FileId,PostIds,MatchedLine
bd35e69bad33eced75ef8759a06aaa3eba9dcb70,21690608,    # from https://stackoverflow.com/questions/21690608/numpy-inpaint-nans-interpolate-and-extrapolate
072132d11a08bd8ff71854801131d03350a702f0,3279809,        // This is based on the idea here: http://stackoverflow.com/questions/3279809/global-custom-events-in-jquery
4d0c905585424028ce5c481f6753f11886ac13f3,2641111,    //https://stackoverflow.com/questions/2641111/where-is-android-os-systemproperties
b4385bb8eec81478db0e4670468fa07ddce9a715,4725668,			<!-- http://stackoverflow.com/questions/4725668/how-to-deploy-snapshot-with-sources-and-javadoc -->
29becafcc3b61dd18fe648a0408e140f0fb80fc9,30533007,http://stackoverflow.com/questions/30533007 yes (1)
9f6cab23ffd1600723761bb6689af7fe089cd4b5,992461,        // See http://stackoverflow.com/questions/992461/is-it-possible-to-override-document-cookie-in-webkit
9c7935171c11eaeec05d580b29b24ddc1b8c0ad1,386294,    # length 254 of user field decided by http://stackoverflow.com/questions/386294/what-is-the-maximum-length-of-a-valid-email-address
1633779030717a37499186b3e657e542904506cb,470832,"    ""/**\n * @file url.js\n */\nimport document from 'global/document';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param  {String} url The url to parse\n * @return {Object}     An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n  const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n  // add the url to an anchor and let the browser parse the URL\n  let a = document.createElement('a');\n  a.href = url;\n\n  // IE8 (and 9?) Fix\n  // ie8 doesn't parse the URL correctly until the anchor is actually\n  // added to the body, and an innerHTML is needed to trigger the parsing\n  let addToBody = (a.host === '' && a.protocol !== 'file:');\n  let div;\n  if (addToBody) {\n    div = document.createElement('div');\n    div.innerHTML = `<a href=\""${url}\""></a>`;\n    a = div.firstChild;\n    // prevent the div from affecting layout\n    div.setAttribute('style', 'display:none; position:absolute;');\n    document.body.appendChild(div);\n  }\n\n  // Copy the specific URL properties to a new object\n  // This is also needed for IE8 because the anchor loses its\n  // properties when it's removed from the dom\n  let details = {};\n  for (var i = 0; i < props.length; i++) {\n    details[props[i]] = a[props[i]];\n  }\n\n  // IE9 adds the port to the host property unlike everyone else. If\n  // a port identifier is added for standard ports, strip it.\n  if (details.protocol === 'http:') {\n    details.host = details.host.replace(/:80$/, '');\n  }\n  if (details.protocol === 'https:') {\n    details.host = details.host.replace(/:443$/, '');\n  }\n\n  if (addToBody) {\n    document.body.removeChild(div);\n  }\n\n  return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param  {String} url URL to make absolute\n * @return {String}     Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n  // Check if absolute URL\n  if (!url.match(/^https?:\\/\\//)) {\n    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n    let div = document.createElement('div');\n    div.innerHTML = `<a href=\""${url}\"">x</a>`;\n    url = div.firstChild.href;\n  }\n\n  return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String}    path    The fileName path like '/path/to/file.mp4'\n * @returns {String}          The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n  if(typeof path === 'string'){\n    let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n    let pathParts = splitPathRe.exec(path);\n\n    if (pathParts) {\n      return pathParts.pop().toLowerCase();\n    }\n  }\n\n  return '';\n};\n"","
d44d2a161985061d46065d903a2e6bc0a1a20728,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
ff622d84be939f0ca16398d4aab6ba283f3d3dc9,3330919,        // http://stackoverflow.com/a/3330919)
a59d1e66d80d386efbdcb8ef595dada0e7fdd87b,1554099,  - speed up the Android emulator http://stackoverflow.com/questions/1554099/why-is-the-android-emulator-so-slow-how-can-we-speed-up-the-android-emulator
b8bc629a2626239d0969ef589a696109137084f4,54233886,"     * <a href=""https://stackoverflow.com/questions/54233886/pdfbox-header-in-all-pages-using-easytable"">"
5633f793a5440a430c61374e6ee32646aac5659a,3018313,// based off: http://stackoverflow.com/questions/3018313/algorithm-to-convert-rgb-to-hsv-and-hsv-to-rgb-in-range-0-255-for-both
a2ea211fc3f46b0109c612ccb80d080eb8fcf04e,931207,   * http://stackoverflow.com/questions/931207/is-there-a-jquery-autogrow-plugin-for-text-fields
2f60d2ccf17be75f0185e89bfacc19121f2ed8ff,38417581,"<p>还有一篇我提问的SO😢：<a href=""http://stackoverflow.com/questions/38417581/draw-bezier-curve-with-relative-path-in-svg"" target=""_blank"" rel=""noopener"">Draw Bezier Curve with relative path in SVG</a></p>"
5add7dd4de3ca884cc6964c56a5a59c2ada429b5,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
925f5e52dd85497d42546f1ca21ce1ba2072ea83,15123182,  // http://stackoverflow.com/questions/15123182/mongoose-findoneandupdate-not-working
a7c877a477c9bbd2ecb3c363f81634e1142e5d96,14058193,//http://stackoverflow.com/questions/14058193/remove-empty-properties-falsy-values-from-object-with-underscore-js
415370682f0e534f4c6130457b1cd329acec04b0,25698268,"    ""link"": ""http://stackoverflow.com/questions/25698268/dimple-js-d3-js-how-to-toggle-series"","
25f8c5939f6e4d313e1eac2f14fc9c8fa1efbc8e,1434451,      // https://stackoverflow.com/q/1434451
944e723948b5571776d9f6c4ee0b0f5602d92e9c,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
cb654305bb0b8456bbfc3f5d4cd2c3eee86f9705,4325673,            // Ensures that clicking outside the modal closes it. Ref: http://stackoverflow.com/a/4325673/978369
001abd2aa4a7ad5938b56eb83aa51bbf3ae060d6,12866060,"{""version"":3,""file"":""ZeroClipboard.Core.min.js"",""sources"":[""ZeroClipboard.Core.js""],""names"":[""window"",""undefined"",""_currentElement"",""_window"",""_document"",""document"",""_navigator"",""navigator"",""_setTimeout"",""setTimeout"",""_parseInt"",""Number"",""parseInt"",""_parseFloat"",""parseFloat"",""_isNaN"",""isNaN"",""_encodeURIComponent"",""encodeURIComponent"",""_Math"",""Math"",""_Date"",""Date"",""_ActiveXObject"",""ActiveXObject"",""_slice"",""Array"",""prototype"",""slice"",""_keys"",""Object"",""keys"",""_hasOwn"",""hasOwnProperty"",""_defineProperty"",""defineProperty"",""x"",""value"",""y"",""e"",""_args"",""argumentsObj"",""call"",""_inArray"",""item"",""array"",""fromIndex"",""indexOf"",""i"",""len"",""length"",""_extend"",""arg"",""prop"",""src"",""copy"",""args"",""arguments"",""target"",""_deepCopy"",""source"",""_pick"",""obj"",""newObj"",""_omit"",""_objectKeys"",""push"",""_deleteOwnProperties"",""_makeReadOnly"",""writable"",""configurable"",""enumerable"",""_now"",""time"",""now"",""getTime"",""_containedBy"",""el"",""ancestorEl"",""nodeType"",""parentNode"",""_flashState"",""bridge"",""version"",""pluginType"",""disabled"",""outdated"",""unavailable"",""deactivated"",""overdue"",""ready"",""_minimumFlashVersion"",""_handlers"",""_clipData"",""_clipDataFormatMap"",""_eventMessages"",""error"",""flash-disabled"",""flash-outdated"",""flash-unavailable"",""flash-deactivated"",""flash-overdue"",""_swfPath"",""jsDir"",""tmpJsPath"",""jsPath"",""swfPath"",""currentScript"",""scripts"",""getElementsByTagName"",""readyState"",""split"",""lastIndexOf"",""_globalConfig"",""trustedDomains"",""location"",""host"",""cacheBust"",""forceEnhancedClipboard"",""flashLoadTimeout"",""autoActivate"",""bubbleEvents"",""containerId"",""containerClass"",""swfObjectId"",""hoverClass"",""activeClass"",""forceHandCursor"",""title"",""zIndex"",""_config"",""options"",""test"",""_isValidHtml4Id"",""Error"",""_state"",""browser"",""flash"",""zeroclipboard"",""ZeroClipboard"",""config"",""_isFlashUnusable"",""_on"",""eventType"",""listener"",""events"",""added"",""toLowerCase"",""on"",""replace"",""emit"",""type"",""errorTypes"",""name"",""_off"",""foundIndex"",""perEventHandlers"",""off"",""splice"",""_listeners"",""_emit"",""event"",""eventCopy"",""returnVal"",""tmp"",""_createEvent"",""_preprocessEvent"",""_dispatchCallbacks"",""this"",""_mapClipDataToFlash"",""data"",""formatMap"",""_create"",""isFlashUnusable"",""maxWait"",""_embedSwf"",""_destroy"",""clearData"",""deactivate"",""_unembedSwf"",""_setData"",""format"",""dataObj"",""dataFormat"",""_clearData"",""_activate"",""element"",""_removeClass"",""_addClass"",""newTitle"",""getAttribute"",""htmlBridge"",""_getHtmlBridge"",""setAttribute"",""useHandCursor"",""_getStyle"",""_setHandCursor"",""_reposition"",""_deactivate"",""removeAttribute"",""style"",""left"",""top"",""width"",""id"",""relatedTarget"",""currentTarget"",""timeStamp"",""msg"",""message"",""minimumVersion"",""clipboardData"",""setData"",""_mapClipResultsFromFlash"",""_getRelatedTarget"",""_addMouseData"",""targetEl"",""relatedTargetId"",""getElementById"",""srcElement"",""fromElement"",""toElement"",""pos"",""_getDOMObjectPosition"",""screenLeft"",""screenX"",""screenTop"",""screenY"",""scrollLeft"",""body"",""documentElement"",""scrollTop"",""pageX"",""_stageX"",""pageY"",""_stageY"",""clientX"",""clientY"",""moveX"",""movementX"",""moveY"",""movementY"",""offsetX"",""offsetY"",""layerX"",""layerY"",""_shouldPerformAsync"",""_dispatchCallback"",""func"",""context"",""async"",""apply"",""wildcardTypeHandlers"",""specificTypeHandlers"",""handlers"",""concat"",""originalContext"",""handleEvent"",""sourceIsSwf"",""_source"",""wasDeactivated"",""textContent"",""htmlContent"",""outerHTML"",""innerHTML"",""innerText"",""_safeActiveElement"",""focus"",""activate"",""_fireMouseEvent"",""bubbles"",""cancelable"",""doc"",""ownerDocument"",""defaults"",""view"",""defaultView"",""canBubble"",""detail"",""button"",""which"",""createEvent"",""dispatchEvent"",""ctrlKey"",""altKey"",""shiftKey"",""metaKey"",""initMouseEvent"",""_createHtmlBridge"",""container"",""createElement"",""className"",""position"",""height"",""_getSafeZIndex"",""flashBridge"",""nodeName"",""allowScriptAccess"",""_determineScriptAccess"",""allowNetworking"",""flashvars"",""_vars"",""swfUrl"",""_cacheBust"",""divToBeReplaced"",""appendChild"",""tmpDiv"",""oldIE"",""firstChild"",""replaceChild"",""display"",""removeSwfFromIE"",""removeChild"",""clipData"",""newClipData"",""text"",""html"",""rtf"",""clipResults"",""newResults"",""tmpHash"",""path"",""domain"",""domains"",""str"",""trustedOriginsExpanded"",""_extractDomain"",""protocol"",""join"",""originOrUrl"",""protocolIndex"",""pathIndex"",""_extractAllDomains"",""origins"",""resultsArray"",""currentDomain"",""configOptions"",""swfDomain"",""trustedOrigins"",""activeElement"",""err"",""classList"",""contains"",""add"",""classNames"",""setClass"",""c"",""cl"",""remove"",""getComputedStyle"",""getPropertyValue"",""_getZoomFactor"",""rect"",""physicalWidth"",""logicalWidth"",""zoomFactor"",""getBoundingClientRect"",""right"",""offsetWidth"",""round"",""info"",""pageXOffset"",""pageYOffset"",""leftBorderWidth"",""clientLeft"",""topBorderWidth"",""clientTop"",""bottom"",""enabled"",""setHandCursor"",""val"",""_detectFlashSupport"",""parseFlashVersion"",""desc"",""matches"",""match"",""isPepperFlash"",""flashPlayerFileName"",""inspectPlugin"",""plugin"",""hasFlash"",""flashVersion"",""description"",""filename"",""isPPAPI"",""ax"",""mimeType"",""isActiveX"",""plugins"",""mimeTypes"",""enabledPlugin"",""GetVariable"",""e1"",""e2"",""e3"",""_createClient"",""state"",""create"",""destroy"",""define"",""amd"",""module"",""exports""],""mappings"":""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"",""sourcesContent"":[""/*!\n * ZeroClipboard\n * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n * Copyright (c) 2014 Jon Rohan, James M. Greene\n * Licensed MIT\n * http://zeroclipboard.org/\n * v2.0.3\n */\n(function(window, undefined) {\n  \""use strict\"";\n  /**\n * Store references to critically important global functions that may be\n * overridden on certain web pages.\n */\n  var _window = window, _document = _window.document, _navigator = _window.navigator, _setTimeout = _window.setTimeout, _parseInt = _window.Number.parseInt || _window.parseInt, _parseFloat = _window.Number.parseFloat || _window.parseFloat, _isNaN = _window.Number.isNaN || _window.isNaN, _encodeURIComponent = _window.encodeURIComponent, _Math = _window.Math, _Date = _window.Date, _ActiveXObject = _window.ActiveXObject, _slice = _window.Array.prototype.slice, _keys = _window.Object.keys, _hasOwn = _window.Object.prototype.hasOwnProperty, _defineProperty = function() {\n    if (typeof _window.Object.defineProperty === \""function\"" && function() {\n      try {\n        var x = {};\n        _window.Object.defineProperty(x, \""y\"", {\n          value: \""z\""\n        });\n        return x.y === \""z\"";\n      } catch (e) {\n        return false;\n      }\n    }()) {\n      return _window.Object.defineProperty;\n    }\n  }();\n  /**\n * Convert an `arguments` object into an Array.\n *\n * @returns The arguments as an Array\n * @private\n */\n  var _args = function(argumentsObj) {\n    return _slice.call(argumentsObj, 0);\n  };\n  /**\n * Get the index of an item in an Array.\n *\n * @returns The index of an item in the Array, or `-1` if not found.\n * @private\n */\n  var _inArray = function(item, array, fromIndex) {\n    if (typeof array.indexOf === \""function\"") {\n      return array.indexOf(item, fromIndex);\n    }\n    var i, len = array.length;\n    if (typeof fromIndex === \""undefined\"") {\n      fromIndex = 0;\n    } else if (fromIndex < 0) {\n      fromIndex = len + fromIndex;\n    }\n    for (i = fromIndex; i < len; i++) {\n      if (_hasOwn.call(array, i) && array[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  /**\n * Shallow-copy the owned, enumerable properties of one object over to another, similar to jQuery's `$.extend`.\n *\n * @returns The target object, augmented\n * @private\n */\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, args = _args(arguments), target = args[0] || {};\n    for (i = 1, len = args.length; i < len; i++) {\n      if ((arg = args[i]) != null) {\n        for (prop in arg) {\n          if (_hasOwn.call(arg, prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target === copy) {\n              continue;\n            }\n            if (copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  /**\n * Return a deep copy of the source object or array.\n *\n * @returns Object or Array\n * @private\n */\n  var _deepCopy = function(source) {\n    var copy, i, len, prop;\n    if (typeof source !== \""object\"" || source == null) {\n      copy = source;\n    } else if (typeof source.length === \""number\"") {\n      copy = [];\n      for (i = 0, len = source.length; i < len; i++) {\n        if (_hasOwn.call(source, i)) {\n          copy[i] = _deepCopy(source[i]);\n        }\n      }\n    } else {\n      copy = {};\n      for (prop in source) {\n        if (_hasOwn.call(source, prop)) {\n          copy[prop] = _deepCopy(source[prop]);\n        }\n      }\n    }\n    return copy;\n  };\n  /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to keep.\n * The inverse of `_omit`, mostly. The big difference is that these properties do NOT need to be enumerable to\n * be kept.\n *\n * @returns A new filtered object.\n * @private\n */\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to omit.\n * The inverse of `_pick`.\n *\n * @returns A new filtered object.\n * @private\n */\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (_inArray(prop, keys) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  /**\n * Get all of an object's owned, enumerable property names. Does NOT include prototype properties.\n *\n * @returns An Array of property names.\n * @private\n */\n  var _objectKeys = function(obj) {\n    if (obj == null) {\n      return [];\n    }\n    if (_keys) {\n      return _keys(obj);\n    }\n    var keys = [];\n    for (var prop in obj) {\n      if (_hasOwn.call(obj, prop)) {\n        keys.push(prop);\n      }\n    }\n    return keys;\n  };\n  /**\n * Remove all owned, enumerable properties from an object.\n *\n * @returns The original object without its owned, enumerable properties.\n * @private\n */\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (_hasOwn.call(obj, prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  /**\n * Mark an existing property as read-only.\n * @private\n */\n  var _makeReadOnly = function(obj, prop) {\n    if (prop in obj && typeof _defineProperty === \""function\"") {\n      _defineProperty(obj, prop, {\n        value: obj[prop],\n        writable: false,\n        configurable: true,\n        enumerable: true\n      });\n    }\n  };\n  /**\n * Get the current time in milliseconds since the epoch.\n *\n * @returns Number\n * @private\n */\n  var _now = function(Date) {\n    return function() {\n      var time;\n      if (Date.now) {\n        time = Date.now();\n      } else {\n        time = new Date().getTime();\n      }\n      return time;\n    };\n  }(_Date);\n  /**\n * Determine if an element is contained within another element.\n *\n * @returns Boolean\n * @private\n */\n  var _containedBy = function(el, ancestorEl) {\n    if (el && el.nodeType === 1 && ancestorEl && (ancestorEl.nodeType === 1 || ancestorEl.nodeType === 9)) {\n      do {\n        if (el === ancestorEl) {\n          return true;\n        }\n        el = el.parentNode;\n      } while (el);\n    }\n    return false;\n  };\n  /**\n * Keep track of the state of the Flash object.\n * @private\n */\n  var _flashState = {\n    bridge: null,\n    version: \""0.0.0\"",\n    pluginType: \""unknown\"",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  /**\n * The minimum Flash Player version required to use ZeroClipboard completely.\n * @readonly\n * @private\n */\n  var _minimumFlashVersion = \""11.0.0\"";\n  /**\n * Keep track of all event listener registrations.\n * @private\n */\n  var _handlers = {};\n  /**\n * Keep track of the currently activated element.\n * @private\n */\n  var _currentElement;\n  /**\n * Keep track of data for the pending clipboard transaction.\n * @private\n */\n  var _clipData = {};\n  /**\n * Keep track of data formats for the pending clipboard transaction.\n * @private\n */\n  var _clipDataFormatMap = null;\n  /**\n * The `message` store for events\n * @private\n */\n  var _eventMessages = {\n    ready: \""Flash communication is established\"",\n    error: {\n      \""flash-disabled\"": \""Flash is disabled or not installed\"",\n      \""flash-outdated\"": \""Flash is too outdated to support ZeroClipboard\"",\n      \""flash-unavailable\"": \""Flash is unable to communicate bidirectionally with JavaScript\"",\n      \""flash-deactivated\"": \""Flash is too outdated for your browser and/or is configured as click-to-activate\"",\n      \""flash-overdue\"": \""Flash communication was established but NOT within the acceptable time limit\""\n    }\n  };\n  /**\n * The presumed location of the \""ZeroClipboard.swf\"" file, based on the location\n * of the executing JavaScript file (e.g. \""ZeroClipboard.js\"", etc.).\n * @private\n */\n  var _swfPath = function() {\n    var i, jsDir, tmpJsPath, jsPath, swfPath = \""ZeroClipboard.swf\"";\n    if (!(_document.currentScript && (jsPath = _document.currentScript.src))) {\n      var scripts = _document.getElementsByTagName(\""script\"");\n      if (\""readyState\"" in scripts[0]) {\n        for (i = scripts.length; i--; ) {\n          if (scripts[i].readyState === \""interactive\"" && (jsPath = scripts[i].src)) {\n            break;\n          }\n        }\n      } else if (_document.readyState === \""loading\"") {\n        jsPath = scripts[scripts.length - 1].src;\n      } else {\n        for (i = scripts.length; i--; ) {\n          tmpJsPath = scripts[i].src;\n          if (!tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n          tmpJsPath = tmpJsPath.split(\""#\"")[0].split(\""?\"")[0];\n          tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\""/\"") + 1);\n          if (jsDir == null) {\n            jsDir = tmpJsPath;\n          } else if (jsDir !== tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n        }\n        if (jsDir !== null) {\n          jsPath = jsDir;\n        }\n      }\n    }\n    if (jsPath) {\n      jsPath = jsPath.split(\""#\"")[0].split(\""?\"")[0];\n      swfPath = jsPath.slice(0, jsPath.lastIndexOf(\""/\"") + 1) + swfPath;\n    }\n    return swfPath;\n  }();\n  /**\n * ZeroClipboard configuration defaults for the Core module.\n * @private\n */\n  var _globalConfig = {\n    swfPath: _swfPath,\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceEnhancedClipboard: false,\n    flashLoadTimeout: 3e4,\n    autoActivate: true,\n    bubbleEvents: true,\n    containerId: \""global-zeroclipboard-html-bridge\"",\n    containerClass: \""global-zeroclipboard-container\"",\n    swfObjectId: \""global-zeroclipboard-flash-bridge\"",\n    hoverClass: \""zeroclipboard-is-hover\"",\n    activeClass: \""zeroclipboard-is-active\"",\n    forceHandCursor: false,\n    title: null,\n    zIndex: 999999999\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.config`.\n * @private\n */\n  var _config = function(options) {\n    if (typeof options === \""object\"" && options !== null) {\n      for (var prop in options) {\n        if (_hasOwn.call(options, prop)) {\n          if (/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(prop)) {\n            _globalConfig[prop] = options[prop];\n          } else if (_flashState.bridge == null) {\n            if (prop === \""containerId\"" || prop === \""swfObjectId\"") {\n              if (_isValidHtml4Id(options[prop])) {\n                _globalConfig[prop] = options[prop];\n              } else {\n                throw new Error(\""The specified `\"" + prop + \""` value is not valid as an HTML4 Element ID\"");\n              }\n            } else {\n              _globalConfig[prop] = options[prop];\n            }\n          }\n        }\n      }\n    }\n    if (typeof options === \""string\"" && options) {\n      if (_hasOwn.call(_globalConfig, options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    return _deepCopy(_globalConfig);\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.state`.\n * @private\n */\n  var _state = function() {\n    return {\n      browser: _pick(_navigator, [ \""userAgent\"", \""platform\"", \""appName\"" ]),\n      flash: _omit(_flashState, [ \""bridge\"" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.isFlashUnusable`.\n * @private\n */\n  var _isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.on`.\n * @private\n */\n  var _on = function(eventType, listener) {\n    var i, len, events, added = {};\n    if (typeof eventType === \""string\"" && eventType) {\n      events = eventType.toLowerCase().split(/\\s+/);\n    } else if (typeof eventType === \""object\"" && eventType && typeof listener === \""undefined\"") {\n      for (i in eventType) {\n        if (_hasOwn.call(eventType, i) && typeof i === \""string\"" && i && typeof eventType[i] === \""function\"") {\n          ZeroClipboard.on(i, eventType[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventType = events[i].replace(/^on/, \""\"");\n        added[eventType] = true;\n        if (!_handlers[eventType]) {\n          _handlers[eventType] = [];\n        }\n        _handlers[eventType].push(listener);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \""ready\""\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \""disabled\"", \""outdated\"", \""unavailable\"", \""deactivated\"", \""overdue\"" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]] === true) {\n            ZeroClipboard.emit({\n              type: \""error\"",\n              name: \""flash-\"" + errorTypes[i]\n            });\n            break;\n          }\n        }\n      }\n    }\n    return ZeroClipboard;\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.off`.\n * @private\n */\n  var _off = function(eventType, listener) {\n    var i, len, foundIndex, events, perEventHandlers;\n    if (arguments.length === 0) {\n      events = _objectKeys(_handlers);\n    } else if (typeof eventType === \""string\"" && eventType) {\n      events = eventType.split(/\\s+/);\n    } else if (typeof eventType === \""object\"" && eventType && typeof listener === \""undefined\"") {\n      for (i in eventType) {\n        if (_hasOwn.call(eventType, i) && typeof i === \""string\"" && i && typeof eventType[i] === \""function\"") {\n          ZeroClipboard.off(i, eventType[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventType = events[i].toLowerCase().replace(/^on/, \""\"");\n        perEventHandlers = _handlers[eventType];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (listener) {\n            foundIndex = _inArray(listener, perEventHandlers);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = _inArray(listener, perEventHandlers, foundIndex);\n            }\n          } else {\n            perEventHandlers.length = 0;\n          }\n        }\n      }\n    }\n    return ZeroClipboard;\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.handlers`.\n * @private\n */\n  var _listeners = function(eventType) {\n    var copy;\n    if (typeof eventType === \""string\"" && eventType) {\n      copy = _deepCopy(_handlers[eventType]) || null;\n    } else {\n      copy = _deepCopy(_handlers);\n    }\n    return copy;\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.emit`.\n * @private\n */\n  var _emit = function(event) {\n    var eventCopy, returnVal, tmp;\n    event = _createEvent(event);\n    if (!event) {\n      return;\n    }\n    if (_preprocessEvent(event)) {\n      return;\n    }\n    if (event.type === \""ready\"" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \""error\"",\n        name: \""flash-overdue\""\n      });\n    }\n    eventCopy = _extend({}, event);\n    _dispatchCallbacks.call(this, eventCopy);\n    if (event.type === \""copy\"") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.create`.\n * @private\n */\n  var _create = function() {\n    if (typeof _flashState.ready !== \""boolean\"") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \""number\"" && maxWait >= 0) {\n        _setTimeout(function() {\n          if (typeof _flashState.deactivated !== \""boolean\"") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \""error\"",\n              name: \""flash-deactivated\""\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _embedSwf();\n    }\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.destroy`.\n * @private\n */\n  var _destroy = function() {\n    ZeroClipboard.clearData();\n    ZeroClipboard.deactivate();\n    ZeroClipboard.emit(\""destroy\"");\n    _unembedSwf();\n    ZeroClipboard.off();\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.setData`.\n * @private\n */\n  var _setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \""object\"" && format && typeof data === \""undefined\"") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \""string\"" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (typeof dataFormat === \""string\"" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === \""string\"" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.clearData`.\n * @private\n */\n  var _clearData = function(format) {\n    if (typeof format === \""undefined\"") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \""string\"" && _hasOwn.call(_clipData, format)) {\n      delete _clipData[format];\n    }\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.activate`.\n * @private\n */\n  var _activate = function(element) {\n    if (!(element && element.nodeType === 1)) {\n      return;\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      if (_currentElement !== element) {\n        _removeClass(_currentElement, _globalConfig.hoverClass);\n      }\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    var newTitle = element.getAttribute(\""title\"") || _globalConfig.title;\n    if (typeof newTitle === \""string\"" && newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\""title\"", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \""cursor\"") === \""pointer\"";\n    _setHandCursor(useHandCursor);\n    _reposition();\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.deactivate`.\n * @private\n */\n  var _deactivate = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\""title\"");\n      htmlBridge.style.left = \""0px\"";\n      htmlBridge.style.top = \""-9999px\"";\n      htmlBridge.style.width = \""1px\"";\n      htmlBridge.style.top = \""1px\"";\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  /**\n * Check if a value is a valid HTML4 `ID` or `Name` token.\n * @private\n */\n  var _isValidHtml4Id = function(id) {\n    return typeof id === \""string\"" && id && /^[A-Za-z][A-Za-z0-9_:\\-\\.]*$/.test(id);\n  };\n  /**\n * Create or update an `event` object, based on the `eventType`.\n * @private\n */\n  var _createEvent = function(event) {\n    var eventType;\n    if (typeof event === \""string\"" && event) {\n      eventType = event;\n      event = {};\n    } else if (typeof event === \""object\"" && event && typeof event.type === \""string\"" && event.type) {\n      eventType = event.type;\n    }\n    if (!eventType) {\n      return;\n    }\n    _extend(event, {\n      type: eventType.toLowerCase(),\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null,\n      timeStamp: event.timeStamp || _now() || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \""error\"" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \""ready\"") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \""error\"") {\n      if (/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          target: null,\n          minimumVersion: _minimumFlashVersion\n        });\n      }\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version\n        });\n      }\n    }\n    if (event.type === \""copy\"") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \""aftercopy\"") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    event = _addMouseData(event);\n    return event;\n  };\n  /**\n * Get a relatedTarget from the target's `data-clipboard-target` attribute\n * @private\n */\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\""data-clipboard-target\"");\n    return relatedTargetId ? _document.getElementById(relatedTargetId) : null;\n  };\n  /**\n * Add element and position data to `MouseEvent` instances\n * @private\n */\n  var _addMouseData = function(event) {\n    if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n      var srcElement = event.target;\n      var fromElement = event.type === \""_mouseover\"" && event.relatedTarget ? event.relatedTarget : undefined;\n      var toElement = event.type === \""_mouseout\"" && event.relatedTarget ? event.relatedTarget : undefined;\n      var pos = _getDOMObjectPosition(srcElement);\n      var screenLeft = _window.screenLeft || _window.screenX || 0;\n      var screenTop = _window.screenTop || _window.screenY || 0;\n      var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft;\n      var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop;\n      var pageX = pos.left + (typeof event._stageX === \""number\"" ? event._stageX : 0);\n      var pageY = pos.top + (typeof event._stageY === \""number\"" ? event._stageY : 0);\n      var clientX = pageX - scrollLeft;\n      var clientY = pageY - scrollTop;\n      var screenX = screenLeft + clientX;\n      var screenY = screenTop + clientY;\n      var moveX = typeof event.movementX === \""number\"" ? event.movementX : 0;\n      var moveY = typeof event.movementY === \""number\"" ? event.movementY : 0;\n      delete event._stageX;\n      delete event._stageY;\n      _extend(event, {\n        srcElement: srcElement,\n        fromElement: fromElement,\n        toElement: toElement,\n        screenX: screenX,\n        screenY: screenY,\n        pageX: pageX,\n        pageY: pageY,\n        clientX: clientX,\n        clientY: clientY,\n        x: clientX,\n        y: clientY,\n        movementX: moveX,\n        movementY: moveY,\n        offsetX: 0,\n        offsetY: 0,\n        layerX: 0,\n        layerY: 0\n      });\n    }\n    return event;\n  };\n  /**\n * Determine if an event's registered handlers should be execute synchronously or asynchronously.\n *\n * @returns {boolean}\n * @private\n */\n  var _shouldPerformAsync = function(event) {\n    var eventType = event && typeof event.type === \""string\"" && event.type || \""\"";\n    return !/^(?:(?:before)?copy|destroy)$/.test(eventType);\n  };\n  /**\n * Control if a callback should be executed asynchronously or not.\n *\n * @returns `undefined`\n * @private\n */\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      _setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  /**\n * Handle the actual dispatching of events to client instances.\n *\n * @returns `undefined`\n * @private\n */\n  var _dispatchCallbacks = function(event) {\n    if (!(typeof event === \""object\"" && event && event.type)) {\n      return;\n    }\n    var async = _shouldPerformAsync(event);\n    var wildcardTypeHandlers = _handlers[\""*\""] || [];\n    var specificTypeHandlers = _handlers[event.type] || [];\n    var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);\n    if (handlers && handlers.length) {\n      var i, len, func, context, eventCopy, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \""string\"" && typeof _window[func] === \""function\"") {\n          func = _window[func];\n        }\n        if (typeof func === \""object\"" && func && typeof func.handleEvent === \""function\"") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \""function\"") {\n          eventCopy = _extend({}, event);\n          _dispatchCallback(func, context, [ eventCopy ], async);\n        }\n      }\n    }\n    return this;\n  };\n  /**\n * Preprocess any special behaviors, reactions, or state changes after receiving this event.\n * Executes only once per event emitted, NOT once per client.\n * @private\n */\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement || null;\n    var sourceIsSwf = event._source === \""swf\"";\n    delete event._source;\n    switch (event.type) {\n     case \""error\"":\n      if (_inArray(event.name, [ \""flash-disabled\"", \""flash-outdated\"", \""flash-deactivated\"", \""flash-overdue\"" ])) {\n        _extend(_flashState, {\n          disabled: event.name === \""flash-disabled\"",\n          outdated: event.name === \""flash-outdated\"",\n          unavailable: event.name === \""flash-unavailable\"",\n          deactivated: event.name === \""flash-deactivated\"",\n          overdue: event.name === \""flash-overdue\"",\n          ready: false\n        });\n      }\n      break;\n\n     case \""ready\"":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \""copy\"":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\""text/html\""] || _clipData[\""text/plain\""]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\""text/plain\"", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\""text/html\"", htmlContent);\n        }\n      } else if (!_clipData[\""text/plain\""] && event.target && (textContent = event.target.getAttribute(\""data-clipboard-text\""))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\""text/plain\"", textContent);\n      }\n      break;\n\n     case \""aftercopy\"":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \""_mouseover\"":\n      ZeroClipboard.activate(element);\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n          _fireMouseEvent(_extend({}, event, {\n            type: \""mouseenter\"",\n            bubbles: false,\n            cancelable: false\n          }));\n        }\n        _fireMouseEvent(_extend({}, event, {\n          type: \""mouseover\""\n        }));\n      }\n      break;\n\n     case \""_mouseout\"":\n      ZeroClipboard.deactivate();\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n          _fireMouseEvent(_extend({}, event, {\n            type: \""mouseleave\"",\n            bubbles: false,\n            cancelable: false\n          }));\n        }\n        _fireMouseEvent(_extend({}, event, {\n          type: \""mouseout\""\n        }));\n      }\n      break;\n\n     case \""_mousedown\"":\n      _addClass(element, _globalConfig.activeClass);\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        _fireMouseEvent(_extend({}, event, {\n          type: event.type.slice(1)\n        }));\n      }\n      break;\n\n     case \""_mouseup\"":\n      _removeClass(element, _globalConfig.activeClass);\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        _fireMouseEvent(_extend({}, event, {\n          type: event.type.slice(1)\n        }));\n      }\n      break;\n\n     case \""_click\"":\n     case \""_mousemove\"":\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        _fireMouseEvent(_extend({}, event, {\n          type: event.type.slice(1)\n        }));\n      }\n      break;\n    }\n    if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n      return true;\n    }\n  };\n  /**\n * Dispatch a synthetic MouseEvent.\n *\n * @returns `undefined`\n * @private\n */\n  var _fireMouseEvent = function(event) {\n    if (!(event && typeof event.type === \""string\"" && event)) {\n      return;\n    }\n    var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = {\n      view: doc.defaultView || _window,\n      canBubble: true,\n      cancelable: true,\n      detail: event.type === \""click\"" ? 1 : 0,\n      button: typeof event.which === \""number\"" ? event.which - 1 : typeof event.button === \""number\"" ? event.button : doc.createEvent ? 0 : 1\n    }, args = _extend(defaults, event);\n    if (!target) {\n      return;\n    }\n    if (doc.createEvent && target.dispatchEvent) {\n      args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ];\n      e = doc.createEvent(\""MouseEvents\"");\n      if (e.initMouseEvent) {\n        e.initMouseEvent.apply(e, args);\n        e._source = \""js\"";\n        target.dispatchEvent(e);\n      }\n    }\n  };\n  /**\n * Create the HTML bridge element to embed the Flash object into.\n * @private\n */\n  var _createHtmlBridge = function() {\n    var container = _document.createElement(\""div\"");\n    container.id = _globalConfig.containerId;\n    container.className = _globalConfig.containerClass;\n    container.style.position = \""absolute\"";\n    container.style.left = \""0px\"";\n    container.style.top = \""-9999px\"";\n    container.style.width = \""1px\"";\n    container.style.height = \""1px\"";\n    container.style.zIndex = \""\"" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  /**\n * Get the HTML element container that wraps the Flash bridge object/element.\n * @private\n */\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \""OBJECT\"" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  /**\n * Create the SWF object.\n *\n * @returns The SWF object reference.\n * @private\n */\n  var _embedSwf = function() {\n    var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge);\n    if (!flashBridge) {\n      var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \""never\"" ? \""none\"" : \""all\"";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = _document.createElement(\""div\"");\n      container.appendChild(divToBeReplaced);\n      _document.body.appendChild(container);\n      var tmpDiv = _document.createElement(\""div\"");\n      var oldIE = _flashState.pluginType === \""activex\"";\n      tmpDiv.innerHTML = '<object id=\""' + _globalConfig.swfObjectId + '\"" name=\""' + _globalConfig.swfObjectId + '\"" ' + 'width=\""100%\"" height=\""100%\"" ' + (oldIE ? 'classid=\""clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\""' : 'type=\""application/x-shockwave-flash\"" data=\""' + swfUrl + '\""') + \"">\"" + (oldIE ? '<param name=\""movie\"" value=\""' + swfUrl + '\""/>' : \""\"") + '<param name=\""allowScriptAccess\"" value=\""' + allowScriptAccess + '\""/>' + '<param name=\""allowNetworking\"" value=\""' + allowNetworking + '\""/>' + '<param name=\""menu\"" value=\""false\""/>' + '<param name=\""wmode\"" value=\""transparent\""/>' + '<param name=\""flashvars\"" value=\""' + flashvars + '\""/>' + \""</object>\"";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = _document[_globalConfig.swfObjectId];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge && container) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n    return flashBridge;\n  };\n  /**\n * Destroy the SWF object.\n * @private\n */\n  var _unembedSwf = function() {\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \""activex\"" && \""readyState\"" in flashBridge) {\n          flashBridge.style.display = \""none\"";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \""function\"") {\n                  flashBridge[prop] = null;\n                }\n              }\n              if (flashBridge.parentNode) {\n                flashBridge.parentNode.removeChild(flashBridge);\n              }\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              _setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          if (flashBridge.parentNode) {\n            flashBridge.parentNode.removeChild(flashBridge);\n          }\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n  };\n  /**\n * Map the data format names of the \""clipData\"" to Flash-friendly names.\n *\n * @returns A new transformed object.\n * @private\n */\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \""object\"" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === \""string\"" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \""text/plain\"":\n         case \""text\"":\n         case \""air:text\"":\n         case \""flash:text\"":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \""text/html\"":\n         case \""html\"":\n         case \""air:html\"":\n         case \""flash:html\"":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \""application/rtf\"":\n         case \""text/rtf\"":\n         case \""rtf\"":\n         case \""richtext\"":\n         case \""air:rtf\"":\n         case \""flash:rtf\"":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  /**\n * Map the data format names from Flash-friendly names back to their original \""clipData\"" names (via a format mapping).\n *\n * @returns A new transformed object.\n * @private\n */\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \""object\"" && clipResults && typeof formatMap === \""object\"" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (_hasOwn.call(clipResults, prop)) {\n        if (prop !== \""success\"" && prop !== \""data\"") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  /**\n * Will look at a path, and will create a \""?noCache={time}\"" or \""&noCache={time}\""\n * query param string to return. Does NOT append that string to the original path.\n * This is useful because ExternalInterface often breaks when a Flash SWF is cached.\n *\n * @returns The `noCache` query param with necessary \""?\""/\""&\"" prefix.\n * @private\n */\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\""?\"") === -1 ? \""?\"" : \""&\"") + \""noCache=\"" + _now();\n    } else {\n      return \""\"";\n    }\n  };\n  /**\n * Creates a query string for the FlashVars param.\n * Does NOT include the cache-busting query param.\n *\n * @returns FlashVars query string\n * @private\n */\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \""\"", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \""string\"") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \""object\"" && \""length\"" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === \""string\"") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \""*\"") {\n            trustedOriginsExpanded = [ domain ];\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \""//\"" + domain, _window.location.protocol + \""//\"" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \""trustedOrigins=\"" + _encodeURIComponent(trustedOriginsExpanded.join(\"",\""));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \""&\"" : \""\"") + \""forceEnhancedClipboard=true\"";\n    }\n    if (typeof options.swfObjectId === \""string\"" && options.swfObjectId) {\n      str += (str ? \""&\"" : \""\"") + \""swfObjectId=\"" + _encodeURIComponent(options.swfObjectId);\n    }\n    return str;\n  };\n  /**\n * Extract the domain (e.g. \""github.com\"") from an origin (e.g. \""https://github.com\"") or\n * URL (e.g. \""https://github.com/zeroclipboard/zeroclipboard/\"").\n *\n * @returns the domain\n * @private\n */\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \""\"") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \""\"");\n    if (originOrUrl === \""\"") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\""//\"");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\""/\"");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \"".swf\"") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  /**\n * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`.\n *\n * @returns The appropriate script access level.\n * @private\n */\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins, resultsArray) {\n      var i, len, tmp;\n      if (origins == null || resultsArray[0] === \""*\"") {\n        return;\n      }\n      if (typeof origins === \""string\"") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \""object\"" && typeof origins.length === \""number\"")) {\n        return;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \""*\"") {\n            resultsArray.length = 0;\n            resultsArray.push(\""*\"");\n            break;\n          }\n          if (_inArray(tmp, resultsArray) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = [];\n      _extractAllDomains(configOptions.trustedOrigins, trustedDomains);\n      _extractAllDomains(configOptions.trustedDomains, trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \""*\"") {\n          return \""always\"";\n        }\n        if (_inArray(currentDomain, trustedDomains) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \""sameDomain\"";\n          }\n          return \""always\"";\n        }\n      }\n      return \""never\"";\n    };\n  }();\n  /**\n * Get the currently active/focused DOM element.\n *\n * @returns the currently active/focused element, or `null`\n * @private\n */\n  var _safeActiveElement = function() {\n    try {\n      return _document.activeElement;\n    } catch (err) {\n      return null;\n    }\n  };\n  /**\n * Add a class to an element, if it doesn't already have it.\n *\n * @returns The element, with its new class added.\n * @private\n */\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \""string\"") {\n      var classNames = (value || \""\"").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \"" \"" + element.className + \"" \"", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\"" \"" + classNames[c] + \"" \"") < 0) {\n              setClass += \"" \"" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \""\"");\n        }\n      }\n    }\n    return element;\n  };\n  /**\n * Remove a class from an element, if it has it.\n *\n * @returns The element, with its class removed.\n * @private\n */\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (typeof value === \""string\"" && value) {\n      var classNames = value.split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        var className = (\"" \"" + element.className + \"" \"").replace(/[\\n\\t]/g, \"" \"");\n        for (var c = 0, cl = classNames.length; c < cl; c++) {\n          className = className.replace(\"" \"" + classNames[c] + \"" \"", \"" \"");\n        }\n        element.className = className.replace(/^\\s+|\\s+$/g, \""\"");\n      }\n    }\n    return element;\n  };\n  /**\n * Attempt to interpret the element's CSS styling. If `prop` is `\""cursor\""`,\n * then we assume that it should be a hand (\""pointer\"") cursor if the element\n * is an anchor element (\""a\"" tag).\n *\n * @returns The computed style property.\n * @private\n */\n  var _getStyle = function(el, prop) {\n    var value = _window.getComputedStyle(el, null).getPropertyValue(prop);\n    if (prop === \""cursor\"") {\n      if (!value || value === \""auto\"") {\n        if (el.nodeName === \""A\"") {\n          return \""pointer\"";\n        }\n      }\n    }\n    return value;\n  };\n  /**\n * Get the zoom factor of the browser. Always returns `1.0`, except at\n * non-default zoom levels in IE<8 and some older versions of WebKit.\n *\n * @returns Floating unit percentage of the zoom factor (e.g. 150% = `1.5`).\n * @private\n */\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof _document.body.getBoundingClientRect === \""function\"") {\n      rect = _document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = _document.body.offsetWidth;\n      zoomFactor = _Math.round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  /**\n * Get the DOM positioning info of an element.\n *\n * @returns Object containing the element's position, width, and height.\n * @private\n */\n  var _getDOMObjectPosition = function(obj) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\""pageXOffset\"" in _window && \""pageYOffset\"" in _window) {\n        pageXOffset = _window.pageXOffset;\n        pageYOffset = _window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = _Math.round(_document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = _Math.round(_document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = _document.documentElement.clientLeft || 0;\n      var topBorderWidth = _document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \""width\"" in rect ? rect.width : rect.right - rect.left;\n      info.height = \""height\"" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  /**\n * Reposition the Flash object to cover the currently activated element.\n *\n * @returns `undefined`\n * @private\n */\n  var _reposition = function() {\n    var htmlBridge;\n    if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) {\n      var pos = _getDOMObjectPosition(_currentElement);\n      _extend(htmlBridge.style, {\n        width: pos.width + \""px\"",\n        height: pos.height + \""px\"",\n        top: pos.top + \""px\"",\n        left: pos.left + \""px\"",\n        zIndex: \""\"" + _getSafeZIndex(_globalConfig.zIndex)\n      });\n    }\n  };\n  /**\n * Sends a signal to the Flash object to display the hand cursor if `true`.\n *\n * @returns `undefined`\n * @private\n */\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true) {\n      if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === \""function\"") {\n        _flashState.bridge.setHandCursor(enabled);\n      } else {\n        _flashState.ready = false;\n      }\n    }\n  };\n  /**\n * Get a safe value for `zIndex`\n *\n * @returns an integer, or \""auto\""\n * @private\n */\n  var _getSafeZIndex = function(val) {\n    if (/^(?:auto|inherit)$/.test(val)) {\n      return val;\n    }\n    var zIndex;\n    if (typeof val === \""number\"" && !_isNaN(val)) {\n      zIndex = val;\n    } else if (typeof val === \""string\"") {\n      zIndex = _getSafeZIndex(_parseInt(val, 10));\n    }\n    return typeof zIndex === \""number\"" ? zIndex : \""auto\"";\n  };\n  /**\n * Detect the Flash Player status, version, and plugin type.\n *\n * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code}\n * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}\n *\n * @returns `undefined`\n * @private\n */\n  var _detectFlashSupport = function(ActiveXObject) {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \""\"";\n    /**\n   * Derived from Apple's suggested sniffer.\n   * @param {String} desc e.g. \""Shockwave Flash 7.0 r61\""\n   * @returns {String} \""7.0.61\""\n   * @private\n   */\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\"".\"");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \""chrome.plugin\"");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (_navigator.plugins && _navigator.plugins.length) {\n      plugin = _navigator.plugins[\""Shockwave Flash\""];\n      inspectPlugin(plugin);\n      if (_navigator.plugins[\""Shockwave Flash 2.0\""]) {\n        hasFlash = true;\n        flashVersion = \""2.0.0.11\"";\n      }\n    } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) {\n      mimeType = _navigator.mimeTypes[\""application/x-shockwave-flash\""];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \""undefined\"") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\""ShockwaveFlash.ShockwaveFlash.7\"");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\""$version\""));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\""ShockwaveFlash.ShockwaveFlash.6\"");\n          hasFlash = true;\n          flashVersion = \""6.0.21\"";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\""ShockwaveFlash.ShockwaveFlash\"");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\""$version\""));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion);\n    _flashState.version = flashVersion || \""0.0.0\"";\n    _flashState.pluginType = isPPAPI ? \""pepper\"" : isActiveX ? \""activex\"" : hasFlash ? \""netscape\"" : \""unknown\"";\n  };\n  /**\n * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later.\n */\n  _detectFlashSupport(_ActiveXObject);\n  /**\n * A shell constructor for `ZeroClipboard` client instances.\n *\n * @constructor\n */\n  var ZeroClipboard = function() {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard();\n    }\n    if (typeof ZeroClipboard._createClient === \""function\"") {\n      ZeroClipboard._createClient.apply(this, _args(arguments));\n    }\n  };\n  /**\n * The ZeroClipboard library's version number.\n *\n * @static\n * @readonly\n * @property {string}\n */\n  ZeroClipboard.version = \""2.0.3\"";\n  _makeReadOnly(ZeroClipboard, \""version\"");\n  /**\n * Update or get a copy of the ZeroClipboard global configuration.\n * Returns a copy of the current/updated configuration.\n *\n * @returns Object\n * @static\n */\n  ZeroClipboard.config = function() {\n    return _config.apply(this, _args(arguments));\n  };\n  /**\n * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard.\n *\n * @returns Object\n * @static\n */\n  ZeroClipboard.state = function() {\n    return _state.apply(this, _args(arguments));\n  };\n  /**\n * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc.\n *\n * @returns Boolean\n * @static\n */\n  ZeroClipboard.isFlashUnusable = function() {\n    return _isFlashUnusable.apply(this, _args(arguments));\n  };\n  /**\n * Register an event listener.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n  ZeroClipboard.on = function() {\n    return _on.apply(this, _args(arguments));\n  };\n  /**\n * Unregister an event listener.\n * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`.\n * If no `eventType` is provided, it will unregister all listeners for every event type.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n  ZeroClipboard.off = function() {\n    return _off.apply(this, _args(arguments));\n  };\n  /**\n * Retrieve event listeners for an `eventType`.\n * If no `eventType` is provided, it will retrieve all listeners for every event type.\n *\n * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`\n */\n  ZeroClipboard.handlers = function() {\n    return _listeners.apply(this, _args(arguments));\n  };\n  /**\n * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners.\n *\n * @returns For the \""copy\"" event, returns the Flash-friendly \""clipData\"" object; otherwise `undefined`.\n * @static\n */\n  ZeroClipboard.emit = function() {\n    return _emit.apply(this, _args(arguments));\n  };\n  /**\n * Create and embed the Flash object.\n *\n * @returns The Flash object\n * @static\n */\n  ZeroClipboard.create = function() {\n    return _create.apply(this, _args(arguments));\n  };\n  /**\n * Self-destruct and clean up everything, including the embedded Flash object.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.destroy = function() {\n    return _destroy.apply(this, _args(arguments));\n  };\n  /**\n * Set the pending data for clipboard injection.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.setData = function() {\n    return _setData.apply(this, _args(arguments));\n  };\n  /**\n * Clear the pending data for clipboard injection.\n * If no `format` is provided, all pending data formats will be cleared.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.clearData = function() {\n    return _clearData.apply(this, _args(arguments));\n  };\n  /**\n * Sets the current HTML object that the Flash object should overlay. This will put the global\n * Flash object on top of the current element; depending on the setup, this may also set the\n * pending clipboard text data as well as the Flash object's wrapping element's title attribute\n * based on the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.activate = function() {\n    return _activate.apply(this, _args(arguments));\n  };\n  /**\n * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on\n * the setup, this may also unset the Flash object's wrapping element's title attribute based on\n * the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.deactivate = function() {\n    return _deactivate.apply(this, _args(arguments));\n  };\n  if (typeof define === \""function\"" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \""object\"" && module && typeof module.exports === \""object\"" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this;\n}());""]}"
a28c47362ce4e376bd3f0331da7174f8fae3c199,7768006,    (!navigator.userAgent.includes('Safari') || navigator.userAgent.includes('Chrome')) && // Exclude genuine Safari: http://stackoverflow.com/a/7768006/271577
dc03bba8e53e24863e7ee12ccff6099c4b311d1f,4785776,    // Code from: http://stackoverflow.com/a/4785776/459349
82c68e213b53316fc2b0cca2287879335862889d,5717090,        // see http://stackoverflow.com/questions/5717090/double-checked-locking-in-android/5717977
ace8157c1fb2278bf4bbc475356966d6cec0a813,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
48e9a3e70e230650e5bc8bb007f50bcfca641722,766809,            // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
8c7f7b57bd75642b2d642462a2bece42a9004051,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
1ebeafc3131f95e1db99bb0d876c1aca345a6987,9897358,Random Stack Overflow answer: https://stackoverflow.com/questions/9897358/ocaml-menhir-compiling-writing
23c98ca52c703c7083665678ccf08e5cf3317c18,6833165,        # see http://stackoverflow.com/a/6833165/204900
d2f02e7deaa38c4e8d566ac25edd5ea0144866a4,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
9187d1b3cf4a931559224e3027ed4117dbb7999d,3330919,        // http://stackoverflow.com/a/3330919)
638e519d80f195aabacc8a7860575b96dc83566c,13351534,    // inspired by http://stackoverflow.com/questions/13350875/three-js-width-of-view/13351534#13351534
8b4126a5e727c81e7d748ccf6032109af755f043,3187287,* To sign in a user with devise by the following 2 lines (See : [Making functional tests in Rails with Devise](http://stackoverflow.com/questions/3187287/making-functional-tests-in-rails-with-devise) )
d84a96ef03128a13ccf7b0372d4b0de389bc466b,6491019,// http://stackoverflow.com/questions/6491019/struct-sigaction-incomplete-error
a32276162939b5c8afdd1355870ceb7a213e7a06,5438771,          // choice as per http://stackoverflow.com/a/5438771.
ebe037b8dd813890fdb6304deca29a6be022f2de,1986966,// http://stackoverflow.com/questions/1986966/does-s0-point-to-contiguous-characters-in-a-stdstring
220f71d0924b51de555609af5f5e851461a678ab,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
0d3b5b31fffa88eedd4a129b289d9dd652340a3e,6346120,                // https://stackoverflow.com/questions/6346120/how-do-i-drop-multiple-columns-with-a-single-alter-table-statement
e98757061b2b758e6c9c4de1a765e1bd8379079b,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
3f53cb0a935f26283e326962dd31e72d94ea631b,8560994,                // http://stackoverflow.com/questions/8560994/stdmake-shared-stdunique-ptr-and-move-constructors
64a66a116c445b12ba63c7764dddb9f5a92542ae,3446170,        // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
52f4ee23c37cb61081a64e9f341b883596639565,41825004,            // See http://stackoverflow.com/a/41825004/536
eb61929ef0c2ce07e243add2857b717a7da8c0e2,1042827,    // from: https://stackoverflow.com/a/1042827/1275924
e3855c952aa2756b22045bde42b767e8392bf844,863865,# see http://stackoverflow.com/a/863865
1f9fc9a435de9c978a5b443254b1caffeeb516b5,25244631,# http://stackoverflow.com/questions/25244631/models-arent-loaded-yet-error-while-populating-in-django-1-8-and-python-2-7-8
0a4b1160904999130ccf003f5ca72a2aceeee611,1225238,// thanks http://stackoverflow.com/a/1225238/1025836
88e8abbd2f668b210b43651332035fae060cab66,27928,https://stackoverflow.com/questions/27928/calculate-distance-between-two-latitude-longitude-points-haversine-formula */
fbfae8b8ea81085f04d1b068221fc63f6cf95d24,26454930,        -- See http://stackoverflow.com/a/26454930/615030
0c35adda2c69cab174038520ab3759363cf01e5f,16188420,        # Scrolling code taken from: https://stackoverflow.com/questions/16188420/python-tkinter-scrollbar-for-frame
64f6842a09a1dc12974f44dc5d4015d2e9399850,1383363,[http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal](http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal)
09c894db884f60b356609789f89bfd84d39aee00,9824172,# http://stackoverflow.com/questions/9824172/find-out-whether-celery-task-exists
8d3a589fa16d85e4826752aa28bff2950562ee8d,8783996,"<div class=""post-menu""><a href=""https://stackoverflow.com/a/8783996"" title=""short permalink to this answer"" class=""short-link"" id=""link-post-8783996"">share</a><span class=""lsep"">|</span><a href=""https://stackoverflow.com/posts/8783996/edit"" class=""suggest-edit-post"" title="""">improve this answer</a></div>                    </td>"
5268423ec683fa65bbbe1b455680c6d14a2fa7f4,2161159,  // http://stackoverflow.com/questions/2161159/get-script-path
3d4b0989ec4cdd7ad6586250db684000bdbdb053,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
8f1a8b3c65da34efb377465dd7a4ea815f7546bf,4060004,    // Source: http://stackoverflow.com/questions/4060004/calculate-age-in-javascript#answer-7091965
8c4612560b1a5fc052c87a39628c1cbbb553dd7a,12772927,# http://stackoverflow.com/questions/12772927/specifying-an-online-image-in-sphinx-restructuredtext-format
4a728abc9974275a52030c913cc15ac034bb48ec,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
2ca873094521f0ab9fcfc7a579f7a7c0bc0c8b8d,6121495 6121146,"6819436,comment,6818371,6819359,4,0,danieldk,,,""Indeed, and Haskell itself is translated into the (very simple) Core language:<p><a href=""""http://stackoverflow.com/questions/6121146/reading-ghc-core/6121495#6121495"""" rel=""""nofollow"""">http://stackoverflow.com/questions/6121146/reading-ghc-core/...</a>"",1385734644"
a865910a4f45c9e4bd76a94e4ce0f723ce24f7cb,494348,    * https://stackoverflow.com/a/494348/1081396
323ca18d9b920f9a243faececa8a78f7bfa32f5c,4882349,#HOW TO PARSE THE ARGUMENTS.. SOURCE - http://stackoverflow.com/questions/4882349/parsing-shell-script-arguments
576c5c6be890dfbaa1ccfaf3a57cc024f27059c9,21706030,        # http://stackoverflow.com/questions/21706030/pandas-groupby-agg-function-column-dtype-error
3a3323d9ab9683f17dedaede9eb755a7f3e51d1e,17202128,"{""eras"":{""e-53"":""53 versions back"",""e-52"":""52 versions back"",""e-51"":""51 versions back"",""e-50"":""50 versions back"",""e-49"":""49 versions back"",""e-48"":""48 versions back"",""e-47"":""47 versions back"",""e-46"":""46 versions back"",""e-45"":""45 versions back"",""e-44"":""44 versions back"",""e-43"":""43 versions back"",""e-42"":""42 versions back"",""e-41"":""41 versions back"",""e-40"":""40 versions back"",""e-39"":""39 versions back"",""e-38"":""38 versions back"",""e-37"":""37 versions back"",""e-36"":""36 versions back"",""e-35"":""35 versions back"",""e-34"":""34 versions back"",""e-33"":""33 versions back"",""e-32"":""32 versions back"",""e-31"":""31 versions back"",""e-30"":""30 versions back"",""e-29"":""29 versions back"",""e-28"":""28 versions back"",""e-27"":""27 versions back"",""e-26"":""26 versions back"",""e-25"":""25 versions back"",""e-24"":""24 versions back"",""e-23"":""23 versions back"",""e-22"":""22 versions back"",""e-21"":""21 versions back"",""e-20"":""20 versions back"",""e-19"":""19 versions back"",""e-18"":""18 versions back"",""e-17"":""17 versions back"",""e-16"":""16 versions back"",""e-15"":""15 versions back"",""e-14"":""14 versions back"",""e-13"":""13 versions back"",""e-12"":""12 versions back"",""e-11"":""11 versions back"",""e-10"":""10 versions back"",""e-9"":""9 versions back"",""e-8"":""8 versions back"",""e-7"":""7 versions back"",""e-6"":""6 versions back"",""e-5"":""5 versions back"",""e-4"":""4 versions back"",""e-3"":""3 versions back"",""e-2"":""2 versions back"",""e-1"":""Previous version"",""e0"":""Current"",""e1"":""Near future"",""e2"":""Farther future"",""e3"":""3 versions ahead""},""agents"":{""ie"":{""browser"":""IE"",""abbr"":""IE"",""prefix"":""ms"",""type"":""desktop"",""usage_global"":{""5.5"":0.009298,""6"":0.0233113,""7"":0.0233113,""8"":0.377643,""9"":0.242438,""10"":0.242438,""11"":3.56197},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""5.5"",""6"",""7"",""8"",""9"",""10"",""11"",null,null,null]},""edge"":{""browser"":""Edge"",""abbr"":""Edge"",""prefix"":""ms"",""type"":""desktop"",""usage_global"":{""12"":0.05436,""13"":0.14949,""14"":1.48584,""15"":0},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""12"",""13"",""14"",""15"",null,null]},""firefox"":{""browser"":""Firefox"",""abbr"":""FF"",""prefix"":""moz"",""type"":""desktop"",""usage_global"":{""2"":0.01812,""3"":0.02718,""3.5"":0.004534,""3.6"":0.01812,""4"":0.00453,""5"":0.004879,""6"":0.020136,""7"":0.005725,""8"":0.00906,""9"":0.00533,""10"":0.00453,""11"":0.00906,""12"":0.00906,""13"":0.004486,""14"":0.00453,""15"":0.02265,""16"":0.00906,""17"":0.00453,""18"":0.01812,""19"":0.00453,""20"":0.00453,""21"":0.02265,""22"":0.00453,""23"":0.02265,""24"":0.00906,""25"":0.04077,""26"":0.00906,""27"":0.00906,""28"":0.00906,""29"":0.01359,""30"":0.00906,""31"":0.02718,""32"":0.00906,""33"":0.01359,""34"":0.01359,""35"":0.01812,""36"":0.01812,""37"":0.02265,""38"":0.05436,""39"":0.02265,""40"":0.02265,""41"":0.02718,""42"":0.02718,""43"":0.07701,""44"":0.04077,""45"":0.17214,""46"":0.06342,""47"":0.20838,""48"":0.21744,""49"":0.14949,""50"":0.3624,""51"":4.59342,""52"":0.15855,""53"":0.00906,""54"":0,""55"":0},""versions"":[null,""2"",""3"",""3.5"",""3.6"",""4"",""5"",""6"",""7"",""8"",""9"",""10"",""11"",""12"",""13"",""14"",""15"",""16"",""17"",""18"",""19"",""20"",""21"",""22"",""23"",""24"",""25"",""26"",""27"",""28"",""29"",""30"",""31"",""32"",""33"",""34"",""35"",""36"",""37"",""38"",""39"",""40"",""41"",""42"",""43"",""44"",""45"",""46"",""47"",""48"",""49"",""50"",""51"",""52"",""53"",""54"",""55""]},""chrome"":{""browser"":""Chrome"",""abbr"":""Chr."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""4"":0.004706,""5"":0.004879,""6"":0.004879,""7"":0.005591,""8"":0.005591,""9"":0.005591,""10"":0.004534,""11"":0.02265,""12"":0.00453,""13"":0.004879,""14"":0.004706,""15"":0.004706,""16"":0.00453,""17"":0.00453,""18"":0.01359,""19"":0.02265,""20"":0.00453,""21"":0.01359,""22"":0.03624,""23"":0.00906,""24"":0.05436,""25"":0.01359,""26"":0.01812,""27"":0.01359,""28"":0.01359,""29"":0.01812,""30"":0.02718,""31"":0.0906,""32"":0.0453,""33"":0.03171,""34"":0.03624,""35"":0.06342,""36"":0.12684,""37"":0.02718,""38"":0.03624,""39"":0.03624,""40"":0.02718,""41"":0.04077,""42"":0.04077,""43"":0.2265,""44"":0.04983,""45"":0.33069,""46"":0.05436,""47"":0.14949,""48"":0.0906,""49"":1.37712,""50"":0.15855,""51"":0.33069,""52"":0.14949,""53"":0.23103,""54"":0.31257,""55"":6.01584,""56"":17.2548,""57"":0.08154,""58"":0.05889,""59"":0,""60"":0},""versions"":[""4"",""5"",""6"",""7"",""8"",""9"",""10"",""11"",""12"",""13"",""14"",""15"",""16"",""17"",""18"",""19"",""20"",""21"",""22"",""23"",""24"",""25"",""26"",""27"",""28"",""29"",""30"",""31"",""32"",""33"",""34"",""35"",""36"",""37"",""38"",""39"",""40"",""41"",""42"",""43"",""44"",""45"",""46"",""47"",""48"",""49"",""50"",""51"",""52"",""53"",""54"",""55"",""56"",""57"",""58"",""59"",""60""]},""safari"":{""browser"":""Safari"",""abbr"":""Saf."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""3.1"":0,""3.2"":0.008692,""4"":0.00906,""5"":0.03624,""5.1"":0.05436,""6"":0.00906,""6.1"":0.03624,""7"":0.02265,""7.1"":0.00906,""8"":0.09513,""9"":0.10419,""9.1"":0.43035,""10"":1.5402,""10.1"":0.00906,""TP"":0},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""3.1"",""3.2"",""4"",""5"",""5.1"",""6"",""6.1"",""7"",""7.1"",""8"",""9"",""9.1"",""10"",""10.1"",""TP"",null]},""opera"":{""browser"":""Opera"",""abbr"":""Op."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""9"":0.0082,""9.5-9.6"":0.00685,""10.0-10.1"":0.01812,""10.5"":0.008392,""10.6"":0.004706,""11"":0.016581,""11.1"":0.006229,""11.5"":0.004879,""11.6"":0.004534,""12"":0.00453,""12.1"":0.07248,""15"":0.00685,""16"":0.00685,""17"":0.00685,""18"":0.005014,""19"":0.006015,""20"":0.004879,""21"":0.006597,""22"":0.006597,""23"":0.013434,""24"":0.006702,""25"":0.006015,""26"":0.005595,""27"":0.004706,""28"":0.00906,""29"":0.004879,""30"":0.004879,""31"":0.00533,""32"":0.005152,""33"":0.005014,""34"":0.009758,""35"":0.004879,""36"":0.03171,""37"":0.00906,""38"":0.02718,""39"":0.004534,""40"":0.004534,""41"":0.00453,""42"":0.17214,""43"":0.28539,""44"":0,""45"":0},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,""9"",""9.5-9.6"",""10.0-10.1"",""10.5"",""10.6"",""11"",""11.1"",""11.5"",""11.6"",""12"",""12.1"",""15"",""16"",""17"",""18"",""19"",""20"",""21"",""22"",""23"",""24"",""25"",""26"",""27"",""28"",""29"",""30"",""31"",""32"",""33"",""34"",""35"",""36"",""37"",""38"",""39"",""40"",""41"",""42"",""43"",""44"",""45"",null],""prefix_exceptions"":{""9"":""o"",""9.5-9.6"":""o"",""10.0-10.1"":""o"",""10.5"":""o"",""10.6"":""o"",""11"":""o"",""11.1"":""o"",""11.5"":""o"",""11.6"":""o"",""12"":""o"",""12.1"":""o""}},""ios_saf"":{""browser"":""iOS Safari"",""abbr"":""iOS"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""3.2"":0,""4.0-4.1"":0,""4.2-4.3"":0,""5.0-5.1"":0,""6.0-6.1"":0.0551829,""7.0-7.1"":0.243638,""8"":0,""8.1-8.4"":0.332138,""9.0-9.2"":0.0655947,""9.3"":0.900626,""10.0-10.2"":8.216},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""3.2"",""4.0-4.1"",""4.2-4.3"",""5.0-5.1"",""6.0-6.1"",""7.0-7.1"",""8"",""8.1-8.4"",""9.0-9.2"",""9.3"",""10.0-10.2"",null,null,null]},""op_mini"":{""browser"":""Opera Mini"",""abbr"":""O.Mini"",""prefix"":""o"",""type"":""mobile"",""usage_global"":{""all"":3.30212},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""all"",null,null,null]},""android"":{""browser"":""Android Browser"",""abbr"":""And."",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""2.1"":0,""2.2"":0,""2.3"":0,""3"":0,""4"":0.0506998,""4.1"":0.152099,""4.2-4.3"":0.48976,""4.4"":1.08193,""4.4.3-4.4.4"":0.610426,""53"":0},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""2.1"",""2.2"",""2.3"",""3"",""4"",""4.1"",""4.2-4.3"",""4.4"",""4.4.3-4.4.4"",""53"",null,null,null]},""bb"":{""browser"":""Blackberry Browser"",""abbr"":""BB"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""7"":0.04923,""10"":0},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""7"",""10"",null,null,null]},""op_mob"":{""browser"":""Opera Mobile"",""abbr"":""O.Mob"",""prefix"":""o"",""type"":""mobile"",""usage_global"":{""10"":0,""11"":0,""11.1"":0,""11.5"":0,""12"":0,""12.1"":0,""37"":0.00722566},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""10"",""11"",""11.1"",""11.5"",""12"",""12.1"",""37"",null,null,null],""prefix_exceptions"":{""37"":""webkit""}},""and_chr"":{""browser"":""Chrome for Android"",""abbr"":""Chr/And."",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""56"":25.6403},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""56"",null,null,null]},""and_ff"":{""browser"":""Firefox for Android"",""abbr"":""FF/And."",""prefix"":""moz"",""type"":""mobile"",""usage_global"":{""51"":0.03829},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""51"",null,null,null]},""ie_mob"":{""browser"":""IE Mobile"",""abbr"":""IE.Mob"",""prefix"":""ms"",""type"":""mobile"",""usage_global"":{""10"":0.0812534,""11"":0.383697},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""10"",""11"",null,null,null]},""and_uc"":{""browser"":""UC Browser for Android"",""abbr"":""UC"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""11"":9.23336},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""11"",null,null,null],""prefix_exceptions"":{""11"":""webkit""}},""samsung"":{""browser"":""Samsung Internet"",""abbr"":""SS"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""4"":3.56644},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""4"",null,null,null]},""and_qq"":{""browser"":""QQ Browser"",""abbr"":""QQ"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""1.2"":0},""versions"":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,""1.2"",null,null,null]}},""statuses"":{""rec"":""W3C Recommendation"",""pr"":""W3C Proposed Recommendation"",""cr"":""W3C Candidate Recommendation"",""wd"":""W3C Working Draft"",""ls"":""WHATWG Living Standard"",""other"":""Other"",""unoff"":""Unofficial / Note""},""cats"":{""CSS"":[""CSS"",""CSS2"",""CSS3""],""HTML5"":[""Canvas"",""HTML5""],""JS API"":[""JS API""],""Other"":[""DOM"",""PNG"",""Other""],""SVG"":[""SVG""]},""updated"":1489983215,""data"":{""png-alpha"":{""title"":""PNG alpha transparency"",""description"":""Semi-transparent areas in PNG files"",""spec"":""http://www.w3.org/TR/PNG/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Portable_Network_Graphics"",""title"":""Wikipedia""},{""url"":""http://dillerdesign.com/experiment/DD_belatedPNG/"",""title"":""Workaround for IE6""}],""categories"":[""PNG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs."",""notes_by_num"":{},""usage_perc_y"":98.34,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""apng"":{""title"":""Animated PNG (APNG)"",""description"":""Like animated GIFs, but allowing 24-bit colors and alpha transparency"",""spec"":""https://wiki.mozilla.org/APNG_Specification"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/APNG"",""title"":""Wikipedia""},{""url"":""https://github.com/davidmz/apng-canvas"",""title"":""Polyfill using canvas""},{""url"":""https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp"",""title"":""Chrome extension providing support""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6513393-apng-animated-png-images-support-firefox-and-sa"",""title"":""Microsoft Edge feature request on UserVoice""},{""url"":""https://addons.opera.com/en/extensions/details/apng/?display=en"",""title"":""Opera extension providing support""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=437662"",""title"":""Chromium issue""}],""categories"":[""PNG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""n"",""56"":""n"",""57"":""n"",""58"":""n"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""53"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""n""},""and_chr"":{""56"":""n""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""n""},""samsung"":{""4"":""n""},""and_qq"":{""1.2"":""n""}},""notes"":""Where support for APNG is missing, only the first frame is displayed"",""notes_by_num"":{},""usage_perc_y"":18.55,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""6691520493125632"",""firefox_id"":"""",""webkit_id"":""""},""video"":{""title"":""Video element"",""description"":""Method of playing videos on webpages (without requiring a plug-in)."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element"",""status"":""ls"",""links"":[{""url"":""https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/"",""title"":""Detailed article on video/audio elements""},{""url"":""http://webmproject.org"",""title"":""WebM format information""},{""url"":""http://camendesign.co.uk/code/video_for_everybody"",""title"":""Video for Everybody""},{""url"":""http://diveintohtml5.info/video.html"",""title"":""Video on the Web - includes info on Android support""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/video.js#video"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/video"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Different browsers have support for different video formats, see sub-features for details.\r\n\r\n"",""notes_by_num"":{""1"":""The Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.""},""usage_perc_y"":94.55,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""<video>"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""audio"":{""title"":""Audio element"",""description"":""Method of playing sound on webpages (without requiring a plug-in)."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#the-audio-element"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/native-audio-in-the-browser/"",""title"":""HTML5 Doctor article""},{""url"":""https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/"",""title"":""Detailed article on video/audio elements""},{""url"":""http://www.jplayer.org/latest/demos/"",""title"":""Demos of audio player that uses the audio element""},{""url"":""http://24ways.org/2010/the-state-of-html5-audio"",""title"":""Detailed article on support""},{""url"":""http://textopia.org/androidsoundformats.html"",""title"":""File format test page""},{""url"":""http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio"",""title"":""The State of HTML5 Audio""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/audio.js#audio"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/audio"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":94.55,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""<audio>"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""contenteditable"":{""title"":""contenteditable attribute (basic support)"",""description"":""Method of making any HTML element editable."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#contenteditable"",""status"":""ls"",""links"":[{""url"":""http://html5demos.com/contenteditable"",""title"":""Demo page""},{""url"":""https://blog.whatwg.org/the-road-to-html-5-contenteditable"",""title"":""WHATWG blog post""},{""url"":""http://accessgarage.wordpress.com/2009/05/08/how-to-hack-your-app-to-make-contenteditable-work/"",""title"":""Blog post on usage problems""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/contentEditable"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""This support only refers to very basic editing capability, implementations vary significantly on how certain elements can be edited."",""notes_by_num"":{},""usage_perc_y"":95.03,""usage_perc_a"":0.03,""ucprefix"":false,""parent"":"""",""keywords"":""iscontenteditable"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""dragndrop"":{""title"":""Drag and Drop"",""description"":""Method of easily dragging and dropping elements on a page, requiring minimal JavaScript."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#dnd"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/native-drag-and-drop/"",""title"":""HTML5 Doctor article""},{""url"":""http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html"",""title"":""Shopping cart demo""},{""url"":""http://html5demos.com/drag"",""title"":""Demo with link blocks""},{""url"":""http://docs.webplatform.org/wiki/dom/DragEvent"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/MihaiValentin/setDragImage-IE"",""title"":""Polyfill for setDragImage in IE""},{""url"":""http://blog.teamtreehouse.com/implementing-native-drag-and-drop"",""title"":""Implementing Native Drag and Drop""},{""url"":""https://github.com/timruffles/ios-html5-drag-drop-shim"",""title"":""iOS/Android shim for HTML 5 drag'n'drop""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6542268-setdragimage-on-datatransfer-of-dragevent"",""title"":""Microsoft Edge setDragImage feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""a #1 #3"",""6"":""a #1 #3"",""7"":""a #1 #3"",""8"":""a #1 #3"",""9"":""a #1 #3"",""10"":""a #2 #3"",""11"":""a #2 #3""},""edge"":{""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n"",""10.0-10.2"":""n""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""53"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""y"",""37"":""n""},""and_chr"":{""56"":""n""},""and_ff"":{""51"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""n""},""samsung"":{""4"":""n""},""and_qq"":{""1.2"":""n""}},""notes"":""`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM elements attached to the DOM and within the viewport of the browser for `.setDragImage`."",""notes_by_num"":{""1"":""Partial support refers to no support for the `dataTransfer.files` or `.types` objects"",""2"":""Partial support refers to not supporting `.setDragImage`"",""3"":""Partial support refers to limited supported formats for `dataTransfer.setData`/`getData`.""},""usage_perc_y"":38.04,""usage_perc_a"":6.17,""ucprefix"":false,""parent"":"""",""keywords"":""draganddrop, draggable"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""internationalization"":{""title"":""Internationalization API"",""description"":""Locale-sensitive collation (string comparison), number formatting, and date and time formatting."",""spec"":""http://www.ecma-international.org/ecma-402/1.0/"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"",""title"":""MDN reference""},{""url"":""http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/"",""title"":""The ECMAScript Internationalization API""},{""url"":""http://code.tutsplus.com/tutorials/working-with-intl--cms-21082"",""title"":""Working With Intl""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=90906"",""title"":""WebKit tracking bug""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1215247"",""title"":""Firefox for Android tracking bug""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""n""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""11"":""n""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":80.97,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""Intl,Collator,NumberFormat,DateTimeFormat"",""ie_id"":""ecmascriptinternationalizationapi"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""specification-internationalization-api""},""queryselector"":{""title"":""querySelector/querySelectorAll"",""description"":""Method of accessing DOM elements using CSS selectors"",""spec"":""https://dom.spec.whatwg.org/#dom-parentnode-queryselector"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/element.querySelector"",""title"":""MDN article on querySelector""},{""url"":""https://developer.mozilla.org/En/DOM/Element.querySelectorAll"",""title"":""MDN article on querySelectorAll""},{""url"":""http://cjihrig.com/blog/javascripts-selectors-api/"",""title"":""Blog post""},{""url"":""http://docs.webplatform.org/wiki/css/selectors_api/querySelector"",""title"":""WebPlatform Docs""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE8 is due to being limited to [CSS 2.1 selectors](/#feat=css-sel2) and a small subset of [CSS 3 selectors](/#feat=css-sel3) (see notes there). Additionally, it will have trouble with selectors including unrecognized tags (for example HTML5 ones).""},""usage_perc_y"":97.88,""usage_perc_a"":0.38,""ucprefix"":false,""parent"":"""",""keywords"":""query,selectors,selectors api,document.queryselector"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""getelementsbyclassname"":{""title"":""getElementsByClassName"",""description"":""Method of accessing DOM elements by class name"",""spec"":""https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname"",""status"":""ls"",""links"":[{""url"":""http://www.quirksmode.org/dom/tests/basics.html#getElementsByClassName"",""title"":""Test page""},{""url"":""http://docs.webplatform.org/wiki/dom/HTMLElement/getElementsByClassName"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""p"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":97.91,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""byclassname"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""forms"":{""title"":""HTML5 form features"",""description"":""Expanded form options, including things like date pickers, sliders, validation, placeholders and multiple file uploads. Previously known as \""Web forms 2.0\""."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#forms"",""status"":""ls"",""links"":[{""url"":""https://miketaylr.com/code/input-type-attr.html"",""title"":""HTML5 inputs and attribute support page""},{""url"":""https://github.com/westonruter/webforms2"",""title"":""Cross-browser JS implementation (based on original spec)""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""a"",""11"":""a""},""edge"":{""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a"",""53"":""a"",""54"":""a"",""55"":""a""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a"",""53"":""a"",""54"":""a"",""55"":""a"",""56"":""a"",""57"":""a"",""58"":""a"",""59"":""a"",""60"":""a""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a"",""9.1"":""a"",""10"":""a"",""10.1"":""a"",""TP"":""a""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a"",""10.0-10.2"":""a""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""53"":""a""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""a""},""and_chr"":{""56"":""a""},""and_ff"":{""51"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""a""},""and_qq"":{""1.2"":""a""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":9.39,""usage_perc_a"":84.19,""ucprefix"":false,""parent"":"""",""keywords"":""input,datepicker"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""html5semantic"":{""title"":""New semantic elements"",""description"":""HTML5 offers some new elements, primarily for semantic purposes. The elements include: `section`, `article`, `aside`, `header`, `footer`, `nav`, `figure`, `figcaption`, `time`, `mark` & `main`."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#sections"",""status"":""ls"",""links"":[{""url"":""https://blog.whatwg.org/supporting-new-elements-in-ie"",""title"":""Workaround for IE""},{""url"":""https://blog.whatwg.org/styling-ie-noscript"",""title"":""Alternate workaround""},{""url"":""http://oli.jp/2009/html5-structure3/"",""title"":""Article on structural elements""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-html5-elements"",""title"":""has.js test""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""a #2"",""5.1"":""a #2"",""6"":""a #2"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""a #1"",""9.5-9.6"":""a #1"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""a #1"",""11"":""a #1"",""11.1"":""a #2"",""11.5"":""a #2"",""11.6"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #2"",""4.2-4.3"":""a #2"",""5.0-5.1"":""a #2"",""6.0-6.1"":""a #2"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""a #1""},""android"":{""2.1"":""a #1"",""2.2"":""a #2"",""2.3"":""a #2"",""3"":""a #2"",""4"":""a #2"",""4.1"":""a #2"",""4.2-4.3"":""a #2"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""a #2"",""10"":""a #2""},""op_mob"":{""10"":""a #1"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""a #2"",""11"":""a #2""},""and_uc"":{""11"":""a #2""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to missing the default styling, as technically the elements are considered \""[unknown](https://developer.mozilla.org/en-US/docs/Web/API/HTMLUnknownElement)\"". This is easily taken care of by manually setting the default `display` value for each tag."",""2"":""Partial support refers to only the `<main>` element (added later to the spec) being \""unknown\"", though it can still be used and styled.""},""usage_perc_y"":79.36,""usage_perc_a"":18.57,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-line-clamp"":{""title"":""CSS line-clamp"",""description"":""Proprietary and undocumented CSS property that will contain text to a given amount of lines when used in combination with `display: -webkit-box`. It will end with ellipsis when `text-overflow: ellipsis` is included."",""spec"":""https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-WebKit_SpecificUnsupportedProperties"",""status"":""unoff"",""links"":[{""url"":""http://guerillalabs.co/blog/css-line-clamping.html"",""title"":""Article on cross-browser CSS line clamping""},{""url"":""https://css-tricks.com/line-clampin/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""n""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""u"",""10"":""u"",""11"":""u"",""12"":""u"",""13"":""u"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x"",""53"":""y x"",""54"":""y x"",""55"":""y x"",""56"":""y x"",""57"":""y x"",""58"":""y x"",""59"":""y x"",""60"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x"",""10"":""y x"",""10.1"":""y x"",""TP"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x"",""10.0-10.2"":""y x""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""53"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""y x""},""and_chr"":{""56"":""y x""},""and_ff"":{""51"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""y x""},""samsung"":{""4"":""y x""},""and_qq"":{""1.2"":""y x""}},""notes"":""As there is no specification and the property is dependent on an outdated implementation of flexbox (hence `display: -webkit-box`) it is unlikely that other browsers will support the property as-is, although an alternative solution may at some point replace it.\r\n\r\nOlder (presto-based) versions of the Opera browser have also supported the same effect using the proprietary `-o-ellipsis-lastline;` value for `text-overflow`."",""notes_by_num"":{},""usage_perc_y"":81.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""offline-apps"":{""title"":""Offline web applications"",""description"":""Now deprecated method of defining web page files to be cached using a cache manifest file, allowing them to work offline on subsequent visits to the page. "",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#offline"",""status"":""unoff"",""links"":[{""url"":""http://www.sitepoint.com/offline-web-application-tutorial/"",""title"":""Sitepoint tutorial""},{""url"":""http://diveintohtml5.info/offline.html"",""title"":""Dive Into HTML5 article""},{""url"":""http://hacks.mozilla.org/2010/01/offline-web-applications/"",""title"":""Mozilla Hacks article/demo""},{""url"":""http://docs.webplatform.org/wiki/apis/appcache/ApplicationCache"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""p"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""This technology is being deprecated in favor of [Service Workers](http://caniuse.com/#feat=serviceworkers)"",""notes_by_num"":{},""usage_perc_y"":94.3,""usage_perc_a"":0.03,""ucprefix"":false,""parent"":"""",""keywords"":""appcache,applicationcache,app cache,application cache,online"",""ie_id"":""applicationcache"",""chrome_id"":""6192449487634432"",""firefox_id"":"""",""webkit_id"":""""},""webworkers"":{""title"":""Web Workers"",""description"":""Method of running scripts in the background, isolated from the web page"",""spec"":""https://html.spec.whatwg.org/multipage/workers.html"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/En/Using_web_workers"",""title"":""MDN article""},{""url"":""http://nerget.com/rayjs-mt/rayjs.html"",""title"":""Web Worker demo""},{""url"":""http://code.google.com/p/ie-web-worker/"",""title"":""Polyfill for IE (single threaded)""},{""url"":""http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/"",""title"":""Tutorial""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""y"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":93.61,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""fontface"":{""title"":""@font-face Web fonts"",""description"":""Method of displaying fonts downloaded from websites"",""spec"":""http://www.w3.org/TR/css3-webfonts/"",""status"":""cr"",""links"":[{""url"":""http://webfonts.info"",""title"":""News and information site""},{""url"":""http://en.wikipedia.org/wiki/Web_typography"",""title"":""Wikipedia""},{""url"":""http://www.css3files.com/font/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@font-face"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""a #2"",""4.0-4.1"":""a #2"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Not supported by IE Mobile 9 and below."",""notes_by_num"":{""1"":""Partial support refers to only supporting EOT fonts."",""2"":""Partial support refers to only supporting SVG fonts.""},""usage_perc_y"":94.53,""usage_perc_a"":0.48,""ucprefix"":false,""parent"":"""",""keywords"":""font face"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""eot"":{""title"":""EOT - Embedded OpenType fonts"",""description"":""Type of font that can be derived from a regular font, allowing small files and legal use of high-quality fonts. Usage is restricted by the file being tied to the website"",""spec"":""http://www.w3.org/Submission/EOT/"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Embedded_OpenType"",""title"":""Wikipedia""},{""url"":""http://www.microsoft.com/typography/web/embedding/default.aspx"",""title"":""Example pages""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""n"",""56"":""n"",""57"":""n"",""58"":""n"",""59"":""n"",""60"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n"",""10"":""n"",""10.1"":""n"",""TP"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n"",""10.0-10.2"":""n""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""53"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""n""},""and_chr"":{""56"":""n""},""and_ff"":{""51"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""n""},""samsung"":{""4"":""n""},""and_qq"":{""1.2"":""n""}},""notes"":""Proposal by Microsoft, being considered for W3C standardization."",""notes_by_num"":{},""usage_perc_y"":4.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""woff"":{""title"":""WOFF - Web Open Font Format"",""description"":""Compressed TrueType/OpenType font that contains information about the font's source."",""spec"":""http://www.w3.org/TR/WOFF/"",""status"":""rec"",""links"":[{""url"":""http://hacks.mozilla.org/2009/10/woff/"",""title"":""Mozilla hacks blog post""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n #1"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Reported to be supported in some modified versions of the Android 4.0 browser.""},""usage_perc_y"":93.77,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""multibackgrounds"":{""title"":""CSS3 Multiple backgrounds"",""description"":""Method of using multiple images as a background"",""spec"":""http://www.w3.org/TR/css3-background/"",""status"":""cr"",""links"":[{""url"":""http://www.css3.info/preview/multiple-backgrounds/"",""title"":""Demo & information page""},{""url"":""http://www.css3files.com/background/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/background-image"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":97.86,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""border-image"":{""title"":""CSS3 Border images"",""description"":""Method of using images for borders"",""spec"":""https://www.w3.org/TR/css3-background/#border-images"",""status"":""cr"",""links"":[{""url"":""http://www.css3files.com/border/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/border-image"",""title"":""WebPlatform Docs""},{""url"":""https://developer.mozilla.org//docs/Web/CSS/border-image"",""title"":""Border image on MDN""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y #1"",""13"":""y #1"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a x #2 #3"",""3.6"":""a x #2 #3"",""4"":""a x #2 #3"",""5"":""a x #2 #3"",""6"":""a x #2 #3"",""7"":""a x #2 #3"",""8"":""a x #2 #3"",""9"":""a x #2 #3"",""10"":""a x #2 #3"",""11"":""a x #2 #3"",""12"":""a x #2 #3"",""13"":""a x #2 #3"",""14"":""a x #2 #3"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""a #2"",""39"":""a #2"",""40"":""a #2"",""41"":""a #2"",""42"":""a #2"",""43"":""a #2"",""44"":""a #2"",""45"":""a #2"",""46"":""a #2"",""47"":""a #2"",""48"":""a #2"",""49"":""a #2"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""a x #1 #2 #3 #4"",""5"":""a x #1 #2 #3 #4"",""6"":""a x #1 #2 #3 #4"",""7"":""a x #1 #2 #3 #4"",""8"":""a x #1 #2 #3 #4"",""9"":""a x #1 #2 #3 #4"",""10"":""a x #1 #2 #3 #4"",""11"":""a x #1 #2 #3 #4"",""12"":""a x #1 #2 #3 #4"",""13"":""a x #1 #2 #3 #4"",""14"":""a x #1 #2 #3 #4"",""15"":""a #1 #2 #4"",""16"":""a #1 #2 #4"",""17"":""a #1 #2 #4"",""18"":""a #1 #2 #4"",""19"":""a #1 #2 #4"",""20"":""a #1 #2 #4"",""21"":""a #1 #2 #4"",""22"":""a #1 #2 #4"",""23"":""a #1 #2 #4"",""24"":""a #1 #2 #4"",""25"":""a #1 #2 #4"",""26"":""a #1 #2 #4"",""27"":""a #1 #2 #4"",""28"":""a #1 #2 #4"",""29"":""a #1 #2 #4"",""30"":""a #1 #2"",""31"":""a #1 #2"",""32"":""a #1 #2"",""33"":""a #1 #2"",""34"":""a #1 #2"",""35"":""a #1 #2"",""36"":""a #1 #2"",""37"":""a #1 #2"",""38"":""a #1 #2"",""39"":""a #1 #2"",""40"":""a #1 #2"",""41"":""a #1 #2"",""42"":""a #1 #2"",""43"":""a #1 #2"",""44"":""a #1 #2"",""45"":""a #1 #2"",""46"":""a #1 #2"",""47"":""a #1 #2"",""48"":""a #1 #2"",""49"":""a #1 #2"",""50"":""a #1 #2"",""51"":""a #2"",""52"":""a #2"",""53"":""a #2"",""54"":""a #2"",""55"":""a #2"",""56"":""a #2"",""57"":""a #2"",""58"":""a #2"",""59"":""a #2"",""60"":""a #2""},""safari"":{""3.1"":""a x #1 #2 #3 #4"",""3.2"":""a x #1 #2 #3 #4"",""4"":""a x #1 #2 #3 #4"",""5"":""a x #1 #2 #3 #4"",""5.1"":""a x #1 #2 #3 #4"",""6"":""a #1 #2 #4"",""6.1"":""a #1 #2 #4"",""7"":""a #1 #2 #4"",""7.1"":""a #1 #2 #4"",""8"":""a #1 #2 #4"",""9"":""a #1 #2 #4"",""9.1"":""y #1"",""10"":""y #1"",""10.1"":""y #1"",""TP"":""y #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""a #2 #3 #4"",""10.6"":""a #2 #3 #4"",""11"":""a x #2 #3 #4"",""11.1"":""a x #2 #3 #4"",""11.5"":""a x #2 #3 #4"",""11.6"":""a x #2 #3 #4"",""12"":""a x #2 #3 #4"",""12.1"":""a x #2 #3 #4"",""15"":""a #1 #2"",""16"":""a #1 #2"",""17"":""a #1 #2"",""18"":""a #1 #2"",""19"":""a #1 #2"",""20"":""a #1 #2"",""21"":""a #1 #2"",""22"":""a #1 #2"",""23"":""a #1 #2"",""24"":""a #1 #2"",""25"":""a #1 #2"",""26"":""a #1 #2"",""27"":""a #1 #2"",""28"":""a #1 #2"",""29"":""a #1 #2"",""30"":""a #1 #2"",""31"":""a #1 #2"",""32"":""a #1 #2"",""33"":""a #1 #2"",""34"":""a #1 #2"",""35"":""a #1 #2"",""36"":""a #1 #2"",""37"":""a #1 #2"",""38"":""a #2"",""39"":""a #2"",""40"":""a #2"",""41"":""a #2"",""42"":""a #2"",""43"":""a #2"",""44"":""a #2"",""45"":""a #2""},""ios_saf"":{""3.2"":""a x #1 #2 #3 #4"",""4.0-4.1"":""a x #1 #2 #3 #4"",""4.2-4.3"":""a x #1 #2 #3 #4"",""5.0-5.1"":""a x #1 #2 #3 #4"",""6.0-6.1"":""a #1 #2 #4"",""7.0-7.1"":""a #1 #2 #4"",""8"":""a #1 #2 #4"",""8.1-8.4"":""a #1 #2 #4"",""9.0-9.2"":""a #1 #2 #4"",""9.3"":""y #1"",""10.0-10.2"":""y #1""},""op_mini"":{""all"":""a x #2 #3 #4""},""android"":{""2.1"":""a x #1 #2 #3 #4"",""2.2"":""a x #1 #2 #3 #4"",""2.3"":""a x #1 #2 #3 #4"",""3"":""a x #1 #2 #3 #4"",""4"":""a x #1 #2 #3 #4"",""4.1"":""a x #1 #2 #3 #4"",""4.2-4.3"":""a x #1 #2 #3 #4"",""4.4"":""a #1 #2"",""4.4.3-4.4.4"":""a #1 #2"",""53"":""a #1 #2""},""bb"":{""7"":""a #1 #2 #3 #4"",""10"":""a #1 #2 #4""},""op_mob"":{""10"":""n"",""11"":""a x #2 #3 #4"",""11.1"":""a x #2 #3 #4"",""11.5"":""a x #2 #3 #4"",""12"":""a x #2 #3 #4"",""12.1"":""a x #2 #3 #4"",""37"":""a #1 #2""},""and_chr"":{""56"":""a #2""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""11"":""a #1 #2""},""samsung"":{""4"":""a #1 #2""},""and_qq"":{""1.2"":""a #2""}},""notes"":""Note that both the `border-style` and `border-width` must be specified (not set to `none` or 0) for border-images to work."",""notes_by_num"":{""1"":""Has a bug where `border-image` incorrectly overrides `border-style`. See [test case](http://codepen.io/Savago/pen/yYrgyK), [WebKit bug](https://bugs.webkit.org/show_bug.cgi?id=99922), [discussion](https://github.com/whatwg/compat/issues/17)"",""2"":""Partial support refers to not supporting `border-image-repeat: space`"",""3"":""Partial support refers to supporting the shorthand syntax, but not the individual properties (`border-image-source`, `border-image-slice`, etc). "",""4"":""Partial support refers to not supporting `border-image-repeat: round`""},""usage_perc_y"":21.89,""usage_perc_a"":75.4,""ucprefix"":false,""parent"":"""",""keywords"":""border-image-source,border-image-slice,border-image-repeat,border-image-width,,border-image-outset"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""background-img-opts"":{""title"":""CSS3 Background-image options"",""description"":""New properties to affect background images, including background-clip, background-origin and background-size"",""spec"":""http://www.w3.org/TR/css3-background/#backgrounds"",""status"":""cr"",""links"":[{""url"":""http://www.standardista.com/css3/css3-background-properties"",""title"":""Detailed compatibility tables and demos""},{""url"":""http://www.css3files.com/background/"",""title"":""Information page""},{""url"":""https://github.com/louisremi/background-size-polyfill"",""title"":""Polyfill for IE7-8""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a x"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""a #2 #3"",""3.2"":""a #2 #3"",""4"":""a #2 #3"",""5"":""a #2 #3"",""5.1"":""a #2 #3"",""6"":""a #2 #3"",""6.1"":""a #2 #3"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""a x"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a #3"",""6.0-6.1"":""a"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""a #1""},""android"":{""2.1"":""a x"",""2.2"":""a x #3"",""2.3"":""a x #3"",""3"":""a #3"",""4"":""a #3"",""4.1"":""a #3"",""4.2-4.3"":""a #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Safari also supports the unofficial `-webkit-background-clip: text` (only with prefix)"",""notes_by_num"":{""1"":""Partial support in Opera Mini refers to not supporting background sizing or background attachments. However Opera Mini 7.5 supports background sizing (including cover and contain values)."",""2"":""Partial support in Safari 6 refers to not supporting background sizing offset from edges syntax."",""3"":""Does not support `background-size` values in the `background` shorthand""},""usage_perc_y"":93.56,""usage_perc_a"":4.31,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-table"":{""title"":""CSS Table display"",""description"":""Method of displaying elements as tables, rows, and cells. Includes support for all `display: table-*` properties as well as `display: inline-table`"",""spec"":""http://www.w3.org/TR/CSS21/tables.html"",""status"":""rec"",""links"":[{""url"":""http://www.onenaught.com/posts/201/use-css-displaytable-for-layout"",""title"":""Blog post on usage""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""a #1"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Firefox 2 does not support `inline-table`""},""usage_perc_y"":98.3,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""display:table,table-cell,table-row,table-layout"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-gencontent"":{""title"":""CSS Generated content for pseudo-elements"",""description"":""Method of displaying text or images before or after the given element's contents using the ::before and ::after pseudo-elements. All browsers with support also support the `attr()` notation in the `content` property. "",""spec"":""http://www.w3.org/TR/CSS21/generate.html"",""status"":""rec"",""links"":[{""url"":""http://www.westciv.com/style_master/academy/css_tutorial/advanced/generated_content.html"",""title"":""Guide on usage""},{""url"":""https://dev.opera.com/articles/view/css-generated-content-techniques/"",""title"":""Dev.Opera article""},{""url"":""http://docs.webplatform.org/wiki/css/generated_and_replaced_content"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""For content to appear in pseudo-elements, the `content` property must be set (but may be an empty string)."",""notes_by_num"":{""1"":""IE8 only supports the single-colon CSS 2.1 syntax (i.e. :pseudo-class). It does not support the double-colon CSS3 syntax (i.e. ::pseudo-element).""},""usage_perc_y"":97.94,""usage_perc_a"":0.38,""ucprefix"":false,""parent"":"""",""keywords"":""before,after"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-fixed"":{""title"":""CSS position:fixed"",""description"":""Method of keeping an element in a fixed location regardless of scroll position"",""spec"":""http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning"",""status"":""rec"",""links"":[{""url"":""http://www.css-101.org/fixed-positioning/05.php"",""title"":""Workaround for IE6""},{""url"":""http://bradfrostweb.com/blog/mobile/fixed-position/"",""title"":""Article on mobile support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/position"",""title"":""WebPlatform Docs""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""a #2"",""2.2"":""a #2"",""2.3"":""a #2"",""3"":""y"",""4"":""y #3"",""4.1"":""y #3"",""4.2-4.3"":""y #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older iOS Safari refers to [buggy behavior](http://remysharp.com/2012/05/24/issues-with-position-fixed-scrolling-on-ios/)."",""2"":""Only works in Android 2.1 thru 2.3 by using the following meta tag: <meta name=\""viewport\"" content=\""width=device-width, user-scalable=no\"">."",""3"":""Android 4.0-4.3 [ignore transforms and margin:auto on position:fixed elements](https://codepen.io/mattiacci/pen/mPRKZY).""},""usage_perc_y"":94.74,""usage_perc_a"":0.3,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""beacon"":{""title"":""Beacon API"",""description"":""Allows data to be sent asynchronously to a server with `navigator.sendBeacon`, even after a page was closed. Useful for posting analytics data the moment a user was finished using the page."",""spec"":""http://www.w3.org/TR/beacon/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n"",""10"":""n"",""10.1"":""n"",""TP"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n"",""10.0-10.2"":""n""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""53"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":73.92,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""beacon"",""chrome_id"":""5517433905348608"",""firefox_id"":"""",""webkit_id"":""""},""hashchange"":{""title"":""Hashchange event"",""description"":""Event triggered in JavaScript when the URL's hash has changed (for example: page.html#foo to page.html#bar) "",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#the-hashchangeevent-interface"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.onhashchange"",""title"":""MDN article""},{""url"":""http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx"",""title"":""MSDN article""},{""url"":""http://www.quirksmode.org/dom/events/tests/hashchange.html"",""title"":""Simple demo""},{""url"":""http://github.com/3nr1c/jUri.js"",""title"":""Polyfill""},{""url"":""http://docs.webplatform.org/wiki/dom/Element/hashchange"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5"",""JS API""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""p"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":94.9,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""onhashchange,HashChangeEvent"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-sel2"":{""title"":""CSS 2.1 selectors"",""description"":""Basic CSS selectors including: `*` (universal selector), `>` (child selector), `:first-child`, `:link`, `:visited`, `:active`, `:hover`, `:focus`, `:lang()`, `+` (adjacent sibling selector), `[attr]`, `[attr=\""val\""]`, `[attr~=\""val\""]`, `[attr|=\""bar\""]`, `.foo` (class selector), `#foo` (id selector)"",""spec"":""http://www.w3.org/TR/CSS21/selector.html"",""status"":""rec"",""links"":[{""url"":""http://www.quirksmode.org/css/contents.html"",""title"":""Detailed support information""},{""url"":""http://www.yourhtmlsource.com/stylesheets/advancedselectors.html"",""title"":""Examples of advanced selectors""},{""url"":""http://selectivizr.com"",""title"":""Selectivizr: Polyfill for IE6-8""},{""url"":""http://docs.webplatform.org/wiki/css/selectors"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Support for `:visited` styling [varies across browsers](http://sixrevisions.com/css/visited-pseudo-class-strange/) due to security concerns."",""notes_by_num"":{},""usage_perc_y"":98.34,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""attribute selector"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-sel3"":{""title"":""CSS3 selectors"",""description"":""Advanced element selection using selectors including: `[foo^=\""bar\""]`, `[foo$=\""bar\""]`, `[foo*=\""bar\""]`, `:root`, `:nth-child()`,  `:nth-last-child()`, `nth-of-type`, `nth-last-of-type()`, `:last-child`, `:first-of-type`, `:last-of-type`, `:only-child`, `:only-of-type`, `:empty`, `:target`, `:enabled`, `:disabled`, `:checked`, `:not()`, `~` (general sibling)"",""spec"":""http://www.w3.org/TR/css3-selectors/"",""status"":""rec"",""links"":[{""url"":""http://www.quirksmode.org/css/selectors/"",""title"":""Detailed support information""},{""url"":""http://www.css3.info/selectors-test/"",""title"":""Automated CSS3 selector test""},{""url"":""http://selectivizr.com"",""title"":""Selectivizr: Polyfill for IE6-8""},{""url"":""http://docs.webplatform.org/wiki/css/selectors"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""IE7 and IE8 support only these CSS3 selectors: General siblings (`element1~element2`) and Attribute selectors `[attr^=val]`, `[attr$=val]`, and `[attr*=val]`""},""usage_perc_y"":97.89,""usage_perc_a"":0.4,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-textshadow"":{""title"":""CSS3 Text-shadow"",""description"":""Method of applying one or more shadow or blur effects to text"",""spec"":""http://www.w3.org/TR/css-text-decor-3/#text-shadow-property"",""status"":""cr"",""links"":[{""url"":""http://hacks.mozilla.org/2009/06/text-shadow/"",""title"":""Mozilla hacks article""},{""url"":""https://testdrive-archive.azurewebsites.net/Graphics/hands-on-css3/hands-on_text-shadow.htm"",""title"":""Live editor""},{""url"":""http://www.css3files.com/shadow/#textshadow"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/text-shadow"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""a #2"",""3.2"":""a #2"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""a""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Opera Mini ignores the blur-radius set, so no blur effect is visible. Text-shadow behavior can be somewhat emulated in older IE versions using the non-standard \""dropshadow\"" or \""glow\"" filters."",""notes_by_num"":{""1"":""IE 10+ supports a fourth length value for the shadow's \""spread\"". This is not (yet) part of the specification."",""2"":""Partial support in Safari 3.* refers to not supporting multiple shadows.""},""usage_perc_y"":94.28,""usage_perc_a"":3.36,""ucprefix"":false,""parent"":"""",""keywords"":""text shadow"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-boxshadow"":{""title"":""CSS3 Box-shadow"",""description"":""Method of displaying an inner or outer shadow effect to elements"",""spec"":""http://www.w3.org/TR/css3-background/#box-shadow"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/En/CSS/-moz-box-shadow"",""title"":""MDN article""},{""url"":""http://westciv.com/tools/boxshadows/index.html"",""title"":""Live editor""},{""url"":""http://tests.themasta.com/blogstuff/boxshadowdemo.html"",""title"":""Demo of various effects""},{""url"":""http://www.css3files.com/shadow/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/box-shadow"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""a x #1"",""3.2"":""a x #1"",""4"":""a x #1"",""5"":""y x"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Can be partially emulated in older IE versions using the non-standard \""shadow\"" filter."",""notes_by_num"":{""1"":""Partial support in Safari, iOS Safari and Android Browser refers to missing \""inset\"", blur radius value, and multiple shadow support.""},""usage_perc_y"":94.54,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""box-shadows,boxshadows,box shadow,shaow"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css3-colors"":{""title"":""CSS3 Colors"",""description"":""Method of describing colors using Hue, Saturation and Lightness (hsl()) rather than just RGB, as well as allowing alpha-transparency with rgba() and hsla()."",""spec"":""http://www.w3.org/TR/css3-color/"",""status"":""rec"",""links"":[{""url"":""https://dev.opera.com/articles/view/color-in-opera-10-hsl-rgb-and-alpha-transparency/"",""title"":""Dev.Opera article""},{""url"":""http://www.css3files.com/color/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/color#RGBA_Notation"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""a"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":97.91,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""rgb,hsl,rgba,hsla"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css3-boxsizing"":{""title"":""CSS3 Box-sizing"",""description"":""Method of specifying whether or not an element's borders and padding should be included in size units"",""spec"":""http://www.w3.org/TR/css3-ui/#box-sizing"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/En/CSS/Box-sizing"",""title"":""MDN article""},{""url"":""http://www.456bereastreet.com/archive/201104/controlling_width_with_css3_box-sizing/"",""title"":""Blog post""},{""url"":""https://github.com/Schepp/box-sizing-polyfill"",""title"":""Polyfill for IE""},{""url"":""http://css-tricks.com/box-sizing/"",""title"":""CSS Tricks""},{""url"":""http://docs.webplatform.org/wiki/css/properties/box-sizing"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Firefox currently also supports the `padding-box` in addition to `content-box` and `border-box`, though this value has been removed from the specification."",""notes_by_num"":{},""usage_perc_y"":98.31,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""border-box,content-box"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-mediaqueries"":{""title"":""CSS3 Media Queries"",""description"":""Method of applying styles based on media information. Includes things like page and device dimensions"",""spec"":""http://www.w3.org/TR/css3-mediaqueries/"",""status"":""rec"",""links"":[{""url"":""http://ie.microsoft.com/testdrive/HTML5/85CSS3_MediaQueries/"",""title"":""IE demo page with information""},{""url"":""http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries"",""title"":""Media Queries tutorial""},{""url"":""https://github.com/scottjehl/Respond"",""title"":""Polyfill for IE""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@media"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""a #1 #2"",""3.2"":""a #1 #2"",""4"":""y #1"",""5"":""y #1"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y #1"",""4.0-4.1"":""y #1"",""4.2-4.3"":""y #1"",""5.0-5.1"":""y #1"",""6.0-6.1"":""y #1"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y #1"",""2.2"":""y #1"",""2.3"":""y #1"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support nested media queries"",""2"":""Partial support refers to only acknowledging different media rules on page reload""},""usage_perc_y"":97.88,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""@media"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""multicolumn"":{""title"":""CSS3 Multiple column layout"",""description"":""Method of flowing information in multiple columns"",""spec"":""http://www.w3.org/TR/css3-multicol/"",""status"":""cr"",""links"":[{""url"":""https://dev.opera.com/articles/view/css3-multi-column-layout/"",""title"":""Dev.Opera article""},{""url"":""http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/an-introduction-to-the-css3-multiple-column-layout-module/"",""title"":""Introduction page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/column-width"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/hamsterbacke23/multicolumn-polyfill"",""title"":""Polyfill""},{""url"":""https://www.chromestatus.com/feature/6298909664083968"",""title"":""Chrome platform status for CSS column-fill""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""a x #1"",""3"":""a x #1"",""3.5"":""a x #1"",""3.6"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1"",""49"":""a x #1"",""50"":""a x #1"",""51"":""a x #1"",""52"":""a #1"",""53"":""a #1"",""54"":""a #1"",""55"":""a #1""},""chrome"":{""4"":""a x #1 #2"",""5"":""a x #1 #2"",""6"":""a x #1 #2"",""7"":""a x #1 #2"",""8"":""a x #1 #2"",""9"":""a x #1 #2"",""10"":""a x #1 #2"",""11"":""a x #1 #2"",""12"":""a x #1 #2"",""13"":""a x #1 #2"",""14"":""a x #1 #2"",""15"":""a x #1 #2"",""16"":""a x #1 #2"",""17"":""a x #1 #2"",""18"":""a x #1 #2"",""19"":""a x #1 #2"",""20"":""a x #1 #2"",""21"":""a x #1 #2"",""22"":""a x #1 #2"",""23"":""a x #1 #2"",""24"":""a x #1 #2"",""25"":""a x #1 #2"",""26"":""a x #1 #2"",""27"":""a x #1 #2"",""28"":""a x #1 #2"",""29"":""a x #1 #2"",""30"":""a x #1 #2"",""31"":""a x #1 #2"",""32"":""a x #1 #2"",""33"":""a x #1 #2"",""34"":""a x #1 #2"",""35"":""a x #1 #2"",""36"":""a x #1 #2"",""37"":""a x #1 #2"",""38"":""a x #1 #2"",""39"":""a x #1 #2"",""40"":""a x #1 #2"",""41"":""a x #1 #2"",""42"":""a x #1 #2"",""43"":""a x #1 #2"",""44"":""a x #1 #2"",""45"":""a x #1 #2"",""46"":""a x #1 #2"",""47"":""a x #1 #2"",""48"":""a x #1 #2"",""49"":""a x #1 #2"",""50"":""a #1"",""51"":""a #1"",""52"":""a #1"",""53"":""a #1"",""54"":""a #1"",""55"":""a #1"",""56"":""a #1"",""57"":""a #1"",""58"":""a #1"",""59"":""a #1"",""60"":""a #1""},""safari"":{""3.1"":""a x #1 #2"",""3.2"":""a x #1 #2"",""4"":""a x #1 #2"",""5"":""a x #1 #2"",""5.1"":""a x #1 #2"",""6"":""a x #1 #2"",""6.1"":""a x #1 #2"",""7"":""a x #1"",""7.1"":""a x #1"",""8"":""a x #1"",""9"":""a #1"",""9.1"":""a #1"",""10"":""a #1"",""10.1"":""a #1"",""TP"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""a x #1 #2"",""16"":""a x #1 #2"",""17"":""a x #1 #2"",""18"":""a x #1 #2"",""19"":""a x #1 #2"",""20"":""a x #1 #2"",""21"":""a x #1 #2"",""22"":""a x #1 #2"",""23"":""a x #1 #2"",""24"":""a x #1 #2"",""25"":""a x #1 #2"",""26"":""a x #1 #2"",""27"":""a x #1 #2"",""28"":""a x #1 #2"",""29"":""a x #1 #2"",""30"":""a x #1 #2"",""31"":""a x #1 #2"",""32"":""a x #1 #2"",""33"":""a x #1 #2"",""34"":""a x #1 #2"",""35"":""a x #1 #2"",""36"":""a x #1 #2"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1""},""ios_saf"":{""3.2"":""a x #1 #2"",""4.0-4.1"":""a x #1 #2"",""4.2-4.3"":""a x #1 #2"",""5.0-5.1"":""a x #1 #2"",""6.0-6.1"":""a x #1 #2"",""7.0-7.1"":""a x #1"",""8"":""a x #1"",""8.1-8.4"":""a x #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1"",""10.0-10.2"":""a #1""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""a x #1 #2"",""2.2"":""a x #1 #2"",""2.3"":""a x #1 #2"",""3"":""a x #1 #2"",""4"":""a x #1 #2"",""4.1"":""a x #1 #2"",""4.2-4.3"":""a x #1 #2"",""4.4"":""a x #1 #2"",""4.4.3-4.4.4"":""a x #1 #2"",""53"":""a x #1""},""bb"":{""7"":""a x #1 #2"",""10"":""a x #1 #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""a #1""},""and_chr"":{""56"":""a #1""},""and_ff"":{""51"":""a x #1""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""a x #1 #2""},""samsung"":{""4"":""a x #1 #2""},""and_qq"":{""1.2"":""a #1""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not supporting the `break-before`, `break-after`, `break-inside` properties. WebKit- and Blink-based browsers do have equivalent support for the non-standard `-webkit-column-break-*` properties to accomplish the same result (but only the `auto` and `always` values). Firefox does not support `break-*`."",""2"":""Partial support refers to not supporting the `column-fill` property.""},""usage_perc_y"":9.35,""usage_perc_a"":88.28,""ucprefix"":false,""parent"":"""",""keywords"":""column-count,column-width,column-gap,column-rule,column-span,column-fill"",""ie_id"":""multicolumnfullsupport"",""chrome_id"":""6526151266664448,5630943616303104"",""firefox_id"":"""",""webkit_id"":""""},""border-radius"":{""title"":""CSS3 Border-radius (rounded corners)"",""description"":""Method of making the border corners round. Covers support for the shorthand `border-radius` as well as the long-hand properties (e.g. `border-top-left-radius`)"",""spec"":""http://www.w3.org/TR/css3-background/#the-border-radius"",""status"":""cr"",""links"":[{""url"":""http://border-radius.com"",""title"":""Border-radius CSS Generator""},{""url"":""http://muddledramblings.com/table-of-css3-border-radius-compliance"",""title"":""Detailed compliance table""},{""url"":""http://www.css3files.com/border/#borderradius"",""title"":""Information page""},{""url"":""http://css3pie.com/"",""title"":""Polyfill which includes border-radius""},{""url"":""http://docs.webplatform.org/wiki/css/properties/border-radius"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""a x #2"",""3"":""y x #2"",""3.5"":""y x #2"",""3.6"":""y x #2"",""4"":""y #2"",""5"":""y #2"",""6"":""y #2"",""7"":""y #2"",""8"":""y #2"",""9"":""y #2"",""10"":""y #2"",""11"":""y #2"",""12"":""y #2"",""13"":""y #2"",""14"":""y #2"",""15"":""y #2"",""16"":""y #2"",""17"":""y #2"",""18"":""y #2"",""19"":""y #2"",""20"":""y #2"",""21"":""y #2"",""22"":""y #2"",""23"":""y #2"",""24"":""y #2"",""25"":""y #2"",""26"":""y #2"",""27"":""y #2"",""28"":""y #2"",""29"":""y #2"",""30"":""y #2"",""31"":""y #2"",""32"":""y #2"",""33"":""y #2"",""34"":""y #2"",""35"":""y #2"",""36"":""y #2"",""37"":""y #2"",""38"":""y #2"",""39"":""y #2"",""40"":""y #2"",""41"":""y #2"",""42"":""y #2"",""43"":""y #2"",""44"":""y #2"",""45"":""y #2"",""46"":""y #2"",""47"":""y #2"",""48"":""y #2"",""49"":""y #2"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y x"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y #1"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Safari 6.1 and earlier did not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128"",""2"":""Dotted and dashed rounded border corners are rendered as solid in Firefox. [see bug](https://bugzilla.mozilla.org/show_bug.cgi?id=382721)""},""usage_perc_y"":94.59,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""roundedcorners, border radius,-moz-border-radius"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""transforms2d"":{""title"":""CSS3 2D Transforms"",""description"":""Method of transforming an element including rotating, scaling, etc. Includes support for `transform` as well as `transform-origin` properties."",""spec"":""http://www.w3.org/TR/css3-2d-transforms/"",""status"":""wd"",""links"":[{""url"":""http://www.westciv.com/tools/transforms/"",""title"":""Live editor""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/transform"",""title"":""MDN article""},{""url"":""http://www.webresourcesdepot.com/cross-browser-css-transforms-csssandpaper/"",""title"":""Workaround script for IE""},{""url"":""http://www.css3files.com/transform/"",""title"":""Information page""},{""url"":""http://www.useragentman.com/IETransformsTranslator/"",""title"":""Converter for IE""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/css/transforms/transform"",""title"":""WebPlatform Docs""},{""url"":""https://developer.microsoft.com/en-us/microsoft-edge/platform/status/supportcsstransformsonsvg/"",""title"":""IE platform status (SVG)""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y x #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y x"",""10.6"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""53"":""y""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y x""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""The scale transform can be emulated in IE < 9 using Microsoft's \""zoom\"" extension, others are (not easily) possible using the MS Matrix filter"",""notes_by_num"":{""1"":""Does not support CSS transforms on SVG elements (transform attribute can be used instead)""},""usage_perc_y"":94.56,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""transformation,translate,translatex,translatey,translatez,transform3d,rotation,rotate,scale,skew,css-transforms,transform-origin,transform:rotate,transform:scale,transform:skew"",""ie_id"":""transforms"",""chrome_id"":""6437640580628480"",""firefox_id"":"""",""webkit_id"":""""},""use-strict"":{""title"":""ECMAScript 5 Strict Mode"",""description"":""Method of placing code in a \""strict\"" operating context."",""spec"":""http://www.ecma-international.org/ecma-262/5.1/#sec-14.1"",""status"":""other"",""links"":[{""url"":""http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/"",""title"":""Information page""},{""url"":""http://javascriptweblog.wordpress.com/2011/05/03/javascript-strict-mode/"",""title"":""Article with test suite""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""a #1"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older Safari refers to strict mode still accepting a lot of JS that should be considered invalid.""},""usage_perc_y"":97.38,""usage_perc_a"":0.09,""ucprefix"":false,""parent"":""es5"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""devicepixelratio"":{""title"":""Window.devicePixelRatio"",""description"":""Read-only property that returns the ratio of the (vertical) size of one physical pixel on the current display device to the size of one CSS pixel."",""spec"":""http://dev.w3.org/csswg/cssom-view/#dom-window-devicepixelratio"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio"",""title"":""MDN""}],""categories"":[""CSS"",""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""As the page is zoomed in the number of device pixels that one CSS pixel covers increases, and therefore the value of devicePixelRatio will also increase."",""notes_by_num"":{},""usage_perc_y"":97.11,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""device,pixel,ratio,size"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""transforms3d"":{""title"":""CSS3 3D Transforms"",""description"":""Method of transforming an element in the third dimension using the `transform` property. Includes support for the `perspective` property to set the perspective in z-space and the `backface-visibility` property to toggle display of the reverse side of a 3D-transformed element."",""spec"":""http://www.w3.org/TR/css3-3d-transforms/"",""status"":""wd"",""links"":[{""url"":""http://css3.bradshawenterprises.com/flip/"",""title"":""Multi-browser demo""},{""url"":""http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/"",""title"":""Mozilla hacks article""},{""url"":""http://thewebrocks.com/demos/3D-css-tester/"",""title"":""3D CSS Tester""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/css/transforms/transform"",""title"":""WebPlatform Docs""},{""url"":""http://desandro.github.io/3dtransforms/"",""title"":""Intro to CSS 3D transforms""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y #2"",""9.1"":""y #2"",""10"":""y #2"",""10.1"":""y #2"",""TP"":""y #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""53"":""y""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""11"":""y x""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE refers to not supporting [the transform-style: preserve-3d property](http://msdn.microsoft.com/en-us/library/ie/hh673529%28v=vs.85%29.aspx#the_ms_transform_style_property). This prevents nesting 3D transformed elements."",""2"":""Safari 9 is reported to still require a prefix for the related `backface-visibility` property.""},""usage_perc_y"":89.79,""usage_perc_a"":4.27,""ucprefix"":false,""parent"":"""",""keywords"":""css 3d,3dtransforms,translate3d,backface visibility,perspective,transform-origin,transform-style"",""ie_id"":""transforms,csstransformspreserve3d"",""chrome_id"":""6437640580628480"",""firefox_id"":"""",""webkit_id"":""""},""sharedworkers"":{""title"":""Shared Web Workers"",""description"":""Method of allowing multiple scripts to communicate with a single web worker."",""spec"":""https://html.spec.whatwg.org/multipage/workers.html#shared-workers-introduction"",""status"":""ls"",""links"":[{""url"":""http://www.sitepoint.com/javascript-shared-web-workers-html5/"",""title"":""Sitepoint article""},{""url"":""http://greenido.wordpress.com/2011/11/03/web-workers-part-3-out-of-3-shared-wrokers/"",""title"":""Blog post""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n"",""10"":""n"",""10.1"":""n"",""TP"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n"",""10.0-10.2"":""n""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""53"":""n""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""n""},""and_chr"":{""56"":""n""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":48,""usage_perc_a"":0,""ucprefix"":false,""parent"":""webworkers"",""keywords"":""shared worker"",""ie_id"":""sharedwebworkers"",""chrome_id"":"""",""firefox_id"":""shared-worker"",""webkit_id"":""feature-shared-web-workers""},""css-hyphens"":{""title"":""CSS Hyphenation"",""description"":""Method of controlling when words at the end of lines should be hyphenated using the \""hyphens\"" property."",""spec"":""http://www.w3.org/TR/css3-text/#hyphenation"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/CSS/hyphens"",""title"":""MDN article""},{""url"":""http://blog.fontdeck.com/post/9037028497/hyphens"",""title"":""Blog post""},{""url"":""http://docs.webplatform.org/wiki/css/properties/hyphens"",""title"":""WebPlatform Docs""},{""url"":""https://crbug.com/605840"",""title"":""Chrome bug for implementing hyphenation""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x""},""edge"":{""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""a #1"",""56"":""a #1"",""57"":""a #1"",""58"":""a #1"",""59"":""a #1"",""60"":""a #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x"",""10"":""y x"",""10.1"":""y x"",""TP"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x"",""10.0-10.2"":""y x""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""53"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""n""},""and_chr"":{""56"":""a #1""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""a x""},""samsung"":{""4"":""n""},""and_qq"":{""1.2"":""n""}},""notes"":""Chrome < 55 and Android 4.0 Browser support \""-webkit-hyphens: none\"", but not the \""auto\"" property. It is [advisable to set the @lang attribute](http://blog.adrianroselli.com/2015/01/on-use-of-lang-attribute.html) on the HTML element to enable hyphenation support and improve accessibility."",""notes_by_num"":{""1"":""Only supports the \""auto\"" value [on Mac for now](https://crrev.com/ed7e106e0e48b3afb160a5bdbb37649e307d2b05).""},""usage_perc_y"":24.27,""usage_perc_a"":58.74,""ucprefix"":false,""parent"":"""",""keywords"":""hyphen,shy"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-transitions"":{""title"":""CSS3 Transitions"",""description"":""Simple method of animating certain properties of an element, with ability to define property, duration, delay and timing function. "",""spec"":""http://www.w3.org/TR/css3-transitions/"",""status"":""wd"",""links"":[{""url"":""http://www.webdesignerdepot.com/2010/01/css-transitions-101/"",""title"":""Article on usage""},{""url"":""http://www.css3files.com/transition/"",""title"":""Information page""},{""url"":""http://www.the-art-of-web.com/css/timing-function/"",""title"":""Examples on timing functions""},{""url"":""http://www.opera.com/docs/specs/presto2.12/css/transitions/"",""title"":""Animation of property types support in Opera""},{""url"":""http://docs.webplatform.org/wiki/css/properties/transition"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y x"",""10.6"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""12"":""y x"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y x""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Support listed is for `transition` properties as well as the `transitionend` event. The prefixed name in WebKit browsers is `webkitTransitionEnd`"",""notes_by_num"":{},""usage_perc_y"":94.29,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""css transition,transitionend,transition-property,transition-duration,transition-timing-function,transition-delay"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""font-feature"":{""title"":""CSS font-feature-settings"",""description"":""Method of applying advanced typographic and language-specific font features to supported OpenType fonts."",""spec"":""http://w3.org/TR/css3-fonts/#font-rend-props"",""status"":""cr"",""links"":[{""url"":""http://ie.microsoft.com/testdrive/Graphics/opentype/"",""title"":""Demo pages (IE/Firefox only)""},{""url"":""http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/"",""title"":""Mozilla hacks article""},{""url"":""http://html5accessibility.com/"",""title"":""Detailed tables on accessability support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/font-feature-settings"",""title"":""WebPlatform Docs""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-feature-settings"",""title"":""Mozilla Developer Network""},{""url"":""https://www.microsoft.com/typography/otspec/featuretags.htm"",""title"":""OpenType layout feature tag registry""},{""url"":""http://help.typekit.com/customer/portal/articles/1789736-syntax-for-opentype-features-in-css#salt"",""title"":""Syntax for OpenType features in CSS (Adobe Typekit Help)""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""53"":""y""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""y x""},""samsung"":{""4"":""y x""},""and_qq"":{""1.2"":""y""}},""notes"":""Whenever possible, font-variant shorthand property or an associated longhand property, font-variant-ligatures, font-variant-caps, font-variant-east-asian, font-variant-alternates, font-variant-numeric or font-variant-position should be used. This property is a low-level feature designed to handle special cases where no other way to enable or access an OpenType font feature exists. In particular, this CSS property shouldn't be used to enable small caps."",""notes_by_num"":{""1"":""From Gecko 2.0 (Firefox 4.0) to Gecko 14.0 (Firefox 14.0) included, Gecko supported an older syntax, slightly different from the modern one: http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/"",""2"":""Partial support in older Chrome versions refers to lacking support in Mac OS X.""},""usage_perc_y"":91.68,""usage_perc_a"":0.3,""ucprefix"":false,""parent"":"""",""keywords"":""font-feature,font-feature-settings,kern,kerning,font-variant-alternates,ligatures,font-variant-ligatures"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-animation"":{""title"":""CSS Animation"",""description"":""Complex method of animating certain properties of an element"",""spec"":""http://www.w3.org/TR/css3-animations/"",""status"":""wd"",""links"":[{""url"":""http://robertnyman.com/2010/05/06/css3-animations/"",""title"":""Blog post on usage""},{""url"":""http://www.css3files.com/animation/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/animations"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y x"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""53"":""y""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y x""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Android browser refers to buggy behavior in different scenarios.""},""usage_perc_y"":94.24,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""animations,css-animations,animation-name,animation-duration,animation-delay,animation-timing-function,@keyframes,animationstart,animationend,animationiteration,css3 animation"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-gradients"":{""title"":""CSS Gradients"",""description"":""Method of defining a linear or radial color gradient as a CSS image."",""spec"":""http://www.w3.org/TR/css3-images/"",""status"":""cr"",""links"":[{""url"":""http://www.colorzilla.com/gradient-editor/"",""title"":""Cross-browser editor""},{""url"":""http://www.css3files.com/gradient/"",""title"":""Information page""},{""url"":""http://css3pie.com/"",""title"":""Tool to emulate support in IE""},{""url"":""http://docs.webplatform.org/wiki/css/functions/linear-gradient"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x"",""5"":""a x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""a x #1"",""11.5"":""a x #1"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""a x"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a x #1"",""11.5"":""a x #1"",""12"":""y x"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y x""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":""Syntax used by browsers with prefixed support may be incompatible with that for proper support.\r\n\r\nSupport can be somewhat emulated in older IE versions using the non-standard \""gradient\"" filter. \r\n\r\nFirefox 10+, Opera 11.6+, Chrome 26+ and IE10+ also support the new \""to (side)\"" syntax."",""notes_by_num"":{""1"":""Partial support in Opera 11.10 and 11.50 also refers to only having support for linear gradients.""},""usage_perc_y"":94.14,""usage_perc_a"":0.14,""ucprefix"":false,""parent"":"""",""keywords"":""linear,linear-gradient,gradiant"",""ie_id"":""gradients"",""chrome_id"":""5785905063264256"",""firefox_id"":"""",""webkit_id"":""""},""css-canvas"":{""title"":""CSS Canvas Drawings"",""description"":""Method of using HTML5 Canvas as a background image. Not currently part of any specification."",""spec"":""http://webkit.org/blog/176/css-canvas-drawing/"",""status"":""unoff"",""links"":[{""url"":""http://webkit.org/blog/176/css-canvas-drawing/"",""title"":""Webkit blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""u"",""53"":""u"",""54"":""u"",""55"":""u""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""n"",""56"":""n"",""57"":""n"",""58"":""n"",""59"":""n"",""60"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x"",""10"":""y x"",""10.1"":""y x"",""TP"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x"",""10.0-10.2"":""y x""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""53"":""n""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""n""},""and_chr"":{""56"":""n""},""and_ff"":{""51"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""y x""},""samsung"":{""4"":""y x""},""and_qq"":{""1.2"":""y x""}},""notes"":""A similar effect can be achieved in Firefox 4+ using the -moz-element() background property"",""notes_by_num"":{},""usage_perc_y"":29.29,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-reflections"":{""title"":""CSS Reflections"",""description"":""Method of displaying a reflection of an element"",""spec"":""http://webkit.org/blog/182/css-reflections/"",""status"":""unoff"",""links"":[{""url"":""http://webkit.org/blog/182/css-reflections/"",""title"":""Webkit blog post""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/7930470-support-css-reflections"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""n""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x"",""53"":""y x"",""54"":""y x"",""55"":""y x"",""56"":""y x"",""57"":""y x"",""58"":""y x"",""59"":""y x"",""60"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x"",""10"":""y x"",""10.1"":""y x"",""TP"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x"",""10.0-10.2"":""y x""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""53"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""y x""},""and_chr"":{""56"":""y x""},""and_ff"":{""51"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""n""},""samsung"":{""4"":""y x""},""and_qq"":{""1.2"":""y x""}},""notes"":""Similar effect can be achieved in Firefox 4+ using the -moz-element() background property"",""notes_by_num"":{},""usage_perc_y"":72.31,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""box-reflect"",""ie_id"":"""",""chrome_id"":""5627300510957568"",""firefox_id"":"""",""webkit_id"":""""},""css-masks"":{""title"":""CSS Masks"",""description"":""Method of displaying part of an element, using a selected image as a mask"",""spec"":""http://www.w3.org/TR/css-masking-1/"",""status"":""cr"",""links"":[{""url"":""http://docs.webplatform.org/wiki/css/properties/mask"",""title"":""WebPlatform Docs""},{""url"":""http://www.html5rocks.com/en/tutorials/masking/adobe/"",""title"":""HTML5 Rocks article""},{""url"":""http://thenittygritty.co/css-masking"",""title"":""Detailed blog post""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1224422"",""title"":""Firefox implementation bug""},{""url"":""http://lab.iamvdo.me/css-svg-masks"",""title"":""Visual test cases""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #2"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""a #2"",""39"":""a #2"",""40"":""a #2"",""41"":""a #2"",""42"":""a #2"",""43"":""a #2"",""44"":""a #2"",""45"":""a #2"",""46"":""a #2"",""47"":""a #2"",""48"":""a #2"",""49"":""a #2"",""50"":""a #2"",""51"":""a #2"",""52"":""a #2"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1"",""49"":""a x #1"",""50"":""a x #1"",""51"":""a x #1"",""52"":""a x #1"",""53"":""a x #1"",""54"":""a x #1"",""55"":""a x #1"",""56"":""a x #1"",""57"":""a x #1"",""58"":""a x #1"",""59"":""a x #1"",""60"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x #1"",""5"":""a x #1"",""5.1"":""a x #1"",""6"":""a x #1"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""9.1"":""a x #1"",""10"":""a x #1"",""10.1"":""a x #1"",""TP"":""a x #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""5.0-5.1"":""a x #1"",""6.0-6.1"":""a x #1"",""7.0-7.1"":""a x #1"",""8"":""a x #1"",""8.1-8.4"":""a x #1"",""9.0-9.2"":""a x #1"",""9.3"":""a x #1"",""10.0-10.2"":""a x #1""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""a x #1 #3"",""2.2"":""a x #1 #3"",""2.3"":""a x #1 #3"",""3"":""a x #1 #3"",""4"":""a x #1 #3"",""4.1"":""a x #1 #3"",""4.2-4.3"":""a x #1 #3"",""4.4"":""a x #1"",""4.4.3-4.4.4"":""a x #1"",""53"":""a x #1""},""bb"":{""7"":""a x #1"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""37"":""a x #1""},""and_chr"":{""56"":""a x #1""},""and_ff"":{""51"":""a #2""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""a x #1""},""samsung"":{""4"":""a x #1""},""and_qq"":{""1.2"":""a x #1""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in WebKit/Blink browsers refers to supporting the mask-image and mask-box-image properties, but lacking support for other parts of the spec."",""2"":""Partial support in Firefox refers to only support for inline SVG mask elements i.e. mask: url(#foo)."",""3"":""Partial support refers to supporting the mask-box-image shorthand but not the longhand properties""},""usage_perc_y"":0.01,""usage_perc_a"":88.22,""ucprefix"":false,""parent"":"""",""keywords"":""clip,clip-path,clip-rule,mask,mask-border,mask-clip,mask-image,mask-mode,mask-type"",""ie_id"":""masks"",""chrome_id"":""5381559662149632"",""firefox_id"":"""",""webkit_id"":""""},""console-basic"":{""title"":""Basic console logging functions"",""description"":""Method of outputting data to the browser's console, intended for development purposes."",""spec"":""https://console.spec.whatwg.org/"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Console"",""title"":""MDN article""},{""url"":""https://developer.chrome.com/devtools/docs/console-api"",""title"":""Chrome console reference""},{""url"":""https://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/Console/Console.html"",""title"":""Safari console reference""},{""url"":""https://msdn.microsoft.com/en-us/library/hh772169"",""title"":""Edge/Internet Explorer console reference""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y #3"",""7.0-7.1"":""y #3"",""8"":""y #3"",""8.1-8.4"":""y #3"",""9.0-9.2"":""y #3"",""9.3"":""y #3"",""10.0-10.2"":""y #3""},""op_mini"":{""all"":""y #6""},""android"":{""2.1"":""y #4"",""2.2"":""y #4"",""2.3"":""y #4"",""3"":""y #4"",""4"":""y #4"",""4.1"":""y #4"",""4.2-4.3"":""y #4"",""4.4"":""y #4"",""4.4.3-4.4.4"":""y #4"",""53"":""y #4""},""bb"":{""7"":""n #2"",""10"":""n #2""},""op_mob"":{""10"":""n"",""11"":""n #2"",""11.1"":""n #2"",""11.5"":""n #2"",""12"":""n #2"",""12.1"":""n #2"",""37"":""n #2""},""and_chr"":{""56"":""y #4""},""and_ff"":{""51"":""y #5""},""ie_mob"":{""10"":""n #2"",""11"":""n #2""},""and_uc"":{""11"":""n #2""},""samsung"":{""4"":""y #4""},""and_qq"":{""1.2"":""y""}},""notes"":""The basic functions that this information refers to include `console.log`, `console.info`, `console.warn`, `console.error`."",""notes_by_num"":{""1"":""Only supports console functions when developer tools are open, otherwise the `console` object is undefined and any calls will throw errors."",""2"":""Allows `console` functions to be used without throwing errors, but does not appear to output the data anywhere."",""3"":""Log output on iOS 6+ Safari can only be seen by connecting to a Mac and using the [Safari debugger](https://developer.apple.com/safari/tools/)."",""4"":""Log output on older Android browsers can be retrieved via Android's `logcat` command or using Chrome Developer Tools in Android 4.4+/Chrome for Android [see details](http://developer.android.com/guide/webapps/debugging.html)"",""5"":""Log output on Firefox for Android can be [accessed using WebIDE](https://developer.mozilla.org/en-US/docs/Tools/Remote_Debugging/Debugging_Firefox_for_Android_with_WebIDE)"",""6"":""See [this article](https://dev.opera.com/articles/opera-mini-and-javascript/) for details on how to see console logging in Opera Mini""},""usage_perc_y"":87.83,""usage_perc_a"":0.62,""ucprefix"":false,""parent"":"""",""keywords"":""console.log,console.info,console.warn,console.error,window.console"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg"":{""title"":""SVG (basic support)"",""description"":""Method of displaying basic Vector Graphics features using the embed or object elements. Refers to the SVG 1.1 spec."",""spec"":""http://www.w3.org/TR/SVG/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"",""title"":""Wikipedia""},{""url"":""http://www.alistapart.com/articles/using-svg-for-flexible-scalable-and-fun-backgrounds-part-i"",""title"":""A List Apart article""},{""url"":""http://svg-wow.org/"",""title"":""SVG showcase site""},{""url"":""http://code.google.com/p/svgweb/"",""title"":""SVG Web: Flash-based polyfill""},{""url"":""https://github.com/SVG-Edit/svgedit"",""title"":""Web-based SVG editor""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg"",""title"":""has.js test""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #2"",""10"":""y #2"",""11"":""y #2""},""edge"":{""12"":""y #2"",""13"":""y #2"",""14"":""y #2"",""15"":""y #2""},""firefox"":{""2"":""a"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""a"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y #2"",""11"":""y #2""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Android 3 & 4 refers to not supporting masking."",""2"":""IE9-11 desktop & mobile don't properly scale SVG files.  [Adding height, width, viewBox, and CSS rules](http://codepen.io/tomByrer/pen/qEBbzw?editors=110) seem to be the best workaround.""},""usage_perc_y"":97.23,""usage_perc_a"":0.71,""ucprefix"":false,""parent"":"""",""keywords"":""rect,circle,ellipse,line,polyline,polygon,defs,symbol,use,tspan,tref,textpath,stroke-dasharray,stroke-dashoffset"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-css"":{""title"":""SVG in CSS backgrounds"",""description"":""Method of using SVG images as CSS backgrounds"",""spec"":""http://www.w3.org/TR/css3-background/#background-image"",""status"":""cr"",""links"":[{""url"":""http://www.sitepoint.com/a-farewell-to-css3-gradients/"",""title"":""Tutorial for advanced effects""}],""categories"":[""CSS3"",""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""a #1"",""4"":""a #1"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""a #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a #2"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in iOS Safari and older Safari versions refers to failing to support tiling or the background-position property."",""2"":""Partial support in older Firefox and Opera Mini/Mobile refers to SVG images being blurry when scaled.""},""usage_perc_y"":94.34,""usage_perc_a"":3.52,""ucprefix"":false,""parent"":"""",""keywords"":""svg-in-css,svgincss,css-svg"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-smil"":{""title"":""SVG SMIL animation"",""description"":""Method of using animation elements to animate SVG images"",""spec"":""http://www.w3.org/TR/SVG/animate.html"",""status"":""rec"",""links"":[{""url"":""http://svg-wow.org/blog/category/animation/"",""title"":""Examples on SVG WOW""},{""url"":""https://developer.mozilla.org/en/SVG/SVG_animation_with_SMIL"",""title"":""MDN article""},{""url"":""http://leunen.me/fakesmile/"",""title"":""JS library to support SMIL in SVG""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg-smil"",""title"":""has.js test""},{""url"":""https://github.com/madsgraphics/SVGEventListener"",""title"":""Polyfill for SMIL animate events on SVG""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y #2"",""46"":""y #2"",""47"":""y #2"",""48"":""y #2"",""49"":""y #2"",""50"":""y #2"",""51"":""y #2"",""52"":""y #2"",""53"":""y #2"",""54"":""y #2"",""55"":""y #2"",""56"":""y #2"",""57"":""y #2"",""58"":""y #2"",""59"":""y #2"",""60"":""y #2""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""a #1"",""5"":""a #1"",""5.1"":""a #1"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y #2"",""33"":""y #2"",""34"":""y #2"",""35"":""y #2"",""36"":""y #2"",""37"":""y #2"",""38"":""y #2"",""39"":""y #2"",""40"":""y #2"",""41"":""y #2"",""42"":""y #2"",""43"":""y #2"",""44"":""y #2"",""45"":""y #2""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y #2""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older Safari versions refers to not working in HTML files or CSS background images."",""2"":""As of Chrome 45 & Opera 32 SMIL is deprecated and usage will result in a warning in the console. Support is expected to be dropped in some future version.""},""usage_perc_y"":88.26,""usage_perc_a"":0.1,""ucprefix"":false,""parent"":"""",""keywords"":""svg animation"",""ie_id"":""svgsmilanimation"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-fonts"":{""title"":""SVG fonts"",""description"":""Method of using fonts defined as SVG shapes. Removed from [SVG 2.0](http://www.w3.org/TR/SVG2/changes.html#fonts) and considered as a deprecated feature with support being removed from browsers."",""spec"":""http://www.w3.org/TR/SVG/fonts.html"",""status"":""unoff"",""links"":[{""url"":""http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different"",""title"":""Blog post""},{""url"":""http://opentype.info/blog/2010/04/13/the-ipad-and-svg-fonts-in-mobile-safari/"",""title"":""Blog post on usage for iPad""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""n""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""n #1"",""39"":""n #1"",""40"":""n #1"",""41"":""n #1"",""42"":""n #1"",""43"":""n #1"",""44"":""n #1"",""45"":""n #1"",""46"":""n #1"",""47"":""n #1"",""48"":""n #1"",""49"":""n #1"",""50"":""n #1"",""51"":""n"",""52"":""n"",""53"":""n"",""54"":""n"",""55"":""n"",""56"":""n"",""57"":""n"",""58"":""n"",""59"":""n"",""60"":""n""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""n #1"",""26"":""n #1"",""27"":""n #1"",""28"":""n #1"",""29"":""n #1"",""30"":""n #1"",""31"":""n #1"",""32"":""n #1"",""33"":""n #1"",""34"":""n #1"",""35"":""n #1"",""36"":""n #1"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""n #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""n""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""n #1""},""and_ff"":{""51"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Chrome 38 and newer support SVG fonts only on Windows Vista and XP."",""2"":""Supported in Opera Mini in SVG images only, not in HTML.""},""usage_perc_y"":28.41,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""5930075908210688"",""firefox_id"":"""",""webkit_id"":""""},""svg-filters"":{""title"":""SVG filters"",""description"":""Method of using photoshop-like effects on SVG objects including blurring and color manipulation."",""spec"":""http://www.w3.org/TR/SVG/filters.html"",""status"":""rec"",""links"":[{""url"":""http://electricbeach.org/?p=950"",""title"":""Experiments with filter effects""},{""url"":""http://svg-wow.org/blog/category/filters/"",""title"":""SVG filter demos""},{""url"":""http://docs.webplatform.org/wiki/svg/elements/filter"",""title"":""WebPlatform Docs""},{""url"":""http://jorgeatgu.github.io/svg-filters/"",""title"":""SVG Filter effects""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""n"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y"",""56"":""y"",""57"":""y"",""58"":""y"",""59"":""y"",""60"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y"",""10"":""y"",""10.1"":""y"",""TP"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y"",""10.0-10.2"":""y""},""op_mini"":{""all"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""53"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""37"":""y""},""and_chr"":{""56"":""y""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""11"":""y""},""samsung"":{""4"":""y""},""and_qq"":{""1.2"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":96.81,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-html"":{""title"":""SVG effects for HTML"",""description"":""Method of using SVG transforms, filters, etc on HTML elements using either CSS or the foreignObject element"",""spec"":""http://www.w3.org/TR/SVG11/extend.html#ForeignObjectElement"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en/SVG/Tutorial/Other_content_in_SVG"",""title"":""MDN Tutorial""},{""url"":""https://developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content"",""title"":""MDN Reference page""},{""url"":""http://www.w3.org/TR/filter-effects/"",""title"":""Filter Effects draft""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1 #2"",""10"":""a #1 #2"",""11"":""a #1 #2""},""edge"":{""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2""},""firefox"":{""2"":""n"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y"",""53"":""y"",""54"":""y"",""55"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a"",""53"":""a"",""54"":""a"",""55"":""a"",""56"":""a"",""57"":""a"",""58"":""a"",""59"":""a"",""60"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a"",""9.1"":""a"",""10"":""a"",""10.1"":""a"",""TP"":""a""},""opera"":{""9"":""a"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a"",""10.0-10.2"":""a""},""op_mini"":{""all"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""53"":""a""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""37"":""a""},""and_chr"":{""56"":""a""},""and_ff"":{""51"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""11"":""n""},""samsung"":{""4"":""a""},""and_qq"":{""1.2"":""a""}},""notes"":""Partial support refers to lack of filter support or buggy result from effects. A [CSS Filter Effects](http://www.w3.org/TR/filter-effects/) specification is in the works that would replace this method."",""notes_by_num"":{""1"":""IE11 and below do not support `<foreignObject>`."",""2"":""IE and Edge do not support applying SVG filter effects to HTML elements using CSS. [Bug Report](https://developer.microsoft.com/en-us/microsoft-e"
65a3d1e973d0c7cbd3eb97f1747c24bf35095da6,20496616,"   * MySQL defaults to <a href=""http://stackoverflow.com/questions/20496616/fetchsize-in-resultset-set-to-0-by-default"">fetching"
84298779cce398e8b8b98e564da7a364661d3be6,33859371,http://stackoverflow.com/questions/33859371/making-post-using-instagram-maker-through-ifttt-not-requesting-api-url
03fb3a7d4edf7ab2ee8a4d3d0a0f5c478d024d21,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
9a07b439fb6564b1d1de2c9ca6da1fc7508799ac,5736398,		// http://stackoverflow.com/questions/5736398/how-to-calculate-the-svg-path-for-an-arc-of-a-circle
0236084b3cc1f2217e73ee4644cb79ab4a80b483,791069,  //See http://stackoverflow.com/questions/791069/how-can-i-create-an-delphi-object-from-a-class-reference-and-ensure-constructor
76995a7dcc1f9f9845e83812c99d65a8fabcba70,27236821, * From: https://stackoverflow.com/a/27236821/2480714
771eefc5e4c53b75cabe30950b784933d24c0b44,25764824,                        // http://stackoverflow.com/questions/25764824/strange-cursor-placement-in-modal-when-using-autofocus-in-internet-explorer
301f175fc07e4bfc7c27d34d19f670cfebcf219a,37628,0;247;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;find_ids;0.6;0.006974248927038626;1.0;1.6069742489270387;0.0;0
340b73acb322ad6b28a9dd6fd5a84ecccd6969cf,5725278,http://stackoverflow.com/questions/5725278/python-help-using-pdfminer-as-a-library
6d2068145fd558763d3617cb8c2342dec7ba2e71,1008802,  //http://stackoverflow.com/questions/1008802/converting-symbols-accent-letters-to-english-alphabet
15aad1b96f92104d3806b74e946a45249cdbfa15,202605,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///libphonenumber-js.min.js"",""webpack:///webpack/bootstrap 51d08c099dad495c6072"",""webpack:///./~/core-js/library/modules/_wks.js"",""webpack:///./~/core-js/library/modules/_core.js"",""webpack:///./~/core-js/library/modules/_object-dp.js"",""webpack:///./~/core-js/library/modules/_descriptors.js"",""webpack:///./~/core-js/library/modules/_export.js"",""webpack:///./~/core-js/library/modules/_global.js"",""webpack:///./~/core-js/library/modules/_hide.js"",""webpack:///./~/babel-runtime/core-js/get-iterator.js"",""webpack:///./~/core-js/library/modules/_an-object.js"",""webpack:///./~/core-js/library/modules/_has.js"",""webpack:///./~/core-js/library/modules/_is-object.js"",""webpack:///./~/core-js/library/modules/_ctx.js"",""webpack:///./~/core-js/library/modules/_fails.js"",""webpack:///./~/core-js/library/modules/_iterators.js"",""webpack:///./~/core-js/library/modules/_to-iobject.js"",""webpack:///./es6/common.js"",""webpack:///./es6/metadata.js"",""webpack:///./es6/parse.js"",""webpack:///./~/core-js/library/modules/_property-desc.js"",""webpack:///./~/core-js/library/modules/es6.string.iterator.js"",""webpack:///./es6/types.js"",""webpack:///./~/core-js/library/modules/_for-of.js"",""webpack:///./~/core-js/library/modules/_object-create.js"",""webpack:///./~/core-js/library/modules/_object-keys.js"",""webpack:///./~/core-js/library/modules/_object-pie.js"",""webpack:///./~/core-js/library/modules/_set-to-string-tag.js"",""webpack:///./~/core-js/library/modules/_to-length.js"",""webpack:///./~/core-js/library/modules/_to-object.js"",""webpack:///./~/core-js/library/modules/_uid.js"",""webpack:///./~/core-js/library/modules/web.dom.iterable.js"",""webpack:///./es6/RFC3966.js"",""webpack:///./~/core-js/library/modules/_classof.js"",""webpack:///./~/core-js/library/modules/_cof.js"",""webpack:///./~/core-js/library/modules/_defined.js"",""webpack:///./~/core-js/library/modules/_enum-bug-keys.js"",""webpack:///./~/core-js/library/modules/_iobject.js"",""webpack:///./~/core-js/library/modules/_iter-define.js"",""webpack:///./~/core-js/library/modules/_library.js"",""webpack:///./~/core-js/library/modules/_meta.js"",""webpack:///./~/core-js/library/modules/_object-gops.js"",""webpack:///./~/core-js/library/modules/_shared-key.js"",""webpack:///./~/core-js/library/modules/_shared.js"",""webpack:///./~/core-js/library/modules/_to-integer.js"",""webpack:///./~/core-js/library/modules/_to-primitive.js"",""webpack:///./~/core-js/library/modules/_wks-define.js"",""webpack:///./~/core-js/library/modules/_wks-ext.js"",""webpack:///./~/core-js/library/modules/core.get-iterator-method.js"",""webpack:///./es6/format.js"",""webpack:///./~/babel-runtime/helpers/classCallCheck.js"",""webpack:///./~/babel-runtime/helpers/createClass.js"",""webpack:///./~/babel-runtime/helpers/extends.js"",""webpack:///./~/babel-runtime/helpers/typeof.js"",""webpack:///./~/core-js/library/modules/_a-function.js"",""webpack:///./~/core-js/library/modules/_an-instance.js"",""webpack:///./~/core-js/library/modules/_dom-create.js"",""webpack:///./~/core-js/library/modules/_ie8-dom-define.js"",""webpack:///./~/core-js/library/modules/_is-array-iter.js"",""webpack:///./~/core-js/library/modules/_is-array.js"",""webpack:///./~/core-js/library/modules/_iter-call.js"",""webpack:///./~/core-js/library/modules/_iter-step.js"",""webpack:///./~/core-js/library/modules/_object-gopn.js"",""webpack:///./~/core-js/library/modules/_object-keys-internal.js"",""webpack:///./~/core-js/library/modules/_redefine-all.js"",""webpack:///./~/core-js/library/modules/_redefine.js"",""webpack:///./~/core-js/library/modules/_validate-collection.js"",""webpack:///./metadata.min.json"",""webpack:///./es6/AsYouType.js"",""webpack:///./es6/validate.js"",""webpack:///./~/babel-runtime/core-js/object/create.js"",""webpack:///./index.es6.js"",""webpack:///./~/babel-runtime/core-js/array/from.js"",""webpack:///./~/babel-runtime/core-js/is-iterable.js"",""webpack:///./~/babel-runtime/core-js/object/assign.js"",""webpack:///./~/babel-runtime/core-js/object/define-property.js"",""webpack:///./~/babel-runtime/core-js/set.js"",""webpack:///./~/babel-runtime/core-js/symbol.js"",""webpack:///./~/babel-runtime/core-js/symbol/iterator.js"",""webpack:///./~/babel-runtime/helpers/slicedToArray.js"",""webpack:///./~/core-js/library/fn/array/from.js"",""webpack:///./~/core-js/library/fn/get-iterator.js"",""webpack:///./~/core-js/library/fn/is-iterable.js"",""webpack:///./~/core-js/library/fn/object/assign.js"",""webpack:///./~/core-js/library/fn/object/create.js"",""webpack:///./~/core-js/library/fn/object/define-property.js"",""webpack:///./~/core-js/library/fn/set.js"",""webpack:///./~/core-js/library/fn/symbol/index.js"",""webpack:///./~/core-js/library/fn/symbol/iterator.js"",""webpack:///./~/core-js/library/modules/_add-to-unscopables.js"",""webpack:///./~/core-js/library/modules/_array-from-iterable.js"",""webpack:///./~/core-js/library/modules/_array-includes.js"",""webpack:///./~/core-js/library/modules/_array-methods.js"",""webpack:///./~/core-js/library/modules/_array-species-constructor.js"",""webpack:///./~/core-js/library/modules/_array-species-create.js"",""webpack:///./~/core-js/library/modules/_collection-strong.js"",""webpack:///./~/core-js/library/modules/_collection-to-json.js"",""webpack:///./~/core-js/library/modules/_collection.js"",""webpack:///./~/core-js/library/modules/_create-property.js"",""webpack:///./~/core-js/library/modules/_enum-keys.js"",""webpack:///./~/core-js/library/modules/_html.js"",""webpack:///./~/core-js/library/modules/_iter-create.js"",""webpack:///./~/core-js/library/modules/_iter-detect.js"",""webpack:///./~/core-js/library/modules/_object-assign.js"",""webpack:///./~/core-js/library/modules/_object-dps.js"",""webpack:///./~/core-js/library/modules/_object-gopd.js"",""webpack:///./~/core-js/library/modules/_object-gopn-ext.js"",""webpack:///./~/core-js/library/modules/_object-gpo.js"",""webpack:///./~/core-js/library/modules/_set-collection-from.js"",""webpack:///./~/core-js/library/modules/_set-collection-of.js"",""webpack:///./~/core-js/library/modules/_set-species.js"",""webpack:///./~/core-js/library/modules/_string-at.js"",""webpack:///./~/core-js/library/modules/_to-absolute-index.js"",""webpack:///./~/core-js/library/modules/core.get-iterator.js"",""webpack:///./~/core-js/library/modules/core.is-iterable.js"",""webpack:///./~/core-js/library/modules/es6.array.from.js"",""webpack:///./~/core-js/library/modules/es6.array.iterator.js"",""webpack:///./~/core-js/library/modules/es6.object.assign.js"",""webpack:///./~/core-js/library/modules/es6.object.create.js"",""webpack:///./~/core-js/library/modules/es6.object.define-property.js"",""webpack:///./~/core-js/library/modules/es6.set.js"",""webpack:///./~/core-js/library/modules/es6.symbol.js"",""webpack:///./~/core-js/library/modules/es7.set.from.js"",""webpack:///./~/core-js/library/modules/es7.set.of.js"",""webpack:///./~/core-js/library/modules/es7.set.to-json.js"",""webpack:///./~/core-js/library/modules/es7.symbol.async-iterator.js"",""webpack:///./~/core-js/library/modules/es7.symbol.observable.js"",""webpack:///./~/semver-compare/index.js""],""names"":[""root"",""factory"",""exports"",""module"",""define"",""amd"",""this"",""modules"",""__webpack_require__"",""moduleId"",""installedModules"",""i"",""l"",""call"",""m"",""c"",""value"",""d"",""name"",""getter"",""o"",""Object"",""defineProperty"",""configurable"",""enumerable"",""get"",""n"",""__esModule"",""object"",""property"",""prototype"",""hasOwnProperty"",""p"",""s"",""store"",""uid"",""Symbol"",""USE_SYMBOL"",""core"",""version"",""__e"",""anObject"",""IE8_DOM_DEFINE"",""toPrimitive"",""dP"",""f"",""O"",""P"",""Attributes"",""e"",""TypeError"",""a"",""global"",""ctx"",""hide"",""$export"",""type"",""source"",""key"",""own"",""out"",""IS_FORCED"",""F"",""IS_GLOBAL"",""G"",""IS_STATIC"",""S"",""IS_PROTO"",""IS_BIND"",""B"",""IS_WRAP"",""W"",""expProto"",""target"",""undefined"",""C"",""b"",""arguments"",""length"",""apply"",""Function"",""virtual"",""R"",""U"",""window"",""Math"",""self"",""__g"",""createDesc"",""default"",""isObject"",""it"",""aFunction"",""fn"",""that"",""exec"",""IObject"",""defined"",""parse_phone_number_digits"",""number"",""LEADING_PLUS_CHARS_PATTERN"",""test"",""drop_and_substitute_characters"",""DIGIT_MAPPINGS"",""parse_national_number_and_country_calling_code"",""metadata"",""MAX_LENGTH_COUNTRY_CODE"",""countryCallingCode"",""slice"",""countryCallingCodes"",""matches_entirely"",""text"",""regular_expression"",""matched_groups"",""match"",""replacements"",""replaced"",""_iteratorNormalCompletion"",""_didIteratorError"",""_iteratorError"",""_step"",""_iterator"",""_getIterator3"",""next"",""done"",""character"",""replacement"",""toUpperCase"",""err"",""return"",""PLUS_CHARS"",""VALID_PUNCTUATION"",""_getIterator2"",""obj"",""RegExp"",""0"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""０"",""１"",""２"",""３"",""４"",""５"",""６"",""７"",""８"",""９"",""٠"",""١"",""٢"",""٣"",""٤"",""٥"",""٦"",""٧"",""٨"",""٩"",""۰"",""۱"",""۲"",""۳"",""۴"",""۵"",""۶"",""۷"",""۸"",""۹"",""_interopRequireDefault"",""getType"",""types"",""_classCallCheck2"",""_classCallCheck3"",""_createClass2"",""_createClass3"",""_semverCompare"",""Metadata"",""countries"",""Error"",""v1"",""v2"",""country"",""_country"",""country_metadata"",""hasCountry"",""_this"",""map"",""_"",""Format"",""nationalPrefix"",""_type"",""hasTypes"",""Type"",""country_phone_code_to_countries"",""country_calling_codes"",""country_calling_code"",""format"",""_format"",""nationalPrefixFormattingRule"",""nationalPrefixIsOptionalWhenFormatting"",""usesNationalPrefix"",""replace"",""possibleLengths"",""parse"",""arg_1"",""arg_2"",""arg_3"",""arg_4"",""_sort_out_arguments"",""sort_out_arguments"",""options"",""defaultCountry"",""_parse_input"",""parse_input"",""formatted_phone_number"",""ext"",""_parse_phone_number"",""parse_phone_number"",""national_number"",""selectedCountry"",""extended"",""MIN_LENGTH_FOR_NSN"",""MAX_LENGTH_FOR_NSN"",""valid"",""_common"",""nationalNumberPattern"",""possible"",""is_possible_number"",""phone"",""result"",""is_viable_phone_number"",""VALID_PHONE_NUMBER_PATTERN"",""extract_formatted_phone_number"",""MAX_INPUT_STRING_LENGTH"",""starts_at"",""search"",""PHONE_NUMBER_START_PATTERN"",""AFTER_PHONE_NUMBER_END_PATTERN"",""strip_national_prefix"",""nationalPrefixForParsing"",""national_prefix_pattern"",""national_prefix_matcher"",""any_groups_were_captured"",""nationalPrefixTransformRule"",""find_country_code"",""national_phone_number"",""possible_countries"",""original_country"",""_find_country_code"",""leadingDigits"",""_types2"",""_extends3"",""default_options"",""_metadata2"",""strip_extension"",""start"",""EXTN_PATTERN"",""number_without_extension"",""matches"",""is_international"",""_types"",""check_number_length_for_type"",""get_country_and_national_number_international"",""chooseCountryByCountryCallingCode"",""get_country_and_national_number_local"",""default_country"",""potential_national_number"",""indexOf"",""_RFC"",""parseRFC3966"",""with_extension_stripped"",""_parse_national_numbe"",""_result"",""_result2"",""VALID_DIGITS"",""_extends2"",""_metadata"",""CAPTURING_EXTN_DIGITS"",""EXTN_PATTERNS_FOR_PARSING"",""MIN_LENGTH_PHONE_NUMBER_PATTERN"",""VALID_PHONE_NUMBER"",""bitmap"",""writable"",""$at"",""String"",""iterated"",""_t"",""_i"",""point"",""index"",""get_number_type"",""input"",""is_of_type"",""pattern"",""non_fixed_line_types"",""_parse"",""_parse2"",""is_object"",""type_info"",""possible_lengths"",""test_number_length_for_type"",""mobile_type"",""merge_arrays"",""actual_length"",""minimum_length"",""merged"",""_set2"",""_iteratorNormalCompletion2"",""_didIteratorError2"",""_iteratorError2"",""_step2"",""_iterator2"",""add"",""_from2"",""sort"",""_from"",""_set"",""_typeof2"",""_typeof3"",""isArrayIter"",""toLength"",""getIterFn"",""BREAK"",""RETURN"",""iterable"",""entries"",""ITERATOR"",""step"",""iterator"",""iterFn"",""dPs"",""enumBugKeys"",""IE_PROTO"",""Empty"",""createDict"",""iframeDocument"",""iframe"",""style"",""display"",""appendChild"",""src"",""contentWindow"",""document"",""open"",""write"",""lt"",""close"",""create"",""Properties"",""$keys"",""keys"",""propertyIsEnumerable"",""def"",""has"",""TAG"",""tag"",""stat"",""toInteger"",""min"",""id"",""px"",""random"",""concat"",""toString"",""Iterators"",""TO_STRING_TAG"",""DOMIterables"",""split"",""NAME"",""Collection"",""proto"",""Array"",""part"",""_part$split"",""_part$split2"",""_slicedToArray3"",""formatRFC3966"",""_ref"",""_slicedToArray2"",""cof"",""ARG"",""tryGet"",""T"",""callee"",""LIBRARY"",""redefine"",""$iterCreate"",""setToStringTag"",""getPrototypeOf"",""BUGGY"",""returnThis"",""Base"",""Constructor"",""DEFAULT"",""IS_SET"",""FORCED"",""methods"",""IteratorPrototype"",""getMethod"",""kind"",""DEF_VALUES"",""VALUES_BUG"",""$native"",""$default"",""$entries"",""$anyNative"",""values"",""META"",""setDesc"",""isExtensible"",""FREEZE"",""preventExtensions"",""setMeta"",""w"",""fastKey"",""getWeak"",""onFreeze"",""meta"",""NEED"",""KEY"",""getOwnPropertySymbols"",""shared"",""ceil"",""floor"",""isNaN"",""val"",""valueOf"",""wksExt"",""$Symbol"",""charAt"",""classof"",""getIteratorMethod"",""arg_5"",""format_type"",""format_national_number"",""add_extension"",""formatExtension"",""format_national_number_using_format"",""international"",""enforce_national_prefix"",""format_pattern_matcher"",""national_prefix_may_be_omitted"",""FIRST_GROUP_PATTERN"",""formatted_number"",""internationalFormat"",""local_to_international_style"",""format_as"",""choose_format_for_number"",""formats"",""available_formats"",""leadingDigitsPatterns"",""last_leading_digits_pattern"",""local"",""trim"",""extension"",""instance"",""_defineProperty"",""_defineProperty2"",""defineProperties"",""props"",""descriptor"",""protoProps"",""staticProps"",""_assign"",""_assign2"",""_symbol"",""_symbol2"",""_typeof"",""constructor"",""forbiddenField"",""is"",""createElement"",""ArrayProto"",""isArray"",""arg"",""ret"",""hiddenKeys"",""getOwnPropertyNames"",""toIObject"",""arrayIndexOf"",""names"",""push"",""safe"",""TYPE"",""20"",""27"",""30"",""31"",""32"",""33"",""34"",""36"",""39"",""40"",""41"",""43"",""44"",""45"",""46"",""47"",""48"",""49"",""51"",""52"",""53"",""54"",""55"",""56"",""57"",""58"",""60"",""61"",""62"",""63"",""64"",""65"",""66"",""81"",""82"",""84"",""86"",""90"",""91"",""92"",""93"",""94"",""95"",""98"",""211"",""212"",""213"",""216"",""218"",""220"",""221"",""222"",""223"",""224"",""225"",""226"",""227"",""228"",""229"",""230"",""231"",""232"",""233"",""234"",""235"",""236"",""237"",""238"",""239"",""240"",""241"",""242"",""243"",""244"",""245"",""246"",""247"",""248"",""249"",""250"",""251"",""252"",""253"",""254"",""255"",""256"",""257"",""258"",""260"",""261"",""262"",""263"",""264"",""265"",""266"",""267"",""268"",""269"",""290"",""291"",""297"",""298"",""299"",""350"",""351"",""352"",""353"",""354"",""355"",""356"",""357"",""358"",""359"",""370"",""371"",""372"",""373"",""374"",""375"",""376"",""377"",""378"",""380"",""381"",""382"",""383"",""385"",""386"",""387"",""389"",""420"",""421"",""423"",""500"",""501"",""502"",""503"",""504"",""505"",""506"",""507"",""508"",""509"",""590"",""591"",""592"",""593"",""594"",""595"",""596"",""597"",""598"",""599"",""670"",""672"",""673"",""674"",""675"",""676"",""677"",""678"",""679"",""680"",""681"",""682"",""683"",""685"",""686"",""687"",""688"",""689"",""690"",""691"",""692"",""800"",""808"",""850"",""852"",""853"",""855"",""856"",""870"",""878"",""880"",""881"",""882"",""883"",""886"",""888"",""960"",""961"",""962"",""963"",""964"",""965"",""966"",""967"",""968"",""970"",""971"",""972"",""973"",""974"",""975"",""976"",""977"",""979"",""992"",""993"",""994"",""995"",""996"",""998"",""AC"",""AD"",""AE"",""AF"",""AG"",""AI"",""AL"",""AM"",""AO"",""AR"",""AS"",""AT"",""AU"",""AW"",""AX"",""AZ"",""BA"",""BB"",""BD"",""BE"",""BF"",""BG"",""BH"",""BI"",""BJ"",""BL"",""BM"",""BN"",""BO"",""BQ"",""BR"",""BS"",""BT"",""BW"",""BY"",""BZ"",""CA"",""CC"",""CD"",""CF"",""CG"",""CH"",""CI"",""CK"",""CL"",""CM"",""CN"",""CO"",""CR"",""CU"",""CV"",""CW"",""CX"",""CY"",""CZ"",""DE"",""DJ"",""DK"",""DM"",""DO"",""DZ"",""EC"",""EE"",""EG"",""EH"",""ER"",""ES"",""ET"",""FI"",""FJ"",""FK"",""FM"",""FO"",""FR"",""GA"",""GB"",""GD"",""GE"",""GF"",""GG"",""GH"",""GI"",""GL"",""GM"",""GN"",""GP"",""GQ"",""GR"",""GT"",""GU"",""GW"",""GY"",""HK"",""HN"",""HR"",""HT"",""HU"",""ID"",""IE"",""IL"",""IM"",""IN"",""IO"",""IQ"",""IR"",""IS"",""IT"",""JE"",""JM"",""JO"",""JP"",""KE"",""KG"",""KH"",""KI"",""KM"",""KN"",""KP"",""KR"",""KW"",""KY"",""KZ"",""LA"",""LB"",""LC"",""LI"",""LK"",""LR"",""LS"",""LT"",""LU"",""LV"",""LY"",""MA"",""MC"",""MD"",""ME"",""MF"",""MG"",""MH"",""MK"",""ML"",""MM"",""MN"",""MO"",""MP"",""MQ"",""MR"",""MS"",""MT"",""MU"",""MV"",""MW"",""MX"",""MY"",""MZ"",""NA"",""NC"",""NE"",""NF"",""NG"",""NI"",""NL"",""NO"",""NP"",""NR"",""NU"",""NZ"",""OM"",""PA"",""PE"",""PF"",""PG"",""PH"",""PK"",""PL"",""PM"",""PR"",""PS"",""PT"",""PW"",""PY"",""QA"",""RE"",""RO"",""RS"",""RU"",""RW"",""SA"",""SB"",""SC"",""SD"",""SE"",""SG"",""SH"",""SI"",""SJ"",""SK"",""SL"",""SM"",""SN"",""SO"",""SR"",""SS"",""ST"",""SV"",""SX"",""SY"",""SZ"",""TA"",""TC"",""TD"",""TG"",""TH"",""TJ"",""TK"",""TL"",""TM"",""TN"",""TO"",""TR"",""TT"",""TV"",""TW"",""TZ"",""UA"",""UG"",""US"",""UY"",""UZ"",""VA"",""VC"",""VE"",""VG"",""VI"",""VN"",""VU"",""WF"",""WS"",""XK"",""YE"",""YT"",""ZA"",""ZM"",""ZW"",""001"",""close_dangling_braces"",""template"",""cut_before"",""retained_template"",""opening_braces"",""count_occurences"",""closing_braces"",""dangling_braces"",""symbol"",""string"",""count"",""_iteratorNormalCompletion4"",""_didIteratorError4"",""_iteratorError4"",""_step4"",""_iterator4"",""repeat"",""times"",""DIGIT_PLACEHOLDER"",""DUMMY_DIGIT_MATCHER"",""LONGEST_DUMMY_PHONE_NUMBER"",""DIGIT_PLACEHOLDER_MATCHER"",""DIGIT_PLACEHOLDER_MATCHER_GLOBAL"",""CHARACTER_CLASS_PATTERN"",""STANDALONE_DIGIT_PATTERN"",""ELIGIBLE_FORMAT_PATTERN"",""VALID_INCOMPLETE_PHONE_NUMBER"",""VALID_INCOMPLETE_PHONE_NUMBER_PATTERN"",""AsYouType"",""country_code"",""reset"",""extracted_number"",""process_input"",""current_output"",""parsed_input"",""reset_countriness"",""determine_the_country"",""extract_country_calling_code"",""initialize_phone_number_formats_for_this_country_calling_code"",""reset_format"",""previous_national_prefix"",""national_prefix"",""extract_national_prefix"",""matching_formats"",""should_format"",""format_as_non_formatted_number"",""match_formats_by_leading_digits"",""formatted_national_phone_number"",""format_national_phone_number"",""full_phone_number"",""next_digits"",""national_number_formatted_with_previous_format"",""chosen_format"",""format_next_national_number_digits"",""attempt_to_format_complete_phone_number"",""choose_another_format"",""reformat_national_number"",""reset_country"",""partially_populated_template"",""last_match_position"",""filter"",""leading_digits"",""index_of_leading_digits_pattern"",""leading_digits_pattern_count"",""leading_digits_pattern_index"",""leading_digits_pattern"",""is_format_applicable"",""create_formatting_template"",""full_number"",""formatted_national_number"",""national_number_rule"",""nationalPrefixIsMandatoryWhenFormatting"",""get_template_for_phone_number_format_pattern"",""number_pattern"",""dummy_phone_number_matching_format_pattern"",""number_format"",""get_format_format"",""strict_pattern"",""national_number_dummy_digits"",""digits"",""_iteratorNormalCompletion3"",""_didIteratorError3"",""_iteratorError3"",""_step3"",""_iterator3"",""digit"",""is_valid"",""parameters"",""_metadataMin2"",""_format2"",""getNumberType"",""isValidNumber"",""_validate2"",""_AsYouType2"",""getCountryCallingCode"",""getCountryCallingCodeCustom"",""getPhoneCode"",""getPhoneCodeCustom"",""AsYouTypeCustom"",""getNumberTypeCustom"",""isValidNumberCustom"",""formatCustom"",""DIGITS"",""parseCustom"",""_create"",""_create2"",""_validate"",""_AsYouType"",""_metadataMin"",""_isIterable2"",""_isIterable3"",""sliceIterator"",""arr"",""_arr"",""_n"",""_d"",""_e"",""_s"",""from"",""assign"",""$Object"",""D"",""desc"",""Set"",""forOf"",""iter"",""toAbsoluteIndex"",""IS_INCLUDES"",""$this"",""el"",""fromIndex"",""toObject"",""asc"",""$create"",""IS_MAP"",""IS_FILTER"",""IS_SOME"",""IS_EVERY"",""IS_FIND_INDEX"",""NO_HOLES"",""callbackfn"",""res"",""SPECIES"",""original"",""speciesConstructor"",""redefineAll"",""anInstance"",""$iterDefine"",""setSpecies"",""DESCRIPTORS"",""validate"",""SIZE"",""getEntry"",""entry"",""_f"",""k"",""getConstructor"",""wrapper"",""ADDER"",""_l"",""clear"",""data"",""r"",""delete"",""prev"",""forEach"",""v"",""setStrong"",""_k"",""fails"",""each"",""common"",""IS_WEAK"",""_c"",""IS_ADDER"",""size"",""$defineProperty"",""getKeys"",""gOPS"",""pIE"",""getSymbols"",""symbols"",""isEnum"",""documentElement"",""SAFE_CLOSING"",""riter"",""skipClosing"",""$assign"",""A"",""K"",""join"",""aLen"",""j"",""gOPD"",""getOwnPropertyDescriptor"",""gOPN"",""windowNames"",""getWindowNames"",""ObjectProto"",""COLLECTION"",""mapping"",""cb"",""mapFn"",""nextItem"",""of"",""TO_STRING"",""pos"",""charCodeAt"",""max"",""getIterator"",""isIterable"",""createProperty"",""arrayLike"",""mapfn"",""addToUnscopables"",""Arguments"",""strong"",""$fails"",""wks"",""wksDefine"",""enumKeys"",""gOPNExt"",""$GOPD"",""$DP"",""$JSON"",""JSON"",""_stringify"",""stringify"",""HIDDEN"",""TO_PRIMITIVE"",""SymbolRegistry"",""AllSymbols"",""OPSymbols"",""USE_NATIVE"",""QObject"",""setter"",""findChild"",""setSymbolDesc"",""protoDesc"",""wrap"",""sym"",""isSymbol"",""$defineProperties"",""$propertyIsEnumerable"",""E"",""$getOwnPropertyDescriptor"",""$getOwnPropertyNames"",""$getOwnPropertySymbols"",""IS_OP"",""$set"",""set"",""es6Symbols"",""wellKnownSymbols"",""for"",""keyFor"",""useSetter"",""useSimple"",""replacer"",""$replacer"",""args"",""toJSON"",""pa"",""pb"",""na"",""Number"",""nb""],""mappings"":""CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,OAAA,oBAAAH,GACA,gBAAAC,SACAA,QAAA,eAAAD,IAEAD,EAAA,eAAAC,KACCK,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAP,OAGA,IAAAC,GAAAO,EAAAD,IACAE,EAAAF,EACAG,GAAA,EACAV,WAUA,OANAK,GAAAE,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAS,GAAA,EAGAT,EAAAD,QAvBA,GAAAQ,KA+DA,OAnCAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAG,EAAA,SAAAK,GAA2C,MAAAA,IAG3CR,EAAAS,EAAA,SAAAf,EAAAgB,EAAAC,GACAX,EAAAY,EAAAlB,EAAAgB,IACAG,OAAAC,eAAApB,EAAAgB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAX,EAAAkB,EAAA,SAAAvB,GACA,GAAAgB,GAAAhB,KAAAwB,WACA,WAA2B,MAAAxB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAK,GAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDrB,EAAAwB,EAAA,GAGAxB,IAAAyB,EAAA,MDgBM,SAAU9B,EAAQD,EAASM,GEhFjC,GAAA0B,GAAA1B,EAAA,WACA2B,EAAA3B,EAAA,IACA4B,EAAA5B,EAAA,GAAA4B,OACAC,EAAA,kBAAAD,IAEAjC,EAAAD,QAAA,SAAAgB,GACA,MAAAgB,GAAAhB,KAAAgB,EAAAhB,GACAmB,GAAAD,EAAAlB,KAAAmB,EAAAD,EAAAD,GAAA,UAAAjB,MAGAgB,SFuFM,SAAU/B,EAAQD,GGjGxB,GAAAoC,GAAAnC,EAAAD,SAA6BqC,QAAA,QAC7B,iBAAAC,WAAAF,IHwGM,SAAUnC,EAAQD,EAASM,GIzGjC,GAAAiC,GAAAjC,EAAA,GACAkC,EAAAlC,EAAA,IACAmC,EAAAnC,EAAA,IACAoC,EAAAvB,OAAAC,cAEApB,GAAA2C,EAAArC,EAAA,GAAAa,OAAAC,eAAA,SAAAwB,EAAAC,EAAAC,GAIA,GAHAP,EAAAK,GACAC,EAAAJ,EAAAI,GAAA,GACAN,EAAAO,GACAN,EAAA,IACA,MAAAE,GAAAE,EAAAC,EAAAC,GACG,MAAAC,IACH,UAAAD,IAAA,OAAAA,GAAA,KAAAE,WAAA,2BAEA,OADA,SAAAF,KAAAF,EAAAC,GAAAC,EAAAhC,OACA8B,IJiHM,SAAU3C,EAAQD,EAASM,GK9HjCL,EAAAD,SAAAM,EAAA,eACA,MAA0E,IAA1Ea,OAAAC,kBAAiC,KAAQG,IAAA,WAAmB,YAAc0B,KLuIpE,SAAUhD,EAAQD,EAASM,GMzIjC,GAAA4C,GAAA5C,EAAA,GACA8B,EAAA9B,EAAA,GACA6C,EAAA7C,EAAA,IACA8C,EAAA9C,EAAA,GAGA+C,EAAA,SAAAC,EAAAtC,EAAAuC,GACA,GASAC,GAAAC,EAAAC,EATAC,EAAAL,EAAAD,EAAAO,EACAC,EAAAP,EAAAD,EAAAS,EACAC,EAAAT,EAAAD,EAAAW,EACAC,EAAAX,EAAAD,EAAAR,EACAqB,EAAAZ,EAAAD,EAAAc,EACAC,EAAAd,EAAAD,EAAAgB,EACArE,EAAA6D,EAAAzB,IAAApB,KAAAoB,EAAApB,OACAsD,EAAAtE,EAAA,UACAuE,EAAAV,EAAAX,EAAAa,EAAAb,EAAAlC,IAAAkC,EAAAlC,QAAkF,SAElF6C,KAAAN,EAAAvC,EACA,KAAAwC,IAAAD,IAEAE,GAAAE,GAAAY,OAAAC,KAAAD,EAAAf,KACAA,IAAAxD,KAEA0D,EAAAD,EAAAc,EAAAf,GAAAD,EAAAC,GAEAxD,EAAAwD,GAAAK,GAAA,kBAAAU,GAAAf,GAAAD,EAAAC,GAEAU,GAAAT,EAAAN,EAAAO,EAAAR,GAEAkB,GAAAG,EAAAf,IAAAE,EAAA,SAAAe,GACA,GAAAb,GAAA,SAAAX,EAAAyB,EAAA7D,GACA,GAAAT,eAAAqE,GAAA,CACA,OAAAE,UAAAC,QACA,iBAAAH,EACA,kBAAAA,GAAAxB,EACA,kBAAAwB,GAAAxB,EAAAyB,GACW,UAAAD,GAAAxB,EAAAyB,EAAA7D,GACF,MAAA4D,GAAAI,MAAAzE,KAAAuE,WAGT,OADAf,GAAA,UAAAa,EAAA,UACAb,GAEKF,GAAAO,GAAA,kBAAAP,GAAAP,EAAA2B,SAAAnE,KAAA+C,KAELO,KACAjE,EAAA+E,UAAA/E,EAAA+E,aAA+CvB,GAAAE,EAE/CJ,EAAAD,EAAA2B,GAAAV,MAAAd,IAAAJ,EAAAkB,EAAAd,EAAAE,KAKAL,GAAAO,EAAA,EACAP,EAAAS,EAAA,EACAT,EAAAW,EAAA,EACAX,EAAAR,EAAA,EACAQ,EAAAc,EAAA,GACAd,EAAAgB,EAAA,GACAhB,EAAA4B,EAAA,GACA5B,EAAA2B,EAAA,IACA/E,EAAAD,QAAAqD,GNgJM,SAAUpD,EAAQD,GO3MxB,GAAAkD,GAAAjD,EAAAD,QAAA,mBAAAkF,gBAAAC,WACAD,OAAA,mBAAAE,YAAAD,WAAAC,KAEAN,SAAA,gBACA,iBAAAO,WAAAnC,IPmNM,SAAUjD,EAAQD,EAASM,GQxNjC,GAAAoC,GAAApC,EAAA,GACAgF,EAAAhF,EAAA,GACAL,GAAAD,QAAAM,EAAA,YAAAoB,EAAA8B,EAAA1C,GACA,MAAA4B,GAAAC,EAAAjB,EAAA8B,EAAA8B,EAAA,EAAAxE,KACC,SAAAY,EAAA8B,EAAA1C,GAED,MADAY,GAAA8B,GAAA1C,EACAY,IRgOM,SAAUzB,EAAQD,EAASM,GStOjCL,EAAAD,SAAkBuF,QAAAjF,EAAA,IAAAmB,YAAA,IT4OZ,SAAUxB,EAAQD,EAASM,GU5OjC,GAAAkF,GAAAlF,EAAA,GACAL,GAAAD,QAAA,SAAAyF,GACA,IAAAD,EAAAC,GAAA,KAAAzC,WAAAyC,EAAA,qBACA,OAAAA,KVoPM,SAAUxF,EAAQD,GWvPxB,GAAA6B,MAAuBA,cACvB5B,GAAAD,QAAA,SAAAyF,EAAAjC,GACA,MAAA3B,GAAAlB,KAAA8E,EAAAjC,KX+PM,SAAUvD,EAAQD,GYjQxBC,EAAAD,QAAA,SAAAyF,GACA,sBAAAA,GAAA,OAAAA,EAAA,kBAAAA,KZyQM,SAAUxF,EAAQD,EAASM,GazQjC,GAAAoF,GAAApF,EAAA,GACAL,GAAAD,QAAA,SAAA2F,EAAAC,EAAAhB,GAEA,GADAc,EAAAC,OACAnB,KAAAoB,EAAA,MAAAD,EACA,QAAAf,GACA,uBAAA3B,GACA,MAAA0C,GAAAhF,KAAAiF,EAAA3C,GAEA,wBAAAA,EAAAyB,GACA,MAAAiB,GAAAhF,KAAAiF,EAAA3C,EAAAyB,GAEA,wBAAAzB,EAAAyB,EAAA7D,GACA,MAAA8E,GAAAhF,KAAAiF,EAAA3C,EAAAyB,EAAA7D,IAGA,kBACA,MAAA8E,GAAAd,MAAAe,EAAAjB,cbmRM,SAAU1E,EAAQD,GcpSxBC,EAAAD,QAAA,SAAA6F,GACA,IACA,QAAAA,IACG,MAAA9C,GACH,Yd6SM,SAAU9C,EAAQD,GejTxBC,EAAAD,YfwTM,SAAUC,EAAQD,EAASM,GgBvTjC,GAAAwF,GAAAxF,EAAA,IACAyF,EAAAzF,EAAA,GACAL,GAAAD,QAAA,SAAAyF,GACA,MAAAK,GAAAC,EAAAN,MhBgUM,SAAUxF,EAAQD,EAASM,GAEjC,YiBvPS,SAAS0F,GAA0BC,GAC3C,OAAQC,EAA2BC,KAAKF,GAAU,IAAM,IAAMG,EAA+BH,EAAQI,GAS/F,QAASC,GAA+CL,EAAQM,GAGtE,KAFAN,EAASD,EAA0BC,IAGlC,QAKD,IAAkB,MAAdA,EAAO,GACV,OAASA,OAAQA,EAIlB,IAAkB,MAAdA,EAAO,GACV,QAaD,KADA,GAAIxF,GAAI,EACDA,EAAI,GAAK+F,GAA2B/F,GAAKwF,EAAOrB,QAAQ,CAC9D,GAAI6B,GAAqBR,EAAOS,MAAM,EAAGjG,EAEzC,IAAI8F,EAASI,sBAAsBF,GAClC,OACCA,mBAAoBA,EACpBR,OAAQA,EAAOS,MAAMjG,GAIvBA,KAGD,SAKM,QAASmG,KACf,GAAIC,GAAOlC,UAAUC,OAAS,OAAsBJ,KAAjBG,UAAU,GAAmBA,UAAU,GAAK,GAC3EmC,EAAqBnC,UAAU,EAED,iBAAvBmC,KACVA,EAAqB,OAASA,EAAqB,KAGpD,IAAIC,GAAiBF,EAAKG,MAAMF,EAChC,OAA0B,QAAnBC,GAA2BA,EAAe,GAAGnC,SAAWiC,EAAKjC,OAKrE,QAASwB,GAA+BS,EAAMI,GAC7C,GAAIC,GAAW,GAEXC,GAA4B,EAC5BC,GAAoB,EACpBC,MAAiB7C,EAErB,KACC,IAAK,GAAoC8C,GAAhCC,GAAY,EAAAC,EAAAjC,SAAasB,KAAgBM,GAA6BG,EAAQC,EAAUE,QAAQC,MAAOP,GAA4B,EAAM,CACjJ,GAAIQ,GAAYL,EAAMxG,MAElB8G,EAAcX,EAAaU,EAAUE,cAErCD,KACHV,GAAYU,IAGb,MAAOE,GACRV,GAAoB,EACpBC,EAAiBS,EAZlB,QAcC,KACMX,GAA6BI,EAAUQ,QAC3CR,EAAUQ,SAFZ,QAKC,GAAIX,EACH,KAAMC,IAKT,MAAOH,GjBoJR/F,OAAOC,eAAepB,EAAS,cAC9Bc,OAAO,IAERd,EAAQqG,eAAiBrG,EAAQgI,WAAahI,EAAQiI,sBAAoBzD,GAC1ExE,EiB9PkBgG,4BjB+PlBhG,EiBrPgBsG,iDjBsPhBtG,EiBxMgB4G,kBAvIhB,IAAAsB,GAAA5H,EAAA,GjBmVIkH,EAEJ,SAAgCW,GAAO,MAAOA,IAAOA,EAAI1G,WAAa0G,GAAQ5C,QAAS4C,IAF5CD,GiBpUhCF,GAFAC,oBAAoB,oCAEpBD,aAAa,MACpB9B,EAA6B,GAAIkC,QAAO,KAAOJ,EAAa,MAG5DxB,EAA0B,EAQnBH,oBACVgC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,EAAK,IACLC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,MjB8cL,SAAU3K,EAAQD,EAASM,GAEjC,YAmBA,SAASuK,GAAuB1C,GAAO,MAAOA,IAAOA,EAAI1G,WAAa0G,GAAQ5C,QAAS4C,GkBtSvF,QAAS2C,GAAQC,EAAOzH,GACvB,OAAQA,GACP,IAAK,aACJ,MAAOyH,GAAM,EACd,KAAK,SACJ,MAAOA,GAAM,EACd,KAAK,YACJ,MAAOA,GAAM,EACd,KAAK,eACJ,MAAOA,GAAM,EACd,KAAK,kBACJ,MAAOA,GAAM,EACd,KAAK,YACJ,MAAOA,GAAM,EACd,KAAK,MACJ,MAAOA,GAAM,EACd,KAAK,QACJ,MAAOA,GAAM,EACd,KAAK,OACJ,MAAOA,GAAM,EACd,KAAK,cACJ,MAAOA,GAAM,IlBiQhB5J,OAAOC,eAAepB,EAAS,cAC9Bc,OAAO,GkBvhBR,IAAAkK,GAAA1K,EAAA,IlB4hBI2K,EAAmBJ,EAAuBG,GkB3hB9CE,EAAA5K,EAAA,IlB+hBI6K,EAAgBN,EAAuBK,GkB9hB3CE,EAAA9K,EAAA,KAMI+K,GlB4hBkBR,EAAuBO,GkB5hB9B,WACd,QAASC,GAAS9E,GAIjB,IAHA,EAAA0E,EAAA1F,SAAgBnF,KAAMiL,IAGjB9E,IAAaA,EAAS+E,UAC1B,KAAM,IAAIC,OAAM,uBAGjBnL,MAAKmG,SAAWA,EAEhBnG,KAAKoL,IAAMjF,EAASlE,QACpBjC,KAAKqL,GAAKlF,EAASlE,QAyIpB,OAtIA,EAAA8I,EAAA5F,SAAa8F,IACZ7H,IAAK,aACL1C,MAAO,SAAoB4K,GAC1B,WAA4ClH,KAArCpE,KAAKmG,SAAS+E,UAAUI,MAGhClI,IAAK,UACL1C,MAAO,SAAiB6K,GACvB,IAAKA,EAGJ,MAFAvL,MAAKuL,aAAWnH,GAChBpE,KAAKwL,qBAAmBpH,GACjBpE,IAGR,KAAKA,KAAKyL,WAAWF,GACpB,KAAM,IAAIJ,OAAM,oBAAsBI,EAKvC,OAFAvL,MAAKuL,SAAWA,EAChBvL,KAAKwL,iBAAmBxL,KAAKmG,SAAS+E,UAAUK,GACzCvL,QAGRoD,IAAK,qBACL1C,MAAO,WACN,MAAOV,MAAKwL,iBAAiB,MAG9BpI,IAAK,wBACL1C,MAAO,WACN,MAAOV,MAAKwL,iBAAiB,MAG9BpI,IAAK,kBACL1C,MAAO,WACN,IAAIV,KAAKoL,GACT,MAAOpL,MAAKwL,iBAAiB,MAG9BpI,IAAK,UACL1C,MAAO,WACN,GAAIgL,GAAQ1L,IAGZ,QADcA,KAAKwL,iBAAiBxL,KAAKoL,GAAK,EAAI,QACnCO,IAAI,SAAUC,GAC5B,MAAO,IAAIC,GAAOD,EAAGF,QAIvBtI,IAAK,iBACL1C,MAAO,WACN,MAAOV,MAAKwL,iBAAiBxL,KAAKoL,GAAK,EAAI,MAG5ChI,IAAK,+BACL1C,MAAO,WACN,MAAOV,MAAKwL,iBAAiBxL,KAAKoL,GAAK,EAAI,MAG5ChI,IAAK,2BACL1C,MAAO,WAGN,MAAOV,MAAKwL,iBAAiBxL,KAAKoL,GAAK,EAAI,IAAMpL,KAAK8L,oBAGvD1I,IAAK,8BACL1C,MAAO,WACN,MAAOV,MAAKwL,iBAAiBxL,KAAKoL,GAAK,EAAI,MAG5ChI,IAAK,yCACL1C,MAAO,WACN,MAAOV,MAAKwL,iBAAiBxL,KAAKoL,GAAK,EAAI,MAG5ChI,IAAK,gBACL1C,MAAO,WACN,MAAOV,MAAKwL,iBAAiBxL,KAAKoL,GAAK,EAAI,MAG5ChI,IAAK,QACL1C,MAAO,WACN,MAAOV,MAAKwL,iBAAiBxL,KAAKoL,GAAK,EAAI,OAG5ChI,IAAK,WACL1C,MAAO,WACN,WAAwB0D,KAAjBpE,KAAK2K,WAGbvH,IAAK,OACL1C,MAAO,SAAcqL,GACpB,GAAI/L,KAAKgM,YAActB,EAAQ1K,KAAK2K,QAASoB,GAC5C,MAAO,IAAIE,GAAKvB,EAAQ1K,KAAK2K,QAASoB,GAAQ/L,SAIhDoD,IAAK,sBACL1C,MAAO,WACN,MAAIV,MAAKoL,GAAWpL,KAAKmG,SAAS+F,gCAC3BlM,KAAKmG,SAASgG,yBAetB/I,IAAK,oCACL1C,MAAO,SAA2C0L,GACjD,GAAId,GAAUtL,KAAKuG,sBAAsB6F,GAAsB,EAK3DpM,MAAKyL,WAAWH,IACnBtL,KAAKsL,QAAQA,MAIflI,IAAK,kBACL1C,MAAO,WACN,MAAOV,MAAKuL,aAIPN,KlBuiBRrL,GAAQuF,QkBpiBO8F,CAEf,IAAIY,GAAS,WACZ,QAASA,GAAOQ,EAAQlG,IACvB,EAAA0E,EAAA1F,SAAgBnF,KAAM6L,GAEtB7L,KAAKsM,QAAUD,EACfrM,KAAKmG,SAAWA,EA6DjB,OA1DA,EAAA4E,EAAA5F,SAAa0G,IACZzI,IAAK,UACL1C,MAAO,WACN,MAAOV,MAAKsM,QAAQ,MAGrBlJ,IAAK,SACL1C,MAAO,WACN,MAAOV,MAAKsM,QAAQ,MAGrBlJ,IAAK,wBACL1C,MAAO,WACN,MAAOV,MAAKsM,QAAQ,UAGrBlJ,IAAK,+BACL1C,MAAO,WACN,MAAOV,MAAKsM,QAAQ,IAAMtM,KAAKmG,SAASoG,kCAGzCnJ,IAAK,yCACL1C,MAAO,WACN,MAAOV,MAAKsM,QAAQ,IAAMtM,KAAKmG,SAASqG,4CAGzCpJ,IAAK,0CACL1C,MAAO,WAMN,MAAOV,MAAKuM,gCAGZvM,KAAKyM,uBAEJzM,KAAKwM,4CAMPpJ,IAAK,qBACL1C,MAAO,WAEN,MAA+C,OAAxCV,KAAKuM,gCAEZ,KAAKxG,KAAK/F,KAAKuM,+BAA+BG,QAAQ,KAAM,QAG7DtJ,IAAK,sBACL1C,MAAO,WACN,MAAOV,MAAKsM,QAAQ,IAAMtM,KAAKqM,aAI1BR,KAGJI,EAAO,WACV,QAASA,GAAK/I,EAAMiD,IACnB,EAAA0E,EAAA1F,SAAgBnF,KAAMiM,GAEtBjM,KAAKkD,KAAOA,EACZlD,KAAKmG,SAAWA,EAiBjB,OAdA,EAAA4E,EAAA5F,SAAa8G,IACZ7I,IAAK,UACL1C,MAAO,WACN,MAAIV,MAAKmG,SAASiF,GAAWpL,KAAKkD,KAC3BlD,KAAKkD,KAAK,MAGlBE,IAAK,kBACL1C,MAAO,WACN,IAAIV,KAAKmG,SAASiF,GAClB,MAAOpL,MAAKkD,KAAK,IAAMlD,KAAKmG,SAASwG,sBAIhCV,MlBokBF,SAAUpM,EAAQD,EAASM,GAEjC,YAiCA,SAASuK,GAAuB1C,GAAO,MAAOA,IAAOA,EAAI1G,WAAa0G,GAAQ5C,QAAS4C,GmB9tBtE,QAAS6E,GAAMC,EAAOC,EAAOC,EAAOC,GACpD,GAAIC,GAAsBC,EAAmBL,EAAOC,EAAOC,EAAOC,GAC9DvG,EAAOwG,EAAoBxG,KAC3B0G,EAAUF,EAAoBE,QAC9BhH,EAAW8G,EAAoB9G,QAKnC,IAAIgH,EAAQC,iBAAmBjH,EAASsF,WAAW0B,EAAQC,gBAC1D,KAAM,IAAIjC,OAAM,oBAAsBgC,EAAQC,eAK/C,IAAIC,GAAeC,EAAY7G,GAC3B8G,EAAyBF,EAAaxH,OACtC2H,EAAMH,EAAaG,GAKvB,KAAKD,EACJ,QAGD,IAAIE,GAAsBC,EAAmBH,EAAwBJ,EAAQC,eAAgBjH,GACzFmF,EAAUmC,EAAoBnC,QAC9BqC,EAAkBF,EAAoBE,gBACtCtH,EAAqBoH,EAAoBpH,kBAE7C,KAAKF,EAASyH,kBACb,MAAOT,GAAQU,UAAaxH,mBAAoBA,KAYjD,IAAIsH,EAAgBnJ,OAASsJ,GAAsBH,EAAgBnJ,OAASuJ,EAE3E,QAMD,IAAIC,MAAQ1C,KAAW,EAAA2C,EAAAzH,kBAAiBmH,EAAiB,GAAI3F,QAAO7B,EAAS+H,0BAE7E,OAAKf,GAAQU,UAKZvC,QAASA,EACTjF,mBAAoBA,EACpB2H,MAAOA,EACPG,WAAUH,IAAoC,IAArBb,EAAQU,UAAqB1H,EAASwG,mBAAqByB,EAAmBT,MAAwCvJ,KAAvBiC,EAAkCF,GAC1JkI,MAAOV,EACPH,IAAKA,GATEQ,EAAQM,EAAOhD,EAASqC,EAAiBH,MAoB3C,QAASe,GAAuB1I,GACtC,MAAOA,GAAOrB,QAAUsJ,IAAsB,EAAAG,EAAAzH,kBAAiBX,EAAQ2I,GAGjE,QAASC,GAA+BhI,GAC9C,IAAKA,GAAQA,EAAKjC,OAASkK,EAC1B,MAAO,EAKR,IAAIC,GAAYlI,EAAKmI,OAAOC,EAE5B,OAAIF,GAAY,EACR,GAGDlI,EAENH,MAAMqI,GAENjC,QAAQoC,EAAgC,IAInC,QAASC,GAAsBlJ,EAAQM,GAC7C,IAAKN,IAAWM,EAAS6I,2BACxB,MAAOnJ,EAIR,IAAIoJ,GAA0B,GAAIjH,QAAO,OAAS7B,EAAS6I,2BAA6B,KACpFE,EAA0BD,EAAwBxJ,KAAKI,EAgB3D,KAAKqJ,EACJ,MAAOrJ,EAGR,IAIIsJ,GAA2BD,EAAwBA,EAAwB1K,OAAS,EA4BxF,OAzBI2B,GAASiJ,+BAAiCD,EACftJ,EAAO6G,QAAQuC,EAAyB9I,EAASiJ,+BAKhDvJ,EAAOS,MAAM4I,EAAwB,GAAG1K,QAsBlE,QAAS6K,GAAkBjD,EAAsBkD,EAAuBnJ,GAE9E,GAAIoJ,GAAqBpJ,EAASI,sBAAsB6F,EAIxD,IAAkC,IAA9BmD,EAAmB/K,OACtB,MAAO+K,GAAmB,EAG3B,IAAIC,GAAmBrJ,EAASyH,kBAC5BtC,EAAUmE,EAAmBF,EAAoBD,EAAuBnJ,EAE5E,OADAA,GAASmF,QAAQkE,GACVlE,EAIR,QAASmE,GAAmBF,EAAoBD,EAAuBnJ,GACtE,GAAIY,IAA4B,EAC5BC,GAAoB,EACpBC,MAAiB7C,EAErB,KACC,IAAK,GAAkD8C,GAA9CC,GAAY,EAAAC,EAAAjC,SAAaoK,KAA8BxI,GAA6BG,EAAQC,EAAUE,QAAQC,MAAOP,GAA4B,EAAM,CAC/J,GAAIuE,GAAUpE,EAAMxG,KAKpB,IAHAyF,EAASmF,QAAQA,GAGbnF,EAASuJ,iBACZ,GAAIJ,GAAoF,IAA3DA,EAAsBV,OAAOzI,EAASuJ,iBAClE,MAAOpE,OAKJ,KAAI,EAAAqE,EAAAxK,UAAkBkJ,MAAOiB,EAAuBhE,QAASA,GAAWnF,EAASA,UACpF,MAAOmF,IAGT,MAAO5D,GACRV,GAAoB,EACpBC,EAAiBS,EApBlB,QAsBC,KACMX,GAA6BI,EAAUQ,QAC3CR,EAAUQ,SAFZ,QAKC,GAAIX,EACH,KAAMC,KAOV,QAASiG,GAAmBL,EAAOC,EAAOC,EAAOC,GAChD,GAAIvG,OAAO,GACP0G,MAAU,GACVhH,MAAW,EAIf,IAAqB,gBAAV0G,GAEJ,KAAM,IAAIjK,WAAU,+CA2B3B,IA5BC6D,EAAOoG,EAMa,gBAAVC,GACNE,GACHG,GAAU,EAAAyC,EAAAzK,UAAWiI,eAAgBN,GAASC,GAC9C5G,EAAW6G,IAEXG,GAAYC,eAAgBN,GAC5B3G,EAAW4G,GAOPA,GACHI,EAAUL,EACV3G,EAAW4G,GAEX5G,EAAW2G,GAKT3G,IAAaA,EAAS+E,UAC1B,KAAM,IAAIC,OAAM,uBAUjB,OALCgC,GADGA,GACO,EAAAyC,EAAAzK,YAAa0K,EAAiB1C,GAE9B0C,GAGFpJ,KAAMA,EAAM0G,QAASA,EAAShH,SAAU,GAAA2J,GAAA3K,QAAagB,IAM/D,QAAS4J,GAAgBlK,GACxB,GAAImK,GAAQnK,EAAO+I,OAAOqB,EAC1B,IAAID,EAAQ,EACX,QAKD,IAAIE,GAA2BrK,EAAOS,MAAM,EAAG0J,EAE/C,KAAKzB,EAAuB2B,GAC3B,QAKD,KAFA,GAAIC,GAAUtK,EAAOe,MAAMqJ,GACvB5P,EAAI,EACDA,EAAI8P,EAAQ3L,QAAQ,CAC1B,GAAkB,MAAd2L,EAAQ9P,IAAc8P,EAAQ9P,GAAGmE,OAAS,EAC7C,OACCqB,OAAQqK,EACR1C,IAAK2C,EAAQ9P,GAGfA,MAIF,QAAS+N,GAAmBT,EAAiByC,EAAkBjK,GAC9D,QAAQ,EAAAkK,EAAAC,8BAA6B3C,MAAiBvJ,GAAW+B,IAChE,IAAK,cACJ,OAAO,CAGR,SACC,OAAO,GAQV,QAASoK,GAA8CnE,EAAsBuB,EAAiBxH,GAW7F,GAAImF,GAAU+D,EAAkBjD,EAAsBuB,EAAiBxH,EAUvE,OAFAmF,GAAUnF,EAASmF,QAAQA,GAAWnF,EAASqK,kCAAkCpE,IAExEuB,gBAAiBA,EAAiBrC,QAASA,GAOrD,QAASmF,GAAsClD,EAAwBmD,EAAiBvK,GACvF,GAAImF,GAAUoF,CACdvK,GAASmF,QAAQA,EAEjB,IAAIqC,IAAkB,EAAAM,EAAArI,2BAA0B2H,GAU5CoD,EAA4B5B,EAAsBpB,EAAiBxH,EAGvE,IAAIA,EAASwG,kBAKZ,QAAQ,EAAA0D,EAAAC,8BAA6BK,MAA2BvM,GAAW+B,IAC1E,IAAK,YAEL,IAAK,iBACJ,KACD,SACCwH,EAAkBgD,OAShB,EAAA1C,EAAAzH,kBAAiBmH,EAAiBxH,EAAS+H,4BAA6B,EAAAD,EAAAzH,kBAAiBmK,EAA2BxK,EAAS+H,2BAGhIP,EAAkBgD,EAIpB,QAAShD,gBAAiBA,EAAiBrC,QAASA,GAOrD,QAASgC,GAAY7G,GAEpB,GAAIA,GAAiC,IAAzBA,EAAKmK,QAAQ,QACxB,OAAO,EAAAC,EAAAC,cAAarK,EAGrB,IAAIZ,GAAS4I,EAA+BhI,EAG5C,KAAK8H,EAAuB1I,GAC3B,QAKD,IAAIkL,GAA0BhB,EAAgBlK,EAC9C,OAAIkL,GAAwBvD,IACpBuD,GAGClL,OAAQA,GAGlB,QAASyI,GAAOhD,EAASqC,EAAiBH,GACzC,GAAIc,IACHhD,QAASA,EACT+C,MAAOV,EAOR,OAJIH,KACHc,EAAOd,IAAMA,GAGPc,EAOR,QAASZ,GAAmBH,EAAwBmD,EAAiBvK,GACpE,GAAI6K,IAAwB,EAAA/C,EAAA/H,gDAA+CqH,EAAwBpH,GAC/FE,EAAqB2K,EAAsB3K,mBAC3CR,EAASmL,EAAsBnL,MAEnC,KAAKA,EACJ,OAASQ,mBAAoBA,EAG9B,IAAIA,EAAoB,CACvB,GAAI4K,GAAUV,EAA8ClK,EAAoBR,EAAQM,EAExF,OADA8K,GAAQ5K,mBAAqBA,EACtB4K,EAGR,GAAIP,EAAiB,CACpB,GAAIQ,GAAWT,EAAsClD,EAAwBmD,EAAiBvK,EAG9F,OAFAA,GAASmF,QAAQoF,GACjBQ,EAAS7K,mBAAqBF,EAASE,qBAChC6K,EAGR,SnByPDnQ,OAAOC,eAAepB,EAAS,cAC9Bc,OAAO,IAERd,EAAQuR,iBAAe/M,GACvBxE,EAAQuF,QmBpsBkByH,EnBqsB1BhN,EmB1nBgB2O,yBnB2nBhB3O,EmBvnBgB6O,iCnBwnBhB7O,EmBnmBgBmP,wBnBomBhBnP,EmBtiBgByP,mBAxShB,IAAA+B,GAAAlR,EAAA,InBk1BI0P,EAAYnF,EAAuB2G,GmBj1BvCtJ,EAAA5H,EAAA,GnBq1BIkH,EAAgBqD,EAAuB3C,GmB/0B3CmG,EAAA/N,EAAA,IAEAmR,EAAAnR,EAAA,InBm1BI4P,EAAarF,EAAuB4G,GmBj1BxChB,EAAAnQ,EAAA,InBq1BIyP,EAAUlF,EAAuB4F,GmBn1BrCQ,EAAA3Q,EAAA,IAGI4N,EAAqB,EAIrBC,EAAqB,GAIrBW,EAA0B,IAInByC,iBAAe,eAItBG,EAAwB,KAAOH,EAAe,UAoB9CI,EAjBsB,QAiB4BD,EAAwB,2FAAsLA,EAAwB,aAAoBH,EAAe,WAI3TlB,EAAe,GAAIjI,QAAO,MAAQuJ,EAA4B,KAAM,KA0BpEC,EAAkC,IAAML,EAAe,KAAOrD,EAAqB,IAKnF2D,EAAqB,IAAAxD,EAAArG,WAAmB,aAAnBqG,EAAApG,kBAAgE,MAAasJ,EAAe,UAA5FlD,EAAApG,kBAAsIsJ,EAAe,KAI1K3C,EAA6B,GAAIxG,QAErC,IAAMwJ,EAAkC,MAElCC,EAEN,MAAQF,EAA4B,MAAY,KAG5C1C,EAA6B,GAAI7G,QAAO,IAAAiG,EAAArG,WAAmBuJ,EAAe,KAG1ErC,EAAiC,GAAI9G,QAAO,KAAOmJ,EAAe,OAElEtB,GACHvE,anBs0CK,SAAUzL,EAAQD,GoBh7CxBC,EAAAD,QAAA,SAAA8R,EAAAhR,GACA,OACAQ,aAAA,EAAAwQ,GACAzQ,eAAA,EAAAyQ,GACAC,WAAA,EAAAD,GACAhR,WpBy7CM,SAAUb,EAAQD,EAASM,GAEjC,YqB/7CA,IAAA0R,GAAA1R,EAAA,QAGAA,GAAA,IAAA2R,OAAA,kBAAAC,GACA9R,KAAA+R,GAAAF,OAAAC,GACA9R,KAAAgS,GAAA,GAEC,WACD,GAEAC,GAFAzP,EAAAxC,KAAA+R,GACAG,EAAAlS,KAAAgS,EAEA,OAAAE,IAAA1P,EAAAgC,QAAiC9D,UAAA0D,GAAAkD,MAAA,IACjC2K,EAAAL,EAAApP,EAAA0P,GACAlS,KAAAgS,IAAAC,EAAAzN,QACU9D,MAAAuR,EAAA3K,MAAA,OrBu8CJ,SAAUzH,EAAQD,EAASM,GAEjC,YAqCA,SAASuK,GAAuB1C,GAAO,MAAOA,IAAOA,EAAI1G,WAAa0G,GAAQ5C,QAAS4C,GsBh/CxE,QAASoK,GAAgBtF,EAAOC,EAAOC,GACrD,GAAIE,GAAsBC,EAAmBL,EAAOC,EAAOC,GACvDqF,EAAQnF,EAAoBmF,MAC5BjM,EAAW8G,EAAoB9G,QAKnC,IAAKiM,GAMAA,EAAM9G,QAAX,CAIA,IAAKnF,EAASsF,WAAW2G,EAAM9G,SAC9B,KAAM,IAAIH,OAAM,oBAAsBiH,EAAM9G,QAG7C,IAAIqC,GAAkByE,EAAM/D,KAO5B,IANAlI,EAASmF,QAAQ8G,EAAM9G,UAMlB,EAAA2C,EAAAzH,kBAAiBmH,EAAiBxH,EAAS+H,yBAAhD,CAKA,GAAImE,EAAW1E,EAAiB,aAAcxH,GAK7C,MAAIA,GAASjD,KAAK,WAAmD,KAAtCiD,EAASjD,KAAK,UAAUoP,UAC/C,uBAMHnM,EAASjD,KAAK,UAOfmP,EAAW1E,EAAiB,SAAUxH,GAClC,uBAGD,aAVC,sBAaT,IAAIY,IAA4B,EAC5BC,GAAoB,EACpBC,MAAiB7C,EAErB,KACC,IAAK,GAAoD8C,GAAhDC,GAAY,EAAAC,EAAAjC,SAAaoN,KAAgCxL,GAA6BG,EAAQC,EAAUE,QAAQC,MAAOP,GAA4B,EAAM,CACjK,GAAIgF,GAAQ7E,EAAMxG,KAElB,IAAI2R,EAAW1E,EAAiB5B,EAAO5F,GACtC,MAAO4F,IAGR,MAAOrE,GACRV,GAAoB,EACpBC,EAAiBS,EAVlB,QAYC,KACMX,GAA6BI,EAAUQ,QAC3CR,EAAUQ,SAFZ,QAKC,GAAIX,EACH,KAAMC,OAMH,QAASoL,GAAW1E,EAAiBzK,EAAMiD,GAGjD,UAFAjD,EAAOiD,EAASjD,KAAKA,MAEPA,EAAKoP,eAUfpP,EAAKyJ,mBAAqBzJ,EAAKyJ,kBAAkBiE,QAAQjD,EAAgBnJ,QAAU,KAIhF,EAAAyJ,EAAAzH,kBAAiBmH,EAAiBzK,EAAKoP,YAIxC,QAASpF,GAAmBL,EAAOC,EAAOC,GAChD,GAAIqF,OAAQ,GACRjM,MAAW,EAIf,IAAqB,gBAAV0G,GAIW,gBAAVC,QAAgC1I,KAAV0I,GAChC3G,EAAW4G,GAOP,EAAAyF,EAAAjE,wBAAuB1B,KAC1BuF,GAAQ,EAAAK,EAAAtN,SAAM0H,EAAOC,EAAO3G,MAO5BA,EAAW2G,GAOP,EAAA0F,EAAAjE,wBAAuB1B,KAC1BuF,GAAQ,EAAAK,EAAAtN,SAAM0H,EAAO1G,SAMpB,KAAIuM,EAAU7F,IAAiC,gBAAhBA,GAAMwB,MAQlC,KAAM,IAAIzL,WAAU,uFALtB,EAAA4P,EAAAjE,wBAAuB1B,EAAMwB,SAChC+D,EAAQvF,GAGT1G,EAAW2G,EAIb,IAAK3G,IAAaA,EAAS+E,UAC1B,KAAM,IAAIC,OAAM,uBAGjB,QAASiH,MAAOA,EAAOjM,SAAU,GAAA2J,GAAA3K,QAAagB,IAIxC,QAASmK,GAA6B3C,EAAiBzK,EAAMiD,GACnE,GAAIwM,GAAYxM,EAASjD,KAAKA,GAS1B0P,EAAmBD,GAAaA,EAAUhG,mBAAqBxG,EAASwG,iBAG5E,IAAa,yBAATzJ,EAAiC,CAGpC,IAAKiD,EAASjD,KAAK,cAGlB,MAAO2P,6BAA4BlF,EAAiB,SAAUxH,EAG/D,IAAI2M,GAAc3M,EAASjD,KAAK,SAE5B4P,KAMHF,EAAmBG,EAAaH,EAAkBE,EAAYnG,wBAgB3D,IAAIzJ,IAASyP,EAChB,MAAO,gBAGT,IAAIK,GAAgBrF,EAAgBnJ,OAShCyO,EAAiBL,EAAiB,EAEtC,OAAIK,KAAmBD,EACf,cAGJC,EAAiBD,EACb,YAGJJ,EAAiBA,EAAiBpO,OAAS,GAAKwO,EAC5C,WAIDJ,EAAiBhC,QAAQoC,EAAe,IAAM,EAAI,cAAgB,iBAU1E,QAASD,GAAalQ,EAAGyB,GACxB,GAAI4O,GAAS,GAAAC,GAAAhO,QAAStC,GAElBuQ,GAA6B,EAC7BC,GAAqB,EACrBC,MAAkBlP,EAEtB,KACC,IAAK,GAAkCmP,GAA9BC,GAAa,EAAApM,EAAAjC,SAAab,KAAc8O,GAA8BG,EAASC,EAAWnM,QAAQC,MAAO8L,GAA6B,EAAM,CACpJ,GAAI/S,GAAIkT,EAAO7S,KAEfwS,GAAOO,IAAIpT,IAEX,MAAOqH,GACR2L,GAAqB,EACrBC,EAAkB5L,EARnB,QAUC,KACM0L,GAA8BI,EAAW7L,QAC7C6L,EAAW7L,SAFb,QAKC,GAAI0L,EACH,KAAMC,IAST,MAJAJ,IAAS,EAAAQ,EAAAvO,SAAY+N,GACrBA,EAAOS,KAAK,SAAU9Q,EAAGyB,GACxB,MAAOzB,GAAIyB,IAEL4O,EtBkrCRnS,OAAOC,eAAepB,EAAS,cAC9Bc,OAAO,IAERd,EAAQuF,QsBj9CgBgN,EtBk9CxBvS,EsB13CgByS,atB23ChBzS,EsBt2CgBsN,qBtBu2ChBtN,EsB5yCgB0Q,8BArLhB,IAAAsD,GAAA1T,EAAA,ItBq+CIwT,EAASjJ,EAAuBmJ,GsBp+CpCC,EAAA3T,EAAA,ItBw+CIiT,EAAQ1I,EAAuBoJ,GsBv+CnCC,EAAA5T,EAAA,ItB2+CI6T,EAAWtJ,EAAuBqJ,GsB1+CtChM,EAAA5H,EAAA,GtB8+CIkH,EAAgBqD,EAAuB3C,GsB7+C3C0K,EAAAtS,EAAA,ItBi/CIuS,EAAUhI,EAAuB+H,GsB/+CrCvE,EAAA/N,EAAA,IAEAmR,EAAAnR,EAAA,ItBm/CI4P,EAAarF,EAAuB4G,GsBj/CpCkB,GAAwB,SAAU,eAAgB,YAAa,cAAe,OAAQ,kBAAmB,QAAS,MAAO,aA2PzHG,EAAY,SAAmB9G,GAClC,MAAiE,gBAA5C,KAANA,EAAoB,aAAc,EAAAmI,EAAA5O,SAAQyG,MtB8hDpD,SAAU/L,EAAQD,EAASM,GuBpyDjC,GAAA6C,GAAA7C,EAAA,IACAK,EAAAL,EAAA,IACA8T,EAAA9T,EAAA,IACAiC,EAAAjC,EAAA,GACA+T,EAAA/T,EAAA,IACAgU,EAAAhU,EAAA,IACAiU,KACAC,KACAxU,EAAAC,EAAAD,QAAA,SAAAyU,EAAAC,EAAA/O,EAAAC,EAAA+O,GACA,GAGA/P,GAAAgQ,EAAAC,EAAAnG,EAHAoG,EAAAH,EAAA,WAAuC,MAAAF,IAAmBH,EAAAG,GAC1D9R,EAAAQ,EAAAwC,EAAAC,EAAA8O,EAAA,KACApC,EAAA,CAEA,sBAAAwC,GAAA,KAAA9R,WAAAyR,EAAA,oBAEA,IAAAL,EAAAU,IAAA,IAAAlQ,EAAAyP,EAAAI,EAAA7P,QAAmEA,EAAA0N,EAAgBA,IAEnF,IADA5D,EAAAgG,EAAA/R,EAAAJ,EAAAqS,EAAAH,EAAAnC,IAAA,GAAAsC,EAAA,IAAAjS,EAAA8R,EAAAnC,OACAiC,GAAA7F,IAAA8F,EAAA,MAAA9F,OACG,KAAAmG,EAAAC,EAAAnU,KAAA8T,KAA4CG,EAAAC,EAAApN,QAAAC,MAE/C,IADAgH,EAAA/N,EAAAkU,EAAAlS,EAAAiS,EAAA9T,MAAA4T,MACAH,GAAA7F,IAAA8F,EAAA,MAAA9F,GAGA1O,GAAAuU,QACAvU,EAAAwU,UvB2yDM,SAAUvU,EAAQD,EAASM,GwBl0DjC,GAAAiC,GAAAjC,EAAA,GACAyU,EAAAzU,EAAA,KACA0U,EAAA1U,EAAA,IACA2U,EAAA3U,EAAA,gBACA4U,EAAA,aAIAC,EAAA,WAEA,GAIAC,GAJAC,EAAA/U,EAAA,cACAG,EAAAuU,EAAApQ,MAcA,KAVAyQ,EAAAC,MAAAC,QAAA,OACAjV,EAAA,IAAAkV,YAAAH,GACAA,EAAAI,IAAA,cAGAL,EAAAC,EAAAK,cAAAC,SACAP,EAAAQ,OACAR,EAAAS,MAAAC,uCACAV,EAAAW,QACAZ,EAAAC,EAAAxR,EACAnD,WAAA0U,GAAA,UAAAH,EAAAvU,GACA,OAAA0U,KAGAlV,GAAAD,QAAAmB,OAAA6U,QAAA,SAAApT,EAAAqT,GACA,GAAAvH,EAQA,OAPA,QAAA9L,GACAsS,EAAA,UAAA3S,EAAAK,GACA8L,EAAA,GAAAwG,GACAA,EAAA,eAEAxG,EAAAuG,GAAArS,GACG8L,EAAAyG,QACH3Q,KAAAyR,EAAAvH,EAAAqG,EAAArG,EAAAuH,KxB20DM,SAAUhW,EAAQD,EAASM,GyBj3DjC,GAAA4V,GAAA5V,EAAA,IACA0U,EAAA1U,EAAA,GAEAL,GAAAD,QAAAmB,OAAAgV,MAAA,SAAAvT,GACA,MAAAsT,GAAAtT,EAAAoS,KzB03DM,SAAU/U,EAAQD,G0B/3DxBA,EAAA2C,KAAcyT,sB1Bs4DR,SAAUnW,EAAQD,EAASM,G2Bt4DjC,GAAA+V,GAAA/V,EAAA,GAAAqC,EACA2T,EAAAhW,EAAA,GACAiW,EAAAjW,EAAA,iBAEAL,GAAAD,QAAA,SAAAyF,EAAA+Q,EAAAC,GACAhR,IAAA6Q,EAAA7Q,EAAAgR,EAAAhR,IAAA7D,UAAA2U,IAAAF,EAAA5Q,EAAA8Q,GAAoElV,cAAA,EAAAP,MAAA0V,M3B84D9D,SAAUvW,EAAQD,EAASM,G4Bl5DjC,GAAAoW,GAAApW,EAAA,IACAqW,EAAAxR,KAAAwR,GACA1W,GAAAD,QAAA,SAAAyF,GACA,MAAAA,GAAA,EAAAkR,EAAAD,EAAAjR,GAAA,sB5B25DM,SAAUxF,EAAQD,EAASM,G6B95DjC,GAAAyF,GAAAzF,EAAA,GACAL,GAAAD,QAAA,SAAAyF,GACA,MAAAtE,QAAA4E,EAAAN,M7Bu6DM,SAAUxF,EAAQD,G8B16DxB,GAAA4W,GAAA,EACAC,EAAA1R,KAAA2R,QACA7W,GAAAD,QAAA,SAAAwD,GACA,gBAAAuT,WAAAvS,KAAAhB,EAAA,GAAAA,EAAA,QAAAoT,EAAAC,GAAAG,SAAA,O9Bk7DM,SAAU/W,EAAQD,EAASM,G+Br7DjCA,EAAA,IAYA,QAXA4C,GAAA5C,EAAA,GACA8C,EAAA9C,EAAA,GACA2W,EAAA3W,EAAA,IACA4W,EAAA5W,EAAA,kBAEA6W,EAAA,wbAIAC,MAAA,KAEA3W,EAAA,EAAeA,EAAA0W,EAAAvS,OAAyBnE,IAAA,CACxC,GAAA4W,GAAAF,EAAA1W,GACA6W,EAAApU,EAAAmU,GACAE,EAAAD,KAAA1V,SACA2V,OAAAL,IAAA9T,EAAAmU,EAAAL,EAAAG,GACAJ,EAAAI,GAAAJ,EAAAO,Q/B67DM,SAAUvX,EAAQD,EAASM,GAEjC,YAmBA,SAASuK,GAAuB1C,GAAO,MAAOA,IAAOA,EAAI1G,WAAa0G,GAAQ5C,QAAS4C,GgC39DhF,QAAS+I,GAAarK,GAC5B,GAAIZ,OAAS,GACT2H,MAAM,GAENzG,GAA4B,EAC5BC,GAAoB,EACpBC,MAAiB7C,EAErB,KACC,IAAK,GAA+C8C,GAA3CC,GAAY,EAAAC,EAAAjC,SAAasB,EAAKuQ,MAAM,QAAgBjQ,GAA6BG,EAAQC,EAAUE,QAAQC,MAAOP,GAA4B,EAAM,CAC5J,GAAIsQ,GAAOnQ,EAAMxG,MAEb4W,EAAcD,EAAKL,MAAM,KACzBO,GAAe,EAAAC,EAAArS,SAAemS,EAAa,GAC3C1W,EAAO2W,EAAa,GACpB7W,EAAQ6W,EAAa,EAEzB,QAAQ3W,GACP,IAAK,MACJiF,EAASnF,CACT,MACD,KAAK,MACJ8M,EAAM9M,CACN,MACD,KAAK,gBAGa,MAAbA,EAAM,KACTmF,EAASnF,EAAQmF,KAOpB,MAAO6B,GACRV,GAAoB,EACpBC,EAAiBS,EA7BlB,QA+BC,KACMX,GAA6BI,EAAUQ,QAC3CR,EAAUQ,SAFZ,QAKC,GAAIX,EACH,KAAMC,IAKT,OAAK,EAAAuL,EAAAjE,wBAAuB1I,IAK3BA,OAAQA,EACR2H,IAAKA,MAQA,QAASiK,GAAcC,GAC7B,GAAI7R,GAAS6R,EAAK7R,OACd2H,EAAMkK,EAAKlK,GAEf,KAAK3H,EACJ,MAAO,EAGR,IAAkB,MAAdA,EAAO,GACV,KAAM,IAAIsF,OAAM,4DAGjB,OAAO,OAAStF,GAAU2H,EAAM,QAAUA,EAAM,IhC+3DjDzM,OAAOC,eAAepB,EAAS,cAC9Bc,OAAO,IAERd,EgC98DgBkR,ehC+8DhBlR,EgC/4DgB6X,eAxEhB,IAAAE,GAAAzX,EAAA,IhC29DIsX,EAAkB/M,EAAuBkN,GgC19D7C7P,EAAA5H,EAAA,GhC89DIkH,EAAgBqD,EAAuB3C,GgC79D3C0K,EAAAtS,EAAA,KhCyjEM,SAAUL,EAAQD,EAASM,GiC1jEjC,GAAA0X,GAAA1X,EAAA,IACAiW,EAAAjW,EAAA,kBAEA2X,EAA+C,aAA/CD,EAAA,WAA2B,MAAArT,eAG3BuT,EAAA,SAAAzS,EAAAjC,GACA,IACA,MAAAiC,GAAAjC,GACG,MAAAT,KAGH9C,GAAAD,QAAA,SAAAyF,GACA,GAAA7C,GAAAuV,EAAAhU,CACA,YAAAK,KAAAiB,EAAA,mBAAAA,EAAA,OAEA,iBAAA0S,EAAAD,EAAAtV,EAAAzB,OAAAsE,GAAA8Q,IAAA4B,EAEAF,EAAAD,EAAApV,GAEA,WAAAuB,EAAA6T,EAAApV,KAAA,kBAAAA,GAAAwV,OAAA,YAAAjU,IjCmkEM,SAAUlE,EAAQD,GkCxlExB,GAAAgX,MAAiBA,QAEjB/W,GAAAD,QAAA,SAAAyF,GACA,MAAAuR,GAAArW,KAAA8E,GAAAiB,MAAA,QlCgmEM,SAAUzG,EAAQD,GmClmExBC,EAAAD,QAAA,SAAAyF,GACA,OAAAjB,IAAAiB,EAAA,KAAAzC,WAAA,yBAAAyC,EACA,OAAAA,KnC2mEM,SAAUxF,EAAQD,GoC7mExBC,EAAAD,QAAA,gGAEAoX,MAAA,MpCqnEM,SAAUnX,EAAQD,EAASM,GqCvnEjC,GAAA0X,GAAA1X,EAAA,GAEAL,GAAAD,QAAAmB,OAAA,KAAAiV,qBAAA,GAAAjV,OAAA,SAAAsE,GACA,gBAAAuS,EAAAvS,KAAA2R,MAAA,IAAAjW,OAAAsE,KrCgoEM,SAAUxF,EAAQD,EAASM,GAEjC,YsCroEA,IAAA+X,GAAA/X,EAAA,IACA+C,EAAA/C,EAAA,GACAgY,EAAAhY,EAAA,IACA8C,EAAA9C,EAAA,GACAgW,EAAAhW,EAAA,GACA2W,EAAA3W,EAAA,IACAiY,EAAAjY,EAAA,KACAkY,EAAAlY,EAAA,IACAmY,EAAAnY,EAAA,KACAqU,EAAArU,EAAA,eACAoY,OAAAvC,MAAA,WAAAA,QAKAwC,EAAA,WAA8B,MAAAvY,MAE9BH,GAAAD,QAAA,SAAA4Y,EAAAvB,EAAAwB,EAAApR,EAAAqR,EAAAC,EAAAC,GACAT,EAAAM,EAAAxB,EAAA5P,EACA,IAeAwR,GAAAzV,EAAA0V,EAfAC,EAAA,SAAAC,GACA,IAAAV,GAAAU,IAAA7B,GAAA,MAAAA,GAAA6B,EACA,QAAAA,GACA,IAVA,OAWA,IAVA,SAUA,kBAA6C,UAAAP,GAAAzY,KAAAgZ,IACxC,kBAA4B,UAAAP,GAAAzY,KAAAgZ,KAEjC7C,EAAAc,EAAA,YACAgC,EAdA,UAcAP,EACAQ,GAAA,EACA/B,EAAAqB,EAAAhX,UACA2X,EAAAhC,EAAA5C,IAAA4C,EAnBA,eAmBAuB,GAAAvB,EAAAuB,GACAU,EAAAD,GAAAJ,EAAAL,GACAW,EAAAX,EAAAO,EAAAF,EAAA,WAAAK,MAAAhV,GACAkV,EAAA,SAAArC,EAAAE,EAAA7C,SAAA6E,GAwBA,IArBAG,IACAR,EAAAT,EAAAiB,EAAA/Y,KAAA,GAAAiY,QACAzX,OAAAS,WAAAsX,EAAAzR,OAEA+Q,EAAAU,EAAA3C,GAAA,GAEA8B,GAAA/B,EAAA4C,EAAAvE,IAAAvR,EAAA8V,EAAAvE,EAAAgE,IAIAU,GAAAE,GAjCA,WAiCAA,EAAAvY,OACAsY,GAAA,EACAE,EAAA,WAAkC,MAAAD,GAAA5Y,KAAAP,QAGlCiY,IAAAW,IAAAN,IAAAY,GAAA/B,EAAA5C,IACAvR,EAAAmU,EAAA5C,EAAA6E,GAGAvC,EAAAI,GAAAmC,EACAvC,EAAAV,GAAAoC,EACAG,EAMA,GALAG,GACAU,OAAAN,EAAAG,EAAAL,EA9CA,UA+CAhD,KAAA4C,EAAAS,EAAAL,EAhDA,QAiDAzE,QAAA+E,GAEAT,EAAA,IAAAxV,IAAAyV,GACAzV,IAAA+T,IAAAe,EAAAf,EAAA/T,EAAAyV,EAAAzV,QACKH,KAAAR,EAAAQ,EAAAO,GAAA8U,GAAAY,GAAAjC,EAAA4B,EAEL,OAAAA,KtC6oEM,SAAUhZ,EAAQD,GuCjtExBC,EAAAD,SAAA,GvCwtEM,SAAUC,EAAQD,EAASM,GwCxtEjC,GAAAsZ,GAAAtZ,EAAA,YACAkF,EAAAlF,EAAA,IACAgW,EAAAhW,EAAA,GACAuZ,EAAAvZ,EAAA,GAAAqC,EACAiU,EAAA,EACAkD,EAAA3Y,OAAA2Y,cAAA,WACA,UAEAC,GAAAzZ,EAAA,eACA,MAAAwZ,GAAA3Y,OAAA6Y,yBAEAC,EAAA,SAAAxU,GACAoU,EAAApU,EAAAmU,GAAqB9Y,OACrBL,EAAA,OAAAmW,EACAsD,SAGAC,EAAA,SAAA1U,EAAAuQ,GAEA,IAAAxQ,EAAAC,GAAA,sBAAAA,MAAA,gBAAAA,GAAA,SAAAA,CACA,KAAA6Q,EAAA7Q,EAAAmU,GAAA,CAEA,IAAAE,EAAArU,GAAA,SAEA,KAAAuQ,EAAA,SAEAiE,GAAAxU,GAEG,MAAAA,GAAAmU,GAAAnZ,GAEH2Z,EAAA,SAAA3U,EAAAuQ,GACA,IAAAM,EAAA7Q,EAAAmU,GAAA,CAEA,IAAAE,EAAArU,GAAA,QAEA,KAAAuQ,EAAA,QAEAiE,GAAAxU,GAEG,MAAAA,GAAAmU,GAAAM,GAGHG,EAAA,SAAA5U,GAEA,MADAsU,IAAAO,EAAAC,MAAAT,EAAArU,KAAA6Q,EAAA7Q,EAAAmU,IAAAK,EAAAxU,GACAA,GAEA6U,EAAAra,EAAAD,SACAwa,IAAAZ,EACAW,MAAA,EACAJ,UACAC,UACAC,axCguEM,SAAUpa,EAAQD,GyCnxExBA,EAAA2C,EAAAxB,OAAAsZ,uBzC0xEM,SAAUxa,EAAQD,EAASM,G0C1xEjC,GAAAoa,GAAApa,EAAA,YACA2B,EAAA3B,EAAA,GACAL,GAAAD,QAAA,SAAAwD,GACA,MAAAkX,GAAAlX,KAAAkX,EAAAlX,GAAAvB,EAAAuB,M1CkyEM,SAAUvD,EAAQD,EAASM,G2CryEjC,GAAA4C,GAAA5C,EAAA,GAEA0B,EAAAkB,EADA,wBACAA,EADA,yBAEAjD,GAAAD,QAAA,SAAAwD,GACA,MAAAxB,GAAAwB,KAAAxB,EAAAwB,S3C6yEM,SAAUvD,EAAQD,G4ChzExB,GAAA2a,GAAAxV,KAAAwV,KACAC,EAAAzV,KAAAyV,KACA3a,GAAAD,QAAA,SAAAyF,GACA,MAAAoV,OAAApV,MAAA,GAAAA,EAAA,EAAAmV,EAAAD,GAAAlV,K5CyzEM,SAAUxF,EAAQD,EAASM,G6C5zEjC,GAAAkF,GAAAlF,EAAA,GAGAL,GAAAD,QAAA,SAAAyF,EAAAzB,GACA,IAAAwB,EAAAC,GAAA,MAAAA,EACA,IAAAE,GAAAmV,CACA,IAAA9W,GAAA,mBAAA2B,EAAAF,EAAAuR,YAAAxR,EAAAsV,EAAAnV,EAAAhF,KAAA8E,IAAA,MAAAqV,EACA,uBAAAnV,EAAAF,EAAAsV,WAAAvV,EAAAsV,EAAAnV,EAAAhF,KAAA8E,IAAA,MAAAqV,EACA,KAAA9W,GAAA,mBAAA2B,EAAAF,EAAAuR,YAAAxR,EAAAsV,EAAAnV,EAAAhF,KAAA8E,IAAA,MAAAqV,EACA,MAAA9X,WAAA,6C7Cq0EM,SAAU/C,EAAQD,EAASM,G8C/0EjC,GAAA4C,GAAA5C,EAAA,GACA8B,EAAA9B,EAAA,GACA+X,EAAA/X,EAAA,IACA0a,EAAA1a,EAAA,IACAc,EAAAd,EAAA,GAAAqC,CACA1C,GAAAD,QAAA,SAAAgB,GACA,GAAAia,GAAA7Y,EAAAF,SAAAE,EAAAF,OAAAmW,KAA0DnV,EAAAhB,WAC1D,MAAAlB,EAAAka,OAAA,IAAAla,IAAAia,IAAA7Z,EAAA6Z,EAAAja,GAAkFF,MAAAka,EAAArY,EAAA3B,O9Cu1E5E,SAAUf,EAAQD,EAASM,G+C91EjCN,EAAA2C,EAAArC,EAAA,I/Cq2EM,SAAUL,EAAQD,EAASM,GgDr2EjC,GAAA6a,GAAA7a,EAAA,IACAqU,EAAArU,EAAA,eACA2W,EAAA3W,EAAA,GACAL,GAAAD,QAAAM,EAAA,GAAA8a,kBAAA,SAAA3V,GACA,OAAAjB,IAAAiB,EAAA,MAAAA,GAAAkP,IACAlP,EAAA,eACAwR,EAAAkE,EAAA1V,MhD62EM,SAAUxF,EAAQD,EAASM,GAEjC,YAgCA,SAASuK,GAAuB1C,GAAO,MAAOA,IAAOA,EAAI1G,WAAa0G,GAAQ5C,QAAS4C,GiDr3EtE,QAASsE,GAAOQ,EAAOC,EAAOC,EAAOC,EAAOiO,GAC5D,GAAIhO,GAAsBC,EAAmBL,EAAOC,EAAOC,EAAOC,EAAOiO,GACrE7I,EAAQnF,EAAoBmF,MAC5B8I,EAAcjO,EAAoBiO,YAClC/N,EAAUF,EAAoBE,QAC9BhH,EAAW8G,EAAoB9G,QAE/BiM,GAAM9G,SAAWnF,EAASsF,WAAW2G,EAAM9G,UAC9CnF,EAASmF,QAAQ8G,EAAM9G,QAGxB,IAAI0F,IAAwB,EAAA/C,EAAA/H,gDAA+CkM,EAAM/D,MAAOlI,GACpFE,EAAqB2K,EAAsB3K,mBAC3CR,EAASmL,EAAsBnL,MAInC,IAFAQ,EAAqBA,GAAsB+L,EAAM/L,mBAEzB,CAEvB,GAAI+L,EAAM9G,SAAWnF,EAASyH,mBAAqBvH,IAAuBF,EAASE,qBAClF,MAAO+L,GAAM/D,KAGdlI,GAASqK,kCAAkCnK,GAG5C,IAAKF,EAASyH,kBACb,MAAOwE,GAAM/D,KAGd,QAAQ6M,GACP,IAAK,gBACJ,MAAKrV,IAGLA,EAASsV,EAAuBtV,EAAQ,iBAAiB,EAAOM,GAChEN,EAAS,IAAMM,EAASE,qBAAuB,IAAMR,EAC9CuV,EAAcvV,EAAQuM,EAAM5E,IAAKL,EAAQkO,kBAJxC,IAAMlV,EAASE,oBAMxB,KAAK,QAEJ,MAAO,IAAMF,EAASE,qBAAuB+L,EAAM/D,KAEpD,KAAK,UACJ,OAAO,EAAAwC,EAAA4G,gBACN5R,OAAQ,IAAMM,EAASE,qBAAuB+L,EAAM/D,MACpDb,IAAK4E,EAAM5E,KAGb,KAAK,WACJ,MAAK3H,IAGLA,EAASsV,EAAuBtV,EAAQ,YAAY,EAAOM,GACpDiV,EAAcvV,EAAQuM,EAAM5E,IAAKL,EAAQkO,kBAHxC,IAaJ,QAASC,GAAoCzV,EAAQwG,EAAQkP,EAAeC,EAAyBrV,GAC3G,GAAIsV,GAAyB,GAAIzT,QAAOqE,EAAOiG,WAM3CoJ,GAAkCrP,EAAOE,gCAAkCF,EAAOE,gCAAkCF,EAAOG,2CAA6CgP,CAE5K,KAAKD,IAAkBG,EACtB,MAAO7V,GAAO6G,QAAQ+O,EAAwBpP,EAAOA,SAASK,QAAQiP,EAAqBtP,EAAOE,gCAGnG,IAAIqP,GAAmB/V,EAAO6G,QAAQ+O,EAAwBF,EAAgBlP,EAAOwP,sBAAwBxP,EAAOA,SAEpH,OAAIkP,GACIO,EAA6BF,GAG9BA,EAGR,QAAST,GAAuBtV,EAAQkW,EAAWP,EAAyBrV,GAC3E,GAAIkG,GAAS2P,EAAyB7V,EAAS8V,UAAWpW,EAE1D,OAAKwG,GAIEiP,EAAoCzV,EAAQwG,EAAsB,kBAAd0P,EAA+BP,EAAyBrV,GAH3GN,EAMF,QAASmW,GAAyBE,EAAmBvO,GAC3D,GAAI5G,IAA4B,EAC5BC,GAAoB,EACpBC,MAAiB7C,EAErB,KACC,IAAK,GAAiD8C,GAA7CC,GAAY,EAAAC,EAAAjC,SAAa+W,KAA6BnV,GAA6BG,EAAQC,EAAUE,QAAQC,MAAOP,GAA4B,EAAM,CAC9J,GAAIuF,GAAUpF,EAAMxG,KAGpB,IAAI4L,EAAQ6P,wBAAwB3X,OAAS,EAAG,CAE/C,GAAI4X,GAA8B9P,EAAQ6P,wBAAwB7P,EAAQ6P,wBAAwB3X,OAAS,EAG3G,IAA4D,IAAxDmJ,EAAgBiB,OAAOwN,GAC1B,SAKF,IAAI,EAAAnO,EAAAzH,kBAAiBmH,EAAiB,GAAI3F,QAAOsE,EAAQgG,YACxD,MAAOhG,IAGR,MAAO5E,GACRV,GAAoB,EACpBC,EAAiBS,EAtBlB,QAwBC,KACMX,GAA6BI,EAAUQ,QAC3CR,EAAUQ,SAFZ,QAKC,GAAIX,EACH,KAAMC,KAUH,QAAS6U,GAA6BO,GAC5C,MAAOA,GAAM3P,QAAQ,GAAI1E,QAAO,IAAAiG,EAAApG,kBAA0B,KAAM,KAAM,KAAKyU,OAI5E,QAASpP,GAAmBL,EAAOC,EAAOC,EAAOC,EAAOiO,GACvD,GAAI7I,OAAQ,GACR8I,MAAc,GACd/N,MAAU,GACVhH,MAAW,EAMf,IAAqB,gBAAV0G,GAGV,GAAqB,gBAAVE,GAEVqF,GACC/D,MAAOxB,EACPvB,QAASwB,GAGVoO,EAAcnO,EAEVkO,GACH9N,EAAUH,EACV7G,EAAW8U,GAEX9U,EAAW6G,MAKR,CAMH,GAJAoF,GACC/D,MAAOxB,GAGa,gBAAVC,GACV,KAAM,IAAI3B,OAAM,iDAGjB+P,GAAcpO,EAEVE,GACHG,EAAUJ,EACV5G,EAAW6G,GAEX7G,EAAW4G,MAMV,KAAI2F,EAAU7F,IAAiC,gBAAhBA,GAAMwB,MAUlC,KAAM,IAAIzL,WAAU,qFAT1BwP,GAAQvF,EACRqO,EAAcpO,EAEVE,GACHG,EAAUJ,EACV5G,EAAW6G,GAEX7G,EAAW4G,EAKd,IAAK5G,EACJ,KAAM,IAAIgF,OAAM,uBAIjB,QAAQ+P,GACP,IAAK,gBACL,IAAK,QACL,IAAK,WACL,IAAK,UACJ,KACD,SACC,KAAM,IAAI/P,OAAM,uDAAyD+P,EAAc,KAUzF,MALC/N,GADGA,GACO,EAAAyC,EAAAzK,YAAa0K,EAAiB1C,GAE9B0C,GAGFuC,MAAOA,EAAO8I,YAAaA,EAAa/N,QAASA,EAAShH,SAAU,GAAA2J,GAAA3K,QAAagB,IAU3F,QAASiV,GAAcvV,EAAQ2H,EAAK6N,GACnC,MAAO7N,GAAM6N,EAAgBxV,EAAQ2H,GAAO3H,EjDmmE7C9E,OAAOC,eAAepB,EAAS,cAC9Bc,OAAO,IAERd,EAAQ+b,wBAAsBvX,GAC9BxE,EAAQuF,QiD51EkBkH,EjD61E1BzM,EiD7xEgB0b,sCjD8xEhB1b,EiD9vEgBoc,2BjD+vEhBpc,EiDltEgBkc,8BA7KhB,IAAAhI,GAAA5T,EAAA,IjDm4EI6T,EAAWtJ,EAAuBqJ,GiDl4EtC1C,EAAAlR,EAAA,IjDs4EI0P,EAAYnF,EAAuB2G,GiDr4EvCtJ,EAAA5H,EAAA,GjDy4EIkH,EAAgBqD,EAAuB3C,GiDn4E3CmG,EAAA/N,EAAA,IAEAmR,EAAAnR,EAAA,IjDu4EI4P,EAAarF,EAAuB4G,GiDr4ExCR,EAAA3Q,EAAA,IAEI2P,GACHwL,gBAAiB,SAAyBxV,EAAQ0W,GACjD,MAAO1W,GAAS,SAAW0W,IA8ElBZ,wBAAsB,SAkL7BjJ,EAAY,SAAmB9G,GAClC,MAAiE,gBAA5C,KAANA,EAAoB,aAAc,EAAAmI,EAAA5O,SAAQyG,MjDy5EpD,SAAU/L,EAAQD,EAASM,GAEjC,YkD1qFAN,GAAAyB,YAAA,EAEAzB,EAAAuF,QAAA,SAAAqX,EAAA/D,GACA,KAAA+D,YAAA/D,IACA,SAAA7V,WAAA,uClDmrFM,SAAU/C,EAAQD,EAASM,GAEjC,YmDzrFAN,GAAAyB,YAAA,CAEA,IAAAob,GAAAvc,EAAA,IAEAwc,EAEA,SAAA3U,GAAsC,MAAAA,MAAA1G,WAAA0G,GAAuC5C,QAAA4C,IAF7E0U,EAIA7c,GAAAuF,QAAA,WACA,QAAAwX,GAAAxY,EAAAyY,GACA,OAAAvc,GAAA,EAAmBA,EAAAuc,EAAApY,OAAkBnE,IAAA,CACrC,GAAAwc,GAAAD,EAAAvc,EACAwc,GAAA3b,WAAA2b,EAAA3b,aAAA,EACA2b,EAAA5b,cAAA,EACA,SAAA4b,OAAAlL,UAAA,IACA,EAAA+K,EAAAvX,SAAAhB,EAAA0Y,EAAAzZ,IAAAyZ,IAIA,gBAAApE,EAAAqE,EAAAC,GAGA,MAFAD,IAAAH,EAAAlE,EAAAjX,UAAAsb,GACAC,GAAAJ,EAAAlE,EAAAsE,GACAtE,OnDksFM,SAAU5Y,EAAQD,EAASM,GAEjC,YoD1tFAN,GAAAyB,YAAA,CAEA,IAAA2b,GAAA9c,EAAA,IAEA+c,EAEA,SAAAlV,GAAsC,MAAAA,MAAA1G,WAAA0G,GAAuC5C,QAAA4C,IAF7EiV,EAIApd,GAAAuF,QAAA8X,EAAA9X,SAAA,SAAAhB,GACA,OAAA9D,GAAA,EAAiBA,EAAAkE,UAAAC,OAAsBnE,IAAA,CACvC,GAAA8C,GAAAoB,UAAAlE,EAEA,QAAA+C,KAAAD,GACApC,OAAAS,UAAAC,eAAAlB,KAAA4C,EAAAC,KACAe,EAAAf,GAAAD,EAAAC,IAKA,MAAAe,KpDkuFM,SAAUtE,EAAQD,EAASM,GAEjC,YqD3uFA,SAAAuK,GAAA1C,GAAsC,MAAAA,MAAA1G,WAAA0G,GAAuC5C,QAAA4C,GAZ7EnI,EAAAyB,YAAA,CAEA,IAAA8F,GAAAjH,EAAA,IAEAsT,EAAA/I,EAAAtD,GAEA+V,EAAAhd,EAAA,IAEAid,EAAA1S,EAAAyS,GAEAE,EAAA,kBAAAD,GAAAhY,SAAA,gBAAAqO,GAAArO,QAAA,SAAA4C,GAAiH,aAAAA,IAAqB,SAAAA,GAAmB,MAAAA,IAAA,kBAAAoV,GAAAhY,SAAA4C,EAAAsV,cAAAF,EAAAhY,SAAA4C,IAAAoV,EAAAhY,QAAA3D,UAAA,eAAAuG,GAIzJnI,GAAAuF,QAAA,kBAAAgY,GAAAhY,SAAA,WAAAiY,EAAA5J,EAAArO,SAAA,SAAA4C,GACA,gBAAAA,EAAA,YAAAqV,EAAArV,IACC,SAAAA,GACD,MAAAA,IAAA,kBAAAoV,GAAAhY,SAAA4C,EAAAsV,cAAAF,EAAAhY,SAAA4C,IAAAoV,EAAAhY,QAAA3D,UAAA,kBAAAuG,EAAA,YAAAqV,EAAArV,KrD+vFM,SAAUlI,EAAQD,GsDlxFxBC,EAAAD,QAAA,SAAAyF,GACA,qBAAAA,GAAA,KAAAzC,WAAAyC,EAAA,sBACA,OAAAA,KtD0xFM,SAAUxF,EAAQD,GuD5xFxBC,EAAAD,QAAA,SAAAyF,EAAAoT,EAAA7X,EAAA0c,GACA,KAAAjY,YAAAoT,SAAArU,KAAAkZ,OAAAjY,GACA,KAAAzC,WAAAhC,EAAA,0BACG,OAAAyE,KvDoyFG,SAAUxF,EAAQD,EAASM,GwDvyFjC,GAAAkF,GAAAlF,EAAA,IACAqV,EAAArV,EAAA,GAAAqV,SAEAgI,EAAAnY,EAAAmQ,IAAAnQ,EAAAmQ,EAAAiI,cACA3d,GAAAD,QAAA,SAAAyF,GACA,MAAAkY,GAAAhI,EAAAiI,cAAAnY,QxD+yFM,SAAUxF,EAAQD,EAASM,GyDpzFjCL,EAAAD,SAAAM,EAAA,KAAAA,EAAA,eACA,MAAuG,IAAvGa,OAAAC,eAAAd,EAAA,gBAAsEiB,IAAA,WAAmB,YAAc0B,KzD4zFjG,SAAUhD,EAAQD,EAASM,G0D5zFjC,GAAA2W,GAAA3W,EAAA,IACAqU,EAAArU,EAAA,eACAud,EAAArG,MAAA5V,SAEA3B,GAAAD,QAAA,SAAAyF,GACA,WAAAjB,KAAAiB,IAAAwR,EAAAO,QAAA/R,GAAAoY,EAAAlJ,KAAAlP,K1Dq0FM,SAAUxF,EAAQD,EAASM,G2D10FjC,GAAA0X,GAAA1X,EAAA,GACAL,GAAAD,QAAAwX,MAAAsG,SAAA,SAAAC,GACA,eAAA/F,EAAA+F,K3Dm1FM,SAAU9d,EAAQD,EAASM,G4Dr1FjC,GAAAiC,GAAAjC,EAAA,EACAL,GAAAD,QAAA,SAAA6U,EAAAlP,EAAA7E,EAAA4T,GACA,IACA,MAAAA,GAAA/O,EAAApD,EAAAzB,GAAA,GAAAA,EAAA,IAAA6E,EAAA7E,GAEG,MAAAiC,GACH,GAAAib,GAAAnJ,EAAA,MAEA,WADArQ,KAAAwZ,GAAAzb,EAAAyb,EAAArd,KAAAkU,IACA9R,K5D+1FM,SAAU9C,EAAQD,G6Dx2FxBC,EAAAD,QAAA,SAAA0H,EAAA5G,GACA,OAAUA,QAAA4G,Y7Dg3FJ,SAAUzH,EAAQD,EAASM,G8Dh3FjC,GAAA4V,GAAA5V,EAAA,IACA2d,EAAA3d,EAAA,IAAAyW,OAAA,qBAEA/W,GAAA2C,EAAAxB,OAAA+c,qBAAA,SAAAtb,GACA,MAAAsT,GAAAtT,EAAAqb,K9Dy3FM,SAAUhe,EAAQD,EAASM,G+D93FjC,GAAAgW,GAAAhW,EAAA,GACA6d,EAAA7d,EAAA,IACA8d,EAAA9d,EAAA,QACA2U,EAAA3U,EAAA,eAEAL,GAAAD,QAAA,SAAA0B,EAAA2c,GACA,GAGA7a,GAHAZ,EAAAub,EAAAzc,GACAjB,EAAA,EACAiO,IAEA,KAAAlL,IAAAZ,GAAAY,GAAAyR,GAAAqB,EAAA1T,EAAAY,IAAAkL,EAAA4P,KAAA9a,EAEA,MAAA6a,EAAAzZ,OAAAnE,GAAA6V,EAAA1T,EAAAY,EAAA6a,EAAA5d,SACA2d,EAAA1P,EAAAlL,IAAAkL,EAAA4P,KAAA9a,GAEA,OAAAkL,K/Ds4FM,SAAUzO,EAAQD,EAASM,GgEr5FjC,GAAA8C,GAAA9C,EAAA,EACAL,GAAAD,QAAA,SAAAuE,EAAAkR,EAAA8I,GACA,OAAA/a,KAAAiS,GACA8I,GAAAha,EAAAf,GAAAe,EAAAf,GAAAiS,EAAAjS,GACAJ,EAAAmB,EAAAf,EAAAiS,EAAAjS,GACG,OAAAe,KhE65FG,SAAUtE,EAAQD,EAASM,GiEl6FjCL,EAAAD,QAAAM,EAAA,IjEy6FM,SAAUL,EAAQD,EAASM,GkEz6FjC,GAAAkF,GAAAlF,EAAA,GACAL,GAAAD,QAAA,SAAAyF,EAAA+Y,GACA,IAAAhZ,EAAAC,MAAA0M,KAAAqM,EAAA,KAAAxb,WAAA,0BAAAwb,EAAA,aACA,OAAA/Y,KlEi7FM,SAAUxF,EAAQD,KAMlB,SAAUC,EAAQD,GmE17FxBC,EAAAD,SAAkBqC,QAAA,SAAAkK,uBAA4CjE,GAAA,8HAAAM,GAAA,WAAA6V,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,WAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,qBAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,WAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,gBAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,KAAA,MAAAC,KAAA,WAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,WAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,WAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,KAAA,MAAAC,K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"",""file"":""libphonenumber-js.min.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\""libphonenumber\"", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""libphonenumber\""] = factory();\n\telse\n\t\troot[\""libphonenumber\""] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"",""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\""libphonenumber\"", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""libphonenumber\""] = factory();\n\telse\n\t\troot[\""libphonenumber\""] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \""\"";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 70);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(41)('wks');\nvar uid = __webpack_require__(28);\nvar Symbol = __webpack_require__(5).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nvar core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(8);\nvar IE8_DOM_DEFINE = __webpack_require__(55);\nvar toPrimitive = __webpack_require__(43);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(3) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(12)(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(5);\nvar core = __webpack_require__(1);\nvar ctx = __webpack_require__(11);\nvar hide = __webpack_require__(6);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && key in exports) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(2);\nvar createDesc = __webpack_require__(18);\nmodule.exports = __webpack_require__(3) ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(80), __esModule: true };\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(10);\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(52);\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(35);\nvar defined = __webpack_require__(33);\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.DIGIT_MAPPINGS = exports.PLUS_CHARS = exports.VALID_PUNCTUATION = undefined;\nexports.parse_phone_number_digits = parse_phone_number_digits;\nexports.parse_national_number_and_country_calling_code = parse_national_number_and_country_calling_code;\nexports.matches_entirely = matches_entirely;\n\nvar _getIterator2 = __webpack_require__(7);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// `DASHES` will be right after the opening square bracket of the \""character class\""\nvar DASHES = '-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D';\nvar SLASHES = '\\uFF0F/';\nvar DOTS = '\\uFF0E.';\nvar WHITESPACE = ' \\xA0\\xAD\\u200B\\u2060\\u3000';\nvar BRACKETS = '()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]';\nvar TILDES = '~\\u2053\\u223C\\uFF5E';\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nvar VALID_PUNCTUATION = exports.VALID_PUNCTUATION = '' + DASHES + SLASHES + DOTS + WHITESPACE + BRACKETS + TILDES;\n\nvar PLUS_CHARS = exports.PLUS_CHARS = '+\\uFF0B';\nvar LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+');\n\n// The maximum length of the country calling code.\nvar MAX_LENGTH_COUNTRY_CODE = 3;\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nvar DIGIT_MAPPINGS = exports.DIGIT_MAPPINGS = {\n\t'0': '0',\n\t'1': '1',\n\t'2': '2',\n\t'3': '3',\n\t'4': '4',\n\t'5': '5',\n\t'6': '6',\n\t'7': '7',\n\t'8': '8',\n\t'9': '9',\n\t'\\uFF10': '0', // Fullwidth digit 0\n\t'\\uFF11': '1', // Fullwidth digit 1\n\t'\\uFF12': '2', // Fullwidth digit 2\n\t'\\uFF13': '3', // Fullwidth digit 3\n\t'\\uFF14': '4', // Fullwidth digit 4\n\t'\\uFF15': '5', // Fullwidth digit 5\n\t'\\uFF16': '6', // Fullwidth digit 6\n\t'\\uFF17': '7', // Fullwidth digit 7\n\t'\\uFF18': '8', // Fullwidth digit 8\n\t'\\uFF19': '9', // Fullwidth digit 9\n\t'\\u0660': '0', // Arabic-indic digit 0\n\t'\\u0661': '1', // Arabic-indic digit 1\n\t'\\u0662': '2', // Arabic-indic digit 2\n\t'\\u0663': '3', // Arabic-indic digit 3\n\t'\\u0664': '4', // Arabic-indic digit 4\n\t'\\u0665': '5', // Arabic-indic digit 5\n\t'\\u0666': '6', // Arabic-indic digit 6\n\t'\\u0667': '7', // Arabic-indic digit 7\n\t'\\u0668': '8', // Arabic-indic digit 8\n\t'\\u0669': '9', // Arabic-indic digit 9\n\t'\\u06F0': '0', // Eastern-Arabic digit 0\n\t'\\u06F1': '1', // Eastern-Arabic digit 1\n\t'\\u06F2': '2', // Eastern-Arabic digit 2\n\t'\\u06F3': '3', // Eastern-Arabic digit 3\n\t'\\u06F4': '4', // Eastern-Arabic digit 4\n\t'\\u06F5': '5', // Eastern-Arabic digit 5\n\t'\\u06F6': '6', // Eastern-Arabic digit 6\n\t'\\u06F7': '7', // Eastern-Arabic digit 7\n\t'\\u06F8': '8', // Eastern-Arabic digit 8\n\t'\\u06F9': '9' // Eastern-Arabic digit 9\n\n\n\t/**\r\n  * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n  * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n  *\r\n  * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n  *\r\n  * @param  {string} number\r\n  * @return {string}\r\n  */\n};function parse_phone_number_digits(number) {\n\treturn (LEADING_PLUS_CHARS_PATTERN.test(number) ? '+' : '') + drop_and_substitute_characters(number, DIGIT_MAPPINGS);\n}\n\n// Parses a formatted phone number\n// and returns `{ country_calling_code, number }`\n// where `number` is the national (significant) phone number.\n//\n// (aka `maybeExtractCountryPhoneCode`)\n//\nfunction parse_national_number_and_country_calling_code(number, metadata) {\n\tnumber = parse_phone_number_digits(number);\n\n\tif (!number) {\n\t\treturn {};\n\t}\n\n\t// If this is not an international phone number,\n\t// then don't extract country phone code.\n\tif (number[0] !== '+') {\n\t\treturn { number: number };\n\t}\n\n\t// Fast abortion: country codes do not begin with a '0'\n\tif (number[1] === '0') {\n\t\treturn {};\n\t}\n\n\t// The thing with country phone codes\n\t// is that they are orthogonal to each other\n\t// i.e. there's no such country phone code A\n\t// for which country phone code B exists\n\t// where B starts with A.\n\t// Therefore, while scanning digits,\n\t// if a valid country code is found,\n\t// that means that it is the country code.\n\t//\n\tvar i = 2;\n\twhile (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n\t\tvar countryCallingCode = number.slice(1, i);\n\n\t\tif (metadata.countryCallingCodes()[countryCallingCode]) {\n\t\t\treturn {\n\t\t\t\tcountryCallingCode: countryCallingCode,\n\t\t\t\tnumber: number.slice(i)\n\t\t\t};\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn {};\n}\n\n// Checks whether the entire input sequence can be matched\n// against the regular expression.\nfunction matches_entirely() {\n\tvar text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar regular_expression = arguments[1];\n\n\tif (typeof regular_expression === 'string') {\n\t\tregular_expression = '^(?:' + regular_expression + ')$';\n\t}\n\n\tvar matched_groups = text.match(regular_expression);\n\treturn matched_groups !== null && matched_groups[0].length === text.length;\n}\n\n// For any character not being part of `replacements`\n// it is removed from the phone number.\nfunction drop_and_substitute_characters(text, replacements) {\n\tvar replaced = '';\n\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = (0, _getIterator3.default)(text), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar character = _step.value;\n\n\t\t\tvar replacement = replacements[character.toUpperCase()];\n\n\t\t\tif (replacement) {\n\t\t\t\treplaced += replacement;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn replaced;\n}\n//# sourceMappingURL=common.js.map\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\n\nvar _classCallCheck2 = __webpack_require__(48);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(49);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _semverCompare = __webpack_require__(126);\n\nvar _semverCompare2 = _interopRequireDefault(_semverCompare);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Added \""possibleLengths\"" and renamed\n// \""country_phone_code_to_countries\"" to \""country_calling_codes\"".\nvar V2 = '1.0.18';\n\nvar Metadata = function () {\n\tfunction Metadata(metadata) {\n\t\t(0, _classCallCheck3.default)(this, Metadata);\n\n\t\t// Metadata is required.\n\t\tif (!metadata || !metadata.countries) {\n\t\t\tthrow new Error('Metadata is required');\n\t\t}\n\n\t\tthis.metadata = metadata;\n\n\t\tthis.v1 = !metadata.version;\n\t\tthis.v2 = metadata.version; // && compare(version, V3) === -1\n\t}\n\n\t(0, _createClass3.default)(Metadata, [{\n\t\tkey: 'hasCountry',\n\t\tvalue: function hasCountry(country) {\n\t\t\treturn this.metadata.countries[country] !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'country',\n\t\tvalue: function country(_country) {\n\t\t\tif (!_country) {\n\t\t\t\tthis._country = undefined;\n\t\t\t\tthis.country_metadata = undefined;\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!this.hasCountry(_country)) {\n\t\t\t\tthrow new Error('Unknown country: ' + _country);\n\t\t\t}\n\n\t\t\tthis._country = _country;\n\t\t\tthis.country_metadata = this.metadata.countries[_country];\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'countryCallingCode',\n\t\tvalue: function countryCallingCode() {\n\t\t\treturn this.country_metadata[0];\n\t\t}\n\t}, {\n\t\tkey: 'nationalNumberPattern',\n\t\tvalue: function nationalNumberPattern() {\n\t\t\treturn this.country_metadata[1];\n\t\t}\n\t}, {\n\t\tkey: 'possibleLengths',\n\t\tvalue: function possibleLengths() {\n\t\t\tif (this.v1) return;\n\t\t\treturn this.country_metadata[2];\n\t\t}\n\t}, {\n\t\tkey: 'formats',\n\t\tvalue: function formats() {\n\t\t\tvar _this = this;\n\n\t\t\tvar formats = this.country_metadata[this.v1 ? 2 : 3] || [];\n\t\t\treturn formats.map(function (_) {\n\t\t\t\treturn new Format(_, _this);\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefix',\n\t\tvalue: function nationalPrefix() {\n\t\t\treturn this.country_metadata[this.v1 ? 3 : 4];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixFormattingRule',\n\t\tvalue: function nationalPrefixFormattingRule() {\n\t\t\treturn this.country_metadata[this.v1 ? 4 : 5];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixForParsing',\n\t\tvalue: function nationalPrefixForParsing() {\n\t\t\t// If `national_prefix_for_parsing` is not set explicitly,\n\t\t\t// then infer it from `national_prefix` (if any)\n\t\t\treturn this.country_metadata[this.v1 ? 5 : 6] || this.nationalPrefix();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixTransformRule',\n\t\tvalue: function nationalPrefixTransformRule() {\n\t\t\treturn this.country_metadata[this.v1 ? 6 : 7];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsOptionalWhenFormatting',\n\t\tvalue: function nationalPrefixIsOptionalWhenFormatting() {\n\t\t\treturn this.country_metadata[this.v1 ? 7 : 8];\n\t\t}\n\t}, {\n\t\tkey: 'leadingDigits',\n\t\tvalue: function leadingDigits() {\n\t\t\treturn this.country_metadata[this.v1 ? 8 : 9];\n\t\t}\n\t}, {\n\t\tkey: 'types',\n\t\tvalue: function types() {\n\t\t\treturn this.country_metadata[this.v1 ? 9 : 10];\n\t\t}\n\t}, {\n\t\tkey: 'hasTypes',\n\t\tvalue: function hasTypes() {\n\t\t\treturn this.types() !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'type',\n\t\tvalue: function type(_type) {\n\t\t\tif (this.hasTypes() && getType(this.types(), _type)) {\n\t\t\t\treturn new Type(getType(this.types(), _type), this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'countryCallingCodes',\n\t\tvalue: function countryCallingCodes() {\n\t\t\tif (this.v1) return this.metadata.country_phone_code_to_countries;\n\t\t\treturn this.metadata.country_calling_codes;\n\t\t}\n\n\t\t// Formatting information for regions which share\n\t\t// a country calling code is contained by only one region\n\t\t// for performance reasons. For example, for NANPA region\n\t\t// (\""North American Numbering Plan Administration\"",\n\t\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t\t// it will be contained in the metadata for `US`.\n\t\t//\n\t\t// `country_calling_code` is always valid.\n\t\t// But the actual country may not necessarily be part of the metadata.\n\t\t//\n\n\t}, {\n\t\tkey: 'chooseCountryByCountryCallingCode',\n\t\tvalue: function chooseCountryByCountryCallingCode(country_calling_code) {\n\t\t\tvar country = this.countryCallingCodes()[country_calling_code][0];\n\n\t\t\t// Do not want to test this case.\n\t\t\t// (custom metadata, not all countries).\n\t\t\t/* istanbul ignore else */\n\t\t\tif (this.hasCountry(country)) {\n\t\t\t\tthis.country(country);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'selectedCountry',\n\t\tvalue: function selectedCountry() {\n\t\t\treturn this._country;\n\t\t}\n\t}]);\n\n\treturn Metadata;\n}();\n\nexports.default = Metadata;\n\n\nvar Format = function () {\n\tfunction Format(format, metadata) {\n\t\t(0, _classCallCheck3.default)(this, Format);\n\n\t\tthis._format = format;\n\t\tthis.metadata = metadata;\n\t}\n\n\t(0, _createClass3.default)(Format, [{\n\t\tkey: 'pattern',\n\t\tvalue: function pattern() {\n\t\t\treturn this._format[0];\n\t\t}\n\t}, {\n\t\tkey: 'format',\n\t\tvalue: function format() {\n\t\t\treturn this._format[1];\n\t\t}\n\t}, {\n\t\tkey: 'leadingDigitsPatterns',\n\t\tvalue: function leadingDigitsPatterns() {\n\t\t\treturn this._format[2] || [];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixFormattingRule',\n\t\tvalue: function nationalPrefixFormattingRule() {\n\t\t\treturn this._format[3] || this.metadata.nationalPrefixFormattingRule();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsOptionalWhenFormatting',\n\t\tvalue: function nationalPrefixIsOptionalWhenFormatting() {\n\t\t\treturn this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormatting();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsMandatoryWhenFormatting',\n\t\tvalue: function nationalPrefixIsMandatoryWhenFormatting() {\n\t\t\t// National prefix is omitted if there's no national prefix formatting rule\n\t\t\t// set for this country, or when the national prefix formatting rule\n\t\t\t// contains no national prefix itself, or when this rule is set but\n\t\t\t// national prefix is optional for this phone number format\n\t\t\t// (and it is not enforced explicitly)\n\t\t\treturn this.nationalPrefixFormattingRule() &&\n\t\t\t// Check that national prefix formatting rule is not a dummy one.\n\t\t\t// Check that national prefix formatting rule actually has national prefix digit(s).\n\t\t\tthis.usesNationalPrefix() &&\n\t\t\t// Or maybe national prefix is optional for this format\n\t\t\t!this.nationalPrefixIsOptionalWhenFormatting();\n\t\t}\n\n\t\t// Checks whether national prefix formatting rule contains national prefix\n\n\t}, {\n\t\tkey: 'usesNationalPrefix',\n\t\tvalue: function usesNationalPrefix() {\n\t\t\t// Check that national prefix formatting rule is not a dummy one\n\t\t\treturn this.nationalPrefixFormattingRule() !== '$1' &&\n\t\t\t// Check that national prefix formatting rule actually has national prefix digit(s)\n\t\t\t/\\d/.test(this.nationalPrefixFormattingRule().replace('$1', ''));\n\t\t}\n\t}, {\n\t\tkey: 'internationalFormat',\n\t\tvalue: function internationalFormat() {\n\t\t\treturn this._format[5] || this.format();\n\t\t}\n\t}]);\n\n\treturn Format;\n}();\n\nvar Type = function () {\n\tfunction Type(type, metadata) {\n\t\t(0, _classCallCheck3.default)(this, Type);\n\n\t\tthis.type = type;\n\t\tthis.metadata = metadata;\n\t}\n\n\t(0, _createClass3.default)(Type, [{\n\t\tkey: 'pattern',\n\t\tvalue: function pattern() {\n\t\t\tif (this.metadata.v1) return this.type;\n\t\t\treturn this.type[0];\n\t\t}\n\t}, {\n\t\tkey: 'possibleLengths',\n\t\tvalue: function possibleLengths() {\n\t\t\tif (this.metadata.v1) return;\n\t\t\treturn this.type[1] || this.metadata.possibleLengths();\n\t\t}\n\t}]);\n\n\treturn Type;\n}();\n\nfunction getType(types, type) {\n\tswitch (type) {\n\t\tcase 'FIXED_LINE':\n\t\t\treturn types[0];\n\t\tcase 'MOBILE':\n\t\t\treturn types[1];\n\t\tcase 'TOLL_FREE':\n\t\t\treturn types[2];\n\t\tcase 'PREMIUM_RATE':\n\t\t\treturn types[3];\n\t\tcase 'PERSONAL_NUMBER':\n\t\t\treturn types[4];\n\t\tcase 'VOICEMAIL':\n\t\t\treturn types[5];\n\t\tcase 'UAN':\n\t\t\treturn types[6];\n\t\tcase 'PAGER':\n\t\t\treturn types[7];\n\t\tcase 'VOIP':\n\t\t\treturn types[8];\n\t\tcase 'SHARED_COST':\n\t\t\treturn types[9];\n\t}\n}\n//# sourceMappingURL=metadata.js.map\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.VALID_DIGITS = undefined;\nexports.default = parse;\nexports.is_viable_phone_number = is_viable_phone_number;\nexports.extract_formatted_phone_number = extract_formatted_phone_number;\nexports.strip_national_prefix = strip_national_prefix;\nexports.find_country_code = find_country_code;\n\nvar _extends2 = __webpack_require__(50);\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _getIterator2 = __webpack_require__(7);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _common = __webpack_require__(15);\n\nvar _metadata = __webpack_require__(16);\n\nvar _metadata2 = _interopRequireDefault(_metadata);\n\nvar _types = __webpack_require__(20);\n\nvar _types2 = _interopRequireDefault(_types);\n\nvar _RFC = __webpack_require__(30);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// The minimum length of the national significant number.\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nvar MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nvar MAX_LENGTH_FOR_NSN = 17;\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nvar VALID_DIGITS = exports.VALID_DIGITS = '0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9';\n\n// Pattern to capture digits used in an extension.\n// Places a maximum length of '7' for an extension.\nvar CAPTURING_EXTN_DIGITS = '([' + VALID_DIGITS + ']{1,7})';\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n/**\r\n * Regexp of all possible ways to write extensions, for use when parsing. This\r\n * will be run as a case-insensitive regexp match. Wide character versions are\r\n * also provided after each ASCII version. There are three regular expressions\r\n * here. The first covers RFC 3966 format, where the extension is added using\r\n * ';ext='. The second more generic one starts with optional white space and\r\n * ends with an optional full stop (.), followed by zero or more spaces/tabs\r\n * /commas and then the numbers themselves. The other one covers the special\r\n * case of American numbers where the extension is written with a hash at the\r\n * end, such as '- 503#'. Note that the only capturing groups should be around\r\n * the digits that you want to capture as part of the extension, or else parsing\r\n * will fail! We allow two options for representing the accented o - the\r\n * character itself, and one in the unicode decomposed form with the combining\r\n * acute accent.\r\n */\nvar EXTN_PATTERNS_FOR_PARSING = RFC3966_EXTN_PREFIX + CAPTURING_EXTN_DIGITS + '|' + '[ \\xA0\\\\t,]*' + '(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|' + '[;,x\\uFF58#\\uFF03~\\uFF5E]|int|anexo|\\uFF49\\uFF4E\\uFF54)' + '[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*' + CAPTURING_EXTN_DIGITS + '#?|' + '[- ]+([' + VALID_DIGITS + ']{1,5})#';\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + EXTN_PATTERNS_FOR_PARSING + ')$', 'i');\n\n//  Regular expression of viable phone numbers. This is location independent.\n//  Checks we have at least three leading digits, and only valid punctuation,\n//  alpha characters and digits in the phone number. Does not include extension\n//  data. The symbol 'x' is allowed here as valid punctuation since it is often\n//  used as a placeholder for carrier codes, for example in Brazilian phone\n//  numbers. We also allow multiple '+' characters at the start.\n//\n//  Corresponds to the following:\n//  [digits]{minLengthNsn}|\n//  plus_sign*\n//  (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n//  The first reg-ex is to allow short numbers (two digits long) to be parsed if\n//  they are entered as \""15\"" etc, but only if there is no punctuation in them.\n//  The second expression restricts the number of digits to three or more, but\n//  then allows them to be in international form, and to have alpha-characters\n//  and punctuation. We split up the two reg-exes here and combine them when\n//  creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n//  with ^ and append $ to each branch.\n//\n//  \""Note VALID_PUNCTUATION starts with a -,\n//   so must be the first in the range\"" (c) Google devs.\n//  (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nvar VALID_PHONE_NUMBER = '[' + _common.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _common.VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + _common.VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + EXTN_PATTERNS_FOR_PARSING + ')?' + '$', 'i');\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + _common.PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + ']+$');\n\nvar default_options = {\n\tcountry: {}\n\n\t// `options`:\n\t//  {\n\t//    country:\n\t//    {\n\t//      restrict - (a two-letter country code)\n\t//                 the phone number must be in this country\n\t//\n\t//      default - (a two-letter country code)\n\t//                default country to use for phone number parsing and validation\n\t//                (if no country code could be derived from the phone number)\n\t//    }\n\t//  }\n\t//\n\t// Returns `{ country, number }`\n\t//\n\t// Example use cases:\n\t//\n\t// ```js\n\t// parse('8 (800) 555-35-35', 'RU')\n\t// parse('8 (800) 555-35-35', 'RU', metadata)\n\t// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n\t// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n\t// parse('+7 800 555 35 35')\n\t// parse('+7 800 555 35 35', metadata)\n\t// ```\n\t//\n};function parse(arg_1, arg_2, arg_3, arg_4) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4),\n\t    text = _sort_out_arguments.text,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// Validate `defaultCountry`.\n\n\n\tif (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n\t\tthrow new Error('Unknown country: ' + options.defaultCountry);\n\t}\n\n\t// Parse the phone number.\n\n\tvar _parse_input = parse_input(text),\n\t    formatted_phone_number = _parse_input.number,\n\t    ext = _parse_input.ext;\n\n\t// If the phone number is not viable then return nothing.\n\n\n\tif (!formatted_phone_number) {\n\t\treturn {};\n\t}\n\n\tvar _parse_phone_number = parse_phone_number(formatted_phone_number, options.defaultCountry, metadata),\n\t    country = _parse_phone_number.country,\n\t    national_number = _parse_phone_number.national_number,\n\t    countryCallingCode = _parse_phone_number.countryCallingCode;\n\n\tif (!metadata.selectedCountry()) {\n\t\treturn options.extended ? { countryCallingCode: countryCallingCode } : {};\n\t}\n\n\t// Validate national (significant) number length.\n\t//\n\t// A sidenote:\n\t//\n\t// They say that sometimes national (significant) numbers\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n\t// Such numbers will just be discarded.\n\t//\n\tif (national_number.length < MIN_LENGTH_FOR_NSN || national_number.length > MAX_LENGTH_FOR_NSN) {\n\t\t// Google's demo just throws an error in this case.\n\t\treturn {};\n\t}\n\n\t// Check if national phone number pattern matches the number\n\t// National number pattern is different for each country,\n\t// even for those ones which are part of the \""NANPA\"" group.\n\tvar valid = country && (0, _common.matches_entirely)(national_number, new RegExp(metadata.nationalNumberPattern())) ? true : false;\n\n\tif (!options.extended) {\n\t\treturn valid ? result(country, national_number, ext) : {};\n\t}\n\n\treturn {\n\t\tcountry: country,\n\t\tcountryCallingCode: countryCallingCode,\n\t\tvalid: valid,\n\t\tpossible: valid ? true : options.extended === true && metadata.possibleLengths() && is_possible_number(national_number, countryCallingCode !== undefined, metadata),\n\t\tphone: national_number,\n\t\text: ext\n\t};\n}\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nfunction is_viable_phone_number(number) {\n\treturn number.length >= MIN_LENGTH_FOR_NSN && (0, _common.matches_entirely)(number, VALID_PHONE_NUMBER_PATTERN);\n}\n\nfunction extract_formatted_phone_number(text) {\n\tif (!text || text.length > MAX_INPUT_STRING_LENGTH) {\n\t\treturn '';\n\t}\n\n\t// Attempt to extract a possible number from the string passed in\n\n\tvar starts_at = text.search(PHONE_NUMBER_START_PATTERN);\n\n\tif (starts_at < 0) {\n\t\treturn '';\n\t}\n\n\treturn text\n\t// Trim everything to the left of the phone number\n\t.slice(starts_at)\n\t// Remove trailing non-numerical characters\n\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n// Strips any national prefix (such as 0, 1) present in the number provided\nfunction strip_national_prefix(number, metadata) {\n\tif (!number || !metadata.nationalPrefixForParsing()) {\n\t\treturn number;\n\t}\n\n\t// Attempt to parse the first digits as a national prefix\n\tvar national_prefix_pattern = new RegExp('^(?:' + metadata.nationalPrefixForParsing() + ')');\n\tvar national_prefix_matcher = national_prefix_pattern.exec(number);\n\n\t// If no national prefix is present in the phone number,\n\t// but if the national prefix is optional for this country,\n\t// then consider this phone number valid.\n\t//\n\t// Google's reference `libphonenumber` implementation\n\t// wouldn't recognize such phone numbers as valid,\n\t// but I think it would perfectly make sense\n\t// to consider such phone numbers as valid\n\t// because if a national phone number was originally\n\t// formatted without the national prefix\n\t// then it must be parseable back into the original national number.\n\t// In other words, `parse(format(number))`\n\t// must always be equal to `number`.\n\t//\n\tif (!national_prefix_matcher) {\n\t\treturn number;\n\t}\n\n\tvar national_significant_number = void 0;\n\n\t// `national_prefix_for_parsing` capturing groups\n\t// (used only for really messy cases: Argentina, Brazil, Mexico, Somalia)\n\tvar any_groups_were_captured = national_prefix_matcher[national_prefix_matcher.length - 1];\n\n\t// If the national number tranformation is needed then do it\n\tif (metadata.nationalPrefixTransformRule() && any_groups_were_captured) {\n\t\tnational_significant_number = number.replace(national_prefix_pattern, metadata.nationalPrefixTransformRule());\n\t}\n\t// Else, no transformation is necessary,\n\t// and just strip the national prefix.\n\telse {\n\t\t\tnational_significant_number = number.slice(national_prefix_matcher[0].length);\n\t\t}\n\n\t// // Verify the parsed national (significant) number for this country\n\t// const national_number_rule = new RegExp(metadata.nationalNumberPattern())\n\t// //\n\t// // If the original number (before stripping national prefix) was viable,\n\t// // and the resultant number is not, then prefer the original phone number.\n\t// // This is because for some countries (e.g. Russia) the same digit could be both\n\t// // a national prefix and a leading digit of a valid national phone number,\n\t// // like `8` is the national prefix for Russia and both\n\t// // `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t// if (matches_entirely(number, national_number_rule) &&\n\t// \t\t!matches_entirely(national_significant_number, national_number_rule))\n\t// {\n\t// \treturn number\n\t// }\n\n\t// Return the parsed national (significant) number\n\treturn national_significant_number;\n}\n\nfunction find_country_code(country_calling_code, national_phone_number, metadata) {\n\t// Is always non-empty, because `country_calling_code` is always valid\n\tvar possible_countries = metadata.countryCallingCodes()[country_calling_code];\n\n\t// If there's just one country corresponding to the country code,\n\t// then just return it, without further phone number digits validation.\n\tif (possible_countries.length === 1) {\n\t\treturn possible_countries[0];\n\t}\n\n\tvar original_country = metadata.selectedCountry();\n\tvar country = _find_country_code(possible_countries, national_phone_number, metadata);\n\tmetadata.country(original_country);\n\treturn country;\n}\n\n// Changes `metadata` `country`.\nfunction _find_country_code(possible_countries, national_phone_number, metadata) {\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = (0, _getIterator3.default)(possible_countries), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar country = _step.value;\n\n\t\t\tmetadata.country(country);\n\n\t\t\t// Leading digits check would be the simplest one\n\t\t\tif (metadata.leadingDigits()) {\n\t\t\t\tif (national_phone_number && national_phone_number.search(metadata.leadingDigits()) === 0) {\n\t\t\t\t\treturn country;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Else perform full validation with all of those\n\t\t\t// fixed-line/mobile/etc regular expressions.\n\t\t\telse if ((0, _types2.default)({ phone: national_phone_number, country: country }, metadata.metadata)) {\n\t\t\t\t\treturn country;\n\t\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3, arg_4) {\n\tvar text = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `parse('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\ttext = arg_1;\n\t} else throw new TypeError('A phone number for parsing must be a string.');\n\n\t// If \""default country\"" argument is being passed\n\t// then move it to `options`.\n\t// `parse('88005553535', 'RU', [options], metadata)`.\n\tif (typeof arg_2 === 'string') {\n\t\tif (arg_4) {\n\t\t\toptions = (0, _extends3.default)({ defaultCountry: arg_2 }, arg_3);\n\t\t\tmetadata = arg_4;\n\t\t} else {\n\t\t\toptions = { defaultCountry: arg_2 };\n\t\t\tmetadata = arg_3;\n\t\t}\n\t}\n\t// No \""resrict country\"" argument is being passed.\n\t// International phone number is passed.\n\t// `parse('+78005553535', [options], metadata)`.\n\telse {\n\t\t\tif (arg_3) {\n\t\t\t\toptions = arg_2;\n\t\t\t\tmetadata = arg_3;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_2;\n\t\t\t}\n\t\t}\n\n\t// Metadata is required.\n\tif (!metadata || !metadata.countries) {\n\t\tthrow new Error('Metadata is required');\n\t}\n\n\t// Apply default options.\n\tif (options) {\n\t\toptions = (0, _extends3.default)({}, default_options, options);\n\t} else {\n\t\toptions = default_options;\n\t}\n\n\treturn { text: text, options: options, metadata: new _metadata2.default(metadata) };\n}\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nfunction strip_extension(number) {\n\tvar start = number.search(EXTN_PATTERN);\n\tif (start < 0) {\n\t\treturn {};\n\t}\n\n\t// If we find a potential extension, and the number preceding this is a viable\n\t// number, we assume it is an extension.\n\tvar number_without_extension = number.slice(0, start);\n\t/* istanbul ignore if - seems a bit of a redundant check */\n\tif (!is_viable_phone_number(number_without_extension)) {\n\t\treturn {};\n\t}\n\n\tvar matches = number.match(EXTN_PATTERN);\n\tvar i = 1;\n\twhile (i < matches.length) {\n\t\tif (matches[i] != null && matches[i].length > 0) {\n\t\t\treturn {\n\t\t\t\tnumber: number_without_extension,\n\t\t\t\text: matches[i]\n\t\t\t};\n\t\t}\n\t\ti++;\n\t}\n}\n\nfunction is_possible_number(national_number, is_international, metadata) {\n\tswitch ((0, _types.check_number_length_for_type)(national_number, undefined, metadata)) {\n\t\tcase 'IS_POSSIBLE':\n\t\t\treturn true;\n\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t// \treturn !is_international\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\r\n * Parses a viable international phone number.\r\n * Returns `{ country, national_number }`.\r\n */\nfunction get_country_and_national_number_international(country_calling_code, national_number, metadata) {\n\t// Sometimes there are several countries\n\t// corresponding to the same country phone code\n\t// (e.g. NANPA countries all having `1` country phone code).\n\t// Therefore, to reliably determine the exact country,\n\t// national (significant) number should have been parsed first.\n\t//\n\t// When `metadata.json` is generated, all \""ambiguous\"" country phone codes\n\t// get their countries populated with the full set of\n\t// \""phone number type\"" regular expressions.\n\t//\n\tvar country = find_country_code(country_calling_code, national_number, metadata);\n\n\t// Formatting information for regions which share\n\t// a country calling code is contained by only one region\n\t// for performance reasons. For example, for NANPA region\n\t// (\""North American Numbering Plan Administration\"",\n\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t// it will be contained in the metadata for `US`.\n\tcountry ? metadata.country(country) : metadata.chooseCountryByCountryCallingCode(country_calling_code);\n\n\treturn { national_number: national_number, country: country };\n}\n\n/**\r\n * Parses a viable local phone number.\r\n * Returns `{ country, national_number }`.\r\n */\nfunction get_country_and_national_number_local(formatted_phone_number, default_country, metadata) {\n\tvar country = default_country;\n\tmetadata.country(country);\n\n\tvar national_number = (0, _common.parse_phone_number_digits)(formatted_phone_number);\n\n\t// Only strip national prefixes for non-international phone numbers\n\t// because national prefixes can't be present in international phone numbers.\n\t// Otherwise, while forgiving, it would parse a NANPA number `+1 1877 215 5230`\n\t// first to `1877 215 5230` and then, stripping the leading `1`, to `877 215 5230`,\n\t// and then it would assume that's a valid number which it isn't.\n\t// So no forgiveness for grandmas here.\n\t// The issue asking for this fix:\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/159\n\tvar potential_national_number = strip_national_prefix(national_number, metadata);\n\n\t// If metadata has \""possible lengths\"" then employ the new algorythm.\n\tif (metadata.possibleLengths()) {\n\t\t// We require that the NSN remaining after stripping the national prefix and\n\t\t// carrier code be long enough to be a possible length for the region.\n\t\t// Otherwise, we don't do the stripping, since the original number could be\n\t\t// a valid short number.\n\t\tswitch ((0, _types.check_number_length_for_type)(potential_national_number, undefined, metadata)) {\n\t\t\tcase 'TOO_SHORT':\n\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t\tcase 'INVALID_LENGTH':\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tnational_number = potential_national_number;\n\t\t}\n\t} else {\n\t\t// If the original number (before stripping national prefix) was viable,\n\t\t// and the resultant number is not, then prefer the original phone number.\n\t\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t\t// a national prefix and a leading digit of a valid national phone number,\n\t\t// like `8` is the national prefix for Russia and both\n\t\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t\tif ((0, _common.matches_entirely)(national_number, metadata.nationalNumberPattern()) && !(0, _common.matches_entirely)(potential_national_number, metadata.nationalNumberPattern())) {\n\t\t\t// Keep the number without stripping national prefix.\n\t\t} else {\n\t\t\tnational_number = potential_national_number;\n\t\t}\n\t}\n\n\treturn { national_number: national_number, country: country };\n}\n\n/**\r\n * @param  {string} text - Input.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parse_input(text) {\n\t// Parse RFC 3966 phone number URI.\n\tif (text && text.indexOf('tel:') === 0) {\n\t\treturn (0, _RFC.parseRFC3966)(text);\n\t}\n\n\tvar number = extract_formatted_phone_number(text);\n\n\t// If the phone number is not viable, then abort.\n\tif (!is_viable_phone_number(number)) {\n\t\treturn {};\n\t}\n\n\t// Attempt to parse extension first, since it doesn't require region-specific\n\t// data and we want to have the non-normalised number here.\n\tvar with_extension_stripped = strip_extension(number);\n\tif (with_extension_stripped.ext) {\n\t\treturn with_extension_stripped;\n\t}\n\n\treturn { number: number };\n}\n\nfunction result(country, national_number, ext) {\n\tvar result = {\n\t\tcountry: country,\n\t\tphone: national_number\n\t};\n\n\tif (ext) {\n\t\tresult.ext = ext;\n\t}\n\n\treturn result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * Returns `{ country, countryCallingCode, national_number }`.\r\n */\nfunction parse_phone_number(formatted_phone_number, default_country, metadata) {\n\tvar _parse_national_numbe = (0, _common.parse_national_number_and_country_calling_code)(formatted_phone_number, metadata),\n\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t    number = _parse_national_numbe.number;\n\n\tif (!number) {\n\t\treturn { countryCallingCode: countryCallingCode };\n\t}\n\n\tif (countryCallingCode) {\n\t\tvar _result = get_country_and_national_number_international(countryCallingCode, number, metadata);\n\t\t_result.countryCallingCode = countryCallingCode;\n\t\treturn _result;\n\t}\n\n\tif (default_country) {\n\t\tvar _result2 = get_country_and_national_number_local(formatted_phone_number, default_country, metadata);\n\t\tmetadata.country(default_country);\n\t\t_result2.countryCallingCode = metadata.countryCallingCode();\n\t\treturn _result2;\n\t}\n\n\treturn {};\n}\n//# sourceMappingURL=parse.js.map\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar $at = __webpack_require__(110)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(36)(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.default = get_number_type;\nexports.is_of_type = is_of_type;\nexports.sort_out_arguments = sort_out_arguments;\nexports.check_number_length_for_type = check_number_length_for_type;\n\nvar _from = __webpack_require__(71);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _set = __webpack_require__(75);\n\nvar _set2 = _interopRequireDefault(_set);\n\nvar _typeof2 = __webpack_require__(51);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _getIterator2 = __webpack_require__(7);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _parse = __webpack_require__(17);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nvar _common = __webpack_require__(15);\n\nvar _metadata = __webpack_require__(16);\n\nvar _metadata2 = _interopRequireDefault(_metadata);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar non_fixed_line_types = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nfunction get_number_type(arg_1, arg_2, arg_3) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// When no input was passed\n\n\n\tif (!input) {\n\t\treturn;\n\t}\n\n\t// When `parse()` returned `{}`\n\t// meaning that the phone number is not a valid one.\n\tif (!input.country) {\n\t\treturn;\n\t}\n\n\tif (!metadata.hasCountry(input.country)) {\n\t\tthrow new Error('Unknown country: ' + input.country);\n\t}\n\n\tvar national_number = input.phone;\n\tmetadata.country(input.country);\n\n\t// The following is copy-pasted from the original function:\n\t// https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n\t// Is this national number even valid for this country\n\tif (!(0, _common.matches_entirely)(national_number, metadata.nationalNumberPattern())) {\n\t\treturn;\n\t}\n\n\t// Is it fixed line number\n\tif (is_of_type(national_number, 'FIXED_LINE', metadata)) {\n\t\t// Because duplicate regular expressions are removed\n\t\t// to reduce metadata size, if \""mobile\"" pattern is \""\""\n\t\t// then it means it was removed due to being a duplicate of the fixed-line pattern.\n\t\t//\n\t\tif (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// v1 metadata.\n\t\t// Legacy.\n\t\t// Deprecated.\n\t\tif (!metadata.type('MOBILE')) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// Check if the number happens to qualify as both fixed line and mobile.\n\t\t// (no such country in the minimal metadata set)\n\t\t/* istanbul ignore if */\n\t\tif (is_of_type(national_number, 'MOBILE', metadata)) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\treturn 'FIXED_LINE';\n\t}\n\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = (0, _getIterator3.default)(non_fixed_line_types), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _type = _step.value;\n\n\t\t\tif (is_of_type(national_number, _type, metadata)) {\n\t\t\t\treturn _type;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction is_of_type(national_number, type, metadata) {\n\ttype = metadata.type(type);\n\n\tif (!type || !type.pattern()) {\n\t\treturn false;\n\t}\n\n\t// Check if any possible number lengths are present;\n\t// if so, we use them to avoid checking\n\t// the validation pattern if they don't match.\n\t// If they are absent, this means they match\n\t// the general description, which we have\n\t// already checked before a specific number type.\n\tif (type.possibleLengths() && type.possibleLengths().indexOf(national_number.length) < 0) {\n\t\treturn false;\n\t}\n\n\treturn (0, _common.matches_entirely)(national_number, type.pattern());\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3) {\n\tvar input = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `getNumberType('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\t// If \""resrict country\"" argument is being passed\n\t\t// then convert it to an `options` object.\n\t\t// `getNumberType('88005553535', 'RU', metadata)`.\n\t\tif (typeof arg_2 === 'string' || arg_2 === undefined) {\n\t\t\tmetadata = arg_3;\n\n\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t// while this `validate` function needs to verify\n\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\tif ((0, _parse.is_viable_phone_number)(arg_1)) {\n\t\t\t\tinput = (0, _parse2.default)(arg_1, arg_2, metadata);\n\t\t\t}\n\t\t}\n\t\t// No \""resrict country\"" argument is being passed.\n\t\t// International phone number is passed.\n\t\t// `getNumberType('+78005553535', metadata)`.\n\t\telse {\n\t\t\t\tmetadata = arg_2;\n\n\t\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t\t// while this `validate` function needs to verify\n\t\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\t\tif ((0, _parse.is_viable_phone_number)(arg_1)) {\n\t\t\t\t\tinput = (0, _parse2.default)(arg_1, metadata);\n\t\t\t\t}\n\t\t\t}\n\t}\n\t// If the phone number is passed as a parsed phone number.\n\t// `getNumberType({ phone: '88005553535', country: 'RU' }, ...)`.\n\telse if (is_object(arg_1) && typeof arg_1.phone === 'string') {\n\t\t\t// The `arg_1` must be a valid phone number\n\t\t\t// as a whole, not just a part of it which gets parsed here.\n\t\t\tif ((0, _parse.is_viable_phone_number)(arg_1.phone)) {\n\t\t\t\tinput = arg_1;\n\t\t\t}\n\n\t\t\tmetadata = arg_2;\n\t\t} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');\n\n\t// Metadata is required.\n\tif (!metadata || !metadata.countries) {\n\t\tthrow new Error('Metadata is required');\n\t}\n\n\treturn { input: input, metadata: new _metadata2.default(metadata) };\n}\n\n// Should only be called for the \""new\"" metadata which has \""possible lengths\"".\nfunction check_number_length_for_type(national_number, type, metadata) {\n\tvar type_info = metadata.type(type);\n\n\t// There should always be \""<possiblePengths/>\"" set for every type element.\n\t// This is declared in the XML schema.\n\t// For size efficiency, where a sub-description (e.g. fixed-line)\n\t// has the same \""<possiblePengths/>\"" as the \""general description\"", this is missing,\n\t// so we fall back to the \""general description\"". Where no numbers of the type\n\t// exist at all, there is one possible length (-1) which is guaranteed\n\t// not to match the length of any real phone number.\n\tvar possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n\t// let local_lengths    = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n\tif (type === 'FIXED_LINE_OR_MOBILE') {\n\t\t// No such country in metadata.\n\t\t/* istanbul ignore next */\n\t\tif (!metadata.type('FIXED_LINE')) {\n\t\t\t// The rare case has been encountered where no fixedLine data is available\n\t\t\t// (true for some non-geographical entities), so we just check mobile.\n\t\t\treturn test_number_length_for_type(national_number, 'MOBILE', metadata);\n\t\t}\n\n\t\tvar mobile_type = metadata.type('MOBILE');\n\n\t\tif (mobile_type) {\n\t\t\t// Merge the mobile data in if there was any. \""Concat\"" creates a new\n\t\t\t// array, it doesn't edit possible_lengths in place, so we don't need a copy.\n\t\t\t// Note that when adding the possible lengths from mobile, we have\n\t\t\t// to again check they aren't empty since if they are this indicates\n\t\t\t// they are the same as the general desc and should be obtained from there.\n\t\t\tpossible_lengths = merge_arrays(possible_lengths, mobile_type.possibleLengths());\n\t\t\t// The current list is sorted; we need to merge in the new list and\n\t\t\t// re-sort (duplicates are okay). Sorting isn't so expensive because\n\t\t\t// the lists are very small.\n\n\t\t\t// if (local_lengths)\n\t\t\t// {\n\t\t\t// \tlocal_lengths = merge_arrays(local_lengths, mobile_type.possibleLengthsLocal())\n\t\t\t// }\n\t\t\t// else\n\t\t\t// {\n\t\t\t// \tlocal_lengths = mobile_type.possibleLengthsLocal()\n\t\t\t// }\n\t\t}\n\t}\n\t// If the type doesn't exist then return 'INVALID_LENGTH'.\n\telse if (type && !type_info) {\n\t\t\treturn 'INVALID_LENGTH';\n\t\t}\n\n\tvar actual_length = national_number.length;\n\n\t// // This is safe because there is never an overlap beween the possible lengths\n\t// // and the local-only lengths; this is checked at build time.\n\t// if (local_lengths && local_lengths.indexOf(national_number.length) >= 0)\n\t// {\n\t// \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n\t// }\n\n\tvar minimum_length = possible_lengths[0];\n\n\tif (minimum_length === actual_length) {\n\t\treturn 'IS_POSSIBLE';\n\t}\n\n\tif (minimum_length > actual_length) {\n\t\treturn 'TOO_SHORT';\n\t}\n\n\tif (possible_lengths[possible_lengths.length - 1] < actual_length) {\n\t\treturn 'TOO_LONG';\n\t}\n\n\t// We skip the first element since we've already checked it.\n\treturn possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : (0, _typeof3.default)(_)) === 'object';\n};\n\nfunction merge_arrays(a, b) {\n\tvar merged = new _set2.default(a);\n\n\tvar _iteratorNormalCompletion2 = true;\n\tvar _didIteratorError2 = false;\n\tvar _iteratorError2 = undefined;\n\n\ttry {\n\t\tfor (var _iterator2 = (0, _getIterator3.default)(b), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\tvar i = _step2.value;\n\n\t\t\tmerged.add(i);\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError2 = true;\n\t\t_iteratorError2 = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t_iterator2.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError2) {\n\t\t\t\tthrow _iteratorError2;\n\t\t\t}\n\t\t}\n\t}\n\n\tmerged = (0, _from2.default)(merged);\n\tmerged.sort(function (a, b) {\n\t\treturn a - b;\n\t});\n\treturn merged;\n}\n//# sourceMappingURL=types.js.map\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ctx = __webpack_require__(11);\nvar call = __webpack_require__(58);\nvar isArrayIter = __webpack_require__(56);\nvar anObject = __webpack_require__(8);\nvar toLength = __webpack_require__(26);\nvar getIterFn = __webpack_require__(46);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(8);\nvar dPs = __webpack_require__(103);\nvar enumBugKeys = __webpack_require__(34);\nvar IE_PROTO = __webpack_require__(40)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(54)('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(99).appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(61);\nvar enumBugKeys = __webpack_require__(34);\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(2).f;\nvar has = __webpack_require__(9);\nvar TAG = __webpack_require__(0)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(42);\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(33);\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(115);\nvar global = __webpack_require__(5);\nvar hide = __webpack_require__(6);\nvar Iterators = __webpack_require__(13);\nvar TO_STRING_TAG = __webpack_require__(0)('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.parseRFC3966 = parseRFC3966;\nexports.formatRFC3966 = formatRFC3966;\n\nvar _slicedToArray2 = __webpack_require__(78);\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _getIterator2 = __webpack_require__(7);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _parse = __webpack_require__(17);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\r\n * @param  {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parseRFC3966(text) {\n\tvar number = void 0;\n\tvar ext = void 0;\n\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = (0, _getIterator3.default)(text.split(';')), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar part = _step.value;\n\n\t\t\tvar _part$split = part.split(':'),\n\t\t\t    _part$split2 = (0, _slicedToArray3.default)(_part$split, 2),\n\t\t\t    name = _part$split2[0],\n\t\t\t    value = _part$split2[1];\n\n\t\t\tswitch (name) {\n\t\t\t\tcase 'tel':\n\t\t\t\t\tnumber = value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ext':\n\t\t\t\t\text = value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'phone-context':\n\t\t\t\t\t// Only \""country contexts\"" are supported.\n\t\t\t\t\t// \""Domain contexts\"" are ignored.\n\t\t\t\t\tif (value[0] === '+') {\n\t\t\t\t\t\tnumber = value + number;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// If the phone number is not viable, then abort.\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!(0, _parse.is_viable_phone_number)(number)) {\n\t\treturn {};\n\t}\n\n\treturn {\n\t\tnumber: number,\n\t\text: ext\n\t};\n}\n\n/**\r\n * @param  {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nfunction formatRFC3966(_ref) {\n\tvar number = _ref.number,\n\t    ext = _ref.ext;\n\n\tif (!number) {\n\t\treturn '';\n\t}\n\n\tif (number[0] !== '+') {\n\t\tthrow new Error('\""formatRFC3966()\"" expects \""number\"" to be in E.164 format.');\n\t}\n\n\treturn 'tel:' + number + (ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(32);\nvar TAG = __webpack_require__(0)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(32);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar LIBRARY = __webpack_require__(37);\nvar $export = __webpack_require__(4);\nvar redefine = __webpack_require__(63);\nvar hide = __webpack_require__(6);\nvar has = __webpack_require__(9);\nvar Iterators = __webpack_require__(13);\nvar $iterCreate = __webpack_require__(100);\nvar setToStringTag = __webpack_require__(25);\nvar getPrototypeOf = __webpack_require__(106);\nvar ITERATOR = __webpack_require__(0)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\nmodule.exports = true;\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar META = __webpack_require__(28)('meta');\nvar isObject = __webpack_require__(10);\nvar has = __webpack_require__(9);\nvar setDesc = __webpack_require__(2).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !__webpack_require__(12)(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(41)('keys');\nvar uid = __webpack_require__(28);\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(5);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n  return store[key] || (store[key] = {});\n};\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(10);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(5);\nvar core = __webpack_require__(1);\nvar LIBRARY = __webpack_require__(37);\nvar wksExt = __webpack_require__(45);\nvar defineProperty = __webpack_require__(2).f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports.f = __webpack_require__(0);\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(31);\nvar ITERATOR = __webpack_require__(0)('iterator');\nvar Iterators = __webpack_require__(13);\nmodule.exports = __webpack_require__(1).getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.FIRST_GROUP_PATTERN = undefined;\nexports.default = format;\nexports.format_national_number_using_format = format_national_number_using_format;\nexports.choose_format_for_number = choose_format_for_number;\nexports.local_to_international_style = local_to_international_style;\n\nvar _typeof2 = __webpack_require__(51);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _extends2 = __webpack_require__(50);\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _getIterator2 = __webpack_require__(7);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _common = __webpack_require__(15);\n\nvar _metadata = __webpack_require__(16);\n\nvar _metadata2 = _interopRequireDefault(_metadata);\n\nvar _RFC = __webpack_require__(30);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar default_options = {\n\tformatExtension: function formatExtension(number, extension) {\n\t\treturn number + ' ext. ' + extension;\n\t}\n\n\t// Formats a phone number\n\t//\n\t// Example use cases:\n\t//\n\t// ```js\n\t// format('8005553535', 'RU', 'International')\n\t// format('8005553535', 'RU', 'International', metadata)\n\t// format({ phone: '8005553535', country: 'RU' }, 'International')\n\t// format({ phone: '8005553535', country: 'RU' }, 'International', metadata)\n\t// format('+78005553535', 'National')\n\t// format('+78005553535', 'National', metadata)\n\t// ```\n\t//\n};\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nfunction format(arg_1, arg_2, arg_3, arg_4, arg_5) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4, arg_5),\n\t    input = _sort_out_arguments.input,\n\t    format_type = _sort_out_arguments.format_type,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (input.country && metadata.hasCountry(input.country)) {\n\t\tmetadata.country(input.country);\n\t}\n\n\tvar _parse_national_numbe = (0, _common.parse_national_number_and_country_calling_code)(input.phone, metadata),\n\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t    number = _parse_national_numbe.number;\n\n\tcountryCallingCode = countryCallingCode || input.countryCallingCode;\n\n\tif (countryCallingCode) {\n\t\t// Check country restriction\n\t\tif (input.country && metadata.selectedCountry() && countryCallingCode !== metadata.countryCallingCode()) {\n\t\t\treturn input.phone;\n\t\t}\n\n\t\tmetadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t}\n\n\tif (!metadata.selectedCountry()) {\n\t\treturn input.phone;\n\t}\n\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\t\tif (!number) {\n\t\t\t\treturn '+' + metadata.countryCallingCode();\n\t\t\t}\n\t\t\tnumber = format_national_number(number, 'International', false, metadata);\n\t\t\tnumber = '+' + metadata.countryCallingCode() + ' ' + number;\n\t\t\treturn add_extension(number, input.ext, options.formatExtension);\n\n\t\tcase 'E.164':\n\t\t\t// `E.164` doesn't define \""phone number extensions\"".\n\t\t\treturn '+' + metadata.countryCallingCode() + input.phone;\n\n\t\tcase 'RFC3966':\n\t\t\treturn (0, _RFC.formatRFC3966)({\n\t\t\t\tnumber: '+' + metadata.countryCallingCode() + input.phone,\n\t\t\t\text: input.ext\n\t\t\t});\n\n\t\tcase 'National':\n\t\t\tif (!number) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tnumber = format_national_number(number, 'National', false, metadata);\n\t\t\treturn add_extension(number, input.ext, options.formatExtension);\n\t}\n}\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly.  Therefore, we use \\d, so that the first\n// group actually used in the pattern will be matched.\nvar FIRST_GROUP_PATTERN = exports.FIRST_GROUP_PATTERN = /(\\$\\d)/;\n\nfunction format_national_number_using_format(number, format, international, enforce_national_prefix, metadata) {\n\tvar format_pattern_matcher = new RegExp(format.pattern());\n\n\t// National prefix is omitted if there's no national prefix formatting rule\n\t// set for this country, or when this rule is set but\n\t// national prefix is optional for this phone number format\n\t// (and it is not enforced explicitly)\n\tvar national_prefix_may_be_omitted = !format.nationalPrefixFormattingRule() || format.nationalPrefixFormattingRule() && format.nationalPrefixIsOptionalWhenFormatting() && !enforce_national_prefix;\n\n\tif (!international && !national_prefix_may_be_omitted) {\n\t\treturn number.replace(format_pattern_matcher, format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()));\n\t}\n\n\tvar formatted_number = number.replace(format_pattern_matcher, international ? format.internationalFormat() : format.format());\n\n\tif (international) {\n\t\treturn local_to_international_style(formatted_number);\n\t}\n\n\treturn formatted_number;\n}\n\nfunction format_national_number(number, format_as, enforce_national_prefix, metadata) {\n\tvar format = choose_format_for_number(metadata.formats(), number);\n\n\tif (!format) {\n\t\treturn number;\n\t}\n\n\treturn format_national_number_using_format(number, format, format_as === 'International', enforce_national_prefix, metadata);\n}\n\nfunction choose_format_for_number(available_formats, national_number) {\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = (0, _getIterator3.default)(available_formats), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _format = _step.value;\n\n\t\t\t// Validate leading digits\n\t\t\tif (_format.leadingDigitsPatterns().length > 0) {\n\t\t\t\t// The last leading_digits_pattern is used here, as it is the most detailed\n\t\t\t\tvar last_leading_digits_pattern = _format.leadingDigitsPatterns()[_format.leadingDigitsPatterns().length - 1];\n\n\t\t\t\t// If leading digits don't match then move on to the next phone number format\n\t\t\t\tif (national_number.search(last_leading_digits_pattern) !== 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check that the national number matches the phone number format regular expression\n\t\t\tif ((0, _common.matches_entirely)(national_number, new RegExp(_format.pattern()))) {\n\t\t\t\treturn _format;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \""(999) 111-22-33\"" -> \""999 111 22 33\""\n//\nfunction local_to_international_style(local) {\n\treturn local.replace(new RegExp('[' + _common.VALID_PUNCTUATION + ']+', 'g'), ' ').trim();\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3, arg_4, arg_5) {\n\tvar input = void 0;\n\tvar format_type = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// Sort out arguments.\n\n\t// If the phone number is passed as a string.\n\t// `format('8005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\t// If country code is supplied.\n\t\t// `format('8005553535', 'RU', 'National', [options], metadata)`.\n\t\tif (typeof arg_3 === 'string') {\n\t\t\t// Will be `parse()`d later in code\n\t\t\tinput = {\n\t\t\t\tphone: arg_1,\n\t\t\t\tcountry: arg_2\n\t\t\t};\n\n\t\t\tformat_type = arg_3;\n\n\t\t\tif (arg_5) {\n\t\t\t\toptions = arg_4;\n\t\t\t\tmetadata = arg_5;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_4;\n\t\t\t}\n\t\t}\n\t\t// Just an international phone number is supplied\n\t\t// `format('+78005553535', 'National', [options], metadata)`.\n\t\telse {\n\t\t\t\t// Will be `parse()`d later in code\n\t\t\t\tinput = {\n\t\t\t\t\tphone: arg_1\n\t\t\t\t};\n\n\t\t\t\tif (typeof arg_2 !== 'string') {\n\t\t\t\t\tthrow new Error('Format type argument not passed for `format()`');\n\t\t\t\t}\n\n\t\t\t\tformat_type = arg_2;\n\n\t\t\t\tif (arg_4) {\n\t\t\t\t\toptions = arg_3;\n\t\t\t\t\tmetadata = arg_4;\n\t\t\t\t} else {\n\t\t\t\t\tmetadata = arg_3;\n\t\t\t\t}\n\t\t\t}\n\t}\n\t// If the phone number is passed as a parsed number object.\n\t// `format({ phone: '8005553535', country: 'RU' }, 'National', [options], metadata)`.\n\telse if (is_object(arg_1) && typeof arg_1.phone === 'string') {\n\t\t\tinput = arg_1;\n\t\t\tformat_type = arg_2;\n\n\t\t\tif (arg_4) {\n\t\t\t\toptions = arg_3;\n\t\t\t\tmetadata = arg_4;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_3;\n\t\t\t}\n\t\t} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');\n\n\t// Metadata is required.\n\tif (!metadata) {\n\t\tthrow new Error('Metadata is required');\n\t}\n\n\t// Validate `format_type`.\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\tcase 'E.164':\n\t\tcase 'National':\n\t\tcase 'RFC3966':\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error('Unknown format type argument passed to \""format()\"": \""' + format_type + '\""');\n\t}\n\n\t// Apply default options.\n\tif (options) {\n\t\toptions = (0, _extends3.default)({}, default_options, options);\n\t} else {\n\t\toptions = default_options;\n\t}\n\n\treturn { input: input, format_type: format_type, options: options, metadata: new _metadata2.default(metadata) };\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : (0, _typeof3.default)(_)) === 'object';\n};\n\nfunction add_extension(number, ext, formatExtension) {\n\treturn ext ? formatExtension(number, ext) : number;\n}\n//# sourceMappingURL=format.js.map\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\""Cannot call a class as a function\"");\n  }\n};\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nexports.__esModule = true;\n\nvar _defineProperty = __webpack_require__(74);\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\""value\"" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nexports.__esModule = true;\n\nvar _assign = __webpack_require__(73);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nexports.__esModule = true;\n\nvar _iterator = __webpack_require__(77);\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = __webpack_require__(76);\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \""function\"" && typeof _iterator2.default === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \""function\"" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \""symbol\"" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \""function\"" && _typeof(_iterator2.default) === \""symbol\"" ? function (obj) {\n  return typeof obj === \""undefined\"" ? \""undefined\"" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \""function\"" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \""symbol\"" : typeof obj === \""undefined\"" ? \""undefined\"" : _typeof(obj);\n};\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(10);\nvar document = __webpack_require__(5).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(3) && !__webpack_require__(12)(function () {\n  return Object.defineProperty(__webpack_require__(54)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// check on default Array iterator\nvar Iterators = __webpack_require__(13);\nvar ITERATOR = __webpack_require__(0)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(32);\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(8);\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(61);\nvar hiddenKeys = __webpack_require__(34).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(9);\nvar toIObject = __webpack_require__(14);\nvar arrayIndexOf = __webpack_require__(90)(false);\nvar IE_PROTO = __webpack_require__(40)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar hide = __webpack_require__(6);\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(6);\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(10);\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports) {\n\nmodule.exports = {\""version\"":\""1.0.23\"",\""country_calling_codes\"":{\""1\"":[\""US\"",\""AG\"",\""AI\"",\""AS\"",\""BB\"",\""BM\"",\""BS\"",\""CA\"",\""DM\"",\""DO\"",\""GD\"",\""GU\"",\""JM\"",\""KN\"",\""KY\"",\""LC\"",\""MP\"",\""MS\"",\""PR\"",\""SX\"",\""TC\"",\""TT\"",\""VC\"",\""VG\"",\""VI\""],\""7\"":[\""RU\"",\""KZ\""],\""20\"":[\""EG\""],\""27\"":[\""ZA\""],\""30\"":[\""GR\""],\""31\"":[\""NL\""],\""32\"":[\""BE\""],\""33\"":[\""FR\""],\""34\"":[\""ES\""],\""36\"":[\""HU\""],\""39\"":[\""IT\"",\""VA\""],\""40\"":[\""RO\""],\""41\"":[\""CH\""],\""43\"":[\""AT\""],\""44\"":[\""GB\"",\""GG\"",\""IM\"",\""JE\""],\""45\"":[\""DK\""],\""46\"":[\""SE\""],\""47\"":[\""NO\"",\""SJ\""],\""48\"":[\""PL\""],\""49\"":[\""DE\""],\""51\"":[\""PE\""],\""52\"":[\""MX\""],\""53\"":[\""CU\""],\""54\"":[\""AR\""],\""55\"":[\""BR\""],\""56\"":[\""CL\""],\""57\"":[\""CO\""],\""58\"":[\""VE\""],\""60\"":[\""MY\""],\""61\"":[\""AU\"",\""CC\"",\""CX\""],\""62\"":[\""ID\""],\""63\"":[\""PH\""],\""64\"":[\""NZ\""],\""65\"":[\""SG\""],\""66\"":[\""TH\""],\""81\"":[\""JP\""],\""82\"":[\""KR\""],\""84\"":[\""VN\""],\""86\"":[\""CN\""],\""90\"":[\""TR\""],\""91\"":[\""IN\""],\""92\"":[\""PK\""],\""93\"":[\""AF\""],\""94\"":[\""LK\""],\""95\"":[\""MM\""],\""98\"":[\""IR\""],\""211\"":[\""SS\""],\""212\"":[\""MA\"",\""EH\""],\""213\"":[\""DZ\""],\""216\"":[\""TN\""],\""218\"":[\""LY\""],\""220\"":[\""GM\""],\""221\"":[\""SN\""],\""222\"":[\""MR\""],\""223\"":[\""ML\""],\""224\"":[\""GN\""],\""225\"":[\""CI\""],\""226\"":[\""BF\""],\""227\"":[\""NE\""],\""228\"":[\""TG\""],\""229\"":[\""BJ\""],\""230\"":[\""MU\""],\""231\"":[\""LR\""],\""232\"":[\""SL\""],\""233\"":[\""GH\""],\""234\"":[\""NG\""],\""235\"":[\""TD\""],\""236\"":[\""CF\""],\""237\"":[\""CM\""],\""238\"":[\""CV\""],\""239\"":[\""ST\""],\""240\"":[\""GQ\""],\""241\"":[\""GA\""],\""242\"":[\""CG\""],\""243\"":[\""CD\""],\""244\"":[\""AO\""],\""245\"":[\""GW\""],\""246\"":[\""IO\""],\""247\"":[\""AC\""],\""248\"":[\""SC\""],\""249\"":[\""SD\""],\""250\"":[\""RW\""],\""251\"":[\""ET\""],\""252\"":[\""SO\""],\""253\"":[\""DJ\""],\""254\"":[\""KE\""],\""255\"":[\""TZ\""],\""256\"":[\""UG\""],\""257\"":[\""BI\""],\""258\"":[\""MZ\""],\""260\"":[\""ZM\""],\""261\"":[\""MG\""],\""262\"":[\""RE\"",\""YT\""],\""263\"":[\""ZW\""],\""264\"":[\""NA\""],\""265\"":[\""MW\""],\""266\"":[\""LS\""],\""267\"":[\""BW\""],\""268\"":[\""SZ\""],\""269\"":[\""KM\""],\""290\"":[\""SH\"",\""TA\""],\""291\"":[\""ER\""],\""297\"":[\""AW\""],\""298\"":[\""FO\""],\""299\"":[\""GL\""],\""350\"":[\""GI\""],\""351\"":[\""PT\""],\""352\"":[\""LU\""],\""353\"":[\""IE\""],\""354\"":[\""IS\""],\""355\"":[\""AL\""],\""356\"":[\""MT\""],\""357\"":[\""CY\""],\""358\"":[\""FI\"",\""AX\""],\""359\"":[\""BG\""],\""370\"":[\""LT\""],\""371\"":[\""LV\""],\""372\"":[\""EE\""],\""373\"":[\""MD\""],\""374\"":[\""AM\""],\""375\"":[\""BY\""],\""376\"":[\""AD\""],\""377\"":[\""MC\""],\""378\"":[\""SM\""],\""380\"":[\""UA\""],\""381\"":[\""RS\""],\""382\"":[\""ME\""],\""383\"":[\""XK\""],\""385\"":[\""HR\""],\""386\"":[\""SI\""],\""387\"":[\""BA\""],\""389\"":[\""MK\""],\""420\"":[\""CZ\""],\""421\"":[\""SK\""],\""423\"":[\""LI\""],\""500\"":[\""FK\""],\""501\"":[\""BZ\""],\""502\"":[\""GT\""],\""503\"":[\""SV\""],\""504\"":[\""HN\""],\""505\"":[\""NI\""],\""506\"":[\""CR\""],\""507\"":[\""PA\""],\""508\"":[\""PM\""],\""509\"":[\""HT\""],\""590\"":[\""GP\"",\""BL\"",\""MF\""],\""591\"":[\""BO\""],\""592\"":[\""GY\""],\""593\"":[\""EC\""],\""594\"":[\""GF\""],\""595\"":[\""PY\""],\""596\"":[\""MQ\""],\""597\"":[\""SR\""],\""598\"":[\""UY\""],\""599\"":[\""CW\"",\""BQ\""],\""670\"":[\""TL\""],\""672\"":[\""NF\""],\""673\"":[\""BN\""],\""674\"":[\""NR\""],\""675\"":[\""PG\""],\""676\"":[\""TO\""],\""677\"":[\""SB\""],\""678\"":[\""VU\""],\""679\"":[\""FJ\""],\""680\"":[\""PW\""],\""681\"":[\""WF\""],\""682\"":[\""CK\""],\""683\"":[\""NU\""],\""685\"":[\""WS\""],\""686\"":[\""KI\""],\""687\"":[\""NC\""],\""688\"":[\""TV\""],\""689\"":[\""PF\""],\""690\"":[\""TK\""],\""691\"":[\""FM\""],\""692\"":[\""MH\""],\""800\"":[\""001\""],\""808\"":[\""001\""],\""850\"":[\""KP\""],\""852\"":[\""HK\""],\""853\"":[\""MO\""],\""855\"":[\""KH\""],\""856\"":[\""LA\""],\""870\"":[\""001\""],\""878\"":[\""001\""],\""880\"":[\""BD\""],\""881\"":[\""001\""],\""882\"":[\""001\""],\""883\"":[\""001\""],\""886\"":[\""TW\""],\""888\"":[\""001\""],\""960\"":[\""MV\""],\""961\"":[\""LB\""],\""962\"":[\""JO\""],\""963\"":[\""SY\""],\""964\"":[\""IQ\""],\""965\"":[\""KW\""],\""966\"":[\""SA\""],\""967\"":[\""YE\""],\""968\"":[\""OM\""],\""970\"":[\""PS\""],\""971\"":[\""AE\""],\""972\"":[\""IL\""],\""973\"":[\""BH\""],\""974\"":[\""QA\""],\""975\"":[\""BT\""],\""976\"":[\""MN\""],\""977\"":[\""NP\""],\""979\"":[\""001\""],\""992\"":[\""TJ\""],\""993\"":[\""TM\""],\""994\"":[\""AZ\""],\""995\"":[\""GE\""],\""996\"":[\""KG\""],\""998\"":[\""UZ\""]},\""countries\"":{\""AC\"":[\""247\"",\""[46]\\\\d{4}|[01589]\\\\d{5}\"",[5,6]],\""AD\"":[\""376\"",\""[16]\\\\d{5,8}|[37-9]\\\\d{5}\"",[6,8,9],[[\""(\\\\d{3})(\\\\d{3})\"",\""$1 $2\"",[\""[137-9]|6[0-8]\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""180\"",\""180[02]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""690\""]]]],\""AE\"":[\""971\"",\""[2-79]\\\\d{7,8}|800\\\\d{2,9}\"",[5,6,7,8,9,10,11,12],[[\""([2-4679])(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2-4679][2-8]\""]],[\""(5\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""5\""]],[\""([479]00)(\\\\d)(\\\\d{5})\"",\""$1 $2 $3\"",[\""[479]00\""],\""$1\""],[\""([68]00)(\\\\d{2,9})\"",\""$1 $2\"",[\""[68]00\""],\""$1\""]],\""0\"",\""0$1\""],\""AF\"":[\""93\"",\""[2-7]\\\\d{8}\"",[9],[[\""([2-7]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2-7]\""]]],\""0\"",\""0$1\""],\""AG\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""268\""],\""AI\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""264\""],\""AL\"":[\""355\"",\""[2-57]\\\\d{7}|6\\\\d{8}|8\\\\d{5,7}|9\\\\d{5}\"",[6,7,8,9],[[\""(4)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""4[0-6]\""]],[\""(6\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""6\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2358][2-5]|4[7-9]\""]],[\""(\\\\d{3})(\\\\d{3,5})\"",\""$1 $2\"",[\""[235][16-9]|[79]|8[016-9]\""]]],\""0\"",\""0$1\""],\""AM\"":[\""374\"",\""[1-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\"",[\""1|47\""]],[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\"",[\""4[1349]|[5-7]|88|9[1-9]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""[23]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""8|90\""],\""0 $1\""]],\""0\"",\""(0$1)\""],\""AO\"":[\""244\"",\""[29]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\""]]],\""AR\"":[\""54\"",\""11\\\\d{8}|[2368]\\\\d{9}|9\\\\d{10}\"",[10,11],[[\""([68]\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[68]\""]],[\""(9)(11)(\\\\d{4})(\\\\d{4})\"",\""$2 15-$3-$4\"",[\""911\""],null,null,\""$1 $2 $3-$4\""],[\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$2 15-$3-$4\"",[\""9(?:2[2-4689]|3[3-8])\"",\""9(?:2(?:2[013]|3[067]|49|6[01346]|8|9[147-9])|3(?:36|4[1-358]|5[138]|6|7[069]|8[013578]))\"",\""9(?:2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3[4-6]|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45])))\"",\""9(?:2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3(?:4|5[014]|6[1-39])|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45])))\""],null,null,\""$1 $2 $3-$4\""],[\""(9)(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\""$2 15-$3-$4\"",[\""9[23]\""],null,null,\""$1 $2 $3-$4\""],[\""(11)(\\\\d{4})(\\\\d{4})\"",\""$1 $2-$3\"",[\""11\""],null,\""true\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2-$3\"",[\""2(?:2[013]|3[067]|49|6[01346]|8|9[147-9])|3(?:36|4[1-358]|5[138]|6|7[069]|8[013578])\"",\""2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3[4-6]|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45]))\"",\""2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3(?:4|5[014]|6[1-39])|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45]))\""],null,\""true\""],[\""(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\""$1 $2-$3\"",[\""[23]\""],null,\""true\""]],\""0\"",\""0$1\"",\""0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))?15)?\"",\""9$1\""],\""AS\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""684\""],\""AT\"":[\""43\"",\""[1-9]\\\\d{3,12}\"",[4,5,6,7,8,9,10,11,12,13],[[\""(116\\\\d{3})\"",\""$1\"",[\""116\""],\""$1\""],[\""(1)(\\\\d{3,12})\"",\""$1 $2\"",[\""1\""]],[\""(5\\\\d)(\\\\d{3,5})\"",\""$1 $2\"",[\""5[079]\""]],[\""(5\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""5[079]\""]],[\""(5\\\\d)(\\\\d{4})(\\\\d{4,7})\"",\""$1 $2 $3\"",[\""5[079]\""]],[\""(\\\\d{3})(\\\\d{3,10})\"",\""$1 $2\"",[\""(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:[28]0|32)|[89]\""]],[\""(\\\\d{4})(\\\\d{3,9})\"",\""$1 $2\"",[\""2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-9]|5[468])|7(?:[24][1-8]|35|[5-79])\""]]],\""0\"",\""0$1\""],\""AU\"":[\""61\"",\""1\\\\d{4,9}|[2-578]\\\\d{8}\"",[5,6,7,8,9,10],[[\""([2378])(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2378]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""14|[45]\""],\""0$1\""],[\""(16)(\\\\d{3,4})\"",\""$1 $2\"",[\""16\""],\""0$1\""],[\""(16)(\\\\d{3})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""16\""],\""0$1\""],[\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[389]0\"",\""1(?:[38]0|9)0\""]],[\""(180)(2\\\\d{3})\"",\""$1 $2\"",[\""180\"",\""1802\""]],[\""(19\\\\d)(\\\\d{3})\"",\""$1 $2\"",[\""19[13]\""]],[\""(19\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""19[679]\""]],[\""(13)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""13[1-9]\""]]],\""0\"",null,null,null,null,null,[[\""[237]\\\\d{8}|8(?:51(?:0(?:0[03-9]|[1247]\\\\d|3[2-9]|5[0-8]|6[1-9]|8[0-6])|1(?:1[69]|[23]\\\\d|4[0-4]))|[6-8]\\\\d{4}|9(?:[02-9]\\\\d{3}|1(?:[0-57-9]\\\\d{2}|6[0135-9]\\\\d)))\\\\d{3}\"",[9]],[\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[6-9]|7[02-9]|8[12457-9]|9[017-9])\\\\d{6}\"",[9]],[\""180(?:0\\\\d{3}|2)\\\\d{3}\"",[7,10]],[\""19(?:0[0126]\\\\d|[679])\\\\d{5}\"",[8,10]],[\""500\\\\d{6}\"",[9]],null,null,[\""16\\\\d{3,7}\"",[5,6,7,8,9]],[\""550\\\\d{6}\"",[9]],[\""13(?:00\\\\d{3}|45[0-4]|\\\\d)\\\\d{3}\"",[6,8,10]]]],\""AW\"":[\""297\"",\""[25-9]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""AX\"":[\""358\"",\""1\\\\d{5,11}|[35]\\\\d{5,9}|2\\\\d{4,9}|4\\\\d{5,10}|6\\\\d{7,9}|7\\\\d{4,9}|8\\\\d{6,9}\"",[5,6,7,8,9,10,11,12],[[\""(\\\\d{3})(\\\\d{3,7})\"",\""$1 $2\"",[\""(?:[1-3]0|[6-8])0\""]],[\""(75\\\\d{3})\"",\""$1\"",[\""75[12]\""]],[\""(116\\\\d{3})\"",\""$1\"",[\""116\""],\""$1\""],[\""(\\\\d{2})(\\\\d{4,10})\"",\""$1 $2\"",[\""[14]|2[09]|50|7[135]\""]],[\""(\\\\d)(\\\\d{4,11})\"",\""$1 $2\"",[\""[25689][1-8]|3\""]]],\""0\"",null,null,null,null,null,[[\""18[1-8]\\\\d{3,9}\"",[6,7,8,9,10,11,12]],[\""4\\\\d{5,10}|50\\\\d{4,8}\"",[6,7,8,9,10,11]],[\""800\\\\d{4,7}\"",[7,8,9,10]],[\""[67]00\\\\d{5,6}\"",[8,9]],null,null,[\""[13]0\\\\d{4,8}|2(?:0(?:[016-8]\\\\d{3,7}|[2-59]\\\\d{2,7})|9\\\\d{4,8})|60(?:[12]\\\\d{5,6}|6\\\\d{7})|7(?:1\\\\d{7}|3\\\\d{8}|5[03-9]\\\\d{2,7})\"",[5,6,7,8,9,10]]]],\""AZ\"":[\""994\"",\""[1-9]\\\\d{8}\"",[9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""1[28]|2(?:[0-36]|[45]2)|365\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[4-8]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""9\""],\""0$1\""]],\""0\"",\""(0$1)\""],\""BA\"":[\""387\"",\""[3-9]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2-$3\"",[\""[3-5]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""6[1-356]|[7-9]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""6[047]\""]]],\""0\"",\""0$1\""],\""BB\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""246\""],\""BD\"":[\""880\"",\""[2-79]\\\\d{5,9}|1\\\\d{9}|8[0-7]\\\\d{4,8}\"",[6,7,8,9,10],[[\""(2)(\\\\d{7,8})\"",\""$1-$2\"",[\""2\""]],[\""(\\\\d{2})(\\\\d{4,6})\"",\""$1-$2\"",[\""[3-79]1\""]],[\""(\\\\d{4})(\\\\d{3,6})\"",\""$1-$2\"",[\""1|3(?:0|[2-58]2)|4(?:0|[25]2|3[23]|[4689][25])|5(?:[02-578]2|6[25])|6(?:[0347-9]2|[26][25])|7[02-9]2|8(?:[023][23]|[4-7]2)|9(?:[02][23]|[458]2|6[016])\""]],[\""(\\\\d{3})(\\\\d{3,7})\"",\""$1-$2\"",[\""[3-79][2-9]|8\""]]],\""0\"",\""0$1\""],\""BE\"":[\""32\"",\""[1-9]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""4[5-9]\""]],[\""(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[23]|4[23]|9[2-4]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[156]|7[018]|8(?:0[1-9]|[1-79])\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""(?:80|9)0\""]]],\""0\"",\""0$1\""],\""BF\"":[\""226\"",\""[25-7]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""BG\"":[\""359\"",\""[23567]\\\\d{5,7}|[489]\\\\d{6,8}\"",[6,7,8,9],[[\""(2)(\\\\d)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""2\""]],[\""(2)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""2\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""43[124-7]|70[1-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3\"",[\""43[124-7]|70[1-9]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[78]00\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""99[69]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""48|8[7-9]|9[08]\""]]],\""0\"",\""0$1\""],\""BH\"":[\""973\"",\""[136-9]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\""]]],\""BI\"":[\""257\"",\""[267]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""BJ\"":[\""229\"",\""[2689]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[2689]\""]]]],\""BL\"":[\""590\"",\""[56]\\\\d{8}\"",[9],[[\""([56]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2-$3\"",[\""590|69[01]\""]]],\""0\"",null,null,null,null,null,[[\""590(?:2[7-9]|5[12]|87)\\\\d{4}\""],[\""69(?:0\\\\d{2}|1(?:2[29]|3[0-5]))\\\\d{4}\""]]],\""BM\"":[\""1\"",\""[4589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""441\""],\""BN\"":[\""673\"",\""[2-578]\\\\d{6}\"",[7],[[\""([2-578]\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[2-578]\""]]]],\""BO\"":[\""591\"",\""[23467]\\\\d{7}|8\\\\d{8}\"",[8,9],[[\""([234])(\\\\d{7})\"",\""$1 $2\"",[\""[2-4]\""]],[\""([67]\\\\d{7})\"",\""$1\"",[\""[67]\""]],[\""(800)(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""800\""]]],\""0\"",null,\""0(1\\\\d)?\""],\""BQ\"":[\""599\"",\""[347]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[13-7]\""]],[\""(9)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9\""]]],null,null,null,null,null,null,[[\""(?:318[023]|41(?:6[023]|70)|7(?:1[578]|50)\\\\d)\\\\d{3}\""],[\""(?:31(?:8[14-8]|9[14578])|416[145-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\""]]],\""BR\"":[\""55\"",\""[1-46-9]\\\\d{7,10}|5(?:[0-4]\\\\d{7,9}|5(?:[2-8]\\\\d{7}|9\\\\d{7,8}))\"",[8,9,10,11],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""300|40[02]\"",\""300|40(?:0|20)\""]],[\""([3589]00)(\\\\d{2,3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[3589]00\""],\""0$1\""],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2-$3\"",[\""[1-9][1-9]\""],\""($1)\""],[\""(\\\\d{2})(\\\\d{5})(\\\\d{4})\"",\""$1 $2-$3\"",[\""[1-9][1-9]9\""],\""($1)\""]],\""0\"",null,\""0(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\"",\""$2\""],\""BS\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""242\""],\""BT\"":[\""975\"",\""[1-8]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""1|77\""]],[\""([2-8])(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2-68]|7[246]\""]]]],\""BW\"":[\""267\"",\""[2-79]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[2-6]\""]],[\""(7\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""7\""]],[\""(90)(\\\\d{5})\"",\""$1 $2\"",[\""90\""]]]],\""BY\"":[\""375\"",\""[1-4]\\\\d{8}|8(?:0(?:0\\\\d{3,7}|[13]\\\\d{7})|(?:10|20\\\\d)\\\\d{7})|9\\\\d{9,10}\"",[6,7,8,9,10,11],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""17[0-3589]|2[4-9]|[34]\"",\""17(?:[02358]|1[0-2]|9[0189])|2[4-9]|[34]\""],\""8 0$1\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""1(?:5[24]|6[235]|7[467])|2(?:1[246]|2[25]|3[26])\"",\""1(?:5[24]|6(?:2|3[04-9]|5[0346-9])|7(?:[46]|7[37-9]))|2(?:1[246]|2[25]|3[26])\""],\""8 0$1\""],[\""(\\\\d{4})(\\\\d{2})(\\\\d{3})\"",\""$1 $2-$3\"",[\""1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\"",\""1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\""],\""8 0$1\""],[\""([89]\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8[01]|9\""],\""8 $1\""],[\""(82\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""82\""],\""8 $1\""],[\""(800)(\\\\d{3})\"",\""$1 $2\"",[\""800\""],\""8 $1\""],[\""(800)(\\\\d{2})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""800\""],\""8 $1\""]],\""8\"",null,\""8?0?\""],\""BZ\"":[\""501\"",\""[2-8]\\\\d{6}|0\\\\d{10}\"",[7,11],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\"",[\""[2-8]\""]],[\""(0)(800)(\\\\d{4})(\\\\d{3})\"",\""$1-$2-$3-$4\"",[\""080\"",\""0800\""]]]],\""CA\"":[\""1\"",\""[2-9]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,null,[[\""(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|48|79|8[17])|6(?:0[04]|13|22|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}\""],[\""\""],[\""8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\""],[\""900[2-9]\\\\d{6}\""],[\""5(?:(?:00|22|33|44|66|77|88)[2-9]|21[23])\\\\d{6}\""]]],\""CC\"":[\""61\"",\""[1458]\\\\d{5,9}\"",[6,7,8,9,10],[[\""([2378])(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2378]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""14|[45]\""],\""0$1\""],[\""(16)(\\\\d{3,4})\"",\""$1 $2\"",[\""16\""],\""0$1\""],[\""(16)(\\\\d{3})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""16\""],\""0$1\""],[\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[389]0\"",\""1(?:[38]0|9)0\""]],[\""(180)(2\\\\d{3})\"",\""$1 $2\"",[\""180\"",\""1802\""]],[\""(19\\\\d)(\\\\d{3})\"",\""$1 $2\"",[\""19[13]\""]],[\""(19\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""19[679]\""]],[\""(13)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""13[1-9]\""]]],\""0\"",null,null,null,null,null,[[\""8(?:51(?:0(?:02|31|60)|118)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:08|22|68)|4[29]8|62\\\\d|70[23]|959))\\\\d{3}\"",[9]],[\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[6-9]|7[02-9]|8[12547-9]|9[017-9])\\\\d{6}\"",[9]],[\""180(?:0\\\\d{3}|2)\\\\d{3}\"",[7,10]],[\""19(?:0[0126]\\\\d|[679])\\\\d{5}\"",[8,10]],[\""500\\\\d{6}\"",[9]],null,null,null,[\""550\\\\d{6}\"",[9]],[\""13(?:00\\\\d{2})?\\\\d{4}\"",[6,10]]]],\""CD\"":[\""243\"",\""[2-6]\\\\d{6}|[18]\\\\d{6,8}|9\\\\d{8}\"",[7,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""12\""]],[\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""8[0-2459]|9\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""88\""]],[\""(\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""[1-6]\""]]],\""0\"",\""0$1\""],\""CF\"":[\""236\"",\""[278]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""CG\"":[\""242\"",\""[028]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""801\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[02]\""]],[\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""800\""]]]],\""CH\"":[\""41\"",\""[2-9]\\\\d{8}|860\\\\d{9}\"",[9],[[\""([2-9]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[2-7]|[89]1\""]],[\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""8[047]|90\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4 $5\"",[\""860\""]]],\""0\"",\""0$1\""],\""CI\"":[\""225\"",\""[02-8]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""CK\"":[\""682\"",\""[2-8]\\\\d{4}\"",[5],[[\""(\\\\d{2})(\\\\d{3})\"",\""$1 $2\""]]],\""CL\"":[\""56\"",\""1230\\\\d{7}|[2-46-9]\\\\d{8,10}|5[1-3578]\\\\d{7}\"",[9,10,11],[[\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[23]\""],\""($1)\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[357]|4[1-35]|6[13-57]\""],\""($1)\""],[\""(9)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9\""]],[\""(44)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""44\""]],[\""([68]00)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[68]00\""],\""$1\""],[\""(600)(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""600\""],\""$1\""],[\""(1230)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""123\"",\""1230\""],\""$1\""],[\""(\\\\d{5})(\\\\d{4})\"",\""$1 $2\"",[\""219\""],\""($1)\""]],\""0\"",\""0$1\"",\""0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))\""],\""CM\"":[\""237\"",\""[2368]\\\\d{7,8}\"",[8,9],[[\""([26])(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4 $5\"",[\""[26]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[23]|88\""]]]],\""CN\"":[\""86\"",\""[1-7]\\\\d{6,11}|8[0-357-9]\\\\d{6,9}|9\\\\d{7,10}\"",[7,8,9,10,11,12],[[\""([48]00)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[48]00\""]],[\""(\\\\d{2})(\\\\d{5,6})\"",\""$1 $2\"",[\""(?:10|2\\\\d)[19]\"",\""(?:10|2\\\\d)(?:10|9[56])\"",\""(?:10|2\\\\d)(?:100|9[56])\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""[3-9]\"",\""[3-9]\\\\d\\\\d[19]\"",\""[3-9]\\\\d\\\\d(?:10|9[56])\""],\""0$1\""],[\""(21)(\\\\d{4})(\\\\d{4,6})\"",\""$1 $2 $3\"",[\""21\""],\""0$1\"",\""true\""],[\""([12]\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""10[1-9]|2[02-9]\"",\""10[1-9]|2[02-9]\"",\""10(?:[1-79]|8(?:0[1-9]|[1-9]))|2[02-9]\""],\""0$1\"",\""true\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[47-9]|7|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[36-8]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])\""],\""0$1\"",\""true\""],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""3(?:11|7[179])|4(?:[15]1|3[1-35])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:[39]1|5[457]|6[09])|8(?:[57]1|98)\""],\""0$1\"",\""true\""],[\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""807\"",\""8078\""],\""0$1\"",\""true\""],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[3-57-9]|66)\""]],[\""(10800)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""108\"",\""1080\"",\""10800\""]],[\""(\\\\d{3})(\\\\d{7,8})\"",\""$1 $2\"",[\""950\""]]],\""0\"",null,\""(1(?:[129]\\\\d{3}|79\\\\d{2}))|0\""],\""CO\"":[\""57\"",\""(?:[13]\\\\d{0,3}|[24-8])\\\\d{7}\"",[8,10,11],[[\""(\\\\d)(\\\\d{7})\"",\""$1 $2\"",[\""1(?:[2-7]|8[2-9]|9[0-3])|[24-8]\"",\""1(?:[2-7]|8[2-9]|9(?:09|[1-3]))|[24-8]\""],\""($1)\""],[\""(\\\\d{3})(\\\\d{7})\"",\""$1 $2\"",[\""3\""]],[\""(1)(\\\\d{3})(\\\\d{7})\"",\""$1-$2-$3\"",[\""1(?:80|9[04])\"",\""1(?:800|9(?:0[01]|4[78]))\""],\""0$1\"",null,\""$1 $2 $3\""]],\""0\"",null,\""0([3579]|4(?:44|56))?\""],\""CR\"":[\""506\"",\""[24-9]\\\\d{7,9}\"",[8,10],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[24-7]|8[3-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[89]0\""]]],null,null,\""(19(?:0[012468]|1[09]|20|66|77|99))\""],\""CU\"":[\""53\"",\""[2-57]\\\\d{5,7}\"",[6,7,8],[[\""(\\\\d)(\\\\d{6,7})\"",\""$1 $2\"",[\""7\""]],[\""(\\\\d{2})(\\\\d{4,6})\"",\""$1 $2\"",[\""[2-4]\""]],[\""(\\\\d)(\\\\d{7})\"",\""$1 $2\"",[\""5\""],\""0$1\""]],\""0\"",\""(0$1)\""],\""CV\"":[\""238\"",\""[2-59]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\""]]],\""CW\"":[\""599\"",\""[134679]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[13-7]\""]],[\""(9)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9\""]]],null,null,null,null,null,null,[[\""9(?:[48]\\\\d{2}|50\\\\d|7(?:2[0-24]|[34]\\\\d|6[35-7]|77|8[7-9]))\\\\d{4}\"",[8]],[\""9(?:5(?:[12467]\\\\d|3[01])|6(?:[15-9]\\\\d|3[01]))\\\\d{4}\"",[8]],null,null,null,null,null,[\""955\\\\d{5}\"",[8]],null,[\""60[0-2]\\\\d{4}\"",[7]]]],\""CX\"":[\""61\"",\""[1458]\\\\d{5,9}\"",[6,7,8,9,10],[[\""([2378])(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2378]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""14|[45]\""],\""0$1\""],[\""(16)(\\\\d{3,4})\"",\""$1 $2\"",[\""16\""],\""0$1\""],[\""(16)(\\\\d{3})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""16\""],\""0$1\""],[\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[389]0\"",\""1(?:[38]0|9)0\""]],[\""(180)(2\\\\d{3})\"",\""$1 $2\"",[\""180\"",\""1802\""]],[\""(19\\\\d)(\\\\d{3})\"",\""$1 $2\"",[\""19[13]\""]],[\""(19\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""19[679]\""]],[\""(13)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""13[1-9]\""]]],\""0\"",null,null,null,null,null,[[\""8(?:51(?:0(?:01|30|59)|117)|91(?:00[6-9]|1(?:21|49|78|81)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\\\d|7(?:0[01]|1[0-2])|958))\\\\d{3}\"",[9]],[\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[6-9]|7[02-9]|8[12547-9]|9[017-9])\\\\d{6}\"",[9]],[\""180(?:0\\\\d{3}|2)\\\\d{3}\"",[7,10]],[\""19(?:0[0126]\\\\d|[679])\\\\d{5}\"",[8,10]],[\""500\\\\d{6}\"",[9]],null,null,null,[\""550\\\\d{6}\"",[9]],[\""13(?:00\\\\d{2})?\\\\d{4}\"",[6,8,10]]]],\""CY\"":[\""357\"",\""[257-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\""]]],\""CZ\"":[\""420\"",\""[2-8]\\\\d{8}|9\\\\d{8,11}\"",[9],[[\""([2-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2-8]|9[015-7]\""]],[\""(96\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""96\""]],[\""(9\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""9[36]\""]]]],\""DE\"":[\""49\"",\""[1-35-9]\\\\d{3,14}|4(?:[0-8]\\\\d{3,12}|9(?:[0-37]\\\\d|4(?:[1-35-8]|4\\\\d?)|5\\\\d{1,2}|6[1-8]\\\\d?)\\\\d{2,8})\"",[4,5,6,7,8,9,10,11,12,13,14,15],[[\""(1\\\\d{2})(\\\\d{7,8})\"",\""$1 $2\"",[\""1[67]\""]],[\""(15\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""15[0568]\""]],[\""(1\\\\d{3})(\\\\d{7})\"",\""$1 $2\"",[\""15\""]],[\""(\\\\d{2})(\\\\d{3,11})\"",\""$1 $2\"",[\""3[02]|40|[68]9\""]],[\""(\\\\d{3})(\\\\d{3,11})\"",\""$1 $2\"",[\""2(?:0[1-389]|1[124]|2[18]|3[14]|[4-9]1)|3(?:[35-9][15]|4[015])|[4-8][1-9]1|9(?:06|[1-9]1)\""]],[\""(\\\\d{4})(\\\\d{2,11})\"",\""$1 $2\"",[\""[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|[7-9](?:0[1-9]|[1-9])\"",\""[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|[49][1246]|6[1-4]|7[13468]|8[13568])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|[7-9](?:0[1-9]|[1-9])\""]],[\""(3\\\\d{4})(\\\\d{1,10})\"",\""$1 $2\"",[\""3\""]],[\""(800)(\\\\d{7,12})\"",\""$1 $2\"",[\""800\""]],[\""(\\\\d{3})(\\\\d)(\\\\d{4,10})\"",\""$1 $2 $3\"",[\""1(?:37|80)|900\"",\""1(?:37|80)|900[1359]\""]],[\""(1\\\\d{2})(\\\\d{5,11})\"",\""$1 $2\"",[\""181\""]],[\""(18\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""185\"",\""1850\"",\""18500\""]],[\""(18\\\\d{2})(\\\\d{7})\"",\""$1 $2\"",[\""18[68]\""]],[\""(18\\\\d)(\\\\d{8})\"",\""$1 $2\"",[\""18[2-579]\""]],[\""(700)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""700\""]],[\""(138)(\\\\d{4})\"",\""$1 $2\"",[\""138\""]],[\""(15[013-68])(\\\\d{2})(\\\\d{8})\"",\""$1 $2 $3\"",[\""15[013-68]\""]],[\""(15[279]\\\\d)(\\\\d{2})(\\\\d{7})\"",\""$1 $2 $3\"",[\""15[279]\""]],[\""(1[67]\\\\d)(\\\\d{2})(\\\\d{7,8})\"",\""$1 $2 $3\"",[\""1(?:6[023]|7)\""]]],\""0\"",\""0$1\""],\""DJ\"":[\""253\"",\""[27]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""DK\"":[\""45\"",\""[2-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""DM\"":[\""1\"",\""[57-9]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""767\""],\""DO\"":[\""1\"",\""[589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""8[024]9\""],\""DZ\"":[\""213\"",\""(?:[1-4]|[5-9]\\\\d)\\\\d{7}\"",[8,9],[[\""([1-4]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[1-4]\""]],[\""([5-8]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[5-8]\""]],[\""(9\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""9\""]]],\""0\"",\""0$1\""],\""EC\"":[\""593\"",\""1\\\\d{9,10}|[2-8]\\\\d{7}|9\\\\d{8}\"",[8,9,10,11],[[\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2-$3\"",[\""[247]|[356][2-8]\""],null,null,\""$1-$2-$3\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9\""],\""0$1\""],[\""(1800)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""180\"",\""1800\""],\""$1\""]],\""0\"",\""(0$1)\""],\""EE\"":[\""372\"",\""[3-9]\\\\d{6,7}|800\\\\d{6,7}\"",[7,8,10],[[\""([3-79]\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]\"",\""[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]\""]],[\""(70)(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""70\""]],[\""(8000)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""800\"",\""8000\""]],[\""([458]\\\\d{3})(\\\\d{3,4})\"",\""$1 $2\"",[\""40|5|8(?:00|[1-5])\"",\""40|5|8(?:00[1-9]|[1-5])\""]]]],\""EG\"":[\""20\"",\""1\\\\d{4,9}|[24-6]\\\\d{8}|3\\\\d{7}|[89]\\\\d{8,9}\"",[8,9,10],[[\""(\\\\d)(\\\\d{7,8})\"",\""$1 $2\"",[\""[23]\""]],[\""(\\\\d{2})(\\\\d{6,7})\"",\""$1 $2\"",[\""1(?:3|5[239])|[4-6]|[89][2-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1[0-25]|[89]00\""]]],\""0\"",\""0$1\""],\""EH\"":[\""212\"",\""[5-9]\\\\d{8}\"",[9],[[\""([5-7]\\\\d{2})(\\\\d{6})\"",\""$1-$2\"",[\""5(?:2[015-7]|3[0-4])|[67]\""]],[\""([58]\\\\d{3})(\\\\d{5})\"",\""$1-$2\"",[\""5(?:2[2-489]|3[5-9]|92)|892\"",\""5(?:2(?:[2-48]|9[0-7])|3(?:[5-79]|8[0-7])|924)|892\""]],[\""(5\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""5(?:29|38)\"",\""5(?:29|38)[89]\""]],[\""([5]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""5(?:4[067]|5[03])\""]],[\""(8[09])(\\\\d{7})\"",\""$1-$2\"",[\""8(?:0|9[013-9])\""]]],\""0\"",null,null,null,null,\""528[89]\""],\""ER\"":[\""291\"",\""[178]\\\\d{6}\"",[7],[[\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\""]],\""0\"",\""0$1\""],\""ES\"":[\""34\"",\""[5-9]\\\\d{8}\"",[9],[[\""([89]00)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[89]00\""]],[\""([5-9]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[568]|[79][0-8]\""]]]],\""ET\"":[\""251\"",\""[1-59]\\\\d{8}\"",[9],[[\""([1-59]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[1-59]\""]]],\""0\"",\""0$1\""],\""FI\"":[\""358\"",\""1\\\\d{4,11}|[2-9]\\\\d{4,10}\"",[5,6,7,8,9,10,11,12],[[\""(\\\\d{3})(\\\\d{3,7})\"",\""$1 $2\"",[\""(?:[1-3]0|[6-8])0\""]],[\""(75\\\\d{3})\"",\""$1\"",[\""75[12]\""]],[\""(116\\\\d{3})\"",\""$1\"",[\""116\""],\""$1\""],[\""(\\\\d{2})(\\\\d{4,10})\"",\""$1 $2\"",[\""[14]|2[09]|50|7[135]\""]],[\""(\\\\d)(\\\\d{4,11})\"",\""$1 $2\"",[\""[25689][1-8]|3\""]]],\""0\"",\""0$1\"",null,null,null,null,[[\""1(?:[3569][1-8]\\\\d{3,9}|[47]\\\\d{5,10})|2[1-8]\\\\d{3,9}|3(?:[1-8]\\\\d{3,9}|9\\\\d{4,8})|[5689][1-8]\\\\d{3,9}\""],[\""4(?:[0-8]\\\\d{4,9}|9\\\\d{3,8})|50\\\\d{4,8}\"",[6,7,8,9,10,11]],[\""800\\\\d{4,7}\"",[7,8,9,10]],[\""[67]00\\\\d{5,6}\"",[8,9]],null,null,[\""[13]0\\\\d{4,8}|2(?:0(?:[016-8]\\\\d{3,7}|[2-59]\\\\d{2,7})|9\\\\d{4,8})|60(?:[12]\\\\d{5,6}|6\\\\d{7})|7(?:1\\\\d{7}|3\\\\d{8}|5[03-9]\\\\d{3,7})\"",[5,6,7,8,9,10]]]],\""FJ\"":[\""679\"",\""[2-9]\\\\d{6}|0\\\\d{10}\"",[7,11],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[2-9]\""]],[\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0\""]]]],\""FK\"":[\""500\"",\""[2-7]\\\\d{4}\"",[5]],\""FM\"":[\""691\"",\""[39]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""FO\"":[\""298\"",\""[2-9]\\\\d{5}\"",[6],[[\""(\\\\d{6})\"",\""$1\""]],null,null,\""(10(?:01|[12]0|88))\""],\""FR\"":[\""33\"",\""[1-9]\\\\d{8}\"",[9],[[\""([1-79])(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4 $5\"",[\""[1-79]\""]],[\""(8\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""8\""],\""0 $1\""]],\""0\"",\""0$1\""],\""GA\"":[\""241\"",\""0?\\\\d{7}\"",[7,8],[[\""(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[2-7]\""],\""0$1\""],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""0\""]]]],\""GB\"":[\""44\"",\""\\\\d{7,10}\"",[7,9,10],[[\""(7\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7(?:[1-57-9]|62)\"",\""7(?:[1-57-9]|624)\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2|5[56]|7[06]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[02-9]1|1)|3|9[018]\""]],[\""(\\\\d{5})(\\\\d{4,5})\"",\""$1 $2\"",[\""1(?:38|5[23]|69|76|94)\"",\""1(?:(?:38|69)7|5(?:24|39)|768|946)\"",\""1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\""]],[\""(1\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""1\""]],[\""(800)(\\\\d{4})\"",\""$1 $2\"",[\""800\"",\""8001\"",\""80011\"",\""800111\"",\""8001111\""]],[\""(845)(46)(4\\\\d)\"",\""$1 $2 $3\"",[\""845\"",\""8454\"",\""84546\"",\""845464\""]],[\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8(?:4[2-5]|7[0-3])\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""80\""]],[\""(800)(\\\\d{6})\"",\""$1 $2\"",[\""800\""]]],\""0\"",\""0$1\"",null,null,null,null,[[\""2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{7}|1(?:1(?:3[0-48]|[46][0-4]|5[0-26-9]|[78][0-49])|21[0-7]|31[0-8]|[4-69]1\\\\d)\\\\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)|3(?:0\\\\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[28][02-57-9]|[37]\\\\d|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\\\\d|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\\\d|9[2-57]))\\\\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\\\\d)|276\\\\d|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[567]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}|176888[2-46-8]\\\\d{2}|16977[23]\\\\d{3}\"",[9,10]],[\""7(?:[1-3]\\\\d{3}|4(?:[0-46-9]\\\\d{2}|5(?:[0-689]\\\\d|7[0-57-9]))|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])\\\\d|7(?:0(?:0[01]|[1-9]\\\\d)|[1-7]\\\\d{2}|8[02-9]\\\\d|9[0-689]\\\\d)|8(?:[014-9]\\\\d|[23][0-8])\\\\d|9(?:[024-9]\\\\d{2}|1(?:[02-9]\\\\d|1[028])|3[0-689]\\\\d))\\\\d{5}\"",[10]],[\""80(?:0(?:1111|\\\\d{6,7})|8\\\\d{7})\""],[\""(?:87[123]|9(?:[01]\\\\d|8[2349]))\\\\d{7}\"",[10]],[\""70\\\\d{8}\"",[10]],null,[\""(?:3[0347]|55)\\\\d{8}\"",[10]],[\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\"",[10]],[\""56\\\\d{8}\"",[10]],[\""8(?:4(?:5464\\\\d|[2-5]\\\\d{7})|70\\\\d{7})\"",[7,10]]]],\""GD\"":[\""1\"",\""[4589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""473\""],\""GE\"":[\""995\"",\""[34578]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[348]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""7\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""5\""]]],\""0\""],\""GF\"":[\""594\"",\""[56]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]],\""0\"",\""0$1\""],\""GG\"":[\""44\"",\""[135789]\\\\d{6,9}\"",[7,9,10],[[\""(7\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7(?:[1-57-9]|62)\"",\""7(?:[1-57-9]|624)\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2|5[56]|7[06]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[02-9]1|1)|3|9[018]\""]],[\""(\\\\d{5})(\\\\d{4,5})\"",\""$1 $2\"",[\""1(?:38|5[23]|69|76|94)\"",\""1(?:(?:38|69)7|5(?:24|39)|768|946)\"",\""1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\""]],[\""(1\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""1\""]],[\""(800)(\\\\d{4})\"",\""$1 $2\"",[\""800\"",\""8001\"",\""80011\"",\""800111\"",\""8001111\""]],[\""(845)(46)(4\\\\d)\"",\""$1 $2 $3\"",[\""845\"",\""8454\"",\""84546\"",\""845464\""]],[\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8(?:4[2-5]|7[0-3])\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""80\""]],[\""(800)(\\\\d{6})\"",\""$1 $2\"",[\""800\""]]],\""0\"",null,null,null,null,null,[[\""1481[25-9]\\\\d{5}\"",[10]],[\""7(?:781\\\\d|839\\\\d|911[17])\\\\d{5}\"",[10]],[\""80(?:0(?:1111|\\\\d{6,7})|8\\\\d{7})\""],[\""(?:87[123]|9(?:[01]\\\\d|8[0-3]))\\\\d{7}\"",[10]],[\""70\\\\d{8}\"",[10]],null,[\""(?:3[0347]|55)\\\\d{8}\"",[10]],[\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\"",[10]],[\""56\\\\d{8}\"",[10]],[\""8(?:4(?:5464\\\\d|[2-5]\\\\d{7})|70\\\\d{7})\"",[7,10]]]],\""GH\"":[\""233\"",\""[235]\\\\d{8}|8\\\\d{7}\"",[8,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[235]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""8\""]]],\""0\"",\""0$1\""],\""GI\"":[\""350\"",\""[256]\\\\d{7}\"",[8],[[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""2\""]]]],\""GL\"":[\""299\"",\""[1-689]\\\\d{5}\"",[6],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\""]]],\""GM\"":[\""220\"",\""[2-9]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""GN\"":[\""224\"",\""[367]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""3\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[67]\""]]]],\""GP\"":[\""590\"",\""[56]\\\\d{8}\"",[9],[[\""([56]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2-$3\"",[\""590|69[01]\""]]],\""0\"",\""0$1\"",null,null,null,null,[[\""590(?:0[1-68]|1[0-2]|2[0-68]|3[1289]|4[0-24-9]|5[3-579]|6[0189]|7[08]|8[0-689]|9\\\\d)\\\\d{4}\""],[\""69(?:0\\\\d{2}|1(?:2[29]|3[0-5]))\\\\d{4}\""]]],\""GQ\"":[\""240\"",\""[23589]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[235]\""]],[\""(\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""[89]\""]]]],\""GR\"":[\""30\"",\""[26-9]\\\\d{9}\"",[10],[[\""([27]\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""21|7\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[2-9]1|[689]\""]],[\""(2\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""2[2-9][02-9]\""]]]],\""GT\"":[\""502\"",\""[2-7]\\\\d{7}|1[89]\\\\d{9}\"",[8,11],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[2-7]\""]],[\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]]]],\""GU\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""671\""],\""GW\"":[\""245\"",\""(?:4(?:0\\\\d{5}|4\\\\d{7})|9\\\\d{8})\"",[7,9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""44|9[5-7]\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""40\""]]]],\""GY\"":[\""592\"",\""[2-46-9]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""HK\"":[\""852\"",\""[2-7]\\\\d{7}|8[0-3]\\\\d{6,7}|9\\\\d{4,10}\"",[5,6,7,8,9,11],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[2-7]|[89](?:0[1-9]|[1-9])\""]],[\""(800)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""800\""]],[\""(900)(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""900\""]],[\""(900)(\\\\d{2,5})\"",\""$1 $2\"",[\""900\""]]]],\""HN\"":[\""504\"",\""[237-9]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1-$2\""]]],\""HR\"":[\""385\"",\""[1-7]\\\\d{5,8}|[89]\\\\d{6,8}\"",[6,7,8,9],[[\""(1)(\\\\d{4})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1\""]],[\""([2-5]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[2-5]\""]],[\""(9\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""9\""]],[\""(6[01])(\\\\d{2})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""6[01]\""]],[\""([67]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[67]\""]],[\""(80[01])(\\\\d{2})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""80[01]\""]],[\""(80[01])(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""80[01]\""]]],\""0\"",\""0$1\""],\""HT\"":[\""509\"",\""[2-489]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\""]]],\""HU\"":[\""36\"",\""[1-9]\\\\d{7,8}\"",[8,9],[[\""(1)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[2-9]\""]]],\""06\"",\""($1)\""],\""ID\"":[\""62\"",\""(?:[1-79]\\\\d{6,10}|8\\\\d{7,11})\"",[7,8,9,10,11,12],[[\""(\\\\d{2})(\\\\d{5,8})\"",\""$1 $2\"",[\""2[124]|[36]1\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{5,8})\"",\""$1 $2\"",[\""2[035-9]|[36][02-9]|[4579]\""],\""(0$1)\""],[\""(8\\\\d{2})(\\\\d{3,4})(\\\\d{3})\"",\""$1-$2-$3\"",[\""8[1-35-9]\""]],[\""(8\\\\d{2})(\\\\d{4})(\\\\d{4,5})\"",\""$1-$2-$3\"",[\""8[1-35-9]\""]],[\""(1)(500)(\\\\d{3})\"",\""$1 $2 $3\"",[\""150\"",\""1500\""],\""$1\""],[\""(177)(\\\\d{6,8})\"",\""$1 $2\"",[\""177\""]],[\""(800)(\\\\d{5,7})\"",\""$1 $2\"",[\""800\""]],[\""(804)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""804\""]],[\""(80\\\\d)(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""80[79]\""]]],\""0\"",\""0$1\""],\""IE\"":[\""353\"",\""[124-9]\\\\d{6,9}\"",[7,8,9,10],[[\""(1)(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]],[\""(\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""2[24-9]|47|58|6[237-9]|9[35-9]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""40[24]|50[45]\""]],[\""(48)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""48\""]],[\""(818)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""818\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[24-69]|7[14]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""76|8[35-9]\""],\""0$1\""],[\""(8\\\\d)(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3 $4\"",[\""8[35-9]5\""],\""0$1\""],[\""(700)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""700\""],\""0$1\""],[\""(\\\\d{4})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1(?:5|8[059])\"",\""1(?:5|8[059]0)\""],\""$1\""]],\""0\"",\""(0$1)\""],\""IL\"":[\""972\"",\""1\\\\d{6,11}|[2-589]\\\\d{3}(?:\\\\d{3,6})?|6\\\\d{3}|7\\\\d{6,9}\"",[4,7,8,9,10,11,12],[[\""([2-489])(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[2-489]\""],\""0$1\""],[\""([57]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[57]\""],\""0$1\""],[\""(153)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3 $4\"",[\""153\""]],[\""(1)([7-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1-$2-$3-$4\"",[\""1[7-9]\""]],[\""(1255)(\\\\d{3})\"",\""$1-$2\"",[\""125\"",\""1255\""]],[\""(1200)(\\\\d{3})(\\\\d{3})\"",\""$1-$2-$3\"",[\""120\"",\""1200\""]],[\""(1212)(\\\\d{2})(\\\\d{2})\"",\""$1-$2-$3\"",[\""121\"",\""1212\""]],[\""(1599)(\\\\d{6})\"",\""$1-$2\"",[\""159\"",\""1599\""]],[\""(151)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2 $3-$4\"",[\""151\""]],[\""(\\\\d{4})\"",\""*$1\"",[\""[2-689]\""]]],\""0\""],\""IM\"":[\""44\"",\""[135789]\\\\d{6,9}\"",[10],[[\""(7\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7(?:[1-57-9]|62)\"",\""7(?:[1-57-9]|624)\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2|5[56]|7[06]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[02-9]1|1)|3|9[018]\""]],[\""(\\\\d{5})(\\\\d{4,5})\"",\""$1 $2\"",[\""1(?:38|5[23]|69|76|94)\"",\""1(?:(?:38|69)7|5(?:24|39)|768|946)\"",\""1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\""]],[\""(1\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""1\""]],[\""(800)(\\\\d{4})\"",\""$1 $2\"",[\""800\"",\""8001\"",\""80011\"",\""800111\"",\""8001111\""]],[\""(845)(46)(4\\\\d)\"",\""$1 $2 $3\"",[\""845\"",\""8454\"",\""84546\"",\""845464\""]],[\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8(?:4[2-5]|7[0-3])\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""80\""]],[\""(800)(\\\\d{6})\"",\""$1 $2\"",[\""800\""]]],\""0\"",null,null,null,null,null,[[\""1624[5-8]\\\\d{5}\""],[\""7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\""],[\""808162\\\\d{4}\""],[\""(?:872299|90[0167]624)\\\\d{4}\""],[\""70\\\\d{8}\""],null,[\""3(?:08162\\\\d|3\\\\d{5}|4(?:40[49]06|5624\\\\d)|7(?:0624\\\\d|2299\\\\d))\\\\d{3}|55\\\\d{8}\""],null,[\""56\\\\d{8}\""],[\""8(?:4(?:40[49]06|5624\\\\d)|70624\\\\d)\\\\d{3}\""]]],\""IN\"":[\""91\"",\""008\\\\d{9}|1\\\\d{7,12}|[2-9]\\\\d{9,10}\"",[8,9,10,11,12,13],[[\""(\\\\d{8})\"",\""$1\"",[\""561\"",\""5616\"",\""56161\""],\""$1\""],[\""(\\\\d{5})(\\\\d{5})\"",\""$1 $2\"",[\""6(?:[09]0|12|2[03689]|3[05-9])|7(?:[02-8]|19|9[037-9])|8(?:0[015-9]|[1-9])|9\"",\""6(?:[09]0|127|2(?:0[01]|39|6[02]|8[0-2]|9[04])|3(?:0[01]|5[0-2]|60|7[05]|81|9[02-5]))|7(?:[07]|19[0-5]|2(?:[0235-9]|[14][017-9])|3(?:[025-9]|[134][017-9])|4(?:[0-35689]|[47][017-9])|5(?:[02-46-9]|[15][017-9])|6(?:[02-9]|1[0-257-9])|8(?:[0-79]|8[0189])|9(?:[089]|31|7[02-9]))|8(?:0(?:[01589]|6[67]|7[02-9])|1(?:[0-57-9]|6[07-9])|2(?:[014][07-9]|[235-9])|3(?:[03-57-9]|[126][07-9])|[45]|6(?:[02457-9]|[136][07-9])|7(?:[078][07-9]|[1-69])|8(?:[0-25-9]|3[07-9]|4[047-9])|9(?:[02-9]|1[027-9]))|9\"",\""6(?:[09]0|1279|2(?:0[01]|39|6[02]|8[0-2]|9[04])|3(?:0[01]|5[0-2]|60|7[05]|81|9[02-5]))|7(?:0|19[0-5]|2(?:[0235-79]|[14][017-9]|8(?:[0-69]|[78][089]))|3(?:[05-8]|1(?:[0189]|7[5-9])|2(?:[0-49][089]|[5-8])|3[017-9]|4(?:[07-9]|11)|9(?:[01689]|[2-5][089]|7[0189]))|4(?:[056]|1(?:[0135-9]|[24][089])|[29](?:[0-7][089]|[89])|3(?:[0-8][089]|9)|[47](?:[089]|11|7[02-8])|8(?:[0-24-7][089]|[389]))|5(?:[0346-9]|[15][017-9]|2(?:[03-9]|[12][089]))|6(?:[0346-9]|1[0-257-9]|2(?:[0-4]|[5-9][089])|5(?:[0-367][089]|[4589]))|7(?:0(?:[02-9]|1[089])|[1-9])|8(?:[0-79]|8(?:0[0189]|11|8[013-9]|9))|9(?:[089]|313|7(?:[02-8]|9[07-9])))|8(?:0(?:[01589]|6[67]|7(?:[02-8]|9[04-9]))|1(?:[02-57-9]|1(?:[0-35-9]|4[0-46-9])|6(?:[089]|7[02-8]))|2(?:[014](?:[089]|7[02-8])|[235-9])|3(?:[03-57-9]|[16](?:[089]|7[02-7])|2(?:[09]|7[02-8]|8[0-689]))|[45]|6(?:[02457-9]|[136](?:[089]|7[02-8]))|7(?:0[07-9]|[1-69]|[78](?:[089]|7[02-8]))|8(?:[0-25-9]|3(?:[089]|7[02-8])|4(?:[0489]|7[02-8]))|9(?:[02-9]|1(?:[0289]|7[02-8])))|9\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""11|2[02]|33|4[04]|79[1-9]|80[2-46]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:2[0-249]|3[0-25]|4[145]|[59][14]|[68][1-9]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1|9[15])|6(?:12|[2-4]1|5[17]|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)\""]],[\""(\\\\d{4})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1(?:[23579]|[468][1-9])|[2-8]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""008\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""140\""],\""$1\""],[\""(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""160\"",\""1600\""],\""$1\""],[\""(\\\\d{4})(\\\\d{4,5})\"",\""$1 $2\"",[\""180\"",\""1800\""],\""$1\""],[\""(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""180\"",\""1800\""],\""$1\""],[\""(\\\\d{4})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""186\"",\""1860\""],\""$1\""],[\""(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""18[06]\""],\""$1\""]],\""0\"",\""0$1\"",null,null,true],\""IO\"":[\""246\"",\""3\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""IQ\"":[\""964\"",\""[1-7]\\\\d{7,9}\"",[8,9,10],[[\""(1)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]],[\""([2-6]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[2-6]\""]],[\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]]],\""0\"",\""0$1\""],\""IR\"":[\""98\"",\""[1-8]\\\\d{5,9}|9(?:[0-4]\\\\d{8}|9\\\\d{8})\"",[6,7,10],[[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[1-8]\""]],[\""(\\\\d{2})(\\\\d{4,5})\"",\""$1 $2\"",[\""[1-8]\""]],[\""(\\\\d{4,5})\"",\""$1\"",[\""96\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""9\""]]],\""0\"",\""0$1\""],\""IS\"":[\""354\"",\""[4-9]\\\\d{6}|38\\\\d{7}\"",[7,9],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[4-9]\""]],[\""(3\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""3\""]]]],\""IT\"":[\""39\"",\""[01589]\\\\d{5,10}|3(?:[12457-9]\\\\d{8}|[36]\\\\d{7,9})\"",[6,7,8,9,10,11],[[\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[26]|55\""]],[\""(0[26])(\\\\d{4})(\\\\d{5})\"",\""$1 $2 $3\"",[\""0[26]\""]],[\""(0[26])(\\\\d{4,6})\"",\""$1 $2\"",[\""0[26]\""]],[\""(0\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[13-57-9][0159]\""]],[\""(\\\\d{3})(\\\\d{3,6})\"",\""$1 $2\"",[\""0[13-57-9][0159]|8(?:03|4[17]|9[245])\"",\""0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))\""]],[\""(0\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[13-57-9][2-46-8]\""]],[\""(0\\\\d{3})(\\\\d{2,6})\"",\""$1 $2\"",[\""0[13-57-9][2-46-8]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[13]|8(?:00|4[08]|9[59])\"",\""[13]|8(?:00|4[08]|9(?:5[5-9]|9))\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""894\"",\""894[5-9]\""]],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""3\""]]],null,null,null,null,null,null,[[\""0(?:[26]\\\\d{4,9}|(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2346]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[34578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7})\""],[\""3(?:[12457-9]\\\\d{8}|6\\\\d{7,8}|3\\\\d{7,9})\"",[9,10,11]],[\""80(?:0\\\\d{6}|3\\\\d{3})\"",[6,9]],[\""0878\\\\d{5}|1(?:44|6[346])\\\\d{6}|89(?:2\\\\d{3}|4(?:[0-4]\\\\d{2}|[5-9]\\\\d{4})|5(?:[0-4]\\\\d{2}|[5-9]\\\\d{6})|9\\\\d{6})\"",[6,8,9,10]],[\""1(?:78\\\\d|99)\\\\d{6}\"",[9,10]],null,null,null,[\""55\\\\d{8}\"",[10]],[\""84(?:[08]\\\\d{6}|[17]\\\\d{3})\"",[6,9]]]],\""JE\"":[\""44\"",\""[135789]\\\\d{6,9}\"",[10],[[\""(7\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7(?:[1-57-9]|62)\"",\""7(?:[1-57-9]|624)\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2|5[56]|7[06]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[02-9]1|1)|3|9[018]\""]],[\""(\\\\d{5})(\\\\d{4,5})\"",\""$1 $2\"",[\""1(?:38|5[23]|69|76|94)\"",\""1(?:(?:38|69)7|5(?:24|39)|768|946)\"",\""1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\""]],[\""(1\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""1\""]],[\""(800)(\\\\d{4})\"",\""$1 $2\"",[\""800\"",\""8001\"",\""80011\"",\""800111\"",\""8001111\""]],[\""(845)(46)(4\\\\d)\"",\""$1 $2 $3\"",[\""845\"",\""8454\"",\""84546\"",\""845464\""]],[\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8(?:4[2-5]|7[0-3])\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""80\""]],[\""(800)(\\\\d{6})\"",\""$1 $2\"",[\""800\""]]],\""0\"",null,null,null,null,null,[[\""1534[0-24-8]\\\\d{5}\""],[\""7(?:509\\\\d|7(?:00[378]|97[7-9])|829\\\\d|937\\\\d)\\\\d{5}\""],[\""80(?:07(?:35|81)|8901)\\\\d{4}\""],[\""(?:871206|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\""],[\""701511\\\\d{4}\""],null,[\""3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))\\\\d{4}|55\\\\d{8}\""],[\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\""],[\""56\\\\d{8}\""],[\""8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|70002)\\\\d{4}\""]]],\""JM\"":[\""1\"",\""[589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""876\""],\""JO\"":[\""962\"",\""[235-9]\\\\d{7,8}\"",[8,9],[[\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2356]|87\""],\""(0$1)\""],[\""(7)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7[457-9]\""]],[\""(\\\\d{2})(\\\\d{7})\"",\""$1 $2\"",[\""70\""]],[\""(\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""8[0158]|9\""]]],\""0\"",\""0$1\""],\""JP\"":[\""81\"",\""[1-9]\\\\d{8,9}|00(?:[36]\\\\d{7,14}|7\\\\d{5,7}|8\\\\d{7})\"",[8,9,10,11,12,13,14,15,16,17],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1-$2-$3\"",[\""(?:12|57|99)0\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""800\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[2579]0|80[1-9]\""]],[\""(\\\\d{4})(\\\\d)(\\\\d{4})\"",\""$1-$2-$3\"",[\""1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:49|80|9[16])\"",\""1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[78]|96)|477|51[24]|636)|9(?:496|802|9(?:1[23]|69))\"",\""1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[78]|96[2457-9])|477|51[24]|636[2-57-9])|9(?:496|802|9(?:1[23]|69))\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\""$1-$2-$3\"",[\""1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])\"",\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:[0468][2-9]|5[78]|7[2-4])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[4-7]|[89][2-8]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:[3-6][2-9]|7[2-6]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|4[2-69]|[5-7]))\"",\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:[0468][2-9]|5[78]|7[2-4])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[4-7]|[89][2-8]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:20|[3578]|4[04-9]|6[56]))|3(?:[3-6][2-9]|7(?:[2-5]|6[0-59])|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))\"",\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:[0468][2-9]|5[78]|7[2-4])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[4-7]|[89][2-8]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:20|[3578]|4[04-9]|6(?:5[25]|60)))|3(?:[3-6][2-9]|7(?:[2-5]|6[0-59])|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5[2-589]|60|8(?:2[124589]|3[279]|[46-9])|9(?:[235-8]|93)\"",\""1|2(?:2[37]|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:20|[68]|9[178])|64|7[347])|5[2-589]|60|8(?:2[124589]|3[279]|[46-9])|9(?:[235-8]|93[34])\"",\""1|2(?:2[37]|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:20|[68]|9[178])|64|7[347])|5[2-589]|60|8(?:2[124589]|3[279]|[46-9])|9(?:[235-8]|93(?:31|4))\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\""$1-$2-$3\"",[\""2(?:[34]7|[56]9|74|9[14-79])|82|993\""]],[\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""3|4(?:2[09]|7[01])|6[1-9]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[2479][1-9]\""]]],\""0\"",\""0$1\""],\""KE\"":[\""254\"",\""20\\\\d{6,7}|[4-9]\\\\d{6,9}\"",[7,8,9,10],[[\""(\\\\d{2})(\\\\d{5,7})\"",\""$1 $2\"",[\""[24-6]\""]],[\""(\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[89]\""]]],\""0\"",\""0$1\"",\""005|0\""],\""KG\"":[\""996\"",\""[235-8]\\\\d{8,9}\"",[9,10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[25-7]|31[25]\""]],[\""(\\\\d{4})(\\\\d{5})\"",\""$1 $2\"",[\""3(?:1[36]|[2-9])\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""8\""]]],\""0\"",\""0$1\""],\""KH\"":[\""855\"",\""[1-9]\\\\d{7,9}\"",[8,9,10],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""1\\\\d[1-9]|[2-9]\""],\""0$1\""],[\""(1[89]00)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[89]0\"",\""1[89]00\""]]],\""0\""],\""KI\"":[\""686\"",\""[2458]\\\\d{4}|3\\\\d{4,7}|[67]\\\\d{7}\"",[5,8],[],null,null,\""0\""],\""KM\"":[\""269\"",\""[3478]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\""]]],\""KN\"":[\""1\"",\""[589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""869\""],\""KP\"":[\""850\"",\""1\\\\d{9}|[28]\\\\d{7}\"",[8,10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]],[\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""8\""]]],\""0\"",\""0$1\""],\""KR\"":[\""82\"",\""00(?:3\\\\d{8,9}|7\\\\d{9,11})|[1-7]\\\\d{4,9}|8\\\\d{8}\"",[5,6,8,9,10,11,12,13,14],[[\""(\\\\d{2})(\\\\d{3,4})\"",\""$1-$2\"",[\""(?:3[1-3]|[46][1-4]|5[1-5])1\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""1(?:5[246-9]|6[046-8]|8[03579])\"",\""1(?:5(?:22|44|66|77|88|99)|6(?:[07]0|44|6[16]|88)|8(?:00|33|55|77|99))\""],\""$1\""],[\""(\\\\d{5})\"",\""$1\"",[\""1[016-9]1\"",\""1[016-9]11\"",\""1[016-9]114\""]],[\""(\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""2[1-9]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""60[2-9]|80\""]],[\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""1[0-25-9]|(?:3[1-3]|[46][1-4]|5[1-5])[1-9]\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[57]0\""]]],\""0\"",\""0$1\"",\""0(8[1-46-8]|85\\\\d{2})?\""],\""KW\"":[\""965\"",\""[12569]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{4})(\\\\d{3,4})\"",\""$1 $2\"",[\""[16]|2(?:[0-35-9]|4[0-35-9])|52[25]|9[024-9]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""244|5(?:[015]|6[56])\""]]]],\""KY\"":[\""1\"",\""[3589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""345\""],\""KZ\"":[\""7\"",\""(?:33\\\\d|7\\\\d{2}|80[089])\\\\d{7}\"",[10],[[\""([3489]\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""[3489]\""]],[\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]]],\""8\"",null,null,null,null,null,[[\""33622\\\\d{5}|7(?:1(?:0(?:[23]\\\\d|4[0-3]|59|63)|1(?:[23]\\\\d|4[0-79]|59)|2(?:[23]\\\\d|59)|3(?:2\\\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\\\d|3[013-9]|5[1-9])|5(?:2\\\\d|3[1-9]|4[0-7]|59)|6(?:[234]\\\\d|5[19]|61)|72\\\\d|8(?:[27]\\\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\\\d|4[46-9]|5[3469])|2(?:2\\\\d|3[0679]|46|5[12679])|3(?:[234]\\\\d|5[139])|4(?:2\\\\d|3[1235-9]|59)|5(?:[23]\\\\d|4[01246-8]|59|61)|6(?:2\\\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\\\d|40|5[279])|8(?:[23]\\\\d|4[0-3]|59)|9(?:2\\\\d|3[124578]|59)))\\\\d{5}\""],[\""7(?:0[012578]|47|6[02-4]|7[15-8]|85)\\\\d{7}\""],[\""800\\\\d{7}\""],[\""809\\\\d{7}\""],[\""808\\\\d{7}\""],null,null,null,[\""751\\\\d{7}\""]]],\""LA\"":[\""856\"",\""[2-8]\\\\d{7,9}\"",[8,9,10],[[\""(20)(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""20\""]],[\""([2-8]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2[13]|3[14]|[4-8]\""]],[\""(30)(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""30\""]]],\""0\"",\""0$1\""],\""LB\"":[\""961\"",\""[13-9]\\\\d{6,7}\"",[7,8],[[\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]\""],\""0$1\""],[\""([7-9]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""7(?:[01]|6[013-9]|8[89]|9[1-3])|[89][01]\""]]],\""0\""],\""LC\"":[\""1\"",\""[5789]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""758\""],\""LI\"":[\""423\"",\""6\\\\d{8}|[23789]\\\\d{6}\"",[7,9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""[237-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""6[56]\""]],[\""(69)(7\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""697\""]]],\""0\"",null,\""0|10(?:01|20|66)\""],\""LK\"":[\""94\"",\""[1-9]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[1-689]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]]],\""0\"",\""0$1\""],\""LR\"":[\""231\"",\""2\\\\d{7,8}|[378]\\\\d{8}|4\\\\d{6}|5\\\\d{6,8}\"",[7,8,9],[[\""(2\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2\""]],[\""([4-5])(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[45]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[23578]\""]]],\""0\"",\""0$1\""],\""LS\"":[\""266\"",\""[2568]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\""]]],\""LT\"":[\""370\"",\""[3-9]\\\\d{7}\"",[8],[[\""([34]\\\\d)(\\\\d{6})\"",\""$1 $2\"",[\""37|4(?:1|5[45]|6[2-4])\""]],[\""([3-6]\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""3[148]|4(?:[24]|6[09])|528|6\""]],[\""([7-9]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[7-9]\""],\""8 $1\""],[\""(5)(2\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""52[0-79]\""]]],\""8\"",\""(8-$1)\"",\""[08]\"",null,true],\""LU\"":[\""352\"",\""[24-9]\\\\d{3,10}|3(?:[0-46-9]\\\\d{2,9}|5[013-9]\\\\d{1,8})\"",[4,5,6,7,8,9,10,11],[[\""(\\\\d{2})(\\\\d{3})\"",\""$1 $2\"",[\""[2-5]|7[1-9]|[89](?:0[2-9]|[1-9])\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""[2-5]|7[1-9]|[89](?:0[2-9]|[1-9])\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""20\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\"",\""$1 $2 $3 $4\"",[\""2(?:[0367]|4[3-8])\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""20\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\"",\""$1 $2 $3 $4 $5\"",[\""2(?:[0367]|4[3-8])\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,4})\"",\""$1 $2 $3 $4\"",[\""2(?:[12589]|4[12])|[3-5]|7[1-9]|8(?:0[2-9]|[1-9])|9(?:0[2-46-9]|[1-9])\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""70|80[01]|90[015]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""6\""]]],null,null,\""(15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\\\\d)\""],\""LV\"":[\""371\"",\""[2689]\\\\d{7}\"",[8],[[\""([2689]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2689]\""]]]],\""LY\"":[\""218\"",\""[25679]\\\\d{8}\"",[9],[[\""([25-79]\\\\d)(\\\\d{7})\"",\""$1-$2\"",[\""[25-79]\""]]],\""0\"",\""0$1\""],\""MA\"":[\""212\"",\""[5-9]\\\\d{8}\"",[9],[[\""([5-7]\\\\d{2})(\\\\d{6})\"",\""$1-$2\"",[\""5(?:2[015-7]|3[0-4])|[67]\""]],[\""([58]\\\\d{3})(\\\\d{5})\"",\""$1-$2\"",[\""5(?:2[2-489]|3[5-9]|92)|892\"",\""5(?:2(?:[2-48]|9[0-7])|3(?:[5-79]|8[0-7])|924)|892\""]],[\""(5\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""5(?:29|38)\"",\""5(?:29|38)[89]\""]],[\""([5]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""5(?:4[067]|5[03])\""]],[\""(8[09])(\\\\d{7})\"",\""$1-$2\"",[\""8(?:0|9[013-9])\""]]],\""0\"",\""0$1\"",null,null,null,null,[[\""5(?:2(?:[015-79]\\\\d|2[02-9]|3[2-57]|4[2-8]|8[235-7])\\\\d|3(?:[0-48]\\\\d|[57][2-9]|6[2-8]|9[3-9])\\\\d|4[067]\\\\d{2}|5[03]\\\\d{2})\\\\d{4}\""],[\""(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:0[067]|6[1267]|7[07]))\\\\d{6}\""],[\""80\\\\d{7}\""],[\""89\\\\d{7}\""],null,null,null,null,[\""5924[01]\\\\d{4}\""]]],\""MC\"":[\""377\"",\""[34689]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[39]\""],\""$1\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""4\""]],[\""(6)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4 $5\"",[\""6\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3\"",[\""8\""],\""$1\""]],\""0\"",\""0$1\""],\""MD\"":[\""373\"",\""[235-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""22|3\""]],[\""([25-7]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2[13-9]|[5-7]\""]],[\""([89]\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""[89]\""]]],\""0\"",\""0$1\""],\""ME\"":[\""382\"",\""[2-9]\\\\d{7,8}\"",[8],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2-57-9]|6[036-9]\""]]],\""0\"",\""0$1\""],\""MF\"":[\""590\"",\""[56]\\\\d{8}\"",[9],[[\""([56]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2-$3\"",[\""590|69[01]\""]]],\""0\"",null,null,null,null,null,[[\""590(?:0[079]|13|2[79]|30|43|5[0-268]|7[79]|87)\\\\d{4}\""],[\""69(?:0\\\\d{2}|1(?:2[29]|3[0-5]))\\\\d{4}\""]]],\""MG\"":[\""261\"",\""[23]\\\\d{8}\"",[9],[[\""([23]\\\\d)(\\\\d{2})(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[23]\""]]],\""0\"",\""0$1\""],\""MH\"":[\""692\"",\""[2-6]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\""]],\""1\""],\""MK\"":[\""389\"",\""[2-578]\\\\d{7}\"",[8],[[\""(2)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2\""]],[\""([347]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[347]\""]],[\""([58]\\\\d{2})(\\\\d)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[58]\""]]],\""0\"",\""0$1\""],\""ML\"":[\""223\"",\""[246-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[246-9]\""]]]],\""MM\"":[\""95\"",\""[178]\\\\d{5,7}|[24-6]\\\\d{5,8}|9(?:[279]\\\\d{0,2}|5|[34]\\\\d{1,2}|6(?:\\\\d{1,2})?|8(?:\\\\d{2})?)\\\\d{6}\"",[6,7,8,9,10],[[\""(\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""1|2[245]\""]],[\""(2)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""251\""]],[\""(\\\\d)(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""16|2\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""432|67|81\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[4-8]\""]],[\""(9)(\\\\d{3})(\\\\d{4,6})\"",\""$1 $2 $3\"",[\""9(?:2[0-4]|[35-9]|4[137-9])\""]],[\""(9)([34]\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9(?:3[0-36]|4[0-57-9])\""]],[\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""92[56]\""]],[\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""93\""]]],\""0\"",\""0$1\""],\""MN\"":[\""976\"",\""[12]\\\\d{7,9}|[57-9]\\\\d{7}\"",[8,9,10],[[\""([12]\\\\d)(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[12]1\""]],[\""([12]2\\\\d)(\\\\d{5,6})\"",\""$1 $2\"",[\""[12]2[1-3]\""]],[\""([12]\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""[12](?:27|[3-5])\"",\""[12](?:27|[3-5]\\\\d)2\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[57-9]\""],\""$1\""],[\""([12]\\\\d{4})(\\\\d{4,5})\"",\""$1 $2\"",[\""[12](?:27|[3-5])\"",\""[12](?:27|[3-5]\\\\d)[4-9]\""]]],\""0\"",\""0$1\""],\""MO\"":[\""853\"",\""[268]\\\\d{7}\"",[8],[[\""([268]\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[268]\""]]]],\""MP\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""670\""],\""MQ\"":[\""596\"",\""[56]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]],\""0\"",\""0$1\""],\""MR\"":[\""222\"",\""[2-48]\\\\d{7}\"",[8],[[\""([2-48]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[2-48]\""]]]],\""MS\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""664\""],\""MT\"":[\""356\"",\""[2357-9]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\""]]],\""MU\"":[\""230\"",\""[2-9]\\\\d{6,7}\"",[7,8],[[\""([2-46-9]\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[2-46-9]\""]],[\""(5\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""5\""]]]],\""MV\"":[\""960\"",\""[346-8]\\\\d{6,9}|9(?:00\\\\d{7}|\\\\d{6})\"",[7,10],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\"",[\""[3467]|9(?:0[1-9]|[1-9])\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[89]00\""]]]],\""MW\"":[\""265\"",\""(?:1(?:\\\\d{2})?|[2789]\\\\d{2}|31\\\\d)\\\\d{6}\"",[7,9],[[\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1\""]],[\""(2\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[17-9]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""31\""]]],\""0\"",\""0$1\""],\""MX\"":[\""52\"",\""[1-9]\\\\d{9,10}\"",[10,11],[[\""([358]\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""33|55|81\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2467]|3[0-2457-9]|5[089]|8[02-9]|9[0-35-9]\""]],[\""(1)([358]\\\\d)(\\\\d{4})(\\\\d{4})\"",\""044 $2 $3 $4\"",[\""1(?:33|55|81)\""],\""$1\"",null,\""$1 $2 $3 $4\""],[\""(1)(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""044 $2 $3 $4\"",[\""1(?:[2467]|3[0-2457-9]|5[089]|8[2-9]|9[1-35-9])\""],\""$1\"",null,\""$1 $2 $3 $4\""]],\""01\"",\""01 $1\"",\""0[12]|04[45](\\\\d{10})\"",\""1$1\"",true],\""MY\"":[\""60\"",\""[13-9]\\\\d{7,9}\"",[8,9,10],[[\""([4-79])(\\\\d{3})(\\\\d{4})\"",\""$1-$2 $3\"",[\""[4-79]\""],\""0$1\""],[\""(3)(\\\\d{4})(\\\\d{4})\"",\""$1-$2 $3\"",[\""3\""],\""0$1\""],[\""([18]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1-$2 $3\"",[\""1[02-46-9][1-9]|8\""],\""0$1\""],[\""(1)([36-8]00)(\\\\d{2})(\\\\d{4})\"",\""$1-$2-$3-$4\"",[\""1[36-8]0\"",\""1[36-8]00\""]],[\""(11)(\\\\d{4})(\\\\d{4})\"",\""$1-$2 $3\"",[\""11\""],\""0$1\""],[\""(15[49])(\\\\d{3})(\\\\d{4})\"",\""$1-$2 $3\"",[\""15[49]\""],\""0$1\""]],\""0\""],\""MZ\"":[\""258\"",\""[28]\\\\d{7,8}\"",[8,9],[[\""([28]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""2|8[2-7]\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""80\""]]]],\""NA\"":[\""264\"",\""[68]\\\\d{7,8}\"",[8,9],[[\""(8\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8[1-35]\""]],[\""(6\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""6\""]],[\""(88)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""88\""]],[\""(870)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""870\""]]],\""0\"",\""0$1\""],\""NC\"":[\""687\"",\""[2-57-9]\\\\d{5}\"",[6],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1.$2.$3\"",[\""[2-46-9]|5[0-4]\""]]]],\""NE\"":[\""227\"",\""[0289]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""09|[289]\""]],[\""(08)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""08\""]]]],\""NF\"":[\""672\"",\""[13]\\\\d{5}\"",[6],[[\""(\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""1\""]],[\""(\\\\d)(\\\\d{5})\"",\""$1 $2\"",[\""3\""]]]],\""NG\"":[\""234\"",\""[1-6]\\\\d{5,8}|9\\\\d{5,9}|[78]\\\\d{5,13}\"",[7,8,10,11,12,13,14],[[\""(\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[12]|9(?:0[3-9]|[1-9])\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""[3-6]|7(?:0[1-9]|[1-79])|8[2-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""70|8[01]|90[235-9]\""]],[\""([78]00)(\\\\d{4})(\\\\d{4,5})\"",\""$1 $2 $3\"",[\""[78]00\""]],[\""([78]00)(\\\\d{5})(\\\\d{5,6})\"",\""$1 $2 $3\"",[\""[78]00\""]],[\""(78)(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""78\""]]],\""0\"",\""0$1\""],\""NI\"":[\""505\"",\""[125-8]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\""]]],\""NL\"":[\""31\"",\""1\\\\d{4,8}|[2-7]\\\\d{8}|[89]\\\\d{6,9}\"",[5,6,7,8,9,10],[[\""([1-578]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[4578]\""]],[\""([1-5]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\""]],[\""(6)(\\\\d{8})\"",\""$1 $2\"",[\""6[0-57-9]\""]],[\""(66)(\\\\d{7})\"",\""$1 $2\"",[\""66\""]],[\""(14)(\\\\d{3,4})\"",\""$1 $2\"",[\""14\""],\""$1\""],[\""([89]0\\\\d)(\\\\d{4,7})\"",\""$1 $2\"",[\""[89]0\""]]],\""0\"",\""0$1\""],\""NO\"":[\""47\"",\""0\\\\d{4}|[2-9]\\\\d{7}\"",[5,8],[[\""([489]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[489]\""]],[\""([235-7]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[235-7]\""]]],null,null,null,null,null,null,[[\""(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\\\d{6}\"",[8]],[\""(?:4[015-8]|5[89]|87|9\\\\d)\\\\d{6}\"",[8]],[\""80[01]\\\\d{5}\"",[8]],[\""82[09]\\\\d{5}\"",[8]],[\""880\\\\d{5}\"",[8]],null,[\""0\\\\d{4}|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d{2})\\\\d{3}\""],null,[\""85[0-5]\\\\d{5}\"",[8]],[\""810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\"",[8]]]],\""NP\"":[\""977\"",\""[1-8]\\\\d{7}|9(?:[1-69]\\\\d{6,8}|7[2-6]\\\\d{5,7}|8\\\\d{8})\"",[8,10],[[\""(1)(\\\\d{7})\"",\""$1-$2\"",[\""1[2-6]\""]],[\""(\\\\d{2})(\\\\d{6})\"",\""$1-$2\"",[\""1[01]|[2-8]|9(?:[1-69]|7[15-9])\""]],[\""(9\\\\d{2})(\\\\d{7})\"",\""$1-$2\"",[\""9(?:6[013]|7[245]|8)\""],\""$1\""]],\""0\"",\""0$1\""],\""NR\"":[\""674\"",\""[458]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""NU\"":[\""683\"",\""[1-5]\\\\d{3}\"",[4]],\""NZ\"":[\""64\"",\""6[235-9]\\\\d{6}|[2-57-9]\\\\d{7,9}\"",[8,9,10],[[\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1-$2 $3\"",[\""240|[346]|7[2-57-9]|9[1-9]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""21\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\"",\""$1 $2 $3\"",[\""2(?:1[1-9]|[69]|7[0-35-9])|70|86\""]],[\""(2\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[028]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""90\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""2(?:10|74)|5|[89]0\""]]],\""0\"",\""0$1\""],\""OM\"":[\""968\"",\""(?:5|[279]\\\\d)\\\\d{6}|800\\\\d{5,6}\"",[7,8,9],[[\""(2\\\\d)(\\\\d{6})\"",\""$1 $2\"",[\""2\""]],[\""([79]\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[79]\""]],[\""([58]00)(\\\\d{4,6})\"",\""$1 $2\"",[\""[58]00\""]]]],\""PA\"":[\""507\"",\""[1-9]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\"",[\""[1-57-9]\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""6\""]]]],\""PE\"":[\""51\"",\""[14-9]\\\\d{7,8}\"",[8,9],[[\""(1)(\\\\d{7})\"",\""$1 $2\"",[\""1\""]],[\""([4-8]\\\\d)(\\\\d{6})\"",\""$1 $2\"",[\""[4-7]|8[2-4]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""80\""]],[\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""9\""],\""$1\""]],\""0\"",\""(0$1)\""],\""PF\"":[\""689\"",\""4\\\\d{5,7}|8\\\\d{7}\"",[6,8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""4[09]|8[79]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""44\""]]]],\""PG\"":[\""675\"",\""[1-9]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[13-689]|27\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""20|7\""]]]],\""PH\"":[\""63\"",\""1\\\\d{10,12}|2\\\\d{5,7}|[3-7]\\\\d{8}|8\\\\d{7,9}|9\\\\d{9}\"",[6,8,9,10,11,12,13],[[\""(2)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2\""],\""(0$1)\""],[\""(2)(\\\\d{5})\"",\""$1 $2\"",[\""2\""],\""(0$1)\""],[\""(\\\\d{4})(\\\\d{4,6})\"",\""$1 $2\"",[\""3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])\"",\""3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\""],\""(0$1)\""],[\""(\\\\d{5})(\\\\d{4})\"",\""$1 $2\"",[\""346|4(?:27|9[35])|883\"",\""3469|4(?:279|9(?:30|56))|8834\""],\""(0$1)\""],[\""([3-8]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[3-8]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""81|9\""],\""0$1\""],[\""(1800)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""180\"",\""1800\""]],[\""(1800)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3 $4\"",[\""180\"",\""1800\""]]],\""0\""],\""PK\"":[\""92\"",\""1\\\\d{8}|[2-8]\\\\d{5,11}|9(?:[013-9]\\\\d{4,10}|2\\\\d(?:111\\\\d{6}|\\\\d{3,7}))\"",[8,9,10,11,12],[[\""([89]00)(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3\"",[\""[89]00\""],\""0$1\""],[\""(1\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""1\""],\""$1\""],[\""(\\\\d{2})(\\\\d{7,8})\"",\""$1 $2\"",[\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\""]],[\""(\\\\d{3})(\\\\d{6,7})\"",\""$1 $2\"",[\""2[349]|45|54|60|72|8[2-5]|9[2-469]\"",\""(?:2[349]|45|54|60|72|8[2-5]|9[2-469])\\\\d[2-9]\""]],[\""(58\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""58[126]\""]],[\""(3\\\\d{2})(\\\\d{7})\"",\""$1 $2\"",[\""3\""],\""0$1\""],[\""(\\\\d{2})(111)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1\"",\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11\"",\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111\""]],[\""(\\\\d{3})(111)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""2[349]|45|54|60|72|8[2-5]|9[2-9]\"",\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d1\"",\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d11\"",\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d111\""]]],\""0\"",\""(0$1)\""],\""PL\"":[\""48\"",\""[1-57-9]\\\\d{6,8}|6\\\\d{5,8}\"",[6,7,8,9],[[\""(\\\\d{3})(\\\\d{3})\"",\""$1 $2\"",[\""11[68]|64\""]],[\""(\\\\d{5})\"",\""$1\"",[\""19\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""64\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""26|39|45|5[0137]|6[0469]|7[02389]|8[08]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[14]|2[0-57-9]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]\""]]]],\""PM\"":[\""508\"",\""[45]\\\\d{5}\"",[6],[[\""([45]\\\\d)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""[45]\""]]],\""0\"",\""0$1\""],\""PR\"":[\""1\"",\""[5789]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""787|939\""],\""PS\"":[\""970\"",\""1\\\\d{9}|[24589]\\\\d{7,8}\"",[8,9,10],[[\""([2489])(2\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2489]2\""]],[\""(5[69]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""5[69]\""]],[\""(1[78]00)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[78]0\"",\""1[78]00\""],\""$1\""]],\""0\"",\""0$1\""],\""PT\"":[\""351\"",\""[2-46-9]\\\\d{8}\"",[9],[[\""(2\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[12]\""]],[\""([2-46-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2[3-9]|[346-9]\""]]]],\""PW\"":[\""680\"",\""[2-9]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""PY\"":[\""595\"",\""5[0-5]\\\\d{4,7}|[2-46-9]\\\\d{5,8}\"",[6,7,8,9],[[\""(\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\""],\""(0$1)\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3,6})\"",\""$1 $2\"",[\""[2-9]0\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""9[1-9]\""],\""0$1\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""870\"",\""8700\""]],[\""(\\\\d{3})(\\\\d{4,5})\"",\""$1 $2\"",[\""[2-8][1-9]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2-8][1-9]\""],\""0$1\""]],\""0\""],\""QA\"":[\""974\"",\""[2-8]\\\\d{6,7}\"",[7,8],[[\""([28]\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[28]\""]],[\""([3-7]\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[3-7]\""]]]],\""RE\"":[\""262\"",\""[268]\\\\d{8}\"",[9],[[\""([268]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[268]\""]]],\""0\"",\""0$1\"",null,null,null,\""262|69|8\""],\""RO\"":[\""40\"",\""[23]\\\\d{5,8}|[7-9]\\\\d{8}\"",[6,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[23]1\""]],[\""(\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[23]1\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[23][3-7]|[7-9]\""]],[\""(2\\\\d{2})(\\\\d{3})\"",\""$1 $2\"",[\""2[3-6]\""]]],\""0\"",\""0$1\""],\""RS\"":[\""381\"",\""[126-9]\\\\d{4,11}|3(?:[0-79]\\\\d{3,10}|8[2-9]\\\\d{2,9})\"",[6,7,8,9,10,11,12],[[\""([23]\\\\d{2})(\\\\d{4,9})\"",\""$1 $2\"",[\""(?:2[389]|39)0\""]],[\""([1-3]\\\\d)(\\\\d{5,10})\"",\""$1 $2\"",[\""1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])\""]],[\""(6\\\\d)(\\\\d{6,8})\"",\""$1 $2\"",[\""6\""]],[\""([89]\\\\d{2})(\\\\d{3,9})\"",\""$1 $2\"",[\""[89]\""]],[\""(7[26])(\\\\d{4,9})\"",\""$1 $2\"",[\""7[26]\""]],[\""(7[08]\\\\d)(\\\\d{4,9})\"",\""$1 $2\"",[\""7[08]\""]]],\""0\"",\""0$1\""],\""RU\"":[\""7\"",\""[347-9]\\\\d{9}\"",[10],[[\""([3489]\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""[3489]\""]],[\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]]],\""8\"",\""8 ($1)\"",null,null,true,null,[[\""(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-79]|7[1-37-9]))\\\\d{7}\""],[\""9\\\\d{9}\""],[\""80[04]\\\\d{7}\""],[\""80[39]\\\\d{7}\""],[\""808\\\\d{7}\""]]],\""RW\"":[\""250\"",\""[027-9]\\\\d{7,8}\"",[8,9],[[\""(2\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2\""]],[\""([7-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[7-9]\""],\""0$1\""],[\""(0\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""0\""]]],\""0\""],\""SA\"":[\""966\"",\""[15]\\\\d{8}|8\\\\d{9}|92\\\\d{7}\"",[9,10],[[\""(1\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1[1-467]\""]],[\""(5\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""5\""]],[\""(92\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""92\""],\""$1\""],[\""(800)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""800\""],\""$1\""],[\""(811)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""811\""]]],\""0\"",\""0$1\""],\""SB\"":[\""677\"",\""[1-9]\\\\d{4,6}\"",[5,7],[[\""(\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""[7-9]\""]]]],\""SC\"":[\""248\"",\""[24689]\\\\d{5,6}\"",[7],[[\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[246]\""]]]],\""SD\"":[\""249\"",\""[19]\\\\d{8}\"",[9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\""]],\""0\"",\""0$1\""],\""SE\"":[\""46\"",\""[1-35-9]\\\\d{5,11}|4\\\\d{6,8}\"",[6,7,8,9,10],[[\""(8)(\\\\d{2,3})(\\\\d{2,3})(\\\\d{2})\"",\""$1-$2 $3 $4\"",[\""8\""],null,null,\""$1 $2 $3 $4\""],[\""([1-69]\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\"",\""$1-$2 $3 $4\"",[\""1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90\""],null,null,\""$1 $2 $3 $4\""],[\""([1-469]\\\\d)(\\\\d{3})(\\\\d{2})\"",\""$1-$2 $3\"",[\""[12][136]|3[356]|4[0246]|6[03]|90\""],null,null,\""$1 $2 $3\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1-$2 $3 $4\"",[\""1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])\""],null,null,\""$1 $2 $3 $4\""],[\""(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\"",\""$1-$2 $3\"",[\""1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])\""],null,null,\""$1 $2 $3\""],[\""(7\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1-$2 $3 $4\"",[\""7\""],null,null,\""$1 $2 $3 $4\""],[\""(77)(\\\\d{2})(\\\\d{2})\"",\""$1-$2$3\"",[\""77\""],null,null,\""$1 $2 $3\""],[\""(20)(\\\\d{2,3})(\\\\d{2})\"",\""$1-$2 $3\"",[\""20\""],null,null,\""$1 $2 $3\""],[\""(9[034]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1-$2 $3 $4\"",[\""9[034]\""],null,null,\""$1 $2 $3 $4\""],[\""(9[034]\\\\d)(\\\\d{4})\"",\""$1-$2\"",[\""9[034]\""],null,null,\""$1 $2\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1-$2 $3 $4 $5\"",[\""25[245]|67[3-6]\""],null,null,\""$1 $2 $3 $4 $5\""]],\""0\"",\""0$1\""],\""SG\"":[\""65\"",\""[36]\\\\d{7}|[17-9]\\\\d{7,10}\"",[8,10,11],[[\""([3689]\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[369]|8[1-9]\""]],[\""(1[89]00)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1[89]0\"",\""1[89]00\""]],[\""(7000)(\\\\d{4})(\\\\d{3})\"",\""$1 $2 $3\"",[\""700\"",\""7000\""]],[\""(800)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""800\""]]]],\""SH\"":[\""290\"",\""[256]\\\\d{4}|8\\\\d{3}\"",[4,5],[],null,null,null,null,null,null,[[\""2(?:[0-57-9]\\\\d|6[4-9])\\\\d{2}\""],[\""[56]\\\\d{4}\"",[5]],null,null,null,null,null,null,[\""262\\\\d{2}\"",[5]]]],\""SI\"":[\""386\"",\""[1-7]\\\\d{6,7}|[89]\\\\d{4,7}\"",[5,6,7,8],[[\""(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[12]|[34][24-8]|5[2-8]|7[3-8]\""],\""(0$1)\""],[\""([3-7]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[37][01]|4[0139]|51|6\""]],[\""([89][09])(\\\\d{3,6})\"",\""$1 $2\"",[\""[89][09]\""]],[\""([58]\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""59|8[1-3]\""]]],\""0\"",\""0$1\""],\""SJ\"":[\""47\"",\""0\\\\d{4}|[45789]\\\\d{7}\"",[5,8],[[\""([489]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[489]\""]],[\""([235-7]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[235-7]\""]]],null,null,null,null,null,null,[[\""79\\\\d{6}\"",[8]],[\""(?:4[015-8]|5[89]|9\\\\d)\\\\d{6}\"",[8]],[\""80[01]\\\\d{5}\"",[8]],[\""82[09]\\\\d{5}\"",[8]],[\""880\\\\d{5}\"",[8]],null,[\""0\\\\d{4}|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d{2})\\\\d{3}\""],null,[\""85[0-5]\\\\d{5}\"",[8]],[\""810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\"",[8]]]],\""SK\"":[\""421\"",\""(?:[2-68]\\\\d{5,8}|9\\\\d{6,8})\"",[6,7,9],[[\""(2)(1[67])(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""21[67]\""]],[\""([3-5]\\\\d)(\\\\d{2})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""[3-5]\""]],[\""(2)(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\""$1/$2 $3 $4\"",[\""2\""]],[\""([3-5]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1/$2 $3 $4\"",[\""[3-5]\""]],[\""([689]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[689]\""]],[\""(9090)(\\\\d{3})\"",\""$1 $2\"",[\""909\"",\""9090\""]]],\""0\"",\""0$1\""],\""SL\"":[\""232\"",\""[2-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\""]],\""0\"",\""(0$1)\""],\""SM\"":[\""378\"",\""[05-7]\\\\d{7,9}\"",[8,10],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[5-7]\""]],[\""(0549)(\\\\d{6})\"",\""$1 $2\"",[\""054\"",\""0549\""],null,null,\""($1) $2\""],[\""(\\\\d{6})\"",\""0549 $1\"",[\""[89]\""],null,null,\""(0549) $1\""]],null,null,\""([89]\\\\d{5})\"",\""0549$1\""],\""SN\"":[\""221\"",\""[3789]\\\\d{8}\"",[9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[379]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""8\""]]]],\""SO\"":[\""252\"",\""[1-9]\\\\d{5,8}\"",[6,7,8,9],[[\""(\\\\d{6})\"",\""$1\"",[\""[134]\""]],[\""(\\\\d)(\\\\d{6})\"",\""$1 $2\"",[\""[13-5]|2[0-79]\""]],[\""(\\\\d)(\\\\d{7})\"",\""$1 $2\"",[\""24|[67]\""]],[\""(\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""8[125]\""]],[\""(\\\\d{2})(\\\\d{5,7})\"",\""$1 $2\"",[\""15|28|6[1-35-9]|799|9[2-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""3[59]|4[89]|6[24-6]|79|8[08]|90\""]]],\""0\""],\""SR\"":[\""597\"",\""[2-8]\\\\d{5,6}\"",[6,7],[[\""(\\\\d{3})(\\\\d{3})\"",\""$1-$2\"",[\""[2-4]|5[2-58]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1-$2-$3\"",[\""56\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\"",[\""[6-8]\""]]]],\""SS\"":[\""211\"",\""[19]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",null,\""0$1\""]],\""0\""],\""ST\"":[\""239\"",\""[29]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""SV\"":[\""503\"",\""[267]\\\\d{7}|[89]\\\\d{6}(?:\\\\d{4})?\"",[7,8,11],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[267]\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[89]\""]],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[89]\""]]]],\""SX\"":[\""1\"",\""[5789]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""721\""],\""SY\"":[\""963\"",\""[1-59]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[1-5]\""]],[\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""9\""]]],\""0\"",\""0$1\"",null,null,true],\""SZ\"":[\""268\"",\""[027]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[027]\""]]]],\""TA\"":[\""290\"",\""8\\\\d{3}\"",[4],[],null,null,null,null,null,null,[[\""8\\\\d{3}\""]]],\""TC\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""649\""],\""TD\"":[\""235\"",\""[2679]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""TG\"":[\""228\"",\""[279]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[279]\""]]]],\""TH\"":[\""66\"",\""1\\\\d{8,9}|[2-9]\\\\d{7,8}\"",[8,9,10],[[\""(2)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2\""]],[\""([13-9]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""14|[3-9]\""]],[\""(1[89]00)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[89]0\"",\""1[89]00\""],\""$1\""]],\""0\"",\""0$1\""],\""TJ\"":[\""992\"",\""[3-57-9]\\\\d{8}\"",[9],[[\""([349]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[34]7|91[78]\""]],[\""([457-9]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""4[148]|[578]|9(?:[0235-9]|1[59])\""]],[\""(331700)(\\\\d)(\\\\d{2})\"",\""$1 $2 $3\"",[\""331\"",\""3317\"",\""33170\"",\""331700\""]],[\""(\\\\d{4})(\\\\d)(\\\\d{4})\"",\""$1 $2 $3\"",[\""3[1-5]\"",\""3(?:[1245]|3(?:[02-9]|1[0-589]))\""]]],\""8\"",null,null,null,true],\""TK\"":[\""690\"",\""[2-47]\\\\d{3,6}\"",[4,5,6,7]],\""TL\"":[\""670\"",\""[2-489]\\\\d{6}|7\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[2-489]|70\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""7[3-8]\""]]]],\""TM\"":[\""993\"",\""[1-6]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""12\""]],[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\"",[\""6\""],\""8 $1\""],[\""(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""13|[2-5]\""]]],\""8\"",\""(8 $1)\""],\""TN\"":[\""216\"",\""[2-57-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\""]]],\""TO\"":[\""676\"",\""[02-8]\\\\d{4,6}\"",[5,7],[[\""(\\\\d{2})(\\\\d{3})\"",\""$1-$2\"",[\""[1-6]|7[0-4]|8[05]\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""7[5-9]|8[47-9]\""]],[\""(\\\\d{4})(\\\\d{3})\"",\""$1 $2\"",[\""0\""]]]],\""TR\"":[\""90\"",\""[2-589]\\\\d{9}|444\\\\d{4}\"",[7,10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[23]|4(?:[0-35-9]|4[0-35-9])\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""5[02-69]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""51|[89]\""],\""0$1\""],[\""(444)(\\\\d{1})(\\\\d{3})\"",\""$1 $2 $3\"",[\""444\""]]],\""0\"",null,null,null,true],\""TT\"":[\""1\"",\""[589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""868\""],\""TV\"":[\""688\"",\""[279]\\\\d{4,6}\"",[5,6,7]],\""TW\"":[\""886\"",\""2\\\\d{6,8}|[3-689]\\\\d{7,8}|7\\\\d{7,9}\"",[7,8,9,10],[[\""(20)(\\\\d)(\\\\d{4})\"",\""$1 $2 $3\"",[\""202\""]],[\""([258]0)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""20[013-9]|50[0-46-9]|80[0-79]\""]],[\""([2-8])(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[25][2-8]|[346]|[78][1-9]\""]],[\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""9\""]],[\""(70)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""70\""]]],\""0\"",\""0$1\""],\""TZ\"":[\""255\"",\""\\\\d{9}\"",[7,9],[[\""([24]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[24]\""]],[\""([67]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[67]\""]],[\""([89]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[89]\""]]],\""0\"",\""0$1\""],\""UA\"":[\""380\"",\""[3-9]\\\\d{8}\"",[9],[[\""([3-9]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[38]9|4(?:[45][0-5]|87)|5(?:0|[67][37])|6[36-8]|7|9[1-9]\"",\""[38]9|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|7|9[1-9]\""]],[\""([3-689]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""(?:3[1-8]|4[136-8])2|5(?:[12457]2|6[24])|6(?:[12][29]|[49]2|5[24])|8[0-8]|90\"",\""3(?:[1-46-8]2[013-9]|52)|4(?:[1378]2|62[013-9])|5(?:[12457]2|6[24])|6(?:[12][29]|[49]2|5[24])|8[0-8]|90\""]],[\""([3-6]\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""3(?:[1-46-8]|5[013-9])|4(?:[137][013-9]|[45][6-9]|6|8[4-6])|5(?:[1245][013-9]|3|6[0135689]|7[4-6])|6(?:[12][13-8]|[49][013-9]|5[0135-9])\"",\""3(?:[1-46-8](?:[013-9]|22)|5[013-9])|4(?:[137][013-9]|[45][6-9]|6(?:[013-9]|22)|8[4-6])|5(?:[1245][013-9]|3|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][13-8]|[49][013-9]|5[0135-9])\""]]],\""0\"",\""0$1\""],\""UG\"":[\""256\"",\""\\\\d{9}\"",[9],[[\""(\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""20[0-8]|4(?:6[45]|[7-9])|[7-9]\"",\""20(?:[013-8]|2[5-9])|4(?:6[45]|[7-9])|[7-9]\""]],[\""(\\\\d{2})(\\\\d{7})\"",\""$1 $2\"",[\""3|4(?:[1-5]|6[0-36-9])\""]],[\""(2024)(\\\\d{5})\"",\""$1 $2\"",[\""202\"",\""2024\""]]],\""0\"",\""0$1\""],\""US\"":[\""1\"",\""[2-9]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,true,null,[[\""(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[026]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[0-24679]|4[67]|5[12]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|6[39]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[16]|5[017]|6[0-279]|78|8[012])|7(?:0[1-46-8]|1[02-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-258]|4[3578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[014678]|4[0179]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\""],[\""\""],[\""8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\""],[\""900[2-9]\\\\d{6}\""],[\""5(?:(?:00|22|33|44|66|77|88)[2-9]|21[23])\\\\d{6}\""]]],\""UY\"":[\""598\"",\""[2489]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[24]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""9[1-9]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[89]0\""],\""0$1\""]],\""0\""],\""UZ\"":[\""998\"",\""[679]\\\\d{8}\"",[9],[[\""([679]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[679]\""]]],\""8\"",\""8 $1\""],\""VA\"":[\""39\"",\""(?:0(?:878\\\\d{5}|6698\\\\d{5})|[1589]\\\\d{5,10}|3(?:[12457-9]\\\\d{8}|[36]\\\\d{7,9}))\"",[6,8,9,10,11],[[\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[26]|55\""]],[\""(0[26])(\\\\d{4})(\\\\d{5})\"",\""$1 $2 $3\"",[\""0[26]\""]],[\""(0[26])(\\\\d{4,6})\"",\""$1 $2\"",[\""0[26]\""]],[\""(0\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[13-57-9][0159]\""]],[\""(\\\\d{3})(\\\\d{3,6})\"",\""$1 $2\"",[\""0[13-57-9][0159]|8(?:03|4[17]|9[245])\"",\""0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))\""]],[\""(0\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[13-57-9][2-46-8]\""]],[\""(0\\\\d{3})(\\\\d{2,6})\"",\""$1 $2\"",[\""0[13-57-9][2-46-8]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[13]|8(?:00|4[08]|9[59])\"",\""[13]|8(?:00|4[08]|9(?:5[5-9]|9))\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""894\"",\""894[5-9]\""]],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""3\""]]],null,null,null,null,null,null,[[\""06698\\\\d{5}\"",[10]],[\""3(?:[12457-9]\\\\d{8}|6\\\\d{7,8}|3\\\\d{7,9})\"",[9,10,11]],[\""80(?:0\\\\d{6}|3\\\\d{3})\"",[6,9]],[\""0878\\\\d{5}|1(?:44|6[346])\\\\d{6}|89(?:2\\\\d{3}|4(?:[0-4]\\\\d{2}|[5-9]\\\\d{4})|5(?:[0-4]\\\\d{2}|[5-9]\\\\d{6})|9\\\\d{6})\"",[6,8,9,10]],[\""1(?:78\\\\d|99)\\\\d{6}\"",[9,10]],null,null,null,[\""55\\\\d{8}\"",[10]],[\""84(?:[08]\\\\d{6}|[17]\\\\d{3})\"",[6,9]]]],\""VC\"":[\""1\"",\""[5789]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""784\""],\""VE\"":[\""58\"",\""[24589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{7})\"",\""$1-$2\""]],\""0\"",\""0$1\""],\""VG\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""284\""],\""VI\"":[\""1\"",\""[3589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""340\""],\""VN\"":[\""84\"",\""1\\\\d{6,9}|2\\\\d{9}|6\\\\d{6,7}|7\\\\d{6}|8\\\\d{6,8}|9\\\\d{8}\"",[7,8,9,10],[[\""([17]99)(\\\\d{4})\"",\""$1 $2\"",[\""[17]99\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[48]\""]],[\""(80)(\\\\d{5})\"",\""$1 $2\"",[\""80\""]],[\""(69\\\\d)(\\\\d{4,5})\"",\""$1 $2\"",[\""69\""]],[\""(\\\\d{3})(\\\\d{4})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2[0-35-79]\""]],[\""([89]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""8(?:8|9[89])|9\""]],[\""(1[2689]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[26]|8[68]|99)\""]],[\""(86[89])(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""86[89]\""]],[\""(1[89]00)(\\\\d{4,6})\"",\""$1 $2\"",[\""1[89]0\"",\""1[89]00\""],\""$1\""]],\""0\"",\""0$1\"",null,null,true],\""VU\"":[\""678\"",\""[2-57-9]\\\\d{4,6}\"",[5,7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[579]\""]]]],\""WF\"":[\""681\"",\""[4-8]\\\\d{5}\"",[6],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\""]]],\""WS\"":[\""685\"",\""[2-8]\\\\d{4,6}\"",[5,6,7],[[\""(8\\\\d{2})(\\\\d{3,4})\"",\""$1 $2\"",[\""8\""]],[\""(7\\\\d)(\\\\d{5})\"",\""$1 $2\"",[\""7\""]],[\""(\\\\d{5})\"",\""$1\"",[\""[2-6]\""]]]],\""XK\"":[\""383\"",\""[23][89]\\\\d{6,7}|4[3-79]\\\\d{6}|[89]00\\\\d{5}\"",[8,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[23][89]|4[3-79]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""[89]00\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\""]],\""0\"",\""0$1\""],\""YE\"":[\""967\"",\""[1-7]\\\\d{6,8}\"",[7,8,9],[[\""([1-7])(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[1-6]|7[24-68]\""]],[\""(7\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""7[0137]\""]]],\""0\"",\""0$1\""],\""YT\"":[\""262\"",\""[268]\\\\d{8}\"",[9],[[\""([268]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[268]\""]]],\""0\"",null,null,null,null,\""269|63\""],\""ZA\"":[\""27\"",\""[1-79]\\\\d{8}|8\\\\d{4,8}\"",[5,6,7,8,9],[[\""(860)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""860\""]],[\""(\\\\d{2})(\\\\d{3,4})\"",\""$1 $2\"",[\""8[1-4]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""8[1-4]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[1-79]|8(?:[0-57]|6[1-9])\""]]],\""0\"",\""0$1\""],\""ZM\"":[\""260\"",\""[289]\\\\d{8}\"",[9],[[\""(\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",null,\""$1\""],[\""([1-8])(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[1-8]\""],\""$1\""],[\""([29]\\\\d)(\\\\d{7})\"",\""$1 $2\"",[\""[29]\""]],[\""(800)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""800\""]]],\""0\"",\""0$1\""],\""ZW\"":[\""263\"",\""2(?:[0-57-9]\\\\d{3,8}|6(?:[14]\\\\d{7}|\\\\d{4}))|[13-69]\\\\d{4,9}|7\\\\d{8}|8[06]\\\\d{5,8}\"",[5,6,7,8,9,10],[[\""([49])(\\\\d{3})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""4|9[2-9]\""]],[\""(7\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]],[\""(86\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""86[24]\""]],[\""([2356]\\\\d{2})(\\\\d{3,5})\"",\""$1 $2\"",[\""2(?:0[45]|2[278]|[49]8|[78])|3(?:[09]8|17|3[78]|7[1569]|8[37])|5[15][78]|6(?:[29]8|37|[68][78]|75)\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""2(?:1[39]|2[0157]|31|[56][14]|7[35]|84)|329\""]],[\""([1-356]\\\\d)(\\\\d{3,5})\"",\""$1 $2\"",[\""1[3-9]|2[02569]|3[0-69]|5[05689]|6\""]],[\""([235]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[23]9|54\""]],[\""([25]\\\\d{3})(\\\\d{3,5})\"",\""$1 $2\"",[\""(?:25|54)8\"",\""258[23]|5483\""]],[\""(8\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""86\""]],[\""(80\\\\d)(\\\\d{4})\"",\""$1 $2\"",[\""80\""]]],\""0\"",\""0$1\""],\""001\"":[\""979\"",\""\\\\d{9}\"",[9],[[\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\""]]]}}\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.DIGIT_PLACEHOLDER = undefined;\nexports.close_dangling_braces = close_dangling_braces;\nexports.count_occurences = count_occurences;\nexports.repeat = repeat;\n\nvar _getIterator2 = __webpack_require__(7);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _classCallCheck2 = __webpack_require__(48);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(49);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _metadata = __webpack_require__(16);\n\nvar _metadata2 = _interopRequireDefault(_metadata);\n\nvar _common = __webpack_require__(15);\n\nvar _parse = __webpack_require__(17);\n\nvar _format = __webpack_require__(47);\n\nvar _types = __webpack_require__(20);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\n// This is an enhanced port of Google Android `libphonenumber`'s\n// `asyoutypeformatter.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/blob/8d21a365061de2ba0675c878a710a7b24f74d2ae/javascript/i18n/phonenumbers/asyoutypeformatter.js\n\nvar DUMMY_DIGIT_MATCHER = new RegExp(DUMMY_DIGIT, 'g');\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \""longest phone number\"" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// The digits that have not been entered yet will be represented by a \\u2008,\n// the punctuation space.\nvar DIGIT_PLACEHOLDER = exports.DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\nvar DIGIT_PLACEHOLDER_MATCHER_GLOBAL = new RegExp(DIGIT_PLACEHOLDER, 'g');\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \""[1-4]\"".\nvar CHARACTER_CLASS_PATTERN = /\\[([^\\[\\]])*\\]/g;\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \""80[0-2]\\d{6,10}\"", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar STANDALONE_DIGIT_PATTERN = /\\d(?=[^,}][^,}])/g;\n\n// A pattern that is used to determine if a `format` is eligible\n// to be used by the \""as you type formatter\"".\n// It is eligible when the `format` contains groups of the dollar sign\n// followed by a single digit, separated by valid phone number punctuation.\n// This prevents invalid punctuation (such as the star sign in Israeli star numbers)\n// getting into the output of the \""as you type formatter\"".\nvar ELIGIBLE_FORMAT_PATTERN = new RegExp('^' + '[' + _common.VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + _common.VALID_PUNCTUATION + ']*)+' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \""leading digits pattern\"" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\n\nvar VALID_INCOMPLETE_PHONE_NUMBER = '[' + _common.PLUS_CHARS + ']{0,1}' + '[' + _common.VALID_PUNCTUATION + _parse.VALID_DIGITS + ']*';\n\nvar VALID_INCOMPLETE_PHONE_NUMBER_PATTERN = new RegExp('^' + VALID_INCOMPLETE_PHONE_NUMBER + '$', 'i');\n\nvar AsYouType = function () {\n\t/**\r\n  * @param {string} [country_code] - The default country used for parsing non-international phone numbers.\r\n  * @param {Object} metadata\r\n  */\n\tfunction AsYouType(country_code, metadata) {\n\t\t(0, _classCallCheck3.default)(this, AsYouType);\n\n\t\tthis.metadata = new _metadata2.default(metadata);\n\n\t\tif (country_code && this.metadata.hasCountry(country_code)) {\n\t\t\tthis.default_country = country_code;\n\t\t}\n\n\t\tthis.reset();\n\t}\n\n\t(0, _createClass3.default)(AsYouType, [{\n\t\tkey: 'input',\n\t\tvalue: function input(text) {\n\t\t\t// Parse input\n\n\t\t\tvar extracted_number = (0, _parse.extract_formatted_phone_number)(text);\n\n\t\t\t// Special case for a lone '+' sign\n\t\t\t// since it's not considered a possible phone number.\n\t\t\tif (!extracted_number) {\n\t\t\t\tif (text && text.indexOf('+') >= 0) {\n\t\t\t\t\textracted_number = '+';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Validate possible first part of a phone number\n\t\t\tif (!(0, _common.matches_entirely)(extracted_number, VALID_INCOMPLETE_PHONE_NUMBER_PATTERN)) {\n\t\t\t\treturn this.current_output;\n\t\t\t}\n\n\t\t\treturn this.process_input((0, _common.parse_phone_number_digits)(extracted_number));\n\t\t}\n\t}, {\n\t\tkey: 'process_input',\n\t\tvalue: function process_input(input) {\n\t\t\t// If an out of position '+' sign detected\n\t\t\t// (or a second '+' sign),\n\t\t\t// then just drop it from the input.\n\t\t\tif (input[0] === '+') {\n\t\t\t\tif (!this.parsed_input) {\n\t\t\t\t\tthis.parsed_input += '+';\n\n\t\t\t\t\t// If a default country was set\n\t\t\t\t\t// then reset it because an explicitly international\n\t\t\t\t\t// phone number is being entered\n\t\t\t\t\tthis.reset_countriness();\n\t\t\t\t}\n\n\t\t\t\tinput = input.slice(1);\n\t\t\t}\n\n\t\t\t// Raw phone number\n\t\t\tthis.parsed_input += input;\n\n\t\t\t// // Reset phone number validation state\n\t\t\t// this.valid = false\n\n\t\t\t// Add digits to the national number\n\t\t\tthis.national_number += input;\n\n\t\t\t// Try to format the parsed input\n\n\t\t\tif (this.is_international()) {\n\t\t\t\tif (!this.countryCallingCode) {\n\t\t\t\t\t// No need to format anything\n\t\t\t\t\t// if there's no national phone number.\n\t\t\t\t\t// (e.g. just the country calling code)\n\t\t\t\t\tif (!this.national_number) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If one looks at country phone codes\n\t\t\t\t\t// then he can notice that no one country phone code\n\t\t\t\t\t// is ever a (leftmost) substring of another country phone code.\n\t\t\t\t\t// So if a valid country code is extracted so far\n\t\t\t\t\t// then it means that this is the country code.\n\n\t\t\t\t\t// If no country phone code could be extracted so far,\n\t\t\t\t\t// then just return the raw phone number,\n\t\t\t\t\t// because it has no way of knowing\n\t\t\t\t\t// how to format the phone number so far.\n\t\t\t\t\tif (!this.extract_country_calling_code()) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Initialize country-specific data\n\t\t\t\t\tthis.initialize_phone_number_formats_for_this_country_calling_code();\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t}\n\t\t\t\t// `this.country` could be `undefined`,\n\t\t\t\t// for instance, when there is ambiguity\n\t\t\t\t// in a form of several different countries\n\t\t\t\t// each corresponding to the same country phone code\n\t\t\t\t// (e.g. NANPA: USA, Canada, etc),\n\t\t\t\t// and there's not enough digits entered\n\t\t\t\t// to reliably determine the country\n\t\t\t\t// the phone number belongs to.\n\t\t\t\t// Therefore, in cases of such ambiguity,\n\t\t\t\t// each time something is input,\n\t\t\t\t// try to determine the country\n\t\t\t\t// (if it's not determined yet).\n\t\t\t\telse if (!this.country) {\n\t\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Some national prefixes are substrings of other national prefixes\n\t\t\t\t// (for the same country), therefore try to extract national prefix each time\n\t\t\t\t// because a longer national prefix might be available at some point in time.\n\n\t\t\t\tvar previous_national_prefix = this.national_prefix;\n\t\t\t\tthis.national_number = this.national_prefix + this.national_number;\n\n\t\t\t\t// Possibly extract a national prefix\n\t\t\t\tthis.extract_national_prefix();\n\n\t\t\t\tif (this.national_prefix !== previous_national_prefix) {\n\t\t\t\t\t// National number has changed\n\t\t\t\t\t// (due to another national prefix been extracted)\n\t\t\t\t\t// therefore national number has changed\n\t\t\t\t\t// therefore reset all previous formatting data.\n\t\t\t\t\t// (and leading digits matching state)\n\t\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.should_format()) {\n\t\t\t\treturn this.format_as_non_formatted_number();\n\t\t\t}\n\n\t\t\t// Check the available phone number formats\n\t\t\t// based on the currently available leading digits.\n\t\t\tthis.match_formats_by_leading_digits();\n\n\t\t\t// Format the phone number (given the next digits)\n\t\t\tvar formatted_national_phone_number = this.format_national_phone_number(input);\n\n\t\t\t// If the phone number could be formatted,\n\t\t\t// then return it, possibly prepending with country phone code\n\t\t\t// (for international phone numbers only)\n\t\t\tif (formatted_national_phone_number) {\n\t\t\t\treturn this.full_phone_number(formatted_national_phone_number);\n\t\t\t}\n\n\t\t\t// If the phone number couldn't be formatted,\n\t\t\t// then just fall back to the raw phone number.\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_as_non_formatted_number',\n\t\tvalue: function format_as_non_formatted_number() {\n\t\t\tif (this.is_international() && this.countryCallingCode) {\n\t\t\t\tif (this.national_number) {\n\t\t\t\t\t// For convenience, the public `.template` property\n\t\t\t\t\t// contains the whole international number\n\t\t\t\t\t// if the phone number being input is international:\n\t\t\t\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\n\t\t\t\t\t// a spacebar and then the template for the national number digits.\n\t\t\t\t\tthis.template = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.countryCallingCode.length) + ' ' + repeat(DIGIT_PLACEHOLDER, this.national_number.length);\n\n\t\t\t\t\treturn '+' + this.countryCallingCode + ' ' + this.national_number;\n\t\t\t\t}\n\n\t\t\t\treturn '+' + this.countryCallingCode;\n\t\t\t}\n\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_national_phone_number',\n\t\tvalue: function format_national_phone_number(next_digits) {\n\t\t\t// Format the next phone number digits\n\t\t\t// using the previously chosen phone number format.\n\t\t\t//\n\t\t\t// This is done here because if `attempt_to_format_complete_phone_number`\n\t\t\t// was placed before this call then the `template`\n\t\t\t// wouldn't reflect the situation correctly (and would therefore be inconsistent)\n\t\t\t//\n\t\t\tvar national_number_formatted_with_previous_format = void 0;\n\t\t\tif (this.chosen_format) {\n\t\t\t\tnational_number_formatted_with_previous_format = this.format_next_national_number_digits(next_digits);\n\t\t\t}\n\n\t\t\t// See if the input digits can be formatted properly already. If not,\n\t\t\t// use the results from format_next_national_number_digits(), which does formatting\n\t\t\t// based on the formatting pattern chosen.\n\n\t\t\tvar formatted_number = this.attempt_to_format_complete_phone_number();\n\n\t\t\t// Just because a phone number doesn't have a suitable format\n\t\t\t// that doesn't mean that the phone is invalid\n\t\t\t// because phone number formats only format phone numbers,\n\t\t\t// they don't validate them and some (rare) phone numbers\n\t\t\t// are meant to stay non-formatted.\n\t\t\tif (formatted_number) {\n\t\t\t\t// if (this.country)\n\t\t\t\t// {\n\t\t\t\t// \tthis.valid = true\n\t\t\t\t// }\n\n\t\t\t\treturn formatted_number;\n\t\t\t}\n\n\t\t\t// For some phone number formats national prefix\n\n\t\t\t// If the previously chosen phone number format\n\t\t\t// didn't match the next (current) digit being input\n\t\t\t// (leading digits pattern didn't match).\n\t\t\tif (this.choose_another_format()) {\n\t\t\t\t// And a more appropriate phone number format\n\t\t\t\t// has been chosen for these `leading digits`,\n\t\t\t\t// then format the national phone number (so far)\n\t\t\t\t// using the newly selected phone number pattern.\n\n\t\t\t\t// Will return `undefined` if it couldn't format\n\t\t\t\t// the supplied national number\n\t\t\t\t// using the selected phone number pattern.\n\n\t\t\t\treturn this.reformat_national_number();\n\t\t\t}\n\n\t\t\t// If could format the next (current) digit\n\t\t\t// using the previously chosen phone number format\n\t\t\t// then return the formatted number so far.\n\n\t\t\t// If no new phone number format could be chosen,\n\t\t\t// and couldn't format the supplied national number\n\t\t\t// using the selected phone number pattern,\n\t\t\t// then it will return `undefined`.\n\n\t\t\treturn national_number_formatted_with_previous_format;\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset() {\n\t\t\t// Input stripped of non-phone-number characters.\n\t\t\t// Can only contain a possible leading '+' sign and digits.\n\t\t\tthis.parsed_input = '';\n\n\t\t\tthis.current_output = '';\n\n\t\t\t// This contains the national prefix that has been extracted. It contains only\n\t\t\t// digits without formatting.\n\t\t\tthis.national_prefix = '';\n\n\t\t\tthis.national_number = '';\n\n\t\t\tthis.reset_countriness();\n\n\t\t\tthis.reset_format();\n\n\t\t\t// this.valid = false\n\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'reset_country',\n\t\tvalue: function reset_country() {\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.country = this.default_country;\n\t\t\t} else {\n\t\t\t\tthis.country = undefined;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_countriness',\n\t\tvalue: function reset_countriness() {\n\t\t\tthis.reset_country();\n\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.metadata.country(this.default_country);\n\t\t\t\tthis.countryCallingCode = this.metadata.countryCallingCode();\n\n\t\t\t\tthis.initialize_phone_number_formats_for_this_country_calling_code();\n\t\t\t} else {\n\t\t\t\tthis.metadata.country(undefined);\n\t\t\t\tthis.countryCallingCode = undefined;\n\n\t\t\t\tthis.available_formats = [];\n\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_format',\n\t\tvalue: function reset_format() {\n\t\t\tthis.chosen_format = undefined;\n\t\t\tthis.template = undefined;\n\t\t\tthis.partially_populated_template = undefined;\n\t\t\tthis.last_match_position = -1;\n\t\t}\n\n\t\t// Format each digit of national phone number (so far)\n\t\t// using the newly selected phone number pattern.\n\n\t}, {\n\t\tkey: 'reformat_national_number',\n\t\tvalue: function reformat_national_number() {\n\t\t\t// Format each digit of national phone number (so far)\n\t\t\t// using the selected phone number pattern.\n\t\t\treturn this.format_next_national_number_digits(this.national_number);\n\t\t}\n\t}, {\n\t\tkey: 'initialize_phone_number_formats_for_this_country_calling_code',\n\t\tvalue: function initialize_phone_number_formats_for_this_country_calling_code() {\n\t\t\t// Get all \""eligible\"" phone number formats for this country\n\t\t\tthis.available_formats = this.metadata.formats().filter(function (format) {\n\t\t\t\treturn ELIGIBLE_FORMAT_PATTERN.test(format.internationalFormat());\n\t\t\t});\n\n\t\t\tthis.matching_formats = this.available_formats;\n\t\t}\n\t}, {\n\t\tkey: 'match_formats_by_leading_digits',\n\t\tvalue: function match_formats_by_leading_digits() {\n\t\t\tvar leading_digits = this.national_number;\n\n\t\t\t// \""leading digits\"" pattern list starts with\n\t\t\t// one of a maximum length of 3 digits,\n\t\t\t// and then with each additional digit\n\t\t\t// a more precise \""leading digits\"" pattern is specified.\n\n\t\t\tvar index_of_leading_digits_pattern = leading_digits.length - MIN_LEADING_DIGITS_LENGTH;\n\n\t\t\tif (index_of_leading_digits_pattern < 0) {\n\t\t\t\tindex_of_leading_digits_pattern = 0;\n\t\t\t}\n\n\t\t\tthis.matching_formats = this.matching_formats.filter(function (format) {\n\t\t\t\tvar leading_digits_pattern_count = format.leadingDigitsPatterns().length;\n\n\t\t\t\t// Keep everything that isn't restricted by leading digits.\n\t\t\t\tif (leading_digits_pattern_count === 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar leading_digits_pattern_index = Math.min(index_of_leading_digits_pattern, leading_digits_pattern_count - 1);\n\t\t\t\tvar leading_digits_pattern = format.leadingDigitsPatterns()[leading_digits_pattern_index];\n\n\t\t\t\t// Brackets are required for `^` to be applied to\n\t\t\t\t// all or-ed (`|`) parts, not just the first one.\n\t\t\t\treturn new RegExp('^(' + leading_digits_pattern + ')').test(leading_digits);\n\t\t\t});\n\n\t\t\t// If there was a phone number format chosen\n\t\t\t// and it no longer holds given the new leading digits then reset it.\n\t\t\t// The test for this `if` condition is marked as:\n\t\t\t// \""Reset a chosen format when it no longer holds given the new leading digits\"".\n\t\t\t// To construct a valid test case for this one can find a country\n\t\t\t// in `PhoneNumberMetadata.xml` yielding one format for 3 `<leadingDigits>`\n\t\t\t// and yielding another format for 4 `<leadingDigits>` (Australia in this case).\n\t\t\tif (this.chosen_format && this.matching_formats.indexOf(this.chosen_format) === -1) {\n\t\t\t\tthis.reset_format();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'should_format',\n\t\tvalue: function should_format() {\n\t\t\t// Start matching any formats at all when the national number\n\t\t\t// entered so far is at least 3 digits long,\n\t\t\t// otherwise format matching would give false negatives\n\t\t\t// like when the digits entered so far are `2`\n\t\t\t// and the leading digits pattern is `21` –\n\t\t\t// it's quite obvious in this case that the format could be the one\n\t\t\t// but due to the absence of further digits it would give false negative.\n\t\t\t//\n\t\t\t// Google could have provided leading digits patterns starting\n\t\t\t// with a single digit but they chose not to (for whatever reasons).\n\t\t\t//\n\t\t\treturn this.national_number >= MIN_LEADING_DIGITS_LENGTH;\n\t\t}\n\n\t\t// Check to see if there is an exact pattern match for these digits. If so, we\n\t\t// should use this instead of any other formatting template whose\n\t\t// `leadingDigitsPattern` also matches the input.\n\n\t}, {\n\t\tkey: 'attempt_to_format_complete_phone_number',\n\t\tvalue: function attempt_to_format_complete_phone_number() {\n\t\t\tvar _iteratorNormalCompletion = true;\n\t\t\tvar _didIteratorError = false;\n\t\t\tvar _iteratorError = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator = (0, _getIterator3.default)(this.matching_formats), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\t\t\tvar format = _step.value;\n\n\t\t\t\t\tvar matcher = new RegExp('^(?:' + format.pattern() + ')$');\n\n\t\t\t\t\tif (!matcher.test(this.national_number)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.is_format_applicable(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// To leave the formatter in a consistent state\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t\tvar formatted_number = (0, _format.format_national_number_using_format)(this.national_number, format, this.is_international(), this.national_prefix.length > 0, this.metadata);\n\n\t\t\t\t\t// Set `this.template` and `this.partially_populated_template`.\n\t\t\t\t\t//\n\t\t\t\t\t// `else` case doesn't ever happen\n\t\t\t\t\t// with the current metadata,\n\t\t\t\t\t// but just in case.\n\t\t\t\t\t//\n\t\t\t\t\t/* istanbul ignore else */\n\t\t\t\t\tif (this.create_formatting_template(format)) {\n\t\t\t\t\t\t// Populate `this.partially_populated_template`\n\t\t\t\t\t\tthis.reformat_national_number();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Prepend `+CountryCode` in case of an international phone number\n\t\t\t\t\t\tvar full_number = this.full_phone_number(formatted_number);\n\t\t\t\t\t\tthis.template = full_number.replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER);\n\t\t\t\t\t\tthis.partially_populated_template = full_number;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn formatted_number;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError = true;\n\t\t\t\t_iteratorError = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t\t\t_iterator.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError) {\n\t\t\t\t\t\tthrow _iteratorError;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Prepends `+CountryCode` in case of an international phone number\n\n\t}, {\n\t\tkey: 'full_phone_number',\n\t\tvalue: function full_phone_number(formatted_national_number) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn '+' + this.countryCallingCode + ' ' + formatted_national_number;\n\t\t\t}\n\n\t\t\treturn formatted_national_number;\n\t\t}\n\n\t\t// Extracts the country calling code from the beginning\n\t\t// of the entered `national_number` (so far),\n\t\t// and places the remaining input into the `national_number`.\n\n\t}, {\n\t\tkey: 'extract_country_calling_code',\n\t\tvalue: function extract_country_calling_code() {\n\t\t\tvar _parse_national_numbe = (0, _common.parse_national_number_and_country_calling_code)(this.parsed_input, this.metadata),\n\t\t\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t\t\t    number = _parse_national_numbe.number;\n\n\t\t\tif (!countryCallingCode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.countryCallingCode = countryCallingCode;\n\t\t\tthis.national_number = number;\n\n\t\t\tthis.metadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t\t\treturn this.metadata.selectedCountry() !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'extract_national_prefix',\n\t\tvalue: function extract_national_prefix() {\n\t\t\tthis.national_prefix = '';\n\n\t\t\tif (!this.metadata.selectedCountry()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only strip national prefixes for non-international phone numbers\n\t\t\t// because national prefixes can't be present in international phone numbers.\n\t\t\t// Otherwise, while forgiving, it would parse a NANPA number `+1 1877 215 5230`\n\t\t\t// first to `1877 215 5230` and then, stripping the leading `1`, to `877 215 5230`,\n\t\t\t// and then it would assume that's a valid number which it isn't.\n\t\t\t// So no forgiveness for grandmas here.\n\t\t\t// The issue asking for this fix:\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/159\n\t\t\tvar potential_national_number = (0, _parse.strip_national_prefix)(this.national_number, this.metadata);\n\n\t\t\t// We require that the NSN remaining after stripping the national prefix and\n\t\t\t// carrier code be long enough to be a possible length for the region.\n\t\t\t// Otherwise, we don't do the stripping, since the original number could be\n\t\t\t// a valid short number.\n\t\t\tif (!this.metadata.possibleLengths() || this.is_possible_number(this.national_number) && !this.is_possible_number(potential_national_number)) {\n\t\t\t\t// Verify the parsed national (significant) number for this country\n\t\t\t\tvar national_number_rule = new RegExp(this.metadata.nationalNumberPattern());\n\t\t\t\t//\n\t\t\t\t// If the original number (before stripping national prefix) was viable,\n\t\t\t\t// and the resultant number is not, then prefer the original phone number.\n\t\t\t\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t\t\t\t// a national prefix and a leading digit of a valid national phone number,\n\t\t\t\t// like `8` is the national prefix for Russia and both\n\t\t\t\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t\t\t\tif ((0, _common.matches_entirely)(this.national_number, national_number_rule) && !(0, _common.matches_entirely)(potential_national_number, national_number_rule)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.national_prefix = this.national_number.slice(0, this.national_number.length - potential_national_number.length);\n\t\t\tthis.national_number = potential_national_number;\n\n\t\t\treturn this.national_prefix;\n\t\t}\n\t}, {\n\t\tkey: 'is_possible_number',\n\t\tvalue: function is_possible_number(number) {\n\t\t\tvar validation_result = (0, _types.check_number_length_for_type)(number, undefined, this.metadata);\n\t\t\tswitch (validation_result) {\n\t\t\t\tcase 'IS_POSSIBLE':\n\t\t\t\t\treturn true;\n\t\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t\t\t// \treturn !this.is_international()\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'choose_another_format',\n\t\tvalue: function choose_another_format() {\n\t\t\t// When there are multiple available formats, the formatter uses the first\n\t\t\t// format where a formatting template could be created.\n\t\t\tvar _iteratorNormalCompletion2 = true;\n\t\t\tvar _didIteratorError2 = false;\n\t\t\tvar _iteratorError2 = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator2 = (0, _getIterator3.default)(this.matching_formats), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\t\tvar format = _step2.value;\n\n\t\t\t\t\t// If this format is currently being used\n\t\t\t\t\t// and is still possible, then stick to it.\n\t\t\t\t\tif (this.chosen_format === format) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this `format` is suitable for \""as you type\"",\n\t\t\t\t\t// then extract the template from this format\n\t\t\t\t\t// and use it to format the phone number being input.\n\n\t\t\t\t\tif (!this.is_format_applicable(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.create_formatting_template(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t\t// With a new formatting template, the matched position\n\t\t\t\t\t// using the old template needs to be reset.\n\t\t\t\t\tthis.last_match_position = -1;\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// No format matches the phone number,\n\t\t\t\t// therefore set `country` to `undefined`\n\t\t\t\t// (or to the default country).\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError2 = true;\n\t\t\t\t_iteratorError2 = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t\t_iterator2.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.reset_country();\n\n\t\t\t// No format matches the national phone number entered\n\t\t\tthis.reset_format();\n\t\t}\n\t}, {\n\t\tkey: 'is_format_applicable',\n\t\tvalue: function is_format_applicable(format) {\n\t\t\t// If national prefix is mandatory for this phone number format\n\t\t\t// and the user didn't input the national prefix,\n\t\t\t// then this phone number format isn't suitable.\n\t\t\tif (!this.is_international() && !this.national_prefix && format.nationalPrefixIsMandatoryWhenFormatting()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t}, {\n\t\tkey: 'create_formatting_template',\n\t\tvalue: function create_formatting_template(format) {\n\t\t\t// The formatter doesn't format numbers when numberPattern contains '|', e.g.\n\t\t\t// (20|3)\\d{4}. In those cases we quickly return.\n\t\t\t// (Though there's no such format in current metadata)\n\t\t\t/* istanbul ignore if */\n\t\t\tif (format.pattern().indexOf('|') >= 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get formatting template for this phone number format\n\t\t\tvar template = this.get_template_for_phone_number_format_pattern(format);\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (!template) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This one is for national number only\n\t\t\tthis.partially_populated_template = template;\n\n\t\t\t// For convenience, the public `.template` property\n\t\t\t// contains the whole international number\n\t\t\t// if the phone number being input is international:\n\t\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\n\t\t\t// a spacebar and then the template for the formatted national number.\n\t\t\tif (this.is_international()) {\n\t\t\t\tthis.template = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.countryCallingCode.length) + ' ' + template;\n\t\t\t}\n\t\t\t// For local numbers, replace national prefix\n\t\t\t// with a digit placeholder.\n\t\t\telse {\n\t\t\t\t\tthis.template = template.replace(/\\d/g, DIGIT_PLACEHOLDER);\n\t\t\t\t}\n\n\t\t\t// This one is for the full phone number\n\t\t\treturn this.template;\n\t\t}\n\n\t\t// Generates formatting template for a phone number format\n\n\t}, {\n\t\tkey: 'get_template_for_phone_number_format_pattern',\n\t\tvalue: function get_template_for_phone_number_format_pattern(format) {\n\t\t\t// A very smart trick by the guys at Google\n\t\t\tvar number_pattern = format.pattern()\n\t\t\t// Replace anything in the form of [..] with \\d\n\t\t\t.replace(CHARACTER_CLASS_PATTERN, '\\\\d')\n\t\t\t// Replace any standalone digit (not the one in `{}`) with \\d\n\t\t\t.replace(STANDALONE_DIGIT_PATTERN, '\\\\d');\n\n\t\t\t// This match will always succeed,\n\t\t\t// because the \""longest dummy phone number\""\n\t\t\t// has enough length to accomodate any possible\n\t\t\t// national phone number format pattern.\n\t\t\tvar dummy_phone_number_matching_format_pattern = LONGEST_DUMMY_PHONE_NUMBER.match(number_pattern)[0];\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (this.national_number.length > dummy_phone_number_matching_format_pattern.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Prepare the phone number format\n\t\t\tvar number_format = this.get_format_format(format);\n\n\t\t\t// Get a formatting template which can be used to efficiently format\n\t\t\t// a partial number where digits are added one by one.\n\n\t\t\t// Below `strict_pattern` is used for the\n\t\t\t// regular expression (with `^` and `$`).\n\t\t\t// This wasn't originally in Google's `libphonenumber`\n\t\t\t// and I guess they don't really need it\n\t\t\t// because they're not using \""templates\"" to format phone numbers\n\t\t\t// but I added `strict_pattern` after encountering\n\t\t\t// South Korean phone number formatting bug.\n\t\t\t//\n\t\t\t// Non-strict regular expression bug demonstration:\n\t\t\t//\n\t\t\t// this.national_number : `111111111` (9 digits)\n\t\t\t//\n\t\t\t// number_pattern : (\\d{2})(\\d{3,4})(\\d{4})\n\t\t\t// number_format : `$1 $2 $3`\n\t\t\t// dummy_phone_number_matching_format_pattern : `9999999999` (10 digits)\n\t\t\t//\n\t\t\t// '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \""99 9999 9999\""\n\t\t\t//\n\t\t\t// template : xx xxxx xxxx\n\t\t\t//\n\t\t\t// But the correct template in this case is `xx xxx xxxx`.\n\t\t\t// The template was generated incorrectly because of the\n\t\t\t// `{3,4}` variability in the `number_pattern`.\n\t\t\t//\n\t\t\t// The fix is, if `this.national_number` has already sufficient length\n\t\t\t// to satisfy the `number_pattern` completely then `this.national_number` is used\n\t\t\t// instead of `dummy_phone_number_matching_format_pattern`.\n\n\t\t\tvar strict_pattern = new RegExp('^' + number_pattern + '$');\n\t\t\tvar national_number_dummy_digits = this.national_number.replace(/\\d/g, DUMMY_DIGIT);\n\n\t\t\t// If `this.national_number` has already sufficient length\n\t\t\t// to satisfy the `number_pattern` completely then use it\n\t\t\t// instead of `dummy_phone_number_matching_format_pattern`.\n\t\t\tif (strict_pattern.test(national_number_dummy_digits)) {\n\t\t\t\tdummy_phone_number_matching_format_pattern = national_number_dummy_digits;\n\t\t\t}\n\n\t\t\t// Generate formatting template for this phone number format\n\t\t\treturn dummy_phone_number_matching_format_pattern\n\t\t\t// Format the dummy phone number according to the format\n\t\t\t.replace(new RegExp(number_pattern), number_format)\n\t\t\t// Replace each dummy digit with a DIGIT_PLACEHOLDER\n\t\t\t.replace(DUMMY_DIGIT_MATCHER, DIGIT_PLACEHOLDER);\n\t\t}\n\t}, {\n\t\tkey: 'format_next_national_number_digits',\n\t\tvalue: function format_next_national_number_digits(digits) {\n\t\t\tvar _iteratorNormalCompletion3 = true;\n\t\t\tvar _didIteratorError3 = false;\n\t\t\tvar _iteratorError3 = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator3 = (0, _getIterator3.default)(digits), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\t\tvar digit = _step3.value;\n\n\t\t\t\t\t// If there is room for more digits in current `template`,\n\t\t\t\t\t// then set the next digit in the `template`,\n\t\t\t\t\t// and return the formatted digits so far.\n\n\t\t\t\t\t// If more digits are entered than the current format could handle\n\t\t\t\t\tif (this.partially_populated_template.slice(this.last_match_position + 1).search(DIGIT_PLACEHOLDER_MATCHER) === -1) {\n\t\t\t\t\t\t// Reset the current format,\n\t\t\t\t\t\t// so that the new format will be chosen\n\t\t\t\t\t\t// in a subsequent `this.choose_another_format()` call\n\t\t\t\t\t\t// later in code.\n\t\t\t\t\t\tthis.chosen_format = undefined;\n\t\t\t\t\t\tthis.template = undefined;\n\t\t\t\t\t\tthis.partially_populated_template = undefined;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.last_match_position = this.partially_populated_template.search(DIGIT_PLACEHOLDER_MATCHER);\n\t\t\t\t\tthis.partially_populated_template = this.partially_populated_template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n\t\t\t\t}\n\n\t\t\t\t// Return the formatted phone number so far\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError3 = true;\n\t\t\t\t_iteratorError3 = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t\t_iterator3.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn close_dangling_braces(this.partially_populated_template, this.last_match_position + 1).replace(DIGIT_PLACEHOLDER_MATCHER_GLOBAL, ' ');\n\t\t}\n\t}, {\n\t\tkey: 'is_international',\n\t\tvalue: function is_international() {\n\t\t\treturn this.parsed_input && this.parsed_input[0] === '+';\n\t\t}\n\t}, {\n\t\tkey: 'get_format_format',\n\t\tvalue: function get_format_format(format) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn (0, _format.local_to_international_style)(format.internationalFormat());\n\t\t\t}\n\n\t\t\t// If national prefix formatting rule is set\n\t\t\t// for this phone number format\n\t\t\tif (format.nationalPrefixFormattingRule()) {\n\t\t\t\t// If the user did input the national prefix\n\t\t\t\t// (or if the national prefix formatting rule does not require national prefix)\n\t\t\t\t// then maybe make it part of the phone number template\n\t\t\t\tif (this.national_prefix || !format.usesNationalPrefix()) {\n\t\t\t\t\t// Make the national prefix part of the phone number template\n\t\t\t\t\treturn format.format().replace(_format.FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn format.format();\n\t\t}\n\n\t\t// Determines the country of the phone number\n\t\t// entered so far based on the country phone code\n\t\t// and the national phone number.\n\n\t}, {\n\t\tkey: 'determine_the_country',\n\t\tvalue: function determine_the_country() {\n\t\t\tthis.country = (0, _parse.find_country_code)(this.countryCallingCode, this.national_number, this.metadata);\n\t\t}\n\t}, {\n\t\tkey: 'getNationalNumber',\n\t\tvalue: function getNationalNumber() {\n\t\t\treturn this.national_number;\n\t\t}\n\t}]);\n\n\treturn AsYouType;\n}();\n\nexports.default = AsYouType;\nfunction close_dangling_braces(template, cut_before) {\n\tvar retained_template = template.slice(0, cut_before);\n\n\tvar opening_braces = count_occurences('(', retained_template);\n\tvar closing_braces = count_occurences(')', retained_template);\n\n\tvar dangling_braces = opening_braces - closing_braces;\n\n\twhile (dangling_braces > 0 && cut_before < template.length) {\n\t\tif (template[cut_before] === ')') {\n\t\t\tdangling_braces--;\n\t\t}\n\t\tcut_before++;\n\t}\n\n\treturn template.slice(0, cut_before);\n}\n\n// Counts all occurences of a symbol in a string\nfunction count_occurences(symbol, string) {\n\tvar count = 0;\n\n\tvar _iteratorNormalCompletion4 = true;\n\tvar _didIteratorError4 = false;\n\tvar _iteratorError4 = undefined;\n\n\ttry {\n\t\tfor (var _iterator4 = (0, _getIterator3.default)(string), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n\t\t\tvar character = _step4.value;\n\n\t\t\tif (character === symbol) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError4 = true;\n\t\t_iteratorError4 = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion4 && _iterator4.return) {\n\t\t\t\t_iterator4.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError4) {\n\t\t\t\tthrow _iteratorError4;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nfunction repeat(string, times) {\n\tif (times < 1) {\n\t\treturn '';\n\t}\n\n\tvar result = '';\n\n\twhile (times > 1) {\n\t\tif (times & 1) {\n\t\t\tresult += string;\n\t\t}\n\n\t\ttimes >>= 1;\n\t\tstring += string;\n\t}\n\n\treturn result + string;\n}\n//# sourceMappingURL=AsYouType.js.map\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.default = is_valid;\n\nvar _parse = __webpack_require__(17);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nvar _types = __webpack_require__(20);\n\nvar _types2 = _interopRequireDefault(_types);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Checks if a given phone number is valid\n//\n// Example use cases:\n//\n// ```js\n// is_valid('8005553535', 'RU')\n// is_valid('8005553535', 'RU', metadata)\n// is_valid({ phone: '8005553535', country: 'RU' })\n// is_valid({ phone: '8005553535', country: 'RU' }, metadata)\n// is_valid('+78005553535')\n// is_valid('+78005553535', metadata)\n// ```\n//\nfunction is_valid(arg_1, arg_2, arg_3) {\n\tvar _sort_out_arguments = (0, _types.sort_out_arguments)(arg_1, arg_2, arg_3),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (!input) {\n\t\treturn false;\n\t}\n\n\tif (!input.country) {\n\t\treturn false;\n\t}\n\n\tif (!metadata.hasCountry(input.country)) {\n\t\tthrow new Error('Unknown country: ' + input.country);\n\t}\n\n\tmetadata.country(input.country);\n\n\tif (metadata.hasTypes()) {\n\t\treturn (0, _types2.default)(input, metadata.metadata) !== undefined;\n\t}\n\n\treturn true;\n}\n//# sourceMappingURL=validate.js.map\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(83), __esModule: true };\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.DIGIT_PLACEHOLDER = exports.AsYouTypeCustom = exports.getNumberTypeCustom = exports.isValidNumberCustom = exports.formatCustom = exports.DIGITS = exports.parseCustom = exports.formatRFC3966 = exports.parseRFC3966 = exports.Metadata = undefined;\n\nvar _create = __webpack_require__(69);\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _metadata = __webpack_require__(16);\n\nObject.defineProperty(exports, 'Metadata', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_metadata).default;\n\t}\n});\n\nvar _RFC = __webpack_require__(30);\n\nObject.defineProperty(exports, 'parseRFC3966', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _RFC.parseRFC3966;\n\t}\n});\nObject.defineProperty(exports, 'formatRFC3966', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _RFC.formatRFC3966;\n\t}\n});\nexports.parse = parse;\nexports.format = format;\nexports.getNumberType = getNumberType;\nexports.isValidNumber = isValidNumber;\nexports.AsYouType = AsYouType;\n\nvar _parse = __webpack_require__(17);\n\nObject.defineProperty(exports, 'parseCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_parse).default;\n\t}\n});\n\nvar _common = __webpack_require__(15);\n\nObject.defineProperty(exports, 'DIGITS', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _common.DIGIT_MAPPINGS;\n\t}\n});\n\nvar _format = __webpack_require__(47);\n\nObject.defineProperty(exports, 'formatCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_format).default;\n\t}\n});\n\nvar _validate = __webpack_require__(68);\n\nObject.defineProperty(exports, 'isValidNumberCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_validate).default;\n\t}\n});\n\nvar _types = __webpack_require__(20);\n\nObject.defineProperty(exports, 'getNumberTypeCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_types).default;\n\t}\n});\n\nvar _AsYouType = __webpack_require__(67);\n\nObject.defineProperty(exports, 'AsYouTypeCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_AsYouType).default;\n\t}\n});\nObject.defineProperty(exports, 'DIGIT_PLACEHOLDER', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _AsYouType.DIGIT_PLACEHOLDER;\n\t}\n});\nexports.getCountryCallingCode = getCountryCallingCode;\nexports.getCountryCallingCodeCustom = getCountryCallingCodeCustom;\nexports.getPhoneCode = getPhoneCode;\nexports.getPhoneCodeCustom = getPhoneCodeCustom;\n\nvar _metadataMin = __webpack_require__(66);\n\nvar _metadataMin2 = _interopRequireDefault(_metadataMin);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nvar _types2 = _interopRequireDefault(_types);\n\nvar _format2 = _interopRequireDefault(_format);\n\nvar _validate2 = _interopRequireDefault(_validate);\n\nvar _AsYouType2 = _interopRequireDefault(_AsYouType);\n\nvar _metadata2 = _interopRequireDefault(_metadata);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse() {\n\tvar parameters = Array.prototype.slice.call(arguments);\n\tparameters.push(_metadataMin2.default);\n\treturn _parse2.default.apply(this, parameters);\n}\n\nfunction format() {\n\tvar parameters = Array.prototype.slice.call(arguments);\n\tparameters.push(_metadataMin2.default);\n\treturn _format2.default.apply(this, parameters);\n}\n\nfunction getNumberType() {\n\tvar parameters = Array.prototype.slice.call(arguments);\n\tparameters.push(_metadataMin2.default);\n\treturn _types2.default.apply(this, parameters);\n}\n\nfunction isValidNumber() {\n\tvar parameters = Array.prototype.slice.call(arguments);\n\tparameters.push(_metadataMin2.default);\n\treturn _validate2.default.apply(this, parameters);\n}\n\nfunction AsYouType(country) {\n\t_AsYouType2.default.call(this, country, _metadataMin2.default);\n}\n\nAsYouType.prototype = (0, _create2.default)(_AsYouType2.default.prototype, {});\nAsYouType.prototype.constructor = AsYouType;\n\nfunction getCountryCallingCode(country) {\n\treturn getCountryCallingCodeCustom(country, _metadataMin2.default);\n}\n\nfunction getCountryCallingCodeCustom(country, metadata) {\n\tmetadata = new _metadata2.default(metadata);\n\n\tif (!metadata.hasCountry(country)) {\n\t\tthrow new Error('Unknown country: ' + country);\n\t}\n\n\treturn metadata.country(country).countryCallingCode();\n}\n\n// `getPhoneCode` name is deprecated, use `getCountryCallingCode` instead.\nfunction getPhoneCode(country) {\n\treturn getCountryCallingCode(country);\n}\n\n// `getPhoneCodeCustom` name is deprecated, use `getCountryCallingCodeCustom` instead.\nfunction getPhoneCodeCustom(country, metadata) {\n\treturn getCountryCallingCodeCustom(country, metadata);\n}\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(79), __esModule: true };\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(81), __esModule: true };\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(82), __esModule: true };\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(84), __esModule: true };\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(85), __esModule: true };\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(86), __esModule: true };\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(87), __esModule: true };\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nexports.__esModule = true;\n\nvar _isIterable2 = __webpack_require__(72);\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = __webpack_require__(7);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\""return\""]) _i[\""return\""]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if ((0, _isIterable3.default)(Object(arr))) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\""Invalid attempt to destructure non-iterable instance\"");\n    }\n  };\n}();\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(19);\n__webpack_require__(114);\nmodule.exports = __webpack_require__(1).Array.from;\n\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(29);\n__webpack_require__(19);\nmodule.exports = __webpack_require__(112);\n\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(29);\n__webpack_require__(19);\nmodule.exports = __webpack_require__(113);\n\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(116);\nmodule.exports = __webpack_require__(1).Object.assign;\n\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(117);\nvar $Object = __webpack_require__(1).Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(118);\nvar $Object = __webpack_require__(1).Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(65);\n__webpack_require__(19);\n__webpack_require__(29);\n__webpack_require__(119);\n__webpack_require__(123);\n__webpack_require__(122);\n__webpack_require__(121);\nmodule.exports = __webpack_require__(1).Set;\n\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(120);\n__webpack_require__(65);\n__webpack_require__(124);\n__webpack_require__(125);\nmodule.exports = __webpack_require__(1).Symbol;\n\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(19);\n__webpack_require__(29);\nmodule.exports = __webpack_require__(45).f('iterator');\n\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports) {\n\nmodule.exports = function () { /* empty */ };\n\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar forOf = __webpack_require__(21);\n\nmodule.exports = function (iter, ITERATOR) {\n  var result = [];\n  forOf(iter, false, result.push, result, ITERATOR);\n  return result;\n};\n\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(14);\nvar toLength = __webpack_require__(26);\nvar toAbsoluteIndex = __webpack_require__(111);\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(11);\nvar IObject = __webpack_require__(35);\nvar toObject = __webpack_require__(27);\nvar toLength = __webpack_require__(26);\nvar asc = __webpack_require__(93);\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(10);\nvar isArray = __webpack_require__(57);\nvar SPECIES = __webpack_require__(0)('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(92);\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar dP = __webpack_require__(2).f;\nvar create = __webpack_require__(22);\nvar redefineAll = __webpack_require__(62);\nvar ctx = __webpack_require__(11);\nvar anInstance = __webpack_require__(53);\nvar forOf = __webpack_require__(21);\nvar $iterDefine = __webpack_require__(36);\nvar step = __webpack_require__(59);\nvar setSpecies = __webpack_require__(109);\nvar DESCRIPTORS = __webpack_require__(3);\nvar fastKey = __webpack_require__(38).fastKey;\nvar validate = __webpack_require__(64);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(31);\nvar from = __webpack_require__(89);\nmodule.exports = function (NAME) {\n  return function toJSON() {\n    if (classof(this) != NAME) throw TypeError(NAME + \""#toJSON isn't generic\"");\n    return from(this);\n  };\n};\n\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar global = __webpack_require__(5);\nvar $export = __webpack_require__(4);\nvar meta = __webpack_require__(38);\nvar fails = __webpack_require__(12);\nvar hide = __webpack_require__(6);\nvar redefineAll = __webpack_require__(62);\nvar forOf = __webpack_require__(21);\nvar anInstance = __webpack_require__(53);\nvar isObject = __webpack_require__(10);\nvar setToStringTag = __webpack_require__(25);\nvar dP = __webpack_require__(2).f;\nvar each = __webpack_require__(91)(0);\nvar DESCRIPTORS = __webpack_require__(3);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    C = wrapper(function (target, iterable) {\n      anInstance(target, C, NAME, '_c');\n      target._c = new Base();\n      if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);\n    });\n    each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {\n      var IS_ADDER = KEY == 'add' || KEY == 'set';\n      if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {\n        anInstance(this, C, KEY);\n        if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n        var result = this._c[KEY](a === 0 ? 0 : a, b);\n        return IS_ADDER ? this : result;\n      });\n    });\n    IS_WEAK || dP(C.prototype, 'size', {\n      get: function () {\n        return this._c.size;\n      }\n    });\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F, O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar $defineProperty = __webpack_require__(2);\nvar createDesc = __webpack_require__(18);\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(23);\nvar gOPS = __webpack_require__(39);\nvar pIE = __webpack_require__(24);\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar document = __webpack_require__(5).document;\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar create = __webpack_require__(22);\nvar descriptor = __webpack_require__(18);\nvar setToStringTag = __webpack_require__(25);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(6)(IteratorPrototype, __webpack_require__(0)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ITERATOR = __webpack_require__(0)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(23);\nvar gOPS = __webpack_require__(39);\nvar pIE = __webpack_require__(24);\nvar toObject = __webpack_require__(27);\nvar IObject = __webpack_require__(35);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(12)(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(2);\nvar anObject = __webpack_require__(8);\nvar getKeys = __webpack_require__(23);\n\nmodule.exports = __webpack_require__(3) ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pIE = __webpack_require__(24);\nvar createDesc = __webpack_require__(18);\nvar toIObject = __webpack_require__(14);\nvar toPrimitive = __webpack_require__(43);\nvar has = __webpack_require__(9);\nvar IE8_DOM_DEFINE = __webpack_require__(55);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(3) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(14);\nvar gOPN = __webpack_require__(60).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(9);\nvar toObject = __webpack_require__(27);\nvar IE_PROTO = __webpack_require__(40)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(4);\nvar aFunction = __webpack_require__(52);\nvar ctx = __webpack_require__(11);\nvar forOf = __webpack_require__(21);\n\nmodule.exports = function (COLLECTION) {\n  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n    var mapFn = arguments[1];\n    var mapping, A, n, cb;\n    aFunction(this);\n    mapping = mapFn !== undefined;\n    if (mapping) aFunction(mapFn);\n    if (source == undefined) return new this();\n    A = [];\n    if (mapping) {\n      n = 0;\n      cb = ctx(mapFn, arguments[2], 2);\n      forOf(source, false, function (nextItem) {\n        A.push(cb(nextItem, n++));\n      });\n    } else {\n      forOf(source, false, A.push, A);\n    }\n    return new this(A);\n  } });\n};\n\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(4);\n\nmodule.exports = function (COLLECTION) {\n  $export($export.S, COLLECTION, { of: function of() {\n    var length = arguments.length;\n    var A = Array(length);\n    while (length--) A[length] = arguments[length];\n    return new this(A);\n  } });\n};\n\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar global = __webpack_require__(5);\nvar core = __webpack_require__(1);\nvar dP = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(3);\nvar SPECIES = __webpack_require__(0)('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(42);\nvar defined = __webpack_require__(33);\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(42);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(8);\nvar get = __webpack_require__(46);\nmodule.exports = __webpack_require__(1).getIterator = function (it) {\n  var iterFn = get(it);\n  if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(31);\nvar ITERATOR = __webpack_require__(0)('iterator');\nvar Iterators = __webpack_require__(13);\nmodule.exports = __webpack_require__(1).isIterable = function (it) {\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    // eslint-disable-next-line no-prototype-builtins\n    || Iterators.hasOwnProperty(classof(O));\n};\n\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar ctx = __webpack_require__(11);\nvar $export = __webpack_require__(4);\nvar toObject = __webpack_require__(27);\nvar call = __webpack_require__(58);\nvar isArrayIter = __webpack_require__(56);\nvar toLength = __webpack_require__(26);\nvar createProperty = __webpack_require__(97);\nvar getIterFn = __webpack_require__(46);\n\n$export($export.S + $export.F * !__webpack_require__(101)(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar addToUnscopables = __webpack_require__(88);\nvar step = __webpack_require__(59);\nvar Iterators = __webpack_require__(13);\nvar toIObject = __webpack_require__(14);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(36)(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(4);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(102) });\n\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(4);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(22) });\n\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(4);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(3), 'Object', { defineProperty: __webpack_require__(2).f });\n\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar strong = __webpack_require__(94);\nvar validate = __webpack_require__(64);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(96)(SET, function (get) {\n  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value) {\n    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n  }\n}, strong);\n\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(5);\nvar has = __webpack_require__(9);\nvar DESCRIPTORS = __webpack_require__(3);\nvar $export = __webpack_require__(4);\nvar redefine = __webpack_require__(63);\nvar META = __webpack_require__(38).KEY;\nvar $fails = __webpack_require__(12);\nvar shared = __webpack_require__(41);\nvar setToStringTag = __webpack_require__(25);\nvar uid = __webpack_require__(28);\nvar wks = __webpack_require__(0);\nvar wksExt = __webpack_require__(45);\nvar wksDefine = __webpack_require__(44);\nvar enumKeys = __webpack_require__(98);\nvar isArray = __webpack_require__(57);\nvar anObject = __webpack_require__(8);\nvar toIObject = __webpack_require__(14);\nvar toPrimitive = __webpack_require__(43);\nvar createDesc = __webpack_require__(18);\nvar _create = __webpack_require__(22);\nvar gOPNExt = __webpack_require__(105);\nvar $GOPD = __webpack_require__(104);\nvar $DP = __webpack_require__(2);\nvar $keys = __webpack_require__(23);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  __webpack_require__(60).f = gOPNExt.f = $getOwnPropertyNames;\n  __webpack_require__(24).f = $propertyIsEnumerable;\n  __webpack_require__(39).f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !__webpack_require__(37)) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    if (it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    replacer = args[1];\n    if (typeof replacer == 'function') $replacer = replacer;\n    if ($replacer || !isArray(replacer)) replacer = function (key, value) {\n      if ($replacer) value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(6)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(107)('Set');\n\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(108)('Set');\n\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(4);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(95)('Set') });\n\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(44)('asyncIterator');\n\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(44)('observable');\n\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports) {\n\nmodule.exports = function cmp (a, b) {\n    var pa = a.split('.');\n    var pb = b.split('.');\n    for (var i = 0; i < 3; i++) {\n        var na = Number(pa[i]);\n        var nb = Number(pb[i]);\n        if (na > nb) return 1;\n        if (nb > na) return -1;\n        if (!isNaN(na) && isNaN(nb)) return 1;\n        if (isNaN(na) && !isNaN(nb)) return -1;\n    }\n    return 0;\n};\n\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// libphonenumber-js.min.js"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 70);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 51d08c099dad495c6072"",""var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks.js\n// module id = 0\n// module chunks = 0"",""var core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_core.js\n// module id = 1\n// module chunks = 0"",""var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-dp.js\n// module id = 2\n// module chunks = 0"",""// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_descriptors.js\n// module id = 3\n// module chunks = 0"",""var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && key in exports) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_export.js\n// module id = 4\n// module chunks = 0"",""// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_global.js\n// module id = 5\n// module chunks = 0"",""var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_hide.js\n// module id = 6\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/get-iterator\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/get-iterator.js\n// module id = 7\n// module chunks = 0"",""var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_an-object.js\n// module id = 8\n// module chunks = 0"",""var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_has.js\n// module id = 9\n// module chunks = 0"",""module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_is-object.js\n// module id = 10\n// module chunks = 0"",""// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_ctx.js\n// module id = 11\n// module chunks = 0"",""module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_fails.js\n// module id = 12\n// module chunks = 0"",""module.exports = {};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iterators.js\n// module id = 13\n// module chunks = 0"",""// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-iobject.js\n// module id = 14\n// module chunks = 0"",""import _getIterator from 'babel-runtime/core-js/get-iterator';\n// `DASHES` will be right after the opening square bracket of the \""character class\""\nvar DASHES = '-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D';\nvar SLASHES = '\\uFF0F/';\nvar DOTS = '\\uFF0E.';\nvar WHITESPACE = ' \\xA0\\xAD\\u200B\\u2060\\u3000';\nvar BRACKETS = '()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]';\nvar TILDES = '~\\u2053\\u223C\\uFF5E';\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = '' + DASHES + SLASHES + DOTS + WHITESPACE + BRACKETS + TILDES;\n\nexport var PLUS_CHARS = '+\\uFF0B';\nvar LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+');\n\n// The maximum length of the country calling code.\nvar MAX_LENGTH_COUNTRY_CODE = 3;\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGIT_MAPPINGS = {\n\t'0': '0',\n\t'1': '1',\n\t'2': '2',\n\t'3': '3',\n\t'4': '4',\n\t'5': '5',\n\t'6': '6',\n\t'7': '7',\n\t'8': '8',\n\t'9': '9',\n\t'\\uFF10': '0', // Fullwidth digit 0\n\t'\\uFF11': '1', // Fullwidth digit 1\n\t'\\uFF12': '2', // Fullwidth digit 2\n\t'\\uFF13': '3', // Fullwidth digit 3\n\t'\\uFF14': '4', // Fullwidth digit 4\n\t'\\uFF15': '5', // Fullwidth digit 5\n\t'\\uFF16': '6', // Fullwidth digit 6\n\t'\\uFF17': '7', // Fullwidth digit 7\n\t'\\uFF18': '8', // Fullwidth digit 8\n\t'\\uFF19': '9', // Fullwidth digit 9\n\t'\\u0660': '0', // Arabic-indic digit 0\n\t'\\u0661': '1', // Arabic-indic digit 1\n\t'\\u0662': '2', // Arabic-indic digit 2\n\t'\\u0663': '3', // Arabic-indic digit 3\n\t'\\u0664': '4', // Arabic-indic digit 4\n\t'\\u0665': '5', // Arabic-indic digit 5\n\t'\\u0666': '6', // Arabic-indic digit 6\n\t'\\u0667': '7', // Arabic-indic digit 7\n\t'\\u0668': '8', // Arabic-indic digit 8\n\t'\\u0669': '9', // Arabic-indic digit 9\n\t'\\u06F0': '0', // Eastern-Arabic digit 0\n\t'\\u06F1': '1', // Eastern-Arabic digit 1\n\t'\\u06F2': '2', // Eastern-Arabic digit 2\n\t'\\u06F3': '3', // Eastern-Arabic digit 3\n\t'\\u06F4': '4', // Eastern-Arabic digit 4\n\t'\\u06F5': '5', // Eastern-Arabic digit 5\n\t'\\u06F6': '6', // Eastern-Arabic digit 6\n\t'\\u06F7': '7', // Eastern-Arabic digit 7\n\t'\\u06F8': '8', // Eastern-Arabic digit 8\n\t'\\u06F9': '9' // Eastern-Arabic digit 9\n\n\n\t/**\r\n  * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n  * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n  *\r\n  * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n  *\r\n  * @param  {string} number\r\n  * @return {string}\r\n  */\n};export function parse_phone_number_digits(number) {\n\treturn (LEADING_PLUS_CHARS_PATTERN.test(number) ? '+' : '') + drop_and_substitute_characters(number, DIGIT_MAPPINGS);\n}\n\n// Parses a formatted phone number\n// and returns `{ country_calling_code, number }`\n// where `number` is the national (significant) phone number.\n//\n// (aka `maybeExtractCountryPhoneCode`)\n//\nexport function parse_national_number_and_country_calling_code(number, metadata) {\n\tnumber = parse_phone_number_digits(number);\n\n\tif (!number) {\n\t\treturn {};\n\t}\n\n\t// If this is not an international phone number,\n\t// then don't extract country phone code.\n\tif (number[0] !== '+') {\n\t\treturn { number: number };\n\t}\n\n\t// Fast abortion: country codes do not begin with a '0'\n\tif (number[1] === '0') {\n\t\treturn {};\n\t}\n\n\t// The thing with country phone codes\n\t// is that they are orthogonal to each other\n\t// i.e. there's no such country phone code A\n\t// for which country phone code B exists\n\t// where B starts with A.\n\t// Therefore, while scanning digits,\n\t// if a valid country code is found,\n\t// that means that it is the country code.\n\t//\n\tvar i = 2;\n\twhile (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n\t\tvar countryCallingCode = number.slice(1, i);\n\n\t\tif (metadata.countryCallingCodes()[countryCallingCode]) {\n\t\t\treturn {\n\t\t\t\tcountryCallingCode: countryCallingCode,\n\t\t\t\tnumber: number.slice(i)\n\t\t\t};\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn {};\n}\n\n// Checks whether the entire input sequence can be matched\n// against the regular expression.\nexport function matches_entirely() {\n\tvar text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar regular_expression = arguments[1];\n\n\tif (typeof regular_expression === 'string') {\n\t\tregular_expression = '^(?:' + regular_expression + ')$';\n\t}\n\n\tvar matched_groups = text.match(regular_expression);\n\treturn matched_groups !== null && matched_groups[0].length === text.length;\n}\n\n// For any character not being part of `replacements`\n// it is removed from the phone number.\nfunction drop_and_substitute_characters(text, replacements) {\n\tvar replaced = '';\n\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = _getIterator(text), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar character = _step.value;\n\n\t\t\tvar replacement = replacements[character.toUpperCase()];\n\n\t\t\tif (replacement) {\n\t\t\t\treplaced += replacement;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn replaced;\n}\n//# sourceMappingURL=common.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/common.js"",""import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport compare from 'semver-compare';\n\n// Added \""possibleLengths\"" and renamed\n// \""country_phone_code_to_countries\"" to \""country_calling_codes\"".\nvar V2 = '1.0.18';\n\nvar Metadata = function () {\n\tfunction Metadata(metadata) {\n\t\t_classCallCheck(this, Metadata);\n\n\t\t// Metadata is required.\n\t\tif (!metadata || !metadata.countries) {\n\t\t\tthrow new Error('Metadata is required');\n\t\t}\n\n\t\tthis.metadata = metadata;\n\n\t\tthis.v1 = !metadata.version;\n\t\tthis.v2 = metadata.version; // && compare(version, V3) === -1\n\t}\n\n\t_createClass(Metadata, [{\n\t\tkey: 'hasCountry',\n\t\tvalue: function hasCountry(country) {\n\t\t\treturn this.metadata.countries[country] !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'country',\n\t\tvalue: function country(_country) {\n\t\t\tif (!_country) {\n\t\t\t\tthis._country = undefined;\n\t\t\t\tthis.country_metadata = undefined;\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!this.hasCountry(_country)) {\n\t\t\t\tthrow new Error('Unknown country: ' + _country);\n\t\t\t}\n\n\t\t\tthis._country = _country;\n\t\t\tthis.country_metadata = this.metadata.countries[_country];\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'countryCallingCode',\n\t\tvalue: function countryCallingCode() {\n\t\t\treturn this.country_metadata[0];\n\t\t}\n\t}, {\n\t\tkey: 'nationalNumberPattern',\n\t\tvalue: function nationalNumberPattern() {\n\t\t\treturn this.country_metadata[1];\n\t\t}\n\t}, {\n\t\tkey: 'possibleLengths',\n\t\tvalue: function possibleLengths() {\n\t\t\tif (this.v1) return;\n\t\t\treturn this.country_metadata[2];\n\t\t}\n\t}, {\n\t\tkey: 'formats',\n\t\tvalue: function formats() {\n\t\t\tvar _this = this;\n\n\t\t\tvar formats = this.country_metadata[this.v1 ? 2 : 3] || [];\n\t\t\treturn formats.map(function (_) {\n\t\t\t\treturn new Format(_, _this);\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefix',\n\t\tvalue: function nationalPrefix() {\n\t\t\treturn this.country_metadata[this.v1 ? 3 : 4];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixFormattingRule',\n\t\tvalue: function nationalPrefixFormattingRule() {\n\t\t\treturn this.country_metadata[this.v1 ? 4 : 5];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixForParsing',\n\t\tvalue: function nationalPrefixForParsing() {\n\t\t\t// If `national_prefix_for_parsing` is not set explicitly,\n\t\t\t// then infer it from `national_prefix` (if any)\n\t\t\treturn this.country_metadata[this.v1 ? 5 : 6] || this.nationalPrefix();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixTransformRule',\n\t\tvalue: function nationalPrefixTransformRule() {\n\t\t\treturn this.country_metadata[this.v1 ? 6 : 7];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsOptionalWhenFormatting',\n\t\tvalue: function nationalPrefixIsOptionalWhenFormatting() {\n\t\t\treturn this.country_metadata[this.v1 ? 7 : 8];\n\t\t}\n\t}, {\n\t\tkey: 'leadingDigits',\n\t\tvalue: function leadingDigits() {\n\t\t\treturn this.country_metadata[this.v1 ? 8 : 9];\n\t\t}\n\t}, {\n\t\tkey: 'types',\n\t\tvalue: function types() {\n\t\t\treturn this.country_metadata[this.v1 ? 9 : 10];\n\t\t}\n\t}, {\n\t\tkey: 'hasTypes',\n\t\tvalue: function hasTypes() {\n\t\t\treturn this.types() !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'type',\n\t\tvalue: function type(_type) {\n\t\t\tif (this.hasTypes() && getType(this.types(), _type)) {\n\t\t\t\treturn new Type(getType(this.types(), _type), this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'countryCallingCodes',\n\t\tvalue: function countryCallingCodes() {\n\t\t\tif (this.v1) return this.metadata.country_phone_code_to_countries;\n\t\t\treturn this.metadata.country_calling_codes;\n\t\t}\n\n\t\t// Formatting information for regions which share\n\t\t// a country calling code is contained by only one region\n\t\t// for performance reasons. For example, for NANPA region\n\t\t// (\""North American Numbering Plan Administration\"",\n\t\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t\t// it will be contained in the metadata for `US`.\n\t\t//\n\t\t// `country_calling_code` is always valid.\n\t\t// But the actual country may not necessarily be part of the metadata.\n\t\t//\n\n\t}, {\n\t\tkey: 'chooseCountryByCountryCallingCode',\n\t\tvalue: function chooseCountryByCountryCallingCode(country_calling_code) {\n\t\t\tvar country = this.countryCallingCodes()[country_calling_code][0];\n\n\t\t\t// Do not want to test this case.\n\t\t\t// (custom metadata, not all countries).\n\t\t\t/* istanbul ignore else */\n\t\t\tif (this.hasCountry(country)) {\n\t\t\t\tthis.country(country);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'selectedCountry',\n\t\tvalue: function selectedCountry() {\n\t\t\treturn this._country;\n\t\t}\n\t}]);\n\n\treturn Metadata;\n}();\n\nexport default Metadata;\n\nvar Format = function () {\n\tfunction Format(format, metadata) {\n\t\t_classCallCheck(this, Format);\n\n\t\tthis._format = format;\n\t\tthis.metadata = metadata;\n\t}\n\n\t_createClass(Format, [{\n\t\tkey: 'pattern',\n\t\tvalue: function pattern() {\n\t\t\treturn this._format[0];\n\t\t}\n\t}, {\n\t\tkey: 'format',\n\t\tvalue: function format() {\n\t\t\treturn this._format[1];\n\t\t}\n\t}, {\n\t\tkey: 'leadingDigitsPatterns',\n\t\tvalue: function leadingDigitsPatterns() {\n\t\t\treturn this._format[2] || [];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixFormattingRule',\n\t\tvalue: function nationalPrefixFormattingRule() {\n\t\t\treturn this._format[3] || this.metadata.nationalPrefixFormattingRule();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsOptionalWhenFormatting',\n\t\tvalue: function nationalPrefixIsOptionalWhenFormatting() {\n\t\t\treturn this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormatting();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsMandatoryWhenFormatting',\n\t\tvalue: function nationalPrefixIsMandatoryWhenFormatting() {\n\t\t\t// National prefix is omitted if there's no national prefix formatting rule\n\t\t\t// set for this country, or when the national prefix formatting rule\n\t\t\t// contains no national prefix itself, or when this rule is set but\n\t\t\t// national prefix is optional for this phone number format\n\t\t\t// (and it is not enforced explicitly)\n\t\t\treturn this.nationalPrefixFormattingRule() &&\n\t\t\t// Check that national prefix formatting rule is not a dummy one.\n\t\t\t// Check that national prefix formatting rule actually has national prefix digit(s).\n\t\t\tthis.usesNationalPrefix() &&\n\t\t\t// Or maybe national prefix is optional for this format\n\t\t\t!this.nationalPrefixIsOptionalWhenFormatting();\n\t\t}\n\n\t\t// Checks whether national prefix formatting rule contains national prefix\n\n\t}, {\n\t\tkey: 'usesNationalPrefix',\n\t\tvalue: function usesNationalPrefix() {\n\t\t\t// Check that national prefix formatting rule is not a dummy one\n\t\t\treturn this.nationalPrefixFormattingRule() !== '$1' &&\n\t\t\t// Check that national prefix formatting rule actually has national prefix digit(s)\n\t\t\t/\\d/.test(this.nationalPrefixFormattingRule().replace('$1', ''));\n\t\t}\n\t}, {\n\t\tkey: 'internationalFormat',\n\t\tvalue: function internationalFormat() {\n\t\t\treturn this._format[5] || this.format();\n\t\t}\n\t}]);\n\n\treturn Format;\n}();\n\nvar Type = function () {\n\tfunction Type(type, metadata) {\n\t\t_classCallCheck(this, Type);\n\n\t\tthis.type = type;\n\t\tthis.metadata = metadata;\n\t}\n\n\t_createClass(Type, [{\n\t\tkey: 'pattern',\n\t\tvalue: function pattern() {\n\t\t\tif (this.metadata.v1) return this.type;\n\t\t\treturn this.type[0];\n\t\t}\n\t}, {\n\t\tkey: 'possibleLengths',\n\t\tvalue: function possibleLengths() {\n\t\t\tif (this.metadata.v1) return;\n\t\t\treturn this.type[1] || this.metadata.possibleLengths();\n\t\t}\n\t}]);\n\n\treturn Type;\n}();\n\nfunction getType(types, type) {\n\tswitch (type) {\n\t\tcase 'FIXED_LINE':\n\t\t\treturn types[0];\n\t\tcase 'MOBILE':\n\t\t\treturn types[1];\n\t\tcase 'TOLL_FREE':\n\t\t\treturn types[2];\n\t\tcase 'PREMIUM_RATE':\n\t\t\treturn types[3];\n\t\tcase 'PERSONAL_NUMBER':\n\t\t\treturn types[4];\n\t\tcase 'VOICEMAIL':\n\t\t\treturn types[5];\n\t\tcase 'UAN':\n\t\t\treturn types[6];\n\t\tcase 'PAGER':\n\t\t\treturn types[7];\n\t\tcase 'VOIP':\n\t\t\treturn types[8];\n\t\tcase 'SHARED_COST':\n\t\t\treturn types[9];\n\t}\n}\n//# sourceMappingURL=metadata.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/metadata.js"",""import _extends from 'babel-runtime/helpers/extends';\nimport _getIterator from 'babel-runtime/core-js/get-iterator';\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { parse_phone_number_digits, parse_national_number_and_country_calling_code, VALID_PUNCTUATION, PLUS_CHARS, matches_entirely } from './common';\n\nimport Metadata from './metadata';\n\nimport get_number_type, { check_number_length_for_type } from './types';\n\nimport { parseRFC3966 } from './RFC3966';\n\n// The minimum length of the national significant number.\nvar MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nvar MAX_LENGTH_FOR_NSN = 17;\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = '0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9';\n\n// Pattern to capture digits used in an extension.\n// Places a maximum length of '7' for an extension.\nvar CAPTURING_EXTN_DIGITS = '([' + VALID_DIGITS + ']{1,7})';\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n/**\r\n * Regexp of all possible ways to write extensions, for use when parsing. This\r\n * will be run as a case-insensitive regexp match. Wide character versions are\r\n * also provided after each ASCII version. There are three regular expressions\r\n * here. The first covers RFC 3966 format, where the extension is added using\r\n * ';ext='. The second more generic one starts with optional white space and\r\n * ends with an optional full stop (.), followed by zero or more spaces/tabs\r\n * /commas and then the numbers themselves. The other one covers the special\r\n * case of American numbers where the extension is written with a hash at the\r\n * end, such as '- 503#'. Note that the only capturing groups should be around\r\n * the digits that you want to capture as part of the extension, or else parsing\r\n * will fail! We allow two options for representing the accented o - the\r\n * character itself, and one in the unicode decomposed form with the combining\r\n * acute accent.\r\n */\nvar EXTN_PATTERNS_FOR_PARSING = RFC3966_EXTN_PREFIX + CAPTURING_EXTN_DIGITS + '|' + '[ \\xA0\\\\t,]*' + '(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|' + '[;,x\\uFF58#\\uFF03~\\uFF5E]|int|anexo|\\uFF49\\uFF4E\\uFF54)' + '[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*' + CAPTURING_EXTN_DIGITS + '#?|' + '[- ]+([' + VALID_DIGITS + ']{1,5})#';\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + EXTN_PATTERNS_FOR_PARSING + ')$', 'i');\n\n//  Regular expression of viable phone numbers. This is location independent.\n//  Checks we have at least three leading digits, and only valid punctuation,\n//  alpha characters and digits in the phone number. Does not include extension\n//  data. The symbol 'x' is allowed here as valid punctuation since it is often\n//  used as a placeholder for carrier codes, for example in Brazilian phone\n//  numbers. We also allow multiple '+' characters at the start.\n//\n//  Corresponds to the following:\n//  [digits]{minLengthNsn}|\n//  plus_sign*\n//  (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n//  The first reg-ex is to allow short numbers (two digits long) to be parsed if\n//  they are entered as \""15\"" etc, but only if there is no punctuation in them.\n//  The second expression restricts the number of digits to three or more, but\n//  then allows them to be in international form, and to have alpha-characters\n//  and punctuation. We split up the two reg-exes here and combine them when\n//  creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n//  with ^ and append $ to each branch.\n//\n//  \""Note VALID_PUNCTUATION starts with a -,\n//   so must be the first in the range\"" (c) Google devs.\n//  (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nvar VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + EXTN_PATTERNS_FOR_PARSING + ')?' + '$', 'i');\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + ']+$');\n\nvar default_options = {\n\tcountry: {}\n\n\t// `options`:\n\t//  {\n\t//    country:\n\t//    {\n\t//      restrict - (a two-letter country code)\n\t//                 the phone number must be in this country\n\t//\n\t//      default - (a two-letter country code)\n\t//                default country to use for phone number parsing and validation\n\t//                (if no country code could be derived from the phone number)\n\t//    }\n\t//  }\n\t//\n\t// Returns `{ country, number }`\n\t//\n\t// Example use cases:\n\t//\n\t// ```js\n\t// parse('8 (800) 555-35-35', 'RU')\n\t// parse('8 (800) 555-35-35', 'RU', metadata)\n\t// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n\t// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n\t// parse('+7 800 555 35 35')\n\t// parse('+7 800 555 35 35', metadata)\n\t// ```\n\t//\n};export default function parse(arg_1, arg_2, arg_3, arg_4) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4),\n\t    text = _sort_out_arguments.text,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// Validate `defaultCountry`.\n\n\n\tif (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n\t\tthrow new Error('Unknown country: ' + options.defaultCountry);\n\t}\n\n\t// Parse the phone number.\n\n\tvar _parse_input = parse_input(text),\n\t    formatted_phone_number = _parse_input.number,\n\t    ext = _parse_input.ext;\n\n\t// If the phone number is not viable then return nothing.\n\n\n\tif (!formatted_phone_number) {\n\t\treturn {};\n\t}\n\n\tvar _parse_phone_number = parse_phone_number(formatted_phone_number, options.defaultCountry, metadata),\n\t    country = _parse_phone_number.country,\n\t    national_number = _parse_phone_number.national_number,\n\t    countryCallingCode = _parse_phone_number.countryCallingCode;\n\n\tif (!metadata.selectedCountry()) {\n\t\treturn options.extended ? { countryCallingCode: countryCallingCode } : {};\n\t}\n\n\t// Validate national (significant) number length.\n\t//\n\t// A sidenote:\n\t//\n\t// They say that sometimes national (significant) numbers\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n\t// Such numbers will just be discarded.\n\t//\n\tif (national_number.length < MIN_LENGTH_FOR_NSN || national_number.length > MAX_LENGTH_FOR_NSN) {\n\t\t// Google's demo just throws an error in this case.\n\t\treturn {};\n\t}\n\n\t// Check if national phone number pattern matches the number\n\t// National number pattern is different for each country,\n\t// even for those ones which are part of the \""NANPA\"" group.\n\tvar valid = country && matches_entirely(national_number, new RegExp(metadata.nationalNumberPattern())) ? true : false;\n\n\tif (!options.extended) {\n\t\treturn valid ? result(country, national_number, ext) : {};\n\t}\n\n\treturn {\n\t\tcountry: country,\n\t\tcountryCallingCode: countryCallingCode,\n\t\tvalid: valid,\n\t\tpossible: valid ? true : options.extended === true && metadata.possibleLengths() && is_possible_number(national_number, countryCallingCode !== undefined, metadata),\n\t\tphone: national_number,\n\t\text: ext\n\t};\n}\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport function is_viable_phone_number(number) {\n\treturn number.length >= MIN_LENGTH_FOR_NSN && matches_entirely(number, VALID_PHONE_NUMBER_PATTERN);\n}\n\nexport function extract_formatted_phone_number(text) {\n\tif (!text || text.length > MAX_INPUT_STRING_LENGTH) {\n\t\treturn '';\n\t}\n\n\t// Attempt to extract a possible number from the string passed in\n\n\tvar starts_at = text.search(PHONE_NUMBER_START_PATTERN);\n\n\tif (starts_at < 0) {\n\t\treturn '';\n\t}\n\n\treturn text\n\t// Trim everything to the left of the phone number\n\t.slice(starts_at)\n\t// Remove trailing non-numerical characters\n\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n// Strips any national prefix (such as 0, 1) present in the number provided\nexport function strip_national_prefix(number, metadata) {\n\tif (!number || !metadata.nationalPrefixForParsing()) {\n\t\treturn number;\n\t}\n\n\t// Attempt to parse the first digits as a national prefix\n\tvar national_prefix_pattern = new RegExp('^(?:' + metadata.nationalPrefixForParsing() + ')');\n\tvar national_prefix_matcher = national_prefix_pattern.exec(number);\n\n\t// If no national prefix is present in the phone number,\n\t// but if the national prefix is optional for this country,\n\t// then consider this phone number valid.\n\t//\n\t// Google's reference `libphonenumber` implementation\n\t// wouldn't recognize such phone numbers as valid,\n\t// but I think it would perfectly make sense\n\t// to consider such phone numbers as valid\n\t// because if a national phone number was originally\n\t// formatted without the national prefix\n\t// then it must be parseable back into the original national number.\n\t// In other words, `parse(format(number))`\n\t// must always be equal to `number`.\n\t//\n\tif (!national_prefix_matcher) {\n\t\treturn number;\n\t}\n\n\tvar national_significant_number = void 0;\n\n\t// `national_prefix_for_parsing` capturing groups\n\t// (used only for really messy cases: Argentina, Brazil, Mexico, Somalia)\n\tvar any_groups_were_captured = national_prefix_matcher[national_prefix_matcher.length - 1];\n\n\t// If the national number tranformation is needed then do it\n\tif (metadata.nationalPrefixTransformRule() && any_groups_were_captured) {\n\t\tnational_significant_number = number.replace(national_prefix_pattern, metadata.nationalPrefixTransformRule());\n\t}\n\t// Else, no transformation is necessary,\n\t// and just strip the national prefix.\n\telse {\n\t\t\tnational_significant_number = number.slice(national_prefix_matcher[0].length);\n\t\t}\n\n\t// // Verify the parsed national (significant) number for this country\n\t// const national_number_rule = new RegExp(metadata.nationalNumberPattern())\n\t// //\n\t// // If the original number (before stripping national prefix) was viable,\n\t// // and the resultant number is not, then prefer the original phone number.\n\t// // This is because for some countries (e.g. Russia) the same digit could be both\n\t// // a national prefix and a leading digit of a valid national phone number,\n\t// // like `8` is the national prefix for Russia and both\n\t// // `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t// if (matches_entirely(number, national_number_rule) &&\n\t// \t\t!matches_entirely(national_significant_number, national_number_rule))\n\t// {\n\t// \treturn number\n\t// }\n\n\t// Return the parsed national (significant) number\n\treturn national_significant_number;\n}\n\nexport function find_country_code(country_calling_code, national_phone_number, metadata) {\n\t// Is always non-empty, because `country_calling_code` is always valid\n\tvar possible_countries = metadata.countryCallingCodes()[country_calling_code];\n\n\t// If there's just one country corresponding to the country code,\n\t// then just return it, without further phone number digits validation.\n\tif (possible_countries.length === 1) {\n\t\treturn possible_countries[0];\n\t}\n\n\tvar original_country = metadata.selectedCountry();\n\tvar country = _find_country_code(possible_countries, national_phone_number, metadata);\n\tmetadata.country(original_country);\n\treturn country;\n}\n\n// Changes `metadata` `country`.\nfunction _find_country_code(possible_countries, national_phone_number, metadata) {\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = _getIterator(possible_countries), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar country = _step.value;\n\n\t\t\tmetadata.country(country);\n\n\t\t\t// Leading digits check would be the simplest one\n\t\t\tif (metadata.leadingDigits()) {\n\t\t\t\tif (national_phone_number && national_phone_number.search(metadata.leadingDigits()) === 0) {\n\t\t\t\t\treturn country;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Else perform full validation with all of those\n\t\t\t// fixed-line/mobile/etc regular expressions.\n\t\t\telse if (get_number_type({ phone: national_phone_number, country: country }, metadata.metadata)) {\n\t\t\t\t\treturn country;\n\t\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3, arg_4) {\n\tvar text = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `parse('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\ttext = arg_1;\n\t} else throw new TypeError('A phone number for parsing must be a string.');\n\n\t// If \""default country\"" argument is being passed\n\t// then move it to `options`.\n\t// `parse('88005553535', 'RU', [options], metadata)`.\n\tif (typeof arg_2 === 'string') {\n\t\tif (arg_4) {\n\t\t\toptions = _extends({ defaultCountry: arg_2 }, arg_3);\n\t\t\tmetadata = arg_4;\n\t\t} else {\n\t\t\toptions = { defaultCountry: arg_2 };\n\t\t\tmetadata = arg_3;\n\t\t}\n\t}\n\t// No \""resrict country\"" argument is being passed.\n\t// International phone number is passed.\n\t// `parse('+78005553535', [options], metadata)`.\n\telse {\n\t\t\tif (arg_3) {\n\t\t\t\toptions = arg_2;\n\t\t\t\tmetadata = arg_3;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_2;\n\t\t\t}\n\t\t}\n\n\t// Metadata is required.\n\tif (!metadata || !metadata.countries) {\n\t\tthrow new Error('Metadata is required');\n\t}\n\n\t// Apply default options.\n\tif (options) {\n\t\toptions = _extends({}, default_options, options);\n\t} else {\n\t\toptions = default_options;\n\t}\n\n\treturn { text: text, options: options, metadata: new Metadata(metadata) };\n}\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nfunction strip_extension(number) {\n\tvar start = number.search(EXTN_PATTERN);\n\tif (start < 0) {\n\t\treturn {};\n\t}\n\n\t// If we find a potential extension, and the number preceding this is a viable\n\t// number, we assume it is an extension.\n\tvar number_without_extension = number.slice(0, start);\n\t/* istanbul ignore if - seems a bit of a redundant check */\n\tif (!is_viable_phone_number(number_without_extension)) {\n\t\treturn {};\n\t}\n\n\tvar matches = number.match(EXTN_PATTERN);\n\tvar i = 1;\n\twhile (i < matches.length) {\n\t\tif (matches[i] != null && matches[i].length > 0) {\n\t\t\treturn {\n\t\t\t\tnumber: number_without_extension,\n\t\t\t\text: matches[i]\n\t\t\t};\n\t\t}\n\t\ti++;\n\t}\n}\n\nfunction is_possible_number(national_number, is_international, metadata) {\n\tswitch (check_number_length_for_type(national_number, undefined, metadata)) {\n\t\tcase 'IS_POSSIBLE':\n\t\t\treturn true;\n\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t// \treturn !is_international\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\r\n * Parses a viable international phone number.\r\n * Returns `{ country, national_number }`.\r\n */\nfunction get_country_and_national_number_international(country_calling_code, national_number, metadata) {\n\t// Sometimes there are several countries\n\t// corresponding to the same country phone code\n\t// (e.g. NANPA countries all having `1` country phone code).\n\t// Therefore, to reliably determine the exact country,\n\t// national (significant) number should have been parsed first.\n\t//\n\t// When `metadata.json` is generated, all \""ambiguous\"" country phone codes\n\t// get their countries populated with the full set of\n\t// \""phone number type\"" regular expressions.\n\t//\n\tvar country = find_country_code(country_calling_code, national_number, metadata);\n\n\t// Formatting information for regions which share\n\t// a country calling code is contained by only one region\n\t// for performance reasons. For example, for NANPA region\n\t// (\""North American Numbering Plan Administration\"",\n\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t// it will be contained in the metadata for `US`.\n\tcountry ? metadata.country(country) : metadata.chooseCountryByCountryCallingCode(country_calling_code);\n\n\treturn { national_number: national_number, country: country };\n}\n\n/**\r\n * Parses a viable local phone number.\r\n * Returns `{ country, national_number }`.\r\n */\nfunction get_country_and_national_number_local(formatted_phone_number, default_country, metadata) {\n\tvar country = default_country;\n\tmetadata.country(country);\n\n\tvar national_number = parse_phone_number_digits(formatted_phone_number);\n\n\t// Only strip national prefixes for non-international phone numbers\n\t// because national prefixes can't be present in international phone numbers.\n\t// Otherwise, while forgiving, it would parse a NANPA number `+1 1877 215 5230`\n\t// first to `1877 215 5230` and then, stripping the leading `1`, to `877 215 5230`,\n\t// and then it would assume that's a valid number which it isn't.\n\t// So no forgiveness for grandmas here.\n\t// The issue asking for this fix:\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/159\n\tvar potential_national_number = strip_national_prefix(national_number, metadata);\n\n\t// If metadata has \""possible lengths\"" then employ the new algorythm.\n\tif (metadata.possibleLengths()) {\n\t\t// We require that the NSN remaining after stripping the national prefix and\n\t\t// carrier code be long enough to be a possible length for the region.\n\t\t// Otherwise, we don't do the stripping, since the original number could be\n\t\t// a valid short number.\n\t\tswitch (check_number_length_for_type(potential_national_number, undefined, metadata)) {\n\t\t\tcase 'TOO_SHORT':\n\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t\tcase 'INVALID_LENGTH':\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tnational_number = potential_national_number;\n\t\t}\n\t} else {\n\t\t// If the original number (before stripping national prefix) was viable,\n\t\t// and the resultant number is not, then prefer the original phone number.\n\t\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t\t// a national prefix and a leading digit of a valid national phone number,\n\t\t// like `8` is the national prefix for Russia and both\n\t\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t\tif (matches_entirely(national_number, metadata.nationalNumberPattern()) && !matches_entirely(potential_national_number, metadata.nationalNumberPattern())) {\n\t\t\t// Keep the number without stripping national prefix.\n\t\t} else {\n\t\t\tnational_number = potential_national_number;\n\t\t}\n\t}\n\n\treturn { national_number: national_number, country: country };\n}\n\n/**\r\n * @param  {string} text - Input.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parse_input(text) {\n\t// Parse RFC 3966 phone number URI.\n\tif (text && text.indexOf('tel:') === 0) {\n\t\treturn parseRFC3966(text);\n\t}\n\n\tvar number = extract_formatted_phone_number(text);\n\n\t// If the phone number is not viable, then abort.\n\tif (!is_viable_phone_number(number)) {\n\t\treturn {};\n\t}\n\n\t// Attempt to parse extension first, since it doesn't require region-specific\n\t// data and we want to have the non-normalised number here.\n\tvar with_extension_stripped = strip_extension(number);\n\tif (with_extension_stripped.ext) {\n\t\treturn with_extension_stripped;\n\t}\n\n\treturn { number: number };\n}\n\nfunction result(country, national_number, ext) {\n\tvar result = {\n\t\tcountry: country,\n\t\tphone: national_number\n\t};\n\n\tif (ext) {\n\t\tresult.ext = ext;\n\t}\n\n\treturn result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * Returns `{ country, countryCallingCode, national_number }`.\r\n */\nfunction parse_phone_number(formatted_phone_number, default_country, metadata) {\n\tvar _parse_national_numbe = parse_national_number_and_country_calling_code(formatted_phone_number, metadata),\n\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t    number = _parse_national_numbe.number;\n\n\tif (!number) {\n\t\treturn { countryCallingCode: countryCallingCode };\n\t}\n\n\tif (countryCallingCode) {\n\t\tvar _result = get_country_and_national_number_international(countryCallingCode, number, metadata);\n\t\t_result.countryCallingCode = countryCallingCode;\n\t\treturn _result;\n\t}\n\n\tif (default_country) {\n\t\tvar _result2 = get_country_and_national_number_local(formatted_phone_number, default_country, metadata);\n\t\tmetadata.country(default_country);\n\t\t_result2.countryCallingCode = metadata.countryCallingCode();\n\t\treturn _result2;\n\t}\n\n\treturn {};\n}\n//# sourceMappingURL=parse.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/parse.js"",""module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_property-desc.js\n// module id = 18\n// module chunks = 0"",""'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.string.iterator.js\n// module id = 19\n// module chunks = 0"",""import _Array$from from 'babel-runtime/core-js/array/from';\nimport _Set from 'babel-runtime/core-js/set';\nimport _typeof from 'babel-runtime/helpers/typeof';\nimport _getIterator from 'babel-runtime/core-js/get-iterator';\nimport parse, { is_viable_phone_number } from './parse';\n\nimport { matches_entirely } from './common';\n\nimport Metadata from './metadata';\n\nvar non_fixed_line_types = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function get_number_type(arg_1, arg_2, arg_3) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// When no input was passed\n\n\n\tif (!input) {\n\t\treturn;\n\t}\n\n\t// When `parse()` returned `{}`\n\t// meaning that the phone number is not a valid one.\n\tif (!input.country) {\n\t\treturn;\n\t}\n\n\tif (!metadata.hasCountry(input.country)) {\n\t\tthrow new Error('Unknown country: ' + input.country);\n\t}\n\n\tvar national_number = input.phone;\n\tmetadata.country(input.country);\n\n\t// The following is copy-pasted from the original function:\n\t// https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n\t// Is this national number even valid for this country\n\tif (!matches_entirely(national_number, metadata.nationalNumberPattern())) {\n\t\treturn;\n\t}\n\n\t// Is it fixed line number\n\tif (is_of_type(national_number, 'FIXED_LINE', metadata)) {\n\t\t// Because duplicate regular expressions are removed\n\t\t// to reduce metadata size, if \""mobile\"" pattern is \""\""\n\t\t// then it means it was removed due to being a duplicate of the fixed-line pattern.\n\t\t//\n\t\tif (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// v1 metadata.\n\t\t// Legacy.\n\t\t// Deprecated.\n\t\tif (!metadata.type('MOBILE')) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// Check if the number happens to qualify as both fixed line and mobile.\n\t\t// (no such country in the minimal metadata set)\n\t\t/* istanbul ignore if */\n\t\tif (is_of_type(national_number, 'MOBILE', metadata)) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\treturn 'FIXED_LINE';\n\t}\n\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = _getIterator(non_fixed_line_types), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _type = _step.value;\n\n\t\t\tif (is_of_type(national_number, _type, metadata)) {\n\t\t\t\treturn _type;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function is_of_type(national_number, type, metadata) {\n\ttype = metadata.type(type);\n\n\tif (!type || !type.pattern()) {\n\t\treturn false;\n\t}\n\n\t// Check if any possible number lengths are present;\n\t// if so, we use them to avoid checking\n\t// the validation pattern if they don't match.\n\t// If they are absent, this means they match\n\t// the general description, which we have\n\t// already checked before a specific number type.\n\tif (type.possibleLengths() && type.possibleLengths().indexOf(national_number.length) < 0) {\n\t\treturn false;\n\t}\n\n\treturn matches_entirely(national_number, type.pattern());\n}\n\n// Sort out arguments\nexport function sort_out_arguments(arg_1, arg_2, arg_3) {\n\tvar input = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `getNumberType('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\t// If \""resrict country\"" argument is being passed\n\t\t// then convert it to an `options` object.\n\t\t// `getNumberType('88005553535', 'RU', metadata)`.\n\t\tif (typeof arg_2 === 'string' || arg_2 === undefined) {\n\t\t\tmetadata = arg_3;\n\n\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t// while this `validate` function needs to verify\n\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\tif (is_viable_phone_number(arg_1)) {\n\t\t\t\tinput = parse(arg_1, arg_2, metadata);\n\t\t\t}\n\t\t}\n\t\t// No \""resrict country\"" argument is being passed.\n\t\t// International phone number is passed.\n\t\t// `getNumberType('+78005553535', metadata)`.\n\t\telse {\n\t\t\t\tmetadata = arg_2;\n\n\t\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t\t// while this `validate` function needs to verify\n\t\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\t\tif (is_viable_phone_number(arg_1)) {\n\t\t\t\t\tinput = parse(arg_1, metadata);\n\t\t\t\t}\n\t\t\t}\n\t}\n\t// If the phone number is passed as a parsed phone number.\n\t// `getNumberType({ phone: '88005553535', country: 'RU' }, ...)`.\n\telse if (is_object(arg_1) && typeof arg_1.phone === 'string') {\n\t\t\t// The `arg_1` must be a valid phone number\n\t\t\t// as a whole, not just a part of it which gets parsed here.\n\t\t\tif (is_viable_phone_number(arg_1.phone)) {\n\t\t\t\tinput = arg_1;\n\t\t\t}\n\n\t\t\tmetadata = arg_2;\n\t\t} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');\n\n\t// Metadata is required.\n\tif (!metadata || !metadata.countries) {\n\t\tthrow new Error('Metadata is required');\n\t}\n\n\treturn { input: input, metadata: new Metadata(metadata) };\n}\n\n// Should only be called for the \""new\"" metadata which has \""possible lengths\"".\nexport function check_number_length_for_type(national_number, type, metadata) {\n\tvar type_info = metadata.type(type);\n\n\t// There should always be \""<possiblePengths/>\"" set for every type element.\n\t// This is declared in the XML schema.\n\t// For size efficiency, where a sub-description (e.g. fixed-line)\n\t// has the same \""<possiblePengths/>\"" as the \""general description\"", this is missing,\n\t// so we fall back to the \""general description\"". Where no numbers of the type\n\t// exist at all, there is one possible length (-1) which is guaranteed\n\t// not to match the length of any real phone number.\n\tvar possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n\t// let local_lengths    = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n\tif (type === 'FIXED_LINE_OR_MOBILE') {\n\t\t// No such country in metadata.\n\t\t/* istanbul ignore next */\n\t\tif (!metadata.type('FIXED_LINE')) {\n\t\t\t// The rare case has been encountered where no fixedLine data is available\n\t\t\t// (true for some non-geographical entities), so we just check mobile.\n\t\t\treturn test_number_length_for_type(national_number, 'MOBILE', metadata);\n\t\t}\n\n\t\tvar mobile_type = metadata.type('MOBILE');\n\n\t\tif (mobile_type) {\n\t\t\t// Merge the mobile data in if there was any. \""Concat\"" creates a new\n\t\t\t// array, it doesn't edit possible_lengths in place, so we don't need a copy.\n\t\t\t// Note that when adding the possible lengths from mobile, we have\n\t\t\t// to again check they aren't empty since if they are this indicates\n\t\t\t// they are the same as the general desc and should be obtained from there.\n\t\t\tpossible_lengths = merge_arrays(possible_lengths, mobile_type.possibleLengths());\n\t\t\t// The current list is sorted; we need to merge in the new list and\n\t\t\t// re-sort (duplicates are okay). Sorting isn't so expensive because\n\t\t\t// the lists are very small.\n\n\t\t\t// if (local_lengths)\n\t\t\t// {\n\t\t\t// \tlocal_lengths = merge_arrays(local_lengths, mobile_type.possibleLengthsLocal())\n\t\t\t// }\n\t\t\t// else\n\t\t\t// {\n\t\t\t// \tlocal_lengths = mobile_type.possibleLengthsLocal()\n\t\t\t// }\n\t\t}\n\t}\n\t// If the type doesn't exist then return 'INVALID_LENGTH'.\n\telse if (type && !type_info) {\n\t\t\treturn 'INVALID_LENGTH';\n\t\t}\n\n\tvar actual_length = national_number.length;\n\n\t// // This is safe because there is never an overlap beween the possible lengths\n\t// // and the local-only lengths; this is checked at build time.\n\t// if (local_lengths && local_lengths.indexOf(national_number.length) >= 0)\n\t// {\n\t// \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n\t// }\n\n\tvar minimum_length = possible_lengths[0];\n\n\tif (minimum_length === actual_length) {\n\t\treturn 'IS_POSSIBLE';\n\t}\n\n\tif (minimum_length > actual_length) {\n\t\treturn 'TOO_SHORT';\n\t}\n\n\tif (possible_lengths[possible_lengths.length - 1] < actual_length) {\n\t\treturn 'TOO_LONG';\n\t}\n\n\t// We skip the first element since we've already checked it.\n\treturn possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : _typeof(_)) === 'object';\n};\n\nfunction merge_arrays(a, b) {\n\tvar merged = new _Set(a);\n\n\tvar _iteratorNormalCompletion2 = true;\n\tvar _didIteratorError2 = false;\n\tvar _iteratorError2 = undefined;\n\n\ttry {\n\t\tfor (var _iterator2 = _getIterator(b), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\tvar i = _step2.value;\n\n\t\t\tmerged.add(i);\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError2 = true;\n\t\t_iteratorError2 = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t_iterator2.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError2) {\n\t\t\t\tthrow _iteratorError2;\n\t\t\t}\n\t\t}\n\t}\n\n\tmerged = _Array$from(merged);\n\tmerged.sort(function (a, b) {\n\t\treturn a - b;\n\t});\n\treturn merged;\n}\n//# sourceMappingURL=types.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/types.js"",""var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_for-of.js\n// module id = 21\n// module chunks = 0"",""// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-create.js\n// module id = 22\n// module chunks = 0"",""// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-keys.js\n// module id = 23\n// module chunks = 0"",""exports.f = {}.propertyIsEnumerable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-pie.js\n// module id = 24\n// module chunks = 0"",""var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-to-string-tag.js\n// module id = 25\n// module chunks = 0"",""// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-length.js\n// module id = 26\n// module chunks = 0"",""// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-object.js\n// module id = 27\n// module chunks = 0"",""var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_uid.js\n// module id = 28\n// module chunks = 0"",""require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/web.dom.iterable.js\n// module id = 29\n// module chunks = 0"",""import _slicedToArray from 'babel-runtime/helpers/slicedToArray';\nimport _getIterator from 'babel-runtime/core-js/get-iterator';\nimport { is_viable_phone_number } from './parse';\n\n/**\r\n * @param  {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nexport function parseRFC3966(text) {\n\tvar number = void 0;\n\tvar ext = void 0;\n\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = _getIterator(text.split(';')), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar part = _step.value;\n\n\t\t\tvar _part$split = part.split(':'),\n\t\t\t    _part$split2 = _slicedToArray(_part$split, 2),\n\t\t\t    name = _part$split2[0],\n\t\t\t    value = _part$split2[1];\n\n\t\t\tswitch (name) {\n\t\t\t\tcase 'tel':\n\t\t\t\t\tnumber = value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ext':\n\t\t\t\t\text = value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'phone-context':\n\t\t\t\t\t// Only \""country contexts\"" are supported.\n\t\t\t\t\t// \""Domain contexts\"" are ignored.\n\t\t\t\t\tif (value[0] === '+') {\n\t\t\t\t\t\tnumber = value + number;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// If the phone number is not viable, then abort.\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!is_viable_phone_number(number)) {\n\t\treturn {};\n\t}\n\n\treturn {\n\t\tnumber: number,\n\t\text: ext\n\t};\n}\n\n/**\r\n * @param  {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nexport function formatRFC3966(_ref) {\n\tvar number = _ref.number,\n\t    ext = _ref.ext;\n\n\tif (!number) {\n\t\treturn '';\n\t}\n\n\tif (number[0] !== '+') {\n\t\tthrow new Error('\""formatRFC3966()\"" expects \""number\"" to be in E.164 format.');\n\t}\n\n\treturn 'tel:' + number + (ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/RFC3966.js"",""// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_classof.js\n// module id = 31\n// module chunks = 0"",""var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_cof.js\n// module id = 32\n// module chunks = 0"",""// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_defined.js\n// module id = 33\n// module chunks = 0"",""// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_enum-bug-keys.js\n// module id = 34\n// module chunks = 0"",""// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iobject.js\n// module id = 35\n// module chunks = 0"",""'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-define.js\n// module id = 36\n// module chunks = 0"",""module.exports = true;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_library.js\n// module id = 37\n// module chunks = 0"",""var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_meta.js\n// module id = 38\n// module chunks = 0"",""exports.f = Object.getOwnPropertySymbols;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gops.js\n// module id = 39\n// module chunks = 0"",""var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_shared-key.js\n// module id = 40\n// module chunks = 0"",""var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n  return store[key] || (store[key] = {});\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_shared.js\n// module id = 41\n// module chunks = 0"",""// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-integer.js\n// module id = 42\n// module chunks = 0"",""// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-primitive.js\n// module id = 43\n// module chunks = 0"",""var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks-define.js\n// module id = 44\n// module chunks = 0"",""exports.f = require('./_wks');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks-ext.js\n// module id = 45\n// module chunks = 0"",""var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.get-iterator-method.js\n// module id = 46\n// module chunks = 0"",""import _typeof from 'babel-runtime/helpers/typeof';\nimport _extends from 'babel-runtime/helpers/extends';\nimport _getIterator from 'babel-runtime/core-js/get-iterator';\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { parse_national_number_and_country_calling_code, VALID_PUNCTUATION, matches_entirely } from './common';\n\nimport Metadata from './metadata';\n\nimport { formatRFC3966 } from './RFC3966';\n\nvar default_options = {\n\tformatExtension: function formatExtension(number, extension) {\n\t\treturn number + ' ext. ' + extension;\n\t}\n\n\t// Formats a phone number\n\t//\n\t// Example use cases:\n\t//\n\t// ```js\n\t// format('8005553535', 'RU', 'International')\n\t// format('8005553535', 'RU', 'International', metadata)\n\t// format({ phone: '8005553535', country: 'RU' }, 'International')\n\t// format({ phone: '8005553535', country: 'RU' }, 'International', metadata)\n\t// format('+78005553535', 'National')\n\t// format('+78005553535', 'National', metadata)\n\t// ```\n\t//\n};export default function format(arg_1, arg_2, arg_3, arg_4, arg_5) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4, arg_5),\n\t    input = _sort_out_arguments.input,\n\t    format_type = _sort_out_arguments.format_type,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (input.country && metadata.hasCountry(input.country)) {\n\t\tmetadata.country(input.country);\n\t}\n\n\tvar _parse_national_numbe = parse_national_number_and_country_calling_code(input.phone, metadata),\n\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t    number = _parse_national_numbe.number;\n\n\tcountryCallingCode = countryCallingCode || input.countryCallingCode;\n\n\tif (countryCallingCode) {\n\t\t// Check country restriction\n\t\tif (input.country && metadata.selectedCountry() && countryCallingCode !== metadata.countryCallingCode()) {\n\t\t\treturn input.phone;\n\t\t}\n\n\t\tmetadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t}\n\n\tif (!metadata.selectedCountry()) {\n\t\treturn input.phone;\n\t}\n\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\t\tif (!number) {\n\t\t\t\treturn '+' + metadata.countryCallingCode();\n\t\t\t}\n\t\t\tnumber = format_national_number(number, 'International', false, metadata);\n\t\t\tnumber = '+' + metadata.countryCallingCode() + ' ' + number;\n\t\t\treturn add_extension(number, input.ext, options.formatExtension);\n\n\t\tcase 'E.164':\n\t\t\t// `E.164` doesn't define \""phone number extensions\"".\n\t\t\treturn '+' + metadata.countryCallingCode() + input.phone;\n\n\t\tcase 'RFC3966':\n\t\t\treturn formatRFC3966({\n\t\t\t\tnumber: '+' + metadata.countryCallingCode() + input.phone,\n\t\t\t\text: input.ext\n\t\t\t});\n\n\t\tcase 'National':\n\t\t\tif (!number) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tnumber = format_national_number(number, 'National', false, metadata);\n\t\t\treturn add_extension(number, input.ext, options.formatExtension);\n\t}\n}\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly.  Therefore, we use \\d, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\n\nexport function format_national_number_using_format(number, format, international, enforce_national_prefix, metadata) {\n\tvar format_pattern_matcher = new RegExp(format.pattern());\n\n\t// National prefix is omitted if there's no national prefix formatting rule\n\t// set for this country, or when this rule is set but\n\t// national prefix is optional for this phone number format\n\t// (and it is not enforced explicitly)\n\tvar national_prefix_may_be_omitted = !format.nationalPrefixFormattingRule() || format.nationalPrefixFormattingRule() && format.nationalPrefixIsOptionalWhenFormatting() && !enforce_national_prefix;\n\n\tif (!international && !national_prefix_may_be_omitted) {\n\t\treturn number.replace(format_pattern_matcher, format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()));\n\t}\n\n\tvar formatted_number = number.replace(format_pattern_matcher, international ? format.internationalFormat() : format.format());\n\n\tif (international) {\n\t\treturn local_to_international_style(formatted_number);\n\t}\n\n\treturn formatted_number;\n}\n\nfunction format_national_number(number, format_as, enforce_national_prefix, metadata) {\n\tvar format = choose_format_for_number(metadata.formats(), number);\n\n\tif (!format) {\n\t\treturn number;\n\t}\n\n\treturn format_national_number_using_format(number, format, format_as === 'International', enforce_national_prefix, metadata);\n}\n\nexport function choose_format_for_number(available_formats, national_number) {\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = _getIterator(available_formats), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _format = _step.value;\n\n\t\t\t// Validate leading digits\n\t\t\tif (_format.leadingDigitsPatterns().length > 0) {\n\t\t\t\t// The last leading_digits_pattern is used here, as it is the most detailed\n\t\t\t\tvar last_leading_digits_pattern = _format.leadingDigitsPatterns()[_format.leadingDigitsPatterns().length - 1];\n\n\t\t\t\t// If leading digits don't match then move on to the next phone number format\n\t\t\t\tif (national_number.search(last_leading_digits_pattern) !== 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check that the national number matches the phone number format regular expression\n\t\t\tif (matches_entirely(national_number, new RegExp(_format.pattern()))) {\n\t\t\t\treturn _format;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \""(999) 111-22-33\"" -> \""999 111 22 33\""\n//\nexport function local_to_international_style(local) {\n\treturn local.replace(new RegExp('[' + VALID_PUNCTUATION + ']+', 'g'), ' ').trim();\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3, arg_4, arg_5) {\n\tvar input = void 0;\n\tvar format_type = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// Sort out arguments.\n\n\t// If the phone number is passed as a string.\n\t// `format('8005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\t// If country code is supplied.\n\t\t// `format('8005553535', 'RU', 'National', [options], metadata)`.\n\t\tif (typeof arg_3 === 'string') {\n\t\t\t// Will be `parse()`d later in code\n\t\t\tinput = {\n\t\t\t\tphone: arg_1,\n\t\t\t\tcountry: arg_2\n\t\t\t};\n\n\t\t\tformat_type = arg_3;\n\n\t\t\tif (arg_5) {\n\t\t\t\toptions = arg_4;\n\t\t\t\tmetadata = arg_5;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_4;\n\t\t\t}\n\t\t}\n\t\t// Just an international phone number is supplied\n\t\t// `format('+78005553535', 'National', [options], metadata)`.\n\t\telse {\n\t\t\t\t// Will be `parse()`d later in code\n\t\t\t\tinput = {\n\t\t\t\t\tphone: arg_1\n\t\t\t\t};\n\n\t\t\t\tif (typeof arg_2 !== 'string') {\n\t\t\t\t\tthrow new Error('Format type argument not passed for `format()`');\n\t\t\t\t}\n\n\t\t\t\tformat_type = arg_2;\n\n\t\t\t\tif (arg_4) {\n\t\t\t\t\toptions = arg_3;\n\t\t\t\t\tmetadata = arg_4;\n\t\t\t\t} else {\n\t\t\t\t\tmetadata = arg_3;\n\t\t\t\t}\n\t\t\t}\n\t}\n\t// If the phone number is passed as a parsed number object.\n\t// `format({ phone: '8005553535', country: 'RU' }, 'National', [options], metadata)`.\n\telse if (is_object(arg_1) && typeof arg_1.phone === 'string') {\n\t\t\tinput = arg_1;\n\t\t\tformat_type = arg_2;\n\n\t\t\tif (arg_4) {\n\t\t\t\toptions = arg_3;\n\t\t\t\tmetadata = arg_4;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_3;\n\t\t\t}\n\t\t} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');\n\n\t// Metadata is required.\n\tif (!metadata) {\n\t\tthrow new Error('Metadata is required');\n\t}\n\n\t// Validate `format_type`.\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\tcase 'E.164':\n\t\tcase 'National':\n\t\tcase 'RFC3966':\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error('Unknown format type argument passed to \""format()\"": \""' + format_type + '\""');\n\t}\n\n\t// Apply default options.\n\tif (options) {\n\t\toptions = _extends({}, default_options, options);\n\t} else {\n\t\toptions = default_options;\n\t}\n\n\treturn { input: input, format_type: format_type, options: options, metadata: new Metadata(metadata) };\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : _typeof(_)) === 'object';\n};\n\nfunction add_extension(number, ext, formatExtension) {\n\treturn ext ? formatExtension(number, ext) : number;\n}\n//# sourceMappingURL=format.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/format.js"",""\""use strict\"";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\""Cannot call a class as a function\"");\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/classCallCheck.js\n// module id = 48\n// module chunks = 0"",""\""use strict\"";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\""../core-js/object/define-property\"");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\""value\"" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/createClass.js\n// module id = 49\n// module chunks = 0"",""\""use strict\"";\n\nexports.__esModule = true;\n\nvar _assign = require(\""../core-js/object/assign\"");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/extends.js\n// module id = 50\n// module chunks = 0"",""\""use strict\"";\n\nexports.__esModule = true;\n\nvar _iterator = require(\""../core-js/symbol/iterator\"");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\""../core-js/symbol\"");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \""function\"" && typeof _iterator2.default === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \""function\"" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \""symbol\"" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \""function\"" && _typeof(_iterator2.default) === \""symbol\"" ? function (obj) {\n  return typeof obj === \""undefined\"" ? \""undefined\"" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \""function\"" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \""symbol\"" : typeof obj === \""undefined\"" ? \""undefined\"" : _typeof(obj);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/typeof.js\n// module id = 51\n// module chunks = 0"",""module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_a-function.js\n// module id = 52\n// module chunks = 0"",""module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_an-instance.js\n// module id = 53\n// module chunks = 0"",""var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_dom-create.js\n// module id = 54\n// module chunks = 0"",""module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_ie8-dom-define.js\n// module id = 55\n// module chunks = 0"",""// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_is-array-iter.js\n// module id = 56\n// module chunks = 0"",""// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_is-array.js\n// module id = 57\n// module chunks = 0"",""// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-call.js\n// module id = 58\n// module chunks = 0"",""module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-step.js\n// module id = 59\n// module chunks = 0"",""// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopn.js\n// module id = 60\n// module chunks = 0"",""var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-keys-internal.js\n// module id = 61\n// module chunks = 0"",""var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_redefine-all.js\n// module id = 62\n// module chunks = 0"",""module.exports = require('./_hide');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_redefine.js\n// module id = 63\n// module chunks = 0"",""var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_validate-collection.js\n// module id = 64\n// module chunks = 0"",""module.exports = {\""version\"":\""1.0.23\"",\""country_calling_codes\"":{\""1\"":[\""US\"",\""AG\"",\""AI\"",\""AS\"",\""BB\"",\""BM\"",\""BS\"",\""CA\"",\""DM\"",\""DO\"",\""GD\"",\""GU\"",\""JM\"",\""KN\"",\""KY\"",\""LC\"",\""MP\"",\""MS\"",\""PR\"",\""SX\"",\""TC\"",\""TT\"",\""VC\"",\""VG\"",\""VI\""],\""7\"":[\""RU\"",\""KZ\""],\""20\"":[\""EG\""],\""27\"":[\""ZA\""],\""30\"":[\""GR\""],\""31\"":[\""NL\""],\""32\"":[\""BE\""],\""33\"":[\""FR\""],\""34\"":[\""ES\""],\""36\"":[\""HU\""],\""39\"":[\""IT\"",\""VA\""],\""40\"":[\""RO\""],\""41\"":[\""CH\""],\""43\"":[\""AT\""],\""44\"":[\""GB\"",\""GG\"",\""IM\"",\""JE\""],\""45\"":[\""DK\""],\""46\"":[\""SE\""],\""47\"":[\""NO\"",\""SJ\""],\""48\"":[\""PL\""],\""49\"":[\""DE\""],\""51\"":[\""PE\""],\""52\"":[\""MX\""],\""53\"":[\""CU\""],\""54\"":[\""AR\""],\""55\"":[\""BR\""],\""56\"":[\""CL\""],\""57\"":[\""CO\""],\""58\"":[\""VE\""],\""60\"":[\""MY\""],\""61\"":[\""AU\"",\""CC\"",\""CX\""],\""62\"":[\""ID\""],\""63\"":[\""PH\""],\""64\"":[\""NZ\""],\""65\"":[\""SG\""],\""66\"":[\""TH\""],\""81\"":[\""JP\""],\""82\"":[\""KR\""],\""84\"":[\""VN\""],\""86\"":[\""CN\""],\""90\"":[\""TR\""],\""91\"":[\""IN\""],\""92\"":[\""PK\""],\""93\"":[\""AF\""],\""94\"":[\""LK\""],\""95\"":[\""MM\""],\""98\"":[\""IR\""],\""211\"":[\""SS\""],\""212\"":[\""MA\"",\""EH\""],\""213\"":[\""DZ\""],\""216\"":[\""TN\""],\""218\"":[\""LY\""],\""220\"":[\""GM\""],\""221\"":[\""SN\""],\""222\"":[\""MR\""],\""223\"":[\""ML\""],\""224\"":[\""GN\""],\""225\"":[\""CI\""],\""226\"":[\""BF\""],\""227\"":[\""NE\""],\""228\"":[\""TG\""],\""229\"":[\""BJ\""],\""230\"":[\""MU\""],\""231\"":[\""LR\""],\""232\"":[\""SL\""],\""233\"":[\""GH\""],\""234\"":[\""NG\""],\""235\"":[\""TD\""],\""236\"":[\""CF\""],\""237\"":[\""CM\""],\""238\"":[\""CV\""],\""239\"":[\""ST\""],\""240\"":[\""GQ\""],\""241\"":[\""GA\""],\""242\"":[\""CG\""],\""243\"":[\""CD\""],\""244\"":[\""AO\""],\""245\"":[\""GW\""],\""246\"":[\""IO\""],\""247\"":[\""AC\""],\""248\"":[\""SC\""],\""249\"":[\""SD\""],\""250\"":[\""RW\""],\""251\"":[\""ET\""],\""252\"":[\""SO\""],\""253\"":[\""DJ\""],\""254\"":[\""KE\""],\""255\"":[\""TZ\""],\""256\"":[\""UG\""],\""257\"":[\""BI\""],\""258\"":[\""MZ\""],\""260\"":[\""ZM\""],\""261\"":[\""MG\""],\""262\"":[\""RE\"",\""YT\""],\""263\"":[\""ZW\""],\""264\"":[\""NA\""],\""265\"":[\""MW\""],\""266\"":[\""LS\""],\""267\"":[\""BW\""],\""268\"":[\""SZ\""],\""269\"":[\""KM\""],\""290\"":[\""SH\"",\""TA\""],\""291\"":[\""ER\""],\""297\"":[\""AW\""],\""298\"":[\""FO\""],\""299\"":[\""GL\""],\""350\"":[\""GI\""],\""351\"":[\""PT\""],\""352\"":[\""LU\""],\""353\"":[\""IE\""],\""354\"":[\""IS\""],\""355\"":[\""AL\""],\""356\"":[\""MT\""],\""357\"":[\""CY\""],\""358\"":[\""FI\"",\""AX\""],\""359\"":[\""BG\""],\""370\"":[\""LT\""],\""371\"":[\""LV\""],\""372\"":[\""EE\""],\""373\"":[\""MD\""],\""374\"":[\""AM\""],\""375\"":[\""BY\""],\""376\"":[\""AD\""],\""377\"":[\""MC\""],\""378\"":[\""SM\""],\""380\"":[\""UA\""],\""381\"":[\""RS\""],\""382\"":[\""ME\""],\""383\"":[\""XK\""],\""385\"":[\""HR\""],\""386\"":[\""SI\""],\""387\"":[\""BA\""],\""389\"":[\""MK\""],\""420\"":[\""CZ\""],\""421\"":[\""SK\""],\""423\"":[\""LI\""],\""500\"":[\""FK\""],\""501\"":[\""BZ\""],\""502\"":[\""GT\""],\""503\"":[\""SV\""],\""504\"":[\""HN\""],\""505\"":[\""NI\""],\""506\"":[\""CR\""],\""507\"":[\""PA\""],\""508\"":[\""PM\""],\""509\"":[\""HT\""],\""590\"":[\""GP\"",\""BL\"",\""MF\""],\""591\"":[\""BO\""],\""592\"":[\""GY\""],\""593\"":[\""EC\""],\""594\"":[\""GF\""],\""595\"":[\""PY\""],\""596\"":[\""MQ\""],\""597\"":[\""SR\""],\""598\"":[\""UY\""],\""599\"":[\""CW\"",\""BQ\""],\""670\"":[\""TL\""],\""672\"":[\""NF\""],\""673\"":[\""BN\""],\""674\"":[\""NR\""],\""675\"":[\""PG\""],\""676\"":[\""TO\""],\""677\"":[\""SB\""],\""678\"":[\""VU\""],\""679\"":[\""FJ\""],\""680\"":[\""PW\""],\""681\"":[\""WF\""],\""682\"":[\""CK\""],\""683\"":[\""NU\""],\""685\"":[\""WS\""],\""686\"":[\""KI\""],\""687\"":[\""NC\""],\""688\"":[\""TV\""],\""689\"":[\""PF\""],\""690\"":[\""TK\""],\""691\"":[\""FM\""],\""692\"":[\""MH\""],\""800\"":[\""001\""],\""808\"":[\""001\""],\""850\"":[\""KP\""],\""852\"":[\""HK\""],\""853\"":[\""MO\""],\""855\"":[\""KH\""],\""856\"":[\""LA\""],\""870\"":[\""001\""],\""878\"":[\""001\""],\""880\"":[\""BD\""],\""881\"":[\""001\""],\""882\"":[\""001\""],\""883\"":[\""001\""],\""886\"":[\""TW\""],\""888\"":[\""001\""],\""960\"":[\""MV\""],\""961\"":[\""LB\""],\""962\"":[\""JO\""],\""963\"":[\""SY\""],\""964\"":[\""IQ\""],\""965\"":[\""KW\""],\""966\"":[\""SA\""],\""967\"":[\""YE\""],\""968\"":[\""OM\""],\""970\"":[\""PS\""],\""971\"":[\""AE\""],\""972\"":[\""IL\""],\""973\"":[\""BH\""],\""974\"":[\""QA\""],\""975\"":[\""BT\""],\""976\"":[\""MN\""],\""977\"":[\""NP\""],\""979\"":[\""001\""],\""992\"":[\""TJ\""],\""993\"":[\""TM\""],\""994\"":[\""AZ\""],\""995\"":[\""GE\""],\""996\"":[\""KG\""],\""998\"":[\""UZ\""]},\""countries\"":{\""AC\"":[\""247\"",\""[46]\\\\d{4}|[01589]\\\\d{5}\"",[5,6]],\""AD\"":[\""376\"",\""[16]\\\\d{5,8}|[37-9]\\\\d{5}\"",[6,8,9],[[\""(\\\\d{3})(\\\\d{3})\"",\""$1 $2\"",[\""[137-9]|6[0-8]\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""180\"",\""180[02]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""690\""]]]],\""AE\"":[\""971\"",\""[2-79]\\\\d{7,8}|800\\\\d{2,9}\"",[5,6,7,8,9,10,11,12],[[\""([2-4679])(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2-4679][2-8]\""]],[\""(5\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""5\""]],[\""([479]00)(\\\\d)(\\\\d{5})\"",\""$1 $2 $3\"",[\""[479]00\""],\""$1\""],[\""([68]00)(\\\\d{2,9})\"",\""$1 $2\"",[\""[68]00\""],\""$1\""]],\""0\"",\""0$1\""],\""AF\"":[\""93\"",\""[2-7]\\\\d{8}\"",[9],[[\""([2-7]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2-7]\""]]],\""0\"",\""0$1\""],\""AG\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""268\""],\""AI\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""264\""],\""AL\"":[\""355\"",\""[2-57]\\\\d{7}|6\\\\d{8}|8\\\\d{5,7}|9\\\\d{5}\"",[6,7,8,9],[[\""(4)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""4[0-6]\""]],[\""(6\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""6\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2358][2-5]|4[7-9]\""]],[\""(\\\\d{3})(\\\\d{3,5})\"",\""$1 $2\"",[\""[235][16-9]|[79]|8[016-9]\""]]],\""0\"",\""0$1\""],\""AM\"":[\""374\"",\""[1-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\"",[\""1|47\""]],[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\"",[\""4[1349]|[5-7]|88|9[1-9]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""[23]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""8|90\""],\""0 $1\""]],\""0\"",\""(0$1)\""],\""AO\"":[\""244\"",\""[29]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\""]]],\""AR\"":[\""54\"",\""11\\\\d{8}|[2368]\\\\d{9}|9\\\\d{10}\"",[10,11],[[\""([68]\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[68]\""]],[\""(9)(11)(\\\\d{4})(\\\\d{4})\"",\""$2 15-$3-$4\"",[\""911\""],null,null,\""$1 $2 $3-$4\""],[\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$2 15-$3-$4\"",[\""9(?:2[2-4689]|3[3-8])\"",\""9(?:2(?:2[013]|3[067]|49|6[01346]|8|9[147-9])|3(?:36|4[1-358]|5[138]|6|7[069]|8[013578]))\"",\""9(?:2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3[4-6]|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45])))\"",\""9(?:2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3(?:4|5[014]|6[1-39])|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45])))\""],null,null,\""$1 $2 $3-$4\""],[\""(9)(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\""$2 15-$3-$4\"",[\""9[23]\""],null,null,\""$1 $2 $3-$4\""],[\""(11)(\\\\d{4})(\\\\d{4})\"",\""$1 $2-$3\"",[\""11\""],null,\""true\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2-$3\"",[\""2(?:2[013]|3[067]|49|6[01346]|8|9[147-9])|3(?:36|4[1-358]|5[138]|6|7[069]|8[013578])\"",\""2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3[4-6]|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45]))\"",\""2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3(?:4|5[014]|6[1-39])|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45]))\""],null,\""true\""],[\""(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\""$1 $2-$3\"",[\""[23]\""],null,\""true\""]],\""0\"",\""0$1\"",\""0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))?15)?\"",\""9$1\""],\""AS\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""684\""],\""AT\"":[\""43\"",\""[1-9]\\\\d{3,12}\"",[4,5,6,7,8,9,10,11,12,13],[[\""(116\\\\d{3})\"",\""$1\"",[\""116\""],\""$1\""],[\""(1)(\\\\d{3,12})\"",\""$1 $2\"",[\""1\""]],[\""(5\\\\d)(\\\\d{3,5})\"",\""$1 $2\"",[\""5[079]\""]],[\""(5\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""5[079]\""]],[\""(5\\\\d)(\\\\d{4})(\\\\d{4,7})\"",\""$1 $2 $3\"",[\""5[079]\""]],[\""(\\\\d{3})(\\\\d{3,10})\"",\""$1 $2\"",[\""(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:[28]0|32)|[89]\""]],[\""(\\\\d{4})(\\\\d{3,9})\"",\""$1 $2\"",[\""2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-9]|5[468])|7(?:[24][1-8]|35|[5-79])\""]]],\""0\"",\""0$1\""],\""AU\"":[\""61\"",\""1\\\\d{4,9}|[2-578]\\\\d{8}\"",[5,6,7,8,9,10],[[\""([2378])(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2378]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""14|[45]\""],\""0$1\""],[\""(16)(\\\\d{3,4})\"",\""$1 $2\"",[\""16\""],\""0$1\""],[\""(16)(\\\\d{3})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""16\""],\""0$1\""],[\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[389]0\"",\""1(?:[38]0|9)0\""]],[\""(180)(2\\\\d{3})\"",\""$1 $2\"",[\""180\"",\""1802\""]],[\""(19\\\\d)(\\\\d{3})\"",\""$1 $2\"",[\""19[13]\""]],[\""(19\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""19[679]\""]],[\""(13)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""13[1-9]\""]]],\""0\"",null,null,null,null,null,[[\""[237]\\\\d{8}|8(?:51(?:0(?:0[03-9]|[1247]\\\\d|3[2-9]|5[0-8]|6[1-9]|8[0-6])|1(?:1[69]|[23]\\\\d|4[0-4]))|[6-8]\\\\d{4}|9(?:[02-9]\\\\d{3}|1(?:[0-57-9]\\\\d{2}|6[0135-9]\\\\d)))\\\\d{3}\"",[9]],[\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[6-9]|7[02-9]|8[12457-9]|9[017-9])\\\\d{6}\"",[9]],[\""180(?:0\\\\d{3}|2)\\\\d{3}\"",[7,10]],[\""19(?:0[0126]\\\\d|[679])\\\\d{5}\"",[8,10]],[\""500\\\\d{6}\"",[9]],null,null,[\""16\\\\d{3,7}\"",[5,6,7,8,9]],[\""550\\\\d{6}\"",[9]],[\""13(?:00\\\\d{3}|45[0-4]|\\\\d)\\\\d{3}\"",[6,8,10]]]],\""AW\"":[\""297\"",\""[25-9]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""AX\"":[\""358\"",\""1\\\\d{5,11}|[35]\\\\d{5,9}|2\\\\d{4,9}|4\\\\d{5,10}|6\\\\d{7,9}|7\\\\d{4,9}|8\\\\d{6,9}\"",[5,6,7,8,9,10,11,12],[[\""(\\\\d{3})(\\\\d{3,7})\"",\""$1 $2\"",[\""(?:[1-3]0|[6-8])0\""]],[\""(75\\\\d{3})\"",\""$1\"",[\""75[12]\""]],[\""(116\\\\d{3})\"",\""$1\"",[\""116\""],\""$1\""],[\""(\\\\d{2})(\\\\d{4,10})\"",\""$1 $2\"",[\""[14]|2[09]|50|7[135]\""]],[\""(\\\\d)(\\\\d{4,11})\"",\""$1 $2\"",[\""[25689][1-8]|3\""]]],\""0\"",null,null,null,null,null,[[\""18[1-8]\\\\d{3,9}\"",[6,7,8,9,10,11,12]],[\""4\\\\d{5,10}|50\\\\d{4,8}\"",[6,7,8,9,10,11]],[\""800\\\\d{4,7}\"",[7,8,9,10]],[\""[67]00\\\\d{5,6}\"",[8,9]],null,null,[\""[13]0\\\\d{4,8}|2(?:0(?:[016-8]\\\\d{3,7}|[2-59]\\\\d{2,7})|9\\\\d{4,8})|60(?:[12]\\\\d{5,6}|6\\\\d{7})|7(?:1\\\\d{7}|3\\\\d{8}|5[03-9]\\\\d{2,7})\"",[5,6,7,8,9,10]]]],\""AZ\"":[\""994\"",\""[1-9]\\\\d{8}\"",[9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""1[28]|2(?:[0-36]|[45]2)|365\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[4-8]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""9\""],\""0$1\""]],\""0\"",\""(0$1)\""],\""BA\"":[\""387\"",\""[3-9]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2-$3\"",[\""[3-5]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""6[1-356]|[7-9]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""6[047]\""]]],\""0\"",\""0$1\""],\""BB\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""246\""],\""BD\"":[\""880\"",\""[2-79]\\\\d{5,9}|1\\\\d{9}|8[0-7]\\\\d{4,8}\"",[6,7,8,9,10],[[\""(2)(\\\\d{7,8})\"",\""$1-$2\"",[\""2\""]],[\""(\\\\d{2})(\\\\d{4,6})\"",\""$1-$2\"",[\""[3-79]1\""]],[\""(\\\\d{4})(\\\\d{3,6})\"",\""$1-$2\"",[\""1|3(?:0|[2-58]2)|4(?:0|[25]2|3[23]|[4689][25])|5(?:[02-578]2|6[25])|6(?:[0347-9]2|[26][25])|7[02-9]2|8(?:[023][23]|[4-7]2)|9(?:[02][23]|[458]2|6[016])\""]],[\""(\\\\d{3})(\\\\d{3,7})\"",\""$1-$2\"",[\""[3-79][2-9]|8\""]]],\""0\"",\""0$1\""],\""BE\"":[\""32\"",\""[1-9]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""4[5-9]\""]],[\""(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[23]|4[23]|9[2-4]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[156]|7[018]|8(?:0[1-9]|[1-79])\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""(?:80|9)0\""]]],\""0\"",\""0$1\""],\""BF\"":[\""226\"",\""[25-7]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""BG\"":[\""359\"",\""[23567]\\\\d{5,7}|[489]\\\\d{6,8}\"",[6,7,8,9],[[\""(2)(\\\\d)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""2\""]],[\""(2)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""2\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""43[124-7]|70[1-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3\"",[\""43[124-7]|70[1-9]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[78]00\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""99[69]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""48|8[7-9]|9[08]\""]]],\""0\"",\""0$1\""],\""BH\"":[\""973\"",\""[136-9]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\""]]],\""BI\"":[\""257\"",\""[267]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""BJ\"":[\""229\"",\""[2689]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[2689]\""]]]],\""BL\"":[\""590\"",\""[56]\\\\d{8}\"",[9],[[\""([56]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2-$3\"",[\""590|69[01]\""]]],\""0\"",null,null,null,null,null,[[\""590(?:2[7-9]|5[12]|87)\\\\d{4}\""],[\""69(?:0\\\\d{2}|1(?:2[29]|3[0-5]))\\\\d{4}\""]]],\""BM\"":[\""1\"",\""[4589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""441\""],\""BN\"":[\""673\"",\""[2-578]\\\\d{6}\"",[7],[[\""([2-578]\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[2-578]\""]]]],\""BO\"":[\""591\"",\""[23467]\\\\d{7}|8\\\\d{8}\"",[8,9],[[\""([234])(\\\\d{7})\"",\""$1 $2\"",[\""[2-4]\""]],[\""([67]\\\\d{7})\"",\""$1\"",[\""[67]\""]],[\""(800)(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""800\""]]],\""0\"",null,\""0(1\\\\d)?\""],\""BQ\"":[\""599\"",\""[347]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[13-7]\""]],[\""(9)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9\""]]],null,null,null,null,null,null,[[\""(?:318[023]|41(?:6[023]|70)|7(?:1[578]|50)\\\\d)\\\\d{3}\""],[\""(?:31(?:8[14-8]|9[14578])|416[145-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\""]]],\""BR\"":[\""55\"",\""[1-46-9]\\\\d{7,10}|5(?:[0-4]\\\\d{7,9}|5(?:[2-8]\\\\d{7}|9\\\\d{7,8}))\"",[8,9,10,11],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""300|40[02]\"",\""300|40(?:0|20)\""]],[\""([3589]00)(\\\\d{2,3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[3589]00\""],\""0$1\""],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2-$3\"",[\""[1-9][1-9]\""],\""($1)\""],[\""(\\\\d{2})(\\\\d{5})(\\\\d{4})\"",\""$1 $2-$3\"",[\""[1-9][1-9]9\""],\""($1)\""]],\""0\"",null,\""0(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\"",\""$2\""],\""BS\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""242\""],\""BT\"":[\""975\"",\""[1-8]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""1|77\""]],[\""([2-8])(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2-68]|7[246]\""]]]],\""BW\"":[\""267\"",\""[2-79]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[2-6]\""]],[\""(7\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""7\""]],[\""(90)(\\\\d{5})\"",\""$1 $2\"",[\""90\""]]]],\""BY\"":[\""375\"",\""[1-4]\\\\d{8}|8(?:0(?:0\\\\d{3,7}|[13]\\\\d{7})|(?:10|20\\\\d)\\\\d{7})|9\\\\d{9,10}\"",[6,7,8,9,10,11],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""17[0-3589]|2[4-9]|[34]\"",\""17(?:[02358]|1[0-2]|9[0189])|2[4-9]|[34]\""],\""8 0$1\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""1(?:5[24]|6[235]|7[467])|2(?:1[246]|2[25]|3[26])\"",\""1(?:5[24]|6(?:2|3[04-9]|5[0346-9])|7(?:[46]|7[37-9]))|2(?:1[246]|2[25]|3[26])\""],\""8 0$1\""],[\""(\\\\d{4})(\\\\d{2})(\\\\d{3})\"",\""$1 $2-$3\"",[\""1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\"",\""1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\""],\""8 0$1\""],[\""([89]\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8[01]|9\""],\""8 $1\""],[\""(82\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""82\""],\""8 $1\""],[\""(800)(\\\\d{3})\"",\""$1 $2\"",[\""800\""],\""8 $1\""],[\""(800)(\\\\d{2})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""800\""],\""8 $1\""]],\""8\"",null,\""8?0?\""],\""BZ\"":[\""501\"",\""[2-8]\\\\d{6}|0\\\\d{10}\"",[7,11],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\"",[\""[2-8]\""]],[\""(0)(800)(\\\\d{4})(\\\\d{3})\"",\""$1-$2-$3-$4\"",[\""080\"",\""0800\""]]]],\""CA\"":[\""1\"",\""[2-9]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,null,[[\""(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|48|79|8[17])|6(?:0[04]|13|22|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}\""],[\""\""],[\""8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\""],[\""900[2-9]\\\\d{6}\""],[\""5(?:(?:00|22|33|44|66|77|88)[2-9]|21[23])\\\\d{6}\""]]],\""CC\"":[\""61\"",\""[1458]\\\\d{5,9}\"",[6,7,8,9,10],[[\""([2378])(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2378]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""14|[45]\""],\""0$1\""],[\""(16)(\\\\d{3,4})\"",\""$1 $2\"",[\""16\""],\""0$1\""],[\""(16)(\\\\d{3})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""16\""],\""0$1\""],[\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[389]0\"",\""1(?:[38]0|9)0\""]],[\""(180)(2\\\\d{3})\"",\""$1 $2\"",[\""180\"",\""1802\""]],[\""(19\\\\d)(\\\\d{3})\"",\""$1 $2\"",[\""19[13]\""]],[\""(19\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""19[679]\""]],[\""(13)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""13[1-9]\""]]],\""0\"",null,null,null,null,null,[[\""8(?:51(?:0(?:02|31|60)|118)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:08|22|68)|4[29]8|62\\\\d|70[23]|959))\\\\d{3}\"",[9]],[\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[6-9]|7[02-9]|8[12547-9]|9[017-9])\\\\d{6}\"",[9]],[\""180(?:0\\\\d{3}|2)\\\\d{3}\"",[7,10]],[\""19(?:0[0126]\\\\d|[679])\\\\d{5}\"",[8,10]],[\""500\\\\d{6}\"",[9]],null,null,null,[\""550\\\\d{6}\"",[9]],[\""13(?:00\\\\d{2})?\\\\d{4}\"",[6,10]]]],\""CD\"":[\""243\"",\""[2-6]\\\\d{6}|[18]\\\\d{6,8}|9\\\\d{8}\"",[7,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""12\""]],[\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""8[0-2459]|9\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""88\""]],[\""(\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""[1-6]\""]]],\""0\"",\""0$1\""],\""CF\"":[\""236\"",\""[278]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""CG\"":[\""242\"",\""[028]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""801\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[02]\""]],[\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""800\""]]]],\""CH\"":[\""41\"",\""[2-9]\\\\d{8}|860\\\\d{9}\"",[9],[[\""([2-9]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[2-7]|[89]1\""]],[\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""8[047]|90\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4 $5\"",[\""860\""]]],\""0\"",\""0$1\""],\""CI\"":[\""225\"",\""[02-8]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""CK\"":[\""682\"",\""[2-8]\\\\d{4}\"",[5],[[\""(\\\\d{2})(\\\\d{3})\"",\""$1 $2\""]]],\""CL\"":[\""56\"",\""1230\\\\d{7}|[2-46-9]\\\\d{8,10}|5[1-3578]\\\\d{7}\"",[9,10,11],[[\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[23]\""],\""($1)\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[357]|4[1-35]|6[13-57]\""],\""($1)\""],[\""(9)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9\""]],[\""(44)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""44\""]],[\""([68]00)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[68]00\""],\""$1\""],[\""(600)(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""600\""],\""$1\""],[\""(1230)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""123\"",\""1230\""],\""$1\""],[\""(\\\\d{5})(\\\\d{4})\"",\""$1 $2\"",[\""219\""],\""($1)\""]],\""0\"",\""0$1\"",\""0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))\""],\""CM\"":[\""237\"",\""[2368]\\\\d{7,8}\"",[8,9],[[\""([26])(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4 $5\"",[\""[26]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[23]|88\""]]]],\""CN\"":[\""86\"",\""[1-7]\\\\d{6,11}|8[0-357-9]\\\\d{6,9}|9\\\\d{7,10}\"",[7,8,9,10,11,12],[[\""([48]00)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[48]00\""]],[\""(\\\\d{2})(\\\\d{5,6})\"",\""$1 $2\"",[\""(?:10|2\\\\d)[19]\"",\""(?:10|2\\\\d)(?:10|9[56])\"",\""(?:10|2\\\\d)(?:100|9[56])\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""[3-9]\"",\""[3-9]\\\\d\\\\d[19]\"",\""[3-9]\\\\d\\\\d(?:10|9[56])\""],\""0$1\""],[\""(21)(\\\\d{4})(\\\\d{4,6})\"",\""$1 $2 $3\"",[\""21\""],\""0$1\"",\""true\""],[\""([12]\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""10[1-9]|2[02-9]\"",\""10[1-9]|2[02-9]\"",\""10(?:[1-79]|8(?:0[1-9]|[1-9]))|2[02-9]\""],\""0$1\"",\""true\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[47-9]|7|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[36-8]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])\""],\""0$1\"",\""true\""],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""3(?:11|7[179])|4(?:[15]1|3[1-35])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:[39]1|5[457]|6[09])|8(?:[57]1|98)\""],\""0$1\"",\""true\""],[\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""807\"",\""8078\""],\""0$1\"",\""true\""],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[3-57-9]|66)\""]],[\""(10800)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""108\"",\""1080\"",\""10800\""]],[\""(\\\\d{3})(\\\\d{7,8})\"",\""$1 $2\"",[\""950\""]]],\""0\"",null,\""(1(?:[129]\\\\d{3}|79\\\\d{2}))|0\""],\""CO\"":[\""57\"",\""(?:[13]\\\\d{0,3}|[24-8])\\\\d{7}\"",[8,10,11],[[\""(\\\\d)(\\\\d{7})\"",\""$1 $2\"",[\""1(?:[2-7]|8[2-9]|9[0-3])|[24-8]\"",\""1(?:[2-7]|8[2-9]|9(?:09|[1-3]))|[24-8]\""],\""($1)\""],[\""(\\\\d{3})(\\\\d{7})\"",\""$1 $2\"",[\""3\""]],[\""(1)(\\\\d{3})(\\\\d{7})\"",\""$1-$2-$3\"",[\""1(?:80|9[04])\"",\""1(?:800|9(?:0[01]|4[78]))\""],\""0$1\"",null,\""$1 $2 $3\""]],\""0\"",null,\""0([3579]|4(?:44|56))?\""],\""CR\"":[\""506\"",\""[24-9]\\\\d{7,9}\"",[8,10],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[24-7]|8[3-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[89]0\""]]],null,null,\""(19(?:0[012468]|1[09]|20|66|77|99))\""],\""CU\"":[\""53\"",\""[2-57]\\\\d{5,7}\"",[6,7,8],[[\""(\\\\d)(\\\\d{6,7})\"",\""$1 $2\"",[\""7\""]],[\""(\\\\d{2})(\\\\d{4,6})\"",\""$1 $2\"",[\""[2-4]\""]],[\""(\\\\d)(\\\\d{7})\"",\""$1 $2\"",[\""5\""],\""0$1\""]],\""0\"",\""(0$1)\""],\""CV\"":[\""238\"",\""[2-59]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\""]]],\""CW\"":[\""599\"",\""[134679]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[13-7]\""]],[\""(9)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9\""]]],null,null,null,null,null,null,[[\""9(?:[48]\\\\d{2}|50\\\\d|7(?:2[0-24]|[34]\\\\d|6[35-7]|77|8[7-9]))\\\\d{4}\"",[8]],[\""9(?:5(?:[12467]\\\\d|3[01])|6(?:[15-9]\\\\d|3[01]))\\\\d{4}\"",[8]],null,null,null,null,null,[\""955\\\\d{5}\"",[8]],null,[\""60[0-2]\\\\d{4}\"",[7]]]],\""CX\"":[\""61\"",\""[1458]\\\\d{5,9}\"",[6,7,8,9,10],[[\""([2378])(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2378]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""14|[45]\""],\""0$1\""],[\""(16)(\\\\d{3,4})\"",\""$1 $2\"",[\""16\""],\""0$1\""],[\""(16)(\\\\d{3})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""16\""],\""0$1\""],[\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[389]0\"",\""1(?:[38]0|9)0\""]],[\""(180)(2\\\\d{3})\"",\""$1 $2\"",[\""180\"",\""1802\""]],[\""(19\\\\d)(\\\\d{3})\"",\""$1 $2\"",[\""19[13]\""]],[\""(19\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""19[679]\""]],[\""(13)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""13[1-9]\""]]],\""0\"",null,null,null,null,null,[[\""8(?:51(?:0(?:01|30|59)|117)|91(?:00[6-9]|1(?:21|49|78|81)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\\\d|7(?:0[01]|1[0-2])|958))\\\\d{3}\"",[9]],[\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[6-9]|7[02-9]|8[12547-9]|9[017-9])\\\\d{6}\"",[9]],[\""180(?:0\\\\d{3}|2)\\\\d{3}\"",[7,10]],[\""19(?:0[0126]\\\\d|[679])\\\\d{5}\"",[8,10]],[\""500\\\\d{6}\"",[9]],null,null,null,[\""550\\\\d{6}\"",[9]],[\""13(?:00\\\\d{2})?\\\\d{4}\"",[6,8,10]]]],\""CY\"":[\""357\"",\""[257-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\""]]],\""CZ\"":[\""420\"",\""[2-8]\\\\d{8}|9\\\\d{8,11}\"",[9],[[\""([2-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2-8]|9[015-7]\""]],[\""(96\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""96\""]],[\""(9\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""9[36]\""]]]],\""DE\"":[\""49\"",\""[1-35-9]\\\\d{3,14}|4(?:[0-8]\\\\d{3,12}|9(?:[0-37]\\\\d|4(?:[1-35-8]|4\\\\d?)|5\\\\d{1,2}|6[1-8]\\\\d?)\\\\d{2,8})\"",[4,5,6,7,8,9,10,11,12,13,14,15],[[\""(1\\\\d{2})(\\\\d{7,8})\"",\""$1 $2\"",[\""1[67]\""]],[\""(15\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""15[0568]\""]],[\""(1\\\\d{3})(\\\\d{7})\"",\""$1 $2\"",[\""15\""]],[\""(\\\\d{2})(\\\\d{3,11})\"",\""$1 $2\"",[\""3[02]|40|[68]9\""]],[\""(\\\\d{3})(\\\\d{3,11})\"",\""$1 $2\"",[\""2(?:0[1-389]|1[124]|2[18]|3[14]|[4-9]1)|3(?:[35-9][15]|4[015])|[4-8][1-9]1|9(?:06|[1-9]1)\""]],[\""(\\\\d{4})(\\\\d{2,11})\"",\""$1 $2\"",[\""[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|[7-9](?:0[1-9]|[1-9])\"",\""[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|[49][1246]|6[1-4]|7[13468]|8[13568])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|[7-9](?:0[1-9]|[1-9])\""]],[\""(3\\\\d{4})(\\\\d{1,10})\"",\""$1 $2\"",[\""3\""]],[\""(800)(\\\\d{7,12})\"",\""$1 $2\"",[\""800\""]],[\""(\\\\d{3})(\\\\d)(\\\\d{4,10})\"",\""$1 $2 $3\"",[\""1(?:37|80)|900\"",\""1(?:37|80)|900[1359]\""]],[\""(1\\\\d{2})(\\\\d{5,11})\"",\""$1 $2\"",[\""181\""]],[\""(18\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""185\"",\""1850\"",\""18500\""]],[\""(18\\\\d{2})(\\\\d{7})\"",\""$1 $2\"",[\""18[68]\""]],[\""(18\\\\d)(\\\\d{8})\"",\""$1 $2\"",[\""18[2-579]\""]],[\""(700)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""700\""]],[\""(138)(\\\\d{4})\"",\""$1 $2\"",[\""138\""]],[\""(15[013-68])(\\\\d{2})(\\\\d{8})\"",\""$1 $2 $3\"",[\""15[013-68]\""]],[\""(15[279]\\\\d)(\\\\d{2})(\\\\d{7})\"",\""$1 $2 $3\"",[\""15[279]\""]],[\""(1[67]\\\\d)(\\\\d{2})(\\\\d{7,8})\"",\""$1 $2 $3\"",[\""1(?:6[023]|7)\""]]],\""0\"",\""0$1\""],\""DJ\"":[\""253\"",\""[27]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""DK\"":[\""45\"",\""[2-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""DM\"":[\""1\"",\""[57-9]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""767\""],\""DO\"":[\""1\"",\""[589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""8[024]9\""],\""DZ\"":[\""213\"",\""(?:[1-4]|[5-9]\\\\d)\\\\d{7}\"",[8,9],[[\""([1-4]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[1-4]\""]],[\""([5-8]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[5-8]\""]],[\""(9\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""9\""]]],\""0\"",\""0$1\""],\""EC\"":[\""593\"",\""1\\\\d{9,10}|[2-8]\\\\d{7}|9\\\\d{8}\"",[8,9,10,11],[[\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2-$3\"",[\""[247]|[356][2-8]\""],null,null,\""$1-$2-$3\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9\""],\""0$1\""],[\""(1800)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""180\"",\""1800\""],\""$1\""]],\""0\"",\""(0$1)\""],\""EE\"":[\""372\"",\""[3-9]\\\\d{6,7}|800\\\\d{6,7}\"",[7,8,10],[[\""([3-79]\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]\"",\""[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]\""]],[\""(70)(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""70\""]],[\""(8000)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""800\"",\""8000\""]],[\""([458]\\\\d{3})(\\\\d{3,4})\"",\""$1 $2\"",[\""40|5|8(?:00|[1-5])\"",\""40|5|8(?:00[1-9]|[1-5])\""]]]],\""EG\"":[\""20\"",\""1\\\\d{4,9}|[24-6]\\\\d{8}|3\\\\d{7}|[89]\\\\d{8,9}\"",[8,9,10],[[\""(\\\\d)(\\\\d{7,8})\"",\""$1 $2\"",[\""[23]\""]],[\""(\\\\d{2})(\\\\d{6,7})\"",\""$1 $2\"",[\""1(?:3|5[239])|[4-6]|[89][2-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1[0-25]|[89]00\""]]],\""0\"",\""0$1\""],\""EH\"":[\""212\"",\""[5-9]\\\\d{8}\"",[9],[[\""([5-7]\\\\d{2})(\\\\d{6})\"",\""$1-$2\"",[\""5(?:2[015-7]|3[0-4])|[67]\""]],[\""([58]\\\\d{3})(\\\\d{5})\"",\""$1-$2\"",[\""5(?:2[2-489]|3[5-9]|92)|892\"",\""5(?:2(?:[2-48]|9[0-7])|3(?:[5-79]|8[0-7])|924)|892\""]],[\""(5\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""5(?:29|38)\"",\""5(?:29|38)[89]\""]],[\""([5]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""5(?:4[067]|5[03])\""]],[\""(8[09])(\\\\d{7})\"",\""$1-$2\"",[\""8(?:0|9[013-9])\""]]],\""0\"",null,null,null,null,\""528[89]\""],\""ER\"":[\""291\"",\""[178]\\\\d{6}\"",[7],[[\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\""]],\""0\"",\""0$1\""],\""ES\"":[\""34\"",\""[5-9]\\\\d{8}\"",[9],[[\""([89]00)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[89]00\""]],[\""([5-9]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[568]|[79][0-8]\""]]]],\""ET\"":[\""251\"",\""[1-59]\\\\d{8}\"",[9],[[\""([1-59]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[1-59]\""]]],\""0\"",\""0$1\""],\""FI\"":[\""358\"",\""1\\\\d{4,11}|[2-9]\\\\d{4,10}\"",[5,6,7,8,9,10,11,12],[[\""(\\\\d{3})(\\\\d{3,7})\"",\""$1 $2\"",[\""(?:[1-3]0|[6-8])0\""]],[\""(75\\\\d{3})\"",\""$1\"",[\""75[12]\""]],[\""(116\\\\d{3})\"",\""$1\"",[\""116\""],\""$1\""],[\""(\\\\d{2})(\\\\d{4,10})\"",\""$1 $2\"",[\""[14]|2[09]|50|7[135]\""]],[\""(\\\\d)(\\\\d{4,11})\"",\""$1 $2\"",[\""[25689][1-8]|3\""]]],\""0\"",\""0$1\"",null,null,null,null,[[\""1(?:[3569][1-8]\\\\d{3,9}|[47]\\\\d{5,10})|2[1-8]\\\\d{3,9}|3(?:[1-8]\\\\d{3,9}|9\\\\d{4,8})|[5689][1-8]\\\\d{3,9}\""],[\""4(?:[0-8]\\\\d{4,9}|9\\\\d{3,8})|50\\\\d{4,8}\"",[6,7,8,9,10,11]],[\""800\\\\d{4,7}\"",[7,8,9,10]],[\""[67]00\\\\d{5,6}\"",[8,9]],null,null,[\""[13]0\\\\d{4,8}|2(?:0(?:[016-8]\\\\d{3,7}|[2-59]\\\\d{2,7})|9\\\\d{4,8})|60(?:[12]\\\\d{5,6}|6\\\\d{7})|7(?:1\\\\d{7}|3\\\\d{8}|5[03-9]\\\\d{3,7})\"",[5,6,7,8,9,10]]]],\""FJ\"":[\""679\"",\""[2-9]\\\\d{6}|0\\\\d{10}\"",[7,11],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[2-9]\""]],[\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0\""]]]],\""FK\"":[\""500\"",\""[2-7]\\\\d{4}\"",[5]],\""FM\"":[\""691\"",\""[39]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""FO\"":[\""298\"",\""[2-9]\\\\d{5}\"",[6],[[\""(\\\\d{6})\"",\""$1\""]],null,null,\""(10(?:01|[12]0|88))\""],\""FR\"":[\""33\"",\""[1-9]\\\\d{8}\"",[9],[[\""([1-79])(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4 $5\"",[\""[1-79]\""]],[\""(8\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""8\""],\""0 $1\""]],\""0\"",\""0$1\""],\""GA\"":[\""241\"",\""0?\\\\d{7}\"",[7,8],[[\""(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[2-7]\""],\""0$1\""],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""0\""]]]],\""GB\"":[\""44\"",\""\\\\d{7,10}\"",[7,9,10],[[\""(7\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7(?:[1-57-9]|62)\"",\""7(?:[1-57-9]|624)\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2|5[56]|7[06]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[02-9]1|1)|3|9[018]\""]],[\""(\\\\d{5})(\\\\d{4,5})\"",\""$1 $2\"",[\""1(?:38|5[23]|69|76|94)\"",\""1(?:(?:38|69)7|5(?:24|39)|768|946)\"",\""1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\""]],[\""(1\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""1\""]],[\""(800)(\\\\d{4})\"",\""$1 $2\"",[\""800\"",\""8001\"",\""80011\"",\""800111\"",\""8001111\""]],[\""(845)(46)(4\\\\d)\"",\""$1 $2 $3\"",[\""845\"",\""8454\"",\""84546\"",\""845464\""]],[\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8(?:4[2-5]|7[0-3])\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""80\""]],[\""(800)(\\\\d{6})\"",\""$1 $2\"",[\""800\""]]],\""0\"",\""0$1\"",null,null,null,null,[[\""2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{7}|1(?:1(?:3[0-48]|[46][0-4]|5[0-26-9]|[78][0-49])|21[0-7]|31[0-8]|[4-69]1\\\\d)\\\\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)|3(?:0\\\\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[28][02-57-9]|[37]\\\\d|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\\\\d|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\\\d|9[2-57]))\\\\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\\\\d)|276\\\\d|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[567]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}|176888[2-46-8]\\\\d{2}|16977[23]\\\\d{3}\"",[9,10]],[\""7(?:[1-3]\\\\d{3}|4(?:[0-46-9]\\\\d{2}|5(?:[0-689]\\\\d|7[0-57-9]))|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])\\\\d|7(?:0(?:0[01]|[1-9]\\\\d)|[1-7]\\\\d{2}|8[02-9]\\\\d|9[0-689]\\\\d)|8(?:[014-9]\\\\d|[23][0-8])\\\\d|9(?:[024-9]\\\\d{2}|1(?:[02-9]\\\\d|1[028])|3[0-689]\\\\d))\\\\d{5}\"",[10]],[\""80(?:0(?:1111|\\\\d{6,7})|8\\\\d{7})\""],[\""(?:87[123]|9(?:[01]\\\\d|8[2349]))\\\\d{7}\"",[10]],[\""70\\\\d{8}\"",[10]],null,[\""(?:3[0347]|55)\\\\d{8}\"",[10]],[\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\"",[10]],[\""56\\\\d{8}\"",[10]],[\""8(?:4(?:5464\\\\d|[2-5]\\\\d{7})|70\\\\d{7})\"",[7,10]]]],\""GD\"":[\""1\"",\""[4589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""473\""],\""GE\"":[\""995\"",\""[34578]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[348]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""7\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""5\""]]],\""0\""],\""GF\"":[\""594\"",\""[56]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]],\""0\"",\""0$1\""],\""GG\"":[\""44\"",\""[135789]\\\\d{6,9}\"",[7,9,10],[[\""(7\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7(?:[1-57-9]|62)\"",\""7(?:[1-57-9]|624)\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2|5[56]|7[06]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[02-9]1|1)|3|9[018]\""]],[\""(\\\\d{5})(\\\\d{4,5})\"",\""$1 $2\"",[\""1(?:38|5[23]|69|76|94)\"",\""1(?:(?:38|69)7|5(?:24|39)|768|946)\"",\""1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\""]],[\""(1\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""1\""]],[\""(800)(\\\\d{4})\"",\""$1 $2\"",[\""800\"",\""8001\"",\""80011\"",\""800111\"",\""8001111\""]],[\""(845)(46)(4\\\\d)\"",\""$1 $2 $3\"",[\""845\"",\""8454\"",\""84546\"",\""845464\""]],[\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8(?:4[2-5]|7[0-3])\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""80\""]],[\""(800)(\\\\d{6})\"",\""$1 $2\"",[\""800\""]]],\""0\"",null,null,null,null,null,[[\""1481[25-9]\\\\d{5}\"",[10]],[\""7(?:781\\\\d|839\\\\d|911[17])\\\\d{5}\"",[10]],[\""80(?:0(?:1111|\\\\d{6,7})|8\\\\d{7})\""],[\""(?:87[123]|9(?:[01]\\\\d|8[0-3]))\\\\d{7}\"",[10]],[\""70\\\\d{8}\"",[10]],null,[\""(?:3[0347]|55)\\\\d{8}\"",[10]],[\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\"",[10]],[\""56\\\\d{8}\"",[10]],[\""8(?:4(?:5464\\\\d|[2-5]\\\\d{7})|70\\\\d{7})\"",[7,10]]]],\""GH\"":[\""233\"",\""[235]\\\\d{8}|8\\\\d{7}\"",[8,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[235]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""8\""]]],\""0\"",\""0$1\""],\""GI\"":[\""350\"",\""[256]\\\\d{7}\"",[8],[[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""2\""]]]],\""GL\"":[\""299\"",\""[1-689]\\\\d{5}\"",[6],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\""]]],\""GM\"":[\""220\"",\""[2-9]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""GN\"":[\""224\"",\""[367]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""3\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[67]\""]]]],\""GP\"":[\""590\"",\""[56]\\\\d{8}\"",[9],[[\""([56]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2-$3\"",[\""590|69[01]\""]]],\""0\"",\""0$1\"",null,null,null,null,[[\""590(?:0[1-68]|1[0-2]|2[0-68]|3[1289]|4[0-24-9]|5[3-579]|6[0189]|7[08]|8[0-689]|9\\\\d)\\\\d{4}\""],[\""69(?:0\\\\d{2}|1(?:2[29]|3[0-5]))\\\\d{4}\""]]],\""GQ\"":[\""240\"",\""[23589]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[235]\""]],[\""(\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""[89]\""]]]],\""GR\"":[\""30\"",\""[26-9]\\\\d{9}\"",[10],[[\""([27]\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""21|7\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[2-9]1|[689]\""]],[\""(2\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""2[2-9][02-9]\""]]]],\""GT\"":[\""502\"",\""[2-7]\\\\d{7}|1[89]\\\\d{9}\"",[8,11],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[2-7]\""]],[\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]]]],\""GU\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""671\""],\""GW\"":[\""245\"",\""(?:4(?:0\\\\d{5}|4\\\\d{7})|9\\\\d{8})\"",[7,9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""44|9[5-7]\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""40\""]]]],\""GY\"":[\""592\"",\""[2-46-9]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""HK\"":[\""852\"",\""[2-7]\\\\d{7}|8[0-3]\\\\d{6,7}|9\\\\d{4,10}\"",[5,6,7,8,9,11],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[2-7]|[89](?:0[1-9]|[1-9])\""]],[\""(800)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""800\""]],[\""(900)(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""900\""]],[\""(900)(\\\\d{2,5})\"",\""$1 $2\"",[\""900\""]]]],\""HN\"":[\""504\"",\""[237-9]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1-$2\""]]],\""HR\"":[\""385\"",\""[1-7]\\\\d{5,8}|[89]\\\\d{6,8}\"",[6,7,8,9],[[\""(1)(\\\\d{4})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1\""]],[\""([2-5]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[2-5]\""]],[\""(9\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""9\""]],[\""(6[01])(\\\\d{2})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""6[01]\""]],[\""([67]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[67]\""]],[\""(80[01])(\\\\d{2})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""80[01]\""]],[\""(80[01])(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""80[01]\""]]],\""0\"",\""0$1\""],\""HT\"":[\""509\"",\""[2-489]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\""]]],\""HU\"":[\""36\"",\""[1-9]\\\\d{7,8}\"",[8,9],[[\""(1)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[2-9]\""]]],\""06\"",\""($1)\""],\""ID\"":[\""62\"",\""(?:[1-79]\\\\d{6,10}|8\\\\d{7,11})\"",[7,8,9,10,11,12],[[\""(\\\\d{2})(\\\\d{5,8})\"",\""$1 $2\"",[\""2[124]|[36]1\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{5,8})\"",\""$1 $2\"",[\""2[035-9]|[36][02-9]|[4579]\""],\""(0$1)\""],[\""(8\\\\d{2})(\\\\d{3,4})(\\\\d{3})\"",\""$1-$2-$3\"",[\""8[1-35-9]\""]],[\""(8\\\\d{2})(\\\\d{4})(\\\\d{4,5})\"",\""$1-$2-$3\"",[\""8[1-35-9]\""]],[\""(1)(500)(\\\\d{3})\"",\""$1 $2 $3\"",[\""150\"",\""1500\""],\""$1\""],[\""(177)(\\\\d{6,8})\"",\""$1 $2\"",[\""177\""]],[\""(800)(\\\\d{5,7})\"",\""$1 $2\"",[\""800\""]],[\""(804)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""804\""]],[\""(80\\\\d)(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""80[79]\""]]],\""0\"",\""0$1\""],\""IE\"":[\""353\"",\""[124-9]\\\\d{6,9}\"",[7,8,9,10],[[\""(1)(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]],[\""(\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""2[24-9]|47|58|6[237-9]|9[35-9]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""40[24]|50[45]\""]],[\""(48)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""48\""]],[\""(818)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""818\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[24-69]|7[14]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""76|8[35-9]\""],\""0$1\""],[\""(8\\\\d)(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3 $4\"",[\""8[35-9]5\""],\""0$1\""],[\""(700)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""700\""],\""0$1\""],[\""(\\\\d{4})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1(?:5|8[059])\"",\""1(?:5|8[059]0)\""],\""$1\""]],\""0\"",\""(0$1)\""],\""IL\"":[\""972\"",\""1\\\\d{6,11}|[2-589]\\\\d{3}(?:\\\\d{3,6})?|6\\\\d{3}|7\\\\d{6,9}\"",[4,7,8,9,10,11,12],[[\""([2-489])(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[2-489]\""],\""0$1\""],[\""([57]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[57]\""],\""0$1\""],[\""(153)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3 $4\"",[\""153\""]],[\""(1)([7-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1-$2-$3-$4\"",[\""1[7-9]\""]],[\""(1255)(\\\\d{3})\"",\""$1-$2\"",[\""125\"",\""1255\""]],[\""(1200)(\\\\d{3})(\\\\d{3})\"",\""$1-$2-$3\"",[\""120\"",\""1200\""]],[\""(1212)(\\\\d{2})(\\\\d{2})\"",\""$1-$2-$3\"",[\""121\"",\""1212\""]],[\""(1599)(\\\\d{6})\"",\""$1-$2\"",[\""159\"",\""1599\""]],[\""(151)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2 $3-$4\"",[\""151\""]],[\""(\\\\d{4})\"",\""*$1\"",[\""[2-689]\""]]],\""0\""],\""IM\"":[\""44\"",\""[135789]\\\\d{6,9}\"",[10],[[\""(7\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7(?:[1-57-9]|62)\"",\""7(?:[1-57-9]|624)\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2|5[56]|7[06]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[02-9]1|1)|3|9[018]\""]],[\""(\\\\d{5})(\\\\d{4,5})\"",\""$1 $2\"",[\""1(?:38|5[23]|69|76|94)\"",\""1(?:(?:38|69)7|5(?:24|39)|768|946)\"",\""1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\""]],[\""(1\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""1\""]],[\""(800)(\\\\d{4})\"",\""$1 $2\"",[\""800\"",\""8001\"",\""80011\"",\""800111\"",\""8001111\""]],[\""(845)(46)(4\\\\d)\"",\""$1 $2 $3\"",[\""845\"",\""8454\"",\""84546\"",\""845464\""]],[\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8(?:4[2-5]|7[0-3])\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""80\""]],[\""(800)(\\\\d{6})\"",\""$1 $2\"",[\""800\""]]],\""0\"",null,null,null,null,null,[[\""1624[5-8]\\\\d{5}\""],[\""7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\""],[\""808162\\\\d{4}\""],[\""(?:872299|90[0167]624)\\\\d{4}\""],[\""70\\\\d{8}\""],null,[\""3(?:08162\\\\d|3\\\\d{5}|4(?:40[49]06|5624\\\\d)|7(?:0624\\\\d|2299\\\\d))\\\\d{3}|55\\\\d{8}\""],null,[\""56\\\\d{8}\""],[\""8(?:4(?:40[49]06|5624\\\\d)|70624\\\\d)\\\\d{3}\""]]],\""IN\"":[\""91\"",\""008\\\\d{9}|1\\\\d{7,12}|[2-9]\\\\d{9,10}\"",[8,9,10,11,12,13],[[\""(\\\\d{8})\"",\""$1\"",[\""561\"",\""5616\"",\""56161\""],\""$1\""],[\""(\\\\d{5})(\\\\d{5})\"",\""$1 $2\"",[\""6(?:[09]0|12|2[03689]|3[05-9])|7(?:[02-8]|19|9[037-9])|8(?:0[015-9]|[1-9])|9\"",\""6(?:[09]0|127|2(?:0[01]|39|6[02]|8[0-2]|9[04])|3(?:0[01]|5[0-2]|60|7[05]|81|9[02-5]))|7(?:[07]|19[0-5]|2(?:[0235-9]|[14][017-9])|3(?:[025-9]|[134][017-9])|4(?:[0-35689]|[47][017-9])|5(?:[02-46-9]|[15][017-9])|6(?:[02-9]|1[0-257-9])|8(?:[0-79]|8[0189])|9(?:[089]|31|7[02-9]))|8(?:0(?:[01589]|6[67]|7[02-9])|1(?:[0-57-9]|6[07-9])|2(?:[014][07-9]|[235-9])|3(?:[03-57-9]|[126][07-9])|[45]|6(?:[02457-9]|[136][07-9])|7(?:[078][07-9]|[1-69])|8(?:[0-25-9]|3[07-9]|4[047-9])|9(?:[02-9]|1[027-9]))|9\"",\""6(?:[09]0|1279|2(?:0[01]|39|6[02]|8[0-2]|9[04])|3(?:0[01]|5[0-2]|60|7[05]|81|9[02-5]))|7(?:0|19[0-5]|2(?:[0235-79]|[14][017-9]|8(?:[0-69]|[78][089]))|3(?:[05-8]|1(?:[0189]|7[5-9])|2(?:[0-49][089]|[5-8])|3[017-9]|4(?:[07-9]|11)|9(?:[01689]|[2-5][089]|7[0189]))|4(?:[056]|1(?:[0135-9]|[24][089])|[29](?:[0-7][089]|[89])|3(?:[0-8][089]|9)|[47](?:[089]|11|7[02-8])|8(?:[0-24-7][089]|[389]))|5(?:[0346-9]|[15][017-9]|2(?:[03-9]|[12][089]))|6(?:[0346-9]|1[0-257-9]|2(?:[0-4]|[5-9][089])|5(?:[0-367][089]|[4589]))|7(?:0(?:[02-9]|1[089])|[1-9])|8(?:[0-79]|8(?:0[0189]|11|8[013-9]|9))|9(?:[089]|313|7(?:[02-8]|9[07-9])))|8(?:0(?:[01589]|6[67]|7(?:[02-8]|9[04-9]))|1(?:[02-57-9]|1(?:[0-35-9]|4[0-46-9])|6(?:[089]|7[02-8]))|2(?:[014](?:[089]|7[02-8])|[235-9])|3(?:[03-57-9]|[16](?:[089]|7[02-7])|2(?:[09]|7[02-8]|8[0-689]))|[45]|6(?:[02457-9]|[136](?:[089]|7[02-8]))|7(?:0[07-9]|[1-69]|[78](?:[089]|7[02-8]))|8(?:[0-25-9]|3(?:[089]|7[02-8])|4(?:[0489]|7[02-8]))|9(?:[02-9]|1(?:[0289]|7[02-8])))|9\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""11|2[02]|33|4[04]|79[1-9]|80[2-46]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:2[0-249]|3[0-25]|4[145]|[59][14]|[68][1-9]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1|9[15])|6(?:12|[2-4]1|5[17]|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)\""]],[\""(\\\\d{4})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1(?:[23579]|[468][1-9])|[2-8]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""008\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""140\""],\""$1\""],[\""(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""160\"",\""1600\""],\""$1\""],[\""(\\\\d{4})(\\\\d{4,5})\"",\""$1 $2\"",[\""180\"",\""1800\""],\""$1\""],[\""(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""180\"",\""1800\""],\""$1\""],[\""(\\\\d{4})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""186\"",\""1860\""],\""$1\""],[\""(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""18[06]\""],\""$1\""]],\""0\"",\""0$1\"",null,null,true],\""IO\"":[\""246\"",\""3\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""IQ\"":[\""964\"",\""[1-7]\\\\d{7,9}\"",[8,9,10],[[\""(1)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]],[\""([2-6]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[2-6]\""]],[\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]]],\""0\"",\""0$1\""],\""IR\"":[\""98\"",\""[1-8]\\\\d{5,9}|9(?:[0-4]\\\\d{8}|9\\\\d{8})\"",[6,7,10],[[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[1-8]\""]],[\""(\\\\d{2})(\\\\d{4,5})\"",\""$1 $2\"",[\""[1-8]\""]],[\""(\\\\d{4,5})\"",\""$1\"",[\""96\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""9\""]]],\""0\"",\""0$1\""],\""IS\"":[\""354\"",\""[4-9]\\\\d{6}|38\\\\d{7}\"",[7,9],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[4-9]\""]],[\""(3\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""3\""]]]],\""IT\"":[\""39\"",\""[01589]\\\\d{5,10}|3(?:[12457-9]\\\\d{8}|[36]\\\\d{7,9})\"",[6,7,8,9,10,11],[[\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[26]|55\""]],[\""(0[26])(\\\\d{4})(\\\\d{5})\"",\""$1 $2 $3\"",[\""0[26]\""]],[\""(0[26])(\\\\d{4,6})\"",\""$1 $2\"",[\""0[26]\""]],[\""(0\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[13-57-9][0159]\""]],[\""(\\\\d{3})(\\\\d{3,6})\"",\""$1 $2\"",[\""0[13-57-9][0159]|8(?:03|4[17]|9[245])\"",\""0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))\""]],[\""(0\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[13-57-9][2-46-8]\""]],[\""(0\\\\d{3})(\\\\d{2,6})\"",\""$1 $2\"",[\""0[13-57-9][2-46-8]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[13]|8(?:00|4[08]|9[59])\"",\""[13]|8(?:00|4[08]|9(?:5[5-9]|9))\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""894\"",\""894[5-9]\""]],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""3\""]]],null,null,null,null,null,null,[[\""0(?:[26]\\\\d{4,9}|(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2346]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[34578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7})\""],[\""3(?:[12457-9]\\\\d{8}|6\\\\d{7,8}|3\\\\d{7,9})\"",[9,10,11]],[\""80(?:0\\\\d{6}|3\\\\d{3})\"",[6,9]],[\""0878\\\\d{5}|1(?:44|6[346])\\\\d{6}|89(?:2\\\\d{3}|4(?:[0-4]\\\\d{2}|[5-9]\\\\d{4})|5(?:[0-4]\\\\d{2}|[5-9]\\\\d{6})|9\\\\d{6})\"",[6,8,9,10]],[\""1(?:78\\\\d|99)\\\\d{6}\"",[9,10]],null,null,null,[\""55\\\\d{8}\"",[10]],[\""84(?:[08]\\\\d{6}|[17]\\\\d{3})\"",[6,9]]]],\""JE\"":[\""44\"",\""[135789]\\\\d{6,9}\"",[10],[[\""(7\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7(?:[1-57-9]|62)\"",\""7(?:[1-57-9]|624)\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2|5[56]|7[06]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[02-9]1|1)|3|9[018]\""]],[\""(\\\\d{5})(\\\\d{4,5})\"",\""$1 $2\"",[\""1(?:38|5[23]|69|76|94)\"",\""1(?:(?:38|69)7|5(?:24|39)|768|946)\"",\""1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\""]],[\""(1\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""1\""]],[\""(800)(\\\\d{4})\"",\""$1 $2\"",[\""800\"",\""8001\"",\""80011\"",\""800111\"",\""8001111\""]],[\""(845)(46)(4\\\\d)\"",\""$1 $2 $3\"",[\""845\"",\""8454\"",\""84546\"",\""845464\""]],[\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8(?:4[2-5]|7[0-3])\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""80\""]],[\""(800)(\\\\d{6})\"",\""$1 $2\"",[\""800\""]]],\""0\"",null,null,null,null,null,[[\""1534[0-24-8]\\\\d{5}\""],[\""7(?:509\\\\d|7(?:00[378]|97[7-9])|829\\\\d|937\\\\d)\\\\d{5}\""],[\""80(?:07(?:35|81)|8901)\\\\d{4}\""],[\""(?:871206|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\""],[\""701511\\\\d{4}\""],null,[\""3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))\\\\d{4}|55\\\\d{8}\""],[\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\""],[\""56\\\\d{8}\""],[\""8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|70002)\\\\d{4}\""]]],\""JM\"":[\""1\"",\""[589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""876\""],\""JO\"":[\""962\"",\""[235-9]\\\\d{7,8}\"",[8,9],[[\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2356]|87\""],\""(0$1)\""],[\""(7)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7[457-9]\""]],[\""(\\\\d{2})(\\\\d{7})\"",\""$1 $2\"",[\""70\""]],[\""(\\\\d{3})(\\\\d{5,6})\"",\""$1 $2\"",[\""8[0158]|9\""]]],\""0\"",\""0$1\""],\""JP\"":[\""81\"",\""[1-9]\\\\d{8,9}|00(?:[36]\\\\d{7,14}|7\\\\d{5,7}|8\\\\d{7})\"",[8,9,10,11,12,13,14,15,16,17],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1-$2-$3\"",[\""(?:12|57|99)0\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""800\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[2579]0|80[1-9]\""]],[\""(\\\\d{4})(\\\\d)(\\\\d{4})\"",\""$1-$2-$3\"",[\""1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:49|80|9[16])\"",\""1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[78]|96)|477|51[24]|636)|9(?:496|802|9(?:1[23]|69))\"",\""1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[78]|96[2457-9])|477|51[24]|636[2-57-9])|9(?:496|802|9(?:1[23]|69))\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\""$1-$2-$3\"",[\""1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])\"",\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:[0468][2-9]|5[78]|7[2-4])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[4-7]|[89][2-8]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:[3-6][2-9]|7[2-6]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|4[2-69]|[5-7]))\"",\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:[0468][2-9]|5[78]|7[2-4])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[4-7]|[89][2-8]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:20|[3578]|4[04-9]|6[56]))|3(?:[3-6][2-9]|7(?:[2-5]|6[0-59])|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))\"",\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:[0468][2-9]|5[78]|7[2-4])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[4-7]|[89][2-8]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:20|[3578]|4[04-9]|6(?:5[25]|60)))|3(?:[3-6][2-9]|7(?:[2-5]|6[0-59])|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5[2-589]|60|8(?:2[124589]|3[279]|[46-9])|9(?:[235-8]|93)\"",\""1|2(?:2[37]|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:20|[68]|9[178])|64|7[347])|5[2-589]|60|8(?:2[124589]|3[279]|[46-9])|9(?:[235-8]|93[34])\"",\""1|2(?:2[37]|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:20|[68]|9[178])|64|7[347])|5[2-589]|60|8(?:2[124589]|3[279]|[46-9])|9(?:[235-8]|93(?:31|4))\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\""$1-$2-$3\"",[\""2(?:[34]7|[56]9|74|9[14-79])|82|993\""]],[\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""3|4(?:2[09]|7[01])|6[1-9]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[2479][1-9]\""]]],\""0\"",\""0$1\""],\""KE\"":[\""254\"",\""20\\\\d{6,7}|[4-9]\\\\d{6,9}\"",[7,8,9,10],[[\""(\\\\d{2})(\\\\d{5,7})\"",\""$1 $2\"",[\""[24-6]\""]],[\""(\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""7\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[89]\""]]],\""0\"",\""0$1\"",\""005|0\""],\""KG\"":[\""996\"",\""[235-8]\\\\d{8,9}\"",[9,10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[25-7]|31[25]\""]],[\""(\\\\d{4})(\\\\d{5})\"",\""$1 $2\"",[\""3(?:1[36]|[2-9])\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""8\""]]],\""0\"",\""0$1\""],\""KH\"":[\""855\"",\""[1-9]\\\\d{7,9}\"",[8,9,10],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""1\\\\d[1-9]|[2-9]\""],\""0$1\""],[\""(1[89]00)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[89]0\"",\""1[89]00\""]]],\""0\""],\""KI\"":[\""686\"",\""[2458]\\\\d{4}|3\\\\d{4,7}|[67]\\\\d{7}\"",[5,8],[],null,null,\""0\""],\""KM\"":[\""269\"",\""[3478]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\""]]],\""KN\"":[\""1\"",\""[589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""869\""],\""KP\"":[\""850\"",\""1\\\\d{9}|[28]\\\\d{7}\"",[8,10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1\""]],[\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""8\""]]],\""0\"",\""0$1\""],\""KR\"":[\""82\"",\""00(?:3\\\\d{8,9}|7\\\\d{9,11})|[1-7]\\\\d{4,9}|8\\\\d{8}\"",[5,6,8,9,10,11,12,13,14],[[\""(\\\\d{2})(\\\\d{3,4})\"",\""$1-$2\"",[\""(?:3[1-3]|[46][1-4]|5[1-5])1\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""1(?:5[246-9]|6[046-8]|8[03579])\"",\""1(?:5(?:22|44|66|77|88|99)|6(?:[07]0|44|6[16]|88)|8(?:00|33|55|77|99))\""],\""$1\""],[\""(\\\\d{5})\"",\""$1\"",[\""1[016-9]1\"",\""1[016-9]11\"",\""1[016-9]114\""]],[\""(\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""2[1-9]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1-$2-$3\"",[\""60[2-9]|80\""]],[\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""1[0-25-9]|(?:3[1-3]|[46][1-4]|5[1-5])[1-9]\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1-$2-$3\"",[\""[57]0\""]]],\""0\"",\""0$1\"",\""0(8[1-46-8]|85\\\\d{2})?\""],\""KW\"":[\""965\"",\""[12569]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{4})(\\\\d{3,4})\"",\""$1 $2\"",[\""[16]|2(?:[0-35-9]|4[0-35-9])|52[25]|9[024-9]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""244|5(?:[015]|6[56])\""]]]],\""KY\"":[\""1\"",\""[3589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""345\""],\""KZ\"":[\""7\"",\""(?:33\\\\d|7\\\\d{2}|80[089])\\\\d{7}\"",[10],[[\""([3489]\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""[3489]\""]],[\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]]],\""8\"",null,null,null,null,null,[[\""33622\\\\d{5}|7(?:1(?:0(?:[23]\\\\d|4[0-3]|59|63)|1(?:[23]\\\\d|4[0-79]|59)|2(?:[23]\\\\d|59)|3(?:2\\\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\\\d|3[013-9]|5[1-9])|5(?:2\\\\d|3[1-9]|4[0-7]|59)|6(?:[234]\\\\d|5[19]|61)|72\\\\d|8(?:[27]\\\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\\\d|4[46-9]|5[3469])|2(?:2\\\\d|3[0679]|46|5[12679])|3(?:[234]\\\\d|5[139])|4(?:2\\\\d|3[1235-9]|59)|5(?:[23]\\\\d|4[01246-8]|59|61)|6(?:2\\\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\\\d|40|5[279])|8(?:[23]\\\\d|4[0-3]|59)|9(?:2\\\\d|3[124578]|59)))\\\\d{5}\""],[\""7(?:0[012578]|47|6[02-4]|7[15-8]|85)\\\\d{7}\""],[\""800\\\\d{7}\""],[\""809\\\\d{7}\""],[\""808\\\\d{7}\""],null,null,null,[\""751\\\\d{7}\""]]],\""LA\"":[\""856\"",\""[2-8]\\\\d{7,9}\"",[8,9,10],[[\""(20)(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""20\""]],[\""([2-8]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2[13]|3[14]|[4-8]\""]],[\""(30)(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""30\""]]],\""0\"",\""0$1\""],\""LB\"":[\""961\"",\""[13-9]\\\\d{6,7}\"",[7,8],[[\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]\""],\""0$1\""],[\""([7-9]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""7(?:[01]|6[013-9]|8[89]|9[1-3])|[89][01]\""]]],\""0\""],\""LC\"":[\""1\"",\""[5789]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""758\""],\""LI\"":[\""423\"",\""6\\\\d{8}|[23789]\\\\d{6}\"",[7,9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""[237-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""6[56]\""]],[\""(69)(7\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""697\""]]],\""0\"",null,\""0|10(?:01|20|66)\""],\""LK\"":[\""94\"",\""[1-9]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[1-689]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]]],\""0\"",\""0$1\""],\""LR\"":[\""231\"",\""2\\\\d{7,8}|[378]\\\\d{8}|4\\\\d{6}|5\\\\d{6,8}\"",[7,8,9],[[\""(2\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2\""]],[\""([4-5])(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[45]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[23578]\""]]],\""0\"",\""0$1\""],\""LS\"":[\""266\"",\""[2568]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\""]]],\""LT\"":[\""370\"",\""[3-9]\\\\d{7}\"",[8],[[\""([34]\\\\d)(\\\\d{6})\"",\""$1 $2\"",[\""37|4(?:1|5[45]|6[2-4])\""]],[\""([3-6]\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""3[148]|4(?:[24]|6[09])|528|6\""]],[\""([7-9]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[7-9]\""],\""8 $1\""],[\""(5)(2\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""52[0-79]\""]]],\""8\"",\""(8-$1)\"",\""[08]\"",null,true],\""LU\"":[\""352\"",\""[24-9]\\\\d{3,10}|3(?:[0-46-9]\\\\d{2,9}|5[013-9]\\\\d{1,8})\"",[4,5,6,7,8,9,10,11],[[\""(\\\\d{2})(\\\\d{3})\"",\""$1 $2\"",[\""[2-5]|7[1-9]|[89](?:0[2-9]|[1-9])\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""[2-5]|7[1-9]|[89](?:0[2-9]|[1-9])\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""20\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\"",\""$1 $2 $3 $4\"",[\""2(?:[0367]|4[3-8])\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""20\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\"",\""$1 $2 $3 $4 $5\"",[\""2(?:[0367]|4[3-8])\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,4})\"",\""$1 $2 $3 $4\"",[\""2(?:[12589]|4[12])|[3-5]|7[1-9]|8(?:0[2-9]|[1-9])|9(?:0[2-46-9]|[1-9])\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""70|80[01]|90[015]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""6\""]]],null,null,\""(15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\\\\d)\""],\""LV\"":[\""371\"",\""[2689]\\\\d{7}\"",[8],[[\""([2689]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2689]\""]]]],\""LY\"":[\""218\"",\""[25679]\\\\d{8}\"",[9],[[\""([25-79]\\\\d)(\\\\d{7})\"",\""$1-$2\"",[\""[25-79]\""]]],\""0\"",\""0$1\""],\""MA\"":[\""212\"",\""[5-9]\\\\d{8}\"",[9],[[\""([5-7]\\\\d{2})(\\\\d{6})\"",\""$1-$2\"",[\""5(?:2[015-7]|3[0-4])|[67]\""]],[\""([58]\\\\d{3})(\\\\d{5})\"",\""$1-$2\"",[\""5(?:2[2-489]|3[5-9]|92)|892\"",\""5(?:2(?:[2-48]|9[0-7])|3(?:[5-79]|8[0-7])|924)|892\""]],[\""(5\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""5(?:29|38)\"",\""5(?:29|38)[89]\""]],[\""([5]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""5(?:4[067]|5[03])\""]],[\""(8[09])(\\\\d{7})\"",\""$1-$2\"",[\""8(?:0|9[013-9])\""]]],\""0\"",\""0$1\"",null,null,null,null,[[\""5(?:2(?:[015-79]\\\\d|2[02-9]|3[2-57]|4[2-8]|8[235-7])\\\\d|3(?:[0-48]\\\\d|[57][2-9]|6[2-8]|9[3-9])\\\\d|4[067]\\\\d{2}|5[03]\\\\d{2})\\\\d{4}\""],[\""(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:0[067]|6[1267]|7[07]))\\\\d{6}\""],[\""80\\\\d{7}\""],[\""89\\\\d{7}\""],null,null,null,null,[\""5924[01]\\\\d{4}\""]]],\""MC\"":[\""377\"",\""[34689]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[39]\""],\""$1\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""4\""]],[\""(6)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4 $5\"",[\""6\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3\"",[\""8\""],\""$1\""]],\""0\"",\""0$1\""],\""MD\"":[\""373\"",\""[235-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""22|3\""]],[\""([25-7]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2[13-9]|[5-7]\""]],[\""([89]\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""[89]\""]]],\""0\"",\""0$1\""],\""ME\"":[\""382\"",\""[2-9]\\\\d{7,8}\"",[8],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2-57-9]|6[036-9]\""]]],\""0\"",\""0$1\""],\""MF\"":[\""590\"",\""[56]\\\\d{8}\"",[9],[[\""([56]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2-$3\"",[\""590|69[01]\""]]],\""0\"",null,null,null,null,null,[[\""590(?:0[079]|13|2[79]|30|43|5[0-268]|7[79]|87)\\\\d{4}\""],[\""69(?:0\\\\d{2}|1(?:2[29]|3[0-5]))\\\\d{4}\""]]],\""MG\"":[\""261\"",\""[23]\\\\d{8}\"",[9],[[\""([23]\\\\d)(\\\\d{2})(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[23]\""]]],\""0\"",\""0$1\""],\""MH\"":[\""692\"",\""[2-6]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\""]],\""1\""],\""MK\"":[\""389\"",\""[2-578]\\\\d{7}\"",[8],[[\""(2)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2\""]],[\""([347]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[347]\""]],[\""([58]\\\\d{2})(\\\\d)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[58]\""]]],\""0\"",\""0$1\""],\""ML\"":[\""223\"",\""[246-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[246-9]\""]]]],\""MM\"":[\""95\"",\""[178]\\\\d{5,7}|[24-6]\\\\d{5,8}|9(?:[279]\\\\d{0,2}|5|[34]\\\\d{1,2}|6(?:\\\\d{1,2})?|8(?:\\\\d{2})?)\\\\d{6}\"",[6,7,8,9,10],[[\""(\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""1|2[245]\""]],[\""(2)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""251\""]],[\""(\\\\d)(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""16|2\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""432|67|81\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[4-8]\""]],[\""(9)(\\\\d{3})(\\\\d{4,6})\"",\""$1 $2 $3\"",[\""9(?:2[0-4]|[35-9]|4[137-9])\""]],[\""(9)([34]\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""9(?:3[0-36]|4[0-57-9])\""]],[\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""92[56]\""]],[\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""93\""]]],\""0\"",\""0$1\""],\""MN\"":[\""976\"",\""[12]\\\\d{7,9}|[57-9]\\\\d{7}\"",[8,9,10],[[\""([12]\\\\d)(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[12]1\""]],[\""([12]2\\\\d)(\\\\d{5,6})\"",\""$1 $2\"",[\""[12]2[1-3]\""]],[\""([12]\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""[12](?:27|[3-5])\"",\""[12](?:27|[3-5]\\\\d)2\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[57-9]\""],\""$1\""],[\""([12]\\\\d{4})(\\\\d{4,5})\"",\""$1 $2\"",[\""[12](?:27|[3-5])\"",\""[12](?:27|[3-5]\\\\d)[4-9]\""]]],\""0\"",\""0$1\""],\""MO\"":[\""853\"",\""[268]\\\\d{7}\"",[8],[[\""([268]\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[268]\""]]]],\""MP\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""670\""],\""MQ\"":[\""596\"",\""[56]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]],\""0\"",\""0$1\""],\""MR\"":[\""222\"",\""[2-48]\\\\d{7}\"",[8],[[\""([2-48]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[2-48]\""]]]],\""MS\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""664\""],\""MT\"":[\""356\"",\""[2357-9]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\""]]],\""MU\"":[\""230\"",\""[2-9]\\\\d{6,7}\"",[7,8],[[\""([2-46-9]\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[2-46-9]\""]],[\""(5\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""5\""]]]],\""MV\"":[\""960\"",\""[346-8]\\\\d{6,9}|9(?:00\\\\d{7}|\\\\d{6})\"",[7,10],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\"",[\""[3467]|9(?:0[1-9]|[1-9])\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[89]00\""]]]],\""MW\"":[\""265\"",\""(?:1(?:\\\\d{2})?|[2789]\\\\d{2}|31\\\\d)\\\\d{6}\"",[7,9],[[\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1\""]],[\""(2\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[17-9]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""31\""]]],\""0\"",\""0$1\""],\""MX\"":[\""52\"",\""[1-9]\\\\d{9,10}\"",[10,11],[[\""([358]\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""33|55|81\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2467]|3[0-2457-9]|5[089]|8[02-9]|9[0-35-9]\""]],[\""(1)([358]\\\\d)(\\\\d{4})(\\\\d{4})\"",\""044 $2 $3 $4\"",[\""1(?:33|55|81)\""],\""$1\"",null,\""$1 $2 $3 $4\""],[\""(1)(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""044 $2 $3 $4\"",[\""1(?:[2467]|3[0-2457-9]|5[089]|8[2-9]|9[1-35-9])\""],\""$1\"",null,\""$1 $2 $3 $4\""]],\""01\"",\""01 $1\"",\""0[12]|04[45](\\\\d{10})\"",\""1$1\"",true],\""MY\"":[\""60\"",\""[13-9]\\\\d{7,9}\"",[8,9,10],[[\""([4-79])(\\\\d{3})(\\\\d{4})\"",\""$1-$2 $3\"",[\""[4-79]\""],\""0$1\""],[\""(3)(\\\\d{4})(\\\\d{4})\"",\""$1-$2 $3\"",[\""3\""],\""0$1\""],[\""([18]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1-$2 $3\"",[\""1[02-46-9][1-9]|8\""],\""0$1\""],[\""(1)([36-8]00)(\\\\d{2})(\\\\d{4})\"",\""$1-$2-$3-$4\"",[\""1[36-8]0\"",\""1[36-8]00\""]],[\""(11)(\\\\d{4})(\\\\d{4})\"",\""$1-$2 $3\"",[\""11\""],\""0$1\""],[\""(15[49])(\\\\d{3})(\\\\d{4})\"",\""$1-$2 $3\"",[\""15[49]\""],\""0$1\""]],\""0\""],\""MZ\"":[\""258\"",\""[28]\\\\d{7,8}\"",[8,9],[[\""([28]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""2|8[2-7]\""]],[\""(80\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""80\""]]]],\""NA\"":[\""264\"",\""[68]\\\\d{7,8}\"",[8,9],[[\""(8\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""8[1-35]\""]],[\""(6\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""6\""]],[\""(88)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""88\""]],[\""(870)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""870\""]]],\""0\"",\""0$1\""],\""NC\"":[\""687\"",\""[2-57-9]\\\\d{5}\"",[6],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1.$2.$3\"",[\""[2-46-9]|5[0-4]\""]]]],\""NE\"":[\""227\"",\""[0289]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""09|[289]\""]],[\""(08)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""08\""]]]],\""NF\"":[\""672\"",\""[13]\\\\d{5}\"",[6],[[\""(\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""1\""]],[\""(\\\\d)(\\\\d{5})\"",\""$1 $2\"",[\""3\""]]]],\""NG\"":[\""234\"",\""[1-6]\\\\d{5,8}|9\\\\d{5,9}|[78]\\\\d{5,13}\"",[7,8,10,11,12,13,14],[[\""(\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[12]|9(?:0[3-9]|[1-9])\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""[3-6]|7(?:0[1-9]|[1-79])|8[2-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""70|8[01]|90[235-9]\""]],[\""([78]00)(\\\\d{4})(\\\\d{4,5})\"",\""$1 $2 $3\"",[\""[78]00\""]],[\""([78]00)(\\\\d{5})(\\\\d{5,6})\"",\""$1 $2 $3\"",[\""[78]00\""]],[\""(78)(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""78\""]]],\""0\"",\""0$1\""],\""NI\"":[\""505\"",\""[125-8]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\""]]],\""NL\"":[\""31\"",\""1\\\\d{4,8}|[2-7]\\\\d{8}|[89]\\\\d{6,9}\"",[5,6,7,8,9,10],[[\""([1-578]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[4578]\""]],[\""([1-5]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\""]],[\""(6)(\\\\d{8})\"",\""$1 $2\"",[\""6[0-57-9]\""]],[\""(66)(\\\\d{7})\"",\""$1 $2\"",[\""66\""]],[\""(14)(\\\\d{3,4})\"",\""$1 $2\"",[\""14\""],\""$1\""],[\""([89]0\\\\d)(\\\\d{4,7})\"",\""$1 $2\"",[\""[89]0\""]]],\""0\"",\""0$1\""],\""NO\"":[\""47\"",\""0\\\\d{4}|[2-9]\\\\d{7}\"",[5,8],[[\""([489]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[489]\""]],[\""([235-7]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[235-7]\""]]],null,null,null,null,null,null,[[\""(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\\\d{6}\"",[8]],[\""(?:4[015-8]|5[89]|87|9\\\\d)\\\\d{6}\"",[8]],[\""80[01]\\\\d{5}\"",[8]],[\""82[09]\\\\d{5}\"",[8]],[\""880\\\\d{5}\"",[8]],null,[\""0\\\\d{4}|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d{2})\\\\d{3}\""],null,[\""85[0-5]\\\\d{5}\"",[8]],[\""810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\"",[8]]]],\""NP\"":[\""977\"",\""[1-8]\\\\d{7}|9(?:[1-69]\\\\d{6,8}|7[2-6]\\\\d{5,7}|8\\\\d{8})\"",[8,10],[[\""(1)(\\\\d{7})\"",\""$1-$2\"",[\""1[2-6]\""]],[\""(\\\\d{2})(\\\\d{6})\"",\""$1-$2\"",[\""1[01]|[2-8]|9(?:[1-69]|7[15-9])\""]],[\""(9\\\\d{2})(\\\\d{7})\"",\""$1-$2\"",[\""9(?:6[013]|7[245]|8)\""],\""$1\""]],\""0\"",\""0$1\""],\""NR\"":[\""674\"",\""[458]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""NU\"":[\""683\"",\""[1-5]\\\\d{3}\"",[4]],\""NZ\"":[\""64\"",\""6[235-9]\\\\d{6}|[2-57-9]\\\\d{7,9}\"",[8,9,10],[[\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1-$2 $3\"",[\""240|[346]|7[2-57-9]|9[1-9]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""21\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\"",\""$1 $2 $3\"",[\""2(?:1[1-9]|[69]|7[0-35-9])|70|86\""]],[\""(2\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[028]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""90\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""2(?:10|74)|5|[89]0\""]]],\""0\"",\""0$1\""],\""OM\"":[\""968\"",\""(?:5|[279]\\\\d)\\\\d{6}|800\\\\d{5,6}\"",[7,8,9],[[\""(2\\\\d)(\\\\d{6})\"",\""$1 $2\"",[\""2\""]],[\""([79]\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[79]\""]],[\""([58]00)(\\\\d{4,6})\"",\""$1 $2\"",[\""[58]00\""]]]],\""PA\"":[\""507\"",\""[1-9]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\"",[\""[1-57-9]\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1-$2\"",[\""6\""]]]],\""PE\"":[\""51\"",\""[14-9]\\\\d{7,8}\"",[8,9],[[\""(1)(\\\\d{7})\"",\""$1 $2\"",[\""1\""]],[\""([4-8]\\\\d)(\\\\d{6})\"",\""$1 $2\"",[\""[4-7]|8[2-4]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""80\""]],[\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""9\""],\""$1\""]],\""0\"",\""(0$1)\""],\""PF\"":[\""689\"",\""4\\\\d{5,7}|8\\\\d{7}\"",[6,8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""4[09]|8[79]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""44\""]]]],\""PG\"":[\""675\"",\""[1-9]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[13-689]|27\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""20|7\""]]]],\""PH\"":[\""63\"",\""1\\\\d{10,12}|2\\\\d{5,7}|[3-7]\\\\d{8}|8\\\\d{7,9}|9\\\\d{9}\"",[6,8,9,10,11,12,13],[[\""(2)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2\""],\""(0$1)\""],[\""(2)(\\\\d{5})\"",\""$1 $2\"",[\""2\""],\""(0$1)\""],[\""(\\\\d{4})(\\\\d{4,6})\"",\""$1 $2\"",[\""3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])\"",\""3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\""],\""(0$1)\""],[\""(\\\\d{5})(\\\\d{4})\"",\""$1 $2\"",[\""346|4(?:27|9[35])|883\"",\""3469|4(?:279|9(?:30|56))|8834\""],\""(0$1)\""],[\""([3-8]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[3-8]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""81|9\""],\""0$1\""],[\""(1800)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""180\"",\""1800\""]],[\""(1800)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3 $4\"",[\""180\"",\""1800\""]]],\""0\""],\""PK\"":[\""92\"",\""1\\\\d{8}|[2-8]\\\\d{5,11}|9(?:[013-9]\\\\d{4,10}|2\\\\d(?:111\\\\d{6}|\\\\d{3,7}))\"",[8,9,10,11,12],[[\""([89]00)(\\\\d{3})(\\\\d{2})\"",\""$1 $2 $3\"",[\""[89]00\""],\""0$1\""],[\""(1\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""1\""],\""$1\""],[\""(\\\\d{2})(\\\\d{7,8})\"",\""$1 $2\"",[\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\""]],[\""(\\\\d{3})(\\\\d{6,7})\"",\""$1 $2\"",[\""2[349]|45|54|60|72|8[2-5]|9[2-469]\"",\""(?:2[349]|45|54|60|72|8[2-5]|9[2-469])\\\\d[2-9]\""]],[\""(58\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""58[126]\""]],[\""(3\\\\d{2})(\\\\d{7})\"",\""$1 $2\"",[\""3\""],\""0$1\""],[\""(\\\\d{2})(111)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1\"",\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11\"",\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111\""]],[\""(\\\\d{3})(111)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3 $4\"",[\""2[349]|45|54|60|72|8[2-5]|9[2-9]\"",\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d1\"",\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d11\"",\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d111\""]]],\""0\"",\""(0$1)\""],\""PL\"":[\""48\"",\""[1-57-9]\\\\d{6,8}|6\\\\d{5,8}\"",[6,7,8,9],[[\""(\\\\d{3})(\\\\d{3})\"",\""$1 $2\"",[\""11[68]|64\""]],[\""(\\\\d{5})\"",\""$1\"",[\""19\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""64\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""26|39|45|5[0137]|6[0469]|7[02389]|8[08]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[14]|2[0-57-9]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]\""]]]],\""PM\"":[\""508\"",\""[45]\\\\d{5}\"",[6],[[\""([45]\\\\d)(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\"",[\""[45]\""]]],\""0\"",\""0$1\""],\""PR\"":[\""1\"",\""[5789]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""787|939\""],\""PS\"":[\""970\"",\""1\\\\d{9}|[24589]\\\\d{7,8}\"",[8,9,10],[[\""([2489])(2\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[2489]2\""]],[\""(5[69]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""5[69]\""]],[\""(1[78]00)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[78]0\"",\""1[78]00\""],\""$1\""]],\""0\"",\""0$1\""],\""PT\"":[\""351\"",\""[2-46-9]\\\\d{8}\"",[9],[[\""(2\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[12]\""]],[\""([2-46-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2[3-9]|[346-9]\""]]]],\""PW\"":[\""680\"",\""[2-9]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""PY\"":[\""595\"",\""5[0-5]\\\\d{4,7}|[2-46-9]\\\\d{5,8}\"",[6,7,8,9],[[\""(\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\""],\""(0$1)\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3,6})\"",\""$1 $2\"",[\""[2-9]0\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""9[1-9]\""],\""0$1\""],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""870\"",\""8700\""]],[\""(\\\\d{3})(\\\\d{4,5})\"",\""$1 $2\"",[\""[2-8][1-9]\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[2-8][1-9]\""],\""0$1\""]],\""0\""],\""QA\"":[\""974\"",\""[2-8]\\\\d{6,7}\"",[7,8],[[\""([28]\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[28]\""]],[\""([3-7]\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[3-7]\""]]]],\""RE\"":[\""262\"",\""[268]\\\\d{8}\"",[9],[[\""([268]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[268]\""]]],\""0\"",\""0$1\"",null,null,null,\""262|69|8\""],\""RO\"":[\""40\"",\""[23]\\\\d{5,8}|[7-9]\\\\d{8}\"",[6,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[23]1\""]],[\""(\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""[23]1\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[23][3-7]|[7-9]\""]],[\""(2\\\\d{2})(\\\\d{3})\"",\""$1 $2\"",[\""2[3-6]\""]]],\""0\"",\""0$1\""],\""RS\"":[\""381\"",\""[126-9]\\\\d{4,11}|3(?:[0-79]\\\\d{3,10}|8[2-9]\\\\d{2,9})\"",[6,7,8,9,10,11,12],[[\""([23]\\\\d{2})(\\\\d{4,9})\"",\""$1 $2\"",[\""(?:2[389]|39)0\""]],[\""([1-3]\\\\d)(\\\\d{5,10})\"",\""$1 $2\"",[\""1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])\""]],[\""(6\\\\d)(\\\\d{6,8})\"",\""$1 $2\"",[\""6\""]],[\""([89]\\\\d{2})(\\\\d{3,9})\"",\""$1 $2\"",[\""[89]\""]],[\""(7[26])(\\\\d{4,9})\"",\""$1 $2\"",[\""7[26]\""]],[\""(7[08]\\\\d)(\\\\d{4,9})\"",\""$1 $2\"",[\""7[08]\""]]],\""0\"",\""0$1\""],\""RU\"":[\""7\"",\""[347-9]\\\\d{9}\"",[10],[[\""([3489]\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""[3489]\""]],[\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]]],\""8\"",\""8 ($1)\"",null,null,true,null,[[\""(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-79]|7[1-37-9]))\\\\d{7}\""],[\""9\\\\d{9}\""],[\""80[04]\\\\d{7}\""],[\""80[39]\\\\d{7}\""],[\""808\\\\d{7}\""]]],\""RW\"":[\""250\"",\""[027-9]\\\\d{7,8}\"",[8,9],[[\""(2\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2\""]],[\""([7-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[7-9]\""],\""0$1\""],[\""(0\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""0\""]]],\""0\""],\""SA\"":[\""966\"",\""[15]\\\\d{8}|8\\\\d{9}|92\\\\d{7}\"",[9,10],[[\""(1\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1[1-467]\""]],[\""(5\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""5\""]],[\""(92\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""92\""],\""$1\""],[\""(800)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""800\""],\""$1\""],[\""(811)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""811\""]]],\""0\"",\""0$1\""],\""SB\"":[\""677\"",\""[1-9]\\\\d{4,6}\"",[5,7],[[\""(\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""[7-9]\""]]]],\""SC\"":[\""248\"",\""[24689]\\\\d{5,6}\"",[7],[[\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[246]\""]]]],\""SD\"":[\""249\"",\""[19]\\\\d{8}\"",[9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\""]],\""0\"",\""0$1\""],\""SE\"":[\""46\"",\""[1-35-9]\\\\d{5,11}|4\\\\d{6,8}\"",[6,7,8,9,10],[[\""(8)(\\\\d{2,3})(\\\\d{2,3})(\\\\d{2})\"",\""$1-$2 $3 $4\"",[\""8\""],null,null,\""$1 $2 $3 $4\""],[\""([1-69]\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\"",\""$1-$2 $3 $4\"",[\""1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90\""],null,null,\""$1 $2 $3 $4\""],[\""([1-469]\\\\d)(\\\\d{3})(\\\\d{2})\"",\""$1-$2 $3\"",[\""[12][136]|3[356]|4[0246]|6[03]|90\""],null,null,\""$1 $2 $3\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1-$2 $3 $4\"",[\""1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])\""],null,null,\""$1 $2 $3 $4\""],[\""(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\"",\""$1-$2 $3\"",[\""1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])\""],null,null,\""$1 $2 $3\""],[\""(7\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1-$2 $3 $4\"",[\""7\""],null,null,\""$1 $2 $3 $4\""],[\""(77)(\\\\d{2})(\\\\d{2})\"",\""$1-$2$3\"",[\""77\""],null,null,\""$1 $2 $3\""],[\""(20)(\\\\d{2,3})(\\\\d{2})\"",\""$1-$2 $3\"",[\""20\""],null,null,\""$1 $2 $3\""],[\""(9[034]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1-$2 $3 $4\"",[\""9[034]\""],null,null,\""$1 $2 $3 $4\""],[\""(9[034]\\\\d)(\\\\d{4})\"",\""$1-$2\"",[\""9[034]\""],null,null,\""$1 $2\""],[\""(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1-$2 $3 $4 $5\"",[\""25[245]|67[3-6]\""],null,null,\""$1 $2 $3 $4 $5\""]],\""0\"",\""0$1\""],\""SG\"":[\""65\"",\""[36]\\\\d{7}|[17-9]\\\\d{7,10}\"",[8,10,11],[[\""([3689]\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[369]|8[1-9]\""]],[\""(1[89]00)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1[89]0\"",\""1[89]00\""]],[\""(7000)(\\\\d{4})(\\\\d{3})\"",\""$1 $2 $3\"",[\""700\"",\""7000\""]],[\""(800)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""800\""]]]],\""SH\"":[\""290\"",\""[256]\\\\d{4}|8\\\\d{3}\"",[4,5],[],null,null,null,null,null,null,[[\""2(?:[0-57-9]\\\\d|6[4-9])\\\\d{2}\""],[\""[56]\\\\d{4}\"",[5]],null,null,null,null,null,null,[\""262\\\\d{2}\"",[5]]]],\""SI\"":[\""386\"",\""[1-7]\\\\d{6,7}|[89]\\\\d{4,7}\"",[5,6,7,8],[[\""(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[12]|[34][24-8]|5[2-8]|7[3-8]\""],\""(0$1)\""],[\""([3-7]\\\\d)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[37][01]|4[0139]|51|6\""]],[\""([89][09])(\\\\d{3,6})\"",\""$1 $2\"",[\""[89][09]\""]],[\""([58]\\\\d{2})(\\\\d{5})\"",\""$1 $2\"",[\""59|8[1-3]\""]]],\""0\"",\""0$1\""],\""SJ\"":[\""47\"",\""0\\\\d{4}|[45789]\\\\d{7}\"",[5,8],[[\""([489]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[489]\""]],[\""([235-7]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[235-7]\""]]],null,null,null,null,null,null,[[\""79\\\\d{6}\"",[8]],[\""(?:4[015-8]|5[89]|9\\\\d)\\\\d{6}\"",[8]],[\""80[01]\\\\d{5}\"",[8]],[\""82[09]\\\\d{5}\"",[8]],[\""880\\\\d{5}\"",[8]],null,[\""0\\\\d{4}|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d{2})\\\\d{3}\""],null,[\""85[0-5]\\\\d{5}\"",[8]],[\""810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\"",[8]]]],\""SK\"":[\""421\"",\""(?:[2-68]\\\\d{5,8}|9\\\\d{6,8})\"",[6,7,9],[[\""(2)(1[67])(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""21[67]\""]],[\""([3-5]\\\\d)(\\\\d{2})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""[3-5]\""]],[\""(2)(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\""$1/$2 $3 $4\"",[\""2\""]],[\""([3-5]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1/$2 $3 $4\"",[\""[3-5]\""]],[\""([689]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[689]\""]],[\""(9090)(\\\\d{3})\"",\""$1 $2\"",[\""909\"",\""9090\""]]],\""0\"",\""0$1\""],\""SL\"":[\""232\"",\""[2-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\""]],\""0\"",\""(0$1)\""],\""SM\"":[\""378\"",\""[05-7]\\\\d{7,9}\"",[8,10],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[5-7]\""]],[\""(0549)(\\\\d{6})\"",\""$1 $2\"",[\""054\"",\""0549\""],null,null,\""($1) $2\""],[\""(\\\\d{6})\"",\""0549 $1\"",[\""[89]\""],null,null,\""(0549) $1\""]],null,null,\""([89]\\\\d{5})\"",\""0549$1\""],\""SN\"":[\""221\"",\""[3789]\\\\d{8}\"",[9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[379]\""]],[\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""8\""]]]],\""SO\"":[\""252\"",\""[1-9]\\\\d{5,8}\"",[6,7,8,9],[[\""(\\\\d{6})\"",\""$1\"",[\""[134]\""]],[\""(\\\\d)(\\\\d{6})\"",\""$1 $2\"",[\""[13-5]|2[0-79]\""]],[\""(\\\\d)(\\\\d{7})\"",\""$1 $2\"",[\""24|[67]\""]],[\""(\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",[\""8[125]\""]],[\""(\\\\d{2})(\\\\d{5,7})\"",\""$1 $2\"",[\""15|28|6[1-35-9]|799|9[2-9]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""3[59]|4[89]|6[24-6]|79|8[08]|90\""]]],\""0\""],\""SR\"":[\""597\"",\""[2-8]\\\\d{5,6}\"",[6,7],[[\""(\\\\d{3})(\\\\d{3})\"",\""$1-$2\"",[\""[2-4]|5[2-58]\""]],[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1-$2-$3\"",[\""56\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1-$2\"",[\""[6-8]\""]]]],\""SS\"":[\""211\"",\""[19]\\\\d{8}\"",[9],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",null,\""0$1\""]],\""0\""],\""ST\"":[\""239\"",\""[29]\\\\d{6}\"",[7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\""]]],\""SV\"":[\""503\"",\""[267]\\\\d{7}|[89]\\\\d{6}(?:\\\\d{4})?\"",[7,8,11],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[267]\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[89]\""]],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[89]\""]]]],\""SX\"":[\""1\"",\""[5789]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""721\""],\""SY\"":[\""963\"",\""[1-59]\\\\d{7,8}\"",[8,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[1-5]\""]],[\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""9\""]]],\""0\"",\""0$1\"",null,null,true],\""SZ\"":[\""268\"",\""[027]\\\\d{7}\"",[8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[027]\""]]]],\""TA\"":[\""290\"",\""8\\\\d{3}\"",[4],[],null,null,null,null,null,null,[[\""8\\\\d{3}\""]]],\""TC\"":[\""1\"",\""[5689]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""649\""],\""TD\"":[\""235\"",\""[2679]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\""]]],\""TG\"":[\""228\"",\""[279]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[279]\""]]]],\""TH\"":[\""66\"",\""1\\\\d{8,9}|[2-9]\\\\d{7,8}\"",[8,9,10],[[\""(2)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2\""]],[\""([13-9]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""14|[3-9]\""]],[\""(1[89]00)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""1[89]0\"",\""1[89]00\""],\""$1\""]],\""0\"",\""0$1\""],\""TJ\"":[\""992\"",\""[3-57-9]\\\\d{8}\"",[9],[[\""([349]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[34]7|91[78]\""]],[\""([457-9]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""4[148]|[578]|9(?:[0235-9]|1[59])\""]],[\""(331700)(\\\\d)(\\\\d{2})\"",\""$1 $2 $3\"",[\""331\"",\""3317\"",\""33170\"",\""331700\""]],[\""(\\\\d{4})(\\\\d)(\\\\d{4})\"",\""$1 $2 $3\"",[\""3[1-5]\"",\""3(?:[1245]|3(?:[02-9]|1[0-589]))\""]]],\""8\"",null,null,null,true],\""TK\"":[\""690\"",\""[2-47]\\\\d{3,6}\"",[4,5,6,7]],\""TL\"":[\""670\"",\""[2-489]\\\\d{6}|7\\\\d{6,7}\"",[7,8],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[2-489]|70\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""7[3-8]\""]]]],\""TM\"":[\""993\"",\""[1-6]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""12\""]],[\""(\\\\d{2})(\\\\d{6})\"",\""$1 $2\"",[\""6\""],\""8 $1\""],[\""(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\"",\""$1 $2-$3-$4\"",[\""13|[2-5]\""]]],\""8\"",\""(8 $1)\""],\""TN\"":[\""216\"",\""[2-57-9]\\\\d{7}\"",[8],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\""]]],\""TO\"":[\""676\"",\""[02-8]\\\\d{4,6}\"",[5,7],[[\""(\\\\d{2})(\\\\d{3})\"",\""$1-$2\"",[\""[1-6]|7[0-4]|8[05]\""]],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""7[5-9]|8[47-9]\""]],[\""(\\\\d{4})(\\\\d{3})\"",\""$1 $2\"",[\""0\""]]]],\""TR\"":[\""90\"",\""[2-589]\\\\d{9}|444\\\\d{4}\"",[7,10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[23]|4(?:[0-35-9]|4[0-35-9])\""],\""(0$1)\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""5[02-69]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""51|[89]\""],\""0$1\""],[\""(444)(\\\\d{1})(\\\\d{3})\"",\""$1 $2 $3\"",[\""444\""]]],\""0\"",null,null,null,true],\""TT\"":[\""1\"",\""[589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""868\""],\""TV\"":[\""688\"",\""[279]\\\\d{4,6}\"",[5,6,7]],\""TW\"":[\""886\"",\""2\\\\d{6,8}|[3-689]\\\\d{7,8}|7\\\\d{7,9}\"",[7,8,9,10],[[\""(20)(\\\\d)(\\\\d{4})\"",\""$1 $2 $3\"",[\""202\""]],[\""([258]0)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""20[013-9]|50[0-46-9]|80[0-79]\""]],[\""([2-8])(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[25][2-8]|[346]|[78][1-9]\""]],[\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""9\""]],[\""(70)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""70\""]]],\""0\"",\""0$1\""],\""TZ\"":[\""255\"",\""\\\\d{9}\"",[7,9],[[\""([24]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[24]\""]],[\""([67]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[67]\""]],[\""([89]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[89]\""]]],\""0\"",\""0$1\""],\""UA\"":[\""380\"",\""[3-9]\\\\d{8}\"",[9],[[\""([3-9]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[38]9|4(?:[45][0-5]|87)|5(?:0|[67][37])|6[36-8]|7|9[1-9]\"",\""[38]9|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|7|9[1-9]\""]],[\""([3-689]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""(?:3[1-8]|4[136-8])2|5(?:[12457]2|6[24])|6(?:[12][29]|[49]2|5[24])|8[0-8]|90\"",\""3(?:[1-46-8]2[013-9]|52)|4(?:[1378]2|62[013-9])|5(?:[12457]2|6[24])|6(?:[12][29]|[49]2|5[24])|8[0-8]|90\""]],[\""([3-6]\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""3(?:[1-46-8]|5[013-9])|4(?:[137][013-9]|[45][6-9]|6|8[4-6])|5(?:[1245][013-9]|3|6[0135689]|7[4-6])|6(?:[12][13-8]|[49][013-9]|5[0135-9])\"",\""3(?:[1-46-8](?:[013-9]|22)|5[013-9])|4(?:[137][013-9]|[45][6-9]|6(?:[013-9]|22)|8[4-6])|5(?:[1245][013-9]|3|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][13-8]|[49][013-9]|5[0135-9])\""]]],\""0\"",\""0$1\""],\""UG\"":[\""256\"",\""\\\\d{9}\"",[9],[[\""(\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""20[0-8]|4(?:6[45]|[7-9])|[7-9]\"",\""20(?:[013-8]|2[5-9])|4(?:6[45]|[7-9])|[7-9]\""]],[\""(\\\\d{2})(\\\\d{7})\"",\""$1 $2\"",[\""3|4(?:[1-5]|6[0-36-9])\""]],[\""(2024)(\\\\d{5})\"",\""$1 $2\"",[\""202\"",\""2024\""]]],\""0\"",\""0$1\""],\""US\"":[\""1\"",\""[2-9]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,true,null,[[\""(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[026]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[0-24679]|4[67]|5[12]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|6[39]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[16]|5[017]|6[0-279]|78|8[012])|7(?:0[1-46-8]|1[02-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-258]|4[3578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[014678]|4[0179]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\""],[\""\""],[\""8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\""],[\""900[2-9]\\\\d{6}\""],[\""5(?:(?:00|22|33|44|66|77|88)[2-9]|21[23])\\\\d{6}\""]]],\""UY\"":[\""598\"",\""[2489]\\\\d{6,7}\"",[7,8],[[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""[24]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""9[1-9]\""],\""0$1\""],[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[89]0\""],\""0$1\""]],\""0\""],\""UZ\"":[\""998\"",\""[679]\\\\d{8}\"",[9],[[\""([679]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[679]\""]]],\""8\"",\""8 $1\""],\""VA\"":[\""39\"",\""(?:0(?:878\\\\d{5}|6698\\\\d{5})|[1589]\\\\d{5,10}|3(?:[12457-9]\\\\d{8}|[36]\\\\d{7,9}))\"",[6,8,9,10,11],[[\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[26]|55\""]],[\""(0[26])(\\\\d{4})(\\\\d{5})\"",\""$1 $2 $3\"",[\""0[26]\""]],[\""(0[26])(\\\\d{4,6})\"",\""$1 $2\"",[\""0[26]\""]],[\""(0\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[13-57-9][0159]\""]],[\""(\\\\d{3})(\\\\d{3,6})\"",\""$1 $2\"",[\""0[13-57-9][0159]|8(?:03|4[17]|9[245])\"",\""0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))\""]],[\""(0\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""0[13-57-9][2-46-8]\""]],[\""(0\\\\d{3})(\\\\d{2,6})\"",\""$1 $2\"",[\""0[13-57-9][2-46-8]\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[13]|8(?:00|4[08]|9[59])\"",\""[13]|8(?:00|4[08]|9(?:5[5-9]|9))\""]],[\""(\\\\d{4})(\\\\d{4})\"",\""$1 $2\"",[\""894\"",\""894[5-9]\""]],[\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""3\""]]],null,null,null,null,null,null,[[\""06698\\\\d{5}\"",[10]],[\""3(?:[12457-9]\\\\d{8}|6\\\\d{7,8}|3\\\\d{7,9})\"",[9,10,11]],[\""80(?:0\\\\d{6}|3\\\\d{3})\"",[6,9]],[\""0878\\\\d{5}|1(?:44|6[346])\\\\d{6}|89(?:2\\\\d{3}|4(?:[0-4]\\\\d{2}|[5-9]\\\\d{4})|5(?:[0-4]\\\\d{2}|[5-9]\\\\d{6})|9\\\\d{6})\"",[6,8,9,10]],[\""1(?:78\\\\d|99)\\\\d{6}\"",[9,10]],null,null,null,[\""55\\\\d{8}\"",[10]],[\""84(?:[08]\\\\d{6}|[17]\\\\d{3})\"",[6,9]]]],\""VC\"":[\""1\"",\""[5789]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""784\""],\""VE\"":[\""58\"",\""[24589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{7})\"",\""$1-$2\""]],\""0\"",\""0$1\""],\""VG\"":[\""1\"",\""[2589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""284\""],\""VI\"":[\""1\"",\""[3589]\\\\d{9}\"",[10],[[\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\""($1) $2-$3\"",null,null,null,\""$1-$2-$3\""]],\""1\"",null,null,null,null,\""340\""],\""VN\"":[\""84\"",\""1\\\\d{6,9}|2\\\\d{9}|6\\\\d{6,7}|7\\\\d{6}|8\\\\d{6,8}|9\\\\d{8}\"",[7,8,9,10],[[\""([17]99)(\\\\d{4})\"",\""$1 $2\"",[\""[17]99\""]],[\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\"",[\""2[48]\""]],[\""(80)(\\\\d{5})\"",\""$1 $2\"",[\""80\""]],[\""(69\\\\d)(\\\\d{4,5})\"",\""$1 $2\"",[\""69\""]],[\""(\\\\d{3})(\\\\d{4})(\\\\d{3})\"",\""$1 $2 $3\"",[\""2[0-35-79]\""]],[\""([89]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""8(?:8|9[89])|9\""]],[\""(1[2689]\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""1(?:[26]|8[68]|99)\""]],[\""(86[89])(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""86[89]\""]],[\""(1[89]00)(\\\\d{4,6})\"",\""$1 $2\"",[\""1[89]0\"",\""1[89]00\""],\""$1\""]],\""0\"",\""0$1\"",null,null,true],\""VU\"":[\""678\"",\""[2-57-9]\\\\d{4,6}\"",[5,7],[[\""(\\\\d{3})(\\\\d{4})\"",\""$1 $2\"",[\""[579]\""]]]],\""WF\"":[\""681\"",\""[4-8]\\\\d{5}\"",[6],[[\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3\""]]],\""WS\"":[\""685\"",\""[2-8]\\\\d{4,6}\"",[5,6,7],[[\""(8\\\\d{2})(\\\\d{3,4})\"",\""$1 $2\"",[\""8\""]],[\""(7\\\\d)(\\\\d{5})\"",\""$1 $2\"",[\""7\""]],[\""(\\\\d{5})\"",\""$1\"",[\""[2-6]\""]]]],\""XK\"":[\""383\"",\""[23][89]\\\\d{6,7}|4[3-79]\\\\d{6}|[89]00\\\\d{5}\"",[8,9],[[\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""[23][89]|4[3-79]\""]],[\""(\\\\d{3})(\\\\d{5})\"",\""$1 $2\"",[\""[89]00\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\""]],\""0\"",\""0$1\""],\""YE\"":[\""967\"",\""[1-7]\\\\d{6,8}\"",[7,8,9],[[\""([1-7])(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[1-6]|7[24-68]\""]],[\""(7\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""7[0137]\""]]],\""0\"",\""0$1\""],\""YT\"":[\""262\"",\""[268]\\\\d{8}\"",[9],[[\""([268]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\""$1 $2 $3 $4\"",[\""[268]\""]]],\""0\"",null,null,null,null,\""269|63\""],\""ZA\"":[\""27\"",\""[1-79]\\\\d{8}|8\\\\d{4,8}\"",[5,6,7,8,9],[[\""(860)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""860\""]],[\""(\\\\d{2})(\\\\d{3,4})\"",\""$1 $2\"",[\""8[1-4]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\""$1 $2 $3\"",[\""8[1-4]\""]],[\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[1-79]|8(?:[0-57]|6[1-9])\""]]],\""0\"",\""0$1\""],\""ZM\"":[\""260\"",\""[289]\\\\d{8}\"",[9],[[\""(\\\\d{2})(\\\\d{4})\"",\""$1 $2\"",null,\""$1\""],[\""([1-8])(\\\\d{2})(\\\\d{4})\"",\""$1 $2 $3\"",[\""[1-8]\""],\""$1\""],[\""([29]\\\\d)(\\\\d{7})\"",\""$1 $2\"",[\""[29]\""]],[\""(800)(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""800\""]]],\""0\"",\""0$1\""],\""ZW\"":[\""263\"",\""2(?:[0-57-9]\\\\d{3,8}|6(?:[14]\\\\d{7}|\\\\d{4}))|[13-69]\\\\d{4,9}|7\\\\d{8}|8[06]\\\\d{5,8}\"",[5,6,7,8,9,10],[[\""([49])(\\\\d{3})(\\\\d{2,4})\"",\""$1 $2 $3\"",[\""4|9[2-9]\""]],[\""(7\\\\d)(\\\\d{3})(\\\\d{4})\"",\""$1 $2 $3\"",[\""7\""]],[\""(86\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\""$1 $2 $3\"",[\""86[24]\""]],[\""([2356]\\\\d{2})(\\\\d{3,5})\"",\""$1 $2\"",[\""2(?:0[45]|2[278]|[49]8|[78])|3(?:[09]8|17|3[78]|7[1569]|8[37])|5[15][78]|6(?:[29]8|37|[68][78]|75)\""]],[\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""2(?:1[39]|2[0157]|31|[56][14]|7[35]|84)|329\""]],[\""([1-356]\\\\d)(\\\\d{3,5})\"",\""$1 $2\"",[\""1[3-9]|2[02569]|3[0-69]|5[05689]|6\""]],[\""([235]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\""$1 $2 $3\"",[\""[23]9|54\""]],[\""([25]\\\\d{3})(\\\\d{3,5})\"",\""$1 $2\"",[\""(?:25|54)8\"",\""258[23]|5483\""]],[\""(8\\\\d{3})(\\\\d{6})\"",\""$1 $2\"",[\""86\""]],[\""(80\\\\d)(\\\\d{4})\"",\""$1 $2\"",[\""80\""]]],\""0\"",\""0$1\""],\""001\"":[\""979\"",\""\\\\d{9}\"",[9],[[\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\""$1 $2 $3\""]]]}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./metadata.min.json\n// module id = 66\n// module chunks = 0"",""import _getIterator from 'babel-runtime/core-js/get-iterator';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n// This is an enhanced port of Google Android `libphonenumber`'s\n// `asyoutypeformatter.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/blob/8d21a365061de2ba0675c878a710a7b24f74d2ae/javascript/i18n/phonenumbers/asyoutypeformatter.js\n\nimport Metadata from './metadata';\n\nimport { matches_entirely, VALID_PUNCTUATION, PLUS_CHARS, parse_phone_number_digits, parse_national_number_and_country_calling_code } from './common';\n\nimport { VALID_DIGITS, extract_formatted_phone_number, find_country_code, strip_national_prefix } from './parse';\n\nimport { FIRST_GROUP_PATTERN, format_national_number_using_format, local_to_international_style } from './format';\n\nimport { check_number_length_for_type } from './types';\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\nvar DUMMY_DIGIT_MATCHER = new RegExp(DUMMY_DIGIT, 'g');\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \""longest phone number\"" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// The digits that have not been entered yet will be represented by a \\u2008,\n// the punctuation space.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\nvar DIGIT_PLACEHOLDER_MATCHER_GLOBAL = new RegExp(DIGIT_PLACEHOLDER, 'g');\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \""[1-4]\"".\nvar CHARACTER_CLASS_PATTERN = /\\[([^\\[\\]])*\\]/g;\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \""80[0-2]\\d{6,10}\"", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar STANDALONE_DIGIT_PATTERN = /\\d(?=[^,}][^,}])/g;\n\n// A pattern that is used to determine if a `format` is eligible\n// to be used by the \""as you type formatter\"".\n// It is eligible when the `format` contains groups of the dollar sign\n// followed by a single digit, separated by valid phone number punctuation.\n// This prevents invalid punctuation (such as the star sign in Israeli star numbers)\n// getting into the output of the \""as you type formatter\"".\nvar ELIGIBLE_FORMAT_PATTERN = new RegExp('^' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)+' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \""leading digits pattern\"" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\n\nvar VALID_INCOMPLETE_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\nvar VALID_INCOMPLETE_PHONE_NUMBER_PATTERN = new RegExp('^' + VALID_INCOMPLETE_PHONE_NUMBER + '$', 'i');\n\nvar AsYouType = function () {\n\t/**\r\n  * @param {string} [country_code] - The default country used for parsing non-international phone numbers.\r\n  * @param {Object} metadata\r\n  */\n\tfunction AsYouType(country_code, metadata) {\n\t\t_classCallCheck(this, AsYouType);\n\n\t\tthis.metadata = new Metadata(metadata);\n\n\t\tif (country_code && this.metadata.hasCountry(country_code)) {\n\t\t\tthis.default_country = country_code;\n\t\t}\n\n\t\tthis.reset();\n\t}\n\n\t_createClass(AsYouType, [{\n\t\tkey: 'input',\n\t\tvalue: function input(text) {\n\t\t\t// Parse input\n\n\t\t\tvar extracted_number = extract_formatted_phone_number(text);\n\n\t\t\t// Special case for a lone '+' sign\n\t\t\t// since it's not considered a possible phone number.\n\t\t\tif (!extracted_number) {\n\t\t\t\tif (text && text.indexOf('+') >= 0) {\n\t\t\t\t\textracted_number = '+';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Validate possible first part of a phone number\n\t\t\tif (!matches_entirely(extracted_number, VALID_INCOMPLETE_PHONE_NUMBER_PATTERN)) {\n\t\t\t\treturn this.current_output;\n\t\t\t}\n\n\t\t\treturn this.process_input(parse_phone_number_digits(extracted_number));\n\t\t}\n\t}, {\n\t\tkey: 'process_input',\n\t\tvalue: function process_input(input) {\n\t\t\t// If an out of position '+' sign detected\n\t\t\t// (or a second '+' sign),\n\t\t\t// then just drop it from the input.\n\t\t\tif (input[0] === '+') {\n\t\t\t\tif (!this.parsed_input) {\n\t\t\t\t\tthis.parsed_input += '+';\n\n\t\t\t\t\t// If a default country was set\n\t\t\t\t\t// then reset it because an explicitly international\n\t\t\t\t\t// phone number is being entered\n\t\t\t\t\tthis.reset_countriness();\n\t\t\t\t}\n\n\t\t\t\tinput = input.slice(1);\n\t\t\t}\n\n\t\t\t// Raw phone number\n\t\t\tthis.parsed_input += input;\n\n\t\t\t// // Reset phone number validation state\n\t\t\t// this.valid = false\n\n\t\t\t// Add digits to the national number\n\t\t\tthis.national_number += input;\n\n\t\t\t// Try to format the parsed input\n\n\t\t\tif (this.is_international()) {\n\t\t\t\tif (!this.countryCallingCode) {\n\t\t\t\t\t// No need to format anything\n\t\t\t\t\t// if there's no national phone number.\n\t\t\t\t\t// (e.g. just the country calling code)\n\t\t\t\t\tif (!this.national_number) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If one looks at country phone codes\n\t\t\t\t\t// then he can notice that no one country phone code\n\t\t\t\t\t// is ever a (leftmost) substring of another country phone code.\n\t\t\t\t\t// So if a valid country code is extracted so far\n\t\t\t\t\t// then it means that this is the country code.\n\n\t\t\t\t\t// If no country phone code could be extracted so far,\n\t\t\t\t\t// then just return the raw phone number,\n\t\t\t\t\t// because it has no way of knowing\n\t\t\t\t\t// how to format the phone number so far.\n\t\t\t\t\tif (!this.extract_country_calling_code()) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Initialize country-specific data\n\t\t\t\t\tthis.initialize_phone_number_formats_for_this_country_calling_code();\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t}\n\t\t\t\t// `this.country` could be `undefined`,\n\t\t\t\t// for instance, when there is ambiguity\n\t\t\t\t// in a form of several different countries\n\t\t\t\t// each corresponding to the same country phone code\n\t\t\t\t// (e.g. NANPA: USA, Canada, etc),\n\t\t\t\t// and there's not enough digits entered\n\t\t\t\t// to reliably determine the country\n\t\t\t\t// the phone number belongs to.\n\t\t\t\t// Therefore, in cases of such ambiguity,\n\t\t\t\t// each time something is input,\n\t\t\t\t// try to determine the country\n\t\t\t\t// (if it's not determined yet).\n\t\t\t\telse if (!this.country) {\n\t\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Some national prefixes are substrings of other national prefixes\n\t\t\t\t// (for the same country), therefore try to extract national prefix each time\n\t\t\t\t// because a longer national prefix might be available at some point in time.\n\n\t\t\t\tvar previous_national_prefix = this.national_prefix;\n\t\t\t\tthis.national_number = this.national_prefix + this.national_number;\n\n\t\t\t\t// Possibly extract a national prefix\n\t\t\t\tthis.extract_national_prefix();\n\n\t\t\t\tif (this.national_prefix !== previous_national_prefix) {\n\t\t\t\t\t// National number has changed\n\t\t\t\t\t// (due to another national prefix been extracted)\n\t\t\t\t\t// therefore national number has changed\n\t\t\t\t\t// therefore reset all previous formatting data.\n\t\t\t\t\t// (and leading digits matching state)\n\t\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.should_format()) {\n\t\t\t\treturn this.format_as_non_formatted_number();\n\t\t\t}\n\n\t\t\t// Check the available phone number formats\n\t\t\t// based on the currently available leading digits.\n\t\t\tthis.match_formats_by_leading_digits();\n\n\t\t\t// Format the phone number (given the next digits)\n\t\t\tvar formatted_national_phone_number = this.format_national_phone_number(input);\n\n\t\t\t// If the phone number could be formatted,\n\t\t\t// then return it, possibly prepending with country phone code\n\t\t\t// (for international phone numbers only)\n\t\t\tif (formatted_national_phone_number) {\n\t\t\t\treturn this.full_phone_number(formatted_national_phone_number);\n\t\t\t}\n\n\t\t\t// If the phone number couldn't be formatted,\n\t\t\t// then just fall back to the raw phone number.\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_as_non_formatted_number',\n\t\tvalue: function format_as_non_formatted_number() {\n\t\t\tif (this.is_international() && this.countryCallingCode) {\n\t\t\t\tif (this.national_number) {\n\t\t\t\t\t// For convenience, the public `.template` property\n\t\t\t\t\t// contains the whole international number\n\t\t\t\t\t// if the phone number being input is international:\n\t\t\t\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\n\t\t\t\t\t// a spacebar and then the template for the national number digits.\n\t\t\t\t\tthis.template = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.countryCallingCode.length) + ' ' + repeat(DIGIT_PLACEHOLDER, this.national_number.length);\n\n\t\t\t\t\treturn '+' + this.countryCallingCode + ' ' + this.national_number;\n\t\t\t\t}\n\n\t\t\t\treturn '+' + this.countryCallingCode;\n\t\t\t}\n\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_national_phone_number',\n\t\tvalue: function format_national_phone_number(next_digits) {\n\t\t\t// Format the next phone number digits\n\t\t\t// using the previously chosen phone number format.\n\t\t\t//\n\t\t\t// This is done here because if `attempt_to_format_complete_phone_number`\n\t\t\t// was placed before this call then the `template`\n\t\t\t// wouldn't reflect the situation correctly (and would therefore be inconsistent)\n\t\t\t//\n\t\t\tvar national_number_formatted_with_previous_format = void 0;\n\t\t\tif (this.chosen_format) {\n\t\t\t\tnational_number_formatted_with_previous_format = this.format_next_national_number_digits(next_digits);\n\t\t\t}\n\n\t\t\t// See if the input digits can be formatted properly already. If not,\n\t\t\t// use the results from format_next_national_number_digits(), which does formatting\n\t\t\t// based on the formatting pattern chosen.\n\n\t\t\tvar formatted_number = this.attempt_to_format_complete_phone_number();\n\n\t\t\t// Just because a phone number doesn't have a suitable format\n\t\t\t// that doesn't mean that the phone is invalid\n\t\t\t// because phone number formats only format phone numbers,\n\t\t\t// they don't validate them and some (rare) phone numbers\n\t\t\t// are meant to stay non-formatted.\n\t\t\tif (formatted_number) {\n\t\t\t\t// if (this.country)\n\t\t\t\t// {\n\t\t\t\t// \tthis.valid = true\n\t\t\t\t// }\n\n\t\t\t\treturn formatted_number;\n\t\t\t}\n\n\t\t\t// For some phone number formats national prefix\n\n\t\t\t// If the previously chosen phone number format\n\t\t\t// didn't match the next (current) digit being input\n\t\t\t// (leading digits pattern didn't match).\n\t\t\tif (this.choose_another_format()) {\n\t\t\t\t// And a more appropriate phone number format\n\t\t\t\t// has been chosen for these `leading digits`,\n\t\t\t\t// then format the national phone number (so far)\n\t\t\t\t// using the newly selected phone number pattern.\n\n\t\t\t\t// Will return `undefined` if it couldn't format\n\t\t\t\t// the supplied national number\n\t\t\t\t// using the selected phone number pattern.\n\n\t\t\t\treturn this.reformat_national_number();\n\t\t\t}\n\n\t\t\t// If could format the next (current) digit\n\t\t\t// using the previously chosen phone number format\n\t\t\t// then return the formatted number so far.\n\n\t\t\t// If no new phone number format could be chosen,\n\t\t\t// and couldn't format the supplied national number\n\t\t\t// using the selected phone number pattern,\n\t\t\t// then it will return `undefined`.\n\n\t\t\treturn national_number_formatted_with_previous_format;\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset() {\n\t\t\t// Input stripped of non-phone-number characters.\n\t\t\t// Can only contain a possible leading '+' sign and digits.\n\t\t\tthis.parsed_input = '';\n\n\t\t\tthis.current_output = '';\n\n\t\t\t// This contains the national prefix that has been extracted. It contains only\n\t\t\t// digits without formatting.\n\t\t\tthis.national_prefix = '';\n\n\t\t\tthis.national_number = '';\n\n\t\t\tthis.reset_countriness();\n\n\t\t\tthis.reset_format();\n\n\t\t\t// this.valid = false\n\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'reset_country',\n\t\tvalue: function reset_country() {\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.country = this.default_country;\n\t\t\t} else {\n\t\t\t\tthis.country = undefined;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_countriness',\n\t\tvalue: function reset_countriness() {\n\t\t\tthis.reset_country();\n\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.metadata.country(this.default_country);\n\t\t\t\tthis.countryCallingCode = this.metadata.countryCallingCode();\n\n\t\t\t\tthis.initialize_phone_number_formats_for_this_country_calling_code();\n\t\t\t} else {\n\t\t\t\tthis.metadata.country(undefined);\n\t\t\t\tthis.countryCallingCode = undefined;\n\n\t\t\t\tthis.available_formats = [];\n\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_format',\n\t\tvalue: function reset_format() {\n\t\t\tthis.chosen_format = undefined;\n\t\t\tthis.template = undefined;\n\t\t\tthis.partially_populated_template = undefined;\n\t\t\tthis.last_match_position = -1;\n\t\t}\n\n\t\t// Format each digit of national phone number (so far)\n\t\t// using the newly selected phone number pattern.\n\n\t}, {\n\t\tkey: 'reformat_national_number',\n\t\tvalue: function reformat_national_number() {\n\t\t\t// Format each digit of national phone number (so far)\n\t\t\t// using the selected phone number pattern.\n\t\t\treturn this.format_next_national_number_digits(this.national_number);\n\t\t}\n\t}, {\n\t\tkey: 'initialize_phone_number_formats_for_this_country_calling_code',\n\t\tvalue: function initialize_phone_number_formats_for_this_country_calling_code() {\n\t\t\t// Get all \""eligible\"" phone number formats for this country\n\t\t\tthis.available_formats = this.metadata.formats().filter(function (format) {\n\t\t\t\treturn ELIGIBLE_FORMAT_PATTERN.test(format.internationalFormat());\n\t\t\t});\n\n\t\t\tthis.matching_formats = this.available_formats;\n\t\t}\n\t}, {\n\t\tkey: 'match_formats_by_leading_digits',\n\t\tvalue: function match_formats_by_leading_digits() {\n\t\t\tvar leading_digits = this.national_number;\n\n\t\t\t// \""leading digits\"" pattern list starts with\n\t\t\t// one of a maximum length of 3 digits,\n\t\t\t// and then with each additional digit\n\t\t\t// a more precise \""leading digits\"" pattern is specified.\n\n\t\t\tvar index_of_leading_digits_pattern = leading_digits.length - MIN_LEADING_DIGITS_LENGTH;\n\n\t\t\tif (index_of_leading_digits_pattern < 0) {\n\t\t\t\tindex_of_leading_digits_pattern = 0;\n\t\t\t}\n\n\t\t\tthis.matching_formats = this.matching_formats.filter(function (format) {\n\t\t\t\tvar leading_digits_pattern_count = format.leadingDigitsPatterns().length;\n\n\t\t\t\t// Keep everything that isn't restricted by leading digits.\n\t\t\t\tif (leading_digits_pattern_count === 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar leading_digits_pattern_index = Math.min(index_of_leading_digits_pattern, leading_digits_pattern_count - 1);\n\t\t\t\tvar leading_digits_pattern = format.leadingDigitsPatterns()[leading_digits_pattern_index];\n\n\t\t\t\t// Brackets are required for `^` to be applied to\n\t\t\t\t// all or-ed (`|`) parts, not just the first one.\n\t\t\t\treturn new RegExp('^(' + leading_digits_pattern + ')').test(leading_digits);\n\t\t\t});\n\n\t\t\t// If there was a phone number format chosen\n\t\t\t// and it no longer holds given the new leading digits then reset it.\n\t\t\t// The test for this `if` condition is marked as:\n\t\t\t// \""Reset a chosen format when it no longer holds given the new leading digits\"".\n\t\t\t// To construct a valid test case for this one can find a country\n\t\t\t// in `PhoneNumberMetadata.xml` yielding one format for 3 `<leadingDigits>`\n\t\t\t// and yielding another format for 4 `<leadingDigits>` (Australia in this case).\n\t\t\tif (this.chosen_format && this.matching_formats.indexOf(this.chosen_format) === -1) {\n\t\t\t\tthis.reset_format();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'should_format',\n\t\tvalue: function should_format() {\n\t\t\t// Start matching any formats at all when the national number\n\t\t\t// entered so far is at least 3 digits long,\n\t\t\t// otherwise format matching would give false negatives\n\t\t\t// like when the digits entered so far are `2`\n\t\t\t// and the leading digits pattern is `21` –\n\t\t\t// it's quite obvious in this case that the format could be the one\n\t\t\t// but due to the absence of further digits it would give false negative.\n\t\t\t//\n\t\t\t// Google could have provided leading digits patterns starting\n\t\t\t// with a single digit but they chose not to (for whatever reasons).\n\t\t\t//\n\t\t\treturn this.national_number >= MIN_LEADING_DIGITS_LENGTH;\n\t\t}\n\n\t\t// Check to see if there is an exact pattern match for these digits. If so, we\n\t\t// should use this instead of any other formatting template whose\n\t\t// `leadingDigitsPattern` also matches the input.\n\n\t}, {\n\t\tkey: 'attempt_to_format_complete_phone_number',\n\t\tvalue: function attempt_to_format_complete_phone_number() {\n\t\t\tvar _iteratorNormalCompletion = true;\n\t\t\tvar _didIteratorError = false;\n\t\t\tvar _iteratorError = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator = _getIterator(this.matching_formats), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\t\t\tvar format = _step.value;\n\n\t\t\t\t\tvar matcher = new RegExp('^(?:' + format.pattern() + ')$');\n\n\t\t\t\t\tif (!matcher.test(this.national_number)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.is_format_applicable(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// To leave the formatter in a consistent state\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t\tvar formatted_number = format_national_number_using_format(this.national_number, format, this.is_international(), this.national_prefix.length > 0, this.metadata);\n\n\t\t\t\t\t// Set `this.template` and `this.partially_populated_template`.\n\t\t\t\t\t//\n\t\t\t\t\t// `else` case doesn't ever happen\n\t\t\t\t\t// with the current metadata,\n\t\t\t\t\t// but just in case.\n\t\t\t\t\t//\n\t\t\t\t\t/* istanbul ignore else */\n\t\t\t\t\tif (this.create_formatting_template(format)) {\n\t\t\t\t\t\t// Populate `this.partially_populated_template`\n\t\t\t\t\t\tthis.reformat_national_number();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Prepend `+CountryCode` in case of an international phone number\n\t\t\t\t\t\tvar full_number = this.full_phone_number(formatted_number);\n\t\t\t\t\t\tthis.template = full_number.replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER);\n\t\t\t\t\t\tthis.partially_populated_template = full_number;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn formatted_number;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError = true;\n\t\t\t\t_iteratorError = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t\t\t_iterator.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError) {\n\t\t\t\t\t\tthrow _iteratorError;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Prepends `+CountryCode` in case of an international phone number\n\n\t}, {\n\t\tkey: 'full_phone_number',\n\t\tvalue: function full_phone_number(formatted_national_number) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn '+' + this.countryCallingCode + ' ' + formatted_national_number;\n\t\t\t}\n\n\t\t\treturn formatted_national_number;\n\t\t}\n\n\t\t// Extracts the country calling code from the beginning\n\t\t// of the entered `national_number` (so far),\n\t\t// and places the remaining input into the `national_number`.\n\n\t}, {\n\t\tkey: 'extract_country_calling_code',\n\t\tvalue: function extract_country_calling_code() {\n\t\t\tvar _parse_national_numbe = parse_national_number_and_country_calling_code(this.parsed_input, this.metadata),\n\t\t\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t\t\t    number = _parse_national_numbe.number;\n\n\t\t\tif (!countryCallingCode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.countryCallingCode = countryCallingCode;\n\t\t\tthis.national_number = number;\n\n\t\t\tthis.metadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t\t\treturn this.metadata.selectedCountry() !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'extract_national_prefix',\n\t\tvalue: function extract_national_prefix() {\n\t\t\tthis.national_prefix = '';\n\n\t\t\tif (!this.metadata.selectedCountry()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only strip national prefixes for non-international phone numbers\n\t\t\t// because national prefixes can't be present in international phone numbers.\n\t\t\t// Otherwise, while forgiving, it would parse a NANPA number `+1 1877 215 5230`\n\t\t\t// first to `1877 215 5230` and then, stripping the leading `1`, to `877 215 5230`,\n\t\t\t// and then it would assume that's a valid number which it isn't.\n\t\t\t// So no forgiveness for grandmas here.\n\t\t\t// The issue asking for this fix:\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/159\n\t\t\tvar potential_national_number = strip_national_prefix(this.national_number, this.metadata);\n\n\t\t\t// We require that the NSN remaining after stripping the national prefix and\n\t\t\t// carrier code be long enough to be a possible length for the region.\n\t\t\t// Otherwise, we don't do the stripping, since the original number could be\n\t\t\t// a valid short number.\n\t\t\tif (!this.metadata.possibleLengths() || this.is_possible_number(this.national_number) && !this.is_possible_number(potential_national_number)) {\n\t\t\t\t// Verify the parsed national (significant) number for this country\n\t\t\t\tvar national_number_rule = new RegExp(this.metadata.nationalNumberPattern());\n\t\t\t\t//\n\t\t\t\t// If the original number (before stripping national prefix) was viable,\n\t\t\t\t// and the resultant number is not, then prefer the original phone number.\n\t\t\t\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t\t\t\t// a national prefix and a leading digit of a valid national phone number,\n\t\t\t\t// like `8` is the national prefix for Russia and both\n\t\t\t\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t\t\t\tif (matches_entirely(this.national_number, national_number_rule) && !matches_entirely(potential_national_number, national_number_rule)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.national_prefix = this.national_number.slice(0, this.national_number.length - potential_national_number.length);\n\t\t\tthis.national_number = potential_national_number;\n\n\t\t\treturn this.national_prefix;\n\t\t}\n\t}, {\n\t\tkey: 'is_possible_number',\n\t\tvalue: function is_possible_number(number) {\n\t\t\tvar validation_result = check_number_length_for_type(number, undefined, this.metadata);\n\t\t\tswitch (validation_result) {\n\t\t\t\tcase 'IS_POSSIBLE':\n\t\t\t\t\treturn true;\n\t\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t\t\t// \treturn !this.is_international()\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'choose_another_format',\n\t\tvalue: function choose_another_format() {\n\t\t\t// When there are multiple available formats, the formatter uses the first\n\t\t\t// format where a formatting template could be created.\n\t\t\tvar _iteratorNormalCompletion2 = true;\n\t\t\tvar _didIteratorError2 = false;\n\t\t\tvar _iteratorError2 = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator2 = _getIterator(this.matching_formats), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\t\tvar format = _step2.value;\n\n\t\t\t\t\t// If this format is currently being used\n\t\t\t\t\t// and is still possible, then stick to it.\n\t\t\t\t\tif (this.chosen_format === format) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this `format` is suitable for \""as you type\"",\n\t\t\t\t\t// then extract the template from this format\n\t\t\t\t\t// and use it to format the phone number being input.\n\n\t\t\t\t\tif (!this.is_format_applicable(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.create_formatting_template(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t\t// With a new formatting template, the matched position\n\t\t\t\t\t// using the old template needs to be reset.\n\t\t\t\t\tthis.last_match_position = -1;\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// No format matches the phone number,\n\t\t\t\t// therefore set `country` to `undefined`\n\t\t\t\t// (or to the default country).\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError2 = true;\n\t\t\t\t_iteratorError2 = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t\t_iterator2.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.reset_country();\n\n\t\t\t// No format matches the national phone number entered\n\t\t\tthis.reset_format();\n\t\t}\n\t}, {\n\t\tkey: 'is_format_applicable',\n\t\tvalue: function is_format_applicable(format) {\n\t\t\t// If national prefix is mandatory for this phone number format\n\t\t\t// and the user didn't input the national prefix,\n\t\t\t// then this phone number format isn't suitable.\n\t\t\tif (!this.is_international() && !this.national_prefix && format.nationalPrefixIsMandatoryWhenFormatting()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t}, {\n\t\tkey: 'create_formatting_template',\n\t\tvalue: function create_formatting_template(format) {\n\t\t\t// The formatter doesn't format numbers when numberPattern contains '|', e.g.\n\t\t\t// (20|3)\\d{4}. In those cases we quickly return.\n\t\t\t// (Though there's no such format in current metadata)\n\t\t\t/* istanbul ignore if */\n\t\t\tif (format.pattern().indexOf('|') >= 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get formatting template for this phone number format\n\t\t\tvar template = this.get_template_for_phone_number_format_pattern(format);\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (!template) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This one is for national number only\n\t\t\tthis.partially_populated_template = template;\n\n\t\t\t// For convenience, the public `.template` property\n\t\t\t// contains the whole international number\n\t\t\t// if the phone number being input is international:\n\t\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\n\t\t\t// a spacebar and then the template for the formatted national number.\n\t\t\tif (this.is_international()) {\n\t\t\t\tthis.template = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.countryCallingCode.length) + ' ' + template;\n\t\t\t}\n\t\t\t// For local numbers, replace national prefix\n\t\t\t// with a digit placeholder.\n\t\t\telse {\n\t\t\t\t\tthis.template = template.replace(/\\d/g, DIGIT_PLACEHOLDER);\n\t\t\t\t}\n\n\t\t\t// This one is for the full phone number\n\t\t\treturn this.template;\n\t\t}\n\n\t\t// Generates formatting template for a phone number format\n\n\t}, {\n\t\tkey: 'get_template_for_phone_number_format_pattern',\n\t\tvalue: function get_template_for_phone_number_format_pattern(format) {\n\t\t\t// A very smart trick by the guys at Google\n\t\t\tvar number_pattern = format.pattern()\n\t\t\t// Replace anything in the form of [..] with \\d\n\t\t\t.replace(CHARACTER_CLASS_PATTERN, '\\\\d')\n\t\t\t// Replace any standalone digit (not the one in `{}`) with \\d\n\t\t\t.replace(STANDALONE_DIGIT_PATTERN, '\\\\d');\n\n\t\t\t// This match will always succeed,\n\t\t\t// because the \""longest dummy phone number\""\n\t\t\t// has enough length to accomodate any possible\n\t\t\t// national phone number format pattern.\n\t\t\tvar dummy_phone_number_matching_format_pattern = LONGEST_DUMMY_PHONE_NUMBER.match(number_pattern)[0];\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (this.national_number.length > dummy_phone_number_matching_format_pattern.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Prepare the phone number format\n\t\t\tvar number_format = this.get_format_format(format);\n\n\t\t\t// Get a formatting template which can be used to efficiently format\n\t\t\t// a partial number where digits are added one by one.\n\n\t\t\t// Below `strict_pattern` is used for the\n\t\t\t// regular expression (with `^` and `$`).\n\t\t\t// This wasn't originally in Google's `libphonenumber`\n\t\t\t// and I guess they don't really need it\n\t\t\t// because they're not using \""templates\"" to format phone numbers\n\t\t\t// but I added `strict_pattern` after encountering\n\t\t\t// South Korean phone number formatting bug.\n\t\t\t//\n\t\t\t// Non-strict regular expression bug demonstration:\n\t\t\t//\n\t\t\t// this.national_number : `111111111` (9 digits)\n\t\t\t//\n\t\t\t// number_pattern : (\\d{2})(\\d{3,4})(\\d{4})\n\t\t\t// number_format : `$1 $2 $3`\n\t\t\t// dummy_phone_number_matching_format_pattern : `9999999999` (10 digits)\n\t\t\t//\n\t\t\t// '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \""99 9999 9999\""\n\t\t\t//\n\t\t\t// template : xx xxxx xxxx\n\t\t\t//\n\t\t\t// But the correct template in this case is `xx xxx xxxx`.\n\t\t\t// The template was generated incorrectly because of the\n\t\t\t// `{3,4}` variability in the `number_pattern`.\n\t\t\t//\n\t\t\t// The fix is, if `this.national_number` has already sufficient length\n\t\t\t// to satisfy the `number_pattern` completely then `this.national_number` is used\n\t\t\t// instead of `dummy_phone_number_matching_format_pattern`.\n\n\t\t\tvar strict_pattern = new RegExp('^' + number_pattern + '$');\n\t\t\tvar national_number_dummy_digits = this.national_number.replace(/\\d/g, DUMMY_DIGIT);\n\n\t\t\t// If `this.national_number` has already sufficient length\n\t\t\t// to satisfy the `number_pattern` completely then use it\n\t\t\t// instead of `dummy_phone_number_matching_format_pattern`.\n\t\t\tif (strict_pattern.test(national_number_dummy_digits)) {\n\t\t\t\tdummy_phone_number_matching_format_pattern = national_number_dummy_digits;\n\t\t\t}\n\n\t\t\t// Generate formatting template for this phone number format\n\t\t\treturn dummy_phone_number_matching_format_pattern\n\t\t\t// Format the dummy phone number according to the format\n\t\t\t.replace(new RegExp(number_pattern), number_format)\n\t\t\t// Replace each dummy digit with a DIGIT_PLACEHOLDER\n\t\t\t.replace(DUMMY_DIGIT_MATCHER, DIGIT_PLACEHOLDER);\n\t\t}\n\t}, {\n\t\tkey: 'format_next_national_number_digits',\n\t\tvalue: function format_next_national_number_digits(digits) {\n\t\t\tvar _iteratorNormalCompletion3 = true;\n\t\t\tvar _didIteratorError3 = false;\n\t\t\tvar _iteratorError3 = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator3 = _getIterator(digits), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\t\tvar digit = _step3.value;\n\n\t\t\t\t\t// If there is room for more digits in current `template`,\n\t\t\t\t\t// then set the next digit in the `template`,\n\t\t\t\t\t// and return the formatted digits so far.\n\n\t\t\t\t\t// If more digits are entered than the current format could handle\n\t\t\t\t\tif (this.partially_populated_template.slice(this.last_match_position + 1).search(DIGIT_PLACEHOLDER_MATCHER) === -1) {\n\t\t\t\t\t\t// Reset the current format,\n\t\t\t\t\t\t// so that the new format will be chosen\n\t\t\t\t\t\t// in a subsequent `this.choose_another_format()` call\n\t\t\t\t\t\t// later in code.\n\t\t\t\t\t\tthis.chosen_format = undefined;\n\t\t\t\t\t\tthis.template = undefined;\n\t\t\t\t\t\tthis.partially_populated_template = undefined;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.last_match_position = this.partially_populated_template.search(DIGIT_PLACEHOLDER_MATCHER);\n\t\t\t\t\tthis.partially_populated_template = this.partially_populated_template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n\t\t\t\t}\n\n\t\t\t\t// Return the formatted phone number so far\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError3 = true;\n\t\t\t\t_iteratorError3 = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t\t_iterator3.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn close_dangling_braces(this.partially_populated_template, this.last_match_position + 1).replace(DIGIT_PLACEHOLDER_MATCHER_GLOBAL, ' ');\n\t\t}\n\t}, {\n\t\tkey: 'is_international',\n\t\tvalue: function is_international() {\n\t\t\treturn this.parsed_input && this.parsed_input[0] === '+';\n\t\t}\n\t}, {\n\t\tkey: 'get_format_format',\n\t\tvalue: function get_format_format(format) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn local_to_international_style(format.internationalFormat());\n\t\t\t}\n\n\t\t\t// If national prefix formatting rule is set\n\t\t\t// for this phone number format\n\t\t\tif (format.nationalPrefixFormattingRule()) {\n\t\t\t\t// If the user did input the national prefix\n\t\t\t\t// (or if the national prefix formatting rule does not require national prefix)\n\t\t\t\t// then maybe make it part of the phone number template\n\t\t\t\tif (this.national_prefix || !format.usesNationalPrefix()) {\n\t\t\t\t\t// Make the national prefix part of the phone number template\n\t\t\t\t\treturn format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn format.format();\n\t\t}\n\n\t\t// Determines the country of the phone number\n\t\t// entered so far based on the country phone code\n\t\t// and the national phone number.\n\n\t}, {\n\t\tkey: 'determine_the_country',\n\t\tvalue: function determine_the_country() {\n\t\t\tthis.country = find_country_code(this.countryCallingCode, this.national_number, this.metadata);\n\t\t}\n\t}, {\n\t\tkey: 'getNationalNumber',\n\t\tvalue: function getNationalNumber() {\n\t\t\treturn this.national_number;\n\t\t}\n\t}]);\n\n\treturn AsYouType;\n}();\n\nexport default AsYouType;\n\n\nexport function close_dangling_braces(template, cut_before) {\n\tvar retained_template = template.slice(0, cut_before);\n\n\tvar opening_braces = count_occurences('(', retained_template);\n\tvar closing_braces = count_occurences(')', retained_template);\n\n\tvar dangling_braces = opening_braces - closing_braces;\n\n\twhile (dangling_braces > 0 && cut_before < template.length) {\n\t\tif (template[cut_before] === ')') {\n\t\t\tdangling_braces--;\n\t\t}\n\t\tcut_before++;\n\t}\n\n\treturn template.slice(0, cut_before);\n}\n\n// Counts all occurences of a symbol in a string\nexport function count_occurences(symbol, string) {\n\tvar count = 0;\n\n\tvar _iteratorNormalCompletion4 = true;\n\tvar _didIteratorError4 = false;\n\tvar _iteratorError4 = undefined;\n\n\ttry {\n\t\tfor (var _iterator4 = _getIterator(string), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n\t\t\tvar character = _step4.value;\n\n\t\t\tif (character === symbol) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError4 = true;\n\t\t_iteratorError4 = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion4 && _iterator4.return) {\n\t\t\t\t_iterator4.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError4) {\n\t\t\t\tthrow _iteratorError4;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nexport function repeat(string, times) {\n\tif (times < 1) {\n\t\treturn '';\n\t}\n\n\tvar result = '';\n\n\twhile (times > 1) {\n\t\tif (times & 1) {\n\t\t\tresult += string;\n\t\t}\n\n\t\ttimes >>= 1;\n\t\tstring += string;\n\t}\n\n\treturn result + string;\n}\n//# sourceMappingURL=AsYouType.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/AsYouType.js"",""import parse, { is_viable_phone_number } from './parse';\nimport get_number_type, { sort_out_arguments } from './types';\n\n// Checks if a given phone number is valid\n//\n// Example use cases:\n//\n// ```js\n// is_valid('8005553535', 'RU')\n// is_valid('8005553535', 'RU', metadata)\n// is_valid({ phone: '8005553535', country: 'RU' })\n// is_valid({ phone: '8005553535', country: 'RU' }, metadata)\n// is_valid('+78005553535')\n// is_valid('+78005553535', metadata)\n// ```\n//\nexport default function is_valid(arg_1, arg_2, arg_3) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (!input) {\n\t\treturn false;\n\t}\n\n\tif (!input.country) {\n\t\treturn false;\n\t}\n\n\tif (!metadata.hasCountry(input.country)) {\n\t\tthrow new Error('Unknown country: ' + input.country);\n\t}\n\n\tmetadata.country(input.country);\n\n\tif (metadata.hasTypes()) {\n\t\treturn get_number_type(input, metadata.metadata) !== undefined;\n\t}\n\n\treturn true;\n}\n//# sourceMappingURL=validate.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/validate.js"",""module.exports = { \""default\"": require(\""core-js/library/fn/object/create\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/create.js\n// module id = 69\n// module chunks = 0"",""import metadata from './metadata.min.json'\r\n\r\nimport parseCustom from './es6/parse'\r\nimport getNumberTypeCustom from './es6/types'\r\nimport formatCustom from './es6/format'\r\nimport isValidNumberCustom from './es6/validate'\r\nimport AsYouTypeCustom from './es6/AsYouType'\r\n\r\nimport Metadata from './es6/metadata'\r\nexport { default as Metadata } from './es6/metadata'\r\n\r\nexport { parseRFC3966, formatRFC3966 } from './es6/RFC3966'\r\n\r\nexport function parse()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn parseCustom.apply(this, parameters)\r\n}\r\n\r\nexport function format()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn formatCustom.apply(this, parameters)\r\n}\r\n\r\nexport function getNumberType()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn getNumberTypeCustom.apply(this, parameters)\r\n}\r\n\r\nexport function isValidNumber()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn isValidNumberCustom.apply(this, parameters)\r\n}\r\n\r\nexport function AsYouType(country)\r\n{\r\n\tAsYouTypeCustom.call(this, country, metadata)\r\n}\r\n\r\nAsYouType.prototype = Object.create(AsYouTypeCustom.prototype, {})\r\nAsYouType.prototype.constructor = AsYouType\r\n\r\nexport\r\n{\r\n\tdefault as parseCustom\r\n}\r\nfrom './es6/parse'\r\n\r\nexport\r\n{\r\n\t// `DIGITS` are used by `react-phone-number-input`.\r\n\tDIGIT_MAPPINGS as DIGITS\r\n}\r\nfrom './es6/common'\r\n\r\nexport { default as formatCustom }        from './es6/format'\r\nexport { default as isValidNumberCustom } from './es6/validate'\r\nexport { default as getNumberTypeCustom } from './es6/types'\r\n\r\nexport\r\n{\r\n\tdefault as AsYouTypeCustom,\r\n\t// `DIGIT_PLACEHOLDER` is used by `react-phone-number-input`.\r\n\tDIGIT_PLACEHOLDER\r\n}\r\nfrom './es6/AsYouType'\r\n\r\nexport function getCountryCallingCode(country)\r\n{\r\n\treturn getCountryCallingCodeCustom(country, metadata)\r\n}\r\n\r\nexport function getCountryCallingCodeCustom(country, metadata)\r\n{\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\tif (!metadata.hasCountry(country))\r\n\t{\r\n\t\tthrow new Error('Unknown country: ' + country)\r\n\t}\r\n\r\n\treturn metadata.country(country).countryCallingCode()\r\n}\r\n\r\n// `getPhoneCode` name is deprecated, use `getCountryCallingCode` instead.\r\nexport function getPhoneCode(country)\r\n{\r\n\treturn getCountryCallingCode(country)\r\n}\r\n\r\n// `getPhoneCodeCustom` name is deprecated, use `getCountryCallingCodeCustom` instead.\r\nexport function getPhoneCodeCustom(country, metadata)\r\n{\r\n\treturn getCountryCallingCodeCustom(country, metadata)\r\n}\n\n\n// WEBPACK FOOTER //\n// ./index.es6.js"",""module.exports = { \""default\"": require(\""core-js/library/fn/array/from\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/array/from.js\n// module id = 71\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/is-iterable\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/is-iterable.js\n// module id = 72\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/object/assign\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/assign.js\n// module id = 73\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/object/define-property\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/define-property.js\n// module id = 74\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/set\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/set.js\n// module id = 75\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/symbol\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/symbol.js\n// module id = 76\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/symbol/iterator\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/symbol/iterator.js\n// module id = 77\n// module chunks = 0"",""\""use strict\"";\n\nexports.__esModule = true;\n\nvar _isIterable2 = require(\""../core-js/is-iterable\"");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = require(\""../core-js/get-iterator\"");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\""return\""]) _i[\""return\""]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if ((0, _isIterable3.default)(Object(arr))) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\""Invalid attempt to destructure non-iterable instance\"");\n    }\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/slicedToArray.js\n// module id = 78\n// module chunks = 0"",""require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/array/from.js\n// module id = 79\n// module chunks = 0"",""require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/get-iterator.js\n// module id = 80\n// module chunks = 0"",""require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.is-iterable');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/is-iterable.js\n// module id = 81\n// module chunks = 0"",""require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/assign.js\n// module id = 82\n// module chunks = 0"",""require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/create.js\n// module id = 83\n// module chunks = 0"",""require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/define-property.js\n// module id = 84\n// module chunks = 0"",""require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.set');\nrequire('../modules/es7.set.to-json');\nrequire('../modules/es7.set.of');\nrequire('../modules/es7.set.from');\nmodule.exports = require('../modules/_core').Set;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/set.js\n// module id = 85\n// module chunks = 0"",""require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/symbol/index.js\n// module id = 86\n// module chunks = 0"",""require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/symbol/iterator.js\n// module id = 87\n// module chunks = 0"",""module.exports = function () { /* empty */ };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_add-to-unscopables.js\n// module id = 88\n// module chunks = 0"",""var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n  var result = [];\n  forOf(iter, false, result.push, result, ITERATOR);\n  return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_array-from-iterable.js\n// module id = 89\n// module chunks = 0"",""// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_array-includes.js\n// module id = 90\n// module chunks = 0"",""// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_array-methods.js\n// module id = 91\n// module chunks = 0"",""var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_array-species-constructor.js\n// module id = 92\n// module chunks = 0"",""// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_array-species-create.js\n// module id = 93\n// module chunks = 0"",""'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_collection-strong.js\n// module id = 94\n// module chunks = 0"",""// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n  return function toJSON() {\n    if (classof(this) != NAME) throw TypeError(NAME + \""#toJSON isn't generic\"");\n    return from(this);\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_collection-to-json.js\n// module id = 95\n// module chunks = 0"",""'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar meta = require('./_meta');\nvar fails = require('./_fails');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar setToStringTag = require('./_set-to-string-tag');\nvar dP = require('./_object-dp').f;\nvar each = require('./_array-methods')(0);\nvar DESCRIPTORS = require('./_descriptors');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    C = wrapper(function (target, iterable) {\n      anInstance(target, C, NAME, '_c');\n      target._c = new Base();\n      if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);\n    });\n    each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {\n      var IS_ADDER = KEY == 'add' || KEY == 'set';\n      if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {\n        anInstance(this, C, KEY);\n        if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n        var result = this._c[KEY](a === 0 ? 0 : a, b);\n        return IS_ADDER ? this : result;\n      });\n    });\n    IS_WEAK || dP(C.prototype, 'size', {\n      get: function () {\n        return this._c.size;\n      }\n    });\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F, O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_collection.js\n// module id = 96\n// module chunks = 0"",""'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_create-property.js\n// module id = 97\n// module chunks = 0"",""// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_enum-keys.js\n// module id = 98\n// module chunks = 0"",""var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_html.js\n// module id = 99\n// module chunks = 0"",""'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-create.js\n// module id = 100\n// module chunks = 0"",""var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-detect.js\n// module id = 101\n// module chunks = 0"",""'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-assign.js\n// module id = 102\n// module chunks = 0"",""var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-dps.js\n// module id = 103\n// module chunks = 0"",""var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopd.js\n// module id = 104\n// module chunks = 0"",""// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopn-ext.js\n// module id = 105\n// module chunks = 0"",""// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gpo.js\n// module id = 106\n// module chunks = 0"",""'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n    var mapFn = arguments[1];\n    var mapping, A, n, cb;\n    aFunction(this);\n    mapping = mapFn !== undefined;\n    if (mapping) aFunction(mapFn);\n    if (source == undefined) return new this();\n    A = [];\n    if (mapping) {\n      n = 0;\n      cb = ctx(mapFn, arguments[2], 2);\n      forOf(source, false, function (nextItem) {\n        A.push(cb(nextItem, n++));\n      });\n    } else {\n      forOf(source, false, A.push, A);\n    }\n    return new this(A);\n  } });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-collection-from.js\n// module id = 107\n// module chunks = 0"",""'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n  $export($export.S, COLLECTION, { of: function of() {\n    var length = arguments.length;\n    var A = Array(length);\n    while (length--) A[length] = arguments[length];\n    return new this(A);\n  } });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-collection-of.js\n// module id = 108\n// module chunks = 0"",""'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-species.js\n// module id = 109\n// module chunks = 0"",""var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_string-at.js\n// module id = 110\n// module chunks = 0"",""var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-absolute-index.js\n// module id = 111\n// module chunks = 0"",""var anObject = require('./_an-object');\nvar get = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function (it) {\n  var iterFn = get(it);\n  if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.get-iterator.js\n// module id = 112\n// module chunks = 0"",""var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function (it) {\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    // eslint-disable-next-line no-prototype-builtins\n    || Iterators.hasOwnProperty(classof(O));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.is-iterable.js\n// module id = 113\n// module chunks = 0"",""'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.array.from.js\n// module id = 114\n// module chunks = 0"",""'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.array.iterator.js\n// module id = 115\n// module chunks = 0"",""// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.assign.js\n// module id = 116\n// module chunks = 0"",""var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.create.js\n// module id = 117\n// module chunks = 0"",""var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.define-property.js\n// module id = 118\n// module chunks = 0"",""'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value) {\n    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n  }\n}, strong);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.set.js\n// module id = 119\n// module chunks = 0"",""'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    if (it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    replacer = args[1];\n    if (typeof replacer == 'function') $replacer = replacer;\n    if ($replacer || !isArray(replacer)) replacer = function (key, value) {\n      if ($replacer) value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.symbol.js\n// module id = 120\n// module chunks = 0"",""// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.set.from.js\n// module id = 121\n// module chunks = 0"",""// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.set.of.js\n// module id = 122\n// module chunks = 0"",""// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.set.to-json.js\n// module id = 123\n// module chunks = 0"",""require('./_wks-define')('asyncIterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.symbol.async-iterator.js\n// module id = 124\n// module chunks = 0"",""require('./_wks-define')('observable');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.symbol.observable.js\n// module id = 125\n// module chunks = 0"",""module.exports = function cmp (a, b) {\n    var pa = a.split('.');\n    var pb = b.split('.');\n    for (var i = 0; i < 3; i++) {\n        var na = Number(pa[i]);\n        var nb = Number(pb[i]);\n        if (na > nb) return 1;\n        if (nb > na) return -1;\n        if (!isNaN(na) && isNaN(nb)) return 1;\n        if (isNaN(na) && !isNaN(nb)) return -1;\n    }\n    return 0;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/semver-compare/index.js\n// module id = 126\n// module chunks = 0""],""sourceRoot"":""""}"
eb7af42b8bf491f57e69ca87ec3f2381abaabbd2,7602565,                //details: http://stackoverflow.com/questions/7602565/using-data-attributes-with-jquery
753177781ca360b0c9b40ae74914f7b91dd9606e,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
593c89a34b7d87fb1ba714151faccd42e40ecf08,7067966,// see: http://stackoverflow.com/questions/7067966/how-to-allow-cors-in-express-nodejs
85d1aebf22060dd74880d202753ed82117edd139,2067472,http://stackoverflow.com/questions/2067472/what-is-jsonp-all-about
13cd1f99440e2e3e08e076ee127f18384f6afce3,19423384,"      ""description"":""IE10 crashes when a div with a property using `calc()` has a child with [same property with inherit](http://stackoverflow.com/questions/19423384/css-less-calc-method-is-crashing-my-ie10)."""
7f9efc6751c458b4a922eddeaef834d77d8f8f87,9573855,	//http://stackoverflow.com/questions/9573855/second-instance-of-activity-after-orientation-change
ae400eb25d1c2a83beeb4515b3066953133f3832,1739515,"						 * The way of checking if an exception was blowing up, is from http://stackoverflow.com/questions/1739515/asynctask-and-error-handling-on-android"
fa780ee9422414dfefa9828ffca85283900eb70d,21435339,> `data.table` is 100% compliant with **R** `data.frame` but its syntax is more consistent and its performance for large dataset is [best in class](http://stackoverflow.com/questions/21435339/data-table-vs-dplyr-can-one-do-something-well-the-other-cant-or-does-poorly) (`dplyr` from **R** and `panda` from **Python** [included](https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping)). Some parts of **Xgboost** **R** package use `data.table`.
449cf07410cb20bf1e7f28bcae34a50efb81a498,2095648,# http://stackoverflow.com/a/2095648/571420
a396aaa9c5b6b255436f043e8e324849fcc5d3d8,21221358,# https://stackoverflow.com/questions/21221358/python-how-to-import-all-methods-and-attributes-from-a-module-dynamically
a9bb76c541c11f1b9cf6270c4448de5c8b27e170,1288095,- [Append to string variable [closed]](http://stackoverflow.com/questions/1288095/append-to-string-variable)
b753451f90b34b60cc7ccc3a26d42071d3e124b9,9411041,					# cf: http://stackoverflow.com/questions/9411041/matching-ranges-of-lines-in-python-like-sed-ranges
77bca663cde077060e5b9d11ea66b107dfe0e402,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
567e9b2908e411ec1e75ae90c2e9f55aa9968095,105034,     * http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
97bb22ecc175d9c9b34a7bb4860cf7226d8f2bc3,20625173,            <remarks>http://stackoverflow.com/questions/20625173/how-does-instagrams-get-tags-tag-media-recent-pagination-actually-work?rq=1 </remarks>
10c95ff029c1e3e35c72e78bc7346dabb871d931,37628,0;286;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;privacy policy;2.0;9.891196834817012E-4;28.0;0;0
51730063e37dd4c57928b7365244f08e203e734b,992461,        // See http://stackoverflow.com/questions/992461/is-it-possible-to-override-document-cookie-in-webkit
3f93a63934e0990e5e24db7601d5bc676071ca3c,2901102,				// From http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript
47c0a2eca6982a0e841882b3bf0f1964e1de73ff,1408356,      # See also http://stackoverflow.com/questions/1408356/keyboard-interrupts-with-pythons-multiprocessing-pool
d6239b54e702df8b441e2327e850a71c8142db5f,23349191,"{""version"":3,""sources"":[""node_modules/conversational-form/dist/conversational-form.js"",""node_modules/gsap/TweenLite.js"",""node_modules/gsap/TweenMaxBase.js"",""node_modules/gsap/CSSPlugin.js"",""node_modules/gsap/AttrPlugin.js"",""node_modules/gsap/RoundPropsPlugin.js"",""node_modules/gsap/DirectionalRotationPlugin.js"",""node_modules/gsap/TimelineLite.js"",""node_modules/gsap/TimelineMax.js"",""node_modules/gsap/BezierPlugin.js"",""node_modules/gsap/EasePack.js"",""node_modules/gsap/TweenMax.js"",""node_modules/callasync/index.js"",""node_modules/loadcss/index.js"",""tracking.js"",""main.js""],""names"":[""_gsScope"",""window"",""module"",""exports"",""global"",""TweenLite"",""_exports"",""_doc"",""document"",""_globals"",""GreenSockGlobals"",""_namespace"",""a"",""i"",""p"",""_ticker"",""_tickerActive"",""toString"",""array"",""ns"",""split"",""length"",""gs"",""_slice"",""b"",""l"",""push"",""_emptyFunc"",""_isArray"",""Object"",""prototype"",""call"",""obj"",""Array"",""_defLookup"",""Definition"",""dependencies"",""func"",""sc"",""gsClass"",""_classes"",""check"",""init"",""cur"",""n"",""cl"",""missing"",""pop"",""join"",""apply"",""_gsDefine"",""_class"",""globals"",""_baseParams"",""Ease"",""extraParams"",""type"",""power"",""_func"",""_type"",""_power"",""_params"",""concat"",""_easeMap"",""map"",""_easeReg"",""register"",""ease"",""names"",""types"",""create"",""na"",""e"",""name"",""j"",""ta"",""easing"",""getRatio"",""_calcEnd"",""t"",""pw"",""r"",""linear"",""Linear"",""easeIn"",""swing"",""Quad"",""easeInOut"",""EventDispatcher"",""target"",""_listeners"",""_eventTarget"",""addEventListener"",""callback"",""scope"",""useParam"",""priority"",""list"",""listener"",""index"",""wake"",""c"",""s"",""splice"",""pr"",""up"",""removeEventListener"",""dispatchEvent"",""slice"",""_reqAnimFrame"",""requestAnimationFrame"",""_cancelAnimFrame"",""cancelAnimationFrame"",""_getTime"",""Date"",""now"",""getTime"",""_lastUpdate"",""fps"",""useRAF"",""_self"",""_fps"",""_req"",""_id"",""_gap"",""_nextTime"",""_startTime"",""_useRAF"",""_lagThreshold"",""_adjustedLag"",""_tick"",""manual"",""elapsed"",""overlap"",""dispatch"",""time"",""frame"",""tick"",""lagSmoothing"",""threshold"",""adjustedLag"",""arguments"",""Math"",""min"",""sleep"",""clearTimeout"",""seamless"",""f"",""setTimeout"",""value"",""visibilityState"",""Ticker"",""events"",""constructor"",""Animation"",""duration"",""vars"",""_duration"",""_totalDuration"",""_delay"",""Number"",""delay"",""_timeScale"",""_active"",""immediateRender"",""data"",""_reversed"",""reversed"",""_rootTimeline"",""tl"",""useFrames"",""_rootFramesTimeline"",""add"",""_time"",""paused"",""ticker"",""_dirty"",""_gc"",""_initted"",""_paused"",""_totalTime"",""_rawPrevTime"",""_next"",""_last"",""_onUpdate"",""_timeline"",""timeline"",""_checkTimeout"",""unref"",""play"",""from"",""suppressEvents"",""seek"",""pause"",""atTime"",""resume"",""totalTime"",""restart"",""includeDelay"",""reverse"",""totalDuration"",""render"",""force"",""invalidate"",""_enabled"",""isActive"",""rawTime"",""startTime"",""enabled"",""ignoreTimeline"",""_remove"",""_kill"",""kill"",""_uncache"",""includeSelf"",""tween"",""_swapSelfInParams"",""params"",""copy"",""_callback"",""v"",""callbackScope"",""eventCallback"",""substr"",""indexOf"",""smoothChildTiming"",""uncapped"",""_pauseTime"",""_lazyTweens"",""_lazyRender"",""progress"",""totalProgress"",""ratio"",""_sortChildren"",""endTime"",""includeRepeats"",""timeScale"",""pauseTime"",""raw"",""SimpleTimeline"",""autoRemoveChildren"",""_first"",""_recent"",""insert"",""child"",""position"",""align"",""stagger"",""prevTween"",""st"",""_prev"",""skipDisable"",""next"",""selector"",""isSelector"",""targ"",""targets"",""jquery"",""nodeType"",""style"",""overwrite"",""_overwrite"",""_overwriteLookup"",""defaultOverwrite"",""_targets"",""_propLookup"",""_siblings"",""_register"",""_applyOverwrite"",""_isSelector"",""_firstPT"",""_overwrittenProps"",""_startAt"",""_notifyPluginsOfEnabled"",""_lazy"",""version"",""defaultEase"",""_ease"",""autoSleep"",""$"",""jQuery"",""querySelectorAll"",""getElementById"",""charAt"",""_lazyLookup"",""_numbersExp"",""_relExp"",""_setRatio"",""pt"",""val"",""blob"",""end"",""start"",""m"",""_tween"",""_target"",""fp"",""_blobRound"",""_blobDif"",""filter"",""startNums"",""endNums"",""num"",""nonNumbers"",""currentNum"",""charIndex"",""color"",""match"",""_applyPT"",""parseFloat"",""parseInt"",""round"",""setRatio"",""test"",""_addPropTween"",""prop"",""overwriteProp"",""mod"",""funcParam"",""stringFilter"",""getterName"",""isRelative"",""pg"",""isNaN"",""replace"",""defaultStringFilter"",""_internals"",""isArray"",""lazyTweens"",""blobDif"",""_plugins"",""_tweenLookup"",""tweenLookup"",""_tweenLookupNum"",""_reservedProps"",""reservedProps"",""onComplete"",""onCompleteParams"",""onCompleteScope"",""runBackwards"",""startAt"",""onUpdate"",""onUpdateParams"",""onUpdateScope"",""onStart"",""onStartParams"",""onStartScope"",""onReverseComplete"",""onReverseCompleteParams"",""onReverseCompleteScope"",""onRepeat"",""onRepeatParams"",""onRepeatScope"",""easeParams"",""yoyo"",""repeat"",""repeatDelay"",""autoCSS"",""lazy"",""onOverwrite"",""id"",""yoyoEase"",""none"",""all"",""auto"",""concurrent"",""allOnStart"",""preexisting"",""_nextGCFrame"",""lazyRender"",""_updateRoot"",""tweens"",""scrub"",""_gsTweenID"",""_onOverwrite"",""overwrittenTween"",""overwritingTween"",""killedProps"",""r1"",""r2"",""props"",""mode"",""siblings"",""changed"",""curTween"",""globalStart"",""overlaps"",""oCount"",""zeroDur"",""_checkOverlap"",""_tinyNum"",""reference"",""ts"",""_init"",""initPlugins"",""startVars"",""op"",""dur"",""immediate"",""to"",""config"",""_easeType"",""_easePower"",""_initProps"",""_onPluginEvent"",""propLookup"",""overwrittenProps"",""plugin"",""css"",""_autoCSS"",""_onInitTween"",""_priority"",""_overwriteProps"",""_onInitAllProps"",""_onDisable"",""_onEnable"",""self"",""isComplete"",""rawPrevTime"",""prevTime"",""prevRawPrevTime"",""pow"",""simultaneousOverwrite"",""killProps"",""record"",""killed"",""firstPT"",""_tempKill"",""fromTo"",""fromVars"",""toVars"",""delayedCall"",""set"",""getTweensOf"",""onlyActive"",""killTweensOf"",""killDelayedCallsTo"",""TweenPlugin"",""_propName"",""_super"",""API"",""_addTween"",""lookup"",""_mod"",""_roundProps"",""pt2"",""first"",""last"",""activate"",""plugins"",""propName"",""overwriteProps"",""initAll"",""Plugin"",""toUpperCase"",""_gsQueue"",""console"",""log"",""nonGlobals"",""com"",""greensock"",""core"",""Power0"",""Power1"",""Power2"",""Power3"",""Power4"",""_applyCycle"",""alt"",""cycle"",""_distribute"",""each"",""base"",""cache"",""isFromKeyword"",""axis"",""center"",""originX"",""originY"",""x"",""y"",""d"",""max"",""wrap"",""distances"",""grid"",""Infinity"",""getBoundingClientRect"",""left"",""abs"",""sqrt"",""amount"",""TweenMax"",""_cycle"",""_yoyo"",""_repeat"",""_repeatDelay"",""TweenLiteInternals"",""_blankArray"",""distribute"",""_yoyoEase"",""updateTo"",""resetDuration"",""curRatio"",""inv"",""endValue"",""cycleDuration"",""totalDur"",""prevTotalTime"",""prevCycle"",""staggerTo"",""allTo"",""onCompleteAll"",""onCompleteAllParams"",""onCompleteAllScope"",""staggerFunc"",""fromCycle"",""staggerFrom"",""allFrom"",""staggerFromTo"",""allFromTo"",""isTweening"",""_getChildrenOf"",""includeTimelines"",""cnt"",""getAllTweens"",""killAll"",""complete"",""delayedCalls"",""timelines"",""isDC"",""allTrue"",""killChildTweensOf"",""parent"",""curParent"",""parentNode"",""_changePause"",""pauseAll"",""resumeAll"",""globalTimeScale"",""cycleDur"",""TweenMaxBase"",""CSSPlugin"",""_hasPriority"",""_suffixMap"",""_cs"",""_specialProps"",""defaultTransformPerspective"",""defaultSkewType"",""defaultSmoothOrigin"",""suffixMap"",""top"",""right"",""bottom"",""width"",""height"",""fontSize"",""padding"",""margin"",""perspective"",""lineHeight"",""_numExp"",""_autoRound"",""_reqSafariFix"",""_isSafari"",""_isFirefox"",""_isSafariLT6"",""_ieVers"",""_index"",""_relNumExp"",""_valuesExp"",""_valuesExpWithCommas"",""_NaNExp"",""_suffixExp"",""_opacityExp"",""_opacityValExp"",""_alphaFilterExp"",""_rgbhslExp"",""_capsExp"",""_camelExp"",""_urlExp"",""_camelFunc"",""g"",""_horizExp"",""_ieGetMatrixExp"",""_ieSetMatrixExp"",""_commasOutsideParenExp"",""_complexExp"",""_DEG2RAD"",""PI"",""_RAD2DEG"",""_forcePT"",""_dummyElement"",""createElement"",""_createElement"",""createElementNS"",""_tempDiv"",""_tempImg"",""_agent"",""navigator"",""userAgent"",""_supportsOpacity"",""exec"",""RegExp"",""$1"",""cssText"",""opacity"",""_getIEOpacity"",""currentStyle"",""_log"",""_prefixCSS"",""_prefix"",""_checkPropPrefix"",""undefined"",""toLowerCase"",""_computedStyleScope"",""defaultView"",""getComputedStyle"",""_getComputedStyle"",""_getStyle"",""getStyle"",""cs"",""calc"",""dflt"",""rv"",""getPropertyValue"",""_convertToPixels"",""convertToPixels"",""sfx"",""recurse"",""horiz"",""pix"",""node"",""neg"",""precise"",""clientWidth"",""clientHeight"",""appendChild"",""body"",""_gsCache"",""removeChild"",""cacheWidths"",""_calculateOffset"",""calculateOffset"",""dim"",""_getAllStyles"",""tr"",""_transformPropCSS"",""_transformProp"",""_getTransform"",""rotation"",""skewX"",""scaleX"",""scaleY"",""_supports3D"",""z"",""rotationX"",""rotationY"",""scaleZ"",""filters"",""_cssDif"",""s1"",""s2"",""forceLookup"",""difs"",""mpt"",""MiniPropTween"",""firstMPT"",""_dimensions"",""_margins"",""_getDimension"",""nodeName"",""getCTM"",""_isSVG"",""getBBox"",""offsetWidth"",""offsetHeight"",""_parsePosition"",""recObj"",""oxp"",""oyp"",""oxr"",""oyr"",""ox"",""oy"",""_parseChange"",""_parseVal"",""_parseAngle"",""directionalEnd"",""dif"",""result"",""cap"",""_colorLookup"",""aqua"",""lime"",""silver"",""black"",""maroon"",""teal"",""blue"",""navy"",""white"",""fuchsia"",""olive"",""yellow"",""orange"",""gray"",""purple"",""green"",""red"",""pink"",""cyan"",""transparent"",""_hue"",""h"",""m1"",""m2"",""_parseColor"",""parseColor"",""toHSL"",""wasHSL"",""_formatColors"",""colors"",""temp"",""_colorExp"",""parsed"",""colorStringFilter"",""combined"",""lastIndex"",""_getFormatter"",""clr"",""collapsible"",""multi"",""dColor"",""formatter"",""dVals"",""pfx"",""delim"",""numVals"",""dSfx"",""vals"",""_getEdgeParser"",""cssp"",""parse"",""_setPluginRatio"",""str"",""proxy"",""autoRotate"",""xs0"",""xs1"",""CSSPropTween"",""_parseToProxy"",""shallow"",""bpt"",""xp"",""transform"",""_transform"",""oldForce"",""rxp"",""_addNonTweeningNumericPT"",""_parseComplex"",""parseComplex"",""clrs"",""ba"",""xi"",""ni"",""bv"",""ev"",""bnums"",""enums"",""bn"",""hasAlpha"",""cv"",""useHSL"",""ea"",""autoRound"",""appendXtra"",""xfirst"",""pad"",""SpecialProp"",""options"",""prefix"",""format"",""defaultValue"",""parser"",""keyword"",""allowFunc"",""_registerComplexSpecialProp"",""defaults"",""_registerPluginProp"",""pluginName"",""pluginClass"",""_cssRegister"",""kwd"",""bi"",""ei"",""registerSpecialProp"",""onInitTween"",""useSVGTransformAttr"",""_transformProps"",""_useSVGTransformAttr"",""svg"",""rect"",""_transformOriginProp"",""Transform"",""force3D"",""defaultForce3D"",""_SVGElement"",""SVGElement"",""_createSVG"",""container"",""attributes"",""element"",""reg"",""setAttributeNS"",""_docElement"",""documentElement"",""_forceSVGTransformAttr"",""chrome"",""_parseSVGOrigin"",""local"",""decoratee"",""absolute"",""smoothOrigin"",""skipRecord"",""tm"",""xOrigin"",""yOrigin"",""tx"",""ty"",""determinant"",""xOriginOld"",""yOriginOld"",""_gsTransform"",""_getMatrix"",""hasAttribute"",""getAttribute"",""_identity2DMatrix"",""xOffset"",""yOffset"",""setAttribute"",""_getBBox"",""error"",""_getBBoxHack"",""swapIfPossible"",""bbox"",""ownerSVGElement"",""oldParent"",""oldSibling"",""nextSibling"",""oldCSS"",""display"",""_originalGetBBox"",""insertBefore"",""force2D"",""isDefault"",""dec"",""offsetParent"",""_removeProp"",""baseVal"",""consolidate"",""matrix"",""getTransform"",""rec"",""invX"",""zOrigin"",""a11"",""t1"",""t2"",""t3"",""cos"",""sin"",""a21"",""a31"",""a41"",""a12"",""a22"",""a32"",""a42"",""a13"",""a23"",""a33"",""a14"",""a24"",""a34"",""a43"",""angle"",""atan2"",""skewType"",""k"",""removeAttribute"",""_setIETransformRatio"",""ang"",""skew"",""w"",""dx"",""dy"",""clip"",""xPercent"",""yPercent"",""mult"",""marg"",""ieOffsetX"",""ieOffsetY"",""_setTransformRatio"",""set3DTransformRatio"",""setTransformRatio"",""sx"",""sy"",""sz"",""isSVG"",""skewY"",""tan"",""parsingProp"",""_lastParsedTransform"",""scaleFunc"",""scale"",""originalGSTransform"",""has3D"",""hasChange"",""dr"",""endRotations"",""parseTransform"",""orig"",""rotationZ"",""transformOrigin"",""svgOrigin"",""transformPerspective"",""directionalRotation"",""shortRotation"",""shortRotationX"",""shortRotationY"",""_transformType"",""ea1"",""es2"",""bs2"",""bs"",""es"",""en"",""esfx"",""bsfx"",""rel"",""hn"",""vn"",""em"",""bp"",""pct"",""src"",""backgroundPositionX"",""backgroundPositionY"",""clipTop"",""clipRight"",""clipBottom"",""clipLeft"",""bw"",""_setIEOpacityRatio"",""skip"",""xn1"",""isAutoAlpha"",""zoom"",""removeProperty"",""_setClassNameRatio"",""_gsClassPT"",""difData"",""cnpt"",""cnptLookup"",""_classNamePT"",""_setClearPropsRatio"",""clearTransform"",""transformParse"",""_vars"",""zIndex"",""tpt"",""threeD"",""_addLazySet"",""className"",""WebkitBackfaceVisibility"",""_linkCSSP"",""sp"",""isStr"",""strictUnits"",""xs2"",""xn2"",""xs3"",""xn3"",""xs4"",""xn4"",""xs5"",""_enableTransforms"",""lazySet"",""prev"",""remove"",""autoAlpha"",""alpha"",""visibility"",""_getChildStyles"",""children"",""childNodes"",""cascadeTo"",""results"",""AttrPlugin"",""RoundPropsPlugin"",""_getRoundFunc"",""_roundLinkedList"",""rp"",""roundProps"",""rpt"",""_add"",""DirectionalRotationPlugin"",""finals"",""useRadians"",""TimelineLite"",""_labels"",""_copy"",""_pauseCallback"",""pauseCallback"",""_defaultImmediateRender"",""defaultFalse"",""ir"",""_forcingPlayhead"",""_hasPause"",""Engine"",""exportRoot"",""ignoreDelayedCalls"",""hasNegativeStart"",""root"",""curTime"",""beforeRawTime"",""_parseTimeOrLabel"",""addLabel"",""removeLabel"",""append"",""offsetOrLabel"",""insertMultiple"",""appendMultiple"",""label"",""addPause"",""getLabelTime"",""timeOrLabel"",""appendIfAbsent"",""ignore"",""clippedDuration"",""recent"",""stop"",""gotoAndPlay"",""gotoAndStop"",""internalForce"",""pauseTween"",""prevStart"",""prevTimeScale"",""prevPaused"",""_hasPausedChild"",""getChildren"",""nested"",""ignoreBeforeTime"",""disabled"",""_contains"",""shiftChildren"",""adjustLabels"",""labels"",""clear"",""_calculatingDuration"",""usesFrames"",""wrapRepeats"",""TimelineMax"",""_easeNone"",""addCallback"",""removeCallback"",""removePause"",""tweenTo"",""isFromTo"",""tweenFromTo"",""fromPosition"",""toPosition"",""_locked"",""backwards"",""recTotalTime"",""recCycle"",""recRawPrevTime"",""recTime"",""getActive"",""getLabelAfter"",""getLabelsArray"",""getLabelBefore"",""sort"",""currentLabel"",""_r1"",""_r2"",""_r3"",""_corProps"",""Segment"",""da"",""ca"",""_correlate"",""cubicToQuadratic"",""q1"",""q2"",""q3"",""q4"",""mab"",""mbc"",""mcd"",""mabc"",""mbcd"",""m8"",""_calculateControlPoints"",""curviness"",""quad"",""basic"",""correlate"",""p1"",""p2"",""p3"",""seg"",""mm"",""cp2"",""qb"",""ii"",""cp1"",""_parseAnchors"",""values"",""prepend"",""tmp"",""bezierThrough"",""quadratic"",""unshift"",""_parseBezierData"",""inc"",""soft"",""_addCubicLengths"",""steps"",""resolution"",""d1"",""bez"",""_parseLengthData"",""lengths"",""total"",""segments"",""curLS"",""BezierPlugin"",""_props"",""_timeRes"",""timeResolution"",""isFunc"",""second"",""orientToBezier"",""_autoRotate"",""_beziers"",""_segCount"",""ld"",""_length"",""_lengths"",""_segments"",""_l1"",""_li"",""_s1"",""_si"",""_l2"",""_curSeg"",""_s2"",""_prec"",""_initialRotations"",""_startRatio"",""curIndex"",""curSeg"",""v1"",""notStart"",""ar"",""b2"",""x1"",""y1"",""x2"",""y2"",""conv"",""quadraticToCubic"",""pluginValues"",""SteppedEase"",""ExpoScaleEase"",""RoughEase"",""_createElastic"",""_2PI"",""_HALF_PI"",""_create"",""C"",""_wrap"",""EaseOut"",""EaseIn"",""EaseInOut"",""aliases"",""easeOut"",""EasePoint"",""gap"",""_createBack"",""overshoot"",""_p1"",""_p2"",""Back"",""SlowMo"",""linearRatio"",""yoyoMode"",""_p"",""_p3"",""immediateStart"",""exp"",""taper"",""bump"",""pnt"",""points"",""randomize"",""clamp"",""template"",""strength"",""random"",""invert"",""def"",""amplitude"",""period"",""asin"",""find"",""Elastic"",""Bounce"",""Circ"",""Expo"",""Sine"",""_autoActivated"",""Tracking"",""scriptSrc"",""querySelector"",""gaPropertyId"",""gtag"",""category"",""action"",""hasGtag"",""event_category"",""event_action"",""event_label"",""page_title"",""title"",""page_path"",""location"",""pathname"",""search"",""href"",""host"",""onclick"",""_this"",""event"",""message"",""debug"",""animTime"",""themes"",""currentTheme"",""preloadFormImages"",""el"",""Image"",""loadThemes"",""links"",""forEach"",""link"",""styleSheets"",""changeTheme"",""themeName"",""animateIn"",""headerEl"",""headlineEl"",""cfEl"",""aboutEl"",""innerHeight"",""ConversationalForm"",""registerAllExternalLinks"",""wrapperEl"",""formEl"",""dispatcher"",""FlowEvents"",""FLOW_UPDATE"",""detail"",""tag"",""flowManager"",""cfInstance"",""context"",""loadExternalStyleSheet"",""preventAutoFocus"",""preventAutoStart"",""eventDispatcher"",""submitCallback"",""formDataSerialized"",""getFormData"",""getstarted"",""addRobotChatResponse"",""flowStepCallback"",""dto"",""success"",""remapTagsAndStartFrom""],""mappings"":"";;AA6qMA,IAAA,GA7qMA,SAAA,GAIA,IAAA,EAAA,WAEA,SAAA,KASA,SAAA,EAAA,GACA,GAAA,iBAAA,KAAA,MAAA,IAAA,UAAA,wCACA,GAAA,mBAAA,EAAA,MAAA,IAAA,UAAA,kBACA,KAAA,OAAA,EACA,KAAA,UAAA,EACA,KAAA,YAAA,EACA,KAAA,WAAA,GAEA,EAAA,EAAA,MAGA,SAAA,EAAA,EAAA,GACA,KAAA,IAAA,EAAA,QACA,EAAA,EAAA,OAEA,IAAA,EAAA,QAIA,EAAA,UAAA,EACA,EAAA,aAAA,WACA,IAAA,EAAA,IAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WACA,GAAA,OAAA,EAAA,CAIA,IAAA,EACA,IACA,EAAA,EAAA,EAAA,QACA,MAAA,GAEA,YADA,EAAA,EAAA,QAAA,GAGA,EAAA,EAAA,QAAA,QAVA,IAAA,EAAA,OAAA,EAAA,GAAA,EAAA,QAAA,EAAA,WAPA,EAAA,WAAA,KAAA,GAqBA,SAAA,EAAA,EAAA,GACA,IAEA,GAAA,IAAA,EAAA,MAAA,IAAA,UAAA,6CACA,GAAA,IAAA,iBAAA,GAAA,mBAAA,GAAA,CACA,IAAA,EAAA,EAAA,KACA,GAAA,aAAA,EAIA,OAHA,EAAA,OAAA,EACA,EAAA,OAAA,OACA,EAAA,GAEA,GAAA,mBAAA,EAEA,YADA,GAvDA,EAuDA,EAvDA,EAuDA,EAtDA,WACA,EAAA,MAAA,EAAA,aAqDA,GAIA,EAAA,OAAA,EACA,EAAA,OAAA,EACA,EAAA,GACA,MAAA,GACA,EAAA,EAAA,GA/DA,IAAA,EAAA,EAmEA,SAAA,EAAA,EAAA,GACA,EAAA,OAAA,EACA,EAAA,OAAA,EACA,EAAA,GAGA,SAAA,EAAA,GACA,IAAA,EAAA,QAAA,IAAA,EAAA,WAAA,QACA,EAAA,aAAA,WACA,EAAA,UACA,EAAA,sBAAA,EAAA,UAKA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,WAAA,OAAA,EAAA,EAAA,IACA,EAAA,EAAA,EAAA,WAAA,IAEA,EAAA,WAAA,KAGA,SAAA,EAAA,EAAA,EAAA,GACA,KAAA,YAAA,mBAAA,EAAA,EAAA,KACA,KAAA,WAAA,mBAAA,EAAA,EAAA,KACA,KAAA,QAAA,EASA,SAAA,EAAA,EAAA,GACA,IAAA,GAAA,EACA,IACA,EAAA,SAAA,GACA,IACA,GAAA,EACA,EAAA,EAAA,KACA,SAAA,GACA,IACA,GAAA,EACA,EAAA,EAAA,MAEA,MAAA,GACA,GAAA,EAAA,OACA,GAAA,EACA,EAAA,EAAA,IAIA,EAAA,UAAA,MAAA,SAAA,GACA,OAAA,KAAA,KAAA,KAAA,IAGA,EAAA,UAAA,KAAA,SAAA,EAAA,GACA,IAAA,EAAA,IAAA,KAAA,YAAA,GAGA,OADA,EAAA,KAAA,IAAA,EAAA,EAAA,EAAA,IACA,GAGA,EAAA,IAAA,SAAA,GACA,IAAA,EAAA,MAAA,UAAA,MAAA,KAAA,GAEA,OAAA,IAAA,EAAA,SAAA,EAAA,GACA,GAAA,IAAA,EAAA,OAAA,OAAA,EAAA,IACA,IAAA,EAAA,EAAA,OAEA,SAAA,EAAA,EAAA,GACA,IACA,GAAA,IAAA,iBAAA,GAAA,mBAAA,GAAA,CACA,IAAA,EAAA,EAAA,KACA,GAAA,mBAAA,EAIA,YAHA,EAAA,KAAA,EAAA,SAAA,GACA,EAAA,EAAA,IACA,GAIA,EAAA,GAAA,EACA,KAAA,GACA,EAAA,GAEA,MAAA,GACA,EAAA,IAIA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IACA,EAAA,EAAA,EAAA,OAKA,EAAA,QAAA,SAAA,GACA,OAAA,GAAA,iBAAA,GAAA,EAAA,cAAA,EACA,EAGA,IAAA,EAAA,SAAA,GACA,EAAA,MAIA,EAAA,OAAA,SAAA,GACA,OAAA,IAAA,EAAA,SAAA,EAAA,GACA,EAAA,MAIA,EAAA,KAAA,SAAA,GACA,OAAA,IAAA,EAAA,SAAA,EAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IACA,EAAA,GAAA,KAAA,EAAA,MAMA,EAAA,aAAA,mBAAA,cAAA,SAAA,GAAA,aAAA,KACA,SAAA,GACA,EAAA,EAAA,IAGA,EAAA,sBAAA,SAAA,GACA,oBAAA,SAAA,SACA,QAAA,KAAA,wCAAA,IASA,EAAA,gBAAA,SAAA,GACA,EAAA,aAAA,GAQA,EAAA,yBAAA,SAAA,GACA,EAAA,sBAAA,GAGA,oBAAA,QAAA,OAAA,QACA,OAAA,QAAA,EACA,EAAA,UACA,EAAA,QAAA,GArOA,CAwOA,MAQA,IACA,IAAA,EAAA,IAAA,OAAA,YAAA,QAEA,GADA,EAAA,kBACA,IAAA,EAAA,iBAGA,MAAA,IAAA,MAAA,6BAEA,MAAA,GACA,IAAA,EAAA,SAAA,EAAA,GACA,IAAA,EAAA,EAsBA,OArBA,EAAA,GAAA,CACA,SAAA,EACA,YAAA,EACA,YAAA,IAGA,EAAA,SAAA,YAAA,gBACA,gBAAA,EAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QACA,EAAA,EAAA,eACA,EAAA,eAAA,WACA,EAAA,KAAA,MACA,IACA,OAAA,eAAA,KAAA,mBAAA,CACA,IAAA,WACA,OAAA,KAGA,MAAA,GACA,KAAA,kBAAA,IAGA,GAGA,EAAA,UAAA,OAAA,MAAA,UACA,OAAA,YAAA,GAKA,SAAA,GAGA,IAAA,EAAA,WACA,SAAA,KA+EA,OA7EA,EAAA,KAAA,SAAA,EAAA,EAAA,GACA,OAAA,EAAA,GAAA,EAAA,GAEA,EAAA,KAAA,SAAA,EAAA,EAAA,GACA,OAAA,EAAA,IAAA,EAAA,IAEA,EAAA,yBAAA,SAAA,GACA,IAAA,EAAA,KAKA,OAJA,EAAA,cACA,EAAA,EAAA,cAAA,SAAA,EAAA,cAAA,eACA,EAAA,iBACA,EAAA,EAAA,gBACA,EACA,CAAA,EAAA,EAAA,GAAA,MAAA,EAAA,EAAA,GAAA,MAAA,QAAA,EAAA,IAGA,CAAA,EAAA,EAAA,MAAA,EAAA,EAAA,MAAA,QAAA,OAGA,EAAA,sBAAA,SAAA,GACA,IAAA,EAAA,SAAA,cAAA,OACA,EAAA,UAAA,EAAA,UAEA,IAAA,EAAA,EAAA,aAAA,EAAA,WAAA,GAGA,OADA,EAAA,OAAA,GAAA,QAAA,aAAA,KAGA,EAAA,cAAA,SAAA,GACA,IAAA,EAAA,GAKA,OAJA,EAAA,MAAA,iBAAA,OAAA,aAAA,QACA,EAAA,UAAA,iBAAA,OAAA,aAAA,YACA,EAAA,QAAA,iBAAA,OAAA,WAAA,UACA,EAAA,UAAA,iBAAA,OAAA,YAAA,YACA,EAAA,IAEA,EAAA,kBAAA,WAGA,OAFA,OAAA,UAAA,UACA,QAAA,SACA,KAAA,UAAA,UAAA,MAAA,sBAEA,EAAA,gBAAA,SAAA,GACA,IAAA,EAAA,EAAA,MAAA,MAKA,OAFA,EAAA,QAAA,IACA,EAAA,EAAA,MAAA,MACA,GAEA,EAAA,aAAA,SAAA,EAAA,GACA,EAAA,MAAA,qBAAA,EACA,EAAA,MAAA,kBAAA,EACA,EAAA,MAAA,iBAAA,EACA,EAAA,MAAA,UAAA,GAGA,EAAA,aAAA,SAAA,EAAA,GACA,IAAA,IAAA,KAAA,EACA,EAAA,IAAA,EAAA,GAAA,aACA,EAAA,GAAA,cAAA,QACA,EAAA,GAAA,EAAA,IAAA,GACA,UAAA,OAAA,EAAA,GAAA,EAAA,KAGA,EAAA,GAAA,EAAA,GAGA,OAAA,GAGA,EAAA,QAAA,CACA,WAAA,WACA,SAAA,OAAA,MAAA,OAAA,YAAA,OAAA,UAAA,OAAA,QAKA,EAhFA,GAkFA,EAAA,QAAA,EArFA,CAsFA,IAAA,EAAA,KAIA,SAAA,GAEA,IAAA,EAAA,WACA,SAAA,EAAA,QACA,IAAA,IAAA,EAAA,MACA,KAAA,IAAA,EACA,KAAA,OAAA,SAAA,yBAqBA,OAnBA,OAAA,eAAA,EAAA,UAAA,KAAA,CACA,IAAA,WACA,OAAA,KAAA,KAEA,IAAA,SAAA,GACA,KAAA,IAAA,GAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,iBAAA,SAAA,EAAA,EAAA,GACA,OAAA,KAAA,OAAA,iBAAA,EAAA,EAAA,IAEA,EAAA,UAAA,cAAA,SAAA,GACA,OAAA,KAAA,OAAA,cAAA,IAEA,EAAA,UAAA,oBAAA,SAAA,EAAA,EAAA,GACA,KAAA,OAAA,oBAAA,EAAA,EAAA,IAEA,EAzBA,GA2BA,EAAA,gBAAA,EA7BA,CA8BA,IAAA,EAAA,KAIA,SAAA,GAEA,IAAA,EAAA,WACA,SAAA,KA4CA,OA1CA,EAAA,SAAA,SAAA,GACA,IAAA,EAAA,SAAA,cAAA,EAAA,KAGA,IAAA,IAAA,KAFA,EAAA,aAAA,cAAA,IAEA,EACA,QAAA,GAAA,aAAA,GACA,EAAA,aAAA,EAAA,EAAA,IAGA,OAAA,GAEA,EAAA,cAAA,SAAA,GAGA,IAFA,IAAA,EAAA,EAAA,SAAA,GACA,EAAA,EAAA,SACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,EAAA,SAAA,GACA,EAAA,YAAA,GAEA,OAAA,GAEA,EAAA,sBAAA,SAAA,GAEA,IADA,IAAA,EAAA,SAAA,cAAA,QACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,EAAA,SAAA,GAEA,GAAA,EAAA,UAAA,EAAA,SAAA,OAAA,EACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,SAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,SAAA,EAAA,SAAA,IACA,EAAA,YAAA,GAGA,EAAA,YAAA,GAEA,OAAA,GAEA,EAAA,kBAAA,SAAA,GACA,QAAA,EAAA,aAAA,gBAIA,EA7CA,GA+CA,EAAA,WAAA,EAjDA,CAkDA,IAAA,EAAA,KAIA,SAAA,GAEA,EAAA,4BAAA,CACA,gCAAA,IACA,MAAA,CACA,kBAAA,EACA,oBAAA,KAEA,KAAA,CACA,cAAA,EACA,WAAA,IAVA,CAaA,IAAA,EAAA,KAKA,SAAA,GAEA,IAAA,EAAA,WACA,SAAA,EAAA,GAMA,GALA,KAAA,YAAA,EAAA,YACA,KAAA,YAAA,EAAA,YACA,EAAA,iBACA,KAAA,eAAA,EAAA,iBAEA,KAAA,YACA,MAAA,IAAA,MAAA,gCAAA,KAAA,YAAA,MACA,KAAA,QAAA,GACA,KAAA,gBACA,KAAA,mBAkBA,OAhBA,EAAA,UAAA,QAAA,SAAA,KAEA,EAAA,UAAA,iBAAA,aAEA,EAAA,UAAA,cAAA,WACA,IAAA,EAAA,SAAA,cAAA,YAGA,OAFA,EAAA,UAAA,KAAA,cACA,KAAA,GAAA,EAAA,YAAA,EAAA,QAAA,WACA,KAAA,IAGA,EAAA,UAAA,YAAA,WAAA,OAAA,KAAA,gBAAA,4BAEA,EAAA,UAAA,QAAA,WACA,KAAA,GAAA,WAAA,YAAA,KAAA,KAEA,EA7BA,GA+BA,EAAA,aAAA,EAjCA,CAkCA,IAAA,EAAA,KAKA,IAAA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GACA,EAAA,qBAAA,CACA,aAAA,0BACA,gBAAA,4BACA,SAAA,4BACA,UAAA,8BAEA,EAAA,6BAAA,CACA,KAAA,mCACA,MAAA,qCAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAWA,OAVA,EAAA,eAAA,EACA,EAAA,uBAAA,EACA,EAAA,QAAA,EACA,EAAA,gBAAA,EAAA,QAAA,KAAA,GACA,EAAA,GAAA,iBAAA,QAAA,EAAA,iBAAA,GACA,EAAA,eAAA,EAAA,OAAA,KAAA,GACA,EAAA,GAAA,iBAAA,OAAA,EAAA,gBAAA,GACA,EAAA,aAAA,UACA,EAAA,GAAA,aAAA,WAAA,YAEA,EA0JA,OAvKA,EAAA,EAAA,GAeA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,kBAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,uBAAA,CACA,IAAA,WACA,OAAA,KAAA,uBAEA,IAAA,SAAA,GACA,KAAA,sBAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WAEA,IACA,EADA,EAAA,KAAA,aAAA,SAEA,IAAA,KAAA,qBAOA,GALA,EAAA,aAAA,KAAA,aAAA,WAAA,aAAA,YAAA,MAAA,IAKA,EAAA,QAAA,sBAAA,KAAA,IAIA,EAAA,EAAA,QAAA,sBAAA,KAAA,IAEA,OAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,iBAAA,CACA,IAAA,WACA,OAAA,KAAA,iBAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,SAAA,GACA,KAAA,GAAA,SAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,YAAA,CACA,IAAA,WACA,OAAA,KAAA,GAAA,UAAA,SAAA,cAEA,IAAA,SAAA,GACA,EACA,KAAA,GAAA,UAAA,IAAA,aAEA,KAAA,GAAA,UAAA,OAAA,cAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,OAAA,KAAA,QAEA,IAAA,SAAA,GACA,KAAA,OAAA,EACA,KAAA,OACA,KAAA,GAAA,QAEA,KAAA,GAAA,QAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,UAAA,CACA,IAAA,WACA,OAAA,KAAA,GAAA,UAAA,SAAA,SAEA,IAAA,SAAA,GACA,EACA,KAAA,GAAA,UAAA,OAAA,SAGA,KAAA,GAAA,UAAA,IAAA,QACA,KAAA,UAAA,EACA,KAAA,WAAA,IAGA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,OAAA,SAAA,GACA,KAAA,QAAA,GAEA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,QAAA,EACA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,qBAAA,SAAA,KAAA,cACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,qBAAA,SAAA,CACA,OAAA,KAAA,mBAOA,EAAA,UAAA,SAAA,WACA,OAAA,GAEA,EAAA,UAAA,aAAA,WACA,IAAA,EAAA,SAAA,OAAA,iBAAA,KAAA,IAAA,iBAAA,gBAAA,IAEA,KAAA,gBAAA,CACA,OAAA,KAAA,GAAA,aACA,MAAA,KAAA,GAAA,YAAA,EACA,EAAA,KAAA,GAAA,WACA,EAAA,KAAA,GAAA,UACA,GAAA,MAEA,KAAA,gBAAA,QAAA,KAAA,gBAAA,EAAA,GAAA,KAAA,gBAAA,MACA,KAAA,gBAAA,QAAA,KAAA,gBAAA,EAAA,GAAA,KAAA,gBAAA,QAEA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,aAAA,EAAA,aACA,EAAA,UAAA,QAAA,KAAA,KAAA,IAEA,EAAA,UAAA,UAAA,WACA,aAAA,KAAA,gBACA,KAAA,GAAA,UAAA,IAAA,eAEA,EAAA,UAAA,WAAA,WACA,KAAA,GAAA,UAAA,IAAA,gBAEA,EAAA,UAAA,SAAA,WACA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,qBAAA,aAAA,KAAA,cACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,qBAAA,aAAA,CACA,OAAA,SAGA,EAAA,UAAA,QAAA,WACA,KAAA,GAAA,oBAAA,OAAA,KAAA,gBAAA,GACA,KAAA,eAAA,KACA,KAAA,GAAA,oBAAA,QAAA,KAAA,iBAAA,GACA,KAAA,gBAAA,KACA,EAAA,UAAA,QAAA,KAAA,OAEA,EAxKA,CAyKA,EAAA,cACA,EAAA,eAAA,EAtLA,CAuLA,IAAA,EAAA,KAcA,SAAA,GACA,EAAA,sBAAA,CACA,UAAA,gCACA,QAAA,kCAEA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,KAAA,qBAAA,EACA,KAAA,UAAA,EACA,KAAA,YAAA,EACA,KAAA,aAAA,EACA,KAAA,0BAAA,EACA,KAAA,UAAA,EACA,KAAA,GAAA,EAAA,GACA,KAAA,YAAA,EAAA,YACA,KAAA,YAAA,EAAA,YACA,KAAA,KAAA,KAAA,GAAA,qBAAA,WAAA,GACA,KAAA,YAAA,EAAA,OACA,KAAA,iBAAA,KAAA,SAAA,KAAA,MACA,KAAA,GAAA,iBAAA,SAAA,KAAA,kBAAA,GACA,KAAA,iBAAA,KAAA,SAAA,KAAA,MACA,OAAA,iBAAA,SAAA,KAAA,kBAAA,GACA,KAAA,uBAAA,KAAA,eAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,qBAAA,SAAA,KAAA,wBAAA,GACA,KAAA,wBAAA,KAAA,gBAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,qBAAA,UAAA,KAAA,yBAAA,GACA,KAAA,8BAAA,KAAA,sBAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,eAAA,iBAAA,KAAA,+BAAA,GACA,KAAA,6BAAA,KAAA,qBAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,gBAAA,WAAA,KAAA,8BAAA,GAEA,KAAA,wBAAA,KAAA,kBAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,WAAA,kBAAA,KAAA,yBAAA,GACA,KAAA,qBAAA,IAAA,EAAA,iBAAA,CACA,oBAAA,KAAA,GACA,aAAA,KAAA,KACA,YAAA,KAAA,YACA,eAAA,KAAA,GAAA,qBAAA,oBA0nBA,OAvnBA,OAAA,eAAA,EAAA,UAAA,SAAA,CACA,IAAA,WACA,OAAA,KAAA,UAAA,KAAA,SAAA,OAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,IAAA,KAAA,SACA,OAAA,EAEA,IADA,IAAA,EAAA,KAAA,cACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CAEA,GADA,EAAA,GACA,MACA,OAAA,EAGA,OAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,cAAA,CACA,IAAA,WACA,IAAA,KAAA,SACA,OAAA,EAEA,IADA,IAAA,EAAA,KAAA,cACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CAEA,GADA,EAAA,GACA,UACA,OAAA,EAGA,OAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,SAAA,GACA,EACA,KAAA,KAAA,UAAA,IAAA,YAEA,KAAA,KAAA,UAAA,OAAA,aAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,SAAA,CACA,IAAA,WAEA,OADA,KAAA,cACA,QAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,SAAA,SAAA,GAEA,KAAA,GAAA,WAAA,GAMA,EAAA,UAAA,gBAAA,SAAA,GACA,KAAA,SAAA,OAEA,EAAA,UAAA,eAAA,SAAA,GACA,IAAA,EAAA,EAAA,OACA,EAAA,EAAA,EAAA,EAAA,MAAA,KAAA,aAAA,EAAA,EAAA,EAAA,EAAA,MACA,IAAA,EACA,KAAA,4BAAA,GACA,KAAA,qBAAA,UAAA,EAAA,IAEA,EAAA,UAAA,4BAAA,SAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,cAAA,OAAA,IAEA,IADA,IAAA,EAAA,KAAA,cAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CAEA,GADA,EAAA,IACA,EAAA,GAAA,CACA,KAAA,SAAA,EACA,KAAA,YAAA,EACA,SAKA,EAAA,UAAA,sBAAA,SAAA,GACA,IAAA,EAAA,KACA,aAAA,KAAA,4BAEA,EAAA,OAAA,gBAAA,kBACA,KAAA,2BAAA,WAAA,WACA,EAAA,qBACA,KAAA,YAAA,UAAA,mCAGA,EAAA,UAAA,cAAA,WACA,IAAA,EAAA,KAEA,KAAA,KAAA,aACA,sBAAA,WACA,EAAA,mBAAA,eAAA,EAAA,WAAA,EAAA,sBAAA,SACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,sBAAA,aAGA,EAAA,UAAA,qBAAA,SAAA,GACA,GAAA,KAAA,oBACA,KAAA,qBAAA,MADA,CAIA,IAAA,EAAA,EAAA,OACA,EAAA,EAAA,IAAA,MACA,GAAA,KAAA,OAAA,CACA,IAAA,GAAA,GAAA,CAAA,EAAA,WAAA,SAAA,KAAA,EAAA,WAAA,SAAA,MAAA,EAAA,WAAA,SAAA,KAAA,EAAA,WAAA,SAAA,IAAA,QAAA,EAAA,SAEA,GADA,EAAA,mBAAA,EACA,CAEA,IACA,EADA,EAAA,OAAA,IACA,MAAA,gBACA,KAAA,mBAAA,QAGA,EAAA,SAAA,EAAA,WAAA,SAAA,KACA,KAAA,cAEA,EAAA,SAAA,EAAA,WAAA,SAAA,MACA,KAAA,cAEA,EAAA,SAAA,EAAA,WAAA,SAAA,KACA,KAAA,eAAA,GAEA,EAAA,SAAA,EAAA,WAAA,SAAA,GACA,KAAA,gBAAA,GAEA,EAAA,SAAA,EAAA,WAAA,SAAA,OAAA,EAAA,SAAA,EAAA,WAAA,SAAA,QACA,KAAA,cAAA,KAAA,WAAA,KAAA,cAAA,KAAA,UAAA,KAAA,aACA,KAAA,cAAA,KAAA,UAAA,KAAA,aAAA,GAAA,QAEA,KAAA,cAAA,IAAA,GAAA,KAAA,cAAA,GAAA,QAEA,KAAA,cAAA,GAAA,GAAA,GAAA,SAGA,KAAA,yBACA,EAAA,kBAIA,EAAA,SAAA,KAAA,0BAAA,KAAA,eAAA,GAAA,KAAA,UAAA,GAAA,KAAA,SAGA,EAAA,QACA,EAAA,kBAHA,KAAA,cAAA,KAAA,UAAA,KAAA,aAAA,OAAA,IAMA,EAAA,UAAA,sBAAA,WACA,KAAA,GAAA,UAAA,SAAA,WACA,OAAA,GAAA,KAAA,UAAA,KAAA,cAAA,KAAA,WAEA,KAAA,YAAA,IACA,KAAA,YAAA,KAAA,cAAA,KAAA,UAAA,OAAA,GAEA,KAAA,YAAA,KAAA,cAAA,KAAA,UAAA,OAAA,IACA,KAAA,YAAA,IAEA,IAGA,KAAA,gBACA,IAGA,EAAA,UAAA,eAAA,SAAA,GACA,IAAA,EAAA,KAAA,SAEA,GADA,KAAA,UAAA,EACA,KAAA,cAAA,KAAA,UAKA,IAHA,IAAA,EAAA,KAAA,cAAA,GAAA,KAAA,cAAA,GAAA,KAAA,aAAA,eAAA,QAAA,EACA,EAAA,KAAA,cAAA,KAAA,UACA,EAAA,KACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,KAAA,IAAA,EAAA,EAAA,eAAA,WACA,EAAA,KAAA,IAAA,EAAA,EAAA,eAAA,SACA,KAAA,YAAA,KAKA,EAAA,UAAA,aAAA,WACA,KAAA,UAAA,EACA,KAAA,aAAA,GAEA,EAAA,UAAA,kBAAA,SAAA,GAGA,GAFA,KAAA,GAAA,UAAA,OAAA,cACA,KAAA,YAAA,UAAA,OAAA,QACA,KAAA,SAEA,IADA,IAAA,EAAA,KAAA,cACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,EAAA,GACA,eAIA,EAAA,UAAA,mBAAA,SAAA,GACA,IAAA,EAAA,EAAA,cAAA,MAAA,MACA,GAAA,EAAA,QAAA,KACA,EAAA,OAAA,EAAA,QAAA,IAAA,GACA,IAAA,EAAA,KAAA,cACA,GAAA,EAAA,OAAA,EAAA,CAGA,IADA,IAAA,EAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,WAAA,EAGA,IAFA,IAAA,GAAA,EAEA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,IACA,GAAA,GAAA,EAAA,MAAA,cAAA,QAAA,IAIA,EAAA,QAAA,EACA,GAAA,EAAA,SACA,EAAA,KAAA,GAGA,KAAA,YAAA,UAAA,GAAA,EAAA,OAAA,EAAA,WAAA,IAAA,mBAAA,MAAA,iBAAA,KAAA,GAAA,GACA,GAAA,EAAA,OACA,KAAA,YAAA,UAAA,IAAA,QAGA,KAAA,YAAA,UAAA,OAAA,QAGA,KAAA,2BAAA,EAAA,QAEA,KAAA,oBAEA,KAAA,0BAAA,EAAA,OAEA,IAAA,GAAA,KAAA,0BAAA,IACA,EAAA,GAAA,WAAA,KAGA,EAAA,UAAA,mBAAA,WAEA,IADA,IAAA,EAAA,KAAA,cACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,GAAA,EAAA,UAAA,CACA,EAAA,GAAA,QACA,SAIA,EAAA,UAAA,kBAAA,WACA,IAAA,EAAA,KACA,KAAA,SAAA,OAAA,IACA,KAAA,SAEA,KAAA,KAAA,MAAA,OAAA,MACA,WAAA,WACA,EAAA,KAAA,MAAA,OAAA,EAAA,KAAA,aAAA,KACA,IAAA,EAAA,EAAA,cACA,WAAA,WACA,GAAA,EAAA,OAAA,EAAA,CACA,EAAA,GAAA,UAAA,SAAA,eACA,EAAA,GAAA,UAAA,IAAA,cACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,EAAA,GACA,aAGA,SAAA,cAAA,oBAAA,UAAA,OAAA,UAEA,IAAA,EAAA,SAAA,cAAA,cACA,EAAA,UAAA,EAAA,eACA,EAAA,UAAA,EAAA,eAEA,MACA,OAGA,EAAA,UAAA,YAAA,WACA,OAAA,KAAA,UAAA,KAAA,SAAA,OAAA,GAAA,eAAA,KAAA,SAAA,GAAA,KACA,KAAA,SAAA,GAAA,SACA,KAAA,UAMA,EAAA,UAAA,iBAAA,WACA,KAAA,cAAA,GACA,KAAA,eACA,IAAA,EAAA,KAAA,cACA,GAAA,KAAA,GAAA,UAAA,SAAA,WAAA,CAEA,KAAA,cAAA,GAAA,GACA,KAAA,cAAA,GAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,EACA,EAAA,EAAA,IACA,UAEA,EAAA,eAAA,EAAA,GACA,KAAA,cAAA,GAAA,KAAA,GAEA,KAAA,cAAA,GAAA,KAAA,SAIA,CAEA,KAAA,cAAA,GAAA,GACA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,GAAA,EAAA,EAAA,IACA,SACA,KAAA,cAAA,GAAA,KAAA,MAIA,EAAA,UAAA,uBAAA,WACA,KAAA,sBAAA,KACA,KAAA,UAAA,GAEA,EAAA,UAAA,UAAA,SAAA,GACA,KAAA,gBAEA,KAAA,YAAA,EACA,UAAA,EACA,KAAA,SAAA,KAAA,GAAA,UAAA,SAAA,WAAA,EAAA,EAEA,OAAA,IACA,KAAA,SAAA,GAEA,KAAA,cAAA,KAAA,WAAA,KAAA,cAAA,KAAA,UAAA,KAAA,cACA,KAAA,qBAAA,EACA,KAAA,cAAA,KAAA,UAAA,KAAA,aAAA,OAAA,GAGA,KAAA,iBAGA,EAAA,UAAA,6BAAA,SAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,SAAA,GACA,GAAA,EAAA,cAAA,EAAA,CACA,KAAA,sBAAA,GACA,SAIA,EAAA,UAAA,sBAAA,SAAA,GAEA,GADA,KAAA,sBAAA,EACA,eAAA,KAAA,sBAAA,KAGA,IADA,IAAA,EAAA,KAAA,cACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,EACA,EAAA,EAAA,IAEA,QADA,GAAA,OAQA,GAAA,kBAAA,KAAA,sBAAA,KAGA,IADA,EAAA,KAAA,cACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EACA,IADA,EAAA,EAAA,KACA,EAAA,CACA,IAAA,EAAA,EAAA,aAAA,WAAA,QACA,EAAA,QAAA,KAKA,EAAA,UAAA,MAAA,WACA,KAAA,YAAA,UAAA,OAAA,QACA,KAAA,GAAA,UAAA,OAAA,WACA,KAAA,GAAA,UAAA,OAAA,WAEA,KAAA,KAAA,MAAA,OAAA,OAEA,EAAA,UAAA,WAAA,SAAA,GACA,OAAA,KAAA,SAAA,IAEA,EAAA,UAAA,OAAA,WACA,IAAA,EAAA,CACA,UAAA,EACA,gBAAA,IAGA,GAAA,KAAA,UAAA,KAAA,SAAA,OAAA,EACA,OAAA,KAAA,SAAA,GAAA,MACA,IAAA,iBAGA,IAFA,IAAA,EAAA,EACA,EAAA,GACA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CAEA,GADA,KAAA,SAAA,GACA,SACA,IAAA,EACA,MAGA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,SAAA,GACA,EAAA,UACA,EAAA,IACA,EAAA,sBAAA,GACA,EAAA,KAAA,EAAA,QAEA,EAAA,gBAAA,KAAA,GAEA,EAAA,KAAA,EAAA,WAAA,4BAAA,GACA,MACA,IAAA,cACA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,SAAA,GACA,EAAA,UACA,EAAA,KAAA,EAAA,OAEA,EAAA,gBAAA,KAAA,GAEA,MACA,IAAA,cACA,IAAA,EAAA,KAAA,SAAA,GACA,EAAA,gBAAA,EAAA,WACA,EAAA,GACA,GAAA,EAAA,iBAAA,EAAA,gBAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,gBAAA,OAAA,IAAA,CACA,EAAA,gBAAA,GACA,EAAA,KAAA,EAAA,gBAAA,GAAA,OAIA,EAAA,gBAAA,EAAA,SACA,EAAA,KAAA,EAAA,WAAA,4BAAA,GACA,MACA,IAAA,eACA,EAAA,KAAA,KAAA,SAAA,GAAA,mBACA,EAAA,gBAAA,KAAA,KAAA,SAAA,IAIA,OAAA,GAEA,EAAA,UAAA,kBAAA,WAEA,GADA,KAAA,QACA,KAAA,SACA,KAAA,KAAA,SAAA,OAAA,GACA,KAAA,SAAA,MAAA,UAGA,KAAA,KAAA,UAAA,GACA,KAAA,iBAEA,EAAA,UAAA,UAAA,SAAA,GACA,IAAA,EAAA,KACA,KAAA,UAAA,EACA,KAAA,GAAA,WAAA,qBAAA,MAAA,GACA,KAAA,GAAA,WAAA,qBAAA,MAAA,GAEA,KAAA,oBACA,KAAA,SAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,OAAA,EAAA,MACA,IAAA,QACA,KAAA,SAAA,KAAA,IAAA,EAAA,YAAA,CACA,aAAA,EACA,YAAA,KAAA,eAEA,MACA,IAAA,WACA,KAAA,SAAA,KAAA,IAAA,EAAA,eAAA,CACA,aAAA,EACA,YAAA,KAAA,eAEA,MACA,IAAA,SACA,KAAA,SAAA,KAAA,IAAA,EAAA,YAAA,CACA,aAAA,EACA,QAAA,KAAA,KACA,YAAA,KAAA,eAEA,MACA,IAAA,QACA,QACA,QAAA,EAAA,MACA,KAAA,SAAA,KAAA,IAAA,EAAA,aAAA,CACA,aAAA,EACA,YAAA,KAAA,eAMA,GAAA,UAAA,EAAA,MAAA,KAAA,SAAA,OAAA,EAAA,CACA,IAAA,EAAA,KAAA,SAAA,KAAA,SAAA,OAAA,GACA,KAAA,KAAA,YAAA,EAAA,KAGA,IAAA,EAAA,KAAA,SAAA,IAAA,eAAA,KAAA,SAAA,GAAA,KAEA,KAAA,0BADA,EACA,KAAA,SAAA,GAAA,SAAA,OAGA,EAAA,OAEA,IAAA,QAAA,SAAA,EAAA,GAAA,OAAA,EAAA,OAAA,EAAA,KAAA,KAAA,WACA,IACA,EAAA,CACA,OAFA,EAAA,KAAA,cAIA,EAAA,gBACA,EAAA,mBAAA,eAAA,EAAA,WAAA,EAAA,gBAAA,uBAAA,GACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,gBAAA,uBAAA,CACA,OAAA,QAIA,EAAA,UAAA,SAAA,SAAA,GACA,KAAA,UAEA,EAAA,UAAA,OAAA,SAAA,EAAA,GAGA,KAAA,KAAA,MAAA,MAAA,OACA,KAAA,GAAA,UAAA,OAAA,WACA,KAAA,GAAA,UAAA,OAAA,WACA,KAAA,GAAA,UAAA,OAAA,WACA,KAAA,aAAA,EACA,KAAA,UAAA,EACA,IAAA,EAAA,KAAA,cACA,GAAA,GAAA,EAAA,OAAA,EAAA,CAIA,IAHA,IAAA,EAAA,GACA,EAAA,GACA,GAAA,EACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,EACA,EAAA,EAAA,IACA,UACA,EAAA,eACA,KAAA,WAAA,EAAA,eAAA,MACA,EAAA,KAAA,EAAA,eAAA,EAAA,EAAA,eAAA,OACA,EAAA,KAAA,IAEA,EAAA,aACA,GAAA,GAEA,IAAA,EAAA,KAAA,GAAA,YACA,EAAA,KAAA,UAAA,EACA,IAAA,GACA,KAAA,GAAA,UAAA,IAAA,WACA,KAAA,UAAA,KAAA,IAAA,EAAA,KAAA,MAAA,EAAA,KAAA,MAAA,EAAA,OAAA,IAAA,KACA,KAAA,KAAA,MAAA,MAAA,KAAA,UAAA,MAGA,KAAA,GAAA,UAAA,IAAA,WAGA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,EACA,EAAA,EAAA,IACA,SACA,EAAA,eAIA,EAAA,KAAA,GAAA,YACA,EAAA,KAAA,UAAA,EAEA,IACA,EADA,EAAA,QACA,KAAA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,eAAA,EACA,OAAA,EAAA,eAAA,GAAA,EAAA,eAAA,EAAA,EAAA,GAAA,EAAA,EAAA,eAAA,EAAA,EAAA,eAAA,GAAA,EAAA,IAEA,EAAA,EACA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,GAAA,EAAA,EAAA,IACA,QAEA,EAAA,SAAA,EAAA,IAGA,EAAA,UAAA,EAIA,EACA,KAAA,GAAA,UAAA,OAAA,oBAGA,KAAA,GAAA,UAAA,IAAA,oBAEA,KAAA,aAAA,EAEA,KAAA,qBAAA,OAAA,KAAA,UAAA,KAAA,cACA,KAAA,GAAA,UAAA,IAAA,WACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,sBAAA,YACA,IAEA,KAAA,mBACA,OAIA,EAAA,UAAA,QAAA,WACA,KAAA,sBAAA,KACA,KAAA,cAAA,KACA,OAAA,oBAAA,SAAA,KAAA,kBAAA,GACA,KAAA,iBAAA,KACA,KAAA,GAAA,oBAAA,SAAA,KAAA,kBAAA,GACA,KAAA,iBAAA,KACA,KAAA,YAAA,oBAAA,EAAA,qBAAA,SAAA,KAAA,wBAAA,GACA,KAAA,uBAAA,KACA,KAAA,YAAA,oBAAA,EAAA,eAAA,iBAAA,KAAA,+BAAA,GACA,KAAA,8BAAA,KACA,KAAA,YAAA,oBAAA,EAAA,gBAAA,WAAA,KAAA,8BAAA,GACA,KAAA,6BAAA,KACA,KAAA,YAAA,oBAAA,EAAA,WAAA,kBAAA,KAAA,yBAAA,GACA,KAAA,wBAAA,KACA,KAAA,YAAA,oBAAA,EAAA,qBAAA,UAAA,KAAA,yBAAA,GACA,KAAA,wBAAA,KACA,KAAA,qBAAA,WAEA,EA1pBA,GA4pBA,EAAA,gBAAA,EAjqBA,CAkqBA,IAAA,EAAA,KAMA,SAAA,GACA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,KAAA,UAAA,EACA,KAAA,iBAAA,EACA,KAAA,IAAA,EACA,KAAA,aAAA,EACA,KAAA,EAAA,EACA,KAAA,QAAA,EACA,KAAA,OAAA,EACA,KAAA,aAAA,EACA,KAAA,WAAA,EACA,KAAA,iBAAA,EACA,KAAA,UAAA,EACA,KAAA,gBAAA,EACA,KAAA,iBAAA,EACA,KAAA,uBAAA,EACA,KAAA,oBAAA,EAAA,oBACA,KAAA,YAAA,EAAA,YACA,KAAA,aAAA,EAAA,aACA,KAAA,WAAA,EAAA,eAAA,GACA,KAAA,WAAA,EAAA,eAAA,GACA,KAAA,8BAAA,KAAA,sBAAA,KAAA,MACA,KAAA,WAAA,iBAAA,QAAA,KAAA,+BAAA,GACA,KAAA,WAAA,iBAAA,QAAA,KAAA,+BAAA,GACA,KAAA,sBAAA,KAAA,cAAA,KAAA,MACA,KAAA,wBAAA,KAAA,gBAAA,KAAA,MACA,KAAA,sBAAA,KAAA,cAAA,KAAA,MACA,KAAA,uBAAA,KAAA,eAAA,KAAA,MACA,SAAA,iBAAA,aAAA,KAAA,uBAAA,GACA,SAAA,iBAAA,EAAA,QAAA,cAAA,WAAA,KAAA,uBAAA,GACA,KAAA,oBAAA,iBAAA,EAAA,QAAA,cAAA,aAAA,KAAA,yBAAA,GACA,KAAA,oBAAA,iBAAA,EAAA,QAAA,cAAA,WAAA,KAAA,uBAAA,GACA,KAAA,oBAAA,iBAAA,EAAA,QAAA,cAAA,aAAA,KAAA,wBAAA,GAkIA,OAhIA,EAAA,UAAA,sBAAA,SAAA,GACA,IAAA,EAAA,EAAA,cAAA,aAAA,aACA,KAAA,cAAA,QAAA,GAAA,EAAA,IAEA,EAAA,UAAA,cAAA,SAAA,GACA,KAAA,cAAA,IAEA,EAAA,UAAA,gBAAA,SAAA,GACA,IAAA,EAAA,EAAA,QAAA,yBAAA,GACA,KAAA,aAAA,EACA,KAAA,OAAA,EAAA,EACA,KAAA,aAAA,KAAA,OACA,KAAA,iBAAA,EACA,KAAA,UAEA,EAAA,UAAA,cAAA,SAAA,GACA,KAAA,aAAA,GAEA,EAAA,UAAA,eAAA,SAAA,GACA,GAAA,KAAA,YAAA,CACA,IAAA,EAAA,EAAA,QAAA,yBAAA,GACA,EAAA,EAAA,EAAA,KAAA,OAEA,KAAA,uBADA,IACA,EACA,KAAA,gBAAA,KAAA,uBAAA,GAAA,EAAA,EACA,KAAA,aAAA,EAAA,IAGA,EAAA,UAAA,OAAA,WACA,IAAA,EAAA,KACA,KAAA,KACA,qBAAA,KAAA,KAEA,KAAA,QAAA,IAAA,KAAA,aAAA,KAAA,QAEA,KAAA,mBAAA,KAAA,uBAAA,KAAA,mBAAA,KAAA,YAAA,KAAA,IAAA,EAAA,aAAA,GAAA,GAAA,EAAA,cAEA,KAAA,wBADA,IAGA,KAAA,WAAA,IAAA,KAAA,gBAAA,KAAA,WAEA,KAAA,YAAA,IAAA,KAAA,iBAAA,KAAA,YACA,KAAA,WAAA,KAAA,WAEA,KAAA,SAAA,IAAA,KAAA,iBAEA,KAAA,QAAA,IACA,KAAA,UAAA,EAAA,KAAA,SAAA,EAAA,QAAA,KAAA,EAAA,aAAA,GAAA,KACA,KAAA,QAAA,KAAA,MACA,KAAA,UAAA,KAAA,IAAA,KAAA,SAAA,EAAA,QAAA,KAAA,EAAA,aAAA,GAAA,KACA,KAAA,GAAA,IAAA,KAAA,QAAA,KAAA,GAEA,IAAA,EAAA,KAAA,MAAA,KAAA,GACA,EAAA,IACA,KAAA,WAAA,UAAA,SAAA,WACA,KAAA,WAAA,UAAA,IAAA,UACA,KAAA,WAAA,UAAA,SAAA,gBACA,KAAA,WAAA,UAAA,IAAA,gBAEA,GAAA,IACA,KAAA,WAAA,UAAA,SAAA,WACA,KAAA,WAAA,UAAA,OAAA,UACA,KAAA,WAAA,UAAA,SAAA,gBACA,KAAA,WAAA,UAAA,OAAA,gBAEA,EAAA,KAAA,MACA,KAAA,WAAA,UAAA,SAAA,WACA,KAAA,WAAA,UAAA,IAAA,UACA,KAAA,WAAA,UAAA,SAAA,gBACA,KAAA,WAAA,UAAA,IAAA,gBAEA,GAAA,KAAA,MACA,KAAA,WAAA,UAAA,SAAA,WACA,KAAA,WAAA,UAAA,OAAA,UACA,KAAA,WAAA,UAAA,SAAA,gBACA,KAAA,WAAA,UAAA,OAAA,gBAGA,IAAA,EAAA,KAAA,EACA,EAAA,QAAA,aAAA,KAAA,aAAA,cAAA,EAAA,QAEA,KAAA,aAAA,KAAA,IAAA,KAAA,EAAA,KAAA,SAAA,MAAA,KAAA,eACA,KAAA,IAAA,OAAA,sBAAA,WAAA,OAAA,EAAA,aAEA,EAAA,UAAA,UAAA,SAAA,EAAA,GACA,KAAA,QAAA,KAAA,kBAAA,KAAA,UAAA,EAAA,EACA,KAAA,UAEA,EAAA,UAAA,cAAA,SAAA,GACA,KAAA,wBAAA,IAAA,EACA,KAAA,UAEA,EAAA,UAAA,QAAA,WACA,KAAA,WAAA,oBAAA,QAAA,KAAA,+BAAA,GACA,KAAA,WAAA,oBAAA,QAAA,KAAA,+BAAA,GACA,KAAA,8BAAA,KACA,KAAA,WAAA,KACA,KAAA,WAAA,KACA,SAAA,oBAAA,aAAA,KAAA,uBAAA,GACA,SAAA,oBAAA,EAAA,QAAA,cAAA,WAAA,KAAA,uBAAA,GACA,KAAA,oBAAA,oBAAA,EAAA,QAAA,cAAA,aAAA,KAAA,yBAAA,GACA,KAAA,oBAAA,oBAAA,EAAA,QAAA,cAAA,WAAA,KAAA,uBAAA,GACA,KAAA,oBAAA,oBAAA,EAAA,QAAA,cAAA,aAAA,KAAA,wBAAA,GACA,KAAA,sBAAA,KACA,KAAA,wBAAA,KACA,KAAA,sBAAA,KACA,KAAA,uBAAA,MAEA,EAAA,UAAA,MAAA,WACA,KAAA,aAAA,EACA,KAAA,OAAA,EACA,KAAA,aAAA,KAAA,OACA,KAAA,iBAAA,EACA,KAAA,EAAA,EACA,KAAA,QAAA,EACA,EAAA,QAAA,aAAA,KAAA,aAAA,mBACA,KAAA,SACA,KAAA,WAAA,UAAA,OAAA,UACA,KAAA,WAAA,UAAA,OAAA,WAEA,EAAA,UAAA,OAAA,SAAA,EAAA,GACA,KAAA,QACA,KAAA,iBAAA,EACA,KAAA,UAAA,KAAA,IAAA,EAAA,GACA,KAAA,KAAA,GAAA,KAAA,UAAA,KAAA,kBACA,KAAA,UAEA,EAAA,aAAA,GACA,EAlKA,GAoKA,EAAA,iBAAA,EArKA,CAsKA,IAAA,EAAA,KAKA,SAAA,GAGA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,IAAA,EAAA,KACA,KAAA,mBAAA,KAAA,aAAA,KAAA,MACA,KAAA,YAAA,EAAA,YACA,KAAA,YAAA,iBAAA,EAAA,WAAA,YAAA,KAAA,oBAAA,GACA,KAAA,YAAA,iBAAA,EAAA,WAAA,YAAA,WAAA,OAAA,EAAA,SAAA,OAAA,GACA,KAAA,GAAA,SAAA,cAAA,OACA,KAAA,GAAA,UAAA,iBACA,KAAA,IAAA,SAAA,cAAA,OACA,KAAA,IAAA,UAAA,MACA,KAAA,GAAA,YAAA,KAAA,KACA,WAAA,WAAA,OAAA,EAAA,QAAA,KAeA,OAbA,EAAA,UAAA,KAAA,WACA,KAAA,GAAA,UAAA,IAAA,SAEA,EAAA,UAAA,aAAA,SAAA,GACA,KAAA,SAAA,EAAA,OAAA,KAAA,EAAA,OAAA,SAAA,MAEA,EAAA,UAAA,SAAA,SAAA,GACA,KAAA,IAAA,MAAA,MAAA,EAAA,KAEA,EAAA,UAAA,QAAA,WACA,KAAA,YAAA,oBAAA,EAAA,WAAA,YAAA,KAAA,oBAAA,GACA,KAAA,mBAAA,MAEA,EA3BA,GA6BA,EAAA,YAAA,EAhCA,CAiCA,IAAA,EAAA,KAKA,SAAA,GAEA,IAAA,EAAA,WACA,SAAA,EAAA,GAEA,KAAA,KAAA,CACA,aAAA,yUACA,kBAAA,6BACA,0BAAA,0BACA,6BAAA,gCACA,4BAAA,4BACA,oBAAA,4BACA,oBAAA,qBACA,0BAAA,gCACA,6BAAA,wBACA,+BAAA,yBACA,oCAAA,wBACA,kBAAA,uCACA,mBAAA,QACA,uBAAA,oBACA,6BAAA,uBACA,QAAA,+BACA,iBAAA,gdAGA,KAAA,UAAA,CACA,cAAA,iUACA,MAAA,0BACA,KAAA,0BACA,SAAA,0BACA,SAAA,8BACA,KAAA,oBACA,MAAA,oBACA,SAAA,0BACA,IAAA,4BACA,MAAA,qCACA,OAAA,+BACA,KAAA,2BACA,QAAA,kCAEA,EAAA,SAAA,KACA,KAAA,QAAA,EAAA,QAEA,GAAA,EAAA,OACA,KAAA,KAAA,KAAA,sBAAA,EAAA,KAAA,KAAA,OAEA,EAAA,UACA,KAAA,KAAA,cAAA,EAAA,UAGA,KAAA,KAAA,cAAA,KAAA,KAAA,cAGA,EAAA,WACA,KAAA,UAAA,eAAA,EAAA,WAGA,KAAA,UAAA,eAAA,KAAA,UAAA,eAGA,GAAA,EAAA,YACA,KAAA,UAAA,KAAA,sBAAA,EAAA,UAAA,KAAA,YAuEA,OArEA,EAAA,IAAA,SAAA,GACA,IAAA,EAAA,EAAA,SACA,EAAA,EAAA,KAAA,GACA,GAAA,EAGA,CACA,IAAA,EAAA,EAAA,QAAA,gBAAA,GACA,EAAA,EAAA,KAAA,MAAA,KAAA,SAAA,EAAA,cAJA,EAAA,EAAA,KAAA,mBAMA,OAAA,GASA,EAAA,IAAA,SAAA,EAAA,EAAA,GACA,IAAA,EAAA,EAAA,SACA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,KAEA,OADA,EAAA,GAAA,EACA,EAAA,IAEA,EAAA,iBAAA,SAAA,GACA,IAAA,EAAA,EAAA,SACA,EAAA,EAAA,UAAA,GACA,GAAA,EAKA,CACA,IAAA,EAAA,EAAA,QAAA,gBAAA,GACA,EAAA,EAAA,KAAA,MAAA,KAAA,SAAA,EAAA,aAPA,CAEA,IAAA,EAAA,EAAA,QAAA,gBAAA,EAAA,UAAA,SACA,EAAA,EAAA,KAAA,MAAA,KAAA,SAAA,EAAA,SAMA,OAAA,GAEA,EAAA,4BAAA,SAAA,GAGA,IADA,IAAA,EAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,EAAA,OAAA,GAAA,GAAA,EAAA,OAAA,EAAA,EAAA,IAAA,oBAAA,KACA,GAAA,GAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAEA,OAAA,GAEA,EAAA,UAAA,sBAAA,SAAA,EAAA,GACA,IAAA,IAAA,KAAA,EACA,EAAA,KACA,QAAA,KAAA,4CAAA,EAAA,kCAAA,EAAA,mDACA,EAAA,GAAA,EAAA,IAGA,OAAA,GAEA,EAAA,SAAA,CACA,KAAA,GACA,MAAA,GACA,KAAA,GACA,GAAA,GACA,UAAA,EACA,MAAA,GACA,MAAA,GACA,MAAA,GACA,IAAA,GAEA,EAlIA,GAoIA,EAAA,WAAA,EAtIA,CAuIA,IAAA,EAAA,KAwBA,SAAA,GACA,EAAA,UAAA,CACA,yBAAA,8BAGA,IAAA,EAAA,WACA,SAAA,EAAA,GAYA,GAXA,KAAA,WAAA,EAAA,WACA,KAAA,oBAAA,KAAA,WAAA,OAAA,KAAA,WAAA,aAAA,UAAA,GACA,KAAA,eAAA,KAAA,mBAAA,KAAA,MACA,KAAA,WAAA,iBAAA,SAAA,KAAA,gBAAA,GAEA,KAAA,WAAA,UAAA,EACA,KAAA,eAAA,EAEA,EAAA,YACA,KAAA,UAAA,EAAA,WAEA,KAAA,WAAA,aAAA,iBAAA,CACA,IAAA,EAAA,OAAA,KAAA,WAAA,aAAA,kBACA,KAAA,mBAAA,EAGA,KAAA,WAAA,aAAA,aACA,KAAA,QAAA,IAAA,OAAA,KAAA,WAAA,aAAA,aACA,SAAA,KAAA,MAAA,EAAA,mBAAA,oBACA,EAAA,mBAAA,aACA,QAAA,IAAA,wCAAA,KAAA,KAAA,OAEA,KAAA,UA8dA,OA5dA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,aAAA,SAAA,KAAA,WAAA,QAAA,eAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,aAAA,SAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,KAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,aAAA,OAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,mBAAA,CACA,IAAA,WACA,OAAA,KAAA,mBAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,OAAA,EAAA,WAAA,kBAAA,KAAA,aAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,OAAA,KAAA,YAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,OAAA,KAAA,qBAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,aAAA,aAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,aAAA,QAAA,SAAA,KAAA,WAAA,aAAA,SAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WAEA,OAAA,KAAA,8BAAA,MAAA,KAAA,WAAA,aAAA,aAAA,MAAA,KAAA,WAAA,aAAA,aAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,QAAA,KAAA,WAAA,aAAA,aAAA,IAAA,KAAA,WAAA,aAAA,aAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WAEA,OAAA,KAAA,WAAA,GAAA,KAAA,UAAA,OAGA,KAAA,UAAA,KAAA,MAAA,KAAA,SAAA,KAAA,UAAA,SAFA,EAAA,WAAA,iBAAA,KAAA,OAIA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,cAAA,CACA,IAAA,SAAA,GACA,KAAA,aAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,eAAA,CACA,IAAA,WAoBA,OAnBA,KAAA,gBAEA,KAAA,WAAA,aAAA,YACA,KAAA,cAAA,EAAA,QAAA,gBAAA,KAAA,WAAA,aAAA,aAEA,KAAA,WAAA,YAAA,KAAA,WAAA,WAAA,aAAA,YACA,KAAA,cAAA,EAAA,QAAA,gBAAA,KAAA,WAAA,WAAA,aAAA,aAEA,KAAA,SACA,KAAA,cAAA,CAAA,EAAA,WAAA,IAAA,+BAGA,QAAA,KAAA,KACA,KAAA,cAAA,CAAA,EAAA,WAAA,IAAA,iCAEA,KAAA,cAAA,CAAA,EAAA,WAAA,IAAA,6BAIA,KAAA,cAAA,KAAA,MAAA,KAAA,SAAA,KAAA,cAAA,UAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,QAAA,WACA,KAAA,WAAA,oBAAA,SAAA,KAAA,gBAAA,GACA,KAAA,eAAA,KACA,KAAA,WAAA,KACA,KAAA,aAAA,KACA,KAAA,cAAA,KACA,KAAA,QAAA,KACA,KAAA,OAAA,KACA,KAAA,mBAAA,KACA,KAAA,UAAA,MAEA,EAAA,eAAA,SAAA,EAAA,GACA,IAAA,EAAA,SAAA,EAAA,GACA,MAAA,iBAAA,EAEA,EAAA,KAAA,GAGA,IAAA,GAEA,GAAA,iBAAA,EAAA,CAIA,IAFA,IAAA,EAAA,EACA,GAAA,EACA,EAAA,EAAA,EAAA,EAAA,aAAA,OAAA,IAAA,CAGA,GADA,EAAA,EAAA,EADA,EAAA,EAAA,aAAA,IAGA,MAEA,OAAA,EAGA,GAAA,EAGA,CAGA,IADA,GAAA,EACA,EAAA,EAAA,EAAA,EAAA,aAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,aAAA,GACA,GAAA,iBAAA,EACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,UACA,EAAA,EAAA,EAAA,GAAA,IADA,UAQA,EAAA,EAAA,EAAA,WAAA,GAEA,GAAA,EACA,MAEA,OAAA,EArBA,OAAA,GA0BA,EAAA,WAAA,SAAA,GACA,GAAA,WAAA,EAAA,aAAA,QACA,OAAA,EACA,GAAA,WAAA,EAAA,aAAA,QACA,OAAA,EAEA,GAAA,UAAA,EAAA,aAAA,QACA,OAAA,EACA,GAAA,EAAA,MAAA,CAEA,GAAA,SAAA,EAAA,MAAA,QACA,OAAA,EACA,GAAA,WAAA,EAAA,MAAA,WACA,OAAA,EAEA,IAAA,EAAA,EAAA,WAAA,kBAAA,GACA,EAAA,EAAA,QAAA,sBAAA,GACA,QAAA,UAAA,EAAA,QAAA,iBAAA,GAAA,IAAA,GAAA,KAAA,MAGA,UAAA,EAAA,QAAA,eAAA,UAAA,EAAA,QAAA,kBAEA,MAIA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,WAGA,EAAA,UAAA,SAAA,GACA,GAAA,EAAA,WAAA,GAAA,CAEA,IAAA,OAAA,EA+BA,MA9BA,SAAA,EAAA,QAAA,cACA,EAAA,IAAA,EAAA,SAAA,CACA,WAAA,IAGA,YAAA,EAAA,QAAA,cACA,EAAA,IAAA,EAAA,SAAA,CACA,WAAA,IAGA,UAAA,EAAA,QAAA,cACA,EAAA,IAAA,EAAA,UAAA,CACA,WAAA,IAGA,UAAA,EAAA,QAAA,cACA,EAAA,IAAA,EAAA,UAAA,CACA,WAAA,IAGA,UAAA,EAAA,QAAA,cACA,EAAA,IAAA,EAAA,UAAA,CACA,WAAA,IAGA,oBAAA,EAAA,QAAA,gBACA,EAAA,IAAA,EAAA,kBAAA,CACA,WAAA,KAGA,EAIA,OAAA,MAGA,EAAA,UAAA,MAAA,WACA,KAAA,UAGA,KAAA,aAAA,KAAA,WAAA,MAAA,KAAA,oBAAA,YAEA,EAAA,UAAA,QAAA,WAEA,KAAA,aAAA,KAAA,WAAA,OAAA,KAAA,WAAA,aAAA,UAAA,GACA,KAAA,UAAA,KACA,KAAA,sBACA,KAAA,6BAEA,EAAA,UAAA,iBAAA,SAAA,GACA,IAAA,KAAA,gBACA,OAAA,EAEA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,gBAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,gBAAA,GACA,GAAA,kBAAA,EAAA,gBAAA,EAAA,IAAA,cACA,OAAA,EAGA,OAAA,GAEA,EAAA,UAAA,cAAA,WACA,OAAA,KAAA,iBAAA,KAAA,gBAAA,OAAA,GAOA,EAAA,UAAA,2BAAA,WAGA,OAAA,KAAA,iBACA,KAAA,YAAA,8BAAA,KAAA,KAAA,kBAKA,EAAA,UAAA,sBAAA,SAAA,GAGA,IAAA,GAAA,EACA,EAAA,EAAA,KACA,KAAA,WAAA,aAAA,SACA,UAAA,KAAA,WAAA,aAAA,UACA,KAAA,SACA,EAAA,OAAA,EACA,KAAA,QAAA,yJAIA,KAAA,WAAA,aAAA,SACA,UAAA,KAAA,WAAA,aAAA,SACA,KAAA,SACA,IAAA,EAAA,SACA,KAAA,WACA,KAAA,QAAA,MAEA,KAAA,UACA,EAAA,KAAA,QAAA,KAAA,IAEA,IAAA,GAAA,KAAA,WACA,GAAA,GAGA,IAAA,EAAA,SAAA,KAAA,WAAA,aAAA,aAAA,MAAA,EAEA,EAAA,SAAA,KAAA,WAAA,aAAA,aAAA,MAAA,EAeA,OAdA,GAAA,GAAA,EAAA,OAAA,IACA,GAAA,IAEA,GAAA,GAAA,EAAA,OAAA,IACA,GAAA,GAEA,KAAA,oBAAA,KAEA,GAAA,GACA,GAEA,QAAA,KAAA,OACA,KAAA,WAAA,MAAA,GAEA,GAUA,EAAA,UAAA,oBAAA,SAAA,GACA,IAAA,EACA,OAAA,EACA,IAAA,EAAA,SAAA,EAAA,IACA,EAAA,SAAA,KAAA,WAAA,aAAA,OAAA,MAAA,EACA,EAAA,SAAA,KAAA,WAAA,aAAA,OAAA,MAAA,EACA,SAAA,IAAA,GAAA,EAAA,OAEA,IAAA,GAAA,EAAA,IAIA,EAAA,UAAA,SAAA,WAGA,OAFA,KAAA,QACA,KAAA,kBACA,KAAA,OACA,KAAA,OACA,EAAA,WAAA,iBAAA,KAAA,OAMA,EAAA,UAAA,0BAAA,WACA,IAAA,EAAA,KAAA,WAAA,WACA,GAAA,EAAA,OAAA,EAEA,IAAA,IAAA,KADA,KAAA,gBAAA,GACA,EACA,GAAA,EAAA,eAAA,GAAA,CACA,IAAA,EAAA,EAAA,GACA,GAAA,GAAA,EAAA,OAAA,IAAA,EAAA,KAAA,QAAA,kBAAA,CAKA,IAHA,IAAA,EAAA,GAEA,GAAA,IAAA,EAAA,MAAA,QAAA,MAAA,EAAA,MAAA,MAAA,MAAA,EAAA,MAAA,MAAA,MACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,IACA,EAAA,KAAA,IAAA,OAAA,IAEA,MAAA,IAEA,EAAA,KAAA,GAEA,KAAA,gBAAA,KAAA,CACA,IAAA,EAAA,KACA,aAAA,OAOA,EAAA,UAAA,oBAAA,WACA,IAAA,KAAA,UAAA,CAKA,GAAA,KAAA,WAAA,aAAA,gBACA,KAAA,UAAA,EAAA,QAAA,gBAAA,KAAA,WAAA,aAAA,iBACA,KAAA,WAAA,aAAA,0BACA,KAAA,kBAAA,KAAA,WAAA,aAAA,8BAEA,GAAA,KAAA,WAAA,YAAA,KAAA,WAAA,WAAA,aAAA,gBAAA,CAEA,IAAA,EAAA,KAAA,WAAA,WACA,KAAA,UAAA,EAAA,QAAA,gBAAA,EAAA,aAAA,iBACA,EAAA,aAAA,0BACA,KAAA,kBAAA,EAAA,aAAA,6BAEA,CAGA,IAAA,EAAA,KAAA,WAAA,aAAA,MACA,EAAA,SAAA,cAAA,cAAA,EAAA,MACA,IACA,KAAA,UAAA,CAAA,EAAA,QAAA,sBAAA,MAGA,KAAA,WAAA,KAAA,WAAA,aAAA,iBAEA,KAAA,UAAA,CAAA,KAAA,WAAA,aAAA,mBAGA,EAAA,UAAA,gBAAA,WAEA,GAAA,KAAA,WAAA,aAAA,YACA,KAAA,OAAA,KAAA,WAAA,aAAA,gBAEA,CACA,IAAA,EAAA,KAAA,WAAA,WACA,GAAA,EAAA,CAEA,IAAA,EAAA,SAAA,EAAA,QAAA,cAAA,CAAA,GAAA,EAAA,qBAAA,SACA,GAAA,GAAA,EAAA,OAAA,CAEA,IAAA,EAAA,EAAA,QAAA,sBAAA,GACA,GAAA,EAAA,OAAA,IACA,EAAA,CAAA,SAEA,GAAA,EAAA,OAAA,EAEA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,aAAA,QAAA,KAAA,KACA,KAAA,OAAA,EAAA,QAAA,sBAAA,KAIA,KAAA,QAAA,EAAA,KACA,KAAA,OAAA,EAAA,QAAA,sBAAA,EAAA,QASA,EAAA,UAAA,mBAAA,WACA,KAAA,aAAA,cAAA,IAAA,EAAA,EAAA,UAAA,yBAAA,CACA,OAAA,CACA,MAAA,KAAA,MACA,IAAA,UAIA,EAtfA,GAwfA,EAAA,IAAA,EA7fA,CA8fA,IAAA,EAAA,KAWA,SAAA,GAEA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,KAAA,SAAA,EAAA,SAEA,KAAA,UAAA,EAAA,SACA,KAAA,WAAA,KAAA,UAAA,aAAA,kBACA,KAAA,UAAA,EAAA,QAAA,gBAAA,KAAA,UAAA,aAAA,kBAEA,KAAA,WAAA,KAAA,UAAA,aAAA,0BACA,KAAA,kBAAA,KAAA,UAAA,aAAA,yBAEA,EAAA,mBAAA,oBACA,EAAA,mBAAA,aACA,QAAA,IAAA,6CAAA,KAAA,SAAA,GAAA,KAAA,OACA,KAAA,eAAA,EA6PA,OA3PA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,KAAA,SAAA,GACA,GAAA,KAAA,SAAA,GAAA,SACA,OAAA,EAGA,OAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,cAAA,CACA,IAAA,SAAA,GACA,KAAA,aAAA,EACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,KAAA,SAAA,GACA,YAAA,IAGA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,cAAA,CACA,IAAA,SAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,KAAA,SAAA,GACA,YAAA,IAGA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,SAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,MAAA,IAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,KAAA,UAAA,aAAA,QAAA,KAAA,UAAA,aAAA,QAAA,KAAA,SAAA,GAAA,MAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,KAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,KAAA,UAAA,GAAA,KAAA,UAAA,GAAA,KAAA,SAAA,GAAA,IAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WAEA,OAAA,KAAA,WAAA,KAAA,UAAA,OAAA,EACA,KAAA,UAAA,KAAA,MAAA,KAAA,SAAA,KAAA,UAAA,SAEA,KAAA,SAAA,IAAA,KAAA,SAAA,GAAA,SACA,KAAA,SAAA,GAAA,SAKA,EAAA,WAAA,iBAAA,KAAA,oBAIA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,iBAAA,CACA,IAAA,WACA,OAAA,KAAA,iBAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WAEA,OAAA,KAAA,QAAA,KAAA,QAAA,CAAA,KAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WAGA,IAFA,IACA,EAAA,EACA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,KAAA,SAAA,GACA,UACA,IAEA,OAAA,IAAA,KAAA,SAAA,QAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,eAAA,CACA,IAAA,WAEA,IADA,IAAA,EAAA,EAAA,WAAA,IAAA,2BACA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CAEA,EADA,KAAA,SAAA,GACA,aAEA,OAAA,GAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,mBAAA,CACA,IAAA,WACA,OAAA,KAAA,mBAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,QAAA,WACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,KAAA,SAAA,GACA,UAEA,KAAA,SAAA,MAEA,EAAA,UAAA,QAAA,WACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,KAAA,SAAA,GACA,YAGA,EAAA,UAAA,MAAA,WACA,KAAA,QAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,KAAA,SAAA,GACA,UAGA,EAAA,UAAA,gBAAA,WACA,OAAA,KAAA,SAAA,GAAA,MAEA,EAAA,UAAA,iBAAA,SAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CAEA,GADA,KAAA,SAAA,GACA,iBAAA,GACA,OAAA,EAGA,OAAA,GAEA,EAAA,UAAA,cAAA,WACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CAEA,GADA,KAAA,SAAA,GACA,gBACA,OAAA,EAGA,OAAA,GAOA,EAAA,UAAA,2BAAA,WAGA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,KAAA,SAAA,GACA,6BAGA,OAAA,GAEA,EAAA,UAAA,sBAAA,SAAA,GACA,IAAA,GAAA,EACA,EAAA,KAAA,SAAA,GAAA,KAGA,OAFA,KAAA,QAAA,GACA,KAAA,gBAAA,GACA,GACA,IAAA,QACA,IAAA,GAAA,EACA,EAAA,GACA,GAAA,EAAA,gBAEA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,gBAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,gBAAA,GACA,EAAA,KAAA,SAAA,KAAA,SAAA,QAAA,EAAA,eACA,EAAA,KAAA,GACA,GAAA,EAAA,eACA,EAAA,UACA,KAAA,QAAA,KAAA,EAAA,OACA,KAAA,gBAAA,KAAA,KAGA,GAAA,EAAA,UACA,GAAA,SAMA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,IACA,GADA,EAAA,KAAA,SAAA,IACA,MAAA,WAAA,cACA,EAAA,EAAA,KAAA,WAAA,eAEA,IAAA,EAAA,QAAA,KAAA,IAAA,EAAA,QAAA,KACA,KAAA,gBAAA,KAAA,GAEA,KAAA,QAAA,KAAA,EAAA,OACA,EAAA,WAAA,SAAA,EACA,GAAA,GAIA,EAAA,EACA,MACA,IAAA,WAGA,GADA,GAAA,EACA,EAAA,gBACA,IAAA,EAAA,EAAA,EAAA,EAAA,gBAAA,OAAA,IAAA,CACA,EAAA,EAAA,gBAAA,IACA,EAAA,KAAA,SAAA,KAAA,SAAA,QAAA,EAAA,gBACA,WAAA,QAAA,EAAA,QACA,EAAA,UACA,KAAA,QAAA,KAAA,EAAA,OACA,KAAA,gBAAA,KAAA,IAIA,KAAA,UAAA,GAAA,KAAA,gBAAA,SAEA,GAAA,GAIA,OAAA,GAEA,EA3QA,GA6QA,EAAA,SAAA,EA/QA,CAgRA,IAAA,EAAA,KAGA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAgBA,MAfA,QAAA,EAAA,MAEA,SAAA,EAAA,MAEA,OAAA,EAAA,MAEA,YAAA,EAAA,MAEA,SAAA,EAAA,MAEA,YAAA,EAAA,MAEA,EAAA,KAGA,EAwBA,OA1CA,EAAA,EAAA,GAoBA,EAAA,UAAA,oBAAA,WACA,EAAA,UAAA,oBAAA,KAAA,OAGA,EAAA,UAAA,gBAAA,WACA,EAAA,UAAA,gBAAA,KAAA,MACA,KAAA,QAIA,EAAA,UAAA,sBAAA,SAAA,GACA,MAAA,YAAA,KAAA,MAKA,EAAA,UAAA,sBAAA,KAAA,KAAA,IAGA,EAAA,UAAA,QAAA,WACA,EAAA,UAAA,QAAA,KAAA,OAEA,EA3CA,CA4CA,EAAA,KACA,EAAA,SAAA,EAhDA,CAiDA,IAAA,EAAA,KAGA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAEA,EAAA,WAAA,GAEA,IADA,IAAA,EAAA,EAAA,WAAA,qBAAA,UACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,EAAA,IAAA,UAAA,GACA,EACA,EAAA,WAAA,KAAA,GAGA,QAAA,KAAA,EAAA,YAAA,KAAA,sBAAA,GAGA,OAAA,EAoFA,OApGA,EAAA,EAAA,GAkBA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,UAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,OAAA,KAAA,YAAA,KAAA,WAAA,aAAA,QAAA,KAAA,WAAA,aAAA,QAAA,KAAA,WAAA,GAAA,MAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,OAAA,KAAA,SAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,iBAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,aAAA,aAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,sBAAA,SAAA,GACA,IAAA,GAAA,EAEA,EAAA,GAEA,GADA,KAAA,QAAA,GACA,EAAA,gBAEA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,IAEA,IADA,IAAA,EAAA,KAAA,WAAA,GACA,EAAA,EAAA,EAAA,EAAA,gBAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,gBAAA,GACA,EAAA,cAAA,IAEA,EAAA,SAAA,EAAA,UAEA,GAAA,EAAA,WACA,GAAA,GACA,EAAA,UACA,KAAA,QAAA,KAAA,EAAA,OACA,EAAA,SACA,EAAA,KAAA,QAKA,CACA,IAAA,GAAA,EAEA,IAAA,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,IAAA,CACA,IACA,GADA,EAAA,KAAA,WAAA,IACA,MAAA,WAAA,cACA,EAAA,EAAA,KAAA,WAAA,eAEA,IAAA,EAAA,QAAA,KAAA,IAAA,EAAA,QAAA,KAEA,KAAA,QAAA,KAAA,EAAA,OACA,EAAA,WAAA,SAAA,EACA,GAAA,GAGA,EAAA,EAGA,IAAA,GAAA,GAAA,EAAA,OAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,KAAA,WAAA,KAAA,WAAA,QAAA,EAAA,eACA,EAAA,UAAA,EACA,EAAA,UAAA,EACA,GAAA,EACA,EAAA,UACA,KAAA,QAAA,KAAA,EAAA,OAEA,OAAA,GAEA,EArGA,CAsGA,EAAA,KACA,EAAA,UAAA,EA1GA,CA2GA,IAAA,EAAA,KAGA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAMA,MALA,UAAA,EAAA,WAAA,aAAA,SAEA,EAAA,WAAA,aAAA,QAGA,EAEA,OAVA,EAAA,EAAA,GAUA,EAXA,CAYA,EAAA,KACA,EAAA,UAAA,EAhBA,CAiBA,IAAA,EAAA,KAIA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,IACA,OAAA,OAAA,GAAA,EAAA,MAAA,KAAA,YAAA,KA4CA,OA9CA,EAAA,EAAA,GAIA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,UAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,OAAA,KAAA,SACA,EAAA,UAAA,SAAA,KAAA,MAGA,EAAA,QAAA,sBAAA,KAAA,aAGA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,OAAA,KAAA,WAAA,aAAA,aAGA,IAAA,SAAA,GACA,KAAA,WAAA,SAAA,EACA,EACA,KAAA,WAAA,aAAA,WAAA,YAGA,KAAA,WAAA,gBAAA,aAGA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,sBAAA,SAAA,GAIA,OAHA,GAKA,EA/CA,CAgDA,EAAA,KACA,EAAA,UAAA,EApDA,CAqDA,IAAA,EAAA,KAGA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAEA,OADA,EAAA,eAAA,EACA,EAKA,OATA,EAAA,EAAA,GAMA,EAAA,UAAA,QAAA,WACA,EAAA,UAAA,QAAA,KAAA,OAEA,EAVA,CAWA,EAAA,KACA,EAAA,kBAAA,EAfA,CAgBA,IAAA,EAAA,KAGA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAOA,OANA,EAAA,cAAA,EAAA,QAAA,KAAA,GACA,EAAA,GAAA,iBAAA,QAAA,EAAA,eAAA,GACA,EAAA,kBAAA,EAAA,YAAA,KAAA,GACA,EAAA,GAAA,iBAAA,YAAA,EAAA,mBAAA,GAEA,EAAA,gBACA,EAqDA,OA9DA,EAAA,EAAA,GAWA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,UAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,SAAA,WACA,OAAA,KAAA,aAAA,UAMA,EAAA,UAAA,cAAA,WACA,KAAA,aAEA,KAAA,GAAA,UAAA,IAAA,aACA,KAAA,MAAA,SAAA,cAAA,OACA,KAAA,oBAAA,KAAA,cAAA,KAAA,MACA,KAAA,MAAA,UAAA,IAAA,YACA,KAAA,MAAA,iBAAA,OAAA,KAAA,qBAAA,GACA,KAAA,MAAA,IAAA,KAAA,aAAA,WAAA,aAAA,YACA,KAAA,GAAA,aAAA,KAAA,MAAA,KAAA,GAAA,SAAA,MAGA,EAAA,UAAA,cAAA,WACA,KAAA,MAAA,UAAA,IAAA,UACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,qBAAA,UAAA,MAEA,EAAA,UAAA,YAAA,SAAA,GACA,EAAA,kBAEA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,YAEA,EAAA,UAAA,QAAA,WACA,KAAA,GAAA,oBAAA,QAAA,KAAA,eAAA,GACA,KAAA,cAAA,KACA,KAAA,sBACA,KAAA,MAAA,oBAAA,OAAA,KAAA,qBAAA,GACA,KAAA,oBAAA,MAEA,KAAA,GAAA,oBAAA,YAAA,KAAA,mBAAA,GACA,KAAA,kBAAA,KACA,EAAA,UAAA,QAAA,KAAA,OAGA,EAAA,UAAA,YAAA,WACA,MAAA,0CAAA,KAAA,aAAA,MAAA,gCAEA,EA/DA,CAgEA,EAAA,gBACA,EAAA,OAAA,EApEA,CAqEA,IAAA,EAAA,KAGA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,IACA,OAAA,OAAA,GAAA,EAAA,MAAA,KAAA,YAAA,KAsCA,OAxCA,EAAA,EAAA,GAIA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,eAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,UAAA,CACA,IAAA,WAEA,OADA,KAAA,GAAA,aAAA,YAAA,WAAA,KAAA,GAAA,aAAA,YAGA,IAAA,SAAA,GACA,GAMA,KAAA,GAAA,aAAA,UAAA,WACA,KAAA,aAAA,WAAA,aAAA,UAAA,WACA,KAAA,aAAA,WAAA,SAAA,IAPA,KAAA,GAAA,gBAAA,WACA,KAAA,aAAA,WAAA,gBAAA,WACA,KAAA,aAAA,WAAA,SAAA,IAQA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,SAAA,EACA,EAAA,UAAA,QAAA,KAAA,KAAA,IAGA,EAAA,UAAA,YAAA,WAEA,MAAA,uCADA,KAAA,aAAA,WAAA,SAAA,KAAA,aAAA,WAAA,aAAA,WACA,kBAAA,IAAA,sEAAA,KAAA,aAAA,MAAA,6DAEA,EAzCA,CA0CA,EAAA,QACA,EAAA,YAAA,EA9CA,CA+CA,IAAA,EAAA,KAGA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,IACA,OAAA,OAAA,GAAA,EAAA,MAAA,KAAA,YAAA,KAoCA,OAtCA,EAAA,EAAA,GAIA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,kBAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,UAAA,CACA,IAAA,WACA,MAAA,WAAA,KAAA,GAAA,aAAA,YAEA,IAAA,SAAA,GACA,GAMA,KAAA,GAAA,aAAA,UAAA,WACA,KAAA,aAAA,WAAA,aAAA,UAAA,WACA,KAAA,aAAA,WAAA,SAAA,IAPA,KAAA,GAAA,gBAAA,WACA,KAAA,aAAA,WAAA,gBAAA,WACA,KAAA,aAAA,WAAA,SAAA,IAQA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,SAAA,KAAA,SAGA,EAAA,UAAA,YAAA,WACA,IAAA,EAAA,KAAA,aAAA,WAAA,SAAA,KAAA,aAAA,WAAA,aAAA,WACA,MAAA,mDAAA,GAAA,KAAA,aAAA,MAAA,OAAA,OAAA,UAAA,IAAA,cAAA,EAAA,UAAA,IAAA,4EAAA,KAAA,aAAA,MAAA,uDAEA,EAvCA,CAwCA,EAAA,QACA,EAAA,eAAA,EA5CA,CA6CA,IAAA,EAAA,KAGA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAEA,EAAA,mBAAA,CACA,MAAA,0BAGA,IAAA,EAAA,SAAA,GAEA,SAAA,IACA,IAAA,EAAA,OAAA,GAAA,EAAA,MAAA,KAAA,YAAA,KAEA,OADA,EAAA,eAAA,EACA,EA8CA,OAlDA,EAAA,EAAA,GAMA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,gBAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,OAAA,KAAA,GAAA,aAAA,aAEA,IAAA,SAAA,GACA,EACA,KAAA,GAAA,aAAA,WAAA,YAGA,KAAA,GAAA,gBAAA,aAGA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,cAAA,EAAA,cACA,EAAA,UAAA,QAAA,KAAA,KAAA,IAEA,EAAA,UAAA,QAAA,SAAA,GACA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,mBAAA,MAAA,MACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,mBAAA,MAAA,CACA,OAAA,SAIA,EAAA,UAAA,YAAA,WAEA,IAAA,EAAA,gCAAA,KAAA,cAAA,qBAAA,IAAA,MAAA,KAAA,aAAA,WAAA,SAAA,sBAAA,IAAA,IAOA,OANA,GAAA,QACA,KAAA,gBACA,GAAA,+BACA,GAAA,KAAA,aAAA,MACA,GAAA,SACA,GAAA,gBAGA,EAnDA,CAoDA,EAAA,QACA,EAAA,aAAA,EA3DA,CA4DA,IAAA,EAAA,KAMA,SAAA,GAIA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,KAAA,QAAA,EAAA,QACA,KAAA,YAAA,EAAA,YACA,KAAA,aAAA,EAAA,aAEA,KAAA,YAAA,KAAA,aAAA,WAAA,aAAA,YACA,KAAA,4BAAA,KAAA,oBAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,mBAAA,MAAA,KAAA,6BAAA,GACA,KAAA,iBAkEA,OAhEA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,eAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,SAAA,WAEA,IADA,IAAA,EAAA,GACA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,SAAA,GACA,IAAA,KAAA,aAAA,EAAA,SAEA,OADA,EAAA,KAAA,GACA,EAEA,KAAA,aAAA,EAAA,UACA,EAAA,KAAA,GAGA,OAAA,GAEA,EAAA,UAAA,oBAAA,SAAA,GAEA,GAAA,KAAA,YAiBA,EAAA,OAAA,UAAA,EAAA,OAAA,aAjBA,CAEA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,SAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,SAAA,GACA,GAAA,EAAA,OACA,EAAA,UAAA,EAGA,EAAA,UAAA,EAGA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,qBAAA,aAAA,KAAA,cACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,qBAAA,aAAA,CACA,OAAA,EAAA,YAOA,EAAA,UAAA,eAAA,WACA,KAAA,SAAA,GAEA,IADA,IAAA,EAAA,KAAA,aAAA,WACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,IAAA,EAAA,aAAA,CACA,aAAA,EACA,cAAA,KAAA,aAAA,eACA,YAAA,KAAA,cAEA,KAAA,SAAA,KAAA,GACA,KAAA,QAAA,YAAA,EAAA,MAGA,EAAA,UAAA,QAAA,WAGA,IAFA,KAAA,YAAA,oBAAA,EAAA,mBAAA,MAAA,KAAA,6BAAA,GACA,KAAA,4BAAA,KACA,KAAA,SAAA,OAAA,GACA,KAAA,SAAA,MAAA,UACA,KAAA,SAAA,MAEA,EA3EA,GA6EA,EAAA,YAAA,EAjFA,CAkFA,IAAA,EAAA,KAIA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAMA,GALA,EAAA,YAAA,KACA,EAAA,SAAA,EACA,EAAA,YAAA,EACA,EAAA,UAAA,GACA,EAAA,cAAA,IACA,EAAA,QAAA,QAAA,aAWA,MAAA,IAAA,MAAA,kEAVA,IAAA,EAAA,EAAA,aAAA,WAAA,aAAA,gBAAA,EAAA,aAAA,WAAA,aAAA,YACA,GAAA,EAAA,CACA,IAAA,EAAA,SAAA,EAAA,IACA,EAAA,YAAA,EASA,OAPA,EAAA,YAAA,EAAA,GAAA,qBAAA,+BAAA,GACA,EAAA,2BAAA,EAAA,mBAAA,KAAA,GACA,EAAA,aAAA,WAAA,iBAAA,SAAA,EAAA,4BAAA,GAKA,EAmIA,OAxJA,EAAA,EAAA,GAuBA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,OAAA,KAAA,aAAA,WAAA,OAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,eAAA,CACA,IAAA,WACA,OAAA,KAAA,eAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,OAAA,KAAA,QAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,OAAA,KAAA,WAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,OAAA,CACA,IAAA,WACA,MAAA,gBAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,iBAAA,WAEA,IAAA,EAAA,SAAA,cAAA,QAEA,OADA,EAAA,UAAA,EAAA,WAAA,IAAA,kBAAA,KAAA,SACA,EAAA,WAEA,EAAA,UAAA,mBAAA,SAAA,GACA,IAAA,EAAA,KACA,EAAA,mBAAA,aACA,QAAA,IAAA,yBACA,IAAA,EAAA,IAAA,WACA,KAAA,OAAA,KAAA,aAAA,WAAA,MACA,EAAA,QAAA,SAAA,GACA,EAAA,mBAAA,aACA,QAAA,IAAA,UAAA,IAEA,EAAA,WAAA,SAAA,GACA,EAAA,mBAAA,aACA,QAAA,IAAA,aAAA,GACA,EAAA,YAAA,MAAA,MAAA,EAAA,OAAA,EAAA,MAAA,IAAA,KAEA,EAAA,QAAA,SAAA,GACA,EAAA,mBAAA,aACA,QAAA,IAAA,UAAA,IAEA,EAAA,YAAA,SAAA,GAEA,IAAA,EAAA,EAAA,MAAA,GACA,EAAA,EAAA,EAAA,KAAA,EAAA,YAAA,EACA,GAAA,EAAA,EAAA,YAAA,CACA,EAAA,QACA,IAAA,EAAA,CACA,UAAA,EAAA,WAAA,IAAA,sCAEA,EAAA,mBAAA,eAAA,EAAA,WAAA,EAAA,WAAA,mBAAA,GACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,WAAA,mBAAA,CACA,OAAA,SAGA,CAEA,EAAA,UAAA,EAAA,KACA,EAAA,SAAA,EACA,EAAA,YAEA,IAAA,EAAA,KAAA,MAAA,KAAA,IAAA,GAAA,KAAA,IAAA,OACA,EAAA,CAAA,IAAA,KAAA,KAAA,MACA,EAAA,KAAA,IAAA,EAAA,OAAA,EAAA,GACA,IAAA,EAAA,EAAA,QAAA,EAAA,KAAA,IAAA,KAAA,IAAA,QAAA,IAAA,IAAA,EAAA,GACA,EAAA,EAAA,KAAA,KAAA,EAAA,IACA,EAAA,GAAA,qBAAA,uBAAA,GAAA,UAAA,EACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,qBAAA,gBAAA,CACA,OAAA,EAAA,6BAAA,UAIA,EAAA,OAAA,SAAA,GACA,EAAA,cAAA,EAAA,OAAA,OACA,EAAA,YAAA,UAAA,IAAA,UACA,EAAA,YAAA,WAAA,WACA,EAAA,GAAA,UAAA,OAAA,cACA,EAAA,WACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,qBAAA,gBAAA,CACA,OAAA,EAAA,6BAAA,UAEA,IAEA,EAAA,cAAA,KAAA,MAAA,KAEA,EAAA,UAAA,UAAA,WACA,KAAA,SACA,EAAA,UAAA,UAAA,KAAA,OAEA,EAAA,UAAA,QAAA,SAAA,KAGA,EAAA,UAAA,kBAAA,WAEA,KAAA,aAAA,WAAA,SAGA,EAAA,UAAA,QAAA,WACA,aAAA,KAAA,aACA,KAAA,YAAA,KACA,KAAA,6BACA,KAAA,aAAA,WAAA,oBAAA,SAAA,KAAA,4BAAA,GACA,KAAA,2BAAA,MAEA,EAAA,UAAA,QAAA,KAAA,OAEA,EAAA,UAAA,YAAA,WACA,KAAA,KAAA,aAAA,OAAA,KAAA,aAAA,WAAA,aAAA,WACA,MAAA,8PAEA,EAzJA,CA0JA,EAAA,QACA,EAAA,aAAA,EA9JA,CA+JA,IAAA,EAAA,KAUA,SAAA,GACA,EAAA,sBAAA,CACA,MAAA,6BACA,eAAA,uCAGA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,KAAA,oBAAA,GACA,KAAA,eAAA,EACA,KAAA,gBAAA,EACA,KAAA,kBAAA,GACA,KAAA,GAAA,EAAA,GACA,KAAA,OAAA,EAAA,OACA,KAAA,YAAA,EAAA,YAEA,KAAA,cAAA,EAAA,cACA,KAAA,mBAAA,KAAA,aAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,WAAA,YAAA,KAAA,oBAAA,GAkOA,OAhOA,OAAA,eAAA,EAAA,UAAA,eAAA,CACA,IAAA,SAAA,GACA,KAAA,cAAA,GAQA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,SAAA,CACA,IAAA,SAAA,GACA,KAAA,YACA,KAAA,UAAA,UAAA,IAGA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,OAAA,WACA,KAAA,OAAA,SAAA,EACA,KAAA,cAAA,aACA,KAAA,cAAA,eAGA,EAAA,UAAA,aAAA,WACA,IAAA,EAAA,KAEA,GADA,KAAA,oBAAA,KACA,KAAA,cAsBA,KAAA,cAAA,kBACA,KAAA,gBAvBA,CAEA,IAAA,GAAA,EACA,OAAA,UAAA,cACA,OAAA,UAAA,aAAA,mBAAA,KAAA,SAAA,GACA,EAAA,QAAA,SAAA,GACA,GAAA,KAAA,EAAA,QACA,GAAA,KAGA,GAEA,EAAA,mBAeA,EAAA,UAAA,aAAA,WACA,IAAA,EAAA,KACA,SAGA,IAAA,UAAA,eACA,UAAA,aAAA,SAKA,IAAA,UAAA,aAAA,eACA,UAAA,aAAA,aAAA,SAAA,GAEA,IAAA,EAAA,UAAA,cAAA,OAAA,UAAA,oBAAA,OAAA,UAAA,gBAGA,OAAA,EAIA,IAAA,QAAA,SAAA,EAAA,GACA,EAAA,KAAA,UAAA,EAAA,EAAA,KAJA,QAAA,OAAA,IAAA,MAAA,sDAQA,UAAA,aAAA,aAAA,CAAA,OAAA,IACA,KAAA,SAAA,GACA,EAAA,cAAA,EACA,EAAA,iBAAA,OAAA,GAEA,EAAA,cAAA,EACA,EAAA,iBACA,EAAA,cAAA,kBAEA,EAAA,aAMA,EAAA,cAAA,IAGA,MAAA,SAAA,GAEA,EAAA,cAAA,EACA,EAAA,YAAA,cAAA,IAAA,MAAA,EAAA,sBAAA,mBAGA,MAAA,GAGA,KAAA,cAAA,EACA,KAAA,YAAA,cAAA,IAAA,MAAA,EAAA,sBAAA,mBAGA,EAAA,UAAA,QAAA,WACA,KAAA,SACA,KAAA,QAAA,KACA,KAAA,cAAA,KACA,KAAA,WACA,KAAA,UAAA,UAEA,KAAA,UAAA,KACA,KAAA,YAAA,oBAAA,EAAA,WAAA,YAAA,KAAA,oBAAA,GACA,KAAA,mBAAA,MAEA,EAAA,UAAA,UAAA,SAAA,GAMA,IAAA,EAAA,UACA,IAAA,IAAA,EAAA,GACA,KAAA,OAAA,SAAA,EACA,KAAA,YACA,KAAA,UAAA,UAAA,GAGA,KAAA,QAAA,IAAA,QAAA,SAAA,EAAA,GAAA,OAAA,EAAA,cAAA,MAAA,EAAA,EAAA,EAAA,iBACA,KAAA,SAAA,GAKA,GAHA,EAAA,QAAA,KAEA,EAAA,oBAAA,EAAA,YACA,EAAA,qBAAA,IAAA,EAAA,oBAIA,OAHA,EAAA,UAAA,EAAA,WAAA,IAAA,oCAEA,EAAA,YAGA,EAAA,gBAAA,EACA,EAAA,kBAAA,GACA,EAAA,OAAA,SAAA,EAEA,IAAA,EAAA,CACA,KAAA,EAAA,qBAEA,EAAA,mBAAA,eAAA,EAAA,WAAA,EAAA,gBAAA,OAAA,GACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,gBAAA,OAAA,CACA,OAAA,OAEA,MAAA,SAAA,GAMA,EAAA,gBAAA,IAEA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,sBAAA,eAAA,CACA,OAAA,EAAA,WAAA,IAAA,gCAEA,EAAA,mBAAA,aACA,QAAA,IAAA,wCAAA,KAGA,EAAA,mBAAA,IAGA,EAAA,gBAAA,EACA,EAAA,kBAAA,GAIA,EAAA,kBACA,EAAA,gBAAA,EACA,EAAA,UAAA,IAGA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,sBAAA,eAAA,CACA,OAAA,EAAA,WAAA,IAAA,gCAEA,EAAA,mBAAA,aACA,QAAA,IAAA,wCAAA,QAKA,EAAA,UAAA,gBAAA,SAAA,GAEA,OAAA,IADA,CAAA,WACA,QAAA,IAIA,EAAA,UAAA,UAAA,SAAA,GACA,IAAA,EAAA,CACA,UAAA,GAEA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,WAAA,mBAAA,GACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,WAAA,mBAAA,CACA,OAAA,KAEA,KAAA,aAEA,EAAA,UAAA,eAAA,WACA,IAAA,EAAA,KAAA,GAAA,qBAAA,oBAAA,GACA,EAAA,WAAA,IACA,KAAA,UAAA,IAAA,EAAA,CACA,OAAA,KAAA,cACA,eAAA,MAIA,EA9OA,GAgPA,EAAA,iBAAA,EACA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,IAAA,EAAA,KACA,KAAA,eAAA,EACA,KAAA,WAAA,EACA,KAAA,eAAA,EAAA,eACA,KAAA,QAAA,IAAA,aACA,KAAA,SAAA,KAAA,QAAA,iBACA,KAAA,IAAA,KAAA,QAAA,wBAAA,EAAA,QACA,KAAA,eAAA,KAAA,QAAA,sBAAA,KAAA,EAAA,GACA,KAAA,SAAA,sBAAA,GACA,KAAA,SAAA,QAAA,KACA,KAAA,IAAA,QAAA,KAAA,UACA,KAAA,SAAA,QAAA,KAAA,gBACA,KAAA,eAAA,QAAA,KAAA,QAAA,aACA,KAAA,eAAA,eAAA,WACA,EAAA,kBA6CA,OA1CA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,SAAA,GACA,KAAA,UAAA,EACA,KAAA,eAAA,MAAA,YAAA,OAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,eAAA,WACA,IAAA,KAAA,UAAA,CAEA,IAAA,EAAA,IAAA,WAAA,KAAA,SAAA,mBACA,KAAA,SAAA,qBAAA,GAGA,IAFA,IAAA,EAAA,EACA,EAAA,EAAA,OACA,EAAA,EAAA,EAAA,EAAA,IACA,GAAA,EAAA,GAEA,IAAA,EAAA,EAAA,EACA,EAAA,KAAA,IAAA,EAAA,KAAA,IAAA,EAAA,GAAA,GAAA,GAAA,KACA,KAAA,iBACA,KAAA,eAAA,GAAA,KAAA,eAAA,aAEA,KAAA,eAAA,MAAA,YAAA,KAAA,eAAA,EAAA,OAEA,EAAA,UAAA,QAAA,WACA,KAAA,eAAA,eAAA,KACA,KAAA,eAAA,KACA,KAAA,SAAA,KACA,KAAA,IAAA,KACA,KAAA,eAAA,KACA,KAAA,QAAA,MAEA,EAAA,UAAA,WAEA,OADA,OAAA,aAAA,OAAA,cAAA,OAAA,qBACA,OAAA,cAOA,EA7DA,GAvPA,CAsTA,IAAA,EAAA,KAUA,SAAA,GAEA,EAAA,4BAAA,CACA,OAAA,wCAGA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,KAAA,SAAA,EACA,KAAA,YAAA,EAAA,YACA,IAAA,EAAA,SAAA,cAAA,YACA,EAAA,UAAA,KAAA,cACA,KAAA,GAAA,EAAA,YAAA,EAAA,QAAA,WACA,KAAA,gBAAA,KAAA,QAAA,KAAA,MACA,KAAA,GAAA,iBAAA,QAAA,KAAA,iBAAA,GACA,KAAA,kCAAA,KAAA,0BAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,sBAAA,eAAA,KAAA,mCAAA,GAwHA,OAtHA,OAAA,eAAA,EAAA,UAAA,SAAA,CACA,IAAA,WACA,OAAA,KAAA,GAAA,UAAA,SAAA,WAEA,IAAA,SAAA,GACA,GACA,KAAA,GAAA,UAAA,IAAA,UACA,KAAA,SAAA,EACA,KAAA,KACA,KAAA,IAAA,WAIA,KAAA,GAAA,UAAA,OAAA,UACA,KAAA,KACA,KAAA,IAAA,cAIA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,SAAA,CACA,IAAA,WACA,OAAA,KAAA,SAEA,IAAA,SAAA,GACA,KAAA,QAAA,EACA,KAAA,MACA,KAAA,IAAA,OAAA,IAGA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,UAAA,CACA,IAAA,WACA,OAAA,KAAA,GAAA,UAAA,SAAA,YAEA,IAAA,SAAA,GACA,EACA,KAAA,GAAA,UAAA,IAAA,WAEA,KAAA,GAAA,UAAA,OAAA,YAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,cAAA,SAAA,GACA,KAAA,GAAA,UAAA,IAAA,wBACA,IAAA,EAAA,SAAA,cAAA,YACA,EAAA,UAAA,qJACA,IAAA,EAAA,EAAA,YAAA,EAAA,QAAA,WACA,KAAA,IAAA,IAAA,EAAA,iBAAA,CACA,GAAA,EACA,OAAA,KACA,YAAA,KAAA,YACA,cAAA,IAEA,KAAA,GAAA,YAAA,IAIA,EAAA,UAAA,MAAA,WACA,KAAA,MAAA,KAAA,QAEA,KAAA,IAAA,aAGA,EAAA,UAAA,YAAA,WACA,MAAA,mPAEA,EAAA,UAAA,0BAAA,SAAA,GACA,KAAA,MACA,KAAA,IAAA,UACA,KAAA,IAAA,KACA,KAAA,GAAA,YAAA,KAAA,GAAA,uBAAA,iBAAA,IACA,KAAA,GAAA,UAAA,OAAA,wBACA,KAAA,SAAA,EACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,WAAA,mBAAA,CACA,OAAA,CACA,UAAA,EAAA,aAKA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,MAAA,KAAA,OAEA,KAAA,IAAA,YAGA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,4BAAA,UAOA,EAAA,UAAA,MAAA,WACA,KAAA,GAAA,SAMA,EAAA,UAAA,QAAA,WACA,KAAA,YAAA,oBAAA,EAAA,sBAAA,eAAA,KAAA,mCAAA,GACA,KAAA,kCAAA,KACA,KAAA,KACA,KAAA,IAAA,UAEA,KAAA,IAAA,KACA,KAAA,GAAA,oBAAA,QAAA,KAAA,iBAAA,GACA,KAAA,gBAAA,KACA,KAAA,GAAA,KACA,KAAA,YAAA,MAEA,EAlIA,GAoIA,EAAA,sBAAA,EA1IA,CA2IA,IAAA,EAAA,KAKA,SAAA,GAEA,EAAA,eAAA,CACA,MAAA,QACA,WAAA,aACA,KAAA,QALA,CAOA,IAAA,EAAA,KAOA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAgBA,SAAA,GAEA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAWA,OAVA,EAAA,WAAA,EACA,EAAA,UAAA,EACA,EAAA,8BAAA,EAAA,sBAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,eAAA,iBAAA,EAAA,+BAAA,GACA,EAAA,oBAAA,EAAA,YAAA,KAAA,GACA,OAAA,iBAAA,QAAA,EAAA,qBAAA,GACA,EAAA,qBAAA,EAAA,aAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,WAAA,mBAAA,EAAA,sBAAA,GACA,EAAA,mBAAA,EAAA,aAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,WAAA,YAAA,EAAA,oBAAA,GACA,EA2HA,OAxIA,EAAA,EAAA,GAeA,OAAA,eAAA,EAAA,UAAA,aAAA,CACA,IAAA,WACA,OAAA,KAAA,aAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,UAAA,CACA,IAAA,SAAA,GACA,IAAA,EAAA,KACA,KAAA,SAAA,GACA,KAAA,GAAA,UAAA,SAAA,eAAA,EACA,WAAA,WACA,EAAA,GAAA,UAAA,IAAA,eACA,GAEA,KAAA,GAAA,UAAA,SAAA,gBAAA,GACA,KAAA,GAAA,UAAA,OAAA,eAGA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,OAAA,KAAA,WAEA,IAAA,SAAA,GACA,KAAA,WAAA,IAEA,KAAA,UAAA,EACA,EACA,KAAA,GAAA,aAAA,WAAA,aAGA,KAAA,kBACA,KAAA,GAAA,gBAAA,eAIA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,SAAA,CACA,IAAA,WACA,IAAA,EAAA,EACA,EAAA,EACA,EAAA,KAAA,GAYA,OAXA,EAAA,QAAA,qBAEA,EAAA,EAAA,aACA,EAAA,SAAA,EAAA,aAAA,UAAA,IAAA,SAAA,EAAA,aAAA,aAAA,IACA,GAAA,IAIA,EAAA,SAAA,SAAA,YAAA,iBAAA,EAAA,IAAA,iBAAA,UAAA,IACA,EAAA,SAAA,SAAA,YAAA,iBAAA,EAAA,IAAA,iBAAA,eAAA,SAAA,SAAA,YAAA,iBAAA,EAAA,IAAA,iBAAA,mBAEA,EAAA,GAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,4BAAA,SAAA,QACA,IAAA,IAAA,EAAA,OAEA,EAAA,UAAA,aAAA,SAAA,KAMA,EAAA,UAAA,WAAA,WACA,KAAA,UAAA,GAMA,EAAA,UAAA,WAAA,WACA,KAAA,UAAA,GAEA,EAAA,UAAA,WAAA,aAIA,EAAA,UAAA,gBAAA,aAEA,EAAA,UAAA,cAAA,aAEA,EAAA,UAAA,MAAA,aAEA,EAAA,UAAA,QAAA,WACA,KAAA,YAAA,oBAAA,EAAA,eAAA,iBAAA,KAAA,+BAAA,GACA,KAAA,8BAAA,KACA,KAAA,YAAA,oBAAA,EAAA,WAAA,mBAAA,KAAA,sBAAA,GACA,KAAA,qBAAA,KACA,OAAA,oBAAA,QAAA,KAAA,qBAAA,GACA,KAAA,oBAAA,KACA,KAAA,YAAA,oBAAA,EAAA,WAAA,YAAA,KAAA,oBAAA,GACA,KAAA,mBAAA,KACA,EAAA,UAAA,QAAA,KAAA,OAEA,EAAA,UAAA,aAAA,SAAA,GACA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,KAAA,EAAA,QACA,KAAA,YAAA,EAAA,OAAA,KAEA,EAAA,UAAA,YAAA,SAAA,KAEA,EAAA,UAAA,sBAAA,SAAA,GAEA,EAAA,OAAA,gBAAA,kBACA,KAAA,SAAA,EACA,KAAA,UAAA,EACA,KAAA,oBAGA,EAAA,WAAA,IACA,EAAA,kBAAA,EACA,EAAA,8BAAA,EACA,EAzIA,CA0IA,EAAA,cACA,EAAA,iBAAA,EACA,EAAA,gBAAA,CACA,OAAA,6BACA,WAAA,sBACA,uBAAA,kCACA,cAAA,yBACA,MAAA,iBACA,KAAA,iBApJA,CAsJA,IAAA,EAAA,KAQA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAiDA,OAhDA,EAAA,mBAAA,EACA,EAAA,aAAA,EAEA,EAAA,SAAA,EACA,EAAA,YAAA,EAAA,YACA,EAAA,YAAA,EAAA,YACA,EAAA,aAAA,EAAA,GAAA,qBAAA,YAAA,GACA,EAAA,qBAAA,EAAA,aAAA,KAAA,GACA,EAAA,oBAAA,EAAA,YAAA,KAAA,GACA,EAAA,aAAA,iBAAA,QAAA,EAAA,sBAAA,GACA,EAAA,aAAA,iBAAA,OAAA,EAAA,qBAAA,GACA,EAAA,mBAAA,mBACA,EAAA,aAAA,aAAA,gBAAA,IAGA,EAAA,gBAAA,IAAA,EAAA,gBAAA,CACA,GAAA,EAAA,GAAA,qBAAA,6BAAA,GACA,YAAA,EAAA,YACA,OAAA,EAAA,GAAA,qBAAA,WAAA,GACA,YAAA,EAAA,cAGA,EAAA,cAAA,EAAA,QAAA,KAAA,GACA,SAAA,iBAAA,QAAA,EAAA,eAAA,GACA,EAAA,gBAAA,EAAA,UAAA,KAAA,GACA,SAAA,iBAAA,UAAA,EAAA,iBAAA,GACA,EAAA,6BAAA,EAAA,qBAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,UAAA,yBAAA,EAAA,8BAAA,GACA,EAAA,+BAAA,EAAA,uBAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,qBAAA,aAAA,EAAA,gCAAA,GACA,EAAA,uCAAA,EAAA,+BAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,qBAAA,gBAAA,EAAA,wCAAA,GACA,EAAA,kCAAA,EAAA,0BAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,4BAAA,OAAA,EAAA,mCAAA,GAEA,EAAA,aAAA,IAAA,EAAA,sBAAA,CACA,YAAA,EAAA,cAEA,EAAA,GAAA,cAAA,OAAA,YAAA,EAAA,aAAA,IAEA,EAAA,qBACA,EAAA,cAAA,EAAA,mBACA,EAAA,eAAA,EAAA,cAAA,MAEA,EAAA,cAAA,OAEA,EAAA,aAAA,cAAA,EAAA,gBAEA,EA2gBA,OA9jBA,EAAA,EAAA,GAqDA,OAAA,eAAA,EAAA,UAAA,SAAA,CACA,IAAA,WACA,OAAA,KAAA,eAAA,SAAA,eAAA,KAAA,SAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,SAAA,GACA,IAAA,EAAA,KAAA,WAAA,EACA,EAAA,mBAAA,aACA,QAAA,IAAA,oBAAA,GACA,IACA,KAAA,UAAA,EACA,GACA,KAAA,GAAA,aAAA,WAAA,YACA,KAAA,aAAA,SAGA,KAAA,kBACA,KAAA,GAAA,gBAAA,eAIA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,cAAA,WACA,IAAA,EAAA,KAAA,aAAA,MAEA,EAAA,SAAA,cAAA,OAEA,OADA,EAAA,YAAA,SAAA,eAAA,IACA,EAAA,WAEA,EAAA,UAAA,WAAA,WACA,IAAA,EAeA,OAZA,EADA,KAAA,iBAAA,KAAA,gBAAA,OACA,KAAA,gBAAA,SAGA,CACA,KAAA,KAAA,kBAIA,MACA,EAAA,IAAA,KAAA,YACA,EAAA,MAAA,KACA,EAAA,IAAA,KAAA,WACA,GAEA,EAAA,UAAA,MAAA,WACA,KAAA,iBACA,KAAA,gBAAA,qBAGA,EAAA,UAAA,WAAA,WACA,EAAA,UAAA,WAAA,KAAA,MACA,KAAA,gBACA,KAAA,aAAA,QAAA,IAGA,EAAA,UAAA,WAAA,WACA,EAAA,UAAA,WAAA,KAAA,MAEA,KAAA,gBAAA,KAAA,aAAA,SACA,KAAA,aAAA,SAAA,EAEA,KAAA,aAAA,QAAA,EACA,KAAA,aAAA,QAAA,IAGA,EAAA,UAAA,cAAA,WACA,KAAA,aAAA,SAAA,EACA,KAAA,aAAA,SACA,KAAA,aAAA,QAAA,GACA,KAAA,iBACA,KAAA,gBAAA,oBACA,KAAA,UAAA,GAMA,EAAA,UAAA,qBAAA,SAAA,GACA,KAAA,YAAA,EAAA,OAAA,KACA,KAAA,gBAEA,KAAA,iBAAA,KAAA,gBAAA,QACA,KAAA,gBAAA,6BAAA,EAAA,OAAA,MAGA,EAAA,UAAA,cAAA,WACA,GAAA,KAAA,QAAA,KAAA,gBAAA,OAAA,CAGA,IAAA,EAAA,KAAA,IAAA,KAAA,mBAAA,SAAA,KAAA,aAAA,MAAA,OAAA,KACA,KAAA,aAAA,MAAA,OAAA,MAEA,KAAA,aAAA,MAAA,QAAA,IAAA,KAAA,aAAA,aAAA,EAAA,KAAA,aAAA,cAAA,KACA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,gBAAA,eACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,gBAAA,cAAA,CACA,OAAA,KAAA,aAAA,kBAGA,EAAA,UAAA,iBAAA,WACA,MAAA,KAAA,aAAA,aAAA,QACA,KAAA,aAAA,MAAA,OAAA,KAAA,mBAAA,KAGA,KAAA,aAAA,MAAA,OAAA,OAGA,EAAA,UAAA,aAAA,SAAA,GACA,IAAA,EAAA,KACA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,KAAA,EAAA,QACA,IAAA,EAAA,EAAA,OACA,KAAA,aAAA,aAAA,aAAA,KAAA,aAAA,OACA,KAAA,aAAA,MAAA,GACA,KAAA,GAAA,aAAA,QAAA,IACA,KAAA,UAAA,EAEA,KAAA,aAAA,aAAA,cAAA,EAAA,YAAA,KAAA,YAAA,KAAA,YAAA,aAAA,KACA,aAAA,KAAA,YAEA,KAAA,aAAA,SAAA,EACA,KAAA,WAAA,WAAA,WACA,EAAA,UAAA,EACA,EAAA,mBAAA,aACA,QAAA,IAAA,sBACA,EAAA,GAAA,gBAAA,SACA,EAAA,aAAA,MAAA,EAAA,aAAA,aAAA,cACA,EAAA,aAAA,aAAA,aAAA,IACA,EAAA,iBACA,EAAA,kBAEA,EAAA,aAAA,QACA,EAAA,iBACA,EAAA,gBAAA,0BACA,EAAA,iBAAA,aAEA,EAAA,UAAA,eAAA,WACA,KAAA,YACA,KAAA,YAAA,iBACA,KAAA,aAAA,aAAA,cAAA,KAAA,YAAA,kBAGA,KAAA,aAAA,aAAA,cAAA,SAAA,KAAA,YAAA,KAAA,EAAA,WAAA,IAAA,qBAAA,EAAA,WAAA,IAAA,sBAIA,KAAA,aAAA,aAAA,cAAA,EAAA,WAAA,IAAA,uBASA,EAAA,UAAA,wBAAA,WACA,IAAA,EAAA,KAAA,QAAA,KAAA,aAQA,GANA,KAAA,cAAA,KAAA,aAAA,UAAA,IACA,KAAA,aAAA,oBAAA,QAAA,KAAA,sBAAA,GACA,KAAA,aAAA,oBAAA,OAAA,KAAA,qBAAA,IAEA,KAAA,gBAAA,gBACA,KAAA,gBAAA,QACA,UAAA,EAAA,CAEA,IAAA,EAAA,SAAA,cAAA,SACA,MAAA,UAAA,MAAA,KAAA,KAAA,aAAA,YAAA,QAAA,SAAA,GACA,EAAA,aAAA,EAAA,KAAA,EAAA,SAEA,aAAA,KAAA,aAAA,MACA,EAAA,aAAA,eAAA,gBAEA,KAAA,YAAA,WAAA,aAAA,iBACA,EAAA,aAAA,eAAA,KAAA,YAAA,WAAA,aAAA,iBAEA,KAAA,YAAA,WAAA,aAAA,SACA,EAAA,aAAA,OAAA,KAAA,YAAA,WAAA,aAAA,SAEA,KAAA,aAAA,WAAA,aAAA,EAAA,KAAA,cACA,KAAA,aAAA,OAEA,GAAA,KAAA,cAAA,KAAA,aAAA,UAAA,EAAA,CAEA,IAAA,EAAA,SAAA,cAAA,YACA,MAAA,UAAA,MAAA,KAAA,KAAA,aAAA,YAAA,QAAA,SAAA,GACA,EAAA,aAAA,EAAA,KAAA,EAAA,SAEA,KAAA,aAAA,WAAA,aAAA,EAAA,KAAA,cACA,KAAA,aAAA,EAGA,KAAA,cAAA,KAAA,aAAA,UAAA,IACA,KAAA,aAAA,iBAAA,QAAA,KAAA,sBAAA,GACA,KAAA,aAAA,iBAAA,OAAA,KAAA,qBAAA,IAEA,GAAA,KAAA,qBAEA,KAAA,mBAAA,KAAA,aAAA,cAEA,KAAA,mBASA,EAAA,UAAA,gBAAA,SAAA,GACA,KAAA,cACA,KAAA,aAAA,aAAA,IACA,KAAA,aAAA,gBAAA,IAGA,EAAA,UAAA,QAAA,SAAA,GACA,OAAA,EAAA,YACA,EAAA,WAAA,QAGA,aAAA,EAAA,WAAA,SACA,EAAA,WAAA,aAAA,SACA,SAAA,EAAA,WAAA,aAAA,QAAA,IAAA,EACA,WACA,UAAA,EAAA,WAAA,QACA,QACA,WARA,YAUA,EAAA,UAAA,aAAA,SAAA,GACA,IAAA,EAAA,KACA,EAAA,UAAA,aAAA,KAAA,KAAA,GACA,KAAA,aAAA,SAAA,EACA,KAAA,aAAA,SACA,KAAA,aAAA,QAAA,GAEA,KAAA,GAAA,aAAA,WAAA,KAAA,YAAA,MAEA,KAAA,0BAEA,IAAA,GAAA,IAAA,CAAA,WAAA,SAAA,QAAA,OAAA,QAAA,KAAA,YAAA,MACA,KAAA,aAAA,aAAA,OAAA,EAAA,KAAA,YAAA,KAAA,SACA,aAAA,KAAA,YACA,KAAA,GAAA,gBAAA,SACA,KAAA,aAAA,aAAA,aAAA,IACA,KAAA,aAAA,MAAA,GACA,KAAA,aAAA,SAAA,EACA,KAAA,iBACA,KAAA,aACA,KAAA,kBACA,KAAA,gBAAA,QACA,SAAA,KAAA,YAAA,KACA,KAAA,qBAAA,KAAA,YAAA,UAGA,KAAA,qBAAA,CAAA,KAAA,cAEA,KAAA,YAAA,eACA,KAAA,aAAA,MAAA,KAAA,YAAA,aAAA,aAEA,IAAA,KAAA,YAAA,cACA,KAAA,GAAA,UAAA,IAAA,cAGA,KAAA,GAAA,UAAA,OAAA,cAGA,KAAA,YAAA,MAAA,KAAA,YAAA,KAAA,GACA,KAAA,aAAA,aAAA,OAAA,KAAA,YAAA,KAAA,YAEA,EAAA,iBAAA,+BAEA,KAAA,gBAAA,QACA,KAAA,GAAA,UAAA,IAAA,cAEA,KAAA,gBAAA,UAAA,WAGA,KAAA,GAAA,UAAA,OAAA,eAGA,KAAA,mBACA,WAAA,WACA,EAAA,iBACA,MAEA,EAAA,UAAA,+BAAA,SAAA,GACA,IAAA,EAAA,EAAA,OACA,KAAA,SAAA,GAAA,EAAA,6BAAA,KACA,EAAA,mBAAA,aACA,QAAA,IAAA,uBAEA,EAAA,UAAA,qBAAA,SAAA,GACA,KAAA,gBAAA,UAAA,IAEA,EAAA,UAAA,uBAAA,SAAA,GACA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,KAAA,EAAA,QAEA,IAAA,EAAA,EAAA,OACA,KAAA,gBAAA,sBAAA,GACA,KAAA,YAEA,EAAA,UAAA,0BAAA,SAAA,GACA,KAAA,4BAAA,IAEA,EAAA,UAAA,iBAAA,SAAA,IAEA,EAAA,SAAA,CAAA,GAAA,IAAA,QAAA,EAAA,UAGA,EAAA,UAAA,UAAA,SAAA,IACA,KAAA,QAAA,KAAA,gBAAA,SAEA,KAAA,6CAEA,KAAA,iBAAA,KAGA,EAAA,SAAA,EAAA,WAAA,SAAA,QACA,KAAA,aAAA,IAEA,IAAA,KAAA,YAAA,sBAAA,KAAA,aAAA,aAAA,SAAA,SAAA,KAAA,aAAA,aAAA,SAAA,GAIA,EAAA,SAAA,EAAA,WAAA,SAAA,OAAA,EAAA,UACA,EAAA,oBAGA,EAAA,UAAA,0CAAA,WACA,OAAA,KAAA,iBAAA,KAAA,gBAAA,QAAA,EAAA,iBAAA,8BAEA,EAAA,UAAA,QAAA,SAAA,GACA,IAAA,KAAA,QAAA,KAAA,6CAAA,KAAA,gBAAA,SAEA,KAAA,iBAAA,GAAA,CAEA,GAAA,EAAA,SAAA,EAAA,WAAA,SAAA,MACA,KAAA,aAAA,OAEA,GAAA,EAAA,SAAA,EAAA,WAAA,SAAA,GACA,EAAA,iBACA,KAAA,SAAA,KAAA,gBAAA,OACA,KAAA,gBAAA,UAAA,eAEA,GAAA,EAAA,SAAA,EAAA,WAAA,SAAA,KACA,EAAA,iBACA,KAAA,SAAA,KAAA,gBAAA,OACA,KAAA,gBAAA,UAAA,YAEA,GAAA,EAAA,SAAA,EAAA,WAAA,SAAA,IAAA,CAIA,IAFA,IAAA,GAAA,EACA,EAAA,EAAA,OAAA,WACA,MAAA,GAAA,CACA,GAAA,IAAA,KAAA,YAAA,GAAA,CACA,GAAA,EACA,MAEA,EAAA,EAAA,WAGA,IACA,EAAA,iBACA,KAAA,gBAAA,QACA,KAAA,mBAGA,IAAA,KAAA,GAAA,aAAA,YAAA,CAEA,IAAA,EAAA,KAAA,aACA,GAAA,EAAA,SAAA,EAAA,WAAA,SAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,SAAA,MACA,GAAA,EAAA,SAAA,EAAA,WAAA,SAAA,OAAA,KAAA,OAAA,CACA,IAAA,IAAA,KAAA,YAAA,qBACA,OACA,EAAA,iBACA,KAAA,mCAIA,GAAA,EAAA,SAAA,EAAA,WAAA,SAAA,OAAA,EAAA,SAAA,EAAA,WAAA,SAAA,MAAA,CACA,EAAA,iBACA,IAAA,EAAA,SAAA,KAAA,YAAA,KAAA,KAAA,YAAA,kBAAA,KAAA,YAAA,KACA,GAAA,UAAA,GAAA,YAAA,EAAA,CACA,IAAA,EAAA,KAAA,YAEA,YAAA,GAAA,EAAA,gBACA,KAAA,QAAA,KAAA,8CAAA,EAAA,SAAA,EAAA,WAAA,SAAA,MAEA,KAAA,aAAA,SAIA,KAAA,QAAA,KAAA,gBAAA,QAAA,KAAA,8CAEA,KAAA,aACA,KAAA,mBAEA,KAAA,kBAAA,EAAA,EAAA,UAIA,KAAA,kBAAA,EAAA,EAAA,aAIA,SAAA,KAAA,YAAA,MAEA,KAAA,kBAAA,EAAA,EAAA,cAIA,EAAA,SAAA,EAAA,WAAA,SAAA,OAAA,SAAA,eACA,KAAA,kBAAA,EAAA,EAAA,cAIA,EAAA,SAAA,EAAA,WAAA,SAAA,OAAA,EAAA,SAAA,EAAA,WAAA,SAAA,KACA,KAAA,kBAAA,EAAA,EAAA,SAEA,KAAA,mBAEA,EAAA,UAAA,kBAAA,SAAA,EAAA,GAEA,KAAA,aAAA,OAAA,EAAA,MAAA,EAAA,KAAA,OAAA,EACA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,gBAAA,WAAA,GACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,gBAAA,WAAA,CACA,OAAA,CACA,IAAA,EACA,QAAA,EACA,iBAAA,KAAA,YAIA,EAAA,UAAA,YAAA,SAAA,GACA,EAAA,UAAA,YAAA,KAAA,KAAA,GACA,KAAA,mBAEA,EAAA,UAAA,YAAA,SAAA,GACA,KAAA,SAAA,EACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,gBAAA,QAEA,EAAA,UAAA,aAAA,SAAA,GACA,KAAA,SAAA,EACA,KAAA,gBACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,gBAAA,SAEA,EAAA,UAAA,gBAAA,WACA,EAAA,iBAAA,kBAAA,KAAA,GAAA,UAAA,SAAA,eACA,KAAA,aAAA,SAGA,EAAA,UAAA,4BAAA,SAAA,QACA,IAAA,IAAA,EAAA,MACA,IAAA,EAAA,KAAA,gBAAA,QAAA,EAAA,iBAAA,8BACA,KAAA,QAAA,IAAA,KAAA,gBAAA,YAEA,KAAA,gBAAA,qBAGA,KAAA,YAMA,QAAA,KAAA,YAAA,MAAA,EAEA,KAAA,gBAAA,WAAA,GAAA,oBAIA,KAAA,WAVA,KAAA,YAAA,GAAA,oBAAA,KAAA,aAAA,QAeA,EAAA,UAAA,SAAA,WACA,IAAA,EAAA,KAAA,aACA,KAAA,aAAA,SAAA,EACA,KAAA,UAAA,EACA,KAAA,GAAA,gBAAA,SACA,KAAA,aAAA,aAAA,aAAA,IACA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,gBAAA,OAAA,GACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,gBAAA,OAAA,CACA,OAAA,MAGA,EAAA,UAAA,WAAA,WACA,KAAA,aAAA,MAAA,GACA,KAAA,aAAA,aAAA,SACA,KAAA,aAAA,aAAA,OAAA,KACA,KAAA,iBAEA,EAAA,UAAA,QAAA,WACA,KAAA,aAAA,oBAAA,OAAA,KAAA,qBAAA,GACA,KAAA,oBAAA,KACA,KAAA,aAAA,oBAAA,QAAA,KAAA,sBAAA,GACA,KAAA,qBAAA,KACA,SAAA,oBAAA,UAAA,KAAA,iBAAA,GACA,KAAA,gBAAA,KACA,SAAA,oBAAA,QAAA,KAAA,eAAA,GACA,KAAA,cAAA,KACA,KAAA,YAAA,oBAAA,EAAA,qBAAA,aAAA,KAAA,gCAAA,GACA,KAAA,+BAAA,KAEA,KAAA,aAAA,GAAA,oBAAA,EAAA,4BAAA,OAAA,KAAA,mCAAA,GACA,KAAA,kCAAA,KACA,KAAA,aAAA,UACA,KAAA,aAAA,KACA,EAAA,UAAA,QAAA,KAAA,OAGA,EAAA,UAAA,YAAA,WACA,OAAA,KAAA,gBAAA,0cAEA,EA/jBA,CAgkBA,EAAA,kBACA,EAAA,cAAA,EApkBA,CAqkBA,IAAA,EAAA,KAMA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GACA,EAAA,mBAAA,CACA,oBAAA,6BAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAIA,OAHA,EAAA,UAAA,EAAA,UACA,EAAA,UAAA,EAAA,YAAA,UACA,EAAA,KAAA,EAAA,IACA,EAkYA,OAxYA,EAAA,EAAA,GAQA,OAAA,eAAA,EAAA,UAAA,MAAA,CACA,IAAA,WACA,OAAA,KAAA,MAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,QAAA,CACA,IAAA,WACA,QAAA,KAAA,MAAA,KAAA,GAAA,cAAA,KAAA,GAAA,WAAA,YAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WACA,OAAA,KAAA,GAAA,UAAA,SAAA,aAEA,IAAA,SAAA,GACA,EACA,KAAA,GAAA,UAAA,IAAA,YAEA,KAAA,GAAA,UAAA,OAAA,aAEA,YAAA,EACA,cAAA,IAKA,EAAA,UAAA,WAAA,WACA,OAAA,KAAA,YAAA,GAAA,UAAA,SAAA,oBAAA,KAAA,YAAA,GAAA,UAAA,SAAA,iBAEA,EAAA,UAAA,UAAA,WACA,IAAA,EAAA,KACA,EAAA,SAAA,cAAA,cACA,EAAA,SAAA,cAAA,oBACA,KAAA,cACA,EAAA,UAAA,OAAA,UACA,sBAAA,WACA,IAAA,EAAA,EAAA,GAAA,aACA,EAAA,GAAA,MAAA,OAAA,MACA,sBAAA,WACA,EAAA,GAAA,MAAA,OAAA,EAAA,KACA,EAAA,GAAA,UAAA,IAAA,QAEA,IACA,IAAA,EAAA,OAAA,iBAAA,SAAA,iBAAA,UAAA,IACA,GAAA,EAAA,kBAAA,QAAA,IAAA,IACA,GAAA,EAAA,eAAA,QAAA,IAAA,IACA,WAAA,WACA,EAAA,GAAA,MAAA,OAAA,OACA,EAAA,cAAA,EAAA,aAAA,EAAA,eACA,EAAA,UAAA,IAAA,UACA,EAAA,UAAA,EAAA,eAEA,MAAA,EAAA,IAEA,MAAA,GAEA,WAAA,WACA,EAAA,cAAA,EAAA,aAAA,EAAA,eACA,EAAA,UAAA,IAAA,UACA,EAAA,UAAA,EAAA,cAEA,EAAA,GAAA,MAAA,OAAA,QACA,WAKA,OAAA,eAAA,EAAA,UAAA,UAAA,CACA,IAAA,SAAA,KAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,mBAAA,CACA,IAAA,WACA,IAAA,EAAA,KAAA,SAEA,EAAA,SAAA,cAAA,OAEA,OADA,EAAA,UAAA,EACA,EAAA,aAAA,EAAA,WAAA,IAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,UAAA,SAAA,GACA,KAAA,gBAAA,GAEA,EAAA,UAAA,SAAA,SAAA,QAIA,IAAA,IAAA,EAAA,MACA,KAAA,GAAA,aAAA,YACA,GAAA,EAGA,CASA,GAPA,KAAA,SAAA,KAAA,iBAAA,EAAA,KACA,KAAA,4BACA,KAAA,eAAA,KAAA,iBAEA,KAAA,aAAA,4BAGA,GAAA,EAAA,iBAAA,EAAA,gBAAA,GACA,OAAA,EAAA,gBAAA,GAAA,MACA,IAAA,eACA,KAAA,OAAA,UAAA,IAAA,aAIA,KAAA,iBAAA,KAAA,kBAEA,KAAA,gBAAA,KAAA,QAAA,KAAA,MACA,KAAA,GAAA,iBAAA,EAAA,QAAA,cAAA,SAAA,KAAA,iBAAA,SArBA,KAAA,iBAyBA,EAAA,UAAA,KAAA,WACA,KAAA,SAAA,EACA,KAAA,UAAA,EACA,KAAA,SAIA,KAAA,mBAHA,KAAA,iBAMA,EAAA,UAAA,gBAAA,SAAA,GACA,IAAA,EAAA,KAAA,GAAA,qBAAA,SAAA,GACA,GAAA,IAAA,EAAA,QAAA,SAAA,CACA,IAAA,EAAA,EAAA,qBAAA,QAAA,GACA,EAAA,UAAA,EAAA,MAAA,SAAA,GACA,EAAA,aAAA,SAAA,EAAA,OAAA,iBAGA,KAAA,MAAA,EACA,EAAA,MAAA,gBAAA,QAAA,KAAA,MAAA,MAGA,EAAA,UAAA,sBAAA,SAAA,GAEA,KAAA,aAAA,GAEA,EAAA,UAAA,0BAAA,WACA,IAAA,EAAA,KACA,GAAA,KAAA,iBAAA,CAEA,IAAA,EAAA,KAAA,iBACA,GAAA,KAAA,MAAA,YAAA,KAAA,KAAA,OAAA,KAAA,gBAAA,CAEA,IADA,IAAA,EAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,IACA,GAAA,IAEA,EAAA,EAOA,GAJA,KAAA,cAAA,KAAA,kBAEA,EAAA,EAAA,MAAA,qBAAA,KAAA,KAAA,aAAA,iBAEA,KAAA,gBAGA,IADA,IAAA,EAAA,EAAA,KAAA,eACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,IAAA,MACA,EAAA,MAEA,EAAA,IAAA,KACA,EAAA,EAAA,MAAA,IAAA,EAAA,IAAA,GAAA,KAAA,KAAA,EAAA,IAAA,QAGA,EAAA,IAAA,OACA,EAAA,EAAA,MAAA,IAAA,EAAA,IAAA,KAAA,KAAA,KAAA,EAAA,IAAA,SAWA,IAJA,GAAA,EAAA,QAAA,mBAEA,KAAA,OAAA,UAAA,IAAA,kBAEA,KAAA,gBAAA,CACA,KAAA,OAAA,UAAA,GACA,KAAA,YACA,KAAA,UAAA,KAAA,YAAA,WACA,IAAA,EAAA,KAAA,UAAA,MAAA,kBACA,GAAA,GACA,KAAA,gBAGA,IAAA,EAAA,EAAA,MAAA,MACA,GAAA,IAAA,EAAA,CACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,KAAA,OAAA,WAAA,MAAA,EAAA,OAWA,IATA,IAAA,EAAA,SAAA,GACA,WAAA,WACA,EAAA,mBACA,EAAA,OAAA,qBAAA,KACA,GAAA,UAAA,IAAA,QACA,EAAA,YACA,EAAA,OAAA,GAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,UAAA,MAAA,oBAAA,IAEA,EAAA,KACA,EAAA,EAAA,EAAA,EAAA,OAAA,IACA,EAAA,QAgBA,IAZA,IAAA,EAAA,SAAA,GACA,IAAA,EAAA,EAAA,EAAA,EAAA,UAAA,MAAA,oBACA,EAAA,EAAA,GACA,WAAA,WACA,EAAA,mBACA,EAAA,OAAA,WAAA,MAAA,EAAA,OACA,EAAA,OAAA,qBAAA,KACA,GAAA,UAAA,IAAA,QACA,EAAA,YACA,IAEA,EAAA,KACA,EAAA,EAAA,EAAA,EAAA,OAAA,IACA,EAAA,GAGA,KAAA,WAAA,WAAA,WACA,EAAA,iBACA,EAAA,kBAEA,EAAA,gBAAA,KACA,EAAA,OAAA,IAAA,EAAA,KAAA,eACA,WAAA,WACA,EAAA,KAAA,YAAA,WACA,EAAA,KAAA,eAAA,GACA,EAAA,UAAA,MAAA,sBAEA,EAAA,EAAA,OAAA,KAAA,UAAA,MAAA,yBAEA,CAEA,KAAA,mBACA,IAAA,EAAA,EAAA,QAAA,SAAA,EACA,EAAA,IAAA,OAAA,cAAA,KACA,EAAA,EAAA,MAAA,GACA,GAAA,GACA,EAAA,EAAA,QAAA,EAAA,GAAA,IACA,KAAA,OAAA,UAAA,uBAAA,EAAA,SAAA,EAAA,eAGA,KAAA,OAAA,UAAA,MAAA,EAAA,OAEA,IAAA,EAAA,KAAA,OAAA,qBAAA,KACA,EAAA,EAAA,OAAA,GAAA,YACA,EAAA,EAAA,OAAA,GAAA,UAAA,IAAA,QACA,KAAA,WAEA,KAAA,eAAA,EAGA,KAAA,UAAA,OACA,IAAA,KAAA,UAAA,MAAA,kBACA,KAAA,UAGA,WAAA,WACA,EAAA,WACA,GAGA,KAAA,OAAA,gBAAA,eACA,WAAA,WACA,EAAA,OAAA,aAAA,cAAA,IACA,EAAA,GAAA,UAAA,IAAA,eACA,GACA,KAAA,mBAGA,KAAA,SAAA,EAAA,MAAA,MAAA,KAAA,OAEA,EAAA,UAAA,SAAA,WACA,IAAA,EAAA,KAAA,GAAA,UACA,EAAA,KAAA,GAAA,cACA,KAAA,WAAA,KAAA,KACA,KAAA,UAAA,KAAA,IACA,KAAA,WACA,KAAA,UAAA,eACA,KAAA,UAAA,cAAA,eACA,KAAA,UAAA,cAAA,UAAA,EAAA,EAAA,KAAA,UAAA,cAAA,eAGA,EAAA,UAAA,iBAAA,WACA,KAAA,iBAAA,KAAA,GAAA,aAAA,cACA,KAAA,GAAA,UAAA,IAAA,YACA,KAAA,UAAA,IAGA,EAAA,UAAA,iBAAA,WACA,KAAA,GAAA,aAAA,cACA,KAAA,OAAA,UAAA,GACA,KAAA,GAAA,gBAAA,cAGA,EAAA,UAAA,cAAA,YACA,KAAA,iBAAA,IAAA,KAAA,UAAA,MAAA,oBAAA,KAAA,iBAAA,KAAA,YAAA,UAAA,KAAA,eAAA,KAAA,KAAA,iBAEA,KAAA,OAAA,UAAA,EAAA,gBACA,KAAA,GAAA,UAAA,OAAA,YACA,KAAA,GAAA,aAAA,WAAA,MAEA,KAAA,YAAA,UAAA,KAAA,cAAA,KAAA,YAAA,UAAA,KAAA,YACA,KAAA,WAOA,EAAA,UAAA,QAAA,WACA,KAAA,GAAA,YAAA,KAAA,YACA,KAAA,UAAA,YAAA,KAAA,IACA,KAAA,cAOA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,gBACA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,mBAAA,oBAAA,GACA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,mBAAA,oBAAA,CACA,OAAA,KAAA,SAGA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,MAAA,EAAA,MACA,KAAA,SAAA,KAAA,iBAAA,EAAA,SACA,KAAA,gBAAA,EAAA,gBACA,EAAA,UAAA,QAAA,KAAA,KAAA,IAEA,EAAA,UAAA,iBAAA,WACA,IAAA,EAAA,KACA,KAAA,OAAA,KAAA,GAAA,qBAAA,QAAA,GACA,KAAA,gBAAA,KAAA,OACA,KAAA,iBAAA,MAAA,KAAA,SAGA,WAAA,WACA,EAAA,SAAA,CAAA,KAAA,EAAA,YACA,GAIA,KAAA,YAAA,UAAA,KAAA,WACA,KAAA,GAAA,UAAA,IAAA,eAIA,EAAA,UAAA,QAAA,WACA,aAAA,KAAA,YACA,KAAA,UAAA,KACA,KAAA,UAAA,KACA,KAAA,gBAAA,KACA,KAAA,kBACA,KAAA,GAAA,oBAAA,EAAA,QAAA,cAAA,SAAA,KAAA,iBAAA,GACA,KAAA,gBAAA,MAEA,EAAA,UAAA,QAAA,KAAA,OAGA,EAAA,UAAA,YAAA,WACA,MAAA,6BAAA,KAAA,gBAAA,QAAA,QAAA,8FAEA,EAAA,gBAAA,sFACA,EAzYA,CA0YA,EAAA,cACA,EAAA,aAAA,EAhZA,CAiZA,IAAA,EAAA,KAKA,IAokBA,EApkBA,EAAA,MAAA,KAAA,WAAA,WACA,IAAA,EAAA,SAAA,EAAA,GAIA,OAHA,EAAA,OAAA,gBACA,CAAA,UAAA,cAAA,OAAA,SAAA,EAAA,GAAA,EAAA,UAAA,IACA,SAAA,EAAA,GAAA,IAAA,IAAA,KAAA,EAAA,EAAA,eAAA,KAAA,EAAA,GAAA,EAAA,MACA,EAAA,IAEA,OAAA,SAAA,EAAA,GAEA,SAAA,IAAA,KAAA,YAAA,EADA,EAAA,EAAA,GAEA,EAAA,UAAA,OAAA,EAAA,OAAA,OAAA,IAAA,EAAA,UAAA,EAAA,UAAA,IAAA,IAVA,IAeA,SAAA,GAEA,EAAA,eAAA,CACA,iBAAA,uBAGA,IAAA,EAAA,SAAA,GAEA,SAAA,EAAA,GACA,IAAA,EAAA,EAAA,KAAA,KAAA,IAAA,KAqBA,OApBA,EAAA,YAAA,EACA,EAAA,aAAA,KAAA,EACA,EAAA,UAAA,GAEA,EAAA,mBAAA,EAAA,aAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,WAAA,YAAA,EAAA,oBAAA,GAEA,EAAA,wBAAA,EAAA,kBAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,WAAA,kBAAA,EAAA,yBAAA,GAEA,EAAA,yBAAA,EAAA,iBAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,gBAAA,WAAA,EAAA,0BAAA,GAEA,EAAA,4BAAA,EAAA,oBAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,gBAAA,cAAA,EAAA,6BAAA,GAEA,EAAA,iCAAA,EAAA,yBAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,sBAAA,UAAA,EAAA,kCAAA,GACA,EAAA,iCAAA,EAAA,yBAAA,KAAA,GACA,EAAA,YAAA,iBAAA,EAAA,sBAAA,QAAA,EAAA,kCAAA,GACA,EA+NA,OAtPA,EAAA,EAAA,GAyBA,EAAA,UAAA,oBAAA,SAAA,GACA,IAAA,EAAA,EAAA,OAAA,IACA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,KAAA,GAGA,KAAA,yBAEA,EAAA,UAAA,iBAAA,SAAA,GACA,IAAA,EAAA,EAAA,OAAA,IACA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,KAAA,IAEA,EAAA,UAAA,kBAAA,SAAA,GAEA,GADA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,KAAA,EAAA,QACA,KAAA,oBAAA,CACA,IAAA,EAAA,EAAA,OACA,KAAA,uBAAA,KAGA,EAAA,UAAA,SAAA,SAAA,GACA,KAAA,MAAA,GAMA,EAAA,UAAA,yBAAA,SAAA,GACA,KAAA,yBAMA,EAAA,UAAA,yBAAA,SAAA,GACA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,sBAAA,WACA,IAAA,EAAA,KAAA,gBACA,GAAA,EAAA,CACA,IAAA,EAAA,MAEA,IAAA,IAAA,EAAA,KAAA,UAAA,QAAA,GAAA,GAAA,EAAA,IAAA,CACA,IAAA,EAAA,KAAA,UAAA,GACA,GAAA,EAAA,MAAA,CACA,EAAA,EACA,OAIA,EAAA,WAEA,KAAA,yBAEA,EAAA,UAAA,sBAAA,WACA,GAAA,KAAA,aAAA,KAAA,YAAA,GAEA,KAAA,YAAA,GAAA,aACA,KAAA,MAAA,QAIA,EAAA,UAAA,aAAA,SAAA,GACA,IAAA,EAAA,KACA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,KAAA,EAAA,QACA,IAAA,EAAA,EAAA,OAAA,IACA,KAAA,kBACA,KAAA,gBAAA,UAAA,GACA,KAAA,oBAAA,KAAA,EAAA,OAAA,kBAGA,KAAA,qBAAA,GAIA,WAAA,WACA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,UACA,EAAA,UAAA,WAEA,EAAA,oBAAA,EAAA,gBAAA,EAAA,GACA,EAAA,aAEA,EAAA,sBAEA,EAAA,oBAAA,sBAAA,GACA,EAAA,sBAAA,EAAA,uBAEA,IAAA,KAAA,UAAA,OAAA,IAAA,IAQA,EAAA,UAAA,oBAAA,SAAA,GACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,UAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,UAAA,GACA,IAAA,EAAA,iBAAA,EAAA,KAAA,IAAA,EAAA,gBACA,OAAA,EAGA,OAAA,GAMA,EAAA,UAAA,qBAAA,SAAA,GAEA,IADA,IAAA,EACA,EAAA,EAAA,EAAA,KAAA,UAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,UAAA,GACA,IAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,CAEA,EAAA,EACA,OAIA,KAAA,oBAAA,4BACA,IAEA,KAAA,UAAA,OAAA,IACA,KAAA,UAAA,KAAA,UAAA,OAAA,GAAA,iBACA,KAAA,UAAA,MAAA,UAGA,KAAA,UAAA,MAAA,WAEA,KAAA,oBAAA,EAGA,KAAA,gBAAA,KAAA,UAAA,KAAA,UAAA,OAAA,GACA,KAAA,aAAA,KAAA,uBAGA,EAAA,UAAA,aAAA,SAAA,GACA,IAAA,EAAA,KACA,aAAA,KAAA,aACA,KAAA,YAAA,WAAA,WACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,eAAA,iBAAA,CACA,OAAA,KAEA,EAAA,QACA,IAMA,EAAA,UAAA,UAAA,SAAA,GAGA,IAFA,GAAA,EACA,GAAA,EAAA,EACA,KAAA,UAAA,OAAA,GACA,KAAA,UAAA,MAAA,WAQA,EAAA,UAAA,uBAAA,SAAA,GACA,KAAA,2BAAA,GACA,KAAA,2BAAA,MAAA,EAAA,MACA,SAAA,EAAA,IAAA,KACA,KAAA,2BAAA,KAAA,EAAA,WAAA,IAAA,8BAEA,YAAA,EAAA,IAAA,OACA,KAAA,2BAAA,KAAA,EAAA,WAAA,IAAA,0BAGA,KAAA,oBAAA,SAAA,KAAA,6BAMA,EAAA,UAAA,aAAA,WACA,OAAA,KAAA,WAEA,EAAA,UAAA,gBAAA,SAAA,EAAA,GACA,EAAA,WAAA,IAAA,EAAA,cAAA,aAAA,EAAA,QAAA,QAAA,GAEA,IADA,IAAA,EAAA,EAAA,EAAA,WAAA,iBAAA,eAAA,EAAA,WAAA,IAAA,cACA,EAAA,EAAA,EAAA,KAAA,UAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,UAAA,GACA,GAAA,EAAA,gBACA,EAAA,gBAAA,GAEA,GAAA,EAAA,iBACA,EAAA,gBAAA,KAIA,EAAA,UAAA,eAAA,SAAA,EAAA,EAAA,QACA,IAAA,IAAA,EAAA,MACA,IAAA,EAAA,KAAA,GAAA,cAAA,oBACA,EAAA,IAAA,EAAA,aAAA,CAEA,YAAA,KAAA,YACA,KAAA,KACA,IAAA,EACA,YAAA,KAAA,YACA,gBAAA,EACA,SAAA,EACA,MAAA,EAAA,EAAA,WAAA,iBAAA,eAAA,EAAA,WAAA,IAAA,cACA,UAAA,IAKA,OAHA,KAAA,UAAA,KAAA,GACA,KAAA,gBAAA,EACA,KAAA,aAAA,GACA,GAEA,EAAA,UAAA,YAAA,WACA,MAAA,0JAEA,EAAA,UAAA,QAAA,WACA,KAAA,YAAA,oBAAA,EAAA,WAAA,YAAA,KAAA,oBAAA,GACA,KAAA,mBAAA,KACA,KAAA,YAAA,oBAAA,EAAA,WAAA,kBAAA,KAAA,yBAAA,GACA,KAAA,wBAAA,KACA,KAAA,YAAA,oBAAA,EAAA,gBAAA,WAAA,KAAA,0BAAA,GACA,KAAA,yBAAA,KACA,EAAA,UAAA,QAAA,KAAA,OAEA,EAvPA,CAwPA,EAAA,cACA,EAAA,SAAA,EA/PA,CAgQA,IAAA,EAAA,KAKA,SAAA,GAEA,EAAA,WAAA,CACA,kBAAA,4BACA,mBAAA,6BAEA,YAAA,iBACA,YAAA,kBAGA,IAAA,EAAA,WACA,SAAA,EAAA,GACA,KAAA,SAAA,EACA,KAAA,SAAA,EACA,KAAA,KAAA,EACA,KAAA,WAAA,EACA,KAAA,UAAA,EAMA,KAAA,oBAAA,EACA,KAAA,YAAA,EAAA,YACA,KAAA,YAAA,EAAA,YACA,KAAA,iBAAA,EAAA,iBACA,KAAA,QAAA,EAAA,MACA,KAAA,wBAAA,KAAA,gBAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,gBAAA,OAAA,KAAA,yBAAA,GAgQA,OA9PA,OAAA,eAAA,EAAA,UAAA,aAAA,CACA,IAAA,WACA,OAAA,KAAA,KAAA,KAAA,OAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,gBAAA,SAAA,GACA,IAAA,EAAA,KACA,EAAA,mBAAA,eAAA,KAAA,UAAA,EAAA,KAAA,EAAA,QACA,IAAA,EAAA,EAAA,OACA,EAAA,MACA,EAAA,IAAA,KAAA,YACA,IAAA,EAAA,KAAA,WAAA,sBAAA,GACA,GAAA,EACA,GAAA,EACA,EAAA,WAEA,OAAA,EAAA,WAAA,oBAAA,mBAAA,EAAA,WAAA,qBACA,GAAA,GACA,GAAA,OACA,EAAA,WAAA,mBAAA,EAAA,WACA,GAAA,EACA,KACA,SAAA,GACA,GAAA,EACA,IACA,EAAA,UAAA,GACA,OAMA,EAAA,kBAAA,mBAAA,EAAA,mBACA,GAAA,GACA,GAAA,OAEA,EAAA,iBAAA,EAAA,WACA,GAAA,EACA,KACA,SAAA,GACA,GAAA,EACA,IACA,EAAA,UAAA,GACA,YAMA,GAEA,EAAA,mBAAA,eAAA,EAAA,WAAA,EAAA,WAAA,kBAAA,GAEA,EAAA,QACA,EAAA,EAAA,MAAA,cACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,WAAA,kBAAA,CACA,OAAA,KAGA,WAAA,WAAA,OAAA,EAAA,YAAA,EAAA,mBAAA,kBAAA,IAAA,KAGA,EAAA,mBAAA,eAAA,EAAA,WAAA,EAAA,WAAA,mBAAA,GAEA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,WAAA,mBAAA,CACA,OAAA,QAKA,KAEA,EAAA,UAAA,UAAA,SAAA,EAAA,QACA,IAAA,IAAA,GAAA,GAEA,KAAA,KADA,iBAAA,EACA,EAGA,KAAA,KAAA,QAAA,GAEA,KAAA,mBAAA,EACA,KAAA,mBAKA,KAAA,WAJA,KAAA,QAAA,KAAA,KAAA,KAAA,QAOA,EAAA,UAAA,8BAAA,SAAA,EAAA,GACA,KAAA,mBAEA,KAAA,iBAAA,IAIA,IAFA,IAAA,EAAA,EAEA,EAAA,EAAA,EAAA,KAAA,KAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,KAAA,GACA,GAAA,IAAA,EAEA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GAEA,GAAA,EAAA,MAAA,EAAA,IAAA,IAAA,cACA,GAAA,KAAA,GAAA,kBAAA,IAAA,EAAA,IAAA,cAAA,CAEA,IAAA,GAAA,EAAA,MAAA,EAAA,OAEA,GADA,EAAA,IAAA,eAAA,EAAA,KAEA,KAAA,iBAAA,GAAA,IAEA,GAAA,EAAA,QACA,OAAA,IAOA,OAAA,GAEA,EAAA,UAAA,MAAA,WACA,KAAA,SAAA,EACA,KAAA,yBAEA,EAAA,UAAA,KAAA,WACA,KAAA,SAAA,GAEA,EAAA,UAAA,SAAA,WACA,IAAA,KAAA,QAAA,CAEA,IAAA,GAAA,KAAA,UAAA,CAMA,IAHA,IAAA,GAAA,EAGA,EAAA,EAAA,EAAA,KAAA,KAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,KAAA,GACA,GAAA,IAAA,KAAA,YAAA,EAAA,iBAEA,EAAA,iBAAA,KAAA,WAAA,MAAA,CACA,GAAA,EACA,KAAA,KAAA,KAAA,KAAA,QAAA,KAAA,YACA,OAKA,IACA,KAAA,KAAA,KAAA,WAGA,KAAA,WAAA,EACA,KAAA,OACA,KAAA,0BAEA,EAAA,UAAA,aAAA,WACA,KAAA,OACA,KAAA,yBAEA,EAAA,UAAA,QAAA,WACA,OAAA,KAAA,MAEA,EAAA,UAAA,QAAA,SAAA,EAAA,GAGA,QAFA,IAAA,IAAA,GAAA,IAEA,IAAA,GAAA,EAAA,KAAA,KAAA,OAAA,CACA,KAAA,KAAA,MAAA,EAAA,GAAA,IACA,EAAA,KAAA,KAAA,MAAA,EAAA,KAAA,KAAA,QACA,KAAA,KAAA,KAAA,KAAA,MAAA,EAAA,GAAA,OAAA,GAAA,OAAA,QAGA,KAAA,KAAA,KAAA,KAAA,OAAA,GAGA,OADA,KAAA,QAAA,KAAA,MACA,KAAA,MAEA,EAAA,UAAA,QAAA,WACA,KAAA,YAAA,oBAAA,EAAA,gBAAA,OAAA,KAAA,yBAAA,GACA,KAAA,wBAAA,MAMA,EAAA,UAAA,QAAA,SAAA,GAKA,GAJA,KAAA,oBAAA,EACA,KAAA,UAAA,KAAA,KAAA,EACA,KAAA,KAAA,KAAA,KAAA,QAAA,GACA,KAAA,wBACA,KAAA,kBAAA,OAAA,KAAA,KAAA,kBAAA,OAAA,EAAA,CACA,KAAA,WAAA,EAEA,KAAA,YAAA,SAAA,UAAA,KAAA,KAAA,GAGA,IADA,IACA,EADA,KAAA,KAAA,QAAA,GACA,EAAA,EAAA,KAAA,KAAA,OAAA,IAAA,CACA,KAAA,KAAA,GACA,WAIA,EAAA,UAAA,QAAA,SAAA,GACA,KAAA,KAAA,EACA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,KAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,KAAA,GACA,EAAA,YAAA,KAAA,YACA,EAAA,YAAA,KAEA,KAAA,SAAA,KAAA,KAAA,QAEA,EAAA,UAAA,SAAA,WACA,KAAA,YAEA,EAAA,UAAA,sBAAA,WACA,KAAA,SAAA,IACA,KAAA,MAAA,KAAA,UAEA,KAAA,YAAA,cAAA,IAAA,EAAA,EAAA,WAAA,YAAA,KACA,KAAA,YAAA,iBAGA,KAAA,MAAA,KAAA,SACA,KAAA,WAAA,SAEA,KAAA,WAGA,KAAA,cAKA,EAAA,UAAA,SAAA,WACA,IAAA,EAAA,KACA,KAAA,UAEA,EAAA,mBAAA,eAAA,KAAA,WAAA,EAAA,WAAA,YAAA,KAAA,YACA,KAAA,WAAA,UACA,WAAA,WACA,EAAA,YAAA,cAAA,IAAA,EAAA,EAAA,WAAA,YAAA,CACA,OAAA,CACA,IAAA,EAAA,WACA,kBAAA,EAAA,mBACA,KAAA,EAAA,KACA,SAAA,EAAA,cAGA,KAEA,EAAA,UAAA,IACA,EAlRA,GAoRA,EAAA,YAAA,EA9RA,CA+RA,IAAA,EAAA,KAkBA,SAAA,GACA,IAAA,EAAA,WACA,SAAA,EAAA,GAuCA,GAtCA,KAAA,QAAA,QACA,KAAA,QAAA,oFACA,KAAA,eAAA,EACA,KAAA,wBAAA,EACA,KAAA,MAAA,QACA,KAAA,mBAAA,EACA,KAAA,kBAAA,EACA,OAAA,mBAAA,KACA,KAAA,QAAA,KAAA,QAAA,MAAA,aAAA,KAAA,KAAA,SACA,kBAAA,EAAA,cACA,EAAA,YAAA,EAAA,aACA,kBAAA,EAAA,kBACA,EAAA,gBAAA,EAAA,iBACA,kBAAA,EAAA,uBACA,KAAA,qBAAA,EAAA,sBACA,EAAA,aACA,QAAA,IAAA,iCAAA,KAAA,SACA,EAAA,aACA,QAAA,IAAA,iCAAA,GACA,OAAA,mBAAA,KAAA,UAAA,KAEA,EAAA,kBACA,KAAA,aAAA,EAAA,iBACA,KAAA,YAAA,KACA,KAAA,YAAA,GAAA,MAEA,EAAA,mBACA,KAAA,iBAAA,EAAA,kBACA,KAAA,cAAA,EAAA,oBAAA,SAAA,eAAA,mCACA,GAAA,EAAA,yBACA,KAAA,wBAAA,GAEA,iBAAA,EAAA,QACA,KAAA,MAAA,EAAA,OACA,MAAA,EAAA,sBACA,EAAA,iBAAA,aAAA,EAAA,oBACA,KAAA,iBAAA,EAAA,iBACA,KAAA,kBAAA,EAAA,mBACA,EAAA,OACA,MAAA,IAAA,MAAA,8DAOA,GANA,KAAA,OAAA,EAAA,OACA,KAAA,OAAA,aAAA,eAAA,KAAA,WACA,IAAA,EAAA,+BACA,EAAA,iBAAA,8BAAA,GAEA,KAAA,eAAA,EAAA,eACA,KAAA,gBAAA,iBAAA,KAAA,eAAA,CAEA,IAAA,EAAA,OAAA,KAAA,gBACA,KAAA,eAAA,EAEA,IAAA,KAAA,OAAA,aAAA,qBACA,EAAA,mBAAA,GACA,kBAAA,EAAA,oBACA,IAAA,EAAA,oBACA,EAAA,mBAAA,EACA,KAAA,OAAA,aAAA,kBAAA,MAEA,EAAA,kBAAA,IAAA,KAAA,OAAA,aAAA,2BACA,EAAA,iBAAA,kBAAA,GACA,KAAA,WAAA,IAAA,EAAA,WAAA,CACA,KAAA,EAAA,eACA,UAAA,EAAA,gBACA,UAAA,EAAA,UACA,WAAA,EAAA,WACA,QAAA,KAAA,UAEA,KAAA,QAAA,EAAA,QAAA,EAAA,QAAA,SAAA,KACA,KAAA,KAAA,EAAA,KACA,EAAA,kBAEA,EAAA,gBAAA,MAAA,EAAA,gBAAA,QACA,QAAA,KAAA,8DAAA,EAAA,iBACA,EAAA,gBAAA,OAGA,KAAA,mBAAA,EAAA,gBAEA,KAAA,UAAA,EAAA,QAAA,aAAA,EAAA,4BAAA,EAAA,sBAAA,IAEA,KAAA,OAmcA,OAjcA,OAAA,eAAA,EAAA,UAAA,WAAA,CACA,IAAA,WAIA,OAHA,KAAA,YACA,KAAA,WAAA,IAAA,MAAA,UAAA,YAEA,KAAA,WAEA,YAAA,EACA,cAAA,IAEA,OAAA,eAAA,EAAA,UAAA,cAAA,CACA,IAAA,WAIA,OAHA,KAAA,eACA,KAAA,aAAA,IAAA,EAAA,gBAAA,OAEA,KAAA,cAEA,YAAA,EACA,cAAA,IAEA,EAAA,UAAA,KAAA,WACA,OAAA,KAAA,OACA,IAAA,OACA,KAAA,MAAA,mCACA,MACA,IAAA,QACA,KAAA,MAAA,oCACA,MACA,IAAA,OACA,KAAA,MAAA,uCACA,MACA,IAAA,SACA,KAAA,MAAA,qCACA,MACA,IAAA,MACA,KAAA,MAAA,kCACA,MACA,QACA,KAAA,MAAA,8BAQA,GANA,KAAA,gBAEA,KAAA,QAAA,YAEA,KAAA,MAAA,KAAA,MAAA,QAAA,OAAA,KAEA,KAAA,uBAAA,CAEA,IAAA,EAAA,SAAA,MAAA,SAAA,qBAAA,QAAA,GACA,EAAA,SAAA,cAAA,QACA,EAAA,KAAA,QAAA,KAAA,MACA,EAAA,KAAA,WACA,EAAA,MAAA,MACA,EAAA,aAAA,MAAA,cACA,EAAA,aAAA,OAAA,GACA,EAAA,YAAA,GAGA,IAAA,EAAA,OAAA,iBAAA,KAAA,SAAA,iBAAA,YAAA,cAKA,IAJA,GAAA,CAAA,QAAA,WAAA,YAAA,QAAA,KACA,KAAA,QAAA,MAAA,SAAA,aAGA,KAAA,MAAA,GAAA,KAAA,KAAA,OAAA,CACA,KAAA,KAAA,GAEA,IADA,IAAA,EAAA,GAAA,MAAA,KAAA,KAAA,OAAA,iBAAA,qDAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,IAAA,WAAA,IAEA,KAAA,KAAA,KAAA,EAAA,IAAA,UAAA,KAQA,IAAA,EAAA,GACA,IAAA,EAAA,EAAA,EAAA,KAAA,KAAA,OAAA,IAAA,EACA,EAAA,KAAA,KAAA,KACA,EAAA,IAAA,WAAA,EAAA,aACA,EAAA,KAAA,GAGA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,KAAA,KAAA,OAAA,KAAA,KAAA,QAAA,GAAA,GAQA,OANA,EAAA,aAAA,KAAA,MAAA,GAAA,KAAA,KAAA,QACA,QAAA,KAAA,qDAGA,KAAA,KAAA,KAAA,eAAA,KAAA,MACA,KAAA,UACA,MASA,EAAA,UAAA,sBAAA,SAAA,EAAA,EAAA,GACA,EAAA,WAAA,IAAA,EAAA,EAAA,IACA,GAAA,CAAA,cAAA,cAAA,QAAA,IACA,KAAA,SAAA,gBAAA,eAAA,EAAA,IAGA,EAAA,UAAA,YAAA,SAAA,GAEA,QADA,IAAA,IAAA,GAAA,GACA,EAAA,CAEA,IADA,IAAA,EAAA,GACA,EAAA,EAAA,EAAA,KAAA,KAAA,OAAA,IAAA,CACA,IAAA,EAAA,KAAA,KAAA,GACA,EAAA,QACA,EAAA,EAAA,MAAA,OAAA,EAAA,YAAA,EAAA,OAEA,OAAA,EAIA,OADA,IAAA,SAAA,KAAA,SAIA,EAAA,UAAA,qBAAA,SAAA,GACA,KAAA,SAAA,gBAAA,EAAA,KAAA,IAEA,EAAA,UAAA,oBAAA,SAAA,GAEA,KAAA,SAAA,gBAAA,EAAA,KAAA,IAEA,EAAA,UAAA,KAAA,SAAA,QACA,IAAA,IAAA,EAAA,IACA,KAAA,YAAA,OACA,IAAA,GACA,KAAA,SAAA,gBAAA,EAAA,KAAA,GACA,KAAA,UAAA,iBAEA,EAAA,UAAA,MAAA,WACA,KAAA,UAAA,UAAA,EACA,EAAA,aACA,QAAA,IAAA,sBACA,KAAA,UAAA,SAAA,EACA,KAAA,YAAA,SAEA,EAAA,UAAA,OAAA,SAAA,GACA,MAAA,iBAAA,EACA,KAAA,KAAA,GAIA,MAGA,EAAA,UAAA,eAAA,SAAA,GAIA,IADA,IAAA,EAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,SAAA,EAAA,MAAA,YAAA,EAAA,OACA,EAAA,EAAA,QACA,EAAA,EAAA,MAAA,IACA,EAAA,EAAA,MAAA,KAAA,IAGA,GAAA,OAAA,KAAA,GAAA,OAAA,EACA,IAAA,IAAA,KAAA,EACA,GAAA,EAAA,GAAA,OAAA,EAAA,CAGA,IACA,EAAA,EAAA,GAAA,GAAA,WAAA,WACA,GAAA,aAAA,EAAA,QAAA,eAFA,SAAA,GAAA,OAAA,GAAA,aAAA,EAAA,QAAA,gBAAA,EAAA,aAAA,gBAIA,CADA,EAAA,EAAA,cAGA,EAAA,MAGA,IAAA,EAAA,IAAA,EAAA,SAAA,CACA,SAAA,EACA,SAAA,EAAA,KAGA,IAAA,EAAA,EAAA,EAAA,EAAA,GAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GAAA,GACA,GAAA,EACA,EAAA,OAAA,EAAA,QAAA,GAAA,EAAA,GAEA,EAAA,OAAA,EAAA,QAAA,GAAA,IAKA,OAAA,GAEA,EAAA,UAAA,QAAA,WAEA,KAAA,YAAA,IAAA,EAAA,YAAA,CACA,YAAA,KACA,iBAAA,KAAA,iBACA,YAAA,KAAA,YACA,KAAA,KAAA,OAEA,KAAA,GAAA,SAAA,cAAA,OACA,KAAA,GAAA,GAAA,sBACA,KAAA,GAAA,UAAA,sBACA,KAAA,gBAAA,KAAA,IACA,EAAA,mBACA,KAAA,GAAA,UAAA,IAAA,yCAEA,KAAA,mBACA,KAAA,QAAA,YAAA,KAAA,IAEA,KAAA,GAAA,MAAA,WAAA,SACA,IAAA,EAAA,SAAA,cAAA,OAcA,GAbA,EAAA,UAAA,4BACA,KAAA,GAAA,YAAA,GAEA,KAAA,SAAA,IAAA,EAAA,SAAA,CACA,YAAA,KAAA,YACA,YAAA,OAEA,EAAA,YAAA,KAAA,SAAA,IACA,KAAA,UAAA,IAAA,EAAA,cAAA,CACA,mBAAA,KAAA,mBACA,YAAA,KAAA,YACA,YAAA,OAEA,EAAA,gBAAA,CACA,IAAA,EAAA,IAAA,EAAA,YAAA,MACA,EAAA,YAAA,EAAA,IAEA,KAAA,SAAA,SAAA,KAAA,WACA,EAAA,YAAA,KAAA,UAAA,IACA,KAAA,4BAAA,KAAA,oBAAA,KAAA,MACA,KAAA,YAAA,iBAAA,EAAA,mBAAA,oBAAA,KAAA,6BAAA,GACA,KAAA,GAAA,UAAA,IAAA,6BACA,KAAA,kBACA,KAAA,YAAA,QACA,KAAA,MAAA,GAAA,KAAA,KAAA,SAEA,KAAA,UAAA,SAAA,IAOA,EAAA,UAAA,oBAAA,SAAA,GACA,IAAA,EAAA,EAAA,OACA,KAAA,YAAA,QAAA,IAEA,EAAA,UAAA,gBAAA,SAAA,GACA,UAAA,UAAA,QAAA,YAAA,GACA,EAAA,UAAA,IAAA,mBACA,OAAA,KAAA,UAAA,YACA,EAAA,UAAA,IAAA,iBAOA,EAAA,UAAA,QAAA,SAAA,EAAA,EAAA,QACA,IAAA,IAAA,GAAA,QACA,IAAA,IAAA,GAAA,GAEA,IADA,IAAA,EAAA,GACA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,GAAA,aAAA,EAAA,IAKA,IADA,IAAA,EAAA,EAAA,WAAA,cAAA,GACA,EAAA,EAAA,EAAA,EAAA,SAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,SAAA,GACA,GAAA,EAAA,IAAA,WAAA,IACA,EAAA,EAAA,IAAA,UAAA,IAEA,OACA,EAAA,KAAA,WAAA,EAAA,YAEA,EAAA,KAAA,OAIA,CACA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAA,cAAA,GAAA,EAAA,WAAA,SAAA,GACA,GAAA,EAAA,IAAA,WAAA,GAAA,CACA,IAAA,EAAA,EAAA,IAAA,UAAA,GACA,EAAA,KAAA,KAKA,EAAA,KAAA,eAAA,GAEA,KAAA,KAAA,KAAA,YAAA,QAAA,EAAA,EAAA,KAAA,YAAA,UAAA,EAAA,IASA,EAAA,UAAA,sBAAA,SAAA,EAAA,EAAA,QACA,IAAA,IAAA,EAAA,QACA,IAAA,IAAA,GAAA,QACA,IAAA,IAAA,GAAA,GACA,GACA,KAAA,SAAA,uBAAA,KAAA,UAAA,cAGA,IAAA,IAAA,EAAA,EAAA,EAAA,KAAA,KAAA,OAAA,IAAA,CACA,KAAA,KAAA,GACA,UAEA,KAAA,YAAA,UAAA,EAAA,IAMA,EAAA,UAAA,MAAA,WACA,KAAA,WACA,KAAA,UAAA,mBAEA,EAAA,UAAA,aAAA,WAGA,GAFA,KAAA,GAAA,UAAA,IAAA,QACA,KAAA,UAAA,QACA,KAAA,eAEA,KAAA,eAAA,UAEA,CAKA,IAAA,EAAA,KAAA,OAAA,cAAA,cAAA,UACA,EAAA,MAAA,QAAA,OACA,EAAA,KAAA,SACA,KAAA,OAAA,YAAA,GACA,EAAA,QACA,KAAA,OAAA,YAAA,GAEA,KAAA,WAGA,EAAA,UAAA,OAAA,WACA,KAAA,qBACA,KAAA,mBAAA,MAEA,KAAA,8BACA,KAAA,YAAA,oBAAA,EAAA,mBAAA,oBAAA,KAAA,6BAAA,GACA,KAAA,4BAAA,MAEA,KAAA,aACA,KAAA,YAAA,UACA,KAAA,WACA,KAAA,UAAA,UACA,KAAA,UACA,KAAA,SAAA,UACA,KAAA,WAAA,KACA,KAAA,YAAA,KACA,KAAA,UAAA,KACA,KAAA,SAAA,KACA,KAAA,QAAA,KACA,KAAA,OAAA,KACA,KAAA,KAAA,KACA,KAAA,eAAA,KACA,KAAA,GAAA,WAAA,YAAA,KAAA,IACA,KAAA,GAAA,KACA,OAAA,mBAAA,KAAA,UAAA,MAGA,EAAA,eAAA,SAAA,EAAA,EAAA,EAAA,GAIA,QADA,IAAA,IAAA,EAAA,MACA,EAAA,kBAAA,CACA,IAAA,EAAA,kCAAA,WAAA,EAAA,UAAA,QAAA,oCACA,EAAA,aACA,QAAA,IAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,YAAA,KAAA,oBAAA,EAAA,oBAAA,EAAA,oBAAA,GACA,IACA,EAAA,aACA,QAAA,IAAA,wBAAA,MAGA,EAAA,qBAAA,SAAA,GACA,IACA,EACA,EAFA,GAAA,KAAA,EAAA,OAGA,GAAA,EAAA,CACA,GAAA,iBAAA,EAAA,CAEA,GAAA,EACA,IAAA,EAAA,KAAA,MAAA,GACA,EAAA,EAAA,QACA,EAAA,EAAA,UAIA,EAAA,EAAA,QACA,EAAA,EAAA,KAGA,IAAA,EAAA,EAAA,WAAA,sBAAA,GACA,EAAA,OAAA,OAIA,EAAA,EAEA,OAAA,IAAA,EAAA,mBAAA,IAEA,EAAA,yBAAA,WACA,IAAA,EAAA,mBAAA,oBAAA,CAGA,IAAA,EAAA,SAAA,iBAAA,iBAEA,IAAA,EAAA,SACA,EAAA,SAAA,iBAAA,0BAEA,IAAA,EAAA,SAAA,iBAAA,iBACA,GAAA,GAAA,EAAA,OAAA,EAAA,CACA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CACA,IAAA,EAAA,EAAA,GACA,EAAA,EAAA,GACA,EAAA,mBAAA,qBAAA,CACA,OAAA,EACA,QAAA,IAGA,EAAA,mBAAA,qBAAA,KAGA,EAAA,mBAAA,EACA,EAAA,mBAAA,EACA,EAAA,aAAA,EACA,EAAA,iBAAA,EACA,EAAA,sBAAA,EACA,EAAA,qBAAA,EACA,EArhBA,GAuhBA,EAAA,mBAAA,EAxhBA,CAyhBA,IAAA,EAAA,KACA,YAAA,SAAA,WAEA,WAAA,WAAA,OAAA,EAAA,mBAAA,4BAAA,GAIA,OAAA,iBAAA,OAAA,WACA,EAAA,mBAAA,6BACA,GAIA,SAAA,GACA,IACA,OAKA,GAAA,mBAAA,SAAA,GAMA,IALA,EAAA,GAAA,IACA,SACA,EAAA,OAAA,KAAA,KAGA,EAAA,QAAA,CACA,IAAA,EAAA,SAAA,iBAAA,iBACA,EAAA,KACA,EAAA,QAAA,EAAA,IAIA,OAAA,IAAA,EAAA,mBAAA,IAjBA,MAAA,KAHA,GAyBA,SAAA,EAAA,GAEA,mBAAA,GAAA,EAAA,IACA,EAAA,CAAA,uBAAA,SAAA,GACA,OAAA,EAAA,mBAAA,EAAA,KAEA,iBAAA,QAAA,OAAA,QACA,OAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,wBAEA,EAAA,mBAAA,EAAA,EAAA,oBATA,CAWA,OAAA,SAAA,GAEA,OAAA;;;ACrvIO,IAAA,EAAA,UAAA,GAAA,SAAA,EAAA,GAAA,OAAA,EAAA,mBAAA,QAAA,iBAAA,OAAA,SAAA,SAAA,GAAA,cAAA,GAAA,SAAA,GAAA,OAAA,GAAA,mBAAA,QAAA,EAAA,cAAA,QAAA,IAAA,OAAA,UAAA,gBAAA,IAAA,GAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,QAAA,gBAAA,QAAA,YAAA,QAAA,OAAA,QAAA,OAAA,QAAA,OAAA,QAAA,OAAA,QAAA,OAAA,QAAA,OAAA,QAAA,KAAA,QAAA,UAAA,QAAA,eAAA,QAAA,QAAA,QAAA,QAAA,QAAA,UAAA,QAAA,cAAA,EAj6DA,IAAIA,EAA+B,oBAAZC,OAA2BA,OAA6B,oBAAZC,QAA2BA,OAAOC,cAA8B,IAAZC,EAA2BA,EAAiB,GAi6DnK,QAAA,SAAA,EA/5DA,IAAIC,EAAa,SAASJ,GAE/B,aACIK,IAAAA,EAAW,GACdC,EAAON,EAAOO,SACdC,EAAWR,EAAOS,iBAAmBT,EAAOS,kBAAoBT,EAC7DQ,GAAAA,EAASJ,UACLI,OAAAA,EAASJ,UAEbM,IAyBHC,EAAGC,EAAGC,EAAGC,EAASC,EANbC,EACHC,EApBCP,EAAa,SAASQ,GACpBP,IACWC,EADXD,EAAIO,EAAGC,MAAM,KAChBN,EAAIL,EACAI,IAAAA,EAAI,EAAGA,EAAID,EAAES,OAAQR,IACzBC,EAAEF,EAAEC,IAAMC,EAAIA,EAAEF,EAAEC,KAAO,GAEnBC,OAAAA,GAERQ,EAAKX,EAAW,iBAEhBY,EAAS,SAASX,GACbY,IAEHX,EAFGW,EAAI,GACPC,EAAIb,EAAES,OAEFR,IAAAA,EAAI,EAAGA,IAAMY,EAAGD,EAAEE,KAAKd,EAAEC,OACvBW,OAAAA,GAERG,EAAa,aACbC,GACKX,EAAWY,OAAOC,UAAUb,SAC/BC,EAAQD,EAASc,KAAK,IAChB,SAASC,GACRA,OAAO,MAAPA,IAAgBA,aAAeC,OAA0B,WAAhB,EAAOD,MAAuBA,EAAIN,MAAQT,EAASc,KAAKC,KAASd,KAInHgB,EAAa,GAmCbC,EAAa,SAAbA,EAAsBhB,EAAIiB,EAAcC,EAAMjC,GACxCkC,KAAAA,GAAMJ,EAAWf,GAAOe,EAAWf,GAAImB,GAAK,GACjDJ,EAAWf,GAAM,KACZoB,KAAAA,QAAU,KACVF,KAAAA,KAAOA,EACRG,IAAAA,EAAW,GACVC,KAAAA,MAAQ,SAASC,GAId,IAHH7B,IAEH8B,EAAK/B,EAAGgC,EAAGC,EAFRhC,EAAIuB,EAAaf,OACpByB,EAAUjC,IAEFA,GAAK,IACR8B,EAAMT,EAAWE,EAAavB,KAAO,IAAIsB,EAAWC,EAAavB,GAAI,KAAK0B,SAC9EC,EAAS3B,GAAK8B,EAAIJ,QAClBO,KACUJ,GACVC,EAAIL,GAAGZ,KAAK,MAGVoB,GAAY,IAAZA,GAAiBT,EAuBfxB,IArBL+B,GADAhC,GAAK,iBAAmBO,GAAIC,MAAM,MAC5B2B,MACNF,EAAKlC,EAAWC,EAAEoC,KAAK,MAAMJ,GAAK,KAAKL,QAAUF,EAAKY,MAAMZ,EAAMG,GAG9DpC,IACHK,EAASmC,GAAKtC,EAASsC,GAAKC,GAgBxBhC,EAAI,EAAGA,EAAI,KAAKyB,GAAGjB,OAAQR,IAC1ByB,KAAAA,GAAGzB,GAAG4B,SAITA,KAAAA,OAAM,IAIZS,EAAYjD,EAAOiD,UAAY,SAAS/B,EAAIiB,EAAcC,EAAMjC,GACxD,OAAA,IAAI+B,EAAWhB,EAAIiB,EAAcC,EAAMjC,IAI/C+C,EAAS7B,EAAG6B,OAAS,SAAShC,EAAIkB,EAAMjC,GAGhCiC,OAFPA,EAAOA,GAAQ,aACfa,EAAU/B,EAAI,GAAI,WAAmBkB,OAAAA,GAASjC,GACvCiC,GAGTa,EAAUE,QAAU3C,EAShB4C,IAAAA,EAAc,CAAC,EAAG,EAAG,EAAG,GAC3BC,EAAOH,EAAO,cAAe,SAASd,EAAMkB,EAAaC,EAAMC,GACzDC,KAAAA,MAAQrB,EACRsB,KAAAA,MAAQH,GAAQ,EAChBI,KAAAA,OAASH,GAAS,EAClBI,KAAAA,QAAUN,EAAcF,EAAYS,OAAOP,GAAeF,IAC7D,GACHU,EAAWT,EAAKU,IAAM,GACtBC,EAAWX,EAAKY,SAAW,SAASC,EAAMC,EAAOC,EAAOC,GAKhD,IAJHC,IAGHC,EAAGC,EAAMC,EAAGlB,EAHTe,EAAKH,EAAMhD,MAAM,KACpBP,EAAI0D,EAAGlD,OACPsD,GAAMN,GAAS,4BAA4BjD,MAAM,OAEzCP,GAAK,GAIN,IAHP4D,EAAOF,EAAG1D,GACV2D,EAAIF,EAASnB,EAAO,UAAUsB,EAAM,MAAM,GAAQnD,EAAGsD,OAAOH,IAAS,GACrEC,EAAIC,EAAGtD,SACEqD,GAAK,GACblB,EAAOmB,EAAGD,GACVX,EAASU,EAAO,IAAMjB,GAAQO,EAASP,EAAOiB,GAAQD,EAAEhB,GAAQW,EAAKU,SAAWV,EAAOA,EAAKX,IAAS,IAAIW,GA8BtG,KAzBPrD,EAAIwC,EAAKxB,WACPgD,UAAW,EACbhE,EAAE+D,SAAW,SAAS/D,GACjB,GAAA,KAAK4C,MAED,OADFG,KAAAA,QAAQ,GAAK/C,EACX,KAAK4C,MAAMT,MAAM,KAAM,KAAKY,SAEhCkB,IAAAA,EAAI,KAAKpB,MACZqB,EAAK,KAAKpB,OACVqB,EAAW,IAANF,EAAW,EAAIjE,EAAW,IAANiE,EAAWjE,EAAKA,EAAI,GAAW,EAAJA,EAAkB,GAAT,EAAIA,GAU1DiE,OATG,IAAPC,EACHC,GAAKA,EACY,IAAPD,EACVC,GAAKA,EAAIA,EACQ,IAAPD,EACVC,GAAKA,EAAIA,EAAIA,EACI,IAAPD,IACVC,GAAKA,EAAIA,EAAIA,EAAIA,GAEJ,IAANF,EAAW,EAAIE,EAAW,IAANF,EAAWE,EAAKnE,EAAI,GAAOmE,EAAI,EAAI,EAAKA,EAAI,GAKzEpE,GADAD,EAAI,CAAC,SAAS,OAAO,QAAQ,QAAQ,iBAC/BS,SACGR,GAAK,GACbC,EAAIF,EAAEC,GAAG,SAASA,EAClBoD,EAAS,IAAIX,EAAK,KAAK,KAAK,EAAEzC,GAAIC,EAAG,WAAW,GAChDmD,EAAS,IAAIX,EAAK,KAAK,KAAK,EAAEzC,GAAIC,EAAG,UAAmB,IAAND,EAAW,YAAc,KAC3EoD,EAAS,IAAIX,EAAK,KAAK,KAAK,EAAEzC,GAAIC,EAAG,aAEtCiD,EAASmB,OAAS5D,EAAGsD,OAAOO,OAAOC,OACnCrB,EAASsB,MAAQ/D,EAAGsD,OAAOU,KAAKC,UAQ5BC,IAAAA,EAAkBrC,EAAO,yBAA0B,SAASsC,GAC1DC,KAAAA,WAAa,GACbC,KAAAA,aAAeF,GAAU,QAE/B3E,EAAI0E,EAAgB1D,WAElB8D,iBAAmB,SAASpC,EAAMqC,EAAUC,EAAOC,EAAUC,GAC9DA,EAAWA,GAAY,EACnBC,IAEHC,EAAUrF,EAFPoF,EAAO,KAAKP,WAAWlC,GAC1B2C,EAAQ,EASF,IAPH,OAASpF,GAAYC,GACxBD,EAAQqF,OAEG,MAARH,IACEP,KAAAA,WAAWlC,GAAQyC,EAAO,IAEhCpF,EAAIoF,EAAK5E,SACAR,GAAK,IACbqF,EAAWD,EAAKpF,IACHwF,IAAMR,GAAYK,EAASI,IAAMR,EAC7CG,EAAKM,OAAO1F,EAAG,GACK,IAAVsF,GAAeD,EAASM,GAAKR,IACvCG,EAAQtF,EAAI,GAGdoF,EAAKM,OAAOJ,EAAO,EAAG,CAACE,EAAER,EAAUS,EAAER,EAAOW,GAAGV,EAAUS,GAAGR,KAG7DlF,EAAE4F,oBAAsB,SAASlD,EAAMqC,GAClCI,IAA8BpF,EAA9BoF,EAAO,KAAKP,WAAWlC,GACvByC,GAAAA,EAEI,IADPpF,EAAIoF,EAAK5E,SACAR,GAAK,GACToF,GAAAA,EAAKpF,GAAGwF,IAAMR,EAEjB,YADAI,EAAKM,OAAO1F,EAAG,IAOnBC,EAAE6F,cAAgB,SAASnD,GACtByC,IACHpF,EAAGkE,EAAGmB,EADHD,EAAO,KAAKP,WAAWlC,GAEvByC,GAAAA,EAMI,KALPpF,EAAIoF,EAAK5E,QACD,IACP4E,EAAOA,EAAKW,MAAM,IAEnB7B,EAAI,KAAKY,eACA9E,GAAK,IACbqF,EAAWD,EAAKpF,MAEXqF,EAASO,GACZP,EAASG,EAAEtE,KAAKmE,EAASI,GAAKvB,EAAG,CAACvB,KAAKA,EAAMiC,OAAOV,IAEpDmB,EAASG,EAAEtE,KAAKmE,EAASI,GAAKvB,KAa9B8B,IAAAA,EAAgB5G,EAAO6G,sBAC3BC,EAAmB9G,EAAO+G,qBAC1BC,EAAWC,KAAKC,KAAO,WAAmB,OAAA,IAAID,MAAOE,WACrDC,EAAcJ,IAKR,IADPpG,GADAD,EAAI,CAAC,KAAK,MAAM,SAAS,MACnBS,SACGR,GAAK,IAAMgG,GACnBA,EAAgB5G,EAAOW,EAAEC,GAAK,yBAC9BkG,EAAmB9G,EAAOW,EAAEC,GAAK,yBAA2BZ,EAAOW,EAAEC,GAAK,+BAG3EsC,EAAO,SAAU,SAASmE,EAAKC,GAC1BC,IAMHC,EAAMC,EAAMC,EAAKC,EAAMC,EANpBL,EAAQ,KACXM,EAAab,IACbc,KAAsB,IAAXR,IAAoBV,IAAiB,OAChDmB,EAAgB,IAChBC,EAAe,GAGfC,EAAQ,SAARA,EAAiBC,GACZC,IACHC,EAASC,EADNF,EAAUnB,IAAaI,EAEvBe,EAAUJ,IACbF,GAAcM,EAAUH,GAEzBZ,GAAee,EACfZ,EAAMe,MAAQlB,EAAcS,GAAc,IAC1CO,EAAUb,EAAMe,KAAOV,IAClBJ,GAAQY,EAAU,IAAgB,IAAXF,KAC3BX,EAAMgB,QACNX,GAAaQ,GAAWA,GAAWT,EAAO,KAAQA,EAAOS,GACzDC,GAAW,IAEG,IAAXH,IACHR,EAAMD,EAAKQ,IAERI,GACHd,EAAMb,cApBI,SAwBbnB,EAAgBzD,KAAKyF,GACrBA,EAAMe,KAAOf,EAAMgB,MAAQ,EAC3BhB,EAAMiB,KAAO,WACZP,GAAM,IAGPV,EAAMkB,aAAe,SAASC,EAAWC,GACpC,IAACC,UAAUxH,OACN2G,OAAAA,EAAgB,IAEzBA,EAAgBW,GAAc,IAC9BV,EAAea,KAAKC,IAAIH,EAAaZ,EAAe,IAGrDR,EAAMwB,MAAQ,WACF,MAAPrB,IAGCI,GAAYhB,EAGhBA,EAAiBY,GAFjBsB,aAAatB,GAIdD,EAAO/F,EACPgG,EAAM,KACFH,IAAUzG,IACbC,GAAgB,KAIlBwG,EAAMpB,KAAO,SAAS8C,GACT,OAARvB,EACHH,EAAMwB,QACIE,EACVpB,IAAeT,GAAeA,EAAcJ,KAClCO,EAAMgB,MAAQ,KACxBnB,EAAcJ,IAAae,EAAgB,GAE5CN,EAAiB,IAATD,EAAc9F,EAAeoG,GAAYlB,EAAoGA,EAAnF,SAASsC,GAAYC,OAAAA,WAAWD,EAA+B,KAA1BtB,EAAYL,EAAMe,MAAe,EAAK,IACzIf,IAAUzG,IACbC,GAAgB,GAEjBkH,EAAM,IAGPV,EAAMF,IAAM,SAAS+B,GAChB,IAACR,UAAUxH,OACPoG,OAAAA,EAGRG,EAAO,IADPH,EAAO4B,IACa,IACpBxB,EAAY,KAAKU,KAAOX,EACxBJ,EAAMpB,QAGPoB,EAAMD,OAAS,SAAS8B,GACnB,IAACR,UAAUxH,OACP0G,OAAAA,EAERP,EAAMwB,QACNjB,EAAUsB,EACV7B,EAAMF,IAAIG,IAEXD,EAAMF,IAAIA,GAGV8B,WAAW,WACM,SAAZrB,GAAsBP,EAAMgB,MAAQ,GAAsC,YAAhCjI,GAAQ,IAAI+I,iBACzD9B,EAAMD,QAAO,IAEZ,SAGJzG,EAAIQ,EAAGiI,OAAOzH,UAAY,IAAIR,EAAGkI,OAAOhE,iBACtCiE,YAAcnI,EAAGiI,OAQfG,IAAAA,EAAYvG,EAAO,iBAAkB,SAASwG,EAAUC,GAStD,GARCA,KAAAA,KAAOA,EAAOA,GAAQ,GACtBC,KAAAA,UAAY,KAAKC,eAAiBH,GAAY,EAC9CI,KAAAA,OAASC,OAAOJ,EAAKK,QAAU,EAC/BC,KAAAA,WAAa,EACbC,KAAAA,UAAYP,EAAKQ,gBACjBC,KAAAA,KAAOT,EAAKS,KACZC,KAAAA,YAAcV,EAAKW,SAEnBC,EAAD,CAGCxJ,GACJD,EAAQqF,OAGLqE,IAAAA,EAAK,KAAKb,KAAKc,UAAYC,EAAsBH,EACrDC,EAAGG,IAAI,KAAMH,EAAGI,OAEZ,KAAKjB,KAAKkB,QACRA,KAAAA,QAAO,MAIf/J,EAAU2I,EAAUqB,OAAS,IAAIzJ,EAAGiI,QACpCzI,EAAI4I,EAAU5H,WACZkJ,OAASlK,EAAEmK,IAAMnK,EAAEoK,SAAWpK,EAAEqK,SAAU,EAC5CrK,EAAEsK,WAAatK,EAAE+J,MAAQ,EACzB/J,EAAEuK,cAAgB,EAClBvK,EAAEwK,MAAQxK,EAAEyK,MAAQzK,EAAE0K,UAAY1K,EAAE2K,UAAY3K,EAAE4K,SAAW,KAC7D5K,EAAEqK,SAAU,GAIQ,SAAhBQ,IACE3K,GAAiBiG,IAAaI,EAAc,MAA0C,YAAhC9G,GAAQ,IAAI+I,kBAAiCvI,EAAQ2H,iBAC9G3H,EAAQqF,OAELrB,IAAAA,EAAIqE,WAAWuC,EAAe,KAC9B5G,EAAE6G,OAEL7G,EAAE6G,QAGLD,GAGA7K,EAAE+K,KAAO,SAASC,EAAMC,GAIhB,OAHK,MAARD,GACEE,KAAAA,KAAKF,EAAMC,GAEV,KAAKxB,UAAS,GAAOO,QAAO,IAGpChK,EAAEmL,MAAQ,SAASC,EAAQH,GAInB,OAHO,MAAVG,GACEF,KAAAA,KAAKE,EAAQH,GAEZ,KAAKjB,QAAO,IAGpBhK,EAAEqL,OAAS,SAASL,EAAMC,GAIlB,OAHK,MAARD,GACEE,KAAAA,KAAKF,EAAMC,GAEV,KAAKjB,QAAO,IAGpBhK,EAAEkL,KAAO,SAASzD,EAAMwD,GAChB,OAAA,KAAKK,UAAUpC,OAAOzB,IAA0B,IAAnBwD,IAGrCjL,EAAEuL,QAAU,SAASC,EAAcP,GAC3B,OAAA,KAAKxB,UAAS,GAAOO,QAAO,GAAOsB,UAAUE,GAAgB,KAAKvC,OAAS,GAAuB,IAAnBgC,GAA2B,IAGlHjL,EAAEyL,QAAU,SAAST,EAAMC,GAInB,OAHK,MAARD,GACEE,KAAAA,KAAMF,GAAQ,KAAKU,gBAAkBT,GAEpC,KAAKxB,UAAS,GAAMO,QAAO,IAGnChK,EAAE2L,OAAS,SAASlE,EAAMwD,EAAgBW,KAI1C5L,EAAE6L,WAAa,WAOP,OANF9B,KAAAA,MAAQ,KAAKO,WAAa,EAC1BF,KAAAA,SAAW,KAAKD,KAAM,EACtBI,KAAAA,cAAgB,GACjB,KAAKJ,KAAQ,KAAKS,UAChBkB,KAAAA,UAAS,GAER,MAGR9L,EAAE+L,SAAW,WACRpC,IAEHqC,EAFGrC,EAAK,KAAKgB,UACbsB,EAAY,KAAKjF,WAEV,OAAC2C,IAAQ,KAAKQ,MAAQ,KAAKE,SAAWV,EAAGoC,aAAeC,EAAUrC,EAAGqC,SAAQ,KAAUC,GAAaD,EAAUC,EAAY,KAAKP,gBAAkB,KAAKtC,WAlenJ,MAqeZpJ,EAAE8L,SAAW,SAAUI,EAASC,GAaxB,OAZFjM,GACJD,EAAQqF,OAEJ6E,KAAAA,KAAO+B,EACP7C,KAAAA,QAAU,KAAK0C,YACG,IAAnBI,IACCD,IAAY,KAAKtB,SACfD,KAAAA,UAAUb,IAAI,KAAM,KAAK9C,WAAa,KAAKiC,SACrCiD,GAAW,KAAKtB,UACtBD,KAAAA,UAAUyB,QAAQ,MAAM,KAGxB,GAIRpM,EAAEqM,MAAQ,SAASvD,EAAMnE,GACjB,OAAA,KAAKmH,UAAS,GAAO,IAG7B9L,EAAEsM,KAAO,SAASxD,EAAMnE,GAEhB,OADF0H,KAAAA,MAAMvD,EAAMnE,GACV,MAGR3E,EAAEuM,SAAW,SAASC,GAEdC,IADHA,IAAAA,EAAQD,EAAc,KAAO,KAAK5B,SAC/B6B,GACNA,EAAMvC,QAAS,EACfuC,EAAQA,EAAM7B,SAER,OAAA,MAGR5K,EAAE0M,kBAAoB,SAASC,GAGvB,IAFH5M,IAAAA,EAAI4M,EAAOpM,OACdqM,EAAOD,EAAO3J,WACNjD,GAAK,GACK,WAAd4M,EAAO5M,KACV6M,EAAK7M,GAAK,MAGL6M,OAAAA,GAGR5M,EAAE6M,UAAY,SAASnK,GAClBoK,IAAAA,EAAI,KAAKhE,KACZ/D,EAAW+H,EAAEpK,GACbiK,EAASG,EAAEpK,EAAO,UAClBsC,EAAQ8H,EAAEpK,EAAO,UAAYoK,EAAEC,eAAiB,KAEzCpM,OADHgM,EAASA,EAAOpM,OAAS,GAExB,KAAA,EAAGwE,EAAS9D,KAAK+D,GAAQ,MACzB,KAAA,EAAGD,EAAS9D,KAAK+D,EAAO2H,EAAO,IAAK,MACpC,KAAA,EAAG5H,EAAS9D,KAAK+D,EAAO2H,EAAO,GAAIA,EAAO,IAAK,MACpD,QAAS5H,EAAS5C,MAAM6C,EAAO2H,KAMjC3M,EAAEgN,cAAgB,SAAStK,EAAMqC,EAAU4H,EAAQ3H,GAC9C,GAA6B,QAA5BtC,GAAQ,IAAIuK,OAAO,EAAE,GAAa,CAClCH,IAAAA,EAAI,KAAKhE,KACTf,GAAqB,IAArBA,UAAUxH,OACNuM,OAAAA,EAAEpK,GAEM,MAAZqC,SACI+H,EAAEpK,IAEToK,EAAEpK,GAAQqC,EACV+H,EAAEpK,EAAO,UAAa5B,EAAS6L,KAAkD,IAAvCA,EAAOzK,KAAK,IAAIgL,QAAQ,UAAoB,KAAKR,kBAAkBC,GAAUA,EACvHG,EAAEpK,EAAO,SAAWsC,GAER,aAATtC,IACEgI,KAAAA,UAAY3F,GAGZ,OAAA,MAGR/E,EAAEmJ,MAAQ,SAASZ,GACd,OAACR,UAAUxH,QAGX,KAAKoK,UAAUwC,mBACblB,KAAAA,UAAW,KAAKjF,WAAauB,EAAQ,KAAKU,QAE3CA,KAAAA,OAASV,EACP,MANC,KAAKU,QASdjJ,EAAE6I,SAAW,SAASN,GACjB,OAACR,UAAUxH,QAIVwI,KAAAA,UAAY,KAAKC,eAAiBT,EAClCgE,KAAAA,UAAS,GACV,KAAK5B,UAAUwC,mBAAuB,KAAKpD,MAAQ,GAAO,KAAKA,MAAQ,KAAKhB,WAAyB,IAAVR,GACzF+C,KAAAA,UAAU,KAAKhB,YAAc/B,EAAQ,KAAKQ,YAAY,GAErD,OARDmB,KAAAA,QAAS,EACP,KAAKnB,YAUd/I,EAAE0L,cAAgB,SAASnD,GAElB,OADH2B,KAAAA,QAAS,EACLnC,UAAUxH,OAAgC,KAAKsI,SAASN,GAApC,KAAKS,gBAGnChJ,EAAEyH,KAAO,SAASc,EAAO0C,GACpB,OAAClD,UAAUxH,QAGX,KAAK2J,QACHwB,KAAAA,gBAEC,KAAKJ,UAAW/C,EAAQ,KAAKQ,UAAa,KAAKA,UAAYR,EAAO0C,IALjE,KAAKlB,OAQd/J,EAAEsL,UAAY,SAAS7D,EAAMwD,EAAgBmC,GAIxC,GAHClN,GACJD,EAAQqF,QAEJyC,UAAUxH,OACP,OAAA,KAAK+J,WAET,GAAA,KAAKK,UAAW,CAIf,GAHAlD,EAAO,IAAM2F,IAChB3F,GAAQ,KAAKiE,iBAEV,KAAKf,UAAUwC,kBAAmB,CACjC,KAAKjD,QACHwB,KAAAA,gBAEFA,IAAAA,EAAgB,KAAK1C,eACxBW,EAAK,KAAKgB,UASPhB,GARAlC,EAAOiE,IAAkB0B,IAC5B3F,EAAOiE,GAEH1E,KAAAA,YAAc,KAAKqD,QAAU,KAAKgD,WAAa1D,EAAGI,QAAY,KAAKP,UAAmBkC,EAAgBjE,EAAvBA,GAA+B,KAAK2B,WACnHO,EAAGO,QACFqC,KAAAA,UAAS,GAGX5C,EAAGgB,UACChB,KAAAA,EAAGgB,WACLhB,EAAGgB,UAAUZ,SAAWJ,EAAG3C,WAAa2C,EAAGW,YAAcX,EAAGP,YAC/DO,EAAG2B,UAAU3B,EAAGW,YAAY,GAE7BX,EAAKA,EAAGgB,UAIP,KAAKR,KACH2B,KAAAA,UAAS,GAAM,GAEjB,KAAKxB,aAAe7C,GAA2B,IAAnB,KAAKsB,YAChCuE,EAAY/M,QACfgN,IAEI5B,KAAAA,OAAOlE,EAAMwD,GAAgB,GAC9BqC,EAAY/M,QACfgN,KAII,OAAA,MAGRvN,EAAEwN,SAAWxN,EAAEyN,cAAgB,SAASlF,EAAO0C,GAC1CpC,IAAAA,EAAW,KAAKA,WACZ,OAACd,UAAUxH,OAA4D,KAAK+K,UAAUzC,EAAWN,EAAO0C,GAAlFpC,EAAW,KAAKkB,MAAQlB,EAAW,KAAK6E,OAGvE1N,EAAEiM,UAAY,SAAS1D,GAClB,OAACR,UAAUxH,QAGXgI,IAAU,KAAKvB,aACbA,KAAAA,WAAauB,EACd,KAAKqC,UAAc,KAAKA,SAAS+C,eAC/B/C,KAAAA,SAASd,IAAI,KAAMvB,EAAQ,KAAKU,SAGhC,MARC,KAAKjC,YAWdhH,EAAE4N,QAAU,SAASC,GACb,OAAA,KAAK7G,YAAiC,GAAlB6G,EAA2B,KAAKnC,gBAAkB,KAAK7C,YAAc,KAAKO,YAGtGpJ,EAAE8N,UAAY,SAASvF,GAClB,IAACR,UAAUxH,OACP,OAAA,KAAK6I,WAET2E,IAAAA,EAAW9J,EASRA,IARPsE,EAAQA,GA3qBG,KA4qBP,KAAKoC,WAAa,KAAKA,UAAUwC,oBAEpClJ,GADA8J,EAAY,KAAKV,aACe,IAAdU,EAAmBA,EAAY,KAAKpD,UAAUW,YAC3DtE,KAAAA,WAAa/C,GAAMA,EAAI,KAAK+C,YAAc,KAAKoC,WAAab,GAE7Da,KAAAA,WAAab,EAClBtE,EAAI,KAAK2G,SACF3G,GAAKA,EAAE2G,UACb3G,EAAEiG,QAAS,EACXjG,EAAEyH,gBACFzH,EAAIA,EAAE2G,SAEA,OAAA,MAGR5K,EAAEyJ,SAAW,SAASlB,GACjB,OAACR,UAAUxH,QAGXgI,GAAS,KAAKiB,YACZA,KAAAA,UAAYjB,EACZ+C,KAAAA,UAAY,KAAKX,YAAc,KAAKA,UAAUwC,kBAAqB,KAAKzB,gBAAkB,KAAKpB,WAAa,KAAKA,YAAa,IAE7H,MANC,KAAKd,WASdxJ,EAAEgK,OAAS,SAASzB,GACf,IAACR,UAAUxH,OACP,OAAA,KAAK8J,QAETV,IACHqE,EAAK1G,EADFqC,EAAK,KAAKgB,UAuBP,OArBHpC,GAAS,KAAK8B,SAAaV,IACzBzJ,GAAkBqI,GACtBtI,EAAQqF,OAGTgC,GADA0G,EAAMrE,EAAGqC,WACO,KAAKqB,YAChB9E,GAASoB,EAAGwD,oBACXnG,KAAAA,YAAcM,EACdiF,KAAAA,UAAS,IAEVc,KAAAA,WAAa9E,EAAQyF,EAAM,KAC3B3D,KAAAA,QAAU9B,EACVc,KAAAA,QAAU,KAAK0C,YACfxD,GAAqB,IAAZjB,GAAiB,KAAK8C,UAAY,KAAKvB,aACpDmF,EAAMrE,EAAGwD,kBAAoB,KAAK7C,YAAc0D,EAAM,KAAKhH,YAAc,KAAKoC,WACzEuC,KAAAA,OAAOqC,EAAMA,IAAQ,KAAK1D,YAAa,KAG1C,KAAKH,MAAQ5B,GACXuD,KAAAA,UAAS,GAAM,GAEd,MASJmC,IAAAA,EAAiB5L,EAAO,sBAAuB,SAASyG,GAC3DF,EAAU3H,KAAK,KAAM,EAAG6H,GACnBoF,KAAAA,mBAAqB,KAAKf,mBAAoB,KAGpDnN,EAAIiO,EAAejN,UAAY,IAAI4H,GACjCD,YAAcsF,EAChBjO,EAAEsM,OAAOnC,KAAM,EACfnK,EAAEmO,OAASnO,EAAEyK,MAAQzK,EAAEoO,QAAU,KACjCpO,EAAE2N,eAAgB,EAElB3N,EAAE8J,IAAM9J,EAAEqO,OAAS,SAASC,EAAOC,EAAUC,EAAOC,GAC/CC,IAAAA,EAAWC,EAaX,GAZJL,EAAMtH,WAAakC,OAAOqF,GAAY,GAAKD,EAAMrF,OAC7CqF,EAAMjE,SAAa,OAASiE,EAAM3D,YACrC2D,EAAMjB,WAAa,KAAKrB,WAAasC,EAAM3D,UAAUqB,UAAYsC,EAAMjB,aAEpEiB,EAAM1D,UACT0D,EAAM1D,SAASwB,QAAQkC,GAAO,GAE/BA,EAAM1D,SAAW0D,EAAM3D,UAAY,KAC/B2D,EAAMnE,KACTmE,EAAMxC,UAAS,GAAM,GAEtB4C,EAAY,KAAKjE,MACb,KAAKkD,cAEDe,IADPC,EAAKL,EAAMtH,WACJ0H,GAAaA,EAAU1H,WAAa2H,GAC1CD,EAAYA,EAAUE,MAoBjB,OAjBHF,GACHJ,EAAM9D,MAAQkE,EAAUlE,MACxBkE,EAAUlE,MAAQ8D,IAElBA,EAAM9D,MAAQ,KAAK2D,OACdA,KAAAA,OAASG,GAEXA,EAAM9D,MACT8D,EAAM9D,MAAMoE,MAAQN,EAEf7D,KAAAA,MAAQ6D,EAEdA,EAAMM,MAAQF,EACTN,KAAAA,QAAUE,EACX,KAAK3D,WACH4B,KAAAA,UAAS,GAER,MAGRvM,EAAEoM,QAAU,SAASK,EAAOoC,GAyBpB,OAxBHpC,EAAM7B,WAAa,OACjBiE,GACJpC,EAAMX,UAAS,GAAO,GAGnBW,EAAMmC,MACTnC,EAAMmC,MAAMpE,MAAQiC,EAAMjC,MAChB,KAAK2D,SAAW1B,IACrB0B,KAAAA,OAAS1B,EAAMjC,OAEjBiC,EAAMjC,MACTiC,EAAMjC,MAAMoE,MAAQnC,EAAMmC,MAChB,KAAKnE,QAAUgC,IACpBhC,KAAAA,MAAQgC,EAAMmC,OAEpBnC,EAAMjC,MAAQiC,EAAMmC,MAAQnC,EAAM7B,SAAW,KACzC6B,IAAU,KAAK2B,UACbA,KAAAA,QAAU,KAAK3D,OAGjB,KAAKE,WACH4B,KAAAA,UAAS,IAGT,MAGRvM,EAAE2L,OAAS,SAASlE,EAAMwD,EAAgBW,GACrCa,IACHqC,EADGrC,EAAQ,KAAK0B,OAGV1B,IADFnC,KAAAA,WAAa,KAAKP,MAAQ,KAAKQ,aAAe9C,EAC5CgF,GACNqC,EAAOrC,EAAMjC,OACTiC,EAAMpD,SAAY5B,GAAQgF,EAAMzF,aAAeyF,EAAMpC,UAAYoC,EAAMtC,OACrEsC,EAAMjD,UAGViD,EAAMd,QAAUc,EAAMvC,OAAiCuC,EAAMf,gBAA7Be,EAAMzD,iBAA4CvB,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAa6B,EAAgBW,GAFhJa,EAAMd,QAAQlE,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAY6B,EAAgBW,IAK7Ea,EAAQqC,GAIV9O,EAAEgM,QAAU,WAIJ,OAHF9L,GACJD,EAAQqF,OAEF,KAAKgF,YAQT/K,IAAAA,EAAY8C,EAAO,YAAa,SAASsC,EAAQkE,EAAUC,GAIzDnE,GAHJiE,EAAU3H,KAAK,KAAM4H,EAAUC,GAC1B6C,KAAAA,OAASpM,EAAUyB,UAAU2K,OAEpB,MAAVhH,EACG,KAAA,8BAGFA,KAAAA,OAASA,EAA6B,iBAAZA,EAAwBA,EAASpF,EAAUwP,SAASpK,IAAWA,EAE1FqK,IAEHjP,EAAGkP,EAAMC,EAFNF,EAAcrK,EAAOwK,QAAWxK,EAAOpE,QAAUoE,IAAWxF,GAAUwF,EAAO,KAAOA,EAAO,KAAOxF,GAAWwF,EAAO,GAAGyK,UAAYzK,EAAO,GAAG0K,QAAU1K,EAAOyK,UACjKE,EAAY,KAAKxG,KAAKwG,UAKnB,GAFCC,KAAAA,WAAaD,EAA0B,MAAbA,EAAqBE,EAAiBjQ,EAAUkQ,kBAA2C,iBAAfH,EAA2BA,GAAa,EAAIE,EAAiBF,IAEnKN,GAAcrK,aAAkBxD,OAAUwD,EAAO/D,MAAQE,EAAS6D,KAAmC,iBAAfA,EAAO,GAI5F5E,IAHA2P,KAAAA,SAAWR,EAAUzO,EAAOkE,GAC5BgL,KAAAA,YAAc,GACdC,KAAAA,UAAY,GACZ7P,EAAI,EAAGA,EAAImP,EAAQ3O,OAAQR,KAC/BkP,EAAOC,EAAQnP,IAIa,iBAAVkP,EAMPA,EAAK1O,QAAU0O,IAAS9P,GAAU8P,EAAK,KAAOA,EAAK,KAAO9P,GAAW8P,EAAK,GAAGG,UAAYH,EAAK,GAAGI,QAAUJ,EAAKG,WAC1HF,EAAQzJ,OAAO1F,IAAK,GACf2P,KAAAA,SAAWR,EAAUA,EAAQlM,OAAOvC,EAAOwO,MAG5CW,KAAAA,UAAU7P,GAAK8P,EAAUZ,EAAM,MAAM,GACxB,IAAdK,GAAqB,KAAKM,UAAU7P,GAAGQ,OAAS,GACnDuP,GAAgBb,EAAM,KAAM,KAAM,EAAG,KAAKW,UAAU7P,KAX/B,iBADrBkP,EAAOC,EAAQnP,KAAOR,EAAUwP,SAASE,KAExCC,EAAQzJ,OAAO1F,EAAE,EAAG,GALrBmP,EAAQzJ,OAAO1F,IAAK,QAoBjB4P,KAAAA,YAAc,GACdC,KAAAA,UAAYC,EAAUlL,EAAQ,MAAM,GACvB,IAAd2K,GAAqB,KAAKM,UAAUrP,OAAS,GAChDuP,GAAgBnL,EAAQ,KAAM,KAAM,EAAG,KAAKiL,YAG1C,KAAK9G,KAAKQ,iBAAiC,IAAbT,GAAkC,IAAhB,KAAKI,SAA8C,IAA9B,KAAKH,KAAKQ,mBAC7ES,KAAAA,OAx4BI,KAy4BJ4B,KAAAA,OAAO3D,KAAKC,IAAI,GAAI,KAAKgB,YAE7B,GACH8G,EAAc,SAASjD,GACdA,OAAAA,GAAKA,EAAEvM,QAAUuM,IAAM3N,GAAU2N,EAAE,KAAOA,EAAE,KAAO3N,GAAW2N,EAAE,GAAGsC,UAAYtC,EAAE,GAAGuC,QAAUvC,EAAEsC,YAc1GpP,EAAIT,EAAUyB,UAAY,IAAI4H,GAC5BD,YAAcpJ,EAChBS,EAAEsM,OAAOnC,KAAM,EAIfnK,EAAE0N,MAAQ,EACV1N,EAAEgQ,SAAWhQ,EAAE0P,SAAW1P,EAAEiQ,kBAAoBjQ,EAAEkQ,SAAW,KAC7DlQ,EAAEmQ,wBAA0BnQ,EAAEoQ,OAAQ,EAEtC7Q,EAAU8Q,QAAU,QACpB9Q,EAAU+Q,YAActQ,EAAEuQ,MAAQ,IAAI/N,EAAK,KAAM,KAAM,EAAG,GAC1DjD,EAAUkQ,iBAAmB,OAC7BlQ,EAAU0K,OAAShK,EACnBV,EAAUiR,UAAY,IACtBjR,EAAUqI,aAAe,SAASC,EAAWC,GAC5C7H,EAAQ2H,aAAaC,EAAWC,IAGjCvI,EAAUwP,SAAW5P,EAAOsR,GAAKtR,EAAOuR,QAAU,SAAShN,GACtDqL,IAAAA,EAAW5P,EAAOsR,GAAKtR,EAAOuR,OAC9B3B,OAAAA,GACHxP,EAAUwP,SAAWA,EACdA,EAASrL,KAEZjE,IACJA,EAAON,EAAOO,UAEND,EAAaA,EAAKkR,iBAAmBlR,EAAKkR,iBAAiBjN,GAAKjE,EAAKmR,eAAgC,MAAhBlN,EAAEmN,OAAO,GAAcnN,EAAEuJ,OAAO,GAAKvJ,GAAlHA,IAGd4J,IAAAA,EAAc,GACjBwD,EAAc,GACdC,EAAc,iDACdC,EAAU,iBAEVC,EAAY,SAASnE,GAIboE,IAHHA,IAEHC,EAFGD,EAAK,KAAKlB,SAGPkB,GACNC,EAAOD,EAAGE,KAAgC,IAANtE,GAAuB,MAAZ,KAAKuE,IAAe,KAAKA,IAAMvE,EAAI,KAAK5K,KAAK,IAAM,KAAKoP,MAAtFJ,EAAG3L,EAAIuH,EAAIoE,EAAG1L,EAC3B0L,EAAGK,EACNJ,EAAMD,EAAGK,EAAEtQ,KAAK,KAAKuQ,OAAQL,EAAK,KAAKM,SAAWP,EAAGjN,EAAG,KAAKuN,QACnDL,EANL,MAMoBA,GANpB,OAMmCD,EAAGE,OAC3CD,EAAM,GAEFD,EAAG7I,EAEG6I,EAAGQ,GACbR,EAAGjN,EAAEiN,EAAGlR,GAAGkR,EAAGQ,GAAIP,GAElBD,EAAGjN,EAAEiN,EAAGlR,GAAGmR,GAJXD,EAAGjN,EAAEiN,EAAGlR,GAAKmR,EAMdD,EAAKA,EAAG1G,OAGVmH,EAAa,SAAS7E,GACb,OAAM,IAAJA,EAAY,GAAK,IAAQ,IAGpC8E,EAAW,SAASN,EAAOD,EAAKQ,EAAQX,GACnCpR,IAIHgS,EAAWC,EAASC,EAAKjS,EAAGY,EAAGsR,EAAYC,EAJxCpS,EAAI,GACPqS,EAAY,EACZ3M,EAAI,GACJ4M,EAAQ,EAoBJrS,IAlBLD,EAAEwR,MAAQA,EACVxR,EAAEuR,IAAMA,EACRC,EAAQxR,EAAE,GAAKwR,EAAQ,GACvBD,EAAMvR,EAAE,GAAKuR,EAAM,GACfQ,IACHA,EAAO/R,GACPwR,EAAQxR,EAAE,GACVuR,EAAMvR,EAAE,IAETA,EAAES,OAAS,EACXuR,EAAYR,EAAMe,MAAMtB,IAAgB,GACxCgB,EAAUV,EAAIgB,MAAMtB,IAAgB,GAChCG,IACHA,EAAG1G,MAAQ,KACX0G,EAAGE,KAAO,EACVtR,EAAEkQ,SAAWlQ,EAAEwS,SAAWpB,GAE3BvQ,EAAIoR,EAAQxR,OACPR,EAAI,EAAGA,EAAIY,EAAGZ,IAClBmS,EAAaH,EAAQhS,GAErByF,IADAyM,EAAaZ,EAAIpE,OAAOkF,EAAWd,EAAInE,QAAQgF,EAAYC,GAAWA,MACjDpS,EAAKkS,EAAa,IACvCE,GAAaF,EAAW1R,OACpB6R,EACHA,GAASA,EAAQ,GAAK,EACc,UAA1BH,EAAWhF,QAAQ,KAC7BmF,EAAQ,GAELF,IAAeJ,EAAU/R,IAAM+R,EAAUvR,QAAUR,EACtDyF,GAAK0M,GAED1M,IACH1F,EAAEc,KAAK4E,GACPA,EAAI,IAELwM,EAAMO,WAAWT,EAAU/R,IAC3BD,EAAEc,KAAKoR,GACPlS,EAAEkQ,SAAW,CAACxF,MAAO1K,EAAEkQ,SAAU/L,EAAEnE,EAAGE,EAAGF,EAAES,OAAO,EAAGiF,EAAEwM,EAAKzM,GAA6B,MAAzB2M,EAAWrB,OAAO,GAAc2B,SAASN,EAAWrB,OAAO,GAAK,IAAK,IAAM0B,WAAWL,EAAWjF,OAAO,IAAOsF,WAAWL,GAAcF,IAAS,EAAG3J,EAAE,EAAGkJ,EAAGa,GAASA,EAAQ,EAAKpK,KAAKyK,MAAQd,IAGhQQ,GAAaD,EAAW3R,OAUlBT,OARP0F,GAAK6L,EAAIpE,OAAOkF,KAEfrS,EAAEc,KAAK4E,GAER1F,EAAE4S,SAAWzB,EACTD,EAAQ2B,KAAKtB,KAChBvR,EAAEuR,IAAM,MAEFvR,GAGR8S,EAAgB,SAASjO,EAAQkO,EAAMvB,EAAOD,EAAKyB,EAAeC,EAAKC,EAAWC,EAAc5N,GAC3E,mBAATgM,IACVA,EAAMA,EAAIhM,GAAS,EAAGV,IAEnBjC,IAAAA,EAAciC,EAAAA,EAAOkO,IACxBK,EAAuB,aAATxQ,EAAuB,GAAOmQ,EAAK3F,QAAQ,QAAqD,mBAApCvI,EAAO,MAAQkO,EAAK5F,OAAO,IAAuB4F,EAAO,MAAQA,EAAK5F,OAAO,GACvJzH,EAAe,QAAV8L,EAAmBA,EAAS4B,EAA4BF,EAAYrO,EAAOuO,GAAYF,GAAarO,EAAOuO,KAAlEvO,EAAOkO,GACrDM,EAA8B,iBAAT9B,GAAuC,MAAlBA,EAAIR,OAAO,GACrDK,EAAK,CAACjN,EAAEU,EAAQ3E,EAAE6S,EAAMrN,EAAEA,EAAG6C,EAAY,aAAT3F,EAAsB0Q,GAAG,EAAGtR,EAAEgR,GAAiBD,EAAMtB,EAAIwB,EAA2B,mBAATA,EAAuBA,EAAM/K,KAAKyK,MAA9C,EAAsD/M,GAAG,EAAGH,EAAE4N,EAAaX,SAASnB,EAAIR,OAAO,GAAK,IAAK,IAAM0B,WAAWlB,EAAIpE,OAAO,IAAOsF,WAAWlB,GAAO7L,GAAM,GAgBhQ0L,IAbc,iBAAP1L,GAAoC,iBAAT6L,IAAsB8B,KACvDH,GAAaK,MAAM7N,KAAQ2N,GAAcE,MAAMhC,IAAuB,kBAAP7L,GAAoC,kBAAT6L,GAE7FH,EAAGQ,GAAKsB,EAER9B,EAAK,CAACjN,EADC2N,EAASpM,EAAI2N,EAAcZ,WAAWrB,EAAG1L,GAAK0L,EAAG3L,GAAM2L,EAAG1L,EAAI,IAAI8N,QAAQ,aAAc,IAAMjC,EAAM4B,GAAgB1T,EAAUgU,oBAAqBrC,GAC3IlR,EAAG,WAAYwF,EAAG,EAAGD,EAAG,EAAG8C,EAAG,EAAG+K,GAAI,EAAGtR,EAAGgR,GAAiBD,EAAMnN,GAAI,EAAG6L,EAAG,KAE3FL,EAAG1L,EAAI+M,WAAW/M,GACb2N,IACJjC,EAAG3L,EAAKgN,WAAWlB,GAAOH,EAAG1L,GAAM,KAIlC0L,EAAG3L,EAKC2L,OAJFA,EAAG1G,MAAQ,KAAKwF,YACpBkB,EAAG1G,MAAMoE,MAAQsC,GAEblB,KAAAA,SAAWkB,EACTA,GAGTsC,EAAajU,EAAUiU,WAAa,CAACC,QAAQ3S,EAAUkO,WAAWe,EAAa2D,WAAWpG,EAAaqG,QAAQ/B,GAC/GgC,EAAWrU,EAAUqU,SAAW,GAChCC,EAAeL,EAAWM,YAAc,GACxCC,EAAkB,EAClBC,EAAiBR,EAAWS,cAAgB,CAAC5Q,KAAK,EAAG8F,MAAM,EAAGmG,UAAU,EAAG4E,WAAW,EAAGC,iBAAiB,EAAGC,gBAAgB,EAAGxK,UAAU,EAAGyK,aAAa,EAAGC,QAAQ,EAAGC,SAAS,EAAGC,eAAe,EAAGC,cAAc,EAAGC,QAAQ,EAAGC,cAAc,EAAGC,aAAa,EAAGC,kBAAkB,EAAGC,wBAAwB,EAAGC,uBAAuB,EAAGC,SAAS,EAAGC,eAAe,EAAGC,cAAc,EAAGC,WAAW,EAAGC,KAAK,EAAG9L,gBAAgB,EAAG+L,OAAO,EAAGC,YAAY,EAAG/L,KAAK,EAAGS,OAAO,EAAGP,SAAS,EAAG8L,QAAQ,EAAGC,KAAK,EAAGC,YAAY,EAAG1I,cAAc,EAAGkG,aAAa,EAAGyC,GAAG,EAAGC,SAAS,EAAGlH,QAAQ,GACzjBe,EAAmB,CAACoG,KAAK,EAAGC,IAAI,EAAGC,KAAK,EAAGC,WAAW,EAAGC,WAAW,EAAGC,YAAY,EAAU,KAAA,EAAW,MAAA,GACxGpM,EAAsBjB,EAAUiB,oBAAsB,IAAIoE,EAC1DvE,EAAgBd,EAAUc,cAAgB,IAAIuE,EAC9CiI,EAAe,GACf3I,EAAciG,EAAW2C,WAAa,WACjCxV,IACHZ,EAAG0M,EADA9L,EAAI2M,EAAY/M,OAGfR,IADL+Q,EAAc,GACT/Q,EAAI,EAAGA,EAAIY,EAAGZ,KAClB0M,EAAQa,EAAYvN,MACS,IAAhB0M,EAAM2D,QAClB3D,EAAMd,OAAOc,EAAM2D,MAAM,GAAI3D,EAAM2D,MAAM,IAAI,GAC7C3D,EAAM2D,OAAQ,GAGhB9C,EAAY/M,OAAS,GAGvBmJ,EAAc1C,WAAa/G,EAAQwH,KACnCoC,EAAoB7C,WAAa/G,EAAQyH,MACzCgC,EAAcL,QAAUQ,EAAoBR,SAAU,EACtDf,WAAWiF,EAAa,GAExB3E,EAAUwN,YAAc7W,EAAUoM,OAAS,WACrC5L,IAAAA,EAAGD,EAAGE,EASNC,GARAqN,EAAY/M,QACfgN,IAED7D,EAAciC,QAAQ1L,EAAQwH,KAAOiC,EAAc1C,YAAc0C,EAAcN,YAAY,GAAO,GAClGS,EAAoB8B,QAAQ1L,EAAQyH,MAAQmC,EAAoB7C,YAAc6C,EAAoBT,YAAY,GAAO,GACjHkE,EAAY/M,QACfgN,IAEGtN,EAAQyH,OAASwO,EAAc,CAE7BlW,IAAAA,KADLkW,EAAejW,EAAQyH,OAAS8K,SAASjT,EAAUiR,UAAW,KAAO,KAC3DqD,EAAc,CAGhB,IADP9T,GADAD,EAAI+T,EAAa7T,GAAGqW,QACd9V,SACGR,GAAK,GACTD,EAAEC,GAAGoK,KACRrK,EAAE2F,OAAO1F,EAAG,GAGG,IAAbD,EAAES,eACEsT,EAAa7T,GAKlB,MADJA,EAAI0J,EAAcyE,SACRnO,EAAEqK,UAAa9K,EAAUiR,YAAc3G,EAAoBsE,QAA6C,IAAnClO,EAAQ2E,WAAW+C,KAAKpH,OAAc,CAC7GP,KAAAA,GAAKA,EAAEqK,SACbrK,EAAIA,EAAEwK,MAEFxK,GACJC,EAAQiI,WAMbjI,EAAQ6E,iBAAiB,OAAQ8D,EAAUwN,aAEvCvG,IAAAA,EAAY,SAASlL,EAAQ8H,EAAO6J,GAClCZ,IAAwB5V,EAAGC,EAA3B2V,EAAK/Q,EAAO4R,WAIZ9J,GAHCoH,EAAa6B,IAAO/Q,EAAO4R,WAAab,EAAK,IAAO3B,QACxDF,EAAa6B,GAAM,CAAC/Q,OAAOA,EAAQ0R,OAAO,KAEvC5J,KACH3M,EAAI+T,EAAa6B,GAAIW,QAClBtW,EAAID,EAAES,QAAWkM,EAChB6J,GACI,OAAEvW,GAAK,GACTD,EAAEC,KAAO0M,GACZ3M,EAAE2F,OAAO1F,EAAG,GAKT8T,OAAAA,EAAa6B,GAAIW,QAEzBG,EAAe,SAASC,EAAkBC,EAAkB/R,EAAQgS,GAC/DpV,IAA0CqV,EAAIC,EAA9CtV,EAAOkV,EAAiB3N,KAAK2M,YAQzBmB,OAPJrV,IACHqV,EAAKrV,EAAKkV,EAAkBC,EAAkB/R,EAAQgS,KAEvDpV,EAAOhC,EAAUkW,eAEhBoB,EAAKtV,EAAKkV,EAAkBC,EAAkB/R,EAAQgS,KAExC,IAAPC,IAAuB,IAAPC,GAEzB/G,GAAkB,SAASnL,EAAQ8H,EAAOqK,EAAOC,EAAMC,GAClDjX,IAAAA,EAAGkX,EAASC,EAAUvW,EACtBoW,GAAS,IAATA,GAAcA,GAAQ,EAAG,CAEvBhX,IADLY,EAAIqW,EAASzW,OACRR,EAAI,EAAGA,EAAIY,EAAGZ,IACd,IAACmX,EAAWF,EAASjX,MAAQ0M,EAC3ByK,EAAS/M,KACT+M,EAAS7K,MAAM,KAAM1H,EAAQ8H,KAChCwK,GAAU,QAGN,GAAa,IAATF,EACV,MAGKE,OAAAA,EAGJhL,IAIHkL,EAJGlL,EAAYQ,EAAMzF,WArqCZ,KAsqCToQ,EAAW,GACXC,EAAS,EACTC,EAA+B,IAApB7K,EAAM1D,UAGX,IADPhJ,EAAIiX,EAASzW,SACJR,GAAK,IACRmX,EAAWF,EAASjX,MAAQ0M,GAASyK,EAAS/M,KAAO+M,EAAS7M,UAExD6M,EAASvM,YAAc8B,EAAM9B,WACvCwM,EAAcA,GAAeI,GAAc9K,EAAO,EAAG6K,GACC,IAAlDC,GAAcL,EAAUC,EAAaG,KACxCF,EAASC,KAAYH,IAEZA,EAASlQ,YAAciF,GAAeiL,EAASlQ,WAAakQ,EAASxL,gBAAkBwL,EAAS9N,WAAa6C,KAAkBqL,IAAYJ,EAAS9M,WAAa6B,EAAYiL,EAASlQ,YAAcwQ,OAC9MJ,EAASC,KAAYH,KAKhB,IADPnX,EAAIsX,IACKtX,GAAK,GAMTgX,GAJJpW,GADAuW,EAAWE,EAASrX,IACPiQ,SACA,IAAT+G,GAAgBG,EAAS7K,MAAMyK,EAAOnS,EAAQ8H,KACjDwK,GAAU,GAEE,IAATF,IAAgBG,EAASlH,UAAYkH,EAAS9M,UAAYzJ,EAAI,CAC7DoW,GAAS,IAATA,IAAeP,EAAaU,EAAUzK,GACzC,SAEGyK,EAASpL,UAAS,GAAO,KAC5BmL,GAAU,GAINA,OAAAA,GAERM,GAAgB,SAAS9K,EAAOgL,EAAWH,GAInC3N,IAHHA,IAAAA,EAAK8C,EAAM9B,UACd+M,EAAK/N,EAAGP,WACRnF,EAAIwI,EAAMzF,WACJ2C,EAAGgB,WAAW,CAGhBhB,GAFJ1F,GAAK0F,EAAG3C,WACR0Q,GAAM/N,EAAGP,WACLO,EAAGU,QACC,OAAC,IAETV,EAAKA,EAAGgB,UAGD1G,OADRA,GAAKyT,GACOD,EAAaxT,EAAIwT,EAAcH,GAAWrT,IAAMwT,IAAgBhL,EAAMrC,UAAYnG,EAAIwT,EAAY,KAvtCpG,MAutCkIxT,GAAKwI,EAAMf,gBAAkBe,EAAMrD,WAAasO,GAAMD,EAvtCxL,KAutCgN,EAAIxT,EAAIwT,EAvtCxN,MA6tCZzX,EAAE2X,MAAQ,WACL7K,IAMH/M,EAAG6X,EAAa1G,EAAIlR,EAAG6X,EAAWlX,EAN/BmM,EAAI,KAAKhE,KACZgP,EAAK,KAAK7H,kBACV8H,EAAM,KAAKhP,UACXiP,IAAclL,EAAExD,gBAChBjG,EAAOyJ,EAAEzJ,KACTiR,EAAU,KAAKpE,SAEZpD,GAAAA,EAAEwH,QAAS,CAMTtU,IAAAA,KALDsU,IACHA,EAAQ3I,QAAQ,GAAG,GACnB2I,EAAQhI,QAETuL,EAAY,GACF/K,EAAEwH,QACXuD,EAAU7X,GAAK8M,EAAEwH,QAAQtU,GAWtBgY,GATJH,EAAUtO,KAAO,UACjBsO,EAAUvI,WAAY,EACtBuI,EAAUvO,iBAAkB,EAC5BuO,EAAUrC,KAAQwC,IAAwB,IAAXlL,EAAE0I,KACjCqC,EAAUvD,QAAUuD,EAAU1O,MAAQ,KACtC0O,EAAUtD,SAAWzH,EAAEyH,SACvBsD,EAAUrD,eAAiB1H,EAAE0H,eAC7BqD,EAAUpD,cAAgB3H,EAAE2H,eAAiB3H,EAAEC,eAAiB,KAC3DmD,KAAAA,SAAW3Q,EAAU0Y,GAAG,KAAKtT,QAAU,GAAI,EAAGkT,GAC/CG,EACC,GAAA,KAAKjO,MAAQ,EACXmG,KAAAA,SAAW,UACV,GAAY,IAAR6H,EAAW,YAIjB,GAAIjL,EAAEuH,cAAwB,IAAR0D,EAExBzD,GAAAA,EACHA,EAAQ3I,QAAQ,GAAG,GACnB2I,EAAQhI,OACH4D,KAAAA,SAAW,SACV,CAKDlQ,IAAAA,KAJc,IAAf,KAAK+J,QACRiO,GAAY,GAEb9G,EAAK,GACKpE,EACJkH,EAAehU,IAAY,YAANA,IACzBkR,EAAGlR,GAAK8M,EAAE9M,IAQR,GALJkR,EAAG5B,UAAY,EACf4B,EAAG3H,KAAO,cACV2H,EAAGsE,KAAQwC,IAAwB,IAAXlL,EAAE0I,KAC1BtE,EAAG5H,gBAAkB0O,EAChB9H,KAAAA,SAAW3Q,EAAU0Y,GAAG,KAAKtT,OAAQ,EAAGuM,GACxC8G,GAME,GAAmB,IAAf,KAAKjO,MACf,YANKmG,KAAAA,SAASyH,QACTzH,KAAAA,SAASpE,UAAS,GACnB,KAAKhD,KAAKQ,kBACR4G,KAAAA,SAAW,MAehB,GARCK,KAAAA,MAAQlN,EAASA,EAAiCA,aAAgBb,EAAQa,EAAyB,mBAAVA,EAAwB,IAAIb,EAAKa,EAAMyJ,EAAEqI,YAAclS,EAASI,IAAS9D,EAAU+Q,YAAnJ/Q,EAAU+Q,YACpCxD,EAAEqI,sBAAsBhU,OAASkC,EAAK6U,SACpC3H,KAAAA,MAAQlN,EAAK6U,OAAO/V,MAAMkB,EAAMyJ,EAAEqI,aAEnCgD,KAAAA,UAAY,KAAK5H,MAAM1N,MACvBuV,KAAAA,WAAa,KAAK7H,MAAMzN,OACxBkN,KAAAA,SAAW,KAEZ,KAAKN,SAEH3P,IADLY,EAAI,KAAK+O,SAASnP,OACbR,EAAI,EAAGA,EAAIY,EAAGZ,IACb,KAAKsY,WAAY,KAAK3I,SAAS3P,GAAK,KAAK4P,YAAY5P,GAAK,GAAK,KAAK6P,UAAU7P,GAAK+X,EAAKA,EAAG/X,GAAK,KAAOA,KAC3G6X,GAAc,QAIhBA,EAAc,KAAKS,WAAW,KAAK1T,OAAQ,KAAKgL,YAAa,KAAKC,UAAWkI,EAAI,GAS9EhL,GANA8K,GACHrY,EAAU+Y,eAAe,kBAAmB,MAEzCR,IAAS,KAAK9H,UAAsC,mBAAjB,KAAKrL,QACtCmH,KAAAA,UAAS,GAAO,IAElBgB,EAAEuH,aAEEnD,IADPA,EAAK,KAAKlB,SACHkB,GACNA,EAAG1L,GAAK0L,EAAG3L,EACX2L,EAAG3L,GAAK2L,EAAG3L,EACX2L,EAAKA,EAAG1G,MAGLE,KAAAA,UAAYoC,EAAEyH,SACdnK,KAAAA,UAAW,GAGjBpK,EAAEqY,WAAa,SAAS1T,EAAQ4T,EAAYvB,EAAUwB,EAAkBnT,GACnErF,IAAAA,EAAGD,EAAG6X,EAAaa,EAAQvH,EAAIpE,EAC/BnI,GAAU,MAAVA,EACI,OAAA,EASH3E,IAAAA,KAPD8Q,EAAYnM,EAAO4R,aACtBhJ,IAGI,KAAKzE,KAAK4P,KAAS/T,EAAO0K,OAAW1K,IAAWxF,GAAUwF,EAAOyK,UAAcwE,EAAS8E,MAA+B,IAAtB,KAAK5P,KAAKyM,SA7brG,SAASzM,EAAMnE,GACrB+T,IACH1Y,EADG0Y,EAAM,GAEL1Y,IAAAA,KAAK8I,EACJkL,EAAehU,IAASA,KAAK2E,GAAiB,cAAN3E,GAA2B,MAANA,GAAmB,MAANA,GAAmB,UAANA,GAAuB,WAANA,GAAwB,cAANA,GAA2B,WAANA,MAAqB4T,EAAS5T,IAAO4T,EAAS5T,IAAM4T,EAAS5T,GAAG2Y,YACnND,EAAI1Y,GAAK8I,EAAK9I,UACP8I,EAAK9I,IAGd8I,EAAK4P,IAAMA,EAqbXC,CAAS,KAAK7P,KAAMnE,GAEX,KAAKmE,KAEVkL,GADJlH,EAAI,KAAKhE,KAAK9I,GACVgU,EAAehU,GACd8M,IAAQA,aAAa3L,OAAW2L,EAAElM,MAAQE,EAASgM,MAA2C,IAAlCA,EAAE5K,KAAK,IAAIgL,QAAQ,YAC7EpE,KAAAA,KAAK9I,GAAK8M,EAAI,KAAKJ,kBAAkBI,EAAG,YAGxC,GAAI8G,EAAS5T,KAAOyY,EAAS,IAAI7E,EAAS5T,IAAM4Y,aAAajU,EAAQ,KAAKmE,KAAK9I,GAAI,KAAMqF,GAAQ,CAahG,IAFF2K,KAAAA,SAAWkB,EAAK,CAAC1G,MAAM,KAAKwF,SAAU/L,EAAEwU,EAAQzY,EAAE,WAAYwF,EAAE,EAAGD,EAAE,EAAG8C,EAAE,EAAGvG,EAAE9B,EAAGoT,GAAG,EAAG1N,GAAG+S,EAAOI,UAAWtH,EAAE,GACpHxR,EAAI0Y,EAAOK,gBAAgBvY,SAClBR,GAAK,GACbwY,EAAWE,EAAOK,gBAAgB/Y,IAAM,KAAKiQ,UAE1CyI,EAAOI,WAAaJ,EAAOM,mBAC9BnB,GAAc,IAEXa,EAAOO,YAAcP,EAAOQ,aAC1B9I,KAAAA,yBAA0B,GAE5Be,EAAG1G,QACN0G,EAAG1G,MAAMoE,MAAQsC,QAIlBqH,EAAWvY,GAAK4S,EAAc3R,KAAK,KAAM0D,EAAQ3E,EAAG,MAAO8M,EAAG9M,EAAG,EAAG,KAAM,KAAK8I,KAAKmK,aAAc5N,GAIhGmT,OAAAA,GAAsB,KAAKnM,MAAMmM,EAAkB7T,GAC/C,KAAK0T,WAAW1T,EAAQ4T,EAAYvB,EAAUwB,EAAkBnT,GAEpE,KAAKkK,WAAa,GAAO,KAAKS,UAAcgH,EAASzW,OAAS,GAAOuP,GAAgBnL,EAAQ,KAAM4T,EAAY,KAAKhJ,WAAYyH,IAC9H3K,KAAAA,MAAMkM,EAAY5T,GAChB,KAAK0T,WAAW1T,EAAQ4T,EAAYvB,EAAUwB,EAAkBnT,KAEpE,KAAK2K,YAAkC,IAAnB,KAAKlH,KAAK0M,MAAkB,KAAKzM,WAAe,KAAKD,KAAK0M,OAAS,KAAKzM,aAC/F+H,EAAYnM,EAAO4R,aAAc,GAE3BqB,IAGR5X,EAAE2L,OAAS,SAASlE,EAAMwD,EAAgBW,GACrCsN,IAIHC,EAAYpU,EAAUmM,EAAIkI,EAH1BC,EADU,KACMtP,MAChBlB,EAFU,KAEME,UAChBuQ,EAHU,KAGa/O,aAEpB9C,GAAAA,GAAQoB,EAx4CD,MAw4CwBpB,GAAQ,EALhC,KAML6C,WANK,KAMaP,MAAQlB,EANrB,KAOL6E,MAPK,KAOQ6C,MAAMvM,SAPd,KAO8BuM,MAAMxM,SAAS,GAAK,EAPlD,KAQAyF,YACT2P,GAAa,EACbpU,EAAW,aACX6G,EAASA,GAXA,KAWcjB,UAAUuD,oBAEjB,IAAbrF,IAbM,KAamBuB,WAbnB,KAaqCtB,KAAK0M,MAAQ5J,KAblD,KAcA5E,aAdA,KAcoB2D,UAAU5B,YACtCtB,EAAO,IAEJ6R,EAAkB,GAAM7R,GAAQ,GAAKA,IAp5ChC,MAAA,OAo5CuD6R,GAA8C,YAjBrG,KAiB4F/P,OAAyB+P,IAAoB7R,IACjJmE,GAAQ,EACJ0N,EAt5CI,OAu5CPvU,EAAW,sBApBJ,KAuBJwF,aAAe6O,GAAgBnO,GAAkBxD,GAAQ6R,IAAoB7R,EAAQA,EA15CjF,WA65CJ,GAAIA,EA75CA,KAm4CA,KA2BL6C,WA3BK,KA2BaP,MAAQ,EA3BrB,KA4BL2D,MA5BK,KA4BQ6C,MAAMvM,SA5Bd,KA4B8BuM,MAAMxM,SAAS,GAAK,GAC3C,IAAbsV,GAAgC,IAAbxQ,GAAkByQ,EAAkB,KAC1DvU,EAAW,oBACXoU,EA/BS,KA+BS3P,WAEf/B,GAp6CM,KAq6CTA,EAAO,EACGA,EAAO,IAnCR,KAoCJ4B,SAAU,EACE,IAAbR,IArCK,KAqCoBuB,WArCpB,KAqCsCtB,KAAK0M,MAAQ5J,KACvD0N,GAAmB,IAz6Cf,OAy6CsBA,GAA8C,YAtCpE,KAsC2D/P,QAClEqC,GAAQ,GAvCD,KAyCHrB,aAAe6O,GAAgBnO,GAAkBxD,GAAQ6R,IAAoB7R,EAAQA,EA56ClF,SAm4CA,KA4CA2C,UA5CA,KA4CkB8F,UA5ClB,KA4CmCA,SAAS1C,cACrD5B,GAAQ,QAKLsN,GAlDM,KAgDL5O,WAhDK,KAgDaP,MAAQtC,EAhDrB,KAkDD0Q,UAAW,CACfhU,IAAAA,EAAIsD,EAAOoB,EAAUnG,EAnDhB,KAmD4ByV,UAAWoB,EAnDvC,KAmDkDnB,YAC9C,IAAT1V,GAAwB,IAATA,GAAcyB,GAAK,MACrCA,EAAI,EAAIA,GAEI,IAATzB,IACHyB,GAAK,GAEM,IAARoV,EACHpV,GAAKA,EACa,IAARoV,EACVpV,GAAKA,EAAIA,EACS,IAARoV,EACVpV,GAAKA,EAAIA,EAAIA,EACK,IAARoV,IACVpV,GAAKA,EAAIA,EAAIA,EAAIA,GAjET,KAmEJuJ,MAAkB,IAAThL,EAAc,EAAIyB,EAAc,IAATzB,EAAcyB,EAAKsD,EAAOoB,EAAW,GAAO1E,EAAI,EAAI,EAAKA,EAAI,OAnEzF,KAqEJuJ,MArEI,KAqES6C,MAAMxM,SAAS0D,EAAOoB,GAItCqQ,GAzEO,KAyEFnP,QAAUsP,GAAazN,EAA5BsN,CAEG,IA3EI,KA2EM9O,SAAU,CAEtB,GA7EM,KA4ELuN,SA5EK,KA6EAvN,UA7EA,KA6EiBD,IAC1B,OACM,IAAKyB,GA/EF,KA+EgBoE,YAAiC,IA/EjD,KA+EmClH,KAAK0M,MA/ExC,KA+E+DzM,WA/E/D,KA+EmFD,KAAK0M,OA/ExF,KA+EsGzM,WAK/G,OApFS,KAgFJgB,MAhFI,KAgFSO,WAAa+O,EAhFtB,KAiFJ9O,aAAe+O,EACpBhM,EAAY1M,KAlFH,WAAA,KAmFJwP,MAAQ,CAAC3I,EAAMwD,IAnFX,KAuFDlB,QAAUoP,EAvFT,KAwFJzL,MAxFI,KAwFS6C,MAAMxM,SAxFf,KAwF6BgG,MAAQlB,GACpCsQ,GAzFD,KAyFoB5I,MAAMvM,WAzF1B,KA0FJ0J,MA1FI,KA0FS6C,MAAMxM,SAAyB,IA1FxC,KA0F8BgG,MAAe,EAAI,IAsBrDmH,KAnBY,IA7FR,KA6FFd,QA7FE,KA8FLA,OAAQ,GA9FH,KAgGD/G,UAhGC,KAgGkBgB,SAhGlB,KAgGkCN,QAAUsP,GAAY5R,GAAQ,IAhGhE,KAiGL4B,SAAU,GAEC,IAAbgQ,IAnGO,KAoGDnJ,WACJzI,GAAQ,EArGH,KAsGHyI,SAASvE,OAAOlE,GAAM,EAAMmE,GACtB7G,IACXA,EAAW,aAxGH,KA2GD+D,KAAK4L,UAA4B,IA3GhC,KA2GsB3K,OAA4B,IAAblB,GAAqBoC,GA3G1D,KA4GJ4B,UAAU,aAGjBqE,EA/GW,KA+GDlB,SACHkB,GACFA,EAAG7I,EACN6I,EAAGjN,EAAEiN,EAAGlR,GAAGkR,EAAG3L,EAlHL,KAkHcmI,MAAQwD,EAAG1L,GAElC0L,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAG3L,EApHP,KAoHgBmI,MAAQwD,EAAG1L,EAErC0L,EAAKA,EAAG1G,MAtHE,KAyHFE,YACJjD,EAAO,GA1HD,KA0HayI,WAAsB,OAAVzI,GA1HzB,KA2HJyI,SAASvE,OAAOlE,GAAM,EAAMmE,GAE7BX,IA7HK,KA6HoBlB,QAAUsP,GAAYF,GAAcvN,IA7HxD,KA8HJiB,UAAU,aAGb9H,IAjIO,KAiIaoF,MAAOyB,IAC1BnE,EAAO,GAlID,KAkIWyI,WAlIX,KAkI6BxF,YAAuB,OAAVjD,GAlI1C,KAmIJyI,SAASvE,OAAOlE,GAAM,EAAMmE,GAE9BuN,IArIM,KAsIAxO,UAAUuD,oBAtIV,KAuIHpC,UAAS,GAAO,GAvIb,KAyIJzC,SAAU,IAEX4B,GA3IK,KA2IkBnC,KAAK/D,IA3IvB,KA4IJ8H,UAAU9H,GAEC,IAAb8D,GAjhDM,OAm4CA,KA8IiB0B,cAjhDjB,OAihD8C6O,IA9I9C,KA+IJ7O,aAAe,OAKvBvK,EAAEqM,MAAQ,SAASvD,EAAMnE,EAAQ+R,GAI5B5N,GAHS,QAATA,IACHA,EAAO,MAEI,MAARA,IAA4B,MAAVnE,GAAkBA,IAAW,KAAKA,QAEhD,OADFyL,KAAAA,OAAQ,EACN,KAAKtE,UAAS,GAAO,GAE7BnH,EAA6B,iBAAZA,EAAyBA,GAAU,KAAK+K,UAAY,KAAK/K,OAAUpF,EAAUwP,SAASpK,IAAWA,EAC9G6U,IAEHzZ,EAAGyY,EAAkBxY,EAAGkR,EAAIqH,EAAYtB,EAASwC,EAAWC,EAAQC,EAFjEH,EAAyB9C,GAAoB,KAAK3M,OAAS2M,EAAiB1P,aAAe,KAAKA,YAAc,KAAK2D,YAAc+L,EAAiB/L,UACrJiP,EAAU,KAAK5J,SAEZ,IAAClP,EAAS6D,IAAWoL,EAAYpL,KAAkC,iBAAfA,EAAO,GAEvD,IADP5E,EAAI4E,EAAOpE,SACFR,GAAK,GACT,KAAKsM,MAAMvD,EAAMnE,EAAO5E,GAAI2W,KAC/BO,GAAU,OAGN,CACF,GAAA,KAAKvH,UAED,IADP3P,EAAI,KAAK2P,SAASnP,SACTR,GAAK,GACT4E,GAAAA,IAAW,KAAK+K,SAAS3P,GAAI,CAChCwY,EAAa,KAAK5I,YAAY5P,IAAM,GAC/BkQ,KAAAA,kBAAoB,KAAKA,mBAAqB,GACnDuI,EAAmB,KAAKvI,kBAAkBlQ,GAAK+I,EAAO,KAAKmH,kBAAkBlQ,IAAM,GAAK,MACxF,WAGI,CAAA,GAAI4E,IAAW,KAAKA,OACnB,OAAA,EAEP4T,EAAa,KAAK5I,YAClB6I,EAAmB,KAAKvI,kBAAoBnH,EAAO,KAAKmH,mBAAqB,GAAK,MAG/EsI,GAAAA,EAAY,CAGX7B,GAFJ+C,EAAY3Q,GAAQyP,EACpBmB,EAAU5Q,IAAS0P,GAAyC,QAArBA,GAA8B1P,IAASyP,IAAgC,WAAjB,EAAOzP,KAAuBA,EAAK+Q,WAC5HnD,IAAqBnX,EAAUkW,aAAe,KAAK3M,KAAK2M,aAAc,CACpEzV,IAAAA,KAAKyZ,EACLlB,EAAWvY,KACT2Z,IACJA,EAAS,IAEVA,EAAO/Y,KAAKZ,IAGV,IAAC2Z,IAAW7Q,KAAU0N,EAAa,KAAME,EAAkB/R,EAAQgV,GAC/D,OAAA,EAIJ3Z,IAAAA,KAAKyZ,GACJvI,EAAKqH,EAAWvY,MAChBwZ,IACCtI,EAAG7I,EACN6I,EAAGjN,EAAEiN,EAAGlR,GAAGkR,EAAG1L,GAEd0L,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAG1L,EAEjByR,GAAU,GAEP/F,EAAGkC,IAAMlC,EAAGjN,EAAEoI,MAAMoN,KACvBxC,GAAU,GAEN/F,EAAGkC,IAAsC,IAAhClC,EAAGjN,EAAE6U,gBAAgBvY,SAC9B2Q,EAAGtC,MACNsC,EAAGtC,MAAMpE,MAAQ0G,EAAG1G,MACV0G,IAAO,KAAKlB,WACjBA,KAAAA,SAAWkB,EAAG1G,OAEhB0G,EAAG1G,QACN0G,EAAG1G,MAAMoE,MAAQsC,EAAGtC,OAErBsC,EAAG1G,MAAQ0G,EAAGtC,MAAQ,aAEhB2J,EAAWvY,IAEf0Z,IACHlB,EAAiBxY,GAAK,IAGnB,KAAKgQ,UAAY,KAAK5F,UAAYwP,GACjC9N,KAAAA,UAAS,GAAO,IAIjBmL,OAAAA,GAGRjX,EAAE6L,WAAa,WACV,KAAKsE,yBACR5Q,EAAU+Y,eAAe,aAAc,MAEpCrU,IAAAA,EAAI,KAAK8F,MASN,OARFiG,KAAAA,SAAW,KAAKC,kBAAoB,KAAKC,SAAW,KAAKxF,UAAY,KACrEyF,KAAAA,wBAA0B,KAAK9G,QAAU,KAAK+G,OAAQ,EACtDT,KAAAA,YAAe,KAAKD,SAAY,GAAK,GAC1C9G,EAAU5H,UAAU6K,WAAW5K,KAAK,MAChC,KAAK6H,KAAKQ,kBACRS,KAAAA,OA7nDK,KA8nDL4B,KAAAA,OAAO1H,GAAG,GAA0B,IAAnB,KAAK6E,KAAK0M,OAE1B,MAGRxV,EAAE8L,SAAW,SAASI,EAASC,GAI1BD,GAHChM,GACJD,EAAQqF,OAEL4G,GAAW,KAAK/B,IAAK,CACpB+E,IACHnP,EADGmP,EAAU,KAAKQ,SAEfR,GAAAA,EAEI,IADPnP,EAAImP,EAAQ3O,SACHR,GAAK,GACR6P,KAAAA,UAAU7P,GAAK8P,EAAUX,EAAQnP,GAAI,MAAM,QAG5C6P,KAAAA,UAAYC,EAAU,KAAKlL,OAAQ,MAAM,GAI5C,OADJiE,EAAU5H,UAAU8K,SAAS7K,KAAK,KAAMiL,EAASC,MAC7C,KAAKgE,0BAA6B,KAAKH,WACnCzQ,EAAU+Y,eAAgBpM,EAAU,YAAc,aAAe,OAQ1E3M,EAAU0Y,GAAK,SAAStT,EAAQkE,EAAUC,GAClC,OAAA,IAAIvJ,EAAUoF,EAAQkE,EAAUC,IAGxCvJ,EAAUyL,KAAO,SAASrG,EAAQkE,EAAUC,GAGpC,OAFPA,EAAKuL,cAAe,EACpBvL,EAAKQ,gBAA2C,GAAxBR,EAAKQ,gBACtB,IAAI/J,EAAUoF,EAAQkE,EAAUC,IAGxCvJ,EAAUua,OAAS,SAASnV,EAAQkE,EAAUkR,EAAUC,GAGhD,OAFPA,EAAO1F,QAAUyF,EACjBC,EAAO1Q,gBAA6C,GAA1B0Q,EAAO1Q,iBAAwD,GAA5ByQ,EAASzQ,gBAC/D,IAAI/J,EAAUoF,EAAQkE,EAAUmR,IAGxCza,EAAU0a,YAAc,SAAS9Q,EAAOpE,EAAU4H,EAAQ3H,EAAO4E,GACzD,OAAA,IAAIrK,EAAUwF,EAAU,EAAG,CAACoE,MAAMA,EAAO+K,WAAWnP,EAAUoP,iBAAiBxH,EAAQI,cAAc/H,EAAO6P,kBAAkB9P,EAAU+P,wBAAwBnI,EAAQrD,iBAAgB,EAAOkM,MAAK,EAAO5L,UAAUA,EAAW0F,UAAU,KAGlP/P,EAAU2a,IAAM,SAASvV,EAAQmE,GACzB,OAAA,IAAIvJ,EAAUoF,EAAQ,EAAGmE,IAGjCvJ,EAAU4a,YAAc,SAASxV,EAAQyV,GACpCzV,GAAU,MAAVA,EAAyB,MAAA,GAEzB5E,IAAAA,EAAGD,EAAG8D,EAAGK,EACT,GAFJU,EAA6B,iBAAZA,EAAwBA,EAASpF,EAAUwP,SAASpK,IAAWA,GAE3E7D,EAAS6D,IAAWoL,EAAYpL,KAAkC,iBAAfA,EAAO,GAAkB,CAGzE,IAFP5E,EAAI4E,EAAOpE,OACXT,EAAI,KACKC,GAAK,GACbD,EAAIA,EAAEkD,OAAOzD,EAAU4a,YAAYxV,EAAO5E,GAAIqa,IAIxC,IAFPra,EAAID,EAAES,SAEGR,GAAK,GAGN,IAFPkE,EAAInE,EAAEC,GACN6D,EAAI7D,IACK6D,GAAK,GACTK,IAAMnE,EAAE8D,IACX9D,EAAE2F,OAAO1F,EAAG,QAIT,GAAI4E,EAAO4R,WAGV,IADPxW,GADAD,EAAI+P,EAAUlL,GAAQ3B,UAChBzC,SACGR,GAAK,IACTD,EAAEC,GAAGoK,KAAQiQ,IAAeta,EAAEC,GAAGgM,aACpCjM,EAAE2F,OAAO1F,EAAG,GAIRD,OAAAA,GAAK,IAGbP,EAAU8a,aAAe9a,EAAU+a,mBAAqB,SAAS3V,EAAQyV,EAAYtR,GACzD,WAAvB,EAAOsR,KACVtR,EAAOsR,EACPA,GAAa,GAIP,IAFHta,IAAAA,EAAIP,EAAU4a,YAAYxV,EAAQyV,GACrCra,EAAID,EAAES,SACER,GAAK,GACbD,EAAEC,GAAGsM,MAAMvD,EAAMnE,IAWf4V,IAAAA,GAAclY,EAAO,sBAAuB,SAASyU,EAAO5R,GACxD4T,KAAAA,iBAAmBhC,GAAS,IAAIxW,MAAM,KACtCka,KAAAA,UAAY,KAAK1B,gBAAgB,GACjCD,KAAAA,UAAY3T,GAAY,EACxBuV,KAAAA,OAASF,GAAYvZ,YACxB,GAiIDlB,GA/HJE,EAAIua,GAAYvZ,UAChBuZ,GAAYlK,QAAU,SACtBkK,GAAYG,IAAM,EAClB1a,EAAEgQ,SAAW,KACbhQ,EAAE2a,UAAY/H,EACd5S,EAAE0S,SAAWzB,EAEbjR,EAAEqM,MAAQ,SAASuO,GACd9a,IAEHC,EAFGD,EAAI,KAAKgZ,gBACZ5H,EAAK,KAAKlB,SAEP4K,GAA0B,MAA1BA,EAAO,KAAKJ,WACV1B,KAAAA,gBAAkB,QAGhB,IADP/Y,EAAID,EAAES,SACGR,GAAK,GACO,MAAhB6a,EAAO9a,EAAEC,KACZD,EAAE2F,OAAO1F,EAAG,GAIRmR,KAAAA,GACc,MAAhB0J,EAAO1J,EAAGpP,KACToP,EAAG1G,QACN0G,EAAG1G,MAAMoE,MAAQsC,EAAGtC,OAEjBsC,EAAGtC,OACNsC,EAAGtC,MAAMpE,MAAQ0G,EAAG1G,MACpB0G,EAAGtC,MAAQ,MACD,KAAKoB,WAAakB,IACvBlB,KAAAA,SAAWkB,EAAG1G,QAGrB0G,EAAKA,EAAG1G,MAEF,OAAA,GAGRxK,EAAE6a,KAAO7a,EAAE8a,YAAc,SAASF,GAG1B1J,IAFHA,IACHC,EADGD,EAAK,KAAKlB,SAEPkB,IACNC,EAAMyJ,EAAO,KAAKJ,YAAuB,MAARtJ,EAAGpP,GAAa8Y,EAAQ1J,EAAGpP,EAAExB,MAAM,KAAKka,UAAY,KAAKtY,KAAK,OACpE,mBAATiP,IACJ,IAATD,EAAG7I,EACN6I,EAAGjN,EAAEqO,SAASf,EAAIJ,EAElBD,EAAGK,EAAIJ,GAGTD,EAAKA,EAAG1G,OAIVjL,EAAU+Y,eAAiB,SAAS5V,EAAM+J,GACrCyE,IACH+F,EAAS8D,EAAKC,EAAOC,EAAMnM,EADxBoC,EAAKzE,EAAMuD,SAEXtN,GAAS,oBAATA,EAA4B,CAExBwO,KAAAA,GAAI,CAGH6J,IAFPjM,EAAOoC,EAAG1G,MACVuQ,EAAMC,EACCD,GAAOA,EAAIrV,GAAKwL,EAAGxL,IACzBqV,EAAMA,EAAIvQ,OAEN0G,EAAGtC,MAAQmM,EAAMA,EAAInM,MAAQqM,GACjC/J,EAAGtC,MAAMpE,MAAQ0G,EAEjB8J,EAAQ9J,GAEJA,EAAG1G,MAAQuQ,GACfA,EAAInM,MAAQsC,EAEZ+J,EAAO/J,EAERA,EAAKpC,EAENoC,EAAKzE,EAAMuD,SAAWgL,EAEhB9J,KAAAA,GACFA,EAAGkC,IAA+B,mBAAhBlC,EAAGjN,EAAEvB,IAA2BwO,EAAGjN,EAAEvB,OAC1DuU,GAAU,GAEX/F,EAAKA,EAAG1G,MAEFyM,OAAAA,GAGRsD,GAAYW,SAAW,SAASC,GAExB,IADHpb,IAAAA,EAAIob,EAAQ5a,SACPR,GAAK,GACTob,EAAQpb,GAAG2a,MAAQH,GAAYG,MAClC9G,GAAU,IAAIuH,EAAQpb,IAAMya,WAAaW,EAAQpb,IAG5C,OAAA,GAIRqC,EAAUqW,OAAS,SAASP,GACvB,KAACA,GAAWA,EAAOkD,UAAalD,EAAOtW,MAASsW,EAAOwC,KAAa,KAAA,6BACpEU,IAUHvI,EAVGuI,EAAWlD,EAAOkD,SACrBlW,EAAWgT,EAAOhT,UAAY,EAC9BmW,EAAiBnD,EAAOmD,eACxBnY,EAAM,CAACtB,KAAK,eAAgBsY,IAAI,WAAY5N,KAAK,QAASmG,MAAM,OAAQM,IAAI,OAAQuI,QAAQ,mBAC5FC,EAASlZ,EAAO,WAAa+Y,EAASvK,OAAO,GAAG2K,cAAgBJ,EAASnO,OAAO,GAAK,SACpF,WACCsN,GAAYtZ,KAAK,KAAMma,EAAUlW,GAC5B4T,KAAAA,gBAAkBuC,GAAkB,KACpB,IAAlBnD,EAAO5Y,QACZU,EAAIub,EAAOva,UAAY,IAAIuZ,GAAYa,GAInCvI,IAAAA,KAFL7S,EAAE2I,YAAc4S,EAChBA,EAAOb,IAAMxC,EAAOwC,IACPxX,EACiB,mBAAlBgV,EAAOrF,KACjB7S,EAAEkD,EAAI2P,IAASqF,EAAOrF,IAKjB0I,OAFPA,EAAOlL,QAAU6H,EAAO7H,QACxBkK,GAAYW,SAAS,CAACK,IACfA,GAKRzb,EAAIX,EAAOsc,SACJ,CACD1b,IAAAA,EAAI,EAAGA,EAAID,EAAES,OAAQR,IACzBD,EAAEC,KAEEC,IAAAA,KAAKoB,EACJA,EAAWpB,GAAGuB,MAClBpC,EAAOuc,QAAQC,IAAI,wCAA0C3b,GAOzDT,OAFPW,GAAgB,EAETX,EA94De,CAg5DrBL,GAeI,QAAA,QAAA,QAAA,UAAA,EAbA,IAAIoD,EAAUpD,EAASU,iBAavB,QAAA,QAAA,EAZP,IAAIgc,EAAatZ,EAAQuZ,IAAIC,UAElB7N,EAAiB2N,EAAWG,KAAK9N,eAUrC,QAAA,eAAA,EATA,IAAIrF,EAAYgT,EAAWG,KAAKnT,UAShC,QAAA,UAAA,EARA,IAAIpG,EAAOF,EAAQE,KAQnB,QAAA,KAAA,EAPA,IAAI6B,EAAS/B,EAAQ+B,OAOrB,QAAA,OAAA,EANA,IAAI2X,EAAS3X,EAMb,QAAA,OAAA,EALA,IAAI4X,EAAS3Z,EAAQ2Z,OAKrB,QAAA,OAAA,EAJA,IAAIC,EAAS5Z,EAAQ4Z,OAIrB,QAAA,OAAA,EAHA,IAAIC,EAAS7Z,EAAQ6Z,OAGrB,QAAA,OAAA,EAFA,IAAIC,EAAS9Z,EAAQ8Z,OAErB,QAAA,OAAA,EADA,IAAI7B,EAAcjY,EAAQiY,YAC1B,QAAA,YAAA,EAAA,IAAI7V,EAAkBkX,EAAWlT,OAAOhE,gBAAxC,QAAA,gBAAA;;ACzxCA,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,OAAA,eAAA,QAAA,YAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,OAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,QAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,QAAA,aAAA,QAAA,QAAA,QAAA,cAAA,EAhpBP,IAAA,EAAA,EAAA,QAAA,mBAgpBO,SAAA,EAAA,GAAA,GAAA,GAAA,EAAA,WAAA,OAAA,EAAA,IAAA,EAAA,GAAA,GAAA,MAAA,EAAA,IAAA,IAAA,KAAA,EAAA,GAAA,OAAA,UAAA,eAAA,KAAA,EAAA,GAAA,CAAA,IAAA,EAAA,OAAA,gBAAA,OAAA,yBAAA,OAAA,yBAAA,EAAA,GAAA,GAAA,EAAA,KAAA,EAAA,IAAA,OAAA,eAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,OAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,GAAA,OAAA,EAAA,mBAAA,QAAA,iBAAA,OAAA,SAAA,SAAA,GAAA,cAAA,GAAA,SAAA,GAAA,OAAA,GAAA,mBAAA,QAAA,EAAA,cAAA,QAAA,IAAA,OAAA,UAAA,gBAAA,IAAA,GA7oBPxF,EAASkD,SAAAA,UAAU,WAAY,CAAC,iBAAiB,sBAAsB,aAAc,WAE/E3B,IAAAA,EAAS,SAASX,GAChBY,IAEHX,EAFGW,EAAI,GACPC,EAAIb,EAAES,OAEFR,IAAAA,EAAI,EAAGA,IAAMY,EAAGD,EAAEE,KAAKd,EAAEC,OACvBW,OAAAA,GAER2b,EAAc,SAASvT,EAAMoG,EAASnP,GACjCuc,IACHtc,EAAGmR,EADAmL,EAAMxT,EAAKyT,MAEVvc,IAAAA,KAAKsc,EACTnL,EAAMmL,EAAItc,GACV8I,EAAK9I,GAAsB,mBAATmR,EAAuBA,EAAIpR,EAAGmP,EAAQnP,GAAImP,GAAWiC,EAAIpR,EAAIoR,EAAI5Q,eAE7EuI,EAAKyT,OAGbC,EAAc,SAAS1P,GAClB,GAAc,mBAAPA,EACHA,OAAAA,EAEJhE,IAAAA,EAAsB,WAAd,EAAOgE,GAAmBA,EAAI,CAAC2P,KAAK3P,GAC/CzJ,EAAOyF,EAAKzF,KACZ2H,EAAOlC,EAAKkC,MAAQ,EACpB0R,EAAO5T,EAAK4T,MAAQ,EACpBC,EAAQ,GACRC,EAAgBvJ,MAAMrI,GACtB6R,EAAO/T,EAAK+T,KACZnP,EAAQ,CAACoP,OAAO,GAAKzL,IAAI,GAAGrG,IAAS,EAC/B,OAAA,SAASjL,EAAG4E,EAAQ7E,GACtBa,IAEHoc,EAASC,EAASC,EAAGC,EAAGC,EAAGvZ,EAAGwZ,EAAKnV,EAAKoV,EAFrC1c,GAAKb,GAAKgJ,GAAMvI,OACnB+c,EAAYX,EAAMhc,GAEf,IAAC2c,EAAW,CAEX,KADJD,EAAsB,SAAdvU,EAAKyU,KAAmB,GAAKzU,EAAKyU,MAAQ,CAACC,EAAAA,IAAW,IACnD,CAEHJ,IADPA,GAAOI,EAAAA,EACAJ,GAAOA,EAAMtd,EAAEud,KAAQI,wBAAwBC,OAASL,EAAO1c,IACtE0c,IAOIzZ,IALL0Z,EAAYX,EAAMhc,GAAK,GACvBoc,EAAUH,EAAiB5U,KAAKC,IAAIoV,EAAM1c,GAAK+M,EAAS,GAAM1C,EAAOqS,EACrEL,EAAUJ,EAAgBjc,EAAI+M,EAAQ2P,EAAO,GAAOrS,EAAOqS,EAAQ,EACnED,EAAM,EACNnV,EAAMuV,EAAAA,EACD5Z,EAAI,EAAGA,EAAIjD,EAAGiD,IAClBqZ,EAAKrZ,EAAIyZ,EAAQN,EACjBG,EAAIF,GAAYpZ,EAAIyZ,EAAQ,GAC5BC,EAAU1Z,GAAKuZ,EAAKN,EAAkC7U,KAAK2V,IAAc,MAATd,EAAgBK,EAAID,GAAzDjV,KAAK4V,KAAKX,EAAIA,EAAIC,EAAIA,GAC7CC,EAAIC,IACPA,EAAMD,GAEHA,EAAIlV,IACPA,EAAMkV,GAGRG,EAAUF,IAAMA,EAAMnV,EACtBqV,EAAUrV,IAAMA,EAChBqV,EAAUxQ,EAAInM,EAAImI,EAAK+U,QAAW/U,EAAK2T,MAAQY,EAAO1c,EAAIA,EAAI,EAAKkc,EAA2C,MAATA,EAAelc,EAAI0c,EAAOA,EAArDrV,KAAKoV,IAAIC,EAAM1c,EAAI0c,KAA4C,EACzIC,EAAU5c,EAAKC,EAAI,EAAK+b,EAAO/b,EAAI+b,EAG7BY,OADP3c,GAAK2c,EAAUvd,GAAKud,EAAUrV,KAAOqV,EAAUF,IACxCE,EAAU5c,GAAK2C,EAAOA,EAAKU,SAASpD,GAAKA,GAAK2c,EAAUxQ,IAGjEgR,EAAW,SAAXA,EAAoBnZ,EAAQkE,EAAUC,GAC3B7H,EAAAA,QAAAA,KAAK,KAAM0D,EAAQkE,EAAUC,GAClCiV,KAAAA,OAAS,EACTC,KAAAA,OAA4B,IAAnB,KAAKlV,KAAKsM,QAAmB,KAAKtM,KAAK6M,SAChDsI,KAAAA,QAAU,KAAKnV,KAAKuM,QAAU,EAC9B6I,KAAAA,aAAe,KAAKpV,KAAKwM,aAAe,EACzC,KAAK2I,SACH1R,KAAAA,UAAS,GAEVZ,KAAAA,OAASmS,EAAS9c,UAAU2K,QAGlCwS,EAAqB5e,EAAUiU,QAAAA,WAC/BzD,EAAcoO,EAAmBnP,WACjClO,EAAWqd,EAAmB1K,QAC9BzT,EAAI8d,EAAS9c,UAAYzB,EAAU0Y,QAAAA,GAAG,GAAI,GAAK,IAC/CmG,EAAc,GAEfN,EAASzN,QAAU,QACnBrQ,EAAE2I,YAAcmV,EAChB9d,EAAEsM,OAAOnC,KAAM,EACf2T,EAASzD,aAAeyD,EAASxD,mBAAqB/a,EAAU8a,QAAAA,aAChEyD,EAAS3D,YAAc5a,EAAU4a,QAAAA,YACjC2D,EAASlW,aAAerI,EAAUqI,QAAAA,aAClCkW,EAAS7T,OAAS1K,EAAU0K,QAAAA,OAC5B6T,EAASnS,OAASpM,EAAUoM,QAAAA,OAC5BmS,EAASO,WAAa7B,EAEtBxc,EAAE6L,WAAa,WAMPtM,OALFye,KAAAA,OAA4B,IAAnB,KAAKlV,KAAKsM,QAAmB,KAAKtM,KAAK6M,SAChDsI,KAAAA,QAAU,KAAKnV,KAAKuM,QAAU,EAC9B6I,KAAAA,aAAe,KAAKpV,KAAKwM,aAAe,EACxCgJ,KAAAA,UAAY,KACZ/R,KAAAA,UAAS,GACPhN,EAAUyB,QAAAA,UAAU6K,WAAW5K,KAAK,OAG5CjB,EAAEue,SAAW,SAASzV,EAAM0V,GACvBtF,IAGHlZ,EAFAye,EADU,KACM/Q,MAChBsK,EAFU,KAEOlP,KAAKQ,iBAAmBR,EAAKQ,gBAW1CtJ,IAAAA,KATDwe,GAJO,KAIexX,WAJf,KAIiC2D,UAAUZ,QAJ3C,KAKL/C,WALK,KAKa2D,UAAUZ,MALvB,KAMLwC,UAAS,GANJ,KAODpC,IAPC,KAQJ2B,UAAS,GAAM,GARX,KAUJnB,UAAU0D,OAVN,KAAA,KAUwBrH,WAVxB,KAU0CiC,SAG3CH,EAbC,KAcLA,KAAK9I,GAAK8I,EAAK9I,GAEjBkZ,GAhBO,KAgBF9O,UAAY4N,EAChBwG,GAAAA,EAjBM,KAkBJpU,UAAW,EACZ4N,GAnBK,KAoBHrM,OAAO,GAAG,GAAM,QASlBuN,GA7BK,KAuBA/O,KAvBA,KAwBH2B,UAAS,GAAM,GAxBZ,KA0BAqE,yBA1BA,KA0BgCH,UAC9BsI,EAAAA,QAAAA,eAAe,aA3BjB,MAAA,KA6BAvO,MA7BA,KA6BahB,UAAY,KAAO,CACpCsQ,IAAAA,EA9BI,KA8BY/O,WA9BZ,KA+BHqB,OAAO,GAAG,GAAM,GA/Bb,KAgCHvB,UAAW,EAhCR,KAiCHuB,OAAO0N,GAAU,GAAM,QAIxBH,GArCI,KAmCH9O,UAAW,EAnCR,KAoCHuN,QApCG,KAqCC5N,MAAQ,GAAKiO,EAGd9G,IAFHwN,IACiBC,EADjBD,EAAM,GAAK,EAAID,GAClBvN,EAvCM,KAuCIlB,SACJkB,GACNyN,EAAWzN,EAAG1L,EAAI0L,EAAG3L,EACrB2L,EAAG3L,GAAKmZ,EACRxN,EAAG1L,EAAImZ,EAAWzN,EAAG3L,EACrB2L,EAAKA,EAAG1G,MAMN0O,OAlDI,MAqDZlZ,EAAE2L,OAAS,SAASlE,EAAMwD,EAAgBW,GACpC,KAAKxB,UAAiC,IAAnB,KAAKrB,WAAmB,KAAKD,KAAKuM,QACpDxJ,KAAAA,aAEFqN,IAOHC,EAAYpU,EAAUmM,EAAI0N,EAAeza,EAAGzB,EAAM6W,EAAKH,EAAazD,EANpEkJ,EADU,KACQ3U,OADR,KAC6CwB,gBAD7C,KACuB1C,eACjCqQ,EAFU,KAEMtP,MAChB+U,EAHU,KAGWxU,WACrByU,EAJU,KAIOhB,OACjBlV,EALU,KAKME,UAChBuQ,EANU,KAMa/O,aA4GpB8O,GA1GA5R,GAAQoX,EA5FD,MA4FwBpX,GAAQ,GARhC,KASL6C,WAAauU,EATR,KAULd,OAVK,KAUSE,QAVT,KAWDD,OAA+B,IAAP,EAXvB,KAWcD,SAXd,KAYJhU,MAAQ,EAZJ,KAaJ2D,MAbI,KAaS6C,MAAMvM,SAbf,KAa+BuM,MAAMxM,SAAS,GAAK,IAbnD,KAeJgG,MAAQlB,EAfJ,KAgBJ6E,MAhBI,KAgBS6C,MAAMvM,SAhBf,KAgB+BuM,MAAMxM,SAAS,GAAK,GAhBnD,KAkBAyF,YACT2P,GAAa,EACbpU,EAAW,aACX6G,EAASA,GArBA,KAqBcjB,UAAUuD,oBAEjB,IAAbrF,IAvBM,KAuBmBuB,WAvBnB,KAuBqCtB,KAAK0M,MAAQ5J,KAvBlD,KAwBA5E,aAxBA,KAwBoB2D,UAAU5B,YACtCtB,EAAO,IAEJ6R,EAAkB,GAAM7R,GAAQ,GAAKA,IA/GhC,MAAA,OA+GuD6R,GAA8C,YA3BrG,KA2B4F/P,OAAyB+P,IAAoB7R,IACjJmE,GAAQ,EACJ0N,EAjHI,OAkHPvU,EAAW,sBA9BJ,KAiCJwF,aAAe6O,GAAgBnO,GAAkBxD,GAAQ6R,IAAoB7R,EAAQA,EArHjF,OAwHAA,EAxHA,MAoFA,KAqCL6C,WArCK,KAqCaP,MArCb,KAqC0BgU,OAAS,EArCnC,KAsCLrQ,MAtCK,KAsCQ6C,MAAMvM,SAtCd,KAsC8BuM,MAAMxM,SAAS,GAAK,GACtC,IAAlB+a,GAAqC,IAAbjW,GAAkByQ,EAAkB,KAC/DvU,EAAW,oBACXoU,EAzCS,KAyCS3P,WAEf/B,GA/HM,KAgITA,EAAO,EACGA,EAAO,IA7CR,KA8CJ4B,SAAU,EACE,IAAbR,IA/CK,KA+CoBuB,WA/CpB,KA+CsCtB,KAAK0M,MAAQ5J,KACvD0N,GAAmB,IACtB1N,GAAQ,GAjDD,KAmDHrB,aAAe6O,GAAgBnO,GAAkBxD,GAAQ6R,IAAoB7R,EAAQA,EAvIlF,OAoFA,KAsDA2C,WACTwB,GAAQ,KAvDC,KA0DLtB,WA1DK,KA0DaP,MAAQtC,EACV,IA3DX,KA2DDwW,UACRW,EAAgB/V,EA5DP,KA4DuBqV,aA5DvB,KA6DJH,OA7DI,KA6DWzT,WAAasU,GAAkB,EAC/B,IA9DX,KA8DAb,QA9DA,KA8DuBA,SA9DvB,KA8DuCzT,WAAasU,GAAiBE,GAAiBrX,GA9DtF,KA+DHsW,SA/DG,KAiEJhU,MAjEI,KAiESO,WAjET,KAiE4ByT,OAASa,EAjErC,KAkEAZ,OAAiC,IAAP,EAlE1B,KAkEiBD,UAlEjB,KAmEHhU,MAAQlB,EAnEL,KAmEqBkB,OAC7B4L,EApEQ,KAoEQ2I,WApER,KAoE0BxV,KAAK6M,YApE/B,KAsEG2I,aACQ,IAAb3I,GAvEE,KAuEyBvL,SAvEzB,KA2EAkU,UAAY3I,GAAyB,IAAbA,EA3ExB,KA2EkDpF,MAASoF,aAAoBnT,EAArB,KAA6BmT,EAAWnT,EAAKU,KAAAA,IAAIyS,IAHhHA,EAxEK,KAwEW7M,KAAKzF,KAxEhB,KAyEAib,UAAY3I,EAAYA,EAAoCA,aAAoBnT,EAArB,KAA6BmT,EAAiC,mBAAdA,EAA4B,IAAInT,EAAJ,KAASmT,EAzEhJ,KAyE+J7M,KAAKqM,YAAc3S,EAAKU,KAAAA,IAAIyS,IAAapW,EAAU+Q,QAAAA,YAA/K/Q,EAAU+Q,QAAAA,cAzE7C,KA8EF5C,MAAQiI,EAAW,EAAIA,EAAS5R,UAAU8E,EA9ExC,KA8EwDkB,OAASlB,GAAY,IA9E7E,KAiFAkB,MAAQlB,EAjFR,KAkFHkB,MAAQlB,EAlFL,KAmFOkB,MAAQ,IAnFf,KAoFHA,MAAQ,IApFL,KAuFDoO,YAAcxC,GACtBxR,EAxFS,KAwFA4F,MAAQlB,GAGJ,KAFbnG,EAzFS,KAyFGyV,YAEgB,IAATzV,GAAcyB,GAAK,MACrCA,EAAI,EAAIA,GAEI,IAATzB,IACHyB,GAAK,GAEM,KAPZoV,EA1FS,KA0FEnB,YAQVjU,GAAKA,EACa,IAARoV,EACVpV,GAAKA,EAAIA,EACS,IAARoV,EACVpV,GAAKA,EAAIA,EAAIA,EACK,IAARoV,IACVpV,GAAKA,EAAIA,EAAIA,EAAIA,GAxGT,KA0GJuJ,MAAkB,IAAThL,EAAc,EAAIyB,EAAc,IAATzB,EAAcyB,EA1G1C,KA0GoD4F,MAAQlB,EAAW,GAAO1E,EAAI,EAAI,EAAKA,EAAI,GAE7FwR,IA5GF,KA6GJjI,MA7GI,KA6GS6C,MAAMxM,SA7Gf,KA6G6BgG,MAAQlB,KAK5CwQ,IAlHO,KAkHWtP,OAAU6B,GAASmT,IAlH9B,KAkHiDhB,OAAxD1E,CAKG,IAvHI,KAuHMjP,SAAU,CAEtB,GAzHM,KAwHLuN,SAxHK,KAyHAvN,UAzHA,KAyHiBD,IAC1B,OACM,IAAKyB,GA3HF,KA2HgBoE,YAAiC,IA3HjD,KA2HmClH,KAAK0M,MA3HxC,KA2H+DzM,WA3H/D,KA2HmFD,KAAK0M,OA3HxF,KA2HsGzM,WAO/G,OAlIS,KA4HJgB,MAAQsP,EA5HJ,KA6HJ/O,WAAawU,EA7HT,KA8HJvU,aAAe+O,EA9HX,KA+HJyE,OAASgB,EACdZ,EAAmBzK,WAAW9S,KAhIrB,WAAA,KAiIJwP,MAAQ,CAAC3I,EAAMwD,KAjIX,KAqIDlB,OAAUoP,GAAexD,EAEvBwD,GAAc,KAAK5I,MAAMvM,WAAa2R,IAvIvC,KAwIJjI,MAxII,KAwIS6C,MAAMxM,SAAyB,IAxIxC,KAwI8BgG,MAAe,EAAI,IAxIjD,KAsIJ2D,MAtII,KAsIS6C,MAAMxM,SAtIf,KAsI6BgG,MAAQlB,GA6BzCqI,KAxBY,IA3IR,KA2IFd,QA3IE,KA4ILA,OAAQ,GA5IH,KA+ID/G,UA/IC,KA+IkBgB,SA/IlB,KA+IkCN,QAAUsP,GAAY5R,GAAQ,IA/IhE,KAgJL4B,SAAU,GAEM,IAAlByV,IACmB,IAnJZ,KAmJD1U,UAAkB3C,EAAO,GAnJxB,KAoJJkQ,QApJI,KAsJDzH,WACJzI,GAAQ,EAvJH,KAwJHyI,SAASvE,OAAOlE,GAAM,EAAMmE,GACtB7G,IACXA,EAAW,aA1JH,KA6JD+D,KAAK4L,UAAiC,IA7JrC,KA6JsBpK,YAAiC,IAAbzB,GAAqBoC,GA7J/D,KA8JJ4B,UAAU,aAIjBqE,EAlKW,KAkKDlB,SACHkB,GACFA,EAAG7I,EACN6I,EAAGjN,EAAEiN,EAAGlR,GAAGkR,EAAG3L,EArKL,KAqKcmI,MAAQwD,EAAG1L,GAElC0L,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAG3L,EAvKP,KAuKgBmI,MAAQwD,EAAG1L,EAErC0L,EAAKA,EAAG1G,MAzKE,KA4KFE,YACJjD,EAAO,GA7KD,KA6KayI,UA7Kb,KA6K8BlJ,YA7K9B,KA8KJkJ,SAASvE,OAAOlE,GAAM,EAAMmE,GAE7BX,IAhLK,KAgLoBX,aAAewU,GAAiB/Z,IAhLpD,KAiLJ8H,UAAU,aAjLN,KAoLFkR,SAAWgB,IAAgB9T,GApLzB,KAoLmDd,KApLnD,KAoLiErB,KAAKkM,UApLtE,KAqLLnI,UAAU,aAEZ9H,IAvLO,KAuLaoF,MAAOyB,IAC1BnE,EAAO,GAxLD,KAwLWyI,WAxLX,KAwL6BxF,WAxL7B,KAwL+C1D,YAxL/C,KAyLJkJ,SAASvE,OAAOlE,GAAM,EAAMmE,GAE9BuN,IA3LM,KA4LAxO,UAAUuD,oBA5LV,KA6LHpC,UAAS,GAAO,GA7Lb,KA+LJzC,SAAU,IAEX4B,GAjMK,KAiMkBnC,KAAK/D,IAjMvB,KAkMJ8H,UAAU9H,GAEC,IAAb8D,GAxRM,OAoFA,KAoMiB0B,cAxRjB,OAwR8C6O,IApM9C,KAqMJ7O,aAAe,UAlFjBuU,IAnHM,KAmHiBxU,YAnHjB,KAmHsCI,YAAgBO,GAnHtD,KAoHJ4B,UAAU,cAwFlBiR,EAAS7F,GAAK,SAAStT,EAAQkE,EAAUC,GACjC,OAAA,IAAIgV,EAASnZ,EAAQkE,EAAUC,IAGvCgV,EAAS9S,KAAO,SAASrG,EAAQkE,EAAUC,GAGnC,OAFPA,EAAKuL,cAAe,EACpBvL,EAAKQ,gBAA2C,GAAxBR,EAAKQ,gBACtB,IAAIwU,EAASnZ,EAAQkE,EAAUC,IAGvCgV,EAAShE,OAAS,SAASnV,EAAQkE,EAAUkR,EAAUC,GAG/C,OAFPA,EAAO1F,QAAUyF,EACjBC,EAAO1Q,gBAA6C,GAA1B0Q,EAAO1Q,iBAAwD,GAA5ByQ,EAASzQ,gBAC/D,IAAIwU,EAASnZ,EAAQkE,EAAUmR,IAGvC8D,EAASkB,UAAYlB,EAASmB,MAAQ,SAAS/P,EAASrG,EAAUC,EAAM2F,EAASyQ,EAAeC,EAAqBC,GAChHtf,IAIHa,EAAGiM,EAAM7M,EAAGC,EAJTF,EAAI,GACPuf,EAAc7C,EAAY1T,EAAK2F,SAAWA,GAC1C8N,EAAQzT,EAAKyT,MACb+C,GAAaxW,EAAKwL,SAAW8J,GAAa7B,MAYtCxc,IAVAe,EAASoO,KACW,iBAAbA,IACVA,EAAU3P,EAAUwP,QAAAA,SAASG,IAAYA,GAEtCa,EAAYb,KACfA,EAAUzO,EAAOyO,KAInBvO,GADAuO,EAAUA,GAAW,IACT3O,OAAS,EAChBR,EAAI,EAAGA,GAAKY,EAAGZ,IAAK,CAEnBC,IAAAA,KADL4M,EAAO,GACG9D,EACT8D,EAAK5M,GAAK8I,EAAK9I,GASZsf,GAPA/C,IACHF,EAAYzP,EAAMsC,EAASnP,GACN,MAAjB6M,EAAK/D,WACRA,EAAW+D,EAAK/D,gBACT+D,EAAK/D,WAGVyW,EAAW,CAETtf,IAAAA,KADLsf,EAAY1S,EAAK0H,QAAU,GACjBxL,EAAKwL,QACdgL,EAAUtf,GAAK8I,EAAKwL,QAAQtU,GAE7Bqc,EAAYzP,EAAK0H,QAASpF,EAASnP,GAEpC6M,EAAKzD,MAAQkW,EAAYtf,EAAGmP,EAAQnP,GAAImP,IAAYtC,EAAKzD,OAAS,GAC9DpJ,IAAMY,GAAKue,IACdtS,EAAKsH,WAAa,WACbpL,EAAKoL,YACRpL,EAAKoL,WAAW/R,MAAM2G,EAAKsL,iBAAmB,KAAMrM,WAErDmX,EAAc/c,MAAMid,GAAsBtW,EAAKiE,eAAiB,KAAMoS,GAAuBf,KAG/Fte,EAAEC,GAAK,IAAI+d,EAAS5O,EAAQnP,GAAI8I,EAAU+D,GAEpC9M,OAAAA,GAGRge,EAASyB,YAAczB,EAAS0B,QAAU,SAAStQ,EAASrG,EAAUC,EAAM2F,EAASyQ,EAAeC,EAAqBC,GAGjHtB,OAFPhV,EAAKuL,cAAe,EACpBvL,EAAKQ,gBAA2C,GAAxBR,EAAKQ,gBACtBwU,EAASkB,UAAU9P,EAASrG,EAAUC,EAAM2F,EAASyQ,EAAeC,EAAqBC,IAGjGtB,EAAS2B,cAAgB3B,EAAS4B,UAAY,SAASxQ,EAASrG,EAAUkR,EAAUC,EAAQvL,EAASyQ,EAAeC,EAAqBC,GAGjItB,OAFP9D,EAAO1F,QAAUyF,EACjBC,EAAO1Q,gBAA6C,GAA1B0Q,EAAO1Q,iBAAwD,GAA5ByQ,EAASzQ,gBAC/DwU,EAASkB,UAAU9P,EAASrG,EAAUmR,EAAQvL,EAASyQ,EAAeC,EAAqBC,IAGnGtB,EAAS7D,YAAc,SAAS9Q,EAAOpE,EAAU4H,EAAQ3H,EAAO4E,GACxD,OAAA,IAAIkU,EAAS/Y,EAAU,EAAG,CAACoE,MAAMA,EAAO+K,WAAWnP,EAAUoP,iBAAiBxH,EAAQI,cAAc/H,EAAO6P,kBAAkB9P,EAAU+P,wBAAwBnI,EAAQrD,iBAAgB,EAAOM,UAAUA,EAAW0F,UAAU,KAGrOwO,EAAS5D,IAAM,SAASvV,EAAQmE,GACxB,OAAA,IAAIgV,EAASnZ,EAAQ,EAAGmE,IAGhCgV,EAAS6B,WAAa,SAAShb,GACtBpF,OAAAA,EAAU4a,QAAAA,YAAYxV,GAAQ,GAAMpE,OAAS,GAGlDqf,IAAAA,EAAiB,SAAjBA,EAA0BhV,EAAUiV,GAI/BpT,IAHH3M,IAAAA,EAAI,GACPggB,EAAM,EACNrT,EAAQ7B,EAASuD,OACX1B,GACFA,aAAiBlN,EAArB,QACCO,EAAEggB,KAASrT,GAEPoT,IACH/f,EAAEggB,KAASrT,GAGZqT,GADAhgB,EAAIA,EAAEkD,OAAO4c,EAAenT,EAAOoT,KAC3Btf,QAETkM,EAAQA,EAAMjC,MAER1K,OAAAA,GAERigB,EAAejC,EAASiC,aAAe,SAASF,GACxCD,OAAAA,EAAehX,EAAUc,UAAAA,cAAemW,GAAkB7c,OAAQ4c,EAAehX,EAAUiB,UAAAA,oBAAqBgW,KAGzH/B,EAASkC,QAAU,SAASC,EAAU5J,EAAQ6J,EAAcC,GAC7C,MAAV9J,IACHA,GAAS,GAEU,MAAhB6J,IACHA,GAAe,GAEZpgB,IAGHsgB,EAAM3T,EAAO1M,EAHVD,EAAIigB,EAA2B,GAAbI,GACrBxf,EAAIb,EAAES,OACN8f,EAAWhK,GAAU6J,GAAgBC,EAEjCpgB,IAAAA,EAAI,EAAGA,EAAIY,EAAGZ,IAClB0M,EAAQ3M,EAAEC,IACNsgB,GAAY5T,aAAiBwB,EAA7B,iBAAkDmS,EAAQ3T,EAAM9H,SAAW8H,EAAM3D,KAAKoL,aAAgBgM,GAAkB7J,IAAW+J,KAClIH,EACHxT,EAAMnB,UAAUmB,EAAMjD,UAAY,EAAIiD,EAAMf,iBAE5Ce,EAAMX,UAAS,GAAO,KAM1BgS,EAASwC,kBAAoB,SAASC,EAAQN,GACzCM,GAAU,MAAVA,EAAAA,CAGA5W,IACH7J,EAAG0gB,EAAWxgB,EAAGD,EAAGY,EADjBgJ,EAAKwU,EAAmBrK,YAQxBhT,GANmB,iBAAZyf,IACVA,EAAShhB,EAAUwP,QAAAA,SAASwR,IAAWA,GAEpCxQ,EAAYwQ,KACfA,EAAS9f,EAAO8f,IAEbzf,EAASyf,GAEL,IADPxgB,EAAIwgB,EAAOhgB,SACFR,GAAK,GACb+d,EAASwC,kBAAkBC,EAAOxgB,GAAIkgB,OAHpCnf,CAQCd,IAAAA,KADLF,EAAI,GACM6J,EAEF6W,IADPA,EAAY7W,EAAG3J,GAAG2E,OAAO8b,WAClBD,GACFA,IAAcD,IACjBzgB,EAAIA,EAAEkD,OAAO2G,EAAG3J,GAAGqW,SAEpBmK,EAAYA,EAAUC,WAInB1gB,IADLY,EAAIb,EAAES,OACDR,EAAI,EAAGA,EAAIY,EAAGZ,IACdkgB,GACHngB,EAAEC,GAAGuL,UAAUxL,EAAEC,GAAG2L,iBAErB5L,EAAEC,GAAG+L,UAAS,GAAO,MAInB4U,IAAAA,EAAe,SAASvV,EAAOkL,EAAQ6J,EAAcC,GACxD9J,GAAqB,IAAXA,EACV6J,GAAiC,IAAjBA,EAMT,IAJHpgB,IAGHsgB,EAAM3T,EAHH3M,EAAIigB,EADRI,GAA2B,IAAdA,GAEZE,EAAWhK,GAAU6J,GAAgBC,EACrCpgB,EAAID,EAAES,SAEER,GAAK,GACb0M,EAAQ3M,EAAEC,IACNsgB,GAAY5T,aAAiBwB,EAA7B,iBAAkDmS,EAAQ3T,EAAM9H,SAAW8H,EAAM3D,KAAKoL,aAAgBgM,GAAkB7J,IAAW+J,IACtI3T,EAAMzC,OAAOmB,IAmGT2S,OA9FPA,EAAS6C,SAAW,SAAStK,EAAQ6J,EAAcC,GAClDO,GAAa,EAAMrK,EAAQ6J,EAAcC,IAG1CrC,EAAS8C,UAAY,SAASvK,EAAQ6J,EAAcC,GACnDO,GAAa,EAAOrK,EAAQ6J,EAAcC,IAG3CrC,EAAS+C,gBAAkB,SAAStY,GAC/BoB,IAAAA,EAAKf,EAAUc,UAAAA,cAClBzF,EAAI1E,EAAU0K,QAAAA,OAAOxC,KAClB,OAACM,UAAUxH,QAGfgI,EAAQA,GA1eG,KA2eXoB,EAAG3C,WAAa/C,GAAMA,EAAI0F,EAAG3C,YAAc2C,EAAGP,WAAab,EAC3DoB,EAAKf,EAAUiB,UAAAA,oBACf5F,EAAI1E,EAAU0K,QAAAA,OAAOvC,MACrBiC,EAAG3C,WAAa/C,GAAMA,EAAI0F,EAAG3C,YAAc2C,EAAGP,WAAab,EAC3DoB,EAAGP,WAAaR,EAAUc,UAAAA,cAAcN,WAAab,EAC9CA,GARCoB,EAAGP,YAcZpJ,EAAEwN,SAAW,SAASjF,EAAO0C,GACpB,OAAClD,UAAUxH,OAAyE,KAAK+K,UAAW,KAAKzC,YAAe,KAAKmV,OAA+B,IAAP,EAAd,KAAKD,QAAqB,EAAIxV,EAAQA,GAAU,KAAKwV,QAAU,KAAKhV,UAAY,KAAKmV,cAAgBjT,GAAtN,KAAKpC,WAAa,KAAKkB,MAAQ,KAAKhB,UAAY,KAAK2E,OAGpF1N,EAAEyN,cAAgB,SAASlF,EAAO0C,GACzB,OAAClD,UAAUxH,OAAmD,KAAK+K,UAAW,KAAKI,gBAAkBnD,EAAO0C,GAAvF,KAAKX,WAAa,KAAKoB,iBAGrD1L,EAAEyH,KAAO,SAASc,EAAO0C,GACpB,IAAClD,UAAUxH,OACP,OAAA,KAAKwJ,MAET,KAAKG,QACHwB,KAAAA,gBAEF7C,IAAAA,EAAW,KAAKE,UACnBwT,EAAQ,KAAKwB,OACb+C,EAAWvE,GAAS1T,EAAW,KAAKqV,cAI9B,OAHH3V,EAAQM,IACXN,EAAQM,GAEF,KAAKyC,UAAW,KAAK0S,OAAkB,EAARzB,EAAc1T,EAAWN,EAAQuY,EAAW,KAAK7C,QAAU1V,EAAQuY,EAAWvY,EAAO0C,IAG5HjL,EAAE6I,SAAW,SAASN,GACjB,OAACR,UAAUxH,OAGRqI,EAAU5H,UAAAA,UAAU6H,SAAS5H,KAAK,KAAMsH,GAFvC,KAAKQ,WAKd/I,EAAE0L,cAAgB,SAASnD,GACtB,OAACR,UAAUxH,QAQW,IAAlB,KAAK0d,QAAkB,KAAO,KAAKpV,UAAWN,EAAS,KAAK0V,QAAU,KAAKC,eAAkB,KAAKD,QAAU,KAP/G,KAAK/T,SAEHlB,KAAAA,gBAAoC,IAAlB,KAAKiV,QAAkB,aAAe,KAAKlV,WAAa,KAAKkV,QAAU,GAAM,KAAKC,aAAe,KAAKD,QACxH/T,KAAAA,QAAS,GAER,KAAKlB,iBAKdhJ,EAAEqV,OAAS,SAAS9M,GACf,OAACR,UAAUxH,QAGV0d,KAAAA,QAAU1V,EACR,KAAKgE,UAAS,IAHb,KAAK0R,SAMdje,EAAEsV,YAAc,SAAS/M,GACpB,OAACR,UAAUxH,QAGV2d,KAAAA,aAAe3V,EACb,KAAKgE,UAAS,IAHb,KAAK2R,cAMdle,EAAEoV,KAAO,SAAS7M,GACb,OAACR,UAAUxH,QAGVyd,KAAAA,MAAQzV,EACN,MAHC,KAAKyV,OAOPF,IAEL,GAEG,IAAIA,EAAWxb,EAAQwb,QAAAA,SACvB,QAAA,QAAA,QAAA,SAAA,EAAA,IAAIiD,EAAejD,EAAnB,QAAA,aAAA;;AC0sEA,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,QAAA,QAAA,QAAA,eAAA,EA11FP,IAAA,EAAA,EAAA,QAAA,mBA01FO,SAAA,EAAA,GAAA,GAAA,GAAA,EAAA,WAAA,OAAA,EAAA,IAAA,EAAA,GAAA,GAAA,MAAA,EAAA,IAAA,IAAA,KAAA,EAAA,GAAA,OAAA,UAAA,eAAA,KAAA,EAAA,GAAA,CAAA,IAAA,EAAA,OAAA,gBAAA,OAAA,yBAAA,OAAA,yBAAA,EAAA,GAAA,GAAA,EAAA,KAAA,EAAA,IAAA,OAAA,eAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,OAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,GAAA,OAAA,EAAA,mBAAA,QAAA,iBAAA,OAAA,SAAA,SAAA,GAAA,cAAA,GAAA,SAAA,GAAA,OAAA,GAAA,mBAAA,QAAA,EAAA,cAAA,QAAA,IAAA,OAAA,UAAA,gBAAA,IAAA,GAx1FN5e,EAASkD,SAAAA,UAAU,oBAAqB,CAAC,sBAAsB,aAAc,WAGxE4e,IAMHC,EACAC,EACAC,EACArI,EATGkI,EAAY,SAAZA,IACU/f,EAAAA,YAAAA,KAAK,KAAM,OAClB6X,KAAAA,gBAAgBvY,OAAS,EACzBmS,KAAAA,SAAWsO,EAAUhgB,UAAU0R,UAErC/S,EAAWT,EAASkD,SAAAA,UAAUE,QAK9B8e,EAAgB,GAChBphB,EAAIghB,EAAUhgB,UAAY,IAAIuZ,EAAJ,YAAgB,OAE3Cva,EAAE2I,YAAcqY,EAChBA,EAAU3Q,QAAU,QACpB2Q,EAAUtG,IAAM,EAChBsG,EAAUK,4BAA8B,EACxCL,EAAUM,gBAAkB,cAC5BN,EAAUO,qBAAsB,EAEhCP,EAAUQ,UAAY,CAACC,IADvBzhB,EAAI,KAC0B0hB,MAAM1hB,EAAG2hB,OAAO3hB,EAAG0d,KAAK1d,EAAG4hB,MAAM5hB,EAAG6hB,OAAO7hB,EAAG8hB,SAAS9hB,EAAG+hB,QAAQ/hB,EAAGgiB,OAAOhiB,EAAGiiB,YAAYjiB,EAAGkiB,WAAW,IAGnIC,IAgCHC,EACAC,EAEAC,EACAC,EACAC,EACAC,EAwBAhR,EACAiR,EA/DGP,EAAU,4BACbQ,EAAa,uDACbC,EAAa,mDACbC,EAAuB,qDACvBC,EAAU,0CACVC,EAAa,wBACbC,EAAc,uBACdC,EAAiB,mBACjBC,EAAkB,0BAClBC,EAAa,aACbC,EAAW,WACXC,EAAY,aACZC,EAAU,yCACVC,EAAa,SAAS/d,EAAGge,GAAYA,OAAAA,EAAEhI,eACvCiI,EAAY,wBACZC,EAAkB,iCAClBC,EAAkB,sDAClBC,EAAyB,wBACzBC,EAAc,WACdC,EAAW9b,KAAK+b,GAAK,IACrBC,EAAW,IAAMhc,KAAK+b,GACtBE,EAAW,GACXC,EAAgB,CAAC7U,MAAM,IACvB5P,EAAOP,EAASQ,SAAAA,UAAY,CAACykB,cAAe,WAAmBD,OAAAA,IAC/DE,EAAiB,SAAS1hB,EAAMrC,GAC3BqD,IAAAA,EAAIjE,EAAK4kB,gBAAkB5kB,EAAK4kB,gBAAgBhkB,GAAM,+BAAgCqC,GAAQjD,EAAK0kB,cAAczhB,GAC9GgB,OAAAA,EAAE2L,MAAQ3L,EAAIjE,EAAK0kB,cAAczhB,IAEzC4hB,EAAWF,EAAe,OAC1BG,EAAWH,EAAe,OAC1B5Q,EAAawN,EAAUxN,WAAa,CAAC4N,cAAcA,GACnDoD,GAAUtlB,EAASulB,SAAAA,WAAa,IAAIC,WAAa,GAQjDC,EAAoB,WACf5kB,IAAAA,EAAIykB,EAAOtX,QAAQ,WACtBpN,EAAIskB,EAAe,KAOhB,OANJ9B,GAA2C,IAA9BkC,EAAOtX,QAAQ,YAAkD,IAA9BsX,EAAOtX,QAAQ,aAA4B,IAAPnN,GAAYwS,WAAWiS,EAAOvX,OAAOlN,EAAE,EAAG,IAAM,GACpIyiB,EAAgBF,GAAc/P,WAAWiS,EAAOvX,OAAOuX,EAAOtX,QAAQ,YAAY,EAAG,IAAM,EAC3FqV,GAA6C,IAA/BiC,EAAOtX,QAAQ,YACxB,8BAA+B0X,KAAKJ,IAAY,uCAAwCI,KAAKJ,MACjG/B,EAAUlQ,WAAYsS,OAAOC,OAEzBhlB,IAGLA,EAAEuP,MAAM0V,QAAU,uBACX,QAAQpS,KAAK7S,EAAEuP,MAAM2V,UAbT,GAepBC,EAAgB,SAASnY,GAChBkW,OAAAA,EAAYrQ,KAAsB,iBAAP7F,EAAmBA,GAAKA,EAAEoY,aAAepY,EAAEoY,aAAarT,OAAS/E,EAAEuC,MAAMwC,SAAW,IAAUU,WAAYsS,OAAOC,IAAO,IAAQ,GAEpKK,EAAO,SAAS3f,GACXtG,EAASwc,SAAAA,SACZA,QAAQC,IAAInW,IAMd4f,EAAa,GACbC,EAAU,GAGVC,EAAmB,SAAStlB,EAAG0D,GAE1B8B,IACH1F,EAAGC,EADAyF,GADJ9B,EAAIA,GAAK4gB,GACCjV,MAEN7J,QAAS+f,IAAT/f,EAAExF,GACEA,OAAAA,EAKD,IAHPA,EAAIA,EAAE6Q,OAAO,GAAG2K,cAAgBxb,EAAEiN,OAAO,GACzCnN,EAAI,CAAC,IAAI,MAAM,KAAK,KAAK,UACzBC,EAAI,IACKA,GAAK,QAAmBwlB,IAAd/f,EAAE1F,EAAEC,GAAGC,KACtBD,OAAAA,GAAK,GAERqlB,EAAa,KADbC,EAAiB,IAANtlB,EAAW,KAAOD,EAAEC,IACJylB,cAAgB,IACpCH,EAAUrlB,GAEX,MAGRylB,EAA0C,oBAAZtmB,OAA0BA,OAASM,EAAKimB,aAAe,CAACC,iBAAiB,cACvGC,GAAoB,SAASliB,GACrB+hB,OAAAA,EAAoBE,iBAAiBjiB,IAc7CmiB,GAAY7E,EAAU8E,SAAW,SAAS7hB,EAAGjE,EAAG+lB,EAAIC,EAAMC,GACrDC,IAAAA,EACA,OAACvB,GAA4B,YAAN3kB,IAGtBgmB,GAAQ/hB,EAAEoL,MAAMrP,GACpBkmB,EAAKjiB,EAAEoL,MAAMrP,IACF+lB,EAAKA,GAAMH,GAAkB3hB,IACxCiiB,EAAKH,EAAG/lB,IAAM+lB,EAAGI,iBAAiBnmB,IAAM+lB,EAAGI,iBAAiBnmB,EAAEsT,QAAQ8P,EAAU,OAAOoC,eAC7EvhB,EAAEihB,eACZgB,EAAKjiB,EAAEihB,aAAallB,IAEL,MAARimB,GAAkBC,GAAa,SAAPA,GAAwB,SAAPA,GAAwB,cAAPA,EAA8BA,EAAPD,GATjFhB,EAAchhB,IAqBvBmiB,GAAmB5S,EAAW6S,gBAAkB,SAASpiB,EAAGjE,EAAG8M,EAAGwZ,EAAKC,GAClED,GAAQ,OAARA,IAAkBA,GAAa,eAANtmB,EAA8B8M,OAAAA,EACvDwZ,GAAQ,SAARA,IAAmBxZ,EAAY,OAAA,EAC/B0Z,IAKHC,EAAK9J,EAAOlV,EALT+e,EAAQ/C,EAAU9Q,KAAK3S,GAC1B0mB,EAAOziB,EACPoL,EAAQiV,EAASjV,MACjBsX,EAAO7Z,EAAI,EACX8Z,EAAiB,IAAN9Z,EAQR9M,GANA2mB,IACH7Z,GAAKA,GAEF8Z,IACH9Z,GAAK,KAEI,eAAN9M,GAAuBsmB,EAKpB,GAAY,MAARA,IAAwC,IAAzBtmB,EAAEkN,QAAQ,UACnCuZ,EAAO3Z,EAAI,KAAQ0Z,EAAQviB,EAAE4iB,YAAc5iB,EAAE6iB,kBACvC,CAEFR,GADJjX,EAAM0V,QAAU,+BAAiCc,GAAU5hB,EAAG,YAAc,kBAChE,MAARqiB,GAAgBI,EAAKK,aAAiC,MAAlBT,EAAIzV,OAAO,IAAsB,QAARyV,EAYhEjX,EAAOmX,EAAQ,kBAAoB,kBAAqB1Z,EAAIwZ,MAZmB,CAO3E3J,GANJ+J,EAAOziB,EAAEwc,YAAchhB,EAAKunB,MACwB,IAAhDnB,GAAUa,EAAM,WAAWxZ,QAAQ,UACtCmC,EAAMd,SAAW,YAElBoO,EAAQ+J,EAAKO,SACbxf,EAAOlI,EAAU0K,QAAAA,OAAOvC,MACpBiV,GAAS6J,GAAS7J,EAAMlV,OAASA,EAC7BkV,OAAAA,EAAMiF,MAAQ9U,EAAI,IAE1BuC,EAAOmX,EAAQ,QAAU,UAAa1Z,EAAIwZ,EAI3CI,EAAKK,YAAYzC,GACjBmC,EAAMlU,WAAW+R,EAAUkC,EAAQ,cAAgB,iBACnDE,EAAKQ,YAAY5C,GACbkC,GAAiB,MAARF,IAAyC,IAA1BtF,EAAUmG,eACrCxK,EAAQ+J,EAAKO,SAAWP,EAAKO,UAAY,IACnCxf,KAAOA,EACbkV,EAAMiF,MAAQ6E,EAAM3Z,EAAI,KAEb,IAAR2Z,GAAcF,IACjBE,EAAML,GAAiBniB,EAAGjE,EAAG8M,EAAGwZ,GAAK,SA/BtC3J,EAAQiJ,GAAkB3hB,GAAGie,WAC7Bje,EAAEoL,MAAM6S,WAAapV,EACrB2Z,EAAMlU,WAAWqT,GAAkB3hB,GAAGie,YACtCje,EAAEoL,MAAM6S,WAAavF,EAkCfgK,OAHHC,IACHH,GAAO,KAEDE,GAAOF,EAAMA,GAErBW,GAAmB5T,EAAW6T,gBAAkB,SAASpjB,EAAGjE,EAAG+lB,GAC1DF,GAAiC,aAAjCA,GAAU5hB,EAAG,WAAY8hB,GAA6B,OAAA,EACtDuB,IAAAA,EAAc,SAANtnB,EAAgB,OAAS,MACpC8M,EAAI+Y,GAAU5hB,EAAG,SAAWqjB,EAAKvB,GAC3B9hB,OAAAA,EAAE,SAAWqjB,IAAQlB,GAAiBniB,EAAGjE,EAAGuS,WAAWzF,GAAIA,EAAEwG,QAAQyP,EAAY,MAAQ,IAIjGwE,GAAgB,SAAStjB,EAAG8hB,GACvBvgB,IACHzF,EAAGynB,EAAIxnB,EADJwF,EAAI,GAEHugB,GAAAA,EAAKA,GAAMH,GAAkB3hB,GAC5BlE,GAAAA,EAAIgmB,EAAGxlB,OACJ,OAAER,GAAK,IAEoB,KADjCC,EAAI+lB,EAAGhmB,IACDmN,QAAQ,eAAwBua,KAAsBznB,IAC3DwF,EAAExF,EAAEsT,QAAQ+P,EAAWE,IAAewC,EAAGI,iBAAiBnmB,SAIvDD,IAAAA,KAAKgmB,GACuB,IAA5BhmB,EAAEmN,QAAQ,cAAuBwa,KAAmB3nB,IACvDyF,EAAEzF,GAAKgmB,EAAGhmB,SAIP,GAAKgmB,EAAK9hB,EAAEihB,cAAgBjhB,EAAEoL,MAC/BtP,IAAAA,KAAKgmB,EACS,iBAAPhmB,QAA4BwlB,IAAT/f,EAAEzF,KAC/ByF,EAAEzF,EAAEuT,QAAQ+P,EAAWE,IAAewC,EAAGhmB,IAuBrCyF,OAnBFmf,IACJnf,EAAEwf,QAAUC,EAAchhB,IAE3BujB,EAAKG,GAAc1jB,EAAG8hB,GAAI,GAC1BvgB,EAAEoiB,SAAWJ,EAAGI,SAChBpiB,EAAEqiB,MAAQL,EAAGK,MACbriB,EAAEsiB,OAASN,EAAGM,OACdtiB,EAAEuiB,OAASP,EAAGO,OACdviB,EAAEyX,EAAIuK,EAAGvK,EACTzX,EAAE0X,EAAIsK,EAAGtK,EACL8K,KACHxiB,EAAEyiB,EAAIT,EAAGS,EACTziB,EAAE0iB,UAAYV,EAAGU,UACjB1iB,EAAE2iB,UAAYX,EAAGW,UACjB3iB,EAAE4iB,OAASZ,EAAGY,QAEX5iB,EAAE6iB,gBACE7iB,EAAE6iB,QAEH7iB,GAIR8iB,GAAU,SAASrkB,EAAGskB,EAAIC,EAAI1f,EAAM2f,GAC/BC,IAEHvX,EAAKnR,EAAG2oB,EAFLD,EAAO,GACVrZ,EAAQpL,EAAEoL,MAENrP,IAAAA,KAAKwoB,EACC,YAANxoB,GAA2B,WAANA,GAAoBqT,MAAMrT,KAAQuoB,EAAGvoB,MAAQmR,EAAMqX,EAAGxoB,KAAQyoB,GAAeA,EAAYzoB,MAAkC,IAAzBA,EAAEkN,QAAQ,YAAsC,iBAATiE,GAAqC,iBAATA,IAC7LuX,EAAK1oB,GAAc,SAARmR,GAAyB,SAANnR,GAAsB,QAANA,EAAmD,KAARmR,GAAsB,SAARA,GAA0B,SAARA,GAAqC,iBAAXoX,EAAGvoB,IAAmD,KAA/BuoB,EAAGvoB,GAAGsT,QAAQwP,EAAS,IAAkB3R,EAAJ,EAAjJiW,GAAiBnjB,EAAGjE,QACjEulB,IAAblW,EAAMrP,KACT2oB,EAAM,IAAIC,GAAcvZ,EAAOrP,EAAGqP,EAAMrP,GAAI2oB,MAI3C7f,GAAAA,EACE9I,IAAAA,KAAK8I,EACC,cAAN9I,IACH0oB,EAAK1oB,GAAK8I,EAAK9I,IAIX,MAAA,CAAC0oB,KAAKA,EAAMG,SAASF,IAE7BG,GAAc,CAAClH,MAAM,CAAC,OAAO,SAAUC,OAAO,CAAC,MAAM,WACrDkH,GAAW,CAAC,aAAa,cAAc,YAAY,gBASnDC,GAAgB,SAAS/kB,EAAGjE,EAAG+lB,GAC1B,GAAoC,SAAnC9hB,EAAEglB,SAAW,IAAIzD,cACd,OAACO,GAAMH,GAAkB3hB,IAAIjE,IAAM,EACpC,GAAIiE,EAAEilB,QAAUC,GAAOllB,GACtBA,OAAAA,EAAEmlB,UAAUppB,IAAM,EAEtB8M,IAAAA,EAAIyF,WAAkB,UAANvS,EAAiBiE,EAAEolB,YAAcplB,EAAEqlB,cACtDxpB,EAAIgpB,GAAY9oB,GAChBD,EAAID,EAAES,OAEA,IADPwlB,EAAKA,GAAMH,GAAkB3hB,KACpBlE,GAAK,GACb+M,GAAKyF,WAAYsT,GAAU5hB,EAAG,UAAYnE,EAAEC,GAAIgmB,GAAI,KAAW,EAC/DjZ,GAAKyF,WAAYsT,GAAU5hB,EAAG,SAAWnE,EAAEC,GAAK,QAASgmB,GAAI,KAAW,EAElEjZ,OAAAA,GAIRyc,GAAiB,SAAjBA,EAA0Bzc,EAAG0c,GACxB1c,GAAM,YAANA,GAAyB,SAANA,GAAsB,cAANA,EAC/BA,OAAAA,EAAI,IAEH,MAALA,GAAmB,KAANA,IAChBA,EAAI,OAEDhN,IAGHC,EAHGD,EAAIgN,EAAExM,MAAM,KACf2c,GAA4B,IAAvBnQ,EAAEI,QAAQ,QAAkB,MAAgC,IAAxBJ,EAAEI,QAAQ,SAAmB,OAASpN,EAAE,GACjFod,GAA2B,IAAtBpQ,EAAEI,QAAQ,OAAiB,MAAiC,IAAzBJ,EAAEI,QAAQ,UAAoB,OAASpN,EAAE,GAE9EA,GAAAA,EAAES,OAAS,IAAMipB,EAAQ,CAGvBzpB,IAFLD,EAAIgN,EAAExM,MAAM,MAAM4B,KAAK,KAAK5B,MAAM,KAClCwM,EAAI,GACC/M,EAAI,EAAGA,EAAID,EAAES,OAAQR,IACzB+M,EAAElM,KAAK2oB,EAAezpB,EAAEC,KAElB+M,OAAAA,EAAE5K,KAAK,KAoBRsnB,OAlBE,MAALtM,EACHA,EAAW,WAAND,EAAkB,MAAQ,IACf,WAANC,IACVA,EAAI,QAEK,WAAND,GAAmB5J,MAAMd,WAAW0K,MAAkC,KAA1BA,EAAI,IAAI/P,QAAQ,QAC/D+P,EAAI,OAELnQ,EAAImQ,EAAI,IAAMC,GAAMpd,EAAES,OAAS,EAAK,IAAMT,EAAE,GAAK,IAC7C0pB,IACHA,EAAOC,KAA2B,IAApBxM,EAAE/P,QAAQ,KACxBsc,EAAOE,KAA2B,IAApBxM,EAAEhQ,QAAQ,KACxBsc,EAAOG,IAAuB,MAAhB1M,EAAEpM,OAAO,GACvB2Y,EAAOI,IAAuB,MAAhB1M,EAAErM,OAAO,GACvB2Y,EAAOK,GAAKtX,WAAW0K,EAAE3J,QAAQwP,EAAS,KAC1C0G,EAAOM,GAAKvX,WAAW2K,EAAE5J,QAAQwP,EAAS,KAC1C0G,EAAO1c,EAAIA,GAEL0c,GAAU1c,GASlBid,GAAe,SAASrmB,EAAGhD,GAIlB,MAHU,mBAAPgD,IACVA,EAAIA,EAAEgf,EAAQjR,IAEO,iBAAP/N,GAAmC,MAAhBA,EAAEmN,OAAO,GAAc2B,SAAS9O,EAAEmN,OAAO,GAAK,IAAK,IAAM0B,WAAW7O,EAAEuJ,OAAO,IAAOsF,WAAW7O,GAAK6O,WAAW7R,IAAO,GASzJspB,GAAY,SAASld,EAAGqQ,GACL,mBAAPrQ,IACVA,EAAIA,EAAE4V,EAAQjR,IAEX0B,IAAAA,EAA4B,iBAAPrG,GAAmC,MAAhBA,EAAE+D,OAAO,GAI7C/D,MAHU,iBAAPA,GAA8C,MAA3BA,EAAE+D,OAAO/D,EAAEvM,OAAS,KACjDuM,GAAKqG,EAAarG,EAAEG,OAAO,EAAG,GAAK,GAAM9N,OAAO,SAA6B,OAAjB2N,EAAEG,QAAQ,GAAe,SAAW,WAAasF,WAAWY,EAAarG,EAAEG,OAAO,GAAKH,GAAK,MAE5I,MAALA,EAAaqQ,EAAIhK,EAAaX,SAAS1F,EAAE+D,OAAO,GAAK,IAAK,IAAM0B,WAAWzF,EAAEG,OAAO,IAAMkQ,EAAI5K,WAAWzF,IAAM,GAWxHmd,GAAc,SAASnd,EAAGqQ,EAAGnd,EAAGkqB,GAC3BjiB,IACE3H,EAAO6pB,EAAKC,EAAQjX,EAkCnBiX,MAjCW,mBAAPtd,IACVA,EAAIA,EAAE4V,EAAQjR,IAEN,MAAL3E,EACHsd,EAASjN,EACe,iBAAPrQ,EACjBsd,EAAStd,GAEH,IACNxM,EAAQwM,EAAExM,MAAM,KAEhB6pB,IADAhX,EAA8B,MAAhBrG,EAAE+D,OAAO,IACH2B,SAAS1F,EAAE+D,OAAO,GAAK,IAAK,IAAM0B,WAAWjS,EAAM,GAAG2M,OAAO,IAAMsF,WAAWjS,EAAM,OAA+B,IAAtBwM,EAAEI,QAAQ,OAAiB,EAAI8W,IAAa7Q,EAAa,EAAIgK,GAC1K7c,EAAMC,SACL2pB,IACHA,EAAelqB,GAAKmd,EAAIgN,IAEG,IAAxBrd,EAAEI,QAAQ,WACbid,GATI,OAUQA,EAAOE,MAClBF,EAAOA,EAAM,EAAKA,EAXf,IAW2BA,EAX3B,MAcqB,IAAtBrd,EAAEI,QAAQ,QAAiBid,EAAM,EACpCA,GAAQA,EAAME,eAfV,IAAA,KAeuCF,EAfvC,IAeoD,IACxB,IAAtBrd,EAAEI,QAAQ,QAAiBid,EAAM,IAC3CA,GAAQA,EAAME,eAjBV,IAAA,KAiBuCF,EAjBvC,IAiBoD,KAG1DC,EAASjN,EAAIgN,GAEVC,EAhCM,MAgCUA,GAhCV,OAiCTA,EAAS,GAEHA,GAGRE,GAAe,CAACC,KAAK,CAAC,EAAE,IAAI,KAC3BC,KAAK,CAAC,EAAE,IAAI,GACZC,OAAO,CAAC,IAAI,IAAI,KAChBC,MAAM,CAAC,EAAE,EAAE,GACXC,OAAO,CAAC,IAAI,EAAE,GACdC,KAAK,CAAC,EAAE,IAAI,KACZC,KAAK,CAAC,EAAE,EAAE,KACVC,KAAK,CAAC,EAAE,EAAE,KACVC,MAAM,CAAC,IAAI,IAAI,KACfC,QAAQ,CAAC,IAAI,EAAE,KACfC,MAAM,CAAC,IAAI,IAAI,GACfC,OAAO,CAAC,IAAI,IAAI,GAChBC,OAAO,CAAC,IAAI,IAAI,GAChBC,KAAK,CAAC,IAAI,IAAI,KACdC,OAAO,CAAC,IAAI,EAAE,KACdC,MAAM,CAAC,EAAE,IAAI,GACbC,IAAI,CAAC,IAAI,EAAE,GACXC,KAAK,CAAC,IAAI,IAAI,KACdC,KAAK,CAAC,EAAE,IAAI,KACZC,YAAY,CAAC,IAAI,IAAI,IAAI,IAE1BC,GAAO,SAASC,EAAGC,EAAIC,GAEb,OAAgH,KAA1G,GADfF,EAAKA,EAAI,EAAKA,EAAI,EAAKA,EAAI,EAAKA,EAAI,EAAIA,GACrB,EAAKC,GAAMC,EAAKD,GAAMD,EAAI,EAAKA,EAAI,GAAOE,EAAU,EAAJF,EAAQ,EAAKC,GAAMC,EAAKD,IAAO,EAAI,EAAID,GAAK,EAAIC,GAAa,GAAO,GASxIE,GAAc/K,EAAUgL,WAAa,SAASlf,EAAGmf,GAC5CnsB,IAAAA,EAAGqE,EAAGqf,EAAG9iB,EAAGkrB,EAAGpmB,EAAG7E,EAAGyc,EAAKnV,EAAKkV,EAAG+O,EAClC,GAACpf,EAEE,GAAkB,iBAAPA,EACjBhN,EAAI,CAACgN,GAAK,GAAKA,GAAK,EAAK,IAAS,IAAJA,OACxB,CAIFwd,GAH2B,MAA3Bxd,EAAE+D,OAAO/D,EAAEvM,OAAS,KACvBuM,EAAIA,EAAEG,OAAO,EAAGH,EAAEvM,OAAS,IAExB+pB,GAAaxd,GAChBhN,EAAIwqB,GAAaxd,QACX,GAAoB,MAAhBA,EAAE+D,OAAO,GACF,IAAb/D,EAAEvM,SACL4D,EAAI2I,EAAE+D,OAAO,GACb2S,EAAI1W,EAAE+D,OAAO,GACbnQ,EAAIoM,EAAE+D,OAAO,GACb/D,EAAI,IAAM3I,EAAIA,EAAIqf,EAAIA,EAAI9iB,EAAIA,GAG/BZ,EAAI,EADJgN,EAAI0F,SAAS1F,EAAEG,OAAO,GAAI,MAChB,GAAKH,GAAK,EAAK,IAAS,IAAJA,QACxB,GAAuB,QAAnBA,EAAEG,OAAO,EAAG,GAElB,GADJnN,EAAIosB,EAASpf,EAAEuF,MAAM8P,GAChB8J,GAYE,IAAwB,IAApBnf,EAAEI,QAAQ,KACbJ,OAAAA,EAAEuF,MAAMsQ,QAZfiJ,EAAK1iB,OAAOpJ,EAAE,IAAM,IAAO,IAC3B0F,EAAI0D,OAAOpJ,EAAE,IAAM,IAGnBqE,EAAQ,GAFRxD,EAAIuI,OAAOpJ,EAAE,IAAM,MACnB0jB,EAAK7iB,GAAK,GAAOA,GAAK6E,EAAI,GAAK7E,EAAI6E,EAAI7E,EAAI6E,GAEvC1F,EAAES,OAAS,IACdT,EAAE,GAAKoJ,OAAOpJ,EAAE,KAEjBA,EAAE,GAAK6rB,GAAKC,EAAI,EAAI,EAAGznB,EAAGqf,GAC1B1jB,EAAE,GAAK6rB,GAAKC,EAAGznB,EAAGqf,GAClB1jB,EAAE,GAAK6rB,GAAKC,EAAI,EAAI,EAAGznB,EAAGqf,QAK3B1jB,EAAIgN,EAAEuF,MAAM8P,IAAYmI,GAAaoB,YAEtC5rB,EAAE,GAAKoJ,OAAOpJ,EAAE,IAChBA,EAAE,GAAKoJ,OAAOpJ,EAAE,IAChBA,EAAE,GAAKoJ,OAAOpJ,EAAE,IACZA,EAAES,OAAS,IACdT,EAAE,GAAKoJ,OAAOpJ,EAAE,UA1CjBA,EAAIwqB,GAAaI,MAgEX5qB,OAnBHmsB,IAAUC,IACb/nB,EAAIrE,EAAE,GAAK,IACX0jB,EAAI1jB,EAAE,GAAK,IACXY,EAAIZ,EAAE,GAAK,IAGXa,IAFAyc,EAAMpV,KAAKoV,IAAIjZ,EAAGqf,EAAG9iB,KACrBuH,EAAMD,KAAKC,IAAI9D,EAAGqf,EAAG9iB,KACH,EACd0c,IAAQnV,EACX2jB,EAAIpmB,EAAI,GAER2X,EAAIC,EAAMnV,EACVzC,EAAI7E,EAAI,GAAMwc,GAAK,EAAIC,EAAMnV,GAAOkV,GAAKC,EAAMnV,GAC/C2jB,EAAKxO,IAAQjZ,GAAMqf,EAAI9iB,GAAKyc,GAAKqG,EAAI9iB,EAAI,EAAI,GAAM0c,IAAQoG,GAAM9iB,EAAIyD,GAAKgZ,EAAI,GAAKhZ,EAAIqf,GAAKrG,EAAI,EAChGyO,GAAK,IAEN9rB,EAAE,GAAM8rB,EAAI,GAAO,EACnB9rB,EAAE,GAAU,IAAJ0F,EAAU,GAAO,EACzB1F,EAAE,GAAU,IAAJa,EAAU,GAAO,GAEnBb,GAERqsB,GAAgB,SAAS3mB,EAAGymB,GACvBG,IAGHrsB,EAAGqS,EAAOia,EAHPD,EAAS5mB,EAAE6M,MAAMia,KAAc,GAClCna,EAAY,EACZoa,EAAS,GAEN,IAACH,EAAO7rB,OACJiF,OAAAA,EAEHzF,IAAAA,EAAI,EAAGA,EAAIqsB,EAAO7rB,OAAQR,IAC9BqS,EAAQga,EAAOrsB,GAEfoS,IADAka,EAAO7mB,EAAEyH,OAAOkF,EAAW3M,EAAE0H,QAAQkF,EAAOD,GAAWA,IACrC5R,OAAS6R,EAAM7R,OAEZ,KADrB6R,EAAQ2Z,GAAY3Z,EAAO6Z,IACjB1rB,QACT6R,EAAMxR,KAAK,GAEZ2rB,GAAUF,GAAQJ,EAAQ,QAAU7Z,EAAM,GAAK,IAAMA,EAAM,GAAK,KAAOA,EAAM,GAAK,KAAOA,EAAM,GAAK,QAAUA,EAAMlQ,KAAK,MAAQ,IAE3HqqB,OAAAA,EAAS/mB,EAAEyH,OAAOkF,IAE1Bma,GAAY,uEAERtsB,IAAAA,KAAKsqB,GACTgC,IAAa,IAAMtsB,EAAI,MAExBssB,GAAY,IAAIzH,OAAOyH,GAAU,IAAK,MAEtCtL,EAAUwL,kBAAoB,SAAS1sB,GAClC2sB,IACHR,EADGQ,EAAW3sB,EAAE,GAAK,IAAMA,EAAE,GAE1BwsB,GAAU3Z,KAAK8Z,KAClBR,GAAuC,IAA9BQ,EAASvf,QAAQ,UAAiD,IAA/Buf,EAASvf,QAAQ,SAC7DpN,EAAE,GAAKqsB,GAAcrsB,EAAE,GAAImsB,GAC3BnsB,EAAE,GAAKqsB,GAAcrsB,EAAE,GAAImsB,IAE5BK,GAAUI,UAAY,GAGlBntB,EAAUgU,QAAAA,sBACJA,EAAAA,QAAAA,oBAAsByN,EAAUwL,mBAUvCG,IAAAA,GAAgB,SAAS1G,EAAM2G,EAAKC,EAAaC,GAC/C7G,GAAQ,MAARA,EACI,OAAA,SAASnZ,GAAWA,OAAAA,GAExBigB,IAOHC,EAPGD,EAASH,GAAO3G,EAAK5T,MAAMia,KAAc,CAAC,KAAK,GAAK,GACvDW,EAAQhH,EAAK3lB,MAAMysB,GAAQ7qB,KAAK,IAAImQ,MAAMuQ,IAAe,GACzDsK,EAAMjH,EAAKhZ,OAAO,EAAGgZ,EAAK/Y,QAAQ+f,EAAM,KACxC3G,EAAwC,MAAjCL,EAAKpV,OAAOoV,EAAK1lB,OAAS,GAAc,IAAM,GACrD4sB,GAAgC,IAAvBlH,EAAK/Y,QAAQ,KAAe,IAAM,IAC3CkgB,EAAUH,EAAM1sB,OAChB8sB,EAAQD,EAAU,EAAKH,EAAM,GAAG3Z,QAAQ6O,EAAS,IAAM,GAEpD,OAACiL,EAIJJ,EADGJ,EACS,SAAS9f,GAChBsF,IAAAA,EAAOkb,EAAMvtB,EAAGD,EAChB,GAAc,iBAAPgN,EACVA,GAAKugB,OACC,GAAIP,GAASlJ,EAAuBjR,KAAK7F,GAAI,CAE9C/M,IADLD,EAAIgN,EAAEwG,QAAQsQ,EAAwB,KAAKtjB,MAAM,KAC5CP,EAAI,EAAGA,EAAID,EAAES,OAAQR,IACzBD,EAAEC,GAAKitB,EAAUltB,EAAEC,IAEbD,OAAAA,EAAEoC,KAAK,KAKXkrB,GAHJhb,GAAStF,EAAEuF,MAAMia,KAAc,CAACS,IAAS,GAEzChtB,GADAutB,EAAOxgB,EAAExM,MAAM8R,GAAOlQ,KAAK,IAAImQ,MAAMuQ,IAAe,IAC3CriB,OACL6sB,EAAUrtB,IACN,OAAEA,EAAIqtB,GACZE,EAAKvtB,GAAK8sB,EAAcS,GAAQvtB,EAAI,GAAK,EAAK,GAAMktB,EAAMltB,GAGrDmtB,OAAAA,EAAMI,EAAKprB,KAAKirB,GAASA,EAAQ/a,EAAQkU,IAA+B,IAAxBxZ,EAAEI,QAAQ,SAAkB,SAAW,KAKpF,SAASJ,GAChBwgB,IAAAA,EAAMxtB,EAAGC,EACT,GAAc,iBAAP+M,EACVA,GAAKugB,OACC,GAAIP,GAASlJ,EAAuBjR,KAAK7F,GAAI,CAE9C/M,IADLD,EAAIgN,EAAEwG,QAAQsQ,EAAwB,KAAKtjB,MAAM,KAC5CP,EAAI,EAAGA,EAAID,EAAES,OAAQR,IACzBD,EAAEC,GAAKitB,EAAUltB,EAAEC,IAEbD,OAAAA,EAAEoC,KAAK,KAIXkrB,GADJrtB,GADAutB,EAAOxgB,EAAEuF,MAAgB,MAAV8a,EAAgBvK,EAAaC,IAAyB,IAC5DtiB,OACL6sB,EAAUrtB,IACN,OAAEA,EAAIqtB,GACZE,EAAKvtB,GAAK8sB,EAAcS,GAAQvtB,EAAI,GAAK,EAAK,GAAMktB,EAAMltB,GAGrD,OAAEmtB,GAAa,SAANpgB,GAAgBA,EAAEG,OAAO,EAAGH,EAAEI,QAAQogB,EAAK,MAAcJ,GAAOI,EAAKprB,KAAKirB,GAAS7G,GA7C5F,SAASxZ,GAAWA,OAAAA,IAuD7BygB,GAAiB,SAASzW,GAElB,OADPA,EAAQA,EAAMxW,MAAM,KACb,SAAS2D,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,EAAQ3P,GACtChJ,IACHC,EADGD,GAAK4D,EAAI,IAAIpD,MAAM,KAGlBP,IADL+I,EAAO,GACF/I,EAAI,EAAGA,EAAI,EAAGA,IAClB+I,EAAKgO,EAAM/W,IAAMD,EAAEC,GAAKD,EAAEC,IAAMD,GAAKC,EAAI,GAAK,GAAM,GAE9CytB,OAAAA,EAAKC,MAAMxpB,EAAG6E,EAAMoI,EAAIuH,KAqDjCmQ,IAhDkBpV,EAAWka,gBAAkB,SAAS5gB,GAClD2L,KAAAA,OAAO/F,SAAS5F,GAMd6b,IALHxL,IAIHhM,EAAKD,EAAInR,EAAG4tB,EAAK3tB,EAJdmd,EAAI,KAAK5T,KACZqkB,EAAQzQ,EAAEyQ,MACVjF,EAAMxL,EAAE0L,SAGFF,GACNxX,EAAMyc,EAAMjF,EAAI7b,GACZ6b,EAAIxkB,EACPgN,EAAMwX,EAAIxkB,EAAEgN,GACFA,EANL,MAMkBA,GANlB,OAOLA,EAAM,GAEPwX,EAAI1kB,EAAE0kB,EAAI3oB,GAAKmR,EACfwX,EAAMA,EAAIne,MAMPsC,GAJAqQ,EAAE0Q,aACL1Q,EAAE0Q,WAAWjG,SAAWzK,EAAEpK,IAAMoK,EAAEpK,IAAI9R,KAAK,KAAKuQ,OAAQoc,EAAMhG,SAAU,KAAK3jB,EAAG,KAAKuN,QAAUoc,EAAMhG,UAG5F,IAAN9a,GAAiB,IAANA,EAGP6b,IAFPA,EAAMxL,EAAE0L,SACR7oB,EAAW,IAAN8M,EAAW,IAAM,IACf6b,GAAK,CAEP,IADJzX,EAAKyX,EAAI1kB,GACDvB,MAED,GAAgB,IAAZwO,EAAGxO,KAAY,CAEpB3C,IADL4tB,EAAMzc,EAAG4c,IAAM5c,EAAG1L,EAAI0L,EAAG6c,IACpBhuB,EAAI,EAAGA,EAAImR,EAAGvQ,EAAGZ,IACrB4tB,GAAOzc,EAAG,KAAKnR,GAAKmR,EAAG,MAAMnR,EAAE,IAEhCmR,EAAGlR,GAAK2tB,QANRzc,EAAGlR,GAAKkR,EAAG1L,EAAI0L,EAAG4c,IAQnBnF,EAAMA,EAAIne,QAaG,SAASvG,EAAGjE,EAAG8M,EAAGgC,EAAM3K,GAClCF,KAAAA,EAAIA,EACJjE,KAAAA,EAAIA,EACJ8M,KAAAA,EAAIA,EACJ3I,KAAAA,EAAIA,EACL2K,IACHA,EAAKF,MAAQ,KACRpE,KAAAA,MAAQsE,KAyFfkf,IAtEgBxa,EAAWya,cAAgB,SAAShqB,EAAG6E,EAAM0kB,EAAMtc,EAAIuH,EAAQyV,GAC1EC,IAKHpuB,EAAGC,EAAGouB,EAAIzF,EAAK/O,EALZuU,EAAMjd,EACTI,EAAQ,GACRD,EAAM,GACNgd,EAAYb,EAAKc,WACjBC,EAAWtK,EAgBL/S,IAdPsc,EAAKc,WAAa,KAClBrK,EAAWnb,EACXoI,EAAK0I,EAAU4T,EAAKC,MAAMxpB,EAAG6E,EAAMoI,EAAIuH,GACvCwL,EAAWsK,EAEPL,IACHV,EAAKc,WAAaD,EACdF,IACHA,EAAIvf,MAAQ,KACRuf,EAAIvf,QACPuf,EAAIvf,MAAMpE,MAAQ,QAId0G,GAAMA,IAAOid,GAAK,CACpBjd,GAAAA,EAAGxO,MAAQ,IAEd2O,EADArR,EAAIkR,EAAGlR,GACEkR,EAAG1L,EAAI0L,EAAG3L,EACnB+L,EAAMtR,GAAKkR,EAAG1L,EACT0oB,IACJvF,EAAM,IAAIC,GAAc1X,EAAI,IAAKlR,EAAG2oB,EAAKzX,EAAG/M,GAC5C+M,EAAG3L,EAAI,GAEQ,IAAZ2L,EAAGxO,MAEC,IADP3C,EAAImR,EAAGvQ,IACEZ,EAAI,GACZquB,EAAK,KAAOruB,EAEZsR,EADArR,EAAIkR,EAAGlR,EAAI,IAAMouB,GACRld,EAAG3H,KAAK6kB,GACjB9c,EAAMtR,GAAKkR,EAAGkd,GACTF,IACJvF,EAAM,IAAIC,GAAc1X,EAAIkd,EAAIpuB,EAAG2oB,EAAKzX,EAAGsd,IAAIJ,KAKnDld,EAAKA,EAAG1G,MAEF,MAAA,CAACojB,MAAMtc,EAAOD,IAAIA,EAAKwX,SAASF,EAAKzX,GAAG0I,IAyBjCpG,EAAWwa,aAAe,SAAS/pB,EAAGjE,EAAGwF,EAAGD,EAAGuJ,EAAMpM,EAAMZ,EAAGqC,EAAGuB,EAAIhF,EAAGgD,GACjFO,KAAAA,EAAIA,EACJjE,KAAAA,EAAIA,EACJwF,KAAAA,EAAIA,EACJD,KAAAA,EAAIA,EACJzD,KAAAA,EAAIA,GAAK9B,EACRiE,aAAa+pB,IAClBlV,EAAgBlY,KAAK,KAAKkB,GAEtBqC,KAAAA,EAAKA,EAAuB,mBAAPA,EAAqBA,EAAI6D,KAAKyK,MAA1CtO,EACTzB,KAAAA,KAAOA,GAAQ,EAChBgD,IACEA,KAAAA,GAAKA,EACVub,GAAe,GAEXvgB,KAAAA,OAAW6kB,IAAN7kB,EAAmB8E,EAAI9E,EAC5BgD,KAAAA,OAAW6hB,IAAN7hB,EAAmB8B,EAAID,EAAI7B,EACjCoL,IACEtE,KAAAA,MAAQsE,EACbA,EAAKF,MAAQ,QAIf6f,GAA2B,SAAS9pB,EAAQkO,EAAMvB,EAAOD,EAAKvC,EAAMgE,GAC/D5B,IAAAA,EAAK,IAAI8c,GAAarpB,EAAQkO,EAAMvB,EAAOD,EAAMC,EAAOxC,GAAO,EAAGgE,GAG/D5B,OAFPA,EAAGxQ,EAAI4Q,EACPJ,EAAGxN,EAAIwN,EAAG4c,IAAMzc,EACTH,GAqBRwd,GAAgB1N,EAAU2N,aAAe,SAAS1qB,EAAGjE,EAAGU,EAAGgD,EAAGkrB,EAAM3I,EAAM/U,EAAIxL,EAAI+S,EAAQ/F,GAEzFhS,EAAIA,GAAKulB,GAAQ,GACC,mBAAPviB,IACVA,EAAIA,EAAEgf,EAAQjR,IAEfP,EAAK,IAAI8c,GAAa/pB,EAAGjE,EAAG,EAAG,EAAGkR,EAAKwB,EAAW,EAAI,EAAI,MAAM,EAAOhN,EAAIhF,EAAGgD,GAC9EA,GAAK,GACDkrB,GAAQtC,GAAU3Z,KAAKjP,EAAIhD,KAE9BsgB,EAAUwL,kBADV9oB,EAAI,CAAChD,EAAGgD,IAERhD,EAAIgD,EAAE,GACNA,EAAIA,EAAE,IAEHmrB,IAIH9uB,EAAG+uB,EAAIC,EAAIC,EAAIC,EAAIC,EAAOC,EAAOC,EAAIC,EAAUhD,EAAMiD,EAAI3B,EAAK4B,EAJ3DV,EAAKnuB,EAAEJ,MAAM,MAAM4B,KAAK,KAAK5B,MAAM,KACtCkvB,EAAK9rB,EAAEpD,MAAM,MAAM4B,KAAK,KAAK5B,MAAM,KACnCK,EAAIkuB,EAAGtuB,OACPkvB,GAA4B,IAAfrN,EAoBTriB,KAlBmB,IAApB2D,EAAEwJ,QAAQ,OAAmC,IAApBxM,EAAEwM,QAAQ,QACN,KAA3BxJ,EAAIhD,GAAGwM,QAAQ,SAA6C,KAA3BxJ,EAAIhD,GAAGwM,QAAQ,QACpD2hB,EAAKA,EAAG3sB,KAAK,KAAKoR,QAAQsQ,EAAwB,MAAMtjB,MAAM,KAC9DkvB,EAAKA,EAAGttB,KAAK,KAAKoR,QAAQsQ,EAAwB,MAAMtjB,MAAM,OAE9DuuB,EAAKA,EAAG3sB,KAAK,KAAK5B,MAAM,KAAK4B,KAAK,MAAM5B,MAAM,KAC9CkvB,EAAKA,EAAGttB,KAAK,KAAK5B,MAAM,KAAK4B,KAAK,MAAM5B,MAAM,MAE/CK,EAAIkuB,EAAGtuB,QAEJI,IAAM6uB,EAAGjvB,SAGZI,GADAkuB,GAAM5I,GAAQ,IAAI3lB,MAAM,MACjBC,QAER2Q,EAAGuH,OAASA,EACZvH,EAAGwB,SAAWA,EACd4Z,GAAUI,UAAY,EACjB3sB,EAAI,EAAGA,EAAIY,EAAGZ,IAKdqvB,GAJJJ,EAAKH,EAAG9uB,GACRkvB,EAAKO,EAAGzvB,GAAK,IACbqvB,EAAK7c,WAAWyc,KAEC,IAAPI,EACTle,EAAGwe,WAAW,GAAIN,EAAIrF,GAAakF,EAAIG,GAAKH,EAAG3b,QAAQqP,EAAY,OAAM8M,IAAmC,IAAtBR,EAAG/hB,QAAQ,QAAgBlF,KAAKyK,OAAe,QAG/H,GAAImc,GAAQtC,GAAU3Z,KAAKqc,GAEjCrB,EAAM,MADNA,EAAMsB,EAAG/hB,QAAQ,KAAO,GACL+hB,EAAGhiB,OAAO0gB,GAAO,IACpC4B,GAAiC,IAAvBN,EAAG/hB,QAAQ,QAAiByX,EACtC0H,EAAO4C,EACPD,EAAKjD,GAAYiD,EAAIO,GACrBN,EAAKlD,GAAYkD,EAAIM,IACrBF,EAAYL,EAAGzuB,OAAS0uB,EAAG1uB,OAAS,KACnBokB,GAA8B,IAAVsK,EAAG,IACvC/d,EAAG,KAAOA,EAAGvQ,IAAMuQ,EAAGvQ,EAAI,eAAiB,cAC3CuQ,EAAGxN,EAAIwN,EAAGxN,EAAEpD,MAAMkvB,EAAGzvB,IAAImC,KAAK,iBAEzByiB,IACJ0K,GAAW,GAERE,EACHre,EAAGwe,WAAWrD,EAAKpf,OAAO,EAAGof,EAAKnf,QAAQ,SAAWmiB,EAAW,QAAU,QAASL,EAAG,GAAIjF,GAAakF,EAAG,GAAID,EAAG,IAAK,KAAK,GAAO,GAChIU,WAAW,GAAIV,EAAG,GAAIjF,GAAakF,EAAG,GAAID,EAAG,IAAK,MAAM,GACxDU,WAAW,GAAIV,EAAG,GAAIjF,GAAakF,EAAG,GAAID,EAAG,IAAMK,EAAW,KAAO,IAAM1B,GAAM,GAEnFzc,EAAGwe,WAAWrD,EAAKpf,OAAO,EAAGof,EAAKnf,QAAQ,SAAWmiB,EAAW,QAAU,QAASL,EAAG,GAAIC,EAAG,GAAKD,EAAG,GAAI,IAAKhnB,KAAKyK,OAAO,GACxHid,WAAW,GAAIV,EAAG,GAAIC,EAAG,GAAKD,EAAG,GAAI,IAAKhnB,KAAKyK,OAC/Cid,WAAW,GAAIV,EAAG,GAAIC,EAAG,GAAKD,EAAG,GAAKK,EAAW,IAAM1B,EAAM3lB,KAAKyK,OAGjE4c,IACHL,EAAMA,EAAGzuB,OAAS,EAAK,EAAIyuB,EAAG,GAC9B9d,EAAGwe,WAAW,GAAIV,GAAMC,EAAG1uB,OAAS,EAAK,EAAI0uB,EAAG,IAAMD,EAAIrB,GAAK,KAGjErB,GAAUI,UAAY,OAMlB,GAHJwC,EAAQF,EAAG3c,MAAM8P,GAOV,CAEF,KADJgN,EAAQF,EAAG5c,MAAMsQ,KACHwM,EAAM5uB,SAAW2uB,EAAM3uB,OAE7B2Q,OAAAA,EAGH4d,IADLC,EAAK,EACAD,EAAK,EAAGA,EAAKI,EAAM3uB,OAAQuuB,IAC/BQ,EAAKJ,EAAMJ,GACXzC,EAAO2C,EAAG9hB,QAAQoiB,EAAIP,GACtB7d,EAAGwe,WAAWV,EAAG/hB,OAAO8hB,EAAI1C,EAAO0C,GAAK7lB,OAAOomB,GAAKvF,GAAaoF,EAAML,GAAKQ,GAAK,MAAKG,GAAgD,OAAnCT,EAAG/hB,OAAOof,EAAOiD,EAAG/uB,OAAQ,KAAeyH,KAAKyK,MAAuB,IAAPqc,GACnKC,EAAK1C,EAAOiD,EAAG/uB,OAEhB2Q,EAAG,KAAOA,EAAGvQ,IAAMquB,EAAG/hB,OAAO8hB,QAhB7B7d,EAAG,KAAOA,EAAGvQ,IAAOuQ,EAAGvQ,GAAKuQ,EAAG,KAAOA,EAAGvQ,GAAM,IAAMsuB,EAAKA,EAqBzDvrB,IAAoB,IAApBA,EAAEwJ,QAAQ,MAAiBgE,EAAG3H,KAAM,CAElCxJ,IADL4tB,EAAMzc,EAAG4c,IAAM5c,EAAG3H,KAAK/D,EAClBzF,EAAI,EAAGA,EAAImR,EAAGvQ,EAAGZ,IACrB4tB,GAAOzc,EAAG,KAAOnR,GAAKmR,EAAG3H,KAAK,KAAOxJ,GAEtCmR,EAAGxN,EAAIiqB,EAAMzc,EAAG,KAAOnR,GAMjBmR,OAJFA,EAAGvQ,IACPuQ,EAAGxO,MAAQ,EACXwO,EAAG4c,IAAM5c,EAAGxN,GAENwN,EAAGye,QAAUze,GAErBnR,GAAI,EAKE,KAFPC,EAAIguB,GAAahtB,WACfL,EAAIX,EAAE0F,GAAK,IACJ3F,GAAI,GACZC,EAAE,KAAOD,IAAK,EACdC,EAAE,KAAOD,IAAK,GAEfC,EAAE8tB,IAAM,GACR9tB,EAAEwK,MAAQxK,EAAE4O,MAAQ5O,EAAE2vB,OAAS3vB,EAAEuJ,KAAOvJ,EAAEyY,OAASzY,EAAE0S,SAAW1S,EAAEwuB,IAAM,KAexExuB,EAAE0vB,WAAa,SAASxC,EAAK1nB,EAAGD,EAAG+gB,EAAKniB,EAAGyrB,GACtC1e,IAAAA,EAAK,KACRvQ,EAAIuQ,EAAGvQ,EAEJ,OADJuQ,EAAG,KAAOvQ,IAAOivB,IAAQjvB,GAAKuQ,EAAG,KAAOvQ,IAAO,IAAMusB,EAAMA,GAAO,GAC7D3nB,GAAa,IAAN5E,GAAYuQ,EAAGuH,QAI3BvH,EAAGvQ,IACHuQ,EAAGxO,KAAOwO,EAAGwB,SAAW,EAAI,EAC5BxB,EAAG,KAAOA,EAAGvQ,GAAK2lB,GAAO,GACrB3lB,EAAI,GACPuQ,EAAG3H,KAAK,KAAO5I,GAAK6E,EAAID,EACxB2L,EAAGsd,IAAI,KAAO7tB,GAAKwD,EACnB+M,EAAG,KAAOvQ,GAAK6E,EACV0L,EAAGuH,SACPvH,EAAGye,OAAS,IAAI3B,GAAa9c,EAAI,KAAOvQ,EAAG6E,EAAGD,EAAG2L,EAAGye,QAAUze,EAAI,EAAGA,EAAGpP,EAAGqC,EAAG+M,EAAGxL,IACjFwL,EAAGye,OAAO7B,IAAM,GAEV5c,IAERA,EAAG3H,KAAO,CAAC/D,EAAEA,EAAID,GACjB2L,EAAGsd,IAAM,GACTtd,EAAG1L,EAAIA,EACP0L,EAAG3L,EAAIA,EACP2L,EAAG/M,EAAIA,EACA+M,KArBNA,EAAG,KAAOvQ,IAAM6E,GAAK8gB,GAAO,IACrBpV,IAqCL2e,IAAAA,GAAc,SAAS7vB,EAAG8vB,GAC5BA,EAAUA,GAAW,GAChB9vB,KAAAA,EAAI8vB,EAAQC,QAASzK,EAAiBtlB,IAAUA,EACrDohB,EAAcphB,GAAKohB,EAAc,KAAKphB,GAAK,KACtCgwB,KAAAA,OAASF,EAAQ9C,WAAaL,GAAcmD,EAAQG,aAAcH,EAAQ1d,MAAO0d,EAAQjD,YAAaiD,EAAQhD,OAC/GgD,EAAQI,SACNzC,KAAAA,MAAQqC,EAAQI,QAEjBtB,KAAAA,KAAOkB,EAAQ1d,MACf0a,KAAAA,MAAQgD,EAAQhD,MAChBqD,KAAAA,QAAUL,EAAQK,QAClBlK,KAAAA,KAAO6J,EAAQG,aACfG,KAAAA,UAAYN,EAAQM,UACpB1qB,KAAAA,GAAKoqB,EAAQ5qB,UAAY,GAI/BmrB,GAA8B7c,EAAW6c,4BAA8B,SAASrwB,EAAG8vB,EAASQ,GACnE,WAApB,EAAOR,KACVA,EAAU,CAACI,OAAOI,IAEfxwB,IAEHC,EAFGD,EAAIE,EAAEM,MAAM,KACf6c,EAAI2S,EAAQG,aAGRlwB,IADLuwB,EAAWA,GAAY,CAACnT,GACnBpd,EAAI,EAAGA,EAAID,EAAES,OAAQR,IACzB+vB,EAAQC,OAAgB,IAANhwB,GAAW+vB,EAAQC,OACrCD,EAAQG,aAAeK,EAASvwB,IAAMod,EAC/B,IAAI0S,GAAY/vB,EAAEC,GAAI+vB,IAK/BS,GAAsB/c,EAAW+c,oBAAsB,SAASvwB,GAC3D,IAACohB,EAAcphB,GAAI,CAClBwwB,IAAAA,EAAaxwB,EAAE6Q,OAAO,GAAG2K,cAAgBxb,EAAEiN,OAAO,GAAK,SAC3DojB,GAA4BrwB,EAAG,CAACkwB,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,EAAQ3P,GACtE2nB,IAAAA,EAAc9wB,EAASkc,IAAIC,UAAUX,QAAQqV,GAC7C,OAACC,GAILA,EAAYC,eACLtP,EAAcphB,GAAGytB,MAAMxpB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,EAAQ3P,KAJxDqc,EAAK,UAAYqL,EAAa,wBACvBtf,SASZlR,EAAI6vB,GAAY7uB,WAYd2tB,aAAe,SAAS1qB,EAAGvD,EAAGgD,EAAGwN,EAAIuH,EAAQ/F,GAC1Cie,IACH5wB,EAAG8uB,EAAIW,EAAI7uB,EAAGiwB,EAAIC,EADfF,EAAM,KAAKR,QAUXX,GAPA,KAAK1C,QAAWlJ,EAAuBjR,KAAKjP,IAAMkgB,EAAuBjR,KAAKjS,IACjFmuB,EAAKnuB,EAAE4S,QAAQsQ,EAAwB,KAAKtjB,MAAM,KAClDkvB,EAAK9rB,EAAE4P,QAAQsQ,EAAwB,KAAKtjB,MAAM,MACxCqwB,IACV9B,EAAK,CAACnuB,GACN8uB,EAAK,CAAC9rB,KAEH8rB,EAAI,CAEFzvB,IADLY,EAAK6uB,EAAGjvB,OAASsuB,EAAGtuB,OAAUivB,EAAGjvB,OAASsuB,EAAGtuB,OACxCR,EAAI,EAAGA,EAAIY,EAAGZ,IAClBW,EAAImuB,EAAG9uB,GAAK8uB,EAAG9uB,IAAM,KAAKkmB,KAC1BviB,EAAI8rB,EAAGzvB,GAAKyvB,EAAGzvB,IAAM,KAAKkmB,KACtB0K,IACHC,EAAKlwB,EAAEwM,QAAQyjB,OACfE,EAAKntB,EAAEwJ,QAAQyjB,OAEF,IAARE,EACHhC,EAAG9uB,GAAK8uB,EAAG9uB,GAAGO,MAAMqwB,GAAKzuB,KAAK,KACZ,IAAR0uB,IACV/B,EAAG9uB,IAAM,IAAM4wB,IAKnBjwB,EAAImuB,EAAG3sB,KAAK,MACZwB,EAAI8rB,EAAGttB,KAAK,MAENwsB,OAAAA,GAAczqB,EAAG,KAAKjE,EAAGU,EAAGgD,EAAG,KAAKkrB,KAAM,KAAK3I,KAAM/U,EAAI,KAAKxL,GAAI+S,EAAQ/F,IAgBlF1S,EAAEytB,MAAQ,SAASxpB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,EAAQ3P,GACtC,OAAA,KAAK6lB,aAAa1qB,EAAEoL,MAAO,KAAK2gB,OAAOnK,GAAU5hB,EAAG,KAAKjE,EAAGmhB,GAAK,EAAO,KAAK8E,OAAQ,KAAK+J,OAAOtsB,GAAIwN,EAAIuH,IA6BjHuI,EAAU8P,oBAAsB,SAASntB,EAAMotB,EAAa7rB,GAC3DmrB,GAA4B1sB,EAAM,CAACusB,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,EAAQ3P,GACzEod,IAAAA,EAAK,IAAI8H,GAAa/pB,EAAGjE,EAAG,EAAG,EAAGkR,EAAI,EAAGlR,GAAG,EAAOkF,GAGhDghB,OAFPA,EAAGzN,OAASA,EACZyN,EAAGxT,SAAWqe,EAAY9sB,EAAGP,EAAG8pB,EAAKhc,OAAQxR,GACtCkmB,GACLhhB,SAASA,KASb8b,EAAUgQ,qBAAsB,EAC5BC,IAUHC,GAiBEC,GAAKC,GAAMxP,GADRhW,GA1BFqlB,GAAmB,oGAAqG3wB,MAAM,KACjIonB,GAAiBpC,EAAiB,aAClCmC,GAAoBrC,EAAa,YACjCiM,GAAuB/L,EAAiB,mBACxC0C,GAAmD,OAApC1C,EAAiB,eAChCgM,GAAY9d,EAAW8d,UAAY,WAC7BrP,KAAAA,YAAc1P,WAAWyO,EAAUK,8BAAgC,EACnEkQ,KAAAA,WAAwC,IAA7BvQ,EAAUwQ,iBAA6BxJ,MAAuBhH,EAAUwQ,gBAAkB,SAE3GC,GAAcvyB,EAASwyB,SAAAA,WAIvBC,GAAa,SAASjvB,EAAMkvB,EAAWC,GAClCC,IAEH9xB,EAFG8xB,EAAUryB,EAAK4kB,gBAAgB,6BAA8B3hB,GAChEqvB,EAAM,kBAEF/xB,IAAAA,KAAK6xB,EACTC,EAAQE,eAAe,KAAMhyB,EAAEsT,QAAQye,EAAK,SAASvM,cAAeqM,EAAW7xB,IAGzE8xB,OADPF,EAAU7K,YAAY+K,GACfA,GAERG,GAAcxyB,EAAKyyB,iBAAmB,GACtCC,IAEKvmB,GAAQ6W,GAAY,WAAW9P,KAAK6R,KAAYtlB,EAASkzB,SAAAA,OAEzD3yB,EAAK4kB,iBAAmB4N,GAAYlL,cAAgBnb,KACvDulB,GAAMQ,GAAW,MAAOM,IAExBrQ,IADAwP,GAAOO,GAAW,OAAQR,GAAK,CAACvP,MAAM,IAAKC,OAAO,GAAI5E,EAAE,OAC3CQ,wBAAwBmE,MACrCwP,GAAK/hB,MAAMgiB,IAAwB,UACnCD,GAAK/hB,MAAMqY,IAAkB,cAC7B9b,GAASgW,KAAUwP,GAAK3T,wBAAwBmE,SAAWW,GAAcyF,IACzEiK,GAAY/K,YAAYiK,KAElBvlB,IAERymB,GAAkB,SAAS3uB,EAAG4uB,EAAOC,EAAWC,EAAUC,EAAcC,GACnEC,IAEH7lB,EAAGmQ,EAAGC,EAAG0V,EAASC,EAAS/yB,EAAGY,EAAG6E,EAAG4X,EAAG2V,EAAIC,EAAIC,EAAaC,EAAYC,EAFrEP,EAAKjvB,EAAEyvB,aACV5hB,EAAI6hB,GAAW1vB,GAAG,GAEfivB,IACHM,EAAaN,EAAGC,QAChBM,EAAaP,EAAGE,WAEZL,IAAa1lB,EAAI0lB,EAASlyB,MAAM,MAAMC,OAAS,KAEvC,KADZG,EAAIgD,EAAE0lB,WACAnM,GAAmB,IAARvc,EAAEwc,GAAWxc,EAAEkhB,MAAQlhB,EAAEmhB,SAAW,IACpDnhB,EAAI,CAACuc,EAAG1K,WAAW7O,EAAE2vB,aAAa,KAAO3vB,EAAE4vB,aAAa,KAAO5vB,EAAE2vB,aAAa,MAAQ3vB,EAAE4vB,aAAa,MAAQ,IAAM,EAAGpW,EAAG3K,WAAW7O,EAAE2vB,aAAa,KAAO3vB,EAAE4vB,aAAa,KAAO5vB,EAAE2vB,aAAa,MAAQ3vB,EAAE4vB,aAAa,MAAQ,IAAM,EAAG1R,MAAM,EAAGC,OAAO,IAGxP/U,EAAI,GAA6B,KADjCwlB,EAAQ/I,GAAe+I,GAAOhyB,MAAM,MACxB,GAAG4M,QAAQ,KAAcqF,WAAW+f,EAAM,IAAM,IAAM5xB,EAAEkhB,MAAQrP,WAAW+f,EAAM,KAAO5xB,EAAEuc,IACxE,IAA3BqV,EAAM,GAAGplB,QAAQ,KAAcqF,WAAW+f,EAAM,IAAM,IAAM5xB,EAAEmhB,OAAStP,WAAW+f,EAAM,KAAO5xB,EAAEwc,IAErGqV,EAAUK,QAAUA,EAAUrgB,WAAWzF,EAAE,IAC3CylB,EAAUM,QAAUA,EAAUtgB,WAAWzF,EAAE,IACvC0lB,GAAYjhB,IAAMgiB,KACrBzzB,EAAIyR,EAAE,GACN7Q,EAAI6Q,EAAE,GACNhM,EAAIgM,EAAE,GACN4L,EAAI5L,EAAE,GACNuhB,EAAKvhB,EAAE,GACPwhB,EAAKxhB,EAAE,IACPyhB,EAAelzB,EAAIqd,EAAIzc,EAAI6E,KAE1B0X,EAAI2V,GAAWzV,EAAI6V,GAAeH,IAAYttB,EAAIytB,IAAiBztB,EAAIwtB,EAAK5V,EAAI2V,GAAME,EACtF9V,EAAI0V,IAAYlyB,EAAIsyB,GAAeH,GAAW/yB,EAAIkzB,IAAiBlzB,EAAIizB,EAAKryB,EAAIoyB,GAAME,EACtFJ,EAAUL,EAAUK,QAAU9lB,EAAE,GAAKmQ,EACrC4V,EAAUN,EAAUM,QAAU/lB,EAAE,GAAKoQ,IAGnCyV,IACCD,IACHH,EAAUiB,QAAUb,EAAGa,QACvBjB,EAAUkB,QAAUd,EAAGc,QACvBd,EAAKJ,GAEFE,IAAkC,IAAjBA,IAA4D,IAAlCzR,EAAUO,qBACxDtE,EAAI2V,EAAUK,EACd/V,EAAI2V,EAAUK,EAIdP,EAAGa,SAAYvW,EAAI1L,EAAE,GAAK2L,EAAI3L,EAAE,GAAM0L,EACtC0V,EAAGc,SAAYxW,EAAI1L,EAAE,GAAK2L,EAAI3L,EAAE,GAAM2L,GAEtCyV,EAAGa,QAAUb,EAAGc,QAAU,GAGvBf,GACJhvB,EAAEgwB,aAAa,kBAAmB5mB,EAAE5K,KAAK,OA8B3CyxB,GAAW,SAASjwB,GACf,IACIA,OAAAA,EAAE0lB,UACR,MAAOwK,GACDC,OA/BM,SAAfA,EAAwBC,GACnB3C,IAIH4C,EAJG5C,EAAM/M,EAAe,MAAQ,KAAK4P,iBAAmB,KAAKA,gBAAgBV,aAAa,UAAa,8BACvGW,EAAY,KAAKxT,WACjByT,EAAa,KAAKC,YAClBC,EAAS,KAAK/kB,MAAM0V,QAKjB+O,GAHJ7B,GAAYlL,YAAYoK,GACxBA,EAAIpK,YAAY,MACX1X,KAAAA,MAAMglB,QAAU,QACjBP,EACC,IACHC,EAAO,KAAK3K,UACPkL,KAAAA,iBAAmB,KAAKlL,QACxBA,KAAAA,QAAUyK,EACd,MAAOnwB,SACC,KAAK4wB,mBACfP,EAAO,KAAKO,oBASNP,OAPHG,EACHD,EAAUM,aAAa,KAAML,GAE7BD,EAAUlN,YAAY,MAEvBkL,GAAY/K,YAAYiK,GACnB9hB,KAAAA,MAAM0V,QAAUqP,EACdL,GAMc9yB,KAAKyC,GAAG,KAG9BylB,GAAS,SAASzlB,GACV,SAAG+tB,KAAe/tB,EAAEwlB,QAAYxlB,EAAE+c,aAAc/c,EAAEswB,kBAAoBL,GAASjwB,KAEvF6vB,GAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAC/BH,GAAa,SAAS1vB,EAAG8wB,GACpB7B,IAGH8B,EAAWjvB,EAAG+L,EAAGzP,EAAG4yB,EAAKP,EAAa5T,EAHnCoS,EAAKjvB,EAAEyvB,cAAgB,IAAI7B,GAE9BjiB,EAAQ3L,EAAE2L,MAiDPolB,GA/CA/M,GACHliB,EAAIqgB,GAAUniB,EAAG+jB,GAAmB,MAAM,GAChC/jB,EAAEwhB,eAGZ1f,GADAA,EAAI9B,EAAEwhB,aAAarT,OAAOQ,MAAMqR,KACT,IAAble,EAAEjF,OAAgB,CAACiF,EAAE,GAAGyH,OAAO,GAAI/D,OAAO1D,EAAE,GAAGyH,OAAO,IAAK/D,OAAO1D,EAAE,GAAGyH,OAAO,IAAKzH,EAAE,GAAGyH,OAAO,GAAK0lB,EAAG1V,GAAK,EAAK0V,EAAGzV,GAAK,GAAIhb,KAAK,KAAO,IAEpJuyB,GAAcjvB,GAAW,SAANA,GAAsB,6BAANA,EAC/BkiB,IAAkB+M,IAAc/wB,EAAEixB,cAAgBjxB,IAAMuuB,KAE3DnwB,EAAIuN,EAAMglB,QACVhlB,EAAMglB,QAAU,SAChB9T,EAAS7c,EAAE+c,aACK/c,EAAEixB,eACjBD,EAAM,EACNP,EAAczwB,EAAEywB,YAChBlC,GAAYlL,YAAYrjB,IAGzB+wB,IADAjvB,EAAIqgB,GAAUniB,EAAG+jB,GAAmB,MAAM,KACjB,SAANjiB,GAAsB,6BAANA,EAC/B1D,EACHuN,EAAMglB,QAAUvyB,EAEhB8yB,GAAYvlB,EAAO,WAEhBqlB,IACCP,EACH5T,EAAOgU,aAAa7wB,EAAGywB,GACb5T,EACVA,EAAOwG,YAAYrjB,GAEnBuuB,GAAY/K,YAAYxjB,MAIvBivB,EAAGxB,KAAQztB,EAAEwlB,QAAUC,GAAOzlB,MAC7B+wB,IAAiE,KAAnDplB,EAAMqY,IAAkB,IAAIxa,QAAQ,YACrD1H,EAAI6J,EAAMqY,IACV+M,EAAY,GAEbljB,EAAI7N,EAAE4vB,aAAa,aACfmB,GAAaljB,IAEhB/L,EAAI,WADJ+L,EAAI7N,EAAE2qB,UAAUwG,QAAQC,cAAcC,QACpBj1B,EAAI,IAAMyR,EAAE7Q,EAAI,IAAM6Q,EAAEhM,EAAI,IAAMgM,EAAE4L,EAAI,IAAM5L,EAAE7N,EAAI,IAAM6N,EAAElJ,EAAI,IAClFosB,EAAY,IAGVA,EACIlB,OAAAA,GAKD,IAFPhiB,GAAK/L,GAAK,IAAI6M,MAAM8P,IAAY,GAChCpiB,GAAIwR,EAAEhR,SACGR,IAAK,GACb+B,EAAIoH,OAAOqI,EAAExR,KACbwR,EAAExR,KAAM20B,EAAM5yB,GAAKA,GAAK,KA1DlB,IA0D0B4yB,GAAaA,EAAM,GAAK,GAAM,IAAQ,GA1DhE,IA0D2E5yB,EAAIA,EAE9E0yB,OAAAA,GAAWjjB,EAAEhR,OAAS,EAAK,CAACgR,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAAKA,EAAE,KAAOA,GAW7EoW,GAAgBnU,EAAWwhB,aAAe,SAAS/wB,EAAG8hB,EAAIkP,EAAKxH,GAC1DxpB,GAAAA,EAAEkvB,cAAgB8B,IAAQxH,EACtBxpB,OAAAA,EAAEkvB,aAENR,IAMHphB,EAAGxR,EAAG+nB,EAAQC,EAAQH,EAAUC,EAN7B8K,EAAKsC,GAAMhxB,EAAEkvB,cAAkC,IAAI7B,GACtD4D,EAAQvC,EAAG7K,OAAS,EAGpBqN,EAAUnN,KAAczV,WAAWsT,GAAU5hB,EAAGotB,GAAsBtL,GAAI,EAAO,SAASzlB,MAAM,KAAK,KAAOqyB,EAAGwC,UAAgB,EAC/H9T,EAA8B9O,WAAWyO,EAAUK,8BAAgC,EAShF9P,GANJohB,EAAGxB,OAASltB,EAAEilB,SAAUC,GAAOllB,IAC3B0uB,EAAGxB,MACNkB,GAAgBpuB,EAAG4hB,GAAU5hB,EAAGotB,GAAsBtL,GAAI,EAAO,WAAa,GAAI4M,EAAI1uB,EAAEqvB,aAAa,oBACrGpC,GAAuBlQ,EAAUgQ,qBAAuBmB,KAEzD5gB,EAAI6hB,GAAWnvB,MACLsvB,GAAmB,CAExBhiB,GAAa,KAAbA,EAAEhR,OAAe,CAEhB60B,IAMHC,EAAIC,EAAIC,EAAQC,EAAKC,EANlBL,EAAM7jB,EAAE,GAAImkB,EAAMnkB,EAAE,GAAIokB,EAAMpkB,EAAE,GAAIqkB,EAAMrkB,EAAE,GAC/CskB,EAAMtkB,EAAE,GAAIukB,EAAMvkB,EAAE,GAAIwkB,EAAMxkB,EAAE,GAAIykB,EAAMzkB,EAAE,GAC5C0kB,EAAM1kB,EAAE,GAAI2kB,EAAM3kB,EAAE,GAAI4kB,EAAM5kB,EAAE,IAChC6kB,EAAM7kB,EAAE,IAAK8kB,EAAM9kB,EAAE,IAAK+kB,EAAM/kB,EAAE,IAClCglB,EAAMhlB,EAAE,IACRilB,EAAQxuB,KAAKyuB,MAAMV,EAAKI,GAGrBxD,EAAGwC,UAENiB,EAAMH,GADNK,GAAO3D,EAAGwC,SACI5jB,EAAE,IAChB8kB,EAAMH,EAAII,EAAI/kB,EAAE,IAChB+kB,EAAMH,EAAIG,EAAI3D,EAAGwC,QAAQ5jB,EAAE,KAG5BohB,EAAGzK,UAAYsO,EAAQxS,EAEnBwS,IAGHnB,EAAKQ,GAFLL,EAAMxtB,KAAKwtB,KAAKgB,IAEHP,GADbR,EAAMztB,KAAKytB,KAAKe,IAEhBlB,EAAKQ,EAAIN,EAAIU,EAAIT,EACjBF,EAAKQ,EAAIP,EAAIW,EAAIV,EACjBQ,EAAMJ,GAAKJ,EAAIQ,EAAIT,EACnBU,EAAMJ,GAAKL,EAAIS,EAAIV,EACnBW,EAAMJ,GAAKN,EAAIU,EAAIX,EACnBe,EAAMP,GAAKP,EAAIc,EAAIf,EACnBK,EAAMR,EACNS,EAAMR,EACNS,EAAMR,GAGPiB,EAAQxuB,KAAKyuB,OAAOd,EAAKQ,GACzBxD,EAAGxK,UAAYqO,EAAQxS,EACnBwS,IAIHlB,EAAKI,GAHLF,EAAMxtB,KAAKwtB,KAAKgB,IAGHN,GAFbT,EAAMztB,KAAKytB,KAAKe,IAGhBjB,EAAKI,EAAIH,EAAIW,EAAIV,EACjBS,EAAMR,EAAID,EAAIS,EAAIV,EAClBW,EAAMR,EAAIF,EAAIU,EAAIX,EAClBe,EAAMX,EAAIH,EAAIc,EAAIf,EAClBJ,EANAC,EAAKD,EAAII,EAAIS,EAAIR,EAOjBC,EAAMJ,EACNK,EAAMJ,GAGPiB,EAAQxuB,KAAKyuB,MAAMf,EAAKN,GACxBzC,EAAG/K,SAAW4O,EAAQxS,EAClBwS,IAGHnB,EAAKD,GAFLI,EAAMxtB,KAAKwtB,IAAIgB,IAEFd,GADbD,EAAMztB,KAAKytB,IAAIe,IAEflB,EAAKO,EAAIL,EAAIM,EAAIL,EACjBF,EAAKU,EAAIT,EAAIU,EAAIT,EACjBC,EAAMA,EAAIF,EAAIJ,EAAIK,EAClBK,EAAMA,EAAIN,EAAIK,EAAIJ,EAClBS,EAAMA,EAAIV,EAAIS,EAAIR,EAClBL,EAAMC,EACNQ,EAAMP,EACNW,EAAMV,GAGH5C,EAAGzK,WAAalgB,KAAK2V,IAAIgV,EAAGzK,WAAalgB,KAAK2V,IAAIgV,EAAG/K,UAAY,QACpE+K,EAAGzK,UAAYyK,EAAG/K,SAAW,EAC7B+K,EAAGxK,UAAY,IAAMwK,EAAGxK,WAIzBqO,EAAQxuB,KAAKyuB,MAAMZ,EAAKC,GAGxBnD,EAAG7K,QAxFE,IAwFS9f,KAAK4V,KAAKwX,EAAMA,EAAMM,EAAMA,EAAMC,EAAMA,GAAa,GAAO,GAxFrE,IAyFLhD,EAAG5K,QAzFE,IAyFS/f,KAAK4V,KAAKkY,EAAMA,EAAMC,EAAMA,GAAa,GAAO,GAzFzD,IA0FLpD,EAAGvK,QA1FE,IA0FSpgB,KAAK4V,KAAKqY,EAAMA,EAAMC,EAAMA,EAAMC,EAAMA,GAAa,GAAO,GA1FrE,IA2FLf,GAAOzC,EAAG7K,OACV+N,GAAOlD,EAAG5K,OACV2N,GAAO/C,EAAG7K,OACVgO,GAAOnD,EAAG5K,OACN/f,KAAK2V,IAAI6Y,GAhGR,MAiGJ7D,EAAG9K,MAAQ2O,EAAQxS,EACnB6R,EAAM,EACc,WAAhBlD,EAAG+D,WACN/D,EAAG5K,QAAU,EAAI/f,KAAKwtB,IAAIgB,KAI3B7D,EAAG9K,MAAQ,EAqBZ8K,EAAG1Q,YAAcsU,EAAM,GAAMA,EAAM,GAAMA,EAAMA,GAAO,EACtD5D,EAAG1V,EAAImZ,EACPzD,EAAGzV,EAAImZ,EACP1D,EAAG1K,EAAIqO,EACH3D,EAAGxB,MACNwB,EAAG1V,GAAK0V,EAAGC,SAAWD,EAAGC,QAAUwC,EAAMzC,EAAGE,QAAUgD,GACtDlD,EAAGzV,GAAKyV,EAAGE,SAAWF,EAAGE,QAAU6C,EAAM/C,EAAGC,QAAUkD,SAGjD,IAAM9N,IAAeyF,IAAUlc,EAAEhR,QAAUoyB,EAAG1V,IAAM1L,EAAE,IAAMohB,EAAGzV,IAAM3L,EAAE,KAAQohB,EAAGzK,YAAcyK,EAAGxK,UAAa,CAClHwO,IAAAA,EAAKplB,EAAEhR,QAAU,EACpBT,EAAI62B,EAAIplB,EAAE,GAAK,EACf7Q,EAAI6Q,EAAE,IAAM,EACZhM,EAAIgM,EAAE,IAAM,EACZ4L,EAAIwZ,EAAIplB,EAAE,GAAK,EAChBohB,EAAG1V,EAAI1L,EAAE,IAAM,EACfohB,EAAGzV,EAAI3L,EAAE,IAAM,EACfuW,EAAS9f,KAAK4V,KAAK9d,EAAIA,EAAIY,EAAIA,GAC/BqnB,EAAS/f,KAAK4V,KAAKT,EAAIA,EAAI5X,EAAIA,GAC/BqiB,EAAY9nB,GAAKY,EAAKsH,KAAKyuB,MAAM/1B,EAAGZ,GAAKkkB,EAAW2O,EAAG/K,UAAY,EACnEC,EAAStiB,GAAK4X,EAAKnV,KAAKyuB,MAAMlxB,EAAG4X,GAAK6G,EAAW4D,EAAW+K,EAAG9K,OAAS,EACxE8K,EAAG7K,OAASA,EACZ6K,EAAG5K,OAASA,EACZ4K,EAAG/K,SAAWA,EACd+K,EAAG9K,MAAQA,EACPG,KACH2K,EAAGzK,UAAYyK,EAAGxK,UAAYwK,EAAG1K,EAAI,EACrC0K,EAAG1Q,YAAcZ,EACjBsR,EAAGvK,OAAS,GAETuK,EAAGxB,MACNwB,EAAG1V,GAAK0V,EAAGC,SAAWD,EAAGC,QAAU9yB,EAAI6yB,EAAGE,QAAUttB,GACpDotB,EAAGzV,GAAKyV,EAAGE,SAAWF,EAAGC,QAAUlyB,EAAIiyB,EAAGE,QAAU1V,IAejDpd,IAAAA,KAZDiI,KAAK2V,IAAIgV,EAAG9K,OAAS,IAAM7f,KAAK2V,IAAIgV,EAAG9K,OAAS,MAC/CqN,GACHvC,EAAG7K,SAAW,EACd6K,EAAG9K,OAAU8K,EAAG/K,UAAY,EAAK,KAAO,IACxC+K,EAAG/K,UAAa+K,EAAG/K,UAAY,EAAK,KAAO,MAE3C+K,EAAG5K,SAAW,EACd4K,EAAG9K,OAAU8K,EAAG9K,OAAS,EAAK,KAAO,MAGvC8K,EAAGwC,QAAUA,EAEHxC,EACLA,EAAG5yB,GA7KF,MA6KgB4yB,EAAG5yB,IA7KnB,OA8KJ4yB,EAAG5yB,GAAK,GAmBJ4yB,OAdHsC,IACHhxB,EAAEkvB,aAAeR,EACbA,EAAGxB,MACFD,IAAwBjtB,EAAEoL,MAAMqY,IACzBzN,EAAAA,QAAAA,YAAY,KAAO,WAC5B2a,GAAY3wB,EAAEoL,MAAOqY,OAEXwJ,IAAwBjtB,EAAEqvB,aAAa,cACxCrZ,EAAAA,QAAAA,YAAY,KAAO,WAC5BhW,EAAE2yB,gBAAgB,iBAKfjE,GAIRkE,GAAuB,SAAS/pB,GAC3B7I,IAUHokB,EAASlX,EAVNlN,EAAI,KAAKsF,KACZutB,GAAO7yB,EAAE2jB,SAAW9D,EACpBiT,EAAOD,EAAM7yB,EAAE4jB,MAAQ/D,EAEvBhkB,GAAMkI,KAAKwtB,IAAIsB,GAAO7yB,EAAE6jB,OADlB,IACkC,GADlC,IAENpnB,GAAMsH,KAAKytB,IAAIqB,GAAO7yB,EAAE6jB,OAFlB,IAEkC,GAFlC,IAGNviB,GAAMyC,KAAKytB,IAAIsB,IAAS9yB,EAAE8jB,OAHpB,IAGoC,GAHpC,IAIN5K,GAAMnV,KAAKwtB,IAAIuB,GAAQ9yB,EAAE8jB,OAJnB,IAImC,GAJnC,IAKN1Y,EAAQ,KAAKpL,EAAEoL,MACf0W,EAAK,KAAK9hB,EAAEihB,aAET,GAACa,EAAD,CAGJ5U,EAAMzQ,EACNA,GAAK6E,EACLA,GAAK4L,EACLkX,EAAUtC,EAAGlU,OACbxC,EAAMwC,OAAS,GACXmlB,IAMHC,EAAIC,EANDF,EAAI,KAAK/yB,EAAEolB,YACduC,EAAI,KAAK3nB,EAAEqlB,aACX6N,EAAwB,aAAhBpR,EAAGxX,SACXgD,EAAI,gDAAkDzR,EAAI,SAAWY,EAAI,SAAW6E,EAAI,SAAW4X,EACnG0M,EAAK5lB,EAAEgZ,EAAK+Z,EAAI/yB,EAAEmzB,SAAW,IAC7BtN,EAAK7lB,EAAEiZ,EAAK0O,EAAI3nB,EAAEozB,SAAW,IA+B1B,GA3BQ,MAARpzB,EAAE4lB,KAGLA,IAFAoN,GAAOhzB,EAAEwlB,IAAOuN,EAAI/yB,EAAE4lB,GAAK,IAAO5lB,EAAE4lB,IAAMmN,EAAI,IAElCC,EAAKn3B,GADjBo3B,GAAOjzB,EAAEylB,IAAOkC,EAAI3nB,EAAE6lB,GAAK,IAAO7lB,EAAE6lB,IAAM8B,EAAI,GACpBlrB,GAC1BopB,GAAMoN,GAAMD,EAAK1xB,EAAI2xB,EAAK/Z,IAS1B5L,GANI4lB,EAMC,UAHLF,EAAMD,EAAI,IAGYC,EAAKn3B,GAF3Bo3B,EAAMtL,EAAI,GAE0BlrB,GAAKmpB,GAAM,SAAWqN,GAAMD,EAAK1xB,EAAI2xB,EAAK/Z,GAAK2M,GAAM,IALpF,iCAOyD,IAA3DzB,EAAQnb,QAAQ,sCACnBmC,EAAMwC,OAASwW,EAAQ/U,QAAQqQ,EAAiBpS,GAEhDlC,EAAMwC,OAASN,EAAI,IAAM8W,EAIhB,IAANvb,GAAiB,IAANA,GAAmB,IAANhN,GAAmB,IAANY,GAAmB,IAAN6E,GAAmB,IAAN4X,IAAcga,IAAqC,IAA7B5lB,EAAErE,QAAQ,eAA2B8V,EAAYrQ,KAAK0V,IAAsC,MAA1B9V,WAAWsS,OAAOC,MAA+E,IAA9DuD,EAAQnb,QAAuBmb,EAAQnb,QAAQ,WAC5OmC,EAAMunB,gBAAgB,YAIlBO,EAAM,CACNG,IACHC,EAAM1kB,EAAMsX,EADTmN,EAAQ7U,EAAU,EAAK,GAAK,EAM3B1iB,IAJLk3B,EAAKhzB,EAAEuzB,WAAa,EACpBN,EAAKjzB,EAAEwzB,WAAa,EACpBxzB,EAAEuzB,UAAYxvB,KAAKyK,OAAOukB,IAAMl3B,EAAI,GAAKA,EAAIA,GAAKk3B,GAAKt2B,EAAI,GAAKA,EAAIA,GAAKkrB,IAAM,EAAI/B,GACnF5lB,EAAEwzB,UAAYzvB,KAAKyK,OAAOmZ,IAAMzO,EAAI,GAAKA,EAAIA,GAAKyO,GAAKrmB,EAAI,GAAKA,EAAIA,GAAKyxB,IAAM,EAAIlN,GAC9E/pB,GAAI,EAAGA,GAAI,EAAGA,KAMjBoqB,GAFDhZ,GAA+B,KAF/BomB,EAAOxR,EADPlT,EAAOkW,GAAShpB,MAGJmN,QAAQ,MAAgBqF,WAAWglB,GAAQnR,GAAiB,KAAKniB,EAAG4O,EAAMN,WAAWglB,GAAOA,EAAKjkB,QAAQyP,EAAY,MAAQ,KAC7H9e,EAAE4O,GACN9S,GAAI,GAAMkE,EAAEuzB,WAAavzB,EAAEwzB,UAE3B13B,GAAI,EAAKk3B,EAAKhzB,EAAEuzB,UAAYN,EAAKjzB,EAAEwzB,UAE3CpoB,EAAMwD,IAAS5O,EAAE4O,GAAQ7K,KAAKyK,MAAOtB,EAAMgZ,GAAc,IAANpqB,IAAiB,IAANA,GAAW,EAAIu3B,KAAW,QAa3FI,GAAqBlkB,EAAWmkB,oBAAsBnkB,EAAWokB,kBAAoB,SAAS9qB,GACzF7I,IAgBHoxB,EAAID,EAAKS,EAAKI,EAAKP,EAAKI,EAAKI,EAAKP,EAAKI,EAAKI,EAAKP,EAAKI,EAAKO,EAC3DpB,EAASltB,EAAKutB,EAAKC,EAAKH,EAAIjH,EAAwB0I,EAjBjD9yB,EAAI,KAAKsF,KACZ8F,EAAQ,KAAKpL,EAAEoL,MACfmnB,EAAQvyB,EAAE2jB,SACVM,EAAYjkB,EAAEikB,UACdC,EAAYlkB,EAAEkkB,UACd0P,EAAK5zB,EAAE6jB,OACPgQ,EAAK7zB,EAAE8jB,OACPgQ,EAAK9zB,EAAEmkB,OACPnL,EAAIhZ,EAAEgZ,EACNC,EAAIjZ,EAAEiZ,EACN+K,EAAIhkB,EAAEgkB,EACN+P,EAAQ/zB,EAAEktB,IACVlP,EAAche,EAAEge,YAChBsP,EAAUttB,EAAEstB,QACZ0G,EAAQh0B,EAAEg0B,MACVpQ,EAAQ5jB,EAAE4jB,MASN,GANDoQ,IACHpQ,GAASoQ,EACTzB,GAASyB,MAII,IAANnrB,GAAiB,IAANA,GAAwB,SAAZykB,GAAuB,KAAK9kB,MAAMnC,aAAe,KAAKmC,MAAMzD,gBAAmB,KAAKyD,MAAMnC,aAAiBinB,GAAatJ,GAAMhG,GAAgBkG,GAAcD,GAAoB,IAAP6P,IAAc7G,IAAwB8G,IAAWhQ,GAGpPwO,GAAS3O,GAASmQ,GACrBxB,GAAS1S,EACTiT,EAAOlP,EAAQ/D,EACT,IACNsR,EAAMptB,KAAKwtB,IAAIgB,GAASqB,EACxBnC,EAAM1tB,KAAKytB,IAAIe,GAASqB,EACxBhC,EAAM7tB,KAAKytB,IAAIe,EAAQO,IAASe,EAChChC,EAAM9tB,KAAKwtB,IAAIgB,EAAQO,GAAQe,EAC3Bf,GAAuB,WAAf9yB,EAAEyyB,WACbrB,EAAKrtB,KAAKkwB,IAAInB,EAAOkB,EAAQnU,GAE7B+R,GADAR,EAAKrtB,KAAK4V,KAAK,EAAIyX,EAAKA,GAExBS,GAAOT,EACH4C,IACH5C,EAAKrtB,KAAKkwB,IAAID,EAAQnU,GAEtBsR,GADAC,EAAKrtB,KAAK4V,KAAK,EAAIyX,EAAKA,GAExBK,GAAOL,IAGL2C,IACH/a,GAAKhZ,EAAE2uB,SAAW3uB,EAAE2uB,QAAUwC,EAAMnxB,EAAE4uB,QAAUgD,GAAO5xB,EAAEuvB,QACzDtW,GAAKjZ,EAAE4uB,SAAW5uB,EAAE2uB,QAAU8C,EAAMzxB,EAAE4uB,QAAUiD,GAAO7xB,EAAEwvB,QACrDvC,KAAyBjtB,EAAEmzB,UAAYnzB,EAAEozB,YAC5CpvB,EAAM,KAAKhE,EAAEmlB,UACbnM,GAAkB,IAAbhZ,EAAEmzB,SAAkBnvB,EAAI2Z,MAC7B1E,GAAkB,IAAbjZ,EAAEozB,SAAkBpvB,EAAI4Z,QAG1B5E,GADJhV,EAAM,OACWgV,GAAKhV,IACrBgV,EAAI,GAEDC,EAAIjV,GAASiV,GAAKjV,IACrBiV,EAAI,IAGNmR,GAjCM,IAiCS+G,EAAa,GAjCtB,IAiCkC,KAjClC,IAiC2CM,EAAa,GAjCxD,IAiCoE,KAjCpE,IAiC6EG,EAAa,GAjC1F,IAiCsG,KAjCtG,IAiC+GC,EAAa,GAjC5H,IAiCwI,IAAM7Y,EAAI,IAAMC,EAAI,IAC9J8a,GAAS9G,GACPjtB,KAAAA,EAAEyvB,aAAa,YAAa,UAAYrF,GAG7Chf,EAAMqY,KAAoBzjB,EAAEmzB,UAAYnzB,EAAEozB,SAAY,aAAepzB,EAAEmzB,SAAW,KAAOnzB,EAAEozB,SAAW,aAAe,WAAahJ,GAGnIhf,EAAMqY,KAAoBzjB,EAAEmzB,UAAYnzB,EAAEozB,SAAY,aAAepzB,EAAEmzB,SAAW,KAAOnzB,EAAEozB,SAAW,aAAe,WAAaQ,EAAK,QAAUC,EAAK,IAAM7a,EAAI,IAAMC,EAAI,QA/CvK,CAgEDsZ,GAZAjU,IAECsV,GADJ5vB,EAAM,OACU4vB,GAAM5vB,IACrB4vB,EAAKE,EAAK,MAEPD,EAAK7vB,GAAO6vB,GAAM7vB,IACrB6vB,EAAKC,EAAK,OAEP9V,GAAgBhe,EAAEgkB,GAAMhkB,EAAEikB,WAAcjkB,EAAEkkB,YAC7ClG,EAAc,IAGZuU,GAAS3O,EACZ2O,GAAS1S,EACT0R,EAAMJ,EAAMptB,KAAKwtB,IAAIgB,GACrBf,EAAMC,EAAM1tB,KAAKytB,IAAIe,GACjB3O,IACH2O,GAAS3O,EAAQ/D,EACjB0R,EAAMxtB,KAAKwtB,IAAIgB,GACff,EAAMztB,KAAKytB,IAAIe,GACI,WAAfvyB,EAAEyyB,WACLrB,EAAKrtB,KAAKkwB,KAAKrQ,EAAQoQ,GAASnU,GAEhC0R,GADAH,EAAKrtB,KAAK4V,KAAK,EAAIyX,EAAKA,GAExBI,GAAOJ,EACHpxB,EAAEg0B,QACL5C,EAAKrtB,KAAKkwB,IAAID,EAAQnU,GAEtBsR,GADAC,EAAKrtB,KAAK4V,KAAK,EAAIyX,EAAKA,GAExBK,GAAOL,KAIVQ,GAAOJ,EACPK,EAAMN,MAEA,CAAA,KAAKrN,GAAcD,GAAoB,IAAP6P,GAAa9V,GAAgB+V,GAEnE,YADA3oB,EAAMqY,KAAoBzjB,EAAEmzB,UAAYnzB,EAAEozB,SAAY,aAAepzB,EAAEmzB,SAAW,KAAOnzB,EAAEozB,SAAW,kBAAoB,gBAAkBpa,EAAI,MAAQC,EAAI,MAAQ+K,EAAG,OAAiB,IAAP4P,GAAmB,IAAPC,EAAY,UAAYD,EAAK,IAAMC,EAAK,IAAM,KAG3O1C,EAAMU,EAAM,EACZD,EAAMH,EAAM,EAsBbS,EAAM,EACNF,EAAMC,EAAMP,EAAMI,EAAMH,EAAMI,EAAM,EACpCO,EAAOtU,GAAgB,EAAIA,EAAc,EACzCkT,EAAUlxB,EAAEkxB,QACZltB,EAAM,KACE,IACD,KACPuuB,EAAQrO,EAAYrE,KAEnB0R,EAAMxtB,KAAKwtB,IAAIgB,GAEfb,IADAF,EAAMztB,KAAKytB,IAAIe,IAEfZ,EAAMW,GAAKd,EACXQ,EAAMb,EAAIK,EACVS,EAAMR,EAAID,EACVU,EAAMX,EACNe,GAAOf,EACPJ,GAAOI,EACPE,GAAOF,IAERgB,EAAQtO,EAAYpE,KAInBuR,EAAKQ,GAFLL,EAAMxtB,KAAKwtB,IAAIgB,IAEFP,GADbR,EAAMztB,KAAKytB,IAAIe,IAEflB,EAAKQ,EAAIN,EAAIU,EAAIT,EACjBM,EAAMI,EAAIV,EACVO,EAAMO,EAAId,EACVQ,EAAMJ,GAAKJ,EAAIQ,EAAIT,EACnBU,EAAMJ,GAAKL,EAAIS,EAAIV,EACnBW,GAAUX,EACVe,GAAUf,EACVK,EAAMR,EACNS,EAAMR,GAEI,IAAPyC,IACH9B,GAAK8B,EACL7B,GAAK6B,EACL5B,GAAK4B,EACLxB,GAAKwB,GAEK,IAAPD,IACHjC,GAAKiC,EACLhC,GAAKgC,EACL/B,GAAK+B,EACL9B,GAAK8B,GAEK,IAAPD,IACHzC,GAAKyC,EACLnC,GAAKmC,EACLlC,GAAKkC,EACLjC,GAAKiC,IAGF1C,GAAW6C,KACV7C,IACHlY,GAAKgZ,GAAKd,EACVjY,GAAKgZ,GAAKf,EACVlN,GAAKkO,GAAKhB,EAAQA,GAEf6C,IACH/a,GAAKhZ,EAAE2uB,SAAW3uB,EAAE2uB,QAAUwC,EAAMnxB,EAAE4uB,QAAUgD,GAAO5xB,EAAEuvB,QACzDtW,GAAKjZ,EAAE4uB,SAAW5uB,EAAE2uB,QAAU8C,EAAMzxB,EAAE4uB,QAAUiD,GAAO7xB,EAAEwvB,SAEtDxW,EAAIhV,GAAOgV,GAAKhV,IACnBgV,EA3DK,KA6DFC,EAAIjV,GAAOiV,GAAKjV,IACnBiV,EA9DK,KAgEF+K,EAAIhgB,GAAOggB,GAAKhgB,IACnBggB,EAAI,IAKNoG,EAAcpqB,EAAEmzB,UAAYnzB,EAAEozB,SAAY,aAAepzB,EAAEmzB,SAAW,KAAOnzB,EAAEozB,SAAW,eAAiB,YAC3GhJ,IAAe+G,EAAMntB,GAAOmtB,GAAOntB,EAvE5B,IAuE0CmtB,GAxEzC,KAwE0DM,EAAMztB,GAAOytB,GAAOztB,EAvE/E,IAuE6FytB,GAxE5F,KAwE6GC,EAAM1tB,GAAO0tB,GAAO1tB,EAvElI,IAuEgJ0tB,GACvJtH,GAzEQ,KAyEeuH,EAAM3tB,GAAO2tB,GAAO3tB,EAxEpC,IAwEkD2tB,GAzEjD,KAyEkEC,EAAM5tB,GAAO4tB,GAAO5tB,EAxEvF,IAwEqG4tB,GAzEpG,KAyEqHC,EAAM7tB,GAAO6tB,GAAO7tB,EAxE1I,IAwEwJ6tB,GAC3J5N,GAAaC,GAAoB,IAAP4P,GAC7B1J,GA3EO,KA2EgB0H,EAAM9tB,GAAO8tB,GAAO9tB,EA1ErC,IA0EmD8tB,GA3ElD,KA2EmEC,EAAM/tB,GAAO+tB,GAAO/tB,EA1ExF,IA0EsG+tB,GA3ErG,KA2EsHC,EAAMhuB,GAAOguB,GAAOhuB,EA1E3I,IA0EyJguB,GAC/J5H,GA5EO,KA4EgB6H,EAAMjuB,GAAOiuB,GAAOjuB,EA3ErC,IA2EmDiuB,GA5ElD,KA4EmEC,EAAMluB,GAAOkuB,GAAOluB,EA3ExF,IA2EsGkuB,GA5ErG,KA4EsHI,EAAMtuB,GAAOsuB,GAAOtuB,EA3E3I,IA2EyJsuB,GA5ExJ,KA8EPlI,GAAa,gBAEdA,GAAapR,EAhFL,IAgFiBC,EAhFjB,IAgF6B+K,EAhF7B,KAgF0ChG,EAAe,GAAMgG,EAAIhG,EAAgB,GAAK,IAEhG5S,EAAMqY,IAAkB2G,KAG1BruB,EAAIsxB,GAAUtwB,WACZic,EAAIjd,EAAEkd,EAAIld,EAAEioB,EAAIjoB,EAAE6nB,MAAQ7nB,EAAEi4B,MAAQj4B,EAAE4nB,SAAW5nB,EAAEkoB,UAAYloB,EAAEmoB,UAAYnoB,EAAEm1B,QAAUn1B,EAAEo3B,SAAWp3B,EAAEq3B,SAAWr3B,EAAEwzB,QAAUxzB,EAAEyzB,QAAU,EAC7IzzB,EAAE8nB,OAAS9nB,EAAE+nB,OAAS/nB,EAAEooB,OAAS,EAEjCiI,GAA4B,6RAA8R,CAACH,OAAO,SAASjsB,EAAGP,EAAGy0B,EAAa3K,EAAMtc,EAAIuH,EAAQ3P,GAC3W0kB,GAAAA,EAAK4K,uBAAyBtvB,EAAeoI,OAAAA,EACjDsc,EAAK4K,qBAAuBtvB,EACxBuvB,IAAAA,EAAavvB,EAAKwvB,OAAgC,mBAAhBxvB,EAAKwvB,MAAyBxvB,EAAKwvB,MAAQ,EAC7ED,IACHvvB,EAAKwvB,MAAQD,EAAU3V,EAAQze,IAE5Bs0B,IASHzM,EAAIlf,EAAM4rB,EAAOC,EAAWC,EAAIzb,EAAGC,EAAG6X,EAAQ/0B,EAT3Cu4B,EAAsBt0B,EAAEkvB,aAC3B9jB,EAAQpL,EAAEoL,MAEVtP,EAAIkxB,GAAgB1wB,OACpBuM,EAAIhE,EACJ6vB,EAAe,GAEf9M,EAAKlE,GAAc1jB,EAAGkd,GAAK,EAAMrU,EAAE8rB,gBACnCC,EAAO/rB,EAAEuhB,YAAuC,mBAAjBvhB,EAAEuhB,UAA6BvhB,EAAEuhB,UAAU3L,EAAQjR,GAAW3E,EAAEuhB,WAO5FwK,GALJhN,EAAG6K,SAAW5pB,EAAE4pB,UAAY7K,EAAG6K,UAAY1V,EAAUM,gBACrDkM,EAAKc,WAAazC,EACd,cAAe/e,IAClBA,EAAE8a,SAAW9a,EAAEgsB,WAEZD,GAAyB,iBAAVA,GAAsBnR,IACxC9a,EAAO0X,EAASjV,OACXqY,IAAkBmR,EACvBjsB,EAAKynB,QAAU,QACfznB,EAAK2B,SAAW,YACW,IAAvBsqB,EAAK3rB,QAAQ,OAChBN,EAAKgV,MAAQiE,GAAU5hB,EAAG,SAC1B2I,EAAKiV,OAASgE,GAAU5hB,EAAG,WAE5BxE,EAAKunB,KAAKD,YAAYzC,GACtBwH,EAAKnE,GAAcrD,EAAU,MAAM,GACf,WAAhBuH,EAAG6K,WACN5K,EAAG/D,QAAU/f,KAAKwtB,IAAI1J,EAAGjE,MAAQ/D,IAE9B+H,EAAGsF,MACNlU,EAAI4O,EAAG+G,QACP1V,EAAI2O,EAAGgH,QACP/G,EAAG7O,GAAK4O,EAAG2H,QACX1H,EAAG5O,GAAK2O,EAAG4H,SACP3mB,EAAEisB,iBAAmBjsB,EAAEksB,aAC1BH,EAAO,GACPxG,GAAgBpuB,EAAGslB,GAAezc,EAAEisB,iBAAkBF,EAAM/rB,EAAEksB,UAAWlsB,EAAE2lB,cAAc,GACzFxV,EAAI4b,EAAKjG,QACT1V,EAAI2b,EAAKhG,QACT/G,EAAG7O,GAAK4b,EAAKrF,QAAU3H,EAAG2H,QAC1B1H,EAAG5O,GAAK2b,EAAKpF,QAAU5H,EAAG4H,UAEvBxW,GAAKC,KACR6X,EAAS3B,GAAW9O,GAAU,GAC9BwH,EAAG7O,GAAKA,GAAKA,EAAI8X,EAAO,GAAK7X,EAAI6X,EAAO,IACxCjJ,EAAG5O,GAAKA,GAAKD,EAAI8X,EAAO,GAAK7X,EAAI6X,EAAO,MAG1Ct1B,EAAKunB,KAAKE,YAAY5C,GACjBwH,EAAG7J,cACP6J,EAAG7J,YAAc4J,EAAG5J,aAEH,MAAdnV,EAAEsqB,WACLtL,EAAGsL,SAAWpN,GAAUld,EAAEsqB,SAAUvL,EAAGuL,WAEtB,MAAdtqB,EAAEuqB,WACLvL,EAAGuL,SAAWrN,GAAUld,EAAEuqB,SAAUxL,EAAGwL,gBAElC,GAAkB,WAAd,EAAOvqB,GAAiB,CAW9B4rB,GAVJ5M,EAAK,CAAChE,OAAOkC,GAAuB,MAAZld,EAAEgb,OAAkBhb,EAAEgb,OAAShb,EAAEwrB,MAAOzM,EAAG/D,QAClEC,OAAOiC,GAAuB,MAAZld,EAAEib,OAAkBjb,EAAEib,OAASjb,EAAEwrB,MAAOzM,EAAG9D,QAC7DK,OAAO4B,GAAUld,EAAEsb,OAAQyD,EAAGzD,QAC9BnL,EAAE+M,GAAUld,EAAEmQ,EAAG4O,EAAG5O,GACpBC,EAAE8M,GAAUld,EAAEoQ,EAAG2O,EAAG3O,GACpB+K,EAAE+B,GAAUld,EAAEmb,EAAG4D,EAAG5D,GACpBmP,SAASpN,GAAUld,EAAEsqB,SAAUvL,EAAGuL,UAClCC,SAASrN,GAAUld,EAAEuqB,SAAUxL,EAAGwL,UAClCpV,YAAY+H,GAAUld,EAAEmsB,qBAAsBpN,EAAG5J,cAExC,OADVyW,EAAK5rB,EAAEosB,qBAEF,GAAe,WAAf,EAAOR,GACL9rB,IAAAA,KAAQ8rB,EACZ5rB,EAAEF,GAAQ8rB,EAAG9rB,QAGdE,EAAE8a,SAAW8Q,EAGK,iBAAT5rB,EAAEmQ,IAAyC,IAAtBnQ,EAAEmQ,EAAE/P,QAAQ,OAC3C4e,EAAG7O,EAAI,EACP6O,EAAGsL,SAAWpN,GAAUld,EAAEmQ,EAAG4O,EAAGuL,WAEb,iBAATtqB,EAAEoQ,IAAyC,IAAtBpQ,EAAEoQ,EAAEhQ,QAAQ,OAC3C4e,EAAG5O,EAAI,EACP4O,EAAGuL,SAAWrN,GAAUld,EAAEoQ,EAAG2O,EAAGwL,WAGjCvL,EAAGlE,SAAWqC,GAAa,aAAcnd,EAAKA,EAAE8a,SAAY,kBAAmB9a,EAAKA,EAAEqsB,cAAgB,SAAWtN,EAAGjE,SAAUiE,EAAGjE,SAAU,WAAY+Q,GACnJ3Q,KACH8D,EAAG5D,UAAY+B,GAAa,cAAend,EAAKA,EAAEob,UAAa,mBAAoBpb,EAAKA,EAAEssB,eAAiB,SAAWvN,EAAG3D,WAAa,EAAG2D,EAAG3D,UAAW,YAAayQ,GACpK7M,EAAG3D,UAAY8B,GAAa,cAAend,EAAKA,EAAEqb,UAAa,mBAAoBrb,EAAKA,EAAEusB,eAAiB,SAAWxN,EAAG1D,WAAa,EAAG0D,EAAG1D,UAAW,YAAawQ,IAErK7M,EAAGjE,MAAQoC,GAAYnd,EAAE+a,MAAOgE,EAAGhE,OACnCiE,EAAGmM,MAAQhO,GAAYnd,EAAEmrB,MAAOpM,EAAGoM,OAY7B,IAVHjQ,IAA4B,MAAblb,EAAEykB,UACpB1F,EAAG0F,QAAUzkB,EAAEykB,QACfkH,GAAY,IAGbD,EAAS3M,EAAG0F,SAAW1F,EAAG5D,GAAK4D,EAAG3D,WAAa2D,EAAG1D,WAAa2D,EAAG7D,GAAK6D,EAAG5D,WAAa4D,EAAG3D,WAAa2D,EAAG7J,cACjF,MAAXnV,EAAEwrB,QACfxM,EAAG1D,OAAS,KAGJroB,GAAK,KAEb84B,EAAO/M,EADP9rB,EAAIixB,GAAgBlxB,IACL8rB,EAAG7rB,IAzGZ,MA0GY64B,GA1GZ,MA0GmC,MAAR/rB,EAAE9M,IAA6B,MAAfikB,EAASjkB,MACzDy4B,GAAY,EACZvnB,EAAK,IAAI8c,GAAanC,EAAI7rB,EAAG6rB,EAAG7rB,GAAI64B,EAAM3nB,GACtClR,KAAK24B,IACRznB,EAAGxN,EAAIi1B,EAAa34B,IAErBkR,EAAG4c,IAAM,EACT5c,EAAGuH,OAASA,EACZ+U,EAAK1U,gBAAgBlY,KAAKsQ,EAAGpP,IAoDxBoP,OAhDP2nB,EAAsC,mBAAvB/rB,EAAEisB,gBAAmCjsB,EAAEisB,gBAAgBrW,EAAQjR,GAAW3E,EAAEisB,gBACvFlN,EAAGsF,MAAQ0H,GAAQ/rB,EAAEksB,aACxB/b,EAAI4O,EAAG2H,QACPtW,EAAI2O,EAAG4H,QACPpB,GAAgBpuB,EAAGslB,GAAesP,GAAO/M,EAAIhf,EAAEksB,UAAWlsB,EAAE2lB,cAC5DvhB,EAAKud,GAAyB5C,EAAI,WAAY0M,EAAsB1M,EAAKC,GAAI8G,QAAS9G,EAAG8G,QAAS1hB,EAvH1E,mBAwHxBA,EAAKud,GAAyB5C,EAAI,WAAY0M,EAAsB1M,EAAKC,GAAI+G,QAAS/G,EAAG+G,QAAS3hB,EAxH1E,mBAyHpB+L,IAAM4O,EAAG2H,SAAWtW,IAAM2O,EAAG4H,UAChCviB,EAAKud,GAAyB5C,EAAI,UAAY0M,EAAsBtb,EAAI4O,EAAG2H,QAAU3H,EAAG2H,QAAStiB,EA1H1E,mBA2HvBA,EAAKud,GAAyB5C,EAAI,UAAY0M,EAAsBrb,EAAI2O,EAAG4H,QAAU5H,EAAG4H,QAASviB,EA3H1E,oBA6HxB2nB,EAAO,YAEJA,GAAS7Q,IAAewQ,GAAS3M,EAAGsJ,WACnCzN,IACH+Q,GAAY,EACZz4B,EAAIqxB,GACCwH,IAEJA,GADAA,GAAQhT,GAAU5hB,EAAGjE,EAAGmhB,GAAK,EAAO,WAAa,IAAI7gB,MAAM,MAC/C,GAAK,IAAMu4B,EAAK,GAAK,IAAMhN,EAAGsJ,QAAU,MAErD0D,GAAQ,IACR3nB,EAAK,IAAI8c,GAAa3e,EAAOrP,EAAG,EAAG,EAAGkR,GAAK,EAxIpB,oBAyIpBxQ,EAAI2O,EAAMrP,GACbkR,EAAGuH,OAASA,EACRuP,IACHpb,EAAOif,EAAGsJ,QACV0D,EAAOA,EAAKv4B,MAAM,KAClBurB,EAAGsJ,SAAY0D,EAAKt4B,OAAS,EAAKgS,WAAWsmB,EAAK,IAAMjsB,IAAS,EACjEsE,EAAG4c,IAAM5c,EAAGxN,EAAIm1B,EAAK,GAAK,KAAOA,EAAK,IAAM,OAAS,QACrD3nB,EAAK,IAAI8c,GAAanC,EAAI,UAAW,EAAG,EAAG3a,GAAK,EAAGA,EAAGpP,IACnDpB,EAAIkM,EACPsE,EAAG4c,IAAM5c,EAAGxN,EAAImoB,EAAGsJ,SAEnBjkB,EAAG4c,IAAM5c,EAAGxN,EAAIm1B,GAKjBtP,GAAesP,EAAO,GAAIhN,IAGxB4M,IACHjL,EAAK8L,eAAoBzN,EAAGsF,KAAOD,KAA0BsH,GAAiC,IAAxB,KAAKc,eAA6B,EAAJ,GAEjGjB,IACHvvB,EAAKwvB,MAAQD,GAEPnnB,GACLkf,WAAU,EAAML,QAAO,IAE1BM,GAA4B,YAAa,CAACJ,aAAa,uBAAwBF,QAAO,EAAM3d,OAAM,EAAM0a,OAAM,EAAMqD,QAAQ,UAC5HE,GAA4B,WAAY,CAACJ,aAAa,YAAaF,QAAO,EAAMjD,OAAM,EAAME,UAAUL,GAAc,sBAAsB,GAAO,KAEjJ0D,GAA4B,eAAgB,CAACJ,aAAa,MAAOC,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,GACnG/U,EAAI,KAAKssB,OAAOtsB,GACZoT,IAEHyiB,EAAKx5B,EAAGy5B,EAAKC,EAAKC,EAAIC,EAAIvK,EAAIwK,EAAI5C,EAAGpL,EAAGiO,EAAMC,EAAMC,EAAKC,EAAIC,EAAIC,EAF9DpjB,EAAQ,CAAC,sBAAsB,uBAAuB,0BAA0B,0BACnFzH,EAAQpL,EAAEoL,MAKNtP,IAHLi3B,EAAIzkB,WAAWtO,EAAEolB,aACjBuC,EAAIrZ,WAAWtO,EAAEqlB,cACjBiQ,EAAM71B,EAAEpD,MAAM,KACTP,EAAI,EAAGA,EAAI+W,EAAMvW,OAAQR,IACzB,KAAKC,EAAEkN,QAAQ,YAClB4J,EAAM/W,GAAKulB,EAAiBxO,EAAM/W,MAGV,KADzB25B,EAAKD,EAAM5T,GAAU5hB,EAAG6S,EAAM/W,GAAIohB,GAAK,EAAO,QACvCjU,QAAQ,OACdusB,EAAMC,EAAGp5B,MAAM,KACfo5B,EAAKD,EAAI,GACTA,EAAMA,EAAI,IAEXE,EAAKH,EAAMD,EAAIx5B,GACfqvB,EAAK7c,WAAWmnB,GAChBI,EAAOJ,EAAGzsB,QAAQmiB,EAAK,IAAI7uB,SAC3Bw5B,EAAwB,MAAjBJ,EAAG9oB,OAAO,KAEhB+oB,EAAKpnB,SAASmnB,EAAG9oB,OAAO,GAAG,IAAK,IAChC8oB,EAAKA,EAAG1sB,OAAO,GACf2sB,GAAMrnB,WAAWonB,GACjBE,EAAOF,EAAG1sB,QAAQ2sB,EAAK,IAAIr5B,QAAUq5B,EAAK,EAAI,EAAI,KAAO,KAEzDA,EAAKrnB,WAAWonB,GAChBE,EAAOF,EAAG1sB,QAAQ2sB,EAAK,IAAIr5B,SAEf,KAATs5B,IACHA,EAAO3Y,EAAWlhB,IAAM85B,GAErBD,IAASC,IACZE,EAAK5T,GAAiBniB,EAAG,aAAcmrB,EAAI0K,GAC3CG,EAAK7T,GAAiBniB,EAAG,YAAamrB,EAAI0K,GAC7B,MAATD,GACHH,EAAMM,EAAKhD,EAAI,IAAO,IACtByC,EAAOQ,EAAKrO,EAAI,IAAO,KACJ,OAATiO,GAEVH,EAAMM,GADNE,EAAK9T,GAAiBniB,EAAG,aAAc,EAAG,OACzB,KACjBw1B,EAAOQ,EAAKC,EAAM,OAElBR,EAAKM,EAAK,KACVP,EAAMQ,EAAK,MAERF,IACHJ,EAAMpnB,WAAWmnB,GAAME,EAAMC,EAC7BL,EAAOjnB,WAAWknB,GAAOG,EAAMC,IAGjC3oB,EAAKwd,GAAcrf,EAAOyH,EAAM/W,GAAI25B,EAAK,IAAMD,EAAKE,EAAK,IAAMH,GAAK,EAAO,MAAOtoB,GAE5EA,OAAAA,GACL6e,QAAO,EAAM/C,UAAUL,GAAc,mBAAmB,GAAO,KAClE0D,GAA4B,0FAA2F,CAACJ,aAAa,MAAOC,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,GACvKiW,OAAAA,GAAczqB,EAAEoL,MAAOrP,EAAG,KAAKgwB,OAAOnK,GAAU5hB,EAAGjE,EAAGmhB,GAAK,EAAO,YAAa,KAAK6O,OAAOtsB,IAAI,EAAO,MAAOwN,IAClH6e,QAAO,EAAM/C,UAAUL,GAAc,WAAW,GAAO,KAC1D0D,GAA4B,qBAAsB,CAACJ,aAAa,MAAOC,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,GACrG0hB,IAIHtL,EAAIW,EAAIzvB,EAAGq6B,EAAK7yB,EAAS8yB,EAJtBF,EAAK,sBACRpU,EAAM5E,GAAOyE,GAAkB3hB,GAC/By1B,EAAK,KAAK1J,QAAUjK,EAAMtD,EAAUsD,EAAGI,iBAAiBgU,EAAK,MAAQ,IAAMpU,EAAGI,iBAAiBgU,EAAK,MAAQpU,EAAGI,iBAAiBgU,GAAMl2B,EAAEihB,aAAaoV,oBAAsB,IAAMr2B,EAAEihB,aAAaqV,sBAAwB,OACxNZ,EAAK,KAAK3J,OAAOtsB,GAEbg2B,IAAqB,IAArBA,EAAGxsB,QAAQ,QAAuC,IAArBysB,EAAGzsB,QAAQ,OAAgBysB,EAAGr5B,MAAM,KAAKC,OAAS,IACnF85B,EAAMxU,GAAU5hB,EAAG,mBAAmBqP,QAAQgQ,EAAS,MACpC,SAAR+W,EAAgB,CAKnB,IAJPxL,EAAK6K,EAAGp5B,MAAM,KACdkvB,EAAKmK,EAAGr5B,MAAM,KACdikB,EAASmP,aAAa,MAAO2G,GAC7Bt6B,EAAI,IACKA,GAAK,IAEbq6B,GAA4B,KAD5BV,EAAK7K,EAAG9uB,IACEmN,QAAQ,UACmB,IAAxBsiB,EAAGzvB,GAAGmN,QAAQ,QAC1B3F,EAAiB,IAANxH,EAAWkE,EAAEolB,YAAc9E,EAAS3C,MAAQ3d,EAAEqlB,aAAe/E,EAAS1C,OACjFgN,EAAG9uB,GAAKq6B,EAAO7nB,WAAWmnB,GAAM,IAAMnyB,EAAW,KAAQgL,WAAWmnB,GAAMnyB,EAAU,IAAO,KAG7FmyB,EAAK7K,EAAG3sB,KAAK,KAGR,OAAA,KAAKysB,aAAa1qB,EAAEoL,MAAOqqB,EAAIC,EAAIzoB,EAAIuH,IAC5CuU,UAAUzD,KACb8G,GAA4B,iBAAkB,CAACJ,aAAa,MAAOjD,UAAU,SAASlgB,GAE7EA,MAAkB,QAD1BA,GAAK,IACKG,OAAO,EAAE,GAAeH,EAAIyc,IAAmC,IAApBzc,EAAEI,QAAQ,KAAcJ,EAAI,IAAMA,EAAIA,MAE5FujB,GAA4B,cAAe,CAACJ,aAAa,MAAOF,QAAO,IACvEM,GAA4B,oBAAqB,CAACJ,aAAa,UAAWF,QAAO,IACjFM,GAA4B,iBAAkB,CAACN,QAAO,IACtDM,GAA4B,qBAAsB,CAACN,QAAO,IAC1DM,GAA4B,aAAc,CAACN,QAAO,IAClDM,GAA4B,SAAU,CAACH,OAAO3C,GAAe,mDAC7D8C,GAA4B,UAAW,CAACH,OAAO3C,GAAe,uDAC9D8C,GAA4B,OAAQ,CAACJ,aAAa,wBAAyBC,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,GACzG/X,IAAAA,EAAGqlB,EAAIoH,EAUJ,OATH1K,EAAU,GACbsD,EAAK9hB,EAAEihB,aACPiI,EAAQ1K,EAAU,EAAI,IAAM,IAC5B/hB,EAAI,QAAUqlB,EAAGyU,QAAUrN,EAAQpH,EAAG0U,UAAYtN,EAAQpH,EAAG2U,WAAavN,EAAQpH,EAAG4U,SAAW,IAChGj3B,EAAI,KAAKssB,OAAOtsB,GAAGpD,MAAM,KAAK4B,KAAKirB,KAEnCzsB,EAAI,KAAKsvB,OAAOnK,GAAU5hB,EAAG,KAAKjE,EAAGmhB,GAAK,EAAO,KAAK8E,OACtDviB,EAAI,KAAKssB,OAAOtsB,IAEV,KAAKirB,aAAa1qB,EAAEoL,MAAO3O,EAAGgD,EAAGwN,EAAIuH,MAE7C4X,GAA4B,aAAc,CAACJ,aAAa,mBAAoB7d,OAAM,EAAM0a,OAAM,IAC9FuD,GAA4B,wBAAyB,CAACH,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,GAAYA,OAAAA,KACjGmf,GAA4B,SAAU,CAACJ,aAAa,iBAAkBC,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,GACpGmiB,IAAAA,EAAK/U,GAAU5hB,EAAG,iBAAkBkd,GAAK,EAAO,OACnD9P,EAAM,KAAK2e,OAAOtsB,GAAGpD,MAAM,KAC3Bu5B,EAAOxoB,EAAI,GAAGiC,QAAQyP,EAAY,IAI5B,MAHM,OAAT8W,IACHe,EAAMroB,WAAWqoB,GAAMxU,GAAiBniB,EAAG,iBAAkB,EAAG41B,GAASA,GAEnE,KAAKlL,aAAa1qB,EAAEoL,MAAO,KAAK2gB,OAAO4K,EAAK,IAAM/U,GAAU5hB,EAAG,iBAAkBkd,GAAK,EAAO,SAAW,IAAM0E,GAAU5hB,EAAG,iBAAkBkd,GAAK,EAAO,SAAU9P,EAAInP,KAAK,KAAMgP,EAAIuH,IAC1LrG,OAAM,EAAM4a,UAAU,SAASlgB,GAC7BhN,IAAAA,EAAIgN,EAAExM,MAAM,KACTR,OAAAA,EAAE,GAAK,KAAOA,EAAE,IAAM,SAAW,KAAOgN,EAAEuF,MAAMia,KAAc,CAAC,SAAS,MAEjF+D,GAA4B,cAAe,CAACH,OAAO3C,GAAe,uEAClE8C,GAA4B,4BAA6B,CAACH,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,GACxFjT,IAAAA,EAAIvB,EAAEoL,MACTwD,EAAQ,aAAcrN,EAAK,WAAa,aAClC,OAAA,IAAIwoB,GAAaxoB,EAAGqN,EAAM,EAAG,EAAG3B,GAAK,EAAGlR,GAAG,EAAO,EAAGwF,EAAEqN,GAAOnP,MAIlEm3B,IAAAA,GAAqB,SAAS/tB,GAC5B7I,IAGH62B,EAHG72B,EAAI,KAAKA,EACZokB,EAAUpkB,EAAE4N,QAAUgU,GAAU,KAAKtc,KAAM,WAAa,GACxD4H,EAAO,KAAK3L,EAAI,KAAKD,EAAIuH,EAAK,EAEnB,MAARqE,KACgC,IAA/BkX,EAAQnb,QAAQ,YAAqD,IAAjCmb,EAAQnb,QAAQ,cAAqD,IAA/Bmb,EAAQnb,QAAQ,WAC7FjJ,EAAE2yB,gBAAgB,UAClBkE,GAASjV,GAAU,KAAKtc,KAAM,YAE9BtF,EAAE4N,OAASwW,EAAQ/U,QAAQ4P,EAAiB,IAC5C4X,GAAO,IAGJA,IACA,KAAKC,MACR92B,EAAE4N,OAASwW,EAAUA,GAAY,iBAAmBlX,EAAM,MAExB,IAA/BkX,EAAQnb,QAAQ,UACP,IAARiE,GAAc,KAAK4pB,MACtB92B,EAAE4N,OAASwW,EAAU,kBAAoBlX,EAAM,KAGhDlN,EAAE4N,OAASwW,EAAQ/U,QAAQ0P,EAAa,WAAa7R,KAIzDkf,GAA4B,0BAA2B,CAACJ,aAAa,IAAKC,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,GACxG/X,IAAAA,EAAI6R,WAAWsT,GAAU5hB,EAAG,UAAWkd,GAAK,EAAO,MACtD9R,EAAQpL,EAAEoL,MACV2rB,EAAqB,cAANh7B,EA0BTkR,MAzBW,iBAAPxN,GAAmC,MAAhBA,EAAEmN,OAAO,KACtCnN,GAAsB,MAAhBA,EAAEmN,OAAO,IAAe,EAAI,GAAK0B,WAAW7O,EAAEuJ,OAAO,IAAMvM,GAE9Ds6B,GAAqB,IAANt6B,GAA+C,WAApCmlB,GAAU5hB,EAAG,aAAckd,IAA2B,IAANzd,IAC7EhD,EAAI,GAEDikB,EACHzT,EAAK,IAAI8c,GAAa3e,EAAO,UAAW3O,EAAGgD,EAAIhD,EAAGwQ,KAElDA,EAAK,IAAI8c,GAAa3e,EAAO,UAAe,IAAJ3O,EAAmB,KAATgD,EAAIhD,GAAUwQ,IAC7D6pB,IAAMC,EAAc,EAAI,EAC3B3rB,EAAM4rB,KAAO,EACb/pB,EAAGxO,KAAO,EACVwO,EAAGxQ,EAAI,iBAAmBwQ,EAAG1L,EAAI,IACjC0L,EAAGxN,EAAI,kBAAoBwN,EAAG1L,EAAI0L,EAAG3L,GAAK,IAC1C2L,EAAG3H,KAAOtF,EACViN,EAAGuH,OAASA,EACZvH,EAAGwB,SAAWmoB,IAEXG,KACH9pB,EAAK,IAAI8c,GAAa3e,EAAO,aAAc,EAAG,EAAG6B,GAAK,EAAG,MAAM,EAAO,EAAW,IAANxQ,EAAW,UAAY,SAAmB,IAANgD,EAAW,SAAW,YAClIoqB,IAAM,UACTN,EAAK1U,gBAAgBlY,KAAKsQ,EAAGpP,GAC7B0rB,EAAK1U,gBAAgBlY,KAAKZ,IAEpBkR,KAIJ0jB,IAAAA,GAAc,SAASpvB,EAAGxF,GACxBA,IACCwF,EAAE01B,gBACiB,OAAlBl7B,EAAEiN,OAAO,EAAE,IAAiC,WAAlBjN,EAAEiN,OAAO,EAAE,KACxCjN,EAAI,IAAMA,GAEXwF,EAAE01B,eAAel7B,EAAEsT,QAAQ8P,EAAU,OAAOoC,gBAE5ChgB,EAAEoxB,gBAAgB52B,KAIrBm7B,GAAqB,SAASruB,GAEzBA,GADC7I,KAAAA,EAAEm3B,WAAa,KACV,IAANtuB,GAAiB,IAANA,EAAS,CAClB7I,KAAAA,EAAEyvB,aAAa,QAAgB,IAAN5mB,EAAW,KAAKpM,EAAI,KAAKgD,GAGhDilB,IAFHA,IAAAA,EAAM,KAAKpf,KACd/D,EAAI,KAAKvB,EAAEoL,MACLsZ,GACDA,EAAI7b,EAGRtH,EAAEmjB,EAAI3oB,GAAK2oB,EAAI7b,EAFf8nB,GAAYpvB,EAAGmjB,EAAI3oB,GAIpB2oB,EAAMA,EAAIne,MAED,IAANsC,GAAW,KAAK7I,EAAEm3B,aAAe,OAC/Bn3B,KAAAA,EAAEm3B,WAAa,WAEX,KAAKn3B,EAAEqvB,aAAa,WAAa,KAAK5vB,GAC3CO,KAAAA,EAAEyvB,aAAa,QAAS,KAAKhwB,IAGrC2sB,GAA4B,YAAa,CAACH,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,EAAIuH,EAAQ3P,GAChFpI,IAEH26B,EAAS3B,EAAI4B,EAAMC,EAAY5S,EAF5BjoB,EAAIuD,EAAEqvB,aAAa,UAAY,GAClCvO,EAAU9gB,EAAEoL,MAAM0V,QAUfuW,IARJpqB,EAAKsc,EAAKgO,aAAe,IAAIxN,GAAa/pB,EAAGjE,EAAG,EAAG,EAAGkR,EAAI,IACvDwB,SAAWyoB,GACdjqB,EAAGxL,IAAM,GACTub,GAAe,EACf/P,EAAGxQ,EAAIA,EACPg5B,EAAKnS,GAActjB,EAAGkd,GAEtBma,EAAOr3B,EAAEm3B,WACC,CAGFzS,IAFP4S,EAAa,GACb5S,EAAM2S,EAAK/xB,KACJof,GACN4S,EAAW5S,EAAI3oB,GAAK,EACpB2oB,EAAMA,EAAIne,MAEX8wB,EAAK5oB,SAAS,GAYRxB,OAVPjN,EAAEm3B,WAAalqB,EACfA,EAAGxN,EAAqB,MAAhBA,EAAEmN,OAAO,GAAcnN,EAAIhD,EAAE4S,QAAQ,IAAIuR,OAAO,YAAcnhB,EAAEuJ,OAAO,GAAK,cAAe,KAAwB,MAAhBvJ,EAAEmN,OAAO,GAAc,IAAMnN,EAAEuJ,OAAO,GAAK,IACtJhJ,EAAEyvB,aAAa,QAASxiB,EAAGxN,GAC3B23B,EAAU/S,GAAQrkB,EAAGy1B,EAAInS,GAActjB,GAAI6E,EAAMyyB,GACjDt3B,EAAEyvB,aAAa,QAAShzB,GACxBwQ,EAAG3H,KAAO8xB,EAAQxS,SACd5kB,EAAEoL,MAAM0V,UAAYA,IACvB9gB,EAAEoL,MAAM0V,QAAUA,GAEnB7T,EAAKA,EAAGye,OAASnC,EAAKC,MAAMxpB,EAAGo3B,EAAQ3S,KAAMxX,EAAIuH,MAK9CgjB,IAAAA,GAAsB,SAAS3uB,GAC9BA,IAAM,IAANA,GAAiB,IAANA,IAAa,KAAKvD,KAAKe,aAAe,KAAKf,KAAKP,gBAAqC,gBAAnB,KAAKO,KAAKA,KAAwB,CAC9G/D,IAEH1F,EAAGE,EAAGD,EAAG27B,EAAgBrN,EAFtB7oB,EAAI,KAAKvB,EAAEoL,MACdssB,EAAiBva,EAAciN,UAAUZ,MAEtC,GAAW,QAAX,KAAK/pB,EACR8B,EAAEuf,QAAU,GACZ2W,GAAiB,OAIV,IADP37B,GADAD,EAAI,KAAK4D,EAAEpD,MAAM,KAAK4B,KAAK,IAAI5B,MAAM,MAC/BC,SACGR,GAAK,GACbC,EAAIF,EAAEC,GACFqhB,EAAcphB,KACbohB,EAAcphB,GAAGytB,QAAUkO,EAC9BD,GAAiB,EAEjB17B,EAAW,oBAANA,EAA2BqxB,GAAuBjQ,EAAcphB,GAAGA,GAG1E40B,GAAYpvB,EAAGxF,GAGb07B,IACH9G,GAAYpvB,EAAGkiB,KACf2G,EAAY,KAAKpqB,EAAEkvB,gBAEd9E,EAAU8C,MACRltB,KAAAA,EAAE2yB,gBAAgB,mBAClB3yB,KAAAA,EAAE2yB,gBAAgB,qBAEjB,KAAK3yB,EAAEkvB,iBAkBXpzB,IAZPswB,GAA4B,aAAc,CAACH,OAAO,SAASjsB,EAAGP,EAAG1D,EAAGwtB,EAAMtc,GAOlEA,OANPA,EAAK,IAAI8c,GAAa/pB,EAAGjE,EAAG,EAAG,EAAGkR,EAAI,IACnCwB,SAAW+oB,GACdvqB,EAAGxN,EAAIA,EACPwN,EAAGxL,IAAM,GACTwL,EAAG3H,KAAOikB,EAAKhc,OACfyP,GAAe,EACR/P,KAGRlR,EAAI,2CAA2CM,MAAM,KACrDP,GAAIC,EAAEO,OACCR,MACNwwB,GAAoBvwB,EAAED,MAUvBC,EAAIghB,EAAUhgB,WACZgP,SAAWhQ,EAAEo4B,qBAAuBp4B,EAAEsuB,WAAa,KAGrDtuB,EAAE4Y,aAAe,SAASjU,EAAQmE,EAAM2D,EAAOpH,GAC1C,IAACV,EAAOyK,SACJ,OAAA,EAEHqC,KAAAA,QAAUA,EAAU9M,EACpB6M,KAAAA,OAAS/E,EACTmvB,KAAAA,MAAQ9yB,EACb4Z,EAASrd,EACT+c,EAAatZ,EAAK2mB,UAClBxO,GAAe,EACfC,EAAapY,EAAK0Y,WAAaR,EAAUQ,UACzCL,EAAMyE,GAAkBjhB,GACxBmU,EAAkB,KAAKA,gBACnBzJ,IACHvC,EAAGoE,EAAI6J,EAAKC,EAAOC,EAAMnM,EAAM+sB,EAAQC,EAAKC,EADzC1sB,EAAQ1K,EAAO0K,MA4Bf,GA1BAgT,GAAoC,KAAjBhT,EAAMwsB,SAElB,UADV/uB,EAAI+Y,GAAUlhB,EAAQ,SAAUwc,KACN,KAANrU,GAEdkvB,KAAAA,YAAY3sB,EAAO,SAAU,IAIf,iBAAVvG,IACVkS,EAAQ3L,EAAM0V,QACdjY,EAAIya,GAAc5iB,EAAQwc,GAC1B9R,EAAM0V,QAAU/J,EAAQ,IAAMlS,EAC9BgE,EAAIwb,GAAQ3jB,EAAQmI,EAAGya,GAAc5iB,IAAS+jB,MACzC/D,GAAoB1B,EAAetQ,KAAK7J,KAC5CgE,EAAEkY,QAAUzS,WAAYsS,OAAOC,KAEhChc,EAAOgE,EACPuC,EAAM0V,QAAU/J,GAGblS,EAAKmzB,UACHjsB,KAAAA,SAAWkB,EAAKkQ,EAAc6a,UAAUxO,MAAM9oB,EAAQmE,EAAKmzB,UAAW,YAAa,KAAM,KAAM,KAAMnzB,GAErGkH,KAAAA,SAAWkB,EAAK,KAAKuc,MAAM9oB,EAAQmE,EAAM,MAG3C,KAAKwwB,eAAgB,CAuBjBve,IAtBPghB,EAAkC,IAAxB,KAAKzC,eACV5R,GAEMpF,IACVD,GAAgB,EAEK,KAAjBhT,EAAMwsB,SAEM,UADfA,EAAShW,GAAUlhB,EAAQ,SAAUwc,KACD,KAAX0a,GACnBG,KAAAA,YAAY3sB,EAAO,SAAU,IAQhCmT,GACEwZ,KAAAA,YAAY3sB,EAAO,2BAA4B,KAAKusB,MAAMM,2BAA6BH,EAAS,UAAY,YAhBlH1sB,EAAM4rB,KAAO,EAmBdlgB,EAAM7J,EACC6J,GAAOA,EAAIvQ,OACjBuQ,EAAMA,EAAIvQ,MAEXsxB,EAAM,IAAI9N,GAAarpB,EAAQ,YAAa,EAAG,EAAG,KAAM,GACnDw3B,KAAAA,UAAUL,EAAK,KAAM/gB,GAC1B+gB,EAAIppB,SAAWgV,GAAiBgQ,GAAqBb,GACrDiF,EAAIvyB,KAAO,KAAK+kB,YAAc3G,GAAchjB,EAAQwc,GAAK,GACzD2a,EAAIrvB,MAAQA,EACZqvB,EAAIp2B,IAAM,EACVoT,EAAgB7W,MAGbgf,GAAAA,EAAc,CAEV/P,KAAAA,GAAI,CAGH6J,IAFPjM,EAAOoC,EAAG1G,MACVuQ,EAAMC,EACCD,GAAOA,EAAIrV,GAAKwL,EAAGxL,IACzBqV,EAAMA,EAAIvQ,OAEN0G,EAAGtC,MAAQmM,EAAMA,EAAInM,MAAQqM,GACjC/J,EAAGtC,MAAMpE,MAAQ0G,EAEjB8J,EAAQ9J,GAEJA,EAAG1G,MAAQuQ,GACfA,EAAInM,MAAQsC,EAEZ+J,EAAO/J,EAERA,EAAKpC,EAEDkB,KAAAA,SAAWgL,EAEV,OAAA,GAIRhb,EAAEytB,MAAQ,SAAS9oB,EAAQmE,EAAMoI,EAAIuH,GAChCpJ,IACHrP,EAAGo8B,EAAIhN,EAAIwK,EAAIF,EAAIC,EAAIG,EAAMD,EAAMwC,EAAOtC,EADvC1qB,EAAQ1K,EAAO0K,MAEdrP,IAAAA,KAAK8I,EAAM,CAMXszB,GALJzC,EAAK7wB,EAAK9I,GACVo8B,EAAKhb,EAAcphB,GACA,mBAAR25B,GAAwByC,GAAMA,EAAGhM,YAC3CuJ,EAAKA,EAAGjX,EAAQjR,IAEb2qB,EACHlrB,EAAKkrB,EAAG3O,MAAM9oB,EAAQg1B,EAAI35B,EAAG,KAAMkR,EAAIuH,EAAQ3P,OACzC,CAAA,GAAsB,OAAlB9I,EAAEiN,OAAO,EAAE,GAAa,CAC7BuE,KAAAA,OAAO7B,YAAY3P,GAAK,KAAK2a,UAAU1Z,KAAK,KAAKuQ,OAAQ7M,EAAO0K,MAAO,cAAeuW,GAAkBjhB,GAAQwhB,iBAAiBnmB,GAAK,GAAI25B,EAAK,GAAI35B,GAAG,EAAOA,GAClK,SAEA05B,EAAK7T,GAAUlhB,EAAQ3E,EAAGmhB,GAAO,GACjCkb,EAAwB,iBAAR1C,EACN,UAAN35B,GAAuB,SAANA,GAAsB,WAANA,IAA0C,IAAxBA,EAAEkN,QAAQ,UAAoBmvB,GAASlZ,EAAWxQ,KAAKgnB,IACxG0C,IAEJ1C,IADAA,EAAK5N,GAAY4N,IACPp5B,OAAS,EAAK,QAAU,QAAUo5B,EAAGz3B,KAAK,KAAO,KAE5DgP,EAAKwd,GAAcrf,EAAOrP,EAAG05B,EAAIC,GAAI,EAAM,cAAezoB,EAAI,EAAGuH,IAEvD4jB,GAASxY,EAAYlR,KAAKgnB,GACpCzoB,EAAKwd,GAAcrf,EAAOrP,EAAG05B,EAAIC,GAAI,EAAM,KAAMzoB,EAAI,EAAGuH,IAIxDqhB,GADA1K,EAAK7c,WAAWmnB,KACK,IAAPtK,EAAYsK,EAAGzsB,QAAQmiB,EAAK,IAAI7uB,QAAU,GAE7C,KAAPm5B,GAAoB,SAAPA,IACN,UAAN15B,GAAuB,WAANA,GACpBovB,EAAKpG,GAAcrkB,EAAQ3E,EAAGmhB,GAC9B2Y,EAAO,MACS,SAAN95B,GAAsB,QAANA,GAC1BovB,EAAKhI,GAAiBziB,EAAQ3E,EAAGmhB,GACjC2Y,EAAO,OAEP1K,EAAY,YAANpvB,EAAmB,EAAI,EAC7B85B,EAAO,MAITC,EAAOsC,GAA0B,MAAjB1C,EAAG9oB,OAAO,KAEzB+oB,EAAKpnB,SAASmnB,EAAG9oB,OAAO,GAAK,IAAK,IAClC8oB,EAAKA,EAAG1sB,OAAO,GACf2sB,GAAMrnB,WAAWonB,GACjBE,EAAOF,EAAGrmB,QAAQyP,EAAY,MAE9B6W,EAAKrnB,WAAWonB,GAChBE,EAAOwC,EAAQ1C,EAAGrmB,QAAQyP,EAAY,IAAM,IAGhC,KAAT8W,IACHA,EAAQ75B,KAAKkhB,EAAcA,EAAWlhB,GAAK85B,GAG5CH,EAAMC,GAAa,IAAPA,GAAaG,EAAMH,EAAKxK,EAAKwK,GAAMC,EAAO/wB,EAAK9I,GAEvD85B,IAASD,IAAmB,KAATA,GAAqB,eAAN75B,IAAwB45B,GAAa,IAAPA,IAAcxK,IACjFA,EAAKhJ,GAAiBzhB,EAAQ3E,EAAGovB,EAAI0K,GACxB,MAATD,GACHzK,GAAMhJ,GAAiBzhB,EAAQ3E,EAAG,IAAK,KAAO,KACrB,IAArB8I,EAAKwzB,cACR5C,EAAKtK,EAAK,MAGQ,OAATyK,GAA0B,QAATA,GAA2B,OAATA,GAA0B,OAATA,EAC9DzK,GAAMhJ,GAAiBzhB,EAAQ3E,EAAG,EAAG65B,GAGlB,OAATA,IACVD,EAAKxT,GAAiBzhB,EAAQ3E,EAAG45B,EAAIC,GACrCA,EAAO,MAEJE,IAASH,GAAa,IAAPA,KAClBD,EAAMC,EAAKxK,EAAMyK,KAIfE,IACHH,GAAMxK,IAGFA,GAAa,IAAPA,IAAcwK,GAAa,IAAPA,OAIPrU,IAAblW,EAAMrP,KAAqB25B,GAAOA,EAAK,IAAO,OAAe,MAANA,IAGjEzoB,EAAK,IAAI8c,GAAa3e,EAAOrP,EAAG45B,GAAMxK,GAAM,EAAG,EAAGle,GAAK,EAAGlR,GAAG,EAAO,EAAG05B,EAAIC,IACxE7L,IAAc,SAAP6L,GAAwB,YAAN35B,IAA2C,IAAxBA,EAAEkN,QAAQ,SAAyBysB,EAALD,EAH7EvU,EAAK,WAAanlB,EAAI,iBAAmB8I,EAAK9I,KAJ9CkR,EAAK,IAAI8c,GAAa3e,EAAOrP,EAAGovB,EAAIwK,EAAKxK,EAAIle,EAAI,EAAGlR,GAAmB,IAAfoiB,IAAkC,OAATyX,GAAuB,WAAN75B,GAAkB,EAAG05B,EAAIC,IACxH7L,IAAM+L,GAWRphB,GAAYvH,IAAOA,EAAGuH,SACzBvH,EAAGuH,OAASA,GAGPvH,OAAAA,GAKRlR,EAAE0S,SAAW,SAAS5F,GACjBoE,IAEHC,EAAKwc,EAAK5tB,EAFPmR,EAAK,KAAKlB,SAIVlD,GAAM,IAANA,GAAY,KAAK0E,OAAOzH,QAAU,KAAKyH,OAAOzI,WAAmC,IAAtB,KAAKyI,OAAOzH,MAwBpE,GAAI+C,GAAO,KAAK0E,OAAOzH,QAAU,KAAKyH,OAAOzI,WAAmC,IAAtB,KAAKyI,OAAOzH,QAA8C,OAA9B,KAAKyH,OAAOjH,aACjG2G,KAAAA,GAAI,CAON,GANJC,EAAMD,EAAG3L,EAAIuH,EAAIoE,EAAG1L,EAChB0L,EAAG/M,EACNgN,EAAMD,EAAG/M,EAAEgN,GACDA,EAhCN,MAgCqBA,GAhCrB,OAiCJA,EAAM,GAEFD,EAAGxO,KAED,GAAgB,IAAZwO,EAAGxO,KAET3C,GAAM,KADVA,EAAImR,EAAGvQ,GAENuQ,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAG4c,IAAM3c,EAAMD,EAAG6c,IAAM7c,EAAG6pB,IAAM7pB,EAAGqrB,SAC3C,GAAU,IAANx8B,EACVmR,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAG4c,IAAM3c,EAAMD,EAAG6c,IAAM7c,EAAG6pB,IAAM7pB,EAAGqrB,IAAMrrB,EAAGsrB,IAAMtrB,EAAGurB,SAC7D,GAAU,IAAN18B,EACVmR,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAG4c,IAAM3c,EAAMD,EAAG6c,IAAM7c,EAAG6pB,IAAM7pB,EAAGqrB,IAAMrrB,EAAGsrB,IAAMtrB,EAAGurB,IAAMvrB,EAAGwrB,IAAMxrB,EAAGyrB,SAC/E,GAAU,IAAN58B,EACVmR,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAG4c,IAAM3c,EAAMD,EAAG6c,IAAM7c,EAAG6pB,IAAM7pB,EAAGqrB,IAAMrrB,EAAGsrB,IAAMtrB,EAAGurB,IAAMvrB,EAAGwrB,IAAMxrB,EAAGyrB,IAAMzrB,EAAG0rB,IAAM1rB,EAAG2rB,QACjG,CAED98B,IADL4tB,EAAMzc,EAAG4c,IAAM3c,EAAMD,EAAG6c,IACnBhuB,EAAI,EAAGA,EAAImR,EAAGvQ,EAAGZ,IACrB4tB,GAAOzc,EAAG,KAAKnR,GAAKmR,EAAG,MAAMnR,EAAE,IAEhCmR,EAAGjN,EAAEiN,EAAGlR,GAAK2tB,OAGS,IAAbzc,EAAGxO,KACbwO,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAG4c,IAEN5c,EAAGwB,UACbxB,EAAGwB,SAAS5F,QAvBZoE,EAAGjN,EAAEiN,EAAGlR,GAAKmR,EAAMD,EAAG4c,IAyBvB5c,EAAKA,EAAG1G,WAKF0G,KAAAA,GACU,IAAZA,EAAGxO,KACNwO,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAGxQ,EAEhBwQ,EAAGwB,SAAS5F,GAEboE,EAAKA,EAAG1G,WApEF0G,KAAAA,GAAI,CACNA,GAAY,IAAZA,EAAGxO,KACFwO,GAAAA,EAAG/M,IAAkB,IAAb+M,EAAGxO,KAEV,GADJyO,EAAMD,EAAG/M,EAAE+M,EAAG1L,EAAI0L,EAAG3L,GAChB2L,EAAGxO,MAED,GAAgB,IAAZwO,EAAGxO,KAAY,CAGpB3C,IAFLA,EAAImR,EAAGvQ,EACPgtB,EAAMzc,EAAG4c,IAAM3c,EAAMD,EAAG6c,IACnBhuB,EAAI,EAAGA,EAAImR,EAAGvQ,EAAGZ,IACrB4tB,GAAOzc,EAAG,KAAKnR,GAAKmR,EAAG,MAAMnR,EAAE,IAEhCmR,EAAGjN,EAAEiN,EAAGlR,GAAK2tB,QAPbzc,EAAGjN,EAAEiN,EAAGlR,GAAKmR,EAAMD,EAAG4c,SAUvB5c,EAAGjN,EAAEiN,EAAGlR,GAAKkR,EAAGxN,OAGjBwN,EAAGwB,SAAS5F,GAEboE,EAAKA,EAAG1G,QAgEXxK,EAAE88B,kBAAoB,SAASf,GACzBzN,KAAAA,WAAa,KAAKA,YAAc3G,GAAc,KAAKlW,QAAS0P,GAAK,GACjEmY,KAAAA,eAAoB,KAAKhL,WAAW6C,KAAOD,KAA0B6K,GAAkC,IAAxB,KAAKzC,eAA6B,EAAJ,GAG/GyD,IAAAA,GAAU,SAASjwB,GACjB7I,KAAAA,EAAE,KAAKjE,GAAK,KAAK0D,EACjB6F,KAAAA,KAAK4yB,UAAU,KAAM,KAAK3xB,MAAO,MAAM,IAG7CxK,EAAEg8B,YAAc,SAAS/3B,EAAGjE,EAAG8M,GAC1BoE,IAAAA,EAAK,KAAKlB,SAAW,IAAIge,GAAa/pB,EAAGjE,EAAG,EAAG,EAAG,KAAKgQ,SAAU,GACrEkB,EAAGxN,EAAIoJ,EACPoE,EAAGwB,SAAWqqB,GACd7rB,EAAG3H,KAAO,MAIXvJ,EAAEm8B,UAAY,SAASjrB,EAAIpC,EAAMkuB,EAAMC,GAsB/B/rB,OArBHA,IACCpC,IACHA,EAAKF,MAAQsC,GAEVA,EAAG1G,QACN0G,EAAG1G,MAAMoE,MAAQsC,EAAGtC,OAEjBsC,EAAGtC,MACNsC,EAAGtC,MAAMpE,MAAQ0G,EAAG1G,MACV,KAAKwF,WAAakB,IACvBlB,KAAAA,SAAWkB,EAAG1G,MACnByyB,GAAS,GAEND,EACHA,EAAKxyB,MAAQ0G,EACF+rB,GAA4B,OAAlB,KAAKjtB,WACrBA,KAAAA,SAAWkB,GAEjBA,EAAG1G,MAAQsE,EACXoC,EAAGtC,MAAQouB,GAEL9rB,GAGRlR,EAAE6a,KAAO,SAASD,GAEV1J,IADHA,IAAAA,EAAK,KAAKlB,SACPkB,GACuB,mBAAlB0J,EAAO1J,EAAGlR,KACpBkR,EAAG/M,EAAIyW,EAAO1J,EAAGlR,IAElBkR,EAAKA,EAAG1G,OAKVxK,EAAEqM,MAAQ,SAASuO,GACdhO,IACHsE,EAAIlR,EAAG2vB,EADJ/iB,EAAOgO,EAEPA,GAAAA,EAAOsiB,WAAatiB,EAAOuiB,MAAO,CAEhCn9B,IAAAA,KADL4M,EAAO,GACGgO,EACThO,EAAK5M,GAAK4a,EAAO5a,GAElB4M,EAAKoY,QAAU,EACXpY,EAAKswB,YACRtwB,EAAKwwB,WAAa,GAgBblsB,IAbH0J,EAAOqhB,YAAc/qB,EAAK,KAAKsqB,iBAClC7L,EAASze,EAAGye,SACEA,EAAO/gB,MACfutB,KAAAA,UAAUxM,EAAO/gB,MAAOsC,EAAG1G,MAAOmlB,EAAO/gB,MAAMA,OAC1C+gB,IAAW,KAAK3f,WACrBA,KAAAA,SAAWkB,EAAG1G,OAEhB0G,EAAG1G,OACD2xB,KAAAA,UAAUjrB,EAAG1G,MAAO0G,EAAG1G,MAAMA,MAAOmlB,EAAO/gB,OAE5C4sB,KAAAA,aAAe,MAErBtqB,EAAK,KAAKlB,SACHkB,GACFA,EAAGuH,QAAUvH,EAAGuH,SAAWzY,GAAKkR,EAAGuH,OAAOpM,QAC7C6E,EAAGuH,OAAOpM,MAAMuO,GAChB5a,EAAIkR,EAAGuH,QAERvH,EAAKA,EAAG1G,MAEF+P,OAAAA,EAAYvZ,YAAAA,UAAUqL,MAAMpL,KAAK,KAAM2L,IAM3CywB,IAAAA,GAAkB,SAAlBA,EAA2B35B,EAAGoT,EAAO5H,GACnCouB,IAAAA,EAAUv9B,EAAGuO,EAAO5L,EACpBgB,GAAAA,EAAEoC,MAEE,IADP/F,EAAI2D,EAAEnD,SACGR,GAAK,GACbs9B,EAAgB35B,EAAE3D,GAAI+W,EAAO5H,QAMxB,IADPnP,GADAu9B,EAAW55B,EAAE65B,YACAh9B,SACJR,GAAK,GAEb2C,GADA4L,EAAQgvB,EAASv9B,IACJ2C,KACT4L,EAAMe,QACTyH,EAAMlW,KAAK2mB,GAAcjZ,IACrBY,GACHA,EAAQtO,KAAK0N,IAGD,IAAT5L,GAAuB,IAATA,GAAuB,KAATA,IAAgB4L,EAAMivB,WAAWh9B,QACjE88B,EAAgB/uB,EAAOwI,EAAO5H,IA0D3B8R,OAnCPA,EAAUwc,UAAY,SAAS74B,EAAQkE,EAAUC,GAC5C2D,IAMH1M,EAAG2oB,EAAM1oB,EAAGgL,EANTyB,EAAQlN,EAAU0Y,QAAAA,GAAGtT,EAAQkE,EAAUC,GAC1C20B,EAAU,CAAChxB,GACX/L,EAAI,GACJgD,EAAI,GACJwL,EAAU,GACV8E,EAAiBzU,EAAUiU,QAAAA,WAAWS,cAShC,IAPPtP,EAAS8H,EAAMiD,UAAYjD,EAAM9H,OACjC04B,GAAgB14B,EAAQjE,EAAGwO,GAC3BzC,EAAMd,OAAO9C,GAAU,GAAM,GAC7Bw0B,GAAgB14B,EAAQjB,GACxB+I,EAAMd,OAAO,GAAG,GAAM,GACtBc,EAAMX,UAAS,GACf/L,EAAImP,EAAQ3O,SACHR,GAAK,GAET2oB,IADJA,EAAOJ,GAAQpZ,EAAQnP,GAAIW,EAAEX,GAAI2D,EAAE3D,KAC1B8oB,SAAU,CAEb7oB,IAAAA,KADL0oB,EAAOA,EAAKA,KACF5f,EACLkL,EAAehU,KAClB0oB,EAAK1oB,GAAK8I,EAAK9I,IAIZA,IAAAA,KADLgL,EAAO,GACG0d,EACT1d,EAAKhL,GAAKU,EAAEX,GAAGC,GAEhBy9B,EAAQ78B,KAAKrB,EAAUua,QAAAA,OAAO5K,EAAQnP,GAAI8I,EAAUmC,EAAM0d,IAGrD+U,OAAAA,GAGIviB,EAAAA,YAAAA,SAAS,CAAC8F,IACfA,IAEL,GAEG,IAAIA,EAAY1e,EAAQ0e,QAAAA,UAAxB,QAAA,QAAA,QAAA,UAAA;;ACx1FA,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,QAAA,QAAA,QAAA,gBAAA,EAFP,IAAA,EAAA,QAAA,kBAEW0c,EAAax+B,EAASkD,SAAAA,UAAUqW,OAAO,CACjD2C,SAAU,OACVV,IAAK,EACLrK,QAAS,QAGTzO,KAAM,SAAS+C,EAAQ4D,EAAOkE,EAAOpH,GAChCrF,IAAAA,EAAGqR,EACH,GAAgC,mBAAzB1M,EAAO+uB,aACV,OAAA,EAEH1zB,IAAAA,KAAKuI,EAEW,mBADpB8I,EAAM9I,EAAMvI,MAEXqR,EAAMA,EAAIhM,EAAOV,IAEbgW,KAAAA,UAAUhW,EAAQ,eAAgBA,EAAO2uB,aAAatzB,GAAK,GAAIqR,EAAM,GAAIrR,GAAG,EAAOA,GACnF8Y,KAAAA,gBAAgBlY,KAAKZ,GAEpB,OAAA,KAnBF,QAAA,QAAA,QAAA,WAAA;;AC+EL,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,QAAA,EAAA,QAAA,iBAAA,QAAA,cAAA,QAAA,QAAA,QAAA,sBAAA,EAjFF,IAAA,EAAA,QAAA,kBAiFE,SAAA,EAAA,GAAA,OAAA,EAAA,mBAAA,QAAA,iBAAA,OAAA,SAAA,SAAA,GAAA,cAAA,GAAA,SAAA,GAAA,OAAA,GAAA,mBAAA,QAAA,EAAA,cAAA,QAAA,IAAA,OAAA,UAAA,gBAAA,IAAA,GA/EK,IAAI29B,EAAmBz+B,EAASkD,SAAAA,UAAUqW,OAAO,CACpD2C,SAAU,aACV/K,QAAS,QACTnL,UAAW,EACXwV,IAAK,EAGL9Y,KAAM,SAAS+C,EAAQ4D,EAAOkE,GAEtB,OADF+E,KAAAA,OAAS/E,GACP,KAITmxB,EAAgB,SAAS9wB,GACpB9M,IAAAA,EAAI8M,EAAI,EAAI9E,KAAKuR,IAAI,IAAKzM,EAAI,IAAIvM,OAAS,GAAK,EAC7C,OAAA,SAASuB,GACR,OAAEkG,KAAKyK,MAAM3Q,EAAIgL,GAAKA,EAAI9M,EAAK,GAAKA,IAG7C69B,EAAmB,SAASnX,EAAM3T,GAC1B2T,KAAAA,GACDA,EAAKre,GAAMqe,EAAKtV,OACpBsV,EAAKnV,EAAIwB,GAAO/K,KAAKyK,OAEtBiU,EAAOA,EAAKlc,OAGdxK,EAAI29B,EAAiB38B,UAoDtB,QAAA,EAAA,EAAA,QAAA,iBAAA,EAAA,QAAA,cAAA,EAAA,QAAA,QAAA,QAAA,iBAAA,EAlDAhB,EAAE+Y,gBAAkB,WACftM,IAIHyE,EAAIpC,EAAM/O,EAAGC,EAJVyM,EAAQ,KAAK+E,OAChBssB,EAAKrxB,EAAM3D,KAAKi1B,WAChBnjB,EAAS,GACTojB,EAAMvxB,EAAMkD,YAAYouB,WAErB,GAAe,WAAf,EAAOD,IAAqBA,EAAGl9B,KAS3B,IAJY,iBAARk9B,IACVA,EAAKA,EAAGx9B,MAAM,MAEfP,EAAI+9B,EAAGv9B,SACER,GAAK,GACb6a,EAAOkjB,EAAG/9B,IAAMiI,KAAKyK,WATjBzS,IAAAA,KAAK89B,EACTljB,EAAO5a,GAAK49B,EAAcE,EAAG99B,IAY1BA,IAAAA,KAAK4a,EAEF1J,IADPA,EAAKzE,EAAMuD,SACJkB,GACNpC,EAAOoC,EAAG1G,MACN0G,EAAGkC,GACNlC,EAAGjN,EAAE4W,KAAKD,GACA1J,EAAGpP,IAAM9B,IACN,IAATkR,EAAG7I,GAAW6I,EAAGjN,EACpB45B,EAAiB3sB,EAAGjN,EAAE+L,SAAU4K,EAAO5a,KAElCi+B,KAAAA,KAAK/sB,EAAGjN,EAAGjE,EAAGkR,EAAG1L,EAAG0L,EAAG3L,EAAGqV,EAAO5a,IAElC8O,IACHA,EAAKF,MAAQsC,EAAGtC,OAEbsC,EAAGtC,MACNsC,EAAGtC,MAAMpE,MAAQsE,EACPrC,EAAMuD,WAAakB,IAC7BzE,EAAMuD,SAAWlB,GAElBoC,EAAG1G,MAAQ0G,EAAGtC,MAAQ,KACtBnC,EAAMkD,YAAY3P,GAAKg+B,IAGzB9sB,EAAKpC,EAGA,OAAA,GAGR9O,EAAEi+B,KAAO,SAASt5B,EAAQ3E,EAAGwF,EAAGD,EAAGwN,GAC7B4H,KAAAA,UAAUhW,EAAQ3E,EAAGwF,EAAGA,EAAID,EAAGvF,EAAG+S,GAAO/K,KAAKyK,OAC9CqG,KAAAA,gBAAgBlY,KAAKZ;;ACb7B,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,QAAA,QAAA,QAAA,+BAAA,EAtEA,IAAA,EAAA,QAAA,kBAsEA,SAAA,EAAA,GAAA,OAAA,EAAA,mBAAA,QAAA,iBAAA,OAAA,SAAA,SAAA,GAAA,cAAA,GAAA,SAAA,GAAA,OAAA,GAAA,mBAAA,QAAA,EAAA,cAAA,QAAA,IAAA,OAAA,UAAA,gBAAA,IAAA,GApEO,IAAIk+B,EAA4Bh/B,EAASkD,SAAAA,UAAUqW,OAAO,CAC/D2C,SAAU,sBACV/K,QAAS,QACTqK,IAAK,EAGL9Y,KAAM,SAAS+C,EAAQ4D,EAAOkE,EAAOpH,GACd,WAAlB,EAAOkD,KACVA,EAAQ,CAACqf,SAASrf,IAEd41B,KAAAA,OAAS,GACV9T,IAEHrqB,EAAG8M,EAAGwE,EAAOD,EAAK8Y,EAAK7pB,EAFpB+pB,GAA4B,IAArB9hB,EAAM61B,WAAiC,EAAVp2B,KAAK+b,GAAS,IAGjD/jB,IAAAA,KAAKuI,EACC,eAANvI,IAEiB,mBADpBqR,EAAM9I,EAAMvI,MAEXqR,EAAMA,EAAIhM,EAAOV,IAGlBmI,GADAxM,GAAS+Q,EAAM,IAAI/Q,MAAM,MACf,GACVgR,EAAQiB,WAAmC,mBAAf5N,EAAO3E,GAAsB2E,EAAO3E,GAAK2E,EAAU3E,EAAEkN,QAAQ,QAAkD,mBAAjCvI,EAAO,MAAQ3E,EAAEiN,OAAO,IAAuBjN,EAAI,MAAQA,EAAEiN,OAAO,OAE9Kkd,GADA9Y,EAAM,KAAK8sB,OAAOn+B,GAAoB,iBAAP8M,GAAmC,MAAhBA,EAAE+D,OAAO,GAAcS,EAAQkB,SAAS1F,EAAE+D,OAAO,GAAK,IAAK,IAAM3H,OAAO4D,EAAEG,OAAO,IAAM/D,OAAO4D,IAAM,GAC1IwE,EACRhR,EAAMC,UAEmB,KAD5BuM,EAAIxM,EAAM4B,KAAK,MACTgL,QAAQ,WACbid,GAAYE,KACAF,GAAOE,EAAM,KACxBF,EAAOA,EAAM,EAAKA,EAAME,EAAMF,EAAME,IAGZ,IAAtBvd,EAAEI,QAAQ,QAAiBid,EAAM,EACpCA,GAAQA,EAAY,WAANE,GAAoBA,GAASF,EAAME,EAAO,GAAKA,GAC7B,IAAtBvd,EAAEI,QAAQ,QAAiBid,EAAM,IAC3CA,GAAQA,EAAY,WAANE,GAAoBA,GAASF,EAAME,EAAO,GAAKA,KAG3DF,EA3BC,MA2BYA,GA3BZ,QA4BCxP,KAAAA,UAAUhW,EAAQ3E,EAAGsR,EAAOA,EAAQ6Y,EAAKnqB,GACzC8Y,KAAAA,gBAAgBlY,KAAKZ,KAItB,OAAA,GAIRka,IAAK,SAASxM,GACTwD,IAAAA,EACAxD,GAAU,IAAVA,EACE+M,KAAAA,OAAO/H,SAASzR,KAAK,KAAMyM,QAGzBwD,IADPA,EAAK,KAAKlB,SACHkB,GACFA,EAAG7I,EACN6I,EAAGjN,EAAEiN,EAAGlR,GAAG,KAAKm+B,OAAOjtB,EAAGlR,IAE1BkR,EAAGjN,EAAEiN,EAAGlR,GAAK,KAAKm+B,OAAOjtB,EAAGlR,GAE7BkR,EAAKA,EAAG1G,SAOb,QAAA,QAAA,QAAA,0BAAA,EAAA0zB,EAA0BvlB,UAAW;;ACsvB9B,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,QAAA,QAAA,QAAA,kBAAA,EA5zBP,IAAA,EAAA,EAAA,QAAA,mBA4zBO,SAAA,EAAA,GAAA,GAAA,GAAA,EAAA,WAAA,OAAA,EAAA,IAAA,EAAA,GAAA,GAAA,MAAA,EAAA,IAAA,IAAA,KAAA,EAAA,GAAA,OAAA,UAAA,eAAA,KAAA,EAAA,GAAA,CAAA,IAAA,EAAA,OAAA,gBAAA,OAAA,yBAAA,OAAA,yBAAA,EAAA,GAAA,GAAA,EAAA,KAAA,EAAA,IAAA,OAAA,eAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,OAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,GAAA,OAAA,EAAA,mBAAA,QAAA,iBAAA,OAAA,SAAA,SAAA,GAAA,cAAA,GAAA,SAAA,GAAA,OAAA,GAAA,mBAAA,QAAA,EAAA,cAAA,QAAA,IAAA,OAAA,UAAA,gBAAA,IAAA,GA1zBPzZ,EAASkD,SAAAA,UAAU,eAAgB,CAAC,iBAAiB,sBAAsB,aAAc,WAEnFi8B,IAAAA,EAAe,SAASv1B,GACX7H,EAAAA,eAAAA,KAAK,KAAM6H,GACtBoQ,IAEH/H,EAAKnR,EADL8M,EADU,KACDhE,KAOL9I,IAAAA,KARM,KAGNs+B,QAAU,GAHJ,KAINpwB,qBAAuBpB,EAAEoB,mBAJnB,KAKNf,oBAAsBL,EAAEK,kBALlB,KAMNQ,eAAgB,EANV,KAONjD,UAAYoC,EAAEyH,SACTzH,EACTqE,EAAMrE,EAAE9M,GACJc,EAASqQ,KAA8C,IAApCA,EAAIjP,KAAK,IAAIgL,QAAQ,YAC3CJ,EAAE9M,GAXO,KAWG0M,kBAAkByE,IAG5BrQ,EAASgM,EAAEuJ,SAdJ,KAeLvM,IAAIgD,EAAEuJ,OAAQ,EAAGvJ,EAAE0B,MAAO1B,EAAE2B,UAInC0P,EAAqB5e,EAAUiU,QAAAA,WAC/BA,EAAa6qB,EAAa7qB,WAAa,GACvCzD,EAAcoO,EAAmBnP,WACjClO,EAAWqd,EAAmB1K,QAC9BnG,EAAc6Q,EAAmBzK,WACjCnG,EAAc4Q,EAAmBhI,WACjCxW,EAAWT,EAASkD,SAAAA,UAAUE,QAC9Bi8B,EAAQ,SAASz1B,GACZ8D,IAAW5M,EAAX4M,EAAO,GACN5M,IAAAA,KAAK8I,EACT8D,EAAK5M,GAAK8I,EAAK9I,GAET4M,OAAAA,GAERyP,EAAc,SAASvT,EAAMoG,EAASnP,GACjCuc,IACHtc,EAAGmR,EADAmL,EAAMxT,EAAKyT,MAEVvc,IAAAA,KAAKsc,EACTnL,EAAMmL,EAAItc,GACV8I,EAAK9I,GAAsB,mBAATmR,EAAuBA,EAAIpR,EAAGmP,EAAQnP,GAAImP,GAAWiC,EAAIpR,EAAIoR,EAAI5Q,eAE7EuI,EAAKyT,OAEbiiB,EAAiBhrB,EAAWirB,cAAgB,aAQ5CC,EAA0B,SAAS/0B,EAAIqQ,EAAQD,EAAU4kB,GACpDC,IAAAA,EAAK,kBAIF5kB,OAHD4kB,KAAM5kB,IACXA,EAAO4kB,KAAS7kB,IAA6B,IAAjBA,EAAS6kB,IAAkBD,IAEjD3kB,GAGRwC,EAAc,SAAS1P,GAClB,GAAc,mBAAPA,EACHA,OAAAA,EAEJhE,IAAAA,EAAsB,WAAd,EAAOgE,GAAmBA,EAAI,CAAC2P,KAAK3P,GAC/CzJ,EAAOyF,EAAKzF,KACZ2H,EAAOlC,EAAKkC,MAAQ,EACpB0R,EAAO5T,EAAK4T,MAAQ,EACpBC,EAAQ,GACRC,EAAgBvJ,MAAMrI,GACtB6R,EAAO/T,EAAK+T,KACZnP,EAAQ,CAACoP,OAAO,GAAKzL,IAAI,GAAGrG,IAAS,EAC/B,OAAA,SAASjL,EAAG4E,EAAQ7E,GACtBa,IAEHoc,EAASC,EAASC,EAAGC,EAAGC,EAAGvZ,EAAGwZ,EAAKnV,EAAKoV,EAFrC1c,GAAKb,GAAKgJ,GAAMvI,OACnB+c,EAAYX,EAAMhc,GAEf,IAAC2c,EAAW,CAEX,KADJD,EAAsB,SAAdvU,EAAKyU,KAAmB,GAAKzU,EAAKyU,MAAQ,CAACC,EAAAA,IAAW,IACnD,CAEHJ,IADPA,GAAOI,EAAAA,EACAJ,GAAOA,EAAMtd,EAAEud,KAAQI,wBAAwBC,OAASL,EAAO1c,IACtE0c,IAOIzZ,IALL0Z,EAAYX,EAAMhc,GAAK,GACvBoc,EAAUH,EAAiB5U,KAAKC,IAAIoV,EAAM1c,GAAK+M,EAAS,GAAM1C,EAAOqS,EACrEL,EAAUJ,EAAgBjc,EAAI+M,EAAQ2P,EAAO,GAAOrS,EAAOqS,EAAQ,EACnED,EAAM,EACNnV,EAAMuV,EAAAA,EACD5Z,EAAI,EAAGA,EAAIjD,EAAGiD,IAClBqZ,EAAKrZ,EAAIyZ,EAAQN,EACjBG,EAAIF,GAAYpZ,EAAIyZ,EAAQ,GAC5BC,EAAU1Z,GAAKuZ,EAAKN,EAAkC7U,KAAK2V,IAAc,MAATd,EAAgBK,EAAID,GAAzDjV,KAAK4V,KAAKX,EAAIA,EAAIC,EAAIA,GAC7CC,EAAIC,IACPA,EAAMD,GAEHA,EAAIlV,IACPA,EAAMkV,GAGRG,EAAUF,IAAMA,EAAMnV,EACtBqV,EAAUrV,IAAMA,EAChBqV,EAAUxQ,EAAInM,EAAImI,EAAK+U,QAAW/U,EAAK2T,MAAQY,EAAO1c,EAAIA,EAAI,EAAKkc,EAA2C,MAATA,EAAelc,EAAI0c,EAAOA,EAArDrV,KAAKoV,IAAIC,EAAM1c,EAAI0c,KAA4C,EACzIC,EAAU5c,EAAKC,EAAI,EAAK+b,EAAO/b,EAAI+b,EAG7BY,OADP3c,GAAK2c,EAAUvd,GAAKud,EAAUrV,KAAOqV,EAAUF,IACxCE,EAAU5c,GAAK2C,EAAOA,EAAKU,SAASpD,GAAKA,GAAK2c,EAAUxQ,IAGjE9M,EAAIq+B,EAAar9B,UAAY,IAAIiN,EAAJ,eAwsBvBowB,OAtsBPA,EAAahuB,QAAU,QACvBguB,EAAahgB,WAAa7B,EAC1Bxc,EAAE2I,YAAc01B,EAChBr+B,EAAEsM,OAAOnC,IAAMnK,EAAE6+B,iBAAmB7+B,EAAE8+B,WAAY,EAwBlD9+B,EAAEiY,GAAK,SAAStT,EAAQkE,EAAUC,EAAMyF,GACnCwwB,IAAAA,EAAUj2B,EAAKuM,QAAU1V,EAASme,UAAave,EAAnD,QACOsJ,OAAAA,EAAW,KAAKiB,IAAK,IAAIi1B,EAAOp6B,EAAQkE,EAAUC,GAAOyF,GAAY,KAAK2L,IAAIvV,EAAQmE,EAAMyF,IAGpGvO,EAAEgL,KAAO,SAASrG,EAAQkE,EAAUC,EAAMyF,GAClC,OAAA,KAAKzE,KAAOhB,EAAKuM,QAAU1V,EAASme,UAAave,EAAvC,SAAkDyL,KAAKrG,EAAQkE,EAAU61B,EAAwB,EAAM51B,IAAQyF,IAGjIvO,EAAE8Z,OAAS,SAASnV,EAAQkE,EAAUkR,EAAUC,EAAQzL,GACnDwwB,IAAAA,EAAU/kB,EAAO3E,QAAU1V,EAASme,UAAave,EAArD,QAEOsJ,OADPmR,EAAS0kB,EAAwB,EAAM1kB,EAAQD,GACxClR,EAAW,KAAKiB,IAAKi1B,EAAOjlB,OAAOnV,EAAQkE,EAAUkR,EAAUC,GAASzL,GAAY,KAAK2L,IAAIvV,EAAQqV,EAAQzL,IAGrHvO,EAAEgf,UAAY,SAAS9P,EAASrG,EAAUC,EAAM2F,EAASF,EAAU2Q,EAAeC,EAAqBC,GAClGzV,IAIHiD,EAAM7M,EAJH4J,EAAK,IAAI00B,EAAa,CAACnqB,WAAWgL,EAAe/K,iBAAiBgL,EAAqBpS,cAAcqS,EAAoBjS,kBAAkB,KAAKA,oBACnJkS,EAAc7C,EAAY1T,EAAK2F,SAAWA,GAC1C6F,EAAUxL,EAAKwL,QACfiI,EAAQzT,EAAKyT,MASTxc,IAPmB,iBAAbmP,IACVA,EAAU3P,EAAUwP,QAAAA,SAASG,IAAYA,GAGtCa,EADJb,EAAUA,GAAW,MAEpBA,EAtHQ,SAASpP,GACbY,IAEHX,EAFGW,EAAI,GACPC,EAAIb,EAAES,OAEFR,IAAAA,EAAI,EAAGA,IAAMY,EAAGD,EAAEE,KAAKd,EAAEC,OACvBW,OAAAA,EAiHGD,CAAOyO,IAEbnP,EAAI,EAAGA,EAAImP,EAAQ3O,OAAQR,IAC/B6M,EAAO2xB,EAAMz1B,GACTwL,IACH1H,EAAK0H,QAAUiqB,EAAMjqB,GACjBA,EAAQiI,OACXF,EAAYzP,EAAK0H,QAASpF,EAASnP,IAGjCwc,IACHF,EAAYzP,EAAMsC,EAASnP,GACN,MAAjB6M,EAAK/D,WACRA,EAAW+D,EAAK/D,gBACT+D,EAAK/D,WAGdc,EAAGsO,GAAG/I,EAAQnP,GAAI8I,EAAU+D,EAAMyS,EAAYtf,EAAGmP,EAAQnP,GAAImP,IAEvD,OAAA,KAAKpF,IAAIH,EAAI4E,IAGrBvO,EAAEuf,YAAc,SAASrQ,EAASrG,EAAUC,EAAM2F,EAASF,EAAU2Q,EAAeC,EAAqBC,GAEjG,OADPtW,EAAKuL,cAAe,EACb,KAAK2K,UAAU9P,EAASrG,EAAU61B,EAAwB,EAAM51B,GAAO2F,EAASF,EAAU2Q,EAAeC,EAAqBC,IAGtIpf,EAAEyf,cAAgB,SAASvQ,EAASrG,EAAUkR,EAAUC,EAAQvL,EAASF,EAAU2Q,EAAeC,EAAqBC,GAE/G,OADPpF,EAAO1F,QAAUyF,EACV,KAAKiF,UAAU9P,EAASrG,EAAU61B,EAAwB,EAAM1kB,EAAQD,GAAWtL,EAASF,EAAU2Q,EAAeC,EAAqBC,IAGlJpf,EAAEiB,KAAO,SAAS8D,EAAU4H,EAAQ3H,EAAOuJ,GACnC,OAAA,KAAKzE,IAAKvK,EAAU0a,QAAAA,YAAY,EAAGlV,EAAU4H,EAAQ3H,GAAQuJ,IAGrEvO,EAAEka,IAAM,SAASvV,EAAQmE,EAAMyF,GACvB,OAAA,KAAKzE,IAAK,IAAIvK,EAAJ,QAAcoF,EAAQ,EAAG+5B,EAAwB,EAAM51B,EAAM,MAAM,IAAQyF,IAG7F8vB,EAAaW,WAAa,SAASl2B,EAAMm2B,GAEV,OAD9Bn2B,EAAOA,GAAQ,IACNqE,oBACRrE,EAAKqE,mBAAoB,GAEtBxD,IAEHu1B,EAAkBz3B,EAAMgF,EAAOqC,EAF5BnF,EAAK,IAAI00B,EAAav1B,GACzBq2B,EAAOx1B,EAAGgB,UASJ8B,IAPmB,MAAtBwyB,IACHA,GAAqB,GAEtBE,EAAK/yB,QAAQzC,GAAI,GACjBA,EAAG3C,WAAa,EAChB2C,EAAGY,aAAeZ,EAAGI,MAAQJ,EAAGW,WAAa60B,EAAKp1B,MAClD0C,EAAQ0yB,EAAKhxB,OACN1B,GACNqC,EAAOrC,EAAMjC,MACRy0B,GAAwBxyB,aAAiBlN,EAAjB,SAA8BkN,EAAM9H,SAAW8H,EAAM3D,KAAKoL,cACtFzM,EAAOgF,EAAMzF,WAAayF,EAAMxD,QACrB,IACVi2B,EAAmB,GAEpBv1B,EAAGG,IAAI2C,EAAOhF,IAEfgF,EAAQqC,EAMFnF,OAJPw1B,EAAKr1B,IAAIH,EAAI,GACTu1B,GACHv1B,EAAG+B,gBAEG/B,GAGR3J,EAAE8J,IAAM,SAASvB,EAAOgG,EAAUC,EAAOC,GACpCyK,IACHkmB,EAASz+B,EAAGZ,EAAGuO,EAAO3E,EAAI01B,EAIvB,GAHqB,iBAAd9wB,IACVA,EAHU,KAGM+wB,kBAAkB/wB,EAAU,GAAG,EAAMhG,MAEhDA,aAAiBK,EAAnB,WAA+B,CAC7BL,GAAAA,aAAiBpH,OAAWoH,GAASA,EAAM3H,MAAQE,EAASyH,GAAS,CAKpExI,IAJLyO,EAAQA,GAAS,SACjBC,EAAUA,GAAW,EACrB2wB,EAAU7wB,EACV5N,EAAI4H,EAAMhI,OACLR,EAAI,EAAGA,EAAIY,EAAGZ,IACde,EAASwN,EAAQ/F,EAAMxI,MAC1BuO,EAAQ,IAAI+vB,EAAa,CAAChoB,OAAO/H,KAb1B,KAeHxE,IAAIwE,EAAO8wB,GACM,iBAAX9wB,GAAyC,mBAAXA,IAC1B,aAAVE,EACH4wB,EAAU9wB,EAAMtH,WAAcsH,EAAM5C,gBAAkB4C,EAAMlF,WACxC,UAAVoF,IACVF,EAAMtH,YAAcsH,EAAMnF,UAG5Bi2B,GAAW3wB,EAELyK,OAzBE,KAyBG3M,UAAS,GACf,GAAsB,iBAAXhE,EACV2Q,OA3BE,KA2BGqmB,SAASh3B,EAAOgG,GACtB,GAAsB,mBAAXhG,EAGX,KAAA,cAAgBA,EAAQ,wEAF9BA,EAAQhJ,EAAU0a,QAAAA,YAAY,EAAG1R,GAgB/B2Q,GAVWlY,EAAAA,eAAAA,UAAU8I,IAAI7I,KAnClB,KAmC6BsH,EAAOgG,IAE3ChG,EAAMwB,QAAWxB,EAAMQ,WAAaR,EAAM6B,YAC7Cg1B,GAtCU,KAsCMpzB,UAAYzD,EAAMvB,YAAcuB,EAAMa,aACjDb,EAAMQ,WAAaf,KAAK2V,IAAI3V,KAAKoV,IAAI,EAAGpV,KAAKC,IAAIM,EAAMmD,gBAAiB0zB,KAAa72B,EAAM+B,WAAa,OAC5G/B,EAAMoD,OAAOyzB,GAAS,GAAO,KAxCpB,KA6CFj1B,KA7CE,KA6CUJ,QA7CV,KA6CyBhB,aA7CzB,KA6C8CsB,SA7C9C,KA6CgEtB,UA7ChE,KA6CiFF,WAIpFc,IADP01B,GADA11B,EA/CU,MAgDUqC,UAAYzD,EAAMvB,WAC/B2C,EAAGgB,WACL00B,GAAiB11B,EAAGgB,UAAUwC,kBACjCxD,EAAG2B,UAAU3B,EAAGW,YAAY,GAClBX,EAAGQ,KACbR,EAAGmC,UAAS,GAAM,GAEnBnC,EAAKA,EAAGgB,UAIHuO,OA3DI,MA8DZlZ,EAAEi9B,OAAS,SAAS10B,GACfA,GAAAA,aAAiBK,EAArB,UAAgC,CAC1BwD,KAAAA,QAAQ7D,GAAO,GAChBoB,IAAAA,EAAKpB,EAAMoC,UAAYpC,EAAMO,KAAKc,UAAYhB,EAAUiB,UAAAA,oBAAsBjB,EAAUc,UAAAA,cAErF,OADPnB,EAAMvB,YAAcuB,EAAM8B,QAAU9B,EAAM8E,WAAa1D,EAAGI,QAAYxB,EAAMiB,UAA+BjB,EAAMmD,gBAAkBnD,EAAM+B,WAAjD/B,EAAM+B,YAAyD/B,EAAMa,WACtJ,KACD,GAAIb,aAAiBpH,OAAUoH,GAASA,EAAM3H,MAAQE,EAASyH,GAAS,CAEvE,IADHxI,IAAAA,EAAIwI,EAAMhI,SACLR,GAAK,GACRk9B,KAAAA,OAAO10B,EAAMxI,IAEZ,OAAA,KACD,MAAsB,iBAAXwI,EACV,KAAKi3B,YAAYj3B,GAElB,KAAK+D,KAAK,KAAM/D,IAGxBvI,EAAEoM,QAAU,SAASK,EAAOoC,GASpB,OARQ7N,EAAAA,eAAAA,UAAUoL,QAAQnL,KAAK,KAAMwL,EAAOoC,GACxC,KAAKpE,MAGL,KAAKV,MAAQ,KAAKlB,aACvBkB,KAAAA,MAAQ,KAAKhB,UACbuB,KAAAA,WAAa,KAAKtB,gBAHlBe,KAAAA,MAAQ,KAAKO,WAAa,KAAKvB,UAAY,KAAKC,eAAiB,EAKhE,MAGRhJ,EAAEy/B,OAAS,SAASl3B,EAAOm3B,GACnB,OAAA,KAAK51B,IAAIvB,EAAO,KAAK+2B,kBAAkB,KAAMI,GAAe,EAAMn3B,KAG1EvI,EAAEqO,OAASrO,EAAE2/B,eAAiB,SAASp3B,EAAOgG,EAAUC,EAAOC,GACvD,OAAA,KAAK3E,IAAIvB,EAAOgG,GAAY,EAAGC,EAAOC,IAG9CzO,EAAE4/B,eAAiB,SAASvpB,EAAQqpB,EAAelxB,EAAOC,GAClD,OAAA,KAAK3E,IAAIuM,EAAQ,KAAKipB,kBAAkB,KAAMI,GAAe,EAAMrpB,GAAS7H,EAAOC,IAG3FzO,EAAEu/B,SAAW,SAASM,EAAOtxB,GAErB,OADF+vB,KAAAA,QAAQuB,GAAS,KAAKP,kBAAkB/wB,GACtC,MAGRvO,EAAE8/B,SAAW,SAASvxB,EAAUxJ,EAAU4H,EAAQ3H,GAC7Cf,IAAAA,EAAI1E,EAAU0a,QAAAA,YAAY,EAAGukB,EAAgB7xB,EAAQ3H,GAAS,MAI3D,OAHPf,EAAE6E,KAAKoL,WAAajQ,EAAE6E,KAAK+L,kBAAoB9P,EAC/Cd,EAAEsF,KAAO,UACJu1B,KAAAA,WAAY,EACV,KAAKh1B,IAAI7F,EAAGsK,IAGpBvO,EAAEw/B,YAAc,SAASK,GAEjB,cADA,KAAKvB,QAAQuB,GACb,MAGR7/B,EAAE+/B,aAAe,SAASF,GACjB,OAAuB,MAAvB,KAAKvB,QAAQuB,GAAkB,KAAKvB,QAAQuB,IAAU,GAG/D7/B,EAAEs/B,kBAAoB,SAASU,EAAaN,EAAeO,EAAgBC,GACtEC,IAAAA,EAAiBpgC,EAEjBmgC,GAAAA,aAAkBt3B,EAAlB,WAA+Bs3B,EAAOt1B,WAAa,KACjDqyB,KAAAA,OAAOiD,QACN,GAAIA,IAAYA,aAAkB/+B,OAAW++B,EAAOt/B,MAAQE,EAASo/B,IAEpE,IADPngC,EAAImgC,EAAO3/B,SACFR,GAAK,GACTmgC,EAAOngC,aAAc6I,EAArB,WAAkCs3B,EAAOngC,GAAG6K,WAAa,MACvDqyB,KAAAA,OAAOiD,EAAOngC,IAKlB,GADJogC,EAA2C,iBAAjBH,GAA8BN,EAAsB,KAAK72B,WAAa,YAAe,KAAKu3B,SAASxyB,SAAQ,GAAS,KAAK7E,UAA1E,EAC3C,iBAAnB22B,EACH,OAAA,KAAKJ,kBAAkBI,EAAgBO,GAA0C,iBAAjBD,GAA4D,MAA/B,KAAK1B,QAAQoB,GAA0BM,EAAcG,EAAkB,EAAGF,GAG3K,GADJP,EAAgBA,GAAiB,EACL,iBAAjBM,IAA8B3sB,MAAM2sB,IAA6C,MAA7B,KAAK1B,QAAQ0B,GAUlD,MAAfA,IACVA,EAAcG,OAXoF,CAE9FpgC,IAAO,KADXA,EAAIigC,EAAY9yB,QAAQ,MAEnB,OAA6B,MAA7B,KAAKoxB,QAAQ0B,GACTC,EAAkB,KAAK3B,QAAQ0B,GAAeG,EAAkBT,EAAiBA,EAElF,KAAKpB,QAAQ0B,GAAeN,EAEpCA,EAAgBltB,SAASwtB,EAAYnvB,OAAO9Q,EAAE,GAAK,IAAK,IAAMmJ,OAAO82B,EAAY/yB,OAAOlN,EAAE,IAC1FigC,EAAejgC,EAAI,EAAK,KAAKu/B,kBAAkBU,EAAY/yB,OAAO,EAAGlN,EAAE,GAAI,EAAGkgC,GAAkBE,EAI1Fj3B,OAAAA,OAAO82B,GAAeN,GAG9B1/B,EAAEkL,KAAO,SAASqD,EAAUtD,GACpB,OAAA,KAAKK,UAAgC,iBAAdiD,EAA0BA,EAAW,KAAK+wB,kBAAkB/wB,IAA+B,IAAnBtD,IAGvGjL,EAAEqgC,KAAO,WACD,OAAA,KAAKr2B,QAAO,IAGpBhK,EAAEsgC,YAAc,SAAS/xB,EAAUtD,GAC3B,OAAA,KAAKF,KAAKwD,EAAUtD,IAG5BjL,EAAEugC,YAAc,SAAShyB,EAAUtD,GAC3B,OAAA,KAAKE,MAAMoD,EAAUtD,IAG7BjL,EAAE2L,OAAS,SAASlE,EAAMwD,EAAgBW,GACrC,KAAKzB,KACH2B,KAAAA,UAAS,GAAM,GAEjBoN,IAMHzM,EAAO0M,EAAYrK,EAAM/J,EAAUy7B,EAAeC,EAAYrB,EAASrxB,EALvEsL,EADU,KACMtP,MAChB8U,EAFU,KAEQ3U,OAFR,KAE6CwB,gBAF7C,KAEuB1C,eACjC03B,EAHU,KAGO15B,WACjB25B,EAJU,KAIWv3B,WACrBw3B,EALU,KAKQv2B,QAKf6O,GAHAG,IAPO,KAOWtP,QACrBtC,GARU,KAQGsC,MAAQsP,GARX,KAUFylB,YAVE,KAUiBD,mBAAqB5zB,EAAgB,CAC5DxD,GAAAA,EAAO4R,EAEH5M,IADPA,EAZS,KAYI0B,OACN1B,GAASA,EAAMzF,YAAcS,IAASg5B,GACvCh0B,EAAM1D,WAA8B,YAAf0D,EAAMlD,MAAuBkD,EAAMiB,OAAgC,IAArBjB,EAAMzF,YAA0C,IAdhH,KAc+FuD,eACtGk2B,EAAah0B,GAEdA,EAAQA,EAAMjC,WAIRiC,IADPA,EApBS,KAoBIhC,MACNgC,GAASA,EAAMzF,YAAcS,IAASg5B,GACvCh0B,EAAM1D,WAA8B,YAAf0D,EAAMlD,MAAsBkD,EAAMlC,aAAe,IAC1Ek2B,EAAah0B,GAEdA,EAAQA,EAAMmC,MAGZ6xB,IA5BM,KA6BJ12B,MA7BI,KA6BSO,WAAa7C,EAAOg5B,EAAWz5B,WACjD+G,EA9BS,KA8BQ/G,YA9BR,KA8B2BwC,UA9B3B,KA8B4CT,UAAYtB,EAAOA,GA9B/D,KA8B4E2B,YAGnF3B,GAAAA,GAAQoX,EA9aD,MA8awBpX,GAAQ,EAjChC,KAkCL6C,WAlCK,KAkCaP,MAAQ8U,EAlCrB,KAmCArV,WAnCA,KAmCqBq3B,oBAC9B1nB,GAAa,EACbpU,EAAW,aACXy7B,IAtCS,KAsCc71B,UAAUuD,mBACV,IAvCd,KAuCAnF,YAAsBtB,GAAQ,GAAKA,IApbnC,MA6YA,KAuC8D8C,aAAe,GApb7E,OA6YA,KAuCuFA,eAvCvF,KAuC2HA,eAAiB9C,GAvC5I,KAuCyJ0G,SACjKqyB,GAAgB,EAxCR,KAyCCj2B,aAtbD,OAubPxF,EAAW,uBA1CJ,KA8CLwF,aA9CK,KA8CgBxB,YAAckC,GAAkBxD,GA9ChD,KA8C6D8C,eAAiB9C,EAAQA,EA3btF,KA4bVA,EAAOoX,EAAW,UAEZ,GAAIpX,EA9bA,KAucNA,GA1DM,KAkDL6C,WAlDK,KAkDaP,MAAQ,EAC3BtC,GAhcM,OAicTA,EAAO,IAES,IAAb4R,GAAsC,IAtDhC,KAsDkBtQ,WAnclB,OA6YA,KAsD0CwB,eAtD1C,KAsD6EA,aAAe,GAAM9C,EAAO,GAtDzG,KAsDmH8C,cAAgB,MAC5IxF,EAAW,oBACXoU,EAxDS,KAwDS3P,WAEf/B,EAAO,EA1DD,KA2DJ4B,SAAU,EA3DN,KA4DAsB,UAAUuD,oBA5DV,KA4DqC1E,WAC7Cg3B,EAAgBrnB,GAAa,EAC7BpU,EAAW,qBA9DH,KA+DOwF,cAAgB,GA/DvB,KA+DiC4D,SACzCqyB,GAAgB,GAhER,KAkEJj2B,aAAe9C,MACd,CAEFA,GArEK,KAoEJ8C,aApEI,KAoEiBxB,YAAckC,GAAkBxD,GApEjD,KAoE8D8C,eAAiB9C,EAAQA,EAjdvF,KAkdI,IAATA,GAAc0R,EAEV1M,IADPA,EAtEQ,KAsEK0B,OACN1B,GAA8B,IAArBA,EAAMzF,YAChByF,EAAM1D,YACVoQ,GAAa,GAEd1M,EAAQA,EAAMjC,MAGhB/C,EAAO,EA9EE,KA+EC2C,WACTo2B,GAAgB,QAhFR,KAqFLl2B,WArFK,KAqFaP,MArFb,KAqF0BQ,aAAe9C,EAEhD,GAvFO,KAuFDsC,QAAUsP,GAvFT,KAuF2BlL,QAAYvC,GAAU40B,GAAkBC,EAA1E,CAeArB,GAtGO,KAyFMh1B,WAzFN,KA0FLA,UAAW,GA1FN,KA6FDf,UA7FC,KA6FkBgB,SA7FlB,KA6FkCN,QAAUsP,GAAY5R,EAAO,IA7F/D,KA8FL4B,SAAU,GAGC,IAAbgQ,GAjGO,KAiGkBvQ,KAAK4L,UAA4B,IAjGnD,KAiGyC3K,OAjGzC,KAiG8DhB,WAAgBkC,GAjG9E,KAkGL4B,UAAU,aAGhBuyB,EArGW,KAqGIr1B,QACAsP,EAEP5M,IADPA,EAvGU,KAuGG0B,OACN1B,IACNqC,EAAOrC,EAAMjC,MACT40B,IA1GK,KA0GYr1B,SA1GZ,KA0G2BM,SAAYu2B,MAErCn0B,EAAMpD,SAAYoD,EAAMzF,YAAco4B,IAAY3yB,EAAMpC,UAAYoC,EAAMtC,OAChFs2B,IAAeh0B,IA7GX,KA8GFtB,QA9GE,KA+GFkC,WAAaU,GAEdtB,EAAMjD,UAGViD,EAAMd,QAAUc,EAAMvC,OAAiCuC,EAAMf,gBAA7Be,EAAMzD,iBAA4CvB,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAa6B,EAAgBW,GAFhJa,EAAMd,QAAQlE,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAY6B,EAAgBW,IAK7Ea,EAAQqC,OAIFrC,IADPA,EA1HU,KA0HGhC,MACNgC,IACNqC,EAAOrC,EAAMmC,MACTwwB,IA7HK,KA6HYr1B,SA7HZ,KA6H2BM,SAAYu2B,KAFnC,CAIN,GAAIn0B,EAAMpD,SAAYoD,EAAMzF,YAAcqS,IAAa5M,EAAMpC,UAAYoC,EAAMtC,IAAM,CACvFs2B,GAAAA,IAAeh0B,EAAO,CAElBg0B,IADPA,EAAah0B,EAAMmC,MACZ6xB,GAAcA,EAAW7yB,UAlIzB,KAkI0C7D,OAChD02B,EAAW90B,OAAS80B,EAAWj3B,UAAYi3B,EAAW/0B,iBAAoBjE,EAAOg5B,EAAWz5B,YAAcy5B,EAAWr3B,YAAe3B,EAAOg5B,EAAWz5B,YAAcy5B,EAAWr3B,WAAa6B,EAAgBW,GAC5M60B,EAAaA,EAAW7xB,MAEzB6xB,EAAa,KAtIN,KAuIFt1B,QAvIE,KAwIFkC,WAAaU,EAEdtB,EAAMjD,UAGViD,EAAMd,QAAUc,EAAMvC,OAAiCuC,EAAMf,gBAA7Be,EAAMzD,iBAA4CvB,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAa6B,EAAgBW,GAFhJa,EAAMd,QAAQlE,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAY6B,EAAgBW,GAK7Ea,EAAQqC,EAhJC,KAoJFpE,YAAgBO,IACpBqC,EAAY/M,QACfgN,IAtJS,KAwJLV,UAAU,cAGZ9H,IA3JO,KA2JaoF,KAASu2B,IA3JtB,KA2JyC15B,YAAc25B,IA3JvD,KA2J8Ev3B,aAA+B,IA3J7G,KA2JmGW,OAAe8U,GA3JlH,KA2JmInT,mBACzIyN,IACC7L,EAAY/M,QACfgN,IA9JQ,KAgKA5C,UAAUuD,oBAhKV,KAiKHpC,UAAS,GAAO,GAjKb,KAmKJzC,SAAU,IAEX4B,GArKK,KAqKkBnC,KAAK/D,IArKvB,KAsKJ8H,UAAU9H,OAKlB/E,EAAE6gC,gBAAkB,WAEZp0B,IADHA,IAAAA,EAAQ,KAAK0B,OACV1B,GAAO,CACTA,GAAAA,EAAMpC,SAAaoC,aAAiB4xB,GAAiB5xB,EAAMo0B,kBACvD,OAAA,EAERp0B,EAAQA,EAAMjC,MAER,OAAA,GAGRxK,EAAE8gC,YAAc,SAASC,EAAQ1qB,EAAQ8J,EAAW6gB,GACnDA,EAAmBA,IAAqB,WAIjCv0B,IAHH3M,IAAAA,EAAI,GACP2M,EAAQ,KAAK0B,OACb2R,EAAM,EACArT,GACFA,EAAMzF,WAAag6B,IAEZv0B,aAAiBlN,EAArB,SACS,IAAX8W,IACHvW,EAAEggB,KAASrT,KAGM,IAAd0T,IACHrgB,EAAEggB,KAASrT,IAEG,IAAXs0B,IAEHjhB,GADAhgB,EAAIA,EAAEkD,OAAOyJ,EAAMq0B,aAAY,EAAMzqB,EAAQ8J,KACrC5f,UAGVkM,EAAQA,EAAMjC,MAER1K,OAAAA,GAGRE,EAAEma,YAAc,SAASxV,EAAQo8B,GAC5BE,IAGH5qB,EAAQtW,EAHLkhC,EAAW,KAAK92B,IACnBrK,EAAI,GACJggB,EAAM,EAOA,IALHmhB,GACEn1B,KAAAA,UAAS,GAAM,GAGrB/L,GADAsW,EAAS9W,EAAU4a,QAAAA,YAAYxV,IACpBpE,SACFR,GAAK,IACTsW,EAAOtW,GAAG6K,WAAa,MAASm2B,GAAU,KAAKG,UAAU7qB,EAAOtW,OACnED,EAAEggB,KAASzJ,EAAOtW,IAMbD,OAHHmhC,GACEn1B,KAAAA,UAAS,GAAO,GAEfhM,GAGRE,EAAEogC,OAAS,WACH,OAAA,KAAKhyB,SAGbpO,EAAEkhC,UAAY,SAASz0B,GAEf9C,IADHA,IAAAA,EAAK8C,EAAM7B,SACRjB,GAAI,CACNA,GAAAA,IAAO,KACH,OAAA,EAERA,EAAKA,EAAGiB,SAEF,OAAA,GAGR5K,EAAEmhC,cAAgB,SAAStjB,EAAQujB,EAAcJ,GAChDA,EAAmBA,GAAoB,EAIhCv0B,IAHHA,IAEHzM,EAFGyM,EAAQ,KAAK0B,OAChBkzB,EAAS,KAAK/C,QAER7xB,GACFA,EAAMzF,YAAcg6B,IACvBv0B,EAAMzF,YAAc6W,GAErBpR,EAAQA,EAAMjC,MAEX42B,GAAAA,EACEphC,IAAAA,KAAKqhC,EACLA,EAAOrhC,IAAMghC,IAChBK,EAAOrhC,IAAM6d,GAIT,OAAA,KAAKtR,UAAS,IAGtBvM,EAAEqM,MAAQ,SAASvD,EAAMnE,GACpB,IAACmE,IAASnE,EACN,OAAA,KAAKmH,UAAS,GAAO,GAKtB,IAHHuK,IAAAA,EAAW1R,EAAgD,KAAKwV,YAAYxV,GAAvD,KAAKm8B,aAAY,GAAM,GAAM,GACrD/gC,EAAIsW,EAAO9V,OACX0W,GAAU,IACFlX,GAAK,GACTsW,EAAOtW,GAAGsM,MAAMvD,EAAMnE,KACzBsS,GAAU,GAGLA,OAAAA,GAGRjX,EAAEshC,MAAQ,SAASD,GACdhrB,IAAAA,EAAS,KAAKyqB,aAAY,GAAO,GAAM,GAC1C/gC,EAAIsW,EAAO9V,OAEL,IADFwJ,KAAAA,MAAQ,KAAKO,WAAa,IACtBvK,GAAK,GACbsW,EAAOtW,GAAG+L,UAAS,GAAO,GAKpB,OAHQ,IAAXu1B,IACE/C,KAAAA,QAAU,IAET,KAAK/xB,UAAS,IAGtBvM,EAAE6L,WAAa,WAEPY,IADHA,IAAAA,EAAQ,KAAK0B,OACV1B,GACNA,EAAMZ,aACNY,EAAQA,EAAMjC,MAER5B,OAAAA,EAAU5H,UAAAA,UAAU6K,WAAW5K,KAAK,OAG5CjB,EAAE8L,SAAW,SAASI,EAASC,GAC1BD,GAAAA,IAAY,KAAK/B,IAEbsC,IADHA,IAAAA,EAAQ,KAAK0B,OACV1B,GACNA,EAAMX,SAASI,GAAS,GACxBO,EAAQA,EAAMjC,MAGTyD,OAAAA,EAAejN,eAAAA,UAAU8K,SAAS7K,KAAK,KAAMiL,EAASC,IAG9DnM,EAAEsL,UAAY,SAAS7D,EAAMwD,EAAgBmC,GACvCyxB,KAAAA,kBAAmB,EACpB1tB,IAAAA,EAAMvI,EAAU5H,UAAAA,UAAUsK,UAAUnJ,MAAM,KAAM4F,WAE7CoJ,OADF0tB,KAAAA,kBAAmB,EACjB1tB,GAGRnR,EAAE6I,SAAW,SAASN,GACjB,OAACR,UAAUxH,QAMS,IAApB,KAAKsI,YAA8B,IAAVN,GACvBuF,KAAAA,UAAU,KAAK/E,UAAYR,GAE1B,OARF,KAAK2B,QACHwB,KAAAA,gBAEC,KAAK3C,YAQd/I,EAAE0L,cAAgB,SAASnD,GACtB,IAACR,UAAUxH,OAAQ,CAClB,GAAA,KAAK2J,OAAQ,CAMTuC,IALH2Q,IAIH4f,EAAM3rB,EAJH+L,EAAM,EAET3Q,EADO,KACMhC,MACbi2B,EAAY,aAENj0B,GACNuwB,EAAOvwB,EAAMmC,MACTnC,EAAMvC,QACTuC,EAAMf,gBAEHe,EAAMzF,WAAa05B,GAThB,KASkC/yB,gBAAkBlB,EAAMpC,UAT1D,KAS2Ek3B,sBAT3E,KAUDA,qBAAuB,EAVtB,KAWDz3B,IAAI2C,EAAOA,EAAMzF,WAAayF,EAAMxD,QAXnC,KAYDs4B,qBAAuB,GAE5Bb,EAAYj0B,EAAMzF,WAEfyF,EAAMzF,WAAa,IAAMyF,EAAMpC,UAClC+S,GAAO3Q,EAAMzF,WAjBP,KAkBG2D,UAAUwC,oBAlBb,KAmBAnG,YAAcyF,EAAMzF,WAnBpB,KAmBsCoC,WAnBtC,KAoBAW,OAAS0C,EAAMzF,WApBf,KAqBAsD,YAAcmC,EAAMzF,WArBpB,KAsBAuD,cAAgBkC,EAAMzF,YAtBtB,KAwBDm6B,eAAe10B,EAAMzF,YAAY,GAAQ,YAC9C05B,EAAY,IAEbrvB,EAAM5E,EAAMzF,WAAcyF,EAAMzD,eAAiByD,EAAMrD,YAC7CgU,IACTA,EAAM/L,GAEP5E,EAAQuwB,EA/BD,KAiCHj0B,UAjCG,KAiCcC,eAAiBoU,EAjC/B,KAkCHlT,QAAS,EAER,OAAA,KAAKlB,eAELT,OAAAA,GAAS,KAAKmD,gBAAmB,KAAKoC,UAAU,KAAK9E,eAAiBT,GAAS,MAGxFvI,EAAEgK,OAAS,SAASzB,GACfA,IAAU,IAAVA,GAAmB,KAAK8B,QAEpBoC,IADHA,IAAAA,EAAQ,KAAK0B,OACV1B,GACFA,EAAMzF,aAAe,KAAK+C,OAAwB,YAAf0C,EAAMlD,OAC5CkD,EAAMlC,aAAe,GAEtBkC,EAAQA,EAAMjC,MAGT5B,OAAAA,EAAU5H,UAAAA,UAAUgJ,OAAO7H,MAAM,KAAM4F,YAG/C/H,EAAEwhC,WAAa,WAEP73B,IADHA,IAAAA,EAAK,KAAKgB,UACPhB,EAAGgB,WACThB,EAAKA,EAAGgB,UAEDhB,OAAAA,IAAOf,EAAUiB,UAAAA,qBAG1B7J,EAAEgM,QAAU,SAASy1B,GACZA,OAAAA,IAAgB,KAAKp3B,SAAY,KAAK4T,SAAW,KAAKxW,OAAS,GAAK,KAAKgG,gBAAkB,GAAO,KAAKnD,YAAc,KAAKvB,UAAY,KAAKmV,cAAgB,KAAK7T,QAAU,KAAKC,YAAc,KAAKK,UAAUqB,QAAQy1B,GAAe,KAAKz6B,YAAc,KAAKoC,YAG7Pi1B,IAEL,GAEG,IAAIA,EAAe/7B,EAAQ+7B,QAAAA,aAA3B,QAAA,QAAA,QAAA,aAAA;;ACjUA,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,OAAA,eAAA,QAAA,eAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,QAAA,QAAA,QAAA,iBAAA,EA3fP,IAAA,EAAA,EAAA,QAAA,mBACA,EAAA,EAAA,QAAA,sBA0fO,SAAA,EAAA,GAAA,OAAA,GAAA,EAAA,WAAA,EAAA,CAAA,QAAA,GAAA,SAAA,EAAA,GAAA,GAAA,GAAA,EAAA,WAAA,OAAA,EAAA,IAAA,EAAA,GAAA,GAAA,MAAA,EAAA,IAAA,IAAA,KAAA,EAAA,GAAA,OAAA,UAAA,eAAA,KAAA,EAAA,GAAA,CAAA,IAAA,EAAA,OAAA,gBAAA,OAAA,yBAAA,OAAA,yBAAA,EAAA,GAAA,GAAA,EAAA,KAAA,EAAA,IAAA,OAAA,eAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,OAAA,EAAA,QAAA,EAAA,EAxfPn/B,EAASkD,SAAAA,UAAU,cAAe,CAAC,eAAe,YAAY,eAAgB,WAExEs/B,IAAAA,EAAc,SAAS54B,GACZ7H,EAAAA,QAAAA,KAAK,KAAM6H,GACnBmV,KAAAA,QAAU,KAAKnV,KAAKuM,QAAU,EAC9B6I,KAAAA,aAAe,KAAKpV,KAAKwM,aAAe,EACxCyI,KAAAA,OAAS,EACTC,KAAAA,QAAU,KAAKlV,KAAKsM,KACpBlL,KAAAA,QAAS,GAGfiU,EAAqB5e,EAAUiU,QAAAA,WAC/BlG,EAAc6Q,EAAmBzK,WACjCnG,EAAc4Q,EAAmBhI,WACjCxW,EAAWT,EAASkD,SAAAA,UAAUE,QAC9Bq/B,EAAY,IAAIn/B,EAAJ,KAAS,KAAM,KAAM,EAAG,GACpCxC,EAAI0hC,EAAY1gC,UAAY,IAAIq9B,EAAJ,QAoetBqD,OAleP1hC,EAAE2I,YAAc+4B,EAChB1hC,EAAEsM,OAAOnC,KAAM,EACfu3B,EAAYrxB,QAAU,QAEtBrQ,EAAE6L,WAAa,WAKPwyB,OAJFrgB,KAAAA,QAAU,KAAKlV,KAAKsM,KACpB6I,KAAAA,QAAU,KAAKnV,KAAKuM,QAAU,EAC9B6I,KAAAA,aAAe,KAAKpV,KAAKwM,aAAe,EACxC/I,KAAAA,UAAS,GACP8xB,EAAar9B,QAAAA,UAAU6K,WAAW5K,KAAK,OAG/CjB,EAAE4hC,YAAc,SAAS78B,EAAUwJ,EAAU5B,EAAQ3H,GAC7C,OAAA,KAAK8E,IAAKvK,EAAU0a,QAAAA,YAAY,EAAGlV,EAAU4H,EAAQ3H,GAAQuJ,IAGrEvO,EAAE6hC,eAAiB,SAAS98B,EAAUwJ,GACjCxJ,GAAAA,EACCwJ,GAAY,MAAZA,EACElC,KAAAA,MAAM,KAAMtH,QAKV,IAHHjF,IAAAA,EAAI,KAAKqa,YAAYpV,GAAU,GAClChF,EAAID,EAAES,OACNkH,EAAO,KAAK63B,kBAAkB/wB,KACtBxO,GAAK,GACTD,EAAEC,GAAGiH,aAAeS,GACvB3H,EAAEC,GAAG+L,UAAS,GAAO,GAKlB,OAAA,MAGR9L,EAAE8hC,YAAc,SAASvzB,GACjB,OAAA,KAAKszB,eAAexD,EAAa7qB,QAAAA,WAAWirB,cAAelwB,IAGnEvO,EAAE+hC,QAAU,SAASxzB,EAAUzF,GAC9BA,EAAOA,GAAQ,GACX8D,IAEH/D,EAAU7I,EAAGiE,EAFV2I,EAAO,CAACvJ,KAAKs+B,EAAW/3B,UAAU,KAAK43B,aAAcl4B,iBAAgB,EAAOkM,MAAK,GACpFupB,EAAUj2B,EAAKuM,QAAU1V,EAASme,UAAave,EADhD,QAGKS,IAAAA,KAAK8I,EACT8D,EAAK5M,GAAK8I,EAAK9I,GAcTiE,OAZP2I,EAAKnF,KAAO,KAAK63B,kBAAkB/wB,GACnC1F,EAAYb,KAAK2V,IAAIzU,OAAO0D,EAAKnF,MAAQ,KAAKsC,OAAS,KAAKX,YAAe,KAC3EnF,EAAI,IAAI86B,EAAO,KAAMl2B,EAAU+D,GAC/BA,EAAK8H,QAAU,WACdzQ,EAAEU,OAAOqF,QAAO,GACZ/F,EAAE6E,KAAKrB,OAASxD,EAAEU,OAAO8C,QAAUoB,IAAa5E,EAAE4E,YAAe5E,EAAE+9B,UACtE/9B,EAAE4E,SAAUb,KAAK2V,IAAK1Z,EAAE6E,KAAKrB,KAAOxD,EAAEU,OAAO8C,QAAUxD,EAAEU,OAAOyE,YAAauC,OAAO1H,EAAEwD,QAAQ,GAAM,GAEjGqB,EAAK4L,SACR5L,EAAK4L,QAAQvS,MAAM2G,EAAK8L,cAAgB9L,EAAKiE,eAAiB9I,EAAG6E,EAAK6L,eAAiB,KAGlF1Q,GAGRjE,EAAEiiC,YAAc,SAASC,EAAcC,EAAYr5B,GAClDA,EAAOA,GAAQ,GACfo5B,EAAe,KAAK5C,kBAAkB4C,GACtCp5B,EAAKwL,QAAU,CAACJ,WAAW,KAAKhJ,KAAMiJ,iBAAiB,CAAC+tB,GAAen1B,cAAc,MACrFjE,EAAKQ,iBAA4C,IAAzBR,EAAKQ,gBACzBrF,IAAAA,EAAI,KAAK89B,QAAQI,EAAYr5B,GAE1B7E,OADPA,EAAE+9B,SAAW,EACN/9B,EAAE4E,SAAUb,KAAK2V,IAAK1Z,EAAE6E,KAAKrB,KAAOy6B,GAAgB,KAAK94B,YAAe,OAGhFpJ,EAAE2L,OAAS,SAASlE,EAAMwD,EAAgBW,GACrC,KAAKzB,KACH2B,KAAAA,UAAS,GAAM,GAEjBoN,IAUHzM,EAAO0M,EAAYrK,EAAM/J,EAAUy7B,EAAe5hB,EAAe6hB,EAAYrB,EAASrxB,EATtFsL,EADU,KACMtP,MAChB8U,EAFU,KAEQ3U,OAFR,KAE6CwB,gBAF7C,KAEuB1C,eACjC+O,EAHU,KAGChP,UACX+V,EAJU,KAIWxU,WACrBo2B,EALU,KAKO15B,WACjB25B,EANU,KAMWv3B,WACrBkQ,EAPU,KAOa/O,aACvBq2B,EARU,KAQQv2B,QAClB0U,EATU,KASOhB,OAKdtW,GAHA4R,IAXO,KAWWtP,QACrBtC,GAZU,KAYGsC,MAAQsP,GAElB5R,GAAQoX,EAjGD,MAiGwBpX,GAAQ,EAdhC,KAeA26B,UAfA,KAgBJ93B,WAAauU,EAhBT,KAiBJd,OAjBI,KAiBUE,SAjBV,KAmBAzU,WAnBA,KAmBqBq3B,oBAC9B1nB,GAAa,EACbpU,EAAW,aACXy7B,IAtBS,KAsBc71B,UAAUuD,mBACV,IAvBd,KAuBAnF,YAAsBtB,GAAQ,GAAKA,IA1GnC,MA0GyD6R,EAAkB,GA1G3E,OA0GgFA,IAAkCA,IAAoB7R,GAvBtI,KAuBmJ0G,SAC3JqyB,GAAgB,EACZlnB,EA5GI,OA6GPvU,EAAW,uBA1BJ,KA8BLwF,aA9BK,KA8BgBxB,YAAckC,GAAkBxD,GA9BhD,KA8B6D8C,eAAiB9C,EAAQA,EAjHtF,KAmFA,KA+BDuW,OAAwB,EA/BvB,KA+BcD,OA/Bd,KAgCJhU,MAAQtC,EAAO,GAhCX,KAkCJsC,MAAQgO,EACbtQ,EAAOsQ,EAAM,WAGR,GAAItQ,EAzHA,KAqINA,GAlDM,KAuCA26B,UAvCA,KAwCJ93B,WAxCI,KAwCcyT,OAAS,GAxCvB,KA0CLhU,MAAQ,EACTtC,GA9HM,OA+HTA,EAAO,IAES,IAAb4R,GAA2B,IAARtB,GAjIb,OAiI0BuB,IAAiCA,EAAkB,GAAM7R,EAAO,GAAK6R,GAAmB,KA9ClH,KA8C+H8oB,WACxIr9B,EAAW,oBACXoU,EAhDS,KAgDS3P,WAEf/B,EAAO,EAlDD,KAmDJ4B,SAAU,EAnDN,KAoDAsB,UAAUuD,oBApDV,KAoDqC1E,WAC7Cg3B,EAAgBrnB,GAAa,EAC7BpU,EAAW,qBACDuU,GAAmB,GAvDrB,KAuD+BnL,SACvCqyB,GAAgB,GAxDR,KA0DJj2B,aAAe9C,MACd,CAEFA,GA7DK,KA4DJ8C,aAAgBwN,IAAQ9M,GAAkBxD,GA5DtC,KA4DmD8C,eAAiB9C,EAAQA,EA/I5E,KAgJI,IAATA,GAAc0R,EAEV1M,IADPA,EA9DQ,KA8DK0B,OACN1B,GAA8B,IAArBA,EAAMzF,YAChByF,EAAM1D,YACVoQ,GAAa,GAEd1M,EAAQA,EAAMjC,MAGhB/C,EAAO,EAtEE,KAuEC2C,WACTo2B,GAAgB,QAKN,IAARzoB,GAAauB,EAAkB,IAClCknB,GAAgB,GA9EP,KAgFLz2B,MAhFK,KAgFQQ,aAAe9C,EAhFvB,KAiFA26B,UAjFA,KAkFJ93B,WAAa7C,EACG,IAnFZ,KAmFAwW,UACRW,EAAgB7G,EApFR,KAoFmBmG,aApFnB,KAqFHH,OArFG,KAqFYzT,WAAasU,GAAkB,EArF3C,KAsFCb,QAtFD,KAsFkBA,SAtFlB,KAsFkCzT,WAAasU,GAAiBE,GAAiBrX,GAtFjF,KAuFFsW,SAvFE,KAyFHhU,MAzFG,KAyFUO,WAzFV,KAyF6ByT,OAASa,EAzFtC,KA0FCZ,OAAyB,EA1F1B,KA0FiBD,SA1FjB,KA2FFhU,MAAQgO,EA3FN,KA2FiBhO,OA3FjB,KA6FCA,MAAQgO,GA7FT,KA8FFhO,MAAQgO,EACbtQ,EAAOsQ,EAAM,MA/FN,KAgGQhO,MAAQ,EAhGhB,KAiGFA,MAAQtC,EAAO,EAEpBA,EAnGO,KAmGKsC,QAMZmP,GAzGO,KAyGF4lB,YAzGE,KAyGiBD,mBAAqB5zB,EAAgB,CAE5DxD,IADJA,EA1GU,KA0GEsC,OACDsP,GA3GD,KA2GmB4E,SAAWc,IA3G9B,KA2GiDhB,OAEnDtR,IADPA,EA5GS,KA4GI0B,OACN1B,GAASA,EAAMzF,YAAcS,IAASg5B,GACvCh0B,EAAM1D,WAA8B,YAAf0D,EAAMlD,MAAuBkD,EAAMiB,OAAgC,IAArBjB,EAAMzF,YAA0C,IA9GhH,KA8G+FuD,eACtGk2B,EAAah0B,GAEdA,EAAQA,EAAMjC,WAIRiC,IADPA,EApHS,KAoHIhC,MACNgC,GAASA,EAAMzF,YAAcS,IAASg5B,GACvCh0B,EAAM1D,WAA8B,YAAf0D,EAAMlD,MAAsBkD,EAAMlC,aAAe,IAC1Ek2B,EAAah0B,GAEdA,EAAQA,EAAMmC,MAGZ6xB,IACH1yB,EA7HS,KA6HQ/G,YA7HR,KA6H2BwC,UA7H3B,KA6H4CT,UAAY03B,EAAWz5B,WAAay5B,EAAWz5B,YA7H3F,KA6H8GoC,WACnHq3B,EAAWz5B,WAAa+Q,IA9HnB,KA+HHhO,MA/HG,KA+HUQ,aAAe9C,EAAOg5B,EAAWz5B,WA/H3C,KAgIHsD,WAAa7C,EAhIV,KAgIuBsW,QAhIvB,KAgIsC/U,eAhItC,KAgI4DkV,gBAKnEhF,GArIO,KAqIF6E,SAAWgB,IArIT,KAqI8BqjB,QAAS,CAS7CC,IAAAA,EA9IM,KA8IYrkB,OAA6B,IAAP,EAAZe,GAC/B1B,EAAQglB,KA/IC,KA+ImBrkB,OAA+B,IAAP,EA/I3C,KA+IkCD,SAC3CukB,EAhJS,KAgJWh4B,WACpBi4B,EAjJS,KAiJOxkB,OAChBykB,EAlJS,KAkJaj4B,aACtBk4B,EAnJS,KAmJM14B,MAsBZsP,GAzKM,KAqJL/O,WAAayU,EAAYhH,EArJpB,KAsJDgG,OAASgB,EACjBsjB,GAAaA,EAvJJ,KAyJJ/3B,YAAcyN,EAzJV,KA2JLhO,MAAQsP,EA3JH,KA6JL9O,aAAwB,IAARwN,EAAauB,EAAkB,KAASA,EA7JnD,KA8JLyE,OAASgB,EA9JJ,KA+JLqjB,SAAU,EACf/oB,EAAYgpB,EAAa,EAAItqB,EAhKnB,KAiKLpM,OAAO0N,EAAUpO,EAAyB,IAAR8M,GAClC9M,GAlKK,KAkKqBd,KAlKrB,KAmKArB,KAAKkM,WAnKL,KAoKH+I,OAASwkB,EApKN,KAqKHH,SAAU,EArKP,KAsKHv1B,UAAU,aAGbwM,IAzKM,KAyKYtP,MACrB,OASGmP,GAPAmE,IA5KM,KA6KJU,OAASgB,EA7KL,KA8KJqjB,SAAU,EACf/oB,EAAYgpB,EAAatqB,EAAM,MAAU,KA/KhC,KAgLJpM,OAAO0N,GAAU,GAAM,IAhLnB,KAkLL+oB,SAAU,EAlLL,KAmLD/3B,UAAYu2B,EACpB,OApLS,KAsLL72B,MAAQ04B,EAtLH,KAuLLn4B,WAAag4B,EAvLR,KAwLLvkB,OAASwkB,EAxLJ,KAyLLh4B,aAAei4B,EAGjB,GA5LO,KA4LDz4B,QAAUsP,GA5LT,KA4L2BlL,QAAYvC,GAAU40B,GAAkBC,EAA1E,CAkBArB,GA9MO,KAiMMh1B,WAjMN,KAkMLA,UAAW,GAlMN,KAqMDf,UArMC,KAqMkBgB,SArMlB,KAqMkCC,aAAewU,GAAiBrX,EAAO,IArMzE,KAsML4B,SAAU,GAGM,IAAlByV,GAzMO,KAyMuBhW,KAAK4L,UAAiC,IAzM7D,KAyM8CpK,YAzM9C,KAyMwEtB,gBAAqBiC,GAzM7F,KA0ML4B,UAAU,aAGhBuyB,EA7MW,KA6MIr1B,QACAsP,EAEP5M,IADPA,EA/MU,KA+MG0B,OACN1B,IACNqC,EAAOrC,EAAMjC,MACT40B,IAlNK,KAkNYr1B,SAlNZ,KAkN2BM,SAAYu2B,MAErCn0B,EAAMpD,SAAYoD,EAAMzF,YApN1B,KAoN6C+C,QAAU0C,EAAMpC,UAAYoC,EAAMtC,OACnFs2B,IAAeh0B,IArNX,KAsNFtB,QAtNE,KAuNFkC,WAAaU,GAEdtB,EAAMjD,UAGViD,EAAMd,QAAUc,EAAMvC,OAAiCuC,EAAMf,gBAA7Be,EAAMzD,iBAA4CvB,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAa6B,EAAgBW,GAFhJa,EAAMd,QAAQlE,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAY6B,EAAgBW,IAK7Ea,EAAQqC,OAIFrC,IADPA,EAlOU,KAkOGhC,MACNgC,IACNqC,EAAOrC,EAAMmC,MACTwwB,IArOK,KAqOYr1B,SArOZ,KAqO2BM,SAAYu2B,KAFnC,CAIN,GAAIn0B,EAAMpD,SAAYoD,EAAMzF,YAAcqS,IAAa5M,EAAMpC,UAAYoC,EAAMtC,IAAM,CACvFs2B,GAAAA,IAAeh0B,EAAO,CAElBg0B,IADPA,EAAah0B,EAAMmC,MACZ6xB,GAAcA,EAAW7yB,UA1OzB,KA0O0C7D,OAChD02B,EAAW90B,OAAS80B,EAAWj3B,UAAYi3B,EAAW/0B,iBAAoBjE,EAAOg5B,EAAWz5B,YAAcy5B,EAAWr3B,YAAe3B,EAAOg5B,EAAWz5B,YAAcy5B,EAAWr3B,WAAa6B,EAAgBW,GAC5M60B,EAAaA,EAAW7xB,MAEzB6xB,EAAa,KA9ON,KA+OFt1B,QA/OE,KAgPFkC,WAAaU,EAEdtB,EAAMjD,UAGViD,EAAMd,QAAUc,EAAMvC,OAAiCuC,EAAMf,gBAA7Be,EAAMzD,iBAA4CvB,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAa6B,EAAgBW,GAFhJa,EAAMd,QAAQlE,EAAOgF,EAAMzF,YAAcyF,EAAMrD,WAAY6B,EAAgBW,GAK7Ea,EAAQqC,EAxPC,KA4PFpE,YAAgBO,IACpBqC,EAAY/M,QACfgN,IA9PS,KAgQLV,UAAU,cAEZ9H,IAlQO,KAkQaq9B,SAlQb,KAkQgCj4B,KAASu2B,IAlQzC,KAkQ4D15B,YAAc25B,IAlQ1E,KAkQiGv3B,aAA+B,IAlQhI,KAkQsHW,OAAe8U,GAlQrI,KAkQsJnT,mBAC5JyN,IACC7L,EAAY/M,QACfgN,IArQQ,KAuQA5C,UAAUuD,oBAvQV,KAwQHpC,UAAS,GAAO,GAxQb,KA0QJzC,SAAU,IAEX4B,GA5QK,KA4QkBnC,KAAK/D,IA5QvB,KA6QJ8H,UAAU9H,UAhFZ+Z,IA7LM,KA6LiBxU,YA7LjB,KA6LsCI,YAAgBO,GA7LtD,KA8LJ4B,UAAU,cAoFlB7M,EAAE0iC,UAAY,SAAS3B,EAAQ1qB,EAAQ8J,GAClCrgB,IAIHC,EAAG0M,EAJA3M,EAAI,GACP+V,EAAM,KAAKirB,YAAYC,GAAqB,MAAVA,EAAiB1qB,GAAqB,MAAV0qB,IAAmB5gB,GACjFL,EAAM,EACNnf,EAAIkV,EAAItV,OAEJR,IAAAA,EAAI,EAAGA,EAAIY,EAAGZ,KAClB0M,EAAQoJ,EAAI9V,IACFgM,aACTjM,EAAEggB,KAASrT,GAGN3M,OAAAA,GAIRE,EAAE2iC,cAAgB,SAASl7B,GACrBA,GAAmB,IAATA,IACdA,EAAO,KAAKsC,OAETs3B,IAEHthC,EAFGshC,EAAS,KAAKuB,iBACjBjiC,EAAI0gC,EAAO9gC,OAEPR,IAAAA,EAAI,EAAGA,EAAIY,EAAGZ,IACdshC,GAAAA,EAAOthC,GAAG0H,KAAOA,EACb45B,OAAAA,EAAOthC,GAAG4D,KAGZ,OAAA,MAGR3D,EAAE6iC,eAAiB,SAASp7B,GACf,MAARA,IACHA,EAAO,KAAKsC,OAIN,IAFHs3B,IAAAA,EAAS,KAAKuB,iBACjB7iC,EAAIshC,EAAO9gC,SACHR,GAAK,GACTshC,GAAAA,EAAOthC,GAAG0H,KAAOA,EACb45B,OAAAA,EAAOthC,GAAG4D,KAGZ,OAAA,MAGR3D,EAAE4iC,eAAiB,WACd9iC,IAEHE,EAFGF,EAAI,GACPggB,EAAM,EAEF9f,IAAAA,KAAK,KAAKs+B,QACdx+B,EAAEggB,KAAS,CAACrY,KAAK,KAAK62B,QAAQt+B,GAAI2D,KAAK3D,GAKjCF,OAHPA,EAAEgjC,KAAK,SAAShjC,EAAEY,GACVZ,OAAAA,EAAE2H,KAAO/G,EAAE+G,OAEZ3H,GAGRE,EAAE6L,WAAa,WAEPwyB,OADF+D,KAAAA,SAAU,EACR/D,EAAar9B,QAAAA,UAAU6K,WAAW5K,KAAK,OAM/CjB,EAAEwN,SAAW,SAASjF,EAAO0C,GACpB,OAAClD,UAAUxH,OAAgD,KAAK+K,UAAW,KAAKzC,YAAe,KAAKmV,OAA+B,IAAP,EAAd,KAAKD,QAAqB,EAAIxV,EAAQA,GAAU,KAAKwV,QAAU,KAAKhV,UAAY,KAAKmV,cAAgBjT,GAA7L,KAAKlB,MAAQ,KAAKlB,YAAe,GAGhE7I,EAAEyN,cAAgB,SAASlF,EAAO0C,GACzB,OAAClD,UAAUxH,OAA0D,KAAK+K,UAAW,KAAKI,gBAAkBnD,EAAO0C,GAA7F,KAAKX,WAAa,KAAKoB,iBAAoB,GAG1E1L,EAAE0L,cAAgB,SAASnD,GACtB,OAACR,UAAUxH,QAQW,IAAlB,KAAK0d,SAAmB1V,EAAgB,KAAKuF,UAAW,KAAKpC,gBAAkBnD,GAA9C,MAPpC,KAAK2B,SACKlJ,EAAAA,QAAAA,UAAU0K,cAAczK,KAAK,MAErC+H,KAAAA,gBAAoC,IAAlB,KAAKiV,QAAkB,aAAe,KAAKlV,WAAa,KAAKkV,QAAU,GAAM,KAAKC,aAAe,KAAKD,SAEvH,KAAKjV,iBAKdhJ,EAAEyH,KAAO,SAASc,EAAO0C,GACpB,IAAClD,UAAUxH,OACP,OAAA,KAAKwJ,MAET,KAAKG,QACHwB,KAAAA,gBAEF7C,IAAAA,EAAW,KAAKE,UACnBwT,EAAQ,KAAKwB,OACb+C,EAAWvE,GAAS1T,EAAW,KAAKqV,cAI9B,OAHH3V,EAAQM,IACXN,EAAQM,GAEF,KAAKyC,UAAW,KAAK0S,OAAkB,EAARzB,EAAc1T,EAAWN,EAAQuY,EAAW,KAAK7C,QAAU1V,EAAQuY,EAAWvY,EAAO0C,IAG5HjL,EAAEqV,OAAS,SAAS9M,GACf,OAACR,UAAUxH,QAGV0d,KAAAA,QAAU1V,EACR,KAAKgE,UAAS,IAHb,KAAK0R,SAMdje,EAAEsV,YAAc,SAAS/M,GACpB,OAACR,UAAUxH,QAGV2d,KAAAA,aAAe3V,EACb,KAAKgE,UAAS,IAHb,KAAK2R,cAMdle,EAAEoV,KAAO,SAAS7M,GACb,OAACR,UAAUxH,QAGVyd,KAAAA,MAAQzV,EACN,MAHC,KAAKyV,OAMdhe,EAAE+iC,aAAe,SAASx6B,GACrB,OAACR,UAAUxH,OAGR,KAAK2K,KAAK3C,GAAO,GAFhB,KAAKs6B,eAAe,KAAK94B,MAretB,OA0eL23B,IAEL,GAEG,IAAIA,EAAcp/B,EAAQo/B,QAAAA,YAA1B,QAAA,QAAA,QAAA,YAAA;;ACwDL,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,QAAA,QAAA,QAAA,kBAAA,EApjBF,IAAA,EAAA,QAAA,kBAEM1d,EAAW,IAAMhc,KAAK+b,GACzBif,EAAM,GACNC,EAAM,GACNC,EAAM,GACNC,EAAY,GACZxjC,EAAWT,EAASkD,SAAAA,UAAUE,QAC9B8gC,EAAU,SAAStjC,EAAGY,EAAG6E,EAAG4X,GACvB5X,IAAM4X,IACT5X,EAAI4X,GAAKA,EAAIzc,GAAK,KAEfZ,IAAMY,IACTA,EAAIZ,GAAKyF,EAAIzF,GAAK,KAEdA,KAAAA,EAAIA,EACJY,KAAAA,EAAIA,EACJ6E,KAAAA,EAAIA,EACJ4X,KAAAA,EAAIA,EACJkmB,KAAAA,GAAKlmB,EAAIrd,EACTwjC,KAAAA,GAAK/9B,EAAIzF,EACT+uB,KAAAA,GAAKnuB,EAAIZ,GAEfyjC,EAAa,wKACbC,EAAmB,SAAS1jC,EAAGY,EAAG6E,EAAG4X,GAChCsmB,IAAAA,EAAK,CAAC3jC,EAAEA,GACX4jC,EAAK,GACLC,EAAK,GACLC,EAAK,CAACr+B,EAAE4X,GACR0mB,GAAO/jC,EAAIY,GAAK,EAChBojC,GAAOpjC,EAAI6E,GAAK,EAChBw+B,GAAOx+B,EAAI4X,GAAK,EAChB6mB,GAAQH,EAAMC,GAAO,EACrBG,GAAQH,EAAMC,GAAO,EACrBG,GAAMD,EAAOD,GAAQ,EAQf,OAPPP,EAAG/iC,EAAImjC,GAAO/jC,EAAI+jC,GAAO,EACzBH,EAAGhjC,EAAIsjC,EAAOE,EACdT,EAAGl+B,EAAIm+B,EAAG5jC,GAAK2jC,EAAG/iC,EAAIgjC,EAAGhjC,GAAK,EAC9BgjC,EAAGn+B,EAAIo+B,EAAG7jC,GAAKkkC,EAAOC,GAAQ,EAC9BN,EAAGjjC,EAAIujC,EAAOC,EACdN,EAAGljC,EAAIqjC,GAAO5mB,EAAI4mB,GAAO,EACzBJ,EAAGp+B,EAAIq+B,EAAG9jC,GAAK6jC,EAAGjjC,EAAIkjC,EAAGljC,GAAK,EACvB,CAAC+iC,EAAIC,EAAIC,EAAIC,IAErBO,EAA0B,SAASrkC,EAAGskC,EAAWC,EAAMC,EAAOC,GACzD5jC,IAGHZ,EAAGykC,EAAIC,EAAIC,EAAIC,EAAK9Y,EAAIC,EAAI8Y,EAAIC,EAAKC,EAAIluB,EAAIC,EAAIlN,EAH9ChJ,EAAIb,EAAES,OAAS,EAClBwkC,EAAK,EACLC,EAAMllC,EAAE,GAAGA,EAEPC,IAAAA,EAAI,EAAGA,EAAIY,EAAGZ,IAElBykC,GADAG,EAAM7kC,EAAEilC,IACCjlC,EACT2kC,EAAKE,EAAIxnB,EACTunB,EAAK5kC,EAAEilC,EAAG,GAAG5nB,EAETonB,GACH3tB,EAAKosB,EAAIjjC,GAET4J,IADAkN,EAAKosB,EAAIljC,IACG6W,GAAMwtB,EAAY,KAASE,EAAQ,GAAMpB,EAAInjC,IAAM,IAG/D6kC,EAAKH,IAFL5Y,EAAK4Y,GAAMA,EAAKD,IAAOF,EAAoB,GAAZF,EAA0B,IAAPxtB,EAAWjN,EAAKiN,EAAK,OACvEkV,EAAK2Y,GAAMC,EAAKD,IAAOH,EAAoB,GAAZF,EAA0B,IAAPvtB,EAAWlN,EAAKkN,EAAK,IAC/CgV,IAAa,EAALjV,GAAUA,EAAKC,GAAO,IAAO,GAAM,KAInE+tB,EAAKH,IAFL5Y,EAAK4Y,GAAMA,EAAKD,GAAMJ,EAAY,KAClCtY,EAAK2Y,GAAMC,EAAKD,GAAML,EAAY,KACZ,EAEvBvY,GAAM+Y,EACN9Y,GAAM8Y,EAEND,EAAIp/B,EAAIs/B,EAAMhZ,EAEb8Y,EAAIjkC,EADK,IAANX,EACKilC,EAEAA,EAAML,EAAI7kC,EAAsB,IAAjB6kC,EAAIp/B,EAAIo/B,EAAI7kC,GAGpC6kC,EAAItB,GAAKoB,EAAKD,EACdG,EAAIrB,GAAKuB,EAAML,EACfG,EAAI9V,GAAKmW,EAAMR,EAEXH,GACHS,EAAKtB,EAAiBgB,EAAIQ,EAAKH,EAAKJ,GACpC3kC,EAAE2F,OAAOs/B,EAAI,EAAGD,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAAIA,EAAG,IACxCC,GAAM,GAENA,IAGDC,EAAMlZ,GAEP6Y,EAAM7kC,EAAEilC,IACJrkC,EAAIskC,EACRL,EAAIp/B,EAAIy/B,EAAsB,IAAfL,EAAIxnB,EAAI6nB,GACvBL,EAAItB,GAAKsB,EAAIxnB,EAAIwnB,EAAI7kC,EACrB6kC,EAAIrB,GAAKqB,EAAIp/B,EAAIo/B,EAAI7kC,EACrB6kC,EAAI9V,GAAKmW,EAAML,EAAI7kC,EACfukC,IACHS,EAAKtB,EAAiBmB,EAAI7kC,EAAGklC,EAAKL,EAAIp/B,EAAGo/B,EAAIxnB,GAC7Crd,EAAE2F,OAAOs/B,EAAI,EAAGD,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAAIA,EAAG,MAG1CG,EAAgB,SAASC,EAAQllC,EAAGukC,EAAWY,GAC1CrlC,IACHa,EAAGZ,EAAGykC,EAAIC,EAAIC,EAAIU,EADftlC,EAAI,GAEJqlC,GAAAA,EAGI,IADPplC,GADAmlC,EAAS,CAACC,GAASniC,OAAOkiC,IACf3kC,SACFR,GAAK,GAC0B,iBAA1BqlC,EAAMF,EAAOnlC,GAAGC,KAA0C,MAAlBolC,EAAIv0B,OAAO,KAC/Dq0B,EAAOnlC,GAAGC,GAAKmlC,EAAQnlC,GAAKkJ,OAAOk8B,EAAIv0B,OAAO,GAAKu0B,EAAIn4B,OAAO,KAK7DtM,IADJA,EAAIukC,EAAO3kC,OAAS,GACZ,EAEAT,OADPA,EAAE,GAAK,IAAIsjC,EAAQ8B,EAAO,GAAGllC,GAAI,EAAG,EAAGklC,EAAO,GAAGllC,IAC1CF,EAEHC,IAAAA,EAAI,EAAGA,EAAIY,EAAGZ,IAClBykC,EAAKU,EAAOnlC,GAAGC,GACfykC,EAAKS,EAAOnlC,EAAE,GAAGC,GACjBF,EAAEC,GAAK,IAAIqjC,EAAQoB,EAAI,EAAG,EAAGC,GACzBF,IACHG,EAAKQ,EAAOnlC,EAAE,GAAGC,GACjBgjC,EAAIjjC,IAAMijC,EAAIjjC,IAAM,IAAM0kC,EAAKD,IAAOC,EAAKD,GAC3CvB,EAAIljC,IAAMkjC,EAAIljC,IAAM,IAAM2kC,EAAKD,IAAOC,EAAKD,IAItC3kC,OADPA,EAAEC,GAAK,IAAIqjC,EAAQ8B,EAAOnlC,GAAGC,GAAI,EAAG,EAAGklC,EAAOnlC,EAAE,GAAGC,IAC5CF,GAERulC,EAAgB,SAASH,EAAQd,EAAWkB,EAAWhB,EAAOC,EAAWY,GACpEjkC,IAGHnB,EAAGC,EAAGF,EAAG8D,EAAGO,EAAGxD,EAAGyH,EAAU6S,EAHzB/Z,EAAM,GACT4V,EAAQ,GACRkE,EAAQmqB,GAAWD,EAAO,GAMtBllC,IAAAA,KAJLukC,EAAmC,iBAAfA,EAA2B,IAAIA,EAAU,IAAMhB,EAClD,MAAba,IACHA,EAAY,GAEHc,EAAO,GAChBpuB,EAAMlW,KAAKZ,GAGRklC,GAAAA,EAAO3kC,OAAS,EAAG,CAIf,IAHP0a,EAAOiqB,EAAOA,EAAO3kC,OAAS,GAC9B6H,GAAW,EACXrI,EAAI+W,EAAMvW,SACDR,GAAK,GAETiI,GADJhI,EAAI8W,EAAM/W,GACNiI,KAAK2V,IAAI3C,EAAMhb,GAAKib,EAAKjb,IAAM,IAAM,CACxCoI,GAAW,EACX,MAGEA,IACH88B,EAASA,EAAOliC,SACZmiC,GACHD,EAAOK,QAAQJ,GAEhBD,EAAOtkC,KAAKskC,EAAO,IACnBC,EAAUD,EAAOA,EAAO3kC,OAAS,IAK5B,IAFPyiC,EAAIziC,OAAS0iC,EAAI1iC,OAAS2iC,EAAI3iC,OAAS,EACvCR,EAAI+W,EAAMvW,SACDR,GAAK,GACbC,EAAI8W,EAAM/W,GACVojC,EAAUnjC,IAAwC,IAAlCukC,EAAUr3B,QAAQ,IAAIlN,EAAE,KACxCkB,EAAIlB,GAAKilC,EAAcC,EAAQllC,EAAGmjC,EAAUnjC,GAAImlC,GAG1C,IADPplC,EAAIijC,EAAIziC,SACCR,GAAK,GACbijC,EAAIjjC,GAAKiI,KAAK4V,KAAKolB,EAAIjjC,IACvBkjC,EAAIljC,GAAKiI,KAAK4V,KAAKqlB,EAAIljC,IAEpB,IAACukC,EAAO,CAEJ,IADPvkC,EAAI+W,EAAMvW,SACDR,GAAK,GACTojC,GAAAA,EAAUnjC,GAGR4D,IADLjD,GADAb,EAAIoB,EAAI4V,EAAM/W,KACRQ,OAAS,EACVqD,EAAI,EAAGA,EAAIjD,EAAGiD,IAClBO,EAAKrE,EAAE8D,EAAE,GAAGy/B,GAAKJ,EAAIr/B,GAAK9D,EAAE8D,GAAGy/B,GAAKL,EAAIp/B,IAAO,EAC/Cs/B,EAAIt/B,IAAMs/B,EAAIt/B,IAAM,GAAKO,EAAIA,EAKzB,IADPpE,EAAImjC,EAAI3iC,SACCR,GAAK,GACbmjC,EAAInjC,GAAKiI,KAAK4V,KAAKslB,EAAInjC,IAKlB,IAFPA,EAAI+W,EAAMvW,OACVqD,EAAI0hC,EAAY,EAAI,IACXvlC,GAAK,GAEbD,EAAIoB,EADJlB,EAAI8W,EAAM/W,IAEVokC,EAAwBrkC,EAAGskC,EAAWkB,EAAWhB,EAAOnB,EAAUnjC,IAC9DoI,IACHtI,EAAE2F,OAAO,EAAG7B,GACZ9D,EAAE2F,OAAO3F,EAAES,OAASqD,EAAGA,IAGlB1C,OAAAA,GAERskC,EAAmB,SAASN,EAAQxiC,EAAMyiC,GAErCjkC,IAIHpB,EAAGY,EAAG6E,EAAG4X,EAAGtb,EAAK9B,EAAG6D,EAAGjD,EAAGX,EAAG8f,EAAKslB,EAJ/BlkC,EAAM,GACTukC,EAAgB,WAFjB/iC,EAAOA,GAAQ,QAEa,EAAI,EAC/BgjC,EAAiB,SAAThjC,EACRoU,EAAQ,GAKLouB,GAHAQ,GAAQP,IACXD,EAAS,CAACC,GAASniC,OAAOkiC,IAEb,MAAVA,GAAkBA,EAAO3kC,OAASklC,EAAM,EAAW,KAAA,sBAClDzlC,IAAAA,KAAKklC,EAAO,GAChBpuB,EAAMlW,KAAKZ,GAGL,IADPD,EAAI+W,EAAMvW,SACDR,GAAK,GAAG,CAKX6D,IAHL1C,EADAlB,EAAI8W,EAAM/W,IACD8B,EAAM,GACfie,EAAM,EACNnf,EAAIukC,EAAO3kC,OACNqD,EAAI,EAAGA,EAAIjD,EAAGiD,IAClB9D,EAAgB,MAAXqlC,EAAmBD,EAAOthC,GAAG5D,GAAyC,iBAA1BolC,EAAMF,EAAOthC,GAAG5D,KAAwC,MAAlBolC,EAAIv0B,OAAO,GAAcs0B,EAAQnlC,GAAKkJ,OAAOk8B,EAAIv0B,OAAO,GAAKu0B,EAAIn4B,OAAO,IAAM/D,OAAOk8B,GACxKM,GAAU9hC,EAAI,GAAOA,EAAIjD,EAAI,IAChCkB,EAAIie,MAAUhgB,EAAI+B,EAAIie,EAAI,IAAM,GAEjCje,EAAIie,KAAShgB,EAIT8D,IAFLjD,EAAImf,EAAM2lB,EAAM,EAChB3lB,EAAM,EACDlc,EAAI,EAAGA,EAAIjD,EAAGiD,GAAK6hC,EACvB3lC,EAAI+B,EAAI+B,GACRlD,EAAImB,EAAI+B,EAAE,GACV2B,EAAI1D,EAAI+B,EAAE,GACVuZ,EAAa,IAARsoB,EAAa,EAAI5jC,EAAI+B,EAAE,GAC5B/B,EAAIie,KAASslB,EAAe,IAARK,EAAa,IAAIrC,EAAQtjC,EAAGY,EAAG6E,EAAG4X,GAAK,IAAIimB,EAAQtjC,GAAI,EAAIY,EAAIZ,GAAK,GAAI,EAAIY,EAAI6E,GAAK,EAAGA,GAE7G1D,EAAItB,OAASuf,EAEP5e,OAAAA,GAERykC,EAAmB,SAAS7lC,EAAG8lC,EAAOC,GAI9B,IAHHJ,IAEHtoB,EAAG2oB,EAAItgC,EAAG69B,EAAIC,EAAIzU,EAAI7uB,EAAGD,EAAG2e,EAAKqnB,EAAK1gC,EAFnCogC,EAAM,EAAII,EACbjiC,EAAI9D,EAAES,SAEEqD,GAAK,GAOR7D,IALLyF,GADAugC,EAAMjmC,EAAE8D,IACA9D,EACRujC,EAAK0C,EAAI5oB,EAAI3X,EACb89B,EAAKyC,EAAIxgC,EAAIC,EACbqpB,EAAKkX,EAAIrlC,EAAI8E,EACb2X,EAAI2oB,EAAK,EACJ/lC,EAAI,EAAGA,GAAK8lC,EAAY9lC,IAG5Bod,EAAI2oB,GAAMA,IAFV9lC,EAAIylC,EAAM1lC,GAEUC,EAAIqjC,EAAK,GAD7B3kB,EAAM,EAAI1e,IAC8BA,EAAIsjC,EAAK5kB,EAAMmQ,IAAO7uB,GAE9D4lC,EADAvgC,EAAQzB,EAAIiiC,EAAa9lC,EAAI,IACb6lC,EAAMvgC,IAAU,GAAK8X,EAAIA,GAI5C6oB,EAAmB,SAAS9kC,EAAK2kC,GAE5B/lC,IAOHE,EAAGD,EAAGY,EAAG0E,EAPNvF,EAAI,GACPmmC,EAAU,GACV9oB,EAAI,EACJ+oB,EAAQ,EACRr+B,GALDg+B,EAAaA,GAAc,GAAK,GAKN,EACzBM,EAAW,GACXC,EAAQ,GAEJpmC,IAAAA,KAAKkB,EACTykC,EAAiBzkC,EAAIlB,GAAIF,EAAG+lC,GAGxB9lC,IADLY,EAAIb,EAAES,OACDR,EAAI,EAAGA,EAAIY,EAAGZ,IAClBod,GAAKnV,KAAK4V,KAAK9d,EAAEC,IAEjBqmC,EADA/gC,EAAQtF,EAAI8lC,GACG1oB,EACX9X,IAAUwC,IACbq+B,GAAS/oB,EAETgpB,EADA9gC,EAAStF,EAAI8lC,GAAe,GACVO,EAClBH,EAAQ5gC,GAAS6gC,EACjB/oB,EAAI,EACJipB,EAAQ,IAGH,MAAA,CAAC7lC,OAAO2lC,EAAOD,QAAQA,EAASE,SAASA,IAKjDE,EAAennC,EAASkD,SAAAA,UAAUqW,OAAO,CACvC2C,SAAU,SACVlW,UAAW,EACXmL,QAAS,QACTqK,IAAK,EACLpb,QAAO,EAGPsC,KAAM,SAAS+C,EAAQmE,EAAM2D,GACvBgF,KAAAA,QAAU9M,EACXmE,aAAgB3H,QACnB2H,EAAO,CAACo8B,OAAOp8B,IAEXlG,KAAAA,MAAQ,GACRiY,KAAAA,KAAO,GACPyrB,KAAAA,OAAS,GACTC,KAAAA,SAAmC,MAAvBz9B,EAAK09B,eAA0B,EAAIh0B,SAAS1J,EAAK09B,eAAgB,IAC9EtB,IAIHllC,EAAGymC,EAAQ1mC,EAAG6D,EAAGuhC,EAJdD,EAASp8B,EAAKo8B,QAAU,GAC3BlqB,EAAQ,GACR0rB,EAASxB,EAAO,GAChBrX,EAAa/kB,EAAK+kB,YAAcphB,EAAM3D,KAAK69B,eAIvC3mC,IAAAA,KADA4mC,KAAAA,YAAc/Y,EAAcA,aAAsB1sB,MAAS0sB,EAAa,CAAC,CAAC,IAAI,IAAI,YAA4B,IAAfA,EAAuB,EAAI3kB,OAAO2kB,IAAe,IAAO,KAClJ6Y,EACJJ,KAAAA,OAAO1lC,KAAKZ,GAIX,IADPD,EAAI,KAAKumC,OAAO/lC,SACPR,GAAK,GACbC,EAAI,KAAKsmC,OAAOvmC,GAEX+Y,KAAAA,gBAAgBlY,KAAKZ,GAC1BymC,EAAS,KAAK7jC,MAAM5C,GAA4B,mBAAf2E,EAAO3E,GACxCgb,EAAMhb,GAAOymC,EAAkC9hC,EAAU3E,EAAEkN,QAAQ,QAAkD,mBAAjCvI,EAAO,MAAQ3E,EAAEiN,OAAO,IAAuBjN,EAAI,MAAQA,EAAEiN,OAAO,MAAjIsF,WAAW5N,EAAO3E,IACpCmlC,GAAanqB,EAAMhb,KAAOklC,EAAO,GAAGllC,KACxCmlC,EAAUnqB,GAMR,GAHC6rB,KAAAA,SAA0B,UAAd/9B,EAAKpG,MAAkC,cAAdoG,EAAKpG,MAAsC,SAAdoG,EAAKpG,KAAmB2iC,EAAcH,EAAQ7xB,MAAMvK,EAAKs7B,WAAa,EAAIt7B,EAAKs7B,WAAW,EAAsB,cAAdt7B,EAAKpG,KAAuBoG,EAAKy7B,UAAWY,GAAWK,EAAiBN,EAAQp8B,EAAKpG,KAAMsY,GAC/P8rB,KAAAA,UAAY,KAAKD,SAAS7mC,GAAGO,OAE9B,KAAKgmC,SAAU,CACdQ,IAAAA,EAAKf,EAAiB,KAAKa,SAAU,KAAKN,UACzCS,KAAAA,QAAUD,EAAGxmC,OACb0mC,KAAAA,SAAWF,EAAGd,QACdiB,KAAAA,UAAYH,EAAGZ,SACfgB,KAAAA,IAAM,KAAKC,IAAM,KAAKC,IAAM,KAAKC,IAAM,EACvCC,KAAAA,IAAM,KAAKN,SAAS,GACpBO,KAAAA,QAAU,KAAKN,UAAU,GACzBO,KAAAA,IAAM,KAAKD,QAAQ,GACnBE,KAAAA,MAAQ,EAAI,KAAKF,QAAQjnC,OAG1BstB,GAAAA,EAAa,KAAK+Y,YAMf,IALFe,KAAAA,kBAAoB,GACnB9Z,EAAW,aAAc1sB,QACzBylC,KAAAA,YAAc/Y,EAAa,CAACA,IAElC9tB,EAAI8tB,EAAWttB,SACNR,GAAK,GAAG,CACX6D,IAAAA,EAAI,EAAGA,EAAI,EAAGA,IAClB5D,EAAI6tB,EAAW9tB,GAAG6D,GACbhB,KAAAA,MAAM5C,GAA4B,mBAAf2E,EAAO3E,IAAsB2E,EAAU3E,EAAEkN,QAAQ,QAAkD,mBAAjCvI,EAAO,MAAQ3E,EAAEiN,OAAO,IAAuBjN,EAAI,MAAQA,EAAEiN,OAAO,IAE/JjN,EAAI6tB,EAAW9tB,GAAG,GACb4nC,KAAAA,kBAAkB5nC,IAAM,KAAK6C,MAAM5C,GAAK,KAAK4C,MAAM5C,GAAGiB,KAAK,KAAKwQ,SAAW,KAAKA,QAAQzR,KAAO,EAC/F8Y,KAAAA,gBAAgBlY,KAAKZ,GAIrB,OADF4nC,KAAAA,YAAcn7B,EAAM3D,KAAKuL,aAAe,EAAI,GAC1C,GAIR6F,IAAK,SAASpN,GACTq5B,IAIH0B,EAAUnpB,EAAK3e,EAAGC,EAAGU,EAAGuD,EAAGkN,EAAKxQ,EAAGslC,EAAS6B,EAAQC,EAJjD5B,EAAW,KAAKW,UACnBvlC,EAAO,KAAKqB,MACZ+B,EAAS,KAAK8M,QACdu2B,EAAYl7B,IAAM,KAAK86B,YAEpB,GAAC,KAAKrB,SAGH,CAMFwB,GALJ9B,EAAU,KAAKgB,SACfa,EAAS,KAAKN,QACdO,EAAKj7B,EAAI,KAAKk6B,QACdjnC,EAAI,KAAKqnC,IAELW,EAAK,KAAKR,KAAOxnC,EAAIomC,EAAW,EAAG,CAE/BpmC,IADPY,EAAIwlC,EAAW,EACRpmC,EAAIY,IAAM,KAAK4mC,IAAMtB,IAAUlmC,KAAOgoC,IACxCZ,KAAAA,IAAMlB,EAAQlmC,EAAE,GAChBqnC,KAAAA,IAAMrnC,EACNynC,KAAAA,QAAUM,EAAS,KAAKZ,UAAUnnC,GAClC0nC,KAAAA,IAAMK,EAAQ,KAAKT,IAAM,KAAKC,IAAM,QACnC,GAAIS,EAAK,KAAKZ,KAAOpnC,EAAI,EAAG,CAC3BA,KAAAA,EAAI,IAAM,KAAKonC,IAAMlB,IAAUlmC,KAAOgoC,IACnC,IAANhoC,GAAWgoC,EAAK,KAAKZ,IACnBA,KAAAA,IAAM,EAEXpnC,IAEIwnC,KAAAA,IAAMtB,EAAQlmC,GACdqnC,KAAAA,IAAMrnC,EACNynC,KAAAA,QAAUM,EAAS,KAAKZ,UAAUnnC,GAClCsnC,KAAAA,IAAMS,GAAQ,KAAKR,IAAMQ,EAAOvnC,OAAS,GAAK,IAAM,EACpDknC,KAAAA,IAAMK,EAAO,KAAKR,KAMpBS,GAJJF,EAAW9nC,EAEXgoC,GAAM,KAAKZ,IACXpnC,EAAI,KAAKunC,IACLS,EAAK,KAAKN,KAAO1nC,EAAI+nC,EAAOvnC,OAAS,EAAG,CAEpCR,IADPY,EAAImnC,EAAOvnC,OAAS,EACbR,EAAIY,IAAM,KAAK8mC,IAAMK,IAAS/nC,KAAOgoC,IACvCV,KAAAA,IAAMS,EAAO/nC,EAAE,GACfunC,KAAAA,IAAMvnC,OACL,GAAIgoC,EAAK,KAAKV,KAAOtnC,EAAI,EAAG,CAC3BA,KAAAA,EAAI,IAAM,KAAKsnC,IAAMS,IAAS/nC,KAAOgoC,IAClC,IAANhoC,GAAWgoC,EAAK,KAAKV,IACnBA,KAAAA,IAAM,EAEXtnC,IAEI0nC,KAAAA,IAAMK,EAAO/nC,GACbunC,KAAAA,IAAMvnC,EAEZkE,EAAW,IAAN6I,EAAW,GAAM/M,GAAKgoC,EAAK,KAAKV,MAAQ,KAAKI,IAAM,KAAKJ,MAAQ,KAAKK,OAAU,OA9CpFzjC,GAAK6I,GADL+6B,EAAY/6B,EAAI,EAAK,EAAKA,GAAK,EAAKq5B,EAAW,EAAKA,EAAWr5B,GAAM,IAC/C,EAAIq5B,IAAcA,EAmDlC,IAHPznB,EAAM,EAAIza,EAEVlE,EAAI,KAAKumC,OAAO/lC,SACPR,GAAK,GACbC,EAAI,KAAKsmC,OAAOvmC,GAEhBoR,GAAOlN,EAAIA,GADXvD,EAAI,KAAKmmC,SAAS7mC,GAAG6nC,IACJxE,GAAK,EAAI3kB,GAAOza,EAAIvD,EAAE4iC,GAAK5kB,EAAMhe,EAAEmuB,KAAO5qB,EAAIvD,EAAEZ,EAC7D,KAAK+a,KAAK7a,KACbmR,EAAM,KAAK0J,KAAK7a,GAAGmR,EAAKxM,IAErBpD,EAAKvB,GACR2E,EAAO3E,GAAGmR,GAEVxM,EAAO3E,GAAKmR,EAIV,GAAA,KAAKy1B,YAAa,CACjBqB,IACHC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIx+B,EAAKy+B,EADtBN,EAAK,KAAKrB,YAGP,IADP7mC,EAAIkoC,EAAG1nC,SACER,GAAK,GACbC,EAAIioC,EAAGloC,GAAG,GACV+J,EAAMm+B,EAAGloC,GAAG,IAAM,EAClBwoC,GAAqB,IAAbN,EAAGloC,GAAG,GAAe,EAAIikB,EACjCtjB,EAAI,KAAKmmC,SAASoB,EAAGloC,GAAG,IACxBmoC,EAAK,KAAKrB,SAASoB,EAAGloC,GAAG,IAErBW,GAAKwnC,IACRxnC,EAAIA,EAAEmnC,GACNK,EAAKA,EAAGL,GAERM,EAAKznC,EAAEZ,GAAKY,EAAEA,EAAIA,EAAEZ,GAAKmE,EAEzBkkC,KADAE,EAAK3nC,EAAEA,GAAKA,EAAE6E,EAAI7E,EAAEA,GAAKuD,GACbkkC,GAAMlkC,EAClBokC,IAAQ3nC,EAAE6E,GAAK7E,EAAEyc,EAAIzc,EAAE6E,GAAKtB,EAAKokC,GAAMpkC,EAEvCmkC,EAAKF,EAAGpoC,GAAKooC,EAAGxnC,EAAIwnC,EAAGpoC,GAAKmE,EAE5BmkC,KADAE,EAAKJ,EAAGxnC,GAAKwnC,EAAG3iC,EAAI2iC,EAAGxnC,GAAKuD,GAChBmkC,GAAMnkC,EAClBqkC,IAAQJ,EAAG3iC,GAAK2iC,EAAG/qB,EAAI+qB,EAAG3iC,GAAKtB,EAAKqkC,GAAMrkC,EAE1CkN,EAAM62B,EAAWhgC,KAAKyuB,MAAM6R,EAAKF,EAAIC,EAAKF,GAAMI,EAAOz+B,EAAM,KAAK69B,kBAAkB5nC,GAEhF,KAAK8a,KAAK7a,KACbmR,EAAM,KAAK0J,KAAK7a,GAAGmR,EAAKxM,IAGrBpD,EAAKvB,GACR2E,EAAO3E,GAAGmR,GAEVxM,EAAO3E,GAAKmR,OAOnBnR,EAAIqmC,EAAarlC,UA4ElB,QAAA,QAAA,QAAA,aAAA,EAzEAqlC,EAAahB,cAAgBA,EAC7BgB,EAAa7C,iBAAmBA,EAChC6C,EAAa1tB,UAAW,EACxB0tB,EAAamC,iBAAmB,SAAS1oC,EAAGY,EAAG6E,GACvC,OAAA,IAAI69B,EAAQtjC,GAAI,EAAIY,EAAIZ,GAAK,GAAI,EAAIY,EAAI6E,GAAK,EAAGA,IAGzD8gC,EAAa3V,aAAe,WACvB1P,IAAAA,EAAYrhB,EAASqhB,UACrB,GAACA,EAAD,CAGAxN,IAAAA,EAAawN,EAAUxN,WAC1Bya,EAAgBza,EAAWya,cAC3BP,EAAkBla,EAAWka,gBAC7BM,EAAexa,EAAWwa,aAC3Bxa,EAAW6c,4BAA4B,SAAU,CAACH,OAAO,SAASjsB,EAAGP,EAAGmP,EAAM2a,EAAMtc,EAAIuH,GACnF/U,aAAavC,QAChBuC,EAAI,CAACwhC,OAAOxhC,IAEb+U,EAAS,IAAI4tB,EACTnB,IAIHnlC,EAAGC,EAAGuJ,EAJH27B,EAASxhC,EAAEwhC,OACdvkC,EAAIukC,EAAO3kC,OAAS,EACpBkoC,EAAe,GACf37B,EAAI,GAEDnM,GAAAA,EAAI,EACAuQ,OAAAA,EAEHnR,IAAAA,EAAI,EAAGA,GAAKY,EAAGZ,IACnBwJ,EAAO0kB,EAAchqB,EAAGihC,EAAOnlC,GAAIytB,EAAMtc,EAAIuH,EAAS9X,IAAMZ,GAC5D0oC,EAAa1oC,GAAKwJ,EAAK8H,IAEnBrR,IAAAA,KAAK0D,EACToJ,EAAE9M,GAAK0D,EAAE1D,GAuBHkR,OArBPpE,EAAEo4B,OAASuD,GACXv3B,EAAK,IAAI8c,EAAa/pB,EAAG,SAAU,EAAG,EAAGsF,EAAK2H,GAAI,IAC/C3H,KAAOA,EACV2H,EAAGuH,OAASA,EACZvH,EAAGwB,SAAWgb,EACO,IAAjB5gB,EAAE+gB,aACL/gB,EAAE+gB,YAAa,IAEZ/gB,EAAE+gB,YAAgB/gB,EAAE+gB,sBAAsB1sB,QAC7CpB,GAAsB,IAAjB+M,EAAE+gB,WAAuB,EAAI3kB,OAAO4D,EAAE+gB,YAC3C/gB,EAAE+gB,WAA+B,MAAjBtkB,EAAK8H,IAAIqM,KAAgB,CAAC,CAAC,OAAO,MAAM,WAAW3d,GAAE,IAAyB,MAAdwJ,EAAK8H,IAAI4L,GAAa,CAAC,CAAC,IAAI,IAAI,WAAWld,GAAE,KAE1H+M,EAAE+gB,aACAL,EAAKc,YACTd,EAAKsP,mBAAkB,GAExBvzB,EAAKskB,WAAaL,EAAK/b,QAAQ0hB,aAC/B5pB,EAAKqkB,MAAMhG,SAAWre,EAAKskB,WAAWjG,UAAY,EAClD4F,EAAK1U,gBAAgBlY,KAAK,aAE3B6X,EAAOG,aAAarP,EAAKqkB,MAAO9gB,EAAG0gB,EAAKhc,QACjCN,OAITlR,EAAE6a,KAAO,SAASD,GAIV,IAHH9C,IAEH3G,EAFG2G,EAAK,KAAKgB,gBACb/Y,EAAI+X,EAAGvX,SAECR,GAAK,IACboR,EAAMyJ,EAAO9C,EAAG/X,MACW,mBAAToR,IACZ0J,KAAAA,KAAK/C,EAAG/X,IAAMoR,IAKtBnR,EAAEqM,MAAQ,SAASuO,GACd9a,IACHE,EAAGD,EADAD,EAAI,KAAKwmC,OAERtmC,IAAAA,KAAK,KAAK6mC,SACV7mC,GAAAA,KAAK4a,EAID,WAHA,KAAKisB,SAAS7mC,UACd,KAAK4C,MAAM5C,GAClBD,EAAID,EAAES,SACGR,GAAK,GACTD,EAAEC,KAAOC,GACZF,EAAE2F,OAAO1F,EAAG,GAMZD,GADJA,EAAI,KAAK8mC,YAGD,IADP7mC,EAAID,EAAES,SACGR,GAAK,GACT6a,EAAO9a,EAAEC,GAAG,KACfD,EAAE2F,OAAO1F,EAAG,GAIR,OAAA,KAAK0a,OAAOpO,MAAMpL,KAAK,KAAM2Z;;ACnOhC,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,QAAA,cAAA,QAAA,KAAA,QAAA,KAAA,QAAA,KAAA,QAAA,YAAA,QAAA,OAAA,QAAA,UAAA,QAAA,OAAA,QAAA,QAAA,QAAA,UAAA,EAxWP,IAAA,EAAA,QAAA,kBAEA1b,EAASkD,SAAAA,UAAU,cAAe,CAAC,eAAgB,WAE7C40B,IA4EH0R,EAAaC,EAAeC,EAAWC,EA5EpC7R,EAAK93B,EAASU,SAAAA,kBAAoBV,EAAtC,SACCsB,EAAKw2B,EAAEnb,IAAIC,UACXgtB,EAAiB,EAAV9gC,KAAK+b,GACZglB,EAAW/gC,KAAK+b,GAAK,EACrB1hB,EAAS7B,EAAG6B,OACZ2mC,EAAU,SAASlnC,EAAGuG,GACjB4gC,IAAAA,EAAI5mC,EAAO,UAAYP,EAAG,cAAc,GAC3C9B,EAAIipC,EAAEjoC,UAAY,IAAIwB,EAAJ,KAGZymC,OAFPjpC,EAAE2I,YAAcsgC,EAChBjpC,EAAE+D,SAAWsE,EACN4gC,GAER9lC,EAAWX,EAAKY,KAAAA,UAAY,aAC5B8lC,EAAQ,SAASvlC,EAAMwlC,EAASC,EAAQC,EAAWC,GAC9CL,IAAAA,EAAI5mC,EAAO,UAAUsB,EAAM,CAC9B4lC,QAAQ,IAAIJ,EACZ7kC,OAAO,IAAI8kC,EACX3kC,UAAU,IAAI4kC,IACZ,GAEIJ,OADP9lC,EAAS8lC,EAAGtlC,GACLslC,GAERO,EAAY,SAAS/hC,EAAMc,EAAOuG,GAC5B7K,KAAAA,EAAIwD,EACJqF,KAAAA,EAAIvE,EACLuG,IACEA,KAAAA,KAAOA,EACZA,EAAKkuB,KAAO,KACPz3B,KAAAA,EAAIuJ,EAAKhC,EAAIvE,EACbkhC,KAAAA,IAAM36B,EAAK7K,EAAIwD,IAKtBiiC,EAAc,SAAS5nC,EAAGuG,GACrB4gC,IAAAA,EAAI5mC,EAAO,UAAYP,EAAG,SAAS6nC,GAChCC,KAAAA,IAAOD,GAA2B,IAAdA,EAAmBA,EAAY,QACnDE,KAAAA,IAAiB,MAAX,KAAKD,MACd,GACH5pC,EAAIipC,EAAEjoC,UAAY,IAAIwB,EAAJ,KAMZymC,OALPjpC,EAAE2I,YAAcsgC,EAChBjpC,EAAE+D,SAAWsE,EACbrI,EAAEkY,OAAS,SAASyxB,GACZ,OAAA,IAAIV,EAAEU,IAEPV,GAGRa,EAAOZ,EAAM,OACZQ,EAAY,UAAW,SAAS1pC,GACvB,OAACA,GAAQ,GAAKA,IAAM,KAAK4pC,IAAM,GAAK5pC,EAAI,KAAK4pC,KAAO,IAE7DF,EAAY,SAAU,SAAS1pC,GACvBA,OAAAA,EAAIA,IAAM,KAAK4pC,IAAM,GAAK5pC,EAAI,KAAK4pC,OAE3CF,EAAY,YAAa,SAAS1pC,GACzB,OAACA,GAAK,GAAK,EAAK,GAAMA,EAAIA,IAAM,KAAK6pC,IAAM,GAAK7pC,EAAI,KAAK6pC,KAAO,KAAQ7pC,GAAK,GAAKA,IAAM,KAAK6pC,IAAM,GAAK7pC,EAAI,KAAK6pC,KAAO,MAMlIE,EAAS1nC,EAAO,gBAAiB,SAAS2nC,EAAarnC,EAAOsnC,GAC7DtnC,EAASA,GAAmB,IAAVA,EAAeA,EAAQ,GACtB,MAAfqnC,EACHA,EAAc,GACJA,EAAc,IACxBA,EAAc,GAEVE,KAAAA,GAAsB,IAAhBF,EAAqBrnC,EAAQ,EACnCinC,KAAAA,KAAO,EAAII,GAAe,EAC1BH,KAAAA,IAAMG,EACNG,KAAAA,IAAM,KAAKP,IAAM,KAAKC,IACtB7lC,KAAAA,UAAyB,IAAbimC,IACf,GACHjqC,EAAI+pC,EAAO/oC,UAAY,IAAIwB,EAAJ,KA4QjBsnC,OAzQP9pC,EAAE2I,YAAcohC,EAChB/pC,EAAE+D,SAAW,SAAS/D,GACjBmE,IAAAA,EAAInE,GAAK,GAAMA,GAAK,KAAKkqC,GACzBlqC,OAAAA,EAAI,KAAK4pC,IACL,KAAK5lC,SAAW,GAAMhE,EAAI,EAAKA,EAAI,KAAK4pC,KAAQ5pC,EAAKmE,GAAMnE,EAAI,EAAKA,EAAI,KAAK4pC,KAAQ5pC,EAAIA,EAAIA,EAAImE,EAC9FnE,EAAI,KAAKmqC,IACZ,KAAKnmC,SAAkB,IAANhE,EAAU,EAAI,GAAKA,GAAKA,EAAI,KAAKmqC,KAAO,KAAKP,KAAO5pC,EAAKmE,GAAMnE,EAAImE,IAAMnE,GAAKA,EAAI,KAAKmqC,KAAO,KAAKP,KAAO5pC,EAAIA,EAAIA,EAEpI,KAAKgE,SAAW,EAAIG,GAE5B4lC,EAAO1mC,KAAO,IAAI0mC,EAAO,GAAK,IAE9B/pC,EAAEkY,OAAS6xB,EAAO7xB,OAAS,SAAS8xB,EAAarnC,EAAOsnC,GAChD,OAAA,IAAIF,EAAOC,EAAarnC,EAAOsnC,KAWvCjqC,GANA0oC,EAAcrmC,EAAO,qBAAsB,SAASujC,EAAOwE,GACzDxE,EAAQA,GAAS,EACZgE,KAAAA,IAAM,EAAIhE,EACViE,KAAAA,IAAMjE,GAASwE,EAAiB,EAAI,GACpCD,KAAAA,IAAMC,EAAiB,EAAI,IAC9B,IACYppC,UAAY,IAAIwB,EAAJ,MAC1BmG,YAAc+/B,EAChB1oC,EAAE+D,SAAW,SAAS/D,GAMd,OALHA,EAAI,EACPA,EAAI,EACMA,GAAK,IACfA,EAAI,cAEK,KAAK6pC,IAAM7pC,EAAK,GAAK,KAAKmqC,KAAO,KAAKP,KAEjD5pC,EAAEkY,OAASwwB,EAAYxwB,OAAS,SAAS0tB,EAAOwE,GACxC,OAAA,IAAI1B,EAAY9C,EAAOwE,KAW/BpqC,GANA2oC,EAAgBtmC,EAAO,uBAAwB,SAASiP,EAAOD,EAAKhO,GAC9DumC,KAAAA,IAAM5hC,KAAK2T,IAAItK,EAAMC,GACrBu4B,KAAAA,IAAMx4B,EAAMC,EACZ64B,KAAAA,IAAM74B,EACNf,KAAAA,MAAQlN,IACX,IACerC,UAAY,IAAIwB,EAAJ,MAC5BmG,YAAcggC,EAChB3oC,EAAE+D,SAAW,SAAS/D,GAId,OAHH,KAAKuQ,QACRvQ,EAAI,KAAKuQ,MAAMxM,SAAS/D,KAEjB,KAAKmqC,IAAMniC,KAAKqiC,IAAI,KAAKT,IAAM5pC,GAAK,KAAKmqC,KAAO,KAAKN,KAE9D7pC,EAAEkY,OAASywB,EAAczwB,OAAS,SAAS5G,EAAOD,EAAKhO,GAC/C,OAAA,IAAIslC,EAAcr3B,EAAOD,EAAKhO,KA+DtCrD,GA1DA4oC,EAAYvmC,EAAO,mBAAoB,SAASyG,GAYxC,IAVHwhC,IASHrtB,EAAGC,EAAGqtB,EAAMrV,EAAMh0B,EAAKspC,EATpBF,GADJxhC,EAAOA,GAAQ,IACEwhC,OAAS,OACzBxqC,EAAI,GACJggB,EAAM,EACN2qB,EAA+B,GAArB3hC,EAAK2hC,QAAU,IACzB1qC,EAAI0qC,EACJC,GAAgC,IAAnB5hC,EAAK4hC,UAClBC,GAAwB,IAAf7hC,EAAK6hC,MACdC,EAAY9hC,EAAK8hC,oBAAoBpoC,EAA1B,KAAkCsG,EAAK8hC,SAAW,KAC7DC,EAAsC,iBAAnB/hC,EAAK+hC,SAA0C,GAAhB/hC,EAAK+hC,SAAiB,KAEhE9qC,GAAK,GACbkd,EAAIytB,EAAY1iC,KAAK8iC,SAAY,EAAIL,EAAU1qC,EAC/Cmd,EAAI0tB,EAAWA,EAAS7mC,SAASkZ,GAAKA,EAErCstB,EADa,SAAVD,EACIO,EACa,QAAVP,GACVpV,EAAO,EAAIjY,GACGiY,EAAO2V,EACD,OAAVP,EACHrtB,EAAIA,EAAI4tB,EACL5tB,EAAI,IACdiY,EAAW,EAAJjY,GACOiY,EAAO,GAAM2V,GAE3B3V,EAAiB,GAAT,EAAIjY,IACEiY,EAAO,GAAM2V,EAExBH,EACHxtB,GAAMlV,KAAK8iC,SAAWP,EAAgB,GAAPA,EACrBxqC,EAAI,EACdmd,GAAY,GAAPqtB,EAELrtB,GAAY,GAAPqtB,EAEFI,IACCztB,EAAI,EACPA,EAAI,EACMA,EAAI,IACdA,EAAI,IAGNpd,EAAEggB,KAAS,CAAC7C,EAAEA,EAAGC,EAAEA,GAQb,IANPpd,EAAEgjC,KAAK,SAAShjC,EAAGY,GACXZ,OAAAA,EAAEmd,EAAIvc,EAAEuc,IAGhButB,EAAM,IAAIhB,EAAU,EAAG,EAAG,MAC1BzpC,EAAI0qC,IACK1qC,GAAK,GACbmB,EAAMpB,EAAEC,GACRyqC,EAAM,IAAIhB,EAAUtoC,EAAI+b,EAAG/b,EAAIgc,EAAGstB,GAG9B57B,KAAAA,MAAQ,IAAI46B,EAAU,EAAG,EAAc,IAAVgB,EAAIvmC,EAAWumC,EAAMA,EAAI17B,QACzD,IACW9N,UAAY,IAAIwB,EAAJ,MACxBmG,YAAcigC,EAChB5oC,EAAE+D,SAAW,SAAS/D,GACjBwqC,IAAAA,EAAM,KAAK57B,MACX5O,GAAAA,EAAIwqC,EAAIvmC,EAAG,CACPumC,KAAAA,EAAI17B,MAAQ9O,GAAKwqC,EAAIvmC,GAC3BumC,EAAMA,EAAI17B,KAEX07B,EAAMA,EAAIxN,UAEHwN,KAAAA,EAAIxN,MAAQh9B,GAAKwqC,EAAIvmC,GAC3BumC,EAAMA,EAAIxN,KAIJwN,OADH57B,KAAAA,MAAQ47B,EACLA,EAAI19B,GAAM9M,EAAIwqC,EAAIvmC,GAAKumC,EAAIf,IAAOe,EAAIjlC,GAE/CvF,EAAEkY,OAAS,SAASpP,GACZ,OAAA,IAAI8/B,EAAU9/B,IAEtB8/B,EAAUvlC,KAAO,IAAIulC,EAIrBM,EAAM,SACLF,EAAQ,YAAa,SAAShpC,GACzBA,OAAAA,EAAI,EAAI,KACJ,OAASA,EAAIA,EACVA,EAAI,EAAI,KACX,QAAUA,GAAK,IAAM,MAAQA,EAAI,IAC9BA,EAAI,IAAM,KACb,QAAUA,GAAK,KAAO,MAAQA,EAAI,MAEnC,QAAUA,GAAK,MAAQ,MAAQA,EAAI,UAE3CgpC,EAAQ,WAAY,SAAShpC,GACxB,OAACA,EAAI,EAAIA,GAAK,EAAI,KACd,EAAK,OAASA,EAAIA,EACfA,EAAI,EAAI,KACX,GAAK,QAAUA,GAAK,IAAM,MAAQA,EAAI,KACnCA,EAAI,IAAM,KACb,GAAK,QAAUA,GAAK,KAAO,MAAQA,EAAI,OAExC,GAAK,QAAUA,GAAK,MAAQ,MAAQA,EAAI,WAEhDgpC,EAAQ,cAAe,SAAShpC,GAC3B+qC,IAAAA,EAAU/qC,EAAI,GAeX+qC,OAbN/qC,EADG+qC,EACC,EAAS,EAAJ/qC,EAEA,EAAJA,EAAS,GAEP,EAAI,KACXA,GAAI,OAASA,EAEbA,EADUA,EAAI,EAAI,KACd,QAAUA,GAAK,IAAM,MAAQA,EAAI,IAC3BA,EAAI,IAAM,KAChB,QAAUA,GAAK,KAAO,MAAQA,EAAI,MAElC,QAAUA,GAAK,MAAQ,MAAQA,EAAI,QAEjC+qC,EAAmB,IAAT,EAAI/qC,GAAe,GAAJA,EAAU,MAM5CkpC,EAAM,OACLF,EAAQ,UAAW,SAAShpC,GACpBgI,OAAAA,KAAK4V,KAAK,GAAK5d,GAAQ,GAAKA,KAEpCgpC,EAAQ,SAAU,SAAShpC,GACnB,QAAEgI,KAAK4V,KAAK,EAAK5d,EAAIA,GAAM,KAEnCgpC,EAAQ,YAAa,SAAShpC,GACrB,OAACA,GAAG,GAAK,GAAM,IAAOgI,KAAK4V,KAAK,EAAI5d,EAAIA,GAAK,GAAK,IAAOgI,KAAK4V,KAAK,GAAK5d,GAAK,GAAKA,GAAK,MAqBjGkpC,EAAM,WAfNL,EAAiB,SAAS/mC,EAAGuG,EAAG2iC,GAC3B/B,IAAAA,EAAI5mC,EAAO,UAAYP,EAAG,SAASmpC,EAAWC,GAC3CtB,KAAAA,IAAOqB,GAAa,EAAKA,EAAY,EACrCpB,KAAAA,KAAOqB,GAAUF,IAAQC,EAAY,EAAIA,EAAY,GACrDd,KAAAA,IAAM,KAAKN,IAAMf,GAAQ9gC,KAAKmjC,KAAK,EAAI,KAAKvB,MAAQ,GACpDC,KAAAA,IAAMf,EAAO,KAAKe,MACrB,GACH7pC,EAAIipC,EAAEjoC,UAAY,IAAIwB,EAAJ,KAMZymC,OALPjpC,EAAE2I,YAAcsgC,EAChBjpC,EAAE+D,SAAWsE,EACbrI,EAAEkY,OAAS,SAAS+yB,EAAWC,GACvB,OAAA,IAAIjC,EAAEgC,EAAWC,IAElBjC,IAGQ,aAAc,SAASjpC,GAC9B,OAAA,KAAK4pC,IAAM5hC,KAAKuR,IAAI,GAAI,GAAKvZ,GAAKgI,KAAKytB,KAAMz1B,EAAI,KAAKmqC,KAAO,KAAKN,KAAQ,GAC/E,IACHhB,EAAe,YAAa,SAAS7oC,GAC7B,OAAE,KAAK4pC,IAAM5hC,KAAKuR,IAAI,EAAG,IAAMvZ,GAAK,IAAMgI,KAAKytB,KAAMz1B,EAAI,KAAKmqC,KAAO,KAAKN,MAC/E,IACHhB,EAAe,eAAgB,SAAS7oC,GAC/B,OAACA,GAAK,GAAK,EAAa,KAAK4pC,IAAM5hC,KAAKuR,IAAI,EAAG,IAAMvZ,GAAK,IAAMgI,KAAKytB,KAAMz1B,EAAI,KAAKmqC,KAAO,KAAKN,MAA/E,GAAuF,KAAKD,IAAM5hC,KAAKuR,IAAI,GAAI,IAAKvZ,GAAK,IAAMgI,KAAKytB,KAAMz1B,EAAI,KAAKmqC,KAAO,KAAKN,KAAQ,GAAM,GACpM,MAKJX,EAAM,OACLF,EAAQ,UAAW,SAAShpC,GACpB,OAAA,EAAIgI,KAAKuR,IAAI,GAAI,GAAKvZ,KAE9BgpC,EAAQ,SAAU,SAAShpC,GACnBgI,OAAAA,KAAKuR,IAAI,EAAG,IAAMvZ,EAAI,IAAM,OAEpCgpC,EAAQ,YAAa,SAAShpC,GACrB,OAACA,GAAK,GAAK,EAAK,GAAMgI,KAAKuR,IAAI,EAAG,IAAMvZ,EAAI,IAAM,IAAO,EAAIgI,KAAKuR,IAAI,GAAI,IAAMvZ,EAAI,QAM9FkpC,EAAM,OACLF,EAAQ,UAAW,SAAShpC,GACpBgI,OAAAA,KAAKytB,IAAIz1B,EAAI+oC,KAErBC,EAAQ,SAAU,SAAShpC,GACnB,OAA0B,EAAzBgI,KAAKwtB,IAAIx1B,EAAI+oC,KAEtBC,EAAQ,YAAa,SAAShpC,GACtB,OAAC,IAAOgI,KAAKwtB,IAAIxtB,KAAK+b,GAAK/jB,GAAK,MAIzCqC,EAAO,oBAAqB,CAC1B+oC,KAAK,SAAS5lC,GACNhD,OAAAA,EAAKU,KAAAA,IAAIsC,MAEf,GAGJrC,EAAS6zB,EAAE+S,OAAQ,SAAU,SAC7B5mC,EAASylC,EAAW,YAAa,SACjCzlC,EAASulC,EAAa,cAAe,SAE9BoB,IAEL,GAEG,IAAIA,EAAOxnC,EAAQwnC,QAAAA,KASnB,QAAA,KAAA,EARA,IAAIuB,EAAU/oC,EAAQ+oC,QAAAA,QAQtB,QAAA,QAAA,EAPA,IAAIC,EAAShpC,EAAQgpC,QAAAA,OAOrB,QAAA,OAAA,EANA,IAAI1C,EAAYtmC,EAAQsmC,QAAAA,UAMxB,QAAA,UAAA,EALA,IAAImB,EAASznC,EAAQynC,QAAAA,OAKrB,QAAA,OAAA,EAJA,IAAIrB,EAAcpmC,EAAQomC,QAAAA,YAI1B,QAAA,YAAA,EAHA,IAAI6C,EAAOjpC,EAAQipC,QAAAA,KAGnB,QAAA,KAAA,EAFA,IAAIC,EAAOlpC,EAAQkpC,QAAAA,KAEnB,QAAA,KAAA,EADA,IAAIC,EAAOnpC,EAAQmpC,QAAAA,KACnB,QAAA,KAAA,EAAA,IAAI9C,EAAgBrmC,EAAQqmC,QAAAA,cAA5B,QAAA,cAAA;;AC3VP,aAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,OAAA,eAAA,QAAA,YAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,cAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,eAAA,OAAA,eAAA,QAAA,OAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,QAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,YAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,aAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,mBAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,4BAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,eAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,cAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,eAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,OAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,QAAA,OAAA,eAAA,QAAA,UAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,WAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,YAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,aAAA,OAAA,eAAA,QAAA,SAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,UAAA,OAAA,eAAA,QAAA,cAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,eAAA,OAAA,eAAA,QAAA,OAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,QAAA,OAAA,eAAA,QAAA,OAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,QAAA,OAAA,eAAA,QAAA,OAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,QAAA,OAAA,eAAA,QAAA,gBAAA,CAAA,YAAA,EAAA,IAAA,WAAA,OAAA,EAAA,iBAAA,QAAA,QAAA,QAAA,cAAA,EAbA,IAAA,EAAA,EAAA,QAAA,mBACA,EAAA,EAAA,QAAA,sBACA,EAAA,EAAA,QAAA,mBACA,EAAA,EAAA,QAAA,oBACA,EAAA,EAAA,QAAA,0BACA,EAAA,EAAA,QAAA,mCACA,EAAA,EAAA,QAAA,sBACA,EAAA,EAAA,QAAA,qBACA,EAAA,EAAA,QAAA,sBACA,EAAA,QAAA,iBAIA,SAAA,EAAA,GAAA,OAAA,GAAA,EAAA,WAAA,EAAA,CAAA,QAAA,GAAA,SAAA,EAAA,GAAA,GAAA,GAAA,EAAA,WAAA,OAAA,EAAA,IAAA,EAAA,GAAA,GAAA,MAAA,EAAA,IAAA,IAAA,KAAA,EAAA,GAAA,OAAA,UAAA,eAAA,KAAA,EAAA,GAAA,CAAA,IAAA,EAAA,OAAA,gBAAA,OAAA,yBAAA,OAAA,yBAAA,EAAA,GAAA,GAAA,EAAA,KAAA,EAAA,IAAA,OAAA,eAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,OAAA,EAAA,QAAA,EAAA,EADO,IAAI7qB,EAAWiD,EAAf,QACP,QAAA,QAAA,QAAA,SAAA,EAAAjD,EAAS4tB,eAAiB,CAACrN,EAAD,QAAeqD,EAAf,QAA4B1gB,EAA5B,QAAuC0c,EAAvC,QAAmD2I,EAAnD,QAAiE1I,EAAjE,QAAmFO,EAAnF,QAA8G4L,EAA9G,KAAoHuB,EAApH,QAA6HC,EAA7H,OAAqI1C,EAArI,UAAgJmB,EAAhJ,OAAwJrB,EAAxJ,YAAqK6C,EAArK,KAA2KC,EAA3K,KAAiLC,EAAjL,KAAuL9C,EAAvL;;;ACrB1B,OAAA,QAAA,EAOA,IAAA,EAAA,GAOA,EAAA,EAOA,EAAA,WACA,IAAA,GAAA,EACA,EAAA,EAAA,OACA,EAAA,EAKA,IAHA,EAAA,GACA,EAAA,IAEA,EAAA,GACA,EAAA,MASA,SAAA,EAAA,GACA,EAAA,KAAA,GACA,IAAA,IACA,EAAA,WAAA,EAAA;;AC1CA,IAAA,EAAA,QAAA,aAkBA,SAAA,EAAA,EAAA,GACA,IAAA,EAAA,IAEA,sBAAA,GAAA,SAAA,KAAA,KACA,EAAA,CAAA,SAAA,IAGA,IAOA,EAPA,EAAA,SACA,EAAA,EAAA,YACA,EAAA,mBAAA,GAAA,SAAA,KAAA,GAAA,EAAA,CAAA,GACA,EAAA,EAAA,MAAA,EAAA,MAAA,MACA,EAAA,EAAA,UAAA,aACA,EAAA,GAIA,GAAA,EAAA,OACA,EAAA,EAAA,WACA,CACA,IAAA,GAAA,EAAA,MAAA,EAAA,qBAAA,QAAA,IAAA,WACA,EAAA,EAAA,EAAA,OAAA,GAaA,SAAA,IAKA,IAJA,IAAA,EAAA,EACA,GAAA,EACA,EAAA,EAAA,SAEA,EAAA,GACA,GAAA,EAAA,EAAA,GAAA,SAAA,IAAA,EACA,OAAA,EAAA,GAIA,EAAA,GAGA,SAAA,EAAA,GAIA,IAHA,IAAA,GAAA,EACA,EAAA,EAAA,SAEA,EAAA,GACA,GAAA,OAAA,EAAA,GAAA,MAAA,IAAA,EAAA,GAAA,KAAA,QAIA,EAAA,GAAA,OAAA,EACA,OAAA,EAuBA,OAzDA,SAAA,EAAA,GACA,GAAA,EAAA,KACA,OAAA,IAGA,EAAA,WACA,EAAA,KAiCA,CAAA,WAKA,IAJA,IAAA,GAAA,EACA,EAAA,EAAA,OACA,EAAA,EAAA,OAAA,EAAA,EAAA,cAEA,EAAA,GACA,EAAA,GAAA,EAAA,cAAA,QAEA,EAAA,GAAA,IAAA,aACA,EAAA,GAAA,KAAA,EAAA,GACA,EAAA,GAAA,MAAA,EAEA,EAAA,WAAA,aAAA,EAAA,GAAA,GAGA,EAAA,KAGA,EA5FA,OAAA,QAAA;;AC8DgB,aAAA,SAAA,EAAA,EAAA,GAAA,KAAA,aAAA,GAAA,MAAA,IAAA,UAAA,qCAAA,SAAA,EAAA,EAAA,GAAA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,UAAA,IAAA,EAAA,UAAA,GAAA,OAAA,eAAA,EAAA,EAAA,IAAA,IAAA,SAAA,EAAA,EAAA,EAAA,GAAA,OAAA,GAAA,EAAA,EAAA,UAAA,GAAA,GAAA,EAAA,EAAA,GAAA,EAAA,OAAA,eAAA,QAAA,aAAA,CAAA,OAAA,IAAA,QAAA,aAAA,EAtEVgD,IAAAA,EAsEU,WArEA,SAAA,IAAA,EAAA,KAAA,GACPz/B,KAAAA,SAAU,EACT0/B,IAAAA,EAAYlsC,SAASmsC,cAAc,uBAEpCC,KAAAA,gBAAeF,IAAaA,EAAUvY,aAAa,SAASuY,EAAUvR,IAAI/5B,MAAM,QAAQ,GAiEjF,OAAA,EAAA,EAAA,CAAA,CAAA,IAAA,UA9DJ,MAAA,WAED,OADF4L,KAAAA,aAAiC,IAAhB/M,OAAO4sC,KACtB,KAAK7/B,UA4DA,CAAA,IAAA,QAzDR8/B,MAAAA,SAAAA,EAAUC,EAAQpM,EAAOt3B,GACzB,QAAC,KAAK2jC,YAEL,KAAKJ,cAKV3sC,OAAO4sC,KAAK,QAAS,KAAKD,aAAc,CACtCK,eAAgBH,EAChBI,aAAcH,EACdI,YAAaxM,EACbt3B,MAAAA,KAGK,IAXAoT,KAAAA,IAAI,uCACF,MAoDG,CAAA,IAAA,WAvCH,MAAA,WACL,QAAC,KAAKuwB,YAEL,KAAKJ,cAKV3sC,OAAO4sC,KAAK,SAAU,KAAKD,aAAc,CACvCQ,WAAY5sC,SAAS6sC,MACrBC,UAAcrtC,GAAAA,OAAAA,OAAOstC,SAASC,UAAWvtC,OAAAA,OAAOstC,SAASE,WAGpD,IATAhxB,KAAAA,IAAI,uCACF,MAkCG,CAAA,IAAA,2BAvBa,MAAA,WACrB,GAAkB,oBAAXxc,QACP,KAAK+sC,UAEF,IADCpsC,IAAAA,EAAIJ,SAASiR,iBAAiB,sCAC3B5Q,EAAI,EAAGA,EAAID,EAAES,OAAQR,GAAK,EACf,KAAdD,EAAEC,GAAG6sC,OAA4D,IAA7C9sC,EAAEC,GAAG6sC,KAAK1/B,QAAQ/N,OAAOstC,SAASI,QACxD/sC,EAAEC,GAAG2zB,aAAa,cAAe,QACjC5zB,EAAEC,GAAG+sC,QAAW,SAAYC,EAAOH,GAC1B,OAAA,WACLG,EAAMC,MAAM,YAAaJ,IAFb,CAId,KAAM9sC,EAAEC,GAAG6sC,SAYP,CAAA,IAAA,MANVK,MAAAA,SAAAA,GACG,KAAKC,UAKE,EAAA,GAAA,EAAA,IAAIvB,EAAJ,QAAA,QAAA;;;;AC6IhB,aAtNA,IAAA,EAAA,QAAA,uBACA,EAAA,QAAA,iBAGA,EAAA,EAAA,QAAA,YACA,EAAA,EAAA,QAAA,eAiNA,SAAA,EAAA,GAAA,OAAA,GAAA,EAAA,WAAA,EAAA,CAAA,QAAA,GAhNA,QAAA,aACA,QAAA,oBAEA,IAAMwB,EAAW,GACXC,EAAS,CACb,mCACA,8BACA,qCACA,uCACA,kCACA,qCAEEC,EAAe,KAEnB,SAASC,IACQ,GAAGxnC,MAAM7E,KAAKvB,SAASiR,iBAAiB,qBAEhDzN,IAAI,SAAAqqC,GAAO,OAAA,IAAIC,OAASnT,IAAMkT,EAAGja,aAAa,cAGvD,SAASma,KAGCL,EAAAA,EAAAA,SAAAA,EAAOlqC,IAAI,SAAAe,GAAUA,MAAAA,KAAAA,OAAAA,KAAM,SAACypC,GAClCA,EAAMC,QAAQ,SAAAC,MAEM,GAAG9nC,MAAM7E,KAAKvB,SAASmuC,aAC/B3qC,IAAI,SAACsC,EAAGzF,GASXyF,OANLA,EAAEonC,KAAK1/B,QAAQ,wBAA0B,IACP,IAA/B1H,EAAEonC,KAAK1/B,QAAQkgC,EAAO,MACO,IAA7B5nC,EAAEonC,KAAK1/B,QAAQ,WAElBxN,SAASmuC,YAAY9tC,GAAGkhC,UAAW,GAE9Bz7B,MAKb,SAASsoC,EAAYC,GACfV,IAAiBU,GAGD,GAAGjoC,MAAM7E,KAAKvB,SAASmuC,aAC/B3qC,IAAI,SAACsC,EAAGzF,GAUXyF,OATHzF,EAAI,IAA0C,IAArCL,SAASmuC,YAAY9tC,GAAGkhC,SACnCvhC,SAASmuC,YAAY9tC,GAAGkhC,UAAW,EAC1BvhC,SAASmuC,YAAY9tC,GAAG6sC,KAAK1/B,QAAQ6gC,IAAc,IAC5DruC,SAASmuC,YAAY9tC,GAAGkhC,UAAW,EACnCoM,EAAeU,GAKVvoC,IAIX,SAASwoC,IAEDC,IAAAA,EAAWvuC,SAASmsC,cAAc,UAClCqC,EAAaxuC,SAASmsC,cAAc,MACpCsC,EAAOzuC,SAASmsC,cAAc,OAC9BuC,EAAU1uC,SAASmsC,cAAc,UAGrC1sC,OAAOkvC,YAAc,KAEXn0B,EAAAA,UAAAA,IACRg0B,EACA,CACEx1B,IAAK,CACH4f,MAAO,IACO,aAAA,GACG,gBAAA,MAMfpe,EAAAA,UAAAA,IAAI+zB,EAAU,CAAE/wB,EAAG,KACnBjF,EAAAA,UAAAA,GACRg2B,EACAd,EAAW,EACX,CACEnoB,QAAS,EACT9H,EAAG,IAIGhD,EAAAA,UAAAA,IAAIg0B,EAAY,CAAEhxB,EAAG,KACrBjF,EAAAA,UAAAA,GACRi2B,EACAf,EACA,CACEnoB,QAAS,EACT9H,EAAG,EAEH/T,MAAOgkC,EAAW,IAIZjzB,EAAAA,UAAAA,IAAIi0B,EAAM,CAAEjxB,EAAG,KACfjF,EAAAA,UAAAA,GACRk2B,EACW,IAAXhB,EACA,CACEnoB,QAAS,EACT9H,EAAG,EACH/T,MAAOgkC,IAIX7kC,WACE,WACEnJ,OAAOmvC,mBAAmBh9B,SAEjB,GAAX67B,EAAiB,KAGTl1B,EAAAA,UAAAA,GACRm2B,EACW,EAAXjB,EACA,CACEnoB,QAAS,EACT7b,MAAkB,EAAXgkC,IAKb,SAASvrC,IACP6rC,IACAK,EAAYV,EAAO,IACnBE,IACSiB,EAAAA,QAAAA,2BAEHC,IAAAA,EAAY9uC,SAASmsC,cAAc,YACnC4C,EAAS/uC,SAASmsC,cAAc,SAChCsC,EAAOzuC,SAASmsC,cAAc,OAC9B6C,EAAa,IAAIhqC,EAAJ,gBAGnBgqC,EAAW5pC,iBAAiB6pC,EAAWC,WAAAA,YAAa,SAAC5B,GAErB,WAA1BA,EAAM6B,OAAOC,IAAInrC,OACnBxE,OAAOmvC,mBAAmBS,YAAY1O,OACtC3gC,SAASmsC,cAAc,wBAAwBx8B,MAAM,kBAAoB,UAE1E,GAEG2/B,IAAAA,EAAa,IAAIV,EAAJ,mBAAuB,CACxCG,OAAAA,EACAQ,QAASd,EACTe,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAiBX,EACjBY,eAAgB,WACRC,IAAAA,EAAqBP,EAAWQ,aAAY,GAGhDD,EAAmBE,aACiC,IAAjDF,EAAmBE,WAAWviC,QAAQ,OAEzC8hC,EAAWU,qBAAqB,sDAGpCC,iBAAkB,SAACC,EAAKC,GAGb7C,EAAAA,QAAAA,MAAM,8BAA+B4C,EAAId,IAAInrC,KAAMisC,EAAId,IAAIvmC,OAE/C,UAAjBqnC,EAAId,IAAInrC,MAAkBmqC,EAAY8B,EAAId,IAAIvmC,MAAM,IAExDD,WAAW,YAEU,qBAAjBsnC,EAAId,IAAInrC,MAEW,qBAAjBisC,EAAId,IAAInrC,MACgB,QAArBisC,EAAId,IAAIvmC,MAAM,KAGnBsnC,IAIiB,qBAAjBD,EAAId,IAAInrC,MACgB,QAArBisC,EAAId,IAAIvmC,MAAM,IAEjBpJ,OAAOmvC,mBAAmBwB,sBAAsB,IAEjD,MAIG73B,EAAAA,UAAAA,GACRu2B,EACA,EACA,CACExpB,QAAS,EACT7b,MAAOgkC,EAAW,EAClBj5B,WAAY85B,IAKlBtuC,SAASoF,iBAAiB,mBAAoBlD"",""file"":""main.0c897a54.js"",""sourceRoot"":""src"",""sourcesContent"":[""(function (root) {\n\n  // Store setTimeout reference so promise-polyfill will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var setTimeoutFunc = setTimeout;\n\n  function noop() {}\n  \n  // Polyfill for Function.prototype.bind\n  function bind(fn, thisArg) {\n    return function () {\n      fn.apply(thisArg, arguments);\n    };\n  }\n\n  function Promise(fn) {\n    if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');\n    if (typeof fn !== 'function') throw new TypeError('not a function');\n    this._state = 0;\n    this._handled = false;\n    this._value = undefined;\n    this._deferreds = [];\n\n    doResolve(fn, this);\n  }\n\n  function handle(self, deferred) {\n    while (self._state === 3) {\n      self = self._value;\n    }\n    if (self._state === 0) {\n      self._deferreds.push(deferred);\n      return;\n    }\n    self._handled = true;\n    Promise._immediateFn(function () {\n      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n      if (cb === null) {\n        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n        return;\n      }\n      var ret;\n      try {\n        ret = cb(self._value);\n      } catch (e) {\n        reject(deferred.promise, e);\n        return;\n      }\n      resolve(deferred.promise, ret);\n    });\n  }\n\n  function resolve(self, newValue) {\n    try {\n      // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n      if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');\n      if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n        var then = newValue.then;\n        if (newValue instanceof Promise) {\n          self._state = 3;\n          self._value = newValue;\n          finale(self);\n          return;\n        } else if (typeof then === 'function') {\n          doResolve(bind(then, newValue), self);\n          return;\n        }\n      }\n      self._state = 1;\n      self._value = newValue;\n      finale(self);\n    } catch (e) {\n      reject(self, e);\n    }\n  }\n\n  function reject(self, newValue) {\n    self._state = 2;\n    self._value = newValue;\n    finale(self);\n  }\n\n  function finale(self) {\n    if (self._state === 2 && self._deferreds.length === 0) {\n      Promise._immediateFn(function() {\n        if (!self._handled) {\n          Promise._unhandledRejectionFn(self._value);\n        }\n      });\n    }\n\n    for (var i = 0, len = self._deferreds.length; i < len; i++) {\n      handle(self, self._deferreds[i]);\n    }\n    self._deferreds = null;\n  }\n\n  function Handler(onFulfilled, onRejected, promise) {\n    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n    this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n    this.promise = promise;\n  }\n\n  /**\n   * Take a potentially misbehaving resolver function and make sure\n   * onFulfilled and onRejected are only called once.\n   *\n   * Makes no guarantees about asynchrony.\n   */\n  function doResolve(fn, self) {\n    var done = false;\n    try {\n      fn(function (value) {\n        if (done) return;\n        done = true;\n        resolve(self, value);\n      }, function (reason) {\n        if (done) return;\n        done = true;\n        reject(self, reason);\n      });\n    } catch (ex) {\n      if (done) return;\n      done = true;\n      reject(self, ex);\n    }\n  }\n\n  Promise.prototype['catch'] = function (onRejected) {\n    return this.then(null, onRejected);\n  };\n\n  Promise.prototype.then = function (onFulfilled, onRejected) {\n    var prom = new (this.constructor)(noop);\n\n    handle(this, new Handler(onFulfilled, onRejected, prom));\n    return prom;\n  };\n\n  Promise.all = function (arr) {\n    var args = Array.prototype.slice.call(arr);\n\n    return new Promise(function (resolve, reject) {\n      if (args.length === 0) return resolve([]);\n      var remaining = args.length;\n\n      function res(i, val) {\n        try {\n          if (val && (typeof val === 'object' || typeof val === 'function')) {\n            var then = val.then;\n            if (typeof then === 'function') {\n              then.call(val, function (val) {\n                res(i, val);\n              }, reject);\n              return;\n            }\n          }\n          args[i] = val;\n          if (--remaining === 0) {\n            resolve(args);\n          }\n        } catch (ex) {\n          reject(ex);\n        }\n      }\n\n      for (var i = 0; i < args.length; i++) {\n        res(i, args[i]);\n      }\n    });\n  };\n\n  Promise.resolve = function (value) {\n    if (value && typeof value === 'object' && value.constructor === Promise) {\n      return value;\n    }\n\n    return new Promise(function (resolve) {\n      resolve(value);\n    });\n  };\n\n  Promise.reject = function (value) {\n    return new Promise(function (resolve, reject) {\n      reject(value);\n    });\n  };\n\n  Promise.race = function (values) {\n    return new Promise(function (resolve, reject) {\n      for (var i = 0, len = values.length; i < len; i++) {\n        values[i].then(resolve, reject);\n      }\n    });\n  };\n\n  // Use polyfill for setImmediate for performance gains\n  Promise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) ||\n    function (fn) {\n      setTimeoutFunc(fn, 0);\n    };\n\n  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n    if (typeof console !== 'undefined' && console) {\n      console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n    }\n  };\n\n  /**\n   * Set the immediate function to execute callbacks\n   * @param fn {function} Function to execute\n   * @deprecated\n   */\n  Promise._setImmediateFn = function _setImmediateFn(fn) {\n    Promise._immediateFn = fn;\n  };\n\n  /**\n   * Change the function to execute on unhandled rejection\n   * @param {function} fn Function to execute on unhandled rejection\n   * @deprecated\n   */\n  Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n    Promise._unhandledRejectionFn = fn;\n  };\n  \n  if (typeof module !== 'undefined' && module.exports) {\n    module.exports = Promise;\n  } else if (!root.Promise) {\n    root.Promise = Promise;\n  }\n\n})(this);\n\n// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n    var ce = new window.CustomEvent('test');\n    ce.preventDefault();\n    if (ce.defaultPrevented !== true) {\n        // IE has problems with .preventDefault() on custom events\n        // http://stackoverflow.com/questions/23349191\n        throw new Error('Could not prevent default');\n    }\n} catch(e) {\n  var CustomEvent = function(event, params) {\n    var evt, origPrevent;\n    params = params || {\n      bubbles: false,\n      cancelable: false,\n      detail: undefined\n    };\n\n    evt = document.createEvent(\""CustomEvent\"");\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    origPrevent = evt.preventDefault;\n    evt.preventDefault = function () {\n      origPrevent.call(this);\n      try {\n        Object.defineProperty(this, 'defaultPrevented', {\n          get: function () {\n            return true;\n          }\n        });\n      } catch(e) {\n        this.defaultPrevented = true;\n      }\n    };\n    return evt;\n  };\n\n  CustomEvent.prototype = window.Event.prototype;\n  window.CustomEvent = CustomEvent; // expose definition to window\n}\n\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var Helpers = /** @class */ (function () {\n        function Helpers() {\n        }\n        Helpers.lerp = function (norm, min, max) {\n            return (max - min) * norm + min;\n        };\n        Helpers.norm = function (value, min, max) {\n            return (value - min) / (max - min);\n        };\n        Helpers.getXYFromMouseTouchEvent = function (event) {\n            var touches = null;\n            if (event.originalEvent)\n                touches = event.originalEvent.touches || event.originalEvent.changedTouches;\n            else if (event.changedTouches)\n                touches = event.changedTouches;\n            if (touches) {\n                return { x: touches[0].pageX, y: touches[0].pageY, touches: touches[0] };\n            }\n            else {\n                return { x: event.pageX, y: event.pageY, touches: null };\n            }\n        };\n        Helpers.getInnerTextOfElement = function (element) {\n            var tmp = document.createElement(\""DIV\"");\n            tmp.innerHTML = element.innerHTML;\n            // return \n            var text = tmp.textContent || tmp.innerText || \""\"";\n            // text = String(text).replace('\\t','');\n            text = String(text).replace(/^\\s+|\\s+$/g, '');\n            return text;\n        };\n        Helpers.getMouseEvent = function (eventString) {\n            var mappings = [];\n            mappings[\""click\""] = \""ontouchstart\"" in window ? \""touchstart\"" : \""click\"";\n            mappings[\""mousedown\""] = \""ontouchstart\"" in window ? \""touchstart\"" : \""mousedown\"";\n            mappings[\""mouseup\""] = \""ontouchstart\"" in window ? \""touchend\"" : \""mouseup\"";\n            mappings[\""mousemove\""] = \""ontouchstart\"" in window ? \""touchmove\"" : \""mousemove\"";\n            return mappings[eventString];\n        };\n        Helpers.isInternetExlorer = function () {\n            var ua = window.navigator.userAgent;\n            var msie = ua.indexOf(\""MSIE \"");\n            return msie > 0 || !!navigator.userAgent.match(/Trident.*rv\\:11\\./);\n        };\n        Helpers.getValuesOfBars = function (str) {\n            var strs = str.split(\""||\"");\n            // TODO: remove single |\n            // fallback to the standard\n            if (strs.length <= 1)\n                strs = str.split(\""|\"");\n            return strs;\n        };\n        Helpers.setTransform = function (el, transformString) {\n            el.style[\""-webkit-transform\""] = transformString;\n            el.style[\""-moz-transform\""] = transformString;\n            el.style[\""-ms-transform\""] = transformString;\n            el.style[\""transform\""] = transformString;\n        };\n        // deep extends and object, from: https://andrewdupont.net/2009/08/28/deep-extending-objects-in-javascript/\n        Helpers.extendObject = function (destination, source) {\n            for (var property in source) {\n                if (source[property] && source[property].constructor &&\n                    source[property].constructor === Object) {\n                    destination[property] = destination[property] || {};\n                    arguments.callee(destination[property], source[property]);\n                }\n                else {\n                    destination[property] = source[property];\n                }\n            }\n            return destination;\n        };\n        ;\n        Helpers.caniuse = {\n            fileReader: function () {\n                if (window.File && window.FileReader && window.FileList && window.Blob)\n                    return true;\n                return false;\n            }\n        };\n        return Helpers;\n    }());\n    cf.Helpers = Helpers;\n})(cf || (cf = {}));\n\n/// <reference path=\""../ConversationalForm.ts\""/>\nvar cf;\n(function (cf) {\n    // interface\n    var EventDispatcher = /** @class */ (function () {\n        function EventDispatcher(cfRef) {\n            if (cfRef === void 0) { cfRef = null; }\n            this._cf = cfRef;\n            this.target = document.createDocumentFragment();\n        }\n        Object.defineProperty(EventDispatcher.prototype, \""cf\"", {\n            get: function () {\n                return this._cf;\n            },\n            set: function (value) {\n                this._cf = value;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        EventDispatcher.prototype.addEventListener = function (type, listener, useCapture) {\n            return this.target.addEventListener(type, listener, useCapture);\n        };\n        EventDispatcher.prototype.dispatchEvent = function (event) {\n            return this.target.dispatchEvent(event);\n        };\n        EventDispatcher.prototype.removeEventListener = function (type, listener, useCapture) {\n            this.target.removeEventListener(type, listener, useCapture);\n        };\n        return EventDispatcher;\n    }());\n    cf.EventDispatcher = EventDispatcher;\n})(cf || (cf = {}));\n\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    var TagsParser = /** @class */ (function () {\n        function TagsParser() {\n        }\n        TagsParser.parseTag = function (element) {\n            var tag = document.createElement(element.tag);\n            tag.setAttribute(\""cf-formless\"", \""\"");\n            // TODO: ES6 mapping??\n            for (var k in element) {\n                if (k !== \""tag\"" && k !== \""children\"") {\n                    tag.setAttribute(k, element[k]);\n                }\n            }\n            return tag;\n        };\n        TagsParser.parseGroupTag = function (groupTag) {\n            var groupEl = TagsParser.parseTag(groupTag);\n            var groupChildren = groupTag.children;\n            for (var j = 0; j < groupChildren.length; j++) {\n                var fieldSetTagData = groupChildren[j];\n                var tag = TagsParser.parseTag(fieldSetTagData);\n                groupEl.appendChild(tag);\n            }\n            return groupEl;\n        };\n        TagsParser.parseJSONIntoElements = function (data) {\n            var formEl = document.createElement(\""form\"");\n            for (var i = 0; i < data.length; i++) {\n                var element = data[i];\n                var tag = TagsParser.parseTag(element);\n                // add sub children to tag, ex. option, checkbox, etc.\n                if (element.children && element.children.length > 0) {\n                    for (var j = 0; j < element.children.length; j++) {\n                        var subElement = TagsParser.parseTag(element.children[j]);\n                        tag.appendChild(subElement);\n                    }\n                }\n                formEl.appendChild(tag);\n            }\n            return formEl;\n        };\n        TagsParser.isElementFormless = function (element) {\n            if (element.hasAttribute(\""cf-formless\""))\n                return true;\n            return false;\n        };\n        return TagsParser;\n    }());\n    cf.TagsParser = TagsParser;\n})(cf || (cf = {}));\n\n// namespace\nvar cf;\n(function (cf) {\n    // default options interface for optional parameters for the UI of Conversational Form\n    cf.UserInterfaceDefaultOptions = {\n        controlElementsInAnimationDelay: 250,\n        robot: {\n            robotResponseTime: 0,\n            chainedResponseTime: 500\n        },\n        user: {\n            showThinking: false,\n            showThumb: false\n        }\n    };\n})(cf || (cf = {}));\n\n/// <reference path=\""../logic/EventDispatcher.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    // class\n    var BasicElement = /** @class */ (function () {\n        function BasicElement(options) {\n            this.eventTarget = options.eventTarget;\n            this.cfReference = options.cfReference;\n            if (options.customTemplate)\n                this.customTemplate = options.customTemplate;\n            // TODO: remove\n            if (!this.eventTarget)\n                throw new Error(\""this.eventTarget not set!! : \"" + this.constructor.name);\n            this.setData(options);\n            this.createElement();\n            this.onElementCreated();\n        }\n        BasicElement.prototype.setData = function (options) {\n        };\n        BasicElement.prototype.onElementCreated = function () {\n        };\n        BasicElement.prototype.createElement = function () {\n            var template = document.createElement('template');\n            template.innerHTML = this.getTemplate();\n            this.el = template.firstChild || template.content.firstChild;\n            return this.el;\n        };\n        // template, should be overwritten ...\n        BasicElement.prototype.getTemplate = function () { return this.customTemplate || \""should be overwritten...\""; };\n        ;\n        BasicElement.prototype.dealloc = function () {\n            this.el.parentNode.removeChild(this.el);\n        };\n        return BasicElement;\n    }());\n    cf.BasicElement = BasicElement;\n})(cf || (cf = {}));\n\n/// <reference path=\""../../ConversationalForm.ts\""/>\n/// <reference path=\""../BasicElement.ts\""/>\n/// <reference path=\""../../form-tags/Tag.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    cf.ControlElementEvents = {\n        SUBMIT_VALUE: \""cf-basic-element-submit\"",\n        PROGRESS_CHANGE: \""cf-basic-element-progress\"",\n        ON_FOCUS: \""cf-basic-element-on-focus\"",\n        ON_LOADED: \""cf-basic-element-on-loaded\"",\n    };\n    cf.ControlElementProgressStates = {\n        BUSY: \""cf-control-element-progress-BUSY\"",\n        READY: \""cf-control-element-progress-READY\"",\n    };\n    // class\n    var ControlElement = /** @class */ (function (_super) {\n        __extends(ControlElement, _super);\n        function ControlElement(options) {\n            var _this = _super.call(this, options) || this;\n            _this.animateInTimer = 0;\n            _this._partOfSeveralChoices = false;\n            _this._focus = false;\n            _this.onFocusCallback = _this.onFocus.bind(_this);\n            _this.el.addEventListener('focus', _this.onFocusCallback, false);\n            _this.onBlurCallback = _this.onBlur.bind(_this);\n            _this.el.addEventListener('blur', _this.onBlurCallback, false);\n            if (_this.referenceTag.disabled) {\n                _this.el.setAttribute(\""disabled\"", \""disabled\"");\n            }\n            return _this;\n        }\n        Object.defineProperty(ControlElement.prototype, \""type\"", {\n            get: function () {\n                return \""ControlElement\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElement.prototype, \""partOfSeveralChoices\"", {\n            get: function () {\n                return this._partOfSeveralChoices;\n            },\n            set: function (value) {\n                this._partOfSeveralChoices = value;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElement.prototype, \""value\"", {\n            get: function () {\n                // value is for the chat response -->\n                var hasTagImage = this.referenceTag.hasImage;\n                var str;\n                if (hasTagImage && !this.partOfSeveralChoices) {\n                    // const image: string = hasTagImage ? \""<img src='\"" + this.referenceTag.domElement.getAttribute(\""cf-image\"") + \""'/>\"" : \""\"";\n                    var image = hasTagImage ? \""<img src=\\\""\"" + this.referenceTag.domElement.getAttribute(\""cf-image\"") + \""\\\""/>\"" : \""\"";\n                    // str = \""<div class='contains-image'>\""\n                    // str += image;\n                    // str += \""<span>\"" + Helpers.getInnerTextOfElement(this.el) + \""</span>\"";\n                    // str += \""</div>\"";\n                    str = image + cf.Helpers.getInnerTextOfElement(this.el);\n                }\n                else {\n                    // str = \""<div><span>\"" + Helpers.getInnerTextOfElement(this.el) + \""</span></div>\"";\n                    str = cf.Helpers.getInnerTextOfElement(this.el);\n                }\n                return str;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElement.prototype, \""positionVector\"", {\n            get: function () {\n                return this._positionVector;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElement.prototype, \""tabIndex\"", {\n            set: function (value) {\n                this.el.tabIndex = value;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElement.prototype, \""highlight\"", {\n            get: function () {\n                return this.el.classList.contains(\""highlight\"");\n            },\n            set: function (value) {\n                if (value)\n                    this.el.classList.add(\""highlight\"");\n                else\n                    this.el.classList.remove(\""highlight\"");\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElement.prototype, \""focus\"", {\n            get: function () {\n                return this._focus;\n            },\n            set: function (value) {\n                this._focus = value;\n                if (this._focus)\n                    this.el.focus();\n                else\n                    this.el.blur();\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElement.prototype, \""visible\"", {\n            get: function () {\n                return !this.el.classList.contains(\""hide\"");\n            },\n            set: function (value) {\n                if (value) {\n                    this.el.classList.remove(\""hide\"");\n                }\n                else {\n                    this.el.classList.add(\""hide\"");\n                    this.tabIndex = -1;\n                    this.highlight = false;\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ControlElement.prototype.onBlur = function (event) {\n            this._focus = false;\n        };\n        ControlElement.prototype.onFocus = function (event) {\n            this._focus = true;\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.ControlElementEvents.ON_FOCUS, this.referenceTag);\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.ControlElementEvents.ON_FOCUS, {\n                detail: this.positionVector\n            }));\n        };\n        /**\n        * @name hasImage\n        * if control element contains an image element\n        */\n        ControlElement.prototype.hasImage = function () {\n            return false;\n        };\n        ControlElement.prototype.calcPosition = function () {\n            var mr = parseInt(window.getComputedStyle(this.el).getPropertyValue(\""margin-right\""), 10);\n            // try not to do this to often, re-paint whammy!\n            this._positionVector = {\n                height: this.el.offsetHeight,\n                width: this.el.offsetWidth + mr,\n                x: this.el.offsetLeft,\n                y: this.el.offsetTop,\n                el: this,\n            };\n            this._positionVector.centerX = this._positionVector.x + (this._positionVector.width * 0.5);\n            this._positionVector.centerY = this._positionVector.y + (this._positionVector.height * 0.5);\n        };\n        ControlElement.prototype.setData = function (options) {\n            this.referenceTag = options.referenceTag;\n            _super.prototype.setData.call(this, options);\n        };\n        ControlElement.prototype.animateIn = function () {\n            clearTimeout(this.animateInTimer);\n            this.el.classList.add(\""animate-in\"");\n        };\n        ControlElement.prototype.animateOut = function () {\n            this.el.classList.add(\""animate-out\"");\n        };\n        ControlElement.prototype.onChoose = function () {\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.ControlElementEvents.SUBMIT_VALUE, this.referenceTag);\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.ControlElementEvents.SUBMIT_VALUE, {\n                detail: this\n            }));\n        };\n        ControlElement.prototype.dealloc = function () {\n            this.el.removeEventListener('blur', this.onBlurCallback, false);\n            this.onBlurCallback = null;\n            this.el.removeEventListener('focus', this.onFocusCallback, false);\n            this.onFocusCallback = null;\n            _super.prototype.dealloc.call(this);\n        };\n        return ControlElement;\n    }(cf.BasicElement));\n    cf.ControlElement = ControlElement;\n})(cf || (cf = {}));\n\n/// <reference path=\""Button.ts\""/>\n/// <reference path=\""ControlElement.ts\""/>\n/// <reference path=\""RadioButton.ts\""/>\n/// <reference path=\""CheckboxButton.ts\""/>\n/// <reference path=\""OptionsList.ts\""/>\n/// <reference path=\""UploadFileUI.ts\""/>\n/// <reference path=\""../../logic/EventDispatcher.ts\""/>\n/// <reference path=\""../ScrollController.ts\""/>\n/// <reference path=\""../chat/ChatResponse.ts\""/>\n/// <reference path=\""../../../typings/globals/es6-promise/index.d.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    cf.ControlElementsEvents = {\n        ON_RESIZE: \""cf-on-control-elements-resize\"",\n        CHANGED: \""cf-on-control-elements-changed\""\n    };\n    var ControlElements = /** @class */ (function () {\n        function ControlElements(options) {\n            this.ignoreKeyboardInput = false;\n            this.rowIndex = -1;\n            this.columnIndex = 0;\n            this.elementWidth = 0;\n            this.filterListNumberOfVisible = 0;\n            this.listWidth = 0;\n            this.el = options.el;\n            this.eventTarget = options.eventTarget;\n            this.cfReference = options.cfReference;\n            this.list = this.el.getElementsByTagName(\""cf-list\"")[0];\n            this.infoElement = options.infoEl;\n            this.onScrollCallback = this.onScroll.bind(this);\n            this.el.addEventListener('scroll', this.onScrollCallback, false);\n            this.onResizeCallback = this.onResize.bind(this);\n            window.addEventListener('resize', this.onResizeCallback, false);\n            this.onElementFocusCallback = this.onElementFocus.bind(this);\n            this.eventTarget.addEventListener(cf.ControlElementEvents.ON_FOCUS, this.onElementFocusCallback, false);\n            this.onElementLoadedCallback = this.onElementLoaded.bind(this);\n            this.eventTarget.addEventListener(cf.ControlElementEvents.ON_LOADED, this.onElementLoadedCallback, false);\n            this.onChatReponsesUpdatedCallback = this.onChatReponsesUpdated.bind(this);\n            this.eventTarget.addEventListener(cf.ChatListEvents.CHATLIST_UPDATED, this.onChatReponsesUpdatedCallback, false);\n            this.onUserInputKeyChangeCallback = this.onUserInputKeyChange.bind(this);\n            this.eventTarget.addEventListener(cf.UserInputEvents.KEY_CHANGE, this.onUserInputKeyChangeCallback, false);\n            // user input update\n            this.userInputUpdateCallback = this.onUserInputUpdate.bind(this);\n            this.eventTarget.addEventListener(cf.FlowEvents.USER_INPUT_UPDATE, this.userInputUpdateCallback, false);\n            this.listScrollController = new cf.ScrollController({\n                interactionListener: this.el,\n                listToScroll: this.list,\n                eventTarget: this.eventTarget,\n                listNavButtons: this.el.getElementsByTagName(\""cf-list-button\""),\n            });\n        }\n        Object.defineProperty(ControlElements.prototype, \""active\"", {\n            get: function () {\n                return this.elements && this.elements.length > 0;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElements.prototype, \""focus\"", {\n            get: function () {\n                if (!this.elements)\n                    return false;\n                var elements = this.getElements();\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    if (element.focus) {\n                        return true;\n                    }\n                }\n                return false;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElements.prototype, \""highlighted\"", {\n            get: function () {\n                if (!this.elements)\n                    return false;\n                var elements = this.getElements();\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    if (element.highlight) {\n                        return true;\n                    }\n                }\n                return false;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElements.prototype, \""disabled\"", {\n            set: function (value) {\n                if (value)\n                    this.list.classList.add(\""disabled\"");\n                else\n                    this.list.classList.remove(\""disabled\"");\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ControlElements.prototype, \""length\"", {\n            get: function () {\n                var elements = this.getElements();\n                return elements.length;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ControlElements.prototype.onScroll = function (event) {\n            // some times the tabbing will result in el scroll, reset this.\n            this.el.scrollLeft = 0;\n        };\n        /**\n        * @name onElementLoaded\n        * when element is loaded, usally image loaded.\n        */\n        ControlElements.prototype.onElementLoaded = function (event) {\n            this.onResize(null);\n        };\n        ControlElements.prototype.onElementFocus = function (event) {\n            var vector = event.detail;\n            var x = (vector.x + vector.width < this.elementWidth ? 0 : vector.x - vector.width);\n            x *= -1;\n            this.updateRowColIndexFromVector(vector);\n            this.listScrollController.setScroll(x, 0);\n        };\n        ControlElements.prototype.updateRowColIndexFromVector = function (vector) {\n            for (var i = 0; i < this.tableableRows.length; i++) {\n                var items = this.tableableRows[i];\n                for (var j = 0; j < items.length; j++) {\n                    var item = items[j];\n                    if (item == vector.el) {\n                        this.rowIndex = i;\n                        this.columnIndex = j;\n                        break;\n                    }\n                }\n            }\n        };\n        ControlElements.prototype.onChatReponsesUpdated = function (event) {\n            var _this = this;\n            clearTimeout(this.animateInFromResponseTimer);\n            // only show when user response\n            if (!event.detail.currentResponse.isRobotResponse) {\n                this.animateInFromResponseTimer = setTimeout(function () {\n                    _this.animateElementsIn();\n                }, this.cfReference.uiOptions.controlElementsInAnimationDelay);\n            }\n        };\n        ControlElements.prototype.onListChanged = function () {\n            var _this = this;\n            // reflow\n            this.list.offsetHeight;\n            requestAnimationFrame(function () {\n                cf.ConversationalForm.illustrateFlow(_this, \""dispatch\"", cf.ControlElementsEvents.CHANGED);\n                _this.eventTarget.dispatchEvent(new CustomEvent(cf.ControlElementsEvents.CHANGED));\n            });\n        };\n        ControlElements.prototype.onUserInputKeyChange = function (event) {\n            if (this.ignoreKeyboardInput) {\n                this.ignoreKeyboardInput = false;\n                return;\n            }\n            var dto = event.detail;\n            var userInput = dto.dto.input;\n            if (this.active) {\n                var isNavKey = [cf.Dictionary.keyCodes[\""left\""], cf.Dictionary.keyCodes[\""right\""], cf.Dictionary.keyCodes[\""down\""], cf.Dictionary.keyCodes[\""up\""]].indexOf(dto.keyCode) != -1;\n                var shouldFilter = dto.inputFieldActive && !isNavKey;\n                if (shouldFilter) {\n                    // input field is active, so we should filter..\n                    var dto_1 = event.detail.dto;\n                    var inputValue = dto_1.input.getInputValue();\n                    this.filterElementsFrom(inputValue);\n                }\n                else {\n                    if (dto.keyCode == cf.Dictionary.keyCodes[\""left\""]) {\n                        this.columnIndex--;\n                    }\n                    else if (dto.keyCode == cf.Dictionary.keyCodes[\""right\""]) {\n                        this.columnIndex++;\n                    }\n                    else if (dto.keyCode == cf.Dictionary.keyCodes[\""down\""]) {\n                        this.updateRowIndex(1);\n                    }\n                    else if (dto.keyCode == cf.Dictionary.keyCodes[\""up\""]) {\n                        this.updateRowIndex(-1);\n                    }\n                    else if (dto.keyCode == cf.Dictionary.keyCodes[\""enter\""] || dto.keyCode == cf.Dictionary.keyCodes[\""space\""]) {\n                        if (this.tableableRows[this.rowIndex] && this.tableableRows[this.rowIndex][this.columnIndex]) {\n                            this.tableableRows[this.rowIndex][this.columnIndex].el.click();\n                        }\n                        else if (this.tableableRows[0] && this.tableableRows[0].length == 1) {\n                            // this is when only one element in a filter, then we click it!\n                            this.tableableRows[0][0].el.click();\n                        }\n                    }\n                    if (!this.validateRowColIndexes()) {\n                        userInput.setFocusOnInput();\n                    }\n                }\n            }\n            if (!userInput.active && this.validateRowColIndexes() && this.tableableRows && (this.rowIndex == 0 || this.rowIndex == 1)) {\n                this.tableableRows[this.rowIndex][this.columnIndex].focus = true;\n            }\n            else if (!userInput.active) {\n                userInput.setFocusOnInput();\n            }\n        };\n        ControlElements.prototype.validateRowColIndexes = function () {\n            var maxRowIndex = (this.el.classList.contains(\""two-row\"") ? 1 : 0);\n            if (this.rowIndex != -1 && this.tableableRows[this.rowIndex]) {\n                // columnIndex is only valid if rowIndex is valid\n                if (this.columnIndex < 0) {\n                    this.columnIndex = this.tableableRows[this.rowIndex].length - 1;\n                }\n                if (this.columnIndex > this.tableableRows[this.rowIndex].length - 1) {\n                    this.columnIndex = 0;\n                }\n                return true;\n            }\n            else {\n                this.resetTabList();\n                return false;\n            }\n        };\n        ControlElements.prototype.updateRowIndex = function (direction) {\n            var oldRowIndex = this.rowIndex;\n            this.rowIndex += direction;\n            if (this.tableableRows[this.rowIndex]) {\n                // when row index is changed we need to find the closest column element, we cannot expect them to be indexly aligned\n                var centerX = this.tableableRows[oldRowIndex] ? this.tableableRows[oldRowIndex][this.columnIndex].positionVector.centerX : 0;\n                var items = this.tableableRows[this.rowIndex];\n                var currentDistance = 10000000000000;\n                for (var i = 0; i < items.length; i++) {\n                    var element = items[i];\n                    if (currentDistance > Math.abs(centerX - element.positionVector.centerX)) {\n                        currentDistance = Math.abs(centerX - element.positionVector.centerX);\n                        this.columnIndex = i;\n                    }\n                }\n            }\n        };\n        ControlElements.prototype.resetTabList = function () {\n            this.rowIndex = -1;\n            this.columnIndex = -1;\n        };\n        ControlElements.prototype.onUserInputUpdate = function (event) {\n            this.el.classList.remove(\""animate-in\"");\n            this.infoElement.classList.remove(\""show\"");\n            if (this.elements) {\n                var elements = this.getElements();\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    element.animateOut();\n                }\n            }\n        };\n        ControlElements.prototype.filterElementsFrom = function (value) {\n            var inputValuesLowerCase = value.toLowerCase().split(\"" \"");\n            if (inputValuesLowerCase.indexOf(\""\"") != -1)\n                inputValuesLowerCase.splice(inputValuesLowerCase.indexOf(\""\""), 1);\n            var elements = this.getElements();\n            if (elements.length > 1) {\n                // the type is not strong with this one..\n                var itemsVisible = [];\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    element.highlight = false;\n                    var elementVisibility = true;\n                    // check for all words of input\n                    for (var i_1 = 0; i_1 < inputValuesLowerCase.length; i_1++) {\n                        var inputWord = inputValuesLowerCase[i_1];\n                        if (elementVisibility) {\n                            elementVisibility = element.value.toLowerCase().indexOf(inputWord) != -1;\n                        }\n                    }\n                    // set element visibility.\n                    element.visible = elementVisibility;\n                    if (elementVisibility && element.visible)\n                        itemsVisible.push(element);\n                }\n                // set feedback text for filter..\n                this.infoElement.innerHTML = itemsVisible.length == 0 ? cf.Dictionary.get(\""input-no-filter\"").split(\""{input-value}\"").join(value) : \""\"";\n                if (itemsVisible.length == 0) {\n                    this.infoElement.classList.add(\""show\"");\n                }\n                else {\n                    this.infoElement.classList.remove(\""show\"");\n                }\n                // crude way of checking if list has changed...\n                var hasListChanged = this.filterListNumberOfVisible != itemsVisible.length;\n                if (hasListChanged) {\n                    this.animateElementsIn();\n                }\n                this.filterListNumberOfVisible = itemsVisible.length;\n                // highlight first item\n                if (value != \""\"" && this.filterListNumberOfVisible > 0)\n                    itemsVisible[0].highlight = true;\n            }\n        };\n        ControlElements.prototype.clickOnHighlighted = function () {\n            var elements = this.getElements();\n            for (var i = 0; i < elements.length; i++) {\n                var element = elements[i];\n                if (element.highlight) {\n                    element.el.click();\n                    break;\n                }\n            }\n        };\n        ControlElements.prototype.animateElementsIn = function () {\n            var _this = this;\n            if (this.elements.length > 0) {\n                this.resize();\n                // this.el.style.transition = 'height 0.35s ease-out 0.2s';\n                this.list.style.height = '0px';\n                setTimeout(function () {\n                    _this.list.style.height = _this.list.scrollHeight + 'px';\n                    var elements = _this.getElements();\n                    setTimeout(function () {\n                        if (elements.length > 0) {\n                            if (!_this.el.classList.contains(\""animate-in\""))\n                                _this.el.classList.add(\""animate-in\"");\n                            for (var i = 0; i < elements.length; i++) {\n                                var element = elements[i];\n                                element.animateIn();\n                            }\n                        }\n                        document.querySelector('.scrollableInner').classList.remove('scroll');\n                        // Check if chatlist is scrolled to the bottom - if not we need to do it manually (pertains to Chrome)\n                        var scrollContainer = document.querySelector('scrollable');\n                        if (scrollContainer.scrollTop < scrollContainer.scrollHeight) {\n                            scrollContainer.scrollTop = scrollContainer.scrollHeight;\n                        }\n                    }, 300);\n                }, 200);\n            }\n        };\n        ControlElements.prototype.getElements = function () {\n            if (this.elements && this.elements.length > 0 && this.elements[0].type == \""OptionsList\"")\n                return this.elements[0].elements;\n            return this.elements;\n        };\n        /**\n        * @name buildTabableRows\n        * build the tabable array index\n        */\n        ControlElements.prototype.buildTabableRows = function () {\n            this.tableableRows = [];\n            this.resetTabList();\n            var elements = this.getElements();\n            if (this.el.classList.contains(\""two-row\"")) {\n                // two rows\n                this.tableableRows[0] = [];\n                this.tableableRows[1] = [];\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    if (element.visible) {\n                        // crude way of checking if element is top row or bottom row..\n                        if (element.positionVector.y < 30)\n                            this.tableableRows[0].push(element);\n                        else\n                            this.tableableRows[1].push(element);\n                    }\n                }\n            }\n            else {\n                // single row\n                this.tableableRows[0] = [];\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    if (element.visible)\n                        this.tableableRows[0].push(element);\n                }\n            }\n        };\n        ControlElements.prototype.resetAfterErrorMessage = function () {\n            this.currentControlElement = null;\n            this.disabled = false;\n        };\n        ControlElements.prototype.focusFrom = function (angle) {\n            if (!this.tableableRows)\n                return;\n            this.columnIndex = 0;\n            if (angle == \""bottom\"") {\n                this.rowIndex = this.el.classList.contains(\""two-row\"") ? 1 : 0;\n            }\n            else if (angle == \""top\"") {\n                this.rowIndex = 0;\n            }\n            if (this.tableableRows[this.rowIndex] && this.tableableRows[this.rowIndex][this.columnIndex]) {\n                this.ignoreKeyboardInput = true;\n                this.tableableRows[this.rowIndex][this.columnIndex].focus = true;\n            }\n            else {\n                this.resetTabList();\n            }\n        };\n        ControlElements.prototype.updateStateOnElementsFromTag = function (tag) {\n            for (var index = 0; index < this.elements.length; index++) {\n                var element = this.elements[index];\n                if (element.referenceTag == tag) {\n                    this.updateStateOnElements(element);\n                    break;\n                }\n            }\n        };\n        ControlElements.prototype.updateStateOnElements = function (controlElement) {\n            this.currentControlElement = controlElement;\n            if (this.currentControlElement.type == \""RadioButton\"") {\n                // uncheck other radio buttons...\n                var elements = this.getElements();\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    if (element != controlElement) {\n                        element.checked = false;\n                    }\n                    else {\n                        element.checked = true;\n                    }\n                }\n            }\n            else if (this.currentControlElement.type == \""CheckboxButton\"") {\n                // change only the changed input\n                var elements = this.getElements();\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    if (element == controlElement) {\n                        var isChecked = element.referenceTag.domElement.checked;\n                        element.checked = isChecked;\n                    }\n                }\n            }\n        };\n        ControlElements.prototype.reset = function () {\n            this.infoElement.classList.remove(\""show\"");\n            this.el.classList.remove(\""one-row\"");\n            this.el.classList.remove(\""two-row\"");\n            // this.el.style.transition = 'height 0.35s ease-out 0.2s';\n            this.list.style.height = '0px';\n        };\n        ControlElements.prototype.getElement = function (index) {\n            return this.elements[index];\n        };\n        ControlElements.prototype.getDTO = function () {\n            var dto = {\n                text: undefined,\n                controlElements: [],\n            };\n            // generate text value for ChatReponse\n            if (this.elements && this.elements.length > 0) {\n                switch (this.elements[0].type) {\n                    case \""CheckboxButton\"":\n                        var numChecked = 0; // check if more than 1 is checked.\n                        var values = [];\n                        for (var i = 0; i < this.elements.length; i++) {\n                            var element_1 = this.elements[i];\n                            if (element_1.checked) {\n                                if (numChecked++ > 1)\n                                    break;\n                            }\n                        }\n                        for (var i = 0; i < this.elements.length; i++) {\n                            var element_2 = this.elements[i];\n                            if (element_2.checked) {\n                                if (numChecked > 1)\n                                    element_2.partOfSeveralChoices = true;\n                                values.push(element_2.value);\n                            }\n                            dto.controlElements.push(element_2);\n                        }\n                        dto.text = cf.Dictionary.parseAndGetMultiValueString(values);\n                        break;\n                    case \""RadioButton\"":\n                        for (var i = 0; i < this.elements.length; i++) {\n                            var element_3 = this.elements[i];\n                            if (element_3.checked) {\n                                dto.text = element_3.value;\n                            }\n                            dto.controlElements.push(element_3);\n                        }\n                        break;\n                    case \""OptionsList\"":\n                        var element = this.elements[0];\n                        dto.controlElements = element.getValue();\n                        var values = [];\n                        if (dto.controlElements && dto.controlElements[0]) {\n                            for (var i_2 = 0; i_2 < dto.controlElements.length; i_2++) {\n                                var element_4 = dto.controlElements[i_2];\n                                values.push(dto.controlElements[i_2].value);\n                            }\n                        }\n                        // after value is created then set to all elements\n                        dto.controlElements = element.elements;\n                        dto.text = cf.Dictionary.parseAndGetMultiValueString(values);\n                        break;\n                    case \""UploadFileUI\"":\n                        dto.text = this.elements[0].getFilesAsString(); //Dictionary.parseAndGetMultiValueString(values);\n                        dto.controlElements.push(this.elements[0]);\n                        break;\n                }\n            }\n            return dto;\n        };\n        ControlElements.prototype.clearTagsAndReset = function () {\n            this.reset();\n            if (this.elements) {\n                while (this.elements.length > 0) {\n                    this.elements.pop().dealloc();\n                }\n            }\n            this.list.innerHTML = \""\"";\n            this.onListChanged();\n        };\n        ControlElements.prototype.buildTags = function (tags) {\n            var _this = this;\n            this.disabled = false;\n            var topList = this.el.parentNode.getElementsByTagName(\""ul\"")[0];\n            var bottomList = this.el.parentNode.getElementsByTagName(\""ul\"")[1];\n            // remove old elements\n            this.clearTagsAndReset();\n            this.elements = [];\n            for (var i = 0; i < tags.length; i++) {\n                var tag = tags[i];\n                switch (tag.type) {\n                    case \""radio\"":\n                        this.elements.push(new cf.RadioButton({\n                            referenceTag: tag,\n                            eventTarget: this.eventTarget\n                        }));\n                        break;\n                    case \""checkbox\"":\n                        this.elements.push(new cf.CheckboxButton({\n                            referenceTag: tag,\n                            eventTarget: this.eventTarget\n                        }));\n                        break;\n                    case \""select\"":\n                        this.elements.push(new cf.OptionsList({\n                            referenceTag: tag,\n                            context: this.list,\n                            eventTarget: this.eventTarget\n                        }));\n                        break;\n                    case \""input\"":\n                    default:\n                        if (tag.type == \""file\"") {\n                            this.elements.push(new cf.UploadFileUI({\n                                referenceTag: tag,\n                                eventTarget: this.eventTarget\n                            }));\n                        }\n                        // nothing to add.\n                        break;\n                }\n                if (tag.type != \""select\"" && this.elements.length > 0) {\n                    var element = this.elements[this.elements.length - 1];\n                    this.list.appendChild(element.el);\n                }\n            }\n            var isElementsOptionsList = this.elements[0] && this.elements[0].type == \""OptionsList\"";\n            if (isElementsOptionsList) {\n                this.filterListNumberOfVisible = this.elements[0].elements.length;\n            }\n            else {\n                this.filterListNumberOfVisible = tags.length;\n            }\n            new Promise(function (resolve, reject) { return _this.resize(resolve, reject); }).then(function () {\n                var h = _this.list.offsetHeight; //this.el.classList.contains(\""one-row\"") ? 52 : this.el.classList.contains(\""two-row\"") ? 102 : 0;\n                var controlElementsAddedDTO = {\n                    height: h,\n                };\n                _this.onListChanged();\n                cf.ConversationalForm.illustrateFlow(_this, \""dispatch\"", cf.UserInputEvents.CONTROL_ELEMENTS_ADDED, controlElementsAddedDTO);\n                _this.eventTarget.dispatchEvent(new CustomEvent(cf.UserInputEvents.CONTROL_ELEMENTS_ADDED, {\n                    detail: controlElementsAddedDTO\n                }));\n            });\n        };\n        ControlElements.prototype.onResize = function (event) {\n            this.resize();\n        };\n        ControlElements.prototype.resize = function (resolve, reject) {\n            // scrollbar things\n            // Element.offsetWidth - Element.clientWidth\n            this.list.style.width = \""100%\"";\n            this.el.classList.remove(\""resized\"");\n            this.el.classList.remove(\""one-row\"");\n            this.el.classList.remove(\""two-row\"");\n            this.elementWidth = 0;\n            this.listWidth = 0;\n            var elements = this.getElements();\n            if (elements && elements.length > 0) {\n                var listWidthValues = [];\n                var listWidthValues2 = [];\n                var containsElementWithImage = false;\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    if (element.visible) {\n                        element.calcPosition();\n                        this.listWidth += element.positionVector.width;\n                        listWidthValues.push(element.positionVector.x + element.positionVector.width);\n                        listWidthValues2.push(element);\n                    }\n                    if (element.hasImage())\n                        containsElementWithImage = true;\n                }\n                var elOffsetWidth = this.el.offsetWidth;\n                var isListWidthOverElementWidth = this.listWidth > elOffsetWidth;\n                if (isListWidthOverElementWidth && !containsElementWithImage) {\n                    this.el.classList.add(\""two-row\"");\n                    this.listWidth = Math.max(elOffsetWidth, Math.round((listWidthValues[Math.floor(listWidthValues.length / 2)]) + 50));\n                    this.list.style.width = this.listWidth + \""px\"";\n                }\n                else {\n                    this.el.classList.add(\""one-row\"");\n                }\n                // recalc after LIST classes has been added\n                for (var i = 0; i < elements.length; i++) {\n                    var element = elements[i];\n                    if (element.visible) {\n                        element.calcPosition();\n                    }\n                }\n                // check again after classes are set.\n                elOffsetWidth = this.el.offsetWidth;\n                isListWidthOverElementWidth = this.listWidth > elOffsetWidth;\n                // sort the list so we can set tabIndex properly\n                var elementsCopyForSorting = elements.slice();\n                var tabIndexFilteredElements = elementsCopyForSorting.sort(function (a, b) {\n                    var aOverB = a.positionVector.y > b.positionVector.y;\n                    return a.positionVector.x == b.positionVector.x ? (aOverB ? 1 : -1) : a.positionVector.x < b.positionVector.x ? -1 : 1;\n                });\n                var tabIndex = 0;\n                for (var i = 0; i < tabIndexFilteredElements.length; i++) {\n                    var element = tabIndexFilteredElements[i];\n                    if (element.visible) {\n                        //tabindex 1 are the UserTextInput element\n                        element.tabIndex = 2 + (tabIndex++);\n                    }\n                    else {\n                        element.tabIndex = -1;\n                    }\n                }\n                // toggle nav button visiblity\n                if (isListWidthOverElementWidth) {\n                    this.el.classList.remove(\""hide-nav-buttons\"");\n                }\n                else {\n                    this.el.classList.add(\""hide-nav-buttons\"");\n                }\n                this.elementWidth = elOffsetWidth;\n                // resize scroll\n                this.listScrollController.resize(this.listWidth, this.elementWidth);\n                this.el.classList.add(\""resized\"");\n                this.eventTarget.dispatchEvent(new CustomEvent(cf.ControlElementsEvents.ON_RESIZE));\n                if (resolve) {\n                    // only build when there is something to resolve\n                    this.buildTabableRows();\n                    resolve();\n                }\n            }\n        };\n        ControlElements.prototype.dealloc = function () {\n            this.currentControlElement = null;\n            this.tableableRows = null;\n            window.removeEventListener('resize', this.onResizeCallback, false);\n            this.onResizeCallback = null;\n            this.el.removeEventListener('scroll', this.onScrollCallback, false);\n            this.onScrollCallback = null;\n            this.eventTarget.removeEventListener(cf.ControlElementEvents.ON_FOCUS, this.onElementFocusCallback, false);\n            this.onElementFocusCallback = null;\n            this.eventTarget.removeEventListener(cf.ChatListEvents.CHATLIST_UPDATED, this.onChatReponsesUpdatedCallback, false);\n            this.onChatReponsesUpdatedCallback = null;\n            this.eventTarget.removeEventListener(cf.UserInputEvents.KEY_CHANGE, this.onUserInputKeyChangeCallback, false);\n            this.onUserInputKeyChangeCallback = null;\n            this.eventTarget.removeEventListener(cf.FlowEvents.USER_INPUT_UPDATE, this.userInputUpdateCallback, false);\n            this.userInputUpdateCallback = null;\n            this.eventTarget.removeEventListener(cf.ControlElementEvents.ON_LOADED, this.onElementLoadedCallback, false);\n            this.onElementLoadedCallback = null;\n            this.listScrollController.dealloc();\n        };\n        return ControlElements;\n    }());\n    cf.ControlElements = ControlElements;\n})(cf || (cf = {}));\n\n/// <reference path=\""../logic/Helpers.ts\""/>\n/// <reference path=\""../logic/EventDispatcher.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    var ScrollController = /** @class */ (function () {\n        function ScrollController(options) {\n            this.listWidth = 0;\n            this.visibleAreaWidth = 0;\n            this.max = 0;\n            this.interacting = false;\n            this.x = 0;\n            this.xTarget = 0;\n            this.startX = 0;\n            this.startXTarget = 0;\n            this.mouseSpeed = 0;\n            this.mouseSpeedTarget = 0;\n            this.direction = 0;\n            this.directionTarget = 0;\n            this.inputAccerlation = 0;\n            this.inputAccerlationTarget = 0;\n            this.interactionListener = options.interactionListener;\n            this.eventTarget = options.eventTarget;\n            this.listToScroll = options.listToScroll;\n            this.prevButton = options.listNavButtons[0];\n            this.nextButton = options.listNavButtons[1];\n            this.onListNavButtonsClickCallback = this.onListNavButtonsClick.bind(this);\n            this.prevButton.addEventListener(\""click\"", this.onListNavButtonsClickCallback, false);\n            this.nextButton.addEventListener(\""click\"", this.onListNavButtonsClickCallback, false);\n            this.documentLeaveCallback = this.documentLeave.bind(this);\n            this.onInteractStartCallback = this.onInteractStart.bind(this);\n            this.onInteractEndCallback = this.onInteractEnd.bind(this);\n            this.onInteractMoveCallback = this.onInteractMove.bind(this);\n            document.addEventListener(\""mouseleave\"", this.documentLeaveCallback, false);\n            document.addEventListener(cf.Helpers.getMouseEvent(\""mouseup\""), this.documentLeaveCallback, false);\n            this.interactionListener.addEventListener(cf.Helpers.getMouseEvent(\""mousedown\""), this.onInteractStartCallback, false);\n            this.interactionListener.addEventListener(cf.Helpers.getMouseEvent(\""mouseup\""), this.onInteractEndCallback, false);\n            this.interactionListener.addEventListener(cf.Helpers.getMouseEvent(\""mousemove\""), this.onInteractMoveCallback, false);\n        }\n        ScrollController.prototype.onListNavButtonsClick = function (event) {\n            var dirClick = event.currentTarget.getAttribute(\""direction\"");\n            this.pushDirection(dirClick == \""next\"" ? -1 : 1);\n        };\n        ScrollController.prototype.documentLeave = function (event) {\n            this.onInteractEnd(event);\n        };\n        ScrollController.prototype.onInteractStart = function (event) {\n            var vector = cf.Helpers.getXYFromMouseTouchEvent(event);\n            this.interacting = true;\n            this.startX = vector.x;\n            this.startXTarget = this.startX;\n            this.inputAccerlation = 0;\n            this.render();\n        };\n        ScrollController.prototype.onInteractEnd = function (event) {\n            this.interacting = false;\n        };\n        ScrollController.prototype.onInteractMove = function (event) {\n            if (this.interacting) {\n                var vector = cf.Helpers.getXYFromMouseTouchEvent(event);\n                var newAcc = vector.x - this.startX;\n                var magnifier = 6.2;\n                this.inputAccerlationTarget = newAcc * magnifier;\n                this.directionTarget = this.inputAccerlationTarget < 0 ? -1 : 1;\n                this.startXTarget = vector.x;\n            }\n        };\n        ScrollController.prototype.render = function () {\n            var _this = this;\n            if (this.rAF)\n                cancelAnimationFrame(this.rAF);\n            // normalise startX\n            this.startX += (this.startXTarget - this.startX) * 0.2;\n            // animate accerlaration\n            this.inputAccerlation += (this.inputAccerlationTarget - this.inputAccerlation) * (this.interacting ? Math.min(ScrollController.acceleration + 0.1, 1) : ScrollController.acceleration);\n            var accDamping = 0.25;\n            this.inputAccerlationTarget *= accDamping;\n            // animate directions\n            this.direction += (this.directionTarget - this.direction) * 0.2;\n            // extra extra\n            this.mouseSpeed += (this.mouseSpeedTarget - this.mouseSpeed) * 0.2;\n            this.direction += this.mouseSpeed;\n            // animate x\n            this.xTarget += this.inputAccerlation * 0.05;\n            // bounce back when over\n            if (this.xTarget > 0)\n                this.xTarget += (0 - this.xTarget) * cf.Helpers.lerp(ScrollController.acceleration, 0.3, 0.8);\n            if (this.xTarget < this.max)\n                this.xTarget += (this.max - this.xTarget) * cf.Helpers.lerp(ScrollController.acceleration, 0.3, 0.8);\n            this.x += (this.xTarget - this.x) * 0.4;\n            // toggle visibility on nav arrows\n            var xRounded = Math.round(this.x);\n            if (xRounded < 0) {\n                if (!this.prevButton.classList.contains(\""active\""))\n                    this.prevButton.classList.add(\""active\"");\n                if (!this.prevButton.classList.contains(\""cf-gradient\""))\n                    this.prevButton.classList.add(\""cf-gradient\"");\n            }\n            if (xRounded == 0) {\n                if (this.prevButton.classList.contains(\""active\""))\n                    this.prevButton.classList.remove(\""active\"");\n                if (this.prevButton.classList.contains(\""cf-gradient\""))\n                    this.prevButton.classList.remove(\""cf-gradient\"");\n            }\n            if (xRounded > this.max) {\n                if (!this.nextButton.classList.contains(\""active\""))\n                    this.nextButton.classList.add(\""active\"");\n                if (!this.nextButton.classList.contains(\""cf-gradient\""))\n                    this.nextButton.classList.add(\""cf-gradient\"");\n            }\n            if (xRounded <= this.max) {\n                if (this.nextButton.classList.contains(\""active\""))\n                    this.nextButton.classList.remove(\""active\"");\n                if (this.nextButton.classList.contains(\""cf-gradient\""))\n                    this.nextButton.classList.remove(\""cf-gradient\"");\n            }\n            // set css transforms\n            var xx = this.x;\n            cf.Helpers.setTransform(this.listToScroll, \""translateX(\"" + xx + \""px)\"");\n            // cycle render\n            if (this.interacting || (Math.abs(this.x - this.xTarget) > 0.02 && !this.interacting))\n                this.rAF = window.requestAnimationFrame(function () { return _this.render(); });\n        };\n        ScrollController.prototype.setScroll = function (x, y) {\n            this.xTarget = this.visibleAreaWidth == this.listWidth ? 0 : x;\n            this.render();\n        };\n        ScrollController.prototype.pushDirection = function (dir) {\n            this.inputAccerlationTarget += (5000) * dir;\n            this.render();\n        };\n        ScrollController.prototype.dealloc = function () {\n            this.prevButton.removeEventListener(\""click\"", this.onListNavButtonsClickCallback, false);\n            this.nextButton.removeEventListener(\""click\"", this.onListNavButtonsClickCallback, false);\n            this.onListNavButtonsClickCallback = null;\n            this.prevButton = null;\n            this.nextButton = null;\n            document.removeEventListener(\""mouseleave\"", this.documentLeaveCallback, false);\n            document.removeEventListener(cf.Helpers.getMouseEvent(\""mouseup\""), this.documentLeaveCallback, false);\n            this.interactionListener.removeEventListener(cf.Helpers.getMouseEvent(\""mousedown\""), this.onInteractStartCallback, false);\n            this.interactionListener.removeEventListener(cf.Helpers.getMouseEvent(\""mouseup\""), this.onInteractEndCallback, false);\n            this.interactionListener.removeEventListener(cf.Helpers.getMouseEvent(\""mousemove\""), this.onInteractMoveCallback, false);\n            this.documentLeaveCallback = null;\n            this.onInteractStartCallback = null;\n            this.onInteractEndCallback = null;\n            this.onInteractMoveCallback = null;\n        };\n        ScrollController.prototype.reset = function () {\n            this.interacting = false;\n            this.startX = 0;\n            this.startXTarget = this.startX;\n            this.inputAccerlation = 0;\n            this.x = 0;\n            this.xTarget = 0;\n            cf.Helpers.setTransform(this.listToScroll, \""translateX(0px)\"");\n            this.render();\n            this.prevButton.classList.remove(\""active\"");\n            this.nextButton.classList.remove(\""active\"");\n        };\n        ScrollController.prototype.resize = function (listWidth, visibleAreaWidth) {\n            this.reset();\n            this.visibleAreaWidth = visibleAreaWidth;\n            this.listWidth = Math.max(visibleAreaWidth, listWidth);\n            this.max = (this.listWidth - this.visibleAreaWidth) * -1;\n            this.render();\n        };\n        ScrollController.acceleration = 0.1;\n        return ScrollController;\n    }());\n    cf.ScrollController = ScrollController;\n})(cf || (cf = {}));\n\n/// <reference path=\""../logic/FlowManager.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var ProgressBar = /** @class */ (function () {\n        function ProgressBar(options) {\n            var _this = this;\n            this.flowUpdateCallback = this.onFlowUpdate.bind(this);\n            this.eventTarget = options.eventTarget;\n            this.eventTarget.addEventListener(cf.FlowEvents.FLOW_UPDATE, this.flowUpdateCallback, false);\n            this.eventTarget.addEventListener(cf.FlowEvents.FORM_SUBMIT, function () { return _this.setWidth(100); }, false);\n            this.el = document.createElement(\""div\"");\n            this.el.className = \""cf-progressBar\"";\n            this.bar = document.createElement(\""div\"");\n            this.bar.className = 'bar';\n            this.el.appendChild(this.bar);\n            setTimeout(function () { return _this.init(); }, 800);\n        }\n        ProgressBar.prototype.init = function () {\n            this.el.classList.add('show');\n        };\n        ProgressBar.prototype.onFlowUpdate = function (event) {\n            this.setWidth(event.detail.step / event.detail.maxSteps * 100);\n        };\n        ProgressBar.prototype.setWidth = function (percentage) {\n            this.bar.style.width = percentage + \""%\"";\n        };\n        ProgressBar.prototype.dealloc = function () {\n            this.eventTarget.removeEventListener(cf.FlowEvents.FLOW_UPDATE, this.flowUpdateCallback, false);\n            this.flowUpdateCallback = null;\n        };\n        return ProgressBar;\n    }());\n    cf.ProgressBar = ProgressBar;\n})(cf || (cf = {}));\n\n/// <reference path=\""../logic/Helpers.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    // class\n    var Dictionary = /** @class */ (function () {\n        function Dictionary(options) {\n            // can be overwrittenMicrophone error\n            this.data = {\n                \""user-image\"": 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik0xMDAgNTVMMTM4Ljk3MSAxMjIuNUg2MS4wMjg5TDEwMCA1NVoiIGZpbGw9IiNFNUU2RUEiLz4KPC9zdmc+Cg==',\n                \""entry-not-found\"": \""Dictionary item not found.\"",\n                \""awaiting-mic-permission\"": \""Awaiting mic permission\"",\n                \""user-audio-reponse-invalid\"": \""I didn't get that, try again.\"",\n                \""microphone-terminal-error\"": \""Audio input not supported\"",\n                \""input-placeholder\"": \""Type your answer here ...\"",\n                \""group-placeholder\"": \""Type to filter ...\"",\n                \""input-placeholder-error\"": \""Your input is not correct ...\"",\n                \""input-placeholder-required\"": \""Input is required ...\"",\n                \""input-placeholder-file-error\"": \""File upload failed ...\"",\n                \""input-placeholder-file-size-error\"": \""File size too big ...\"",\n                \""input-no-filter\"": \""No results found for ‛{input-value}‛\"",\n                \""user-reponse-and\"": \"" and \"",\n                \""user-reponse-missing\"": \""Missing input ...\"",\n                \""user-reponse-missing-group\"": \""Nothing selected ...\"",\n                \""general\"": \""General type1||General type2\"",\n                \""icon-type-file\"": \""<svg class='cf-icon-file' viewBox='0 0 10 14' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><g stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'><g transform='translate(-756.000000, -549.000000)' fill='#0D83FF'><g transform='translate(736.000000, 127.000000)'><g transform='translate(0.000000, 406.000000)'><polygon points='20 16 26.0030799 16 30 19.99994 30 30 20 30'></polygon></g></g></g></g></svg>\"",\n            };\n            // can be overwriten\n            this.robotData = {\n                \""robot-image\"": 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjRTVFNkVBIi8+CjxyZWN0IHg9IjY2IiB5PSI2NiIgd2lkdGg9IjY4IiBoZWlnaHQ9IjY4IiBmaWxsPSIjMzAzMDMwIi8+Cjwvc3ZnPgo=',\n                \""input\"": \""Please write some text.\"",\n                \""text\"": \""Please write some text.\"",\n                \""textarea\"": \""Please write some text.\"",\n                \""checkbox\"": \""Select as many as you want.\"",\n                \""name\"": \""What's your name?\"",\n                \""email\"": \""Need your e-mail.\"",\n                \""password\"": \""Please provide password\"",\n                \""tel\"": \""What's your phone number?\"",\n                \""radio\"": \""I need you to select one of these.\"",\n                \""select\"": \""Choose any of these options.\"",\n                \""file\"": \""Select a file to upload.\"",\n                \""general\"": \""General1||General2||General3..\""\n            };\n            Dictionary.instance = this;\n            this.version = options.version;\n            // overwrite data if defined \n            if (options && options.data)\n                this.data = this.validateAndSetNewData(options.data, this.data);\n            // overwrite user image\n            if (options.userImage) {\n                this.data[\""user-image\""] = options.userImage;\n            }\n            else {\n                this.data['user-image'] = this.data['user-image'];\n            }\n            // overwrite robot image\n            if (options.robotImage) {\n                this.robotData[\""robot-image\""] = options.robotImage;\n            }\n            else {\n                this.robotData['robot-image'] = this.robotData['robot-image'];\n            }\n            // overwrite robot questions if defined\n            if (options && options.robotData)\n                this.robotData = this.validateAndSetNewData(options.robotData, this.robotData);\n        }\n        Dictionary.get = function (id) {\n            var ins = Dictionary.instance;\n            var value = ins.data[id];\n            if (!value) {\n                value = ins.data[\""entry-not-found\""];\n            }\n            else {\n                var values = cf.Helpers.getValuesOfBars(value);\n                value = values[Math.floor(Math.random() * values.length)];\n            }\n            return value;\n        };\n        /**\n        * @name set\n        * set a dictionary value\n        *\tid: string, id of the value to update\n        *\ttype: string, \""human\"" || \""robot\""\n        *\tvalue: string, value to be inserted\n        */\n        Dictionary.set = function (id, type, value) {\n            var ins = Dictionary.instance;\n            var obj = type == \""robot\"" ? ins.robotData : ins.data;\n            obj[id] = value;\n            return obj[id];\n        };\n        Dictionary.getRobotResponse = function (tagType) {\n            var ins = Dictionary.instance;\n            var value = ins.robotData[tagType];\n            if (!value) {\n                // value not found, so pick a general one\n                var generals = cf.Helpers.getValuesOfBars(ins.robotData[\""general\""]);\n                value = generals[Math.floor(Math.random() * generals.length)];\n            }\n            else {\n                var values = cf.Helpers.getValuesOfBars(value);\n                value = values[Math.floor(Math.random() * values.length)];\n            }\n            return value;\n        };\n        Dictionary.parseAndGetMultiValueString = function (arr) {\n            // check ControlElement.ts for value(s)\n            var value = \""\"";\n            for (var i = 0; i < arr.length; i++) {\n                var str = arr[i];\n                var sym = (arr.length > 1 && i == arr.length - 2 ? Dictionary.get(\""user-reponse-and\"") : \"", \"");\n                value += str + (i < arr.length - 1 ? sym : \""\"");\n            }\n            return value;\n        };\n        Dictionary.prototype.validateAndSetNewData = function (newData, originalDataObject) {\n            for (var key in originalDataObject) {\n                if (!newData[key]) {\n                    console.warn(\""Conversational Form Dictionary warning, '\"" + key + \""' value is undefined, mapping '\"" + key + \""' to default value. See Dictionary.ts for keys.\"");\n                    newData[key] = originalDataObject[key];\n                }\n            }\n            return newData;\n        };\n        Dictionary.keyCodes = {\n            \""left\"": 37,\n            \""right\"": 39,\n            \""down\"": 40,\n            \""up\"": 38,\n            \""backspace\"": 8,\n            \""enter\"": 13,\n            \""space\"": 32,\n            \""shift\"": 16,\n            \""tab\"": 9,\n        };\n        return Dictionary;\n    }());\n    cf.Dictionary = Dictionary;\n})(cf || (cf = {}));\n\n/// <reference path=\""../data/Dictionary.ts\""/>\n/// <reference path=\""InputTag.ts\""/>\n/// <reference path=\""ButtonTag.ts\""/>\n/// <reference path=\""SelectTag.ts\""/>\n/// <reference path=\""OptionTag.ts\""/>\n/// <reference path=\""CfRobotMessageTag.ts\""/>\n/// <reference path=\""../ConversationalForm.ts\""/>\n/// <reference path=\""../logic/EventDispatcher.ts\""/>\n/// <reference path=\""../parsing/TagsParser.ts\""/>\n// basic tag from form logic\n// types:\n// radio\n// text\n// email\n// tel\n// password\n// checkbox\n// radio\n// select\n// button\n// namespace\nvar cf;\n(function (cf) {\n    cf.TagEvents = {\n        ORIGINAL_ELEMENT_CHANGED: \""cf-tag-dom-element-changed\""\n    };\n    // class\n    var Tag = /** @class */ (function () {\n        function Tag(options) {\n            this.domElement = options.domElement;\n            this.initialDefaultValue = this.domElement.value || this.domElement.getAttribute(\""value\"") || \""\"";\n            this.changeCallback = this.onDomElementChange.bind(this);\n            this.domElement.addEventListener(\""change\"", this.changeCallback, false);\n            // remove tabIndex from the dom element.. danger zone... should we or should we not...\n            this.domElement.tabIndex = -1;\n            this.skipUserInput = false;\n            // questions array\n            if (options.questions)\n                this.questions = options.questions;\n            // custom tag validation - must be a method on window to avoid unsafe eval() calls\n            if (this.domElement.getAttribute(\""cf-validation\"")) {\n                var fn = window[this.domElement.getAttribute(\""cf-validation\"")];\n                this.validationCallback = fn;\n            }\n            // reg ex pattern is set on the Tag, so use it in our validation\n            if (this.domElement.getAttribute(\""pattern\""))\n                this.pattern = new RegExp(this.domElement.getAttribute(\""pattern\""));\n            if (this.type != \""group\"" && cf.ConversationalForm.illustrateAppFlow) {\n                if (!cf.ConversationalForm.suppressLog)\n                    console.log('Conversational Form > Tag registered:', this.type, this);\n            }\n            this.refresh();\n        }\n        Object.defineProperty(Tag.prototype, \""type\"", {\n            get: function () {\n                return this.domElement.getAttribute(\""type\"") || this.domElement.tagName.toLowerCase();\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""name\"", {\n            get: function () {\n                return this.domElement.getAttribute(\""name\"");\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""id\"", {\n            get: function () {\n                return this.domElement.getAttribute(\""id\"");\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""inputPlaceholder\"", {\n            get: function () {\n                return this._inputPlaceholder;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""formless\"", {\n            get: function () {\n                return cf.TagsParser.isElementFormless(this.domElement);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""label\"", {\n            get: function () {\n                return this.getLabel();\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""value\"", {\n            get: function () {\n                return this.domElement.value || this.initialDefaultValue;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""hasImage\"", {\n            get: function () {\n                return this.domElement.hasAttribute(\""cf-image\"");\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""rows\"", {\n            get: function () {\n                return this.domElement.hasAttribute(\""rows\"") ? parseInt(this.domElement.getAttribute(\""rows\"")) : 0;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""disabled\"", {\n            get: function () {\n                // a tag is disabled if its conditions are not meet, also if it contains the disabled attribute\n                return !this.checkConditionalAndIsValid() || (this.domElement.getAttribute(\""disabled\"") != undefined && this.domElement.getAttribute(\""disabled\"") != null);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""required\"", {\n            get: function () {\n                return !!this.domElement.getAttribute(\""required\"") || this.domElement.getAttribute(\""required\"") == \""\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""question\"", {\n            get: function () {\n                // if questions are empty, then fall back to dictionary, every time\n                if (!this.questions || this.questions.length == 0)\n                    return cf.Dictionary.getRobotResponse(this.type);\n                else\n                    return this.questions[Math.floor(Math.random() * this.questions.length)];\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""eventTarget\"", {\n            set: function (value) {\n                this._eventTarget = value;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(Tag.prototype, \""errorMessage\"", {\n            get: function () {\n                if (!this.errorMessages) {\n                    // custom tag error messages\n                    if (this.domElement.getAttribute(\""cf-error\"")) {\n                        this.errorMessages = cf.Helpers.getValuesOfBars(this.domElement.getAttribute(\""cf-error\""));\n                    }\n                    else if (this.domElement.parentNode && this.domElement.parentNode.getAttribute(\""cf-error\"")) {\n                        this.errorMessages = cf.Helpers.getValuesOfBars(this.domElement.parentNode.getAttribute(\""cf-error\""));\n                    }\n                    else if (this.required) {\n                        this.errorMessages = [cf.Dictionary.get(\""input-placeholder-required\"")];\n                    }\n                    else {\n                        if (this.type == \""file\"")\n                            this.errorMessages = [cf.Dictionary.get(\""input-placeholder-file-error\"")];\n                        else {\n                            this.errorMessages = [cf.Dictionary.get(\""input-placeholder-error\"")];\n                        }\n                    }\n                }\n                return this.errorMessages[Math.floor(Math.random() * this.errorMessages.length)];\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Tag.prototype.dealloc = function () {\n            this.domElement.removeEventListener(\""change\"", this.changeCallback, false);\n            this.changeCallback = null;\n            this.domElement = null;\n            this.defaultValue = null;\n            this.errorMessages = null;\n            this.pattern = null;\n            this._label = null;\n            this.validationCallback = null;\n            this.questions = null;\n        };\n        Tag.testConditions = function (tagValue, condition) {\n            var testValue = function (value, conditional) {\n                if (typeof conditional === \""object\"") {\n                    // regex\n                    return conditional.test(value);\n                }\n                // string comparisson\n                return tagValue === conditional;\n            };\n            if (typeof tagValue === \""string\"") {\n                // tag value is a string\n                var value = tagValue;\n                var isValid = false;\n                for (var i = 0; i < condition.conditionals.length; i++) {\n                    var conditional = condition.conditionals[i];\n                    isValid = testValue(value, conditional);\n                    if (isValid)\n                        break;\n                }\n                return isValid;\n            }\n            else {\n                if (!tagValue) {\n                    return false;\n                }\n                else {\n                    // tag value is an array\n                    var isValid = false;\n                    for (var i = 0; i < condition.conditionals.length; i++) {\n                        var conditional = condition.conditionals[i];\n                        if (typeof tagValue !== \""string\"") {\n                            for (var j = 0; j < tagValue.length; j++) {\n                                isValid = testValue(tagValue[j], conditional);\n                                if (isValid)\n                                    break;\n                            }\n                        }\n                        else {\n                            // string comparisson\n                            isValid = testValue(tagValue.toString(), conditional);\n                        }\n                        if (isValid)\n                            break;\n                    }\n                    return isValid;\n                }\n                // arrays need to be the same\n            }\n        };\n        Tag.isTagValid = function (element) {\n            if (element.getAttribute(\""type\"") === \""hidden\"")\n                return false;\n            if (element.getAttribute(\""type\"") === \""submit\"")\n                return false;\n            // ignore buttons, we submit the form automatially\n            if (element.getAttribute(\""type\"") == \""button\"")\n                return false;\n            if (element.style) {\n                // element style can be null if markup is created from DOMParser\n                if (element.style.display === \""none\"")\n                    return false;\n                if (element.style.visibility === \""hidden\"")\n                    return false;\n            }\n            var isTagFormless = cf.TagsParser.isElementFormless(element);\n            var innerText = cf.Helpers.getInnerTextOfElement(element);\n            if (element.tagName.toLowerCase() == \""option\"" && (!isTagFormless && innerText == \""\"" || innerText == \"" \"")) {\n                return false;\n            }\n            if (element.tagName.toLowerCase() == \""select\"" || element.tagName.toLowerCase() == \""option\"")\n                return true;\n            else if (isTagFormless) {\n                return true;\n            }\n            else {\n                return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);\n            }\n        };\n        Tag.createTag = function (element) {\n            if (Tag.isTagValid(element)) {\n                // ignore hidden tags\n                var tag = void 0;\n                if (element.tagName.toLowerCase() == \""input\"") {\n                    tag = new cf.InputTag({\n                        domElement: element\n                    });\n                }\n                else if (element.tagName.toLowerCase() == \""textarea\"") {\n                    tag = new cf.InputTag({\n                        domElement: element\n                    });\n                }\n                else if (element.tagName.toLowerCase() == \""select\"") {\n                    tag = new cf.SelectTag({\n                        domElement: element\n                    });\n                }\n                else if (element.tagName.toLowerCase() == \""button\"") {\n                    tag = new cf.ButtonTag({\n                        domElement: element\n                    });\n                }\n                else if (element.tagName.toLowerCase() == \""option\"") {\n                    tag = new cf.OptionTag({\n                        domElement: element\n                    });\n                }\n                else if (element.tagName.toLowerCase() == \""cf-robot-message\"") {\n                    tag = new cf.CfRobotMessageTag({\n                        domElement: element\n                    });\n                }\n                return tag;\n            }\n            else {\n                // console.warn(\""Tag is not valid!: \""+ element);\n                return null;\n            }\n        };\n        Tag.prototype.reset = function () {\n            this.refresh();\n            // this.disabled = false;\n            // reset to initial value.\n            this.defaultValue = this.domElement.value = this.initialDefaultValue.toString();\n        };\n        Tag.prototype.refresh = function () {\n            // default value of Tag, check every refresh\n            this.defaultValue = this.domElement.value || this.domElement.getAttribute(\""value\"") || \""\"";\n            this.questions = null;\n            this.findAndSetQuestions();\n            this.findConditionalAttributes();\n        };\n        Tag.prototype.hasConditionsFor = function (tagName) {\n            if (!this.hasConditions()) {\n                return false;\n            }\n            for (var i = 0; i < this.conditionalTags.length; i++) {\n                var condition = this.conditionalTags[i];\n                if (\""cf-conditional-\"" + tagName.toLowerCase() === condition.key.toLowerCase()) {\n                    return true;\n                }\n            }\n            return false;\n        };\n        Tag.prototype.hasConditions = function () {\n            return this.conditionalTags && this.conditionalTags.length > 0;\n        };\n        /**\n        * @name checkConditionalAndIsValid\n        * checks for conditional logic, see documentaiton (wiki)\n        * here we check after cf-conditional{-name}, if we find an attribute we look through tags for value, and ignore the tag if\n        */\n        Tag.prototype.checkConditionalAndIsValid = function () {\n            // can we tap into disabled\n            // if contains attribute, cf-conditional{-name} then check for conditional value across tags\n            if (this.hasConditions()) {\n                return this.flowManager.areConditionsInFlowFullfilled(this, this.conditionalTags);\n            }\n            // else return true, as no conditional means uncomplicated and happy tag\n            return true;\n        };\n        Tag.prototype.setTagValueAndIsValid = function (dto) {\n            // this sets the value of the tag in the DOM\n            // validation\n            var isValid = true;\n            var valueText = dto.text;\n            if (this.domElement.hasAttribute('type')\n                && this.domElement.getAttribute('type') === 'email'\n                && !this.pattern\n                && valueText.length > 0) {\n                this.pattern = /^(([^<>()\\[\\]\\\\.,;:\\s@\""]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\""]+)*)|(\"".+\""))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n            }\n            else if (\n            // When NOT required: Reset in the event user already typed something, and now they clear their input and want to submit nothing ==> remove pattern previously applied\n            this.domElement.hasAttribute('type')\n                && this.domElement.getAttribute('type') === 'email'\n                && this.pattern\n                && valueText.length === 0\n                && !this.required) {\n                this.pattern = null;\n            }\n            if (this.pattern) {\n                isValid = this.pattern.test(valueText);\n            }\n            if (valueText == \""\"" && this.required) {\n                isValid = false;\n            }\n            // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-minlength\n            var min = parseInt(this.domElement.getAttribute(\""minlength\""), 10) || -1;\n            // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-maxlength\n            var max = parseInt(this.domElement.getAttribute(\""maxlength\""), 10) || -1;\n            if (min != -1 && valueText.length < min) {\n                isValid = false;\n            }\n            if (max != -1 && valueText.length > max) {\n                isValid = false;\n            }\n            var isMaxMinValueValid = this.validateMaxMinValue(valueText);\n            if (!isMaxMinValueValid)\n                isValid = false;\n            if (isValid) {\n                // we cannot set the dom element value when type is file\n                if (this.type != \""file\"")\n                    this.domElement.value = valueText;\n            }\n            return isValid;\n        };\n        /**\n         * Validates value against tag max and min attributes\n         *\n         * @private\n         * @param {string} value\n         * @returns {boolean}\n         * @memberof Tag\n         */\n        Tag.prototype.validateMaxMinValue = function (value) {\n            if (!value)\n                return true;\n            var parsedValue = parseInt(value, 10);\n            var minValue = parseInt(this.domElement.getAttribute(\""min\""), 10) || -1;\n            var maxValue = parseInt(this.domElement.getAttribute(\""max\""), 10) || -1;\n            if (minValue !== -1 && parsedValue < minValue)\n                return false;\n            if (maxValue !== -1 && parsedValue > maxValue)\n                return false;\n            return true;\n        };\n        Tag.prototype.getLabel = function () {\n            if (!this._label)\n                this.findAndSetLabel();\n            if (this._label)\n                return this._label;\n            return cf.Dictionary.getRobotResponse(this.type);\n        };\n        /**\n        * @name findConditionalAttributes\n        * look for conditional attributes and map them\n        */\n        Tag.prototype.findConditionalAttributes = function () {\n            var keys = this.domElement.attributes;\n            if (keys.length > 0) {\n                this.conditionalTags = [];\n                for (var key in keys) {\n                    if (keys.hasOwnProperty(key)) {\n                        var attr = keys[key];\n                        if (attr && attr.name && attr.name.indexOf(\""cf-conditional\"") !== -1) {\n                            // conditional found\n                            var _conditionals = [];\n                            // TODO: when && use to combine multiple values to complete condition.\n                            var conditionalsFromAttribute = attr.value.indexOf(\""||\"") !== -1 ? attr.value.split(\""||\"") : attr.value.split(\""&&\"");\n                            for (var i = 0; i < conditionalsFromAttribute.length; i++) {\n                                var _conditional = conditionalsFromAttribute[i];\n                                try {\n                                    _conditionals.push(new RegExp(_conditional));\n                                }\n                                catch (e) {\n                                }\n                                _conditionals.push(_conditional);\n                            }\n                            this.conditionalTags.push({\n                                key: attr.name,\n                                conditionals: _conditionals\n                            });\n                        }\n                    }\n                }\n            }\n        };\n        Tag.prototype.findAndSetQuestions = function () {\n            if (this.questions)\n                return;\n            // <label tag with label:for attribute to el:id\n            // check for label tag, we only go 2 steps backwards..\n            // from standardize markup: http://www.w3schools.com/tags/tag_label.asp\n            if (this.domElement.getAttribute(\""cf-questions\"")) {\n                this.questions = cf.Helpers.getValuesOfBars(this.domElement.getAttribute(\""cf-questions\""));\n                if (this.domElement.getAttribute(\""cf-input-placeholder\""))\n                    this._inputPlaceholder = this.domElement.getAttribute(\""cf-input-placeholder\"");\n            }\n            else if (this.domElement.parentNode && this.domElement.parentNode.getAttribute(\""cf-questions\"")) {\n                // for groups the parentNode can have the cf-questions..\n                var parent_1 = this.domElement.parentNode;\n                this.questions = cf.Helpers.getValuesOfBars(parent_1.getAttribute(\""cf-questions\""));\n                if (parent_1.getAttribute(\""cf-input-placeholder\""))\n                    this._inputPlaceholder = parent_1.getAttribute(\""cf-input-placeholder\"");\n            }\n            else {\n                // questions not set, so find it in the DOM\n                // try a broader search using for and id attributes\n                var elId = this.domElement.getAttribute(\""id\"");\n                var forLabel = document.querySelector(\""label[for='\"" + elId + \""']\"");\n                if (forLabel) {\n                    this.questions = [cf.Helpers.getInnerTextOfElement(forLabel)];\n                }\n            }\n            if (!this.questions && this.domElement.getAttribute(\""placeholder\"")) {\n                // check for placeholder attr if questions are still undefined\n                this.questions = [this.domElement.getAttribute(\""placeholder\"")];\n            }\n        };\n        Tag.prototype.findAndSetLabel = function () {\n            // find label..\n            if (this.domElement.getAttribute(\""cf-label\"")) {\n                this._label = this.domElement.getAttribute(\""cf-label\"");\n            }\n            else {\n                var parentDomNode = this.domElement.parentNode;\n                if (parentDomNode) {\n                    // step backwards and check for label tag.\n                    var labelTags = parentDomNode.tagName.toLowerCase() == \""label\"" ? [parentDomNode] : parentDomNode.getElementsByTagName(\""label\"");\n                    if (labelTags.length == 0) {\n                        // check for innerText\n                        var innerText = cf.Helpers.getInnerTextOfElement(parentDomNode);\n                        if (innerText && innerText.length > 0)\n                            labelTags = [parentDomNode];\n                    }\n                    else if (labelTags.length > 0) {\n                        // check for \""for\"" attribute\n                        for (var i = 0; i < labelTags.length; i++) {\n                            var label = labelTags[i];\n                            if (label.getAttribute(\""for\"") == this.id) {\n                                this._label = cf.Helpers.getInnerTextOfElement(label);\n                            }\n                        }\n                    }\n                    if (!this._label && labelTags[0]) {\n                        this._label = cf.Helpers.getInnerTextOfElement(labelTags[0]);\n                    }\n                }\n            }\n        };\n        /**\n        * @name onDomElementChange\n        * on dom element value change event, ex. w. browser autocomplete mode\n        */\n        Tag.prototype.onDomElementChange = function () {\n            this._eventTarget.dispatchEvent(new CustomEvent(cf.TagEvents.ORIGINAL_ELEMENT_CHANGED, {\n                detail: {\n                    value: this.value,\n                    tag: this\n                }\n            }));\n        };\n        return Tag;\n    }());\n    cf.Tag = Tag;\n})(cf || (cf = {}));\n\n/// <reference path=\""ButtonTag.ts\""/>\n/// <reference path=\""InputTag.ts\""/>\n/// <reference path=\""SelectTag.ts\""/>\n/// <reference path=\""../ui/inputs/UserTextInput.ts\""/>\n// group tags together, this is done automatically by looking through InputTags with type radio or checkbox and same name attribute.\n// single choice logic for Radio Button, <input type=\""radio\"", where name is the same\n// multi choice logic for Checkboxes, <input type=\""checkbox\"", where name is the same\n// namespace\nvar cf;\n(function (cf) {\n    // class\n    var TagGroup = /** @class */ (function () {\n        function TagGroup(options) {\n            this.elements = options.elements;\n            // set wrapping element\n            this._fieldset = options.fieldset;\n            if (this._fieldset && this._fieldset.getAttribute(\""cf-questions\"")) {\n                this.questions = cf.Helpers.getValuesOfBars(this._fieldset.getAttribute(\""cf-questions\""));\n            }\n            if (this._fieldset && this._fieldset.getAttribute(\""cf-input-placeholder\"")) {\n                this._inputPlaceholder = this._fieldset.getAttribute(\""cf-input-placeholder\"");\n            }\n            if (cf.ConversationalForm.illustrateAppFlow)\n                if (!cf.ConversationalForm.suppressLog)\n                    console.log('Conversational Form > TagGroup registered:', this.elements[0].type, this);\n            this.skipUserInput = false;\n        }\n        Object.defineProperty(TagGroup.prototype, \""required\"", {\n            get: function () {\n                for (var i = 0; i < this.elements.length; i++) {\n                    var element = this.elements[i];\n                    if (this.elements[i].required) {\n                        return true;\n                    }\n                }\n                return false;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""eventTarget\"", {\n            set: function (value) {\n                this._eventTarget = value;\n                for (var i = 0; i < this.elements.length; i++) {\n                    var tag = this.elements[i];\n                    tag.eventTarget = value;\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""flowManager\"", {\n            set: function (value) {\n                for (var i = 0; i < this.elements.length; i++) {\n                    var tag = this.elements[i];\n                    tag.flowManager = value;\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""type\"", {\n            get: function () {\n                return \""group\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""label\"", {\n            get: function () {\n                return \""\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""name\"", {\n            get: function () {\n                return this._fieldset && this._fieldset.hasAttribute(\""name\"") ? this._fieldset.getAttribute(\""name\"") : this.elements[0].name;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""id\"", {\n            get: function () {\n                return this._fieldset && this._fieldset.id ? this._fieldset.id : this.elements[0].id;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""question\"", {\n            get: function () {\n                // check if elements have the questions, else fallback\n                if (this.questions && this.questions.length > 0) {\n                    return this.questions[Math.floor(Math.random() * this.questions.length)];\n                }\n                else if (this.elements[0] && this.elements[0].question) {\n                    var tagQuestion = this.elements[0].question;\n                    return tagQuestion;\n                }\n                else {\n                    // fallback to robot response from dictionary\n                    var robotReponse = cf.Dictionary.getRobotResponse(this.getGroupTagType());\n                    return robotReponse;\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""activeElements\"", {\n            get: function () {\n                return this._activeElements;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""value\"", {\n            get: function () {\n                // TODO: fix value???\n                return this._values ? this._values : [\""\""];\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""disabled\"", {\n            get: function () {\n                var disabled = false;\n                var allShouldBedisabled = 0;\n                for (var i = 0; i < this.elements.length; i++) {\n                    var element = this.elements[i];\n                    if (element.disabled)\n                        allShouldBedisabled++;\n                }\n                return allShouldBedisabled === this.elements.length;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""errorMessage\"", {\n            get: function () {\n                var errorMessage = cf.Dictionary.get(\""input-placeholder-error\"");\n                for (var i = 0; i < this.elements.length; i++) {\n                    var element = this.elements[i];\n                    errorMessage = element.errorMessage;\n                }\n                return errorMessage;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(TagGroup.prototype, \""inputPlaceholder\"", {\n            get: function () {\n                return this._inputPlaceholder;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        TagGroup.prototype.dealloc = function () {\n            for (var i = 0; i < this.elements.length; i++) {\n                var element = this.elements[i];\n                element.dealloc();\n            }\n            this.elements = null;\n        };\n        TagGroup.prototype.refresh = function () {\n            for (var i = 0; i < this.elements.length; i++) {\n                var element = this.elements[i];\n                element.refresh();\n            }\n        };\n        TagGroup.prototype.reset = function () {\n            this._values = [];\n            for (var i = 0; i < this.elements.length; i++) {\n                var element = this.elements[i];\n                element.reset();\n            }\n        };\n        TagGroup.prototype.getGroupTagType = function () {\n            return this.elements[0].type;\n        };\n        TagGroup.prototype.hasConditionsFor = function (tagName) {\n            for (var i = 0; i < this.elements.length; i++) {\n                var element = this.elements[i];\n                if (element.hasConditionsFor(tagName)) {\n                    return true;\n                }\n            }\n            return false;\n        };\n        TagGroup.prototype.hasConditions = function () {\n            for (var i = 0; i < this.elements.length; i++) {\n                var element = this.elements[i];\n                if (element.hasConditions()) {\n                    return true;\n                }\n            }\n            return false;\n        };\n        /**\n        * @name checkConditionalAndIsValid\n        * checks for conditional logic, see documentaiton (wiki)\n        * here we check after cf-conditional{-name} on group tags\n        */\n        TagGroup.prototype.checkConditionalAndIsValid = function () {\n            // can we tap into disabled\n            // if contains attribute, cf-conditional{-name} then check for conditional value across tags\n            for (var i = 0; i < this.elements.length; i++) {\n                var element = this.elements[i];\n                element.checkConditionalAndIsValid();\n            }\n            // else return true, as no conditional means happy tag\n            return true;\n        };\n        TagGroup.prototype.setTagValueAndIsValid = function (dto) {\n            var isValid = false;\n            var groupType = this.elements[0].type;\n            this._values = [];\n            this._activeElements = [];\n            switch (groupType) {\n                case \""radio\"":\n                    var wasRadioButtonChecked = false;\n                    var numberRadioButtonsVisible = [];\n                    if (dto.controlElements) {\n                        // TODO: Refactor this so it is less dependant on controlElements\n                        for (var i = 0; i < dto.controlElements.length; i++) {\n                            var element = dto.controlElements[i];\n                            var tag = this.elements[this.elements.indexOf(element.referenceTag)];\n                            numberRadioButtonsVisible.push(element);\n                            if (tag == element.referenceTag) {\n                                if (element.checked) {\n                                    this._values.push(tag.value);\n                                    this._activeElements.push(tag);\n                                }\n                                // a radio button was checked\n                                if (!wasRadioButtonChecked && element.checked)\n                                    wasRadioButtonChecked = true;\n                            }\n                        }\n                    }\n                    else {\n                        // for when we don't have any control elements, then we just try and map values\n                        for (var i = 0; i < this.elements.length; i++) {\n                            var tag = this.elements[i];\n                            var v1 = tag.value.toString().toLowerCase();\n                            var v2 = dto.text.toString().toLowerCase();\n                            //brute force checking...\n                            if (v1.indexOf(v2) !== -1 || v2.indexOf(v1) !== -1) {\n                                this._activeElements.push(tag);\n                                // check the original tag\n                                this._values.push(tag.value);\n                                tag.domElement.checked = true;\n                                wasRadioButtonChecked = true;\n                            }\n                        }\n                    }\n                    isValid = wasRadioButtonChecked;\n                    break;\n                case \""checkbox\"":\n                    // checkbox is always valid\n                    isValid = true;\n                    if (dto.controlElements) {\n                        for (var i = 0; i < dto.controlElements.length; i++) {\n                            var element = dto.controlElements[i];\n                            var tag = this.elements[this.elements.indexOf(element.referenceTag)];\n                            tag.domElement.checked = element.checked;\n                            if (element.checked) {\n                                this._values.push(tag.value);\n                                this._activeElements.push(tag);\n                            }\n                        }\n                    }\n                    if (this.required && this._activeElements.length == 0) {\n                        // checkbox can be required\n                        isValid = false;\n                    }\n                    break;\n            }\n            return isValid;\n        };\n        return TagGroup;\n    }());\n    cf.TagGroup = TagGroup;\n})(cf || (cf = {}));\n\n/// <reference path=\""Tag.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var InputTag = /** @class */ (function (_super) {\n        __extends(InputTag, _super);\n        function InputTag(options) {\n            var _this = _super.call(this, options) || this;\n            if (_this.type == \""text\"") {\n            }\n            else if (_this.type == \""email\"") {\n            }\n            else if (_this.type == \""tel\"") {\n            }\n            else if (_this.type == \""checkbox\"") {\n            }\n            else if (_this.type == \""radio\"") {\n            }\n            else if (_this.type == \""password\"") {\n            }\n            else if (_this.type == \""file\"") {\n                // check InputFileTag.ts\n            }\n            return _this;\n        }\n        InputTag.prototype.findAndSetQuestions = function () {\n            _super.prototype.findAndSetQuestions.call(this);\n            // special use cases for <input> tag add here...\n        };\n        InputTag.prototype.findAndSetLabel = function () {\n            _super.prototype.findAndSetLabel.call(this);\n            if (!this._label) {\n                // special use cases for <input> tag add here...\n            }\n        };\n        InputTag.prototype.setTagValueAndIsValid = function (value) {\n            if (this.type == \""checkbox\"") {\n                // checkbox is always true..\n                return true;\n            }\n            else {\n                return _super.prototype.setTagValueAndIsValid.call(this, value);\n            }\n        };\n        InputTag.prototype.dealloc = function () {\n            _super.prototype.dealloc.call(this);\n        };\n        return InputTag;\n    }(cf.Tag));\n    cf.InputTag = InputTag;\n})(cf || (cf = {}));\n\n/// <reference path=\""Tag.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var SelectTag = /** @class */ (function (_super) {\n        __extends(SelectTag, _super);\n        function SelectTag(options) {\n            var _this = _super.call(this, options) || this;\n            // build the option tags\n            _this.optionTags = [];\n            var domOptionTags = _this.domElement.getElementsByTagName(\""option\"");\n            for (var i = 0; i < domOptionTags.length; i++) {\n                var element = domOptionTags[i];\n                var tag = cf.Tag.createTag(element);\n                if (tag) {\n                    _this.optionTags.push(tag);\n                }\n                else {\n                    console.warn(_this.constructor.name, 'option tag invalid:', tag);\n                }\n            }\n            return _this;\n        }\n        Object.defineProperty(SelectTag.prototype, \""type\"", {\n            get: function () {\n                return \""select\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(SelectTag.prototype, \""name\"", {\n            get: function () {\n                return this.domElement && this.domElement.hasAttribute(\""name\"") ? this.domElement.getAttribute(\""name\"") : this.optionTags[0].name;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(SelectTag.prototype, \""value\"", {\n            get: function () {\n                return this._values;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(SelectTag.prototype, \""multipleChoice\"", {\n            get: function () {\n                return this.domElement.hasAttribute(\""multiple\"");\n            },\n            enumerable: true,\n            configurable: true\n        });\n        SelectTag.prototype.setTagValueAndIsValid = function (dto) {\n            var isValid = false;\n            // select tag values are set via selected attribute on option tag\n            var numberOptionButtonsVisible = [];\n            this._values = [];\n            if (dto.controlElements) {\n                // TODO: Refactor this so it is less dependant on controlElements\n                for (var i = 0; i < this.optionTags.length; i++) {\n                    var tag = this.optionTags[i];\n                    for (var j = 0; j < dto.controlElements.length; j++) {\n                        var controllerElement = dto.controlElements[j];\n                        if (controllerElement.referenceTag == tag) {\n                            // tag match found, so set value\n                            tag.selected = controllerElement.selected;\n                            // check for minimum one selected\n                            if (!isValid && tag.selected)\n                                isValid = true;\n                            if (tag.selected)\n                                this._values.push(tag.value);\n                            if (controllerElement.visible)\n                                numberOptionButtonsVisible.push(controllerElement);\n                        }\n                    }\n                }\n            }\n            else {\n                var wasSelected = false;\n                // for when we don't have any control elements, then we just try and map values\n                for (var i = 0; i < this.optionTags.length; i++) {\n                    var tag = this.optionTags[i];\n                    var v1 = tag.value.toString().toLowerCase();\n                    var v2 = dto.text.toString().toLowerCase();\n                    //brute force checking...\n                    if (v1.indexOf(v2) !== -1 || v2.indexOf(v1) !== -1) {\n                        // check the original tag\n                        this._values.push(tag.value);\n                        tag.domElement.checked = true;\n                        wasSelected = true;\n                    }\n                }\n                isValid = wasSelected;\n            }\n            // special case 1, only one optiontag visible from a filter\n            if (!isValid && numberOptionButtonsVisible.length == 1) {\n                var element = numberOptionButtonsVisible[0];\n                var tag = this.optionTags[this.optionTags.indexOf(element.referenceTag)];\n                element.selected = true;\n                tag.selected = true;\n                isValid = true;\n                if (tag.selected)\n                    this._values.push(tag.value);\n            }\n            return isValid;\n        };\n        return SelectTag;\n    }(cf.Tag));\n    cf.SelectTag = SelectTag;\n})(cf || (cf = {}));\n\n/// <reference path=\""Tag.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var ButtonTag = /** @class */ (function (_super) {\n        __extends(ButtonTag, _super);\n        function ButtonTag(options) {\n            var _this = _super.call(this, options) || this;\n            if (_this.domElement.getAttribute(\""type\"") == \""submit\"") {\n            }\n            else if (_this.domElement.getAttribute(\""type\"") == \""button\"") {\n                // this.onClick = eval(this.domElement.onclick);\n            }\n            return _this;\n        }\n        return ButtonTag;\n    }(cf.Tag));\n    cf.ButtonTag = ButtonTag;\n})(cf || (cf = {}));\n\n/// <reference path=\""Tag.ts\""/>\n/// <reference path=\""../parsing/TagsParser.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var OptionTag = /** @class */ (function (_super) {\n        __extends(OptionTag, _super);\n        function OptionTag() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        Object.defineProperty(OptionTag.prototype, \""type\"", {\n            get: function () {\n                return \""option\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(OptionTag.prototype, \""label\"", {\n            get: function () {\n                if (this.formless) {\n                    return _super.prototype.getLabel.call(this);\n                }\n                else {\n                    return cf.Helpers.getInnerTextOfElement(this.domElement);\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(OptionTag.prototype, \""selected\"", {\n            get: function () {\n                return this.domElement.hasAttribute(\""selected\"");\n                // return (<HTMLOptionElement> this.domElement).selected;\n            },\n            set: function (value) {\n                this.domElement.selected = value;\n                if (value) {\n                    this.domElement.setAttribute(\""selected\"", \""selected\"");\n                }\n                else {\n                    this.domElement.removeAttribute(\""selected\"");\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        OptionTag.prototype.setTagValueAndIsValid = function (value) {\n            var isValid = true;\n            // OBS: No need to set any validation og value for this tag type ..\n            // .. it is atm. only used to create pseudo elements in the OptionsList\n            return isValid;\n        };\n        return OptionTag;\n    }(cf.Tag));\n    cf.OptionTag = OptionTag;\n})(cf || (cf = {}));\n\n/// <reference path=\""Tag.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var CfRobotMessageTag = /** @class */ (function (_super) {\n        __extends(CfRobotMessageTag, _super);\n        function CfRobotMessageTag(options) {\n            var _this = _super.call(this, options) || this;\n            _this.skipUserInput = true;\n            return _this;\n        }\n        CfRobotMessageTag.prototype.dealloc = function () {\n            _super.prototype.dealloc.call(this);\n        };\n        return CfRobotMessageTag;\n    }(cf.Tag));\n    cf.CfRobotMessageTag = CfRobotMessageTag;\n})(cf || (cf = {}));\n\n/// <reference path=\""ControlElement.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var Button = /** @class */ (function (_super) {\n        __extends(Button, _super);\n        function Button(options) {\n            var _this = _super.call(this, options) || this;\n            _this.clickCallback = _this.onClick.bind(_this);\n            _this.el.addEventListener(\""click\"", _this.clickCallback, false);\n            _this.mouseDownCallback = _this.onMouseDown.bind(_this);\n            _this.el.addEventListener(\""mousedown\"", _this.mouseDownCallback, false);\n            //image\n            _this.checkForImage();\n            return _this;\n        }\n        Object.defineProperty(Button.prototype, \""type\"", {\n            get: function () {\n                return \""Button\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Button.prototype.hasImage = function () {\n            return this.referenceTag.hasImage;\n        };\n        /**\n        * @name checkForImage\n        * checks if element has cf-image, if it has then change UI\n        */\n        Button.prototype.checkForImage = function () {\n            var hasImage = this.hasImage();\n            if (hasImage) {\n                this.el.classList.add(\""has-image\"");\n                this.imgEl = document.createElement(\""img\"");\n                this.imageLoadedCallback = this.onImageLoaded.bind(this);\n                this.imgEl.classList.add(\""cf-image\"");\n                this.imgEl.addEventListener(\""load\"", this.imageLoadedCallback, false);\n                this.imgEl.src = this.referenceTag.domElement.getAttribute(\""cf-image\"");\n                this.el.insertBefore(this.imgEl, this.el.children[0]);\n            }\n        };\n        Button.prototype.onImageLoaded = function () {\n            this.imgEl.classList.add(\""loaded\"");\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.ControlElementEvents.ON_LOADED, {}));\n        };\n        Button.prototype.onMouseDown = function (event) {\n            event.preventDefault();\n        };\n        Button.prototype.onClick = function (event) {\n            this.onChoose();\n        };\n        Button.prototype.dealloc = function () {\n            this.el.removeEventListener(\""click\"", this.clickCallback, false);\n            this.clickCallback = null;\n            if (this.imageLoadedCallback) {\n                this.imgEl.removeEventListener(\""load\"", this.imageLoadedCallback, false);\n                this.imageLoadedCallback = null;\n            }\n            this.el.removeEventListener(\""mousedown\"", this.mouseDownCallback, false);\n            this.mouseDownCallback = null;\n            _super.prototype.dealloc.call(this);\n        };\n        // override\n        Button.prototype.getTemplate = function () {\n            return \""<cf-button class=\\\""cf-button\\\"">\\n\\t\\t\\t\\t\"" + this.referenceTag.label + \""\\n\\t\\t\\t</cf-button>\\n\\t\\t\\t\"";\n        };\n        return Button;\n    }(cf.ControlElement));\n    cf.Button = Button;\n})(cf || (cf = {}));\n\n/// <reference path=\""Button.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var RadioButton = /** @class */ (function (_super) {\n        __extends(RadioButton, _super);\n        function RadioButton() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        Object.defineProperty(RadioButton.prototype, \""type\"", {\n            get: function () {\n                return \""RadioButton\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(RadioButton.prototype, \""checked\"", {\n            get: function () {\n                var _checked = this.el.hasAttribute(\""checked\"") && this.el.getAttribute(\""checked\"") == \""checked\"";\n                return _checked;\n            },\n            set: function (value) {\n                if (!value) {\n                    this.el.removeAttribute(\""checked\"");\n                    this.referenceTag.domElement.removeAttribute(\""checked\"");\n                    this.referenceTag.domElement.checked = false;\n                }\n                else {\n                    this.el.setAttribute(\""checked\"", \""checked\"");\n                    this.referenceTag.domElement.setAttribute(\""checked\"", \""checked\"");\n                    this.referenceTag.domElement.checked = true;\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        RadioButton.prototype.onClick = function (event) {\n            this.checked = true; // checked always true like native radio buttons\n            _super.prototype.onClick.call(this, event);\n        };\n        // override\n        RadioButton.prototype.getTemplate = function () {\n            var isChecked = this.referenceTag.domElement.checked || this.referenceTag.domElement.hasAttribute(\""checked\"");\n            return \""<cf-radio-button class=\\\""cf-button\\\"" \"" + (isChecked ? \""checked=checked\"" : \""\"") + \"">\\n\\t\\t\\t\\t<div>\\n\\t\\t\\t\\t\\t<cf-radio></cf-radio>\\n\\t\\t\\t\\t\\t<span>\"" + this.referenceTag.label + \""</span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</cf-radio-button>\\n\\t\\t\\t\"";\n        };\n        return RadioButton;\n    }(cf.Button));\n    cf.RadioButton = RadioButton;\n})(cf || (cf = {}));\n\n/// <reference path=\""Button.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var CheckboxButton = /** @class */ (function (_super) {\n        __extends(CheckboxButton, _super);\n        function CheckboxButton() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        Object.defineProperty(CheckboxButton.prototype, \""type\"", {\n            get: function () {\n                return \""CheckboxButton\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(CheckboxButton.prototype, \""checked\"", {\n            get: function () {\n                return this.el.getAttribute(\""checked\"") == \""checked\"";\n            },\n            set: function (value) {\n                if (!value) {\n                    this.el.removeAttribute(\""checked\"");\n                    this.referenceTag.domElement.removeAttribute(\""checked\"");\n                    this.referenceTag.domElement.checked = false;\n                }\n                else {\n                    this.el.setAttribute(\""checked\"", \""checked\"");\n                    this.referenceTag.domElement.setAttribute(\""checked\"", \""checked\"");\n                    this.referenceTag.domElement.checked = true;\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        CheckboxButton.prototype.onClick = function (event) {\n            this.checked = !this.checked;\n        };\n        // override\n        CheckboxButton.prototype.getTemplate = function () {\n            var isChecked = this.referenceTag.domElement.checked && this.referenceTag.domElement.hasAttribute(\""checked\"");\n            return \""<cf-button class=\\\""cf-button cf-checkbox-button \"" + (this.referenceTag.label.trim().length == 0 ? \""no-text\"" : \""\"") + \""\\\"" checked=\"" + (isChecked ? \""checked\"" : \""\"") + \"">\\n\\t\\t\\t\\t<div>\\n\\t\\t\\t\\t\\t<cf-checkbox></cf-checkbox>\\n\\t\\t\\t\\t\\t<span>\"" + this.referenceTag.label + \""</span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</cf-button>\\n\\t\\t\\t\"";\n        };\n        return CheckboxButton;\n    }(cf.Button));\n    cf.CheckboxButton = CheckboxButton;\n})(cf || (cf = {}));\n\n/// <reference path=\""Button.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    cf.OptionButtonEvents = {\n        CLICK: \""cf-option-button-click\""\n    };\n    // class\n    var OptionButton = /** @class */ (function (_super) {\n        __extends(OptionButton, _super);\n        function OptionButton() {\n            var _this = _super !== null && _super.apply(this, arguments) || this;\n            _this.isMultiChoice = false;\n            return _this;\n        }\n        Object.defineProperty(OptionButton.prototype, \""type\"", {\n            get: function () {\n                return \""OptionButton\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(OptionButton.prototype, \""selected\"", {\n            get: function () {\n                return this.el.hasAttribute(\""selected\"");\n            },\n            set: function (value) {\n                if (value) {\n                    this.el.setAttribute(\""selected\"", \""selected\"");\n                }\n                else {\n                    this.el.removeAttribute(\""selected\"");\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        OptionButton.prototype.setData = function (options) {\n            this.isMultiChoice = options.isMultiChoice;\n            _super.prototype.setData.call(this, options);\n        };\n        OptionButton.prototype.onClick = function (event) {\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.OptionButtonEvents.CLICK, this);\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.OptionButtonEvents.CLICK, {\n                detail: this\n            }));\n        };\n        // override\n        OptionButton.prototype.getTemplate = function () {\n            // be aware that first option element on none multiple select tags will be selected by default\n            var tmpl = '<cf-button class=\""cf-button ' + (this.isMultiChoice ? \""cf-checkbox-button\"" : \""\"") + '\"" ' + (this.referenceTag.domElement.selected ? \""selected='selected'\"" : \""\"") + '>';\n            tmpl += \""<div>\"";\n            if (this.isMultiChoice)\n                tmpl += \""<cf-checkbox></cf-checkbox>\"";\n            tmpl += this.referenceTag.label;\n            tmpl += \""</div>\"";\n            tmpl += \""</cf-button>\"";\n            return tmpl;\n        };\n        return OptionButton;\n    }(cf.Button));\n    cf.OptionButton = OptionButton;\n})(cf || (cf = {}));\n\n/// <reference path=\""ControlElement.ts\""/>\n/// <reference path=\""OptionButton.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    // builds x OptionsButton from the registered SelectTag\n    var OptionsList = /** @class */ (function () {\n        function OptionsList(options) {\n            this.context = options.context;\n            this.eventTarget = options.eventTarget;\n            this.referenceTag = options.referenceTag;\n            // check for multi choice select tag\n            this.multiChoice = this.referenceTag.domElement.hasAttribute(\""multiple\"");\n            this.onOptionButtonClickCallback = this.onOptionButtonClick.bind(this);\n            this.eventTarget.addEventListener(cf.OptionButtonEvents.CLICK, this.onOptionButtonClickCallback, false);\n            this.createElements();\n        }\n        Object.defineProperty(OptionsList.prototype, \""type\"", {\n            get: function () {\n                return \""OptionsList\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        OptionsList.prototype.getValue = function () {\n            var arr = [];\n            for (var i = 0; i < this.elements.length; i++) {\n                var element = this.elements[i];\n                if (!this.multiChoice && element.selected) {\n                    arr.push(element);\n                    return arr;\n                }\n                else if (this.multiChoice && element.selected) {\n                    arr.push(element);\n                }\n            }\n            return arr;\n        };\n        OptionsList.prototype.onOptionButtonClick = function (event) {\n            // if mutiple... then dont remove selection on other buttons\n            if (!this.multiChoice) {\n                // only one is selectable at the time.\n                for (var i = 0; i < this.elements.length; i++) {\n                    var element = this.elements[i];\n                    if (element != event.detail) {\n                        element.selected = false;\n                    }\n                    else {\n                        element.selected = true;\n                    }\n                }\n                cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.ControlElementEvents.SUBMIT_VALUE, this.referenceTag);\n                this.eventTarget.dispatchEvent(new CustomEvent(cf.ControlElementEvents.SUBMIT_VALUE, {\n                    detail: event.detail\n                }));\n            }\n            else {\n                event.detail.selected = !event.detail.selected;\n            }\n        };\n        OptionsList.prototype.createElements = function () {\n            this.elements = [];\n            var optionTags = this.referenceTag.optionTags;\n            for (var i = 0; i < optionTags.length; i++) {\n                var tag = optionTags[i];\n                var btn = new cf.OptionButton({\n                    referenceTag: tag,\n                    isMultiChoice: this.referenceTag.multipleChoice,\n                    eventTarget: this.eventTarget\n                });\n                this.elements.push(btn);\n                this.context.appendChild(btn.el);\n            }\n        };\n        OptionsList.prototype.dealloc = function () {\n            this.eventTarget.removeEventListener(cf.OptionButtonEvents.CLICK, this.onOptionButtonClickCallback, false);\n            this.onOptionButtonClickCallback = null;\n            while (this.elements.length > 0)\n                this.elements.pop().dealloc();\n            this.elements = null;\n        };\n        return OptionsList;\n    }());\n    cf.OptionsList = OptionsList;\n})(cf || (cf = {}));\n\n/// <reference path=\""Button.ts\""/>\n/// <reference path=\""../../logic/Helpers.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var UploadFileUI = /** @class */ (function (_super) {\n        __extends(UploadFileUI, _super);\n        function UploadFileUI(options) {\n            var _this = _super.call(this, options) || this;\n            _this.maxFileSize = 100000000000;\n            _this.loading = false;\n            _this.submitTimer = 0;\n            _this._fileName = \""\"";\n            _this._readerResult = \""\"";\n            if (cf.Helpers.caniuse.fileReader()) {\n                var maxFileSizeStr = _this.referenceTag.domElement.getAttribute(\""cf-max-size\"") || _this.referenceTag.domElement.getAttribute(\""max-size\"");\n                if (maxFileSizeStr) {\n                    var maxFileSize = parseInt(maxFileSizeStr, 10);\n                    _this.maxFileSize = maxFileSize;\n                }\n                _this.progressBar = _this.el.getElementsByTagName(\""cf-upload-file-progress-bar\"")[0];\n                _this.onDomElementChangeCallback = _this.onDomElementChange.bind(_this);\n                _this.referenceTag.domElement.addEventListener(\""change\"", _this.onDomElementChangeCallback, false);\n            }\n            else {\n                throw new Error(\""Conversational Form Error: No FileReader available for client.\"");\n            }\n            return _this;\n        }\n        Object.defineProperty(UploadFileUI.prototype, \""value\"", {\n            get: function () {\n                return this.referenceTag.domElement.value; //;this.readerResult || this.fileName;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UploadFileUI.prototype, \""readerResult\"", {\n            get: function () {\n                return this._readerResult;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UploadFileUI.prototype, \""files\"", {\n            get: function () {\n                return this._files;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UploadFileUI.prototype, \""fileName\"", {\n            get: function () {\n                return this._fileName;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UploadFileUI.prototype, \""type\"", {\n            get: function () {\n                return \""UploadFileUI\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        UploadFileUI.prototype.getFilesAsString = function () {\n            // value is for the chat response -->\n            var icon = document.createElement(\""span\"");\n            icon.innerHTML = cf.Dictionary.get(\""icon-type-file\"") + this.fileName;\n            return icon.outerHTML;\n        };\n        UploadFileUI.prototype.onDomElementChange = function (event) {\n            var _this = this;\n            if (!cf.ConversationalForm.suppressLog)\n                console.log(\""...onDomElementChange\"");\n            var reader = new FileReader();\n            this._files = this.referenceTag.domElement.files;\n            reader.onerror = function (event) {\n                if (!cf.ConversationalForm.suppressLog)\n                    console.log(\""onerror\"", event);\n            };\n            reader.onprogress = function (event) {\n                if (!cf.ConversationalForm.suppressLog)\n                    console.log(\""onprogress\"", event);\n                _this.progressBar.style.width = ((event.loaded / event.total) * 100) + \""%\"";\n            };\n            reader.onabort = function (event) {\n                if (!cf.ConversationalForm.suppressLog)\n                    console.log(\""onabort\"", event);\n            };\n            reader.onloadstart = function (event) {\n                // check for file size\n                var file = _this.files[0];\n                var fileSize = file ? file.size : _this.maxFileSize + 1; // if file is undefined then abort ...\n                if (fileSize > _this.maxFileSize) {\n                    reader.abort();\n                    var dto = {\n                        errorText: cf.Dictionary.get(\""input-placeholder-file-size-error\"")\n                    };\n                    cf.ConversationalForm.illustrateFlow(_this, \""dispatch\"", cf.FlowEvents.USER_INPUT_INVALID, dto);\n                    _this.eventTarget.dispatchEvent(new CustomEvent(cf.FlowEvents.USER_INPUT_INVALID, {\n                        detail: dto\n                    }));\n                }\n                else {\n                    // good to go\n                    _this._fileName = file.name;\n                    _this.loading = true;\n                    _this.animateIn();\n                    // set text\n                    var sizeConversion = Math.floor(Math.log(fileSize) / Math.log(1024));\n                    var sizeChart = [\""b\"", \""kb\"", \""mb\"", \""gb\""];\n                    sizeConversion = Math.min(sizeChart.length - 1, sizeConversion);\n                    var humanSizeString = Number((fileSize / Math.pow(1024, sizeConversion)).toFixed(2)) * 1 + \"" \"" + sizeChart[sizeConversion];\n                    var text = file.name + \"" (\"" + humanSizeString + \"")\"";\n                    _this.el.getElementsByTagName(\""cf-upload-file-text\"")[0].innerHTML = text;\n                    _this.eventTarget.dispatchEvent(new CustomEvent(cf.ControlElementEvents.PROGRESS_CHANGE, {\n                        detail: cf.ControlElementProgressStates.BUSY\n                    }));\n                }\n            };\n            reader.onload = function (event) {\n                _this._readerResult = event.target.result;\n                _this.progressBar.classList.add(\""loaded\"");\n                _this.submitTimer = setTimeout(function () {\n                    _this.el.classList.remove(\""animate-in\"");\n                    _this.onChoose(); // submit the file\n                    _this.eventTarget.dispatchEvent(new CustomEvent(cf.ControlElementEvents.PROGRESS_CHANGE, {\n                        detail: cf.ControlElementProgressStates.READY\n                    }));\n                }, 0);\n            };\n            reader.readAsDataURL(this.files[0]);\n        };\n        UploadFileUI.prototype.animateIn = function () {\n            if (this.loading)\n                _super.prototype.animateIn.call(this);\n        };\n        UploadFileUI.prototype.onClick = function (event) {\n            // super.onClick(event);\n        };\n        UploadFileUI.prototype.triggerFileSelect = function () {\n            // trigger file prompt\n            this.referenceTag.domElement.click();\n        };\n        // override\n        UploadFileUI.prototype.dealloc = function () {\n            clearTimeout(this.submitTimer);\n            this.progressBar = null;\n            if (this.onDomElementChangeCallback) {\n                this.referenceTag.domElement.removeEventListener(\""change\"", this.onDomElementChangeCallback, false);\n                this.onDomElementChangeCallback = null;\n            }\n            _super.prototype.dealloc.call(this);\n        };\n        UploadFileUI.prototype.getTemplate = function () {\n            var isChecked = this.referenceTag.value == \""1\"" || this.referenceTag.domElement.hasAttribute(\""checked\"");\n            return \""<cf-upload-file-ui>\\n\\t\\t\\t\\t<cf-upload-file-text></cf-upload-file-text>\\n\\t\\t\\t\\t<cf-upload-file-progress>\\n\\t\\t\\t\\t\\t<cf-upload-file-progress-bar></cf-upload-file-progress-bar>\\n\\t\\t\\t\\t</cf-upload-file-progress>\\n\\t\\t\\t</cf-upload-file-ui>\\n\\t\\t\\t\"";\n        };\n        return UploadFileUI;\n    }(cf.Button));\n    cf.UploadFileUI = UploadFileUI;\n})(cf || (cf = {}));\n\n/// <reference path=\""../ui/BasicElement.ts\""/>\n/// <reference path=\""../ui//control-elements/ControlElements.ts\""/>\n/// <reference path=\""../logic/FlowManager.ts\""/>\n/// <reference path=\""../interfaces/IUserInputElement.ts\""/>\n/// <reference path=\""../ui/inputs/UserInputElement.ts\""/>\n/// <reference path=\""../interfaces/IUserInputElement.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    cf.MicrophoneBridgeEvent = {\n        ERROR: \""cf-microphone-bridge-error\"",\n        TERMNIAL_ERROR: \""cf-microphone-bridge-terminal-error\""\n    };\n    // class\n    var MicrophoneBridge = /** @class */ (function () {\n        function MicrophoneBridge(options) {\n            this.currentTextResponse = \""\"";\n            this._hasUserMedia = false;\n            this.inputErrorCount = 0;\n            this.inputCurrentError = \""\"";\n            this.el = options.el;\n            this.button = options.button;\n            this.eventTarget = options.eventTarget;\n            // data object\n            this.microphoneObj = options.microphoneObj;\n            this.flowUpdateCallback = this.onFlowUpdate.bind(this);\n            this.eventTarget.addEventListener(cf.FlowEvents.FLOW_UPDATE, this.flowUpdateCallback, false);\n        }\n        Object.defineProperty(MicrophoneBridge.prototype, \""hasUserMedia\"", {\n            set: function (value) {\n                this._hasUserMedia = value;\n                if (!value) {\n                    // this.submitButton.classList.add(\""permission-waiting\"");\n                }\n                else {\n                    // this.submitButton.classList.remove(\""permission-waiting\"");\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(MicrophoneBridge.prototype, \""active\"", {\n            set: function (value) {\n                if (this.equalizer) {\n                    this.equalizer.disabled = !value;\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        MicrophoneBridge.prototype.cancel = function () {\n            this.button.loading = false;\n            if (this.microphoneObj.cancelInput) {\n                this.microphoneObj.cancelInput();\n            }\n        };\n        MicrophoneBridge.prototype.onFlowUpdate = function () {\n            var _this = this;\n            this.currentTextResponse = null;\n            if (!this._hasUserMedia) {\n                // check if user has granted\n                var hasGranted_1 = false;\n                if (window.navigator.mediaDevices) {\n                    window.navigator.mediaDevices.enumerateDevices().then(function (devices) {\n                        devices.forEach(function (device) {\n                            if (!hasGranted_1 && device.label !== \""\"") {\n                                hasGranted_1 = true;\n                            }\n                        });\n                        if (hasGranted_1) {\n                            // user has previously granted, so call getusermedia, as this wont prombt user\n                            _this.getUserMedia();\n                        }\n                        else {\n                            // await click on button, wait state\n                        }\n                    });\n                }\n            }\n            else {\n                // user has granted ready to go go\n                if (!this.microphoneObj.awaitingCallback) {\n                    this.callInput();\n                }\n            }\n        };\n        MicrophoneBridge.prototype.getUserMedia = function () {\n            var _this = this;\n            try {\n                // from https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#Using_the_new_API_in_older_browsers\n                // Older browsers might not implement mediaDevices at all, so we set an empty object first\n                if (navigator.mediaDevices === undefined) {\n                    navigator.mediaDevices = {};\n                }\n                // Some browsers partially implement mediaDevices. We can't just assign an object\n                // with getUserMedia as it would overwrite existing properties.\n                // Here, we will just add the getUserMedia property if it's missing.\n                if (navigator.mediaDevices.getUserMedia === undefined) {\n                    navigator.mediaDevices.getUserMedia = function (constraints) {\n                        // First get ahold of the legacy getUserMedia, if present\n                        var getUserMedia = navigator.getUserMedia || window.navigator.webkitGetUserMedia || window.navigator.mozGetUserMedia;\n                        // Some browsers just don't implement it - return a rejected promise with an error\n                        // to keep a consistent interface\n                        if (!getUserMedia) {\n                            return Promise.reject(new Error('getUserMedia is not implemented in this browser'));\n                        }\n                        // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise\n                        return new Promise(function (resolve, reject) {\n                            getUserMedia.call(navigator, constraints, resolve, reject);\n                        });\n                    };\n                }\n                navigator.mediaDevices.getUserMedia({ audio: true })\n                    .then(function (stream) {\n                    _this.currentStream = stream;\n                    if (stream.getAudioTracks().length > 0) {\n                        // interface is active and available, so call it immidiatly\n                        _this.hasUserMedia = true;\n                        _this.setupEqualizer();\n                        if (!_this.microphoneObj.awaitingCallback) {\n                            // microphone interface awaits speak out loud callback\n                            _this.callInput();\n                        }\n                    }\n                    else {\n                        // code for when both devices are available\n                        // interface is not active, button should be clicked\n                        _this.hasUserMedia = false;\n                    }\n                })\n                    .catch(function (error) {\n                    // Promise catch\n                    _this.hasUserMedia = false;\n                    _this.eventTarget.dispatchEvent(new Event(cf.MicrophoneBridgeEvent.TERMNIAL_ERROR));\n                });\n            }\n            catch (error) {\n                // try catch\n                // whoops no getUserMedia, so roll back to standard UI\n                this.hasUserMedia = false;\n                this.eventTarget.dispatchEvent(new Event(cf.MicrophoneBridgeEvent.TERMNIAL_ERROR));\n            }\n        };\n        MicrophoneBridge.prototype.dealloc = function () {\n            this.cancel();\n            this.promise = null;\n            this.currentStream = null;\n            if (this.equalizer) {\n                this.equalizer.dealloc();\n            }\n            this.equalizer = null;\n            this.eventTarget.removeEventListener(cf.FlowEvents.FLOW_UPDATE, this.flowUpdateCallback, false);\n            this.flowUpdateCallback = null;\n        };\n        MicrophoneBridge.prototype.callInput = function (messageTime) {\n            // remove current error message after x time\n            // clearTimeout(this.clearMessageTimer);\n            // this.clearMessageTimer = setTimeout(() =>{\n            // \tthis.el.removeAttribute(\""message\"");\n            // }, messageTime);\n            var _this = this;\n            if (messageTime === void 0) { messageTime = 0; }\n            this.button.loading = true;\n            if (this.equalizer) {\n                this.equalizer.disabled = false;\n            }\n            // call API, SpeechRecognintion etc. you decide, passing along the stream from getUserMedia can be used.. as long as the resolve is called with string attribute\n            this.promise = new Promise(function (resolve, reject) { return _this.microphoneObj.input(resolve, reject, _this.currentStream); })\n                .then(function (result) {\n                // api contacted\n                _this.promise = null;\n                // save response so it's available in getFlowDTO\n                _this.currentTextResponse = result.toString();\n                if (!_this.currentTextResponse || _this.currentTextResponse == \""\"") {\n                    _this.showError(cf.Dictionary.get(\""user-audio-reponse-invalid\""));\n                    // invalid input, so call API again\n                    _this.callInput();\n                    return;\n                }\n                _this.inputErrorCount = 0;\n                _this.inputCurrentError = \""\"";\n                _this.button.loading = false;\n                // continue flow\n                var dto = {\n                    text: _this.currentTextResponse\n                };\n                cf.ConversationalForm.illustrateFlow(_this, \""dispatch\"", cf.UserInputEvents.SUBMIT, dto);\n                _this.eventTarget.dispatchEvent(new CustomEvent(cf.UserInputEvents.SUBMIT, {\n                    detail: dto\n                }));\n            }).catch(function (error) {\n                // API error\n                // ConversationalForm.illustrateFlow(this, \""dispatch\"", MicrophoneBridgeEvent.ERROR, error);\n                // this.eventTarget.dispatchEvent(new CustomEvent(MicrophoneBridgeEvent.ERROR, {\n                // \tdetail: error\n                // }));\n                if (_this.isErrorTerminal(error)) {\n                    // terminal error, fallback to \n                    _this.eventTarget.dispatchEvent(new CustomEvent(cf.MicrophoneBridgeEvent.TERMNIAL_ERROR, {\n                        detail: cf.Dictionary.get(\""microphone-terminal-error\"")\n                    }));\n                    if (!cf.ConversationalForm.suppressLog)\n                        console.log(\""Conversational Form: Terminal error: \"", error);\n                }\n                else {\n                    if (_this.inputCurrentError != error) {\n                        // api failed ...\n                        // show result in UI\n                        _this.inputErrorCount = 0;\n                        _this.inputCurrentError = error;\n                    }\n                    else {\n                    }\n                    _this.inputErrorCount++;\n                    if (_this.inputErrorCount > 2) {\n                        _this.showError(error);\n                    }\n                    else {\n                        _this.eventTarget.dispatchEvent(new CustomEvent(cf.MicrophoneBridgeEvent.TERMNIAL_ERROR, {\n                            detail: cf.Dictionary.get(\""microphone-terminal-error\"")\n                        }));\n                        if (!cf.ConversationalForm.suppressLog)\n                            console.log(\""Conversational Form: Terminal error: \"", error);\n                    }\n                }\n            });\n        };\n        MicrophoneBridge.prototype.isErrorTerminal = function (error) {\n            var terminalErrors = [\""network\""];\n            if (terminalErrors.indexOf(error) !== -1)\n                return true;\n            return false;\n        };\n        MicrophoneBridge.prototype.showError = function (error) {\n            var dto = {\n                errorText: error\n            };\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.FlowEvents.USER_INPUT_INVALID, dto);\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.FlowEvents.USER_INPUT_INVALID, {\n                detail: dto\n            }));\n            this.callInput();\n        };\n        MicrophoneBridge.prototype.setupEqualizer = function () {\n            var eqEl = this.el.getElementsByTagName(\""cf-icon-audio-eq\"")[0];\n            if (SimpleEqualizer.supported && eqEl) {\n                this.equalizer = new SimpleEqualizer({\n                    stream: this.currentStream,\n                    elementToScale: eqEl\n                });\n            }\n        };\n        return MicrophoneBridge;\n    }());\n    cf.MicrophoneBridge = MicrophoneBridge;\n    var SimpleEqualizer = /** @class */ (function () {\n        function SimpleEqualizer(options) {\n            var _this = this;\n            this.maxBorderWidth = 0;\n            this._disabled = false;\n            this.elementToScale = options.elementToScale;\n            this.context = new AudioContext();\n            this.analyser = this.context.createAnalyser();\n            this.mic = this.context.createMediaStreamSource(options.stream);\n            this.javascriptNode = this.context.createScriptProcessor(2048, 1, 1);\n            this.analyser.smoothingTimeConstant = 0.3;\n            this.analyser.fftSize = 1024;\n            this.mic.connect(this.analyser);\n            this.analyser.connect(this.javascriptNode);\n            this.javascriptNode.connect(this.context.destination);\n            this.javascriptNode.onaudioprocess = function () {\n                _this.onAudioProcess();\n            };\n        }\n        Object.defineProperty(SimpleEqualizer.prototype, \""disabled\"", {\n            set: function (value) {\n                this._disabled = value;\n                this.elementToScale.style.borderWidth = 0 + \""px\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        SimpleEqualizer.prototype.onAudioProcess = function () {\n            if (this._disabled)\n                return;\n            var array = new Uint8Array(this.analyser.frequencyBinCount);\n            this.analyser.getByteFrequencyData(array);\n            var values = 0;\n            var length = array.length;\n            for (var i = 0; i < length; i++) {\n                values += array[i];\n            }\n            var average = values / length;\n            var percent = Math.min(1, Math.max(0, 1 - ((50 - average) / 50)));\n            if (!this.maxBorderWidth) {\n                this.maxBorderWidth = this.elementToScale.offsetWidth * 0.5;\n            }\n            this.elementToScale.style.borderWidth = (this.maxBorderWidth * percent) + \""px\"";\n        };\n        SimpleEqualizer.prototype.dealloc = function () {\n            this.javascriptNode.onaudioprocess = null;\n            this.javascriptNode = null;\n            this.analyser = null;\n            this.mic = null;\n            this.elementToScale = null;\n            this.context = null;\n        };\n        SimpleEqualizer.supported = function () {\n            window.AudioContext = window.AudioContext || window.webkitAudioContext;\n            if (window.AudioContext) {\n                return true;\n            }\n            else {\n                return false;\n            }\n        };\n        return SimpleEqualizer;\n    }());\n})(cf || (cf = {}));\n\n/// <reference path=\""../BasicElement.ts\""/>\n/// <reference path=\""../control-elements/ControlElements.ts\""/>\n/// <reference path=\""../../logic/FlowManager.ts\""/>\n/// <reference path=\""../../logic/MicrophoneBridge.ts\""/>\n/// <reference path=\""../../interfaces/IUserInputElement.ts\""/>\n/// <reference path=\""UserInputElement.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    cf.UserInputSubmitButtonEvents = {\n        CHANGE: \""userinput-submit-button-change-value\""\n    };\n    // class\n    var UserInputSubmitButton = /** @class */ (function () {\n        function UserInputSubmitButton(options) {\n            this._active = true;\n            this.eventTarget = options.eventTarget;\n            var template = document.createElement('template');\n            template.innerHTML = this.getTemplate();\n            this.el = template.firstChild || template.content.firstChild;\n            this.onClickCallback = this.onClick.bind(this);\n            this.el.addEventListener(\""click\"", this.onClickCallback, false);\n            this.onMicrophoneTerminalErrorCallback = this.onMicrophoneTerminalError.bind(this);\n            this.eventTarget.addEventListener(cf.MicrophoneBridgeEvent.TERMNIAL_ERROR, this.onMicrophoneTerminalErrorCallback, false);\n        }\n        Object.defineProperty(UserInputSubmitButton.prototype, \""typing\"", {\n            get: function () {\n                return this.el.classList.contains(\""typing\"");\n            },\n            set: function (value) {\n                if (value) {\n                    this.el.classList.add(\""typing\"");\n                    this.loading = false;\n                    if (this.mic) {\n                        this.mic.cancel();\n                    }\n                }\n                else {\n                    this.el.classList.remove(\""typing\"");\n                    if (this.mic) {\n                        this.mic.callInput();\n                    }\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UserInputSubmitButton.prototype, \""active\"", {\n            get: function () {\n                return this._active;\n            },\n            set: function (value) {\n                this._active = value;\n                if (this.mic) {\n                    this.mic.active = value;\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UserInputSubmitButton.prototype, \""loading\"", {\n            get: function () {\n                return this.el.classList.contains(\""loading\"");\n            },\n            set: function (value) {\n                if (value)\n                    this.el.classList.add(\""loading\"");\n                else\n                    this.el.classList.remove(\""loading\"");\n            },\n            enumerable: true,\n            configurable: true\n        });\n        UserInputSubmitButton.prototype.addMicrophone = function (microphoneObj) {\n            this.el.classList.add(\""microphone-interface\"");\n            var template = document.createElement('template');\n            template.innerHTML = \""<div class=\\\""cf-input-icons cf-microphone\\\"">\\n\\t\\t\\t\\t<div class=\\\""cf-icon-audio\\\""></div>\\n\\t\\t\\t\\t<cf-icon-audio-eq></cf-icon-audio-eq>\\n\\t\\t\\t</div>\"";\n            var mic = template.firstChild || template.content.firstChild;\n            this.mic = new cf.MicrophoneBridge({\n                el: mic,\n                button: this,\n                eventTarget: this.eventTarget,\n                microphoneObj: microphoneObj\n            });\n            this.el.appendChild(mic);\n            // this.mic = null;\n            // this.el.appendChild(this.mic.el);\n        };\n        UserInputSubmitButton.prototype.reset = function () {\n            if (this.mic && !this.typing) {\n                // if microphone and not typing\n                this.mic.callInput();\n            }\n        };\n        UserInputSubmitButton.prototype.getTemplate = function () {\n            return \""<cf-input-button class=\\\""cf-input-button\\\"">\\n\\t\\t\\t\\t\\t\\t<div class=\\\""cf-input-icons\\\"">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\""cf-icon-progress\\\""></div>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\""cf-icon-attachment\\\""></div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</cf-input-button>\"";\n        };\n        UserInputSubmitButton.prototype.onMicrophoneTerminalError = function (event) {\n            if (this.mic) {\n                this.mic.dealloc();\n                this.mic = null;\n                this.el.removeChild(this.el.getElementsByClassName(\""cf-microphone\"")[0]);\n                this.el.classList.remove(\""microphone-interface\"");\n                this.loading = false;\n                this.eventTarget.dispatchEvent(new CustomEvent(cf.FlowEvents.USER_INPUT_INVALID, {\n                    detail: {\n                        errorText: event.detail\n                    } //UserTextInput value\n                }));\n            }\n        };\n        UserInputSubmitButton.prototype.onClick = function (event) {\n            var isMicVisible = this.mic && !this.typing;\n            if (isMicVisible) {\n                this.mic.callInput();\n            }\n            else {\n                this.eventTarget.dispatchEvent(new CustomEvent(cf.UserInputSubmitButtonEvents.CHANGE));\n            }\n        };\n        /**\n        * @name click\n        * force click on button\n        */\n        UserInputSubmitButton.prototype.click = function () {\n            this.el.click();\n        };\n        /**\n        * @name dealloc\n        * remove instance\n        */\n        UserInputSubmitButton.prototype.dealloc = function () {\n            this.eventTarget.removeEventListener(cf.MicrophoneBridgeEvent.TERMNIAL_ERROR, this.onMicrophoneTerminalErrorCallback, false);\n            this.onMicrophoneTerminalErrorCallback = null;\n            if (this.mic) {\n                this.mic.dealloc();\n            }\n            this.mic = null;\n            this.el.removeEventListener(\""click\"", this.onClickCallback, false);\n            this.onClickCallback = null;\n            this.el = null;\n            this.eventTarget = null;\n        };\n        return UserInputSubmitButton;\n    }());\n    cf.UserInputSubmitButton = UserInputSubmitButton;\n})(cf || (cf = {}));\n\n/// <reference path=\""../logic/FlowManager.ts\""/>\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    cf.UserInputTypes = {\n        VOICE: \""voice\"",\n        VR_GESTURE: \""vr-gesture\"",\n        TEXT: \""text\"" // <-- default\n    };\n})(cf || (cf = {}));\n\n\n/// <reference path=\""../BasicElement.ts\""/>\n/// <reference path=\""../control-elements/ControlElements.ts\""/>\n/// <reference path=\""../../logic/FlowManager.ts\""/>\n/// <reference path=\""../../interfaces/IUserInput.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// Abstract UserInpt element, should be extended when adding a new UI for user input\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    var UserInputElement = /** @class */ (function (_super) {\n        __extends(UserInputElement, _super);\n        function UserInputElement(options) {\n            var _this = _super.call(this, options) || this;\n            _this._disabled = false;\n            _this._visible = false;\n            _this.onChatReponsesUpdatedCallback = _this.onChatReponsesUpdated.bind(_this);\n            _this.eventTarget.addEventListener(cf.ChatListEvents.CHATLIST_UPDATED, _this.onChatReponsesUpdatedCallback, false);\n            _this.windowFocusCallback = _this.windowFocus.bind(_this);\n            window.addEventListener('focus', _this.windowFocusCallback, false);\n            _this.inputInvalidCallback = _this.inputInvalid.bind(_this);\n            _this.eventTarget.addEventListener(cf.FlowEvents.USER_INPUT_INVALID, _this.inputInvalidCallback, false);\n            _this.flowUpdateCallback = _this.onFlowUpdate.bind(_this);\n            _this.eventTarget.addEventListener(cf.FlowEvents.FLOW_UPDATE, _this.flowUpdateCallback, false);\n            return _this;\n        }\n        Object.defineProperty(UserInputElement.prototype, \""currentTag\"", {\n            get: function () {\n                return this._currentTag;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UserInputElement.prototype, \""visible\"", {\n            set: function (value) {\n                var _this = this;\n                this._visible = value;\n                if (!this.el.classList.contains(\""animate-in\"") && value) {\n                    setTimeout(function () {\n                        _this.el.classList.add(\""animate-in\"");\n                    }, 0);\n                }\n                else if (this.el.classList.contains(\""animate-in\"") && !value) {\n                    this.el.classList.remove(\""animate-in\"");\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UserInputElement.prototype, \""disabled\"", {\n            get: function () {\n                return this._disabled;\n            },\n            set: function (value) {\n                var hasChanged = this._disabled != value;\n                if (hasChanged) {\n                    this._disabled = value;\n                    if (value) {\n                        this.el.setAttribute(\""disabled\"", \""disabled\"");\n                    }\n                    else {\n                        this.setFocusOnInput();\n                        this.el.removeAttribute(\""disabled\"");\n                    }\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UserInputElement.prototype, \""height\"", {\n            get: function () {\n                var elHeight = 0;\n                var elMargin = 0;\n                var el = this.el;\n                if (cf.Helpers.isInternetExlorer()) {\n                    // IE\n                    elHeight = el.offsetHeight;\n                    elMargin = parseInt(el.currentStyle.marginTop, 10) + parseInt(el.currentStyle.marginBottom, 10);\n                    elMargin *= 2;\n                }\n                else {\n                    // none-IE\n                    elHeight = parseInt(document.defaultView.getComputedStyle(el, '').getPropertyValue('height'), 10);\n                    elMargin = parseInt(document.defaultView.getComputedStyle(el, '').getPropertyValue('margin-top')) + parseInt(document.defaultView.getComputedStyle(el, '').getPropertyValue('margin-bottom'));\n                }\n                return (elHeight + elMargin);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        UserInputElement.prototype.onEnterOrSubmitButtonSubmit = function (event) {\n            if (event === void 0) { event = null; }\n        };\n        UserInputElement.prototype.inputInvalid = function (event) {\n        };\n        /**\n        * @name deactivate\n        * DEactivate the field\n        */\n        UserInputElement.prototype.deactivate = function () {\n            this.disabled = true;\n        };\n        /**\n        * @name reactivate\n        * REactivate the field\n        */\n        UserInputElement.prototype.reactivate = function () {\n            this.disabled = false;\n        };\n        UserInputElement.prototype.getFlowDTO = function () {\n            var value; // = this.inputElement.value;\n            return value;\n        };\n        UserInputElement.prototype.setFocusOnInput = function () {\n        };\n        UserInputElement.prototype.onFlowStopped = function () {\n        };\n        UserInputElement.prototype.reset = function () {\n        };\n        UserInputElement.prototype.dealloc = function () {\n            this.eventTarget.removeEventListener(cf.ChatListEvents.CHATLIST_UPDATED, this.onChatReponsesUpdatedCallback, false);\n            this.onChatReponsesUpdatedCallback = null;\n            this.eventTarget.removeEventListener(cf.FlowEvents.USER_INPUT_INVALID, this.inputInvalidCallback, false);\n            this.inputInvalidCallback = null;\n            window.removeEventListener('focus', this.windowFocusCallback, false);\n            this.windowFocusCallback = null;\n            this.eventTarget.removeEventListener(cf.FlowEvents.FLOW_UPDATE, this.flowUpdateCallback, false);\n            this.flowUpdateCallback = null;\n            _super.prototype.dealloc.call(this);\n        };\n        UserInputElement.prototype.onFlowUpdate = function (event) {\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", event.type, event.detail);\n            this._currentTag = event.detail.tag;\n        };\n        UserInputElement.prototype.windowFocus = function (event) {\n        };\n        UserInputElement.prototype.onChatReponsesUpdated = function (event) {\n            // only show when user response\n            if (!event.detail.currentResponse.isRobotResponse) {\n                this.visible = true;\n                this.disabled = false;\n                this.setFocusOnInput();\n            }\n        };\n        UserInputElement.ERROR_TIME = 2000;\n        UserInputElement.preventAutoFocus = false;\n        UserInputElement.hideUserInputOnNoneTextInput = false;\n        return UserInputElement;\n    }(cf.BasicElement));\n    cf.UserInputElement = UserInputElement;\n    cf.UserInputEvents = {\n        SUBMIT: \""cf-input-user-input-submit\"",\n        KEY_CHANGE: \""cf-input-key-change\"",\n        CONTROL_ELEMENTS_ADDED: \""cf-input-control-elements-added\"",\n        HEIGHT_CHANGE: \""cf-input-height-change\"",\n        FOCUS: \""cf-input-focus\"",\n        BLUR: \""cf-input-blur\"",\n    };\n})(cf || (cf = {}));\n\n/// <reference path=\""../BasicElement.ts\""/>\n/// <reference path=\""../control-elements/ControlElements.ts\""/>\n/// <reference path=\""../../logic/FlowManager.ts\""/>\n/// <reference path=\""../../interfaces/IUserInputElement.ts\""/>\n/// <reference path=\""UserInputElement.ts\""/>\n/// <reference path=\""UserInputSubmitButton.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    // class\n    var UserTextInput = /** @class */ (function (_super) {\n        __extends(UserTextInput, _super);\n        function UserTextInput(options) {\n            var _this = _super.call(this, options) || this;\n            _this.initialInputHeight = 0;\n            _this.shiftIsDown = false;\n            //acts as a fallback for ex. shadow dom implementation\n            _this._active = false;\n            _this.cfReference = options.cfReference;\n            _this.eventTarget = options.eventTarget;\n            _this.inputElement = _this.el.getElementsByTagName(\""textarea\"")[0];\n            _this.onInputFocusCallback = _this.onInputFocus.bind(_this);\n            _this.onInputBlurCallback = _this.onInputBlur.bind(_this);\n            _this.inputElement.addEventListener('focus', _this.onInputFocusCallback, false);\n            _this.inputElement.addEventListener('blur', _this.onInputBlurCallback, false);\n            if (!cf.ConversationalForm.animationsEnabled) {\n                _this.inputElement.setAttribute('no-animations', '');\n            }\n            //<cf-input-control-elements> is defined in the ChatList.ts\n            _this.controlElements = new cf.ControlElements({\n                el: _this.el.getElementsByTagName(\""cf-input-control-elements\"")[0],\n                cfReference: _this.cfReference,\n                infoEl: _this.el.getElementsByTagName(\""cf-info\"")[0],\n                eventTarget: _this.eventTarget\n            });\n            // setup event listeners\n            _this.keyUpCallback = _this.onKeyUp.bind(_this);\n            document.addEventListener(\""keyup\"", _this.keyUpCallback, false);\n            _this.keyDownCallback = _this.onKeyDown.bind(_this);\n            document.addEventListener(\""keydown\"", _this.keyDownCallback, false);\n            _this.onOriginalTagChangedCallback = _this.onOriginalTagChanged.bind(_this);\n            _this.eventTarget.addEventListener(cf.TagEvents.ORIGINAL_ELEMENT_CHANGED, _this.onOriginalTagChangedCallback, false);\n            _this.onControlElementSubmitCallback = _this.onControlElementSubmit.bind(_this);\n            _this.eventTarget.addEventListener(cf.ControlElementEvents.SUBMIT_VALUE, _this.onControlElementSubmitCallback, false);\n            _this.onControlElementProgressChangeCallback = _this.onControlElementProgressChange.bind(_this);\n            _this.eventTarget.addEventListener(cf.ControlElementEvents.PROGRESS_CHANGE, _this.onControlElementProgressChangeCallback, false);\n            _this.onSubmitButtonChangeStateCallback = _this.onSubmitButtonChangeState.bind(_this);\n            _this.eventTarget.addEventListener(cf.UserInputSubmitButtonEvents.CHANGE, _this.onSubmitButtonChangeStateCallback, false);\n            // this.eventTarget.addEventListener(ControlElementsEvents.ON_RESIZE, () => {}, false);\n            _this.submitButton = new cf.UserInputSubmitButton({\n                eventTarget: _this.eventTarget\n            });\n            _this.el.querySelector('div').appendChild(_this.submitButton.el);\n            // setup microphone support, audio\n            if (options.microphoneInputObj) {\n                _this.microphoneObj = options.microphoneInputObj;\n                if (_this.microphoneObj && _this.microphoneObj.init) {\n                    // init if init method is defined\n                    _this.microphoneObj.init();\n                }\n                _this.submitButton.addMicrophone(_this.microphoneObj);\n            }\n            return _this;\n        }\n        Object.defineProperty(UserTextInput.prototype, \""active\"", {\n            get: function () {\n                return this.inputElement === document.activeElement || this._active;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(UserTextInput.prototype, \""disabled\"", {\n            set: function (value) {\n                var hasChanged = this._disabled != value;\n                if (!cf.ConversationalForm.suppressLog)\n                    console.log('option hasChanged', value);\n                if (hasChanged) {\n                    this._disabled = value;\n                    if (value) {\n                        this.el.setAttribute(\""disabled\"", \""disabled\"");\n                        this.inputElement.blur();\n                    }\n                    else {\n                        this.setFocusOnInput();\n                        this.el.removeAttribute(\""disabled\"");\n                    }\n                }\n            },\n            enumerable: true,\n            configurable: true\n        });\n        UserTextInput.prototype.getInputValue = function () {\n            var str = this.inputElement.value;\n            // Build-in way to handle XSS issues ->\n            var div = document.createElement('div');\n            div.appendChild(document.createTextNode(str));\n            return div.innerHTML;\n        };\n        UserTextInput.prototype.getFlowDTO = function () {\n            var value; // = this.inputElement.value;\n            // check for values on control elements as they should overwrite the input value.\n            if (this.controlElements && this.controlElements.active) {\n                value = this.controlElements.getDTO();\n            }\n            else {\n                value = {\n                    text: this.getInputValue()\n                };\n            }\n            // add current tag to DTO if not set\n            if (!value.tag)\n                value.tag = this.currentTag;\n            value.input = this;\n            value.tag = this.currentTag;\n            return value;\n        };\n        UserTextInput.prototype.reset = function () {\n            if (this.controlElements) {\n                this.controlElements.clearTagsAndReset();\n            }\n        };\n        UserTextInput.prototype.deactivate = function () {\n            _super.prototype.deactivate.call(this);\n            if (this.microphoneObj) {\n                this.submitButton.active = false;\n            }\n        };\n        UserTextInput.prototype.reactivate = function () {\n            _super.prototype.reactivate.call(this);\n            // called from microphone interface, check if active microphone, and set loading if yes\n            if (this.microphoneObj && !this.submitButton.typing) {\n                this.submitButton.loading = true;\n                // setting typing to false calls the externa interface, like Microphone\n                this.submitButton.typing = false;\n                this.submitButton.active = true;\n            }\n        };\n        UserTextInput.prototype.onFlowStopped = function () {\n            this.submitButton.loading = false;\n            if (this.submitButton.typing)\n                this.submitButton.typing = false;\n            if (this.controlElements)\n                this.controlElements.clearTagsAndReset();\n            this.disabled = true;\n        };\n        /**\n        * @name onOriginalTagChanged\n        * on domElement from a Tag value changed..\n        */\n        UserTextInput.prototype.onOriginalTagChanged = function (event) {\n            if (this.currentTag == event.detail.tag) {\n                this.onInputChange();\n            }\n            if (this.controlElements && this.controlElements.active) {\n                this.controlElements.updateStateOnElementsFromTag(event.detail.tag);\n            }\n        };\n        UserTextInput.prototype.onInputChange = function () {\n            if (!this.active && !this.controlElements.active)\n                return;\n            // safari likes to jump around with the scrollHeight value, let's keep it in check with an initial height.\n            var oldHeight = Math.max(this.initialInputHeight, parseInt(this.inputElement.style.height, 10));\n            this.inputElement.style.height = '0px';\n            // console.log(this.inputElement.style.height, this.inputElement.style);\n            this.inputElement.style.height = (this.inputElement.scrollHeight === 0 ? oldHeight : this.inputElement.scrollHeight) + \""px\"";\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.UserInputEvents.HEIGHT_CHANGE);\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.UserInputEvents.HEIGHT_CHANGE, {\n                detail: this.inputElement.scrollHeight\n            }));\n        };\n        UserTextInput.prototype.resetInputHeight = function () {\n            if (this.inputElement.getAttribute('rows') === '1') {\n                this.inputElement.style.height = this.initialInputHeight + 'px';\n            }\n            else {\n                this.inputElement.style.height = '0px';\n            }\n        };\n        UserTextInput.prototype.inputInvalid = function (event) {\n            var _this = this;\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", event.type, event.detail);\n            var dto = event.detail;\n            this.inputElement.setAttribute(\""data-value\"", this.inputElement.value);\n            this.inputElement.value = \""\"";\n            this.el.setAttribute(\""error\"", \""\"");\n            this.disabled = true;\n            // cf-error\n            this.inputElement.setAttribute(\""placeholder\"", dto.errorText || (this._currentTag ? this._currentTag.errorMessage : \""\""));\n            clearTimeout(this.errorTimer);\n            // remove loading class\n            this.submitButton.loading = false;\n            this.errorTimer = setTimeout(function () {\n                _this.disabled = false;\n                if (!cf.ConversationalForm.suppressLog)\n                    console.log('option, disabled 1');\n                _this.el.removeAttribute(\""error\"");\n                _this.inputElement.value = _this.inputElement.getAttribute(\""data-value\"");\n                _this.inputElement.setAttribute(\""data-value\"", \""\"");\n                _this.setPlaceholder();\n                _this.setFocusOnInput();\n                //TODO: reset submit button..\n                _this.submitButton.reset();\n                if (_this.controlElements)\n                    _this.controlElements.resetAfterErrorMessage();\n            }, cf.UserInputElement.ERROR_TIME);\n        };\n        UserTextInput.prototype.setPlaceholder = function () {\n            if (this._currentTag) {\n                if (this._currentTag.inputPlaceholder) {\n                    this.inputElement.setAttribute(\""placeholder\"", this._currentTag.inputPlaceholder);\n                }\n                else {\n                    this.inputElement.setAttribute(\""placeholder\"", this._currentTag.type == \""group\"" ? cf.Dictionary.get(\""group-placeholder\"") : cf.Dictionary.get(\""input-placeholder\""));\n                }\n            }\n            else {\n                this.inputElement.setAttribute(\""placeholder\"", cf.Dictionary.get(\""group-placeholder\""));\n            }\n        };\n        /**\n         * TODO: handle detect input/textarea in a simpler way - too conditional heavy\n         *\n         * @private\n         * @memberof UserTextInput\n         */\n        UserTextInput.prototype.checkForCorrectInputTag = function () {\n            var tagName = this.tagType(this._currentTag);\n            // remove focus and blur events, because we want to create a new element\n            if (this.inputElement && this.inputElement.tagName !== tagName) {\n                this.inputElement.removeEventListener('focus', this.onInputFocusCallback, false);\n                this.inputElement.removeEventListener('blur', this.onInputBlurCallback, false);\n            }\n            this.removeAttribute('autocomplete');\n            this.removeAttribute('list');\n            if (tagName === 'INPUT') {\n                // change to input\n                var input_1 = document.createElement(\""input\"");\n                Array.prototype.slice.call(this.inputElement.attributes).forEach(function (item) {\n                    input_1.setAttribute(item.name, item.value);\n                });\n                if (this.inputElement.type === 'password') {\n                    input_1.setAttribute(\""autocomplete\"", \""new-password\"");\n                }\n                if (this._currentTag.domElement.hasAttribute('autocomplete')) {\n                    input_1.setAttribute('autocomplete', this._currentTag.domElement.getAttribute('autocomplete'));\n                }\n                if (this._currentTag.domElement.hasAttribute('list')) {\n                    input_1.setAttribute('list', this._currentTag.domElement.getAttribute('list'));\n                }\n                this.inputElement.parentNode.replaceChild(input_1, this.inputElement);\n                this.inputElement = input_1;\n            }\n            else if (this.inputElement && this.inputElement.tagName !== tagName) {\n                // change to textarea\n                var textarea_1 = document.createElement(\""textarea\"");\n                Array.prototype.slice.call(this.inputElement.attributes).forEach(function (item) {\n                    textarea_1.setAttribute(item.name, item.value);\n                });\n                this.inputElement.parentNode.replaceChild(textarea_1, this.inputElement);\n                this.inputElement = textarea_1;\n            }\n            // add focus and blur events to newly created input element\n            if (this.inputElement && this.inputElement.tagName !== tagName) {\n                this.inputElement.addEventListener('focus', this.onInputFocusCallback, false);\n                this.inputElement.addEventListener('blur', this.onInputBlurCallback, false);\n            }\n            if (this.initialInputHeight == 0) {\n                // initial height not set\n                this.initialInputHeight = this.inputElement.offsetHeight;\n            }\n            this.setFocusOnInput();\n        };\n        /**\n         * Removes attribute on input element if attribute is present\n         *\n         * @private\n         * @param {string} attribute\n         * @memberof UserTextInput\n         */\n        UserTextInput.prototype.removeAttribute = function (attribute) {\n            if (this.inputElement\n                && this.inputElement.hasAttribute(attribute)) {\n                this.inputElement.removeAttribute(attribute);\n            }\n        };\n        UserTextInput.prototype.tagType = function (inputElement) {\n            if (!inputElement.domElement\n                || !inputElement.domElement.tagName) {\n                return 'TEXTAREA';\n            }\n            if (inputElement.domElement.tagName === 'TEXTAREA'\n                || (inputElement.domElement.hasAttribute('rows')\n                    && parseInt(inputElement.domElement.getAttribute('rows'), 10) > 1))\n                return 'TEXTAREA';\n            if (inputElement.domElement.tagName === 'INPUT')\n                return 'INPUT';\n            return 'TEXTAREA'; // TODO\n        };\n        UserTextInput.prototype.onFlowUpdate = function (event) {\n            var _this = this;\n            _super.prototype.onFlowUpdate.call(this, event);\n            this.submitButton.loading = false;\n            if (this.submitButton.typing)\n                this.submitButton.typing = false;\n            // animate input field in\n            this.el.setAttribute(\""tag-type\"", this._currentTag.type);\n            // replace textarea and visa versa\n            this.checkForCorrectInputTag();\n            // set input field to type password if the dom input field is that, covering up the input\n            var isInputSpecificType = [\""password\"", \""number\"", \""email\"", \""tel\""].indexOf(this._currentTag.type) !== -1;\n            this.inputElement.setAttribute(\""type\"", isInputSpecificType ? this._currentTag.type : \""input\"");\n            clearTimeout(this.errorTimer);\n            this.el.removeAttribute(\""error\"");\n            this.inputElement.setAttribute(\""data-value\"", \""\"");\n            this.inputElement.value = \""\"";\n            this.submitButton.loading = false;\n            this.setPlaceholder();\n            this.resetValue();\n            this.setFocusOnInput();\n            this.controlElements.reset();\n            if (this._currentTag.type == \""group\"") {\n                this.buildControlElements(this._currentTag.elements);\n            }\n            else {\n                this.buildControlElements([this._currentTag]);\n            }\n            if (this._currentTag.defaultValue) {\n                this.inputElement.value = this._currentTag.defaultValue.toString();\n            }\n            if (this._currentTag.skipUserInput === true) {\n                this.el.classList.add(\""hide-input\"");\n            }\n            else {\n                this.el.classList.remove(\""hide-input\"");\n            }\n            // Set rows attribute if present\n            if (this._currentTag.rows && this._currentTag.rows > 1) {\n                this.inputElement.setAttribute('rows', this._currentTag.rows.toString());\n            }\n            if (cf.UserInputElement.hideUserInputOnNoneTextInput) {\n                // toggle userinput hide\n                if (this.controlElements.active) {\n                    this.el.classList.add(\""hide-input\"");\n                    // set focus on first control element\n                    this.controlElements.focusFrom(\""bottom\"");\n                }\n                else {\n                    this.el.classList.remove(\""hide-input\"");\n                }\n            }\n            this.resetInputHeight();\n            setTimeout(function () {\n                _this.onInputChange();\n            }, 300);\n        };\n        UserTextInput.prototype.onControlElementProgressChange = function (event) {\n            var status = event.detail;\n            this.disabled = status == cf.ControlElementProgressStates.BUSY;\n            if (!cf.ConversationalForm.suppressLog)\n                console.log('option, disabled 2');\n        };\n        UserTextInput.prototype.buildControlElements = function (tags) {\n            this.controlElements.buildTags(tags);\n        };\n        UserTextInput.prototype.onControlElementSubmit = function (event) {\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", event.type, event.detail);\n            // when ex a RadioButton is clicked..\n            var controlElement = event.detail;\n            this.controlElements.updateStateOnElements(controlElement);\n            this.doSubmit();\n        };\n        UserTextInput.prototype.onSubmitButtonChangeState = function (event) {\n            this.onEnterOrSubmitButtonSubmit(event);\n        };\n        UserTextInput.prototype.isMetaKeyPressed = function (event) {\n            // if any meta keys, then ignore, getModifierState, but safari does not support..\n            if (event.metaKey || [91, 93].indexOf(event.keyCode) !== -1)\n                return;\n        };\n        UserTextInput.prototype.onKeyDown = function (event) {\n            if (!this.active && !this.controlElements.focus)\n                return;\n            if (this.isControlElementsActiveAndUserInputHidden())\n                return;\n            if (this.isMetaKeyPressed(event))\n                return;\n            // if any meta keys, then ignore\n            if (event.keyCode == cf.Dictionary.keyCodes[\""shift\""])\n                this.shiftIsDown = true;\n            // If submit is prevented by option 'preventSubmitOnEnter'\n            if (this.cfReference.preventSubmitOnEnter === true && this.inputElement.hasAttribute('rows') && parseInt(this.inputElement.getAttribute('rows')) > 1) {\n                return;\n            }\n            // prevent textarea line breaks\n            if (event.keyCode == cf.Dictionary.keyCodes[\""enter\""] && !event.shiftKey) {\n                event.preventDefault();\n            }\n        };\n        UserTextInput.prototype.isControlElementsActiveAndUserInputHidden = function () {\n            return this.controlElements && this.controlElements.active && cf.UserInputElement.hideUserInputOnNoneTextInput;\n        };\n        UserTextInput.prototype.onKeyUp = function (event) {\n            if ((!this.active && !this.isControlElementsActiveAndUserInputHidden()) && !this.controlElements.focus)\n                return;\n            if (this.isMetaKeyPressed(event))\n                return;\n            if (event.keyCode == cf.Dictionary.keyCodes[\""shift\""]) {\n                this.shiftIsDown = false;\n            }\n            else if (event.keyCode == cf.Dictionary.keyCodes[\""up\""]) {\n                event.preventDefault();\n                if (this.active && !this.controlElements.focus)\n                    this.controlElements.focusFrom(\""bottom\"");\n            }\n            else if (event.keyCode == cf.Dictionary.keyCodes[\""down\""]) {\n                event.preventDefault();\n                if (this.active && !this.controlElements.focus)\n                    this.controlElements.focusFrom(\""top\"");\n            }\n            else if (event.keyCode == cf.Dictionary.keyCodes[\""tab\""]) {\n                // tab key pressed, check if node is child of CF, if then then reset focus to input element\n                var doesKeyTargetExistInCF = false;\n                var node = event.target.parentNode;\n                while (node != null) {\n                    if (node === this.cfReference.el) {\n                        doesKeyTargetExistInCF = true;\n                        break;\n                    }\n                    node = node.parentNode;\n                }\n                // prevent normal behaviour, we are not here to take part, we are here to take over!\n                if (!doesKeyTargetExistInCF) {\n                    event.preventDefault();\n                    if (!this.controlElements.active)\n                        this.setFocusOnInput();\n                }\n            }\n            if (this.el.hasAttribute(\""disabled\""))\n                return;\n            var value = this.getFlowDTO();\n            if ((event.keyCode == cf.Dictionary.keyCodes[\""enter\""] && !event.shiftKey) || event.keyCode == cf.Dictionary.keyCodes[\""space\""]) {\n                if (event.keyCode == cf.Dictionary.keyCodes[\""enter\""] && this.active) {\n                    if (this.cfReference.preventSubmitOnEnter === true)\n                        return;\n                    event.preventDefault();\n                    this.onEnterOrSubmitButtonSubmit();\n                }\n                else {\n                    // either click on submit button or do something with control elements\n                    if (event.keyCode == cf.Dictionary.keyCodes[\""enter\""] || event.keyCode == cf.Dictionary.keyCodes[\""space\""]) {\n                        event.preventDefault();\n                        var tagType = this._currentTag.type == \""group\"" ? this._currentTag.getGroupTagType() : this._currentTag.type;\n                        if (tagType == \""select\"" || tagType == \""checkbox\"") {\n                            var mutiTag = this._currentTag;\n                            // if select or checkbox then check for multi select item\n                            if (tagType == \""checkbox\"" || mutiTag.multipleChoice) {\n                                if ((this.active || this.isControlElementsActiveAndUserInputHidden()) && event.keyCode == cf.Dictionary.keyCodes[\""enter\""]) {\n                                    // click on UserTextInput submit button, only ENTER allowed\n                                    this.submitButton.click();\n                                }\n                                else {\n                                    // let UI know that we changed the key\n                                    if (!this.active && !this.controlElements.active && !this.isControlElementsActiveAndUserInputHidden()) {\n                                        // after ui has been selected we RESET the input/filter\n                                        this.resetValue();\n                                        this.setFocusOnInput();\n                                    }\n                                    this.dispatchKeyChange(value, event.keyCode);\n                                }\n                            }\n                            else {\n                                this.dispatchKeyChange(value, event.keyCode);\n                            }\n                        }\n                        else {\n                            if (this._currentTag.type == \""group\"") {\n                                // let the controlements handle action\n                                this.dispatchKeyChange(value, event.keyCode);\n                            }\n                        }\n                    }\n                    else if (event.keyCode == cf.Dictionary.keyCodes[\""space\""] && document.activeElement) {\n                        this.dispatchKeyChange(value, event.keyCode);\n                    }\n                }\n            }\n            else if (event.keyCode != cf.Dictionary.keyCodes[\""shift\""] && event.keyCode != cf.Dictionary.keyCodes[\""tab\""]) {\n                this.dispatchKeyChange(value, event.keyCode);\n            }\n            this.onInputChange();\n        };\n        UserTextInput.prototype.dispatchKeyChange = function (dto, keyCode) {\n            // typing --->\n            this.submitButton.typing = dto.text && dto.text.length > 0;\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.UserInputEvents.KEY_CHANGE, dto);\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.UserInputEvents.KEY_CHANGE, {\n                detail: {\n                    dto: dto,\n                    keyCode: keyCode,\n                    inputFieldActive: this.active\n                }\n            }));\n        };\n        UserTextInput.prototype.windowFocus = function (event) {\n            _super.prototype.windowFocus.call(this, event);\n            this.setFocusOnInput();\n        };\n        UserTextInput.prototype.onInputBlur = function (event) {\n            this._active = false;\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.UserInputEvents.BLUR));\n        };\n        UserTextInput.prototype.onInputFocus = function (event) {\n            this._active = true;\n            this.onInputChange();\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.UserInputEvents.FOCUS));\n        };\n        UserTextInput.prototype.setFocusOnInput = function () {\n            if (!cf.UserInputElement.preventAutoFocus && !this.el.classList.contains(\""hide-input\"")) {\n                this.inputElement.focus();\n            }\n        };\n        UserTextInput.prototype.onEnterOrSubmitButtonSubmit = function (event) {\n            if (event === void 0) { event = null; }\n            var isControlElementsActiveAndUserInputHidden = this.controlElements.active && cf.UserInputElement.hideUserInputOnNoneTextInput;\n            if ((this.active || isControlElementsActiveAndUserInputHidden) && this.controlElements.highlighted) {\n                // active input field and focus on control elements happens when a control element is highlighted\n                this.controlElements.clickOnHighlighted();\n            }\n            else {\n                if (!this._currentTag) {\n                    // happens when a form is empty, so just play along and submit response to chatlist..\n                    this.eventTarget.cf.addUserChatResponse(this.inputElement.value);\n                }\n                else {\n                    // we need to check if current tag is file\n                    if (this._currentTag.type == \""file\"" && event) {\n                        // trigger <input type=\""file\"" but only when it's from clicking button\n                        this.controlElements.getElement(0).triggerFileSelect();\n                    }\n                    else {\n                        // for groups, we expect that there is always a default value set\n                        this.doSubmit();\n                    }\n                }\n            }\n        };\n        UserTextInput.prototype.doSubmit = function () {\n            var dto = this.getFlowDTO();\n            this.submitButton.loading = true;\n            this.disabled = true;\n            this.el.removeAttribute(\""error\"");\n            this.inputElement.setAttribute(\""data-value\"", \""\"");\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.UserInputEvents.SUBMIT, dto);\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.UserInputEvents.SUBMIT, {\n                detail: dto\n            }));\n        };\n        UserTextInput.prototype.resetValue = function () {\n            this.inputElement.value = \""\"";\n            if (this.inputElement.hasAttribute('rows'))\n                this.inputElement.setAttribute('rows', '1');\n            this.onInputChange();\n        };\n        UserTextInput.prototype.dealloc = function () {\n            this.inputElement.removeEventListener('blur', this.onInputBlurCallback, false);\n            this.onInputBlurCallback = null;\n            this.inputElement.removeEventListener('focus', this.onInputFocusCallback, false);\n            this.onInputFocusCallback = null;\n            document.removeEventListener(\""keydown\"", this.keyDownCallback, false);\n            this.keyDownCallback = null;\n            document.removeEventListener(\""keyup\"", this.keyUpCallback, false);\n            this.keyUpCallback = null;\n            this.eventTarget.removeEventListener(cf.ControlElementEvents.SUBMIT_VALUE, this.onControlElementSubmitCallback, false);\n            this.onControlElementSubmitCallback = null;\n            // remove submit button instance\n            this.submitButton.el.removeEventListener(cf.UserInputSubmitButtonEvents.CHANGE, this.onSubmitButtonChangeStateCallback, false);\n            this.onSubmitButtonChangeStateCallback = null;\n            this.submitButton.dealloc();\n            this.submitButton = null;\n            _super.prototype.dealloc.call(this);\n        };\n        // override\n        UserTextInput.prototype.getTemplate = function () {\n            return this.customTemplate || \""<cf-input>\\n\\t\\t\\t\\t<cf-info></cf-info>\\n\\t\\t\\t\\t<cf-input-control-elements>\\n\\t\\t\\t\\t\\t<cf-list-button direction=\\\""prev\\\"">\\n\\t\\t\\t\\t\\t</cf-list-button>\\n\\t\\t\\t\\t\\t<cf-list-button direction=\\\""next\\\"">\\n\\t\\t\\t\\t\\t</cf-list-button>\\n\\t\\t\\t\\t\\t<cf-list>\\n\\t\\t\\t\\t\\t</cf-list>\\n\\t\\t\\t\\t</cf-input-control-elements>\\n\\t\\t\\t\\t<div class=\\\""inputWrapper\\\"">\\n\\t\\t\\t\\t\\t<textarea type='input' tabindex=\\\""1\\\"" rows=\\\""1\\\""></textarea>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</cf-input>\\n\\t\\t\\t\"";\n        };\n        return UserTextInput;\n    }(cf.UserInputElement));\n    cf.UserTextInput = UserTextInput;\n})(cf || (cf = {}));\n\n/// <reference path=\""../BasicElement.ts\""/>\n/// <reference path=\""../../logic/Helpers.ts\""/>\n/// <reference path=\""../../ConversationalForm.ts\""/>\n/// <reference path=\""../../interfaces/IUserInterfaceOptions.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    cf.ChatResponseEvents = {\n        USER_ANSWER_CLICKED: \""cf-on-user-answer-clicked\""\n    };\n    // class\n    var ChatResponse = /** @class */ (function (_super) {\n        __extends(ChatResponse, _super);\n        function ChatResponse(options) {\n            var _this = _super.call(this, options) || this;\n            _this.container = options.container;\n            _this.uiOptions = options.cfReference.uiOptions;\n            _this._tag = options.tag;\n            return _this;\n        }\n        Object.defineProperty(ChatResponse.prototype, \""tag\"", {\n            get: function () {\n                return this._tag;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ChatResponse.prototype, \""added\"", {\n            get: function () {\n                return !!this.el || !!this.el.parentNode || !!this.el.parentNode.parentNode;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ChatResponse.prototype, \""disabled\"", {\n            get: function () {\n                return this.el.classList.contains(\""disabled\"");\n            },\n            set: function (value) {\n                if (value)\n                    this.el.classList.add(\""disabled\"");\n                else\n                    this.el.classList.remove(\""disabled\"");\n            },\n            enumerable: true,\n            configurable: true\n        });\n        /**\n         * We depend on scroll in a column-reverse flex container. This is where Edge and Firefox comes up short\n         */\n        ChatResponse.prototype.hasFlexBug = function () {\n            return this.cfReference.el.classList.contains('browser-firefox') || this.cfReference.el.classList.contains('browser-edge');\n        };\n        ChatResponse.prototype.animateIn = function () {\n            var _this = this;\n            var outer = document.querySelector('scrollable');\n            var inner = document.querySelector('.scrollableInner');\n            if (this.hasFlexBug())\n                inner.classList.remove('scroll');\n            requestAnimationFrame(function () {\n                var height = _this.el.scrollHeight;\n                _this.el.style.height = '0px';\n                requestAnimationFrame(function () {\n                    _this.el.style.height = height + 'px';\n                    _this.el.classList.add('show');\n                    // Listen for transitionend and set to height:auto\n                    try {\n                        var sm = window.getComputedStyle(document.querySelectorAll('p.show')[0]);\n                        var cssAnimationTime = +sm.animationDuration.replace('s', ''); // format '0.234234xs\n                        var cssAnimationDelayTime = +sm.animationDelay.replace('s', '');\n                        setTimeout(function () {\n                            _this.el.style.height = 'auto';\n                            if (_this.hasFlexBug() && inner.scrollHeight > outer.offsetHeight) {\n                                inner.classList.add('scroll');\n                                inner.scrollTop = inner.scrollHeight;\n                            }\n                        }, (cssAnimationTime + cssAnimationDelayTime) * 1500);\n                    }\n                    catch (err) {\n                        // Fallback method. Assuming animations do not take longer than 1000ms\n                        setTimeout(function () {\n                            if (_this.hasFlexBug() && inner.scrollHeight > outer.offsetHeight) {\n                                inner.classList.add('scroll');\n                                inner.scrollTop = inner.scrollHeight;\n                            }\n                            _this.el.style.height = 'auto';\n                        }, 3000);\n                    }\n                });\n            });\n        };\n        Object.defineProperty(ChatResponse.prototype, \""visible\"", {\n            set: function (value) {\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ChatResponse.prototype, \""strippedSesponse\"", {\n            get: function () {\n                var html = this.response;\n                // use browsers native way of stripping\n                var div = document.createElement(\""div\"");\n                div.innerHTML = html;\n                return div.textContent || div.innerText || \""\"";\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ChatResponse.prototype.whenReady = function (resolve) {\n            this.onReadyCallback = resolve;\n        };\n        ChatResponse.prototype.setValue = function (dto) {\n            // if(!this.visible){\n            // \tthis.visible = true;\n            // }\n            if (dto === void 0) { dto = null; }\n            var isThinking = this.el.hasAttribute(\""thinking\"");\n            if (!dto) {\n                this.setToThinking();\n            }\n            else {\n                // same same\n                this.response = this.originalResponse = dto.text;\n                this.processResponseAndSetText();\n                if (this.responseLink && !this.isRobotResponse) {\n                    // call robot and update for binding values ->\n                    this.responseLink.processResponseAndSetText();\n                }\n                // check for if response type is file upload...\n                if (dto && dto.controlElements && dto.controlElements[0]) {\n                    switch (dto.controlElements[0].type) {\n                        case \""UploadFileUI\"":\n                            this.textEl.classList.add(\""file-icon\"");\n                            break;\n                    }\n                }\n                if (!this.isRobotResponse && !this.onClickCallback) {\n                    // edit\n                    this.onClickCallback = this.onClick.bind(this);\n                    this.el.addEventListener(cf.Helpers.getMouseEvent(\""click\""), this.onClickCallback, false);\n                }\n            }\n        };\n        ChatResponse.prototype.show = function () {\n            this.visible = true;\n            this.disabled = false;\n            if (!this.response) {\n                this.setToThinking();\n            }\n            else {\n                this.checkForEditMode();\n            }\n        };\n        ChatResponse.prototype.updateThumbnail = function (src) {\n            var thumbEl = this.el.getElementsByTagName(\""thumb\"")[0];\n            if (src.indexOf(\""text:\"") === 0) {\n                var thumbElSpan = thumbEl.getElementsByTagName(\""span\"")[0];\n                thumbElSpan.innerHTML = src.split(\""text:\"")[1];\n                thumbElSpan.setAttribute(\""length\"", src.length.toString());\n            }\n            else {\n                this.image = src;\n                thumbEl.style.backgroundImage = 'url(\""' + this.image + '\"")';\n            }\n        };\n        ChatResponse.prototype.setLinkToOtherReponse = function (response) {\n            // link reponse to another one, keeping the update circle complete.\n            this.responseLink = response;\n        };\n        ChatResponse.prototype.processResponseAndSetText = function () {\n            var _this = this;\n            if (!this.originalResponse)\n                return;\n            var innerResponse = this.originalResponse;\n            if (this._tag && this._tag.type == \""password\"" && !this.isRobotResponse) {\n                var newStr = \""\"";\n                for (var i_1 = 0; i_1 < innerResponse.length; i_1++) {\n                    newStr += \""*\"";\n                }\n                innerResponse = newStr;\n            }\n            // if robot, then check linked response for binding values\n            if (this.responseLink && this.isRobotResponse) {\n                // one way data binding values:\n                innerResponse = innerResponse.split(\""{previous-answer}\"").join(this.responseLink.parsedResponse);\n            }\n            if (this.isRobotResponse) {\n                // Piping, look through IDs, and map values to dynamics\n                var reponses = ChatResponse.list.getResponses();\n                for (var i = 0; i < reponses.length; i++) {\n                    var response = reponses[i];\n                    if (response !== this) {\n                        if (response.tag) {\n                            // check for id, standard\n                            if (response.tag.id) {\n                                innerResponse = innerResponse.split(\""{\"" + response.tag.id + \""}\"").join(response.tag.value);\n                            }\n                            //fallback check for name\n                            if (response.tag.name) {\n                                innerResponse = innerResponse.split(\""{\"" + response.tag.name + \""}\"").join(response.tag.value);\n                            }\n                        }\n                    }\n                }\n            }\n            // check if response contains an image as answer\n            var responseContains = innerResponse.indexOf(\""contains-image\"") != -1;\n            if (responseContains)\n                this.textEl.classList.add(\""contains-image\"");\n            // now set it\n            if (this.isRobotResponse) {\n                this.textEl.innerHTML = \""\"";\n                if (!this.uiOptions)\n                    this.uiOptions = this.cfReference.uiOptions; // On edit uiOptions are empty, so this mitigates the problem. Not ideal.\n                var robotInitResponseTime = this.uiOptions.robot.robotResponseTime;\n                if (robotInitResponseTime != 0) {\n                    this.setToThinking();\n                }\n                // robot response, allow for && for multiple responses\n                var chainedResponses = innerResponse.split(\""&&\"");\n                if (robotInitResponseTime === 0) {\n                    for (var i_2 = 0; i_2 < chainedResponses.length; i_2++) {\n                        var str = chainedResponses[i_2];\n                        this.textEl.innerHTML += \""<p>\"" + str + \""</p>\"";\n                    }\n                    var _loop_1 = function (i_3) {\n                        setTimeout(function () {\n                            _this.tryClearThinking();\n                            var p = _this.textEl.getElementsByTagName(\""p\"");\n                            p[i_3].classList.add(\""show\"");\n                            _this.scrollTo();\n                        }, chainedResponses.length > 1 && i_3 > 0 ? robotInitResponseTime + ((i_3 + 1) * this_1.uiOptions.robot.chainedResponseTime) : 0);\n                    };\n                    var this_1 = this;\n                    for (var i_3 = 0; i_3 < chainedResponses.length; i_3++) {\n                        _loop_1(i_3);\n                    }\n                }\n                else {\n                    var _loop_2 = function (i_4) {\n                        var revealAfter = robotInitResponseTime + (i_4 * this_2.uiOptions.robot.chainedResponseTime);\n                        var str = chainedResponses[i_4];\n                        setTimeout(function () {\n                            _this.tryClearThinking();\n                            _this.textEl.innerHTML += \""<p>\"" + str + \""</p>\"";\n                            var p = _this.textEl.getElementsByTagName(\""p\"");\n                            p[i_4].classList.add(\""show\"");\n                            _this.scrollTo();\n                        }, revealAfter);\n                    };\n                    var this_2 = this;\n                    for (var i_4 = 0; i_4 < chainedResponses.length; i_4++) {\n                        _loop_2(i_4);\n                    }\n                }\n                this.readyTimer = setTimeout(function () {\n                    if (_this.onReadyCallback)\n                        _this.onReadyCallback();\n                    // reset, as it can be called again\n                    _this.onReadyCallback = null;\n                    if (_this._tag && _this._tag.skipUserInput === true) {\n                        setTimeout(function () {\n                            _this._tag.flowManager.nextStep();\n                            _this._tag.skipUserInput = false; // to avoid nextStep being fired again as this would make the flow jump too far when editing a response\n                        }, _this.uiOptions.robot.chainedResponseTime);\n                    }\n                }, robotInitResponseTime + (chainedResponses.length * this.uiOptions.robot.chainedResponseTime));\n            }\n            else {\n                // user response, act normal\n                this.tryClearThinking();\n                var hasImage = innerResponse.indexOf('<img') > -1;\n                var imageRegex = new RegExp('<img[^>]*?>', 'g');\n                var imageTag = innerResponse.match(imageRegex);\n                if (hasImage && imageTag) {\n                    innerResponse = innerResponse.replace(imageTag[0], '');\n                    this.textEl.innerHTML = \""<p class=\\\""hasImage\\\"">\"" + imageTag + \""<span>\"" + innerResponse + \""</span></p>\"";\n                }\n                else {\n                    this.textEl.innerHTML = \""<p>\"" + innerResponse + \""</p>\"";\n                }\n                var p = this.textEl.getElementsByTagName(\""p\"");\n                p[p.length - 1].offsetWidth;\n                p[p.length - 1].classList.add(\""show\"");\n                this.scrollTo();\n            }\n            this.parsedResponse = innerResponse;\n            // }\n            // value set, so add element, if not added\n            if (this.uiOptions.robot\n                && this.uiOptions.robot.robotResponseTime === 0) {\n                this.addSelf();\n            }\n            else {\n                setTimeout(function () {\n                    _this.addSelf();\n                }, 0);\n            }\n            // bounce\n            this.textEl.removeAttribute(\""value-added\"");\n            setTimeout(function () {\n                _this.textEl.setAttribute(\""value-added\"", \""\"");\n                _this.el.classList.add(\""peak-thumb\"");\n            }, 0);\n            this.checkForEditMode();\n            // update response\n            // remove the double ampersands if present\n            this.response = innerResponse.split(\""&&\"").join(\"" \"");\n        };\n        ChatResponse.prototype.scrollTo = function () {\n            var y = this.el.offsetTop;\n            var h = this.el.offsetHeight;\n            if (!this.container && this.el)\n                this.container = this.el; // On edit this.container is empty so this is a fix to reassign it. Not ideal, but...\n            if (this.container\n                && this.container.parentElement\n                && this.container.parentElement.scrollHeight) {\n                this.container.parentElement.scrollTop = y + h + this.container.parentElement.scrollHeight;\n            }\n        };\n        ChatResponse.prototype.checkForEditMode = function () {\n            if (!this.isRobotResponse && !this.el.hasAttribute(\""thinking\"")) {\n                this.el.classList.add(\""can-edit\"");\n                this.disabled = false;\n            }\n        };\n        ChatResponse.prototype.tryClearThinking = function () {\n            if (this.el.hasAttribute(\""thinking\"")) {\n                this.textEl.innerHTML = \""\"";\n                this.el.removeAttribute(\""thinking\"");\n            }\n        };\n        ChatResponse.prototype.setToThinking = function () {\n            var canShowThinking = (this.isRobotResponse && this.uiOptions.robot.robotResponseTime !== 0) || (!this.isRobotResponse && this.cfReference.uiOptions.user.showThinking && !this._tag.skipUserInput);\n            if (canShowThinking) {\n                this.textEl.innerHTML = ChatResponse.THINKING_MARKUP;\n                this.el.classList.remove(\""can-edit\"");\n                this.el.setAttribute(\""thinking\"", \""\"");\n            }\n            if (this.cfReference.uiOptions.user.showThinking || this.cfReference.uiOptions.user.showThumb) {\n                this.addSelf();\n            }\n        };\n        /**\n        * @name addSelf\n        * add one self to the chat list\n        */\n        ChatResponse.prototype.addSelf = function () {\n            if (this.el.parentNode != this.container) {\n                this.container.appendChild(this.el);\n                this.animateIn();\n            }\n        };\n        /**\n        * @name onClickCallback\n        * click handler for el\n        */\n        ChatResponse.prototype.onClick = function (event) {\n            this.setToThinking();\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.ChatResponseEvents.USER_ANSWER_CLICKED, event);\n            this.eventTarget.dispatchEvent(new CustomEvent(cf.ChatResponseEvents.USER_ANSWER_CLICKED, {\n                detail: this._tag\n            }));\n        };\n        ChatResponse.prototype.setData = function (options) {\n            this.image = options.image;\n            this.response = this.originalResponse = options.response;\n            this.isRobotResponse = options.isRobotResponse;\n            _super.prototype.setData.call(this, options);\n        };\n        ChatResponse.prototype.onElementCreated = function () {\n            var _this = this;\n            this.textEl = this.el.getElementsByTagName(\""text\"")[0];\n            this.updateThumbnail(this.image);\n            if (this.isRobotResponse || this.response != null) {\n                // Robot is pseudo thinking, can also be user -->\n                // , but if addUserChatResponse is called from ConversationalForm, then the value is there, therefore skip ...\n                setTimeout(function () {\n                    _this.setValue({ text: _this.response });\n                }, 0);\n                //ConversationalForm.animationsEnabled ? Helpers.lerp(Math.random(), 500, 900) : 0);\n            }\n            else {\n                if (this.cfReference.uiOptions.user.showThumb) {\n                    this.el.classList.add(\""peak-thumb\"");\n                }\n            }\n        };\n        ChatResponse.prototype.dealloc = function () {\n            clearTimeout(this.readyTimer);\n            this.container = null;\n            this.uiOptions = null;\n            this.onReadyCallback = null;\n            if (this.onClickCallback) {\n                this.el.removeEventListener(cf.Helpers.getMouseEvent(\""click\""), this.onClickCallback, false);\n                this.onClickCallback = null;\n            }\n            _super.prototype.dealloc.call(this);\n        };\n        // template, can be overwritten ...\n        ChatResponse.prototype.getTemplate = function () {\n            return \""<cf-chat-response class=\\\""\"" + (this.isRobotResponse ? \""robot\"" : \""user\"") + \""\\\"">\\n\\t\\t\\t\\t<thumb><span></span></thumb>\\n\\t\\t\\t\\t<text></text>\\n\\t\\t\\t</cf-chat-response>\"";\n        };\n        ChatResponse.THINKING_MARKUP = \""<p class='show'><thinking><span>.</span><span>.</span><span>.</span></thinking></p>\"";\n        return ChatResponse;\n    }(cf.BasicElement));\n    cf.ChatResponse = ChatResponse;\n})(cf || (cf = {}));\n\n/// <reference path=\""ChatResponse.ts\""/>\n/// <reference path=\""../BasicElement.ts\""/>\n/// <reference path=\""../../logic/FlowManager.ts\""/>\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    }\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n// namespace\nvar cf;\n(function (cf) {\n    // interface\n    cf.ChatListEvents = {\n        CHATLIST_UPDATED: \""cf-chatlist-updated\""\n    };\n    // class\n    var ChatList = /** @class */ (function (_super) {\n        __extends(ChatList, _super);\n        function ChatList(options) {\n            var _this = _super.call(this, options) || this;\n            _this.updateTimer = 0;\n            cf.ChatResponse.list = _this;\n            _this.responses = [];\n            // flow update\n            _this.flowUpdateCallback = _this.onFlowUpdate.bind(_this);\n            _this.eventTarget.addEventListener(cf.FlowEvents.FLOW_UPDATE, _this.flowUpdateCallback, false);\n            // user input update\n            _this.userInputUpdateCallback = _this.onUserInputUpdate.bind(_this);\n            _this.eventTarget.addEventListener(cf.FlowEvents.USER_INPUT_UPDATE, _this.userInputUpdateCallback, false);\n            // user input key change\n            _this.onInputKeyChangeCallback = _this.onInputKeyChange.bind(_this);\n            _this.eventTarget.addEventListener(cf.UserInputEvents.KEY_CHANGE, _this.onInputKeyChangeCallback, false);\n            // user input height change\n            _this.onInputHeightChangeCallback = _this.onInputHeightChange.bind(_this);\n            _this.eventTarget.addEventListener(cf.UserInputEvents.HEIGHT_CHANGE, _this.onInputHeightChangeCallback, false);\n            // on control elements changed\n            _this.onControlElementsResizedCallback = _this.onControlElementsResized.bind(_this);\n            _this.eventTarget.addEventListener(cf.ControlElementsEvents.ON_RESIZE, _this.onControlElementsResizedCallback, false);\n            _this.onControlElementsChangedCallback = _this.onControlElementsChanged.bind(_this);\n            _this.eventTarget.addEventListener(cf.ControlElementsEvents.CHANGED, _this.onControlElementsChangedCallback, false);\n            return _this;\n        }\n        ChatList.prototype.onInputHeightChange = function (event) {\n            var dto = event.detail.dto;\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", event.type, dto);\n            // this.input.controlElements.el.style.transition = \""height 2s ease-out\"";\n            // this.input.controlElements.el.style.height = this.input.controlElements.el.scrollHeight + 'px';\n            this.onInputElementChanged();\n        };\n        ChatList.prototype.onInputKeyChange = function (event) {\n            var dto = event.detail.dto;\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", event.type, dto);\n        };\n        ChatList.prototype.onUserInputUpdate = function (event) {\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", event.type, event.detail);\n            if (this.currentUserResponse) {\n                var response = event.detail;\n                this.setCurrentUserResponse(response);\n            }\n        };\n        ChatList.prototype.addInput = function (input) {\n            this.input = input;\n        };\n        /**\n        * @name onControlElementsChanged\n        * on control elements change\n        */\n        ChatList.prototype.onControlElementsChanged = function (event) {\n            this.onInputElementChanged();\n        };\n        /**\n        * @name onControlElementsResized\n        * on control elements resize\n        */\n        ChatList.prototype.onControlElementsResized = function (event) {\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", cf.ControlElementsEvents.ON_RESIZE);\n            var responseToScrollTo = this.currentResponse;\n            if (responseToScrollTo) {\n                if (!responseToScrollTo.added) {\n                    // element not added yet, so find closest\n                    for (var i = this.responses.indexOf(responseToScrollTo); i >= 0; i--) {\n                        var element = this.responses[i];\n                        if (element.added) {\n                            responseToScrollTo = element;\n                            break;\n                        }\n                    }\n                }\n                responseToScrollTo.scrollTo();\n            }\n            this.onInputElementChanged();\n        };\n        ChatList.prototype.onInputElementChanged = function () {\n            if (!this.cfReference || !this.cfReference.el)\n                return;\n            var cfHeight = this.cfReference.el.offsetHeight;\n            var inputHeight = this.input.height;\n            var listHeight = cfHeight - inputHeight;\n            //this.el.style.height = listHeight + \""px\"";\n        };\n        ChatList.prototype.onFlowUpdate = function (event) {\n            var _this = this;\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", event.type, event.detail);\n            var currentTag = event.detail.tag;\n            if (this.currentResponse)\n                this.currentResponse.disabled = false;\n            if (this.containsTagResponse(currentTag) && !event.detail.ignoreExistingTag) {\n                // because user maybe have scrolled up and wants to edit\n                // tag is already in list, so re-activate it\n                this.onUserWantsToEditTag(currentTag);\n            }\n            else {\n                // robot response\n                setTimeout(function () {\n                    var robot = _this.createResponse(true, currentTag, currentTag.question);\n                    robot.whenReady(function () {\n                        // create user response\n                        _this.currentUserResponse = _this.createResponse(false, currentTag);\n                        robot.scrollTo();\n                    });\n                    if (_this.currentUserResponse) {\n                        // linked, but only if we should not ignore existing tag\n                        _this.currentUserResponse.setLinkToOtherReponse(robot);\n                        robot.setLinkToOtherReponse(_this.currentUserResponse);\n                    }\n                }, this.responses.length === 0 ? 500 : 0);\n            }\n        };\n        /**\n        * @name containsTagResponse\n        * @return boolean\n        * check if tag has already been responded to\n        */\n        ChatList.prototype.containsTagResponse = function (tagToChange) {\n            for (var i = 0; i < this.responses.length; i++) {\n                var element = this.responses[i];\n                if (!element.isRobotResponse && element.tag == tagToChange && !tagToChange.hasConditions()) {\n                    return true;\n                }\n            }\n            return false;\n        };\n        /**\n        * @name onUserAnswerClicked\n        * on user ChatReponse clicked\n        */\n        ChatList.prototype.onUserWantsToEditTag = function (tagToChange) {\n            var responseUserWantsToEdit;\n            for (var i = 0; i < this.responses.length; i++) {\n                var element = this.responses[i];\n                if (!element.isRobotResponse && element.tag == tagToChange) {\n                    // update element thhat user wants to edit\n                    responseUserWantsToEdit = element;\n                    break;\n                }\n            }\n            // reset the current user response\n            this.currentUserResponse.processResponseAndSetText();\n            if (responseUserWantsToEdit) {\n                // remove latest user response, if it is there any, also make sure we don't remove the first one\n                if (this.responses.length > 2) {\n                    if (!this.responses[this.responses.length - 1].isRobotResponse) {\n                        this.responses.pop().dealloc();\n                    }\n                    // remove latest robot response, it should always be a robot response\n                    this.responses.pop().dealloc();\n                }\n                this.currentUserResponse = responseUserWantsToEdit;\n                // TODO: Set user field to thinking?\n                // this.currentUserResponse.setToThinking??\n                this.currentResponse = this.responses[this.responses.length - 1];\n                this.onListUpdate(this.currentUserResponse);\n            }\n        };\n        ChatList.prototype.onListUpdate = function (chatResponse) {\n            var _this = this;\n            clearTimeout(this.updateTimer);\n            this.updateTimer = setTimeout(function () {\n                _this.eventTarget.dispatchEvent(new CustomEvent(cf.ChatListEvents.CHATLIST_UPDATED, {\n                    detail: _this\n                }));\n                chatResponse.show();\n            }, 0);\n        };\n        /**\n        * @name clearFrom\n        * remove responses, this usually happens if a user jumps back to a conditional element\n        */\n        ChatList.prototype.clearFrom = function (index) {\n            index = index * 2; // double up because of robot responses\n            index += index % 2; // round up so we dont remove the user response element\n            while (this.responses.length > index) {\n                this.responses.pop().dealloc();\n            }\n        };\n        /**\n        * @name setCurrentUserResponse\n        * Update current reponse, is being called automatically from onFlowUpdate, but can also, in rare cases, be called when flow is controlled manually.\n        * reponse: FlowDTO\n        */\n        ChatList.prototype.setCurrentUserResponse = function (dto) {\n            this.flowDTOFromUserInputUpdate = dto;\n            if (!this.flowDTOFromUserInputUpdate.text && dto.tag) {\n                if (dto.tag.type == \""group\"") {\n                    this.flowDTOFromUserInputUpdate.text = cf.Dictionary.get(\""user-reponse-missing-group\"");\n                }\n                else if (dto.tag.type != \""password\"") {\n                    this.flowDTOFromUserInputUpdate.text = cf.Dictionary.get(\""user-reponse-missing\"");\n                }\n            }\n            this.currentUserResponse.setValue(this.flowDTOFromUserInputUpdate);\n        };\n        /**\n        * @name getResponses\n        * returns the submitted responses.\n        */\n        ChatList.prototype.getResponses = function () {\n            return this.responses;\n        };\n        ChatList.prototype.updateThumbnail = function (robot, img) {\n            cf.Dictionary.set(robot ? \""robot-image\"" : \""user-image\"", robot ? \""robot\"" : \""human\"", img);\n            var newImage = robot ? cf.Dictionary.getRobotResponse(\""robot-image\"") : cf.Dictionary.get(\""user-image\"");\n            for (var i = 0; i < this.responses.length; i++) {\n                var element = this.responses[i];\n                if (robot && element.isRobotResponse) {\n                    element.updateThumbnail(newImage);\n                }\n                else if (!robot && !element.isRobotResponse) {\n                    element.updateThumbnail(newImage);\n                }\n            }\n        };\n        ChatList.prototype.createResponse = function (isRobotResponse, currentTag, value) {\n            if (value === void 0) { value = null; }\n            var scrollable = this.el.querySelector(\"".scrollableInner\"");\n            var response = new cf.ChatResponse({\n                // image: null,\n                cfReference: this.cfReference,\n                list: this,\n                tag: currentTag,\n                eventTarget: this.eventTarget,\n                isRobotResponse: isRobotResponse,\n                response: value,\n                image: isRobotResponse ? cf.Dictionary.getRobotResponse(\""robot-image\"") : cf.Dictionary.get(\""user-image\""),\n                container: scrollable\n            });\n            this.responses.push(response);\n            this.currentResponse = response;\n            this.onListUpdate(response);\n            return response;\n        };\n        ChatList.prototype.getTemplate = function () {\n            return \""<cf-chat type='pluto'>\\n\\t\\t\\t\\t\\t\\t<scrollable>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\""scrollableInner\\\""></div>\\n\\t\\t\\t\\t\\t\\t</scrollable>\\n\\t\\t\\t\\t\\t</cf-chat>\"";\n        };\n        ChatList.prototype.dealloc = function () {\n            this.eventTarget.removeEventListener(cf.FlowEvents.FLOW_UPDATE, this.flowUpdateCallback, false);\n            this.flowUpdateCallback = null;\n            this.eventTarget.removeEventListener(cf.FlowEvents.USER_INPUT_UPDATE, this.userInputUpdateCallback, false);\n            this.userInputUpdateCallback = null;\n            this.eventTarget.removeEventListener(cf.UserInputEvents.KEY_CHANGE, this.onInputKeyChangeCallback, false);\n            this.onInputKeyChangeCallback = null;\n            _super.prototype.dealloc.call(this);\n        };\n        return ChatList;\n    }(cf.BasicElement));\n    cf.ChatList = ChatList;\n})(cf || (cf = {}));\n\n/// <reference path=\""../form-tags/Tag.ts\""/>\n/// <reference path=\""../ConversationalForm.ts\""/>\nvar cf;\n(function (cf) {\n    // interface\n    cf.FlowEvents = {\n        USER_INPUT_UPDATE: \""cf-flow-user-input-update\"",\n        USER_INPUT_INVALID: \""cf-flow-user-input-invalid\"",\n        //\tdetail: string\n        FLOW_UPDATE: \""cf-flow-update\"",\n        FORM_SUBMIT: \""cf-form-submit\"",\n    };\n    // class\n    var FlowManager = /** @class */ (function () {\n        function FlowManager(options) {\n            this.stopped = false;\n            this.maxSteps = 0;\n            this.step = 0;\n            this.savedStep = -1;\n            this.stepTimer = 0;\n            /**\n            * ignoreExistingTags\n            * @type boolean\n            * ignore existing tags, usually this is set to true when using startFrom, where you don't want it to check for exisintg tags in the list\n            */\n            this.ignoreExistingTags = false;\n            this.cfReference = options.cfReference;\n            this.eventTarget = options.eventTarget;\n            this.flowStepCallback = options.flowStepCallback;\n            this.setTags(options.tags);\n            this.userInputSubmitCallback = this.userInputSubmit.bind(this);\n            this.eventTarget.addEventListener(cf.UserInputEvents.SUBMIT, this.userInputSubmitCallback, false);\n        }\n        Object.defineProperty(FlowManager.prototype, \""currentTag\"", {\n            get: function () {\n                return this.tags[this.step];\n            },\n            enumerable: true,\n            configurable: true\n        });\n        FlowManager.prototype.userInputSubmit = function (event) {\n            var _this = this;\n            cf.ConversationalForm.illustrateFlow(this, \""receive\"", event.type, event.detail);\n            var appDTO = event.detail;\n            if (!appDTO.tag)\n                appDTO.tag = this.currentTag;\n            var isTagValid = this.currentTag.setTagValueAndIsValid(appDTO);\n            var hasCheckedForTagSpecificValidation = false;\n            var hasCheckedForGlobalFlowValidation = false;\n            var onValidationCallback = function () {\n                // check 1\n                if (_this.currentTag.validationCallback && typeof _this.currentTag.validationCallback == \""function\"") {\n                    if (!hasCheckedForTagSpecificValidation && isTagValid) {\n                        hasCheckedForTagSpecificValidation = true;\n                        _this.currentTag.validationCallback(appDTO, function () {\n                            isTagValid = true;\n                            onValidationCallback();\n                        }, function (optionalErrorMessage) {\n                            isTagValid = false;\n                            if (optionalErrorMessage)\n                                appDTO.errorText = optionalErrorMessage;\n                            onValidationCallback();\n                        });\n                        return;\n                    }\n                }\n                // check 2, this.currentTag.required <- required should be handled in the callback.\n                if (_this.flowStepCallback && typeof _this.flowStepCallback == \""function\"") {\n                    if (!hasCheckedForGlobalFlowValidation && isTagValid) {\n                        hasCheckedForGlobalFlowValidation = true;\n                        // use global validationCallback method\n                        _this.flowStepCallback(appDTO, function () {\n                            isTagValid = true;\n                            onValidationCallback();\n                        }, function (optionalErrorMessage) {\n                            isTagValid = false;\n                            if (optionalErrorMessage)\n                                appDTO.errorText = optionalErrorMessage;\n                            onValidationCallback();\n                        });\n                        return;\n                    }\n                }\n                // go on with the flow\n                if (isTagValid) {\n                    // do the normal flow..\n                    cf.ConversationalForm.illustrateFlow(_this, \""dispatch\"", cf.FlowEvents.USER_INPUT_UPDATE, appDTO);\n                    // update to latest DTO because values can be changed in validation flow...\n                    if (appDTO.input)\n                        appDTO = appDTO.input.getFlowDTO();\n                    _this.eventTarget.dispatchEvent(new CustomEvent(cf.FlowEvents.USER_INPUT_UPDATE, {\n                        detail: appDTO //UserTextInput value\n                    }));\n                    // goto next step when user has answered\n                    setTimeout(function () { return _this.nextStep(); }, cf.ConversationalForm.animationsEnabled ? 250 : 0);\n                }\n                else {\n                    cf.ConversationalForm.illustrateFlow(_this, \""dispatch\"", cf.FlowEvents.USER_INPUT_INVALID, appDTO);\n                    // Value not valid\n                    _this.eventTarget.dispatchEvent(new CustomEvent(cf.FlowEvents.USER_INPUT_INVALID, {\n                        detail: appDTO //UserTextInput value\n                    }));\n                }\n            };\n            // TODO, make into promises when IE is rolling with it..\n            onValidationCallback();\n        };\n        FlowManager.prototype.startFrom = function (indexOrTag, ignoreExistingTags) {\n            if (ignoreExistingTags === void 0) { ignoreExistingTags = false; }\n            if (typeof indexOrTag == \""number\"")\n                this.step = indexOrTag;\n            else {\n                // find the index..\n                this.step = this.tags.indexOf(indexOrTag);\n            }\n            this.ignoreExistingTags = ignoreExistingTags;\n            if (!this.ignoreExistingTags) {\n                this.editTag(this.tags[this.step]);\n            }\n            else {\n                //validate step, and ask for skipping of current step\n                this.showStep();\n            }\n        };\n        FlowManager.prototype.areConditionsInFlowFullfilled = function (tagWithConditions, tagConditions) {\n            if (!this.activeConditions) {\n                // we don't use this (yet), it's only to keep track of active conditions\n                this.activeConditions = [];\n            }\n            var numConditionsFound = 0;\n            // find out if tagWithConditions fullfills conditions\n            for (var i = 0; i < this.tags.length; i++) {\n                var tag = this.tags[i];\n                if (tag !== tagWithConditions) {\n                    // check if tags are fullfilled\n                    for (var j = 0; j < tagConditions.length; j++) {\n                        var tagCondition = tagConditions[j];\n                        // only check tags where tag id or name is defined\n                        var tagName = (tag.name || tag.id || \""\"").toLowerCase();\n                        if (tagName !== \""\"" && \""cf-conditional-\"" + tagName === tagCondition.key.toLowerCase()) {\n                            // key found, so check condition\n                            var flowTagValue = typeof tag.value === \""string\"" ? tag.value : tag.value;\n                            var areConditionsMeet = cf.Tag.testConditions(flowTagValue, tagCondition);\n                            if (areConditionsMeet) {\n                                this.activeConditions[tagName] = tagConditions;\n                                // conditions are meet\n                                if (++numConditionsFound == tagConditions.length) {\n                                    return true;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            return false;\n        };\n        FlowManager.prototype.start = function () {\n            this.stopped = false;\n            this.validateStepAndUpdate();\n        };\n        FlowManager.prototype.stop = function () {\n            this.stopped = true;\n        };\n        FlowManager.prototype.nextStep = function () {\n            if (this.stopped)\n                return;\n            if (this.savedStep != -1) {\n                // if you are looking for where the none EDIT tag conditionsl check is done\n                // then look at a tags disabled getter\n                var foundConditionsToCurrentTag = false;\n                // this happens when editing a tag..\n                // check if any tags has a conditional check for this.currentTag.name\n                for (var i = 0; i < this.tags.length; i++) {\n                    var tag = this.tags[i];\n                    if (tag !== this.currentTag && tag.hasConditions()) {\n                        // tag has conditions so check if it also has the right conditions\n                        if (tag.hasConditionsFor(this.currentTag.name)) {\n                            foundConditionsToCurrentTag = true;\n                            this.step = this.tags.indexOf(this.currentTag);\n                            break;\n                        }\n                    }\n                }\n                // no conditional linking found, so resume flow\n                if (!foundConditionsToCurrentTag) {\n                    this.step = this.savedStep;\n                }\n            }\n            this.savedStep = -1; //reset saved step\n            this.step++;\n            this.validateStepAndUpdate();\n        };\n        FlowManager.prototype.previousStep = function () {\n            this.step--;\n            this.validateStepAndUpdate();\n        };\n        FlowManager.prototype.getStep = function () {\n            return this.step;\n        };\n        FlowManager.prototype.addTags = function (tags, atIndex) {\n            if (atIndex === void 0) { atIndex = -1; }\n            // used to append new tag\n            if (atIndex !== -1 && atIndex < this.tags.length) {\n                var pre = this.tags.slice(0, atIndex);\n                var post = this.tags.slice(atIndex, this.tags.length);\n                this.tags = this.tags.slice(0, atIndex).concat(tags).concat(post);\n            }\n            else {\n                this.tags = this.tags.concat(tags);\n            }\n            this.setTags(this.tags);\n            return this.tags;\n        };\n        FlowManager.prototype.dealloc = function () {\n            this.eventTarget.removeEventListener(cf.UserInputEvents.SUBMIT, this.userInputSubmitCallback, false);\n            this.userInputSubmitCallback = null;\n        };\n        /**\n        * @name editTag\n        * go back in time and edit a tag.\n        */\n        FlowManager.prototype.editTag = function (tag) {\n            this.ignoreExistingTags = false;\n            this.savedStep = this.step - 1; //save step\n            this.step = this.tags.indexOf(tag); // === this.currentTag\n            this.validateStepAndUpdate();\n            if (this.activeConditions && Object.keys(this.activeConditions).length > 0) {\n                this.savedStep = -1; //don't save step, as we wont return\n                // clear chatlist.\n                this.cfReference.chatList.clearFrom(this.step + 1);\n                //reset from active tag, brute force\n                var editTagIndex = this.tags.indexOf(tag);\n                for (var i = editTagIndex + 1; i < this.tags.length; i++) {\n                    var tag_1 = this.tags[i];\n                    tag_1.reset();\n                }\n            }\n        };\n        FlowManager.prototype.setTags = function (tags) {\n            this.tags = tags;\n            for (var i = 0; i < this.tags.length; i++) {\n                var tag = this.tags[i];\n                tag.eventTarget = this.eventTarget;\n                tag.flowManager = this;\n            }\n            this.maxSteps = this.tags.length;\n        };\n        FlowManager.prototype.skipStep = function () {\n            this.nextStep();\n        };\n        FlowManager.prototype.validateStepAndUpdate = function () {\n            if (this.maxSteps > 0) {\n                if (this.step == this.maxSteps) {\n                    // console.warn(\""We are at the end..., submit click\"")\n                    this.eventTarget.dispatchEvent(new CustomEvent(cf.FlowEvents.FORM_SUBMIT, {}));\n                    this.cfReference.doSubmitForm();\n                }\n                else {\n                    this.step %= this.maxSteps;\n                    if (this.currentTag.disabled) {\n                        // check if current tag has become or is disabled, if it is, then skip step.\n                        this.skipStep();\n                    }\n                    else {\n                        this.showStep();\n                    }\n                }\n            }\n        };\n        FlowManager.prototype.showStep = function () {\n            var _this = this;\n            if (this.stopped)\n                return;\n            cf.ConversationalForm.illustrateFlow(this, \""dispatch\"", cf.FlowEvents.FLOW_UPDATE, this.currentTag);\n            this.currentTag.refresh();\n            setTimeout(function () {\n                _this.eventTarget.dispatchEvent(new CustomEvent(cf.FlowEvents.FLOW_UPDATE, {\n                    detail: {\n                        tag: _this.currentTag,\n                        ignoreExistingTag: _this.ignoreExistingTags,\n                        step: _this.step,\n                        maxSteps: _this.maxSteps\n                    }\n                }));\n            }, 0);\n        };\n        FlowManager.STEP_TIME = 1000;\n        return FlowManager;\n    }());\n    cf.FlowManager = FlowManager;\n})(cf || (cf = {}));\n\n/// <reference path=\""ui/inputs/UserTextInput.ts\""/>\n/// <reference path=\""ui/chat/ChatList.ts\""/>\n/// <reference path=\""logic/FlowManager.ts\""/>\n/// <reference path=\""ui/ProgressBar.ts\""/>\n/// <reference path=\""logic/EventDispatcher.ts\""/>\n/// <reference path=\""form-tags/Tag.ts\""/>\n/// <reference path=\""form-tags/CfRobotMessageTag.ts\""/>\n/// <reference path=\""form-tags/TagGroup.ts\""/>\n/// <reference path=\""form-tags/InputTag.ts\""/>\n/// <reference path=\""form-tags/SelectTag.ts\""/>\n/// <reference path=\""form-tags/ButtonTag.ts\""/>\n/// <reference path=\""data/Dictionary.ts\""/>\n/// <reference path=\""parsing/TagsParser.ts\""/>\n/// <reference path=\""interfaces/IUserInput.ts\""/>\n/// <reference path=\""interfaces/IUserInterfaceOptions.ts\""/>\nvar cf;\n(function (cf_1) {\n    var ConversationalForm = /** @class */ (function () {\n        function ConversationalForm(options) {\n            this.version = \""1.0.1\"";\n            this.cdnPath = \""https://cdn.jsdelivr.net/gh/space10-community/conversational-form@{version}/dist/\"";\n            this.isDevelopment = false;\n            this.loadExternalStyleSheet = true;\n            this.theme = 'light';\n            this.preventAutoAppend = false;\n            this.preventAutoStart = false;\n            window.ConversationalForm = this;\n            this.cdnPath = this.cdnPath.split(\""{version}\"").join(this.version);\n            if (typeof options.suppressLog === 'boolean')\n                ConversationalForm.suppressLog = options.suppressLog;\n            if (typeof options.showProgressBar === 'boolean')\n                ConversationalForm.showProgressBar = options.showProgressBar;\n            if (typeof options.preventSubmitOnEnter === 'boolean')\n                this.preventSubmitOnEnter = options.preventSubmitOnEnter;\n            if (!ConversationalForm.suppressLog)\n                console.log('Conversational Form > version:', this.version);\n            if (!ConversationalForm.suppressLog)\n                console.log('Conversational Form > options:', options);\n            window.ConversationalForm[this.createId] = this;\n            // possible to create your own event dispatcher, so you can tap into the events of the app\n            if (options.eventDispatcher)\n                this._eventTarget = options.eventDispatcher;\n            if (!this.eventTarget.cf)\n                this.eventTarget.cf = this;\n            // set a general step validation callback\n            if (options.flowStepCallback)\n                this.flowStepCallback = options.flowStepCallback;\n            this.isDevelopment = ConversationalForm.illustrateAppFlow = !!document.getElementById(\""conversational-form-development\"");\n            if (options.loadExternalStyleSheet == false) {\n                this.loadExternalStyleSheet = false;\n            }\n            if (typeof options.theme === 'string')\n                this.theme = options.theme;\n            if (!isNaN(options.scrollAcceleration))\n                cf_1.ScrollController.acceleration = options.scrollAcceleration;\n            this.preventAutoStart = options.preventAutoStart;\n            this.preventAutoAppend = options.preventAutoAppend;\n            if (!options.formEl)\n                throw new Error(\""Conversational Form error, the formEl needs to be defined.\"");\n            this.formEl = options.formEl;\n            this.formEl.setAttribute(\""cf-create-id\"", this.createId);\n            if (options.hideUserInputOnNoneTextInput === true) {\n                cf_1.UserInputElement.hideUserInputOnNoneTextInput = true;\n            }\n            this.submitCallback = options.submitCallback;\n            if (this.submitCallback && typeof this.submitCallback === \""string\"") {\n                // Must be a string on window, rewritten to avoid unsafe eval() calls\n                var fn = window[this.submitCallback];\n                this.submitCallback = fn;\n            }\n            if (this.formEl.getAttribute(\""cf-no-animation\"") == \""\"")\n                ConversationalForm.animationsEnabled = false;\n            if (typeof options.animationsEnabled === 'boolean'\n                && options.animationsEnabled === false) {\n                ConversationalForm.animationsEnabled = false;\n                this.formEl.setAttribute(\""cf-no-animation\"", \""\"");\n            }\n            if (options.preventAutoFocus || this.formEl.getAttribute(\""cf-prevent-autofocus\"") == \""\"")\n                cf_1.UserInputElement.preventAutoFocus = true;\n            this.dictionary = new cf_1.Dictionary({\n                data: options.dictionaryData,\n                robotData: options.dictionaryRobot,\n                userImage: options.userImage,\n                robotImage: options.robotImage,\n                version: this.version\n            });\n            this.context = options.context ? options.context : document.body;\n            this.tags = options.tags;\n            if (options.microphoneInput) {\n                // validate the user ..... TODO....\n                if (!options.microphoneInput.init || !options.microphoneInput.input) {\n                    console.warn(\""Conversational Form: microphoneInput is not correctly setup\"", options.microphoneInput);\n                    options.microphoneInput = null;\n                }\n            }\n            this.microphoneInputObj = options.microphoneInput;\n            // set the ui options\n            this.uiOptions = cf_1.Helpers.extendObject(cf_1.UserInterfaceDefaultOptions, options.userInterfaceOptions || {});\n            // console.log('this.uiOptions:', this.uiOptions);\n            this.init();\n        }\n        Object.defineProperty(ConversationalForm.prototype, \""createId\"", {\n            get: function () {\n                if (!this._createId) {\n                    this._createId = new Date().getTime().toString();\n                }\n                return this._createId;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(ConversationalForm.prototype, \""eventTarget\"", {\n            get: function () {\n                if (!this._eventTarget) {\n                    this._eventTarget = new cf_1.EventDispatcher(this);\n                }\n                return this._eventTarget;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        ConversationalForm.prototype.init = function () {\n            switch (this.theme) {\n                case 'dark':\n                    this.theme = 'conversational-form-dark.min.css';\n                    break;\n                case 'green':\n                    this.theme = 'conversational-form-green.min.css';\n                    break;\n                case 'blue':\n                    this.theme = 'conversational-form-irisblue.min.css';\n                    break;\n                case 'purple':\n                    this.theme = 'conversational-form-purple.min.css';\n                    break;\n                case 'red':\n                    this.theme = 'conversational-form-red.min.css';\n                    break;\n                default:\n                    this.theme = 'conversational-form.min.css';\n            }\n            if (this.isDevelopment) {\n                // Set path for development\n                this.cdnPath = '../build/';\n                // strip .min from filename since we do not have minified css in build\n                this.theme = this.theme.replace('.min', '');\n            }\n            if (this.loadExternalStyleSheet) {\n                // not in development/examples, so inject production css\n                var head = document.head || document.getElementsByTagName(\""head\"")[0];\n                var style = document.createElement(\""link\"");\n                var githubMasterUrl = this.cdnPath + this.theme;\n                style.type = \""text/css\"";\n                style.media = \""all\"";\n                style.setAttribute(\""rel\"", \""stylesheet\"");\n                style.setAttribute(\""href\"", githubMasterUrl);\n                head.appendChild(style);\n            }\n            // set context position to relative, else we break out of the box\n            var position = window.getComputedStyle(this.context).getPropertyValue(\""position\"").toLowerCase();\n            if ([\""fixed\"", \""absolute\"", \""relative\""].indexOf(position) == -1) {\n                this.context.style.position = \""relative\"";\n            }\n            // if tags are not defined then we will try and build some tags our selves..\n            if (!this.tags || this.tags.length == 0) {\n                this.tags = [];\n                var fields = [].slice.call(this.formEl.querySelectorAll(\""input, select, button, textarea, cf-robot-message\""), 0);\n                for (var i = 0; i < fields.length; i++) {\n                    var element = fields[i];\n                    if (cf_1.Tag.isTagValid(element)) {\n                        // ignore hidden tags\n                        this.tags.push(cf_1.Tag.createTag(element));\n                    }\n                }\n            }\n            else {\n                // tags are manually setup and passed as options.tags.\n            }\n            // remove invalid tags if they've sneaked in.. this could happen if tags are setup manually as we don't encurage to use static Tag.isTagValid\n            var indexesToRemove = [];\n            for (var i = 0; i < this.tags.length; i++) {\n                var element = this.tags[i];\n                if (!element || !cf_1.Tag.isTagValid(element.domElement)) {\n                    indexesToRemove.push(element);\n                }\n            }\n            for (var i = 0; i < indexesToRemove.length; i++) {\n                var tag = indexesToRemove[i];\n                this.tags.splice(this.tags.indexOf(tag), 1);\n            }\n            if (!ConversationalForm.suppressLog && (!this.tags || this.tags.length == 0)) {\n                console.warn(\""Conversational Form: No tags found or registered.\"");\n            }\n            //let's start the conversation\n            this.tags = this.setupTagGroups(this.tags);\n            this.setupUI();\n            return this;\n        };\n        /**\n        * @name updateDictionaryValue\n        * set a dictionary value at \""runtime\""\n        *\tid: string, id of the value to update\n        *\ttype: string, \""human\"" || \""robot\""\n        *\tvalue: string, value to be inserted\n        */\n        ConversationalForm.prototype.updateDictionaryValue = function (id, type, value) {\n            cf_1.Dictionary.set(id, type, value);\n            if ([\""robot-image\"", \""user-image\""].indexOf(id) != -1) {\n                this.chatList.updateThumbnail(id == \""robot-image\"", value);\n            }\n        };\n        ConversationalForm.prototype.getFormData = function (serialized) {\n            if (serialized === void 0) { serialized = false; }\n            if (serialized) {\n                var serialized_1 = {};\n                for (var i = 0; i < this.tags.length; i++) {\n                    var element = this.tags[i];\n                    if (element.value)\n                        serialized_1[element.name || \""tag-\"" + i.toString()] = element.value;\n                }\n                return serialized_1;\n            }\n            else {\n                var formData = new FormData(this.formEl);\n                return formData;\n            }\n        };\n        ConversationalForm.prototype.addRobotChatResponse = function (response) {\n            this.chatList.createResponse(true, null, response);\n        };\n        ConversationalForm.prototype.addUserChatResponse = function (response) {\n            // add a \""fake\"" user response..\n            this.chatList.createResponse(false, null, response);\n        };\n        ConversationalForm.prototype.stop = function (optionalStoppingMessage) {\n            if (optionalStoppingMessage === void 0) { optionalStoppingMessage = \""\""; }\n            this.flowManager.stop();\n            if (optionalStoppingMessage != \""\"")\n                this.chatList.createResponse(true, null, optionalStoppingMessage);\n            this.userInput.onFlowStopped();\n        };\n        ConversationalForm.prototype.start = function () {\n            this.userInput.disabled = false;\n            if (!ConversationalForm.suppressLog)\n                console.log('option, disabled 3');\n            this.userInput.visible = true;\n            this.flowManager.start();\n        };\n        ConversationalForm.prototype.getTag = function (nameOrIndex) {\n            if (typeof nameOrIndex == \""number\"") {\n                return this.tags[nameOrIndex];\n            }\n            else {\n                // TODO: fix so you can get a tag by its name attribute\n                return null;\n            }\n        };\n        ConversationalForm.prototype.setupTagGroups = function (tags) {\n            // make groups, from input tag[type=radio | type=checkbox]\n            // groups are used to bind logic like radio-button or checkbox dependencies\n            var groups = [];\n            for (var i = 0; i < tags.length; i++) {\n                var tag = tags[i];\n                if (tag.type == \""radio\"" || tag.type == \""checkbox\"") {\n                    if (!groups[tag.name])\n                        groups[tag.name] = [];\n                    groups[tag.name].push(tag);\n                }\n            }\n            if (Object.keys(groups).length > 0) {\n                for (var group in groups) {\n                    if (groups[group].length > 0) {\n                        // always build groupd when radio or checkbox\n                        // find the fieldset, if any..\n                        var isFieldsetValidForCF = function (tag) { return tag && tag.tagName.toLowerCase() !== \""fieldset\"" && !tag.hasAttribute(\""cf-questions\""); };\n                        var fieldset = groups[group][0].domElement.parentNode;\n                        if (fieldset && fieldset.tagName.toLowerCase() !== \""fieldset\"") {\n                            fieldset = fieldset.parentNode;\n                            if (isFieldsetValidForCF(fieldset)) {\n                                // not a valid fieldset, we only accept fieldsets that contain cf attr\n                                fieldset = null;\n                            }\n                        }\n                        var tagGroup = new cf_1.TagGroup({\n                            fieldset: fieldset,\n                            elements: groups[group]\n                        });\n                        // remove the tags as they are now apart of a group\n                        for (var i = 0; i < groups[group].length; i++) {\n                            var tagToBeRemoved = groups[group][i];\n                            if (i == 0) // add the group at same index as the the first tag to be removed\n                                tags.splice(tags.indexOf(tagToBeRemoved), 1, tagGroup);\n                            else\n                                tags.splice(tags.indexOf(tagToBeRemoved), 1);\n                        }\n                    }\n                }\n            }\n            return tags;\n        };\n        ConversationalForm.prototype.setupUI = function () {\n            // start the flow\n            this.flowManager = new cf_1.FlowManager({\n                cfReference: this,\n                flowStepCallback: this.flowStepCallback,\n                eventTarget: this.eventTarget,\n                tags: this.tags\n            });\n            this.el = document.createElement(\""div\"");\n            this.el.id = \""conversational-form\"";\n            this.el.className = \""conversational-form\"";\n            this.addBrowserTypes(this.el);\n            if (ConversationalForm.animationsEnabled)\n                this.el.classList.add(\""conversational-form--enable-animation\"");\n            // add conversational form to context\n            if (!this.preventAutoAppend)\n                this.context.appendChild(this.el);\n            //hide until stylesheet is rendered\n            this.el.style.visibility = \""hidden\"";\n            var innerWrap = document.createElement(\""div\"");\n            innerWrap.className = \""conversational-form-inner\"";\n            this.el.appendChild(innerWrap);\n            // Conversational Form UI\n            this.chatList = new cf_1.ChatList({\n                eventTarget: this.eventTarget,\n                cfReference: this\n            });\n            innerWrap.appendChild(this.chatList.el);\n            this.userInput = new cf_1.UserTextInput({\n                microphoneInputObj: this.microphoneInputObj,\n                eventTarget: this.eventTarget,\n                cfReference: this\n            });\n            if (ConversationalForm.showProgressBar) {\n                var progressBar = new cf_1.ProgressBar(this);\n                innerWrap.appendChild(progressBar.el);\n            }\n            this.chatList.addInput(this.userInput);\n            innerWrap.appendChild(this.userInput.el);\n            this.onUserAnswerClickedCallback = this.onUserAnswerClicked.bind(this);\n            this.eventTarget.addEventListener(cf_1.ChatResponseEvents.USER_ANSWER_CLICKED, this.onUserAnswerClickedCallback, false);\n            this.el.classList.add(\""conversational-form--show\"");\n            if (!this.preventAutoStart)\n                this.flowManager.start();\n            if (!this.tags || this.tags.length == 0) {\n                // no tags, so just show the input\n                this.userInput.visible = true;\n            }\n        };\n        /**\n        * @name onUserAnswerClicked\n        * on user ChatReponse clicked\n        */\n        ConversationalForm.prototype.onUserAnswerClicked = function (event) {\n            var tag = event.detail;\n            this.flowManager.editTag(tag);\n        };\n        ConversationalForm.prototype.addBrowserTypes = function (el) {\n            if (navigator.userAgent.indexOf('Firefox') > -1)\n                el.classList.add('browser-firefox');\n            if (/Edge/.test(navigator.userAgent))\n                el.classList.add('browser-edge');\n        };\n        /**\n        * @name addTag\n        * Add a tag to the conversation. This can be used to add tags at runtime\n        * see examples/formless.html\n        */\n        ConversationalForm.prototype.addTags = function (tagsData, addAfterCurrentStep, atIndex) {\n            if (addAfterCurrentStep === void 0) { addAfterCurrentStep = true; }\n            if (atIndex === void 0) { atIndex = -1; }\n            var tags = [];\n            for (var i = 0; i < tagsData.length; i++) {\n                var tagData = tagsData[i];\n                if (tagData.tag === \""fieldset\"") {\n                    // group ..\n                    // const fieldSetChildren: Array<DataTag> = tagData.children;\n                    // parse group tag\n                    var groupTag = cf_1.TagsParser.parseGroupTag(tagData);\n                    for (var j = 0; j < groupTag.children.length; j++) {\n                        var tag = groupTag.children[j];\n                        if (cf_1.Tag.isTagValid(tag)) {\n                            var tagElement = cf_1.Tag.createTag(tag);\n                            // add ref for group creation\n                            if (!tagElement.name) {\n                                tagElement.name = \""tag-ref-\"" + j.toString();\n                            }\n                            tags.push(tagElement);\n                        }\n                    }\n                }\n                else {\n                    var tag = tagData.tag === \""select\"" ? cf_1.TagsParser.parseGroupTag(tagData) : cf_1.TagsParser.parseTag(tagData);\n                    if (cf_1.Tag.isTagValid(tag)) {\n                        var tagElement = cf_1.Tag.createTag(tag);\n                        tags.push(tagElement);\n                    }\n                }\n            }\n            // map free roaming checkbox and radio tags into groups\n            tags = this.setupTagGroups(tags);\n            // add new tags to the flow\n            this.tags = this.flowManager.addTags(tags, addAfterCurrentStep ? this.flowManager.getStep() + 1 : atIndex);\n            //this.flowManager.startFrom ?\n        };\n        /**\n        * @name remapTagsAndStartFrom\n        * index: number, what index to start from\n        * setCurrentTagValue: boolean, usually this method is called when wanting to loop or skip over questions, therefore it might be usefull to set the value of the current tag before changing index.\n        * ignoreExistingTags: boolean, possible to ignore existing tags, to allow for the flow to just \""happen\""\n        */\n        ConversationalForm.prototype.remapTagsAndStartFrom = function (index, setCurrentTagValue, ignoreExistingTags) {\n            if (index === void 0) { index = 0; }\n            if (setCurrentTagValue === void 0) { setCurrentTagValue = false; }\n            if (ignoreExistingTags === void 0) { ignoreExistingTags = false; }\n            if (setCurrentTagValue) {\n                this.chatList.setCurrentUserResponse(this.userInput.getFlowDTO());\n            }\n            // possibility to start the form flow over from {index}\n            for (var i = 0; i < this.tags.length; i++) {\n                var tag = this.tags[i];\n                tag.refresh();\n            }\n            this.flowManager.startFrom(index, ignoreExistingTags);\n        };\n        /**\n        * @name focus\n        * Sets focus on Conversational Form\n        */\n        ConversationalForm.prototype.focus = function () {\n            if (this.userInput)\n                this.userInput.setFocusOnInput();\n        };\n        ConversationalForm.prototype.doSubmitForm = function () {\n            this.el.classList.add(\""done\"");\n            this.userInput.reset();\n            if (this.submitCallback) {\n                // remove should be called in the submitCallback\n                this.submitCallback(this);\n            }\n            else {\n                // this.formEl.submit();\n                // doing classic .submit wont trigger onsubmit if that is present on form element\n                // as described here: http://wayback.archive.org/web/20090323062817/http://blogs.vertigosoftware.com/snyholm/archive/2006/09/27/3788.aspx\n                // so we mimic a click.\n                var button = this.formEl.ownerDocument.createElement('button');\n                button.style.display = 'none';\n                button.type = 'submit';\n                this.formEl.appendChild(button);\n                button.click();\n                this.formEl.removeChild(button);\n                // remove conversational\n                this.remove();\n            }\n        };\n        ConversationalForm.prototype.remove = function () {\n            if (this.microphoneInputObj) {\n                this.microphoneInputObj = null;\n            }\n            if (this.onUserAnswerClickedCallback) {\n                this.eventTarget.removeEventListener(cf_1.ChatResponseEvents.USER_ANSWER_CLICKED, this.onUserAnswerClickedCallback, false);\n                this.onUserAnswerClickedCallback = null;\n            }\n            if (this.flowManager)\n                this.flowManager.dealloc();\n            if (this.userInput)\n                this.userInput.dealloc();\n            if (this.chatList)\n                this.chatList.dealloc();\n            this.dictionary = null;\n            this.flowManager = null;\n            this.userInput = null;\n            this.chatList = null;\n            this.context = null;\n            this.formEl = null;\n            this.tags = null;\n            this.submitCallback = null;\n            this.el.parentNode.removeChild(this.el);\n            this.el = null;\n            window.ConversationalForm[this.createId] = null;\n        };\n        // to illustrate the event flow of the app\n        ConversationalForm.illustrateFlow = function (classRef, type, eventType, detail) {\n            // ConversationalForm.illustrateFlow(this, \""dispatch\"", FlowEvents.USER_INPUT_INVALID, event.detail);\n            // ConversationalForm.illustrateFlow(this, \""receive\"", event.type, event.detail);\n            if (detail === void 0) { detail = null; }\n            if (ConversationalForm.illustrateAppFlow) {\n                var highlight = \""font-weight: 900; background: \"" + (type == \""receive\"" ? \""#e6f3fe\"" : \""pink\"") + \""; color: black; padding: 0px 5px;\"";\n                if (!ConversationalForm.suppressLog)\n                    console.log(\""%c** event flow: %c\"" + eventType + \""%c flow type: %c\"" + type + \""%c from: %c\"" + classRef.constructor.name, \""font-weight: 900;\"", highlight, \""font-weight: 400;\"", highlight, \""font-weight: 400;\"", highlight);\n                if (detail)\n                    if (!ConversationalForm.suppressLog)\n                        console.log(\""** event flow detail:\"", detail);\n            }\n        };\n        ConversationalForm.startTheConversation = function (data) {\n            var isFormless = !!data.formEl === false;\n            var formlessTags;\n            var constructorOptions;\n            if (isFormless) {\n                if (typeof data === \""string\"") {\n                    // Formless init w. string\n                    isFormless = true;\n                    var json = JSON.parse(data);\n                    constructorOptions = json.options;\n                    formlessTags = json.tags;\n                }\n                else {\n                    // Formless init w. JSON object\n                    constructorOptions = data.options;\n                    formlessTags = data.tags;\n                }\n                // formless, so generate the pseudo tags\n                var formEl = cf.TagsParser.parseJSONIntoElements(formlessTags);\n                constructorOptions.formEl = formEl;\n            }\n            else {\n                // keep it standard\n                constructorOptions = data;\n            }\n            return new cf.ConversationalForm(constructorOptions);\n        };\n        ConversationalForm.autoStartTheConversation = function () {\n            if (cf.ConversationalForm.hasAutoInstantiated)\n                return;\n            // auto start the conversation\n            var formElements = document.querySelectorAll(\""form[cf-form]\"");\n            // no form elements found, look for the old init attribute\n            if (formElements.length === 0) {\n                formElements = document.querySelectorAll(\""form[cf-form-element]\"");\n            }\n            var formContexts = document.querySelectorAll(\""*[cf-context]\"");\n            if (formElements && formElements.length > 0) {\n                for (var i = 0; i < formElements.length; i++) {\n                    var form = formElements[i];\n                    var context = formContexts[i];\n                    cf.ConversationalForm.startTheConversation({\n                        formEl: form,\n                        context: context\n                    });\n                }\n                cf.ConversationalForm.hasAutoInstantiated = true;\n            }\n        };\n        ConversationalForm.animationsEnabled = true;\n        ConversationalForm.illustrateAppFlow = true;\n        ConversationalForm.suppressLog = true;\n        ConversationalForm.showProgressBar = false;\n        ConversationalForm.preventSubmitOnEnter = false;\n        ConversationalForm.hasAutoInstantiated = false;\n        return ConversationalForm;\n    }());\n    cf_1.ConversationalForm = ConversationalForm;\n})(cf || (cf = {}));\nif (document.readyState == \""complete\"") {\n    // if document alread instantiated, usually this happens if Conversational Form is injected through JS\n    setTimeout(function () { return cf.ConversationalForm.autoStartTheConversation(); }, 0);\n}\nelse {\n    // await for when document is ready\n    window.addEventListener(\""load\"", function () {\n        cf.ConversationalForm.autoStartTheConversation();\n    }, false);\n}\n\n// jquery plugin\n(function (factory) {\n\ttry{\n\t\tfactory(jQuery);\n\t}catch(e){\n\t\t// whoops no jquery..\n\t}\n}(function ($) {\n\t$.fn.conversationalForm = function (options /* ConversationalFormOptions, see README */) {\n\t\toptions = options || {};\n\t\tif(!options.formEl){\n\t\t\toptions.formEl = this[0];\n\t\t}\n\n\t\tif(!options.context){\n\t\t\tvar formContexts = document.querySelectorAll(\""*[cf-context]\"");\n\t\t\tif(formContexts[0]){\n\t\t\t\toptions.context = formContexts[0];\n\t\t\t}\n\t\t}\n\n\t\treturn new cf.ConversationalForm(options);\n\t};\n}));\n\n// requirejs/amd plugin\n(function (root, factory) {\n\t// from http://ifandelse.com/its-not-hard-making-your-library-support-amd-and-commonjs/#update\n\tif(typeof define === \""function\"" && define.amd) {\n\t\tdefine([\""conversational-form\""], function(conversationalform){\n\t\t\treturn (root.conversationalform = factory(conversationalform));\n\t\t});\n\t} else if(typeof module === \""object\"" && module.exports) {\n\t\tmodule.exports = (root.conversationalform = factory(require(\""conversational-form\"")));\n\t} else {\n\t\troot.conversationalform = factory(cf.ConversationalForm);\n\t}\n\t}(window, function(conversationalform) {\n\t\t// module code here....\n\t\treturn cf;\n\t}\n));"",""/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n *\n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\n/* ES6 changes:\n\t- declare and export _gsScope at top.\n\t- set var TweenLite = the result of the main function\n\t- export default TweenLite at the bottom\n\t- return TweenLite at the bottom of the main function\n\t- pass in _gsScope as the first parameter of the main function (which is actually at the bottom)\n\t- remove the \""export to multiple environments\"" in Definition().\n */\nexport var _gsScope = (typeof(window) !== \""undefined\"") ? window : (typeof(module) !== \""undefined\"" && module.exports && typeof(global) !== \""undefined\"") ? global : this || {};\n\nexport var TweenLite = (function(window) {\n\n\t\t\""use strict\"";\n\t\tvar _exports = {},\n\t\t\t_doc = window.document,\n\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\tif (_globals.TweenLite) {\n\t\t\treturn _globals.TweenLite; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t}\n\t\tvar _namespace = function(ns) {\n\t\t\t\tvar a = ns.split(\"".\""),\n\t\t\t\t\tp = _globals, i;\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\tgs = _namespace(\""com.greensock\""),\n\t\t\t_tinyNum = 0.00000001,\n\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_emptyFunc = function() {},\n\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \""(obj instanceof Array)\"" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\tarray = toString.call([]);\n\t\t\t\treturn function(obj) {\n\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \""object\"" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t_defLookup = {},\n\n\t\t\t/**\n\t\t\t * @constructor\n\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t *\n\t\t\t * Every definition will be added to a \""com.greensock\"" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t * sandbox the banner one like:\n\t\t\t *\n\t\t\t * <script>\n\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \""gs\"" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \""gs\"" or \""banner\"" or whatever.\n\t\t\t * </script>\n\t\t\t * <script src=\""js/greensock/v1.7/TweenMax.js\""></script>\n\t\t\t * <script>\n\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t * </script>\n\t\t\t * <script src=\""js/greensock/v1.6/TweenMax.js\""></script>\n\t\t\t * <script>\n\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t * </script>\n\t\t\t *\n\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \""com.greensock.\"" as that's assumed. For example, \""TweenLite\"" or \""plugins.CSSPlugin\"" or \""easing.Back\"".\n\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \""com.greensock.\"" prefix). For example [\""TweenLite\"",\""plugins.TweenPlugin\"",\""core.Animation\""]\n\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t */\n\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t_defLookup[ns] = this;\n\t\t\t\tthis.gsClass = null;\n\t\t\t\tthis.func = func;\n\t\t\t\tvar _classes = [];\n\t\t\t\tthis.check = function(init) {\n\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\tcur, a, n, cl;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\ta = (\""com.greensock.\"" + ns).split(\"".\"");\n\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\tcl = _namespace(a.join(\"".\""))[n] = this.gsClass = func.apply(func, _classes);\n\n\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tif (typeof(module) !== \""undefined\"" && module.exports) { //node\n\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof(define) === \""function\"" && define.amd){ //AMD\n\t\t\t\t\t\t\t\tdefine((window.GreenSockAMDPath ? window.GreenSockAMDPath + \""/\"" : \""\"") + ns.split(\"".\"").pop(), [], function() { return cl; });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.check(true);\n\t\t\t},\n\n\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t},\n\n\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\tfunc = func || function() {};\n\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\treturn func;\n\t\t\t};\n\n\t\t_gsDefine.globals = _globals;\n\n\n\n/*\n * ----------------------------------------------------------------\n * Ease\n * ----------------------------------------------------------------\n */\n\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\tEase = _class(\""easing.Ease\"", function(func, extraParams, type, power) {\n\t\t\t\tthis._func = func;\n\t\t\t\tthis._type = type || 0;\n\t\t\t\tthis._power = power || 0;\n\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t}, true),\n\t\t\t_easeMap = Ease.map = {},\n\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\tvar na = names.split(\"",\""),\n\t\t\t\t\ti = na.length,\n\t\t\t\t\tta = (types || \""easeIn,easeOut,easeInOut\"").split(\"",\""),\n\t\t\t\t\te, name, j, type;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tname = na[i];\n\t\t\t\t\te = create ? _class(\""easing.\""+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\tj = ta.length;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t_easeMap[name + \"".\"" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tp = Ease.prototype;\n\t\tp._calcEnd = false;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._func) {\n\t\t\t\tthis._params[0] = p;\n\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t}\n\t\t\tvar t = this._type,\n\t\t\t\tpw = this._power,\n\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\tif (pw === 1) {\n\t\t\t\tr *= r;\n\t\t\t} else if (pw === 2) {\n\t\t\t\tr *= r * r;\n\t\t\t} else if (pw === 3) {\n\t\t\t\tr *= r * r * r;\n\t\t\t} else if (pw === 4) {\n\t\t\t\tr *= r * r * r * r;\n\t\t\t}\n\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t};\n\n\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\ta = [\""Linear\"",\""Quad\"",\""Cubic\"",\""Quart\"",\""Quint,Strong\""];\n\t\ti = a.length;\n\t\twhile (--i > -1) {\n\t\t\tp = a[i]+\"",Power\""+i;\n\t\t\t_easeReg(new Ease(null,null,1,i), p, \""easeOut\"", true);\n\t\t\t_easeReg(new Ease(null,null,2,i), p, \""easeIn\"" + ((i === 0) ? \"",easeNone\"" : \""\""));\n\t\t\t_easeReg(new Ease(null,null,3,i), p, \""easeInOut\"");\n\t\t}\n\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\n\n/*\n * ----------------------------------------------------------------\n * EventDispatcher\n * ----------------------------------------------------------------\n */\n\t\tvar EventDispatcher = _class(\""events.EventDispatcher\"", function(target) {\n\t\t\tthis._listeners = {};\n\t\t\tthis._eventTarget = target || this;\n\t\t});\n\t\tp = EventDispatcher.prototype;\n\n\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\tpriority = priority || 0;\n\t\t\tvar list = this._listeners[type],\n\t\t\t\tindex = 0,\n\t\t\t\tlistener, i;\n\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (list == null) {\n\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t}\n\t\t\ti = list.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlistener = list[i];\n\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\tindex = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t};\n\n\t\tp.removeEventListener = function(type, callback) {\n\t\t\tvar list = this._listeners[type], i;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.dispatchEvent = function(type) {\n\t\t\tvar list = this._listeners[type],\n\t\t\t\ti, t, listener;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\tif (i > 1) {\n\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t}\n\t\t\t\tt = this._eventTarget;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * Ticker\n * ----------------------------------------------------------------\n */\n \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t_lastUpdate = _getTime();\n\n\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\ta = [\""ms\"",\""moz\"",\""webkit\"",\""o\""];\n\t\ti = a.length;\n\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t_reqAnimFrame = window[a[i] + \""RequestAnimationFrame\""];\n\t\t\t_cancelAnimFrame = window[a[i] + \""CancelAnimationFrame\""] || window[a[i] + \""CancelRequestAnimationFrame\""];\n\t\t}\n\n\t\t_class(\""Ticker\"", function(fps, useRAF) {\n\t\t\tvar _self = this,\n\t\t\t\t_startTime = _getTime(),\n\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \""auto\"" : false,\n\t\t\t\t_lagThreshold = 500,\n\t\t\t\t_adjustedLag = 33,\n\t\t\t\t_tickWord = \""tick\"", //helps reduce gc burden\n\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t_tick = function(manual) {\n\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t}\n\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \""tick\"" event so that timing is maintained. Otherwise, if processing the \""tick\"" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tEventDispatcher.call(_self);\n\t\t\t_self.time = _self.frame = 0;\n\t\t\t_self.tick = function() {\n\t\t\t\t_tick(true);\n\t\t\t};\n\n\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\tif (!arguments.length) { //if lagSmoothing() is called with no arguments, treat it like a getter that returns a boolean indicating if it's enabled or not. This is purposely undocumented and is for internal use.\n\t\t\t\t\treturn (_lagThreshold < 1 / _tinyNum);\n\t\t\t\t}\n\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t};\n\n\t\t\t_self.sleep = function() {\n\t\t\t\tif (_id == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t} else {\n\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t}\n\t\t\t\t_req = _emptyFunc;\n\t\t\t\t_id = null;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_self.wake = function(seamless) {\n\t\t\t\tif (_id !== null) {\n\t\t\t\t\t_self.sleep();\n\t\t\t\t} else if (seamless) {\n\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t}\n\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = true;\n\t\t\t\t}\n\t\t\t\t_tick(2);\n\t\t\t};\n\n\t\t\t_self.fps = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _fps;\n\t\t\t\t}\n\t\t\t\t_fps = value;\n\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t_self.wake();\n\t\t\t};\n\n\t\t\t_self.useRAF = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _useRAF;\n\t\t\t\t}\n\t\t\t\t_self.sleep();\n\t\t\t\t_useRAF = value;\n\t\t\t\t_self.fps(_fps);\n\t\t\t};\n\t\t\t_self.fps(fps);\n\n\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (_useRAF === \""auto\"" && _self.frame < 5 && (_doc || {}).visibilityState !== \""hidden\"") {\n\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t}\n\t\t\t}, 1500);\n\t\t});\n\n\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\tp.constructor = gs.Ticker;\n\n\n/*\n * ----------------------------------------------------------------\n * Animation\n * ----------------------------------------------------------------\n */\n\t\tvar Animation = _class(\""core.Animation\"", function(duration, vars) {\n\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\tthis._timeScale = 1;\n\t\t\t\tthis._active = !!vars.immediateRender;\n\t\t\t\tthis.data = vars.data;\n\t\t\t\tthis._reversed = !!vars.reversed;\n\n\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\n\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\ttl.add(this, tl._time);\n\n\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\tthis.paused(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\tp = Animation.prototype;\n\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\tp._totalTime = p._time = 0;\n\t\tp._rawPrevTime = -1;\n\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\tp._paused = false;\n\n\n\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\tvar _checkTimeout = function() {\n\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000 && ((_doc || {}).visibilityState !== \""hidden\"" || !_ticker.lagSmoothing())) { //note: if the tab is hidden, we should still wake if lagSmoothing has been disabled.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tvar t = setTimeout(_checkTimeout, 2000);\n\t\t\t\tif (t.unref) {\n\t\t\t\t\t// allows a node process to exit even if the timeout’s callback hasn't been invoked. Without it, the node process could hang as this function is called every two seconds.\n\t\t\t\t\tt.unref();\n\t\t\t\t}\n\t\t\t};\n\t\t_checkTimeout();\n\n\n\t\tp.play = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(false).paused(false);\n\t\t};\n\n\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\tif (atTime != null) {\n\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.resume = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(false);\n\t\t};\n\n\t\tp.seek = function(time, suppressEvents) {\n\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t};\n\n\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t};\n\n\t\tp.reverse = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(true).paused(false);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t//stub - we override this method in subclasses.\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\tthis._initted = this._gc = false;\n\t\t\tthis._rawPrevTime = -1;\n\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\tthis._enabled(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.isActive = function() {\n\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\tstartTime = this._startTime,\n\t\t\t\trawTime;\n\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime(true)) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale - _tinyNum));\n\t\t};\n\n\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tthis._gc = !enabled;\n\t\t\tthis._active = this.isActive();\n\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\tp._kill = function(vars, target) {\n\t\t\treturn this._enabled(false, false);\n\t\t};\n\n\t\tp.kill = function(vars, target) {\n\t\t\tthis._kill(vars, target);\n\t\t\treturn this;\n\t\t};\n\n\t\tp._uncache = function(includeSelf) {\n\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\twhile (tween) {\n\t\t\t\ttween._dirty = true;\n\t\t\t\ttween = tween.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._swapSelfInParams = function(params) {\n\t\t\tvar i = params.length,\n\t\t\t\tcopy = params.concat();\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (params[i] === \""{self}\"") {\n\t\t\t\t\tcopy[i] = this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t\tp._callback = function(type) {\n\t\t\tvar v = this.vars,\n\t\t\t\tcallback = v[type],\n\t\t\t\tparams = v[type + \""Params\""],\n\t\t\t\tscope = v[type + \""Scope\""] || v.callbackScope || this,\n\t\t\t\tl = params ? params.length : 0;\n\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \""Scope\""] || v.callbackScope || this, v[type + \""Params\""] || _blankArray);\n\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t}\n\t\t};\n\n//----Animation getters/setters --------------------------------------------------------\n\n\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\tif ((type || \""\"").substr(0,2) === \""on\"") {\n\t\t\t\tvar v = this.vars;\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn v[type];\n\t\t\t\t}\n\t\t\t\tif (callback == null) {\n\t\t\t\t\tdelete v[type];\n\t\t\t\t} else {\n\t\t\t\t\tv[type] = callback;\n\t\t\t\t\tv[type + \""Params\""] = (_isArray(params) && params.join(\""\"").indexOf(\""{self}\"") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\tv[type + \""Scope\""] = scope;\n\t\t\t\t}\n\t\t\t\tif (type === \""onUpdate\"") {\n\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.delay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._delay;\n\t\t\t}\n\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t}\n\t\t\tthis._delay = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tthis._duration = this._totalDuration = value;\n\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tthis._dirty = false;\n\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._totalTime;\n\t\t\t}\n\t\t\tif (this._timeline) {\n\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t}\n\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\tvar duration = this.duration();\n\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t};\n\n\t\tp.startTime = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._startTime;\n\t\t\t}\n\t\t\tif (value !== this._startTime) {\n\t\t\t\tthis._startTime = value;\n\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.endTime = function(includeRepeats) {\n\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t};\n\n\t\tp.timeScale = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._timeScale;\n\t\t\t}\n\t\t\tvar pauseTime, t;\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\tpauseTime = this._pauseTime;\n\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t}\n\t\t\tthis._timeScale = value;\n\t\t\tt = this.timeline;\n\t\t\twhile (t && t.timeline) { //must update the duration/totalDuration of all ancestor timelines immediately in case in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n\t\t\t\tt._dirty = true;\n\t\t\t\tt.totalDuration();\n\t\t\t\tt = t.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.reversed = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._reversed;\n\t\t\t}\n\t\t\tif (value != this._reversed) {\n\t\t\t\tthis._reversed = value;\n\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._paused;\n\t\t\t}\n\t\t\tvar tl = this._timeline,\n\t\t\t\traw, elapsed;\n\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\traw = tl.rawTime();\n\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t}\n\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\tthis._paused = value;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._gc && !value) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * SimpleTimeline\n * ----------------------------------------------------------------\n */\n\t\tvar SimpleTimeline = _class(\""core.SimpleTimeline\"", function(vars) {\n\t\t\tAnimation.call(this, 0, vars);\n\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t});\n\n\t\tp = SimpleTimeline.prototype = new Animation();\n\t\tp.constructor = SimpleTimeline;\n\t\tp.kill()._gc = false;\n\t\tp._first = p._last = p._recent = null;\n\t\tp._sortChildren = false;\n\n\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\tvar prevTween, st;\n\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\tchild._pauseTime = this.rawTime() - (child._timeline.rawTime() - child._pauseTime);\n\t\t\t}\n\t\t\tif (child.timeline) {\n\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t}\n\t\t\tchild.timeline = child._timeline = this;\n\t\t\tif (child._gc) {\n\t\t\t\tchild._enabled(true, true);\n\t\t\t}\n\t\t\tprevTween = this._last;\n\t\t\tif (this._sortChildren) {\n\t\t\t\tst = child._startTime;\n\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prevTween) {\n\t\t\t\tchild._next = prevTween._next;\n\t\t\t\tprevTween._next = child;\n\t\t\t} else {\n\t\t\t\tchild._next = this._first;\n\t\t\t\tthis._first = child;\n\t\t\t}\n\t\t\tif (child._next) {\n\t\t\t\tchild._next._prev = child;\n\t\t\t} else {\n\t\t\t\tthis._last = child;\n\t\t\t}\n\t\t\tchild._prev = prevTween;\n\t\t\tthis._recent = child;\n\t\t\tif (this._timeline) {\n\t\t\t\tthis._uncache(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tif (tween.timeline === this) {\n\t\t\t\tif (!skipDisable) {\n\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t}\n\n\t\t\t\tif (tween._prev) {\n\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t}\n\t\t\t\tif (tween._next) {\n\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t}\n\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t}\n\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar tween = this._first,\n\t\t\t\tnext;\n\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\treturn this._totalTime;\n\t\t};\n\n/*\n * ----------------------------------------------------------------\n * TweenLite\n * ----------------------------------------------------------------\n */\n\t\tvar TweenLite = _class(\""TweenLite\"", function(target, duration, vars) {\n\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \""hot\"" method)\n\n\t\t\t\tif (target == null) {\n\t\t\t\t\tthrow \""Cannot tween a null target.\"";\n\t\t\t\t}\n\n\t\t\t\tthis.target = target = (typeof(target) !== \""string\"") ? target : TweenLite.selector(target) || target;\n\n\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\ti, targ, targets;\n\n\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \""number\"") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\n\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \""number\"") {\n\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (typeof(targ) === \""string\"") {\n\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\tif (typeof(targ) === \""string\"") {\n\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \""force\"" parameter to true because we want to allow lazying by default (using the \""force\"" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t}\n\t\t\t}, true),\n\t\t\t_isSelector = function(v) {\n\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \""nodeType\"" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t},\n\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\tvar css = {},\n\t\t\t\t\tp;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \""transform\"" || p === \""x\"" || p === \""y\"" || p === \""width\"" || p === \""height\"" || p === \""className\"" || p === \""border\"") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \""x\"" and \""y\"" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvars.css = css;\n\t\t\t};\n\n\t\tp = TweenLite.prototype = new Animation();\n\t\tp.constructor = TweenLite;\n\t\tp.kill()._gc = false;\n\n//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\n\t\tp.ratio = 0;\n\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\n\t\tTweenLite.version = \""2.1.3\"";\n\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\tTweenLite.defaultOverwrite = \""auto\"";\n\t\tTweenLite.ticker = _ticker;\n\t\tTweenLite.autoSleep = 120;\n\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t};\n\n\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\tif (selector) {\n\t\t\t\tTweenLite.selector = selector;\n\t\t\t\treturn selector(e);\n\t\t\t}\n\t\t\tif (!_doc) { //in some dev environments (like Angular 6), GSAP gets loaded before the document is defined! So re-query it here if/when necessary.\n\t\t\t\t_doc = window.document;\n\t\t\t}\n\t\t\treturn (!_doc) ? e : (_doc.querySelectorAll ? _doc.querySelectorAll(e) : _doc.getElementById((e.charAt(0) === \""#\"") ? e.substr(1) : e));\n\t\t};\n\n\t\tvar _lazyTweens = [],\n\t\t\t_lazyLookup = {},\n\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t_relExp = /[\\+-]=-?[\\.\\d]/,\n\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t_setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : (v === 1 && this.end != null) ? this.end : v ? this.join(\""\"") : this.start;\n\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\tval = pt.m.call(this._tween, val, this._target || pt.t, this._tween);\n\t\t\t\t\t} else if (val < min) if (val > -min && !pt.blob) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_blobRound = function(v) {\n\t\t\t\treturn (((v * 1000) | 0) / 1000) + \""\"";\n\t\t\t},\n\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \""rgb(0,0,0)\"" and \""rgb(100,50,0)\"" would become [\""rgb(\"", 0, \"",\"", 50, \"",0)\""]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \""start\"" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\""\"")).\n\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\ts = \""\"",\n\t\t\t\t\tcolor = 0,\n\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\ta.start = start;\n\t\t\t\ta.end = end;\n\t\t\t\tstart = a[0] = start + \""\""; //ensure values are strings\n\t\t\t\tend = a[1] = end + \""\"";\n\t\t\t\tif (filter) {\n\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\tstart = a[0];\n\t\t\t\t\tend = a[1];\n\t\t\t\t}\n\t\t\t\ta.length = 0;\n\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\tif (pt) {\n\t\t\t\t\tpt._next = null;\n\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t}\n\t\t\t\tl = endNums.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \"",\""; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t} else if (nonNumbers.substr(-5) === \""rgba(\"") {\n\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\ts = \""\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \""=\"") ? parseInt(currentNum.charAt(0) + \""1\"", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : _blobRound}; //limiting to 3 decimal places and casting as a string can really help performance when array.join() is called!\n\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t}\n\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t}\n\t\t\t\ts += end.substr(charIndex);\n\t\t\t\tif (s) {\n\t\t\t\t\ta.push(s);\n\t\t\t\t}\n\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\tif (_relExp.test(end)) { //if the end string contains relative values, delete it so that on the final render (in _setRatio()), we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\t\t\t\t\ta.end = null;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t//note: \""funcParam\"" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\""width\"") and setAttribute(\""width\"", value). In this example, funcParam would be \""width\"". Used by AttrPlugin for example.\n\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\tif (typeof(end) === \""function\"") {\n\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t}\n\t\t\t\tvar type = typeof(target[prop]),\n\t\t\t\t\tgetterName = (type !== \""function\"") ? \""\"" : ((prop.indexOf(\""set\"") || typeof(target[\""get\"" + prop.substr(3)]) !== \""function\"") ? prop : \""get\"" + prop.substr(3)),\n\t\t\t\t\ts = (start !== \""get\"") ? start : !getterName ? target[prop] : funcParam ? target[getterName](funcParam) : target[getterName](),\n\t\t\t\t\tisRelative = (typeof(end) === \""string\"" && end.charAt(1) === \""=\""),\n\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \""function\""), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \""function\"") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \""1\"", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\tblob;\n\n\t\t\t\tif (typeof(s) !== \""number\"" || (typeof(end) !== \""number\"" && !isRelative)) {\n\t\t\t\t\tif (funcParam || isNaN(s) || (!isRelative && isNaN(end)) || typeof(s) === \""boolean\"" || typeof(end) === \""boolean\"") {\n\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\tblob = _blobDif(s, (isRelative ? (parseFloat(pt.s) + pt.c) + (pt.s + \""\"").replace(/[0-9\\-\\.]/g, \""\"") : end), stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\tpt = {t: blob, p: \""setRatio\"", s: 0, c: 1, f: 2, pg: 0, n: overwriteProp || prop, pr: 0, m: 0}; //\""2\"" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\tif (!isRelative) {\n\t\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t_tweenLookupNum = 0,\n\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1, yoyoEase:1, stagger:1},\n\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \""true\"":1, \""false\"":0},\n\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t_nextGCFrame = 30,\n\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\tvar l = _lazyTweens.length,\n\t\t\t\t\ti, tween;\n\t\t\t\t_lazyLookup = {};\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_lazyTweens.length = 0;\n\t\t\t};\n\n\t\t_rootTimeline._startTime = _ticker.time;\n\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \""tick\"" before code runs which means any lazy renders wouldn't run before the next official \""tick\"".\n\n\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\tvar i, a, p;\n\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t_ticker.addEventListener(\""tick\"", Animation._updateRoot);\n\n\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \""t\"" + (_tweenLookupNum++))]) {\n\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t}\n\t\t\t\tif (tween) {\n\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t},\n\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\tif (func) {\n\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\tif (func) {\n\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t},\n\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\tl = siblings.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t\t//NOTE: Add tiny amount to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\toverlaps = [],\n\t\t\t\t\toCount = 0,\n\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\tglobalStart;\n\t\t\t\ti = siblings.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) {\n\t\t\t\t\t\t//ignore\n\t\t\t\t\t} else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= _tinyNum * 2)) {\n\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti = oCount;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\tl = curTween._firstPT; //we need to discern if there were property tweens originally; if they all get removed in the next line's _kill() call, the tween should be killed. See https://github.com/greensock/GreenSock-JS/issues/278\n\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted && l)) {\n\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t},\n\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\tt = tween._startTime;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\treturn -100;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\tt /= ts;\n\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t};\n\n\n//---- TweenLite instance methods -----------------------------------------------------------------------------\n\n\t\tp._init = function() {\n\t\t\tvar v = this.vars,\n\t\t\t\top = this._overwrittenProps,\n\t\t\t\tdur = this._duration,\n\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\tease = v.ease,\n\t\t\t\tstartAt = this._startAt,\n\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\tif (v.startAt) {\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\""+=100\""}, {x:\""-=100\""}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t}\n\t\t\t\tstartVars = {};\n\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t}\n\t\t\t\tstartVars.data = \""isStart\"";\n\t\t\t\tstartVars.overwrite = false;\n\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\tstartVars.onUpdate = v.onUpdate;\n\t\t\t\tstartVars.onUpdateParams = v.onUpdateParams;\n\t\t\t\tstartVars.onUpdateScope = v.onUpdateScope || v.callbackScope || this;\n\t\t\t\tthis._startAt = TweenLite.to(this.target || {}, 0, startVars);\n\t\t\t\tif (immediate) {\n\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true);\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t\tthis._startAt = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t}\n\t\t\t\t\tpt = {};\n\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\tif (!_reservedProps[p] || p === \""autoCSS\"") {\n\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\tpt.data = \""isFromStart\""; //we tag the tween with as \""isFromStart\"" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \""from()\"" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\""height\"", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \""function\"") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t}\n\t\t\tthis._easeType = this._ease._type;\n\t\t\tthis._easePower = this._ease._power;\n\t\t\tthis._firstPT = null;\n\n\t\t\tif (this._targets) {\n\t\t\t\tl = this._targets.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t}\n\n\t\t\tif (initPlugins) {\n\t\t\t\tTweenLite._onPluginEvent(\""_onInitAllProps\"", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t}\n\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \""function\"") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\tthis._enabled(false, false);\n\t\t\t}\n\t\t\tif (v.runBackwards) {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\tthis._initted = true;\n\t\t};\n\n\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\tif (target == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t}\n\n\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \""nodeType\"" on the window inside an iframe.\n\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t}\n\t\t\tfor (p in this.vars) {\n\t\t\t\tv = this.vars[p];\n\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\""\"").indexOf(\""{self}\"") !== -1) {\n\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\n\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\""setRatio\"", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \""get\"", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t}\n\t\t\treturn initPlugins;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\tduration = self._duration,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\tif (time >= duration - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = self._time = duration;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(1) : 1;\n\t\t\t\tif (!self._reversed ) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \""onComplete\"";\n\t\t\t\t\tforce = (force || self._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \""playhead\"" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \""playhead\"" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (self._startTime === self._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -_tinyNum) || (prevRawPrevTime === _tinyNum && self.data !== \""isPause\"")) if (prevRawPrevTime !== time) { //note: when this.data is \""isPause\"", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = 0;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \""playhead\"" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \""playhead\"" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && self.data === \""isPause\"")) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!self._initted || (self._startAt && self._startAt.progress())) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately. Also, we check progress() because if startAt has already rendered at its end, we should force a render at its beginning. Otherwise, if you put the playhead directly on top of where a fromTo({immediateRender:false}) starts, and then move it backwards, the from() won't revert its values.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = time;\n\n\t\t\t\tif (self._easeType) {\n\t\t\t\t\tvar r = time / duration, type = self._easeType, pow = self._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\t\t\t\t\tself.ratio = (type === 1) ? 1 - r : (type === 2) ? r : (time / duration < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t\t\t} else {\n\t\t\t\t\tself.ratio = self._ease.getRatio(time / duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._time === prevTime && !force) {\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._init();\n\t\t\t\tif (!self._initted || self._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && self._firstPT && ((self.vars.lazy !== false && self._duration) || (self.vars.lazy && !self._duration))) {\n\t\t\t\t\tself._time = self._totalTime = prevTime;\n\t\t\t\t\tself._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t_lazyTweens.push(self);\n\t\t\t\t\tself._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (self._time && !isComplete) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t} else if (isComplete && self._ease._calcEnd) {\n\t\t\t\t\tself.ratio = self._ease.getRatio((self._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\tself._lazy = false;\n\t\t\t}\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time >= 0) {\n\t\t\t\tself._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTime === 0) {\n\t\t\t\tif (self._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \""_dummyGS\""; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.vars.onStart) if (self._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tself._callback(\""onStart\"");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpt = self._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * self.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * self.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (self._onUpdate) {\n\t\t\t\tif (time < 0) if (self._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (self._time !== prevTime || isComplete || force) {\n\t\t\t\t\tself._callback(\""onUpdate\"");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) if (!self._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && self._startAt && !self._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && self._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \""time\"" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tself._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\tif (vars === \""all\"") {\n\t\t\t\tvars = null;\n\t\t\t}\n\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\tthis._lazy = false;\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\ttarget = (typeof(target) !== \""string\"") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\tfirstPT = this._firstPT,\n\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \""number\"") {\n\t\t\t\ti = target.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._targets) {\n\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \""all\"";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \""all\"";\n\t\t\t\t}\n\n\t\t\t\tif (propLookup) {\n\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \""all\"" && vars !== propLookup && (typeof(vars) !== \""object\"" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._firstPT && this._initted && firstPT) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\tTweenLite._onPluginEvent(\""_onDisable\"", this);\n\t\t\t}\n\t\t\tvar t = this._time;\n\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\tif (this.vars.immediateRender) {\n\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \""force\"" parameter to true because we want to allow lazying by default (using the \""force\"" parameter always forces an immediate full render)\n\t\t\t\tthis.render(t, false, this.vars.lazy !== false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (enabled && this._gc) {\n\t\t\t\tvar targets = this._targets,\n\t\t\t\t\ti;\n\t\t\t\tif (targets) {\n\t\t\t\t\ti = targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \""_onEnable\"" : \""_onDisable\""), this);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n//----TweenLite static methods -----------------------------------------------------\n\n\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t};\n\n\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenLite.set = function(target, vars) {\n\t\t\treturn new TweenLite(target, 0, vars);\n\t\t};\n\n\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\tif (target == null) { return []; }\n\t\t\ttarget = (typeof(target) !== \""string\"") ? target : TweenLite.selector(target) || target;\n\t\t\tvar i, a, j, t;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \""number\"") {\n\t\t\t\ti = target.length;\n\t\t\t\ta = [];\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t}\n\t\t\t\ti = a.length;\n\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tt = a[i];\n\t\t\t\t\tj = i;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (target._gsTweenID) {\n\t\t\t\ta = _register(target).concat();\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a || [];\n\t\t};\n\n\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\tif (typeof(onlyActive) === \""object\"") {\n\t\t\t\tvars = onlyActive; //for backwards compatibility (before \""onlyActive\"" parameter was inserted)\n\t\t\t\tonlyActive = false;\n\t\t\t}\n\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\ta[i]._kill(vars, target);\n\t\t\t}\n\t\t};\n\n\n\n/*\n * ----------------------------------------------------------------\n * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n * ----------------------------------------------------------------\n */\n\t\tvar TweenPlugin = _class(\""plugins.TweenPlugin\"", function(props, priority) {\n\t\t\t\t\tthis._overwriteProps = (props || \""\"").split(\"",\"");\n\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t}, true);\n\n\t\tp = TweenPlugin.prototype;\n\t\tTweenPlugin.version = \""1.19.0\"";\n\t\tTweenPlugin.API = 2;\n\t\tp._firstPT = null;\n\t\tp._addTween = _addPropTween;\n\t\tp.setRatio = _setRatio;\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._overwriteProps,\n\t\t\t\tpt = this._firstPT,\n\t\t\t\ti;\n\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\tthis._overwriteProps = [];\n\t\t\t} else {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tval;\n\t\t\twhile (pt) {\n\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \""_\"").join(\""\"") ]);\n\t\t\t\tif (val && typeof(val) === \""function\"") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\tvar pt = tween._firstPT,\n\t\t\t\tchanged, pt2, first, last, next;\n\t\t\tif (type === \""_onInitAllProps\"") {\n\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tpt = tween._firstPT = first;\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \""function\"") if (pt.t[type]()) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tTweenPlugin.activate = function(plugins) {\n\t\t\tvar i = plugins.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t_gsDefine.plugin = function(config) {\n\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \""illegal plugin definition.\""; }\n\t\t\tvar propName = config.propName,\n\t\t\t\tpriority = config.priority || 0,\n\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\tmap = {init:\""_onInitTween\"", set:\""setRatio\"", kill:\""_kill\"", round:\""_mod\"", mod:\""_mod\"", initAll:\""_onInitAllProps\""},\n\t\t\t\tPlugin = _class(\""plugins.\"" + propName.charAt(0).toUpperCase() + propName.substr(1) + \""Plugin\"",\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t}, (config.global === true)),\n\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\tprop;\n\t\t\tp.constructor = Plugin;\n\t\t\tPlugin.API = config.API;\n\t\t\tfor (prop in map) {\n\t\t\t\tif (typeof(config[prop]) === \""function\"") {\n\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\tPlugin.version = config.version;\n\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\treturn Plugin;\n\t\t};\n\n\n\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\ta = window._gsQueue;\n\t\tif (a) {\n\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\ta[i]();\n\t\t\t}\n\t\t\tfor (p in _defLookup) {\n\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\twindow.console.log(\""GSAP encountered missing dependency: \"" + p);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\n\t\treturn TweenLite;\n\n})(_gsScope, \""TweenLite\"");\n\nexport var globals = _gsScope.GreenSockGlobals;\nvar nonGlobals = globals.com.greensock;\nexport { TweenLite as default };\nexport var SimpleTimeline = nonGlobals.core.SimpleTimeline;\nexport var Animation = nonGlobals.core.Animation;\nexport var Ease = globals.Ease;\nexport var Linear = globals.Linear;\nexport var Power0 = Linear;\nexport var Power1 = globals.Power1;\nexport var Power2 = globals.Power2;\nexport var Power3 = globals.Power3;\nexport var Power4 = globals.Power4;\nexport var TweenPlugin = globals.TweenPlugin;\nexport var EventDispatcher = nonGlobals.events.EventDispatcher;\n"",""/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport TweenLite, { _gsScope, globals, Animation, SimpleTimeline, Ease, Power0, Power1, Power2, Power3, Power4, Linear  } from \""./TweenLite.js\"";\n\n\n_gsScope._gsDefine(\""TweenMax\"", [\""core.Animation\"",\""core.SimpleTimeline\"",\""TweenLite\""], function() {\n\n\t\tvar _slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\tp, val;\n\t\t\t\tfor (p in alt) {\n\t\t\t\t\tval = alt[p];\n\t\t\t\t\tvars[p] = (typeof(val) === \""function\"") ? val(i, targets[i], targets) : val[i % val.length];\n\t\t\t\t}\n\t\t\t\tdelete vars.cycle;\n\t\t\t},\n\t\t\t//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\n\t\t\t_distribute = function(v) {\n\t\t\t\tif (typeof(v) === \""function\"") {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\tvar vars = (typeof(v) === \""object\"") ? v : {each:v}, //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \""amount\"" that's chunked out among them all.\n\t\t\t\t\tease = vars.ease,\n\t\t\t\t\tfrom = vars.from || 0,\n\t\t\t\t\tbase = vars.base || 0,\n\t\t\t\t\tcache = {},\n\t\t\t\t\tisFromKeyword = isNaN(from),\n\t\t\t\t\taxis = vars.axis,\n\t\t\t\t\tratio = {center:0.5, end:1}[from] || 0;\n\t\t\t\treturn function(i, target, a) {\n\t\t\t\t\tvar l = (a || vars).length,\n\t\t\t\t\t\tdistances = cache[l],\n\t\t\t\t\t\toriginX, originY, x, y, d, j, max, min, wrap;\n\t\t\t\t\tif (!distances) {\n\t\t\t\t\t\twrap = (vars.grid === \""auto\"") ? 0 : (vars.grid || [Infinity])[0];\n\t\t\t\t\t\tif (!wrap) {\n\t\t\t\t\t\t\tmax = -Infinity;\n\t\t\t\t\t\t\twhile (max < (max = a[wrap++].getBoundingClientRect().left) && wrap < l) { }\n\t\t\t\t\t\t\twrap--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdistances = cache[l] = [];\n\t\t\t\t\t\toriginX = isFromKeyword ? (Math.min(wrap, l) * ratio) - 0.5 : from % wrap;\n\t\t\t\t\t\toriginY = isFromKeyword ? l * ratio / wrap - 0.5 : (from / wrap) | 0;\n\t\t\t\t\t\tmax = 0;\n\t\t\t\t\t\tmin = Infinity;\n\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\tx = (j % wrap) - originX;\n\t\t\t\t\t\t\ty = originY - ((j / wrap) | 0);\n\t\t\t\t\t\t\tdistances[j] = d = !axis ? Math.sqrt(x * x + y * y) : Math.abs((axis === \""y\"") ? y : x);\n\t\t\t\t\t\t\tif (d > max) {\n\t\t\t\t\t\t\t\tmax = d;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (d < min) {\n\t\t\t\t\t\t\t\tmin = d;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdistances.max = max - min;\n\t\t\t\t\t\tdistances.min = min;\n\t\t\t\t\t\tdistances.v = l = vars.amount || (vars.each * (wrap > l ? l - 1 : !axis ? Math.max(wrap, l / wrap) : axis === \""y\"" ? l / wrap : wrap)) || 0;\n\t\t\t\t\t\tdistances.b = (l < 0) ? base - l : base;\n\t\t\t\t\t}\n\t\t\t\t\tl = (distances[i] - distances.min) / distances.max;\n\t\t\t\t\treturn distances.b + (ease ? ease.getRatio(l) : l) * distances.v;\n\t\t\t\t};\n\t\t\t},\n\t\t\tTweenMax = function(target, duration, vars) {\n\t\t\t\tTweenLite.call(this, target, duration, vars);\n\t\t\t\tthis._cycle = 0;\n\t\t\t\tthis._yoyo = (this.vars.yoyo === true || !!this.vars.yoyoEase);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tif (this._repeat) {\n\t\t\t\t\tthis._uncache(true); //ensures that if there is any repeat, the totalDuration will get recalculated to accurately report it.\n\t\t\t\t}\n\t\t\t\tthis.render = TweenMax.prototype.render; //speed optimization (avoid prototype lookup on this \""hot\"" method)\n\t\t\t},\n\t\t\t_tinyNum = 0.00000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\tp = TweenMax.prototype = TweenLite.to({}, 0.1, {}),\n\t\t\t_blankArray = [];\n\n\t\tTweenMax.version = \""2.1.3\"";\n\t\tp.constructor = TweenMax;\n\t\tp.kill()._gc = false;\n\t\tTweenMax.killTweensOf = TweenMax.killDelayedCallsTo = TweenLite.killTweensOf;\n\t\tTweenMax.getTweensOf = TweenLite.getTweensOf;\n\t\tTweenMax.lagSmoothing = TweenLite.lagSmoothing;\n\t\tTweenMax.ticker = TweenLite.ticker;\n\t\tTweenMax.render = TweenLite.render;\n\t\tTweenMax.distribute = _distribute;\n\n\t\tp.invalidate = function() {\n\t\t\tthis._yoyo = (this.vars.yoyo === true || !!this.vars.yoyoEase);\n\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\tthis._yoyoEase = null;\n\t\t\tthis._uncache(true);\n\t\t\treturn TweenLite.prototype.invalidate.call(this);\n\t\t};\n\n\t\tp.updateTo = function(vars, resetDuration) {\n\t\t\tvar self = this,\n\t\t\t\tcurRatio = self.ratio,\n\t\t\t\timmediate = self.vars.immediateRender || vars.immediateRender,\n\t\t\t\tp;\n\t\t\tif (resetDuration && self._startTime < self._timeline._time) {\n\t\t\t\tself._startTime = self._timeline._time;\n\t\t\t\tself._uncache(false);\n\t\t\t\tif (self._gc) {\n\t\t\t\t\tself._enabled(true, false);\n\t\t\t\t} else {\n\t\t\t\t\tself._timeline.insert(self, self._startTime - self._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (p in vars) {\n\t\t\t\tself.vars[p] = vars[p];\n\t\t\t}\n\t\t\tif (self._initted || immediate) {\n\t\t\t\tif (resetDuration) {\n\t\t\t\t\tself._initted = false;\n\t\t\t\t\tif (immediate) {\n\t\t\t\t\t\tself.render(0, true, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (self._gc) {\n\t\t\t\t\t\tself._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (self._notifyPluginsOfEnabled && self._firstPT) {\n\t\t\t\t\t\tTweenLite._onPluginEvent(\""_onDisable\"", self); //in case a plugin like MotionBlur must perform some cleanup tasks\n\t\t\t\t\t}\n\t\t\t\t\tif (self._time / self._duration > 0.998) { //if the tween has finished (or come extremely close to finishing), we just need to rewind it to 0 and then render it again at the end which forces it to re-initialize (parsing the new vars). We allow tweens that are close to finishing (but haven't quite finished) to work this way too because otherwise, the values are so small when determining where to project the starting values that binary math issues creep in and can make the tween appear to render incorrectly when run backwards.\n\t\t\t\t\t\tvar prevTime = self._totalTime;\n\t\t\t\t\t\tself.render(0, true, false);\n\t\t\t\t\t\tself._initted = false;\n\t\t\t\t\t\tself.render(prevTime, true, false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself._initted = false;\n\t\t\t\t\t\tself._init();\n\t\t\t\t\t\tif (self._time > 0 || immediate) {\n\t\t\t\t\t\t\tvar inv = 1 / (1 - curRatio),\n\t\t\t\t\t\t\t\tpt = self._firstPT, endValue;\n\t\t\t\t\t\t\twhile (pt) {\n\t\t\t\t\t\t\t\tendValue = pt.s + pt.c;\n\t\t\t\t\t\t\t\tpt.c *= inv;\n\t\t\t\t\t\t\t\tpt.s = endValue - pt.c;\n\t\t\t\t\t\t\t\tpt = pt._next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn self;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (!this._initted) if (this._duration === 0 && this.vars.repeat) { //zero duration tweens that render immediately have render() called from TweenLite's constructor, before TweenMax's constructor has finished setting _repeat, _repeatDelay, and _yoyo which are critical in determining totalDuration() so we need to call invalidate() which is a low-kb way to get those set properly.\n\t\t\t\tthis.invalidate();\n\t\t\t}\n\t\t\tvar self = this,\n\t\t\t\ttotalDur = (!self._dirty) ? self._totalDuration : self.totalDuration(),\n\t\t\t\tprevTime = self._time,\n\t\t\t\tprevTotalTime = self._totalTime,\n\t\t\t\tprevCycle = self._cycle,\n\t\t\t\tduration = self._duration,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, cycleDuration, r, type, pow, rawPrevTime, yoyoEase;\n\t\t\tif (time >= totalDur - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = totalDur;\n\t\t\t\tself._cycle = self._repeat;\n\t\t\t\tif (self._yoyo && (self._cycle & 1) !== 0) {\n\t\t\t\t\tself._time = 0;\n\t\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\t} else {\n\t\t\t\t\tself._time = duration;\n\t\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(1) : 1;\n\t\t\t\t}\n\t\t\t\tif (!self._reversed) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \""onComplete\"";\n\t\t\t\t\tforce = (force || self._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \""playhead\"" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \""playhead\"" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (self._startTime === self._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -_tinyNum) || (prevRawPrevTime === _tinyNum && self.data !== \""isPause\"")) if (prevRawPrevTime !== time) { //note: when this.data is \""isPause\"", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = self._cycle = 0;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTotalTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \""playhead\"" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \""playhead\"" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!self._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = time;\n\t\t\t\tif (self._repeat !== 0) {\n\t\t\t\t\tcycleDuration = duration + self._repeatDelay;\n\t\t\t\t\tself._cycle = (self._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\t\t\t\t\tif (self._cycle !== 0) if (self._cycle === self._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\tself._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t}\n\t\t\t\t\tself._time = self._totalTime - (self._cycle * cycleDuration);\n\t\t\t\t\tif (self._yoyo) if ((self._cycle & 1) !== 0) {\n\t\t\t\t\t\tself._time = duration - self._time;\n\t\t\t\t\t\tyoyoEase = self._yoyoEase || self.vars.yoyoEase; //note: we don't set this._yoyoEase in _init() like we do other properties because it's TweenMax-specific and doing it here allows us to optimize performance (most tweens don't have a yoyoEase). Note that we also must skip the this.ratio calculation further down right after we _init() in this function, because we're doing it here.\n\t\t\t\t\t\tif (yoyoEase) {\n\t\t\t\t\t\t\tif (!self._yoyoEase) {\n\t\t\t\t\t\t\t\tif (yoyoEase === true && !self._initted) { //if it's not initted and yoyoEase is true, this._ease won't have been populated yet so we must discern it here.\n\t\t\t\t\t\t\t\t\tyoyoEase = self.vars.ease;\n\t\t\t\t\t\t\t\t\tself._yoyoEase = yoyoEase = !yoyoEase ? TweenLite.defaultEase : (yoyoEase instanceof Ease) ? yoyoEase : (typeof(yoyoEase) === \""function\"") ? new Ease(yoyoEase, self.vars.easeParams) : Ease.map[yoyoEase] || TweenLite.defaultEase;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself._yoyoEase = yoyoEase = (yoyoEase === true) ? self._ease : (yoyoEase instanceof Ease) ? yoyoEase : Ease.map[yoyoEase];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.ratio = yoyoEase ? 1 - yoyoEase.getRatio((duration - self._time) / duration) : 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (self._time > duration) {\n\t\t\t\t\t\tself._time = duration;\n\t\t\t\t\t} else if (self._time < 0) {\n\t\t\t\t\t\tself._time = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self._easeType && !yoyoEase) {\n\t\t\t\t\tr = self._time / duration;\n\t\t\t\t\ttype = self._easeType;\n\t\t\t\t\tpow = self._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\t\t\t\t\tself.ratio = (type === 1) ? 1 - r : (type === 2) ? r : (self._time / duration < 0.5) ? r / 2 : 1 - (r / 2);\n\n\t\t\t\t} else if (!yoyoEase) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (prevTime === self._time && !force && prevCycle === self._cycle) {\n\t\t\t\tif (prevTotalTime !== self._totalTime) if (self._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\tself._callback(\""onUpdate\"");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._init();\n\t\t\t\tif (!self._initted || self._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && self._firstPT && ((self.vars.lazy !== false && self._duration) || (self.vars.lazy && !self._duration))) { //we stick it in the queue for rendering at the very end of the tick - this is a performance optimization because browsers invalidate styles and force a recalculation if you read, write, and then read style data (so it's better to read/read/read/write/write/write than read/write/read/write/read/write). The down side, of course, is that usually you WANT things to render immediately because you may have code running right after that which depends on the change. Like imagine running TweenLite.set(...) and then immediately after that, creating a nother tween that animates the same property to another value; the starting values of that 2nd tween wouldn't be accurate if lazy is true.\n\t\t\t\t\tself._time = prevTime;\n\t\t\t\t\tself._totalTime = prevTotalTime;\n\t\t\t\t\tself._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\tself._cycle = prevCycle;\n\t\t\t\t\tTweenLiteInternals.lazyTweens.push(self);\n\t\t\t\t\tself._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (self._time && !isComplete && !yoyoEase) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t} else if (isComplete && this._ease._calcEnd && !yoyoEase) {\n\t\t\t\t\tself.ratio = self._ease.getRatio((self._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._lazy !== false) {\n\t\t\t\tself._lazy = false;\n\t\t\t}\n\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time >= 0) {\n\t\t\t\tself._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTotalTime === 0) {\n\t\t\t\tif (self._initted === 2 && time > 0) {\n\t\t\t\t\tself._init(); //will just apply overwriting since _initted of (2) means it was a from() tween that had immediateRender:true\n\t\t\t\t}\n\t\t\t\tif (self._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \""_dummyGS\""; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.vars.onStart) if (self._totalTime !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tself._callback(\""onStart\"");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpt = self._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * self.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * self.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (self._onUpdate) {\n\t\t\t\tif (time < 0) if (self._startAt && self._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (self._totalTime !== prevTotalTime || callback) {\n\t\t\t\t\tself._callback(\""onUpdate\"");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._cycle !== prevCycle) if (!suppressEvents) if (!self._gc) if (self.vars.onRepeat) {\n\t\t\t\tself._callback(\""onRepeat\"");\n\t\t\t}\n\t\t\tif (callback) if (!self._gc || force) { //check gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && self._startAt && !self._onUpdate && self._startTime) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && self._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \""time\"" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tself._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n//---- STATIC FUNCTIONS -----------------------------------------------------------------------------------------------------------\n\n\t\tTweenMax.to = function(target, duration, vars) {\n\t\t\treturn new TweenMax(target, duration, vars);\n\t\t};\n\n\t\tTweenMax.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenMax(target, duration, vars);\n\t\t};\n\n\t\tTweenMax.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenMax(target, duration, toVars);\n\t\t};\n\n\t\tTweenMax.staggerTo = TweenMax.allTo = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvar a = [],\n\t\t\t\tstaggerFunc = _distribute(vars.stagger || stagger),\n\t\t\t\tcycle = vars.cycle,\n\t\t\t\tfromCycle = (vars.startAt || _blankArray).cycle,\n\t\t\t\tl, copy, i, p;\n\t\t\tif (!_isArray(targets)) {\n\t\t\t\tif (typeof(targets) === \""string\"") {\n\t\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t\t}\n\t\t\t\tif (_isSelector(targets)) {\n\t\t\t\t\ttargets = _slice(targets);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttargets = targets || [];\n\t\t\tl = targets.length - 1;\n\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\tcopy = {};\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\tif (cycle) {\n\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (fromCycle) {\n\t\t\t\t\tfromCycle = copy.startAt = {};\n\t\t\t\t\tfor (p in vars.startAt) {\n\t\t\t\t\t\tfromCycle[p] = vars.startAt[p];\n\t\t\t\t\t}\n\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t}\n\t\t\t\tcopy.delay = staggerFunc(i, targets[i], targets) + (copy.delay || 0);\n\t\t\t\tif (i === l && onCompleteAll) {\n\t\t\t\t\tcopy.onComplete = function() {\n\t\t\t\t\t\tif (vars.onComplete) {\n\t\t\t\t\t\t\tvars.onComplete.apply(vars.onCompleteScope || this, arguments);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonCompleteAll.apply(onCompleteAllScope || vars.callbackScope || this, onCompleteAllParams || _blankArray);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\ta[i] = new TweenMax(targets[i], duration, copy);\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tTweenMax.staggerFrom = TweenMax.allFrom = function(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn TweenMax.staggerTo(targets, duration, vars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tTweenMax.staggerFromTo = TweenMax.allFromTo = function(targets, duration, fromVars, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn TweenMax.staggerTo(targets, duration, toVars, stagger, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tTweenMax.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenMax(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenMax.set = function(target, vars) {\n\t\t\treturn new TweenMax(target, 0, vars);\n\t\t};\n\n\t\tTweenMax.isTweening = function(target) {\n\t\t\treturn (TweenLite.getTweensOf(target, true).length > 0);\n\t\t};\n\n\t\tvar _getChildrenOf = function(timeline, includeTimelines) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcnt = 0,\n\t\t\t\t\ttween = timeline._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween instanceof TweenLite) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (includeTimelines) {\n\t\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta = a.concat(_getChildrenOf(tween, includeTimelines));\n\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\tgetAllTweens = TweenMax.getAllTweens = function(includeTimelines) {\n\t\t\t\treturn _getChildrenOf(Animation._rootTimeline, includeTimelines).concat( _getChildrenOf(Animation._rootFramesTimeline, includeTimelines) );\n\t\t\t};\n\n\t\tTweenMax.killAll = function(complete, tweens, delayedCalls, timelines) {\n\t\t\tif (tweens == null) {\n\t\t\t\ttweens = true;\n\t\t\t}\n\t\t\tif (delayedCalls == null) {\n\t\t\t\tdelayedCalls = true;\n\t\t\t}\n\t\t\tvar a = getAllTweens((timelines != false)),\n\t\t\t\tl = a.length,\n\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\tisDC, tween, i;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\ttween = a[i];\n\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\tif (complete) {\n\t\t\t\t\t\ttween.totalTime(tween._reversed ? 0 : tween.totalDuration());\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tTweenMax.killChildTweensOf = function(parent, complete) {\n\t\t\tif (parent == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar tl = TweenLiteInternals.tweenLookup,\n\t\t\t\ta, curParent, p, i, l;\n\t\t\tif (typeof(parent) === \""string\"") {\n\t\t\t\tparent = TweenLite.selector(parent) || parent;\n\t\t\t}\n\t\t\tif (_isSelector(parent)) {\n\t\t\t\tparent = _slice(parent);\n\t\t\t}\n\t\t\tif (_isArray(parent)) {\n\t\t\t\ti = parent.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tTweenMax.killChildTweensOf(parent[i], complete);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ta = [];\n\t\t\tfor (p in tl) {\n\t\t\t\tcurParent = tl[p].target.parentNode;\n\t\t\t\twhile (curParent) {\n\t\t\t\t\tif (curParent === parent) {\n\t\t\t\t\t\ta = a.concat(tl[p].tweens);\n\t\t\t\t\t}\n\t\t\t\t\tcurParent = curParent.parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t\tl = a.length;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tif (complete) {\n\t\t\t\t\ta[i].totalTime(a[i].totalDuration());\n\t\t\t\t}\n\t\t\t\ta[i]._enabled(false, false);\n\t\t\t}\n\t\t};\n\n\t\tvar _changePause = function(pause, tweens, delayedCalls, timelines) {\n\t\t\ttweens = (tweens !== false);\n\t\t\tdelayedCalls = (delayedCalls !== false);\n\t\t\ttimelines = (timelines !== false);\n\t\t\tvar a = getAllTweens(timelines),\n\t\t\t\tallTrue = (tweens && delayedCalls && timelines),\n\t\t\t\ti = a.length,\n\t\t\t\tisDC, tween;\n\t\t\twhile (--i > -1) {\n\t\t\t\ttween = a[i];\n\t\t\t\tif (allTrue || (tween instanceof SimpleTimeline) || ((isDC = (tween.target === tween.vars.onComplete)) && delayedCalls) || (tweens && !isDC)) {\n\t\t\t\t\ttween.paused(pause);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tTweenMax.pauseAll = function(tweens, delayedCalls, timelines) {\n\t\t\t_changePause(true, tweens, delayedCalls, timelines);\n\t\t};\n\n\t\tTweenMax.resumeAll = function(tweens, delayedCalls, timelines) {\n\t\t\t_changePause(false, tweens, delayedCalls, timelines);\n\t\t};\n\n\t\tTweenMax.globalTimeScale = function(value) {\n\t\t\tvar tl = Animation._rootTimeline,\n\t\t\t\tt = TweenLite.ticker.time;\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn tl._timeScale;\n\t\t\t}\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\ttl = Animation._rootFramesTimeline;\n\t\t\tt = TweenLite.ticker.frame;\n\t\t\ttl._startTime = t - ((t - tl._startTime) * tl._timeScale / value);\n\t\t\ttl._timeScale = Animation._rootTimeline._timeScale = value;\n\t\t\treturn value;\n\t\t};\n\n\n//---- GETTERS / SETTERS ----------------------------------------------------------------------------------------------------------\n\n\t\tp.progress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? (this.duration() ? this._time / this._duration : this.ratio) : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t};\n\n\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\tvar duration = this._duration,\n\t\t\t\tcycle = this._cycle,\n\t\t\t\tcycleDur = cycle * (duration + this._repeatDelay);\n\t\t\tif (value > duration) {\n\t\t\t\tvalue = duration;\n\t\t\t}\n\t\t\treturn this.totalTime((this._yoyo && (cycle & 1)) ? duration - value + cycleDur : this._repeat ? value + cycleDur : value, suppressEvents);\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._duration; //don't set _dirty = false because there could be repeats that haven't been factored into the _totalDuration yet. Otherwise, if you create a repeated TweenMax and then immediately check its duration(), it would cache the value and the totalDuration would not be correct, thus repeats wouldn't take effect.\n\t\t\t}\n\t\t\treturn Animation.prototype.duration.call(this, value);\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\t//instead of Infinity, we use 999999999999 so that we can accommodate reverses\n\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t\tthis._dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (this._repeat === -1) ? this : this.duration( (value - (this._repeat * this._repeatDelay)) / (this._repeat + 1) );\n\t\t};\n\n\t\tp.repeat = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeat;\n\t\t\t}\n\t\t\tthis._repeat = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.repeatDelay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeatDelay;\n\t\t\t}\n\t\t\tthis._repeatDelay = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.yoyo = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._yoyo;\n\t\t\t}\n\t\t\tthis._yoyo = value;\n\t\t\treturn this;\n\t\t};\n\n\n\t\treturn TweenMax;\n\n\t}, true);\n\nexport var TweenMax = globals.TweenMax;\nexport var TweenMaxBase = TweenMax;\nexport { TweenMax as default };\nexport { TweenLite, Ease, Power0, Power1, Power2, Power3, Power4, Linear };\n"",""/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport TweenLite, { _gsScope, globals, TweenPlugin } from \""./TweenLite.js\"";\n\n\t_gsScope._gsDefine(\""plugins.CSSPlugin\"", [\""plugins.TweenPlugin\"",\""TweenLite\""], function() {\n\n\t\t/** @constructor **/\n\t\tvar CSSPlugin = function() {\n\t\t\t\tTweenPlugin.call(this, \""css\"");\n\t\t\t\tthis._overwriteProps.length = 0;\n\t\t\t\tthis.setRatio = CSSPlugin.prototype.setRatio; //speed optimization (avoid prototype lookup on this \""hot\"" method)\n\t\t\t},\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_hasPriority, //turns true whenever a CSSPropTween instance is created that has a priority other than 0. This helps us discern whether or not we should spend the time organizing the linked list or not after a CSSPlugin's _onInitTween() method is called.\n\t\t\t_suffixMap, //we set this in _onInitTween() each time as a way to have a persistent variable we can use in other methods like _parse() without having to pass it around as a parameter and we keep _parse() decoupled from a particular CSSPlugin instance\n\t\t\t_cs, //computed style (we store this in a shared variable to conserve memory and make minification tighter\n\t\t\t_overwriteProps, //alias to the currently instantiating CSSPlugin's _overwriteProps array. We use this closure in order to avoid having to pass a reference around from method to method and aid in minification.\n\t\t\t_specialProps = {},\n\t\t\tp = CSSPlugin.prototype = new TweenPlugin(\""css\"");\n\n\t\tp.constructor = CSSPlugin;\n\t\tCSSPlugin.version = \""2.1.3\"";\n\t\tCSSPlugin.API = 2;\n\t\tCSSPlugin.defaultTransformPerspective = 0;\n\t\tCSSPlugin.defaultSkewType = \""compensated\"";\n\t\tCSSPlugin.defaultSmoothOrigin = true;\n\t\tp = \""px\""; //we'll reuse the \""p\"" variable to keep file size down\n\t\tCSSPlugin.suffixMap = {top:p, right:p, bottom:p, left:p, width:p, height:p, fontSize:p, padding:p, margin:p, perspective:p, lineHeight:\""\""};\n\n\n\t\tvar _numExp = /(?:\\-|\\.|\\b)(\\d|\\.|e\\-)+/g,\n\t\t\t_relNumExp = /(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,\n\t\t\t_valuesExp = /(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b)/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like \""1px 5px 20px rgb(255,102,51)\""\n\t\t\t_valuesExpWithCommas = /(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b),?/gi, //finds all the values that begin with numbers or += or -= and then a number. Includes suffixes. We use this to split complex values apart like \""1px 5px 20px rgb(255,102,51)\""\n\t\t\t_NaNExp = /(?![+-]?\\d*\\.?\\d+|[+-]|e[+-]\\d+)[^0-9]/g, //also allows scientific notation and doesn't kill the leading -/+ in -= and +=\n\t\t\t_suffixExp = /(?:\\d|\\-|\\+|=|#|\\.)*/g,\n\t\t\t_opacityExp = /opacity *= *([^)]*)/i,\n\t\t\t_opacityValExp = /opacity:([^;]*)/i,\n\t\t\t_alphaFilterExp = /alpha\\(opacity *=.+?\\)/i,\n\t\t\t_rgbhslExp = /^(rgb|hsl)/,\n\t\t\t_capsExp = /([A-Z])/g,\n\t\t\t_camelExp = /-([a-z])/gi,\n\t\t\t_urlExp = /(^(?:url\\(\\\""|url\\())|(?:(\\\""\\))$|\\)$)/gi, //for pulling out urls from url(...) or url(\""...\"") strings (some browsers wrap urls in quotes, some don't when reporting things like backgroundImage)\n\t\t\t_camelFunc = function(s, g) { return g.toUpperCase(); },\n\t\t\t_horizExp = /(?:Left|Right|Width)/i,\n\t\t\t_ieGetMatrixExp = /(M11|M12|M21|M22)=[\\d\\-\\.e]+/gi,\n\t\t\t_ieSetMatrixExp = /progid\\:DXImageTransform\\.Microsoft\\.Matrix\\(.+?\\)/i,\n\t\t\t_commasOutsideParenExp = /,(?=[^\\)]*(?:\\(|$))/gi, //finds any commas that are not within parenthesis\n\t\t\t_complexExp = /[\\s,\\(]/i, //for testing a string to find if it has a space, comma, or open parenthesis (clues that it's a complex value)\n\t\t\t_DEG2RAD = Math.PI / 180,\n\t\t\t_RAD2DEG = 180 / Math.PI,\n\t\t\t_forcePT = {},\n\t\t\t_dummyElement = {style:{}},\n\t\t\t_doc = _gsScope.document || {createElement: function() {return _dummyElement;}},\n\t\t\t_createElement = function(type, ns) {\n\t\t\t\tvar e = _doc.createElementNS ? _doc.createElementNS(ns || \""http://www.w3.org/1999/xhtml\"", type) : _doc.createElement(type);\n\t\t\t\treturn e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://greensock.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).\n\t\t\t},\n\t\t\t_tempDiv = _createElement(\""div\""),\n\t\t\t_tempImg = _createElement(\""img\""),\n\t\t\t_internals = CSSPlugin._internals = {_specialProps:_specialProps}, //provides a hook to a few internal methods that we need to access from inside other plugins\n\t\t\t_agent = (_gsScope.navigator || {}).userAgent || \""\"",\n\t\t\t_autoRound,\n\t\t\t_reqSafariFix, //we won't apply the Safari transform fix until we actually come across a tween that affects a transform property (to maintain best performance).\n\n\t\t\t_isSafari,\n\t\t\t_isFirefox, //Firefox has a bug that causes 3D transformed elements to randomly disappear unless a repaint is forced after each update on each element.\n\t\t\t_isSafariLT6, //Safari (and Android 4 which uses a flavor of Safari) has a bug that prevents changes to \""top\"" and \""left\"" properties from rendering properly if changed on the same frame as a transform UNLESS we set the element's WebkitBackfaceVisibility to hidden (weird, I know). Doing this for Android 3 and earlier seems to actually cause other problems, though (fun!)\n\t\t\t_ieVers,\n\t\t\t_supportsOpacity = (function() { //we set _isSafari, _ieVers, _isFirefox, and _supportsOpacity all in one function here to reduce file size slightly, especially in the minified version.\n\t\t\t\tvar i = _agent.indexOf(\""Android\""),\n\t\t\t\t\ta = _createElement(\""a\"");\n\t\t\t\t_isSafari = (_agent.indexOf(\""Safari\"") !== -1 && _agent.indexOf(\""Chrome\"") === -1 && (i === -1 || parseFloat(_agent.substr(i+8, 2)) > 3));\n\t\t\t\t_isSafariLT6 = (_isSafari && (parseFloat(_agent.substr(_agent.indexOf(\""Version/\"")+8, 2)) < 6));\n\t\t\t\t_isFirefox = (_agent.indexOf(\""Firefox\"") !== -1);\n\t\t\t\tif ((/MSIE ([0-9]{1,}[\\.0-9]{0,})/).exec(_agent) || (/Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/).exec(_agent)) {\n\t\t\t\t\t_ieVers = parseFloat( RegExp.$1 );\n\t\t\t\t}\n\t\t\t\tif (!a) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\ta.style.cssText = \""top:1px;opacity:.55;\"";\n\t\t\t\treturn /^0.55/.test(a.style.opacity);\n\t\t\t}()),\n\t\t\t_getIEOpacity = function(v) {\n\t\t\t\treturn (_opacityExp.test( ((typeof(v) === \""string\"") ? v : (v.currentStyle ? v.currentStyle.filter : v.style.filter) || \""\"") ) ? ( parseFloat( RegExp.$1 ) / 100 ) : 1);\n\t\t\t},\n\t\t\t_log = function(s) {//for logging messages, but in a way that won't throw errors in old versions of IE.\n\t\t\t\tif (_gsScope.console) {\n\t\t\t\t\tconsole.log(s);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_target, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\t\t\t_index, //when initting a CSSPlugin, we set this variable so that we can access it from within many other functions without having to pass it around as params\n\n\t\t\t_prefixCSS = \""\"", //the non-camelCase vendor prefix like \""-o-\"", \""-moz-\"", \""-ms-\"", or \""-webkit-\""\n\t\t\t_prefix = \""\"", //camelCase vendor prefix like \""O\"", \""ms\"", \""Webkit\"", or \""Moz\"".\n\n\t\t\t// @private feed in a camelCase property name like \""transform\"" and it will check to see if it is valid as-is or if it needs a vendor prefix. It returns the corrected camelCase property name (i.e. \""WebkitTransform\"" or \""MozTransform\"" or \""transform\"" or null if no such property is found, like if the browser is IE8 or before, \""transform\"" won't be found at all)\n\t\t\t_checkPropPrefix = function(p, e) {\n\t\t\t\te = e || _tempDiv;\n\t\t\t\tvar s = e.style,\n\t\t\t\t\ta, i;\n\t\t\t\tif (s[p] !== undefined) {\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t\tp = p.charAt(0).toUpperCase() + p.substr(1);\n\t\t\t\ta = [\""O\"",\""Moz\"",\""ms\"",\""Ms\"",\""Webkit\""];\n\t\t\t\ti = 5;\n\t\t\t\twhile (--i > -1 && s[a[i]+p] === undefined) { }\n\t\t\t\tif (i >= 0) {\n\t\t\t\t\t_prefix = (i === 3) ? \""ms\"" : a[i];\n\t\t\t\t\t_prefixCSS = \""-\"" + _prefix.toLowerCase() + \""-\"";\n\t\t\t\t\treturn _prefix + p;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\n\t\t\t_computedStyleScope = (typeof(window) !== \""undefined\"" ? window : _doc.defaultView || {getComputedStyle:function() {}}),\n\t\t\t_getComputedStyle = function(e) {\n\t\t\t\treturn _computedStyleScope.getComputedStyle(e); //to avoid errors in Microsoft Edge, we need to call getComputedStyle() from a specific scope, typically window.\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Returns the css style for a particular property of an element. For example, to get whatever the current \""left\"" css value for an element with an ID of \""myElement\"", you could do:\n\t\t\t * var currentLeft = CSSPlugin.getStyle( document.getElementById(\""myElement\""), \""left\"");\n\t\t\t *\n\t\t\t * @param {!Object} t Target element whose style property you want to query\n\t\t\t * @param {!string} p Property name (like \""left\"" or \""top\"" or \""marginTop\"", etc.)\n\t\t\t * @param {Object=} cs Computed style object. This just provides a way to speed processing if you're going to get several properties on the same element in quick succession - you can reuse the result of the getComputedStyle() call.\n\t\t\t * @param {boolean=} calc If true, the value will not be read directly from the element's \""style\"" property (if it exists there), but instead the getComputedStyle() result will be used. This can be useful when you want to ensure that the browser itself is interpreting the value.\n\t\t\t * @param {string=} dflt Default value that should be returned in the place of null, \""none\"", \""auto\"" or \""auto auto\"".\n\t\t\t * @return {?string} The current property value\n\t\t\t */\n\t\t\t_getStyle = CSSPlugin.getStyle = function(t, p, cs, calc, dflt) {\n\t\t\t\tvar rv;\n\t\t\t\tif (!_supportsOpacity) if (p === \""opacity\"") { //several versions of IE don't use the standard \""opacity\"" property - they use things like filter:alpha(opacity=50), so we parse that here.\n\t\t\t\t\treturn _getIEOpacity(t);\n\t\t\t\t}\n\t\t\t\tif (!calc && t.style[p]) {\n\t\t\t\t\trv = t.style[p];\n\t\t\t\t} else if ((cs = cs || _getComputedStyle(t))) {\n\t\t\t\t\trv = cs[p] || cs.getPropertyValue(p) || cs.getPropertyValue(p.replace(_capsExp, \""-$1\"").toLowerCase());\n\t\t\t\t} else if (t.currentStyle) {\n\t\t\t\t\trv = t.currentStyle[p];\n\t\t\t\t}\n\t\t\t\treturn (dflt != null && (!rv || rv === \""none\"" || rv === \""auto\"" || rv === \""auto auto\"")) ? dflt : rv;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Pass the target element, the property name, the numeric value, and the suffix (like \""%\"", \""em\"", \""px\"", etc.) and it will spit back the equivalent pixel number.\n\t\t\t * @param {!Object} t Target element\n\t\t\t * @param {!string} p Property name (like \""left\"", \""top\"", \""marginLeft\"", etc.)\n\t\t\t * @param {!number} v Value\n\t\t\t * @param {string=} sfx Suffix (like \""px\"" or \""%\"" or \""em\"")\n\t\t\t * @param {boolean=} recurse If true, the call is a recursive one. In some browsers (like IE7/8), occasionally the value isn't accurately reported initially, but if we run the function again it will take effect.\n\t\t\t * @return {number} value in pixels\n\t\t\t */\n\t\t\t_convertToPixels = _internals.convertToPixels = function(t, p, v, sfx, recurse) {\n\t\t\t\tif (sfx === \""px\"" || (!sfx && p !== \""lineHeight\"")) { return v; }\n\t\t\t\tif (sfx === \""auto\"" || !v) { return 0; }\n\t\t\t\tvar horiz = _horizExp.test(p),\n\t\t\t\t\tnode = t,\n\t\t\t\t\tstyle = _tempDiv.style,\n\t\t\t\t\tneg = (v < 0),\n\t\t\t\t\tprecise = (v === 1),\n\t\t\t\t\tpix, cache, time;\n\t\t\t\tif (neg) {\n\t\t\t\t\tv = -v;\n\t\t\t\t}\n\t\t\t\tif (precise) {\n\t\t\t\t\tv *= 100;\n\t\t\t\t}\n\t\t\t\tif (p === \""lineHeight\"" && !sfx) { //special case of when a simple lineHeight (without a unit) is used. Set it to the value, read back the computed value, and then revert.\n\t\t\t\t\tcache = _getComputedStyle(t).lineHeight;\n\t\t\t\t\tt.style.lineHeight = v;\n\t\t\t\t\tpix = parseFloat(_getComputedStyle(t).lineHeight);\n\t\t\t\t\tt.style.lineHeight = cache;\n\t\t\t\t} else if (sfx === \""%\"" && p.indexOf(\""border\"") !== -1) {\n\t\t\t\t\tpix = (v / 100) * (horiz ? t.clientWidth : t.clientHeight);\n\t\t\t\t} else {\n\t\t\t\t\tstyle.cssText = \""border:0 solid red;position:\"" + _getStyle(t, \""position\"") + \"";line-height:0;\"";\n\t\t\t\t\tif (sfx === \""%\"" || !node.appendChild || sfx.charAt(0) === \""v\"" || sfx === \""rem\"") {\n\t\t\t\t\t\tnode = t.parentNode || _doc.body;\n\t\t\t\t\t\tif (_getStyle(node, \""display\"").indexOf(\""flex\"") !== -1) { //Edge and IE11 have a bug that causes offsetWidth to report as 0 if the container has display:flex and the child is position:relative. Switching to position: absolute solves it.\n\t\t\t\t\t\t\tstyle.position = \""absolute\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcache = node._gsCache;\n\t\t\t\t\t\ttime = TweenLite.ticker.frame;\n\t\t\t\t\t\tif (cache && horiz && cache.time === time) { //performance optimization: we record the width of elements along with the ticker frame so that we can quickly get it again on the same tick (seems relatively safe to assume it wouldn't change on the same tick)\n\t\t\t\t\t\t\treturn cache.width * v / 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle[(horiz ? \""width\"" : \""height\"")] = v + sfx;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[(horiz ? \""borderLeftWidth\"" : \""borderTopWidth\"")] = v + sfx;\n\t\t\t\t\t}\n\t\t\t\t\tnode.appendChild(_tempDiv);\n\t\t\t\t\tpix = parseFloat(_tempDiv[(horiz ? \""offsetWidth\"" : \""offsetHeight\"")]);\n\t\t\t\t\tnode.removeChild(_tempDiv);\n\t\t\t\t\tif (horiz && sfx === \""%\"" && CSSPlugin.cacheWidths !== false) {\n\t\t\t\t\t\tcache = node._gsCache = node._gsCache || {};\n\t\t\t\t\t\tcache.time = time;\n\t\t\t\t\t\tcache.width = pix / v * 100;\n\t\t\t\t\t}\n\t\t\t\t\tif (pix === 0 && !recurse) {\n\t\t\t\t\t\tpix = _convertToPixels(t, p, v, sfx, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (precise) {\n\t\t\t\t\tpix /= 100;\n\t\t\t\t}\n\t\t\t\treturn neg ? -pix : pix;\n\t\t\t},\n\t\t\t_calculateOffset = _internals.calculateOffset = function(t, p, cs) { //for figuring out \""top\"" or \""left\"" in px when it's \""auto\"". We need to factor in margin with the offsetLeft/offsetTop\n\t\t\t\tif (_getStyle(t, \""position\"", cs) !== \""absolute\"") { return 0; }\n\t\t\t\tvar dim = ((p === \""left\"") ? \""Left\"" : \""Top\""),\n\t\t\t\t\tv = _getStyle(t, \""margin\"" + dim, cs);\n\t\t\t\treturn t[\""offset\"" + dim] - (_convertToPixels(t, p, parseFloat(v), v.replace(_suffixExp, \""\"")) || 0);\n\t\t\t},\n\n\t\t\t// @private returns at object containing ALL of the style properties in camelCase and their associated values.\n\t\t\t_getAllStyles = function(t, cs) {\n\t\t\t\tvar s = {},\n\t\t\t\t\ti, tr, p;\n\t\t\t\tif ((cs = cs || _getComputedStyle(t, null))) {\n\t\t\t\t\tif ((i = cs.length)) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = cs[i];\n\t\t\t\t\t\t\tif (p.indexOf(\""-transform\"") === -1 || _transformPropCSS === p) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\""transform\"" and \""WebkitTransform\""), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\ts[p.replace(_camelExp, _camelFunc)] = cs.getPropertyValue(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { //some browsers behave differently - cs.length is always 0, so we must do a for...in loop.\n\t\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\t\tif (i.indexOf(\""Transform\"") === -1 || _transformProp === i) { //Some webkit browsers duplicate transform values, one non-prefixed and one prefixed (\""transform\"" and \""WebkitTransform\""), so we must weed out the extra one here.\n\t\t\t\t\t\t\t\ts[i] = cs[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ((cs = t.currentStyle || t.style)) {\n\t\t\t\t\tfor (i in cs) {\n\t\t\t\t\t\tif (typeof(i) === \""string\"" && s[i] === undefined) {\n\t\t\t\t\t\t\ts[i.replace(_camelExp, _camelFunc)] = cs[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!_supportsOpacity) {\n\t\t\t\t\ts.opacity = _getIEOpacity(t);\n\t\t\t\t}\n\t\t\t\ttr = _getTransform(t, cs, false);\n\t\t\t\ts.rotation = tr.rotation;\n\t\t\t\ts.skewX = tr.skewX;\n\t\t\t\ts.scaleX = tr.scaleX;\n\t\t\t\ts.scaleY = tr.scaleY;\n\t\t\t\ts.x = tr.x;\n\t\t\t\ts.y = tr.y;\n\t\t\t\tif (_supports3D) {\n\t\t\t\t\ts.z = tr.z;\n\t\t\t\t\ts.rotationX = tr.rotationX;\n\t\t\t\t\ts.rotationY = tr.rotationY;\n\t\t\t\t\ts.scaleZ = tr.scaleZ;\n\t\t\t\t}\n\t\t\t\tif (s.filters) {\n\t\t\t\t\tdelete s.filters;\n\t\t\t\t}\n\t\t\t\treturn s;\n\t\t\t},\n\n\t\t\t// @private analyzes two style objects (as returned by _getAllStyles()) and only looks for differences between them that contain tweenable values (like a number or color). It returns an object with a \""difs\"" property which refers to an object containing only those isolated properties and values for tweening, and a \""firstMPT\"" property which refers to the first MiniPropTween instance in a linked list that recorded all the starting values of the different properties so that we can revert to them at the end or beginning of the tween - we don't want the cascading to get messed up. The forceLookup parameter is an optional generic object with properties that should be forced into the results - this is necessary for className tweens that are overwriting others because imagine a scenario where a rollover/rollout adds/removes a class and the user swipes the mouse over the target SUPER fast, thus nothing actually changed yet and the subsequent comparison of the properties would indicate they match (especially when px rounding is taken into consideration), thus no tweening is necessary even though it SHOULD tween and remove those properties after the tween (otherwise the inline styles will contaminate things). See the className SpecialProp code for details.\n\t\t\t_cssDif = function(t, s1, s2, vars, forceLookup) {\n\t\t\t\tvar difs = {},\n\t\t\t\t\tstyle = t.style,\n\t\t\t\t\tval, p, mpt;\n\t\t\t\tfor (p in s2) {\n\t\t\t\t\tif (p !== \""cssText\"") if (p !== \""length\"") if (isNaN(p)) if (s1[p] !== (val = s2[p]) || (forceLookup && forceLookup[p])) if (p.indexOf(\""Origin\"") === -1) if (typeof(val) === \""number\"" || typeof(val) === \""string\"") {\n\t\t\t\t\t\tdifs[p] = (val === \""auto\"" && (p === \""left\"" || p === \""top\"")) ? _calculateOffset(t, p) : ((val === \""\"" || val === \""auto\"" || val === \""none\"") && typeof(s1[p]) === \""string\"" && s1[p].replace(_NaNExp, \""\"") !== \""\"") ? 0 : val; //if the ending value is defaulting (\""\"" or \""auto\""), we check the starting value and if it can be parsed into a number (a string which could have a suffix too, like 700px), then we swap in 0 for \""\"" or \""auto\"" so that things actually tween.\n\t\t\t\t\t\tif (style[p] !== undefined) { //for className tweens, we must remember which properties already existed inline - the ones that didn't should be removed when the tween isn't in progress because they were only introduced to facilitate the transition between classes.\n\t\t\t\t\t\t\tmpt = new MiniPropTween(style, p, style[p], mpt);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (vars) {\n\t\t\t\t\tfor (p in vars) { //copy properties (except className)\n\t\t\t\t\t\tif (p !== \""className\"") {\n\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {difs:difs, firstMPT:mpt};\n\t\t\t},\n\t\t\t_dimensions = {width:[\""Left\"",\""Right\""], height:[\""Top\"",\""Bottom\""]},\n\t\t\t_margins = [\""marginLeft\"",\""marginRight\"",\""marginTop\"",\""marginBottom\""],\n\n\t\t\t/**\n\t\t\t * @private Gets the width or height of an element\n\t\t\t * @param {!Object} t Target element\n\t\t\t * @param {!string} p Property name (\""width\"" or \""height\"")\n\t\t\t * @param {Object=} cs Computed style object (if one exists). Just a speed optimization.\n\t\t\t * @return {number} Dimension (in pixels)\n\t\t\t */\n\t\t\t_getDimension = function(t, p, cs) {\n\t\t\t\tif ((t.nodeName + \""\"").toLowerCase() === \""svg\"") { //Chrome no longer supports offsetWidth/offsetHeight on SVG elements.\n\t\t\t\t\treturn (cs || _getComputedStyle(t))[p] || 0;\n\t\t\t\t} else if (t.getCTM && _isSVG(t)) {\n\t\t\t\t\treturn t.getBBox()[p] || 0;\n\t\t\t\t}\n\t\t\t\tvar v = parseFloat((p === \""width\"") ? t.offsetWidth : t.offsetHeight),\n\t\t\t\t\ta = _dimensions[p],\n\t\t\t\t\ti = a.length;\n\t\t\t\tcs = cs || _getComputedStyle(t, null);\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tv -= parseFloat( _getStyle(t, \""padding\"" + a[i], cs, true) ) || 0;\n\t\t\t\t\tv -= parseFloat( _getStyle(t, \""border\"" + a[i] + \""Width\"", cs, true) ) || 0;\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t},\n\n\t\t\t// @private Parses position-related complex strings like \""top left\"" or \""50px 10px\"" or \""70% 20%\"", etc. which are used for things like transformOrigin or backgroundPosition. Optionally decorates a supplied object (recObj) with the following properties: \""ox\"" (offsetX), \""oy\"" (offsetY), \""oxp\"" (if true, \""ox\"" is a percentage not a pixel value), and \""oxy\"" (if true, \""oy\"" is a percentage not a pixel value)\n\t\t\t_parsePosition = function(v, recObj) {\n\t\t\t\tif (v === \""contain\"" || v === \""auto\"" || v === \""auto auto\"") { //note: Firefox uses \""auto auto\"" as default whereas Chrome uses \""auto\"".\n\t\t\t\t\treturn v + \"" \"";\n\t\t\t\t}\n\t\t\t\tif (v == null || v === \""\"") {\n\t\t\t\t\tv = \""0 0\"";\n\t\t\t\t}\n\t\t\t\tvar a = v.split(\"" \""),\n\t\t\t\t\tx = (v.indexOf(\""left\"") !== -1) ? \""0%\"" : (v.indexOf(\""right\"") !== -1) ? \""100%\"" : a[0],\n\t\t\t\t\ty = (v.indexOf(\""top\"") !== -1) ? \""0%\"" : (v.indexOf(\""bottom\"") !== -1) ? \""100%\"" : a[1],\n\t\t\t\t\ti;\n\t\t\t\tif (a.length > 3 && !recObj) { //multiple positions\n\t\t\t\t\ta = v.split(\"", \"").join(\"",\"").split(\"",\"");\n\t\t\t\t\tv = [];\n\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\tv.push(_parsePosition(a[i]));\n\t\t\t\t\t}\n\t\t\t\t\treturn v.join(\"",\"");\n\t\t\t\t}\n\t\t\t\tif (y == null) {\n\t\t\t\t\ty = (x === \""center\"") ? \""50%\"" : \""0\"";\n\t\t\t\t} else if (y === \""center\"") {\n\t\t\t\t\ty = \""50%\"";\n\t\t\t\t}\n\t\t\t\tif (x === \""center\"" || (isNaN(parseFloat(x)) && (x + \""\"").indexOf(\""=\"") === -1)) { //remember, the user could flip-flop the values and say \""bottom center\"" or \""center bottom\"", etc. \""center\"" is ambiguous because it could be used to describe horizontal or vertical, hence the isNaN(). If there's an \""=\"" sign in the value, it's relative.\n\t\t\t\t\tx = \""50%\"";\n\t\t\t\t}\n\t\t\t\tv = x + \"" \"" + y + ((a.length > 2) ? \"" \"" + a[2] : \""\"");\n\t\t\t\tif (recObj) {\n\t\t\t\t\trecObj.oxp = (x.indexOf(\""%\"") !== -1);\n\t\t\t\t\trecObj.oyp = (y.indexOf(\""%\"") !== -1);\n\t\t\t\t\trecObj.oxr = (x.charAt(1) === \""=\"");\n\t\t\t\t\trecObj.oyr = (y.charAt(1) === \""=\"");\n\t\t\t\t\trecObj.ox = parseFloat(x.replace(_NaNExp, \""\""));\n\t\t\t\t\trecObj.oy = parseFloat(y.replace(_NaNExp, \""\""));\n\t\t\t\t\trecObj.v = v;\n\t\t\t\t}\n\t\t\t\treturn recObj || v;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Takes an ending value (typically a string, but can be a number) and a starting value and returns the change between the two, looking for relative value indicators like += and -= and it also ignores suffixes (but make sure the ending value starts with a number or +=/-= and that the starting value is a NUMBER!)\n\t\t\t * @param {(number|string)} e End value which is typically a string, but could be a number\n\t\t\t * @param {(number|string)} b Beginning value which is typically a string but could be a number\n\t\t\t * @return {number} Amount of change between the beginning and ending values (relative values that have a \""+=\"" or \""-=\"" are recognized)\n\t\t\t */\n\t\t\t_parseChange = function(e, b) {\n\t\t\t\tif (typeof(e) === \""function\"") {\n\t\t\t\t\te = e(_index, _target);\n\t\t\t\t}\n\t\t\t\treturn (typeof(e) === \""string\"" && e.charAt(1) === \""=\"") ? parseInt(e.charAt(0) + \""1\"", 10) * parseFloat(e.substr(2)) : (parseFloat(e) - parseFloat(b)) || 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Takes a value and a default number, checks if the value is relative, null, or numeric and spits back a normalized number accordingly. Primarily used in the _parseTransform() function.\n\t\t\t * @param {Object} v Value to be parsed\n\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \""+=\"" or \""-=\"" is found in the first parameter)\n\t\t\t * @return {number} Parsed value\n\t\t\t */\n\t\t\t_parseVal = function(v, d) {\n\t\t\t\tif (typeof(v) === \""function\"") {\n\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t}\n\t\t\t\tvar isRelative = (typeof(v) === \""string\"" && v.charAt(1) === \""=\"");\n\t\t\t\tif (typeof(v) === \""string\"" && v.charAt(v.length - 2) === \""v\"") { //convert vw and vh into px-equivalents.\n\t\t\t\t\tv = (isRelative ? v.substr(0, 2) : 0) + (window[\""inner\"" + ((v.substr(-2) === \""vh\"") ? \""Height\"" : \""Width\"")] * (parseFloat(isRelative ? v.substr(2) : v) / 100));\n\t\t\t\t}\n\t\t\t\treturn (v == null) ? d : isRelative ? parseInt(v.charAt(0) + \""1\"", 10) * parseFloat(v.substr(2)) + d : parseFloat(v) || 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Translates strings like \""40deg\"" or \""40\"" or 40rad\"" or \""+=40deg\"" or \""270_short\"" or \""-90_cw\"" or \""+=45_ccw\"" to a numeric radian angle. Of course a starting/default value must be fed in too so that relative values can be calculated properly.\n\t\t\t * @param {Object} v Value to be parsed\n\t\t\t * @param {!number} d Default value (which is also used for relative calculations if \""+=\"" or \""-=\"" is found in the first parameter)\n\t\t\t * @param {string=} p property name for directionalEnd (optional - only used when the parsed value is directional (\""_short\"", \""_cw\"", or \""_ccw\"" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation). Property name would be \""rotation\"", \""rotationX\"", or \""rotationY\""\n\t\t\t * @param {Object=} directionalEnd An object that will store the raw end values for directional angles (\""_short\"", \""_cw\"", or \""_ccw\"" suffix). We need a way to store the uncompensated value so that at the end of the tween, we set it to exactly what was requested with no directional compensation.\n\t\t\t * @return {number} parsed angle in radians\n\t\t\t */\n\t\t\t_parseAngle = function(v, d, p, directionalEnd) {\n\t\t\t\tvar min = 0.000001,\n\t\t\t\t\tcap, split, dif, result, isRelative;\n\t\t\t\tif (typeof(v) === \""function\"") {\n\t\t\t\t\tv = v(_index, _target);\n\t\t\t\t}\n\t\t\t\tif (v == null) {\n\t\t\t\t\tresult = d;\n\t\t\t\t} else if (typeof(v) === \""number\"") {\n\t\t\t\t\tresult = v;\n\t\t\t\t} else {\n\t\t\t\t\tcap = 360;\n\t\t\t\t\tsplit = v.split(\""_\"");\n\t\t\t\t\tisRelative = (v.charAt(1) === \""=\"");\n\t\t\t\t\tdif = (isRelative ? parseInt(v.charAt(0) + \""1\"", 10) * parseFloat(split[0].substr(2)) : parseFloat(split[0])) * ((v.indexOf(\""rad\"") === -1) ? 1 : _RAD2DEG) - (isRelative ? 0 : d);\n\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\tif (directionalEnd) {\n\t\t\t\t\t\t\tdirectionalEnd[p] = d + dif;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\""short\"") !== -1) {\n\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\""_cw\"") !== -1 && dif < 0) {\n\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t} else if (v.indexOf(\""ccw\"") !== -1 && dif > 0) {\n\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresult = d + dif;\n\t\t\t\t}\n\t\t\t\tif (result < min && result > -min) {\n\t\t\t\t\tresult = 0;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t_colorLookup = {aqua:[0,255,255],\n\t\t\t\tlime:[0,255,0],\n\t\t\t\tsilver:[192,192,192],\n\t\t\t\tblack:[0,0,0],\n\t\t\t\tmaroon:[128,0,0],\n\t\t\t\tteal:[0,128,128],\n\t\t\t\tblue:[0,0,255],\n\t\t\t\tnavy:[0,0,128],\n\t\t\t\twhite:[255,255,255],\n\t\t\t\tfuchsia:[255,0,255],\n\t\t\t\tolive:[128,128,0],\n\t\t\t\tyellow:[255,255,0],\n\t\t\t\torange:[255,165,0],\n\t\t\t\tgray:[128,128,128],\n\t\t\t\tpurple:[128,0,128],\n\t\t\t\tgreen:[0,128,0],\n\t\t\t\tred:[255,0,0],\n\t\t\t\tpink:[255,192,203],\n\t\t\t\tcyan:[0,255,255],\n\t\t\t\ttransparent:[255,255,255,0]},\n\n\t\t\t_hue = function(h, m1, m2) {\n\t\t\t\th = (h < 0) ? h + 1 : (h > 1) ? h - 1 : h;\n\t\t\t\treturn ((((h * 6 < 1) ? m1 + (m2 - m1) * h * 6 : (h < 0.5) ? m2 : (h * 3 < 2) ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * 255) + 0.5) | 0;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Parses a color (like #9F0, #FF9900, rgb(255,51,153) or hsl(108, 50%, 10%)) into an array with 3 elements for red, green, and blue or if toHSL parameter is true, it will populate the array with hue, saturation, and lightness values. If a relative value is found in an hsl() or hsla() string, it will preserve those relative prefixes and all the values in the array will be strings instead of numbers (in all other cases it will be populated with numbers).\n\t\t\t * @param {(string|number)} v The value the should be parsed which could be a string like #9F0 or rgb(255,102,51) or rgba(255,0,0,0.5) or it could be a number like 0xFF00CC or even a named color like red, blue, purple, etc.\n\t\t\t * @param {(boolean)} toHSL If true, an hsl() or hsla() value will be returned instead of rgb() or rgba()\n\t\t\t * @return {Array.<number>} An array containing red, green, and blue (and optionally alpha) in that order, or if the toHSL parameter was true, the array will contain hue, saturation and lightness (and optionally alpha) in that order. Always numbers unless there's a relative prefix found in an hsl() or hsla() string and toHSL is true.\n\t\t\t */\n\t\t\t_parseColor = CSSPlugin.parseColor = function(v, toHSL) {\n\t\t\t\tvar a, r, g, b, h, s, l, max, min, d, wasHSL;\n\t\t\t\tif (!v) {\n\t\t\t\t\ta = _colorLookup.black;\n\t\t\t\t} else if (typeof(v) === \""number\"") {\n\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t} else {\n\t\t\t\t\tif (v.charAt(v.length - 1) === \"",\"") { //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\""2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\"" - in this example \""blue,\"" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n\t\t\t\t\t\tv = v.substr(0, v.length - 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (_colorLookup[v]) {\n\t\t\t\t\t\ta = _colorLookup[v];\n\t\t\t\t\t} else if (v.charAt(0) === \""#\"") {\n\t\t\t\t\t\tif (v.length === 4) { //for shorthand like #9F0\n\t\t\t\t\t\t\tr = v.charAt(1);\n\t\t\t\t\t\t\tg = v.charAt(2);\n\t\t\t\t\t\t\tb = v.charAt(3);\n\t\t\t\t\t\t\tv = \""#\"" + r + r + g + g + b + b;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tv = parseInt(v.substr(1), 16);\n\t\t\t\t\t\ta = [v >> 16, (v >> 8) & 255, v & 255];\n\t\t\t\t\t} else if (v.substr(0, 3) === \""hsl\"") {\n\t\t\t\t\t\ta = wasHSL = v.match(_numExp);\n\t\t\t\t\t\tif (!toHSL) {\n\t\t\t\t\t\t\th = (Number(a[0]) % 360) / 360;\n\t\t\t\t\t\t\ts = Number(a[1]) / 100;\n\t\t\t\t\t\t\tl = Number(a[2]) / 100;\n\t\t\t\t\t\t\tg = (l <= 0.5) ? l * (s + 1) : l + s - l * s;\n\t\t\t\t\t\t\tr = l * 2 - g;\n\t\t\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ta[0] = _hue(h + 1 / 3, r, g);\n\t\t\t\t\t\t\ta[1] = _hue(h, r, g);\n\t\t\t\t\t\t\ta[2] = _hue(h - 1 / 3, r, g);\n\t\t\t\t\t\t} else if (v.indexOf(\""=\"") !== -1) { //if relative values are found, just return the raw strings with the relative prefixes in place.\n\t\t\t\t\t\t\treturn v.match(_relNumExp);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = v.match(_numExp) || _colorLookup.transparent;\n\t\t\t\t\t}\n\t\t\t\t\ta[0] = Number(a[0]);\n\t\t\t\t\ta[1] = Number(a[1]);\n\t\t\t\t\ta[2] = Number(a[2]);\n\t\t\t\t\tif (a.length > 3) {\n\t\t\t\t\t\ta[3] = Number(a[3]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (toHSL && !wasHSL) {\n\t\t\t\t\tr = a[0] / 255;\n\t\t\t\t\tg = a[1] / 255;\n\t\t\t\t\tb = a[2] / 255;\n\t\t\t\t\tmax = Math.max(r, g, b);\n\t\t\t\t\tmin = Math.min(r, g, b);\n\t\t\t\t\tl = (max + min) / 2;\n\t\t\t\t\tif (max === min) {\n\t\t\t\t\t\th = s = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\td = max - min;\n\t\t\t\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\t\t\t\th = (max === r) ? (g - b) / d + (g < b ? 6 : 0) : (max === g) ? (b - r) / d + 2 : (r - g) / d + 4;\n\t\t\t\t\t\th *= 60;\n\t\t\t\t\t}\n\t\t\t\t\ta[0] = (h + 0.5) | 0;\n\t\t\t\t\ta[1] = (s * 100 + 0.5) | 0;\n\t\t\t\t\ta[2] = (l * 100 + 0.5) | 0;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t_formatColors = function(s, toHSL) {\n\t\t\t\tvar colors = s.match(_colorExp) || [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\tparsed = \""\"",\n\t\t\t\t\ti, color, temp;\n\t\t\t\tif (!colors.length) {\n\t\t\t\t\treturn s;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i < colors.length; i++) {\n\t\t\t\t\tcolor = colors[i];\n\t\t\t\t\ttemp = s.substr(charIndex, s.indexOf(color, charIndex)-charIndex);\n\t\t\t\t\tcharIndex += temp.length + color.length;\n\t\t\t\t\tcolor = _parseColor(color, toHSL);\n\t\t\t\t\tif (color.length === 3) {\n\t\t\t\t\t\tcolor.push(1);\n\t\t\t\t\t}\n\t\t\t\t\tparsed += temp + (toHSL ? \""hsla(\"" + color[0] + \"",\"" + color[1] + \""%,\"" + color[2] + \""%,\"" + color[3] : \""rgba(\"" + color.join(\"",\"")) + \"")\"";\n\t\t\t\t}\n\t\t\t\treturn parsed + s.substr(charIndex);\n\t\t\t},\n\t\t\t_colorExp = \""(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\""; //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.\n\n\t\tfor (p in _colorLookup) {\n\t\t\t_colorExp += \""|\"" + p + \""\\\\b\"";\n\t\t}\n\t\t_colorExp = new RegExp(_colorExp+\"")\"", \""gi\"");\n\n\t\tCSSPlugin.colorStringFilter = function(a) {\n\t\t\tvar combined = a[0] + \"" \"" + a[1],\n\t\t\t\ttoHSL;\n\t\t\tif (_colorExp.test(combined)) {\n\t\t\t\ttoHSL = (combined.indexOf(\""hsl(\"") !== -1 || combined.indexOf(\""hsla(\"") !== -1);\n\t\t\t\ta[0] = _formatColors(a[0], toHSL);\n\t\t\t\ta[1] = _formatColors(a[1], toHSL);\n\t\t\t}\n\t\t\t_colorExp.lastIndex = 0;\n\t\t};\n\n\t\tif (!TweenLite.defaultStringFilter) {\n\t\t\tTweenLite.defaultStringFilter = CSSPlugin.colorStringFilter;\n\t\t}\n\n\t\t/**\n\t\t * @private Returns a formatter function that handles taking a string (or number in some cases) and returning a consistently formatted one in terms of delimiters, quantity of values, etc. For example, we may get boxShadow values defined as \""0px red\"" or \""0px 0px 10px rgb(255,0,0)\"" or \""0px 0px 20px 20px #F00\"" and we need to ensure that what we get back is described with 4 numbers and a color. This allows us to feed it into the _parseComplex() method and split the values up appropriately. The neat thing about this _getFormatter() function is that the dflt defines a pattern as well as a default, so for example, _getFormatter(\""0px 0px 0px 0px #777\"", true) not only sets the default as 0px for all distances and #777 for the color, but also sets the pattern such that 4 numbers and a color will always get returned.\n\t\t * @param {!string} dflt The default value and pattern to follow. So \""0px 0px 0px 0px #777\"" will ensure that 4 numbers and a color will always get returned.\n\t\t * @param {boolean=} clr If true, the values should be searched for color-related data. For example, boxShadow values typically contain a color whereas borderRadius don't.\n\t\t * @param {boolean=} collapsible If true, the value is a top/left/right/bottom style one that acts like margin or padding, where if only one value is received, it's used for all 4; if 2 are received, the first is duplicated for 3rd (bottom) and the 2nd is duplicated for the 4th spot (left), etc.\n\t\t * @return {Function} formatter function\n\t\t */\n\t\tvar _getFormatter = function(dflt, clr, collapsible, multi) {\n\t\t\t\tif (dflt == null) {\n\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t}\n\t\t\t\tvar dColor = clr ? (dflt.match(_colorExp) || [\""\""])[0] : \""\"",\n\t\t\t\t\tdVals = dflt.split(dColor).join(\""\"").match(_valuesExp) || [],\n\t\t\t\t\tpfx = dflt.substr(0, dflt.indexOf(dVals[0])),\n\t\t\t\t\tsfx = (dflt.charAt(dflt.length - 1) === \"")\"") ? \"")\"" : \""\"",\n\t\t\t\t\tdelim = (dflt.indexOf(\"" \"") !== -1) ? \"" \"" : \"",\"",\n\t\t\t\t\tnumVals = dVals.length,\n\t\t\t\t\tdSfx = (numVals > 0) ? dVals[0].replace(_numExp, \""\"") : \""\"",\n\t\t\t\t\tformatter;\n\t\t\t\tif (!numVals) {\n\t\t\t\t\treturn function(v) {return v;};\n\t\t\t\t}\n\t\t\t\tif (clr) {\n\t\t\t\t\tformatter = function(v) {\n\t\t\t\t\t\tvar color, vals, i, a;\n\t\t\t\t\t\tif (typeof(v) === \""number\"") {\n\t\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \""|\"").split(\""|\"");\n\t\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn a.join(\"",\"");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolor = (v.match(_colorExp) || [dColor])[0];\n\t\t\t\t\t\tvals = v.split(color).join(\""\"").match(_valuesExp) || [];\n\t\t\t\t\t\ti = vals.length;\n\t\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn pfx + vals.join(delim) + delim + color + sfx + (v.indexOf(\""inset\"") !== -1 ? \"" inset\"" : \""\"");\n\t\t\t\t\t};\n\t\t\t\t\treturn formatter;\n\n\t\t\t\t}\n\t\t\t\tformatter = function(v) {\n\t\t\t\t\tvar vals, a, i;\n\t\t\t\t\tif (typeof(v) === \""number\"") {\n\t\t\t\t\t\tv += dSfx;\n\t\t\t\t\t} else if (multi && _commasOutsideParenExp.test(v)) {\n\t\t\t\t\t\ta = v.replace(_commasOutsideParenExp, \""|\"").split(\""|\"");\n\t\t\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\t\t\ta[i] = formatter(a[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn a.join(\"",\"");\n\t\t\t\t\t}\n\t\t\t\t\tvals = v.match(delim === \"",\"" ? _valuesExp : _valuesExpWithCommas) || [];\n\t\t\t\t\ti = vals.length;\n\t\t\t\t\tif (numVals > i--) {\n\t\t\t\t\t\twhile (++i < numVals) {\n\t\t\t\t\t\t\tvals[i] = collapsible ? vals[(((i - 1) / 2) | 0)] : dVals[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn ((pfx && v !== \""none\"") ? v.substr(0, v.indexOf(vals[0])) || pfx : pfx) + vals.join(delim) + sfx; //note: prefix might be different, like for clipPath it could start with inset( or polygon(\n\t\t\t\t};\n\t\t\t\treturn formatter;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private returns a formatter function that's used for edge-related values like marginTop, marginLeft, paddingBottom, paddingRight, etc. Just pass a comma-delimited list of property names related to the edges.\n\t\t\t * @param {!string} props a comma-delimited list of property names in order from top to left, like \""marginTop,marginRight,marginBottom,marginLeft\""\n\t\t\t * @return {Function} a formatter function\n\t\t\t */\n\t\t\t_getEdgeParser = function(props) {\n\t\t\t\tprops = props.split(\"",\"");\n\t\t\t\treturn function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\tvar a = (e + \""\"").split(\"" \""),\n\t\t\t\t\t\ti;\n\t\t\t\t\tvars = {};\n\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\tvars[props[i]] = a[i] = a[i] || a[(((i - 1) / 2) >> 0)];\n\t\t\t\t\t}\n\t\t\t\t\treturn cssp.parse(t, vars, pt, plugin);\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t// @private used when other plugins must tween values first, like BezierPlugin or ThrowPropsPlugin, etc. That plugin's setRatio() gets called first so that the values are updated, and then we loop through the MiniPropTweens which handle copying the values into their appropriate slots so that they can then be applied correctly in the main CSSPlugin setRatio() method. Remember, we typically create a proxy object that has a bunch of uniquely-named properties that we feed to the sub-plugin and it does its magic normally, and then we must interpret those values and apply them to the css because often numbers must get combined/concatenated, suffixes added, etc. to work with css, like boxShadow could have 4 values plus a color.\n\t\t\t_setPluginRatio = _internals._setPluginRatio = function(v) {\n\t\t\t\tthis.plugin.setRatio(v);\n\t\t\t\tvar d = this.data,\n\t\t\t\t\tproxy = d.proxy,\n\t\t\t\t\tmpt = d.firstMPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval, pt, i, str, p;\n\t\t\t\twhile (mpt) {\n\t\t\t\t\tval = proxy[mpt.v];\n\t\t\t\t\tif (mpt.r) {\n\t\t\t\t\t\tval = mpt.r(val);\n\t\t\t\t\t} else if (val < min && val > -min) {\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tmpt.t[mpt.p] = val;\n\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t}\n\t\t\t\tif (d.autoRotate) {\n\t\t\t\t\td.autoRotate.rotation = d.mod ? d.mod.call(this._tween, proxy.rotation, this.t, this._tween) : proxy.rotation; //special case for ModifyPlugin to hook into an auto-rotating bezier\n\t\t\t\t}\n\t\t\t\t//at the end, we must set the CSSPropTween's \""e\"" (end) value dynamically here because that's what is used in the final setRatio() method. Same for \""b\"" at the beginning.\n\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\tmpt = d.firstMPT;\n\t\t\t\t\tp = (v === 1) ? \""e\"" : \""b\"";\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tpt = mpt.t;\n\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\tpt[p] = pt.s + pt.xs0;\n\t\t\t\t\t\t} else if (pt.type === 1) {\n\t\t\t\t\t\t\tstr = pt.xs0 + pt.s + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\""xn\""+i] + pt[\""xs\""+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt[p] = str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private @constructor Used by a few SpecialProps to hold important values for proxies. For example, _parseToProxy() creates a MiniPropTween instance for each property that must get tweened on the proxy, and we record the original property name as well as the unique one we create for the proxy, plus whether or not the value needs to be rounded plus the original value.\n\t\t\t * @param {!Object} t target object whose property we're tweening (often a CSSPropTween)\n\t\t\t * @param {!string} p property name\n\t\t\t * @param {(number|string|object)} v value\n\t\t\t * @param {MiniPropTween=} next next MiniPropTween in the linked list\n\t\t\t * @param {boolean=} r if true, the tweened value should be rounded to the nearest integer\n\t\t\t */\n\t\t\tMiniPropTween = function(t, p, v, next, r) {\n\t\t\t\tthis.t = t;\n\t\t\t\tthis.p = p;\n\t\t\t\tthis.v = v;\n\t\t\t\tthis.r = r;\n\t\t\t\tif (next) {\n\t\t\t\t\tnext._prev = this;\n\t\t\t\t\tthis._next = next;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private Most other plugins (like BezierPlugin and ThrowPropsPlugin and others) can only tween numeric values, but CSSPlugin must accommodate special values that have a bunch of extra data (like a suffix or strings between numeric values, etc.). For example, boxShadow has values like \""10px 10px 20px 30px rgb(255,0,0)\"" which would utterly confuse other plugins. This method allows us to split that data apart and grab only the numeric data and attach it to uniquely-named properties of a generic proxy object ({}) so that we can feed that to virtually any plugin to have the numbers tweened. However, we must also keep track of which properties from the proxy go with which CSSPropTween values and instances. So we create a linked list of MiniPropTweens. Each one records a target (the original CSSPropTween), property (like \""s\"" or \""xn1\"" or \""xn2\"") that we're tweening and the unique property name that was used for the proxy (like \""boxShadow_xn1\"" and \""boxShadow_xn2\"") and whether or not they need to be rounded. That way, in the _setPluginRatio() method we can simply copy the values over from the proxy to the CSSPropTween instance(s). Then, when the main CSSPlugin setRatio() method runs and applies the CSSPropTween values accordingly, they're updated nicely. So the external plugin tweens the numbers, _setPluginRatio() copies them over, and setRatio() acts normally, applying css-specific values to the element.\n\t\t\t * This method returns an object that has the following properties:\n\t\t\t *  - proxy: a generic object containing the starting values for all the properties that will be tweened by the external plugin.  This is what we feed to the external _onInitTween() as the target\n\t\t\t *  - end: a generic object containing the ending values for all the properties that will be tweened by the external plugin. This is what we feed to the external plugin's _onInitTween() as the destination values\n\t\t\t *  - firstMPT: the first MiniPropTween in the linked list\n\t\t\t *  - pt: the first CSSPropTween in the linked list that was created when parsing. If shallow is true, this linked list will NOT attach to the one passed into the _parseToProxy() as the \""pt\"" (4th) parameter.\n\t\t\t * @param {!Object} t target object to be tweened\n\t\t\t * @param {!(Object|string)} vars the object containing the information about the tweening values (typically the end/destination values) that should be parsed\n\t\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance\n\t\t\t * @param {CSSPropTween=} pt the next CSSPropTween in the linked list\n\t\t\t * @param {TweenPlugin=} plugin the external TweenPlugin instance that will be handling tweening the numeric values\n\t\t\t * @param {boolean=} shallow if true, the resulting linked list from the parse will NOT be attached to the CSSPropTween that was passed in as the \""pt\"" (4th) parameter.\n\t\t\t * @return An object containing the following properties: proxy, end, firstMPT, and pt (see above for descriptions)\n\t\t\t */\n\t\t\t_parseToProxy = _internals._parseToProxy = function(t, vars, cssp, pt, plugin, shallow) {\n\t\t\t\tvar bpt = pt,\n\t\t\t\t\tstart = {},\n\t\t\t\t\tend = {},\n\t\t\t\t\ttransform = cssp._transform,\n\t\t\t\t\toldForce = _forcePT,\n\t\t\t\t\ti, p, xp, mpt, firstPT;\n\t\t\t\tcssp._transform = null;\n\t\t\t\t_forcePT = vars;\n\t\t\t\tpt = firstPT = cssp.parse(t, vars, pt, plugin);\n\t\t\t\t_forcePT = oldForce;\n\t\t\t\t//break off from the linked list so the new ones are isolated.\n\t\t\t\tif (shallow) {\n\t\t\t\t\tcssp._transform = transform;\n\t\t\t\t\tif (bpt) {\n\t\t\t\t\t\tbpt._prev = null;\n\t\t\t\t\t\tif (bpt._prev) {\n\t\t\t\t\t\t\tbpt._prev._next = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (pt && pt !== bpt) {\n\t\t\t\t\tif (pt.type <= 1) {\n\t\t\t\t\t\tp = pt.p;\n\t\t\t\t\t\tend[p] = pt.s + pt.c;\n\t\t\t\t\t\tstart[p] = pt.s;\n\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, \""s\"", p, mpt, pt.r);\n\t\t\t\t\t\t\tpt.c = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pt.type === 1) {\n\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\twhile (--i > 0) {\n\t\t\t\t\t\t\t\txp = \""xn\"" + i;\n\t\t\t\t\t\t\t\tp = pt.p + \""_\"" + xp;\n\t\t\t\t\t\t\t\tend[p] = pt.data[xp];\n\t\t\t\t\t\t\t\tstart[p] = pt[xp];\n\t\t\t\t\t\t\t\tif (!shallow) {\n\t\t\t\t\t\t\t\t\tmpt = new MiniPropTween(pt, xp, p, mpt, pt.rxp[xp]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t\treturn {proxy:start, end:end, firstMPT:mpt, pt:firstPT};\n\t\t\t},\n\n\n\n\t\t\t/**\n\t\t\t * @constructor Each property that is tweened has at least one CSSPropTween associated with it. These instances store important information like the target, property, starting value, amount of change, etc. They can also optionally have a number of \""extra\"" strings and numeric values named xs1, xn1, xs2, xn2, xs3, xn3, etc. where \""s\"" indicates string and \""n\"" indicates number. These can be pieced together in a complex-value tween (type:1) that has alternating types of data like a string, number, string, number, etc. For example, boxShadow could be \""5px 5px 8px rgb(102, 102, 51)\"". In that value, there are 6 numbers that may need to tween and then pieced back together into a string again with spaces, suffixes, etc. xs0 is special in that it stores the suffix for standard (type:0) tweens, -OR- the first string (prefix) in a complex-value (type:1) CSSPropTween -OR- it can be the non-tweening value in a type:-1 CSSPropTween. We do this to conserve memory.\n\t\t\t * CSSPropTweens have the following optional properties as well (not defined through the constructor):\n\t\t\t *  - l: Length in terms of the number of extra properties that the CSSPropTween has (default: 0). For example, for a boxShadow we may need to tween 5 numbers in which case l would be 5; Keep in mind that the start/end values for the first number that's tweened are always stored in the s and c properties to conserve memory. All additional values thereafter are stored in xn1, xn2, etc.\n\t\t\t *  - xfirst: The first instance of any sub-CSSPropTweens that are tweening properties of this instance. For example, we may split up a boxShadow tween so that there's a main CSSPropTween of type:1 that has various xs* and xn* values associated with the h-shadow, v-shadow, blur, color, etc. Then we spawn a CSSPropTween for each of those that has a higher priority and runs BEFORE the main CSSPropTween so that the values are all set by the time it needs to re-assemble them. The xfirst gives us an easy way to identify the first one in that chain which typically ends at the main one (because they're all prepende to the linked list)\n\t\t\t *  - plugin: The TweenPlugin instance that will handle the tweening of any complex values. For example, sometimes we don't want to use normal subtweens (like xfirst refers to) to tween the values - we might want ThrowPropsPlugin or BezierPlugin some other plugin to do the actual tweening, so we create a plugin instance and store a reference here. We need this reference so that if we get a request to round values or disable a tween, we can pass along that request.\n\t\t\t *  - data: Arbitrary data that needs to be stored with the CSSPropTween. Typically if we're going to have a plugin handle the tweening of a complex-value tween, we create a generic object that stores the END values that we're tweening to and the CSSPropTween's xs1, xs2, etc. have the starting values. We store that object as data. That way, we can simply pass that object to the plugin and use the CSSPropTween as the target.\n\t\t\t *  - setRatio: Only used for type:2 tweens that require custom functionality. In this case, we call the CSSPropTween's setRatio() method and pass the ratio each time the tween updates. This isn't quite as efficient as doing things directly in the CSSPlugin's setRatio() method, but it's very convenient and flexible.\n\t\t\t * @param {!Object} t Target object whose property will be tweened. Often a DOM element, but not always. It could be anything.\n\t\t\t * @param {string} p Property to tween (name). For example, to tween element.width, p would be \""width\"".\n\t\t\t * @param {number} s Starting numeric value\n\t\t\t * @param {number} c Change in numeric value over the course of the entire tween. For example, if element.width starts at 5 and should end at 100, c would be 95.\n\t\t\t * @param {CSSPropTween=} next The next CSSPropTween in the linked list. If one is defined, we will define its _prev as the new instance, and the new instance's _next will be pointed at it.\n\t\t\t * @param {number=} type The type of CSSPropTween where -1 = a non-tweening value, 0 = a standard simple tween, 1 = a complex value (like one that has multiple numbers in a comma- or space-delimited string like border:\""1px solid red\""), and 2 = one that uses a custom setRatio function that does all of the work of applying the values on each update.\n\t\t\t * @param {string=} n Name of the property that should be used for overwriting purposes which is typically the same as p but not always. For example, we may need to create a subtween for the 2nd part of a \""clip:rect(...)\"" tween in which case \""p\"" might be xs1 but \""n\"" is still \""clip\""\n\t\t\t * @param {boolean=} r If true, the value(s) should be rounded\n\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority CSSPropTweens will be updated before lower priority ones. The default priority is 0.\n\t\t\t * @param {string=} b Beginning value. We store this to ensure that it is EXACTLY what it was when the tween began without any risk of interpretation issues.\n\t\t\t * @param {string=} e Ending value. We store this to ensure that it is EXACTLY what the user defined at the end of the tween without any risk of interpretation issues.\n\t\t\t */\n\t\t\tCSSPropTween = _internals.CSSPropTween = function(t, p, s, c, next, type, n, r, pr, b, e) {\n\t\t\t\tthis.t = t; //target\n\t\t\t\tthis.p = p; //property\n\t\t\t\tthis.s = s; //starting value\n\t\t\t\tthis.c = c; //change value\n\t\t\t\tthis.n = n || p; //name that this CSSPropTween should be associated to (usually the same as p, but not always - n is what overwriting looks at)\n\t\t\t\tif (!(t instanceof CSSPropTween)) {\n\t\t\t\t\t_overwriteProps.push(this.n);\n\t\t\t\t}\n\t\t\t\tthis.r = !r ? r : (typeof(r) === \""function\"") ? r : Math.round; //round (boolean)\n\t\t\t\tthis.type = type || 0; //0 = normal tween, -1 = non-tweening (in which case xs0 will be applied to the target's property, like tp.t[tp.p] = tp.xs0), 1 = complex-value SpecialProp, 2 = custom setRatio() that does all the work\n\t\t\t\tif (pr) {\n\t\t\t\t\tthis.pr = pr;\n\t\t\t\t\t_hasPriority = true;\n\t\t\t\t}\n\t\t\t\tthis.b = (b === undefined) ? s : b;\n\t\t\t\tthis.e = (e === undefined) ? s + c : e;\n\t\t\t\tif (next) {\n\t\t\t\t\tthis._next = next;\n\t\t\t\t\tnext._prev = this;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_addNonTweeningNumericPT = function(target, prop, start, end, next, overwriteProp) { //cleans up some code redundancies and helps minification. Just a fast way to add a NUMERIC non-tweening CSSPropTween\n\t\t\t\tvar pt = new CSSPropTween(target, prop, start, end - start, next, -1, overwriteProp);\n\t\t\t\tpt.b = start;\n\t\t\t\tpt.e = pt.xs0 = end;\n\t\t\t\treturn pt;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Takes a target, the beginning value and ending value (as strings) and parses them into a CSSPropTween (possibly with child CSSPropTweens) that accommodates multiple numbers, colors, comma-delimited values, etc. For example:\n\t\t\t * sp.parseComplex(element, \""boxShadow\"", \""5px 10px 20px rgb(255,102,51)\"", \""0px 0px 0px red\"", true, \""0px 0px 0px rgb(0,0,0,0)\"", pt);\n\t\t\t * It will walk through the beginning and ending values (which should be in the same format with the same number and type of values) and figure out which parts are numbers, what strings separate the numeric/tweenable values, and then create the CSSPropTweens accordingly. If a plugin is defined, no child CSSPropTweens will be created. Instead, the ending values will be stored in the \""data\"" property of the returned CSSPropTween like: {s:-5, xn1:-10, xn2:-20, xn3:255, xn4:0, xn5:0} so that it can be fed to any other plugin and it'll be plain numeric tweens but the recomposition of the complex value will be handled inside CSSPlugin's setRatio().\n\t\t\t * If a setRatio is defined, the type of the CSSPropTween will be set to 2 and recomposition of the values will be the responsibility of that method.\n\t\t\t *\n\t\t\t * @param {!Object} t Target whose property will be tweened\n\t\t\t * @param {!string} p Property that will be tweened (its name, like \""left\"" or \""backgroundColor\"" or \""boxShadow\"")\n\t\t\t * @param {string} b Beginning value\n\t\t\t * @param {string} e Ending value\n\t\t\t * @param {boolean} clrs If true, the value could contain a color value like \""rgb(255,0,0)\"" or \""#F00\"" or \""red\"". The default is false, so no colors will be recognized (a performance optimization)\n\t\t\t * @param {(string|number|Object)} dflt The default beginning value that should be used if no valid beginning value is defined or if the number of values inside the complex beginning and ending values don't match\n\t\t\t * @param {?CSSPropTween} pt CSSPropTween instance that is the current head of the linked list (we'll prepend to this).\n\t\t\t * @param {number=} pr Priority in the linked list order. Higher priority properties will be updated before lower priority ones. The default priority is 0.\n\t\t\t * @param {TweenPlugin=} plugin If a plugin should handle the tweening of extra properties, pass the plugin instance here. If one is defined, then NO subtweens will be created for any extra properties (the properties will be created - just not additional CSSPropTween instances to tween them) because the plugin is expected to do so. However, the end values WILL be populated in the \""data\"" property, like {s:100, xn1:50, xn2:300}\n\t\t\t * @param {function(number)=} setRatio If values should be set in a custom function instead of being pieced together in a type:1 (complex-value) CSSPropTween, define that custom function here.\n\t\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parseComplex() call.\n\t\t\t */\n\t\t\t_parseComplex = CSSPlugin.parseComplex = function(t, p, b, e, clrs, dflt, pt, pr, plugin, setRatio) {\n\t\t\t\t//DEBUG: _log(\""parseComplex: \""+p+\"", b: \""+b+\"", e: \""+e);\n\t\t\t\tb = b || dflt || \""\"";\n\t\t\t\tif (typeof(e) === \""function\"") {\n\t\t\t\t\te = e(_index, _target);\n\t\t\t\t}\n\t\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, (setRatio ? 2 : 1), null, false, pr, b, e);\n\t\t\t\te += \""\""; //ensures it's a string\n\t\t\t\tif (clrs && _colorExp.test(e + b)) { //if colors are found, normalize the formatting to rgba() or hsla().\n\t\t\t\t\te = [b, e];\n\t\t\t\t\tCSSPlugin.colorStringFilter(e);\n\t\t\t\t\tb = e[0];\n\t\t\t\t\te = e[1];\n\t\t\t\t}\n\t\t\t\tvar ba = b.split(\"", \"").join(\"",\"").split(\"" \""), //beginning array\n\t\t\t\t\tea = e.split(\"", \"").join(\"",\"").split(\"" \""), //ending array\n\t\t\t\t\tl = ba.length,\n\t\t\t\t\tautoRound = (_autoRound !== false),\n\t\t\t\t\ti, xi, ni, bv, ev, bnums, enums, bn, hasAlpha, temp, cv, str, useHSL;\n\t\t\t\tif (e.indexOf(\"",\"") !== -1 || b.indexOf(\"",\"") !== -1) {\n\t\t\t\t\tif ((e + b).indexOf(\""rgb\"") !== -1 || (e + b).indexOf(\""hsl\"") !== -1) { //keep rgb(), rgba(), hsl(), and hsla() values together! (remember, we're splitting on spaces)\n\t\t\t\t\t\tba = ba.join(\"" \"").replace(_commasOutsideParenExp, \"", \"").split(\"" \"");\n\t\t\t\t\t\tea = ea.join(\"" \"").replace(_commasOutsideParenExp, \"", \"").split(\"" \"");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tba = ba.join(\"" \"").split(\"",\"").join(\"", \"").split(\"" \"");\n\t\t\t\t\t\tea = ea.join(\"" \"").split(\"",\"").join(\"", \"").split(\"" \"");\n\t\t\t\t\t}\n\t\t\t\t\tl = ba.length;\n\t\t\t\t}\n\t\t\t\tif (l !== ea.length) {\n\t\t\t\t\t//DEBUG: _log(\""mismatched formatting detected on \"" + p + \"" (\"" + b + \"" vs \"" + e + \"")\"");\n\t\t\t\t\tba = (dflt || \""\"").split(\"" \"");\n\t\t\t\t\tl = ba.length;\n\t\t\t\t}\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = setRatio;\n\t\t\t\t_colorExp.lastIndex = 0;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tbv = ba[i];\n\t\t\t\t\tev = ea[i] + \""\"";\n\t\t\t\t\tbn = parseFloat(bv);\n\t\t\t\t\t//if the value begins with a number (most common). It's fine if it has a suffix like px\n\t\t\t\t\tif (bn || bn === 0) {\n\t\t\t\t\t\tpt.appendXtra(\""\"", bn, _parseChange(ev, bn), ev.replace(_relNumExp, \""\""), (autoRound && ev.indexOf(\""px\"") !== -1) ? Math.round : false, true);\n\n\t\t\t\t\t//if the value is a color\n\t\t\t\t\t} else if (clrs && _colorExp.test(bv)) {\n\t\t\t\t\t\tstr = ev.indexOf(\"")\"") + 1;\n\t\t\t\t\t\tstr = \"")\"" + (str ? ev.substr(str) : \""\""); //if there's a comma or ) at the end, retain it.\n\t\t\t\t\t\tuseHSL = (ev.indexOf(\""hsl\"") !== -1 && _supportsOpacity);\n\t\t\t\t\t\ttemp = ev; //original string value so we can look for any prefix later.\n\t\t\t\t\t\tbv = _parseColor(bv, useHSL);\n\t\t\t\t\t\tev = _parseColor(ev, useHSL);\n\t\t\t\t\t\thasAlpha = (bv.length + ev.length > 6);\n\t\t\t\t\t\tif (hasAlpha && !_supportsOpacity && ev[3] === 0) { //older versions of IE don't support rgba(), so if the destination alpha is 0, just use \""transparent\"" for the end color\n\t\t\t\t\t\t\tpt[\""xs\"" + pt.l] += pt.l ? \"" transparent\"" : \""transparent\"";\n\t\t\t\t\t\t\tpt.e = pt.e.split(ea[i]).join(\""transparent\"");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!_supportsOpacity) { //old versions of IE don't support rgba().\n\t\t\t\t\t\t\t\thasAlpha = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (useHSL) {\n\t\t\t\t\t\t\t\tpt.appendXtra(temp.substr(0, temp.indexOf(\""hsl\"")) + (hasAlpha ? \""hsla(\"" : \""hsl(\""), bv[0], _parseChange(ev[0], bv[0]), \"",\"", false, true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\""\"", bv[1], _parseChange(ev[1], bv[1]), \""%,\"", false)\n\t\t\t\t\t\t\t\t\t.appendXtra(\""\"", bv[2], _parseChange(ev[2], bv[2]), (hasAlpha ? \""%,\"" : \""%\"" + str), false);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpt.appendXtra(temp.substr(0, temp.indexOf(\""rgb\"")) + (hasAlpha ? \""rgba(\"" : \""rgb(\""), bv[0], ev[0] - bv[0], \"",\"", Math.round, true)\n\t\t\t\t\t\t\t\t\t.appendXtra(\""\"", bv[1], ev[1] - bv[1], \"",\"", Math.round)\n\t\t\t\t\t\t\t\t\t.appendXtra(\""\"", bv[2], ev[2] - bv[2], (hasAlpha ? \"",\"" : str), Math.round);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (hasAlpha) {\n\t\t\t\t\t\t\t\tbv = (bv.length < 4) ? 1 : bv[3];\n\t\t\t\t\t\t\t\tpt.appendXtra(\""\"", bv, ((ev.length < 4) ? 1 : ev[3]) - bv, str, false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_colorExp.lastIndex = 0; //otherwise the test() on the RegExp could move the lastIndex and taint future results.\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbnums = bv.match(_numExp); //gets each group of numbers in the beginning value string and drops them into an array\n\n\t\t\t\t\t\t//if no number is found, treat it as a non-tweening value and just append the string to the current xs.\n\t\t\t\t\t\tif (!bnums) {\n\t\t\t\t\t\t\tpt[\""xs\"" + pt.l] += (pt.l || pt[\""xs\"" + pt.l]) ? \"" \"" + ev : ev;\n\n\t\t\t\t\t\t//loop through all the numbers that are found and construct the extra values on the pt.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tenums = ev.match(_relNumExp); //get each group of numbers in the end value string and drop them into an array. We allow relative values too, like +=50 or -=.5\n\t\t\t\t\t\t\tif (!enums || enums.length !== bnums.length) {\n\t\t\t\t\t\t\t\t//DEBUG: _log(\""mismatched formatting detected on \"" + p + \"" (\"" + b + \"" vs \"" + e + \"")\"");\n\t\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tni = 0;\n\t\t\t\t\t\t\tfor (xi = 0; xi < bnums.length; xi++) {\n\t\t\t\t\t\t\t\tcv = bnums[xi];\n\t\t\t\t\t\t\t\ttemp = bv.indexOf(cv, ni);\n\t\t\t\t\t\t\t\tpt.appendXtra(bv.substr(ni, temp - ni), Number(cv), _parseChange(enums[xi], cv), \""\"", (autoRound && bv.substr(temp + cv.length, 2) === \""px\"") ? Math.round : false, (xi === 0));\n\t\t\t\t\t\t\t\tni = temp + cv.length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt[\""xs\"" + pt.l] += bv.substr(ni);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//if there are relative values (\""+=\"" or \""-=\"" prefix), we need to adjust the ending value to eliminate the prefixes and combine the values properly.\n\t\t\t\tif (e.indexOf(\""=\"") !== -1) if (pt.data) {\n\t\t\t\t\tstr = pt.xs0 + pt.data.s;\n\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\tstr += pt[\""xs\"" + i] + pt.data[\""xn\"" + i];\n\t\t\t\t\t}\n\t\t\t\t\tpt.e = str + pt[\""xs\"" + i];\n\t\t\t\t}\n\t\t\t\tif (!pt.l) {\n\t\t\t\t\tpt.type = -1;\n\t\t\t\t\tpt.xs0 = pt.e;\n\t\t\t\t}\n\t\t\t\treturn pt.xfirst || pt;\n\t\t\t},\n\t\t\ti = 9;\n\n\n\t\tp = CSSPropTween.prototype;\n\t\tp.l = p.pr = 0; //length (number of extra properties like xn1, xn2, xn3, etc.\n\t\twhile (--i > 0) {\n\t\t\tp[\""xn\"" + i] = 0;\n\t\t\tp[\""xs\"" + i] = \""\"";\n\t\t}\n\t\tp.xs0 = \""\"";\n\t\tp._next = p._prev = p.xfirst = p.data = p.plugin = p.setRatio = p.rxp = null;\n\n\n\t\t/**\n\t\t * Appends and extra tweening value to a CSSPropTween and automatically manages any prefix and suffix strings. The first extra value is stored in the s and c of the main CSSPropTween instance, but thereafter any extras are stored in the xn1, xn2, xn3, etc. The prefixes and suffixes are stored in the xs0, xs1, xs2, etc. properties. For example, if I walk through a clip value like \""rect(10px, 5px, 0px, 20px)\"", the values would be stored like this:\n\t\t * xs0:\""rect(\"", s:10, xs1:\""px, \"", xn1:5, xs2:\""px, \"", xn2:0, xs3:\""px, \"", xn3:20, xn4:\""px)\""\n\t\t * And they'd all get joined together when the CSSPlugin renders (in the setRatio() method).\n\t\t * @param {string=} pfx Prefix (if any)\n\t\t * @param {!number} s Starting value\n\t\t * @param {!number} c Change in numeric value over the course of the entire tween. For example, if the start is 5 and the end is 100, the change would be 95.\n\t\t * @param {string=} sfx Suffix (if any)\n\t\t * @param {boolean=} r Round (if true).\n\t\t * @param {boolean=} pad If true, this extra value should be separated by the previous one by a space. If there is no previous extra and pad is true, it will automatically drop the space.\n\t\t * @return {CSSPropTween} returns itself so that multiple methods can be chained together.\n\t\t */\n\t\tp.appendXtra = function(pfx, s, c, sfx, r, pad) {\n\t\t\tvar pt = this,\n\t\t\t\tl = pt.l;\n\t\t\tpt[\""xs\"" + l] += (pad && (l || pt[\""xs\"" + l])) ? \"" \"" + pfx : pfx || \""\"";\n\t\t\tif (!c) if (l !== 0 && !pt.plugin) { //typically we'll combine non-changing values right into the xs to optimize performance, but we don't combine them when there's a plugin that will be tweening the values because it may depend on the values being split apart, like for a bezier, if a value doesn't change between the first and second iteration but then it does on the 3rd, we'll run into trouble because there's no xn slot for that value!\n\t\t\t\tpt[\""xs\"" + l] += s + (sfx || \""\"");\n\t\t\t\treturn pt;\n\t\t\t}\n\t\t\tpt.l++;\n\t\t\tpt.type = pt.setRatio ? 2 : 1;\n\t\t\tpt[\""xs\"" + pt.l] = sfx || \""\"";\n\t\t\tif (l > 0) {\n\t\t\t\tpt.data[\""xn\"" + l] = s + c;\n\t\t\t\tpt.rxp[\""xn\"" + l] = r; //round extra property (we need to tap into this in the _parseToProxy() method)\n\t\t\t\tpt[\""xn\"" + l] = s;\n\t\t\t\tif (!pt.plugin) {\n\t\t\t\t\tpt.xfirst = new CSSPropTween(pt, \""xn\"" + l, s, c, pt.xfirst || pt, 0, pt.n, r, pt.pr);\n\t\t\t\t\tpt.xfirst.xs0 = 0; //just to ensure that the property stays numeric which helps modern browsers speed up processing. Remember, in the setRatio() method, we do pt.t[pt.p] = val + pt.xs0 so if pt.xs0 is \""\"" (the default), it'll cast the end value as a string. When a property is a number sometimes and a string sometimes, it prevents the compiler from locking in the data type, slowing things down slightly.\n\t\t\t\t}\n\t\t\t\treturn pt;\n\t\t\t}\n\t\t\tpt.data = {s:s + c};\n\t\t\tpt.rxp = {};\n\t\t\tpt.s = s;\n\t\t\tpt.c = c;\n\t\t\tpt.r = r;\n\t\t\treturn pt;\n\t\t};\n\n\t\t/**\n\t\t * @constructor A SpecialProp is basically a css property that needs to be treated in a non-standard way, like if it may contain a complex value like boxShadow:\""5px 10px 15px rgb(255, 102, 51)\"" or if it is associated with another plugin like ThrowPropsPlugin or BezierPlugin. Every SpecialProp is associated with a particular property name like \""boxShadow\"" or \""throwProps\"" or \""bezier\"" and it will intercept those values in the vars object that's passed to the CSSPlugin and handle them accordingly.\n\t\t * @param {!string} p Property name (like \""boxShadow\"" or \""throwProps\"")\n\t\t * @param {Object=} options An object containing any of the following configuration options:\n\t\t *                      - defaultValue: the default value\n\t\t *                      - parser: A function that should be called when the associated property name is found in the vars. This function should return a CSSPropTween instance and it should ensure that it is properly inserted into the linked list. It will receive 4 paramters: 1) The target, 2) The value defined in the vars, 3) The CSSPlugin instance (whose _firstPT should be used for the linked list), and 4) A computed style object if one was calculated (this is a speed optimization that allows retrieval of starting values quicker)\n\t\t *                      - formatter: a function that formats any value received for this special property (for example, boxShadow could take \""5px 5px red\"" and format it to \""5px 5px 0px 0px red\"" so that both the beginning and ending values have a common order and quantity of values.)\n\t\t *                      - prefix: if true, we'll determine whether or not this property requires a vendor prefix (like Webkit or Moz or ms or O)\n\t\t *                      - color: set this to true if the value for this SpecialProp may contain color-related values like rgb(), rgba(), etc.\n\t\t *                      - priority: priority in the linked list order. Higher priority SpecialProps will be updated before lower priority ones. The default priority is 0.\n\t\t *                      - multi: if true, the formatter should accommodate a comma-delimited list of values, like boxShadow could have multiple boxShadows listed out.\n\t\t *                      - collapsible: if true, the formatter should treat the value like it's a top/right/bottom/left value that could be collapsed, like \""5px\"" would apply to all, \""5px, 10px\"" would use 5px for top/bottom and 10px for right/left, etc.\n\t\t *                      - keyword: a special keyword that can [optionally] be found inside the value (like \""inset\"" for boxShadow). This allows us to validate beginning/ending values to make sure they match (if the keyword is found in one, it'll be added to the other for consistency by default).\n\t\t */\n\t\tvar SpecialProp = function(p, options) {\n\t\t\t\toptions = options || {};\n\t\t\t\tthis.p = options.prefix ? _checkPropPrefix(p) || p : p;\n\t\t\t\t_specialProps[p] = _specialProps[this.p] = this;\n\t\t\t\tthis.format = options.formatter || _getFormatter(options.defaultValue, options.color, options.collapsible, options.multi);\n\t\t\t\tif (options.parser) {\n\t\t\t\t\tthis.parse = options.parser;\n\t\t\t\t}\n\t\t\t\tthis.clrs = options.color;\n\t\t\t\tthis.multi = options.multi;\n\t\t\t\tthis.keyword = options.keyword;\n\t\t\t\tthis.dflt = options.defaultValue;\n\t\t\t\tthis.allowFunc = options.allowFunc;\n\t\t\t\tthis.pr = options.priority || 0;\n\t\t\t},\n\n\t\t\t//shortcut for creating a new SpecialProp that can accept multiple properties as a comma-delimited list (helps minification). dflt can be an array for multiple values (we don't do a comma-delimited list because the default value may contain commas, like rect(0px,0px,0px,0px)). We attach this method to the SpecialProp class/object instead of using a private _createSpecialProp() method so that we can tap into it externally if necessary, like from another plugin.\n\t\t\t_registerComplexSpecialProp = _internals._registerComplexSpecialProp = function(p, options, defaults) {\n\t\t\t\tif (typeof(options) !== \""object\"") {\n\t\t\t\t\toptions = {parser:defaults}; //to make backwards compatible with older versions of BezierPlugin and ThrowPropsPlugin\n\t\t\t\t}\n\t\t\t\tvar a = p.split(\"",\""),\n\t\t\t\t\td = options.defaultValue,\n\t\t\t\t\ti, temp;\n\t\t\t\tdefaults = defaults || [d];\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\toptions.prefix = (i === 0 && options.prefix);\n\t\t\t\t\toptions.defaultValue = defaults[i] || d;\n\t\t\t\t\ttemp = new SpecialProp(a[i], options);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//creates a placeholder special prop for a plugin so that the property gets caught the first time a tween of it is attempted, and at that time it makes the plugin register itself, thus taking over for all future tweens of that property. This allows us to not mandate that things load in a particular order and it also allows us to log() an error that informs the user when they attempt to tween an external plugin-related property without loading its .js file.\n\t\t\t_registerPluginProp = _internals._registerPluginProp = function(p) {\n\t\t\t\tif (!_specialProps[p]) {\n\t\t\t\t\tvar pluginName = p.charAt(0).toUpperCase() + p.substr(1) + \""Plugin\"";\n\t\t\t\t\t_registerComplexSpecialProp(p, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\t\t\tvar pluginClass = _globals.com.greensock.plugins[pluginName];\n\t\t\t\t\t\tif (!pluginClass) {\n\t\t\t\t\t\t\t_log(\""Error: \"" + pluginName + \"" js file not loaded.\"");\n\t\t\t\t\t\t\treturn pt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpluginClass._cssRegister();\n\t\t\t\t\t\treturn _specialProps[p].parse(t, e, p, cssp, pt, plugin, vars);\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t};\n\n\n\t\tp = SpecialProp.prototype;\n\n\t\t/**\n\t\t * Alias for _parseComplex() that automatically plugs in certain values for this SpecialProp, like its property name, whether or not colors should be sensed, the default value, and priority. It also looks for any keyword that the SpecialProp defines (like \""inset\"" for boxShadow) and ensures that the beginning and ending values have the same number of values for SpecialProps where multi is true (like boxShadow and textShadow can have a comma-delimited list)\n\t\t * @param {!Object} t target element\n\t\t * @param {(string|number|object)} b beginning value\n\t\t * @param {(string|number|object)} e ending (destination) value\n\t\t * @param {CSSPropTween=} pt next CSSPropTween in the linked list\n\t\t * @param {TweenPlugin=} plugin If another plugin will be tweening the complex value, that TweenPlugin instance goes here.\n\t\t * @param {function=} setRatio If a custom setRatio() method should be used to handle this complex value, that goes here.\n\t\t * @return {CSSPropTween=} First CSSPropTween in the linked list\n\t\t */\n\t\tp.parseComplex = function(t, b, e, pt, plugin, setRatio) {\n\t\t\tvar kwd = this.keyword,\n\t\t\t\ti, ba, ea, l, bi, ei;\n\t\t\t//if this SpecialProp's value can contain a comma-delimited list of values (like boxShadow or textShadow), we must parse them in a special way, and look for a keyword (like \""inset\"" for boxShadow) and ensure that the beginning and ending BOTH have it if the end defines it as such. We also must ensure that there are an equal number of values specified (we can't tween 1 boxShadow to 3 for example)\n\t\t\tif (this.multi) if (_commasOutsideParenExp.test(e) || _commasOutsideParenExp.test(b)) {\n\t\t\t\tba = b.replace(_commasOutsideParenExp, \""|\"").split(\""|\"");\n\t\t\t\tea = e.replace(_commasOutsideParenExp, \""|\"").split(\""|\"");\n\t\t\t} else if (kwd) {\n\t\t\t\tba = [b];\n\t\t\t\tea = [e];\n\t\t\t}\n\t\t\tif (ea) {\n\t\t\t\tl = (ea.length > ba.length) ? ea.length : ba.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tb = ba[i] = ba[i] || this.dflt;\n\t\t\t\t\te = ea[i] = ea[i] || this.dflt;\n\t\t\t\t\tif (kwd) {\n\t\t\t\t\t\tbi = b.indexOf(kwd);\n\t\t\t\t\t\tei = e.indexOf(kwd);\n\t\t\t\t\t\tif (bi !== ei) {\n\t\t\t\t\t\t\tif (ei === -1) { //if the keyword isn't in the end value, remove it from the beginning one.\n\t\t\t\t\t\t\t\tba[i] = ba[i].split(kwd).join(\""\"");\n\t\t\t\t\t\t\t} else if (bi === -1) { //if the keyword isn't in the beginning, add it.\n\t\t\t\t\t\t\t\tba[i] += \"" \"" + kwd;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tb = ba.join(\"", \"");\n\t\t\t\te = ea.join(\"", \"");\n\t\t\t}\n\t\t\treturn _parseComplex(t, this.p, b, e, this.clrs, this.dflt, pt, this.pr, plugin, setRatio);\n\t\t};\n\n\t\t/**\n\t\t * Accepts a target and end value and spits back a CSSPropTween that has been inserted into the CSSPlugin's linked list and conforms with all the conventions we use internally, like type:-1, 0, 1, or 2, setting up any extra property tweens, priority, etc. For example, if we have a boxShadow SpecialProp and call:\n\t\t * this._firstPT = sp.parse(element, \""5px 10px 20px rgb(2550,102,51)\"", \""boxShadow\"", this);\n\t\t * It should figure out the starting value of the element's boxShadow, compare it to the provided end value and create all the necessary CSSPropTweens of the appropriate types to tween the boxShadow. The CSSPropTween that gets spit back should already be inserted into the linked list (the 4th parameter is the current head, so prepend to that).\n\t\t * @param {!Object} t Target object whose property is being tweened\n\t\t * @param {Object} e End value as provided in the vars object (typically a string, but not always - like a throwProps would be an object).\n\t\t * @param {!string} p Property name\n\t\t * @param {!CSSPlugin} cssp The CSSPlugin instance that should be associated with this tween.\n\t\t * @param {?CSSPropTween} pt The CSSPropTween that is the current head of the linked list (we'll prepend to it)\n\t\t * @param {TweenPlugin=} plugin If a plugin will be used to tween the parsed value, this is the plugin instance.\n\t\t * @param {Object=} vars Original vars object that contains the data for parsing.\n\t\t * @return {CSSPropTween} The first CSSPropTween in the linked list which includes the new one(s) added by the parse() call.\n\t\t */\n\t\tp.parse = function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\treturn this.parseComplex(t.style, this.format(_getStyle(t, this.p, _cs, false, this.dflt)), this.format(e), pt, plugin);\n\t\t};\n\n\t\t/**\n\t\t * Registers a special property that should be intercepted from any \""css\"" objects defined in tweens. This allows you to handle them however you want without CSSPlugin doing it for you. The 2nd parameter should be a function that accepts 3 parameters:\n\t\t *  1) Target object whose property should be tweened (typically a DOM element)\n\t\t *  2) The end/destination value (could be a string, number, object, or whatever you want)\n\t\t *  3) The tween instance (you probably don't need to worry about this, but it can be useful for looking up information like the duration)\n\t\t *\n\t\t * Then, your function should return a function which will be called each time the tween gets rendered, passing a numeric \""ratio\"" parameter to your function that indicates the change factor (usually between 0 and 1). For example:\n\t\t *\n\t\t * CSSPlugin.registerSpecialProp(\""myCustomProp\"", function(target, value, tween) {\n\t\t *      var start = target.style.width;\n\t\t *      return function(ratio) {\n\t\t *              target.style.width = (start + value * ratio) + \""px\"";\n\t\t *              console.log(\""set width to \"" + target.style.width);\n\t\t *          }\n\t\t * }, 0);\n\t\t *\n\t\t * Then, when I do this tween, it will trigger my special property:\n\t\t *\n\t\t * TweenLite.to(element, 1, {css:{myCustomProp:100}});\n\t\t *\n\t\t * In the example, of course, we're just changing the width, but you can do anything you want.\n\t\t *\n\t\t * @param {!string} name Property name (or comma-delimited list of property names) that should be intercepted and handled by your function. For example, if I define \""myCustomProp\"", then it would handle that portion of the following tween: TweenLite.to(element, 1, {css:{myCustomProp:100}})\n\t\t * @param {!function(Object, Object, Object, string):function(number)} onInitTween The function that will be called when a tween of this special property is performed. The function will receive 4 parameters: 1) Target object that should be tweened, 2) Value that was passed to the tween, 3) The tween instance itself (rarely used), and 4) The property name that's being tweened. Your function should return a function that should be called on every update of the tween. That function will receive a single parameter that is a \""change factor\"" value (typically between 0 and 1) indicating the amount of change as a ratio. You can use this to determine how to set the values appropriately in your function.\n\t\t * @param {number=} priority Priority that helps the engine determine the order in which to set the properties (default: 0). Higher priority properties will be updated before lower priority ones.\n\t\t */\n\t\tCSSPlugin.registerSpecialProp = function(name, onInitTween, priority) {\n\t\t\t_registerComplexSpecialProp(name, {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\t\tvar rv = new CSSPropTween(t, p, 0, 0, pt, 2, p, false, priority);\n\t\t\t\trv.plugin = plugin;\n\t\t\t\trv.setRatio = onInitTween(t, e, cssp._tween, p);\n\t\t\t\treturn rv;\n\t\t\t}, priority:priority});\n\t\t};\n\n\n\n\n\n\n\t\t//transform-related methods and properties\n\t\tCSSPlugin.useSVGTransformAttr = true; //Safari and Firefox both have some rendering bugs when applying CSS transforms to SVG elements, so default to using the \""transform\"" attribute instead (users can override this).\n\t\tvar _transformProps = (\""scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent\"").split(\"",\""),\n\t\t\t_transformProp = _checkPropPrefix(\""transform\""), //the Javascript (camelCase) transform property, like msTransform, WebkitTransform, MozTransform, or OTransform.\n\t\t\t_transformPropCSS = _prefixCSS + \""transform\"",\n\t\t\t_transformOriginProp = _checkPropPrefix(\""transformOrigin\""),\n\t\t\t_supports3D = (_checkPropPrefix(\""perspective\"") !== null),\n\t\t\tTransform = _internals.Transform = function() {\n\t\t\t\tthis.perspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0;\n\t\t\t\tthis.force3D = (CSSPlugin.defaultForce3D === false || !_supports3D) ? false : CSSPlugin.defaultForce3D || \""auto\"";\n\t\t\t},\n\t\t\t_SVGElement = _gsScope.SVGElement,\n\t\t\t_useSVGTransformAttr,\n\t\t\t//Some browsers (like Firefox and IE) don't honor transform-origin properly in SVG elements, so we need to manually adjust the matrix accordingly. We feature detect here rather than always doing the conversion for certain browsers because they may fix the problem at some point in the future.\n\n\t\t\t_createSVG = function(type, container, attributes) {\n\t\t\t\tvar element = _doc.createElementNS(\""http://www.w3.org/2000/svg\"", type),\n\t\t\t\t\treg = /([a-z])([A-Z])/g,\n\t\t\t\t\tp;\n\t\t\t\tfor (p in attributes) {\n\t\t\t\t\telement.setAttributeNS(null, p.replace(reg, \""$1-$2\"").toLowerCase(), attributes[p]);\n\t\t\t\t}\n\t\t\t\tcontainer.appendChild(element);\n\t\t\t\treturn element;\n\t\t\t},\n\t\t\t_docElement = _doc.documentElement || {},\n\t\t\t_forceSVGTransformAttr = (function() {\n\t\t\t\t//IE and Android stock don't support CSS transforms on SVG elements, so we must write them to the \""transform\"" attribute. We populate this variable in the _parseTransform() method, and only if/when we come across an SVG element\n\t\t\t\tvar force = _ieVers || (/Android/i.test(_agent) && !_gsScope.chrome),\n\t\t\t\t\tsvg, rect, width;\n\t\t\t\tif (_doc.createElementNS && _docElement.appendChild && !force) { //IE8 and earlier doesn't support SVG anyway\n\t\t\t\t\tsvg = _createSVG(\""svg\"", _docElement);\n\t\t\t\t\trect = _createSVG(\""rect\"", svg, {width:100, height:50, x:100});\n\t\t\t\t\twidth = rect.getBoundingClientRect().width;\n\t\t\t\t\trect.style[_transformOriginProp] = \""50% 50%\"";\n\t\t\t\t\trect.style[_transformProp] = \""scaleX(0.5)\"";\n\t\t\t\t\tforce = (width === rect.getBoundingClientRect().width && !(_isFirefox && _supports3D)); //note: Firefox fails the test even though it does support CSS transforms in 3D. Since we can't push 3D stuff into the transform attribute, we force Firefox to pass the test here (as long as it does truly support 3D).\n\t\t\t\t\t_docElement.removeChild(svg);\n\t\t\t\t}\n\t\t\t\treturn force;\n\t\t\t})(),\n\t\t\t_parseSVGOrigin = function(e, local, decoratee, absolute, smoothOrigin, skipRecord) {\n\t\t\t\tvar tm = e._gsTransform,\n\t\t\t\t\tm = _getMatrix(e, true),\n\t\t\t\t\tv, x, y, xOrigin, yOrigin, a, b, c, d, tx, ty, determinant, xOriginOld, yOriginOld;\n\t\t\t\tif (tm) {\n\t\t\t\t\txOriginOld = tm.xOrigin; //record the original values before we alter them.\n\t\t\t\t\tyOriginOld = tm.yOrigin;\n\t\t\t\t}\n\t\t\t\tif (!absolute || (v = absolute.split(\"" \"")).length < 2) {\n\t\t\t\t\tb = e.getBBox();\n\t\t\t\t\tif (b.x === 0 && b.y === 0 && b.width + b.height === 0) { //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.\n\t\t\t\t\t\tb = {x: parseFloat(e.hasAttribute(\""x\"") ? e.getAttribute(\""x\"") : e.hasAttribute(\""cx\"") ? e.getAttribute(\""cx\"") : 0) || 0, y: parseFloat(e.hasAttribute(\""y\"") ? e.getAttribute(\""y\"") : e.hasAttribute(\""cy\"") ? e.getAttribute(\""cy\"") : 0) || 0, width:0, height:0};\n\t\t\t\t\t}\n\t\t\t\t\tlocal = _parsePosition(local).split(\"" \"");\n\t\t\t\t\tv = [(local[0].indexOf(\""%\"") !== -1 ? parseFloat(local[0]) / 100 * b.width : parseFloat(local[0])) + b.x,\n\t\t\t\t\t\t (local[1].indexOf(\""%\"") !== -1 ? parseFloat(local[1]) / 100 * b.height : parseFloat(local[1])) + b.y];\n\t\t\t\t}\n\t\t\t\tdecoratee.xOrigin = xOrigin = parseFloat(v[0]);\n\t\t\t\tdecoratee.yOrigin = yOrigin = parseFloat(v[1]);\n\t\t\t\tif (absolute && m !== _identity2DMatrix) { //if svgOrigin is being set, we must invert the matrix and determine where the absolute point is, factoring in the current transforms. Otherwise, the svgOrigin would be based on the element's non-transformed position on the canvas.\n\t\t\t\t\ta = m[0];\n\t\t\t\t\tb = m[1];\n\t\t\t\t\tc = m[2];\n\t\t\t\t\td = m[3];\n\t\t\t\t\ttx = m[4];\n\t\t\t\t\tty = m[5];\n\t\t\t\t\tdeterminant = (a * d - b * c);\n\t\t\t\t\tif (determinant) { //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.\n\t\t\t\t\t\tx = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + ((c * ty - d * tx) / determinant);\n\t\t\t\t\t\ty = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - ((a * ty - b * tx) / determinant);\n\t\t\t\t\t\txOrigin = decoratee.xOrigin = v[0] = x;\n\t\t\t\t\t\tyOrigin = decoratee.yOrigin = v[1] = y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tm) { //avoid jump when transformOrigin is changed - adjust the x/y values accordingly\n\t\t\t\t\tif (skipRecord) {\n\t\t\t\t\t\tdecoratee.xOffset = tm.xOffset;\n\t\t\t\t\t\tdecoratee.yOffset = tm.yOffset;\n\t\t\t\t\t\ttm = decoratee;\n\t\t\t\t\t}\n\t\t\t\t\tif (smoothOrigin || (smoothOrigin !== false && CSSPlugin.defaultSmoothOrigin !== false)) {\n\t\t\t\t\t\tx = xOrigin - xOriginOld;\n\t\t\t\t\t\ty = yOrigin - yOriginOld;\n\t\t\t\t\t\t//originally, we simply adjusted the x and y values, but that would cause problems if, for example, you created a rotational tween part-way through an x/y tween. Managing the offset in a separate variable gives us ultimate flexibility.\n\t\t\t\t\t\t//tm.x -= x - (x * m[0] + y * m[2]);\n\t\t\t\t\t\t//tm.y -= y - (x * m[1] + y * m[3]);\n\t\t\t\t\t\ttm.xOffset += (x * m[0] + y * m[2]) - x;\n\t\t\t\t\t\ttm.yOffset += (x * m[1] + y * m[3]) - y;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttm.xOffset = tm.yOffset = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skipRecord) {\n\t\t\t\t\te.setAttribute(\""data-svg-origin\"", v.join(\"" \""));\n\t\t\t\t}\n\t\t\t},\n\t\t\t_getBBoxHack = function(swapIfPossible) { //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a <defs> element and/or <mask>. We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).\n\t\t\t\tvar svg = _createElement(\""svg\"", (this.ownerSVGElement && this.ownerSVGElement.getAttribute(\""xmlns\"")) || \""http://www.w3.org/2000/svg\""),\n\t\t\t\t\toldParent = this.parentNode,\n\t\t\t\t\toldSibling = this.nextSibling,\n\t\t\t\t\toldCSS = this.style.cssText,\n\t\t\t\t\tbbox;\n\t\t\t\t_docElement.appendChild(svg);\n\t\t\t\tsvg.appendChild(this);\n\t\t\t\tthis.style.display = \""block\"";\n\t\t\t\tif (swapIfPossible) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbbox = this.getBBox();\n\t\t\t\t\t\tthis._originalGetBBox = this.getBBox;\n\t\t\t\t\t\tthis.getBBox = _getBBoxHack;\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t} else if (this._originalGetBBox) {\n\t\t\t\t\tbbox = this._originalGetBBox();\n\t\t\t\t}\n\t\t\t\tif (oldSibling) {\n\t\t\t\t\toldParent.insertBefore(this, oldSibling);\n\t\t\t\t} else {\n\t\t\t\t\toldParent.appendChild(this);\n\t\t\t\t}\n\t\t\t\t_docElement.removeChild(svg);\n\t\t\t\tthis.style.cssText = oldCSS;\n\t\t\t\treturn bbox;\n\t\t\t},\n\t\t\t_getBBox = function(e) {\n\t\t\t\ttry {\n\t\t\t\t\treturn e.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn _getBBoxHack.call(e, true);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_isSVG = function(e) { //reports if the element is an SVG on which getBBox() actually works\n\t\t\t\treturn !!(_SVGElement && e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\n\t\t\t},\n\t\t\t_identity2DMatrix = [1,0,0,1,0,0],\n\t\t\t_getMatrix = function(e, force2D) {\n\t\t\t\tvar tm = e._gsTransform || new Transform(),\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\tstyle = e.style,\n\t\t\t\t\tisDefault, s, m, n, dec, nextSibling, parent;\n\t\t\t\tif (_transformProp) {\n\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t} else if (e.currentStyle) {\n\t\t\t\t\t//for older versions of IE, we need to interpret the filter portion that is in the format: progid:DXImageTransform.Microsoft.Matrix(M11=6.123233995736766e-17, M12=-1, M21=1, M22=6.123233995736766e-17, sizingMethod='auto expand') Notice that we need to swap b and c compared to a normal matrix.\n\t\t\t\t\ts = e.currentStyle.filter.match(_ieGetMatrixExp);\n\t\t\t\t\ts = (s && s.length === 4) ? [s[0].substr(4), Number(s[2].substr(4)), Number(s[1].substr(4)), s[3].substr(4), (tm.x || 0), (tm.y || 0)].join(\"",\"") : \""\"";\n\t\t\t\t}\n\t\t\t\tisDefault = (!s || s === \""none\"" || s === \""matrix(1, 0, 0, 1, 0, 0)\"");\n\t\t\t\tif (_transformProp && isDefault && !e.offsetParent && e !== _docElement) { //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n\t\t\t\t\t//browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \""none\"". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).\n\t\t\t\t\tn = style.display;\n\t\t\t\t\tstyle.display = \""block\"";\n\t\t\t\t\tparent = e.parentNode;\n\t\t\t\t\tif (!parent || !e.offsetParent) {\n\t\t\t\t\t\tdec = 1; //flag\n\t\t\t\t\t\tnextSibling = e.nextSibling;\n\t\t\t\t\t\t_docElement.appendChild(e); //we must add it to the DOM in order to get values properly\n\t\t\t\t\t}\n\t\t\t\t\ts = _getStyle(e, _transformPropCSS, null, true);\n\t\t\t\t\tisDefault = (!s || s === \""none\"" || s === \""matrix(1, 0, 0, 1, 0, 0)\"");\n\t\t\t\t\tif (n) {\n\t\t\t\t\t\tstyle.display = n;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_removeProp(style, \""display\"");\n\t\t\t\t\t}\n\t\t\t\t\tif (dec) {\n\t\t\t\t\t\tif (nextSibling) {\n\t\t\t\t\t\t\tparent.insertBefore(e, nextSibling);\n\t\t\t\t\t\t} else if (parent) {\n\t\t\t\t\t\t\tparent.appendChild(e);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_docElement.removeChild(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (tm.svg || (e.getCTM && _isSVG(e))) {\n\t\t\t\t\tif (isDefault && (style[_transformProp] + \""\"").indexOf(\""matrix\"") !== -1) { //some browsers (like Chrome 40) don't correctly report transforms that are applied inline on an SVG element (they don't get included in the computed style), so we double-check here and accept matrix values\n\t\t\t\t\t\ts = style[_transformProp];\n\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t}\n\t\t\t\t\tm = e.getAttribute(\""transform\"");\n\t\t\t\t\tif (isDefault && m) {\n\t\t\t\t\t\tm = e.transform.baseVal.consolidate().matrix; //ensures that even complex values like \""translate(50,60) rotate(135,0,0)\"" are parsed because it mashes it into a matrix.\n\t\t\t\t\t\ts = \""matrix(\"" + m.a + \"",\"" + m.b + \"",\"" + m.c + \"",\"" + m.d + \"",\"" + m.e + \"",\"" + m.f + \"")\"";\n\t\t\t\t\t\tisDefault = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isDefault) {\n\t\t\t\t\treturn _identity2DMatrix;\n\t\t\t\t}\n\t\t\t\t//split the matrix values out into an array (m for matrix)\n\t\t\t\tm = (s || \""\"").match(_numExp) || [];\n\t\t\t\ti = m.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tn = Number(m[i]);\n\t\t\t\t\tm[i] = (dec = n - (n |= 0)) ? ((dec * rnd + (dec < 0 ? -0.5 : 0.5)) | 0) / rnd + n : n; //convert strings to Numbers and round to 5 decimal places to avoid issues with tiny numbers. Roughly 20x faster than Number.toFixed(). We also must make sure to round before dividing so that values like 0.9999999999 become 1 to avoid glitches in browser rendering and interpretation of flipped/rotated 3D matrices. And don't just multiply the number by rnd, floor it, and then divide by rnd because the bitwise operations max out at a 32-bit signed integer, thus it could get clipped at a relatively low value (like 22,000.00000 for example).\n\t\t\t\t}\n\t\t\t\treturn (force2D && m.length > 6) ? [m[0], m[1], m[4], m[5], m[12], m[13]] : m;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Parses the transform values for an element, returning an object with x, y, z, scaleX, scaleY, scaleZ, rotation, rotationX, rotationY, skewX, and skewY properties. Note: by default (for performance reasons), all skewing is combined into skewX and rotation but skewY still has a place in the transform object so that we can record how much of the skew is attributed to skewX vs skewY. Remember, a skewY of 10 looks the same as a rotation of 10 and skewX of -10.\n\t\t\t * @param {!Object} t target element\n\t\t\t * @param {Object=} cs computed style object (optional)\n\t\t\t * @param {boolean=} rec if true, the transform values will be recorded to the target element's _gsTransform object, like target._gsTransform = {x:0, y:0, z:0, scaleX:1...}\n\t\t\t * @param {boolean=} parse if true, we'll ignore any _gsTransform values that already exist on the element, and force a reparsing of the css (calculated style)\n\t\t\t * @return {object} object containing all of the transform properties/values like {x:0, y:0, z:0, scaleX:1...}\n\t\t\t */\n\t\t\t_getTransform = _internals.getTransform = function(t, cs, rec, parse) {\n\t\t\t\tif (t._gsTransform && rec && !parse) {\n\t\t\t\t\treturn t._gsTransform; //if the element already has a _gsTransform, use that. Note: some browsers don't accurately return the calculated style for the transform (particularly for SVG), so it's almost always safest to just use the values we've already applied rather than re-parsing things.\n\t\t\t\t}\n\t\t\t\tvar tm = rec ? t._gsTransform || new Transform() : new Transform(),\n\t\t\t\t\tinvX = (tm.scaleX < 0), //in order to interpret things properly, we need to know if the user applied a negative scaleX previously so that we can adjust the rotation and skewX accordingly. Otherwise, if we always interpret a flipped matrix as affecting scaleY and the user only wants to tween the scaleX on multiple sequential tweens, it would keep the negative scaleY without that being the user's intent.\n\t\t\t\t\tmin = 0.00002,\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\tzOrigin = _supports3D ? parseFloat(_getStyle(t, _transformOriginProp, cs, false, \""0 0 0\"").split(\"" \"")[2]) || tm.zOrigin  || 0 : 0,\n\t\t\t\t\tdefaultTransformPerspective = parseFloat(CSSPlugin.defaultTransformPerspective) || 0,\n\t\t\t\t\tm, i, scaleX, scaleY, rotation, skewX;\n\n\t\t\t\ttm.svg = !!(t.getCTM && _isSVG(t));\n\t\t\t\tif (tm.svg) {\n\t\t\t\t\t_parseSVGOrigin(t, _getStyle(t, _transformOriginProp, cs, false, \""50% 50%\"") + \""\"", tm, t.getAttribute(\""data-svg-origin\""));\n\t\t\t\t\t_useSVGTransformAttr = CSSPlugin.useSVGTransformAttr || _forceSVGTransformAttr;\n\t\t\t\t}\n\t\t\t\tm = _getMatrix(t);\n\t\t\t\tif (m !== _identity2DMatrix) {\n\n\t\t\t\t\tif (m.length === 16) {\n\t\t\t\t\t\t//we'll only look at these position-related 6 variables first because if x/y/z all match, it's relatively safe to assume we don't need to re-parse everything which risks losing important rotational information (like rotationX:180 plus rotationY:180 would look the same as rotation:180 - there's no way to know for sure which direction was taken based solely on the matrix3d() values)\n\t\t\t\t\t\tvar a11 = m[0], a21 = m[1], a31 = m[2], a41 = m[3],\n\t\t\t\t\t\t\ta12 = m[4], a22 = m[5], a32 = m[6], a42 = m[7],\n\t\t\t\t\t\t\ta13 = m[8], a23 = m[9], a33 = m[10],\n\t\t\t\t\t\t\ta14 = m[12], a24 = m[13], a34 = m[14],\n\t\t\t\t\t\t\ta43 = m[11],\n\t\t\t\t\t\t\tangle = Math.atan2(a32, a33),\n\t\t\t\t\t\t\tt1, t2, t3, t4, cos, sin;\n\t\t\t\t\t\t//we manually compensate for non-zero z component of transformOrigin to work around bugs in Safari\n\t\t\t\t\t\tif (tm.zOrigin) {\n\t\t\t\t\t\t\ta34 = -tm.zOrigin;\n\t\t\t\t\t\t\ta14 = a13*a34-m[12];\n\t\t\t\t\t\t\ta24 = a23*a34-m[13];\n\t\t\t\t\t\t\ta34 = a33*a34+tm.zOrigin-m[14];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//note for possible future consolidation: rotationX: Math.atan2(a32, a33), rotationY: Math.atan2(-a31, Math.sqrt(a33 * a33 + a32 * a32)), rotation: Math.atan2(a21, a11), skew: Math.atan2(a12, a22). However, it doesn't seem to be quite as reliable as the full-on backwards rotation procedure.\n\t\t\t\t\t\ttm.rotationX = angle * _RAD2DEG;\n\t\t\t\t\t\t//rotationX\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\t\t\tt3 = a32*cos+a33*sin;\n\t\t\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\t\t\ta33 = a32*-sin+a33*cos;\n\t\t\t\t\t\t\ta43 = a42*-sin+a43*cos;\n\t\t\t\t\t\t\ta12 = t1;\n\t\t\t\t\t\t\ta22 = t2;\n\t\t\t\t\t\t\ta32 = t3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//rotationY\n\t\t\t\t\t\tangle = Math.atan2(-a31, a33);\n\t\t\t\t\t\ttm.rotationY = angle * _RAD2DEG;\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(-angle);\n\t\t\t\t\t\t\tsin = Math.sin(-angle);\n\t\t\t\t\t\t\tt1 = a11*cos-a13*sin;\n\t\t\t\t\t\t\tt2 = a21*cos-a23*sin;\n\t\t\t\t\t\t\tt3 = a31*cos-a33*sin;\n\t\t\t\t\t\t\ta23 = a21*sin+a23*cos;\n\t\t\t\t\t\t\ta33 = a31*sin+a33*cos;\n\t\t\t\t\t\t\ta43 = a41*sin+a43*cos;\n\t\t\t\t\t\t\ta11 = t1;\n\t\t\t\t\t\t\ta21 = t2;\n\t\t\t\t\t\t\ta31 = t3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//rotationZ\n\t\t\t\t\t\tangle = Math.atan2(a21, a11);\n\t\t\t\t\t\ttm.rotation = angle * _RAD2DEG;\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\t\tt1 = a11*cos+a21*sin;\n\t\t\t\t\t\t\tt2 = a12*cos+a22*sin;\n\t\t\t\t\t\t\tt3 = a13*cos+a23*sin;\n\t\t\t\t\t\t\ta21 = a21*cos-a11*sin;\n\t\t\t\t\t\t\ta22 = a22*cos-a12*sin;\n\t\t\t\t\t\t\ta23 = a23*cos-a13*sin;\n\t\t\t\t\t\t\ta11 = t1;\n\t\t\t\t\t\t\ta12 = t2;\n\t\t\t\t\t\t\ta13 = t3;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tm.rotationX && Math.abs(tm.rotationX) + Math.abs(tm.rotation) > 359.9) { //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n\t\t\t\t\t\t\ttm.rotationX = tm.rotation = 0;\n\t\t\t\t\t\t\ttm.rotationY = 180 - tm.rotationY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//skewX\n\t\t\t\t\t\tangle = Math.atan2(a12, a22);\n\n\t\t\t\t\t\t//scales\n\t\t\t\t\t\ttm.scaleX = ((Math.sqrt(a11 * a11 + a21 * a21 + a31 * a31) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ttm.scaleY = ((Math.sqrt(a22 * a22 + a32 * a32) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ttm.scaleZ = ((Math.sqrt(a13 * a13 + a23 * a23 + a33 * a33) * rnd + 0.5) | 0) / rnd;\n\t\t\t\t\t\ta11 /= tm.scaleX;\n\t\t\t\t\t\ta12 /= tm.scaleY;\n\t\t\t\t\t\ta21 /= tm.scaleX;\n\t\t\t\t\t\ta22 /= tm.scaleY;\n\t\t\t\t\t\tif (Math.abs(angle) > min) {\n\t\t\t\t\t\t\ttm.skewX = angle * _RAD2DEG;\n\t\t\t\t\t\t\ta12 = 0; //unskews\n\t\t\t\t\t\t\tif (tm.skewType !== \""simple\"") {\n\t\t\t\t\t\t\t\ttm.scaleY *= 1 / Math.cos(angle); //by default, we compensate the scale based on the skew so that the element maintains a similar proportion when skewed, so we have to alter the scaleY here accordingly to match the default (non-adjusted) skewing that CSS does (stretching more and more as it skews).\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttm.skewX = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* //for testing purposes\n\t\t\t\t\t\tvar transform = \""matrix3d(\"",\n\t\t\t\t\t\t\tcomma = \"",\"",\n\t\t\t\t\t\t\tzero = \""0\"";\n\t\t\t\t\t\ta13 /= tm.scaleZ;\n\t\t\t\t\t\ta23 /= tm.scaleZ;\n\t\t\t\t\t\ta31 /= tm.scaleX;\n\t\t\t\t\t\ta32 /= tm.scaleY;\n\t\t\t\t\t\ta33 /= tm.scaleZ;\n\t\t\t\t\t\ttransform += ((a11 < min && a11 > -min) ? zero : a11) + comma + ((a21 < min && a21 > -min) ? zero : a21) + comma + ((a31 < min && a31 > -min) ? zero : a31);\n\t\t\t\t\t\ttransform += comma + ((a41 < min && a41 > -min) ? zero : a41) + comma + ((a12 < min && a12 > -min) ? zero : a12) + comma + ((a22 < min && a22 > -min) ? zero : a22);\n\t\t\t\t\t\ttransform += comma + ((a32 < min && a32 > -min) ? zero : a32) + comma + ((a42 < min && a42 > -min) ? zero : a42) + comma + ((a13 < min && a13 > -min) ? zero : a13);\n\t\t\t\t\t\ttransform += comma + ((a23 < min && a23 > -min) ? zero : a23) + comma + ((a33 < min && a33 > -min) ? zero : a33) + comma + ((a43 < min && a43 > -min) ? zero : a43) + comma;\n\t\t\t\t\t\ttransform += a14 + comma + a24 + comma + a34 + comma + (tm.perspective ? (1 + (-a34 / tm.perspective)) : 1) + \"")\"";\n\t\t\t\t\t\tconsole.log(transform);\n\t\t\t\t\t\tdocument.querySelector(\"".test\"").style[_transformProp] = transform;\n\t\t\t\t\t\t*/\n\n\t\t\t\t\t\ttm.perspective = a43 ? 1 / ((a43 < 0) ? -a43 : a43) : 0;\n\t\t\t\t\t\ttm.x = a14;\n\t\t\t\t\t\ttm.y = a24;\n\t\t\t\t\t\ttm.z = a34;\n\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a11 - tm.yOrigin * a12);\n\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.yOrigin * a21 - tm.xOrigin * a22);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ((!_supports3D || parse || !m.length || tm.x !== m[4] || tm.y !== m[5] || (!tm.rotationX && !tm.rotationY))) { //sometimes a 6-element matrix is returned even when we performed 3D transforms, like if rotationX and rotationY are 180. In cases like this, we still need to honor the 3D transforms. If we just rely on the 2D info, it could affect how the data is interpreted, like scaleY might get set to -1 or rotation could get offset by 180 degrees. For example, do a TweenLite.to(element, 1, {css:{rotationX:180, rotationY:180}}) and then later, TweenLite.to(element, 1, {css:{rotationX:0}}) and without this conditional logic in place, it'd jump to a state of being unrotated when the 2nd tween starts. Then again, we need to honor the fact that the user COULD alter the transforms outside of CSSPlugin, like by manually applying new css, so we try to sense that by looking at x and y because if those changed, we know the changes were made outside CSSPlugin and we force a reinterpretation of the matrix values. Also, in Webkit browsers, if the element's \""display\"" is \""none\"", its calculated style value will always return empty, so if we've already recorded the values in the _gsTransform object, we'll just rely on those.\n\t\t\t\t\t\tvar k = (m.length >= 6),\n\t\t\t\t\t\t\ta = k ? m[0] : 1,\n\t\t\t\t\t\t\tb = m[1] || 0,\n\t\t\t\t\t\t\tc = m[2] || 0,\n\t\t\t\t\t\t\td = k ? m[3] : 1;\n\t\t\t\t\t\ttm.x = m[4] || 0;\n\t\t\t\t\t\ttm.y = m[5] || 0;\n\t\t\t\t\t\tscaleX = Math.sqrt(a * a + b * b);\n\t\t\t\t\t\tscaleY = Math.sqrt(d * d + c * c);\n\t\t\t\t\t\trotation = (a || b) ? Math.atan2(b, a) * _RAD2DEG : tm.rotation || 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\t\t\t\t\t\tskewX = (c || d) ? Math.atan2(c, d) * _RAD2DEG + rotation : tm.skewX || 0;\n\t\t\t\t\t\ttm.scaleX = scaleX;\n\t\t\t\t\t\ttm.scaleY = scaleY;\n\t\t\t\t\t\ttm.rotation = rotation;\n\t\t\t\t\t\ttm.skewX = skewX;\n\t\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\t\ttm.rotationX = tm.rotationY = tm.z = 0;\n\t\t\t\t\t\t\ttm.perspective = defaultTransformPerspective;\n\t\t\t\t\t\t\ttm.scaleZ = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tm.svg) {\n\t\t\t\t\t\t\ttm.x -= tm.xOrigin - (tm.xOrigin * a + tm.yOrigin * c);\n\t\t\t\t\t\t\ttm.y -= tm.yOrigin - (tm.xOrigin * b + tm.yOrigin * d);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (Math.abs(tm.skewX) > 90 && Math.abs(tm.skewX) < 270) {\n\t\t\t\t\t\tif (invX) {\n\t\t\t\t\t\t\ttm.scaleX *= -1;\n\t\t\t\t\t\t\ttm.skewX += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t\ttm.rotation += (tm.rotation <= 0) ? 180 : -180;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttm.scaleY *= -1;\n\t\t\t\t\t\t\ttm.skewX += (tm.skewX <= 0) ? 180 : -180;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttm.zOrigin = zOrigin;\n\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \""e-\"" towards the end) and would render the object slightly off. So we round to 0 in these cases. The conditional logic here is faster than calling Math.abs(). Also, browsers tend to render a SLIGHTLY rotated object in a fuzzy way, so we need to snap to exactly 0 when appropriate.\n\t\t\t\t\tfor (i in tm) {\n\t\t\t\t\t\tif (tm[i] < min) if (tm[i] > -min) {\n\t\t\t\t\t\t\ttm[i] = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//DEBUG: _log(\""parsed rotation of \"" + t.getAttribute(\""id\"")+\"": \""+(tm.rotationX)+\"", \""+(tm.rotationY)+\"", \""+(tm.rotation)+\"", scale: \""+tm.scaleX+\"", \""+tm.scaleY+\"", \""+tm.scaleZ+\"", position: \""+tm.x+\"", \""+tm.y+\"", \""+tm.z+\"", perspective: \""+tm.perspective+ \"", origin: \""+ tm.xOrigin+ \"",\""+ tm.yOrigin);\n\t\t\t\tif (rec) {\n\t\t\t\t\tt._gsTransform = tm; //record to the object's _gsTransform which we use so that tweens can control individual properties independently (we need all the properties to accurately recompose the matrix in the setRatio() method)\n\t\t\t\t\tif (tm.svg) { //if we're supposed to apply transforms to the SVG element's \""transform\"" attribute, make sure there aren't any CSS transforms applied or they'll override the attribute ones. Also clear the transform attribute if we're using CSS, just to be clean.\n\t\t\t\t\t\tif (_useSVGTransformAttr && t.style[_transformProp]) {\n\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){ //if we apply this right away (before anything has rendered), we risk there being no transforms for a brief moment and it also interferes with adjusting the transformOrigin in a tween with immediateRender:true (it'd try reading the matrix and it wouldn't have the appropriate data in place because we just removed it).\n\t\t\t\t\t\t\t\t_removeProp(t.style, _transformProp);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (!_useSVGTransformAttr && t.getAttribute(\""transform\"")) {\n\t\t\t\t\t\t\tTweenLite.delayedCall(0.001, function(){\n\t\t\t\t\t\t\t\tt.removeAttribute(\""transform\"");\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn tm;\n\t\t\t},\n\n\t\t\t//for setting 2D transforms in IE6, IE7, and IE8 (must use a \""filter\"" to emulate the behavior of modern day browser transforms)\n\t\t\t_setIETransformRatio = function(v) {\n\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\tang = -t.rotation * _DEG2RAD,\n\t\t\t\t\tskew = ang + t.skewX * _DEG2RAD,\n\t\t\t\t\trnd = 100000,\n\t\t\t\t\ta = ((Math.cos(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\tb = ((Math.sin(ang) * t.scaleX * rnd) | 0) / rnd,\n\t\t\t\t\tc = ((Math.sin(skew) * -t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\td = ((Math.cos(skew) * t.scaleY * rnd) | 0) / rnd,\n\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\tcs = this.t.currentStyle,\n\t\t\t\t\tfilters, val;\n\t\t\t\tif (!cs) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tval = b; //just for swapping the variables an inverting them (reused \""val\"" to avoid creating another variable in memory). IE's filter matrix uses a non-standard matrix configuration (angle goes the opposite way, and b and c are reversed and inverted)\n\t\t\t\tb = -c;\n\t\t\t\tc = -val;\n\t\t\t\tfilters = cs.filter;\n\t\t\t\tstyle.filter = \""\""; //remove filters so that we can accurately measure offsetWidth/offsetHeight\n\t\t\t\tvar w = this.t.offsetWidth,\n\t\t\t\t\th = this.t.offsetHeight,\n\t\t\t\t\tclip = (cs.position !== \""absolute\""),\n\t\t\t\t\tm = \""progid:DXImageTransform.Microsoft.Matrix(M11=\"" + a + \"", M12=\"" + b + \"", M21=\"" + c + \"", M22=\"" + d,\n\t\t\t\t\tox = t.x + (w * t.xPercent / 100),\n\t\t\t\t\toy = t.y + (h * t.yPercent / 100),\n\t\t\t\t\tdx, dy;\n\n\t\t\t\t//if transformOrigin is being used, adjust the offset x and y\n\t\t\t\tif (t.ox != null) {\n\t\t\t\t\tdx = ((t.oxp) ? w * t.ox * 0.01 : t.ox) - w / 2;\n\t\t\t\t\tdy = ((t.oyp) ? h * t.oy * 0.01 : t.oy) - h / 2;\n\t\t\t\t\tox += dx - (dx * a + dy * b);\n\t\t\t\t\toy += dy - (dx * c + dy * d);\n\t\t\t\t}\n\n\t\t\t\tif (!clip) {\n\t\t\t\t\tm += \"", sizingMethod='auto expand')\"";\n\t\t\t\t} else {\n\t\t\t\t\tdx = (w / 2);\n\t\t\t\t\tdy = (h / 2);\n\t\t\t\t\t//translate to ensure that transformations occur around the correct origin (default is center).\n\t\t\t\t\tm += \"", Dx=\"" + (dx - (dx * a + dy * b) + ox) + \"", Dy=\"" + (dy - (dx * c + dy * d) + oy) + \"")\"";\n\t\t\t\t}\n\t\t\t\tif (filters.indexOf(\""DXImageTransform.Microsoft.Matrix(\"") !== -1) {\n\t\t\t\t\tstyle.filter = filters.replace(_ieSetMatrixExp, m);\n\t\t\t\t} else {\n\t\t\t\t\tstyle.filter = m + \"" \"" + filters; //we must always put the transform/matrix FIRST (before alpha(opacity=xx)) to avoid an IE bug that slices part of the object when rotation is applied with alpha.\n\t\t\t\t}\n\n\t\t\t\t//at the end or beginning of the tween, if the matrix is normal (1, 0, 0, 1) and opacity is 100 (or doesn't exist), remove the filter to improve browser performance.\n\t\t\t\tif (v === 0 || v === 1) if (a === 1) if (b === 0) if (c === 0) if (d === 1) if (!clip || m.indexOf(\""Dx=0, Dy=0\"") !== -1) if (!_opacityExp.test(filters) || parseFloat(RegExp.$1) === 100) if (filters.indexOf(\""gradient(\"" && filters.indexOf(\""Alpha\"")) === -1) {\n\t\t\t\t\tstyle.removeAttribute(\""filter\"");\n\t\t\t\t}\n\n\t\t\t\t//we must set the margins AFTER applying the filter in order to avoid some bugs in IE8 that could (in rare scenarios) cause them to be ignored intermittently (vibration).\n\t\t\t\tif (!clip) {\n\t\t\t\t\tvar mult = (_ieVers < 8) ? 1 : -1, //in Internet Explorer 7 and before, the box model is broken, causing the browser to treat the width/height of the actual rotated filtered image as the width/height of the box itself, but Microsoft corrected that in IE8. We must use a negative offset in IE8 on the right/bottom\n\t\t\t\t\t\tmarg, prop, dif;\n\t\t\t\t\tdx = t.ieOffsetX || 0;\n\t\t\t\t\tdy = t.ieOffsetY || 0;\n\t\t\t\t\tt.ieOffsetX = Math.round((w - ((a < 0 ? -a : a) * w + (b < 0 ? -b : b) * h)) / 2 + ox);\n\t\t\t\t\tt.ieOffsetY = Math.round((h - ((d < 0 ? -d : d) * h + (c < 0 ? -c : c) * w)) / 2 + oy);\n\t\t\t\t\tfor (i = 0; i < 4; i++) {\n\t\t\t\t\t\tprop = _margins[i];\n\t\t\t\t\t\tmarg = cs[prop];\n\t\t\t\t\t\t//we need to get the current margin in case it is being tweened separately (we want to respect that tween's changes)\n\t\t\t\t\t\tval = (marg.indexOf(\""px\"") !== -1) ? parseFloat(marg) : _convertToPixels(this.t, prop, parseFloat(marg), marg.replace(_suffixExp, \""\"")) || 0;\n\t\t\t\t\t\tif (val !== t[prop]) {\n\t\t\t\t\t\t\tdif = (i < 2) ? -t.ieOffsetX : -t.ieOffsetY; //if another tween is controlling a margin, we cannot only apply the difference in the ieOffsets, so we essentially zero-out the dx and dy here in that case. We record the margin(s) later so that we can keep comparing them, making this code very flexible.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdif = (i < 2) ? dx - t.ieOffsetX : dy - t.ieOffsetY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle[prop] = (t[prop] = Math.round( val - dif * ((i === 0 || i === 2) ? 1 : mult) )) + \""px\"";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/* translates a super small decimal to a string WITHOUT scientific notation\n\t\t\t_safeDecimal = function(n) {\n\t\t\t\tvar s = (n < 0 ? -n : n) + \""\"",\n\t\t\t\t\ta = s.split(\""e-\"");\n\t\t\t\treturn (n < 0 ? \""-0.\"" : \""0.\"") + new Array(parseInt(a[1], 10) || 0).join(\""0\"") + a[0].split(\"".\"").join(\""\"");\n\t\t\t},\n\t\t\t*/\n\n\t\t\t_setTransformRatio = _internals.set3DTransformRatio = _internals.setTransformRatio = function(v) {\n\t\t\t\tvar t = this.data, //refers to the element's _gsTransform object\n\t\t\t\t\tstyle = this.t.style,\n\t\t\t\t\tangle = t.rotation,\n\t\t\t\t\trotationX = t.rotationX,\n\t\t\t\t\trotationY = t.rotationY,\n\t\t\t\t\tsx = t.scaleX,\n\t\t\t\t\tsy = t.scaleY,\n\t\t\t\t\tsz = t.scaleZ,\n\t\t\t\t\tx = t.x,\n\t\t\t\t\ty = t.y,\n\t\t\t\t\tz = t.z,\n\t\t\t\t\tisSVG = t.svg,\n\t\t\t\t\tperspective = t.perspective,\n\t\t\t\t\tforce3D = t.force3D,\n\t\t\t\t\tskewY = t.skewY,\n\t\t\t\t\tskewX = t.skewX,\n\t\t\t\t\tt1,\ta11, a12, a13, a21, a22, a23, a31, a32, a33, a41, a42, a43,\n\t\t\t\t\tzOrigin, min, cos, sin, t2, transform, comma, zero, skew, rnd;\n\t\t\t\tif (skewY) { //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.\n\t\t\t\t\tskewX += skewY;\n\t\t\t\t\tangle += skewY;\n\t\t\t\t}\n\n\t\t\t\t//check to see if we should render as 2D (and SVGs must use 2D when _useSVGTransformAttr is true)\n\t\t\t\tif (((((v === 1 || v === 0) && force3D === \""auto\"" && (this.tween._totalTime === this.tween._totalDuration || !this.tween._totalTime)) || !force3D) && !z && !perspective && !rotationY && !rotationX && sz === 1) || (_useSVGTransformAttr && isSVG) || !_supports3D) { //on the final render (which could be 0 for a from tween), if there are no 3D aspects, render in 2D to free up memory and improve performance especially on mobile devices. Check the tween's totalTime/totalDuration too in order to make sure it doesn't happen between repeats if it's a repeating tween.\n\n\t\t\t\t\t//2D\n\t\t\t\t\tif (angle || skewX || isSVG) {\n\t\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\t\tskew = skewX * _DEG2RAD;\n\t\t\t\t\t\trnd = 100000;\n\t\t\t\t\t\ta11 = Math.cos(angle) * sx;\n\t\t\t\t\t\ta21 = Math.sin(angle) * sx;\n\t\t\t\t\t\ta12 = Math.sin(angle - skew) * -sy;\n\t\t\t\t\t\ta22 = Math.cos(angle - skew) * sy;\n\t\t\t\t\t\tif (skew && t.skewType === \""simple\"") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \""simple\"" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\tt1 = Math.tan(skew - skewY * _DEG2RAD);\n\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\ta12 *= t1;\n\t\t\t\t\t\t\ta22 *= t1;\n\t\t\t\t\t\t\tif (skewY) {\n\t\t\t\t\t\t\t\tt1 = Math.tan(skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isSVG) {\n\t\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t\t\tif (_useSVGTransformAttr && (t.xPercent || t.yPercent)) { //The SVG spec doesn't support percentage-based translation in the \""transform\"" attribute, so we merge it into the matrix to simulate it.\n\t\t\t\t\t\t\t\tmin = this.t.getBBox();\n\t\t\t\t\t\t\t\tx += t.xPercent * 0.01 * min.width;\n\t\t\t\t\t\t\t\ty += t.yPercent * 0.01 * min.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmin = 0.000001;\n\t\t\t\t\t\t\tif (x < min) if (x > -min) {\n\t\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (y < min) if (y > -min) {\n\t\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransform = (((a11 * rnd) | 0) / rnd) + \"",\"" + (((a21 * rnd) | 0) / rnd) + \"",\"" + (((a12 * rnd) | 0) / rnd) + \"",\"" + (((a22 * rnd) | 0) / rnd) + \"",\"" + x + \"",\"" + y + \"")\"";\n\t\t\t\t\t\tif (isSVG && _useSVGTransformAttr) {\n\t\t\t\t\t\t\tthis.t.setAttribute(\""transform\"", \""matrix(\"" + transform);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//some browsers have a hard time with very small values like 2.4492935982947064e-16 (notice the \""e-\"" towards the end) and would render the object slightly off. So we round to 5 decimal places.\n\t\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \""translate(\"" + t.xPercent + \""%,\"" + t.yPercent + \""%) matrix(\"" : \""matrix(\"") + transform;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \""translate(\"" + t.xPercent + \""%,\"" + t.yPercent + \""%) matrix(\"" : \""matrix(\"") + sx + \"",0,0,\"" + sy + \"",\"" + x + \"",\"" + y + \"")\"";\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\t\t\t\tif (_isFirefox) { //Firefox has a bug (at least in v25) that causes it to render the transparent part of 32-bit PNG images as black when displayed inside an iframe and the 3D scale is very small and doesn't change sufficiently enough between renders (like if you use a Power4.easeInOut to scale from 0 to 1 where the beginning values only change a tiny amount to begin the tween before accelerating). In this case, we force the scale to be 0.00002 instead which is visually the same but works around the Firefox issue.\n\t\t\t\t\tmin = 0.0001;\n\t\t\t\t\tif (sx < min && sx > -min) {\n\t\t\t\t\t\tsx = sz = 0.00002;\n\t\t\t\t\t}\n\t\t\t\t\tif (sy < min && sy > -min) {\n\t\t\t\t\t\tsy = sz = 0.00002;\n\t\t\t\t\t}\n\t\t\t\t\tif (perspective && !t.z && !t.rotationX && !t.rotationY) { //Firefox has a bug that causes elements to have an odd super-thin, broken/dotted black border on elements that have a perspective set but aren't utilizing 3D space (no rotationX, rotationY, or z).\n\t\t\t\t\t\tperspective = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (angle || skewX) {\n\t\t\t\t\tangle *= _DEG2RAD;\n\t\t\t\t\tcos = a11 = Math.cos(angle);\n\t\t\t\t\tsin = a21 = Math.sin(angle);\n\t\t\t\t\tif (skewX) {\n\t\t\t\t\t\tangle -= skewX * _DEG2RAD;\n\t\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\t\tif (t.skewType === \""simple\"") { //by default, we compensate skewing on the other axis to make it look more natural, but you can set the skewType to \""simple\"" to use the uncompensated skewing that CSS does\n\t\t\t\t\t\t\tt1 = Math.tan((skewX - skewY) * _DEG2RAD);\n\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\tcos *= t1;\n\t\t\t\t\t\t\tsin *= t1;\n\t\t\t\t\t\t\tif (t.skewY) {\n\t\t\t\t\t\t\t\tt1 = Math.tan(skewY * _DEG2RAD);\n\t\t\t\t\t\t\t\tt1 = Math.sqrt(1 + t1 * t1);\n\t\t\t\t\t\t\t\ta11 *= t1;\n\t\t\t\t\t\t\t\ta21 *= t1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta12 = -sin;\n\t\t\t\t\ta22 = cos;\n\n\t\t\t\t} else if (!rotationY && !rotationX && sz === 1 && !perspective && !isSVG) { //if we're only translating and/or 2D scaling, this is faster...\n\t\t\t\t\tstyle[_transformProp] = ((t.xPercent || t.yPercent) ? \""translate(\"" + t.xPercent + \""%,\"" + t.yPercent + \""%) translate3d(\"" : \""translate3d(\"") + x + \""px,\"" + y + \""px,\"" + z +\""px)\"" + ((sx !== 1 || sy !== 1) ? \"" scale(\"" + sx + \"",\"" + sy + \"")\"" : \""\"");\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\ta11 = a22 = 1;\n\t\t\t\t\ta12 = a21 = 0;\n\t\t\t\t}\n\t\t\t\t// KEY  INDEX   AFFECTS a[row][column]\n\t\t\t\t// a11  0       rotation, rotationY, scaleX\n\t\t\t\t// a21  1       rotation, rotationY, scaleX\n\t\t\t\t// a31  2       rotationY, scaleX\n\t\t\t\t// a41  3       rotationY, scaleX\n\t\t\t\t// a12  4       rotation, skewX, rotationX, scaleY\n\t\t\t\t// a22  5       rotation, skewX, rotationX, scaleY\n\t\t\t\t// a32  6       rotationX, scaleY\n\t\t\t\t// a42  7       rotationX, scaleY\n\t\t\t\t// a13  8       rotationY, rotationX, scaleZ\n\t\t\t\t// a23  9       rotationY, rotationX, scaleZ\n\t\t\t\t// a33  10      rotationY, rotationX, scaleZ\n\t\t\t\t// a43  11      rotationY, rotationX, perspective, scaleZ\n\t\t\t\t// a14  12      x, zOrigin, svgOrigin\n\t\t\t\t// a24  13      y, zOrigin, svgOrigin\n\t\t\t\t// a34  14      z, zOrigin\n\t\t\t\t// a44  15\n\t\t\t\t// rotation: Math.atan2(a21, a11)\n\t\t\t\t// rotationY: Math.atan2(a13, a33) (or Math.atan2(a13, a11))\n\t\t\t\t// rotationX: Math.atan2(a32, a33)\n\t\t\t\ta33 = 1;\n\t\t\t\ta13 = a23 = a31 = a32 = a41 = a42 = 0;\n\t\t\t\ta43 = (perspective) ? -1 / perspective : 0;\n\t\t\t\tzOrigin = t.zOrigin;\n\t\t\t\tmin = 0.000001; //threshold below which browsers use scientific notation which won't work.\n\t\t\t\tcomma = \"",\"";\n\t\t\t\tzero = \""0\"";\n\t\t\t\tangle = rotationY * _DEG2RAD;\n\t\t\t\tif (angle) {\n\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\ta31 = -sin;\n\t\t\t\t\ta41 = a43*-sin;\n\t\t\t\t\ta13 = a11*sin;\n\t\t\t\t\ta23 = a21*sin;\n\t\t\t\t\ta33 = cos;\n\t\t\t\t\ta43 *= cos;\n\t\t\t\t\ta11 *= cos;\n\t\t\t\t\ta21 *= cos;\n\t\t\t\t}\n\t\t\t\tangle = rotationX * _DEG2RAD;\n\t\t\t\tif (angle) {\n\t\t\t\t\tcos = Math.cos(angle);\n\t\t\t\t\tsin = Math.sin(angle);\n\t\t\t\t\tt1 = a12*cos+a13*sin;\n\t\t\t\t\tt2 = a22*cos+a23*sin;\n\t\t\t\t\ta32 = a33*sin;\n\t\t\t\t\ta42 = a43*sin;\n\t\t\t\t\ta13 = a12*-sin+a13*cos;\n\t\t\t\t\ta23 = a22*-sin+a23*cos;\n\t\t\t\t\ta33 = a33*cos;\n\t\t\t\t\ta43 = a43*cos;\n\t\t\t\t\ta12 = t1;\n\t\t\t\t\ta22 = t2;\n\t\t\t\t}\n\t\t\t\tif (sz !== 1) {\n\t\t\t\t\ta13*=sz;\n\t\t\t\t\ta23*=sz;\n\t\t\t\t\ta33*=sz;\n\t\t\t\t\ta43*=sz;\n\t\t\t\t}\n\t\t\t\tif (sy !== 1) {\n\t\t\t\t\ta12*=sy;\n\t\t\t\t\ta22*=sy;\n\t\t\t\t\ta32*=sy;\n\t\t\t\t\ta42*=sy;\n\t\t\t\t}\n\t\t\t\tif (sx !== 1) {\n\t\t\t\t\ta11*=sx;\n\t\t\t\t\ta21*=sx;\n\t\t\t\t\ta31*=sx;\n\t\t\t\t\ta41*=sx;\n\t\t\t\t}\n\n\t\t\t\tif (zOrigin || isSVG) {\n\t\t\t\t\tif (zOrigin) {\n\t\t\t\t\t\tx += a13*-zOrigin;\n\t\t\t\t\t\ty += a23*-zOrigin;\n\t\t\t\t\t\tz += a33*-zOrigin+zOrigin;\n\t\t\t\t\t}\n\t\t\t\t\tif (isSVG) { //due to bugs in some browsers, we need to manage the transform-origin of SVG manually\n\t\t\t\t\t\tx += t.xOrigin - (t.xOrigin * a11 + t.yOrigin * a12) + t.xOffset;\n\t\t\t\t\t\ty += t.yOrigin - (t.xOrigin * a21 + t.yOrigin * a22) + t.yOffset;\n\t\t\t\t\t}\n\t\t\t\t\tif (x < min && x > -min) {\n\t\t\t\t\t\tx = zero;\n\t\t\t\t\t}\n\t\t\t\t\tif (y < min && y > -min) {\n\t\t\t\t\t\ty = zero;\n\t\t\t\t\t}\n\t\t\t\t\tif (z < min && z > -min) {\n\t\t\t\t\t\tz = 0; //don't use string because we calculate perspective later and need the number.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//optimized way of concatenating all the values into a string. If we do it all in one shot, it's slower because of the way browsers have to create temp strings and the way it affects memory. If we do it piece-by-piece with +=, it's a bit slower too. We found that doing it in these sized chunks works best overall:\n\t\t\t\ttransform = ((t.xPercent || t.yPercent) ? \""translate(\"" + t.xPercent + \""%,\"" + t.yPercent + \""%) matrix3d(\"" : \""matrix3d(\"");\n\t\t\t\ttransform += ((a11 < min && a11 > -min) ? zero : a11) + comma + ((a21 < min && a21 > -min) ? zero : a21) + comma + ((a31 < min && a31 > -min) ? zero : a31);\n\t\t\t\ttransform += comma + ((a41 < min && a41 > -min) ? zero : a41) + comma + ((a12 < min && a12 > -min) ? zero : a12) + comma + ((a22 < min && a22 > -min) ? zero : a22);\n\t\t\t\tif (rotationX || rotationY || sz !== 1) { //performance optimization (often there's no rotationX or rotationY, so we can skip these calculations)\n\t\t\t\t\ttransform += comma + ((a32 < min && a32 > -min) ? zero : a32) + comma + ((a42 < min && a42 > -min) ? zero : a42) + comma + ((a13 < min && a13 > -min) ? zero : a13);\n\t\t\t\t\ttransform += comma + ((a23 < min && a23 > -min) ? zero : a23) + comma + ((a33 < min && a33 > -min) ? zero : a33) + comma + ((a43 < min && a43 > -min) ? zero : a43) + comma;\n\t\t\t\t} else {\n\t\t\t\t\ttransform += \"",0,0,0,0,1,0,\"";\n\t\t\t\t}\n\t\t\t\ttransform += x + comma + y + comma + z + comma + (perspective ? (1 + (-z / perspective)) : 1) + \"")\"";\n\n\t\t\t\tstyle[_transformProp] = transform;\n\t\t\t};\n\n\t\tp = Transform.prototype;\n\t\tp.x = p.y = p.z = p.skewX = p.skewY = p.rotation = p.rotationX = p.rotationY = p.zOrigin = p.xPercent = p.yPercent = p.xOffset = p.yOffset = 0;\n\t\tp.scaleX = p.scaleY = p.scaleZ = 1;\n\n\t\t_registerComplexSpecialProp(\""transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin\"", {parser:function(t, e, parsingProp, cssp, pt, plugin, vars) {\n\t\t\tif (cssp._lastParsedTransform === vars) { return pt; } //only need to parse the transform once, and only if the browser supports it.\n\t\t\tcssp._lastParsedTransform = vars;\n\t\t\tvar scaleFunc = (vars.scale && typeof(vars.scale) === \""function\"") ? vars.scale : 0; //if there's a function-based \""scale\"" value, swap in the resulting numeric value temporarily. Otherwise, if it's called for both scaleX and scaleY independently, they may not match (like if the function uses Math.random()).\n\t\t\tif (scaleFunc) {\n\t\t\t\tvars.scale = scaleFunc(_index, t);\n\t\t\t}\n\t\t\tvar originalGSTransform = t._gsTransform,\n\t\t\t\tstyle = t.style,\n\t\t\t\tmin = 0.000001,\n\t\t\t\ti = _transformProps.length,\n\t\t\t\tv = vars,\n\t\t\t\tendRotations = {},\n\t\t\t\ttransformOriginString = \""transformOrigin\"",\n\t\t\t\tm1 = _getTransform(t, _cs, true, v.parseTransform),\n\t\t\t\torig = v.transform && ((typeof(v.transform) === \""function\"") ? v.transform(_index, _target) : v.transform),\n\t\t\t\tm2, copy, has3D, hasChange, dr, x, y, matrix, p;\n\t\t\tm1.skewType = v.skewType || m1.skewType || CSSPlugin.defaultSkewType;\n\t\t\tcssp._transform = m1;\n\t\t\tif (\""rotationZ\"" in v) {\n\t\t\t\tv.rotation = v.rotationZ;\n\t\t\t}\n\t\t\tif (orig && typeof(orig) === \""string\"" && _transformProp) { //for values like transform:\""rotate(60deg) scale(0.5, 0.8)\""\n\t\t\t\tcopy = _tempDiv.style; //don't use the original target because it might be SVG in which case some browsers don't report computed style correctly.\n\t\t\t\tcopy[_transformProp] = orig;\n\t\t\t\tcopy.display = \""block\""; //if display is \""none\"", the browser often refuses to report the transform properties correctly.\n\t\t\t\tcopy.position = \""absolute\"";\n\t\t\t\tif (orig.indexOf(\""%\"") !== -1) { //%-based translations will fail unless we set the width/height to match the original target...\n\t\t\t\t\tcopy.width = _getStyle(t, \""width\"");\n\t\t\t\t\tcopy.height = _getStyle(t, \""height\"");\n\t\t\t\t}\n\t\t\t\t_doc.body.appendChild(_tempDiv);\n\t\t\t\tm2 = _getTransform(_tempDiv, null, false);\n\t\t\t\tif (m1.skewType === \""simple\"") { //the default _getTransform() reports the skewX/scaleY as if skewType is \""compensated\"", thus we need to adjust that here if skewType is \""simple\"".\n\t\t\t\t\tm2.scaleY *= Math.cos(m2.skewX * _DEG2RAD);\n\t\t\t\t}\n\t\t\t\tif (m1.svg) { //if it's an SVG element, x/y part of the matrix will be affected by whatever we use as the origin and the offsets, so compensate here...\n\t\t\t\t\tx = m1.xOrigin;\n\t\t\t\t\ty = m1.yOrigin;\n\t\t\t\t\tm2.x -= m1.xOffset;\n\t\t\t\t\tm2.y -= m1.yOffset;\n\t\t\t\t\tif (v.transformOrigin || v.svgOrigin) { //if this tween is altering the origin, we must factor that in here. The actual work of recording the transformOrigin values and setting up the PropTween is done later (still inside this function) so we cannot leave the changes intact here - we only want to update the x/y accordingly.\n\t\t\t\t\t\torig = {};\n\t\t\t\t\t\t_parseSVGOrigin(t, _parsePosition(v.transformOrigin), orig, v.svgOrigin, v.smoothOrigin, true);\n\t\t\t\t\t\tx = orig.xOrigin;\n\t\t\t\t\t\ty = orig.yOrigin;\n\t\t\t\t\t\tm2.x -= orig.xOffset - m1.xOffset;\n\t\t\t\t\t\tm2.y -= orig.yOffset - m1.yOffset;\n\t\t\t\t\t}\n\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\tmatrix = _getMatrix(_tempDiv, true);\n\t\t\t\t\t\tm2.x -= x - (x * matrix[0] + y * matrix[2]);\n\t\t\t\t\t\tm2.y -= y - (x * matrix[1] + y * matrix[3]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_doc.body.removeChild(_tempDiv);\n\t\t\t\tif (!m2.perspective) {\n\t\t\t\t\tm2.perspective = m1.perspective; //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n\t\t\t\t}\n\t\t\t\tif (v.xPercent != null) {\n\t\t\t\t\tm2.xPercent = _parseVal(v.xPercent, m1.xPercent);\n\t\t\t\t}\n\t\t\t\tif (v.yPercent != null) {\n\t\t\t\t\tm2.yPercent = _parseVal(v.yPercent, m1.yPercent);\n\t\t\t\t}\n\t\t\t} else if (typeof(v) === \""object\"") { //for values like scaleX, scaleY, rotation, x, y, skewX, and skewY or transform:{...} (object)\n\t\t\t\tm2 = {scaleX:_parseVal((v.scaleX != null) ? v.scaleX : v.scale, m1.scaleX),\n\t\t\t\t\tscaleY:_parseVal((v.scaleY != null) ? v.scaleY : v.scale, m1.scaleY),\n\t\t\t\t\tscaleZ:_parseVal(v.scaleZ, m1.scaleZ),\n\t\t\t\t\tx:_parseVal(v.x, m1.x),\n\t\t\t\t\ty:_parseVal(v.y, m1.y),\n\t\t\t\t\tz:_parseVal(v.z, m1.z),\n\t\t\t\t\txPercent:_parseVal(v.xPercent, m1.xPercent),\n\t\t\t\t\tyPercent:_parseVal(v.yPercent, m1.yPercent),\n\t\t\t\t\tperspective:_parseVal(v.transformPerspective, m1.perspective)};\n\t\t\t\tdr = v.directionalRotation;\n\t\t\t\tif (dr != null) {\n\t\t\t\t\tif (typeof(dr) === \""object\"") {\n\t\t\t\t\t\tfor (copy in dr) {\n\t\t\t\t\t\t\tv[copy] = dr[copy];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv.rotation = dr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof(v.x) === \""string\"" && v.x.indexOf(\""%\"") !== -1) {\n\t\t\t\t\tm2.x = 0;\n\t\t\t\t\tm2.xPercent = _parseVal(v.x, m1.xPercent);\n\t\t\t\t}\n\t\t\t\tif (typeof(v.y) === \""string\"" && v.y.indexOf(\""%\"") !== -1) {\n\t\t\t\t\tm2.y = 0;\n\t\t\t\t\tm2.yPercent = _parseVal(v.y, m1.yPercent);\n\t\t\t\t}\n\n\t\t\t\tm2.rotation = _parseAngle((\""rotation\"" in v) ? v.rotation : (\""shortRotation\"" in v) ? v.shortRotation + \""_short\"" : m1.rotation, m1.rotation, \""rotation\"", endRotations);\n\t\t\t\tif (_supports3D) {\n\t\t\t\t\tm2.rotationX = _parseAngle((\""rotationX\"" in v) ? v.rotationX : (\""shortRotationX\"" in v) ? v.shortRotationX + \""_short\"" : m1.rotationX || 0, m1.rotationX, \""rotationX\"", endRotations);\n\t\t\t\t\tm2.rotationY = _parseAngle((\""rotationY\"" in v) ? v.rotationY : (\""shortRotationY\"" in v) ? v.shortRotationY + \""_short\"" : m1.rotationY || 0, m1.rotationY, \""rotationY\"", endRotations);\n\t\t\t\t}\n\t\t\t\tm2.skewX = _parseAngle(v.skewX, m1.skewX);\n\t\t\t\tm2.skewY = _parseAngle(v.skewY, m1.skewY);\n\t\t\t}\n\t\t\tif (_supports3D && v.force3D != null) {\n\t\t\t\tm1.force3D = v.force3D;\n\t\t\t\thasChange = true;\n\t\t\t}\n\n\t\t\thas3D = (m1.force3D || m1.z || m1.rotationX || m1.rotationY || m2.z || m2.rotationX || m2.rotationY || m2.perspective);\n\t\t\tif (!has3D && v.scale != null) {\n\t\t\t\tm2.scaleZ = 1; //no need to tween scaleZ.\n\t\t\t}\n\n\t\t\twhile (--i > -1) {\n\t\t\t\tp = _transformProps[i];\n\t\t\t\torig = m2[p] - m1[p];\n\t\t\t\tif (orig > min || orig < -min || v[p] != null || _forcePT[p] != null) {\n\t\t\t\t\thasChange = true;\n\t\t\t\t\tpt = new CSSPropTween(m1, p, m1[p], orig, pt);\n\t\t\t\t\tif (p in endRotations) {\n\t\t\t\t\t\tpt.e = endRotations[p]; //directional rotations typically have compensated values during the tween, but we need to make sure they end at exactly what the user requested\n\t\t\t\t\t}\n\t\t\t\t\tpt.xs0 = 0; //ensures the value stays numeric in setRatio()\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torig = (typeof(v.transformOrigin) === \""function\"") ? v.transformOrigin(_index, _target) : v.transformOrigin;\n\t\t\tif (m1.svg && (orig || v.svgOrigin)) {\n\t\t\t\tx = m1.xOffset; //when we change the origin, in order to prevent things from jumping we adjust the x/y so we must record those here so that we can create PropTweens for them and flip them at the same time as the origin\n\t\t\t\ty = m1.yOffset;\n\t\t\t\t_parseSVGOrigin(t, _parsePosition(orig), m2, v.svgOrigin, v.smoothOrigin);\n\t\t\t\tpt = _addNonTweeningNumericPT(m1, \""xOrigin\"", (originalGSTransform ? m1 : m2).xOrigin, m2.xOrigin, pt, transformOriginString); //note: if there wasn't a transformOrigin defined yet, just start with the destination one; it's wasteful otherwise, and it causes problems with fromTo() tweens. For example, TweenLite.to(\""#wheel\"", 3, {rotation:180, transformOrigin:\""50% 50%\"", delay:1}); TweenLite.fromTo(\""#wheel\"", 3, {scale:0.5, transformOrigin:\""50% 50%\""}, {scale:1, delay:2}); would cause a jump when the from values revert at the beginning of the 2nd tween.\n\t\t\t\tpt = _addNonTweeningNumericPT(m1, \""yOrigin\"", (originalGSTransform ? m1 : m2).yOrigin, m2.yOrigin, pt, transformOriginString);\n\t\t\t\tif (x !== m1.xOffset || y !== m1.yOffset) {\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \""xOffset\"", (originalGSTransform ? x : m1.xOffset), m1.xOffset, pt, transformOriginString);\n\t\t\t\t\tpt = _addNonTweeningNumericPT(m1, \""yOffset\"", (originalGSTransform ? y : m1.yOffset), m1.yOffset, pt, transformOriginString);\n\t\t\t\t}\n\t\t\t\torig = \""0px 0px\""; //certain browsers (like firefox) completely botch transform-origin, so we must remove it to prevent it from contaminating transforms. We manage it ourselves with xOrigin and yOrigin\n\t\t\t}\n\t\t\tif (orig || (_supports3D && has3D && m1.zOrigin)) { //if anything 3D is happening and there's a transformOrigin with a z component that's non-zero, we must ensure that the transformOrigin's z-component is set to 0 so that we can manually do those calculations to get around Safari bugs. Even if the user didn't specifically define a \""transformOrigin\"" in this particular tween (maybe they did it via css directly).\n\t\t\t\tif (_transformProp) {\n\t\t\t\t\thasChange = true;\n\t\t\t\t\tp = _transformOriginProp;\n\t\t\t\t\tif (!orig) {\n\t\t\t\t\t\torig = (_getStyle(t, p, _cs, false, \""50% 50%\"") + \""\"").split(\"" \"");\n\t\t\t\t\t\torig = orig[0] + \"" \"" + orig[1] + \"" \"" + m1.zOrigin + \""px\"";\n\t\t\t\t\t}\n\t\t\t\t\torig += \""\"";\n\t\t\t\t\tpt = new CSSPropTween(style, p, 0, 0, pt, -1, transformOriginString);\n\t\t\t\t\tpt.b = style[p];\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t\tif (_supports3D) {\n\t\t\t\t\t\tcopy = m1.zOrigin;\n\t\t\t\t\t\torig = orig.split(\"" \"");\n\t\t\t\t\t\tm1.zOrigin = ((orig.length > 2) ? parseFloat(orig[2]) : copy) || 0; //Safari doesn't handle the z part of transformOrigin correctly, so we'll manually handle it in the _set3DTransformRatio() method.\n\t\t\t\t\t\tpt.xs0 = pt.e = orig[0] + \"" \"" + (orig[1] || \""50%\"") + \"" 0px\""; //we must define a z value of 0px specifically otherwise iOS 5 Safari will stick with the old one (if one was defined)!\n\t\t\t\t\t\tpt = new CSSPropTween(m1, \""zOrigin\"", 0, 0, pt, -1, pt.n); //we must create a CSSPropTween for the _gsTransform.zOrigin so that it gets reset properly at the beginning if the tween runs backward (as opposed to just setting m1.zOrigin here)\n\t\t\t\t\t\tpt.b = copy;\n\t\t\t\t\t\tpt.xs0 = pt.e = m1.zOrigin;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.xs0 = pt.e = orig;\n\t\t\t\t\t}\n\n\t\t\t\t\t//for older versions of IE (6-8), we need to manually calculate things inside the setRatio() function. We record origin x and y (ox and oy) and whether or not the values are percentages (oxp and oyp).\n\t\t\t\t} else {\n\t\t\t\t\t_parsePosition(orig + \""\"", m1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasChange) {\n\t\t\t\tcssp._transformType = (!(m1.svg && _useSVGTransformAttr) && (has3D || this._transformType === 3)) ? 3 : 2; //quicker than calling cssp._enableTransforms();\n\t\t\t}\n\t\t\tif (scaleFunc) {\n\t\t\t\tvars.scale = scaleFunc;\n\t\t\t}\n\t\t\treturn pt;\n\t\t}, allowFunc:true, prefix:true});\n\n\t\t_registerComplexSpecialProp(\""boxShadow\"", {defaultValue:\""0px 0px 0px 0px #999\"", prefix:true, color:true, multi:true, keyword:\""inset\""});\n\t\t_registerComplexSpecialProp(\""clipPath\"", {defaultValue:\""inset(0%)\"", prefix:true, multi:true, formatter:_getFormatter(\""inset(0% 0% 0% 0%)\"", false, true)});\n\n\t\t_registerComplexSpecialProp(\""borderRadius\"", {defaultValue:\""0px\"", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\te = this.format(e);\n\t\t\tvar props = [\""borderTopLeftRadius\"",\""borderTopRightRadius\"",\""borderBottomRightRadius\"",\""borderBottomLeftRadius\""],\n\t\t\t\tstyle = t.style,\n\t\t\t\tea1, i, es2, bs2, bs, es, bn, en, w, h, esfx, bsfx, rel, hn, vn, em;\n\t\t\tw = parseFloat(t.offsetWidth);\n\t\t\th = parseFloat(t.offsetHeight);\n\t\t\tea1 = e.split(\"" \"");\n\t\t\tfor (i = 0; i < props.length; i++) { //if we're dealing with percentages, we must convert things separately for the horizontal and vertical axis!\n\t\t\t\tif (this.p.indexOf(\""border\"")) { //older browsers used a prefix\n\t\t\t\t\tprops[i] = _checkPropPrefix(props[i]);\n\t\t\t\t}\n\t\t\t\tbs = bs2 = _getStyle(t, props[i], _cs, false, \""0px\"");\n\t\t\t\tif (bs.indexOf(\"" \"") !== -1) {\n\t\t\t\t\tbs2 = bs.split(\"" \"");\n\t\t\t\t\tbs = bs2[0];\n\t\t\t\t\tbs2 = bs2[1];\n\t\t\t\t}\n\t\t\t\tes = es2 = ea1[i];\n\t\t\t\tbn = parseFloat(bs);\n\t\t\t\tbsfx = bs.substr((bn + \""\"").length);\n\t\t\t\trel = (es.charAt(1) === \""=\"");\n\t\t\t\tif (rel) {\n\t\t\t\t\ten = parseInt(es.charAt(0)+\""1\"", 10);\n\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\tesfx = es.substr((en + \""\"").length - (en < 0 ? 1 : 0)) || \""\"";\n\t\t\t\t} else {\n\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\tesfx = es.substr((en + \""\"").length);\n\t\t\t\t}\n\t\t\t\tif (esfx === \""\"") {\n\t\t\t\t\tesfx = _suffixMap[p] || bsfx;\n\t\t\t\t}\n\t\t\t\tif (esfx !== bsfx) {\n\t\t\t\t\thn = _convertToPixels(t, \""borderLeft\"", bn, bsfx); //horizontal number (we use a bogus \""borderLeft\"" property just because the _convertToPixels() method searches for the keywords \""Left\"", \""Right\"", \""Top\"", and \""Bottom\"" to determine of it's a horizontal or vertical property, and we need \""border\"" in the name so that it knows it should measure relative to the element itself, not its parent.\n\t\t\t\t\tvn = _convertToPixels(t, \""borderTop\"", bn, bsfx); //vertical number\n\t\t\t\t\tif (esfx === \""%\"") {\n\t\t\t\t\t\tbs = (hn / w * 100) + \""%\"";\n\t\t\t\t\t\tbs2 = (vn / h * 100) + \""%\"";\n\t\t\t\t\t} else if (esfx === \""em\"") {\n\t\t\t\t\t\tem = _convertToPixels(t, \""borderLeft\"", 1, \""em\"");\n\t\t\t\t\t\tbs = (hn / em) + \""em\"";\n\t\t\t\t\t\tbs2 = (vn / em) + \""em\"";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbs = hn + \""px\"";\n\t\t\t\t\t\tbs2 = vn + \""px\"";\n\t\t\t\t\t}\n\t\t\t\t\tif (rel) {\n\t\t\t\t\t\tes = (parseFloat(bs) + en) + esfx;\n\t\t\t\t\t\tes2 = (parseFloat(bs2) + en) + esfx;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = _parseComplex(style, props[i], bs + \"" \"" + bs2, es + \"" \"" + es2, false, \""0px\"", pt);\n\t\t\t}\n\t\t\treturn pt;\n\t\t}, prefix:true, formatter:_getFormatter(\""0px 0px 0px 0px\"", false, true)});\n\t\t_registerComplexSpecialProp(\""borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius\"", {defaultValue:\""0px\"", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\treturn _parseComplex(t.style, p, this.format(_getStyle(t, p, _cs, false, \""0px 0px\"")), this.format(e), false, \""0px\"", pt);\n\t\t}, prefix:true, formatter:_getFormatter(\""0px 0px\"", false, true)});\n\t\t_registerComplexSpecialProp(\""backgroundPosition\"", {defaultValue:\""0 0\"", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar bp = \""background-position\"",\n\t\t\t\tcs = (_cs || _getComputedStyle(t, null)),\n\t\t\t\tbs = this.format( ((cs) ? _ieVers ? cs.getPropertyValue(bp + \""-x\"") + \"" \"" + cs.getPropertyValue(bp + \""-y\"") : cs.getPropertyValue(bp) : t.currentStyle.backgroundPositionX + \"" \"" + t.currentStyle.backgroundPositionY) || \""0 0\""), //Internet Explorer doesn't report background-position correctly - we must query background-position-x and background-position-y and combine them (even in IE10). Before IE9, we must do the same with the currentStyle object and use camelCase\n\t\t\t\tes = this.format(e),\n\t\t\t\tba, ea, i, pct, overlap, src;\n\t\t\tif ((bs.indexOf(\""%\"") !== -1) !== (es.indexOf(\""%\"") !== -1) && es.split(\"",\"").length < 2) {\n\t\t\t\tsrc = _getStyle(t, \""backgroundImage\"").replace(_urlExp, \""\"");\n\t\t\t\tif (src && src !== \""none\"") {\n\t\t\t\t\tba = bs.split(\"" \"");\n\t\t\t\t\tea = es.split(\"" \"");\n\t\t\t\t\t_tempImg.setAttribute(\""src\"", src); //set the temp IMG's src to the background-image so that we can measure its width/height\n\t\t\t\t\ti = 2;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tbs = ba[i];\n\t\t\t\t\t\tpct = (bs.indexOf(\""%\"") !== -1);\n\t\t\t\t\t\tif (pct !== (ea[i].indexOf(\""%\"") !== -1)) {\n\t\t\t\t\t\t\toverlap = (i === 0) ? t.offsetWidth - _tempImg.width : t.offsetHeight - _tempImg.height;\n\t\t\t\t\t\t\tba[i] = pct ? (parseFloat(bs) / 100 * overlap) + \""px\"" : (parseFloat(bs) / overlap * 100) + \""%\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbs = ba.join(\"" \"");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, bs, es, pt, plugin);\n\t\t}, formatter:_parsePosition});\n\t\t_registerComplexSpecialProp(\""backgroundSize\"", {defaultValue:\""0 0\"", formatter:function(v) {\n\t\t\tv += \""\""; //ensure it's a string\n\t\t\treturn (v.substr(0,2) === \""co\"") ? v : _parsePosition(v.indexOf(\"" \"") === -1 ? v + \"" \"" + v : v); //if set to something like \""100% 100%\"", Safari typically reports the computed style as just \""100%\"" (no 2nd value), but we should ensure that there are two values, so copy the first one. Otherwise, it'd be interpreted as \""100% 0\"" (wrong). Also remember that it could be \""cover\"" or \""contain\"" which we can't tween but should be able to set.\n\t\t}});\n\t\t_registerComplexSpecialProp(\""perspective\"", {defaultValue:\""0px\"", prefix:true});\n\t\t_registerComplexSpecialProp(\""perspectiveOrigin\"", {defaultValue:\""50% 50%\"", prefix:true});\n\t\t_registerComplexSpecialProp(\""transformStyle\"", {prefix:true});\n\t\t_registerComplexSpecialProp(\""backfaceVisibility\"", {prefix:true});\n\t\t_registerComplexSpecialProp(\""userSelect\"", {prefix:true});\n\t\t_registerComplexSpecialProp(\""margin\"", {parser:_getEdgeParser(\""marginTop,marginRight,marginBottom,marginLeft\"")});\n\t\t_registerComplexSpecialProp(\""padding\"", {parser:_getEdgeParser(\""paddingTop,paddingRight,paddingBottom,paddingLeft\"")});\n\t\t_registerComplexSpecialProp(\""clip\"", {defaultValue:\""rect(0px,0px,0px,0px)\"", parser:function(t, e, p, cssp, pt, plugin){\n\t\t\tvar b, cs, delim;\n\t\t\tif (_ieVers < 9) { //IE8 and earlier don't report a \""clip\"" value in the currentStyle - instead, the values are split apart into clipTop, clipRight, clipBottom, and clipLeft. Also, in IE7 and earlier, the values inside rect() are space-delimited, not comma-delimited.\n\t\t\t\tcs = t.currentStyle;\n\t\t\t\tdelim = _ieVers < 8 ? \"" \"" : \"",\"";\n\t\t\t\tb = \""rect(\"" + cs.clipTop + delim + cs.clipRight + delim + cs.clipBottom + delim + cs.clipLeft + \"")\"";\n\t\t\t\te = this.format(e).split(\"",\"").join(delim);\n\t\t\t} else {\n\t\t\t\tb = this.format(_getStyle(t, this.p, _cs, false, this.dflt));\n\t\t\t\te = this.format(e);\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, b, e, pt, plugin);\n\t\t}});\n\t\t_registerComplexSpecialProp(\""textShadow\"", {defaultValue:\""0px 0px 0px #999\"", color:true, multi:true});\n\t\t_registerComplexSpecialProp(\""autoRound,strictUnits\"", {parser:function(t, e, p, cssp, pt) {return pt;}}); //just so that we can ignore these properties (not tween them)\n\t\t_registerComplexSpecialProp(\""border\"", {defaultValue:\""0px solid #000\"", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar bw = _getStyle(t, \""borderTopWidth\"", _cs, false, \""0px\""),\n\t\t\t\tend = this.format(e).split(\"" \""),\n\t\t\t\tesfx = end[0].replace(_suffixExp, \""\"");\n\t\t\tif (esfx !== \""px\"") { //if we're animating to a non-px value, we need to convert the beginning width to that unit.\n\t\t\t\tbw = (parseFloat(bw) / _convertToPixels(t, \""borderTopWidth\"", 1, esfx)) + esfx;\n\t\t\t}\n\t\t\treturn this.parseComplex(t.style, this.format(bw + \"" \"" + _getStyle(t, \""borderTopStyle\"", _cs, false, \""solid\"") + \"" \"" + _getStyle(t, \""borderTopColor\"", _cs, false, \""#000\"")), end.join(\"" \""), pt, plugin);\n\t\t\t}, color:true, formatter:function(v) {\n\t\t\t\tvar a = v.split(\"" \"");\n\t\t\t\treturn a[0] + \"" \"" + (a[1] || \""solid\"") + \"" \"" + (v.match(_colorExp) || [\""#000\""])[0];\n\t\t\t}});\n\t\t_registerComplexSpecialProp(\""borderWidth\"", {parser:_getEdgeParser(\""borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\"")}); //Firefox doesn't pick up on borderWidth set in style sheets (only inline).\n\t\t_registerComplexSpecialProp(\""float,cssFloat,styleFloat\"", {parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar s = t.style,\n\t\t\t\tprop = (\""cssFloat\"" in s) ? \""cssFloat\"" : \""styleFloat\"";\n\t\t\treturn new CSSPropTween(s, prop, 0, 0, pt, -1, p, false, 0, s[prop], e);\n\t\t}});\n\n\t\t//opacity-related\n\t\tvar _setIEOpacityRatio = function(v) {\n\t\t\t\tvar t = this.t, //refers to the element's style property\n\t\t\t\t\tfilters = t.filter || _getStyle(this.data, \""filter\"") || \""\"",\n\t\t\t\t\tval = (this.s + this.c * v) | 0,\n\t\t\t\t\tskip;\n\t\t\t\tif (val === 100) { //for older versions of IE that need to use a filter to apply opacity, we should remove the filter if opacity hits 1 in order to improve performance, but make sure there isn't a transform (matrix) or gradient in the filters.\n\t\t\t\t\tif (filters.indexOf(\""atrix(\"") === -1 && filters.indexOf(\""radient(\"") === -1 && filters.indexOf(\""oader(\"") === -1) {\n\t\t\t\t\t\tt.removeAttribute(\""filter\"");\n\t\t\t\t\t\tskip = (!_getStyle(this.data, \""filter\"")); //if a class is applied that has an alpha filter, it will take effect (we don't want that), so re-apply our alpha filter in that case. We must first remove it and then check.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.filter = filters.replace(_alphaFilterExp, \""\"");\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!skip) {\n\t\t\t\t\tif (this.xn1) {\n\t\t\t\t\t\tt.filter = filters = filters || (\""alpha(opacity=\"" + val + \"")\""); //works around bug in IE7/8 that prevents changes to \""visibility\"" from being applied properly if the filter is changed to a different alpha on the same frame.\n\t\t\t\t\t}\n\t\t\t\t\tif (filters.indexOf(\""pacity\"") === -1) { //only used if browser doesn't support the standard opacity style property (IE 7 and 8). We omit the \""O\"" to avoid case-sensitivity issues\n\t\t\t\t\t\tif (val !== 0 || !this.xn1) { //bugs in IE7/8 won't render the filter properly if opacity is ADDED on the same frame/render as \""visibility\"" changes (this.xn1 is 1 if this tween is an \""autoAlpha\"" tween)\n\t\t\t\t\t\t\tt.filter = filters + \"" alpha(opacity=\"" + val + \"")\""; //we round the value because otherwise, bugs in IE7/8 can prevent \""visibility\"" changes from being applied properly.\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.filter = filters.replace(_opacityExp, \""opacity=\"" + val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t_registerComplexSpecialProp(\""opacity,alpha,autoAlpha\"", {defaultValue:\""1\"", parser:function(t, e, p, cssp, pt, plugin) {\n\t\t\tvar b = parseFloat(_getStyle(t, \""opacity\"", _cs, false, \""1\"")),\n\t\t\t\tstyle = t.style,\n\t\t\t\tisAutoAlpha = (p === \""autoAlpha\"");\n\t\t\tif (typeof(e) === \""string\"" && e.charAt(1) === \""=\"") {\n\t\t\t\te = ((e.charAt(0) === \""-\"") ? -1 : 1) * parseFloat(e.substr(2)) + b;\n\t\t\t}\n\t\t\tif (isAutoAlpha && b === 1 && _getStyle(t, \""visibility\"", _cs) === \""hidden\"" && e !== 0) { //if visibility is initially set to \""hidden\"", we should interpret that as intent to make opacity 0 (a convenience)\n\t\t\t\tb = 0;\n\t\t\t}\n\t\t\tif (_supportsOpacity) {\n\t\t\t\tpt = new CSSPropTween(style, \""opacity\"", b, e - b, pt);\n\t\t\t} else {\n\t\t\t\tpt = new CSSPropTween(style, \""opacity\"", b * 100, (e - b) * 100, pt);\n\t\t\t\tpt.xn1 = isAutoAlpha ? 1 : 0; //we need to record whether or not this is an autoAlpha so that in the setRatio(), we know to duplicate the setting of the alpha in order to work around a bug in IE7 and IE8 that prevents changes to \""visibility\"" from taking effect if the filter is changed to a different alpha(opacity) at the same time. Setting it to the SAME value first, then the new value works around the IE7/8 bug.\n\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\tpt.type = 2;\n\t\t\t\tpt.b = \""alpha(opacity=\"" + pt.s + \"")\"";\n\t\t\t\tpt.e = \""alpha(opacity=\"" + (pt.s + pt.c) + \"")\"";\n\t\t\t\tpt.data = t;\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = _setIEOpacityRatio;\n\t\t\t}\n\t\t\tif (isAutoAlpha) { //we have to create the \""visibility\"" PropTween after the opacity one in the linked list so that they run in the order that works properly in IE8 and earlier\n\t\t\t\tpt = new CSSPropTween(style, \""visibility\"", 0, 0, pt, -1, null, false, 0, ((b !== 0) ? \""inherit\"" : \""hidden\""), ((e === 0) ? \""hidden\"" : \""inherit\""));\n\t\t\t\tpt.xs0 = \""inherit\"";\n\t\t\t\tcssp._overwriteProps.push(pt.n);\n\t\t\t\tcssp._overwriteProps.push(p);\n\t\t\t}\n\t\t\treturn pt;\n\t\t}});\n\n\n\t\tvar _removeProp = function(s, p) {\n\t\t\t\tif (p) {\n\t\t\t\t\tif (s.removeProperty) {\n\t\t\t\t\t\tif (p.substr(0,2) === \""ms\"" || p.substr(0,6) === \""webkit\"") { //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \""ms-transform\"" instead of \""-ms-transform\"" for IE9, for example)\n\t\t\t\t\t\t\tp = \""-\"" + p;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts.removeProperty(p.replace(_capsExp, \""-$1\"").toLowerCase());\n\t\t\t\t\t} else { //note: old versions of IE use \""removeAttribute()\"" instead of \""removeProperty()\""\n\t\t\t\t\t\ts.removeAttribute(p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_setClassNameRatio = function(v) {\n\t\t\t\tthis.t._gsClassPT = this;\n\t\t\t\tif (v === 1 || v === 0) {\n\t\t\t\t\tthis.t.setAttribute(\""class\"", (v === 0) ? this.b : this.e);\n\t\t\t\t\tvar mpt = this.data, //first MiniPropTween\n\t\t\t\t\t\ts = this.t.style;\n\t\t\t\t\twhile (mpt) {\n\t\t\t\t\t\tif (!mpt.v) {\n\t\t\t\t\t\t\t_removeProp(s, mpt.p);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ts[mpt.p] = mpt.v;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t\t}\n\t\t\t\t\tif (v === 1 && this.t._gsClassPT === this) {\n\t\t\t\t\t\tthis.t._gsClassPT = null;\n\t\t\t\t\t}\n\t\t\t\t} else if (this.t.getAttribute(\""class\"") !== this.e) {\n\t\t\t\t\tthis.t.setAttribute(\""class\"", this.e);\n\t\t\t\t}\n\t\t\t};\n\t\t_registerComplexSpecialProp(\""className\"", {parser:function(t, e, p, cssp, pt, plugin, vars) {\n\t\t\tvar b = t.getAttribute(\""class\"") || \""\"", //don't use t.className because it doesn't work consistently on SVG elements; getAttribute(\""class\"") and setAttribute(\""class\"", value\"") is more reliable.\n\t\t\t\tcssText = t.style.cssText,\n\t\t\t\tdifData, bs, cnpt, cnptLookup, mpt;\n\t\t\tpt = cssp._classNamePT = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\tpt.setRatio = _setClassNameRatio;\n\t\t\tpt.pr = -11;\n\t\t\t_hasPriority = true;\n\t\t\tpt.b = b;\n\t\t\tbs = _getAllStyles(t, _cs);\n\t\t\t//if there's a className tween already operating on the target, force it to its end so that the necessary inline styles are removed and the class name is applied before we determine the end state (we don't want inline styles interfering that were there just for class-specific values)\n\t\t\tcnpt = t._gsClassPT;\n\t\t\tif (cnpt) {\n\t\t\t\tcnptLookup = {};\n\t\t\t\tmpt = cnpt.data; //first MiniPropTween which stores the inline styles - we need to force these so that the inline styles don't contaminate things. Otherwise, there's a small chance that a tween could start and the inline values match the destination values and they never get cleaned.\n\t\t\t\twhile (mpt) {\n\t\t\t\t\tcnptLookup[mpt.p] = 1;\n\t\t\t\t\tmpt = mpt._next;\n\t\t\t\t}\n\t\t\t\tcnpt.setRatio(1);\n\t\t\t}\n\t\t\tt._gsClassPT = pt;\n\t\t\tpt.e = (e.charAt(1) !== \""=\"") ? e : b.replace(new RegExp(\""(?:\\\\s|^)\"" + e.substr(2) + \""(?![\\\\w-])\""), \""\"") + ((e.charAt(0) === \""+\"") ? \"" \"" + e.substr(2) : \""\"");\n\t\t\tt.setAttribute(\""class\"", pt.e);\n\t\t\tdifData = _cssDif(t, bs, _getAllStyles(t), vars, cnptLookup);\n\t\t\tt.setAttribute(\""class\"", b);\n\t\t\tpt.data = difData.firstMPT;\n\t\t\tif (t.style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://greensock.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.\n\t\t\t\tt.style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n\t\t\t}\n\t\t\tpt = pt.xfirst = cssp.parse(t, difData.difs, pt, plugin); //we record the CSSPropTween as the xfirst so that we can handle overwriting propertly (if \""className\"" gets overwritten, we must kill all the properties associated with the className part of the tween, so we can loop through from xfirst to the pt itself)\n\t\t\treturn pt;\n\t\t}});\n\n\n\t\tvar _setClearPropsRatio = function(v) {\n\t\t\tif (v === 1 || v === 0) if (this.data._totalTime === this.data._totalDuration && this.data.data !== \""isFromStart\"") { //this.data refers to the tween. Only clear at the END of the tween (remember, from() tweens make the ratio go from 1 to 0, so we can't just check that and if the tween is the zero-duration one that's created internally to render the starting values in a from() tween, ignore that because otherwise, for example, from(...{height:100, clearProps:\""height\"", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in).\n\t\t\t\tvar s = this.t.style,\n\t\t\t\t\ttransformParse = _specialProps.transform.parse,\n\t\t\t\t\ta, p, i, clearTransform, transform;\n\t\t\t\tif (this.e === \""all\"") {\n\t\t\t\t\ts.cssText = \""\"";\n\t\t\t\t\tclearTransform = true;\n\t\t\t\t} else {\n\t\t\t\t\ta = this.e.split(\"" \"").join(\""\"").split(\"",\"");\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = a[i];\n\t\t\t\t\t\tif (_specialProps[p]) {\n\t\t\t\t\t\t\tif (_specialProps[p].parse === transformParse) {\n\t\t\t\t\t\t\t\tclearTransform = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tp = (p === \""transformOrigin\"") ? _transformOriginProp : _specialProps[p].p; //ensures that special properties use the proper browser-specific property name, like \""scaleX\"" might be \""-webkit-transform\"" or \""boxShadow\"" might be \""-moz-box-shadow\""\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_removeProp(s, p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (clearTransform) {\n\t\t\t\t\t_removeProp(s, _transformProp);\n\t\t\t\t\ttransform = this.t._gsTransform;\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\tif (transform.svg) {\n\t\t\t\t\t\t\tthis.t.removeAttribute(\""data-svg-origin\"");\n\t\t\t\t\t\t\tthis.t.removeAttribute(\""transform\"");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete this.t._gsTransform;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\t_registerComplexSpecialProp(\""clearProps\"", {parser:function(t, e, p, cssp, pt) {\n\t\t\tpt = new CSSPropTween(t, p, 0, 0, pt, 2);\n\t\t\tpt.setRatio = _setClearPropsRatio;\n\t\t\tpt.e = e;\n\t\t\tpt.pr = -10;\n\t\t\tpt.data = cssp._tween;\n\t\t\t_hasPriority = true;\n\t\t\treturn pt;\n\t\t}});\n\n\t\tp = \""bezier,throwProps,physicsProps,physics2D\"".split(\"",\"");\n\t\ti = p.length;\n\t\twhile (i--) {\n\t\t\t_registerPluginProp(p[i]);\n\t\t}\n\n\n\n\n\n\n\n\n\t\tp = CSSPlugin.prototype;\n\t\tp._firstPT = p._lastParsedTransform = p._transform = null;\n\n\t\t//gets called when the tween renders for the first time. This kicks everything off, recording start/end values, etc.\n\t\tp._onInitTween = function(target, vars, tween, index) {\n\t\t\tif (!target.nodeType) { //css is only for dom elements\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._target = _target = target;\n\t\t\tthis._tween = tween;\n\t\t\tthis._vars = vars;\n\t\t\t_index = index;\n\t\t\t_autoRound = vars.autoRound;\n\t\t\t_hasPriority = false;\n\t\t\t_suffixMap = vars.suffixMap || CSSPlugin.suffixMap;\n\t\t\t_cs = _getComputedStyle(target, \""\"");\n\t\t\t_overwriteProps = this._overwriteProps;\n\t\t\tvar style = target.style,\n\t\t\t\tv, pt, pt2, first, last, next, zIndex, tpt, threeD;\n\t\t\tif (_reqSafariFix) if (style.zIndex === \""\"") {\n\t\t\t\tv = _getStyle(target, \""zIndex\"", _cs);\n\t\t\t\tif (v === \""auto\"" || v === \""\"") {\n\t\t\t\t\t//corrects a bug in [non-Android] Safari that prevents it from repainting elements in their new positions if they don't have a zIndex set. We also can't just apply this inside _parseTransform() because anything that's moved in any way (like using \""left\"" or \""top\"" instead of transforms like \""x\"" and \""y\"") can be affected, so it is best to ensure that anything that's tweening has a z-index. Setting \""WebkitPerspective\"" to a non-zero value worked too except that on iOS Safari things would flicker randomly. Plus zIndex is less memory-intensive.\n\t\t\t\t\tthis._addLazySet(style, \""zIndex\"", 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof(vars) === \""string\"") {\n\t\t\t\tfirst = style.cssText;\n\t\t\t\tv = _getAllStyles(target, _cs);\n\t\t\t\tstyle.cssText = first + \"";\"" + vars;\n\t\t\t\tv = _cssDif(target, v, _getAllStyles(target)).difs;\n\t\t\t\tif (!_supportsOpacity && _opacityValExp.test(vars)) {\n\t\t\t\t\tv.opacity = parseFloat( RegExp.$1 );\n\t\t\t\t}\n\t\t\t\tvars = v;\n\t\t\t\tstyle.cssText = first;\n\t\t\t}\n\n\t\t\tif (vars.className) { //className tweens will combine any differences they find in the css with the vars that are passed in, so {className:\""myClass\"", scale:0.5, left:20} would work.\n\t\t\t\tthis._firstPT = pt = _specialProps.className.parse(target, vars.className, \""className\"", this, null, null, vars);\n\t\t\t} else {\n\t\t\t\tthis._firstPT = pt = this.parse(target, vars, null);\n\t\t\t}\n\n\t\t\tif (this._transformType) {\n\t\t\t\tthreeD = (this._transformType === 3);\n\t\t\t\tif (!_transformProp) {\n\t\t\t\t\tstyle.zoom = 1; //helps correct an IE issue.\n\t\t\t\t} else if (_isSafari) {\n\t\t\t\t\t_reqSafariFix = true;\n\t\t\t\t\t//if zIndex isn't set, iOS Safari doesn't repaint things correctly sometimes (seemingly at random).\n\t\t\t\t\tif (style.zIndex === \""\"") {\n\t\t\t\t\t\tzIndex = _getStyle(target, \""zIndex\"", _cs);\n\t\t\t\t\t\tif (zIndex === \""auto\"" || zIndex === \""\"") {\n\t\t\t\t\t\t\tthis._addLazySet(style, \""zIndex\"", 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//Setting WebkitBackfaceVisibility corrects 3 bugs:\n\t\t\t\t\t// 1) [non-Android] Safari skips rendering changes to \""top\"" and \""left\"" that are made on the same frame/render as a transform update.\n\t\t\t\t\t// 2) iOS Safari sometimes neglects to repaint elements in their new positions. Setting \""WebkitPerspective\"" to a non-zero value worked too except that on iOS Safari things would flicker randomly.\n\t\t\t\t\t// 3) Safari sometimes displayed odd artifacts when tweening the transform (or WebkitTransform) property, like ghosts of the edges of the element remained. Definitely a browser bug.\n\t\t\t\t\t//Note: we allow the user to override the auto-setting by defining WebkitBackfaceVisibility in the vars of the tween.\n\t\t\t\t\tif (_isSafariLT6) {\n\t\t\t\t\t\tthis._addLazySet(style, \""WebkitBackfaceVisibility\"", this._vars.WebkitBackfaceVisibility || (threeD ? \""visible\"" : \""hidden\""));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt2 = pt;\n\t\t\t\twhile (pt2 && pt2._next) {\n\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t}\n\t\t\t\ttpt = new CSSPropTween(target, \""transform\"", 0, 0, null, 2);\n\t\t\t\tthis._linkCSSP(tpt, null, pt2);\n\t\t\t\ttpt.setRatio = _transformProp ? _setTransformRatio : _setIETransformRatio;\n\t\t\t\ttpt.data = this._transform || _getTransform(target, _cs, true);\n\t\t\t\ttpt.tween = tween;\n\t\t\t\ttpt.pr = -1; //ensures that the transforms get applied after the components are updated.\n\t\t\t\t_overwriteProps.pop(); //we don't want to force the overwrite of all \""transform\"" tweens of the target - we only care about individual transform properties like scaleX, rotation, etc. The CSSPropTween constructor automatically adds the property to _overwriteProps which is why we need to pop() here.\n\t\t\t}\n\n\t\t\tif (_hasPriority) {\n\t\t\t\t//reorders the linked list in order of pr (priority)\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tthis._firstPT = first;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\n\t\tp.parse = function(target, vars, pt, plugin) {\n\t\t\tvar style = target.style,\n\t\t\t\tp, sp, bn, en, bs, es, bsfx, esfx, isStr, rel;\n\t\t\tfor (p in vars) {\n\t\t\t\tes = vars[p]; //ending value string\n\t\t\t\tsp = _specialProps[p]; //SpecialProp lookup.\n\t\t\t\tif (typeof(es) === \""function\"" && !(sp && sp.allowFunc)) {\n\t\t\t\t\tes = es(_index, _target);\n\t\t\t\t}\n\t\t\t\tif (sp) {\n\t\t\t\t\tpt = sp.parse(target, es, p, this, pt, plugin, vars);\n\t\t\t\t} else if (p.substr(0,2) === \""--\"") { //for tweening CSS variables (which always start with \""--\""). To maximize performance and simplicity, we bypass CSSPlugin altogether and just add a normal property tween to the tween instance itself.\n\t\t\t\t\tthis._tween._propLookup[p] = this._addTween.call(this._tween, target.style, \""setProperty\"", _getComputedStyle(target).getPropertyValue(p) + \""\"", es + \""\"", p, false, p);\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tbs = _getStyle(target, p, _cs) + \""\"";\n\t\t\t\t\tisStr = (typeof(es) === \""string\"");\n\t\t\t\t\tif (p === \""color\"" || p === \""fill\"" || p === \""stroke\"" || p.indexOf(\""Color\"") !== -1 || (isStr && _rgbhslExp.test(es))) { //Opera uses background: to define color sometimes in addition to backgroundColor:\n\t\t\t\t\t\tif (!isStr) {\n\t\t\t\t\t\t\tes = _parseColor(es);\n\t\t\t\t\t\t\tes = ((es.length > 3) ? \""rgba(\"" : \""rgb(\"") + es.join(\"",\"") + \"")\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, \""transparent\"", pt, 0, plugin);\n\n\t\t\t\t\t} else if (isStr && _complexExp.test(es)) {\n\t\t\t\t\t\tpt = _parseComplex(style, p, bs, es, true, null, pt, 0, plugin);\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbn = parseFloat(bs);\n\t\t\t\t\t\tbsfx = (bn || bn === 0) ? bs.substr((bn + \""\"").length) : \""\""; //remember, bs could be non-numeric like \""normal\"" for fontWeight, so we should default to a blank suffix in that case.\n\n\t\t\t\t\t\tif (bs === \""\"" || bs === \""auto\"") {\n\t\t\t\t\t\t\tif (p === \""width\"" || p === \""height\"") {\n\t\t\t\t\t\t\t\tbn = _getDimension(target, p, _cs);\n\t\t\t\t\t\t\t\tbsfx = \""px\"";\n\t\t\t\t\t\t\t} else if (p === \""left\"" || p === \""top\"") {\n\t\t\t\t\t\t\t\tbn = _calculateOffset(target, p, _cs);\n\t\t\t\t\t\t\t\tbsfx = \""px\"";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbn = (p !== \""opacity\"") ? 0 : 1;\n\t\t\t\t\t\t\t\tbsfx = \""\"";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trel = (isStr && es.charAt(1) === \""=\"");\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\ten = parseInt(es.charAt(0) + \""1\"", 10);\n\t\t\t\t\t\t\tes = es.substr(2);\n\t\t\t\t\t\t\ten *= parseFloat(es);\n\t\t\t\t\t\t\tesfx = es.replace(_suffixExp, \""\"");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ten = parseFloat(es);\n\t\t\t\t\t\t\tesfx = isStr ? es.replace(_suffixExp, \""\"") : \""\"";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (esfx === \""\"") {\n\t\t\t\t\t\t\tesfx = (p in _suffixMap) ? _suffixMap[p] : bsfx; //populate the end suffix, prioritizing the map, then if none is found, use the beginning suffix.\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tes = (en || en === 0) ? (rel ? en + bn : en) + esfx : vars[p]; //ensures that any += or -= prefixes are taken care of. Record the end value before normalizing the suffix because we always want to end the tween on exactly what they intended even if it doesn't match the beginning value's suffix.\n\t\t\t\t\t\t//if the beginning/ending suffixes don't match, normalize them...\n\t\t\t\t\t\tif (bsfx !== esfx) if (esfx !== \""\"" || p === \""lineHeight\"") if (en || en === 0) if (bn) { //note: if the beginning value (bn) is 0, we don't need to convert units!\n\t\t\t\t\t\t\tbn = _convertToPixels(target, p, bn, bsfx);\n\t\t\t\t\t\t\tif (esfx === \""%\"") {\n\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 100, \""%\"") / 100;\n\t\t\t\t\t\t\t\tif (vars.strictUnits !== true) { //some browsers report only \""px\"" values instead of allowing \""%\"" with getComputedStyle(), so we assume that if we're tweening to a %, we should start there too unless strictUnits:true is defined. This approach is particularly useful for responsive designs that use from() tweens.\n\t\t\t\t\t\t\t\t\tbs = bn + \""%\"";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else if (esfx === \""em\"" || esfx === \""rem\"" || esfx === \""vw\"" || esfx === \""vh\"") {\n\t\t\t\t\t\t\t\tbn /= _convertToPixels(target, p, 1, esfx);\n\n\t\t\t\t\t\t\t//otherwise convert to pixels.\n\t\t\t\t\t\t\t} else if (esfx !== \""px\"") {\n\t\t\t\t\t\t\t\ten = _convertToPixels(target, p, en, esfx);\n\t\t\t\t\t\t\t\tesfx = \""px\""; //we don't use bsfx after this, so we don't need to set it to px too.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (rel) if (en || en === 0) {\n\t\t\t\t\t\t\t\tes = (en + bn) + esfx; //the changes we made affect relative calculations, so adjust the end value here.\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rel) {\n\t\t\t\t\t\t\ten += bn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((bn || bn === 0) && (en || en === 0)) { //faster than isNaN(). Also, previously we required en !== bn but that doesn't really gain much performance and it prevents _parseToProxy() from working properly if beginning and ending values match but need to get tweened by an external plugin anyway. For example, a bezier tween where the target starts at left:0 and has these points: [{left:50},{left:0}] wouldn't work properly because when parsing the last point, it'd match the first (current) one and a non-tweening CSSPropTween would be recorded when we actually need a normal tween (type:0) so that things get updated during the tween properly.\n\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, bn, en - bn, pt, 0, p, (_autoRound !== false && (esfx === \""px\"" || p === \""zIndex\"")), 0, bs, es);\n\t\t\t\t\t\t\tpt.xs0 = esfx;\n\t\t\t\t\t\t\t//DEBUG: _log(\""tween \""+p+\"" from \""+pt.b+\"" (\""+bn+esfx+\"") to \""+pt.e+\"" with suffix: \""+pt.xs0);\n\t\t\t\t\t\t} else if (style[p] === undefined || !es && (es + \""\"" === \""NaN\"" || es == null)) {\n\t\t\t\t\t\t\t_log(\""invalid \"" + p + \"" tween value: \"" + vars[p]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = new CSSPropTween(style, p, en || bn || 0, 0, pt, -1, p, false, 0, bs, es);\n\t\t\t\t\t\t\tpt.xs0 = (es === \""none\"" && (p === \""display\"" || p.indexOf(\""Style\"") !== -1)) ? bs : es; //intermediate value should typically be set immediately (end value) except for \""display\"" or things like borderTopStyle, borderBottomStyle, etc. which should use the beginning value during the tween.\n\t\t\t\t\t\t\t//DEBUG: _log(\""non-tweening value \""+p+\"": \""+pt.xs0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (plugin) if (pt && !pt.plugin) {\n\t\t\t\t\tpt.plugin = plugin;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pt;\n\t\t};\n\n\n\t\t//gets called every time the tween updates, passing the new ratio (typically a value between 0 and 1, but not always (for example, if an Elastic.easeOut is used, the value can jump above 1 mid-tween). It will always start and 0 and end at 1.\n\t\tp.setRatio = function(v) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tmin = 0.000001,\n\t\t\t\tval, str, i;\n\t\t\t//at the end of the tween, we set the values to exactly what we received in order to make sure non-tweening values (like \""position\"" or \""float\"" or whatever) are set and so that if the beginning/ending suffixes (units) didn't match and we normalized to px, the value that the user passed in is used here. We check to see if the tween is at its beginning in case it's a from() tween in which case the ratio will actually go from 1 to 0 over the course of the tween (backwards).\n\t\t\tif (v === 1 && (this._tween._time === this._tween._duration || this._tween._time === 0)) {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\tif (pt.r && pt.type !== -1) {\n\t\t\t\t\t\t\tval = pt.r(pt.s + pt.c);\n\t\t\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \""rect(5px,10px,20px,25px)\""\n\t\t\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\t\tstr += pt[\""xn\""+i] + pt[\""xs\""+(i+1)];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.e;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\n\t\t\t} else if (v || !(this._tween._time === this._tween._duration || this._tween._time === 0) || this._tween._rawPrevTime === -0.000001) {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = pt.c * v + pt.s;\n\t\t\t\t\tif (pt.r) {\n\t\t\t\t\t\tval = pt.r(val);\n\t\t\t\t\t} else if (val < min) if (val > -min) {\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.type) {\n\t\t\t\t\t\tpt.t[pt.p] = val + pt.xs0;\n\t\t\t\t\t} else if (pt.type === 1) { //complex value (one that typically has multiple numbers inside a string, like \""rect(5px,10px,20px,25px)\""\n\t\t\t\t\t\ti = pt.l;\n\t\t\t\t\t\tif (i === 2) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2;\n\t\t\t\t\t\t} else if (i === 3) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3;\n\t\t\t\t\t\t} else if (i === 4) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4;\n\t\t\t\t\t\t} else if (i === 5) {\n\t\t\t\t\t\t\tpt.t[pt.p] = pt.xs0 + val + pt.xs1 + pt.xn1 + pt.xs2 + pt.xn2 + pt.xs3 + pt.xn3 + pt.xs4 + pt.xn4 + pt.xs5;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstr = pt.xs0 + val + pt.xs1;\n\t\t\t\t\t\t\tfor (i = 1; i < pt.l; i++) {\n\t\t\t\t\t\t\t\tstr += pt[\""xn\""+i] + pt[\""xs\""+(i+1)];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt.t[pt.p] = str;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (pt.type === -1) { //non-tweening value\n\t\t\t\t\t\tpt.t[pt.p] = pt.xs0;\n\n\t\t\t\t\t} else if (pt.setRatio) { //custom setRatio() for things like SpecialProps, external plugins, etc.\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\n\t\t\t//if the tween is reversed all the way back to the beginning, we need to restore the original values which may have different units (like % instead of px or em or whatever).\n\t\t\t} else {\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.type !== 2) {\n\t\t\t\t\t\tpt.t[pt.p] = pt.b;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.setRatio(v);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * @private\n\t\t * Forces rendering of the target's transforms (rotation, scale, etc.) whenever the CSSPlugin's setRatio() is called.\n\t\t * Basically, this tells the CSSPlugin to create a CSSPropTween (type 2) after instantiation that runs last in the linked\n\t\t * list and calls the appropriate (3D or 2D) rendering function. We separate this into its own method so that we can call\n\t\t * it from other plugins like BezierPlugin if, for example, it needs to apply an autoRotation and this CSSPlugin\n\t\t * doesn't have any transform-related properties of its own. You can call this method as many times as you\n\t\t * want and it won't create duplicate CSSPropTweens.\n\t\t *\n\t\t * @param {boolean} threeD if true, it should apply 3D tweens (otherwise, just 2D ones are fine and typically faster)\n\t\t */\n\t\tp._enableTransforms = function(threeD) {\n\t\t\tthis._transform = this._transform || _getTransform(this._target, _cs, true); //ensures that the element has a _gsTransform property with the appropriate values.\n\t\t\tthis._transformType = (!(this._transform.svg && _useSVGTransformAttr) && (threeD || this._transformType === 3)) ? 3 : 2;\n\t\t};\n\n\t\tvar lazySet = function(v) {\n\t\t\tthis.t[this.p] = this.e;\n\t\t\tthis.data._linkCSSP(this, this._next, null, true); //we purposefully keep this._next even though it'd make sense to null it, but this is a performance optimization, as this happens during the while (pt) {} loop in setRatio() at the bottom of which it sets pt = pt._next, so if we null it, the linked list will be broken in that loop.\n\t\t};\n\t\t/** @private Gives us a way to set a value on the first render (and only the first render). **/\n\t\tp._addLazySet = function(t, p, v) {\n\t\t\tvar pt = this._firstPT = new CSSPropTween(t, p, 0, 0, this._firstPT, 2);\n\t\t\tpt.e = v;\n\t\t\tpt.setRatio = lazySet;\n\t\t\tpt.data = this;\n\t\t};\n\n\t\t/** @private **/\n\t\tp._linkCSSP = function(pt, next, prev, remove) {\n\t\t\tif (pt) {\n\t\t\t\tif (next) {\n\t\t\t\t\tnext._prev = pt;\n\t\t\t\t}\n\t\t\t\tif (pt._next) {\n\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t}\n\t\t\t\tif (pt._prev) {\n\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\tremove = true; //just to prevent resetting this._firstPT 5 lines down in case pt._next is null. (optimized for speed)\n\t\t\t\t}\n\t\t\t\tif (prev) {\n\t\t\t\t\tprev._next = pt;\n\t\t\t\t} else if (!remove && this._firstPT === null) {\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t}\n\t\t\t\tpt._next = next;\n\t\t\t\tpt._prev = prev;\n\t\t\t}\n\t\t\treturn pt;\n\t\t};\n\n\t\tp._mod = function(lookup) {\n\t\t\tvar pt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (typeof(lookup[pt.p]) === \""function\"") { //only gets called by RoundPropsPlugin (ModifyPlugin manages all the rendering internally for CSSPlugin properties that need modification). Remember, we handle rounding a bit differently in this plugin for performance reasons, leveraging \""r\"" as an indicator that the value should be rounded internally.\n\t\t\t\t\tpt.r = lookup[pt.p];\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\t//we need to make sure that if alpha or autoAlpha is killed, opacity is too. And autoAlpha affects the \""visibility\"" property.\n\t\tp._kill = function(lookup) {\n\t\t\tvar copy = lookup,\n\t\t\t\tpt, p, xfirst;\n\t\t\tif (lookup.autoAlpha || lookup.alpha) {\n\t\t\t\tcopy = {};\n\t\t\t\tfor (p in lookup) { //copy the lookup so that we're not changing the original which may be passed elsewhere.\n\t\t\t\t\tcopy[p] = lookup[p];\n\t\t\t\t}\n\t\t\t\tcopy.opacity = 1;\n\t\t\t\tif (copy.autoAlpha) {\n\t\t\t\t\tcopy.visibility = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lookup.className && (pt = this._classNamePT)) { //for className tweens, we need to kill any associated CSSPropTweens too; a linked list starts at the className's \""xfirst\"".\n\t\t\t\txfirst = pt.xfirst;\n\t\t\t\tif (xfirst && xfirst._prev) {\n\t\t\t\t\tthis._linkCSSP(xfirst._prev, pt._next, xfirst._prev._prev); //break off the prev\n\t\t\t\t} else if (xfirst === this._firstPT) {\n\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t}\n\t\t\t\tif (pt._next) {\n\t\t\t\t\tthis._linkCSSP(pt._next, pt._next._next, xfirst._prev);\n\t\t\t\t}\n\t\t\t\tthis._classNamePT = null;\n\t\t\t}\n\t\t\tpt = this._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.plugin && pt.plugin !== p && pt.plugin._kill) { //for plugins that are registered with CSSPlugin, we should notify them of the kill.\n\t\t\t\t\tpt.plugin._kill(lookup);\n\t\t\t\t\tp = pt.plugin;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn TweenPlugin.prototype._kill.call(this, copy);\n\t\t};\n\n\n\n\t\t//used by cascadeTo() for gathering all the style properties of each child element into an array for comparison.\n\t\tvar _getChildStyles = function(e, props, targets) {\n\t\t\t\tvar children, i, child, type;\n\t\t\t\tif (e.slice) {\n\t\t\t\t\ti = e.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_getChildStyles(e[i], props, targets);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchildren = e.childNodes;\n\t\t\t\ti = children.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tchild = children[i];\n\t\t\t\t\ttype = child.type;\n\t\t\t\t\tif (child.style) {\n\t\t\t\t\t\tprops.push(_getAllStyles(child));\n\t\t\t\t\t\tif (targets) {\n\t\t\t\t\t\t\ttargets.push(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ((type === 1 || type === 9 || type === 11) && child.childNodes.length) {\n\t\t\t\t\t\t_getChildStyles(child, props, targets);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t/**\n\t\t * Typically only useful for className tweens that may affect child elements, this method creates a TweenLite\n\t\t * and then compares the style properties of all the target's child elements at the tween's start and end, and\n\t\t * if any are different, it also creates tweens for those and returns an array containing ALL of the resulting\n\t\t * tweens (so that you can easily add() them to a TimelineLite, for example). The reason this functionality is\n\t\t * wrapped into a separate static method of CSSPlugin instead of being integrated into all regular className tweens\n\t\t * is because it creates entirely new tweens that may have completely different targets than the original tween,\n\t\t * so if they were all lumped into the original tween instance, it would be inconsistent with the rest of the API\n\t\t * and it would create other problems. For example:\n\t\t *  - If I create a tween of elementA, that tween instance may suddenly change its target to include 50 other elements (unintuitive if I specifically defined the target I wanted)\n\t\t *  - We can't just create new independent tweens because otherwise, what happens if the original/parent tween is reversed or pause or dropped into a TimelineLite for tight control? You'd expect that tween's behavior to affect all the others.\n\t\t *  - Analyzing every style property of every child before and after the tween is an expensive operation when there are many children, so this behavior shouldn't be imposed on all className tweens by default, especially since it's probably rare that this extra functionality is needed.\n\t\t *\n\t\t * @param {Object} target object to be tweened\n\t\t * @param {number} Duration in seconds (or frames for frames-based tweens)\n\t\t * @param {Object} Object containing the end values, like {className:\""newClass\"", ease:Linear.easeNone}\n\t\t * @return {Array} An array of TweenLite instances\n\t\t */\n\t\tCSSPlugin.cascadeTo = function(target, duration, vars) {\n\t\t\tvar tween = TweenLite.to(target, duration, vars),\n\t\t\t\tresults = [tween],\n\t\t\t\tb = [],\n\t\t\t\te = [],\n\t\t\t\ttargets = [],\n\t\t\t\t_reservedProps = TweenLite._internals.reservedProps,\n\t\t\t\ti, difs, p, from;\n\t\t\ttarget = tween._targets || tween.target;\n\t\t\t_getChildStyles(target, b, targets);\n\t\t\ttween.render(duration, true, true);\n\t\t\t_getChildStyles(target, e);\n\t\t\ttween.render(0, true, true);\n\t\t\ttween._enabled(true);\n\t\t\ti = targets.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tdifs = _cssDif(targets[i], b[i], e[i]);\n\t\t\t\tif (difs.firstMPT) {\n\t\t\t\t\tdifs = difs.difs;\n\t\t\t\t\tfor (p in vars) {\n\t\t\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\t\t\tdifs[p] = vars[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfrom = {};\n\t\t\t\t\tfor (p in difs) {\n\t\t\t\t\t\tfrom[p] = b[i][p];\n\t\t\t\t\t}\n\t\t\t\t\tresults.push(TweenLite.fromTo(targets[i], duration, from, difs));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t\tTweenPlugin.activate([CSSPlugin]);\n\t\treturn CSSPlugin;\n\n\t}, true);\n\nexport var CSSPlugin = globals.CSSPlugin;\nexport { CSSPlugin as default };"",""/*!\n * VERSION: 0.6.1\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport { _gsScope } from \""./TweenLite.js\"";\n\nexport var AttrPlugin = _gsScope._gsDefine.plugin({\n\tpropName: \""attr\"",\n\tAPI: 2,\n\tversion: \""0.6.1\"",\n\n\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\tinit: function(target, value, tween, index) {\n\t\tvar p, end;\n\t\tif (typeof(target.setAttribute) !== \""function\"") {\n\t\t\treturn false;\n\t\t}\n\t\tfor (p in value) {\n\t\t\tend = value[p];\n\t\t\tif (typeof(end) === \""function\"") {\n\t\t\t\tend = end(index, target);\n\t\t\t}\n\t\t\tthis._addTween(target, \""setAttribute\"", target.getAttribute(p) + \""\"", end + \""\"", p, false, p);\n\t\t\tthis._overwriteProps.push(p);\n\t\t}\n\t\treturn true;\n\t}\n\n});\n\nexport { AttrPlugin as default };\n\n\n\n"",""/*!\n * VERSION: 1.6.0\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport { _gsScope } from \""./TweenLite.js\"";\n\nexport var RoundPropsPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\tpropName: \""roundProps\"",\n\t\t\t\tversion: \""1.7.0\"",\n\t\t\t\tpriority: -1,\n\t\t\t\tAPI: 2,\n\n\t\t\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\tinit: function(target, value, tween) {\n\t\t\t\t\tthis._tween = tween;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t}),\n\t\t\t_getRoundFunc = function(v) { //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.\n\t\t\t\tvar p = v < 1 ? Math.pow(10, (v + \""\"").length - 2) : 1; //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed()\n\t\t\t\treturn function(n) {\n\t\t\t\t\treturn ((Math.round(n / v) * v * p) | 0) / p;\n\t\t\t\t};\n\t\t\t},\n\t\t\t_roundLinkedList = function(node, mod) {\n\t\t\t\twhile (node) {\n\t\t\t\t\tif (!node.f && !node.blob) {\n\t\t\t\t\t\tnode.m = mod || Math.round;\n\t\t\t\t\t}\n\t\t\t\t\tnode = node._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\tp = RoundPropsPlugin.prototype;\n\n\t\tp._onInitAllProps = function() {\n\t\t\tvar tween = this._tween,\n\t\t\t\trp = tween.vars.roundProps,\n\t\t\t\tlookup = {},\n\t\t\t\trpt = tween._propLookup.roundProps,\n\t\t\t\tpt, next, i, p;\n\t\t\tif (typeof(rp) === \""object\"" && !rp.push) {\n\t\t\t\tfor (p in rp) {\n\t\t\t\t\tlookup[p] = _getRoundFunc(rp[p]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (typeof(rp) === \""string\"") {\n\t\t\t\t\trp = rp.split(\"",\"");\n\t\t\t\t}\n\t\t\t\ti = rp.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlookup[rp[i]] = Math.round;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (p in lookup) {\n\t\t\t\tpt = tween._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next; //record here, because it may get removed\n\t\t\t\t\tif (pt.pg) {\n\t\t\t\t\t\tpt.t._mod(lookup);\n\t\t\t\t\t} else if (pt.n === p) {\n\t\t\t\t\t\tif (pt.f === 2 && pt.t) { //a blob (text containing multiple numeric values)\n\t\t\t\t\t\t\t_roundLinkedList(pt.t._firstPT, lookup[p]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._add(pt.t, p, pt.s, pt.c, lookup[p]);\n\t\t\t\t\t\t\t//remove from linked list\n\t\t\t\t\t\t\tif (next) {\n\t\t\t\t\t\t\t\tnext._prev = pt._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\tpt._prev._next = next;\n\t\t\t\t\t\t\t} else if (tween._firstPT === pt) {\n\t\t\t\t\t\t\t\ttween._firstPT = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\ttween._propLookup[p] = rpt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._add = function(target, p, s, c, mod) {\n\t\t\tthis._addTween(target, p, s, s + c, p, mod || Math.round);\n\t\t\tthis._overwriteProps.push(p);\n\t\t};\n\nexport { RoundPropsPlugin as default };\n"",""/*!\n * VERSION: 0.3.1\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport { _gsScope } from \""./TweenLite.js\"";\n\nexport var DirectionalRotationPlugin = _gsScope._gsDefine.plugin({\n\t\tpropName: \""directionalRotation\"",\n\t\tversion: \""0.3.1\"",\n\t\tAPI: 2,\n\n\t\t//called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\tinit: function(target, value, tween, index) {\n\t\t\tif (typeof(value) !== \""object\"") {\n\t\t\t\tvalue = {rotation:value};\n\t\t\t}\n\t\t\tthis.finals = {};\n\t\t\tvar cap = (value.useRadians === true) ? Math.PI * 2 : 360,\n\t\t\t\tmin = 0.000001,\n\t\t\t\tp, v, start, end, dif, split;\n\t\t\tfor (p in value) {\n\t\t\t\tif (p !== \""useRadians\"") {\n\t\t\t\t\tend = value[p];\n\t\t\t\t\tif (typeof(end) === \""function\"") {\n\t\t\t\t\t\tend = end(index, target);\n\t\t\t\t\t}\n\t\t\t\t\tsplit = (end + \""\"").split(\""_\"");\n\t\t\t\t\tv = split[0];\n\t\t\t\t\tstart = parseFloat( (typeof(target[p]) !== \""function\"") ? target[p] : target[ ((p.indexOf(\""set\"") || typeof(target[\""get\"" + p.substr(3)]) !== \""function\"") ? p : \""get\"" + p.substr(3)) ]() );\n\t\t\t\t\tend = this.finals[p] = (typeof(v) === \""string\"" && v.charAt(1) === \""=\"") ? start + parseInt(v.charAt(0) + \""1\"", 10) * Number(v.substr(2)) : Number(v) || 0;\n\t\t\t\t\tdif = end - start;\n\t\t\t\t\tif (split.length) {\n\t\t\t\t\t\tv = split.join(\""_\"");\n\t\t\t\t\t\tif (v.indexOf(\""short\"") !== -1) {\n\t\t\t\t\t\t\tdif = dif % cap;\n\t\t\t\t\t\t\tif (dif !== dif % (cap / 2)) {\n\t\t\t\t\t\t\t\tdif = (dif < 0) ? dif + cap : dif - cap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v.indexOf(\""_cw\"") !== -1 && dif < 0) {\n\t\t\t\t\t\t\tdif = ((dif + cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t} else if (v.indexOf(\""ccw\"") !== -1 && dif > 0) {\n\t\t\t\t\t\t\tdif = ((dif - cap * 9999999999) % cap) - ((dif / cap) | 0) * cap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (dif > min || dif < -min) {\n\t\t\t\t\t\tthis._addTween(target, p, start, start + dif, p);\n\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\tset: function(ratio) {\n\t\t\tvar pt;\n\t\t\tif (ratio !== 1) {\n\t\t\t\tthis._super.setRatio.call(this, ratio);\n\t\t\t} else {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\tpt.t[pt.p](this.finals[pt.p]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p] = this.finals[pt.p];\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\nDirectionalRotationPlugin._autoCSS = true;\n\nexport { DirectionalRotationPlugin as default };"",""/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport TweenLite, { _gsScope, globals, Animation, SimpleTimeline } from \""./TweenLite.js\"";\n\n_gsScope._gsDefine(\""TimelineLite\"", [\""core.Animation\"",\""core.SimpleTimeline\"",\""TweenLite\""], function() {\n\n\t\tvar TimelineLite = function(vars) {\n\t\t\t\tSimpleTimeline.call(this, vars);\n\t\t\t\tvar self = this,\n\t\t\t\t\tv = self.vars,\n\t\t\t\t\tval, p;\n\t\t\t\tself._labels = {};\n\t\t\t\tself.autoRemoveChildren = !!v.autoRemoveChildren;\n\t\t\t\tself.smoothChildTiming = !!v.smoothChildTiming;\n\t\t\t\tself._sortChildren = true;\n\t\t\t\tself._onUpdate = v.onUpdate;\n\t\t\t\tfor (p in v) {\n\t\t\t\t\tval = v[p];\n\t\t\t\t\tif (_isArray(val)) if (val.join(\""\"").indexOf(\""{self}\"") !== -1) {\n\t\t\t\t\t\tv[p] = self._swapSelfInParams(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_isArray(v.tweens)) {\n\t\t\t\t\tself.add(v.tweens, 0, v.align, v.stagger);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_tinyNum = 0.00000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_internals = TimelineLite._internals = {},\n\t\t\t_isSelector = TweenLiteInternals.isSelector,\n\t\t\t_isArray = TweenLiteInternals.isArray,\n\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_copy = function(vars) {\n\t\t\t\tvar copy = {}, p;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tcopy[p] = vars[p];\n\t\t\t\t}\n\t\t\t\treturn copy;\n\t\t\t},\n\t\t\t_applyCycle = function(vars, targets, i) {\n\t\t\t\tvar alt = vars.cycle,\n\t\t\t\t\tp, val;\n\t\t\t\tfor (p in alt) {\n\t\t\t\t\tval = alt[p];\n\t\t\t\t\tvars[p] = (typeof(val) === \""function\"") ? val(i, targets[i], targets) : val[i % val.length];\n\t\t\t\t}\n\t\t\t\tdelete vars.cycle;\n\t\t\t},\n\t\t\t_pauseCallback = _internals.pauseCallback = function() {},\n\t\t\t_slice = function(a) { //don't use [].slice because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++]));\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_defaultImmediateRender = function(tl, toVars, fromVars, defaultFalse) { //default to immediateRender:true unless otherwise set in toVars, fromVars or if defaultFalse is passed in as true\n\t\t\t\tvar ir = \""immediateRender\"";\n\t\t\t\tif (!(ir in toVars)) {\n\t\t\t\t\ttoVars[ir] = !((fromVars && fromVars[ir] === false) || defaultFalse);\n\t\t\t\t}\n\t\t\t\treturn toVars;\n\t\t\t},\n\t\t\t//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\n\t\t\t_distribute = function(v) {\n\t\t\t\tif (typeof(v) === \""function\"") {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\tvar vars = (typeof(v) === \""object\"") ? v : {each:v}, //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \""amount\"" that's chunked out among them all.\n\t\t\t\t\tease = vars.ease,\n\t\t\t\t\tfrom = vars.from || 0,\n\t\t\t\t\tbase = vars.base || 0,\n\t\t\t\t\tcache = {},\n\t\t\t\t\tisFromKeyword = isNaN(from),\n\t\t\t\t\taxis = vars.axis,\n\t\t\t\t\tratio = {center:0.5, end:1}[from] || 0;\n\t\t\t\treturn function(i, target, a) {\n\t\t\t\t\tvar l = (a || vars).length,\n\t\t\t\t\t\tdistances = cache[l],\n\t\t\t\t\t\toriginX, originY, x, y, d, j, max, min, wrap;\n\t\t\t\t\tif (!distances) {\n\t\t\t\t\t\twrap = (vars.grid === \""auto\"") ? 0 : (vars.grid || [Infinity])[0];\n\t\t\t\t\t\tif (!wrap) {\n\t\t\t\t\t\t\tmax = -Infinity;\n\t\t\t\t\t\t\twhile (max < (max = a[wrap++].getBoundingClientRect().left) && wrap < l) { }\n\t\t\t\t\t\t\twrap--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdistances = cache[l] = [];\n\t\t\t\t\t\toriginX = isFromKeyword ? (Math.min(wrap, l) * ratio) - 0.5 : from % wrap;\n\t\t\t\t\t\toriginY = isFromKeyword ? l * ratio / wrap - 0.5 : (from / wrap) | 0;\n\t\t\t\t\t\tmax = 0;\n\t\t\t\t\t\tmin = Infinity;\n\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\tx = (j % wrap) - originX;\n\t\t\t\t\t\t\ty = originY - ((j / wrap) | 0);\n\t\t\t\t\t\t\tdistances[j] = d = !axis ? Math.sqrt(x * x + y * y) : Math.abs((axis === \""y\"") ? y : x);\n\t\t\t\t\t\t\tif (d > max) {\n\t\t\t\t\t\t\t\tmax = d;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (d < min) {\n\t\t\t\t\t\t\t\tmin = d;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdistances.max = max - min;\n\t\t\t\t\t\tdistances.min = min;\n\t\t\t\t\t\tdistances.v = l = vars.amount || (vars.each * (wrap > l ? l - 1 : !axis ? Math.max(wrap, l / wrap) : axis === \""y\"" ? l / wrap : wrap)) || 0;\n\t\t\t\t\t\tdistances.b = (l < 0) ? base - l : base;\n\t\t\t\t\t}\n\t\t\t\t\tl = (distances[i] - distances.min) / distances.max;\n\t\t\t\t\treturn distances.b + (ease ? ease.getRatio(l) : l) * distances.v;\n\t\t\t\t};\n\t\t\t},\n\t\t\tp = TimelineLite.prototype = new SimpleTimeline();\n\n\t\tTimelineLite.version = \""2.1.3\"";\n\t\tTimelineLite.distribute = _distribute;\n\t\tp.constructor = TimelineLite;\n\t\tp.kill()._gc = p._forcingPlayhead = p._hasPause = false;\n\n\t\t/* might use later...\n\t\t//translates a local time inside an animation to the corresponding time on the root/global timeline, factoring in all nesting and timeScales.\n\t\tfunction localToGlobal(time, animation) {\n\t\t\twhile (animation) {\n\t\t\t\ttime = (time / animation._timeScale) + animation._startTime;\n\t\t\t\tanimation = animation.timeline;\n\t\t\t}\n\t\t\treturn time;\n\t\t}\n\n\t\t//translates the supplied time on the root/global timeline into the corresponding local time inside a particular animation, factoring in all nesting and timeScales\n\t\tfunction globalToLocal(time, animation) {\n\t\t\tvar scale = 1;\n\t\t\ttime -= localToGlobal(0, animation);\n\t\t\twhile (animation) {\n\t\t\t\tscale *= animation._timeScale;\n\t\t\t\tanimation = animation.timeline;\n\t\t\t}\n\t\t\treturn time * scale;\n\t\t}\n\t\t*/\n\n\t\tp.to = function(target, duration, vars, position) {\n\t\t\tvar Engine = (vars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\treturn duration ? this.add( new Engine(target, duration, vars), position) : this.set(target, vars, position);\n\t\t};\n\n\t\tp.from = function(target, duration, vars, position) {\n\t\t\treturn this.add( ((vars.repeat && _globals.TweenMax) || TweenLite).from(target, duration, _defaultImmediateRender(this, vars)), position);\n\t\t};\n\n\t\tp.fromTo = function(target, duration, fromVars, toVars, position) {\n\t\t\tvar Engine = (toVars.repeat && _globals.TweenMax) || TweenLite;\n\t\t\ttoVars = _defaultImmediateRender(this, toVars, fromVars);\n\t\t\treturn duration ? this.add( Engine.fromTo(target, duration, fromVars, toVars), position) : this.set(target, toVars, position);\n\t\t};\n\n\t\tp.staggerTo = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvar tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, callbackScope:onCompleteAllScope, smoothChildTiming:this.smoothChildTiming}),\n\t\t\t\tstaggerFunc = _distribute(vars.stagger || stagger),\n\t\t\t\tstartAt = vars.startAt,\n\t\t\t\tcycle = vars.cycle,\n\t\t\t\tcopy, i;\n\t\t\tif (typeof(targets) === \""string\"") {\n\t\t\t\ttargets = TweenLite.selector(targets) || targets;\n\t\t\t}\n\t\t\ttargets = targets || [];\n\t\t\tif (_isSelector(targets)) { //if the targets object is a selector, translate it into an array.\n\t\t\t\ttargets = _slice(targets);\n\t\t\t}\n\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\tcopy = _copy(vars);\n\t\t\t\tif (startAt) {\n\t\t\t\t\tcopy.startAt = _copy(startAt);\n\t\t\t\t\tif (startAt.cycle) {\n\t\t\t\t\t\t_applyCycle(copy.startAt, targets, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (cycle) {\n\t\t\t\t\t_applyCycle(copy, targets, i);\n\t\t\t\t\tif (copy.duration != null) {\n\t\t\t\t\t\tduration = copy.duration;\n\t\t\t\t\t\tdelete copy.duration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttl.to(targets[i], duration, copy, staggerFunc(i, targets[i], targets));\n\t\t\t}\n\t\t\treturn this.add(tl, position);\n\t\t};\n\n\t\tp.staggerFrom = function(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\tvars.runBackwards = true;\n\t\t\treturn this.staggerTo(targets, duration, _defaultImmediateRender(this, vars), stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tp.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\treturn this.staggerTo(targets, duration, _defaultImmediateRender(this, toVars, fromVars), stagger, position, onCompleteAll, onCompleteAllParams, onCompleteAllScope);\n\t\t};\n\n\t\tp.call = function(callback, params, scope, position) {\n\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t};\n\n\t\tp.set = function(target, vars, position) {\n\t\t\treturn this.add( new TweenLite(target, 0, _defaultImmediateRender(this, vars, null, true)), position);\n\t\t};\n\n\t\tTimelineLite.exportRoot = function(vars, ignoreDelayedCalls) {\n\t\t\tvars = vars || {};\n\t\t\tif (vars.smoothChildTiming == null) {\n\t\t\t\tvars.smoothChildTiming = true;\n\t\t\t}\n\t\t\tvar tl = new TimelineLite(vars),\n\t\t\t\troot = tl._timeline,\n\t\t\t\thasNegativeStart, time,\ttween, next;\n\t\t\tif (ignoreDelayedCalls == null) {\n\t\t\t\tignoreDelayedCalls = true;\n\t\t\t}\n\t\t\troot._remove(tl, true);\n\t\t\ttl._startTime = 0;\n\t\t\ttl._rawPrevTime = tl._time = tl._totalTime = root._time;\n\t\t\ttween = root._first;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next;\n\t\t\t\tif (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) {\n\t\t\t\t\ttime = tween._startTime - tween._delay;\n\t\t\t\t\tif (time < 0) {\n\t\t\t\t\t\thasNegativeStart = 1;\n\t\t\t\t\t}\n\t\t\t\t\ttl.add(tween, time);\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t\troot.add(tl, 0);\n\t\t\tif (hasNegativeStart) { //calling totalDuration() will force the adjustment necessary to shift the children forward so none of them start before zero, and moves the timeline backwards the same amount, so the playhead is still aligned where it should be globally, but the timeline doesn't have illegal children that start before zero.\n\t\t\t\ttl.totalDuration();\n\t\t\t}\n\t\t\treturn tl;\n\t\t};\n\n\t\tp.add = function(value, position, align, stagger) {\n\t\t\tvar self = this,\n\t\t\t\tcurTime, l, i, child, tl, beforeRawTime;\n\t\t\tif (typeof(position) !== \""number\"") {\n\t\t\t\tposition = self._parseTimeOrLabel(position, 0, true, value);\n\t\t\t}\n\t\t\tif (!(value instanceof Animation)) {\n\t\t\t\tif ((value instanceof Array) || (value && value.push && _isArray(value))) {\n\t\t\t\t\talign = align || \""normal\"";\n\t\t\t\t\tstagger = stagger || 0;\n\t\t\t\t\tcurTime = position;\n\t\t\t\t\tl = value.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif (_isArray(child = value[i])) {\n\t\t\t\t\t\t\tchild = new TimelineLite({tweens:child});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.add(child, curTime);\n\t\t\t\t\t\tif (typeof(child) !== \""string\"" && typeof(child) !== \""function\"") {\n\t\t\t\t\t\t\tif (align === \""sequence\"") {\n\t\t\t\t\t\t\t\tcurTime = child._startTime + (child.totalDuration() / child._timeScale);\n\t\t\t\t\t\t\t} else if (align === \""start\"") {\n\t\t\t\t\t\t\t\tchild._startTime -= child.delay();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurTime += stagger;\n\t\t\t\t\t}\n\t\t\t\t\treturn self._uncache(true);\n\t\t\t\t} else if (typeof(value) === \""string\"") {\n\t\t\t\t\treturn self.addLabel(value, position);\n\t\t\t\t} else if (typeof(value) === \""function\"") {\n\t\t\t\t\tvalue = TweenLite.delayedCall(0, value);\n\t\t\t\t} else {\n\t\t\t\t\tthrow(\""Cannot add \"" + value + \"" into the timeline; it is not a tween, timeline, function, or string.\"");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tSimpleTimeline.prototype.add.call(self, value, position);\n\n\t\t\tif (value._time || (!value._duration && value._initted)) { //in case, for example, the _startTime is moved on a tween that has already rendered. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning.\n\t\t\t\tcurTime = (self.rawTime() - value._startTime) * value._timeScale;\n\t\t\t\tif (!value._duration || Math.abs(Math.max(0, Math.min(value.totalDuration(), curTime))) - value._totalTime > 0.00001) {\n\t\t\t\t\tvalue.render(curTime, false, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\t\t\tif (self._gc || self._time === self._duration) if (!self._paused) if (self._duration < self.duration()) {\n\t\t\t\t//in case any of the ancestors had completed but should now be enabled...\n\t\t\t\ttl = self;\n\t\t\t\tbeforeRawTime = (tl.rawTime() > value._startTime); //if the tween is placed on the timeline so that it starts BEFORE the current rawTime, we should align the playhead (move the timeline). This is because sometimes users will create a timeline, let it finish, and much later append a tween and expect it to run instead of jumping to its end state. While technically one could argue that it should jump to its end state, that's not what users intuitively expect.\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tif (beforeRawTime && tl._timeline.smoothChildTiming) {\n\t\t\t\t\t\ttl.totalTime(tl._totalTime, true); //moves the timeline (shifts its startTime) if necessary, and also enables it.\n\t\t\t\t\t} else if (tl._gc) {\n\t\t\t\t\t\ttl._enabled(true, false);\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn self;\n\t\t};\n\n\t\tp.remove = function(value) {\n\t\t\tif (value instanceof Animation) {\n\t\t\t\tthis._remove(value, false);\n\t\t\t\tvar tl = value._timeline = value.vars.useFrames ? Animation._rootFramesTimeline : Animation._rootTimeline; //now that it's removed, default it to the root timeline so that if it gets played again, it doesn't jump back into this timeline.\n\t\t\t\tvalue._startTime = (value._paused ? value._pauseTime : tl._time) - ((!value._reversed ? value._totalTime : value.totalDuration() - value._totalTime) / value._timeScale); //ensure that if it gets played again, the timing is correct.\n\t\t\t\treturn this;\n\t\t\t} else if (value instanceof Array || (value && value.push && _isArray(value))) {\n\t\t\t\tvar i = value.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tthis.remove(value[i]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t} else if (typeof(value) === \""string\"") {\n\t\t\t\treturn this.removeLabel(value);\n\t\t\t}\n\t\t\treturn this.kill(null, value);\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tSimpleTimeline.prototype._remove.call(this, tween, skipDisable);\n\t\t\tvar last = this._last;\n\t\t\tif (!last) {\n\t\t\t\tthis._time = this._totalTime = this._duration = this._totalDuration = 0;\n\t\t\t} else if (this._time > this.duration()) {\n\t\t\t\tthis._time = this._duration;\n\t\t\t\tthis._totalTime = this._totalDuration;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.append = function(value, offsetOrLabel) {\n\t\t\treturn this.add(value, this._parseTimeOrLabel(null, offsetOrLabel, true, value));\n\t\t};\n\n\t\tp.insert = p.insertMultiple = function(value, position, align, stagger) {\n\t\t\treturn this.add(value, position || 0, align, stagger);\n\t\t};\n\n\t\tp.appendMultiple = function(tweens, offsetOrLabel, align, stagger) {\n\t\t\treturn this.add(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true, tweens), align, stagger);\n\t\t};\n\n\t\tp.addLabel = function(label, position) {\n\t\t\tthis._labels[label] = this._parseTimeOrLabel(position);\n\t\t\treturn this;\n\t\t};\n\n\t\tp.addPause = function(position, callback, params, scope) {\n\t\t\tvar t = TweenLite.delayedCall(0, _pauseCallback, params, scope || this);\n\t\t\tt.vars.onComplete = t.vars.onReverseComplete = callback;\n\t\t\tt.data = \""isPause\"";\n\t\t\tthis._hasPause = true;\n\t\t\treturn this.add(t, position);\n\t\t};\n\n\t\tp.removeLabel = function(label) {\n\t\t\tdelete this._labels[label];\n\t\t\treturn this;\n\t\t};\n\n\t\tp.getLabelTime = function(label) {\n\t\t\treturn (this._labels[label] != null) ? this._labels[label] : -1;\n\t\t};\n\n\t\tp._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent, ignore) {\n\t\t\tvar clippedDuration, i;\n\t\t\t//if we're about to add a tween/timeline (or an array of them) that's already a child of this timeline, we should remove it first so that it doesn't contaminate the duration().\n\t\t\tif (ignore instanceof Animation && ignore.timeline === this) {\n\t\t\t\tthis.remove(ignore);\n\t\t\t} else if (ignore && ((ignore instanceof Array) || (ignore.push && _isArray(ignore)))) {\n\t\t\t\ti = ignore.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (ignore[i] instanceof Animation && ignore[i].timeline === this) {\n\t\t\t\t\t\tthis.remove(ignore[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tclippedDuration = (typeof(timeOrLabel) === \""number\"" && !offsetOrLabel) ? 0 : (this.duration() > 99999999999) ? this.recent().endTime(false) : this._duration; //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.\n\t\t\tif (typeof(offsetOrLabel) === \""string\"") {\n\t\t\t\treturn this._parseTimeOrLabel(offsetOrLabel, (appendIfAbsent && typeof(timeOrLabel) === \""number\"" && this._labels[offsetOrLabel] == null) ? timeOrLabel - clippedDuration : 0, appendIfAbsent);\n\t\t\t}\n\t\t\toffsetOrLabel = offsetOrLabel || 0;\n\t\t\tif (typeof(timeOrLabel) === \""string\"" && (isNaN(timeOrLabel) || this._labels[timeOrLabel] != null)) { //if the string is a number like \""1\"", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n\t\t\t\ti = timeOrLabel.indexOf(\""=\"");\n\t\t\t\tif (i === -1) {\n\t\t\t\t\tif (this._labels[timeOrLabel] == null) {\n\t\t\t\t\t\treturn appendIfAbsent ? (this._labels[timeOrLabel] = clippedDuration + offsetOrLabel) : offsetOrLabel;\n\t\t\t\t\t}\n\t\t\t\t\treturn this._labels[timeOrLabel] + offsetOrLabel;\n\t\t\t\t}\n\t\t\t\toffsetOrLabel = parseInt(timeOrLabel.charAt(i-1) + \""1\"", 10) * Number(timeOrLabel.substr(i+1));\n\t\t\t\ttimeOrLabel = (i > 1) ? this._parseTimeOrLabel(timeOrLabel.substr(0, i-1), 0, appendIfAbsent) : clippedDuration;\n\t\t\t} else if (timeOrLabel == null) {\n\t\t\t\ttimeOrLabel = clippedDuration;\n\t\t\t}\n\t\t\treturn Number(timeOrLabel) + offsetOrLabel;\n\t\t};\n\n\t\tp.seek = function(position, suppressEvents) {\n\t\t\treturn this.totalTime((typeof(position) === \""number\"") ? position : this._parseTimeOrLabel(position), (suppressEvents !== false));\n\t\t};\n\n\t\tp.stop = function() {\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.gotoAndPlay = function(position, suppressEvents) {\n\t\t\treturn this.play(position, suppressEvents);\n\t\t};\n\n\t\tp.gotoAndStop = function(position, suppressEvents) {\n\t\t\treturn this.pause(position, suppressEvents);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (this._gc) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\ttotalDur = (!self._dirty) ? self._totalDuration : self.totalDuration(),\n\t\t\t\tprevStart = self._startTime,\n\t\t\t\tprevTimeScale = self._timeScale,\n\t\t\t\tprevPaused = self._paused,\n\t\t\t\ttween, isComplete, next, callback, internalForce, pauseTween, curTime, pauseTime;\n\t\t\tif (prevTime !== self._time) { //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\n\t\t\t\ttime += self._time - prevTime;\n\t\t\t}\n\t\t\tif (self._hasPause && !self._forcingPlayhead && !suppressEvents) {\n\t\t\t\tif (time > prevTime) {\n\t\t\t\t\ttween = self._first;\n\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\tif (!tween._duration) if (tween.data === \""isPause\"" && !tween.ratio && !(tween._startTime === 0 && self._rawPrevTime === 0)) {\n\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttween = self._last;\n\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\tif (!tween._duration) if (tween.data === \""isPause\"" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pauseTween) {\n\t\t\t\t\tself._time = self._totalTime = time = pauseTween._startTime;\n\t\t\t\t\tpauseTime = self._startTime + (self._reversed ? self._duration - time : time) / self._timeScale;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (time >= totalDur - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = self._time = totalDur;\n\t\t\t\tif (!self._reversed) if (!self._hasPausedChild()) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \""onComplete\"";\n\t\t\t\t\tinternalForce = !!self._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\tif (self._duration === 0) if ((time <= 0 && time >= -_tinyNum) || self._rawPrevTime < 0 || self._rawPrevTime === _tinyNum) if (self._rawPrevTime !== time && self._first) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\tif (self._rawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself._rawPrevTime = (self._duration || !suppressEvents || time || self._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\ttime = totalDur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7.\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = 0;\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t}\n\t\t\t\tif (prevTime !== 0 || (self._duration === 0 && self._rawPrevTime !== _tinyNum && (self._rawPrevTime > 0 || (time < 0 && self._rawPrevTime >= 0)))) {\n\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (self._timeline.autoRemoveChildren && self._reversed) { //ensures proper GC if a timeline is resumed after it's finished reversing.\n\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\t} else if (self._rawPrevTime >= 0 && self._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = time;\n\t\t\t\t} else {\n\t\t\t\t\tself._rawPrevTime = (self._duration || !suppressEvents || time || self._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\ttween = self._first;\n\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\tif (!self._initted) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = self._rawPrevTime = time;\n\t\t\t}\n\t\t\tif ((self._time === prevTime || !self._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._initted = true;\n\t\t\t}\n\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time > 0) {\n\t\t\t\tself._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t}\n\n\t\t\tif (prevTime === 0) if (self.vars.onStart) if (self._time !== 0 || !self._duration) if (!suppressEvents) {\n\t\t\t\tself._callback(\""onStart\"");\n\t\t\t}\n\n\t\t\tcurTime = self._time;\n\t\t\tif (curTime >= prevTime) {\n\t\t\t\ttween = self._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== self._time || (self._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= curTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tself.pause();\n\t\t\t\t\t\t\tself._pauseTime = pauseTime; //so that when we resume(), it's starting from exactly the right spot (the pause() method uses the rawTime for the parent, but that may be a bit too far ahead)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttween = self._last;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== self._time || (self._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > self._time) {\n\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\tself.pause();\n\t\t\t\t\t\t\tself._pauseTime = pauseTime; //so that when we resume(), it's starting from exactly the right spot (the pause() method uses the rawTime for the parent, but that may be a bit too far ahead)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._onUpdate) if (!suppressEvents) {\n\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tself._callback(\""onUpdate\"");\n\t\t\t}\n\n\t\t\tif (callback) if (!self._gc) if (prevStart === self._startTime || prevTimeScale !== self._timeScale) if (self._time === 0 || totalDur >= self.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._hasPausedChild = function() {\n\t\t\tvar tween = this._first;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) {\n\t\t\tignoreBeforeTime = ignoreBeforeTime || -9999999999;\n\t\t\tvar a = [],\n\t\t\t\ttween = this._first,\n\t\t\t\tcnt = 0;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._startTime < ignoreBeforeTime) {\n\t\t\t\t\t//do nothing\n\t\t\t\t} else if (tween instanceof TweenLite) {\n\t\t\t\t\tif (tweens !== false) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (timelines !== false) {\n\t\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t\t}\n\t\t\t\t\tif (nested !== false) {\n\t\t\t\t\t\ta = a.concat(tween.getChildren(true, tweens, timelines));\n\t\t\t\t\t\tcnt = a.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tp.getTweensOf = function(target, nested) {\n\t\t\tvar disabled = this._gc,\n\t\t\t\ta = [],\n\t\t\t\tcnt = 0,\n\t\t\t\ttweens, i;\n\t\t\tif (disabled) {\n\t\t\t\tthis._enabled(true, true); //getTweensOf() filters out disabled tweens, and we have to mark them as _gc = true when the timeline completes in order to allow clean garbage collection, so temporarily re-enable the timeline here.\n\t\t\t}\n\t\t\ttweens = TweenLite.getTweensOf(target);\n\t\t\ti = tweens.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) {\n\t\t\t\t\ta[cnt++] = tweens[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (disabled) {\n\t\t\t\tthis._enabled(false, true);\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\t\tp.recent = function() {\n\t\t\treturn this._recent;\n\t\t};\n\n\t\tp._contains = function(tween) {\n\t\t\tvar tl = tween.timeline;\n\t\t\twhile (tl) {\n\t\t\t\tif (tl === this) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\ttl = tl.timeline;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) {\n\t\t\tignoreBeforeTime = ignoreBeforeTime || 0;\n\t\t\tvar tween = this._first,\n\t\t\t\tlabels = this._labels,\n\t\t\t\tp;\n\t\t\twhile (tween) {\n\t\t\t\tif (tween._startTime >= ignoreBeforeTime) {\n\t\t\t\t\ttween._startTime += amount;\n\t\t\t\t}\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\tif (adjustLabels) {\n\t\t\t\tfor (p in labels) {\n\t\t\t\t\tif (labels[p] >= ignoreBeforeTime) {\n\t\t\t\t\t\tlabels[p] += amount;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp._kill = function(vars, target) {\n\t\t\tif (!vars && !target) {\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\tvar tweens = (!target) ? this.getChildren(true, true, false) : this.getTweensOf(target),\n\t\t\t\ti = tweens.length,\n\t\t\t\tchanged = false;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (tweens[i]._kill(vars, target)) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.clear = function(labels) {\n\t\t\tvar tweens = this.getChildren(false, true, true),\n\t\t\t\ti = tweens.length;\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\twhile (--i > -1) {\n\t\t\t\ttweens[i]._enabled(false, false);\n\t\t\t}\n\t\t\tif (labels !== false) {\n\t\t\t\tthis._labels = {};\n\t\t\t}\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tvar tween = this._first;\n\t\t\twhile (tween) {\n\t\t\t\ttween.invalidate();\n\t\t\t\ttween = tween._next;\n\t\t\t}\n\t\t\treturn Animation.prototype.invalidate.call(this);;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (enabled === this._gc) {\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\ttween._enabled(enabled, true);\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tthis._forcingPlayhead = true;\n\t\t\tvar val = Animation.prototype.totalTime.apply(this, arguments);\n\t\t\tthis._forcingPlayhead = false;\n\t\t\treturn val;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tthis.totalDuration(); //just triggers recalculation\n\t\t\t\t}\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tif (this.duration() !== 0 && value !== 0) {\n\t\t\t\tthis.timeScale(this._duration / value);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tvar max = 0,\n\t\t\t\t\t\tself = this,\n\t\t\t\t\t\ttween = self._last,\n\t\t\t\t\t\tprevStart = 999999999999,\n\t\t\t\t\t\tprev, end;\n\t\t\t\t\twhile (tween) {\n\t\t\t\t\t\tprev = tween._prev; //record it here in case the tween changes position in the sequence...\n\t\t\t\t\t\tif (tween._dirty) {\n\t\t\t\t\t\t\ttween.totalDuration(); //could change the tween._startTime, so make sure the tween's cache is clean before analyzing it.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tween._startTime > prevStart && self._sortChildren && !tween._paused && !self._calculatingDuration) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n\t\t\t\t\t\t\tself._calculatingDuration = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add(), like _parseTimeOrLabel().\n\t\t\t\t\t\t\tself.add(tween, tween._startTime - tween._delay);\n\t\t\t\t\t\t\tself._calculatingDuration = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprevStart = tween._startTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tween._startTime < 0 && !tween._paused) { //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n\t\t\t\t\t\t\tmax -= tween._startTime;\n\t\t\t\t\t\t\tif (self._timeline.smoothChildTiming) {\n\t\t\t\t\t\t\t\tself._startTime += tween._startTime / self._timeScale;\n\t\t\t\t\t\t\t\tself._time -= tween._startTime;\n\t\t\t\t\t\t\t\tself._totalTime -= tween._startTime;\n\t\t\t\t\t\t\t\tself._rawPrevTime -= tween._startTime;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.shiftChildren(-tween._startTime, false, -9999999999);\n\t\t\t\t\t\t\tprevStart = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tend = tween._startTime + (tween._totalDuration / tween._timeScale);\n\t\t\t\t\t\tif (end > max) {\n\t\t\t\t\t\t\tmax = end;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = prev;\n\t\t\t\t\t}\n\t\t\t\t\tself._duration = self._totalDuration = max;\n\t\t\t\t\tself._dirty = false;\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (value && this.totalDuration()) ? this.timeScale(this._totalDuration / value) : this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (value === false && this._paused) { //if there's a pause directly at the spot from where we're unpausing, skip it.\n\t\t\t\tvar tween = this._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tif (tween._startTime === this._time && tween.data === \""isPause\"") {\n\t\t\t\t\t\ttween._rawPrevTime = 0; //remember, _rawPrevTime is how zero-duration tweens/callbacks sense directionality and determine whether or not to fire. If _rawPrevTime is the same as _startTime on the next render, it won't fire.\n\t\t\t\t\t}\n\t\t\t\t\ttween = tween._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Animation.prototype.paused.apply(this, arguments);\n\t\t};\n\n\t\tp.usesFrames = function() {\n\t\t\tvar tl = this._timeline;\n\t\t\twhile (tl._timeline) {\n\t\t\t\ttl = tl._timeline;\n\t\t\t}\n\t\t\treturn (tl === Animation._rootFramesTimeline);\n\t\t};\n\n\t\tp.rawTime = function(wrapRepeats) {\n\t\t\treturn (wrapRepeats && (this._paused || (this._repeat && this.time() > 0 && this.totalProgress() < 1))) ? this._totalTime % (this._duration + this._repeatDelay) : this._paused ? this._totalTime : (this._timeline.rawTime(wrapRepeats) - this._startTime) * this._timeScale;\n\t\t};\n\n\t\treturn TimelineLite;\n\n\t}, true);\n\nexport var TimelineLite = globals.TimelineLite;\nexport { TimelineLite as default };\n"",""/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\nimport TweenLite, { _gsScope, globals, Ease, Animation } from \""./TweenLite.js\"";\nimport TimelineLite from \""./TimelineLite.js\"";\n\n_gsScope._gsDefine(\""TimelineMax\"", [\""TimelineLite\"",\""TweenLite\"",\""easing.Ease\""], function() {\n\t\t\n\t\tvar TimelineMax = function(vars) {\n\t\t\t\tTimelineLite.call(this, vars);\n\t\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\t\tthis._cycle = 0;\n\t\t\t\tthis._yoyo = !!this.vars.yoyo;\n\t\t\t\tthis._dirty = true;\n\t\t\t},\n\t\t\t_tinyNum = 0.00000001,\n\t\t\tTweenLiteInternals = TweenLite._internals,\n\t\t\t_lazyTweens = TweenLiteInternals.lazyTweens,\n\t\t\t_lazyRender = TweenLiteInternals.lazyRender,\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\t_easeNone = new Ease(null, null, 1, 0),\n\t\t\tp = TimelineMax.prototype = new TimelineLite();\n\n\t\tp.constructor = TimelineMax;\n\t\tp.kill()._gc = false;\n\t\tTimelineMax.version = \""2.1.3\"";\n\n\t\tp.invalidate = function() {\n\t\t\tthis._yoyo = !!this.vars.yoyo;\n\t\t\tthis._repeat = this.vars.repeat || 0;\n\t\t\tthis._repeatDelay = this.vars.repeatDelay || 0;\n\t\t\tthis._uncache(true);\n\t\t\treturn TimelineLite.prototype.invalidate.call(this);\n\t\t};\n\n\t\tp.addCallback = function(callback, position, params, scope) {\n\t\t\treturn this.add( TweenLite.delayedCall(0, callback, params, scope), position);\n\t\t};\n\n\t\tp.removeCallback = function(callback, position) {\n\t\t\tif (callback) {\n\t\t\t\tif (position == null) {\n\t\t\t\t\tthis._kill(null, callback);\n\t\t\t\t} else {\n\t\t\t\t\tvar a = this.getTweensOf(callback, false),\n\t\t\t\t\t\ti = a.length,\n\t\t\t\t\t\ttime = this._parseTimeOrLabel(position);\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i]._startTime === time) {\n\t\t\t\t\t\t\ta[i]._enabled(false, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.removePause = function(position) {\n\t\t\treturn this.removeCallback(TimelineLite._internals.pauseCallback, position);\n\t\t};\n\n\t\tp.tweenTo = function(position, vars) {\n\t\t\tvars = vars || {};\n\t\t\tvar copy = {ease:_easeNone, useFrames:this.usesFrames(), immediateRender:false, lazy:false},\n\t\t\t\tEngine = (vars.repeat && _globals.TweenMax) || TweenLite,\n\t\t\t\tduration, p, t;\n\t\t\tfor (p in vars) {\n\t\t\t\tcopy[p] = vars[p];\n\t\t\t}\n\t\t\tcopy.time = this._parseTimeOrLabel(position);\n\t\t\tduration = (Math.abs(Number(copy.time) - this._time) / this._timeScale) || 0.001;\n\t\t\tt = new Engine(this, duration, copy);\n\t\t\tcopy.onStart = function() {\n\t\t\t\tt.target.paused(true);\n\t\t\t\tif (t.vars.time !== t.target.time() && duration === t.duration() && !t.isFromTo) { //don't make the duration zero - if it's supposed to be zero, don't worry because it's already initting the tween and will complete immediately, effectively making the duration zero anyway. If we make duration zero, the tween won't run at all.\n\t\t\t\t\tt.duration( Math.abs( t.vars.time - t.target.time()) / t.target._timeScale ).render(t.time(), true, true); //render() right away to ensure that things look right, especially in the case of .tweenTo(0).\n\t\t\t\t}\n\t\t\t\tif (vars.onStart) { //in case the user had an onStart in the vars - we don't want to overwrite it.\n\t\t\t\t\tvars.onStart.apply(vars.onStartScope || vars.callbackScope || t, vars.onStartParams || []); //don't use t._callback(\""onStart\"") or it'll point to the copy.onStart and we'll get a recursion error.\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn t;\n\t\t};\n\n\t\tp.tweenFromTo = function(fromPosition, toPosition, vars) {\n\t\t\tvars = vars || {};\n\t\t\tfromPosition = this._parseTimeOrLabel(fromPosition);\n\t\t\tvars.startAt = {onComplete:this.seek, onCompleteParams:[fromPosition], callbackScope:this};\n\t\t\tvars.immediateRender = (vars.immediateRender !== false);\n\t\t\tvar t = this.tweenTo(toPosition, vars);\n\t\t\tt.isFromTo = 1; //to ensure we don't mess with the duration in the onStart (we've got the start and end values here, so lock it in)\n\t\t\treturn t.duration((Math.abs( t.vars.time - fromPosition) / this._timeScale) || 0.001);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tif (this._gc) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\ttotalDur = (!self._dirty) ? self._totalDuration : self.totalDuration(),\n\t\t\t\tdur = self._duration,\n\t\t\t\tprevTotalTime = self._totalTime,\n\t\t\t\tprevStart = self._startTime,\n\t\t\t\tprevTimeScale = self._timeScale,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tprevPaused = self._paused,\n\t\t\t\tprevCycle = self._cycle,\n\t\t\t\ttween, isComplete, next, callback, internalForce, cycleDuration, pauseTween, curTime, pauseTime;\n\t\t\tif (prevTime !== self._time) { //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\n\t\t\t\ttime += self._time - prevTime;\n\t\t\t}\n\t\t\tif (time >= totalDur - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tif (!self._locked) {\n\t\t\t\t\tself._totalTime = totalDur;\n\t\t\t\t\tself._cycle = self._repeat;\n\t\t\t\t}\n\t\t\t\tif (!self._reversed) if (!self._hasPausedChild()) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \""onComplete\"";\n\t\t\t\t\tinternalForce = !!self._timeline.autoRemoveChildren; //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t\tif (self._duration === 0) if ((time <= 0 && time >= -_tinyNum) || prevRawPrevTime < 0 || prevRawPrevTime === _tinyNum) if (prevRawPrevTime !== time && self._first) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself._rawPrevTime = (self._duration || !suppressEvents || time || self._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\tif (self._yoyo && (self._cycle & 1)) {\n\t\t\t\t\tself._time = time = 0;\n\t\t\t\t} else {\n\t\t\t\t\tself._time = dur;\n\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off). Try (999999999999.7 - 999999999999) * 1 = 0.699951171875 instead of 0.7. We cannot do less then 0.0001 because the same issue can occur when the duration is extremely large like 999999999999 in which case adding 0.00000001, for example, causes it to act like nothing was added.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tif (!self._locked) {\n\t\t\t\t\tself._totalTime = self._cycle = 0;\n\t\t\t\t}\n\t\t\t\tself._time = 0;\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t}\n\t\t\t\tif (prevTime !== 0 || (dur === 0 && prevRawPrevTime !== _tinyNum && (prevRawPrevTime > 0 || (time < 0 && prevRawPrevTime >= 0)) && !self._locked)) { //edge case for checking time < 0 && prevRawPrevTime >= 0: a zero-duration fromTo() tween inside a zero-duration timeline (yeah, very rare)\n\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (self._timeline.autoRemoveChildren && self._reversed) {\n\t\t\t\t\t\tinternalForce = isComplete = true;\n\t\t\t\t\t\tcallback = \""onReverseComplete\"";\n\t\t\t\t\t} else if (prevRawPrevTime >= 0 && self._first) { //when going back beyond the start, force a render so that zero-duration tweens that sit at the very beginning render their start values properly. Otherwise, if the parent timeline's playhead lands exactly at this timeline's startTime, and then moves backwards, the zero-duration tweens at the beginning would still be at their end state.\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = time;\n\t\t\t\t} else {\n\t\t\t\t\tself._rawPrevTime = (dur || !suppressEvents || time || self._rawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline or tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\tif (time === 0 && isComplete) { //if there's a zero-duration tween at the very beginning of a timeline and the playhead lands EXACTLY at time 0, that tween will correctly render its end values, but we need to keep the timeline alive for one more render so that the beginning values render properly as the parent's playhead keeps moving beyond the begining. Imagine obj.x starts at 0 and then we do tl.set(obj, {x:100}).to(obj, 1, {x:200}) and then later we tl.reverse()...the goal is to have obj.x revert to 0. If the playhead happens to land on exactly 0, without this chunk of code, it'd complete the timeline and remove it from the rendering queue (not good).\n\t\t\t\t\t\ttween = self._first;\n\t\t\t\t\t\twhile (tween && tween._startTime === 0) {\n\t\t\t\t\t\t\tif (!tween._duration) {\n\t\t\t\t\t\t\t\tisComplete = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttime = 0; //to avoid occasional floating point rounding errors (could cause problems especially with zero-duration tweens at the very beginning of the timeline)\n\t\t\t\t\tif (!self._initted) {\n\t\t\t\t\t\tinternalForce = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tif (dur === 0 && prevRawPrevTime < 0) { //without this, zero-duration repeating timelines (like with a simple callback nested at the very beginning and a repeatDelay) wouldn't render the first time through.\n\t\t\t\t\tinternalForce = true;\n\t\t\t\t}\n\t\t\t\tself._time = self._rawPrevTime = time;\n\t\t\t\tif (!self._locked) {\n\t\t\t\t\tself._totalTime = time;\n\t\t\t\t\tif (self._repeat !== 0) {\n\t\t\t\t\t\tcycleDuration = dur + self._repeatDelay;\n\t\t\t\t\t\tself._cycle = (self._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but it gets reported as 0.79999999!)\n\t\t\t\t\t\tif (self._cycle) if (self._cycle === self._totalTime / cycleDuration && prevTotalTime <= time) {\n\t\t\t\t\t\t\tself._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._time = self._totalTime - (self._cycle * cycleDuration);\n\t\t\t\t\t\tif (self._yoyo) if (self._cycle & 1) {\n\t\t\t\t\t\t\tself._time = dur - self._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (self._time > dur) {\n\t\t\t\t\t\t\tself._time = dur;\n\t\t\t\t\t\t\ttime = dur + 0.0001; //to avoid occasional floating point rounding error\n\t\t\t\t\t\t} else if (self._time < 0) {\n\t\t\t\t\t\t\tself._time = time = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttime = self._time;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._hasPause && !self._forcingPlayhead && !suppressEvents) {\n\t\t\t\ttime = self._time;\n\t\t\t\tif (time > prevTime || (self._repeat && prevCycle !== self._cycle)) {\n\t\t\t\t\ttween = self._first;\n\t\t\t\t\twhile (tween && tween._startTime <= time && !pauseTween) {\n\t\t\t\t\t\tif (!tween._duration) if (tween.data === \""isPause\"" && !tween.ratio && !(tween._startTime === 0 && self._rawPrevTime === 0)) {\n\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttween = self._last;\n\t\t\t\t\twhile (tween && tween._startTime >= time && !pauseTween) {\n\t\t\t\t\t\tif (!tween._duration) if (tween.data === \""isPause\"" && tween._rawPrevTime > 0) {\n\t\t\t\t\t\t\tpauseTween = tween;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttween = tween._prev;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pauseTween) {\n\t\t\t\t\tpauseTime = self._startTime + (self._reversed ? self._duration - pauseTween._startTime : pauseTween._startTime) / self._timeScale;\n\t\t\t\t\tif (pauseTween._startTime < dur) {\n\t\t\t\t\t\tself._time = self._rawPrevTime = time = pauseTween._startTime;\n\t\t\t\t\t\tself._totalTime = time + (self._cycle * (self._totalDuration + self._repeatDelay));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._cycle !== prevCycle) if (!self._locked) {\n\t\t\t\t/*\n\t\t\t\tmake sure children at the end/beginning of the timeline are rendered properly. If, for example,\n\t\t\t\ta 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n\t\t\t\twould get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n\t\t\t\tcould be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n\t\t\t\twe need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n\t\t\t\tensure that zero-duration tweens at the very beginning or end of the TimelineMax work.\n\t\t\t\t*/\n\t\t\t\tvar backwards = (self._yoyo && (prevCycle & 1) !== 0),\n\t\t\t\t\twrap = (backwards === (self._yoyo && (self._cycle & 1) !== 0)),\n\t\t\t\t\trecTotalTime = self._totalTime,\n\t\t\t\t\trecCycle = self._cycle,\n\t\t\t\t\trecRawPrevTime = self._rawPrevTime,\n\t\t\t\t\trecTime = self._time;\n\n\t\t\t\tself._totalTime = prevCycle * dur;\n\t\t\t\tif (self._cycle < prevCycle) {\n\t\t\t\t\tbackwards = !backwards;\n\t\t\t\t} else {\n\t\t\t\t\tself._totalTime += dur;\n\t\t\t\t}\n\t\t\t\tself._time = prevTime; //temporarily revert _time so that render() renders the children in the correct order. Without this, tweens won't rewind correctly. We could arhictect things in a \""cleaner\"" way by splitting out the rendering queue into a separate method but for performance reasons, we kept it all inside this method.\n\n\t\t\t\tself._rawPrevTime = (dur === 0) ? prevRawPrevTime - 0.0001 : prevRawPrevTime;\n\t\t\t\tself._cycle = prevCycle;\n\t\t\t\tself._locked = true; //prevents changes to totalTime and skips repeat/yoyo behavior when we recursively call render()\n\t\t\t\tprevTime = (backwards) ? 0 : dur;\n\t\t\t\tself.render(prevTime, suppressEvents, (dur === 0));\n\t\t\t\tif (!suppressEvents) if (!self._gc) {\n\t\t\t\t\tif (self.vars.onRepeat) {\n\t\t\t\t\t\tself._cycle = recCycle; //in case the onRepeat alters the playhead or invalidates(), we shouldn't stay locked or use the previous cycle.\n\t\t\t\t\t\tself._locked = false;\n\t\t\t\t\t\tself._callback(\""onRepeat\"");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (prevTime !== self._time) { //in case there's a callback like onComplete in a nested tween/timeline that changes the playhead position, like via seek(), we should just abort.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (wrap) {\n\t\t\t\t\tself._cycle = prevCycle; //if there's an onRepeat, we reverted this above, so make sure it's set properly again. We also unlocked in that scenario, so reset that too.\n\t\t\t\t\tself._locked = true;\n\t\t\t\t\tprevTime = (backwards) ? dur + 0.0001 : -0.0001;\n\t\t\t\t\tself.render(prevTime, true, false);\n\t\t\t\t}\n\t\t\t\tself._locked = false;\n\t\t\t\tif (self._paused && !prevPaused) { //if the render() triggered callback that paused this timeline, we should abort (very rare, but possible)\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tself._time = recTime;\n\t\t\t\tself._totalTime = recTotalTime;\n\t\t\t\tself._cycle = recCycle;\n\t\t\t\tself._rawPrevTime = recRawPrevTime;\n\t\t\t}\n\n\t\t\tif ((self._time === prevTime || !self._first) && !force && !internalForce && !pauseTween) {\n\t\t\t\tif (prevTotalTime !== self._totalTime) if (self._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate.\n\t\t\t\t\tself._callback(\""onUpdate\"");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._initted = true;\n\t\t\t}\n\n\t\t\tif (!self._active) if (!self._paused && self._totalTime !== prevTotalTime && time > 0) {\n\t\t\t\tself._active = true;  //so that if the user renders the timeline (as opposed to the parent timeline rendering it), it is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the timeline already finished but the user manually re-renders it as halfway done, for example.\n\t\t\t}\n\n\t\t\tif (prevTotalTime === 0) if (self.vars.onStart) if (self._totalTime !== 0 || !self._totalDuration) if (!suppressEvents) {\n\t\t\t\tself._callback(\""onStart\"");\n\t\t\t}\n\n\t\t\tcurTime = self._time;\n\t\t\tif (curTime >= prevTime) {\n\t\t\t\ttween = self._first;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== self._time || (self._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= self._time && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tself.pause();\n\t\t\t\t\t\t\tself._pauseTime = pauseTime; //so that when we resume(), it's starting from exactly the right spot (the pause() method uses the rawTime for the parent, but that may be a bit too far ahead)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttween = self._last;\n\t\t\t\twhile (tween) {\n\t\t\t\t\tnext = tween._prev; //record it here because the value could change after rendering...\n\t\t\t\t\tif (curTime !== self._time || (self._paused && !prevPaused)) { //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\t\tif (pauseTween === tween) {\n\t\t\t\t\t\t\tpauseTween = tween._prev; //the linked list is organized by _startTime, thus it's possible that a tween could start BEFORE the pause and end after it, in which case it would be positioned before the pause tween in the linked list, but we should render it before we pause() the timeline and cease rendering. This is only a concern when going in reverse.\n\t\t\t\t\t\t\twhile (pauseTween && pauseTween.endTime() > self._time) {\n\t\t\t\t\t\t\t\tpauseTween.render( (pauseTween._reversed ? pauseTween.totalDuration() - ((time - pauseTween._startTime) * pauseTween._timeScale) : (time - pauseTween._startTime) * pauseTween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t\t\tpauseTween = pauseTween._prev;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpauseTween = null;\n\t\t\t\t\t\t\tself.pause();\n\t\t\t\t\t\t\tself._pauseTime = pauseTime; //so that when we resume(), it's starting from exactly the right spot (the pause() method uses the rawTime for the parent, but that may be a bit too far ahead)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttween = next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._onUpdate) if (!suppressEvents) {\n\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tself._callback(\""onUpdate\"");\n\t\t\t}\n\t\t\tif (callback) if (!self._locked) if (!self._gc) if (prevStart === self._startTime || prevTimeScale !== self._timeScale) if (self._time === 0 || totalDur >= self.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onComplete on a timeline that reports/checks tweened values.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.getActive = function(nested, tweens, timelines) {\n\t\t\tvar a = [],\n\t\t\t\tall = this.getChildren(nested || (nested == null), tweens || (nested == null), !!timelines),\n\t\t\t\tcnt = 0,\n\t\t\t\tl = all.length,\n\t\t\t\ti, tween;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\ttween = all[i];\n\t\t\t\tif (tween.isActive()) {\n\t\t\t\t\ta[cnt++] = tween;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a;\n\t\t};\n\n\n\t\tp.getLabelAfter = function(time) {\n\t\t\tif (!time) if (time !== 0) { //faster than isNan()\n\t\t\t\ttime = this._time;\n\t\t\t}\n\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\tl = labels.length,\n\t\t\t\ti;\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tif (labels[i].time > time) {\n\t\t\t\t\treturn labels[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tp.getLabelBefore = function(time) {\n\t\t\tif (time == null) {\n\t\t\t\ttime = this._time;\n\t\t\t}\n\t\t\tvar labels = this.getLabelsArray(),\n\t\t\t\ti = labels.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (labels[i].time < time) {\n\t\t\t\t\treturn labels[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tp.getLabelsArray = function() {\n\t\t\tvar a = [],\n\t\t\t\tcnt = 0,\n\t\t\t\tp;\n\t\t\tfor (p in this._labels) {\n\t\t\t\ta[cnt++] = {time:this._labels[p], name:p};\n\t\t\t}\n\t\t\ta.sort(function(a,b) {\n\t\t\t\treturn a.time - b.time;\n\t\t\t});\n\t\t\treturn a;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._locked = false; //unlock and set cycle in case invalidate() is called from inside an onRepeat\n\t\t\treturn TimelineLite.prototype.invalidate.call(this);\n\t\t};\n\n\n//---- GETTERS / SETTERS -------------------------------------------------------------------------------------------------------\n\n\t\tp.progress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? (this._time / this.duration()) || 0 : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), suppressEvents);\n\t\t};\n\n\t\tp.totalProgress = function(value, suppressEvents) {\n\t\t\treturn (!arguments.length) ? (this._totalTime / this.totalDuration()) || 0 : this.totalTime( this.totalDuration() * value, suppressEvents);\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (this._dirty) {\n\t\t\t\t\tTimelineLite.prototype.totalDuration.call(this); //just forces refresh\n\t\t\t\t\t//Instead of Infinity, we use 999999999999 so that we can accommodate reverses.\n\t\t\t\t\tthis._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat);\n\t\t\t\t}\n\t\t\t\treturn this._totalDuration;\n\t\t\t}\n\t\t\treturn (this._repeat === -1 || !value) ? this : this.timeScale( this.totalDuration() / value );\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\tvar duration = this._duration,\n\t\t\t\tcycle = this._cycle,\n\t\t\t\tcycleDur = cycle * (duration + this._repeatDelay);\n\t\t\tif (value > duration) {\n\t\t\t\tvalue = duration;\n\t\t\t}\n\t\t\treturn this.totalTime((this._yoyo && (cycle & 1)) ? duration - value + cycleDur : this._repeat ? value + cycleDur : value, suppressEvents);\n\t\t};\n\n\t\tp.repeat = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeat;\n\t\t\t}\n\t\t\tthis._repeat = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.repeatDelay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._repeatDelay;\n\t\t\t}\n\t\t\tthis._repeatDelay = value;\n\t\t\treturn this._uncache(true);\n\t\t};\n\n\t\tp.yoyo = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._yoyo;\n\t\t\t}\n\t\t\tthis._yoyo = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.currentLabel = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.getLabelBefore(this._time + _tinyNum);\n\t\t\t}\n\t\t\treturn this.seek(value, true);\n\t\t};\n\t\t\n\t\treturn TimelineMax;\n\t\t\n\t}, true);\n\nexport var TimelineMax = globals.TimelineMax;\nexport { TimelineLite, TimelineMax as default };"",""/*!\n * VERSION: 1.3.9\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\nimport { _gsScope } from \""./TweenLite.js\"";\n\n\t\tvar _RAD2DEG = 180 / Math.PI,\n\t\t\t_r1 = [],\n\t\t\t_r2 = [],\n\t\t\t_r3 = [],\n\t\t\t_corProps = {},\n\t\t\t_globals = _gsScope._gsDefine.globals,\n\t\t\tSegment = function(a, b, c, d) {\n\t\t\t\tif (c === d) { //if c and d match, the final autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\tc = d - (d - b) / 1000000;\n\t\t\t\t}\n\t\t\t\tif (a === b) { //if a and b match, the starting autoRotate value could lock at -90 degrees, so differentiate them slightly.\n\t\t\t\t\tb = a + (c - a) / 1000000;\n\t\t\t\t}\n\t\t\t\tthis.a = a;\n\t\t\t\tthis.b = b;\n\t\t\t\tthis.c = c;\n\t\t\t\tthis.d = d;\n\t\t\t\tthis.da = d - a;\n\t\t\t\tthis.ca = c - a;\n\t\t\t\tthis.ba = b - a;\n\t\t\t},\n\t\t\t_correlate = \"",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,\"",\n\t\t\tcubicToQuadratic = function(a, b, c, d) {\n\t\t\t\tvar q1 = {a:a},\n\t\t\t\t\tq2 = {},\n\t\t\t\t\tq3 = {},\n\t\t\t\t\tq4 = {c:d},\n\t\t\t\t\tmab = (a + b) / 2,\n\t\t\t\t\tmbc = (b + c) / 2,\n\t\t\t\t\tmcd = (c + d) / 2,\n\t\t\t\t\tmabc = (mab + mbc) / 2,\n\t\t\t\t\tmbcd = (mbc + mcd) / 2,\n\t\t\t\t\tm8 = (mbcd - mabc) / 8;\n\t\t\t\tq1.b = mab + (a - mab) / 4;\n\t\t\t\tq2.b = mabc + m8;\n\t\t\t\tq1.c = q2.a = (q1.b + q2.b) / 2;\n\t\t\t\tq2.c = q3.a = (mabc + mbcd) / 2;\n\t\t\t\tq3.b = mbcd - m8;\n\t\t\t\tq4.b = mcd + (d - mcd) / 4;\n\t\t\t\tq3.c = q4.a = (q3.b + q4.b) / 2;\n\t\t\t\treturn [q1, q2, q3, q4];\n\t\t\t},\n\t\t\t_calculateControlPoints = function(a, curviness, quad, basic, correlate) {\n\t\t\t\tvar l = a.length - 1,\n\t\t\t\t\tii = 0,\n\t\t\t\t\tcp1 = a[0].a,\n\t\t\t\t\ti, p1, p2, p3, seg, m1, m2, mm, cp2, qb, r1, r2, tl;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tseg = a[ii];\n\t\t\t\t\tp1 = seg.a;\n\t\t\t\t\tp2 = seg.d;\n\t\t\t\t\tp3 = a[ii+1].d;\n\n\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\tr1 = _r1[i];\n\t\t\t\t\t\tr2 = _r2[i];\n\t\t\t\t\t\ttl = ((r2 + r1) * curviness * 0.25) / (basic ? 0.5 : _r3[i] || 0.5);\n\t\t\t\t\t\tm1 = p2 - (p2 - p1) * (basic ? curviness * 0.5 : (r1 !== 0 ? tl / r1 : 0));\n\t\t\t\t\t\tm2 = p2 + (p3 - p2) * (basic ? curviness * 0.5 : (r2 !== 0 ? tl / r2 : 0));\n\t\t\t\t\t\tmm = p2 - (m1 + (((m2 - m1) * ((r1 * 3 / (r1 + r2)) + 0.5) / 4) || 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm1 = p2 - (p2 - p1) * curviness * 0.5;\n\t\t\t\t\t\tm2 = p2 + (p3 - p2) * curviness * 0.5;\n\t\t\t\t\t\tmm = p2 - (m1 + m2) / 2;\n\t\t\t\t\t}\n\t\t\t\t\tm1 += mm;\n\t\t\t\t\tm2 += mm;\n\n\t\t\t\t\tseg.c = cp2 = m1;\n\t\t\t\t\tif (i !== 0) {\n\t\t\t\t\t\tseg.b = cp1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tseg.b = cp1 = seg.a + (seg.c - seg.a) * 0.6; //instead of placing b on a exactly, we move it inline with c so that if the user specifies an ease like Back.easeIn or Elastic.easeIn which goes BEYOND the beginning, it will do so smoothly.\n\t\t\t\t\t}\n\n\t\t\t\t\tseg.da = p2 - p1;\n\t\t\t\t\tseg.ca = cp2 - p1;\n\t\t\t\t\tseg.ba = cp1 - p1;\n\n\t\t\t\t\tif (quad) {\n\t\t\t\t\t\tqb = cubicToQuadratic(p1, cp1, cp2, p2);\n\t\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t\t\tii += 4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tii++;\n\t\t\t\t\t}\n\n\t\t\t\t\tcp1 = m2;\n\t\t\t\t}\n\t\t\t\tseg = a[ii];\n\t\t\t\tseg.b = cp1;\n\t\t\t\tseg.c = cp1 + (seg.d - cp1) * 0.4; //instead of placing c on d exactly, we move it inline with b so that if the user specifies an ease like Back.easeOut or Elastic.easeOut which goes BEYOND the end, it will do so smoothly.\n\t\t\t\tseg.da = seg.d - seg.a;\n\t\t\t\tseg.ca = seg.c - seg.a;\n\t\t\t\tseg.ba = cp1 - seg.a;\n\t\t\t\tif (quad) {\n\t\t\t\t\tqb = cubicToQuadratic(seg.a, cp1, seg.c, seg.d);\n\t\t\t\t\ta.splice(ii, 1, qb[0], qb[1], qb[2], qb[3]);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_parseAnchors = function(values, p, correlate, prepend) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tl, i, p1, p2, p3, tmp;\n\t\t\t\tif (prepend) {\n\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t\ti = values.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (typeof( (tmp = values[i][p]) ) === \""string\"") if (tmp.charAt(1) === \""=\"") {\n\t\t\t\t\t\t\tvalues[i][p] = prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)); //accommodate relative values. Do it inline instead of breaking it out into a function for speed reasons\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tl = values.length - 2;\n\t\t\t\tif (l < 0) {\n\t\t\t\t\ta[0] = new Segment(values[0][p], 0, 0, values[0][p]);\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tp1 = values[i][p];\n\t\t\t\t\tp2 = values[i+1][p];\n\t\t\t\t\ta[i] = new Segment(p1, 0, 0, p2);\n\t\t\t\t\tif (correlate) {\n\t\t\t\t\t\tp3 = values[i+2][p];\n\t\t\t\t\t\t_r1[i] = (_r1[i] || 0) + (p2 - p1) * (p2 - p1);\n\t\t\t\t\t\t_r2[i] = (_r2[i] || 0) + (p3 - p2) * (p3 - p2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta[i] = new Segment(values[i][p], 0, 0, values[i+1][p]);\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\tbezierThrough = function(values, curviness, quadratic, basic, correlate, prepend) {\n\t\t\t\tvar obj = {},\n\t\t\t\t\tprops = [],\n\t\t\t\t\tfirst = prepend || values[0],\n\t\t\t\t\ti, p, a, j, r, l, seamless, last;\n\t\t\t\tcorrelate = (typeof(correlate) === \""string\"") ? \"",\""+correlate+\"",\"" : _correlate;\n\t\t\t\tif (curviness == null) {\n\t\t\t\t\tcurviness = 1;\n\t\t\t\t}\n\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\tprops.push(p);\n\t\t\t\t}\n\t\t\t\t//check to see if the last and first values are identical (well, within 0.05). If so, make seamless by appending the second element to the very end of the values array and the 2nd-to-last element to the very beginning (we'll remove those segments later)\n\t\t\t\tif (values.length > 1) {\n\t\t\t\t\tlast = values[values.length - 1];\n\t\t\t\t\tseamless = true;\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tp = props[i];\n\t\t\t\t\t\tif (Math.abs(first[p] - last[p]) > 0.05) { //build in a tolerance of +/-0.05 to accommodate rounding errors.\n\t\t\t\t\t\t\tseamless = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\tvalues = values.concat(); //duplicate the array to avoid contaminating the original which the user may be reusing for other tweens\n\t\t\t\t\t\tif (prepend) {\n\t\t\t\t\t\t\tvalues.unshift(prepend);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalues.push(values[1]);\n\t\t\t\t\t\tprepend = values[values.length - 3];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_r1.length = _r2.length = _r3.length = 0;\n\t\t\t\ti = props.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\t_corProps[p] = (correlate.indexOf(\"",\""+p+\"",\"") !== -1);\n\t\t\t\t\tobj[p] = _parseAnchors(values, p, _corProps[p], prepend);\n\t\t\t\t}\n\t\t\t\ti = _r1.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t_r1[i] = Math.sqrt(_r1[i]);\n\t\t\t\t\t_r2[i] = Math.sqrt(_r2[i]);\n\t\t\t\t}\n\t\t\t\tif (!basic) {\n\t\t\t\t\ti = props.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (_corProps[p]) {\n\t\t\t\t\t\t\ta = obj[props[i]];\n\t\t\t\t\t\t\tl = a.length - 1;\n\t\t\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\t\t\tr = (a[j+1].da / _r2[j] + a[j].da / _r1[j]) || 0;\n\t\t\t\t\t\t\t\t_r3[j] = (_r3[j] || 0) + r * r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ti = _r3.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t_r3[i] = Math.sqrt(_r3[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti = props.length;\n\t\t\t\tj = quadratic ? 4 : 1;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\ta = obj[p];\n\t\t\t\t\t_calculateControlPoints(a, curviness, quadratic, basic, _corProps[p]); //this method requires that _parseAnchors() and _setSegmentRatios() ran first so that _r1, _r2, and _r3 values are populated for all properties\n\t\t\t\t\tif (seamless) {\n\t\t\t\t\t\ta.splice(0, j);\n\t\t\t\t\t\ta.splice(a.length - j, j);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t_parseBezierData = function(values, type, prepend) {\n\t\t\t\ttype = type || \""soft\"";\n\t\t\t\tvar obj = {},\n\t\t\t\t\tinc = (type === \""cubic\"") ? 3 : 2,\n\t\t\t\t\tsoft = (type === \""soft\""),\n\t\t\t\t\tprops = [],\n\t\t\t\t\ta, b, c, d, cur, i, j, l, p, cnt, tmp;\n\t\t\t\tif (soft && prepend) {\n\t\t\t\t\tvalues = [prepend].concat(values);\n\t\t\t\t}\n\t\t\t\tif (values == null || values.length < inc + 1) { throw \""invalid Bezier data\""; }\n\t\t\t\tfor (p in values[0]) {\n\t\t\t\t\tprops.push(p);\n\t\t\t\t}\n\t\t\t\ti = props.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tp = props[i];\n\t\t\t\t\tobj[p] = cur = [];\n\t\t\t\t\tcnt = 0;\n\t\t\t\t\tl = values.length;\n\t\t\t\t\tfor (j = 0; j < l; j++) {\n\t\t\t\t\t\ta = (prepend == null) ? values[j][p] : (typeof( (tmp = values[j][p]) ) === \""string\"" && tmp.charAt(1) === \""=\"") ? prepend[p] + Number(tmp.charAt(0) + tmp.substr(2)) : Number(tmp);\n\t\t\t\t\t\tif (soft) if (j > 1) if (j < l - 1) {\n\t\t\t\t\t\t\tcur[cnt++] = (a + cur[cnt-2]) / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcur[cnt++] = a;\n\t\t\t\t\t}\n\t\t\t\t\tl = cnt - inc + 1;\n\t\t\t\t\tcnt = 0;\n\t\t\t\t\tfor (j = 0; j < l; j += inc) {\n\t\t\t\t\t\ta = cur[j];\n\t\t\t\t\t\tb = cur[j+1];\n\t\t\t\t\t\tc = cur[j+2];\n\t\t\t\t\t\td = (inc === 2) ? 0 : cur[j+3];\n\t\t\t\t\t\tcur[cnt++] = tmp = (inc === 3) ? new Segment(a, b, c, d) : new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t\t\t\t}\n\t\t\t\t\tcur.length = cnt;\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\t_addCubicLengths = function(a, steps, resolution) {\n\t\t\t\tvar inc = 1 / resolution,\n\t\t\t\t\tj = a.length,\n\t\t\t\t\td, d1, s, da, ca, ba, p, i, inv, bez, index;\n\t\t\t\twhile (--j > -1) {\n\t\t\t\t\tbez = a[j];\n\t\t\t\t\ts = bez.a;\n\t\t\t\t\tda = bez.d - s;\n\t\t\t\t\tca = bez.c - s;\n\t\t\t\t\tba = bez.b - s;\n\t\t\t\t\td = d1 = 0;\n\t\t\t\t\tfor (i = 1; i <= resolution; i++) {\n\t\t\t\t\t\tp = inc * i;\n\t\t\t\t\t\tinv = 1 - p;\n\t\t\t\t\t\td = d1 - (d1 = (p * p * da + 3 * inv * (p * ca + inv * ba)) * p);\n\t\t\t\t\t\tindex = j * resolution + i - 1;\n\t\t\t\t\t\tsteps[index] = (steps[index] || 0) + d * d;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_parseLengthData = function(obj, resolution) {\n\t\t\t\tresolution = resolution >> 0 || 6;\n\t\t\t\tvar a = [],\n\t\t\t\t\tlengths = [],\n\t\t\t\t\td = 0,\n\t\t\t\t\ttotal = 0,\n\t\t\t\t\tthreshold = resolution - 1,\n\t\t\t\t\tsegments = [],\n\t\t\t\t\tcurLS = [], //current length segments array\n\t\t\t\t\tp, i, l, index;\n\t\t\t\tfor (p in obj) {\n\t\t\t\t\t_addCubicLengths(obj[p], a, resolution);\n\t\t\t\t}\n\t\t\t\tl = a.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\td += Math.sqrt(a[i]);\n\t\t\t\t\tindex = i % resolution;\n\t\t\t\t\tcurLS[index] = d;\n\t\t\t\t\tif (index === threshold) {\n\t\t\t\t\t\ttotal += d;\n\t\t\t\t\t\tindex = (i / resolution) >> 0;\n\t\t\t\t\t\tsegments[index] = curLS;\n\t\t\t\t\t\tlengths[index] = total;\n\t\t\t\t\t\td = 0;\n\t\t\t\t\t\tcurLS = [];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {length:total, lengths:lengths, segments:segments};\n\t\t\t},\n\n\n\n\t\t\tBezierPlugin = _gsScope._gsDefine.plugin({\n\t\t\t\t\tpropName: \""bezier\"",\n\t\t\t\t\tpriority: -1,\n\t\t\t\t\tversion: \""1.3.9\"",\n\t\t\t\t\tAPI: 2,\n\t\t\t\t\tglobal:true,\n\n\t\t\t\t\t//gets called when the tween renders for the first time. This is where initial values should be recorded and any setup routines should run.\n\t\t\t\t\tinit: function(target, vars, tween) {\n\t\t\t\t\t\tthis._target = target;\n\t\t\t\t\t\tif (vars instanceof Array) {\n\t\t\t\t\t\t\tvars = {values:vars};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._func = {};\n\t\t\t\t\t\tthis._mod = {};\n\t\t\t\t\t\tthis._props = [];\n\t\t\t\t\t\tthis._timeRes = (vars.timeResolution == null) ? 6 : parseInt(vars.timeResolution, 10);\n\t\t\t\t\t\tvar values = vars.values || [],\n\t\t\t\t\t\t\tfirst = {},\n\t\t\t\t\t\t\tsecond = values[0],\n\t\t\t\t\t\t\tautoRotate = vars.autoRotate || tween.vars.orientToBezier,\n\t\t\t\t\t\t\tp, isFunc, i, j, prepend;\n\n\t\t\t\t\t\tthis._autoRotate = autoRotate ? (autoRotate instanceof Array) ? autoRotate : [[\""x\"",\""y\"",\""rotation\"",((autoRotate === true) ? 0 : Number(autoRotate) || 0)]] : null;\n\t\t\t\t\t\tfor (p in second) {\n\t\t\t\t\t\t\tthis._props.push(p);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = this._props[i];\n\n\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\tisFunc = this._func[p] = (typeof(target[p]) === \""function\"");\n\t\t\t\t\t\t\tfirst[p] = (!isFunc) ? parseFloat(target[p]) : target[ ((p.indexOf(\""set\"") || typeof(target[\""get\"" + p.substr(3)]) !== \""function\"") ? p : \""get\"" + p.substr(3)) ]();\n\t\t\t\t\t\t\tif (!prepend) if (first[p] !== values[0][p]) {\n\t\t\t\t\t\t\t\tprepend = first;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._beziers = (vars.type !== \""cubic\"" && vars.type !== \""quadratic\"" && vars.type !== \""soft\"") ? bezierThrough(values, isNaN(vars.curviness) ? 1 : vars.curviness, false, (vars.type === \""thruBasic\""), vars.correlate, prepend) : _parseBezierData(values, vars.type, first);\n\t\t\t\t\t\tthis._segCount = this._beziers[p].length;\n\n\t\t\t\t\t\tif (this._timeRes) {\n\t\t\t\t\t\t\tvar ld = _parseLengthData(this._beziers, this._timeRes);\n\t\t\t\t\t\t\tthis._length = ld.length;\n\t\t\t\t\t\t\tthis._lengths = ld.lengths;\n\t\t\t\t\t\t\tthis._segments = ld.segments;\n\t\t\t\t\t\t\tthis._l1 = this._li = this._s1 = this._si = 0;\n\t\t\t\t\t\t\tthis._l2 = this._lengths[0];\n\t\t\t\t\t\t\tthis._curSeg = this._segments[0];\n\t\t\t\t\t\t\tthis._s2 = this._curSeg[0];\n\t\t\t\t\t\t\tthis._prec = 1 / this._curSeg.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((autoRotate = this._autoRotate)) {\n\t\t\t\t\t\t\tthis._initialRotations = [];\n\t\t\t\t\t\t\tif (!(autoRotate[0] instanceof Array)) {\n\t\t\t\t\t\t\t\tthis._autoRotate = autoRotate = [autoRotate];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ti = autoRotate.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tfor (j = 0; j < 3; j++) {\n\t\t\t\t\t\t\t\t\tp = autoRotate[i][j];\n\t\t\t\t\t\t\t\t\tthis._func[p] = (typeof(target[p]) === \""function\"") ? target[ ((p.indexOf(\""set\"") || typeof(target[\""get\"" + p.substr(3)]) !== \""function\"") ? p : \""get\"" + p.substr(3)) ] : false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = autoRotate[i][2];\n\t\t\t\t\t\t\t\tthis._initialRotations[i] = (this._func[p] ? this._func[p].call(this._target) : this._target[p]) || 0;\n\t\t\t\t\t\t\t\tthis._overwriteProps.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._startRatio = tween.vars.runBackwards ? 1 : 0; //we determine the starting ratio when the tween inits which is always 0 unless the tween has runBackwards:true (indicating it's a from() tween) in which case it's 1.\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\n\t\t\t\t\t//called each time the values should be updated, and the ratio gets passed as the only parameter (typically it's a value between 0 and 1, but it can exceed those when using an ease like Elastic.easeOut or Back.easeOut, etc.)\n\t\t\t\t\tset: function(v) {\n\t\t\t\t\t\tvar segments = this._segCount,\n\t\t\t\t\t\t\tfunc = this._func,\n\t\t\t\t\t\t\ttarget = this._target,\n\t\t\t\t\t\t\tnotStart = (v !== this._startRatio),\n\t\t\t\t\t\t\tcurIndex, inv, i, p, b, t, val, l, lengths, curSeg, v1;\n\t\t\t\t\t\tif (!this._timeRes) {\n\t\t\t\t\t\t\tcurIndex = (v < 0) ? 0 : (v >= 1) ? segments - 1 : (segments * v) >> 0;\n\t\t\t\t\t\t\tt = (v - (curIndex * (1 / segments))) * segments;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlengths = this._lengths;\n\t\t\t\t\t\t\tcurSeg = this._curSeg;\n\t\t\t\t\t\t\tv1 = v * this._length;\n\t\t\t\t\t\t\ti = this._li;\n\t\t\t\t\t\t\t//find the appropriate segment (if the currently cached one isn't correct)\n\t\t\t\t\t\t\tif (v1 > this._l2 && i < segments - 1) {\n\t\t\t\t\t\t\t\tl = segments - 1;\n\t\t\t\t\t\t\t\twhile (i < l && (this._l2 = lengths[++i]) <= v1) {\t}\n\t\t\t\t\t\t\t\tthis._l1 = lengths[i-1];\n\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[(this._s1 = this._si = 0)];\n\t\t\t\t\t\t\t} else if (v1 < this._l1 && i > 0) {\n\t\t\t\t\t\t\t\twhile (i > 0 && (this._l1 = lengths[--i]) >= v1) { }\n\t\t\t\t\t\t\t\tif (i === 0 && v1 < this._l1) {\n\t\t\t\t\t\t\t\t\tthis._l1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._l2 = lengths[i];\n\t\t\t\t\t\t\t\tthis._li = i;\n\t\t\t\t\t\t\t\tthis._curSeg = curSeg = this._segments[i];\n\t\t\t\t\t\t\t\tthis._s1 = curSeg[(this._si = curSeg.length - 1) - 1] || 0;\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[this._si];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurIndex = i;\n\t\t\t\t\t\t\t//now find the appropriate sub-segment (we split it into the number of pieces that was defined by \""precision\"" and measured each one)\n\t\t\t\t\t\t\tv1 -= this._l1;\n\t\t\t\t\t\t\ti = this._si;\n\t\t\t\t\t\t\tif (v1 > this._s2 && i < curSeg.length - 1) {\n\t\t\t\t\t\t\t\tl = curSeg.length - 1;\n\t\t\t\t\t\t\t\twhile (i < l && (this._s2 = curSeg[++i]) <= v1) {\t}\n\t\t\t\t\t\t\t\tthis._s1 = curSeg[i-1];\n\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t} else if (v1 < this._s1 && i > 0) {\n\t\t\t\t\t\t\t\twhile (i > 0 && (this._s1 = curSeg[--i]) >= v1) {\t}\n\t\t\t\t\t\t\t\tif (i === 0 && v1 < this._s1) {\n\t\t\t\t\t\t\t\t\tthis._s1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._s2 = curSeg[i];\n\t\t\t\t\t\t\t\tthis._si = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tt = (v === 1) ? 1 : ((i + (v1 - this._s1) / (this._s2 - this._s1)) * this._prec) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinv = 1 - t;\n\n\t\t\t\t\t\ti = this._props.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tp = this._props[i];\n\t\t\t\t\t\t\tb = this._beziers[p][curIndex];\n\t\t\t\t\t\t\tval = (t * t * b.da + 3 * inv * (t * b.ca + inv * b.ba)) * t + b.a;\n\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\tval = this._mod[p](val, target);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._autoRotate) {\n\t\t\t\t\t\t\tvar ar = this._autoRotate,\n\t\t\t\t\t\t\t\tb2, x1, y1, x2, y2, add, conv;\n\t\t\t\t\t\t\ti = ar.length;\n\t\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\t\tp = ar[i][2];\n\t\t\t\t\t\t\t\tadd = ar[i][3] || 0;\n\t\t\t\t\t\t\t\tconv = (ar[i][4] === true) ? 1 : _RAD2DEG;\n\t\t\t\t\t\t\t\tb = this._beziers[ar[i][0]];\n\t\t\t\t\t\t\t\tb2 = this._beziers[ar[i][1]];\n\n\t\t\t\t\t\t\t\tif (b && b2) { //in case one of the properties got overwritten.\n\t\t\t\t\t\t\t\t\tb = b[curIndex];\n\t\t\t\t\t\t\t\t\tb2 = b2[curIndex];\n\n\t\t\t\t\t\t\t\t\tx1 = b.a + (b.b - b.a) * t;\n\t\t\t\t\t\t\t\t\tx2 = b.b + (b.c - b.b) * t;\n\t\t\t\t\t\t\t\t\tx1 += (x2 - x1) * t;\n\t\t\t\t\t\t\t\t\tx2 += ((b.c + (b.d - b.c) * t) - x2) * t;\n\n\t\t\t\t\t\t\t\t\ty1 = b2.a + (b2.b - b2.a) * t;\n\t\t\t\t\t\t\t\t\ty2 = b2.b + (b2.c - b2.b) * t;\n\t\t\t\t\t\t\t\t\ty1 += (y2 - y1) * t;\n\t\t\t\t\t\t\t\t\ty2 += ((b2.c + (b2.d - b2.c) * t) - y2) * t;\n\n\t\t\t\t\t\t\t\t\tval = notStart ? Math.atan2(y2 - y1, x2 - x1) * conv + add : this._initialRotations[i];\n\n\t\t\t\t\t\t\t\t\tif (this._mod[p]) {\n\t\t\t\t\t\t\t\t\t\tval = this._mod[p](val, target); //for modProps\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (func[p]) {\n\t\t\t\t\t\t\t\t\t\ttarget[p](val);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttarget[p] = val;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}),\n\t\t\tp = BezierPlugin.prototype;\n\n\n\t\tBezierPlugin.bezierThrough = bezierThrough;\n\t\tBezierPlugin.cubicToQuadratic = cubicToQuadratic;\n\t\tBezierPlugin._autoCSS = true; //indicates that this plugin can be inserted into the \""css\"" object using the autoCSS feature of TweenLite\n\t\tBezierPlugin.quadraticToCubic = function(a, b, c) {\n\t\t\treturn new Segment(a, (2 * b + a) / 3, (2 * b + c) / 3, c);\n\t\t};\n\n\t\tBezierPlugin._cssRegister = function() {\n\t\t\tvar CSSPlugin = _globals.CSSPlugin;\n\t\t\tif (!CSSPlugin) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar _internals = CSSPlugin._internals,\n\t\t\t\t_parseToProxy = _internals._parseToProxy,\n\t\t\t\t_setPluginRatio = _internals._setPluginRatio,\n\t\t\t\tCSSPropTween = _internals.CSSPropTween;\n\t\t\t_internals._registerComplexSpecialProp(\""bezier\"", {parser:function(t, e, prop, cssp, pt, plugin) {\n\t\t\t\tif (e instanceof Array) {\n\t\t\t\t\te = {values:e};\n\t\t\t\t}\n\t\t\t\tplugin = new BezierPlugin();\n\t\t\t\tvar values = e.values,\n\t\t\t\t\tl = values.length - 1,\n\t\t\t\t\tpluginValues = [],\n\t\t\t\t\tv = {},\n\t\t\t\t\ti, p, data;\n\t\t\t\tif (l < 0) {\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t\tfor (i = 0; i <= l; i++) {\n\t\t\t\t\tdata = _parseToProxy(t, values[i], cssp, pt, plugin, (l !== i));\n\t\t\t\t\tpluginValues[i] = data.end;\n\t\t\t\t}\n\t\t\t\tfor (p in e) {\n\t\t\t\t\tv[p] = e[p]; //duplicate the vars object because we need to alter some things which would cause problems if the user plans to reuse the same vars object for another tween.\n\t\t\t\t}\n\t\t\t\tv.values = pluginValues;\n\t\t\t\tpt = new CSSPropTween(t, \""bezier\"", 0, 0, data.pt, 2);\n\t\t\t\tpt.data = data;\n\t\t\t\tpt.plugin = plugin;\n\t\t\t\tpt.setRatio = _setPluginRatio;\n\t\t\t\tif (v.autoRotate === 0) {\n\t\t\t\t\tv.autoRotate = true;\n\t\t\t\t}\n\t\t\t\tif (v.autoRotate && !(v.autoRotate instanceof Array)) {\n\t\t\t\t\ti = (v.autoRotate === true) ? 0 : Number(v.autoRotate);\n\t\t\t\t\tv.autoRotate = (data.end.left != null) ? [[\""left\"",\""top\"",\""rotation\"",i,false]] : (data.end.x != null) ? [[\""x\"",\""y\"",\""rotation\"",i,false]] : false;\n\t\t\t\t}\n\t\t\t\tif (v.autoRotate) {\n\t\t\t\t\tif (!cssp._transform) {\n\t\t\t\t\t\tcssp._enableTransforms(false);\n\t\t\t\t\t}\n\t\t\t\t\tdata.autoRotate = cssp._target._gsTransform;\n\t\t\t\t\tdata.proxy.rotation = data.autoRotate.rotation || 0;\n\t\t\t\t\tcssp._overwriteProps.push(\""rotation\"");\n\t\t\t\t}\n\t\t\t\tplugin._onInitTween(data.proxy, v, cssp._tween);\n\t\t\t\treturn pt;\n\t\t\t}});\n\t\t};\n\n\t\tp._mod = function(lookup) {\n\t\t\tvar op = this._overwriteProps,\n\t\t\t\ti = op.length,\n\t\t\t\tval;\n\t\t\twhile (--i > -1) {\n\t\t\t\tval = lookup[op[i]];\n\t\t\t\tif (val && typeof(val) === \""function\"") {\n\t\t\t\t\tthis._mod[op[i]] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._props,\n\t\t\t\tp, i;\n\t\t\tfor (p in this._beziers) {\n\t\t\t\tif (p in lookup) {\n\t\t\t\t\tdelete this._beziers[p];\n\t\t\t\t\tdelete this._func[p];\n\t\t\t\t\ti = a.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (a[i] === p) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ta = this._autoRotate;\n\t\t\tif (a) {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i][2]]) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this._super._kill.call(this, lookup);\n\t\t};\n\nexport { BezierPlugin, BezierPlugin as default };"",""/*!\n * VERSION: 1.16.1\n * DATE: 2018-08-27\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport { _gsScope, globals, Ease, Linear, Power0, Power1, Power2, Power3, Power4 } from \""./TweenLite.js\"";\n\n_gsScope._gsDefine(\""easing.Back\"", [\""easing.Ease\""], function() {\n\t\t\n\t\tvar w = (_gsScope.GreenSockGlobals || _gsScope),\n\t\t\tgs = w.com.greensock,\n\t\t\t_2PI = Math.PI * 2,\n\t\t\t_HALF_PI = Math.PI / 2,\n\t\t\t_class = gs._class,\n\t\t\t_create = function(n, f) {\n\t\t\t\tvar C = _class(\""easing.\"" + n, function(){}, true),\n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\treturn C;\n\t\t\t},\n\t\t\t_easeReg = Ease.register || function(){}, //put an empty function in place just as a safety measure in case someone loads an OLD version of TweenLite.js where Ease.register doesn't exist.\n\t\t\t_wrap = function(name, EaseOut, EaseIn, EaseInOut, aliases) {\n\t\t\t\tvar C = _class(\""easing.\""+name, {\n\t\t\t\t\teaseOut:new EaseOut(),\n\t\t\t\t\teaseIn:new EaseIn(),\n\t\t\t\t\teaseInOut:new EaseInOut()\n\t\t\t\t}, true);\n\t\t\t\t_easeReg(C, name);\n\t\t\t\treturn C;\n\t\t\t},\n\t\t\tEasePoint = function(time, value, next) {\n\t\t\t\tthis.t = time;\n\t\t\t\tthis.v = value;\n\t\t\t\tif (next) {\n\t\t\t\t\tthis.next = next;\n\t\t\t\t\tnext.prev = this;\n\t\t\t\t\tthis.c = next.v - value;\n\t\t\t\t\tthis.gap = next.t - time;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t//Back\n\t\t\t_createBack = function(n, f) {\n\t\t\t\tvar C = _class(\""easing.\"" + n, function(overshoot) {\n\t\t\t\t\t\tthis._p1 = (overshoot || overshoot === 0) ? overshoot : 1.70158;\n\t\t\t\t\t\tthis._p2 = this._p1 * 1.525;\n\t\t\t\t\t}, true), \n\t\t\t\t\tp = C.prototype = new Ease();\n\t\t\t\tp.constructor = C;\n\t\t\t\tp.getRatio = f;\n\t\t\t\tp.config = function(overshoot) {\n\t\t\t\t\treturn new C(overshoot);\n\t\t\t\t};\n\t\t\t\treturn C;\n\t\t\t},\n\n\t\t\tBack = _wrap(\""Back\"",\n\t\t\t\t_createBack(\""BackOut\"", function(p) {\n\t\t\t\t\treturn ((p = p - 1) * p * ((this._p1 + 1) * p + this._p1) + 1);\n\t\t\t\t}),\n\t\t\t\t_createBack(\""BackIn\"", function(p) {\n\t\t\t\t\treturn p * p * ((this._p1 + 1) * p - this._p1);\n\t\t\t\t}),\n\t\t\t\t_createBack(\""BackInOut\"", function(p) {\n\t\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * p * p * ((this._p2 + 1) * p - this._p2) : 0.5 * ((p -= 2) * p * ((this._p2 + 1) * p + this._p2) + 2);\n\t\t\t\t})\n\t\t\t),\n\n\n\t\t\t//SlowMo\n\t\t\tSlowMo = _class(\""easing.SlowMo\"", function(linearRatio, power, yoyoMode) {\n\t\t\t\tpower = (power || power === 0) ? power : 0.7;\n\t\t\t\tif (linearRatio == null) {\n\t\t\t\t\tlinearRatio = 0.7;\n\t\t\t\t} else if (linearRatio > 1) {\n\t\t\t\t\tlinearRatio = 1;\n\t\t\t\t}\n\t\t\t\tthis._p = (linearRatio !== 1) ? power : 0;\n\t\t\t\tthis._p1 = (1 - linearRatio) / 2;\n\t\t\t\tthis._p2 = linearRatio;\n\t\t\t\tthis._p3 = this._p1 + this._p2;\n\t\t\t\tthis._calcEnd = (yoyoMode === true);\n\t\t\t}, true),\n\t\t\tp = SlowMo.prototype = new Ease(),\n\t\t\tSteppedEase, ExpoScaleEase, RoughEase, _createElastic;\n\t\t\t\n\t\tp.constructor = SlowMo;\n\t\tp.getRatio = function(p) {\n\t\t\tvar r = p + (0.5 - p) * this._p;\n\t\t\tif (p < this._p1) {\n\t\t\t\treturn this._calcEnd ? 1 - ((p = 1 - (p / this._p1)) * p) : r - ((p = 1 - (p / this._p1)) * p * p * p * r);\n\t\t\t} else if (p > this._p3) {\n\t\t\t\treturn this._calcEnd ? (p === 1 ? 0 : 1 - (p = (p - this._p3) / this._p1) * p) : r + ((p - r) * (p = (p - this._p3) / this._p1) * p * p * p); //added p === 1 ? 0 to avoid floating point rounding errors from affecting the final value, like 1 - 0.7 = 0.30000000000000004 instead of 0.3\n\t\t\t}\n\t\t\treturn this._calcEnd ? 1 : r;\n\t\t};\n\t\tSlowMo.ease = new SlowMo(0.7, 0.7);\n\t\t\n\t\tp.config = SlowMo.config = function(linearRatio, power, yoyoMode) {\n\t\t\treturn new SlowMo(linearRatio, power, yoyoMode);\n\t\t};\n\n\n\t\t//SteppedEase\n\t\tSteppedEase = _class(\""easing.SteppedEase\"", function(steps, immediateStart) {\n\t\t\t\tsteps = steps || 1;\n\t\t\t\tthis._p1 = 1 / steps;\n\t\t\t\tthis._p2 = steps + (immediateStart ? 0 : 1);\n\t\t\t\tthis._p3 = immediateStart ? 1 : 0;\n\t\t\t}, true);\n\t\tp = SteppedEase.prototype = new Ease();\t\n\t\tp.constructor = SteppedEase;\n\t\tp.getRatio = function(p) {\n\t\t\tif (p < 0) {\n\t\t\t\tp = 0;\n\t\t\t} else if (p >= 1) {\n\t\t\t\tp = 0.999999999;\n\t\t\t}\n\t\t\treturn (((this._p2 * p) | 0) + this._p3) * this._p1;\n\t\t};\n\t\tp.config = SteppedEase.config = function(steps, immediateStart) {\n\t\t\treturn new SteppedEase(steps, immediateStart);\n\t\t};\n\n\n\t\t//ExpoScaleEase\n\t\tExpoScaleEase = _class(\""easing.ExpoScaleEase\"", function(start, end, ease) {\n\t\t\tthis._p1 = Math.log(end / start);\n\t\t\tthis._p2 = end - start;\n\t\t\tthis._p3 = start;\n\t\t\tthis._ease = ease;\n\t\t}, true);\n\t\tp = ExpoScaleEase.prototype = new Ease();\n\t\tp.constructor = ExpoScaleEase;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._ease) {\n\t\t\t\tp = this._ease.getRatio(p);\n\t\t\t}\n\t\t\treturn (this._p3 * Math.exp(this._p1 * p) - this._p3) / this._p2;\n\t\t};\n\t\tp.config = ExpoScaleEase.config = function(start, end, ease) {\n\t\t\treturn new ExpoScaleEase(start, end, ease);\n\t\t};\n\n\n\t\t//RoughEase\n\t\tRoughEase = _class(\""easing.RoughEase\"", function(vars) {\n\t\t\tvars = vars || {};\n\t\t\tvar taper = vars.taper || \""none\"",\n\t\t\t\ta = [],\n\t\t\t\tcnt = 0,\n\t\t\t\tpoints = (vars.points || 20) | 0,\n\t\t\t\ti = points,\n\t\t\t\trandomize = (vars.randomize !== false),\n\t\t\t\tclamp = (vars.clamp === true),\n\t\t\t\ttemplate = (vars.template instanceof Ease) ? vars.template : null,\n\t\t\t\tstrength = (typeof(vars.strength) === \""number\"") ? vars.strength * 0.4 : 0.4,\n\t\t\t\tx, y, bump, invX, obj, pnt;\n\t\t\twhile (--i > -1) {\n\t\t\t\tx = randomize ? Math.random() : (1 / points) * i;\n\t\t\t\ty = template ? template.getRatio(x) : x;\n\t\t\t\tif (taper === \""none\"") {\n\t\t\t\t\tbump = strength;\n\t\t\t\t} else if (taper === \""out\"") {\n\t\t\t\t\tinvX = 1 - x;\n\t\t\t\t\tbump = invX * invX * strength;\n\t\t\t\t} else if (taper === \""in\"") {\n\t\t\t\t\tbump = x * x * strength;\n\t\t\t\t} else if (x < 0.5) {  //\""both\"" (start)\n\t\t\t\t\tinvX = x * 2;\n\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t} else {\t\t\t\t//\""both\"" (end)\n\t\t\t\t\tinvX = (1 - x) * 2;\n\t\t\t\t\tbump = invX * invX * 0.5 * strength;\n\t\t\t\t}\n\t\t\t\tif (randomize) {\n\t\t\t\t\ty += (Math.random() * bump) - (bump * 0.5);\n\t\t\t\t} else if (i % 2) {\n\t\t\t\t\ty += bump * 0.5;\n\t\t\t\t} else {\n\t\t\t\t\ty -= bump * 0.5;\n\t\t\t\t}\n\t\t\t\tif (clamp) {\n\t\t\t\t\tif (y > 1) {\n\t\t\t\t\t\ty = 1;\n\t\t\t\t\t} else if (y < 0) {\n\t\t\t\t\t\ty = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ta[cnt++] = {x:x, y:y};\n\t\t\t}\n\t\t\ta.sort(function(a, b) {\n\t\t\t\treturn a.x - b.x;\n\t\t\t});\n\n\t\t\tpnt = new EasePoint(1, 1, null);\n\t\t\ti = points;\n\t\t\twhile (--i > -1) {\n\t\t\t\tobj = a[i];\n\t\t\t\tpnt = new EasePoint(obj.x, obj.y, pnt);\n\t\t\t}\n\n\t\t\tthis._prev = new EasePoint(0, 0, (pnt.t !== 0) ? pnt : pnt.next);\n\t\t}, true);\n\t\tp = RoughEase.prototype = new Ease();\n\t\tp.constructor = RoughEase;\n\t\tp.getRatio = function(p) {\n\t\t\tvar pnt = this._prev;\n\t\t\tif (p > pnt.t) {\n\t\t\t\twhile (pnt.next && p >= pnt.t) {\n\t\t\t\t\tpnt = pnt.next;\n\t\t\t\t}\n\t\t\t\tpnt = pnt.prev;\n\t\t\t} else {\n\t\t\t\twhile (pnt.prev && p <= pnt.t) {\n\t\t\t\t\tpnt = pnt.prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._prev = pnt;\n\t\t\treturn (pnt.v + ((p - pnt.t) / pnt.gap) * pnt.c);\n\t\t};\n\t\tp.config = function(vars) {\n\t\t\treturn new RoughEase(vars);\n\t\t};\n\t\tRoughEase.ease = new RoughEase();\n\n\n\t\t//Bounce\n\t\t_wrap(\""Bounce\"",\n\t\t\t_create(\""BounceOut\"", function(p) {\n\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\treturn 7.5625 * p * p;\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\treturn 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\treturn 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t}\n\t\t\t\treturn 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t}),\n\t\t\t_create(\""BounceIn\"", function(p) {\n\t\t\t\tif ((p = 1 - p) < 1 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * p * p);\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\treturn 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n\t\t\t\t}\n\t\t\t\treturn 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n\t\t\t}),\n\t\t\t_create(\""BounceInOut\"", function(p) {\n\t\t\t\tvar invert = (p < 0.5);\n\t\t\t\tif (invert) {\n\t\t\t\t\tp = 1 - (p * 2);\n\t\t\t\t} else {\n\t\t\t\t\tp = (p * 2) - 1;\n\t\t\t\t}\n\t\t\t\tif (p < 1 / 2.75) {\n\t\t\t\t\tp = 7.5625 * p * p;\n\t\t\t\t} else if (p < 2 / 2.75) {\n\t\t\t\t\tp = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n\t\t\t\t} else if (p < 2.5 / 2.75) {\n\t\t\t\t\tp = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n\t\t\t\t} else {\n\t\t\t\t\tp = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n\t\t\t\t}\n\t\t\t\treturn invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n\t\t\t})\n\t\t);\n\n\n\t\t//CIRC\n\t\t_wrap(\""Circ\"",\n\t\t\t_create(\""CircOut\"", function(p) {\n\t\t\t\treturn Math.sqrt(1 - (p = p - 1) * p);\n\t\t\t}),\n\t\t\t_create(\""CircIn\"", function(p) {\n\t\t\t\treturn -(Math.sqrt(1 - (p * p)) - 1);\n\t\t\t}),\n\t\t\t_create(\""CircInOut\"", function(p) {\n\t\t\t\treturn ((p*=2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n\t\t\t})\n\t\t);\n\n\n\t\t//Elastic\n\t\t_createElastic = function(n, f, def) {\n\t\t\tvar C = _class(\""easing.\"" + n, function(amplitude, period) {\n\t\t\t\t\tthis._p1 = (amplitude >= 1) ? amplitude : 1; //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n\t\t\t\t\tthis._p2 = (period || def) / (amplitude < 1 ? amplitude : 1);\n\t\t\t\t\tthis._p3 = this._p2 / _2PI * (Math.asin(1 / this._p1) || 0);\n\t\t\t\t\tthis._p2 = _2PI / this._p2; //precalculate to optimize\n\t\t\t\t}, true),\n\t\t\t\tp = C.prototype = new Ease();\n\t\t\tp.constructor = C;\n\t\t\tp.getRatio = f;\n\t\t\tp.config = function(amplitude, period) {\n\t\t\t\treturn new C(amplitude, period);\n\t\t\t};\n\t\t\treturn C;\n\t\t};\n\t\t_wrap(\""Elastic\"",\n\t\t\t_createElastic(\""ElasticOut\"", function(p) {\n\t\t\t\treturn this._p1 * Math.pow(2, -10 * p) * Math.sin( (p - this._p3) * this._p2 ) + 1;\n\t\t\t}, 0.3),\n\t\t\t_createElastic(\""ElasticIn\"", function(p) {\n\t\t\t\treturn -(this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2 ));\n\t\t\t}, 0.3),\n\t\t\t_createElastic(\""ElasticInOut\"", function(p) {\n\t\t\t\treturn ((p *= 2) < 1) ? -0.5 * (this._p1 * Math.pow(2, 10 * (p -= 1)) * Math.sin( (p - this._p3) * this._p2)) : this._p1 * Math.pow(2, -10 *(p -= 1)) * Math.sin( (p - this._p3) * this._p2 ) * 0.5 + 1;\n\t\t\t}, 0.45)\n\t\t);\n\n\n\t\t//Expo\n\t\t_wrap(\""Expo\"",\n\t\t\t_create(\""ExpoOut\"", function(p) {\n\t\t\t\treturn 1 - Math.pow(2, -10 * p);\n\t\t\t}),\n\t\t\t_create(\""ExpoIn\"", function(p) {\n\t\t\t\treturn Math.pow(2, 10 * (p - 1)) - 0.001;\n\t\t\t}),\n\t\t\t_create(\""ExpoInOut\"", function(p) {\n\t\t\t\treturn ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\t\t\t})\n\t\t);\n\n\n\t\t//Sine\n\t\t_wrap(\""Sine\"",\n\t\t\t_create(\""SineOut\"", function(p) {\n\t\t\t\treturn Math.sin(p * _HALF_PI);\n\t\t\t}),\n\t\t\t_create(\""SineIn\"", function(p) {\n\t\t\t\treturn -Math.cos(p * _HALF_PI) + 1;\n\t\t\t}),\n\t\t\t_create(\""SineInOut\"", function(p) {\n\t\t\t\treturn -0.5 * (Math.cos(Math.PI * p) - 1);\n\t\t\t})\n\t\t);\n\n\t\t_class(\""easing.EaseLookup\"", {\n\t\t\t\tfind:function(s) {\n\t\t\t\t\treturn Ease.map[s];\n\t\t\t\t}\n\t\t\t}, true);\n\n\t\t//register the non-standard eases\n\t\t_easeReg(w.SlowMo, \""SlowMo\"", \""ease,\"");\n\t\t_easeReg(RoughEase, \""RoughEase\"", \""ease,\"");\n\t\t_easeReg(SteppedEase, \""SteppedEase\"", \""ease,\"");\n\t\t\n\t\treturn Back;\n\t\t\n\t}, true);\n\nexport var Back = globals.Back;\nexport var Elastic = globals.Elastic;\nexport var Bounce = globals.Bounce;\nexport var RoughEase = globals.RoughEase;\nexport var SlowMo = globals.SlowMo;\nexport var SteppedEase = globals.SteppedEase;\nexport var Circ = globals.Circ;\nexport var Expo = globals.Expo;\nexport var Sine = globals.Sine;\nexport var ExpoScaleEase = globals.ExpoScaleEase;\nexport { Linear, Power0, Power1, Power2, Power3, Power4 };"",""/*!\n * VERSION: 2.1.3\n * DATE: 2019-05-17\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n **/\n/* eslint-disable */\n\nimport TweenLite, { TweenPlugin, Ease, Power0, Power1, Power2, Power3, Power4, Linear } from \""./TweenLite.js\"";\nimport TweenMaxBase from \""./TweenMaxBase.js\"";\nimport CSSPlugin from \""./CSSPlugin.js\"";\nimport AttrPlugin from \""./AttrPlugin.js\"";\nimport RoundPropsPlugin from \""./RoundPropsPlugin.js\"";\nimport DirectionalRotationPlugin from \""./DirectionalRotationPlugin.js\"";\nimport TimelineLite from \""./TimelineLite.js\"";\nimport TimelineMax from \""./TimelineMax.js\"";\nimport BezierPlugin from \""./BezierPlugin.js\"";\nimport { Back, Elastic, Bounce, RoughEase, SlowMo, SteppedEase, Circ, Expo, Sine, ExpoScaleEase } from \""./EasePack.js\"";\n\n//the following two lines are designed to prevent tree shaking of the classes that were historically included with TweenMax (otherwise, folks would have to reference CSSPlugin, for example, to ensure their CSS-related animations worked)\nexport var TweenMax = TweenMaxBase;\nTweenMax._autoActivated = [TimelineLite, TimelineMax, CSSPlugin, AttrPlugin, BezierPlugin, RoundPropsPlugin, DirectionalRotationPlugin, Back, Elastic, Bounce, RoughEase, SlowMo, SteppedEase, Circ, Expo, Sine, ExpoScaleEase];\n\nexport { TweenMax as default };\nexport { TweenLite, TimelineLite, TimelineMax, CSSPlugin, AttrPlugin, BezierPlugin, DirectionalRotationPlugin, RoundPropsPlugin, TweenPlugin, Ease, Power0, Power1, Power2, Power3, Power4, Linear, Back, Elastic, Bounce, RoughEase, SlowMo, SteppedEase, Circ, Expo, Sine, ExpoScaleEase };\n"",""\n/**\n * Expose `callasync`.\n */\n\nmodule.exports = callasync;\n\n/**\n * A queue holding functions to execute on timeout.\n * @type {Array}\n */\n\nvar waiting = [];\n\n/**\n * Waiting queue timeout handle.\n * @type {number}\n */\n\nvar waitingID = 0;\n\n/**\n * Waiting queue handler function.\n * @type {Function}\n */\n\nvar process = function () {\n  var index = -1;\n  var length = waiting.length;\n  var funcs = waiting; // local scope copy of waiting queue\n\n  waiting = []; // drop waiting queue\n  waitingID = 0; // reset waiting handle\n\n  while (++index < length) {\n    funcs[index]();\n  }\n};\n\n/**\n * Add `func` to the waiting queue to execute it on the next timeout.\n * @param {Function} func The function to delay.\n */\n\nfunction callasync(func) {\n  waiting.push(func);\n  if (waitingID === 0) {\n    waitingID = setTimeout(process, 0);\n  }\n}\n"",""\n/**\n * Module dependencies.\n */\n\nvar callasync = require('callasync');\n\n/**\n * Expose `loadcss`.\n */\n\nmodule.exports = loadcss;\n\n/**\n * Loads and inserts stylesheets with the specified `href` and `options`;\n *\n * @param {Array|string} href\n * @param {Object|Function} [options]\n * @param {DOMElement} [options.before]\n * @param {string} [options.media]\n * @param {Function} [options.complete]\n */\n\nfunction loadcss(href, options) {\n  options || (options = {});\n\n  if (({}).toString.call(options) === '[object Function]') {\n    options = { complete: options };\n  }\n\n  var doc = document;\n  var sheets = doc.styleSheets;\n  var hrefs = ({}).toString.call(href) === '[object Array]' ? href : [href];\n  var media = options.media ? options.media : 'all';\n  var oncomplete = options.complete || function () {};\n  var links = [];\n\n  var before;\n\n  if (options.before) {\n    before = options.before;\n  } else {\n    var refs = (doc.body || doc.getElementsByTagName('head')[0]).childNodes;\n    before = refs[refs.length - 1];\n  }\n\n  function onready(callback) {\n    if (doc.body){\n      return callback();\n    }\n\n    callasync(function () {\n      onready(callback);\n    });\n  }\n\n  function onloaded() {\n    var loaded = 0;\n    var index = -1;\n    var length = links.length;\n\n    while (++index < length) {\n      if (exists(links[index].href) && ++loaded === length) {\n        return oncomplete(links);\n      }\n    }\n\n    callasync(onloaded);\n  }\n\n  function exists(href) {\n    var index = -1;\n    var length = sheets.length;\n\n    while (++index < length) {\n      if (sheets[index].href === null || sheets[index].href.length === 0) {\n        continue;\n      }\n\n      if (sheets[index].href === href) {\n        return true;\n      }\n    }\n  }\n\n  onready(function () {\n    var index = -1;\n    var length = hrefs.length;\n    var referenceNode = options.before ? before : before.nextSibling;\n\n    while (++index < length) {\n      links[index] = doc.createElement('link');\n\n      links[index].rel = 'stylesheet';\n      links[index].href = hrefs[index];\n      links[index].media = media;\n\n      before.parentNode.insertBefore(links[index], referenceNode);\n    }\n\n    callasync(onloaded);\n  });\n\n  return links;\n}\n"",""/**\n * Gtag helper class\n */\nclass Tracking {\n  constructor() {\n    this.enabled = false;\n    const scriptSrc = document.querySelector('script[src*=\""gtag\""]');\n    // eslint-disable-next-line prefer-destructuring\n    this.gaPropertyId = scriptSrc && scriptSrc.hasAttribute('src') ? scriptSrc.src.split('?id=')[1] : false;\n  }\n\n  hasGtag() {\n    this.enabled = typeof window.gtag !== 'undefined';\n    return this.enabled;\n  }\n\n  event(category, action, label, value) {\n    if (!this.hasGtag()) return false;\n\n    if (!this.gaPropertyId) {\n      this.log('Missing dataLayer. Is gtag loaded?');\n      return false;\n    }\n\n    window.gtag('event', this.gaPropertyId, {\n      event_category: category,\n      event_action: action,\n      event_label: label,\n      value,\n    });\n\n    return true;\n  }\n\n  pageview() {\n    if (!this.hasGtag()) return false;\n\n    if (!this.gaPropertyId) {\n      this.log('Missing dataLayer. Is gtag loaded?');\n      return false;\n    }\n\n    window.gtag('config', this.gaPropertyId, {\n      page_title: document.title,\n      page_path: `${window.location.pathname}${window.location.search}`,\n    });\n\n    return true;\n  }\n\n  registerAllExternalLinks() {\n    if (typeof window === 'undefined') return;\n    if (this.hasGtag()) {\n      const a = document.querySelectorAll('a[href^=\""http\""]:not([hastracking])');\n      for (let i = 0; i < a.length; i += 1) {\n        if (a[i].href !== '' && a[i].href.indexOf(window.location.host) === -1) {\n          a[i].setAttribute('hastracking', 'true');\n          a[i].onclick = (function ct(_this, href) {\n            return function track() {\n              _this.event('Ext. link', href);\n            };\n          }(this, a[i].href));\n        }\n      }\n    }\n  }\n\n  log(message) {\n    if (!this.debug) return;\n    console.log(message);\n  }\n}\n\nexport default (new Tracking());\n"",""import { ConversationalForm, FlowEvents, EventDispatcher } from 'conversational-form';\nimport {\n  TweenLite,\n} from 'gsap/TweenMax';\nimport loadcss from 'loadcss';\nimport Tracking from './tracking';\nimport 'reset-css';\nimport './scss/main.scss';\n\nconst animTime = 0.8;\nconst themes = [\n  'conversational-form-dark.min.css',\n  'conversational-form.min.css',\n  'conversational-form-purple.min.css',\n  'conversational-form-irisblue.min.css',\n  'conversational-form-red.min.css',\n  'conversational-form-green.min.css',\n];\nlet currentTheme = null;\n\nfunction preloadFormImages() {\n  const images = [].slice.call(document.querySelectorAll('form *[cf-image]'));\n  // eslint-disable-next-line no-return-assign\n  images.map(el => (new Image()).src = el.getAttribute('cf-image'));\n}\n\nfunction loadThemes() {\n  console.log('loadThemes');\n\n  loadcss(themes.map(t => `./${t}`), (links) => {\n    links.forEach(link => console.log(link));\n\n    const stylesheets = [].slice.call(document.styleSheets);\n    stylesheets.map((s, i) => {\n      console.log(i, s.href);\n      if (\n        s.href.indexOf('conversational-form') > -1\n        && s.href.indexOf(themes[0]) === -1\n        && s.href.indexOf('main.') === -1\n      ) {\n        document.styleSheets[i].disabled = true;\n      }\n      return s;\n    });\n  });\n}\n\nfunction changeTheme(themeName) {\n  if (currentTheme === themeName) return;\n\n  console.log('changeTheme', themeName);\n  const stylesheets = [].slice.call(document.styleSheets);\n  stylesheets.map((s, i) => {\n    if (i > 0 && document.styleSheets[i].disabled === false) {\n      document.styleSheets[i].disabled = true;\n    } else if (document.styleSheets[i].href.indexOf(themeName) > -1) {\n      document.styleSheets[i].disabled = false;\n      currentTheme = themeName;\n      console.log('enable theme', document.styleSheets[i].href);\n    }\n    console.log('theme', i, document.styleSheets[i].href, document.styleSheets[i].disabled);\n\n    return s;\n  });\n}\n\nfunction animateIn() {\n  console.log('animateIn');\n  const headerEl = document.querySelector('header');\n  const headlineEl = document.querySelector('h1');\n  const cfEl = document.querySelector('.cf');\n  const aboutEl = document.querySelector('.about');\n\n  if (\n    window.innerHeight < 780\n  ) {\n    TweenLite.set(\n      headlineEl,\n      {\n        css: {\n          scale: 0.68,\n          'margin-top': 60,\n          'margin-bottom': 60,\n        },\n      },\n    );\n  }\n\n  TweenLite.set(headerEl, { y: 10 });\n  TweenLite.to(\n    headerEl,\n    animTime / 2,\n    {\n      opacity: 1,\n      y: 0,\n    },\n  );\n\n  TweenLite.set(headlineEl, { y: 20 });\n  TweenLite.to(\n    headlineEl,\n    animTime,\n    {\n      opacity: 1,\n      y: 0,\n      // onComplete: scaleDownHeader(headlineEl),\n      delay: animTime / 2,\n    },\n  );\n\n  TweenLite.set(cfEl, { y: 40 });\n  TweenLite.to(\n    cfEl,\n    animTime * 1.2,\n    {\n      opacity: 1,\n      y: 0,\n      delay: animTime,\n    },\n  );\n\n  setTimeout(\n    () => {\n      window.ConversationalForm.start();\n    },\n    animTime * 0.6 * 1000,\n  );\n\n  TweenLite.to(\n    aboutEl,\n    animTime * 3,\n    {\n      opacity: 1,\n      delay: animTime * 2,\n    },\n  );\n}\n\nfunction init() {\n  loadThemes();\n  changeTheme(themes[1]);\n  preloadFormImages();\n  Tracking.registerAllExternalLinks();\n\n  const wrapperEl = document.querySelector('.wrapper');\n  const formEl = document.querySelector('.form');\n  const cfEl = document.querySelector('.cf');\n  const dispatcher = new EventDispatcher();\n\n  // We manually stop form execution if users bails on us\n  dispatcher.addEventListener(FlowEvents.FLOW_UPDATE, (event) => {\n    console.log(event);\n    if (event.detail.tag.name === 'ending') {\n      window.ConversationalForm.flowManager.stop();\n      document.querySelector('#conversational-form').style['pointer-events'] = 'none';\n    }\n  }, false);\n\n  const cfInstance = new ConversationalForm({\n    formEl,\n    context: cfEl,\n    loadExternalStyleSheet: false,\n    preventAutoFocus: true,\n    preventAutoStart: true,\n    eventDispatcher: dispatcher,\n    submitCallback: () => {\n      const formDataSerialized = cfInstance.getFormData(true);\n      console.log('done', formDataSerialized);\n      if (\n        formDataSerialized.getstarted\n        && formDataSerialized.getstarted.indexOf('no') === -1\n      ) {\n        cfInstance.addRobotChatResponse('Ok. Thank you for trying out Conversational Form.');\n      }\n    },\n    flowStepCallback: (dto, success) => {\n      console.log('fsc', dto.tag.name, dto.tag.value);\n\n      Tracking.event('conversational form example', dto.tag.name, dto.tag.value);\n\n      if (dto.tag.name === 'theme') changeTheme(dto.tag.value[0]);\n\n      setTimeout(() => {\n        if (\n          dto.tag.name !== 'changeThemeAgain'\n          || (\n            dto.tag.name === 'changeThemeAgain'\n            && dto.tag.value[0] !== 'yes'\n          )\n        ) {\n          success();\n        }\n\n        if (\n          dto.tag.name === 'changeThemeAgain'\n          && dto.tag.value[0] === 'yes'\n        ) {\n          window.ConversationalForm.remapTagsAndStartFrom(3);\n        }\n      }, 0);\n    },\n  });\n\n  TweenLite.to(\n    wrapperEl,\n    1,\n    {\n      opacity: 1,\n      delay: animTime / 2,\n      onComplete: animateIn,\n    },\n  );\n}\n\ndocument.addEventListener('DOMContentLoaded', init);\n""]}"
d14196945b2ec3c8859f9d7aee9c94fda27fbc52,3330919,        // http://stackoverflow.com/a/3330919)
3516f8052e4f50e97e0aeb06ce3ecbb099842d75,7278094,  // Based on https://stackoverflow.com/questions/7278094/moving-a-cllocation-by-x-meters
e50aefd1cf618a31b0e67d3cc33e57dacc822666,728360,// https://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object
1b3c029e55847339f7b5d59c2ef2a1e7e160723e,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
d544c2eb989903236373ce75030e1fb56e314f41,3330919,        // http://stackoverflow.com/a/3330919)
1a32525bb97b8e3a4701ad8b2bdff8f6035eec47,20444593,   `this question <http://stackoverflow.com/questions/20444593/pandas-compiled-from-source-default-pickle-behavior-changed>`__
adeaee893e3fcdb165b28eb4759a2284f3e2d959,588004,    displayProgressBar = Math.round(displayProgressBar * 10) / 10; //learn more why : http://stackoverflow.com/questions/588004/is-floating-point-math-broken
a2784efaa5d6f9c38ed31e3a80783c427958cf20,26067297,//Taken from http://stackoverflow.com/a/26067297/1434764
b86799dc90c7a74615a1d5dd9a6f933962200279,14967647,// From http://stackoverflow.com/questions/14967647/ (continues on next line)
4a6a34355b26137f11f00e00ac9612a972c20564,13088153,    http://stackoverflow.com/questions/13088153/how-to-http-synchronous-call-with-angularjs
f4001556e77c050c36435526af3365d52b44ade4,398120,	    // is firebug? http://stackoverflow.com/a/398120/376773
4f1693242ee9344671528e75117cc488e21d9825,10046972,  let status = this.xhr.status; // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request
26981d8f7098ec18c2ccac589750b34232a00611,2955251,     * http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string
ecfc59730382c21f1b72984d10ee18d4ab011185,13382873,    // Thanks to http://stackoverflow.com/a/13382873/888165
596739bf3561361079602db0a717004d3e420bda,5580776,"207.138.251.2 - - [21/Sep/2011:19:16:56 +0000] ""GET / HTTP/1.1"" 200 3749 ""http://stackoverflow.com/questions/5580776/monitoring-a-node-js-server"" ""Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22"""
fc9066bbfd5e8ce28be24f902f73a1ec3002d924,17732454,    //http://stackoverflow.com/questions/17732454/no-cache-header-with-annotation
085007290d105716082bc6c736bc9b17c37ac734,8070716,    so: Inspired by the 2D example shown here: http://stackoverflow.com/a/8070716/162094
b29322fe7d9cda7b2d6814f594de208c15c7c0c4,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
f142629ce51914b77f3e991091ec9ab5fc4ee395,22617,# # Number to string : http://stackoverflow.com/questions/22617/format-numbers-to-strings-in-python
014191f3ab1d5b6da91922edc8fb53c0452ffbeb,1308149,		 http://stackoverflow.com/questions/1308149/how-to-get-a-part-of-url-between-4th-and-5th-slashes';
66dbecd7204b8366733631f70b17ed3ba10c2372,18532692,"""  http://stackoverflow.com/questions/18532692/golang-formatter-and-vim-how-to-destroy-history-record?rq=1"
5d236bcd4a1dbd458d77eb9d4ec4badc1624f182,2712970,			<!-- Add version to jar http://stackoverflow.com/questions/2712970/how-to-get-maven-artifact-version-at-runtime
e9b71834765ac09c3bd793b29ccac6d13c467c9f,6445794,"    ""url"": ""http://stackoverflow.com/a/6445794/1104488"""
bd74e9ad1d21601fa59475b23e691143db631425,3717793,	// See also http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation for details
1d8870cc20b889f730e3d9422c6547e24908643c,11936967,"    ""#https://stackoverflow.com/questions/11936967/text-file-parsing-with-python\n"","
ff0e0dae7a7e01ab14efca1f616f1ccd71cda2c5,17213297,"<p>See <a href=""http://stackoverflow.com/questions/17213297"">so/17213297</a> </p>"
02842472916a7fcecaf604d854c15fbf54e6b926,37628,0;40;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;lets;0.2;0.0;1.0;1.2;0.7071067811865475;0.0
91c6329b2611e53f68e12c999d27080744d9e7ff,15950382,    // http://stackoverflow.com/q/15950382/763010
d6a45e1b887246704fdddb340767a2d94860f708,34479916,        // http://stackoverflow.com/questions/34479795/make-c-not-wait-for-user-input/34479916#34479916
0f7a8cd9bea6f97951abd2d7bd2d085d4cda49c1,2901298,    # https://stackoverflow.com/a/2901298/2926055
7db3279462da371c0e1879fe5ed997a094b0ec2d,3330919,        // http://stackoverflow.com/a/3330919)
fec9c8989189c952b4b8bfaeef8809878c4c5caf,3561493,    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
ebae47a8ba21ba01700f16c595ec8af2e6209c13,992461,        // See http://stackoverflow.com/questions/992461/is-it-possible-to-override-document-cookie-in-webkit
65b7614e03bd29a1d842a6536c0a688bc2723755,18082,// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric
712e5acb5dc904f8a993e217b4fb74dcc544bcb4,3330919,        // http://stackoverflow.com/a/3330919)
554f75c47c3a5bc0af03117ae550982b9d461167,18410035,		    //thanks Dave Newton. http://stackoverflow.com/questions/18410035/ways-to-iterate-over-a-list-in-java
9f807ca42ad6b082d2e3b28bf3cca75da445058f,20912535,;; I described it http://stackoverflow.com/questions/14275122/editing-markdown-pipe-tables-in-emacs/20912535#20912535
1f70b19f74f5236bb8ea064b4945b33c8c1043cb,1740700,    // Source: http://stackoverflow.com/questions/1740700/get-hex-value-rather-than-rgb-value-using-jquery
1495819dfdb8a73d6bd5a7c3628f7fba18fc2067,24107550,  // http://stackoverflow.com/a/24107550/888165
7da1bcb6a49fdbac98cdd8270037c37c77871397,196991,    // Savagely stolen from https://stackoverflow.com/a/196991
a992ce8b73774804144cc8fb020d32be667201f2,3330919,        // http://stackoverflow.com/a/3330919)
d74e8d303a5fff65b9e6f92bd991c1afb0577926,18432577, * @see http://stackoverflow.com/questions/18432577/stacked-tabs-in-bootstrap-3
3fdf58c71e4defe564e65de017ffde3056f40dd4,3885018,        // http://stackoverflow.com/questions/3885018/active-pseudo-class-doesnt-work-in-mobile-safari
c84f5d40aecbec0006525cfb3b0f40875a6fc2e0,37628,29;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;marked;1.0;0.001072961373390558;27.0;0
19917597bc23d80b4f4a0cfb5495241bae8c9ff5,10046972,  // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request
09d7f7ceca8f4248f76b4571e82295479c50e7dc,1046721,// http://stackoverflow.com/questions/1046721/accessing-the-raw-body-of-a-put-or-post-request
61aada1b06723655f2af76fd11c7b4c79748a482,26603875,			// http://stackoverflow.com/a/26603875
40329063f82cb5c41acc1e6dc407c7e8ea0356f7,11310258,            // http://stackoverflow.com/a/11310258/264628
b8d96baf7b059010a02a8ade53313361dd9cb6f4,15867542,        // http://stackoverflow.com/questions/15867542/range-object-get-selection-parent-node-chrome-vs-firefox
ee187dfc19dd8cc99cb5bfab6d14f2b358709744,2897155,     * Source: http://stackoverflow.com/questions/2897155/get-cursor-position-in-characters-within-a-text-input-field
4c0ab26698b8aedec7058868f9c5492294673ace,34031397,https://stackoverflow.com/questions/34031397/running-docker-on-ubuntu-mounted-host-volume-is-not-writable-from-container
ec77cd37510d2963b43c19aa90040fb0c82a6772,274843,                        // http://stackoverflow.com/questions/274843/preventing-javascript-click-event-with-scriptaculous-drag-and-drop
0dbc81a7eb50be31561279aabf312486f8440ec2,12518499,<https://stackoverflow.com/questions/12518499/pip-ignores-dependency-links-in-setup-py>`__.
48320ab8fe27bd6baf35378fbc708bb782606dd3,19742993,  // http://stackoverflow.com/questions/19742993/implementing-a-spinlock-in-boost-example-neededhttp://stackoverflow.com/questions/19742993/implementing-a-spinlock-in-boost-example-needed
04b94122bf634f1548184a0f6603d9e8203d00e5,9882716,    // convert packed floats to proper floats : see http://stackoverflow.com/questions/9882716/packing-float-into-vec4-how-does-this-code-work
a3abeef0c01a2263039c6f44dac6786971cd32b0,3330919,        // http://stackoverflow.com/a/3330919)
f7ea9f79da62edc798b1762ae8ae012644701f42,4285627,	  // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
2e50e23647001fa50dcb2a7e38eb9e18ce8e53fc,9277906,//http://stackoverflow.com/questions/9277906/stdvector-to-string-with-custom-delimiter
802a209d9ba8fbf7a21b7f0eaecca776d3023266,44222061,[参考 stackoverflow 一个回答](https://stackoverflow.com/questions/44222061/c-value-escapes-local-scope)
4037cdbb2253030125df0d0e107637e11cfbf31c,23046071,	 * Seekable stream: http://stackoverflow.com/a/23046071/1789808
09b8bba202c1e27f144926e202554e830be1806f,34920801,* **不建议**run在root下[bin/elasticsearch -Des.insecure.allow.root=true](http://stackoverflow.com/questions/34920801/how-to-run-elasticsearch-2-1-1-as-root-user-in-linux-machine)
7c74806ba19f494c4d1f0e1c2bbf7febc47cb3e6,19766491,URI: http://stackoverflow.com/questions/19766491/get-mvc-person-model-book-list-within-knockout-model-observable-array
d68df6e52fab35b7ce273f4653f236d268a377d6,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
9f09e16017f0d20ed3fa99a02c73a623dafbc289,15297053,"    ""* B. Plot the number of records in both training and testset per day. Have a look here on how to work with the timegrouper functionality: http://stackoverflow.com/questions/15297053/how-can-i-divide-single-values-of-a-dataframe-by-monthly-averages\n"","
97a906a8872bb0fccea55441a39b5a61a84858fa,5999205,"PS:具体参考：[step into system call source code](http://stackoverflow.com/questions/5999205/cannot-step-into-system-call-source-code),这里不再赘述。"
b2bf5dd6ff4682ba35a60210638247582d4de53d,13216903,                    // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension
ecaa2934568d564d0d61a1495705dace20b2ac69,4795914, * @source http://stackoverflow.com/a/4795914/805649
83c228f9b75680c060381cea9657256e0f2d30ea,14920153,   * http://stackoverflow.com/questions/14920153/how-to-write-nested-queries-in-select-clause
33e8d3b215d6d4c81c5a4367ab246ffff48f0855,7889272,        // From http://stackoverflow.com/a/7889272
7509252613b609ecbd7017589331136b268a25a6,10510783,// http://stackoverflow.com/a/10510783/195141
4d458087367505f3454b91ee411fc92bd83a9f25,3143070,// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
0d47bd7feb7229dd9398f7719b8f6db7329f5d1f,16376161,// http://stackoverflow.com/questions/16376161/javascript-set-file-in-download
a161fe8526260ce23fa483f40b77ed7118421851,8898412,			// See: http://stackoverflow.com/questions/8898412
7c9e9c3c6b5cd79161eac230a062bbf127572c96,1606797,     * new と apply を同時に使う <http://stackoverflow.com/questions/1606797/use-of-apply-with-new-operator-is-this-possible>
332b7f48636b34ec37683b11e289155de38f627b,11933173,        /* Workaround to restrict daterange past date select: http://stackoverflow.com/questions/11933173/how-to-restrict-the-selectable-date-ranges-in-bootstrap-datepicker */
d46046e575ef79bc7ec138b698e139e4542262fd,1397036,	 * @see http://stackoverflow.com/questions/1397036/how-to-convert-array-to-simplexml
1978bb8b641d1708a5ae52d0a3238582357d36bc,1165647,  // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-
0f9ab8ece8bdf1bd4b09d586f3d95d6bfcfb192c,5564098,        # todo http://stackoverflow.com/questions/5564098/
83a49a04f8215a66abf482f4c1a46755d7f1419c,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
44a1e69aaa7a01eaabdebdd4b9b645cc03856d6c,4622,    ∙ If you think the Link(http://stackoverflow.com/questions/4622/sql-case-statement-syntax~~SQL syntax
b43148b0576ab0bdeafc691c935baf4fdf434c25,5657371,    // cf. https://stackoverflow.com/questions/5657371/ie9-window-loses-focus-due-to-jquery-mobile
c252d87e58e7934dd9ac0721f1044af4dcaa9a09,37886136,(thanks to [this stackoverflow answer](https://stackoverflow.com/a/37886136/3881923))
fc2e2230e52dad296f4db2a98abd24cf925bac2f,9257464,參見 \simpleurl{http://stackoverflow.com/questions/9257464/give-an-asymptotic-upper-bound-on-the-height-of-an-n-node-binary-search-tree-in}。
9e59b5a7d4797e9f00e30d4b819aa83e16123eee,2891790,# http://stackoverflow.com/questions/2891790/pretty-printing-of-numpy-array
bdc2d308cc426bf9f04736fda8fed8348885037a,41652134,- [Creating strings of full precision arrays](http://stackoverflow.com/questions/41652134/creating-strings-of-full-precision-arrays)
14cd071cb19e153b3bd6cfc3d1f1689ee75da519,384380,// http://stackoverflow.com/a/384380/182183
6e50d70c8e421c2cf04f32206f16711c78bf31ce,14507794,    # http://stackoverflow.com/questions/14507794/python-pandas-how-to-flatten-a-hierarchical-index-in-columns
602918bb01f2f69d364a7ce5661e9709a11405af,624291,        //g_oss.seekp(0); // optimal reset - as seen here: https://stackoverflow.com/a/624291/3162383
a1652894eaa8516169b1972d5e1c7375b78272e5,8120860,	# http://stackoverflow.com/questions/8120860/python-doing-some-work-on-background-with-gtk-gui
b252089c430edf2a5f6fd35f7be326d54f1b7a83,37628,78;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;mind;1.0;0.0019782393669634025;28.0;0
849bd359f225f91b78aa0cf6955e3c81a9e616e5,29624398,#https://stackoverflow.com/questions/29624398/searching-and-replacing-in-binary-file
da8f22c28da4648916f1075763dd64b6d5a6d97a,16226924 14150577 17202128 10294291 22661977 17694143 29282573,"{""agents"":{""ie"":{""browser"":""IE"",""abbr"":""IE"",""prefix"":""ms"",""type"":""desktop"",""usage_global"":{""5.5"":0.009298,""6"":0.0399954,""7"":0.0399954,""8"":0.839903,""9"":0.64564,""10"":0.634213,""11"":6.07359},""version_list"":[{""version"":""5.5"",""global_usage"":0.009298,""era"":-6,""prefix"":""""},{""version"":""6"",""global_usage"":0.0399954,""era"":-5,""prefix"":""""},{""version"":""7"",""global_usage"":0.0399954,""era"":-4,""prefix"":""""},{""version"":""8"",""global_usage"":0.839903,""era"":-3,""prefix"":""""},{""version"":""9"",""global_usage"":0.64564,""era"":-2,""prefix"":""""},{""version"":""10"",""global_usage"":0.634213,""era"":-1,""prefix"":""""},{""version"":""11"",""global_usage"":6.07359,""era"":0,""prefix"":""""}],""current_version"":""11""},""edge"":{""browser"":""Edge"",""abbr"":""Edge"",""prefix"":""ms"",""type"":""desktop"",""usage_global"":{""12"":0.262589,""13"":0.854811,""14"":0},""version_list"":[{""version"":""12"",""global_usage"":0.262589,""era"":-1,""prefix"":""""},{""version"":""13"",""global_usage"":0.854811,""era"":0,""prefix"":""""},{""version"":""14"",""global_usage"":0,""era"":1,""prefix"":""""}],""current_version"":""13""},""firefox"":{""browser"":""Firefox"",""abbr"":""FF"",""prefix"":""moz"",""type"":""desktop"",""usage_global"":{""2"":0.011174,""3"":0.039109,""3.5"":0.005587,""3.6"":0.033522,""4"":0.011174,""5"":0.005587,""6"":0.022348,""7"":0.005725,""8"":0.016761,""9"":0.005587,""10"":0.011174,""11"":0.016761,""12"":0.027935,""13"":0.011174,""14"":0.011174,""15"":0.022348,""16"":0.022348,""17"":0.016761,""18"":0.016761,""19"":0.011174,""20"":0.016761,""21"":0.044696,""22"":0.022348,""23"":0.022348,""24"":0.027935,""25"":0.044696,""26"":0.022348,""27"":0.022348,""28"":0.027935,""29"":0.039109,""30"":0.033522,""31"":0.195545,""32"":0.027935,""33"":0.050283,""34"":0.05587,""35"":0.072631,""36"":0.067044,""37"":0.089392,""38"":0.240241,""39"":0.11174,""40"":0.106153,""41"":0.128501,""42"":0.217893,""43"":2.19569,""44"":4.49754,""45"":0.206719,""46"":0.005587,""47"":0,""48"":0},""version_list"":[{""version"":""2"",""global_usage"":0.011174,""era"":-45,""prefix"":""""},{""version"":""3"",""global_usage"":0.039109,""era"":-44,""prefix"":""""},{""version"":""3.5"",""global_usage"":0.005587,""era"":-43,""prefix"":""""},{""version"":""3.6"",""global_usage"":0.033522,""era"":-42,""prefix"":""""},{""version"":""4"",""global_usage"":0.011174,""era"":-41,""prefix"":""""},{""version"":""5"",""global_usage"":0.005587,""era"":-40,""prefix"":""""},{""version"":""6"",""global_usage"":0.022348,""era"":-39,""prefix"":""""},{""version"":""7"",""global_usage"":0.005725,""era"":-38,""prefix"":""""},{""version"":""8"",""global_usage"":0.016761,""era"":-37,""prefix"":""""},{""version"":""9"",""global_usage"":0.005587,""era"":-36,""prefix"":""""},{""version"":""10"",""global_usage"":0.011174,""era"":-35,""prefix"":""""},{""version"":""11"",""global_usage"":0.016761,""era"":-34,""prefix"":""""},{""version"":""12"",""global_usage"":0.027935,""era"":-33,""prefix"":""""},{""version"":""13"",""global_usage"":0.011174,""era"":-32,""prefix"":""""},{""version"":""14"",""global_usage"":0.011174,""era"":-31,""prefix"":""""},{""version"":""15"",""global_usage"":0.022348,""era"":-30,""prefix"":""""},{""version"":""16"",""global_usage"":0.022348,""era"":-29,""prefix"":""""},{""version"":""17"",""global_usage"":0.016761,""era"":-28,""prefix"":""""},{""version"":""18"",""global_usage"":0.016761,""era"":-27,""prefix"":""""},{""version"":""19"",""global_usage"":0.011174,""era"":-26,""prefix"":""""},{""version"":""20"",""global_usage"":0.016761,""era"":-25,""prefix"":""""},{""version"":""21"",""global_usage"":0.044696,""era"":-24,""prefix"":""""},{""version"":""22"",""global_usage"":0.022348,""era"":-23,""prefix"":""""},{""version"":""23"",""global_usage"":0.022348,""era"":-22,""prefix"":""""},{""version"":""24"",""global_usage"":0.027935,""era"":-21,""prefix"":""""},{""version"":""25"",""global_usage"":0.044696,""era"":-20,""prefix"":""""},{""version"":""26"",""global_usage"":0.022348,""era"":-19,""prefix"":""""},{""version"":""27"",""global_usage"":0.022348,""era"":-18,""prefix"":""""},{""version"":""28"",""global_usage"":0.027935,""era"":-17,""prefix"":""""},{""version"":""29"",""global_usage"":0.039109,""era"":-16,""prefix"":""""},{""version"":""30"",""global_usage"":0.033522,""era"":-15,""prefix"":""""},{""version"":""31"",""global_usage"":0.195545,""era"":-14,""prefix"":""""},{""version"":""32"",""global_usage"":0.027935,""era"":-13,""prefix"":""""},{""version"":""33"",""global_usage"":0.050283,""era"":-12,""prefix"":""""},{""version"":""34"",""global_usage"":0.05587,""era"":-11,""prefix"":""""},{""version"":""35"",""global_usage"":0.072631,""era"":-10,""prefix"":""""},{""version"":""36"",""global_usage"":0.067044,""era"":-9,""prefix"":""""},{""version"":""37"",""global_usage"":0.089392,""era"":-8,""prefix"":""""},{""version"":""38"",""global_usage"":0.240241,""era"":-7,""prefix"":""""},{""version"":""39"",""global_usage"":0.11174,""era"":-6,""prefix"":""""},{""version"":""40"",""global_usage"":0.106153,""era"":-5,""prefix"":""""},{""version"":""41"",""global_usage"":0.128501,""era"":-4,""prefix"":""""},{""version"":""42"",""global_usage"":0.217893,""era"":-3,""prefix"":""""},{""version"":""43"",""global_usage"":2.19569,""era"":-2,""prefix"":""""},{""version"":""44"",""global_usage"":4.49754,""era"":-1,""prefix"":""""},{""version"":""45"",""global_usage"":0.206719,""era"":0,""prefix"":""""},{""version"":""46"",""global_usage"":0.005587,""era"":1,""prefix"":""""},{""version"":""47"",""global_usage"":0,""era"":2,""prefix"":""""},{""version"":""48"",""global_usage"":0,""era"":3,""prefix"":""""}],""current_version"":""45""},""chrome"":{""browser"":""Chrome"",""abbr"":""Chr."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""4"":0.011174,""5"":0.005587,""6"":0.005587,""7"":0.005591,""8"":0.005591,""9"":0.005591,""10"":0.011174,""11"":0.044696,""12"":0.011174,""13"":0.005587,""14"":0.005587,""15"":0.005587,""16"":0.005587,""17"":0.005587,""18"":0.011174,""19"":0.011174,""20"":0.005587,""21"":0.016761,""22"":0.050283,""23"":0.011174,""24"":0.027935,""25"":0.016761,""26"":0.027935,""27"":0.022348,""28"":0.027935,""29"":0.050283,""30"":0.027935,""31"":0.357568,""32"":0.033522,""33"":0.083805,""34"":0.061457,""35"":0.078218,""36"":0.078218,""37"":0.072631,""38"":0.072631,""39"":0.139675,""40"":0.106153,""41"":0.162023,""42"":0.139675,""43"":0.430199,""44"":0.312872,""45"":0.536352,""46"":0.50283,""47"":1.39675,""48"":25.9069,""49"":0.117327,""50"":0.128501,""51"":0,""52"":0},""version_list"":[{""version"":""4"",""global_usage"":0.011174,""era"":-45,""prefix"":""""},{""version"":""5"",""global_usage"":0.005587,""era"":-44,""prefix"":""""},{""version"":""6"",""global_usage"":0.005587,""era"":-43,""prefix"":""""},{""version"":""7"",""global_usage"":0.005591,""era"":-42,""prefix"":""""},{""version"":""8"",""global_usage"":0.005591,""era"":-41,""prefix"":""""},{""version"":""9"",""global_usage"":0.005591,""era"":-40,""prefix"":""""},{""version"":""10"",""global_usage"":0.011174,""era"":-39,""prefix"":""""},{""version"":""11"",""global_usage"":0.044696,""era"":-38,""prefix"":""""},{""version"":""12"",""global_usage"":0.011174,""era"":-37,""prefix"":""""},{""version"":""13"",""global_usage"":0.005587,""era"":-36,""prefix"":""""},{""version"":""14"",""global_usage"":0.005587,""era"":-35,""prefix"":""""},{""version"":""15"",""global_usage"":0.005587,""era"":-34,""prefix"":""""},{""version"":""16"",""global_usage"":0.005587,""era"":-33,""prefix"":""""},{""version"":""17"",""global_usage"":0.005587,""era"":-32,""prefix"":""""},{""version"":""18"",""global_usage"":0.011174,""era"":-31,""prefix"":""""},{""version"":""19"",""global_usage"":0.011174,""era"":-30,""prefix"":""""},{""version"":""20"",""global_usage"":0.005587,""era"":-29,""prefix"":""""},{""version"":""21"",""global_usage"":0.016761,""era"":-28,""prefix"":""""},{""version"":""22"",""global_usage"":0.050283,""era"":-27,""prefix"":""""},{""version"":""23"",""global_usage"":0.011174,""era"":-26,""prefix"":""""},{""version"":""24"",""global_usage"":0.027935,""era"":-25,""prefix"":""""},{""version"":""25"",""global_usage"":0.016761,""era"":-24,""prefix"":""""},{""version"":""26"",""global_usage"":0.027935,""era"":-23,""prefix"":""""},{""version"":""27"",""global_usage"":0.022348,""era"":-22,""prefix"":""""},{""version"":""28"",""global_usage"":0.027935,""era"":-21,""prefix"":""""},{""version"":""29"",""global_usage"":0.050283,""era"":-20,""prefix"":""""},{""version"":""30"",""global_usage"":0.027935,""era"":-19,""prefix"":""""},{""version"":""31"",""global_usage"":0.357568,""era"":-18,""prefix"":""""},{""version"":""32"",""global_usage"":0.033522,""era"":-17,""prefix"":""""},{""version"":""33"",""global_usage"":0.083805,""era"":-16,""prefix"":""""},{""version"":""34"",""global_usage"":0.061457,""era"":-15,""prefix"":""""},{""version"":""35"",""global_usage"":0.078218,""era"":-14,""prefix"":""""},{""version"":""36"",""global_usage"":0.078218,""era"":-13,""prefix"":""""},{""version"":""37"",""global_usage"":0.072631,""era"":-12,""prefix"":""""},{""version"":""38"",""global_usage"":0.072631,""era"":-11,""prefix"":""""},{""version"":""39"",""global_usage"":0.139675,""era"":-10,""prefix"":""""},{""version"":""40"",""global_usage"":0.106153,""era"":-9,""prefix"":""""},{""version"":""41"",""global_usage"":0.162023,""era"":-8,""prefix"":""""},{""version"":""42"",""global_usage"":0.139675,""era"":-7,""prefix"":""""},{""version"":""43"",""global_usage"":0.430199,""era"":-6,""prefix"":""""},{""version"":""44"",""global_usage"":0.312872,""era"":-5,""prefix"":""""},{""version"":""45"",""global_usage"":0.536352,""era"":-4,""prefix"":""""},{""version"":""46"",""global_usage"":0.50283,""era"":-3,""prefix"":""""},{""version"":""47"",""global_usage"":1.39675,""era"":-2,""prefix"":""""},{""version"":""48"",""global_usage"":25.9069,""era"":-1,""prefix"":""""},{""version"":""49"",""global_usage"":0.117327,""era"":0,""prefix"":""""},{""version"":""50"",""global_usage"":0.128501,""era"":1,""prefix"":""""},{""version"":""51"",""global_usage"":0,""era"":2,""prefix"":""""},{""version"":""52"",""global_usage"":0,""era"":3,""prefix"":""""}],""current_version"":""49""},""safari"":{""browser"":""Safari"",""abbr"":""Saf."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""3.1"":0,""3.2"":0.008692,""4"":0.022348,""5"":0.067044,""5.1"":0.134088,""6"":0.022348,""6.1"":0.094979,""7"":0.061457,""7.1"":0.044696,""8"":0.329633,""9"":1.69845,""9.1"":0.011174},""version_list"":[{""version"":""3.1"",""global_usage"":0,""era"":-11,""prefix"":""""},{""version"":""3.2"",""global_usage"":0.008692,""era"":-10,""prefix"":""""},{""version"":""4"",""global_usage"":0.022348,""era"":-9,""prefix"":""""},{""version"":""5"",""global_usage"":0.067044,""era"":-8,""prefix"":""""},{""version"":""5.1"",""global_usage"":0.134088,""era"":-7,""prefix"":""""},{""version"":""6"",""global_usage"":0.022348,""era"":-6,""prefix"":""""},{""version"":""6.1"",""global_usage"":0.094979,""era"":-5,""prefix"":""""},{""version"":""7"",""global_usage"":0.061457,""era"":-4,""prefix"":""""},{""version"":""7.1"",""global_usage"":0.044696,""era"":-3,""prefix"":""""},{""version"":""8"",""global_usage"":0.329633,""era"":-2,""prefix"":""""},{""version"":""9"",""global_usage"":1.69845,""era"":-1,""prefix"":""""},{""version"":""9.1"",""global_usage"":0.011174,""era"":0,""prefix"":""""}],""current_version"":""9.1""},""opera"":{""browser"":""Opera"",""abbr"":""Op."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""9"":0.0082,""9.5-9.6"":0.00685,""10.0-10.1"":0.005587,""10.5"":0.008392,""10.6"":0.007296,""11"":0.016581,""11.1"":0.006229,""11.5"":0.006015,""11.6"":0.011174,""12"":0.016761,""12.1"":0.156436,""15"":0.00685,""16"":0.00685,""17"":0.00685,""18"":0.005587,""19"":0.006015,""20"":0.005595,""21"":0.006597,""22"":0.006597,""23"":0.013434,""24"":0.006702,""25"":0.006015,""26"":0.005595,""27"":0.011174,""28"":0.050283,""29"":0.011174,""30"":0.016761,""31"":0.011174,""32"":0.011174,""33"":0.016761,""34"":0.184371,""35"":0.569874,""36"":0.005587,""37"":0},""version_list"":[{""version"":""9"",""global_usage"":0.0082,""era"":-31,""prefix"":""o""},{""version"":""9.5-9.6"",""global_usage"":0.00685,""era"":-30,""prefix"":""o""},{""version"":""10.0-10.1"",""global_usage"":0.005587,""era"":-29,""prefix"":""o""},{""version"":""10.5"",""global_usage"":0.008392,""era"":-28,""prefix"":""o""},{""version"":""10.6"",""global_usage"":0.007296,""era"":-27,""prefix"":""o""},{""version"":""11"",""global_usage"":0.016581,""era"":-26,""prefix"":""o""},{""version"":""11.1"",""global_usage"":0.006229,""era"":-25,""prefix"":""o""},{""version"":""11.5"",""global_usage"":0.006015,""era"":-24,""prefix"":""o""},{""version"":""11.6"",""global_usage"":0.011174,""era"":-23,""prefix"":""o""},{""version"":""12"",""global_usage"":0.016761,""era"":-22,""prefix"":""o""},{""version"":""12.1"",""global_usage"":0.156436,""era"":-21,""prefix"":""o""},{""version"":""15"",""global_usage"":0.00685,""era"":-20,""prefix"":""""},{""version"":""16"",""global_usage"":0.00685,""era"":-19,""prefix"":""""},{""version"":""17"",""global_usage"":0.00685,""era"":-18,""prefix"":""""},{""version"":""18"",""global_usage"":0.005587,""era"":-17,""prefix"":""""},{""version"":""19"",""global_usage"":0.006015,""era"":-16,""prefix"":""""},{""version"":""20"",""global_usage"":0.005595,""era"":-15,""prefix"":""""},{""version"":""21"",""global_usage"":0.006597,""era"":-14,""prefix"":""""},{""version"":""22"",""global_usage"":0.006597,""era"":-13,""prefix"":""""},{""version"":""23"",""global_usage"":0.013434,""era"":-12,""prefix"":""""},{""version"":""24"",""global_usage"":0.006702,""era"":-11,""prefix"":""""},{""version"":""25"",""global_usage"":0.006015,""era"":-10,""prefix"":""""},{""version"":""26"",""global_usage"":0.005595,""era"":-9,""prefix"":""""},{""version"":""27"",""global_usage"":0.011174,""era"":-8,""prefix"":""""},{""version"":""28"",""global_usage"":0.050283,""era"":-7,""prefix"":""""},{""version"":""29"",""global_usage"":0.011174,""era"":-6,""prefix"":""""},{""version"":""30"",""global_usage"":0.016761,""era"":-5,""prefix"":""""},{""version"":""31"",""global_usage"":0.011174,""era"":-4,""prefix"":""""},{""version"":""32"",""global_usage"":0.011174,""era"":-3,""prefix"":""""},{""version"":""33"",""global_usage"":0.016761,""era"":-2,""prefix"":""""},{""version"":""34"",""global_usage"":0.184371,""era"":-1,""prefix"":""""},{""version"":""35"",""global_usage"":0.569874,""era"":0,""prefix"":""""},{""version"":""36"",""global_usage"":0.005587,""era"":1,""prefix"":""""},{""version"":""37"",""global_usage"":0,""era"":2,""prefix"":""""}],""current_version"":""35"",""prefix_exceptions"":{""9"":""o"",""9.5-9.6"":""o"",""10.0-10.1"":""o"",""10.5"":""o"",""10.6"":""o"",""11"":""o"",""11.1"":""o"",""11.5"":""o"",""11.6"":""o"",""12"":""o"",""12.1"":""o""}},""ios_saf"":{""browser"":""iOS Safari"",""abbr"":""iOS"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""3.2"":0,""4.0-4.1"":0,""4.2-4.3"":0,""5.0-5.1"":0,""6.0-6.1"":0,""7.0-7.1"":0.316785,""8"":0.021505,""8.1-8.4"":0.875087,""9.0-9.2"":6.82452,""9.3"":0},""version_list"":[{""version"":""3.2"",""global_usage"":0,""era"":-8,""prefix"":""""},{""version"":""4.0-4.1"",""global_usage"":0,""era"":-7,""prefix"":""""},{""version"":""4.2-4.3"",""global_usage"":0,""era"":-6,""prefix"":""""},{""version"":""5.0-5.1"",""global_usage"":0,""era"":-5,""prefix"":""""},{""version"":""6.0-6.1"",""global_usage"":0,""era"":-4,""prefix"":""""},{""version"":""7.0-7.1"",""global_usage"":0.316785,""era"":-3,""prefix"":""""},{""version"":""8"",""global_usage"":0.021505,""era"":-2,""prefix"":""""},{""version"":""8.1-8.4"",""global_usage"":0.875087,""era"":-1,""prefix"":""""},{""version"":""9.0-9.2"",""global_usage"":6.82452,""era"":0,""prefix"":""""},{""version"":""9.3"",""global_usage"":0,""era"":1,""prefix"":""""}],""current_version"":""9.0-9.2""},""op_mini"":{""browser"":""Opera Mini"",""abbr"":""O.Mini"",""prefix"":""o"",""type"":""mobile"",""usage_global"":{""5.0-8.0"":4.72845},""version_list"":[{""version"":""5.0-8.0"",""global_usage"":4.72845,""era"":0,""prefix"":""""}],""current_version"":""5.0-8.0""},""android"":{""browser"":""Android Browser"",""abbr"":""And."",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""2.1"":0,""2.2"":0,""2.3"":0.0214528,""3"":0,""4"":0.185613,""4.1"":0.390813,""4.2-4.3"":0.876765,""4.4"":1.76566,""4.4.3-4.4.4"":0.948585,""47"":0},""version_list"":[{""version"":""2.1"",""global_usage"":0,""era"":-9,""prefix"":""""},{""version"":""2.2"",""global_usage"":0,""era"":-8,""prefix"":""""},{""version"":""2.3"",""global_usage"":0.0214528,""era"":-7,""prefix"":""""},{""version"":""3"",""global_usage"":0,""era"":-6,""prefix"":""""},{""version"":""4"",""global_usage"":0.185613,""era"":-5,""prefix"":""""},{""version"":""4.1"",""global_usage"":0.390813,""era"":-4,""prefix"":""""},{""version"":""4.2-4.3"",""global_usage"":0.876765,""era"":-3,""prefix"":""""},{""version"":""4.4"",""global_usage"":1.76566,""era"":-2,""prefix"":""""},{""version"":""4.4.3-4.4.4"",""global_usage"":0.948585,""era"":-1,""prefix"":""""},{""version"":""47"",""global_usage"":0,""era"":0,""prefix"":""""}],""current_version"":""47""},""bb"":{""browser"":""Blackberry Browser"",""abbr"":""BB"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""7"":0.086073,""10"":0},""version_list"":[{""version"":""7"",""global_usage"":0.086073,""era"":-1,""prefix"":""""},{""version"":""10"",""global_usage"":0,""era"":0,""prefix"":""""}],""current_version"":""10""},""op_mob"":{""browser"":""Opera Mobile"",""abbr"":""O.Mob"",""prefix"":""o"",""type"":""mobile"",""usage_global"":{""10"":0,""11"":0,""11.1"":0,""11.5"":0,""12"":0.000270816,""12.1"":0.000270816,""35"":0.0116451},""version_list"":[{""version"":""10"",""global_usage"":0,""era"":-6,""prefix"":""""},{""version"":""11"",""global_usage"":0,""era"":-5,""prefix"":""""},{""version"":""11.1"",""global_usage"":0,""era"":-4,""prefix"":""""},{""version"":""11.5"",""global_usage"":0,""era"":-3,""prefix"":""""},{""version"":""12"",""global_usage"":0.000270816,""era"":-2,""prefix"":""""},{""version"":""12.1"",""global_usage"":0.000270816,""era"":-1,""prefix"":""""},{""version"":""35"",""global_usage"":0.0116451,""era"":0,""prefix"":""webkit""}],""current_version"":""35"",""prefix_exceptions"":{""35"":""webkit""}},""and_chr"":{""browser"":""Chrome for Android"",""abbr"":""Chr/And."",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""49"":17.4362},""version_list"":[{""version"":""49"",""global_usage"":17.4362,""era"":0,""prefix"":""""}],""current_version"":""49""},""and_ff"":{""browser"":""Firefox for Android"",""abbr"":""FF/And."",""prefix"":""moz"",""type"":""mobile"",""usage_global"":{""45"":0.04414},""version_list"":[{""version"":""45"",""global_usage"":0.04414,""era"":0,""prefix"":""""}],""current_version"":""45""},""ie_mob"":{""browser"":""IE Mobile"",""abbr"":""IE.Mob"",""prefix"":""ms"",""type"":""mobile"",""usage_global"":{""10"":0.149005,""11"":0.658757},""version_list"":[{""version"":""10"",""global_usage"":0.149005,""era"":-1,""prefix"":""""},{""version"":""11"",""global_usage"":0.658757,""era"":0,""prefix"":""""}],""current_version"":""11""},""and_uc"":{""browser"":""UC Browser for Android"",""abbr"":""UC"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""9.9"":8.87214},""version_list"":[{""version"":""9.9"",""global_usage"":8.87214,""era"":0,""prefix"":""webkit""}],""current_version"":""9.9"",""prefix_exceptions"":{""9.9"":""webkit""}}},""statuses"":{""rec"":""W3C Recommendation"",""pr"":""W3C Proposed Recommendation"",""cr"":""W3C Candidate Recommendation"",""wd"":""W3C Working Draft"",""ls"":""WHATWG Living Standard"",""other"":""Other"",""unoff"":""Unofficial / Note""},""cats"":{""CSS"":[""CSS"",""CSS2"",""CSS3""],""HTML5"":[""Canvas"",""HTML5""],""JS API"":[""JS API""],""Other"":[""PNG"",""Other"",""DOM""],""SVG"":[""SVG""]},""updated"":1459404680,""data"":{""png-alpha"":{""title"":""PNG alpha transparency"",""description"":""Semi-transparent areas in PNG files"",""spec"":""http://www.w3.org/TR/PNG/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Portable_Network_Graphics"",""title"":""Wikipedia""},{""url"":""http://dillerdesign.com/experiment/DD_belatedPNG/"",""title"":""Workaround for IE6""}],""categories"":[""PNG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs."",""notes_by_num"":{},""usage_perc_y"":97.36,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""apng"":{""title"":""Animated PNG (APNG)"",""description"":""Like animated GIFs, but allowing 24-bit colors and alpha transparency"",""spec"":""https://wiki.mozilla.org/APNG_Specification"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/APNG"",""title"":""Wikipedia""},{""url"":""https://github.com/davidmz/apng-canvas"",""title"":""Polyfill using canvas""},{""url"":""https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp"",""title"":""Chrome extension providing support""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6513393-apng-animated-png-images-support-firefox-and-sa"",""title"":""Microsoft Edge feature request on UserVoice""},{""url"":""https://addons.opera.com/en/extensions/details/apng/?display=en"",""title"":""Opera extension providing support""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=437662"",""title"":""Chromium issue""}],""categories"":[""PNG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Where support for APNG is missing, only the first frame is displayed"",""notes_by_num"":{},""usage_perc_y"":18.95,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""video"":{""title"":""Video element"",""description"":""Method of playing videos on webpages (without requiring a plug-in)."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element"",""status"":""ls"",""links"":[{""url"":""https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/"",""title"":""Detailed article on video/audio elements""},{""url"":""http://webmproject.org"",""title"":""WebM format information""},{""url"":""http://camendesign.co.uk/code/video_for_everybody"",""title"":""Video for Everybody""},{""url"":""http://diveintohtml5.info/video.html"",""title"":""Video on the Web - includes info on Android support""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/video.js#video"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/video"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Different browsers have support for different video formats, see sub-features for details.\r\n\r\n"",""notes_by_num"":{""1"":""The Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.""},""usage_perc_y"":91.67,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""<video>"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""audio"":{""title"":""Audio element"",""description"":""Method of playing sound on webpages (without requiring a plug-in)."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#the-audio-element"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/native-audio-in-the-browser/"",""title"":""HTML5 Doctor article""},{""url"":""https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/"",""title"":""Detailed article on video/audio elements""},{""url"":""http://www.jplayer.org/latest/demos/"",""title"":""Demos of audio player that uses the audio element""},{""url"":""http://24ways.org/2010/the-state-of-html5-audio"",""title"":""Detailed article on support""},{""url"":""http://textopia.org/androidsoundformats.html"",""title"":""File format test page""},{""url"":""http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio"",""title"":""The State of HTML5 Audio""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/audio.js#audio"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/audio"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":91.67,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""<audio>"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""contenteditable"":{""title"":""contenteditable attribute (basic support)"",""description"":""Method of making any HTML element editable."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#contenteditable"",""status"":""ls"",""links"":[{""url"":""http://html5demos.com/contenteditable"",""title"":""Demo page""},{""url"":""https://blog.whatwg.org/the-road-to-html-5-contenteditable"",""title"":""WHATWG blog post""},{""url"":""http://accessgarage.wordpress.com/2009/05/08/how-to-hack-your-app-to-make-contenteditable-work/"",""title"":""Blog post on usage problems""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/contentEditable"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""This support only refers to very basic editing capability, implementations vary significantly on how certain elements can be edited."",""notes_by_num"":{},""usage_perc_y"":92.6,""usage_perc_a"":0.04,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""dragndrop"":{""title"":""Drag and Drop"",""description"":""Method of easily dragging and dropping elements on a page, requiring minimal JavaScript."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#dnd"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/native-drag-and-drop/"",""title"":""HTML5 Doctor article""},{""url"":""http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html"",""title"":""Shopping cart demo""},{""url"":""http://html5demos.com/drag"",""title"":""Demo with link blocks""},{""url"":""http://docs.webplatform.org/wiki/dom/DragEvent"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/MihaiValentin/setDragImage-IE"",""title"":""Polyfill for setDragImage in IE""},{""url"":""http://blog.teamtreehouse.com/implementing-native-drag-and-drop"",""title"":""Implementing Native Drag and Drop""},{""url"":""https://github.com/timruffles/ios-html5-drag-drop-shim"",""title"":""iOS/Android shim for HTML 5 drag'n'drop""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6542268-setdragimage-on-datatransfer-of-dragevent"",""title"":""Microsoft Edge setDragImage feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #2"",""11"":""a #2""},""edge"":{""12"":""a #2"",""13"":""a #2"",""14"":""a #2""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""y"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM elements attached to the DOM and within the viewport of the browser for `.setDragImage`."",""notes_by_num"":{""1"":""Partial support refers to no support for the `dataTransfer.files` or `.types` objects and limited supported formats for `dataTransfer.setData`/`getData`."",""2"":""Partial support refers to not supporting `.setDragImage`""},""usage_perc_y"":44.47,""usage_perc_a"":9.4,""ucprefix"":false,""parent"":"""",""keywords"":""draganddrop"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""internationalization"":{""title"":""Internationalization API"",""description"":""Locale-sensitive collation (string comparison), number formatting, and date and time formatting."",""spec"":""http://www.ecma-international.org/ecma-402/1.0/"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"",""title"":""MDN reference""},{""url"":""http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/"",""title"":""The ECMAScript Internationalization API""},{""url"":""http://code.tutsplus.com/tutorials/working-with-intl--cms-21082"",""title"":""Working With Intl""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=90906"",""title"":""WebKit tracking bug""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":68.29,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""Intl,Collator,NumberFormat,DateTimeFormat"",""ie_id"":""ecmascriptinternationalizationapi"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""specification-internationalization-api""},""queryselector"":{""title"":""querySelector/querySelectorAll"",""description"":""Method of accessing DOM elements using CSS selectors"",""spec"":""https://dom.spec.whatwg.org/#dom-parentnode-queryselector"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/element.querySelector"",""title"":""MDN article on querySelector""},{""url"":""https://developer.mozilla.org/En/DOM/Element.querySelectorAll"",""title"":""MDN article on querySelectorAll""},{""url"":""http://cjihrig.com/blog/javascripts-selectors-api/"",""title"":""Blog post""},{""url"":""http://docs.webplatform.org/wiki/css/selectors_api/querySelector"",""title"":""WebPlatform Docs""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE8 is due to being limited to [CSS 2.1 selectors](/#feat=css-sel2) and a small subset of [CSS 3 selectors](/#feat=css-sel3) (see notes there). Additionally, it will have trouble with selectors including unrecognized tags (for example HTML5 ones).""},""usage_perc_y"":96.41,""usage_perc_a"":0.84,""ucprefix"":false,""parent"":"""",""keywords"":""query,selectors,selectors api,document.queryselector"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""getelementsbyclassname"":{""title"":""getElementsByClassName"",""description"":""Method of accessing DOM elements by class name"",""spec"":""https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname"",""status"":""ls"",""links"":[{""url"":""http://www.quirksmode.org/dom/tests/basics.html#getElementsByClassName"",""title"":""Test page""},{""url"":""http://docs.webplatform.org/wiki/dom/HTMLElement/getElementsByClassName"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":96.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""byclassname"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""forms"":{""title"":""HTML5 form features"",""description"":""Expanded form options, including things like date pickers, sliders, validation, placeholders and multiple file uploads. Previously known as \""Web forms 2.0\""."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#forms"",""status"":""ls"",""links"":[{""url"":""https://miketaylr.com/code/input-type-attr.html"",""title"":""HTML5 inputs and attribute support page""},{""url"":""https://github.com/westonruter/webforms2"",""title"":""Cross-browser JS implementation (based on original spec)""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""a"",""11"":""a""},""edge"":{""12"":""a"",""13"":""a"",""14"":""a""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a"",""9.1"":""a""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""a""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""a""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":9.12,""usage_perc_a"":80.32,""ucprefix"":false,""parent"":"""",""keywords"":""input,datepicker"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""html5semantic"":{""title"":""New semantic elements"",""description"":""HTML5 offers some new elements, primarily for semantic purposes. The elements include: `section`, `article`, `aside`, `header`, `footer`, `nav`, `figure`, `figcaption`, `time`, `mark` & `main`."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#sections"",""status"":""ls"",""links"":[{""url"":""https://blog.whatwg.org/supporting-new-elements-in-ie"",""title"":""Workaround for IE""},{""url"":""https://blog.whatwg.org/styling-ie-noscript"",""title"":""Alternate workaround""},{""url"":""http://oli.jp/2009/html5-structure3/"",""title"":""Article on structural elements""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-html5-elements"",""title"":""has.js test""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""a #2"",""5.1"":""a #2"",""6"":""a #2"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""a #1"",""9.5-9.6"":""a #1"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""a #1"",""11"":""a #1"",""11.1"":""a #2"",""11.5"":""a #2"",""11.6"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #2"",""4.2-4.3"":""a #2"",""5.0-5.1"":""a #2"",""6.0-6.1"":""a #2"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""a #1"",""2.2"":""a #2"",""2.3"":""a #2"",""3"":""a #2"",""4"":""a #2"",""4.1"":""a #2"",""4.2-4.3"":""a #2"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #2"",""10"":""a #2""},""op_mob"":{""10"":""a #1"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #2"",""11"":""a #2""},""and_uc"":{""9.9"":""a #2""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to missing the default styling, as technically the elements are considered \""[unknown](https://developer.mozilla.org/en-US/docs/Web/API/HTMLUnknownElement)\"". This is easily taken care of by manually setting the default `display` value for each tag."",""2"":""Partial support refers to only the `<main>` element (added later to the spec) being \""unknown\"", though it can still be used and styled.""},""usage_perc_y"":72.02,""usage_perc_a"":24.44,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-line-clamp"":{""title"":""CSS line-clamp"",""description"":""Proprietary and undocumented CSS property that will contain text to a given amount of lines when used in combination with `display: -webkit-box`. It will end with ellipsis when `text-overflow: ellipsis` is included."",""spec"":""https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-WebKit_SpecificUnsupportedProperties"",""status"":""unoff"",""links"":[{""url"":""http://guerillalabs.co/blog/css-line-clamping.html"",""title"":""Article on cross-browser CSS line clamping""},{""url"":""https://css-tricks.com/line-clampin/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""u"",""10"":""u"",""11"":""u"",""12"":""u"",""13"":""u"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""As there is no specification and the property is dependent on an outdated implementation of flexbox (hence `display: -webkit-box`) it is unlikely that other browsers will support the property as-is, although an alternative solution may at some point replace it."",""notes_by_num"":{},""usage_perc_y"":73.11,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""offline-apps"":{""title"":""Offline web applications"",""description"":""Now deprecated method of defining web page files to be cached using a cache manifest file, allowing them to work offline on subsequent visits to the page. "",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#offline"",""status"":""unoff"",""links"":[{""url"":""http://www.sitepoint.com/offline-web-application-tutorial/"",""title"":""Sitepoint tutorial""},{""url"":""http://diveintohtml5.info/offline.html"",""title"":""Dive Into HTML5 article""},{""url"":""http://hacks.mozilla.org/2010/01/offline-web-applications/"",""title"":""Mozilla Hacks article/demo""},{""url"":""http://docs.webplatform.org/wiki/apis/appcache/ApplicationCache"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""This technology is being deprecated in favor of [Service Workers](http://caniuse.com/#feat=serviceworkers)"",""notes_by_num"":{},""usage_perc_y"":91.01,""usage_perc_a"":0.04,""ucprefix"":false,""parent"":"""",""keywords"":""appcache,applicationcache,app cache,application cache,online"",""ie_id"":""applicationcache"",""chrome_id"":""6192449487634432"",""firefox_id"":"""",""webkit_id"":""""},""webworkers"":{""title"":""Web Workers"",""description"":""Method of running scripts in the background, isolated from the web page"",""spec"":""https://html.spec.whatwg.org/multipage/workers.html"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/En/Using_web_workers"",""title"":""MDN article""},{""url"":""http://nerget.com/rayjs-mt/rayjs.html"",""title"":""Web Worker demo""},{""url"":""http://code.google.com/p/ie-web-worker/"",""title"":""Polyfill for IE (single threaded)""},{""url"":""http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/"",""title"":""Tutorial""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":89.54,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""fontface"":{""title"":""@font-face Web fonts"",""description"":""Method of displaying fonts downloaded from websites"",""spec"":""http://www.w3.org/TR/css3-webfonts/"",""status"":""cr"",""links"":[{""url"":""http://webfonts.info"",""title"":""News and information site""},{""url"":""http://en.wikipedia.org/wiki/Web_typography"",""title"":""Wikipedia""},{""url"":""http://www.css3files.com/font/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@font-face"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a #2"",""4.0-4.1"":""a #2"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Not supported by IE Mobile 9 and below."",""notes_by_num"":{""1"":""Partial support refers to only supporting EOT fonts."",""2"":""Partial support refers to only supporting SVG fonts.""},""usage_perc_y"":91.57,""usage_perc_a"":1.04,""ucprefix"":false,""parent"":"""",""keywords"":""font face"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""eot"":{""title"":""EOT - Embedded OpenType fonts"",""description"":""Type of font that can be derived from a regular font, allowing small files and legal use of high-quality fonts. Usage is restricted by the file being tied to the website"",""spec"":""http://www.w3.org/Submission/EOT/"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Embedded_OpenType"",""title"":""Wikipedia""},{""url"":""http://www.microsoft.com/typography/web/embedding/default.aspx"",""title"":""Example pages""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Proposal by Microsoft, being considered for W3C standardization."",""notes_by_num"":{},""usage_perc_y"":8.27,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""woff"":{""title"":""WOFF - Web Open Font Format"",""description"":""Compressed TrueType/OpenType font that contains information about the font's source."",""spec"":""http://www.w3.org/TR/WOFF/"",""status"":""rec"",""links"":[{""url"":""http://hacks.mozilla.org/2009/10/woff/"",""title"":""Mozilla hacks blog post""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n #1"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Reported to be supported in some modified versions of the Android 4.0 browser.""},""usage_perc_y"":90.05,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""multibackgrounds"":{""title"":""CSS3 Multiple backgrounds"",""description"":""Method of using multiple images as a background"",""spec"":""http://www.w3.org/TR/css3-background/"",""status"":""cr"",""links"":[{""url"":""http://www.css3.info/preview/multiple-backgrounds/"",""title"":""Demo & information page""},{""url"":""http://www.css3files.com/background/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/background-image"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":96.4,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""border-image"":{""title"":""CSS3 Border images"",""description"":""Method of using images for borders"",""spec"":""http://www.w3.org/TR/css3-background/#the-border-image"",""status"":""cr"",""links"":[{""url"":""http://www.css3files.com/border/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/border-image"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a x"",""3.6"":""a x"",""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a x"",""3.2"":""a x"",""4"":""a x"",""5"":""a x"",""5.1"":""a x"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""a"",""10.6"":""a"",""11"":""a x"",""11.1"":""a x"",""11.5"":""a x"",""11.6"":""a x"",""12"":""a x"",""12.1"":""a x"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""a x"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a x""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a x"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""a x"",""11.1"":""a x"",""11.5"":""a x"",""12"":""a x"",""12.1"":""a x"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Note that both the `border-style` and `border-width` must be specified (not set to `none` or 0) for border-images to work according to spec, though older implementations may not have this requirement. Partial support refers to supporting the shorthand syntax, but not the individual properties (border-image-source, border-image-slice, etc). "",""notes_by_num"":{},""usage_perc_y"":87.92,""usage_perc_a"":7.05,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""background-img-opts"":{""title"":""CSS3 Background-image options"",""description"":""New properties to affect background images, including background-clip, background-origin and background-size"",""spec"":""http://www.w3.org/TR/css3-background/#backgrounds"",""status"":""cr"",""links"":[{""url"":""http://www.standardista.com/css3/css3-background-properties"",""title"":""Detailed compatibility tables and demos""},{""url"":""http://www.css3files.com/background/"",""title"":""Information page""},{""url"":""https://github.com/louisremi/background-size-polyfill"",""title"":""Polyfill for IE7-8""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a x"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #2 #3"",""3.2"":""a #2 #3"",""4"":""a #2 #3"",""5"":""a #2 #3"",""5.1"":""a #2 #3"",""6"":""a #2 #3"",""6.1"":""a #2 #3"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""a x"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a #3"",""6.0-6.1"":""a"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""a x"",""2.2"":""a x #3"",""2.3"":""a x #3"",""3"":""a #3"",""4"":""a #3"",""4.1"":""a #3"",""4.2-4.3"":""a #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Safari also supports the unofficial `-webkit-background-clip: text` (only with prefix)"",""notes_by_num"":{""1"":""Partial support in Opera Mini refers to not supporting background sizing or background attachments. However Opera Mini 7.5 supports background sizing (including cover and contain values)."",""2"":""Partial support in Safari 6 refers to not supporting background sizing offset from edges syntax."",""3"":""Does not support `background-size` values in the `background` shorthand""},""usage_perc_y"":89.7,""usage_perc_a"":6.71,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-table"":{""title"":""CSS Table display"",""description"":""Method of displaying elements as tables, rows, and cells. Includes support for all `display: table-*` properties as well as `display: inline-table`"",""spec"":""http://www.w3.org/TR/CSS21/tables.html"",""status"":""rec"",""links"":[{""url"":""http://www.onenaught.com/posts/201/use-css-displaytable-for-layout"",""title"":""Blog post on usage""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a #1"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Firefox 2 does not support `inline-table`""},""usage_perc_y"":97.3,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""display:table,table-cell,table-row,table-layout"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-gencontent"":{""title"":""CSS Generated content for pseudo-elements"",""description"":""Method of displaying text or images before or after the given element's contents using the ::before and ::after pseudo-elements. All browsers with support also support the `attr()` notation in the `content` property. "",""spec"":""http://www.w3.org/TR/CSS21/generate.html"",""status"":""rec"",""links"":[{""url"":""http://www.westciv.com/style_master/academy/css_tutorial/advanced/generated_content.html"",""title"":""Guide on usage""},{""url"":""https://dev.opera.com/articles/view/css-generated-content-techniques/"",""title"":""Dev.Opera article""},{""url"":""http://docs.webplatform.org/wiki/css/generated_and_replaced_content"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""For content to appear in pseudo-elements, the `content` property must be set (but may be an empty string)."",""notes_by_num"":{""1"":""IE8 only supports the single-colon CSS 2.1 syntax (i.e. :pseudo-class). It does not support the double-colon CSS3 syntax (i.e. ::pseudo-element).""},""usage_perc_y"":96.48,""usage_perc_a"":0.84,""ucprefix"":false,""parent"":"""",""keywords"":""before,after"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-fixed"":{""title"":""CSS position:fixed"",""description"":""Method of keeping an element in a fixed location regardless of scroll position"",""spec"":""http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning"",""status"":""rec"",""links"":[{""url"":""http://www.css-101.org/fixed-positioning/05.php"",""title"":""Workaround for IE6""},{""url"":""http://bradfrostweb.com/blog/mobile/fixed-position/"",""title"":""Article on mobile support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/position"",""title"":""WebPlatform Docs""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a #2"",""2.2"":""a #2"",""2.3"":""a #2"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older iOS Safari refers to [buggy behavior](http://remysharp.com/2012/05/24/issues-with-position-fixed-scrolling-on-ios/)."",""2"":""Only works in Android 2.1 thru 2.3 by using the following meta tag: <meta name=\""viewport\"" content=\""width=device-width, user-scalable=no\"">.""},""usage_perc_y"":92.29,""usage_perc_a"":0.34,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""beacon"":{""title"":""Beacon API"",""description"":""Allows data to be sent asynchronously to a server with `navigator.sendBeacon`, even after a page was closed. Useful for posting analytics data the moment a user was finished using the page."",""spec"":""http://www.w3.org/TR/beacon/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":56.53,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""beacon"",""chrome_id"":""5517433905348608"",""firefox_id"":"""",""webkit_id"":""""},""hashchange"":{""title"":""Hashchange event"",""description"":""Event triggered in JavaScript when the URL's hash has changed (for example: page.html#foo to page.html#bar) "",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#the-hashchangeevent-interface"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.onhashchange"",""title"":""MDN article""},{""url"":""http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx"",""title"":""MSDN article""},{""url"":""http://www.quirksmode.org/dom/events/tests/hashchange.html"",""title"":""Simple demo""},{""url"":""http://github.com/3nr1c/jUri.js"",""title"":""Polyfill""},{""url"":""http://docs.webplatform.org/wiki/dom/Element/hashchange"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5"",""JS API""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":92.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""onhashchange,HashChangeEvent"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-sel2"":{""title"":""CSS 2.1 selectors"",""description"":""Basic CSS selectors including: `*` (universal selector), `>` (child selector), `:first-child`, `:link`, `:visited`, `:active`, `:hover`, `:focus`, `:lang()`, `+` (adjacent sibling selector), `[attr]`, `[attr=\""val\""]`, `[attr~=\""val\""]`, `[attr|=\""bar\""]`, `.foo` (class selector), `#foo` (id selector)"",""spec"":""http://www.w3.org/TR/CSS21/selector.html"",""status"":""rec"",""links"":[{""url"":""http://www.quirksmode.org/css/contents.html"",""title"":""Detailed support information""},{""url"":""http://www.yourhtmlsource.com/stylesheets/advancedselectors.html"",""title"":""Examples of advanced selectors""},{""url"":""http://selectivizr.com"",""title"":""Selectivizr: Polyfill for IE6-8""},{""url"":""http://docs.webplatform.org/wiki/css/selectors"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Support for `:visited` styling [varies across browsers](http://sixrevisions.com/css/visited-pseudo-class-strange/) due to security concerns."",""notes_by_num"":{},""usage_perc_y"":97.36,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""attribute selector"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-sel3"":{""title"":""CSS3 selectors"",""description"":""Advanced element selection using selectors including: `[foo^=\""bar\""]`, `[foo$=\""bar\""]`, `[foo*=\""bar\""]`, `:root`, `:nth-child()`,  `:nth-last-child()`, `nth-of-type`, `nth-last-of-type()`, `:last-child`, `:first-of-type`, `:last-of-type`, `:only-child`, `:only-of-type`, `:empty`, `:target`, `:enabled`, `:disabled`, `:checked`, `:not()`, `~` (general sibling)"",""spec"":""http://www.w3.org/TR/css3-selectors/"",""status"":""rec"",""links"":[{""url"":""http://www.quirksmode.org/css/selectors/"",""title"":""Detailed support information""},{""url"":""http://www.css3.info/selectors-test/"",""title"":""Automated CSS3 selector test""},{""url"":""http://selectivizr.com"",""title"":""Selectivizr: Polyfill for IE6-8""},{""url"":""http://docs.webplatform.org/wiki/css/selectors"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""IE7 and IE8 support only these CSS3 selectors: General siblings (`element1~element2`) and Attribute selectors `[attr^=val]`, `[attr$=val]`, and `[attr*=val]`""},""usage_perc_y"":96.42,""usage_perc_a"":0.88,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-textshadow"":{""title"":""CSS3 Text-shadow"",""description"":""Method of applying one or more shadow or blur effects to text"",""spec"":""http://www.w3.org/TR/css-text-decor-3/#text-shadow-property"",""status"":""cr"",""links"":[{""url"":""http://hacks.mozilla.org/2009/06/text-shadow/"",""title"":""Mozilla hacks article""},{""url"":""http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_text-shadow.htm"",""title"":""Live editor""},{""url"":""http://www.css3files.com/shadow/#textshadow"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/text-shadow"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y #1"",""13"":""y #1"",""14"":""y #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #2"",""3.2"":""a #2"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":""Opera Mini ignores the blur-radius set, so no blur effect is visible. Text-shadow behavior can be somewhat emulated in older IE versions using the non-standard \""dropshadow\"" or \""glow\"" filters."",""notes_by_num"":{""1"":""IE 10+ supports a fourth length value for the shadow's \""spread\"". This is not (yet) part of the specification."",""2"":""Partial support in Safari 3.* refers to not supporting multiple shadows.""},""usage_perc_y"":90.95,""usage_perc_a"":4.82,""ucprefix"":false,""parent"":"""",""keywords"":""text shadow"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-boxshadow"":{""title"":""CSS3 Box-shadow"",""description"":""Method of displaying an inner or outer shadow effect to elements"",""spec"":""http://www.w3.org/TR/css3-background/#box-shadow"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/En/CSS/-moz-box-shadow"",""title"":""MDN article""},{""url"":""http://westciv.com/tools/boxshadows/index.html"",""title"":""Live editor""},{""url"":""http://tests.themasta.com/blogstuff/boxshadowdemo.html"",""title"":""Demo of various effects""},{""url"":""http://www.css3files.com/shadow/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/box-shadow"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a x #1"",""3.2"":""a x #1"",""4"":""a x #1"",""5"":""y x"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Can be partially emulated in older IE versions using the non-standard \""shadow\"" filter."",""notes_by_num"":{""1"":""Partial support in Safari, iOS Safari and Android Browser refers to missing \""inset\"", blur radius value, and multiple shadow support.""},""usage_perc_y"":91.62,""usage_perc_a"":0.05,""ucprefix"":false,""parent"":"""",""keywords"":""box-shadows,boxshadows,box shadow,shaow"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css3-colors"":{""title"":""CSS3 Colors"",""description"":""Method of describing colors using Hue, Saturation and Lightness (hsl()) rather than just RGB, as well as allowing alpha-transparency with rgba() and hsla()."",""spec"":""http://www.w3.org/TR/css3-color/"",""status"":""rec"",""links"":[{""url"":""https://dev.opera.com/articles/view/color-in-opera-10-hsl-rgb-and-alpha-transparency/"",""title"":""Dev.Opera article""},{""url"":""http://www.css3files.com/color/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/color#RGBA_Notation"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":96.45,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""rgb,hsl,rgba,hsla"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css3-boxsizing"":{""title"":""CSS3 Box-sizing"",""description"":""Method of specifying whether or not an element's borders and padding should be included in size units"",""spec"":""http://www.w3.org/TR/css3-ui/#box-sizing"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/En/CSS/Box-sizing"",""title"":""MDN article""},{""url"":""http://www.456bereastreet.com/archive/201104/controlling_width_with_css3_box-sizing/"",""title"":""Blog post""},{""url"":""https://github.com/Schepp/box-sizing-polyfill"",""title"":""Polyfill for IE""},{""url"":""http://css-tricks.com/box-sizing/"",""title"":""CSS Tricks""},{""url"":""http://docs.webplatform.org/wiki/css/properties/box-sizing"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Firefox currently also supports the `padding-box` in addition to `content-box` and `border-box`, though this value has been removed from the specification."",""notes_by_num"":{},""usage_perc_y"":97.31,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""border-box,content-box"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-mediaqueries"":{""title"":""CSS3 Media Queries"",""description"":""Method of applying styles based on media information. Includes things like page and device dimensions"",""spec"":""http://www.w3.org/TR/css3-mediaqueries/"",""status"":""rec"",""links"":[{""url"":""http://ie.microsoft.com/testdrive/HTML5/85CSS3_MediaQueries/"",""title"":""IE demo page with information""},{""url"":""http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries"",""title"":""Media Queries tutorial""},{""url"":""https://github.com/scottjehl/Respond"",""title"":""Polyfill for IE""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@media"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #1 #2"",""3.2"":""a #1 #2"",""4"":""y #1"",""5"":""y #1"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y #1"",""4.0-4.1"":""y #1"",""4.2-4.3"":""y #1"",""5.0-5.1"":""y #1"",""6.0-6.1"":""y #1"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y #1"",""2.2"":""y #1"",""2.3"":""y #1"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support nested media queries"",""2"":""Partial support refers to only acknowledging different media rules on page reload""},""usage_perc_y"":96.41,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""@media"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""multicolumn"":{""title"":""CSS3 Multiple column layout"",""description"":""Method of flowing information in multiple columns"",""spec"":""http://www.w3.org/TR/css3-multicol/"",""status"":""cr"",""links"":[{""url"":""https://dev.opera.com/articles/view/css3-multi-column-layout/"",""title"":""Dev.Opera article""},{""url"":""http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/an-introduction-to-the-css3-multiple-column-layout-module/"",""title"":""Introduction page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/column-width"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/BetleyWhitehorne/CSS3MultiColumn"",""title"":""Polyfill""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a x"",""3"":""a x"",""3.5"":""a x"",""3.6"":""a x"",""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x"",""38"":""a x"",""39"":""a x"",""40"":""a x"",""41"":""a x"",""42"":""a x"",""43"":""a x"",""44"":""a x"",""45"":""a x"",""46"":""a x"",""47"":""a x"",""48"":""a x""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x"",""38"":""a x"",""39"":""a x"",""40"":""a x"",""41"":""a x"",""42"":""a x"",""43"":""a x"",""44"":""a x"",""45"":""a x"",""46"":""a x"",""47"":""a x"",""48"":""a x"",""49"":""a x"",""50"":""a"",""51"":""a"",""52"":""a""},""safari"":{""3.1"":""a x"",""3.2"":""a x"",""4"":""a x"",""5"":""a x"",""5.1"":""a x"",""6"":""a x"",""6.1"":""a x"",""7"":""a x"",""7.1"":""a x"",""8"":""a x"",""9"":""a"",""9.1"":""a""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""a x"",""6.0-6.1"":""a x"",""7.0-7.1"":""a x"",""8"":""a x"",""8.1-8.4"":""a x"",""9.0-9.2"":""a"",""9.3"":""a""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""47"":""a x""},""bb"":{""7"":""a x"",""10"":""a x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""a x""},""and_chr"":{""49"":""a x""},""and_ff"":{""45"":""a x""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a x""}},""notes"":""Partial support refers to not supporting the `break-before`, `break-after`, `break-inside` properties. WebKit- and Blink-based browsers do have equivalent support for the non-standard `-webkit-column-break-*` properties to accomplish the same result (but only the `auto` and `always` values). Firefox does not support `break-*`."",""notes_by_num"":{},""usage_perc_y"":13.56,""usage_perc_a"":82.22,""ucprefix"":false,""parent"":"""",""keywords"":""column-count,column-width,column-gap,column-rule,column-span,column-fill"",""ie_id"":""multicolumnfullsupport"",""chrome_id"":""6526151266664448,5630943616303104"",""firefox_id"":"""",""webkit_id"":""""},""border-radius"":{""title"":""CSS3 Border-radius (rounded corners)"",""description"":""Method of making the border corners round. Covers support for the shorthand `border-radius` as well as the long-hand properties (e.g. `border-top-left-radius`)"",""spec"":""http://www.w3.org/TR/css3-background/#the-border-radius"",""status"":""cr"",""links"":[{""url"":""http://border-radius.com"",""title"":""Border-radius CSS Generator""},{""url"":""http://muddledramblings.com/table-of-css3-border-radius-compliance"",""title"":""Detailed compliance table""},{""url"":""http://www.css3files.com/border/#borderradius"",""title"":""Information page""},{""url"":""http://css3pie.com/"",""title"":""Polyfill which includes border-radius""},{""url"":""http://docs.webplatform.org/wiki/css/properties/border-radius"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y x"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y #1"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Safari 6.1 and earlier did not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128""},""usage_perc_y"":91.72,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""roundedcorners, border radius,-moz-border-radius"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""transforms2d"":{""title"":""CSS3 2D Transforms"",""description"":""Method of transforming an element including rotating, scaling, etc. Includes support for `transform` as well as `transform-origin` properties."",""spec"":""http://www.w3.org/TR/css3-2d-transforms/"",""status"":""wd"",""links"":[{""url"":""http://www.westciv.com/tools/transforms/"",""title"":""Live editor""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/transform"",""title"":""MDN article""},{""url"":""http://www.webresourcesdepot.com/cross-browser-css-transforms-csssandpaper/"",""title"":""Workaround script for IE""},{""url"":""http://www.css3files.com/transform/"",""title"":""Information page""},{""url"":""http://www.useragentman.com/IETransformsTranslator/"",""title"":""Converter for IE""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/css/transforms/transform"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y x"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y x"",""10.6"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""The scale transform can be emulated in IE < 9 using Microsoft's \""zoom\"" extension, others are (not easily) possible using the MS Matrix filter"",""notes_by_num"":{},""usage_perc_y"":91.68,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""transformation,translate,translatex,translatey,translatez,transform3d,rotation,rotate,scale,css-transforms,transform-origin,transform:rotate,transform:scale"",""ie_id"":""transforms"",""chrome_id"":""6437640580628480"",""firefox_id"":"""",""webkit_id"":""""},""use-strict"":{""title"":""ECMAScript 5 Strict Mode"",""description"":""Method of placing code in a \""strict\"" operating context."",""spec"":""http://www.ecma-international.org/ecma-262/5.1/#sec-14.1"",""status"":""other"",""links"":[{""url"":""http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/"",""title"":""Information page""},{""url"":""http://javascriptweblog.wordpress.com/2011/05/03/javascript-strict-mode/"",""title"":""Article with test suite""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""a #1"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older Safari refers to strict mode still accepting a lot of JS that should be considered invalid.""},""usage_perc_y"":90.59,""usage_perc_a"":0.2,""ucprefix"":false,""parent"":""es5"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""devicepixelratio"":{""title"":""Window.devicePixelRatio"",""description"":""Read-only property that returns the ratio of the (vertical) size of one physical pixel on the current display device to the size of one CSS pixel."",""spec"":""http://dev.w3.org/csswg/cssom-view/#dom-window-devicepixelratio"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio"",""title"":""MDN""}],""categories"":[""CSS"",""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""As the page is zoomed in the number of device pixels that one CSS pixel covers increases, and therefore the value of devicePixelRatio will also increase."",""notes_by_num"":{},""usage_perc_y"":94.69,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""device,pixel,ratio,size"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""transforms3d"":{""title"":""CSS3 3D Transforms"",""description"":""Method of transforming an element in the third dimension using the `transform` property. Includes support for the `perspective` property to set the perspective in z-space and the `backface-visibility` property to toggle display of the reverse side of a 3D-transformed element."",""spec"":""http://www.w3.org/TR/css3-3d-transforms/"",""status"":""wd"",""links"":[{""url"":""http://css3.bradshawenterprises.com/flip/"",""title"":""Multi-browser demo""},{""url"":""http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/"",""title"":""Mozilla hacks article""},{""url"":""http://thewebrocks.com/demos/3D-css-tester/"",""title"":""3D CSS Tester""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/css/transforms/transform"",""title"":""WebPlatform Docs""},{""url"":""http://desandro.github.io/3dtransforms/"",""title"":""Intro to CSS 3D transforms""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y #2"",""9.1"":""y #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE refers to not supporting [the transform-style: preserve-3d property](http://msdn.microsoft.com/en-us/library/ie/hh673529%28v=vs.85%29.aspx#the_ms_transform_style_property). This prevents nesting 3D transformed elements."",""2"":""Safari 9 is reported to still require a prefix for the related `backface-visibility` property.""},""usage_perc_y"":83.05,""usage_perc_a"":7.52,""ucprefix"":false,""parent"":"""",""keywords"":""css 3d,3dtransforms,translate3d,backface visibility,perspective,transform-origin,transform-style"",""ie_id"":""transforms,csstransformspreserve3d"",""chrome_id"":""6437640580628480"",""firefox_id"":"""",""webkit_id"":""""},""sharedworkers"":{""title"":""Shared Web Workers"",""description"":""Method of allowing multiple scripts to communicate with a single web worker."",""spec"":""https://html.spec.whatwg.org/multipage/workers.html#shared-workers-introduction"",""status"":""ls"",""links"":[{""url"":""http://www.sitepoint.com/javascript-shared-web-workers-html5/"",""title"":""Sitepoint article""},{""url"":""http://greenido.wordpress.com/2011/11/03/web-workers-part-3-out-of-3-shared-wrokers/"",""title"":""Blog post""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":49.92,""usage_perc_a"":0,""ucprefix"":false,""parent"":""webworkers"",""keywords"":""shared worker"",""ie_id"":""sharedwebworkers"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-hyphens"":{""title"":""CSS Hyphenation"",""description"":""Method of controlling when words at the end of lines should be hyphenated using the \""hyphens\"" property."",""spec"":""http://www.w3.org/TR/css3-text/#hyphenation"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/CSS/hyphens"",""title"":""MDN article""},{""url"":""http://blog.fontdeck.com/post/9037028497/hyphens"",""title"":""Blog post""},{""url"":""http://docs.webplatform.org/wiki/css/properties/hyphens"",""title"":""WebPlatform Docs""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=47083"",""title"":""Chrome bug for implementing hyphenation""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x""},""edge"":{""12"":""y x"",""13"":""y x"",""14"":""y x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x""}},""notes"":""Chrome and Android 4.0 Browser support \""-webkit-hyphens: none\"", but not the \""auto\"" property. It is [advisable to set the @lang attribute](http://blog.adrianroselli.com/2015/01/on-use-of-lang-attribute.html) on the HTML element to enable hyphenation support and improve accessibility."",""notes_by_num"":{},""usage_perc_y"":27.11,""usage_perc_a"":8.87,""ucprefix"":false,""parent"":"""",""keywords"":""hyphen,shy"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-transitions"":{""title"":""CSS3 Transitions"",""description"":""Simple method of animating certain properties of an element, with ability to define property, duration, delay and timing function. "",""spec"":""http://www.w3.org/TR/css3-transitions/"",""status"":""wd"",""links"":[{""url"":""http://www.webdesignerdepot.com/2010/01/css-transitions-101/"",""title"":""Article on usage""},{""url"":""http://www.css3files.com/transition/"",""title"":""Information page""},{""url"":""http://www.the-art-of-web.com/css/timing-function/"",""title"":""Examples on timing functions""},{""url"":""http://www.opera.com/docs/specs/presto2.12/css/transitions/"",""title"":""Animation of property types support in Opera""},{""url"":""http://docs.webplatform.org/wiki/css/properties/transition"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y x"",""10.6"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""12"":""y x"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""Support listed is for `transition` properties as well as the `transitionend` event. The prefixed name in WebKit browsers is `webkitTransitionEnd`"",""notes_by_num"":{},""usage_perc_y"":90.99,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""css transition,transitionend,transition-property,transition-duration,transition-timing-function,transition-delay"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""font-feature"":{""title"":""CSS font-feature-settings"",""description"":""Method of applying advanced typographic and language-specific font features to supported OpenType fonts."",""spec"":""http://w3.org/TR/css3-fonts/#font-rend-props"",""status"":""cr"",""links"":[{""url"":""http://ie.microsoft.com/testdrive/Graphics/opentype/"",""title"":""Demo pages (IE/Firefox only)""},{""url"":""http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/"",""title"":""Mozilla hacks article""},{""url"":""http://html5accessibility.com/"",""title"":""Detailed tables on accessability support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/font-feature-settings"",""title"":""WebPlatform Docs""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-feature-settings"",""title"":""Mozilla Developer Network""},{""url"":""https://www.microsoft.com/typography/otspec/featuretags.htm"",""title"":""OpenType layout feature tag registry""},{""url"":""http://help.typekit.com/customer/portal/articles/1789736-syntax-for-opentype-features-in-css#salt"",""title"":""Syntax for OpenType features in CSS (Adobe Typekit Help)""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""Whenever possible, font-variant shorthand property or an associated longhand property, font-variant-ligatures, font-variant-caps, font-variant-east-asian, font-variant-alternates, font-variant-numeric or font-variant-position should be used. This property is a low-level feature designed to handle special cases where no other way to enable or access an OpenType font feature exists. In particular, this CSS property shouldn't be used to enable small caps."",""notes_by_num"":{""1"":""From Gecko 2.0 (Firefox 4.0) to Gecko 14.0 (Firefox 14.0) included, Gecko supported an older syntax, slightly different from the modern one: http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/"",""2"":""Partial support in older Chrome versions refers to lacking support in Mac OS X.""},""usage_perc_y"":77.56,""usage_perc_a"":0.43,""ucprefix"":false,""parent"":"""",""keywords"":""font-feature,font-feature-settings,kern,kerning,font-variant-alternates,ligatures,font-variant-ligatures"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-animation"":{""title"":""CSS Animation"",""description"":""Complex method of animating certain properties of an element"",""spec"":""http://www.w3.org/TR/css3-animations/"",""status"":""wd"",""links"":[{""url"":""http://robertnyman.com/2010/05/06/css3-animations/"",""title"":""Blog post on usage""},{""url"":""http://www.css3files.com/animation/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/animations"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y x"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Android browser refers to buggy behavior in different scenarios.""},""usage_perc_y"":90.89,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""animations,css-animations,animation-name,animation-duration,animation-delay,animation-timing-function,@keyframes,animationstart,animationend,animationiteration,css3 animation"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-gradients"":{""title"":""CSS Gradients"",""description"":""Method of defining a linear or radial color gradient as a CSS image."",""spec"":""http://www.w3.org/TR/css3-images/"",""status"":""cr"",""links"":[{""url"":""http://www.colorzilla.com/gradient-editor/"",""title"":""Cross-browser editor""},{""url"":""http://www.css3files.com/gradient/"",""title"":""Information page""},{""url"":""http://css3pie.com/"",""title"":""Tool to emulate support in IE""},{""url"":""http://docs.webplatform.org/wiki/css/functions/linear-gradient"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x"",""5"":""a x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""a x #1"",""11.5"":""a x #1"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a x"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a x #1"",""11.5"":""a x #1"",""12"":""y x"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""Syntax used by browsers with prefixed support may be incompatible with that for proper support.\r\n\r\nSupport can be somewhat emulated in older IE versions using the non-standard \""gradient\"" filter. \r\n\r\nFirefox 10+, Opera 11.6+, Chrome 26+ and IE10+ also support the new \""to (side)\"" syntax."",""notes_by_num"":{""1"":""Partial support in Opera 11.10 and 11.50 also refers to only having support for linear gradients.""},""usage_perc_y"":90.74,""usage_perc_a"":0.25,""ucprefix"":false,""parent"":"""",""keywords"":""linear,linear-gradient,gradiant"",""ie_id"":""gradients"",""chrome_id"":""5785905063264256"",""firefox_id"":"""",""webkit_id"":""""},""css-canvas"":{""title"":""CSS Canvas Drawings"",""description"":""Method of using HTML5 Canvas as a background image. Not currently part of any specification."",""spec"":""http://webkit.org/blog/176/css-canvas-drawing/"",""status"":""unoff"",""links"":[{""url"":""http://webkit.org/blog/176/css-canvas-drawing/"",""title"":""Webkit blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""u"",""47"":""u"",""48"":""u""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""A similar effect can be achieved in Firefox 4+ using the -moz-element() background property"",""notes_by_num"":{},""usage_perc_y"":29.07,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-reflections"":{""title"":""CSS Reflections"",""description"":""Method of displaying a reflection of an element"",""spec"":""http://webkit.org/blog/182/css-reflections/"",""status"":""unoff"",""links"":[{""url"":""http://webkit.org/blog/182/css-reflections/"",""title"":""Webkit blog post""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/7930470-support-css-reflections"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Similar effect can be achieved in Firefox 4+ using the -moz-element() background property"",""notes_by_num"":{},""usage_perc_y"":64.38,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""box-reflect"",""ie_id"":"""",""chrome_id"":""5627300510957568"",""firefox_id"":"""",""webkit_id"":""""},""css-masks"":{""title"":""CSS Masks"",""description"":""Method of displaying part of an element, using a selected image as a mask"",""spec"":""http://www.w3.org/TR/css-masking-1/"",""status"":""cr"",""links"":[{""url"":""http://docs.webplatform.org/wiki/css/properties/mask"",""title"":""WebPlatform Docs""},{""url"":""http://www.html5rocks.com/en/tutorials/masking/adobe/"",""title"":""HTML5 Rocks article""},{""url"":""http://thenittygritty.co/css-masking"",""title"":""Detailed blog post""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=686281"",""title"":""Firefox implementation bug""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #2"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""a #2"",""39"":""a #2"",""40"":""a #2"",""41"":""a #2"",""42"":""a #2"",""43"":""a #2"",""44"":""a #2"",""45"":""a #2"",""46"":""a #2"",""47"":""a #2"",""48"":""a #2""},""chrome"":{""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1"",""49"":""a x #1"",""50"":""a x #1"",""51"":""a x #1"",""52"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x #1"",""5"":""a x #1"",""5.1"":""a x #1"",""6"":""a x #1"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""9.1"":""a x #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""5.0-5.1"":""a x #1"",""6.0-6.1"":""a x #1"",""7.0-7.1"":""a x #1"",""8"":""a x #1"",""8.1-8.4"":""a x #1"",""9.0-9.2"":""a x #1"",""9.3"":""a x #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""a x #1"",""4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""4.4"":""a x #1"",""4.4.3-4.4.4"":""a x #1"",""47"":""a x #1""},""bb"":{""7"":""a x #1"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a x #1""},""and_chr"":{""49"":""a x #1""},""and_ff"":{""45"":""a #2""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x #1""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in WebKit/Blink browsers refers to supporting the mask-image and mask-box-image properties, but lacking support for other parts of the spec."",""2"":""Partial support in Firefox refers to only support for inline SVG mask elements i.e. mask: url(#foo).""},""usage_perc_y"":0,""usage_perc_a"":82.16,""ucprefix"":false,""parent"":"""",""keywords"":""clip,clip-path,clip-rule,mask,mask-border,mask-clip,mask-image,mask-mode,mask-type"",""ie_id"":""masks"",""chrome_id"":""5381559662149632"",""firefox_id"":"""",""webkit_id"":""""},""console-basic"":{""title"":""Basic console logging functions"",""description"":""Method of outputting data to the browser's console, intended for development purposes."",""spec"":""https://console.spec.whatwg.org/"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Console"",""title"":""MDN article""},{""url"":""https://developer.chrome.com/devtools/docs/console-api"",""title"":""Chrome console reference""},{""url"":""https://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/Console/Console.html"",""title"":""Safari console reference""},{""url"":""https://msdn.microsoft.com/en-us/library/hh772169"",""title"":""Edge/Internet Explorer console reference""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y #3"",""7.0-7.1"":""y #3"",""8"":""y #3"",""8.1-8.4"":""y #3"",""9.0-9.2"":""y #3"",""9.3"":""y #3""},""op_mini"":{""5.0-8.0"":""y #6""},""android"":{""2.1"":""y #4"",""2.2"":""y #4"",""2.3"":""y #4"",""3"":""y #4"",""4"":""y #4"",""4.1"":""y #4"",""4.2-4.3"":""y #4"",""4.4"":""y #4"",""4.4.3-4.4.4"":""y #4"",""47"":""y #4""},""bb"":{""7"":""n #2"",""10"":""n #2""},""op_mob"":{""10"":""n"",""11"":""n #2"",""11.1"":""n #2"",""11.5"":""n #2"",""12"":""n #2"",""12.1"":""n #2"",""35"":""n #2""},""and_chr"":{""49"":""y #4""},""and_ff"":{""45"":""y #5""},""ie_mob"":{""10"":""n #2"",""11"":""n #2""},""and_uc"":{""9.9"":""n #2""}},""notes"":""The basic functions that this information refers to include `console.log`, `console.info`, `console.warn`, `console.error`."",""notes_by_num"":{""1"":""Only supports console functions when developer tools are open, otherwise the `console` object is undefined and any calls will throw errors."",""2"":""Allows `console` functions to be used without throwing errors, but does not appear to output the data anywhere."",""3"":""Log output on iOS 6+ Safari can only be seen by connecting to a Mac and using the [Safari debugger](https://developer.apple.com/safari/tools/)."",""4"":""Log output on older Android browsers can be retrieved via Android's `logcat` command or using Chrome Developer Tools in Android 4.4+/Chrome for Android [see details](http://developer.android.com/guide/webapps/debugging.html)"",""5"":""Log output on Firefox for Android can be [accessed using WebIDE](https://developer.mozilla.org/en-US/docs/Tools/Remote_Debugging/Debugging_Firefox_for_Android_with_WebIDE)"",""6"":""See [this article](https://dev.opera.com/articles/opera-mini-and-javascript/) for details on how to see console logging in Opera Mini""},""usage_perc_y"":85.93,""usage_perc_a"":1.49,""ucprefix"":false,""parent"":"""",""keywords"":""console.log,console.info,console.warn,console.error,window.console"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg"":{""title"":""SVG (basic support)"",""description"":""Method of displaying basic Vector Graphics features using the embed or object elements. Refers to the SVG 1.1 spec."",""spec"":""http://www.w3.org/TR/SVG/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"",""title"":""Wikipedia""},{""url"":""http://www.alistapart.com/articles/using-svg-for-flexible-scalable-and-fun-backgrounds-part-i"",""title"":""A List Apart article""},{""url"":""http://svg-wow.org/"",""title"":""SVG showcase site""},{""url"":""http://code.google.com/p/svgweb/"",""title"":""SVG Web: Flash-based polyfill""},{""url"":""http://svg-edit.googlecode.com"",""title"":""Web-based SVG editor""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg"",""title"":""has.js test""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #2"",""10"":""y #2"",""11"":""y #2""},""edge"":{""12"":""y #2"",""13"":""y #2"",""14"":""y #2""},""firefox"":{""2"":""a"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y #2"",""11"":""y #2""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Android 3 & 4 refers to not supporting masking."",""2"":""IE9-11 desktop & mobile don't properly scale SVG files.  [Adding height, width, viewBox, and CSS rules](http://codepen.io/tomByrer/pen/qEBbzw?editors=110) seem to be the best workaround.""},""usage_perc_y"":94.99,""usage_perc_a"":1.46,""ucprefix"":false,""parent"":"""",""keywords"":""rect,circle,ellipse,line,polyline,polygon,defs,symbol,use,tspan,tref,textpath,stroke-dasharray,stroke-dashoffset"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-css"":{""title"":""SVG in CSS backgrounds"",""description"":""Method of using SVG images as CSS backgrounds"",""spec"":""http://www.w3.org/TR/css3-background/#background-image"",""status"":""cr"",""links"":[{""url"":""http://www.sitepoint.com/a-farewell-to-css3-gradients/"",""title"":""Tutorial for advanced effects""}],""categories"":[""CSS3"",""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""a #1"",""4"":""a #1"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a #2"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in iOS Safari and older Safari versions refers to failing to support tiling or the background-position property."",""2"":""Partial support in older Firefox and Opera Mini/Mobile refers to SVG images being blurry when scaled.""},""usage_perc_y"":91.24,""usage_perc_a"":5.11,""ucprefix"":false,""parent"":"""",""keywords"":""svg-in-css,svgincss,css-svg"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-smil"":{""title"":""SVG SMIL animation"",""description"":""Method of using animation elements to animate SVG images"",""spec"":""http://www.w3.org/TR/SVG/animate.html"",""status"":""rec"",""links"":[{""url"":""http://svg-wow.org/blog/category/animation/"",""title"":""Examples on SVG WOW""},{""url"":""https://developer.mozilla.org/en/SVG/SVG_animation_with_SMIL"",""title"":""MDN article""},{""url"":""http://leunen.me/fakesmile/"",""title"":""JS library to support SMIL in SVG""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg-smil"",""title"":""has.js test""},{""url"":""https://github.com/madsgraphics/SVGEventListener"",""title"":""Polyfill for SMIL animate events on SVG""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""12"":""p"",""13"":""p"",""14"":""p""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y #2"",""46"":""y #2"",""47"":""y #2"",""48"":""y #2"",""49"":""y #2"",""50"":""y #2"",""51"":""y #2"",""52"":""y #2""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""a #1"",""5"":""a #1"",""5.1"":""a #1"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y #2"",""33"":""y #2"",""34"":""y #2"",""35"":""y #2"",""36"":""y #2"",""37"":""y #2""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older Safari versions refers to not working in HTML files or CSS background images."",""2"":""As of Chrome 45 & Opera 32 SMIL is deprecated and usage will result in a warning in the console. Support is expected to be dropped in some future version.""},""usage_perc_y"":82.11,""usage_perc_a"":0.23,""ucprefix"":false,""parent"":"""",""keywords"":""svg animation"",""ie_id"":""svgsmilanimation"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-fonts"":{""title"":""SVG fonts"",""description"":""Method of using fonts defined as SVG shapes. Removed from [SVG 2.0](http://www.w3.org/TR/SVG2/changes.html#fonts) and considered as a deprecated feature with support being removed from browsers."",""spec"":""http://www.w3.org/TR/SVG/fonts.html"",""status"":""unoff"",""links"":[{""url"":""http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different"",""title"":""Blog post""},{""url"":""http://opentype.info/blog/2010/04/13/the-ipad-and-svg-fonts-in-mobile-safari/"",""title"":""Blog post on usage for iPad""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""n #1"",""39"":""n #1"",""40"":""n #1"",""41"":""n #1"",""42"":""n #1"",""43"":""n #1"",""44"":""n #1"",""45"":""n #1"",""46"":""n #1"",""47"":""n #1"",""48"":""n #1"",""49"":""n #1"",""50"":""n #1"",""51"":""n #1"",""52"":""n #1""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""n #1"",""26"":""n #1"",""27"":""n #1"",""28"":""n #1"",""29"":""n #1"",""30"":""n #1"",""31"":""n #1"",""32"":""n #1"",""33"":""n #1"",""34"":""n #1"",""35"":""n #1"",""36"":""n #1"",""37"":""n #1""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""n""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""n #1""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Chrome 38 and newer support SVG fonts only on Windows Vista and XP."",""2"":""Supported in Opera Mini in SVG images only, not in HTML.""},""usage_perc_y"":25.2,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""5930075908210688"",""firefox_id"":"""",""webkit_id"":""""},""svg-filters"":{""title"":""SVG filters"",""description"":""Method of using photoshop-like effects on SVG objects including blurring and color manipulation."",""spec"":""http://www.w3.org/TR/SVG/filters.html"",""status"":""rec"",""links"":[{""url"":""http://electricbeach.org/?p=950"",""title"":""Experiments with filter effects""},{""url"":""http://svg-wow.org/blog/category/filters/"",""title"":""SVG filter demos""},{""url"":""http://docs.webplatform.org/wiki/svg/elements/filter"",""title"":""WebPlatform Docs""},{""url"":""http://jorgeatgu.github.io/svg-filters/"",""title"":""SVG Filter effects""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":94,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-html"":{""title"":""SVG effects for HTML"",""description"":""Method of using SVG transforms, filters, etc on HTML elements using either CSS or the foreignObject element"",""spec"":""http://www.w3.org/TR/SVG11/extend.html#ForeignObjectElement"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en/SVG/Tutorial/Other_content_in_SVG"",""title"":""MDN Tutorial""},{""url"":""https://developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content"",""title"":""MDN Reference page""},{""url"":""http://www.w3.org/TR/filter-effects/"",""title"":""Filter Effects draft""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a"",""9.1"":""a""},""opera"":{""9"":""a"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""a""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""35"":""a""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Partial support refers to lack of filter support or buggy result from effects. A [CSS Filter Effects](http://www.w3.org/TR/filter-effects/) specification is in the works that would replace this method."",""notes_by_num"":{},""usage_perc_y"":10.03,""usage_perc_a"":70.46,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""svg-html5"":{""title"":""Inline SVG in HTML5"",""description"":""Method of using SVG tags directly in HTML documents. Requires HTML5 parser."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#svg-0"",""status"":""ls"",""links"":[{""url"":""http://hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more/"",""title"":""Mozilla Hacks blog post""},{""url"":""http://samples.msdn.microsoft.com/ietestcenter/html5/svghtml_harness.htm?url=SVG_HTML_Elements_001"",""title"":""Test suite""}],""categories"":[""HTML5"",""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y #1"",""13"":""y #1"",""14"":""y #1""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y #1"",""7"":""y #1"",""7.1"":""y #1"",""8"":""y #1"",""9"":""y #1"",""9.1"":""y #1""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""y #1"",""6.0-6.1"":""y #1"",""7.0-7.1"":""y #1"",""8"":""y #1"",""8.1-8.4"":""y #1"",""9.0-9.2"":""y #1"",""9.3"":""y #1""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y #1"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support CSS transforms on SVG elements (transform attribute can be used instead)""},""usage_perc_y"":96.18,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""canvas"":{""title"":""Canvas (basic support)"",""description"":""Method of generating fast, dynamic graphics using JavaScript."",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/Canvas_tutorial"",""title"":""Tutorial by Mozilla""},{""url"":""http://www.canvasdemos.com/"",""title"":""Showcase site""},{""url"":""http://glimr.rubyforge.org/cake/canvas.html"",""title"":""Animation kit""},{""url"":""http://diveintohtml5.info/canvas.html"",""title"":""Another tutorial""},{""url"":""http://explorercanvas.googlecode.com/"",""title"":""Implementation for Internet Explorer""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas"",""title"":""has.js test""}],""categories"":[""Canvas"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a #1"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #2""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""For screen readers, IE, Chrome & Firefox support the [accessible canvas element sub-DOM](http://www.paciellogroup.com/blog/2012/06/html5-canvas-accessibility-in-firefox-13/).\r\nFirefox & Chrome also support the drawfocus ring."",""notes_by_num"":{""1"":""Does not support `toDataURL()`"",""2"":""Opera Mini supports the canvas element, but is unable to play animations or run other more complex applications.""},""usage_perc_y"":91.66,""usage_perc_a"":4.81,""ucprefix"":false,""parent"":"""",""keywords"":""toDataURL()"",""ie_id"":""canvas"",""chrome_id"":""5100084685438976"",""firefox_id"":"""",""webkit_id"":""""},""canvas-text"":{""title"":""Text API for Canvas"",""description"":""Method of displaying text on Canvas elements"",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#drawing-text-to-the-bitmap"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/Drawing_text_using_a_canvas#Additional_examples"",""title"":""Examples by Mozilla""},{""url"":""http://code.google.com/p/canvas-text/"",""title"":""Support library""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas-text"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/canvas/CanvasRenderingContext2D/fillText"",""title"":""WebPlatform Docs""}],""categories"":[""Canvas"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":91.67,""usage_perc_a"":0,""ucprefix"":false,""parent"":""canvas"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""namevalue-storage"":{""title"":""Web Storage - name/value pairs"",""description"":""Method of storing data locally like cookies, but for larger amounts of data (sessionStorage and localStorage, used to fall under HTML5)."",""spec"":""https://html.spec.whatwg.org/multipage/webstorage.html#storage"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API"",""title"":""MDN article""},{""url"":""http://code.google.com/p/sessionstorage/"",""title"":""Support library""},{""url"":""http://html5demos.com/storage"",""title"":""Simple demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-localstorage;native-sessionstorage"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/web-storage/Storage/localStorage"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":92.51,""usage_perc_a"":0.05,""ucprefix"":false,""parent"":"""",""keywords"":""webstorage,local storage"",""ie_id"":""webstorage"",""chrome_id"":""5345825534246912"",""firefox_id"":"""",""webkit_id"":""""},""sql-storage"":{""title"":""Web SQL Database"",""description"":""Method of storing data client-side, allows Sqlite database queries for access and manipulation"",""spec"":""http://www.w3.org/TR/webdatabase/"",""status"":""unoff"",""links"":[{""url"":""http://html5doctor.com/introducing-web-sql-databases/"",""title"":""HTML5 Doctor article""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-sql-db"",""title"":""has.js test""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""The Web SQL Database specification is no longer being maintained and support may be dropped in future versions."",""notes_by_num"":{},""usage_perc_y"":73.49,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""db-storage,websql"",""ie_id"":""websqldatabase"",""chrome_id"":""6330987952734208"",""firefox_id"":"""",""webkit_id"":""""},""indexeddb"":{""title"":""IndexedDB"",""description"":""Method of storing data client-side, allows indexed database queries."",""spec"":""http://www.w3.org/TR/IndexedDB/"",""status"":""rec"",""links"":[{""url"":""http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/"",""title"":""Mozilla Hacks article""},{""url"":""https://github.com/axemclion/IndexedDBShim"",""title"":""Polyfill for browsers supporting WebSQL""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-indexeddb"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/indexedDB"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""a #1"",""13"":""a #1"",""14"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""n"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""a #2"",""8"":""a #2"",""9"":""a #2"",""9.1"":""a #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9.0-9.2"":""a #2"",""9.3"":""a #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""p""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE 10 & 11 refers to a number of subfeatures [not being supported](http://codepen.io/cemerick/pen/Itymi)."",""2"":""Partial support in iOS 8 & 9 refers to [seriously buggy behavior](http://www.raymondcamden.com/2014/09/25/IndexedDB-on-iOS-8-Broken-Bad/) as well as complete lack of support in WebViews.""},""usage_perc_y"":60.87,""usage_perc_a"":18.68,""ucprefix"":false,""parent"":"""",""keywords"":""indexdb"",""ie_id"":""indexeddb"",""chrome_id"":""6507459568992256"",""firefox_id"":""indexeddb"",""webkit_id"":""specification-indexeddb""},""online-status"":{""title"":""Online/offline status"",""description"":""Events to indicate when the user's connected (`online` and `offline` events) and the `navigator.onLine` property to see current status."",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#browser-state"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine.onLine#Specification"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #2"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""a #3"",""16"":""a #3"",""17"":""a #3"",""18"":""a #3"",""19"":""a #3"",""20"":""a #3"",""21"":""a #3"",""22"":""a #3"",""23"":""a #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""a #3"",""29"":""a #3"",""30"":""a #3"",""31"":""a #3"",""32"":""a #3"",""33"":""a #3"",""34"":""a #3"",""35"":""a #3"",""36"":""a #3"",""37"":""a #3"",""38"":""a #3"",""39"":""a #3"",""40"":""a #3"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""a"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #1""}},""notes"":""\""online\"" does not always mean connection to the internet, it can also just mean connection to some network.\r\n\r\nEarly versions of Chrome and Safari always reported \""true\"" for `navigator.onLine`"",""notes_by_num"":{""0"":""Safari 7.0 supports only the event listener on `window`, and not on `document.body`"",""1"":""Seems to support `navigator.onLine` but not `online`/`offline` events."",""2"":""IE8 only supports the `online`/`offline` events on `document.body`, rather than `window`."",""3"":""Desktop Firefox responds to the status of its \""Work Offline\"" mode. If not in that mode, `navigator.onLine` is always `true`, regardless of the actual network connectivity status. [See bug](https://bugzilla.mozilla.org/show_bug.cgi?id=654579) for details.""},""usage_perc_y"":80.77,""usage_perc_a"":11.53,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""eventsource"":{""title"":""Server-sent events"",""description"":""Method of continuously sending data from a server to the browser, rather than repeatedly requesting it (EventSource interface, used to fall under HTML5)"",""spec"":""https://html.spec.whatwg.org/multipage/comms.html#server-sent-events"",""status"":""ls"",""links"":[{""url"":""http://www.html5rocks.com/tutorials/eventsource/basics/"",""title"":""HTML5 Rocks tutorial""},{""url"":""http://samshull.blogspot.com/2010/10/ajax-push-in-ios-safari-and-chrome-with.html"",""title"":""Blog post with demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-eventsource"",""title"":""has.js test""},{""url"":""https://github.com/Yaffle/EventSource"",""title"":""Polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""a"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":80.8,""usage_perc_a"":0.04,""ucprefix"":false,""parent"":"""",""keywords"":""serversent,s-sent-events"",""ie_id"":""serversenteventseventsource"",""chrome_id"":""5311740673785856"",""firefox_id"":"""",""webkit_id"":""""},""x-doc-messaging"":{""title"":""Cross-document messaging"",""description"":""Method of sending information from a page on one domain to a page on a different one (using postMessage)"",""spec"":""https://html.spec.whatwg.org/multipage/comms.html#crossDocumentMessages"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.postMessage"",""title"":""MDN article""},{""url"":""http://html5demos.com/postmessage2"",""title"":""Simple demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-crosswindowmessaging"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/web-messaging/MessagePort/postMessage"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""a #2"",""11"":""a #2""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to only working in frames/iframes (not other tabs/windows). Also, objects cannot be sent using postMessage."",""2"":""Partial support refers to [limitations in certain conditions](http://stackoverflow.com/questions/16226924/is-cross-origin-postmessage-broken-in-ie10).""},""usage_perc_y"":88.29,""usage_perc_a"":9,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""postmessage"",""chrome_id"":""4786174115708928"",""firefox_id"":"""",""webkit_id"":""""},""sni"":{""title"":""Server Name Indication"",""description"":""An extension to the TLS computer networking protocol by which a client indicates which hostname it is attempting to connect to at the start of the handshaking process."",""spec"":""https://tools.ietf.org/html/rfc6066"",""status"":""other"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Server_Name_Indication"",""title"":""Wikipedia""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Only supported on Windows Vista or above (not Windows XP)""},""usage_perc_y"":96.35,""usage_perc_a"":0.88,""ucprefix"":false,""parent"":"""",""keywords"":""sni"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""datauri"":{""title"":""Data URIs"",""description"":""Method of embedding images and other files in webpages as a string of text, generally using base64 encoding."",""spec"":""https://tools.ietf.org/html/rfc2397"",""status"":""other"",""links"":[{""url"":""http://css-tricks.com/data-uris/"",""title"":""Information page""},{""url"":""http://en.wikipedia.org/wiki/data_URI_scheme"",""title"":""Wikipedia""},{""url"":""http://www.websiteoptimization.com/speed/tweak/inline-images/"",""title"":""Data URL converter""},{""url"":""http://klevjers.com/papers/phishing.pdf"",""title"":""Information on security issues""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2""},""edge"":{""12"":""a #2"",""13"":""a #2"",""14"":""a #2""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #2"",""11"":""a #2""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Support is limited to images and linked resources like CSS files, not HTML or JS files. Max URI length is 32KB."",""2"":""Support is limited to images and linked resources like CSS or JS, not HTML files. Maximum size limit is 4GB.""},""usage_perc_y"":87.2,""usage_perc_a"":10.12,""ucprefix"":false,""parent"":"""",""keywords"":""data url,datauris,data uri,dataurl,dataurls,base64"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""wav"":{""title"":""Wav audio format"",""description"":""Waveform Audio File Format, aka WAV or WAVE, a typically uncompressed audio format. "",""spec"":""http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/WAVE/WAVE.html"",""status"":""other"",""links"":[{""url"":""https://en.wikipedia.org/wiki/WAV"",""title"":""Wikipedia article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Support refers to use using the `audio` element, not other conditions."",""notes_by_num"":{},""usage_perc_y"":83.48,""usage_perc_a"":0,""ucprefix"":false,""parent"":""audio"",""keywords"":"""",""ie_id"":""wavaudiosupport"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""mathml"":{""title"":""MathML"",""description"":""Special tags that allow mathematical formulas and notations to be written on web pages."",""spec"":""http://www.w3.org/TR/MathML/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/MathML"",""title"":""Wikipedia""},{""url"":""http://www.mozilla.org/projects/mathml/demo/"",""title"":""MathML demos""},{""url"":""http://www.mathjax.org"",""title"":""Cross-browser support script""},{""url"":""https://developer.mozilla.org/en/MathML/Element"",""title"":""MDN element reference""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""y #1"",""3"":""y #1"",""3.5"":""y #1"",""3.6"":""y #1"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""y"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""p"",""48"":""p"",""49"":""p"",""50"":""p"",""51"":""p"",""52"":""p""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""47"":""p""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""p""},""and_chr"":{""49"":""p""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a""}},""notes"":""Opera's support is limited to a CSS profile of MathML. Support was added in Chrome 24, but removed afterwards due to instability."",""notes_by_num"":{""1"":""Before version 4, Firefox only supports the XHTML notation""},""usage_perc_y"":19.42,""usage_perc_a"":9.11,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""mathml"",""chrome_id"":""5240822173794304"",""firefox_id"":"""",""webkit_id"":""""},""css-featurequeries"":{""title"":""CSS Feature Queries"",""description"":""CSS Feature Queries allow authors to condition rules based on whether particular property declarations are supported in CSS using the @supports at rule."",""spec"":""http://www.w3.org/TR/css3-conditional/#at-supports"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/@supports"",""title"":""MDN Article""},{""url"":""http://mcc.id.au/blog/2012/08/supports"",""title"":""@supports in Firefox""},{""url"":""http://dabblet.com/gist/3895764"",""title"":""Test case""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@supports"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""See also the [CSS.supports() DOM API](#feat=css-supports-api)"",""notes_by_num"":{},""usage_perc_y"":70.34,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""supports,conditional"",""ie_id"":""conditionalrules"",""chrome_id"":""4993981813358592"",""firefox_id"":"""",""webkit_id"":""""},""xhtml"":{""title"":""XHTML served as application/xhtml+xml"",""description"":""A strict form of HTML, and allows embedding of other XML languages"",""spec"":""https://html.spec.whatwg.org/multipage/xhtml.html#parsing-xhtml-documents"",""status"":""ls"",""links"":[{""url"":""http://en.wikipedia.org/wiki/XHTML"",""title"":""Wikipedia""},{""url"":""http://www.xmlplease.com/xhtml/xhtml5polyglot/"",""title"":""Information on XHTML5""},{""url"":""http://docs.webplatform.org/wiki/concepts/internet_and_web/the_web_standards_model#What_is_XHTML.3F"",""title"":""WebPlatform Docs""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""The XHTML syntax is very close to HTML, and thus is almost always ([incorrectly](https://developer.mozilla.org/en-US/docs/XHTML#MIME_type_versus_DOCTYPE)) served as text/html on the web."",""notes_by_num"":{},""usage_perc_y"":96.48,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""xhtml+xml"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""xhtmlsmil"":{""title"":""XHTML+SMIL animation"",""description"":""Method of using SMIL animation in web pages"",""spec"":""http://www.w3.org/TR/XHTMLplusSMIL/"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/XHTML%2BSMIL"",""title"":""Wikipedia""},{""url"":""http://leunen.me/fakesmile/"",""title"":""JS library to support XHTML+SMIL""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""p"",""48"":""p""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""p"",""48"":""p"",""49"":""p"",""50"":""p"",""51"":""p"",""52"":""p""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p"",""9.1"":""p""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9.0-9.2"":""p"",""9.3"":""p""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""47"":""p""},""bb"":{""7"":""p"",""10"":""p""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""p""},""and_chr"":{""49"":""p""},""and_ff"":{""45"":""p""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""p""}},""notes"":""Internet Explorer supports the W3C proposal HTML+TIME, which is largely the same as XHTML+SMIL"",""notes_by_num"":{},""usage_perc_y"":0,""usage_perc_a"":0.92,""ucprefix"":false,""parent"":""xhtml"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""wai-aria"":{""title"":""WAI-ARIA Accessibility features"",""description"":""Method of providing ways for people with disabilities to use dynamic web content and web applications."",""spec"":""http://www.w3.org/TR/wai-aria/"",""status"":""rec"",""links"":[{""url"":""http://www.w3.org/WAI/intro/aria"",""title"":""Information page""},{""url"":""http://www.paciellogroup.com/blog/2011/10/browser-assistive-technology-tests-redux/"",""title"":""Links to various test results""},{""url"":""http://en.wikipedia.org/wiki/WAI-ARIA"",""title"":""Wikipedia""},{""url"":""http://www.alistapart.com/articles/the-accessibility-of-wai-aria/"",""title"":""ALA Article""},{""url"":""http://zufelt.ca/blog/are-you-confused-html5-and-wai-aria-yet"",""title"":""HTML5/WAI-ARIA information""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""12"":""a"",""13"":""a"",""14"":""a""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""a"",""3.6"":""a"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a"",""9.1"":""a""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""a""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""35"":""a""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""n""}},""notes"":""Support for ARIA is rather complex and currently is not fully supported in any browser. For detailed information on partial support see the [ARIA 1.0 Implementation Report](http://www.w3.org/WAI/ARIA/1.0/CR/implementation-report)\r\n"",""notes_by_num"":{},""usage_perc_y"":0,""usage_perc_a"":86.87,""ucprefix"":false,""parent"":"""",""keywords"":""wai,aria"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""geolocation"":{""title"":""Geolocation"",""description"":""Method of informing a website of the user's geographical location"",""spec"":""http://www.w3.org/TR/geolocation-API/"",""status"":""rec"",""links"":[{""url"":""http://html5demos.com/geo"",""title"":""Simple demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-geolocation"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/geolocation"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""n"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":91.62,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""geolocation"",""chrome_id"":""6348855016685568"",""firefox_id"":"""",""webkit_id"":""""},""flexbox"":{""title"":""Flexible Box Layout Module"",""description"":""Method of positioning elements in horizontal or vertical stacks. Support includes the support for the all properties prefixed with `flex` as well as `display: flex`, `display: inline-flex`, `align-content`, `align-items`, `align-self`, `justify-content` and `order`."",""spec"":""http://www.w3.org/TR/css3-flexbox/"",""status"":""cr"",""links"":[{""url"":""http://bennettfeely.com/flexplorer/"",""title"":""Flexbox CSS generator""},{""url"":""http://www.adobe.com/devnet/html5/articles/working-with-flexbox-the-new-spec.html"",""title"":""Article on using the latest spec""},{""url"":""https://dev.opera.com/articles/view/advanced-cross-browser-flexbox/"",""title"":""Tutorial on cross-browser support""},{""url"":""http://philipwalton.github.io/solved-by-flexbox/"",""title"":""Examples on how to solve common layout problems with flexbox""},{""url"":""http://css-tricks.com/snippets/css/a-guide-to-flexbox/"",""title"":""A Complete Guide to Flexbox""},{""url"":""http://the-echoplex.net/flexyboxes/"",""title"":""Flexbox playground and code generator""},{""url"":""https://github.com/philipwalton/flexbugs"",""title"":""Flexbugs: Repo for flexbox bugs""},{""url"":""https://github.com/10up/flexibility/"",""title"":""10up Open Sources IE 8 and 9 Support for Flexbox""},{""url"":""https://github.com/vadimyer/ecligrid"",""title"":""Ecligrid - Mobile first flexbox grid system""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #2 #4"",""11"":""a #4""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a x #1"",""3"":""a x #1"",""3.5"":""a x #1"",""3.6"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a #3"",""23"":""a #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a x #1"",""3.2"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""5.1"":""a x #1"",""6"":""a x #1"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""5.0-5.1"":""a x #1"",""6.0-6.1"":""a x #1"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""a x #1"",""4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a x #1"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a x #2"",""11"":""y""},""and_uc"":{""9.9"":""a x #1""}},""notes"":""Most partial support refers to supporting an [older version](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/) of the specification or an [older syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)."",""notes_by_num"":{""1"":""Only supports the [old flexbox](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723) specification and does not support wrapping."",""2"":""Only supports the [2012 syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)"",""3"":""Does not support flex-wrap or flex-flow properties"",""4"":""Partial support is due to large amount of bugs present (see known issues)""},""usage_perc_y"":77.48,""usage_perc_a"":18.25,""ucprefix"":false,""parent"":"""",""keywords"":""flex-box,flex-direction,flex-wrap,flex-flow,flex-grow,flex-basis,display:flex,flex box"",""ie_id"":""flexbox"",""chrome_id"":""4837301406400512"",""firefox_id"":"""",""webkit_id"":""""},""webgl"":{""title"":""WebGL - 3D Canvas graphics"",""description"":""Method of generating dynamic 3D graphics using JavaScript, accelerated through hardware"",""spec"":""https://www.khronos.org/registry/webgl/specs/1.0/"",""status"":""other"",""links"":[{""url"":""http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation"",""title"":""Instructions on enabling WebGL""},{""url"":""http://www.khronos.org/webgl/wiki/Tutorial"",""title"":""Tutorial""},{""url"":""http://hacks.mozilla.org/2009/12/webgl-draft-released-today/"",""title"":""Firefox blog post""},{""url"":""http://webkit.org/blog/603/webgl-now-available-in-webkit-nightlies/"",""title"":""Webkit blog post""},{""url"":""https://github.com/iewebgl/iewebgl"",""title"":""Polyfill for IE""}],""categories"":[""Canvas""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""y #1""},""edge"":{""12"":""y #1"",""13"":""y #1"",""14"":""y #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""a #1"",""12.1"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""a""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""a"",""12.1"":""a"",""35"":""y""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""a""},""ie_mob"":{""10"":""p"",""11"":""y #1""},""and_uc"":{""9.9"":""y #1""}},""notes"":""Support listed as \""partial\"" refers to the fact that not all users with these browsers have WebGL access. This is due to the additional requirement for users to have [up to date video drivers](http://www.khronos.org/webgl/wiki/BlacklistsAndWhitelists). This problem was [solved in Chrome on Windows](http://blog.chromium.org/2012/02/gpu-accelerating-2d-canvas-and-enabling.html) as of version 18.\r\n\r\nNote that WebGL is part of the [Khronos Group](http://www.khronos.org/webgl/), not the W3C."",""notes_by_num"":{""1"":""WebGL context is accessed from \""experimental-webgl\"" rather than \""webgl\""""},""usage_perc_y"":57.52,""usage_perc_a"":27.92,""ucprefix"":false,""parent"":""canvas"",""keywords"":""web gl"",""ie_id"":""webglcanvas3d,webglinstancingextension"",""chrome_id"":""6049512976023552"",""firefox_id"":""webgl-1"",""webkit_id"":""specification-webgl-1""},""fileapi"":{""title"":""File API"",""description"":""Method of manipulating file objects in web applications client-side, as well as programmatically selecting them and accessing their data."",""spec"":""http://www.w3.org/TR/FileAPI/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/Using_files_from_web_applications"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/apis/file"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/moxiecode/moxie"",""title"":""Polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #2"",""11"":""a #2""},""edge"":{""12"":""a #2"",""13"":""a #2"",""14"":""a #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""a #1 #2"",""7"":""a #1 #2"",""8"":""a #1 #2"",""9"":""a #1 #2"",""10"":""a #1 #2"",""11"":""a #1 #2"",""12"":""a #1 #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #1 #2"",""6"":""a #2"",""6.1"":""a #2"",""7"":""a #2"",""7.1"":""a #2"",""8"":""a #2"",""9"":""a #2"",""9.1"":""a #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""a #2"",""11.5"":""a #2"",""11.6"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""a #2"",""7.0-7.1"":""a #2"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9.0-9.2"":""a #2"",""9.3"":""a #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1 #2"",""4"":""a #1 #2"",""4.1"":""a #1 #2"",""4.2-4.3"":""a #1 #2"",""4.4"":""a #2"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1 #2"",""10"":""a #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""a #2""},""and_uc"":{""9.9"":""a #2""}},""notes"":"""",""notes_by_num"":{""1"":""Does not have `FileReader` support. "",""2"":""Does not support the `File` constructor""},""usage_perc_y"":57.66,""usage_perc_a"":33.05,""ucprefix"":false,""parent"":"""",""keywords"":""FileReader"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""shadowdom"":{""title"":""Shadow DOM"",""description"":""Method of establishing and maintaining functional boundaries between DOM trees and how these trees interact with each other within a document, thus enabling better functional encapsulation within the DOM."",""spec"":""http://www.w3.org/TR/shadow-dom/"",""status"":""wd"",""links"":[{""url"":""http://html5-demos.appspot.com/static/shadowdom-visualizer/index.html"",""title"":""Shadow DOM Visualizer""},{""url"":""http://www.html5rocks.com/tutorials/webcomponents/shadowdom/"",""title"":""HTML5Rocks - Shadow DOM 101 article""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=148695"",""title"":""Safari implementation bug""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1205323"",""title"":""Firefox implementation bug""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1"",""43"":""n d #1"",""44"":""n d #1"",""45"":""n d #1"",""46"":""n d #1"",""47"":""n d #1"",""48"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Supported in current WebKit nightly, so may appear in an upcoming Safari version."",""notes_by_num"":{""1"":""Supported in Firefox behind the `dom.webcomponents.enabled` flag.""},""usage_perc_y"":52.02,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web components"",""ie_id"":""shadowdom"",""chrome_id"":""4507242028072960"",""firefox_id"":""shadow-dom"",""webkit_id"":""feature-shadow-dom""},""websockets"":{""title"":""Web Sockets"",""description"":""Bidirectional communication technology for web apps"",""spec"":""https://html.spec.whatwg.org/multipage/comms.html#network"",""status"":""ls"",""links"":[{""url"":""http://websocket.org/aboutwebsocket.html"",""title"":""WebSockets information""},{""url"":""http://updates.html5rocks.com/2011/08/What-s-different-in-the-new-WebSocket-protocol"",""title"":""Details on newer protocol""},{""url"":""http://en.wikipedia.org/wiki/WebSocket"",""title"":""Wikipedia""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-websockets"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/websocket"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #1"",""5"":""a #1"",""6"":""a x #2"",""7"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""10"":""a x #2"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #2"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #2"",""6.1"":""a #2"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1"",""12"":""a #1"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y #1"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""a #1"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Reported to be supported in some Android 4.x browsers, including Sony Xperia S, Sony TX and HTC."",""notes_by_num"":{""1"":""Partial support refers to the websockets implementation using an older version of the protocol and/or the implementation being disabled by default (due to security issues with the older protocol)."",""2"":""Partial support refers to lacking support for binary data.""},""usage_perc_y"":88.89,""usage_perc_a"":0.58,""ucprefix"":true,""parent"":"""",""keywords"":"""",""ie_id"":""websocket"",""chrome_id"":""6555138000945152"",""firefox_id"":""websocket"",""webkit_id"":""""},""hidden"":{""title"":""hidden attribute"",""description"":""The `hidden` attribute may be applied to any element, and effectively hides elements similar to `display: none` in CSS."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute"",""status"":""ls"",""links"":[{""url"":""http://davidwalsh.name/html5-hidden"",""title"":""Article on hidden attribute""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""The hidden state can be easily overridden with a CSS `display` property set to anything other than `none`."",""notes_by_num"":{},""usage_perc_y"":94.68,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""script-async"":{""title"":""async attribute for external scripts"",""description"":""The boolean async attribute on script elements allows the external JavaScript file to run when it's available, without delaying page load first."",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#attr-script-async"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/HTML/Element/script#Attributes"",""title"":""MDN article""},{""url"":""http://ie.microsoft.com/testdrive/Performance/AsyncScripts/Default.html"",""title"":""Demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-async"",""title"":""has.js test""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Using script.async = false; to maintain execution order for dynamically-added scripts isn't supported in Safari 5.0""},""usage_perc_y"":90.65,""usage_perc_a"":0.07,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""mediasource"":{""title"":""Media Source Extensions"",""description"":""API allowing media data to be accessed from HTML `video` and `audio` elements."",""spec"":""http://www.w3.org/TR/media-source/"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/MediaSource#Browser_compatibility"",""title"":""MDN article""},{""url"":""https://msdn.microsoft.com/en-us/library/dn594470%28v=vs.85%29.aspx"",""title"":""MSDN article""},{""url"":""http://html5-demos.appspot.com/static/media-source.html"",""title"":""MediaSource demo""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a #2""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n d"",""18"":""n d"",""19"":""n d"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Requires the `media.mediasource.enabled` flag to be enabled, support is limited to a whitelist including the YouTube, Netflix, and Dailymotion websites"",""2"":""Partial support in IE11 refers to only working in Windows 8+""},""usage_perc_y"":61.28,""usage_perc_a"":6.07,""ucprefix"":false,""parent"":"""",""keywords"":""sourcebuffer,endofstream,mse"",""ie_id"":""mediasourceextensions"",""chrome_id"":""4563797888991232"",""firefox_id"":""mse"",""webkit_id"":""""},""cors"":{""title"":""Cross-Origin Resource Sharing"",""description"":""Method of performing XMLHttpRequests across domains"",""spec"":""https://fetch.spec.whatwg.org/#http-cors-protocol"",""status"":""ls"",""links"":[{""url"":""http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/"",""title"":""Mozilla Hacks blog post""},{""url"":""http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx"",""title"":""Alternative implementation by IE8""},{""url"":""https://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/"",""title"":""DOM access using CORS""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-cors-xhr"",""title"":""has.js test""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #2"",""9"":""a #2"",""10"":""a #1"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a #1 #3"",""5"":""a #1 #3"",""5.1"":""a #1 #3"",""6"":""y #3"",""6.1"":""y #3"",""7"":""y #3"",""7.1"":""y #3"",""8"":""y #3"",""9"":""y #3"",""9.1"":""y #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a #1 #3"",""4.0-4.1"":""a #1 #3"",""4.2-4.3"":""a #1 #3"",""5.0-5.1"":""a #1 #3"",""6.0-6.1"":""y #3"",""7.0-7.1"":""y #3"",""8"":""y #3"",""8.1-8.4"":""y #3"",""9.0-9.2"":""y #3"",""9.3"":""y #3""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support CORS for images in `<canvas>`"",""2"":""Supported somewhat in IE8 and IE9 using the XDomainRequest object (but has [limitations](http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx))"",""3"":""Does not support CORS for `<video>` in `<canvas>`: https://bugs.webkit.org/show_bug.cgi?id=135379""},""usage_perc_y"":88.29,""usage_perc_a"":4.16,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-backdrop-filter"":{""title"":""CSS Backdrop Filter"",""description"":""Method of applying filter effects (like blur, grayscale or hue) to content/elements below the target element."",""spec"":""http://dev.w3.org/fxtf/filters-2/#BackdropFilterProperty"",""status"":""unoff"",""links"":[{""url"":""http://product.voxmedia.com/til/2015/2/17/8053347/css-ios-transparency-with-webkit-backdrop-filter"",""title"":""Blog post""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter"",""title"":""Mozilla Developer Network""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/9160189-backdrop-filters"",""title"":""Edge feature request""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n d #1"",""48"":""n d #1"",""49"":""n d #1"",""50"":""n d #1"",""51"":""n d #1"",""52"":""n d #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled via the \""Experimental Web Platform Features\"" flag""},""usage_perc_y"":8.53,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""blue,hue-rotate,invert,saturate,filter"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""feature-filter-effects-backdrop-filter-propery""},""calc"":{""title"":""calc() as CSS unit value"",""description"":""Method of allowing calculated values for length units, i.e. `width: calc(100% - 3em)`"",""spec"":""http://www.w3.org/TR/css3-values/#calc"",""status"":""cr"",""links"":[{""url"":""http://hacks.mozilla.org/2010/06/css3-calc/"",""title"":""Mozilla Hacks article""},{""url"":""https://developer.mozilla.org/en/docs/Web/CSS/calc"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/css/functions/calc"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #2"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a #1"",""4.4.3-4.4.4"":""a #1"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""Support can be somewhat emulated in older versions of IE using the non-standard `expression()` syntax.\r\n\r\nDue to the way browsers handle [sub-pixel rounding](http://ejohn.org/blog/sub-pixel-problems-in-css/) differently, layouts using `calc()` expressions may have unexpected results."",""notes_by_num"":{""1"":""Partial support in Android Browser 4.4 refers to the browser lacking the ability to multiply and divide values."",""2"":""Partial support in IE9 refers to the browser crashing when used as a `background-position` value.""},""usage_perc_y"":77.24,""usage_perc_a"":3.36,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""csscalc"",""chrome_id"":""5765241438732288"",""firefox_id"":"""",""webkit_id"":""""},""dom-range"":{""title"":""Document Object Model Range"",""description"":""A contiguous range of content in a Document, DocumentFragment or Attr"",""spec"":""https://dom.spec.whatwg.org/#ranges"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Range"",""title"":""MDN""},{""url"":""http://www.quirksmode.org/dom/range_intro.html"",""title"":""QuirksMode""},{""url"":""https://github.com/timdown/rangy"",""title"":""\""Rangy\"" Range library with old IE support""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Range) for feature support details"",""notes_by_num"":{},""usage_perc_y"":96.48,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""DOM,range,selection"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""ruby"":{""title"":""Ruby annotation"",""description"":""Method of adding pronunciation or other annotations using ruby elements (primarily used in East Asian typography)."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#the-ruby-element"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/ruby-rt-rp-element/"",""title"":""HTML5 Doctor article""},{""url"":""http://docs.webplatform.org/wiki/html/elements/ruby"",""title"":""WebPlatform Docs""},{""url"":""https://addons.mozilla.org/firefox/addon/1935/"",""title"":""Add-on \""XHTML Ruby Support\"" for Firefox""},{""url"":""https://addons.mozilla.org/firefox/addon/6812/"",""title"":""Addon \""HTML Ruby\"" for Firefox support""},{""url"":""http://www.w3.org/TR/css-ruby-1/"",""title"":""CSS specification""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""12"":""a"",""13"":""a"",""14"":""a""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a"",""9.1"":""a""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""a""},""bb"":{""7"":""p"",""10"":""a""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""a""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":""Browsers without native support can still simulate support using CSS. Partial support refers to only supporting basic ruby, may still be missing writing-mode, Complex ruby and CSS3 Ruby."",""notes_by_num"":{""1"":""IE9+ supports [properties](https://msdn.microsoft.com/en-us/library/hh772055%28v=vs.85%29.aspx) of an older version of the CSS Ruby specification.""},""usage_perc_y"":7.75,""usage_perc_a"":83.32,""ucprefix"":false,""parent"":"""",""keywords"":""ruby-base,ruby-text,ruby-position,ruby-merge,ruby-align"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-opacity"":{""title"":""CSS3 Opacity"",""description"":""Method of setting the transparency level of an element"",""spec"":""http://www.w3.org/TR/css3-color/"",""status"":""rec"",""links"":[{""url"":""http://www.css3files.com/color/#opacity"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/opacity"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Transparency for elements in IE8 and older can be achieved using the proprietary \""filter\"" property and does not work well with PNG images using alpha transparency."",""notes_by_num"":{},""usage_perc_y"":96.48,""usage_perc_a"":0.93,""ucprefix"":false,""parent"":"""",""keywords"":""transparent,transparency,alpha"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""form-validation"":{""title"":""Form validation"",""description"":""Method of setting required fields and field types without requiring JavaScript. This includes preventing forms from being submitted when appropriate, the `checkValidity()` method as well as support for the `:invalid`, `:valid`, and `:required` CSS pseudo-classes."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#client-side-form-validation"",""status"":""ls"",""links"":[{""url"":""http://docs.webplatform.org/wiki/html/attributes/required"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1"",""9.1"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1""},""op_mini"":{""5.0-8.0"":""a #3""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""a #1"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #2"",""11"":""a #2""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to lack of notice when form with required fields is attempted to be submitted."",""2"":""Partial support in IE10 mobile refers to lack of warning when blocking submission."",""3"":""Partial support in Opera Mini refers to only supporting the CSS pseudo classes.""},""usage_perc_y"":76.29,""usage_perc_a"":19.34,""ucprefix"":false,""parent"":""forms"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""6091813840486400"",""firefox_id"":"""",""webkit_id"":""""},""history"":{""title"":""Session history management"",""description"":""Method of manipulating the user's browser's session history in JavaScript using `history.pushState`, `history.replaceState` and the `popstate` event."",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#dom-history-pushstate"",""status"":""ls"",""links"":[{""url"":""http://www.adequatelygood.com/2010/7/Saner-HTML5-History-Management"",""title"":""Introduction to history management""},{""url"":""https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history"",""title"":""MDN article""},{""url"":""http://html5demos.com/history"",""title"":""Demo page""},{""url"":""https://github.com/browserstate/history.js"",""title"":""History.js polyfill""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-history-state"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/dom/History"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a"",""5.1"":""a"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a""}},""notes"":""Older iOS versions and Android 4.0.4 claim support, but implementation is too buggy to be useful."",""notes_by_num"":{},""usage_perc_y"":81.26,""usage_perc_a"":9.07,""ucprefix"":false,""parent"":"""",""keywords"":""onpushstate,onreplacestate"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""json"":{""title"":""JSON parsing"",""description"":""Method of converting JavaScript objects to JSON strings and JSON back to objects using JSON.stringify() and JSON.parse()"",""spec"":""http://www.ecma-international.org/ecma-262/5.1/#sec-15.12"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/En/Using_native_JSON"",""title"":""MDN article""},{""url"":""http://www.json.org/js.html"",""title"":""JSON in JS (includes script w/support)""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/json.js#json"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/json"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Requires document to be in IE8+ [standards mode](http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx) to work in IE8.""},""usage_perc_y"":97.24,""usage_perc_a"":0,""ucprefix"":false,""parent"":""es5"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""classlist"":{""title"":""classList (DOMTokenList)"",""description"":""Method of easily manipulating classes on elements, using the DOMTokenList object."",""spec"":""https://dom.spec.whatwg.org/#dom-element-classlist"",""status"":""ls"",""links"":[{""url"":""http://hacks.mozilla.org/2010/01/classlist-in-firefox-3-6/"",""title"":""Mozilla Hacks article""},{""url"":""https://github.com/eligrey/classList.js"",""title"":""Polyfill script""},{""url"":""http://docs.webplatform.org/wiki/dom/Element/classList"",""title"":""WebPlatform Docs""},{""url"":""http://www.sitepoint.com/exploring-classlist-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/classlist-api-demo.html"",""title"":""Demo using classList""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Element.classList"",""title"":""MDN article""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""a #1 #2 #3"",""11"":""a #1 #2 #3""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""a #2 #3"",""4"":""a #2 #3"",""5"":""a #2 #3"",""6"":""a #2 #3"",""7"":""a #2 #3"",""8"":""a #2 #3"",""9"":""a #2 #3"",""10"":""a #2 #3"",""11"":""a #2 #3"",""12"":""a #2 #3"",""13"":""a #2 #3"",""14"":""a #2 #3"",""15"":""a #2 #3"",""16"":""a #2 #3"",""17"":""a #2 #3"",""18"":""a #2 #3"",""19"":""a #2 #3"",""20"":""a #2 #3"",""21"":""a #2 #3"",""22"":""a #2 #3"",""23"":""a #2 #3"",""24"":""a #3"",""25"":""a #3"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""10"":""a #1 #2 #3"",""11"":""a #1 #2 #3"",""12"":""a #1 #2 #3"",""13"":""a #1 #2 #3"",""14"":""a #1 #2 #3"",""15"":""a #1 #2 #3"",""16"":""a #1 #2 #3"",""17"":""a #1 #2 #3"",""18"":""a #1 #2 #3"",""19"":""a #1 #2 #3"",""20"":""a #1 #2 #3"",""21"":""a #1 #2 #3"",""22"":""a #1 #2 #3"",""23"":""a #2 #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""6.1"":""a #1 #2 #3"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""a #1 #2 #3"",""11.6"":""a #1 #2 #3"",""12"":""a #1 #2 #3"",""12.1"":""a #1 #2 #3"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""a #1 #2 #3"",""6.0-6.1"":""a #1 #2 #3"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""4.1"":""a #1 #2 #3"",""4.2-4.3"":""a #1 #2 #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1 #2 #3"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""a #1 #2 #3"",""11.5"":""a #1 #2 #3"",""12"":""a #1 #2 #3"",""12.1"":""a #1 #2 #3"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1 #2 #3"",""11"":""a #1 #2 #3""},""and_uc"":{""9.9"":""a #1 #2 #3""}},""notes"":"""",""notes_by_num"":{""1"":""Does not have support for `classList` on SVG or MathML elements."",""2"":""Does not support the second parameter for the `toggle` method"",""3"":""Does not support multiple parameters for the `add()` & `remove()` methods""},""usage_perc_y"":71.72,""usage_perc_a"":19.12,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""text-overflow"":{""title"":""CSS3 Text-overflow"",""description"":""Append ellipsis when text overflows its containing element"",""spec"":""http://www.w3.org/TR/css3-ui/#text-overflow"",""status"":""cr"",""links"":[{""url"":""https://github.com/rmorse/AutoEllipsis"",""title"":""jQuery polyfill for Firefox""},{""url"":""https://developer.mozilla.org/En/CSS/Text-overflow"",""title"":""MDN article""},{""url"":""http://www.css3files.com/text/"",""title"":""Information page""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-text-overflow"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/css/properties/text-overflow"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y x"",""9.5-9.6"":""y x"",""10.0-10.1"":""y x"",""10.5"":""y x"",""10.6"":""y x"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""12"":""y x"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":97.27,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""textoverflow,ellipsis"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""webm"":{""title"":""WebM video format"",""description"":""Multimedia format designed to provide a royalty-free, high-quality open video compression format for use with HTML5 video. WebM supports the video codec VP8 and VP9."",""spec"":""http://www.webmproject.org/"",""status"":""other"",""links"":[{""url"":""https://tools.google.com/dlpage/webmmf"",""title"":""Codec for IE9 support""},{""url"":""http://www.broken-links.com/2010/09/01/playing-webm-in-safari-with-plugins/"",""title"":""Info on supporting WebM in Safari""},{""url"":""http://webmproject.org"",""title"":""Official website""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/video.js#video-webm"",""title"":""has.js test""},{""url"":""http://perian.org/"",""title"":""Perian :Mac OSX Webm Codec install""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""12"":""p"",""13"":""p"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p"",""9.1"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""a"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""a""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":""Will work in IE9+ and Safari/MacOSX provided the user has the WebM codecs installed. Partial support indicates that at least one codec is supported but not all."",""notes_by_num"":{},""usage_perc_y"":66.58,""usage_perc_a"":5.14,""ucprefix"":false,""parent"":""video"",""keywords"":""matroska"",""ie_id"":""webmcontainer,vp9videoplayback"",""chrome_id"":""6362186595172352"",""firefox_id"":"""",""webkit_id"":""""},""mpeg4"":{""title"":""MPEG-4/H.264 video format"",""description"":""Commonly used video compression format."",""spec"":""http://ip.hhi.de/imagecom_G1/assets/pdfs/csvt_overview_0305.pdf"",""status"":""other"",""links"":[{""url"":""http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC"",""title"":""Wikipedia article""},{""url"":""http://www.interoperabilitybridges.com/html5-extension-for-wmp-plugin"",""title"":""Firefox extension allowing support in Win7""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a #1"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""a #2""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a""}},""notes"":""Firefox supports H.264 on Windows 7 and later since version 21. Firefox supports H.264 on Linux since version 26 if the appropriate gstreamer plug-ins are installed.\r\n\r\nPartial support for older Firefox versions refers to the lack of support in OS X & some non-Android Linux platforms."",""notes_by_num"":{""1"":""The Android 2.3 browser requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to play videos."",""2"":""Partial supports refers to the lack of hardware acceleration.""},""usage_perc_y"":80.06,""usage_perc_a"":11.03,""ucprefix"":false,""parent"":""video"",""keywords"":""avc,mp4,mpv,mov,aac,h264"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""ogv"":{""title"":""Ogg/Theora video format"",""description"":""Free lossy video compression format."",""spec"":""http://theora.org/doc/"",""status"":""other"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Theora"",""title"":""Wikipedia article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""12"":""p"",""13"":""p"",""14"":""p""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":50.14,""usage_perc_a"":0,""ucprefix"":false,""parent"":""video"",""keywords"":""xiph"",""ie_id"":""theoravideocodec,oggcontainer"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""wordwrap"":{""title"":""CSS3 Overflow-wrap"",""description"":""Allows lines to be broken within words if an otherwise unbreakable string is too long to fit. Currently mostly supported using the `word-wrap` property."",""spec"":""http://www.w3.org/TR/css3-text/#overflow-wrap"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/En/CSS/Word-wrap"",""title"":""MDN article""},{""url"":""http://www.css3files.com/text/#wordwrap"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/word-wrap"",""title"":""WebPlatform Docs""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=955857"",""title"":""Bug on Firefox support""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6524680-update-word-wrap-to-overflow-wrap"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""12"":""a"",""13"":""a"",""14"":""a""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a"",""3.6"":""a"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":""Partial support refers to requiring the legacy name \""word-wrap\"" (rather than \""overflow-wrap\"") to work."",""notes_by_num"":{},""usage_perc_y"":62.5,""usage_perc_a"":34.84,""ucprefix"":false,""parent"":"""",""keywords"":""wordwrap,word-wrap"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""pointerlock"":{""title"":""PointerLock API"",""description"":""API that provides access to raw mouse movement data. This is done by ignoring boundaries resulting from screen edges where the cursor can't go beyond, providing proper control for first person or real time strategy games. "",""spec"":""https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API"",""title"":""MDN article""},{""url"":""http://mdn.github.io/pointer-lock-demo"",""title"":""Simple demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n d"",""17"":""n d"",""18"":""n d"",""19"":""n d"",""20"":""n d"",""21"":""n d"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":41.5,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""mouselock,pointer lock,mouse lock,requestPointerLock,pointerLockElement,exitPointerLock,movementX,movementY"",""ie_id"":""pointerlockmouselock"",""chrome_id"":""6753200417800192"",""firefox_id"":""pointerlock"",""webkit_id"":""""},""object-fit"":{""title"":""CSS3 object-fit/object-position"",""description"":""Method of specifying how an object (image or video) should fit inside its box. object-fit options include \""contain\"" (fit according to aspect ratio), \""fill\"" (stretches object to fill) and \""cover\"" (overflows box but maintains ratio), where object-position allows the object to be repositioned like background-image does."",""spec"":""http://www.w3.org/TR/css3-images/"",""status"":""cr"",""links"":[{""url"":""https://dev.opera.com/articles/view/css3-object-fit-object-position/"",""title"":""Dev.Opera article""},{""url"":""http://docs.webplatform.org/wiki/css/properties/object-fit"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/anselmh/object-fit"",""title"":""object-fit JavaScript-Polyfill""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1"",""9.1"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y x"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1""},""op_mini"":{""5.0-8.0"":""y x""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""12"":""y x"",""12.1"":""y x"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Safari refers to support for `object-fit` but not `object-position`.""},""usage_perc_y"":62.92,""usage_perc_a"":9.81,""ucprefix"":false,""parent"":"""",""keywords"":""objectfit,objectposition"",""ie_id"":""objectfitandobjectposition"",""chrome_id"":""5302669702856704"",""firefox_id"":"""",""webkit_id"":""""},""xhr2"":{""title"":""XMLHttpRequest advanced features"",""description"":""Adds more functionality to XHR (aka AJAX) requests like file uploads, transfer progress information and the ability to send form data. Previously known as [XMLHttpRequest Level 2](http://www.w3.org/TR/2012/WD-XMLHttpRequest-20120117/), these features now appear simply in the XMLHttpRequest spec."",""spec"":""https://xhr.spec.whatwg.org/"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/XMLHttpRequest/FormData"",""title"":""MDN article on FormData""},{""url"":""https://github.com/3nr1c/jUri.js"",""title"":""Polyfill for FormData object""},{""url"":""http://docs.webplatform.org/wiki/apis/xhr/XMLHttpRequest"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #1 #2 #3"",""3.6"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""5"":""a #1 #2 #3"",""6"":""a #1 #2"",""7"":""a #1 #2"",""8"":""a #1 #2"",""9"":""a #1 #2"",""10"":""a #2"",""11"":""a #2"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""u"",""7"":""a #1 #2"",""8"":""a #1 #2"",""9"":""a #1 #2"",""10"":""a #1 #2"",""11"":""a #1 #2"",""12"":""a #1 #2"",""13"":""a #1 #2"",""14"":""a #1 #2"",""15"":""a #1 #2"",""16"":""a #1 #2"",""17"":""a #1 #2"",""18"":""a #1 #2"",""19"":""a #1 #2"",""20"":""a #1 #2"",""21"":""a #1 #2"",""22"":""a #1 #2"",""23"":""a #1 #2"",""24"":""a #1 #2"",""25"":""a #1 #2"",""26"":""a #1 #2"",""27"":""a #1 #2"",""28"":""a #1 #2"",""29"":""a #1"",""30"":""a #1"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1 #2"",""5.1"":""a #1 #2"",""6"":""a #1 #2"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y"",""12.1"":""y"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #1 #2"",""6.0-6.1"":""a #1 #2"",""7.0-7.1"":""a #1"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""4.1"":""a #1 #2 #3"",""4.2-4.3"":""a #1 #2 #3"",""4.4"":""a #1 #2"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1 #2"",""10"":""a #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""a #1 #2""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not supporting `json` as `responseType`"",""2"":""Partial support refers to not supporting `.timeout` and `.ontimeout`"",""3"":""Partial support refers to not supporting `blob` as `responseType`""},""usage_perc_y"":69.94,""usage_perc_a"":20.96,""ucprefix"":false,""parent"":"""",""keywords"":""formdata"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""minmaxwh"":{""title"":""CSS min/max-width/height"",""description"":""Method of setting a minimum or maximum width or height to an element. "",""spec"":""http://www.w3.org/TR/CSS21/visudet.html#min-max-widths"",""status"":""rec"",""links"":[{""url"":""http://code.google.com/p/ie7-js/"",""title"":""JS library with support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/min-width"",""title"":""WebPlatform Docs""},{""url"":""http://www.impressivewebs.com/min-max-width-height-css/"",""title"":""CSS Basics post""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""y #1"",""8"":""y #2"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""IE7 does not support `inherit` as a value on any of these properties."",""2"":""IE8 has some bugs with `max-width`/`height` combined with `overflow: auto`/`scroll`.""},""usage_perc_y"":97.36,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""min-width,min-height,max-width,max-height"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""details"":{""title"":""Details & Summary elements"",""description"":""The <details> element generates a simple no-JavaScript widget to show/hide element contents, optionally by clicking on its child <summary> element."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-details-element"",""status"":""ls"",""links"":[{""url"":""https://mathiasbynens.be/notes/html5-details-jquery"",""title"":""jQuery fallback script""},{""url"":""https://gist.github.com/370590"",""title"":""Fallback script""},{""url"":""http://html5doctor.com/summary-figcaption-element/"",""title"":""HTML5 Doctor article""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-details"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/details"",""title"":""WebPlatform Docs""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=591737"",""title"":""Bug on Firefox support""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""n d #1"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""p""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Firefox through the `dom.details_element.enabled` flag""},""usage_perc_y"":72.82,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""detailssummary"",""chrome_id"":""5348024557502464"",""firefox_id"":"""",""webkit_id"":""""},""text-stroke"":{""title"":""CSS text-stroke"",""description"":""Method of declaring the outline (stroke) width and color for text."",""spec"":""http://developer.apple.com/library/safari/documentation/appleapplications/reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-_webkit_text_stroke"",""status"":""unoff"",""links"":[{""url"":""https://css-tricks.com/adding-stroke-to-web-text/"",""title"":""Information & workarounds""},{""url"":""http://www.westciv.com/tools/textStroke/"",""title"":""Live editor""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-text-stroke"",""title"":""Mozilla Developer Network article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""u"",""47"":""u"",""48"":""u""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""n"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Does not yet appear in any W3C specification. Was briefly included in a spec as the \""text-outline\"" property, but this was removed."",""notes_by_num"":{},""usage_perc_y"":64.39,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""textstroke,stroke-color,stroke-width,fill-color,text-outline"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""inline-block"":{""title"":""CSS inline-block"",""description"":""Method of displaying an element as a block while flowing it with text. "",""spec"":""http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning"",""status"":""rec"",""links"":[{""url"":""http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/"",""title"":""Blog post w/info""},{""url"":""http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/"",""title"":""Info on cross browser support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/display"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a #1"",""7"":""a #1"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a x"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Only supported in IE6 and IE7 on elements with a display of \""inline\"" by default. [Alternative properties](http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/) are available to provide complete cross-browser support.""},""usage_perc_y"":97.3,""usage_perc_a"":0.1,""ucprefix"":false,""parent"":"""",""keywords"":""inlineblock,display:inline-block"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""notifications"":{""title"":""Web Notifications"",""description"":""Method of alerting the user outside of a web page by displaying notifications (that do not require interaction by the user)."",""spec"":""https://notifications.spec.whatwg.org/"",""status"":""ls"",""links"":[{""url"":""http://www.html5rocks.com/tutorials/notifications/quick/"",""title"":""HTML5 Rocks tutorial""},{""url"":""http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification"",""title"":""Chromium API""},{""url"":""https://addons.mozilla.org/en-us/firefox/addon/221523/"",""title"":""Add-on""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/notification"",""title"":""MDN Notifications""},{""url"":""http://www.sitepoint.com/introduction-web-notifications-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/web-notifications-api-demo.html"",""title"":""Demo""},{""url"":""http://ukot.github.io/ie_web_notifications/"",""title"":""Plug-in for support in IE""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""47"":""a x""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a x""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":42.72,""usage_perc_a"":2.89,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""webnotifications"",""chrome_id"":""5064350557536256"",""firefox_id"":"""",""webkit_id"":""""},""stream"":{""title"":""getUserMedia/Stream API"",""description"":""Method of accessing external device data (such as a webcam video stream). Formerly this was envisioned as the <device> element."",""spec"":""http://www.w3.org/TR/mediacapture-streams/"",""status"":""wd"",""links"":[{""url"":""https://dev.opera.com/blog/webcam-orientation-preview/"",""title"":""Technology preview from Opera""},{""url"":""http://docs.webplatform.org/wiki/dom/Navigator/getUserMedia"",""title"":""WebPlatform Docs""},{""url"":""http://blogs.windows.com/msedgedev/2015/05/13/announcing-media-capture-functionality-in-microsoft-edge/"",""title"":""Media Capture functionality in Microsoft Edge""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1"",""49"":""a x #1"",""50"":""a x #1"",""51"":""a x #1"",""52"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""a x #1"",""12.1"":""a x #1"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""a x #1""},""bb"":{""7"":""n"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""a x #1"",""12.1"":""a x #1"",""35"":""a x #1""},""and_chr"":{""49"":""a x #1""},""and_ff"":{""45"":""y x""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x #1""}},""notes"":"""",""notes_by_num"":{""1"":""Blink-based (and some other) browsers support an older version of the spec that does not use `srcObject`. [See Chromium issue 387740](https://code.google.com/p/chromium/issues/detail?id=387740). Instead you need to convert a `MediaStream` object using `UR""},""usage_perc_y"":9.8,""usage_perc_a"":58.44,""ucprefix"":false,""parent"":"""",""keywords"":""camera,device,getUserMedia,media stream,mediastream,Media Capture API"",""ie_id"":""mediacaptureandstreams"",""chrome_id"":""6067380039974912,6605041225957376"",""firefox_id"":"""",""webkit_id"":""""},""svg-img"":{""title"":""SVG in HTML img element"",""description"":""Method of displaying SVG images in HTML using <img>."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html"",""status"":""ls"",""links"":[{""url"":""http://blog.dholbert.org/2010/10/svg-as-image.html"",""title"":""Blog post with examples""},{""url"":""http://www.codedread.com/blog/"",""title"":""Blog with SVGs an images""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""a"",""4"":""a #1"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""a #1"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not supporting embedded images (data URIs) inside the SVG.""},""usage_perc_y"":92.58,""usage_perc_a"":3.79,""ucprefix"":false,""parent"":"""",""keywords"":""svg-as-img,svg-in-img"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""datalist"":{""title"":""Datalist element"",""description"":""Method of setting a list of options for a user to select in a text field, while leaving the ability to enter a custom value."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element"",""status"":""ls"",""links"":[{""url"":""http://hacks.mozilla.org/2010/11/firefox-4-html5-forms/"",""title"":""Mozilla Hacks article""},{""url"":""http://afarkas.github.com/webshim/demos/"",""title"":""HTML5 Library including datalist support""},{""url"":""https://developer.mozilla.org/en/HTML/Element/datalist"",""title"":""MDN reference""},{""url"":""http://docs.webplatform.org/wiki/html/elements/datalist"",""title"":""WebPlatform Docs""},{""url"":""http://demo.agektmr.com/datalist/"",""title"":""Eiji Kitamura's options demos & tests""},{""url"":""http://github.com/thgreasi/datalist-polyfill"",""title"":""Minimal Datalist polyfill w/tutorial""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""a #2"",""11"":""a #2""},""edge"":{""12"":""a #2"",""13"":""a #2"",""14"":""a #2""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""a #3"",""16"":""a #3"",""17"":""a #3"",""18"":""a #3"",""19"":""a #3"",""20"":""a #3"",""21"":""a #3"",""22"":""a #3"",""23"":""a #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""a #3"",""29"":""a #3"",""30"":""a #3"",""31"":""a #3"",""32"":""a #3"",""33"":""a #3"",""34"":""a #3"",""35"":""a #3"",""36"":""a #3"",""37"":""a #3"",""38"":""a #3"",""39"":""a #3"",""40"":""a #3"",""41"":""a #3"",""42"":""a #3"",""43"":""a #3"",""44"":""a #3"",""45"":""a #3"",""46"":""a #3"",""47"":""a #3"",""48"":""a #3""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1"",""48"":""a #1"",""49"":""a #1"",""50"":""a #1"",""51"":""a #1"",""52"":""a #1""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p"",""9.1"":""p""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9.0-9.2"":""p"",""9.3"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""p""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""a #3""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":""While most commonly used on text fields, datalists can also be used on other input types. IE11 supports the element on `range` fields. Chrome and Opera also support datalists to suggest given values on `range`, `color` and date/time fields. "",""notes_by_num"":{""1"":""Partial support refers to [a bug](https://code.google.com/p/chromium/issues/detail?id=375637) where long lists of items are unscrollable resulting in unselectable options."",""2"":""Partial support in IE refers to [significantly buggy behavior](http://playground.onereason.eu/2013/04/ie10s-lousy-support-for-datalists/) (IE11+ does send the input and change events upon selection). "",""3"":""Partial support refers to no support for datalists on non-text fields (e.g. number, [range](https://bugzilla.mozilla.org/show_bug.cgi?id=841942), [color](https://bugzilla.mozilla.org/show_bug.cgi?id=960984)).""},""usage_perc_y"":27.51,""usage_perc_a"":48.67,""ucprefix"":false,""parent"":""forms"",""keywords"":""list attribute"",""ie_id"":""datalistelement"",""chrome_id"":""6090950820495360"",""firefox_id"":"""",""webkit_id"":""""},""dataset"":{""title"":""dataset & data-* attributes"",""description"":""Method of applying and accessing custom data to elements."",""spec"":""https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/html5-custom-data-attributes/"",""title"":""HTML5 Doctor article""},{""url"":""http://html5demos.com/dataset"",""title"":""Demo using dataset""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-dataset"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/data-*"",""title"":""WebPlatform Docs""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset"",""title"":""MDN Reference - dataset""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes"",""title"":""MDN Guide - Using data-* attributes""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""a"",""3.6"":""a"",""4"":""a"",""5"":""a"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1"",""43"":""y #1"",""44"":""y #1"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y #1"",""7"":""y #1"",""7.1"":""y #1"",""8"":""y #1"",""9"":""y #1"",""9.1"":""y #1""},""opera"":{""9"":""a"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""y #1"",""6.0-6.1"":""y #1"",""7.0-7.1"":""y #1"",""8"":""y #1"",""8.1-8.4"":""y #1"",""9.0-9.2"":""y #1"",""9.3"":""y #1""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y #1"",""4.4.3-4.4.4"":""y #1"",""47"":""y #1""},""bb"":{""7"":""y #1"",""10"":""y #1""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y #1""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a"",""11"":""y""},""and_uc"":{""9.9"":""y #1""}},""notes"":""Partial support refers to being able to use `data-*` attributes and access them using `getAttribute`. \r\n\r\n\""Supported\"" refers to accessing the values using the `dataset` property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements."",""notes_by_num"":{""1"":""While the HTML spec doesn't require it, these browsers also support `dataset` and `data-*` attributes on SVG elements, in compliance with [current plans for SVG2](http://www.w3.org/2015/01/15-svg-minutes.html#item03)""},""usage_perc_y"":90.02,""usage_perc_a"":7.39,""ucprefix"":false,""parent"":"""",""keywords"":""DOMStringMap"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-grid"":{""title"":""CSS Grid Layout"",""description"":""Method of using a grid concept to lay out content, providing a mechanism for authors to divide available space for lay out into columns and rows using a set of predictable sizing behaviors"",""spec"":""http://www.w3.org/TR/css3-grid-layout/"",""status"":""wd"",""links"":[{""url"":""http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx"",""title"":""IE Blog post""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=60731"",""title"":""Webkit (Chrome, Safari, etc.) feature request""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=616605"",""title"":""Mozilla (Firefox) feature request""},{""url"":""https://github.com/codler/Grid-Layout-Polyfill"",""title"":""Polyfill based on old spec""},{""url"":""https://github.com/FremyCompany/css-grid-polyfill/"",""title"":""Polyfill based on new spec""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""p"",""10"":""a x #2"",""11"":""a x #2""},""edge"":{""12"":""a x #2"",""13"":""a x #2"",""14"":""a x #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p d #3"",""41"":""p d #3"",""42"":""p d #3"",""43"":""p d #3"",""44"":""p d #3"",""45"":""p d #3"",""46"":""p d #3"",""47"":""p d #3"",""48"":""p d #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p d #1"",""30"":""p d #1"",""31"":""p d #1"",""32"":""p d #1"",""33"":""p d #1"",""34"":""p d #1"",""35"":""p d #1"",""36"":""p d #1"",""37"":""p d #1"",""38"":""p d #1"",""39"":""p d #1"",""40"":""p d #1"",""41"":""p d #1"",""42"":""p d #1"",""43"":""p d #1"",""44"":""p d #1"",""45"":""p d #1"",""46"":""p d #1"",""47"":""p d #1"",""48"":""p d #1"",""49"":""p d #1"",""50"":""p d #1"",""51"":""p d #1"",""52"":""p d #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p"",""9.1"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""p d #1"",""29"":""p d #1"",""30"":""p d #1"",""31"":""p d #1"",""32"":""p d #1"",""33"":""p d #1"",""34"":""p d #1"",""35"":""p d #1"",""36"":""p d #1"",""37"":""p d #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9.0-9.2"":""p"",""9.3"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""47"":""p""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""p""},""and_chr"":{""49"":""p""},""and_ff"":{""45"":""p""},""ie_mob"":{""10"":""a x #2"",""11"":""a x #2""},""and_uc"":{""9.9"":""n""}},""notes"":""Supported in WebKit Nightly with `-webkit-` prefix.\r\n\r\nEnabled by default in Firefox nightly and developer editions, but not yet on track to be enabled in beta or stable Firefox."",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Partial support in IE refers to supporting an [older version](http://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/) of the specification."",""3"":""Enabled in Firefox through the `layout.css.grid.enabled ` flag""},""usage_perc_y"":0,""usage_perc_a"":8.63,""ucprefix"":false,""parent"":"""",""keywords"":""grids,grid-row,grid-column,display:grid"",""ie_id"":""grid"",""chrome_id"":""4589636412243968"",""firefox_id"":"""",""webkit_id"":""specification-css-grid-layout-level-1""},""menu"":{""title"":""Toolbar/context menu"",""description"":""Method of defining a toolbar menu, a context menu or a list of (interactive) options using the <menu> element."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-menu-element"",""status"":""ls"",""links"":[{""url"":""https://bug617528.bugzilla.mozilla.org/attachment.cgi?id=554309"",""title"":""Demo""},{""url"":""https://github.com/swisnl/jQuery-contextMenu"",""title"":""jQuery polyfill""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/events.js#event-contextmenu"",""title"":""has.js test""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=746087"",""title"":""Bug on Firefox support""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6508881-html5-menu-tag-contextmenu-attribute"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1"",""48"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n d #3"",""42"":""n d #3"",""43"":""n d #3"",""44"":""n d #3"",""45"":""n d #3"",""46"":""n d #3"",""47"":""n d #3"",""48"":""n d #2"",""49"":""n d #2"",""50"":""n d #2"",""51"":""n d #2"",""52"":""n d #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n d #2"",""36"":""n d #2"",""37"":""n d #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""a #1 #4""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Firefox refers to being limited to context menus, not toolbar menus."",""2"":""Context menus supported in Chrome under the \""Experimental Web Platform features\"" flag"",""3"":""Context menus with a non-compliant syntax (`type=popup`) supported in Chrome under the \""Experimental Web Platform features\"" flag"",""4"":""Nested menus are not supported""},""usage_perc_y"":0,""usage_perc_a"":8.83,""ucprefix"":false,""parent"":"""",""keywords"":""contextmenu,menuitem,command"",""ie_id"":""menuelement"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-zoom"":{""title"":""CSS zoom"",""description"":""Non-standard method of scaling content."",""spec"":""https://msdn.microsoft.com/en-us/library/ms531189(v=vs.85).aspx"",""status"":""unoff"",""links"":[{""url"":""https://css-tricks.com/almanac/properties/z/zoom/"",""title"":""CSS Tricks""},{""url"":""https://docs.webplatform.org/wiki/css/properties/zoom"",""title"":""WebPlatform Docs""},{""url"":""https://msdn.microsoft.com/en-us/library/ms531189(v=vs.85).aspx"",""title"":""MSDN Library""},{""url"":""https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-SW1"",""title"":""Safari Developer Library""},{""url"":""http://www.satzansatz.de/cssd/onhavinglayout.html"",""title"":""Article explaining usage of zoom as the hack for fixing rendering bugs in IE6 and IE7.""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/zoom"",""title"":""Mozilla Developer Network""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":""Originally implemented only in Internet Explorer. Although several other browsers support the property, using `transform: scale()` is the recommended solution to scale content."",""notes_by_num"":{""1"":""The `-ms-zoom` property is an extension to CSS, and can be used as a synonym for `zoom` in IE8 Standards mode.""},""usage_perc_y"":83.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""-ms-zoom,transform,-moz-transform,-ms-transform,-webkit-transform,-o-transform,scale,css-transforms"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""rem"":{""title"":""rem (root em) units"",""description"":""Type of unit similar to `em`, but relative only to the root element, not any parent element. Thus compounding does not occur as it does with `em` units."",""spec"":""http://www.w3.org/TR/css3-values/#font-relative-lengths"",""status"":""cr"",""links"":[{""url"":""http://snook.ca/archives/html_and_css/font-size-with-rem"",""title"":""Article on usage""},{""url"":""https://github.com/chuckcarpenter/REM-unit-polyfill"",""title"":""REM Polyfill""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #1"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""a #2"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""IE 9 & IE 10 do not support `rem` units when used in the `font` shorthand property (the entire declaration is ignored) or when used on pseudo elements."",""2"":""iOS Safari 5.0-5.1 support `rem` but not in combination with media queries.""},""usage_perc_y"":95.04,""usage_perc_a"":1.28,""ucprefix"":false,""parent"":"""",""keywords"":""rems"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""ttf"":{""title"":""TTF/OTF - TrueType and OpenType font support"",""description"":""Support for the TrueType (.ttf) and OpenType (.otf) outline font formats in @font-face. "",""spec"":""http://developer.apple.com/fonts/TTRefMan/index.html"",""status"":""other"",""links"":[{""url"":""http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer"",""title"":""What is the status of TTF support in Internet Explorer?""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE9+ refers to the fonts only working [when set to be \""installable\""](http://blogs.msdn.com/b/ie/archive/2010/07/15/the-css-corner-better-web-typography-for-better-design.aspx). Support for this is tracked [here](https://status.modern.ie/crossdomainfontloading).""},""usage_perc_y"":83.52,""usage_perc_a"":8.16,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""touch"":{""title"":""Touch events"",""description"":""Method of registering when, where and how the interface is touched, for devices with a touch screen. These DOM events are similar to mousedown, mousemove, etc."",""spec"":""http://www.w3.org/TR/touch-events/"",""status"":""rec"",""links"":[{""url"":""http://www.quirksmode.org/mobile/tableTouch.html"",""title"":""Detailed support tables""},{""url"":""http://www.quirksmode.org/m/tests/drag2.html"",""title"":""Multi-touch demo""},{""url"":""http://schepers.cc/getintouch"",""title"":""Information on the spec development""},{""url"":""http://msdn.microsoft.com/en-us/library/ie/hh673557(v=vs.85).aspx"",""title"":""Internet Explorer's gesture and touch implementation.""},{""url"":""http://github.com/CamHenlin/TouchPolyfill"",""title"":""Touch polyfill for supporting touch events on Internet Explorer""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""p"",""11"":""p""},""edge"":{""12"":""n d #3"",""13"":""n d #3"",""14"":""n d #3""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1"",""43"":""n d #1"",""44"":""n d #1"",""45"":""n d #1"",""46"":""n d #1"",""47"":""n d #1"",""48"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""p"",""11"":""a #2""},""and_uc"":{""9.9"":""y""}},""notes"":""Internet Explorer implements Pointer Events specification which supports more input devices than Touch Events one.\r\n\r\nThere is a library on GitHub that is working toward bringing W3C touch events to IE 10 and 11: https://github.com/CamHenlin/TouchPolyfill \r\n\r\nRemoved support in Firefox refers to desktop Firefox only."",""notes_by_num"":{""1"":""Can be enabled in Firefox using the dom.w3c_touch_events.enabled flag (disabled by default for site compatibility reasons)"",""2"":""Supported on IE11 Mobile for phones with \""[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\"""",""3"":""Can be enabled in Edge using the \""Enable touch events\"" flag under `about:flags`""},""usage_perc_y"":70.79,""usage_perc_a"":0.87,""ucprefix"":false,""parent"":"""",""keywords"":""touchstart,touchend,touchmove,touchenter,touchleave,touchcancel"",""ie_id"":""touchevents"",""chrome_id"":""6156165603917824"",""firefox_id"":"""",""webkit_id"":""""},""matchesselector"":{""title"":""matches() DOM method"",""description"":""Method of testing whether or not a DOM element matches a given selector. Formerly known (and largely supported with prefix) as matchesSelector."",""spec"":""https://dom.spec.whatwg.org/#dom-element-matches"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/docs/Web/API/Element/matches"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/dom/HTMLElement/matches"",""title"":""WebPlatform Docs""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6524858-unprefix-and-update-msmatchesselector-to-matches"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a x"",""10"":""a x"",""11"":""a x""},""edge"":{""12"":""a x"",""13"":""a x"",""14"":""a x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a x"",""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a x"",""5.1"":""a x"",""6"":""a x"",""6.1"":""a x"",""7"":""a x"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""a x"",""11.6"":""a x"",""12"":""a x"",""12.1"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""a x"",""6.0-6.1"":""a x"",""7.0-7.1"":""a x"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""47"":""y""},""bb"":{""7"":""a x"",""10"":""a x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a x"",""11.5"":""a x"",""12"":""a x"",""12.1"":""a x"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a x"",""11"":""a x""},""and_uc"":{""9.9"":""a x""}},""notes"":""Partial support refers to supporting the older specification's \""matchesSelector\"" name rather than just \""matches\""."",""notes_by_num"":{},""usage_perc_y"":66.47,""usage_perc_a"":25.13,""ucprefix"":false,""parent"":"""",""keywords"":"" matchesSelector"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""pointer-events"":{""title"":""CSS pointer-events (for HTML)"",""description"":""This CSS property, when set to \""none\"" allows elements to not receive hover/click events, instead the event will occur on anything behind it. "",""spec"":""http://wiki.csswg.org/spec/css4-ui#pointer-events"",""status"":""unoff"",""links"":[{""url"":""http://robertnyman.com/2010/03/22/css-pointer-events-to-allow-clicks-on-underlying-elements/"",""title"":""Article & tutorial""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-pointerevents"",""title"":""has.js test""},{""url"":""https://github.com/kmewhort/pointer_events_polyfill"",""title"":""Polyfill""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Already part of the SVG specification, and all SVG-supporting browsers appear to support the property on SVG elements."",""notes_by_num"":{},""usage_perc_y"":90,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""pointerevents,pointer-events:none"",""ie_id"":""csspointerevents"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""blobbuilder"":{""title"":""Blob constructing"",""description"":""Construct Blobs (binary large objects) either using the BlobBuilder API (deprecated) or the Blob constructor."",""spec"":""http://www.w3.org/TR/FileAPI/#constructorBlob"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/BlobBuilder"",""title"":""MDN article on BlobBuilder""},{""url"":""https://developer.mozilla.org/en-US/docs/DOM/Blob"",""title"":""MDN article on Blobs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a x""}},""notes"":""Partial support refers to only supporting the now deprecated BlobBuilder to create blobs."",""notes_by_num"":{},""usage_perc_y"":77.26,""usage_perc_a"":13.27,""ucprefix"":true,""parent"":""fileapi"",""keywords"":"""",""ie_id"":""blob"",""chrome_id"":""5328783104016384"",""firefox_id"":"""",""webkit_id"":""""},""filereader"":{""title"":""FileReader API"",""description"":""Method of reading the contents of a File or Blob object into memory"",""spec"":""http://www.w3.org/TR/FileAPI/#dfn-filereader"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/FileReader"",""title"":""FileReader API""},{""url"":""http://docs.webplatform.org/wiki/apis/file/FileReader"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support `readAsBinaryString`""},""usage_perc_y"":83.93,""usage_perc_a"":6.71,""ucprefix"":false,""parent"":""fileapi"",""keywords"":"""",""ie_id"":""filereader"",""chrome_id"":""5171003185430528"",""firefox_id"":"""",""webkit_id"":""""},""filesystem"":{""title"":""Filesystem & FileWriter API"",""description"":""Method of reading and writing files to a sandboxed file system."",""spec"":""http://www.w3.org/TR/file-system-api/"",""status"":""unoff"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/file/filesystem/"",""title"":""HTML5 Rocks tutorial""},{""url"":""http://docs.webplatform.org/wiki/apis/filesystem"",""title"":""WebPlatform Docs""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=997471"",""title"":""Firefox tracking bug""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The File API: Directories and System specification is no longer being maintained and support may be dropped in future versions."",""notes_by_num"":{},""usage_perc_y"":49.47,""usage_perc_a"":0.08,""ucprefix"":false,""parent"":"""",""keywords"":""filewriter,requestFileSystem"",""ie_id"":""filewriter"",""chrome_id"":""5452478162141184"",""firefox_id"":"""",""webkit_id"":""""},""bloburls"":{""title"":""Blob URLs"",""description"":""Method of creating URL handles to the specified File or Blob object."",""spec"":""http://www.w3.org/TR/FileAPI/#url"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.URL.createObjectURL"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":90.25,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fileapi"",""keywords"":""createobjecturl,revokeobjecturl"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""rellist"":{""title"":""relList (DOMTokenList)"",""description"":""Method of easily manipulating rel attribute values on elements, using the DOMTokenList object (similar to classList)."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#dom-a-rellist"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/DOM/DOMTokenList"",""title"":""MDN - DOMTokenList""},{""url"":""https://github.com/jwilsson/domtokenlist"",""title"":""domtokenlist polyfill""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":16.88,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""typedarrays"":{""title"":""Typed Arrays"",""description"":""JavaScript typed arrays provide a mechanism for accessing raw binary data much more efficiently.\r\n"",""spec"":""http://www.ecma-international.org/ecma-262/6.0/#sec-typedarray-objects"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/en/javascript_typed_arrays"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #2"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a #2"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y""}},""notes"":""Includes support for ArrayBuffer objects."",""notes_by_num"":{""1"":""IE10 (and IE 10&11 mobile) does not support `Uint8ClampedArray`""},""usage_perc_y"":89.14,""usage_perc_a"":1.58,""ucprefix"":false,""parent"":"""",""keywords"":""ES6,JavaScript,float64array,dataview,uint8array,arraybuffer"",""ie_id"":""typedarrayses6"",""chrome_id"":""5135818813341696"",""firefox_id"":"""",""webkit_id"":""""},""deviceorientation"":{""title"":""DeviceOrientation & DeviceMotion events"",""description"":""API for detecting orientation and motion events from the device running the browser."",""spec"":""http://www.w3.org/TR/orientation-event/"",""status"":""wd"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/device/orientation/"",""title"":""HTML5 Rocks tutorial""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-orientation"",""title"":""has.js test""},{""url"":""http://html5labs.interoperabilitybridges.com/prototypes/device-orientation-events/device-orientation-events/info"",""title"":""DeviceOrientation implementation prototype for IE10""},{""url"":""http://aurelio.audero.it/demo/device-orientation-api-demo.html"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""a""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""35"":""a""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""a""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""a""}},""notes"":""Partial support refers to the lack of compassneedscalibration event. Partial support also refers to the lack of devicemotion event support for Chrome 30- and Opera. Opera Mobile 14 lost the ondevicemotion event support. Firefox 3.6, 4 and 5 support the non-standard [MozOrientation](https://developer.mozilla.org/en/DOM/MozOrientation) event."",""notes_by_num"":{""1"":""`compassneedscalibration` supported in IE11 only for compatible devices with Windows 8.1+.""},""usage_perc_y"":1.78,""usage_perc_a"":85.56,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""deviceorientation,devicemotion"",""chrome_id"":""5874690627207168,5556931766779904"",""firefox_id"":""device-orientation"",""webkit_id"":""""},""script-defer"":{""title"":""defer attribute for external scripts"",""description"":""The boolean defer attribute on script elements allows the external JavaScript file to run when the DOM is loaded, without delaying page load first."",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#attr-script-defer"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/HTML/Element/script#Attributes"",""title"":""MDN article""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-defer"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/defer"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older IE refers to a buggy implementation (see issue).""},""usage_perc_y"":90.72,""usage_perc_a"":1.57,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""nav-timing"":{""title"":""Navigation Timing API"",""description"":""API for accessing timing information related to navigation and elements."",""spec"":""http://www.w3.org/TR/navigation-timing/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en/API/navigationTiming"",""title"":""MDN article""},{""url"":""http://www.html5rocks.com/en/tutorials/webperformance/basics/"",""title"":""HTML5 Rocks tutorial""},{""url"":""http://docs.webplatform.org/wiki/apis/navigation_timing"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Removed in iOS 8.1 due to poor performance."",""notes_by_num"":{},""usage_perc_y"":89.6,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""performance,performance.timing"",""ie_id"":""navigationtimingapi"",""chrome_id"":""5584144679567360"",""firefox_id"":"""",""webkit_id"":""""},""audio-api"":{""title"":""Web Audio API"",""description"":""High-level JavaScript API for processing and synthesizing audio"",""spec"":""http://www.w3.org/TR/webaudio/"",""status"":""wd"",""links"":[{""url"":""https://github.com/corbanbrook/audionode.js"",""title"":""Polyfill to support Web Audio API in Firefox""},{""url"":""http://docs.webplatform.org/wiki/apis/webaudio"",""title"":""WebPlatform Docs""},{""url"":""http://www.doboism.com/projects/webaudio-compatibility/"",""title"":""Additional browser compatibility tests for specific features""},{""url"":""https://github.com/g200kg/WAAPISim"",""title"":""Polyfill to enable Web Audio API through Firefox Audio Data api or flash""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Not all browsers with support for the Audio API also support media streams (e.g. microphone input). See the [getUserMedia/Streams API](/#feat=stream) data for support for that feature.\r\n\r\nFirefox versions < 25 support an alternative, deprecated audio API.\r\n\r\nChrome support [went through some changes](http://updates.html5rocks.com/2014/07/Web-Audio-Changes-in-m36) as of version 36."",""notes_by_num"":{},""usage_perc_y"":69.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web-audio,webaudio,AudioContext,AudioBuffer,AudioNode"",""ie_id"":""webaudioapi"",""chrome_id"":""6261718720184320"",""firefox_id"":""webaudio"",""webkit_id"":""""},""css-regions"":{""title"":""CSS Regions"",""description"":""Method of flowing content into multiple elements."",""spec"":""http://www.w3.org/TR/css3-regions/"",""status"":""wd"",""links"":[{""url"":""http://html.adobe.com/webstandards/cssregions/"",""title"":""Adobe demos and samples""},{""url"":""http://msdn.microsoft.com/en-us/ie/hh272902#_CSSConnected"",""title"":""IE10 developer guide info""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@region"",""title"":""WebPlatform Docs""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=674802"",""title"":""Firefox feature request bug""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #1""},""edge"":{""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""n d"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""n d"",""24"":""n d"",""25"":""n d"",""26"":""n d"",""27"":""n d"",""28"":""n d"",""29"":""n d"",""30"":""n d"",""31"":""n d"",""32"":""n d"",""33"":""n d"",""34"":""n d"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""a x #1"",""11"":""a x #1""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""Support is limited to using an iframe as a content source with the `-ms-flow-into: flow_name;` and `-ms-flow-from: flow_name;` syntax.""},""usage_perc_y"":19.15,""usage_perc_a"":8.66,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""regions"",""chrome_id"":""5655612935372800"",""firefox_id"":"""",""webkit_id"":""""},""spellcheck-attribute"":{""title"":""Spellcheck attribute"",""description"":""Attribute for `input`/`textarea` fields to enable/disable the browser's spellchecker."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#spelling-and-grammar-checking"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Controlling_spell_checking_in_HTML_formsControlling_spell_checking_in_HTML_forms"",""title"":""MDN article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""a""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""35"":""a""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":""The partial support in mobile browsers results from their OS generally having built-in spell checking instead of using the wavy underline to indicate misspelled words. `spellcheck=\""false\""` does not seem to have any effect in these browsers.\r\n\r\nBrowsers have different behavior in how they deal with spellchecking in combination with the the `lang` attribute. Generally spelling is based on the browser's language, not the language of the document."",""notes_by_num"":{},""usage_perc_y"":51.46,""usage_perc_a"":44.21,""ucprefix"":false,""parent"":"""",""keywords"":""spelling"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""fullscreen"":{""title"":""Full Screen API"",""description"":""API for allowing content (like a video or canvas element) to take up the entire screen."",""spec"":""https://fullscreen.spec.whatwg.org/"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/Using_full-screen_mode"",""title"":""MDN article""},{""url"":""http://jlongster.com/2011/11/21/canvas.html"",""title"":""Blog post""},{""url"":""http://hacks.mozilla.org/2012/01/using-the-fullscreen-api-in-web-browsers/"",""title"":""Mozilla hacks article""},{""url"":""http://docs.webplatform.org/wiki/dom/Element/requestFullscreen"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a x #3""},""edge"":{""12"":""a #3"",""13"":""a #3"",""14"":""a #3""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1 #3"",""11"":""a x #1 #3"",""12"":""a x #1 #3"",""13"":""a x #1 #3"",""14"":""a x #1 #3"",""15"":""a x #1 #3"",""16"":""a x #1 #3"",""17"":""a x #1 #3"",""18"":""a x #1 #3"",""19"":""a x #1 #3"",""20"":""a x #1 #3"",""21"":""a x #1 #3"",""22"":""a x #1 #3"",""23"":""a x #1 #3"",""24"":""a x #1 #3"",""25"":""a x #1 #3"",""26"":""a x #1 #3"",""27"":""a x #1 #3"",""28"":""a x #1 #3"",""29"":""a x #1 #3"",""30"":""a x #1 #3"",""31"":""a x #1 #3"",""32"":""a x #1 #3"",""33"":""a x #1 #3"",""34"":""a x #1 #3"",""35"":""a x #1 #3"",""36"":""a x #1 #3"",""37"":""a x #1 #3"",""38"":""a x #1 #3"",""39"":""a x #1 #3"",""40"":""a x #1 #3"",""41"":""a x #1 #3"",""42"":""a x #1 #3"",""43"":""a x #1 #3"",""44"":""a x #1 #3"",""45"":""a x #1 #3"",""46"":""a x #1 #3"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""a x #1 #3"",""16"":""a x #1 #3"",""17"":""a x #1 #3"",""18"":""a x #1 #3"",""19"":""a x #1 #3"",""20"":""a x #2 #3"",""21"":""a x #2 #3"",""22"":""a x #2 #3"",""23"":""a x #2 #3"",""24"":""a x #2 #3"",""25"":""a x #2 #3"",""26"":""a x #2 #3"",""27"":""a x #2 #3"",""28"":""a x #2 #3"",""29"":""a x #2 #3"",""30"":""a x #2 #3"",""31"":""a x #2 #3"",""32"":""a x #2 #3"",""33"":""a x #2 #3"",""34"":""a x #2 #3"",""35"":""a x #2 #3"",""36"":""a x #2 #3"",""37"":""a x #2 #3"",""38"":""a x #2 #3"",""39"":""a x #2 #3"",""40"":""a x #2 #3"",""41"":""a x #2 #3"",""42"":""a x #2 #3"",""43"":""a x #2 #3"",""44"":""a x #2 #3"",""45"":""a x #2 #3"",""46"":""a x #2 #3"",""47"":""a x #2 #3"",""48"":""a x #2 #3"",""49"":""a x #2 #3"",""50"":""a x #2 #3"",""51"":""a x #2 #3"",""52"":""a x #2 #3""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a x #1 #3"",""6"":""a x #2 #3"",""6.1"":""a x #2 #3"",""7"":""a x #2 #3"",""7.1"":""a x #2 #3"",""8"":""a x #2 #3"",""9"":""a x #2 #3"",""9.1"":""a x #2 #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""a x #2 #3"",""16"":""a x #2 #3"",""17"":""a x #2 #3"",""18"":""a x #2 #3"",""19"":""a x #2 #3"",""20"":""a x #2 #3"",""21"":""a x #2 #3"",""22"":""a x #2 #3"",""23"":""a x #2 #3"",""24"":""a x #2 #3"",""25"":""a x #2 #3"",""26"":""a x #2 #3"",""27"":""a x #2 #3"",""28"":""a x #2 #3"",""29"":""a x #2 #3"",""30"":""a x #2 #3"",""31"":""a x #2 #3"",""32"":""a x #2 #3"",""33"":""a x #2 #3"",""34"":""a x #2 #3"",""35"":""a x #2 #3"",""36"":""a x #2 #3"",""37"":""a x #2 #3""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""a x #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a x #2 #3""},""and_chr"":{""49"":""a x #2 #3""},""and_ff"":{""45"":""a x #1 #3""},""ie_mob"":{""10"":""n"",""11"":""a x #3""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to supporting an earlier draft of the spec."",""2"":""Partial support refers to not supporting `::backdrop`, and supporting the old `:full-screen` syntax rather than the standard `:fullscreen`."",""3"":""Partial support refers to not returning a Promise, as specified in the latest version of the spec.""},""usage_perc_y"":0.16,""usage_perc_a"":68.51,""ucprefix"":false,""parent"":"""",""keywords"":""full-screen"",""ie_id"":""fullscreenapi"",""chrome_id"":""5259513871466496"",""firefox_id"":""fullscreen"",""webkit_id"":""""},""css-exclusions"":{""title"":""CSS Exclusions Level 1"",""description"":""Exclusions defines how inline content flows around elements. It extends the content wrapping ability of floats to any block-level element."",""spec"":""http://www.w3.org/TR/css3-exclusions/"",""status"":""wd"",""links"":[{""url"":""https://msdn.microsoft.com/en-us/library/ie/hh673558(v=vs.85).aspx"",""title"":""CSS Exclusions""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=674804"",""title"":""Firefox tracking bug""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=57311"",""title"":""WebKit tracking bug""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x""},""edge"":{""12"":""y x"",""13"":""y x"",""14"":""y x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y x"",""11"":""y x""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":8.63,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""floats,exclusions,wrap-flow,wrap-through"",""ie_id"":""exclusions"",""chrome_id"":""6296903092273152"",""firefox_id"":"""",""webkit_id"":""""},""requestanimationframe"":{""title"":""requestAnimationFrame"",""description"":""API allowing a more efficient way of running script-based animation, compared to traditional methods using timeouts. Also covers support for `cancelAnimationFrame`"",""spec"":""https://html.spec.whatwg.org/multipage/webappapis.html#animation-frames"",""status"":""ls"",""links"":[{""url"":""http://paulirish.com/2011/requestanimationframe-for-smart-animating/"",""title"":""Blog post""},{""url"":""http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/"",""title"":""Mozilla Hacks article""},{""url"":""http://docs.webplatform.org/wiki/dom/Window/requestAnimationFrame"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1 #2"",""11"":""a x #1 #2"",""12"":""a x #1 #2"",""13"":""a x #1 #2"",""14"":""a x #1 #2"",""15"":""a x #1 #2"",""16"":""a x #1 #2"",""17"":""a x #1 #2"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to lacking `cancelAnimationFrame` support."",""2"":""Supports `webkitCancelRequestAnimationFrame` rather than `webkitCancelAnimationFrame.""},""usage_perc_y"":88.71,""usage_perc_a"":0.22,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""requestanimationframe"",""chrome_id"":""5233400470306816"",""firefox_id"":"""",""webkit_id"":""""},""input-range"":{""title"":""Range input type"",""description"":""Form field type that allows the user to select a value using a slider widget."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#range-state-(type=range)"",""status"":""ls"",""links"":[{""url"":""https://github.com/fryn/html5slider"",""title"":""Polyfill for Firefox""},{""url"":""https://github.com/freqdec/fd-slider"",""title"":""Cross-browser polyfill""},{""url"":""http://tutorialzine.com/2011/12/what-you-need-to-know-html5-range-input/"",""title"":""Tutorial""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-range"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/input/type/range"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/andreruffert/rangeslider.js"",""title"":""rangeslider.js polyfill""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Currently all Android browsers with partial support hide the slider input field by default. However, the element [can be styled](http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/) to be made visible and usable."",""notes_by_num"":{},""usage_perc_y"":90.1,""usage_perc_a"":0.6,""ucprefix"":false,""parent"":""forms"",""keywords"":""input type=\""range\"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""matchmedia"":{""title"":""matchMedia"",""description"":""API for finding out whether or not a media query applies to the document."",""spec"":""http://www.w3.org/TR/cssom-view/#dom-window-matchmedia"",""status"":""wd"",""links"":[{""url"":""https://github.com/paulirish/matchMedia.js/"",""title"":""matchMedia.js polyfill""},{""url"":""https://developer.mozilla.org/en/DOM/window.matchMedia"",""title"":""MDN article""},{""url"":""https://developer.mozilla.org/en/CSS/Using_media_queries_from_code"",""title"":""MDN tutorial""},{""url"":""http://docs.webplatform.org/wiki/css/media_queries/apis/matchMedia"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":90.66,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""mediaquerylist"",""ie_id"":""matchmedia"",""chrome_id"":""4677872220372992"",""firefox_id"":"""",""webkit_id"":""""},""input-datetime"":{""title"":""Date and time input types"",""description"":""Form field widget to easily allow users to enter a date, time or both, generally by using a calendar/time input widget."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#date-state-(type=date)"",""status"":""ls"",""links"":[{""url"":""http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-browser-datepickers-within-minutes/"",""title"":""Datepicker tutorial w/polyfill""},{""url"":""https://github.com/zoltan-dulac/html5Forms.js"",""title"":""Polyfill for HTML5 forms""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-datetime-local"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/input/type/date"",""title"":""WebPlatform Docs""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=888320"",""title"":""Bug on Firefox support""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""a #1"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #2"",""6.0-6.1"":""a #2"",""7.0-7.1"":""a #2"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9.0-9.2"":""a #2"",""9.3"":""a #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n #3"",""4.1"":""n #3"",""4.2-4.3"":""n #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Older versions of Safari provide date-formatted text fields, but no real calendar widget.\r\n\r\nChrome, Opera, and Microsoft Edge also support the `datetime-local` type for both date and time.\r\n\r\nThere used to also be a `datetime` type, but it was [dropped from the HTML spec](https://github.com/whatwg/html/issues/336) since only Presto ever fully supported it."",""notes_by_num"":{""1"":""Partial support in Microsoft Edge refers to supporting `date`, `week`, and `month` input types, and not `time` and `datetime-local`."",""2"":""Partial support in iOS Safari refers to not supporting `min`, `max` or `step` attributes"",""3"":""Some modified versions of the Android 4.x browser do have support for date/time fields.""},""usage_perc_y"":62.16,""usage_perc_a"":8.3,""ucprefix"":false,""parent"":""forms"",""keywords"":""datepicker,timepicker,input type=\""date\"",input type=\""time\"",input date,datetime-local"",""ie_id"":""daterelatedinputtypes,timerelatedinputtypes"",""chrome_id"":""6640933999214592"",""firefox_id"":"""",""webkit_id"":""""},""document-execcommand"":{""title"":""Document.execCommand()"",""description"":""Allows running commands to manipulate the contents of an editable region in a document switched to designMode"",""spec"":""https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#execcommand()"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand"",""title"":""MDN""},{""url"":""http://codepen.io/netsi1964/pen/QbLLGW"",""title"":""execCommand and queryCommandSupported demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""u"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""u"",""5.0-5.1"":""u"",""6.0-6.1"":""u"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""n""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""To determine what commands are supported, see `Document.queryCommandSupported()`"",""notes_by_num"":{},""usage_perc_y"":82.96,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""document,text,editor,commands,designMode"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""input-color"":{""title"":""Color input type"",""description"":""Form field allowing the user to select a color."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#color-state-(type=color)"",""status"":""ls"",""links"":[{""url"":""http://www.html5tutorial.info/html5-color.php"",""title"":""Tutorial""},{""url"":""https://github.com/jonstipe/color-polyfill"",""title"":""Polyfill""},{""url"":""http://docs.webplatform.org/wiki/html/elements/input/type/color"",""title"":""WebPlatform Docs""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514216--input-type-color"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":60.81,""usage_perc_a"":8.87,""ucprefix"":false,""parent"":""forms"",""keywords"":""colour,input type=\""color\"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""input-number"":{""title"":""Number input type"",""description"":""Form field type for numbers."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#number-state-(type=number)"",""status"":""ls"",""links"":[{""url"":""http://www.html5tutorial.info/html5-number.php"",""title"":""Tutorial""},{""url"":""https://github.com/jonstipe/number-polyfill"",""title"":""Polyfill""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-number"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/input/type/number"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""a #1"",""13"":""a #1"",""14"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y #3"",""30"":""y #3"",""31"":""y #3"",""32"":""y #3"",""33"":""y #3"",""34"":""y #3"",""35"":""y #3"",""36"":""y #3"",""37"":""y #3"",""38"":""y #3"",""39"":""y #3"",""40"":""y #3"",""41"":""y #3"",""42"":""y #3"",""43"":""y #3"",""44"":""y #3"",""45"":""y #3"",""46"":""y #3"",""47"":""y #3"",""48"":""y #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a #1 #2"",""4.0-4.1"":""a #1 #2"",""4.2-4.3"":""a #1 #2"",""5.0-5.1"":""a #1 #2"",""6.0-6.1"":""a #1 #2"",""7.0-7.1"":""a #1 #2"",""8"":""a #1 #2"",""8.1-8.4"":""a #1 #2"",""9.0-9.2"":""a #1 #2"",""9.3"":""a #1 #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""a #1 #2"",""4.1"":""a #1 #2"",""4.2-4.3"":""a #1 #2"",""4.4"":""a #1 #2"",""4.4.3-4.4.4"":""a #1 #2"",""47"":""a #1 #2""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""a""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""a #3""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":"""",""notes_by_num"":{""1"":""UI widget does not include increment/decrement buttons."",""2"":""UI widget does not take the \""step\"", \""min\"" or \""max\"" attributes into account."",""3"":""Firefox doesn't support [autocomplete content via datalist](http://codepen.io/graste/pen/bNoVKW) elements.""},""usage_perc_y"":43.17,""usage_perc_a"":47.2,""ucprefix"":false,""parent"":""forms"",""keywords"":""spinner,input type=\""number\"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""getboundingclientrect"":{""title"":""Element.getBoundingClientRect()"",""description"":""Method to get the size and position of an element's bounding box, relative to the viewport."",""spec"":""http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect"",""title"":""Mozilla Developer Network""},{""url"":""https://msdn.microsoft.com/en-us/library/ms536433(VS.85).aspx"",""title"":""Microsoft Developer Network""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""a #1 #3"",""6"":""a #1 #3"",""7"":""a #1 #3"",""8"":""a #1 #3"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""a #1 #4"",""3.5"":""a #2 #4"",""3.6"":""a #2 #3 #4"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a #1"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""The returned object lacks `width` and `height` properties."",""2"":""Returns incorrect values for elements which have had CSS `transform`s applied to them."",""3"":""The returned object cannot have new properties added to it; it's not extensible."",""4"":""Existing properties of the returned object are immutable.""},""usage_perc_y"":96.25,""usage_perc_a"":1.12,""ucprefix"":false,""parent"":"""",""keywords"":""getBoundingClientRect,bounding,client,rect,DOMRect,box,cssom"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""iframe-sandbox"":{""title"":""sandbox attribute for iframes"",""description"":""Method of running external site pages with reduced privileges (e.g. no JavaScript) in iframes."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-sandbox"",""status"":""ls"",""links"":[{""url"":""http://blog.chromium.org/2010/05/security-in-depth-html5s-sandbox.html"",""title"":""Chromium blog article""},{""url"":""http://msdn.microsoft.com/en-us/hh563496"",""title"":""MSDN article""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/sandbox"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":90.27,""usage_perc_a"":0.27,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""iframesandboxattribute"",""chrome_id"":""5715536319086592"",""firefox_id"":"""",""webkit_id"":""""},""css-counters"":{""title"":""CSS Counters"",""description"":""Method of controlling number values in generated content, using the `counter-reset` and `counter-increment` properties."",""spec"":""http://www.w3.org/TR/CSS21/generate.html#counters"",""status"":""rec"",""links"":[{""url"":""http://onwebdev.blogspot.com/2012/02/css-counters-tutorial.html"",""title"":""Tutorial and information""},{""url"":""https://developer.mozilla.org/en/CSS_Counters"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/css/properties/counter-reset"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":97.32,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-resize"":{""title"":""CSS resize property"",""description"":""Method of allowing an element to be resized by the user, with options to limit to a given direction. "",""spec"":""http://www.w3.org/TR/css3-ui/#resize"",""status"":""cr"",""links"":[{""url"":""http://css-tricks.com/almanac/properties/r/resize/"",""title"":""CSS Tricks info""},{""url"":""http://davidwalsh.name/textarea-resize"",""title"":""On textarea resizing""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6513977-css-resize-property"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y x"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""a #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Presto-based Opera 12.10+ currently only supports the resize property for textarea elements.""},""usage_perc_y"":60.94,""usage_perc_a"":0.16,""ucprefix"":false,""parent"":"""",""keywords"":""horizontal,vertical"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""input-placeholder"":{""title"":""input placeholder attribute"",""description"":""Method of setting placeholder text for text-like input fields, to suggest the expected inserted information."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-input-placeholder"",""status"":""ls"",""links"":[{""url"":""http://www.zachleat.com/web/placeholder/"",""title"":""Article on usage""},{""url"":""https://github.com/mathiasbynens/jquery-placeholder"",""title"":""Polyfill""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-attr-placeholder"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/placeholder"",""title"":""WebPlatform Docs""},{""url"":""https://code.google.com/p/android/issues/detail?id=24626"",""title"":""Issue 24626: Placeholder text for an input type=""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to lacking placeholder support on textarea elements.""},""usage_perc_y"":90.35,""usage_perc_a"":0.63,""ucprefix"":false,""parent"":""forms"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""spdy"":{""title"":""SPDY protocol"",""description"":""Networking protocol for low-latency transport of content over the web. Superseded by HTTP version 2."",""spec"":""http://http2.github.io/http2-spec/index.html"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/HTTP/2"",""title"":""Wikipedia""},{""url"":""http://dev.chromium.org/spdy/spdy-whitepaper"",""title"":""SPDY whitepaper""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""See also support for [HTTP2](http://caniuse.com/#feat=http2), successor of SPDY.\r\n\r\nChrome will be removing support in 2016 (in favor of HTTP2), other browsers likely to follow."",""notes_by_num"":{},""usage_perc_y"":79.14,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""http2"",""chrome_id"":""5152586365665280"",""firefox_id"":"""",""webkit_id"":""""},""css-repeating-gradients"":{""title"":""CSS Repeating Gradients"",""description"":""Method of defining a repeating linear or radial color gradient as a CSS image."",""spec"":""http://www.w3.org/TR/css3-images/#repeating-gradients"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en/CSS/repeating-linear-gradient"",""title"":""MDN article""},{""url"":""http://www.css3files.com/gradient/#repeatinglineargradient"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/repeating-linear-gradient"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""a x"",""11.5"":""a x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a x"",""11.5"":""a x"",""12"":""y x"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""Firefox 10+, Chrome 26+ and Opera 11.6+ also support the new \""to (side)\"" syntax."",""notes_by_num"":{},""usage_perc_y"":90.74,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":""css-gradients"",""keywords"":""repeating-linear-gradient,repeating-radial-gradient"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-filters"":{""title"":""CSS Filter Effects"",""description"":""Method of applying filter effects (like blur, grayscale, brightness, contrast and hue) to elements, previously only possible by using SVG."",""spec"":""http://www.w3.org/TR/filter-effects-1/"",""status"":""wd"",""links"":[{""url"":""http://html5-demos.appspot.com/static/css/filters/index.html"",""title"":""Demo file for WebKit browsers""},{""url"":""http://www.html5rocks.com/en/tutorials/filters/understanding-css/"",""title"":""HTML5Rocks article""},{""url"":""http://dl.dropbox.com/u/3260327/angular/CSS3ImageManipulation.html"",""title"":""Filter editor""},{""url"":""http://bennettfeely.com/filters/"",""title"":""Filter Playground""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n d #2 #4"",""13"":""a #4"",""14"":""a #4""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a #3"",""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""a #3"",""16"":""a #3"",""17"":""a #3"",""18"":""a #3"",""19"":""a #3"",""20"":""a #3"",""21"":""a #3"",""22"":""a #3"",""23"":""a #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""a #3"",""29"":""a #3"",""30"":""a #3"",""31"":""a #3"",""32"":""a #3"",""33"":""a #3"",""34"":""a d #1"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""Note that this property is significantly different from and incompatible with Microsoft's [older \""filter\"" property](http://msdn.microsoft.com/en-us/library/ie/ms530752%28v=vs.85%29.aspx)."",""notes_by_num"":{""1"":""Supported in Firefox under the `layout.css.filters.enabled` flag."",""2"":""Supported in MS Edge under the \""Enable CSS filter property\"" flag."",""3"":""Partial support in Firefox before version 34 [only implemented the url() function of the filter property](https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Browser_compatibility)"",""4"":""Partial support refers to supporting filter functions, but not the `url` function.""},""usage_perc_y"":79.31,""usage_perc_a"":1.78,""ucprefix"":false,""parent"":"""",""keywords"":""sepia,hue-rotate,invert,saturate,filter:blur"",""ie_id"":""filters"",""chrome_id"":""5822463824887808"",""firefox_id"":"""",""webkit_id"":""""},""getcomputedstyle"":{""title"":""getComputedStyle"",""description"":""API to get the current computed CSS styles applied to an element. This may be the current value applied by an animation or as set by a stylesheet."",""spec"":""http://www.w3.org/TR/cssom/#dom-window-getcomputedstyle"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.getComputedStyle"",""title"":""MDN article""},{""url"":""http://ie.microsoft.com/testdrive/HTML5/getComputedStyle/"",""title"":""Demo""},{""url"":""http://snipplr.com/view/13523/"",""title"":""Polyfill for IE""},{""url"":""http://docs.webplatform.org/wiki/css/cssom/methods/getComputedStyle"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3"",""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #2"",""3.2"":""a #2"",""4"":""a #2"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""a #2"",""9.5-9.6"":""a #2"",""10.0-10.1"":""a #2"",""10.5"":""a #2"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a #2"",""4.0-4.1"":""a #2"",""4.2-4.3"":""a #2"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #2""},""android"":{""2.1"":""a #2"",""2.2"":""a #2"",""2.3"":""a #2"",""3"":""a #2"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #2"",""10"":""y""},""op_mob"":{""10"":""a #2"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to requiring the second parameter to be included."",""2"":""Partial support refers to not supporting getComputedStyle on pseudo-elements.""},""usage_perc_y"":91.44,""usage_perc_a"":5.02,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""mp3"":{""title"":""MP3 audio format"",""description"":""Popular lossy audio compression format"",""spec"":""http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html"",""status"":""other"",""links"":[{""url"":""https://en.wikipedia.org/wiki/MP3"",""title"":""Wikipedia""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Support refers to use using the `audio` element, not other conditions."",""notes_by_num"":{""1"":""Partial support in older Firefox refers to being limited to certain operating systems.""},""usage_perc_y"":91.1,""usage_perc_a"":0.34,""ucprefix"":false,""parent"":""audio"",""keywords"":""mpeg"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""word-break"":{""title"":""CSS3 word-break"",""description"":""Property to prevent or allow words to be broken over multiple lines between letters."",""spec"":""http://www.w3.org/TR/css3-text/#word-break"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/CSS/word-break"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/css/properties/word-break"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""y""},""bb"":{""7"":""a"",""10"":""a""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a""}},""notes"":""Partial support refers to supporting the `break-all` value, but not the `keep-all` value.\r\n\r\nChrome, Safari and other WebKit/Blink browsers also support the unofficial `break-word` value which is treated like `word-wrap: break-word`."",""notes_by_num"":{},""usage_perc_y"":74.6,""usage_perc_a"":17.59,""ucprefix"":false,""parent"":"""",""keywords"":""break-all,keep-all"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""viewport-units"":{""title"":""Viewport units: vw, vh, vmin, vmax"",""description"":""Length units representing 1% of the viewport size for viewport width (vw), height (vh), the smaller of the two (vmin), or the larger of the two (vmax)."",""spec"":""http://www.w3.org/TR/css3-values/#viewport-relative-lengths"",""status"":""cr"",""links"":[{""url"":""http://css-tricks.com/viewport-sized-typography/"",""title"":""Blog post""},{""url"":""https://github.com/saabi/vminpoly"",""title"":""Polyfill""},{""url"":""https://github.com/rodneyrehm/viewport-units-buggyfill"",""title"":""Buggyfill - Polyfill that fixes buggy support""},{""url"":""http://blog.rodneyrehm.de/archives/34-iOS7-Mobile-Safari-And-Viewport-Units.html"",""title"":""Back-Forward issue blog post""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514497-vmax-unit"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #2"",""11"":""a #2""},""edge"":{""12"":""a #2"",""13"":""a #2"",""14"":""a #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""a #2"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""a #2 #3"",""7.0-7.1"":""a #3"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #2"",""11"":""a #2""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE9 refers to supporting \""vm\"" instead of \""vmin\""."",""2"":""Partial support refers to not supporting the \""vmax\"" unit. "",""3"":""Partial support in iOS7 is due to buggy behavior of the \""vh\"" unit (see workarounds: [1](https://gist.github.com/pburtchaell/e702f441ba9b3f76f587), [2](https://gist.github.com/BenMorel/e9e34c08360ebbbd0634)).""},""usage_perc_y"":70.62,""usage_perc_a"":9.75,""ucprefix"":false,""parent"":"""",""keywords"":""vm,viewport-percentage"",""ie_id"":""cssvmaxunit"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""contentsecuritypolicy"":{""title"":""Content Security Policy 1.0"",""description"":""Mitigate cross-site scripting attacks by whitelisting allowed sources of script, style, and other resources."",""spec"":""http://www.w3.org/TR/2012/CR-CSP-20121115/"",""status"":""cr"",""links"":[{""url"":""http://html5rocks.com/en/tutorials/security/content-security-policy/"",""title"":""HTML5Rocks article""},{""url"":""http://content-security-policy.com/"",""title"":""CSP Examples & Quick Reference""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y #2"",""15"":""y #2"",""16"":""y #2"",""17"":""y #2"",""18"":""y #2"",""19"":""y #2"",""20"":""y #2"",""21"":""y #2"",""22"":""y #2"",""23"":""y #2"",""24"":""y #2"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #2"",""6"":""y #2"",""6.1"":""y #2"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #2"",""6.0-6.1"":""y #2"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y #2""}},""notes"":""The standard HTTP header is `Content-Security-Policy` which is used unless otherwise noted."",""notes_by_num"":{""1"":""Supported through the `X-Content-Security-Policy` header"",""2"":""Supported through the `X-Webkit-CSP` header""},""usage_perc_y"":81.34,""usage_perc_a"":7.65,""ucprefix"":false,""parent"":"""",""keywords"":""csp,security,header"",""ie_id"":""contentsecuritypolicy"",""chrome_id"":""5205088045891584"",""firefox_id"":"""",""webkit_id"":""""},""pagevisibility"":{""title"":""Page Visibility"",""description"":""JavaScript API for determining whether a document is visible on the display"",""spec"":""http://www.w3.org/TR/page-visibility/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API"",""title"":""MDN article""},{""url"":""https://docs.webplatform.org/wiki/dom/Document/visibilityState"",""title"":""WebPlatform Docs""},{""url"":""http://www.sitepoint.com/introduction-to-page-visibility-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/page-visibility-api-demo.html"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":88.92,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""visibilitystate"",""ie_id"":""pagevisibilityapi"",""chrome_id"":""5689697795833856"",""firefox_id"":""page-visibility"",""webkit_id"":""""},""stricttransportsecurity"":{""title"":""Strict Transport Security"",""description"":""Declare that a website is only accessible over a secure connection (HTTPS)."",""spec"":""https://tools.ietf.org/html/rfc6797"",""status"":""other"",""links"":[{""url"":""http://dev.chromium.org/sts"",""title"":""Chromium article""},{""url"":""https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security"",""title"":""MDN article""},{""url"":""https://www.owasp.org/index.php/HTTP_Strict_Transport_Security"",""title"":""OWASP article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The HTTP header is 'Strict-Transport-Security'."",""notes_by_num"":{""1"":""IE 11 added support [in an update](http://blogs.windows.com/msedgedev/2015/06/09/http-strict-transport-security-comes-to-internet-explorer-11-on-windows-8-1-and-windows-7/) on June 9, 2015""},""usage_perc_y"":78.8,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""sts,hsts,security,header"",""ie_id"":""httpstricttransportsecurityhsts"",""chrome_id"":""4941480133132288"",""firefox_id"":"""",""webkit_id"":""""},""style-scoped"":{""title"":""Scoped CSS"",""description"":""Allows CSS rules to be scoped to part of the document, based on the position of the style element."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#attr-style-scoped"",""status"":""ls"",""links"":[{""url"":""https://github.com/PM5544/scoped-polyfill"",""title"":""Polyfill""},{""url"":""http://html5doctor.com/the-scoped-attribute/"",""title"":""HTML5 Doctor article""},{""url"":""http://updates.html5rocks.com/2012/03/A-New-Experimental-Feature-style-scoped"",""title"":""HTML5Rocks article""}],""categories"":[""CSS"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n d #1"",""21"":""n d #1"",""22"":""n d #1"",""23"":""n d #1"",""24"":""n d #1"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags""},""usage_perc_y"":17.49,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""scope"",""ie_id"":""scopedstyles"",""chrome_id"":""5374137958662144"",""firefox_id"":"""",""webkit_id"":""""},""svg-fragment"":{""title"":""SVG fragment identifiers"",""description"":""Method of displaying only a part of an SVG image by defining a view ID or view box dimensions as the file's fragment identifier."",""spec"":""http://www.w3.org/TR/SVG/linking.html#SVGFragmentIdentifiers"",""status"":""rec"",""links"":[{""url"":""http://www.broken-links.com/2012/08/14/better-svg-sprites-with-fragment-identifiers/"",""title"":""Blog post""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1"",""48"":""a #1"",""49"":""a #1"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #1"",""8"":""a #1"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""a #1""},""bb"":{""7"":""n"",""10"":""a #1""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""y"",""35"":""a #1""},""and_chr"":{""49"":""a #1""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to support inside `<img>` but not as CSS `background-image`""},""usage_perc_y"":23.02,""usage_perc_a"":49.69,""ucprefix"":false,""parent"":"""",""keywords"":""fragments,sprite,svg,use"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""outline"":{""title"":""CSS outline"",""description"":""The CSS outline property is a shorthand property for setting one or more of the individual outline properties outline-style, outline-width and outline-color in a single rule. In most cases the use of this shortcut is preferable and more convenient."",""spec"":""http://www.w3.org/TR/CSS2/ui.html#propdef-outline"",""status"":""rec"",""links"":[{""url"":""http://dev.w3.org/csswg/css3-ui/#outline"",""title"":""CSS Basic User Interface Module Level 3""},{""url"":""https://developer.mozilla.org/en-US/docs/CSS/outline"",""title"":""Mozilla Developer Network: outline""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y #1"",""13"":""y #1"",""14"":""y #1""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Also supports the value of `invert` for `outline-color`. (support of this value is optional for browsers)""},""usage_perc_y"":92.59,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""-moz-outline,outline-width,outline-style,outline-color"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""download"":{""title"":""Download attribute"",""description"":""When used on an anchor, this attribute signifies that the browser should download the resource the anchor points to rather than navigate to it."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#downloading-resources"",""status"":""ls"",""links"":[{""url"":""http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download"",""title"":""HTML5Rocks post""},{""url"":""http://html5-demos.appspot.com/static/a.download.html"",""title"":""Demo: creating a text file and downloading it.""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=102914"",""title"":""WebKit feature request bug""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":61.67,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""download,a.download,a[download],download attribute"",""ie_id"":""adownloadattribute"",""chrome_id"":""6473924464345088"",""firefox_id"":"""",""webkit_id"":""""},""pointer"":{""title"":""Pointer events"",""description"":""This specification integrates various inputs from mice, touchscreens, and pens, making separate implementations no longer necessary and authoring for cross-device pointers easier. Not to be mistaken with the unrelated \""pointer-events\"" CSS property."",""spec"":""http://www.w3.org/TR/pointerevents/"",""status"":""rec"",""links"":[{""url"":""http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx"",""title"":""Implementation of Pointer Events in IE10""},{""url"":""http://blogs.msdn.com/b/eternalcoding/archive/2013/01/16/hand-js-a-polyfill-for-supporting-pointer-events-on-every-browser.aspx"",""title"":""Hand.js, the polyfill for browsers only supporting Touch Events""},{""url"":""http://blogs.msdn.com/b/davrous/archive/2013/02/20/handling-touch-in-your-html5-apps-thanks-to-the-pointer-events-of-ie10-and-windows-8.aspx"",""title"":""Article & tutorial""},{""url"":""http://deeptissuejs.com"",""title"":""Abstraction library for pointer events""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p d #2"",""42"":""p d #2"",""43"":""p d #2"",""44"":""p d #2"",""45"":""p d #2"",""46"":""a #2"",""47"":""a #2"",""48"":""a #2""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""p"",""48"":""p"",""49"":""p"",""50"":""p"",""51"":""p"",""52"":""p""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p"",""9.1"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9.0-9.2"":""p"",""9.3"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""47"":""p""},""bb"":{""7"":""p"",""10"":""p""},""op_mob"":{""10"":""n"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""p""},""and_chr"":{""49"":""p""},""and_ff"":{""45"":""p""},""ie_mob"":{""10"":""a x"",""11"":""y""},""and_uc"":{""9.9"":""p""}},""notes"":""Firefox, starting with version 28, provides the 'dom.w3c_pointer_events.enabled' flag to support this specification."",""notes_by_num"":{""1"":""Partial support in IE10 refers the lack of pointerenter and pointerleave events."",""2"":""Firefox support is disabled by default and [only supports mouse input](https://hacks.mozilla.org/2015/08/pointer-events-now-in-firefox-nightly/). On Windows only, touch can be enabled with the `layers.async-pan-zoom.enabled` and `dom.w3c_touch_events.enabled` flags""},""usage_perc_y"":7.85,""usage_perc_a"":0.79,""ucprefix"":false,""parent"":"""",""keywords"":""pointerdown,pointermove,pointerup,pointercancel,pointerover,pointerout,pointerenter,pointerleave"",""ie_id"":""pointerevents"",""chrome_id"":""4504699138998272"",""firefox_id"":"""",""webkit_id"":""""},""user-select-none"":{""title"":""CSS user-select: none"",""description"":""Method of preventing text/element selection using CSS. "",""spec"":""https://drafts.csswg.org/css-ui-4/#valdef-user-select-none"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/CSS/user-select"",""title"":""MDN article""},{""url"":""http://css-tricks.com/almanac/properties/u/user-select/"",""title"":""CSS Tricks article""},{""url"":""http://msdn.microsoft.com/en-us/library/ie/hh781492(v=vs.85).aspx"",""title"":""MSDN Documentation""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x""},""edge"":{""12"":""y x"",""13"":""y x"",""14"":""y x""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""y x""},""ie_mob"":{""10"":""y x"",""11"":""y x""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":90.85,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""input-file-accept"":{""title"":""accept attribute for file input"",""description"":""Allows a filter to be defined for what type of files a user may pick with from an `<input type=\""file\"">` dialog"",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-input-accept"",""status"":""ls"",""links"":[{""url"":""http://www.wufoo.com/html5/attributes/07-accept.html"",""title"":""Demo & information""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""u"",""22"":""u"",""23"":""u"",""24"":""u"",""25"":""u"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1"",""9.1"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n #3"",""4.0-4.1"":""n #3"",""4.2-4.3"":""n #3"",""5.0-5.1"":""n #3"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #2"",""4"":""a #2"",""4.1"":""a #2"",""4.2-4.3"":""a #2"",""4.4"":""n #3"",""4.4.3-4.4.4"":""n #3"",""47"":""n #3""},""bb"":{""7"":""a #2"",""10"":""a #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a #2""},""and_chr"":{""49"":""a #2""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n #3"",""11"":""a #4""},""and_uc"":{""9.9"":""n""}},""notes"":""Not supported means any file can be picked as if the `accept` attribute was not set, unless otherwise noted.\r\n\r\nOn Windows, files that do not apply are hidden. On OSX they are grayed out and disabled."",""notes_by_num"":{""1"":""Supports the type format (e.g. `image/*`) but not the extension format (e.g. `.png`)"",""2"":""Offers appropriate file locations/input based on format type, but does not prevent other files from being selected."",""3"":""Does not allow any files to be picked at all"",""4"":""Supports the type format but does not allow any file to be picked when using the extension format""},""usage_perc_y"":46.35,""usage_perc_a"":23.07,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""webp"":{""title"":""WebP image format"",""description"":""Image format that supports lossy and lossless compression, as well as animation and alpha transparency."",""spec"":""https://developers.google.com/speed/webp/"",""status"":""unoff"",""links"":[{""url"":""https://developers.google.com/speed/webp/"",""title"":""Official website""},{""url"":""http://antimatter15.github.io/weppy/demo.html"",""title"":""Polyfill for browsers with WebM support""},{""url"":""http://libwebpjs.appspot.com/"",""title"":""Decoder in JS""},{""url"":""http://webpjs.appspot.com/"",""title"":""Polyfill for browsers with or without WebM support (i.e. IE6-IE9, Safari/iOS version 6.1 and below; Firefox versions 24 and bel""},{""url"":""https://developers.google.com/speed/webp/faq#which_web_browsers_natively_support_webp"",""title"":""Official website FAQ - Which web browsers natively support WebP?""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""p"",""48"":""p""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""p"",""11"":""p"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""a #1"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""p""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Animated WebP images are supported in Chrome 32+ and Opera 19+."",""notes_by_num"":{""1"":""Partial support in older Chrome, Opera and Android refers to browsers not supporting lossless and alpha versions of WebP.""},""usage_perc_y"":66.71,""usage_perc_a"":0.8,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""webpimageformatsupport"",""chrome_id"":""6471725441089536,4785074604081152"",""firefox_id"":"""",""webkit_id"":""""},""input-autocomplete-onoff"":{""title"":""autocomplete attribute: on & off values"",""description"":""The `autocomplete` attribute for `input` elements indicates to the browser whether a value should or should not be autofilled when appropriate."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#autofill"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-autocomplete"",""title"":""MDN article""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""a #1""},""edge"":{""12"":""a #1"",""13"":""a #1"",""14"":""a #1""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""a #3"",""31"":""a #3"",""32"":""a #3"",""33"":""a #3"",""34"":""a #3"",""35"":""a #3"",""36"":""a #3"",""37"":""a #3"",""38"":""a #3"",""39"":""a #3"",""40"":""a #3"",""41"":""a #3"",""42"":""a #3"",""43"":""a #3"",""44"":""a #3"",""45"":""a #3"",""46"":""a #3"",""47"":""a #3"",""48"":""a #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #2"",""42"":""a #2"",""43"":""a #2"",""44"":""a #2"",""45"":""a #2"",""46"":""a #2"",""47"":""a #2"",""48"":""a #2"",""49"":""a #2"",""50"":""a #2"",""51"":""a #2"",""52"":""a #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""a #5"",""7.1"":""a #5"",""8"":""a #5"",""9"":""a #5"",""9.1"":""a #5""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y #4"",""6.0-6.1"":""y #4"",""7.0-7.1"":""y #4"",""8"":""y #4"",""8.1-8.4"":""y #4"",""9.0-9.2"":""y #4"",""9.3"":""y #4""},""op_mini"":{""5.0-8.0"":""y #4""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #5"",""11"":""a #5""},""and_uc"":{""9.9"":""y #4""}},""notes"":""This support information does not include support for other `autocomplete` values.\r\n\r\nAs described in detail below, many modern browsers ignore the `off` value on certain fields in certain cases intentionally in order to give the user more control over autofilling fields. One example is the use of password managers."",""notes_by_num"":{""1"":""Partial support refers to ignoring the `off` value for password fields. [see related blog post](http://blogs.msdn.com/b/ieinternals/archive/2009/09/10/troubleshooting-stored-login-problems-in-ie.aspx)"",""2"":""Partial support in Chrome refers to the browser intentionally ignoring `autocomplete=\""off\""` when the user uses the browser's autofill functionality. [see bug](https://code.google.com/p/chromium/issues/detail?id=468153#c29)"",""3"":""Partial support in Firefox refers to ignoring `autocomplete=\""off\""` for login forms. [see bug](https://bugzilla.mozilla.org/show_bug.cgi?id=956906)"",""4"":""Browser does not display previously submitted values as options with `on` value."",""5"":""Safari ignores the `off` value for [username, email and password fields](http://stackoverflow.com/questions/22661977/disabling-safari-autofill-on-usernames-and-passwords)""},""usage_perc_y"":47.89,""usage_perc_a"":49.29,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""intrinsic-width"":{""title"":""Intrinsic & Extrinsic Sizing"",""description"":""Allows for the heights and widths to be specified in intrinsic values using the `fill`, `max-content`, `min-content`, and `fit-content` properties."",""spec"":""http://www.w3.org/TR/css3-sizing/"",""status"":""wd"",""links"":[{""url"":""http://demosthenes.info/blog/662/Design-From-the-Inside-Out-With-CSS-MinContent"",""title"":""Min-Content tutorial""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""a x #1 #2 #3"",""3.5"":""a x #1 #2 #3"",""3.6"":""a x #1 #2 #3"",""4"":""a x #1 #2 #3"",""5"":""a x #1 #2 #3"",""6"":""a x #1 #2 #3"",""7"":""a x #1 #2 #3"",""8"":""a x #1 #2 #3"",""9"":""a x #1 #2 #3"",""10"":""a x #1 #2 #3"",""11"":""a x #1 #2 #3"",""12"":""a x #1 #2 #3"",""13"":""a x #1 #2 #3"",""14"":""a x #1 #2 #3"",""15"":""a x #1 #2 #3"",""16"":""a x #1 #2 #3"",""17"":""a x #1 #2 #3"",""18"":""a x #1 #2 #3"",""19"":""a x #1 #2 #3"",""20"":""a x #1 #2 #3"",""21"":""a x #1 #2 #3"",""22"":""a x #1 #2 #3"",""23"":""a x #1 #2 #3"",""24"":""a x #1 #2 #3"",""25"":""a x #1 #2 #3"",""26"":""a x #1 #2 #3"",""27"":""a x #1 #2 #3"",""28"":""a x #1 #2 #3"",""29"":""a x #1 #2 #3"",""30"":""a x #1 #2 #3"",""31"":""a x #1 #2 #3"",""32"":""a x #1 #2 #3"",""33"":""a x #1 #2 #3"",""34"":""a x #1 #2 #3"",""35"":""a x #1 #2 #3"",""36"":""a x #1 #2 #3"",""37"":""a x #1 #2 #3"",""38"":""a x #1 #2 #3"",""39"":""a x #1 #2 #3"",""40"":""a x #1 #2 #3"",""41"":""a x #1 #2 #3"",""42"":""a x #1 #2 #3"",""43"":""a x #1 #2 #3"",""44"":""a x #1 #2 #3"",""45"":""a x #1 #2 #3"",""46"":""a x #1 #2 #3"",""47"":""a x #1 #2 #3"",""48"":""a x #1 #2 #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y x #3"",""23"":""y x #3"",""24"":""y x #3"",""25"":""y x #3"",""26"":""y x #3"",""27"":""y x #3"",""28"":""y x #3"",""29"":""y x #3"",""30"":""y x #3"",""31"":""y x #3"",""32"":""y x #3"",""33"":""y x #3"",""34"":""y x #3"",""35"":""y x #3"",""36"":""y x #3"",""37"":""y x #3"",""38"":""y x #3"",""39"":""y x #3"",""40"":""y x #3"",""41"":""y x #3"",""42"":""y x #3"",""43"":""y x #3"",""44"":""y x #3"",""45"":""y x #3"",""46"":""y #3 #4"",""47"":""y #3 #4"",""48"":""y #3 #4"",""49"":""y #3 #4"",""50"":""y #3 #4"",""51"":""y #3 #4"",""52"":""y #3 #4""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a x #1 #3"",""7"":""a x #1 #3"",""7.1"":""a x #1 #3"",""8"":""a x #1 #3"",""9"":""a x #3"",""9.1"":""a x #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x #3"",""16"":""y x #3"",""17"":""y x #3"",""18"":""y x #3"",""19"":""y x #3"",""20"":""y x #3"",""21"":""y x #3"",""22"":""y x #3"",""23"":""y x #3"",""24"":""y x #3"",""25"":""y x #3"",""26"":""y x #3"",""27"":""y x #3"",""28"":""y x #3"",""29"":""y x #3"",""30"":""y x #3"",""31"":""y x #3"",""32"":""y x #3"",""33"":""y #3 #4"",""34"":""y #3"",""35"":""y #3 #4"",""36"":""y #3 #4"",""37"":""y #3 #4""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a x #1 #3"",""8"":""a x #1 #3"",""8.1-8.4"":""a x #1 #3"",""9.0-9.2"":""a x #3"",""9.3"":""a x #3""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x #3"",""4.4.3-4.4.4"":""y x #3"",""47"":""y #3 #4""},""bb"":{""7"":""n"",""10"":""y x #3""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y #3 #4""},""and_chr"":{""49"":""y #3 #4""},""and_ff"":{""45"":""a x #1 #2 #3""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Prefixes are on the values, not the property names (e.g. -webkit-min-content)\r\n\r\nOlder webkit browsers also support the unofficial `intrinsic` value which acts the same as `max-content`."",""notes_by_num"":{""1"":""Does not support for height/min-height/max-height property, only width. [see test case](http://codepen.io/shshaw/pen/Kiwaz) [Firefox bug](https://bugzilla.mozilla.org/show_bug.cgi?id=567039)"",""2"":""Firefox currently supports the \""-moz-available\"" property rather than \""-moz-fill\""."",""3"":""Does not support for \""flex-basis\"" property. [see specs](http://www.w3.org/TR/2015/WD-css-flexbox-1-20150514/#flex-basis-property).\r\n[Blink bug](https://codereview.chromium.org/1304853002/),[Firefox bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1055887)"",""4"":""This does not yet unprefix fill-available (aka fill)[See bug](https://chromium.googlesource.com/chromium/blink.git/+/bf119cdfece210e69c9a99af06f1b9981e2a1bc2), because the [CSSWG](https://lists.w3.org/Archives/Public/www-style/2015Aug/0127.html) is not ready for that yet.""},""usage_perc_y"":52.11,""usage_perc_a"":19.23,""ucprefix"":false,""parent"":"""",""keywords"":""fill,fill-available,max-content,min-content,fit-content,contain-floats,intrinsic,extrinsic,sizing"",""ie_id"":""cssintrinsicsizing"",""chrome_id"":""5901353784180736"",""firefox_id"":"""",""webkit_id"":""""},""cryptography"":{""title"":""Web Cryptography"",""description"":""JavaScript API for performing basic cryptographic operations in web applications"",""spec"":""http://www.w3.org/TR/WebCryptoAPI/"",""status"":""cr"",""links"":[{""url"":""http://www.slideshare.net/Channy/the-history-and-status-of-web-crypto-api"",""title"":""The History and Status of Web Crypto API""},{""url"":""http://research.microsoft.com/en-us/projects/msrjscrypto/"",""title"":""Microsoft Research JavaScript Cryptography Library""},{""url"":""http://bitwiseshiftleft.github.io/sjcl/"",""title"":""Cross-browser cryptography library""},{""url"":""https://docs.google.com/spreadsheet/ccc?key=0AiAcidBZRLxndE9LWEs2R1oxZ0xidUVoU3FQbFFobkE#gid=1"",""title"":""Support for recommended algorithms in Firefox""},{""url"":""https://github.com/Netflix/NfWebCrypto"",""title"":""Polyfill by Netflix with partial support""},{""url"":""https://github.com/GlobalSign/PKI.js"",""title"":""PKI.js - another crypto library for Public Key Infrastructure applications""},{""url"":""https://diafygi.github.io/webcrypto-examples/"",""title"":""Test suite for various algorithms/methods""},{""url"":""https://github.com/vibornoff/webcrypto-shim"",""title"":""Web Cryptography API shim for IE11 and Safari - set of bugfixes and workarounds of prefixed api implementations""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""a x #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""n d #2"",""33"":""n d #2"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""y x #3"",""8"":""y x #3"",""9"":""y x #3"",""9.1"":""y x #3""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""y x #3"",""8.1-8.4"":""y x #3"",""9.0-9.2"":""y x #3"",""9.3"":""y x #3""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""47"":""y""},""bb"":{""7"":""p"",""10"":""p""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""p""},""ie_mob"":{""10"":""p"",""11"":""a x #1""},""and_uc"":{""9.9"":""p""}},""notes"":""Many browsers support the `[crypto.getRandomValues()](#feat=getrandomvalues)` method, but not actual cryptography functionality under `crypto.subtle`. \r\n\r\nFirefox also has support for [unofficial features](https://developer.mozilla.org/en-US/docs/JavaScript_crypto). \r\n\r\nIn Chrome the API is only usable over secure connections. ([corresponding bug](https://code.google.com/p/chromium/issues/detail?id=373032))"",""notes_by_num"":{""1"":""Support in IE11 is based an older version of the specification."",""2"":""Supported in Firefox behind the `dom.webcrypto.enabled` flag."",""3"":""Supported in Safari using the `crypto.webkitSubtle` prefix.""},""usage_perc_y"":67.3,""usage_perc_a"":6.73,""ucprefix"":false,""parent"":"""",""keywords"":""subtle,subtlecrypto"",""ie_id"":""webcryptoapi"",""chrome_id"":""5030265697075200"",""firefox_id"":"""",""webkit_id"":""specification-webcrypto""},""template"":{""title"":""HTML templates"",""description"":""Method of declaring a portion of reusable markup that is parsed but not rendered until cloned."",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#the-template-element"",""status"":""ls"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/webcomponents/template/"",""title"":""HTML5Rocks - HTML's New template Tag""},{""url"":""http://polymer-project.org"",""title"":""Polymer project (polyfill & web components framework)""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":71.24,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web components, template"",""ie_id"":""templateelement"",""chrome_id"":""5207287069147136"",""firefox_id"":""html-templates"",""webkit_id"":""feature-template-element""},""opus"":{""title"":""Opus"",""description"":""Royalty-free open audio codec by IETF, which incorporated SILK from Skype and CELT from Xiph.org, to serve higher sound quality and lower latency at the same bitrate."",""spec"":""https://tools.ietf.org/html/rfc6716"",""status"":""other"",""links"":[{""url"":""https://hacks.mozilla.org/2012/07/firefox-beta-15-supports-the-new-opus-audio-format/"",""title"":""Introduction of Opus by Mozilla""},{""url"":""http://www.ietf.org/mail-archive/web/rtcweb/current/msg04953.html"",""title"":""Google's statement about the use of VP8 and Opus codec for WebRTC standard""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6513488-ogg-vorbis-and-opus-audio-formats-support-firefox"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Support refers to use using the `audio` element, not other conditions.\r\n\r\nFor Opera the Linux version may be able to play it when the GStreamer module is up to date and the served mime-type is 'audio/ogg'."",""notes_by_num"":{},""usage_perc_y"":39.99,""usage_perc_a"":0,""ucprefix"":false,""parent"":""audio"",""keywords"":"""",""ie_id"":""opusaudioplayback"",""chrome_id"":""4891189287321600"",""firefox_id"":"""",""webkit_id"":""""},""jpegxr"":{""title"":""JPEG XR image format"",""description"":""The latest JPEG image format of Joint Photographic Experts Group which boasts better compression and supports lossless compression, alpha channel, and 48-bit deep color over normal jpg format."",""spec"":""http://www.itu.int/rec/T-REC-T.832"",""status"":""other"",""links"":[{""url"":""http://msdn.microsoft.com/en-us/library/windows/desktop/hh707223(v=vs.85).aspx"",""title"":""Microsoft JPEG XR Codec Overview""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":9.28,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""channel-messaging"":{""title"":""Channel messaging"",""description"":""Method for having two-way communication between browsing contexts (using MessageChannel)"",""spec"":""https://html.spec.whatwg.org/multipage/comms.html#channel-messaging"",""status"":""ls"",""links"":[{""url"":""https://dev.opera.com/articles/view/window-postmessage-messagechannel/#channel"",""title"":""An Introduction to HTML5 web messaging""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""u"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Supported in Firefox behind the `dom.messageChannel.enabled` flag. Reported to not work in web workers before version 41.""},""usage_perc_y"":87.9,""usage_perc_a"":0,""ucprefix"":false,""parent"":""x-doc-messaging"",""keywords"":"""",""ie_id"":""messagechannels"",""chrome_id"":""6710044586409984"",""firefox_id"":"""",""webkit_id"":""""},""css3-tabsize"":{""title"":""CSS3 tab-size"",""description"":""Method of customizing the width of the tab character. Only effective using 'white-space: pre' or 'white-space: pre-wrap'."",""spec"":""http://www.w3.org/TR/css3-text/#tab-size"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/tab-size"",""title"":""MDN article""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6524689-tab-size-property"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1"",""9.1"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""a x #1"",""11"":""a x #1"",""11.1"":""a x #1"",""11.5"":""a x #1"",""11.6"":""a x #1"",""12"":""a x #1"",""12.1"":""a x #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1""},""op_mini"":{""5.0-8.0"":""a x #1""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a #1"",""4.4.3-4.4.4"":""a #1"",""47"":""a #1""},""bb"":{""7"":""a #1"",""10"":""a #1""},""op_mob"":{""10"":""n"",""11"":""a x #1"",""11.1"":""a x #1"",""11.5"":""a x #1"",""12"":""a x #1"",""12.1"":""a x #1"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""a x #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial refers to supporting `<integer>` but not `<length>` values.""},""usage_perc_y"":47.75,""usage_perc_a"":28.57,""ucprefix"":false,""parent"":"""",""keywords"":""tab-size,tab-width"",""ie_id"":""csstabsizeproperty"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""mutationobserver"":{""title"":""Mutation Observer"",""description"":""Method for observing and reacting to changes to the DOM. Replaces MutationEvents, which is deprecated."",""spec"":""https://dom.spec.whatwg.org/#mutation-observers"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver"",""title"":""MutationObserver from MDN""},{""url"":""https://github.com/webcomponents/webcomponentsjs"",""title"":""Polyfill""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""p"",""10"":""p"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""p"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""When the content of a node with a single CharacterData child node is changed by innerHTML attribute and the node have a single different one as a result, WebKit browsers consider it as a characterData mutation of the child CharacterData node, while other browsers think it as a childList mutation of the parent node."",""notes_by_num"":{},""usage_perc_y"":87.92,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""MutationObserver"",""ie_id"":""mutationobservers"",""chrome_id"":""5021194726146048"",""firefox_id"":"""",""webkit_id"":""""},""css-selection"":{""title"":""::selection CSS pseudo-element"",""description"":""The ::selection CSS pseudo-element applies rules to the portion of a document that has been highlighted (e.g., selected with the mouse or another pointing device) by the user."",""spec"":""http://www.w3.org/TR/css-pseudo-4/#selectordef-selection"",""status"":""wd"",""links"":[{""url"":""http://quirksmode.org/css/selectors/selection.html"",""title"":""::selection test""},{""url"":""http://docs.webplatform.org/wiki/css/selectors/pseudo-elements/::selection"",""title"":""WebPlatform Docs""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""u"",""11.1"":""u"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y x""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":73.27,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""::selection,selection"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-placeholder"":{""title"":""::placeholder CSS pseudo-element"",""description"":""The ::placeholder pseudo-element represents placeholder text in an input field: text that represents the input and provides a hint to the user on how to fill out the form. For example, a date-input field might have the placeholder text `YYYY/MM/DD` to clarify that numeric dates are to be entered in year-month-day order."",""spec"":""http://dev.w3.org/csswg/css-pseudo-4/#placeholder-pseudo"",""status"":""wd"",""links"":[{""url"":""http://msdn.microsoft.com/en-us/library/ie/hh772745(v=vs.85).aspx"",""title"":""MSDN article""},{""url"":""http://css-tricks.com/snippets/css/style-placeholder-text/"",""title"":""CSS-Tricks article with all prefixes""},{""url"":""http://wiki.csswg.org/ideas/placeholder-styling"",""title"":""CSSWG discussion""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/::-moz-placeholder"",""title"":""MDN article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x"",""11"":""a x""},""edge"":{""12"":""a x"",""13"":""a x"",""14"":""a x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x"",""38"":""a x"",""39"":""a x"",""40"":""a x"",""41"":""a x"",""42"":""a x"",""43"":""a x"",""44"":""a x"",""45"":""a x"",""46"":""a x"",""47"":""a x"",""48"":""a x"",""49"":""a x"",""50"":""a x"",""51"":""a x"",""52"":""a x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a x"",""5.1"":""a x"",""6"":""a x"",""6.1"":""a x"",""7"":""a x"",""7.1"":""a x"",""8"":""a x"",""9"":""a x"",""9.1"":""a x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a x"",""5.0-5.1"":""a x"",""6.0-6.1"":""a x"",""7.0-7.1"":""a x"",""8"":""a x"",""8.1-8.4"":""a x"",""9.0-9.2"":""a x"",""9.3"":""a x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""47"":""a x""},""bb"":{""7"":""a x"",""10"":""a x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a x""},""and_chr"":{""49"":""a x""},""and_ff"":{""45"":""y x""},""ie_mob"":{""10"":""a x"",""11"":""a x""},""and_uc"":{""9.9"":""a x""}},""notes"":""Partial support refers to using alternate names:\r\n`::-webkit-input-placeholder` for (Chrome/Safari/Opera)\r\n`:-ms-input-placeholder` for IE. \r\n`::-ms-input-placeholder` for Edge (also supports webkit prefix)"",""notes_by_num"":{""1"":""Firefox 18 and below supported the `:-moz-placeholder` pseudo-class rather than the `::-moz-placeholder` pseudo-element.""},""usage_perc_y"":8.65,""usage_perc_a"":82.08,""ucprefix"":false,""parent"":"""",""keywords"":""::placeholder,placeholder"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-deviceadaptation"":{""title"":""CSS Device Adaptation"",""description"":""A standard way to override the size of viewport in web page using the `@viewport` rule, standardizing and replacing Apple's own popular `<meta>` viewport implementation."",""spec"":""http://www.w3.org/TR/css-device-adapt/"",""status"":""wd"",""links"":[{""url"":""https://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/"",""title"":""Introduction to meta viewport and @viewport in Opera Mobile""},{""url"":""http://msdn.microsoft.com/en-us/library/ie/hh708740(v=vs.85).aspx"",""title"":""Device adaptation in Internet Explorer 10""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6777420-unprefix-and-support-all-viewport-properties"",""title"":""Microsoft Edge feature request on UserVoice""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=155477"",""title"":""Chrome tracking bug""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=95959"",""title"":""WebKit tracking bug""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=747754"",""title"":""Mozilla tracking bug""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #1""},""edge"":{""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d"",""30"":""n d"",""31"":""n d"",""32"":""n d"",""33"":""n d"",""34"":""n d"",""35"":""n d"",""36"":""n d"",""37"":""n d"",""38"":""n d"",""39"":""n d"",""40"":""n d"",""41"":""n d"",""42"":""n d"",""43"":""n d"",""44"":""n d"",""45"":""n d"",""46"":""n d"",""47"":""n d"",""48"":""n d"",""49"":""n d"",""50"":""n d"",""51"":""n d"",""52"":""n d""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""a x #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""a x #2"",""11.1"":""a x #2"",""11.5"":""a x #2"",""12"":""a x #2"",""12.1"":""a x #2"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""a x #1"",""11"":""a x #1""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""IE only supports the 'width' and 'height' properties."",""2"":""Opera Mobile and Opera Mini only support the 'orientation' property.""},""usage_perc_y"":0,""usage_perc_a"":13.36,""ucprefix"":false,""parent"":"""",""keywords"":""viewport"",""ie_id"":"""",""chrome_id"":""4737164243894272"",""firefox_id"":"""",""webkit_id"":""""},""text-emphasis"":{""title"":""text-emphasis styling"",""description"":""Method of using small symbols next to each glyph to emphasize a run of text, commonly used in East Asian languages. The `text-emphasis` shorthand, and its `text-emphasis-style` and `text-emphasis-color` longhands, can be used to apply marks to the text. The `text-emphasis-position` property, which inherits separately, allows setting the emphasis marks' position with respect to the text."",""spec"":""https://drafts.csswg.org/css-text-decor-3/#text-emphasis-property"",""status"":""cr"",""links"":[{""url"":""https://github.com/zmmbreeze/jquery.emphasis/"",""title"":""A javascript fallback for CSS3 emphasis mark.""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514536-text-decoration-styling"",""title"":""Microsoft Edge feature request on UserVoice""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-emphasis"",""title"":""Mozilla Developer Network""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n d #2"",""46"":""n d #2"",""47"":""n d #2"",""48"":""n d #2""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1"",""49"":""a x #1"",""50"":""a x #1"",""51"":""a x #1"",""52"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a x #1"",""4.4.3-4.4.4"":""a x #1"",""47"":""a x #1""},""bb"":{""7"":""n"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a x #1""},""and_chr"":{""49"":""a x #1""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x #1""}},""notes"":""Some old WebKit browsers (like Chrome 24) support `-webkit-text-emphasis`, but does not support CJK languages and is therefore considered unsupported."",""notes_by_num"":{""1"":""Partial support refers to incorrect support for `-webkit-text-emphasis-position`. These browsers support `over` and `under` as values, but not the added `left` and `right` values required by the spec."",""2"":""Can be enabled in Firefox using the `layout.css.text-emphasis.enabled` flag""},""usage_perc_y"":10.12,""usage_perc_a"":61.05,""ucprefix"":false,""parent"":"""",""keywords"":""text-emphasis,text-emphasis-position,text-emphasis-style,text-emphasis-color"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""midi"":{""title"":""Web MIDI API"",""description"":""The Web MIDI API specification defines a means for web developers to enumerate, manipulate and access MIDI devices"",""spec"":""http://webaudio.github.io/web-midi-api/"",""status"":""wd"",""links"":[{""url"":""https://github.com/cwilso/WebMIDIAPIShim"",""title"":""Polyfill""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=836897"",""title"":""Firefox bug""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":47.6,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""webmidiapi"",""chrome_id"":""4923613069180928"",""firefox_id"":"""",""webkit_id"":""""},""canvas-blending"":{""title"":""Canvas blend modes"",""description"":""Method of defining the effect resulting from overlaying two layers on a Canvas element."",""spec"":""http://www.w3.org/TR/compositing-1/#blending"",""status"":""cr"",""links"":[{""url"":""http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/"",""title"":""Blog post""}],""categories"":[""Canvas""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":71.63,""usage_perc_a"":0,""ucprefix"":false,""parent"":""canvas"",""keywords"":"""",""ie_id"":""compositingandblendingincanvas2d"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""clipboard"":{""title"":""Clipboard API"",""description"":""API to provide copy, cut and paste events as well as provide access to the OS clipboard."",""spec"":""http://www.w3.org/TR/clipboard-apis/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent"",""title"":""MDN page on ClipboardEvent""},{""url"":""https://www.lucidchart.com/techblog/2014/12/02/definitive-guide-copying-pasting-javascript/"",""title"":""Guide on cross-platform clipboard access""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""a #1 #2 #5"",""6"":""a #1 #2 #5"",""7"":""a #1 #2 #5"",""8"":""a #1 #2 #5"",""9"":""a #1 #2 #5"",""10"":""a #1 #2 #5"",""11"":""a #1 #2 #5""},""edge"":{""12"":""a #1 #2 #5"",""13"":""a #1 #2 #5"",""14"":""a #1 #2 #5""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""a #2 #3"",""23"":""a #2 #3"",""24"":""a #2 #3"",""25"":""a #2 #3"",""26"":""a #2 #3"",""27"":""a #2 #3"",""28"":""a #2 #3"",""29"":""a #2 #3"",""30"":""a #2 #3"",""31"":""a #2 #3"",""32"":""a #2 #3"",""33"":""a #2 #3"",""34"":""a #2 #3"",""35"":""a #2 #3"",""36"":""a #2 #3"",""37"":""a #2 #3"",""38"":""a #2 #3"",""39"":""a #2 #3"",""40"":""a #2 #3"",""41"":""a #6"",""42"":""a #6"",""43"":""a #6"",""44"":""a #6"",""45"":""a #6"",""46"":""a #6"",""47"":""a #6"",""48"":""a #6""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""a #3 #5"",""14"":""a #3 #5"",""15"":""a #3 #5"",""16"":""a #3 #5"",""17"":""a #3 #5"",""18"":""a #3 #5"",""19"":""a #3 #5"",""20"":""a #3 #5"",""21"":""a #3 #5"",""22"":""a #3 #5"",""23"":""a #3 #5"",""24"":""a #3 #5"",""25"":""a #3 #5"",""26"":""a #3 #5"",""27"":""a #3 #5"",""28"":""a #3 #5"",""29"":""a #3 #5"",""30"":""a #3 #5"",""31"":""a #3 #5"",""32"":""a #3 #5"",""33"":""a #3 #5"",""34"":""a #3 #5"",""35"":""a #3 #5"",""36"":""a #3 #5"",""37"":""a #3 #5"",""38"":""a #3 #5"",""39"":""a #3 #5"",""40"":""a #3 #5"",""41"":""a #3 #5"",""42"":""a #3 #5"",""43"":""a #5 #7"",""44"":""a #5 #7"",""45"":""a #5 #7"",""46"":""a #5 #7"",""47"":""a #5 #7"",""48"":""a #5 #7"",""49"":""a #5 #7"",""50"":""a #5 #7"",""51"":""a #5 #7"",""52"":""a #5 #7""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""a #2 #3 #5"",""5"":""a #2 #3 #5"",""5.1"":""a #2 #3 #5"",""6"":""a #2 #3 #5"",""6.1"":""a #2 #3 #5"",""7"":""a #2 #3 #5"",""7.1"":""a #2 #3 #5"",""8"":""a #2 #3 #5"",""9"":""a #2 #3 #5"",""9.1"":""a #2 #3 #5""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""u"",""12.1"":""a #3"",""15"":""a #3 #5"",""16"":""a #3 #5"",""17"":""a #3 #5"",""18"":""a #3 #5"",""19"":""a #3 #5"",""20"":""a #3 #5"",""21"":""a #3 #5"",""22"":""a #3 #5"",""23"":""a #3 #5"",""24"":""a #3 #5"",""25"":""a #3 #5"",""26"":""a #3 #5"",""27"":""a #3 #5"",""28"":""a #3 #5"",""29"":""a #3 #5"",""30"":""a #5 #7"",""31"":""a #5 #7"",""32"":""a #5 #7"",""33"":""a #5 #7"",""34"":""a #5 #7"",""35"":""a #5 #7"",""36"":""a #5 #7"",""37"":""a #5 #7""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #2 #3 #5"",""6.0-6.1"":""a #2 #3 #5"",""7.0-7.1"":""a #2 #3 #5"",""8"":""a #2 #3 #5"",""8.1-8.4"":""a #2 #3 #5"",""9.0-9.2"":""a #2 #3 #5"",""9.3"":""a #2 #3 #5""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a #2 #5"",""4.4.3-4.4.4"":""a #2 #5"",""47"":""a #2 #5""},""bb"":{""7"":""n"",""10"":""a #2 #5""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""u"",""35"":""a #4 #5""},""and_chr"":{""49"":""a #5""},""and_ff"":{""45"":""a #4""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Internet Explorer will display a security prompt for access to the OS clipboard.\r\n\r\nChrome 42+ and Opera 29+ support clipboard reading/writing only when part of a user action (click, keydown, etc)\r\n\r\nFirefox users [can enable support](https://developer.mozilla.org/en-US/docs/Midas/Security_preferences) with a security preference setting."",""notes_by_num"":{""1"":""Only supports `Text` and `URL` data types and uses [a non-standard method](http://msdn.microsoft.com/en-us/library/ie/ms535220%28v=vs.85%29.aspx) of interacting with the clipboard."",""2"":""Only fires `copy` event on a valid selection and only `cut` and `paste` in focused editable fields."",""3"":""Only supports OS clipboard reading/writing via shortcut keys, not through `document.execCommand()`."",""4"":""Only supports `paste` event (on focused editable field)."",""5"":""Does not support the `ClipboardEvent` constructor"",""6"":""Supports `cut` & `copy` events without a focused editable field, but not `paste` (presumably for security reasons)"",""7"":""Supports `cut` & `copy` events without a focused editable field, but does not fire `paste` with `document.execCommand('paste')`  ""},""usage_perc_y"":0,""usage_perc_a"":80.84,""ucprefix"":false,""parent"":"""",""keywords"":""cut,copy,paste,clipboarddata,clipboardevent"",""ie_id"":""clipboardapi"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""rtcpeerconnection"":{""title"":""WebRTC Peer-to-peer connections"",""description"":""Method of allowing two users to communicate directly, browser to browser using the RTCPeerConnection API."",""spec"":""https://w3c.github.io/webrtc-pc/"",""status"":""wd"",""links"":[{""url"":""http://www.webrtc.org/"",""title"":""WebRTC Project site""},{""url"":""https://temasys.atlassian.net/wiki/display/TWPP/WebRTC+Plugins"",""title"":""Plug-in for support in IE & Safari""},{""url"":""http://www.html5labs.com/prototypes/object-rtc/object-rtc/info"",""title"":""Prototype implementation for ORTC""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y x""},""bb"":{""7"":""n"",""10"":""n #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Microsoft is working on a compatible implementation known as [ObjectRTC](http://blogs.msdn.com/b/ie/archive/2014/10/27/bringing-interoperable-real-time-communications-to-the-web.aspx)"",""notes_by_num"":{""1"":""BlackBerry 10 recognizes RTCPeerConnection but real support is unconfirmed.""},""usage_perc_y"":57.9,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""webrtcwebrtcv10api"",""chrome_id"":""6612462929444864"",""firefox_id"":""webrtc"",""webkit_id"":""specification-webrtc""},""css3-cursors"":{""title"":""CSS3 Cursors (original values)"",""description"":""CSS3 cursor values added in the 2004 spec, including none, context-menu, cell, vertical-text, alias, copy, no-drop, not-allowed, nesw-resize, nwse-resize, col-resize, row-resize and all-scroll. "",""spec"":""http://www.w3.org/TR/css3-ui/#cursor"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/cursor"",""title"":""MDN Documentation""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""a #2"",""13"":""a #2"",""14"":""a #2""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""a"",""3.6"":""a"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""a #2"",""9.5-9.6"":""a #2"",""10.0-10.1"":""a #2"",""10.5"":""a #2"",""10.6"":""a #2"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""11.6"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""u""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to no support for the alias, cell, copy, ew-resize, ns-resize, nesw-resize, nwse-resize or context-menu cursors."",""2"":""Partial support refers to not supporting 'none' nor a URI.""},""usage_perc_y"":50.76,""usage_perc_a"":2.43,""ucprefix"":false,""parent"":"""",""keywords"":""cursors, pointers"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css3-cursors-newer"":{""title"":""CSS3 Cursors: zoom-in & zoom-out"",""description"":""Support for `zoom-in`, `zoom-out` values for the CSS3 `cursor` property."",""spec"":""http://www.w3.org/TR/css3-ui/#cursor"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/cursor"",""title"":""MDN Documentation""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":44.93,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""cursors, pointers"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""webvtt"":{""title"":""WebVTT - Web Video Text Tracks"",""description"":""Format for marking up text captions for multimedia resources."",""spec"":""https://w3c.github.io/webvtt/"",""status"":""wd"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/track/basics/"",""title"":""Getting Started With the Track Element""},{""url"":""https://dev.opera.com/articles/view/an-introduction-to-webvtt-and-track/"",""title"":""An Introduction to WebVTT and track""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n d"",""25"":""n d"",""26"":""n d"",""27"":""n d"",""28"":""n d"",""29"":""n d"",""30"":""n d"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1"",""43"":""y #1"",""44"":""y #1"",""45"":""y #1"",""46"":""y #1"",""47"":""y #1"",""48"":""y #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""WebVTT must be used with the <track> element."",""notes_by_num"":{""1"":""Firefox currently lacks support for the `::cue` pseudo-element. [See bug #865395.](https://bugzilla.mozilla.org/show_bug.cgi?id=865395)""},""usage_perc_y"":79.26,""usage_perc_a"":0,""ucprefix"":false,""parent"":""video"",""keywords"":""captions,track,vtt,subtitles"",""ie_id"":"""",""chrome_id"":""6719115557339136"",""firefox_id"":"""",""webkit_id"":""""},""promises"":{""title"":""Promises"",""description"":""A promise represents the eventual result of an asynchronous operation."",""spec"":""http://www.ecma-international.org/ecma-262/6.0/#sec-promise-objects"",""status"":""other"",""links"":[{""url"":""http://promises-aplus.github.io/promises-spec/"",""title"":""Promises/A+ spec""},{""url"":""http://www.chromestatus.com/features/5681726336532480"",""title"":""Chromium dashboard - ES6 Promises""},{""url"":""http://www.html5rocks.com/en/tutorials/es6/promises/"",""title"":""JavaScript Promises: There and back again - HTML5 Rocks""},{""url"":""https://github.com/jakearchibald/ES6-Promises"",""title"":""A polyfill for ES6-style Promises""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""a"",""28"":""a"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""a"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""a"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""p"",""10"":""p""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""p""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":68.97,""usage_perc_a"":0.09,""ucprefix"":false,""parent"":"""",""keywords"":""futures"",""ie_id"":"""",""chrome_id"":""5681726336532480"",""firefox_id"":""promise"",""webkit_id"":""""},""css-sticky"":{""title"":""CSS position:sticky"",""description"":""Keeps elements positioned as \""fixed\"" or \""relative\"" depending on how it appears in the viewport. As a result the element is \""stuck\"" when necessary while scrolling."",""spec"":""https://drafts.csswg.org/css-position/#sticky-pos"",""status"":""unoff"",""links"":[{""url"":""http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit"",""title"":""HTML5Rocks""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/position"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/css/properties/position"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/filamentgroup/fixed-sticky"",""title"":""Polyfill""},{""url"":""https://github.com/wilddeer/stickyfill"",""title"":""Another polyfill""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n d #2"",""24"":""n d #2"",""25"":""n d #2"",""26"":""n d #2"",""27"":""n d #2"",""28"":""n d #2"",""29"":""n d #2"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""n d #2"",""35"":""n d #2"",""36"":""n d #2"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox by setting the about:config preference layout.css.sticky.enabled to true"",""2"":""Enabled in Chrome 23-36 through the \""experimental Web Platform features\"" flag in chrome://flags (removed in 37+)""},""usage_perc_y"":18.4,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""positionsticky"",""chrome_id"":""6190250464378880"",""firefox_id"":"""",""webkit_id"":""feature-position:-sticky""},""dialog"":{""title"":""Dialog element"",""description"":""Method of easily creating custom dialog boxes to display to the user with modal or non-modal options. Also includes a `::backdrop` pseudo-element for behind the element."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-dialog-element"",""status"":""ls"",""links"":[{""url"":""https://github.com/GoogleChrome/dialog-polyfill"",""title"":""Polyfill""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n d #2"",""20"":""n d #2"",""21"":""n d #2"",""22"":""n d #2"",""23"":""n d #2"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled through the \""Experimental Web Platform features\"" flag in `chrome://flags`"",""2"":""Enabled through the \""Experimental Web Platform features\"" flag in `opera://flags`""},""usage_perc_y"":48.38,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""HTMLDialogElement,showModal,backdrop"",""ie_id"":""dialogelementformodals"",""chrome_id"":""5770237022568448"",""firefox_id"":"""",""webkit_id"":""""},""css-variables"":{""title"":""CSS Variables (Custom Properties)"",""description"":""Permits the declaration and usage of cascading variables in stylesheets."",""spec"":""https://drafts.csswg.org/css-variables/"",""status"":""wd"",""links"":[{""url"":""https://hacks.mozilla.org/2013/12/css-variables-in-firefox-nightly/"",""title"":""Mozilla hacks article (older syntax)""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables"",""title"":""MDN article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n d #1"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n d #1"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled through the \""Experimental Web Platform features\"" flag in `chrome://flags`""},""usage_perc_y"":26.01,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""css variables,custom properties"",""ie_id"":""cssvariables"",""chrome_id"":""6401356696911872"",""firefox_id"":"""",""webkit_id"":""""},""vibration"":{""title"":""Vibration API"",""description"":""Method to access the vibration mechanism of the hosting device."",""spec"":""http://www.w3.org/TR/vibration/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Guide/API/Vibration"",""title"":""MDN article""},{""url"":""http://davidwalsh.name/vibration-api"",""title"":""Vibration API sample code & demo""},{""url"":""http://code.tutsplus.com/tutorials/html5-vibration-api--mobile-22585"",""title"":""Tuts+ article""},{""url"":""http://aurelio.audero.it/demo/vibration-api-demo.html"",""title"":""Demo""},{""url"":""http://www.illyism.com/journal/vibration-api"",""title"":""Article and Usage Examples""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":69.53,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""vibration,mobile,device"",""ie_id"":""vibrationapi"",""chrome_id"":""5698768766763008"",""firefox_id"":""vibration"",""webkit_id"":""""},""css-backgroundblendmode"":{""title"":""CSS background-blend-mode"",""description"":""Allows blending between CSS background images, gradients, and colors."",""spec"":""http://www.w3.org/TR/compositing-1/#propdef-background-blend-mode"",""status"":""cr"",""links"":[{""url"":""http://codepen.io/bennettfeely/pen/rxoAc"",""title"":""codepen example""},{""url"":""https://medium.com/web-design-technique/6b51bf53743a"",""title"":""Blog post""},{""url"":""http://bennettfeely.com/gradients"",""title"":""Demo""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""a #2"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1"",""9.1"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""a #2"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a #2""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial in Safari refers to not supporting the `hue`, `saturation`, `color`, and `luminosity` blend modes."",""2"":""Chrome 46 has some [serious bugs](https://code.google.com/p/chromium/issues/detail?id=543583) with multiply, difference, and exclusion blend modes""},""usage_perc_y"":56.37,""usage_perc_a"":10.34,""ucprefix"":false,""parent"":"""",""keywords"":""css blend modes,css blending modes,blending,multiply,screen,background"",""ie_id"":"""",""chrome_id"":""5768037999312896"",""firefox_id"":"""",""webkit_id"":""""},""css-mixblendmode"":{""title"":""Blending of HTML/SVG elements"",""description"":""Allows blending between arbitrary SVG and HTML elements"",""spec"":""http://www.w3.org/TR/compositing-1/#mix-blend-mode"",""status"":""cr"",""links"":[{""url"":""http://codepen.io/bennettfeely/pen/csjzd"",""title"":""codepen example""},{""url"":""http://css-tricks.com/basics-css-blend-modes/"",""title"":""Blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #2"",""8"":""a #2"",""9"":""a #2"",""9.1"":""a #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9.0-9.2"":""a #2"",""9.3"":""a #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Partial in Safari refers to not supporting the `hue`, `saturation`, `color`, and `luminosity` blend modes.""},""usage_perc_y"":56.03,""usage_perc_a"":9.81,""ucprefix"":false,""parent"":"""",""keywords"":""mix-blend-mode,css blend modes,css blending modes"",""ie_id"":""mixblendmode"",""chrome_id"":""6362616360337408"",""firefox_id"":"""",""webkit_id"":""""},""speech-recognition"":{""title"":""Speech Recognition API"",""description"":""Method to provide speech input in a web browser."",""spec"":""https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-section"",""status"":""unoff"",""links"":[{""url"":""http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API"",""title"":""HTML5Rocks article""},{""url"":""http://www.sitepoint.com/introducing-web-speech-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/web-speech-api-demo.html"",""title"":""Demo""},{""url"":""http://zenorocha.github.io/voice-elements/#recognition-element"",""title"":""Advanced demo and resource""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n d #2"",""23"":""n d #2"",""24"":""n d #2"",""25"":""n d #2"",""26"":""n d #2"",""27"":""n d #2"",""28"":""n d #2"",""29"":""n d #2"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""n d #2"",""35"":""n d #2"",""36"":""n d #2"",""37"":""n d #2"",""38"":""n d #2"",""39"":""n d #2"",""40"":""n d #2"",""41"":""n d #2"",""42"":""n d #2"",""43"":""n d #2"",""44"":""n d #2"",""45"":""n d #2"",""46"":""n d #2"",""47"":""n d #2"",""48"":""n d #2""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1"",""49"":""a x #1"",""50"":""a x #1"",""51"":""a x #1"",""52"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""a x #1""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to some attributes missing."",""2"":""Supported in Firefox in about:config using the `media.webspeech.recognition.enable` flag.""},""usage_perc_y"":0,""usage_perc_a"":49.22,""ucprefix"":false,""parent"":"""",""keywords"":""#web-speech,speech,recognition,ASR"",""ie_id"":""webspeechapiinput"",""chrome_id"":""5908775487668224"",""firefox_id"":"""",""webkit_id"":""""},""high-resolution-time"":{""title"":""High Resolution Time API"",""description"":""Method to provide the current time in sub-millisecond resolution and such that it is not subject to system clock skew or adjustments. Called using `performance.now()`"",""spec"":""http://www.w3.org/TR/hr-time/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()"",""title"":""MDN article""},{""url"":""http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now"",""title"":""HTML5Rocks article""},{""url"":""http://www.sitepoint.com/discovering-the-high-resolution-time-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/high-resolution-time-api-demo.html"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":87.25,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""performance,now,testing"",""ie_id"":""highresolutiontime"",""chrome_id"":""5349124069130240"",""firefox_id"":"""",""webkit_id"":""""},""battery-status"":{""title"":""Battery Status API"",""description"":""Method to provide information about the battery status of the hosting device."",""spec"":""http://www.w3.org/TR/battery-status/"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/WebAPI/Battery_Status"",""title"":""MDN Docs""},{""url"":""http://www.smartjava.org/examples/webapi-battery/"",""title"":""Simple demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n d"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a #1""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to support for the older specification's `navigator.battery` rather than `navigator.getBattery()` to access the `BatteryManager`.""},""usage_perc_y"":55.25,""usage_perc_a"":10.73,""ucprefix"":false,""parent"":"""",""keywords"":""navigator.battery,navigator.getbattery,batterymanager"",""ie_id"":""batterystatusapi"",""chrome_id"":""4537134732017664"",""firefox_id"":"""",""webkit_id"":""""},""serviceworkers"":{""title"":""Service Workers"",""description"":""Method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline."",""spec"":""https://slightlyoff.github.io/ServiceWorker/spec/service_worker/"",""status"":""wd"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/service-worker/introduction/"",""title"":""HTML5Rocks article (introduction)""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker_API"",""title"":""MDN article""},{""url"":""https://jakearchibald.github.io/isserviceworkerready/resources.html"",""title"":""List of various resources""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1"",""43"":""n d #1"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a"",""48"":""a"",""49"":""a"",""50"":""a"",""51"":""a"",""52"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""a""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a""},""and_chr"":{""49"":""a""},""and_ff"":{""45"":""a""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Details on partial support can be found on [is ServiceWorker Ready?](https://jakearchibald.github.io/isserviceworkerready/)"",""notes_by_num"":{""1"":""Partial support can be enabled in Firefox with the `dom.serviceWorkers.enabled` flag.""},""usage_perc_y"":0,""usage_perc_a"":52.85,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""serviceworker"",""chrome_id"":""6561526227927040"",""firefox_id"":""service-worker"",""webkit_id"":""specification-service-workers""},""text-decoration"":{""title"":""text-decoration styling"",""description"":""Method of defining the type, style and color of lines in the text-decoration property. These can be defined as shorthand (e.g. `text-decoration: line-through dashed blue`) or as single properties (e.g. `text-decoration-color: blue`)"",""spec"":""http://www.w3.org/TR/css-text-decor-3/#line-decoration"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-style"",""title"":""MDN Documentation for text-decoration-style""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color"",""title"":""MDN Documentation for text-decoration-color""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-line"",""title"":""MDN Documentation for text-decoration-line""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514536-text-decoration-styling"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n x d #1"",""27"":""n x d #1"",""28"":""n x d #1"",""29"":""n x d #1"",""30"":""n x d #1"",""31"":""n x d #1"",""32"":""n x d #1"",""33"":""n x d #1"",""34"":""n x d #1"",""35"":""n x d #1"",""36"":""n x d #1"",""37"":""n x d #1"",""38"":""n x d #1"",""39"":""n x d #1"",""40"":""n x d #1"",""41"":""n x d #1"",""42"":""n x d #1"",""43"":""n x d #1"",""44"":""n x d #1"",""45"":""n x d #1"",""46"":""n x d #1"",""47"":""n x d #1"",""48"":""n x d #1"",""49"":""n x d #1"",""50"":""n x d #1"",""51"":""n x d #1"",""52"":""n x d #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""9.1"":""a x #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n x d #1"",""36"":""n x d #1"",""37"":""n x d #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a x #2"",""8.1-8.4"":""a x #2"",""9.0-9.2"":""a x #2"",""9.3"":""a x #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n x d #1""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""All browsers support the CSS2 version of `text-decoration`, which matches only the `text-decoration-line` values (`underline`, etc.)"",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Partial support in Safari refers to not supporting the text-decoration-style property.""},""usage_perc_y"":8.85,""usage_perc_a"":9.81,""ucprefix"":false,""parent"":"""",""keywords"":""text-decoration-line,text-decoration-style,text-decoration-color"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""iframe-srcdoc"":{""title"":""srcdoc attribute for iframes"",""description"":""Override the content specified in the `src` attribute (if present) with HTML content within the attribute."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-srcdoc"",""status"":""ls"",""links"":[{""url"":""https://docs.webplatform.org/wiki/html/elements/iframe"",""title"":""WebPlatform Docs""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe"",""title"":""MDN Docs""},{""url"":""https://github.com/jugglinmike/srcdoc-polyfill"",""title"":""Srcdoc Polyfill""},{""url"":""https://bocoup.com/weblog/third-party-javascript-development-future/"",""title"":""Article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""12"":""p"",""13"":""p"",""14"":""p""},""firefox"":{""2"":""n"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":79.81,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""iframesrcdocattribute"",""chrome_id"":""5222955109842944"",""firefox_id"":"""",""webkit_id"":""""},""speech-synthesis"":{""title"":""Speech Synthesis API"",""description"":""A web API for controlling a text-to-speech output."",""spec"":""https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section"",""status"":""unoff"",""links"":[{""url"":""http://updates.html5rocks.com/2014/01/Web-apps-that-talk---Introduction-to-the-Speech-Synthesis-API"",""title"":""HTML5Rocks article""},{""url"":""http://www.sitepoint.com/talking-web-pages-and-the-speech-synthesis-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/speech-synthesis-api-demo.html"",""title"":""Demo""},{""url"":""http://zenorocha.github.io/voice-elements/"",""title"":""Advanced demo and resource""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1"",""43"":""n d #1"",""44"":""n d #1"",""45"":""n d #1"",""46"":""n d #1"",""47"":""n d #1"",""48"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox using the `media.webspeech.synth.enabled` about:config flag.""},""usage_perc_y"":58.83,""usage_perc_a"":0,""ucprefix"":false,""parent"":""web-speech"",""keywords"":""speech,synthesis,speechSynthesis,TTS,SpeechSynthesisUtterance,"",""ie_id"":""webspeechapisynthesis"",""chrome_id"":""4782875580825600"",""firefox_id"":"""",""webkit_id"":""""},""user-timing"":{""title"":""User Timing API"",""description"":""Method to help web developers measure the performance of their applications by giving them access to high precision timestamps."",""spec"":""http://www.w3.org/TR/user-timing/"",""status"":""rec"",""links"":[{""url"":""http://www.sitepoint.com/discovering-user-timing-api/"",""title"":""SitePoint article""},{""url"":""http://www.html5rocks.com/en/tutorials/webperformance/usertiming/"",""title"":""HTML5Rocks article""},{""url"":""https://gist.github.com/pmeenan/5902672"",""title"":""Polyfill""},{""url"":""http://aurelio.audero.it/demo/user-timing-api-demo.html"",""title"":""Demo""},{""url"":""https://github.com/nicjansma/usertiming.js"",""title"":""UserTiming.js polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":68.41,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""performance,testing,mark,measure"",""ie_id"":""usertimingapi"",""chrome_id"":""5066549580791808"",""firefox_id"":"""",""webkit_id"":""""},""srcset"":{""title"":""Srcset attribute"",""description"":""Allows authors to define various image resources and \""hints\"" that assist a user agent to determine the most appropriate image source to display (e.g. high-resolution displays, small monitors, etc)."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset"",""status"":""ls"",""links"":[{""url"":""https://www.webkit.org/blog/2910/improved-support-for-high-resolution-displays-with-the-srcset-image-attribute/"",""title"":""Improved support for high-resolution displays with the srcset image attribute""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""a #2"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #2"",""8"":""a #2"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox by setting the about:config preference dom.image.srcset.enabled to true"",""2"":""Supports the subset of the syntax for resolution switching (using the `x` descriptor), but not the full syntax that can be used with `sizes` (using the `w` descriptor).""},""usage_perc_y"":65.44,""usage_perc_a"":1.86,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""imgsrcset"",""chrome_id"":""4644337115725824"",""firefox_id"":"""",""webkit_id"":""feature-srcset-w-descriptor-and-related-sizes-attribute,feature-srcset-x-descriptor""},""ambient-light"":{""title"":""Ambient Light API"",""description"":""Defines events that provide information about the ambient light level, as measured by a device's light sensor."",""spec"":""http://www.w3.org/TR/ambient-light/"",""status"":""cr"",""links"":[{""url"":""http://aurelio.audero.it/demo/ambient-light-api-demo.html"",""title"":""Demo""},{""url"":""http://modernweb.com/2014/05/27/introduction-to-the-ambient-light-api/"",""title"":""Article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1"",""48"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in desktop Firefox refers to support being limited to Mac OS X. [Support for Windows 7 is in progress](https://bugzilla.mozilla.org/show_bug.cgi?id=754199)""},""usage_perc_y"":0.04,""usage_perc_a"":8.53,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""ambientlightevents"",""chrome_id"":""5298357018820608"",""firefox_id"":"""",""webkit_id"":""""},""will-change"":{""title"":""CSS will-change property"",""description"":""Method of optimizing animations by informing the browser which elements will change and what properties will change."",""spec"":""http://dev.w3.org/csswg/css-will-change/"",""status"":""wd"",""links"":[{""url"":""https://dev.opera.com/articles/css-will-change-property/"",""title"":""Detailed article""},{""url"":""http://aerotwist.com/blog/bye-bye-layer-hacks/"",""title"":""Blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supported in Firefox behind the `layout.css.will-change.enabled` flag""},""usage_perc_y"":56.38,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""scroll-position"",""ie_id"":""csswillchange"",""chrome_id"":""5954199330226176"",""firefox_id"":"""",""webkit_id"":""specification-css-will-change""},""css-shapes"":{""title"":""CSS Shapes Level 1"",""description"":""Allows geometric shapes to be set in CSS to define an area for text to flow around."",""spec"":""http://www.w3.org/TR/css-shapes/"",""status"":""cr"",""links"":[{""url"":""http://html.adobe.com/webplatform/layout/shapes/"",""title"":""Adobe demos and samples""},{""url"":""http://html.adobe.com/webplatform/layout/shapes/browser-support/"",""title"":""CSS shapes support test by Adobe""},{""url"":""http://alistapart.com/article/css-shapes-101"",""title"":""A List Apart article""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1040714"",""title"":""Firefox tracking bug""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags""},""usage_perc_y"":58.18,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""circle,ellipse,polygon,inset,shape-outside,shape-inside"",""ie_id"":""shapes"",""chrome_id"":""5163890719588352"",""firefox_id"":"""",""webkit_id"":""""},""domcontentloaded"":{""title"":""DOMContentLoaded"",""description"":""JavaScript event that fires when the DOM is loaded, but before all page assets are loaded (CSS, images, etc.)."",""spec"":""https://html.spec.whatwg.org/multipage/syntax.html#stop-parsing"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded"",""title"":""MDN: DOMContentLoaded""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":96.48,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""dom,domready,onload,contentloaded,document"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""proximity"":{""title"":""Proximity API"",""description"":""Defines events that provide information about the distance between a device and an object, as measured by a proximity sensor."",""spec"":""http://www.w3.org/TR/proximity/"",""status"":""cr"",""links"":[{""url"":""http://aurelio.audero.it/demo/proximity-api-demo.html"",""title"":""Demo""},{""url"":""http://www.sitepoint.com/introducing-proximity-api/"",""title"":""SitePoint article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":8.73,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""kerning-pairs-ligatures"":{""title"":""Improved kerning pairs & ligatures"",""description"":""Currently non-standard method of improving kerning pairs & ligatures using `text-rendering: optimizeLegibility`."",""spec"":""http://www.w3.org/TR/SVG11/painting.html#TextRenderingProperty"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-rendering"",""title"":""MDN article""},{""url"":""http://css-tricks.com/almanac/properties/t/text-rendering/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Android browser versions is due to a serious bug where `text-rendering: optimizeLegibility` causes custom web fonts to not render.""},""usage_perc_y"":80.62,""usage_perc_a"":1.45,""ucprefix"":false,""parent"":"""",""keywords"":""optimizeLegibility,optimizeSpeed,geometricPrecision"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""iframe-seamless"":{""title"":""seamless attribute for iframes"",""description"":""The seamless attribute makes an iframe's contents actually part of a page, and adopts the styles from its hosting page. The attribute has been [removed from the current specification](https://github.com/whatwg/html/issues/331). "",""spec"":""https://www.w3.org/TR/html51/semantics.html#attr-iframe-seamless"",""status"":""unoff"",""links"":[{""url"":""https://github.com/ornj/seamless-polyfill"",""title"":""Experimental polyfill""},{""url"":""http://labs.ft.com/2013/01/seamless-iframes-not-quite-seamless/"",""title"":""Article""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=631218"",""title"":""Bug on Firefox support""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""u"",""47"":""u"",""48"":""u""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""n d"",""24"":""n d"",""25"":""n d"",""26"":""n d"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n #1"",""7.1"":""n #1"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n #1"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Chrome 20-26 had partial support behind a flag, though this was [later removed](http://crbug.com/229421)."",""notes_by_num"":{""1"":""Hides the border of seamless iframes and recognizes the 'seamless' DOM property, but does not provide actual support.""},""usage_perc_y"":8.87,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""iframeseamlessattribute"",""chrome_id"":""6630329993396224"",""firefox_id"":"""",""webkit_id"":""""},""css-image-orientation"":{""title"":""CSS3 image-orientation"",""description"":""CSS property used generally to fix the intended orientation of an image. This can be done using 90 degree increments or based on the image's EXIF data using the \""from-image\"" value."",""spec"":""http://www.w3.org/TR/css3-images/#image-orientation"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/image-orientation"",""title"":""MDN article""},{""url"":""http://sethfowler.org/blog/2013/09/13/new-in-firefox-26-css-image-orientation/"",""title"":""Blog post""},{""url"":""http://jsbin.com/EXUTolo/4"",""title"":""Demo (Chinese)""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Opening the image in a new tab in Chrome results in the image shown in the orientation according to the EXIF data."",""notes_by_num"":{""1"":""Partial support in iOS refers to the browser using EXIF data by default, though it does not actually support the property.""},""usage_perc_y"":8.46,""usage_perc_a"":8.04,""ucprefix"":false,""parent"":"""",""keywords"":""image-orientation,from-image,flip"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""picture"":{""title"":""Picture element"",""description"":""A responsive images method to control which image resource a user agent presents to a user, based on resolution, media query and/or support for a particular image format"",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element"",""status"":""ls"",""links"":[{""url"":""http://responsiveimages.org/demos/"",""title"":""Demo""},{""url"":""http://code.tutsplus.com/tutorials/better-responsive-images-with-the-picture-element--net-36583"",""title"":""Tutorial""},{""url"":""http://usecases.responsiveimages.org/"",""title"":""Read about the use cases""},{""url"":""http://responsiveimages.org/"",""title"":""General information about Responsive Images""},{""url"":""https://dev.opera.com/articles/responsive-images/"",""title"":""Blog post on usage""},{""url"":""http://www.html5rocks.com/tutorials/responsive/picture-element/"",""title"":""HTML5 Rocks tutorial""},{""url"":""https://github.com/scottjehl/picturefill"",""title"":""Picturefill - polyfill for picture, srcset, sizes, and more""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n d #3"",""35"":""n d #3"",""36"":""n d #3"",""37"":""n d #3"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n d #1"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n d #2"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Enabled in Opera through the \""experimental Web Platform features\"" flag in opera://flags"",""3"":""Enabled in Firefox by setting the about:config preference dom.image.picture.enable to true""},""usage_perc_y"":56.92,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""<picture>"",""ie_id"":""pictureelement"",""chrome_id"":""5910974510923776"",""firefox_id"":"""",""webkit_id"":""feature-picture-element""},""woff2"":{""title"":""WOFF 2.0 - Web Open Font Format"",""description"":""TrueType/OpenType font that provides better compression than WOFF 1.0."",""spec"":""http://www.w3.org/TR/WOFF2/"",""status"":""wd"",""links"":[{""url"":""https://gist.github.com/sergejmueller/cf6b4f2133bcb3e2f64a"",""title"":""Basics about WOFF 2.0""},{""url"":""http://everythingfonts.com/ttf-to-woff2"",""title"":""WOFF 2.0 converter""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Supported in WebKit Nightly"",""notes_by_num"":{""1"":""Default 'enabled' for Firefox version 39+, but versions 37-38 will need to set a flag to 'true' to [use WOFF2](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#Browser_compatibility).""},""usage_perc_y"":55.98,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":""woff, fontface, webfonts"",""ie_id"":""wofffileformat20"",""chrome_id"":""6718644721549312"",""firefox_id"":"""",""webkit_id"":""""},""text-size-adjust"":{""title"":""CSS text-size-adjust"",""description"":""On mobile devices, the text-size-adjust CSS property allows Web authors to control if and how the text-inflating algorithm is applied to the textual content of the element it is applied to."",""spec"":""http://dev.w3.org/csswg/css-size-adjust/"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-size-adjust"",""title"":""MDN Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n #2"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n #2"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y x""},""ie_mob"":{""10"":""y x #1"",""11"":""y x #1""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""If the viewport size is set using a `<meta>` element, the `-ms-text-size-adjust` property is ignored. See [MSDN](https://msdn.microsoft.com/en-us/library/ie/dn793579%28v=vs.85%29.aspx)"",""2"":""Old versions of WebKit-based desktop browsers (Chrome<27, Safari<6) [suffer from a bug](https://bugs.webkit.org/show_bug.cgi?id=56543) where if `-webkit-text-size-adjust` is explicitly set to `none`, instead of ignoring the property, the browsers will prevent the user from zooming in or out on the webpage.""},""usage_perc_y"":17.76,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""web-animation"":{""title"":""Web Animations API"",""description"":""Lets you create animations that are run in the browser and as well as inspect and manipulate animations created through declarative means like CSS."",""spec"":""http://w3c.github.io/web-animations/"",""status"":""wd"",""links"":[{""url"":""http://updates.html5rocks.com/2014/05/Web-Animations---element-animate-is-now-in-Chrome-36"",""title"":""HTML5 Rocks""},{""url"":""http://updates.html5rocks.com/2013/12/New-Web-Animations-engine-in-Blink-drives-CSS-Animations-Transitions"",""title"":""HTML5 Rocks""},{""url"":""https://birtles.github.io/areweanimatedyet/"",""title"":""Current Firefox status""},{""url"":""https://github.com/web-animations/web-animations-js"",""title"":""Polyfill""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""a d #3"",""34"":""a d #3"",""35"":""a d #3"",""36"":""a d #3"",""37"":""a d #3"",""38"":""a d #3"",""39"":""a d #3"",""40"":""a d #3"",""41"":""a d #3"",""42"":""a d #3"",""43"":""a d #3"",""44"":""a d #3"",""45"":""a d #3"",""46"":""a d #3"",""47"":""a #3"",""48"":""a #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #2"",""40"":""a #2"",""41"":""a #2"",""42"":""a #2"",""43"":""a #2"",""44"":""a #2"",""45"":""a #2"",""46"":""a #2"",""47"":""a #2"",""48"":""a #2"",""49"":""a #2"",""50"":""a #2"",""51"":""a #2"",""52"":""a #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""a #1""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a #1""},""and_chr"":{""49"":""a #1""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to basic support of `element.animate()`"",""2"":""Partial support refers to basic support of `element.animate()` and [playback control of AnimationPlayer](https://www.chromestatus.com/features/5633748733263872)"",""3"":""Partial support in Firefox is detailed in [Are we animated yet?](https://birtles.github.io/areweanimatedyet/)""},""usage_perc_y"":0,""usage_perc_a"":56.52,""ucprefix"":false,""parent"":"""",""keywords"":""animate,play,pause,reverse,finish,currentTime,startTime,playbackRate,playState"",""ie_id"":""webanimationsjavascriptapi"",""chrome_id"":""4854343836631040,5633748733263872"",""firefox_id"":"""",""webkit_id"":""""},""resource-timing"":{""title"":""Resource Timing"",""description"":""Method to help web developers to collect complete timing information related to resources on a document."",""spec"":""http://www.w3.org/TR/resource-timing/"",""status"":""cr"",""links"":[{""url"":""http://aurelio.audero.it/demo/resource-timing-api-demo.html"",""title"":""Demo""},{""url"":""http://googledevelopers.blogspot.com/2013/12/measuring-network-performance-with.html"",""title"":""Blog post""},{""url"":""http://www.sitepoint.com/introduction-resource-timing-api/"",""title"":""SitePoint article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox using the dom.enable_resource_timing flag""},""usage_perc_y"":68.64,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""performance,testing,resource"",""ie_id"":""resourcetimingapi"",""chrome_id"":""5796350423728128"",""firefox_id"":"""",""webkit_id"":""""},""custom-elements"":{""title"":""Custom Elements"",""description"":""Method of defining and using new types of DOM elements in a document."",""spec"":""http://www.w3.org/TR/custom-elements/"",""status"":""wd"",""links"":[{""url"":""http://w3c.github.io/webcomponents/spec/custom/"",""title"":""W3C Editor's Draft spec (closer to current implementations)""},{""url"":""http://www.polymer-project.org/platform/custom-elements.html"",""title"":""Polymer project (polyfill & web components framework)""},{""url"":""http://www.html5rocks.com/tutorials/webcomponents/customelements/"",""title"":""HTML5Rocks - Custom Elements: defining new elements in HTML""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=234509"",""title"":""Chromium tracking bug: Implement Custom Elements""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=889230"",""title"":""Firefox tracking bug: Implement Custom Elements (from Web Components)""},{""url"":""http://status.modern.ie/customelements"",""title"":""IE Web Platform Status and Roadmap: Custom Elements""},{""url"":""https://github.com/WebReflection/document-register-element"",""title"":""document.registerElement polyfill in 3KB minified & gzipped""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""p"",""11"":""p""},""edge"":{""12"":""p"",""13"":""p"",""14"":""p""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n d #1"",""24"":""n d #1"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""p d #1"",""31"":""p d #1"",""32"":""p d #1"",""33"":""p d #1"",""34"":""p d #1"",""35"":""p d #1"",""36"":""p d #1"",""37"":""p d #1"",""38"":""p d #1"",""39"":""p d #1"",""40"":""p d #1"",""41"":""p d #1"",""42"":""p d #1"",""43"":""p d #1"",""44"":""p d #1"",""45"":""p d #1"",""46"":""p d #1"",""47"":""p d #1"",""48"":""p d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n d"",""28"":""n d"",""29"":""n d"",""30"":""n d"",""31"":""n d"",""32"":""n d"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p"",""9.1"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n d"",""16"":""n d"",""17"":""n d"",""18"":""n d"",""19"":""n d"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9.0-9.2"":""p"",""9.3"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""p d #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled through the \""dom.webcomponents.enabled\"" preference in about:config""},""usage_perc_y"":49.66,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web components,registerElement"",""ie_id"":""customelements"",""chrome_id"":""4642138092470272"",""firefox_id"":""custom-elements"",""webkit_id"":""feature-custom-elements""},""imports"":{""title"":""HTML Imports"",""description"":""Method of including and reusing HTML documents in other HTML documents."",""spec"":""http://www.w3.org/TR/html-imports/"",""status"":""wd"",""links"":[{""url"":""http://www.polymer-project.org/platform/html-imports.html"",""title"":""Polymer project (polyfill & web components framework)""},{""url"":""http://www.html5rocks.com/tutorials/webcomponents/imports/"",""title"":""HTML5Rocks - HTML Imports: #include for the web""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=240592"",""title"":""Chromium tracking bug: Implement HTML Imports""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=877072"",""title"":""Firefox tracking bug: Implement HTML Imports""},{""url"":""http://status.modern.ie/htmlimports"",""title"":""IE Web Platform Status and Roadmap: HTML Imports""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""p"",""11"":""p""},""edge"":{""12"":""p"",""13"":""p"",""14"":""p""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""p"",""31"":""p"",""32"":""p d #1"",""33"":""p d #1"",""34"":""p d #1"",""35"":""p d #1"",""36"":""p d #1"",""37"":""p d #1"",""38"":""p d #1"",""39"":""p d #1"",""40"":""p d #1"",""41"":""p d #1"",""42"":""p d #1"",""43"":""p d #1"",""44"":""p d #1"",""45"":""p d #1"",""46"":""p d #1"",""47"":""p d #1"",""48"":""p d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""n d #2"",""35"":""p d #3"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p"",""9.1"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n d #4"",""18"":""n d #4"",""19"":""n d #4"",""20"":""n d #4"",""21"":""n d #4"",""22"":""p d #5"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9.0-9.2"":""p"",""9.3"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""p""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Firefox [has no plans to support HTML imports](https://hacks.mozilla.org/2014/12/mozilla-and-web-components/) though for now it can be enabled through the \""dom.webcomponents.enabled\"" preference in about:config"",""2"":""Enabled through the \""Enable HTML Imports\"" flag in chrome://flags"",""3"":""Enabled through the \""Experimental Web Platform features\"" flag in chrome://flags"",""4"":""Enabled through the \""Enable HTML Imports\"" flag in opera://flags"",""5"":""Enabled through the \""Experimental Web Platform features\"" flag in opera://flags""},""usage_perc_y"":48.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web components"",""ie_id"":""htmlimports"",""chrome_id"":""5144752345317376"",""firefox_id"":""html-imports"",""webkit_id"":""feature-html-imports""},""input-file-multiple"":{""title"":""Multiple file selection"",""description"":""Allows users to select multiple files in the file picker."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-input-multiple"",""status"":""ls"",""links"":[{""url"":""https://code.google.com/p/chromium/issues/detail?id=348912"",""title"":""Chrome bug (for Android)""},{""url"":""http://www.raymondcamden.com/2012/2/28/Working-with-HTML5s-multiple-file-upload-support"",""title"":""Article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n #1""},""android"":{""2.1"":""n #1"",""2.2"":""n #1"",""2.3"":""n #1"",""3"":""n #1"",""4"":""n #1"",""4.1"":""n #1"",""4.2-4.3"":""n #1"",""4.4"":""n #1"",""4.4.3-4.4.4"":""n #1"",""47"":""n #1""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n #1"",""11"":""n #1"",""11.1"":""n #1"",""11.5"":""n #1"",""12"":""n #1"",""12.1"":""n #1"",""35"":""n #1""},""and_chr"":{""49"":""a #1""},""and_ff"":{""45"":""n #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n #1""}},""notes"":"""",""notes_by_num"":{""1"":""Not supported on Android 4.x and below, presumably an OS limitation. Only seems to work in Android 5.x for the Chrome browser.""},""usage_perc_y"":59.55,""usage_perc_a"":17.44,""ucprefix"":false,""parent"":""forms"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""atob-btoa"":{""title"":""Base64 encoding and decoding"",""description"":""Utility functions for of encoding and decoding strings to and from base 64: window.atob() and window.btoa()."",""spec"":""https://html.spec.whatwg.org/multipage/webappapis.html#atob"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa"",""title"":""MDN article on btoa()""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Window.atob"",""title"":""MDN article on atob()""},{""url"":""https://github.com/davidchambers/Base64.js"",""title"":""Polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""u"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":95.8,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""atob,btoa"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-appearance"":{""title"":""CSS Appearance"",""description"":""The `appearance` property defines how elements (particularly form controls) appear by default. By setting the value to `none` the default appearance can be entirely redefined using other CSS properties."",""spec"":""https://drafts.csswg.org/css-ui-4/#appearance-switching"",""status"":""wd"",""links"":[{""url"":""http://css-tricks.com/almanac/properties/a/appearance/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""a #1 #2"",""13"":""a #1 #2"",""14"":""a #1 #2""},""firefox"":{""2"":""a x #1"",""3"":""a x #1"",""3.5"":""a x #1"",""3.6"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1""},""chrome"":{""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1"",""49"":""a x #1"",""50"":""a x #1"",""51"":""a x #1"",""52"":""a x #1""},""safari"":{""3.1"":""a x #1"",""3.2"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""5.1"":""a x #1"",""6"":""a x #1"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""9.1"":""a x #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""5.0-5.1"":""a x #1"",""6.0-6.1"":""a x #1"",""7.0-7.1"":""a x #1"",""8"":""a x #1"",""8.1-8.4"":""a x #1"",""9.0-9.2"":""a x #1"",""9.3"":""a x #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""a x #1"",""4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""4.4"":""a x #1"",""4.4.3-4.4.4"":""a x #1"",""47"":""a x #1""},""bb"":{""7"":""a x #1"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a x #1""},""and_chr"":{""49"":""a x #1""},""and_ff"":{""45"":""a x #1""},""ie_mob"":{""10"":""n"",""11"":""a #1 #2""},""and_uc"":{""9.9"":""a x #1""}},""notes"":"""",""notes_by_num"":{""1"":""The appearance property is supported with the `none` value, but not `auto`. Webkit, Blink, and Gecko browsers also support additional vendor specific values."",""2"":""Microsoft Edge and IE Mobile support this property with the `-webkit-` prefix, rather than `-ms-` for interop reasons.""},""usage_perc_y"":0,""usage_perc_a"":83.99,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""objectrtc"":{""title"":""Object RTC (ORTC) API for WebRTC"",""description"":""Enables mobile endpoints to talk to servers and web browsers with Real-Time Communications (RTC) capabilities via native and simple JavaScript APIs"",""spec"":""https://www.w3.org/community/ortc/"",""status"":""other"",""links"":[{""url"":""http://blogs.msdn.com/b/ie/archive/2014/10/27/bringing-interoperable-real-time-communications-to-the-web.aspx"",""title"":""Bringing Interoperable Real-Time Communications to the Web""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""ORTC is often dubbed WebRTC 1.1. It is possible to make ORTC communicate with WebRTC 1.0 endpoints. See [WebRTC 1.0](http://caniuse.com/#feat=rtcpeerconnection) for support details for that API."",""notes_by_num"":{},""usage_perc_y"":0.85,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""RTC,WebRTC,ORTC,ObjectRTC,RTCIceTransport,RTCIceGatherer,RTCRtpSender,RTCRtpReceiver,Real Time,video,webcam"",""ie_id"":""webrtcobjectrtcapi"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-background-offsets"":{""title"":""CSS background-position edge offsets"",""description"":""Allows CSS background images to be positioned relative to the specified edge using the 3 to 4 value syntax. For example: `background-position: right 5px bottom 5px;` for positioning 5px from the bottom-right corner."",""spec"":""http://www.w3.org/TR/css3-background/#background-position"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/background-position"",""title"":""MDN article on background-position""},{""url"":""http://briantree.se/quick-tip-06-use-four-value-syntax-properly-position-background-images/"",""title"":""Basic information""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":85.19,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""4 value syntax"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-supports-api"":{""title"":""CSS.supports() API"",""description"":""The CSS.supports() static methods returns a Boolean value indicating if the browser supports a given CSS feature, or not."",""spec"":""http://dev.w3.org/csswg/css-conditional/#the-css-interface"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/CSS.supports"",""title"":""MDN Docs""},{""url"":""http://jsbin.com/rimevilotari/1/edit"",""title"":""Demo (Chinese)""},{""url"":""https://dev.opera.com/articles/native-css-feature-detection/"",""title"":""Native CSS Feature Detection via the @supports Rule""},{""url"":""http://davidwalsh.name/css-supports"",""title"":""CSS @supports""},{""url"":""http://blog.csdn.net/hfahe/article/details/8619480"",""title"":""Article (Chinese)""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""See also [@supports in CSS](#feat=css-featurequeries)\r\n\r\nSee the [WebKit Bug](http://trac.webkit.org/changeset/142739) for status in Safari"",""notes_by_num"":{""1"":""Opera 12 uses a different method name('window.supportsCSS')""},""usage_perc_y"":70.32,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""conditional"",""ie_id"":""conditionalrules"",""chrome_id"":""4993981813358592"",""firefox_id"":"""",""webkit_id"":""""},""css-touch-action"":{""title"":""CSS touch-action property"",""description"":""touch-action is a CSS property that controls filtering of gesture events, providing developers with a declarative mechanism to selectively disable touch scrolling (in one or both axes), pinch-zooming or double-tap-zooming."",""spec"":""http://www.w3.org/TR/pointerevents/#the-touch-action-css-property"",""status"":""rec"",""links"":[{""url"":""http://msdn.microsoft.com/en-us/library/windows/apps/hh767313.aspx"",""title"":""MSDN Docs""},{""url"":""http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away"",""title"":""300ms tap delay, gone away""},{""url"":""http://blogs.telerik.com/appbuilder/posts/13-11-21/what-exactly-is.....-the-300ms-click-delay"",""title"":""What Exactly Is..... The 300ms Click Delay""},{""url"":""http://thx.github.io/mobile/300ms-click-delay/"",""title"":""What Exactly Is..... The 300ms Click Delay (Chinese)""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action"",""title"":""Mozilla Developer Network""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=149854"",""title"":""WebKit bug 149854: Implement touch-action: manipulation; for iOS""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=133112"",""title"":""WebKit bug 133112: touch-action CSS property support""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x #2"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1"",""43"":""n d #1"",""44"":""n d #1"",""45"":""n d #1"",""46"":""n d #1"",""47"":""n d #1"",""48"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y x #2"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supported in Firefox behind the `layout.css.touch_action.enabled` flag, Firefox for Windows 8 Touch ('Metro') enabled by default."",""2"":""IE10+ has already supported these property which are not in standard at present such as'pinch-zoom','double-tap-zoom','cross-slide-x','cross-slide-y'.""},""usage_perc_y"":57.11,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""touch action"",""ie_id"":""csstouchaction"",""chrome_id"":""5912074022551552"",""firefox_id"":"""",""webkit_id"":""""},""autofocus"":{""title"":""Autofocus attribute"",""description"":""Allows a form field to be immediately focused on page load."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#autofocusing-a-form-control:-the-autofocus-attribute"",""status"":""ls"",""links"":[{""url"":""http://davidwalsh.name/autofocus"",""title"":""Article on autofocus""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""While not supported in iOS Safari, it does work in iOS WebViews."",""notes_by_num"":{},""usage_perc_y"":74.03,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-clip-path"":{""title"":""CSS clip-path property"",""description"":""Method of defining the visible region of an element using SVG or a shape definition."",""spec"":""http://www.w3.org/TR/css-masking-1/#the-clip-path"",""status"":""cr"",""links"":[{""url"":""http://css-tricks.com/almanac/properties/c/clip/"",""title"":""CSS Tricks article""},{""url"":""http://codepen.io/dubrod/details/myNNyW/"",""title"":""Codepen Example Clipping an Image with a Polygon""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1 #3"",""48"":""a #1 #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2"",""33"":""a x #2"",""34"":""a x #2"",""35"":""a x #2"",""36"":""a x #2"",""37"":""a x #2"",""38"":""a x #2"",""39"":""a x #2"",""40"":""a x #2"",""41"":""a x #2"",""42"":""a x #2"",""43"":""a x #2"",""44"":""a x #2"",""45"":""a x #2"",""46"":""a x #2"",""47"":""a x #2"",""48"":""a x #2"",""49"":""a x #2"",""50"":""a x #2"",""51"":""a x #2"",""52"":""a x #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""a x #2"",""7.1"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""9.1"":""a x #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #2"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""a x #2"",""22"":""a x #2"",""23"":""a x #2"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2"",""33"":""a x #2"",""34"":""a x #2"",""35"":""a x #2"",""36"":""a x #2"",""37"":""a x #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a x #2"",""8"":""a x #2"",""8.1-8.4"":""a x #2"",""9.0-9.2"":""a x #2"",""9.3"":""a x #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a x #2"",""4.4.3-4.4.4"":""a x #2"",""47"":""a x #2""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a x #2""},""and_chr"":{""49"":""a x #2""},""and_ff"":{""45"":""a #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to only supporting the `url()` syntax."",""2"":""Partial support refers to supporting shapes and the `url(#foo)` syntax for inline SVG, but not shapes in external SVGs."",""3"":""Supports shapes behind the `layout.css.clip-path-shapes.enabled` flag""},""usage_perc_y"":0,""usage_perc_a"":71.15,""ucprefix"":false,""parent"":""css-masks"",""keywords"":""clippath"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""getrandomvalues"":{""title"":""crypto.getRandomValues()"",""description"":""Method of generating cryptographically random values."",""spec"":""http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y x""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y x""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":78.99,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""screen-orientation"":{""title"":""Screen Orientation"",""description"":""Provides the ability to read the screen orientation state, to be informed when this state changes, and to be able to lock the screen orientation to a specific state."",""spec"":""http://www.w3.org/TR/screen-orientation/"",""status"":""wd"",""links"":[{""url"":""http://aurelio.audero.it/demo/screen-orientation-api-demo.html"",""title"":""Demo""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Screen.orientation"",""title"":""MDN article""},{""url"":""http://www.sitepoint.com/introducing-screen-orientation-api/"",""title"":""SitePoint article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a x""},""edge"":{""12"":""a x"",""13"":""a x"",""14"":""a x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x"",""38"":""a x"",""39"":""a x"",""40"":""a x"",""41"":""a x"",""42"":""a x"",""43"":""a x"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""a x""},""and_uc"":{""9.9"":""y""}},""notes"":""Partial support refers to an [older version](http://www.w3.org/TR/2014/WD-screen-orientation-20140220/) of the draft specification, and the spec has undergone significant changes since, for example renaming the `screen.lockOrientation` method to `screen.orientation.lock`."",""notes_by_num"":{},""usage_perc_y"":61.93,""usage_perc_a"":11.76,""ucprefix"":false,""parent"":"""",""keywords"":""lockorientation,unlockorientation"",""ie_id"":""screenorientationapi"",""chrome_id"":""6191285283061760"",""firefox_id"":""screen-orientation"",""webkit_id"":""""},""font-loading"":{""title"":""CSS Font Loading"",""description"":""This CSS module defines a scripting interface to font faces in CSS, allowing font faces to be easily created and loaded from script. It also provides methods to track the loading status of an individual font, or of all the fonts on an entire page."",""spec"":""http://dev.w3.org/csswg/css-font-loading/"",""status"":""cr"",""links"":[{""url"":""https://www.igvita.com/2014/01/31/optimizing-web-font-rendering-performance/#font-load-events"",""title"":""Optimizing with font load events""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6509785-css-font-loading"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox using the `layout.css.font-loading-api.enabled` flag. Enabled by default in Firefox 41. See [this bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1149381)""},""usage_perc_y"":55.85,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""fontface,fontfaceset,fontfacesource"",""ie_id"":"""",""chrome_id"":""6244676289953792"",""firefox_id"":"""",""webkit_id"":""""},""font-unicode-range"":{""title"":""Font unicode-range subsetting"",""description"":""This @font-face descriptor defines the set of Unicode codepoints that may be supported by the font face for which it is declared. The descriptor value is a comma-delimited list of Unicode range (<urange>) values. The union of these ranges defines the set of codepoints that serves as a hint for user agents when deciding whether or not to download a font resource for a given text run."",""spec"":""http://dev.w3.org/csswg/css-fonts/#descdef-unicode-range"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-range"",""title"":""MDN: unicode-range""},{""url"":""https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/css/property/unicode-range"",""title"":""Safari CSS Reference: unicode-range""},{""url"":""http://docs.webplatform.org/wiki/css/properties/unicode-range"",""title"":""Web Platform Docs: unicode-range""},{""url"":""http://jsbin.com/jeqoguzeye/1/edit?html,output"",""title"":""Demo""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6510254-unicode-range"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""12"":""a"",""13"":""a"",""14"":""a""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1"",""43"":""n d #1"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a"",""9.1"":""a""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9.0-9.2"":""a"",""9.3"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""47"":""y""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":""Partial support indicates that unnecessary code-ranges are downloaded by the browser - see [browser test matrix](https://docs.google.com/a/chromium.org/spreadsheets/d/18h-1gaosu4-KYxH8JUNL6ZDuOsOKmWfauoai3CS3hPY/edit?pli=1#gid=0)."",""notes_by_num"":{""1"":""Can be enabled in Firefox using the `layout.css.unicode-range.enabled` flag""},""usage_perc_y"":53.21,""usage_perc_a"":33.99,""ucprefix"":false,""parent"":"""",""keywords"":""font face,unicode,unicode-range"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""gamepad"":{""title"":""Gamepad API"",""description"":""API to support input from USB gamepad controllers through JavaScript."",""spec"":""http://www.w3.org/TR/gamepad/"",""status"":""wd"",""links"":[{""url"":""http://luser.github.io/gamepadtest/"",""title"":""Controller demo""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API"",""title"":""MDN article""},{""url"":""http://www.html5rocks.com/en/tutorials/doodles/gamepad/"",""title"":""HTML5Rocks article""},{""url"":""http://gamedevelopment.tutsplus.com/tutorials/using-the-html5-gamepad-api-to-add-controller-support-to-browser-games--cms-21345"",""title"":""Detailed tutorial""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":58.84,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""gamepadapi"",""chrome_id"":""5118776383111168"",""firefox_id"":""gamepad"",""webkit_id"":""""},""css-font-stretch"":{""title"":""CSS font-stretch"",""description"":""If a font has multiple types of variations based on the width of characters, the `font-stretch` property allows the appropriate one to be selected. The property in itself does not cause the browser to stretch to a font."",""spec"":""http://www.w3.org/TR/css-fonts-3/#font-stretch-prop"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch"",""title"":""MDN article""},{""url"":""http://css-tricks.com/almanac/properties/f/font-stretch/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":44.83,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""font stretch"",""ie_id"":""cssfontstretch"",""chrome_id"":""4598830058176512"",""firefox_id"":"""",""webkit_id"":""""},""font-size-adjust"":{""title"":""CSS font-size-adjust"",""description"":""Method of adjusting the font size in a matter that relates to the height of lowercase vs. uppercase letters. This makes it easier to set the size of fallback fonts."",""spec"":""http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop"",""status"":""cr"",""links"":[{""url"":""http://webdesignernotebook.com/css/the-little-known-font-size-adjust-css3-property/"",""title"":""Article on font-size-adjust""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-size-adjust"",""title"":""MDN article on font-size-adjust""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514821-font-size-adjust-other-font-properties"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n d #1"",""44"":""n d #1"",""45"":""n d #1"",""46"":""n d #1"",""47"":""n d #1"",""48"":""n d #1"",""49"":""n d #1"",""50"":""n d #1"",""51"":""n d #1"",""52"":""n d #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n #2""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Does not appear to work on Firefox mobile, despite recognition of the property.""},""usage_perc_y"":8.91,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""5720910061371392"",""firefox_id"":"""",""webkit_id"":""""},""link-icon-png"":{""title"":""PNG favicons"",""description"":""Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the PNG format can be preferable."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#rel-icon"",""status"":""ls"",""links"":[{""url"":""http://css-tricks.com/favicon-quiz/"",""title"":""Detailed info on favicons for various uses""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1"",""43"":""y #1"",""44"":""y #1"",""45"":""y #1"",""46"":""y #1"",""47"":""y #1"",""48"":""y #1"",""49"":""y #1"",""50"":""y #1"",""51"":""y #1"",""52"":""y #1""},""safari"":{""3.1"":""y #2"",""3.2"":""y #2"",""4"":""y #2"",""5"":""y #2"",""5.1"":""y #2"",""6"":""y #2"",""6.1"":""y #2"",""7"":""y #2"",""7.1"":""y #2"",""8"":""y #2"",""9"":""y #2"",""9.1"":""y #2""},""opera"":{""9"":""y #3"",""9.5-9.6"":""y #3"",""10.0-10.1"":""y #3"",""10.5"":""y #3"",""10.6"":""y #3"",""11"":""y #3"",""11.1"":""y #3"",""11.5"":""y #3"",""11.6"":""y #3"",""12"":""y #3"",""12.1"":""y #3"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1""},""ios_saf"":{""3.2"":""n #4"",""4.0-4.1"":""n #4"",""4.2-4.3"":""n #4"",""5.0-5.1"":""n #4"",""6.0-6.1"":""n #4"",""7.0-7.1"":""n #4"",""8"":""n #4"",""8.1-8.4"":""n #4"",""9.0-9.2"":""n #4"",""9.3"":""n #4""},""op_mini"":{""5.0-8.0"":""n #4""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y #3"",""4.4.3-4.4.4"":""y #3"",""47"":""y #3""},""bb"":{""7"":""y"",""10"":""n #4""},""op_mob"":{""10"":""n #4"",""11"":""n #4"",""11.1"":""n #4"",""11.5"":""n #4"",""12"":""n #4"",""12.1"":""n #4"",""35"":""n #4""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n #4"",""11"":""n #4""},""and_uc"":{""9.9"":""y #2""}},""notes"":""Win8/IE10+ and iOS Safari support other types of icons for webpages too, using alternate tags.\r\n\r\nSee also [SVG favicons](#feat=link-icon-svg)."",""notes_by_num"":{""1"":""If both ICO and PNG are available, will use ICO over PNG if ICO has better matching sizes set."",""2"":""If both ICO and PNG are available, will ALWAYS use ICO file, regardless of sizes set."",""3"":""If multiple formats are available, will use the last one loaded, regardless of sizes (effectively picks at random)."",""4"":""Does not use favicons at all (but may have alternative for bookmarks, etc.).""},""usage_perc_y"":81.61,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""link-icon-svg"":{""title"":""SVG favicons"",""description"":""Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the SVG format can be preferable to more easily support higher resolutions or larger icons."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#rel-icon"",""status"":""ls"",""links"":[{""url"":""http://crbug.com/294179"",""title"":""Chrome bug""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6509196-svg-favicons"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5"",""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""a #2"",""39"":""a #2"",""40"":""a #2"",""41"":""y #4"",""42"":""y #4"",""43"":""y #4"",""44"":""y #4"",""45"":""y #4"",""46"":""y #4"",""47"":""y #4"",""48"":""y #4""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""u"",""51"":""u"",""52"":""u""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""a #3"",""9.1"":""a #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n #1"",""4.0-4.1"":""n #1"",""4.2-4.3"":""n #1"",""5.0-5.1"":""n #1"",""6.0-6.1"":""n #1"",""7.0-7.1"":""n #1"",""8"":""n #1"",""8.1-8.4"":""n #1"",""9.0-9.2"":""a #3"",""9.3"":""a #3""},""op_mini"":{""5.0-8.0"":""n #1""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n #1""},""op_mob"":{""10"":""n #1"",""11"":""n #1"",""11.1"":""n #1"",""11.5"":""n #1"",""12"":""n #1"",""12.1"":""n #1"",""35"":""n #1""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n #1"",""11"":""n #1""},""and_uc"":{""9.9"":""n""}},""notes"":""See also [PNG favicons](#feat=link-icon-png)."",""notes_by_num"":{""1"":""Does not use favicons at all"",""2"":""Partial support in Firefox before version 41 refers to only loading the SVG favicon the first time, but not [on subsequent loads](https://bugzilla.mozilla.org/show_bug.cgi?id=366324#c14)."",""3"":""Safari 9 has support for \""[pinned tab](https://developer.apple.com/library/prerelease/mac/releasenotes/General/WhatsNewInSafari/Articles/Safari_9.html#//apple_ref/doc/uid/TP40014305-CH9-SW20)\"" SVG icons, but this requires an unofficial `rel=\""mask-icon\""` to be set and only works for all-black icons on Pinned Tabs."",""4"":""Firefox [requires](https://bugzilla.mozilla.org/show_bug.cgi?id=366324#c50) the served mime-type to be 'image/svg+xml'.""},""usage_perc_y"":7.25,""usage_perc_a"":10.11,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-media-resolution"":{""title"":""Media Queries: resolution feature"",""description"":""Allows a media query to be set based on the device pixels used per CSS unit. While the standard uses `min`/`max-resolution` for this, some browsers support the older non-standard `device-pixel-ratio` media query."",""spec"":""http://www.w3.org/TR/css3-mediaqueries/#resolution"",""status"":""rec"",""links"":[{""url"":""http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio/"",""title"":""How to unprefix -webkit-device-pixel-ratio""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=78087"",""title"":""WebKit Bug 78087: Implement the 'resolution' media query""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #2"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a x #3"",""5"":""a x #3"",""6"":""a x #3"",""7"":""a x #3"",""8"":""a x #3"",""9"":""a x #3"",""10"":""a x #3"",""11"":""a x #3"",""12"":""a x #3"",""13"":""a x #3"",""14"":""a x #3"",""15"":""a x #3"",""16"":""a x #3"",""17"":""a x #3"",""18"":""a x #3"",""19"":""a x #3"",""20"":""a x #3"",""21"":""a x #3"",""22"":""a x #3"",""23"":""a x #3"",""24"":""a x #3"",""25"":""a x #3"",""26"":""a x #3"",""27"":""a x #3"",""28"":""a x #3"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x #3"",""5"":""a x #3"",""5.1"":""a x #3"",""6"":""a x #3"",""6.1"":""a x #3"",""7"":""a x #3"",""7.1"":""a x #3"",""8"":""a x #3"",""9"":""a x #3"",""9.1"":""a x #3""},""opera"":{""9"":""n"",""9.5-9.6"":""a x #3"",""10.0-10.1"":""a x #3"",""10.5"":""a x #3"",""10.6"":""a x #3"",""11"":""a x #3"",""11.1"":""a x #3"",""11.5"":""a x #3"",""11.6"":""a x #3"",""12"":""a x #3"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""a x #3"",""4.2-4.3"":""a x #3"",""5.0-5.1"":""a x #3"",""6.0-6.1"":""a x #3"",""7.0-7.1"":""a x #3"",""8"":""a x #3"",""8.1-8.4"":""a x #3"",""9.0-9.2"":""a x #3"",""9.3"":""a x #3""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""a x #3"",""3"":""a x #3"",""4"":""a x #3"",""4.1"":""a x #3"",""4.2-4.3"":""a x #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a x #3"",""10"":""a x #3""},""op_mob"":{""10"":""a x #3"",""11"":""a x #3"",""11.1"":""a x #3"",""11.5"":""a x #3"",""12"":""a x #3"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""a x #3""}},""notes"":"""",""notes_by_num"":{""1"":""Supports the `dpi` unit, but does not support `dppx` or `dpcm` units."",""2"":""Firefox before 16 supports only `dpi` unit, but you can set `2dppx` per `min--moz-device-pixel-ratio: 2`"",""3"":""Supports the non-standard `min`/`max-device-pixel-ratio`""},""usage_perc_y"":61.91,""usage_perc_a"":34.5,""ucprefix"":false,""parent"":""css-mediaqueries"",""keywords"":""@media,device-pixel-ratio,resolution,dppx,dpcm,dpi"",""ie_id"":""mediaqueriesresolutionfeature,dppxunitfortheresolutionmediaquery"",""chrome_id"":""5944509615570944"",""firefox_id"":"""",""webkit_id"":""""},""xml-serializer"":{""title"":""DOM Parsing and Serialization"",""description"":""Various DOM parsing and serializing functions, specifically `DOMParser`, `XMLSerializer`, `innerHTML`, `outerHTML` and `adjacentHTML`."",""spec"":""http://www.w3.org/TR/DOM-Parsing/"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/XMLSerializer"",""title"":""MDN - XMLSerializer""},{""url"":""http://ejohn.org/blog/dom-insertadjacenthtml/"",""title"":""Article on insertAdjucentHTML""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a #2"",""3"":""a #2"",""3.5"":""a #2"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #1"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1"",""10"":""a #1""},""op_mob"":{""10"":""u"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #1""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to lacking support for `parseFromString` on the DOMParser."",""2"":""Partial support in older IE refers to only supporting `innerHTML`, nothing else.""},""usage_perc_y"":79.08,""usage_perc_a"":18.31,""ucprefix"":false,""parent"":"""",""keywords"":""parseFromString"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-image-set"":{""title"":""CSS image-set"",""description"":""Method of letting the browser pick the most appropriate CSS background image from a given set, primarily for high PPI screens."",""spec"":""http://dev.w3.org/csswg/css-images-3/#image-set-notation"",""status"":""unoff"",""links"":[{""url"":""http://cloudfour.com/examples/image-set/"",""title"":""Demo""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6606738-image-set"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":62.43,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""cssimageset"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-boxdecorationbreak"":{""title"":""CSS box-decoration-break"",""description"":""Controls whether the box's margins, borders, padding, and other decorations wrap the broken edges of the box fragments (when the box is split by a break (page/column/region/line)."",""spec"":""http://www.w3.org/TR/css3-break/#break-decoration"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break"",""title"":""MDN article""},{""url"":""http://jsbin.com/xojoro/edit?css,output"",""title"":""Demo of effect on box border""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514472-box-decoration-break"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1"",""49"":""a x #1"",""50"":""a x #1"",""51"":""a x #1"",""52"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""9.1"":""a x #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""11.6"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a x #1"",""8"":""a x #1"",""8.1-8.4"":""a x #1"",""9.0-9.2"":""a x #1"",""9.3"":""a x #1""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a x #1"",""4.4.3-4.4.4"":""a x #1"",""47"":""a x #1""},""bb"":{""7"":""n"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""35"":""a x #1""},""and_chr"":{""49"":""a x #1""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to working for inline elements but not across column or page breaks.""},""usage_perc_y"":8.33,""usage_perc_a"":67.12,""ucprefix"":false,""parent"":"""",""keywords"":""box-decoration,box decoration,break"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""object-observe"":{""title"":""Object.observe data binding"",""description"":""Method for data binding, a now-withdrawn ECMAScript 7 proposal"",""spec"":""http://wiki.ecmascript.org/doku.php?id=harmony:observe"",""status"":""unoff"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/es7/observe/"",""title"":""Data-binding Revolutions with Object.observe()""},{""url"":""https://github.com/MaxArt2501/object-observe"",""title"":""Polyfill""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=800355"",""title"":""Firefox tracking bug""},{""url"":""https://esdiscuss.org/topic/an-update-on-object-observe"",""title"":""An update on Object.observe""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Support in Blink-based browsers is expected to be removed in future versions."",""notes_by_num"":{},""usage_perc_y"":48.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""objectobserve"",""chrome_id"":""6147094632988672"",""firefox_id"":"""",""webkit_id"":""""},""css-at-counter-style"":{""title"":""CSS Counter Styles"",""description"":""The @counter-style CSS at-rule allows custom counter styles to be defined. A @counter-style rule defines how to convert a counter value into a string representation."",""spec"":""http://dev.w3.org/csswg/css-counter-styles/"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/@counter-style"",""title"":""MDN article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1"",""48"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""a #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Firefox refers to lacking support for [image symbols](https://bugzilla.mozilla.org/show_bug.cgi?id=1024179)""},""usage_perc_y"":0,""usage_perc_a"":8.09,""ucprefix"":false,""parent"":"""",""keywords"":""css @counter-style, list-style"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-page-break"":{""title"":""CSS page-break properties"",""description"":""Properties to control the way elements are broken across (printed) pages."",""spec"":""http://www.w3.org/TR/CSS2/page.html#page-breaks"",""status"":""rec"",""links"":[{""url"":""https://css-tricks.com/almanac/properties/p/page-break/"",""title"":""CSS Tricks article""},{""url"":""http://dev.w3.org/csswg/css-break-3/#break-between"",""title"":""Latest fragmentation specification (includes column & region breaks)""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""10"":""a #1 #2"",""11"":""a #1 #2""},""edge"":{""12"":""a #1 #2"",""13"":""a #1 #2"",""14"":""a #1 #2""},""firefox"":{""2"":""a #1 #2 #3"",""3"":""a #1 #2 #3"",""3.5"":""a #1 #2 #3"",""3.6"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""5"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""10"":""a #1 #2 #3"",""11"":""a #1 #2 #3"",""12"":""a #1 #2 #3"",""13"":""a #1 #2 #3"",""14"":""a #1 #2 #3"",""15"":""a #1 #2 #3"",""16"":""a #1 #2 #3"",""17"":""a #1 #2 #3"",""18"":""a #1 #2 #3"",""19"":""a #1 #2 #3"",""20"":""a #1 #2 #3"",""21"":""a #1 #2 #3"",""22"":""a #1 #2 #3"",""23"":""a #1 #2 #3"",""24"":""a #1 #2 #3"",""25"":""a #1 #2 #3"",""26"":""a #1 #2 #3"",""27"":""a #1 #2 #3"",""28"":""a #1 #2 #3"",""29"":""a #1 #2 #3"",""30"":""a #1 #2 #3"",""31"":""a #1 #2 #3"",""32"":""a #1 #2 #3"",""33"":""a #1 #2 #3"",""34"":""a #1 #2 #3"",""35"":""a #1 #2 #3"",""36"":""a #1 #2 #3"",""37"":""a #1 #2 #3"",""38"":""a #1 #2 #3"",""39"":""a #1 #2 #3"",""40"":""a #1 #2 #3"",""41"":""a #1 #2 #3"",""42"":""a #1 #2 #3"",""43"":""a #1 #2 #3"",""44"":""a #1 #2 #3"",""45"":""a #1 #2 #3"",""46"":""a #1 #2 #3"",""47"":""a #1 #2 #3"",""48"":""a #1 #2 #3""},""chrome"":{""4"":""a #1 #2 #3"",""5"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""10"":""a #1 #2 #3"",""11"":""a #1 #2 #3"",""12"":""a #1 #2 #3"",""13"":""a #1 #2 #3"",""14"":""a #1 #2 #3"",""15"":""a #1 #2 #3"",""16"":""a #1 #2 #3"",""17"":""a #1 #2 #3"",""18"":""a #1 #2 #3"",""19"":""a #1 #2 #3"",""20"":""a #1 #2 #3"",""21"":""a #1 #2 #3"",""22"":""a #1 #2 #3"",""23"":""a #1 #2 #3"",""24"":""a #1 #2 #3"",""25"":""a #1 #2 #3"",""26"":""a #1 #2 #3"",""27"":""a #1 #2 #3"",""28"":""a #1 #2 #3"",""29"":""a #1 #2 #3"",""30"":""a #1 #2 #3"",""31"":""a #1 #2 #3"",""32"":""a #1 #2 #3"",""33"":""a #1 #2 #3"",""34"":""a #1 #2 #3"",""35"":""a #1 #2 #3"",""36"":""a #1 #2 #3"",""37"":""a #1 #2 #3"",""38"":""a #1 #2 #3"",""39"":""a #1 #2 #3"",""40"":""a #1 #2 #3"",""41"":""a #1 #2 #3"",""42"":""a #1 #2 #3"",""43"":""a #1 #2 #3"",""44"":""a #1 #2 #3"",""45"":""a #1 #2 #3"",""46"":""a #1 #2 #3"",""47"":""a #1 #2 #3"",""48"":""a #1 #2 #3"",""49"":""a #1 #2 #3"",""50"":""a #1 #2 #3"",""51"":""a #1 #2 #3"",""52"":""a #1 #2 #3""},""safari"":{""3.1"":""a #1 #2 #3"",""3.2"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""5"":""a #1 #2 #3"",""5.1"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""6.1"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""7.1"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""9.1"":""a #1 #2 #3""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""y #1"",""10.5"":""y #1"",""10.6"":""y #1"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""11.6"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""15"":""a #1 #2 #3"",""16"":""a #1 #2 #3"",""17"":""a #1 #2 #3"",""18"":""a #1 #2 #3"",""19"":""a #1 #2 #3"",""20"":""a #1 #2 #3"",""21"":""a #1 #2 #3"",""22"":""a #1 #2 #3"",""23"":""a #1 #2 #3"",""24"":""a #1 #2 #3"",""25"":""a #1 #2 #3"",""26"":""a #1 #2 #3"",""27"":""a #1 #2 #3"",""28"":""a #1 #2 #3"",""29"":""a #1 #2 #3"",""30"":""a #1 #2 #3"",""31"":""a #1 #2 #3"",""32"":""a #1 #2 #3"",""33"":""a #1 #2 #3"",""34"":""a #1 #2 #3"",""35"":""a #1 #2 #3"",""36"":""a #1 #2 #3"",""37"":""a #1 #2 #3""},""ios_saf"":{""3.2"":""a #1 #2 #3"",""4.0-4.1"":""a #1 #2 #3"",""4.2-4.3"":""a #1 #2 #3"",""5.0-5.1"":""a #1 #2 #3"",""6.0-6.1"":""a #1 #2 #3"",""7.0-7.1"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""8.1-8.4"":""a #1 #2 #3"",""9.0-9.2"":""a #1 #2 #3"",""9.3"":""a #1 #2 #3""},""op_mini"":{""5.0-8.0"":""y #1""},""android"":{""2.1"":""a #1 #2 #3"",""2.2"":""a #1 #2 #3"",""2.3"":""a #1 #2 #3"",""3"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""4.1"":""a #1 #2 #3"",""4.2-4.3"":""a #1 #2 #3"",""4.4"":""a #1 #2 #3"",""4.4.3-4.4.4"":""a #1 #2 #3"",""47"":""a #1 #2 #3""},""bb"":{""7"":""a #1 #2 #3"",""10"":""a #1 #2 #3""},""op_mob"":{""10"":""y #1"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""35"":""a #1 #2 #3""},""and_chr"":{""49"":""a #1 #2 #3""},""and_ff"":{""45"":""a #1 #2 #3""},""ie_mob"":{""10"":""a #1 #2"",""11"":""a #1 #2""},""and_uc"":{""9.9"":""a #1 #2 #3""}},""notes"":""Not all mobile browsers offer print support; support listed for these is based on browser engine capability."",""notes_by_num"":{""1"":""Supports the `page-break-*` alias from the CSS 2.1 specification, but not the `break-*` properties from the latest spec."",""2"":""Does not support `avoid` for `page-break-before` & `page-break-after` (only `page-break-inside`)."",""3"":""Treats the `left` and `right` values like `always`.""},""usage_perc_y"":4.96,""usage_perc_a"":92.43,""ucprefix"":false,""parent"":"""",""keywords"":""page-break-before,page-break-after,page-break-inside,always,avoid"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-placeholder-shown"":{""title"":"":placeholder-shown CSS pseudo-class"",""description"":""Input elements can sometimes show placeholder text as a hint to the user on what to type in. See, for example, the placeholder attribute in HTML5. The :placeholder-shown pseudo-class matches an input element that is showing such placeholder text."",""spec"":""http://dev.w3.org/csswg/selectors-4/#placeholder"",""status"":""unoff"",""links"":[{""url"":""http://trac.webkit.org/changeset/172826"",""title"":""WebKit commit""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1069015"",""title"":""Firefox bug""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""For support of styling the actual placeholder text itself, see [CSS ::placeholder](http://caniuse.com/#feat=css-placeholder)"",""notes_by_num"":{},""usage_perc_y"":47.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"":placeholder-shown,placeholder-shown,placeholder"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""feature-css-selector-:placeholder-shown""},""broadcastchannel"":{""title"":""BroadcastChannel"",""description"":""BroadcastChannel allows scripts from the same origin but other browsing contexts (windows, workers) to send each other messages."",""spec"":""https://html.spec.whatwg.org/multipage/comms.html#broadcasting-to-other-browsing-contexts"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":7.75,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""broadcast,channel,messaging"",""ie_id"":"""",""chrome_id"":""4585496197988352"",""firefox_id"":"""",""webkit_id"":""""},""css-crisp-edges"":{""title"":""Crisp edges/pixelated images"",""description"":""Scales images with an algorithm that preserves edges and contrast, without smoothing colors or introducing blur. This is intended for images such as pixel art. Official values that accomplish this for the `image-rendering` property are `crisp-edges` and `pixelated`."",""spec"":""http://dev.w3.org/csswg/css-images-3/#valdef-image-rendering-crisp-edges"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering"",""title"":""MDN article""},{""url"":""http://updates.html5rocks.com/2015/01/pixelated"",""title"":""HTML5Rocks article""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""10"":""a x #2"",""11"":""a x #2""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y x #3"",""4"":""y x #3"",""5"":""y x #3"",""6"":""y x #3"",""7"":""y x #3"",""8"":""y x #3"",""9"":""y x #3"",""10"":""y x #3"",""11"":""y x #3"",""12"":""y x #3"",""13"":""y x #3"",""14"":""y x #3"",""15"":""y x #3"",""16"":""y x #3"",""17"":""y x #3"",""18"":""y x #3"",""19"":""y x #3"",""20"":""y x #3"",""21"":""y x #3"",""22"":""y x #3"",""23"":""y x #3"",""24"":""y x #3"",""25"":""y x #3"",""26"":""y x #3"",""27"":""y x #3"",""28"":""y x #3"",""29"":""y x #3"",""30"":""y x #3"",""31"":""y x #3"",""32"":""y x #3"",""33"":""y x #3"",""34"":""y x #3"",""35"":""y x #3"",""36"":""y x #3"",""37"":""y x #3"",""38"":""y x #3"",""39"":""y x #3"",""40"":""y x #3"",""41"":""y x #3"",""42"":""y x #3"",""43"":""y x #3"",""44"":""y x #3"",""45"":""y x #3"",""46"":""y x #3"",""47"":""y x #3"",""48"":""y x #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""y #4"",""42"":""y #4"",""43"":""y #4"",""44"":""y #4"",""45"":""y #4"",""46"":""y #4"",""47"":""y #4"",""48"":""y #4"",""49"":""y #4"",""50"":""y #4"",""51"":""y #4"",""52"":""y #4""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""a x #1"",""6.1"":""y x #3"",""7"":""y x #3"",""7.1"":""y x #3"",""8"":""y x #3"",""9"":""y x #3"",""9.1"":""y x #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y x #3"",""12"":""y x #3"",""12.1"":""y x #3"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y #4"",""29"":""y #4"",""30"":""y #4"",""31"":""y #4"",""32"":""y #4"",""33"":""y #4"",""34"":""y #4"",""35"":""y #4"",""36"":""y #4"",""37"":""y #4""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a x #1"",""6.0-6.1"":""a x #1"",""7.0-7.1"":""y x #3"",""8"":""y x #3"",""8.1-8.4"":""y x #3"",""9.0-9.2"":""y x #3"",""9.3"":""y x #3""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y #4""},""bb"":{""7"":""n"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y x #3"",""12.1"":""y x #3"",""35"":""y #4""},""and_chr"":{""49"":""y #4""},""and_ff"":{""45"":""y x #3""},""ie_mob"":{""10"":""a x #2"",""11"":""a x #2""},""and_uc"":{""9.9"":""a x #1""}},""notes"":""Note that prefixes apply to the value (e.g. `-moz-crisp-edges`), not the `image-rendering` property."",""notes_by_num"":{""1"":""Supported using the non-standard value `-webkit-optimize-contrast`"",""2"":""Internet Explorer accomplishes support using the non-standard declaration `-ms-interpolation-mode: nearest-neighbor`"",""3"":""Supports the `crisp-edges` value, but not `pixelated`."",""4"":""Supports the `pixelated` value, but not `crisp-edges`.""},""usage_perc_y"":67.33,""usage_perc_a"":17.94,""ucprefix"":false,""parent"":"""",""keywords"":""image-rendering,crisp-edges"",""ie_id"":"""",""chrome_id"":""5118058116939776"",""firefox_id"":"""",""webkit_id"":""""},""css-text-align-last"":{""title"":""CSS3 text-align-last"",""description"":""CSS property to describe how the last line of a block or a line right before a forced line break when `text-align` is `justify`."",""spec"":""http://www.w3.org/TR/css3-text/#text-align-last-property"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-align-last"",""title"":""MDN text-align-last""},{""url"":""http://blogs.adobe.com/webplatform/2014/02/25/improving-your-sites-visual-details-css3-text-align-last/"",""title"":""Adobe Web Platform Article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""a"",""13"":""a"",""14"":""a""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n d #2"",""36"":""n d #2"",""37"":""n d #2"",""38"":""n d #2"",""39"":""n d #2"",""40"":""n d #2"",""41"":""n d #2"",""42"":""n d #2"",""43"":""n d #2"",""44"":""n d #2"",""45"":""n d #2"",""46"":""n d #2"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n d #3"",""23"":""n d #3"",""24"":""n d #3"",""25"":""n d #3"",""26"":""n d #3"",""27"":""n d #3"",""28"":""n d #3"",""29"":""n d #3"",""30"":""n d #3"",""31"":""n d #3"",""32"":""n d #3"",""33"":""n d #3"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y x""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""In Internet Explorer, the start and end values are not supported."",""2"":""Enabled through the \""Enable Experimental Web Platform Features\"" flag in chrome://flags"",""3"":""Enabled through the \""Enable Experimental Web Platform Features\"" flag in opera://flags""},""usage_perc_y"":54.52,""usage_perc_a"":10.21,""ucprefix"":false,""parent"":"""",""keywords"":""text align last"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-logical-props"":{""title"":""CSS Logical Properties"",""description"":""Use start/end properties that depend on LTR or RTL writing direction instead of left/right"",""spec"":""http://dev.w3.org/csswg/css-logical-props/"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-margin-start"",""title"":""MDN -moz-margin-start""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-padding-start"",""title"":""MDN -moz-padding-start""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/7438435-css-logical-properties"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""a x #1"",""3.5"":""a x #1"",""3.6"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1"",""48"":""a x #1""},""chrome"":{""4"":""a x #2"",""5"":""a x #2"",""6"":""a x #2"",""7"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""10"":""a x #2"",""11"":""a x #2"",""12"":""a x #2"",""13"":""a x #2"",""14"":""a x #2"",""15"":""a x #2"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""a x #2"",""22"":""a x #2"",""23"":""a x #2"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2"",""33"":""a x #2"",""34"":""a x #2"",""35"":""a x #2"",""36"":""a x #2"",""37"":""a x #2"",""38"":""a x #2"",""39"":""a x #2"",""40"":""a x #2"",""41"":""a x #2"",""42"":""a x #2"",""43"":""a x #2"",""44"":""a x #2"",""45"":""a x #2"",""46"":""a x #2"",""47"":""a x #2"",""48"":""a x #2"",""49"":""a x #2"",""50"":""a x #2"",""51"":""a x #2"",""52"":""a x #2""},""safari"":{""3.1"":""a x #2"",""3.2"":""a x #2"",""4"":""a x #2"",""5"":""a x #2"",""5.1"":""a x #2"",""6"":""a x #2"",""6.1"":""a x #2"",""7"":""a x #2"",""7.1"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""9.1"":""a x #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #2"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""a x #2"",""22"":""a x #2"",""23"":""a x #2"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2"",""33"":""a x #2"",""34"":""a x #2"",""35"":""a x #2"",""36"":""a x #2"",""37"":""a x #2""},""ios_saf"":{""3.2"":""a x #2"",""4.0-4.1"":""a x #2"",""4.2-4.3"":""a x #2"",""5.0-5.1"":""a x #2"",""6.0-6.1"":""a x #2"",""7.0-7.1"":""a x #2"",""8"":""a x #2"",""8.1-8.4"":""a x #2"",""9.0-9.2"":""a x #2"",""9.3"":""a x #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #2"",""2.2"":""a x #2"",""2.3"":""a x #2"",""3"":""a x #2"",""4"":""a x #2"",""4.1"":""a x #2"",""4.2-4.3"":""a x #2"",""4.4"":""a x #2"",""4.4.3-4.4.4"":""a x #2"",""47"":""a x #2""},""bb"":{""7"":""a x #2"",""10"":""a x #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a x #2""},""and_chr"":{""49"":""a x #2""},""and_ff"":{""45"":""a x #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x #2""}},""notes"":"""",""notes_by_num"":{""1"":""Only supports the *-start, and *-end values for `margin`, `border` and `padding`, not the inline/block type values as defined in the spec."",""2"":""Like #1 but also supports `*-before` and `*-end` for `*-block-start` and `*-block-end` properties as well as `start` and `end` values for `text-align`""},""usage_perc_y"":0,""usage_perc_a"":82.21,""ucprefix"":false,""parent"":"""",""keywords"":""margin-start,margin-end,padding-start,padding-end,border-start,border-end,inline-start,inline-end,block-start,block-end"",""ie_id"":""csslogicalpropertieslevel1"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""fetch"":{""title"":""Fetch"",""description"":""A modern replacement for XMLHttpRequest."",""spec"":""https://fetch.spec.whatwg.org/"",""status"":""ls"",""links"":[{""url"":""https://github.com/github/fetch"",""title"":""Polyfill""},{""url"":""http://addyosmani.com/demos/fetch-api/"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n d #1 #4"",""35"":""n d #1 #4"",""36"":""n d #1 #4"",""37"":""n d #1 #4"",""38"":""n d #1 #4"",""39"":""y #4"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""a #2"",""41"":""a #2 #3"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""a #2"",""28"":""a #2 #3"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support can be enabled in Firefox with the `dom.fetch.enabled` flag."",""2"":""Only available in Chrome and Opera within ServiceWorkers."",""3"":""Available in Chrome and Opera within Window and Workers by enabling the \""Experimental Web Platform Features\"" flag in `chrome://flags`"",""4"":""Firefox <40 is not completely conforming to the specs and does not respect the <base> tag for relative URIs in fetch requests. https://bugzilla.mozilla.org/show_bug.cgi?id=1161625""},""usage_perc_y"":55.26,""usage_perc_a"":0.33,""ucprefix"":false,""parent"":"""",""keywords"":""fetch,service,workers,xhr,xmlhttprequest"",""ie_id"":""fetchapi"",""chrome_id"":""6730533392351232"",""firefox_id"":""fetch"",""webkit_id"":""specification-fetch-api""},""referrer-policy"":{""title"":""Referrer Policy"",""description"":""Allow control of HTTP referrers via the referrer meta tag."",""spec"":""http://w3c.github.io/webappsec/specs/referrer-policy/"",""status"":""wd"",""links"":[{""url"":""https://blog.mozilla.org/security/2015/01/21/meta-referrer/"",""title"":""Mozilla security article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""a #1"",""13"":""a #1"",""14"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1"",""9.1"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supports an [older draft](https://wiki.whatwg.org/wiki/Meta_referrer) of the specification with `never`, `always`, `origin` & `default` values.\r\n""},""usage_perc_y"":57.33,""usage_perc_a"":10.92,""ucprefix"":false,""parent"":"""",""keywords"":""meta,referrer,referer"",""ie_id"":""metareferrer"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""background-attachment"":{""title"":""CSS background-attachment"",""description"":""Method of defining how a background image is attached to a scrollable element. Values include `scroll` (default), `fixed` and `local`."",""spec"":""http://www.w3.org/TR/css3-background/#the-background-attachment"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment"",""title"":""MDN article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a #1"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""a #1"",""9.5-9.6"":""a #1"",""10.0-10.1"":""a #1"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #2"",""6.0-6.1"":""a #2"",""7.0-7.1"":""a #2"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""a #2"",""10"":""a #2""},""op_mob"":{""10"":""a #1"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""a #2""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #1""}},""notes"":""Most mobile devices have a delay in updating the background position after scrolling a page with `fixed` backgrounds."",""notes_by_num"":{""1"":""Partial support refers to supporting `fixed` but not `local`"",""2"":""Partial support refers to supporting `local` but not `fixed`""},""usage_perc_y"":60.34,""usage_perc_a"":29.42,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""currentcolor"":{""title"":""CSS currentColor value"",""description"":""A CSS value that will apply the existing `color` value to other properties like `background-color`, etc. "",""spec"":""http://www.w3.org/TR/css3-color/#currentcolor"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentColor_keyword"",""title"":""MDN article""},{""url"":""http://css-tricks.com/currentcolor/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":96.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""input-pattern"":{""title"":""Pattern attribute for input fields"",""description"":""Allows validation of an input field based on a given regular expression pattern."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-pattern-attribute"",""status"":""ls"",""links"":[{""url"":""http://html5pattern.com"",""title"":""Site with common sample patterns""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""a #1 #2"",""6"":""a #1 #2"",""6.1"":""a #1 #2"",""7"":""a #1 #2"",""7.1"":""a #1 #2"",""8"":""a #1 #2"",""9"":""a #1 #2"",""9.1"":""a #1 #2""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""a #1 #2"",""6.0-6.1"":""a #1 #2"",""7.0-7.1"":""a #1 #2"",""8"":""a #1 #2"",""8.1-8.4"":""a #1 #2"",""9.0-9.2"":""a #1 #2"",""9.3"":""a #1 #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""a #1""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not displaying a message for invalid patterns"",""2"":""Safari browsers support the `pattern` attribute but will still allow forms to be submitted if the pattern is incorrect. See the [form validation data](http://caniuse.com/#feat=form-validation) for details.""},""usage_perc_y"":76.29,""usage_perc_a"":11.25,""ucprefix"":false,""parent"":""form-validation"",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""registerprotocolhandler"":{""title"":""Custom protocol handling"",""description"":""Method of allowing a webpage to handle a given protocol using `navigator.registerProtocolHandler`. This allows certain URLs to be opened by a given web application, for example `mailto:` addresses can be opened by a webmail client."",""spec"":""https://html.spec.whatwg.org/multipage/webappapis.html#custom-handlers"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler"",""title"":""MDN article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1"",""43"":""y #1"",""44"":""y #1"",""45"":""y #1"",""46"":""y #1"",""47"":""y #1"",""48"":""y #1"",""49"":""y #1"",""50"":""y #1"",""51"":""y #1"",""52"":""y #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""y #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supports protocols `mailto`, `mms`, `nntp`, `rtsp`, and `webcal` but requires custom protocols to start with `web+`""},""usage_perc_y"":41.11,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-snappoints"":{""title"":""CSS Scroll snap points"",""description"":""CSS technique that allows customizable scrolling experiences like pagination of carousels by setting defined snap points."",""spec"":""http://www.w3.org/TR/css-snappoints-1/"",""status"":""wd"",""links"":[{""url"":""http://generatedcontent.org/post/66817675443/setting-native-like-scrolling-offsets-in-css-with"",""title"":""Blog post""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scroll_Snap_Points"",""title"":""MDN Documentation for CSS Scroll snap points""},{""url"":""https://github.com/ckrack/scrollsnap-polyfill"",""title"":""Polyfill""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #2""},""edge"":{""12"":""a x #2"",""13"":""a x #2"",""14"":""a x #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""a x #4"",""9.1"":""a x #4""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE10 refers to support limited to touch screens."",""2"":""Partial support in IE11 [documented here](https://dl.dropboxusercontent.com/u/444684/openwebref/CSS/scroll-snap-points/support.html)"",""3"":""Can be enabled in Firefox using the `layout.css.scroll-snap.enabled` flag in `about:config`"",""4"":""Partial support in Safari refers to not supporting the `none` keyword in `scroll-snap-points-x`, `scroll-snap-points-y` and `scroll-snap-coordinate`, and length keywords (`top`, `right`, etc.) in `scroll-snap-destination` and `scroll-snap-coordinate`.""},""usage_perc_y"":14.29,""usage_perc_a"":9.53,""ucprefix"":false,""parent"":"""",""keywords"":""scroll-snap-points-x,scroll-snap-points-y,scroll-snap-type,scroll-snap-destination,scroll-snap-coordinate"",""ie_id"":""cssscrollingsnappoints"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""specification-css-scroll-snap-points-module-level-1""},""input-minlength"":{""title"":""Minimum length attribute for input fields"",""description"":""Declares a lower bound on the number of characters a user can input."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-maxlength-and-minlength-attributes"",""status"":""ls"",""links"":[{""url"":""http://www.w3.org/TR/html5/forms.html#setting-minimum-input-length-requirements:-the-minlength-attribute"",""title"":""W3C usage example""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6565212-minlength-attribute"",""title"":""Microsoft Edge feature request on UserVoice""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=932755"",""title"":""Firefox tracking bug""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=149832"",""title"":""WebKit feature request bug""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The [`pattern` attribute](http://caniuse.com/#feat=input-pattern) can be used [as an alternative](http://stackoverflow.com/a/10294291) solution for browsers without support."",""notes_by_num"":{},""usage_perc_y"":48.08,""usage_perc_a"":0,""ucprefix"":false,""parent"":""form-validation"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""6023370181181440"",""firefox_id"":"""",""webkit_id"":""""},""css-media-interaction"":{""title"":""Media Queries: interaction media features"",""description"":""Allows a media query to be set based on the presence and accuracy of the user's pointing device, and whether they have the ability to hover over elements on the page. This includes the `pointer`, `any-pointer`, `hover`, and `any-hover` media features."",""spec"":""http://www.w3.org/TR/mediaqueries-4/#mf-interaction"",""status"":""wd"",""links"":[{""url"":""http://jordanm.co.uk/2013/11/11/potential-use-cases-for-script-hover-and-pointer.html"",""title"":""Potential use cases for script, hover and pointer CSS Level 4 Media Features""},{""url"":""https://dev.opera.com/articles/media-features/"",""title"":""Interaction Media Features and their potential (for incorrect assumptions)""},{""url"":""https://github.com/twbs/mq4-hover-shim"",""title"":""Polyfill for the `hover` media feature""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":57.61,""usage_perc_a"":0,""ucprefix"":false,""parent"":""css-mediaqueries"",""keywords"":""@media,interaction,hover,any-hover,pointer,any-pointer"",""ie_id"":""mediaquerieslevel4pointerandhover"",""chrome_id"":""6460705494532096"",""firefox_id"":"""",""webkit_id"":""""},""ime"":{""title"":""Input Method Editor API"",""description"":""Provides scripted access to the Input Method Editor (IME). An IME is often used to input characters from East Asian languages by typing roman characters and selecting from the resulting suggestions."",""spec"":""http://www.w3.org/TR/ime-api/"",""status"":""wd"",""links"":[{""url"":""http://blogs.msdn.com/b/ie/archive/2014/03/31/building-better-input-experience-for-east-asian-users-with-the-ime-api-in-ie11.aspx"",""title"":""Building Better Input Experience for East Asian Users with the IME API in IE11""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y x #1""},""edge"":{""12"":""y x #1"",""13"":""y x #1"",""14"":""y x #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""y x #1""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Prefixed implementation uses `msGetInputContext()` method from an earlier version of the spec to get the `InputMethodContext`, rather than the `inputMethodContext` attribute. Also includes support for `getCompositionAlternatives()` from the latest Editor'""},""usage_perc_y"":7.85,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""ime,cjk,input,internationalization,inputMethodContext,candidatewindow,composition"",""ie_id"":""imeapi"",""chrome_id"":""6366722080636928"",""firefox_id"":"""",""webkit_id"":""""},""font-smooth"":{""title"":""CSS font-smooth"",""description"":""Controls the application of anti-aliasing when fonts are rendered."",""spec"":""http://www.w3.org/TR/WD-font/#font-smooth"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-smooth"",""title"":""MDN article""},{""url"":""http://www.w3.org/TR/WD-font/#font-smooth"",""title"":""Old version of W3C recommendation containing font-smooth""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""a x #2 #3"",""26"":""a x #2 #3"",""27"":""a x #2 #3"",""28"":""a x #2 #3"",""29"":""a x #2 #3"",""30"":""a x #2 #3"",""31"":""a x #2 #3"",""32"":""a x #2 #3"",""33"":""a x #2 #3"",""34"":""a x #2 #3"",""35"":""a x #2 #3"",""36"":""a x #2 #3"",""37"":""a x #2 #3"",""38"":""a x #2 #3"",""39"":""a x #2 #3"",""40"":""a x #2 #3"",""41"":""a x #2 #3"",""42"":""a x #2 #3"",""43"":""a x #2 #3"",""44"":""a x #2 #3"",""45"":""a x #2 #3"",""46"":""a x #2 #3"",""47"":""a x #2 #3"",""48"":""a x #2 #3""},""chrome"":{""4"":""n"",""5"":""a x #1 #3"",""6"":""a x #1 #3"",""7"":""a x #1 #3"",""8"":""a x #1 #3"",""9"":""a x #1 #3"",""10"":""a x #1 #3"",""11"":""a x #1 #3"",""12"":""a x #1 #3"",""13"":""a x #1 #3"",""14"":""a x #1 #3"",""15"":""a x #1 #3"",""16"":""a x #1 #3"",""17"":""a x #1 #3"",""18"":""a x #1 #3"",""19"":""a x #1 #3"",""20"":""a x #1 #3"",""21"":""a x #1 #3"",""22"":""a x #1 #3"",""23"":""a x #1 #3"",""24"":""a x #1 #3"",""25"":""a x #1 #3"",""26"":""a x #1 #3"",""27"":""a x #1 #3"",""28"":""a x #1 #3"",""29"":""a x #1 #3"",""30"":""a x #1 #3"",""31"":""a x #1 #3"",""32"":""a x #1 #3"",""33"":""a x #1 #3"",""34"":""a x #1 #3"",""35"":""a x #1 #3"",""36"":""a x #1 #3"",""37"":""a x #1 #3"",""38"":""a x #1 #3"",""39"":""a x #1 #3"",""40"":""a x #1 #3"",""41"":""a x #1 #3"",""42"":""a x #1 #3"",""43"":""a x #1 #3"",""44"":""a x #1 #3"",""45"":""a x #1 #3"",""46"":""a x #1 #3"",""47"":""a x #1 #3"",""48"":""a x #1 #3"",""49"":""a x #1 #3"",""50"":""a x #1 #3"",""51"":""a x #1 #3"",""52"":""a x #1 #3""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x #1 #3"",""5"":""a x #1 #3"",""5.1"":""a x #1 #3"",""6"":""a x #1 #3"",""6.1"":""a x #1 #3"",""7"":""a x #1 #3"",""7.1"":""a x #1 #3"",""8"":""a x #1 #3"",""9"":""a x #1 #3"",""9.1"":""a x #1 #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #1 #3"",""16"":""a x #1 #3"",""17"":""a x #1 #3"",""18"":""a x #1 #3"",""19"":""a x #1 #3"",""20"":""a x #1 #3"",""21"":""a x #1 #3"",""22"":""a x #1 #3"",""23"":""a x #1 #3"",""24"":""a x #1 #3"",""25"":""a x #1 #3"",""26"":""a x #1 #3"",""27"":""a x #1 #3"",""28"":""a x #1 #3"",""29"":""a x #1 #3"",""30"":""a x #1 #3"",""31"":""a x #1 #3"",""32"":""a x #1 #3"",""33"":""a x #1 #3"",""34"":""a x #1 #3"",""35"":""a x #1 #3"",""36"":""a x #1 #3"",""37"":""a x #1 #3""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Though present in early (2002) drafts of CSS3 Fonts, `font-smooth` has been removed from this specification and is currently not on the standard track."",""notes_by_num"":{""1"":""Webkit implements something similar with a different name `-webkit-font-smoothing` and different values: `none`, `antialiased` and `subpixel-antialiased`."",""2"":""Firefox implements something similar with a different name `-moz-osx-font-smoothing` and different values: `auto`, `inherit`, `unset`, `grayscale`."",""3"":""Works only on Mac OS X platform.""},""usage_perc_y"":0,""usage_perc_a"":43.06,""ucprefix"":false,""parent"":"""",""keywords"":""font smooth,font smoothing,-webkit-font-smoothing,-moz-osx-font-smoothing"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""audiotracks"":{""title"":""Audio Tracks"",""description"":""Method of specifying and selecting between multiple audio tracks. Useful for providing audio descriptions, director's commentary, additional languages, alternative takes, etc."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist-and-videotracklist-objects"",""status"":""ls"",""links"":[{""url"":""https://msdn.microsoft.com/en-US/library/hh772483%28v=vs.85%29.aspx"",""title"":""MSDN article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":18.91,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""AudioTrack,AudioTrackList,media,multiple,selection"",""ie_id"":""audiotracks"",""chrome_id"":""5748496434987008"",""firefox_id"":"""",""webkit_id"":""""},""videotracks"":{""title"":""Video Tracks"",""description"":""Method of specifying and selecting between multiple video tracks. Useful for providing sign language tracks, burnt-in captions or subtitles, alternative camera angles, etc."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist-and-videotracklist-objects"",""status"":""ls"",""links"":[{""url"":""https://msdn.microsoft.com/en-US/library/dn806262%28v=vs.85%29.aspx"",""title"":""MSDN article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":11.4,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""VideoTrack,VideoTrackList,media,multiple,selection"",""ie_id"":""videotracks"",""chrome_id"":""5748496434987008"",""firefox_id"":"""",""webkit_id"":""""},""contentsecuritypolicy2"":{""title"":""Content Security Policy Level 2"",""description"":""Mitigate cross-site scripting attacks by whitelisting allowed sources of script, style, and other resources. CSP 2 adds hash-source, nonce-source, and five new directives"",""spec"":""http://www.w3.org/TR/CSP/"",""status"":""cr"",""links"":[{""url"":""http://html5rocks.com/en/tutorials/security/content-security-policy/"",""title"":""HTML5Rocks article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #2"",""36"":""a #3"",""37"":""a #3"",""38"":""a #3"",""39"":""a #3"",""40"":""a #3"",""41"":""a #3"",""42"":""a #3"",""43"":""a #3"",""44"":""a #3"",""45"":""a #3"",""46"":""a #3"",""47"":""a #3"",""48"":""a #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""a #4"",""37"":""a #4"",""38"":""a #4"",""39"":""a #5"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""a #4"",""24"":""a #4"",""25"":""a #4"",""26"":""a #5"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""a #6""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Firefox 31-34 is missing the plugin-types, child-src, frame-ancestors, base-uri, and form-action directives."",""2"":""Firefox 35 is missing the plugin-types, child-src, frame-ancestors, and form-action directives."",""3"":""Firefox 36+ is missing the plugin-types and child-src directives."",""4"":""Chrome 36-38 & Opera 23-25 are missing the plugin-types, child-src, frame-ancestors, base-uri, and form-action directives."",""5"":""Chrome 39 and Opera 26 are missing the plugin-types, child-src, base-uri, and form-action directives."",""6"":""Firefox 38 on Android is missing the child-src directive.""},""usage_perc_y"":48.08,""usage_perc_a"":8.71,""ucprefix"":false,""parent"":"""",""keywords"":""csp,header,nonce,hash"",""ie_id"":"""",""chrome_id"":""4957003285790720"",""firefox_id"":"""",""webkit_id"":""""},""permissions-api"":{""title"":""Permissions API"",""description"":""High-level JavaScript API for checking and requesting permissions"",""spec"":""https://w3c.github.io/permissions/"",""status"":""unoff"",""links"":[{""url"":""http://updates.html5rocks.com/2015/04/permissions-api-for-the-web"",""title"":""Permission API samples and examples""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":47.58,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web-permissions,navigator.permissions"",""ie_id"":"""",""chrome_id"":""6376494003650560"",""firefox_id"":""permissions"",""webkit_id"":""""},""http2"":{""title"":""HTTP/2 protocol"",""description"":""Networking protocol for low-latency transport of content over the web. Originally started out from the SPDY protocol, now standardized as HTTP version 2."",""spec"":""http://http2.github.io/http2-spec/index.html"",""status"":""other"",""links"":[{""url"":""http://en.wikipedia.org/wiki/HTTP/2"",""title"":""Wikipedia""},{""url"":""https://http2.akamai.com/demo"",""title"":""Browser support test""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a #1 #2""},""edge"":{""12"":""y #2"",""13"":""y #2"",""14"":""y #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y #2"",""37"":""y #2"",""38"":""y #2"",""39"":""y #2"",""40"":""y #2"",""41"":""y #2"",""42"":""y #2"",""43"":""y #2"",""44"":""y #2"",""45"":""y #2"",""46"":""y #2"",""47"":""y #2"",""48"":""y #2""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""y #2"",""42"":""y #2"",""43"":""y #2"",""44"":""y #2"",""45"":""y #2"",""46"":""y #2"",""47"":""y #2"",""48"":""y #2"",""49"":""y #2"",""50"":""y #2"",""51"":""y #2"",""52"":""y #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""a #2 #3"",""9.1"":""a #2 #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y #2"",""29"":""y #2"",""30"":""y #2"",""31"":""y #2"",""32"":""y #2"",""33"":""y #2"",""34"":""y #2"",""35"":""y #2"",""36"":""y #2"",""37"":""y #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y #2"",""9.3"":""y #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y #2""},""and_chr"":{""49"":""y #2""},""and_ff"":{""45"":""y #2""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""See also support for [the SPDY protocol](http://caniuse.com/#feat=spdy), precursor of HTTP2."",""notes_by_num"":{""1"":""Partial support in IE11 refers to being limited to Windows 10."",""2"":""Only supports HTTP2 over TLS (https)"",""3"":""Partial support in Safari refers to being limited to OSX 10.11+""},""usage_perc_y"":63.81,""usage_perc_a"":7.78,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""http2"",""chrome_id"":""5152586365665280"",""firefox_id"":"""",""webkit_id"":""""},""font-kerning"":{""title"":""CSS3 font-kerning"",""description"":""Controls the usage of the kerning information (spacing between letters) stored in the font. Note that this only affects OpenType fonts with kerning information, it has no effect on other fonts."",""spec"":""http://www.w3.org/TR/css3-fonts/#font-kerning-prop"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-kerning"",""title"":""MDN article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n d #1"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""Browsers with support for [font feature settings](http://caniuse.com/#feat=font-feature) can also set kerning value."",""notes_by_num"":{""1"":""Disabled by default, can be enabled using preference layout.css.font-features.enabled - defaulting to true on Nightly and Aurora only.""},""usage_perc_y"":78.7,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""jpeg2000"":{""title"":""JPEG 2000 image format"",""description"":""JPEG 2000 (JP2) was created by the Joint Photographic Experts Group committee in 2000 with the intention of superseding their original discrete cosine transform-based JPEG standard (created in 1992) with a newly designed, wavelet-based method. It offers some advantages in image fidelity over standard JPEG."",""spec"":""http://www.itu.int/rec/T-REC-T.800-200208-I"",""status"":""other"",""links"":[{""url"":""https://en.wikipedia.org/wiki/JPEG_2000"",""title"":""Wikipedia article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y #1"",""5.1"":""y #1"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Not supported by Safari for Windows""},""usage_perc_y"":10.5,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""jp2,jpeg2000,jpeg 2000"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""upgradeinsecurerequests"":{""title"":""Upgrade Insecure Requests"",""description"":""Declare that browsers should transparently upgrade HTTP resources on a website to HTTPS."",""spec"":""http://www.w3.org/TR/upgrade-insecure-requests/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives#upgrade-insecure-requests"",""title"":""MDN article""},{""url"":""https://googlechrome.github.io/samples/csp-upgrade-insecure-requests/index.html"",""title"":""Demo Website""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=143653"",""title"":""WebKit feature request bug""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The HTTP header is `Content-Security-Policy: upgrade-insecure-requests`. Alternatively, the HTML tag is `<meta http-equiv=\""Content-Security-Policy\"" content=\""upgrade-insecure-requests\"">`."",""notes_by_num"":{},""usage_perc_y"":54.71,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""security,header"",""ie_id"":""upgradeinsecureresourcerequests"",""chrome_id"":""6534575509471232"",""firefox_id"":"""",""webkit_id"":""""},""publickeypinning"":{""title"":""Public Key Pinning"",""description"":""Declare that a website's HTTPS certificate should only be treated as valid if the public key is contained in a specified list to prevent MITM attacks that use valid CA-issued certificates."",""spec"":""https://tools.ietf.org/html/rfc7469"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning"",""title"":""MDN article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""u"",""21"":""u"",""22"":""u"",""23"":""a"",""24"":""u"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The HTTP header syntax is 'Public-Key-Pins: pin-sha256=\""base64==\""; max-age=expireTime [; includeSubdomains][; report-uri=\""reportURI\""]'."",""notes_by_num"":{},""usage_perc_y"":56.27,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""pkp,hpkp,security,header"",""ie_id"":""publickeypinningextensionforhttp"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""input-email-tel-url"":{""title"":""Email, telephone & URL input types"",""description"":""Text input fields intended for email addresses, telephone numbers or URLs. Particularly useful in combination with [form validation](http://caniuse.com/#feat=form-validation)"",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#telephone-state-(type=tel)"",""status"":""ls"",""links"":[{""url"":""http://www.htmlgoodies.com/html5/tutorials/whats-new-in-html5-forms-email-url-and-telephone-input-types.html#fbid=c9PEy7_9RZb"",""title"":""Article on usage""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Browsers without support for these types will fall back to using the \""text\"" type."",""notes_by_num"":{""1"":""Does not provide an email-specific keyboard for email addresses""},""usage_perc_y"":90.85,""usage_perc_a"":0.11,""ucprefix"":false,""parent"":""forms"",""keywords"":""input[type=email],input[type=tel],input[type=url]"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""fieldset-disabled"":{""title"":""disabled attribute of the fieldset element"",""description"":""Allows disabling all of the form control descendants of a fieldset via a `disabled` attribute on the fieldset element itself."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-fieldset-disabled"",""status"":""ls"",""links"":[{""url"":""http://output.jsbin.com/bibiqi/1/edit"",""title"":""JS Bin Testcase/Demo""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""u"",""6"":""a #1 #2"",""7"":""a #1 #2"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1 #2"",""11"":""a #1 #2""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""u"",""17"":""u"",""18"":""u"",""19"":""u"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #1 #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""a #2""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Text inputs that are descendants of a disabled fieldset appear disabled but the user can still interact with them. [See IE bug #962368.](https://connect.microsoft.com/IE/feedbackdetail/view/962368/can-still-edit-input-type-text-within-fieldset-disabled)"",""2"":""File inputs that are descendants of a disabled fieldset appear disabled but the user can still interact with them. [See IE bug #817488.](https://connect.microsoft.com/IE/feedbackdetail/view/817488)""},""usage_perc_y"":81.68,""usage_perc_a"":13.66,""ucprefix"":false,""parent"":"""",""keywords"":""HTMLFieldSetElement,fieldset,disabled"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""font-variant-alternates"":{""title"":""CSS font-variant-alternates"",""description"":""Controls the usage of alternate glyphs associated to alternative names defined in @font-feature-values for certain types of OpenType fonts."",""spec"":""http://www.w3.org/TR/css-fonts-3/#propdef-font-variant-alternates"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-alternates"",""title"":""Mozilla Developer Network""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n #1"",""11"":""n #1""},""edge"":{""12"":""n #1"",""13"":""n #1"",""14"":""n #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n #1"",""5"":""n #1"",""6"":""n #1"",""7"":""n #1"",""8"":""n #1"",""9"":""n #1"",""10"":""n #1"",""11"":""n #1"",""12"":""n #1"",""13"":""n #1"",""14"":""n #1"",""15"":""n #1"",""16"":""n #1"",""17"":""n #1"",""18"":""n #1"",""19"":""n #1"",""20"":""n #1"",""21"":""n #1"",""22"":""n #1"",""23"":""n #1"",""24"":""n d #2"",""25"":""n d #2"",""26"":""n d #2"",""27"":""n d #2"",""28"":""n d #2"",""29"":""n d #2"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n #1"",""17"":""n #1"",""18"":""n #1"",""19"":""n #1"",""20"":""n #1"",""21"":""n #1"",""22"":""n #1"",""23"":""n #1"",""24"":""n #1"",""25"":""n #1"",""26"":""n #1"",""27"":""n #1"",""28"":""n #1"",""29"":""n #1"",""30"":""n #1"",""31"":""n #1"",""32"":""n #1"",""33"":""n #1"",""34"":""n #1"",""35"":""n #1"",""36"":""n #1"",""37"":""n #1"",""38"":""n #1"",""39"":""n #1"",""40"":""n #1"",""41"":""n #1"",""42"":""n #1"",""43"":""n #1"",""44"":""n #1"",""45"":""n #1"",""46"":""n #1"",""47"":""n #1"",""48"":""n #1"",""49"":""n #1"",""50"":""n #1"",""51"":""n #1"",""52"":""n #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n #1"",""5"":""n #1"",""5.1"":""n #1"",""6"":""n #1"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n #1"",""16"":""n #1"",""17"":""n #1"",""18"":""n #1"",""19"":""n #1"",""20"":""n #1"",""21"":""n #1"",""22"":""n #1"",""23"":""n #1"",""24"":""n #1"",""25"":""n #1"",""26"":""n #1"",""27"":""n #1"",""28"":""n #1"",""29"":""n #1"",""30"":""n #1"",""31"":""n #1"",""32"":""n #1"",""33"":""n #1"",""34"":""n #1"",""35"":""n #1"",""36"":""n #1"",""37"":""n #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n #1"",""4.2-4.3"":""n #1"",""5.0-5.1"":""n #1"",""6.0-6.1"":""n #1"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n #1"",""4.4.3-4.4.4"":""n #1"",""47"":""n #1""},""bb"":{""7"":""n"",""10"":""n #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n #1""},""and_chr"":{""49"":""n #1""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n #1""}},""notes"":"""",""notes_by_num"":{""1"":""Low-level syntax available in [font-feature-settings](http://caniuse.com/#feat=font-feature) property equivalent to OpenType features: salt, ss01 through ss20, cv01 through cv99, swsh, cswh, ornm, nalt"",""2"":""Experimental support available by enabling the layout.css.font-features.enabled flag""},""usage_perc_y"":8.05,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""font-feature,font-feature-settings,font-variant"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""form-attribute"":{""title"":""Form attribute"",""description"":""Attribute for associating input and submit buttons with a form."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-fae-form"",""status"":""ls"",""links"":[{""url"":""http://www.w3.org/TR/html5/forms.html#attr-fae-form"",""title"":""Input attribute specification""},{""url"":""http://www.impressivewebs.com/html5-form-attribute/"",""title"":""Article on usage""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/7327649-add-support-for-the-form-attribute"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""u"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":86.94,""usage_perc_a"":0,""ucprefix"":false,""parent"":""forms"",""keywords"":""form,attribute"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""es5"":{""title"":""ECMAScript 5"",""description"":""Full support for the ECMAScript 5 specification. Features include `Function.prototype.bind`, Array methods like `indexOf`, `forEach`, `map` & `filter`, Object methods like `defineProperty`, `create` & `keys`, the `trim` method on Strings and many more."",""spec"":""http://www.ecma-international.org/ecma-262/5.1/"",""status"":""other"",""links"":[{""url"":""http://kangax.github.io/compat-table/es5/"",""title"":""Detailed compatibility tables & tests""},{""url"":""http://ejohn.org/blog/ecmascript-5-objects-and-properties/"",""title"":""Overview of objects & properties""},{""url"":""https://github.com/es-shims/es5-shim"",""title"":""ES5 polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n #4"",""9"":""a #2"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""a"",""3.6"":""a"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""a"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a #1 #2 #3"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a #1"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""As the specification includes many JavaScript features, un-numbered partial support varies widely and is shown in detail on the [ECMAScript 5 compatibilty tables](http://kangax.github.io/compat-table/es5/) by Kangax."",""notes_by_num"":{""1"":""Does not support `parseInt()` ignoring leading zeros. "",""2"":""Does not support Strict mode"",""3"":""Does not support zero-width chars in identifiers & Immutable `undefined`"",""4"":""IE8 has virtually no ES5 support, but does support `Object.defineProperty`, `Object.getOwnPropertyDescriptor`, JSON parsing & Property access on strings""},""usage_perc_y"":88.49,""usage_perc_a"":7.99,""ucprefix"":false,""parent"":"""",""keywords"":""es5,function.bind,array.foreach,array.indexof,array.map,date.now,defineproperties,getprototypeof,keys,seal,freeze,preventextensions,issealed,isfrozen,isextensible,getownpropertydescriptorgetownpropertynames,toisostringc,isarray,lastindexof,every,some,reduce,reduceright,getter,setter"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""page-transition-events"":{""title"":""PageTransitionEvent"",""description"":""Fired at the Window when the page's entry in the session history stops being the current entry. Includes the `pageshow` and `pagehide` events."",""spec"":""https://html.spec.whatwg.org/multipage/indices.html#event-pageshow"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Events/pageshow"",""title"":""pageshow - Event reference | MDN""},{""url"":""http://www.w3schools.com/tags/ev_onpageshow.asp"",""title"":""HTML onpageshow Event Attribute""}],""categories"":[""HTML5"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":90.04,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""history,page,transition,hide,show,bfcache,event,persisted"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""ogg-vorbis"":{""title"":""Ogg Vorbis audio format"",""description"":""Vorbis is a free and open source audio format, most commonly used with the Ogg container."",""spec"":""http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html"",""status"":""other"",""links"":[{""url"":""https://en.wikipedia.org/wiki/Vorbis"",""title"":""Wikipedia article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Support refers to use using the `audio` element, not other conditions."",""notes_by_num"":{},""usage_perc_y"":71.78,""usage_perc_a"":0,""ucprefix"":false,""parent"":""audio"",""keywords"":"".ogg,.oga,application/ogg,audio/ogg"",""ie_id"":""vorbisaudiocodec,oggcontainer"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""meter"":{""title"":""meter element"",""description"":""Method of indicating the current level of a gauge."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-meter-element"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter"",""title"":""Mozilla Developer Network article""},{""url"":""http://html5doctor.com/measure-up-with-the-meter-tag/"",""title"":""HTML5 Doctor on meter element""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6803893-meter"",""title"":""Microsoft Edge feature request on UserVoice""},{""url"":""https://dev.opera.com/articles/new-form-features-in-html5/#newoutput"",""title"":""Dev.Opera article""},{""url"":""http://peter.sh/examples/?/html/meter-progress.html"",""title"":""Examples of progress and meter elements""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":73.26,""usage_perc_a"":0,""ucprefix"":false,""parent"":""forms"",""keywords"":""<meter>"",""ie_id"":""meterelement"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""progress"":{""title"":""progress element"",""description"":""Method of indicating a progress state."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-progress-element"",""status"":""ls"",""links"":[{""url"":""http://css-tricks.com/html5-progress-element/"",""title"":""CSS-Tricks article""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress"",""title"":""Mozilla Developer Network article""},{""url"":""https://dev.opera.com/articles/new-form-features-in-html5/#newoutput"",""title"":""Dev.Opera article""},{""url"":""http://peter.sh/examples/?/html/meter-progress.html"",""title"":""Examples of progress and meter elements""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""iOS Safari does not support \""indeterminate\"" <progress> elements.""},""usage_perc_y"":81.19,""usage_perc_a"":8.04,""ucprefix"":false,""parent"":""forms"",""keywords"":""#progressmeter,<progress>"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-filter-function"":{""title"":""CSS filter() function"",""description"":""This function filters a CSS input image with a set of filter functions (like blur, grayscale or hue)"",""spec"":""http://www.w3.org/TR/filter-effects/#FilterCSSImageValue"",""status"":""wd"",""links"":[{""url"":""http://iamvdo.me/en/blog/advanced-css-filters#filter"",""title"":""Blog post""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y x"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":8.53,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""filter, function"",""ie_id"":""cssfilterimagefunction"",""chrome_id"":""5425136400334848"",""firefox_id"":"""",""webkit_id"":""""},""css-element-function"":{""title"":""CSS element() function"",""description"":""This function renders a live image generated from an arbitrary HTML element"",""spec"":""http://www.w3.org/TR/css4-images/#element-notation"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/element"",""title"":""MDN page""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""a x #1"",""3"":""a x #1"",""3.5"":""a x #1"",""3.6"":""a x #1"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y x""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""In Firefox < 4, usage limited to the background and background-image CSS properties""},""usage_perc_y"":8.87,""usage_perc_a"":0.09,""ucprefix"":false,""parent"":"""",""keywords"":""element, function"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""u2f"":{""title"":""FIDO U2F API"",""description"":""Javascript API to interact with Universal Second Factor (U2F) devices. This allows users to log into sites more securely using two-factor authentication with a USB dongle. "",""spec"":""https://fidoalliance.org/specs/fido-u2f-v1.0-nfc-bt-amendment-20150514/fido-u2f-javascript-api.html"",""status"":""other"",""links"":[{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1065729"",""title"":""Mozilla bug""},{""url"":""http://googleonlinesecurity.blogspot.com/2014/10/strengthening-2-step-verification-with.html"",""title"":""Google Security article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n #1"",""39"":""n #1"",""40"":""n #1"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Requires the \""FIDO U2F (Universal 2nd Factor)\"" Chrome extension""},""usage_perc_y"":29.63,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""fido,u2f"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""aac"":{""title"":""AAC audio file format"",""description"":""Advanced Audio Coding format, designed to be the successor format to MP3, with generally better sound quality."",""spec"":""http://www.digitalpreservation.gov/formats/fdd/fdd000114.shtml"",""status"":""other"",""links"":[{""url"":""https://en.wikipedia.org/wiki/Advanced_Audio_Coding"",""title"":""Wikipedia article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1"",""48"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""u"",""11"":""u"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""a #1""},""ie_mob"":{""10"":""y"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Support refers to using the `audio` element, not other conditions."",""notes_by_num"":{""1"":""Partial support in Firefox refers to only supporting AAC in an MP4 container and only when the operating system already has the codecs installed.""},""usage_perc_y"":81.67,""usage_perc_a"":8.58,""ucprefix"":false,""parent"":""audio"",""keywords"":""audio/aac"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""link-rel-prefetch"":{""title"":""Resource Hints: prefetch"",""description"":""Informs the browsers that a given resource should be prefetched so it can be loaded more quickly. This is indicated using `<link rel=\""prefetch\"" href=\""(url)\"">`"",""spec"":""http://www.w3.org/TR/resource-hints/#dfn-prefetch"",""status"":""wd"",""links"":[{""url"":""https://en.wikipedia.org/wiki/Link_prefetching"",""title"":""Wikipedia article""},{""url"":""https://medium.com/@luisvieira_gmr/html5-prefetch-1e54f6dda15d"",""title"":""Article on prefetch and other hints""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":69.26,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""ol-reversed"":{""title"":""Reversed attribute of ordered lists"",""description"":""This attribute makes an ordered list number its items in descending order (large to small), instead of ascending order (small to large; the default). The order that the list items are displayed in is not affected."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#attr-ol-reversed"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/ol-element-attributes/"",""title"":""HTML5 Doctor article on <ol> element attributes (including reversed)""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514423-ol-reversed-attribute"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""u"",""17"":""u"",""18"":""u"",""19"":""u"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""u"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""u"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":84.84,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""reversed,list,ol,attribute"",""ie_id"":""olreversedattribute"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-first-letter"":{""title"":""::first-letter CSS pseudo-element selector"",""description"":""CSS pseudo-element that allows styling only the first \""letter\"" of text within an element. Useful for implementing initial caps or drop caps styling."",""spec"":""http://www.w3.org/TR/css3-selectors/#first-letter"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/::first-letter"",""title"":""Mozilla Developer Network""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""u"",""6"":""a #3 #4"",""7"":""a #3 #4"",""8"":""a #3"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a #2"",""3"":""a #1"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""a #1"",""4"":""a #1"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""a #2"",""10.5"":""a #2"",""10.6"":""a #2"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""a #1"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a #2"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""The spec says that both letters of digraphs which are always capitalized together (such as \""IJ\"" in Dutch) should be matched by ::first-letter, but no browser has ever implemented this."",""notes_by_num"":{""1"":""Excludes punctuation immediately after the first letter from the match. (The spec says it should be included in the match.)"",""2"":""Acts like the first character is always a letter even when it's not. For example, given \""!,X;\"", \""!,\"" is matched instead of the entire string."",""3"":""Only recognizes the deprecated :first-letter pseudo-class, not the ::first-letter pseudo-element."",""4"":""Only matches the very first character. The spec says that surrounding punctuation should also match.""},""usage_perc_y"":96.21,""usage_perc_a"":1.08,""ucprefix"":false,""parent"":"""",""keywords"":""first,letter,pseudo,element,class,selector"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""wbr-element"":{""title"":""wbr (word break opportunity) element"",""description"":""Represents an extra place where a line of text may optionally be broken."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#the-wbr-element"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr"",""title"":""Mozilla Developer Network""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":88.4,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""wbr,element,word,break,opportunity"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""const"":{""title"":""const"",""description"":""Declares a constant with block level scope"",""spec"":""http://www.ecma-international.org/ecma-262/6.0/#sec-let-and-const-declarations"",""status"":""other"",""links"":[{""url"":""http://generatedcontent.org/post/54444832868/variables-and-constants-in-es6"",""title"":""Variables and Constants in ES6""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const"",""title"":""Const (MDN)""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""a #1"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2 #3"",""22"":""a #2 #3"",""23"":""a #2 #3"",""24"":""a #2 #3"",""25"":""a #2 #3"",""26"":""a #2 #3"",""27"":""a #2 #3"",""28"":""a #2 #3"",""29"":""a #2 #3"",""30"":""a #2 #3"",""31"":""a #2 #3"",""32"":""a #2 #3"",""33"":""a #2 #3"",""34"":""a #2 #3"",""35"":""a #2 #3"",""36"":""a #2 #3"",""37"":""a #2 #3"",""38"":""a #2 #3"",""39"":""a #2 #3"",""40"":""a #2 #3"",""41"":""a #4"",""42"":""a #4"",""43"":""a #4"",""44"":""a #4"",""45"":""a #4"",""46"":""a #4"",""47"":""a #4"",""48"":""a #4"",""49"":""a #4"",""50"":""a #4"",""51"":""a #4"",""52"":""a #4""},""safari"":{""3.1"":""a #2"",""3.2"":""a #2"",""4"":""a #2"",""5"":""a #2"",""5.1"":""a #2 #3"",""6"":""a #2 #3"",""6.1"":""a #2 #3"",""7"":""a #2 #3"",""7.1"":""a #2 #3"",""8"":""a #2 #3"",""9"":""a #2 #3"",""9.1"":""a #2 #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1 #3"",""12"":""a #1 #3"",""12.1"":""a #1 #3"",""15"":""a #2 #3"",""16"":""a #2 #3"",""17"":""a #2 #3"",""18"":""a #2 #3"",""19"":""a #2 #3"",""20"":""a #2 #3"",""21"":""a #2 #3"",""22"":""a #2 #3"",""23"":""a #2 #3"",""24"":""a #2 #3"",""25"":""a #2 #3"",""26"":""a #2 #3"",""27"":""a #2 #3"",""28"":""a #4"",""29"":""a #4"",""30"":""a #4"",""31"":""a #4"",""32"":""a #4"",""33"":""a #4"",""34"":""a #4"",""35"":""a #4"",""36"":""a #4"",""37"":""a #4""},""ios_saf"":{""3.2"":""a #2"",""4.0-4.1"":""a #2"",""4.2-4.3"":""a #2"",""5.0-5.1"":""a #2 #3"",""6.0-6.1"":""a #2 #3"",""7.0-7.1"":""a #2 #3"",""8"":""a #2 #3"",""8.1-8.4"":""a #2 #3"",""9.0-9.2"":""a #2 #3"",""9.3"":""a #2 #3""},""op_mini"":{""5.0-8.0"":""a #1 #3""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""a #2"",""3"":""a #2 #3"",""4"":""a #2 #3"",""4.1"":""a #2 #3"",""4.2-4.3"":""a #2 #3"",""4.4"":""a #2 #3"",""4.4.3-4.4.4"":""a #2 #3"",""47"":""a #4""},""bb"":{""7"":""a #2 #3"",""10"":""a #2 #3""},""op_mob"":{""10"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""a #1 #3"",""12.1"":""a #1 #3"",""35"":""a #4""},""and_chr"":{""49"":""a #4""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""a #2 #3""}},""notes"":"""",""notes_by_num"":{""1"":""const is recognized, but treated like var (no block scope, can be overwritten)"",""2"":""const does not have block scope"",""3"":""Only recognized when NOT in strict mode"",""4"":""Supported correctly in strict mode, otherwise supported without block scope""},""usage_perc_y"":15.76,""usage_perc_a"":79.27,""ucprefix"":false,""parent"":"""",""keywords"":""ES6,constant,block,scope"",""ie_id"":"""",""chrome_id"":""4645595339816960"",""firefox_id"":"""",""webkit_id"":""""},""css-all"":{""title"":""CSS all property"",""description"":""A shorthand property for resetting all CSS properties except for `direction` and `unicode-bidi`."",""spec"":""http://www.w3.org/TR/css-cascade-3/#all-shorthand"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/all"",""title"":""Mozilla Developer Network""},{""url"":""http://mcc.id.au/blog/2013/10/all-unset"",""title"":""Resetting styles using `all: unset`""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=116966"",""title"":""WebKit bug 116966: [css3-cascade] Add support for `all` shorthand property""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6511510-all-initial"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":57.77,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""CSS,all,property,shorthand,reset"",""ie_id"":""cssallshorthand"",""chrome_id"":""6178222542684160"",""firefox_id"":"""",""webkit_id"":""""},""css-initial-value"":{""title"":""CSS initial value"",""description"":""A CSS value that will apply a property's initial value as defined in the CSS specification that defines the property"",""spec"":""http://www.w3.org/TR/css-values/#common-keywords"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/initial"",""title"":""Mozilla Developer Network""},{""url"":""https://css-tricks.com/getting-acquainted-with-initial/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":83.02,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""CSS,initial,value"",""ie_id"":""cssinitialvalue"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-letter-spacing"":{""title"":""letter-spacing CSS property"",""description"":""Controls spacing between characters of text (i.e. \""tracking\"" in typographical terms). Not to be confused with kerning."",""spec"":""http://www.w3.org/TR/CSS2/text.html#propdef-letter-spacing"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing"",""title"":""Mozilla Developer Network""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""u"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""a #1"",""4"":""a #1"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""a #1"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1"",""10"":""a #1""},""op_mob"":{""10"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #1""}},""notes"":"""",""notes_by_num"":{""1"":""Truncates or rounds fractional portions of values""},""usage_perc_y"":80.38,""usage_perc_a"":12.27,""ucprefix"":false,""parent"":"""",""keywords"":""CSS,letter,spacing,tracking"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-unset-value"":{""title"":""CSS unset value"",""description"":""A CSS value that's the same as \""inherit\"" if a property is inherited or \""initial\"" if a property is not inherited."",""spec"":""http://www.w3.org/TR/css-cascade-3/#inherit-initial"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/unset"",""title"":""Mozilla Developer Network""},{""url"":""http://mcc.id.au/blog/2013/10/all-unset"",""title"":""Resetting styles using `all: unset`""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=148614"",""title"":""WebKit bug 148614: Add support for the `unset` CSS property value""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":57.25,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""CSS,unset,value"",""ie_id"":""cssunsetvalue"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""insertadjacenthtml"":{""title"":""Element.insertAdjacentHTML()"",""description"":""Inserts a string of HTML into a specified position in the DOM relative to the given element."",""spec"":""http://www.w3.org/TR/DOM-Parsing/#widl-Element-insertAdjacentHTML-void-DOMString-position-DOMString-text"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML"",""title"":""Mozilla Developer Network""},{""url"":""https://gist.github.com/eligrey/1276030"",""title"":""Polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""u"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Throws an \""Invalid target element for this operation.\"" error [when called on a table, tbody, thead, or tr element.](http://ejohn.org/blog/dom-insertadjacenthtml/)""},""usage_perc_y"":95.67,""usage_perc_a"":1.57,""ucprefix"":false,""parent"":"""",""keywords"":""element,insert,adjacent,HTML"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""let"":{""title"":""let"",""description"":""Declares a variable with block level scope"",""spec"":""http://www.ecma-international.org/ecma-262/6.0/#sec-let-and-const-declarations"",""status"":""other"",""links"":[{""url"":""http://generatedcontent.org/post/54444832868/variables-and-constants-in-es6"",""title"":""Variables and Constants in ES6""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let"",""title"":""Let (MDN)""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n d #1"",""3"":""n d #1"",""3.5"":""n d #1"",""3.6"":""n d #1"",""4"":""n d #1"",""5"":""n d #1"",""6"":""n d #1"",""7"":""n d #1"",""8"":""n d #1"",""9"":""n d #1"",""10"":""n d #1"",""11"":""n d #1"",""12"":""n d #1"",""13"":""n d #1"",""14"":""n d #1"",""15"":""n d #1"",""16"":""n d #1"",""17"":""n d #1"",""18"":""n d #1"",""19"":""n d #1"",""20"":""n d #1"",""21"":""n d #1"",""22"":""n d #1"",""23"":""n d #1"",""24"":""n d #1"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1"",""43"":""n d #1"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n d #2"",""20"":""n d #2"",""21"":""n d #2"",""22"":""n d #2"",""23"":""n d #2"",""24"":""n d #2"",""25"":""n d #2"",""26"":""n d #2"",""27"":""n d #2"",""28"":""n d #2"",""29"":""n d #2"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""n d #2"",""35"":""n d #2"",""36"":""n d #2"",""37"":""n d #2"",""38"":""n d #2"",""39"":""n d #2"",""40"":""n d #2"",""41"":""a #3"",""42"":""a #3"",""43"":""a #3"",""44"":""a #3"",""45"":""a #3"",""46"":""a #3"",""47"":""a #3"",""48"":""a #3"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n d #2"",""16"":""n d #2"",""17"":""n d #2"",""18"":""n d #2"",""19"":""n d #2"",""20"":""n d #2"",""21"":""n d #2"",""22"":""n d #2"",""23"":""n d #2"",""24"":""n d #2"",""25"":""n d #2"",""26"":""n d #2"",""27"":""n d #2"",""28"":""a #3"",""29"":""a #3"",""30"":""a #3"",""31"":""a #3"",""32"":""a #3"",""33"":""a #3"",""34"":""a #3"",""35"":""a #3"",""36"":""a #3"",""37"":""a #3""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""a #3""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a #3""},""and_chr"":{""49"":""a #3""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supports a non-standard version that can only be used in script elements with a type attribute of `application/javascript;version=1.7`. As other browsers do not support these types of `script` tags this makes support useless for cross-browser support."",""2"":""Requires the \u2018Experimental Javascript features\u2019 flag to be enabled"",""3"":""Only supported in strict mode""},""usage_perc_y"":12.85,""usage_perc_a"":47.71,""ucprefix"":false,""parent"":"""",""keywords"":""ES6,variable,block,scope"",""ie_id"":"""",""chrome_id"":""4645595339816960"",""firefox_id"":"""",""webkit_id"":""""},""arrow-functions"":{""title"":""Arrow functions"",""description"":""Function shorthand using `=>` syntax and lexical `this` binding."",""spec"":""http://www.ecma-international.org/ecma-262/6.0/#sec-arrow-function-definitions"",""status"":""other"",""links"":[{""url"":""https://github.com/lukehoban/es6features#arrows"",""title"":""ECMAScript 6 features: Arrows""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions"",""title"":""Arrow Functions (MDN)""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":56.52,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""ES6,JavaScript,fat,arrow,function,lexical,this"",""ie_id"":""arrowfunctiones6"",""chrome_id"":""5047308127305728"",""firefox_id"":"""",""webkit_id"":""feature-arrow-functions""},""asmjs"":{""title"":""asm.js"",""description"":""an extraordinarily optimizable, low-level subset of JavaScript, indended to be a compile target from languages like C++."",""spec"":""http://asmjs.org/spec/latest/"",""status"":""other"",""links"":[{""url"":""http://asmjs.org/"",""title"":""Homepage""},{""url"":""https://github.com/dherman/asm.js/"",""title"":""Source for spec and tools""},{""url"":""http://blogs.windows.com/msedgedev/2015/05/07/bringing-asm-js-to-chakra-microsoft-edge/"",""title"":""Bringing Asm.js to Chakra and Microsoft Edge""},{""url"":""https://dev.modern.ie/platform/changelog/10532-pc/"",""title"":""Microsoft Edge support announcement""}],""categories"":[""JS API"",""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n d #2"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1"",""48"":""a #1"",""49"":""a #1"",""50"":""a #1"",""51"":""a #1"",""52"":""a #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""a #1""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""a #1""},""and_chr"":{""49"":""a #1""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Chrome does not support Ahead-Of-Time compilation but performance doubled in Chrome 28: https://en.wikipedia.org/wiki/Asm.js#Implementations"",""2"":""Supported in MS Edge under the \""Enable experimental Javascript features\"" flag.""},""usage_perc_y"":9.43,""usage_perc_a"":49.24,""ucprefix"":false,""parent"":"""",""keywords"":""asm,asm.js,asmjs,WebAssembly"",""ie_id"":""asmjs"",""chrome_id"":"""",""firefox_id"":""asmjs"",""webkit_id"":""feature-asm.js""},""lazyload"":{""title"":""Resource Hints: Lazyload"",""description"":""Gives a hint to the browser to lower the loading priority of a resource."",""spec"":""https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/ResourcePriorities/Overview.html"",""status"":""unoff"",""links"":[{""url"":""https://msdn.microsoft.com/en-us/library/dn369270(v=vs.85).aspx"",""title"":""lazyload attribute | lazyload property""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":7.85,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""link-rel-dns-prefetch"":{""title"":""Resource Hints: dns-prefetch"",""description"":""Gives a hint to the browser to perform a DNS lookup in the background to improve performance. This is indicated using `<link rel=\""dns-prefetch\"" href=\""http://example-domain.com/\"">`"",""spec"":""http://www.w3.org/TR/resource-hints/#dns-prefetch"",""status"":""wd"",""links"":[{""url"":""https://msdn.microsoft.com/en-us/library/dn265039(v=vs.85).aspx"",""title"":""Prerender and prefetch support""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTTP/Controlling_DNS_prefetching"",""title"":""Controlling DNS prefetching""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""u"",""6.0-6.1"":""u"",""7.0-7.1"":""u"",""8"":""u"",""8.1-8.4"":""u"",""9.0-9.2"":""u"",""9.3"":""u""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""u"",""3"":""u"",""4"":""u"",""4.1"":""u"",""4.2-4.3"":""u"",""4.4"":""u"",""4.4.3-4.4.4"":""u"",""47"":""u""},""bb"":{""7"":""u"",""10"":""u""},""op_mob"":{""10"":""u"",""11"":""u"",""11.1"":""u"",""11.5"":""u"",""12"":""u"",""12.1"":""u"",""35"":""u""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""u""}},""notes"":"""",""notes_by_num"":{""1"":""IE9 [supported `dns-prefetch` as `prefetch`](http://blogs.msdn.com/b/ieinternals/archive/2012/03/01/ie10-beta-consumer-preview-minor-changes-changelist.aspx) as the former wasn\u2019t defined yet.""},""usage_perc_y"":69.42,""usage_perc_a"":0.65,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""link-rel-prerender"":{""title"":""Resource Hints: prerender"",""description"":""Gives a hint to the browser to render the specified page in the background, speeding up page load if the user navigates to it. This is indicated using `<link rel=\""prerender\"" href=\""(url)\"">`"",""spec"":""http://www.w3.org/TR/resource-hints/#prerender"",""status"":""wd"",""links"":[{""url"":""https://msdn.microsoft.com/en-us/library/dn265039(v=vs.85).aspx"",""title"":""Prerender and prefetch support""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":57.31,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""rest-parameters"":{""title"":""Rest parameters"",""description"":""Allows representation of an indefinite number of arguments as an array."",""spec"":""http://www.ecma-international.org/ecma-262/6.0/#sec-function-definitions"",""status"":""other"",""links"":[{""url"":""https://hacks.mozilla.org/2015/05/es6-in-depth-rest-parameters-and-defaults/"",""title"":""Rest parameters and defaults""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n d #1"",""45"":""n d #1"",""46"":""n d #1"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Requires the \""Experimental Javascript features\"" flag to be enabled""},""usage_perc_y"":55.59,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""ES6,JavaScript"",""ie_id"":""restparameterses6"",""chrome_id"":""5937087912083456"",""firefox_id"":"""",""webkit_id"":""""},""css-cross-fade"":{""title"":""CSS Cross-Fade Function"",""description"":""Image function to create a \""crossfade\"" between images. This allows one image to transition (fade) into another based on a percentage value."",""spec"":""https://drafts.csswg.org/css-images-3/#cross-fade-function"",""status"":""unoff"",""links"":[{""url"":""http://peter.sh/files/examples/cross-fading.html"",""title"":""Simple demo""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":62.6,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""css,image,crossfade"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-writing-mode"":{""title"":""CSS writing-mode property"",""description"":""Property to define whether lines of text are laid out horizontally or vertically and the direction in which blocks progress."",""spec"":""https://drafts.csswg.org/css-writing-modes-3/#block-flow"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode"",""title"":""MDN article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n d #2"",""37"":""n d #2"",""38"":""n d #2"",""39"":""n d #2"",""40"":""n d #2"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""u"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x"",""48"":""y x"",""49"":""y x"",""50"":""y x"",""51"":""y x"",""52"":""y x""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x"",""9.1"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9.0-9.2"":""y x"",""9.3"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""47"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x""},""and_chr"":{""49"":""y x""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a x"",""11"":""a x""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""Internet Explorer supports different values from an [earlier version of the spec](http://www.w3.org/TR/2003/CR-css3-text-20030514/#Progression), which originated from SVG."",""2"":""Supported in Firefox under the `layout.css.vertical-text.enabled` flag""},""usage_perc_y"":81.52,""usage_perc_a"":9.09,""ucprefix"":false,""parent"":"""",""keywords"":""css,writing,direction,i18n,vertical,ltr,rtl"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""customevent"":{""title"":""CustomEvent"",""description"":""A DOM event interface that can carry custom application-defined data."",""spec"":""https://dom.spec.whatwg.org/#interface-customevent"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent"",""title"":""Mozilla Developer Network""},{""url"":""https://github.com/krambuhl/custom-event-polyfill"",""title"":""Polyfill based on the MDN snippet""},{""url"":""https://github.com/jonathantneal/EventListener"",""title"":""EventListener polyfill which includes a CustomEvent polyfill""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""a #1 #2"",""10"":""a #1 #2"",""11"":""a #1 #2"",""12"":""a #1 #2"",""13"":""u"",""14"":""u"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""u"",""5.1"":""a #1 #2"",""6"":""u"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""n"",""4.2-4.3"":""u"",""5.0-5.1"":""a #1 #2"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1 #2"",""4"":""a #1 #2"",""4.1"":""a #1 #2"",""4.2-4.3"":""a #1 #2"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1 #2"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y""}},""notes"":""Not supported in some versions of Android's old WebKit-based WebView."",""notes_by_num"":{""1"":""While a `window.CustomEvent` object exists, it cannot be called as a constructor. Instead of `new CustomEvent(...)`, you must use `e = document.createEvent('CustomEvent')` and then `e.initCustomEvent(...)`"",""2"":""There is no `window.CustomEvent` object, but `document.createEvent('CustomEvent')` still works.""},""usage_perc_y"":86.15,""usage_perc_a"":10,""ucprefix"":false,""parent"":"""",""keywords"":""custom events,custom,event"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""textcontent"":{""title"":""Node.textContent"",""description"":""DOM Node property representing the text content of a node and its descendants"",""spec"":""https://dom.spec.whatwg.org/#dom-node-textcontent"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent"",""title"":""Mozilla Developer Network""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""`Node.textContent` is somewhat similar to, but has important differences from, the proprietary [`Node.innerText`](http://caniuse.com/#feat=innertext) property."",""notes_by_num"":{},""usage_perc_y"":96.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""addeventlistener"":{""title"":""EventTarget.addEventListener()"",""description"":""The modern standard API for adding DOM event handlers. Introduced in the DOM Level 2 Events spec. Also implies support for the [capture phase](https://dom.spec.whatwg.org/#dom-event-capturing_phase) of DOM event dispatch."",""spec"":""https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener"",""title"":""Mozilla Developer Network""},{""url"":""https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/Event/polyfill-ie8.js"",""title"":""Financial Times IE8 polyfill""},{""url"":""https://github.com/WebReflection/ie8"",""title"":""WebReflection ie8 polyfill""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n #1"",""6"":""n #1"",""7"":""n #1"",""8"":""n #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y #2"",""3"":""y #2"",""3.5"":""y #2"",""3.6"":""y #2"",""4"":""y #2"",""5"":""y #2"",""6"":""y #2"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""IE<=8 instead only supports the [proprietary `.attachEvent()` method](https://msdn.microsoft.com/en-us/library/ms536343%28VS.85%29.aspx). It also does not support the [capture phase](http://www.w3.org/TR/DOM-Level-3-Events/#event-flow) of DOM event dispatch; it only supports event bubbling."",""2"":""The `useCapture` parameter is non-optional and must be provided. Future versions made it optional, with a default value of `false`.""},""usage_perc_y"":96.48,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""event,target,add,remove,listener,capture,capturing,phase"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""dispatchevent"":{""title"":""EventTarget.dispatchEvent"",""description"":""Method to programmatically trigger a DOM event."",""spec"":""https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent"",""title"":""Mozilla Developer Network""},{""url"":""https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/Event/polyfill-ie8.js"",""title"":""Financial Times IE8 polyfill""},{""url"":""https://github.com/WebReflection/ie8"",""title"":""WebReflection ie8 polyfill""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""u"",""6"":""n #1"",""7"":""n #1"",""8"":""n #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Supports Microsoft's proprietary [`EventTarget.fireEvent() method`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/fireEvent).""},""usage_perc_y"":96.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""dispatch,event,target,fire,trigger,dom"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""documenthead"":{""title"":""document.head"",""description"":""Convenience property for accessing the `<head>` element"",""spec"":""https://html.spec.whatwg.org/multipage/#dom-document-head"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Document/head"",""title"":""Mozilla Developer Network""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":96.25,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""document,head"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""innertext"":{""title"":""Node.innerText"",""description"":""A currently-nonstandard property representing the text within a DOM element and its descendants. As a getter, it approximates the text the user would get if they highlighted the contents of the element with the cursor and then copied to the clipboard."",""spec"":""http://rocallahan.github.io/innerText-spec/"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText"",""title"":""Mozilla Developer Network""},{""url"":""https://github.com/whatwg/compat/issues/5"",""title"":""WHATWG Compatibility Standard issue #5: spec innerText""},{""url"":""https://github.com/timdown/rangy"",""title"":""Rangy, a JS range and selection library which contains an innerText implementation""},{""url"":""http://discourse.wicg.io/t/standardizing-innertext/799"",""title"":""Standardizing innerText \u2013 Web Incubator Community Group (WICG) discussion""},{""url"":""https://msdn.microsoft.com/library/ms533899(v=vs.85).aspx"",""title"":""MSDN documentation""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""u"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""This test only checks that the property exists and works correctly in a very simple case.\r\n[This blog post by kangax](http://perfectionkills.com/the-poor-misunderstood-innerText/) explains the history of this property, gives much more detailed cross-browser compatibility information, and gives a detailed strawman specification for the property.\r\n`Node.innerText` is similar to, but has some important differences from, the standard [`Node.textContent`](http://caniuse.com/#feat=textcontent) property."",""notes_by_num"":{},""usage_perc_y"":88.68,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""inner,text,content"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""client-hints-dpr-width-viewport"":{""title"":""Client Hints: DPR, Width, Viewport-Width"",""description"":""DPR, Width, and Viewport-Width hints enable proactive content negotiation between client and server, enabling automated delivery of optimized assets - e.g. auto-negotiating image DPR resolution."",""spec"":""https://tools.ietf.org/html/draft-grigorik-http-client-hints"",""status"":""other"",""links"":[{""url"":""https://developers.google.com/web/updates/2015/09/automating-resource-selection-with-client-hints"",""title"":""Automating resource selection with Client Hints""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":46.28,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""client hints, client-hints, dpr, viewport, content-dpr"",""ie_id"":"""",""chrome_id"":""5504430086553600"",""firefox_id"":"""",""webkit_id"":""""},""link-rel-preconnect"":{""title"":""Resource Hints: preconnect"",""description"":""Gives a hint to the browser to begin the connection handshake (DNS, TCP, TLS) in the background to improve performance. This is indicated using `<link rel=\""preconnect\"" href=\""https://example-domain.com/\"">`"",""spec"":""http://www.w3.org/TR/resource-hints/#preconnect"",""status"":""wd"",""links"":[{""url"":""https://www.igvita.com/2015/08/17/eliminating-roundtrips-with-preconnect/"",""title"":""Eliminating Roundtrips with Preconnect""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""y #1"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""u""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""u""}},""notes"":"""",""notes_by_num"":{""1"":""Firefox 39 did not support 'crossorigin' attribute and preconnects were not processed by the preload parser. Both of these features were enabled in Firefox 41.""},""usage_perc_y"":53.75,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""preconnect, resource hints"",""ie_id"":""preconnectresourcehints"",""chrome_id"":""5560623895150592"",""firefox_id"":"""",""webkit_id"":""""},""netinfo"":{""title"":""Network Information API"",""description"":""The Network Information API enables web applications to access information about the network connection in use by the device."",""spec"":""http://w3c.github.io/netinfo/"",""status"":""unoff"",""links"":[{""url"":""https://www.igvita.com/2014/12/15/capability-reporting-with-service-worker/"",""title"":""(NetInfo) Capability reporting with ServiceWorker""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""In Chrome the API is enabled on Android only, support for other platforms [is coming](https://docs.google.com/a/chromium.org/document/d/1LTk9uVMGi4kurzcF5ellsAJReTF31fFJMHrQwSVtBjc/) . Support is also available on [Firefox OS](https://bugzilla.mozilla.org/show_bug.cgi?id=960426)."",""notes_by_num"":{""1"":""Supports only the `navigator.connection.type` value which doesn't match the latest spec. [see details](http://davidbcalhoun.com/2010/using-navigator-connection-android/)""},""usage_perc_y"":17.49,""usage_perc_a"":1.47,""ucprefix"":false,""parent"":"""",""keywords"":""performance,network,network information,netinfo"",""ie_id"":"""",""chrome_id"":""6338383617982464"",""firefox_id"":"""",""webkit_id"":""""},""setimmediate"":{""title"":""Efficient Script Yielding: setImmediate()"",""description"":""Yields control flow without the minimum delays enforced by setTimeout"",""spec"":""http://w3c.github.io/setImmediate/"",""status"":""unoff"",""links"":[{""url"":""http://www.nczonline.net/blog/2013/07/09/the-case-for-setimmediate/"",""title"":""The case for setImmediate()""},{""url"":""http://www.nczonline.net/blog/2011/09/19/script-yielding-with-setimmediate/"",""title"":""Script yielding with setImmediate""},{""url"":""https://github.com/YuzuJS/setImmediate"",""title"":""setImmediate polyfill""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=686201"",""title"":""Firefox tracking bug""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=146172"",""title"":""Chrome bug closed as WONTFIX""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":8.63,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""setImmediate,clearImmediate,setTimeout,performance"",""ie_id"":""efficientscriptyieldingsetimmediate"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""es6-number"":{""title"":""ES6 Number"",""description"":""Extensions to the `Number` built-in object in ES6, including constant properties `EPSILON`, `MIN_SAFE_INTEGER`, and `MAX_SAFE_INTEGER`, and methods ` isFinite`, `isInteger`, `isSafeInteger`, and `isNaN`."",""spec"":""http://www.ecma-international.org/ecma-262/6.0/#sec-number-objects"",""status"":""other"",""links"":[{""url"":""http://www.2ality.com/2015/04/numbers-math-es6.html"",""title"":""New number and Math features in ES6""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #3"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""a #4"",""20"":""a #4"",""21"":""a #4"",""22"":""a #4"",""23"":""a #4"",""24"":""a #4"",""25"":""a #4"",""26"":""a #4"",""27"":""a #4"",""28"":""a #4"",""29"":""a #4"",""30"":""a #4"",""31"":""a #4"",""32"":""a #4"",""33"":""a #4"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a #4"",""16"":""a #4"",""17"":""a #4"",""18"":""a #4"",""19"":""a #4"",""20"":""a #4"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""a #4"",""4.2-4.3"":""a #4"",""4.4"":""a #4"",""4.4.3-4.4.4"":""a #4"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a #4""}},""notes"":"""",""notes_by_num"":{""1"":""Partial refers to only supporting the `isFinite`, `isInteger`, and `isNaN` methods."",""2"":""Partial refers to supporting the same as #1 and the addition of the `EPSILON` property."",""3"":""Partial refers to supporting all new features except the `isSafeInteger` method."",""4"":""Partial refers to only supporting the `isFinite` and `isNaN` methods.""},""usage_perc_y"":66.39,""usage_perc_a"":14.25,""ucprefix"":false,""parent"":"""",""keywords"":""ES6,JavaScript,number,built-in,EPSILON,MIN_SAFE_INTEGER,MAX_SAFE_INTEGER,isFinite,isInteger,isSafeInteger,isNaN"",""ie_id"":""numberbuiltinses6"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""maxlength"":{""title"":""maxlength attribute for input and textarea elements"",""description"":""Declares an upper bound on the number of characters the user can input. Normally the UI ignores attempts by the user to type in additional characters beyond this limit."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-input-maxlength"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-maxlength"",""title"":""Mozilla Developer Network""}],""categories"":[""DOM"",""HTML5"",""JS API""],""stats"":{""ie"":{""5.5"":""u"",""6"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y #4"",""13"":""y #4"",""14"":""y #4""},""firefox"":{""2"":""a #1 #2 #3"",""3"":""a #1 #2 #3"",""3.5"":""a #1 #2 #3"",""3.6"":""a #1 #2 #3"",""4"":""y #4"",""5"":""y #4"",""6"":""y #4"",""7"":""y #4"",""8"":""y #4"",""9"":""y #4"",""10"":""y #4"",""11"":""y #4"",""12"":""y #4"",""13"":""y #4"",""14"":""y #4"",""15"":""y #4"",""16"":""y #4"",""17"":""y #4"",""18"":""y #4"",""19"":""y #4"",""20"":""y #4"",""21"":""y #4"",""22"":""y #4"",""23"":""y #4"",""24"":""y #4"",""25"":""y #4"",""26"":""y #4"",""27"":""y #4"",""28"":""y #4"",""29"":""y #4"",""30"":""y #4"",""31"":""y #4"",""32"":""y #4"",""33"":""y #4"",""34"":""y #4"",""35"":""y #4"",""36"":""y #4"",""37"":""y #4"",""38"":""y #4"",""39"":""y #4"",""40"":""y #4"",""41"":""y #4"",""42"":""y #4"",""43"":""y #4"",""44"":""y #4"",""45"":""y #4"",""46"":""y #4"",""47"":""y #4"",""48"":""y #4""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""a #1"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""a #5"",""8.1-8.4"":""a #5"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""35"":""a #6""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y #4""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #6""}},""notes"":"""",""notes_by_num"":{""1"":""`<textarea>`'s' UI does not prevent the user from typing additional characters beyond the `maxlength` limit."",""2"":""Does not support the `HTMLTextAreaElement.maxLength` DOM property."",""3"":""Does not support [`ValidityState.tooLong`](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState/tooLong). In some cases, this is because `.validity` is not supported in the first place."",""4"":""Does not support `ValidityState.tooLong` correctly in the (unlikely) case of the value being initially set too long, then changed by the user to a still incorrect state. See [Firefox bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1203844) and [MS Edge bug](https://connect.microsoft.com/IE/feedback/details/1776779)."",""5"":""`<input>`'s UI does not prevent the user from typing additional characters beyond the `maxlength` limit between two existing characters of the string."",""6"":""Allows text beyond maxlength to be entered at first, but removes all characters past the maxlength when focus is lost.""},""usage_perc_y"":80.88,""usage_perc_a"":16.44,""ucprefix"":false,""parent"":"""",""keywords"":""maximum,length,input,textarea,too,long,validity,state"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""proxy"":{""title"":""Proxy object"",""description"":""The Proxy object allows custom behaviour to be defined for fundamental operations. Useful for logging, profiling, object virtualisation, etc."",""spec"":""http://www.ecma-international.org/ecma-262/6.0/#sec-proxy-object-internal-methods-and-internal-slots"",""status"":""other"",""links"":[{""url"":""https://github.com/lukehoban/es6features#proxies"",""title"":""ECMAScript 6 Proxies""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy"",""title"":""MDN Proxy""},{""url"":""http://www.nczonline.net/blog/2011/09/15/experimenting-with-ecmascript-6-proxies/"",""title"":""Experimenting with ECMAScript 6 proxies""},{""url"":""http://www.2ality.com/2014/12/es6-proxies.html"",""title"":""Meta programming with ECMAScript 6 proxies""},{""url"":""https://github.com/tvcutsem/harmony-reflect"",""title"":""Polyfill for Proxies""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n d"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""n d"",""24"":""n d"",""25"":""n d"",""26"":""n d"",""27"":""n d"",""28"":""n d"",""29"":""n d"",""30"":""n d"",""31"":""n d"",""32"":""n d"",""33"":""n d"",""34"":""n d"",""35"":""n d"",""36"":""n d"",""37"":""n d"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n d"",""16"":""n d"",""17"":""n d"",""18"":""n d"",""19"":""n d"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""n d"",""24"":""n d"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":27.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""proxies,es6,es2015,traps,meta,virtual,logging,host"",""ie_id"":""proxieses6"",""chrome_id"":""4811188005240832"",""firefox_id"":"""",""webkit_id"":""""},""keyboardevent-which"":{""title"":""KeyboardEvent.which"",""description"":""A legacy `KeyboardEvent` property that is equivalent to either `KeyboardEvent.keyCode` or `KeyboardEvent.charCode` depending on whether the key is alphanumeric."",""spec"":""https://w3c.github.io/uievents/#widl-KeyboardEvent-which"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/which"",""title"":""Mozilla Developer Network""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""a #1"",""4.4.3-4.4.4"":""a #1"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""a #1""},""and_chr"":{""49"":""a #1""},""and_ff"":{""45"":""a #1""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""This property is legacy and deprecated, but its replacement(s) are not yet widely supported."",""notes_by_num"":{""1"":""`event.which` number for keys does not always match expected value (difference may be dependent on hardware vs. on-screen keyboard?). ""},""usage_perc_y"":71.43,""usage_perc_a"":20.21,""ucprefix"":false,""parent"":"""",""keywords"":""keyboard,event,which"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""keyboardevent-charcode"":{""title"":""KeyboardEvent.charCode"",""description"":""A legacy `KeyboardEvent` property that gives the Unicode codepoint number of a character key pressed during a `keypress` event."",""spec"":""https://w3c.github.io/uievents/#widl-KeyboardEvent-charCode"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/charCode"",""title"":""Mozilla Developer Network""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""u"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""u"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""u"",""12.1"":""y"",""35"":""n #1""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n #1""},""ie_mob"":{""10"":""n #1"",""11"":""n #1""},""and_uc"":{""9.9"":""n #1""}},""notes"":""This property is legacy and deprecated, but its replacement(s) are not yet widely supported."",""notes_by_num"":{""1"":""Does not appear to support the `keypress` event at all""},""usage_perc_y"":81.81,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""keyboard,event,key,char,character,code,charCode"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""keyboardevent-code"":{""title"":""KeyboardEvent.code"",""description"":""A `KeyboardEvent` property representing the physical key that was pressed, ignoring the keyboard layout and ignoring whether any modifier keys were active."",""spec"":""http://www.w3.org/TR/uievents/#widl-KeyboardEvent-code"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code"",""title"":""Mozilla Developer Network""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=227231"",""title"":""Chrome tracking bug""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=149584"",""title"":""WebKit feature request bug""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n d #1"",""43"":""n d #1"",""44"":""n d #1"",""45"":""n d #1"",""46"":""n d #1"",""47"":""n d #1"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n d #1""},""and_chr"":{""49"":""n d #1""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome & Opera through the \""experimental Web Platform features\"" flag""},""usage_perc_y"":34.48,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""keyboard,event,code"",""ie_id"":""uieventskeyboardqueryapis"",""chrome_id"":""5228092293382144"",""firefox_id"":"""",""webkit_id"":""""},""keyboardevent-location"":{""title"":""KeyboardEvent.location"",""description"":""A `KeyboardEvent` property that indicates the location of the key on the input device. Useful when there are more than one physical key for the same logical key (e.g. left or right \""Control\"" key; main or numpad \""1\"" key)."",""spec"":""http://www.w3.org/TR/uievents/#widl-KeyboardEvent-location"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/location"",""title"":""Mozilla Developer Network""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""a #1"",""6"":""u"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""u"",""12.1"":""y"",""15"":""a #1"",""16"":""a #1"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""a #1"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""a #1"",""10"":""a #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""u"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #1""}},""notes"":"""",""notes_by_num"":{""1"":""Only supports `KeyboardEvent.keyLocation` from an older draft of the DOM Level 3 Events spec instead.""},""usage_perc_y"":79.99,""usage_perc_a"":11.31,""ucprefix"":false,""parent"":"""",""keywords"":""keyboard,event,key,location,keyLocation,numpad"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""keyboardevent-getmodifierstate"":{""title"":""KeyboardEvent.getModifierState()"",""description"":""`KeyboardEvent` method that returns the state (whether the key is pressed/locked or not) of the given modifier key."",""spec"":""http://www.w3.org/TR/uievents/#widl-KeyboardEvent-getModifierState"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState"",""title"":""Mozilla Developer Network""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=40999"",""title"":""WebKit feature request bug""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""u"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""u"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":70.03,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""keyboard,event,get,modifier,state"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""keyboardevent-key"":{""title"":""KeyboardEvent.key"",""description"":""A `KeyboardEvent` property whose value is a string identifying the key that was pressed. Covers character keys, non-character keys (e.g. arrow keys), and dead keys."",""spec"":""http://www.w3.org/TR/uievents/#widl-KeyboardEvent-key"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key"",""title"":""Mozilla Developer Network""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=227231"",""title"":""Chrome tracking bug""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=69029"",""title"":""WebKit feature request bug""},{""url"":""http://www.w3.org/TR/DOM-Level-3-Events-key/"",""title"":""Spec listing all key string values""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""u"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""u"",""12.1"":""y"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to these versions of Firefox returning `\""MozPrintableKey\""` for all character keys.""},""usage_perc_y"":17.82,""usage_perc_a"":0.17,""ucprefix"":false,""parent"":"""",""keywords"":""keyboard,event,key"",""ie_id"":"""",""chrome_id"":""4748790720364544"",""firefox_id"":"""",""webkit_id"":""""},""brotli"":{""title"":""Brotli Accept-Encoding/Content-Encoding"",""description"":""More effective lossless compression algorithm than gzip and deflate."",""spec"":""https://github.com/google/brotli"",""status"":""other"",""links"":[{""url"":""http://google-opensource.blogspot.com/2015/09/introducing-brotli-new-compression.html"",""title"":""Introducing Brotli""},{""url"":""https://groups.google.com/a/chromium.org/forum/m/#!msg/blink-dev/JufzX024oy0/WEOGbN43AwAJ"",""title"":""Blink's intent to ship""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n d #1"",""50"":""n d #1"",""51"":""n d #1"",""52"":""n d #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n d #1"",""37"":""n d #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supported in Chrome and Opera behind the 'Brotli Content-Encoding' flag""},""usage_perc_y"":4.75,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""http,compression,accept,content,encoding"",""ie_id"":""brotlicompresseddataformat"",""chrome_id"":""5420797577396224"",""firefox_id"":"""",""webkit_id"":""""},""element-closest"":{""title"":""Element.closest()"",""description"":""DOM method that returns the current element if it matches the given selector, or else the closest ancestor element that matches the given selector, or else null."",""spec"":""https://dom.spec.whatwg.org/#dom-element-closest"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Element/closest"",""title"":""Mozilla Developer Network""},{""url"":""https://github.com/jonathantneal/closest"",""title"":""Polyfill""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/10119510-element-closest"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":64.48,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""element,closest,dom"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""input-event"":{""title"":""input event"",""description"":""The `input` event is fired when the user changes the value of an `<input>` element, `<select>` element, or `<textarea>` element. By contrast, the \""change\"" event usually only fires after the form control has lost focus."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#event-input-input"",""status"":""ls"",""links"":[{""url"":""https://html.spec.whatwg.org/multipage/forms.html#send-select-update-notifications"",""title"":""Specification for `<select>` elements firing the `input` event""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/Events/input"",""title"":""Mozilla Developer Network""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/10182111--input-type-checkbox-type-radio-should-fire-in"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1 #3 #5"",""10"":""y #3 #5"",""11"":""y #3 #5""},""edge"":{""12"":""y #3 #5"",""13"":""y #3 #5"",""14"":""y #3 #5""},""firefox"":{""2"":""u"",""3"":""a #2 #3 #4"",""3.5"":""a #2 #3 #4"",""3.6"":""y #3 #4"",""4"":""y #3 #4"",""5"":""y #3 #4"",""6"":""y #3 #4"",""7"":""y #3 #4"",""8"":""y #3 #4"",""9"":""y #3 #4"",""10"":""y #3 #4"",""11"":""y #3 #4"",""12"":""y #3 #4"",""13"":""y #3 #4"",""14"":""y #3 #4"",""15"":""y #3 #4"",""16"":""y #3 #4"",""17"":""y #3 #4"",""18"":""y #3 #4"",""19"":""y #3 #4"",""20"":""y #3 #4"",""21"":""y #3 #4"",""22"":""y #3 #4"",""23"":""y #3 #4"",""24"":""y #3 #4"",""25"":""y #3 #4"",""26"":""y #3 #4"",""27"":""y #3 #4"",""28"":""y #3 #4"",""29"":""y #3 #4"",""30"":""y #3 #4"",""31"":""y #3 #4"",""32"":""y #3 #4"",""33"":""y #3 #4"",""34"":""y #3 #4"",""35"":""y #3 #4"",""36"":""y #3 #4"",""37"":""y #3 #4"",""38"":""y #3 #4"",""39"":""y #3 #4"",""40"":""y #3 #4"",""41"":""y #3 #4"",""42"":""y #3 #4"",""43"":""y #3 #4"",""44"":""y #3 #4"",""45"":""y #3 #4"",""46"":""y #3 #4"",""47"":""y #3 #4"",""48"":""y #3 #4""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""u"",""10"":""u"",""11"":""u"",""12"":""u"",""13"":""u"",""14"":""u"",""15"":""y #3 #4"",""16"":""y #3 #4"",""17"":""y #3 #4"",""18"":""y #3 #4"",""19"":""y #3 #4"",""20"":""y #3 #4"",""21"":""y #3 #4"",""22"":""y #3 #4"",""23"":""y #3 #4"",""24"":""y #3 #4"",""25"":""y #3 #4"",""26"":""y #3 #4"",""27"":""y #3 #4"",""28"":""y #3 #4"",""29"":""y #3 #4"",""30"":""y #3 #4"",""31"":""y #3 #4"",""32"":""y #3 #4"",""33"":""y #3 #4"",""34"":""y #3 #4"",""35"":""y #4"",""36"":""y #4"",""37"":""y #4"",""38"":""y #4"",""39"":""y #4"",""40"":""y #4"",""41"":""y #4"",""42"":""y #4"",""43"":""y #4"",""44"":""y #4"",""45"":""y #4"",""46"":""y #4"",""47"":""y #4"",""48"":""y #4"",""49"":""y #4"",""50"":""y #4"",""51"":""y #4"",""52"":""y #4""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""y #3 #4"",""6"":""u"",""6.1"":""y #4"",""7"":""y #4"",""7.1"":""y #4"",""8"":""y #4"",""9"":""y #4"",""9.1"":""y #4""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""u"",""10.5"":""u"",""10.6"":""u"",""11"":""u"",""11.1"":""u"",""11.5"":""u"",""11.6"":""a #2"",""12"":""u"",""12.1"":""y"",""15"":""y #3 #4"",""16"":""y #3 #4"",""17"":""y #3 #4"",""18"":""y #3 #4"",""19"":""y #3 #4"",""20"":""y #3 #4"",""21"":""y #3 #4"",""22"":""y #4"",""23"":""y #4"",""24"":""y #4"",""25"":""y #4"",""26"":""y #4"",""27"":""y #4"",""28"":""y #4"",""29"":""y #4"",""30"":""y #4"",""31"":""y #4"",""32"":""y #4"",""33"":""y #4"",""34"":""y #4"",""35"":""y #4"",""36"":""y #4"",""37"":""y #4""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""y #3 #4"",""6.0-6.1"":""y #3 #4"",""7.0-7.1"":""y #3 #4"",""8"":""y #4"",""8.1-8.4"":""y #4"",""9.0-9.2"":""y #4"",""9.3"":""y #4""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y #3 #4"",""3"":""y #3 #4"",""4"":""y #3 #4"",""4.1"":""y #3 #4"",""4.2-4.3"":""y #3 #4"",""4.4"":""y #3 #4"",""4.4.3-4.4.4"":""y #4"",""47"":""y #4""},""bb"":{""7"":""y #3 #4"",""10"":""y #4""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y #4""},""and_chr"":{""49"":""y #4""},""and_ff"":{""45"":""y #3 #4""},""ie_mob"":{""10"":""y #3 #5"",""11"":""y #3 #5""},""and_uc"":{""9.9"":""y #3 #4""}},""notes"":"""",""notes_by_num"":{""1"":""Doesn't fire an `input` event when deleting text (via Backspace, Delete, Cut, etc.)."",""2"":""Doesn't fire an `input` event when drag-and-dropping text into an `<input>` or `<textarea>`."",""3"":""`<select>` doesn't fire `input` events. See [Firefox bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1024350) and [MS Edge bug](https://connect.microsoft.com/IE/feedback/details/1816207)."",""4"":""Doesn't fire an `input` event when (un)checking a checkbox or radio button, or when changing the selected file(s) of an `<input type=\""file\"">`. See [Chrome bug](https://code.google.com/p/chromium/issues/detail?id=534245), [Firefox bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1206616), and [WebKit bug](https://bugs.webkit.org/show_bug.cgi?id=149398)."",""5"":""Doesn't fire an `input` event when (un)checking a checkbox or radio button. See [MS Edge bug](https://connect.microsoft.com/IE/feedback/details/1883692).""},""usage_perc_y"":90.71,""usage_perc_a"":0.7,""ucprefix"":false,""parent"":"""",""keywords"":""input,event"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""input-search"":{""title"":""Search input type"",""description"":""Search field form input type. Intended to look like the underlying platform's native search field widget (if there is one). Other than its appearance, it's the same as an `<input type=\""text\"">`."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#text-(type=text)-state-and-search-state-(type=search)"",""status"":""ls"",""links"":[{""url"":""https://css-tricks.com/webkit-html5-search-inputs/"",""title"":""CSS-Tricks article""},{""url"":""http://www.wufoo.com/html5/types/5-search.html"",""title"":""Wufoo's The Current State of HTML5 Forms: The search Type""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y #1"",""11"":""y #1""},""edge"":{""12"":""y #1"",""13"":""y #1"",""14"":""y #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1"",""43"":""y #1"",""44"":""y #1"",""45"":""y #1"",""46"":""y #1"",""47"":""y #1"",""48"":""y #1""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""u"",""10"":""u"",""11"":""u"",""12"":""u"",""13"":""u"",""14"":""u"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""u"",""22"":""u"",""23"":""u"",""24"":""u"",""25"":""u"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""u"",""11.1"":""u"",""11.5"":""u"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y #1""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y #1"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y #1""},""op_mob"":{""10"":""n"",""11"":""u"",""11.1"":""u"",""11.5"":""u"",""12"":""y"",""12.1"":""y #1"",""35"":""y #1""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y #1""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not use a special search-specific UI for the field, just the same UI as a regular `<input type=\""text\"">`.""},""usage_perc_y"":95.34,""usage_perc_a"":0,""ucprefix"":false,""parent"":""forms"",""keywords"":""input,type,search"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-motion-paths"":{""title"":""CSS Motion Path"",""description"":""Allows elements to be animated along SVG paths or shapes"",""spec"":""https://drafts.fxtf.org/motion-1/"",""status"":""unoff"",""links"":[{""url"":""http://codepen.io/danwilson/post/css-motion-paths"",""title"":""Blog post""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/motion-path"",""title"":""MDN article""},{""url"":""https://googlechrome.github.io/samples/css-motion-path/index.html"",""title"":""Demo""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1186329"",""title"":""Firefox tracking bug""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n d #1"",""44"":""n d #1"",""45"":""n d #1"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Requires the \""Experimental Web Platform features\"" flag to be enabled""},""usage_perc_y"":46.28,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""cssmotionpath"",""chrome_id"":""6190642178818048"",""firefox_id"":"""",""webkit_id"":""""},""css-scroll-behavior"":{""title"":""CSSOM Scroll-behavior"",""description"":""Method of specifying the scrolling behavior for a scrolling box, when scrolling happens due to navigation or CSSOM scrolling APIs."",""spec"":""https://drafts.csswg.org/cssom-view/#propdef-scroll-behavior"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior"",""title"":""Mozilla Developer Network""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=243871"",""title"":""Chrome launch bug ""},{""url"":""https://blog.gospodarets.com/native_smooth_scrolling"",""title"":""Blog post with demo""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n d #1 #2"",""42"":""n d #1 #2"",""43"":""n d #1 #2"",""44"":""n d #1 #2"",""45"":""n d #1 #2"",""46"":""n d #1 #2"",""47"":""n d #1 #2"",""48"":""n d #1 #2"",""49"":""n d #1 #2"",""50"":""n d #1 #2"",""51"":""n d #1 #2"",""52"":""n d #1 #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n d #1 #2"",""29"":""n d #1 #2"",""30"":""n d #1 #2"",""31"":""n d #1 #2"",""32"":""n d #1 #2"",""33"":""n d #1 #2"",""34"":""n d #1 #2"",""35"":""n d #1 #2"",""36"":""n d #1 #2"",""37"":""n d #1 #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to support everything except of `Element.scrollIntoView()` and not together with pinch viewport."",""2"":""Supported in Chrome and Opera behind the 'Smooth Scrolling' and/or 'Enable experimental web platform features' flag""},""usage_perc_y"":7.87,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""smooth,scroll,cssom,scroll-behavior"",""ie_id"":""cssomviewsmoothscrollapi"",""chrome_id"":""5812155903377408"",""firefox_id"":"""",""webkit_id"":""""},""subresource-integrity"":{""title"":""Subresource Integrity"",""description"":""Subresource Integrity enables browsers to verify that file is delivered without unexpected manipulation."",""spec"":""http://www.w3.org/TR/SRI/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity"",""title"":""Subresource Integrity (MDN)""},{""url"":""https://www.srihash.org/"",""title"":""SRI generation and browser support test""},{""url"":""https://sritest.io"",""title"":""SRI hash webpage scanner""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":53.77,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""SRI, security, hash"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-in-out-of-range"":{""title"":"":in-range and :out-of-range CSS pseudo-classes"",""description"":""If a temporal or number `<input>` has `max` and/or `min` attributes, then `:in-range` matches when the value is within the specified range and `:out-of-range` matches when the value is outside the specified range. If there are no range constraints, then neither pseudo-class matches."",""spec"":""http://www.w3.org/TR/selectors4/#range-pseudos"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/:out-of-range"",""title"":""MDN article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""n"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""u"",""10"":""u"",""11"":""u"",""12"":""u"",""13"":""u"",""14"":""u"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Note that `<input type=\""range\"">` can never match `:out-of-range` because the user cannot input such a value, and if the initial value is outside the range, the browser immediately clamps it to the minimum or maximum (as appropriate) bound of the range."",""notes_by_num"":{""1"":""Opera Mini correctly applies style on initial load, but does not correctly update when value is changed.""},""usage_perc_y"":82.41,""usage_perc_a"":4.73,""ucprefix"":false,""parent"":"""",""keywords"":""in,out,of,range,:in-range,:out-of-range"",""ie_id"":""cssrangepseudoclasses"",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""push-api"":{""title"":""Push API"",""description"":""API to allow messages to be pushed from a server to a browser, even when the site isn't focused or even open in the browser."",""spec"":""https://w3c.github.io/push-api/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Push_API"",""title"":""MDN article""},{""url"":""https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web"",""title"":""Google Developers article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""y #2"",""45"":""y #2"",""46"":""y #2"",""47"":""y #2"",""48"":""y #2""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""a #1 #2"",""45"":""a #1 #2"",""46"":""a #1 #2"",""47"":""a #1 #2"",""48"":""a #1 #2"",""49"":""a #1 #2"",""50"":""a #1 #2"",""51"":""a #1 #2"",""52"":""a #1 #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""u"",""37"":""u""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""u""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""a #1""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not supporting `PushEvent.data` and `PushMessageData`"",""2"":""Requires browser to be running to receive messages""},""usage_perc_y"":4.71,""usage_perc_a"":46.34,""ucprefix"":false,""parent"":"""",""keywords"":""push notifications"",""ie_id"":""pushapi"",""chrome_id"":""5416033485586432"",""firefox_id"":""push"",""webkit_id"":""""},""background-position-x-y"":{""title"":""background-position-x & background-position-y"",""description"":""CSS longhand properties to define x or y positions separately."",""spec"":""https://drafts.csswg.org/css-backgrounds-4/#background-position-longhands"",""status"":""unoff"",""links"":[{""url"":""https://msdn.microsoft.com/en-us/library/ms530719%28v=vs.85%29.aspx"",""title"":""MSDN article""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=550426"",""title"":""Firefox implementation bug""},{""url"":""http://snook.ca/archives/html_and_css/background-position-x-y"",""title"":""Blog post on background-position-x & y properties""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""A workaround for the lack of support in Firefox 31 and later is to use [CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables). See [this Stack Overflow answer](http://stackoverflow.com/a/29282573/94197) for an example."",""notes_by_num"":{},""usage_perc_y"":83.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-revert-value"":{""title"":""CSS revert value"",""description"":""A CSS keyword value that resets a property's value to the default specified by the browser in its UA stylesheet, as if the webpage had not included any CSS. For example, `display:revert` on a `<div>` would result in `display:block`. This is in contrast to the `initial` value, which is simply defined on a per-property basis, and for `display` would be `inline`."",""spec"":""https://www.w3.org/TR/css-cascade-4/#valdef-all-revert"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/revert"",""title"":""Mozilla Developer Network""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1215878"",""title"":""Firefox feature request bug""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/10469316-the-css4-revert-value"",""title"":""Microsoft Edge feature request on UserVoice""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=579788"",""title"":""Chrome feature request issue""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""u"",""51"":""u"",""52"":""u""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":0.01,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""CSS,reset,value"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-widows-orphans"":{""title"":""CSS widows & orphans"",""description"":""CSS properties to control when lines break across pages or columns by defining the amount of lines that must be left before or after the break."",""spec"":""https://drafts.csswg.org/css-break-3/#widows-orphans"",""status"":""rec"",""links"":[{""url"":""http://thenewcode.com/946/CSS-last-line-Controlling-Widows-amp-Orphans"",""title"":""CSS last-line: Controlling Widows & Orphans""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=137367"",""title"":""Firefox support bug""},{""url"":""http://tympanus.net/codrops/css_reference/orphans/"",""title"":""codrops article on orphans""},{""url"":""http://tympanus.net/codrops/css_reference/widows/"",""title"":""codrops article on widows""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y #1"",""9"":""y #1"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""u"",""47"":""u"",""48"":""u""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""y #1"",""9.5-9.6"":""y #1"",""10.0-10.1"":""y #1"",""10.5"":""y #1"",""10.6"":""y #1"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""11.6"":""y #1"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""Some older WebKit-based browsers recognize the properties, but do not appear to have actual support"",""notes_by_num"":{""1"":""Supports widows & orphans properties, but due to not supporting CSS multi-columns the support is only for page breaks (for print)""},""usage_perc_y"":77.3,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""web-bluetooth"":{""title"":""Web Bluetooth"",""description"":""Access user-selected Bluetooth devices over GATT"",""spec"":""http://webbluetoothcg.github.io/web-bluetooth/"",""status"":""unoff"",""links"":[{""url"":""https://developers.google.com/web/updates/2015/07/interact-with-ble-devices-on-the-web"",""title"":""Intro""},{""url"":""https://googlechrome.github.io/samples/web-bluetooth"",""title"":""Samples""},{""url"":""https://github.com/WebBluetoothCG/demos"",""title"":""Demos""},{""url"":""https://github.com/WebBluetoothCG/web-bluetooth/blob/gh-pages/implementation-status.md"",""title"":""Implementation Status""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n d #1"",""46"":""n d #1"",""47"":""n d #1"",""48"":""n d #1"",""49"":""n d #1"",""50"":""u"",""51"":""u"",""52"":""u""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""u"",""37"":""u""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n d #1""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Available by enabling the \""Web Bluetooth\"" experimental flag in `about:flags`. Currently support [varies by OS](https://github.com/WebBluetoothCG/web-bluetooth/blob/gh-pages/implementation-status.md)""},""usage_perc_y"":0,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""bluetooth,ble,iot,physicalweb,webbluetooth"",""ie_id"":""webbluetooth"",""chrome_id"":""5264933985976320"",""firefox_id"":""web-bluetooth"",""webkit_id"":""""},""scrollintoview"":{""title"":""scrollIntoView"",""description"":""The `Element.scrollIntoView()` method scrolls the current element into the visible area of the browser window. Parameters can be provided to set the position inside the visible area as well as whether scrolling should be instant or smooth."",""spec"":""https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView"",""title"":""MDN article""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""a #1"",""13"":""a #1"",""14"":""a #1""},""firefox"":{""2"":""a #1"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1"",""48"":""a #1"",""49"":""a #1"",""50"":""a #1"",""51"":""a #1"",""52"":""a #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1"",""9.1"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""u"",""11.1"":""u"",""11.5"":""u"",""11.6"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9.0-9.2"":""a #1"",""9.3"":""a #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""a #1"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""a #1"",""4.4.3-4.4.4"":""a #1"",""47"":""a #1""},""bb"":{""7"":""a #1"",""10"":""a #1""},""op_mob"":{""10"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""35"":""a #1""},""and_chr"":{""49"":""a #1""},""and_ff"":{""45"":""a #1""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""a #1""}},""notes"":"""",""notes_by_num"":{""1"":""Supports scrollIntoView with boolean parameter, but not `smooth` behavior option""},""usage_perc_y"":7.87,""usage_perc_a"":84.56,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-nth-child-of"":{""title"":""selector list argument of :nth-child and :nth-last-child CSS pseudo-classes"",""description"":""The newest versions of `:nth-child()` and `:nth-last-child()` accept an optional `of S` clause which filters the children to only those which match the selector list `S`. For example, `:nth-child(1 of .foo)` selects the first child among the children that have the `foo` class (ignoring any non-`foo` children which precede that child). Similar to `:nth-of-type`, but for arbitrary selectors instead of only type selectors."",""spec"":""https://drafts.csswg.org/selectors/#the-nth-child-pseudo"",""status"":""unoff"",""links"":[{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=854148"",""title"":""Mozilla Bug 854148 - Support for :nth-child(An+B of sel), :nth-last-child(An+B of sel) pseudo-classes""},{""url"":""https://bugs.chromium.org/p/chromium/issues/detail?id=304163"",""title"":""Chromium Issue 304163: Implement :nth-child(an+b of S) and :nth-last-child(an+b of S) pseudo-classes""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""n"",""50"":""n"",""51"":""n"",""52"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""n""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":8.53,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""nth-child,nth-last-child,nth,child,an,b,of,s,sel,selector,list"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""feature-css-selector-:nth-child(an+b-of-selector-list)-and-:nth-last-child(an+b-of-selector-list)""},""focusin-focusout-events"":{""title"":""focusin & focusout events"",""description"":""The `focusin` and `focusout` events fire just before the element gains or loses focus, and they bubble. By contrast, the `focus` and `blur` events fire after the focus has shifted, and don't bubble."",""spec"":""https://www.w3.org/TR/DOM-Level-3-Events/#event-type-focusin"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Events/focusin"",""title"":""focusin event at Mozilla Developer Network""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/Events/focusout"",""title"":""focusout event at Mozilla Developer Network""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=687787"",""title"":""Mozilla Bug 687787 - Add support for DOM3 focusin/focusout""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""12"":""y"",""13"":""y"",""14"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""u"",""10"":""u"",""11"":""u"",""12"":""u"",""13"":""u"",""14"":""u"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y"",""48"":""y"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y"",""9.1"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""u"",""11.1"":""u"",""11.5"":""u"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9.0-9.2"":""y"",""9.3"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""u"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""47"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""u"",""11.1"":""u"",""11.5"":""u"",""12"":""y"",""12.1"":""y"",""35"":""y""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""In browsers that don't support these events, one alternative is to use a capture phase event listener for the `focus` and/or `blur` events."",""notes_by_num"":{},""usage_perc_y"":83.4,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""focusin,focusout,focus,event"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""rel-noopener"":{""title"":""rel=noopener"",""description"":""Ensure new browsing contexts are opened without a useful `window.opener`"",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#link-type-noopener"",""status"":""ls"",""links"":[{""url"":""https://mathiasbynens.github.io/rel-noopener/"",""title"":""Explainer""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1222516"",""title"":""Gecko/Firefox issue""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=155166"",""title"":""WebKit/Safari issue""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/12942405-implement-rel-noopener"",""title"":""Edge feature request""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""12"":""n"",""13"":""n"",""14"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n"",""49"":""y"",""50"":""y"",""51"":""y"",""52"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n""},""and_chr"":{""49"":""y""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":17.69,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""rel,relation,link,security"",""ie_id"":"""",""chrome_id"":""5651874132787200"",""firefox_id"":"""",""webkit_id"":""""},""css-text-justify"":{""title"":""CSS text-justify"",""description"":""CSS property to define how text should be justified when `text-align: justify` is set."",""spec"":""https://drafts.csswg.org/css-text-3/#text-justify-property"",""status"":""wd"",""links"":[{""url"":""https://crbug.com/248894"",""title"":""Chrome support bug""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=99945"",""title"":""WebKit support bug""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=276079"",""title"":""Firefox support bug""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""u"",""6"":""u"",""7"":""u"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""a #1"",""13"":""a #1"",""14"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""u"",""47"":""u"",""48"":""u""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n d #2"",""44"":""n d #2"",""45"":""n d #2"",""46"":""n d #2"",""47"":""n d #2"",""48"":""n d #2"",""49"":""n d #2"",""50"":""n d #2"",""51"":""n d #2"",""52"":""n d #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n"",""9.1"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""n d #2"",""35"":""n d #2"",""36"":""n d #2"",""37"":""n d #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9.0-9.2"":""n"",""9.3"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""47"":""n d #2""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""n d #2""},""and_chr"":{""49"":""n d #2""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supports `inter-word`, but not `inter-character` or  `none`. Also supports the following unofficial values: `distribute` , `distribute-all-lines`, `distribute-center-last`, `inter-cluster`, `inter-ideograph`, `newspaper`. See [MSDN](https://msdn.microsoft.com/en-us/library/ms531172%28v=vs.85%29.aspx) for details."",""2"":""`inter-word` and `distribute` values supported behind the \""Experimental platform features\"" flag but `distribute` support [is buggy](https://crbug.com/467406)""},""usage_perc_y"":0,""usage_perc_a"":10.12,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""},""css-scrollbar"":{""title"":""CSS scrollbar styling"",""description"":""Non-standard methods of styling scrollbars."",""spec"":""https://webkit.org/blog/363/styling-scrollbars/"",""status"":""unoff"",""links"":[{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=77790"",""title"":""Firefox support bug""},{""url"":""http://stackoverflow.com/questions/9251354/css-customized-scroll-bar-in-div/14150577#14150577"",""title"":""Stackoverflow article discussiong cross-browser support""},{""url"":""http://codemug.com/html/custom-scrollbars-using-css/"",""title"":""Tutorial for IE & WebKit/Blink browsers""},{""url"":""https://noraesae.github.io/perfect-scrollbar/"",""title"":""\""perfect-scrollbar\"" - Minimal custom scrollbar plugin""},{""url"":""http://manos.malihu.gr/jquery-custom-content-scroller/"",""title"":""jQuery custom content scroller""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""12"":""n"",""13"":""n"",""14"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n"",""48"":""n""},""chrome"":{""4"":""y x #2"",""5"":""y x #2"",""6"":""y x #2"",""7"":""y x #2"",""8"":""y x #2"",""9"":""y x #2"",""10"":""y x #2"",""11"":""y x #2"",""12"":""y x #2"",""13"":""y x #2"",""14"":""y x #2"",""15"":""y x #2"",""16"":""y x #2"",""17"":""y x #2"",""18"":""y x #2"",""19"":""y x #2"",""20"":""y x #2"",""21"":""y x #2"",""22"":""y x #2"",""23"":""y x #2"",""24"":""y x #2"",""25"":""y x #2"",""26"":""y x #2"",""27"":""y x #2"",""28"":""y x #2"",""29"":""y x #2"",""30"":""y x #2"",""31"":""y x #2"",""32"":""y x #2"",""33"":""y x #2"",""34"":""y x #2"",""35"":""y x #2"",""36"":""y x #2"",""37"":""y x #2"",""38"":""y x #2"",""39"":""y x #2"",""40"":""y x #2"",""41"":""y x #2"",""42"":""y x #2"",""43"":""y x #2"",""44"":""y x #2"",""45"":""y x #2"",""46"":""y x #2"",""47"":""y x #2"",""48"":""y x #2"",""49"":""y x #2"",""50"":""y x #2"",""51"":""y x #2"",""52"":""y x #2""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""y x #2"",""6"":""y x #2"",""6.1"":""y x #2"",""7"":""y x #2"",""7.1"":""y x #2"",""8"":""y x #2"",""9"":""y x #2"",""9.1"":""y x #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x #2"",""16"":""y x #2"",""17"":""y x #2"",""18"":""y x #2"",""19"":""y x #2"",""20"":""y x #2"",""21"":""y x #2"",""22"":""y x #2"",""23"":""y x #2"",""24"":""y x #2"",""25"":""y x #2"",""26"":""y x #2"",""27"":""y x #2"",""28"":""y x #2"",""29"":""y x #2"",""30"":""y x #2"",""31"":""y x #2"",""32"":""y x #2"",""33"":""y x #2"",""34"":""y x #2"",""35"":""y x #2"",""36"":""y x #2"",""37"":""y x #2""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""u"",""6.0-6.1"":""u"",""7.0-7.1"":""y x #2"",""8"":""y x #2"",""8.1-8.4"":""y x #2"",""9.0-9.2"":""y x #2"",""9.3"":""y x #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y x #2"",""3"":""y x #2"",""4"":""y x #2"",""4.1"":""y x #2"",""4.2-4.3"":""y x #2"",""4.4"":""y x #2"",""4.4.3-4.4.4"":""y x #2"",""47"":""y x #2""},""bb"":{""7"":""y x #2"",""10"":""y x #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""35"":""y x #2""},""and_chr"":{""49"":""y x #2""},""and_ff"":{""45"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x #2""}},""notes"":""Currently scrollbar styling doesn't appear to be on any standards track."",""notes_by_num"":{""1"":""Only supports styling [scrollbar colors](https://msdn.microsoft.com/en-us/library/ms531155%28v=vs.85%29.aspx), no other properties to define the scrollbar's appearance."",""2"":""Supports scrollbar styling via CSS [pseudo-properties](https://webkit.org/blog/363/styling-scrollbars/).""},""usage_perc_y"":73.16,""usage_perc_a"":8.28,""ucprefix"":false,""parent"":"""",""keywords"":""scrollbar-button,scrollbar-track,scrollbar-thumb,scrollbar-base-color,scrollbar-face-color"",""ie_id"":"""",""chrome_id"":"""",""firefox_id"":"""",""webkit_id"":""""}}}"
7b84115fba0273b355658373d89eb9da9ca53b34,6122571, * From: https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript
f718cf53c5de4dffb4d199ec0f98de476584ce74,519653,    borrowed from http://stackoverflow.com/a/519653
89ff22823f732ddbc061abdb0705510cf5453723,10300743,  // based on http://stackoverflow.com/a/10300743/280842
4530589e5e458936fe8e4bd6a4aad3cd45c66db8,9276633,            var width = $(docVideo).outerWidth(false);         // source: http://stackoverflow.com/questions/9276633/get-absolute-height-and-width
4996c976328edb2e0a800b2765db00c78108dfe4,7676115,// http://stackoverflow.com/a/7676115/959934
f7e1b6acc973f848e5afaa79df22343eb7de29ce,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
b98a16ce1237523037276961e561785bf72e99dc,1812401,http://stackoverflow.com/questions/1812401/exactly-what-is-the-difference-between-a-closure-and-a-block
9849c8b2c3943166fc5b76163517e95772799abb,6029495,\f1\i \cf2 http://stackoverflow.com/questions/6029495/how-can-i-generate-random-number-in-specific-range-in-android\
2eaddfc33120b72694eded662b6bcad2989175de,7961788,    private double limit = (double) (Math.random() * 1991) + 10; //from http://stackoverflow.com/questions/7961788/math-random-explained 2015-09-27
534adca1fe1c79c2a33075ff733e5d1fceb6b0d1,11345371,"[7]: http://stackoverflow.com/questions/11345371/how-do-i-set-a-software-breakpoint-on-an-arm-processor ""How do I set a software breakpoint on an ARM processor? - Stack Overflow"""
d653eec98c624b07010b99e09b72d711e97096b6,7688070,* [1]: https://stackoverflow.com/questions/7688070/why-is-comparing-the-constructor-property-of-two-windows-unreliable
76322c9f15c878e18fcb4b56af7776741ac1b47b,28143029,"	 * href=""http://stackoverflow.com/q/28143029"">this post on StackOverflow</a>.</li>"
640b30df31f4a1c4fb7a416143648aab904b205a,17646931,"<a href=""http://stackoverflow.com/q/17646931?rq=1"" title=""Vote score (upvotes - downvotes)"">"
03c64a2175d615276519478d49622c96aa0be4fa,17202622,See answer [here](http://stackoverflow.com/a/17202622/5340808).
303c20dd6a0c8dd20292568dc486f2ff87b28312,28917958,http://bl.ocks.org/mbostock/4062006	http://stackoverflow.com/questions/28917958/revise-labels-in-chord-diagram
9174306cc177ad420e52118601262e2758c337b7,18248303,* [Files to commit in a Yeoman project](http://stackoverflow.com/questions/18241893/files-to-commit-to-repository-in-a-yeoman-project/18248303#18248303)
105b225177315db07b1117c3ece4b77dd2b60cb2,42006320,"  <td><a href=""http://stackoverflow.com/q/42006320"">42006320</a></td>"
c75475eb411f1ffb0644f3bc16e15f1908730633,3561493,    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
1ec94fb75ac52903d152796d69ad8f791f6aad96,26603875,		// http://stackoverflow.com/a/26603875
b04a38ea897fad1cee5d5335df96f619dff2ca93,2272835,                // http://stackoverflow.com/questions/2272835/amazon-s3-object-redirect
f7e57c9c46e08ac9ee0d90759218e5e34ad68769,28498460,    [here](http://stackoverflow.com/questions/28498460/orion-cb-does-not-change-the-value-of-an-attribute))
2e39058dbc7961f84235c0305cd63efe1b64be6b,3561493,    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
2eeba1957a2841f1fff2cb294f6950b8a087fc44,31242812, * http://stackoverflow.com/questions/31242812/
5677eee885b70547812265264f6ebdb13f000a88,11929099,                //http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
ab5e5911f00794e51f2a6e04d38bd32c9a1da427,5560248,// Based on https://stackoverflow.com/questions/5560248
f8e0da2d47aa44b6da12c5726d7ba50d0a099bdc,13216903,      // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension
7154a680d9c549c6ac4cc66b1336976eda890538,3364279,  http://stackoverflow.com/questions/3364279/has-anyone-parsed-wiktionary
8549d3eda437975ac6e03029bed0461ef3478182,37198118,  // http://stackoverflow.com/questions/37198118/too-many-elements-for-tuple-27-allowed-22
8e76d04d0882535e11553a9ef6edc75c095235a1,2657068,http://stackoverflow.com/questions/2657068/idiomatic-python-times-loop
35c32f4cc94e974864656312293c0b1f4c9e47bc,1988833,https://stackoverflow.com/questions/1988833/converting-color-to-consolecolor
ff04492097f43bd869bf511ae103e56bf7b6855c,19562903,  http://stackoverflow.com/questions/19562903/remove-padding-from-columns-in-bootstrap-3 */
7cebdeb460cf31aba7c698495082d6e062e1d653,14448219,                see http://stackoverflow.com/questions/14448219/as3-resetting-urlloader-cache
f983f4bf4a54cd21c492ed0657149e13a5751ed7,1623039,- [python-debugging-tips](http://stackoverflow.com/questions/1623039/python-debugging-tips)
c2a8fd0f72b4a6e0825c53190e86de9a77711caf,19461234,    // http://stackoverflow.com/questions/19461234/domains-not-properly-catching-errors-while-testing-nodejs-in-mocha
ef21c24dfbb2c26eb8ad5399bf9ff286677a1288,14692690,                    # See http://stackoverflow.com/questions/14692690/
c784393131523ed7a6822f9fa3b76d0818433e56,2685827,  ////   http://stackoverflow.com/a/2685827/157965
d07363ea0ee4175f10edaa5d4ca2bb54b7d2bb6c,9409997, *         <http://stackoverflow.com/questions/9409997/how-to-resume-file-download-through-ftp-using-curl-in-c>
c9dfec94abf41fb7b032543b342167d06a47602e,34968722,Discussion: http://stackoverflow.com/questions/34968722/softmax-function-python
7bd3fe5a5f2e2581f47c230354d07c7184e21b03,105034,//生成UUID http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
0a870b27bc146275bed24d3dae255698bc8ba55b,9738911,    http://stackoverflow.com/questions/9738911/javas-serial-garbage-collector-performing-far-better-than-other-garbage-collect
f520d8f95d390976eb305b8ddaed97741a7c7a28,13621084,        ## workaround: http://stackoverflow.com/questions/13621084/boundingrectwithsize-for-nsattributedstring-returning-wrong-size
d7eda686f31fb13ecc9ae34892c05127caf1802f,12090996,                                     http://stackoverflow.com/questions/12090996/waiting-for-a-file-to-load-onload-javascript
b62928eb66b6b8ef9c619b343817c9e1808ac6af,33569668,        + [numpy max vs amax vs maximum](https://stackoverflow.com/questions/33569668/numpy-max-vs-amax-vs-maximum)
b60e17cfc2be94d0b7ff3c67f0a0a9477cb2c048,19415296,    // source : http://stackoverflow.com/a/19415296
fd0dca203cb9ddd178955fb5ae896f582c0a4ff7,1842681,     * @link http://stackoverflow.com/questions/1842681/regular-expression-to-remove-one-parameter-from-query-string
61e6e7fd76930a9a114c790f8f6073d8a817000c,17201854,        // this should really be limited to return string but it creates this problem: http://stackoverflow.com/q/17201854/165656
c38339eb1c56e72091f787bc37f98dc7a5ffa432,4023830,# http://stackoverflow.com/questions/4023830/bash-how-compare-two-strings-in-version-format
ab1622453a56c013f5c03b7de3e9744e42b8e83b,7540546, *   http://stackoverflow.com/questions/7540546/merging-2-binary-search-trees
bcdf7da8ac151aaacad6a8e98d95ec5629aee2b7,3888991,//Currency infor http://stackoverflow.com/questions/3888991/currency-code-to-currency-symbol-mapping
36eb98734590c47242d3eba99b456387e7eac274,24566574,/// - <http://stackoverflow.com/q/24566574/3235496>
efb8895498e66034fe512cc8bb2e4fb028bb80c6,1148309,     * modified from https://stackoverflow.com/questions/1148309/inverting-a-4x4-matrix
4ded733fef7117e79b98e11b20098b4ded18d5d8,59895,    # http://stackoverflow.com/questions/59895
7e89b72b018b91acc98c3522b269be2fb7fd7bbb,17553300,          /* The second rule removes the odd blue bg color behind the text in the select button in IE 10/11 and sets the text color to match the focus style's - fix via http://stackoverflow.com/questions/17553300/change-ie-background-color-on-unopened-focused-select-box */
7e0b0e243533abae6de473626fbb55b59596f425,676615,   * http://stackoverflow.com/questions/676615/why-is-scalas-immutable-set-not-covariant-in-its-type
2a8a906c02da57688e228e56df41136837c21d77,38931566,"    ""# http://stackoverflow.com/questions/38931566/pandas-style-background-gradient-both-rows-and-colums\n"","
8bdcc488a1413e29e36cf46c32ad5af48dcba1e1,2711579,Pasted from <http://stackoverflow.com/questions/2711579/concatenate-strings-in-python-2-4> 
8c112a5be02fb22be55b33fc25caf850f6445b0a,12900504,			// TODO: use http://stackoverflow.com/questions/190852/how-can-i-get-file-extensions-with-javascript/12900504#12900504
4c99d093edf56e90a6a39480036f3b22b50f8b64,32441327,    //https://stackoverflow.com/questions/32441327
0cbeaccf4f22ab571b7a066fd18254a326fc7f91,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
212edbc720dfab647a68a1f56ec7b16ee9ef1bfc,29878370,[First run of Android Studio. Unable to access Android SDK add-on list](http://stackoverflow.com/questions/29878370/android-studio-first-run-error)
a55f0c9889f853a446cfaff3c1e7c20b42cc1ab3,36803176,    // http://stackoverflow.com/questions/36803176/how-to-prevent-the-play-request-was-interrupted-by-a-call-to-pause-error
03d22221907618f25f11d270346f550a29671232,82432 549,"[{""link_text"":""We Do Not Need You To Design Anymore"",""link"":""http://journal.drawar.com/d/we-do-not-need-you-to-design-anymore/"",""source"":""drawar.com"",""points"":""15"",""comments"":""12"",""submitter"":""inmygarage"",""date"":1314658503,""id"":""2939255"",""homepage"":false},{""link_text"":""BitTorrent users don't \""act in concert,\"" so judge slashes mass P2P case"",""link"":""http://arstechnica.com/tech-policy/news/2011/08/bittorrent-users-dont-act-in-concert-so-judge-slashes-mass-p2p-case.ars"",""source"":""arstechnica.com"",""points"":""82"",""comments"":""15"",""submitter"":""Mithrandir"",""date"":1314657303,""id"":""2939300"",""homepage"":false},{""link_text"":""Fech: The NYT's new Gem for F.E.C. Filings"",""link"":""http://open.blogs.nytimes.com/2011/08/29/introducing-fech/"",""source"":""nytimes.com"",""points"":""52"",""comments"":""0"",""submitter"":""jashkenas"",""date"":1314655803,""id"":""2939149"",""homepage"":false},{""link_text"":""AppHarbor (YC W11) launches scaling"",""link"":""http://blog.appharbor.com/2011/08/29/application-scaling-now-in-beta"",""source"":""appharbor.com"",""points"":""28"",""comments"":""7"",""submitter"":""runesoerensen"",""date"":1314654903,""id"":""2939198"",""homepage"":false},{""link_text"":""Bushido (YC S11): An App Store For The Web That Can Kickstart Your Side Projects"",""link"":""http://techcrunch.com/2011/08/29/yc-funded-bushido-an-app-store-for-the-web-that-can-kickstart-your-side-projects/"",""source"":""techcrunch.com"",""points"":""114"",""comments"":""36"",""submitter"":""sgrove"",""date"":1314654007,""id"":""2939115"",""homepage"":false},{""link_text"":""Mari0 - Super Mario Bros. + Portal"",""link"":""http://stabyourself.net/mari0/"",""source"":""stabyourself.net"",""points"":""525"",""comments"":""29"",""submitter"":""ChrisArchitect"",""date"":1314653703,""id"":""2939097"",""homepage"":false},{""link_text"":""Arch Linux moves up to Linux 3.0"",""link"":""http://www.desktoplinux.com/news/NS2477413399.html"",""source"":""desktoplinux.com"",""points"":""76"",""comments"":""19"",""submitter"":""darkduck"",""date"":1314652803,""id"":""2938880"",""homepage"":false},{""link_text"":""Show HN: `Nide` - open source IDE built in 48 hours for Node.JS Knockout"",""link"":""http://coreh.github.com/nide/"",""source"":""github.com"",""points"":""44"",""comments"":""12"",""submitter"":""TheCoreh"",""date"":1314652803,""id"":""2938861"",""homepage"":false},{""link_text"":""WebGL implemented for nodeJS and webOS"",""link"":""http://nodeknockout.com/teams/minimason"",""source"":""nodeknockout.com"",""points"":""16"",""comments"":""2"",""submitter"":""creationix"",""date"":1314652203,""id"":""2938980"",""homepage"":false},{""link_text"":""An Entrepreneurial Fix for the U.S. Economy"",""link"":""http://online.wsj.com/article/SB10001424053111903480904576512683292295492.html"",""source"":""wsj.com"",""points"":""10"",""comments"":""15"",""submitter"":""tokenadult"",""date"":1314651903,""id"":""2938964"",""homepage"":false},{""link_text"":""Book on Third-Party JavaScript from engineers at Disqus (YC 07)"",""link"":""http://thirdpartyjs.com"",""source"":""thirdpartyjs.com"",""points"":""76"",""comments"":""20"",""submitter"":""bentlegen"",""date"":1314650703,""id"":""2938799"",""homepage"":false},{""link_text"":""Preview of Google TV add-on for the Android SDK"",""link"":""http://googletv.blogspot.com/2011/08/preview-of-google-tv-add-on-for-android.html"",""source"":""googletv.blogspot.com"",""points"":""23"",""comments"":""6"",""submitter"":""ben_hall"",""date"":1314648605,""id"":""2938642"",""homepage"":false},{""link_text"":""Gmail.com being MITM'd by Iran using this certificate"",""link"":""http://pastebin.com/ff7Yg663"",""source"":""pastebin.com"",""points"":""311"",""comments"":""183"",""submitter"":""koenigdavidmj"",""date"":1314647707,""id"":""2938516"",""homepage"":false},{""link_text"":""What Kills Startups? A study."",""link"":""http://techcrunch.com/2011/08/29/what-kills-startups-blackbox-releases-reportapp-to-help-founders-avoid-the-deadpool/"",""source"":""techcrunch.com"",""points"":""95"",""comments"":""42"",""submitter"":""entangld"",""date"":1314646503,""id"":""2938483"",""homepage"":false},{""link_text"":""Crustache is a fast C implementation of Mustache"",""link"":""https://github.com/tanoku/crustache"",""source"":""github.com"",""points"":""53"",""comments"":""23"",""submitter"":""tanoku"",""date"":1314645603,""id"":""2938393"",""homepage"":false},{""link_text"":""Yesod 0.9 Released"",""link"":""http://www.yesodweb.com/blog/2011/08/announcing-yesod-0.9"",""source"":""yesodweb.com"",""points"":""19"",""comments"":""0"",""submitter"":""JanLaussmann"",""date"":1314645603,""id"":""2938363"",""homepage"":false},{""link_text"":""Ask Kevin Mitnick"",""link"":""http://interviews.slashdot.org/story/11/08/29/1737257/Ask-Kevin-Mitnick"",""source"":""slashdot.org"",""points"":""10"",""comments"":""0"",""submitter"":""randomdrake"",""date"":1314645026,""id"":""2938332"",""homepage"":false},{""link_text"":""Lets create a collaborative Book List on Computer Science & Programming"",""link"":""https://docs.google.com/document/d/1XDGF6R-A4z_KuAc68rZuqQDtVVg0O21YsnXe0678Lfo/edit?hl=en_US"",""source"":""google.com"",""points"":""38"",""comments"":""11"",""submitter"":""akarambir"",""date"":1314645026,""id"":""2938313"",""homepage"":false},{""link_text"":""Is learning Assembly Language worth the effort?"",""link"":""http://stackoverflow.com/questions/82432/is-learning-assembly-language-worth-the-effort"",""source"":""stackoverflow.com"",""points"":""87"",""comments"":""50"",""submitter"":""llambda"",""date"":1314645026,""id"":""2938257"",""homepage"":false},{""link_text"":""2.0 Feature Focus: WebHooks"",""link"":""http://blog.context.io/?p=578"",""source"":""context.io"",""points"":""8"",""comments"":""1"",""submitter"":""sjsjsj"",""date"":1314644404,""id"":""2938267"",""homepage"":false},{""link_text"":""Death Threats and Hate Crimes, Attacks On Women Bloggers Escalating"",""link"":""http://ittybiz.com/death-threats-online/"",""source"":""ittybiz.com"",""points"":""48"",""comments"":""31"",""submitter"":""mkr-hn"",""date"":1314644105,""id"":""2938270"",""homepage"":false},{""link_text"":""Possible Iranian goverment MITM attack on Gmail"",""link"":""http://www.google.com/support/forum/p/gmail/thread?tid=2da6158b094b225a"",""source"":""google.com"",""points"":""7"",""comments"":""3"",""submitter"":""packetlss"",""date"":1314644105,""id"":""2938238"",""homepage"":false},{""link_text"":""Sprockets 2.0.0 released (Ruby/Rack asset packaging)"",""link"":""https://github.com/sstephenson/sprockets/tree/v2.0.0"",""source"":""github.com"",""points"":""38"",""comments"":""7"",""submitter"":""sstephenson"",""date"":1314643803,""id"":""2938266"",""homepage"":false},{""link_text"":""Microsoft UI has officially entered the realm of self-parody"",""link"":""http://seldo.tumblr.com/post/9549775746/this-is-genuinely-microsofts-idea-of-a"",""source"":""seldo.tumblr.com"",""points"":""733"",""comments"":""321"",""submitter"":""wyclif"",""date"":1314643504,""id"":""2938271"",""homepage"":false},{""link_text"":""IBM plants transactional memory in CPU"",""link"":""http://www.eetimes.com/electronics-news/4218914/IBM-plants-transactional-memory-in-CPU?cid=NL_EETimesDaily"",""source"":""eetimes.com"",""points"":""35"",""comments"":""8"",""submitter"":""yurisagalov"",""date"":1314643204,""id"":""2938206"",""homepage"":false},{""link_text"":""Show HN: A weekend project to help improve your startup's communication"",""link"":""http://feedme.io/"",""source"":""feedme.io"",""points"":""5"",""comments"":""1"",""submitter"":""rickharrison"",""date"":1314642904,""id"":""2938176"",""homepage"":false},{""link_text"":""Applications Open for Winter 2012 YC Funding"",""link"":""http://ycombinator.com/apply.html?2012"",""source"":""ycombinator.com"",""points"":""270"",""comments"":""113"",""submitter"":""pg"",""date"":1314642303,""id"":""2938195"",""homepage"":false},{""link_text"":""The Future of Gaming: a Portrait of the New Gamers"",""link"":""http://www.latd.com/2011/08/23/the-future-of-gaming-a-portrait-of-the-new-gamers/"",""source"":""latd.com"",""points"":""29"",""comments"":""6"",""submitter"":""krgaskins"",""date"":1314642003,""id"":""2938164"",""homepage"":false},{""link_text"":""Why no Steam, Notch?"",""link"":""http://notch.tumblr.com/post/9550850116/why-no-steam-notch"",""source"":""notch.tumblr.com"",""points"":""193"",""comments"":""123"",""submitter"":""sorbus"",""date"":1314640503,""id"":""2938055"",""homepage"":false},{""link_text"":""Understanding JIT spray"",""link"":""http://blog.cdleary.com/2011/08/understanding-jit-spray/"",""source"":""cdleary.com"",""points"":""107"",""comments"":""9"",""submitter"":""mbrubeck"",""date"":1314638403,""id"":""2937867"",""homepage"":false},{""link_text"":""After A Hot Start, Justin.tv Spins Off Socialcam, Its ‘Instagram for Video’"",""link"":""http://techcrunch.com/2011/08/29/after-a-hot-start-justin-tv-spins-off-socialcam-its-instagram-for-video/"",""source"":""techcrunch.com"",""points"":""35"",""comments"":""10"",""submitter"":""Mazy"",""date"":1314638103,""id"":""2937888"",""homepage"":false},{""link_text"":""What programmers need to know about hardware prefetching?"",""link"":""http://www.futurechips.org/chip-design-for-all/prefetching.html"",""source"":""futurechips.org"",""points"":""48"",""comments"":""7"",""submitter"":""tech_junkie"",""date"":1314638103,""id"":""2937884"",""homepage"":false},{""link_text"":""U.S. Government Intelligence: DNI/IARPA Announces Open Source Indicators Program"",""link"":""http://infodocket.com/2011/08/29/recently-announced-intelligence-iarpa-announces-open-source-indicators-program/"",""source"":""infodocket.com"",""points"":""18"",""comments"":""3"",""submitter"":""yyzyvr"",""date"":1314637803,""id"":""2937827"",""homepage"":false},{""link_text"":""How to Pick the Right Idea for your Startup"",""link"":""http://onstartups.com/tabid/3339/bid/64782/How-To-Pick-The-Right-Idea-For-Your-Startup.aspx"",""source"":""onstartups.com"",""points"":""40"",""comments"":""9"",""submitter"":""kapilkale"",""date"":1314637503,""id"":""2937824"",""homepage"":false},{""link_text"":""How Airbnb Switched to a HTML5 Photo Manager"",""link"":""http://nerds.airbnb.com/67137452"",""source"":""airbnb.com"",""points"":""21"",""comments"":""2"",""submitter"":""_harry"",""date"":1314636910,""id"":""2937802"",""homepage"":false},{""link_text"":""Play on Heroku"",""link"":""http://blog.heroku.com/archives/2011/8/29/play/"",""source"":""heroku.com"",""points"":""170"",""comments"":""27"",""submitter"":""craigkerstiens"",""date"":1314635103,""id"":""2937671"",""homepage"":false},{""link_text"":""Why To Write Tests For Your Code"",""link"":""http://masternerd.lucianocheng.com/5-reasons-for-testing-masternerdposterouscom"",""source"":""lucianocheng.com"",""points"":""45"",""comments"":""30"",""submitter"":""lchengify"",""date"":1314635103,""id"":""2937662"",""homepage"":false},{""link_text"":""Get 10 GB of space on the new Minus.com"",""link"":""http://minus.com"",""source"":""minus.com"",""points"":""70"",""comments"":""72"",""submitter"":""mindotus"",""date"":1314634503,""id"":""2937611"",""homepage"":false},{""link_text"":""CSS in Real Life"",""link"":""http://www.impressivewebs.com/css-in-real-life/"",""source"":""impressivewebs.com"",""points"":""4"",""comments"":""0"",""submitter"":""rhartsock"",""date"":1314633603,""id"":""2937539"",""homepage"":false},{""link_text"":""No CEO is Worth Their Multi Million Dollar Paycheck. Except..."",""link"":""http://blog.foundrs.com/2011/08/27/no-ceo-is-worth-their-multi-million-dollar-paycheck-except/"",""source"":""foundrs.com"",""points"":""19"",""comments"":""20"",""submitter"":""alain94040"",""date"":1314633303,""id"":""2937512"",""homepage"":false},{""link_text"":""The Stoner Arms Dealers: How Two American Kids Became Big-Time Weapons Traders"",""link"":""http://www.rollingstone.com/politics/news/the-stoner-arms-dealers-20110316"",""source"":""rollingstone.com"",""points"":""10"",""comments"":""2"",""submitter"":""lgv"",""date"":1314632403,""id"":""2937456"",""homepage"":false},{""link_text"":""The Social Web is Splintering (ftw)"",""link"":""http://www.jakelevine.me/blog/2011/08/the-social-web-is-splintering-ftw/"",""source"":""jakelevine.me"",""points"":""12"",""comments"":""4"",""submitter"":""jrlevine"",""date"":1314632403,""id"":""2937407"",""homepage"":false},{""link_text"":""Former MIT grad student: \""Express your wrath digitally\"""",""link"":""http://angerlights.com"",""source"":""angerlights.com"",""points"":""23"",""comments"":""16"",""submitter"":""pingswept"",""date"":1314632103,""id"":""2937459"",""homepage"":false},{""link_text"":""Improvements in Windows Explorer - Building Windows 8"",""link"":""http://blogs.msdn.com/b/b8/archive/2011/08/26/improvements-in-windows-explorer.aspx"",""source"":""msdn.com"",""points"":""160"",""comments"":""153"",""submitter"":""ghurlman"",""date"":1314631803,""id"":""2937444"",""homepage"":false},{""link_text"":""Post Citrix Acquisition, Cloud.com’s CloudStack Goes 100% Open Source"",""link"":""http://www.washingtonpost.com/business/technology/post-citrix-acquisition-cloudcoms-cloudstack-goes-100percent-open-source/2011/08/29/gIQAchVGnJ_story.html"",""source"":""washingtonpost.com"",""points"":""18"",""comments"":""0"",""submitter"":""boh"",""date"":1314630903,""id"":""2937369"",""homepage"":false},{""link_text"":""Smooth Wallet - Personal finance that doesn't suck."",""link"":""http://smoothwallet.com/"",""source"":""smoothwallet.com"",""points"":""12"",""comments"":""22"",""submitter"":""nicksergeant"",""date"":1314630003,""id"":""2937354"",""homepage"":false},{""link_text"":""Mixpanel: We're hiring and here's where we're at."",""link"":""http://news.ycombinator.com/item?id=2937339"",""points"":"""",""comments"":"""",""submitter"":"""",""date"":1314629703,""id"":""2937339"",""homepage"":false},{""link_text"":""Kleiner Plays Catch-Up"",""link"":""http://online.wsj.com/article/SB10001424053111903366504576486432620701722.html?KEYWORDS=kleiner"",""source"":""wsj.com"",""points"":""23"",""comments"":""2"",""submitter"":""grellas"",""date"":1314629703,""id"":""2937326"",""homepage"":false},{""link_text"":""Reflections on Node.js Knockout Competition 2011"",""link"":""http://catonmat.net/blog/nodejs-knockout-2011/"",""source"":""catonmat.net"",""points"":""22"",""comments"":""2"",""submitter"":""Eriks"",""date"":1314629409,""id"":""2937297"",""homepage"":false},{""link_text"":""What Is Your Startups Acquisition Offer REALLY Worth?"",""link"":""http://blog.eladgil.com/2011/08/what-is-your-startup-acquisition-offer.html"",""source"":""eladgil.com"",""points"":""10"",""comments"":""0"",""submitter"":""eladgil"",""date"":1314629103,""id"":""2937319"",""homepage"":false},{""link_text"":""Only 600 new jobs for 17,000 applicants at Ford plant"",""link"":""http://content.usatoday.com/communities/driveon/post/2011/08/only-600-new-jobs-for-17000-applicants-at-ford-plant/1"",""source"":""usatoday.com"",""points"":""8"",""comments"":""0"",""submitter"":""chailatte"",""date"":1314629103,""id"":""2937315"",""homepage"":false},{""link_text"":""SWIG author on the complexity of SWIG"",""link"":""http://code.activestate.com/lists/python-dev/109281/"",""source"":""activestate.com"",""points"":""46"",""comments"":""11"",""submitter"":""prog"",""date"":1314629103,""id"":""2937247"",""homepage"":false},{""link_text"":""Sass for Designers"",""link"":""http://sonspring.com/journal/sass-for-designers"",""source"":""sonspring.com"",""points"":""28"",""comments"":""7"",""submitter"":""joshuacc"",""date"":1314627903,""id"":""2937132"",""homepage"":false},{""link_text"":""Lodsys in a Panic to Keep Apple Out of Suit"",""link"":""http://www.groklaw.net/article.php?story=20110828073533134"",""source"":""groklaw.net"",""points"":""125"",""comments"":""28"",""submitter"":""grellas"",""date"":1314627304,""id"":""2937129"",""homepage"":false},{""link_text"":""The Definitive Guide to Forms-Based Website Authentication"",""link"":""http://stackoverflow.com/questions/549/the-definitive-guide-to-forms-based-website-authentication"",""source"":""stackoverflow.com"",""points"":""4"",""comments"":""0"",""submitter"":""cristoperb"",""date"":1314627003,""id"":""2937189"",""homepage"":false},{""link_text"":""Best SSDs For The Money: August 2011"",""link"":""http://www.tomshardware.com/reviews/ssd-solid-state-nand-reliability,2998.html"",""source"":""tomshardware.com"",""points"":""117"",""comments"":""68"",""submitter"":""nesbot"",""date"":1314627003,""id"":""2937100"",""homepage"":false},{""link_text"":""RTFM: Dispelling a Myth About Steve Jobs’ Resignation"",""link"":""http://jaredbrown.me/post/9531000765/dispelling-a-myth-about-steve-jobs-resignation"",""source"":""jaredbrown.me"",""points"":""6"",""comments"":""3"",""submitter"":""jaredbrown"",""date"":1314626703,""id"":""2937135"",""homepage"":false},{""link_text"":""The Magical Mathematics of Numb3rs"",""link"":""http://math-blog.com/2011/08/29/the-magical-mathematics-of-numb3rs/"",""source"":""math-blog.com"",""points"":""29"",""comments"":""8"",""submitter"":""acangiano"",""date"":1314625803,""id"":""2937012"",""homepage"":false},{""link_text"":""Time Warner gets royalties on every Anonymous mask"",""link"":""http://www.nytimes.com/2011/08/29/technology/masked-anonymous-protesters-aid-time-warners-profits.html"",""source"":""nytimes.com"",""points"":""72"",""comments"":""17"",""submitter"":""sp332"",""date"":1314625504,""id"":""2937103"",""homepage"":false},{""link_text"":""Account Chooser - for the next generation of web sign in"",""link"":""http://accountchooser.com/"",""source"":""accountchooser.com"",""points"":""61"",""comments"":""10"",""submitter"":""ChrisArchitect"",""date"":1314625504,""id"":""2937056"",""homepage"":false},{""link_text"":""CloudStack drops 'open core' goes completely open source"",""link"":""http://cloudstack.org/blog/cloudstack-the-best-kept-secret-in-cloud-computing.html"",""source"":""cloudstack.org"",""points"":""39"",""comments"":""11"",""submitter"":""ke4qqq"",""date"":1314624903,""id"":""2936940"",""homepage"":false},{""link_text"":""Gold Coins: The Mystery of the Double Eagle"",""link"":""http://www.businessweek.com/magazine/gold-coins-the-mystery-of-the-double-eagle-08252011.html"",""source"":""businessweek.com"",""points"":""64"",""comments"":""18"",""submitter"":""winanga"",""date"":1314624303,""id"":""2936984"",""homepage"":false},{""link_text"":""IBM Unveils New Hybrid Cloud Solution for the Enterprise"",""link"":""http://www.darkreading.com/cloud-security/167901092/security/news/231600360/ibm-unveils-new-hybrid-cloud-solution-for-the-enterprise.html"",""source"":""darkreading.com"",""points"":""3"",""comments"":""0"",""submitter"":""rickdale"",""date"":1314624003,""id"":""2936966"",""homepage"":false},{""link_text"":""The hidden cost of funding"",""link"":""http://www.jacquesmattheij.com/The+hidden+cost+of+funding"",""source"":""jacquesmattheij.com"",""points"":""21"",""comments"":""1"",""submitter"":""ZeroMinx"",""date"":1314622803,""id"":""2936941"",""homepage"":false},{""link_text"":""Why I blog"",""link"":""http://www.gabrielweinberg.com/blog/2011/08/why-i-blog.html"",""source"":""gabrielweinberg.com"",""points"":""73"",""comments"":""10"",""submitter"":""wyclif"",""date"":1314622803,""id"":""2936785"",""homepage"":false},{""link_text"":""Answer Set Programming"",""link"":""http://en.wikipedia.org/wiki/Answer_set_programming"",""source"":""wikipedia.org"",""points"":""5"",""comments"":""2"",""submitter"":""wslh"",""date"":1314622503,""id"":""2936866"",""homepage"":false},{""link_text"":""GRC's | Off The Grid  "",""link"":""https://www.grc.com/offthegrid.htm"",""source"":""grc.com"",""points"":""23"",""comments"":""7"",""submitter"":""billpg"",""date"":1314621903,""id"":""2936825"",""homepage"":false},{""link_text"":""Every generation gets the self-help guru it deserves"",""link"":""http://www.newyorker.com/reporting/2011/09/05/110905fa_fact_mead"",""source"":""newyorker.com"",""points"":""68"",""comments"":""22"",""submitter"":""wyclif"",""date"":1314621608,""id"":""2936908"",""homepage"":false},{""link_text"":""libtap - Testing library for C, implementing the Test Anything Protocol."",""link"":""https://github.com/pozorvlak/libtap"",""source"":""github.com"",""points"":""29"",""comments"":""6"",""submitter"":""ColinWright"",""date"":1314621608,""id"":""2936877"",""homepage"":false},{""link_text"":""Hard work and high skills - notch and the value of the individual hacker"",""link"":""http://thestartuptoolkit.com/blog/Hard_work_and_high_skills/"",""source"":""thestartuptoolkit.com"",""points"":""73"",""comments"":""28"",""submitter"":""robfitz"",""date"":1314621608,""id"":""2936795"",""homepage"":false},{""link_text"":""Google+ traffic down 27% in the last two weeks"",""link"":""http://www.dreamgrow.com/google-plus-is-failing-data/"",""source"":""dreamgrow.com"",""points"":""48"",""comments"":""63"",""submitter"":""rmccue"",""date"":1314621003,""id"":""2936809"",""homepage"":false},{""link_text"":""Scala: The Android programming language you didn't know you had"",""link"":""http://www.computerworld.com/s/article/9219546/Scala_The_Android_programming_language_you_didn_t_know_you_had?source=rss_applications"",""source"":""computerworld.com"",""points"":""45"",""comments"":""14"",""submitter"":""bleakgadfly"",""date"":1314620403,""id"":""2936836"",""homepage"":false},{""link_text"":""Intelligent Code Personalization"",""link"":""http://www.olliesaunders.com/intelligent-code-personalization"",""source"":""olliesaunders.com"",""points"":""6"",""comments"":""0"",""submitter"":""olliesaunders"",""date"":1314620403,""id"":""2936819"",""homepage"":false},{""link_text"":""Walt Disney Animation Studios Open Source Software"",""link"":""http://www.disneyanimation.com/technology/opensource.html"",""source"":""disneyanimation.com"",""points"":""19"",""comments"":""6"",""submitter"":""inetsee"",""date"":1314617403,""id"":""2936733"",""homepage"":false},{""link_text"":""How Would You Teach Left from Right to an Alien Civilization?"",""link"":""http://blogs.scientificamerican.com/degrees-of-freedom/2011/08/28/handedness-galactic-challenge/"",""source"":""scientificamerican.com"",""points"":""33"",""comments"":""25"",""submitter"":""ColinWright"",""date"":1314617403,""id"":""2936682"",""homepage"":false},{""link_text"":""The Linuxification of Webapps"",""link"":""http://notes.deaxon.com/linuxification-of-webapps/"",""source"":""deaxon.com"",""points"":""24"",""comments"":""18"",""submitter"":""edvinasbartkus"",""date"":1314617403,""id"":""2936628"",""homepage"":false},{""link_text"":""Reinventing the wheel - just another JavaScript Quiz "",""link"":""http://blog.yushchenko.name/javascript-interview-questions"",""source"":""yushchenko.name"",""points"":""7"",""comments"":""0"",""submitter"":""vyushchenko"",""date"":1314617103,""id"":""2936704"",""homepage"":false},{""link_text"":""Live undersea robot as exciting as a space walk"",""link"":""http://www.interactiveoceans.washington.edu/visions11/live"",""source"":""washington.edu"",""points"":""34"",""comments"":""9"",""submitter"":""Duckpaddle2"",""date"":1314616803,""id"":""2936716"",""homepage"":false},{""link_text"":""Reflections on Node.js Knockout Competition 2011"",""link"":""http://www.catonmat.net/blog/nodejs-knockout-2011/"",""source"":""catonmat.net"",""points"":""9"",""comments"":""0"",""submitter"":""nonne"",""date"":1314616503,""id"":""2936724"",""homepage"":false},{""link_text"":""Learn Vim Progressively"",""link"":""http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/"",""source"":""yannesposito.com"",""points"":""562"",""comments"":""112"",""submitter"":""yogsototh"",""date"":1314615303,""id"":""2936670"",""homepage"":false},{""link_text"":""Simple future facade for Scala"",""link"":""https://github.com/eed3si9n/sff4s"",""source"":""github.com"",""points"":""9"",""comments"":""0"",""submitter"":""cgbystrom"",""date"":1314615014,""id"":""2936605"",""homepage"":false},{""link_text"":""Every .NET Developer Should Know Their Database Well Enough"",""link"":""http://www.sqlservercurry.com/2011/08/net-developer-database-knowledge.html"",""source"":""sqlservercurry.com"",""points"":""22"",""comments"":""8"",""submitter"":""pablospr"",""date"":1314614103,""id"":""2936621"",""homepage"":false},{""link_text"":""Django Best Practices"",""link"":""http://lincolnloop.com/django-best-practices/"",""source"":""lincolnloop.com"",""points"":""42"",""comments"":""12"",""submitter"":""rs"",""date"":1314612603,""id"":""2936364"",""homepage"":false},{""link_text"":""Show HN: Turf, a geo-social warfare app, my NKO submission"",""link"":""http://turf.no.de/"",""source"":""no.de"",""points"":""8"",""comments"":""6"",""submitter"":""iambot"",""date"":1314610203,""id"":""2936382"",""homepage"":false},{""link_text"":""Interview with Gabriel Weinberg (founder of DuckDuckGo)"",""link"":""http://web-target.com/en/case-studies/402-interview-with-gabriel-weinberg-duckduckgo"",""source"":""web-target.com"",""points"":""19"",""comments"":""2"",""submitter"":""giorgiofontana"",""date"":1314609603,""id"":""2936416"",""homepage"":false},{""link_text"":""On Minimalism"",""link"":""http://chriseidhof.tumblr.com/post/9539831015/on-minimalism"",""source"":""chriseidhof.tumblr.com"",""points"":""101"",""comments"":""83"",""submitter"":""chriseidhof"",""date"":1314608403,""id"":""2936432"",""homepage"":false},{""link_text"":""Speech Recognition Leaps Forward"",""link"":""http://research.microsoft.com/en-us/news/features/speechrecognition-082911.aspx"",""source"":""microsoft.com"",""points"":""72"",""comments"":""32"",""submitter"":""Garbage"",""date"":1314608403,""id"":""2936371"",""homepage"":false},{""link_text"":""You Know You're From IT In 1990s If ..."",""link"":""http://informationweek.com/thebrainyard/news/social_networking_consumer/231500371/you-know-youre-from-it-in-1990s-if-"",""source"":""informationweek.com"",""points"":""4"",""comments"":""1"",""submitter"":""codebungl"",""date"":1314606903,""id"":""2936271"",""homepage"":false},{""link_text"":""Extreme tab browsing"",""link"":""http://glandium.org/blog/?p=2180"",""source"":""glandium.org"",""points"":""39"",""comments"":""38"",""submitter"":""Garbage"",""date"":1314605703,""id"":""2936369"",""homepage"":false},{""link_text"":""Misadventures in VC Funding: The $24 Million Moz Almost Raised"",""link"":""http://randfishkin.com/blog/128/misadventures-venture-capital-funding"",""source"":""randfishkin.com"",""points"":""316"",""comments"":""50"",""submitter"":""dshah"",""date"":1314605103,""id"":""2936335"",""homepage"":false},{""link_text"":""Can PostgreSQL pickup where MySQL left off?"",""link"":""http://news.cnet.com/8301-13846_3-20097433-62/can-postgresql-pickup-where-mysql-left-off/"",""source"":""cnet.com"",""points"":""38"",""comments"":""45"",""submitter"":""ruffdev"",""date"":1314601803,""id"":""2936096"",""homepage"":false},{""link_text"":""CyanogenMod 7 On the HP TouchPad"",""link"":""http://rootzwiki.com/content.php?r=234-EXCLUSIVE-CyanogenMod-7-On-the-HP-TouchPad"",""source"":""rootzwiki.com"",""points"":""47"",""comments"":""32"",""submitter"":""franze"",""date"":1314601203,""id"":""2936201"",""homepage"":false},{""link_text"":""Ietf.org certificate is expired"",""link"":""https://www.ietf.org/"",""source"":""ietf.org"",""points"":""8"",""comments"":""4"",""submitter"":""yuhong"",""date"":1314600304,""id"":""2936159"",""homepage"":false},{""link_text"":""NodeKnockout: Microscopic Survival Horror MMO."",""link"":""http://node-juice.no.de"",""source"":""no.de"",""points"":""8"",""comments"":""12"",""submitter"":""techwraith"",""date"":1314598507,""id"":""2936134"",""homepage"":false},{""link_text"":""The \""overlearning the game\"" problem"",""link"":""http://andrewoneverything.com/the-overlearning-the-game-problem"",""source"":""andrewoneverything.com"",""points"":""351"",""comments"":""137"",""submitter"":""sendos"",""date"":1314596407,""id"":""2935944"",""homepage"":false},{""link_text"":""~"",""link"":""http://www.project-tilde.org"",""source"":""project-tilde.org"",""points"":""5"",""comments"":""4"",""submitter"":""netmau5"",""date"":1314595207,""id"":""2935822"",""homepage"":false},{""link_text"":""Screenshot of Steve Jobs' calendar"",""link"":""http://www.geekculture.com/joyoftech/joyarchives/1583.html"",""source"":""geekculture.com"",""points"":""9"",""comments"":""0"",""submitter"":""jaybol"",""date"":1314594607,""id"":""2935959"",""homepage"":false},{""link_text"":""US Incorporation for Canadian Startups"",""link"":""http://blog.carlmercier.com/2011/08/29/us-incorporation-for-canadian-startups/"",""source"":""carlmercier.com"",""points"":""73"",""comments"":""16"",""submitter"":""cmer"",""date"":1314594311,""id"":""2935970"",""homepage"":false},{""link_text"":""Math Libraries - Overview "",""link"":""http://hpc-opinion.blogspot.com/2011/08/math-libraries-overview.html"",""source"":""hpc-opinion.blogspot.com"",""points"":""7"",""comments"":""0"",""submitter"":""benhpcsmith"",""date"":1314593407,""id"":""2935866"",""homepage"":false},{""link_text"":""Who Killed Prolog?"",""link"":""http://vanemden.wordpress.com/2010/08/21/who-killed-prolog/"",""source"":""vanemden.wordpress.com"",""points"":""49"",""comments"":""22"",""submitter"":""wslh"",""date"":1314593407,""id"":""2935855"",""homepage"":false},{""link_text"":""Show HN: CI for node.js; built in 48 hours for the Node Knockout."",""link"":""http://drip.io"",""source"":""drip.io"",""points"":""5"",""comments"":""0"",""submitter"":""cmeiklejohn"",""date"":1314591607,""id"":""2935689"",""homepage"":false},{""link_text"":""Raspberry Pi: A $25 ultra-low-cost computer that can run Quake 3"",""link"":""http://www.zdnet.com/photos/raspberry-pi-a-25-ultra-low-cost-computer/6286417?tag=siu-container;attachment_3709"",""source"":""zdnet.com"",""points"":""9"",""comments"":""2"",""submitter"":""aresant"",""date"":1314589810,""id"":""2935773"",""homepage"":false},{""link_text"":""H-P's One-Year Plan"",""link"":""http://online.wsj.com/article/SB10001424053111904787404576535211589514334.html"",""source"":""wsj.com"",""points"":""272"",""comments"":""88"",""submitter"":""jkopelman"",""date"":1314586807,""id"":""2935661"",""homepage"":false},{""link_text"":""GameStop tries to win back its customers"",""link"":""http://www.pcworld.com/article/239019/gamestop_tries_to_win_back_customers_trust_after_coupon_bungle.html"",""source"":""pcworld.com"",""points"":""14"",""comments"":""8"",""submitter"":""ltamake"",""date"":1314586807,""id"":""2935603"",""homepage"":false},{""link_text"":""We are winning the war on automobile deaths"",""link"":""http://evidensity.com/2011/08/28/were-winning-the-war-on-automobile-deaths/"",""source"":""evidensity.com"",""points"":""13"",""comments"":""30"",""submitter"":""bengarvey"",""date"":1314586207,""id"":""2935553"",""homepage"":false},{""link_text"":""Is it wrong to note 100m winners are always black? "",""link"":""http://www.bbc.co.uk/news/magazine-14679657"",""source"":""bbc.co.uk"",""points"":""117"",""comments"":""86"",""submitter"":""trustfundbaby"",""date"":1314585907,""id"":""2935521"",""homepage"":false},{""link_text"":""A Year In The Life Of An Entrepreneur"",""link"":""http://techcrunch.com/2011/08/27/the-long-hard-road-to-the-edge/"",""source"":""techcrunch.com"",""points"":""50"",""comments"":""4"",""submitter"":""mfn"",""date"":1314585307,""id"":""2935539"",""homepage"":false},{""link_text"":""Show HN: Social beat machine built on Node.js #NKO"",""link"":""http://eightbitbeats.com"",""source"":""eightbitbeats.com"",""points"":""9"",""comments"":""2"",""submitter"":""joshontheweb"",""date"":1314584407,""id"":""2935439"",""homepage"":false},{""link_text"":""Show HN: Multiplayer Tetris built in 48hrs"",""link"":""http://nko2-forward.herokuapp.com/"",""source"":""herokuapp.com"",""points"":""27"",""comments"":""13"",""submitter"":""andrewnez"",""date"":1314583507,""id"":""2935431"",""homepage"":false},{""link_text"":""Forever-caching proxy for npm"",""link"":""http://preservation-society.nko2.nodeknockout.com/"",""source"":""nodeknockout.com"",""points"":""4"",""comments"":""0"",""submitter"":""georgecalm"",""date"":1314581107,""id"":""2935364"",""homepage"":false},{""link_text"":""It's full of coins"",""link"":""https://bitcointalk.org/index.php?PHPSESSID=ca96dd60fdd9b6f9b2f2328422653aaf&topic=7500.0"",""source"":""bitcointalk.org"",""points"":""37"",""comments"":""16"",""submitter"":""scotty79"",""date"":1314580807,""id"":""2935405"",""homepage"":false},{""link_text"":""Do you want to sell sugar water or do you want to change the world?"",""link"":""http://cdixon.org/2011/08/28/do-you-want-to-sell-sugar-water-or-do-you-want-to-change-the-world/"",""source"":""cdixon.org"",""points"":""78"",""comments"":""67"",""submitter"":""dwynings"",""date"":1314578408,""id"":""2935340"",""homepage"":false},{""link_text"":""Xbox 360 Reset Glitch Hack - Unsigned Code on current Kernels incl. X360 SLIM"",""link"":""http://libxenon.org/index.php?topic=145.0"",""source"":""libxenon.org"",""points"":""75"",""comments"":""18"",""submitter"":""ttol"",""date"":1314576007,""id"":""2935160"",""homepage"":false}]"
195f97dc91f6d984fe25936a23ddced2f8ece05a,28492103,"  ""https://www.stackoverflow.com/questions/28492103/how-to-combine-python-asyncio-with-threads"","
99d785d0effe51d6bc938e3bd5a39829abf3d018,6491463,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///webpack/bootstrap 6a3787d3614c11849fab"",""webpack:///./src/util/helpers.js"",""webpack:///./src/mixins/themeable.js"",""webpack:///./src/mixins/toggleable.js"",""webpack:///./~/vue-loader/lib/component-normalizer.js"",""webpack:///./src/mixins/contextualable.js"",""webpack:///./src/mixins/route-link.js"",""webpack:///./src/mixins/input.js"",""webpack:///./src/mixins/bootable.js"",""webpack:///./src/mixins/checkbox.js"",""webpack:///./src/mixins/expand-transition.js"",""webpack:///./src/mixins/overlayable.js"",""webpack:///./src/mixins/picker.js"",""webpack:///./src/components/_index.js"",""webpack:///./src/directives/_index.js"",""webpack:///./src/util/load.js"",""webpack:///./src/stylus/main.styl"",""webpack:///./src/components/alerts/Alert.js"",""webpack:///./src/components/alerts/index.js"",""webpack:///./src/components/app/App.js"",""webpack:///./src/components/app/index.js"",""webpack:///./src/components/avatars/index.js"",""webpack:///./src/components/bottom-nav/BottomNav.js"",""webpack:///./src/components/bottom-nav/index.js"",""webpack:///./src/components/breadcrumbs/Breadcrumbs.js"",""webpack:///./src/components/breadcrumbs/BreadcrumbsItem.js"",""webpack:///./src/components/breadcrumbs/index.js"",""webpack:///./src/components/buttons/Button.js"",""webpack:///./src/components/buttons/FAB.js"",""webpack:///./src/components/buttons/index.js"",""webpack:///./src/components/cards/Card.js"",""webpack:///./src/components/cards/CardRow.js"",""webpack:///./src/components/cards/index.js"",""webpack:///./src/components/carousel/index.js"",""webpack:///./src/components/chips/Chip.js"",""webpack:///./src/components/chips/index.js"",""webpack:///./src/components/dialogs/Dialog.js"",""webpack:///./src/components/dialogs/index.js"",""webpack:///./src/components/dividers/index.js"",""webpack:///./src/components/expansion-panel/ExpansionPanel.js"",""webpack:///./src/components/expansion-panel/index.js"",""webpack:///./src/components/footer/index.js"",""webpack:///./src/components/forms/Checkbox.js"",""webpack:///./src/components/forms/Radio.js"",""webpack:///./src/components/forms/Switch.js"",""webpack:///./src/components/forms/TextField.js"",""webpack:///./src/components/forms/index.js"",""webpack:///./src/components/grid/index.js"",""webpack:///./src/components/icons/Icon.js"",""webpack:///./src/components/icons/index.js"",""webpack:///./src/components/lists/List.js"",""webpack:///./src/components/lists/ListGroup.js"",""webpack:///./src/components/lists/ListTile.js"",""webpack:///./src/components/lists/ListTileAction.js"",""webpack:///./src/components/lists/index.js"",""webpack:///./src/components/menus/Menu.js"",""webpack:///./src/components/menus/index.js"",""webpack:///./src/components/menus/mixins/activator.js"",""webpack:///./src/components/menus/mixins/generators.js"",""webpack:///./src/components/menus/mixins/keyable.js"",""webpack:///./src/components/menus/mixins/position.js"",""webpack:///./src/components/menus/mixins/utils.js"",""webpack:///./src/components/navigation-drawer/NavigationDrawer.js"",""webpack:///./src/components/navigation-drawer/index.js"",""webpack:///./src/components/pagination/index.js"",""webpack:///./src/components/parallax/index.js"",""webpack:///./src/components/pickers/DatePicker.js"",""webpack:///./src/components/pickers/TimePicker.js"",""webpack:///./src/components/pickers/index.js"",""webpack:///./src/components/pickers/mixins/date-header.js"",""webpack:///./src/components/pickers/mixins/date-table.js"",""webpack:///./src/components/pickers/mixins/date-title.js"",""webpack:///./src/components/pickers/mixins/date-years.js"",""webpack:///./src/components/pickers/mixins/time-body.js"",""webpack:///./src/components/pickers/mixins/time-title.js"",""webpack:///./src/components/progress/index.js"",""webpack:///./src/components/selects/Select.js"",""webpack:///./src/components/selects/index.js"",""webpack:///./src/components/selects/mixins/autocomplete.js"",""webpack:///./src/components/selects/mixins/generators.js"",""webpack:///./src/components/sliders/Slider.js"",""webpack:///./src/components/sliders/index.js"",""webpack:///./src/components/snackbars/Snackbar.js"",""webpack:///./src/components/snackbars/index.js"",""webpack:///./src/components/steppers/Stepper.js"",""webpack:///./src/components/steppers/StepperContent.js"",""webpack:///./src/components/steppers/StepperStep.js"",""webpack:///./src/components/steppers/index.js"",""webpack:///./src/components/subheaders/index.js"",""webpack:///./src/components/tables/DataTable.js"",""webpack:///./src/components/tables/EditDialog.js"",""webpack:///./src/components/tables/index.js"",""webpack:///./src/components/tables/mixins/body.js"",""webpack:///./src/components/tables/mixins/foot.js"",""webpack:///./src/components/tables/mixins/head.js"",""webpack:///./src/components/tables/mixins/progress.js"",""webpack:///./src/components/tabs/Tabs.js"",""webpack:///./src/components/tabs/TabsBar.js"",""webpack:///./src/components/tabs/TabsContent.js"",""webpack:///./src/components/tabs/TabsItem.js"",""webpack:///./src/components/tabs/index.js"",""webpack:///./src/components/toolbar/Toolbar.js"",""webpack:///./src/components/toolbar/ToolbarItem.js"",""webpack:///./src/components/toolbar/index.js"",""webpack:///./src/components/transitions/_index.js"",""webpack:///./src/directives/badge.js"",""webpack:///./src/directives/click-outside.js"",""webpack:///./src/directives/ripple.js"",""webpack:///./src/directives/tooltip.js"",""webpack:///./src/mixins/translatable.js"",""webpack:///./src/components/buttons/ButtonDropdown.vue"",""webpack:///./src/components/buttons/ButtonToggle.vue"",""webpack:///./src/components/carousel/Carousel.vue"",""webpack:///./src/components/carousel/CarouselItem.vue"",""webpack:///./src/components/expansion-panel/ExpansionPanelContent.vue"",""webpack:///./src/components/pagination/Pagination.vue"",""webpack:///./src/components/parallax/Parallax.vue"",""webpack:///./src/components/progress/ProgressCircular.vue"",""webpack:///./src/components/progress/ProgressLinear.vue"",""webpack:///./src/components/buttons/ButtonDropdown.vue?17fc"",""webpack:///./src/components/buttons/ButtonToggle.vue?1c59"",""webpack:///./src/components/carousel/Carousel.vue?267c"",""webpack:///./src/components/carousel/CarouselItem.vue?c493"",""webpack:///./src/components/expansion-panel/ExpansionPanelContent.vue?a58c"",""webpack:///./src/components/pagination/Pagination.vue?b63c"",""webpack:///./src/components/parallax/Parallax.vue?d8d5"",""webpack:///./src/components/progress/ProgressCircular.vue?6052"",""webpack:///./src/components/progress/ProgressLinear.vue?2179"",""webpack:///./src/components/buttons/ButtonDropdown.vue?f91f"",""webpack:///./src/components/progress/ProgressCircular.vue?ee32"",""webpack:///./src/components/carousel/CarouselItem.vue?bd08"",""webpack:///./src/components/carousel/Carousel.vue?ad88"",""webpack:///./src/components/expansion-panel/ExpansionPanelContent.vue?c1a9"",""webpack:///./src/components/pagination/Pagination.vue?3286"",""webpack:///./src/components/parallax/Parallax.vue?c34d"",""webpack:///./src/components/progress/ProgressLinear.vue?6d55"",""webpack:///./src/components/buttons/ButtonToggle.vue?50db"",""webpack:///./src/index.js""],""names"":[""const"",""let"",""this"",""i"",""length""],""mappings"":""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ACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,2EAA2E,aAAa;AACxF,uBAAuB,8CAA8C,EAAE;AACvE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,yBAAyB,mCAAmC,EAAE;AAC9D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC,qB;;;;;;ACnED,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,CAAC,qB;;;;;;ACtCD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,CAAC,qB;;;;;;AChBD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC,qB;;;;;;AC9CD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH,CAAC,qB;;;;;;ACpCD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC,qB;;;;;;ACzDD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,CAAC,qB;;;;;;AClBD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC,qB;;;;;;AClBD,gBAAgB,mBAAmB,aAAa,0BAA0B;AAC1E;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC,qB;;;;;;;;;;;AC/BD,mBAAO,CAAC,EAAoB,CAAC;;AAEe;AACA;AACd;;AAE9B,SAAS,MAAM,EAAE,GAAG,EAAE;EACpB,MAAM,CAAC,IAAI,CAAC,kEAAU,CAAC,CAAC,OAAO,CAAC,aAAG,EAAI;IACrC,GAAG,CAAC,SAAS,CAAC,IAAE,GAAE,GAAG,CAAE,EAAE,kEAAU,CAAC,GAAG,CAAC,CAAC;GAC1C,CAAC;;EAEF,MAAM,CAAC,IAAI,CAAC,kEAAU,CAAC,CAAC,OAAO,CAAC,aAAG,EAAI;IACrC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,kEAAU,CAAC,GAAG,CAAC,CAAC;GACpC,CAAC;;EAEF,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG;IACvB,IAAI,EAAE,2DAAI;GACX;CACF;;AAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,GAAG,EAAE;EAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;CACvB;;AAED,kDAAe,MAAM"",""file"":""vuetify.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""Vuetify\""] = factory();\n\telse\n\t\troot[\""Vuetify\""] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""/dist/\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 136);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 6a3787d3614c11849fab"",""export function createSimpleFunctional (c, el = 'div') {\n  return {\n    functional: true,\n\n    render: (h, { data, children }) => {\n      data.staticClass = data.staticClass ? `${c} ${data.staticClass}` : c\n\n      return h(el, data, children)\n    }\n  }\n}\n\nexport function createSimpleTransition (name) {\n  return {\n    functional: true,\n\n    render (h, context) {\n      const origin = (context.data.attrs || context.data.props || {}).origin || 'top center 0'\n      context.data = context.data || {}\n      context.data.props = { name }\n      context.data.on = context.data.on || {}\n\n      context.data.on.beforeEnter = el => {\n        el.style.transformOrigin = origin\n        el.style.webkitTransformOrigin = origin\n      }\n\n      return h('transition', context.data, context.children)\n    }\n  }\n}\n\nexport function directiveConfig (binding, defaults = {}) {\n  return Object.assign({},\n    defaults,\n    binding.modifiers,\n    { value: binding.arg },\n    binding.value || {}\n  )\n}\n\nexport function closestParentTag (tag) {\n  let parent = this.$parent\n\n  while (parent) {\n    if (!parent.$options._componentTag) return null\n    if (parent.$options._componentTag === tag) return parent\n\n    parent = parent.$parent\n  }\n\n  return null\n}\n\nexport function addOnceEventListener (el, event, cb) {\n  var once = () => {\n    cb()\n    el.removeEventListener(event, once, false)\n  }\n\n  el.addEventListener(event, once, false)\n}\n\nexport function browserTransform (el, value) {\n  [\n    'transform',\n    'webkitTransform'\n  ].forEach(i => {\n    el.style[i] = value\n  })\n}\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `execAsap` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n//\n// Example:\n// var calculateLayout = function () { ... }\n// window.addEventListner('resize', debounce(calculateLayout, 300)\nexport function debounce (func, threshold, execAsap) {\n  var timeout\n\n  return function debounced () {\n    var obj = this\n    var args = arguments\n\n    function delayed () {\n      if (!execAsap) func.apply(obj, args)\n      timeout = null\n    }\n\n    if (timeout) clearTimeout(timeout)\n    else if (execAsap) func.apply(obj, args)\n\n    timeout = setTimeout(delayed, threshold || 100)\n  }\n}\n\nexport function getObjectValueByPath (obj, path) {\n  // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n  if (!path || path.constructor !== String) return\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n  path = path.replace(/^\\./, '')           // strip a leading dot\n  let a = path.split('.')\n  for (var i = 0, n = a.length; i < n; ++i) {\n    var k = a[i]\n    if (obj.constructor === Object && k in obj) {\n      obj = obj[k]\n    } else {\n      return\n    }\n  }\n  return obj\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/helpers.js"",""export default {\n  props: {\n    dark: {\n      type: Boolean,\n      default: true\n    },\n    light: {\n      type: Boolean,\n      default: false\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/themeable.js"",""export default {\n  data () {\n    return {\n      isActive: !!this.value\n    }\n  },\n\n  props: {\n    value: {\n      required: false\n    }\n  },\n\n  watch: {\n    value (val) {\n      this.isActive = !!val\n    },\n    isActive (val) {\n      this.$emit('input', val)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/toggleable.js"",""module.exports = function normalizeComponent (\n  rawScriptExports,\n  compiledTemplate,\n  scopeId,\n  cssModules\n) {\n  var esModule\n  var scriptExports = rawScriptExports = rawScriptExports || {}\n\n  // ES6 modules interop\n  var type = typeof rawScriptExports.default\n  if (type === 'object' || type === 'function') {\n    esModule = rawScriptExports\n    scriptExports = rawScriptExports.default\n  }\n\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (compiledTemplate) {\n    options.render = compiledTemplate.render\n    options.staticRenderFns = compiledTemplate.staticRenderFns\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = scopeId\n  }\n\n  // inject cssModules\n  if (cssModules) {\n    var computed = options.computed || (options.computed = {})\n    Object.keys(cssModules).forEach(function (key) {\n      var module = cssModules[key]\n      computed[key] = function () { return module }\n    })\n  }\n\n  return {\n    esModule: esModule,\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/component-normalizer.js\n// module id = 3\n// module chunks = 0"",""export default {\n  props: {\n    primary: Boolean,\n    secondary: Boolean,\n    success: Boolean,\n    info: Boolean,\n    warning: Boolean,\n    error: Boolean\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/contextualable.js"",""export default {\n  props: {\n    append: Boolean,\n    disabled: Boolean,\n    exact: Boolean,\n    href: [String, Object],\n    to: [String, Object],\n    nuxt: Boolean,\n    replace: Boolean,\n    ripple: Boolean,\n    router: Boolean,\n    tag: String,\n    target: String\n  },\n\n  methods: {\n    click () {},\n    generateRouteLink () {\n      let exact = this.exact\n      let tag\n      const options = this.to || this.href\n\n      const data = {\n        attrs: {},\n        class: this.classes,\n        props: {},\n        directives: [{\n          name: 'ripple',\n          value: this.ripple || false\n        }]\n      }\n\n      if (!this.exact) {\n        exact = this.href === '/' ||\n          this.to === '/' ||\n          (this.href === Object(this.href) && this.href.path === '/') ||\n          (this.to === Object(this.to) && this.to.path === '/')\n      }\n\n      if (options && this.router) {\n        tag = this.nuxt ? 'nuxt-link' : 'router-link'\n        data.props.to = options\n        data.props.exact = exact\n        data.props.activeClass = this.activeClass\n        data.props.append = this.append\n        data.props.replace = this.replace\n        data.nativeOn = { click: this.click }\n      } else {\n        tag = this.tag || 'a'\n\n        if (tag === 'a') {\n          data.attrs.href = options || 'javascript:;'\n          if (this.target) data.attrs.target = this.target\n        }\n\n        data.on = { click: this.click }\n      }\n\n      return { tag, data }\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/route-link.js"",""import Themeable from './themeable'\n\nexport default {\n  mixins: [Themeable],\n\n  data () {\n    return {\n      errors: [],\n      focused: false,\n      tabFocused: false,\n      lazyValue: this.value\n    }\n  },\n\n  props: {\n    appendIcon: String,\n    appendIconCb: Function,\n    disabled: Boolean,\n    hint: String,\n    hideDetails: Boolean,\n    persistentHint: Boolean,\n    label: String,\n    prependIcon: String,\n    prependIconCb: Function,\n    required: Boolean,\n    rules: {\n      type: Array,\n      default: () => []\n    },\n    tabindex: {\n      default: 0\n    },\n    value: {\n      required: false\n    },\n    placeholder: String\n  },\n\n  computed: {\n    hasError () {\n      return this.errors.length !== 0\n    },\n    inputGroupClasses () {\n      return Object.assign({\n        'input-group': true,\n        'input-group--focused': this.focused,\n        'input-group--dirty': this.isDirty,\n        'input-group--tab-focused': this.tabFocused,\n        'input-group--disabled': this.disabled,\n        'input-group--light': this.light || !this.dark,\n        'input-group--dark': !this.light && this.dark,\n        'input-group--error': this.hasError || this.errors.length > 0,\n        'input-group--append-icon': this.appendIcon,\n        'input-group--prepend-icon': this.prependIcon,\n        'input-group--required': this.required,\n        'input-group--hide-details': this.hideDetails,\n        'input-group--placeholder': !!this.placeholder\n      }, this.classes)\n    },\n    isDirty () {\n      return this.inputValue\n    },\n    modifiers () {\n      const modifiers = {\n        lazy: false,\n        number: false,\n        trim: false\n      }\n\n      if (!this.$vnode.data.directives) {\n        return modifiers\n      }\n\n      const model = this.$vnode.data.directives.find(i => i.name === 'model')\n\n      if (!model) {\n        return modifiers\n      }\n\n      return Object.assign(modifiers, model.modifiers)\n    }\n  },\n\n  watch: {\n    rules () {\n      this.validate()\n    }\n  },\n\n  mounted () {\n    this.validate()\n  },\n\n  methods: {\n    genLabel () {\n      const data = {}\n\n      if (this.id) data.attrs = { for: this.id }\n\n      return this.$createElement('label', data, this.label)\n    },\n    toggle () {},\n    genMessages () {\n      let messages = []\n\n      if ((this.hint &&\n            this.focused ||\n            this.hint &&\n            this.persistentHint) &&\n          this.errors.length === 0\n      ) {\n        messages = [this.genHint()]\n      } else if (this.errors.length) {\n        messages = this.errors.map(i => this.genError(i))\n      }\n\n      return this.$createElement(\n        'transition-group',\n        {\n          'class': 'input-group__messages',\n          props: {\n            tag: 'div',\n            name: 'slide-y-transition'\n          }\n        },\n        messages\n      )\n    },\n    genHint () {\n      return this.$createElement('div', {\n        'class': 'input-group__hint',\n        key: this.hint\n      }, this.hint)\n    },\n    genError (error) {\n      return this.$createElement(\n        'div',\n        {\n          'class': 'input-group__error',\n          key: error\n        },\n        error\n      )\n    },\n    genIcon (type) {\n      const icon = this[`${type}Icon`]\n      const cb = this[`${type}IconCb`]\n      const hasCallback = typeof cb === 'function'\n\n      return this.$createElement(\n        'v-icon',\n        {\n          'class': {\n            [`input-group__${type}-icon`]: true,\n            'input-group__icon-cb': hasCallback\n          },\n          on: {\n            click: e => {\n              hasCallback && cb(e)\n            }\n          }\n        },\n        icon\n      )\n    },\n    genInputGroup (input, data = {}) {\n      const children = []\n      const wrapperChildren = []\n      const detailsChildren = []\n\n      data = Object.assign({}, {\n        'class': this.inputGroupClasses,\n        attrs: {\n          tabindex: this.tabindex\n        },\n        on: {\n          blur: () => (this.tabFocused = false),\n          click: () => (this.tabFocused = false),\n          keyup: e => {\n            if ([9, 16].includes(e.keyCode)) {\n              this.tabFocused = true\n            }\n\n            if (e.keyCode === 13) {\n              this.toggle()\n            }\n          }\n        }\n      }, data)\n\n      if (this.label) {\n        children.push(this.genLabel())\n      }\n\n      wrapperChildren.push(input)\n\n      if (this.prependIcon) {\n        wrapperChildren.unshift(this.genIcon('prepend'))\n      }\n\n      if (this.appendIcon) {\n        wrapperChildren.push(this.genIcon('append'))\n      }\n\n      children.push(\n        this.$createElement('div', {\n          'class': 'input-group__input'\n        }, wrapperChildren)\n      )\n\n      detailsChildren.push(this.genMessages())\n      this.counter && detailsChildren.push(this.genCounter())\n\n      children.push(\n        this.$createElement('div', {\n          'class': 'input-group__details'\n        }, detailsChildren)\n      )\n\n      return this.$createElement('div', data, children)\n    },\n    validate () {\n      this.errors = []\n\n      this.rules.forEach(rule => {\n        const valid = typeof rule === 'function'\n          ? rule(this.value)\n          : rule\n\n        if (valid !== true) {\n          this.errors.push(valid)\n        }\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/input.js"",""export default {\n  data () {\n    return {\n      isBooted: false\n    }\n  },\n\n  watch: {\n    isActive () {\n      this.isBooted = true\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/bootable.js"",""import Contextualable from './contextualable'\nimport Input from './input'\n\nexport default {\n  mixins: [Contextualable, Input],\n\n  model: {\n    prop: 'inputValue',\n    event: 'change'\n  },\n\n  props: {\n    inputValue: [Array, Boolean, String],\n    falseValue: String,\n    trueValue: String\n  },\n\n  computed: {\n    isActive () {\n      if ((Array.isArray(this.inputValue))\n      ) {\n        return this.inputValue.indexOf(this.value) !== -1\n      }\n\n      if (!this.trueValue || !this.falseValue) {\n        return this.value\n          ? this.value === this.inputValue\n          : Boolean(this.inputValue)\n      }\n\n      return this.inputValue === this.trueValue\n    }\n  },\n\n  watch: {\n    indeterminate (val) {\n      this.inputDeterminate = val\n    }\n  },\n\n  methods: {\n    genLabel () {\n      return this.$createElement('label', { on: { click: this.toggle }}, this.label)\n    },\n    toggle () {\n      if (this.disabled) {\n        return\n      }\n\n      let input = this.inputValue\n      if (Array.isArray(input)) {\n        input = input.slice()\n        const i = input.indexOf(this.value)\n\n        if (i === -1) {\n          input.push(this.value)\n        } else {\n          input.splice(i, 1)\n        }\n      } else if (this.trueValue || this.falseValue) {\n        input = input === this.trueValue ? this.falseValue : this.trueValue\n      } else if (this.value) {\n        input = this.value === this.inputValue\n          ? null\n          : this.value\n      } else {\n        input = !input\n      }\n\n      this.$emit('change', input)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/checkbox.js"",""import { addOnceEventListener } from '../util/helpers'\n\nexport default {\n  methods: {\n    enter (el, done) {\n      el.style.overflow = 'hidden'\n      el.style.height = null\n      el.style.display = 'block'\n      const height = `${el.clientHeight}px`\n      el.style.height = 0\n\n      setTimeout(() => {\n        el.style.height = height\n        addOnceEventListener(el, 'transitionend', done)\n      }, 50)\n    },\n    afterEnter (el) {\n      el.style.height = 'auto'\n      el.style.overflow = null\n    },\n    leave (el, done) {\n      el.style.overflow = 'hidden'\n      el.style.height = `${el.clientHeight}px`\n\n      setTimeout(() => (el.style.height = 0), 50)\n\n      addOnceEventListener(el, 'transitionend', done)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/expand-transition.js"",""import { addOnceEventListener } from '../util/helpers'\n\nexport default {\n  data () {\n    return {\n      overlay: null\n    }\n  },\n\n  props: {\n    hideOverlay: Boolean\n  },\n\n  methods: {\n    genOverlay () {\n      if (!this.isActive || this.hideOverlay) return\n\n      const overlay = document.createElement('div')\n      overlay.className = 'overlay'\n      overlay.onclick = () => {\n        if (this.permanet) return\n        else if (!this.persistent) this.isActive = false\n        else if (this.isMobile) this.isActive = false\n      }\n\n      if (this.absolute) overlay.className += ' overlay--absolute'\n\n      this.hideScroll()\n\n      const app = this.$el.closest('[data-app]')\n      app &&\n        app.appendChild(overlay) ||\n        document.body.appendChild(overlay)\n\n      setTimeout(() => {\n        overlay.className += ' overlay--active'\n        this.overlay = overlay\n      }, 0)\n    },\n    removeOverlay () {\n      if (!this.overlay) return\n\n      addOnceEventListener(this.overlay, 'transitionend', () => {\n        this.overlay && this.overlay.remove()\n        this.overlay = null\n        this.showScroll()\n      })\n\n      this.overlay.className = this.overlay.className.replace('overlay--active', '')\n    },\n    hideScroll () {\n      document.documentElement.style.overflowY = 'hidden'\n      document.documentElement.style.paddingRight = '17px'\n    },\n    showScroll () {\n      document.documentElement.style.overflowY = null\n      document.documentElement.style.paddingRight = null\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/overlayable.js"",""export default {\n  data () {\n    return {\n      isSaving: false\n    }\n  },\n\n  props: {\n    actions: Boolean,\n    landscape: Boolean,\n    noTitle: Boolean,\n    scrollable: Boolean,\n    value: {\n      required: true\n    },\n    light: {\n      type: Boolean,\n      default: true\n    },\n    dark: Boolean,\n  },\n\n  methods: {\n    save () {},\n    cancel () {},\n    genSlot () {\n      return this.$scopedSlots.default({\n        save: this.save,\n        cancel: this.cancel\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/picker.js"",""import Alerts from './alerts/index'\nimport App from './app/index'\nimport Avatars from './avatars/index'\nimport Breadcrumbs from './breadcrumbs/index'\nimport Buttons from './buttons/index'\nimport Cards from './cards/index'\nimport Carousel from './carousel/index'\nimport Chips from './chips/index'\nimport DateTime from './pickers/index'\nimport Dialogs from './dialogs/index'\nimport Dividers from './dividers/index'\nimport ExpansionPanel from './expansion-panel/index'\nimport Footer from './footer/index'\nimport Forms from './forms/index'\nimport Grid from './grid/index'\nimport Icons from './icons/index'\nimport Lists from './lists/index'\nimport Menu from './menus/index'\nimport NavigationDrawer from './navigation-drawer/index'\nimport Toolbar from './toolbar/index'\nimport Pagination from './pagination/index'\nimport Parallax from './parallax/index'\nimport Progress from './progress/index'\nimport Select from './selects/index'\nimport Slider from './sliders/index'\nimport Subheader from './subheaders/index'\nimport Stepper from './steppers/index'\nimport Tables from './tables/index'\nimport Tabs from './tabs/index'\nimport Transitions from './transitions/_index'\nimport Snackbar from './snackbars/index'\nimport BottomNav from './bottom-nav/index'\n\nexport default Object.assign({},\n  Alerts,\n  App,\n  Avatars,\n  Breadcrumbs,\n  Buttons,\n  Cards,\n  Carousel,\n  Chips,\n  DateTime,\n  Dialogs,\n  Dividers,\n  ExpansionPanel,\n  Footer,\n  Forms,\n  Grid,\n  Icons,\n  Lists,\n  Menu,\n  NavigationDrawer,\n  Toolbar,\n  Pagination,\n  Parallax,\n  Progress,\n  Select,\n  Slider,\n  Subheader,\n  Stepper,\n  Tables,\n  Tabs,\n  Transitions,\n  Snackbar,\n  BottomNav\n)\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/_index.js"",""import Badge from './badge'\nimport ClickOutside from './click-outside'\nimport Ripple from './ripple'\nimport Tooltip from './tooltip'\n\nexport default {\n  Badge,\n  ClickOutside,\n  Ripple,\n  Tooltip\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/_index.js"",""function load (cb, i = 0) {\n  if (i > 4) return\n\n  if (document.readyState === 'complete') {\n    return setTimeout(cb, 0)\n  }\n\n  if (document.readyState === 'interactive') {\n    return setTimeout(() => load(cb, i + 1), 150)\n  }\n\n  document.addEventListener('DOMContentLoaded', cb)\n}\n\nexport default load\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/load.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/main.styl\n// module id = 15\n// module chunks = 0"",""import Toggleable from '../../mixins/toggleable'\nimport Contextualable from '../../mixins/contextualable'\n\nexport default {\n  name: 'alert',\n\n  mixins: [Contextualable, Toggleable],\n\n  props: {\n    dismissible: Boolean,\n    hideIcon: Boolean,\n    icon: String\n  },\n\n  computed: {\n    classes () {\n      return {\n        'alert': true,\n        'alert--dismissible': this.dismissible,\n        'alert--error': this.error,\n        'alert--info': this.info,\n        'alert--success': this.success,\n        'alert--warning': this.warning,\n        'alert--primary': this.primary,\n        'alert--secondary': this.secondary\n      }\n    },\n\n    mdIcon () {\n      switch (true) {\n        case Boolean(this.icon):\n          return this.icon\n        case this.error:\n          return 'warning'\n        case this.info:\n          return 'info'\n        case this.success:\n          return 'check_circle'\n        case this.warning:\n          return 'priority_high'\n      }\n    }\n  },\n\n  render (h) {\n    const children = [h('div', this.$slots.default)]\n\n    !this.hideIcon && this.mdIcon && children.unshift(h('v-icon', {\n      'class': 'alert__icon',\n      props: { large: true }\n    }, this.mdIcon))\n\n    if (this.dismissible) {\n      children.push(h('a', {\n        'class': 'alert__dismissible',\n        domProps: { href: 'javascript:;' },\n        on: { click: () => (this.$emit('input', false)) }\n      }, [h('v-icon', { props: { right: true, large: true }}, 'cancel')]))\n    }\n\n    return h('div', {\n      'class': this.classes,\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }]\n    }, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/alerts/Alert.js"",""import Alert from './Alert'\n\nexport default {\n  Alert\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/alerts/index.js"",""export default {\n  functional: true,\n\n  props: {\n    light: {\n      type: Boolean,\n      default: true\n    },\n    dark: Boolean,\n    id: {\n      type: String,\n      default: 'app'\n    }\n  },\n\n  render (h, { props, data, children }) {\n    data.staticClass = data.staticClass ? `application ${data.staticClass} ` : 'application '\n\n    const classes = {\n      'application--dark': props.dark,\n      'application--light': props.light && !props.dark\n    }\n\n    data.staticClass += Object.keys(classes).filter(k => classes[k]).join(' ')\n\n    const toolbar = children.find(c => c.tag === 'nav')\n    const footer = children.find(c => c.tag === 'footer')\n\n    if (toolbar) data.staticClass += ' application--toolbar'\n    if (footer) {\n      data.staticClass += ' application--footer'\n\n      if (footer.data.staticClass.indexOf('--fixed') !== -1 ||\n        footer.data.staticClass.indexOf('--absolute') !== -1\n      ) data.staticClass += ' application--footer-fixed'\n    }\n\n    data.attrs = { 'data-app': true }\n    data.domProps = { id: props.id }\n\n    return h('div', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/app/App.js"",""import { createSimpleFunctional } from '../../util/helpers'\nimport App from './App'\n\nconst AppBar = createSimpleFunctional('app__bar')\n\nexport default {\n  App,\n  AppBar\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/app/index.js"",""import { createSimpleFunctional } from '../../util/helpers'\n\nconst Avatar = createSimpleFunctional('avatar')\n\nexport default {\n  Avatar\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/avatars/index.js"",""  export default {\n    functional: true,\n\n    props: {\n      absolute: Boolean,\n      shift: Boolean,\n      value: { required: false }\n    },\n\n    render (h, { data, props, children }) {\n      data.staticClass = data.staticClass ? `bottom-nav ${data.staticClass}` : 'bottom-nav'\n\n      if (props.absolute) data.staticClass += ' bottom-nav--absolute'\n      if (props.shift) data.staticClass += ' bottom-nav--shift'\n      if (props.value) data.staticClass += ' bottom-nav--active'\n\n      return h('div', data, children)\n    }\n  }\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/bottom-nav/BottomNav.js"",""import BottomNav from './BottomNav'\n\nexport default {\n  BottomNav\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/bottom-nav/index.js"",""export default {\n  name: 'breadcrumbs',\n\n  provide () {\n    return {\n      divider: this.divider\n    }\n  },\n\n  props: {\n    divider: {\n      type: String,\n      default: '/'\n    },\n    icons: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'breadcrumbs': true,\n        'breadcrumbs--with-icons': this.icons\n      }\n    }\n  },\n\n  render (h) {\n    return h('ul', {\n      'class': this.classes,\n      props: { items: this.items }\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/breadcrumbs/Breadcrumbs.js"",""import GenerateRouteLink from '../../mixins/route-link'\n\nexport default {\n  name: 'breadcrumbs-item',\n\n  mixins: [GenerateRouteLink],\n\n  inject: ['divider'],\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'breadcrumbs__item--active'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'breadcrumbs__item': true,\n        'breadcrumbs__item--disabled': this.disabled\n      }\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n\n    return h('li', {\n      attrs: { 'data-divider': this.divider }\n    }, [\n      h(tag, data, this.$slots.default)\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/breadcrumbs/BreadcrumbsItem.js"",""import Breadcrumbs from './Breadcrumbs'\nimport BreadcrumbsItem from './BreadcrumbsItem'\n\nexport default {\n  Breadcrumbs,\n  BreadcrumbsItem\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/breadcrumbs/index.js"",""import Contextualable from '../../mixins/contextualable'\nimport Toggleable from '../../mixins/toggleable'\nimport GenerateRouteLink from '../../mixins/route-link'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'btn',\n\n  mixins: [Contextualable, GenerateRouteLink, Toggleable, Themeable],\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'btn--active'\n    },\n    block: Boolean,\n    default: Boolean,\n    flat: Boolean,\n    floating: Boolean,\n    icon: Boolean,\n    large: Boolean,\n    loading: Boolean,\n    outline: Boolean,\n    ripple: {\n      type: [Boolean, Object],\n      default: true\n    },\n    round: Boolean,\n    small: Boolean,\n    tag: {\n      type: String,\n      default: 'button'\n    },\n    type: {\n      type: String,\n      default: 'button'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'btn': true,\n        'btn--active': this.isActive,\n        'btn--block': this.block,\n        'btn--dark': !this.light && this.dark,\n        'btn--default': this.default,\n        'btn--disabled': this.disabled,\n        'btn--flat': this.flat,\n        'btn--floating': this.floating,\n        'btn--icon': this.icon,\n        'btn--large': this.large,\n        'btn--light': this.light || !this.dark,\n        'btn--loader': this.loading,\n        'btn--outline': this.outline,\n        'btn--raised': !this.flat,\n        'btn--round': this.round,\n        'btn--small': this.small,\n        'primary': this.primary && !this.outline,\n        'secondary': this.secondary && !this.outline,\n        'success': this.success && !this.outline,\n        'info': this.info && !this.outline,\n        'warning': this.warning && !this.outline,\n        'error': this.error && !this.outline,\n        'primary--text': this.primary && (this.outline || this.flat),\n        'secondary--text': this.secondary && (this.outline || this.flat),\n        'success--text': this.success && (this.outline || this.flat),\n        'info--text': this.info && (this.outline || this.flat),\n        'warning--text': this.warning && (this.outline || this.flat),\n        'error--text': this.error && (this.outline || this.flat)\n      }\n    }\n  },\n\n  methods: {\n    genContent (h) {\n      return h('span', { 'class': 'btn__content' }, [this.$slots.default])\n    },\n    genLoader (h) {\n      const children = []\n\n      if (!this.$slots.loader) {\n        children.push(h('v-progress-circular', {\n          props: {\n            indeterminate: true,\n            size: 26\n          }\n        }))\n      } else {\n        children.push(this.$slots.loader)\n      }\n\n      return h('span', { 'class': 'btn__loading' }, children)\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n    const children = []\n\n    if (tag === 'button') {\n      data.attrs.type = this.type\n    }\n\n    children.push(this.genContent(h))\n\n    if (this.loading) {\n      children.push(this.genLoader(h))\n    }\n\n    return h(tag, data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/buttons/Button.js"",""import Contextualable from '../../mixins/contextualable'\nimport Toggleable from '../../mixins/toggleable'\nimport GenerateRouteLink from '../../mixins/route-link'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'fab',\n\n  mixins: [Contextualable, GenerateRouteLink, Toggleable, Themeable],\n\n  data: () => ({\n    changeTimeout: {},\n    isChanging: false\n  }),\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'fab--active'\n    },\n    default: Boolean,\n    flat: Boolean,\n    lateral: Boolean,\n    loading: Boolean,\n    outline: Boolean,\n    hidden: Boolean,\n    ripple: {\n      type: [Boolean, Object],\n      default: true\n    },\n    mini: Boolean,\n    tag: {\n      type: String,\n      default: 'button'\n    },\n    type: {\n      type: String,\n      default: 'button'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'fab': true,\n        'fab--dark': this.dark && !this.light,\n        'fab--light': this.light,\n        'fab--small': this.mini,\n        'fab--hidden': this.hidden,\n        'fab--lateral': this.lateral,\n        'fab--is-changing': this.isChanging,\n        'primary': this.primary && !this.outline,\n        'secondary': this.secondary && !this.outline,\n        'success': this.success && !this.outline,\n        'info': this.info && !this.outline,\n        'warning': this.warning && !this.outline,\n        'error': this.error && !this.outline,\n        'primary--text': this.primary && (this.outline || this.flat),\n        'secondary--text': this.secondary && (this.outline || this.flat),\n        'success--text': this.success && (this.outline || this.flat),\n        'info--text': this.info && (this.outline || this.flat),\n        'warning--text': this.warning && (this.outline || this.flat),\n        'error--text': this.error && (this.outline || this.flat)\n      }\n    }\n  },\n\n  methods: {\n    changeAction () {\n      this.isChanging = true\n      clearTimeout(this.changeTimeout)\n      this.changeTimeout = setTimeout(() => (this.isChanging = false), 600)\n    },\n    genContent (h) {\n      return h('span', { 'class': 'fab__content' }, [this.$slots.default])\n    },\n    genLoader (h) {\n      const children = []\n\n      if (!this.$slots.loader) {\n        children.push(h('v-progress-circular', {\n          props: {\n            indeterminate: true,\n            size: 26\n          }\n        }))\n      } else {\n        children.push(this.$slots.loader)\n      }\n\n      return h('span', { 'class': 'fab__loading' }, children)\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n    const children = []\n\n    if (tag === 'button') {\n      data.attrs.type = this.type\n    }\n\n    children.push(this.genContent(h))\n\n    if (this.loading) {\n      children.push(this.genLoader(h))\n    }\n\n    return h(tag, data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/buttons/FAB.js"",""import Btn from './Button'\nimport BtnDropdown from './ButtonDropdown.vue'\nimport BtnToggle from './ButtonToggle.vue'\nimport Fab from './FAB'\n\nexport default {\n  Btn,\n  BtnDropdown,\n  BtnToggle,\n  Fab\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/buttons/index.js"",""export default {\n  functional: true,\n\n  name: 'card',\n\n  props: {\n    flat: Boolean,\n    height: {\n      type: String,\n      default: 'auto'\n    },\n    horizontal: Boolean,\n    img: String,\n    hover: Boolean,\n    raised: Boolean\n  },\n\n  render (h, { data, props, children, style }) {\n    data.staticClass = data.staticClass ? `card ${data.staticClass}` : 'card'\n    data.style = style || {}\n    data.style.height = props.height\n\n    if (props.horizontal) data.staticClass += ' card--horizontal'\n    if (props.hover) data.staticClass += ' card--hover'\n    if (props.raised) data.staticClass += ' card--raised'\n    if (props.flat) data.staticClass += ' card--flat'\n\n    if (props.img) {\n      data.style.background = `url(${props.img}) center center / cover no-repeat`\n    }\n\n    return h('div', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/cards/Card.js"",""export default {\n  functional: true,\n\n  props: {\n    actions: Boolean,\n    height: {\n      type: String,\n      default: 'auto'\n    },\n    img: String,\n    stackedActions: Boolean\n  },\n\n  render (h, { props, data, children }) {\n    data.staticClass = data.staticClass ? `card__row ${data.staticClass}` : 'card__row'\n    data.style = data.style || {}\n    data.style.height = props.height\n\n    if (props.img) data.style.background = `url(${props.img}) center center / cover no-repeat`\n    if (props.actions) {\n      data.ref = 'actions'\n      data.staticClass += ' card__row--actions'\n    }\n\n    return h('div', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/cards/CardRow.js"",""import Card from './Card'\nimport CardRow from './CardRow'\nimport {\n  createSimpleFunctional\n} from '../../util/helpers'\n\nconst CardColumn = createSimpleFunctional('card__column')\nconst CardText = createSimpleFunctional('card__text')\nconst CardTitle = createSimpleFunctional('card__title')\n\nexport default {\n  Card,\n  CardRow,\n  CardColumn,\n  CardText,\n  CardTitle\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/cards/index.js"",""import Carousel from './Carousel.vue'\nimport CarouselItem from './CarouselItem.vue'\n\nexport default {\n  Carousel,\n  CarouselItem\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/carousel/index.js"",""import Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'chip',\n\n  mixins: [Toggleable],\n\n  props: {\n    close: Boolean,\n    label: Boolean,\n    outline: Boolean,\n    small: Boolean,\n    value: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'chip': true,\n        'chip--label': this.label,\n        'chip--outline': this.outline,\n        'chip--small': this.small,\n        'chip--removable': this.close\n      }\n    }\n  },\n\n  render (h) {\n    const children = [this.$slots.default]\n    const data = {\n      'class': this.classes,\n      attrs: {\n        tabindex: -1\n      },\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }]\n    }\n\n    if (this.close) {\n      const icon = h('v-icon', { props: { right: true }}, 'cancel')\n\n      children.push(h('a', {\n        'class': 'chip__close',\n        domProps: { href: 'javascript:;' },\n        on: {\n          click: e => {\n            e.preventDefault()\n\n            this.$emit('input', false)\n          }\n        }\n      }, [icon]))\n    }\n\n    return h('span', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/chips/Chip.js"",""import Chip from './Chip'\n\nexport default {\n  Chip\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/chips/index.js"",""import Bootable from '../../mixins/bootable'\nimport Overlayable from '../../mixins/overlayable'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'dialog',\n\n  mixins: [Bootable, Overlayable, Toggleable],\n\n  data: () => ({\n    app: null\n  }),\n\n  props: {\n    disabled: Boolean,\n    persistent: Boolean,\n    fullscreen: Boolean,\n    lazy: Boolean,\n    origin: {\n      type: String,\n      default: 'center center'\n    },\n    width: {\n      type: [String, Number],\n      default: 290\n    },\n    scrollable: Boolean,\n    transition: {\n      type: [String, Boolean],\n      default: 'v-dialog-transition'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'dialog': true,\n        'dialog--active': this.isActive,\n        'dialog--persistent': this.persistent,\n        'dialog--fullscreen': this.fullscreen,\n        'dialog--stacked-actions': this.stackedActions && !this.fullscreen,\n        'dialog--scrollable': this.scrollable\n      }\n    },\n    computedTransition () {\n      return !this.transition\n        ? 'transition'\n        : this.transition\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      if (val) {\n        !this.fullscreen && !this.hideOverlay && this.genOverlay()\n        this.fullscreen && this.hideScroll()\n      } else {\n        this.removeOverlay()\n      }\n    }\n  },\n\n  mounted () {\n    this.app = document.querySelector('[data-app]')\n    this.$nextTick(() => {\n      this.app && this.app.appendChild(this.$refs.content)\n    })\n  },\n\n  beforeDestroy () {\n    this.app &&\n      this.app.contains(this.$refs.content) &&\n      this.app.removeChild(this.$refs.content)\n    },\n\n  methods: {\n    closeConditional (e) {\n      // close dialog if !persistent and clicked outside\n      return !this.persistent\n    }\n  },\n\n  render (h) {\n    const children = []\n    const data = {\n      'class': this.classes,\n      ref: 'dialog',\n      directives: [\n        { name: 'click-outside', value: this.closeConditional },\n        { name: 'show', value: this.isActive }\n      ]\n    }\n\n    if (!this.fullscreen) {\n      data.style = {\n        width: isNaN(this.width) ? this.width : `${this.width}px`\n      }\n    }\n\n    if (this.$slots.activator) {\n      children.push(h('div', {\n        'class': 'dialog__activator',\n        on: {\n          click: e => {\n            e.stopPropagation()\n            if (!this.disabled) this.isActive = !this.isActive\n          }\n        }\n      }, [this.$slots.activator]))\n    }\n\n    const dialog = h(this.computedTransition, {\n      props: { origin: this.origin }\n    }, [h('div', data, [this.$slots.default])])\n\n    children.push(h('div', {\n      'class': 'dialog__content',\n      ref: 'content'\n    }, [dialog]))\n\n    return h('div', {\n      'class': 'dialog__container'\n    }, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/dialogs/Dialog.js"",""import Dialog from './Dialog'\n\nexport default {\n  Dialog\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/dialogs/index.js"",""const Divider = {\n  functional: true,\n\n  props: {\n    dark: Boolean,\n    inset: Boolean,\n    light: Boolean\n  },\n\n  render (h, { props, data, children }) {\n    data.staticClass = data.staticClass ? `divider ${data.staticClass}` : 'divider'\n\n    if (props.inset) data.staticClass += ' divider--inset'\n    if (props.light) data.staticClass += ' divider--light'\n    if (props.dark) data.staticClass += ' divider--dark'\n\n    return h('hr', data)\n  }\n}\n\nexport default {\n  Divider\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/dividers/index.js"",""export default {\n  name: 'expansion-panel',\n\n  props: {\n    expand: Boolean\n  },\n\n  computed: {\n    params () {\n      return {\n        expand: this.expand\n      }\n    }\n  },\n\n  render (h) {\n    return h('ul', {\n      'class': 'expansion-panel'\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/expansion-panel/ExpansionPanel.js"",""import ExpansionPanel from './ExpansionPanel'\nimport ExpansionPanelContent from './ExpansionPanelContent.vue'\n\nexport default {\n  ExpansionPanel,\n  ExpansionPanelContent\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/expansion-panel/index.js"",""const Footer = {\n  functional: true,\n\n  props: {\n    absolute: Boolean,\n    fixed: Boolean\n  },\n\n  render (h, { data, props, children }) {\n    data.staticClass = data.staticClass ? `footer ${data.staticClass}` : 'footer'\n\n    if (props.absolute) data.staticClass += ' footer--absolute'\n    if (props.fixed) data.staticClass += ' footer--fixed'\n\n    return h('footer', data, children)\n  }\n}\n\nexport default {\n  Footer\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/footer/index.js"",""import Checkbox from '../../mixins/checkbox'\n\nexport default {\n  name: 'checkbox',\n\n  mixins: [Checkbox],\n\n  data () {\n    return {\n      inputDeterminate: this.indeterminate\n    }\n  },\n\n  props: {\n    indeterminate: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'checkbox': true,\n        'input-group--selection-controls': true,\n        'input-group--active': this.isActive,\n        'primary--text': this.primary,\n        'secondary--text': this.secondary,\n        'error--text': this.error,\n        'success--text': this.success,\n        'info--text': this.info,\n        'warning--text': this.warning\n      }\n    },\n    icon () {\n      if (this.inputDeterminate) {\n        return 'indeterminate_check_box'\n      } else if (this.isActive) {\n        return 'check_box'\n      } else {\n        return 'check_box_outline_blank'\n      }\n    }\n  },\n\n  render (h) {\n    const transition = h('v-fade-transition', [\n      h('v-icon', {\n        'class': {\n          'icon--checkbox': this.icon === 'check_box'\n        },\n        key: this.icon\n      }, this.icon)\n    ])\n\n    const ripple = h('div', {\n      'class': 'input-group--selection-controls__ripple',\n      on: { click: this.toggle },\n      directives: [{\n        name: 'ripple',\n        value: { center: true }\n      }]\n    })\n\n    return this.genInputGroup([transition, ripple])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/forms/Checkbox.js"",""import Contextualable from '../../mixins/contextualable'\nimport Input from '../../mixins/input'\n\nexport default {\n  name: 'radio',\n\n  mixins: [Contextualable, Input],\n\n  model: {\n    prop: 'inputValue',\n    event: 'change'\n  },\n\n  props: {\n    inputValue: [String, Number]\n  },\n\n  computed: {\n    isActive () {\n      return this.inputValue === this.value\n    },\n    classes () {\n      return {\n        'radio': true,\n        'input-group--selection-controls': true,\n        'input-group--active': this.isActive,\n        'primary--text': this.primary,\n        'secondary--text': this.secondary,\n        'error--text': this.error,\n        'success--text': this.success,\n        'info--text': this.info,\n        'warning--text': this.warning\n      }\n    },\n\n    icon () {\n      return this.isActive ? 'radio_button_checked' : 'radio_button_unchecked'\n    }\n  },\n\n  methods: {\n    genLabel () {\n      return this.$createElement('label', { on: { click: this.toggle }}, this.label)\n    },\n    toggle () {\n      if (!this.disabled) {\n        this.$emit('change', this.value)\n      }\n    }\n  },\n\n  render (h) {\n    const transition = h('v-fade-transition', {}, [\n      h('v-icon', {\n        'class': {\n          'icon--radio': this.isActive\n        },\n        key: this.icon\n      }, this.icon)\n    ])\n\n    const ripple = h('div', {\n      'class': 'input-group--selection-controls__ripple',\n      on: { click: this.toggle },\n      directives: [\n        {\n          name: 'ripple',\n          value: { center: true }\n        }\n      ]\n    })\n\n    return this.genInputGroup([transition, ripple])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/forms/Radio.js"",""import Checkbox from '../../mixins/checkbox'\n\nexport default {\n  name: 'switch',\n\n  mixins: [Checkbox],\n\n  computed: {\n    classes () {\n      return {\n        'input-group--selection-controls switch': true\n      }\n    },\n    rippleClasses () {\n      return {\n        'input-group--selection-controls__ripple': true,\n        'input-group--selection-controls__ripple--active': this.isActive\n      }\n    },\n    containerClasses () {\n      return {\n        'input-group--selection-controls__container': true,\n        'input-group--selection-controls__container--light': this.light,\n        'input-group--selection-controls__container--dark': this.dark,\n        'input-group--selection-controls__container--disabled': this.disabled,\n        'primary--text': this.primary,\n        'secondary--text': this.secondary,\n        'error--text': this.error,\n        'success--text': this.success,\n        'info--text': this.info,\n        'warning--text': this.warning\n      }\n    },\n    toggleClasses () {\n      return {\n        'input-group--selection-controls__toggle': true,\n        'input-group--selection-controls__toggle--active': this.isActive\n      }\n    }\n  },\n\n  render (h) {\n    const ripple = h('div', {\n      'class': this.rippleClasses,\n      on: { click: this.toggle },\n      directives: [\n        {\n          name: 'ripple',\n          value: { center: true }\n        }\n      ]\n    })\n\n    const container = h('div', {\n      'class': this.containerClasses\n    }, [\n      h('div', { 'class': this.toggleClasses }),\n      ripple\n    ])\n\n    return this.genInputGroup([\n      container,\n      h('label', { on: { click: this.toggle }}, this.label)\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/forms/Switch.js"",""import Input from '../../mixins/input'\n\nexport default {\n  name: 'text-field',\n\n  mixins: [Input],\n\n  data () {\n    return {\n      hasFocused: false,\n      inputHeight: null\n    }\n  },\n\n  props: {\n    autofocus: Boolean,\n    autoGrow: Boolean,\n    counter: Boolean,\n    fullWidth: Boolean,\n    id: String,\n    name: String,\n    maxlength: [Number, String],\n    max: [Number, String],\n    min: [Number, String],\n    step: [Number, String],\n    multiLine: Boolean,\n    prefix: String,\n    readonly: Boolean,\n    rows: {\n      default: 5\n    },\n    singleLine: Boolean,\n    suffix: String,\n    type: {\n      type: String,\n      default: 'text'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'input-group--text-field': true,\n        'input-group--single-line': this.singleLine,\n        'input-group--multi-line': this.multiLine,\n        'input-group--full-width': this.fullWidth\n      }\n    },\n    hasError () {\n      return this.errors.length !== 0 ||\n        !this.counterIsValid() ||\n        !this.validateIsValid()\n    },\n    count () {\n      const inputLength = (this.inputValue && this.inputValue.toString() || '').length\n      let min = inputLength\n\n      if (this.counterMin !== 0 && inputLength < this.counterMin) {\n        min = this.counterMin\n      }\n\n      return `${min} / ${this.counterMax}`\n    },\n    counterMin () {\n      const parsedMin = Number.parseInt(this.min, 10)\n      return Number.isNaN(parsedMin) ? 0 : parsedMin\n    },\n    counterMax () {\n      const parsedMax = Number.parseInt(this.max, 10)\n      return Number.isNaN(parsedMax) ? 25 : parsedMax\n    },\n    inputValue: {\n      get () {\n        return this.value\n      },\n      set (val) {\n        if (this.modifiers.trim) {\n          val = val.trim()\n        }\n\n        if (this.modifiers.number) {\n          val = Number(val)\n        }\n\n        if (!this.modifiers.lazy) {\n          this.$emit('input', val)\n        }\n\n        this.lazyValue = val\n      }\n    },\n    isDirty () {\n      return this.lazyValue !== null &&\n        typeof this.lazyValue !== 'undefined' &&\n        this.lazyValue.toString().length > 0\n    }\n  },\n\n  watch: {\n    focused (val) {\n      this.hasFocused = true\n\n      !val && this.$emit('change', this.lazyValue)\n    },\n    value () {\n      this.lazyValue = this.value\n      this.validate()\n      this.multiLine && this.autoGrow && this.calculateInputHeight()\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(() => {\n      this.multiLine && this.autoGrow && this.calculateInputHeight()\n      this.autofocus && this.focus()\n    })\n  },\n\n  methods: {\n    calculateInputHeight () {\n      const height = this.$refs.input.scrollHeight\n      const minHeight = this.rows * 24\n      this.inputHeight = height < minHeight ? minHeight : height\n    },\n    onInput (e) {\n      this.inputValue = e.target.value\n      this.multiLine && this.autoGrow && this.calculateInputHeight()\n    },\n    blur (e) {\n      this.validate()\n      this.$nextTick(() => (this.focused = false))\n      this.$emit('blur', e)\n    },\n    focus (e) {\n      this.focused = true\n      this.$refs.input.focus()\n      this.$emit('focus', e)\n    },\n    genCounter () {\n      return this.$createElement('div', {\n        'class': {\n          'input-group__counter': true,\n          'input-group__counter--error': !this.counterIsValid()\n        }\n      }, this.count)\n    },\n    genInput () {\n      const tag = this.multiLine ? 'textarea' : 'input'\n\n      const data = {\n        style: {\n          'height': this.inputHeight && `${this.inputHeight}px`\n        },\n        domProps: {\n          disabled: this.disabled,\n          required: this.required,\n          value: this.lazyValue,\n          autofucus: this.autofocus\n        },\n        attrs: {\n          tabindex: this.tabindex,\n          readonly: this.readonly\n        },\n        on: {\n          blur: this.blur,\n          input: this.onInput,\n          focus: this.focus\n        },\n        ref: 'input'\n      }\n\n      if (this.placeholder) data.domProps.placeholder = this.placeholder\n      if (this.autocomplete) data.domProps.autocomplete = true\n      if (this.name) data.attrs.name = this.name\n      if (this.maxlength) data.attrs.maxlength = this.maxlength\n      if (this.id) data.domProps.id = this.id\n      if (this.step) data.attrs.step = this.step\n      if (!this.counter) {\n        if (this.max) data.attrs.max = this.max\n        if (this.min) data.attrs.min = this.min\n      }\n\n      if (this.multiLine) {\n        data.domProps.rows = this.rows\n      } else {\n        data.domProps.type = this.type\n      }\n\n      const children = [this.$createElement(tag, data)]\n\n      this.prefix && children.unshift(this.genFix('prefix'))\n      this.suffix && children.push(this.genFix('suffix'))\n\n      return children\n    },\n    genFix (type) {\n      return this.$createElement('span', {\n        'class': `input-group--text-field__${type}`\n      }, this[type])\n    },\n    counterIsValid: function counterIsValid () {\n      const val = (this.inputValue && this.inputValue.toString() || '')\n\n      return (!this.counter ||\n        (val.length >= this.counterMin && val.length <= this.counterMax)\n      )\n    },\n    validateIsValid () {\n      return (!this.required ||\n        (this.required &&\n          this.isDirty) ||\n        !this.hasFocused ||\n        (this.hasFocused && this.focused))\n    }\n  },\n\n  render () {\n    return this.genInputGroup(this.genInput(), { attrs: { tabindex: -1 }})\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/forms/TextField.js"",""import Checkbox from './Checkbox'\nimport Radio from './Radio'\nimport Switch from './Switch'\nimport TextField from './TextField'\n\nexport default {\n  Checkbox,\n  Radio,\n  Switch,\n  TextField\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/forms/index.js"",""import { createSimpleFunctional } from '../../util/helpers'\n\nconst Flex = {\n  functional: true,\n\n  render: (h, { data, children }) => {\n    data.staticClass = data.staticClass ? `flex ${data.staticClass}` : 'flex'\n    data.staticClass += ` ${Object.keys(data.attrs).join(' ')}`\n    delete data.attrs\n\n    return h('div', data, children)\n  }\n}\n\nconst Layout = {\n  functional: true,\n\n  render: (h, { data, children }) => {\n    data.staticClass = data.staticClass ? `layout ${data.staticClass}` : 'layout'\n\n    if (data.attrs) {\n      data.staticClass += ` ${Object.keys(data.attrs).join(' ')}`\n      delete data.attrs\n    }\n\n    return h('div', data, children)\n  }\n}\n\nconst Container = {\n  functional: true,\n\n  props: {\n    fluid: Boolean\n  },\n\n  render (h, { props, data, children }) {\n    data.staticClass = data.staticClass ? `container ${data.staticClass}` : 'container'\n\n    if (props.fluid) data.staticClass += ' container--fluid'\n\n    return h('div', data, children)\n  }\n}\n\nconst Spacer = createSimpleFunctional('spacer')\n\nexport default {\n  Flex,\n  Container,\n  Spacer,\n  Layout\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/grid/index.js"",""import Themeable from '../../mixins/themeable'\n\nexport default {\n  functional: true,\n\n  mixins: [Themeable],\n\n  props: {\n    fa: Boolean,\n    large: Boolean,\n    left: Boolean,\n    medium: Boolean,\n    right: Boolean,\n    xLarge: Boolean\n  },\n\n  render (h, { props, data, children }) {\n    const icon = props.fa ? 'fa' : 'material-icons'\n    data.staticClass = data.staticClass ? `${icon} icon ${data.staticClass} ` : `${icon} icon `\n\n    const classes = {\n      'icon--dark': !props.light || props.dark,\n      'icon--large': props.large,\n      'icon--left': props.left,\n      'icon--light': props.light || !props.dark,\n      'icon--medium': props.medium,\n      'icon--right': props.right,\n      'icon--x-large': props.xLarge\n    }\n\n    data.staticClass += Object.keys(classes).filter(k => classes[k]).join(' ')\n\n    if (props.fa) {\n      const text = children.pop().text\n\n      if (text.indexOf(' ') === -1) data.staticClass += ` fa-${text}`\n      else data.staticClass += ` ${text.split(' ').join('fa- ')}`\n    }\n\n    return h('i', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/icons/Icon.js"",""import Icon from './Icon'\n\nexport default {\n  Icon\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/icons/index.js"",""export default {\n  name: 'list',\n\n  data () {\n    return {\n      uid: null,\n      groups: []\n    }\n  },\n\n  props: {\n    dense: Boolean,\n    subheader: Boolean,\n    threeLine: Boolean,\n    twoLine: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'list': true,\n        'list--two-line': this.twoLine,\n        'list--dense': this.dense,\n        'list--three-line': this.threeLine,\n        'list--subheader': this.subheader\n      }\n    }\n  },\n\n  watch: {\n    uid () {\n      this.$children.filter(i => i.$options._componentTag === 'v-list-group').forEach(i => i.toggle(this.uid))\n    }\n  },\n\n  methods: {\n    listClick (uid, force) {\n      if (force) {\n        this.uid = uid\n      } else {\n        this.uid = this.uid === uid ? null : uid\n      }\n    },\n\n    listClose (uid) {\n      if (this.uid === uid) {\n        this.uid = null\n      }\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': this.classes,\n      attrs: { 'data-uid': this._uid }\n    }\n\n    return h('ul', data, [this.$slots.default])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/lists/List.js"",""import { closestParentTag } from '../../util/helpers'\nimport Expand from '../../mixins/expand-transition'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'list-group',\n\n  mixins: [Expand, Toggleable],\n\n  data () {\n    return {\n      isBooted: this.value,\n      height: 0\n    }\n  },\n\n  props: {\n    group: String,\n    lazy: Boolean,\n    noAction: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'list--group__header': true,\n        'list--group__header--active': this.isActive,\n        'list--group__header--no-action': this.noAction\n      }\n    },\n    list () {\n      return closestParentTag.call(this, 'v-list')\n    },\n    styles () {\n      return {\n        height: `${this.height}px`\n      }\n    }\n  },\n\n  watch: {\n    isActive () {\n      this.isBooted = true\n\n      if (!this.isActive) {\n        this.list.listClose(this._uid)\n      }\n    },\n    '$route' (to) {\n      const isActive = this.matchRoute(to.path)\n\n      if (this.group) {\n        if (isActive && this.isActive !== isActive) {\n          this.list.listClick(this._uid)\n        }\n        this.isActive = isActive\n      }\n    }\n  },\n\n  mounted () {\n    if (this.group) {\n      this.isActive = this.matchRoute(this.$route.path)\n    }\n\n    if (this.isActive) {\n      this.list.listClick(this._uid)\n    }\n\n    this.height = this.$refs.group.scrollHeight\n  },\n\n  methods: {\n    click () {\n      if (!this.$refs.item.querySelector('.list__tile--disabled')) {\n        this.list.listClick(this._uid)\n      }\n    },\n    toggle (uid) {\n      this.isActive = this._uid === uid\n    },\n    matchRoute (to) {\n      if (!this.group) return false\n      return to.match(this.group) !== null\n    }\n  },\n\n  render (h) {\n    const group = h('ul', {\n      'class': 'list list--group',\n      style: this.styles,\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }],\n      ref: 'group'\n    }, [this.lazy && !this.isBooted ? null : this.$slots.default])\n\n    const item = h('div', {\n      'class': this.classes,\n      on: { click: this.click },\n      ref: 'item'\n    }, [this.$slots.item])\n\n    const transition = h('transition', {\n      on: {\n        enter: this.enter,\n        afterEnter: this.afterEnter,\n        leave: this.leave\n      }\n    }, [group])\n\n    return h('div', { 'class': 'list--group__container' }, [item, transition])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/lists/ListGroup.js"",""import GenerateRouteLink from '../../mixins/route-link'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'list-tile',\n\n  mixins: [GenerateRouteLink, Toggleable],\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'list__tile--active'\n    },\n    avatar: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'list__tile': true,\n        'list__tile--active': this.isActive,\n        'list__tile--avatar': this.avatar,\n        'list__tile--disabled': this.disabled\n      }\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n\n    return h(tag, data, [this.$slots.default])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/lists/ListTile.js"",""export default {\n  functional: true,\n\n  name: 'list-tile-action',\n\n  render (h, context) {\n    const data = {\n      'class': {\n        'list__tile__action': true,\n        'list__tile__action--stack': (context.children || []).length > 1\n      }\n    }\n\n    return h('div', data, context.children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/lists/ListTileAction.js"",""import { createSimpleFunctional } from '../../util/helpers'\n\nimport List from './List'\nimport ListGroup from './ListGroup'\nimport ListTile from './ListTile'\nimport ListTileAction from './ListTileAction'\n\nconst ListItem = createSimpleFunctional('list__item', 'li')\nconst ListTileActionText = createSimpleFunctional('list__tile__action-text', 'span')\nconst ListTileAvatar = createSimpleFunctional('list__tile__avatar', 'v-avatar')\nconst ListTileContent = createSimpleFunctional('list__tile__content', 'div')\nconst ListTileTitle = createSimpleFunctional('list__tile__title', 'div')\nconst ListTileSubTitle = createSimpleFunctional('list__tile__sub-title', 'div')\n\nexport default {\n  List,\n  ListItem,\n  ListTile,\n  ListGroup,\n  ListTileAction,\n  ListTileActionText,\n  ListTileAvatar,\n  ListTileContent,\n  ListTileTitle,\n  ListTileSubTitle\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/lists/index.js"",""import Activator from './mixins/activator'\nimport Generators from './mixins/generators'\nimport Position from './mixins/position'\nimport Utils from './mixins/utils'\nimport Toggleable from '../../mixins/toggleable'\nimport Keyable from './mixins/keyable'\n\nexport default {\n  name: 'menu',\n\n  mixins: [Activator, Generators, Keyable, Position, Utils, Toggleable],\n\n  data () {\n    return {\n      app: null,\n      autoIndex: null,\n      dimensions: {\n        activator: {\n          top: 0, left: 0,\n          bottom: 0, right: 0,\n          width: 0, height: 0,\n          offsetTop: 0, scrollHeight: 0\n        },\n        content: {\n          top: 0, left: 0,\n          bottom: 0, right: 0,\n          width: 0, height: 0,\n          offsetTop: 0, scrollHeight: 0\n        },\n        list: null,\n        selected: null\n      },\n      direction: { vert: 'bottom', horiz: 'right' },\n      isContentActive: false,\n      isBooted: false,\n      maxHeightAutoDefault: '200px',\n      resizeTimeout: {},\n      startIndex: 3,\n      stopIndex: 0,\n      tileLength: 0,\n      window: {}\n    }\n  },\n\n  props: {\n    top: Boolean,\n    left: Boolean,\n    bottom: Boolean,\n    right: Boolean,\n    auto: Boolean,\n    offsetX: Boolean,\n    offsetY: Boolean,\n    disabled: Boolean,\n    maxHeight: {\n      default: 'auto'\n    },\n    nudgeTop: {\n      type: Number,\n      default: 0\n    },\n    nudgeBottom: {\n      type: Number,\n      default: 0\n    },\n    nudgeLeft: {\n      type: Number,\n      default: 0\n    },\n    nudgeRight: {\n      type: Number,\n      default: 0\n    },\n    nudgeWidth: {\n      type: Number,\n      default: 0\n    },\n    openOnClick: {\n      type: Boolean,\n      default: true\n    },\n    lazy: Boolean,\n    closeOnClick: {\n      type: Boolean,\n      default: true\n    },\n    closeOnContentClick: {\n      type: Boolean,\n      default: true\n    },\n    activator: {\n      default: null\n    },\n    activatorXY: {\n      default: null\n    },\n    origin: {\n      type: String,\n      default: 'top left'\n    },\n    transition: {\n      type: String,\n      default: 'v-menu-transition'\n    }\n  },\n\n  computed: {\n    minWidth () {\n      return this.dimensions.activator.width + this.nudgeWidth + (this.auto ? 16 : 0)\n    },\n    styles () {\n      return {\n        maxHeight: this.auto ? '200px' : isNaN(this.maxHeight) ? this.maxHeight : `${this.maxHeight}px`,\n        minWidth: `${this.minWidth}px`,\n        top: `${this.calcTop()}px`,\n        left: `${this.calcLeft()}px`\n      }\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      if (this.disabled) return\n\n      val && this.activate() || this.deactivate()\n    },\n    activator (newActivator, oldActivator) {\n      this.removeActivatorEvents(oldActivator)\n      this.addActivatorEvents(newActivator)\n    },\n    windowResizeHandler () {\n      this.isBooted = false\n    }\n  },\n\n  mounted () {\n    window.addEventListener('resize', this.onResize, { passive: true })\n    this.addActivatorEvents(this.activator)\n    this.app = document.querySelector('[data-app]')\n    this.$nextTick(() => {\n      this.app && this.app.appendChild(this.$refs.content)\n    })\n  },\n\n  beforeDestroy () {\n    window.removeEventListener('resize', this.onResize, { passive: true })\n    this.app &&\n      this.app.contains(this.$refs.content) &&\n      this.app.removeChild(this.$refs.content)\n\n    this.removeActivatorEvents(this.activator)\n    window.removeEventListener('resize', this.windowResizeHandler)\n  },\n\n  methods: {\n    activate () {\n      this.initWindow()\n      this.getTiles()\n      this.updateDimensions()\n      this.$nextTick(this.startTransition)\n    },\n    deactivate () {\n      this.isContentActive = false\n    },\n    onResize () {\n      clearTimeout(this.resizeTimeout)\n      if (!this.isActive) return\n      this.resizeTimeout = setTimeout(this.updateDimensions, 200)\n    },\n    startTransition () {\n      this.isContentActive = true\n      this.$nextTick(this.calculateScroll)\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': 'menu',\n      directives: [{\n        name: 'click-outside',\n        value: () => this.closeOnClick\n      }],\n      on: {\n        keydown: e => {\n          if (e.keyCode === 27) this.isActive = false\n          else this.changeListIndex(e)\n        }\n      }\n    }\n\n    return h('div', data, [\n      this.genActivator(),\n      this.genTransition()\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/menus/Menu.js"",""import Menu from './Menu.js'\n\nexport default {\n  Menu\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/menus/index.js"",""export default {\n  methods: {\n    getActivator () {\n      if (this.activator) return this.activator\n      return this.$refs.activator.children\n        ? this.$refs.activator.children[0]\n        : this.$refs.activator\n    },\n    activatorClickHandler (e) {\n      if (!this.closeOnClick) e.stopPropagation()\n      if (this.disabled) return\n      else if (this.openOnClick && !this.isActive) this.isActive = true\n      else if (this.closeOnClick && this.isActive) this.isActive = false\n    },\n    addActivatorEvents (activator = null) {\n      if (!activator) return\n      activator.addEventListener('click', this.activatorClickHandler)\n    },\n    removeActivatorEvents (activator = null) {\n      if (!activator) return\n      activator.removeEventListener('click', this.activatorClickHandler)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/menus/mixins/activator.js"",""export default {\n  methods: {\n    genActivator () {\n      if (!this.$slots.activator) return null\n\n      return this.$createElement('div', {\n        'class': 'menu__activator',\n        ref: 'activator',\n        slot: 'activator',\n        on: { click: this.activatorClickHandler }\n      }, this.$slots.activator)\n    },\n\n    genTransition () {\n      return this.$createElement(this.transition, {\n        props: { origin: this.origin }\n      }, [this.genContent()])\n    },\n\n    genContent () {\n      return this.$createElement('div', {\n        'class': 'menu__content',\n        ref: 'content',\n        style: this.styles,\n        directives: [{\n          name: 'show',\n          value: this.isContentActive\n        }],\n        on: {\n          click: e => {\n            e.stopPropagation()\n            if (this.closeOnContentClick) this.isActive = false\n          }\n        }\n      }, [this.lazy && this.isBooted || !this.lazy ? this.$slots.default : null])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/menus/mixins/generators.js"",""export default {\n  data: () => ({\n    listIndex: -1,\n    isUsingKeys: false,\n    tiles: []\n  }),\n\n  watch: {\n    isActive (val) {\n      if (!val) this.listIndex = -1\n    },\n    listIndex (next, prev) {\n      // For infinite scroll, re-evaluate children\n      next === this.tiles.length - 1 && this.getTiles()\n\n      if (next !== -1) {\n        this.tiles[next].classList.add('list__tile--highlighted')\n        this.$refs.content.scrollTop = next * 48\n      }\n\n      prev !== -1 && this.tiles[prev].classList.remove('list__tile--highlighted')\n    }\n  },\n\n  methods: {\n    changeListIndex (e) {\n      [40, 38, 13].includes(e.keyCode) && e.preventDefault()\n\n      if ([27, 9].includes(e.keyCode)) this.isActive = false\n      else if (e.keyCode === 40 && this.listIndex < this.tiles.length - 1) this.listIndex++\n      else if (e.keyCode === 38 && this.listIndex > 0) this.listIndex--\n      else if (e.keyCode === 13 && this.listIndex !== -1) this.tiles[this.listIndex].click()\n      else if (e.keyCode === 13) this.isActive = true\n    },\n    getTiles () {\n      this.tiles = this.$refs.content.querySelectorAll('.list__tile')\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/menus/mixins/keyable.js"",""export default {\n  methods: {\n    // Revisit this\n    calculateScroll () {\n      if (this.selectedIndex === null) return\n\n      let scrollTop = 0\n\n      if (this.selectedIndex >= this.stopIndex) {\n        scrollTop = this.$refs.content.scrollHeight\n      } else if (this.selectedIndex > this.startIndex) {\n        scrollTop = (this.selectedIndex * 48) - 56\n      }\n\n      this.$refs.content.scrollTop = scrollTop\n    },\n    calcLeftAuto () {\n      const a = this.dimensions.activator\n\n      return parseInt(a.left - 16)\n    },\n    calcTopAuto () {\n      if (!this.$refs.content) return this.calcTop(true)\n\n      const selectedIndex = Array.from(this.tiles).findIndex(n => n.classList.contains('list__tile--active'))\n\n      if (selectedIndex === -1) {\n        this.selectedIndex = null\n\n        return this.calcTop(true)\n      }\n\n      this.selectedIndex = selectedIndex\n      let actingIndex = selectedIndex\n\n      let offsetPadding = -16\n      this.stopIndex = this.tiles.length - 4\n      if (selectedIndex > this.startIndex && selectedIndex < this.stopIndex) {\n        actingIndex = 2\n        offsetPadding = 24\n      } else if (selectedIndex >= this.stopIndex) {\n        offsetPadding = -8\n        actingIndex = selectedIndex - this.stopIndex\n      }\n\n      return this.calcTop(true) + offsetPadding - (actingIndex * 48)\n    },\n    calcLeft () {\n      if (this.auto) return this.calcLeftAuto()\n\n      const a = this.dimensions.activator\n      const c = this.dimensions.content\n      let left = this.left ? a.right - c.width : a.left\n\n      if (this.offsetX) left += this.left ? -a.width : a.width\n      if (this.nudgeLeft) left += this.nudgeLeft\n      if (this.nudgeRight) left -= this.nudgeRight\n\n      const totalWidth = left + this.minWidth - this.window.innerWidth\n\n      if (totalWidth > 0) left -= (totalWidth + 24) // give a little extra space\n\n      return left\n    },\n    calcTop (force) {\n      if (this.auto && !force) return this.calcTopAuto()\n\n      const a = this.dimensions.activator\n      const c = this.dimensions.content\n      let top = this.top ? a.bottom - c.height : a.top\n\n      if (this.offsetY) top += this.top ? -a.height : a.height\n      if (this.nudgeTop) top -= this.nudgeTop\n      if (this.nudgeBottom) top += this.nudgeBottom\n\n      return top + this.window.pageYOffset\n    },\n    sneakPeek (cb) {\n      const el = this.$refs.content\n      const currentDisplay = el.style.display\n\n      el.style.display = 'inline-block'\n      cb()\n      el.style.display = currentDisplay\n    },\n    updateDimensions () {\n      this.sneakPeek(() => {\n        this.dimensions = {\n          activator: this.measure(this.getActivator()),\n          content: this.measure(this.$refs.content)\n        }\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/menus/mixins/position.js"",""export default {\n  methods: {\n    measure (el, selector, getParent = false) {\n      el = selector ? el.querySelector(selector) : el\n\n      if (!el) return null\n\n      const { top, bottom, left, right, height, width } = el.getBoundingClientRect()\n\n      return {\n        offsetTop: el.offsetTop,\n        scrollHeight: el.scrollHeight,\n        top, bottom, left, right, height, width\n      }\n    },\n    initWindow () {\n      this.isBooted = true\n\n      if (this.window === window) return\n\n      this.window = window\n      this.window.addEventListener('resize', this.windowResizeHandler)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/menus/mixins/utils.js"",""import Overlayable from '../../mixins/overlayable'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'navigation-drawer',\n\n  mixins: [Overlayable, Themeable],\n\n  data () {\n    return {\n      isActive: this.value,\n      isBooted: false,\n      isMobile: false,\n      mobileBreakPoint: 1024\n    }\n  },\n\n  props: {\n    absolute: Boolean,\n    clipped: Boolean,\n    disableRouteWatcher: Boolean,\n    enableResizeWatcher: Boolean,\n    height: String,\n    floating: Boolean,\n    fullHeight: Boolean,\n    miniVariant: Boolean,\n    permanent: Boolean,\n    persistent: Boolean,\n    right: Boolean,\n    temporary: Boolean,\n    value: { required: false }\n  },\n\n  computed: {\n    calculatedHeight () {\n      return this.height || '100%'\n    },\n    classes () {\n      return {\n        'navigation-drawer': true,\n        'navigation-drawer--absolute': this.absolute,\n        'navigation-drawer--is-booted': this.isBooted,\n        'navigation-drawer--clipped': this.clipped,\n        'navigation-drawer--close': !this.isActive,\n        'navigation-drawer--dark': this.dark,\n        'navigation-drawer--floating': this.floating,\n        'navigation-drawer--full-height': this.fullHeight,\n        'navigation-drawer--is-mobile': this.isMobile,\n        'navigation-drawer--light': this.light,\n        'navigation-drawer--mini-variant': this.miniVariant,\n        'navigation-drawer--open': this.isActive,\n        'navigation-drawer--permanent': this.permanent,\n        'navigation-drawer--persistent': this.persistent,\n        'navigation-drawer--right': this.right,\n        'navigation-drawer--temporary': this.temporary\n      }\n    },\n    showOverlay () {\n      return !this.permanent && this.isActive && (this.temporary || this.isMobile)\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      this.$emit('input', val)\n    },\n    showOverlay (val) {\n      val && this.genOverlay() || this.removeOverlay()\n    },\n    '$route' () {\n      if (!this.disableRouteWatcher) {\n        this.isActive = !this.closeConditional()\n      }\n    },\n    value (val) {\n      if (this.permanent) return\n      if (val !== this.isActive) this.isActive = val\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(this.init)\n  },\n\n  beforeDestroy () {\n    if (this.permanent) return\n    window.removeEventListener('resize', this.onResize, { passive: false })\n  },\n\n  methods: {\n    init () {\n      this.checkIfMobile()\n      setTimeout(() => (this.isBooted = true), 0)\n\n      if (this.permanent) {\n        this.isActive = true\n        return\n      } else if (this.isMobile) this.isActive = false\n      else if (!this.value && (this.persistent || this.temporary)) this.isActive = false\n\n      window.addEventListener('resize', this.onResize, { passive: false })\n    },\n    checkIfMobile () {\n      this.isMobile = window.innerWidth <= parseInt(this.mobileBreakPoint)\n    },\n    closeConditional () {\n      return !this.permanent && (this.temporary || this.isMobile)\n    },\n    onResize () {\n      if (!this.enableResizeWatcher || this.permanent || this.temporary) return\n      this.checkIfMobile()\n      this.isActive = !this.isMobile\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': this.classes,\n      style: { height: this.calculatedHeight },\n      directives: [{\n        name: 'click-outside',\n        value: this.closeConditional\n      }],\n      on: {\n        click: () => {\n          this.$emit('update:miniVariant', false)\n        }\n      }\n    }\n\n    return h('aside', data, [this.$slots.default])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/navigation-drawer/NavigationDrawer.js"",""import NavigationDrawer from './NavigationDrawer'\n\nexport default {\n  NavigationDrawer\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/navigation-drawer/index.js"",""import Pagination from './Pagination.vue'\n\nexport default {\n  Pagination\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pagination/index.js"",""import Parallax from './Parallax.vue'\n\nexport default {\n  Parallax\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/parallax/index.js"",""import DateTitle from './mixins/date-title'\nimport DateHeader from './mixins/date-header'\nimport DateTable from './mixins/date-table'\nimport DateYears from './mixins/date-years'\nimport Picker from '../../mixins/picker'\n\nconst defaultDateFormat = val => new Date(val).toISOString().substr(0, 10)\n\nexport default {\n  name: 'date-picker',\n\n  mixins: [DateTitle, DateHeader, DateTable, DateYears, Picker],\n\n  data () {\n    return {\n      tableDate: new Date(),\n      originalDate: this.value,\n      currentDay: null,\n      currentMonth: null,\n      currentYear: null,\n      isSelected: false,\n      isReversing: false\n    }\n  },\n\n  props: {\n    dateFormat: {\n      type: Function,\n      default: defaultDateFormat\n    },\n    days: {\n      type: Array,\n      default: () => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n    },\n    formattedValue: {\n      required: false\n    },\n    months: {\n      type: Array,\n      default: () => [\n        'January',\n        'February',\n        'March',\n        'April',\n        'May',\n        'June',\n        'July',\n        'August',\n        'September',\n        'October',\n        'November',\n        'December'\n      ]\n    },\n    allowedDates: {\n      type: [Array, Object, Function],\n      default: () => (null)\n    }\n  },\n\n  computed: {\n    firstAllowedDate () {\n      const date = new Date()\n      date.setHours(12, 0, 0, 0)\n\n      if (this.allowedDates) {\n        const millisecondOffset = 1 * 24 * 60 * 60 * 1000\n        const valid = new Date(date)\n        for (let i = 0; i < 31; i++) {\n          if (this.isAllowed(valid)) return valid\n\n          valid.setTime(valid.getTime() + millisecondOffset)\n        }\n      }\n\n      return date\n    },\n    inputDate: {\n      get () {\n        if (!this.value) return this.firstAllowedDate\n        if (this.value instanceof Date) return this.value\n        if (!isNaN(this.value) ||\n            typeof this.value === 'string' && this.value.indexOf(':') !== -1\n        ) return new Date(this.value)\n\n        return new Date(`${this.value}T12:00:00`)\n      },\n      set (val) {\n        this.$emit('input', val ? defaultDateFormat(val) : this.originalDate)\n        this.$emit('update:formattedValue', val ? this.dateFormat(val) : this.dateFormat(this.originalDate))\n      }\n    },\n    day () {\n      return this.inputDate.getDate()\n    },\n    month () {\n      return this.inputDate.getMonth()\n    },\n    year () {\n      return this.inputDate.getFullYear()\n    },\n    tableMonth () {\n      return this.tableDate.getMonth()\n    },\n    tableYear () {\n      return this.tableDate.getFullYear()\n    },\n    dayName () {\n      return this.inputDate ? this.days[this.inputDate.getDay()] : ''\n    },\n    monthName () {\n      return this.inputDate ? this.months[this.month] : ''\n    },\n    computedTransition () {\n      return this.isReversing ? 'v-tab-reverse-transition' : 'v-tab-transition'\n    }\n  },\n\n  watch: {\n    isSelected (val) {\n      val && this.$nextTick(() => {\n        this.$refs.years.scrollTop = this.$refs.years.scrollHeight / 2 - 125\n      })\n    },\n    tableDate (val, prev) {\n      this.isReversing = val < prev\n    },\n    value (val) {\n      if (val) this.tableDate = this.inputDate\n    }\n  },\n\n  methods: {\n    save () {\n      if (this.originalDate) {\n        this.originalDate = this.value\n      } else {\n        this.originalDate = this.inputDate\n      }\n\n      if (this.$parent && this.$parent.isActive) this.$parent.isActive = false\n    },\n    cancel () {\n      this.inputDate = this.originalDate\n      if (this.$parent && this.$parent.isActive) this.$parent.isActive = false\n    },\n    isAllowed (date) {\n      if (!this.allowedDates) return true\n\n      if (Array.isArray(this.allowedDates)) {\n        return !!this.allowedDates.find(allowedDate => {\n          const d = new Date(allowedDate)\n          d.setHours(12, 0, 0, 0)\n\n          return d - date == 0\n        })\n      } else if (this.allowedDates instanceof Function) {\n        return this.allowedDates(date)\n      } else if (this.allowedDates instanceof Object) {\n        const min = new Date(this.allowedDates.min)\n        min.setHours(12, 0, 0, 0)\n        const max = new Date(this.allowedDates.max)\n        max.setHours(12, 0, 0, 0)\n\n        return date >= min && date <= max\n      }\n\n      return true\n    }\n  },\n\n  mounted () {\n    this.currentDay = this.tableDate.getDate()\n    this.currentMonth = this.tableDate.getMonth()\n    this.currentYear = this.tableDate.getFullYear()\n    this.tableDate = this.inputDate\n  },\n\n  render (h) {\n    const children = []\n\n    !this.noTitle && children.push(this.genTitle())\n\n    if (!this.isSelected) {\n      const bodyChildren = []\n\n      bodyChildren.push(this.genHeader())\n      bodyChildren.push(this.genTable())\n\n      children.push(h('div', {\n        'class': 'picker__body'\n      }, bodyChildren))\n    } else {\n      children.push(this.genYears())\n    }\n\n    this.$scopedSlots.default && children.push(this.genSlot())\n\n    return h('v-card', {\n      'class': {\n        'picker picker--date': true,\n        'picker--landscape': this.landscape,\n        'picker--dark': this.dark,\n        'picker--light': this.light && !this.dark\n      }\n    }, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/DatePicker.js"",""import Picker from '../../mixins/picker'\nimport TimeTitle from './mixins/time-title'\nimport TimeBody from './mixins/time-body'\n\nexport default {\n  name: 'time-picker',\n\n  mixins: [Picker, TimeBody, TimeTitle],\n\n  data () {\n    return {\n      isDragging: false,\n      rotate: 0,\n      originalTime: this.value,\n      period: 'am',\n      selectingHour: true\n    }\n  },\n\n  props: {\n    format: {\n      type: String,\n      default: 'ampm',\n      validator (val) {\n        return ['ampm', '24hr'].includes(val)\n      }\n    }\n  },\n\n  computed: {\n    is24hr () {\n      return this.format !== 'ampm'\n    },\n    divider () {\n      if (!this.selectingHour) return 60\n      return this.is24hr ? 24 : 12\n    },\n    degrees () {\n      return this.degreesPerUnit * Math.PI / 180\n    },\n    degreesPerUnit () {\n      return 360 / this.divider\n    },\n    inputTime: {\n      get () {\n        if (this.value && !(this.value instanceof Date)) return this.value\n        let value = new Date()\n\n        if (this.value instanceof Date) {\n          value = this.value\n        }\n\n        let hour = value.getHours()\n        const minute = value.getMinutes()\n        let period = ''\n\n        if (!this.is24hr) {\n          hour = hour > 12 ? hour - 12 : hour\n          period = this.period\n        }\n\n        return `${hour}:${minute}${period}`\n      },\n      set (val) {\n        return this.$emit('input', val)\n      }\n    },\n    timeArray () {\n      return this.inputTime.replace(/(am|pm)/, '').split(':')\n    },\n    hour: {\n      get () {\n        return parseInt(this.timeArray[0])\n      },\n      set (val) {\n        if (!this.is24hr) {\n          val = val > 12 ? val - 12 : val < 1 ? 12 : val\n        } else {\n          val = val < 10 ? `0${val}` : val > 23 ? '00' : val\n        }\n\n        this.inputTime = `${val}:${this.minute}${!this.is24hr ? this.period : ''}`\n      }\n    },\n    minute: {\n      get () {\n        const minute = parseInt(this.timeArray[1])\n\n        return minute < 10 ? `0${minute}` : minute > 59 ? '00' : minute\n      },\n      set (val) {\n        val = val < 10 ? `0${parseInt(val)}` : val > 59 ? '00' : val\n        let hour = this.hour\n\n        if (this.is24hr && hour < 10) {\n          hour = `0${hour}`\n        }\n\n        this.inputTime = `${hour}:${val}${!this.is24hr ? this.period : ''}`\n      }\n    },\n    clockHand () {\n      if (this.selectingHour) return this.degreesPerUnit * this.hour\n      return this.degreesPerUnit * this.minute\n    },\n    radius () {\n      return this.clockSize / 2\n    },\n    clockSize: {\n      get () {\n        return this.size\n      },\n      set (val) {\n        this.size = val\n      }\n    },\n    size () {\n      return this.landscape ? 250 : 280\n    }\n  },\n\n  watch: {\n    period (val) {\n      this.inputTime = `${this.hour}:${this.minute}${val}`\n    },\n    value (val) {\n      if (this.isSaving) {\n        this.originalTime = this.inputTime\n        this.isSaving = false\n      }\n    }\n  },\n\n  methods: {\n    save () {\n      if (this.originalTime) {\n        this.originalTime = this.value\n      } else {\n        this.inputTime = this.inputTime\n        this.originalTime = this.inputTime\n      }\n\n      if (this.$parent && this.$parent.isActive) this.$parent.isActive = false\n    },\n    cancel () {\n      this.inputTime = this.originalTime\n      if (this.$parent && this.$parent.isActive) this.$parent.isActive = false\n    }\n  },\n\n  render (h) {\n    const children = [this.genBody()]\n\n    !this.noTitle && children.unshift(this.genTitle())\n    this.$scopedSlots.default && children.push(this.genSlot())\n\n    return h('v-card', {\n      'class': {\n        'picker picker--time': true,\n        'picker--landscape': this.landscape,\n        'picker--dark': this.dark,\n        'picker--light': this.light && !this.dark,\n        'picker--time--hours': this.selectingHour\n      }\n    }, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/TimePicker.js"",""import DatePicker from './DatePicker'\nimport TimePicker from './TimePicker'\n\nexport default {\n  DatePicker,\n  TimePicker\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/index.js"",""export default {\n  methods: {\n    genHeader () {\n      return this.$createElement('div', {\n        'class': 'picker--date__header'\n      }, [\n        this.genSelector()\n      ])\n    },\n    genSelector () {\n      return this.$createElement('div', {\n        'class': 'picker--date__header-selector'\n      }, [\n        this.$createElement('v-btn', {\n          props: { icon: true },\n          nativeOn: {\n            click: e => {\n              e.stopPropagation()\n              this.tableDate = new Date(this.tableYear, this.tableMonth - 1)\n            }\n          }\n        }, [\n          this.$createElement('v-icon', 'chevron_left')\n        ]),\n        this.$createElement('div', {\n          'class': 'picker--date__header-selector-date'\n        }, [\n          this.$createElement(this.computedTransition, [\n            this.$createElement('strong', {\n              key: this.tableMonth\n            }, `${this.months[this.tableMonth]} ${this.tableYear}`)\n          ])\n        ]),\n        this.$createElement('v-btn', {\n          props: { icon: true },\n          nativeOn: {\n            click: e => {\n              e.stopPropagation()\n              this.tableDate = new Date(this.tableYear, this.tableMonth + 1)\n            }\n          }\n        }, [\n          this.$createElement('v-icon', 'chevron_right')\n        ])\n      ])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/mixins/date-header.js"",""export default {\n  methods: {\n    genTable () {\n      const children = []\n      const data = {\n        'class': 'picker--date__table',\n      }\n\n      if (this.scrollable) {\n        data.on = {\n          wheel: (e) => {\n            e.preventDefault()\n\n            let month = this.tableMonth\n            const year = this.tableYear\n            const next = e.deltaY < 0\n\n            if (next) month++\n            else month--\n\n            this.tableDate = new Date(year, month)\n          }\n        }\n      }\n\n      children.push(this.$createElement('table', {\n        key: this.tableMonth\n      }, [\n        this.genTHead(),\n        this.genTBody()\n      ]))\n\n      return this.$createElement('div', data, [\n        this.$createElement(this.computedTransition, children)\n      ])\n    },\n    genTHead () {\n      return this.$createElement('thead', {\n\n      }, this.genTR(this.days.map(o => {\n        return this.$createElement('th', o.substr(0, 1))\n      })))\n    },\n    genTBody () {\n      const children = []\n      let rows = []\n      const length = new Date(\n        this.tableYear,\n        this.tableMonth + 1,\n        0\n      ).getDate()\n\n      const day = new Date(\n        this.tableYear,\n        this.tableMonth\n      ).getDay()\n\n      for (let i = 0; i < day; i++) {\n        rows.push(this.$createElement('td'))\n      }\n\n      for (let i = 1; i <= length; i++) {\n        rows.push(this.$createElement('td', [\n          this.$createElement('a', {\n            'class': {\n              'btn btn--floating btn--small btn--flat': true,\n              'btn--active': this.isActive(i),\n              'btn--current': this.isCurrent(i),\n              'btn--light': this.dark,\n              'btn--disabled': !this.isAllowed(new Date(this.tableYear, this.tableMonth, i, 12, 0, 0, 0))\n            },\n            domProps: {\n              href: 'javascript:;',\n              innerHTML: `<span class=\""btn__content\"">${i}</span>`\n            },\n            on: {\n              click: () => {\n                const day = i < 10 ? `0${i}` : i\n                let tableMonth = this.tableMonth + 1\n                tableMonth = tableMonth < 10 ? `0${tableMonth}` : tableMonth\n\n                this.inputDate = `${this.tableYear}-${tableMonth}-${day}T12:00:00`\n                this.$nextTick(() => !this.actions && this.save())\n              }\n            }\n          })\n        ]))\n\n        if (rows.length % 7 === 0) {\n          children.push(this.genTR(rows))\n          rows = []\n        }\n      }\n\n      if (rows.length) {\n        children.push(this.genTR(rows))\n      }\n\n      children.length < 6 && children.push(this.genTR([\n        this.$createElement('td', { domProps: { innerHTML: '&nbsp;' }})\n      ]))\n\n      return this.$createElement('tbody', children)\n    },\n    genTR (children = [], data = {}) {\n      return [this.$createElement('tr', data, children)]\n    },\n    isActive (i) {\n      return this.tableYear === this.year &&\n        this.tableMonth === this.month &&\n        this.day === i\n    },\n    isCurrent (i) {\n      return this.currentYear === this.tableYear &&\n        this.currentMonth === this.tableMonth &&\n        this.currentDay === i\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/mixins/date-table.js"",""\nexport default {\n  methods: {\n    genTitle () {\n      const date = `${this.dayName.substr(0, 3)},${this.landscape ? '<br>' : ''} ${this.monthName.substr(0, 3)} ${this.day}`\n\n      const text = this.$createElement('transition', {\n        props: {\n          name: 'slide-x-transition',\n          mode: 'out-in'\n        }\n      }, [\n        this.$createElement('div', {\n          domProps: { innerHTML: date },\n          key: date\n        })\n      ])\n\n      return this.$createElement('div', {\n        'class': 'picker__title'\n      }, [\n        this.$createElement('div', {\n          'class': {\n            'picker--date__title-year': true,\n            'active': this.isSelected\n          },\n          on: {\n            click: e => {\n              e.stopPropagation()\n              this.isSelected = true\n            }\n          }\n        }, this.year),\n        this.$createElement('div', {\n          'class': {\n            'picker--date__title-date': true,\n            'active': !this.isSelected\n          },\n          on: {\n            click: e => {\n              e.stopPropagation()\n              this.isSelected = false\n            }\n          }\n        }, [text])\n      ])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/mixins/date-title.js"",""export default {\n  methods: {\n    genYears () {\n      return this.$createElement('ul', {\n        'class': 'picker--date__years',\n        ref: 'years'\n      }, this.genYearItems())\n    },\n    genYearItems () {\n      const children = []\n      for (let i = this.year + 100, length = this.year - 100; i > length; i--) {\n        children.push(this.$createElement('li', {\n          'class': {\n            active: this.year === i\n          },\n          on: {\n            click: e => {\n              e.stopPropagation()\n\n              let tableMonth = this.tableMonth + 1\n              let day = this.day\n              tableMonth = tableMonth < 10 ? `0${tableMonth}` : tableMonth\n              day = day < 10 ? `0${day}` : day\n\n              this.inputDate = `${i}-${tableMonth}-${day}`\n              this.isSelected = false\n            }\n          }\n        }, i))\n      }\n      return children\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/mixins/date-years.js"",""export default {\n  methods: {\n    genBody () {\n      const children = [this.genHand(this.selectingHour ? 'hour' : 'minute')]\n      const data = {\n        'class': 'picker--time__clock',\n        on: {\n          mousedown: this.onMouseDown,\n          mouseup: this.onMouseUp,\n          mouseleave: () => {\n            this.isDragging && this.onMouseUp()\n          },\n          mousemove: this.onDragMove,\n          touchstart: this.onMouseDown,\n          touchcancel: this.onMouseUp,\n          touchmove: this.onDragMove\n        },\n        key: this.selectingHour ? 'hour' : 'minute',\n        ref: 'clock'\n      }\n\n      this.selectingHour &&\n        children.push(this.genHours()) ||\n        children.push(this.genMinutes())\n\n      if (this.scrollable) {\n        data.on.wheel = e => {\n          e.preventDefault()\n\n          const diff = e.wheelDelta > 0 ? 1 : -1\n          const changing = this.selectingHour ? 'changeHour' : 'changeMinute'\n\n          this[changing](diff)\n        }\n      }\n\n      return this.$createElement('div', {\n        'class': 'picker__body'\n      }, [\n        this.$createElement('v-fade-transition', {\n          props: { mode: 'out-in' }\n        }, [\n          this.$createElement('div', data, children)\n        ])\n      ])\n    },\n    genHand (type) {\n      return [this.$createElement('div', {\n        'class': `picker--time__clock-hand ${type}`,\n        style: {\n          transform: `rotate(${this.clockHand}deg)`\n        }\n      })]\n    },\n    genHours () {\n      let hours = this.is24hr ? 24 : 12\n      const children = []\n      let start = 0\n\n      if (hours === 12) {\n        hours++\n        start = 1\n      }\n\n      for (let i = start; i < hours; i++) {\n        children.push(this.$createElement('span', {\n          'class': {\n            'active': i === this.hour\n          },\n          style: this.getTransform(i),\n          domProps: { innerHTML: `<span>${i}</span>` }\n        }))\n      }\n\n      return children\n    },\n    genMinutes () {\n      const children = []\n\n      for (let i = 0; i < 60; i = i + 5) {\n        let num = i\n\n        if (num < 10) num = `0${num}`\n        if (num === 60) num = '00'\n\n        children.push(this.$createElement('span', {\n          'class': {\n            'active': num.toString() === this.minute.toString()\n          },\n          style: this.getTransform(i),\n          domProps: { innerHTML: `<span>${num}</span>` }\n        }))\n      }\n\n      return children\n    },\n    getTransform (i) {\n      const { x, y } = this.getPosition(i)\n\n      return { transform: `translate(${x}px, ${y}px)` }\n    },\n    getPosition (i) {\n      return {\n        x: Math.round(Math.sin(i * this.degrees) * this.radius * 0.8),\n        y: Math.round(-Math.cos(i * this.degrees) * this.radius * 0.8)\n      }\n    },\n    changeHour (time) {\n      if (!this.is24hr) {\n        this.hour = time < 0 && this.hour === 1\n          ? 12 : time > 0 && this.hour === 12\n          ? 1 : this.hour + time\n      } else {\n        this.hour = time < 0 && this.hour === 0\n          ? 23 : time > 0 && this.hour === 23\n          ? 0 : this.hour + time\n      }\n\n      return true\n    },\n    changeMinute (time) {\n      const current = Number(this.minute)\n\n      const minute = time < 0 && current === 0\n        ? 59 : time > 0 && current === 59\n        ? 0 : current + time\n\n      this.minute = minute < 10 ? `0${minute}` : minute\n\n      return true\n    },\n    onMouseDown (e) {\n      e.preventDefault()\n\n      this.isDragging = true\n      this.onDragMove(e)\n    },\n    onMouseUp () {\n      this.isDragging = false\n      !this.selectingHour && !this.actions && this.save()\n      this.selectingHour = false\n    },\n    onDragMove (e) {\n      if (!this.isDragging && e.type !== 'click') return\n\n      const rect = this.$refs.clock.getBoundingClientRect()\n      const center = { x: rect.width / 2, y: 0 - rect.width / 2 }\n      const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY\n      const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX\n      const coords = {\n        y: rect.top - clientY,\n        x: clientX - rect.left\n      }\n\n      const selecting = this.selectingHour ? 'hour' : 'minute'\n      this[selecting] = Math.round(this.angle(center, coords) / this.degreesPerUnit)\n    },\n    angle (center, p1) {\n      var p0 = {\n        x: center.x,\n        y: center.y + Math.sqrt(\n          Math.abs(p1.x - center.x) * Math.abs(p1.x - center.x) +\n          Math.abs(p1.y - center.y) * Math.abs(p1.y - center.y))\n      }\n      return Math.abs((2 * Math.atan2(p1.y - p0.y, p1.x - p0.x)) * 180 / Math.PI);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/mixins/time-body.js"",""export default {\n  methods: {\n    genTitle () {\n      const children = [this.genTime()]\n\n      if (this.format === 'ampm') {\n        children.push(this.genAMPM())\n      }\n\n      return this.$createElement('div', {\n        'class': 'picker__title'\n      }, children)\n    },\n    genTime () {\n      let hour = this.hour\n\n      if (this.is24hr && hour < 10) {\n        hour = `0${hour}`\n      }\n\n      return this.$createElement('div', {\n        'class': 'picker--time__title'\n      }, [\n        this.$createElement('span', {\n          'class': { active: this.selectingHour },\n          on: {\n            click: () => (this.selectingHour = true)\n          }\n        }, hour),\n        this.$createElement('span', {\n          'class': { active: !this.selectingHour },\n          on: {\n            click: () => (this.selectingHour = false)\n          }\n        }, `:${this.minute}`)\n      ])\n    },\n    genAMPM () {\n      return this.$createElement('div', [\n        this.$createElement('span', {\n          'class': { active: this.period === 'am' },\n          on: { click: () => (this.period = 'am') }\n        }, 'AM'),\n        this.$createElement('span', {\n          'class': { active: this.period === 'pm' },\n          on: { click: () => (this.period = 'pm') }\n        }, 'PM')\n      ])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pickers/mixins/time-title.js"",""import ProgressLinear from './ProgressLinear.vue'\nimport ProgressCircular from './ProgressCircular.vue'\n\nexport default {\n  ProgressLinear,\n  ProgressCircular\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/progress/index.js"",""import Input from '../../mixins/input'\nimport Generators from './mixins/generators'\nimport Autocomplete from './mixins/autocomplete'\n\nexport default {\n  name: 'select',\n\n  mixins: [Autocomplete, Input, Generators],\n\n  data () {\n    return {\n      content: {},\n      inputValue: this.value,\n      isBooted: false,\n      lastItem: 20,\n      isActive: false\n    }\n  },\n\n  props: {\n    appendIcon: {\n      type: String,\n      default: 'arrow_drop_down'\n    },\n    auto: Boolean,\n    autocomplete: Boolean,\n    bottom: Boolean,\n    chips: Boolean,\n    close: Boolean,\n    debounce: {\n      type: Number,\n      default: 200\n    },\n    items: {\n      type: Array,\n      default: () => []\n    },\n    filter: Function,\n    itemText: {\n      type: String,\n      default: 'text'\n    },\n    itemValue: {\n      type: String,\n      default: 'value'\n    },\n    maxHeight: {\n      type: [Number, String],\n      default: 300\n    },\n    multiple: Boolean,\n    multiLine: Boolean,\n    offset: Boolean,\n    singleLine: Boolean,\n    top: Boolean,\n    returnObject: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'input-group--text-field input-group--select': true,\n        'input-group--autocomplete': this.autocomplete,\n        'input-group--single-line': this.singleLine,\n        'input-group--multi-line': this.multiLine,\n        'input-group--chips': this.chips,\n        'input-group--multiple': this.multiple\n      }\n    },\n    filteredItems () {\n      const items = this.autocomplete && this.searchValue\n        ? this.filterSearch()\n        : this.items\n\n      return !this.auto ? items.slice(0, this.lastItem) : items\n    },\n    isDirty () {\n      return this.selectedItems.length\n    },\n    selectedItems () {\n      if (this.inputValue === null) return []\n\n      return this.items.filter(i => {\n        if (!this.multiple) {\n          return this.getValue(i) === this.getValue(this.inputValue)\n        } else {\n          return this.inputValue.find(j => this.getValue(j) === this.getValue(i))\n        }\n      })\n    }\n  },\n\n  watch: {\n    inputValue (val) {\n      this.$emit('input', val)\n    },\n    value (val) {\n      this.inputValue = val\n      this.validate()\n      this.autocomplete && this.$nextTick(this.$refs.menu.updateDimensions)\n    },\n    isActive (val) {\n      this.isBooted = true\n      this.lastItem += !val ? 20 : 0\n\n      if (!val) this.blur()\n      else this.focus()\n    },\n    isBooted () {\n      this.$nextTick(() => {\n        this.content && this.content.addEventListener('scroll', this.onScroll, false)\n      })\n    }\n  },\n\n  mounted () {\n    this.content = this.$refs.menu.$refs.content\n  },\n\n  beforeDestroy () {\n    if (this.isBooted) {\n      this.content && this.content.removeEventListener('scroll', this.onScroll, false)\n    }\n  },\n\n  methods: {\n    blur () {\n      this.$nextTick(() => (this.focused = false))\n    },\n    focus () {\n      this.focused = true\n      this.autocomplete && this.$refs.input.focus()\n    },\n    getText (item) {\n      return item === Object(item) ? item[this.itemText] : item\n    },\n    getValue (item) {\n      return item === Object(item) && (this.itemValue in item) ? item[this.itemValue] : item\n    },\n    onScroll () {\n      if (!this.isActive) {\n        setTimeout(() => (this.content.scrollTop = 0), 50)\n      } else {\n        const showMoreItems = (\n          this.content.scrollHeight -\n          (this.content.scrollTop +\n          this.content.clientHeight)\n        ) < 200\n\n        if (showMoreItems) {\n          this.lastItem += 20\n        }\n      }\n    },\n    selectItem (item) {\n      if (!this.multiple) {\n        this.inputValue = this.returnObject ? item : this.getValue(item)\n      } else {\n        const inputValue = this.inputValue.slice()\n        const i = this.inputValue.findIndex(i => this.getValue(i) === this.getValue(item))\n\n        i !== -1 && inputValue.splice(i, 1) || inputValue.push(item)\n        this.inputValue = inputValue.map(i => this.returnObject ? i : this.getValue(i))\n      }\n\n      if (this.autocomplete) {\n        this.$nextTick(() => {\n          this.searchValue = null\n          this.$refs.input.focus()\n        })\n      }\n    }\n  },\n\n  render (h) {\n    return this.genInputGroup([\n      this.genSelectionsAndSearch(),\n      this.genMenu()\n    ], {\n      ref: 'activator',\n      directives: [{\n        name: 'click-outside',\n        value: () => (this.isActive = false)\n      }],\n      on: {\n        keydown: e => this.$refs.menu.changeListIndex(e)\n      }\n    })\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/selects/Select.js"",""import Select from './Select'\n\nexport default {\n  Select\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/selects/index.js"",""export default {\n  data () {\n    return {\n      searchValue: null\n    }\n  },\n\n  methods: {\n    filterSearch () {\n      return this.items.filter(i => {\n        const text = this.getText(i)\n        if (typeof text === 'undefined') return false\n\n        return text.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/selects/mixins/autocomplete.js"",""export default {\n  methods: {\n    genMenu () {\n      const data = {\n        ref: 'menu',\n        props: {\n          auto: this.auto,\n          closeOnClick: false,\n          closeOnContentClick: !this.multiple,\n          disabled: this.disabled,\n          offsetY: this.autocomplete || this.offset,\n          maxHeight: this.maxHeight,\n          activator: this.$refs.activator,\n          value: this.isActive\n        },\n        on: { input: val => (this.isActive = val) }\n      }\n\n      return this.$createElement('v-menu', data, [this.genList()])\n    },\n    genSelectionsAndSearch () {\n      let input\n\n      if (this.autocomplete) {\n        input = [this.$createElement('input', {\n          'class': 'input-group--select__autocomplete',\n          domProps: { value: this.searchValue },\n          on: {\n            input: e => (this.searchValue = e.target.value),\n            keyup: e => {\n              if (e.keyCode === 27) {\n                this.isActive = false\n                e.target.blur()\n              }\n            }\n          },\n          ref: 'input',\n          key: 'input'\n        })]\n      }\n\n      const group = this.$createElement('transition-group', {\n        props: {\n          name: 'fade-transition'\n        }\n      }, this.isDirty ? this.genSelections() : [])\n\n      return this.$createElement('div', {\n        'class': 'input-group__selections',\n        style: { 'overflow': 'hidden' },\n        ref: 'activator'\n      }, [group, input])\n    },\n    genSelections () {\n      const children = []\n      const chips = this.chips\n      const slots = this.$scopedSlots.selection\n      const length = this.selectedItems.length\n\n      this.selectedItems.forEach((item, i) => {\n        if (slots) {\n          children.push(this.genSlotSelection(item))\n        } else if (chips) {\n          children.push(this.genChipSelection(item))\n        } else {\n          children.push(this.genCommaSelection(item, i < length - 1))\n        }\n      })\n\n      return children\n    },\n    genSlotSelection (item) {\n      return this.$scopedSlots.selection({ parent: this, item })\n    },\n    genChipSelection (item) {\n      return this.$createElement('v-chip', {\n        'class': 'chip--select-multi',\n        props: { close: true },\n        on: { input: () => this.selectItem(item) },\n        nativeOn: { click: e => e.stopPropagation() },\n        key: item\n      }, this.getText(item))\n    },\n    genCommaSelection (item, comma) {\n      return this.$createElement('div', {\n        'class': 'input-group__selections__comma',\n        key: item\n      }, `${this.getText(item)}${comma ? ', ' : ''}`)\n    },\n    genList () {\n      return this.$createElement('v-card', [\n        this.$createElement('v-list', {\n          ref: 'list'\n        }, this.filteredItems.map(o => {\n          if (o.header) return this.genHeader(o)\n          if (o.divider) return this.genDivider(o)\n          else return this.genListItem(o)\n        }))\n      ])\n    },\n    genHeader (item) {\n      return this.$createElement('v-subheader', {\n        props: item\n      }, item.header)\n    },\n    genDivider (item) {\n      return this.$createElement('v-divider', {\n        props: item\n      })\n    },\n    genListItem (item) {\n      return this.$createElement('v-list-item', [this.genTile(item)])\n    },\n    genTile (item) {\n      const active = this.selectedItems.indexOf(item) !== -1\n      const data = {\n        'class': {\n          'list__tile--active': active,\n          'list__tile--select-multi': this.multiple\n        },\n        nativeOn: { click: () => this.selectItem(item) },\n        props: {\n          avatar: item === Object(item) && 'avatar' in item,\n          ripple: true\n        }\n      }\n\n      if (this.$scopedSlots.item) {\n        return this.$createElement('v-list-tile', data,\n          [this.$scopedSlots.item({ parent: this, item })]\n        )\n      }\n\n      return this.$createElement('v-list-tile', data,\n        [this.genAction(item, active), this.genContent(item)]\n      )\n    },\n    genAction (item, active) {\n      if (!this.multiple) return null\n\n      const data = {\n        'class': {\n          'list__tile__action--select-multi': this.multiple\n        },\n        nativeOn: { click: () => this.selectItem(item) }\n      }\n\n      return this.$createElement('v-list-tile-action', data, [\n        this.$createElement('v-checkbox', { props: { inputValue: active }})\n      ])\n    },\n    genContent (item) {\n      return this.$createElement('v-list-tile-content',\n        [this.$createElement('v-list-tile-title', this.getText(item))]\n      )\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/selects/mixins/generators.js"",""import Input from '../../mixins/input'\nimport { addOnceEventListener } from '../../util/helpers'\n\nexport default {\n  name: 'slider',\n\n  mixins: [Input],\n\n  data () {\n    return {\n      app: {},\n      isActive: false,\n      inputWidth: 0\n    }\n  },\n\n  props: {\n    inverted: Boolean,\n    min: {\n      type: [Number, String],\n      default: 0\n    },\n    max: {\n      type: [Number, String],\n      default: 100\n    },\n    step: {\n      type: [Number, String],\n      default: 1\n    },\n    thumbLabel: Boolean,\n    value: [Number, String],\n    vertical: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'input-group input-group--slider': true,\n        'input-group--active': this.isActive,\n        'input-group--dirty': this.inputValue > this.min,\n        'input-group--disabled': this.disabled,\n        'input-group--ticks': this.thumbLabel\n      }\n    },\n    inputValue: {\n      get () {\n        return this.value\n      },\n      set (val) {\n        val = val < this.min ? this.min : val > this.max ? this.max : val\n        if (Math.ceil(val) !== Math.ceil(this.lazyValue)) {\n          this.inputWidth = this.calculateWidth(val)\n        }\n\n        let value = parseInt(val)\n        this.lazyValue = value\n\n        if (value !== this.value) {\n          this.$emit('input', value)\n        }\n      }\n    },\n    interval () {\n      return 100 / (this.max - this.min) * this.step\n    },\n    thumbContainerClasses () {\n      return {\n        'slider__thumb-container': true,\n        'slider__thumb-container--label': this.thumbLabel\n      }\n    },\n    thumbStyles () {\n      return {\n        left: `${this.inputWidth}%`\n      }\n    },\n    tickContainerStyles () {\n      return {\n        transform: `translate3d(-${this.interval}%, -50%, 0)`\n      }\n    },\n    tickStyles () {\n      return {\n        backgroundSize: `${this.interval}% 2px`,\n        transform: `translate3d(${this.interval}%, 0, 0)`\n      }\n    },\n    trackStyles () {\n      const scaleX = this.calculateScale(1 - (this.inputWidth / 100))\n      const translateX = this.inputWidth < 1 && !this.thumbLabel ? `${8}px` : 0\n      return {\n        transform: `scaleX(${scaleX}) translateX(${translateX})`\n      }\n    },\n    trackFillStyles () {\n      const scaleX = this.calculateScale(this.inputWidth / 100)\n      const translateX = this.inputWidth > 99 && !this.thumbLabel ? `${-8}px` : 0\n      return {\n        transform: `scaleX(${scaleX}) translateX(${translateX})`\n      }\n    }\n  },\n\n  watch: {\n    value () {\n      this.inputValue = this.value\n    }\n  },\n\n  mounted () {\n    this.inputValue = this.value\n    this.inputWidth = this.calculateWidth(this.inputValue)\n    this.app = document.querySelector('[data-app]')\n  },\n\n  methods: {\n    calculateWidth (val) {\n      return (val - this.min) / (this.max - this.min) * 100\n    },\n    calculateScale (scale) {\n      if (scale < 0.02 && !this.thumbLabel) {\n        return 0\n      }\n\n      return this.disabled ? scale - 0.015 : scale\n    },\n    onMouseDown (e) {\n      this.isActive = true\n\n      if ('touches' in e) {\n        this.app.addEventListener('touchmove', this.onMouseMove, false)\n        addOnceEventListener(this.app, 'touchend', this.onMouseUp)\n      } else {\n        this.app.addEventListener('mousemove', this.onMouseMove, false)\n        addOnceEventListener(this.app, 'mouseup', this.onMouseUp)\n      }\n    },\n    onMouseUp () {\n      this.isActive = false\n      this.app.removeEventListener('touchmove', this.onMouseMove, false)\n      this.app.removeEventListener('mousemove', this.onMouseMove, false)\n    },\n    onMouseMove (e) {\n      const { left: offsetLeft, width: trackWidth } = this.$refs.track.getBoundingClientRect()\n      const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX\n      let left = (\n        ((clientX - offsetLeft) / trackWidth) * 100\n      )\n\n      left = left < 0 ? 0 : left > 100 ? 100 : left\n\n      this.inputValue = this.min + ((left / 100) * (this.max - this.min))\n    },\n    sliderMove (e) {\n      if (!this.isActive) {\n        this.onMouseMove(e)\n      }\n    }\n  },\n\n  render (h) {\n    const children = []\n    const trackChildren = []\n    const thumbChildren = []\n\n    trackChildren.push(h('div', { 'class': 'slider__track', style: this.trackStyles }))\n    trackChildren.push(h('div', { 'class': 'slider__track-fill', style: this.trackFillStyles }))\n    children.push(h('div', { 'class': 'slider__track__container', ref: 'track' }, trackChildren))\n\n    if (this.step) {\n      children.push(\n        h('div', { 'class': 'slider__ticks-container', style: this.tickContainerStyles }, [\n          h('div', { 'class': 'slider__ticks', style: this.tickStyles })\n        ])\n      )\n    }\n\n    thumbChildren.push(h('div', { 'class': 'slider__thumb' }))\n\n    if (this.thumbLabel) {\n      thumbChildren.push(\n        h('v-scale-transition', { props: { origin: 'bottom center' }}, [\n          h('div', {\n            'class': 'slider__thumb--label__container',\n            directives: [\n              {\n                name: 'show',\n                value: this.isActive\n              }\n            ]\n          }, [\n            h('div', { 'class': 'slider__thumb--label' }, [\n              h('span', {}, parseInt(this.inputValue))\n            ])\n          ])\n        ])\n      )\n    }\n\n    const thumbContainer = h('div', {\n      'class': this.thumbContainerClasses,\n      style: this.thumbStyles,\n      on: {\n        touchstart: this.onMouseDown,\n        mousedown: this.onMouseDown\n      },\n      ref: 'thumb'\n    }, thumbChildren)\n\n    children.push(thumbContainer)\n\n    const slider = h('div', { 'class': 'slider' }, children)\n\n    return this.genInputGroup([slider], {\n      attrs: {\n        role: 'slider'\n      },\n      on: {\n        mouseup: this.sliderMove\n      },\n      directives: [\n        {\n          name: 'click-outside'\n        }\n      ]\n    })\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/sliders/Slider.js"",""import Slider from './Slider'\n\nexport default {\n  Slider\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/sliders/index.js"",""import Toggleable from '../../mixins/toggleable'\nimport Contextualable from '../../mixins/contextualable'\n\nexport default {\n  name: 'snackbar',\n\n  mixins: [Contextualable, Toggleable],\n\n  data () {\n    return {\n      activeTimeout: {}\n    }\n  },\n\n  props: {\n    absolute: Boolean,\n    bottom: Boolean,\n    left: Boolean,\n    multiLine: Boolean,\n    right: Boolean,\n    top: Boolean,\n    timeout: {\n      type: Number,\n      default: 6000\n    },\n    vertical: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'snack': true,\n        'snack--active': this.isActive,\n        'snack--absolute': this.absolute,\n        'snack--bottom': this.bottom || !this.top,\n        'snack--left': this.left,\n        'snack--right': this.right,\n        'snack--top': this.top,\n        'snack--multi-line': this.multiLine && !this.vertical,\n        'snack--vertical': this.vertical,\n        'primary': this.primary,\n        'secondary': this.secondary,\n        'success': this.success,\n        'info': this.info,\n        'warning': this.warning,\n        'error': this.error\n      }\n    },\n    computedTransition () {\n      return this.top ? 'v-slide-y-transition' : 'v-slide-y-reverse-transition'\n    }\n  },\n\n  watch: {\n    isActive () {\n      clearTimeout(this.activeTimeout)\n\n      if (this.isActive && this.timeout) {\n        this.activeTimeout = setTimeout(() => (this.isActive = false), this.timeout)\n      }\n    }\n  },\n\n  render (h) {\n    const children = []\n\n    if (this.isActive) {\n      children.push(h('div', {\n        'class': 'snack__content'\n      }, [this.$slots.default]))\n    }\n\n    return h('div', {\n      'class': this.classes\n    }, [h(this.computedTransition, {}, children)])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/snackbars/Snackbar.js"",""import Snackbar from './Snackbar'\n\nexport default {\n  Snackbar\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/snackbars/index.js"",""export default {\n  name: 'stepper',\n\n  data () {\n    return {\n      inputValue: null,\n      steps: [],\n      content: [],\n      isReverse: false\n    }\n  },\n\n  props: {\n    nonLinear: Boolean,\n    altLabels: Boolean,\n    vertical: Boolean,\n    value: [Number, String]\n  },\n\n  computed: {\n    classes () {\n      return {\n        'stepper': true,\n        'stepper--vertical': this.vertical,\n        'stepper--alt-labels': this.altLabels,\n        'stepper--non-linear': this.nonLinear\n      }\n    }\n  },\n\n  watch: {\n    inputValue (val, prev) {\n      this.isReverse = Number(val) < Number(prev)\n      this.steps.forEach(i => i.toggle(this.inputValue))\n      this.content.forEach(i => i.toggle(this.inputValue, this.isReverse))\n\n      this.$emit('input', this.inputValue)\n    },\n    value () {\n      this.inputValue = this.value\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(this.init)\n  },\n\n  methods: {\n    init () {\n      this.$children.forEach(i => {\n        if (i.$options._componentTag === 'v-stepper-step') {\n          this.steps.push(i)\n        } else if (i.$options._componentTag === 'v-stepper-content') {\n          i.isVertical = this.vertical\n          this.content.push(i)\n        }\n      })\n\n      this.inputValue = this.value || this.steps[0].step || 1\n    },\n    stepClick (step) {\n      this.inputValue = step\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      'class': this.classes\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/steppers/Stepper.js"",""export default {\n  name: 'stepper-content',\n\n  data () {\n    return {\n      height: 0,\n      isActive: false,\n      isReverse: false,\n      isVertical: false\n    }\n  },\n\n  props: {\n    step: {\n      type: [Number, String],\n      required: true\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'stepper__content': true\n      }\n    },\n    computedTransition () {\n      return this.isReverse\n        ? 'v-tab-reverse-transition'\n        : 'v-tab-transition'\n    },\n    styles () {\n      if (!this.isVertical) return {}\n\n      return {\n        height: !isNaN(this.height) ? `${this.height}px` : this.height\n      }\n    },\n    wrapperClasses () {\n      return {\n        'stepper__wrapper': true\n      }\n    }\n  },\n\n  watch: {\n    isActive () {\n      if (!this.isVertical) {\n        return\n      }\n\n      if (this.isActive) {\n        this.enter()\n      } else {\n        this.leave()\n      }\n    }\n  },\n\n  mounted () {\n    this.$refs.wrapper.addEventListener(\n      'transitionend',\n      this.onTransition,\n      false\n    )\n  },\n\n  beforeDestroy () {\n    this.$refs.wrapper.removeEventListener(\n      'transitionend',\n      this.onTransition,\n      false\n    )\n  },\n\n  methods: {\n    onTransition () {\n      if (!this.isActive) return\n\n      this.height = 'auto'\n    },\n    enter () {\n      let scrollHeight = 0\n\n      // Render bug with height\n      setTimeout(() => {\n        scrollHeight = this.$refs.wrapper.scrollHeight\n      }, 0)\n\n      this.height = 0\n\n      // Give the collapsing element time to collapse\n      setTimeout(() => (this.height = scrollHeight), 450)\n    },\n    leave () {\n      this.height = this.$refs.wrapper.clientHeight\n      setTimeout(() => (this.height = 0), 0)\n    },\n    toggle (step, reverse) {\n      this.isActive = step.toString() === this.step.toString()\n      this.isReverse = reverse\n    }\n  },\n\n  render (h) {\n    const contentData = {\n      'class': this.classes\n    }\n    const wrapperData = {\n      'class': this.wrapperClasses,\n      style: this.styles,\n      ref: 'wrapper'\n    }\n\n    if (!this.isVertical) {\n      contentData.directives = [{\n        name: 'show',\n        value: this.isActive\n      }]\n    }\n\n    const wrapper = h('div', wrapperData, [this.$slots.default])\n    const content = h('div', contentData, [wrapper])\n\n    return h(this.computedTransition, {}, [content])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/steppers/StepperContent.js"",""import { closestParentTag } from '../../util/helpers'\n\nexport default {\n  name: 'stepper-step',\n\n  data () {\n    return {\n      isActive: false,\n      isInactive: true\n    }\n  },\n\n  props: {\n    complete: Boolean,\n    completeIcon: {\n      type: String,\n      default: 'check'\n    },\n    editIcon: {\n      type: String,\n      default: 'edit'\n    },\n    errorIcon: {\n      type: String,\n      default: 'warning'\n    },\n    editable: Boolean,\n    rules: {\n      type: Array,\n      default: () => []\n    },\n    step: [Number, String]\n  },\n\n  computed: {\n    classes () {\n      return {\n        'stepper__step': true,\n        'stepper__step--active': this.isActive,\n        'stepper__step--editable': this.editable,\n        'stepper__step--inactive': this.isInactive,\n        'stepper__step--error': this.hasError,\n        'stepper__step--complete': this.complete\n      }\n    },\n    hasError () {\n      return this.rules.some(i => (i() !== true))\n    },\n    stepper () {\n      return closestParentTag.call(this, 'v-stepper')\n    }\n  },\n\n  methods: {\n    click () {\n      if (this.editable) {\n        this.stepper.stepClick(this.step)\n      }\n    },\n    toggle (step) {\n      this.isActive = step.toString() === this.step.toString()\n      this.isInactive = Number(step) < Number(this.step)\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': this.classes,\n      directives: [{\n        name: 'ripple',\n        value: this.editable\n      }],\n      on: {\n        click: this.click\n      }\n    }\n    let stepContent\n\n    if (this.hasError) {\n      stepContent = [h('v-icon', {}, this.errorIcon)]\n    } else if (this.complete) {\n      if (this.editable) {\n        stepContent = [h('v-icon', {}, this.editIcon)]\n      } else {\n        stepContent = [h('v-icon', {}, this.completeIcon)]\n      }\n    } else {\n      stepContent = this.step\n    }\n\n    const step = h('span', { 'class': 'stepper__step__step' }, stepContent)\n    const label = h('div', { 'class': 'stepper__label' }, [this.$slots.default])\n\n    return h('div', data, [step, label])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/steppers/StepperStep.js"",""import { createSimpleFunctional } from '../../util/helpers'\nimport Stepper from './Stepper'\nimport StepperStep from './StepperStep'\nimport StepperContent from './StepperContent'\n\nconst StepperHeader = createSimpleFunctional('stepper__header')\n\nexport default {\n  Stepper,\n  StepperContent,\n  StepperHeader,\n  StepperStep\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/steppers/index.js"",""import Themeable from '../../mixins/themeable'\n\nconst Subheader = {\n  functional: true,\n\n  mixins: [Themeable],\n\n  props: {\n    inset: Boolean\n  },\n\n  render (h, { data, children, props }) {\n    data.staticClass = data.staticClass ? `subheader ${data.staticClass}` : 'subheader'\n    if (props.inset) data.staticClass += ' subheader--inset'\n    if (props.dark && !props.light) data.staticClass += ' subheader--dark'\n    if (props.light) data.staticClass += ' subheader--light'\n\n    return h('li', data, children)\n  }\n}\n\nexport default {\n  Subheader\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/subheaders/index.js"",""import Head from './mixins/head'\nimport Body from './mixins/body'\nimport Foot from './mixins/foot'\nimport Progress from './mixins/progress'\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default {\n  name: 'datatable',\n\n  mixins: [Head, Body, Foot, Progress],\n\n  data () {\n    return {\n      all: false,\n      defaultPagination: {\n        page: 1,\n        rowsPerPage: 5,\n        descending: false,\n        totalItems: 0\n      }\n    }\n  },\n\n  props: {\n    headers: {\n      type: Array,\n      default: () => []\n    },\n    headerText: {\n      type: String,\n      default: 'text'\n    },\n    hideActions: Boolean,\n    noDataText: {\n      type: String,\n      default: 'No data available in table'\n    },\n    noResultsText: {\n      type: String,\n      default: 'No matching records found'\n    },\n    rowsPerPageItems: {\n      type: Array,\n      default () {\n        return [\n          5,\n          10,\n          25,\n          { text: 'All', value: -1 }\n        ]\n      }\n    },\n    rowsPerPageText: {\n      type: String,\n      default: 'Rows per page:'\n    },\n    selectAll: [Boolean, String],\n    search: {\n      required: false\n    },\n    filter: {\n      type: Function,\n      default: (val, search) => {\n        return val !== null &&\n          ['undefined', 'boolean'].indexOf(typeof val) === -1 &&\n          val.toString().toLowerCase().indexOf(search) !== -1\n      }\n    },\n    customFilter: {\n      type: Function,\n      default: (items, search, filter) => {\n        search = search.toString().toLowerCase()\n        return items.filter(i => Object.keys(i).some(j => filter(i[j], search)))\n      }\n    },\n    customSort: {\n      type: Function,\n      default: (items, index, descending) => {\n        return items.sort((a, b) => {\n          const sortA = getObjectValueByPath(a, index)\n          const sortB = getObjectValueByPath(b, index)\n\n          if (descending) {\n            if (!isNaN(sortA) && !isNaN(sortB)) return sortB - sortA\n            if (sortA < sortB) return 1\n            if (sortA > sortB) return -1\n            return 0\n          } else {\n            if (!isNaN(sortA) && !isNaN(sortB)) return sortA - sortB\n            if (sortA < sortB) return -1\n            if (sortA > sortB) return 1\n            return 0\n          }\n        })\n      }\n    },\n    value: {\n      type: Array,\n      default: () => []\n    },\n    items: {\n      type: Array,\n      required: true,\n      default: () => []\n    },\n    totalItems: {\n      type: Number,\n      default: null\n    },\n    loading: {\n      type: [Boolean, String],\n      default: false\n    },\n    selectedKey: {\n      type: String,\n      default: 'id'\n    },\n    pagination: {\n      type: Object,\n      default: null\n    }\n  },\n\n  computed: {\n    computedPagination () {\n      return this.pagination || this.defaultPagination\n    },\n    itemsLength () {\n      return this.totalItems || this.items.length\n    },\n    indeterminate () {\n      return this.selectAll && this.someItems && !this.everyItem\n    },\n    everyItem () {\n      return this.filteredItems.length && this.filteredItems.every(i => this.isSelected(i))\n    },\n    someItems () {\n      return this.filteredItems.some(i => this.isSelected(i))\n    },\n    pageStart () {\n      const page = this.computedPagination.rowsPerPage === Object(this.computedPagination.rowsPerPage)\n        ? this.computedPagination.rowsPerPage.value\n        : this.computedPagination.rowsPerPage\n      return page === -1 ? 0 : (this.computedPagination.page - 1) * page\n    },\n    pageStop () {\n      const page = this.computedPagination.rowsPerPage === Object(this.computedPagination.rowsPerPage)\n        ? this.computedPagination.rowsPerPage.value\n        : this.computedPagination.rowsPerPage\n      return page === -1 ? this.itemsLength : this.computedPagination.page * page\n    },\n    filteredItems () {\n      if (this.totalItems) return this.items\n\n      let items = this.items.slice()\n      const hasSearch = typeof this.search !== 'undefined' && this.search !== null\n\n      if (hasSearch) {\n        items = this.customFilter(items, this.search, this.filter)\n      }\n\n      items = this.customSort(items, this.computedPagination.sortBy, this.computedPagination.descending)\n\n      return this.hideActions && !this.pagination ? items : items.slice(this.pageStart, this.pageStop)\n    },\n    selected () {\n      const selected = {}\n      this.value.forEach(i => selected[i[this.selectedKey]] = true)\n      return selected\n    }\n  },\n\n  watch: {\n    indeterminate (val) {\n      if (val) this.all = true\n    },\n    someItems (val) {\n      if (!val) this.all = false\n    },\n    search () {\n      this.page = 1\n    },\n    everyItem (val) {\n      if (val) this.all = true\n    },\n    itemsLength () {\n      this.updatePagination({ totalItems: this.itemsLength })\n    }\n  },\n\n  methods: {\n    updatePagination (val) {\n      if (this.pagination) return this.$emit('update:pagination', Object.assign({}, this.pagination, val))\n      else (this.defaultPagination = Object.assign({}, this.defaultPagination, val))\n    },\n    isSelected (item) {\n      return this.selected[item[this.selectedKey]]\n    },\n    sort (index) {\n      if (this.computedPagination.sortBy === null) {\n        this.updatePagination({ sortBy: index, descending: false })\n      } else if (this.computedPagination.sortBy === index && !this.computedPagination.descending) {\n        this.updatePagination({ descending: true })\n      } else if (this.computedPagination.sortBy !== index) {\n        this.updatePagination({ sortBy: index, descending: false })\n      } else {\n        this.updatePagination({ sortBy: null, descending: null })\n      }\n    },\n    genTR (children, data = {}) {\n      return this.$createElement('tr', data, children)\n    },\n    toggle (value) {\n      const selected = Object.assign({}, this.selected)\n      this.filteredItems.forEach(i => selected[i[this.selectedKey]] = value)\n\n      this.$emit('input', this.items.filter(i => selected[i[this.selectedKey]]))\n    }\n  },\n\n  created () {\n    const firstSortable = this.headers.find(h => !('sortable' in h) || h.sortable)\n    this.defaultPagination.sortBy = firstSortable ? firstSortable.value : null\n\n    this.updatePagination(Object.assign({}, this.defaultPagination, this.pagination, { totalItems: this.itemsLength }))\n  },\n\n  render (h) {\n    return h('v-table-overflow', {}, [\n      h('table', {\n        'class': {\n          'datatable table': true,\n          'datatable--select-all': this.selectAll\n        }\n      }, [\n        this.genTHead(),\n        this.genTProgress(),\n        this.genTBody(),\n        this.hideActions ? null : this.genTFoot()\n      ])\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tables/DataTable.js"",""export default {\n  name: 'edit-dialog',\n\n  data () {\n    return {\n      isActive: false,\n      isSaving: false\n    }\n  },\n\n  props: {\n    cancelText: {\n      default: 'Cancel'\n    },\n    large: Boolean,\n    lazy: Boolean,\n    saveText: {\n      default: 'Save'\n    },\n    transition: {\n      type: String,\n      default: 'v-slide-x-reverse-transition'\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      val && this.$emit('open') && this.$nextTick(this.focus)\n      if (!val) {\n        !this.isSaving && this.$emit('cancel')\n        this.isSaving && this.$emit('close')\n        this.isSaving = false\n      }\n    }\n  },\n\n  methods: {\n    cancel () {\n      this.isActive = false\n    },\n    focus () {\n      const input = this.$el.querySelector('input')\n      input && setTimeout(() => (input.focus()), 0)\n    },\n    save () {\n      this.isSaving = true\n      this.isActive = false\n      this.$emit('save')\n    },\n    genButton (fn, text) {\n      return this.$createElement('v-btn', {\n        props: {\n          flat: true,\n          primary: true,\n          light: true\n        },\n        nativeOn: { click: fn }\n      }, text)\n    },\n    genActions () {\n      return this.$createElement('div', {\n        'class': 'small-dialog__actions',\n        directives: [{\n          name: 'show',\n          value: this.large\n        }]\n      }, [\n        this.genButton(this.cancel, this.cancelText),\n        this.genButton(this.save, this.saveText)\n      ])\n    },\n    genContent () {\n      return this.$createElement('div', {\n        'class': 'small-dialog__content',\n        on: {\n          keydown: e => {\n            e.keyCode === 27 && this.cancel()\n            e.keyCode === 13 && this.save()\n          }\n        }\n      }, [this.$slots.input])\n    }\n  },\n\n  render (h) {\n    return h('v-menu', {\n      'class': 'small-dialog',\n      props: {\n        transition: this.transition,\n        origin: 'top right',\n        right: true,\n        value: this.isActive,\n        closeOnContentClick: false,\n        lazy: this.lazy\n      },\n      on: {\n        input: val => (this.isActive = val)\n      }\n    }, [\n      h('a', {\n        domProps: { href: 'javascript:;' },\n        slot: 'activator'\n      }, [this.$slots.default]),\n      this.genContent(),\n      this.genActions()\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tables/EditDialog.js"",""import {\n  createSimpleFunctional\n} from '../../util/helpers'\n\nimport DataTable from './DataTable'\nimport EditDialog from './EditDialog'\nconst TableOverflow = createSimpleFunctional('table__overflow')\n\nexport default {\n  DataTable,\n  EditDialog,\n  TableOverflow\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tables/index.js"",""export default {\n  methods: {\n    genTBody () {\n      let children = []\n\n      if (!this.itemsLength) {\n        children = [this.genEmptyBody(this.noDataText)]\n      } else if (!this.filteredItems.length) {\n        children = [this.genEmptyBody(this.noResultsText)]\n      } else {\n        children = this.filteredItems.map((item) => {\n          const props = { item }\n\n          Object.defineProperty(props, 'selected', {\n            get: () => this.selected[item[this.selectedKey]],\n            set: (value) => {\n              let selected = this.value.slice()\n              value && selected.push(item) || (selected = selected.filter(i => i[this.selectedKey] !== item[this.selectedKey]))\n              this.$emit('input', selected)\n            }\n          })\n\n          return this.genTR(this.$scopedSlots.items(props), {\n            attrs: { active: this.isSelected(item) }\n          })\n        })\n      }\n\n      return this.$createElement('tbody', children)\n    },\n    genEmptyBody (text) {\n      return this.genTR([this.$createElement('td', {\n        'class': 'text-xs-center',\n        attrs: { colspan: '100%' }\n      }, text)])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tables/mixins/body.js"",""export default {\n  methods: {\n    genPrevIcon () {\n      return this.$createElement('v-btn', {\n        props: {\n          disabled: this.computedPagination.page === 1,\n          icon: true,\n          flat: true\n        },\n        nativeOn: { click: () => (this.computedPagination.page--) }\n      }, [this.$createElement('v-icon', 'chevron_left')])\n    },\n    genNextIcon () {\n      return this.$createElement('v-btn', {\n        props: {\n          disabled: this.computedPagination.page * this.computedPagination.rowsPerPage >= this.itemsLength || this.pageStop < 0,\n          icon: true,\n          flat: true\n        },\n        nativeOn: { click: () => (this.computedPagination.page++) }\n      }, [this.$createElement('v-icon', 'chevron_right')])\n    },\n    genSelect () {\n      return this.$createElement('div', {\n        'class': 'datatable__actions__select'\n      }, [\n        this.rowsPerPageText,\n        this.$createElement('v-select', {\n          props: {\n            items: this.rowsPerPageItems,\n            value: this.computedPagination.rowsPerPage,\n            hideDetails: true,\n            auto: true\n          },\n          on: { input: val => { this.computedPagination.rowsPerPage = val; this.computedPagination.page = 1 } }\n        })\n      ])\n    },\n    genPagination () {\n      let pagination = '&mdash;'\n\n      if (this.itemsLength) {\n        const stop = this.itemsLength < this.pageStop || this.pageStop < 0\n                ? this.itemsLength\n                : this.pageStop\n\n        pagination = `${this.pageStart + 1}-${stop} of ${this.itemsLength}`\n      }\n\n      return this.$createElement('div', {\n        'class': 'datatable__actions__pagination',\n        domProps: { innerHTML: pagination }\n      })\n    },\n    genActions () {\n      return [this.$createElement('div', {\n        'class': 'datatable__actions'\n      }, [\n        this.genSelect(),\n        this.genPagination(),\n        this.genPrevIcon(),\n        this.genNextIcon()\n      ])]\n    },\n    genTFoot () {\n      return this.$createElement('tfoot', [\n        this.genTR([\n          this.$createElement('td', {\n            attrs: { colspan: '100%' }\n          }, this.genActions())\n        ])\n      ])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tables/mixins/foot.js"",""export default {\n  methods: {\n    genTHead () {\n      const children = this.headers.map(o => this.genHeader(o))\n      const checkbox = this.$createElement('v-checkbox', {\n        props: {\n          dark: this.dark,\n          light: this.light,\n          primary: this.selectAll === 'primary',\n          secondary: this.selectAll === 'secondary',\n          success: this.selectAll === 'success',\n          info: this.selectAll === 'info',\n          warning: this.selectAll === 'warning',\n          error: this.selectAll === 'error',\n          hideDetails: true,\n          inputValue: this.all,\n          indeterminate: this.indeterminate\n        },\n        on: { change: this.toggle }\n      })\n\n      this.selectAll && children.unshift(this.$createElement('th', [checkbox]))\n\n      return this.$createElement('thead', [this.genTR(children)])\n    },\n    genHeader (item) {\n      const array = [\n        this.$scopedSlots.headers\n          ? this.$scopedSlots.headers({ item })\n          : item[this.headerText]\n      ]\n\n      return this.$createElement('th', ...this.genHeaderData(item, array))\n    },\n    genHeaderData (item, children) {\n      let beingSorted = false\n      const classes = ['column']\n      const data = {}\n\n      if ('sortable' in item && item.sortable || !('sortable' in item)) {\n        data.on = { click: () => this.sort(item.value) }\n        !('value' in item) && console.warn('Data table headers must have a value property that corresponds to a value in the v-model array')\n\n        classes.push('sortable')\n        const icon = this.$createElement('v-icon', 'arrow_upward')\n        item.left && children.push(icon) || children.unshift(icon)\n\n        beingSorted = this.computedPagination.sortBy === item.value\n        beingSorted && classes.push('active')\n        beingSorted && this.computedPagination.descending && classes.push('desc') || classes.push('asc')\n      }\n\n      item.left && classes.push('text-xs-left') || classes.push('text-xs-right')\n\n      data.class = classes\n\n      return [data, children]\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tables/mixins/head.js"",""export default {\n  data () {\n    return {\n      color: ''\n    }\n  },\n\n  watch: {\n    loading (val) {\n      if (!!val) this.color = val\n    }\n  },\n\n  methods: {\n    genTProgress () {\n      const loader = this.$createElement('v-progress-linear', {\n        props: {\n          primary: this.color === 'primary',\n          secondary: this.color === 'secondary',\n          success: this.color === 'success',\n          info: this.color === 'info',\n          warning: this.color === 'warning',\n          error: this.color === 'error',\n          indeterminate: true,\n          height: 3,\n          active: !!this.loading\n        }\n      })\n\n      const col = this.$createElement('th', {\n        class: 'column',\n        attrs: {\n          colspan: '100%'\n        }\n      }, [loader])\n\n      return this.$createElement('thead', { class: 'datatable__progress' }, [this.genTR([col])])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tables/mixins/progress.js"",""import Bootable from '../../mixins/bootable'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'tabs',\n\n  mixins: [Bootable, Themeable],\n\n  data () {\n    return {\n      activators: [],\n      activeIndex: null,\n      isMobile: false,\n      reverse: false,\n      target: null,\n      resizeDebounce: {},\n      tabsSlider: null,\n      targetEl: null\n    }\n  },\n\n  props: {\n    centered: Boolean,\n    grow: Boolean,\n    icons: Boolean,\n    mobileBreakPoint: {\n      type: [Number, String],\n      default: 1024\n    },\n    scrollBars: Boolean,\n    value: String\n  },\n\n  computed: {\n    classes () {\n      return {\n        'tabs': true,\n        'tabs--centered': this.centered,\n        'tabs--grow': this.grow,\n        'tabs--icons': this.icons,\n        'tabs--scroll-bars': this.scrollBars,\n        'tabs--dark': !this.light && this.dark,\n        'tabs--light': this.light || !this.dark\n      }\n    }\n  },\n\n  watch: {\n    value () {\n      this.tabClick(this.value)\n    },\n    activeIndex () {\n      if (this.isBooted) this.overflow = true\n\n      const activators = this.$slots.activators\n\n      if (!activators || !activators.length || !activators[0].componentInstance.$children) return\n\n      activators[0].componentInstance.$children\n        .filter(i => i.$options._componentTag === 'v-tabs-item')\n        .forEach(i => i.toggle(this.target))\n\n      this.$refs.content && this.$refs.content.$children.forEach(i => i.toggle(this.target, this.reverse, this.isBooted))\n      this.$emit('input', this.target)\n      this.isBooted = true\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(() => {\n      window.addEventListener('resize', this.resize, false)\n\n      const activators = this.$slots.activators\n\n      if (!activators || !activators.length || !activators[0].componentInstance.$children) return\n\n      const bar = activators[0].componentInstance.$children\n      // // This is a workaround to detect if link is active\n      // // when being used as a router or nuxt link\n      const i = bar.findIndex(t => {\n        return t.$el.firstChild.classList.contains('tabs__item--active')\n      })\n\n      const tab = this.value || (bar[i !== -1 ? i : 0] || {}).action\n\n      tab && this.tabClick(tab) && this.resize()\n    })\n  },\n\n  beforeDestroy () {\n    window.removeEventListener('resize', this.resize, false)\n  },\n\n  methods: {\n    resize () {\n      clearTimeout(this.resizeDebounce)\n\n      this.resizeDebounce = setTimeout(() => {\n        this.isMobile = window.innerWidth < this.mobileBreakPoint\n      }, 0)\n    },\n    slider (el) {\n      this.tabsSlider = this.tabsSlider || this.$el.querySelector('.tabs__slider')\n\n      if (!this.tabsSlider) return\n\n      this.targetEl = el || this.targetEl\n\n      if (!this.targetEl) return\n\n      // Gives DOM time to paint when\n      // processing slider for\n      // dynamic tabs\n      this.$nextTick(() => {\n        this.tabsSlider.style.width = `${this.targetEl.scrollWidth}px`\n        this.tabsSlider.style.left = `${this.targetEl.offsetLeft}px`\n      })\n    },\n    tabClick (target) {\n      this.target = target\n\n      if (!this.$refs.content) {\n        this.activeIndex = target\n        return\n      }\n\n      this.$nextTick(() => {\n        const nextIndex = this.$refs.content.$children.findIndex(i => i.id === this.target)\n        this.reverse = nextIndex < this.activeIndex\n        this.activeIndex = nextIndex\n      })\n    }\n  },\n\n  render (h) {\n    const content = []\n    const slot = []\n    const iter = (this.$slots.default || [])\n\n    iter.forEach(c => {\n      if (!c.componentOptions) slot.push(c)\n      else if (c.componentOptions.tag === 'v-tabs-content') content.push(c)\n      else slot.push(c)\n    })\n\n    const tabs = content.length ? h('v-tabs-items', {\n      ref: 'content'\n    }, content) : null\n\n    return h('div', {\n      'class': this.classes\n    }, [slot, this.$slots.activators, tabs])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tabs/Tabs.js"",""export default {\n  name: 'tabs-bar',\n\n  props: {\n    mobile: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'tabs__bar': true,\n        'tabs__bar--mobile': this.mobile\n      }\n    }\n  },\n\n  methods: {\n    scrollLeft () {\n      this.$refs.container.scrollLeft -= 75\n    },\n    scrollRight () {\n      this.$refs.container.scrollLeft += 75\n    }\n  },\n\n  render (h) {\n    const container = h('ul', {\n      'class': 'tabs__container',\n      ref: 'container'\n    }, this.$slots.default)\n\n    const left = h('v-icon', {\n      props: {\n        left: true\n      },\n      directives: [{\n        name: 'ripple',\n        value: ''\n      }],\n      on: {\n        click: this.scrollLeft\n      }\n    }, 'chevron_left')\n\n    const right = h('v-icon', {\n      props: {\n        right: true\n      },\n      directives: [{\n        name: 'ripple',\n        value: ''\n      }],\n      on: {\n        click: this.scrollRight\n      }\n    }, 'chevron_right')\n\n    return h('div', {\n      'class': this.classes\n    }, [container, left, right])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tabs/TabsBar.js"",""import { closestParentTag } from '../../util/helpers'\n\nexport default {\n  name: 'tabs-content',\n\n  data () {\n    return {\n      isActive: false,\n      reverse: false\n    }\n  },\n\n  props: {\n    id: {\n      type: String,\n      required: true\n    },\n    transition: {\n      type: String,\n      default: 'v-tab-transition'\n    },\n    reverseTransition: {\n      type: String,\n      default: 'v-tab-reverse-transition'\n    }\n  },\n\n  computed: {\n    computedTransition () {\n      return this.reverse ? this.reverseTransition : this.transition\n    },\n\n    tabs () {\n      return closestParentTag.call(this, 'v-tabs')\n    }\n  },\n\n  methods: {\n    toggle (target, reverse, showTransition) {\n      this.$el.style.transition = !showTransition ? 'none' : null\n      this.reverse = reverse\n      this.isActive = this.id === target\n    }\n  },\n\n  render (h) {\n    return h(this.computedTransition, {}, [\n      h('div', {\n        'class': 'tabs__content',\n        domProps: { id: this.id },\n        directives: [{\n          name: 'show',\n          value: this.isActive\n        }]\n      }, [this.$slots.default])])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tabs/TabsContent.js"",""import { closestParentTag } from '../../util/helpers'\nimport GenerateRouteLink from '../../mixins/route-link'\n\nexport default {\n  name: 'tabs-item',\n\n  mixins: [GenerateRouteLink],\n\n  data () {\n    return {\n      isActive: false,\n      defaultActiveClass: 'tabs__item--active'\n    }\n  },\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'tabs__item--active'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'tabs__item': true,\n        'tabs__item--active': !this.router && this.isActive,\n        'tabs__item--disabled': this.disabled\n      }\n    },\n\n    action () {\n      const to = this.to || this.href\n\n      if (to === Object(to)) return this._uid\n\n      return to.replace('#', '')\n    },\n\n    tabs () {\n      return closestParentTag.call(this, 'v-tabs')\n    }\n  },\n\n  methods: {\n    click (e) {\n      e.preventDefault()\n\n      this.tabs.tabClick(this.action)\n    },\n\n    toggle (action) {\n      this.isActive = this.action === action\n      this.$nextTick(() => {\n        this.isActive && this.tabs.slider(this.$el)\n      })\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n\n    return h('li', {}, [h(tag, data, [this.$slots.default])])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tabs/TabsItem.js"",""import {\n  createSimpleFunctional\n} from '../../util/helpers'\n\nimport Tabs from './Tabs'\nimport TabsItem from './TabsItem'\nimport TabsContent from './TabsContent'\nimport TabsBar from './TabsBar'\nconst TabsSlider = createSimpleFunctional('tabs__slider', 'li')\n\nconst TabsItems = {\n  name: 'tabs-items',\n\n  render (h) {\n    return h('div', { 'class': { 'tabs__items': true }}, [this.$slots.default])\n  }\n}\n\nexport default {\n  TabsItem,\n  TabsItems,\n  Tabs,\n  TabsContent,\n  TabsBar,\n  TabsSlider\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/tabs/index.js"",""import Themeable from '../../mixins/themeable'\n\nexport default {\n  functional: true,\n\n  mixins: [Themeable],\n\n  props: {\n    fixed: Boolean\n  },\n\n  render (h, { data, children, props }) {\n    data.staticClass = data.staticClass ? `toolbar ${data.staticClass}` : 'toolbar'\n    if (props.fixed) data.staticClass += ' toolbar--fixed'\n    data.staticClass += props.light ? ' toolbar--light' : ' toolbar--dark'\n\n    return h('nav', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/toolbar/Toolbar.js"",""import { closestParentTag } from '../../util/helpers'\nimport GenerateRouteLink from '../../mixins/route-link'\n\nexport default {\n  name: 'toolbar-item',\n\n  mixins: [GenerateRouteLink],\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'toolbar__item--active'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'toolbar__item': true,\n        'toolbar__item--disabled': this.disabled\n      }\n    },\n\n    listUID () {\n      return closestParentTag.call(this, 'v-list')\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n\n    return h('li', {}, [h(tag, data, [this.$slots.default])])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/toolbar/ToolbarItem.js"",""import Toolbar from './Toolbar'\nimport ToolbarItem from './ToolbarItem'\n\nimport {\n  createSimpleFunctional\n} from '../../util/helpers'\n\nconst ToolbarLogo = createSimpleFunctional('toolbar__logo')\nconst ToolbarTitle = createSimpleFunctional('toolbar__title')\nconst ToolbarSub = createSimpleFunctional('toolbar__sub')\nconst ToolbarItems = createSimpleFunctional('toolbar__items', 'ul')\nconst ToolbarSideIcon = {\n  functional: true,\n\n  render (h, { data, children }) {\n    data.staticClass = data.staticClass ? `toolbar__side-icon ${data.staticClass}` : 'toolbar__side-icon'\n    data.props = {\n      icon: true,\n      dark: true\n    }\n\n    return h('v-btn', data, [h('v-icon', 'menu')])\n  }\n}\n\nexport default {\n  Toolbar,\n  ToolbarItem,\n  ToolbarItems,\n  ToolbarLogo,\n  ToolbarTitle,\n  ToolbarSideIcon,\n  ToolbarSub\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/toolbar/index.js"",""import { createSimpleTransition } from '../../util/helpers'\n\nconst SlideXTransition = createSimpleTransition('slide-x-transition')\nconst SlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition')\nconst SlideYTransition = createSimpleTransition('slide-y-transition')\nconst SlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition')\nconst ScaleTransition = createSimpleTransition('scale-transition')\nconst TabTransition = createSimpleTransition('tab-transition')\nconst TabReverseTransition = createSimpleTransition('tab-reverse-transition')\nconst CarouselTransition = createSimpleTransition('carousel-transition')\nconst CarouselReverseTransition = createSimpleTransition('carousel-reverse-transition')\nconst DialogTransition = createSimpleTransition('dialog-transition')\nconst DialogBottomTransition = createSimpleTransition('dialog-bottom-transition')\nconst FadeTransition = createSimpleTransition('fade-transition')\nconst MenuTransition = createSimpleTransition('menu-transition')\n\nexport default {\n  SlideXTransition,\n  SlideXReverseTransition,\n  SlideYTransition,\n  SlideYReverseTransition,\n  ScaleTransition,\n  FadeTransition,\n  TabTransition,\n  TabReverseTransition,\n  DialogTransition,\n  DialogBottomTransition,\n  MenuTransition,\n  CarouselTransition,\n  CarouselReverseTransition\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/transitions/_index.js"",""import {\n  directiveConfig\n} from '../util/helpers'\n\nfunction directive (el, binding) {\n  const config = directiveConfig(\n    binding,\n    {\n      icon: false,\n      left: false,\n      overlap: false\n    }\n  )\n\n  if (config.overlap) el.classList.add('badge--overlap')\n  if (config.icon) el.classList.add('badge--icon')\n  if (config.left) el.classList.add('badge--left')\n\n  el.dataset.badge = config.value\n  el.classList.add('badge')\n}\n\nexport default {\n  bind: directive,\n  updated: directive,\n  componentUpdated: directive,\n  unbind: (el) => {\n    el.removeAttribute('data-badge')\n    el.classList.remove('badge')\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/badge.js"",""function directive (e, el, binding, v) {\n  let cb = () => true\n\n  if (binding.value) cb = binding.value\n\n  if (v.context.isActive &&\n    (e && e.target) &&\n    (e.target !== el && !el.contains(e.target)) &&\n    cb(e)\n  ) {\n    v.context.isActive = false\n  }\n}\n\nexport default {\n  bind (el, binding, v) {\n    v.context.$vuetify.load(() => {\n      const outside = document.querySelector('[data-app]') || document.body\n      const click = e => directive(e, el, binding, v)\n      outside.addEventListener('click', click, false)\n      el._clickOutside = click\n    })\n  },\n\n  unbind (el) {\n    const outside = document.querySelector('[data-app]') || document.body\n    outside.removeEventListener('click', el._clickOutside, false)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/click-outside.js"",""function style (el, value) {\n  [\n    'transform',\n    'webkitTransform'\n  ].forEach(i => {\n    el.style[i] = value\n  })\n}\n\nconst ripple = {\n  show: (e, el, { value = {}}) => {\n    var container = document.createElement('span')\n    var animation = document.createElement('span')\n\n    container.appendChild(animation)\n    container.className = 'ripple__container'\n\n    if (value.class) {\n      container.className += ` ${value.class}`\n    }\n\n    const size = el.clientWidth > el.clientHeight ? el.clientWidth : el.clientHeight\n    animation.className = 'ripple__animation'\n    animation.style.width = `${size * (value.center ? 1 : 2)}px`\n    animation.style.height = animation.style.width\n\n    el.appendChild(container)\n\n    const offset = el.getBoundingClientRect()\n    const x = value.center ? '50%' : `${e.clientX - offset.left}px`\n    const y = value.center ? '50%' : `${e.clientY - offset.top}px`\n\n    animation.classList.add('ripple__animation--enter')\n    animation.classList.add('ripple__animation--visible')\n    style(animation, `translate(-50%, -50%) translate(${x}, ${y}) scale3d(0.01,0.01,0.01)`)\n    animation.dataset.activated = Date.now()\n\n    setTimeout(() => {\n      animation.classList.remove('ripple__animation--enter')\n      style(animation, `translate(-50%, -50%) translate(${x}, ${y})  scale3d(0.99,0.99,0.99)`)\n    }, 0)\n  },\n\n  hide: (el) => {\n    const ripples = el.getElementsByClassName('ripple__animation')\n\n    if (ripples.length === 0) return\n    const animation = ripples[ripples.length - 1]\n    const diff = Date.now() - Number(animation.dataset.activated)\n    let delay = 400 - diff\n\n    delay = delay < 0 ? 0 : delay\n\n    setTimeout(() => {\n      animation.classList.remove('ripple__animation--visible')\n\n      setTimeout(() => {\n        // Need to figure out a new way to do this\n        try {\n          animation.parentNode && el.removeChild(animation.parentNode)\n        } catch (e) {}\n      }, 300)\n    }, delay)\n  }\n}\n\nfunction directive (el, binding, v) {\n  if (binding.value === false) return\n\n  if ('ontouchstart' in window) {\n    el.addEventListener('touchend', () => ripple.hide(el), false)\n    el.addEventListener('touchcancel', () => ripple.hide(el), false)\n  }\n\n  el.addEventListener('mousedown', e => ripple.show(e, el, binding), false)\n  el.addEventListener('mouseup', () => ripple.hide(el), false)\n  el.addEventListener('mouseleave', () => ripple.hide(el), false)\n}\n\nfunction unbind (el, binding) {\n  el.removeEventListener('touchstart', e => ripple.show(e, el, binding), false)\n  el.removeEventListener('mousedown', e => ripple.show(e, el, binding), false)\n  el.removeEventListener('touchend', () => ripple.hide(el), false)\n  el.removeEventListener('touchcancel', () => ripple.hide(el), false)\n  el.removeEventListener('mouseup', () => ripple.hide(el), false)\n  el.removeEventListener('mouseleave', () => ripple.hide(el), false)\n}\n\nexport default {\n  bind: directive,\n  unbind: unbind\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/ripple.js"",""import {\n  directiveConfig\n} from '../util/helpers'\n\nfunction directive (el, binding) {\n  const config = directiveConfig(\n    binding,\n    { top: true }\n  )\n\n  unbind(el, binding, config)\n\n  el.dataset.tooltip = config.html\n  el.dataset['tooltipLocation'] = config.value\n}\n\nfunction unbind (el) {\n  el.removeAttribute('data-tooltip')\n  el.removeAttribute('data-tooltip-location')\n}\n\nexport default {\n  bind: directive,\n  updated: directive,\n  componentUpdated: directive,\n  unbind: unbind\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/tooltip.js"",""export default {\n  data () {\n    return {\n      parallax: null,\n      parallaxDist: null,\n      elOffsetTop: null,\n      percentScrolled: null,\n      scrollTop: null,\n      windowHeight: null,\n      windowBottom: null\n    }\n  },\n\n  computed: {\n    normalizedHeight () {\n      return Number(this.height.toString().replace(/(^[0-9]*$)/, '$1'))\n    },\n\n    imgHeight () {\n      return this.objHeight()\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(this.init)\n  },\n\n  beforeDestroy () {\n    window.removeEventListener('scroll', this.translate, false)\n    document.removeEventListener('resize', this.translate, false)\n  },\n\n  methods: {\n    listeners () {\n      window.addEventListener('scroll', this.translate, false)\n      document.addEventListener('resize', this.translate, false)\n    },\n\n    translate () {\n      this.calcDimensions()\n\n      this.percentScrolled = (\n        (this.windowBottom - this.elOffsetTop) / (this.normalizedHeight + this.windowHeight)\n      )\n\n      this.parallax = Math.round(this.parallaxDist * this.percentScrolled)\n\n      if (this.translated) {\n        this.translated()\n      }\n    },\n\n    calcDimensions () {\n      const offset = this.$el.getBoundingClientRect()\n\n      this.scrollTop = window.pageYOffset\n      this.parallaxDist = this.imgHeight - this.normalizedHeight\n      this.elOffsetTop = offset.top + this.scrollTop\n      this.windowHeight = window.innerHeight\n      this.windowBottom = this.scrollTop + this.windowHeight\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/translatable.js"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'button-dropdown',\n\n  mixins: [Themeable],\n\n  data () {\n    return {\n      isActive: false,\n      inputValue: this.value,\n      editableValue: null\n    }\n  },\n\n  props: {\n    editable: Boolean,\n    options: {\n      type: Array,\n      default: () => []\n    },\n    maxHeight: {\n      type: [String, Number],\n      default: 200\n    },\n    overflow: Boolean,\n    label: {\n      type: String,\n      default: 'Select'\n    },\n    segmented: Boolean,\n    value: {\n      required: false\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'btn-dropdown--editable': this.editable,\n        'btn-dropdown--overflow': this.overflow || this.segmented || this.editable,\n        'btn-dropdown--segmented': this.segmented,\n        'btn-dropdown--light': this.light || !this.dark,\n        'btn-dropdown--dark': !this.light && this.dark\n      }\n    },\n\n    computedItems () {\n      if (this.editable) {\n        return this.options\n      }\n\n      if (this.index !== -1 &&\n        (this.overflow || this.segmented)\n      ) {\n        return this.options.filter((obj, i) => i !== this.index)\n      }\n\n      return this.options\n    },\n\n    index () {\n      return this.options.findIndex(i => i === this.inputValue)\n    }\n  },\n\n  mounted () {\n    if (this.inputValue) {\n      this.editableValue = this.inputValue.text\n    }\n  },\n\n  watch: {\n    inputValue () {\n      this.$emit('input', this.inputValue)\n    },\n\n    value () {\n      this.inputValue = typeof this.value === 'string' ? { text: this.value } : this.value\n      this.editableValue = this.inputValue.text\n    }\n  },\n\n  methods: {\n    toggle (active) {\n      this.isActive = active\n    },\n\n    updateValue (e, obj) {\n      if (e.keyCode === 13) {\n        this.$refs.input.$el.querySelector('input').blur()\n        this.isActive = false\n      }\n\n      if (typeof obj === 'string') {\n        obj = { text: obj }\n      }\n\n      this.inputValue = obj\n      this.editableValue = obj.text || obj.action\n      this.isActive = false\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/buttons/ButtonDropdown.vue"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'button-toggle',\n\n  mixins: [Themeable],\n\n  data () {\n    return {\n      inputValue: this.value\n    }\n  },\n\n  props: {\n    options: {\n      type: Array,\n      default: () => []\n    },\n\n    multiple: Boolean,\n\n    value: {\n      required: false\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'btn-toggle--selected': this.inputValue && !this.multiple || this.inputValue && this.inputValue.length > 0\n      }\n    }\n  },\n\n  watch: {\n    value () {\n      this.inputValue = this.value\n    }\n  },\n\n  methods: {\n    isSelected (item) {\n      if (!this.multiple) {\n        return this.inputValue === item.value\n      }\n\n      return this.inputValue.includes(item.value)\n    },\n\n    updateValue (item) {\n      if (!this.multiple) {\n        return this.$emit('input', this.inputValue === item.value ? null : item.value)\n      }\n\n      const items = this.inputValue.slice()\n\n      const i = items.indexOf(item.value)\n      if (i !== -1) {\n        items.splice(i, 1)\n      } else {\n        items.push(item.value)\n      }\n\n      this.$emit('input', items)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/buttons/ButtonToggle.vue"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport Bootable from '../../mixins/bootable'\n\nexport default {\n  name: 'carousel',\n\n  mixins: [Bootable],\n\n  data () {\n    return {\n      current: null,\n      items: [],\n      slideInterval: {},\n      reverse: false\n    }\n  },\n\n  props: {\n    cycle: {\n      type: Boolean,\n      default: true\n    },\n\n    icon: {\n      type: String,\n      default: 'fiber_manual_record'\n    },\n\n    interval: {\n      type: Number,\n      default: 6000\n    }\n  },\n\n  computed: {\n    defaultState () {\n      return {\n        current: null,\n        reverse: false\n      }\n    }\n  },\n\n  watch: {\n    current () {\n      // Evaluate items when current changes to account for\n      // dynamic changing of children\n      this.items = this.$children.filter(i => {\n        return i.$el.classList && i.$el.classList.contains('carousel__item')\n      })\n\n      this.items.forEach(i => i.open(this.items[this.current]._uid, this.reverse))\n\n      !this.isBooted && this.cycle && this.restartInterval()\n      this.isBooted = true\n    },\n    cycle (val) {\n      val && this.restartInterval() || clearInterval(this.slideInterval)\n    }\n  },\n\n  mounted () {\n    this.init()\n  },\n\n  methods: {\n    restartInterval () {\n      clearInterval(this.slideInterval)\n      this.$nextTick(this.startInterval)\n    },\n    init () {\n      this.current = 0\n    },\n    next () {\n      this.reverse = false\n\n      if (this.current + 1 === this.items.length) {\n        return (this.current = 0)\n      }\n\n      this.current++\n    },\n    prev () {\n      this.reverse = true\n\n      if (this.current - 1 < 0) {\n        return (this.current = this.items.length - 1)\n      }\n\n      this.current--\n    },\n    select (index) {\n      this.reverse = index < this.current\n      this.current = index\n    },\n    startInterval () {\n      this.slideInterval = setInterval(this.next, this.interval)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/carousel/Carousel.vue"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nexport default {\n  name: 'carousel-item',\n\n  data () {\n    return {\n      active: false,\n      reverse: false\n    }\n  },\n\n  props: {\n    src: {\n      type: String,\n      required: true\n    },\n\n    transition: {\n      type: String,\n      default: 'v-tab-transition'\n    },\n\n    reverseTransition: {\n      type: String,\n      default: 'v-tab-reverse-transition'\n    }\n  },\n\n  computed: {\n    computedTransition () {\n      return this.reverse ? this.reverseTransition : this.transition\n    },\n\n    styles () {\n      return {\n        backgroundImage: `url(${this.src})`\n      }\n    }\n  },\n\n  methods: {\n    open (id, reverse) {\n      this.active = this._uid === id\n      this.reverse = reverse\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/carousel/CarouselItem.vue"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport Expand from '../../mixins/expand-transition'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'expansion-panel-content',\n\n  mixins: [Expand, Toggleable],\n\n  data () {\n    return {\n      height: 'auto'\n    }\n  },\n\n  props: {\n    ripple: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'expansion-panel__header--active': this.isActive\n      }\n    }\n  },\n\n  mounted () {\n    // TODO: This is temporary, replace\n    if (this.value) {\n      this.$vuetify.load(() => {\n        setTimeout(() => {\n          this.$refs.body.style.height = `${this.$refs.body.clientHeight}px`\n        }, 1000)\n      })\n    }\n  },\n\n  methods: {\n    closeConditional (e) {\n      return this.$parent.$el.contains(e.target) && \n        !this.$parent.expand &&\n        !this.$el.contains(e.target)\n    },\n\n    toggle () {\n      this.isActive = !this.isActive\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/expansion-panel/ExpansionPanelContent.vue"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nexport default {\n  name: 'pagination',\n\n  props: {\n    circle: Boolean,\n\n    disabled: Boolean,\n\n    length: {\n      type: Number,\n      default: 0\n    },\n\n    value: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  watch: {\n    value () {\n      this.init()\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'pagination--circle': this.circle,\n        'pagination--disabled': this.disabled\n      }\n    },\n\n    items () {\n      if (this.length <= 5) {\n        return this.range(1, this.length)\n      }\n\n      let min = this.value - 3\n      min = min > 0 ? min : 1\n\n      let max = min + 6\n      max = max <= this.length ? max : this.length\n\n      if (max === this.length) {\n        min = this.length - 6\n      }\n\n      const range = this.range(min, max)\n\n      if (this.value >= 4 && this.length > 6) {\n        range.splice(0, 2, 1, '...')\n      }\n\n      if (this.value + 3 < this.length && this.length > 6) {\n        range.splice(range.length - 2, 2, '...', this.length)\n      }\n\n      return range\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load.call(this, this.init)\n  },\n\n  methods: {\n    init () {\n      this.selected = null\n\n      // Change this\n      setTimeout(() => (this.selected = this.value), 100)\n    },\n\n    range (from, to) {\n      const range = []\n\n      from = from > 0 ? from : 1\n\n      for (let i = from; i <= to; i++) {\n        range.push(i)\n      }\n\n      return range\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/pagination/Pagination.vue"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport Translatable from '../../mixins/translatable'\n\nexport default {\n  name: 'parallax',\n\n  mixins: [Translatable],\n\n  props: {\n    height: {\n      type: [String, Number],\n      default: 500\n    },\n\n    src: {\n      type: String,\n      required: true\n    }\n  },\n\n  computed: {\n    styles () {\n      return {\n        display: 'block',\n        transform: `translate3d(-50%, ${this.parallax}px, 0)`\n      }\n    }\n  },\n\n  methods: {\n    init () {\n      if (this.$refs.img.complete) {\n        this.translate()\n        this.listeners()\n      }\n\n      this.$refs.img.addEventListener('load', () => {\n        this.translate()\n        this.listeners()\n      }, false)\n    },\n\n    objHeight () {\n      return this.$refs.img.naturalHeight\n    },\n\n    elOffsetTop () {\n      return this.$el.offsetTop\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/parallax/Parallax.vue"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nexport default {\n  name: 'progress-circular',\n\n  props: {\n    button: Boolean,\n\n    fill: {\n      type: String,\n      default: () => this.indeterminate ? 'none' : 'transparent'\n    },\n\n    indeterminate: Boolean,\n\n    rotate: {\n      type: Number,\n      default: 0\n    },\n\n    size: {\n      type: [Number, String],\n      default: 32\n    },\n\n    width: {\n      type: Number,\n      default: 4\n    },\n\n    value: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  computed: {\n    calculatedSize () {\n      let size = Number(this.size)\n\n      if (this.button) {\n        size += 8\n      }\n\n      return size\n    },\n\n    circumference () {\n      return 2 * Math.PI * this.radius\n    },\n\n    classes () {\n      return {\n        'progress-circular--indeterminate': this.indeterminate,\n        'progress-circular--button': this.button\n      }\n    },\n\n    cxy () {\n      return this.indeterminate && !this.button ? 50 : this.calculatedSize / 2\n    },\n\n    normalizedValue () {\n      if (this.value < 0) {\n        return 0\n      }\n\n      if (this.value > 100) {\n        return 100\n      }\n\n      return this.value\n    },\n\n    radius () {\n      return this.indeterminate && !this.button ? 20 : (this.calculatedSize - this.width) / 2\n    },\n\n    strokeDashArray () {\n      return Math.round(this.circumference * 1000) / 1000\n    },\n\n    strokeDashOffset () {\n      return ((100 - this.normalizedValue) / 100) * this.circumference + 'px'\n    },\n\n    styles () {\n      return {\n        height: `${this.calculatedSize}px`,\n        width: `${this.calculatedSize}px`\n      }\n    },\n\n    svgSize () {\n      return this.indeterminate ? false : this.calculatedSize\n    },\n\n    svgStyles () {\n      return {\n        transform: `rotate(${this.rotate}deg)`\n      }\n    },\n\n    viewBox () {\n      return this.indeterminate ? '25 25 50 50' : false\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/progress/ProgressCircular.vue"",""//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nexport default {\n  name: 'progress',\n\n  props: {\n    active: {\n      type: Boolean,\n      default: true\n    },\n\n    buffer: Boolean,\n\n    bufferValue: Number,\n\n    error: Boolean,\n\n    height: {\n      type: [Number, String],\n      default: 7\n    },\n\n    indeterminate: Boolean,\n\n    info: Boolean,\n\n    secondary: Boolean,\n\n    success: Boolean,\n\n    query: Boolean,\n\n    warning: Boolean,\n\n    value: {\n      type: [Number, String],\n      default: 0\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'progress-linear--query': this.query,\n        'progress-linear--secondary': this.secondary,\n        'progress-linear--success': this.success,\n        'progress-linear--info': this.info,\n        'progress-linear--warning': this.warning,\n        'progress-linear--error': this.error\n      }\n    },\n\n    styles () {\n      const styles = {}\n\n      if (!this.active) {\n        styles.height = 0\n      }\n\n      if (this.buffer) {\n        styles.width = `${this.bufferValue}%`\n      }\n\n      return styles\n    },\n\n    bufferStyles () {\n      const styles = {}\n\n      if (!this.active) {\n        styles.height = 0\n      }\n\n      return styles\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/progress/ProgressLinear.vue"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./ButtonDropdown.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-15273120!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./ButtonDropdown.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/buttons/ButtonDropdown.vue\n// module id = 118\n// module chunks = 0"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./ButtonToggle.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-ff60beba!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./ButtonToggle.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/buttons/ButtonToggle.vue\n// module id = 119\n// module chunks = 0"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./Carousel.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-2f3748d0!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./Carousel.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/carousel/Carousel.vue\n// module id = 120\n// module chunks = 0"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./CarouselItem.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-2df38a83!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./CarouselItem.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/carousel/CarouselItem.vue\n// module id = 121\n// module chunks = 0"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./ExpansionPanelContent.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-36ce993c!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./ExpansionPanelContent.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/expansion-panel/ExpansionPanelContent.vue\n// module id = 122\n// module chunks = 0"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./Pagination.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-5a626450!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./Pagination.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/pagination/Pagination.vue\n// module id = 123\n// module chunks = 0"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./Parallax.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-69ea26b0!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./Parallax.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/parallax/Parallax.vue\n// module id = 124\n// module chunks = 0"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./ProgressCircular.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-2013aaa2!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./ProgressCircular.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/progress/ProgressCircular.vue\n// module id = 125\n// module chunks = 0"",""var Component = require(\""!../../../node_modules/vue-loader/lib/component-normalizer\"")(\n  /* script */\n  require(\""!!buble-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./ProgressLinear.vue\""),\n  /* template */\n  require(\""!!../../../node_modules/vue-loader/lib/template-compiler?id=data-v-6bb5de35!../../../node_modules/vue-loader/lib/template-loader?raw&engine=pug!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./ProgressLinear.vue\""),\n  /* scopeId */\n  null,\n  /* cssModules */\n  null\n)\n\nmodule.exports = Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/progress/ProgressLinear.vue\n// module id = 126\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    staticClass: \""btn-dropdown\"",\n    class: _vm.classes\n  }, [_c('v-menu', {\n    attrs: {\n      \""auto\"": !_vm.overflow && !_vm.segmented && !_vm.editable,\n      \""right\"": !_vm.overflow && !_vm.segmented && !_vm.editable,\n      \""max-height\"": _vm.maxHeight,\n      \""offset-y\"": _vm.overflow || _vm.segmented || _vm.editable,\n      \""close-on-click\"": _vm.isActive,\n      \""open-on-click\"": !_vm.isActive,\n      \""bottom\"": \""bottom\""\n    },\n    model: {\n      value: (_vm.isActive),\n      callback: function($$v) {\n        _vm.isActive = $$v\n      },\n      expression: \""isActive\""\n    }\n  }, [_c('v-text-field', {\n    ref: \""input\"",\n    attrs: {\n      \""type\"": _vm.editable ? 'text' : 'button',\n      \""label\"": _vm.label,\n      \""light\"": _vm.light || !_vm.dark,\n      \""dark\"": !_vm.light && _vm.dark,\n      \""single-line\"": \""single-line\"",\n      \""append-icon\"": \""arrow_drop_down\""\n    },\n    on: {\n      \""focus\"": function($event) {\n        _vm.isActive = arguments[0]\n      }\n    },\n    nativeOn: {\n      \""keyup\"": function($event) {\n        if (!('button' in $event) && _vm._k($event.keyCode, \""enter\"", 13)) { return null; }\n        (function (e) { return _vm.updateValue(e, _vm.editableValue); })($event)\n      }\n    },\n    slot: \""activator\"",\n    model: {\n      value: (_vm.editableValue),\n      callback: function($$v) {\n        _vm.editableValue = $$v\n      },\n      expression: \""editableValue\""\n    }\n  }), _c('v-list', _vm._l((_vm.options), function(option, index) {\n    return _c('v-list-item', [_c('v-list-tile', {\n      class: {\n        'list__tile--active': _vm.inputValue === option\n      },\n      nativeOn: {\n        \""click\"": function($event) {\n          (function (e) { return _vm.updateValue(e, option); })($event)\n        }\n      }\n    }, [(option.action) ? _c('v-list-tile-action', [_c('v-icon', {\n      attrs: {\n        \""light\"": _vm.light || !_vm.dark,\n        \""dark\"": !_vm.light && _vm.dark\n      }\n    }, [_vm._v(_vm._s(option.action))])], 1) : _vm._e(), (option.text) ? _c('v-list-tile-content', [_c('v-list-tile-title', [_vm._v(_vm._s(option.text))])], 1) : _vm._e()], 1)], 1)\n  }))], 1)], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-15273120!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/buttons/ButtonDropdown.vue\n// module id = 127\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    staticClass: \""progress-circular\"",\n    class: _vm.classes,\n    style: (_vm.styles)\n  }, [_c('svg', {\n    style: (_vm.svgStyles),\n    attrs: {\n      \""xmlns\"": \""http://www.w3.org/2000/svg\"",\n      \""height\"": _vm.svgSize,\n      \""width\"": _vm.svgSize,\n      \""viewBox\"": _vm.viewBox\n    }\n  }, [(!_vm.indeterminate) ? _c('circle', {\n    staticClass: \""progress-circular__underlay\"",\n    attrs: {\n      \""fill\"": \""transparent\"",\n      \""cx\"": _vm.cxy,\n      \""cy\"": _vm.cxy,\n      \""r\"": _vm.radius,\n      \""stroke-width\"": _vm.width,\n      \""stroke-dasharray\"": _vm.strokeDashArray,\n      \""stroke-dashoffset\"": 0\n    }\n  }) : _vm._e(), _c('circle', {\n    staticClass: \""progress-circular__overlay\"",\n    attrs: {\n      \""fill\"": _vm.fill,\n      \""cx\"": _vm.cxy,\n      \""cy\"": _vm.cxy,\n      \""r\"": _vm.radius,\n      \""stroke-width\"": _vm.width,\n      \""stroke-dasharray\"": _vm.strokeDashArray,\n      \""stroke-dashoffset\"": _vm.strokeDashOffset\n    }\n  })]), _c('div', {\n    staticClass: \""progress-circular__info\""\n  }, [_vm._t(\""default\"")], 2)])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-2013aaa2!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/progress/ProgressCircular.vue\n// module id = 128\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c(_vm.computedTransition, {\n    tag: \""component\""\n  }, [_c('div', {\n    directives: [{\n      name: \""show\"",\n      rawName: \""v-show\"",\n      value: (_vm.active),\n      expression: \""active\""\n    }],\n    staticClass: \""carousel__item\"",\n    class: {\n      'reverse': _vm.reverse\n    },\n    style: (_vm.styles)\n  }, [_vm._t(\""default\"")], 2)])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-2df38a83!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/carousel/CarouselItem.vue\n// module id = 129\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    staticClass: \""carousel\""\n  }, [_c('div', {\n    staticClass: \""carousel__left\""\n  }, [_c('v-btn', {\n    attrs: {\n      \""icon\"": \""icon\""\n    },\n    nativeOn: {\n      \""click\"": function($event) {\n        $event.stopPropagation();\n        _vm.prev($event)\n      }\n    }\n  }, [_c('v-icon', [_vm._v(\""chevron_left\"")])], 1)], 1), _c('div', {\n    staticClass: \""carousel__right\""\n  }, [_c('v-btn', {\n    attrs: {\n      \""icon\"": \""icon\""\n    },\n    nativeOn: {\n      \""click\"": function($event) {\n        $event.stopPropagation();\n        _vm.next($event)\n      }\n    }\n  }, [_c('v-icon', [_vm._v(\""chevron_right\"")])], 1)], 1), _c('div', {\n    staticClass: \""carousel__controls\""\n  }, _vm._l((_vm.items), function(item, index) {\n    return _c('v-btn', {\n      staticClass: \""carousel__controls__item\"",\n      class: {\n        'carousel__controls__item--active': index === _vm.current\n      },\n      attrs: {\n        \""icon\"": \""icon\""\n      },\n      nativeOn: {\n        \""click\"": function($event) {\n          $event.stopPropagation();\n          _vm.select(index)\n        }\n      }\n    }, [_c('v-icon', [_vm._v(_vm._s(_vm.icon))])], 1)\n  })), _vm._t(\""default\"")], 2)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-2f3748d0!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/carousel/Carousel.vue\n// module id = 130\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('li', [(_vm.$slots.header) ? _c('div', {\n    directives: [{\n      name: \""click-outside\"",\n      rawName: \""v-click-outside\"",\n      value: (_vm.closeConditional),\n      expression: \""closeConditional\""\n    }, {\n      name: \""ripple\"",\n      rawName: \""v-ripple\"",\n      value: (_vm.ripple),\n      expression: \""ripple\""\n    }],\n    staticClass: \""expansion-panel__header\"",\n    class: _vm.classes,\n    on: {\n      \""click\"": function($event) {\n        _vm.isActive = !_vm.isActive\n      }\n    }\n  }, [_vm._t(\""header\"")], 2) : _vm._e(), _c('transition', {\n    on: {\n      \""enter\"": _vm.enter,\n      \""after-enter\"": _vm.afterEnter,\n      \""leave\"": _vm.leave\n    }\n  }, [_c('div', {\n    directives: [{\n      name: \""show\"",\n      rawName: \""v-show\"",\n      value: (_vm.isActive),\n      expression: \""isActive\""\n    }],\n    ref: \""body\"",\n    staticClass: \""expansion-panel__body\""\n  }, [_vm._t(\""default\"")], 2)])], 1)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-36ce993c!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/expansion-panel/ExpansionPanelContent.vue\n// module id = 131\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('ul', {\n    staticClass: \""pagination\"",\n    class: _vm.classes\n  }, [_c('li', [_c('a', {\n    staticClass: \""pagination__navigation\"",\n    class: {\n      'pagination__navigation--disabled': _vm.value === 1\n    },\n    attrs: {\n      \""href\"": \""#!\""\n    },\n    on: {\n      \""click\"": function($event) {\n        $event.preventDefault();\n        _vm.$emit('input', _vm.value - 1)\n      }\n    }\n  }, [_c('v-icon', [_vm._v(\""chevron_left\"")])], 1)]), _vm._l((_vm.items), function(n) {\n    return _c('li', [(!isNaN(n)) ? _c('a', {\n      staticClass: \""pagination__item\"",\n      class: {\n        'pagination__item--active': n === _vm.value\n      },\n      attrs: {\n        \""href\"": \""#!\""\n      },\n      domProps: {\n        \""textContent\"": _vm._s(n)\n      },\n      on: {\n        \""click\"": function($event) {\n          $event.preventDefault();\n          _vm.$emit('input', n)\n        }\n      }\n    }) : _c('span', {\n      staticClass: \""pagination__more\"",\n      domProps: {\n        \""textContent\"": _vm._s(n)\n      }\n    })])\n  }), _c('li', [_c('a', {\n    staticClass: \""pagination__navigation\"",\n    class: {\n      'pagination__navigation--disabled': _vm.value === _vm.length\n    },\n    attrs: {\n      \""href\"": \""#!\""\n    },\n    on: {\n      \""click\"": function($event) {\n        $event.preventDefault();\n        _vm.$emit('input', _vm.value + 1)\n      }\n    }\n  }, [_c('v-icon', [_vm._v(\""chevron_right\"")])], 1)])], 2)\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-5a626450!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/pagination/Pagination.vue\n// module id = 132\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    staticClass: \""parallax\"",\n    style: ({\n      height: this.normalizedHeight + 'px'\n    })\n  }, [_c('div', {\n    staticClass: \""parallax__image-container\""\n  }, [_c('img', {\n    ref: \""img\"",\n    staticClass: \""parallax__image\"",\n    style: (_vm.styles),\n    attrs: {\n      \""src\"": _vm.src\n    }\n  })]), _c('div', {\n    staticClass: \""parallax__content\""\n  }, [_vm._t(\""default\"")], 2)])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-69ea26b0!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/parallax/Parallax.vue\n// module id = 133\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    staticClass: \""progress-linear\"",\n    class: _vm.classes,\n    style: ({\n      height: _vm.height + 'px'\n    })\n  }, [_c('div', {\n    staticClass: \""progress-linear__bar\"",\n    style: (_vm.styles)\n  }, [_c('v-fade-transition', [(_vm.indeterminate) ? _c('div', {\n    staticClass: \""progress-linear__bar__indeterminate\""\n  }) : _vm._e()]), _c('v-slide-x-transition', [(!_vm.indeterminate) ? _c('div', {\n    staticClass: \""progress-linear__bar__determinate\"",\n    style: ({\n      width: _vm.value + '%'\n    })\n  }) : _vm._e()])], 1)])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-6bb5de35!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/progress/ProgressLinear.vue\n// module id = 134\n// module chunks = 0"",""module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    staticClass: \""btn-toggle\"",\n    class: _vm.classes\n  }, _vm._l((_vm.options), function(option, index) {\n    return _c('v-btn', {\n      attrs: {\n        \""dark\"": _vm.dark,\n        \""light\"": _vm.light,\n        \""data-selected\"": _vm.isSelected(option),\n        \""data-index\"": index,\n        \""data-only-child\"": _vm.isSelected(option) && (!_vm.multiple || _vm.inputValue.length === 1),\n        \""flat\"": \""flat\""\n      },\n      nativeOn: {\n        \""click\"": function($event) {\n          $event.stopPropagation();\n          _vm.updateValue(option)\n        }\n      }\n    }, [(option.text) ? _c('span', {\n      domProps: {\n        \""textContent\"": _vm._s(option.text)\n      }\n    }) : _vm._e(), (option.icon) ? _c('v-icon', {\n      attrs: {\n        \""dark\"": _vm.dark,\n        \""light\"": _vm.light\n      }\n    }, [_vm._v(_vm._s(option.icon))]) : _vm._e()], 1)\n  }))\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-ff60beba!./~/vue-loader/lib/template-loader.js?raw&engine=pug!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/buttons/ButtonToggle.vue\n// module id = 135\n// module chunks = 0"",""require('./stylus/main.styl')\n\nimport Components from './components/_index'\nimport Directives from './directives/_index'\nimport Load from './util/load'\n\nfunction plugin (Vue) {\n  Object.keys(Components).forEach(key => {\n    Vue.component(`V${key}`, Components[key])\n  })\n\n  Object.keys(Directives).forEach(key => {\n    Vue.directive(key, Directives[key])\n  })\n\n  Vue.prototype.$vuetify = {\n    load: Load\n  }\n}\n\nif (typeof window !== 'undefined' && window.Vue) {\n  window.Vue.use(plugin)\n}\n\nexport default plugin\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js""],""sourceRoot"":""""}"
7f3c13f94039410ac55391ca381665454b669bed,3330919,        // http://stackoverflow.com/a/3330919)
536c1a9e64b95ac7f9f4946379d2c2d0007f75e8,5646121,// http://stackoverflow.com/questions/3192595/android-listview-that-does-not-scroll/5646121#5646121
2787ec7284c590a4c48161a75b2a2f44056b440a,25904582,    // See http://stackoverflow.com/a/25904582/1607849
4cdb1efbefbfb9880acc8592a9203144ec0a2475,54405162,- https://stackoverflow.com/a/54405162
28b0d01ab5f5abbbb48980f2d767f31dfd553eac,3841122,	 * Camera Rotation: http://stackoverflow.com/questions/3841122/android-camera-preview-is-sideways
f683ad9779a279cf3d9846bf056a658e4260c3ab,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
79a06d7f86d00d83e8b2e9d2f918af490232a8d8,5725430,// http://stackoverflow.com/questions/5725430/http-test-server-that-accepts-get-post-calls
4f5b71b20889ce25b769d587fd5ea1300ffdb4c6,1849580,'   http://stackoverflow.com/questions/1849580/export-ms-access-tables-through-vba-to-an-excel-spreadsheet-in-same-directory
df26853cae93b4685d715c07b5e6db8ba3f4475a,7728728,		@sa http://stackoverflow.com/a/7728728/266378
7bd6181ae1c872d2a252c4f3510fc243177142bd,3330919,        // http://stackoverflow.com/a/3330919)
9982162df64452bc3df3cba01e2a87ef53fc9839,6903762,/*! @source http://stackoverflow.com/questions/6903762/function-name-not-supported-in-ie*/
fb781d16cb0eeadf50d8cceb56491bd423b6195a,6146131,# http://stackoverflow.com/questions/6146131/python-gps-module-reading-latest-gps-data
194caa1667e7b6a9317e4646340fe5bc28d873bc,7125009,# http://stackoverflow.com/questions/7125009/how-to-change-legend-size-with-matplotlib-pyplot
87ec46bd60cbe208989497785c6549745907f77e,962890,// http://stackoverflow.com/a/962890
a44c876ba37398f5513a6a361cf17a26aa1d28f2,3330919,        // http://stackoverflow.com/a/3330919)
ad71c342565cbca3786f0cde1c483f1859f08a01,14601425,                //          (http://stackoverflow.com/questions/14601425/bootstrap-navbar-justify-span-menu-items-occupying-full-width)
f62d1e925d8f6ca4e837cd021703ad27220cd471,11694546,"4311623,story,,,75,79,tzury,""Divide a number by 3 without using * / + - % operators"",http://stackoverflow.com/questions/11694546/divide-a-number-by-3-without-using-operators,,1343642618"
6ffb5b9b54169b9c7931f98a1b77b1a6dd7644df,2450954,                            var shuffle = function (array) { //http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
83576e3091ef164ebf0c4edd100d62d64f1d2138,2008444,	// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
d7d230c6e25d225e9674b854675952b0783402b6,459691,/* https://stackoverflow.com/questions/459691/best-timing-method-in-c */
815b35a461d5a51c45a0014a4199720416ca05ae,1148309,/* courtesy of: http://stackoverflow.com/questions/1148309/inverting-a-4x4-matrix */
b1a27064be318bb3a0acfc907f5054fcbdfd2172,404750,# From https://stackoverflow.com/questions/404744/determining-application-path-in-a-python-exe-generated-by-pyinstaller#404750
5ae55fe9f832681e59a3999e54565fd4f689e431,6366408,        // from http://stackoverflow.com/questions/6366408/calculating-distance-between-two-latitude-and-longitude-geocoordinates
4b6b7c021ec1991d4639abd4819e4515c55b035b,36899612,* Difference between Apache NiFi and StreamSets http://stackoverflow.com/questions/36899612/difference-between-apache-nifi-and-streamsets
eca0f3c798f83e2864834e576ad16a01e5593665,8920939,* Android http://stackoverflow.com/a/8920939
9cfa249a47db131649bdf50b9f0da79520319ad2,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
a57fa7a785cdd22af6ea0e807a8d9dd756e3a27d,13140325,"            android:text=""XMLWriter:\nhttp://stackoverflow.com/a/13140325"""
311eef35d1aef3fc20e1489761041bd99e4bba1e,2117523,     * Found at {@link http://stackoverflow.com/a/2117523/2187510} and further improved at
3ff30325294ee98ecdbe4b22c3361bfd6e1ccc4a,3330919,        // http://stackoverflow.com/a/3330919)
0e9c24fbdaa647358aebf61d846c7bd30fc2bb55,38296756,I had to use the CMAKE_POSITION_INDEPENDENT_CODE option to revolve an issue as explained here https://stackoverflow.com/questions/38296756/what-is-the-idiomatic-way-in-cmake-to-add-the-fpic-compiler-option/38297422
af229dbab80a8f1985ee0d57beaebe741411a9eb,49797547,"With https://stackoverflow.com/questions/49797246/how-to-monitor-for-how-much-time-each-line-of-stdout-was-the-last-output-line-in/49797547#49797547[`ts`], we see that a large part of the difference is at the message:"
652acdae3c4cad1d0b17bf438be21bd171ff9dbc,37628,examples of reflection computer programming;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful; The servlet container will process the web.;servlet_container;0.6;0.006429277942631058;1.0;1.606429277942631;1.0;0;Wed Jun 28 00:04:02 IST 2017
8a31495e501b39e9f6ab06e30234325caa88f2ed,21002505,  http://stackoverflow.com/questions/1408824/an-easy-way-to-support-tags-in-a-jekyll-blog/21002505#21002505
408530bf63d06e31da79b2c082b656c0b87b8c88,2572366,	//http://stackoverflow.com/questions/2572366/how-to-use-dev-random-or-urandom-in-c
82d2c6902edaf57c8cfa7a65ace7c225b6738b6d,2696891,[Calling a method on an unitialized object (null pointer)](http://stackoverflow.com/questions/2696891/calling-a-method-on-an-unitialized-object-null-pointer)
be02e0512378f2dc7a4db76b6e69c8f6e774d04b,2117523,   * from http://stackoverflow.com/a/2117523/503463
ad6732437df5dddbaa6fb94409d3ef283426b5c1,5634460,   http://stackoverflow.com/questions/5634460/quadratic-bezier-curve-calculate-point
57a04c4743d4e11993734d1092d01505663445e9,8253362,[参考](http://stackoverflow.com/questions/8253362/etc-apt-sources-list-e212-cant-open-file-for-writing)
b06c71099674567bede1cf4aac3d0d044c90b591,744093,"        # use sed trick to reverse order of output, which is more portable than solutions with 'tail -r' or 'tac' (see http://stackoverflow.com/a/744093/3190077)"
c2aaf8030304bf08202216ee24e32cccc8f2ad5c,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
6f40eb5b15a2f4fb193cb1c933137dd5c4c0f3ed,19069183,"Following [the advice here](http://stackoverflow.com/questions/19069183/karma-throws-error-can-not-load-ng-html2js-it-is-not-registered),"
a4a84cdaae79a5caa9868181fcf56326bb8d5d35,37628,"examples of reflection computer programming;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful; JUnit 4, for example, will use reflection to look through your classes for methods tagged with the  Test annotation, and will then call them when running the unit test.;Unit testing;unit_test;0.6;0.006429277942631058;1.0;1.606429277942631;1.0;0;Wed Jun 28 00:04:02 IST 2017"
6c5590cdfa787cec040e28ed3b01b3dcd6867a36,22568222,	 * Based on http://stackoverflow.com/a/22568222/2826188
031f31dcf68c2c37c798ee03f967b7850a9e48bd,148570,# adapted from: http://stackoverflow.com/questions/148570/using-pre-compiled-headers-with-cmake
1408bf0955634d327f9707dee78446280fa1a6a6,30125293,          // http://stackoverflow.com/questions/30125293/angularjs-location-path-not-working-for-returnurl
2220d96e985774d341899e63879332e4b5d2ffa1,5539378,"// Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913)"
b25e67a4d60de238bac3029109d91266025f0d82,37628,0;324;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;science_fiction___fantasy;0.52;0.006429277942631058;1.0;1.526429277942631;0.0;0
b9c918aaa4d73096d9fde44f1f9ed0914d761835,6700,    // http://stackoverflow.com/a/6700/11236
bd735f4e83b34f8d1e014d7335113064ad47f8a8,15092437,"<a href=""http://stackoverflow.com/q/15092437?rq=1"" title=""Vote score (upvotes - downvotes)"">"
5b73284653ebccf1d579b9c6b01fcfc5976db571,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
281b6f684b9b13f51d6ad86433b93b09d66f7383,2687173,	http://stackoverflow.com/questions/2687173/
1106ad62a2352b6bf4ff482d0257def69d8c0bfa,14990971,						// see http://stackoverflow.com/q/14990971/145346
412cec10946a91ed74d334528fd525093c668386,758105,"        a(href=""http://stackoverflow.com/questions/758088/seeking-contrived-example-code-continuations/758105#758105"")"
c7d74b8cb6bb398a1535ba79b66fb4a221e09659,3173320,	# Taken from https://stackoverflow.com/questions/3173320/text-progress-bar-in-the-console
9bde9d14122afee2bf71df831eec02f00eae3f1d,3891513,"6621911,comment,6621679,6621679,32,0,m_mueller,,,""Could someone enlighten me what&#x27;s the advantage of this over LLVM-IR?<p>Edit: Ok, I&#x27;ve found the following SO thread: <a href=""""http://stackoverflow.com/questions/3891513/how-does-c-compare-to-llvm"""" rel=""""nofollow"""">http://stackoverflow.com/questions/3891513/how-does-c-compar...</a>"",1382881405"
13196aea42b54701d1caacc4f9d12e2492001207,7222382,"3. Given a latitude/longitude coordinate, a bearing, and a distance; return a latitude/longitude coordinate. I found this function in geopy. See example: http://stackoverflow.com/questions/7222382/get-lat-long-given-current-point-distance-and-bearing"
17f20f451380e963268528cfd49e73b43d23b62b,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
d2733c8cef6b05e14d0bbe6d2a8ed780e1ccdd9c,4675728,# http://stackoverflow.com/questions/4675728/redirect-stdout-to-a-file-in-python
0a3dff4d2570bba511b912ff56b61c7a62d5e775,43216659,"{""version"":3,""file"":""infinitegrid.pkgd.min.js"",""sources"":[""../node_modules/@egjs/component/dist/component.esm.js"",""../src/browser.js"",""../src/consts.js"",""../src/utils.js"",""../src/ItemManager.js"",""../src/DOMRenderer.js"",""../src/Watcher.js"",""../src/Infinite.js"",""../src/AutoSizer.js"",""../src/ImageLoaded.js"",""../src/LayoutManager.js"",""../src/InfiniteGrid.js"",""../src/layouts/GridLayout.js"",""../src/layouts/FrameLayout.js"",""../src/layouts/SquareLayout.js"",""../src/layouts/lib/BoxModel.js"",""../src/layouts/PackingLayout.js"",""../src/layouts/lib/dijkstra.js"",""../src/layouts/JustifiedLayout.js"",""../src/index.umd.js""],""sourcesContent"":[""/*\nCopyright (c) 2017 NAVER Corp.\n@egjs/component project is licensed under the MIT license\n\n@egjs/component JavaScript library\nhttps://naver.github.io/egjs-component\n\n@version 2.1.2\n*/\n/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nfunction isUndefined(value) {\n  return typeof value === \""undefined\"";\n}\n/**\n * A class used to manage events in a component\n * @ko 컴포넌트의 이벤트을 관리할 수 있게 하는 클래스\n * @alias eg.Component\n */\n\n\nvar Component =\n/*#__PURE__*/\nfunction () {\n  var Component =\n  /*#__PURE__*/\n  function () {\n    /**\n    * Version info string\n    * @ko 버전정보 문자열\n    * @name VERSION\n    * @static\n    * @type {String}\n    * @example\n    * eg.Component.VERSION;  // ex) 2.0.0\n    * @memberof eg.Component\n    */\n\n    /**\n     * @support {\""ie\"": \""7+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n     */\n    function Component() {\n      this._eventHandler = {};\n      this.options = {};\n    }\n    /**\n     * Triggers a custom event.\n     * @ko 커스텀 이벤트를 발생시킨다\n     * @param {String} eventName The name of the custom event to be triggered <ko>발생할 커스텀 이벤트의 이름</ko>\n     * @param {Object} customEvent Event data to be sent when triggering a custom event <ko>커스텀 이벤트가 발생할 때 전달할 데이터</ko>\n     * @return {Boolean} Indicates whether the event has occurred. If the stop() method is called by a custom event handler, it will return false and prevent the event from occurring. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">Ref</a> <ko>이벤트 발생 여부. 커스텀 이벤트 핸들러에서 stop() 메서드를 호출하면 'false'를 반환하고 이벤트 발생을 중단한다. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">참고</a></ko>\n     * @example\n    class Some extends eg.Component {\n     some(){\n     \tif(this.trigger(\""beforeHi\"")){ // When event call to stop return false.\n    \tthis.trigger(\""hi\"");// fire hi event.\n     \t}\n     }\n    }\n    const some = new Some();\n    some.on(\""beforeHi\"", (e) => {\n    if(condition){\n    \te.stop(); // When event call to stop, `hi` event not call.\n    }\n    });\n    some.on(\""hi\"", (e) => {\n    // `currentTarget` is component instance.\n    console.log(some === e.currentTarget); // true\n    });\n    // If you want to more know event design. You can see article.\n    // https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\n     */\n\n\n    var _proto = Component.prototype;\n\n    _proto.trigger = function trigger(eventName, customEvent) {\n      if (customEvent === void 0) {\n        customEvent = {};\n      }\n\n      var handlerList = this._eventHandler[eventName] || [];\n      var hasHandlerList = handlerList.length > 0;\n\n      if (!hasHandlerList) {\n        return true;\n      } // If detach method call in handler in first time then handler list calls.\n\n\n      handlerList = handlerList.concat();\n      customEvent.eventType = eventName;\n      var isCanceled = false;\n      var arg = [customEvent];\n      var i = 0;\n\n      customEvent.stop = function () {\n        isCanceled = true;\n      };\n\n      customEvent.currentTarget = this;\n\n      for (var _len = arguments.length, restParam = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        restParam[_key - 2] = arguments[_key];\n      }\n\n      if (restParam.length >= 1) {\n        arg = arg.concat(restParam);\n      }\n\n      for (i = 0; handlerList[i]; i++) {\n        handlerList[i].apply(this, arg);\n      }\n\n      return !isCanceled;\n    };\n    /**\n     * Executed event just one time.\n     * @ko 이벤트가 한번만 실행된다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       alert(\""hi\"");\n     }\n     thing() {\n       this.once(\""hi\"", this.hi);\n     }\n    }\n    var some = new Some();\n    some.thing();\n    some.trigger(\""hi\"");\n    // fire alert(\""hi\"");\n    some.trigger(\""hi\"");\n    // Nothing happens\n     */\n\n\n    _proto.once = function once(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var i;\n\n        for (i in eventHash) {\n          this.once(i, eventHash[i]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var self = this;\n        this.on(eventName, function listener() {\n          for (var _len2 = arguments.length, arg = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            arg[_key2] = arguments[_key2];\n          }\n\n          handlerToAttach.apply(self, arg);\n          self.off(eventName, listener);\n        });\n      }\n\n      return this;\n    };\n    /**\n     * Checks whether an event has been attached to a component.\n     * @ko 컴포넌트에 이벤트가 등록됐는지 확인한다.\n     * @param {String} eventName The name of the event to be attached <ko>등록 여부를 확인할 이벤트의 이름</ko>\n     * @return {Boolean} Indicates whether the event is attached. <ko>이벤트 등록 여부</ko>\n     * @example\n    class Some extends eg.Component {\n     some() {\n       this.hasOn(\""hi\"");// check hi event.\n     }\n    }\n     */\n\n\n    _proto.hasOn = function hasOn(eventName) {\n      return !!this._eventHandler[eventName];\n    };\n    /**\n     * Attaches an event to a component.\n     * @ko 컴포넌트에 이벤트를 등록한다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.on(\""hi\"",this.hi); //attach event\n     }\n    }\n    */\n\n\n    _proto.on = function on(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var name;\n\n        for (name in eventHash) {\n          this.on(name, eventHash[name]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var handlerList = this._eventHandler[eventName];\n\n        if (isUndefined(handlerList)) {\n          this._eventHandler[eventName] = [];\n          handlerList = this._eventHandler[eventName];\n        }\n\n        handlerList.push(handlerToAttach);\n      }\n\n      return this;\n    };\n    /**\n     * Detaches an event from the component.\n     * @ko 컴포넌트에 등록된 이벤트를 해제한다\n     * @param {eventName} eventName The name of the event to be detached <ko>해제할 이벤트의 이름</ko>\n     * @param {Function} handlerToDetach The handler function of the event to be detached <ko>해제할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself <ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.off(\""hi\"",this.hi); //detach event\n     }\n    }\n     */\n\n\n    _proto.off = function off(eventName, handlerToDetach) {\n      // All event detach.\n      if (isUndefined(eventName)) {\n        this._eventHandler = {};\n        return this;\n      } // All handler of specific event detach.\n\n\n      if (isUndefined(handlerToDetach)) {\n        if (typeof eventName === \""string\"") {\n          this._eventHandler[eventName] = undefined;\n          return this;\n        } else {\n          var eventHash = eventName;\n          var name;\n\n          for (name in eventHash) {\n            this.off(name, eventHash[name]);\n          }\n\n          return this;\n        }\n      } // The handler of specific event detach.\n\n\n      var handlerList = this._eventHandler[eventName];\n\n      if (handlerList) {\n        var k;\n        var handlerFunction;\n\n        for (k = 0; (handlerFunction = handlerList[k]) !== undefined; k++) {\n          if (handlerFunction === handlerToDetach) {\n            handlerList = handlerList.splice(k, 1);\n            break;\n          }\n        }\n      }\n\n      return this;\n    };\n\n    return Component;\n  }();\n\n  Component.VERSION = \""2.1.2\"";\n  return Component;\n}();\n\nexport default Component;\n//# sourceMappingURL=component.esm.js.map\n"",""/* eslint-disable no-new-func, no-nested-ternary */\n\nlet win;\n\nif (typeof window === \""undefined\"") {\n\t// window is undefined in node.js\n\twin = {\n\t\tdocument: {},\n\t\tnavigator: {\n\t\t\tuserAgent: \""\"",\n\t\t},\n\t};\n} else {\n\twin = window;\n}\n/* eslint-enable no-new-func, no-nested-ternary */\n\nexport {win as window};\nexport const document = win.document;\n"",""import {window, document} from \""./browser\"";\n\nconst ua = window.navigator.userAgent;\n\nexport const SUPPORT_COMPUTEDSTYLE = !!(\""getComputedStyle\"" in window);\nexport const SUPPORT_ADDEVENTLISTENER = !!(\""addEventListener\"" in document);\nexport const SUPPORT_PASSIVE = (() => {\n\tlet supportsPassiveOption = false;\n\n\ttry {\n\t\tif (SUPPORT_ADDEVENTLISTENER && Object.defineProperty) {\n\t\t\tdocument.addEventListener(\""test\"", null, Object.defineProperty({},\n\t\t\t\t\""passive\"", {\n\t\t\t\t\tget() {\n\t\t\t\t\t\tsupportsPassiveOption = true;\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t}\n\t} catch (e) {}\n\treturn supportsPassiveOption;\n})();\n\nexport const IS_IE = /MSIE|Trident|Windows Phone|Edge/.test(ua);\nexport const IS_IOS = /iPhone|iPad/.test(ua);\nexport const IS_ANDROID2 = /Android 2\\./.test(ua);\nexport const CONTAINER_CLASSNAME = \""_eg-infinitegrid-container_\"";\nexport const IGNORE_CLASSNAME = \""_eg-infinitegrid-ignore_\"";\nexport const TRANSITION_NAME = \""_INFINITEGRID_TRANSITION\"";\n\nexport const APPEND = true;\nexport const PREPEND = false;\nexport const VERTICAL = \""vertical\"";\nexport const HORIZONTAL = \""horizontal\"";\nexport const CACHE = true;\nexport const NO_CACHE = false;\nexport const TRUSTED = true;\nexport const NO_TRUSTED = false;\nexport const MULTI = true;\nexport const SINGLE = false;\nexport const DUMMY_POSITION = -100000;\nexport const GROUPKEY_ATT = \""data-groupkey\"";\n\nexport const DEFAULT_OPTIONS = {\n\thorizontal: false,\n\tmargin: 0,\n};\n\nexport const agent = ua.toLowerCase();\nexport const isMobile = /mobi|ios|android/.test(agent);\n\nexport const ALIGN = {\n\tSTART: \""start\"",\n\tCENTER: \""center\"",\n\tEND: \""end\"",\n\tJUSTIFY: \""justify\"",\n};\n\nexport const IDLE = 0;\nexport const LOADING_APPEND = 1;\nexport const LOADING_PREPEND = 2;\nexport const PROCESSING = 4;\n\n\nconst webkit = /applewebkit\\/([\\d|.]*)/g.exec(agent);\n\nexport const WEBKIT_VERSION = (webkit && parseInt(webkit[1], 10)) || 0;\nexport const DEFENSE_BROWSER = (WEBKIT_VERSION && WEBKIT_VERSION < 537);\n\n\nexport const [TRANSFORM, TRANSITION, TRANSITION_END] = (function() {\n\tconst properties = {\n\t\ttransitionend: \""\"",\n\t\twebkitTransitionEnd: \""-webkit-\"",\n\t\toTransitionEnd: \""-o-\"",\n\t\tmozTransitionEnd: \""-moz-\"",\n\t};\n\n\tfor (const property in properties) {\n\t\tconst prefix = properties[property];\n\n\t\tif (`on${property.toLowerCase()}` in window) {\n\t\t\treturn [`${prefix}transform`, `${prefix}transition`, property];\n\t\t}\n\t}\n\treturn [];\n})();\n"",""import {window, document} from \""./browser\"";\nimport {\n\tSUPPORT_COMPUTEDSTYLE,\n\tSUPPORT_ADDEVENTLISTENER,\n\tSUPPORT_PASSIVE,\n\tVERTICAL,\n\tHORIZONTAL,\n\tDEFAULT_OPTIONS,\n} from \""./consts\"";\n\nexport function toArray(nodes) {\n\t// SCRIPT5014 in IE8\n\tconst array = [];\n\n\tif (nodes) {\n\t\tfor (let i = 0, len = nodes.length; i < len; i++) {\n\t\t\tarray.push(nodes[i]);\n\t\t}\n\t}\n\treturn array;\n}\nexport function matchHTML(html) {\n\treturn html.match(/^<([A-z]+)\\s*([^>]*)>/);\n}\n/**\n * Select or create element\n * @param {String|HTMLElement|jQuery} param\n *  when string given is as HTML tag, then create element\n *  otherwise it returns selected elements\n * @param {Boolean} multi\n * @returns {HTMLElement}\n */\nexport function $(param, multi = false) {\n\tlet el;\n\n\tif (typeof param === \""string\"") { // String (HTML, Selector)\n\t\t// check if string is HTML tag format\n\t\tconst match = matchHTML(param);\n\n\t\t// creating element\n\t\tif (match) { // HTML\n\t\t\tconst dummy = document.createElement(\""div\"");\n\n\t\t\tdummy.innerHTML = param;\n\t\t\tel = dummy.childNodes;\n\t\t} else { // Selector\n\t\t\tel = document.querySelectorAll(param);\n\t\t}\n\t\tif (multi) {\n\t\t\tel = toArray(el);\n\t\t} else {\n\t\t\tel = (el && el.length > 0 && el[0]) || undefined;\n\t\t}\n\t} else if (param === window) { // window\n\t\tel = param;\n\t} else if (param.nodeName &&\n\t\t(param.nodeType === 1 || param.nodeType === 9)) { // HTMLElement, Document\n\t\tel = param;\n\t} else if ((typeof window.jQuery === \""function\"" && param instanceof window.jQuery) ||\n\t\tparam.constructor.prototype.jquery) { // jQuery\n\t\tel = $(multi ? param.toArray() : param.get(0), multi);\n\t} else if (Array.isArray(param)) {\n\t\tel = param.map(v => $(v));\n\t\tif (!multi) {\n\t\t\tel = el.length >= 1 ? el[0] : undefined;\n\t\t}\n\t}\n\treturn el;\n}\nexport function addEvent(element, type, handler, eventListenerOptions) {\n\tif (SUPPORT_ADDEVENTLISTENER) {\n\t\tlet options = eventListenerOptions || false;\n\n\t\tif (typeof eventListenerOptions === \""object\"") {\n\t\t\toptions = SUPPORT_PASSIVE ? eventListenerOptions : false;\n\t\t}\n\t\telement.addEventListener(type, handler, options);\n\t} else if (element.attachEvent) {\n\t\telement.attachEvent(`on${type}`, handler);\n\t} else {\n\t\telement[`on${type}`] = handler;\n\t}\n}\nexport function removeEvent(element, type, handler) {\n\tif (element.removeEventListener) {\n\t\telement.removeEventListener(type, handler, false);\n\t} else if (element.detachEvent) {\n\t\telement.detachEvent(`on${type}`, handler);\n\t} else {\n\t\telement[`on${type}`] = null;\n\t}\n}\nexport function addOnceEvent(element, type, handler, eventListenerOptions) {\n\tconst callback = e => {\n\t\tremoveEvent(element, type, callback);\n\t\thandler(e);\n\t};\n\n\taddEvent(element, type, callback, eventListenerOptions);\n}\nexport function scroll(el, horizontal = false) {\n\tconst prop = `scroll${horizontal ? \""Left\"" : \""Top\""}`;\n\n\tif (el === window) {\n\t\treturn window[horizontal ? \""pageXOffset\"" : \""pageYOffset\""] || document.body[prop] || document.documentElement[prop];\n\t} else {\n\t\treturn el[prop];\n\t}\n}\nexport function scrollTo(el, x, y) {\n\tif (el === window) {\n\t\tel.scroll(x, y);\n\t} else {\n\t\tel.scrollLeft = x;\n\t\tel.scrollTop = y;\n\t}\n}\nexport function scrollBy(el, x, y) {\n\tif (el === window) {\n\t\tel.scrollBy(x, y);\n\t} else {\n\t\tel.scrollLeft += x;\n\t\tel.scrollTop += y;\n\t}\n}\nexport function getStyles(el) {\n\treturn (SUPPORT_COMPUTEDSTYLE ?\n\t\twindow.getComputedStyle(el) : el.currentStyle) || {};\n}\nfunction _getSize(el, name, isOffset) {\n\tif (el === window) { // WINDOW\n\t\treturn window[`inner${name}`] || document.body[`client${name}`];\n\t} else if (el.nodeType === 9) { // DOCUMENT_NODE\n\t\tconst doc = el.documentElement;\n\n\t\treturn Math.max(\n\t\t\tel.body[`scroll${name}`], doc[`scroll${name}`],\n\t\t\tel.body[`offset${name}`], doc[`offset${name}`],\n\t\t\tdoc[`client${name}`]\n\t\t);\n\t} else { // NODE\n\t\tlet size = 0;\n\n\t\tif (isOffset) {\n\t\t\tconst clientRect = el.getBoundingClientRect();\n\n\t\t\tsize = name === \""Width\"" ? clientRect.right - clientRect.left : clientRect.bottom - clientRect.top;\n\t\t} else {\n\t\t\tsize = el[`client${name}`] || el[`offset${name}`];\n\t\t}\n\t\treturn parseFloat(size || getStyles(el)[name.toLowerCase()]) || 0;\n\t}\n}\nexport function innerWidth(el) {\n\treturn _getSize(el, \""Width\"", false);\n}\nexport function innerHeight(el) {\n\treturn _getSize(el, \""Height\"", false);\n}\nexport function outerWidth(el) {\n\treturn _getSize(el, \""Width\"", true);\n}\nexport function outerHeight(el) {\n\treturn _getSize(el, \""Height\"", true);\n}\nexport function getSize(el) {\n\treturn {\n\t\twidth: outerWidth(el),\n\t\theight: outerHeight(el),\n\t};\n}\nexport const STYLE = {\n\tvertical: {\n\t\tpos1: \""top\"",\n\t\tendPos1: \""bottom\"",\n\t\tsize1: \""height\"",\n\t\tpos2: \""left\"",\n\t\tendPos2: \""right\"",\n\t\tsize2: \""width\"",\n\t},\n\thorizontal: {\n\t\tpos1: \""left\"",\n\t\tendPos1: \""right\"",\n\t\tsize1: \""width\"",\n\t\tpos2: \""top\"",\n\t\tendPos2: \""bottom\"",\n\t\tsize2: \""height\"",\n\t},\n};\n\nexport function getStyleNames(isHorizontal) {\n\treturn STYLE[isHorizontal ? HORIZONTAL : VERTICAL];\n}\n\nexport function assignOptions(defaultOptions, options) {\n\treturn Object.assign({},\n\t\tDEFAULT_OPTIONS,\n\t\tdefaultOptions,\n\t\toptions);\n}\n\nexport function toZeroArray(outline) {\n\tif (!outline || !outline.length) {\n\t\treturn [0];\n\t}\n\treturn outline;\n}\nexport function cloneItems(items) {\n\treturn items.map(item => Object.assign({}, item));\n}\nexport function isWindow(el) {\n\treturn el === window;\n}\n\nexport function fill(arr, value) {\n\tconst length = arr.length;\n\n\tfor (let i = length - 1; i >= 0; --i) {\n\t\tarr[i] = value;\n\t}\n\n\treturn arr;\n}\n\nexport function isUndefined(target) {\n\treturn typeof target === \""undefined\"";\n}\n"",""import {MULTI, GROUPKEY_ATT, IGNORE_CLASSNAME, DUMMY_POSITION} from \""./consts\"";\nimport {$, toArray, isUndefined} from \""./utils\"";\n\nexport default class ItemManager {\n\tstatic from(elements, selector, {groupKey, isAppend}) {\n\t\tconst filted = ItemManager.selectItems($(elements, MULTI), selector);\n\n\t\t// Item Structure\n\t\treturn toArray(filted).map(el => ({\n\t\t\tel,\n\t\t\tgroupKey,\n\t\t\tcontent: el.outerHTML,\n\t\t\trect: {\n\t\t\t\ttop: DUMMY_POSITION,\n\t\t\t\tleft: DUMMY_POSITION,\n\t\t\t},\n\t\t}));\n\t}\n\tstatic selectItems(elements, selector) {\n\t\treturn elements.filter(v => {\n\t\t\tconst classNames = v.className.split(\"" \"");\n\n\t\t\tif (classNames.some(c => c === IGNORE_CLASSNAME)) {\n\t\t\t\treturn false;\n\t\t\t} else if (!selector || selector === \""*\"") {\n\t\t\t\treturn v;\n\t\t\t} else {\n\t\t\t\treturn classNames.some(c => c === selector);\n\t\t\t}\n\t\t});\n\t}\n\tstatic pluck(data, property) {\n\t\treturn data.reduce((acc, v) => acc.concat(v[property]), []);\n\t}\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\tgetStatus(startKey, endKey) {\n\t\tconst datas = this._data;\n\t\tconst startIndex = Math.max(this.indexOf(startKey), 0);\n\t\tconst endIndex = this.indexOf(endKey) + 1 || datas.length;\n\n\t\treturn {\n\t\t\t_data: datas.slice(startIndex, endIndex).map(data => {\n\t\t\t\tconst items = data.items.map(item => {\n\t\t\t\t\tconst item2 = Object.assign({}, item);\n\n\t\t\t\t\tdelete item2.el;\n\t\t\t\t\treturn item2;\n\t\t\t\t});\n\t\t\t\tconst data2 = Object.assign({}, data);\n\n\t\t\t\tdata2.items = items;\n\t\t\t\treturn data2;\n\t\t\t}),\n\t\t};\n\t}\n\tsetStatus(status) {\n\t\tconst data = status._data;\n\n\t\tthis.set(data);\n\t}\n\tsize() {\n\t\treturn this._data.length;\n\t}\n\tfit(base, horizontal) {\n\t\tif (!this._data.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst property = horizontal ? \""left\"" : \""top\"";\n\n\t\tif (base !== 0) {\n\t\t\tthis._data = this._data.map(v => {\n\t\t\t\tv.items = v.items.map(item => {\n\t\t\t\t\titem.rect[property] -= base;\n\t\t\t\t\treturn item;\n\t\t\t\t});\n\t\t\t\tv.outlines.start = v.outlines.start.map(start => start - base);\n\t\t\t\tv.outlines.end = v.outlines.end.map(end => end - base);\n\t\t\t\treturn v;\n\t\t\t});\n\t\t}\n\t}\n\tpluck(property, start, end) {\n\t\tconst data = isUndefined(start) ? this._data :\n\t\t\tthis._data.slice(start, (isUndefined(end) ? start : end) + 1);\n\n\t\treturn ItemManager.pluck(data, property);\n\t}\n\tgetOutline(index, property) {\n\t\tconst data = this._data[index];\n\n\t\treturn data ? data.outlines[property] : [];\n\t}\n\tgetEdgeIndex(cursor, start, end) {\n\t\tconst prop = cursor === \""start\"" ? \""min\"" : \""max\"";\n\t\tlet index = -1;\n\t\tlet targetValue = cursor === \""start\"" ? Infinity : -Infinity;\n\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tconst value = Math[prop](...this.getOutline(i, cursor));\n\n\t\t\tif ((cursor === \""start\"" && targetValue > value) ||\n\t\t\t\t(cursor === \""end\"" && targetValue < value)) {\n\t\t\t\ttargetValue = value;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\tgetEdgeValue(cursor, start, end) {\n\t\tconst outlines = this.pluck(\""outlines\"", this.getEdgeIndex(cursor, start, end))\n\t\t\t.reduce((acc, v) => acc.concat(v[cursor]), []);\n\n\t\treturn outlines.length ? Math[cursor === \""start\"" ? \""min\"" : \""max\""](...outlines) : 0;\n\t}\n\tclearOutlines(startCursor = -1, endCursor = -1) {\n\t\tconst datas = this.get();\n\n\t\tdatas.forEach((group, cursor) => {\n\t\t\tif (startCursor <= cursor && cursor <= endCursor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgroup.items.forEach(item => {\n\t\t\t\titem.rect.top = DUMMY_POSITION;\n\t\t\t\titem.rect.left = DUMMY_POSITION;\n\t\t\t});\n\t\t\tgroup.outlines.start = [];\n\t\t\tgroup.outlines.end = [];\n\t\t});\n\t}\n\tgetMaxEdgeValue() {\n\t\tconst groups = this.get();\n\t\tconst length = groups.length;\n\n\t\tfor (let i = length - 1; i >= 0; --i) {\n\t\t\tconst end = groups[i].outlines.end;\n\n\t\t\tif (end.length) {\n\t\t\t\tconst pos = Math.max(...end);\n\n\t\t\t\treturn pos;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\tappend(layouted) {\n\t\tthis._data.push(layouted);\n\t\treturn layouted.items;\n\t}\n\tprepend(layouted) {\n\t\tthis._data.unshift(layouted);\n\t\treturn layouted.items;\n\t}\n\tclear() {\n\t\tthis._data = [];\n\t}\n\tremove(element, start, end) {\n\t\tlet items = [];\n\t\tconst key = element.getAttribute(GROUPKEY_ATT);\n\t\tlet data = this.get(start, end)\n\t\t\t.filter(v => String(v.groupKey) === key);\n\n\t\tif (!data.length) {\n\t\t\treturn items;\n\t\t}\n\t\tdata = data[0];\n\n\t\tconst len = data.items.length;\n\t\tlet idx = -1;\n\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tif (data.items[i].el === element) {\n\t\t\t\tidx = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (~idx) {\n\t\t\t// remove item information\n\t\t\tdata.items.splice(idx, 1);\n\t\t\tthis.set(data, key);\n\t\t\titems = data.items;\n\t\t}\n\t\treturn items;\n\t}\n\tindexOf(data) {\n\t\tconst groupKey = typeof data === \""object\"" ? data.groupKey : data;\n\t\tconst datas = this._data;\n\t\tconst length = datas.length;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tif (groupKey === datas[i].groupKey) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tget(start, end) {\n\t\treturn isUndefined(start) ? this._data :\n\t\t\tthis._data.slice(start, (isUndefined(end) ? start : end) + 1);\n\t}\n\tset(data, key) {\n\t\tif (!isUndefined(key) && !Array.isArray(data)) {\n\t\t\tconst len = this._data.length;\n\t\t\tlet idx = -1;\n\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tif (this._data[i].groupKey === key) {\n\t\t\t\t\tidx = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t~idx && (this._data[idx] = data);\n\t\t} else {\n\t\t\tthis._data = data.concat();\n\t\t}\n\t}\n\tgetData(index) {\n\t\treturn this._data[index];\n\t}\n}\n"",""import {\n\tAPPEND,\n\tPREPEND,\n\tDUMMY_POSITION,\n\tMULTI,\n\tGROUPKEY_ATT,\n\tCONTAINER_CLASSNAME,\n\tTRANSITION_NAME,\n\tTRANSITION,\n\tTRANSITION_END,\n\tTRANSFORM,\n} from \""./consts\"";\nimport {window, document} from \""./browser\"";\nimport {\n\t$,\n\tinnerHeight,\n\tinnerWidth,\n\tgetSize,\n\tgetStyles,\n\taddOnceEvent,\n} from \""./utils\"";\n\n\nexport function resetSize(item) {\n\titem.orgSize = 0;\n\titem.size = 0;\n}\nfunction createContainer(element) {\n\tconst container = document.createElement(\""div\"");\n\n\tcontainer.className = CONTAINER_CLASSNAME;\n\tcontainer.style.position = \""relative\"";\n\tcontainer.style.height = \""100%\"";\n\n\tconst children = element.children;\n\tconst length = children.length;\t// for IE8\n\n\tfor (let i = 0; i < length; i++) {\n\t\tcontainer.appendChild(children[0]);\n\t}\n\telement.appendChild(container);\n\treturn container;\n}\nfunction render(properties, rect, styles) {\n\tproperties.forEach(p => {\n\t\t(p in rect) && (styles[p] = `${rect[p]}px`);\n\t});\n}\nfunction setTransition(styles, transitionDuration, pos1, pos2) {\n\tstyles[`${TRANSITION}-property`] = transitionDuration ? `${TRANSFORM},width,height` : \""\"";\n\tstyles[`${TRANSITION}-duration`] = transitionDuration ? `${transitionDuration}s` : \""\"";\n\tstyles[`${TRANSITION}-delay`] = transitionDuration ? `0s` : \""\"";\n\tstyles[TRANSFORM] = transitionDuration ? `translate(${pos1.left - pos2.left}px,${pos1.top - pos2.top}px)` : \""\"";\n}\n\nexport default class DOMRenderer {\n\tstatic renderItem(item, rect, transitionDuration) {\n\t\tif (!item.el) {\n\t\t\treturn;\n\t\t}\n\t\tconst {el, prevRect} = item;\n\t\tconst styles = el.style;\n\n\t\t// for debugging\n\t\tel.setAttribute(GROUPKEY_ATT, item.groupKey);\n\t\tstyles.position = \""absolute\"";\n\t\trender([\""width\"", \""height\""], rect, styles);\n\t\tif (transitionDuration && TRANSITION && prevRect) {\n\t\t\tsetTransition(styles, transitionDuration, rect, prevRect);\n\t\t\tif (el[TRANSITION_NAME]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tel[TRANSITION_NAME] = true;\n\t\t\taddOnceEvent(el, TRANSITION_END, () => {\n\t\t\t\tconst itemRect = item.rect;\n\n\t\t\t\tsetTransition(styles);\n\t\t\t\trender([\""left\"", \""top\""], itemRect, styles);\n\t\t\t\titem.prevRect = itemRect;\n\t\t\t\tel[TRANSITION_NAME] = false;\n\t\t\t});\n\t\t} else {\n\t\t\trender([\""left\"", \""top\""], rect, styles);\n\t\t\titem.prevRect = rect;\n\t\t}\n\t}\n\tstatic renderItems(items, transitionDuration) {\n\t\titems.forEach(item => {\n\t\t\tDOMRenderer.renderItem(item, item.rect, transitionDuration);\n\t\t});\n\t}\n\tstatic removeItems(items) {\n\t\titems.forEach(item => {\n\t\t\tif (item.el) {\n\t\t\t\tDOMRenderer.removeElement(item.el);\n\t\t\t\titem.el = null;\n\t\t\t}\n\t\t});\n\t}\n\tstatic removeElement(element) {\n\t\tconst parentNode = element && element.parentNode;\n\n\t\tif (!parentNode) {\n\t\t\treturn;\n\t\t}\n\t\tparentNode.removeChild(element);\n\t}\n\tstatic createElements(items) {\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst noElementItems = items.filter(item => !item.el);\n\n\t\tif (!noElementItems.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst elements = $(noElementItems.map(({content}) =>\n\t\t\tcontent.replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, \""\"")).join(\""\""), MULTI);\n\n\t\tnoElementItems.forEach((item, index) => {\n\t\t\titem.el = elements[index];\n\t\t});\n\t}\n\tconstructor(element, options) {\n\t\tObject.assign(this.options = {\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\thorizontal: false,\n\t\t\tcontainer: false,\n\t\t}, options);\n\t\tthis._size = {\n\t\t\tcontainer: -1,\n\t\t\tview: -1,\n\t\t\tviewport: -1,\n\t\t\titem: null,\n\t\t};\n\t\tthis._init(element);\n\t\tthis.resize();\n\t}\n\tgetStatus() {\n\t\treturn {\n\t\t\tcssText: this.container.style.cssText,\n\t\t\t_size: Object.assign({}, this._size),\n\t\t};\n\t}\n\tsetStatus(status) {\n\t\tthis.container.style.cssText = status.cssText;\n\t\tObject.assign(this._size, status._size);\n\t}\n\tupdateSize(items) {\n\t\tconst {isEqualSize, isConstantSize} = this.options;\n\t\tconst size = this._size;\n\n\t\treturn items.map(item => {\n\t\t\tif (!item.el) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t\tif (isEqualSize && !size.item) {\n\t\t\t\tsize.item = getSize(item.el);\n\t\t\t}\n\t\t\titem.size = (isEqualSize && Object.assign(size.item)) ||\n\t\t\t\t\t\t(isConstantSize && item.orgSize && Object.assign(item.orgSize)) ||\n\t\t\t\t\t\tgetSize(item.el);\n\t\t\tif (!item.orgSize) {\n\t\t\t\titem.orgSize = Object.assign({}, item.size);\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t}\n\t_init(el) {\n\t\tconst element = $(el);\n\t\tconst style = getStyles(element);\n\t\tconst {container, horizontal} = this.options;\n\n\t\tthis._orgStyle = {};\n\n\t\tif (style.position === \""static\"") {\n\t\t\tthis._orgStyle.position = element.style.position;\n\t\t\telement.style.position = \""relative\"";\n\t\t}\n\t\tif (container) {\n\t\t\tconst target = horizontal ? [\""X\"", \""Y\""] : [\""Y\"", \""X\""];\n\n\t\t\tthis._orgStyle.overflowX = element.style.overflowX;\n\t\t\tthis._orgStyle.overflowY = element.style.overflowY;\n\t\t\telement.style[`overflow${target[0]}`] = \""scroll\"";\n\t\t\telement.style[`overflow${target[1]}`] = \""hidden\"";\n\t\t\tthis.view = element;\n\t\t\tthis.container = container === true ? createContainer(this.view) : container;\n\t\t} else {\n\t\t\tthis.view = window;\n\t\t\tthis.container = element;\n\t\t}\n\t}\n\tappend(items) {\n\t\tthis._insert(items, APPEND, {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t});\n\t}\n\tprepend(items) {\n\t\tthis._insert(items, PREPEND, {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t});\n\t}\n\tcreateAndInsert(items, isAppend) {\n\t\tDOMRenderer.createElements(items);\n\n\t\tDOMRenderer.renderItems(items);\n\t\tthis._insert(items, isAppend);\n\t}\n\t_insert(items, isAppend, styles) {\n\t\tconst container = this.container;\n\t\tconst df = document.createDocumentFragment();\n\n\t\titems.forEach(item => {\n\t\t\tstyles && DOMRenderer.renderItem(item, styles);\n\t\t\tisAppend ? df.appendChild(item.el) : df.insertBefore(item.el, df.firstChild);\n\t\t});\n\t\tisAppend ?\n\t\t\tcontainer.appendChild(df) :\n\t\t\tcontainer.insertBefore(df, container.firstChild);\n\t}\n\t_calcSize() {\n\t\treturn this.options.horizontal ?\n\t\t\tinnerHeight(this.container) : innerWidth(this.container);\n\t}\n\tgetViewSize() {\n\t\treturn this._size.view;\n\t}\n\tgetViewportSize() {\n\t\treturn this._size.viewport;\n\t}\n\tsetContainerSize(size) {\n\t\tthis.container.style[this.options.horizontal ? \""width\"" : \""height\""] = `${size}px`;\n\t}\n\tresize() {\n\t\tconst horizontal = this.options.horizontal;\n\t\tconst view = this.view;\n\t\tconst isResize = this.isNeededResize();\n\n\t\tif (isResize) {\n\t\t\tthis._size = {\n\t\t\t\tviewport: this._calcSize(),\n\t\t\t\titem: null,\n\t\t\t};\n\t\t}\n\t\tthis._size.view = horizontal ? innerWidth(view) : innerHeight(view);\n\t\treturn isResize;\n\t}\n\tisNeededResize() {\n\t\treturn this._calcSize() !== this._size.viewport;\n\t}\n\tclear() {\n\t\tthis.container.innerHTML = \""\"";\n\t\tthis.container.style[this.options.horizontal ? \""width\"" : \""height\""] = \""\"";\n\n\t\tthis._size = {\n\t\t\titem: null,\n\t\t\tviewport: -1,\n\t\t\tcontainer: -1,\n\t\t\tview: -1,\n\t\t};\n\t}\n\tdestroy() {\n\t\tthis.clear();\n\t\tconst container = this.options.container;\n\n\t\tfor (const p in this._orgStyle) {\n\t\t\tthis[container ? \""view\"" : \""container\""].style[p] = this._orgStyle[p];\n\t\t}\n\t\tcontainer && this.container.parentNode.removeChild(this.container);\n\t}\n}\n\n"",""import {\n\tIS_IOS,\n} from \""./consts\"";\nimport {\n\twindow,\n} from \""./browser\"";\nimport {\n\taddEvent,\n\tremoveEvent,\n\tscroll,\n\tscrollTo,\n\tscrollBy,\n} from \""./utils\"";\n\nexport default class Watcher {\n\tconstructor(view, options) {\n\t\tObject.assign(this.options = {\n\t\t\tcontainer: view,\n\t\t\tresize: () => {},\n\t\t\tcheck: () => {},\n\t\t\tisOverflowScroll: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\t\tthis._timer = {\n\t\t\tresize: null,\n\t\t\t// doubleCheck: null,\n\t\t\t// doubleCheckCount: RETRY,\n\t\t};\n\t\tthis.reset();\n\t\tthis._containerOffset = 0;\n\t\tthis._view = view;\n\t\tthis._scrollIssue = IS_IOS;\n\t\tthis._onCheck = this._onCheck.bind(this);\n\t\tthis._onResize = this._onResize.bind(this);\n\t\tthis.attachEvent();\n\t\tthis.resize();\n\t\tthis.setScrollPos();\n\t}\n\tgetStatus() {\n\t\treturn {\n\t\t\t_prevPos: this._prevPos,\n\t\t\tscrollPos: this.getOrgScrollPos(),\n\t\t};\n\t}\n\tsetStatus(status, applyScrollPos = true) {\n\t\tthis._prevPos = status._prevPos;\n\t\tapplyScrollPos && this.scrollTo(status.scrollPos);\n\t}\n\tscrollBy(pos) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollBy(this._view, ...arrPos);\n\t\tthis.setScrollPos();\n\t}\n\tscrollTo(pos) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollTo(this._view, ...arrPos);\n\t}\n\tgetScrollPos() {\n\t\treturn this._prevPos;\n\t}\n\tsetScrollPos(pos) {\n\t\tlet rawPos = pos;\n\n\t\tif (typeof pos === \""undefined\"") {\n\t\t\trawPos = this.getOrgScrollPos();\n\t\t}\n\t\tthis._prevPos = rawPos - this.getContainerOffset();\n\t}\n\tattachEvent() {\n\t\taddEvent(this._view, \""scroll\"", this._onCheck);\n\t\taddEvent(window, \""resize\"", this._onResize);\n\t}\n\tgetOrgScrollPos() {\n\t\treturn scroll(this._view, this.options.horizontal);\n\t}\n\treset() {\n\t\tthis._prevPos = null;\n\t}\n\t_onCheck() {\n\t\tconst prevPos = this.getScrollPos();\n\t\tconst orgScrollPos = this.getOrgScrollPos();\n\n\t\tthis.setScrollPos(orgScrollPos);\n\t\tconst scrollPos = this.getScrollPos();\n\n\t\tif (prevPos === null || (this._scrollIssue && orgScrollPos === 0) || prevPos === scrollPos) {\n\t\t\torgScrollPos && (this._scrollIssue = false);\n\t\t\treturn;\n\t\t}\n\t\tthis._scrollIssue = false;\n\t\tthis.options.check({\n\t\t\tisForward: prevPos < scrollPos,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t\thorizontal: this.options.horizontal,\n\t\t});\n\t}\n\tgetContainerOffset() {\n\t\treturn this._containerOffset;\n\t}\n\t_getOffset() {\n\t\tconst {container, horizontal} = this.options;\n\t\tconst rect = container.getBoundingClientRect();\n\n\t\treturn rect[horizontal ? \""left\"" : \""top\""] + this.getOrgScrollPos();\n\t}\n\tresize() {\n\t\tthis._containerOffset = this.options.isOverflowScroll ? 0 : this._getOffset();\n\t}\n\t_onResize() {\n\t\tif (this._timer.resize) {\n\t\t\tclearTimeout(this._timer.resize);\n\t\t}\n\t\tthis._timer.resize = setTimeout(() => {\n\t\t\tthis.resize();\n\t\t\tthis.options.resize();\n\t\t\tthis._timer.resize = null;\n\t\t\tthis.reset();\n\t\t}, 100);\n\t}\n\tdetachEvent() {\n\t\tremoveEvent(this._view, \""scroll\"", this._onCheck);\n\t\tremoveEvent(window, \""resize\"", this._onResize);\n\t}\n\tdestroy() {\n\t\tthis.detachEvent();\n\t\tthis.reset();\n\t}\n}\n"",""\nfunction isVisible(group, threshold, scrollPos, endScrollPos) {\n\tconst {items, outlines} = group;\n\tconst start = outlines.start;\n\tconst end = outlines.end;\n\n\tif (start.legnth === 0 || end.length === 0 || !items.length || !items[0].el) {\n\t\treturn 2;\n\t}\n\tconst min = Math.min(...start);\n\tconst max = Math.max(...end);\n\n\tif ((endScrollPos + threshold < min)) {\n\t\treturn +1;\n\t} else if ((scrollPos - threshold > max)) {\n\t\treturn -1;\n\t}\n\treturn 0;\n}\n\nclass Infinite {\n\tconstructor(itemManger, options) {\n\t\tthis.options = Object.assign({\n\t\t\tuseRecycle: true,\n\t\t\tthreshold: 100,\n\t\t\tappend: () => {},\n\t\t\tprepend: () => {},\n\t\t\trecycle: () => {},\n\t\t}, options);\n\t\tthis._items = itemManger;\n\t\tthis.clear();\n\t}\n\tsetSize(size) {\n\t\tthis._status.size = size;\n\t}\n\trecycle(scrollPos, isForward) {\n\t\tif (!this.options.useRecycle) {\n\t\t\treturn;\n\t\t}\n\t\tconst {startCursor, endCursor, size} = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn;\n\t\t}\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst {threshold, recycle} = this.options;\n\t\tconst visibles = this._items.get(startCursor, endCursor)\n\t\t\t.map(group => isVisible(group, threshold, scrollPos, endScrollPos));\n\t\tconst length = visibles.length;\n\t\tlet start = isForward ? 0 : visibles.lastIndexOf(0);\n\t\tlet end = isForward ? visibles.indexOf(0) - 1 : visibles.length - 1;\n\n\t\tif (!isForward && start !== -1) {\n\t\t\tstart += 1;\n\t\t}\n\t\tif (start < 0 || end < 0 || start > end || end - start + 1 >= length) {\n\t\t\treturn;\n\t\t}\n\t\tstart = startCursor + start;\n\t\tend = startCursor + end;\n\n\t\trecycle({start, end});\n\t\tif (isForward) {\n\t\t\tthis.setCursor(\""start\"", end + 1);\n\t\t} else {\n\t\t\tthis.setCursor(\""end\"", start - 1);\n\t\t}\n\t}\n\tscroll(scrollPos) {\n\t\tconst startCursor = this.getCursor(\""start\"");\n\t\tconst endCursor = this.getCursor(\""end\"");\n\t\tconst items = this._items;\n\n\t\tif (typeof scrollPos !== \""number\"" || startCursor === -1 ||\n\t\t\tendCursor === -1 || !items.size()) {\n\t\t\treturn;\n\t\t}\n\t\tconst size = this._status.size;\n\t\tconst {threshold, append, prepend} = this.options;\n\t\tconst datas = items.get();\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst startEdgePos = Math.max(...datas[startCursor].outlines.start);\n\t\tconst endEdgePos = Math.min(...datas[endCursor].outlines.end);\n\t\tconst visibles = datas.map((group, i) => {\n\t\t\tconst {start, end} = group.outlines;\n\n\t\t\tif (!start.length || !end.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst startPos = Math.min(...start);\n\t\t\tconst endPos = Math.max(...end);\n\n\t\t\tif (startPos - threshold <= endScrollPos && scrollPos <= endPos + threshold) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tconst start = visibles.indexOf(true);\n\t\tconst end = visibles.lastIndexOf(true);\n\n\t\tif (~start && start < startCursor) {\n\t\t\tprepend({cache: datas.slice(start, Math.min(startCursor, end + 1))});\n\t\t} else if (endCursor < end) {\n\t\t\tappend({cache: datas.slice(Math.max(start, endCursor + 1), end + 1)});\n\t\t} else if (endScrollPos >= endEdgePos - threshold) {\n\t\t\tappend({cache: datas.slice(endCursor + 1, endCursor + 2)});\n\t\t} else if (scrollPos <= startEdgePos + threshold) {\n\t\t\tprepend({cache: datas.slice(startCursor - 1, startCursor)});\n\t\t}\n\t}\n\tsetCursor(cursor, index) {\n\t\tconst status = this._status;\n\t\tconst items = this._items;\n\t\tconst size = items.size();\n\n\t\tif (!this.options.useRecycle) {\n\t\t\tstatus.startCursor = 0;\n\t\t\tif (items.getOutline(size - 1, \""end\"").length) {\n\t\t\t\tstatus.endCursor = size - 1;\n\t\t\t\treturn;\n\t\t\t} if (cursor !== \""end\"") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (cursor === \""start\"") {\n\t\t\tstatus.startCursor = index;\n\t\t} else {\n\t\t\tstatus.endCursor = Math.min(size - 1, index);\n\t\t}\n\t\tstatus.startCursor = Math.max(0, status.startCursor);\n\t}\n\tsetStatus(status) {\n\t\tthis._status = Object.assign(this._status, status);\n\t}\n\tgetStatus(startKey, endKey) {\n\t\tconst {startCursor, endCursor, size} = this._status;\n\t\tconst startIndex = Math.max(this._items.indexOf(startKey), 0);\n\t\tconst endIndex = (this._items.indexOf(endKey) + 1 || this._items.size()) - 1;\n\t\tconst start = Math.max(startCursor - startIndex, ~startCursor ? 0 : -1);\n\t\tconst end = Math.max(Math.min(endCursor - startIndex, endIndex - startIndex), start);\n\n\t\treturn {\n\t\t\tstartCursor: start,\n\t\t\tendCursor: end,\n\t\t\tsize,\n\t\t};\n\t}\n\tgetEdgeOutline(cursor) {\n\t\tconst {startCursor, endCursor} = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._items.getOutline(cursor === \""start\"" ? startCursor : endCursor, cursor);\n\t}\n\tgetEdgeValue(cursor) {\n\t\tconst outlines = this.getEdgeOutline(cursor);\n\n\t\treturn outlines.length ? Math[cursor === \""start\"" ? \""min\"" : \""max\""](...outlines) : 0;\n\t}\n\tgetVisibleItems() {\n\t\treturn this._items.pluck(\""items\"", this._status.startCursor, this._status.endCursor);\n\t}\n\tgetCursor(cursor) {\n\t\treturn this._status[cursor === \""start\"" ? \""startCursor\"" : \""endCursor\""];\n\t}\n\tgetVisibleData() {\n\t\treturn this._items.get(this._status.startCursor, this._status.endCursor);\n\t}\n\tremove(element) {\n\t\treturn this._items.remove(element, this._status.startCursor, this._status.endCursor);\n\t}\n\tclear() {\n\t\tthis._status = {\n\t\t\tstartCursor: -1,\n\t\t\tendCursor: -1,\n\t\t\tsize: -1,\n\t\t};\n\t}\n}\n\nexport default Infinite;\n"",""import {window} from \""./browser\"";\nimport {addEvent, removeEvent, innerWidth, innerHeight} from \""./utils\"";\n\nconst elements = [];\n/* eslint-disable */\nfunction onResize(e) {\n\tAutoSizer.resizeAll();\n}\n/* eslint-enable */\n\nexport default class AutoSizer {\n\tstatic add(element, prefix = \""data-\"") {\n\t\tif (!element.length) {\n\t\t\taddEvent(window, \""resize\"", onResize);\n\t\t}\n\t\telement.__PREFIX__ = prefix;\n\t\telements.push(element);\n\t\tAutoSizer.resize(element);\n\t}\n\tstatic remove(element, isFixed = false) {\n\t\tconst fixed = element.getAttribute(`${element.__PREFIX__}fixed`) || \""width\"";\n\n\t\tif (!isFixed) {\n\t\t\telement.style[fixed === \""width\"" ? \""height\"" : \""width\""] = \""\"";\n\t\t}\n\t\tconst index = elements.indexOf(element);\n\n\t\tif (!~index) {\n\t\t\treturn;\n\t\t}\n\t\telements.splice(index, 1);\n\t\tif (!elements.length) {\n\t\t\tremoveEvent(window, \""reisze\"", onResize);\n\t\t}\n\t}\n\tstatic resize(element, prefix = \""data-\"") {\n\t\tconst elementPrefix = typeof element.__PREFIX__ === \""string\"" ? element.__PREFIX__ : prefix;\n\t\tconst dataWidth = element.getAttribute(`${elementPrefix}width`);\n\t\tconst dataHeight = element.getAttribute(`${elementPrefix}height`);\n\t\tconst fixed = element.getAttribute(`${elementPrefix}fixed`);\n\n\t\tif (fixed === \""height\"") {\n\t\t\tconst size = innerHeight(element) || dataHeight;\n\n\t\t\telement.style.width = `${dataWidth / dataHeight * size}px`;\n\t\t} else {\n\t\t\tconst size = innerWidth(element) || dataWidth;\n\n\t\t\telement.style.height = `${dataHeight / dataWidth * size}px`;\n\t\t}\n\t}\n\tstatic resizeAll() {\n\t\telements.forEach(element => AutoSizer.resize(element));\n\t}\n}\n"",""import {IS_IE} from \""./consts\"";\nimport {addEvent, removeEvent, toArray} from \""./utils\"";\nimport AutoSizer from \""./AutoSizer\"";\n\n\nexport const CHECK_ALL = 1;\nexport const CHECK_ONLY_ERROR = 2;\n\nfunction isDataAttribute(target, prefix) {\n\treturn !!target.getAttribute(`${prefix}width`);\n}\n\nclass ImageLoaded {\n\tstatic waitImageLoaded(needCheck, {prefix = \""\"", length, type, complete, error, end}) {\n\t\tlet checkCount = 0;\n\t\tlet endCount = length;\n\n\t\tif (type !== CHECK_ONLY_ERROR) {\n\t\t\tcheckCount = endCount;\n\t\t}\n\t\tconst checkEnd = function() {\n\t\t\tif (--endCount !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tend && end();\n\t\t};\n\t\tconst checkImage = function() {\n\t\t\tcheckCount--;\n\t\t\tif (checkCount !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcomplete && complete();\n\t\t};\n\t\tconst onError = function(target, itemIndex = target.__ITEM_INDEX__) {\n\t\t\terror && error({\n\t\t\t\ttarget,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t};\n\t\tconst onCheck = function(e) {\n\t\t\tconst target = e.target || e.srcElement;\n\n\t\t\tremoveEvent(target, \""error\"", onCheck);\n\t\t\tremoveEvent(target, \""load\"", onCheck);\n\n\t\t\tif (type === CHECK_ALL && isDataAttribute(target, prefix)) {\n\t\t\t\tAutoSizer.remove(target, e.type === \""error\"");\n\t\t\t} else {\n\t\t\t\tcheckImage();\n\t\t\t}\n\t\t\tif (e.type === \""error\"") {\n\t\t\t\tonError(target);\n\t\t\t}\n\t\t\tdelete target.__ITEM_INDEX__;\n\t\t\tcheckEnd();\n\t\t};\n\n\t\tneedCheck.forEach((images, i) => {\n\t\t\timages.forEach(v => {\n\t\t\t\t// workaround for IE\n\t\t\t\tif (v.complete && (!IS_IE || (IS_IE && v.naturalWidth))) {\n\t\t\t\t\tif (!v.naturalWidth) {\n\t\t\t\t\t\tonError(v, i);\n\t\t\t\t\t}\n\t\t\t\t\tcheckImage();\n\t\t\t\t\tcheckEnd();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tv.__ITEM_INDEX__ = i;\n\t\t\t\tif (type === CHECK_ALL && isDataAttribute(v, prefix)) {\n\t\t\t\t\tAutoSizer.add(v, prefix);\n\t\t\t\t\tcheckImage();\n\t\t\t\t}\n\t\t\t\taddEvent(v, \""load\"", onCheck);\n\t\t\t\taddEvent(v, \""error\"", onCheck);\n\n\t\t\t\tIS_IE && v.setAttribute(\""src\"", v.getAttribute(\""src\""));\n\t\t\t});\n\t\t});\n\t}\n\tstatic checkImageLoaded(el) {\n\t\tif (el.tagName === \""IMG\"") {\n\t\t\treturn el.complete ? [] : [el];\n\t\t} else {\n\t\t\treturn toArray(el.querySelectorAll(\""img\""));\n\t\t}\n\t}\n\tstatic check(elements, {prefix, type = CHECK_ALL, complete, error, end}) {\n\t\tconst images = elements.map(element => this.checkImageLoaded(element));\n\t\tconst length = images.reduce((sum, element) => sum + element.length, 0);\n\n\t\tif (type === CHECK_ONLY_ERROR || length === 0) {\n\t\t\t// convert to async\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomplete && complete();\n\t\t\t\tif (length === 0) {\n\t\t\t\t\tend && end();\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t}\n\t\tif (length > 0) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.waitImageLoaded(images, {prefix, length, type, complete, error, end});\n\t\t\t}, 0);\n\t\t}\n\t}\n}\n\nexport default ImageLoaded;\n"",""import AutoSizer from \""./AutoSizer\"";\nimport ImageLoaded, {CHECK_ALL, CHECK_ONLY_ERROR} from \""./ImageLoaded\"";\nimport ItemManager from \""./ItemManager\"";\nimport {matchHTML, $} from \""./utils\"";\nimport {DUMMY_POSITION} from \""./consts\"";\nimport DOMRenderer from \""./DOMRenderer\"";\n\nfunction hasTarget(target, value) {\n\treturn ~target.indexOf(value);\n}\n\nexport default class LayoutMananger {\n\tconstructor(items, renderer, options = {}) {\n\t\tObject.assign(this.options = {\n\t\t\tattributePrefix: \""data-\"",\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\n\t\tthis._items = items;\n\t\tthis._renderer = renderer;\n\t\tthis._layout = null;\n\t}\n\tsetLayout(layout) {\n\t\tthis._layout = layout;\n\t}\n\tsetSize(size) {\n\t\tthis._layout.setSize(size);\n\t}\n\t_complete(groups, items, isAppend, isUpdate, callback) {\n\t\tconst itemManager = this._items;\n\t\tconst cursor = isAppend ? \""end\"" : \""start\"";\n\t\tconst groupIndex = itemManager.indexOf(groups[0]);\n\t\tconst prevGroup = itemManager.getData(groupIndex + (isAppend ? -1 : 1));\n\t\tlet outline = prevGroup ? prevGroup.outlines[cursor] : [0];\n\n\t\tthis._renderer.updateSize(items);\n\n\t\tconst groupInfos = groups.map(group => {\n\t\t\tconst groupOutline = group.outlines[isAppend ? \""start\"" : \""end\""];\n\t\t\tconst isRelayout = isUpdate || !outline.length || (outline.length === groupOutline.length ?\n\t\t\t\t!outline.every((v, index) => v === groupOutline[index]) : true);\n\n\t\t\tif (!isRelayout) {\n\t\t\t\toutline = group.outlines[isAppend ? \""end\"" : \""start\""];\n\t\t\t\tDOMRenderer.renderItems(group.items);\n\t\t\t\treturn group;\n\t\t\t}\n\t\t\tconst groupItems = group.items;\n\t\t\tconst groupInfo = this._layout[isAppend ? \""append\"" : \""prepend\""](groupItems, outline, true);\n\n\t\t\tObject.assign(group, groupInfo);\n\t\t\tDOMRenderer.renderItems(groupInfo.items);\n\t\t\toutline = groupInfo.outlines[isAppend ? \""end\"" : \""start\""];\n\n\t\t\treturn groupInfo;\n\t\t});\n\n\t\tcallback({\n\t\t\tgroups: groupInfos,\n\t\t\titems,\n\t\t\tisAppend,\n\t\t});\n\t}\n\t_error(removeTarget, replaceTarget, target, items, errorIndex, callback) {\n\t\tconst item = items[errorIndex];\n\t\tconst element = item.el;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\t// remove item\n\t\tconst removeItem = () => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tremoveTarget.push(element);\n\t\t\tconst index = replaceTarget.indexOf(errorIndex);\n\n\t\t\tindex !== -1 && replaceTarget.splice(index, 1);\n\t\t};\n\t\t// remove image\n\t\tconst remove = () => {\n\t\t\tif (target === element) {\n\t\t\t\tremoveItem();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttarget.parentNode.removeChild(target);\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace image\n\t\tconst replace = src => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (src) {\n\t\t\t\tif (matchHTML(src) || typeof src === \""object\"") {\n\t\t\t\t\tconst parentNode = target.parentNode;\n\n\t\t\t\t\tparentNode.insertBefore($(src), target);\n\t\t\t\t\tparentNode.removeChild(target);\n\t\t\t\t\titem.content = element.outerHTML;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.src = src;\n\t\t\t\t\tif (target.getAttribute(`${prefix}width`)) {\n\t\t\t\t\t\tAutoSizer.remove(target);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}width`);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}height`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace item\n\t\tconst replaceItem = content => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telement.innerHTML = content;\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\n\t\tcallback({\n\t\t\ttarget,\n\t\t\telement,\n\t\t\titems,\n\t\t\titem,\n\t\t\titemIndex: errorIndex,\n\t\t\treplace,\n\t\t\treplaceItem,\n\t\t\tremove,\n\t\t\tremoveItem,\n\t\t});\n\t}\n\t_end(removeTarget, replaceTarget, items, callback) {\n\t\tconst {attributePrefix} = this.options;\n\n\t\tconst removeTargetLength = removeTarget.length;\n\t\tconst replaceTargetLength = replaceTarget.length;\n\n\t\tif (!removeTargetLength && !replaceTargetLength) {\n\t\t\tcallback({remove: []});\n\t\t\treturn;\n\t\t}\n\t\tconst layoutedItems = replaceTarget.map(itemIndex => items[itemIndex]);\n\n\t\tif (!replaceTargetLength) {\n\t\t\tcallback({remove: removeTarget, layout: true});\n\t\t\treturn;\n\t\t}\n\t\t// wait layoutComplete beacause of error event.\n\t\tImageLoaded.check(layoutedItems.map(v => v.el), {\n\t\t\tprefix: attributePrefix,\n\t\t\tcomplete: () => {\n\t\t\t\tthis._renderer.updateSize(layoutedItems);\n\t\t\t\tcallback({remove: removeTarget, layout: true});\n\t\t\t},\n\t\t});\n\t}\n\t_insert({\n\t\tgroups,\n\t\titems = ItemManager.pluck(groups, \""items\""),\n\t\tisAppend,\n\t\tisUpdate,\n\t}, {\n\t\terror = () => {},\n\t\tcomplete = () => {},\n\t\tend = () => {},\n\t}) {\n\t\tif (!groups.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst checkGroups = isAppend ? groups : groups.reverse();\n\t\tconst replaceTarget = [];\n\t\tconst removeTarget = [];\n\t\tconst elements = items.map(item => item.el);\n\t\tconst type = this.options.isEqualSize && this._renderer._size.item ? CHECK_ONLY_ERROR : CHECK_ALL;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\tImageLoaded.check(elements, {\n\t\t\tprefix,\n\t\t\ttype,\n\t\t\tcomplete: () => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._complete(checkGroups, items, isAppend, isUpdate, complete);\n\t\t\t},\n\t\t\terror: ({target, itemIndex}) => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._error(removeTarget, replaceTarget, target, items, itemIndex, error);\n\t\t\t},\n\t\t\tend: () => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._end(removeTarget, replaceTarget, items, end);\n\t\t\t},\n\t\t});\n\t}\n\tappend({groups, items, isUpdate}, callbacks = {}) {\n\t\tthis._insert({groups, items, isUpdate, isAppend: true}, callbacks);\n\t}\n\tprepend({groups, items, isUpdate}, callbacks = {}) {\n\t\tthis._insert({groups, items, isUpdate, isAppend: false}, callbacks);\n\t}\n\tlayout(isRelayout, groups, items) {\n\t\tconst renderer = this._renderer;\n\t\tconst {isEqualSize, isConstantSize} = renderer.options;\n\t\tconst layoutGroups = groups.filter(group => {\n\t\t\tconst item = group.items[0];\n\n\t\t\treturn item.orgSize && item.rect.top > DUMMY_POSITION / 10;\n\t\t});\n\n\t\tif (!layoutGroups.length) {\n\t\t\treturn [];\n\t\t}\n\t\tlet outline = layoutGroups[0].outlines.start;\n\n\t\tif (isRelayout) {\n\t\t\toutline = [outline.length ? Math.min(...outline) : 0];\n\t\t\tif (!isConstantSize && items.length) {\n\t\t\t\trenderer.updateSize(items);\n\n\t\t\t\t// update invisible items' size\n\t\t\t\tif (isEqualSize && items[0].size) {\n\t\t\t\t\tItemManager.pluck(layoutGroups, \""items\"").forEach(item => {\n\t\t\t\t\t\titem.size = Object.assign({}, items[0].size);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._layout.layout(layoutGroups, outline);\n\t\treturn layoutGroups;\n\t}\n\tdestroy() {\n\t\tthis._items = null;\n\t\tthis._renderer = null;\n\t}\n}\n"",""/**\n * Copyright (c) 2017 NAVER Corp.\n * egjs projects are licensed under the MIT license\n*/\nimport Component from \""@egjs/component\"";\nimport ItemManager from \""./ItemManager\"";\nimport DOMRenderer, {resetSize} from \""./DOMRenderer\"";\nimport Watcher from \""./Watcher\"";\nimport {\n\tAPPEND,\n\tPREPEND,\n\tCACHE,\n\tNO_CACHE,\n\tTRUSTED,\n\tNO_TRUSTED,\n\tIS_ANDROID2,\n\tIDLE,\n\tLOADING_APPEND,\n\tLOADING_PREPEND,\n\tPROCESSING,\n\tDEFENSE_BROWSER,\n\tIGNORE_CLASSNAME,\n\tDUMMY_POSITION,\n\tIS_IOS,\n} from \""./consts\"";\nimport Infinite from \""./Infinite\"";\nimport {toArray, $, outerHeight, outerWidth} from \""./utils\"";\nimport LayoutMananger from \""./LayoutManager\"";\n\n// IE8\n// https://stackoverflow.com/questions/43216659/babel-ie8-inherit-issue-with-object-create\n/* eslint-disable */\nif (typeof Object.create !== \""function\"") {\n\tObject.create = function (o, properties) {\n\t\tif (typeof o !== \""object\"" && typeof o !== \""function\"") {\n\t\t\tthrow new TypeError(\""Object prototype may only be an Object: \"" + o);\n\t\t} else if (o === null) {\n\t\t\tthrow new Error(\""This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.\"");\n\t\t}\n\t\tfunction F() {}\n\t\tF.prototype = o;\n\t\treturn new F();\n\t};\n}\n/* eslint-enable */\n\n/**\n * A module used to arrange card elements including content infinitely according to layout type. With this module, you can implement various layouts composed of different card elements whose sizes vary. It guarantees performance by maintaining the number of DOMs the module is handling under any circumstance\n * @ko 콘텐츠가 있는 카드 엘리먼트를 레이아웃 타입에 따라 무한으로 배치하는 모듈. 다양한 크기의 카드 엘리먼트를 다양한 레이아웃으로 배치할 수 있다. 카드 엘리먼트의 개수가 계속 늘어나도 모듈이 처리하는 DOM의 개수를 일정하게 유지해 최적의 성능을 보장한다\n * @alias eg.InfiniteGrid\n * @extends eg.Component\n *\n * @example\n```\n<ul id=\""grid\"">\n\t<li class=\""card\"">\n\t\t<div>test1</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test2</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test3</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test4</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test5</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test6</div>\n\t</li>\n</ul>\n<script>\nvar some = new eg.InfiniteGrid(\""#grid\"").on(\""layoutComplete\"", function(e) {\n\t// ...\n});\n\n// If you already have items in the container, call \""layout\"" method.\nsome.layout();\n</script>\n```\n *\n * @support {\""ie\"": \""8+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n **/\nclass InfiniteGrid extends Component {\n\t/**\n * Version info string\n * @ko 버전정보 문자열\n * @name VERSION\n * @static\n * @type {String}\n * @example\n * eg.InfiniteGrid.VERSION;  // ex) 3.3.3\n * @memberof eg.InfiniteGrid\n */\n\tstatic VERSION = \""#__VERSION__#\"";\n\t/**\n\t * @param {HTMLElement|String|jQuery} element A base element for a module <ko>모듈을 적용할 기준 엘리먼트</ko>\n\t * @param {Object} [options] The option object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid 모듈의 옵션 객체</ko>\n\t * @param {String} [options.itemSelector] A selector to select card elements that make up the layout<ko>레이아웃을 구성하는 카드 엘리먼트를 선택할 선택자(selector)</ko>\n\t * @param {Boolean} [options.useRecycle=true] Indicates whether keep the number of DOMs is maintained. If the useRecycle value is 'true', keep the number of DOMs is maintained. If the useRecycle value is 'false', the number of DOMs will increase as card elements are added. <ko>DOM의 수를 유지할지 여부를 나타낸다. useRecycle 값이 'true'이면 DOM 개수를 일정하게 유지한다. useRecycle 값이 'false' 이면 카드 엘리먼트가 추가될수록 DOM 개수가 계속 증가한다.</ko>\n\t * @param {Boolean} [options.isOverflowScroll=false] Indicates whether overflow:scroll is applied<ko>overflow:scroll 적용여부를 결정한다.</ko>\n\t * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (true: horizontal, false: vertical) <ko>스크롤 이동 방향 (true 가로방향, false 세로방향)</ko>\n\t * @param {Boolean} [options.useFit=true] The useFit option scrolls upwards so that no space is visible until an item is added <ko>위로 스크롤할 시 아이템을 추가하는 동안 보이는 빈 공간을 안보이게 한다.</ko>\n\t * @param {Boolean} [options.isEqualSize=false] Indicates whether sizes of all card elements are equal to one another. If sizes of card elements to be arranged are all equal and this option is set to \""true\"", the performance of layout arrangement can be improved. <ko>카드 엘리먼트의 크기가 동일한지 여부. 배치될 카드 엘리먼트의 크기가 모두 동일할 때 이 옵션을 'true'로 설정하면 레이아웃 배치 성능을 높일 수 있다</ko>\n\t * @param {Boolean} [options.isConstantSize=false] Indicates whether sizes of all card elements does not change, the performance of layout arrangement can be improved. <ko>모든 카드 엘리먼트의 크기가 불변일 때 이 옵션을 'true'로 설정하면 레이아웃 배치 성능을 높일 수 있다</ko>\n\t * @param {Number} [options.transitionDruation=0] Indicates how many seconds a transition effect takes to complete. <ko>트랜지션 효과를 완료하는데 걸리는 시간을 나타낸다.</ko>\n\t * @param {Number} [options.threshold=100] The threshold size of an event area where card elements are added to a layout.<ko>레이아웃에 카드 엘리먼트를 추가하는 이벤트가 발생하는 기준 영역의 크기.</ko>\n\t * @param {String} [options.attributePrefix=\""data-\""] The prefix to use element's data attribute.<ko>엘리먼트의 데이타 속성에 사용할 접두사.</ko>\n\t */\n\tconstructor(element, options) {\n\t\tsuper();\n\t\tObject.assign(this.options = {\n\t\t\titemSelector: \""*\"",\n\t\t\tisOverflowScroll: false,\n\t\t\tthreshold: 100,\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\tuseRecycle: true,\n\t\t\thorizontal: false,\n\t\t\ttransitionDuration: 0,\n\t\t\tuseFit: true,\n\t\t\tattributePrefix: \""data-\"",\n\t\t}, options);\n\t\tDEFENSE_BROWSER && (this.options.useFit = false);\n\t\tIS_ANDROID2 && (this.options.isOverflowScroll = false);\n\t\tthis._reset();\n\t\tthis._loadingBar = {};\n\n\t\tconst {\n\t\t\tisOverflowScroll,\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tthreshold,\n\t\t\tuseRecycle,\n\t\t} = this.options;\n\n\t\tthis._items = new ItemManager();\n\t\tthis._renderer = new DOMRenderer(element, {\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tcontainer: isOverflowScroll,\n\t\t});\n\t\tthis._watcher = new Watcher(\n\t\t\tthis._renderer.view,\n\t\t\t{\n\t\t\t\tisOverflowScroll,\n\t\t\t\thorizontal,\n\t\t\t\tcontainer: this._renderer.container,\n\t\t\t\tresize: () => this._onResize(),\n\t\t\t\tcheck: param => this._onCheck(param),\n\t\t\t});\n\n\t\tthis._infinite = new Infinite(this._items, {\n\t\t\thorizontal,\n\t\t\tuseRecycle,\n\t\t\tthreshold,\n\t\t\tappend: param => this._requestAppend(param),\n\t\t\tprepend: param => this._requestPrepend(param),\n\t\t\trecycle: param => this._recycle(param),\n\t\t});\n\t}\n\t/**\n\t * Adds a card element at the bottom of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko 카드 엘리먼트를 레이아웃 아래에 추가한다. isProcessing() 메서드의 반환값이 'false'일 때만 이 메서드를 사용할 수 있다\n\t * 이 메소드는 isProcessing()의 반환값이 false일 경우에만 사용 가능하다.\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>추가할 카드 엘리먼트의 배열</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>추가할 카드 엘리먼트에 설정할 그룹 키. 생략하면 값이 자동으로 생성된다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.append(\""&lt;div class='item'&gt;test1&lt;/div&gt;&lt;div class='item'&gt;test2&lt;/div&gt;\"");\n\t * infinitegrid.append([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]);\n\t * infinitegrid.append([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.append(jQuery([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]));\n\t */\n\tappend(elements, groupKey) {\n\t\tthis._manager && this._insert({\n\t\t\telements,\n\t\t\tisAppend: APPEND,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Adds a card element at the top of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko 카드 엘리먼트를 레이아웃의 위에 추가한다. isProcessing() 메서드의 반환값이 'false'일 때만 이 메서드를 사용할 수 있다\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>추가할 카드 엘리먼트 배열</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>추가할 카드 엘리먼트에 설정할 그룹 키. 생략하면 값이 자동으로 생성된다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.prepend(\""&lt;div class='item'&gt;test1&lt;/div&gt;&lt;div class='item'&gt;test2&lt;/div&gt;\"");\n\t * infinitegrid.prepend([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]);\n\t * infinitegrid.prepend([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.prepend(jQuery([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]));\n\t */\n\tprepend(elements, groupKey) {\n\t\tthis._manager && this._insert({\n\t\t\telements,\n\t\t\tisAppend: PREPEND,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Layout class to use.\n\t * @ko 사용할 Layout 클래스를 지정한다.\n\t * @param {Class|Object} LayoutKlass The Layout class to use or an instance of a layout moudle<ko>사용할 Layout 클래스 또는 레이아웃 모듈의 인스턴스</ko>\n\t * @param {Object} options Options to apply to the Layout.<ko>Layout에 적용할 옵션</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.setLayout(eg.InfiniteGrid.GridLayout, {\n\t *  margin: 10,\n\t *  align: \""start\""\n\t * });\n   * infinitegrid.setLayout(eg.InfiniteGrid.JustifiedLayout, {\n\t *  margin: 10,\n\t *  minSize: 100,\n\t *  maxSize: 200\n\t * });\n   * infinitegrid.setLayout(eg.InfiniteGrid.SquareLayout, {\n\t *  margin: 10,\n\t *  column: 2\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.FrameLayout, {\n\t *  margin: 10,\n\t *  frame: [\n\t *   [1, 2],\n   *   [4, 3],\n\t *  ]\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.PackingLayout, {\n\t *  margin: 10,\n\t *  aspectRatio: 1.5\n\t * });\n\t * var layout = new eg.InfiniteGrid.GridLayout({\n\t * \tmargin: 10,\n\t *\talign: \""start\""\n\t * });\n\t * infinitegrid.setLayout(layout);\n\t */\n\tsetLayout(LayoutKlass, options = {}) {\n\t\tconst {isEqualSize, isConstantSize, attributePrefix, horizontal} = this.options;\n\n\t\tif (!this._manager) {\n\t\t\tthis._manager = new LayoutMananger(this._items, this._renderer, {\n\t\t\t\tattributePrefix,\n\t\t\t\tisEqualSize,\n\t\t\t\tisConstantSize,\n\t\t\t});\n\t\t}\n\t\tif (typeof LayoutKlass === \""function\"") {\n\t\t\tthis._manager.setLayout(new LayoutKlass(Object.assign(options, {\n\t\t\t\thorizontal,\n\t\t\t})));\n\t\t} else {\n\t\t\tLayoutKlass.options.horizontal = horizontal;\n\t\t\tthis._manager.setLayout(LayoutKlass);\n\t\t}\n\t\tthis._renderer.resize();\n\t\tthis._setSize(this._renderer.getViewportSize());\n\t\treturn this;\n\t}\n\t_setSize(size) {\n\t\tthis._infinite.setSize(this._renderer.getViewSize());\n\t\tthis._manager.setSize(size);\n\t}\n\t/**\n\t * Returns the layouted items.\n\t * @ko 레이아웃된 아이템들을 반환한다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached items. <ko>캐싱된 아이템을 포함할지 여부를 나타낸다.</ko>\n\t * @returns {Array} List of items <ko>아이템의 목록</ko>\n\t */\n\tgetItems(includeCached = false) {\n\t\treturn includeCached ? this._items.pluck(\""items\"") : this._infinite.getVisibleItems();\n\t}\n\t_fitItems(base, margin = 0) {\n\t\tbase > 0 && this._watcher.scrollBy(-base);\n\t\tthis._items.fit(base, this.options.horizontal);\n\t\tDOMRenderer.renderItems(this.getItems());\n\t\tthis._setContainerSize(this._getEdgeValue(\""end\"") || margin);\n\t\tbase < 0 && this._watcher.scrollBy(-base);\n\t}\n\t// called by visible\n\t_fit(useFit = this.options.useFit) {\n\t\tlet base = this._getEdgeValue(\""start\"");\n\t\tconst margin = (this._getLoadingStatus() === LOADING_PREPEND && this._status.loadingSize) || 0;\n\t\tconst {isConstantSize, isEqualSize, useRecycle} = this.options;\n\n\t\tif (!useRecycle || !useFit || isConstantSize || isEqualSize) {\n\t\t\tif (base < margin) {\n\t\t\t\tthis._fitItems(base - margin, margin);\n\t\t\t}\n\t\t\tbase = 0;\n\t\t} else if (base !== 0 || margin) {\n\t\t\tthis._fitItems(base - margin, margin);\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t\tthis._isLoading() && this._renderLoading();\n\t\treturn base;\n\t}\n\t_getEdgeValue(cursor) {\n\t\treturn this._infinite.getEdgeValue(cursor);\n\t}\n\t/**\n\t * Rearranges a layout.\n\t * @ko 레이아웃을 다시 배치한다.\n\t * @param {Boolean} [isRelayout=true] Indicates whether a card element is being relayouted <ko>카드 엘리먼트 재배치 여부</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tlayout(isRelayout = true) {\n\t\tif (!this._manager) {\n\t\t\treturn this;\n\t\t}\n\t\tconst renderer = this._renderer;\n\t\tconst itemManager = this._items;\n\t\tconst infinite = this._infinite;\n\t\tconst isResize = renderer.resize();\n\t\tconst items = this.getItems();\n\t\tconst {isEqualSize, isConstantSize, transitionDuration} = this.options;\n\t\tconst isLayoutAll = isRelayout && (isEqualSize || isConstantSize);\n\t\tconst size = itemManager.size();\n\n\t\tif (isRelayout) {\n\t\t\tthis._watcher.resize();\n\t\t\tif (isResize) {\n\t\t\t\tthis._setSize(renderer.getViewportSize());\n\t\t\t}\n\t\t}\n\t\t// check childElement\n\t\tif (!size || !items.length) {\n\t\t\tconst children = toArray(renderer.container.children);\n\n\t\t\tif (children.length) {\n\t\t\t\tthis._insert({\n\t\t\t\t\telements: children,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisChildren: true,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._requestAppend({});\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\t// layout datas\n\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\tconst endCursor = infinite.getCursor(\""end\"");\n\t\tconst data = isLayoutAll || !(isRelayout && isResize) ? itemManager.get() :\n\t\t\titemManager.get(startCursor, endCursor);\n\n\t\t// LayoutManger interface\n\t\tthis._manager.layout(isRelayout, data, isResize ? items : []);\n\t\tif (isLayoutAll) {\n\t\t\tthis._fit();\n\t\t} else if (isRelayout && isResize) {\n\t\t\titemManager.clearOutlines(startCursor, endCursor);\n\t\t}\n\t\tDOMRenderer.renderItems(items, transitionDuration);\n\t\tisRelayout && this._watcher.setScrollPos();\n\t\tthis._onLayoutComplete({\n\t\t\titems,\n\t\t\tisAppend: APPEND,\n\t\t\tfromCache: CACHE,\n\t\t\tisTrusted: NO_TRUSTED,\n\t\t\tuseRecycle: false,\n\t\t\tisLayout: true,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Removes a item element on a grid layout.\n\t * @ko 그리드 레이아웃의 카드 엘리먼트를 삭제한다.\n\t * @param {HTMLElement} item element to be removed <ko>삭제될 아이템 엘리먼트</ko>\n\t * @return {Object}  Removed item element <ko>삭제된 아이템 엘리먼트 정보</ko>\n\t */\n\tremove(element, isLayout = true) {\n\t\tif (element) {\n\t\t\tconst items = this._infinite.remove(element);\n\n\t\t\titems && DOMRenderer.removeElement(element);\n\t\t\tisLayout && this.layout(false);\n\t\t\treturn items;\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t * Returns the list of group keys which belongs to card elements currently being maintained. You can use the append() or prepend() method to configure group keys so that multiple card elements can be managed at once. If you do not use these methods to configure group keys, groupkey is automatically generated.\n\t * @ko 현재 유지하고 있는 카드 엘리먼트의 그룹 키 목록을 반환한다. 여러 개의 카드 엘리먼트를 묶어서 관리할 수 있도록 append() 메서드나 prepend() 메서드에서 그룹 키를 지정할 수 있다. append() 메서드나 prepend() 메서드에서 그룹 키를 지정하지 않았다면 자동으로 그룹키가 생성된다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached groups. <ko>캐싱된 그룹을 포함할지 여부를 나타낸다.</ko>\n\t * @return {Array} List of group keys <ko>그룹 키의 목록</ko>\n\t */\n\tgetGroupKeys(includeCached) {\n\t\tconst data = includeCached ?\n\t\t\tthis._items.get() : this._infinite.getVisibleData();\n\n\t\treturn data.map(v => v.groupKey);\n\t}\n\t/**\n\t * Returns the current state of a module such as location information. You can use the setStatus() method to restore the information returned through a call to this method.\n\t * @ko 카드의 위치 정보 등 모듈의 현재 상태 정보를 반환한다. 이 메서드가 반환한 정보를 저장해 두었다가 setStatus() 메서드로 복원할 수 있다\n\t * @return {Object} State object of the eg.InfiniteGrid module<ko>eg.InfiniteGrid 모듈의 상태 객체</ko>\n\t */\n\tgetStatus(startKey, endKey) {\n\t\treturn {\n\t\t\t_status: Object.assign({}, this._status),\n\t\t\t_items: this._items.getStatus(startKey, endKey),\n\t\t\t_renderer: this._renderer.getStatus(),\n\t\t\t_watcher: this._watcher.getStatus(),\n\t\t\t_infinite: this._infinite.getStatus(startKey, endKey),\n\t\t};\n\t}\n\t/**\n\t * Sets the state of the eg.InfiniteGrid module with the information returned through a call to the getStatue() method.\n\t * @ko getStatue() 메서드가 저장한 정보로 eg.InfiniteGrid 모듈의 상태를 설정한다.\n\t * @param {Object} status State object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid 모듈의 상태 객체</ko>\n\t * @param {boolean} [applyScrollPos=true] Checks whether to scroll<ko>스크롤의 위치를 복원할지 결정한다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tsetStatus(status, applyScrollPos = true) {\n\t\tif (!status) {\n\t\t\treturn this;\n\t\t}\n\t\tconst {_status, _renderer, _items, _watcher, _infinite} = status;\n\n\t\tif (!_status ||\n\t\t\t!_renderer || !_items || !_watcher || !_infinite) {\n\t\t\treturn this;\n\t\t}\n\t\tconst items = this._items;\n\t\tconst renderer = this._renderer;\n\t\tconst watcher = this._watcher;\n\t\tconst infinite = this._infinite;\n\n\t\twatcher.detachEvent();\n\t\tObject.assign(this._status, _status);\n\t\tthis._status.processingStatus = IDLE;\n\t\titems.setStatus(_items);\n\t\trenderer.setStatus(_renderer);\n\t\tinfinite.setStatus(_infinite);\n\n\t\tconst visibleItems = this.getItems();\n\t\tconst length = visibleItems.length;\n\n\t\trenderer.createAndInsert(visibleItems, true);\n\n\t\tconst isReLayout = renderer.isNeededResize();\n\n\t\twatcher.setStatus(_watcher, applyScrollPos);\n\t\twatcher.attachEvent();\n\n\t\tconst {isConstantSize, isEqualSize} = this.options;\n\n\t\tif (!length) {\n\t\t\tthis._requestAppend({cache: visibleItems.slice(0, 1)});\n\t\t} else if (isReLayout) {\n\t\t\trenderer.resize();\n\t\t\tthis._setSize(renderer.getViewportSize());\n\n\t\t\tif (isConstantSize) {\n\t\t\t\tthis.layout(true);\n\t\t\t} else {\n\t\t\t\tthis._items.clearOutlines();\n\t\t\t\tthis._postLayout({\n\t\t\t\t\tfromCache: true,\n\t\t\t\t\tgroups: isEqualSize ? items.get() : infinite.getVisibleData(),\n\t\t\t\t\titems: visibleItems,\n\t\t\t\t\tnewItems: visibleItems,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisTrusted: false,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis.layout(false);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Clears added card elements and data.\n\t * @ko 추가된 카드 엘리먼트와 데이터를 모두 지운다.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tclear() {\n\t\tthis._items.clear();\n\t\tthis._renderer.clear();\n\t\tthis._infinite.clear();\n\t\tthis._reset();\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Loading Bar to use for append or prepend items.\n\t * @ko 아이템을 append 또는 prepend 하기 위해 사용할 로딩 바를 지정한다.\n\t * @param {String|Object} [userLoadingBar={}] The loading bar HTML markup or element or element selector <ko> 로딩 바 HTML 또는 element 또는 selector </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tsetLoadingBar(userLoadingBar = {}) {\n\t\tconst loadingBarObj = typeof userLoadingBar === \""object\"" ? userLoadingBar : {\n\t\t\t\""append\"": userLoadingBar,\n\t\t\t\""prepend\"": userLoadingBar,\n\t\t};\n\n\t\tthis._status.loadingSize = 0;\n\t\tthis._status.loadingStyle = {};\n\t\tconst loadingBar = this._loadingBar;\n\n\t\tfor (const type in loadingBarObj) {\n\t\t\tloadingBar[type] = $(loadingBarObj[type]);\n\t\t\tloadingBar[type].className += ` ${IGNORE_CLASSNAME}`;\n\t\t}\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t_appendLoadingBar() {\n\t\tconst loadingBar = this._loadingBar;\n\t\tconst container = this._renderer.container;\n\n\t\tfor (const type in loadingBar) {\n\t\t\tcontainer.appendChild(loadingBar[type]);\n\t\t}\n\t}\n\t/**\n\t * Checks whether a card element or data is being added.\n\t * @ko 카드 엘리먼트 추가 또는 데이터 로딩이 진행 중인지 확인한다\n\t * @return {Boolean} Indicates whether a card element or data is being added <ko>카드 엘리먼트 추가 또는 데이터 로딩 진행 중 여부</ko>\n\t */\n\tisProcessing() {\n\t\treturn this._isProcessing() || this._isLoading();\n\t}\n\t_isProcessing() {\n\t\treturn (this._status.processingStatus & PROCESSING) > 0;\n\t}\n\t_isLoading() {\n\t\treturn this._getLoadingStatus() > 0;\n\t}\n\t_getLoadingStatus() {\n\t\treturn this._status.processingStatus & (LOADING_APPEND | LOADING_PREPEND);\n\t}\n\t_process(status, isAdd = true) {\n\t\tif (isAdd) {\n\t\t\tthis._status.processingStatus |= status;\n\t\t} else {\n\t\t\tthis._status.processingStatus -= this._status.processingStatus & status;\n\t\t}\n\t}\n\t_insert({\n\t\telements,\n\t\tisAppend,\n\t\tisChildren,\n\t\tgroupKey = new Date().getTime() + Math.floor(Math.random() * 1000),\n\t}) {\n\t\tif (this._isProcessing() || elements.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst items = ItemManager.from(elements, this.options.itemSelector, {\n\t\t\tisAppend,\n\t\t\tgroupKey,\n\t\t\toutlines: {start: [], end: []},\n\t\t});\n\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = {\n\t\t\tgroupKey,\n\t\t\titems,\n\t\t\toutlines: {start: [], end: []},\n\t\t};\n\t\tconst method = isAppend ? \""append\"" : \""prepend\"";\n\n\t\tthis._items[method](group);\n\n\t\tif (!isAppend) {\n\t\t\tconst infinite = this._infinite;\n\t\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\t\tconst endCursor = infinite.getCursor(\""end\"");\n\n\t\t\tinfinite.setCursor(\""start\"", startCursor + 1);\n\t\t\tinfinite.setCursor(\""end\"", endCursor + 1);\n\t\t}\n\t\tthis._postLayout({\n\t\t\tfromCache: NO_CACHE,\n\t\t\tgroups: [group],\n\t\t\titems,\n\t\t\tnewItems: items,\n\t\t\tisAppend,\n\t\t\tisChildren,\n\t\t\tisTrusted: NO_TRUSTED,\n\t\t});\n\t}\n\t// add items, and remove items for recycling\n\t_recycle({start, end}) {\n\t\tif (!this.options.useRecycle) {\n\t\t\treturn;\n\t\t}\n\t\tDOMRenderer.removeItems(this._items.pluck(\""items\"", start, end));\n\t}\n\t/**\n\t * Returns the element of loading bar.\n\t * @ko 로딩 바의 element를 반환한다.\n\t * @param {Boolean} [isAppend=currentLoadingBar|true] Checks whether the card element is added to the append () method. <ko>카드 엘리먼트가 append() 메서드로 추가 할 것인지 확인한다.</ko>\n\t * @return {Element} The element of loading bar. <ko>로딩 바의 element</ko>\n\t */\n\tgetLoadingBar(isAppend = this._getLoadingStatus() !== LOADING_PREPEND) {\n\t\treturn this._loadingBar[isAppend ? \""append\"" : \""prepend\""];\n\t}\n\t/**\n\t * Start loading for append/prepend during loading data.\n\t * @ko 데이터가 로딩되는 동안 append/prepend하길 위해 로딩을 시작한다.\n\t * @param {Boolean} [isAppend=true] Checks whether the card element is added to the append () method. <ko>카드 엘리먼트가 append() 메서드로 추가 할 것인지 확인한다.</ko>\n\t * @param {Object} [userStyle = {display: \""block\""}] custom style to apply to this loading bar for start. <ko> 로딩 시작을 위한 로딩 바에 적용할 커스텀 스타일 </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tstartLoading(isAppend, userStyle = {display: \""block\""}) {\n\t\tif (this._isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst type = isAppend ? \""append\"" : \""prepend\"";\n\n\t\tthis._process(isAppend ? LOADING_APPEND : LOADING_PREPEND);\n\t\tif (!this._loadingBar[type]) {\n\t\t\treturn this;\n\t\t}\n\t\tthis._renderLoading(userStyle);\n\t\tthis._status.loadingStyle = userStyle;\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis._setContainerSize(this._getEdgeValue(\""end\"") + this._status.loadingSize);\n\t\t}\n\t\treturn this;\n\t}\n\t_renderLoading(userStyle = this._status.loadingStyle) {\n\t\tif (!this._isLoading()) {\n\t\t\treturn;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst el = this._loadingBar[isAppend ? \""append\"" : \""prepend\""];\n\n\t\tif (!el) {\n\t\t\treturn;\n\t\t}\n\t\tconst style = Object.assign({\n\t\t\tposition: \""absolute\"",\n\t\t}, userStyle);\n\n\t\tfor (const property in style) {\n\t\t\tel.style[property] = style[property];\n\t\t}\n\t\tthis._status.loadingSize = this.options.horizontal ? outerWidth(el) : outerHeight(el);\n\t\tconst posName = this.options.horizontal ? \""left\"" : \""top\"";\n\n\t\tif (!(posName in style)) {\n\t\t\tconst pos = isAppend ? this._getEdgeValue(\""end\"") : this._getEdgeValue(\""start\"") - this._status.loadingSize;\n\n\t\t\tel.style[posName] = `${pos}px`;\n\t\t}\n\t}\n\t/**\n\t * End loading after startLoading() for append/prepend\n\t * @ko  append/prepend하길 위해 startLoading() 호출해선 걸었던 로딩을 끝낸다.\n\t * @param {Object} [userStyle = {display: \""none\""}] custom style to apply to this loading bar for end <ko> 로딩 시작을 위한 로딩 바에 적용할 커스텀 스타일 </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tendLoading(userStyle = {display: \""none\""}) {\n\t\tif (!this._isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst type = isAppend ? \""append\"" : \""prepend\"";\n\t\tconst el = this._loadingBar[type];\n\t\tconst status = this._status;\n\t\tconst size = status.loadingSize;\n\n\t\tthis._process(LOADING_APPEND | LOADING_PREPEND, false);\n\t\tstatus.loadingSize = 0;\n\t\tstatus.loadingStyle = {};\n\t\tif (el) {\n\t\t\tconst style = Object.assign({\n\t\t\t\t[this.options.horizontal ? \""left\"" : \""top\""]: `${-size}px`,\n\t\t\t}, userStyle);\n\n\t\t\tfor (const property in style) {\n\t\t\t\tel.style[property] = style[property];\n\t\t\t}\n\t\t\tif (!isAppend) {\n\t\t\t\tthis._fitItems(size);\n\t\t\t} else {\n\t\t\t\tthis._setContainerSize(this._getEdgeValue(\""end\""));\n\t\t\t}\n\t\t}\n\t\tif (this.options.useRecycle && !this.isProcessing()) {\n\t\t\tthis._infinite.recycle(this._watcher.getScrollPos(), isAppend);\n\t\t}\n\t\treturn this;\n\t}\n\t_setContainerSize(size) {\n\t\tthis._renderer.setContainerSize(Math.max(this._items.getMaxEdgeValue(), size));\n\t}\n\t/**\n\t * Retrieves the item via index or the element.\n\t * @ko index 또는 element를 통해 아이템을 가져온다.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> item에 해당하는 element 또는 해당 item이 있는 group의 index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 사용할 경우 해당 group에 있는 Item의 index </ko>\n\t * @return {object} The item containing the content, size and position,etc<ko>content, size, position 등이 담겨있는 item 정보</ko>\n\t * @example\n\n\t ig.getItem(0, 0);\n\t ig.getItem(element);\n\n\t {\n\t\tel: HTMLElement,\n\t\tcontent: \""<div>...</div>\"",\n\t\tsize: {width: ..., height: ...},\n\t\trect: {top: ..., left: ..., width: ..., height: ...},\n\t }\n\t */\n\tgetItem(groupIndex = 0, itemIndex) {\n\t\tif (itemIndex == null && typeof groupIndex === \""object\"") {\n\t\t\tif (!groupIndex) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst items = this.getItems();\n\t\t\tconst length = items.length;\n\n\t\t\tfor (let i = 0; i < length; ++i) {\n\t\t\t\tif (items[i].el === groupIndex) {\n\t\t\t\t\treturn items[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tconst group = this._items.getData(groupIndex);\n\n\t\t\treturn group && group.items[itemIndex || 0];\n\t\t}\n\t}\n\t_updateItem(item) {\n\t\tif (item && item.el) {\n\t\t\titem.content = item.el.outerHTML;\n\n\t\t\t!this.options.isEqualSize && resetSize(item);\n\t\t\tthis._renderer.updateSize([item]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t * Updates the item via index or the element.\n\t * @ko index 또는 element를 통해 아이템을 업데이트한다.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> item에 해당하는 element 또는 해당 item이 있는 group의 index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 사용할 경우 해당 group에 있는 Item의 index </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\telement.innerHTML = \""2\"";\n\telement.style.height = \""400px\"";\n\tig.updateItem(element);\n\tig.updateItem(0, 0);\n\t */\n\tupdateItem(groupIndex, itemIndex) {\n\t\tconst item = this.getItem(groupIndex, itemIndex);\n\n\t\tthis._updateItem(item) && this.layout(false);\n\n\t\treturn this;\n\t}\n\t/**\n\t * Update the currently displayed items.\n\t * 현재보여주는 아이템들을 업데이트한다.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\telement.innerHTML = \""2\"";\n\telement.style.height = \""400px\"";\n\n\telement2.innerHTML = \""2\"";\n\telement2.style.height = \""400px\"";\n\n\tig.updateItems();\n\t */\n\tupdateItems() {\n\t\tthis.getItems().forEach(item => {\n\t\t\tthis._updateItem(item);\n\t\t});\n\t\tthis.layout(false);\n\t\treturn this;\n\t}\n\t/**\n\t * Move to some group or item position.\n\t * @ko 해당하는 그룹 또는 아이템의 위치로 이동한다.\n\t * @param {Number} [index] group's index <ko> 그룹의 index</ko>\n\t * @param {Number} [itemIndex=-1] item's index <ko> 그룹의 index</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tmoveTo(index, itemIndex = 0) {\n\t\tif (this.isProcessing()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst data = this._items.getData(index);\n\n\t\tif (!data) {\n\t\t\treturn this;\n\t\t}\n\t\tconst infinite = this._infinite;\n\t\tconst outlines = data.outlines;\n\t\tconst items = data.items;\n\t\tconst item = items[itemIndex];\n\t\tconst isResize = outlines.start && (outlines.start.length === 0);\n\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\tconst endCursor = infinite.getCursor(\""end\"");\n\t\tconst isInCursor = startCursor <= index && index <= endCursor;\n\t\tconst {useRecycle, horizontal} = this.options;\n\n\t\tif (isInCursor || !useRecycle || !isResize) {\n\t\t\tlet pos = item ? item.rect[horizontal ? \""left\"" : \""top\""] : Math.max(...outlines.start);\n\t\t\tconst fit = Math.min(...outlines.start);\n\n\t\t\tif (fit < 0) {\n\t\t\t\t// base < 0\n\t\t\t\tthis._fitItems(fit, 0);\n\t\t\t\tpos -= fit;\n\t\t\t}\n\t\t\tconst isAppend = index > startCursor;\n\n\t\t\tif (isInCursor || isAppend) {\n\t\t\t\tthis._scrollTo(pos);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis._postLayout({\n\t\t\t\tfromCache: true,\n\t\t\t\tgroups: [data],\n\t\t\t\titems,\n\t\t\t\tnewItems: [],\n\t\t\t\tisAppend,\n\t\t\t\tisTrusted: false,\n\t\t\t\tmoveCache: true,\n\t\t\t\tmoveItem: itemIndex,\n\t\t\t});\n\t\t\treturn this;\n\t\t} else {\n\t\t\tconst isAppend = index > endCursor || index < startCursor - 1;\n\n\t\t\tthis._postCache({\n\t\t\t\tisAppend,\n\t\t\t\tcache: [data],\n\t\t\t\tisTrusted: false,\n\t\t\t\tmoveItem: itemIndex,\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\t_setScrollPos(pos) {\n\t\tthis._watcher.setScrollPos(this._watcher.getContainerOffset() + pos);\n\t}\n\t_scrollTo(pos) {\n\t\tthis._watcher.scrollTo(this._watcher.getContainerOffset() + pos);\n\t}\n\t_onImageError(e) {\n\t\t/**\n\t\t * This event is fired when an error occurs in the image.\n\t\t * @ko 이미지 로드에 에러가 날 때 발생하는 이벤트.\n\t\t * @event eg.InfiniteGrid#imageError\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Element} param.target Appending card's image element.<ko>추가 되는 카드의 이미지 엘리먼트</ko>\n\t\t * @param {Element} param.elememt The item's element with error images.<ko>에러난 이미지를 가지고 있는 아이템의 엘리먼트</ko>\n\t\t * @param {Object} param.items The items being added.<ko>화면에 추가중인 아이템들</ko>\n\t\t * @param {Object} param.item The item with error images.<ko>에러난 이미지를 가지고 있는 아이템</ko>\n\t\t * @param {Number} param.itemIndex The item's index with error images.<ko>에러난 이미지를 가지고 있는 아이템의 인덱스</ko>\n\t\t * @param {Function} param.remove In the imageError event, this method expects to remove the error image.<ko>이미지 에러 이벤트에서 이 메서드는 에러난 이미지를 삭제한다.</ko>\n\t\t * @param {Function} param.removeItem In the imageError event, this method expects to remove the item with the error image.<ko>이미지 에러 이벤트에서 이 메서드는 에러난 이미지를 가지고 있는 아이템을 삭제한다.</ko>\n\t\t * @param {Function} param.replace In the imageError event, this method expects to replace the error image's source or element.<ko>이미지 에러 이벤트에서 이 메서드는 에러난 이미지의 주소 또는 엘리먼트를 교체한다.</ko>\n\t\t * @param {Function} param.replaceItem In the imageError event, this method expects to replace the item's contents with the error image.<ko>이미지 에러 이벤트에서 이 메서드는 에러난 이미지를 가지고 있는 아이템의 내용을 교체한다.</ko>\n\t\t * @example\nig.on(\""imageError\"", e => {\n\te.remove();\n\te.removeItem();\n\te.replace(\""http://...jpg\"");\n\te.replace(imageElement);\n\te.replaceItem(\""item html\"");\n});\n\t\t */\n\t\tthis.trigger(\""imageError\"", Object.assign(e, {element: e.item.el}));\n\t}\n\t_postCache({cache, isAppend, isTrusted = true, moveItem = -1}) {\n\t\tconst {isConstantSize} = this.options;\n\t\tconst items = ItemManager.pluck(cache, \""items\"");\n\t\tlet fromCache = true;\n\t\tconst newItems = items.filter(item => {\n\t\t\tif (!item.orgSize) {\n\t\t\t\tfromCache = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !isConstantSize && item.rect.top < DUMMY_POSITION / 10;\n\t\t});\n\n\t\tthis._postLayout({\n\t\t\tfromCache,\n\t\t\tgroups: cache,\n\t\t\titems,\n\t\t\tnewItems,\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t\tmoveItem,\n\t\t});\n\t}\n\t_postLayout({\n\t\tfromCache,\n\t\tgroups,\n\t\titems = ItemManager.pluck(groups, \""items\""),\n\t\tnewItems,\n\t\tisAppend,\n\t\tisChildren,\n\t\tisTrusted,\n\t\tmoveCache,\n\t\tmoveItem = -2}) {\n\t\tthis._process(PROCESSING);\n\t\tconst method = isAppend ? \""append\"" : \""prepend\"";\n\t\tconst itemManager = this._items;\n\t\tconst horizontal = this.options.horizontal;\n\n\t\t// If container has children, it does not render first.\n\t\tif (!isChildren) {\n\t\t\tDOMRenderer.createElements(items);\n\t\t\tthis._renderer[method](items);\n\t\t}\n\t\tthis._manager[method]({\n\t\t\tgroups,\n\t\t\titems: newItems,\n\t\t\tisAppend,\n\t\t}, {\n\t\t\tcomplete: () => {\n\t\t\t\tconst infinite = this._infinite;\n\t\t\t\tconst startCursor = Math.max(infinite.getCursor(\""start\""), 0);\n\t\t\t\tconst endCursor = Math.max(infinite.getCursor(\""end\""), 0);\n\t\t\t\tlet requestStartCursor = itemManager.indexOf(groups[0].groupKey);\n\t\t\t\tlet requestEndCursor = itemManager.indexOf(groups[groups.length - 1].groupKey);\n\t\t\t\tlet isInCursor = true;\n\n\t\t\t\tif (requestStartCursor > endCursor + 1 || requestEndCursor < startCursor - 1) {\n\t\t\t\t\tisInCursor = false;\n\t\t\t\t}\n\t\t\t\tif (isInCursor) {\n\t\t\t\t\tif (isAppend) {\n\t\t\t\t\t\trequestStartCursor = startCursor;\n\t\t\t\t\t\trequestEndCursor = Math.max(endCursor, requestEndCursor);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trequestStartCursor = Math.max(Math.min(startCursor, requestStartCursor), 0);\n\t\t\t\t\t\trequestEndCursor = endCursor;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t!isInCursor && this._recycle({start: startCursor, end: endCursor});\n\t\t\t\tinfinite.setCursor(\""start\"", requestStartCursor);\n\t\t\t\tinfinite.setCursor(\""end\"", requestEndCursor);\n\n\t\t\t\tif (moveItem > -1) {\n\t\t\t\t\tconst pos = items[moveItem].rect[horizontal ? \""left\"" : \""top\""];\n\n\t\t\t\t\tif (!isInCursor && !moveCache) {\n\t\t\t\t\t\titemManager.clearOutlines(requestStartCursor, requestEndCursor);\n\t\t\t\t\t}\n\t\t\t\t\tthis._scrollTo(pos);\n\t\t\t\t\tthis._setScrollPos(pos);\n\t\t\t\t}\n\t\t\t\tthis._onLayoutComplete({groups, items, isAppend, fromCache, isTrusted, useRecycle: false});\n\t\t\t},\n\t\t\terror: e => this._onImageError(e),\n\t\t\tend: ({remove, layout}) => {\n\t\t\t\tremove.forEach(el => this.remove(el, false));\n\t\t\t\tif (layout) {\n\t\t\t\t\tthis.layout(false);\n\t\t\t\t} else if (!this.isProcessing() && this.options.useRecycle) {\n\t\t\t\t\tconst watcher = this._watcher;\n\t\t\t\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\treturn this;\n\t}\n\t// called by visible\n\t_requestAppend({cache}) {\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({cache, isAppend: APPEND});\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the bottom or right of a layout because there is no card to be displayed on screen when a user scrolls near bottom or right.\n\t\t\t * @ko 카드 엘리먼트가 레이아웃의 아래나 오른쪽에 추가돼야 할 때 발생하는 이벤트. 사용자가 아래나 오른쪽으로 스크롤해서 화면에 표시될 카드가 없을 때 발생한다\n\t\t\t * @event eg.InfiniteGrid#append\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>화면에 보여지는 마지막 그룹의 그룹키</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for append loading data. <ko> 뒷쪽에 추가되는 데이터 로딩을 시작한다. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩을 시작할 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t */\n\t\t\tthis.trigger(\""append\"", {\n\t\t\t\tisTrusted: TRUSTED,\n\t\t\t\tgroupKey: this.getGroupKeys().pop() || \""\"",\n\t\t\t\tstartLoading: userStyle => {\n\t\t\t\t\tthis.startLoading(true, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: userStyle => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\t// called by visible\n\t_requestPrepend({cache}) {\n\t\tthis._fit(this.options.useFit || !cache.length);\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({cache, isAppend: PREPEND});\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the top or left of a layout because there is no card to be displayed on screen when a user scrolls near top or left.\n\t\t\t * @ko 카드가 레이아웃의 위나 왼쪽에 추가돼야 할 때 발생하는 이벤트. 사용자가 위나 왼쪽으로 스크롤해서 화면에 표시될 카드가 없을 때 발생한다.\n\t\t\t * @event eg.InfiniteGrid#prepend\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>화면에 보여지는 첫번째 그룹의 그룹키</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for prepend loading data. <ko> 앞쪽에 추가되는 데이터 로딩을 시작한다. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩을 시작할 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t */\n\t\t\tthis.trigger(\""prepend\"", {\n\t\t\t\tisTrusted: TRUSTED,\n\t\t\t\tgroupKey: this.getGroupKeys().shift(),\n\t\t\t\tstartLoading: userStyle => {\n\t\t\t\t\tthis.startLoading(false, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: userStyle => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\t_onResize() {\n\t\tthis.layout(true);\n\t}\n\t_onCheck({isForward, scrollPos, horizontal, orgScrollPos}) {\n\t\t/**\n\t\t * This event is fired when the user scrolls.\n\t\t * @ko 사용자가 스크롤 할 경우 발생하는 이벤트.\n\t\t * @event eg.InfiniteGrid#change\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Boolean} param.isForward Indicates whether the scroll progression direction is forward or backword. <ko>스크롤 진행방향이 앞쪽으로 진행하는 지, 뒤쪽으로 진행하는지를 나타낸다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테이너 엘리먼트 기준의 현재 스크롤 위치값</ko>\n\t\t * @param {Boolean} param.orgScrollPos Current position of the scroll <ko>현재 스크롤 위치값</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t * @param {Boolean} options.horizontal Direction of the scroll movement (true: horizontal, false: vertical) <ko>스크롤 이동 방향 (true 가로방향, false 세로방향</ko>\n\t\t */\n\t\tthis.trigger(\""change\"", {\n\t\t\tisForward,\n\t\t\thorizontal,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t});\n\t\tthis._infinite.scroll(scrollPos);\n\t}\n\t_onLayoutComplete({items, isAppend, isTrusted = false,\n\t\tuseRecycle = this.options.useRecycle,\n\t\tfromCache = false,\n\t\tisLayout = false,\n\t}) {\n\t\tconst viewSize = this._renderer.getViewSize();\n\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis._isLoading() && this._renderLoading();\n\t\t}\n\n\t\tconst watcher = this._watcher;\n\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t// recycle after _fit beacause prepend and append are occured simultaneously by scroll.\n\t\tif (!isLayout && useRecycle && !this._isLoading()) {\n\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t}\n\n\t\tconst size = this._getEdgeValue(\""end\"");\n\n\t\tif (isAppend) {\n\t\t\tthis._setContainerSize(size + this._status.loadingSize || 0);\n\t\t\tif (scrollPos > 0) {\n\t\t\t\t!IS_IOS && this._scrollTo(scrollPos);\n\t\t\t}\n\t\t}\n\t\t!isLayout && this._process(PROCESSING, false);\n\n\t\t/**\n\t\t * This event is fired when layout is successfully arranged through a call to the append(), prepend(), or layout() method.\n\t\t * @ko 레이아웃 배치가 완료됐을 때 발생하는 이벤트. append() 메서드나 prepend() 메서드, layout() 메서드 호출 후 카드의 배치가 완료됐을 때 발생한다\n\t\t * @event eg.InfiniteGrid#layoutComplete\n\t\t *\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Array} param.target Rearranged card elements<ko>재배치된 카드 엘리먼트들</ko>\n\t\t * @param {Boolean} param.fromCache Check whether these items are cache or not <ko>해당 아이템들이 캐시인지 아닌지 확인한다.</ko>\n\t\t * @param {Boolean} param.isLayout Returns true if this is an event called by resize event or layout method. Returns false if this is an event called by adding an item. <ko>해당 이벤트가 리사이즈 이벤트 또는 layout() 메서드를 통해 호출됐으면 true, 아이템 추가로 호출됐으면 false를 반환한다.</ko>\n\t\t * @param {Boolean} param.isAppend Checks whether the append() method is used to add a card element. It returns true even though the layoutComplete event is fired after the layout() method is called. <ko>카드 엘리먼트가 append() 메서드로 추가됐는지 확인한다. layout() 메서드가 호출된 후 layoutComplete 이벤트가 발생해도 'true'를 반환한다.</ko>\n\t\t * @param {Boolean} param.isScroll Checks whether scrolling has occurred after the append(), prepend(), ..., etc method is called <ko>append, prend 등 호출 후 스크롤이 생겼는지 확인한다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테이너 엘리먼트 기준의 현재 스크롤 위치값</ko>\n\t\t * @param {Number} param.orgScrollPos Current position of the scroll <ko>현재 스크롤 위치값</ko>\n\t\t * @param {Number} param.size The size of container element <ko>컨테이너 엘리먼트의 크기</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t */\n\t\tthis.trigger(\""layoutComplete\"", {\n\t\t\ttarget: items.concat(),\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t\tfromCache,\n\t\t\tisLayout,\n\t\t\tisScroll: viewSize < watcher.getContainerOffset() + size,\n\t\t\tscrollPos,\n\t\t\torgScrollPos: watcher.getOrgScrollPos(),\n\t\t\tsize,\n\t\t\tendLoading: userStyle => {\n\t\t\t\tthis.endLoading(userStyle);\n\t\t\t},\n\t\t});\n\t\tthis._infinite.scroll(scrollPos, isAppend);\n\t}\n\t_reset() {\n\t\tthis._status = {\n\t\t\tprocessingStatus: IDLE,\n\t\t\tloadingSize: 0,\n\t\t};\n\t}\n\t/**\n\t * Destroys elements, properties, and events used on a grid layout.\n\t * @ko 그리드 레이아웃에 사용한 엘리먼트와 속성, 이벤트를 해제한다\n\t */\n\tdestroy() {\n\t\tthis._infinite.clear();\n\t\tthis._watcher.destroy();\n\t\tthis._manager.destroy();\n\t\tthis._reset();\n\t\tthis._items.clear();\n\t\tthis._renderer.destroy();\n\t}\n}\n\nexport default InfiniteGrid;\n"",""import {APPEND, PREPEND, ALIGN} from \""../consts\"";\nimport {getStyleNames, assignOptions, fill, cloneItems} from \""../utils\"";\n\n// ALIGN\nconst {START, CENTER, END, JUSTIFY} = ALIGN;\n\n\n/**\n * @classdesc The GridLayout is a layout that stacks cards with the same width as a stack of bricks. Adjust the width of all images to the same size, find the lowest height column, and insert a new card.\n * @ko GridLayout는 벽돌을 쌓아 올린 모양처럼 동일한 너비를 가진 카드를 쌓는 레이아웃이다. 모든 이미지의 너비를 동일한 크기로 조정하고, 가장 높이가 낮은 열을 찾아 새로운 이미지를 삽입한다. 따라서 배치된 카드 사이에 빈 공간이 생기지는 않지만 배치된 레이아웃의 아래쪽은 울퉁불퉁해진다.\n * @class eg.InfiniteGrid.GridLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.GridLayout module <ko>eg.InfiniteGrid.GridLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.align=START] Align of the position of the items (START, CENTER, END, JUSTIFY) <ko>아이템들의 위치의 정렬 (START, CENTER, END, JUSTIFY)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n\thorizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.GridLayout, {\n\tmargin: 10,\n\talign: \""start\"",\n\titemSize: 200\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.GridLayout({\n\tmargin: 10,\n\talign: \""center\"",\n\titemSize: 200,\n\thorizontal: true,\n});\n\n</script>\n```\n **/\nclass GridLayout {\n\tconstructor(options = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\talign: START,\n\t\t\titemSize: 0,\n\t\t}, options);\n\t\tthis._size = 0;\n\t\tthis._columnSize = 0;\n\t\tthis._columnLength = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\tcheckColumn(item) {\n\t\tconst {itemSize, margin, horizontal} = this.options;\n\t\tconst sizeName = horizontal ? \""height\"" : \""width\"";\n\t\tconst columnSize = parseInt(itemSize || (item && item.size[sizeName]), 10) || 0;\n\n\t\tthis._columnSize = columnSize;\n\t\tif (!columnSize) {\n\t\t\tthis._columnLength = 1;\n\t\t\treturn;\n\t\t}\n\t\tthis._columnLength = Math.max(parseInt((this._size + margin) / (columnSize + margin), 10), 1);\n\t}\n\t_layout(items, outline, isAppend) {\n\t\tconst length = items.length;\n\t\tconst margin = this.options.margin;\n\t\tconst align = this.options.align;\n\t\tconst style = this._style;\n\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst pos1Name = style.pos1;\n\t\tconst pos2Name = style.pos2;\n\t\tconst columnSize = this._columnSize;\n\t\tconst columnLength = this._columnLength;\n\n\t\tconst size = this._size;\n\t\tconst viewDist = (size - (columnSize + margin) * columnLength + margin);\n\n\t\tconst pointCaculateName = isAppend ? \""min\"" : \""max\"";\n\t\tconst startOutline = outline.slice();\n\t\tconst endOutline = outline.slice();\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst point = Math[pointCaculateName](...endOutline) || 0;\n\t\t\tlet index = endOutline.indexOf(point);\n\t\t\tconst item = items[isAppend ? i : length - 1 - i];\n\t\t\tconst size1 = item.size[size1Name];\n\t\t\tconst size2 = item.size[size2Name];\n\t\t\tconst pos1 = isAppend ? point : point - margin - size1;\n\t\t\tconst endPos1 = pos1 + size1 + margin;\n\n\t\t\tif (index === -1) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tlet pos2 = (columnSize + margin) * index;\n\n\t\t\t// ALIGN\n\t\t\tif (align === CENTER) {\n\t\t\t\tpos2 += viewDist / 2;\n\t\t\t} else if (align === END) {\n\t\t\t\tpos2 += viewDist + columnSize - size2;\n\t\t\t} else if (align === JUSTIFY) {\n\t\t\t\tif (columnLength <= 1) {\n\t\t\t\t\tpos2 += viewDist / 2;\n\t\t\t\t} else {\n\t\t\t\t\tpos2 = (size - columnSize) / (columnLength - 1) * index;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// tetris\n\t\t\titem.rect = {\n\t\t\t\t[pos1Name]: pos1,\n\t\t\t\t[pos2Name]: pos2,\n\t\t\t};\n\t\t\titem.column = index;\n\t\t\tendOutline[index] = isAppend ? endPos1 : pos1;\n\t\t}\n\t\tif (!isAppend) {\n\t\t\titems.sort((a, b) => {\n\t\t\t\tconst item1pos1 = a.rect[pos1Name];\n\t\t\t\tconst item1pos2 = a.rect[pos2Name];\n\t\t\t\tconst item2pos1 = b.rect[pos1Name];\n\t\t\t\tconst item2pos2 = b.rect[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t}\n\t\t// if append items, startOutline is low, endOutline is high\n\t\t// if prepend items, startOutline is high, endOutline is low\n\t\treturn {\n\t\t\tstart: isAppend ? startOutline : endOutline,\n\t\t\tend: isAppend ? endOutline : startOutline,\n\t\t};\n\t}\n\t_insert(items = [], outline = [], type, cache) {\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\tlet startOutline = outline;\n\n\t\tif (!this._columnLength) {\n\t\t\tthis.checkColumn(items[0]);\n\t\t}\n\t\tif (outline.length !== this._columnLength) {\n\t\t\tstartOutline = fill(new Array(this._columnLength), outline.length === 0 ? 0 : (Math[type === APPEND ? \""min\"" : \""max\""](...outline) || 0));\n\t\t}\n\n\t\tconst result = this._layout(clone, startOutline, type);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: result,\n\t\t};\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100, 200, 300, 400]);\n\t */\n\tappend(items, outline, cache) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100, 200, 300, 400]);\n\t */\n\tprepend(items, outline, cache) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.GridLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tlayout(groups = [], outline = []) {\n\t\tconst firstItem = (groups.length && groups[0].items.length && groups[0].items[0]) || 0;\n\n\t\tthis.checkColumn(firstItem);\n\n\t\t// if outlines' length and columns' length are now same, re-caculate outlines.\n\t\tlet startOutline;\n\n\t\tif (outline.length !== this._columnLength) {\n\t\t\tconst pos = outline.length === 0 ? 0 : Math.min(...outline);\n\n\t\t\t// re-layout items.\n\t\t\tstartOutline = fill(new Array(this._columnLength), pos);\n\t\t} else {\n\t\t\tstartOutline = outline.slice();\n\t\t}\n\t\tgroups.forEach(group => {\n\t\t\tconst items = group.items;\n\t\t\tconst result = this._layout(items, startOutline, APPEND);\n\n\t\t\tgroup.outlines = result;\n\t\t\tstartOutline = result.end;\n\t\t});\n\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.GridLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.GridLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tsetSize(size) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n}\n\nexport default GridLayout;\n\n"",""import {APPEND, PREPEND, DUMMY_POSITION} from \""../consts\"";\nimport {getStyleNames, assignOptions, fill, cloneItems} from \""../utils\"";\n\n/*\nFrame\n[\n[1, 1, 1, 1, 1],\n[0, 0, 2, 2, 2],\n[0, 0, 2, 2, 2],\n[3, 4, 5, 5, 5],\n]\n*/\nfunction disableFrame(frame, type, x, y, width, height) {\n\tfor (let i = y; i < y + height; ++i) {\n\t\tfor (let j = x; j < x + width; ++j) {\n\t\t\tif (type !== frame[i][j]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tframe[i][j] = 0;\n\t\t}\n\t}\n}\nfunction searchShapeInFrame(frame, type, top, left, width, height) {\n\tconst size = {\n\t\tleft,\n\t\ttop,\n\t\ttype,\n\t\twidth: 1,\n\t\theight: 1,\n\t};\n\n\tfor (let i = left; i < width; ++i) {\n\t\tif (frame[top][i] === type) {\n\t\t\tsize.width = i - left + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\tfor (let i = top; i < height; ++i) {\n\t\tif (frame[i][left] === type) {\n\t\t\tsize.height = i - top + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\t// After finding the shape, it will not find again.\n\tdisableFrame(frame, type, left, top, size.width, size.height);\n\treturn size;\n}\nfunction getShapes(frame) {\n\tconst height = frame.length;\n\tconst width = height ? frame[0].length : 0;\n\tconst shapes = [];\n\n\tfor (let i = 0; i < height; ++i) {\n\t\tfor (let j = 0; j < width; ++j) {\n\t\t\tconst type = frame[i][j];\n\n\t\t\tif (!type) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Separate shapes with other numbers.\n\t\t\tshapes.push(searchShapeInFrame(frame, type, i, j, width, height));\n\t\t}\n\t}\n\tshapes.sort((a, b) => (a.type < b.type ? -1 : 1));\n\treturn {\n\t\tshapes,\n\t\twidth,\n\t\theight,\n\t};\n}\n/**\n * @classdesc FrameLayout is a layout that allows you to place cards in a given frame. It is a layout that corresponds to a level intermediate between the placement of the image directly by the designer and the layout using the algorithm.\n * @ko FrameLayout은 주어진 프레임에 맞춰 카드를 배치하는 레이아웃입니다. 디자이너가 직접 이미지를 배치하는 것과 알고리즘을 사용한 배치의 중간 정도 수준에 해당하는 레이아웃이다.\n * @class eg.InfiniteGrid.FrameLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.FrameLayout module <ko>eg.InfiniteGrid.FrameLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @param {Boolean} [options.frame=[]] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @param {Boolean} [options.frameFill=true] Make sure that the frame can be attached after the previous frame. <ko> 다음 프레임이 전 프레임에 이어 붙일 수 있는지 있는지 확인한다. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n\thorizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.FrameLayout, {\n\tmargin: 10,\n\titemSize: 200,\n\tframe: [\n\t\t[1, 1, 1, 1, 1],\n\t\t[0, 0, 2, 2, 2],\n\t\t[0, 0, 2, 2, 2],\n\t\t[3, 4, 5, 5, 5],\n\t],\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.FrameLayout({\n\tmargin: 10,\n\titemSize: 200,\n\thorizontal: true,\n\tframe: [\n\t\t[1, 1, 1, 1, 1],\n\t\t[0, 0, 2, 2, 2],\n\t\t[0, 0, 2, 2, 2],\n\t\t[3, 4, 5, 5, 5],\n\t],\n});\n\n</script>\n```\n **/\nclass FrameLayout {\n\tconstructor(options = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\titemSize: 0,\n\t\t\tframe: [],\n\t\t\tframeFill: true,\n\t\t}, options);\n\t\tconst frame = this.options.frame.map(row => row.slice());\n\n\t\tthis._itemSize = this.options.itemSize || 0;\n\t\t// divide frame into shapes.\n\t\tthis._shapes = getShapes(frame);\n\t\tthis._size = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t_getItemSize() {\n\t\tthis._checkItemSize();\n\n\t\treturn this._itemSize;\n\t}\n\t_checkItemSize() {\n\t\tif (this.options.itemSize) {\n\t\t\tthis._itemSize = this.options.itemSize;\n\t\t\treturn;\n\t\t}\n\t\tconst style = this._style;\n\t\tconst size = style.size2;\n\t\tconst margin = this.options.margin;\n\n\t\t// if itemSize is not in options, caculate itemSize from size.\n\t\tthis._itemSize = (this._size + margin) / this._shapes[size] - margin;\n\t}\n\t_layout(items, outline = [], isAppend) {\n\t\tconst length = items.length;\n\t\tconst style = this._style;\n\t\tconst {margin, frameFill} = this.options;\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst pos1Name = style.pos1;\n\t\tconst pos2Name = style.pos2;\n\t\tconst itemSize = this._getItemSize();\n\t\tconst isItemObject = typeof itemSize === \""object\"";\n\t\tconst itemSize2 = isItemObject ? itemSize[size2Name] : itemSize;\n\t\tconst itemSize1 = isItemObject ? itemSize[size1Name] : itemSize;\n\t\tconst shapesSize = this._shapes[size2Name];\n\t\tconst shapes = this._shapes.shapes;\n\t\tconst shapesLength = shapes.length;\n\t\tconst startOutline = fill(new Array(shapesSize), DUMMY_POSITION);\n\t\tconst endOutline = fill(new Array(shapesSize), DUMMY_POSITION);\n\t\tlet dist = 0;\n\t\tlet end = 0;\n\n\t\tif (!shapesLength) {\n\t\t\treturn {start: outline, end: outline};\n\t\t}\n\t\tfor (let i = 0; i < length; i += shapesLength) {\n\t\t\tfor (let j = 0; j < shapesLength && i + j < length; ++j) {\n\t\t\t\tconst item = items[i + j];\n\t\t\t\tconst shape = shapes[j];\n\t\t\t\tconst shapePos1 = shape[pos1Name];\n\t\t\t\tconst shapePos2 = shape[pos2Name];\n\t\t\t\tconst shapeSize1 = shape[size1Name];\n\t\t\t\tconst shapeSize2 = shape[size2Name];\n\t\t\t\tconst pos1 = end - dist + shapePos1 * (itemSize1 + margin);\n\t\t\t\tconst pos2 = shapePos2 * (itemSize2 + margin);\n\t\t\t\tconst size1 = shapeSize1 * (itemSize1 + margin) - margin;\n\t\t\t\tconst size2 = shapeSize2 * (itemSize2 + margin) - margin;\n\n\t\t\t\tfor (let k = shapePos2; k < shapePos2 + shapeSize2 && k < shapesSize; ++k) {\n\t\t\t\t\tif (startOutline[k] === DUMMY_POSITION) {\n\t\t\t\t\t\tstartOutline[k] = pos1;\n\t\t\t\t\t}\n\t\t\t\t\tstartOutline[k] = Math.min(startOutline[k], pos1);\n\t\t\t\t\tendOutline[k] = Math.max(endOutline[k], pos1 + size1 + margin);\n\t\t\t\t}\n\t\t\t\titem.rect = {\n\t\t\t\t\t[pos1Name]: pos1,\n\t\t\t\t\t[pos2Name]: pos2,\n\t\t\t\t\t[size1Name]: size1,\n\t\t\t\t\t[size2Name]: size2,\n\t\t\t\t};\n\t\t\t}\n\t\t\tend = Math.max(...endOutline);\n\t\t\t// check dist once\n\t\t\tif (i !== 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// find & fill empty block\n\t\t\tif (!frameFill) {\n\t\t\t\tdist = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdist = end;\n\n\t\t\tfor (let j = 0; j < shapesSize; ++j) {\n\t\t\t\tif (startOutline[j] === DUMMY_POSITION) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// the dist between frame's end outline and next frame's start outline\n\t\t\t\t// expect that next frame's start outline is startOutline[j] + end\n\t\t\t\tdist = Math.min(startOutline[j] + end - endOutline[j], dist);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\tif (startOutline[i] !== DUMMY_POSITION) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstartOutline[i] = Math.max(...startOutline);\n\t\t\tendOutline[i] = startOutline[i];\n\t\t}\n\t\t// The target outline is start outline when type is APPENDING\n\t\tconst targetOutline = isAppend ? startOutline : endOutline;\n\t\tconst prevOutlineEnd = outline.length === 0 ? 0 : Math[isAppend ? \""max\"" : \""min\""](...outline);\n\t\tlet prevOutlineDist = isAppend ? 0 : end;\n\n\t\tif (frameFill && outline.length === shapesSize) {\n\t\t\tprevOutlineDist = -DUMMY_POSITION;\n\t\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\t\tif (startOutline[i] === endOutline[i]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// if appending type is PREPEND, subtract dist from appending group's height.\n\n\t\t\t\tprevOutlineDist = Math.min(targetOutline[i] + prevOutlineEnd - outline[i], prevOutlineDist);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\tstartOutline[i] += prevOutlineEnd - prevOutlineDist;\n\t\t\tendOutline[i] += prevOutlineEnd - prevOutlineDist;\n\t\t}\n\t\titems.forEach(item => {\n\t\t\titem.rect[pos1Name] += prevOutlineEnd - prevOutlineDist;\n\t\t});\n\t\treturn {\n\t\t\tstart: startOutline.map(point => parseInt(point, 10)),\n\t\t\tend: endOutline.map(point => parseInt(point, 10)),\n\t\t};\n\t}\n\t_insert(items = [], outline = [], type, cache) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, type),\n\t\t};\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.FrameLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tlayout(groups = [], outline = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\n\t\t\tpoint = this._layout(group.items, point, APPEND);\n\t\t\tgroup.outlines = point;\n\t\t\tpoint = point.end;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.FrameLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.FrameLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tsetSize(size) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tappend(items, outline, cache) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tprepend(items, outline, cache) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n}\n\nexport default FrameLayout;\n"",""import FrameLayout from \""./FrameLayout\"";\nimport {fill} from \""../utils\"";\n\nfunction makeShapeOutline(outline, itemSize, columnLength, isAppend) {\n\tconst point = Math[isAppend ? \""min\"" : \""max\""](...outline) || 0;\n\n\tif (outline.length !== columnLength) {\n\t\treturn fill(new Array(columnLength), 0);\n\t}\n\treturn outline.map(l => parseInt((l - point) / itemSize, 10));\n}\nfunction getColumn(item) {\n\tif (item.column) {\n\t\treturn item.column;\n\t}\n\tlet column = 0;\n\n\tif (item.el) {\n\t\tconst dataset = item.el.dataset;\n\n\t\tif (dataset) {\n\t\t\tcolumn = dataset.column || 1;\n\t\t} else {\n\t\t\tcolumn = item.el.getAttribute(\""column\"") || 1;\n\t\t}\n\t} else {\n\t\tcolumn = 1;\n\t}\n\titem.column = column;\n\treturn column;\n}\n\n/**\n * @classdesc SquareLayout is a layout that places all cards like squares on a checkerboard, and important cards are n times larger. The main card can be enlarged, and then a small card can be placed to naturally show the relationship of the card.\n * @ko SquareLayout은 바둑판처럼 모든 카드를 정사각형으로 배치하고 중요한 카드는 크기를 N배로 키워서 보여주는 레이아웃이다. 주요 카드를 크게 표시하고, 그 다음에 작은 카드를 배치해 자연스럽게 카드의 관계를 나타낼 수 있습니다.\n * @class eg.InfiniteGrid.SquareLayout\n * @extends eg.InfiniteGrid.FrameLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.SquareLayout module <ko>eg.InfiniteGrid.SquareLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n\thorizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.SquareLayout, {\n\tmargin: 10,\n\titemSize: 200,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.SquareLayout({\n\tmargin: 10,\n\titemSize: 200,\n\thorizontal: true,\n});\n\n\nvar item1 = '<div data-column=\""2\""></div>';\nvar item2 = \""<div></div>\""\nlayout.append([item1, item2]);\n</script>\n```\n **/\nclass SquareLayout extends FrameLayout {\n\t_checkItemSize() {\n\t\tconst column = this.options.column;\n\n\t\tif (!column) {\n\t\t\tsuper._checkItemSize();\n\t\t\treturn;\n\t\t}\n\t\tconst margin = this.options.margin;\n\n\t\t// if itemSize is not in options, caculate itemSize from size.\n\t\tthis._itemSize = (this._size + margin) / column - margin;\n\t}\n\t_layout(items, outline = [], isAppend) {\n\t\tconst itemSize = this._getItemSize();\n\t\tconst margin = this.options.margin;\n\t\tconst columnLength = this.options.column ||\n\t\t\t\tparseInt((this._size + margin) / (itemSize + margin), 10) || 1;\n\t\tconst length = items.length;\n\t\tconst endOutline = makeShapeOutline(outline, itemSize, columnLength, isAppend);\n\t\tconst pointCaculateName = isAppend ? \""min\"" : \""max\"";\n\t\tconst shapes = [];\n\t\tconst sign = isAppend ? 1 : -1;\n\t\tconst style = this._style;\n\t\tconst pos1Name = style.pos1;\n\t\tconst pos2Name = style.pos2;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst point = Math[pointCaculateName](...endOutline);\n\t\t\tlet index = endOutline[isAppend ? \""indexOf\"" : \""lastIndexOf\""](point);\n\t\t\tconst item = items[i];\n\t\t\tconst columnWidth = item.columnWidth;\n\t\t\tconst column = (columnWidth && columnWidth[0] === columnLength &&\n\t\t\t\t\tcolumnWidth[1]) || getColumn(item);\n\t\t\tlet columnCount = 1;\n\n\t\t\tif (column > 1) {\n\t\t\t\tfor (let j = 1; j < column &&\n\t\t\t\t\t\t((isAppend && index + j < columnLength) || (!isAppend && index - j >= 0)); ++j) {\n\t\t\t\t\tif ((isAppend && endOutline[index + sign * j] <= point) ||\n\t\t\t\t\t\t(!isAppend && endOutline[index + sign * j] >= point)) {\n\t\t\t\t\t\t++columnCount;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!isAppend) {\n\t\t\t\t\tindex -= columnCount - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.columnWidth = [columnLength, columnCount];\n\t\t\tshapes.push({\n\t\t\t\twidth: columnCount,\n\t\t\t\theight: columnCount,\n\t\t\t\t[pos1Name]: point - (!isAppend ? columnCount : 0),\n\t\t\t\t[pos2Name]: index,\n\t\t\t\tindex: i,\n\t\t\t});\n\t\t\tfor (let j = 0; j < columnCount; ++j) {\n\t\t\t\tendOutline[index + j] = point + sign * columnCount;\n\t\t\t}\n\t\t}\n\t\tthis._shapes = {\n\t\t\tshapes,\n\t\t\t[style.size2]: columnLength,\n\t\t};\n\n\t\tconst result = super._layout(items, outline, isAppend);\n\n\t\tif (!isAppend) {\n\t\t\tshapes.sort((shape1, shape2) => {\n\t\t\t\tconst item1pos1 = shape1[pos1Name];\n\t\t\t\tconst item1pos2 = shape1[pos2Name];\n\t\t\t\tconst item2pos1 = shape2[pos1Name];\n\t\t\t\tconst item2pos2 = shape2[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t\titems.sort((a, b) => {\n\t\t\t\tconst item1pos1 = a.rect[pos1Name];\n\t\t\t\tconst item1pos2 = a.rect[pos2Name];\n\t\t\t\tconst item2pos1 = b.rect[pos1Name];\n\t\t\t\tconst item2pos2 = b.rect[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport default SquareLayout;\n"",""export default class BoxModel {\n\tconstructor(options) {\n\t\tObject.assign(this, {\n\t\t\toriginWidth: 0,\n\t\t\toriginHeight: 0,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\titems: [],\n\t\t}, options);\n\t}\n\tscaleTo(width, height) {\n\t\tconst scaleX = this.width ? width / this.width : 0;\n\t\tconst scaleY = this.height ? height / this.height : 0;\n\n\t\tthis.items.forEach(v => {\n\t\t\tif (scaleX !== 0) {\n\t\t\t\tv.left *= scaleX;\n\t\t\t\tv.width *= scaleX;\n\t\t\t}\n\t\t\tif (scaleY !== 0) {\n\t\t\t\tv.top *= scaleY;\n\t\t\t\tv.height *= scaleY;\n\t\t\t}\n\t\t});\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\tpush(item) {\n\t\tthis.items.push(item);\n\t}\n\tgetOriginSize() {\n\t\treturn this.originWidth * this.originHeight;\n\t}\n\tgetSize() {\n\t\treturn this.width * this.height;\n\t}\n\tgetOriginRatio() {\n\t\treturn (this.originHeight === 0) ? 0 : this.originWidth / this.originHeight;\n\t}\n\tgetRatio() {\n\t\treturn (this.height === 0) ? 0 : this.width / this.height;\n\t}\n}\n"",""import BoxModel from \""./lib/BoxModel.js\"";\nimport {APPEND, PREPEND} from \""../consts\"";\nimport {getStyleNames, assignOptions, toZeroArray, cloneItems} from \""../utils\"";\n\n\nfunction getCost(originLength, length) {\n\tlet cost = originLength / length;\n\n\tif (cost < 1) {\n\t\tcost = 1 / cost;\n\t}\n\n\treturn cost - 1;\n}\nfunction fitArea(item, bestFitArea, itemFitSize, containerFitSize, layoutVertical) {\n\titem.height = itemFitSize.height;\n\titem.width = itemFitSize.width;\n\tbestFitArea.height = containerFitSize.height;\n\tbestFitArea.width = containerFitSize.width;\n\n\tif (layoutVertical) {\n\t\titem.top = bestFitArea.top + bestFitArea.height;\n\t\titem.left = bestFitArea.left;\n\t} else {\n\t\titem.left = bestFitArea.left + bestFitArea.width;\n\t\titem.top = bestFitArea.top;\n\t}\n}\n\n/**\n * @classdesc The PackingLayout is a layout that shows the important cards bigger without sacrificing the weight of the cards. Rows and columns are separated so that cards are dynamically placed within the horizontal and vertical space rather than arranged in an orderly fashion.\n * @ko PackingLayout은 카드의 본래 크기에 따른 비중을 해치지 않으면서 중요한 카드는 더 크게 보여 주는 레이아웃이다. 행과 열이 구분돼 이미지를 정돈되게 배치하는 대신 가로세로 일정 공간 내에서 동적으로 카드를 배치한다.\n * @class eg.InfiniteGrid.PackingLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.PackingLayout module <ko>eg.InfiniteGrid.PackingLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.aspectRatio=1] The aspect ratio of the group <ko> 그룹의 가로 세로 비 </ko>\n * @param {Boolean} [options.sizeWeight=1] The size weight when placing an image <ko> 이미지를 배치할 때 사이즈 가중치 </ko>\n * @param {Boolean} [options.ratioWeight=1] The ratio weight when placing an image <ko> 이미지를 배치할 때 비율 가중치 </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n\thorizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.PackingLayout, {\n\tmargin: 10,\n\taspectRatio: 1,\n\tsizeWeight: 1,\n\tratioWeight: 2,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.PackingLayout({\n\thorizontal: true,\n\tmargin: 10,\n\taspectRatio: 1,\n\tsizeWeight: 1,\n\tratioWeight: 2,\n});\n\n</script>\n```\n **/\nclass PackingLayout {\n\tconstructor(options = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\taspectRatio: 1,\n\t\t\tsizeWeight: 1,\n\t\t\tratioWeight: 1,\n\t\t}, options);\n\t\tthis._size = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t_findBestFitArea(container, item) {\n\t\tif (container.getRatio() === 0) { // 아이템 최초 삽입시 전체영역 지정\n\t\t\tcontainer.originWidth = item.width;\n\t\t\tcontainer.originHeight = item.height;\n\t\t\tcontainer.width = item.width;\n\t\t\tcontainer.height = item.height;\n\t\t\treturn;\n\t\t}\n\n\t\tlet bestFitArea = null;\n\t\tlet minCost = 10000000;\n\t\tlet layoutVertical = false;\n\t\tconst itemFitSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t};\n\t\tconst containerFitSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t};\n\t\tconst {sizeWeight, ratioWeight} = this.options;\n\n\t\tcontainer.items.forEach(v => {\n\t\t\tconst containerSizeCost = getCost(v.getOriginSize(), v.getSize()) * sizeWeight;\n\t\t\tconst containerRatioCost = getCost(v.getOriginRatio(), v.getRatio()) * ratioWeight;\n\t\t\tconst width = v.width;\n\t\t\tconst height = v.height;\n\t\t\tlet cost;\n\n\t\t\tfor (let i = 0; i < 2; ++i) {\n\t\t\t\tlet itemWidth;\n\t\t\t\tlet itemHeight;\n\t\t\t\tlet containerWidth;\n\t\t\t\tlet containerHeight;\n\n\t\t\t\tif (i === 0) {\n\t\t\t\t\t// 상하에 아이템 추가\n\t\t\t\t\titemWidth = width;\n\t\t\t\t\titemHeight = height * (item.height / (v.originHeight + item.height));\n\t\t\t\t\tcontainerWidth = width;\n\t\t\t\t\tcontainerHeight = height - itemHeight;\n\t\t\t\t} else {\n\t\t\t\t\t// 좌우에 아이템 추가\n\t\t\t\t\titemHeight = height;\n\t\t\t\t\titemWidth = width * (item.width / (v.originWidth + item.width));\n\t\t\t\t\tcontainerHeight = height;\n\t\t\t\t\tcontainerWidth = width - itemWidth;\n\t\t\t\t}\n\n\t\t\t\tconst itemSize = itemWidth * itemHeight;\n\t\t\t\tconst itemRatio = itemWidth / itemHeight;\n\t\t\t\tconst containerSize = containerWidth * containerHeight;\n\t\t\t\tconst containerRatio = containerHeight / containerHeight;\n\n\t\t\t\tcost = getCost(item.getSize(), itemSize) * sizeWeight;\n\t\t\t\tcost += getCost(item.getRatio(), itemRatio) * ratioWeight;\n\t\t\t\tcost += getCost(v.getOriginSize(), containerSize) * sizeWeight - containerSizeCost;\n\t\t\t\tcost += getCost(v.getOriginRatio(), containerRatio) * ratioWeight - containerRatioCost;\n\n\t\t\t\tif (cost === Math.min(cost, minCost)) {\n\t\t\t\t\tminCost = cost;\n\t\t\t\t\tbestFitArea = v;\n\t\t\t\t\tlayoutVertical = (i === 0);\n\t\t\t\t\titemFitSize.width = itemWidth;\n\t\t\t\t\titemFitSize.height = itemHeight;\n\t\t\t\t\tcontainerFitSize.width = containerWidth;\n\t\t\t\t\tcontainerFitSize.height = containerHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfitArea(item, bestFitArea, itemFitSize, containerFitSize, layoutVertical);\n\t}\n\t_layout(items, outline = [], isAppend) {\n\t\tconst style = this._style;\n\t\tconst {horizontal, aspectRatio, margin} = this.options;\n\t\tconst pos1Name = style.pos1;\n\t\tconst containerWidth = this._size * (horizontal ? aspectRatio : 1);\n\t\tconst containerHeight = this._size / (horizontal ? 1 : aspectRatio);\n\t\tconst containerSize1 = horizontal ? containerWidth : containerHeight;\n\t\tconst prevOutline = toZeroArray(outline);\n\t\tconst start = isAppend ? Math.max(...prevOutline) :\n\t\t\tMath.min(...prevOutline) - containerSize1 - margin;\n\t\tconst end = start + containerSize1 + margin;\n\t\tconst container = new BoxModel({});\n\n\t\titems.forEach(item => {\n\t\t\tconst {width, height} = item.orgSize;\n\t\t\tconst model = new BoxModel({\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\toriginWidth: width,\n\t\t\t\toriginHeight: height,\n\t\t\t});\n\n\t\t\tthis._findBestFitArea(container, model);\n\t\t\tcontainer.push(model);\n\t\t\tcontainer.scaleTo(containerWidth + margin, containerHeight + margin);\n\t\t});\n\t\titems.forEach((item, i) => {\n\t\t\tconst boxItem = container.items[i];\n\t\t\tconst width = boxItem.width;\n\t\t\tconst height = boxItem.height;\n\t\t\tconst top = boxItem.top;\n\t\t\tconst left = boxItem.left;\n\n\t\t\titem.rect = {top, left, width: width - margin, height: height - margin};\n\t\t\titem.rect[pos1Name] += start;\n\t\t});\n\n\t\treturn {\n\t\t\tstart: [start],\n\t\t\tend: [end],\n\t\t};\n\t}\n\t_insert(items = [], outline = [], type, cache) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, type),\n\t\t};\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.PackingLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tappend(items, outline, cache) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.PackingLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tprepend(items, outline, cache) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.PackingLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.PackingLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tlayout(groups = [], outline = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\n\t\t\tpoint = this._layout(group.items, point, APPEND);\n\t\t\tgroup.outlines = point;\n\t\t\tpoint = point.end;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.PackingLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.PackingLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tsetSize(size) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n}\n\nexport default PackingLayout;\n"",""/* eslint-disable */\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n\tsingle_source_shortest_paths: function (graph, s, d) {\n\t\t// Predecessor map for each node that has been encountered.\n\t\t// node ID => predecessor node ID\n\t\tvar predecessors = {};\n\n\t\t// Costs of shortest paths from s to all nodes encountered.\n\t\t// node ID => cost\n\t\tvar costs = {};\n\t\tcosts[s] = 0;\n\n\t\t// Costs of shortest paths from s to all nodes encountered; differs from\n\t\t// `costs` in that it provides easy access to the node that currently has\n\t\t// the known shortest path from s.\n\t\t// XXX: Do we actually need both `costs` and `open`?\n\t\tvar open = new BinaryHeap(function (x) { return x.cost; });\n\t\topen.push({ value: s, cost: 0 });\n\n\t\tvar closest,\n\t\t\tu,\n\t\t\tcost_of_s_to_u,\n\t\t\tadjacent_nodes,\n\t\t\tcost_of_e,\n\t\t\tcost_of_s_to_u_plus_cost_of_e,\n\t\t\tcost_of_s_to_v,\n\t\t\tfirst_visit;\n\t\twhile (open.size()) {\n\t\t\t// In the nodes remaining in graph that have a known cost from s,\n\t\t\t// find the node, u, that currently has the shortest path from s.\n\t\t\tclosest = open.pop();\n\t\t\tu = closest.value;\n\t\t\tcost_of_s_to_u = closest.cost;\n\n\t\t\t// Get nodes adjacent to u...\n\t\t\tadjacent_nodes = graph(u) || {};\n\n\t\t\t// ...and explore the edges that connect u to those nodes, updating\n\t\t\t// the cost of the shortest paths to any or all of those nodes as\n\t\t\t// necessary. v is the node across the current edge from u.\n\t\t\tfor (var v in adjacent_nodes) {\n\t\t\t\t// Get the cost of the edge running from u to v.\n\t\t\t\tcost_of_e = adjacent_nodes[v];\n\n\t\t\t\t// Cost of s to u plus the cost of u to v across e--this is *a*\n\t\t\t\t// cost from s to v that may or may not be less than the current\n\t\t\t\t// known cost to v.\n\t\t\t\tcost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n\t\t\t\t// If we haven't visited v yet OR if the current known cost from s to\n\t\t\t\t// v is greater than the new cost we just found (cost of s to u plus\n\t\t\t\t// cost of u to v across e), update v's cost in the cost list and\n\t\t\t\t// update v's predecessor in the predecessor list (it's now u).\n\t\t\t\tcost_of_s_to_v = costs[v];\n\t\t\t\tfirst_visit = (typeof costs[v] === 'undefined');\n\t\t\t\tif (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n\t\t\t\t\tcosts[v] = cost_of_s_to_u_plus_cost_of_e;\n\t\t\t\t\topen.push({ value: v, cost: cost_of_s_to_u_plus_cost_of_e });\n\t\t\t\t\tpredecessors[v] = u;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof costs[d] === 'undefined') {\n\t\t\tvar msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n\t\t\tthrow new Error(msg);\n\t\t}\n\n\t\treturn predecessors;\n\t},\n\n\textract_shortest_path_from_predecessor_list: function (predecessors, d) {\n\t\tvar nodes = [];\n\t\tvar u = d;\n\t\tvar predecessor;\n\t\twhile (u) {\n\t\t\tnodes.push(u);\n\t\t\tpredecessor = predecessors[u];\n\t\t\tu = predecessors[u];\n\t\t}\n\t\tnodes.reverse();\n\t\treturn nodes;\n\t},\n\n\tfind_path: function (graph, s, d) {\n\t\tvar predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n\t\treturn dijkstra.extract_shortest_path_from_predecessor_list(\n\t\t\tpredecessors, d);\n\t}\n\n};\n\nclass BinaryHeap {\n\tconstructor(scoreFunction) {\n\t\tthis.content = [];\n\t\tthis.scoreFunction = scoreFunction;\n\t}\n\tpush(element) {\n\t\t// Add the new element to the end of the array.\n\t\tthis.content.push(element);\n\t\t// Allow it to bubble up.\n\t\tthis.bubbleUp(this.content.length - 1);\n\t}\n\tpop() {\n\t\t// Store the first element so we can return it later.\n\t\tvar result = this.content[0];\n\t\t// Get the element at the end of the array.\n\t\tvar end = this.content.pop();\n\t\t// If there are any elements left, put the end element at the\n\t\t// start, and let it sink down.\n\t\tif (this.content.length > 0) {\n\t\t\tthis.content[0] = end;\n\t\t\tthis.sinkDown(0);\n\t\t}\n\t\treturn result;\n\t}\n\tsize() {\n\t\treturn this.content.length;\n\t}\n\tbubbleUp(n) {\n\t\t// Fetch the element that has to be moved.\n\t\tvar element = this.content[n];\n\t\t// When at 0, an element can not go up any further.\n\t\twhile (n > 0) {\n\t\t\t// Compute the parent element's index, and fetch it.\n\t\t\tvar parentN = Math.floor((n + 1) / 2) - 1,\n\t\t\t\tparent = this.content[parentN];\n\t\t\t// Swap the elements if the parent is greater.\n\t\t\tif (this.scoreFunction(element) < this.scoreFunction(parent)) {\n\t\t\t\tthis.content[parentN] = element;\n\t\t\t\tthis.content[n] = parent;\n\t\t\t\t// Update 'n' to continue at the new position.\n\t\t\t\tn = parentN;\n\t\t\t}\n\t\t\t// Found a parent that is less, no need to move it further.\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tsinkDown(n) {\n\t\t// Look up the target element and its score.\n\t\tvar length = this.content.length,\n\t\t\telement = this.content[n],\n\t\t\telemScore = this.scoreFunction(element);\n\n\t\twhile (true) {\n\t\t\t// Compute the indices of the child elements.\n\t\t\tvar child2N = (n + 1) * 2, child1N = child2N - 1;\n\t\t\t// This is used to store the new position of the element,\n\t\t\t// if any.\n\t\t\tvar swap = null;\n\t\t\t// If the first child exists (is inside the array)...\n\t\t\tif (child1N < length) {\n\t\t\t\t// Look it up and compute its score.\n\t\t\t\tvar child1 = this.content[child1N],\n\t\t\t\t\tchild1Score = this.scoreFunction(child1);\n\t\t\t\t// If the score is less than our element's, we need to swap.\n\t\t\t\tif (child1Score < elemScore) {\n\t\t\t\t\tswap = child1N;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Do the same checks for the other child.\n\t\t\tif (child2N < length) {\n\t\t\t\tvar child2 = this.content[child2N],\n\t\t\t\t\tchild2Score = this.scoreFunction(child2);\n\t\t\t\tif (child2Score < (swap == null ? elemScore : child1Score)) {\n\t\t\t\t\tswap = child2N;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the element needs to be moved, swap it, and continue.\n\t\t\tif (swap !== null) {\n\t\t\t\tthis.content[n] = this.content[swap];\n\t\t\t\tthis.content[swap] = element;\n\t\t\t\tn = swap;\n\t\t\t}\n\t\t\t// Otherwise, we are done.\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default dijkstra;"",""import dijkstra from \""./lib/dijkstra\"";\nimport {APPEND, PREPEND} from \""../consts\"";\nimport {getStyleNames, assignOptions, cloneItems} from \""../utils\"";\n\n/**\n * @classdesc 'justified' is a printing term with the meaning that 'it fits in one row wide'. JustifiedLayout is a layout that the card is filled up on the basis of a line given a size.\n * @ko 'justified'는 '1행의 너비에 맞게 꼭 들어찬'이라는 의미를 가진 인쇄 용어다. 용어의 의미대로 너비가 주어진 사이즈를 기준으로 카드가 가득 차도록 배치하는 레이아웃이다.\n * @class eg.InfiniteGrid.JustifiedLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.JustifiedLayout module <ko>eg.InfiniteGrid.JustifiedLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Number} [options.minSize=0] Minimum size of item to be resized <ko> 아이템이 조정되는 최소 크기 </ko>\n * @param {Number} [options.maxSize=0] Maximum size of item to be resized <ko> 아이템이 조정되는 최대 크기 </ko>\n * @param {Array|Number} [options.column=[1, 8]] The number of items in a line <ko> 한 줄에 들어가는 아이템의 개수 </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n\thorizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.JustifiedLayout, {\n\tmargin: 10,\n\tminSize: 100,\n\tmaxSize: 300,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.JustifiedLayout({\n\tmargin: 10,\n\tminSize: 100,\n\tmaxSize: 300,\n\tcolumn: 5,\n\thorizontal: true,\n});\n\n</script>\n```\n **/\nclass JustifiedLayout {\n\tconstructor(options = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\tminSize: 0,\n\t\t\tmaxSize: 0,\n\t\t\tcolumn: [1, 8],\n\t\t}, options);\n\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t\tthis._size = 0;\n\t}\n\t_layout(items, outline, isAppend) {\n\t\tconst style = this._style;\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst startIndex = 0;\n\t\tconst endIndex = items.length;\n\t\tlet column = this.options.column;\n\n\t\tif (typeof column !== \""object\"") {\n\t\t\tcolumn = [column, column];\n\t\t}\n\n\t\tconst graph = _start => {\n\t\t\tconst results = {};\n\t\t\tconst start = +_start.replace(/[^0-9]/g, \""\"");\n\t\t\tconst length = endIndex + 1;\n\n\t\t\tfor (let i = Math.min(start + column[0], length - 1); i < length; ++i) {\n\t\t\t\tif (i - start > column[1]) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlet cost = this._getCost(items, start, i, size1Name, size2Name);\n\n\t\t\t\tif (cost === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (cost < 0 && i === length - 1) {\n\t\t\t\t\tcost = 0;\n\t\t\t\t}\n\t\t\t\tresults[`${i}`] = Math.pow(cost, 2);\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\t\t// shortest path for items' total height.\n\t\tconst path = dijkstra.find_path(graph, `${startIndex}`, `${endIndex}`);\n\n\t\treturn this._setStyle(items, path, outline, isAppend);\n\t}\n\t_getSize(items, size1Name, size2Name) {\n\t\tconst margin = this.options.margin;\n\t\tconst size = items.reduce((sum, item) => sum +\n\t\t\t\t\t\t\t(item.orgSize[size2Name]) / item.orgSize[size1Name], 0);\n\n\t\treturn (this._size - margin * (items.length - 1)) / size;\n\t}\n\t_getCost(items, i, j, size1Name, size2Name) {\n\t\tconst size = this._getSize(items.slice(i, j), size1Name, size2Name);\n\t\tconst min = this.options.minSize || 0;\n\t\tconst max = this.options.maxSize || Infinity;\n\n\t\tif (isFinite(max)) {\n\t\t\t// if this size is not in range, the cost increases sharply.\n\t\t\tif (size < min) {\n\t\t\t\treturn Math.pow(size - min, 2) + Math.pow(max, 2);\n\t\t\t} else if (size > max) {\n\t\t\t\treturn Math.pow(size - max, 2) + Math.pow(max, 2);\n\t\t\t} else {\n\t\t\t\t// if this size in range, the cost is negative or low.\n\t\t\t\treturn Math.min(size - max, min - size);\n\t\t\t}\n\t\t}\n\t\t// if max is infinite type, caculate cost only with \""min\"".\n\t\tif (size < min) {\n\t\t\treturn Math.max(Math.pow(min, 2), Math.pow(size, 2));\n\t\t}\n\t\treturn size - min;\n\t}\n\t_setStyle(items, path, outline = [], isAppend) {\n\t\tconst style = this._style;\n\t\t// if direction is vertical\n\t\t// pos1 : top, pos11 : bottom\n\t\t// size1 : height\n\t\t// pos2 : left, pos22 : right\n\t\t// size2 : width\n\n\t\t// if direction is horizontal\n\t\t// pos1 : left, pos11 : right\n\t\t// size1 : width\n\t\t// pos2 : top, pos22 : bottom\n\t\t// size2 : height\n\t\tconst pos1Name = style.pos1;\n\t\tconst size1Name = style.size1;\n\t\tconst pos2Name = style.pos2;\n\t\tconst size2Name = style.size2;\n\t\tconst length = path.length;\n\t\tconst margin = this.options.margin;\n\t\tconst startPoint = outline[0] || 0;\n\t\tlet endPoint = startPoint;\n\t\tlet height = 0;\n\n\t\tfor (let i = 0; i < length - 1; ++i) {\n\t\t\tconst path1 = parseInt(path[i], 10);\n\t\t\tconst path2 = parseInt(path[i + 1], 10);\n\t\t\t// pathItems(path1 to path2) are in 1 line.\n\t\t\tconst pathItems = items.slice(path1, path2);\n\t\t\tconst pathItemsLength = pathItems.length;\n\t\t\tconst size1 = this._getSize(pathItems, size1Name, size2Name);\n\t\t\tconst pos1 = endPoint;\n\n\t\t\tfor (let j = 0; j < pathItemsLength; ++j) {\n\t\t\t\tconst item = pathItems[j];\n\t\t\t\tconst size2 = item.orgSize[size2Name] / item.orgSize[size1Name] * size1;\n\t\t\t\t// item has margin bottom and right.\n\t\t\t\t// first item has not margin.\n\t\t\t\tconst prevItemRect = j === 0 ? 0 : pathItems[j - 1].rect;\n\t\t\t\tconst pos2 = (prevItemRect ? prevItemRect[pos2Name] + prevItemRect[size2Name] + margin : 0);\n\n\t\t\t\titem.rect = {\n\t\t\t\t\t[pos1Name]: pos1,\n\t\t\t\t\t[pos2Name]: pos2,\n\t\t\t\t\t[size1Name]: size1,\n\t\t\t\t\t[size2Name]: size2,\n\t\t\t\t};\n\t\t\t}\n\t\t\theight += margin + size1;\n\t\t\tendPoint = startPoint + height;\n\t\t}\n\t\tconst itemsLength = items.length;\n\n\t\tif (isAppend) {\n\t\t\t// previous group's end outline is current group's start outline\n\t\t\treturn {\n\t\t\t\tstart: [startPoint],\n\t\t\t\tend: [endPoint],\n\t\t\t};\n\t\t}\n\t\t// for prepend, only substract height from position.\n\t\t// always start is lower than end.\n\n\t\tfor (let i = 0; i < itemsLength; ++i) {\n\t\t\tconst item = items[i];\n\n\t\t\t// move items as long as height for prepend\n\t\t\titem.rect[pos1Name] -= height;\n\t\t}\n\t\treturn {\n\t\t\tstart: [startPoint - height],\n\t\t\tend: [startPoint], // endPoint - height = startPoint\n\t\t};\n\t}\n\t_insert(items = [], outline = [], type, cache) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, type),\n\t\t};\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.JustifiedLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.JustifiedLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tsetSize(size) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.JustifiedLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tappend(items, outline, cache) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.JustifiedLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tprepend(items, outline, cache) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.JustifiedLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.JustifiedLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100]);\n\t */\n\tlayout(groups = [], outline = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\n\t\t\tpoint = this._layout(group.items, point, APPEND);\n\t\t\tgroup.outlines = point;\n\t\t\tpoint = point.end;\n\t\t}\n\t\treturn this;\n\t}\n}\n\nexport default JustifiedLayout;\n"",""/**\n * Copyright (c) NAVER Corp.\n * egjs-infinitegrid projects are licensed under the MIT license\n */\nimport InfiniteGrid, * as modules from \""./index\"";\n\nfor (const name in modules) {\n\tInfiniteGrid[name] = modules[name];\n}\n\nexport default InfiniteGrid;\n""],""names"":[""isUndefined"",""value"",""win"",""Component"",""_eventHandler"",""options"",""trigger"",""eventName"",""customEvent"",""handlerList"",""this"",""isCanceled"",""arg"",""i"",""restParam"",""Array"",""_len"",""_key"",""arguments"",""once"",""handlerToAttach"",""eventHash"",""self"",""on"",""listener"",""_len2"",""_key2"",""hasOn"",""name"",""off"",""handlerToDetach"",""undefined"",""k"",""handlerFunction"",""VERSION"",""document"",""window"",""navigator"",""userAgent"",""ua"",""SUPPORT_COMPUTEDSTYLE"",""SUPPORT_ADDEVENTLISTENER"",""SUPPORT_PASSIVE"",""supportsPassiveOption"",""Object"",""defineProperty"",""addEventListener"",""get"",""e"",""IS_IE"",""test"",""IS_IOS"",""IS_ANDROID2"",""IGNORE_CLASSNAME"",""TRANSITION_NAME"",""APPEND"",""PREPEND"",""VERTICAL"",""HORIZONTAL"",""DUMMY_POSITION"",""GROUPKEY_ATT"",""DEFAULT_OPTIONS"",""horizontal"",""margin"",""agent"",""toLowerCase"",""ALIGN"",""webkit"",""exec"",""WEBKIT_VERSION"",""parseInt"",""DEFENSE_BROWSER"",""properties"",""transitionend"",""webkitTransitionEnd"",""oTransitionEnd"",""mozTransitionEnd"",""property"",""prefix"",""TRANSFORM"",""TRANSITION"",""TRANSITION_END"",""toArray"",""nodes"",""array"",""len"",""length"",""push"",""matchHTML"",""html"",""match"",""$"",""param"",""multi"",""el"",""dummy"",""createElement"",""innerHTML"",""childNodes"",""querySelectorAll"",""nodeName"",""nodeType"",""jQuery"",""constructor"",""prototype"",""jquery"",""isArray"",""map"",""v"",""addEvent"",""element"",""type"",""handler"",""eventListenerOptions"",""attachEvent"",""removeEvent"",""removeEventListener"",""detachEvent"",""getStyles"",""getComputedStyle"",""currentStyle"",""_getSize"",""isOffset"",""body"",""doc"",""documentElement"",""Math"",""max"",""size"",""clientRect"",""getBoundingClientRect"",""right"",""left"",""bottom"",""top"",""parseFloat"",""innerWidth"",""innerHeight"",""outerWidth"",""outerHeight"",""getSize"",""width"",""height"",""STYLE"",""vertical"",""pos1"",""endPos1"",""size1"",""pos2"",""endPos2"",""size2"",""getStyleNames"",""isHorizontal"",""assignOptions"",""defaultOptions"",""_extends"",""cloneItems"",""items"",""item"",""fill"",""arr"",""target"",""ItemManager"",""clear"",""from"",""elements"",""selector"",""groupKey"",""isAppend"",""selectItems"",""content"",""outerHTML"",""rect"",""filter"",""classNames"",""className"",""split"",""some"",""c"",""pluck"",""data"",""reduce"",""acc"",""concat"",""getStatus"",""startKey"",""endKey"",""datas"",""_data"",""startIndex"",""indexOf"",""endIndex"",""slice"",""item2"",""data2"",""setStatus"",""status"",""set"",""fit"",""base"",""outlines"",""start"",""end"",""getOutline"",""index"",""getEdgeIndex"",""cursor"",""prop"",""targetValue"",""Infinity"",""getEdgeValue"",""clearOutlines"",""startCursor"",""endCursor"",""forEach"",""group"",""getMaxEdgeValue"",""groups"",""append"",""layouted"",""prepend"",""unshift"",""remove"",""key"",""getAttribute"",""String"",""idx"",""splice"",""getData"",""render"",""styles"",""p"",""setTransition"",""transitionDuration"",""DOMRenderer"",""isEqualSize"",""isConstantSize"",""container"",""_size"",""view"",""viewport"",""_init"",""resize"",""renderItem"",""prevRect"",""style"",""setAttribute"",""position"",""itemRect"",""callback"",""renderItems"",""removeItems"",""removeElement"",""parentNode"",""removeChild"",""createElements"",""noElementItems"",""replace"",""join"",""cssText"",""updateSize"",""orgSize"",""_orgStyle"",""overflowX"",""overflowY"",""children"",""appendChild"",""createContainer"",""_insert"",""createAndInsert"",""df"",""createDocumentFragment"",""insertBefore"",""firstChild"",""_calcSize"",""getViewSize"",""getViewportSize"",""setContainerSize"",""isResize"",""isNeededResize"",""destroy"",""Watcher"",""check"",""isOverflowScroll"",""_timer"",""reset"",""_containerOffset"",""_view"",""_scrollIssue"",""_onCheck"",""bind"",""_onResize"",""setScrollPos"",""_prevPos"",""scrollPos"",""getOrgScrollPos"",""applyScrollPos"",""scrollTo"",""scrollBy"",""pos"",""arrPos"",""x"",""y"",""scrollLeft"",""scrollTop"",""scroll"",""getScrollPos"",""rawPos"",""getContainerOffset"",""prevPos"",""orgScrollPos"",""isForward"",""_getOffset"",""clearTimeout"",""setTimeout"",""_this"",""Infinite"",""itemManger"",""useRecycle"",""threshold"",""recycle"",""_items"",""setSize"",""_status"",""endScrollPos"",""visibles"",""legnth"",""min"",""isVisible"",""lastIndexOf"",""setCursor"",""getCursor"",""startEdgePos"",""endEdgePos"",""startPos"",""endPos"",""cache"",""getEdgeOutline"",""getVisibleItems"",""getVisibleData"",""onResize"",""AutoSizer"",""resizeAll"",""add"",""__PREFIX__"",""isFixed"",""fixed"",""elementPrefix"",""dataWidth"",""dataHeight"",""isDataAttribute"",""ImageLoaded"",""waitImageLoaded"",""needCheck"",""complete"",""error"",""checkCount"",""endCount"",""checkEnd"",""checkImage"",""onError"",""itemIndex"",""__ITEM_INDEX__"",""onCheck"",""srcElement"",""images"",""naturalWidth"",""checkImageLoaded"",""tagName"",""sum"",""hasTarget"",""LayoutMananger"",""renderer"",""attributePrefix"",""_renderer"",""_layout"",""setLayout"",""layout"",""_complete"",""isUpdate"",""itemManager"",""groupIndex"",""prevGroup"",""outline"",""groupOutline"",""every"",""groupItems"",""groupInfo"",""_error"",""removeTarget"",""replaceTarget"",""errorIndex"",""removeItem"",""src"",""removeAttribute"",""replaceItem"",""_end"",""removeTargetLength"",""replaceTargetLength"",""layoutedItems"",""_this2"",""checkGroups"",""reverse"",""_this3"",""callbacks"",""isRelayout"",""layoutGroups"",""create"",""o"",""TypeError"",""Error"",""F"",""InfiniteGrid"",""itemSelector"",""useFit"",""_reset"",""_loadingBar"",""_watcher"",""_infinite"",""_requestAppend"",""_requestPrepend"",""_recycle"",""_manager"",""LayoutKlass"",""_setSize"",""getItems"",""includeCached"",""_fitItems"",""_setContainerSize"",""_getEdgeValue"",""_fit"",""_getLoadingStatus"",""loadingSize"",""_isLoading"",""_renderLoading"",""infinite"",""isLayoutAll"",""isChildren"",""_onLayoutComplete"",""fromCache"",""isTrusted"",""isLayout"",""getGroupKeys"",""watcher"",""processingStatus"",""visibleItems"",""isReLayout"",""_postLayout"",""newItems"",""_appendLoadingBar"",""setLoadingBar"",""userLoadingBar"",""loadingBarObj"",""loadingStyle"",""loadingBar"",""isProcessing"",""_isProcessing"",""_process"",""isAdd"",""Date"",""getTime"",""floor"",""random"",""method"",""getLoadingBar"",""startLoading"",""userStyle"",""display"",""posName"",""endLoading"",""LOADING_APPEND"",""getItem"",""_updateItem"",""updateItem"",""updateItems"",""moveTo"",""isInCursor"",""_scrollTo"",""moveCache"",""moveItem"",""_postCache"",""_setScrollPos"",""_onImageError"",""requestStartCursor"",""requestEndCursor"",""pop"",""_this4"",""shift"",""_this5"",""viewSize"",""isScroll"",""_this6"",""START"",""CENTER"",""END"",""JUSTIFY"",""GridLayout"",""align"",""itemSize"",""_columnSize"",""_columnLength"",""_style"",""checkColumn"",""sizeName"",""columnSize"",""size1Name"",""size2Name"",""pos1Name"",""pos2Name"",""columnLength"",""viewDist"",""pointCaculateName"",""startOutline"",""endOutline"",""point"",""column"",""sort"",""a"",""b"",""item1pos1"",""item1pos2"",""item2pos1"",""item2pos2"",""clone"",""firstItem"",""result"",""searchShapeInFrame"",""frame"",""j"",""disableFrame"",""FrameLayout"",""frameFill"",""row"",""_itemSize"",""_shapes"",""shapes"",""getShapes"",""_getItemSize"",""_checkItemSize"",""isItemObject"",""itemSize2"",""itemSize1"",""shapesSize"",""shapesLength"",""dist"",""shape"",""shapePos1"",""shapePos2"",""shapeSize1"",""shapeSize2"",""targetOutline"",""prevOutlineEnd"",""prevOutlineDist"",""getColumn"",""dataset"",""SquareLayout"",""l"",""sign"",""columnWidth"",""columnCount"",""shape1"",""shape2"",""BoxModel"",""originWidth"",""originHeight"",""scaleTo"",""scaleX"",""scaleY"",""getOriginSize"",""getOriginRatio"",""getRatio"",""getCost"",""originLength"",""cost"",""PackingLayout"",""aspectRatio"",""sizeWeight"",""ratioWeight"",""_findBestFitArea"",""bestFitArea"",""itemFitSize"",""containerFitSize"",""layoutVertical"",""minCost"",""containerSizeCost"",""containerRatioCost"",""itemWidth"",""itemHeight"",""containerWidth"",""containerHeight"",""itemRatio"",""containerSize"",""containerRatio"",""containerSize1"",""prevOutline"",""model"",""boxItem"",""dijkstra"",""single_source_shortest_paths"",""graph"",""s"",""d"",""predecessors"",""costs"",""closest"",""u"",""cost_of_s_to_u"",""adjacent_nodes"",""cost_of_s_to_u_plus_cost_of_e"",""cost_of_s_to_v"",""open"",""BinaryHeap"",""msg"",""extract_shortest_path_from_predecessor_list"",""find_path"",""scoreFunction"",""bubbleUp"",""sinkDown"",""n"",""parentN"",""parent"",""elemScore"",""child2N"",""child1N"",""swap"",""child1"",""child1Score"",""child2"",""minSize"",""maxSize"",""path"",""_start"",""results"",""_getCost"",""pow"",""_setStyle"",""isFinite"",""startPoint"",""endPoint"",""path1"",""path2"",""pathItems"",""pathItemsLength"",""prevItemRect"",""itemsLength"",""modules""],""mappings"":""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""}"
57b30efdb246ebd048282e83f74e23fa92377937,384286,     * http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
20530519a1716c70ab161748dff54053c5c36145,2684561,                    //   (http://stackoverflow.com/a/2684561).
30efd668a4304b584630f1199ed345006cca7d8a,14264431,        https://stackoverflow.com/questions/14264431/expanding-algebraic-powers-in-python-sympy
28b124e39f994b3d7dbab682810cec498c2aebec,12528049 32231579,"{""version"":3,""sources"":[""plyr.mjs"",""node_modules/rangetouch/src/js/config.js"",""node_modules/rangetouch/src/js/utils/css.js"",""node_modules/rangetouch/src/js/utils/events.js"",""node_modules/rangetouch/src/js/utils/is.js"",""node_modules/rangetouch/src/js/utils/numbers.js"",""node_modules/rangetouch/src/js/rangetouch.js"",""src/js/utils/is.js"",""src/js/utils/events.js"",""src/js/utils/elements.js"",""src/js/utils/animation.js"",""src/js/utils/browser.js"",""src/js/support.js"",""src/js/utils/style.js"",""src/js/html5.js"",""src/js/utils/arrays.js"",""src/js/utils/objects.js"",""src/js/utils/strings.js"",""src/js/utils/i18n.js"",""src/js/storage.js"",""src/js/utils/fetch.js"",""src/js/utils/loadSprite.js"",""src/js/utils/time.js"",""src/js/controls.js"",""src/js/utils/urls.js"",""src/js/captions.js"",""src/js/config/defaults.js"",""src/js/config/states.js"",""src/js/config/types.js"",""src/js/console.js"",""src/js/fullscreen.js"",""src/js/utils/loadImage.js"",""src/js/ui.js"",""src/js/listeners.js"",""node_modules/loadjs/dist/loadjs.umd.js"",""src/js/utils/loadScript.js"",""src/js/plugins/vimeo.js"",""src/js/plugins/youtube.js"",""src/js/media.js"",""src/js/plugins/ads.js"",""src/js/plugins/previewThumbnails.js"",""src/js/source.js"",""src/js/plyr.js""],""names"":[""_defineProperties"",""target"",""props"",""i"",""length"",""descriptor"",""enumerable"",""configurable"",""writable"",""Object"",""defineProperty"",""key"",""_createClass"",""Constructor"",""protoProps"",""staticProps"",""prototype"",""_defineProperty"",""obj"",""value"",""_slicedToArray"",""arr"",""_arrayWithHoles"",""_iterableToArrayLimit"",""_nonIterableRest"",""_toConsumableArray"",""_arrayWithoutHoles"",""_iterableToArray"",""_nonIterableSpread"",""Array"",""isArray"",""arr2"",""iter"",""Symbol"",""iterator"",""toString"",""call"",""from"",""_arr"",""_n"",""_d"",""_e"",""undefined"",""_s"",""_i"",""next"",""done"",""push"",""err"",""TypeError"",""defaults"",""addCSS"",""thumbWidth"",""watch"",""matches"",""element"",""selector"",""document"",""querySelectorAll"",""includes"",""this"",""trigger"",""type"",""event"",""Event"",""dispatchEvent"",""getConstructor"",""input"",""constructor"",""instanceOf"",""Boolean"",""isNullOrUndefined"",""isObject"",""isNumber"",""Number"",""isNaN"",""isString"",""String"",""isBoolean"",""isFunction"",""Function"",""isNodeList"",""NodeList"",""isElement"",""Element"",""isEvent"",""isEmpty"",""keys"",""is"",""nullOrUndefined"",""object"",""number"",""string"",""boolean"",""function"",""array"",""nodeList"",""empty"",""getDecimalPlaces"",""match"",""concat"",""Math"",""max"",""round"",""step"",""places"",""parseFloat"",""toFixed"",""RangeTouch"",""options"",""_classCallCheck"",""querySelector"",""rangeTouch"",""config"",""assign"",""init"",""enabled"",""style"",""userSelect"",""webKitUserSelect"",""touchAction"",""listeners"",""toggle"",""_this"",""method"",""forEach"",""set"",""percent"",""touch"",""changedTouches"",""min"",""getAttribute"",""delta"",""clientRect"",""getBoundingClientRect"",""width"",""clientX"",""left"",""disabled"",""preventDefault"",""get"",""arguments"",""targets"",""filter"",""MutationObserver"",""mutations"",""mutation"",""addedNodes"",""node"",""observe"",""body"",""childList"",""subtree"",""map"",""t"",""documentElement"",""isWeakMap"",""WeakMap"",""isTextNode"",""Text"",""isKeyboardEvent"",""KeyboardEvent"",""isCue"",""window"",""TextTrackCue"",""VTTCue"",""isTrack"",""TextTrack"",""kind"",""isPromise"",""Promise"",""isUrl"",""URL"",""startsWith"",""hostname"",""e"",""is$1"",""weakMap"",""textNode"",""keyboardEvent"",""cue"",""track"",""promise"",""url"",""supportsPassiveListeners"",""supported"",""addEventListener"",""removeEventListener"",""toggleListener"",""callback"",""passive"",""capture"",""events"",""split"",""eventListeners"",""on"",""off"",""once"",""_this2"",""onceCallback"",""_len"",""args"",""_key"",""apply"",""triggerEvent"",""bubbles"",""detail"",""CustomEvent"",""plyr"",""unbindListeners"",""item"",""ready"",""_this3"",""resolve"",""setTimeout"",""elements"",""container"",""then"",""wrap"",""wrapper"",""reverse"",""index"",""child"",""cloneNode"",""parent"",""parentNode"",""sibling"",""nextSibling"",""appendChild"",""insertBefore"",""setAttributes"",""attributes"",""entries"",""_ref"",""_ref3"",""_ref4"",""setAttribute"",""createElement"",""text"",""innerText"",""insertAfter"",""insertElement"",""removeElement"",""removeChild"",""emptyElement"",""childNodes"",""lastChild"",""replaceElement"",""newChild"",""oldChild"",""replaceChild"",""getAttributesFromSelector"",""sel"",""existingAttributes"",""existing"",""s"",""trim"",""className"",""replace"",""parts"",""charAt"",""class"",""id"",""toggleHidden"",""hidden"",""hide"",""removeAttribute"",""toggleClass"",""force"",""classList"",""contains"",""hasClass"",""getElements"",""getElement"",""trapFocus"",""focusable"",""first"",""last"",""keyCode"",""focused"",""activeElement"",""shiftKey"",""focus"",""setFocus"",""tabFocus"",""preventScroll"",""classNames"",""transitionEndEvent"",""WebkitTransition"",""MozTransition"",""OTransition"",""transition"",""find"",""repaint"",""offsetHeight"",""browser"",""isIE"",""documentMode"",""isEdge"",""navigator"",""userAgent"",""isWebkit"",""test"",""isIPhone"",""platform"",""isIos"",""defaultCodecs"",""audio/ogg"",""audio/wav"",""video/webm"",""video/mp4"",""video/ogg"",""support"",""audio"",""video"",""check"",""provider"",""playsinline"",""canPlayInline"",""api"",""ui"",""rangeInput"",""pip"",""webkitSetPresentationMode"",""pictureInPictureEnabled"",""disablePictureInPicture"",""airplay"",""WebKitPlaybackTargetAvailabilityEvent"",""mime"",""mediaType"",""isHTML5"",""media"",""canPlayType"",""textTracks"",""range"",""transitions"",""reducedMotion"",""matchMedia"",""validateRatio"",""every"",""reduceAspectRatio"",""ratio"",""_ratio"",""height"",""divider"",""getDivider"",""w"",""h"",""getAspectRatio"",""parse"",""embed"",""setAspectRatio"",""isVideo"",""_ref2"",""padding"",""paddingBottom"",""isVimeo"",""offset"",""transform"",""videoFixedRatio"",""html5"",""getSources"",""source"",""getQualityOptions"",""extend"",""player"",""_player$media"",""currentTime"",""paused"",""preload"",""readyState"",""src"",""play"",""load"",""quality"",""cancelRequests"",""blankVideo"",""debug"",""log"",""dedupe"",""indexOf"",""closest"",""reduce"",""prev"",""curr"",""abs"",""cloneDeep"",""JSON"",""stringify"",""getDeep"",""path"",""sources"",""shift"",""generateId"",""prefix"",""floor"",""random"",""format"",""getPercentage"",""current"",""replaceAll"",""RegExp"",""toTitleCase"",""toUpperCase"",""substr"",""toLowerCase"",""toPascalCase"",""toCamelCase"",""slice"",""stripHTML"",""fragment"",""createDocumentFragment"",""innerHTML"",""firstChild"",""getHTML"",""resources"",""vimeo"",""youtube"",""i18n"",""{seektime}"",""seekTime"",""{title}"",""title"",""Storage"",""storage"",""store"",""localStorage"",""getItem"",""json"",""setItem"",""removeItem"",""fetch"",""responseType"",""reject"",""request"",""XMLHttpRequest"",""responseText"",""response"",""Error"",""status"",""open"",""send"",""loadSprite"",""hasId"",""exists"",""getElementById"",""update"",""data"",""insertAdjacentElement"",""useStorage"",""cached"",""content"",""result"",""catch"",""getHours"",""trunc"",""getMinutes"",""getSeconds"",""formatTime"",""time"",""displayHours"",""inverted"",""hours"",""mins"",""secs"",""controls"",""getIconUrl"",""cors"",""iconUrl"",""location"",""host"",""svg4everybody"",""findElements"",""selectors"",""buttons"",""pause"",""restart"",""rewind"",""fastForward"",""mute"",""settings"",""captions"",""fullscreen"",""progress"",""inputs"",""seek"",""volume"",""display"",""buffer"",""duration"",""seekTooltip"",""tooltip"",""error"",""warn"",""toggleNativeControls"",""createIcon"",""iconPath"",""iconPrefix"",""icon"",""createElementNS"",""role"",""use"",""setAttributeNS"",""createLabel"",""attr"",""join"",""createBadge"",""badge"",""menu"",""createButton"",""buttonType"",""label"",""labelPressed"",""iconPressed"",""control"",""button"",""createRange"",""autocomplete"",""aria-label"",""aria-valuemin"",""aria-valuemax"",""aria-valuenow"",""updateRangeFill"",""setup"",""createProgress"",""aria-hidden"",""suffixKey"",""played"",""suffix"",""createTime"",""bindMenuItemShortcuts"",""menuItem"",""which"",""stopPropagation"",""isRadioButton"",""showMenuPanel"",""nextElementSibling"",""firstElementChild"",""previousElementSibling"",""lastElementChild"",""focusFirstMenuItem"",""createMenuItem"",""list"",""_ref$badge"",""_ref$checked"",""checked"",""aria-checked"",""flex"",""children"",""bind"",""currentTrack"",""speed"",""updateTimeDisplay"",""updateVolume"",""setRange"",""muted"",""pressed"",""updateProgress"",""getElementsByTagName"",""nodeValue"",""setProgress"",""buffered"",""setProperty"",""updateSeekTooltip"",""_this4"",""tooltips"",""visible"",""pageX"",""timeUpdate"",""invert"",""invertTime"",""seeking"",""durationUpdate"",""pow"",""hasDuration"",""displayDuration"",""toggleMenuButton"",""setting"",""updateSetting"",""pane"",""panels"",""default"",""getLabel"",""setQualityMenu"",""_this5"",""checkMenu"",""getBadge"",""sort"",""a"",""b"",""sorting"",""setCaptionsMenu"",""_this6"",""tracks"",""getTracks"",""toggled"",""language"",""unshift"",""setSpeedMenu"",""_this7"",""values"",""some"",""popup"",""firstItem"",""toggleMenu"",""show"",""isMenuItem"",""getMenuSize"",""tab"",""clone"",""position"",""opacity"",""scrollWidth"",""scrollHeight"",""_this8"",""size"",""restore"",""propertyName"",""setDownloadLink"",""download"",""create"",""_this9"",""aria-haspopup"",""aria-controls"",""aria-expanded"",""inner"",""home"",""backButton"",""href"",""urls"",""isEmbed"",""inject"",""_this10"",""seektime"",""addProperty"",""controlPressed"",""_this$config"",""labels"",""parseUrl"",""parser"",""buildUrlParams"",""params"",""URLSearchParams"",""isYouTube"",""protocol"",""blob"",""createObjectURL"",""languages"",""userLanguage"",""active"",""trackEvents"",""_this$captions"",""meta"",""currentTrackNode"",""languageExists"",""mode"",""updateCues"",""setLanguage"",""activeClass"",""findTrack"",""enableTextTrack"",""has"",""sortIsDefault"",""sorted"",""getCurrentTrack"",""cues"",""activeCues"",""getCueAsHTML"",""cueText"",""caption"",""autoplay"",""autopause"",""toggleInvert"",""clickToPlay"",""hideControls"",""resetOnEnd"",""disableContextMenu"",""loop"",""selected"",""keyboard"",""global"",""fallback"",""iosNative"",""seekLabel"",""unmute"",""enableCaptions"",""disableCaptions"",""enterFullscreen"",""exitFullscreen"",""frameTitle"",""menuBack"",""normal"",""start"",""end"",""all"",""reset"",""advertisement"",""qualityBadge"",""2160"",""1440"",""1080"",""720"",""576"",""480"",""sdk"",""iframe"",""googleIMA"",""editable"",""embedContainer"",""poster"",""posterEnabled"",""ads"",""playing"",""stopped"",""loading"",""hover"",""isTouch"",""uiSupported"",""noTransition"",""previewThumbnails"",""thumbContainer"",""thumbContainerShown"",""imageContainer"",""timeContainer"",""scrubbingContainer"",""scrubbingContainerShown"",""google"",""publisherId"",""tagUrl"",""byline"",""portrait"",""transparent"",""noCookie"",""rel"",""showinfo"",""iv_load_policy"",""modestbranding"",""inactive"",""providers"",""types"",""getProviderByUrl"",""noop"",""Console"",""console"",""onChange"",""toggleFallback"",""scrollPosition"",""x"",""scrollX"",""y"",""scrollY"",""scrollTo"",""overflow"",""viewport"",""head"",""property"",""hasProperty"",""cleanupViewport"",""part"",""Fullscreen"",""forceFallback"",""native"",""webkitEnterFullscreen"",""requestFullscreen"",""webkitExitFullscreen"",""action"",""cancelFullScreen"",""exit"",""enter"",""fullscreenElement"",""fullscreenEnabled"",""webkitFullscreenEnabled"",""mozFullScreenEnabled"",""msFullscreenEnabled"",""pre"",""loadImage"",""minWidth"",""image"",""Image"",""handler"",""onload"",""onerror"",""naturalWidth"",""addStyleHook"",""build"",""checkPlaying"",""setTitle"",""setPoster"",""togglePoster"",""enable"",""backgroundImage"",""backgroundSize"",""toggleControls"",""checkLoading"",""clearTimeout"",""timers"",""recentTouchSeek"",""lastSeekTime"",""Date"",""now"",""Listeners"",""lastKey"",""focusTimer"",""lastKeyDown"",""handleKey"",""setTabFocus"",""firstTouch"",""code"",""repeat"",""altKey"",""ctrlKey"",""metaKey"",""togglePlay"",""increaseVolume"",""decreaseVolume"",""forward"",""toggleCaptions"",""usingNative"",""timeStamp"",""wasKeyDown"",""delay"",""setPlayerSize"",""measure"",""rect"",""resized"",""_player$fullscreen"",""isEnter"",""_setPlayerSize"",""_getAspectRatio$call2"",""videoX"",""videoY"",""maxWidth"",""margin"",""setGutter"",""hasAudio"",""isAudio"",""ended"",""proxy"",""proxyEvents"",""_event$detail"",""defaultHandler"",""customHandlerKey"",""customHandler"",""returned"",""hasCustomHandler"",""inputEvent"",""currentTarget"",""hasAttribute"",""seekTo"",""loaded"",""startMove"",""endMove"",""startScrubbing"",""endScrubbing"",""webkitDirectionInvertedFromDevice"",""_map2"",""deltaX"",""deltaY"",""direction"",""sign"",""commonjsGlobal"",""globalThis"",""self"",""createCommonjsModule"",""fn"",""module"",""exports"",""loadjs_umd"",""devnull"",""bundleIdCache"",""bundleResultCache"",""bundleCallbackQueue"",""publish"",""bundleId"",""pathsNotFound"",""q"",""splice"",""executeCallbacks"",""depsNotFound"",""success"",""loadFile"",""callbackFn"",""numTries"",""isLegacyIECss"",""doc"",""async"",""maxTries"",""numRetries"",""beforeCallbackFn"",""before"",""pathStripped"",""relList"",""as"",""onbeforeload"",""ev"",""sheet"",""cssText"",""defaultPrevented"",""loadjs"",""paths"",""arg1"",""arg2"",""loadFn"",""numWaiting"",""loadFiles"",""returnPromise"",""deps"",""bundleIds"",""r"",""subscribe"",""isDefined"",""factory"",""loadScript"",""parseId"",""$2"",""assurePlaybackState"",""hasPlayed"",""Vimeo"",""gesture"",""thumbnail_large"",""pathname"",""Player"",""disableTextTrack"",""stop"",""restorePause"",""setVolume"",""setCurrentTime"",""setPlaybackRate"",""name"",""currentSrc"",""setLoop"",""getVideoUrl"",""getVideoWidth"",""getVideoHeight"",""dimensions"",""_dimensions"",""setAutopause"",""state"",""getVideoTitle"",""getCurrentTime"",""getDuration"",""getTextTracks"",""_ref$cues"",""strippedCues"",""getPaused"",""seconds"",""parseInt"",""getHost"",""YT"",""onYouTubeReadyCallbacks"",""onYouTubeIframeAPIReady"",""getTitle"",""videoId"",""getVideoData"",""items"",""snippet"",""currentId"",""posterSrc"",""playerVars"",""hl"",""disablekb"",""cc_load_policy"",""cc_lang_pref"",""widget_referrer"",""onError"",""message"",""2"",""5"",""100"",""101"",""150"",""onPlaybackRateChange"",""instance"",""playbackRate"",""getPlaybackRate"",""onReady"",""playVideo"",""pauseVideo"",""stopVideo"",""getAvailablePlaybackRates"",""clearInterval"",""buffering"",""setInterval"",""getVideoLoadedFraction"",""lastBuffered"",""onStateChange"",""unMute"",""Ads"",""initialized"",""displayContainer"",""manager"",""loader"",""cuePoints"",""safetyTimer"",""countdownTimer"",""managerPromise"",""ima"",""startSafetyTimer"",""clearSafetyTimer"",""setupIMA"",""setVpaidMode"",""ImaSdkSettings"",""VpaidMode"",""ENABLED"",""setLocale"",""setDisableCustomPlaybackForIOS10Plus"",""AdDisplayContainer"",""requestAds"",""AdsLoader"",""AdsManagerLoadedEvent"",""Type"",""ADS_MANAGER_LOADED"",""onAdsManagerLoaded"",""AdErrorEvent"",""AD_ERROR"",""onAdError"",""AdsRequest"",""adTagUrl"",""linearAdSlotWidth"",""offsetWidth"",""linearAdSlotHeight"",""nonLinearAdSlotWidth"",""nonLinearAdSlotHeight"",""forceNonLinearFullSlot"",""setAdWillPlayMuted"",""getRemainingTime"",""AdsRenderingSettings"",""restoreCustomPlaybackStateOnAdBreakComplete"",""enablePreloading"",""getAdsManager"",""getCuePoints"",""AdEvent"",""onAdEvent"",""cuePoint"",""seekElement"",""cuePercentage"",""ad"",""getAd"",""adData"",""getAdData"",""LOADED"",""pollCountdown"",""isLinear"",""ALL_ADS_COMPLETED"",""loadAds"",""CONTENT_PAUSE_REQUESTED"",""pauseContent"",""CONTENT_RESUME_REQUESTED"",""resumeContent"",""STARTED"",""MIDPOINT"",""COMPLETE"",""IMPRESSION"",""CLICK"",""LOG"",""adError"",""getMessage"",""cancel"",""addCuePoints"",""contentComplete"",""seekedTime"",""discardAdBreak"",""resize"",""ViewMode"",""NORMAL"",""initialize"",""zIndex"",""_this11"",""destroy"",""_this12"",""handlers"",""_this13"",""AV_PUBLISHERID"",""AV_CHANNELID"",""AV_URL"",""cb"",""AV_WIDTH"",""AV_HEIGHT"",""AV_CDIM2"",""parseVtt"",""vttDataString"",""processedList"",""frame"",""line"",""startTime"",""lineSplit"",""_lineSplit"",""_lineSplit$1$split2"",""matchTimes"",""endTime"",""PreviewThumbnails"",""thumbnails"",""lastMouseMoveTime"",""mouseDown"",""loadedImages"",""thumb"",""scrubbing"",""getThumbnails"",""render"",""determineContainerAutoSizing"",""promises"",""u"",""getThumbnail"",""thumbnail"",""frames"",""urlPrefix"",""substring"",""lastIndexOf"",""tempImage"",""naturalHeight"",""percentage"",""mousePosX"",""showImageAtCurrentTime"",""toggleThumbContainer"",""toggleScrubbingContainer"",""ceil"",""lastTime"",""setScrubbingContainerSize"",""setThumbContainerSizeAndPos"",""thumbNum"",""findIndex"",""hasThumb"",""qualityIndex"",""showingThumb"",""thumbFilename"",""thumbUrl"",""currentImageElement"",""dataset"",""filename"",""showImage"",""removeOldImages"",""loadingImage"",""usingSprites"",""previewImage"",""showingThumbFilename"",""newImage"",""setImageSizeAndOffset"",""currentImageContainer"",""preloadNearby"",""getHigherQuality"",""currentImage"",""tagName"",""removeDelay"",""deleting"",""oldThumbFilename"",""thumbnailsClone"",""foundOne"",""newThumbFilename"",""thumbURL"",""currentQualityIndex"",""previewImageHeight"",""thumbContainerHeight"",""clearShowing"",""clientHeight"",""sizeSpecifiedInCSS"",""thumbAspectRatio"",""setThumbContainerPos"",""seekbarRect"",""plyrRect"",""minVal"",""maxVal"",""right"",""clientWidth"",""previewPos"",""multiplier"",""top"",""currentScrubbingImageElement"",""currentThumbnailImageElement"",""insertElements"",""attribute"",""change"",""_sources$"",""_sources$$provider"",""crossorigin"",""Plyr"",""failed"",""jQuery"",""original"",""search"",""truthy"",""searchParams"",""tabindex"",""webkitShowPlaybackTargetPicker"",""isHidden"",""hiding"",""eventName"",""soft"",""unload"",""inputIsValid"",""fauxDuration"",""realDuration"",""Infinity"",""mozHasAudio"",""webkitAudioDecodedByteCount"",""audioTracks"",""updateStorage"",""requestPictureInPicture"",""exitPictureInPicture"",""webkitPresentationMode"",""pictureInPictureElement"",""inline""],""mappings"":""AAMA,SAASA,kBAAkBC,EAAQC,GACjC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CACrC,IAAIE,EAAaH,EAAMC,GACvBE,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAIlD,SAASO,aAAaC,EAAaC,EAAYC,GAG7C,OAFID,GAAYd,kBAAkBa,EAAYG,UAAWF,GACrDC,GAAaf,kBAAkBa,EAAaE,GACzCF,EAGT,SAASI,gBAAgBC,EAAKP,EAAKQ,GAYjC,OAXIR,KAAOO,EACTT,OAAOC,eAAeQ,EAAKP,EAAK,CAC9BQ,MAAOA,EACPb,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZU,EAAIP,GAAOQ,EAGND,EAGT,SAASE,eAAeC,EAAKlB,GAC3B,OAAOmB,gBAAgBD,IAAQE,sBAAsBF,EAAKlB,IAAMqB,mBAGlE,SAASC,mBAAmBJ,GAC1B,OAAOK,mBAAmBL,IAAQM,iBAAiBN,IAAQO,qBAG7D,SAASF,mBAAmBL,GAC1B,GAAIQ,MAAMC,QAAQT,GAAM,CACtB,IAAK,IAAIlB,EAAI,EAAG4B,EAAO,IAAIF,MAAMR,EAAIjB,QAASD,EAAIkB,EAAIjB,OAAQD,IAAK4B,EAAK5B,GAAKkB,EAAIlB,GAEjF,OAAO4B,GAIX,SAAST,gBAAgBD,GACvB,GAAIQ,MAAMC,QAAQT,GAAM,OAAOA,EAGjC,SAASM,iBAAiBK,GACxB,GAAIC,OAAOC,YAAYzB,OAAOuB,IAAkD,uBAAzCvB,OAAOO,UAAUmB,SAASC,KAAKJ,GAAgC,OAAOH,MAAMQ,KAAKL,GAG1H,SAAST,sBAAsBF,EAAKlB,GAClC,IAAImC,EAAO,GACPC,GAAK,EACLC,GAAK,EACLC,OAAKC,EAET,IACE,IAAK,IAAiCC,EAA7BC,EAAKvB,EAAIY,OAAOC,cAAmBK,GAAMI,EAAKC,EAAGC,QAAQC,QAChER,EAAKS,KAAKJ,EAAGxB,QAEThB,GAAKmC,EAAKlC,SAAWD,GAH8CoC,GAAK,IAK9E,MAAOS,GACPR,GAAK,EACLC,EAAKO,EACL,QACA,IACOT,GAAsB,MAAhBK,EAAW,QAAWA,EAAW,SAC5C,QACA,GAAIJ,EAAI,MAAMC,GAIlB,OAAOH,EAGT,SAASV,qBACP,MAAM,IAAIqB,UAAU,mDAGtB,SAASzB,mBACP,MAAM,IAAIyB,UAAU,wDC5FtB,IAAMC,SAAW,CACbC,QAAQ,EACRC,WAAY,GACZC,OAAO,GCFX,SAAgBC,QAAQC,EAASC,GF+G/B,OALA,WACE,OEvGW3B,MAAMQ,KAAKoB,SAASC,iBAAiBF,IAAWG,SAASC,OAUrDxB,KAAKmB,EAASC,GCdjC,SAAgBK,QAAQN,EAASO,GHoH/B,GGnHOP,GAAYO,EHmHnB,CAKA,IGnHQC,EAAQ,IAAIC,MAAMF,GAGxBP,EAAQU,cAAcF,ICN1B,IAAMG,eAAiB,SAAAC,GJ+HrB,OI/H+BA,MAAAA,EAAiDA,EAAMC,YAAc,MAChGC,WAAa,SAACF,EAAOC,GJkIzB,OIlIyCE,QAAQH,GAASC,GAAeD,aAAiBC,IAEtFG,kBAAoB,SAAAJ,GJoIxB,OIpIiCA,MAAAA,GAC7BK,SAAW,SAAAL,GJuIf,OIvIwBD,eAAeC,KAAW1D,QAC9CgE,SAAW,SAAAN,GJ0If,OI1IwBD,eAAeC,KAAWO,SAAWA,OAAOC,MAAMR,IACtES,SAAW,SAAAT,GJ6If,OI7IwBD,eAAeC,KAAWU,QAC9CC,UAAY,SAAAX,GJgJhB,OIhJyBD,eAAeC,KAAWG,SAC/CS,WAAa,SAAAZ,GJmJjB,OInJ0BD,eAAeC,KAAWa,UAChDlD,QAAU,SAAAqC,GJsJd,OItJuBtC,MAAMC,QAAQqC,IACjCc,WAAa,SAAAd,GJyJjB,OIzJ0BE,WAAWF,EAAOe,WACxCC,UAAY,SAAAhB,GJ4JhB,OI5JyBE,WAAWF,EAAOiB,UACvCC,QAAU,SAAAlB,GJ+Jd,OI/JuBE,WAAWF,EAAOH,QACrCsB,QAAU,SAAAnB,GJkKd,OIjKEI,kBAAkBJ,KAChBS,SAAST,IAAUrC,QAAQqC,IAAUc,WAAWd,MAAYA,EAAM/D,QACnEoE,SAASL,KAAW1D,OAAO8E,KAAKpB,GAAO/D,QAE5CoF,GAAe,CACXC,gBAAiBlB,kBACjBmB,OAAQlB,SACRmB,OAAQlB,SACRmB,OAAQhB,SACRiB,QAASf,UACTgB,SAAUf,WACVgB,MAAOjE,QACPkE,SAAUf,WACV1B,QAAS4B,UACTpB,MAAOsB,QACPY,MAAOX,SChCX,SAAgBY,iBAAiB/E,GLqM/B,IKpMQgF,EAAQ,GAAAC,OAAGjF,GAAQgF,MAAM,oCLsMjC,OKpMOA,EAIEE,KAAKC,IACR,GAECH,EAAM,GAAKA,EAAM,GAAG/F,OAAS,IAEzB+F,EAAM,IAAMA,EAAM,GAAK,IARrB,EAaf,SAAgBI,MAAMZ,EAAQa,GLgM5B,GK/LMA,EAAO,EAAG,CLgMd,IK/LUC,EAASP,iBAAiBM,GLgMpC,OK/LWE,WAAWf,EAAOgB,QAAQF,ILkMvC,OKhMSJ,KAAKE,MAAMZ,EAASa,GAAQA,ELmMvC,IM7MMI,WN+MN,WAME,SAASA,EM/MK3G,EAAQ4G,GNgNpBC,gBAAgBlD,KAAMgD,GM/MdpB,GAAGjC,QAAQtD,GNmNjB2D,KMjNWL,QAAUtD,EACRuF,GAAGI,OAAO3F,KNmNvB2D,KMjNWL,QAAUE,SAASsD,cAAc9G,IAGrCuF,GAAGjC,QAAQK,KAAKL,UAAaiC,GAAGS,MAAMrC,KAAKL,QAAQyD,cNqN5DpD,KMjNSqD,OAASxG,OAAOyG,OAAO,GAAIhE,SAAU2D,GNkN9CjD,KMhNSuD,QNsXX,OAnKAvG,aAAagG,EAAY,CAAC,CACxBjG,IAAK,OACLQ,MAAO,WM3JEyF,EAAWQ,UAKZxD,KAAKqD,OAAO9D,SN+JhBS,KM7JSL,QAAQ8D,MAAMC,WAAa,ON8JpC1D,KM7JSL,QAAQ8D,MAAME,iBAAmB,ON8J1C3D,KM7JSL,QAAQ8D,MAAMG,YAAc,gBNgKvC5D,KM7JO6D,WAAU,GN8JjB7D,KM5JOL,QAAQyD,WAAapD,QN8J7B,CACDjD,IAAK,UACLQ,MAAO,WM3JEyF,EAAWQ,UNiKlBxD,KM7JO6D,WAAU,GN8JjB7D,KM5JOL,QAAQyD,WAAa,QN8J7B,CACDrG,IAAK,YACLQ,MAAO,SM7JGuG,GN8JR,IAAIC,EAAQ/D,KM7JJgE,EAASF,EAAS,mBAAqB,sBNiK/C,CM9JG,aAAc,YAAa,YAAYG,QAAQ,SAAA/D,GAC5C6D,EAAKpE,QAAQqE,GAAQ9D,EAAM,SAAAC,GN+J7B,OM/JsC4D,EAAKG,IAAI/D,KAAQ,ONwK5D,CACDpD,IAAK,MACLQ,MAAO,SMlKH4C,GNmKF,IMlKO6C,EAAWQ,UAAY5B,GAAGzB,MAAMA,GNmKrC,OMlKW,KNqKb,IM1JMgE,EARE5D,EAAQJ,EAAM9D,OACd+H,EAAQjE,EAAMkE,eAAe,GAC7BC,EAAMxB,WAAWvC,EAAMgE,aAAa,SAAW,EAC/C7B,EAAMI,WAAWvC,EAAMgE,aAAa,SAAW,IAC/C3B,EAAOE,WAAWvC,EAAMgE,aAAa,UAAY,EACjDC,EAAQ9B,EAAM4B,EAIdG,EAAalE,EAAMmE,wBACnBlF,EAAe,IAAMiF,EAAWE,OAAU3E,KAAKqD,OAAO7D,WAAa,GAAM,INmLjF,OMhLE2E,EAAW,IAAMM,EAAWE,OAAUP,EAAMQ,QAAUH,EAAWI,OAGnD,EACVV,EAAU,EACHA,EAAU,MACjBA,EAAU,KAIVA,EAAU,GACVA,IAAY,IAAgB,EAAVA,GAAe3E,EAC1B2E,EAAU,KACjBA,GAA4B,GAAhBA,EAAU,IAAU3E,GAI7B8E,EAAM3B,MAAM6B,GAASL,EAAU,KAAMvB,KNsK/C,CACD7F,IAAK,MACLQ,MAAO,SMjKH4C,GACK6C,EAAWQ,SAAY5B,GAAGzB,MAAMA,KAAUA,EAAM9D,OAAOyI,WAK5D3E,EAAM4E,iBAGN5E,EAAM9D,OAAOkB,MAAQyC,KAAKgF,IAAI7E,GAG9BF,QAAQE,EAAM9D,OAAuB,aAAf8D,EAAMD,KAAsB,SAAW,aNiK/D,CAAC,CACHnD,IAAK,QAOLQ,MAAO,SMtTMlB,GNuTX,IMvTmB4G,EAAcgC,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,GACvBC,EAAU,KNmUhB,GMjUMtD,GAAGS,MAAMhG,IAAWuF,GAAGI,OAAO3F,GAC9B6I,EAAUjH,MAAMQ,KAAKoB,SAASC,iBAAiB8B,GAAGI,OAAO3F,GAAUA,EAAS,wBACrEuF,GAAGjC,QAAQtD,GAClB6I,EAAU,CAAC7I,GACJuF,GAAGQ,SAAS/F,GACnB6I,EAAUjH,MAAMQ,KAAKpC,GACduF,GAAGO,MAAM9F,KAChB6I,EAAU7I,EAAO8I,OAAOvD,GAAGjC,UAG3BiC,GAAGS,MAAM6C,GNwTb,OMvTW,KN0Tb,IMvTQ7B,EAASxG,OAAOyG,OAAO,GAAIhE,SAAU2D,GAEvCrB,GAAGI,OAAO3F,IAAWgH,EAAO5D,OAEX,IAAI2F,iBAAiB,SAAAC,GAClCpH,MAAMQ,KAAK4G,GAAWpB,QAAQ,SAAAqB,GAC1BrH,MAAMQ,KAAK6G,EAASC,YAAYtB,QAAQ,SAAAuB,GNwT9C,GMvTe5D,GAAGjC,QAAQ6F,IAAU9F,QAAQ8F,EAAMnJ,GAK1B,IAAI2G,EAAWwC,EAAMnC,SAMtCoC,QAAQ5F,SAAS6F,KAAM,CAC5BC,WAAW,EACXC,SAAS,IN0TnB,OMtTSV,EAAQW,IAAI,SAAAC,GNuTnB,OMvTwB,IAAI9C,EAAW8C,EAAG7C,ON0T7C,CACDlG,IAAK,UACLiI,IAAK,WACH,MM9WS,iBAAkBnF,SAASkG,oBNkXjC/C,EA5LT,GOxNM1C,iBAAiB,SAAAC,GP2ZrB,OO3Z+BA,MAAAA,EAAiDA,EAAMC,YAAc,MAChGC,aAAa,SAACF,EAAOC,GP8ZzB,OO9ZyCE,QAAQH,GAASC,GAAeD,aAAiBC,IACtFG,oBAAoB,SAAAJ,GPiaxB,OOjaiCA,MAAAA,GAC7BK,WAAW,SAAAL,GPoaf,OOpawBD,iBAAeC,KAAW1D,QAC9CgE,WAAW,SAAAN,GPuaf,OOvawBD,iBAAeC,KAAWO,SAAWA,OAAOC,MAAMR,IACtES,WAAW,SAAAT,GP0af,OO1awBD,iBAAeC,KAAWU,QAC9CC,YAAY,SAAAX,GP6ahB,OO7ayBD,iBAAeC,KAAWG,SAC/CS,aAAa,SAAAZ,GPgbjB,OOhb0BD,iBAAeC,KAAWa,UAChDlD,UAAU,SAAAqC,GPmbd,OOnbuBtC,MAAMC,QAAQqC,IACjCyF,UAAY,SAAAzF,GPsbhB,OOtbyBE,aAAWF,EAAO0F,UACvC5E,aAAa,SAAAd,GPybjB,OOzb0BE,aAAWF,EAAOe,WACxCC,YAAY,SAAAhB,GP4bhB,OO5byBE,aAAWF,EAAOiB,UACvC0E,WAAa,SAAA3F,GP+bjB,OO/b0BD,iBAAeC,KAAW4F,MAChD1E,UAAU,SAAAlB,GPkcd,OOlcuBE,aAAWF,EAAOH,QACrCgG,gBAAkB,SAAA7F,GPqctB,OOrc+BE,aAAWF,EAAO8F,gBAC7CC,MAAQ,SAAA/F,GPwcZ,OOxcqBE,aAAWF,EAAOgG,OAAOC,eAAiB/F,aAAWF,EAAOgG,OAAOE,SACpFC,QAAU,SAAAnG,GP2cd,OO3cuBE,aAAWF,EAAOoG,aAAgBhG,oBAAkBJ,IAAUS,WAAST,EAAMqG,OAChGC,UAAY,SAAAtG,GP8chB,OO9cyBE,aAAWF,EAAOuG,UAEvCpF,UAAU,SAAAnB,GPgdd,OO/cEI,oBAAkBJ,KAChBS,WAAST,IAAUrC,UAAQqC,IAAUc,aAAWd,MAAYA,EAAM/D,QACnEoE,WAASL,KAAW1D,OAAO8E,KAAKpB,GAAO/D,QAEtCuK,MAAQ,SAAAxG,GPgdZ,GO9cME,aAAWF,EAAOgG,OAAOS,KP+c7B,OO9cW,EPkdb,IO9cOhG,WAAST,GP+cd,OO9cW,EPkdb,IO9cMyB,EAASzB,EACRA,EAAM0G,WAAW,YAAe1G,EAAM0G,WAAW,cAClDjF,EAAM,UAAAQ,OAAajC,IPkdzB,IACE,OO/cYmB,UAAQ,IAAIsF,IAAIhF,GAAQkF,UAClC,MAAOC,GPgdT,OO/cW,IAIfC,KAAe,CACXvF,gBAAiBlB,oBACjBmB,OAAQlB,WACRmB,OAAQlB,WACRmB,OAAQhB,WACRiB,QAASf,YACTgB,SAAUf,aACVgB,MAAOjE,UACPmJ,QAASrB,UACT5D,SAAUf,aACV1B,QAAS4B,YACT+F,SAAUpB,WACV/F,MAAOsB,UACP8F,cAAenB,gBACfoB,IAAKlB,MACLmB,MAAOf,QACPgB,QAASb,UACTc,IAAKZ,MACL1E,MAAOX,WC7DLkG,yBAA4B,WRqhBhC,IQnhBMC,GAAY,ERqhBlB,IACE,IQphBU5E,EAAUpG,OAAOC,eAAe,GAAI,UAAW,CACjDkI,IADiD,WRuhBrD,OQrhBQ6C,GAAY,EACL,QAGftB,OAAOuB,iBAAiB,OAAQ,KAAM7E,GACtCsD,OAAOwB,oBAAoB,OAAQ,KAAM9E,GAC3C,MAAOkE,IRuhBX,OQnhBSU,EAhBuB,GAoBlC,SAAgBG,eAAerI,EAASQ,EAAO8H,GRohB7C,IAAIlE,EAAQ/D,KQphB2C8D,EAAiDmB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAAjCiD,IAAiCjD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GAAjBkD,EAAiBlD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GR2hBxG,GQzhBOtF,GAAa,qBAAsBA,IAAYiC,KAAGS,MAAMlC,IAAWyB,KAAGM,SAAS+F,GRyhBtF,CAKA,IQzhBQG,EAASjI,EAAMkI,MAAM,KAIvBpF,EAAUkF,EAGVP,2BACA3E,EAAU,CAENiF,QAAAA,EAEAC,QAAAA,IAKRC,EAAOnE,QAAQ,SAAA/D,GACP6D,GAAQA,EAAKuE,gBAAkBxE,GAE/BC,EAAKuE,eAAenJ,KAAK,CAAEQ,QAAAA,EAASO,KAAAA,EAAM+H,SAAAA,EAAUhF,QAAAA,IAGxDtD,EAAQmE,EAAS,mBAAqB,uBAAuB5D,EAAM+H,EAAUhF,MAKrF,SAAgBsF,GAAG5I,GR4hBjB,IQ5hB0ByI,EAAwDnD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAA/C,GAAIgD,EAA2ChD,UAAAzI,OAAA,EAAAyI,UAAA,QAAAnG,EAAjCoJ,IAAiCjD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GAAjBkD,EAAiBlD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAChF+C,eAAexJ,KAAKwB,KAAML,EAASyI,EAAQH,GAAU,EAAMC,EAASC,GAIxE,SAAgBK,IAAI7I,GR+hBlB,IQ/hB2ByI,EAAwDnD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAA/C,GAAIgD,EAA2ChD,UAAAzI,OAAA,EAAAyI,UAAA,QAAAnG,EAAjCoJ,IAAiCjD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GAAjBkD,EAAiBlD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GACjF+C,eAAexJ,KAAKwB,KAAML,EAASyI,EAAQH,GAAU,EAAOC,EAASC,GAIzE,SAAgBM,KAAK9I,GRkiBnB,IAAI+I,EAAS1I,KQliBeoI,EAAwDnD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAA/C,GAAIgD,EAA2ChD,UAAAzI,OAAA,EAAAyI,UAAA,QAAAnG,EAAjCoJ,IAAiCjD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GAAjBkD,EAAiBlD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAMlF+C,eAAexJ,KAAKwB,KAAML,EAASyI,EALd,SAAfO,IACFH,IAAI7I,EAASyI,EAAQO,EAAcT,EAASC,GR0iBhD,IAAK,IAAIS,EAAO3D,UAAUzI,OQ3iBDqM,EAAS,IAAA5K,MAAA2K,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAATD,EAASC,GAAA7D,UAAA6D,GAE9Bb,EAASc,MAAML,EAAMG,KAGgC,EAAMX,EAASC,GAI5E,SAAgBa,aAAarJ,GR6iB3B,IQ7iBoCO,EAAyC+E,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAlC,GAAIgE,EAA8BhE,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAAbiE,EAAajE,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,GRkjBzE,GQhjBOrD,KAAGjC,QAAQA,KAAYiC,KAAGS,MAAMnC,GRgjBvC,CAKA,IQhjBQC,EAAQ,IAAIgJ,YAAYjJ,EAAM,CAChC+I,QAAAA,EACAC,OAAQrM,OAAOyG,OAAO,GAAI4F,EAAQ,CAC9BE,KAAMpJ,SAKdL,EAAQU,cAAcF,IAI1B,SAAgBkJ,kBACRrJ,MAAQA,KAAKsI,iBR+iBjBtI,KQ9iBSsI,eAAerE,QAAQ,SAAAqF,GR+iB9B,IQ9iBc3J,EAAqC2J,EAArC3J,QAASO,EAA4BoJ,EAA5BpJ,KAAM+H,EAAsBqB,EAAtBrB,SAAUhF,EAAYqG,EAAZrG,QACjCtD,EAAQoI,oBAAoB7H,EAAM+H,EAAUhF,KRmjBpDjD,KQhjBSsI,eAAiB,IAK9B,SAAgBiB,QRgjBd,IAAIC,EAASxJ,KAEb,OQjjBS,IAAI8G,QAAQ,SAAA2C,GRkjBnB,OQjjBID,EAAKD,MAAQG,WAAWD,EAAS,GAAKlB,GAAG/J,KAAKgL,EAAMA,EAAKG,SAASC,UAAW,QAASH,KACxFI,KAAK,cC9GJ,SAASC,KAAKH,EAAUI,GToqB7B,ISlqBQ7E,EAAUyE,EAASnN,OAASmN,EAAW,CAACA,GAI9C1L,MAAMQ,KAAKyG,GACN8E,UACA/F,QAAQ,SAACtE,EAASsK,GTgqBvB,IS/pBcC,EAAQD,EAAQ,EAAIF,EAAQI,WAAU,GAAQJ,EAG9CK,EAASzK,EAAQ0K,WACjBC,EAAU3K,EAAQ4K,YAIxBL,EAAMM,YAAY7K,GAKd2K,EACAF,EAAOK,aAAaP,EAAOI,GAE3BF,EAAOI,YAAYN,KAMnC,SAAgBQ,cAAc/K,EAASgL,GAC9B/I,KAAGjC,QAAQA,KAAYiC,KAAGS,MAAMsI,IAMrC9N,OAAO+N,QAAQD,GACVxF,OAAO,SAAA0F,GT2pBZ,IS3pBgBtN,ET2pBJC,eAAeqN,EAAM,GS3pBrB,GT8pBZ,OS9pB4BjJ,KAAGC,gBAAgBtE,KAC1C0G,QAAQ,SAAA6G,GT+pBb,IAAIC,EAAQvN,eAAesN,EAAO,GS/pBnB/N,EAAFgO,EAAA,GAAOxN,EAAPwN,EAAA,GTmqBb,OSnqB+BpL,EAAQqL,aAAajO,EAAKQ,KAI7D,SAAgB0N,cAAc/K,EAAMyK,EAAYO,GTqqB9C,ISnqBQvL,EAAUE,SAASoL,cAAc/K,GT+qBzC,OS5qBM0B,KAAGE,OAAO6I,IACVD,cAAc/K,EAASgL,GAIvB/I,KAAGI,OAAOkJ,KACVvL,EAAQwL,UAAYD,GAIjBvL,EAIX,SAAgByL,YAAYzL,EAAStD,GAC5BuF,KAAGjC,QAAQA,IAAaiC,KAAGjC,QAAQtD,IAIxCA,EAAOgO,WAAWI,aAAa9K,EAAStD,EAAOkO,aAInD,SAAgBc,cAAcnL,EAAMkK,EAAQO,EAAYO,GAC/CtJ,KAAGjC,QAAQyK,IAIhBA,EAAOI,YAAYS,cAAc/K,EAAMyK,EAAYO,IAIvD,SAAgBI,cAAc3L,GACtBiC,KAAGQ,SAASzC,IAAYiC,KAAGO,MAAMxC,GACjC1B,MAAMQ,KAAKkB,GAASsE,QAAQqH,eAI3B1J,KAAGjC,QAAQA,IAAaiC,KAAGjC,QAAQA,EAAQ0K,aAIhD1K,EAAQ0K,WAAWkB,YAAY5L,GAInC,SAAgB6L,aAAa7L,GT+pB3B,GS9pBOiC,KAAGjC,QAAQA,GToqBlB,IAFA,IS9pBQnD,EAAWmD,EAAQ8L,WAAnBjP,OAECA,EAAS,GACZmD,EAAQ4L,YAAY5L,EAAQ+L,WAC5BlP,GAAU,EAKlB,SAAgBmP,eAAeC,EAAUC,GT8pBvC,OS7pBOjK,KAAGjC,QAAQkM,IAAcjK,KAAGjC,QAAQkM,EAASxB,aAAgBzI,KAAGjC,QAAQiM,IAI7EC,EAASxB,WAAWyB,aAAaF,EAAUC,GAEpCD,GALI,KASf,SAAgBG,0BAA0BC,EAAKC,GTgqB7C,IS1pBOrK,KAAGI,OAAOgK,IAAQpK,KAAGS,MAAM2J,GT2pBhC,MS1pBW,GT6pBb,IS1pBQrB,EAAa,GACbuB,EAAWD,ET+rBnB,OS7rBED,EAAI3D,MAAM,KAAKpE,QAAQ,SAAAkI,GT2pBvB,ISzpBUvM,EAAWuM,EAAEC,OACbC,EAAYzM,EAAS0M,QAAQ,IAAK,IAIlCC,EAHW3M,EAAS0M,QAAQ,SAAU,IAGrBjE,MAAM,KACvBtL,EAAMwP,EAAM,GACZhP,EAAQgP,EAAM/P,OAAS,EAAI+P,EAAM,GAAGD,QAAQ,QAAS,IAAM,GT4pBrE,OSzpBkB1M,EAAS4M,OAAO,IT0pBhC,ISvpBW,IAEG5K,KAAGE,OAAOoK,IAAatK,KAAGI,OAAOkK,EAASO,SAC1CP,EAASO,OAAT,IAAAjK,OAAsB6J,IAG1B1B,EAAW8B,MAAQJ,ETwpB3B,MAEF,ISvpBW,IAED1B,EAAW+B,GAAK9M,EAAS0M,QAAQ,IAAK,ITwpB9C,MAEF,ISvpBW,IAED3B,EAAW5N,GAAOQ,KASvBoN,EAIX,SAAgBgC,aAAahN,EAASiN,GTqpBpC,GSppBOhL,KAAGjC,QAAQA,GTopBlB,CAIA,ISppBMkN,EAAOD,EAENhL,KAAGK,QAAQ4K,KACZA,GAAQlN,EAAQiN,QAGhBC,EACAlN,EAAQqL,aAAa,SAAU,IAE/BrL,EAAQmN,gBAAgB,WAKhC,SAAgBC,YAAYpN,EAAS0M,EAAWW,GTopB9C,GSnpBMpL,KAAGQ,SAASzC,GTopBhB,OSnpBW1B,MAAMQ,KAAKkB,GAASkG,IAAI,SAAAsB,GTopBjC,OSppBsC4F,YAAY5F,EAAGkF,EAAWW,KTwpBpE,GSrpBMpL,KAAGjC,QAAQA,GAAU,CTspBzB,ISrpBQqE,EAAS,ST4pBjB,YS3pByB,IAAVgJ,IACPhJ,EAASgJ,EAAQ,MAAQ,UAG7BrN,EAAQsN,UAAUjJ,GAAQqI,GACnB1M,EAAQsN,UAAUC,SAASb,GTypBxC,OStpBS,EAIX,SAAgBc,SAASxN,EAAS0M,GTspBhC,OSrpBSzK,KAAGjC,QAAQA,IAAYA,EAAQsN,UAAUC,SAASb,GAI7D,SAAgB3M,UAAQC,EAASC,GT2pB/B,OALA,WACE,OSnpBW3B,MAAMQ,KAAKoB,SAASC,iBAAiBF,IAAWG,SAASC,OAUrDxB,KAAKmB,EAASC,GAIjC,SAAgBwN,YAAYxN,GT6oB1B,OS5oBSI,KAAK2J,SAASC,UAAU9J,iBAAiBF,GAIpD,SAAgByN,WAAWzN,GT4oBzB,OS3oBSI,KAAK2J,SAASC,UAAUzG,cAAcvD,GAIjD,SAAgB0N,YT2oBd,IS3oBwB3N,EAAgCsF,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAtB,KAAMnB,EAAgBmB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GT8oBxD,GS7oBOrD,KAAGjC,QAAQA,GT6oBlB,CAIA,IS7oBQ4N,EAAYH,YAAY5O,KAAKwB,KAAM,2DACnCwN,EAAQD,EAAU,GAClBE,EAAOF,EAAUA,EAAU/Q,OAAS,GAsB1CwL,eAAexJ,KAAKwB,KAAMA,KAAK2J,SAASC,UAAW,UApBtC,SAAAzJ,GT+oBb,GS7oBsB,QAAdA,EAAMpD,KAAmC,IAAlBoD,EAAMuN,QT6oBrC,CAKA,IS7oBUC,EAAU9N,SAAS+N,cAErBD,IAAYF,GAAStN,EAAM0N,SAIpBF,IAAYH,GAASrN,EAAM0N,WAElCJ,EAAKK,QACL3N,EAAM4E,mBALNyI,EAAMM,QACN3N,EAAM4E,oBAQsDjB,GAAQ,IAIhF,SAAgBiK,WT6oBd,IS7oBuBpO,EAAkCsF,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAxB,KAAM+I,EAAkB/I,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAClDrD,KAAGjC,QAAQA,KAKhBA,EAAQmO,MAAM,CAAEG,eAAe,IAG3BD,GACAjB,YAAYpN,EAASK,KAAKqD,OAAO6K,WAAWF,WC1SpD,IAMaG,mBAAsB,WV07BjC,IUz7BQxO,EAAUE,SAASoL,cAAc,QAEjC7C,EAAS,CACXgG,iBAAkB,sBAClBC,cAAe,gBACfC,YAAa,gCACbC,WAAY,iBAGVrO,EAAOrD,OAAO8E,KAAKyG,GAAQoG,KAAK,SAAArO,GVw7BtC,YUx7BwErB,IAAzBa,EAAQ8D,MAAMtD,KV07B/D,QUx7BSyB,KAAGI,OAAO9B,IAAQkI,EAAOlI,GAZD,GAgBnC,SAAgBuO,QAAQ9O,GACpB+J,WAAW,WVw7BX,IUt7BQiD,aAAahN,GAAS,GACtBA,EAAQ+O,aACR/B,aAAahN,GAAS,GACxB,MAAOwH,MAGV,GC3BP,IAAMwH,QAAU,CACZC,OAAgC/O,SAASgP,aACzCC,OAAQvI,OAAOwI,UAAUC,UAAUjP,SAAS,QAC5CkP,SAAU,qBAAsBpP,SAASkG,gBAAgBtC,QAAU,OAAOyL,KAAKH,UAAUC,WACzFG,SAAU,kBAAkBD,KAAKH,UAAUK,UAC3CC,MAAO,uBAAuBH,KAAKH,UAAUK,WCA3CE,cAAgB,CZ+9BpBC,YY99Be,SZ+9BfC,YY99Be,IZ+9BfC,aY99BgB,cZ+9BhBC,YY99Be,yBZ+9BfC,YY99Be,UAIXC,QAAU,CAEZC,MAAO,gBAAiBhQ,SAASoL,cAAc,SAC/C6E,MAAO,gBAAiBjQ,SAASoL,cAAc,SAI/C8E,MAPY,SAON7P,EAAM8P,EAAUC,GZ69BtB,IY59BUC,EAAgBvB,QAAQQ,UAAYc,GAAeL,QAAQK,YAC3DE,EAAMP,QAAQ1P,IAAsB,UAAb8P,EZ89BjC,MY39BW,CACHG,IAAAA,EACAC,GAJOD,GAAOP,QAAQS,aAAwB,UAATnQ,IAAqByO,QAAQQ,UAAYe,KAUtFI,MACQ3B,QAAQQ,WAMRvN,KAAGM,SAAS+I,cAAc,SAASsF,8BAMnC1Q,SAAS2Q,yBAA4BvF,cAAc,SAASwF,0BASpEC,QAAS9O,KAAGM,SAASqE,OAAOoK,uCAI5BV,YAAa,gBAAiBpQ,SAASoL,cAAc,SAKrD2F,KAnDY,SAmDPrQ,GZw9BL,GYv9BQqB,KAAGS,MAAM9B,GZw9Bf,OYv9Ba,EZ09Bf,IYv9BWsQ,EZw9BSrT,eYx9BI+C,EAAM8H,MAAM,KZw9Ba,GY79BrC,GAMJnI,EAAOK,EZ49Bf,IYz9BSP,KAAK8Q,SAAWD,IAAc7Q,KAAKE,KZ09B1C,OYz9Ba,EAIPrD,OAAO8E,KAAK2N,eAAevP,SAASG,KACpCA,GAAI,aAAAsC,OAAiB8M,cAAc/O,GAA/B,MZ49BZ,IACE,OYz9BaG,QAAQR,GAAQF,KAAK+Q,MAAMC,YAAY9Q,GAAMoM,QAAQ,KAAM,KACpE,MAAOnF,GZ09BX,OYz9Ba,IAKf8J,WAAY,eAAgBpR,SAASoL,cAAc,SAGnDoF,WAAa,WZw9Bb,IYv9BUa,EAAQrR,SAASoL,cAAc,SZy9BzC,OYx9BIiG,EAAMhR,KAAO,QACS,UAAfgR,EAAMhR,KAHJ,GAQbkE,MAAO,iBAAkBvE,SAASkG,gBAGlCoL,aAAoC,IAAvBhD,mBAIbiD,cAAe,eAAgB7K,QAAUA,OAAO8K,WAAW,4BAA4B3R,SC5GpF,SAAS4R,cAAc/Q,GbokC5B,SankCOqB,KAAGO,MAAM5B,IAAYqB,KAAGI,OAAOzB,IAAWA,EAAMR,SAAS,QAIhD6B,KAAGO,MAAM5B,GAASA,EAAQA,EAAM8H,MAAM,MAEvCxC,IAAI/E,QAAQyQ,MAAM3P,KAAGG,QAGtC,SAAgByP,kBAAkBC,GbkkChC,IajkCO7P,KAAGO,MAAMsP,KAAWA,EAAMF,MAAM3P,KAAGG,QbkkCxC,OajkCW,KbokCb,IAAI2P,EAASlU,eajkCaiU,EALa,GAK9B9M,EAL8B+M,EAAA,GAKvBC,EALuBD,EAAA,GAO/BE,EADa,SAAbC,EAAcC,EAAGC,GbqkCvB,OarkCoC,IAANA,EAAUD,EAAID,EAAWE,EAAGD,EAAIC,GAC9CF,CAAWlN,EAAOgN,GbwkCpC,MatkCS,CAAChN,EAAQiN,EAASD,EAASC,GAGtC,SAAgBI,eAAezR,GbskC7B,IarkCQ0R,EAAQ,SAAAR,GbskCd,OarkCSH,cAAcG,GAIZA,EAAMpJ,MAAM,KAAKxC,IAAI/E,QAHjB,MAOX2Q,EAAQQ,EAAM1R,GbglCpB,Oa7kCgB,OAAVkR,IACAA,EAAQQ,EAAMjS,KAAKqD,OAAOoO,QAIhB,OAAVA,IAAmB7P,KAAGS,MAAMrC,KAAKkS,QAAUtQ,KAAGI,OAAOhC,KAAKkS,MAAMT,SAChEA,EAAQQ,EAAMjS,KAAKkS,MAAMT,QAGtBA,EAIX,SAAgBU,eAAe5R,GbokC7B,IankCOP,KAAKoS,QbokCV,MankCW,GbskCb,IankCQX,EAAQO,eAAexT,KAAKwB,KAAMO,GbskCtC8R,EAAQ7U,eapkCKoE,KAAGO,MAAMsP,GAASA,EAAQ,CAAC,EAAG,GbokCd,GankCzBa,EAAW,IARiBD,EAAA,GAAAA,EAAA,GbklCpC,GAFArS,KatkCO2J,SAASI,QAAQtG,MAAM8O,cAA5B,GAAA/P,OAA+C8P,EAA/C,KAGItS,KAAKwS,SAAWxS,KAAK6H,UAAUuI,GAAI,CbskCvC,IapkCUqC,GADS,IACUH,GAAV,IbskCnBtS,KarkCS+Q,MAAMtN,MAAMiP,UAAjB,eAAAlQ,OAA4CiQ,EAA5C,WACOzS,KAAK8Q,SbskChB9Q,KarkCS2J,SAASI,QAAQkD,UAAUnJ,OAAO9D,KAAKqD,OAAO6K,WAAWyE,gBAA2B,OAAVlB,GbwkCrF,MarkCS,CAAEa,QAAAA,EAASb,MAAAA,GC1EtB,IASMmB,MAAQ,CACVC,WADU,Wd+oCV,IAAI9O,EAAQ/D,KAEZ,Oc/oCSA,KAAK8Q,QAIM7S,MAAMQ,KAAKuB,KAAK+Q,MAAMjR,iBAAiB,WAGxCqF,OAAO,SAAA2N,Gd+oCxB,Ic9oCY5S,EAAO4S,EAAOvO,aAAa,QdgpCvC,Qc9oCU3C,KAAGS,MAAMnC,IAIN0P,QAAQgB,KAAKpS,KAAKuF,EAAM7D,KAbxB,IAkBf6S,kBArBU,WdoqCV,Oc7oCWH,MAAMC,WACRrU,KAAKwB,MACL6F,IAAI,SAAAiN,Gd4oCX,Oc5oCqBhS,OAAOgS,EAAOvO,aAAa,WACzCY,OAAOzE,UAGhBsS,OA7BU,WdyqCV,Gc3oCShT,KAAK8Q,Qd2oCd,CAIA,Ic3oCUmC,EAASjT,KAGfmS,eAAe3T,KAAKyU,GAGpBpW,OAAOC,eAAemW,EAAOlC,MAAO,UAAW,CAC3C/L,IAD2C,Wd4oC/C,IcxoCc8N,EADUF,MAAMC,WAAWrU,KAAKyU,GACfzE,KAAK,SAAAsE,Gd0oClC,Oc1oC4CA,EAAOvO,aAAa,SAAW0O,EAAOH,Sd6oCpF,Oc1oCeA,GAAUhS,OAAOgS,EAAOvO,aAAa,UAEhDL,IAT2C,SASvC3D,Gd4oCR,IcvoCcuS,EAHUF,MAAMC,WAAWrU,KAAKyU,GAGfzE,KAAK,SAAAsE,Gd0oClC,Oc1oC4ChS,OAAOgS,EAAOvO,aAAa,WAAahE,Id6oCtF,Gc1oCauS,Ed0oCb,CAKA,IAAII,Ec1oCyDD,EAAOlC,MAApDoC,EAbDD,EAaCC,YAAaC,EAbdF,EAacE,OAAQC,EAbtBH,EAasBG,QAASC,EAb/BJ,EAa+BI,WAGtCL,EAAOlC,MAAMwC,IAAMT,EAAOvO,aAAa,QAGvB,SAAZ8O,GAAsBC,KAEtBL,EAAOxK,KAAK,iBAAkB,WAC1BwK,EAAOE,YAAcA,EAGhBC,GACDH,EAAOO,SAKfP,EAAOlC,MAAM0C,QAIjBzK,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,iBAAiB,EAAO,CAC5D2C,QAASnT,UAQzBoT,eA7FU,WA8FD3T,KAAK8Q,UAKVxF,cAAcsH,MAAMC,WAAWrU,KAAKwB,Od6oCxCA,KcxoCS+Q,MAAM/F,aAAa,MAAOhL,KAAKqD,OAAOuQ,Yd4oC/C5T,KcvoCS+Q,MAAM0C,OdyoCfzT,KctoCS6T,MAAMC,IAAI,iCCnHvB,SAAgBC,OAAO5R,GfgwCrB,Oe/vCOP,KAAGO,MAAMA,GAIPA,EAAMgD,OAAO,SAACmE,EAAMW,GfgwC3B,OehwCqC9H,EAAM6R,QAAQ1K,KAAUW,IAHlD9H,EAOf,SAAgB8R,QAAQ9R,EAAO5E,GfiwC7B,OehwCOqE,KAAGO,MAAMA,IAAWA,EAAM3F,OAIxB2F,EAAM+R,OAAO,SAACC,EAAMC,GfiwC3B,OejwCqC3R,KAAK4R,IAAID,EAAO7W,GAASkF,KAAK4R,IAAIF,EAAO5W,GAAS6W,EAAOD,IAHnF,KCXR,SAASG,UAAUxS,GhBoxCxB,OgBnxCSyS,KAAKtC,MAAMsC,KAAKC,UAAU1S,IAIrC,SAAgB2S,QAAQ3S,EAAQ4S,GhBmxC9B,OgBlxCSA,EAAKrM,MAAM,KAAK6L,OAAO,SAAC5W,EAAKP,GhBmxCpC,OgBnxC4CO,GAAOA,EAAIP,IAAM+E,GAIjE,SAAgBkR,ShBsxCd,IAFA,IgBpxCqB3W,EAAyB4I,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAhB,GhBsxCrB2D,EAAO3D,UAAUzI,OgBtxCWmY,EAAS,IAAA1W,MAAA2K,EAAA,EAAAA,EAAA,EAAA,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAT6L,EAAS7L,EAAA,GAAA7D,UAAA6D,GhB0xC9C,IgBzxCO6L,EAAQnY,OhB0xCb,OgBzxCWH,EhB4xCb,IgBzxCQyW,EAAS6B,EAAQC,QhB2xCzB,OgBzxCOhT,KAAGE,OAAOgR,IAIfjW,OAAO8E,KAAKmR,GAAQ7O,QAAQ,SAAAlH,GACpB6E,KAAGE,OAAOgR,EAAO/V,KACZF,OAAO8E,KAAKtF,GAAQ0D,SAAShD,IAC9BF,OAAOyG,OAAOjH,EAAdgB,gBAAA,GAAyBN,EAAM,KAGnCiW,OAAO3W,EAAOU,GAAM+V,EAAO/V,KAE3BF,OAAOyG,OAAOjH,EAAdgB,gBAAA,GAAyBN,EAAM+V,EAAO/V,OAIvCiW,OAAMjK,WAAN,EAAA,CAAO1M,GAAPmG,OAAkBmS,KAfdtY,EClBf,SAAgBwY,WAAWC,GjB+zCzB,MAAO,GAAGtS,OiB9zCEsS,EAAV,KAAAtS,OAAoBC,KAAKsS,MAAsB,IAAhBtS,KAAKuS,WAIxC,SAAgBC,OAAO1U,GjB8zCrB,IAAK,IAAIqI,EAAO3D,UAAUzI,OiB9zCKqM,EAAM,IAAA5K,MAAA2K,EAAA,EAAAA,EAAA,EAAA,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAND,EAAMC,EAAA,GAAA7D,UAAA6D,GjBk0CrC,OiBj0CMlH,KAAGS,MAAM9B,GACFA,EAGJA,EAAMhC,WAAW+N,QAAQ,WAAY,SAAC/J,EAAOhG,GjBk0CpD,OiBl0C0DsM,EAAKtM,GAAGgC,aAItE,SAAgB2W,cAAcC,EAASzS,GjBm0CrC,OiBl0CkB,IAAZyS,GAAyB,IAARzS,GAAa5B,OAAOC,MAAMoU,IAAYrU,OAAOC,MAAM2B,GAC7D,GAGFyS,EAAUzS,EAAO,KAAKK,QAAQ,GAI3C,SAAgBqS,ajBk0Cd,IiBl0CyB7U,EAAqC0E,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAA7B,GAAIuJ,EAAyBvJ,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAlB,GAAIqH,EAAcrH,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,GjBq0C1D,OiBp0CS1E,EAAM+L,QACT,IAAI+I,OAAO7G,EAAKjQ,WAAW+N,QAAQ,6BAA6B,QAAS,KACzEA,EAAQ/N,YAKhB,SAAgB+W,cjBk0Cd,OiBl0CsCrQ,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,IACnB1G,WAAW+N,QAAQ,SAAU,SAAApB,GjBk0C1C,OiBl0CkDA,EAAKsB,OAAO,GAAG+I,cAAgBrK,EAAKsK,OAAO,GAAGC,gBAIpG,SAAgBC,ejBm0Cd,IiBl0CM1T,GADiCiD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,IACd1G,WjB20CrB,OiBx0CEyD,EAASoT,WAAWpT,EAAQ,IAAK,KAGjCA,EAASoT,WAAWpT,EAAQ,IAAK,KAM1BoT,WAHPpT,EAASsT,YAAYtT,GAGK,IAAK,IAInC,SAAgB2T,cjB+zCd,IiB9zCM3T,GADgCiD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,IACb1G,WjBm0CrB,OiBh0CEyD,EAAS0T,aAAa1T,IAGRwK,OAAO,GAAGiJ,cAAgBzT,EAAO4T,MAAM,GAIzD,SAAgBC,UAAU/C,GjB6zCxB,IiB5zCQgD,EAAWjW,SAASkW,yBACpBpW,EAAUE,SAASoL,cAAc,OjB+zCzC,OiB9zCE6K,EAAStL,YAAY7K,GACrBA,EAAQqW,UAAYlD,EACbgD,EAASG,WAAW9K,UAI/B,SAAgB+K,QAAQvW,GjB4zCtB,IiB3zCQoK,EAAUlK,SAASoL,cAAc,OjB6zCzC,OiB5zCElB,EAAQS,YAAY7K,GACboK,EAAQiM,UC1EnB,IAAMG,UAAY,CACd7F,IAAK,MACLI,QAAS,UACTkC,MAAO,QACPwD,MAAO,QACPC,QAAS,WAGPC,KAAO,CACTtR,IADS,WlBy4CT,IkBx4CIjI,EAAuBkI,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAjB,GAAI5B,EAAa4B,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,GlB24CvB,GkB14CQrD,KAAGS,MAAMtF,IAAQ6E,KAAGS,MAAMgB,GlB24ChC,MkB14Ca,GlB64Cf,IkB14CQrB,EAASyS,QAAQpR,EAAOiT,KAAMvZ,GlB44CtC,GkB14CQ6E,KAAGS,MAAML,GlB24Cf,OkB14CUnF,OAAO8E,KAAKwU,WAAWpW,SAAShD,GACzBoZ,UAAUpZ,GAGd,GlB64Cf,IkB14CUuP,EAAU,ClB24ClBiK,akB14CoBlT,EAAOmT,SlB24C3BC,UkB14CiBpT,EAAOqT,OlBm5C1B,OkBh5CI7Z,OAAO+N,QAAQ0B,GAASrI,QAAQ,SAAA4G,GlB04ClC,IAAIwH,EAAQ7U,eAAeqN,EAAM,GkB14CG9N,EAAgBsV,EAAA,GAAX9U,EAAW8U,EAAA,GAC9CrQ,EAASoT,WAAWpT,EAAQjF,EAAKQ,KAG9ByE,ICnCT2U,QnBq7CN,WACE,SAASA,EmBr7CK1D,GnBs7CZ/P,gBAAgBlD,KAAM2W,GAEtB3W,KmBv7CSwD,QAAUyP,EAAO5P,OAAOuT,QAAQpT,QnBw7CzCxD,KmBv7CSjD,IAAMkW,EAAO5P,OAAOuT,QAAQ7Z,InBw/CvC,OA7DAC,aAAa2Z,EAAS,CAAC,CACrB5Z,IAAK,MACLQ,MAAO,SmBt6CHR,GnBu6CF,ImBt6CO4Z,EAAQ9O,YAAc7H,KAAKwD,QnBu6ChC,OmBt6CW,KnBy6Cb,ImBt6CQqT,EAAQtQ,OAAOuQ,aAAaC,QAAQ/W,KAAKjD,KnBw6CjD,GmBt6CM6E,KAAGS,MAAMwU,GnBu6Cb,OmBt6CW,KnBy6Cb,ImBt6CQG,EAAOzC,KAAKtC,MAAM4E,GnBu6C1B,OmBr6CSjV,KAAGI,OAAOjF,IAAQA,EAAIP,OAASwa,EAAKja,GAAOia,InBu6CrD,CACDja,IAAK,MACLQ,MAAO,SmBt6CHuE,GnBw6CF,GmBt6CO6U,EAAQ9O,WAAc7H,KAAKwD,SAK3B5B,KAAGE,OAAOA,GnBs6CjB,CAKA,ImBt6CM8U,EAAU5W,KAAKgF,MAGfpD,KAAGS,MAAMuU,KACTA,EAAU,IAId5D,OAAO4D,EAAS9U,GAGhByE,OAAOuQ,aAAaG,QAAQjX,KAAKjD,IAAKwX,KAAKC,UAAUoC,QnBs6CvD,CAAC,CACH7Z,IAAK,YACLiI,IAAK,WACH,IACE,KmBl+CU,iBAAkBuB,QnBm+C1B,OmBl+Ca,EnB0+Cf,OmBn+CIA,OAAOuQ,aAAaG,QAJP,UAAA,WAKb1Q,OAAOuQ,aAAaI,WALP,YAON,EACT,MAAO/P,GnBi+CT,OmBh+CW,OnBq+CVwP,EAtET,GoBv7CA,SAAwBQ,MAAMxP,GpBqgD5B,IoBrgDiCyP,EAAuBnS,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAR,OpBsgDhD,OoBrgDS,IAAI6B,QAAQ,SAAC2C,EAAS4N,GpBsgD7B,IACE,IoBrgDYC,EAAU,IAAIC,epBugD1B,KoBpgDY,oBAAqBD,GpBqgD/B,OoBjgDIA,EAAQxP,iBAAiB,OAAQ,WpBqgDrC,GoBpgD6B,SAAjBsP,EpBqgDV,IoBngDc3N,EAAQ8K,KAAKtC,MAAMqF,EAAQE,eAC7B,MAAOrQ,GACLsC,EAAQ6N,EAAQE,mBAGpB/N,EAAQ6N,EAAQG,YAIxBH,EAAQxP,iBAAiB,QAAS,WpBogDtC,MoBngDc,IAAI4P,MAAMJ,EAAQK,UAG5BL,EAAQM,KAAK,MAAOjQ,GAAK,GAGzB2P,EAAQF,aAAeA,EAEvBE,EAAQO,OACV,MAAO1Q,GACLkQ,EAAOlQ,MC7BnB,SAAwB2Q,WAAWnQ,EAAK+E,GrBqiDtC,GqBpiDO9K,KAAGI,OAAO2F,GrBoiDjB,CAIA,IqBniDQoQ,EAAQnW,KAAGI,OAAO0K,GAGlBsL,EAAS,WrBqiDf,OqBriDqD,OAAhCnY,SAASoY,eAAevL,IAEvCwL,EAAS,SAACtO,EAAWuO,GACvBvO,EAAUoM,UAAYmC,EAGlBJ,GAASC,KAKbnY,SAAS6F,KAAK0S,sBAAsB,aAAcxO,IrByiDxD,IqBriDOmO,IAAUC,IAAU,CrBsiDzB,IqBriDUK,EAAa1B,QAAQ9O,UAGrB+B,EAAY/J,SAASoL,cAAc,OrB4iD7C,GqB3iDIrB,EAAUoB,aAAa,SAAU,IAE7B+M,GACAnO,EAAUoB,aAAa,KAAM0B,GAI7B2L,EAAY,CrBqiDlB,IqBpiDYC,EAAS/R,OAAOuQ,aAAaC,QAApB,GAAAvU,OAhCR,QAgCQ,KAAAA,OAAyCkK,IrBuiD9D,GqBtiD4B,OAAX4L,EAEG,CrBqiDlB,IqBpiDcH,EAAO5D,KAAKtC,MAAMqG,GACxBJ,EAAOtO,EAAWuO,EAAKI,UAK/BpB,MAAMxP,GACDkC,KAAK,SAAA2O,GACE5W,KAAGS,MAAMmW,KAITH,GACA9R,OAAOuQ,aAAaG,QAApB,GAAAzU,OAjDD,QAiDC,KAAAA,OACiBkK,GACb6H,KAAKC,UAAU,CACX+D,QAASC,KAKrBN,EAAOtO,EAAW4O,MAErBC,MAAM,gBClEnB,IAAaC,SAAW,SAAAnb,GtBwmDtB,OsBxmD+BkF,KAAKkW,MAAOpb,EAAQ,GAAK,GAAM,GAAI,KACvDqb,WAAa,SAAArb,GtB0mDxB,OsB1mDiCkF,KAAKkW,MAAOpb,EAAQ,GAAM,GAAI,KACpDsb,WAAa,SAAAtb,GtB4mDxB,OsB5mDiCkF,KAAKkW,MAAMpb,EAAQ,GAAI,KAG1D,SAAgBub,atB6mDd,IsB7mDyBC,EAAkD9T,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAA3C,EAAG+T,EAAwC/T,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAAlBgU,EAAkBhU,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GtBknD3E,IsBhnDOrD,KAAGG,OAAOgX,GtBinDf,OsBhnDWD,WAAW,KAAME,EAAcC,GtBonD5C,IsBhnDQhE,EAAS,SAAA1X,GtBinDf,MsBjnDwB,IAAAiF,OAAIjF,GAAQqY,OAAO,IAGvCsD,EAAQR,SAASK,GACfI,EAAOP,WAAWG,GAClBK,EAAOP,WAAWE,GtB2nD1B,OsBvnDMG,EADAF,GAAgBE,EAAQ,EACnB,GAAA1W,OAAM0W,EAAN,KAEG,GtBqnDP,GAAG1W,OsBjnDEyW,GAAYF,EAAO,EAAI,IAAM,IAAvCvW,OAA4C0W,GAA5C1W,OAAoDyS,EAAOkE,GAA3D,KAAA3W,OAAoEyS,EAAOmE,ICC/E,IAAMC,SAAW,CAEbC,WAFa,WvBsnDb,IuBlnDUC,EADM,IAAIvS,IAAIhH,KAAKqD,OAAOmW,QAASjT,OAAOkT,UAC/BC,OAASnT,OAAOkT,SAASC,MAAS/K,QAAQC,OAASrI,OAAOoT,cvBonD/E,MuBlnDW,CACHhS,IAAK3H,KAAKqD,OAAOmW,QACjBD,KAAAA,IAKRK,aAba,WvB+nDb,IAkCE,OAjCA5Z,KuBjnDW2J,SAAS0P,SAAWhM,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUR,SAAStP,SvBmnDpF/J,KuBhnDW2J,SAASmQ,QAAU,CACpBtG,KAAMpG,YAAY5O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQtG,MAC3DuG,MAAO1M,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQC,OAC3DC,QAAS3M,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQE,SAC7DC,OAAQ5M,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQG,QAC5DC,YAAa7M,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQI,aACjEC,KAAM9M,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQK,MAC1D7J,IAAKjD,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQxJ,KACzDI,QAASrD,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQpJ,SAC7D0J,SAAU/M,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQM,UAC9DC,SAAUhN,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQO,UAC9DC,WAAYjN,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUC,QAAQQ,avBmnD1Eta,KuB/mDW2J,SAAS4Q,SAAWlN,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUU,UvBinD3Eva,KuB9mDW2J,SAAS6Q,OAAS,CACnBC,KAAMpN,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUW,OAAOC,MACzDC,OAAQrN,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUW,OAAOE,SvBinDrE1a,KuB7mDW2J,SAASgR,QAAU,CACpBC,OAAQvN,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUc,QAAQC,QAC5DzH,YAAa9F,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUc,QAAQxH,aACjE0H,SAAUxN,WAAW7O,KAAKwB,KAAMA,KAAKqD,OAAOwW,UAAUc,QAAQE,WAI9DjZ,KAAGjC,QAAQK,KAAK2J,SAAS4Q,YvB6mDjCva,KuB5mDa2J,SAASgR,QAAQG,YAAc9a,KAAK2J,SAAS4Q,SAASpX,cAAvB,IAAAX,OAC5BxC,KAAKqD,OAAO6K,WAAW6M,YAI5B,EACT,MAAOC,GvB+mDX,OAHAhb,KuB1mDW6T,MAAMoH,KAAK,kEAAmED,GvB4mDzFhb,KuBzmDWkb,sBAAqB,IAEnB,IAKfC,WApEa,SAoEFjb,EAAMyK,GvBwmDjB,IuBtmDU6O,EAAUH,SAASC,WAAW9a,KAAKwB,MACnCob,EAAQ,GAAA5Y,OAAOgX,EAAQD,KAAqB,GAAdC,EAAQ7R,IAA9B,KAAAnF,OAA0CxC,KAAKqD,OAAOgY,YAG9DC,EAAOzb,SAAS0b,gBALJ,6BAK+B,OACjD7Q,cACI4Q,EACAtI,OAAOrI,EAAY,CACf6Q,KAAM,eACNjO,UAAW,WvBumDvB,IuBlmDUkO,EAAM5b,SAAS0b,gBAfH,6BAe8B,OAC1C7G,EAAI,GAAAlS,OAAM4Y,EAAN,KAAA5Y,OAAkBtC,GvB8mDhC,MuBzmDQ,SAAUub,GACVA,EAAIC,eAAe,+BAAgC,OAAQhH,GAI/D+G,EAAIC,eAAe,+BAAgC,aAAchH,GAGjE4G,EAAK9Q,YAAYiR,GAEVH,GAIXK,YAxGa,SAwGD5e,GvB+lDZ,IuB/lDiB6e,EAAW3W,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,GACdiG,EAAOoL,KAAKtR,IAAIjI,EAAKiD,KAAKqD,QvBmmDpC,OuB7lDW4H,cAAc,OAJFpO,OAAOyG,OAAO,GAAIsY,EAAM,CACvCnP,MAAO,CAACmP,EAAKnP,MAAOzM,KAAKqD,OAAO6K,WAAWtB,QAAQzH,OAAOzE,SAASmb,KAAK,OAGnC3Q,IAI7C4Q,YAnHa,SAmHD5Q,GvB6lDZ,GuB5lDQtJ,KAAGS,MAAM6I,GvB6lDf,OuB5lDa,KvB+lDf,IuB5lDU6Q,EAAQ9Q,cAAc,OAAQ,CAChCwB,MAAOzM,KAAKqD,OAAO6K,WAAW8N,KAAKze,QvBimD3C,OuB9lDIwe,EAAMvR,YACFS,cACI,OACA,CACIwB,MAAOzM,KAAKqD,OAAO6K,WAAW8N,KAAKD,OAEvC7Q,IAID6Q,GAIXE,aA1Ia,SA0IAC,EAAYN,GvBolDzB,IuBnlDUjR,EAAa9N,OAAOyG,OAAO,GAAIsY,GACjC1b,EAAOyV,YAAYuG,GAEjB5f,EAAQ,CACVqD,QAAS,SACTmE,QAAQ,EACRqY,MAAO,KACPb,KAAM,KACNc,aAAc,KACdC,YAAa,MvBymDrB,OArBA,CuBjlDK,UAAW,OAAQ,SAASpY,QAAQ,SAAAlH,GAC7BF,OAAO8E,KAAKgJ,GAAY5K,SAAShD,KACjCT,EAAMS,GAAO4N,EAAW5N,UACjB4N,EAAW5N,MAKJ,WAAlBT,EAAMqD,SAAyB9C,OAAO8E,KAAKgJ,GAAY5K,SAAS,UAChE4K,EAAWzK,KAAO,UAIlBrD,OAAO8E,KAAKgJ,GAAY5K,SAAS,SAC5B4K,EAAW8B,MAAM1M,SAASC,KAAKqD,OAAO6K,WAAWoO,WAClD3R,EAAW8B,OAAX,IAAAjK,OAAwBxC,KAAKqD,OAAO6K,WAAWoO,UAGnD3R,EAAW8B,MAAQzM,KAAKqD,OAAO6K,WAAWoO,QAItCJ,GvBilDV,IuBhlDW,OACD5f,EAAMwH,QAAS,EACfxH,EAAM6f,MAAQ,OACd7f,EAAM8f,aAAe,QACrB9f,EAAMgf,KAAO,OACbhf,EAAM+f,YAAc,QvBilD5B,MAEF,IuBhlDW,OACD/f,EAAMwH,QAAS,EACfxH,EAAM6f,MAAQ,OACd7f,EAAM8f,aAAe,SACrB9f,EAAMgf,KAAO,SACbhf,EAAM+f,YAAc,QvBilD5B,MAEF,IuBhlDW,WACD/f,EAAMwH,QAAS,EACfxH,EAAM6f,MAAQ,iBACd7f,EAAM8f,aAAe,kBACrB9f,EAAMgf,KAAO,eACbhf,EAAM+f,YAAc,cvBilD5B,MAEF,IuBhlDW,aACD/f,EAAMwH,QAAS,EACfxH,EAAM6f,MAAQ,kBACd7f,EAAM8f,aAAe,iBACrB9f,EAAMgf,KAAO,mBACbhf,EAAM+f,YAAc,kBvBilD5B,MAEF,IuBhlDW,aACD1R,EAAW8B,OAAX,IAAAjK,OAAwBxC,KAAKqD,OAAO6K,WAAWoO,QAA/C,cACApc,EAAO,OACP5D,EAAM6f,MAAQ,OACd7f,EAAMgf,KAAO,OvBilDrB,MAEF,QuB/kDc1Z,KAAGS,MAAM/F,EAAM6f,SACf7f,EAAM6f,MAAQjc,GAEd0B,KAAGS,MAAM/F,EAAMgf,QACfhf,EAAMgf,KAAOY,GvBslD7B,IuBllDUK,EAAStR,cAAc3O,EAAMqD,SvBsnDvC,OuBnnDQrD,EAAMwH,QAENyY,EAAO/R,YACH6O,SAAS8B,WAAW3c,KAAKwB,KAAM1D,EAAM+f,YAAa,CAC9C5P,MAAO,mBAGf8P,EAAO/R,YACH6O,SAAS8B,WAAW3c,KAAKwB,KAAM1D,EAAMgf,KAAM,CACvC7O,MAAO,uBAKf8P,EAAO/R,YACH6O,SAASsC,YAAYnd,KAAKwB,KAAM1D,EAAM8f,aAAc,CAChD3P,MAAO,oBAGf8P,EAAO/R,YACH6O,SAASsC,YAAYnd,KAAKwB,KAAM1D,EAAM6f,MAAO,CACzC1P,MAAO,0BAIf8P,EAAO/R,YAAY6O,SAAS8B,WAAW3c,KAAKwB,KAAM1D,EAAMgf,OACxDiB,EAAO/R,YAAY6O,SAASsC,YAAYnd,KAAKwB,KAAM1D,EAAM6f,SAI7DnJ,OAAOrI,EAAYoB,0BAA0B/L,KAAKqD,OAAOwW,UAAUC,QAAQ5Z,GAAOyK,IAClFD,cAAc6R,EAAQ5R,GAGT,SAATzK,GACK0B,KAAGO,MAAMnC,KAAK2J,SAASmQ,QAAQ5Z,MvBwkDxCF,KuBvkDa2J,SAASmQ,QAAQ5Z,GAAQ,IvB0kDxCF,KuBvkDW2J,SAASmQ,QAAQ5Z,GAAMf,KAAKod,IvBykDvCvc,KuBvkDW2J,SAASmQ,QAAQ5Z,GAAQqc,EAG3BA,GAIXC,YAjRa,SAiRDtc,EAAMyK,GvBwkDlB,IuBtkDUpK,EAAQ0K,cACV,QACA+H,OACIjH,0BAA0B/L,KAAKqD,OAAOwW,UAAUW,OAAOta,IACvD,CACIA,KAAM,QACNoE,IAAK,EACL5B,IAAK,IACLE,KAAM,IACNrF,MAAO,EACPkf,aAAc,MAEdjB,KAAM,SvBmkDpBkB,auBlkD4BpG,KAAKtR,IAAI9E,EAAMF,KAAKqD,QvBmkDhDsZ,gBuBlkD+B,EvBmkD/BC,gBuBlkD+B,IvBmkD/BC,gBuBlkD+B,GAErBlS,IvBukDZ,OALA3K,KuB9jDS2J,SAAS6Q,OAAOta,GAAQK,EAG7B8Y,SAASyD,gBAAgBte,KAAKwB,KAAMO,GAGpCyC,WAAW+Z,MAAMxc,GAEVA,GAIXyc,eArTa,SAqTE9c,EAAMyK,GvB2jDrB,IuB1jDU4P,EAAWtP,cACb,WACA+H,OACIjH,0BAA0B/L,KAAKqD,OAAOwW,UAAUc,QAAQza,IACxD,CACIoE,IAAK,EACL5B,IAAK,IACLnF,MAAO,EACPie,KAAM,cvBujDpByB,euBtjD6B,GAEnBtS,IvBujDZ,GuBljDiB,WAATzK,EAAmB,CACnBqa,EAAS/P,YAAYS,cAAc,OAAQ,KAAM,MvBmjDvD,IuBjjDYiS,EAAY,CACdC,OAAQ,SACRvC,OAAQ,YACV1a,GACIkd,EAASF,EAAY5G,KAAKtR,IAAIkY,EAAWld,KAAKqD,QAAU,GAE9DkX,EAASpP,UAAT,KAAA3I,OAA0B4a,EAAO3H,evBojDzC,OADAzV,KuBhjDS2J,SAASgR,QAAQza,GAAQqa,EAEvBA,GAIX8C,WAxVa,SAwVFnd,GvB+iDX,IuB9iDUyK,EAAaoB,0BAA0B/L,KAAKqD,OAAOwW,UAAUc,QAAQza,IAErE0J,EAAYqB,cACd,MACA+H,OAAOrI,EAAY,CACf8B,MAAO,GAAAjK,OAAGxC,KAAKqD,OAAO6K,WAAWyM,QAAQ5B,KAAlC,KAAAvW,OAA0CmI,EAAW8B,MAAQ9B,EAAW8B,MAAQ,IAAKL,OvB4iDtGsQ,auB3iDwBpG,KAAKtR,IAAI9E,EAAMF,KAAKqD,UAEtC,SvB6iDR,OADArD,KuBxiDS2J,SAASgR,QAAQza,GAAQ0J,EAEvBA,GAMX0T,sBA7Wa,SA6WSC,EAAUrd,GvBuiDhC,IAAI6D,EAAQ/D,KuBriDRuI,GACIgV,EACA,gBACA,SAAApd,GvBuiDN,GuBriDe,CAAC,GAAI,GAAI,GAAI,IAAIJ,SAASI,EAAMqd,SAKrCrd,EAAM4E,iBACN5E,EAAMsd,kBAGa,YAAftd,EAAMD,MvBoiDpB,CAIA,IuB9hDkB7D,EANFqhB,EAAgBhe,UAAQ6d,EAAU,0BvBsiDlD,IuBniDeG,GAAiB,CAAC,GAAI,IAAI3d,SAASI,EAAMqd,OAC1CnE,SAASsE,cAAcnf,KAAKuF,EAAM7D,GAAM,QAIpB,KAAhBC,EAAMqd,QACc,KAAhBrd,EAAMqd,OAAiBE,GAAiC,KAAhBvd,EAAMqd,OAC9CnhB,EAASkhB,EAASK,mBAEbhc,KAAGjC,QAAQtD,KACZA,EAASkhB,EAASlT,WAAWwT,qBAGjCxhB,EAASkhB,EAASO,uBAEblc,KAAGjC,QAAQtD,KACZA,EAASkhB,EAASlT,WAAW0T,mBAIrChQ,SAASvP,KAAKuF,EAAM1H,GAAQ,OAIxC,GAKJkM,GAAGgV,EAAU,QAAS,SAAApd,GACE,KAAhBA,EAAMqd,OAIVnE,SAAS2E,mBAAmBxf,KAAKuF,EAAM,MAAM,MAKrDka,eA3aa,SAAApT,GvB28Db,IAAInC,EAAS1I,KuBhiDIzC,EAA2DsN,EAA3DtN,MAAO2gB,EAAoDrT,EAApDqT,KAAMhe,EAA8C2K,EAA9C3K,KAAMwW,EAAwC7L,EAAxC6L,MvBsiDhCyH,EAAatT,EuBtiD0BkR,MAAAA,OAAiC,IAAAoC,EAAzB,KAAyBA,EvBwiDxEC,EAAevT,EuBxiDsCwT,QAAAA,OAAmB,IAAAD,GAAAA,EAClEzT,EAAaoB,0BAA0B/L,KAAKqD,OAAOwW,UAAUW,OAAOta,IAEpEqd,EAAWtS,cACb,SACA+H,OAAOrI,EAAY,CACfzK,KAAM,SACNsb,KAAM,gBACN/O,MAAO,GAAAjK,OAAGxC,KAAKqD,OAAO6K,WAAWoO,QAA1B,KAAA9Z,OAAqCmI,EAAW8B,MAAQ9B,EAAW8B,MAAQ,IAAKL,OvBuiDjGkS,euBtiD0BD,EAChB9gB,MAAAA,KAIFghB,EAAOtT,cAAc,QAG3BsT,EAAKvI,UAAYU,EAEb9U,KAAGjC,QAAQoc,IACXwC,EAAK/T,YAAYuR,GAGrBwB,EAAS/S,YAAY+T,GAGrB1hB,OAAOC,eAAeygB,EAAU,UAAW,CACvC7gB,YAAY,EACZsI,IAFuC,WvBqiD3C,MuBliDyD,SAA1CuY,EAAShZ,aAAa,iBAEjCL,IALuC,SAKnCma,GAEIA,GACApgB,MAAMQ,KAAK8e,EAASlT,WAAWmU,UAC1BrZ,OAAO,SAAAK,GvBkiDpB,OuBliD4B9F,UAAQ8F,EAAM,4BAC7BvB,QAAQ,SAAAuB,GvBmiDrB,OuBniD6BA,EAAKwF,aAAa,eAAgB,WAG3DuS,EAASvS,aAAa,eAAgBqT,EAAU,OAAS,YvBuiDrEre,KuBniDS6D,UAAU4a,KACXlB,EACA,cACA,SAAApd,GvBiiDN,IuBhiDcyB,KAAG2F,cAAcpH,IAA0B,KAAhBA,EAAMqd,MvBgiD/C,CAQA,OuBpiDUrd,EAAM4E,iBACN5E,EAAMsd,kBAENF,EAASc,SAAU,EAEXne,GvBgiDhB,IuB/hDiB,WACDwI,EAAKgW,aAAe5d,OAAOvD,GvBgiDzC,MAEF,IuB/hDiB,UACDmL,EAAKgL,QAAUnW,EvBgiD7B,MAEF,IuB/hDiB,QACDmL,EAAKiW,MAAQ7b,WAAWvF,GAOhC8b,SAASsE,cAAcnf,KAAKkK,EAAM,OAAQ9G,KAAG2F,cAAcpH,MAE/DD,GACA,GAGJmZ,SAASiE,sBAAsB9e,KAAKwB,KAAMud,EAAUrd,GAEpDge,EAAK1T,YAAY+S,IAIrBzE,WAhgBa,WvB0hEb,IuB1hDWC,EAA4B9T,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAArB,EAAGgU,EAAkBhU,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GvB8hDvC,OuB5hDSrD,KAAGG,OAAOgX,GAORD,WAAWC,EAFCL,SAAS1Y,KAAK6a,UAAY,EAET5B,GANzBF,GAUf6F,kBA7gBa,WvBwiEb,IuB3hDkBviB,EAA2C4I,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAlC,KAAM8T,EAA4B9T,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAArB,EAAGgU,EAAkBhU,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAEpDrD,KAAGjC,QAAQtD,IAAYuF,KAAGG,OAAOgX,KAKtC1c,EAAO8O,UAAYkO,SAASP,WAAWC,EAAME,KAIjD4F,aAxhBa,WAyhBJ7e,KAAK6H,UAAUuI,KAKhBxO,KAAGjC,QAAQK,KAAK2J,SAAS6Q,OAAOE,SAChCrB,SAASyF,SAAStgB,KAAKwB,KAAMA,KAAK2J,SAAS6Q,OAAOE,OAAQ1a,KAAK+e,MAAQ,EAAI/e,KAAK0a,QAIhF9Y,KAAGjC,QAAQK,KAAK2J,SAASmQ,QAAQK,QvB8hDvCna,KuB7hDW2J,SAASmQ,QAAQK,KAAK6E,QAAUhf,KAAK+e,OAAyB,IAAhB/e,KAAK0a,UAKhEoE,SAziBa,SAyiBJziB,GvB6hDT,IuB7hDiBkB,EAAW0H,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAH,EAChBrD,KAAGjC,QAAQtD,KAKhBA,EAAOkB,MAAQA,EAGf8b,SAASyD,gBAAgBte,KAAKwB,KAAM3D,KAIxC4iB,eAtjBa,SAsjBE9e,GvB6hDf,IAAIqJ,EAASxJ,KAEb,GuB9hDSA,KAAK6H,UAAUuI,IAAOxO,KAAGzB,MAAMA,GvB8hDxC,CAIA,IuB9hDQ5C,EAAQ,EvB+iDhB,GuB7hDQ4C,EvB8hDN,OuB7hDcA,EAAMD,MvB+hDlB,IuB7hDa,avB8hDb,IuB7hDa,UvB8hDb,IuB7hDa,SACD3C,EAAQ2X,cAAclV,KAAKmT,YAAanT,KAAK6a,UAG1B,eAAf1a,EAAMD,MACNmZ,SAASyF,SAAStgB,KAAKwB,KAAMA,KAAK2J,SAAS6Q,OAAOC,KAAMld,GvB+hDtE,MAGF,IuB5hDa,UvB6hDb,IuB5hDa,YAjCO,SAAClB,EAAQkE,GvB+hD/B,IuB9hDYhD,EAAQqE,KAAGG,OAAOxB,GAASA,EAAQ,EACnCga,EAAW3Y,KAAGjC,QAAQtD,GAAUA,EAASmN,EAAKG,SAASgR,QAAQC,OvBgiD3E,GuB7hDUhZ,KAAGjC,QAAQ4a,GAAW,CACtBA,EAAShd,MAAQA,EvB+hDzB,IuB5hDc4e,EAAQ5B,EAAS2E,qBAAqB,QAAQ,GAChDtd,KAAGjC,QAAQwc,KACXA,EAAM1Q,WAAW,GAAG0T,UAAY5hB,IAuBhC6hB,CAAYpf,KAAK2J,SAASgR,QAAQC,OAAwB,IAAhB5a,KAAKqf,aAW/DvC,gBA1mBa,SA0mBGzgB,GvB4hDhB,IuB1hDU6U,EAAQtP,KAAGzB,MAAM9D,GAAUA,EAAOA,OAASA,EvB4hDrD,GuBzhDSuF,KAAGjC,QAAQuR,IAAyC,UAA/BA,EAAM3M,aAAa,QvByhDjD,CAKA,GuBzhDQ7E,UAAQwR,EAAOlR,KAAKqD,OAAOwW,UAAUW,OAAOC,MAAO,CACnDvJ,EAAMlG,aAAa,gBAAiBhL,KAAKmT,avB0hD/C,IuBzhDYA,EAAckG,SAASP,WAAW9Y,KAAKmT,aACvC0H,EAAWxB,SAASP,WAAW9Y,KAAK6a,UACpC5F,EAASqB,KAAKtR,IAAI,YAAahF,KAAKqD,QAC1C6N,EAAMlG,aACF,iBACAiK,EAAO3I,QAAQ,gBAAiB6G,GAAa7G,QAAQ,aAAcuO,SAEpE,GAAInb,UAAQwR,EAAOlR,KAAKqD,OAAOwW,UAAUW,OAAOE,QAAS,CvBuhDlE,IuBthDYvW,EAAwB,IAAd+M,EAAM3T,MACtB2T,EAAMlG,aAAa,gBAAiB7G,GACpC+M,EAAMlG,aAAa,iBAAnB,GAAAxI,OAAwC2B,EAAQpB,QAAQ,GAAxD,WAEAmO,EAAMlG,aAAa,gBAAiBkG,EAAM3T,OAIzCoR,QAAQM,UAKbiC,EAAMzN,MAAM6b,YAAY,UAAxB,GAAA9c,OAAuC0O,EAAM3T,MAAQ2T,EAAMxO,IAAO,IAAlE,QAIJ6c,kBA/oBa,SA+oBKpf,GvBshDlB,IAAIqf,EAASxf,KAGb,GuBthDSA,KAAKqD,OAAOoc,SAAShF,MACrB7Y,KAAGjC,QAAQK,KAAK2J,SAAS6Q,OAAOC,OAChC7Y,KAAGjC,QAAQK,KAAK2J,SAASgR,QAAQG,cAChB,IAAlB9a,KAAK6a,SvBmhDb,CAKA,IuBlhDQ1W,EAAU,EACRM,EAAazE,KAAK2J,SAAS4Q,SAAS7V,wBACpCgb,EAAO,GAAAld,OAAMxC,KAAKqD,OAAO6K,WAAW6M,QAA7B,aAEPjX,EAAS,SAAAA,GACXiJ,YAAYyS,EAAK7V,SAASgR,QAAQG,YAAa4E,EAAS5b,IvBshDhE,GuBlhDQ9D,KAAKoE,MACLN,GAAO,OvBihDf,CAMA,GuBlhDQlC,KAAGzB,MAAMA,GACTgE,EAAW,IAAMM,EAAWE,OAAUxE,EAAMwf,MAAQlb,EAAWI,UAC5D,CAAA,IAAIsI,SAASnN,KAAK2J,SAASgR,QAAQG,YAAa4E,GvBqhDzD,OuBphDMvb,EAAUrB,WAAW9C,KAAK2J,SAASgR,QAAQG,YAAYrX,MAAMoB,KAAM,IAMnEV,EAAU,EACVA,EAAU,EACHA,EAAU,MACjBA,EAAU,KAIdkV,SAASuF,kBAAkBpgB,KAAKwB,KAAMA,KAAK2J,SAASgR,QAAQG,YAAc9a,KAAK6a,SAAW,IAAO1W,GvBohDrGnE,KuBjhDS2J,SAASgR,QAAQG,YAAYrX,MAAMoB,KAAxC,GAAArC,OAAkD2B,EAAlD,KAIIvC,KAAGzB,MAAMA,IAAU,CAAC,aAAc,cAAcJ,SAASI,EAAMD,OAC/D4D,EAAsB,eAAf3D,EAAMD,SAKrB0f,WAvsBa,SAusBFzf,GvBihDX,IuB/gDU0f,GAAUje,KAAGjC,QAAQK,KAAK2J,SAASgR,QAAQE,WAAa7a,KAAKqD,OAAOyc,WAG1EzG,SAASuF,kBAAkBpgB,KACvBwB,KACAA,KAAK2J,SAASgR,QAAQxH,YACtB0M,EAAS7f,KAAK6a,SAAW7a,KAAKmT,YAAcnT,KAAKmT,YACjD0M,GAIA1f,GAAwB,eAAfA,EAAMD,MAAyBF,KAAK+Q,MAAMgP,SAKvD1G,SAAS4F,eAAezgB,KAAKwB,KAAMG,IAIvC6f,eA7tBa,WvBsuEb,GuBvgDShgB,KAAK6H,UAAUuI,KAAQpQ,KAAKqD,OAAOyc,aAAc9f,KAAKmT,avBugD/D,CAQA,GuBvgDQnT,KAAK6a,UAALpY,KAAAwd,IAAiB,EAAK,IvB0gD5B,OuBzgDMtT,aAAa3M,KAAK2J,SAASgR,QAAQxH,aAAa,QAChDxG,aAAa3M,KAAK2J,SAAS4Q,UAAU,GAKrC3Y,KAAGjC,QAAQK,KAAK2J,SAAS6Q,OAAOC,OvBwgDtCza,KuBvgDW2J,SAAS6Q,OAAOC,KAAKzP,aAAa,gBAAiBhL,KAAK6a,UvB2gDrE,IuBvgDUqF,EAActe,KAAGjC,QAAQK,KAAK2J,SAASgR,QAAQE,WAGhDqF,GAAelgB,KAAKqD,OAAO8c,iBAAmBngB,KAAKoT,QACpDiG,SAASuF,kBAAkBpgB,KAAKwB,KAAMA,KAAK2J,SAASgR,QAAQxH,YAAanT,KAAK6a,UAI9EqF,GACA7G,SAASuF,kBAAkBpgB,KAAKwB,KAAMA,KAAK2J,SAASgR,QAAQE,SAAU7a,KAAK6a,UAI/ExB,SAASkG,kBAAkB/gB,KAAKwB,QAIpCogB,iBApwBa,SAowBIC,EAASvc,GACtB6I,aAAa3M,KAAK2J,SAASyQ,SAASN,QAAQuG,IAAWvc,IAI3Dwc,cAzwBa,SAywBCD,EAASzW,EAAWrJ,GvBqgDlC,IuBpgDUggB,EAAOvgB,KAAK2J,SAASyQ,SAASoG,OAAOH,GACvC9iB,EAAQ,KACR2gB,EAAOtU,EvBsgDf,GuBpgDoB,aAAZyW,EACA9iB,EAAQyC,KAAK0e,iBACV,CvB4gDT,GuB3gDMnhB,EAASqE,KAAGS,MAAM9B,GAAiBP,KAAKqgB,GAAb9f,EAGvBqB,KAAGS,MAAM9E,KACTA,EAAQyC,KAAKqD,OAAOgd,GAASI,UAI5B7e,KAAGS,MAAMrC,KAAKiD,QAAQod,MAAcrgB,KAAKiD,QAAQod,GAAStgB,SAASxC,GvBqgD5E,YADAyC,KuBngDa6T,MAAMoH,KAAX,yBAAAzY,OAAyCjF,EAAzC,UAAAiF,OAAuD6d,IvBwgDjE,IuBngDWrgB,KAAKqD,OAAOgd,GAASpd,QAAQlD,SAASxC,GvBqgD/C,YADAyC,KuBngDa6T,MAAMoH,KAAX,sBAAAzY,OAAsCjF,EAAtC,UAAAiF,OAAoD6d,IvB8gDhE,GuBxgDSze,KAAGjC,QAAQue,KACZA,EAAOqC,GAAQA,EAAKpd,cAAc,kBAIjCvB,KAAGjC,QAAQue,GvBmgDpB,CuB9/CkBle,KAAK2J,SAASyQ,SAASN,QAAQuG,GAASld,cAAxC,IAAAX,OAA0DxC,KAAKqD,OAAO6K,WAAW8N,KAAKze,QAC9FyY,UAAYqD,SAASqH,SAASliB,KAAKwB,KAAMqgB,EAAS9iB,GvBqgD5D,IuBlgDUlB,EAAS6hB,GAAQA,EAAK/a,cAAL,WAAAX,OAA8BjF,EAA9B,OAEnBqE,KAAGjC,QAAQtD,KACXA,EAAOgiB,SAAU,KAKzBqC,SA5zBa,SA4zBJL,EAAS9iB,GvBkgDlB,OuBjgDY8iB,GvBkgDV,IuBjgDW,QvBkgDT,OuBjgDyB,IAAV9iB,EAAc+Y,KAAKtR,IAAI,SAAUhF,KAAKqD,QAAtC,GAAAb,OAAmDjF,EAAnD,WvBmgDjB,IuBjgDW,UvBkgDT,GuBjgDYqE,KAAGG,OAAOxE,GAAQ,CvBkgD5B,IuBjgDgB4e,EAAQ7F,KAAKtR,IAAL,gBAAAxC,OAAyBjF,GAASyC,KAAKqD,QvBmgD/D,OuBjgDe8Y,EAAM3f,OAIJ2f,EvB8/CR,GAAG3Z,OuBjgDYjF,EAAV,KvBugDhB,OuBjgDe+X,YAAY/X,GvBmgD7B,IuBjgDW,WvBkgDT,OuBjgDe8c,SAASqG,SAASliB,KAAKwB,MvBmgDxC,QACE,OuBjgDe,OAKnB2gB,eAv1Ba,SAu1BE1d,GvBigDf,IAAI2d,EAAS5gB,KAGb,GuBlgDS4B,KAAGjC,QAAQK,KAAK2J,SAASyQ,SAASoG,OAAO9M,SvBkgDlD,CAIA,IuBjgDUwK,EAAOle,KAAK2J,SAASyQ,SAASoG,OAAO9M,QAAQvQ,cAAc,iBAG7DvB,KAAGO,MAAMc,KvBkgDfjD,KuBjgDWiD,QAAQyQ,QAAUK,OAAO9Q,GAASkC,OAAO,SAAAuO,GvBkgDlD,OuBlgD6DkN,EAAKvd,OAAOqQ,QAAQzQ,QAAQlD,SAAS2T,MvBugDtG,IuBngDU5P,GAAUlC,KAAGS,MAAMrC,KAAKiD,QAAQyQ,UAAY1T,KAAKiD,QAAQyQ,QAAQlX,OAAS,EvB0gDpF,GuBzgDI6c,SAAS+G,iBAAiB5hB,KAAKwB,KAVlB,UAU8B8D,GAG3C0H,aAAa0S,GAGb7E,SAASwH,UAAUriB,KAAKwB,MAGnB8D,EvBggDT,CAKA,IuBhgDUgd,EAAW,SAAApN,GvBigDnB,IuBhgDYyI,EAAQ7F,KAAKtR,IAAL,gBAAAxC,OAAyBkR,GAAWkN,EAAKvd,QvBkgD7D,OuBhgDW8Y,EAAM3f,OAIJ6c,SAASyC,YAAYtd,KAAKoiB,EAAMzE,GAH5B,MvBugDnBnc,KuBhgDSiD,QAAQyQ,QACRqN,KAAK,SAACC,EAAGC,GvBggDhB,IuB//CgBC,EAAUN,EAAKvd,OAAOqQ,QAAQzQ,QvBggD9C,OuB//CiBie,EAAQlN,QAAQgN,GAAKE,EAAQlN,QAAQiN,GAAK,GAAK,IAEzDhd,QAAQ,SAAAyP,GACL2F,SAAS4E,eAAezf,KAAKoiB,EAAM,CAC/BrjB,MAAOmW,EACPwK,KAAAA,EACAhe,KA5CC,UA6CDwW,MAAO2C,SAASqH,SAASliB,KAAKoiB,EAAM,UAAWlN,GAC/CqI,MAAO+E,EAASpN,OAI5B2F,SAASiH,cAAc9hB,KAAKwB,KAlDf,UAkD2Bke,MAmD5CiD,gBAl8Ba,WvBs7Eb,IAAIC,EAASphB,KAGb,GuBr/CS4B,KAAGjC,QAAQK,KAAK2J,SAASyQ,SAASoG,OAAOnG,UvBq/ClD,CAKA,IuBp/CU6D,EAAOle,KAAK2J,SAASyQ,SAASoG,OAAOnG,SAASlX,cAAc,iBAC5Dke,EAAShH,SAASiH,UAAU9iB,KAAKwB,MACjC8D,EAASpD,QAAQ2gB,EAAO7kB,QvB6/ClC,GuB1/CI6c,SAAS+G,iBAAiB5hB,KAAKwB,KANlB,WAM8B8D,GAG3C0H,aAAa0S,GAGb7E,SAASwH,UAAUriB,KAAKwB,MAGnB8D,EvBi/CT,CAKA,IuBj/CUb,EAAUoe,EAAOxb,IAAI,SAAC4B,EAAOlK,GvBk/CrC,MuBl/CgD,CAC1CA,MAAAA,EACA8gB,QAAS+C,EAAK/G,SAASkH,SAAWH,EAAK1C,eAAiBnhB,EACxDmZ,MAAO2D,SAASqG,SAASliB,KAAK4iB,EAAM3Z,GACpCsU,MAAOtU,EAAM+Z,UAAYnI,SAASyC,YAAYtd,KAAK4iB,EAAM3Z,EAAM+Z,SAASjM,eACxE2I,KAAAA,EACAhe,KAAM,cAIV+C,EAAQwe,QAAQ,CACZlkB,OAAQ,EACR8gB,SAAUre,KAAKqa,SAASkH,QACxB7K,MAAOJ,KAAKtR,IAAI,WAAYhF,KAAKqD,QACjC6a,KAAAA,EACAhe,KAAM,aAIV+C,EAAQgB,QAAQoV,SAAS4E,eAAeQ,KAAKze,OAE7CqZ,SAASiH,cAAc9hB,KAAKwB,KAzCf,WAyC2Bke,MAI5CwD,aAt/Ba,SAs/BAze,GvBg/Cb,IAAI0e,EAAS3hB,KAGb,GuBj/CS4B,KAAGjC,QAAQK,KAAK2J,SAASyQ,SAASoG,OAAO7B,OvBi/ClD,CAIA,IuBh/CUT,EAAOle,KAAK2J,SAASyQ,SAASoG,OAAO7B,MAAMxb,cAAc,iBAG3DvB,KAAGO,MAAMc,GvBi/CfjD,KuBh/CWiD,QAAQ0b,MAAQ1b,GACdjD,KAAK8Q,SAAW9Q,KAAKwS,WvBi/ClCxS,KuBh/CWiD,QAAQ0b,MAAQ,CAAC,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,IvBo/C7D3e,KuBh/CSiD,QAAQ0b,MAAQ3e,KAAKiD,QAAQ0b,MAAMxZ,OAAO,SAAAwZ,GvBi/CjD,OuBj/C0DgD,EAAKte,OAAOsb,MAAM1b,QAAQlD,SAAS4e,KvBo/C/F,IuBj/CU7a,GAAUlC,KAAGS,MAAMrC,KAAKiD,QAAQ0b,QAAU3e,KAAKiD,QAAQ0b,MAAMniB,OAAS,EAC5E6c,SAAS+G,iBAAiB5hB,KAAKwB,KAflB,QAe8B8D,GAG3C0H,aAAa0S,GAGb7E,SAASwH,UAAUriB,KAAKwB,MAGnB8D,IvBm/CT9D,KuB9+CSiD,QAAQ0b,MAAM1a,QAAQ,SAAA0a,GACvBtF,SAAS4E,eAAezf,KAAKmjB,EAAM,CAC/BpkB,MAAOohB,EACPT,KAAAA,EACAhe,KAjCK,QAkCLwW,MAAO2C,SAASqH,SAASliB,KAAKmjB,EAAM,QAAShD,OAIrDtF,SAASiH,cAAc9hB,KAAKwB,KAtCf,QAsC2Bke,MAI5C2C,UAtiCa,WvBmhFb,IuB5+CY/G,EAAY9Z,KAAK2J,SAASyQ,SAA1BN,QACF4F,GAAW9d,KAAGS,MAAMyX,IAAYjd,OAAO+kB,OAAO9H,GAAS+H,KAAK,SAAAtF,GvB6+CpE,OuB7+C+EA,EAAO3P,SAEpFD,aAAa3M,KAAK2J,SAASyQ,SAAS4B,MAAO0D,IAI/C1B,mBA9iCa,SA8iCMuC,GvB6+CnB,IuB7+CyBvS,EAAkB/I,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GvB++C3C,IuB9+CQjF,KAAK2J,SAASyQ,SAAS0H,MAAMlV,OvB8+CrC,CAIA,IuB9+CQvQ,EAASkkB,EAER3e,KAAGjC,QAAQtD,KACZA,EAASQ,OAAO+kB,OAAO5hB,KAAK2J,SAASyQ,SAASoG,QAAQhS,KAAK,SAAA+R,GvB++C/D,OuB/+CwEA,EAAK3T,UvBm/CjF,IuBh/CUmV,EAAY1lB,EAAO8G,cAAc,sBAEvC4K,SAASvP,KAAKwB,KAAM+hB,EAAW/T,KAInCgU,WA/jCa,SA+jCFzhB,GvB++CX,IuB9+CYuhB,EAAU9hB,KAAK2J,SAASyQ,SAAxB0H,MACFvF,EAASvc,KAAK2J,SAASmQ,QAAQM,SvBg/CzC,GuB7+CSxY,KAAGjC,QAAQmiB,IAAWlgB,KAAGjC,QAAQ4c,GvB6+C1C,CAKA,IuB7+CY3P,EAAWkV,EAAXlV,OACJqV,EAAOrV,EvB++Cf,GuB7+CQhL,KAAGK,QAAQ1B,GACX0hB,EAAO1hB,OACJ,GAAIqB,KAAG2F,cAAchH,IAA0B,KAAhBA,EAAMid,MACxCyE,GAAO,OACJ,GAAIrgB,KAAGzB,MAAMI,GAAQ,CvB8+C9B,IuB7+CY2hB,EAAaJ,EAAM5U,SAAS3M,EAAMlE,QvBi/C9C,GuB5+CU6lB,IAAgBA,GAAc3hB,EAAMlE,SAAWkgB,GAAU0F,EvB6+CjE,OuBv+CA1F,EAAOvR,aAAa,gBAAiBiX,GAGrCtV,aAAamV,GAAQG,GAGrBlV,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAW8N,KAAKpE,KAAMqK,GAGnEA,GAAQrgB,KAAG2F,cAAchH,GACzB8Y,SAAS2E,mBAAmBxf,KAAKwB,KAAM,MAAM,GACrCiiB,GAASrV,GAEjBmB,SAASvP,KAAKwB,KAAMuc,EAAQ3a,KAAG2F,cAAchH,MAKrD4hB,YA9mCa,SA8mCDC,GvBy+CZ,IuBx+CUC,EAAQD,EAAIjY,WAAU,GAC5BkY,EAAM5e,MAAM6e,SAAW,WACvBD,EAAM5e,MAAM8e,QAAU,EACtBF,EAAMvV,gBAAgB,UAGtBsV,EAAI/X,WAAWG,YAAY6X,GvBy+C/B,IuBt+CU1d,EAAQ0d,EAAMG,YACd7Q,EAAS0Q,EAAMI,avBy+CzB,OuBt+CInX,cAAc+W,GAEP,CACH1d,MAAAA,EACAgN,OAAAA,IAKRgM,cAroCa,WvBymFb,IAAI+E,EAAS1iB,KuBp+CCE,EAA6B+E,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAtB,GAAI+I,EAAkB/I,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GACjC5I,EAASwD,SAASoY,eAAT,iBAAAzV,OAAyCxC,KAAK0M,GAA9C,KAAAlK,OAAoDtC,IvBy+CvE,GuBt+CS0B,KAAGjC,QAAQtD,GvBs+CpB,CAKA,IuBt+CUuN,EAAYvN,EAAOgO,WACnB8K,EAAUlX,MAAMQ,KAAKmL,EAAU4U,UAAUhQ,KAAK,SAAAhJ,GvBu+CtD,OuBv+C+DA,EAAKoH,SvB0+CtE,GuBv+CQgD,QAAQuB,cAAgBvB,QAAQwB,cAAe,CAE/CxH,EAAUnG,MAAMkB,MAAhB,GAAAnC,OAA2B2S,EAAQqN,YAAnC,MACA5Y,EAAUnG,MAAMkO,OAAhB,GAAAnP,OAA4B2S,EAAQsN,aAApC,MvBy+CN,IuBt+CYE,EAAOtJ,SAAS8I,YAAY3jB,KAAKwB,KAAM3D,GAkB7CkM,GAAG/J,KAAKwB,KAAM4J,EAAWuE,mBAfT,SAAVyU,EAAUziB,GAERA,EAAM9D,SAAWuN,GAAc,CAAC,QAAS,UAAU7J,SAASI,EAAM0iB,gBAKtEjZ,EAAUnG,MAAMkB,MAAQ,GACxBiF,EAAUnG,MAAMkO,OAAS,GAGzBnJ,IAAIhK,KAAKkkB,EAAM9Y,EAAWuE,mBAAoByU,MAOlDhZ,EAAUnG,MAAMkB,MAAhB,GAAAnC,OAA2BmgB,EAAKhe,MAAhC,MACAiF,EAAUnG,MAAMkO,OAAhB,GAAAnP,OAA4BmgB,EAAKhR,OAAjC,MAIJhF,aAAawI,GAAS,GAGtBxI,aAAatQ,GAAQ,GAGrBgd,SAAS2E,mBAAmBxf,KAAKwB,KAAM3D,EAAQ2R,KAInD8U,gBA5rCa,WvB6pFb,IuBh+CUvG,EAASvc,KAAK2J,SAASmQ,QAAQiJ,SAGhCnhB,KAAGjC,QAAQ4c,IAKhBA,EAAOvR,aAAa,OAAQhL,KAAK+iB,WAKrCC,OA1sCa,SA0sCN7K,GvB+9CP,IAAI8K,EAASjjB,KuB79CH4J,EAAYqB,cAAc,MAAOc,0BAA0B/L,KAAKqD,OAAOwW,UAAUR,SAAStP,UvBs/CpG,GuBn/CQ/J,KAAKqD,OAAOgW,SAAStZ,SAAS,YAC9B6J,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,YAIvDA,KAAKqD,OAAOgW,SAAStZ,SAAS,WAC9B6J,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,WAIvDA,KAAKqD,OAAOgW,SAAStZ,SAAS,SAC9B6J,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,SAIvDA,KAAKqD,OAAOgW,SAAStZ,SAAS,iBAC9B6J,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,iBAIvDA,KAAKqD,OAAOgW,SAAStZ,SAAS,YAAa,CvBg+CjD,IuB/9CYwa,EAAWtP,cAAc,MAAOc,0BAA0B/L,KAAKqD,OAAOwW,UAAUU,WvBw+C5F,GuBr+CMA,EAAS/P,YACL6O,SAASmD,YAAYhe,KAAKwB,KAAM,OAAQ,CACpC0M,GAAE,aAAAlK,OAAe2V,EAAKzL,OAK9B6N,EAAS/P,YAAY6O,SAAS2D,eAAexe,KAAKwB,KAAM,WAKpDA,KAAKqD,OAAOoc,SAAShF,KAAM,CvB09CnC,IuBz9CcM,EAAU9P,cACZ,OACA,CACIwB,MAAOzM,KAAKqD,OAAO6K,WAAW6M,SAElC,SAGJR,EAAS/P,YAAYuQ,GvBq9C7B/a,KuBp9Ca2J,SAASgR,QAAQG,YAAcC,EvBu9C9C/a,KuBp9CW2J,SAAS4Q,SAAWA,EACzB3Q,EAAUY,YAAYxK,KAAK2J,SAAS4Q,UvBk+C5C,GuB99CQva,KAAKqD,OAAOgW,SAAStZ,SAAS,iBAC9B6J,EAAUY,YAAY6O,SAASgE,WAAW7e,KAAKwB,KAAM,gBAIrDA,KAAKqD,OAAOgW,SAAStZ,SAAS,aAC9B6J,EAAUY,YAAY6O,SAASgE,WAAW7e,KAAKwB,KAAM,aAIrDA,KAAKqD,OAAOgW,SAAStZ,SAAS,SAAWC,KAAKqD,OAAOgW,SAAStZ,SAAS,UAAW,CvBq9CxF,IuBp9CY2a,EAASzP,cAAc,MAAO,CAChCwB,MAAO,iBvB49CjB,GuBx9CUzM,KAAKqD,OAAOgW,SAAStZ,SAAS,SAC9B2a,EAAOlQ,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,SAIpDA,KAAKqD,OAAOgW,SAAStZ,SAAS,UAAW,CvBq9CjD,IuBn9Cc4K,EAAa,CACfjI,IAAK,EACLE,KAAM,IACNrF,MAAOyC,KAAKqD,OAAOqX,QAIvBA,EAAOlQ,YACH6O,SAASmD,YAAYhe,KACjBwB,KACA,SACAgT,OAAOrI,EAAY,CACf+B,GAAE,eAAAlK,OAAiB2V,EAAKzL,QvBg9C5C1M,KuB38Ca2J,SAAS+Q,OAASA,EAG3B9Q,EAAUY,YAAYkQ,GvBo9C9B,GuBh9CQ1a,KAAKqD,OAAOgW,SAAStZ,SAAS,aAC9B6J,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,aAIvDA,KAAKqD,OAAOgW,SAAStZ,SAAS,cAAgB6B,KAAGS,MAAMrC,KAAKqD,OAAO+W,UAAW,CvB48CpF,IuB38CYkC,EAAUrR,cAAc,MAAO,CACjCwB,MAAO,aACPG,OAAQ,KAGZ0P,EAAQ9R,YACJ6O,SAAS4C,aAAazd,KAAKwB,KAAM,WAAY,CvB08CrDkjB,iBuBz8C6B,EvB08C7BC,gBAAiB,iBAAiB3gB,OuBz8CY2V,EAAKzL,IvB08CnD0W,iBuBz8C6B,KvB28C/B,IuBv8CYtB,EAAQ7W,cAAc,MAAO,CAC/BwB,MAAO,wBACPC,GAAE,iBAAAlK,OAAmB2V,EAAKzL,IAC1BE,OAAQ,KAGNyW,EAAQpY,cAAc,OAEtBqY,EAAOrY,cAAc,MAAO,CAC9ByB,GAAE,iBAAAlK,OAAmB2V,EAAKzL,GAAxB,WAIAsP,EAAO/Q,cAAc,MAAO,CAC9BuQ,KAAM,SAGV8H,EAAK9Y,YAAYwR,GACjBqH,EAAM7Y,YAAY8Y,GvBo8CxBtjB,KuBn8CW2J,SAASyQ,SAASoG,OAAO8C,KAAOA,EvBq8C3CtjB,KuBl8CWqD,OAAO+W,SAASnW,QAAQ,SAAA/D,GvBo8CjC,IuBl8Ccqd,EAAWtS,cACb,SACA+H,OAAOjH,0BAA0BkX,EAAK5f,OAAOwW,UAAUC,QAAQM,UAAW,CACtEla,KAAM,SACNuM,MAAK,GAAAjK,OAAKygB,EAAK5f,OAAO6K,WAAWoO,QAA5B,KAAA9Z,OAAuCygB,EAAK5f,OAAO6K,WAAWoO,QAA9D,aACLd,KAAM,WvBi8CpB0H,iBuBh8C+B,EACjBtW,OAAQ,MAKhByM,SAASiE,sBAAsB9e,KAAKykB,EAAM1F,EAAUrd,GAGpDqI,GAAGgV,EAAU,QAAS,WAClBlE,SAASsE,cAAcnf,KAAKykB,EAAM/iB,GAAM,KvB+7CpD,IuB57Ccqe,EAAOtT,cAAc,OAAQ,KAAMqL,KAAKtR,IAAI9E,EAAM+iB,EAAK5f,SAEvD9F,EAAQ0N,cAAc,OAAQ,CAChCwB,MAAOwW,EAAK5f,OAAO6K,WAAW8N,KAAKze,QAIvCA,EAAMyY,UAAYmC,EAAKjY,GAEvBqe,EAAK/T,YAAYjN,GACjBggB,EAAS/S,YAAY+T,GACrBvC,EAAKxR,YAAY+S,GvB27CzB,IuBx7CcgD,EAAOtV,cAAc,MAAO,CAC9ByB,GAAE,iBAAAlK,OAAmB2V,EAAKzL,GAAxB,KAAAlK,OAA8BtC,GAChC0M,OAAQ,KAIN2W,EAAatY,cAAc,SAAU,CACvC/K,KAAM,SACNuM,MAAK,GAAAjK,OAAKygB,EAAK5f,OAAO6K,WAAWoO,QAA5B,KAAA9Z,OAAuCygB,EAAK5f,OAAO6K,WAAWoO,QAA9D,YAITiH,EAAW/Y,YACPS,cACI,OACA,CvBo7CdgS,euBn7CiC,GAEnB3G,KAAKtR,IAAI9E,EAAM+iB,EAAK5f,UAK5BkgB,EAAW/Y,YACPS,cACI,OACA,CACIwB,MAAOwW,EAAK5f,OAAO6K,WAAWtB,QAElC0J,KAAKtR,IAAI,WAAYie,EAAK5f,UAKlCkF,GACIgY,EACA,UACA,SAAApgB,GAEwB,KAAhBA,EAAMqd,QAKVrd,EAAM4E,iBACN5E,EAAMsd,kBAGNpE,SAASsE,cAAcnf,KAAKykB,EAAM,QAAQ,MAE9C,GAIJ1a,GAAGgb,EAAY,QAAS,WACpBlK,SAASsE,cAAcnf,KAAKykB,EAAM,QAAQ,KAI9C1C,EAAK/V,YAAY+Y,GAGjBhD,EAAK/V,YACDS,cAAc,MAAO,CACjBuQ,KAAM,UAId6H,EAAM7Y,YAAY+V,GAElB0C,EAAKtZ,SAASyQ,SAASN,QAAQ5Z,GAAQqd,EACvC0F,EAAKtZ,SAASyQ,SAASoG,OAAOtgB,GAAQqgB,IAG1CuB,EAAMtX,YAAY6Y,GAClB/G,EAAQ9R,YAAYsX,GACpBlY,EAAUY,YAAY8R,GvB25C5Btc,KuBz5CW2J,SAASyQ,SAAS0H,MAAQA,EvB05CrC9hB,KuBz5CW2J,SAASyQ,SAAS4B,KAAOM,EvBu6CtC,GuBn6CQtc,KAAKqD,OAAOgW,SAAStZ,SAAS,QAAU6P,QAAQU,KAChD1G,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,QAIvDA,KAAKqD,OAAOgW,SAAStZ,SAAS,YAAc6P,QAAQc,SACpD9G,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,YAIvDA,KAAKqD,OAAOgW,SAAStZ,SAAS,YAAa,CvB05CjD,IuBz5CY4K,EAAa,CACfhL,QAAS,IACT6jB,KAAMxjB,KAAK+iB,SACX1mB,OAAQ,UAGJ0mB,EAAa/iB,KAAKqD,OAAOogB,KAAzBV,UAEHnhB,KAAG+F,IAAIob,IAAa/iB,KAAK0jB,SAC1B1Q,OAAOrI,EAAY,CACf2Q,KAAI,QAAA9Y,OAAUxC,KAAKgQ,UACnBmM,MAAOnc,KAAKgQ,WAIpBpG,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,WAAY2K,IvB46C3E,OuBx6CQ3K,KAAKqD,OAAOgW,SAAStZ,SAAS,eAC9B6J,EAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,eAIvDA,KAAKqD,OAAOgW,SAAStZ,SAAS,evBy5CpCC,KuBx5CW2J,SAASC,UAAUY,YAAY6O,SAAS4C,aAAazd,KAAKwB,KAAM,evB25C7EA,KuBx5CS2J,SAAS0P,SAAWzP,EAGrB5J,KAAK8Q,SACLuI,SAASsH,eAAeniB,KAAKwB,KAAM4S,MAAMG,kBAAkBvU,KAAKwB,OAGpEqZ,SAASqI,aAAaljB,KAAKwB,MAEpB4J,GAIX+Z,OAvgDa,WvB65Fb,IAAIC,EAAU5jB,KAGd,GuBv5CQA,KAAKqD,OAAOyU,WAAY,CvBw5C9B,IuBv5CYwD,EAAOjC,SAASC,WAAW9a,KAAKwB,MAGlCsb,EAAK/B,MACLzB,WAAWwD,EAAK3T,IAAK,evB25CjC3H,KuBt5CS0M,GAAKjK,KAAKsS,MAAsB,IAAhBtS,KAAKuS,UvBw5C9B,IuBr5CQpL,EAAY,KvBs5CpB5J,KuBr5CS2J,SAAS0P,SAAW,KvBu5C7B,IuBp5CU/c,EAAQ,CACVoQ,GAAI1M,KAAK0M,GACTmX,SAAU7jB,KAAKqD,OAAOmT,SACtBE,MAAO1W,KAAKqD,OAAOqT,OAEnBwB,GAAS,EAGTtW,KAAGM,SAASlC,KAAKqD,OAAOgW,YvBo5C9BrZ,KuBn5CWqD,OAAOgW,SAAWrZ,KAAKqD,OAAOgW,SAAS7a,KAAKwB,KAAM1D,IAItD0D,KAAKqD,OAAOgW,WvBo5CnBrZ,KuBn5CWqD,OAAOgW,SAAW,IAGvBzX,KAAGjC,QAAQK,KAAKqD,OAAOgW,WAAazX,KAAGI,OAAOhC,KAAKqD,OAAOgW,UAE1DzP,EAAY5J,KAAKqD,OAAOgW,UAGxBzP,EAAYyP,SAAS2J,OAAOxkB,KAAKwB,KAAM,CACnC0M,GAAI1M,KAAK0M,GACTmX,SAAU7jB,KAAKqD,OAAOmT,SACtBmI,MAAO3e,KAAK2e,MACZjL,QAAS1T,KAAK0T,QACd2G,SAAUA,SAASqG,SAASliB,KAAKwB,QAIrCkY,GAAS,GvBu5CjB,IuB/3CQ7b,EApBEiQ,EAAU,SAAA/L,GvBo5ClB,IuBn5CUiY,EAASjY,EvB25CnB,OuBz5CM1D,OAAO+N,QAAQtO,GAAO2H,QAAQ,SAAAoO,GvBm5ClC,IAAIvH,EAAQtN,eAAe6U,EAAO,GuBn5CEtV,EAAgB+N,EAAA,GAAXvN,EAAWuN,EAAA,GAC5C0N,EAASpD,WAAWoD,EAAD,IAAAhW,OAAazF,EAAb,KAAqBQ,KAGrCib,GvBs7Cf,GuBl7CQN,IACItW,KAAGI,OAAOhC,KAAKqD,OAAOgW,UACtBzP,EAAY0C,EAAQ1C,GACbhI,KAAGjC,QAAQiK,KAClBA,EAAUoM,UAAY1J,EAAQ1C,EAAUoM,aAQ5CpU,KAAGI,OAAOhC,KAAKqD,OAAOwW,UAAUR,SAASzP,aACzCvN,EAASwD,SAASsD,cAAcnD,KAAKqD,OAAOwW,UAAUR,SAASzP,YAI9DhI,KAAGjC,QAAQtD,KACZA,EAAS2D,KAAK2J,SAASC,WAK3BvN,EADqBuF,KAAGjC,QAAQiK,GAAa,wBAA0B,sBAClD,aAAcA,GAG9BhI,KAAGjC,QAAQK,KAAK2J,SAAS0P,WAC1BA,SAASO,aAAapb,KAAKwB,OAI1B4B,KAAGS,MAAMrC,KAAK2J,SAASmQ,SAAU,CvBo5CxC,IuBn5CYgK,EAAc,SAAAvH,GvBo5CxB,IuBn5CclQ,EAAYuX,EAAKvgB,OAAO6K,WAAW6V,eACzClnB,OAAOC,eAAeyf,EAAQ,UAAW,CACrC7f,YAAY,EACZsI,IAFqC,WvBs5C7C,OuBn5CmBmI,SAASoP,EAAQlQ,IAE5BnI,IALqC,WvBy5C7C,IuBp5CY8a,EAAiB/Z,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GACjB8H,YAAYwP,EAAQlQ,EAAW2S,OAM3CniB,OAAO+kB,OAAO5hB,KAAK2J,SAASmQ,SACvB3U,OAAOzE,SACPuD,QAAQ,SAAAsY,GACD3a,KAAGO,MAAMoa,IAAW3a,KAAGQ,SAASma,GAChCte,MAAMQ,KAAK8d,GACNpX,OAAOzE,SACPuD,QAAQ6f,GAEbA,EAAYvH,KvB25ChC,GuBr5CQ5N,QAAQG,QACRL,QAAQpS,GAIR2D,KAAKqD,OAAOoc,SAASpG,SAAU,CvBi5CrC,IAAI2K,EuBh5CoChkB,KAAKqD,OAA/B6K,EADuB8V,EACvB9V,WAAY2L,EADWmK,EACXnK,UACdja,EAAQ,GAAA4C,OAAMqX,EAAUR,SAAStP,QAAzB,KAAAvH,OAAoCqX,EAAUoK,OAA9C,MAAAzhB,OAAyD0L,EAAWtB,QAC5EqX,EAAS7W,YAAY5O,KAAKwB,KAAMJ,GAEtC3B,MAAMQ,KAAKwlB,GAAQhgB,QAAQ,SAAAkY,GACvBpP,YAAYoP,EAAOyH,EAAKvgB,OAAO6K,WAAWtB,QAAQ,GAClDG,YAAYoP,EAAOyH,EAAKvgB,OAAO6K,WAAW6M,SAAS,QCxqDnE,SAAgBmJ,SAAS3jB,GxBskGvB,IwBrkGMoH,EAAMpH,ExBwkGZ,KwBzkG2C0E,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GAG/B,CxBukGV,IwBtkGUkf,EAAStkB,SAASoL,cAAc,KACtCkZ,EAAOX,KAAO7b,EACdA,EAAMwc,EAAOX,KxBykGnB,IACE,OwBtkGW,IAAIxc,IAAIW,GACjB,MAAOR,GxBukGT,OwBtkGW,MAKf,SAAgBid,eAAe7jB,GxBskG7B,IwBrkGQ8jB,EAAS,IAAIC,gBxBilGrB,OwB/kGM1iB,KAAGE,OAAOvB,IACV1D,OAAO+N,QAAQrK,GAAO0D,QAAQ,SAAA4G,GxBskGhC,IAAIwH,EAAQ7U,eAAeqN,EAAM,GwBtkGC9N,EAAgBsV,EAAA,GAAX9U,EAAW8U,EAAA,GAC5CgS,EAAOngB,IAAInH,EAAKQ,KAIjB8mB,ECbX,IAAMhK,SAAW,CAEb0C,MAFa,WzB6lGb,GyBzlGS/c,KAAK6H,UAAUuI,GzB8lGxB,IyBzlGSpQ,KAAKoS,SAAWpS,KAAKukB,WAAcvkB,KAAK8Q,UAAYlB,QAAQqB,WAGzDrP,KAAGO,MAAMnC,KAAKqD,OAAOgW,WACrBrZ,KAAKqD,OAAOgW,SAAStZ,SAAS,aAC9BC,KAAKqD,OAAO+W,SAASra,SAAS,aAE9BsZ,SAAS8H,gBAAgB3iB,KAAKwB,UzBklG1C,CAiBA,GyB5lGS4B,KAAGjC,QAAQK,KAAK2J,SAAS0Q,YzBslGhCra,KyBrlGW2J,SAAS0Q,SAAWpP,cAAc,MAAOc,0BAA0B/L,KAAKqD,OAAOwW,UAAUQ,WAE9FjP,YAAYpL,KAAK2J,SAAS0Q,SAAUra,KAAK2J,SAASI,UAKlD4E,QAAQC,MAAQrI,OAAOS,IAAK,CzBqlGlC,IyBplGY2C,EAAW3J,KAAK+Q,MAAMjR,iBAAiB,SAE7C7B,MAAMQ,KAAKkL,GAAU1F,QAAQ,SAAAwD,GzBolGjC,IyBnlGc8L,EAAM9L,EAAMlD,aAAa,OACzBoD,EAAMuc,SAAS3Q,GAGT,OAAR5L,GACAA,EAAIT,WAAaX,OAAOkT,SAAS+J,KAAKtc,UACtC,CAAC,QAAS,UAAUnH,SAAS4H,EAAI6c,WAEjCrN,MAAM5D,EAAK,QACN1J,KAAK,SAAA4a,GACFhd,EAAMuD,aAAa,MAAOzE,OAAOS,IAAI0d,gBAAgBD,MAExDhM,MAAM,WACHnN,cAAc7D,OzBylGtC,IyB3kGUkd,EAAY5Q,QADOhF,UAAU4V,WAAa,CAAC5V,UAAUyS,UAAYzS,UAAU6V,cAAgB,OACvD/e,IAAI,SAAA2b,GzB6kGhD,OyB7kG4DA,EAASnZ,MAAM,KAAK,MAE1EmZ,GAAYxhB,KAAK4W,QAAQ5R,IAAI,aAAehF,KAAKqD,OAAOgX,SAASmH,UAAY,QAAQ/L,czB+kG7F,GyB5kGqB,SAAb+L,EACCA,EzB4kGUhkB,eyB5kGEmnB,EADQ,GAAA,GzBklG7B,IyB9kGQE,EAAS7kB,KAAK4W,QAAQ5R,IAAI,YzB2lGlC,GyB1lGSpD,KAAGK,QAAQ4iB,KACTA,EAAW7kB,KAAKqD,OAAOgX,SAAvBwK,QAGPhoB,OAAOyG,OAAOtD,KAAKqa,SAAU,CACzBkH,SAAS,EACTsD,OAAAA,EACArD,SAAAA,EACAmD,UAAAA,IAIA3kB,KAAK8Q,QAAS,CzB+kGpB,IyB9kGYgU,EAAc9kB,KAAKqD,OAAOgX,SAASnC,OAAS,uBAAyB,cAC3E3P,GAAG/J,KAAKwB,KAAMA,KAAK+Q,MAAME,WAAY6T,EAAazK,SAASnC,OAAOuG,KAAKze,OAI3E0J,WAAW2Q,SAASnC,OAAOuG,KAAKze,MAAO,KAI3CkY,OA9Fa,WzB4qGb,IAAInU,EAAQ/D,KyB7kGFqhB,EAAShH,SAASiH,UAAU9iB,KAAKwB,MAAM,GzBilG7C+kB,EyB/kGqD/kB,KAAKqa,SAAlDwK,EAHHE,EAGGF,OAAQrD,EAHXuD,EAGWvD,SAAUwD,EAHrBD,EAGqBC,KAAMC,EAH3BF,EAG2BE,iBAC1BC,EAAiBxkB,QAAQ2gB,EAAO7S,KAAK,SAAA/G,GzBolG7C,OyBplGsDA,EAAM+Z,WAAaA,KAGnExhB,KAAK8Q,SAAW9Q,KAAKoS,SACrBiP,EAAOlc,OAAO,SAAAsC,GzBqlGlB,OyBrlG4Bud,EAAKhgB,IAAIyC,KAAQxD,QAAQ,SAAAwD,GAC7C1D,EAAK8P,MAAMC,IAAI,cAAerM,GAE9Bud,EAAK9gB,IAAIuD,EAAO,CACZgZ,QAAwB,YAAfhZ,EAAM0d,OAInB1d,EAAM0d,KAAO,SAGb5c,GAAG/J,KAAKuF,EAAM0D,EAAO,YAAa,WzBslGxC,OyBtlG8C4S,SAAS+K,WAAW5mB,KAAKuF,QAKpEmhB,GAAkBllB,KAAKwhB,WAAaA,IAAcH,EAAOthB,SAASklB,MACnE5K,SAASgL,YAAY7mB,KAAKwB,KAAMwhB,GAChCnH,SAASvW,OAAOtF,KAAKwB,KAAM6kB,GAAUK,IAIzCnY,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWmM,SAAS7W,SAAU5B,KAAGS,MAAMgf,KAGnFrhB,KAAKqD,OAAOgW,UAAY,IAAItZ,SAAS,aAAeC,KAAKqD,OAAO+W,SAASra,SAAS,aACnFsZ,SAAS8H,gBAAgB3iB,KAAKwB,OAMtC8D,OAtIa,SAsINvD,GzBslGP,IyBtlGc2H,IAAgBjD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GzBylG9B,GyBvlGSjF,KAAK6H,UAAUuI,GzBulGxB,CAIA,IyBvlGYmR,EAAYvhB,KAAKqa,SAAjBkH,QACF+D,EAActlB,KAAKqD,OAAO6K,WAAWmM,SAASwK,OAI9CA,EAASjjB,KAAGC,gBAAgBtB,IAAUghB,EAAUhhB,EzBylG1D,GyBtlGQskB,IAAWtD,EAAS,CzBgmG1B,GyB9lGWrZ,IzBulGTlI,KyBtlGaqa,SAASwK,OAASA,EzBulG/B7kB,KyBtlGa4W,QAAQ1S,IAAI,CAAEmW,SAAUwK,MAI5B7kB,KAAKwhB,UAAYqD,IAAW3c,EAAS,CzBylG9C,IyBxlGcmZ,EAAShH,SAASiH,UAAU9iB,KAAKwB,MACjCyH,EAAQ4S,SAASkL,UAAU/mB,KAAKwB,KAAxB,CAA+BA,KAAKqa,SAASmH,UAA7Chf,OAAA3E,mBAA0DmC,KAAKqa,SAASsK,aAAY,GzB6lG1G,OAHA3kB,KyBvlGaqa,SAASmH,SAAW/Z,EAAM+Z,cAG/BnH,SAASnW,IAAI1F,KAAKwB,KAAMqhB,EAAOrN,QAAQvM,IAKvCzH,KAAK2J,SAASmQ,QAAQO,WzBulG9Bra,KyBtlGa2J,SAASmQ,QAAQO,SAAS2E,QAAU6F,GAI7C9X,YAAY/M,KAAK2J,SAASC,UAAW0b,EAAaT,GzBulGxD7kB,KyBrlGWqa,SAASkH,QAAUsD,EAGxBxL,SAASiH,cAAc9hB,KAAKwB,KAAM,YAGlCgJ,aAAaxK,KAAKwB,KAAMA,KAAK+Q,MAAO8T,EAAS,kBAAoB,uBAMzE3gB,IA5La,SA4LT+F,GzBmlGJ,IyBnlGW/B,IAAgBjD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GACjBoc,EAAShH,SAASiH,UAAU9iB,KAAKwB,MzBqlG3C,IyBllGmB,IAAXiK,EzBulGR,GyBllGSrI,KAAGG,OAAOkI,GzBulGnB,GyBllGUA,KAASoX,EzBklGnB,CAKA,GyBllGQrhB,KAAKqa,SAASqE,eAAiBzU,EAAO,CzBmlG5CjK,KyBllGWqa,SAASqE,aAAezU,EzBmlGnC,IyBllGYxC,EAAQ4Z,EAAOpX,GACbuX,GAAa/Z,GAAS,IAAtB+Z,SzBulGdxhB,KyBplGWqa,SAAS4K,iBAAmBxd,EAGjC4R,SAASiH,cAAc9hB,KAAKwB,KAAM,YAG7BkI,IzBmlGTlI,KyBllGaqa,SAASmH,SAAWA,EzBmlGjCxhB,KyBllGa4W,QAAQ1S,IAAI,CAAEsd,SAAAA,KAInBxhB,KAAKwS,SzBqlGbxS,KyBplGakS,MAAMsT,gBAAgBhE,GAI/BxY,aAAaxK,KAAKwB,KAAMA,KAAK+Q,MAAO,kBAIxCsJ,SAASvW,OAAOtF,KAAKwB,MAAM,EAAMkI,GAE7BlI,KAAK8Q,SAAW9Q,KAAKoS,SAErBiI,SAAS+K,WAAW5mB,KAAKwB,WzB+iG/BA,KyBllGW6T,MAAMoH,KAAK,kBAAmBhR,QzB6kGzCjK,KyBllGW6T,MAAMoH,KAAK,2BAA4BhR,QAL5CoQ,SAASvW,OAAOtF,KAAKwB,MAAM,EAAOkI,IAmD1Cmd,YApPa,SAoPD9kB,GzBolGZ,IyBplGmB2H,IAAgBjD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GzBslGnC,GyBrlGSrD,KAAGI,OAAOzB,GzBqlGnB,CAMA,IyBtlGUihB,EAAWjhB,EAAMkV,czBulG3BzV,KyBtlGSqa,SAASmH,SAAWA,EzBwlG7B,IyBrlGUH,EAAShH,SAASiH,UAAU9iB,KAAKwB,MACjCyH,EAAQ4S,SAASkL,UAAU/mB,KAAKwB,KAAM,CAACwhB,IAC7CnH,SAASnW,IAAI1F,KAAKwB,KAAMqhB,EAAOrN,QAAQvM,GAAQS,QzB2kGjDlI,KyBrlGW6T,MAAMoH,KAAK,4BAA6B1a,IAgBrD+gB,UAtQa,WzB21Gb,IAAI5Y,EAAS1I,KyBrlGHkY,EAAgBjT,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GzB4lG1B,OyB1lGmBhH,MAAMQ,MAAMuB,KAAK+Q,OAAS,IAAIE,YAAc,IAItD9L,OAAO,SAAAsC,GzBulGd,OyBvlGwBiB,EAAKoI,SAAWoH,GAAUxP,EAAK2R,SAAS2K,KAAKS,IAAIhe,KAClEtC,OAAO,SAAAsC,GzBwlGd,MyBxlGuB,CAAC,WAAY,aAAa1H,SAAS0H,EAAMb,SAIlE2e,UAjRa,SAiRHZ,GzBylGV,IyBrlGQld,EzBqlGJ+B,EAASxJ,KyBzlGQgN,EAAe/H,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAC1Boc,EAAShH,SAASiH,UAAU9iB,KAAKwB,MACjC0lB,EAAgB,SAAAje,GzB6lGxB,OyB7lGiC3G,QAAQ0I,EAAK6Q,SAAS2K,KAAKhgB,IAAIyC,IAAU,IAAIgZ,UACtEkF,EAAS1nB,MAAMQ,KAAK4iB,GAAQN,KAAK,SAACC,EAAGC,GzBgmG7C,OyBhmGmDyE,EAAczE,GAAKyE,EAAc1E,KzB0mGtF,OyBxmGI2D,EAAUpT,MAAM,SAAAiQ,GzBqmGlB,QyBpmGM/Z,EAAQke,EAAOnX,KAAK,SAAA/G,GzBkmGxB,OyBlmGiCA,EAAM+Z,WAAaA,OAI7C/Z,IAAUuF,EAAQ2Y,EAAO,QAAK7mB,IAIzC8mB,gBA/Ra,WzBk4Gb,OyBlmGWvL,SAASiH,UAAU9iB,KAAKwB,MAAMA,KAAK0e,eAI9CgC,SApSa,SAoSJjZ,GzBkmGT,IyBjmGQiX,EAAejX,EzBumGvB,OyBrmGS7F,KAAG6F,MAAMiX,IAAiB9O,QAAQqB,YAAcjR,KAAKqa,SAASkH,UAC/D7C,EAAerE,SAASuL,gBAAgBpnB,KAAKwB,OAG7C4B,KAAG6F,MAAMiX,GACJ9c,KAAGS,MAAMqc,EAAavC,OAItBva,KAAGS,MAAMqc,EAAa8C,UAIpBlL,KAAKtR,IAAI,UAAWhF,KAAKqD,QAHrBoE,EAAM+Z,SAASjM,cAJfmJ,EAAavC,MAUrB7F,KAAKtR,IAAI,WAAYhF,KAAKqD,SAKrC+hB,WA5Ta,SA4TF7kB,GzBkmGX,GyBhmGSP,KAAK6H,UAAUuI,GzBomGxB,GyBhmGSxO,KAAGjC,QAAQK,KAAK2J,SAAS0Q,UzBsmGlC,GyBhmGSzY,KAAGC,gBAAgBtB,IAAWtC,MAAMC,QAAQqC,GzBgmGrD,CAKA,IyBhmGQslB,EAAOtlB,EzBkmGf,IyB/lGSslB,EAAM,CzBgmGb,IyB/lGYpe,EAAQ4S,SAASuL,gBAAgBpnB,KAAKwB,MAC5C6lB,EAAO5nB,MAAMQ,MAAMgJ,GAAS,IAAIqe,YAAc,IACzCjgB,IAAI,SAAA2B,GzB+lGb,OyB/lGoBA,EAAIue,iBACflgB,IAAIqQ,SzBmmGjB,IyB/lGUqC,EAAUsN,EAAKhgB,IAAI,SAAAmgB,GzBgmG3B,OyBhmGsCA,EAAQ5Z,SAAQyP,KAAK,MzBomG7D,GyBnmGoBtD,IAAYvY,KAAK2J,SAAS0Q,SAASrE,UAEtC,CAETxK,aAAaxL,KAAK2J,SAAS0Q,UzBkmGjC,IyBjmGY4L,EAAUhb,cAAc,OAAQc,0BAA0B/L,KAAKqD,OAAOwW,UAAUoM,UACtFA,EAAQjQ,UAAYuC,EzBkmG1BvY,KyBjmGW2J,SAAS0Q,SAAS7P,YAAYyb,GAGnCjd,aAAaxK,KAAKwB,KAAMA,KAAK+Q,MAAO,mBzBskG1C/Q,KyBhmGW6T,MAAMoH,KAAK,4BAA6B1a,QzB0lGnDP,KyBhmGW6T,MAAMoH,KAAK,sCCvVtB3b,WAAW,CAEbkE,SAAS,EAGTkT,MAAO,GAGP7C,OAAO,EAGPqS,UAAU,EAGVC,WAAW,EAIXlW,aAAa,EAGbuG,SAAU,GAGVkE,OAAQ,EACRqE,OAAO,EAGPlE,SAAU,KAIVsF,iBAAiB,EAGjBL,YAAY,EAGZsG,cAAc,EAId3U,MAAO,KAGP4U,aAAa,EAGbC,cAAc,EAGdC,YAAY,EAGZC,oBAAoB,EAGpB1O,YAAY,EACZuD,WAAY,OACZ7B,QAAS,qCAGT5F,WAAY,uCAGZF,QAAS,CACL+M,QAAS,IACTxd,QAAS,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,IAAK,MAIhEwjB,KAAM,CACF5B,QAAQ,GAMZlG,MAAO,CACH+H,SAAU,EACVzjB,QAAS,CAAC,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,IAI7C0jB,SAAU,CACNhZ,SAAS,EACTiZ,QAAQ,GAIZnH,SAAU,CACNpG,UAAU,EACVoB,MAAM,GAIVJ,SAAU,CACNwK,QAAQ,EACRrD,SAAU,OAGVtJ,QAAQ,GAIZoC,WAAY,CACR9W,SAAS,EACTqjB,UAAU,EACVC,WAAW,GAIflQ,QAAS,CACLpT,SAAS,EACTzG,IAAK,QAITsc,SAAU,CACN,a1Bw8GN,OACA,W0Bn8GM,eACA,OACA,SACA,WACA,WACA,MACA,U1B87GN,c0B17GEe,SAAU,CAAC,WAAY,UAAW,SAGlC9D,KAAM,CACF0D,QAAS,UACTC,OAAQ,qBACRzG,KAAM,OACNuG,MAAO,QACPG,YAAa,sBACbO,KAAM,OACNsM,UAAW,8BACX5J,OAAQ,SACRkC,SAAU,WACVlM,YAAa,eACb0H,SAAU,WACVH,OAAQ,SACRP,KAAM,OACN6M,OAAQ,SACRC,eAAgB,kBAChBC,gBAAiB,mBACjBnE,SAAU,WACVoE,gBAAiB,mBACjBC,eAAgB,kBAChBC,WAAY,qBACZhN,SAAU,WACVD,SAAU,WACVkN,SAAU,2BACV3I,MAAO,QACP4I,OAAQ,SACR7T,QAAS,UACT+S,KAAM,OACNe,MAAO,QACPC,IAAK,MACLC,IAAK,MACLC,MAAO,QACP7iB,SAAU,WACVtB,QAAS,UACTokB,cAAe,KACfC,aAAc,C1B27GhBC,K0B17GY,K1B27GZC,K0B17GY,K1B27GZC,K0B17GY,K1B27GZC,I0B17GW,K1B27GXC,I0B17GW,K1B27GXC,I0B17GW,OAKb1E,KAAM,CACFV,SAAU,KACV3M,MAAO,CACHgS,IAAK,yCACLC,OAAQ,yCACRlY,IAAK,2CAETkG,QAAS,CACL+R,IAAK,qCACLjY,IACI,yGAERmY,UAAW,CACPF,IAAK,uDAKbvkB,UAAW,CACP4W,KAAM,KACNjH,KAAM,KACNuG,MAAO,KACPC,QAAS,KACTC,OAAQ,KACRC,YAAa,KACbC,KAAM,KACNO,OAAQ,KACRL,SAAU,KACV0I,SAAU,KACVzI,WAAY,KACZhK,IAAK,KACLI,QAAS,KACTiO,MAAO,KACPjL,QAAS,KACT+S,KAAM,KACNjF,SAAU,MAIdpZ,OAAQ,C1Bw7GV,Q0Bp7GM,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,Y1Bm6GN,W0B/5GM,kBACA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,Q1By5GN,cACA,gBACA,Y0Bj5GM,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,YAKJyR,UAAW,CACP0O,SAAU,6CACV3e,UAAW,QACXyP,SAAU,CACNzP,UAAW,KACXG,QAAS,mBAEbka,OAAQ,cACRnK,QAAS,CACLtG,KAAM,qBACNuG,MAAO,sBACPC,QAAS,wBACTC,OAAQ,uBACRC,YAAa,6BACbC,KAAM,qBACNE,SAAU,yBACV0I,SAAU,yBACVzI,WAAY,2BACZhK,IAAK,oBACLI,QAAS,wBACT0J,SAAU,yBACVqM,KAAM,sBAEVjM,OAAQ,CACJC,KAAM,qBACNC,OAAQ,uBACRiE,MAAO,sBACP6C,SAAU,yBACV9N,QAAS,yBAEbiH,QAAS,CACLxH,YAAa,uBACb0H,SAAU,wBACVD,OAAQ,0BACR6L,KAAM,wBACN/L,OAAQ,0BAEZH,SAAU,kBACVF,SAAU,kBACV4L,QAAS,iBACTjK,KAAM,CACFtI,QAAS,kCAKjBxF,WAAY,CACRhO,KAAM,YACN8P,SAAU,YACVF,MAAO,sBACPoC,MAAO,oBACPS,gBAAiB,mCACjB6V,eAAgB,+BAChBC,OAAQ,eACRC,cAAe,uBACfC,IAAK,YACLrM,QAAS,gBACTyH,eAAgB,yBAChB6E,QAAS,gBACTxV,OAAQ,eACRyV,QAAS,gBACTC,QAAS,gBACTC,MAAO,cACPhO,QAAS,gBACT8K,KAAM,aACNjZ,OAAQ,gBACR0Z,aAAc,sBACdjX,MAAO,eACP2Z,QAAS,iBACTC,YAAa,gBACbC,aAAc,sBACdvO,QAAS,CACL5B,KAAM,cAEViD,KAAM,CACFze,MAAO,oBACPwe,MAAO,cACPnE,KAAM,mBAEVyC,SAAU,CACN7W,QAAS,yBACTqhB,OAAQ,yBAEZvK,WAAY,CACR9W,QAAS,2BACTqjB,SAAU,6BAEdvW,IAAK,CACDzI,UAAW,sBACXgd,OAAQ,oBAEZnU,QAAS,CACL7I,UAAW,0BACXgd,OAAQ,wBAEZ7W,SAAU,kBACVmb,kBAAmB,CAEfC,eAAgB,sBAChBC,oBAAqB,gCACrBC,eAAgB,uCAChBC,cAAe,sCAEfC,mBAAoB,0BACpBC,wBAAyB,sCAKjC9e,WAAY,CACRuH,MAAO,CACHlC,SAAU,qBACVtD,GAAI,uBAKZ/K,KAAM,CACF+nB,OAAQ,MAKZf,IAAK,CACDnlB,SAAS,EACTmmB,YAAa,GACbC,OAAQ,IAIZT,kBAAmB,CACf3lB,SAAS,EACT+P,IAAK,IAIT6C,MAAO,CACHyT,QAAQ,EACRC,UAAU,EACVpT,OAAO,EACPiI,OAAO,EACPoL,aAAa,GAIjB1T,QAAS,CACL2T,UAAU,EACVC,IAAK,EACLC,SAAU,EACVC,eAAgB,EAChBC,eAAgB,IC5aX9Z,IAAM,CACfuU,OAAQ,qBACRwF,SAAU,UCFDC,UAAY,CACrB1X,MAAO,QACPyD,QAAS,UACTD,MAAO,SAGEmU,MAAQ,CACjB1a,MAAO,QACPC,MAAO,SAOX,SAAgB0a,iBAAiB7iB,G5Bm0H/B,M4Bj0HM,8EAA8EuH,KAAKvH,GAC5E2iB,UAAUjU,QAIjB,wDAAwDnH,KAAKvH,GACtD2iB,UAAUlU,MAGd,KC1BX,IAAMqU,KAAO,aAEQC,Q7Bm2HrB,WACE,SAASA,IACP,I6Bp2HYlnB,EAAiByB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,G7Bs2H7B/B,gBAAgBlD,KAAM0qB,GAEtB1qB,K6Bv2HSwD,QAAU+C,OAAOokB,SAAWnnB,EAE7BxD,KAAKwD,S7Bw2HXxD,K6Bv2HW8T,IAAI,qB7B+3HnB,OApBA9W,aAAa0tB,EAAS,CAAC,CACrB3tB,IAAK,MACLiI,IAAK,WAEH,O6Bz2HShF,KAAKwD,QAAUpC,SAAShE,UAAUqhB,KAAKjgB,KAAKmsB,QAAQ7W,IAAK6W,SAAWF,O7B22H9E,CACD1tB,IAAK,OACLiI,IAAK,WAEH,O6B12HShF,KAAKwD,QAAUpC,SAAShE,UAAUqhB,KAAKjgB,KAAKmsB,QAAQ1P,KAAM0P,SAAWF,O7B42H/E,CACD1tB,IAAK,QACLiI,IAAK,WAEH,O6B32HShF,KAAKwD,QAAUpC,SAAShE,UAAUqhB,KAAKjgB,KAAKmsB,QAAQ3P,MAAO2P,SAAWF,S7B+2H5EC,EAjCT,G8B71HA,SAASE,W9Bk4HP,G8Bj4HO5qB,KAAKwD,Q9Bi4HZ,CAKA,I8Bj4HQ+Y,EAASvc,KAAKiT,OAAOtJ,SAASmQ,QAAQQ,WACxC1Y,KAAGjC,QAAQ4c,KACXA,EAAOyC,QAAUhf,KAAK6kB,QAI1B7b,aAAaxK,KAAKwB,KAAKiT,OAAQjT,KAAK3D,OAAQ2D,KAAK6kB,OAAS,kBAAoB,kBAAkB,GAG3FlW,QAAQU,OACT/B,UAAU9O,KAAKwB,KAAKiT,OAAQjT,KAAK3D,OAAQ2D,KAAK6kB,SAItD,SAASgG,iB9Bk4HP,IAAI9mB,EAAQ/D,K8Bl4HU8D,EAAgBmB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,G9Bq5HtC,G8Bn5HMnB,E9Bs4HJ9D,K8Br4HS8qB,eAAiB,CAClBC,EAAGxkB,OAAOykB,SAAW,EACrBC,EAAG1kB,OAAO2kB,SAAW,GAGzB3kB,OAAO4kB,SAASnrB,KAAK8qB,eAAeC,EAAG/qB,KAAK8qB,eAAeG,GAI/DprB,SAAS6F,KAAKjC,MAAM2nB,SAAWtnB,EAAS,SAAW,GAGnDiJ,YAAY/M,KAAK3D,OAAQ2D,KAAKiT,OAAO5P,OAAO6K,WAAWoM,WAAWuM,SAAU/iB,GAGxE6K,QAAQU,MAAO,C9Bo4HnB,I8Bn4HQgc,EAAWxrB,SAASyrB,KAAKnoB,cAAc,yBACrCooB,EAAW,qBAGZF,IACDA,EAAWxrB,SAASoL,cAAc,SACzBD,aAAa,OAAQ,Y9Bs4HtC,I8Bl4HUwgB,EAAc5pB,KAAGI,OAAOqpB,EAAS9S,UAAY8S,EAAS9S,QAAQxY,SAASwrB,GAEzEznB,G9Bm4HN9D,K8Bl4HWyrB,iBAAmBD,EAEnBA,IACDH,EAAS9S,SAAT,IAAA/V,OAAwB+oB,KAErBvrB,KAAKyrB,kBACZJ,EAAS9S,QAAU8S,EAAS9S,QACvBlQ,MAAM,KACNlD,OAAO,SAAAumB,G9Bi4HhB,O8Bj4HwBA,EAAKtf,SAAWmf,IAC/B1P,KAAK,MAIdnS,WAAW,W9Bk4Hb,O8Bl4HmB+E,QAAQ1K,EAAK1H,SAAS,KAI3CuuB,SAASpsB,KAAKwB,M9Bs4HlB,I8Bn4HM2rB,W9Bq4HN,WACE,SAASA,E8Br4HK1Y,G9Bs4HZ,IAAIvK,EAAS1I,KAEbkD,gBAAgBlD,KAAM2rB,GAGtB3rB,K8Bz4HSiT,OAASA,E9B24HlBjT,K8Bx4HS8U,OAAS6W,EAAW7W,O9By4H7B9U,K8Bx4HSurB,SAAWI,EAAWJ,S9B04H/BvrB,K8Bv4HS8qB,eAAiB,CAAEC,EAAG,EAAGE,EAAG,G9B44HrCjrB,K8Bz4HS4rB,cAAsD,UAAtC3Y,EAAO5P,OAAOiX,WAAWuM,SAI9Cte,GAAG/J,KACCwB,KAAKiT,OACLpT,SACgB,OAAhBG,KAAK8U,OAAkB,qBAAvB,GAAAtS,OAAiDxC,KAAK8U,OAAtD,oBACA,WAEI8V,SAASpsB,KAAKkK,KAKtBH,GAAG/J,KAAKwB,KAAKiT,OAAQjT,KAAKiT,OAAOtJ,SAASC,UAAW,WAAY,SAAAzJ,GAEzDyB,KAAGjC,QAAQ+I,EAAKuK,OAAOtJ,SAAS0P,WAAa3Q,EAAKuK,OAAOtJ,SAAS0P,SAASnM,SAAS/M,EAAM9D,SAI9FqM,EAAK5E,W9Bq4Hb9D,K8Bj4HSkY,S9BkhIX,OA7IAlb,aAAa2uB,EAAY,CAAC,CACxB5uB,IAAK,SAELQ,MAAO,WAEH,I8BzzHQ4nB,EADJnlB,KAAKwD,SAID2hB,EADAnlB,KAAK4rB,cACE,oBACAD,EAAWE,OACX,SAEA,W9B4zHf7rB,K8BzzHSiT,OAAOY,MAAMC,IAAlB,GAAAtR,OAAyB2iB,EAAzB,yB9B2zHJnlB,K8BzzHSiT,OAAOY,MAAMC,IAAI,kDAI1B/G,YAAY/M,KAAKiT,OAAOtJ,SAASC,UAAW5J,KAAKiT,OAAO5P,OAAO6K,WAAWoM,WAAW9W,QAASxD,KAAKwD,W9B4zHtG,CACDzG,IAAK,QACLQ,MAAO,W8BzzHEyC,KAAKwD,UAKNmL,QAAQU,OAASrP,KAAKiT,OAAO5P,OAAOiX,WAAWwM,U9B2zHnD9mB,K8B1zHS3D,OAAOyvB,yBACJH,EAAWE,QAAU7rB,KAAK4rB,cAClCf,eAAersB,KAAKwB,MAAM,GAClBA,KAAK8U,OAELlT,KAAGS,MAAMrC,KAAK8U,S9B2zH1B9U,K8B1zHS3D,OAAL,GAAAmG,OAAexC,KAAK8U,OAApB,WAAAtS,OAAoCxC,KAAKurB,a9BwzH7CvrB,K8B1zHS3D,OAAO0vB,uB9Bg0HnB,CACDhvB,IAAK,OACLQ,MAAO,WACL,G8B3zHOyC,KAAKwD,Q9Bg0HZ,G8B3zHMmL,QAAQU,OAASrP,KAAKiT,OAAO5P,OAAOiX,WAAWwM,U9B4zHnD9mB,K8B3zHS3D,OAAO2vB,uB9B4zHhBhsB,K8B3zHSiT,OAAOO,YACT,IAAKmY,EAAWE,QAAU7rB,KAAK4rB,cAClCf,eAAersB,KAAKwB,MAAM,QACvB,GAAKA,KAAK8U,QAEV,IAAKlT,KAAGS,MAAMrC,KAAK8U,QAAS,C9B4zHnC,I8B3zHUmX,EAAyB,QAAhBjsB,KAAK8U,OAAmB,SAAW,OAClDjV,SAAQ,GAAA2C,OAAIxC,KAAK8U,QAATtS,OAAkBypB,GAAlBzpB,OAA2BxC,KAAKurB,mBAHvC1rB,SAASqsB,kBAAoBrsB,SAASunB,gBAAgB5oB,KAAKqB,Y9Bk0HnE,CACD9C,IAAK,SACLQ,MAAO,W8B3zHEyC,KAAK6kB,O9B+zHV7kB,K8B5zHSmsB,O9B0zHTnsB,K8B5zHSosB,U9Bi0HZ,CACDrvB,IAAK,cAELiI,IAAK,WACH,O8Bn8HS2mB,EAAWE,SAAW7rB,KAAK4rB,gB9Bs8HrC,CACD7uB,IAAK,UAELiI,IAAK,WACH,O8Bz6HO2mB,EAAWE,QAAU7rB,KAAKiT,OAAO5P,OAAOiX,WAAWuM,WACpD7mB,KAAKiT,OAAO5P,OAAOiX,WAAW9W,SAC9BxD,KAAKiT,OAAOpL,UAAUuI,IACtBpQ,KAAKiT,OAAOb,U9By6HnB,CACDrV,IAAK,SACLiI,IAAK,WACH,Q8Bt6HOhF,KAAKwD,WAKLmoB,EAAWE,QAAU7rB,KAAK4rB,cACpBze,SAASnN,KAAK3D,OAAQ2D,KAAKiT,OAAO5P,OAAO6K,WAAWoM,WAAWuM,WAGzD7mB,KAAK8U,OAAsCjV,SAAQ,GAAA2C,OAAIxC,KAAK8U,QAATtS,OAAkBxC,KAAKurB,SAAvB,YAArC1rB,SAASwsB,qBAErBrsB,KAAK3D,U9Bw6H3B,CACDU,IAAK,SACLiI,IAAK,WACH,O8Bt6HS2J,QAAQU,OAASrP,KAAKiT,OAAO5P,OAAOiX,WAAWwM,UAChD9mB,KAAKiT,OAAOlC,MACZ/Q,KAAKiT,OAAOtJ,SAASC,a9Bs6H7B,CAAC,CACH7M,IAAK,SACLiI,IAAK,WACH,S8B9+HMnF,SAASysB,mBACTzsB,SAAS0sB,yBACT1sB,SAAS2sB,sBACT3sB,SAAS4sB,uB9B6+HhB,CACD1vB,IAAK,SACLiI,IAAK,WAEH,G8Br+HMpD,KAAGM,SAASrC,SAASunB,gB9Bs+HzB,M8Br+HW,G9By+Hb,I8Br+HM7pB,EAAQ,G9B++Hd,M8B9+HmB,CAAC,SAAU,MAAO,MAE1BskB,KAAK,SAAA6K,G9Bq+Hd,S8Bp+HQ9qB,KAAGM,SAASrC,SAAQ,GAAA2C,OAAIkqB,EAAJ,sBAA6B9qB,KAAGM,SAASrC,SAAQ,GAAA2C,OAAIkqB,EAAJ,yBACrEnvB,EAAQmvB,GACD,KAMRnvB,I9Bq+HV,CACDR,IAAK,WACLiI,IAAK,WACH,M8Bp+HyB,QAAhBhF,KAAK8U,OAAmB,aAAe,iB9Bw+H7C6W,EAnLT,G+Bn9HA,SAAwBgB,UAAUpZ,G/B+oIhC,I+B/oIqCqZ,EAAc3nB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAH,E/BgpIhD,O+B/oIS,IAAI6B,QAAQ,SAAC2C,EAAS4N,G/BgpI7B,I+B/oIUwV,EAAQ,IAAIC,MAEZC,EAAU,kBACLF,EAAMG,cACNH,EAAMI,SACZJ,EAAMK,cAAgBN,EAAWnjB,EAAU4N,GAAQwV,IAGxDhwB,OAAOyG,OAAOupB,EAAO,CAAEG,OAAQD,EAASE,QAASF,EAASxZ,IAAAA,MCflE,IAaMnD,GAAK,CACP+c,aADO,WAEHpgB,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAOwW,UAAUjQ,UAAU0C,QAAQ,IAAK,KAAK,GACvFS,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAW+a,YAAajpB,KAAK6H,UAAUuI,KAI5F8K,qBAPO,WAO8BjW,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,IACnBjF,KAAK8Q,QhC4pIrB9Q,KgC3pIW+Q,MAAM/F,aAAa,WAAY,IhC6pI1ChL,KgC3pIW+Q,MAAMjE,gBAAgB,aAKnCsgB,MAhBO,WhC2qIP,IAAIrpB,EAAQ/D,KAMZ,GAFAA,KgC5pIS6D,UAAUkN,SAGV/Q,KAAK6H,UAAUuI,GhCgqItB,OAJApQ,KgC3pIW6T,MAAMoH,KAAX,0BAAAzY,OAA0CxC,KAAKgQ,SAA/C,KAAAxN,OAA2DxC,KAAKE,YAGhEkQ,GAAG8K,qBAAqB1c,KAAKwB,MAAM,GAOlC4B,KAAGjC,QAAQK,KAAK2J,SAAS0P,YAE1BA,SAASsK,OAAOnlB,KAAKwB,MhC2pI3BA,KgCxpIW6D,UAAUwV,YAInBjJ,GAAG8K,qBAAqB1c,KAAKwB,MAGzBA,KAAK8Q,SACLuJ,SAAS0C,MAAMve,KAAKwB,MhC2pI5BA,KgCvpIS0a,OAAS,KhCypIlB1a,KgCtpIS+e,MAAQ,KhCwpIjB/e,KgCrpIS2e,MAAQ,KhCupIjB3e,KgCppISymB,KAAO,KhCspIhBzmB,KgCnpIS0T,QAAU,KAGf2F,SAASwF,aAAargB,KAAKwB,MAG3BqZ,SAASuG,WAAWphB,KAAKwB,MAGzBoQ,GAAGid,aAAa7uB,KAAKwB,MAGrB+M,YACI/M,KAAK2J,SAASC,UACd5J,KAAKqD,OAAO6K,WAAWoC,IAAIzI,UAC3B+H,QAAQU,KAAOtQ,KAAK8Q,SAAW9Q,KAAKoS,SAIxCrF,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWwC,QAAQ7I,UAAW+H,QAAQc,SAAW1Q,KAAK8Q,SAGvG/D,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWmB,MAAOV,QAAQU,OAG3EtC,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAW8a,QAAShpB,KAAKoE,OhC0oI9EpE,KgCvoISuJ,OAAQ,EAGbG,WAAW,WACPV,aAAaxK,KAAKuF,EAAMA,EAAKgN,MAAO,UACrC,GAGHX,GAAGkd,SAAS9uB,KAAKwB,MAGbA,KAAKyoB,QACLrY,GAAGmd,UAAU/uB,KAAKwB,KAAMA,KAAKyoB,QAAQ,GAAOhQ,MAAM,cAKlDzY,KAAKqD,OAAOwX,UACZxB,SAAS2G,eAAexhB,KAAKwB,OAKrCstB,SAjHO,WhCsvIP,IgCnoIQnR,EAAQ7F,KAAKtR,IAAI,OAAQhF,KAAKqD,QhC+oItC,GgC5oIQzB,KAAGI,OAAOhC,KAAKqD,OAAOqT,SAAW9U,KAAGS,MAAMrC,KAAKqD,OAAOqT,SACtDyF,GAAK,KAAA3Z,OAASxC,KAAKqD,OAAOqT,QAI9BzY,MAAMQ,KAAKuB,KAAK2J,SAASmQ,QAAQtG,MAAQ,IAAIvP,QAAQ,SAAAsY,GACjDA,EAAOvR,aAAa,aAAcmR,KAKlCnc,KAAK0jB,QAAS,ChCkoIpB,IgCjoIY2E,EAAShb,WAAW7O,KAAKwB,KAAM,UhCmoI3C,IgCjoIW4B,KAAGjC,QAAQ0oB,GhCkoIpB,OAIF,IgCjoIY3R,EAAS9U,KAAGS,MAAMrC,KAAKqD,OAAOqT,OAA6B,QAApB1W,KAAKqD,OAAOqT,MACnDzB,EAASqB,KAAKtR,IAAI,aAAchF,KAAKqD,QAE3CglB,EAAOrd,aAAa,QAASiK,EAAO3I,QAAQ,UAAWoK,MAK/D8W,aAjJO,SAiJMC,GACT1gB,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWwa,cAAe+E,IAK/EF,UAvJO,SAuJG9E,GhC+nIV,IAAI/f,EAAS1I,KAKb,OgCpoIkCiF,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,KAEfjF,KAAKyoB,QhCuoIxBzoB,KgCloIS+Q,MAAM/F,aAAa,SAAUyd,GAI9Blf,MACK/K,KAAKwB,MAEL6J,KAAK,WhC+nIhB,OgC/nIsB8iB,UAAUlE,KACrBhQ,MAAM,SAAArZ,GhCsoIjB,MgCpoIkBqpB,IAAW/f,EAAK+f,QAChBrY,GAAGod,aAAahvB,KAAKkK,GAAM,GAGzBtJ,IAETyK,KAAK,WhCioIhB,GgC/nIkB4e,IAAW/f,EAAK+f,OhCgoIhC,MgC/nIsB,IAAI/Q,MAAM,oDAGvB7N,KAAK,WhCqoIhB,OgCpoIchN,OAAOyG,OAAOoF,EAAKiB,SAAS8e,OAAOhlB,MAAO,CACtCiqB,gBAAe,QAAAlrB,OAAUimB,EAAV,MAEfkF,eAAgB,KAEpBvd,GAAGod,aAAahvB,KAAKkK,GAAM,GACpB+f,KAjCR3hB,QAAQuQ,OAAO,IAAIK,MAAM,wBAuCxC2V,aAjMO,SAiMMltB,GhC6nIb,IAAIqJ,EAASxJ,KgC3nIT+M,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAW0a,QAAS5oB,KAAK4oB,SAC1E7b,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWkF,OAAQpT,KAAKoT,QACzErG,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAW2a,QAAS7oB,KAAK6oB,SAG1E5qB,MAAMQ,KAAKuB,KAAK2J,SAASmQ,QAAQtG,MAAQ,IAAIvP,QAAQ,SAAA5H,GACjDA,EAAO2iB,QAAUxV,EAAKof,UAItBhnB,KAAGzB,MAAMA,IAAyB,eAAfA,EAAMD,MAK7BkQ,GAAGwd,eAAepvB,KAAKwB,OAI3B6tB,aAtNO,SAsNM1tB,GhC4nIb,IAAIqf,EAASxf,KAEbA,KgC7nIS8oB,QAAU,CAAC,UAAW,WAAW/oB,SAASI,EAAMD,MAGrD4tB,aAAa9tB,KAAK+tB,OAAOjF,ShC8nI7B9oB,KgC3nIS+tB,OAAOjF,QAAUpf,WAAW,WAE7BqD,YAAYyS,EAAK7V,SAASC,UAAW4V,EAAKnc,OAAO6K,WAAW4a,QAAStJ,EAAKsJ,SAG1E1Y,GAAGwd,eAAepvB,KAAKghB,IACxBxf,KAAK8oB,QAAU,IAAM,IAI5B8E,eAvOO,SAuOQ5gB,GhC0nIf,IgCznIYqM,EAAarZ,KAAK2J,SAAlB0P,ShC2nIZ,GgCznIQA,GAAYrZ,KAAKqD,OAAOijB,aAAc,ChC2nI5C,IgCznIY0H,EAAmBhuB,KAAKoE,OAASpE,KAAKiuB,aAAe,IAAOC,KAAKC,MhC2nI7EnuB,KgCxnIW4tB,eAAeltB,QAAQsM,GAAShN,KAAK8oB,SAAW9oB,KAAKoT,QAAUiG,EAAS2F,SAAW3F,EAAS0P,OAASiF,OChPhHI,UjC+2IN,WACE,SAASA,EiC/2IKnb,GjCg3IZ/P,gBAAgBlD,KAAMouB,GAEtBpuB,KiCj3ISiT,OAASA,EjCk3IlBjT,KiCj3ISquB,QAAU,KjCk3InBruB,KiCj3ISsuB,WAAa,KjCk3ItBtuB,KiCj3ISuuB,YAAc,KjCk3IvBvuB,KiCh3ISwuB,UAAYxuB,KAAKwuB,UAAU/P,KAAKze,MjCi3IzCA,KiCh3ISgiB,WAAahiB,KAAKgiB,WAAWvD,KAAKze,MjCi3I3CA,KiCh3ISyuB,YAAczuB,KAAKyuB,YAAYhQ,KAAKze,MjCi3I7CA,KiCh3IS0uB,WAAa1uB,KAAK0uB,WAAWjQ,KAAKze,MjC+mK7C,OA3vBAhD,aAAaoxB,EAAW,CAAC,CACvBrxB,IAAK,YACLQ,MAAO,SiCl3IG4C,GjCm3IR,IiCl3IU8S,EAAWjT,KAAXiT,OACAtJ,EAAasJ,EAAbtJ,SACFglB,EAAOxuB,EAAMuN,QAAUvN,EAAMuN,QAAUvN,EAAMqd,MAC7CwB,EAAyB,YAAf7e,EAAMD,KAChB0uB,EAAS5P,GAAW2P,IAAS3uB,KAAKquB,QjCo3I1C,KiCj3IMluB,EAAM0uB,QAAU1uB,EAAM2uB,SAAW3uB,EAAM4uB,SAAW5uB,EAAM0N,WAMvDjM,KAAGG,OAAO4sB,GjCi3IjB,CAYA,GiCj3IM3P,EAAS,CjCq3Ib,IiCj3IUrR,EAAU9N,SAAS+N,cjCm3I7B,GiCl3IQhM,KAAGjC,QAAQgO,GAAU,CjCm3I3B,IiCl3Ic4a,EAAatV,EAAO5P,OAAOwW,UAA3B0O,SjCq3Id,GiCl3IU5a,IAFahE,EAAS6Q,OAAlBC,MAEgB/a,UAAQiO,EAAS4a,GjCm3I7C,OAGF,GiCl3I0B,KAAhBpoB,EAAMqd,OAAgB9d,UAAQiO,EAAS,8BjCm3I/C,OAYJ,OiCz3I2B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrF5N,SAAS4uB,KACxBxuB,EAAM4E,iBACN5E,EAAMsd,mBAGFkR,GjCk3IV,KiCj3IW,GjCk3IX,KiCj3IW,GjCk3IX,KiCj3IW,GjCk3IX,KiCj3IW,GjCk3IX,KiCj3IW,GjCk3IX,KiCj3IW,GjCk3IX,KiCj3IW,GjCk3IX,KiCj3IW,GjCk3IX,KiCj3IW,GjCk3IX,KiCj3IW,GAEIC,IA5Cb3b,EAAOE,YAAeF,EAAO4H,SAAW,IAAO8T,EAAO,KjCi6ItD,MAEF,KiCl3IW,GjCm3IX,KiCl3IW,GAEIC,GACD3b,EAAO+b,ajCq3InB,MAEF,KiCn3IW,GAED/b,EAAOgc,eAAe,IjCo3I9B,MAEF,KiCn3IW,GAEDhc,EAAOic,eAAe,IjCo3I9B,MAEF,KiCn3IW,GAEIN,IACD3b,EAAO8L,OAAS9L,EAAO8L,OjCs3InC,MAEF,KiCp3IW,GAED9L,EAAOkc,UjCq3If,MAEF,KiCp3IW,GAEDlc,EAAOgH,SjCq3If,MAEF,KiCp3IW,GAEDhH,EAAOqH,WAAWxW,SjCq3I1B,MAEF,KiCp3IW,GAEI8qB,GACD3b,EAAOmc,iBjCu3InB,MAEF,KiCr3IW,GAEDnc,EAAOwT,MAAQxT,EAAOwT,KAqBjB,KAATkI,IAAgB1b,EAAOqH,WAAW+U,aAAepc,EAAOqH,WAAWuK,QACnE5R,EAAOqH,WAAWxW,SjCu3I1B9D,KiCn3ISquB,QAAUM,OjCq3InB3uB,KiCn3ISquB,QAAU,QjCu3ItB,CACDtxB,IAAK,aACLQ,MAAO,SiCp3II4C,GACPkZ,SAAS2I,WAAWxjB,KAAKwB,KAAKiT,OAAQ9S,KjCu3IzC,CACDpD,IAAK,aACLQ,MAAO,WACL,IiCr3IU0V,EAAWjT,KAAXiT,OACAtJ,EAAasJ,EAAbtJ,SAERsJ,EAAO7O,OAAQ,EAGf2I,YAAYpD,EAASC,UAAWqJ,EAAO5P,OAAO6K,WAAW8a,SAAS,KjCq3IrE,CACDjsB,IAAK,cACLQ,MAAO,SiCp3IK4C,GjCq3IV,IiCp3IU8S,EAAWjT,KAAXiT,OACAtJ,EAAasJ,EAAbtJ,SjCu3IV,GiCr3IEmkB,aAAa9tB,KAAKsuB,YAGC,YAAfnuB,EAAMD,MAAsC,IAAhBC,EAAMqd,MjCk3IxC,CiC72IqB,YAAfrd,EAAMD,OjCm3IVF,KiCl3ISuuB,YAAcpuB,EAAMmvB,WjCs3I/B,IiCj3IYjjB,EAMJkjB,EAAapvB,EAAMmvB,UAAYtvB,KAAKuuB,aAAe,GjCo3I3D,GiCj3IqB,UAAfpuB,EAAMD,MAAqBqvB,EATrBljB,EAAY4G,EAAO5P,OAAO6K,WAAWF,SAE3CjB,YADgBK,YAAY5O,KAAKyU,EAAjB,IAAAzQ,OAA6B6J,IACxBA,GAAW,GjCg4ItCrM,KiCh3IOsuB,WAAa5kB,WAAW,WjCi3I7B,IiCh3IUiE,EAAU9N,SAAS+N,cAGpBjE,EAASC,UAAUsD,SAASS,IAIjCZ,YAAYlN,SAAS+N,cAAeqF,EAAO5P,OAAO6K,WAAWF,UAAU,IACxE,OjCk3IN,CACDjR,IAAK,SACLQ,MAAO,WACL,IiCj3IKuG,IAAemB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GACVgO,EAAWjT,KAAXiT,OAGJA,EAAO5P,OAAOsjB,SAASC,QACvB5e,eAAexJ,KAAKyU,EAAQ1M,OAAQ,gBAAiBvG,KAAKwuB,UAAW1qB,GAAQ,GAIjFkE,eAAexJ,KAAKyU,EAAQpT,SAAS6F,KAAM,QAAS1F,KAAKgiB,WAAYle,GAGrE2E,KAAKjK,KAAKyU,EAAQpT,SAAS6F,KAAM,aAAc1F,KAAK0uB,YAGpD1mB,eAAexJ,KAAKyU,EAAQpT,SAAS6F,KAAM,qBAAsB1F,KAAKyuB,YAAa3qB,GAAQ,GAAO,KjCi3IrG,CACD/G,IAAK,YACLQ,MAAO,WACL,IAAIwG,EAAQ/D,KiC/2IFiT,EAAWjT,KAAXiT,OACA5P,EAA6B4P,EAA7B5P,OAAQsG,EAAqBsJ,EAArBtJ,SAAUokB,EAAW9a,EAAX8a,QAGrB1qB,EAAOsjB,SAASC,QAAUvjB,EAAOsjB,SAAShZ,SAC3CpF,GAAG/J,KAAKyU,EAAQtJ,EAASC,UAAW,gBAAiB5J,KAAKwuB,WAAW,GAIzEjmB,GAAG/J,KACCyU,EACAtJ,EAASC,UACT,2EACA,SAAAzJ,GjC+2IJ,IiC92IgBkZ,EAAa1P,EAAb0P,SAGJA,GAA2B,oBAAflZ,EAAMD,OAClBmZ,EAAS2F,SAAU,EACnB3F,EAAS0P,OAAQ,GjCi3I7B,IiC32IYyG,EAAQ,EAFC,CAAC,aAAc,YAAa,aAAazvB,SAASI,EAAMD,QAKjEkQ,GAAGwd,eAAepvB,KAAKyU,GAAQ,GAE/Buc,EAAQvc,EAAO7O,MAAQ,IAAO,KAIlC0pB,aAAaC,EAAO1U,UAGpB0U,EAAO1U,SAAW3P,WAAW,WjC42InC,OiC52IyC0G,GAAGwd,eAAepvB,KAAKyU,GAAQ,IAAQuc,KjCw3IpF,IiC71IQC,EAAgB,SAAAC,GjCm3ItB,IiCj3ISA,EjCk3IP,OiCj3Iavd,eAAe3T,KAAKyU,GjCo3InC,IiCj3IU0c,EAAOhmB,EAASC,UAAUlF,wBACxBC,EAAkBgrB,EAAlBhrB,MAAOgN,EAAWge,EAAXhe,OjCm3InB,OiCj3IWQ,eAAe3T,KAAKyU,EAApB,GAAAzQ,OAA+BmC,EAA/B,KAAAnC,OAAwCmP,KAG7Cie,EAAU,WACZrpB,OAAOunB,aAAaC,EAAO6B,SAC3B7B,EAAO6B,QAAUrpB,OAAOmD,WAAW+lB,EAAe,KAGtDlnB,GAAG/J,KAAKyU,EAAQtJ,EAASC,UAAW,iCAAkC,SAAAzJ,GjCk3ItE,IAAI0vB,EiCj3IgC5c,EAAOqH,WAA/Bje,EADmEwzB,EACnExzB,OAAQgzB,EAD2DQ,EAC3DR,YjCq3IpB,GiCl3ISpc,EAAOyQ,SAAWrnB,IAAWsN,EAASC,UjCk3I/C,CAIA,IiCl3IUkmB,EAAyB,oBAAf3vB,EAAMD,KjCo3ItB6vB,EiCj3I2BN,EAAcK,GAXkCC,EAWnEzd,SA1CM,SAACb,EAAOa,EAASxO,GjC42InC,GiC32ISmP,EAAOT,QjC22IhB,CAIA,IiC32IUnW,EAAS4W,EAAOtJ,SAASI,QAAQkM,WAC9BgV,EjC42IAztB,eiC52IKiU,EAN4B,GAAA,GjCs3I1Cue,EAAwBxyB,eiC/2ICwU,eAAexT,KAAKuF,GjC+2IgB,GiC/2ItDksB,EAPmCD,EAAA,GAO3BE,EAP2BF,EAAA,GAS1C3zB,EAAOoH,MAAM0sB,SAAWrsB,EAAM,GAAAtB,OAAOyoB,EAAIiF,EAAUD,EAArB,MAAkC,KAChE5zB,EAAOoH,MAAM2sB,OAAStsB,EAAS,SAAW,MAmC1CusB,CAd2EN,EAW1Dte,MAGAa,EAASwd,GAGrBT,IACGS,EACAvnB,GAAG/J,KAAKyU,EAAQ1M,OAAQ,SAAUqpB,GAElCpnB,IAAIhK,KAAKyU,EAAQ1M,OAAQ,SAAUqpB,SjCw3IlD,CACD7yB,IAAK,QACLQ,MAAO,WACL,IAAImL,EAAS1I,KiCn3IHiT,EAAWjT,KAAXiT,OACAtJ,EAAasJ,EAAbtJ,SjC65IV,GiC15IEpB,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,4BAA6B,SAAA5Q,GjCq3I3D,OiCr3IoEkZ,SAASuG,WAAWphB,KAAKyU,EAAQ9S,KAGrGoI,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,2CAA4C,SAAA5Q,GjCs3I1E,OiCr3IIkZ,SAAS2G,eAAexhB,KAAKyU,EAAQ9S,KAKzCoI,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,qBAAsB,WAChDpE,aAAahD,EAAS+Q,QAASzH,EAAOqd,UACtC3jB,aAAahD,EAASmQ,QAAQK,MAAOlH,EAAOqd,YAIhD/nB,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,QAAS,WAE/BkC,EAAOnC,SAAWmC,EAAOb,SAAWa,EAAO5P,OAAOkjB,YAElDtT,EAAO+G,YAKfzR,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,kCAAmC,SAAA5Q,GjCm3IjE,OiCl3IIkZ,SAAS4F,eAAezgB,KAAKyU,EAAQ9S,KAIzCoI,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,eAAgB,SAAA5Q,GjCk3I9C,OiCl3IuDkZ,SAASwF,aAAargB,KAAKyU,EAAQ9S,KAG1FoI,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,8CAA+C,SAAA5Q,GjCm3I7E,OiCl3IIiQ,GAAGid,aAAa7uB,KAAKyU,EAAQ9S,KAIjCoI,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,iCAAkC,SAAA5Q,GjCk3IhE,OiCl3IyEiQ,GAAGyd,aAAarvB,KAAKyU,EAAQ9S,KAGlG8S,EAAOpL,UAAUuI,IAAM6C,EAAO5P,OAAOgjB,cAAgBpT,EAAOsd,QAAS,CjCo3IzE,IiCl3IUxmB,EAAUsD,WAAW7O,KAAKyU,EAAhB,IAAAzQ,OAA4ByQ,EAAO5P,OAAO6K,WAAW4B,QjCo3IzE,IiCj3ISlO,KAAGjC,QAAQoK,GjCk3IlB,OiC72IExB,GAAG/J,KAAKyU,EAAQtJ,EAASC,UAAW,QAAS,SAAAzJ,IACzB,CAACwJ,EAASC,UAAWG,GAGxBhK,SAASI,EAAM9D,SAAY0N,EAAQmD,SAAS/M,EAAM9D,WAK3D4W,EAAO7O,OAAS6O,EAAO5P,OAAOijB,eAI9BrT,EAAOud,OACP9nB,EAAK+nB,MAAMtwB,EAAO8S,EAAO+G,QAAS,WAClCtR,EAAK+nB,MAAMtwB,EAAO8S,EAAOO,KAAM,SAE/B9K,EAAK+nB,MAAMtwB,EAAO8S,EAAO+b,WAAY,YAM7C/b,EAAOpL,UAAUuI,IAAM6C,EAAO5P,OAAOmjB,oBACrCje,GAAG/J,KACCyU,EACAtJ,EAASI,QACT,cACA,SAAA5J,GACIA,EAAM4E,mBAEV,GAKRwD,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,eAAgB,WAE1CkC,EAAO2D,QAAQ1S,IAAI,CACfwW,OAAQzH,EAAOyH,OACfqE,MAAO9L,EAAO8L,UAKtBxW,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,aAAc,WAExCsI,SAASiH,cAAc9hB,KAAKyU,EAAQ,SAGpCA,EAAO2D,QAAQ1S,IAAI,CAAEya,MAAO1L,EAAO0L,UAIvCpW,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,gBAAiB,SAAA5Q,GAE3CkZ,SAASiH,cAAc9hB,KAAKyU,EAAQ,UAAW,KAAM9S,EAAM+I,OAAOwK,WAItEnL,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO,sBAAuB,WACjDsI,SAASyJ,gBAAgBtkB,KAAKyU,KjC82IpC,IiCz2IQyd,EAAczd,EAAO5P,OAAO+E,OAAO5F,OAAO,CAAC,QAAS,YAAYqZ,KAAK,KAE3EtT,GAAG/J,KAAKyU,EAAQA,EAAOlC,MAAO2f,EAAa,SAAAvwB,GjCy2I3C,IAAIwwB,EiCx2IsBxwB,EAAhB+I,OAAAA,OAD0C,IAAAynB,EACjC,GADiCA,EAI7B,UAAfxwB,EAAMD,OACNgJ,EAAS+J,EAAOlC,MAAMiK,OAG1BhS,aAAaxK,KAAKyU,EAAQtJ,EAASC,UAAWzJ,EAAMD,MAAM,EAAMgJ,OjC42IvE,CACDnM,IAAK,QACLQ,MAAO,SiCz2ID4C,EAAOywB,EAAgBC,GjC02I3B,IiCz2IU5d,EAAWjT,KAAXiT,OACF6d,EAAgB7d,EAAO5P,OAAOQ,UAAUgtB,GAE1CE,GAAW,EADUnvB,KAAGM,SAAS4uB,KAKjCC,EAAWD,EAActyB,KAAKyU,EAAQ9S,IAItC4wB,GAAYnvB,KAAGM,SAAS0uB,IACxBA,EAAepyB,KAAKyU,EAAQ9S,KjC42InC,CACDpD,IAAK,OACLQ,MAAO,SiCz2IFoC,EAASO,EAAM0wB,EAAgBC,GjC02IlC,IAAIrnB,EAASxJ,KiC12IuCkI,IAAgBjD,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GAC1DgO,EAAWjT,KAAXiT,OACF6d,EAAgB7d,EAAO5P,OAAOQ,UAAUgtB,GACxCG,EAAmBpvB,KAAGM,SAAS4uB,GAErCvoB,GAAG/J,KACCyU,EACAtT,EACAO,EACA,SAAAC,GjCw2IJ,OiCx2IaqJ,EAAKinB,MAAMtwB,EAAOywB,EAAgBC,IAC3C3oB,IAAY8oB,KjC22InB,CACDj0B,IAAK,WACLQ,MAAO,WACL,IAAIiiB,EAASxf,KiCx2IHiT,EAAWjT,KAAXiT,OACAtJ,EAAasJ,EAAbtJ,SAGFsnB,EAAatiB,QAAQC,KAAO,SAAW,QjCq9I/C,GiCl9IMjF,EAASmQ,QAAQtG,MACjBvV,MAAMQ,KAAKkL,EAASmQ,QAAQtG,MAAMvP,QAAQ,SAAAsY,GACtCiD,EAAKf,KAAKlC,EAAQ,QAAStJ,EAAO+b,WAAY,UjC62IxDhvB,KiCx2IOye,KAAK9U,EAASmQ,QAAQE,QAAS,QAAS/G,EAAO+G,QAAS,WjC02I/Dha,KiCv2IOye,KAAK9U,EAASmQ,QAAQG,OAAQ,QAAShH,EAAOgH,OAAQ,UjCy2I7Dja,KiCt2IOye,KAAK9U,EAASmQ,QAAQI,YAAa,QAASjH,EAAOkc,QAAS,ejCw2InEnvB,KiCr2IOye,KACD9U,EAASmQ,QAAQK,KACjB,QACA,WACIlH,EAAO8L,OAAS9L,EAAO8L,OAE3B,QjCm2IN/e,KiC/1IOye,KAAK9U,EAASmQ,QAAQO,SAAU,QAAS,WjCg2I9C,OiCh2IoDpH,EAAOmc,mBjCm2I7DpvB,KiCh2IOye,KACD9U,EAASmQ,QAAQiJ,SACjB,QACA,WACI/Z,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,aAE5C,YjC81IN/Q,KiC11IOye,KACD9U,EAASmQ,QAAQQ,WACjB,QACA,WACIrH,EAAOqH,WAAWxW,UAEtB,cjCw1IN9D,KiCp1IOye,KACD9U,EAASmQ,QAAQxJ,IACjB,QACA,WACI2C,EAAO3C,IAAM,UAEjB,OjCk1INtQ,KiC90IOye,KAAK9U,EAASmQ,QAAQpJ,QAAS,QAASuC,EAAOvC,QAAS,WjCg1I/D1Q,KiC70IOye,KAAK9U,EAASmQ,QAAQM,SAAU,QAAS,SAAAja,GAE1CA,EAAMsd,kBAENpE,SAAS2I,WAAWxjB,KAAKyU,EAAQ9S,KjCk1IvCH,KiC50IOye,KACD9U,EAASmQ,QAAQM,SACjB,QACA,SAAAja,GjC00IJ,IiCz0IcwuB,EAAOxuB,EAAMqd,MAGd,CAAC,GAAI,IAAIzd,SAAS4uB,KAKV,KAATA,GAMJxuB,EAAM4E,iBAGN5E,EAAMsd,kBAGNpE,SAAS2I,WAAWxjB,KAAKyU,EAAQ9S,IAX7BkZ,SAAS2E,mBAAmBxf,KAAKyU,EAAQ,MAAM,KAavD,MACA,GjCw0INjT,KiCp0IOye,KAAK9U,EAASyQ,SAAS4B,KAAM,UAAW,SAAA7b,GACrB,KAAhBA,EAAMqd,OACNnE,SAAS2I,WAAWxjB,KAAKyU,EAAQ9S,KjCw0I3CH,KiCn0IOye,KAAK9U,EAAS6Q,OAAOC,KAAM,sBAAuB,SAAAta,GjCo0IvD,IiCn0IUwvB,EAAOhmB,EAAS4Q,SAAS7V,wBACzBP,EAAW,IAAMwrB,EAAKhrB,OAAUxE,EAAMwf,MAAQgQ,EAAK9qB,MACzD1E,EAAM+wB,cAAclmB,aAAa,aAAc7G,KjCs0IrDnE,KiCl0IOye,KAAK9U,EAAS6Q,OAAOC,KAAM,sDAAuD,SAAAta,GjCm0IvF,IiCl0IUsa,EAAOta,EAAM+wB,cACbvC,EAAOxuB,EAAMuN,QAAUvN,EAAMuN,QAAUvN,EAAMqd,MjCq0IvD,IiCl0IQ5b,KAAG2F,cAAcpH,IAAoB,KAATwuB,GAAwB,KAATA,EjCk0InD,CiC7zII1b,EAAOgb,aAAeC,KAAKC,MjCo0I/B,IiCj0IU3a,EAAOiH,EAAK0W,aAVA,kBAaZjyB,EAAO,CAAC,UAAW,WAAY,SAASa,SAASI,EAAMD,MAGzDsT,GAAQtU,GACRub,EAAK3N,gBAjBS,kBAkBdmG,EAAOO,SACCtU,GAAQ+T,EAAO2V,UACvBnO,EAAKzP,aApBS,iBAoBe,IAC7BiI,EAAO8G,YAOXpL,QAAQU,MAAO,CjC+zInB,IiC9zIUmL,EAASpN,YAAY5O,KAAKyU,EAAQ,uBACxChV,MAAMQ,KAAK+b,GAAQvW,QAAQ,SAAA1D,GjC+zI7B,OiC/zIsCif,EAAKf,KAAKle,EAAO0wB,EAAY,SAAA9wB,GjCg0IjE,OiCh0I0EsO,QAAQtO,EAAM9D,YjCs0I9F2D,KiCl0IOye,KACD9U,EAAS6Q,OAAOC,KAChBwW,EACA,SAAA9wB,GjCg0IJ,IiC/zIcsa,EAAOta,EAAM+wB,cAGfE,EAAS3W,EAAKlW,aAAa,cAE3B3C,KAAGS,MAAM+uB,KACTA,EAAS3W,EAAKld,OAGlBkd,EAAK3N,gBAAgB,cAErBmG,EAAOE,YAAeie,EAAS3W,EAAK/X,IAAOuQ,EAAO4H,UAEtD,QjC8zIN7a,KiC1zIOye,KAAK9U,EAAS4Q,SAAU,kCAAmC,SAAApa,GjC2zIhE,OiC1zIIkZ,SAASkG,kBAAkB/gB,KAAKyU,EAAQ9S,KjC8zI9CH,KiCzzIOye,KAAK9U,EAAS4Q,SAAU,sBAAuB,SAAApa,GjC0zIpD,IiCzzIYgpB,EAAsBlW,EAAtBkW,kBAEJA,GAAqBA,EAAkBkI,QACvClI,EAAkBmI,UAAUnxB,KjC6zItCH,KiCxzIOye,KAAK9U,EAAS4Q,SAAU,mBAAoB,WjCyzIjD,IiCxzIY4O,EAAsBlW,EAAtBkW,kBAEJA,GAAqBA,EAAkBkI,QACvClI,EAAkBoI,SAAQ,GAAO,KjC4zI3CvxB,KiCvzIOye,KAAK9U,EAAS4Q,SAAU,uBAAwB,SAAApa,GjCwzIrD,IiCvzIYgpB,EAAsBlW,EAAtBkW,kBAEJA,GAAqBA,EAAkBkI,QACvClI,EAAkBqI,eAAerxB,KjC0zI3CH,KiCtzIOye,KAAK9U,EAAS4Q,SAAU,mBAAoB,SAAApa,GjCuzIjD,IiCtzIYgpB,EAAsBlW,EAAtBkW,kBAEJA,GAAqBA,EAAkBkI,QACvClI,EAAkBsI,aAAatxB,KAKnCwO,QAAQM,UACRhR,MAAMQ,KAAK2O,YAAY5O,KAAKyU,EAAQ,wBAAwBhP,QAAQ,SAAAtE,GAChE6f,EAAKf,KAAK9e,EAAS,QAAS,SAAAQ,GjCszIhC,OiCtzIyCkZ,SAASyD,gBAAgBte,KAAKyU,EAAQ9S,EAAM9D,YAMrF4W,EAAO5P,OAAO+iB,eAAiBxkB,KAAGjC,QAAQgK,EAASgR,QAAQE,WjCwzI/D7a,KiCvzISye,KAAK9U,EAASgR,QAAQxH,YAAa,QAAS,WAElB,IAAvBF,EAAOE,cAIXF,EAAO5P,OAAOyc,YAAc7M,EAAO5P,OAAOyc,WAE1CzG,SAASuG,WAAWphB,KAAKyU,MjC4zInCjT,KiCvzIOye,KACD9U,EAAS6Q,OAAOE,OAChBuW,EACA,SAAA9wB,GACI8S,EAAOyH,OAASva,EAAM9D,OAAOkB,OAEjC,UjCqzINyC,KiCjzIOye,KAAK9U,EAAS0P,SAAU,wBAAyB,SAAAlZ,GAClDwJ,EAAS0P,SAAS0P,OAAS9V,EAAO7O,OAAwB,eAAfjE,EAAMD,OjCozIvDF,KiChzIOye,KAAK9U,EAAS0P,SAAU,oDAAqD,SAAAlZ,GAC9EwJ,EAAS0P,SAAS2F,QAAU,CAAC,YAAa,cAAcjf,SAASI,EAAMD,QjCmzI7EF,KiC/yIOye,KAAK9U,EAAS0P,SAAU,UAAW,WjCgzIxC,IiC/yIYhW,EAA6B4P,EAA7B5P,OAAQsG,EAAqBsJ,EAArBtJ,SAAUokB,EAAW9a,EAAX8a,OAG1BhhB,YAAYpD,EAAS0P,SAAUhW,EAAO6K,WAAWgb,cAAc,GAG/D9Y,GAAGwd,eAAepvB,KAAKyU,GAAQ,GAG/BvJ,WAAW,WACPqD,YAAYpD,EAAS0P,SAAUhW,EAAO6K,WAAWgb,cAAc,IAChE,GjCgzIP,IiC7yIUsG,EAAQhQ,EAAKpb,MAAQ,IAAO,IAGlC0pB,aAAaC,EAAO1U,UAGpB0U,EAAO1U,SAAW3P,WAAW,WjC4yI/B,OiC5yIqC0G,GAAGwd,eAAepvB,KAAKyU,GAAQ,IAAQuc,KjCgzIhFxvB,KiC5yIOye,KACD9U,EAAS6Q,OAAOE,OAChB,QACA,SAAAva,GjC4yIJ,IiCzyIc8Y,EAAW9Y,EAAMuxB,kCjC8yI3BC,EAAQn0B,eiC3yIW,CAAC2C,EAAMyxB,QAASzxB,EAAM0xB,QAAQhsB,IAAI,SAAAtI,GjCyyIvD,OiCzyIiE0b,GAAY1b,EAAQA,IjC2yItD,GiC3yIlBwtB,EANF4G,EAAA,GAMK1G,EANL0G,EAAA,GASCG,EAAYrvB,KAAKsvB,KAAKtvB,KAAK4R,IAAI0W,GAAKtoB,KAAK4R,IAAI4W,GAAKF,EAAIE,GAG5DhY,EAAOgc,eAAe6C,EAAY,IjC8yI1C,IiC3yIgBpX,EAAWzH,EAAOlC,MAAlB2J,QACW,IAAdoX,GAAmBpX,EAAS,IAAsB,IAAfoX,GAAoBpX,EAAS,IACjEva,EAAM4E,kBAGd,UACA,OjC8yIHqpB,EA1wBT,GA6wBI4D,eAAuC,oBAAfC,WAA6BA,WAA+B,oBAAX1rB,OAAyBA,OAA2B,oBAAXqgB,OAAyBA,OAAyB,oBAATsL,KAAuBA,KAAO,GAE7L,SAASC,qBAAqBC,EAAIC,GACjC,OAAiCD,EAA1BC,EAAS,CAAEC,QAAS,IAAiBD,EAAOC,SAAUD,EAAOC,QAGrE,IAAIC,WAAaJ,qBAAqB,SAAUE,EAAQC,GkC3oKpDD,EAAAA,QAII,WlCipKJ,IkC3oKAG,EAAU,aACVC,EAAgB,GAChBC,EAAoB,GACpBC,EAAsB,GlC2rKtB,SkCxoKKC,EAAQC,EAAUC,GlC0oKrB,GkCxoKCD,ElCwoKD,CACA,IkCvoKAE,EAAIJ,EAAoBE,GlC2oKxB,GkCxoKJH,EAAkBG,GAAYC,EAGzBC,ElCuoKD,KkCpoKGA,EAAEv2B,QACPu2B,EAAE,GAAGF,EAAUC,GACfC,EAAEC,OAAO,EAAG,IlC8oKZ,SkCpoKKC,EAAiBpqB,EAAMqqB,GAE1BrqB,EAAKrK,OAAMqK,EAAO,CAACsqB,QAAStqB,IAG5BqqB,EAAa12B,QAASqM,EAAKmS,OAASwX,GAASU,IAC3CrqB,EAAKsqB,SAAWX,GAAS3pB,GlC6oK7B,SkCpoKKuqB,EAAS1e,EAAM2e,EAAYxqB,EAAMyqB,GlCqoKpC,IkC/nKAC,EACApsB,EANAqsB,EAAM3zB,SACN4zB,EAAQ5qB,EAAK4qB,MACbC,GAAY7qB,EAAK8qB,YAAc,GAAK,EACpCC,EAAmB/qB,EAAKgrB,QAAUrB,EAClCsB,EAAepf,EAAKpI,QAAQ,cAAe,IAI/CgnB,EAAWA,GAAY,EAEnB,iBAAiBpkB,KAAKwF,KAExBvN,EAAIqsB,EAAIvoB,cAAc,SACpBgf,IAAM,aACR9iB,EAAEqc,KAAOsQ,GAGTP,EAAgB,cAAepsB,IAGVA,EAAE4sB,UACrBR,EAAgB,EAChBpsB,EAAE8iB,IAAM,UACR9iB,EAAE6sB,GAAK,UAEA,+BAA+B9kB,KAAKwF,IAE7CvN,EAAIqsB,EAAIvoB,cAAc,QACpBsI,IAAMugB,IAGR3sB,EAAIqsB,EAAIvoB,cAAc,WACpBsI,IAAMmB,EACRvN,EAAEssB,WAAkB30B,IAAV20B,GAA6BA,GAGzCtsB,EAAE6lB,OAAS7lB,EAAE8lB,QAAU9lB,EAAE8sB,aAAe,SAAUC,GlCkoK5C,IkCjoKA1b,EAAS0b,EAAGh0B,KAAK,GlCooKjB,GkChoKAqzB,ElCioKE,IkC/nKGpsB,EAAEgtB,MAAMC,QAAQ53B,SAAQgc,EAAS,KACtC,MAAOuS,GAGO,IAAVA,EAAE4D,OAAYnW,EAAS,KlCqoK3B,GkChoKU,KAAVA,GlCooKE,IkCloKJ8a,GAAY,GAGGI,ElCgoKT,OkC/nKGN,EAAS1e,EAAM2e,EAAYxqB,EAAMyqB,QAErC,GAAa,WAATnsB,EAAE8iB,KAA4B,SAAR9iB,EAAE6sB,GlCioK7B,OkC/nKG7sB,EAAE8iB,IAAM,aAIjBoJ,EAAW3e,EAAM8D,EAAQ0b,EAAGG,oBAII,IAA9BT,EAAiBlf,EAAMvN,IAAcqsB,EAAIlI,KAAK9gB,YAAYrD,GlC8qK5D,SkC7nKKmtB,EAAOC,EAAOC,EAAMC,GlC8nKvB,IkC7nKA5B,EACAhqB,ElCkoKA,GkC/nKA2rB,GAAQA,EAAKpoB,OAAMymB,EAAW2B,GAGlC3rB,GAAQgqB,EAAW4B,EAAOD,IAAS,GAG/B3B,EAAU,ClC0nKR,GkCznKAA,KAAYJ,ElC0nKV,KkCznKE,SAENA,EAAcI,IAAY,ElC6nK1B,SkCznKK6B,EAAOjrB,EAAS4N,IlCokKvB,SkC/nKekd,EAAOlB,EAAYxqB,GlCkoKhC,IkC3nKAupB,EACA71B,EAJAo4B,GAFJJ,EAAQA,EAAMp1B,KAAOo1B,EAAQ,CAACA,IAEP/3B,OACnBuuB,EAAI4J,EACJ7B,EAAgB,GlCgpKhB,IkC3oKJV,EAAK,SAAS1d,EAAM8D,EAAQ6b,GlCkoKtB,GkChoKU,KAAV7b,GAAesa,EAAc3zB,KAAKuV,GAIxB,KAAV8D,EAAe,ClC6nKb,IkC5nKA6b,EACC,OADiBvB,EAAc3zB,KAAKuV,KAI3CigB,GACiBtB,EAAWP,IAIzBv2B,EAAE,EAAGA,EAAIwuB,EAAGxuB,IAAK62B,EAASmB,EAAMh4B,GAAI61B,EAAIvpB,GAiC3C+rB,CAAUL,EAAO,SAAUzB,GAEzBG,EAAiBpqB,EAAMiqB,GAGnBrpB,GACFwpB,EAAiB,CAACE,QAAS1pB,EAASuR,MAAO3D,GAASyb,GAItDF,EAAQC,EAAUC,IACjBjqB,GlC8nKD,GkC3nKAA,EAAKgsB,cAAe,OAAO,IAAI/tB,QAAQ4tB,GACtCA,IlCyqKH,OkChqKJJ,EAAO/qB,MAAQ,SAAeurB,EAAMjsB,GlCgoK9B,OA5OF,SkC3oKeksB,EAAW1B,GAE5B0B,EAAYA,EAAU51B,KAAO41B,EAAY,CAACA,GlC4oKtC,IkCvoKA3C,EACAS,EACAmC,EALA9B,EAAe,GACf32B,EAAIw4B,EAAUv4B,OACdm4B,EAAap4B,ElCupKb,IkChpKJ61B,EAAK,SAAUS,EAAUC,GACnBA,EAAct2B,QAAQ02B,EAAa/zB,KAAK0zB,KAE5C8B,GACiBtB,EAAWH,IAIvB32B,KACLs2B,EAAWkC,EAAUx4B,IAGrBy4B,EAAItC,EAAkBG,IAEpBT,EAAGS,EAAUmC,IAKXrC,EAAoBE,GAAYF,EAAoBE,IAAa,IACnE1zB,KAAKizB,GAwNT6C,CAAUH,EAAM,SAAU5B,GAExBD,EAAiBpqB,EAAMqqB,KAGlBoB,GAQTA,EAAOp1B,KAAO,SAAc2zB,GAC1BD,EAAQC,EAAU,KAOpByB,EAAO3M,MAAQ,WACb8K,EAAgB,GAChBC,EAAoB,GACpBC,EAAsB,IAQxB2B,EAAOY,UAAY,SAAmBrC,GlC0nKhC,OkCznKGA,KAAYJ,GAKd6B,EApTca,KCHrB,SAKwBC,WAAWztB,GnCg7KjC,OmC/6KS,IAAIb,QAAQ,SAAC2C,EAAS4N,GACzBid,WAAO3sB,EAAK,CACRwrB,QAAS1pB,EACTuR,MAAO3D,MCQnB,SAASge,QAAQ1tB,GpC66Kf,GoC56KM/F,KAAGS,MAAMsF,GpC66Kb,OoC56KW,KpC+6Kb,GoC56KM/F,KAAGG,OAAOjB,OAAO6G,IpC66KrB,OoC56KWA,EpCg7Kb,OoC56KSA,EAAIpF,MADG,mCACY8S,OAAOigB,GAAK3tB,EAI1C,SAAS4tB,oBAAoB/hB,GACrBA,IAASxT,KAAKkS,MAAMsjB,YpC66KxBx1B,KoC56KSkS,MAAMsjB,WAAY,GAEvBx1B,KAAK+Q,MAAMqC,SAAWI,IpC86K1BxT,KoC76KS+Q,MAAMqC,QAAUI,EACrBxK,aAAaxK,KAAKwB,KAAMA,KAAK+Q,MAAOyC,EAAO,OAAS,UAI5D,IAAM4C,MAAQ,CACV2G,MADU,WpC+6KV,IAAIhZ,EAAQ/D,KoC56KR+M,YAAY/M,KAAK2J,SAASI,QAAS/J,KAAKqD,OAAO6K,WAAWgE,OAAO,GAGjEC,eAAe3T,KAAKwB,MAGf4B,KAAGE,OAAOyE,OAAOkvB,OASlBrf,MAAM7M,MAAM/K,KAAKwB,MARjBo1B,WAAWp1B,KAAKqD,OAAOogB,KAAKrN,MAAMgS,KAC7Bve,KAAK,WACFuM,MAAM7M,MAAM/K,KAAKuF,KAEpB0U,MAAM,SAAAuC,GACHjX,EAAK8P,MAAMoH,KAAK,2BAA4BD,MAQ5DzR,MAvBU,WpCk8KV,IAAIb,EAAS1I,KoC16KHiT,EAASjT,KACTqD,EAAS4P,EAAO5P,OAAO+S,MAGvBiO,EAASD,eACXpR,OACI,GACA,CACIyT,KAAMxT,EAAO5P,OAAOojB,KAAK5B,OACzBqB,SAAUjT,EAAOiT,SACjBnH,MAAO9L,EAAO8L,MACd2W,QAAS,QACTzlB,aAAcjQ,KAAKqD,OAAOiX,WAAWwM,WAEzCzjB,IAKJyP,EAASG,EAAOlC,MAAMxM,aAAa,OAGnC3C,KAAGS,MAAMyQ,KACTA,EAASG,EAAOlC,MAAMxM,aAAa0O,EAAO5P,OAAOsH,WAAWuH,MAAMxF,KpCs6K1E,IoCn6KUA,EAAK2oB,QAAQviB,GAGbuV,EAASpd,cAAc,UACvBsI,EAAM0B,OAAOhC,EAAO5P,OAAOogB,KAAKrN,MAAMiS,OAAQ3b,EAAI2X,GACxDgE,EAAOrd,aAAa,MAAOuI,GAC3B8U,EAAOrd,aAAa,kBAAmB,IACvCqd,EAAOrd,aAAa,oBAAqB,IACzCqd,EAAOrd,aAAa,QAAS,YpCo6KjC,IoC95KUjB,EAAUkB,cAAc,MAAO,CAAEwd,OAHpBxV,EAAXwV,OAGuChc,MAAOwG,EAAO5P,OAAO6K,WAAWsa,iBAC/Eze,EAAQS,YAAY6d,GACpBpV,EAAOlC,MAAQpF,eAAe5B,EAASkJ,EAAOlC,OAG9CoG,MAAMlC,OAAOhC,EAAO5P,OAAOogB,KAAKrN,MAAMjG,IAAKzD,GAAK,QAAQ7C,KAAK,SAAA4N,GpCm6K/D,IoCl6KU7V,KAAGS,MAAMoV,GpCk6KnB,CAKA,IoCl6KY9P,EAAM,IAAIX,IAAIyQ,EAAS,GAAGke,iBAGhChuB,EAAIiuB,SAAJ,GAAApzB,OAAkBmF,EAAIiuB,SAASvtB,MAAM,KAAK,GAA1C,QAGA+H,GAAGmd,UAAU/uB,KAAKyU,EAAQtL,EAAI6b,MAAM/K,MAAM,iBAK9CxF,EAAOf,MAAQ,IAAI3L,OAAOkvB,MAAMI,OAAOxN,EAAQ,CAC3ClC,UAAWlT,EAAO5P,OAAO8iB,UACzBpH,MAAO9L,EAAO8L,QAGlB9L,EAAOlC,MAAMqC,QAAS,EACtBH,EAAOlC,MAAMoC,YAAc,EAGvBF,EAAOpL,UAAUuI,IACjB6C,EAAOf,MAAM4jB,mBAIjB7iB,EAAOlC,MAAMyC,KAAO,WpC+5KtB,OoC95KM+hB,oBAAoB/2B,KAAKyU,GAAQ,GAC1BA,EAAOf,MAAMsB,QAGxBP,EAAOlC,MAAMgJ,MAAQ,WpC+5KvB,OoC95KMwb,oBAAoB/2B,KAAKyU,GAAQ,GAC1BA,EAAOf,MAAM6H,SAGxB9G,EAAOlC,MAAMglB,KAAO,WAChB9iB,EAAO8G,QACP9G,EAAOE,YAAc,GpCi6K7B,IoC75KUA,EAAgBF,EAAOlC,MAAvBoC,YACNtW,OAAOC,eAAemW,EAAOlC,MAAO,cAAe,CAC/C/L,IAD+C,WpC+5KnD,OoC75KemO,GAEXjP,IAJ+C,SAI3C6U,GpCg6KR,IoC55KgB7G,EAAiCe,EAAjCf,MAAOnB,EAA0BkC,EAA1BlC,MAAOqC,EAAmBH,EAAnBG,OAAQsH,EAAWzH,EAAXyH,OACxBsb,EAAe5iB,IAAWlB,EAAMsjB,UAGtCzkB,EAAMgP,SAAU,EAChB/W,aAAaxK,KAAKyU,EAAQlC,EAAO,WAGjCjK,QAAQ2C,QAAQusB,GAAgB9jB,EAAM+jB,UAAU,IAE3CpsB,KAAK,WpC65KhB,OoC75KsBqI,EAAMgkB,eAAend,KAEhClP,KAAK,WpC85KhB,OoC95KsBmsB,GAAgB9jB,EAAM6H,UAEjClQ,KAAK,WpC+5KhB,OoC/5KsBmsB,GAAgB9jB,EAAM+jB,UAAUvb,KAC3CjC,MAAM,iBpCo6KvB,IoC75KQkG,EAAQ1L,EAAO5P,OAAOsb,MAAM+H,SAChC7pB,OAAOC,eAAemW,EAAOlC,MAAO,eAAgB,CAChD/L,IADgD,WpC+5KpD,OoC75Ke2Z,GAEXza,IAJgD,SAI5C3D,GACA0S,EAAOf,MACFikB,gBAAgB51B,GAChBsJ,KAAK,WACF8U,EAAQpe,EACRyI,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,gBAE3C0H,MAAM,SAAAuC,GAEgB,UAAfA,EAAMob,MACN/c,SAASqI,aAAaljB,KAAKyU,EAAQ,SpCg6K3D,IoCz5KUyH,EAAWzH,EAAO5P,OAAlBqX,OACN7d,OAAOC,eAAemW,EAAOlC,MAAO,SAAU,CAC1C/L,IAD0C,WpC25K9C,OoCz5Ke0V,GAEXxW,IAJ0C,SAItC3D,GACA0S,EAAOf,MAAM+jB,UAAU11B,GAAOsJ,KAAK,WAC/B6Q,EAASna,EACTyI,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,qBpC85KxD,IoCx5KUgO,EAAU9L,EAAO5P,OAAjB0b,MACNliB,OAAOC,eAAemW,EAAOlC,MAAO,QAAS,CACzC/L,IADyC,WpC05K7C,OoCx5Ke+Z,GAEX7a,IAJyC,SAIrC3D,GpCy5KR,IoCx5KcuD,IAASlC,KAAGK,QAAQ1B,IAASA,EAEnC0S,EAAOf,MAAM+jB,UAAUnyB,EAAS,EAAImP,EAAO5P,OAAOqX,QAAQ7Q,KAAK,WAC3DkV,EAAQjb,EACRkF,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,qBpC45KxD,IoCv4KQslB,EAfE5P,EAASxT,EAAO5P,OAAhBojB,KACN5pB,OAAOC,eAAemW,EAAOlC,MAAO,OAAQ,CACxC/L,IADwC,WpCw5K5C,OoCt5KeyhB,GAEXviB,IAJwC,SAIpC3D,GpCu5KR,IoCt5KcuD,EAASlC,KAAGK,QAAQ1B,GAASA,EAAQ0S,EAAO5P,OAAOojB,KAAK5B,OAE9D5R,EAAOf,MAAMokB,QAAQxyB,GAAQ+F,KAAK,WAC9B4c,EAAO3iB,OAOnBmP,EAAOf,MACFqkB,cACA1sB,KAAK,SAAAtM,GACF84B,EAAa94B,EACb8b,SAASyJ,gBAAgBtkB,KAAKyU,KAEjCwF,MAAM,SAAAuC,GACHtS,EAAKmL,MAAMoH,KAAKD,KAGxBne,OAAOC,eAAemW,EAAOlC,MAAO,aAAc,CAC9C/L,IAD8C,WpCk5KlD,OoCh5KeqxB,KAKfx5B,OAAOC,eAAemW,EAAOlC,MAAO,QAAS,CACzC/L,IADyC,WpCi5K7C,OoC/4KeiO,EAAOE,cAAgBF,EAAO4H,YAK7C/T,QAAQ4gB,IAAI,CAACzU,EAAOf,MAAMskB,gBAAiBvjB,EAAOf,MAAMukB,mBAAmB5sB,KAAK,SAAA6sB,GpC+4KlF,IAAIC,EAAcn5B,eoC94KYk5B,EADkE,GACnF/xB,EADmFgyB,EAAA,GAC5EhlB,EAD4EglB,EAAA,GAE1F1jB,EAAOf,MAAMT,MAAb,GAAAjP,OAAwBmC,EAAxB,KAAAnC,OAAiCmP,GACjCQ,eAAe3T,KAAKkK,KAIxBuK,EAAOf,MAAM0kB,aAAa3jB,EAAO5P,OAAO8iB,WAAWtc,KAAK,SAAAgtB,GACpD5jB,EAAO5P,OAAO8iB,UAAY0Q,IAI9B5jB,EAAOf,MAAM4kB,gBAAgBjtB,KAAK,SAAA6M,GAC9BzD,EAAO5P,OAAOqT,MAAQA,EACtBtG,GAAGkd,SAAS9uB,KAAKkK,KAIrBuK,EAAOf,MAAM6kB,iBAAiBltB,KAAK,SAAAtM,GAC/B4V,EAAc5V,EACdyL,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,gBAI5CkC,EAAOf,MAAM8kB,cAAcntB,KAAK,SAAAtM,GAC5B0V,EAAOlC,MAAM8J,SAAWtd,EACxByL,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,oBAI5CkC,EAAOf,MAAM+kB,gBAAgBptB,KAAK,SAAAwX,GAC9BpO,EAAOlC,MAAME,WAAaoQ,EAC1BhH,SAAS0C,MAAMve,KAAKyU,KAGxBA,EAAOf,MAAM3J,GAAG,YAAa,SAAAsC,GpC44K/B,IAAIqsB,EAAYrsB,EoC54KkBgb,KACtBsR,QADsC,IAAAD,EAAT,GAASA,GAClBrxB,IAAI,SAAA2B,GpC84KlC,OoC94KyCqO,UAAUrO,EAAI0D,QACnDmP,SAAS+K,WAAW5mB,KAAKyU,EAAQkkB,KAGrClkB,EAAOf,MAAM3J,GAAG,SAAU,YAEtB0K,EAAOf,MAAMklB,YAAYvtB,KAAK,SAAAuJ,GAC1BmiB,oBAAoB/2B,KAAKyU,GAASG,GAC7BA,GACDpK,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,aAI5CnP,KAAGjC,QAAQsT,EAAOf,MAAMvS,UAAYsT,EAAOpL,UAAUuI,KACvC6C,EAAOf,MAAMvS,QAIrBqL,aAAa,YAAa,KAIxCiI,EAAOf,MAAM3J,GAAG,OAAQ,WACpBgtB,oBAAoB/2B,KAAKyU,GAAQ,GACjCjK,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,aAG5CkC,EAAOf,MAAM3J,GAAG,QAAS,WACrBgtB,oBAAoB/2B,KAAKyU,GAAQ,KAGrCA,EAAOf,MAAM3J,GAAG,aAAc,SAAA4P,GAC1BlF,EAAOlC,MAAMgP,SAAU,EACvB5M,EAAcgF,EAAKkf,QACnBruB,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,gBAG5CkC,EAAOf,MAAM3J,GAAG,WAAY,SAAA4P,GACxBlF,EAAOlC,MAAMsO,SAAWlH,EAAKhU,QAC7B6E,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,YAGL,IAA/BumB,SAASnf,EAAKhU,QAAS,KACvB6E,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,kBAK5CkC,EAAOf,MAAM8kB,cAAcntB,KAAK,SAAAtM,GACxBA,IAAU0V,EAAOlC,MAAM8J,WACvB5H,EAAOlC,MAAM8J,SAAWtd,EACxByL,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,uBAKpDkC,EAAOf,MAAM3J,GAAG,SAAU,WACtB0K,EAAOlC,MAAMgP,SAAU,EACvB/W,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,YAG5CkC,EAAOf,MAAM3J,GAAG,QAAS,WACrB0K,EAAOlC,MAAMqC,QAAS,EACtBpK,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,WAG5CkC,EAAOf,MAAM3J,GAAG,QAAS,SAAAW,GACrB+J,EAAOlC,MAAMiK,MAAQ9R,EACrBF,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,WAI5CrH,WAAW,WpCs4Kb,OoCt4KmB0G,GAAGgd,MAAM5uB,KAAKyU,IAAS,KCrXhD,SAASoiB,UAAQ1tB,GrCmwLf,GqClwLM/F,KAAGS,MAAMsF,GrCmwLb,OqClwLW,KrCswLb,OqClwLSA,EAAIpF,MADG,gEACY8S,OAAOigB,GAAK3tB,EAI1C,SAAS4tB,sBAAoB/hB,GACrBA,IAASxT,KAAKkS,MAAMsjB,YrCmwLxBx1B,KqClwLSkS,MAAMsjB,WAAY,GAEvBx1B,KAAK+Q,MAAMqC,SAAWI,IrCowL1BxT,KqCnwLS+Q,MAAMqC,QAAUI,EACrBxK,aAAaxK,KAAKwB,KAAMA,KAAK+Q,MAAOyC,EAAO,OAAS,UAI5D,SAAS+jB,QAAQl0B,GrCowLf,OqCnwLMA,EAAO2mB,SACA,mCAGsB,UAA7BzjB,OAAOkT,SAAS+K,SACT,8BrCkwLb,EqC3vLF,IAAMnO,QAAU,CACZ0G,MADY,WrCqwLZ,IAAIhZ,EAAQ/D,KqClwLR+M,YAAY/M,KAAK2J,SAASI,QAAS/J,KAAKqD,OAAO6K,WAAWgE,OAAO,GAGjEC,eAAe3T,KAAKwB,MAGhB4B,KAAGE,OAAOyE,OAAOixB,KAAO51B,KAAGM,SAASqE,OAAOixB,GAAG3B,QAC9Cxf,QAAQ9M,MAAM/K,KAAKwB,OAGnBo1B,WAAWp1B,KAAKqD,OAAOogB,KAAKpN,QAAQ+R,KAAK3P,MAAM,SAAAuC,GAC3CjX,EAAK8P,MAAMoH,KAAK,6BAA8BD,KAKlDzU,OAAOkxB,wBAA0BlxB,OAAOkxB,yBAA2B,GAGnElxB,OAAOkxB,wBAAwBt4B,KAAK,WAChCkX,QAAQ9M,MAAM/K,KAAKuF,KAIvBwC,OAAOmxB,wBAA0B,WAC7BnxB,OAAOkxB,wBAAwBxzB,QAAQ,SAAAgE,GACnCA,SAOhB0vB,SApCY,SAoCHC,GrCgwLT,IAAIlvB,EAAS1I,KAKb,GqCjwLQ4B,KAAGM,SAASlC,KAAKkS,MAAM2lB,cAAe,CrCkwL5C,IqCjwLcnhB,EAAU1W,KAAKkS,MAAM2lB,eAArBnhB,MrCowLd,GqClwLU9U,KAAGS,MAAMqU,GrCqwLjB,OAFA1W,KqClwLaqD,OAAOqT,MAAQA,OACpBtG,GAAGkd,SAAS9uB,KAAKwB,MrCwwL7B,IqClwLUjD,EAAMiD,KAAKqD,OAAO1B,KAAK+nB,OACzB9nB,KAAGI,OAAOjF,KAAS6E,KAAGS,MAAMtF,IAG5Boa,MAFYlC,OAAOjV,KAAKqD,OAAOogB,KAAKpN,QAAQlG,IAAKynB,EAAS76B,IAGrD8M,KAAK,SAAA2O,GACE5W,KAAGE,OAAO0W,KACV9P,EAAKrF,OAAOqT,MAAQ8B,EAAOsf,MAAM,GAAGC,QAAQrhB,MAC5CtG,GAAGkd,SAAS9uB,KAAKkK,MAGxB+P,MAAM,eAKnBlP,MAnEY,WrCm0LZ,IqC/vLU0J,EAASjT,KAGTg4B,EAAY/kB,EAAOlC,MAAMxM,aAAa,MrCgwLhD,GqC/vLS3C,KAAGS,MAAM21B,KAAcA,EAAU/wB,WAAW,YrC+vLrD,CAKA,IqC/vLQ6L,EAASG,EAAOlC,MAAMxM,aAAa,OAGnC3C,KAAGS,MAAMyQ,KACTA,EAASG,EAAOlC,MAAMxM,aAAavE,KAAKqD,OAAOsH,WAAWuH,MAAMxF,KrCkwLxE,IqC9vLUkrB,EAAUvC,UAAQviB,GAClBpG,EAAKmI,WAAW5B,EAAOjD,UAMvBpG,EAAYqB,cAAc,MAAO,CAAEyB,GAAAA,EAAI+b,OAH1BxV,EAAXwV,SAIRxV,EAAOlC,MAAQpF,eAAe/B,EAAWqJ,EAAOlC,OrCiwLpD,IqC9vLUknB,EAAY,SAAAhjB,GrC+vLpB,MAAO,0BAA0BzS,OqC/vLuBo1B,EAA9B,KAAAp1B,OAAyCyS,EAAzC,gBAGxB0X,UAAUsL,EAAU,UAAW,KAC1Bxf,MAAM,WrCiwLb,OqCjwLmBkU,UAAUsL,EAAU,MAAO,OACvCxf,MAAM,WrCmwLb,OqCnwLmBkU,UAAUsL,EAAU,SAChCpuB,KAAK,SAAAgjB,GrCqwLZ,OqCrwLqBzc,GAAGmd,UAAU/uB,KAAKyU,EAAQ4Z,EAAMtZ,OAC9C1J,KAAK,SAAAouB,GAEGA,EAAUl4B,SAAS,YACpBkT,EAAOtJ,SAAS8e,OAAOhlB,MAAMkqB,eAAiB,WAGrDlV,MAAM,crCqwLf,IqCnwLUpV,EAAS4P,EAAO5P,OAAOgT,QAI7BpD,EAAOf,MAAQ,IAAI3L,OAAOixB,GAAG3B,OAAOnpB,EAAI,CACpCkrB,QAAAA,EACAle,KAAM6d,QAAQl0B,GACd60B,WAAYllB,OACR,GACA,CACIkT,SAAUjT,EAAO5P,OAAO6iB,SAAW,EAAI,EACvCiS,GAAIllB,EAAO5P,OAAO80B,GAClB9e,SAAUpG,EAAOpL,UAAUuI,GAAK,EAAI,EACpCgoB,UAAW,EACXnoB,YAAcgD,EAAO5P,OAAOiX,WAAWwM,UAAgB,EAAJ,EAEnDuR,eAAgBplB,EAAOoH,SAASwK,OAAS,EAAI,EAC7CyT,aAAcrlB,EAAO5P,OAAOgX,SAASmH,SAErC+W,gBAAiBhyB,OAASA,OAAOkT,SAAS+J,KAAO,MAErDngB,GAEJ+E,OAAQ,CACJowB,QADI,SACIr4B,GrCqwLd,IqCnwLe8S,EAAOlC,MAAMiK,MAAO,CrCowLjC,IqCnwLkB2T,EAAOxuB,EAAMgY,KAEbsgB,EACF,CrCmwLdC,EqClwLqB,uOrCmwLrBC,EqClwLqB,uHrCmwLrBC,IqClwLuB,qIrCmwLvBC,IqClwLuB,uFrCmwLvBC,IqClwLuB,wFACPnK,IAAS,2BAEf1b,EAAOlC,MAAMiK,MAAQ,CAAE2T,KAAAA,EAAM8J,QAAAA,GAE7BzvB,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,WAGhDgoB,qBApBI,SAoBiB54B,GrCqwL3B,IqCnwLgB64B,EAAW74B,EAAM9D,OAGvB4W,EAAOlC,MAAMkoB,aAAeD,EAASE,kBAErClwB,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,eAE5CooB,QA7BI,SA6BIh5B,GrCmwLd,IqCjwLcyB,KAAGM,SAAS+Q,EAAOlC,MAAMyC,MrCiwLvC,CAKA,IqClwLgBwlB,EAAW74B,EAAM9D,OAGvBga,QAAQshB,SAASn5B,KAAKyU,EAAQ2kB,GAG9B3kB,EAAOlC,MAAMyC,KAAO,WAChB+hB,sBAAoB/2B,KAAKyU,GAAQ,GACjC+lB,EAASI,aAGbnmB,EAAOlC,MAAMgJ,MAAQ,WACjBwb,sBAAoB/2B,KAAKyU,GAAQ,GACjC+lB,EAASK,cAGbpmB,EAAOlC,MAAMglB,KAAO,WAChBiD,EAASM,aAGbrmB,EAAOlC,MAAM8J,SAAWme,EAAShC,cACjC/jB,EAAOlC,MAAMqC,QAAS,EAGtBH,EAAOlC,MAAMoC,YAAc,EAC3BtW,OAAOC,eAAemW,EAAOlC,MAAO,cAAe,CAC/C/L,IAD+C,WrCiwLzD,OqC/vLqBlE,OAAOk4B,EAASjC,mBAE3B7yB,IAJ+C,SAI3C6U,GAEI9F,EAAOG,SAAWH,EAAOf,MAAMsjB,WAC/BviB,EAAOf,MAAMiI,OAIjBlH,EAAOlC,MAAMgP,SAAU,EACvB/W,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,WAGxCioB,EAAS5H,OAAOrY,MAKxBlc,OAAOC,eAAemW,EAAOlC,MAAO,eAAgB,CAChD/L,IADgD,WrC+vL1D,OqC7vLqBg0B,EAASE,mBAEpBh1B,IAJgD,SAI5C3D,GACAy4B,EAAS7C,gBAAgB51B,MrCiwL3C,IqC5vLgBma,EAAWzH,EAAO5P,OAAlBqX,OACN7d,OAAOC,eAAemW,EAAOlC,MAAO,SAAU,CAC1C/L,IAD0C,WrC8vLpD,OqC5vLqB0V,GAEXxW,IAJ0C,SAItC3D,GACAma,EAASna,EACTy4B,EAAS/C,UAAmB,IAATvb,GACnB1R,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,mBrCgwL1D,IqC3vLgBgO,EAAU9L,EAAO5P,OAAjB0b,MACNliB,OAAOC,eAAemW,EAAOlC,MAAO,QAAS,CACzC/L,IADyC,WrC6vLnD,OqC3vLqB+Z,GAEX7a,IAJyC,SAIrC3D,GrC4vLd,IqC3vLoBuD,EAASlC,KAAGK,QAAQ1B,GAASA,EAAQwe,EAC3CA,EAAQjb,EACRk1B,EAASl1B,EAAS,OAAS,YAC3BkF,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,mBAKhDlU,OAAOC,eAAemW,EAAOlC,MAAO,aAAc,CAC9C/L,IAD8C,WrC4vLxD,OqC1vLqBg0B,EAASzC,iBAKxB15B,OAAOC,eAAemW,EAAOlC,MAAO,QAAS,CACzC/L,IADyC,WrC2vLnD,OqCzvLqBiO,EAAOE,cAAgBF,EAAO4H,YAK7C5H,EAAOhQ,QAAQ0b,MAAQqa,EAASO,4BAG5BtmB,EAAOpL,UAAUuI,IACjB6C,EAAOlC,MAAM/F,aAAa,YAAa,GAG3ChC,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,cACxC/H,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,kBAGxCyoB,cAAcvmB,EAAO8a,OAAO0L,WAG5BxmB,EAAO8a,OAAO0L,UAAYC,YAAY,WAElCzmB,EAAOlC,MAAMsO,SAAW2Z,EAASW,0BAGC,OAA9B1mB,EAAOlC,MAAM6oB,cAAyB3mB,EAAOlC,MAAM6oB,aAAe3mB,EAAOlC,MAAMsO,WAC/ErW,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,YAI5CkC,EAAOlC,MAAM6oB,aAAe3mB,EAAOlC,MAAMsO,SAGX,IAA1BpM,EAAOlC,MAAMsO,WACbma,cAAcvmB,EAAO8a,OAAO0L,WAG5BzwB,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,oBAE7C,KAGHrH,WAAW,WrCkvLnB,OqClvLyB0G,GAAGgd,MAAM5uB,KAAKyU,IAAS,MAE5C4mB,cAzKI,SAyKU15B,GrCqvLpB,IqCnvLgB64B,EAAW74B,EAAM9D,OrCqwLjC,OqClwLUm9B,cAAcvmB,EAAO8a,OAAOnF,SAEb3V,EAAOlC,MAAMgP,SAAW,CAAC,EAAG,GAAGhgB,SAASI,EAAMgY,QAIzDlF,EAAOlC,MAAMgP,SAAU,EACvB/W,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,WAUpC5Q,EAAMgY,MrCkvLtB,KqCjvLkB,EAEFnP,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,cAGxCkC,EAAOlC,MAAMsO,SAAW2Z,EAASW,yBACjC3wB,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,YrCivLtD,MAEF,KqC/uLiB,EACDwkB,sBAAoB/2B,KAAKyU,GAAQ,GAG7BA,EAAOlC,MAAM0V,MAEbuS,EAASM,YACTN,EAASI,aAETpwB,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,SrCivL1D,MAEF,KqC9uLiB,EAEIkC,EAAO5P,OAAO6iB,WAAYjT,EAAOlC,MAAMqC,QAAWH,EAAOf,MAAMsjB,WAGhED,sBAAoB/2B,KAAKyU,GAAQ,GAEjCjK,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,WAGxCkC,EAAO8a,OAAOnF,QAAU8Q,YAAY,WAChC1wB,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,eACzC,IAKCkC,EAAOlC,MAAM8J,WAAame,EAAShC,gBACnC/jB,EAAOlC,MAAM8J,SAAWme,EAAShC,cACjChuB,aAAaxK,KAAKyU,EAAQA,EAAOlC,MAAO,oBAhB5CkC,EAAOlC,MAAMgJ,QrC+vL/B,MAEF,KqC3uLiB,EAEI9G,EAAO8L,OACR9L,EAAOf,MAAM4nB,SAEjBvE,sBAAoB/2B,KAAKyU,GAAQ,GAQzCjK,aAAaxK,KAAKyU,EAAQA,EAAOtJ,SAASC,UAAW,eAAe,EAAO,CACvE+kB,KAAMxuB,EAAMgY,cC7a9BpH,MAAQ,CAEVgM,MAFU,WAID/c,KAAK+Q,OAMVhE,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWhO,KAAKoM,QAAQ,MAAOtM,KAAKE,OAAO,GAG5F6M,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAW8B,SAAS1D,QAAQ,MAAOtM,KAAKgQ,WAAW,GAIhGhQ,KAAK0jB,SACL3W,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWhO,KAAKoM,QAAQ,MAAO,UAAU,GAI1FtM,KAAKoS,UtCiqMXpS,KsC/pMW2J,SAASI,QAAUkB,cAAc,MAAO,CACzCwB,MAAOzM,KAAKqD,OAAO6K,WAAW4B,QAIlChG,KAAK9J,KAAK+Q,MAAO/Q,KAAK2J,SAASI,StCgqMrC/J,KsC7pMW2J,SAAS8e,OAASxd,cAAc,MAAO,CACxCwB,MAAOzM,KAAKqD,OAAO6K,WAAWua,StC+pMxCzoB,KsC5pMW2J,SAASI,QAAQS,YAAYxK,KAAK2J,SAAS8e,SAGhDzoB,KAAK8Q,QACL8B,MAAMI,OAAOxU,KAAKwB,MACXA,KAAKukB,UACZlO,QAAQ0G,MAAMve,KAAKwB,MACZA,KAAKwS,SACZ4D,MAAM2G,MAAMve,KAAKwB,OtC0nMvBA,KsCjqMW6T,MAAMoH,KAAK,6BCEtB8e,IvCwsMN,WAME,SAASA,EuCxsMK9mB,GvCysMZ,IAAIlP,EAAQ/D,KAEZkD,gBAAgBlD,KAAM+5B,GAEtB/5B,KuC5sMSiT,OAASA,EvC6sMlBjT,KuC5sMSqD,OAAS4P,EAAO5P,OAAOslB,IvC6sMhC3oB,KuC5sMS4oB,SAAU,EvC6sMnB5oB,KuC5sMSg6B,aAAc,EvC6sMvBh6B,KuC5sMS2J,SAAW,CACZC,UAAW,KACXqwB,iBAAkB,MvC8sM1Bj6B,KuC5sMSk6B,QAAU,KvC6sMnBl6B,KuC5sMSm6B,OAAS,KvC6sMlBn6B,KuC5sMSo6B,UAAY,KvC6sMrBp6B,KuC5sMSoI,OAAS,GvC6sMlBpI,KuC5sMSq6B,YAAc,KvC6sMvBr6B,KuC5sMSs6B,eAAiB,KvC8sM1Bt6B,KuC3sMSu6B,eAAiB,IAAIzzB,QAAQ,SAAC2C,EAAS4N,GAExCtT,EAAKwE,GAAG,SAAUkB,GAGlB1F,EAAKwE,GAAG,QAAS8O,KvC6sMzBrX,KuC1sMSyT,OvCsxNX,OAzkBAzW,aAAa+8B,EAAK,CAAC,CACjBh9B,IAAK,OAKLQ,MAAO,WACL,IAAImL,EAAS1I,KuClsMPA,KAAKwD,UAEA5B,KAAGE,OAAOyE,OAAOmjB,SAAY9nB,KAAGE,OAAOyE,OAAOmjB,OAAO8Q,KvC4sM5Dx6B,KuClsMWuJ,QATL6rB,WAAWp1B,KAAKiT,OAAO5P,OAAOogB,KAAK6E,UAAUF,KACxCve,KAAK,WACFnB,EAAKa,UAERkP,MAAM,WAEH/P,EAAKzI,QAAQ,QAAS,IAAIyX,MAAM,uCvC6sMnD,CACD3a,IAAK,QACLQ,MAAO,WACL,IAAIiM,EAASxJ,KAIbA,KuCtsMOy6B,iBAAiB,KAAO,WvCwsM/Bz6B,KuCrsMOu6B,eAAe1wB,KAAK,WACrBL,EAAKkxB,iBAAiB,0BvCwsM5B16B,KuCpsMO6D,YvCssMP7D,KuCnsMO26B,avCssMR,CACD59B,IAAK,WAULQ,MAAO,WAELyC,KuC/qMO2J,SAASC,UAAYqB,cAAc,MAAO,CAC3CwB,MAAOzM,KAAKiT,OAAO5P,OAAO6K,WAAWya,MvCirM3C3oB,KuC9qMOiT,OAAOtJ,SAASC,UAAUY,YAAYxK,KAAK2J,SAASC,WAGzD8f,OAAO8Q,IAAIpgB,SAASwgB,aAAalR,OAAO8Q,IAAIK,eAAeC,UAAUC,SAGrErR,OAAO8Q,IAAIpgB,SAAS4gB,UAAUh7B,KAAKiT,OAAO5P,OAAOslB,IAAInH,UAGrDkI,OAAO8Q,IAAIpgB,SAAS6gB,qCAAqCj7B,KAAKiT,OAAO5P,OAAO4M,avC6qM9EjQ,KuC1qMO2J,SAASswB,iBAAmB,IAAIvQ,OAAO8Q,IAAIU,mBAAmBl7B,KAAK2J,SAASC,UAAW5J,KAAKiT,OAAOlC,OvC4qM1G/Q,KuCzqMOm7B,evC+qMR,CACDp+B,IAAK,aACLQ,MAAO,WACL,IAAIiiB,EAASxf,KuC3qMH4J,EAAc5J,KAAKiT,OAAOtJ,SAA1BC,UvC+qMV,IAEE5J,KuC7qMSm6B,OAAS,IAAIzQ,OAAO8Q,IAAIY,UAAUp7B,KAAK2J,SAASswB,kBvC+qMzDj6B,KuC5qMSm6B,OAAOryB,iBACR4hB,OAAO8Q,IAAIa,sBAAsBC,KAAKC,mBACtC,SAAAp7B,GvC2qMN,OuC3qMeqf,EAAKgc,mBAAmBr7B,KACjC,GvC4qMRH,KuC1qMSm6B,OAAOryB,iBAAiB4hB,OAAO8Q,IAAIiB,aAAaH,KAAKI,SAAU,SAAA1gB,GvC2qMtE,OuC3qM+EwE,EAAKmc,UAAU3gB,KAAQ,GvC8qMxG,IuC3qMU1D,EAAU,IAAIoS,OAAO8Q,IAAIoB,WAC/BtkB,EAAQukB,SAAW77B,KAAK4pB,OAIxBtS,EAAQwkB,kBAAoBlyB,EAAUmyB,YACtCzkB,EAAQ0kB,mBAAqBpyB,EAAU8E,aACvC4I,EAAQ2kB,qBAAuBryB,EAAUmyB,YACzCzkB,EAAQ4kB,sBAAwBtyB,EAAU8E,aAG1C4I,EAAQ6kB,wBAAyB,EAGjC7kB,EAAQ8kB,oBAAoBp8B,KAAKiT,OAAO8L,OvCyqM5C/e,KuCvqMSm6B,OAAOgB,WAAW7jB,GACzB,MAAOnQ,GvCwqMTnH,KuCvqMS27B,UAAUx0B,MvC+qMtB,CACDpK,IAAK,gBACLQ,MAAO,WACL,IAAIqjB,EAAS5gB,KAIb,KuC9qM2BiF,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,IvCirMzB,OuC/qMIu0B,cAAcx5B,KAAKs6B,qBvC8qMvBt6B,KuC7qMS2J,SAASC,UAAUkD,gBAAgB,mBvCwrM9C9M,KuC9qMOs6B,eAAiBZ,YANP,WvC8qMf,IuC7qMU3gB,EAAOD,WAAWrW,KAAKC,IAAIke,EAAKsZ,QAAQmC,mBAAoB,IAC5DlgB,EAAK,GAAA3Z,OAAM8T,KAAKtR,IAAI,gBAAiB4b,EAAK3N,OAAO5P,QAA5C,OAAAb,OAAyDuW,GACpE6H,EAAKjX,SAASC,UAAUoB,aAAa,kBAAmBmR,IAGlB,OvCqrM7C,CACDpf,IAAK,qBACLQ,MAAO,SuChrMY4C,GvCirMjB,IAAIihB,EAASphB,KAGb,GuClrMOA,KAAKwD,QvCkrMZ,CAKA,IuClrMQ4W,EAAW,IAAIsP,OAAO8Q,IAAI8B,qBAGhCliB,EAASmiB,6CAA8C,EACvDniB,EAASoiB,kBAAmB,EvCorM9Bx8B,KuChrMOk6B,QAAU/5B,EAAMs8B,cAAcz8B,KAAKiT,OAAQmH,GvCkrMlDpa,KuC/qMOo6B,UAAYp6B,KAAKk6B,QAAQwC,evCirMhC18B,KuC9qMOk6B,QAAQjE,UAAUj2B,KAAKiT,OAAOyH,QvCirMrC1a,KuC7qMOk6B,QAAQpyB,iBAAiB4hB,OAAO8Q,IAAIiB,aAAaH,KAAKI,SAAU,SAAA1gB,GvC8qMrE,OuC9qM8EoG,EAAKua,UAAU3gB,KAG7Fne,OAAO8E,KAAK+nB,OAAO8Q,IAAImC,QAAQrB,MAAMr3B,QAAQ,SAAA/D,GACzCkhB,EAAK8Y,QAAQpyB,iBAAiB4hB,OAAO8Q,IAAImC,QAAQrB,KAAKp7B,GAAO,SAAAC,GvC+qM/D,OuC/qMwEihB,EAAKwb,UAAUz8B,OvCmrM3FH,KuC/qMOC,QAAQ,avCirMhB,CACDlD,IAAK,eACLQ,MAAO,WACL,IAAIokB,EAAS3hB,KuC/qMN4B,KAAGS,MAAMrC,KAAKo6B,YvCmrMnBp6B,KuClrMSo6B,UAAUn2B,QAAQ,SAAA44B,GvCmrMzB,GuClrMuB,IAAbA,IAAgC,IAAdA,GAAmBA,EAAWlb,EAAK1O,OAAO4H,SAAU,CvCmrM9E,IuClrMciiB,EAAcnb,EAAK1O,OAAOtJ,SAAS4Q,SvCorMjD,GuClrMY3Y,KAAGjC,QAAQm9B,GAAc,CvCmrMnC,IuClrMgBC,EAAiB,IAAMpb,EAAK1O,OAAO4H,SAAYgiB,EAC/Cr1B,EAAMyD,cAAc,OAAQ,CAC9BwB,MAAOkV,EAAK1O,OAAO5P,OAAO6K,WAAW2X,OAGzCre,EAAI/D,MAAMoB,KAAV,GAAArC,OAAoBu6B,EAAcx+B,WAAlC,KACAu+B,EAAYtyB,YAAYhD,SvC8rM3C,CACDzK,IAAK,YACLQ,MAAO,SuCnrMG4C,GvCorMR,IAAIuiB,EAAS1iB,KuCnrMH4J,EAAc5J,KAAKiT,OAAOtJ,SAA1BC,UAIFozB,EAAK78B,EAAM88B,QACXC,EAAS/8B,EAAMg9B,YAGf98B,EAAgB,SAAAH,GvCorMtB,IuCnrMUC,EAAK,MAAAqC,OAAStC,EAAKoM,QAAQ,KAAM,IAAImJ,eAC3CzM,aAAaxK,KAAKkkB,EAAKzP,OAAQyP,EAAKzP,OAAOlC,MAAO5Q,IvCsrMxD,OuCnrMUA,EAAMD,MvCorMd,KuCnrMSwpB,OAAO8Q,IAAImC,QAAQrB,KAAK8B,OvCsrM/Bp9B,KuCnrMWC,QAAQ,UAGbI,EAAcF,EAAMD,MvCorM1BF,KuCjrMWq9B,eAAc,GAEdL,EAAGM,aAEJN,EAAGr4B,MAAQiF,EAAUmyB,YACrBiB,EAAGrrB,OAAS/H,EAAU8E,cvCsrMhC,MAEF,KuCjrMSgb,OAAO8Q,IAAImC,QAAQrB,KAAKiC,kBAKzBl9B,EAAcF,EAAMD,MvCssM1BF,KuC7qMWw9B,UvC8qMX,MAEF,KuC7qMS9T,OAAO8Q,IAAImC,QAAQrB,KAAKmC,wBAKzBp9B,EAAcF,EAAMD,MvC6qM1BF,KuC3qMW09B,evC4qMX,MAEF,KuC1qMShU,OAAO8Q,IAAImC,QAAQrB,KAAKqC,yBAMzBt9B,EAAcF,EAAMD,MvC0qM1BF,KuCxqMWq9B,gBvCyqMXr9B,KuCvqMW49B,gBvCwqMX,MAEF,KuCtqMSlU,OAAO8Q,IAAImC,QAAQrB,KAAKuC,QvCuqMjC,KuCtqMSnU,OAAO8Q,IAAImC,QAAQrB,KAAKwC,SvCuqMjC,KuCtqMSpU,OAAO8Q,IAAImC,QAAQrB,KAAKyC,SvCuqMjC,KuCtqMSrU,OAAO8Q,IAAImC,QAAQrB,KAAK0C,WvCuqMjC,KuCtqMStU,OAAO8Q,IAAImC,QAAQrB,KAAK2C,MACzB59B,EAAcF,EAAMD,MvCuqM1B,MAEF,KuCtqMSwpB,OAAO8Q,IAAImC,QAAQrB,KAAK4C,IACrBhB,EAAOiB,SvCuqMfn+B,KuCtqMaiT,OAAOY,MAAMoH,KAAlB,uBAAAzY,OAA8C06B,EAAOiB,QAAQC,kBvCorM5E,CACDrhC,IAAK,YACLQ,MAAO,SuCzqMG4C,GvC0qMRH,KuCzqMOq+B,SvC0qMPr+B,KuCzqMOiT,OAAOY,MAAMoH,KAAK,YAAa9a,KvCirMvC,CACDpD,IAAK,YACLQ,MAAO,WACL,IuC1qMMwb,EvC0qMFkK,EAASjjB,KuC3qMH4J,EAAc5J,KAAKiT,OAAOtJ,SAA1BC,UvC+qMV5J,KuC5qMOiT,OAAO1K,GAAG,UAAW,WACtB0a,EAAKqb,iBvC8qMXt+B,KuC3qMOiT,OAAO1K,GAAG,QAAS,WACpB0a,EAAKkX,OAAOoE,oBvC6qMlBv+B,KuC1qMOiT,OAAO1K,GAAG,aAAc,WACzBwQ,EAAOkK,EAAKhQ,OAAOE,cvC4qMzBnT,KuCzqMOiT,OAAO1K,GAAG,SAAU,WvC0qMzB,IuCzqMUi2B,EAAavb,EAAKhQ,OAAOE,YAE3BvR,KAAGS,MAAM4gB,EAAKmX,YAIlBnX,EAAKmX,UAAUn2B,QAAQ,SAAC44B,EAAU5yB,GAC1B8O,EAAO8jB,GAAYA,EAAW2B,IAC9Bvb,EAAKiX,QAAQuE,iBACbxb,EAAKmX,UAAUpH,OAAO/oB,EAAO,QAOzC1D,OAAOuB,iBAAiB,SAAU,WAC1Bmb,EAAKiX,SACLjX,EAAKiX,QAAQwE,OAAO90B,EAAUmyB,YAAanyB,EAAU8E,aAAcgb,OAAO8Q,IAAImE,SAASC,YvCirMlG,CACD7hC,IAAK,OACLQ,MAAO,WACL,IAAIqmB,EAAU5jB,KuC3qMJ4J,EAAc5J,KAAKiT,OAAOtJ,SAA1BC,UAEH5J,KAAKu6B,gBvC8qMVv6B,KuC7qMS49B,gBvCirMX59B,KuC7qMOu6B,eACA1wB,KAAK,WAEF+Z,EAAKja,SAASswB,iBAAiB4E,avC8qMvC,IuC3qMiBjb,EAAKoW,cAENpW,EAAKsW,QAAQ32B,KAAKqG,EAAUmyB,YAAanyB,EAAU8E,aAAcgb,OAAO8Q,IAAImE,SAASC,QAIrFhb,EAAKsW,QAAQ1S,SAGjB5D,EAAKoW,aAAc,EACrB,MAAOmE,GAGLva,EAAK+X,UAAUwC,MAGtB1lB,MAAM,gBvCirMd,CACD1b,IAAK,gBACLQ,MAAO,WAELyC,KuC7qMO2J,SAASC,UAAUnG,MAAMq7B,OAAS,GvC+qMzC9+B,KuC5qMO4oB,SAAU,EvC8qMjB5oB,KuC3qMOiT,OAAOlC,MAAMyC,SvCirMrB,CACDzW,IAAK,eACLQ,MAAO,WAELyC,KuC7qMO2J,SAASC,UAAUnG,MAAMq7B,OAAS,EvC+qMzC9+B,KuC5qMO4oB,SAAU,EvC8qMjB5oB,KuC3qMOiT,OAAOlC,MAAMgJ,UvCorMrB,CACDhd,IAAK,SACLQ,MAAO,WuC3qMCyC,KAAKg6B,avC8qMTh6B,KuC7qMS49B,gBvCirMX59B,KuC7qMOC,QAAQ,SvC+qMfD,KuC5qMOw9B,YvCkrMR,CACDzgC,IAAK,UACLQ,MAAO,WACL,IAAIwhC,EAAU/+B,KAGdA,KuChrMOu6B,eACA1wB,KAAK,WAEEk1B,EAAK7E,SACL6E,EAAK7E,QAAQ8E,UAIjBD,EAAKxE,eAAiB,IAAIzzB,QAAQ,SAAA2C,GAC9Bs1B,EAAKx2B,GAAG,SAAUkB,GAClBs1B,EAAK9rB,OAAOY,MAAMC,IAAIirB,EAAK7E,WAI/B6E,EAAK5D,eAER1iB,MAAM,gBvCqrMd,CACD1b,IAAK,UACLQ,MAAO,SuChrMC4C,GvCmrMN,IAFA,IAAI8+B,EAAUj/B,KAEL4I,EAAO3D,UAAUzI,OuCnrMVqM,EAAM,IAAA5K,MAAA2K,EAAA,EAAAA,EAAA,EAAA,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAND,EAAMC,EAAA,GAAA7D,UAAA6D,GvCurMtB,IuCtrMQo2B,EAAWl/B,KAAKoI,OAAOjI,GAEzByB,KAAGO,MAAM+8B,IACTA,EAASj7B,QAAQ,SAAA8oB,GACTnrB,KAAGM,SAAS6qB,IACZA,EAAQhkB,MAAMk2B,EAAMp2B,OvCksMnC,CACD9L,IAAK,KACLQ,MAAO,SuCxrMJ4C,EAAO8H,GvC8rMR,OuC7rMOrG,KAAGO,MAAMnC,KAAKoI,OAAOjI,MvCyrM1BH,KuCxrMSoI,OAAOjI,GAAS,IvC2rM3BH,KuCxrMOoI,OAAOjI,GAAOhB,KAAK8I,GAEjBjI,OvCksMV,CACDjD,IAAK,mBACLQ,MAAO,SuCzrMUwb,EAAMta,GvC0rMrB,IAAI0gC,EAAUn/B,KAEdA,KuC3rMOiT,OAAOY,MAAMC,IAAlB,8BAAAtR,OAAoD/D,IvC4rMtDuB,KuC1rMOq6B,YAAc3wB,WAAW,WAC1By1B,EAAKd,SACLc,EAAKzE,iBAAiB,uBACvB3hB,KvCksMN,CACDhc,IAAK,mBACLQ,MAAO,SuC7rMUkB,GACRmD,KAAGC,gBAAgB7B,KAAKq6B,evC8rM7Br6B,KuC7rMSiT,OAAOY,MAAMC,IAAlB,8BAAAtR,OAAoD/D,IAEpDqvB,aAAa9tB,KAAKq6B,avC6rMtBr6B,KuC5rMSq6B,YAAc,QvC+rM1B,CACDt9B,IAAK,UACLiI,IAAK,WACH,IuCxvNU3B,EAAWrD,KAAXqD,OvCyvNV,OuCtvNMrD,KAAKiT,OAAOnC,SACZ9Q,KAAKiT,OAAOb,SACZ/O,EAAOG,WACL5B,KAAGS,MAAMgB,EAAOsmB,cAAgB/nB,KAAG+F,IAAItE,EAAOumB,WvCqvNvD,CACD7sB,IAAK,SACLiI,IAAK,WACH,IuCzsNU3B,EAAWrD,KAAXqD,OvC2sNV,GuCzsNMzB,KAAG+F,IAAItE,EAAOumB,QvC0sNlB,OuCzsNWvmB,EAAOumB,OvC4sNpB,IuCzsNQvF,EAAS,CACX+a,eAAgB,2BAChBC,aAAc,2BACdC,OAAQ/4B,OAAOkT,SAASvS,SACxBq4B,GAAIrR,KAAKC,MACTqR,SAAU,IACVC,UAAW,IACXC,SAAU1/B,KAAK2pB,avC4sNrB,MAAO,GAAGnnB,OuCzsNK,6CAEb,KAAAA,OAAkB4hB,eAAeC,QvC2sNhC0V,EA7mBT,GwCjtMM4F,SAAW,SAAAC,GxCk0Nf,IwCj0NQC,EAAgB,GxCy2NxB,OwCx2NiBD,EAAcv3B,MAAM,sBAE5BpE,QAAQ,SAAA67B,GxCi0Nf,IwCh0NUtnB,EAAS,GACDsnB,EAAMz3B,MAAM,cAEpBpE,QAAQ,SAAA87B,GxCg0NhB,GwC/zNWn+B,KAAGG,OAAOyW,EAAOwnB,YAkBf,IAAKp+B,KAAGS,MAAM09B,EAAK3zB,SAAWxK,KAAGS,MAAMmW,EAAOtN,MAAO,CxCuzNhE,IwCrzNc+0B,EAAYF,EAAK3zB,OAAO/D,MAAM,UxCuzNxC63B,EAAa1iC,ewCtzNOyiC,EAHwC,GxC8zNhE,GwC3zNSznB,EAAOtN,KAHgDg1B,EAAA,GAMpDD,EAAU,GAAI,CxCyzNxB,IAEIE,EAAsB3iC,ewC1zN2ByiC,EAAU,GAAG53B,MAAM,KxC0zNX,GwC1zNlDmQ,EAAOuS,EADMoV,EAAA,GACH3nB,EAAOyS,EADJkV,EAAA,GACO3nB,EAAO1G,EADdquB,EAAA,GACiB3nB,EAAOzG,EADxBouB,EAAA,SAxBY,CxCi0NtC,IwC/zNcC,EAAaL,EAAKx9B,MACpB,2GAGA69B,IACA5nB,EAAOwnB,UAC0B,GAA7Bl/B,OAAOs/B,EAAW,IAAM,GAAU,GACV,GAAxBt/B,OAAOs/B,EAAW,IAClBt/B,OAAOs/B,EAAW,IAClBt/B,OAAM,KAAA0B,OAAM49B,EAAW,KAC3B5nB,EAAO6nB,QAC0B,GAA7Bv/B,OAAOs/B,EAAW,IAAM,GAAU,GACV,GAAxBt/B,OAAOs/B,EAAW,IAClBt/B,OAAOs/B,EAAW,IAClBt/B,OAAM,KAAA0B,OAAM49B,EAAW,SAcnC5nB,EAAOtN,MACP20B,EAAc1gC,KAAKqZ,KAIpBqnB,GAcLS,kBxCg0NN,WAME,SAASA,EwCh0NKrtB,GxCi0NZ/P,gBAAgBlD,KAAMsgC,GAEtBtgC,KwCl0NSiT,OAASA,ExCm0NlBjT,KwCl0NSugC,WAAa,GxCm0NtBvgC,KwCl0NSqxB,QAAS,ExCm0NlBrxB,KwCl0NSwgC,kBAAoBtS,KAAKC,MxCm0NlCnuB,KwCl0NSygC,WAAY,ExCm0NrBzgC,KwCl0NS0gC,aAAe,GxCm0NxB1gC,KwCj0NS2J,SAAW,CACZg3B,MAAO,GACPC,UAAW,IxCm0NnB5gC,KwCh0NSyT,OxC84OX,OA3kBAzW,aAAasjC,EAAmB,CAAC,CAC/BvjC,IAAK,OACLQ,MAAO,WACL,IAAIwG,EAAQ/D,KwC7zNNA,KAAKiT,OAAOtJ,SAASgR,QAAQG,cxCi0NjC9a,KwCh0NSiT,OAAOtJ,SAASgR,QAAQG,YAAYlO,OAAS5M,KAAKwD,SAGtDxD,KAAKwD,SxCo0NZxD,KwCh0NO6gC,gBAAgBh3B,KAAK,WAEtB9F,EAAK+8B,SAGL/8B,EAAKg9B,+BAELh9B,EAAKstB,QAAS,MxCo0NrB,CACDt0B,IAAK,gBACLQ,MAAO,WACL,IAAImL,EAAS1I,KAEb,OwCn0NS,IAAI8G,QAAQ,SAAA2C,GxCo0NnB,IwCn0NY8J,EAAQ7K,EAAKuK,OAAO5P,OAAO8lB,kBAA3B5V,IxCq0NZ,GwCn0NQ3R,KAAGS,MAAMkR,GxCo0Nf,MwCn0NY,IAAImE,MAAM,kDxCu0NxB,IwCh0NUspB,GAHOp/B,KAAGI,OAAOuR,GAAO,CAACA,GAAOA,GAGhB1N,IAAI,SAAAo7B,GxCm0N5B,OwCn0NiCv4B,EAAKw4B,aAAaD,KAEjDn6B,QAAQ4gB,IAAIsZ,GAAUn3B,KAAK,WAEvBnB,EAAK63B,WAAWxf,KAAK,SAACgK,EAAGE,GxCo0N7B,OwCp0NmCF,EAAEpZ,OAASsZ,EAAEtZ,SAE5CjJ,EAAKuK,OAAOY,MAAMC,IAAI,qBAAsBpL,EAAK63B,YAEjD92B,UxC00NX,CACD1M,IAAK,eACLQ,MAAO,SwCt0NMoK,GxCu0NX,IAAI6B,EAASxJ,KAEb,OwCx0NS,IAAI8G,QAAQ,SAAA2C,GACf0N,MAAMxP,GAAKkC,KAAK,SAAA4N,GxCy0NlB,IwCx0NY0pB,EAAY,CACdC,OAAQzB,SAASloB,GACjB9F,OAAQ,KACR0vB,UAAW,IAMVF,EAAUC,OAAO,GAAGl2B,KAAKjE,WAAW,MACpCk6B,EAAUC,OAAO,GAAGl2B,KAAKjE,WAAW,YACpCk6B,EAAUC,OAAO,GAAGl2B,KAAKjE,WAAW,cACrCk6B,EAAUE,UAAY15B,EAAI25B,UAAU,EAAG35B,EAAI45B,YAAY,KAAO,IxCy0NxE,IwCr0NYC,EAAY,IAAI1U,MAEtB0U,EAAUxU,OAAS,WACfmU,EAAUxvB,OAAS6vB,EAAUC,cAC7BN,EAAUx8B,MAAQ68B,EAAUtU,aAE5B1jB,EAAK+2B,WAAWphC,KAAKgiC,GAErB13B,KAGJ+3B,EAAUjuB,IAAM4tB,EAAUE,UAAYF,EAAUC,OAAO,GAAGl2B,WxCy0NrE,CACDnO,IAAK,YACLQ,MAAO,SwCt0NG4C,GxCu0NR,GwCt0NOH,KAAKqxB,QAILzvB,KAAGzB,MAAMA,IAAW,CAAC,YAAa,aAAaJ,SAASI,EAAMD,OAK9DF,KAAKiT,OAAOlC,MAAM8J,SxCs0NzB,CAIA,GwCt0NqB,cAAf1a,EAAMD,KxCw0NVF,KwCt0NSwW,SAAWxW,KAAKiT,OAAOlC,MAAM8J,UAAY7a,KAAKiT,OAAOtJ,SAAS6Q,OAAOC,KAAKld,MAAQ,SACpF,CxCw0NP,IwCt0NUkH,EAAazE,KAAKiT,OAAOtJ,SAAS4Q,SAAS7V,wBAC3Cg9B,EAAc,IAAMj9B,EAAWE,OAAUxE,EAAMwf,MAAQlb,EAAWI,MxCu0N5E7E,KwCt0NSwW,SAAWxW,KAAKiT,OAAOlC,MAAM8J,UAAY6mB,EAAa,KAEvD1hC,KAAKwW,SAAW,IxCw0NtBxW,KwCt0NWwW,SAAW,GAGhBxW,KAAKwW,SAAWxW,KAAKiT,OAAOlC,MAAM8J,SAAW,IxCw0NnD7a,KwCt0NWwW,SAAWxW,KAAKiT,OAAOlC,MAAM8J,SAAW,GxCy0NrD7a,KwCt0NS2hC,UAAYxhC,EAAMwf,MxCw0N3B3f,KwCr0NS2J,SAASg3B,MAAM5nB,KAAK5N,UAAY2N,WAAW9Y,KAAKwW,UxCy0N3DxW,KwCr0NO4hC,4BxCu0NR,CACD7kC,IAAK,UACLQ,MAAO,WACLyC,KwCt0NO6hC,sBAAqB,GAAO,KxCw0NpC,CACD9kC,IAAK,iBACLQ,MAAO,SwCv0NQ4C,IAEU,IAAjBA,EAAMoc,QAAqC,IAAjBpc,EAAMoc,SxCw0NpCvc,KwCv0NSygC,WAAY,EAGbzgC,KAAKiT,OAAOlC,MAAM8J,WxCu0NxB7a,KwCt0NW8hC,0BAAyB,GxCu0NpC9hC,KwCt0NW6hC,sBAAqB,GAAO,GxCw0NvC7hC,KwCr0NW4hC,6BxCy0NhB,CACD7kC,IAAK,eACLQ,MAAO,WACL,IAAIiiB,EAASxf,KAEbA,KwCx0NOygC,WAAY,EAGbh+B,KAAKs/B,KAAK/hC,KAAKgiC,YAAcv/B,KAAKs/B,KAAK/hC,KAAKiT,OAAOlC,MAAMoC,axCy0N7DnT,KwCv0NS8hC,0BAAyB,GAG9Br5B,KAAKjK,KAAKwB,KAAKiT,OAAQjT,KAAKiT,OAAOlC,MAAO,aAAc,WAE/CyO,EAAKihB,WACNjhB,EAAKsiB,0BAAyB,OxCg1N7C,CACD/kC,IAAK,YACLQ,MAAO,WACL,IAAIqjB,EAAS5gB,KAGbA,KwC30NOiT,OAAO1K,GAAG,OAAQ,WACnBqY,EAAKihB,sBAAqB,GAAO,KxC60NvC7hC,KwC10NOiT,OAAO1K,GAAG,SAAU,WACrBqY,EAAKihB,sBAAqB,KxC40NhC7hC,KwCz0NOiT,OAAO1K,GAAG,aAAc,WACzBqY,EAAKohB,SAAWphB,EAAK3N,OAAOlC,MAAMoC,gBxCg1NzC,CACDpW,IAAK,SACLQ,MAAO,WAELyC,KwC30NO2J,SAASg3B,MAAM/2B,UAAYqB,cAAc,MAAO,CACjDwB,MAAOzM,KAAKiT,OAAO5P,OAAO6K,WAAWib,kBAAkBC,iBxC80N7DppB,KwC10NO2J,SAASg3B,MAAMrX,eAAiBre,cAAc,MAAO,CACtDwB,MAAOzM,KAAKiT,OAAO5P,OAAO6K,WAAWib,kBAAkBG,iBxC40N7DtpB,KwC10NO2J,SAASg3B,MAAM/2B,UAAUY,YAAYxK,KAAK2J,SAASg3B,MAAMrX,gBxC40NhE,IwCz0NQC,EAAgBte,cAAc,MAAO,CACvCwB,MAAOzM,KAAKiT,OAAO5P,OAAO6K,WAAWib,kBAAkBI,gBxC20N7DvpB,KwCx0NO2J,SAASg3B,MAAM5nB,KAAO9N,cAAc,OAAQ,GAAI,SACrDse,EAAc/e,YAAYxK,KAAK2J,SAASg3B,MAAM5nB,MxCy0NhD/Y,KwCv0NO2J,SAASg3B,MAAM/2B,UAAUY,YAAY+e,GxCy0N5CvpB,KwCt0NOiT,OAAOtJ,SAAS4Q,SAAS/P,YAAYxK,KAAK2J,SAASg3B,MAAM/2B,WxCw0NhE5J,KwCr0NO2J,SAASi3B,UAAUh3B,UAAYqB,cAAc,MAAO,CACrDwB,MAAOzM,KAAKiT,OAAO5P,OAAO6K,WAAWib,kBAAkBK,qBxCu0N7DxpB,KwCp0NOiT,OAAOtJ,SAASI,QAAQS,YAAYxK,KAAK2J,SAASi3B,UAAUh3B,axCs0NpE,CACD7M,IAAK,yBACLQ,MAAO,WACL,IAAI6jB,EAASphB,KwCr0NPA,KAAKygC,UxCw0NTzgC,KwCv0NSiiC,4BxCy0NTjiC,KwCv0NSkiC,8BxC40NX,IwCv0NQC,EAAWniC,KAAKugC,WAAW,GAAGa,OAAOgB,UACvC,SAAAtC,GxCu0NJ,OwCv0Na1e,EAAK5K,UAAYspB,EAAME,WAAa5e,EAAK5K,UAAYspB,EAAMO,UAElEgC,EAAWF,GAAY,EACzBG,EAAe,EAGdtiC,KAAKygC,WxCu0NVzgC,KwCt0NS6hC,qBAAqBQ,GAIzBA,IxC20NPriC,KwCt0NOugC,WAAWt8B,QAAQ,SAACk9B,EAAWl3B,GAC5BmX,EAAKsf,aAAa3gC,SAASohC,EAAUC,OAAOe,GAAUj3B,QACtDo3B,EAAer4B,KAKnBk4B,IAAaniC,KAAKuiC,exCs0NtBviC,KwCr0NSuiC,aAAeJ,ExCs0NxBniC,KwCr0NS2sB,UAAU2V,OxCy0NtB,CACDvlC,IAAK,YACLQ,MAAO,WACL,IAAIokB,EAAS3hB,KwCv0NLsiC,EAAkBr9B,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAH,EACfk9B,EAAWniC,KAAKuiC,aAChBpB,EAAYnhC,KAAKugC,WAAW+B,GAC1BjB,EAAcF,EAAdE,UACFvB,EAAQqB,EAAUC,OAAOe,GACzBK,EAAgBrB,EAAUC,OAAOe,GAAUj3B,KAC3Cu3B,EAAWpB,EAAYmB,ExC20N/B,GwCz0NOxiC,KAAK0iC,qBAAuB1iC,KAAK0iC,oBAAoBC,QAAQC,WAAaJ,ExCk2N/ExiC,KwCz0NS6iC,UAAU7iC,KAAK0iC,oBAAqB5C,EAAOwC,EAAcH,EAAUK,GAAe,GxC00N3FxiC,KwCz0NS0iC,oBAAoBC,QAAQ14B,MAAQk4B,ExC00N7CniC,KwCz0NS8iC,gBAAgB9iC,KAAK0iC,yBA3BgE,CAGtF1iC,KAAK+iC,cAAgB/iC,KAAKgjC,exC00NhChjC,KwCz0NW+iC,aAAa/V,OAAS,MxC+0NnC,IwCz0NUiW,EAAe,IAAInW,MACzBmW,EAAa1vB,IAAMkvB,EACnBQ,EAAaN,QAAQ14B,MAAQk4B,EAC7Bc,EAAaN,QAAQC,SAAWJ,ExC00NpCxiC,KwCz0NSkjC,qBAAuBV,ExC00NhCxiC,KwCx0NSiT,OAAOY,MAAMC,IAAlB,kBAAAtR,OAAwCigC,IAGxCQ,EAAajW,OAAS,WxCw0NxB,OwCv0NMrL,EAAKkhB,UAAUI,EAAcnD,EAAOwC,EAAcH,EAAUK,GAAe,IxC00NnFxiC,KwCz0NS+iC,aAAeE,ExC00NxBjjC,KwCz0NS8iC,gBAAgBG,MxCi1N5B,CACDlmC,IAAK,YACLQ,MAAO,SwC10NG0lC,EAAcnD,EAAOwC,EAAcH,EAAUK,GxC20NrD,IwC30NoEW,IAAiBl+B,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GxC40NrFjF,KwC30NOiT,OAAOY,MAAMC,IAAlB,kBAAAtR,OACsBggC,EADtB,WAAAhgC,OAC6C2/B,EAD7C,YAAA3/B,OACgE8/B,EADhE,cAAA9/B,OACyF2gC,IxC20N3FnjC,KwCz0NOojC,sBAAsBH,EAAcnD,GAErCqD,IxC00NJnjC,KwCz0NSqjC,sBAAsB74B,YAAYy4B,GxC00N3CjjC,KwCz0NS0iC,oBAAsBO,EAEtBjjC,KAAK0gC,aAAa3gC,SAASyiC,IxC00NlCxiC,KwCz0NW0gC,aAAavhC,KAAKqjC,IxCg1NjCxiC,KwCz0NOsjC,cAAcnB,GAAU,GACxBt4B,KAAK7J,KAAKsjC,cAAcnB,GAAU,IAClCt4B,KAAK7J,KAAKujC,iBAAiBjB,EAAcW,EAAcnD,EAAO0C,MxC00NtE,CACDzlC,IAAK,kBACLQ,MAAO,SwCx0NSimC,GxCy0Nd,IAAI9gB,EAAS1iB,KwCv0NX/B,MAAMQ,KAAKuB,KAAKqjC,sBAAsB7kB,UAAUva,QAAQ,SAAA4oB,GxC20NxD,GwC10NwC,QAAhCA,EAAM4W,QAAQhuB,cxC00NtB,CAIA,IwC10NUiuB,EAAchhB,EAAKsgB,aAAe,IAAM,IxC40NlD,GwC10NQnW,EAAM8V,QAAQ14B,QAAUu5B,EAAab,QAAQ14B,QAAU4iB,EAAM8V,QAAQgB,SAAU,CAG/E9W,EAAM8V,QAAQgB,UAAW,ExC40N/B,IwC10NcN,EAA0B3gB,EAA1B2gB,sBAER35B,WAAW,WACP25B,EAAsB93B,YAAYshB,GAClCnK,EAAKzP,OAAOY,MAAMC,IAAlB,mBAAAtR,OAAyCqqB,EAAM8V,QAAQC,YACxDc,SxCg1Nd,CACD3mC,IAAK,gBACLQ,MAAO,SwC30NO4kC,GxC40NZ,IAAIlf,EAASjjB,KwC50NSmvB,IAAgBlqB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,KAAAA,UAAA,GxC+0NtC,OwC90NS,IAAI6B,QAAQ,SAAA2C,GACfC,WAAW,WxC+0Nb,IwC90NYk6B,EAAmB3gB,EAAKsd,WAAW,GAAGa,OAAOe,GAAUj3B,KxCg1NnE,GwC90NU+X,EAAKigB,uBAAyBU,EAAkB,CxCg1NxD,IwC90NYC,EAEAA,EADA1U,EACkBlM,EAAKsd,WAAW,GAAGa,OAAOxrB,MAAMusB,GAEhClf,EAAKsd,WAAW,GAAGa,OAAOxrB,MAAM,EAAGusB,GAAUn4B,UxCk1N3E,IwC/0NY85B,GAAW,EAEfD,EAAgB5/B,QAAQ,SAAA67B,GxC+0N9B,IwC90NgBiE,EAAmBjE,EAAM50B,KxCg1NzC,GwC90Nc64B,IAAqBH,IAEhB3gB,EAAKyd,aAAa3gC,SAASgkC,GAAmB,CAC/CD,GAAW,EACX7gB,EAAKhQ,OAAOY,MAAMC,IAAlB,8BAAAtR,OAAoDuhC,IxCi1NlE,IwC90NoBC,EADgB/gB,EAAKsd,WAAW,GAA9Bc,UACqB0C,EAEvBd,EAAe,IAAInW,MACzBmW,EAAa1vB,IAAMywB,EACnBf,EAAajW,OAAS,WAClB/J,EAAKhQ,OAAOY,MAAMC,IAAlB,6BAAAtR,OAAmDuhC,IAC9C9gB,EAAKyd,aAAa3gC,SAASgkC,IAC5B9gB,EAAKyd,aAAavhC,KAAK4kC,GAG3Bt6B,QAOXq6B,GACDr6B,MAGT,SxCi1NV,CACD1M,IAAK,mBACLQ,MAAO,SwC90NU0mC,EAAqBhB,EAAcnD,EAAO0C,GxC+0NzD,IAAI5e,EAAU5jB,KAEd,GwCh1NMikC,EAAsBjkC,KAAKugC,WAAW/jC,OAAS,EAAG,CxCk1NtD,IwCh1NQ0nC,EAAqBjB,EAAaxB,cAElCzhC,KAAKgjC,eACLkB,EAAqBpE,EAAM/tB,GAG3BmyB,EAAqBlkC,KAAKmkC,sBAE1Bz6B,WAAW,WAEHka,EAAKsf,uBAAyBV,IAC9B5e,EAAK3Q,OAAOY,MAAMC,IAAlB,qCAAAtR,OAA2DggC,IAC3D5e,EAAK+I,UAAUsX,EAAsB,KAE1C,QxCq1Nd,CACDlnC,IAAK,uBACLQ,MAAO,WACL,IwCtyNmBuG,EAAsCmB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAAtBm/B,EAAsBn/B,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GACjDoH,EAAYrM,KAAKiT,OAAO5P,OAAO6K,WAAWib,kBAAkBE,oBxCwyNpErpB,KwCvyNO2J,SAASg3B,MAAM/2B,UAAUqD,UAAUnJ,OAAOuI,EAAWvI,IAErDA,GAAUsgC,IxCwyNfpkC,KwCvyNSuiC,aAAe,KxCwyNxBviC,KwCvyNSkjC,qBAAuB,QxC0yNnC,CACDnmC,IAAK,2BACLQ,MAAO,WACL,IwCzyNuBuG,EAAgBmB,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,GAC/BoH,EAAYrM,KAAKiT,OAAO5P,OAAO6K,WAAWib,kBAAkBM,wBxC0yNpEzpB,KwCzyNO2J,SAASi3B,UAAUh3B,UAAUqD,UAAUnJ,OAAOuI,EAAWvI,GAEzDA,IxC0yNL9D,KwCzyNSuiC,aAAe,KxC0yNxBviC,KwCzyNSkjC,qBAAuB,QxC4yNnC,CACDnmC,IAAK,+BACLQ,MAAO,WwCzyNCyC,KAAK2J,SAASg3B,MAAMrX,eAAe+a,aAAe,KxC4yNtDrkC,KwC1yNSskC,oBAAqB,KxC8yNjC,CACDvnC,IAAK,8BACLQ,MAAO,WACL,IwC3yNOyC,KAAKskC,mBAAoB,CxC4yN9B,IwC3yNU9kC,EAAaiD,KAAKsS,MAAM/U,KAAKmkC,qBAAuBnkC,KAAKukC,kBxC4yNnEvkC,KwC3yNS2J,SAASg3B,MAAMrX,eAAe7lB,MAAMkO,OAAzC,GAAAnP,OAAqDxC,KAAKmkC,qBAA1D,MxC4yNJnkC,KwC3yNS2J,SAASg3B,MAAMrX,eAAe7lB,MAAMkB,MAAzC,GAAAnC,OAAoDhD,EAApD,MxC8yNNQ,KwC3yNOwkC,yBxC6yNR,CACDznC,IAAK,uBACLQ,MAAO,WACL,IwC5yNQknC,EAAczkC,KAAKiT,OAAOtJ,SAAS4Q,SAAS7V,wBAC5CggC,EAAW1kC,KAAKiT,OAAOtJ,SAASC,UAAUlF,wBACxCkF,EAAc5J,KAAK2J,SAASg3B,MAA5B/2B,UAGF+6B,EAASD,EAAS7/B,KAAO4/B,EAAY5/B,KAAO,GAC5C+/B,EAASF,EAASG,MAAQJ,EAAY5/B,KAAO+E,EAAUk7B,YAAc,GAGvEC,EAAa/kC,KAAK2hC,UAAY8C,EAAY5/B,KAAO+E,EAAUk7B,YAAc,EAEzEC,EAAaJ,IACbI,EAAaJ,GAGbI,EAAaH,IACbG,EAAaH,GAGjBh7B,EAAUnG,MAAMoB,KAAhB,GAAArC,OAA0BuiC,EAA1B,QxC6yNH,CACDhoC,IAAK,4BACLQ,MAAO,WACLyC,KwC3yNO2J,SAASi3B,UAAUh3B,UAAUnG,MAAMkB,MAAxC,GAAAnC,OAAmDxC,KAAKiT,OAAOlC,MAAM+zB,YAArE,MxC6yNF9kC,KwC3yNO2J,SAASi3B,UAAUh3B,UAAUnG,MAAMkO,OAAxC,GAAAnP,OAAoDxC,KAAKiT,OAAOlC,MAAM+zB,YAAc9kC,KAAKukC,iBAAzF,QxC8yNH,CACDxnC,IAAK,wBACLQ,MAAO,SwC5yNe0lC,EAAcnD,GxC6yNlC,GwC5yNO9/B,KAAKgjC,axC4yNZ,CAKA,IwC5yNQgC,EAAahlC,KAAKmkC,qBAAuBrE,EAAM/tB,EAErDkxB,EAAax/B,MAAMkO,OAAnB,GAAAnP,OAA+BC,KAAKsS,MAAMkuB,EAAaxB,cAAgBuD,GAAvE,MACA/B,EAAax/B,MAAMkB,MAAnB,GAAAnC,OAA8BC,KAAKsS,MAAMkuB,EAAa/V,aAAe8X,GAArE,MACA/B,EAAax/B,MAAMoB,KAAnB,IAAArC,OAA8Bs9B,EAAM/U,EAAIia,EAAxC,MACA/B,EAAax/B,MAAMwhC,IAAnB,IAAAziC,OAA6Bs9B,EAAM7U,EAAI+Z,EAAvC,SxC6yNH,CACDjoC,IAAK,UACLiI,IAAK,WACH,OwCr1OShF,KAAKiT,OAAOnC,SAAW9Q,KAAKiT,OAAOb,SAAWpS,KAAKiT,OAAO5P,OAAO8lB,kBAAkB3lB,UxCu1O7F,CACDzG,IAAK,wBACLiI,IAAK,WACH,OwCj7NMhF,KAAKygC,UACEzgC,KAAK2J,SAASi3B,UAAUh3B,UAG5B5J,KAAK2J,SAASg3B,MAAMrX,iBxCm7N9B,CACDvsB,IAAK,eACLiI,IAAK,WACH,OwCl7NSnI,OAAO8E,KAAK3B,KAAKugC,WAAW,GAAGa,OAAO,IAAIrhC,SAAS,OxCo7N7D,CACDhD,IAAK,mBACLiI,IAAK,WACH,OwCn7NMhF,KAAKgjC,aACEhjC,KAAKugC,WAAW,GAAGa,OAAO,GAAGtvB,EAAI9R,KAAKugC,WAAW,GAAGa,OAAO,GAAGrvB,EAGlE/R,KAAKugC,WAAW,GAAG57B,MAAQ3E,KAAKugC,WAAW,GAAG5uB,SxCq7NxD,CACD5U,IAAK,uBACLiI,IAAK,WACH,OwCp7NMhF,KAAKygC,UAEEh+B,KAAKsS,MAAM/U,KAAKiT,OAAOlC,MAAM+zB,YAAc9kC,KAAKukC,kBAGpD9hC,KAAKsS,MAAM/U,KAAKiT,OAAOlC,MAAM+zB,YAAc9kC,KAAKukC,iBAAmB,KxCs7N7E,CACDxnC,IAAK,sBACLiI,IAAK,WACH,OwCr7NMhF,KAAKygC,UACEzgC,KAAKklC,6BAGTllC,KAAKmlC,8BxCu7NhBjhC,IAAK,SwCp7NmBvE,GAChBK,KAAKygC,UxCq7NTzgC,KwCp7NSklC,6BAA+BvlC,ExCs7NxCK,KwCp7NSmlC,6BAA+BxlC,MxCy7NvC2gC,EAjmBT,GyCp3NMxtB,OAAS,CAEXsyB,eAFW,SAEIllC,EAAMyK,GzCy9OrB,IAAI5G,EAAQ/D,KyCx9OJ4B,KAAGI,OAAO2I,GACVU,cAAcnL,EAAMF,KAAK+Q,MAAO,CAC5BwC,IAAK5I,IAEF/I,KAAGO,MAAMwI,IAChBA,EAAW1G,QAAQ,SAAAohC,GACfh6B,cAAcnL,EAAM6D,EAAKgN,MAAOs0B,MAO5CC,OAhBW,SAgBJ/kC,GzC09OP,IAAImI,EAAS1I,KyCz9OJyU,QAAQlU,EAAO,mBAMpBqS,MAAMe,eAAenV,KAAKwB,MzC69O9BA,KyC19OSg/B,QAAQxgC,KACTwB,KACA,WAEI0I,EAAKzF,QAAQyQ,QAAU,GAGvBpI,cAAc5C,EAAKqI,OACnBrI,EAAKqI,MAAQ,KAGTnP,KAAGjC,QAAQ+I,EAAKiB,SAASC,YACzBlB,EAAKiB,SAASC,UAAUkD,gBAAgB,SzC09OtD,IyCt9OkB6H,EAAkBpU,EAAlBoU,QAASzU,EAASK,EAATL,KzC09OvBqlC,EADW/nC,eyCx9OyCmX,EAf5C,GzCw+Oa,GACrB6wB,EAAqBD,EyC19ONv1B,SAAAA,OAfP,IAAAw1B,EAekBlb,UAAU1X,MAf5B4yB,EAemCjyB,EAfnCgyB,EAemChyB,IAC/BkwB,EAAuB,UAAbzzB,EAAuB9P,EAAO,MACxCyK,EAA0B,UAAbqF,EAAuB,GAAK,CAAEuD,IAAAA,GAEjD1W,OAAOyG,OAAOoF,EAAM,CAChBsH,SAAAA,EACA9P,KAAAA,EAEA2H,UAAW+H,QAAQG,MAAM7P,EAAM8P,EAAUtH,EAAKrF,OAAO4M,aAErDc,MAAO9F,cAAcw4B,EAAS94B,KAIlCjC,EAAKiB,SAASC,UAAUY,YAAY9B,EAAKqI,OAGrCnP,KAAGK,QAAQ1B,EAAM2lB,YACjBxd,EAAKrF,OAAO6iB,SAAW3lB,EAAM2lB,UAI7Bxd,EAAKoI,UACDpI,EAAKrF,OAAOoiC,aACZ/8B,EAAKqI,MAAM/F,aAAa,cAAe,IAEvCtC,EAAKrF,OAAO6iB,UACZxd,EAAKqI,MAAM/F,aAAa,WAAY,IAEnCpJ,KAAGS,MAAM9B,EAAMkoB,UAChB/f,EAAK+f,OAASloB,EAAMkoB,QAEpB/f,EAAKrF,OAAOojB,KAAK5B,QACjBnc,EAAKqI,MAAM/F,aAAa,OAAQ,IAEhCtC,EAAKrF,OAAO0b,OACZrW,EAAKqI,MAAM/F,aAAa,QAAS,IAEjCtC,EAAKrF,OAAO4M,aACZvH,EAAKqI,MAAM/F,aAAa,cAAe,KAK/CoF,GAAG+c,aAAa3uB,KAAKkK,GAGjBA,EAAKoI,SACLgC,OAAOsyB,eAAe5mC,KAAKkK,EAAM,SAAUiM,GAI/CjM,EAAKrF,OAAOqT,MAAQnW,EAAMmW,MAG1B3F,MAAMgM,MAAMve,KAAKkK,GAGbA,EAAKoI,SAEDjU,OAAO8E,KAAKpB,GAAOR,SAAS,WAC5B+S,OAAOsyB,eAAe5mC,KAAKkK,EAAM,QAASnI,EAAM8gB,SAKpD3Y,EAAKoI,SAAYpI,EAAKgb,UAAYhb,EAAKb,UAAUuI,KAEjDA,GAAGgd,MAAM5uB,KAAKkK,GAIdA,EAAKoI,SACLpI,EAAKqI,MAAM0C,OAIX/K,EAAKygB,mBACLzgB,EAAKygB,kBAAkB1V,OAI3B/K,EAAK4R,WAAWpC,WAEpB,IzC82ONlY,KyC39OW6T,MAAMoH,KAAK,2BCKtByqB,K1CglPN,WACE,SAASA,E0ChlPKrpC,EAAQ4G,G1CilPpB,IAAIc,EAAQ/D,KAqEZ,GAnEAkD,gBAAgBlD,KAAM0lC,GAEtB1lC,K0CplPS+tB,OAAS,G1CslPlB/tB,K0CnlPSuJ,OAAQ,E1ColPjBvJ,K0CnlPS8oB,SAAU,E1ColPnB9oB,K0CnlPS2lC,QAAS,E1CqlPlB3lC,K0CllPSoE,MAAQwL,QAAQxL,M1ColPzBpE,K0CjlPS+Q,MAAQ1U,EAGTuF,KAAGI,OAAOhC,KAAK+Q,S1CilPrB/Q,K0ChlPW+Q,MAAQlR,SAASC,iBAAiBE,KAAK+Q,SAI3CxK,OAAOq/B,QAAU5lC,KAAK+Q,iBAAiB60B,QAAWhkC,KAAGQ,SAASpC,KAAK+Q,QAAUnP,KAAGO,MAAMnC,KAAK+Q,U1CklPlG/Q,K0ChlPW+Q,MAAQ/Q,KAAK+Q,MAAM,I1ColPhC/Q,K0ChlPSqD,OAAS2P,OACV,GACA1T,WACAomC,EAAKpmC,SACL2D,GAAW,GACV,W1C4kPP,IACE,O0C3kPmBsR,KAAKtC,MAAMlO,EAAKgN,MAAMxM,aAAa,qBAC5C,MAAO4C,G1C4kPjB,M0C3kPmB,IAJd,I1CmlPTnH,K0CzkPS2J,SAAW,CACZC,UAAW,KACXyQ,SAAU,KACVP,QAAS,GACTa,QAAS,GACTJ,SAAU,GACVC,OAAQ,GACRJ,SAAU,CACN0H,MAAO,KACP9F,KAAM,KACNwE,OAAQ,GACR1G,QAAS,K1C6kPrB9Z,K0CxkPSqa,SAAW,CACZwK,OAAQ,KACRnG,cAAe,EACfsG,KAAM,IAAI/e,S1C2kPlBjG,K0CvkPSsa,WAAa,CACduK,QAAQ,G1C0kPhB7kB,K0CtkPSiD,QAAU,CACX0b,MAAO,GACPjL,QAAS,I1C0kPjB1T,K0CrkPS6T,MAAQ,IAAI6W,QAAQ1qB,KAAKqD,OAAOwQ,O1CukPzC7T,K0CpkPS6T,MAAMC,IAAI,SAAU9T,KAAKqD,Q1CqkPlCrD,K0CpkPS6T,MAAMC,IAAI,UAAWlE,UAGtBhO,KAAGC,gBAAgB7B,KAAK+Q,QAAWnP,KAAGjC,QAAQK,KAAK+Q,O1CykP3D,G0CnkPQ/Q,KAAK+Q,MAAM3H,K1CokPjBpJ,K0CnkPW6T,MAAMoH,KAAK,6B1CwkPxB,G0CnkPSjb,KAAKqD,OAAOG,Q1C0kPrB,G0CnkPSoM,QAAQG,QAAQI,I1CmkPzB,CAMA,I0CnkPUkS,EAAQriB,KAAK+Q,MAAM5G,WAAU,GACnCkY,EAAM6D,UAAW,E1CokPrBlmB,K0CnkPS2J,SAASk8B,SAAWxjB,E1CskP7B,I0ClkPUniB,EAAOF,KAAK+Q,MAAM0yB,QAAQhuB,cAG5B4S,EAAS,KACT1gB,EAAM,K1CmkPd,O0ChkPYzH,G1CikPV,I0ChkPW,M1CokPT,G0ClkPQmoB,EAASroB,KAAK+Q,MAAM5N,cAAc,UAG9BvB,KAAGjC,QAAQ0oB,I1CykPrB,G0CvkPU1gB,EAAMuc,SAASmE,EAAO9jB,aAAa,Q1CgkP7CvE,K0C/jPegQ,SAAWwa,iBAAiB7iB,EAAIpJ,Y1CikP/CyB,K0C9jPe2J,SAASC,UAAY5J,KAAK+Q,M1C+jPzC/Q,K0C9jPe+Q,MAAQsX,E1CgkPvBroB,K0C7jPe2J,SAASC,UAAUyC,UAAY,GAGhC1E,EAAIm+B,OAAOtpC,OAAQ,C1C6jP/B,I0C5jPkBupC,EAAS,CAAC,IAAK,QAEjBA,EAAOhmC,SAAS4H,EAAIq+B,aAAahhC,IAAI,e1C6jPnDhF,K0C5jPmBqD,OAAO6iB,UAAW,GAEvB6f,EAAOhmC,SAAS4H,EAAIq+B,aAAahhC,IAAI,W1C8jPnDhF,K0C7jPmBqD,OAAOojB,KAAK5B,QAAS,GAK1B7kB,KAAKukB,W1C8jPnBvkB,K0C7jPmBqD,OAAO4M,YAAc81B,EAAOhmC,SAAS4H,EAAIq+B,aAAahhC,IAAI,gB1C8jP7EhF,K0C7jPmBqD,OAAOgT,QAAQ8hB,GAAKxwB,EAAIq+B,aAAahhC,IAAI,O1C+jP5DhF,K0C7jPmBqD,OAAO4M,aAAc,Q1CkkP5CjQ,K0C7jPegQ,SAAWhQ,KAAK+Q,MAAMxM,aAAavE,KAAKqD,OAAOsH,WAAWuH,MAAMlC,U1C+jP/EhQ,K0C5jPe+Q,MAAMjE,gBAAgB9M,KAAKqD,OAAOsH,WAAWuH,MAAMlC,U1CgkPpE,G0C5jPYpO,KAAGS,MAAMrC,KAAKgQ,YAAcnT,OAAO8E,KAAK2oB,WAAWvqB,SAASC,KAAKgQ,U1C8jP3E,YADAhQ,K0C5jPe6T,MAAMmH,MAAM,kC1CikP7Bhb,K0C5jPaE,KAAOqqB,MAAMza,M1C6jP1B,MAEF,I0C3jPW,Q1C4jPX,I0C3jPW,Q1C4jPT9P,K0C3jPaE,KAAOA,E1C4jPpBF,K0C3jPagQ,SAAWsa,UAAU1X,MAGtB5S,KAAK+Q,MAAMogB,aAAa,iB1C2jPlCnxB,K0C1jPeqD,OAAOoiC,aAAc,GAE1BzlC,KAAK+Q,MAAMogB,aAAa,c1C4jPlCnxB,K0C3jPeqD,OAAO6iB,UAAW,IAEvBlmB,KAAK+Q,MAAMogB,aAAa,gBAAkBnxB,KAAK+Q,MAAMogB,aAAa,yB1C6jP5EnxB,K0C5jPeqD,OAAO4M,aAAc,GAE1BjQ,KAAK+Q,MAAMogB,aAAa,W1C8jPlCnxB,K0C7jPeqD,OAAO0b,OAAQ,GAEpB/e,KAAK+Q,MAAMogB,aAAa,U1C+jPlCnxB,K0C9jPeqD,OAAOojB,KAAK5B,QAAS,G1CikPtC,MAEF,QAEE,YADA7kB,K0C9jPa6T,MAAMmH,MAAM,kC1CmkP7Bhb,K0C9jPS6H,UAAY+H,QAAQG,MAAM/P,KAAKE,KAAMF,KAAKgQ,SAAUhQ,KAAKqD,OAAO4M,aAGhEjQ,KAAK6H,UAAUsI,K1CkkPxBnQ,K0C7jPSsI,eAAiB,G1C+jP1BtI,K0C5jPS6D,UAAY,IAAIuqB,UAAUpuB,M1C8jPnCA,K0C3jPS4W,QAAU,IAAID,QAAQ3W,M1C6jP/BA,K0C1jPS+Q,MAAM3H,KAAOpJ,KAGb4B,KAAGjC,QAAQK,KAAK2J,SAASC,a1C0jPhC5J,K0CzjPW2J,SAASC,UAAYqB,cAAc,MAAO,CAAEg7B,SAAU,IAC3Dn8B,KAAK9J,KAAK+Q,MAAO/Q,KAAK2J,SAASC,YAInCwG,GAAG+c,aAAa3uB,KAAKwB,MAGrB+Q,MAAMgM,MAAMve,KAAKwB,MAGbA,KAAKqD,OAAOwQ,OACZtL,GAAG/J,KAAKwB,KAAMA,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO+E,OAAOyT,KAAK,KAAM,SAAA1b,GACjE4D,EAAK8P,MAAMC,IAAX,UAAAtR,OAAyBrC,EAAMD,UAMnCF,KAAK8Q,SAAY9Q,KAAK0jB,UAAY1jB,KAAK6H,UAAUuI,KACjDA,GAAGgd,MAAM5uB,KAAKwB,M1C6jPtBA,K0CzjPS6D,UAAU+F,Y1C2jPnB5J,K0CxjPS6D,UAAU+iB,S1C0jPnB5mB,K0CvjPSsa,WAAa,IAAIqR,WAAW3rB,MAG7BA,KAAKqD,OAAOslB,IAAInlB,U1CujPtBxD,K0CtjPW2oB,IAAM,IAAIoR,IAAI/5B,OAInBA,KAAK8Q,SAAW9Q,KAAKqD,OAAO6iB,UAC5Bxc,WAAW,W1CujPf,O0CvjPqB3F,EAAKyP,QAAQ,I1C4jPtCxT,K0CxjPSiuB,aAAe,EAGhBjuB,KAAKqD,OAAO8lB,kBAAkB3lB,U1CwjPpCxD,K0CvjPWmpB,kBAAoB,IAAImX,kBAAkBtgC,Q1C6/OrDA,K0C7jPW6T,MAAMmH,MAAM,iC1Cs9OvBhb,K0CnkPW6T,MAAMmH,MAAM,iC1C4jPvBhb,K0CnkPW6T,MAAMmH,MAAM,yC1CujPvBhb,K0CnkPW6T,MAAMmH,MAAM,4C1CmrR3B,OAj7BAhe,aAAa0oC,EAAM,CAAC,CAClB3oC,IAAK,OAKLQ,MAAO,WACL,IAAImL,EAAS1I,KAEb,O0CpiPO4B,KAAGM,SAASlC,KAAK+Q,MAAMyC,OAKxBxT,KAAK2oB,KAAO3oB,KAAK2oB,IAAInlB,S1CqiPzBxD,K0CpiPS2oB,IAAI4R,eAAe1wB,KAAK,W1CqiP/B,O0CriPqCnB,EAAKigB,IAAInV,SAAQiF,MAAM,W1CuiP5D,O0CviPkE/P,EAAKqI,MAAMyC,SAIxExT,KAAK+Q,MAAMyC,QATP,O1CujPd,CACDzW,IAAK,QACLQ,MAAO,W0CziPEyC,KAAK4oB,SAAYhnB,KAAGM,SAASlC,KAAK+Q,MAAMgJ,Q1C8iP/C/Z,K0C1iPO+Q,MAAMgJ,U1CgjPd,CACDhd,IAAK,aAMLQ,MAAO,S0CphPIgD,IAEQqB,KAAGK,QAAQ1B,GAASA,GAASP,KAAK4oB,S1CuhPjD5oB,K0CphPSwT,O1CshPTxT,K0CphPS+Z,U1C2hPZ,CACDhd,IAAK,OACLQ,MAAO,W0CrhPCyC,KAAK8Q,S1CuhPT9Q,K0CthPS+Z,Q1CuhPT/Z,K0CthPSga,WACEpY,KAAGM,SAASlC,KAAK+Q,MAAMglB,O1CuhPlC/1B,K0CthPS+Q,MAAMglB,S1C6hPlB,CACDh5B,IAAK,UACLQ,MAAO,WACLyC,K0CxhPOmT,YAAc,I1C+hPtB,CACDpW,IAAK,SACLQ,MAAO,S0C1hPAiZ,G1C2hPLxW,K0C1hPOmT,YAAcnT,KAAKmT,aAAevR,KAAGG,OAAOyU,GAAYA,EAAWxW,KAAKqD,OAAOmT,Y1CiiPvF,CACDzZ,IAAK,UACLQ,MAAO,S0C5hPCiZ,G1C6hPNxW,K0C5hPOmT,YAAcnT,KAAKmT,aAAevR,KAAGG,OAAOyU,GAAYA,EAAWxW,KAAKqD,OAAOmT,Y1CmiPvF,CACDzZ,IAAK,iBAMLQ,MAAO,S0C16OQqF,G1C26Ob,I0C16OQ8X,EAAS1a,KAAK+Q,MAAMgO,MAAQ,EAAI/e,KAAK0a,O1C26O7C1a,K0C16OO0a,OAASA,GAAU9Y,KAAGG,OAAOa,GAAQA,EAAO,K1Ci7OpD,CACD7F,IAAK,iBACLQ,MAAO,S0C56OQqF,G1C66Ob5C,K0C56OOivB,gBAAgBrsB,K1Cm7OxB,CACD7F,IAAK,iBAMLQ,MAAO,S0CtoOQgD,GACX8Z,SAASvW,OAAOtF,KAAKwB,KAAMO,GAAO,K1C6oOrC,CACDxD,IAAK,UAMLQ,MAAO,W0C5jOCqS,QAAQc,S1C+jOZ1Q,K0C9jOS+Q,MAAMm1B,mC1CskOlB,CACDnpC,IAAK,iBACLQ,MAAO,S0ChkOQuG,G1CkkOb,G0ChkOM9D,KAAK6H,UAAUuI,KAAOpQ,KAAKuwB,QAAS,C1CkkOxC,I0ChkOU4V,EAAWh5B,SAASnN,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWoY,cAGpEtZ,OAA0B,IAAXlJ,OAAyBhF,GAAagF,EAGrDsiC,EAASr5B,YAAY/M,KAAK2J,SAASC,UAAW5J,KAAKqD,OAAO6K,WAAWoY,aAActZ,G1CqkO7F,G0ClkOQo5B,GAAUpmC,KAAKqD,OAAOgW,SAAStZ,SAAS,cAAgB6B,KAAGS,MAAMrC,KAAKqD,OAAO+W,WAC7Ef,SAAS2I,WAAWxjB,KAAKwB,MAAM,GAI/BomC,IAAWD,EAAU,C1C8jO3B,I0C7jOYE,EAAYD,EAAS,iBAAmB,gBAC9Cp9B,aAAaxK,KAAKwB,KAAMA,KAAK+Q,MAAOs1B,G1CgkO5C,O0C7jOYD,E1CgkOd,O0C7jOS,I1CqkOV,CACDrpC,IAAK,KACLQ,MAAO,S0C/jOJ4C,EAAO8H,GACNM,GAAG/J,KAAKwB,KAAMA,KAAK2J,SAASC,UAAWzJ,EAAO8H,K1CukOjD,CACDlL,IAAK,OACLQ,MAAO,S0CjkOF4C,EAAO8H,GACRQ,KAAKjK,KAAKwB,KAAMA,KAAK2J,SAASC,UAAWzJ,EAAO8H,K1CykOnD,CACDlL,IAAK,MACLQ,MAAO,S0CnkOH4C,EAAO8H,GACPO,IAAIxI,KAAK2J,SAASC,UAAWzJ,EAAO8H,K1C6kOvC,CACDlL,IAAK,UACLQ,MAAO,S0CrkOC0K,G1CskON,IAAIuB,EAASxJ,K0CtkOGsmC,EAAcrhC,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,IAAAA,UAAA,G1C0kO9B,G0CzkOOjF,KAAKuJ,M1CykOZ,CAIA,I0CzkOQrK,EAAO,WAETW,SAAS6F,KAAKjC,MAAM2nB,SAAW,GAG/B5hB,EAAK0I,MAAQ,KAGTo0B,GACIzpC,OAAO8E,KAAK6H,EAAKG,UAAUnN,SAE3B8O,cAAc9B,EAAKG,SAASmQ,QAAQtG,MACpClI,cAAc9B,EAAKG,SAAS0Q,UAC5B/O,cAAc9B,EAAKG,SAAS0P,UAC5B/N,cAAc9B,EAAKG,SAASI,SAG5BP,EAAKG,SAASmQ,QAAQtG,KAAO,KAC7BhK,EAAKG,SAAS0Q,SAAW,KACzB7Q,EAAKG,SAAS0P,SAAW,KACzB7P,EAAKG,SAASI,QAAU,MAIxBnI,KAAGM,SAAS+F,IACZA,MAIJoB,gBAAgB7K,KAAKgL,GAGrBmC,eAAenC,EAAKG,SAASk8B,SAAUr8B,EAAKG,SAASC,WAGrDZ,aAAaxK,KAAKgL,EAAMA,EAAKG,SAASk8B,SAAU,aAAa,GAGzDjkC,KAAGM,SAAS+F,IACZA,EAASzJ,KAAKgL,EAAKG,SAASk8B,UAIhCr8B,EAAKD,OAAQ,EAGbG,WAAW,WACPF,EAAKG,SAAW,KAChBH,EAAKuH,MAAQ,MACd,O1CukOb/Q,K0ClkOO+1B,OAGLjI,aAAa9tB,KAAK+tB,OAAOjF,SACzBgF,aAAa9tB,KAAK+tB,OAAO1U,UACzByU,aAAa9tB,KAAK+tB,OAAO6B,SAGrB5vB,KAAK8Q,SAELV,GAAG8K,qBAAqB1c,KAAKwB,MAAM,GAGnCd,KACOc,KAAKukB,WAEZiV,cAAcx5B,KAAK+tB,OAAO0L,WAC1BD,cAAcx5B,KAAK+tB,OAAOnF,SAGP,OAAf5oB,KAAKkS,OAAkBtQ,KAAGM,SAASlC,KAAKkS,MAAM8sB,U1C+jOpDh/B,K0C9jOWkS,MAAM8sB,UAIf9/B,KACOc,KAAKwS,UAGO,OAAfxS,KAAKkS,O1C+jOXlS,K0C9jOWkS,MAAMq0B,SAAS18B,KAAK3K,GAI7BwK,WAAWxK,EAAM,S1CskOxB,CACDnC,IAAK,WACLQ,MAAO,S0ChkOE2C,G1CikOP,O0ChkOS0P,QAAQgB,KAAKpS,KAAKwB,KAAME,K1CykOlC,CACDnD,IAAK,UACLiI,IAAK,WACH,O0C/4PStE,QAAQV,KAAKgQ,WAAasa,UAAU1X,S1Ci5P9C,CACD7V,IAAK,UACLiI,IAAK,WACH,O0Ch5PStE,QAAQV,KAAKukB,WAAavkB,KAAKwS,W1Ck5PzC,CACDzV,IAAK,YACLiI,IAAK,WACH,O0Cj5PStE,QAAQV,KAAKgQ,WAAasa,UAAUjU,W1Cm5P9C,CACDtZ,IAAK,UACLiI,IAAK,WACH,O0Cl5PStE,QAAQV,KAAKgQ,WAAasa,UAAUlU,S1Co5P9C,CACDrZ,IAAK,UACLiI,IAAK,WACH,O0Cn5PStE,QAAQV,KAAKE,OAASqqB,MAAMza,S1Cq5PtC,CACD/S,IAAK,UACLiI,IAAK,WACH,O0Cp5PStE,QAAQV,KAAKE,OAASqqB,MAAM1a,S1Cs5PtC,CACD9S,IAAK,UACLiI,IAAK,WACH,O0Ct3PStE,QAAQV,KAAKuJ,QAAUvJ,KAAKoT,SAAWpT,KAAKwwB,S1C43PtD,CACDzzB,IAAK,SACLiI,IAAK,WACH,O0Cx3PStE,QAAQV,KAAK+Q,MAAMqC,U1C83P7B,CACDrW,IAAK,UACLiI,IAAK,WACH,O0C13PStE,QAAQV,KAAKoT,QAA+B,IAArBpT,KAAKmT,e1Cg4PtC,CACDpW,IAAK,QACLiI,IAAK,WACH,O0C53PStE,QAAQV,KAAK+Q,MAAMyf,S1C83P7B,CACDzzB,IAAK,cACLmH,IAAK,S0Cv0PW3D,G1Cy0Pd,G0Cv0POP,KAAK6a,S1Cu0PZ,CAKA,I0Cv0PQ2rB,EAAe5kC,KAAGG,OAAOxB,IAAUA,EAAQ,E1Cy0PnDP,K0Ct0PO+Q,MAAMoC,YAAcqzB,EAAe/jC,KAAK6B,IAAI/D,EAAOP,KAAK6a,UAAY,E1Cw0P3E7a,K0Cr0PO6T,MAAMC,IAAX,cAAAtR,OAA6BxC,KAAKmT,YAAlC,e1C20PJnO,IAAK,WACH,O0Cr0PSlE,OAAOd,KAAK+Q,MAAMoC,e1C20P5B,CACDpW,IAAK,WACLiI,IAAK,WACH,I0Cv0PUqa,EAAarf,KAAK+Q,MAAlBsO,S1Cy0PV,O0Ct0PMzd,KAAGG,OAAOsd,GACHA,EAMPA,GAAYA,EAAS7iB,QAAUwD,KAAK6a,SAAW,EACxCwE,EAASoI,IAAI,GAAKznB,KAAK6a,SAG3B,I1C40PV,CACD9d,IAAK,UACLiI,IAAK,WACH,O0Cx0PStE,QAAQV,KAAK+Q,MAAMgP,W1C80P7B,CACDhjB,IAAK,WACLiI,IAAK,WAEH,I0C10PQyhC,EAAe3jC,WAAW9C,KAAKqD,OAAOwX,UAGtC6rB,GAAgB1mC,KAAK+Q,OAAS,IAAI8J,SAClCA,EAAYjZ,KAAGG,OAAO2kC,IAAiBA,IAAiBC,EAAAA,EAAeD,EAAJ,E1C20P3E,O0Cx0PSD,GAAgB5rB,I1C+0P1B,CACD9d,IAAK,SACLmH,IAAK,S0C10PM3G,G1C20PT,I0C10PMmd,EAASnd,EAITqE,KAAGI,OAAO0Y,KACVA,EAAS5Z,OAAO4Z,IAIf9Y,KAAGG,OAAO2Y,KACXA,EAAS1a,KAAK4W,QAAQ5R,IAAI,WAIzBpD,KAAGG,OAAO2Y,KACRA,EAAW1a,KAAKqD,OAAhBqX,QAIHA,EAlBQ,IAmBRA,EAnBQ,GAsBRA,EArBQ,IAsBRA,EAtBQ,G1Cq2Pd1a,K0C30POqD,OAAOqX,OAASA,E1C60PvB1a,K0C10PO+Q,MAAM2J,OAASA,GAGf9Y,KAAGS,MAAM9E,IAAUyC,KAAK+e,OAASrE,EAAS,I1C00P/C1a,K0Cz0PS+e,OAAQ,I1Cg1PrB/Z,IAAK,WACH,O0Cz0PSlE,OAAOd,KAAK+Q,MAAM2J,U1C20P5B,CACD3d,IAAK,QACLmH,IAAK,S0CrzPKiW,G1CszPR,I0CrzPMrW,EAASqW,EAGRvY,KAAGK,QAAQ6B,KACZA,EAAS9D,KAAK4W,QAAQ5R,IAAI,UAIzBpD,KAAGK,QAAQ6B,KACZA,EAAS9D,KAAKqD,OAAO0b,O1CwzP3B/e,K0CpzPOqD,OAAO0b,MAAQjb,E1CszPtB9D,K0CnzPO+Q,MAAMgO,MAAQjb,G1CyzPvBkB,IAAK,WACH,O0CnzPStE,QAAQV,KAAK+Q,MAAMgO,S1CyzP7B,CACDhiB,IAAK,WACLiI,IAAK,WAEH,O0CrzPOhF,KAAK8Q,YAIN9Q,KAAKuwB,UAML7vB,QAAQV,KAAK+Q,MAAM61B,cACnBlmC,QAAQV,KAAK+Q,MAAM81B,8BACnBnmC,QAAQV,KAAK+Q,MAAM+1B,aAAe9mC,KAAK+Q,MAAM+1B,YAAYtqC,Y1CyzPhE,CACDO,IAAK,QACLmH,IAAK,S0CnzPK3D,G1CozPR,I0CnzPMoe,EAAQ,KAER/c,KAAGG,OAAOxB,KACVoe,EAAQpe,GAGPqB,KAAGG,OAAO4c,KACXA,EAAQ3e,KAAK4W,QAAQ5R,IAAI,UAGxBpD,KAAGG,OAAO4c,KACXA,EAAQ3e,KAAKqD,OAAOsb,MAAM+H,UAI1B/H,EAAQ,KACRA,EAAQ,IAERA,EAAQ,IACRA,EAAQ,GAGP3e,KAAKqD,OAAOsb,MAAM1b,QAAQlD,SAAS4e,I1C0zP1C3e,K0CpzPOqD,OAAOsb,MAAM+H,SAAW/H,E1CszP/B3e,K0CnzPO+Q,MAAMkoB,aAAeta,G1C4yP1B3e,K0CpzPS6T,MAAMoH,KAAX,sBAAAzY,OAAsCmc,EAAtC,O1Ci0PR3Z,IAAK,WACH,O0CnzPSlE,OAAOd,KAAK+Q,MAAMkoB,gB1C2zP5B,CACDl8B,IAAK,UACLmH,IAAK,S0CrzPO3D,G1CszPV,I0CrzPQ8C,EAASrD,KAAKqD,OAAOqQ,QACrBzQ,EAAUjD,KAAKiD,QAAQyQ,Q1CuzP/B,G0CrzPOzQ,EAAQzG,O1CqzPf,CAIA,I0CrzPMkX,EAAU,EACT9R,KAAGS,MAAM9B,IAAUO,OAAOP,GAC3BP,KAAK4W,QAAQ5R,IAAI,WACjB3B,EAAOqjB,SACPrjB,EAAOod,SACTjS,KAAK5M,KAAGG,QAENglC,GAAgB,E1CizPtB,I0C/yPO9jC,EAAQlD,SAAS2T,GAAU,C1CgzPhC,I0C/yPUnW,EAAQ0W,QAAQhR,EAASyQ,G1CgzPnC1T,K0C/yPS6T,MAAMoH,KAAX,+BAAAzY,OAA+CkR,EAA/C,YAAAlR,OAAiEjF,EAAjE,aACAmW,EAAUnW,EAGVwpC,GAAgB,EAIpB1jC,EAAOqjB,SAAWhT,E1CgzPpB1T,K0C7yPO+Q,MAAM2C,QAAUA,EAGjBqzB,G1C6yPJ/mC,K0C5yPS4W,QAAQ1S,IAAI,CAAEwP,QAAAA,M1CqzP3B1O,IAAK,WACH,O0C9yPShF,KAAK+Q,MAAM2C,U1CszPrB,CACD3W,IAAK,OACLmH,IAAK,S0ChzPI3D,G1CizPP,I0ChzPQuD,EAASlC,KAAGK,QAAQ1B,GAASA,EAAQP,KAAKqD,OAAOojB,KAAK5B,O1CizP9D7kB,K0ChzPOqD,OAAOojB,KAAK5B,OAAS/gB,E1CizP5B9D,K0ChzPO+Q,MAAM0V,KAAO3iB,G1C21PtBkB,IAAK,WACH,O0C1yPStE,QAAQV,KAAK+Q,MAAM0V,Q1CizP7B,CACD1pB,IAAK,SACLmH,IAAK,S0C5yPM3D,GACPuS,OAAOwyB,OAAO9mC,KAAKwB,KAAMO,I1CkzP7ByE,IAAK,WACH,O0C5yPShF,KAAK+Q,MAAMslB,a1CkzPrB,CACDt5B,IAAK,WACLiI,IAAK,WACH,I0C9yPU+d,EAAa/iB,KAAKqD,OAAOogB,KAAzBV,S1C+yPV,O0C7yPSnhB,KAAG+F,IAAIob,GAAYA,EAAW/iB,KAAK8S,S1CozP7C,CACD/V,IAAK,SACLmH,IAAK,S0C/yPM3D,GACFP,KAAKoS,QAKVhC,GAAGmd,UAAU/uB,KAAKwB,KAAMO,GAAO,GAAOkY,MAAM,c1C2yP5CzY,K0C/yPS6T,MAAMoH,KAAK,qC1CyzPxBjW,IAAK,WACH,O0C/yPOhF,KAAKoS,QAIHpS,KAAK+Q,MAAMxM,aAAa,UAHpB,O1CwzPd,CACDxH,IAAK,QACLiI,IAAK,WACH,I0CjzPQyM,EAAQD,kBAAkBQ,eAAexT,KAAKwB,O1CkzPtD,O0ChzPS4B,KAAGO,MAAMsP,GAASA,EAAMoK,KAAK,KAAOpK,G1CszP/CvN,IAAK,S0ChzPK3D,GACDP,KAAKoS,QAKLxQ,KAAGI,OAAOzB,IAAW+Q,cAAc/Q,I1CqzP1CP,K0ChzPOqD,OAAOoO,MAAQlR,EAEpB4R,eAAe3T,KAAKwB,O1C0yPpBA,K0ChzPS6T,MAAMmH,MAAX,mCAAAxY,OAAoDjC,EAApD,M1C2yPJP,K0ChzPS6T,MAAMoH,KAAK,4C1Ci0PvB,CACDle,IAAK,WACLmH,IAAK,S0CjzPQ3D,G1CkzPX,I0CjzPQuD,EAASlC,KAAGK,QAAQ1B,GAASA,EAAQP,KAAKqD,OAAO6iB,S1CkzPzDlmB,K0CjzPOqD,OAAO6iB,SAAWpiB,G1CuzP3BkB,IAAK,WACH,O0CjzPStE,QAAQV,KAAKqD,OAAO6iB,Y1CmzP9B,CACDnpB,IAAK,eACLmH,IAAK,S0CtyPY3D,GACb8Z,SAASnW,IAAI1F,KAAKwB,KAAMO,GAAO,I1C4yPnCyE,IAAK,WACH,IAAI+f,E0CtyPgC/kB,KAAKqa,SAA/BkH,EADOwD,EACPxD,QAAS7C,EADFqG,EACErG,a1CyyPnB,O0CxyPS6C,EAAU7C,GAAgB,I1CgzPpC,CACD3hB,IAAK,WACLmH,IAAK,S0C1yPQ3D,GACT8Z,SAASgL,YAAY7mB,KAAKwB,KAAMO,GAAO,I1CgzP3CyE,IAAK,WACH,O0C1yPUqV,SAASuL,gBAAgBpnB,KAAKwB,OAAS,IAAIwhB,W1CkzPtD,CACDzkB,IAAK,MACLmH,IAAK,S0C5yPG3D,G1C8yPN,G0C5yPOqP,QAAQU,I1C4yPf,CAKA,I0C5yPQxM,EAASlC,KAAGK,QAAQ1B,GAASA,GAASP,KAAKsQ,IAI7C1O,KAAGM,SAASlC,KAAK+Q,MAAMR,4B1C4yP3BvQ,K0C3yPS+Q,MAAMR,0BAA0BzM,EAASwM,IAAIuU,OAASvU,IAAI+Z,UAI/DzoB,KAAGM,SAASlC,KAAK+Q,MAAMi2B,4BAClBhnC,KAAKsQ,KAAOxM,E1C4yPnB9D,K0C3yPW+Q,MAAMi2B,0BACJhnC,KAAKsQ,MAAQxM,GACpBjE,SAASonC,0B1CmzPrBjiC,IAAK,WACH,O0C3yPO4K,QAAQU,IAKR1O,KAAGS,MAAMrC,KAAK+Q,MAAMm2B,wBAKlBlnC,KAAK+Q,QAAUlR,SAASsnC,wBAJpBnnC,KAAK+Q,MAAMm2B,yBAA2B52B,IAAIuU,OAL1C,Q1CszPb,CAAC,CACH9nB,IAAK,YACLQ,MAAO,S0C/mPU2C,EAAM8P,EAAUo3B,G1CgnP/B,O0C/mPSx3B,QAAQG,MAAM7P,EAAM8P,EAAUo3B,K1CunPxC,CACDrqC,IAAK,aACLQ,MAAO,S0CjnPWoK,EAAK+E,G1CknPrB,O0CjnPSoL,WAAWnQ,EAAK+E,K1CynP1B,CACD3P,IAAK,QACLQ,MAAO,S0CnnPMqC,G1ConPX,I0CpnPqBqD,EAAcgC,UAAAzI,OAAA,QAAAsC,IAAAmG,UAAA,GAAAA,UAAA,GAAJ,GACzBC,EAAU,K1C8nPhB,O0C5nPMtD,KAAGI,OAAOpC,GACVsF,EAAUjH,MAAMQ,KAAKoB,SAASC,iBAAiBF,IACxCgC,KAAGQ,SAASxC,GACnBsF,EAAUjH,MAAMQ,KAAKmB,GACdgC,KAAGO,MAAMvC,KAChBsF,EAAUtF,EAASuF,OAAOvD,KAAGjC,UAG7BiC,KAAGS,MAAM6C,GACF,KAGJA,EAAQW,IAAI,SAAAC,G1CqnPnB,O0CrnPwB,IAAI4/B,EAAK5/B,EAAG7C,S1C0nPnCyiC,EAxrCT,G0C97MAA,KAAKpmC,SAAWgV,UAAUhV,2B1C2nPXomC"",""file"":""plyr.min.mjs"",""sourcesContent"":[""typeof navigator === \""object\"" && function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\""Cannot call a class as a function\"");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\""value\"" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \""[object Arguments]\"") return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\""return\""] != null) _i[\""return\""]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\""Invalid attempt to spread non-iterable instance\"");\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\""Invalid attempt to destructure non-iterable instance\"");\n}\n\nvar defaults = {\n  addCSS: true,\n  // Add CSS to the element to improve usability (required here or in your CSS!)\n  thumbWidth: 15,\n  // The width of the thumb handle\n  watch: true // Watch for new elements that match a string target\n\n};\n\n// Element matches a selector\nfunction matches(element, selector) {\n\n  function match() {\n    return Array.from(document.querySelectorAll(selector)).includes(this);\n  }\n\n  var matches = match;\n  return matches.call(element, selector);\n}\n\n// Trigger event\nfunction trigger(element, type) {\n  if (!element || !type) {\n    return;\n  } // Create and dispatch the event\n\n\n  var event = new Event(type); // Dispatch the event\n\n  element.dispatchEvent(event);\n}\n\n// ==========================================================================\n// Type checking utils\n// ==========================================================================\nvar getConstructor = function getConstructor(input) {\n  return input !== null && typeof input !== 'undefined' ? input.constructor : null;\n};\n\nvar instanceOf = function instanceOf(input, constructor) {\n  return Boolean(input && constructor && input instanceof constructor);\n};\n\nvar isNullOrUndefined = function isNullOrUndefined(input) {\n  return input === null || typeof input === 'undefined';\n};\n\nvar isObject = function isObject(input) {\n  return getConstructor(input) === Object;\n};\n\nvar isNumber = function isNumber(input) {\n  return getConstructor(input) === Number && !Number.isNaN(input);\n};\n\nvar isString = function isString(input) {\n  return getConstructor(input) === String;\n};\n\nvar isBoolean = function isBoolean(input) {\n  return getConstructor(input) === Boolean;\n};\n\nvar isFunction = function isFunction(input) {\n  return getConstructor(input) === Function;\n};\n\nvar isArray = function isArray(input) {\n  return Array.isArray(input);\n};\n\nvar isNodeList = function isNodeList(input) {\n  return instanceOf(input, NodeList);\n};\n\nvar isElement = function isElement(input) {\n  return instanceOf(input, Element);\n};\n\nvar isEvent = function isEvent(input) {\n  return instanceOf(input, Event);\n};\n\nvar isEmpty = function isEmpty(input) {\n  return isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length;\n};\n\nvar is = {\n  nullOrUndefined: isNullOrUndefined,\n  object: isObject,\n  number: isNumber,\n  string: isString,\n  boolean: isBoolean,\n  function: isFunction,\n  array: isArray,\n  nodeList: isNodeList,\n  element: isElement,\n  event: isEvent,\n  empty: isEmpty\n};\n\n// Get the number of decimal places\nfunction getDecimalPlaces(value) {\n  var match = \""\"".concat(value).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\n  if (!match) {\n    return 0;\n  }\n\n  return Math.max(0, // Number of digits right of decimal point.\n  (match[1] ? match[1].length : 0) - ( // Adjust for scientific notation.\n  match[2] ? +match[2] : 0));\n} // Round to the nearest step\n\nfunction round(number, step) {\n  if (step < 1) {\n    var places = getDecimalPlaces(step);\n    return parseFloat(number.toFixed(places));\n  }\n\n  return Math.round(number / step) * step;\n}\n\nvar RangeTouch =\n/*#__PURE__*/\nfunction () {\n  /**\n   * Setup a new instance\n   * @param {String|Element} target\n   * @param {Object} options\n   */\n  function RangeTouch(target, options) {\n    _classCallCheck(this, RangeTouch);\n\n    if (is.element(target)) {\n      // An Element is passed, use it directly\n      this.element = target;\n    } else if (is.string(target)) {\n      // A CSS Selector is passed, fetch it from the DOM\n      this.element = document.querySelector(target);\n    }\n\n    if (!is.element(this.element) || !is.empty(this.element.rangeTouch)) {\n      return;\n    }\n\n    this.config = Object.assign({}, defaults, options);\n    this.init();\n  }\n\n  _createClass(RangeTouch, [{\n    key: \""init\"",\n    value: function init() {\n      // Bail if not a touch enabled device\n      if (!RangeTouch.enabled) {\n        return;\n      } // Add useful CSS\n\n\n      if (this.config.addCSS) {\n        // TODO: Restore original values on destroy\n        this.element.style.userSelect = 'none';\n        this.element.style.webKitUserSelect = 'none';\n        this.element.style.touchAction = 'manipulation';\n      }\n\n      this.listeners(true);\n      this.element.rangeTouch = this;\n    }\n  }, {\n    key: \""destroy\"",\n    value: function destroy() {\n      // Bail if not a touch enabled device\n      if (!RangeTouch.enabled) {\n        return;\n      }\n\n      this.listeners(false);\n      this.element.rangeTouch = null;\n    }\n  }, {\n    key: \""listeners\"",\n    value: function listeners(toggle) {\n      var _this = this;\n\n      var method = toggle ? 'addEventListener' : 'removeEventListener'; // Listen for events\n\n      ['touchstart', 'touchmove', 'touchend'].forEach(function (type) {\n        _this.element[method](type, function (event) {\n          return _this.set(event);\n        }, false);\n      });\n    }\n    /**\n     * Get the value based on touch position\n     * @param {Event} event\n     */\n\n  }, {\n    key: \""get\"",\n    value: function get(event) {\n      if (!RangeTouch.enabled || !is.event(event)) {\n        return null;\n      }\n\n      var input = event.target;\n      var touch = event.changedTouches[0];\n      var min = parseFloat(input.getAttribute('min')) || 0;\n      var max = parseFloat(input.getAttribute('max')) || 100;\n      var step = parseFloat(input.getAttribute('step')) || 1;\n      var delta = max - min; // Calculate percentage\n\n      var percent;\n      var clientRect = input.getBoundingClientRect();\n      var thumbWidth = 100 / clientRect.width * (this.config.thumbWidth / 2) / 100; // Determine left percentage\n\n      percent = 100 / clientRect.width * (touch.clientX - clientRect.left); // Don't allow outside bounds\n\n      if (percent < 0) {\n        percent = 0;\n      } else if (percent > 100) {\n        percent = 100;\n      } // Factor in the thumb offset\n\n\n      if (percent < 50) {\n        percent -= (100 - percent * 2) * thumbWidth;\n      } else if (percent > 50) {\n        percent += (percent - 50) * 2 * thumbWidth;\n      } // Find the closest step to the mouse position\n\n\n      return min + round(delta * (percent / 100), step);\n    }\n    /**\n     * Update range value based on position\n     * @param {Event} event\n     */\n\n  }, {\n    key: \""set\"",\n    value: function set(event) {\n      if (!RangeTouch.enabled || !is.event(event) || event.target.disabled) {\n        return;\n      } // Prevent text highlight on iOS\n\n\n      event.preventDefault(); // Set value\n\n      event.target.value = this.get(event); // Trigger event\n\n      trigger(event.target, event.type === 'touchend' ? 'change' : 'input');\n    }\n  }], [{\n    key: \""setup\"",\n\n    /**\n     * Setup multiple instances\n     * @param {String|Element|NodeList|Array} target\n     * @param {Object} options\n     */\n    value: function setup(target) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var targets = null;\n\n      if (is.empty(target) || is.string(target)) {\n        targets = Array.from(document.querySelectorAll(is.string(target) ? target : 'input[type=\""range\""]'));\n      } else if (is.element(target)) {\n        targets = [target];\n      } else if (is.nodeList(target)) {\n        targets = Array.from(target);\n      } else if (is.array(target)) {\n        targets = target.filter(is.element);\n      }\n\n      if (is.empty(targets)) {\n        return null;\n      }\n\n      var config = Object.assign({}, defaults, options);\n\n      if (is.string(target) && config.watch) {\n        // Create an observer instance\n        var observer = new MutationObserver(function (mutations) {\n          Array.from(mutations).forEach(function (mutation) {\n            Array.from(mutation.addedNodes).forEach(function (node) {\n              if (!is.element(node) || !matches(node, target)) {\n                return;\n              } // eslint-disable-next-line no-unused-vars\n\n\n              var range = new RangeTouch(node, config);\n            });\n          });\n        }); // Pass in the target node, as well as the observer options\n\n        observer.observe(document.body, {\n          childList: true,\n          subtree: true\n        });\n      }\n\n      return targets.map(function (t) {\n        return new RangeTouch(t, options);\n      });\n    }\n  }, {\n    key: \""enabled\"",\n    get: function get() {\n      return 'ontouchstart' in document.documentElement;\n    }\n  }]);\n\n  return RangeTouch;\n}();\n\n// ==========================================================================\n// Type checking utils\n// ==========================================================================\nvar getConstructor$1 = function getConstructor(input) {\n  return input !== null && typeof input !== 'undefined' ? input.constructor : null;\n};\n\nvar instanceOf$1 = function instanceOf(input, constructor) {\n  return Boolean(input && constructor && input instanceof constructor);\n};\n\nvar isNullOrUndefined$1 = function isNullOrUndefined(input) {\n  return input === null || typeof input === 'undefined';\n};\n\nvar isObject$1 = function isObject(input) {\n  return getConstructor$1(input) === Object;\n};\n\nvar isNumber$1 = function isNumber(input) {\n  return getConstructor$1(input) === Number && !Number.isNaN(input);\n};\n\nvar isString$1 = function isString(input) {\n  return getConstructor$1(input) === String;\n};\n\nvar isBoolean$1 = function isBoolean(input) {\n  return getConstructor$1(input) === Boolean;\n};\n\nvar isFunction$1 = function isFunction(input) {\n  return getConstructor$1(input) === Function;\n};\n\nvar isArray$1 = function isArray(input) {\n  return Array.isArray(input);\n};\n\nvar isWeakMap = function isWeakMap(input) {\n  return instanceOf$1(input, WeakMap);\n};\n\nvar isNodeList$1 = function isNodeList(input) {\n  return instanceOf$1(input, NodeList);\n};\n\nvar isElement$1 = function isElement(input) {\n  return instanceOf$1(input, Element);\n};\n\nvar isTextNode = function isTextNode(input) {\n  return getConstructor$1(input) === Text;\n};\n\nvar isEvent$1 = function isEvent(input) {\n  return instanceOf$1(input, Event);\n};\n\nvar isKeyboardEvent = function isKeyboardEvent(input) {\n  return instanceOf$1(input, KeyboardEvent);\n};\n\nvar isCue = function isCue(input) {\n  return instanceOf$1(input, window.TextTrackCue) || instanceOf$1(input, window.VTTCue);\n};\n\nvar isTrack = function isTrack(input) {\n  return instanceOf$1(input, TextTrack) || !isNullOrUndefined$1(input) && isString$1(input.kind);\n};\n\nvar isPromise = function isPromise(input) {\n  return instanceOf$1(input, Promise);\n};\n\nvar isEmpty$1 = function isEmpty(input) {\n  return isNullOrUndefined$1(input) || (isString$1(input) || isArray$1(input) || isNodeList$1(input)) && !input.length || isObject$1(input) && !Object.keys(input).length;\n};\n\nvar isUrl = function isUrl(input) {\n  // Accept a URL object\n  if (instanceOf$1(input, window.URL)) {\n    return true;\n  } // Must be string from here\n\n\n  if (!isString$1(input)) {\n    return false;\n  } // Add the protocol if required\n\n\n  var string = input;\n\n  if (!input.startsWith('http://') || !input.startsWith('https://')) {\n    string = \""http://\"".concat(input);\n  }\n\n  try {\n    return !isEmpty$1(new URL(string).hostname);\n  } catch (e) {\n    return false;\n  }\n};\n\nvar is$1 = {\n  nullOrUndefined: isNullOrUndefined$1,\n  object: isObject$1,\n  number: isNumber$1,\n  string: isString$1,\n  boolean: isBoolean$1,\n  function: isFunction$1,\n  array: isArray$1,\n  weakMap: isWeakMap,\n  nodeList: isNodeList$1,\n  element: isElement$1,\n  textNode: isTextNode,\n  event: isEvent$1,\n  keyboardEvent: isKeyboardEvent,\n  cue: isCue,\n  track: isTrack,\n  promise: isPromise,\n  url: isUrl,\n  empty: isEmpty$1\n};\n\n// ==========================================================================\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\n\nvar supportsPassiveListeners = function () {\n  // Test via a getter in the options object to see if the passive property is accessed\n  var supported = false;\n\n  try {\n    var options = Object.defineProperty({}, 'passive', {\n      get: function get() {\n        supported = true;\n        return null;\n      }\n    });\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {// Do nothing\n  }\n\n  return supported;\n}(); // Toggle event listener\n\n\nfunction toggleListener(element, event, callback) {\n  var _this = this;\n\n  var toggle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n  var capture = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n  // Bail if no element, event, or callback\n  if (!element || !('addEventListener' in element) || is$1.empty(event) || !is$1.function(callback)) {\n    return;\n  } // Allow multiple events\n\n\n  var events = event.split(' '); // Build options\n  // Default to just the capture boolean for browsers with no passive listener support\n\n  var options = capture; // If passive events listeners are supported\n\n  if (supportsPassiveListeners) {\n    options = {\n      // Whether the listener can be passive (i.e. default never prevented)\n      passive: passive,\n      // Whether the listener is a capturing listener or not\n      capture: capture\n    };\n  } // If a single node is passed, bind the event listener\n\n\n  events.forEach(function (type) {\n    if (_this && _this.eventListeners && toggle) {\n      // Cache event listener\n      _this.eventListeners.push({\n        element: element,\n        type: type,\n        callback: callback,\n        options: options\n      });\n    }\n\n    element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n  });\n} // Bind event handler\n\nfunction on(element) {\n  var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  var callback = arguments.length > 2 ? arguments[2] : undefined;\n  var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n  var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n  toggleListener.call(this, element, events, callback, true, passive, capture);\n} // Unbind event handler\n\nfunction off(element) {\n  var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  var callback = arguments.length > 2 ? arguments[2] : undefined;\n  var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n  var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n  toggleListener.call(this, element, events, callback, false, passive, capture);\n} // Bind once-only event handler\n\nfunction once(element) {\n  var _this2 = this;\n\n  var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  var callback = arguments.length > 2 ? arguments[2] : undefined;\n  var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n  var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  var onceCallback = function onceCallback() {\n    off(element, events, onceCallback, passive, capture);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    callback.apply(_this2, args);\n  };\n\n  toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n} // Trigger event\n\nfunction triggerEvent(element) {\n  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var detail = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n  // Bail if no element\n  if (!is$1.element(element) || is$1.empty(type)) {\n    return;\n  } // Create and dispatch the event\n\n\n  var event = new CustomEvent(type, {\n    bubbles: bubbles,\n    detail: Object.assign({}, detail, {\n      plyr: this\n    })\n  }); // Dispatch the event\n\n  element.dispatchEvent(event);\n} // Unbind all cached event listeners\n\nfunction unbindListeners() {\n  if (this && this.eventListeners) {\n    this.eventListeners.forEach(function (item) {\n      var element = item.element,\n          type = item.type,\n          callback = item.callback,\n          options = item.options;\n      element.removeEventListener(type, callback, options);\n    });\n    this.eventListeners = [];\n  }\n} // Run method when / if player is ready\n\nfunction ready() {\n  var _this3 = this;\n\n  return new Promise(function (resolve) {\n    return _this3.ready ? setTimeout(resolve, 0) : on.call(_this3, _this3.elements.container, 'ready', resolve);\n  }).then(function () {});\n}\n\nfunction wrap(elements, wrapper) {\n  // Convert `elements` to an array, if necessary.\n  var targets = elements.length ? elements : [elements]; // Loops backwards to prevent having to clone the wrapper on the\n  // first element (see `child` below).\n\n  Array.from(targets).reverse().forEach(function (element, index) {\n    var child = index > 0 ? wrapper.cloneNode(true) : wrapper; // Cache the current parent and sibling.\n\n    var parent = element.parentNode;\n    var sibling = element.nextSibling; // Wrap the element (is automatically removed from its current\n    // parent).\n\n    child.appendChild(element); // If the element had a sibling, insert the wrapper before\n    // the sibling to maintain the HTML structure; otherwise, just\n    // append it to the parent.\n\n    if (sibling) {\n      parent.insertBefore(child, sibling);\n    } else {\n      parent.appendChild(child);\n    }\n  });\n} // Set attributes\n\nfunction setAttributes(element, attributes) {\n  if (!is$1.element(element) || is$1.empty(attributes)) {\n    return;\n  } // Assume null and undefined attributes should be left out,\n  // Setting them would otherwise convert them to \""null\"" and \""undefined\""\n\n\n  Object.entries(attributes).filter(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        value = _ref2[1];\n\n    return !is$1.nullOrUndefined(value);\n  }).forEach(function (_ref3) {\n    var _ref4 = _slicedToArray(_ref3, 2),\n        key = _ref4[0],\n        value = _ref4[1];\n\n    return element.setAttribute(key, value);\n  });\n} // Create a DocumentFragment\n\nfunction createElement(type, attributes, text) {\n  // Create a new <element>\n  var element = document.createElement(type); // Set all passed attributes\n\n  if (is$1.object(attributes)) {\n    setAttributes(element, attributes);\n  } // Add text node\n\n\n  if (is$1.string(text)) {\n    element.innerText = text;\n  } // Return built element\n\n\n  return element;\n} // Inaert an element after another\n\nfunction insertAfter(element, target) {\n  if (!is$1.element(element) || !is$1.element(target)) {\n    return;\n  }\n\n  target.parentNode.insertBefore(element, target.nextSibling);\n} // Insert a DocumentFragment\n\nfunction insertElement(type, parent, attributes, text) {\n  if (!is$1.element(parent)) {\n    return;\n  }\n\n  parent.appendChild(createElement(type, attributes, text));\n} // Remove element(s)\n\nfunction removeElement(element) {\n  if (is$1.nodeList(element) || is$1.array(element)) {\n    Array.from(element).forEach(removeElement);\n    return;\n  }\n\n  if (!is$1.element(element) || !is$1.element(element.parentNode)) {\n    return;\n  }\n\n  element.parentNode.removeChild(element);\n} // Remove all child elements\n\nfunction emptyElement(element) {\n  if (!is$1.element(element)) {\n    return;\n  }\n\n  var length = element.childNodes.length;\n\n  while (length > 0) {\n    element.removeChild(element.lastChild);\n    length -= 1;\n  }\n} // Replace element\n\nfunction replaceElement(newChild, oldChild) {\n  if (!is$1.element(oldChild) || !is$1.element(oldChild.parentNode) || !is$1.element(newChild)) {\n    return null;\n  }\n\n  oldChild.parentNode.replaceChild(newChild, oldChild);\n  return newChild;\n} // Get an attribute object from a string selector\n\nfunction getAttributesFromSelector(sel, existingAttributes) {\n  // For example:\n  // '.test' to { class: 'test' }\n  // '#test' to { id: 'test' }\n  // '[data-test=\""test\""]' to { 'data-test': 'test' }\n  if (!is$1.string(sel) || is$1.empty(sel)) {\n    return {};\n  }\n\n  var attributes = {};\n  var existing = existingAttributes;\n  sel.split(',').forEach(function (s) {\n    // Remove whitespace\n    var selector = s.trim();\n    var className = selector.replace('.', '');\n    var stripped = selector.replace(/[[\\]]/g, ''); // Get the parts and value\n\n    var parts = stripped.split('=');\n    var key = parts[0];\n    var value = parts.length > 1 ? parts[1].replace(/[\""']/g, '') : ''; // Get the first character\n\n    var start = selector.charAt(0);\n\n    switch (start) {\n      case '.':\n        // Add to existing classname\n        if (is$1.object(existing) && is$1.string(existing.class)) {\n          existing.class += \"" \"".concat(className);\n        }\n\n        attributes.class = className;\n        break;\n\n      case '#':\n        // ID selector\n        attributes.id = selector.replace('#', '');\n        break;\n\n      case '[':\n        // Attribute selector\n        attributes[key] = value;\n        break;\n\n      default:\n        break;\n    }\n  });\n  return attributes;\n} // Toggle hidden\n\nfunction toggleHidden(element, hidden) {\n  if (!is$1.element(element)) {\n    return;\n  }\n\n  var hide = hidden;\n\n  if (!is$1.boolean(hide)) {\n    hide = !element.hidden;\n  }\n\n  if (hide) {\n    element.setAttribute('hidden', '');\n  } else {\n    element.removeAttribute('hidden');\n  }\n} // Mirror Element.classList.toggle, with IE compatibility for \""force\"" argument\n\nfunction toggleClass(element, className, force) {\n  if (is$1.nodeList(element)) {\n    return Array.from(element).map(function (e) {\n      return toggleClass(e, className, force);\n    });\n  }\n\n  if (is$1.element(element)) {\n    var method = 'toggle';\n\n    if (typeof force !== 'undefined') {\n      method = force ? 'add' : 'remove';\n    }\n\n    element.classList[method](className);\n    return element.classList.contains(className);\n  }\n\n  return false;\n} // Has class name\n\nfunction hasClass(element, className) {\n  return is$1.element(element) && element.classList.contains(className);\n} // Element matches selector\n\nfunction matches$1(element, selector) {\n\n  function match() {\n    return Array.from(document.querySelectorAll(selector)).includes(this);\n  }\n\n  var matches = match;\n  return matches.call(element, selector);\n} // Find all elements\n\nfunction getElements(selector) {\n  return this.elements.container.querySelectorAll(selector);\n} // Find a single element\n\nfunction getElement(selector) {\n  return this.elements.container.querySelector(selector);\n} // Trap focus inside container\n\nfunction trapFocus() {\n  var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n  var toggle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  if (!is$1.element(element)) {\n    return;\n  }\n\n  var focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n  var first = focusable[0];\n  var last = focusable[focusable.length - 1];\n\n  var trap = function trap(event) {\n    // Bail if not tab key or not fullscreen\n    if (event.key !== 'Tab' || event.keyCode !== 9) {\n      return;\n    } // Get the current focused element\n\n\n    var focused = document.activeElement;\n\n    if (focused === last && !event.shiftKey) {\n      // Move focus to first element that can be tabbed if Shift isn't used\n      first.focus();\n      event.preventDefault();\n    } else if (focused === first && event.shiftKey) {\n      // Move focus to last element that can be tabbed if Shift is used\n      last.focus();\n      event.preventDefault();\n    }\n  };\n\n  toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n} // Set focus and tab focus class\n\nfunction setFocus() {\n  var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n  var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  if (!is$1.element(element)) {\n    return;\n  } // Set regular focus\n\n\n  element.focus({\n    preventScroll: true\n  }); // If we want to mimic keyboard focus via tab\n\n  if (tabFocus) {\n    toggleClass(element, this.config.classNames.tabFocus);\n  }\n}\n\n// ==========================================================================\nvar transitionEndEvent = function () {\n  var element = document.createElement('span');\n  var events = {\n    WebkitTransition: 'webkitTransitionEnd',\n    MozTransition: 'transitionend',\n    OTransition: 'oTransitionEnd otransitionend',\n    transition: 'transitionend'\n  };\n  var type = Object.keys(events).find(function (event) {\n    return element.style[event] !== undefined;\n  });\n  return is$1.string(type) ? events[type] : false;\n}(); // Force repaint of element\n\nfunction repaint(element) {\n  setTimeout(function () {\n    try {\n      toggleHidden(element, true);\n      element.offsetHeight; // eslint-disable-line\n\n      toggleHidden(element, false);\n    } catch (e) {// Do nothing\n    }\n  }, 0);\n}\n\n// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\nvar browser = {\n  isIE:\n  /* @cc_on!@ */\n  !!document.documentMode,\n  isEdge: window.navigator.userAgent.includes('Edge'),\n  isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n  isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n  isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform)\n};\n\nvar defaultCodecs = {\n  'audio/ogg': 'vorbis',\n  'audio/wav': '1',\n  'video/webm': 'vp8, vorbis',\n  'video/mp4': 'avc1.42E01E, mp4a.40.2',\n  'video/ogg': 'theora'\n}; // Check for feature support\n\nvar support = {\n  // Basic support\n  audio: 'canPlayType' in document.createElement('audio'),\n  video: 'canPlayType' in document.createElement('video'),\n  // Check for support\n  // Basic functionality vs full UI\n  check: function check(type, provider, playsinline) {\n    var canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n    var api = support[type] || provider !== 'html5';\n    var ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n    return {\n      api: api,\n      ui: ui\n    };\n  },\n  // Picture-in-picture support\n  // Safari & Chrome only currently\n  pip: function () {\n    if (browser.isIPhone) {\n      return false;\n    } // Safari\n    // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n\n\n    if (is$1.function(createElement('video').webkitSetPresentationMode)) {\n      return true;\n    } // Chrome\n    // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n\n\n    if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n      return true;\n    }\n\n    return false;\n  }(),\n  // Airplay support\n  // Safari only currently\n  airplay: is$1.function(window.WebKitPlaybackTargetAvailabilityEvent),\n  // Inline playback support\n  // https://webkit.org/blog/6784/new-video-policies-for-ios/\n  playsinline: 'playsInline' in document.createElement('video'),\n  // Check for mime type support against a player instance\n  // Credits: http://diveintohtml5.info/everything.html\n  // Related: http://www.leanbackplayer.com/test/h5mt.html\n  mime: function mime(input) {\n    if (is$1.empty(input)) {\n      return false;\n    }\n\n    var _input$split = input.split('/'),\n        _input$split2 = _slicedToArray(_input$split, 1),\n        mediaType = _input$split2[0];\n\n    var type = input; // Verify we're using HTML5 and there's no media type mismatch\n\n    if (!this.isHTML5 || mediaType !== this.type) {\n      return false;\n    } // Add codec if required\n\n\n    if (Object.keys(defaultCodecs).includes(type)) {\n      type += \""; codecs=\\\""\"".concat(defaultCodecs[input], \""\\\""\"");\n    }\n\n    try {\n      return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n    } catch (e) {\n      return false;\n    }\n  },\n  // Check for textTracks support\n  textTracks: 'textTracks' in document.createElement('video'),\n  // <input type=\""range\""> Sliders\n  rangeInput: function () {\n    var range = document.createElement('input');\n    range.type = 'range';\n    return range.type === 'range';\n  }(),\n  // Touch\n  // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n  touch: 'ontouchstart' in document.documentElement,\n  // Detect transitions support\n  transitions: transitionEndEvent !== false,\n  // Reduced motion iOS & MacOS setting\n  // https://webkit.org/blog/7551/responsive-design-for-motion/\n  reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches\n};\n\nfunction validateRatio(input) {\n  if (!is$1.array(input) && (!is$1.string(input) || !input.includes(':'))) {\n    return false;\n  }\n\n  var ratio = is$1.array(input) ? input : input.split(':');\n  return ratio.map(Number).every(is$1.number);\n}\nfunction reduceAspectRatio(ratio) {\n  if (!is$1.array(ratio) || !ratio.every(is$1.number)) {\n    return null;\n  }\n\n  var _ratio = _slicedToArray(ratio, 2),\n      width = _ratio[0],\n      height = _ratio[1];\n\n  var getDivider = function getDivider(w, h) {\n    return h === 0 ? w : getDivider(h, w % h);\n  };\n\n  var divider = getDivider(width, height);\n  return [width / divider, height / divider];\n}\nfunction getAspectRatio(input) {\n  var parse = function parse(ratio) {\n    if (!validateRatio(ratio)) {\n      return null;\n    }\n\n    return ratio.split(':').map(Number);\n  }; // Provided ratio\n\n\n  var ratio = parse(input); // Get from config\n\n  if (ratio === null) {\n    ratio = parse(this.config.ratio);\n  } // Get from embed\n\n\n  if (ratio === null && !is$1.empty(this.embed) && is$1.string(this.embed.ratio)) {\n    ratio = parse(this.embed.ratio);\n  }\n\n  return ratio;\n} // Set aspect ratio for responsive container\n\nfunction setAspectRatio(input) {\n  if (!this.isVideo) {\n    return {};\n  }\n\n  var ratio = getAspectRatio.call(this, input);\n\n  var _ref = is$1.array(ratio) ? ratio : [0, 0],\n      _ref2 = _slicedToArray(_ref, 2),\n      w = _ref2[0],\n      h = _ref2[1];\n\n  var padding = 100 / w * h;\n  this.elements.wrapper.style.paddingBottom = \""\"".concat(padding, \""%\""); // For Vimeo we have an extra <div> to hide the standard controls and UI\n\n  if (this.isVimeo && this.supported.ui) {\n    var height = 240;\n    var offset = (height - padding) / (height / 50);\n    this.media.style.transform = \""translateY(-\"".concat(offset, \""%)\"");\n  } else if (this.isHTML5) {\n    this.elements.wrapper.classList.toggle(this.config.classNames.videoFixedRatio, ratio !== null);\n  }\n\n  return {\n    padding: padding,\n    ratio: ratio\n  };\n}\n\n// ==========================================================================\nvar html5 = {\n  getSources: function getSources() {\n    var _this = this;\n\n    if (!this.isHTML5) {\n      return [];\n    }\n\n    var sources = Array.from(this.media.querySelectorAll('source')); // Filter out unsupported sources (if type is specified)\n\n    return sources.filter(function (source) {\n      var type = source.getAttribute('type');\n\n      if (is$1.empty(type)) {\n        return true;\n      }\n\n      return support.mime.call(_this, type);\n    });\n  },\n  // Get quality levels\n  getQualityOptions: function getQualityOptions() {\n    // Get sizes from <source> elements\n    return html5.getSources.call(this).map(function (source) {\n      return Number(source.getAttribute('size'));\n    }).filter(Boolean);\n  },\n  extend: function extend() {\n    if (!this.isHTML5) {\n      return;\n    }\n\n    var player = this; // Set aspect ratio if set\n\n    setAspectRatio.call(player); // Quality\n\n    Object.defineProperty(player.media, 'quality', {\n      get: function get() {\n        // Get sources\n        var sources = html5.getSources.call(player);\n        var source = sources.find(function (source) {\n          return source.getAttribute('src') === player.source;\n        }); // Return size, if match is found\n\n        return source && Number(source.getAttribute('size'));\n      },\n      set: function set(input) {\n        // Get sources\n        var sources = html5.getSources.call(player); // Get first match for requested size\n\n        var source = sources.find(function (source) {\n          return Number(source.getAttribute('size')) === input;\n        }); // No matching source found\n\n        if (!source) {\n          return;\n        } // Get current state\n\n\n        var _player$media = player.media,\n            currentTime = _player$media.currentTime,\n            paused = _player$media.paused,\n            preload = _player$media.preload,\n            readyState = _player$media.readyState; // Set new source\n\n        player.media.src = source.getAttribute('src'); // Prevent loading if preload=\""none\"" and the current source isn't loaded (#1044)\n\n        if (preload !== 'none' || readyState) {\n          // Restore time\n          player.once('loadedmetadata', function () {\n            player.currentTime = currentTime; // Resume playing\n\n            if (!paused) {\n              player.play();\n            }\n          }); // Load new source\n\n          player.media.load();\n        } // Trigger change event\n\n\n        triggerEvent.call(player, player.media, 'qualitychange', false, {\n          quality: input\n        });\n      }\n    });\n  },\n  // Cancel current network requests\n  // See https://github.com/sampotts/plyr/issues/174\n  cancelRequests: function cancelRequests() {\n    if (!this.isHTML5) {\n      return;\n    } // Remove child sources\n\n\n    removeElement(html5.getSources.call(this)); // Set blank video src attribute\n    // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n    // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n\n    this.media.setAttribute('src', this.config.blankVideo); // Load the new empty source\n    // This will cancel existing requests\n    // See https://github.com/sampotts/plyr/issues/174\n\n    this.media.load(); // Debugging\n\n    this.debug.log('Cancelled network requests');\n  }\n};\n\n// ==========================================================================\n\nfunction dedupe(array) {\n  if (!is$1.array(array)) {\n    return array;\n  }\n\n  return array.filter(function (item, index) {\n    return array.indexOf(item) === index;\n  });\n} // Get the closest value in an array\n\nfunction closest(array, value) {\n  if (!is$1.array(array) || !array.length) {\n    return null;\n  }\n\n  return array.reduce(function (prev, curr) {\n    return Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev;\n  });\n}\n\nfunction cloneDeep(object) {\n  return JSON.parse(JSON.stringify(object));\n} // Get a nested value in an object\n\nfunction getDeep(object, path) {\n  return path.split('.').reduce(function (obj, key) {\n    return obj && obj[key];\n  }, object);\n} // Deep extend destination object with N more objects\n\nfunction extend() {\n  var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    sources[_key - 1] = arguments[_key];\n  }\n\n  if (!sources.length) {\n    return target;\n  }\n\n  var source = sources.shift();\n\n  if (!is$1.object(source)) {\n    return target;\n  }\n\n  Object.keys(source).forEach(function (key) {\n    if (is$1.object(source[key])) {\n      if (!Object.keys(target).includes(key)) {\n        Object.assign(target, _defineProperty({}, key, {}));\n      }\n\n      extend(target[key], source[key]);\n    } else {\n      Object.assign(target, _defineProperty({}, key, source[key]));\n    }\n  });\n  return extend.apply(void 0, [target].concat(sources));\n}\n\n// ==========================================================================\n\nfunction generateId(prefix) {\n  return \""\"".concat(prefix, \""-\"").concat(Math.floor(Math.random() * 10000));\n} // Format string\n\nfunction format(input) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  if (is$1.empty(input)) {\n    return input;\n  }\n\n  return input.toString().replace(/{(\\d+)}/g, function (match, i) {\n    return args[i].toString();\n  });\n} // Get percentage\n\nfunction getPercentage(current, max) {\n  if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n    return 0;\n  }\n\n  return (current / max * 100).toFixed(2);\n} // Replace all occurances of a string in a string\n\nfunction replaceAll() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var find = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  var replace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n  return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n} // Convert to title case\n\nfunction toTitleCase() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  return input.toString().replace(/\\w\\S*/g, function (text) {\n    return text.charAt(0).toUpperCase() + text.substr(1).toLowerCase();\n  });\n} // Convert string to pascalCase\n\nfunction toPascalCase() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var string = input.toString(); // Convert kebab case\n\n  string = replaceAll(string, '-', ' '); // Convert snake case\n\n  string = replaceAll(string, '_', ' '); // Convert to title case\n\n  string = toTitleCase(string); // Convert to pascal case\n\n  return replaceAll(string, ' ', '');\n} // Convert string to pascalCase\n\nfunction toCamelCase() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var string = input.toString(); // Convert to pascal case\n\n  string = toPascalCase(string); // Convert first character to lowercase\n\n  return string.charAt(0).toLowerCase() + string.slice(1);\n} // Remove HTML from a string\n\nfunction stripHTML(source) {\n  var fragment = document.createDocumentFragment();\n  var element = document.createElement('div');\n  fragment.appendChild(element);\n  element.innerHTML = source;\n  return fragment.firstChild.innerText;\n} // Like outerHTML, but also works for DocumentFragment\n\nfunction getHTML(element) {\n  var wrapper = document.createElement('div');\n  wrapper.appendChild(element);\n  return wrapper.innerHTML;\n}\n\nvar resources = {\n  pip: 'PIP',\n  airplay: 'AirPlay',\n  html5: 'HTML5',\n  vimeo: 'Vimeo',\n  youtube: 'YouTube'\n};\nvar i18n = {\n  get: function get() {\n    var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (is$1.empty(key) || is$1.empty(config)) {\n      return '';\n    }\n\n    var string = getDeep(config.i18n, key);\n\n    if (is$1.empty(string)) {\n      if (Object.keys(resources).includes(key)) {\n        return resources[key];\n      }\n\n      return '';\n    }\n\n    var replace = {\n      '{seektime}': config.seekTime,\n      '{title}': config.title\n    };\n    Object.entries(replace).forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          key = _ref2[0],\n          value = _ref2[1];\n\n      string = replaceAll(string, key, value);\n    });\n    return string;\n  }\n};\n\nvar Storage =\n/*#__PURE__*/\nfunction () {\n  function Storage(player) {\n    _classCallCheck(this, Storage);\n\n    this.enabled = player.config.storage.enabled;\n    this.key = player.config.storage.key;\n  } // Check for actual support (see if we can use it)\n\n\n  _createClass(Storage, [{\n    key: \""get\"",\n    value: function get(key) {\n      if (!Storage.supported || !this.enabled) {\n        return null;\n      }\n\n      var store = window.localStorage.getItem(this.key);\n\n      if (is$1.empty(store)) {\n        return null;\n      }\n\n      var json = JSON.parse(store);\n      return is$1.string(key) && key.length ? json[key] : json;\n    }\n  }, {\n    key: \""set\"",\n    value: function set(object) {\n      // Bail if we don't have localStorage support or it's disabled\n      if (!Storage.supported || !this.enabled) {\n        return;\n      } // Can only store objectst\n\n\n      if (!is$1.object(object)) {\n        return;\n      } // Get current storage\n\n\n      var storage = this.get(); // Default to empty object\n\n      if (is$1.empty(storage)) {\n        storage = {};\n      } // Update the working copy of the values\n\n\n      extend(storage, object); // Update storage\n\n      window.localStorage.setItem(this.key, JSON.stringify(storage));\n    }\n  }], [{\n    key: \""supported\"",\n    get: function get() {\n      try {\n        if (!('localStorage' in window)) {\n          return false;\n        }\n\n        var test = '___test'; // Try to use it (it might be disabled, e.g. user is in private mode)\n        // see: https://github.com/sampotts/plyr/issues/131\n\n        window.localStorage.setItem(test, test);\n        window.localStorage.removeItem(test);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    }\n  }]);\n\n  return Storage;\n}();\n\n// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\nfunction fetch(url) {\n  var responseType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'text';\n  return new Promise(function (resolve, reject) {\n    try {\n      var request = new XMLHttpRequest(); // Check for CORS support\n\n      if (!('withCredentials' in request)) {\n        return;\n      }\n\n      request.addEventListener('load', function () {\n        if (responseType === 'text') {\n          try {\n            resolve(JSON.parse(request.responseText));\n          } catch (e) {\n            resolve(request.responseText);\n          }\n        } else {\n          resolve(request.response);\n        }\n      });\n      request.addEventListener('error', function () {\n        throw new Error(request.status);\n      });\n      request.open('GET', url, true); // Set the required response type\n\n      request.responseType = responseType;\n      request.send();\n    } catch (e) {\n      reject(e);\n    }\n  });\n}\n\n// ==========================================================================\n\nfunction loadSprite(url, id) {\n  if (!is$1.string(url)) {\n    return;\n  }\n\n  var prefix = 'cache';\n  var hasId = is$1.string(id);\n  var isCached = false;\n\n  var exists = function exists() {\n    return document.getElementById(id) !== null;\n  };\n\n  var update = function update(container, data) {\n    container.innerHTML = data; // Check again incase of race condition\n\n    if (hasId && exists()) {\n      return;\n    } // Inject the SVG to the body\n\n\n    document.body.insertAdjacentElement('afterbegin', container);\n  }; // Only load once if ID set\n\n\n  if (!hasId || !exists()) {\n    var useStorage = Storage.supported; // Create container\n\n    var container = document.createElement('div');\n    container.setAttribute('hidden', '');\n\n    if (hasId) {\n      container.setAttribute('id', id);\n    } // Check in cache\n\n\n    if (useStorage) {\n      var cached = window.localStorage.getItem(\""\"".concat(prefix, \""-\"").concat(id));\n      isCached = cached !== null;\n\n      if (isCached) {\n        var data = JSON.parse(cached);\n        update(container, data.content);\n      }\n    } // Get the sprite\n\n\n    fetch(url).then(function (result) {\n      if (is$1.empty(result)) {\n        return;\n      }\n\n      if (useStorage) {\n        window.localStorage.setItem(\""\"".concat(prefix, \""-\"").concat(id), JSON.stringify({\n          content: result\n        }));\n      }\n\n      update(container, result);\n    }).catch(function () {});\n  }\n}\n\n// ==========================================================================\n\nvar getHours = function getHours(value) {\n  return Math.trunc(value / 60 / 60 % 60, 10);\n};\nvar getMinutes = function getMinutes(value) {\n  return Math.trunc(value / 60 % 60, 10);\n};\nvar getSeconds = function getSeconds(value) {\n  return Math.trunc(value % 60, 10);\n}; // Format time to UI friendly string\n\nfunction formatTime() {\n  var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  var displayHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var inverted = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  // Bail if the value isn't a number\n  if (!is$1.number(time)) {\n    return formatTime(null, displayHours, inverted);\n  } // Format time component to add leading zero\n\n\n  var format = function format(value) {\n    return \""0\"".concat(value).slice(-2);\n  }; // Breakdown to hours, mins, secs\n\n\n  var hours = getHours(time);\n  var mins = getMinutes(time);\n  var secs = getSeconds(time); // Do we need to display hours?\n\n  if (displayHours || hours > 0) {\n    hours = \""\"".concat(hours, \"":\"");\n  } else {\n    hours = '';\n  } // Render\n\n\n  return \""\"".concat(inverted && time > 0 ? '-' : '').concat(hours).concat(format(mins), \"":\"").concat(format(secs));\n}\n\nvar controls = {\n  // Get icon URL\n  getIconUrl: function getIconUrl() {\n    var url = new URL(this.config.iconUrl, window.location);\n    var cors = url.host !== window.location.host || browser.isIE && !window.svg4everybody;\n    return {\n      url: this.config.iconUrl,\n      cors: cors\n    };\n  },\n  // Find the UI controls\n  findElements: function findElements() {\n    try {\n      this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper); // Buttons\n\n      this.elements.buttons = {\n        play: getElements.call(this, this.config.selectors.buttons.play),\n        pause: getElement.call(this, this.config.selectors.buttons.pause),\n        restart: getElement.call(this, this.config.selectors.buttons.restart),\n        rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n        fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n        mute: getElement.call(this, this.config.selectors.buttons.mute),\n        pip: getElement.call(this, this.config.selectors.buttons.pip),\n        airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n        settings: getElement.call(this, this.config.selectors.buttons.settings),\n        captions: getElement.call(this, this.config.selectors.buttons.captions),\n        fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen)\n      }; // Progress\n\n      this.elements.progress = getElement.call(this, this.config.selectors.progress); // Inputs\n\n      this.elements.inputs = {\n        seek: getElement.call(this, this.config.selectors.inputs.seek),\n        volume: getElement.call(this, this.config.selectors.inputs.volume)\n      }; // Display\n\n      this.elements.display = {\n        buffer: getElement.call(this, this.config.selectors.display.buffer),\n        currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n        duration: getElement.call(this, this.config.selectors.display.duration)\n      }; // Seek tooltip\n\n      if (is$1.element(this.elements.progress)) {\n        this.elements.display.seekTooltip = this.elements.progress.querySelector(\"".\"".concat(this.config.classNames.tooltip));\n      }\n\n      return true;\n    } catch (error) {\n      // Log it\n      this.debug.warn('It looks like there is a problem with your custom controls HTML', error); // Restore native video controls\n\n      this.toggleNativeControls(true);\n      return false;\n    }\n  },\n  // Create <svg> icon\n  createIcon: function createIcon(type, attributes) {\n    var namespace = 'http://www.w3.org/2000/svg';\n    var iconUrl = controls.getIconUrl.call(this);\n    var iconPath = \""\"".concat(!iconUrl.cors ? iconUrl.url : '', \""#\"").concat(this.config.iconPrefix); // Create <svg>\n\n    var icon = document.createElementNS(namespace, 'svg');\n    setAttributes(icon, extend(attributes, {\n      role: 'presentation',\n      focusable: 'false'\n    })); // Create the <use> to reference sprite\n\n    var use = document.createElementNS(namespace, 'use');\n    var path = \""\"".concat(iconPath, \""-\"").concat(type); // Set `href` attributes\n    // https://github.com/sampotts/plyr/issues/460\n    // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n\n    if ('href' in use) {\n      use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n    } // Always set the older attribute even though it's \""deprecated\"" (it'll be around for ages)\n\n\n    use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path); // Add <use> to <svg>\n\n    icon.appendChild(use);\n    return icon;\n  },\n  // Create hidden text label\n  createLabel: function createLabel(key) {\n    var attr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var text = i18n.get(key, this.config);\n    var attributes = Object.assign({}, attr, {\n      class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' ')\n    });\n    return createElement('span', attributes, text);\n  },\n  // Create a badge\n  createBadge: function createBadge(text) {\n    if (is$1.empty(text)) {\n      return null;\n    }\n\n    var badge = createElement('span', {\n      class: this.config.classNames.menu.value\n    });\n    badge.appendChild(createElement('span', {\n      class: this.config.classNames.menu.badge\n    }, text));\n    return badge;\n  },\n  // Create a <button>\n  createButton: function createButton(buttonType, attr) {\n    var attributes = Object.assign({}, attr);\n    var type = toCamelCase(buttonType);\n    var props = {\n      element: 'button',\n      toggle: false,\n      label: null,\n      icon: null,\n      labelPressed: null,\n      iconPressed: null\n    };\n    ['element', 'icon', 'label'].forEach(function (key) {\n      if (Object.keys(attributes).includes(key)) {\n        props[key] = attributes[key];\n        delete attributes[key];\n      }\n    }); // Default to 'button' type to prevent form submission\n\n    if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n      attributes.type = 'button';\n    } // Set class name\n\n\n    if (Object.keys(attributes).includes('class')) {\n      if (!attributes.class.includes(this.config.classNames.control)) {\n        attributes.class += \"" \"".concat(this.config.classNames.control);\n      }\n    } else {\n      attributes.class = this.config.classNames.control;\n    } // Large play button\n\n\n    switch (buttonType) {\n      case 'play':\n        props.toggle = true;\n        props.label = 'play';\n        props.labelPressed = 'pause';\n        props.icon = 'play';\n        props.iconPressed = 'pause';\n        break;\n\n      case 'mute':\n        props.toggle = true;\n        props.label = 'mute';\n        props.labelPressed = 'unmute';\n        props.icon = 'volume';\n        props.iconPressed = 'muted';\n        break;\n\n      case 'captions':\n        props.toggle = true;\n        props.label = 'enableCaptions';\n        props.labelPressed = 'disableCaptions';\n        props.icon = 'captions-off';\n        props.iconPressed = 'captions-on';\n        break;\n\n      case 'fullscreen':\n        props.toggle = true;\n        props.label = 'enterFullscreen';\n        props.labelPressed = 'exitFullscreen';\n        props.icon = 'enter-fullscreen';\n        props.iconPressed = 'exit-fullscreen';\n        break;\n\n      case 'play-large':\n        attributes.class += \"" \"".concat(this.config.classNames.control, \""--overlaid\"");\n        type = 'play';\n        props.label = 'play';\n        props.icon = 'play';\n        break;\n\n      default:\n        if (is$1.empty(props.label)) {\n          props.label = type;\n        }\n\n        if (is$1.empty(props.icon)) {\n          props.icon = buttonType;\n        }\n\n    }\n\n    var button = createElement(props.element); // Setup toggle icon and labels\n\n    if (props.toggle) {\n      // Icon\n      button.appendChild(controls.createIcon.call(this, props.iconPressed, {\n        class: 'icon--pressed'\n      }));\n      button.appendChild(controls.createIcon.call(this, props.icon, {\n        class: 'icon--not-pressed'\n      })); // Label/Tooltip\n\n      button.appendChild(controls.createLabel.call(this, props.labelPressed, {\n        class: 'label--pressed'\n      }));\n      button.appendChild(controls.createLabel.call(this, props.label, {\n        class: 'label--not-pressed'\n      }));\n    } else {\n      button.appendChild(controls.createIcon.call(this, props.icon));\n      button.appendChild(controls.createLabel.call(this, props.label));\n    } // Merge and set attributes\n\n\n    extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n    setAttributes(button, attributes); // We have multiple play buttons\n\n    if (type === 'play') {\n      if (!is$1.array(this.elements.buttons[type])) {\n        this.elements.buttons[type] = [];\n      }\n\n      this.elements.buttons[type].push(button);\n    } else {\n      this.elements.buttons[type] = button;\n    }\n\n    return button;\n  },\n  // Create an <input type='range'>\n  createRange: function createRange(type, attributes) {\n    // Seek input\n    var input = createElement('input', extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n      type: 'range',\n      min: 0,\n      max: 100,\n      step: 0.01,\n      value: 0,\n      autocomplete: 'off',\n      // A11y fixes for https://github.com/sampotts/plyr/issues/905\n      role: 'slider',\n      'aria-label': i18n.get(type, this.config),\n      'aria-valuemin': 0,\n      'aria-valuemax': 100,\n      'aria-valuenow': 0\n    }, attributes));\n    this.elements.inputs[type] = input; // Set the fill for webkit now\n\n    controls.updateRangeFill.call(this, input); // Improve support on touch devices\n\n    RangeTouch.setup(input);\n    return input;\n  },\n  // Create a <progress>\n  createProgress: function createProgress(type, attributes) {\n    var progress = createElement('progress', extend(getAttributesFromSelector(this.config.selectors.display[type]), {\n      min: 0,\n      max: 100,\n      value: 0,\n      role: 'progressbar',\n      'aria-hidden': true\n    }, attributes)); // Create the label inside\n\n    if (type !== 'volume') {\n      progress.appendChild(createElement('span', null, '0'));\n      var suffixKey = {\n        played: 'played',\n        buffer: 'buffered'\n      }[type];\n      var suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n      progress.innerText = \""% \"".concat(suffix.toLowerCase());\n    }\n\n    this.elements.display[type] = progress;\n    return progress;\n  },\n  // Create time display\n  createTime: function createTime(type) {\n    var attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n    var container = createElement('div', extend(attributes, {\n      class: \""\"".concat(this.config.classNames.display.time, \"" \"").concat(attributes.class ? attributes.class : '').trim(),\n      'aria-label': i18n.get(type, this.config)\n    }), '00:00'); // Reference for updates\n\n    this.elements.display[type] = container;\n    return container;\n  },\n  // Bind keyboard shortcuts for a menu item\n  // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n  bindMenuItemShortcuts: function bindMenuItemShortcuts(menuItem, type) {\n    var _this = this;\n\n    // Navigate through menus via arrow keys and space\n    on(menuItem, 'keydown keyup', function (event) {\n      // We only care about space and ⬆️ ⬇️️ ➡️\n      if (![32, 38, 39, 40].includes(event.which)) {\n        return;\n      } // Prevent play / seek\n\n\n      event.preventDefault();\n      event.stopPropagation(); // We're just here to prevent the keydown bubbling\n\n      if (event.type === 'keydown') {\n        return;\n      }\n\n      var isRadioButton = matches$1(menuItem, '[role=\""menuitemradio\""]'); // Show the respective menu\n\n      if (!isRadioButton && [32, 39].includes(event.which)) {\n        controls.showMenuPanel.call(_this, type, true);\n      } else {\n        var target;\n\n        if (event.which !== 32) {\n          if (event.which === 40 || isRadioButton && event.which === 39) {\n            target = menuItem.nextElementSibling;\n\n            if (!is$1.element(target)) {\n              target = menuItem.parentNode.firstElementChild;\n            }\n          } else {\n            target = menuItem.previousElementSibling;\n\n            if (!is$1.element(target)) {\n              target = menuItem.parentNode.lastElementChild;\n            }\n          }\n\n          setFocus.call(_this, target, true);\n        }\n      }\n    }, false); // Enter will fire a `click` event but we still need to manage focus\n    // So we bind to keyup which fires after and set focus here\n\n    on(menuItem, 'keyup', function (event) {\n      if (event.which !== 13) {\n        return;\n      }\n\n      controls.focusFirstMenuItem.call(_this, null, true);\n    });\n  },\n  // Create a settings menu item\n  createMenuItem: function createMenuItem(_ref) {\n    var _this2 = this;\n\n    var value = _ref.value,\n        list = _ref.list,\n        type = _ref.type,\n        title = _ref.title,\n        _ref$badge = _ref.badge,\n        badge = _ref$badge === void 0 ? null : _ref$badge,\n        _ref$checked = _ref.checked,\n        checked = _ref$checked === void 0 ? false : _ref$checked;\n    var attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n    var menuItem = createElement('button', extend(attributes, {\n      type: 'button',\n      role: 'menuitemradio',\n      class: \""\"".concat(this.config.classNames.control, \"" \"").concat(attributes.class ? attributes.class : '').trim(),\n      'aria-checked': checked,\n      value: value\n    }));\n    var flex = createElement('span'); // We have to set as HTML incase of special characters\n\n    flex.innerHTML = title;\n\n    if (is$1.element(badge)) {\n      flex.appendChild(badge);\n    }\n\n    menuItem.appendChild(flex); // Replicate radio button behaviour\n\n    Object.defineProperty(menuItem, 'checked', {\n      enumerable: true,\n      get: function get() {\n        return menuItem.getAttribute('aria-checked') === 'true';\n      },\n      set: function set(checked) {\n        // Ensure exclusivity\n        if (checked) {\n          Array.from(menuItem.parentNode.children).filter(function (node) {\n            return matches$1(node, '[role=\""menuitemradio\""]');\n          }).forEach(function (node) {\n            return node.setAttribute('aria-checked', 'false');\n          });\n        }\n\n        menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n      }\n    });\n    this.listeners.bind(menuItem, 'click keyup', function (event) {\n      if (is$1.keyboardEvent(event) && event.which !== 32) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n      menuItem.checked = true;\n\n      switch (type) {\n        case 'language':\n          _this2.currentTrack = Number(value);\n          break;\n\n        case 'quality':\n          _this2.quality = value;\n          break;\n\n        case 'speed':\n          _this2.speed = parseFloat(value);\n          break;\n\n        default:\n          break;\n      }\n\n      controls.showMenuPanel.call(_this2, 'home', is$1.keyboardEvent(event));\n    }, type, false);\n    controls.bindMenuItemShortcuts.call(this, menuItem, type);\n    list.appendChild(menuItem);\n  },\n  // Format a time for display\n  formatTime: function formatTime$1() {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var inverted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    // Bail if the value isn't a number\n    if (!is$1.number(time)) {\n      return time;\n    } // Always display hours if duration is over an hour\n\n\n    var forceHours = getHours(this.duration) > 0;\n    return formatTime(time, forceHours, inverted);\n  },\n  // Update the displayed time\n  updateTimeDisplay: function updateTimeDisplay() {\n    var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var inverted = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    // Bail if there's no element to display or the value isn't a number\n    if (!is$1.element(target) || !is$1.number(time)) {\n      return;\n    } // eslint-disable-next-line no-param-reassign\n\n\n    target.innerText = controls.formatTime(time, inverted);\n  },\n  // Update volume UI and storage\n  updateVolume: function updateVolume() {\n    if (!this.supported.ui) {\n      return;\n    } // Update range\n\n\n    if (is$1.element(this.elements.inputs.volume)) {\n      controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n    } // Update mute state\n\n\n    if (is$1.element(this.elements.buttons.mute)) {\n      this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n    }\n  },\n  // Update seek value and lower fill\n  setRange: function setRange(target) {\n    var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n    if (!is$1.element(target)) {\n      return;\n    } // eslint-disable-next-line\n\n\n    target.value = value; // Webkit range fill\n\n    controls.updateRangeFill.call(this, target);\n  },\n  // Update <progress> elements\n  updateProgress: function updateProgress(event) {\n    var _this3 = this;\n\n    if (!this.supported.ui || !is$1.event(event)) {\n      return;\n    }\n\n    var value = 0;\n\n    var setProgress = function setProgress(target, input) {\n      var value = is$1.number(input) ? input : 0;\n      var progress = is$1.element(target) ? target : _this3.elements.display.buffer; // Update value and label\n\n      if (is$1.element(progress)) {\n        progress.value = value; // Update text label inside\n\n        var label = progress.getElementsByTagName('span')[0];\n\n        if (is$1.element(label)) {\n          label.childNodes[0].nodeValue = value;\n        }\n      }\n    };\n\n    if (event) {\n      switch (event.type) {\n        // Video playing\n        case 'timeupdate':\n        case 'seeking':\n        case 'seeked':\n          value = getPercentage(this.currentTime, this.duration); // Set seek range value only if it's a 'natural' time event\n\n          if (event.type === 'timeupdate') {\n            controls.setRange.call(this, this.elements.inputs.seek, value);\n          }\n\n          break;\n        // Check buffer status\n\n        case 'playing':\n        case 'progress':\n          setProgress(this.elements.display.buffer, this.buffered * 100);\n          break;\n\n        default:\n          break;\n      }\n    }\n  },\n  // Webkit polyfill for lower fill range\n  updateRangeFill: function updateRangeFill(target) {\n    // Get range from event if event passed\n    var range = is$1.event(target) ? target.target : target; // Needs to be a valid <input type='range'>\n\n    if (!is$1.element(range) || range.getAttribute('type') !== 'range') {\n      return;\n    } // Set aria values for https://github.com/sampotts/plyr/issues/905\n\n\n    if (matches$1(range, this.config.selectors.inputs.seek)) {\n      range.setAttribute('aria-valuenow', this.currentTime);\n      var currentTime = controls.formatTime(this.currentTime);\n      var duration = controls.formatTime(this.duration);\n      var format = i18n.get('seekLabel', this.config);\n      range.setAttribute('aria-valuetext', format.replace('{currentTime}', currentTime).replace('{duration}', duration));\n    } else if (matches$1(range, this.config.selectors.inputs.volume)) {\n      var percent = range.value * 100;\n      range.setAttribute('aria-valuenow', percent);\n      range.setAttribute('aria-valuetext', \""\"".concat(percent.toFixed(1), \""%\""));\n    } else {\n      range.setAttribute('aria-valuenow', range.value);\n    } // WebKit only\n\n\n    if (!browser.isWebkit) {\n      return;\n    } // Set CSS custom property\n\n\n    range.style.setProperty('--value', \""\"".concat(range.value / range.max * 100, \""%\""));\n  },\n  // Update hover tooltip for seeking\n  updateSeekTooltip: function updateSeekTooltip(event) {\n    var _this4 = this;\n\n    // Bail if setting not true\n    if (!this.config.tooltips.seek || !is$1.element(this.elements.inputs.seek) || !is$1.element(this.elements.display.seekTooltip) || this.duration === 0) {\n      return;\n    } // Calculate percentage\n\n\n    var percent = 0;\n    var clientRect = this.elements.progress.getBoundingClientRect();\n    var visible = \""\"".concat(this.config.classNames.tooltip, \""--visible\"");\n\n    var toggle = function toggle(_toggle) {\n      toggleClass(_this4.elements.display.seekTooltip, visible, _toggle);\n    }; // Hide on touch\n\n\n    if (this.touch) {\n      toggle(false);\n      return;\n    } // Determine percentage, if already visible\n\n\n    if (is$1.event(event)) {\n      percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n    } else if (hasClass(this.elements.display.seekTooltip, visible)) {\n      percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n    } else {\n      return;\n    } // Set bounds\n\n\n    if (percent < 0) {\n      percent = 0;\n    } else if (percent > 100) {\n      percent = 100;\n    } // Display the time a click would seek to\n\n\n    controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent); // Set position\n\n    this.elements.display.seekTooltip.style.left = \""\"".concat(percent, \""%\""); // Show/hide the tooltip\n    // If the event is a moues in/out and percentage is inside bounds\n\n    if (is$1.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n      toggle(event.type === 'mouseenter');\n    }\n  },\n  // Handle time change event\n  timeUpdate: function timeUpdate(event) {\n    // Only invert if only one time element is displayed and used for both duration and currentTime\n    var invert = !is$1.element(this.elements.display.duration) && this.config.invertTime; // Duration\n\n    controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert); // Ignore updates while seeking\n\n    if (event && event.type === 'timeupdate' && this.media.seeking) {\n      return;\n    } // Playing progress\n\n\n    controls.updateProgress.call(this, event);\n  },\n  // Show the duration on metadataloaded or durationchange events\n  durationUpdate: function durationUpdate() {\n    // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n    if (!this.supported.ui || !this.config.invertTime && this.currentTime) {\n      return;\n    } // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n    // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n    // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n    // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n\n\n    if (this.duration >= Math.pow(2, 32)) {\n      toggleHidden(this.elements.display.currentTime, true);\n      toggleHidden(this.elements.progress, true);\n      return;\n    } // Update ARIA values\n\n\n    if (is$1.element(this.elements.inputs.seek)) {\n      this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n    } // If there's a spot to display duration\n\n\n    var hasDuration = is$1.element(this.elements.display.duration); // If there's only one time display, display duration there\n\n    if (!hasDuration && this.config.displayDuration && this.paused) {\n      controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n    } // If there's a duration element, update content\n\n\n    if (hasDuration) {\n      controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n    } // Update the tooltip (if visible)\n\n\n    controls.updateSeekTooltip.call(this);\n  },\n  // Hide/show a tab\n  toggleMenuButton: function toggleMenuButton(setting, toggle) {\n    toggleHidden(this.elements.settings.buttons[setting], !toggle);\n  },\n  // Update the selected setting\n  updateSetting: function updateSetting(setting, container, input) {\n    var pane = this.elements.settings.panels[setting];\n    var value = null;\n    var list = container;\n\n    if (setting === 'captions') {\n      value = this.currentTrack;\n    } else {\n      value = !is$1.empty(input) ? input : this[setting]; // Get default\n\n      if (is$1.empty(value)) {\n        value = this.config[setting].default;\n      } // Unsupported value\n\n\n      if (!is$1.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n        this.debug.warn(\""Unsupported value of '\"".concat(value, \""' for \"").concat(setting));\n        return;\n      } // Disabled value\n\n\n      if (!this.config[setting].options.includes(value)) {\n        this.debug.warn(\""Disabled value of '\"".concat(value, \""' for \"").concat(setting));\n        return;\n      }\n    } // Get the list if we need to\n\n\n    if (!is$1.element(list)) {\n      list = pane && pane.querySelector('[role=\""menu\""]');\n    } // If there's no list it means it's not been rendered...\n\n\n    if (!is$1.element(list)) {\n      return;\n    } // Update the label\n\n\n    var label = this.elements.settings.buttons[setting].querySelector(\"".\"".concat(this.config.classNames.menu.value));\n    label.innerHTML = controls.getLabel.call(this, setting, value); // Find the radio option and check it\n\n    var target = list && list.querySelector(\""[value=\\\""\"".concat(value, \""\\\""]\""));\n\n    if (is$1.element(target)) {\n      target.checked = true;\n    }\n  },\n  // Translate a value into a nice label\n  getLabel: function getLabel(setting, value) {\n    switch (setting) {\n      case 'speed':\n        return value === 1 ? i18n.get('normal', this.config) : \""\"".concat(value, \""&times;\"");\n\n      case 'quality':\n        if (is$1.number(value)) {\n          var label = i18n.get(\""qualityLabel.\"".concat(value), this.config);\n\n          if (!label.length) {\n            return \""\"".concat(value, \""p\"");\n          }\n\n          return label;\n        }\n\n        return toTitleCase(value);\n\n      case 'captions':\n        return captions.getLabel.call(this);\n\n      default:\n        return null;\n    }\n  },\n  // Set the quality menu\n  setQualityMenu: function setQualityMenu(options) {\n    var _this5 = this;\n\n    // Menu required\n    if (!is$1.element(this.elements.settings.panels.quality)) {\n      return;\n    }\n\n    var type = 'quality';\n    var list = this.elements.settings.panels.quality.querySelector('[role=\""menu\""]'); // Set options if passed and filter based on uniqueness and config\n\n    if (is$1.array(options)) {\n      this.options.quality = dedupe(options).filter(function (quality) {\n        return _this5.config.quality.options.includes(quality);\n      });\n    } // Toggle the pane and tab\n\n\n    var toggle = !is$1.empty(this.options.quality) && this.options.quality.length > 1;\n    controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n    emptyElement(list); // Check if we need to toggle the parent\n\n    controls.checkMenu.call(this); // If we're hiding, nothing more to do\n\n    if (!toggle) {\n      return;\n    } // Get the badge HTML for HD, 4K etc\n\n\n    var getBadge = function getBadge(quality) {\n      var label = i18n.get(\""qualityBadge.\"".concat(quality), _this5.config);\n\n      if (!label.length) {\n        return null;\n      }\n\n      return controls.createBadge.call(_this5, label);\n    }; // Sort options by the config and then render options\n\n\n    this.options.quality.sort(function (a, b) {\n      var sorting = _this5.config.quality.options;\n      return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n    }).forEach(function (quality) {\n      controls.createMenuItem.call(_this5, {\n        value: quality,\n        list: list,\n        type: type,\n        title: controls.getLabel.call(_this5, 'quality', quality),\n        badge: getBadge(quality)\n      });\n    });\n    controls.updateSetting.call(this, type, list);\n  },\n  // Set the looping options\n\n  /* setLoopMenu() {\n      // Menu required\n      if (!is.element(this.elements.settings.panels.loop)) {\n          return;\n      }\n       const options = ['start', 'end', 'all', 'reset'];\n      const list = this.elements.settings.panels.loop.querySelector('[role=\""menu\""]');\n       // Show the pane and tab\n      toggleHidden(this.elements.settings.buttons.loop, false);\n      toggleHidden(this.elements.settings.panels.loop, false);\n       // Toggle the pane and tab\n      const toggle = !is.empty(this.loop.options);\n      controls.toggleMenuButton.call(this, 'loop', toggle);\n       // Empty the menu\n      emptyElement(list);\n       options.forEach(option => {\n          const item = createElement('li');\n           const button = createElement(\n              'button',\n              extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n                  type: 'button',\n                  class: this.config.classNames.control,\n                  'data-plyr-loop-action': option,\n              }),\n              i18n.get(option, this.config)\n          );\n           if (['start', 'end'].includes(option)) {\n              const badge = controls.createBadge.call(this, '00:00');\n              button.appendChild(badge);\n          }\n           item.appendChild(button);\n          list.appendChild(item);\n      });\n  }, */\n  // Get current selected caption language\n  // TODO: rework this to user the getter in the API?\n  // Set a list of available captions languages\n  setCaptionsMenu: function setCaptionsMenu() {\n    var _this6 = this;\n\n    // Menu required\n    if (!is$1.element(this.elements.settings.panels.captions)) {\n      return;\n    } // TODO: Captions or language? Currently it's mixed\n\n\n    var type = 'captions';\n    var list = this.elements.settings.panels.captions.querySelector('[role=\""menu\""]');\n    var tracks = captions.getTracks.call(this);\n    var toggle = Boolean(tracks.length); // Toggle the pane and tab\n\n    controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n    emptyElement(list); // Check if we need to toggle the parent\n\n    controls.checkMenu.call(this); // If there's no captions, bail\n\n    if (!toggle) {\n      return;\n    } // Generate options data\n\n\n    var options = tracks.map(function (track, value) {\n      return {\n        value: value,\n        checked: _this6.captions.toggled && _this6.currentTrack === value,\n        title: captions.getLabel.call(_this6, track),\n        badge: track.language && controls.createBadge.call(_this6, track.language.toUpperCase()),\n        list: list,\n        type: 'language'\n      };\n    }); // Add the \""Disabled\"" option to turn off captions\n\n    options.unshift({\n      value: -1,\n      checked: !this.captions.toggled,\n      title: i18n.get('disabled', this.config),\n      list: list,\n      type: 'language'\n    }); // Generate options\n\n    options.forEach(controls.createMenuItem.bind(this));\n    controls.updateSetting.call(this, type, list);\n  },\n  // Set a list of available captions languages\n  setSpeedMenu: function setSpeedMenu(options) {\n    var _this7 = this;\n\n    // Menu required\n    if (!is$1.element(this.elements.settings.panels.speed)) {\n      return;\n    }\n\n    var type = 'speed';\n    var list = this.elements.settings.panels.speed.querySelector('[role=\""menu\""]'); // Set the speed options\n\n    if (is$1.array(options)) {\n      this.options.speed = options;\n    } else if (this.isHTML5 || this.isVimeo) {\n      this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n    } // Set options if passed and filter based on config\n\n\n    this.options.speed = this.options.speed.filter(function (speed) {\n      return _this7.config.speed.options.includes(speed);\n    }); // Toggle the pane and tab\n\n    var toggle = !is$1.empty(this.options.speed) && this.options.speed.length > 1;\n    controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n    emptyElement(list); // Check if we need to toggle the parent\n\n    controls.checkMenu.call(this); // If we're hiding, nothing more to do\n\n    if (!toggle) {\n      return;\n    } // Create items\n\n\n    this.options.speed.forEach(function (speed) {\n      controls.createMenuItem.call(_this7, {\n        value: speed,\n        list: list,\n        type: type,\n        title: controls.getLabel.call(_this7, 'speed', speed)\n      });\n    });\n    controls.updateSetting.call(this, type, list);\n  },\n  // Check if we need to hide/show the settings menu\n  checkMenu: function checkMenu() {\n    var buttons = this.elements.settings.buttons;\n    var visible = !is$1.empty(buttons) && Object.values(buttons).some(function (button) {\n      return !button.hidden;\n    });\n    toggleHidden(this.elements.settings.menu, !visible);\n  },\n  // Focus the first menu item in a given (or visible) menu\n  focusFirstMenuItem: function focusFirstMenuItem(pane) {\n    var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    if (this.elements.settings.popup.hidden) {\n      return;\n    }\n\n    var target = pane;\n\n    if (!is$1.element(target)) {\n      target = Object.values(this.elements.settings.panels).find(function (pane) {\n        return !pane.hidden;\n      });\n    }\n\n    var firstItem = target.querySelector('[role^=\""menuitem\""]');\n    setFocus.call(this, firstItem, tabFocus);\n  },\n  // Show/hide menu\n  toggleMenu: function toggleMenu(input) {\n    var popup = this.elements.settings.popup;\n    var button = this.elements.buttons.settings; // Menu and button are required\n\n    if (!is$1.element(popup) || !is$1.element(button)) {\n      return;\n    } // True toggle by default\n\n\n    var hidden = popup.hidden;\n    var show = hidden;\n\n    if (is$1.boolean(input)) {\n      show = input;\n    } else if (is$1.keyboardEvent(input) && input.which === 27) {\n      show = false;\n    } else if (is$1.event(input)) {\n      var isMenuItem = popup.contains(input.target); // If the click was inside the menu or if the click\n      // wasn't the button or menu item and we're trying to\n      // show the menu (a doc click shouldn't show the menu)\n\n      if (isMenuItem || !isMenuItem && input.target !== button && show) {\n        return;\n      }\n    } // Set button attributes\n\n\n    button.setAttribute('aria-expanded', show); // Show the actual popup\n\n    toggleHidden(popup, !show); // Add class hook\n\n    toggleClass(this.elements.container, this.config.classNames.menu.open, show); // Focus the first item if key interaction\n\n    if (show && is$1.keyboardEvent(input)) {\n      controls.focusFirstMenuItem.call(this, null, true);\n    } else if (!show && !hidden) {\n      // If closing, re-focus the button\n      setFocus.call(this, button, is$1.keyboardEvent(input));\n    }\n  },\n  // Get the natural size of a menu panel\n  getMenuSize: function getMenuSize(tab) {\n    var clone = tab.cloneNode(true);\n    clone.style.position = 'absolute';\n    clone.style.opacity = 0;\n    clone.removeAttribute('hidden'); // Append to parent so we get the \""real\"" size\n\n    tab.parentNode.appendChild(clone); // Get the sizes before we remove\n\n    var width = clone.scrollWidth;\n    var height = clone.scrollHeight; // Remove from the DOM\n\n    removeElement(clone);\n    return {\n      width: width,\n      height: height\n    };\n  },\n  // Show a panel in the menu\n  showMenuPanel: function showMenuPanel() {\n    var _this8 = this;\n\n    var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var target = document.getElementById(\""plyr-settings-\"".concat(this.id, \""-\"").concat(type)); // Nothing to show, bail\n\n    if (!is$1.element(target)) {\n      return;\n    } // Hide all other panels\n\n\n    var container = target.parentNode;\n    var current = Array.from(container.children).find(function (node) {\n      return !node.hidden;\n    }); // If we can do fancy animations, we'll animate the height/width\n\n    if (support.transitions && !support.reducedMotion) {\n      // Set the current width as a base\n      container.style.width = \""\"".concat(current.scrollWidth, \""px\"");\n      container.style.height = \""\"".concat(current.scrollHeight, \""px\""); // Get potential sizes\n\n      var size = controls.getMenuSize.call(this, target); // Restore auto height/width\n\n      var restore = function restore(event) {\n        // We're only bothered about height and width on the container\n        if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n          return;\n        } // Revert back to auto\n\n\n        container.style.width = '';\n        container.style.height = ''; // Only listen once\n\n        off.call(_this8, container, transitionEndEvent, restore);\n      }; // Listen for the transition finishing and restore auto height/width\n\n\n      on.call(this, container, transitionEndEvent, restore); // Set dimensions to target\n\n      container.style.width = \""\"".concat(size.width, \""px\"");\n      container.style.height = \""\"".concat(size.height, \""px\"");\n    } // Set attributes on current tab\n\n\n    toggleHidden(current, true); // Set attributes on target\n\n    toggleHidden(target, false); // Focus the first item\n\n    controls.focusFirstMenuItem.call(this, target, tabFocus);\n  },\n  // Set the download link\n  setDownloadLink: function setDownloadLink() {\n    var button = this.elements.buttons.download; // Bail if no button\n\n    if (!is$1.element(button)) {\n      return;\n    } // Set download link\n\n\n    button.setAttribute('href', this.download);\n  },\n  // Build the default HTML\n  // TODO: Set order based on order in the config.controls array?\n  create: function create(data) {\n    var _this9 = this;\n\n    // Create the container\n    var container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper)); // Restart button\n\n    if (this.config.controls.includes('restart')) {\n      container.appendChild(controls.createButton.call(this, 'restart'));\n    } // Rewind button\n\n\n    if (this.config.controls.includes('rewind')) {\n      container.appendChild(controls.createButton.call(this, 'rewind'));\n    } // Play/Pause button\n\n\n    if (this.config.controls.includes('play')) {\n      container.appendChild(controls.createButton.call(this, 'play'));\n    } // Fast forward button\n\n\n    if (this.config.controls.includes('fast-forward')) {\n      container.appendChild(controls.createButton.call(this, 'fast-forward'));\n    } // Progress\n\n\n    if (this.config.controls.includes('progress')) {\n      var progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress)); // Seek range slider\n\n      progress.appendChild(controls.createRange.call(this, 'seek', {\n        id: \""plyr-seek-\"".concat(data.id)\n      })); // Buffer progress\n\n      progress.appendChild(controls.createProgress.call(this, 'buffer')); // TODO: Add loop display indicator\n      // Seek tooltip\n\n      if (this.config.tooltips.seek) {\n        var tooltip = createElement('span', {\n          class: this.config.classNames.tooltip\n        }, '00:00');\n        progress.appendChild(tooltip);\n        this.elements.display.seekTooltip = tooltip;\n      }\n\n      this.elements.progress = progress;\n      container.appendChild(this.elements.progress);\n    } // Media current time display\n\n\n    if (this.config.controls.includes('current-time')) {\n      container.appendChild(controls.createTime.call(this, 'currentTime'));\n    } // Media duration display\n\n\n    if (this.config.controls.includes('duration')) {\n      container.appendChild(controls.createTime.call(this, 'duration'));\n    } // Volume controls\n\n\n    if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n      var volume = createElement('div', {\n        class: 'plyr__volume'\n      }); // Toggle mute button\n\n      if (this.config.controls.includes('mute')) {\n        volume.appendChild(controls.createButton.call(this, 'mute'));\n      } // Volume range control\n\n\n      if (this.config.controls.includes('volume')) {\n        // Set the attributes\n        var attributes = {\n          max: 1,\n          step: 0.05,\n          value: this.config.volume\n        }; // Create the volume range slider\n\n        volume.appendChild(controls.createRange.call(this, 'volume', extend(attributes, {\n          id: \""plyr-volume-\"".concat(data.id)\n        })));\n        this.elements.volume = volume;\n      }\n\n      container.appendChild(volume);\n    } // Toggle captions button\n\n\n    if (this.config.controls.includes('captions')) {\n      container.appendChild(controls.createButton.call(this, 'captions'));\n    } // Settings button / menu\n\n\n    if (this.config.controls.includes('settings') && !is$1.empty(this.config.settings)) {\n      var control = createElement('div', {\n        class: 'plyr__menu',\n        hidden: ''\n      });\n      control.appendChild(controls.createButton.call(this, 'settings', {\n        'aria-haspopup': true,\n        'aria-controls': \""plyr-settings-\"".concat(data.id),\n        'aria-expanded': false\n      }));\n      var popup = createElement('div', {\n        class: 'plyr__menu__container',\n        id: \""plyr-settings-\"".concat(data.id),\n        hidden: ''\n      });\n      var inner = createElement('div');\n      var home = createElement('div', {\n        id: \""plyr-settings-\"".concat(data.id, \""-home\"")\n      }); // Create the menu\n\n      var menu = createElement('div', {\n        role: 'menu'\n      });\n      home.appendChild(menu);\n      inner.appendChild(home);\n      this.elements.settings.panels.home = home; // Build the menu items\n\n      this.config.settings.forEach(function (type) {\n        // TODO: bundle this with the createMenuItem helper and bindings\n        var menuItem = createElement('button', extend(getAttributesFromSelector(_this9.config.selectors.buttons.settings), {\n          type: 'button',\n          class: \""\"".concat(_this9.config.classNames.control, \"" \"").concat(_this9.config.classNames.control, \""--forward\""),\n          role: 'menuitem',\n          'aria-haspopup': true,\n          hidden: ''\n        })); // Bind menu shortcuts for keyboard users\n\n        controls.bindMenuItemShortcuts.call(_this9, menuItem, type); // Show menu on click\n\n        on(menuItem, 'click', function () {\n          controls.showMenuPanel.call(_this9, type, false);\n        });\n        var flex = createElement('span', null, i18n.get(type, _this9.config));\n        var value = createElement('span', {\n          class: _this9.config.classNames.menu.value\n        }); // Speed contains HTML entities\n\n        value.innerHTML = data[type];\n        flex.appendChild(value);\n        menuItem.appendChild(flex);\n        menu.appendChild(menuItem); // Build the panes\n\n        var pane = createElement('div', {\n          id: \""plyr-settings-\"".concat(data.id, \""-\"").concat(type),\n          hidden: ''\n        }); // Back button\n\n        var backButton = createElement('button', {\n          type: 'button',\n          class: \""\"".concat(_this9.config.classNames.control, \"" \"").concat(_this9.config.classNames.control, \""--back\"")\n        }); // Visible label\n\n        backButton.appendChild(createElement('span', {\n          'aria-hidden': true\n        }, i18n.get(type, _this9.config))); // Screen reader label\n\n        backButton.appendChild(createElement('span', {\n          class: _this9.config.classNames.hidden\n        }, i18n.get('menuBack', _this9.config))); // Go back via keyboard\n\n        on(pane, 'keydown', function (event) {\n          // We only care about <-\n          if (event.which !== 37) {\n            return;\n          } // Prevent seek\n\n\n          event.preventDefault();\n          event.stopPropagation(); // Show the respective menu\n\n          controls.showMenuPanel.call(_this9, 'home', true);\n        }, false); // Go back via button click\n\n        on(backButton, 'click', function () {\n          controls.showMenuPanel.call(_this9, 'home', false);\n        }); // Add to pane\n\n        pane.appendChild(backButton); // Menu\n\n        pane.appendChild(createElement('div', {\n          role: 'menu'\n        }));\n        inner.appendChild(pane);\n        _this9.elements.settings.buttons[type] = menuItem;\n        _this9.elements.settings.panels[type] = pane;\n      });\n      popup.appendChild(inner);\n      control.appendChild(popup);\n      container.appendChild(control);\n      this.elements.settings.popup = popup;\n      this.elements.settings.menu = control;\n    } // Picture in picture button\n\n\n    if (this.config.controls.includes('pip') && support.pip) {\n      container.appendChild(controls.createButton.call(this, 'pip'));\n    } // Airplay button\n\n\n    if (this.config.controls.includes('airplay') && support.airplay) {\n      container.appendChild(controls.createButton.call(this, 'airplay'));\n    } // Download button\n\n\n    if (this.config.controls.includes('download')) {\n      var _attributes = {\n        element: 'a',\n        href: this.download,\n        target: '_blank'\n      };\n      var download = this.config.urls.download;\n\n      if (!is$1.url(download) && this.isEmbed) {\n        extend(_attributes, {\n          icon: \""logo-\"".concat(this.provider),\n          label: this.provider\n        });\n      }\n\n      container.appendChild(controls.createButton.call(this, 'download', _attributes));\n    } // Toggle fullscreen button\n\n\n    if (this.config.controls.includes('fullscreen')) {\n      container.appendChild(controls.createButton.call(this, 'fullscreen'));\n    } // Larger overlaid play button\n\n\n    if (this.config.controls.includes('play-large')) {\n      this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n    }\n\n    this.elements.controls = container; // Set available quality levels\n\n    if (this.isHTML5) {\n      controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n    }\n\n    controls.setSpeedMenu.call(this);\n    return container;\n  },\n  // Insert controls\n  inject: function inject() {\n    var _this10 = this;\n\n    // Sprite\n    if (this.config.loadSprite) {\n      var icon = controls.getIconUrl.call(this); // Only load external sprite using AJAX\n\n      if (icon.cors) {\n        loadSprite(icon.url, 'sprite-plyr');\n      }\n    } // Create a unique ID\n\n\n    this.id = Math.floor(Math.random() * 10000); // Null by default\n\n    var container = null;\n    this.elements.controls = null; // Set template properties\n\n    var props = {\n      id: this.id,\n      seektime: this.config.seekTime,\n      title: this.config.title\n    };\n    var update = true; // If function, run it and use output\n\n    if (is$1.function(this.config.controls)) {\n      this.config.controls = this.config.controls.call(this, props);\n    } // Convert falsy controls to empty array (primarily for empty strings)\n\n\n    if (!this.config.controls) {\n      this.config.controls = [];\n    }\n\n    if (is$1.element(this.config.controls) || is$1.string(this.config.controls)) {\n      // HTMLElement or Non-empty string passed as the option\n      container = this.config.controls;\n    } else {\n      // Create controls\n      container = controls.create.call(this, {\n        id: this.id,\n        seektime: this.config.seekTime,\n        speed: this.speed,\n        quality: this.quality,\n        captions: captions.getLabel.call(this) // TODO: Looping\n        // loop: 'None',\n\n      });\n      update = false;\n    } // Replace props with their value\n\n\n    var replace = function replace(input) {\n      var result = input;\n      Object.entries(props).forEach(function (_ref2) {\n        var _ref3 = _slicedToArray(_ref2, 2),\n            key = _ref3[0],\n            value = _ref3[1];\n\n        result = replaceAll(result, \""{\"".concat(key, \""}\""), value);\n      });\n      return result;\n    }; // Update markup\n\n\n    if (update) {\n      if (is$1.string(this.config.controls)) {\n        container = replace(container);\n      } else if (is$1.element(container)) {\n        container.innerHTML = replace(container.innerHTML);\n      }\n    } // Controls container\n\n\n    var target; // Inject to custom location\n\n    if (is$1.string(this.config.selectors.controls.container)) {\n      target = document.querySelector(this.config.selectors.controls.container);\n    } // Inject into the container by default\n\n\n    if (!is$1.element(target)) {\n      target = this.elements.container;\n    } // Inject controls HTML (needs to be before captions, hence \""afterbegin\"")\n\n\n    var insertMethod = is$1.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n    target[insertMethod]('afterbegin', container); // Find the elements if need be\n\n    if (!is$1.element(this.elements.controls)) {\n      controls.findElements.call(this);\n    } // Add pressed property to buttons\n\n\n    if (!is$1.empty(this.elements.buttons)) {\n      var addProperty = function addProperty(button) {\n        var className = _this10.config.classNames.controlPressed;\n        Object.defineProperty(button, 'pressed', {\n          enumerable: true,\n          get: function get() {\n            return hasClass(button, className);\n          },\n          set: function set() {\n            var pressed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n            toggleClass(button, className, pressed);\n          }\n        });\n      }; // Toggle classname when pressed property is set\n\n\n      Object.values(this.elements.buttons).filter(Boolean).forEach(function (button) {\n        if (is$1.array(button) || is$1.nodeList(button)) {\n          Array.from(button).filter(Boolean).forEach(addProperty);\n        } else {\n          addProperty(button);\n        }\n      });\n    } // Edge sometimes doesn't finish the paint so force a repaint\n\n\n    if (browser.isEdge) {\n      repaint(target);\n    } // Setup tooltips\n\n\n    if (this.config.tooltips.controls) {\n      var _this$config = this.config,\n          classNames = _this$config.classNames,\n          selectors = _this$config.selectors;\n      var selector = \""\"".concat(selectors.controls.wrapper, \"" \"").concat(selectors.labels, \"" .\"").concat(classNames.hidden);\n      var labels = getElements.call(this, selector);\n      Array.from(labels).forEach(function (label) {\n        toggleClass(label, _this10.config.classNames.hidden, false);\n        toggleClass(label, _this10.config.classNames.tooltip, true);\n      });\n    }\n  }\n};\n\n/**\n * Parse a string to a URL object\n * @param {String} input - the URL to be parsed\n * @param {Boolean} safe - failsafe parsing\n */\n\nfunction parseUrl(input) {\n  var safe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  var url = input;\n\n  if (safe) {\n    var parser = document.createElement('a');\n    parser.href = url;\n    url = parser.href;\n  }\n\n  try {\n    return new URL(url);\n  } catch (e) {\n    return null;\n  }\n} // Convert object to URLSearchParams\n\nfunction buildUrlParams(input) {\n  var params = new URLSearchParams();\n\n  if (is$1.object(input)) {\n    Object.entries(input).forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          key = _ref2[0],\n          value = _ref2[1];\n\n      params.set(key, value);\n    });\n  }\n\n  return params;\n}\n\nvar captions = {\n  // Setup captions\n  setup: function setup() {\n    // Requires UI support\n    if (!this.supported.ui) {\n      return;\n    } // Only Vimeo and HTML5 video supported at this point\n\n\n    if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {\n      // Clear menu and hide\n      if (is$1.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n        controls.setCaptionsMenu.call(this);\n      }\n\n      return;\n    } // Inject the container\n\n\n    if (!is$1.element(this.elements.captions)) {\n      this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n      insertAfter(this.elements.captions, this.elements.wrapper);\n    } // Fix IE captions if CORS is used\n    // Fetch captions and inject as blobs instead (data URIs not supported!)\n\n\n    if (browser.isIE && window.URL) {\n      var elements = this.media.querySelectorAll('track');\n      Array.from(elements).forEach(function (track) {\n        var src = track.getAttribute('src');\n        var url = parseUrl(src);\n\n        if (url !== null && url.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(url.protocol)) {\n          fetch(src, 'blob').then(function (blob) {\n            track.setAttribute('src', window.URL.createObjectURL(blob));\n          }).catch(function () {\n            removeElement(track);\n          });\n        }\n      });\n    } // Get and set initial data\n    // The \""preferred\"" options are not realized unless / until the wanted language has a match\n    // * languages: Array of user's browser languages.\n    // * language:  The language preferred by user settings or config\n    // * active:    The state preferred by user settings or config\n    // * toggled:   The real captions state\n\n\n    var browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n    var languages = dedupe(browserLanguages.map(function (language) {\n      return language.split('-')[0];\n    }));\n    var language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase(); // Use first browser language when language is 'auto'\n\n    if (language === 'auto') {\n      var _languages = _slicedToArray(languages, 1);\n\n      language = _languages[0];\n    }\n\n    var active = this.storage.get('captions');\n\n    if (!is$1.boolean(active)) {\n      active = this.config.captions.active;\n    }\n\n    Object.assign(this.captions, {\n      toggled: false,\n      active: active,\n      language: language,\n      languages: languages\n    }); // Watch changes to textTracks and update captions menu\n\n    if (this.isHTML5) {\n      var trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n      on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n    } // Update available languages in list next tick (the event must not be triggered before the listeners)\n\n\n    setTimeout(captions.update.bind(this), 0);\n  },\n  // Update available language options in settings based on tracks\n  update: function update() {\n    var _this = this;\n\n    var tracks = captions.getTracks.call(this, true); // Get the wanted language\n\n    var _this$captions = this.captions,\n        active = _this$captions.active,\n        language = _this$captions.language,\n        meta = _this$captions.meta,\n        currentTrackNode = _this$captions.currentTrackNode;\n    var languageExists = Boolean(tracks.find(function (track) {\n      return track.language === language;\n    })); // Handle tracks (add event listener and \""pseudo\""-default)\n\n    if (this.isHTML5 && this.isVideo) {\n      tracks.filter(function (track) {\n        return !meta.get(track);\n      }).forEach(function (track) {\n        _this.debug.log('Track added', track); // Attempt to store if the original dom element was \""default\""\n\n\n        meta.set(track, {\n          default: track.mode === 'showing'\n        }); // Turn off native caption rendering to avoid double captions\n\n        track.mode = 'hidden'; // Add event listener for cue changes\n\n        on.call(_this, track, 'cuechange', function () {\n          return captions.updateCues.call(_this);\n        });\n      });\n    } // Update language first time it matches, or if the previous matching track was removed\n\n\n    if (languageExists && this.language !== language || !tracks.includes(currentTrackNode)) {\n      captions.setLanguage.call(this, language);\n      captions.toggle.call(this, active && languageExists);\n    } // Enable or disable captions based on track length\n\n\n    toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is$1.empty(tracks)); // Update available languages in list\n\n    if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n      controls.setCaptionsMenu.call(this);\n    }\n  },\n  // Toggle captions display\n  // Used internally for the toggleCaptions method, with the passive option forced to false\n  toggle: function toggle(input) {\n    var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    // If there's no full support\n    if (!this.supported.ui) {\n      return;\n    }\n\n    var toggled = this.captions.toggled; // Current state\n\n    var activeClass = this.config.classNames.captions.active; // Get the next state\n    // If the method is called without parameter, toggle based on current value\n\n    var active = is$1.nullOrUndefined(input) ? !toggled : input; // Update state and trigger event\n\n    if (active !== toggled) {\n      // When passive, don't override user preferences\n      if (!passive) {\n        this.captions.active = active;\n        this.storage.set({\n          captions: active\n        });\n      } // Force language if the call isn't passive and there is no matching language to toggle to\n\n\n      if (!this.language && active && !passive) {\n        var tracks = captions.getTracks.call(this);\n        var track = captions.findTrack.call(this, [this.captions.language].concat(_toConsumableArray(this.captions.languages)), true); // Override user preferences to avoid switching languages if a matching track is added\n\n        this.captions.language = track.language; // Set caption, but don't store in localStorage as user preference\n\n        captions.set.call(this, tracks.indexOf(track));\n        return;\n      } // Toggle button if it's enabled\n\n\n      if (this.elements.buttons.captions) {\n        this.elements.buttons.captions.pressed = active;\n      } // Add class hook\n\n\n      toggleClass(this.elements.container, activeClass, active);\n      this.captions.toggled = active; // Update settings menu\n\n      controls.updateSetting.call(this, 'captions'); // Trigger event (not used internally)\n\n      triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n    }\n  },\n  // Set captions by track index\n  // Used internally for the currentTrack setter with the passive option forced to false\n  set: function set(index) {\n    var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    var tracks = captions.getTracks.call(this); // Disable captions if setting to -1\n\n    if (index === -1) {\n      captions.toggle.call(this, false, passive);\n      return;\n    }\n\n    if (!is$1.number(index)) {\n      this.debug.warn('Invalid caption argument', index);\n      return;\n    }\n\n    if (!(index in tracks)) {\n      this.debug.warn('Track not found', index);\n      return;\n    }\n\n    if (this.captions.currentTrack !== index) {\n      this.captions.currentTrack = index;\n      var track = tracks[index];\n\n      var _ref = track || {},\n          language = _ref.language; // Store reference to node for invalidation on remove\n\n\n      this.captions.currentTrackNode = track; // Update settings menu\n\n      controls.updateSetting.call(this, 'captions'); // When passive, don't override user preferences\n\n      if (!passive) {\n        this.captions.language = language;\n        this.storage.set({\n          language: language\n        });\n      } // Handle Vimeo captions\n\n\n      if (this.isVimeo) {\n        this.embed.enableTextTrack(language);\n      } // Trigger event\n\n\n      triggerEvent.call(this, this.media, 'languagechange');\n    } // Show captions\n\n\n    captions.toggle.call(this, true, passive);\n\n    if (this.isHTML5 && this.isVideo) {\n      // If we change the active track while a cue is already displayed we need to update it\n      captions.updateCues.call(this);\n    }\n  },\n  // Set captions by language\n  // Used internally for the language setter with the passive option forced to false\n  setLanguage: function setLanguage(input) {\n    var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    if (!is$1.string(input)) {\n      this.debug.warn('Invalid language argument', input);\n      return;\n    } // Normalize\n\n\n    var language = input.toLowerCase();\n    this.captions.language = language; // Set currentTrack\n\n    var tracks = captions.getTracks.call(this);\n    var track = captions.findTrack.call(this, [language]);\n    captions.set.call(this, tracks.indexOf(track), passive);\n  },\n  // Get current valid caption tracks\n  // If update is false it will also ignore tracks without metadata\n  // This is used to \""freeze\"" the language options when captions.update is false\n  getTracks: function getTracks() {\n    var _this2 = this;\n\n    var update = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    // Handle media or textTracks missing or null\n    var tracks = Array.from((this.media || {}).textTracks || []); // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n    // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n\n    return tracks.filter(function (track) {\n      return !_this2.isHTML5 || update || _this2.captions.meta.has(track);\n    }).filter(function (track) {\n      return ['captions', 'subtitles'].includes(track.kind);\n    });\n  },\n  // Match tracks based on languages and get the first\n  findTrack: function findTrack(languages) {\n    var _this3 = this;\n\n    var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var tracks = captions.getTracks.call(this);\n\n    var sortIsDefault = function sortIsDefault(track) {\n      return Number((_this3.captions.meta.get(track) || {}).default);\n    };\n\n    var sorted = Array.from(tracks).sort(function (a, b) {\n      return sortIsDefault(b) - sortIsDefault(a);\n    });\n    var track;\n    languages.every(function (language) {\n      track = sorted.find(function (track) {\n        return track.language === language;\n      });\n      return !track; // Break iteration if there is a match\n    }); // If no match is found but is required, get first\n\n    return track || (force ? sorted[0] : undefined);\n  },\n  // Get the current track\n  getCurrentTrack: function getCurrentTrack() {\n    return captions.getTracks.call(this)[this.currentTrack];\n  },\n  // Get UI label for track\n  getLabel: function getLabel(track) {\n    var currentTrack = track;\n\n    if (!is$1.track(currentTrack) && support.textTracks && this.captions.toggled) {\n      currentTrack = captions.getCurrentTrack.call(this);\n    }\n\n    if (is$1.track(currentTrack)) {\n      if (!is$1.empty(currentTrack.label)) {\n        return currentTrack.label;\n      }\n\n      if (!is$1.empty(currentTrack.language)) {\n        return track.language.toUpperCase();\n      }\n\n      return i18n.get('enabled', this.config);\n    }\n\n    return i18n.get('disabled', this.config);\n  },\n  // Update captions using current track's active cues\n  // Also optional array argument in case there isn't any track (ex: vimeo)\n  updateCues: function updateCues(input) {\n    // Requires UI\n    if (!this.supported.ui) {\n      return;\n    }\n\n    if (!is$1.element(this.elements.captions)) {\n      this.debug.warn('No captions element to render to');\n      return;\n    } // Only accept array or empty input\n\n\n    if (!is$1.nullOrUndefined(input) && !Array.isArray(input)) {\n      this.debug.warn('updateCues: Invalid input', input);\n      return;\n    }\n\n    var cues = input; // Get cues from track\n\n    if (!cues) {\n      var track = captions.getCurrentTrack.call(this);\n      cues = Array.from((track || {}).activeCues || []).map(function (cue) {\n        return cue.getCueAsHTML();\n      }).map(getHTML);\n    } // Set new caption text\n\n\n    var content = cues.map(function (cueText) {\n      return cueText.trim();\n    }).join('\\n');\n    var changed = content !== this.elements.captions.innerHTML;\n\n    if (changed) {\n      // Empty the container and create a new child element\n      emptyElement(this.elements.captions);\n      var caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n      caption.innerHTML = content;\n      this.elements.captions.appendChild(caption); // Trigger event\n\n      triggerEvent.call(this, this.media, 'cuechange');\n    }\n  }\n};\n\n// ==========================================================================\n// Plyr default config\n// ==========================================================================\nvar defaults$1 = {\n  // Disable\n  enabled: true,\n  // Custom media title\n  title: '',\n  // Logging to console\n  debug: false,\n  // Auto play (if supported)\n  autoplay: false,\n  // Only allow one media playing at once (vimeo only)\n  autopause: true,\n  // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n  // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n  playsinline: true,\n  // Default time to skip when rewind/fast forward\n  seekTime: 10,\n  // Default volume\n  volume: 1,\n  muted: false,\n  // Pass a custom duration\n  duration: null,\n  // Display the media duration on load in the current time position\n  // If you have opted to display both duration and currentTime, this is ignored\n  displayDuration: true,\n  // Invert the current time to be a countdown\n  invertTime: true,\n  // Clicking the currentTime inverts it's value to show time left rather than elapsed\n  toggleInvert: true,\n  // Force an aspect ratio\n  // The format must be `'w:h'` (e.g. `'16:9'`)\n  ratio: null,\n  // Click video container to play/pause\n  clickToPlay: true,\n  // Auto hide the controls\n  hideControls: true,\n  // Reset to start when playback ended\n  resetOnEnd: false,\n  // Disable the standard context menu\n  disableContextMenu: true,\n  // Sprite (for icons)\n  loadSprite: true,\n  iconPrefix: 'plyr',\n  iconUrl: 'https://cdn.plyr.io/3.5.3/plyr.svg',\n  // Blank video (used to prevent errors on source change)\n  blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n  // Quality default\n  quality: {\n    default: 576,\n    options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240]\n  },\n  // Set loops\n  loop: {\n    active: false // start: null,\n    // end: null,\n\n  },\n  // Speed default and options to display\n  speed: {\n    selected: 1,\n    options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n  },\n  // Keyboard shortcut settings\n  keyboard: {\n    focused: true,\n    global: false\n  },\n  // Display tooltips\n  tooltips: {\n    controls: false,\n    seek: true\n  },\n  // Captions settings\n  captions: {\n    active: false,\n    language: 'auto',\n    // Listen to new tracks added after Plyr is initialized.\n    // This is needed for streaming captions, but may result in unselectable options\n    update: false\n  },\n  // Fullscreen settings\n  fullscreen: {\n    enabled: true,\n    // Allow fullscreen?\n    fallback: true,\n    // Fallback using full viewport/window\n    iosNative: false // Use the native fullscreen in iOS (disables custom controls)\n\n  },\n  // Local storage\n  storage: {\n    enabled: true,\n    key: 'plyr'\n  },\n  // Default controls\n  controls: ['play-large', // 'restart',\n  // 'rewind',\n  'play', // 'fast-forward',\n  'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', // 'download',\n  'fullscreen'],\n  settings: ['captions', 'quality', 'speed'],\n  // Localisation\n  i18n: {\n    restart: 'Restart',\n    rewind: 'Rewind {seektime}s',\n    play: 'Play',\n    pause: 'Pause',\n    fastForward: 'Forward {seektime}s',\n    seek: 'Seek',\n    seekLabel: '{currentTime} of {duration}',\n    played: 'Played',\n    buffered: 'Buffered',\n    currentTime: 'Current time',\n    duration: 'Duration',\n    volume: 'Volume',\n    mute: 'Mute',\n    unmute: 'Unmute',\n    enableCaptions: 'Enable captions',\n    disableCaptions: 'Disable captions',\n    download: 'Download',\n    enterFullscreen: 'Enter fullscreen',\n    exitFullscreen: 'Exit fullscreen',\n    frameTitle: 'Player for {title}',\n    captions: 'Captions',\n    settings: 'Settings',\n    menuBack: 'Go back to previous menu',\n    speed: 'Speed',\n    normal: 'Normal',\n    quality: 'Quality',\n    loop: 'Loop',\n    start: 'Start',\n    end: 'End',\n    all: 'All',\n    reset: 'Reset',\n    disabled: 'Disabled',\n    enabled: 'Enabled',\n    advertisement: 'Ad',\n    qualityBadge: {\n      2160: '4K',\n      1440: 'HD',\n      1080: 'HD',\n      720: 'HD',\n      576: 'SD',\n      480: 'SD'\n    }\n  },\n  // URLs\n  urls: {\n    download: null,\n    vimeo: {\n      sdk: 'https://player.vimeo.com/api/player.js',\n      iframe: 'https://player.vimeo.com/video/{0}?{1}',\n      api: 'https://vimeo.com/api/v2/video/{0}.json'\n    },\n    youtube: {\n      sdk: 'https://www.youtube.com/iframe_api',\n      api: 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet'\n    },\n    googleIMA: {\n      sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'\n    }\n  },\n  // Custom control listeners\n  listeners: {\n    seek: null,\n    play: null,\n    pause: null,\n    restart: null,\n    rewind: null,\n    fastForward: null,\n    mute: null,\n    volume: null,\n    captions: null,\n    download: null,\n    fullscreen: null,\n    pip: null,\n    airplay: null,\n    speed: null,\n    quality: null,\n    loop: null,\n    language: null\n  },\n  // Events to watch and bubble\n  events: [// Events to watch on HTML5 media elements and bubble\n  // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n  'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange', // Custom events\n  'download', 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready', // YouTube\n  'statechange', // Quality\n  'qualitychange', // Ads\n  'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],\n  // Selectors\n  // Change these to match your template if using custom HTML\n  selectors: {\n    editable: 'input, textarea, select, [contenteditable]',\n    container: '.plyr',\n    controls: {\n      container: null,\n      wrapper: '.plyr__controls'\n    },\n    labels: '[data-plyr]',\n    buttons: {\n      play: '[data-plyr=\""play\""]',\n      pause: '[data-plyr=\""pause\""]',\n      restart: '[data-plyr=\""restart\""]',\n      rewind: '[data-plyr=\""rewind\""]',\n      fastForward: '[data-plyr=\""fast-forward\""]',\n      mute: '[data-plyr=\""mute\""]',\n      captions: '[data-plyr=\""captions\""]',\n      download: '[data-plyr=\""download\""]',\n      fullscreen: '[data-plyr=\""fullscreen\""]',\n      pip: '[data-plyr=\""pip\""]',\n      airplay: '[data-plyr=\""airplay\""]',\n      settings: '[data-plyr=\""settings\""]',\n      loop: '[data-plyr=\""loop\""]'\n    },\n    inputs: {\n      seek: '[data-plyr=\""seek\""]',\n      volume: '[data-plyr=\""volume\""]',\n      speed: '[data-plyr=\""speed\""]',\n      language: '[data-plyr=\""language\""]',\n      quality: '[data-plyr=\""quality\""]'\n    },\n    display: {\n      currentTime: '.plyr__time--current',\n      duration: '.plyr__time--duration',\n      buffer: '.plyr__progress__buffer',\n      loop: '.plyr__progress__loop',\n      // Used later\n      volume: '.plyr__volume--display'\n    },\n    progress: '.plyr__progress',\n    captions: '.plyr__captions',\n    caption: '.plyr__caption',\n    menu: {\n      quality: '.js-plyr__menu__list--quality'\n    }\n  },\n  // Class hooks added to the player in different states\n  classNames: {\n    type: 'plyr--{0}',\n    provider: 'plyr--{0}',\n    video: 'plyr__video-wrapper',\n    embed: 'plyr__video-embed',\n    videoFixedRatio: 'plyr__video-wrapper--fixed-ratio',\n    embedContainer: 'plyr__video-embed__container',\n    poster: 'plyr__poster',\n    posterEnabled: 'plyr__poster-enabled',\n    ads: 'plyr__ads',\n    control: 'plyr__control',\n    controlPressed: 'plyr__control--pressed',\n    playing: 'plyr--playing',\n    paused: 'plyr--paused',\n    stopped: 'plyr--stopped',\n    loading: 'plyr--loading',\n    hover: 'plyr--hover',\n    tooltip: 'plyr__tooltip',\n    cues: 'plyr__cues',\n    hidden: 'plyr__sr-only',\n    hideControls: 'plyr--hide-controls',\n    isIos: 'plyr--is-ios',\n    isTouch: 'plyr--is-touch',\n    uiSupported: 'plyr--full-ui',\n    noTransition: 'plyr--no-transition',\n    display: {\n      time: 'plyr__time'\n    },\n    menu: {\n      value: 'plyr__menu__value',\n      badge: 'plyr__badge',\n      open: 'plyr--menu-open'\n    },\n    captions: {\n      enabled: 'plyr--captions-enabled',\n      active: 'plyr--captions-active'\n    },\n    fullscreen: {\n      enabled: 'plyr--fullscreen-enabled',\n      fallback: 'plyr--fullscreen-fallback'\n    },\n    pip: {\n      supported: 'plyr--pip-supported',\n      active: 'plyr--pip-active'\n    },\n    airplay: {\n      supported: 'plyr--airplay-supported',\n      active: 'plyr--airplay-active'\n    },\n    tabFocus: 'plyr__tab-focus',\n    previewThumbnails: {\n      // Tooltip thumbs\n      thumbContainer: 'plyr__preview-thumb',\n      thumbContainerShown: 'plyr__preview-thumb--is-shown',\n      imageContainer: 'plyr__preview-thumb__image-container',\n      timeContainer: 'plyr__preview-thumb__time-container',\n      // Scrubbing\n      scrubbingContainer: 'plyr__preview-scrubbing',\n      scrubbingContainerShown: 'plyr__preview-scrubbing--is-shown'\n    }\n  },\n  // Embed attributes\n  attributes: {\n    embed: {\n      provider: 'data-plyr-provider',\n      id: 'data-plyr-embed-id'\n    }\n  },\n  // API keys\n  keys: {\n    google: null\n  },\n  // Advertisements plugin\n  // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n  ads: {\n    enabled: false,\n    publisherId: '',\n    tagUrl: ''\n  },\n  // Preview Thumbnails plugin\n  previewThumbnails: {\n    enabled: false,\n    src: ''\n  },\n  // Vimeo plugin\n  vimeo: {\n    byline: false,\n    portrait: false,\n    title: false,\n    speed: true,\n    transparent: false\n  },\n  // YouTube plugin\n  youtube: {\n    noCookie: false,\n    // Whether to use an alternative version of YouTube without cookies\n    rel: 0,\n    // No related vids\n    showinfo: 0,\n    // Hide info\n    iv_load_policy: 3,\n    // Hide annotations\n    modestbranding: 1 // Hide logos as much as possible (they still show one in the corner when paused)\n\n  }\n};\n\n// ==========================================================================\n// Plyr states\n// ==========================================================================\nvar pip = {\n  active: 'picture-in-picture',\n  inactive: 'inline'\n};\n\n// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\nvar providers = {\n  html5: 'html5',\n  youtube: 'youtube',\n  vimeo: 'vimeo'\n};\nvar types = {\n  audio: 'audio',\n  video: 'video'\n};\n/**\n * Get provider by URL\n * @param {String} url\n */\n\nfunction getProviderByUrl(url) {\n  // YouTube\n  if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n    return providers.youtube;\n  } // Vimeo\n\n\n  if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n    return providers.vimeo;\n  }\n\n  return null;\n}\n\n// ==========================================================================\n// Console wrapper\n// ==========================================================================\nvar noop = function noop() {};\n\nvar Console =\n/*#__PURE__*/\nfunction () {\n  function Console() {\n    var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    _classCallCheck(this, Console);\n\n    this.enabled = window.console && enabled;\n\n    if (this.enabled) {\n      this.log('Debugging enabled');\n    }\n  }\n\n  _createClass(Console, [{\n    key: \""log\"",\n    get: function get() {\n      // eslint-disable-next-line no-console\n      return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n    }\n  }, {\n    key: \""warn\"",\n    get: function get() {\n      // eslint-disable-next-line no-console\n      return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n    }\n  }, {\n    key: \""error\"",\n    get: function get() {\n      // eslint-disable-next-line no-console\n      return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n    }\n  }]);\n\n  return Console;\n}();\n\nfunction onChange() {\n  if (!this.enabled) {\n    return;\n  } // Update toggle button\n\n\n  var button = this.player.elements.buttons.fullscreen;\n\n  if (is$1.element(button)) {\n    button.pressed = this.active;\n  } // Trigger an event\n\n\n  triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true); // Trap focus in container\n\n  if (!browser.isIos) {\n    trapFocus.call(this.player, this.target, this.active);\n  }\n}\n\nfunction toggleFallback() {\n  var _this = this;\n\n  var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n  // Store or restore scroll position\n  if (toggle) {\n    this.scrollPosition = {\n      x: window.scrollX || 0,\n      y: window.scrollY || 0\n    };\n  } else {\n    window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n  } // Toggle scroll\n\n\n  document.body.style.overflow = toggle ? 'hidden' : ''; // Toggle class hook\n\n  toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle); // Force full viewport on iPhone X+\n\n  if (browser.isIos) {\n    var viewport = document.head.querySelector('meta[name=\""viewport\""]');\n    var property = 'viewport-fit=cover'; // Inject the viewport meta if required\n\n    if (!viewport) {\n      viewport = document.createElement('meta');\n      viewport.setAttribute('name', 'viewport');\n    } // Check if the property already exists\n\n\n    var hasProperty = is$1.string(viewport.content) && viewport.content.includes(property);\n\n    if (toggle) {\n      this.cleanupViewport = !hasProperty;\n\n      if (!hasProperty) {\n        viewport.content += \"",\"".concat(property);\n      }\n    } else if (this.cleanupViewport) {\n      viewport.content = viewport.content.split(',').filter(function (part) {\n        return part.trim() !== property;\n      }).join(',');\n    } // Force a repaint as sometimes Safari doesn't want to fill the screen\n\n\n    setTimeout(function () {\n      return repaint(_this.target);\n    }, 100);\n  } // Toggle button and fire events\n\n\n  onChange.call(this);\n}\n\nvar Fullscreen =\n/*#__PURE__*/\nfunction () {\n  function Fullscreen(player) {\n    var _this2 = this;\n\n    _classCallCheck(this, Fullscreen);\n\n    // Keep reference to parent\n    this.player = player; // Get prefix\n\n    this.prefix = Fullscreen.prefix;\n    this.property = Fullscreen.property; // Scroll position\n\n    this.scrollPosition = {\n      x: 0,\n      y: 0\n    }; // Force the use of 'full window/browser' rather than fullscreen\n\n    this.forceFallback = player.config.fullscreen.fallback === 'force'; // Register event listeners\n    // Handle event (incase user presses escape etc)\n\n    on.call(this.player, document, this.prefix === 'ms' ? 'MSFullscreenChange' : \""\"".concat(this.prefix, \""fullscreenchange\""), function () {\n      // TODO: Filter for target??\n      onChange.call(_this2);\n    }); // Fullscreen toggle on double click\n\n    on.call(this.player, this.player.elements.container, 'dblclick', function (event) {\n      // Ignore double click in controls\n      if (is$1.element(_this2.player.elements.controls) && _this2.player.elements.controls.contains(event.target)) {\n        return;\n      }\n\n      _this2.toggle();\n    }); // Update the UI\n\n    this.update();\n  } // Determine if native supported\n\n\n  _createClass(Fullscreen, [{\n    key: \""update\"",\n    // Update UI\n    value: function update() {\n      if (this.enabled) {\n        var mode;\n\n        if (this.forceFallback) {\n          mode = 'Fallback (forced)';\n        } else if (Fullscreen.native) {\n          mode = 'Native';\n        } else {\n          mode = 'Fallback';\n        }\n\n        this.player.debug.log(\""\"".concat(mode, \"" fullscreen enabled\""));\n      } else {\n        this.player.debug.log('Fullscreen not supported and fallback disabled');\n      } // Add styling hook to show button\n\n\n      toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n    } // Make an element fullscreen\n\n  }, {\n    key: \""enter\"",\n    value: function enter() {\n      if (!this.enabled) {\n        return;\n      } // iOS native fullscreen doesn't need the request step\n\n\n      if (browser.isIos && this.player.config.fullscreen.iosNative) {\n        this.target.webkitEnterFullscreen();\n      } else if (!Fullscreen.native || this.forceFallback) {\n        toggleFallback.call(this, true);\n      } else if (!this.prefix) {\n        this.target.requestFullscreen();\n      } else if (!is$1.empty(this.prefix)) {\n        this.target[\""\"".concat(this.prefix, \""Request\"").concat(this.property)]();\n      }\n    } // Bail from fullscreen\n\n  }, {\n    key: \""exit\"",\n    value: function exit() {\n      if (!this.enabled) {\n        return;\n      } // iOS native fullscreen\n\n\n      if (browser.isIos && this.player.config.fullscreen.iosNative) {\n        this.target.webkitExitFullscreen();\n        this.player.play();\n      } else if (!Fullscreen.native || this.forceFallback) {\n        toggleFallback.call(this, false);\n      } else if (!this.prefix) {\n        (document.cancelFullScreen || document.exitFullscreen).call(document);\n      } else if (!is$1.empty(this.prefix)) {\n        var action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n        document[\""\"".concat(this.prefix).concat(action).concat(this.property)]();\n      }\n    } // Toggle state\n\n  }, {\n    key: \""toggle\"",\n    value: function toggle() {\n      if (!this.active) {\n        this.enter();\n      } else {\n        this.exit();\n      }\n    }\n  }, {\n    key: \""usingNative\"",\n    // If we're actually using native\n    get: function get() {\n      return Fullscreen.native && !this.forceFallback;\n    } // Get the prefix for handlers\n\n  }, {\n    key: \""enabled\"",\n    // Determine if fullscreen is enabled\n    get: function get() {\n      return (Fullscreen.native || this.player.config.fullscreen.fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n    } // Get active state\n\n  }, {\n    key: \""active\"",\n    get: function get() {\n      if (!this.enabled) {\n        return false;\n      } // Fallback using classname\n\n\n      if (!Fullscreen.native || this.forceFallback) {\n        return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n      }\n\n      var element = !this.prefix ? document.fullscreenElement : document[\""\"".concat(this.prefix).concat(this.property, \""Element\"")];\n      return element === this.target;\n    } // Get target element\n\n  }, {\n    key: \""target\"",\n    get: function get() {\n      return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n    }\n  }], [{\n    key: \""native\"",\n    get: function get() {\n      return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n    }\n  }, {\n    key: \""prefix\"",\n    get: function get() {\n      // No prefix\n      if (is$1.function(document.exitFullscreen)) {\n        return '';\n      } // Check for fullscreen support by vendor prefix\n\n\n      var value = '';\n      var prefixes = ['webkit', 'moz', 'ms'];\n      prefixes.some(function (pre) {\n        if (is$1.function(document[\""\"".concat(pre, \""ExitFullscreen\"")]) || is$1.function(document[\""\"".concat(pre, \""CancelFullScreen\"")])) {\n          value = pre;\n          return true;\n        }\n\n        return false;\n      });\n      return value;\n    }\n  }, {\n    key: \""property\"",\n    get: function get() {\n      return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n    }\n  }]);\n\n  return Fullscreen;\n}();\n\n// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \""naturalWidth\"" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\nfunction loadImage(src) {\n  var minWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  return new Promise(function (resolve, reject) {\n    var image = new Image();\n\n    var handler = function handler() {\n      delete image.onload;\n      delete image.onerror;\n      (image.naturalWidth >= minWidth ? resolve : reject)(image);\n    };\n\n    Object.assign(image, {\n      onload: handler,\n      onerror: handler,\n      src: src\n    });\n  });\n}\n\n// ==========================================================================\nvar ui = {\n  addStyleHook: function addStyleHook() {\n    toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n    toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n  },\n  // Toggle native HTML5 media controls\n  toggleNativeControls: function toggleNativeControls() {\n    var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    if (toggle && this.isHTML5) {\n      this.media.setAttribute('controls', '');\n    } else {\n      this.media.removeAttribute('controls');\n    }\n  },\n  // Setup the UI\n  build: function build() {\n    var _this = this;\n\n    // Re-attach media element listeners\n    // TODO: Use event bubbling?\n    this.listeners.media(); // Don't setup interface if no support\n\n    if (!this.supported.ui) {\n      this.debug.warn(\""Basic support only for \"".concat(this.provider, \"" \"").concat(this.type)); // Restore native controls\n\n      ui.toggleNativeControls.call(this, true); // Bail\n\n      return;\n    } // Inject custom controls if not present\n\n\n    if (!is$1.element(this.elements.controls)) {\n      // Inject custom controls\n      controls.inject.call(this); // Re-attach control listeners\n\n      this.listeners.controls();\n    } // Remove native controls\n\n\n    ui.toggleNativeControls.call(this); // Setup captions for HTML5\n\n    if (this.isHTML5) {\n      captions.setup.call(this);\n    } // Reset volume\n\n\n    this.volume = null; // Reset mute state\n\n    this.muted = null; // Reset speed\n\n    this.speed = null; // Reset loop state\n\n    this.loop = null; // Reset quality setting\n\n    this.quality = null; // Reset volume display\n\n    controls.updateVolume.call(this); // Reset time display\n\n    controls.timeUpdate.call(this); // Update the UI\n\n    ui.checkPlaying.call(this); // Check for picture-in-picture support\n\n    toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo); // Check for airplay support\n\n    toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5); // Add iOS class\n\n    toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos); // Add touch class\n\n    toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch); // Ready for API calls\n\n    this.ready = true; // Ready event at end of execution stack\n\n    setTimeout(function () {\n      triggerEvent.call(_this, _this.media, 'ready');\n    }, 0); // Set the title\n\n    ui.setTitle.call(this); // Assure the poster image is set, if the property was added before the element was created\n\n    if (this.poster) {\n      ui.setPoster.call(this, this.poster, false).catch(function () {});\n    } // Manually set the duration if user has overridden it.\n    // The event listeners for it doesn't get called if preload is disabled (#701)\n\n\n    if (this.config.duration) {\n      controls.durationUpdate.call(this);\n    }\n  },\n  // Setup aria attribute for play and iframe title\n  setTitle: function setTitle() {\n    // Find the current text\n    var label = i18n.get('play', this.config); // If there's a media title set, use that for the label\n\n    if (is$1.string(this.config.title) && !is$1.empty(this.config.title)) {\n      label += \"", \"".concat(this.config.title);\n    } // If there's a play button, set label\n\n\n    Array.from(this.elements.buttons.play || []).forEach(function (button) {\n      button.setAttribute('aria-label', label);\n    }); // Set iframe title\n    // https://github.com/sampotts/plyr/issues/124\n\n    if (this.isEmbed) {\n      var iframe = getElement.call(this, 'iframe');\n\n      if (!is$1.element(iframe)) {\n        return;\n      } // Default to media type\n\n\n      var title = !is$1.empty(this.config.title) ? this.config.title : 'video';\n      var format = i18n.get('frameTitle', this.config);\n      iframe.setAttribute('title', format.replace('{title}', title));\n    }\n  },\n  // Toggle poster\n  togglePoster: function togglePoster(enable) {\n    toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n  },\n  // Set the poster image (async)\n  // Used internally for the poster setter, with the passive option forced to false\n  setPoster: function setPoster(poster) {\n    var _this2 = this;\n\n    var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    // Don't override if call is passive\n    if (passive && this.poster) {\n      return Promise.reject(new Error('Poster already set'));\n    } // Set property synchronously to respect the call order\n\n\n    this.media.setAttribute('poster', poster); // Wait until ui is ready\n\n    return ready.call(this) // Load image\n    .then(function () {\n      return loadImage(poster);\n    }).catch(function (err) {\n      // Hide poster on error unless it's been set by another call\n      if (poster === _this2.poster) {\n        ui.togglePoster.call(_this2, false);\n      } // Rethrow\n\n\n      throw err;\n    }).then(function () {\n      // Prevent race conditions\n      if (poster !== _this2.poster) {\n        throw new Error('setPoster cancelled by later call to setPoster');\n      }\n    }).then(function () {\n      Object.assign(_this2.elements.poster.style, {\n        backgroundImage: \""url('\"".concat(poster, \""')\""),\n        // Reset backgroundSize as well (since it can be set to \""cover\"" for padded thumbnails for youtube)\n        backgroundSize: ''\n      });\n      ui.togglePoster.call(_this2, true);\n      return poster;\n    });\n  },\n  // Check playing state\n  checkPlaying: function checkPlaying(event) {\n    var _this3 = this;\n\n    // Class hooks\n    toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n    toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n    toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped); // Set state\n\n    Array.from(this.elements.buttons.play || []).forEach(function (target) {\n      target.pressed = _this3.playing;\n    }); // Only update controls on non timeupdate events\n\n    if (is$1.event(event) && event.type === 'timeupdate') {\n      return;\n    } // Toggle controls\n\n\n    ui.toggleControls.call(this);\n  },\n  // Check if media is loading\n  checkLoading: function checkLoading(event) {\n    var _this4 = this;\n\n    this.loading = ['stalled', 'waiting'].includes(event.type); // Clear timer\n\n    clearTimeout(this.timers.loading); // Timer to prevent flicker when seeking\n\n    this.timers.loading = setTimeout(function () {\n      // Update progress bar loading class state\n      toggleClass(_this4.elements.container, _this4.config.classNames.loading, _this4.loading); // Update controls visibility\n\n      ui.toggleControls.call(_this4);\n    }, this.loading ? 250 : 0);\n  },\n  // Toggle controls based on state and `force` argument\n  toggleControls: function toggleControls(force) {\n    var controls = this.elements.controls;\n\n    if (controls && this.config.hideControls) {\n      // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n      var recentTouchSeek = this.touch && this.lastSeekTime + 2000 > Date.now(); // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n\n      this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n    }\n  }\n};\n\nvar Listeners =\n/*#__PURE__*/\nfunction () {\n  function Listeners(player) {\n    _classCallCheck(this, Listeners);\n\n    this.player = player;\n    this.lastKey = null;\n    this.focusTimer = null;\n    this.lastKeyDown = null;\n    this.handleKey = this.handleKey.bind(this);\n    this.toggleMenu = this.toggleMenu.bind(this);\n    this.setTabFocus = this.setTabFocus.bind(this);\n    this.firstTouch = this.firstTouch.bind(this);\n  } // Handle key presses\n\n\n  _createClass(Listeners, [{\n    key: \""handleKey\"",\n    value: function handleKey(event) {\n      var player = this.player;\n      var elements = player.elements;\n      var code = event.keyCode ? event.keyCode : event.which;\n      var pressed = event.type === 'keydown';\n      var repeat = pressed && code === this.lastKey; // Bail if a modifier key is set\n\n      if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n        return;\n      } // If the event is bubbled from the media element\n      // Firefox doesn't get the keycode for whatever reason\n\n\n      if (!is$1.number(code)) {\n        return;\n      } // Seek by the number keys\n\n\n      var seekByKey = function seekByKey() {\n        // Divide the max duration into 10th's and times by the number value\n        player.currentTime = player.duration / 10 * (code - 48);\n      }; // Handle the key on keydown\n      // Reset on keyup\n\n\n      if (pressed) {\n        // Check focused element\n        // and if the focused element is not editable (e.g. text input)\n        // and any that accept key input http://webaim.org/techniques/keyboard/\n        var focused = document.activeElement;\n\n        if (is$1.element(focused)) {\n          var editable = player.config.selectors.editable;\n          var seek = elements.inputs.seek;\n\n          if (focused !== seek && matches$1(focused, editable)) {\n            return;\n          }\n\n          if (event.which === 32 && matches$1(focused, 'button, [role^=\""menuitem\""]')) {\n            return;\n          }\n        } // Which keycodes should we prevent default\n\n\n        var preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79]; // If the code is found prevent default (e.g. prevent scrolling for arrows)\n\n        if (preventDefault.includes(code)) {\n          event.preventDefault();\n          event.stopPropagation();\n        }\n\n        switch (code) {\n          case 48:\n          case 49:\n          case 50:\n          case 51:\n          case 52:\n          case 53:\n          case 54:\n          case 55:\n          case 56:\n          case 57:\n            // 0-9\n            if (!repeat) {\n              seekByKey();\n            }\n\n            break;\n\n          case 32:\n          case 75:\n            // Space and K key\n            if (!repeat) {\n              player.togglePlay();\n            }\n\n            break;\n\n          case 38:\n            // Arrow up\n            player.increaseVolume(0.1);\n            break;\n\n          case 40:\n            // Arrow down\n            player.decreaseVolume(0.1);\n            break;\n\n          case 77:\n            // M key\n            if (!repeat) {\n              player.muted = !player.muted;\n            }\n\n            break;\n\n          case 39:\n            // Arrow forward\n            player.forward();\n            break;\n\n          case 37:\n            // Arrow back\n            player.rewind();\n            break;\n\n          case 70:\n            // F key\n            player.fullscreen.toggle();\n            break;\n\n          case 67:\n            // C key\n            if (!repeat) {\n              player.toggleCaptions();\n            }\n\n            break;\n\n          case 76:\n            // L key\n            player.loop = !player.loop;\n            break;\n\n          /* case 73:\n          this.setLoop('start');\n          break;\n          case 76:\n          this.setLoop();\n          break;\n          case 79:\n          this.setLoop('end');\n          break; */\n\n          default:\n            break;\n        } // Escape is handle natively when in full screen\n        // So we only need to worry about non native\n\n\n        if (code === 27 && !player.fullscreen.usingNative && player.fullscreen.active) {\n          player.fullscreen.toggle();\n        } // Store last code for next cycle\n\n\n        this.lastKey = code;\n      } else {\n        this.lastKey = null;\n      }\n    } // Toggle menu\n\n  }, {\n    key: \""toggleMenu\"",\n    value: function toggleMenu(event) {\n      controls.toggleMenu.call(this.player, event);\n    } // Device is touch enabled\n\n  }, {\n    key: \""firstTouch\"",\n    value: function firstTouch() {\n      var player = this.player;\n      var elements = player.elements;\n      player.touch = true; // Add touch class\n\n      toggleClass(elements.container, player.config.classNames.isTouch, true);\n    }\n  }, {\n    key: \""setTabFocus\"",\n    value: function setTabFocus(event) {\n      var player = this.player;\n      var elements = player.elements;\n      clearTimeout(this.focusTimer); // Ignore any key other than tab\n\n      if (event.type === 'keydown' && event.which !== 9) {\n        return;\n      } // Store reference to event timeStamp\n\n\n      if (event.type === 'keydown') {\n        this.lastKeyDown = event.timeStamp;\n      } // Remove current classes\n\n\n      var removeCurrent = function removeCurrent() {\n        var className = player.config.classNames.tabFocus;\n        var current = getElements.call(player, \"".\"".concat(className));\n        toggleClass(current, className, false);\n      }; // Determine if a key was pressed to trigger this event\n\n\n      var wasKeyDown = event.timeStamp - this.lastKeyDown <= 20; // Ignore focus events if a key was pressed prior\n\n      if (event.type === 'focus' && !wasKeyDown) {\n        return;\n      } // Remove all current\n\n\n      removeCurrent(); // Delay the adding of classname until the focus has changed\n      // This event fires before the focusin event\n\n      this.focusTimer = setTimeout(function () {\n        var focused = document.activeElement; // Ignore if current focus element isn't inside the player\n\n        if (!elements.container.contains(focused)) {\n          return;\n        }\n\n        toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n      }, 10);\n    } // Global window & document listeners\n\n  }, {\n    key: \""global\"",\n    value: function global() {\n      var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      var player = this.player; // Keyboard shortcuts\n\n      if (player.config.keyboard.global) {\n        toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n      } // Click anywhere closes menu\n\n\n      toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle); // Detect touch by events\n\n      once.call(player, document.body, 'touchstart', this.firstTouch); // Tab focus detection\n\n      toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n    } // Container listeners\n\n  }, {\n    key: \""container\"",\n    value: function container() {\n      var _this = this;\n\n      var player = this.player;\n      var config = player.config,\n          elements = player.elements,\n          timers = player.timers; // Keyboard shortcuts\n\n      if (!config.keyboard.global && config.keyboard.focused) {\n        on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n      } // Toggle controls on mouse events and entering fullscreen\n\n\n      on.call(player, elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', function (event) {\n        var controls = elements.controls; // Remove button states for fullscreen\n\n        if (controls && event.type === 'enterfullscreen') {\n          controls.pressed = false;\n          controls.hover = false;\n        } // Show, then hide after a timeout unless another control event occurs\n\n\n        var show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n        var delay = 0;\n\n        if (show) {\n          ui.toggleControls.call(player, true); // Use longer timeout for touch devices\n\n          delay = player.touch ? 3000 : 2000;\n        } // Clear timer\n\n\n        clearTimeout(timers.controls); // Set new timer to prevent flicker when seeking\n\n        timers.controls = setTimeout(function () {\n          return ui.toggleControls.call(player, false);\n        }, delay);\n      }); // Force edge to repaint on exit fullscreen\n      // TODO: Fix weird bug where Edge doesn't re-draw when exiting fullscreen\n\n      /* if (browser.isEdge) {\n          on.call(player, elements.container, 'exitfullscreen', () => {\n              setTimeout(() => repaint(elements.container), 100);\n          });\n      } */\n      // Set a gutter for Vimeo\n\n      var setGutter = function setGutter(ratio, padding, toggle) {\n        if (!player.isVimeo) {\n          return;\n        }\n\n        var target = player.elements.wrapper.firstChild;\n\n        var _ratio = _slicedToArray(ratio, 2),\n            y = _ratio[1];\n\n        var _getAspectRatio$call = getAspectRatio.call(_this),\n            _getAspectRatio$call2 = _slicedToArray(_getAspectRatio$call, 2),\n            videoX = _getAspectRatio$call2[0],\n            videoY = _getAspectRatio$call2[1];\n\n        target.style.maxWidth = toggle ? \""\"".concat(y / videoY * videoX, \""px\"") : null;\n        target.style.margin = toggle ? '0 auto' : null;\n      }; // Resize on fullscreen change\n\n\n      var setPlayerSize = function setPlayerSize(measure) {\n        // If we don't need to measure the viewport\n        if (!measure) {\n          return setAspectRatio.call(player);\n        }\n\n        var rect = elements.container.getBoundingClientRect();\n        var width = rect.width,\n            height = rect.height;\n        return setAspectRatio.call(player, \""\"".concat(width, \"":\"").concat(height));\n      };\n\n      var resized = function resized() {\n        window.clearTimeout(timers.resized);\n        timers.resized = window.setTimeout(setPlayerSize, 50);\n      };\n\n      on.call(player, elements.container, 'enterfullscreen exitfullscreen', function (event) {\n        var _player$fullscreen = player.fullscreen,\n            target = _player$fullscreen.target,\n            usingNative = _player$fullscreen.usingNative; // Ignore for iOS native\n\n        if (!player.isEmbed || target !== elements.container) {\n          return;\n        }\n\n        var isEnter = event.type === 'enterfullscreen'; // Set the player size when entering fullscreen to viewport size\n\n        var _setPlayerSize = setPlayerSize(isEnter),\n            padding = _setPlayerSize.padding,\n            ratio = _setPlayerSize.ratio; // Set Vimeo gutter\n\n\n        setGutter(ratio, padding, isEnter); // If not using native fullscreen, we need to check for resizes of viewport\n\n        if (!usingNative) {\n          if (isEnter) {\n            on.call(player, window, 'resize', resized);\n          } else {\n            off.call(player, window, 'resize', resized);\n          }\n        }\n      });\n    } // Listen for media events\n\n  }, {\n    key: \""media\"",\n    value: function media() {\n      var _this2 = this;\n\n      var player = this.player;\n      var elements = player.elements; // Time change on media\n\n      on.call(player, player.media, 'timeupdate seeking seeked', function (event) {\n        return controls.timeUpdate.call(player, event);\n      }); // Display duration\n\n      on.call(player, player.media, 'durationchange loadeddata loadedmetadata', function (event) {\n        return controls.durationUpdate.call(player, event);\n      }); // Check for audio tracks on load\n      // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n\n      on.call(player, player.media, 'canplay loadeddata', function () {\n        toggleHidden(elements.volume, !player.hasAudio);\n        toggleHidden(elements.buttons.mute, !player.hasAudio);\n      }); // Handle the media finishing\n\n      on.call(player, player.media, 'ended', function () {\n        // Show poster on end\n        if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n          // Restart\n          player.restart();\n        }\n      }); // Check for buffer progress\n\n      on.call(player, player.media, 'progress playing seeking seeked', function (event) {\n        return controls.updateProgress.call(player, event);\n      }); // Handle volume changes\n\n      on.call(player, player.media, 'volumechange', function (event) {\n        return controls.updateVolume.call(player, event);\n      }); // Handle play/pause\n\n      on.call(player, player.media, 'playing play pause ended emptied timeupdate', function (event) {\n        return ui.checkPlaying.call(player, event);\n      }); // Loading state\n\n      on.call(player, player.media, 'waiting canplay seeked playing', function (event) {\n        return ui.checkLoading.call(player, event);\n      }); // Click video\n\n      if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n        // Re-fetch the wrapper\n        var wrapper = getElement.call(player, \"".\"".concat(player.config.classNames.video)); // Bail if there's no wrapper (this should never happen)\n\n        if (!is$1.element(wrapper)) {\n          return;\n        } // On click play, pause or restart\n\n\n        on.call(player, elements.container, 'click', function (event) {\n          var targets = [elements.container, wrapper]; // Ignore if click if not container or in video wrapper\n\n          if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n            return;\n          } // Touch devices will just show controls (if hidden)\n\n\n          if (player.touch && player.config.hideControls) {\n            return;\n          }\n\n          if (player.ended) {\n            _this2.proxy(event, player.restart, 'restart');\n\n            _this2.proxy(event, player.play, 'play');\n          } else {\n            _this2.proxy(event, player.togglePlay, 'play');\n          }\n        });\n      } // Disable right click\n\n\n      if (player.supported.ui && player.config.disableContextMenu) {\n        on.call(player, elements.wrapper, 'contextmenu', function (event) {\n          event.preventDefault();\n        }, false);\n      } // Volume change\n\n\n      on.call(player, player.media, 'volumechange', function () {\n        // Save to storage\n        player.storage.set({\n          volume: player.volume,\n          muted: player.muted\n        });\n      }); // Speed change\n\n      on.call(player, player.media, 'ratechange', function () {\n        // Update UI\n        controls.updateSetting.call(player, 'speed'); // Save to storage\n\n\n        player.storage.set({\n          speed: player.speed\n        });\n      }); // Quality change\n\n      on.call(player, player.media, 'qualitychange', function (event) {\n        // Update UI\n        controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n      }); // Update download link when ready and if quality changes\n\n      on.call(player, player.media, 'ready qualitychange', function () {\n        controls.setDownloadLink.call(player);\n      }); // Proxy events to container\n      // Bubble up key events for Edge\n\n      var proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n      on.call(player, player.media, proxyEvents, function (event) {\n        var _event$detail = event.detail,\n            detail = _event$detail === void 0 ? {} : _event$detail; // Get error details from media\n\n        if (event.type === 'error') {\n          detail = player.media.error;\n        }\n\n        triggerEvent.call(player, elements.container, event.type, true, detail);\n      });\n    } // Run default and custom handlers\n\n  }, {\n    key: \""proxy\"",\n    value: function proxy(event, defaultHandler, customHandlerKey) {\n      var player = this.player;\n      var customHandler = player.config.listeners[customHandlerKey];\n      var hasCustomHandler = is$1.function(customHandler);\n      var returned = true; // Execute custom handler\n\n      if (hasCustomHandler) {\n        returned = customHandler.call(player, event);\n      } // Only call default handler if not prevented in custom handler\n\n\n      if (returned && is$1.function(defaultHandler)) {\n        defaultHandler.call(player, event);\n      }\n    } // Trigger custom and default handlers\n\n  }, {\n    key: \""bind\"",\n    value: function bind(element, type, defaultHandler, customHandlerKey) {\n      var _this3 = this;\n\n      var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n      var player = this.player;\n      var customHandler = player.config.listeners[customHandlerKey];\n      var hasCustomHandler = is$1.function(customHandler);\n      on.call(player, element, type, function (event) {\n        return _this3.proxy(event, defaultHandler, customHandlerKey);\n      }, passive && !hasCustomHandler);\n    } // Listen for control events\n\n  }, {\n    key: \""controls\"",\n    value: function controls$1() {\n      var _this4 = this;\n\n      var player = this.player;\n      var elements = player.elements; // IE doesn't support input event, so we fallback to change\n\n      var inputEvent = browser.isIE ? 'change' : 'input'; // Play/pause toggle\n\n      if (elements.buttons.play) {\n        Array.from(elements.buttons.play).forEach(function (button) {\n          _this4.bind(button, 'click', player.togglePlay, 'play');\n        });\n      } // Pause\n\n\n      this.bind(elements.buttons.restart, 'click', player.restart, 'restart'); // Rewind\n\n      this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind'); // Rewind\n\n      this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward'); // Mute toggle\n\n      this.bind(elements.buttons.mute, 'click', function () {\n        player.muted = !player.muted;\n      }, 'mute'); // Captions toggle\n\n      this.bind(elements.buttons.captions, 'click', function () {\n        return player.toggleCaptions();\n      }); // Download\n\n      this.bind(elements.buttons.download, 'click', function () {\n        triggerEvent.call(player, player.media, 'download');\n      }, 'download'); // Fullscreen toggle\n\n      this.bind(elements.buttons.fullscreen, 'click', function () {\n        player.fullscreen.toggle();\n      }, 'fullscreen'); // Picture-in-Picture\n\n      this.bind(elements.buttons.pip, 'click', function () {\n        player.pip = 'toggle';\n      }, 'pip'); // Airplay\n\n      this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay'); // Settings menu - click toggle\n\n      this.bind(elements.buttons.settings, 'click', function (event) {\n        // Prevent the document click listener closing the menu\n        event.stopPropagation();\n\n        controls.toggleMenu.call(player, event);\n      }); // Settings menu - keyboard toggle\n      // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n\n      this.bind(elements.buttons.settings, 'keyup', function (event) {\n        var code = event.which; // We only care about space and return\n\n        if (![13, 32].includes(code)) {\n          return;\n        } // Because return triggers a click anyway, all we need to do is set focus\n\n\n        if (code === 13) {\n          controls.focusFirstMenuItem.call(player, null, true);\n\n          return;\n        } // Prevent scroll\n\n\n        event.preventDefault(); // Prevent playing video (Firefox)\n\n        event.stopPropagation(); // Toggle menu\n\n        controls.toggleMenu.call(player, event);\n      }, null, false // Can't be passive as we're preventing default\n      ); // Escape closes menu\n\n      this.bind(elements.settings.menu, 'keydown', function (event) {\n        if (event.which === 27) {\n          controls.toggleMenu.call(player, event);\n        }\n      }); // Set range input alternative \""value\"", which matches the tooltip time (#954)\n\n      this.bind(elements.inputs.seek, 'mousedown mousemove', function (event) {\n        var rect = elements.progress.getBoundingClientRect();\n        var percent = 100 / rect.width * (event.pageX - rect.left);\n        event.currentTarget.setAttribute('seek-value', percent);\n      }); // Pause while seeking\n\n      this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', function (event) {\n        var seek = event.currentTarget;\n        var code = event.keyCode ? event.keyCode : event.which;\n        var attribute = 'play-on-seeked';\n\n        if (is$1.keyboardEvent(event) && code !== 39 && code !== 37) {\n          return;\n        } // Record seek time so we can prevent hiding controls for a few seconds after seek\n\n\n        player.lastSeekTime = Date.now(); // Was playing before?\n\n        var play = seek.hasAttribute(attribute); // Done seeking\n\n        var done = ['mouseup', 'touchend', 'keyup'].includes(event.type); // If we're done seeking and it was playing, resume playback\n\n        if (play && done) {\n          seek.removeAttribute(attribute);\n          player.play();\n        } else if (!done && player.playing) {\n          seek.setAttribute(attribute, '');\n          player.pause();\n        }\n      }); // Fix range inputs on iOS\n      // Super weird iOS bug where after you interact with an <input type=\""range\"">,\n      // it takes over further interactions on the page. This is a hack\n\n      if (browser.isIos) {\n        var inputs = getElements.call(player, 'input[type=\""range\""]');\n        Array.from(inputs).forEach(function (input) {\n          return _this4.bind(input, inputEvent, function (event) {\n            return repaint(event.target);\n          });\n        });\n      } // Seek\n\n\n      this.bind(elements.inputs.seek, inputEvent, function (event) {\n        var seek = event.currentTarget; // If it exists, use seek-value instead of \""value\"" for consistency with tooltip time (#954)\n\n        var seekTo = seek.getAttribute('seek-value');\n\n        if (is$1.empty(seekTo)) {\n          seekTo = seek.value;\n        }\n\n        seek.removeAttribute('seek-value');\n        player.currentTime = seekTo / seek.max * player.duration;\n      }, 'seek'); // Seek tooltip\n\n      this.bind(elements.progress, 'mouseenter mouseleave mousemove', function (event) {\n        return controls.updateSeekTooltip.call(player, event);\n      }); // Preview thumbnails plugin\n      // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n\n      this.bind(elements.progress, 'mousemove touchmove', function (event) {\n        var previewThumbnails = player.previewThumbnails;\n\n        if (previewThumbnails && previewThumbnails.loaded) {\n          previewThumbnails.startMove(event);\n        }\n      }); // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n\n      this.bind(elements.progress, 'mouseleave click', function () {\n        var previewThumbnails = player.previewThumbnails;\n\n        if (previewThumbnails && previewThumbnails.loaded) {\n          previewThumbnails.endMove(false, true);\n        }\n      }); // Show scrubbing preview\n\n      this.bind(elements.progress, 'mousedown touchstart', function (event) {\n        var previewThumbnails = player.previewThumbnails;\n\n        if (previewThumbnails && previewThumbnails.loaded) {\n          previewThumbnails.startScrubbing(event);\n        }\n      });\n      this.bind(elements.progress, 'mouseup touchend', function (event) {\n        var previewThumbnails = player.previewThumbnails;\n\n        if (previewThumbnails && previewThumbnails.loaded) {\n          previewThumbnails.endScrubbing(event);\n        }\n      }); // Polyfill for lower fill in <input type=\""range\""> for webkit\n\n      if (browser.isWebkit) {\n        Array.from(getElements.call(player, 'input[type=\""range\""]')).forEach(function (element) {\n          _this4.bind(element, 'input', function (event) {\n            return controls.updateRangeFill.call(player, event.target);\n          });\n        });\n      } // Current time invert\n      // Only if one time element is used for both currentTime and duration\n\n\n      if (player.config.toggleInvert && !is$1.element(elements.display.duration)) {\n        this.bind(elements.display.currentTime, 'click', function () {\n          // Do nothing if we're at the start\n          if (player.currentTime === 0) {\n            return;\n          }\n\n          player.config.invertTime = !player.config.invertTime;\n\n          controls.timeUpdate.call(player);\n        });\n      } // Volume\n\n\n      this.bind(elements.inputs.volume, inputEvent, function (event) {\n        player.volume = event.target.value;\n      }, 'volume'); // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n\n      this.bind(elements.controls, 'mouseenter mouseleave', function (event) {\n        elements.controls.hover = !player.touch && event.type === 'mouseenter';\n      }); // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n\n      this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {\n        elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n      }); // Show controls when they receive focus (e.g., when using keyboard tab key)\n\n      this.bind(elements.controls, 'focusin', function () {\n        var config = player.config,\n            elements = player.elements,\n            timers = player.timers; // Skip transition to prevent focus from scrolling the parent element\n\n        toggleClass(elements.controls, config.classNames.noTransition, true); // Toggle\n\n        ui.toggleControls.call(player, true); // Restore transition\n\n        setTimeout(function () {\n          toggleClass(elements.controls, config.classNames.noTransition, false);\n        }, 0); // Delay a little more for mouse users\n\n        var delay = _this4.touch ? 3000 : 4000; // Clear timer\n\n        clearTimeout(timers.controls); // Hide again after delay\n\n        timers.controls = setTimeout(function () {\n          return ui.toggleControls.call(player, false);\n        }, delay);\n      }); // Mouse wheel for volume\n\n      this.bind(elements.inputs.volume, 'wheel', function (event) {\n        // Detect \""natural\"" scroll - suppored on OS X Safari only\n        // Other browsers on OS X will be inverted until support improves\n        var inverted = event.webkitDirectionInvertedFromDevice; // Get delta from event. Invert if `inverted` is true\n\n        var _map = [event.deltaX, -event.deltaY].map(function (value) {\n          return inverted ? -value : value;\n        }),\n            _map2 = _slicedToArray(_map, 2),\n            x = _map2[0],\n            y = _map2[1]; // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n\n\n        var direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y); // Change the volume by 2%\n\n        player.increaseVolume(direction / 50); // Don't break page scrolling at max and min\n\n        var volume = player.media.volume;\n\n        if (direction === 1 && volume < 1 || direction === -1 && volume > 0) {\n          event.preventDefault();\n        }\n      }, 'volume', false);\n    }\n  }]);\n\n  return Listeners;\n}();\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar loadjs_umd = createCommonjsModule(function (module, exports) {\n  (function (root, factory) {\n    {\n      module.exports = factory();\n    }\n  })(commonjsGlobal, function () {\n    /**\n     * Global dependencies.\n     * @global {Object} document - DOM\n     */\n    var devnull = function devnull() {},\n        bundleIdCache = {},\n        bundleResultCache = {},\n        bundleCallbackQueue = {};\n    /**\n     * Subscribe to bundle load event.\n     * @param {string[]} bundleIds - Bundle ids\n     * @param {Function} callbackFn - The callback function\n     */\n\n\n    function subscribe(bundleIds, callbackFn) {\n      // listify\n      bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n      var depsNotFound = [],\n          i = bundleIds.length,\n          numWaiting = i,\n          fn,\n          bundleId,\n          r,\n          q; // define callback function\n\n      fn = function fn(bundleId, pathsNotFound) {\n        if (pathsNotFound.length) depsNotFound.push(bundleId);\n        numWaiting--;\n        if (!numWaiting) callbackFn(depsNotFound);\n      }; // register callback\n\n\n      while (i--) {\n        bundleId = bundleIds[i]; // execute callback if in result cache\n\n        r = bundleResultCache[bundleId];\n\n        if (r) {\n          fn(bundleId, r);\n          continue;\n        } // add to callback queue\n\n\n        q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n        q.push(fn);\n      }\n    }\n    /**\n     * Publish bundle load event.\n     * @param {string} bundleId - Bundle id\n     * @param {string[]} pathsNotFound - List of files not found\n     */\n\n\n    function publish(bundleId, pathsNotFound) {\n      // exit if id isn't defined\n      if (!bundleId) return;\n      var q = bundleCallbackQueue[bundleId]; // cache result\n\n      bundleResultCache[bundleId] = pathsNotFound; // exit if queue is empty\n\n      if (!q) return; // empty callback queue\n\n      while (q.length) {\n        q[0](bundleId, pathsNotFound);\n        q.splice(0, 1);\n      }\n    }\n    /**\n     * Execute callbacks.\n     * @param {Object or Function} args - The callback args\n     * @param {string[]} depsNotFound - List of dependencies not found\n     */\n\n\n    function executeCallbacks(args, depsNotFound) {\n      // accept function as argument\n      if (args.call) args = {\n        success: args\n      }; // success and error callbacks\n\n      if (depsNotFound.length) (args.error || devnull)(depsNotFound);else (args.success || devnull)(args);\n    }\n    /**\n     * Load individual file.\n     * @param {string} path - The file path\n     * @param {Function} callbackFn - The callback function\n     */\n\n\n    function loadFile(path, callbackFn, args, numTries) {\n      var doc = document,\n          async = args.async,\n          maxTries = (args.numRetries || 0) + 1,\n          beforeCallbackFn = args.before || devnull,\n          pathStripped = path.replace(/^(css|img)!/, ''),\n          isLegacyIECss,\n          e;\n      numTries = numTries || 0;\n\n      if (/(^css!|\\.css$)/.test(path)) {\n        // css\n        e = doc.createElement('link');\n        e.rel = 'stylesheet';\n        e.href = pathStripped; // tag IE9+\n\n        isLegacyIECss = 'hideFocus' in e; // use preload in IE Edge (to detect load errors)\n\n        if (isLegacyIECss && e.relList) {\n          isLegacyIECss = 0;\n          e.rel = 'preload';\n          e.as = 'style';\n        }\n      } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n        // image\n        e = doc.createElement('img');\n        e.src = pathStripped;\n      } else {\n        // javascript\n        e = doc.createElement('script');\n        e.src = path;\n        e.async = async === undefined ? true : async;\n      }\n\n      e.onload = e.onerror = e.onbeforeload = function (ev) {\n        var result = ev.type[0]; // treat empty stylesheets as failures to get around lack of onerror\n        // support in IE9-11\n\n        if (isLegacyIECss) {\n          try {\n            if (!e.sheet.cssText.length) result = 'e';\n          } catch (x) {\n            // sheets objects created from load errors don't allow access to\n            // `cssText` (unless error is Code:18 SecurityError)\n            if (x.code != 18) result = 'e';\n          }\n        } // handle retries in case of load failure\n\n\n        if (result == 'e') {\n          // increment counter\n          numTries += 1; // exit function and try again\n\n          if (numTries < maxTries) {\n            return loadFile(path, callbackFn, args, numTries);\n          }\n        } else if (e.rel == 'preload' && e.as == 'style') {\n          // activate preloaded stylesheets\n          return e.rel = 'stylesheet'; // jshint ignore:line\n        } // execute callback\n\n\n        callbackFn(path, result, ev.defaultPrevented);\n      }; // add to document (unless callback returns `false`)\n\n\n      if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n    }\n    /**\n     * Load multiple files.\n     * @param {string[]} paths - The file paths\n     * @param {Function} callbackFn - The callback function\n     */\n\n\n    function loadFiles(paths, callbackFn, args) {\n      // listify paths\n      paths = paths.push ? paths : [paths];\n      var numWaiting = paths.length,\n          x = numWaiting,\n          pathsNotFound = [],\n          fn,\n          i; // define callback function\n\n      fn = function fn(path, result, defaultPrevented) {\n        // handle error\n        if (result == 'e') pathsNotFound.push(path); // handle beforeload event. If defaultPrevented then that means the load\n        // will be blocked (ex. Ghostery/ABP on Safari)\n\n        if (result == 'b') {\n          if (defaultPrevented) pathsNotFound.push(path);else return;\n        }\n\n        numWaiting--;\n        if (!numWaiting) callbackFn(pathsNotFound);\n      }; // load scripts\n\n\n      for (i = 0; i < x; i++) {\n        loadFile(paths[i], fn, args);\n      }\n    }\n    /**\n     * Initiate script load and register bundle.\n     * @param {(string|string[])} paths - The file paths\n     * @param {(string|Function|Object)} [arg1] - The (1) bundleId or (2) success\n     *   callback or (3) object literal with success/error arguments, numRetries,\n     *   etc.\n     * @param {(Function|Object)} [arg2] - The (1) success callback or (2) object\n     *   literal with success/error arguments, numRetries, etc.\n     */\n\n\n    function loadjs(paths, arg1, arg2) {\n      var bundleId, args; // bundleId (if string)\n\n      if (arg1 && arg1.trim) bundleId = arg1; // args (default is {})\n\n      args = (bundleId ? arg2 : arg1) || {}; // throw error if bundle is already defined\n\n      if (bundleId) {\n        if (bundleId in bundleIdCache) {\n          throw \""LoadJS\"";\n        } else {\n          bundleIdCache[bundleId] = true;\n        }\n      }\n\n      function loadFn(resolve, reject) {\n        loadFiles(paths, function (pathsNotFound) {\n          // execute callbacks\n          executeCallbacks(args, pathsNotFound); // resolve Promise\n\n          if (resolve) {\n            executeCallbacks({\n              success: resolve,\n              error: reject\n            }, pathsNotFound);\n          } // publish bundle load event\n\n\n          publish(bundleId, pathsNotFound);\n        }, args);\n      }\n\n      if (args.returnPromise) return new Promise(loadFn);else loadFn();\n    }\n    /**\n     * Execute callbacks when dependencies have been satisfied.\n     * @param {(string|string[])} deps - List of bundle ids\n     * @param {Object} args - success/error arguments\n     */\n\n\n    loadjs.ready = function ready(deps, args) {\n      // subscribe to bundle load event\n      subscribe(deps, function (depsNotFound) {\n        // execute callbacks\n        executeCallbacks(args, depsNotFound);\n      });\n      return loadjs;\n    };\n    /**\n     * Manually satisfy bundle dependencies.\n     * @param {string} bundleId - The bundle id\n     */\n\n\n    loadjs.done = function done(bundleId) {\n      publish(bundleId, []);\n    };\n    /**\n     * Reset loadjs dependencies statuses\n     */\n\n\n    loadjs.reset = function reset() {\n      bundleIdCache = {};\n      bundleResultCache = {};\n      bundleCallbackQueue = {};\n    };\n    /**\n     * Determine if bundle has already been defined\n     * @param String} bundleId - The bundle id\n     */\n\n\n    loadjs.isDefined = function isDefined(bundleId) {\n      return bundleId in bundleIdCache;\n    }; // export\n\n\n    return loadjs;\n  });\n});\n\n// ==========================================================================\nfunction loadScript(url) {\n  return new Promise(function (resolve, reject) {\n    loadjs_umd(url, {\n      success: resolve,\n      error: reject\n    });\n  });\n}\n\nfunction parseId(url) {\n  if (is$1.empty(url)) {\n    return null;\n  }\n\n  if (is$1.number(Number(url))) {\n    return url;\n  }\n\n  var regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n  return url.match(regex) ? RegExp.$2 : url;\n} // Set playback state and trigger change (only on actual change)\n\n\nfunction assurePlaybackState(play) {\n  if (play && !this.embed.hasPlayed) {\n    this.embed.hasPlayed = true;\n  }\n\n  if (this.media.paused === play) {\n    this.media.paused = !play;\n    triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n  }\n}\n\nvar vimeo = {\n  setup: function setup() {\n    var _this = this;\n\n    // Add embed class for responsive\n    toggleClass(this.elements.wrapper, this.config.classNames.embed, true); // Set intial ratio\n\n    setAspectRatio.call(this); // Load the API if not already\n\n    if (!is$1.object(window.Vimeo)) {\n      loadScript(this.config.urls.vimeo.sdk).then(function () {\n        vimeo.ready.call(_this);\n      }).catch(function (error) {\n        _this.debug.warn('Vimeo API failed to load', error);\n      });\n    } else {\n      vimeo.ready.call(this);\n    }\n  },\n  // API Ready\n  ready: function ready() {\n    var _this2 = this;\n\n    var player = this;\n    var config = player.config.vimeo; // Get Vimeo params for the iframe\n\n    var params = buildUrlParams(extend({}, {\n      loop: player.config.loop.active,\n      autoplay: player.autoplay,\n      muted: player.muted,\n      gesture: 'media',\n      playsinline: !this.config.fullscreen.iosNative\n    }, config)); // Get the source URL or ID\n\n    var source = player.media.getAttribute('src'); // Get from <div> if needed\n\n    if (is$1.empty(source)) {\n      source = player.media.getAttribute(player.config.attributes.embed.id);\n    }\n\n    var id = parseId(source); // Build an iframe\n\n    var iframe = createElement('iframe');\n    var src = format(player.config.urls.vimeo.iframe, id, params);\n    iframe.setAttribute('src', src);\n    iframe.setAttribute('allowfullscreen', '');\n    iframe.setAttribute('allowtransparency', '');\n    iframe.setAttribute('allow', 'autoplay'); // Get poster, if already set\n\n    var poster = player.poster; // Inject the package\n\n    var wrapper = createElement('div', {\n      poster: poster,\n      class: player.config.classNames.embedContainer\n    });\n    wrapper.appendChild(iframe);\n    player.media = replaceElement(wrapper, player.media); // Get poster image\n\n    fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) {\n      if (is$1.empty(response)) {\n        return;\n      } // Get the URL for thumbnail\n\n\n      var url = new URL(response[0].thumbnail_large); // Get original image\n\n      url.pathname = \""\"".concat(url.pathname.split('_')[0], \"".jpg\""); // Set and show poster\n\n      ui.setPoster.call(player, url.href).catch(function () {});\n    }); // Setup instance\n    // https://github.com/vimeo/player.js\n\n    player.embed = new window.Vimeo.Player(iframe, {\n      autopause: player.config.autopause,\n      muted: player.muted\n    });\n    player.media.paused = true;\n    player.media.currentTime = 0; // Disable native text track rendering\n\n    if (player.supported.ui) {\n      player.embed.disableTextTrack();\n    } // Create a faux HTML5 API using the Vimeo API\n\n\n    player.media.play = function () {\n      assurePlaybackState.call(player, true);\n      return player.embed.play();\n    };\n\n    player.media.pause = function () {\n      assurePlaybackState.call(player, false);\n      return player.embed.pause();\n    };\n\n    player.media.stop = function () {\n      player.pause();\n      player.currentTime = 0;\n    }; // Seeking\n\n\n    var currentTime = player.media.currentTime;\n    Object.defineProperty(player.media, 'currentTime', {\n      get: function get() {\n        return currentTime;\n      },\n      set: function set(time) {\n        // Vimeo will automatically play on seek if the video hasn't been played before\n        // Get current paused state and volume etc\n        var embed = player.embed,\n            media = player.media,\n            paused = player.paused,\n            volume = player.volume;\n        var restorePause = paused && !embed.hasPlayed; // Set seeking state and trigger event\n\n        media.seeking = true;\n        triggerEvent.call(player, media, 'seeking'); // If paused, mute until seek is complete\n\n        Promise.resolve(restorePause && embed.setVolume(0)) // Seek\n        .then(function () {\n          return embed.setCurrentTime(time);\n        }) // Restore paused\n        .then(function () {\n          return restorePause && embed.pause();\n        }) // Restore volume\n        .then(function () {\n          return restorePause && embed.setVolume(volume);\n        }).catch(function () {// Do nothing\n        });\n      }\n    }); // Playback speed\n\n    var speed = player.config.speed.selected;\n    Object.defineProperty(player.media, 'playbackRate', {\n      get: function get() {\n        return speed;\n      },\n      set: function set(input) {\n        player.embed.setPlaybackRate(input).then(function () {\n          speed = input;\n          triggerEvent.call(player, player.media, 'ratechange');\n        }).catch(function (error) {\n          // Hide menu item (and menu if empty)\n          if (error.name === 'Error') {\n            controls.setSpeedMenu.call(player, []);\n          }\n        });\n      }\n    }); // Volume\n\n    var volume = player.config.volume;\n    Object.defineProperty(player.media, 'volume', {\n      get: function get() {\n        return volume;\n      },\n      set: function set(input) {\n        player.embed.setVolume(input).then(function () {\n          volume = input;\n          triggerEvent.call(player, player.media, 'volumechange');\n        });\n      }\n    }); // Muted\n\n    var muted = player.config.muted;\n    Object.defineProperty(player.media, 'muted', {\n      get: function get() {\n        return muted;\n      },\n      set: function set(input) {\n        var toggle = is$1.boolean(input) ? input : false;\n        player.embed.setVolume(toggle ? 0 : player.config.volume).then(function () {\n          muted = toggle;\n          triggerEvent.call(player, player.media, 'volumechange');\n        });\n      }\n    }); // Loop\n\n    var loop = player.config.loop;\n    Object.defineProperty(player.media, 'loop', {\n      get: function get() {\n        return loop;\n      },\n      set: function set(input) {\n        var toggle = is$1.boolean(input) ? input : player.config.loop.active;\n        player.embed.setLoop(toggle).then(function () {\n          loop = toggle;\n        });\n      }\n    }); // Source\n\n    var currentSrc;\n    player.embed.getVideoUrl().then(function (value) {\n      currentSrc = value;\n      controls.setDownloadLink.call(player);\n    }).catch(function (error) {\n      _this2.debug.warn(error);\n    });\n    Object.defineProperty(player.media, 'currentSrc', {\n      get: function get() {\n        return currentSrc;\n      }\n    }); // Ended\n\n    Object.defineProperty(player.media, 'ended', {\n      get: function get() {\n        return player.currentTime === player.duration;\n      }\n    }); // Set aspect ratio based on video size\n\n    Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(function (dimensions) {\n      var _dimensions = _slicedToArray(dimensions, 2),\n          width = _dimensions[0],\n          height = _dimensions[1];\n\n      player.embed.ratio = \""\"".concat(width, \"":\"").concat(height);\n      setAspectRatio.call(_this2);\n    }); // Set autopause\n\n    player.embed.setAutopause(player.config.autopause).then(function (state) {\n      player.config.autopause = state;\n    }); // Get title\n\n    player.embed.getVideoTitle().then(function (title) {\n      player.config.title = title;\n      ui.setTitle.call(_this2);\n    }); // Get current time\n\n    player.embed.getCurrentTime().then(function (value) {\n      currentTime = value;\n      triggerEvent.call(player, player.media, 'timeupdate');\n    }); // Get duration\n\n    player.embed.getDuration().then(function (value) {\n      player.media.duration = value;\n      triggerEvent.call(player, player.media, 'durationchange');\n    }); // Get captions\n\n    player.embed.getTextTracks().then(function (tracks) {\n      player.media.textTracks = tracks;\n      captions.setup.call(player);\n    });\n    player.embed.on('cuechange', function (_ref) {\n      var _ref$cues = _ref.cues,\n          cues = _ref$cues === void 0 ? [] : _ref$cues;\n      var strippedCues = cues.map(function (cue) {\n        return stripHTML(cue.text);\n      });\n      captions.updateCues.call(player, strippedCues);\n    });\n    player.embed.on('loaded', function () {\n      // Assure state and events are updated on autoplay\n      player.embed.getPaused().then(function (paused) {\n        assurePlaybackState.call(player, !paused);\n\n        if (!paused) {\n          triggerEvent.call(player, player.media, 'playing');\n        }\n      });\n\n      if (is$1.element(player.embed.element) && player.supported.ui) {\n        var frame = player.embed.element; // Fix keyboard focus issues\n        // https://github.com/sampotts/plyr/issues/317\n\n        frame.setAttribute('tabindex', -1);\n      }\n    });\n    player.embed.on('play', function () {\n      assurePlaybackState.call(player, true);\n      triggerEvent.call(player, player.media, 'playing');\n    });\n    player.embed.on('pause', function () {\n      assurePlaybackState.call(player, false);\n    });\n    player.embed.on('timeupdate', function (data) {\n      player.media.seeking = false;\n      currentTime = data.seconds;\n      triggerEvent.call(player, player.media, 'timeupdate');\n    });\n    player.embed.on('progress', function (data) {\n      player.media.buffered = data.percent;\n      triggerEvent.call(player, player.media, 'progress'); // Check all loaded\n\n      if (parseInt(data.percent, 10) === 1) {\n        triggerEvent.call(player, player.media, 'canplaythrough');\n      } // Get duration as if we do it before load, it gives an incorrect value\n      // https://github.com/sampotts/plyr/issues/891\n\n\n      player.embed.getDuration().then(function (value) {\n        if (value !== player.media.duration) {\n          player.media.duration = value;\n          triggerEvent.call(player, player.media, 'durationchange');\n        }\n      });\n    });\n    player.embed.on('seeked', function () {\n      player.media.seeking = false;\n      triggerEvent.call(player, player.media, 'seeked');\n    });\n    player.embed.on('ended', function () {\n      player.media.paused = true;\n      triggerEvent.call(player, player.media, 'ended');\n    });\n    player.embed.on('error', function (detail) {\n      player.media.error = detail;\n      triggerEvent.call(player, player.media, 'error');\n    }); // Rebuild UI\n\n    setTimeout(function () {\n      return ui.build.call(player);\n    }, 0);\n  }\n};\n\n// ==========================================================================\n\nfunction parseId$1(url) {\n  if (is$1.empty(url)) {\n    return null;\n  }\n\n  var regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n  return url.match(regex) ? RegExp.$2 : url;\n} // Set playback state and trigger change (only on actual change)\n\n\nfunction assurePlaybackState$1(play) {\n  if (play && !this.embed.hasPlayed) {\n    this.embed.hasPlayed = true;\n  }\n\n  if (this.media.paused === play) {\n    this.media.paused = !play;\n    triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n  }\n}\n\nfunction getHost(config) {\n  if (config.noCookie) {\n    return 'https://www.youtube-nocookie.com';\n  }\n\n  if (window.location.protocol === 'http:') {\n    return 'http://www.youtube.com';\n  } // Use YouTube's default\n\n\n  return undefined;\n}\n\nvar youtube = {\n  setup: function setup() {\n    var _this = this;\n\n    // Add embed class for responsive\n    toggleClass(this.elements.wrapper, this.config.classNames.embed, true); // Set aspect ratio\n\n    setAspectRatio.call(this); // Setup API\n\n    if (is$1.object(window.YT) && is$1.function(window.YT.Player)) {\n      youtube.ready.call(this);\n    } else {\n      // Load the API\n      loadScript(this.config.urls.youtube.sdk).catch(function (error) {\n        _this.debug.warn('YouTube API failed to load', error);\n      }); // Setup callback for the API\n      // YouTube has it's own system of course...\n\n      window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || []; // Add to queue\n\n      window.onYouTubeReadyCallbacks.push(function () {\n        youtube.ready.call(_this);\n      }); // Set callback to process queue\n\n      window.onYouTubeIframeAPIReady = function () {\n        window.onYouTubeReadyCallbacks.forEach(function (callback) {\n          callback();\n        });\n      };\n    }\n  },\n  // Get the media title\n  getTitle: function getTitle(videoId) {\n    var _this2 = this;\n\n    // Try via undocumented API method first\n    // This method disappears now and then though...\n    // https://github.com/sampotts/plyr/issues/709\n    if (is$1.function(this.embed.getVideoData)) {\n      var _this$embed$getVideoD = this.embed.getVideoData(),\n          title = _this$embed$getVideoD.title;\n\n      if (is$1.empty(title)) {\n        this.config.title = title;\n        ui.setTitle.call(this);\n        return;\n      }\n    } // Or via Google API\n\n\n    var key = this.config.keys.google;\n\n    if (is$1.string(key) && !is$1.empty(key)) {\n      var url = format(this.config.urls.youtube.api, videoId, key);\n      fetch(url).then(function (result) {\n        if (is$1.object(result)) {\n          _this2.config.title = result.items[0].snippet.title;\n          ui.setTitle.call(_this2);\n        }\n      }).catch(function () {});\n    }\n  },\n  // API ready\n  ready: function ready() {\n    var player = this; // Ignore already setup (race condition)\n\n    var currentId = player.media.getAttribute('id');\n\n    if (!is$1.empty(currentId) && currentId.startsWith('youtube-')) {\n      return;\n    } // Get the source URL or ID\n\n\n    var source = player.media.getAttribute('src'); // Get from <div> if needed\n\n    if (is$1.empty(source)) {\n      source = player.media.getAttribute(this.config.attributes.embed.id);\n    } // Replace the <iframe> with a <div> due to YouTube API issues\n\n\n    var videoId = parseId$1(source);\n    var id = generateId(player.provider); // Get poster, if already set\n\n    var poster = player.poster; // Replace media element\n\n    var container = createElement('div', {\n      id: id,\n      poster: poster\n    });\n    player.media = replaceElement(container, player.media); // Id to poster wrapper\n\n    var posterSrc = function posterSrc(format) {\n      return \""https://i.ytimg.com/vi/\"".concat(videoId, \""/\"").concat(format, \""default.jpg\"");\n    }; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n\n\n    loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n    .catch(function () {\n      return loadImage(posterSrc('sd'), 121);\n    }) // 480p padded 4:3\n    .catch(function () {\n      return loadImage(posterSrc('hq'));\n    }) // 360p padded 4:3. Always exists\n    .then(function (image) {\n      return ui.setPoster.call(player, image.src);\n    }).then(function (posterSrc) {\n      // If the image is padded, use background-size \""cover\"" instead (like youtube does too with their posters)\n      if (!posterSrc.includes('maxres')) {\n        player.elements.poster.style.backgroundSize = 'cover';\n      }\n    }).catch(function () {});\n    var config = player.config.youtube; // Setup instance\n    // https://developers.google.com/youtube/iframe_api_reference\n\n    player.embed = new window.YT.Player(id, {\n      videoId: videoId,\n      host: getHost(config),\n      playerVars: extend({}, {\n        autoplay: player.config.autoplay ? 1 : 0,\n        // Autoplay\n        hl: player.config.hl,\n        // iframe interface language\n        controls: player.supported.ui ? 0 : 1,\n        // Only show controls if not fully supported\n        disablekb: 1,\n        // Disable keyboard as we handle it\n        playsinline: !player.config.fullscreen.iosNative ? 1 : 0,\n        // Allow iOS inline playback\n        // Captions are flaky on YouTube\n        cc_load_policy: player.captions.active ? 1 : 0,\n        cc_lang_pref: player.config.captions.language,\n        // Tracking for stats\n        widget_referrer: window ? window.location.href : null\n      }, config),\n      events: {\n        onError: function onError(event) {\n          // YouTube may fire onError twice, so only handle it once\n          if (!player.media.error) {\n            var code = event.data; // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n\n            var message = {\n              2: 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n              5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n              100: 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n              101: 'The owner of the requested video does not allow it to be played in embedded players.',\n              150: 'The owner of the requested video does not allow it to be played in embedded players.'\n            }[code] || 'An unknown error occured';\n            player.media.error = {\n              code: code,\n              message: message\n            };\n            triggerEvent.call(player, player.media, 'error');\n          }\n        },\n        onPlaybackRateChange: function onPlaybackRateChange(event) {\n          // Get the instance\n          var instance = event.target; // Get current speed\n\n          player.media.playbackRate = instance.getPlaybackRate();\n          triggerEvent.call(player, player.media, 'ratechange');\n        },\n        onReady: function onReady(event) {\n          // Bail if onReady has already been called. See issue #1108\n          if (is$1.function(player.media.play)) {\n            return;\n          } // Get the instance\n\n\n          var instance = event.target; // Get the title\n\n          youtube.getTitle.call(player, videoId); // Create a faux HTML5 API using the YouTube API\n\n          player.media.play = function () {\n            assurePlaybackState$1.call(player, true);\n            instance.playVideo();\n          };\n\n          player.media.pause = function () {\n            assurePlaybackState$1.call(player, false);\n            instance.pauseVideo();\n          };\n\n          player.media.stop = function () {\n            instance.stopVideo();\n          };\n\n          player.media.duration = instance.getDuration();\n          player.media.paused = true; // Seeking\n\n          player.media.currentTime = 0;\n          Object.defineProperty(player.media, 'currentTime', {\n            get: function get() {\n              return Number(instance.getCurrentTime());\n            },\n            set: function set(time) {\n              // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n              if (player.paused && !player.embed.hasPlayed) {\n                player.embed.mute();\n              } // Set seeking state and trigger event\n\n\n              player.media.seeking = true;\n              triggerEvent.call(player, player.media, 'seeking'); // Seek after events sent\n\n              instance.seekTo(time);\n            }\n          }); // Playback speed\n\n          Object.defineProperty(player.media, 'playbackRate', {\n            get: function get() {\n              return instance.getPlaybackRate();\n            },\n            set: function set(input) {\n              instance.setPlaybackRate(input);\n            }\n          }); // Volume\n\n          var volume = player.config.volume;\n          Object.defineProperty(player.media, 'volume', {\n            get: function get() {\n              return volume;\n            },\n            set: function set(input) {\n              volume = input;\n              instance.setVolume(volume * 100);\n              triggerEvent.call(player, player.media, 'volumechange');\n            }\n          }); // Muted\n\n          var muted = player.config.muted;\n          Object.defineProperty(player.media, 'muted', {\n            get: function get() {\n              return muted;\n            },\n            set: function set(input) {\n              var toggle = is$1.boolean(input) ? input : muted;\n              muted = toggle;\n              instance[toggle ? 'mute' : 'unMute']();\n              triggerEvent.call(player, player.media, 'volumechange');\n            }\n          }); // Source\n\n          Object.defineProperty(player.media, 'currentSrc', {\n            get: function get() {\n              return instance.getVideoUrl();\n            }\n          }); // Ended\n\n          Object.defineProperty(player.media, 'ended', {\n            get: function get() {\n              return player.currentTime === player.duration;\n            }\n          }); // Get available speeds\n\n          player.options.speed = instance.getAvailablePlaybackRates(); // Set the tabindex to avoid focus entering iframe\n\n          if (player.supported.ui) {\n            player.media.setAttribute('tabindex', -1);\n          }\n\n          triggerEvent.call(player, player.media, 'timeupdate');\n          triggerEvent.call(player, player.media, 'durationchange'); // Reset timer\n\n          clearInterval(player.timers.buffering); // Setup buffering\n\n          player.timers.buffering = setInterval(function () {\n            // Get loaded % from YouTube\n            player.media.buffered = instance.getVideoLoadedFraction(); // Trigger progress only when we actually buffer something\n\n            if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n              triggerEvent.call(player, player.media, 'progress');\n            } // Set last buffer point\n\n\n            player.media.lastBuffered = player.media.buffered; // Bail if we're at 100%\n\n            if (player.media.buffered === 1) {\n              clearInterval(player.timers.buffering); // Trigger event\n\n              triggerEvent.call(player, player.media, 'canplaythrough');\n            }\n          }, 200); // Rebuild UI\n\n          setTimeout(function () {\n            return ui.build.call(player);\n          }, 50);\n        },\n        onStateChange: function onStateChange(event) {\n          // Get the instance\n          var instance = event.target; // Reset timer\n\n          clearInterval(player.timers.playing);\n          var seeked = player.media.seeking && [1, 2].includes(event.data);\n\n          if (seeked) {\n            // Unset seeking and fire seeked event\n            player.media.seeking = false;\n            triggerEvent.call(player, player.media, 'seeked');\n          } // Handle events\n          // -1   Unstarted\n          // 0    Ended\n          // 1    Playing\n          // 2    Paused\n          // 3    Buffering\n          // 5    Video cued\n\n\n          switch (event.data) {\n            case -1:\n              // Update scrubber\n              triggerEvent.call(player, player.media, 'timeupdate'); // Get loaded % from YouTube\n\n              player.media.buffered = instance.getVideoLoadedFraction();\n              triggerEvent.call(player, player.media, 'progress');\n              break;\n\n            case 0:\n              assurePlaybackState$1.call(player, false); // YouTube doesn't support loop for a single video, so mimick it.\n\n              if (player.media.loop) {\n                // YouTube needs a call to `stopVideo` before playing again\n                instance.stopVideo();\n                instance.playVideo();\n              } else {\n                triggerEvent.call(player, player.media, 'ended');\n              }\n\n              break;\n\n            case 1:\n              // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n              if (!player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {\n                player.media.pause();\n              } else {\n                assurePlaybackState$1.call(player, true);\n                triggerEvent.call(player, player.media, 'playing'); // Poll to get playback progress\n\n                player.timers.playing = setInterval(function () {\n                  triggerEvent.call(player, player.media, 'timeupdate');\n                }, 50); // Check duration again due to YouTube bug\n                // https://github.com/sampotts/plyr/issues/374\n                // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n\n                if (player.media.duration !== instance.getDuration()) {\n                  player.media.duration = instance.getDuration();\n                  triggerEvent.call(player, player.media, 'durationchange');\n                }\n              }\n\n              break;\n\n            case 2:\n              // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n              if (!player.muted) {\n                player.embed.unMute();\n              }\n\n              assurePlaybackState$1.call(player, false);\n              break;\n\n            default:\n              break;\n          }\n\n          triggerEvent.call(player, player.elements.container, 'statechange', false, {\n            code: event.data\n          });\n        }\n      }\n    });\n  }\n};\n\n// ==========================================================================\nvar media = {\n  // Setup media\n  setup: function setup() {\n    // If there's no media, bail\n    if (!this.media) {\n      this.debug.warn('No media element found!');\n      return;\n    } // Add type class\n\n\n    toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true); // Add provider class\n\n    toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true); // Add video class for embeds\n    // This will require changes if audio embeds are added\n\n    if (this.isEmbed) {\n      toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n    } // Inject the player wrapper\n\n\n    if (this.isVideo) {\n      // Create the wrapper div\n      this.elements.wrapper = createElement('div', {\n        class: this.config.classNames.video\n      }); // Wrap the video in a container\n\n      wrap(this.media, this.elements.wrapper); // Faux poster container\n\n      this.elements.poster = createElement('div', {\n        class: this.config.classNames.poster\n      });\n      this.elements.wrapper.appendChild(this.elements.poster);\n    }\n\n    if (this.isHTML5) {\n      html5.extend.call(this);\n    } else if (this.isYouTube) {\n      youtube.setup.call(this);\n    } else if (this.isVimeo) {\n      vimeo.setup.call(this);\n    }\n  }\n};\n\nvar Ads =\n/*#__PURE__*/\nfunction () {\n  /**\n   * Ads constructor.\n   * @param {Object} player\n   * @return {Ads}\n   */\n  function Ads(player) {\n    var _this = this;\n\n    _classCallCheck(this, Ads);\n\n    this.player = player;\n    this.config = player.config.ads;\n    this.playing = false;\n    this.initialized = false;\n    this.elements = {\n      container: null,\n      displayContainer: null\n    };\n    this.manager = null;\n    this.loader = null;\n    this.cuePoints = null;\n    this.events = {};\n    this.safetyTimer = null;\n    this.countdownTimer = null; // Setup a promise to resolve when the IMA manager is ready\n\n    this.managerPromise = new Promise(function (resolve, reject) {\n      // The ad is loaded and ready\n      _this.on('loaded', resolve); // Ads failed\n\n\n      _this.on('error', reject);\n    });\n    this.load();\n  }\n\n  _createClass(Ads, [{\n    key: \""load\"",\n\n    /**\n     * Load the IMA SDK\n     */\n    value: function load() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        // Check if the Google IMA3 SDK is loaded or load it ourselves\n        if (!is$1.object(window.google) || !is$1.object(window.google.ima)) {\n          loadScript(this.player.config.urls.googleIMA.sdk).then(function () {\n            _this2.ready();\n          }).catch(function () {\n            // Script failed to load or is blocked\n            _this2.trigger('error', new Error('Google IMA SDK failed to load'));\n          });\n        } else {\n          this.ready();\n        }\n      }\n    }\n    /**\n     * Get the ads instance ready\n     */\n\n  }, {\n    key: \""ready\"",\n    value: function ready() {\n      var _this3 = this;\n\n      // Start ticking our safety timer. If the whole advertisement\n      // thing doesn't resolve within our set time; we bail\n      this.startSafetyTimer(12000, 'ready()'); // Clear the safety timer\n\n      this.managerPromise.then(function () {\n        _this3.clearSafetyTimer('onAdsManagerLoaded()');\n      }); // Set listeners on the Plyr instance\n\n      this.listeners(); // Setup the IMA SDK\n\n      this.setupIMA();\n    } // Build the tag URL\n\n  }, {\n    key: \""setupIMA\"",\n\n    /**\n     * In order for the SDK to display ads for our video, we need to tell it where to put them,\n     * so here we define our ad container. This div is set up to render on top of the video player.\n     * Using the code below, we tell the SDK to render ads within that div. We also provide a\n     * handle to the content video player - the SDK will poll the current time of our player to\n     * properly place mid-rolls. After we create the ad display container, we initialize it. On\n     * mobile devices, this initialization is done as the result of a user action.\n     */\n    value: function setupIMA() {\n      // Create the container for our advertisements\n      this.elements.container = createElement('div', {\n        class: this.player.config.classNames.ads\n      });\n      this.player.elements.container.appendChild(this.elements.container); // So we can run VPAID2\n\n      google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED); // Set language\n\n      google.ima.settings.setLocale(this.player.config.ads.language); // Set playback for iOS10+\n\n      google.ima.settings.setDisableCustomPlaybackForIOS10Plus(this.player.config.playsinline); // We assume the adContainer is the video container of the plyr element that will house the ads\n\n      this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media); // Request video ads to be pre-loaded\n\n      this.requestAds();\n    }\n    /**\n     * Request advertisements\n     */\n\n  }, {\n    key: \""requestAds\"",\n    value: function requestAds() {\n      var _this4 = this;\n\n      var container = this.player.elements.container;\n\n      try {\n        // Create ads loader\n        this.loader = new google.ima.AdsLoader(this.elements.displayContainer); // Listen and respond to ads loaded and error events\n\n        this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, function (event) {\n          return _this4.onAdsManagerLoaded(event);\n        }, false);\n        this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (error) {\n          return _this4.onAdError(error);\n        }, false); // Request video ads\n\n        var request = new google.ima.AdsRequest();\n        request.adTagUrl = this.tagUrl; // Specify the linear and nonlinear slot sizes. This helps the SDK\n        // to select the correct creative if multiple are returned\n\n        request.linearAdSlotWidth = container.offsetWidth;\n        request.linearAdSlotHeight = container.offsetHeight;\n        request.nonLinearAdSlotWidth = container.offsetWidth;\n        request.nonLinearAdSlotHeight = container.offsetHeight; // We only overlay ads as we only support video.\n\n        request.forceNonLinearFullSlot = false; // Mute based on current state\n\n        request.setAdWillPlayMuted(!this.player.muted);\n        this.loader.requestAds(request);\n      } catch (e) {\n        this.onAdError(e);\n      }\n    }\n    /**\n     * Update the ad countdown\n     * @param {Boolean} start\n     */\n\n  }, {\n    key: \""pollCountdown\"",\n    value: function pollCountdown() {\n      var _this5 = this;\n\n      var start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!start) {\n        clearInterval(this.countdownTimer);\n        this.elements.container.removeAttribute('data-badge-text');\n        return;\n      }\n\n      var update = function update() {\n        var time = formatTime(Math.max(_this5.manager.getRemainingTime(), 0));\n        var label = \""\"".concat(i18n.get('advertisement', _this5.player.config), \"" - \"").concat(time);\n\n        _this5.elements.container.setAttribute('data-badge-text', label);\n      };\n\n      this.countdownTimer = setInterval(update, 100);\n    }\n    /**\n     * This method is called whenever the ads are ready inside the AdDisplayContainer\n     * @param {Event} adsManagerLoadedEvent\n     */\n\n  }, {\n    key: \""onAdsManagerLoaded\"",\n    value: function onAdsManagerLoaded(event) {\n      var _this6 = this;\n\n      // Load could occur after a source change (race condition)\n      if (!this.enabled) {\n        return;\n      } // Get the ads manager\n\n\n      var settings = new google.ima.AdsRenderingSettings(); // Tell the SDK to save and restore content video state on our behalf\n\n      settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n      settings.enablePreloading = true; // The SDK is polling currentTime on the contentPlayback. And needs a duration\n      // so it can determine when to start the mid- and post-roll\n\n      this.manager = event.getAdsManager(this.player, settings); // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n\n      this.cuePoints = this.manager.getCuePoints(); // Set volume to match player\n\n      this.manager.setVolume(this.player.volume); // Add listeners to the required events\n      // Advertisement error events\n\n      this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (error) {\n        return _this6.onAdError(error);\n      }); // Advertisement regular events\n\n      Object.keys(google.ima.AdEvent.Type).forEach(function (type) {\n        _this6.manager.addEventListener(google.ima.AdEvent.Type[type], function (event) {\n          return _this6.onAdEvent(event);\n        });\n      }); // Resolve our adsManager\n\n      this.trigger('loaded');\n    }\n  }, {\n    key: \""addCuePoints\"",\n    value: function addCuePoints() {\n      var _this7 = this;\n\n      // Add advertisement cue's within the time line if available\n      if (!is$1.empty(this.cuePoints)) {\n        this.cuePoints.forEach(function (cuePoint) {\n          if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < _this7.player.duration) {\n            var seekElement = _this7.player.elements.progress;\n\n            if (is$1.element(seekElement)) {\n              var cuePercentage = 100 / _this7.player.duration * cuePoint;\n              var cue = createElement('span', {\n                class: _this7.player.config.classNames.cues\n              });\n              cue.style.left = \""\"".concat(cuePercentage.toString(), \""%\"");\n              seekElement.appendChild(cue);\n            }\n          }\n        });\n      }\n    }\n    /**\n     * This is where all the event handling takes place. Retrieve the ad from the event. Some\n     * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n     * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n     * @param {Event} event\n     */\n\n  }, {\n    key: \""onAdEvent\"",\n    value: function onAdEvent(event) {\n      var _this8 = this;\n\n      var container = this.player.elements.container; // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n      // don't have ad object associated\n\n      var ad = event.getAd();\n      var adData = event.getAdData(); // Proxy event\n\n      var dispatchEvent = function dispatchEvent(type) {\n        var event = \""ads\"".concat(type.replace(/_/g, '').toLowerCase());\n        triggerEvent.call(_this8.player, _this8.player.media, event);\n      };\n\n      switch (event.type) {\n        case google.ima.AdEvent.Type.LOADED:\n          // This is the first event sent for an ad - it is possible to determine whether the\n          // ad is a video ad or an overlay\n          this.trigger('loaded'); // Bubble event\n\n          dispatchEvent(event.type); // Start countdown\n\n          this.pollCountdown(true);\n\n          if (!ad.isLinear()) {\n            // Position AdDisplayContainer correctly for overlay\n            ad.width = container.offsetWidth;\n            ad.height = container.offsetHeight;\n          } // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n          // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n\n\n          break;\n\n        case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n          // All ads for the current videos are done. We can now request new advertisements\n          // in case the video is re-played\n          // Fire event\n          dispatchEvent(event.type); // TODO: Example for what happens when a next video in a playlist would be loaded.\n          // So here we load a new video when all ads are done.\n          // Then we load new ads within a new adsManager. When the video\n          // Is started - after - the ads are loaded, then we get ads.\n          // You can also easily test cancelling and reloading by running\n          // player.ads.cancel() and player.ads.play from the console I guess.\n          // this.player.source = {\n          //     type: 'video',\n          //     title: 'View From A Blue Moon',\n          //     sources: [{\n          //         src:\n          // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n          // 'video/mp4', }], poster:\n          // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n          // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n          // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n          // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n          // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n          // };\n          // TODO: So there is still this thing where a video should only be allowed to start\n          // playing when the IMA SDK is ready or has failed\n\n          this.loadAds();\n          break;\n\n        case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n          // This event indicates the ad has started - the video player can adjust the UI,\n          // for example display a pause button and remaining time. Fired when content should\n          // be paused. This usually happens right before an ad is about to cover the content\n          dispatchEvent(event.type);\n          this.pauseContent();\n          break;\n\n        case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n          // This event indicates the ad has finished - the video player can perform\n          // appropriate UI actions, such as removing the timer for remaining time detection.\n          // Fired when content should be resumed. This usually happens when an ad finishes\n          // or collapses\n          dispatchEvent(event.type);\n          this.pollCountdown();\n          this.resumeContent();\n          break;\n\n        case google.ima.AdEvent.Type.STARTED:\n        case google.ima.AdEvent.Type.MIDPOINT:\n        case google.ima.AdEvent.Type.COMPLETE:\n        case google.ima.AdEvent.Type.IMPRESSION:\n        case google.ima.AdEvent.Type.CLICK:\n          dispatchEvent(event.type);\n          break;\n\n        case google.ima.AdEvent.Type.LOG:\n          if (adData.adError) {\n            this.player.debug.warn(\""Non-fatal ad error: \"".concat(adData.adError.getMessage()));\n          }\n\n          break;\n\n        default:\n          break;\n      }\n    }\n    /**\n     * Any ad error handling comes through here\n     * @param {Event} event\n     */\n\n  }, {\n    key: \""onAdError\"",\n    value: function onAdError(event) {\n      this.cancel();\n      this.player.debug.warn('Ads error', event);\n    }\n    /**\n     * Setup hooks for Plyr and window events. This ensures\n     * the mid- and post-roll launch at the correct time. And\n     * resize the advertisement when the player resizes\n     */\n\n  }, {\n    key: \""listeners\"",\n    value: function listeners() {\n      var _this9 = this;\n\n      var container = this.player.elements.container;\n      var time;\n      this.player.on('canplay', function () {\n        _this9.addCuePoints();\n      });\n      this.player.on('ended', function () {\n        _this9.loader.contentComplete();\n      });\n      this.player.on('timeupdate', function () {\n        time = _this9.player.currentTime;\n      });\n      this.player.on('seeked', function () {\n        var seekedTime = _this9.player.currentTime;\n\n        if (is$1.empty(_this9.cuePoints)) {\n          return;\n        }\n\n        _this9.cuePoints.forEach(function (cuePoint, index) {\n          if (time < cuePoint && cuePoint < seekedTime) {\n            _this9.manager.discardAdBreak();\n\n            _this9.cuePoints.splice(index, 1);\n          }\n        });\n      }); // Listen to the resizing of the window. And resize ad accordingly\n      // TODO: eventually implement ResizeObserver\n\n      window.addEventListener('resize', function () {\n        if (_this9.manager) {\n          _this9.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n        }\n      });\n    }\n    /**\n     * Initialize the adsManager and start playing advertisements\n     */\n\n  }, {\n    key: \""play\"",\n    value: function play() {\n      var _this10 = this;\n\n      var container = this.player.elements.container;\n\n      if (!this.managerPromise) {\n        this.resumeContent();\n      } // Play the requested advertisement whenever the adsManager is ready\n\n\n      this.managerPromise.then(function () {\n        // Initialize the container. Must be done via a user action on mobile devices\n        _this10.elements.displayContainer.initialize();\n\n        try {\n          if (!_this10.initialized) {\n            // Initialize the ads manager. Ad rules playlist will start at this time\n            _this10.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will\n            // start at this time; the call will be ignored for ad rules\n\n\n            _this10.manager.start();\n          }\n\n          _this10.initialized = true;\n        } catch (adError) {\n          // An error may be thrown if there was a problem with the\n          // VAST response\n          _this10.onAdError(adError);\n        }\n      }).catch(function () {});\n    }\n    /**\n     * Resume our video\n     */\n\n  }, {\n    key: \""resumeContent\"",\n    value: function resumeContent() {\n      // Hide the advertisement container\n      this.elements.container.style.zIndex = ''; // Ad is stopped\n\n      this.playing = false; // Play video\n\n      this.player.media.play();\n    }\n    /**\n     * Pause our video\n     */\n\n  }, {\n    key: \""pauseContent\"",\n    value: function pauseContent() {\n      // Show the advertisement container\n      this.elements.container.style.zIndex = 3; // Ad is playing\n\n      this.playing = true; // Pause our video.\n\n      this.player.media.pause();\n    }\n    /**\n     * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n     * allowed to call new ads based on google policies, as they interpret this as an accidental\n     * video requests. https://developers.google.com/interactive-\n     * media-ads/docs/sdks/android/faq#8\n     */\n\n  }, {\n    key: \""cancel\"",\n    value: function cancel() {\n      // Pause our video\n      if (this.initialized) {\n        this.resumeContent();\n      } // Tell our instance that we're done for now\n\n\n      this.trigger('error'); // Re-create our adsManager\n\n      this.loadAds();\n    }\n    /**\n     * Re-create our adsManager\n     */\n\n  }, {\n    key: \""loadAds\"",\n    value: function loadAds() {\n      var _this11 = this;\n\n      // Tell our adsManager to go bye bye\n      this.managerPromise.then(function () {\n        // Destroy our adsManager\n        if (_this11.manager) {\n          _this11.manager.destroy();\n        } // Re-set our adsManager promises\n\n\n        _this11.managerPromise = new Promise(function (resolve) {\n          _this11.on('loaded', resolve);\n\n          _this11.player.debug.log(_this11.manager);\n        }); // Now request some new advertisements\n\n        _this11.requestAds();\n      }).catch(function () {});\n    }\n    /**\n     * Handles callbacks after an ad event was invoked\n     * @param {String} event - Event type\n     */\n\n  }, {\n    key: \""trigger\"",\n    value: function trigger(event) {\n      var _this12 = this;\n\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      var handlers = this.events[event];\n\n      if (is$1.array(handlers)) {\n        handlers.forEach(function (handler) {\n          if (is$1.function(handler)) {\n            handler.apply(_this12, args);\n          }\n        });\n      }\n    }\n    /**\n     * Add event listeners\n     * @param {String} event - Event type\n     * @param {Function} callback - Callback for when event occurs\n     * @return {Ads}\n     */\n\n  }, {\n    key: \""on\"",\n    value: function on(event, callback) {\n      if (!is$1.array(this.events[event])) {\n        this.events[event] = [];\n      }\n\n      this.events[event].push(callback);\n      return this;\n    }\n    /**\n     * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n     * The advertisement has 12 seconds to get its things together. We stop this timer when the\n     * advertisement is playing, or when a user action is required to start, then we clear the\n     * timer on ad ready\n     * @param {Number} time\n     * @param {String} from\n     */\n\n  }, {\n    key: \""startSafetyTimer\"",\n    value: function startSafetyTimer(time, from) {\n      var _this13 = this;\n\n      this.player.debug.log(\""Safety timer invoked from: \"".concat(from));\n      this.safetyTimer = setTimeout(function () {\n        _this13.cancel();\n\n        _this13.clearSafetyTimer('startSafetyTimer()');\n      }, time);\n    }\n    /**\n     * Clear our safety timer(s)\n     * @param {String} from\n     */\n\n  }, {\n    key: \""clearSafetyTimer\"",\n    value: function clearSafetyTimer(from) {\n      if (!is$1.nullOrUndefined(this.safetyTimer)) {\n        this.player.debug.log(\""Safety timer cleared from: \"".concat(from));\n        clearTimeout(this.safetyTimer);\n        this.safetyTimer = null;\n      }\n    }\n  }, {\n    key: \""enabled\"",\n    get: function get() {\n      var config = this.config;\n      return this.player.isHTML5 && this.player.isVideo && config.enabled && (!is$1.empty(config.publisherId) || is$1.url(config.tagUrl));\n    }\n  }, {\n    key: \""tagUrl\"",\n    get: function get() {\n      var config = this.config;\n\n      if (is$1.url(config.tagUrl)) {\n        return config.tagUrl;\n      }\n\n      var params = {\n        AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n        AV_CHANNELID: '5a0458dc28a06145e4519d21',\n        AV_URL: window.location.hostname,\n        cb: Date.now(),\n        AV_WIDTH: 640,\n        AV_HEIGHT: 480,\n        AV_CDIM2: this.publisherId\n      };\n      var base = 'https://go.aniview.com/api/adserver6/vast/';\n      return \""\"".concat(base, \""?\"").concat(buildUrlParams(params));\n    }\n  }]);\n\n  return Ads;\n}();\n\nvar parseVtt = function parseVtt(vttDataString) {\n  var processedList = [];\n  var frames = vttDataString.split(/\\r\\n\\r\\n|\\n\\n|\\r\\r/);\n  frames.forEach(function (frame) {\n    var result = {};\n    var lines = frame.split(/\\r\\n|\\n|\\r/);\n    lines.forEach(function (line) {\n      if (!is$1.number(result.startTime)) {\n        // The line with start and end times on it is the first line of interest\n        var matchTimes = line.match(/([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})( ?--> ?)([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})/); // Note that this currently ignores caption formatting directives that are optionally on the end of this line - fine for non-captions VTT\n\n        if (matchTimes) {\n          result.startTime = Number(matchTimes[1] || 0) * 60 * 60 + Number(matchTimes[2]) * 60 + Number(matchTimes[3]) + Number(\""0.\"".concat(matchTimes[4]));\n          result.endTime = Number(matchTimes[6] || 0) * 60 * 60 + Number(matchTimes[7]) * 60 + Number(matchTimes[8]) + Number(\""0.\"".concat(matchTimes[9]));\n        }\n      } else if (!is$1.empty(line.trim()) && is$1.empty(result.text)) {\n        // If we already have the startTime, then we're definitely up to the text line(s)\n        var lineSplit = line.trim().split('#xywh=');\n\n        var _lineSplit = _slicedToArray(lineSplit, 1);\n\n        result.text = _lineSplit[0];\n\n        // If there's content in lineSplit[1], then we have sprites. If not, then it's just one frame per image\n        if (lineSplit[1]) {\n          var _lineSplit$1$split = lineSplit[1].split(',');\n\n          var _lineSplit$1$split2 = _slicedToArray(_lineSplit$1$split, 4);\n\n          result.x = _lineSplit$1$split2[0];\n          result.y = _lineSplit$1$split2[1];\n          result.w = _lineSplit$1$split2[2];\n          result.h = _lineSplit$1$split2[3];\n        }\n      }\n    });\n\n    if (result.text) {\n      processedList.push(result);\n    }\n  });\n  return processedList;\n};\n/**\n * Preview thumbnails for seek hover and scrubbing\n * Seeking: Hover over the seek bar (desktop only): shows a small preview container above the seek bar\n * Scrubbing: Click and drag the seek bar (desktop and mobile): shows the preview image over the entire video, as if the video is scrubbing at very high speed\n *\n * Notes:\n * - Thumbs are set via JS settings on Plyr init, not HTML5 'track' property. Using the track property would be a bit gross, because it doesn't support custom 'kinds'. kind=metadata might be used for something else, and we want to allow multiple thumbnails tracks. Tracks must have a unique combination of 'kind' and 'label'. We would have to do something like kind=metadata,label=thumbnails1 / kind=metadata,label=thumbnails2. Square peg, round hole\n * - VTT info: the image URL is relative to the VTT, not the current document. But if the url starts with a slash, it will naturally be relative to the current domain. https://support.jwplayer.com/articles/how-to-add-preview-thumbnails\n * - This implementation uses multiple separate img elements. Other implementations use background-image on one element. This would be nice and simple, but Firefox and Safari have flickering issues with replacing backgrounds of larger images. It seems that YouTube perhaps only avoids this because they don't have the option for high-res previews (even the fullscreen ones, when mousedown/seeking). Images appear over the top of each other, and previous ones are discarded once the new ones have been rendered\n */\n\n\nvar PreviewThumbnails =\n/*#__PURE__*/\nfunction () {\n  /**\n   * PreviewThumbnails constructor.\n   * @param {Plyr} player\n   * @return {PreviewThumbnails}\n   */\n  function PreviewThumbnails(player) {\n    _classCallCheck(this, PreviewThumbnails);\n\n    this.player = player;\n    this.thumbnails = [];\n    this.loaded = false;\n    this.lastMouseMoveTime = Date.now();\n    this.mouseDown = false;\n    this.loadedImages = [];\n    this.elements = {\n      thumb: {},\n      scrubbing: {}\n    };\n    this.load();\n  }\n\n  _createClass(PreviewThumbnails, [{\n    key: \""load\"",\n    value: function load() {\n      var _this = this;\n\n      // Togglethe regular seek tooltip\n      if (this.player.elements.display.seekTooltip) {\n        this.player.elements.display.seekTooltip.hidden = this.enabled;\n      }\n\n      if (!this.enabled) {\n        return;\n      }\n\n      this.getThumbnails().then(function () {\n        // Render DOM elements\n        _this.render(); // Check to see if thumb container size was specified manually in CSS\n\n\n        _this.determineContainerAutoSizing();\n\n        _this.loaded = true;\n      });\n    } // Download VTT files and parse them\n\n  }, {\n    key: \""getThumbnails\"",\n    value: function getThumbnails() {\n      var _this2 = this;\n\n      return new Promise(function (resolve) {\n        var src = _this2.player.config.previewThumbnails.src;\n\n        if (is$1.empty(src)) {\n          throw new Error('Missing previewThumbnails.src config attribute');\n        } // If string, convert into single-element list\n\n\n        var urls = is$1.string(src) ? [src] : src; // Loop through each src URL. Download and process the VTT file, storing the resulting data in this.thumbnails\n\n        var promises = urls.map(function (u) {\n          return _this2.getThumbnail(u);\n        });\n        Promise.all(promises).then(function () {\n          // Sort smallest to biggest (e.g., [120p, 480p, 1080p])\n          _this2.thumbnails.sort(function (x, y) {\n            return x.height - y.height;\n          });\n\n          _this2.player.debug.log('Preview thumbnails', _this2.thumbnails);\n\n          resolve();\n        });\n      });\n    } // Process individual VTT file\n\n  }, {\n    key: \""getThumbnail\"",\n    value: function getThumbnail(url) {\n      var _this3 = this;\n\n      return new Promise(function (resolve) {\n        fetch(url).then(function (response) {\n          var thumbnail = {\n            frames: parseVtt(response),\n            height: null,\n            urlPrefix: ''\n          }; // If the URLs don't start with '/', then we need to set their relative path to be the location of the VTT file\n          // If the URLs do start with '/', then they obviously don't need a prefix, so it will remain blank\n          // If the thumbnail URLs start with with none of '/', 'http://' or 'https://', then we need to set their relative path to be the location of the VTT file\n\n          if (!thumbnail.frames[0].text.startsWith('/') && !thumbnail.frames[0].text.startsWith('http://') && !thumbnail.frames[0].text.startsWith('https://')) {\n            thumbnail.urlPrefix = url.substring(0, url.lastIndexOf('/') + 1);\n          } // Download the first frame, so that we can determine/set the height of this thumbnailsDef\n\n\n          var tempImage = new Image();\n\n          tempImage.onload = function () {\n            thumbnail.height = tempImage.naturalHeight;\n            thumbnail.width = tempImage.naturalWidth;\n\n            _this3.thumbnails.push(thumbnail);\n\n            resolve();\n          };\n\n          tempImage.src = thumbnail.urlPrefix + thumbnail.frames[0].text;\n        });\n      });\n    }\n  }, {\n    key: \""startMove\"",\n    value: function startMove(event) {\n      if (!this.loaded) {\n        return;\n      }\n\n      if (!is$1.event(event) || !['touchmove', 'mousemove'].includes(event.type)) {\n        return;\n      } // Wait until media has a duration\n\n\n      if (!this.player.media.duration) {\n        return;\n      }\n\n      if (event.type === 'touchmove') {\n        // Calculate seek hover position as approx video seconds\n        this.seekTime = this.player.media.duration * (this.player.elements.inputs.seek.value / 100);\n      } else {\n        // Calculate seek hover position as approx video seconds\n        var clientRect = this.player.elements.progress.getBoundingClientRect();\n        var percentage = 100 / clientRect.width * (event.pageX - clientRect.left);\n        this.seekTime = this.player.media.duration * (percentage / 100);\n\n        if (this.seekTime < 0) {\n          // The mousemove fires for 10+px out to the left\n          this.seekTime = 0;\n        }\n\n        if (this.seekTime > this.player.media.duration - 1) {\n          // Took 1 second off the duration for safety, because different players can disagree on the real duration of a video\n          this.seekTime = this.player.media.duration - 1;\n        }\n\n        this.mousePosX = event.pageX; // Set time text inside image container\n\n        this.elements.thumb.time.innerText = formatTime(this.seekTime);\n      } // Download and show image\n\n\n      this.showImageAtCurrentTime();\n    }\n  }, {\n    key: \""endMove\"",\n    value: function endMove() {\n      this.toggleThumbContainer(false, true);\n    }\n  }, {\n    key: \""startScrubbing\"",\n    value: function startScrubbing(event) {\n      // Only act on left mouse button (0), or touch device (event.button is false)\n      if (event.button === false || event.button === 0) {\n        this.mouseDown = true; // Wait until media has a duration\n\n        if (this.player.media.duration) {\n          this.toggleScrubbingContainer(true);\n          this.toggleThumbContainer(false, true); // Download and show image\n\n          this.showImageAtCurrentTime();\n        }\n      }\n    }\n  }, {\n    key: \""endScrubbing\"",\n    value: function endScrubbing() {\n      var _this4 = this;\n\n      this.mouseDown = false; // Hide scrubbing preview. But wait until the video has successfully seeked before hiding the scrubbing preview\n\n      if (Math.ceil(this.lastTime) === Math.ceil(this.player.media.currentTime)) {\n        // The video was already seeked/loaded at the chosen time - hide immediately\n        this.toggleScrubbingContainer(false);\n      } else {\n        // The video hasn't seeked yet. Wait for that\n        once.call(this.player, this.player.media, 'timeupdate', function () {\n          // Re-check mousedown - we might have already started scrubbing again\n          if (!_this4.mouseDown) {\n            _this4.toggleScrubbingContainer(false);\n          }\n        });\n      }\n    }\n    /**\n     * Setup hooks for Plyr and window events\n     */\n\n  }, {\n    key: \""listeners\"",\n    value: function listeners() {\n      var _this5 = this;\n\n      // Hide thumbnail preview - on mouse click, mouse leave (in listeners.js for now), and video play/seek. All four are required, e.g., for buffering\n      this.player.on('play', function () {\n        _this5.toggleThumbContainer(false, true);\n      });\n      this.player.on('seeked', function () {\n        _this5.toggleThumbContainer(false);\n      });\n      this.player.on('timeupdate', function () {\n        _this5.lastTime = _this5.player.media.currentTime;\n      });\n    }\n    /**\n     * Create HTML elements for image containers\n     */\n\n  }, {\n    key: \""render\"",\n    value: function render() {\n      // Create HTML element: plyr__preview-thumbnail-container\n      this.elements.thumb.container = createElement('div', {\n        class: this.player.config.classNames.previewThumbnails.thumbContainer\n      }); // Wrapper for the image for styling\n\n      this.elements.thumb.imageContainer = createElement('div', {\n        class: this.player.config.classNames.previewThumbnails.imageContainer\n      });\n      this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer); // Create HTML element, parent+span: time text (e.g., 01:32:00)\n\n      var timeContainer = createElement('div', {\n        class: this.player.config.classNames.previewThumbnails.timeContainer\n      });\n      this.elements.thumb.time = createElement('span', {}, '00:00');\n      timeContainer.appendChild(this.elements.thumb.time);\n      this.elements.thumb.container.appendChild(timeContainer); // Inject the whole thumb\n\n      this.player.elements.progress.appendChild(this.elements.thumb.container); // Create HTML element: plyr__preview-scrubbing-container\n\n      this.elements.scrubbing.container = createElement('div', {\n        class: this.player.config.classNames.previewThumbnails.scrubbingContainer\n      });\n      this.player.elements.wrapper.appendChild(this.elements.scrubbing.container);\n    }\n  }, {\n    key: \""showImageAtCurrentTime\"",\n    value: function showImageAtCurrentTime() {\n      var _this6 = this;\n\n      if (this.mouseDown) {\n        this.setScrubbingContainerSize();\n      } else {\n        this.setThumbContainerSizeAndPos();\n      } // Find the desired thumbnail index\n      // TODO: Handle a video longer than the thumbs where thumbNum is null\n\n\n      var thumbNum = this.thumbnails[0].frames.findIndex(function (frame) {\n        return _this6.seekTime >= frame.startTime && _this6.seekTime <= frame.endTime;\n      });\n      var hasThumb = thumbNum >= 0;\n      var qualityIndex = 0; // Show the thumb container if we're not scrubbing\n\n      if (!this.mouseDown) {\n        this.toggleThumbContainer(hasThumb);\n      } // No matching thumb found\n\n\n      if (!hasThumb) {\n        return;\n      } // Check to see if we've already downloaded higher quality versions of this image\n\n\n      this.thumbnails.forEach(function (thumbnail, index) {\n        if (_this6.loadedImages.includes(thumbnail.frames[thumbNum].text)) {\n          qualityIndex = index;\n        }\n      }); // Only proceed if either thumbnum or thumbfilename has changed\n\n      if (thumbNum !== this.showingThumb) {\n        this.showingThumb = thumbNum;\n        this.loadImage(qualityIndex);\n      }\n    } // Show the image that's currently specified in this.showingThumb\n\n  }, {\n    key: \""loadImage\"",\n    value: function loadImage() {\n      var _this7 = this;\n\n      var qualityIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var thumbNum = this.showingThumb;\n      var thumbnail = this.thumbnails[qualityIndex];\n      var urlPrefix = thumbnail.urlPrefix;\n      var frame = thumbnail.frames[thumbNum];\n      var thumbFilename = thumbnail.frames[thumbNum].text;\n      var thumbUrl = urlPrefix + thumbFilename;\n\n      if (!this.currentImageElement || this.currentImageElement.dataset.filename !== thumbFilename) {\n        // If we're already loading a previous image, remove its onload handler - we don't want it to load after this one\n        // Only do this if not using sprites. Without sprites we really want to show as many images as possible, as a best-effort\n        if (this.loadingImage && this.usingSprites) {\n          this.loadingImage.onload = null;\n        } // We're building and adding a new image. In other implementations of similar functionality (YouTube), background image\n        // is instead used. But this causes issues with larger images in Firefox and Safari - switching between background\n        // images causes a flicker. Putting a new image over the top does not\n\n\n        var previewImage = new Image();\n        previewImage.src = thumbUrl;\n        previewImage.dataset.index = thumbNum;\n        previewImage.dataset.filename = thumbFilename;\n        this.showingThumbFilename = thumbFilename;\n        this.player.debug.log(\""Loading image: \"".concat(thumbUrl)); // For some reason, passing the named function directly causes it to execute immediately. So I've wrapped it in an anonymous function...\n\n        previewImage.onload = function () {\n          return _this7.showImage(previewImage, frame, qualityIndex, thumbNum, thumbFilename, true);\n        };\n\n        this.loadingImage = previewImage;\n        this.removeOldImages(previewImage);\n      } else {\n        // Update the existing image\n        this.showImage(this.currentImageElement, frame, qualityIndex, thumbNum, thumbFilename, false);\n        this.currentImageElement.dataset.index = thumbNum;\n        this.removeOldImages(this.currentImageElement);\n      }\n    }\n  }, {\n    key: \""showImage\"",\n    value: function showImage(previewImage, frame, qualityIndex, thumbNum, thumbFilename) {\n      var newImage = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n      this.player.debug.log(\""Showing thumb: \"".concat(thumbFilename, \"". num: \"").concat(thumbNum, \"". qual: \"").concat(qualityIndex, \"". newimg: \"").concat(newImage));\n      this.setImageSizeAndOffset(previewImage, frame);\n\n      if (newImage) {\n        this.currentImageContainer.appendChild(previewImage);\n        this.currentImageElement = previewImage;\n\n        if (!this.loadedImages.includes(thumbFilename)) {\n          this.loadedImages.push(thumbFilename);\n        }\n      } // Preload images before and after the current one\n      // Show higher quality of the same frame\n      // Each step here has a short time delay, and only continues if still hovering/seeking the same spot. This is to protect slow connections from overloading\n\n\n      this.preloadNearby(thumbNum, true).then(this.preloadNearby(thumbNum, false)).then(this.getHigherQuality(qualityIndex, previewImage, frame, thumbFilename));\n    } // Remove all preview images that aren't the designated current image\n\n  }, {\n    key: \""removeOldImages\"",\n    value: function removeOldImages(currentImage) {\n      var _this8 = this;\n\n      // Get a list of all images, convert it from a DOM list to an array\n      Array.from(this.currentImageContainer.children).forEach(function (image) {\n        if (image.tagName.toLowerCase() !== 'img') {\n          return;\n        }\n\n        var removeDelay = _this8.usingSprites ? 500 : 1000;\n\n        if (image.dataset.index !== currentImage.dataset.index && !image.dataset.deleting) {\n          // Wait 200ms, as the new image can take some time to show on certain browsers (even though it was downloaded before showing). This will prevent flicker, and show some generosity towards slower clients\n          // First set attribute 'deleting' to prevent multi-handling of this on repeat firing of this function\n          image.dataset.deleting = true; // This has to be set before the timeout - to prevent issues switching between hover and scrub\n\n          var currentImageContainer = _this8.currentImageContainer;\n          setTimeout(function () {\n            currentImageContainer.removeChild(image);\n\n            _this8.player.debug.log(\""Removing thumb: \"".concat(image.dataset.filename));\n          }, removeDelay);\n        }\n      });\n    } // Preload images before and after the current one. Only if the user is still hovering/seeking the same frame\n    // This will only preload the lowest quality\n\n  }, {\n    key: \""preloadNearby\"",\n    value: function preloadNearby(thumbNum) {\n      var _this9 = this;\n\n      var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return new Promise(function (resolve) {\n        setTimeout(function () {\n          var oldThumbFilename = _this9.thumbnails[0].frames[thumbNum].text;\n\n          if (_this9.showingThumbFilename === oldThumbFilename) {\n            // Find the nearest thumbs with different filenames. Sometimes it'll be the next index, but in the case of sprites, it might be 100+ away\n            var thumbnailsClone;\n\n            if (forward) {\n              thumbnailsClone = _this9.thumbnails[0].frames.slice(thumbNum);\n            } else {\n              thumbnailsClone = _this9.thumbnails[0].frames.slice(0, thumbNum).reverse();\n            }\n\n            var foundOne = false;\n            thumbnailsClone.forEach(function (frame) {\n              var newThumbFilename = frame.text;\n\n              if (newThumbFilename !== oldThumbFilename) {\n                // Found one with a different filename. Make sure it hasn't already been loaded on this page visit\n                if (!_this9.loadedImages.includes(newThumbFilename)) {\n                  foundOne = true;\n\n                  _this9.player.debug.log(\""Preloading thumb filename: \"".concat(newThumbFilename));\n\n                  var urlPrefix = _this9.thumbnails[0].urlPrefix;\n                  var thumbURL = urlPrefix + newThumbFilename;\n                  var previewImage = new Image();\n                  previewImage.src = thumbURL;\n\n                  previewImage.onload = function () {\n                    _this9.player.debug.log(\""Preloaded thumb filename: \"".concat(newThumbFilename));\n\n                    if (!_this9.loadedImages.includes(newThumbFilename)) _this9.loadedImages.push(newThumbFilename); // We don't resolve until the thumb is loaded\n\n                    resolve();\n                  };\n                }\n              }\n            }); // If there are none to preload then we want to resolve immediately\n\n            if (!foundOne) {\n              resolve();\n            }\n          }\n        }, 300);\n      });\n    } // If user has been hovering current image for half a second, look for a higher quality one\n\n  }, {\n    key: \""getHigherQuality\"",\n    value: function getHigherQuality(currentQualityIndex, previewImage, frame, thumbFilename) {\n      var _this10 = this;\n\n      if (currentQualityIndex < this.thumbnails.length - 1) {\n        // Only use the higher quality version if it's going to look any better - if the current thumb is of a lower pixel density than the thumbnail container\n        var previewImageHeight = previewImage.naturalHeight;\n\n        if (this.usingSprites) {\n          previewImageHeight = frame.h;\n        }\n\n        if (previewImageHeight < this.thumbContainerHeight) {\n          // Recurse back to the loadImage function - show a higher quality one, but only if the viewer is on this frame for a while\n          setTimeout(function () {\n            // Make sure the mouse hasn't already moved on and started hovering at another image\n            if (_this10.showingThumbFilename === thumbFilename) {\n              _this10.player.debug.log(\""Showing higher quality thumb for: \"".concat(thumbFilename));\n\n              _this10.loadImage(currentQualityIndex + 1);\n            }\n          }, 300);\n        }\n      }\n    }\n  }, {\n    key: \""toggleThumbContainer\"",\n    value: function toggleThumbContainer() {\n      var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var clearShowing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var className = this.player.config.classNames.previewThumbnails.thumbContainerShown;\n      this.elements.thumb.container.classList.toggle(className, toggle);\n\n      if (!toggle && clearShowing) {\n        this.showingThumb = null;\n        this.showingThumbFilename = null;\n      }\n    }\n  }, {\n    key: \""toggleScrubbingContainer\"",\n    value: function toggleScrubbingContainer() {\n      var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var className = this.player.config.classNames.previewThumbnails.scrubbingContainerShown;\n      this.elements.scrubbing.container.classList.toggle(className, toggle);\n\n      if (!toggle) {\n        this.showingThumb = null;\n        this.showingThumbFilename = null;\n      }\n    }\n  }, {\n    key: \""determineContainerAutoSizing\"",\n    value: function determineContainerAutoSizing() {\n      if (this.elements.thumb.imageContainer.clientHeight > 20) {\n        // This will prevent auto sizing in this.setThumbContainerSizeAndPos()\n        this.sizeSpecifiedInCSS = true;\n      }\n    } // Set the size to be about a quarter of the size of video. Unless option dynamicSize === false, in which case it needs to be set in CSS\n\n  }, {\n    key: \""setThumbContainerSizeAndPos\"",\n    value: function setThumbContainerSizeAndPos() {\n      if (!this.sizeSpecifiedInCSS) {\n        var thumbWidth = Math.floor(this.thumbContainerHeight * this.thumbAspectRatio);\n        this.elements.thumb.imageContainer.style.height = \""\"".concat(this.thumbContainerHeight, \""px\"");\n        this.elements.thumb.imageContainer.style.width = \""\"".concat(thumbWidth, \""px\"");\n      }\n\n      this.setThumbContainerPos();\n    }\n  }, {\n    key: \""setThumbContainerPos\"",\n    value: function setThumbContainerPos() {\n      var seekbarRect = this.player.elements.progress.getBoundingClientRect();\n      var plyrRect = this.player.elements.container.getBoundingClientRect();\n      var container = this.elements.thumb.container; // Find the lowest and highest desired left-position, so we don't slide out the side of the video container\n\n      var minVal = plyrRect.left - seekbarRect.left + 10;\n      var maxVal = plyrRect.right - seekbarRect.left - container.clientWidth - 10; // Set preview container position to: mousepos, minus seekbar.left, minus half of previewContainer.clientWidth\n\n      var previewPos = this.mousePosX - seekbarRect.left - container.clientWidth / 2;\n\n      if (previewPos < minVal) {\n        previewPos = minVal;\n      }\n\n      if (previewPos > maxVal) {\n        previewPos = maxVal;\n      }\n\n      container.style.left = \""\"".concat(previewPos, \""px\"");\n    } // Can't use 100% width, in case the video is a different aspect ratio to the video container\n\n  }, {\n    key: \""setScrubbingContainerSize\"",\n    value: function setScrubbingContainerSize() {\n      this.elements.scrubbing.container.style.width = \""\"".concat(this.player.media.clientWidth, \""px\""); // Can't use media.clientHeight - html5 video goes big and does black bars above and below\n\n      this.elements.scrubbing.container.style.height = \""\"".concat(this.player.media.clientWidth / this.thumbAspectRatio, \""px\"");\n    } // Sprites need to be offset to the correct location\n\n  }, {\n    key: \""setImageSizeAndOffset\"",\n    value: function setImageSizeAndOffset(previewImage, frame) {\n      if (!this.usingSprites) {\n        return;\n      } // Find difference between height and preview container height\n\n\n      var multiplier = this.thumbContainerHeight / frame.h;\n      previewImage.style.height = \""\"".concat(Math.floor(previewImage.naturalHeight * multiplier), \""px\"");\n      previewImage.style.width = \""\"".concat(Math.floor(previewImage.naturalWidth * multiplier), \""px\"");\n      previewImage.style.left = \""-\"".concat(frame.x * multiplier, \""px\"");\n      previewImage.style.top = \""-\"".concat(frame.y * multiplier, \""px\"");\n    }\n  }, {\n    key: \""enabled\"",\n    get: function get() {\n      return this.player.isHTML5 && this.player.isVideo && this.player.config.previewThumbnails.enabled;\n    }\n  }, {\n    key: \""currentImageContainer\"",\n    get: function get() {\n      if (this.mouseDown) {\n        return this.elements.scrubbing.container;\n      }\n\n      return this.elements.thumb.imageContainer;\n    }\n  }, {\n    key: \""usingSprites\"",\n    get: function get() {\n      return Object.keys(this.thumbnails[0].frames[0]).includes('w');\n    }\n  }, {\n    key: \""thumbAspectRatio\"",\n    get: function get() {\n      if (this.usingSprites) {\n        return this.thumbnails[0].frames[0].w / this.thumbnails[0].frames[0].h;\n      }\n\n      return this.thumbnails[0].width / this.thumbnails[0].height;\n    }\n  }, {\n    key: \""thumbContainerHeight\"",\n    get: function get() {\n      if (this.mouseDown) {\n        // Can't use media.clientHeight - HTML5 video goes big and does black bars above and below\n        return Math.floor(this.player.media.clientWidth / this.thumbAspectRatio);\n      }\n\n      return Math.floor(this.player.media.clientWidth / this.thumbAspectRatio / 4);\n    }\n  }, {\n    key: \""currentImageElement\"",\n    get: function get() {\n      if (this.mouseDown) {\n        return this.currentScrubbingImageElement;\n      }\n\n      return this.currentThumbnailImageElement;\n    },\n    set: function set(element) {\n      if (this.mouseDown) {\n        this.currentScrubbingImageElement = element;\n      } else {\n        this.currentThumbnailImageElement = element;\n      }\n    }\n  }]);\n\n  return PreviewThumbnails;\n}();\n\nvar source = {\n  // Add elements to HTML5 media (source, tracks, etc)\n  insertElements: function insertElements(type, attributes) {\n    var _this = this;\n\n    if (is$1.string(attributes)) {\n      insertElement(type, this.media, {\n        src: attributes\n      });\n    } else if (is$1.array(attributes)) {\n      attributes.forEach(function (attribute) {\n        insertElement(type, _this.media, attribute);\n      });\n    }\n  },\n  // Update source\n  // Sources are not checked for support so be careful\n  change: function change(input) {\n    var _this2 = this;\n\n    if (!getDeep(input, 'sources.length')) {\n      this.debug.warn('Invalid source format');\n      return;\n    } // Cancel current network requests\n\n\n    html5.cancelRequests.call(this); // Destroy instance and re-setup\n\n    this.destroy.call(this, function () {\n      // Reset quality options\n      _this2.options.quality = []; // Remove elements\n\n      removeElement(_this2.media);\n      _this2.media = null; // Reset class name\n\n      if (is$1.element(_this2.elements.container)) {\n        _this2.elements.container.removeAttribute('class');\n      } // Set the type and provider\n\n\n      var sources = input.sources,\n          type = input.type;\n\n      var _sources = _slicedToArray(sources, 1),\n          _sources$ = _sources[0],\n          _sources$$provider = _sources$.provider,\n          provider = _sources$$provider === void 0 ? providers.html5 : _sources$$provider,\n          src = _sources$.src;\n\n      var tagName = provider === 'html5' ? type : 'div';\n      var attributes = provider === 'html5' ? {} : {\n        src: src\n      };\n      Object.assign(_this2, {\n        provider: provider,\n        type: type,\n        // Check for support\n        supported: support.check(type, provider, _this2.config.playsinline),\n        // Create new element\n        media: createElement(tagName, attributes)\n      }); // Inject the new element\n\n      _this2.elements.container.appendChild(_this2.media); // Autoplay the new source?\n\n\n      if (is$1.boolean(input.autoplay)) {\n        _this2.config.autoplay = input.autoplay;\n      } // Set attributes for audio and video\n\n\n      if (_this2.isHTML5) {\n        if (_this2.config.crossorigin) {\n          _this2.media.setAttribute('crossorigin', '');\n        }\n\n        if (_this2.config.autoplay) {\n          _this2.media.setAttribute('autoplay', '');\n        }\n\n        if (!is$1.empty(input.poster)) {\n          _this2.poster = input.poster;\n        }\n\n        if (_this2.config.loop.active) {\n          _this2.media.setAttribute('loop', '');\n        }\n\n        if (_this2.config.muted) {\n          _this2.media.setAttribute('muted', '');\n        }\n\n        if (_this2.config.playsinline) {\n          _this2.media.setAttribute('playsinline', '');\n        }\n      } // Restore class hook\n\n\n      ui.addStyleHook.call(_this2); // Set new sources for html5\n\n      if (_this2.isHTML5) {\n        source.insertElements.call(_this2, 'source', sources);\n      } // Set video title\n\n\n      _this2.config.title = input.title; // Set up from scratch\n\n      media.setup.call(_this2); // HTML5 stuff\n\n      if (_this2.isHTML5) {\n        // Setup captions\n        if (Object.keys(input).includes('tracks')) {\n          source.insertElements.call(_this2, 'track', input.tracks);\n        }\n      } // If HTML5 or embed but not fully supported, setupInterface and call ready now\n\n\n      if (_this2.isHTML5 || _this2.isEmbed && !_this2.supported.ui) {\n        // Setup interface\n        ui.build.call(_this2);\n      } // Load HTML5 sources\n\n\n      if (_this2.isHTML5) {\n        _this2.media.load();\n      } // Reload thumbnails\n\n\n      if (_this2.previewThumbnails) {\n        _this2.previewThumbnails.load();\n      } // Update the fullscreen support\n\n\n      _this2.fullscreen.update();\n    }, true);\n  }\n};\n\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n// Plyr instance\n\nvar Plyr =\n/*#__PURE__*/\nfunction () {\n  function Plyr(target, options) {\n    var _this = this;\n\n    _classCallCheck(this, Plyr);\n\n    this.timers = {}; // State\n\n    this.ready = false;\n    this.loading = false;\n    this.failed = false; // Touch device\n\n    this.touch = support.touch; // Set the media element\n\n    this.media = target; // String selector passed\n\n    if (is$1.string(this.media)) {\n      this.media = document.querySelectorAll(this.media);\n    } // jQuery, NodeList or Array passed, use first element\n\n\n    if (window.jQuery && this.media instanceof jQuery || is$1.nodeList(this.media) || is$1.array(this.media)) {\n      // eslint-disable-next-line\n      this.media = this.media[0];\n    } // Set config\n\n\n    this.config = extend({}, defaults$1, Plyr.defaults, options || {}, function () {\n      try {\n        return JSON.parse(_this.media.getAttribute('data-plyr-config'));\n      } catch (e) {\n        return {};\n      }\n    }()); // Elements cache\n\n    this.elements = {\n      container: null,\n      captions: null,\n      buttons: {},\n      display: {},\n      progress: {},\n      inputs: {},\n      settings: {\n        popup: null,\n        menu: null,\n        panels: {},\n        buttons: {}\n      }\n    }; // Captions\n\n    this.captions = {\n      active: null,\n      currentTrack: -1,\n      meta: new WeakMap()\n    }; // Fullscreen\n\n    this.fullscreen = {\n      active: false\n    }; // Options\n\n    this.options = {\n      speed: [],\n      quality: []\n    }; // Debugging\n    // TODO: move to globals\n\n    this.debug = new Console(this.config.debug); // Log config options and support\n\n    this.debug.log('Config', this.config);\n    this.debug.log('Support', support); // We need an element to setup\n\n    if (is$1.nullOrUndefined(this.media) || !is$1.element(this.media)) {\n      this.debug.error('Setup failed: no suitable element passed');\n      return;\n    } // Bail if the element is initialized\n\n\n    if (this.media.plyr) {\n      this.debug.warn('Target already setup');\n      return;\n    } // Bail if not enabled\n\n\n    if (!this.config.enabled) {\n      this.debug.error('Setup failed: disabled by config');\n      return;\n    } // Bail if disabled or no basic support\n    // You may want to disable certain UAs etc\n\n\n    if (!support.check().api) {\n      this.debug.error('Setup failed: no support');\n      return;\n    } // Cache original element state for .destroy()\n\n\n    var clone = this.media.cloneNode(true);\n    clone.autoplay = false;\n    this.elements.original = clone; // Set media type based on tag or data attribute\n    // Supported: video, audio, vimeo, youtube\n\n    var type = this.media.tagName.toLowerCase(); // Embed properties\n\n    var iframe = null;\n    var url = null; // Different setup based on type\n\n    switch (type) {\n      case 'div':\n        // Find the frame\n        iframe = this.media.querySelector('iframe'); // <iframe> type\n\n        if (is$1.element(iframe)) {\n          // Detect provider\n          url = parseUrl(iframe.getAttribute('src'));\n          this.provider = getProviderByUrl(url.toString()); // Rework elements\n\n          this.elements.container = this.media;\n          this.media = iframe; // Reset classname\n\n          this.elements.container.className = ''; // Get attributes from URL and set config\n\n          if (url.search.length) {\n            var truthy = ['1', 'true'];\n\n            if (truthy.includes(url.searchParams.get('autoplay'))) {\n              this.config.autoplay = true;\n            }\n\n            if (truthy.includes(url.searchParams.get('loop'))) {\n              this.config.loop.active = true;\n            } // TODO: replace fullscreen.iosNative with this playsinline config option\n            // YouTube requires the playsinline in the URL\n\n\n            if (this.isYouTube) {\n              this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n              this.config.youtube.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n            } else {\n              this.config.playsinline = true;\n            }\n          }\n        } else {\n          // <div> with attributes\n          this.provider = this.media.getAttribute(this.config.attributes.embed.provider); // Remove attribute\n\n          this.media.removeAttribute(this.config.attributes.embed.provider);\n        } // Unsupported or missing provider\n\n\n        if (is$1.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n          this.debug.error('Setup failed: Invalid provider');\n          return;\n        } // Audio will come later for external providers\n\n\n        this.type = types.video;\n        break;\n\n      case 'video':\n      case 'audio':\n        this.type = type;\n        this.provider = providers.html5; // Get config from attributes\n\n        if (this.media.hasAttribute('crossorigin')) {\n          this.config.crossorigin = true;\n        }\n\n        if (this.media.hasAttribute('autoplay')) {\n          this.config.autoplay = true;\n        }\n\n        if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {\n          this.config.playsinline = true;\n        }\n\n        if (this.media.hasAttribute('muted')) {\n          this.config.muted = true;\n        }\n\n        if (this.media.hasAttribute('loop')) {\n          this.config.loop.active = true;\n        }\n\n        break;\n\n      default:\n        this.debug.error('Setup failed: unsupported type');\n        return;\n    } // Check for support again but with type\n\n\n    this.supported = support.check(this.type, this.provider, this.config.playsinline); // If no support for even API, bail\n\n    if (!this.supported.api) {\n      this.debug.error('Setup failed: no support');\n      return;\n    }\n\n    this.eventListeners = []; // Create listeners\n\n    this.listeners = new Listeners(this); // Setup local storage for user settings\n\n    this.storage = new Storage(this); // Store reference\n\n    this.media.plyr = this; // Wrap media\n\n    if (!is$1.element(this.elements.container)) {\n      this.elements.container = createElement('div', {\n        tabindex: 0\n      });\n      wrap(this.media, this.elements.container);\n    } // Add style hook\n\n\n    ui.addStyleHook.call(this); // Setup media\n\n    media.setup.call(this); // Listen for events if debugging\n\n    if (this.config.debug) {\n      on.call(this, this.elements.container, this.config.events.join(' '), function (event) {\n        _this.debug.log(\""event: \"".concat(event.type));\n      });\n    } // Setup interface\n    // If embed but not fully supported, build interface now to avoid flash of controls\n\n\n    if (this.isHTML5 || this.isEmbed && !this.supported.ui) {\n      ui.build.call(this);\n    } // Container listeners\n\n\n    this.listeners.container(); // Global listeners\n\n    this.listeners.global(); // Setup fullscreen\n\n    this.fullscreen = new Fullscreen(this); // Setup ads if provided\n\n    if (this.config.ads.enabled) {\n      this.ads = new Ads(this);\n    } // Autoplay if required\n\n\n    if (this.isHTML5 && this.config.autoplay) {\n      setTimeout(function () {\n        return _this.play();\n      }, 10);\n    } // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n\n\n    this.lastSeekTime = 0; // Setup preview thumbnails if enabled\n\n    if (this.config.previewThumbnails.enabled) {\n      this.previewThumbnails = new PreviewThumbnails(this);\n    }\n  } // ---------------------------------------\n  // API\n  // ---------------------------------------\n\n  /**\n   * Types and provider helpers\n   */\n\n\n  _createClass(Plyr, [{\n    key: \""play\"",\n\n    /**\n     * Play the media, or play the advertisement (if they are not blocked)\n     */\n    value: function play() {\n      var _this2 = this;\n\n      if (!is$1.function(this.media.play)) {\n        return null;\n      } // Intecept play with ads\n\n\n      if (this.ads && this.ads.enabled) {\n        this.ads.managerPromise.then(function () {\n          return _this2.ads.play();\n        }).catch(function () {\n          return _this2.media.play();\n        });\n      } // Return the promise (for HTML5)\n\n\n      return this.media.play();\n    }\n    /**\n     * Pause the media\n     */\n\n  }, {\n    key: \""pause\"",\n    value: function pause() {\n      if (!this.playing || !is$1.function(this.media.pause)) {\n        return;\n      }\n\n      this.media.pause();\n    }\n    /**\n     * Get playing state\n     */\n\n  }, {\n    key: \""togglePlay\"",\n\n    /**\n     * Toggle playback based on current status\n     * @param {Boolean} input\n     */\n    value: function togglePlay(input) {\n      // Toggle based on current state if nothing passed\n      var toggle = is$1.boolean(input) ? input : !this.playing;\n\n      if (toggle) {\n        this.play();\n      } else {\n        this.pause();\n      }\n    }\n    /**\n     * Stop playback\n     */\n\n  }, {\n    key: \""stop\"",\n    value: function stop() {\n      if (this.isHTML5) {\n        this.pause();\n        this.restart();\n      } else if (is$1.function(this.media.stop)) {\n        this.media.stop();\n      }\n    }\n    /**\n     * Restart playback\n     */\n\n  }, {\n    key: \""restart\"",\n    value: function restart() {\n      this.currentTime = 0;\n    }\n    /**\n     * Rewind\n     * @param {Number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n     */\n\n  }, {\n    key: \""rewind\"",\n    value: function rewind(seekTime) {\n      this.currentTime = this.currentTime - (is$1.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n    /**\n     * Fast forward\n     * @param {Number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n     */\n\n  }, {\n    key: \""forward\"",\n    value: function forward(seekTime) {\n      this.currentTime = this.currentTime + (is$1.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n    /**\n     * Seek to a time\n     * @param {Number} input - where to seek to in seconds. Defaults to 0 (the start)\n     */\n\n  }, {\n    key: \""increaseVolume\"",\n\n    /**\n     * Increase volume\n     * @param {Boolean} step - How much to decrease by (between 0 and 1)\n     */\n    value: function increaseVolume(step) {\n      var volume = this.media.muted ? 0 : this.volume;\n      this.volume = volume + (is$1.number(step) ? step : 0);\n    }\n    /**\n     * Decrease volume\n     * @param {Boolean} step - How much to decrease by (between 0 and 1)\n     */\n\n  }, {\n    key: \""decreaseVolume\"",\n    value: function decreaseVolume(step) {\n      this.increaseVolume(-step);\n    }\n    /**\n     * Set muted state\n     * @param {Boolean} mute\n     */\n\n  }, {\n    key: \""toggleCaptions\"",\n\n    /**\n     * Toggle captions\n     * @param {Boolean} input - Whether to enable captions\n     */\n    value: function toggleCaptions(input) {\n      captions.toggle.call(this, input, false);\n    }\n    /**\n     * Set the caption track by index\n     * @param {Number} - Caption index\n     */\n\n  }, {\n    key: \""airplay\"",\n\n    /**\n     * Trigger the airplay dialog\n     * TODO: update player with state, support, enabled\n     */\n    value: function airplay() {\n      // Show dialog if supported\n      if (support.airplay) {\n        this.media.webkitShowPlaybackTargetPicker();\n      }\n    }\n    /**\n     * Toggle the player controls\n     * @param {Boolean} [toggle] - Whether to show the controls\n     */\n\n  }, {\n    key: \""toggleControls\"",\n    value: function toggleControls(toggle) {\n      // Don't toggle if missing UI support or if it's audio\n      if (this.supported.ui && !this.isAudio) {\n        // Get state before change\n        var isHidden = hasClass(this.elements.container, this.config.classNames.hideControls); // Negate the argument if not undefined since adding the class to hides the controls\n\n        var force = typeof toggle === 'undefined' ? undefined : !toggle; // Apply and get updated state\n\n        var hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force); // Close menu\n\n        if (hiding && this.config.controls.includes('settings') && !is$1.empty(this.config.settings)) {\n          controls.toggleMenu.call(this, false);\n        } // Trigger event on change\n\n\n        if (hiding !== isHidden) {\n          var eventName = hiding ? 'controlshidden' : 'controlsshown';\n          triggerEvent.call(this, this.media, eventName);\n        }\n\n        return !hiding;\n      }\n\n      return false;\n    }\n    /**\n     * Add event listeners\n     * @param {String} event - Event type\n     * @param {Function} callback - Callback for when event occurs\n     */\n\n  }, {\n    key: \""on\"",\n    value: function on$1(event, callback) {\n      on.call(this, this.elements.container, event, callback);\n    }\n    /**\n     * Add event listeners once\n     * @param {String} event - Event type\n     * @param {Function} callback - Callback for when event occurs\n     */\n\n  }, {\n    key: \""once\"",\n    value: function once$1(event, callback) {\n      once.call(this, this.elements.container, event, callback);\n    }\n    /**\n     * Remove event listeners\n     * @param {String} event - Event type\n     * @param {Function} callback - Callback for when event occurs\n     */\n\n  }, {\n    key: \""off\"",\n    value: function off$1(event, callback) {\n      off(this.elements.container, event, callback);\n    }\n    /**\n     * Destroy an instance\n     * Event listeners are removed when elements are removed\n     * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n     * @param {Function} callback - Callback for when destroy is complete\n     * @param {Boolean} soft - Whether it's a soft destroy (for source changes etc)\n     */\n\n  }, {\n    key: \""destroy\"",\n    value: function destroy(callback) {\n      var _this3 = this;\n\n      var soft = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (!this.ready) {\n        return;\n      }\n\n      var done = function done() {\n        // Reset overflow (incase destroyed while in fullscreen)\n        document.body.style.overflow = ''; // GC for embed\n\n        _this3.embed = null; // If it's a soft destroy, make minimal changes\n\n        if (soft) {\n          if (Object.keys(_this3.elements).length) {\n            // Remove elements\n            removeElement(_this3.elements.buttons.play);\n            removeElement(_this3.elements.captions);\n            removeElement(_this3.elements.controls);\n            removeElement(_this3.elements.wrapper); // Clear for GC\n\n            _this3.elements.buttons.play = null;\n            _this3.elements.captions = null;\n            _this3.elements.controls = null;\n            _this3.elements.wrapper = null;\n          } // Callback\n\n\n          if (is$1.function(callback)) {\n            callback();\n          }\n        } else {\n          // Unbind listeners\n          unbindListeners.call(_this3); // Replace the container with the original element provided\n\n          replaceElement(_this3.elements.original, _this3.elements.container); // Event\n\n          triggerEvent.call(_this3, _this3.elements.original, 'destroyed', true); // Callback\n\n          if (is$1.function(callback)) {\n            callback.call(_this3.elements.original);\n          } // Reset state\n\n\n          _this3.ready = false; // Clear for garbage collection\n\n          setTimeout(function () {\n            _this3.elements = null;\n            _this3.media = null;\n          }, 200);\n        }\n      }; // Stop playback\n\n\n      this.stop(); // Clear timeouts\n\n      clearTimeout(this.timers.loading);\n      clearTimeout(this.timers.controls);\n      clearTimeout(this.timers.resized); // Provider specific stuff\n\n      if (this.isHTML5) {\n        // Restore native video controls\n        ui.toggleNativeControls.call(this, true); // Clean up\n\n        done();\n      } else if (this.isYouTube) {\n        // Clear timers\n        clearInterval(this.timers.buffering);\n        clearInterval(this.timers.playing); // Destroy YouTube API\n\n        if (this.embed !== null && is$1.function(this.embed.destroy)) {\n          this.embed.destroy();\n        } // Clean up\n\n\n        done();\n      } else if (this.isVimeo) {\n        // Destroy Vimeo API\n        // then clean up (wait, to prevent postmessage errors)\n        if (this.embed !== null) {\n          this.embed.unload().then(done);\n        } // Vimeo does not always return\n\n\n        setTimeout(done, 200);\n      }\n    }\n    /**\n     * Check for support for a mime type (HTML5 only)\n     * @param {String} type - Mime type\n     */\n\n  }, {\n    key: \""supports\"",\n    value: function supports(type) {\n      return support.mime.call(this, type);\n    }\n    /**\n     * Check for support\n     * @param {String} type - Player type (audio/video)\n     * @param {String} provider - Provider (html5/youtube/vimeo)\n     * @param {Boolean} inline - Where player has `playsinline` sttribute\n     */\n\n  }, {\n    key: \""isHTML5\"",\n    get: function get() {\n      return Boolean(this.provider === providers.html5);\n    }\n  }, {\n    key: \""isEmbed\"",\n    get: function get() {\n      return Boolean(this.isYouTube || this.isVimeo);\n    }\n  }, {\n    key: \""isYouTube\"",\n    get: function get() {\n      return Boolean(this.provider === providers.youtube);\n    }\n  }, {\n    key: \""isVimeo\"",\n    get: function get() {\n      return Boolean(this.provider === providers.vimeo);\n    }\n  }, {\n    key: \""isVideo\"",\n    get: function get() {\n      return Boolean(this.type === types.video);\n    }\n  }, {\n    key: \""isAudio\"",\n    get: function get() {\n      return Boolean(this.type === types.audio);\n    }\n  }, {\n    key: \""playing\"",\n    get: function get() {\n      return Boolean(this.ready && !this.paused && !this.ended);\n    }\n    /**\n     * Get paused state\n     */\n\n  }, {\n    key: \""paused\"",\n    get: function get() {\n      return Boolean(this.media.paused);\n    }\n    /**\n     * Get stopped state\n     */\n\n  }, {\n    key: \""stopped\"",\n    get: function get() {\n      return Boolean(this.paused && this.currentTime === 0);\n    }\n    /**\n     * Get ended state\n     */\n\n  }, {\n    key: \""ended\"",\n    get: function get() {\n      return Boolean(this.media.ended);\n    }\n  }, {\n    key: \""currentTime\"",\n    set: function set(input) {\n      // Bail if media duration isn't available yet\n      if (!this.duration) {\n        return;\n      } // Validate input\n\n\n      var inputIsValid = is$1.number(input) && input > 0; // Set\n\n      this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0; // Logging\n\n      this.debug.log(\""Seeking to \"".concat(this.currentTime, \"" seconds\""));\n    }\n    /**\n     * Get current time\n     */\n    ,\n    get: function get() {\n      return Number(this.media.currentTime);\n    }\n    /**\n     * Get buffered\n     */\n\n  }, {\n    key: \""buffered\"",\n    get: function get() {\n      var buffered = this.media.buffered; // YouTube / Vimeo return a float between 0-1\n\n      if (is$1.number(buffered)) {\n        return buffered;\n      } // HTML5\n      // TODO: Handle buffered chunks of the media\n      // (i.e. seek to another section buffers only that section)\n\n\n      if (buffered && buffered.length && this.duration > 0) {\n        return buffered.end(0) / this.duration;\n      }\n\n      return 0;\n    }\n    /**\n     * Get seeking status\n     */\n\n  }, {\n    key: \""seeking\"",\n    get: function get() {\n      return Boolean(this.media.seeking);\n    }\n    /**\n     * Get the duration of the current media\n     */\n\n  }, {\n    key: \""duration\"",\n    get: function get() {\n      // Faux duration set via config\n      var fauxDuration = parseFloat(this.config.duration); // Media duration can be NaN or Infinity before the media has loaded\n\n      var realDuration = (this.media || {}).duration;\n      var duration = !is$1.number(realDuration) || realDuration === Infinity ? 0 : realDuration; // If config duration is funky, use regular duration\n\n      return fauxDuration || duration;\n    }\n    /**\n     * Set the player volume\n     * @param {Number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n     */\n\n  }, {\n    key: \""volume\"",\n    set: function set(value) {\n      var volume = value;\n      var max = 1;\n      var min = 0;\n\n      if (is$1.string(volume)) {\n        volume = Number(volume);\n      } // Load volume from storage if no value specified\n\n\n      if (!is$1.number(volume)) {\n        volume = this.storage.get('volume');\n      } // Use config if all else fails\n\n\n      if (!is$1.number(volume)) {\n        volume = this.config.volume;\n      } // Maximum is volumeMax\n\n\n      if (volume > max) {\n        volume = max;\n      } // Minimum is volumeMin\n\n\n      if (volume < min) {\n        volume = min;\n      } // Update config\n\n\n      this.config.volume = volume; // Set the player volume\n\n      this.media.volume = volume; // If muted, and we're increasing volume manually, reset muted state\n\n      if (!is$1.empty(value) && this.muted && volume > 0) {\n        this.muted = false;\n      }\n    }\n    /**\n     * Get the current player volume\n     */\n    ,\n    get: function get() {\n      return Number(this.media.volume);\n    }\n  }, {\n    key: \""muted\"",\n    set: function set(mute) {\n      var toggle = mute; // Load muted state from storage\n\n      if (!is$1.boolean(toggle)) {\n        toggle = this.storage.get('muted');\n      } // Use config if all else fails\n\n\n      if (!is$1.boolean(toggle)) {\n        toggle = this.config.muted;\n      } // Update config\n\n\n      this.config.muted = toggle; // Set mute on the player\n\n      this.media.muted = toggle;\n    }\n    /**\n     * Get current muted state\n     */\n    ,\n    get: function get() {\n      return Boolean(this.media.muted);\n    }\n    /**\n     * Check if the media has audio\n     */\n\n  }, {\n    key: \""hasAudio\"",\n    get: function get() {\n      // Assume yes for all non HTML5 (as we can't tell...)\n      if (!this.isHTML5) {\n        return true;\n      }\n\n      if (this.isAudio) {\n        return true;\n      } // Get audio tracks\n\n\n      return Boolean(this.media.mozHasAudio) || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n    }\n    /**\n     * Set playback speed\n     * @param {Number} speed - the speed of playback (0.5-2.0)\n     */\n\n  }, {\n    key: \""speed\"",\n    set: function set(input) {\n      var speed = null;\n\n      if (is$1.number(input)) {\n        speed = input;\n      }\n\n      if (!is$1.number(speed)) {\n        speed = this.storage.get('speed');\n      }\n\n      if (!is$1.number(speed)) {\n        speed = this.config.speed.selected;\n      } // Set min/max\n\n\n      if (speed < 0.1) {\n        speed = 0.1;\n      }\n\n      if (speed > 2.0) {\n        speed = 2.0;\n      }\n\n      if (!this.config.speed.options.includes(speed)) {\n        this.debug.warn(\""Unsupported speed (\"".concat(speed, \"")\""));\n        return;\n      } // Update config\n\n\n      this.config.speed.selected = speed; // Set media speed\n\n      this.media.playbackRate = speed;\n    }\n    /**\n     * Get current playback speed\n     */\n    ,\n    get: function get() {\n      return Number(this.media.playbackRate);\n    }\n    /**\n     * Set playback quality\n     * Currently HTML5 & YouTube only\n     * @param {Number} input - Quality level\n     */\n\n  }, {\n    key: \""quality\"",\n    set: function set(input) {\n      var config = this.config.quality;\n      var options = this.options.quality;\n\n      if (!options.length) {\n        return;\n      }\n\n      var quality = [!is$1.empty(input) && Number(input), this.storage.get('quality'), config.selected, config.default].find(is$1.number);\n      var updateStorage = true;\n\n      if (!options.includes(quality)) {\n        var value = closest(options, quality);\n        this.debug.warn(\""Unsupported quality option: \"".concat(quality, \"", using \"").concat(value, \"" instead\""));\n        quality = value; // Don't update storage if quality is not supported\n\n        updateStorage = false;\n      } // Update config\n\n\n      config.selected = quality; // Set quality\n\n      this.media.quality = quality; // Save to storage\n\n      if (updateStorage) {\n        this.storage.set({\n          quality: quality\n        });\n      }\n    }\n    /**\n     * Get current quality level\n     */\n    ,\n    get: function get() {\n      return this.media.quality;\n    }\n    /**\n     * Toggle loop\n     * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n     * @param {Boolean} input - Whether to loop or not\n     */\n\n  }, {\n    key: \""loop\"",\n    set: function set(input) {\n      var toggle = is$1.boolean(input) ? input : this.config.loop.active;\n      this.config.loop.active = toggle;\n      this.media.loop = toggle; // Set default to be a true toggle\n\n      /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n       switch (type) {\n          case 'start':\n              if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n                  this.config.loop.end = null;\n              }\n              this.config.loop.start = this.currentTime;\n              // this.config.loop.indicator.start = this.elements.display.played.value;\n              break;\n           case 'end':\n              if (this.config.loop.start >= this.currentTime) {\n                  return this;\n              }\n              this.config.loop.end = this.currentTime;\n              // this.config.loop.indicator.end = this.elements.display.played.value;\n              break;\n           case 'all':\n              this.config.loop.start = 0;\n              this.config.loop.end = this.duration - 2;\n              this.config.loop.indicator.start = 0;\n              this.config.loop.indicator.end = 100;\n              break;\n           case 'toggle':\n              if (this.config.loop.active) {\n                  this.config.loop.start = 0;\n                  this.config.loop.end = null;\n              } else {\n                  this.config.loop.start = 0;\n                  this.config.loop.end = this.duration - 2;\n              }\n              break;\n           default:\n              this.config.loop.start = 0;\n              this.config.loop.end = null;\n              break;\n      } */\n    }\n    /**\n     * Get current loop state\n     */\n    ,\n    get: function get() {\n      return Boolean(this.media.loop);\n    }\n    /**\n     * Set new media source\n     * @param {Object} input - The new source object (see docs)\n     */\n\n  }, {\n    key: \""source\"",\n    set: function set(input) {\n      source.change.call(this, input);\n    }\n    /**\n     * Get current source\n     */\n    ,\n    get: function get() {\n      return this.media.currentSrc;\n    }\n    /**\n     * Get a download URL (either source or custom)\n     */\n\n  }, {\n    key: \""download\"",\n    get: function get() {\n      var download = this.config.urls.download;\n      return is$1.url(download) ? download : this.source;\n    }\n    /**\n     * Set the poster image for a video\n     * @param {String} input - the URL for the new poster image\n     */\n\n  }, {\n    key: \""poster\"",\n    set: function set(input) {\n      if (!this.isVideo) {\n        this.debug.warn('Poster can only be set for video');\n        return;\n      }\n\n      ui.setPoster.call(this, input, false).catch(function () {});\n    }\n    /**\n     * Get the current poster image\n     */\n    ,\n    get: function get() {\n      if (!this.isVideo) {\n        return null;\n      }\n\n      return this.media.getAttribute('poster');\n    }\n    /**\n     * Get the current aspect ratio in use\n     */\n\n  }, {\n    key: \""ratio\"",\n    get: function get() {\n      var ratio = reduceAspectRatio(getAspectRatio.call(this));\n      return is$1.array(ratio) ? ratio.join(':') : ratio;\n    }\n    /**\n     * Set video aspect ratio\n     */\n    ,\n    set: function set(input) {\n      if (!this.isVideo) {\n        this.debug.warn('Aspect ratio can only be set for video');\n        return;\n      }\n\n      if (!is$1.string(input) || !validateRatio(input)) {\n        this.debug.error(\""Invalid aspect ratio specified (\"".concat(input, \"")\""));\n        return;\n      }\n\n      this.config.ratio = input;\n      setAspectRatio.call(this);\n    }\n    /**\n     * Set the autoplay state\n     * @param {Boolean} input - Whether to autoplay or not\n     */\n\n  }, {\n    key: \""autoplay\"",\n    set: function set(input) {\n      var toggle = is$1.boolean(input) ? input : this.config.autoplay;\n      this.config.autoplay = toggle;\n    }\n    /**\n     * Get the current autoplay state\n     */\n    ,\n    get: function get() {\n      return Boolean(this.config.autoplay);\n    }\n  }, {\n    key: \""currentTrack\"",\n    set: function set(input) {\n      captions.set.call(this, input, false);\n    }\n    /**\n     * Get the current caption track index (-1 if disabled)\n     */\n    ,\n    get: function get() {\n      var _this$captions = this.captions,\n          toggled = _this$captions.toggled,\n          currentTrack = _this$captions.currentTrack;\n      return toggled ? currentTrack : -1;\n    }\n    /**\n     * Set the wanted language for captions\n     * Since tracks can be added later it won't update the actual caption track until there is a matching track\n     * @param {String} - Two character ISO language code (e.g. EN, FR, PT, etc)\n     */\n\n  }, {\n    key: \""language\"",\n    set: function set(input) {\n      captions.setLanguage.call(this, input, false);\n    }\n    /**\n     * Get the current track's language\n     */\n    ,\n    get: function get() {\n      return (captions.getCurrentTrack.call(this) || {}).language;\n    }\n    /**\n     * Toggle picture-in-picture playback on WebKit/MacOS\n     * TODO: update player with state, support, enabled\n     * TODO: detect outside changes\n     */\n\n  }, {\n    key: \""pip\"",\n    set: function set(input) {\n      // Bail if no support\n      if (!support.pip) {\n        return;\n      } // Toggle based on current state if not passed\n\n\n      var toggle = is$1.boolean(input) ? input : !this.pip; // Toggle based on current state\n      // Safari\n\n      if (is$1.function(this.media.webkitSetPresentationMode)) {\n        this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n      } // Chrome\n\n\n      if (is$1.function(this.media.requestPictureInPicture)) {\n        if (!this.pip && toggle) {\n          this.media.requestPictureInPicture();\n        } else if (this.pip && !toggle) {\n          document.exitPictureInPicture();\n        }\n      }\n    }\n    /**\n     * Get the current picture-in-picture state\n     */\n    ,\n    get: function get() {\n      if (!support.pip) {\n        return null;\n      } // Safari\n\n\n      if (!is$1.empty(this.media.webkitPresentationMode)) {\n        return this.media.webkitPresentationMode === pip.active;\n      } // Chrome\n\n\n      return this.media === document.pictureInPictureElement;\n    }\n  }], [{\n    key: \""supported\"",\n    value: function supported(type, provider, inline) {\n      return support.check(type, provider, inline);\n    }\n    /**\n     * Load an SVG sprite into the page\n     * @param {String} url - URL for the SVG sprite\n     * @param {String} [id] - Unique ID\n     */\n\n  }, {\n    key: \""loadSprite\"",\n    value: function loadSprite$1(url, id) {\n      return loadSprite(url, id);\n    }\n    /**\n     * Setup multiple instances\n     * @param {*} selector\n     * @param {Object} options\n     */\n\n  }, {\n    key: \""setup\"",\n    value: function setup(selector) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var targets = null;\n\n      if (is$1.string(selector)) {\n        targets = Array.from(document.querySelectorAll(selector));\n      } else if (is$1.nodeList(selector)) {\n        targets = Array.from(selector);\n      } else if (is$1.array(selector)) {\n        targets = selector.filter(is$1.element);\n      }\n\n      if (is$1.empty(targets)) {\n        return null;\n      }\n\n      return targets.map(function (t) {\n        return new Plyr(t, options);\n      });\n    }\n  }]);\n\n  return Plyr;\n}();\n\nPlyr.defaults = cloneDeep(defaults$1);\n\nexport default Plyr;\n"",""const defaults = {\n    addCSS: true, // Add CSS to the element to improve usability (required here or in your CSS!)\n    thumbWidth: 15, // The width of the thumb handle\n    watch: true, // Watch for new elements that match a string target\n};\n\nexport default defaults;"",""// Element matches a selector\nexport function matches(element, selector) {\n    const prototype = { Element };\n\n    function match() {\n        return Array.from(document.querySelectorAll(selector)).includes(this);\n    }\n\n    const matches =\n        prototype.matches ||\n        prototype.webkitMatchesSelector ||\n        prototype.mozMatchesSelector ||\n        prototype.msMatchesSelector ||\n        match;\n\n    return matches.call(element, selector);\n}\n\nexport default {};\n"",""// Trigger event\nexport function trigger(element, type) {\n    if (!element || !type) {\n        return;\n    }\n\n    // Create and dispatch the event\n    const event = new Event(type);\n\n    // Dispatch the event\n    element.dispatchEvent(event);\n}\n\nexport default {};\n"",""// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\n\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isEvent = input => instanceOf(input, Event);\nconst isEmpty = input =>\n    isNullOrUndefined(input) ||\n    ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n    (isObject(input) && !Object.keys(input).length);\n\nexport default {\n    nullOrUndefined: isNullOrUndefined,\n    object: isObject,\n    number: isNumber,\n    string: isString,\n    boolean: isBoolean,\n    function: isFunction,\n    array: isArray,\n    nodeList: isNodeList,\n    element: isElement,\n    event: isEvent,\n    empty: isEmpty,\n};\n"",""// Get the number of decimal places\nexport function getDecimalPlaces(value) {\n    const match = `${value}`.match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\n    if (!match) {\n        return 0;\n    }\n\n    return Math.max(\n        0,\n        // Number of digits right of decimal point.\n        (match[1] ? match[1].length : 0) -\n            // Adjust for scientific notation.\n            (match[2] ? +match[2] : 0),\n    );\n}\n\n// Round to the nearest step\nexport function round(number, step) {\n    if (step < 1) {\n        const places = getDecimalPlaces(step);\n        return parseFloat(number.toFixed(places));\n    }\n    return Math.round(number / step) * step;\n}\n\nexport default {};\n"",""// ==========================================================================\n// rangetouch.js v2.0.0\n// Making <input type=\""range\""> work on touch devices\n// https://github.com/sampotts/rangetouch\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport defaults from './config';\nimport { matches } from './utils/css';\nimport { trigger } from './utils/events';\nimport is from './utils/is';\nimport { round } from './utils/numbers';\n\nclass RangeTouch {\n    /**\n     * Setup a new instance\n     * @param {String|Element} target\n     * @param {Object} options\n     */\n    constructor(target, options) {\n        if (is.element(target)) {\n            // An Element is passed, use it directly\n            this.element = target;\n        } else if (is.string(target)) {\n            // A CSS Selector is passed, fetch it from the DOM\n            this.element = document.querySelector(target);\n        }\n\n        if (!is.element(this.element) || !is.empty(this.element.rangeTouch)) {\n            return;\n        }\n\n        this.config = Object.assign({}, defaults, options);\n\n        this.init();\n    }\n\n    static get enabled() {\n        return 'ontouchstart' in document.documentElement;\n    }\n\n    /**\n     * Setup multiple instances\n     * @param {String|Element|NodeList|Array} target\n     * @param {Object} options\n     */\n    static setup(target, options = {}) {\n        let targets = null;\n\n        if (is.empty(target) || is.string(target)) {\n            targets = Array.from(document.querySelectorAll(is.string(target) ? target : 'input[type=\""range\""]'));\n        } else if (is.element(target)) {\n            targets = [target];\n        } else if (is.nodeList(target)) {\n            targets = Array.from(target);\n        } else if (is.array(target)) {\n            targets = target.filter(is.element);\n        }\n\n        if (is.empty(targets)) {\n            return null;\n        }\n\n        const config = Object.assign({}, defaults, options);\n\n        if (is.string(target) && config.watch) {\n            // Create an observer instance\n            const observer = new MutationObserver(mutations => {\n                Array.from(mutations).forEach(mutation => {\n                    Array.from(mutation.addedNodes).forEach(node => {\n                        if (!is.element(node) || !matches(node, target)) {\n                            return;\n                        }\n\n                        // eslint-disable-next-line no-unused-vars\n                        const range = new RangeTouch(node, config);\n                    });\n                });\n            });\n\n            // Pass in the target node, as well as the observer options\n            observer.observe(document.body, {\n                childList: true,\n                subtree: true,\n            });\n        }\n\n        return targets.map(t => new RangeTouch(t, options));\n    }\n\n    init() {\n        // Bail if not a touch enabled device\n        if (!RangeTouch.enabled) {\n            return;\n        }\n\n        // Add useful CSS\n        if (this.config.addCSS) {\n            // TODO: Restore original values on destroy\n            this.element.style.userSelect = 'none';\n            this.element.style.webKitUserSelect = 'none';\n            this.element.style.touchAction = 'manipulation';\n        }\n\n        this.listeners(true);\n\n        this.element.rangeTouch = this;\n    }\n\n    destroy() {\n        // Bail if not a touch enabled device\n        if (!RangeTouch.enabled) {\n            return;\n        }\n\n        this.listeners(false);\n\n        this.element.rangeTouch = null;\n    }\n\n    listeners(toggle) {\n        const method = toggle ? 'addEventListener' : 'removeEventListener';\n\n        // Listen for events\n        ['touchstart', 'touchmove', 'touchend'].forEach(type => {\n            this.element[method](type, event => this.set(event), false);\n        });\n    }\n\n    /**\n     * Get the value based on touch position\n     * @param {Event} event\n     */\n    get(event) {\n        if (!RangeTouch.enabled || !is.event(event)) {\n            return null;\n        }\n\n        const input = event.target;\n        const touch = event.changedTouches[0];\n        const min = parseFloat(input.getAttribute('min')) || 0;\n        const max = parseFloat(input.getAttribute('max')) || 100;\n        const step = parseFloat(input.getAttribute('step')) || 1;\n        const delta = max - min;\n\n        // Calculate percentage\n        let percent;\n        const clientRect = input.getBoundingClientRect();\n        const thumbWidth = ((100 / clientRect.width) * (this.config.thumbWidth / 2)) / 100;\n\n        // Determine left percentage\n        percent = (100 / clientRect.width) * (touch.clientX - clientRect.left);\n\n        // Don't allow outside bounds\n        if (percent < 0) {\n            percent = 0;\n        } else if (percent > 100) {\n            percent = 100;\n        }\n\n        // Factor in the thumb offset\n        if (percent < 50) {\n            percent -= (100 - percent * 2) * thumbWidth;\n        } else if (percent > 50) {\n            percent += (percent - 50) * 2 * thumbWidth;\n        }\n\n        // Find the closest step to the mouse position\n        return min + round(delta * (percent / 100), step);\n    }\n\n    /**\n     * Update range value based on position\n     * @param {Event} event\n     */\n    set(event) {\n        if (!RangeTouch.enabled || !is.event(event) || event.target.disabled) {\n            return;\n        }\n\n        // Prevent text highlight on iOS\n        event.preventDefault();\n\n        // Set value\n        event.target.value = this.get(event);\n\n        // Trigger event\n        trigger(event.target, event.type === 'touchend' ? 'change' : 'input');\n    }\n}\n\nexport default RangeTouch;\n"",""// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\nconst isPromise = input => instanceOf(input, Promise);\n\nconst isEmpty = input =>\n    isNullOrUndefined(input) ||\n    ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n    (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n    // Accept a URL object\n    if (instanceOf(input, window.URL)) {\n        return true;\n    }\n\n    // Must be string from here\n    if (!isString(input)) {\n        return false;\n    }\n\n    // Add the protocol if required\n    let string = input;\n    if (!input.startsWith('http://') || !input.startsWith('https://')) {\n        string = `http://${input}`;\n    }\n\n    try {\n        return !isEmpty(new URL(string).hostname);\n    } catch (e) {\n        return false;\n    }\n};\n\nexport default {\n    nullOrUndefined: isNullOrUndefined,\n    object: isObject,\n    number: isNumber,\n    string: isString,\n    boolean: isBoolean,\n    function: isFunction,\n    array: isArray,\n    weakMap: isWeakMap,\n    nodeList: isNodeList,\n    element: isElement,\n    textNode: isTextNode,\n    event: isEvent,\n    keyboardEvent: isKeyboardEvent,\n    cue: isCue,\n    track: isTrack,\n    promise: isPromise,\n    url: isUrl,\n    empty: isEmpty,\n};\n"",""// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n    // Test via a getter in the options object to see if the passive property is accessed\n    let supported = false;\n    try {\n        const options = Object.defineProperty({}, 'passive', {\n            get() {\n                supported = true;\n                return null;\n            },\n        });\n        window.addEventListener('test', null, options);\n        window.removeEventListener('test', null, options);\n    } catch (e) {\n        // Do nothing\n    }\n\n    return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n    // Bail if no element, event, or callback\n    if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n        return;\n    }\n\n    // Allow multiple events\n    const events = event.split(' ');\n\n    // Build options\n    // Default to just the capture boolean for browsers with no passive listener support\n    let options = capture;\n\n    // If passive events listeners are supported\n    if (supportsPassiveListeners) {\n        options = {\n            // Whether the listener can be passive (i.e. default never prevented)\n            passive,\n            // Whether the listener is a capturing listener or not\n            capture,\n        };\n    }\n\n    // If a single node is passed, bind the event listener\n    events.forEach(type => {\n        if (this && this.eventListeners && toggle) {\n            // Cache event listener\n            this.eventListeners.push({ element, type, callback, options });\n        }\n\n        element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n    });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n    toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n    toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n    const onceCallback = (...args) => {\n        off(element, events, onceCallback, passive, capture);\n        callback.apply(this, args);\n    };\n\n    toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n    // Bail if no element\n    if (!is.element(element) || is.empty(type)) {\n        return;\n    }\n\n    // Create and dispatch the event\n    const event = new CustomEvent(type, {\n        bubbles,\n        detail: Object.assign({}, detail, {\n            plyr: this,\n        }),\n    });\n\n    // Dispatch the event\n    element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n    if (this && this.eventListeners) {\n        this.eventListeners.forEach(item => {\n            const { element, type, callback, options } = item;\n            element.removeEventListener(type, callback, options);\n        });\n\n        this.eventListeners = [];\n    }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n    return new Promise(resolve =>\n        this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve),\n    ).then(() => {});\n}\n"",""// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function wrap(elements, wrapper) {\n    // Convert `elements` to an array, if necessary.\n    const targets = elements.length ? elements : [elements];\n\n    // Loops backwards to prevent having to clone the wrapper on the\n    // first element (see `child` below).\n    Array.from(targets)\n        .reverse()\n        .forEach((element, index) => {\n            const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n            // Cache the current parent and sibling.\n            const parent = element.parentNode;\n            const sibling = element.nextSibling;\n\n            // Wrap the element (is automatically removed from its current\n            // parent).\n            child.appendChild(element);\n\n            // If the element had a sibling, insert the wrapper before\n            // the sibling to maintain the HTML structure; otherwise, just\n            // append it to the parent.\n            if (sibling) {\n                parent.insertBefore(child, sibling);\n            } else {\n                parent.appendChild(child);\n            }\n        });\n}\n\n// Set attributes\nexport function setAttributes(element, attributes) {\n    if (!is.element(element) || is.empty(attributes)) {\n        return;\n    }\n\n    // Assume null and undefined attributes should be left out,\n    // Setting them would otherwise convert them to \""null\"" and \""undefined\""\n    Object.entries(attributes)\n        .filter(([, value]) => !is.nullOrUndefined(value))\n        .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n    // Create a new <element>\n    const element = document.createElement(type);\n\n    // Set all passed attributes\n    if (is.object(attributes)) {\n        setAttributes(element, attributes);\n    }\n\n    // Add text node\n    if (is.string(text)) {\n        element.innerText = text;\n    }\n\n    // Return built element\n    return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n    if (!is.element(element) || !is.element(target)) {\n        return;\n    }\n\n    target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n    if (!is.element(parent)) {\n        return;\n    }\n\n    parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n    if (is.nodeList(element) || is.array(element)) {\n        Array.from(element).forEach(removeElement);\n        return;\n    }\n\n    if (!is.element(element) || !is.element(element.parentNode)) {\n        return;\n    }\n\n    element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    let { length } = element.childNodes;\n\n    while (length > 0) {\n        element.removeChild(element.lastChild);\n        length -= 1;\n    }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n    if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n        return null;\n    }\n\n    oldChild.parentNode.replaceChild(newChild, oldChild);\n\n    return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function getAttributesFromSelector(sel, existingAttributes) {\n    // For example:\n    // '.test' to { class: 'test' }\n    // '#test' to { id: 'test' }\n    // '[data-test=\""test\""]' to { 'data-test': 'test' }\n\n    if (!is.string(sel) || is.empty(sel)) {\n        return {};\n    }\n\n    const attributes = {};\n    const existing = existingAttributes;\n\n    sel.split(',').forEach(s => {\n        // Remove whitespace\n        const selector = s.trim();\n        const className = selector.replace('.', '');\n        const stripped = selector.replace(/[[\\]]/g, '');\n\n        // Get the parts and value\n        const parts = stripped.split('=');\n        const key = parts[0];\n        const value = parts.length > 1 ? parts[1].replace(/[\""']/g, '') : '';\n\n        // Get the first character\n        const start = selector.charAt(0);\n\n        switch (start) {\n            case '.':\n                // Add to existing classname\n                if (is.object(existing) && is.string(existing.class)) {\n                    existing.class += ` ${className}`;\n                }\n\n                attributes.class = className;\n                break;\n\n            case '#':\n                // ID selector\n                attributes.id = selector.replace('#', '');\n                break;\n\n            case '[':\n                // Attribute selector\n                attributes[key] = value;\n\n                break;\n\n            default:\n                break;\n        }\n    });\n\n    return attributes;\n}\n\n// Toggle hidden\nexport function toggleHidden(element, hidden) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    let hide = hidden;\n\n    if (!is.boolean(hide)) {\n        hide = !element.hidden;\n    }\n\n    if (hide) {\n        element.setAttribute('hidden', '');\n    } else {\n        element.removeAttribute('hidden');\n    }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \""force\"" argument\nexport function toggleClass(element, className, force) {\n    if (is.nodeList(element)) {\n        return Array.from(element).map(e => toggleClass(e, className, force));\n    }\n\n    if (is.element(element)) {\n        let method = 'toggle';\n        if (typeof force !== 'undefined') {\n            method = force ? 'add' : 'remove';\n        }\n\n        element.classList[method](className);\n        return element.classList.contains(className);\n    }\n\n    return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n    return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function matches(element, selector) {\n    const prototype = { Element };\n\n    function match() {\n        return Array.from(document.querySelectorAll(selector)).includes(this);\n    }\n\n    const matches =\n        prototype.matches ||\n        prototype.webkitMatchesSelector ||\n        prototype.mozMatchesSelector ||\n        prototype.msMatchesSelector ||\n        match;\n\n    return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n    return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n    return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    const focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n    const first = focusable[0];\n    const last = focusable[focusable.length - 1];\n\n    const trap = event => {\n        // Bail if not tab key or not fullscreen\n        if (event.key !== 'Tab' || event.keyCode !== 9) {\n            return;\n        }\n\n        // Get the current focused element\n        const focused = document.activeElement;\n\n        if (focused === last && !event.shiftKey) {\n            // Move focus to first element that can be tabbed if Shift isn't used\n            first.focus();\n            event.preventDefault();\n        } else if (focused === first && event.shiftKey) {\n            // Move focus to last element that can be tabbed if Shift is used\n            last.focus();\n            event.preventDefault();\n        }\n    };\n\n    toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    // Set regular focus\n    element.focus({ preventScroll: true });\n\n    // If we want to mimic keyboard focus via tab\n    if (tabFocus) {\n        toggleClass(element, this.config.classNames.tabFocus);\n    }\n}\n"",""// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const transitionEndEvent = (() => {\n    const element = document.createElement('span');\n\n    const events = {\n        WebkitTransition: 'webkitTransitionEnd',\n        MozTransition: 'transitionend',\n        OTransition: 'oTransitionEnd otransitionend',\n        transition: 'transitionend',\n    };\n\n    const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n    return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n    setTimeout(() => {\n        try {\n            toggleHidden(element, true);\n            element.offsetHeight; // eslint-disable-line\n            toggleHidden(element, false);\n        } catch (e) {\n            // Do nothing\n        }\n    }, 0);\n}\n"",""// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\n    isIE: /* @cc_on!@ */ false || !!document.documentMode,\n    isEdge: window.navigator.userAgent.includes('Edge'),\n    isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n    isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n    isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n};\n\nexport default browser;\n"",""// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n    'audio/ogg': 'vorbis',\n    'audio/wav': '1',\n    'video/webm': 'vp8, vorbis',\n    'video/mp4': 'avc1.42E01E, mp4a.40.2',\n    'video/ogg': 'theora',\n};\n\n// Check for feature support\nconst support = {\n    // Basic support\n    audio: 'canPlayType' in document.createElement('audio'),\n    video: 'canPlayType' in document.createElement('video'),\n\n    // Check for support\n    // Basic functionality vs full UI\n    check(type, provider, playsinline) {\n        const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n        const api = support[type] || provider !== 'html5';\n        const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n        return {\n            api,\n            ui,\n        };\n    },\n\n    // Picture-in-picture support\n    // Safari & Chrome only currently\n    pip: (() => {\n        if (browser.isIPhone) {\n            return false;\n        }\n\n        // Safari\n        // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n        if (is.function(createElement('video').webkitSetPresentationMode)) {\n            return true;\n        }\n\n        // Chrome\n        // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n        if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n            return true;\n        }\n\n        return false;\n    })(),\n\n    // Airplay support\n    // Safari only currently\n    airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n    // Inline playback support\n    // https://webkit.org/blog/6784/new-video-policies-for-ios/\n    playsinline: 'playsInline' in document.createElement('video'),\n\n    // Check for mime type support against a player instance\n    // Credits: http://diveintohtml5.info/everything.html\n    // Related: http://www.leanbackplayer.com/test/h5mt.html\n    mime(input) {\n        if (is.empty(input)) {\n            return false;\n        }\n\n        const [mediaType] = input.split('/');\n        let type = input;\n\n        // Verify we're using HTML5 and there's no media type mismatch\n        if (!this.isHTML5 || mediaType !== this.type) {\n            return false;\n        }\n\n        // Add codec if required\n        if (Object.keys(defaultCodecs).includes(type)) {\n            type += `; codecs=\""${defaultCodecs[input]}\""`;\n        }\n\n        try {\n            return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n        } catch (e) {\n            return false;\n        }\n    },\n\n    // Check for textTracks support\n    textTracks: 'textTracks' in document.createElement('video'),\n\n    // <input type=\""range\""> Sliders\n    rangeInput: (() => {\n        const range = document.createElement('input');\n        range.type = 'range';\n        return range.type === 'range';\n    })(),\n\n    // Touch\n    // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n    touch: 'ontouchstart' in document.documentElement,\n\n    // Detect transitions support\n    transitions: transitionEndEvent !== false,\n\n    // Reduced motion iOS & MacOS setting\n    // https://webkit.org/blog/7551/responsive-design-for-motion/\n    reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n"",""// ==========================================================================\n// Style utils\n// ==========================================================================\n\nimport is from './is';\n\nexport function validateRatio(input) {\n    if (!is.array(input) && (!is.string(input) || !input.includes(':'))) {\n        return false;\n    }\n\n    const ratio = is.array(input) ? input : input.split(':');\n\n    return ratio.map(Number).every(is.number);\n}\n\nexport function reduceAspectRatio(ratio) {\n    if (!is.array(ratio) || !ratio.every(is.number)) {\n        return null;\n    }\n\n    const [width, height] = ratio;\n    const getDivider = (w, h) => (h === 0 ? w : getDivider(h, w % h));\n    const divider = getDivider(width, height);\n\n    return [width / divider, height / divider];\n}\n\nexport function getAspectRatio(input) {\n    const parse = ratio => {\n        if (!validateRatio(ratio)) {\n            return null;\n        }\n\n        return ratio.split(':').map(Number);\n    };\n\n    // Provided ratio\n    let ratio = parse(input);\n\n    // Get from config\n    if (ratio === null) {\n        ratio = parse(this.config.ratio);\n    }\n\n    // Get from embed\n    if (ratio === null && !is.empty(this.embed) && is.string(this.embed.ratio)) {\n        ratio = parse(this.embed.ratio);\n    }\n\n    return ratio;\n}\n\n// Set aspect ratio for responsive container\nexport function setAspectRatio(input) {\n    if (!this.isVideo) {\n        return {};\n    }\n\n    const ratio = getAspectRatio.call(this, input);\n\n    const [w, h] = is.array(ratio) ? ratio : [0, 0];\n    const padding = (100 / w) * h;\n\n    this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n    // For Vimeo we have an extra <div> to hide the standard controls and UI\n    if (this.isVimeo && this.supported.ui) {\n        const height = 240;\n        const offset = (height - padding) / (height / 50);\n        this.media.style.transform = `translateY(-${offset}%)`;\n    } else if (this.isHTML5) {\n        this.elements.wrapper.classList.toggle(this.config.classNames.videoFixedRatio, ratio !== null);\n    }\n\n    return { padding, ratio };\n}\n\nexport default { setAspectRatio };\n"",""// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport { setAspectRatio } from './utils/style';\n\nconst html5 = {\n    getSources() {\n        if (!this.isHTML5) {\n            return [];\n        }\n\n        const sources = Array.from(this.media.querySelectorAll('source'));\n\n        // Filter out unsupported sources (if type is specified)\n        return sources.filter(source => {\n            const type = source.getAttribute('type');\n\n            if (is.empty(type)) {\n                return true;\n            }\n\n            return support.mime.call(this, type);\n        });\n    },\n\n    // Get quality levels\n    getQualityOptions() {\n        // Get sizes from <source> elements\n        return html5.getSources\n            .call(this)\n            .map(source => Number(source.getAttribute('size')))\n            .filter(Boolean);\n    },\n\n    extend() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        const player = this;\n\n        // Set aspect ratio if set\n        setAspectRatio.call(player);\n\n        // Quality\n        Object.defineProperty(player.media, 'quality', {\n            get() {\n                // Get sources\n                const sources = html5.getSources.call(player);\n                const source = sources.find(source => source.getAttribute('src') === player.source);\n\n                // Return size, if match is found\n                return source && Number(source.getAttribute('size'));\n            },\n            set(input) {\n                // Get sources\n                const sources = html5.getSources.call(player);\n\n                // Get first match for requested size\n                const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n                // No matching source found\n                if (!source) {\n                    return;\n                }\n\n                // Get current state\n                const { currentTime, paused, preload, readyState } = player.media;\n\n                // Set new source\n                player.media.src = source.getAttribute('src');\n\n                // Prevent loading if preload=\""none\"" and the current source isn't loaded (#1044)\n                if (preload !== 'none' || readyState) {\n                    // Restore time\n                    player.once('loadedmetadata', () => {\n                        player.currentTime = currentTime;\n\n                        // Resume playing\n                        if (!paused) {\n                            player.play();\n                        }\n                    });\n\n                    // Load new source\n                    player.media.load();\n                }\n\n                // Trigger change event\n                triggerEvent.call(player, player.media, 'qualitychange', false, {\n                    quality: input,\n                });\n            },\n        });\n    },\n\n    // Cancel current network requests\n    // See https://github.com/sampotts/plyr/issues/174\n    cancelRequests() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        // Remove child sources\n        removeElement(html5.getSources.call(this));\n\n        // Set blank video src attribute\n        // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n        // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n        this.media.setAttribute('src', this.config.blankVideo);\n\n        // Load the new empty source\n        // This will cancel existing requests\n        // See https://github.com/sampotts/plyr/issues/174\n        this.media.load();\n\n        // Debugging\n        this.debug.log('Cancelled network requests');\n    },\n};\n\nexport default html5;\n"",""// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n    if (!is.array(array)) {\n        return array;\n    }\n\n    return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n    if (!is.array(array) || !array.length) {\n        return null;\n    }\n\n    return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n"",""// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n    return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n    return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n    if (!sources.length) {\n        return target;\n    }\n\n    const source = sources.shift();\n\n    if (!is.object(source)) {\n        return target;\n    }\n\n    Object.keys(source).forEach(key => {\n        if (is.object(source[key])) {\n            if (!Object.keys(target).includes(key)) {\n                Object.assign(target, { [key]: {} });\n            }\n\n            extend(target[key], source[key]);\n        } else {\n            Object.assign(target, { [key]: source[key] });\n        }\n    });\n\n    return extend(target, ...sources);\n}\n"",""// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n    return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n    if (is.empty(input)) {\n        return input;\n    }\n\n    return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n    if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n        return 0;\n    }\n\n    return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n    return input.replace(\n        new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n        replace.toString(),\n    );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n    return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n    let string = input.toString();\n\n    // Convert kebab case\n    string = replaceAll(string, '-', ' ');\n\n    // Convert snake case\n    string = replaceAll(string, '_', ' ');\n\n    // Convert to title case\n    string = toTitleCase(string);\n\n    // Convert to pascal case\n    return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n    let string = input.toString();\n\n    // Convert to pascal case\n    string = toPascalCase(string);\n\n    // Convert first character to lowercase\n    return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n    const fragment = document.createDocumentFragment();\n    const element = document.createElement('div');\n    fragment.appendChild(element);\n    element.innerHTML = source;\n    return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n    const wrapper = document.createElement('div');\n    wrapper.appendChild(element);\n    return wrapper.innerHTML;\n}\n"",""// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n    pip: 'PIP',\n    airplay: 'AirPlay',\n    html5: 'HTML5',\n    vimeo: 'Vimeo',\n    youtube: 'YouTube',\n};\n\nconst i18n = {\n    get(key = '', config = {}) {\n        if (is.empty(key) || is.empty(config)) {\n            return '';\n        }\n\n        let string = getDeep(config.i18n, key);\n\n        if (is.empty(string)) {\n            if (Object.keys(resources).includes(key)) {\n                return resources[key];\n            }\n\n            return '';\n        }\n\n        const replace = {\n            '{seektime}': config.seekTime,\n            '{title}': config.title,\n        };\n\n        Object.entries(replace).forEach(([key, value]) => {\n            string = replaceAll(string, key, value);\n        });\n\n        return string;\n    },\n};\n\nexport default i18n;\n"",""// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\n\nclass Storage {\n    constructor(player) {\n        this.enabled = player.config.storage.enabled;\n        this.key = player.config.storage.key;\n    }\n\n    // Check for actual support (see if we can use it)\n    static get supported() {\n        try {\n            if (!('localStorage' in window)) {\n                return false;\n            }\n\n            const test = '___test';\n\n            // Try to use it (it might be disabled, e.g. user is in private mode)\n            // see: https://github.com/sampotts/plyr/issues/131\n            window.localStorage.setItem(test, test);\n            window.localStorage.removeItem(test);\n\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    get(key) {\n        if (!Storage.supported || !this.enabled) {\n            return null;\n        }\n\n        const store = window.localStorage.getItem(this.key);\n\n        if (is.empty(store)) {\n            return null;\n        }\n\n        const json = JSON.parse(store);\n\n        return is.string(key) && key.length ? json[key] : json;\n    }\n\n    set(object) {\n        // Bail if we don't have localStorage support or it's disabled\n        if (!Storage.supported || !this.enabled) {\n            return;\n        }\n\n        // Can only store objectst\n        if (!is.object(object)) {\n            return;\n        }\n\n        // Get current storage\n        let storage = this.get();\n\n        // Default to empty object\n        if (is.empty(storage)) {\n            storage = {};\n        }\n\n        // Update the working copy of the values\n        extend(storage, object);\n\n        // Update storage\n        window.localStorage.setItem(this.key, JSON.stringify(storage));\n    }\n}\n\nexport default Storage;\n"",""// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function fetch(url, responseType = 'text') {\n    return new Promise((resolve, reject) => {\n        try {\n            const request = new XMLHttpRequest();\n\n            // Check for CORS support\n            if (!('withCredentials' in request)) {\n                return;\n            }\n\n            request.addEventListener('load', () => {\n                if (responseType === 'text') {\n                    try {\n                        resolve(JSON.parse(request.responseText));\n                    } catch (e) {\n                        resolve(request.responseText);\n                    }\n                } else {\n                    resolve(request.response);\n                }\n            });\n\n            request.addEventListener('error', () => {\n                throw new Error(request.status);\n            });\n\n            request.open('GET', url, true);\n\n            // Set the required response type\n            request.responseType = responseType;\n\n            request.send();\n        } catch (e) {\n            reject(e);\n        }\n    });\n}\n"",""// ==========================================================================\n// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n    if (!is.string(url)) {\n        return;\n    }\n\n    const prefix = 'cache';\n    const hasId = is.string(id);\n    let isCached = false;\n\n    const exists = () => document.getElementById(id) !== null;\n\n    const update = (container, data) => {\n        container.innerHTML = data;\n\n        // Check again incase of race condition\n        if (hasId && exists()) {\n            return;\n        }\n\n        // Inject the SVG to the body\n        document.body.insertAdjacentElement('afterbegin', container);\n    };\n\n    // Only load once if ID set\n    if (!hasId || !exists()) {\n        const useStorage = Storage.supported;\n\n        // Create container\n        const container = document.createElement('div');\n        container.setAttribute('hidden', '');\n\n        if (hasId) {\n            container.setAttribute('id', id);\n        }\n\n        // Check in cache\n        if (useStorage) {\n            const cached = window.localStorage.getItem(`${prefix}-${id}`);\n            isCached = cached !== null;\n\n            if (isCached) {\n                const data = JSON.parse(cached);\n                update(container, data.content);\n            }\n        }\n\n        // Get the sprite\n        fetch(url)\n            .then(result => {\n                if (is.empty(result)) {\n                    return;\n                }\n\n                if (useStorage) {\n                    window.localStorage.setItem(\n                        `${prefix}-${id}`,\n                        JSON.stringify({\n                            content: result,\n                        }),\n                    );\n                }\n\n                update(container, result);\n            })\n            .catch(() => {});\n    }\n}\n"",""// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => Math.trunc((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => Math.trunc((value / 60) % 60, 10);\nexport const getSeconds = value => Math.trunc(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n    // Bail if the value isn't a number\n    if (!is.number(time)) {\n        return formatTime(null, displayHours, inverted);\n    }\n\n    // Format time component to add leading zero\n    const format = value => `0${value}`.slice(-2);\n\n    // Breakdown to hours, mins, secs\n    let hours = getHours(time);\n    const mins = getMinutes(time);\n    const secs = getSeconds(time);\n\n    // Do we need to display hours?\n    if (displayHours || hours > 0) {\n        hours = `${hours}:`;\n    } else {\n        hours = '';\n    }\n\n    // Render\n    return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n"",""// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport RangeTouch from 'rangetouch';\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n    createElement,\n    emptyElement,\n    getAttributesFromSelector,\n    getElement,\n    getElements,\n    hasClass,\n    matches,\n    removeElement,\n    setAttributes,\n    setFocus,\n    toggleClass,\n    toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n    // Get icon URL\n    getIconUrl() {\n        const url = new URL(this.config.iconUrl, window.location);\n        const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n        return {\n            url: this.config.iconUrl,\n            cors,\n        };\n    },\n\n    // Find the UI controls\n    findElements() {\n        try {\n            this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n            // Buttons\n            this.elements.buttons = {\n                play: getElements.call(this, this.config.selectors.buttons.play),\n                pause: getElement.call(this, this.config.selectors.buttons.pause),\n                restart: getElement.call(this, this.config.selectors.buttons.restart),\n                rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n                fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n                mute: getElement.call(this, this.config.selectors.buttons.mute),\n                pip: getElement.call(this, this.config.selectors.buttons.pip),\n                airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n                settings: getElement.call(this, this.config.selectors.buttons.settings),\n                captions: getElement.call(this, this.config.selectors.buttons.captions),\n                fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n            };\n\n            // Progress\n            this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n            // Inputs\n            this.elements.inputs = {\n                seek: getElement.call(this, this.config.selectors.inputs.seek),\n                volume: getElement.call(this, this.config.selectors.inputs.volume),\n            };\n\n            // Display\n            this.elements.display = {\n                buffer: getElement.call(this, this.config.selectors.display.buffer),\n                currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n                duration: getElement.call(this, this.config.selectors.display.duration),\n            };\n\n            // Seek tooltip\n            if (is.element(this.elements.progress)) {\n                this.elements.display.seekTooltip = this.elements.progress.querySelector(\n                    `.${this.config.classNames.tooltip}`,\n                );\n            }\n\n            return true;\n        } catch (error) {\n            // Log it\n            this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n            // Restore native video controls\n            this.toggleNativeControls(true);\n\n            return false;\n        }\n    },\n\n    // Create <svg> icon\n    createIcon(type, attributes) {\n        const namespace = 'http://www.w3.org/2000/svg';\n        const iconUrl = controls.getIconUrl.call(this);\n        const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n        // Create <svg>\n        const icon = document.createElementNS(namespace, 'svg');\n        setAttributes(\n            icon,\n            extend(attributes, {\n                role: 'presentation',\n                focusable: 'false',\n            }),\n        );\n\n        // Create the <use> to reference sprite\n        const use = document.createElementNS(namespace, 'use');\n        const path = `${iconPath}-${type}`;\n\n        // Set `href` attributes\n        // https://github.com/sampotts/plyr/issues/460\n        // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n        if ('href' in use) {\n            use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n        }\n\n        // Always set the older attribute even though it's \""deprecated\"" (it'll be around for ages)\n        use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n        // Add <use> to <svg>\n        icon.appendChild(use);\n\n        return icon;\n    },\n\n    // Create hidden text label\n    createLabel(key, attr = {}) {\n        const text = i18n.get(key, this.config);\n\n        const attributes = Object.assign({}, attr, {\n            class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n        });\n\n        return createElement('span', attributes, text);\n    },\n\n    // Create a badge\n    createBadge(text) {\n        if (is.empty(text)) {\n            return null;\n        }\n\n        const badge = createElement('span', {\n            class: this.config.classNames.menu.value,\n        });\n\n        badge.appendChild(\n            createElement(\n                'span',\n                {\n                    class: this.config.classNames.menu.badge,\n                },\n                text,\n            ),\n        );\n\n        return badge;\n    },\n\n    // Create a <button>\n    createButton(buttonType, attr) {\n        const attributes = Object.assign({}, attr);\n        let type = toCamelCase(buttonType);\n\n        const props = {\n            element: 'button',\n            toggle: false,\n            label: null,\n            icon: null,\n            labelPressed: null,\n            iconPressed: null,\n        };\n\n        ['element', 'icon', 'label'].forEach(key => {\n            if (Object.keys(attributes).includes(key)) {\n                props[key] = attributes[key];\n                delete attributes[key];\n            }\n        });\n\n        // Default to 'button' type to prevent form submission\n        if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n            attributes.type = 'button';\n        }\n\n        // Set class name\n        if (Object.keys(attributes).includes('class')) {\n            if (!attributes.class.includes(this.config.classNames.control)) {\n                attributes.class += ` ${this.config.classNames.control}`;\n            }\n        } else {\n            attributes.class = this.config.classNames.control;\n        }\n\n        // Large play button\n        switch (buttonType) {\n            case 'play':\n                props.toggle = true;\n                props.label = 'play';\n                props.labelPressed = 'pause';\n                props.icon = 'play';\n                props.iconPressed = 'pause';\n                break;\n\n            case 'mute':\n                props.toggle = true;\n                props.label = 'mute';\n                props.labelPressed = 'unmute';\n                props.icon = 'volume';\n                props.iconPressed = 'muted';\n                break;\n\n            case 'captions':\n                props.toggle = true;\n                props.label = 'enableCaptions';\n                props.labelPressed = 'disableCaptions';\n                props.icon = 'captions-off';\n                props.iconPressed = 'captions-on';\n                break;\n\n            case 'fullscreen':\n                props.toggle = true;\n                props.label = 'enterFullscreen';\n                props.labelPressed = 'exitFullscreen';\n                props.icon = 'enter-fullscreen';\n                props.iconPressed = 'exit-fullscreen';\n                break;\n\n            case 'play-large':\n                attributes.class += ` ${this.config.classNames.control}--overlaid`;\n                type = 'play';\n                props.label = 'play';\n                props.icon = 'play';\n                break;\n\n            default:\n                if (is.empty(props.label)) {\n                    props.label = type;\n                }\n                if (is.empty(props.icon)) {\n                    props.icon = buttonType;\n                }\n        }\n\n        const button = createElement(props.element);\n\n        // Setup toggle icon and labels\n        if (props.toggle) {\n            // Icon\n            button.appendChild(\n                controls.createIcon.call(this, props.iconPressed, {\n                    class: 'icon--pressed',\n                }),\n            );\n            button.appendChild(\n                controls.createIcon.call(this, props.icon, {\n                    class: 'icon--not-pressed',\n                }),\n            );\n\n            // Label/Tooltip\n            button.appendChild(\n                controls.createLabel.call(this, props.labelPressed, {\n                    class: 'label--pressed',\n                }),\n            );\n            button.appendChild(\n                controls.createLabel.call(this, props.label, {\n                    class: 'label--not-pressed',\n                }),\n            );\n        } else {\n            button.appendChild(controls.createIcon.call(this, props.icon));\n            button.appendChild(controls.createLabel.call(this, props.label));\n        }\n\n        // Merge and set attributes\n        extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n        setAttributes(button, attributes);\n\n        // We have multiple play buttons\n        if (type === 'play') {\n            if (!is.array(this.elements.buttons[type])) {\n                this.elements.buttons[type] = [];\n            }\n\n            this.elements.buttons[type].push(button);\n        } else {\n            this.elements.buttons[type] = button;\n        }\n\n        return button;\n    },\n\n    // Create an <input type='range'>\n    createRange(type, attributes) {\n        // Seek input\n        const input = createElement(\n            'input',\n            extend(\n                getAttributesFromSelector(this.config.selectors.inputs[type]),\n                {\n                    type: 'range',\n                    min: 0,\n                    max: 100,\n                    step: 0.01,\n                    value: 0,\n                    autocomplete: 'off',\n                    // A11y fixes for https://github.com/sampotts/plyr/issues/905\n                    role: 'slider',\n                    'aria-label': i18n.get(type, this.config),\n                    'aria-valuemin': 0,\n                    'aria-valuemax': 100,\n                    'aria-valuenow': 0,\n                },\n                attributes,\n            ),\n        );\n\n        this.elements.inputs[type] = input;\n\n        // Set the fill for webkit now\n        controls.updateRangeFill.call(this, input);\n\n        // Improve support on touch devices\n        RangeTouch.setup(input);\n\n        return input;\n    },\n\n    // Create a <progress>\n    createProgress(type, attributes) {\n        const progress = createElement(\n            'progress',\n            extend(\n                getAttributesFromSelector(this.config.selectors.display[type]),\n                {\n                    min: 0,\n                    max: 100,\n                    value: 0,\n                    role: 'progressbar',\n                    'aria-hidden': true,\n                },\n                attributes,\n            ),\n        );\n\n        // Create the label inside\n        if (type !== 'volume') {\n            progress.appendChild(createElement('span', null, '0'));\n\n            const suffixKey = {\n                played: 'played',\n                buffer: 'buffered',\n            }[type];\n            const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n            progress.innerText = `% ${suffix.toLowerCase()}`;\n        }\n\n        this.elements.display[type] = progress;\n\n        return progress;\n    },\n\n    // Create time display\n    createTime(type) {\n        const attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n        const container = createElement(\n            'div',\n            extend(attributes, {\n                class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n                'aria-label': i18n.get(type, this.config),\n            }),\n            '00:00',\n        );\n\n        // Reference for updates\n        this.elements.display[type] = container;\n\n        return container;\n    },\n\n    // Bind keyboard shortcuts for a menu item\n    // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n    bindMenuItemShortcuts(menuItem, type) {\n        // Navigate through menus via arrow keys and space\n        on(\n            menuItem,\n            'keydown keyup',\n            event => {\n                // We only care about space and ⬆️ ⬇️️ ➡️\n                if (![32, 38, 39, 40].includes(event.which)) {\n                    return;\n                }\n\n                // Prevent play / seek\n                event.preventDefault();\n                event.stopPropagation();\n\n                // We're just here to prevent the keydown bubbling\n                if (event.type === 'keydown') {\n                    return;\n                }\n\n                const isRadioButton = matches(menuItem, '[role=\""menuitemradio\""]');\n\n                // Show the respective menu\n                if (!isRadioButton && [32, 39].includes(event.which)) {\n                    controls.showMenuPanel.call(this, type, true);\n                } else {\n                    let target;\n\n                    if (event.which !== 32) {\n                        if (event.which === 40 || (isRadioButton && event.which === 39)) {\n                            target = menuItem.nextElementSibling;\n\n                            if (!is.element(target)) {\n                                target = menuItem.parentNode.firstElementChild;\n                            }\n                        } else {\n                            target = menuItem.previousElementSibling;\n\n                            if (!is.element(target)) {\n                                target = menuItem.parentNode.lastElementChild;\n                            }\n                        }\n\n                        setFocus.call(this, target, true);\n                    }\n                }\n            },\n            false,\n        );\n\n        // Enter will fire a `click` event but we still need to manage focus\n        // So we bind to keyup which fires after and set focus here\n        on(menuItem, 'keyup', event => {\n            if (event.which !== 13) {\n                return;\n            }\n\n            controls.focusFirstMenuItem.call(this, null, true);\n        });\n    },\n\n    // Create a settings menu item\n    createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n        const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n        const menuItem = createElement(\n            'button',\n            extend(attributes, {\n                type: 'button',\n                role: 'menuitemradio',\n                class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n                'aria-checked': checked,\n                value,\n            }),\n        );\n\n        const flex = createElement('span');\n\n        // We have to set as HTML incase of special characters\n        flex.innerHTML = title;\n\n        if (is.element(badge)) {\n            flex.appendChild(badge);\n        }\n\n        menuItem.appendChild(flex);\n\n        // Replicate radio button behaviour\n        Object.defineProperty(menuItem, 'checked', {\n            enumerable: true,\n            get() {\n                return menuItem.getAttribute('aria-checked') === 'true';\n            },\n            set(checked) {\n                // Ensure exclusivity\n                if (checked) {\n                    Array.from(menuItem.parentNode.children)\n                        .filter(node => matches(node, '[role=\""menuitemradio\""]'))\n                        .forEach(node => node.setAttribute('aria-checked', 'false'));\n                }\n\n                menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n            },\n        });\n\n        this.listeners.bind(\n            menuItem,\n            'click keyup',\n            event => {\n                if (is.keyboardEvent(event) && event.which !== 32) {\n                    return;\n                }\n\n                event.preventDefault();\n                event.stopPropagation();\n\n                menuItem.checked = true;\n\n                switch (type) {\n                    case 'language':\n                        this.currentTrack = Number(value);\n                        break;\n\n                    case 'quality':\n                        this.quality = value;\n                        break;\n\n                    case 'speed':\n                        this.speed = parseFloat(value);\n                        break;\n\n                    default:\n                        break;\n                }\n\n                controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n            },\n            type,\n            false,\n        );\n\n        controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n        list.appendChild(menuItem);\n    },\n\n    // Format a time for display\n    formatTime(time = 0, inverted = false) {\n        // Bail if the value isn't a number\n        if (!is.number(time)) {\n            return time;\n        }\n\n        // Always display hours if duration is over an hour\n        const forceHours = getHours(this.duration) > 0;\n\n        return formatTime(time, forceHours, inverted);\n    },\n\n    // Update the displayed time\n    updateTimeDisplay(target = null, time = 0, inverted = false) {\n        // Bail if there's no element to display or the value isn't a number\n        if (!is.element(target) || !is.number(time)) {\n            return;\n        }\n\n        // eslint-disable-next-line no-param-reassign\n        target.innerText = controls.formatTime(time, inverted);\n    },\n\n    // Update volume UI and storage\n    updateVolume() {\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Update range\n        if (is.element(this.elements.inputs.volume)) {\n            controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n        }\n\n        // Update mute state\n        if (is.element(this.elements.buttons.mute)) {\n            this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n        }\n    },\n\n    // Update seek value and lower fill\n    setRange(target, value = 0) {\n        if (!is.element(target)) {\n            return;\n        }\n\n        // eslint-disable-next-line\n        target.value = value;\n\n        // Webkit range fill\n        controls.updateRangeFill.call(this, target);\n    },\n\n    // Update <progress> elements\n    updateProgress(event) {\n        if (!this.supported.ui || !is.event(event)) {\n            return;\n        }\n\n        let value = 0;\n\n        const setProgress = (target, input) => {\n            const value = is.number(input) ? input : 0;\n            const progress = is.element(target) ? target : this.elements.display.buffer;\n\n            // Update value and label\n            if (is.element(progress)) {\n                progress.value = value;\n\n                // Update text label inside\n                const label = progress.getElementsByTagName('span')[0];\n                if (is.element(label)) {\n                    label.childNodes[0].nodeValue = value;\n                }\n            }\n        };\n\n        if (event) {\n            switch (event.type) {\n                // Video playing\n                case 'timeupdate':\n                case 'seeking':\n                case 'seeked':\n                    value = getPercentage(this.currentTime, this.duration);\n\n                    // Set seek range value only if it's a 'natural' time event\n                    if (event.type === 'timeupdate') {\n                        controls.setRange.call(this, this.elements.inputs.seek, value);\n                    }\n\n                    break;\n\n                // Check buffer status\n                case 'playing':\n                case 'progress':\n                    setProgress(this.elements.display.buffer, this.buffered * 100);\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n    },\n\n    // Webkit polyfill for lower fill range\n    updateRangeFill(target) {\n        // Get range from event if event passed\n        const range = is.event(target) ? target.target : target;\n\n        // Needs to be a valid <input type='range'>\n        if (!is.element(range) || range.getAttribute('type') !== 'range') {\n            return;\n        }\n\n        // Set aria values for https://github.com/sampotts/plyr/issues/905\n        if (matches(range, this.config.selectors.inputs.seek)) {\n            range.setAttribute('aria-valuenow', this.currentTime);\n            const currentTime = controls.formatTime(this.currentTime);\n            const duration = controls.formatTime(this.duration);\n            const format = i18n.get('seekLabel', this.config);\n            range.setAttribute(\n                'aria-valuetext',\n                format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n            );\n        } else if (matches(range, this.config.selectors.inputs.volume)) {\n            const percent = range.value * 100;\n            range.setAttribute('aria-valuenow', percent);\n            range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n        } else {\n            range.setAttribute('aria-valuenow', range.value);\n        }\n\n        // WebKit only\n        if (!browser.isWebkit) {\n            return;\n        }\n\n        // Set CSS custom property\n        range.style.setProperty('--value', `${(range.value / range.max) * 100}%`);\n    },\n\n    // Update hover tooltip for seeking\n    updateSeekTooltip(event) {\n        // Bail if setting not true\n        if (\n            !this.config.tooltips.seek ||\n            !is.element(this.elements.inputs.seek) ||\n            !is.element(this.elements.display.seekTooltip) ||\n            this.duration === 0\n        ) {\n            return;\n        }\n\n        // Calculate percentage\n        let percent = 0;\n        const clientRect = this.elements.progress.getBoundingClientRect();\n        const visible = `${this.config.classNames.tooltip}--visible`;\n\n        const toggle = toggle => {\n            toggleClass(this.elements.display.seekTooltip, visible, toggle);\n        };\n\n        // Hide on touch\n        if (this.touch) {\n            toggle(false);\n            return;\n        }\n\n        // Determine percentage, if already visible\n        if (is.event(event)) {\n            percent = (100 / clientRect.width) * (event.pageX - clientRect.left);\n        } else if (hasClass(this.elements.display.seekTooltip, visible)) {\n            percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n        } else {\n            return;\n        }\n\n        // Set bounds\n        if (percent < 0) {\n            percent = 0;\n        } else if (percent > 100) {\n            percent = 100;\n        }\n\n        // Display the time a click would seek to\n        controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, (this.duration / 100) * percent);\n\n        // Set position\n        this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n        // Show/hide the tooltip\n        // If the event is a moues in/out and percentage is inside bounds\n        if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n            toggle(event.type === 'mouseenter');\n        }\n    },\n\n    // Handle time change event\n    timeUpdate(event) {\n        // Only invert if only one time element is displayed and used for both duration and currentTime\n        const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n        // Duration\n        controls.updateTimeDisplay.call(\n            this,\n            this.elements.display.currentTime,\n            invert ? this.duration - this.currentTime : this.currentTime,\n            invert,\n        );\n\n        // Ignore updates while seeking\n        if (event && event.type === 'timeupdate' && this.media.seeking) {\n            return;\n        }\n\n        // Playing progress\n        controls.updateProgress.call(this, event);\n    },\n\n    // Show the duration on metadataloaded or durationchange events\n    durationUpdate() {\n        // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n        if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n            return;\n        }\n\n        // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n        // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n        // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n        // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n        if (this.duration >= 2 ** 32) {\n            toggleHidden(this.elements.display.currentTime, true);\n            toggleHidden(this.elements.progress, true);\n            return;\n        }\n\n        // Update ARIA values\n        if (is.element(this.elements.inputs.seek)) {\n            this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n        }\n\n        // If there's a spot to display duration\n        const hasDuration = is.element(this.elements.display.duration);\n\n        // If there's only one time display, display duration there\n        if (!hasDuration && this.config.displayDuration && this.paused) {\n            controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n        }\n\n        // If there's a duration element, update content\n        if (hasDuration) {\n            controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n        }\n\n        // Update the tooltip (if visible)\n        controls.updateSeekTooltip.call(this);\n    },\n\n    // Hide/show a tab\n    toggleMenuButton(setting, toggle) {\n        toggleHidden(this.elements.settings.buttons[setting], !toggle);\n    },\n\n    // Update the selected setting\n    updateSetting(setting, container, input) {\n        const pane = this.elements.settings.panels[setting];\n        let value = null;\n        let list = container;\n\n        if (setting === 'captions') {\n            value = this.currentTrack;\n        } else {\n            value = !is.empty(input) ? input : this[setting];\n\n            // Get default\n            if (is.empty(value)) {\n                value = this.config[setting].default;\n            }\n\n            // Unsupported value\n            if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n                this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n                return;\n            }\n\n            // Disabled value\n            if (!this.config[setting].options.includes(value)) {\n                this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n                return;\n            }\n        }\n\n        // Get the list if we need to\n        if (!is.element(list)) {\n            list = pane && pane.querySelector('[role=\""menu\""]');\n        }\n\n        // If there's no list it means it's not been rendered...\n        if (!is.element(list)) {\n            return;\n        }\n\n        // Update the label\n        const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n        label.innerHTML = controls.getLabel.call(this, setting, value);\n\n        // Find the radio option and check it\n        const target = list && list.querySelector(`[value=\""${value}\""]`);\n\n        if (is.element(target)) {\n            target.checked = true;\n        }\n    },\n\n    // Translate a value into a nice label\n    getLabel(setting, value) {\n        switch (setting) {\n            case 'speed':\n                return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n            case 'quality':\n                if (is.number(value)) {\n                    const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n                    if (!label.length) {\n                        return `${value}p`;\n                    }\n\n                    return label;\n                }\n\n                return toTitleCase(value);\n\n            case 'captions':\n                return captions.getLabel.call(this);\n\n            default:\n                return null;\n        }\n    },\n\n    // Set the quality menu\n    setQualityMenu(options) {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.quality)) {\n            return;\n        }\n\n        const type = 'quality';\n        const list = this.elements.settings.panels.quality.querySelector('[role=\""menu\""]');\n\n        // Set options if passed and filter based on uniqueness and config\n        if (is.array(options)) {\n            this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n        }\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Get the badge HTML for HD, 4K etc\n        const getBadge = quality => {\n            const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n            if (!label.length) {\n                return null;\n            }\n\n            return controls.createBadge.call(this, label);\n        };\n\n        // Sort options by the config and then render options\n        this.options.quality\n            .sort((a, b) => {\n                const sorting = this.config.quality.options;\n                return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n            })\n            .forEach(quality => {\n                controls.createMenuItem.call(this, {\n                    value: quality,\n                    list,\n                    type,\n                    title: controls.getLabel.call(this, 'quality', quality),\n                    badge: getBadge(quality),\n                });\n            });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set the looping options\n    /* setLoopMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.loop)) {\n            return;\n        }\n\n        const options = ['start', 'end', 'all', 'reset'];\n        const list = this.elements.settings.panels.loop.querySelector('[role=\""menu\""]');\n\n        // Show the pane and tab\n        toggleHidden(this.elements.settings.buttons.loop, false);\n        toggleHidden(this.elements.settings.panels.loop, false);\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.loop.options);\n        controls.toggleMenuButton.call(this, 'loop', toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        options.forEach(option => {\n            const item = createElement('li');\n\n            const button = createElement(\n                'button',\n                extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n                    type: 'button',\n                    class: this.config.classNames.control,\n                    'data-plyr-loop-action': option,\n                }),\n                i18n.get(option, this.config)\n            );\n\n            if (['start', 'end'].includes(option)) {\n                const badge = controls.createBadge.call(this, '00:00');\n                button.appendChild(badge);\n            }\n\n            item.appendChild(button);\n            list.appendChild(item);\n        });\n    }, */\n\n    // Get current selected caption language\n    // TODO: rework this to user the getter in the API?\n\n    // Set a list of available captions languages\n    setCaptionsMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.captions)) {\n            return;\n        }\n\n        // TODO: Captions or language? Currently it's mixed\n        const type = 'captions';\n        const list = this.elements.settings.panels.captions.querySelector('[role=\""menu\""]');\n        const tracks = captions.getTracks.call(this);\n        const toggle = Boolean(tracks.length);\n\n        // Toggle the pane and tab\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If there's no captions, bail\n        if (!toggle) {\n            return;\n        }\n\n        // Generate options data\n        const options = tracks.map((track, value) => ({\n            value,\n            checked: this.captions.toggled && this.currentTrack === value,\n            title: captions.getLabel.call(this, track),\n            badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n            list,\n            type: 'language',\n        }));\n\n        // Add the \""Disabled\"" option to turn off captions\n        options.unshift({\n            value: -1,\n            checked: !this.captions.toggled,\n            title: i18n.get('disabled', this.config),\n            list,\n            type: 'language',\n        });\n\n        // Generate options\n        options.forEach(controls.createMenuItem.bind(this));\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set a list of available captions languages\n    setSpeedMenu(options) {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.speed)) {\n            return;\n        }\n\n        const type = 'speed';\n        const list = this.elements.settings.panels.speed.querySelector('[role=\""menu\""]');\n\n        // Set the speed options\n        if (is.array(options)) {\n            this.options.speed = options;\n        } else if (this.isHTML5 || this.isVimeo) {\n            this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n        }\n\n        // Set options if passed and filter based on config\n        this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Create items\n        this.options.speed.forEach(speed => {\n            controls.createMenuItem.call(this, {\n                value: speed,\n                list,\n                type,\n                title: controls.getLabel.call(this, 'speed', speed),\n            });\n        });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Check if we need to hide/show the settings menu\n    checkMenu() {\n        const { buttons } = this.elements.settings;\n        const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n        toggleHidden(this.elements.settings.menu, !visible);\n    },\n\n    // Focus the first menu item in a given (or visible) menu\n    focusFirstMenuItem(pane, tabFocus = false) {\n        if (this.elements.settings.popup.hidden) {\n            return;\n        }\n\n        let target = pane;\n\n        if (!is.element(target)) {\n            target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n        }\n\n        const firstItem = target.querySelector('[role^=\""menuitem\""]');\n\n        setFocus.call(this, firstItem, tabFocus);\n    },\n\n    // Show/hide menu\n    toggleMenu(input) {\n        const { popup } = this.elements.settings;\n        const button = this.elements.buttons.settings;\n\n        // Menu and button are required\n        if (!is.element(popup) || !is.element(button)) {\n            return;\n        }\n\n        // True toggle by default\n        const { hidden } = popup;\n        let show = hidden;\n\n        if (is.boolean(input)) {\n            show = input;\n        } else if (is.keyboardEvent(input) && input.which === 27) {\n            show = false;\n        } else if (is.event(input)) {\n            const isMenuItem = popup.contains(input.target);\n\n            // If the click was inside the menu or if the click\n            // wasn't the button or menu item and we're trying to\n            // show the menu (a doc click shouldn't show the menu)\n            if (isMenuItem || (!isMenuItem && input.target !== button && show)) {\n                return;\n            }\n        }\n\n        // Set button attributes\n        button.setAttribute('aria-expanded', show);\n\n        // Show the actual popup\n        toggleHidden(popup, !show);\n\n        // Add class hook\n        toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n        // Focus the first item if key interaction\n        if (show && is.keyboardEvent(input)) {\n            controls.focusFirstMenuItem.call(this, null, true);\n        } else if (!show && !hidden) {\n            // If closing, re-focus the button\n            setFocus.call(this, button, is.keyboardEvent(input));\n        }\n    },\n\n    // Get the natural size of a menu panel\n    getMenuSize(tab) {\n        const clone = tab.cloneNode(true);\n        clone.style.position = 'absolute';\n        clone.style.opacity = 0;\n        clone.removeAttribute('hidden');\n\n        // Append to parent so we get the \""real\"" size\n        tab.parentNode.appendChild(clone);\n\n        // Get the sizes before we remove\n        const width = clone.scrollWidth;\n        const height = clone.scrollHeight;\n\n        // Remove from the DOM\n        removeElement(clone);\n\n        return {\n            width,\n            height,\n        };\n    },\n\n    // Show a panel in the menu\n    showMenuPanel(type = '', tabFocus = false) {\n        const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n        // Nothing to show, bail\n        if (!is.element(target)) {\n            return;\n        }\n\n        // Hide all other panels\n        const container = target.parentNode;\n        const current = Array.from(container.children).find(node => !node.hidden);\n\n        // If we can do fancy animations, we'll animate the height/width\n        if (support.transitions && !support.reducedMotion) {\n            // Set the current width as a base\n            container.style.width = `${current.scrollWidth}px`;\n            container.style.height = `${current.scrollHeight}px`;\n\n            // Get potential sizes\n            const size = controls.getMenuSize.call(this, target);\n\n            // Restore auto height/width\n            const restore = event => {\n                // We're only bothered about height and width on the container\n                if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n                    return;\n                }\n\n                // Revert back to auto\n                container.style.width = '';\n                container.style.height = '';\n\n                // Only listen once\n                off.call(this, container, transitionEndEvent, restore);\n            };\n\n            // Listen for the transition finishing and restore auto height/width\n            on.call(this, container, transitionEndEvent, restore);\n\n            // Set dimensions to target\n            container.style.width = `${size.width}px`;\n            container.style.height = `${size.height}px`;\n        }\n\n        // Set attributes on current tab\n        toggleHidden(current, true);\n\n        // Set attributes on target\n        toggleHidden(target, false);\n\n        // Focus the first item\n        controls.focusFirstMenuItem.call(this, target, tabFocus);\n    },\n\n    // Set the download link\n    setDownloadLink() {\n        const button = this.elements.buttons.download;\n\n        // Bail if no button\n        if (!is.element(button)) {\n            return;\n        }\n\n        // Set download link\n        button.setAttribute('href', this.download);\n    },\n\n    // Build the default HTML\n    // TODO: Set order based on order in the config.controls array?\n    create(data) {\n        // Create the container\n        const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n        // Restart button\n        if (this.config.controls.includes('restart')) {\n            container.appendChild(controls.createButton.call(this, 'restart'));\n        }\n\n        // Rewind button\n        if (this.config.controls.includes('rewind')) {\n            container.appendChild(controls.createButton.call(this, 'rewind'));\n        }\n\n        // Play/Pause button\n        if (this.config.controls.includes('play')) {\n            container.appendChild(controls.createButton.call(this, 'play'));\n        }\n\n        // Fast forward button\n        if (this.config.controls.includes('fast-forward')) {\n            container.appendChild(controls.createButton.call(this, 'fast-forward'));\n        }\n\n        // Progress\n        if (this.config.controls.includes('progress')) {\n            const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n            // Seek range slider\n            progress.appendChild(\n                controls.createRange.call(this, 'seek', {\n                    id: `plyr-seek-${data.id}`,\n                }),\n            );\n\n            // Buffer progress\n            progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n            // TODO: Add loop display indicator\n\n            // Seek tooltip\n            if (this.config.tooltips.seek) {\n                const tooltip = createElement(\n                    'span',\n                    {\n                        class: this.config.classNames.tooltip,\n                    },\n                    '00:00',\n                );\n\n                progress.appendChild(tooltip);\n                this.elements.display.seekTooltip = tooltip;\n            }\n\n            this.elements.progress = progress;\n            container.appendChild(this.elements.progress);\n        }\n\n        // Media current time display\n        if (this.config.controls.includes('current-time')) {\n            container.appendChild(controls.createTime.call(this, 'currentTime'));\n        }\n\n        // Media duration display\n        if (this.config.controls.includes('duration')) {\n            container.appendChild(controls.createTime.call(this, 'duration'));\n        }\n\n        // Volume controls\n        if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n            const volume = createElement('div', {\n                class: 'plyr__volume',\n            });\n\n            // Toggle mute button\n            if (this.config.controls.includes('mute')) {\n                volume.appendChild(controls.createButton.call(this, 'mute'));\n            }\n\n            // Volume range control\n            if (this.config.controls.includes('volume')) {\n                // Set the attributes\n                const attributes = {\n                    max: 1,\n                    step: 0.05,\n                    value: this.config.volume,\n                };\n\n                // Create the volume range slider\n                volume.appendChild(\n                    controls.createRange.call(\n                        this,\n                        'volume',\n                        extend(attributes, {\n                            id: `plyr-volume-${data.id}`,\n                        }),\n                    ),\n                );\n\n                this.elements.volume = volume;\n            }\n\n            container.appendChild(volume);\n        }\n\n        // Toggle captions button\n        if (this.config.controls.includes('captions')) {\n            container.appendChild(controls.createButton.call(this, 'captions'));\n        }\n\n        // Settings button / menu\n        if (this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n            const control = createElement('div', {\n                class: 'plyr__menu',\n                hidden: '',\n            });\n\n            control.appendChild(\n                controls.createButton.call(this, 'settings', {\n                    'aria-haspopup': true,\n                    'aria-controls': `plyr-settings-${data.id}`,\n                    'aria-expanded': false,\n                }),\n            );\n\n            const popup = createElement('div', {\n                class: 'plyr__menu__container',\n                id: `plyr-settings-${data.id}`,\n                hidden: '',\n            });\n\n            const inner = createElement('div');\n\n            const home = createElement('div', {\n                id: `plyr-settings-${data.id}-home`,\n            });\n\n            // Create the menu\n            const menu = createElement('div', {\n                role: 'menu',\n            });\n\n            home.appendChild(menu);\n            inner.appendChild(home);\n            this.elements.settings.panels.home = home;\n\n            // Build the menu items\n            this.config.settings.forEach(type => {\n                // TODO: bundle this with the createMenuItem helper and bindings\n                const menuItem = createElement(\n                    'button',\n                    extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n                        type: 'button',\n                        class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n                        role: 'menuitem',\n                        'aria-haspopup': true,\n                        hidden: '',\n                    }),\n                );\n\n                // Bind menu shortcuts for keyboard users\n                controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n                // Show menu on click\n                on(menuItem, 'click', () => {\n                    controls.showMenuPanel.call(this, type, false);\n                });\n\n                const flex = createElement('span', null, i18n.get(type, this.config));\n\n                const value = createElement('span', {\n                    class: this.config.classNames.menu.value,\n                });\n\n                // Speed contains HTML entities\n                value.innerHTML = data[type];\n\n                flex.appendChild(value);\n                menuItem.appendChild(flex);\n                menu.appendChild(menuItem);\n\n                // Build the panes\n                const pane = createElement('div', {\n                    id: `plyr-settings-${data.id}-${type}`,\n                    hidden: '',\n                });\n\n                // Back button\n                const backButton = createElement('button', {\n                    type: 'button',\n                    class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n                });\n\n                // Visible label\n                backButton.appendChild(\n                    createElement(\n                        'span',\n                        {\n                            'aria-hidden': true,\n                        },\n                        i18n.get(type, this.config),\n                    ),\n                );\n\n                // Screen reader label\n                backButton.appendChild(\n                    createElement(\n                        'span',\n                        {\n                            class: this.config.classNames.hidden,\n                        },\n                        i18n.get('menuBack', this.config),\n                    ),\n                );\n\n                // Go back via keyboard\n                on(\n                    pane,\n                    'keydown',\n                    event => {\n                        // We only care about <-\n                        if (event.which !== 37) {\n                            return;\n                        }\n\n                        // Prevent seek\n                        event.preventDefault();\n                        event.stopPropagation();\n\n                        // Show the respective menu\n                        controls.showMenuPanel.call(this, 'home', true);\n                    },\n                    false,\n                );\n\n                // Go back via button click\n                on(backButton, 'click', () => {\n                    controls.showMenuPanel.call(this, 'home', false);\n                });\n\n                // Add to pane\n                pane.appendChild(backButton);\n\n                // Menu\n                pane.appendChild(\n                    createElement('div', {\n                        role: 'menu',\n                    }),\n                );\n\n                inner.appendChild(pane);\n\n                this.elements.settings.buttons[type] = menuItem;\n                this.elements.settings.panels[type] = pane;\n            });\n\n            popup.appendChild(inner);\n            control.appendChild(popup);\n            container.appendChild(control);\n\n            this.elements.settings.popup = popup;\n            this.elements.settings.menu = control;\n        }\n\n        // Picture in picture button\n        if (this.config.controls.includes('pip') && support.pip) {\n            container.appendChild(controls.createButton.call(this, 'pip'));\n        }\n\n        // Airplay button\n        if (this.config.controls.includes('airplay') && support.airplay) {\n            container.appendChild(controls.createButton.call(this, 'airplay'));\n        }\n\n        // Download button\n        if (this.config.controls.includes('download')) {\n            const attributes = {\n                element: 'a',\n                href: this.download,\n                target: '_blank',\n            };\n\n            const { download } = this.config.urls;\n\n            if (!is.url(download) && this.isEmbed) {\n                extend(attributes, {\n                    icon: `logo-${this.provider}`,\n                    label: this.provider,\n                });\n            }\n\n            container.appendChild(controls.createButton.call(this, 'download', attributes));\n        }\n\n        // Toggle fullscreen button\n        if (this.config.controls.includes('fullscreen')) {\n            container.appendChild(controls.createButton.call(this, 'fullscreen'));\n        }\n\n        // Larger overlaid play button\n        if (this.config.controls.includes('play-large')) {\n            this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n        }\n\n        this.elements.controls = container;\n\n        // Set available quality levels\n        if (this.isHTML5) {\n            controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n        }\n\n        controls.setSpeedMenu.call(this);\n\n        return container;\n    },\n\n    // Insert controls\n    inject() {\n        // Sprite\n        if (this.config.loadSprite) {\n            const icon = controls.getIconUrl.call(this);\n\n            // Only load external sprite using AJAX\n            if (icon.cors) {\n                loadSprite(icon.url, 'sprite-plyr');\n            }\n        }\n\n        // Create a unique ID\n        this.id = Math.floor(Math.random() * 10000);\n\n        // Null by default\n        let container = null;\n        this.elements.controls = null;\n\n        // Set template properties\n        const props = {\n            id: this.id,\n            seektime: this.config.seekTime,\n            title: this.config.title,\n        };\n        let update = true;\n\n        // If function, run it and use output\n        if (is.function(this.config.controls)) {\n            this.config.controls = this.config.controls.call(this, props);\n        }\n\n        // Convert falsy controls to empty array (primarily for empty strings)\n        if (!this.config.controls) {\n            this.config.controls = [];\n        }\n\n        if (is.element(this.config.controls) || is.string(this.config.controls)) {\n            // HTMLElement or Non-empty string passed as the option\n            container = this.config.controls;\n        } else {\n            // Create controls\n            container = controls.create.call(this, {\n                id: this.id,\n                seektime: this.config.seekTime,\n                speed: this.speed,\n                quality: this.quality,\n                captions: captions.getLabel.call(this),\n                // TODO: Looping\n                // loop: 'None',\n            });\n            update = false;\n        }\n\n        // Replace props with their value\n        const replace = input => {\n            let result = input;\n\n            Object.entries(props).forEach(([key, value]) => {\n                result = replaceAll(result, `{${key}}`, value);\n            });\n\n            return result;\n        };\n\n        // Update markup\n        if (update) {\n            if (is.string(this.config.controls)) {\n                container = replace(container);\n            } else if (is.element(container)) {\n                container.innerHTML = replace(container.innerHTML);\n            }\n        }\n\n        // Controls container\n        let target;\n\n        // Inject to custom location\n        if (is.string(this.config.selectors.controls.container)) {\n            target = document.querySelector(this.config.selectors.controls.container);\n        }\n\n        // Inject into the container by default\n        if (!is.element(target)) {\n            target = this.elements.container;\n        }\n\n        // Inject controls HTML (needs to be before captions, hence \""afterbegin\"")\n        const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n        target[insertMethod]('afterbegin', container);\n\n        // Find the elements if need be\n        if (!is.element(this.elements.controls)) {\n            controls.findElements.call(this);\n        }\n\n        // Add pressed property to buttons\n        if (!is.empty(this.elements.buttons)) {\n            const addProperty = button => {\n                const className = this.config.classNames.controlPressed;\n                Object.defineProperty(button, 'pressed', {\n                    enumerable: true,\n                    get() {\n                        return hasClass(button, className);\n                    },\n                    set(pressed = false) {\n                        toggleClass(button, className, pressed);\n                    },\n                });\n            };\n\n            // Toggle classname when pressed property is set\n            Object.values(this.elements.buttons)\n                .filter(Boolean)\n                .forEach(button => {\n                    if (is.array(button) || is.nodeList(button)) {\n                        Array.from(button)\n                            .filter(Boolean)\n                            .forEach(addProperty);\n                    } else {\n                        addProperty(button);\n                    }\n                });\n        }\n\n        // Edge sometimes doesn't finish the paint so force a repaint\n        if (browser.isEdge) {\n            repaint(target);\n        }\n\n        // Setup tooltips\n        if (this.config.tooltips.controls) {\n            const { classNames, selectors } = this.config;\n            const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n            const labels = getElements.call(this, selector);\n\n            Array.from(labels).forEach(label => {\n                toggleClass(label, this.config.classNames.hidden, false);\n                toggleClass(label, this.config.classNames.tooltip, true);\n            });\n        }\n    },\n};\n\nexport default controls;\n"",""// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {String} input - the URL to be parsed\n * @param {Boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n    let url = input;\n\n    if (safe) {\n        const parser = document.createElement('a');\n        parser.href = url;\n        url = parser.href;\n    }\n\n    try {\n        return new URL(url);\n    } catch (e) {\n        return null;\n    }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n    const params = new URLSearchParams();\n\n    if (is.object(input)) {\n        Object.entries(input).forEach(([key, value]) => {\n            params.set(key, value);\n        });\n    }\n\n    return params;\n}\n"",""// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n    createElement,\n    emptyElement,\n    getAttributesFromSelector,\n    insertAfter,\n    removeElement,\n    toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n    // Setup captions\n    setup() {\n        // Requires UI support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Only Vimeo and HTML5 video supported at this point\n        if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n            // Clear menu and hide\n            if (\n                is.array(this.config.controls) &&\n                this.config.controls.includes('settings') &&\n                this.config.settings.includes('captions')\n            ) {\n                controls.setCaptionsMenu.call(this);\n            }\n\n            return;\n        }\n\n        // Inject the container\n        if (!is.element(this.elements.captions)) {\n            this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n            insertAfter(this.elements.captions, this.elements.wrapper);\n        }\n\n        // Fix IE captions if CORS is used\n        // Fetch captions and inject as blobs instead (data URIs not supported!)\n        if (browser.isIE && window.URL) {\n            const elements = this.media.querySelectorAll('track');\n\n            Array.from(elements).forEach(track => {\n                const src = track.getAttribute('src');\n                const url = parseUrl(src);\n\n                if (\n                    url !== null &&\n                    url.hostname !== window.location.href.hostname &&\n                    ['http:', 'https:'].includes(url.protocol)\n                ) {\n                    fetch(src, 'blob')\n                        .then(blob => {\n                            track.setAttribute('src', window.URL.createObjectURL(blob));\n                        })\n                        .catch(() => {\n                            removeElement(track);\n                        });\n                }\n            });\n        }\n\n        // Get and set initial data\n        // The \""preferred\"" options are not realized unless / until the wanted language has a match\n        // * languages: Array of user's browser languages.\n        // * language:  The language preferred by user settings or config\n        // * active:    The state preferred by user settings or config\n        // * toggled:   The real captions state\n\n        const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n        const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n        let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n        // Use first browser language when language is 'auto'\n        if (language === 'auto') {\n            [language] = languages;\n        }\n\n        let active = this.storage.get('captions');\n        if (!is.boolean(active)) {\n            ({ active } = this.config.captions);\n        }\n\n        Object.assign(this.captions, {\n            toggled: false,\n            active,\n            language,\n            languages,\n        });\n\n        // Watch changes to textTracks and update captions menu\n        if (this.isHTML5) {\n            const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n            on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n        }\n\n        // Update available languages in list next tick (the event must not be triggered before the listeners)\n        setTimeout(captions.update.bind(this), 0);\n    },\n\n    // Update available language options in settings based on tracks\n    update() {\n        const tracks = captions.getTracks.call(this, true);\n        // Get the wanted language\n        const { active, language, meta, currentTrackNode } = this.captions;\n        const languageExists = Boolean(tracks.find(track => track.language === language));\n\n        // Handle tracks (add event listener and \""pseudo\""-default)\n        if (this.isHTML5 && this.isVideo) {\n            tracks.filter(track => !meta.get(track)).forEach(track => {\n                this.debug.log('Track added', track);\n                // Attempt to store if the original dom element was \""default\""\n                meta.set(track, {\n                    default: track.mode === 'showing',\n                });\n\n                // Turn off native caption rendering to avoid double captions\n                track.mode = 'hidden';\n\n                // Add event listener for cue changes\n                on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n            });\n        }\n\n        // Update language first time it matches, or if the previous matching track was removed\n        if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n            captions.setLanguage.call(this, language);\n            captions.toggle.call(this, active && languageExists);\n        }\n\n        // Enable or disable captions based on track length\n        toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n        // Update available languages in list\n        if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n            controls.setCaptionsMenu.call(this);\n        }\n    },\n\n    // Toggle captions display\n    // Used internally for the toggleCaptions method, with the passive option forced to false\n    toggle(input, passive = true) {\n        // If there's no full support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        const { toggled } = this.captions; // Current state\n        const activeClass = this.config.classNames.captions.active;\n\n        // Get the next state\n        // If the method is called without parameter, toggle based on current value\n        const active = is.nullOrUndefined(input) ? !toggled : input;\n\n        // Update state and trigger event\n        if (active !== toggled) {\n            // When passive, don't override user preferences\n            if (!passive) {\n                this.captions.active = active;\n                this.storage.set({ captions: active });\n            }\n\n            // Force language if the call isn't passive and there is no matching language to toggle to\n            if (!this.language && active && !passive) {\n                const tracks = captions.getTracks.call(this);\n                const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n                // Override user preferences to avoid switching languages if a matching track is added\n                this.captions.language = track.language;\n\n                // Set caption, but don't store in localStorage as user preference\n                captions.set.call(this, tracks.indexOf(track));\n                return;\n            }\n\n            // Toggle button if it's enabled\n            if (this.elements.buttons.captions) {\n                this.elements.buttons.captions.pressed = active;\n            }\n\n            // Add class hook\n            toggleClass(this.elements.container, activeClass, active);\n\n            this.captions.toggled = active;\n\n            // Update settings menu\n            controls.updateSetting.call(this, 'captions');\n\n            // Trigger event (not used internally)\n            triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n        }\n    },\n\n    // Set captions by track index\n    // Used internally for the currentTrack setter with the passive option forced to false\n    set(index, passive = true) {\n        const tracks = captions.getTracks.call(this);\n\n        // Disable captions if setting to -1\n        if (index === -1) {\n            captions.toggle.call(this, false, passive);\n            return;\n        }\n\n        if (!is.number(index)) {\n            this.debug.warn('Invalid caption argument', index);\n            return;\n        }\n\n        if (!(index in tracks)) {\n            this.debug.warn('Track not found', index);\n            return;\n        }\n\n        if (this.captions.currentTrack !== index) {\n            this.captions.currentTrack = index;\n            const track = tracks[index];\n            const { language } = track || {};\n\n            // Store reference to node for invalidation on remove\n            this.captions.currentTrackNode = track;\n\n            // Update settings menu\n            controls.updateSetting.call(this, 'captions');\n\n            // When passive, don't override user preferences\n            if (!passive) {\n                this.captions.language = language;\n                this.storage.set({ language });\n            }\n\n            // Handle Vimeo captions\n            if (this.isVimeo) {\n                this.embed.enableTextTrack(language);\n            }\n\n            // Trigger event\n            triggerEvent.call(this, this.media, 'languagechange');\n        }\n\n        // Show captions\n        captions.toggle.call(this, true, passive);\n\n        if (this.isHTML5 && this.isVideo) {\n            // If we change the active track while a cue is already displayed we need to update it\n            captions.updateCues.call(this);\n        }\n    },\n\n    // Set captions by language\n    // Used internally for the language setter with the passive option forced to false\n    setLanguage(input, passive = true) {\n        if (!is.string(input)) {\n            this.debug.warn('Invalid language argument', input);\n            return;\n        }\n        // Normalize\n        const language = input.toLowerCase();\n        this.captions.language = language;\n\n        // Set currentTrack\n        const tracks = captions.getTracks.call(this);\n        const track = captions.findTrack.call(this, [language]);\n        captions.set.call(this, tracks.indexOf(track), passive);\n    },\n\n    // Get current valid caption tracks\n    // If update is false it will also ignore tracks without metadata\n    // This is used to \""freeze\"" the language options when captions.update is false\n    getTracks(update = false) {\n        // Handle media or textTracks missing or null\n        const tracks = Array.from((this.media || {}).textTracks || []);\n        // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n        // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n        return tracks\n            .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n            .filter(track => ['captions', 'subtitles'].includes(track.kind));\n    },\n\n    // Match tracks based on languages and get the first\n    findTrack(languages, force = false) {\n        const tracks = captions.getTracks.call(this);\n        const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n        const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n        let track;\n        languages.every(language => {\n            track = sorted.find(track => track.language === language);\n            return !track; // Break iteration if there is a match\n        });\n        // If no match is found but is required, get first\n        return track || (force ? sorted[0] : undefined);\n    },\n\n    // Get the current track\n    getCurrentTrack() {\n        return captions.getTracks.call(this)[this.currentTrack];\n    },\n\n    // Get UI label for track\n    getLabel(track) {\n        let currentTrack = track;\n\n        if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n            currentTrack = captions.getCurrentTrack.call(this);\n        }\n\n        if (is.track(currentTrack)) {\n            if (!is.empty(currentTrack.label)) {\n                return currentTrack.label;\n            }\n\n            if (!is.empty(currentTrack.language)) {\n                return track.language.toUpperCase();\n            }\n\n            return i18n.get('enabled', this.config);\n        }\n\n        return i18n.get('disabled', this.config);\n    },\n\n    // Update captions using current track's active cues\n    // Also optional array argument in case there isn't any track (ex: vimeo)\n    updateCues(input) {\n        // Requires UI\n        if (!this.supported.ui) {\n            return;\n        }\n\n        if (!is.element(this.elements.captions)) {\n            this.debug.warn('No captions element to render to');\n            return;\n        }\n\n        // Only accept array or empty input\n        if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n            this.debug.warn('updateCues: Invalid input', input);\n            return;\n        }\n\n        let cues = input;\n\n        // Get cues from track\n        if (!cues) {\n            const track = captions.getCurrentTrack.call(this);\n            cues = Array.from((track || {}).activeCues || [])\n                .map(cue => cue.getCueAsHTML())\n                .map(getHTML);\n        }\n\n        // Set new caption text\n        const content = cues.map(cueText => cueText.trim()).join('\\n');\n        const changed = content !== this.elements.captions.innerHTML;\n\n        if (changed) {\n            // Empty the container and create a new child element\n            emptyElement(this.elements.captions);\n            const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n            caption.innerHTML = content;\n            this.elements.captions.appendChild(caption);\n\n            // Trigger event\n            triggerEvent.call(this, this.media, 'cuechange');\n        }\n    },\n};\n\nexport default captions;\n"",""// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n    // Disable\n    enabled: true,\n\n    // Custom media title\n    title: '',\n\n    // Logging to console\n    debug: false,\n\n    // Auto play (if supported)\n    autoplay: false,\n\n    // Only allow one media playing at once (vimeo only)\n    autopause: true,\n\n    // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n    // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n    playsinline: true,\n\n    // Default time to skip when rewind/fast forward\n    seekTime: 10,\n\n    // Default volume\n    volume: 1,\n    muted: false,\n\n    // Pass a custom duration\n    duration: null,\n\n    // Display the media duration on load in the current time position\n    // If you have opted to display both duration and currentTime, this is ignored\n    displayDuration: true,\n\n    // Invert the current time to be a countdown\n    invertTime: true,\n\n    // Clicking the currentTime inverts it's value to show time left rather than elapsed\n    toggleInvert: true,\n\n    // Force an aspect ratio\n    // The format must be `'w:h'` (e.g. `'16:9'`)\n    ratio: null,\n\n    // Click video container to play/pause\n    clickToPlay: true,\n\n    // Auto hide the controls\n    hideControls: true,\n\n    // Reset to start when playback ended\n    resetOnEnd: false,\n\n    // Disable the standard context menu\n    disableContextMenu: true,\n\n    // Sprite (for icons)\n    loadSprite: true,\n    iconPrefix: 'plyr',\n    iconUrl: 'https://cdn.plyr.io/3.5.3/plyr.svg',\n\n    // Blank video (used to prevent errors on source change)\n    blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n    // Quality default\n    quality: {\n        default: 576,\n        options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n    },\n\n    // Set loops\n    loop: {\n        active: false,\n        // start: null,\n        // end: null,\n    },\n\n    // Speed default and options to display\n    speed: {\n        selected: 1,\n        options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n    },\n\n    // Keyboard shortcut settings\n    keyboard: {\n        focused: true,\n        global: false,\n    },\n\n    // Display tooltips\n    tooltips: {\n        controls: false,\n        seek: true,\n    },\n\n    // Captions settings\n    captions: {\n        active: false,\n        language: 'auto',\n        // Listen to new tracks added after Plyr is initialized.\n        // This is needed for streaming captions, but may result in unselectable options\n        update: false,\n    },\n\n    // Fullscreen settings\n    fullscreen: {\n        enabled: true, // Allow fullscreen?\n        fallback: true, // Fallback using full viewport/window\n        iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n    },\n\n    // Local storage\n    storage: {\n        enabled: true,\n        key: 'plyr',\n    },\n\n    // Default controls\n    controls: [\n        'play-large',\n        // 'restart',\n        // 'rewind',\n        'play',\n        // 'fast-forward',\n        'progress',\n        'current-time',\n        'mute',\n        'volume',\n        'captions',\n        'settings',\n        'pip',\n        'airplay',\n        // 'download',\n        'fullscreen',\n    ],\n    settings: ['captions', 'quality', 'speed'],\n\n    // Localisation\n    i18n: {\n        restart: 'Restart',\n        rewind: 'Rewind {seektime}s',\n        play: 'Play',\n        pause: 'Pause',\n        fastForward: 'Forward {seektime}s',\n        seek: 'Seek',\n        seekLabel: '{currentTime} of {duration}',\n        played: 'Played',\n        buffered: 'Buffered',\n        currentTime: 'Current time',\n        duration: 'Duration',\n        volume: 'Volume',\n        mute: 'Mute',\n        unmute: 'Unmute',\n        enableCaptions: 'Enable captions',\n        disableCaptions: 'Disable captions',\n        download: 'Download',\n        enterFullscreen: 'Enter fullscreen',\n        exitFullscreen: 'Exit fullscreen',\n        frameTitle: 'Player for {title}',\n        captions: 'Captions',\n        settings: 'Settings',\n        menuBack: 'Go back to previous menu',\n        speed: 'Speed',\n        normal: 'Normal',\n        quality: 'Quality',\n        loop: 'Loop',\n        start: 'Start',\n        end: 'End',\n        all: 'All',\n        reset: 'Reset',\n        disabled: 'Disabled',\n        enabled: 'Enabled',\n        advertisement: 'Ad',\n        qualityBadge: {\n            2160: '4K',\n            1440: 'HD',\n            1080: 'HD',\n            720: 'HD',\n            576: 'SD',\n            480: 'SD',\n        },\n    },\n\n    // URLs\n    urls: {\n        download: null,\n        vimeo: {\n            sdk: 'https://player.vimeo.com/api/player.js',\n            iframe: 'https://player.vimeo.com/video/{0}?{1}',\n            api: 'https://vimeo.com/api/v2/video/{0}.json',\n        },\n        youtube: {\n            sdk: 'https://www.youtube.com/iframe_api',\n            api:\n                'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n        },\n        googleIMA: {\n            sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n        },\n    },\n\n    // Custom control listeners\n    listeners: {\n        seek: null,\n        play: null,\n        pause: null,\n        restart: null,\n        rewind: null,\n        fastForward: null,\n        mute: null,\n        volume: null,\n        captions: null,\n        download: null,\n        fullscreen: null,\n        pip: null,\n        airplay: null,\n        speed: null,\n        quality: null,\n        loop: null,\n        language: null,\n    },\n\n    // Events to watch and bubble\n    events: [\n        // Events to watch on HTML5 media elements and bubble\n        // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n        'ended',\n        'progress',\n        'stalled',\n        'playing',\n        'waiting',\n        'canplay',\n        'canplaythrough',\n        'loadstart',\n        'loadeddata',\n        'loadedmetadata',\n        'timeupdate',\n        'volumechange',\n        'play',\n        'pause',\n        'error',\n        'seeking',\n        'seeked',\n        'emptied',\n        'ratechange',\n        'cuechange',\n\n        // Custom events\n        'download',\n        'enterfullscreen',\n        'exitfullscreen',\n        'captionsenabled',\n        'captionsdisabled',\n        'languagechange',\n        'controlshidden',\n        'controlsshown',\n        'ready',\n\n        // YouTube\n        'statechange',\n\n        // Quality\n        'qualitychange',\n\n        // Ads\n        'adsloaded',\n        'adscontentpause',\n        'adscontentresume',\n        'adstarted',\n        'adsmidpoint',\n        'adscomplete',\n        'adsallcomplete',\n        'adsimpression',\n        'adsclick',\n    ],\n\n    // Selectors\n    // Change these to match your template if using custom HTML\n    selectors: {\n        editable: 'input, textarea, select, [contenteditable]',\n        container: '.plyr',\n        controls: {\n            container: null,\n            wrapper: '.plyr__controls',\n        },\n        labels: '[data-plyr]',\n        buttons: {\n            play: '[data-plyr=\""play\""]',\n            pause: '[data-plyr=\""pause\""]',\n            restart: '[data-plyr=\""restart\""]',\n            rewind: '[data-plyr=\""rewind\""]',\n            fastForward: '[data-plyr=\""fast-forward\""]',\n            mute: '[data-plyr=\""mute\""]',\n            captions: '[data-plyr=\""captions\""]',\n            download: '[data-plyr=\""download\""]',\n            fullscreen: '[data-plyr=\""fullscreen\""]',\n            pip: '[data-plyr=\""pip\""]',\n            airplay: '[data-plyr=\""airplay\""]',\n            settings: '[data-plyr=\""settings\""]',\n            loop: '[data-plyr=\""loop\""]',\n        },\n        inputs: {\n            seek: '[data-plyr=\""seek\""]',\n            volume: '[data-plyr=\""volume\""]',\n            speed: '[data-plyr=\""speed\""]',\n            language: '[data-plyr=\""language\""]',\n            quality: '[data-plyr=\""quality\""]',\n        },\n        display: {\n            currentTime: '.plyr__time--current',\n            duration: '.plyr__time--duration',\n            buffer: '.plyr__progress__buffer',\n            loop: '.plyr__progress__loop', // Used later\n            volume: '.plyr__volume--display',\n        },\n        progress: '.plyr__progress',\n        captions: '.plyr__captions',\n        caption: '.plyr__caption',\n        menu: {\n            quality: '.js-plyr__menu__list--quality',\n        },\n    },\n\n    // Class hooks added to the player in different states\n    classNames: {\n        type: 'plyr--{0}',\n        provider: 'plyr--{0}',\n        video: 'plyr__video-wrapper',\n        embed: 'plyr__video-embed',\n        videoFixedRatio: 'plyr__video-wrapper--fixed-ratio',\n        embedContainer: 'plyr__video-embed__container',\n        poster: 'plyr__poster',\n        posterEnabled: 'plyr__poster-enabled',\n        ads: 'plyr__ads',\n        control: 'plyr__control',\n        controlPressed: 'plyr__control--pressed',\n        playing: 'plyr--playing',\n        paused: 'plyr--paused',\n        stopped: 'plyr--stopped',\n        loading: 'plyr--loading',\n        hover: 'plyr--hover',\n        tooltip: 'plyr__tooltip',\n        cues: 'plyr__cues',\n        hidden: 'plyr__sr-only',\n        hideControls: 'plyr--hide-controls',\n        isIos: 'plyr--is-ios',\n        isTouch: 'plyr--is-touch',\n        uiSupported: 'plyr--full-ui',\n        noTransition: 'plyr--no-transition',\n        display: {\n            time: 'plyr__time',\n        },\n        menu: {\n            value: 'plyr__menu__value',\n            badge: 'plyr__badge',\n            open: 'plyr--menu-open',\n        },\n        captions: {\n            enabled: 'plyr--captions-enabled',\n            active: 'plyr--captions-active',\n        },\n        fullscreen: {\n            enabled: 'plyr--fullscreen-enabled',\n            fallback: 'plyr--fullscreen-fallback',\n        },\n        pip: {\n            supported: 'plyr--pip-supported',\n            active: 'plyr--pip-active',\n        },\n        airplay: {\n            supported: 'plyr--airplay-supported',\n            active: 'plyr--airplay-active',\n        },\n        tabFocus: 'plyr__tab-focus',\n        previewThumbnails: {\n            // Tooltip thumbs\n            thumbContainer: 'plyr__preview-thumb',\n            thumbContainerShown: 'plyr__preview-thumb--is-shown',\n            imageContainer: 'plyr__preview-thumb__image-container',\n            timeContainer: 'plyr__preview-thumb__time-container',\n            // Scrubbing\n            scrubbingContainer: 'plyr__preview-scrubbing',\n            scrubbingContainerShown: 'plyr__preview-scrubbing--is-shown',\n        },\n    },\n\n    // Embed attributes\n    attributes: {\n        embed: {\n            provider: 'data-plyr-provider',\n            id: 'data-plyr-embed-id',\n        },\n    },\n\n    // API keys\n    keys: {\n        google: null,\n    },\n\n    // Advertisements plugin\n    // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n    ads: {\n        enabled: false,\n        publisherId: '',\n        tagUrl: '',\n    },\n\n    // Preview Thumbnails plugin\n    previewThumbnails: {\n        enabled: false,\n        src: '',\n    },\n\n    // Vimeo plugin\n    vimeo: {\n        byline: false,\n        portrait: false,\n        title: false,\n        speed: true,\n        transparent: false,\n    },\n\n    // YouTube plugin\n    youtube: {\n        noCookie: false, // Whether to use an alternative version of YouTube without cookies\n        rel: 0, // No related vids\n        showinfo: 0, // Hide info\n        iv_load_policy: 3, // Hide annotations\n        modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n    },\n};\n\nexport default defaults;\n"",""// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n    active: 'picture-in-picture',\n    inactive: 'inline',\n};\n\nexport default { pip };\n"",""// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n    html5: 'html5',\n    youtube: 'youtube',\n    vimeo: 'vimeo',\n};\n\nexport const types = {\n    audio: 'audio',\n    video: 'video',\n};\n\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function getProviderByUrl(url) {\n    // YouTube\n    if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n        return providers.youtube;\n    }\n\n    // Vimeo\n    if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n        return providers.vimeo;\n    }\n\n    return null;\n}\n\nexport default { providers, types };\n"",""// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n    constructor(enabled = false) {\n        this.enabled = window.console && enabled;\n\n        if (this.enabled) {\n            this.log('Debugging enabled');\n        }\n    }\n\n    get log() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n    }\n\n    get warn() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n    }\n\n    get error() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n    }\n}\n"",""// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nfunction onChange() {\n    if (!this.enabled) {\n        return;\n    }\n\n    // Update toggle button\n    const button = this.player.elements.buttons.fullscreen;\n    if (is.element(button)) {\n        button.pressed = this.active;\n    }\n\n    // Trigger an event\n    triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n    // Trap focus in container\n    if (!browser.isIos) {\n        trapFocus.call(this.player, this.target, this.active);\n    }\n}\n\nfunction toggleFallback(toggle = false) {\n    // Store or restore scroll position\n    if (toggle) {\n        this.scrollPosition = {\n            x: window.scrollX || 0,\n            y: window.scrollY || 0,\n        };\n    } else {\n        window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n    }\n\n    // Toggle scroll\n    document.body.style.overflow = toggle ? 'hidden' : '';\n\n    // Toggle class hook\n    toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n    // Force full viewport on iPhone X+\n    if (browser.isIos) {\n        let viewport = document.head.querySelector('meta[name=\""viewport\""]');\n        const property = 'viewport-fit=cover';\n\n        // Inject the viewport meta if required\n        if (!viewport) {\n            viewport = document.createElement('meta');\n            viewport.setAttribute('name', 'viewport');\n        }\n\n        // Check if the property already exists\n        const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n        if (toggle) {\n            this.cleanupViewport = !hasProperty;\n\n            if (!hasProperty) {\n                viewport.content += `,${property}`;\n            }\n        } else if (this.cleanupViewport) {\n            viewport.content = viewport.content\n                .split(',')\n                .filter(part => part.trim() !== property)\n                .join(',');\n        }\n\n        // Force a repaint as sometimes Safari doesn't want to fill the screen\n        setTimeout(() => repaint(this.target), 100);\n    }\n\n    // Toggle button and fire events\n    onChange.call(this);\n}\n\nclass Fullscreen {\n    constructor(player) {\n        // Keep reference to parent\n        this.player = player;\n\n        // Get prefix\n        this.prefix = Fullscreen.prefix;\n        this.property = Fullscreen.property;\n\n        // Scroll position\n        this.scrollPosition = { x: 0, y: 0 };\n\n        // Force the use of 'full window/browser' rather than fullscreen\n        this.forceFallback = player.config.fullscreen.fallback === 'force';\n\n        // Register event listeners\n        // Handle event (incase user presses escape etc)\n        on.call(\n            this.player,\n            document,\n            this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n            () => {\n                // TODO: Filter for target??\n                onChange.call(this);\n            },\n        );\n\n        // Fullscreen toggle on double click\n        on.call(this.player, this.player.elements.container, 'dblclick', event => {\n            // Ignore double click in controls\n            if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n                return;\n            }\n\n            this.toggle();\n        });\n\n        // Update the UI\n        this.update();\n    }\n\n    // Determine if native supported\n    static get native() {\n        return !!(\n            document.fullscreenEnabled ||\n            document.webkitFullscreenEnabled ||\n            document.mozFullScreenEnabled ||\n            document.msFullscreenEnabled\n        );\n    }\n\n    // If we're actually using native\n    get usingNative() {\n        return Fullscreen.native && !this.forceFallback;\n    }\n\n    // Get the prefix for handlers\n    static get prefix() {\n        // No prefix\n        if (is.function(document.exitFullscreen)) {\n            return '';\n        }\n\n        // Check for fullscreen support by vendor prefix\n        let value = '';\n        const prefixes = ['webkit', 'moz', 'ms'];\n\n        prefixes.some(pre => {\n            if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n                value = pre;\n                return true;\n            }\n\n            return false;\n        });\n\n        return value;\n    }\n\n    static get property() {\n        return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n    }\n\n    // Determine if fullscreen is enabled\n    get enabled() {\n        return (\n            (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n            this.player.config.fullscreen.enabled &&\n            this.player.supported.ui &&\n            this.player.isVideo\n        );\n    }\n\n    // Get active state\n    get active() {\n        if (!this.enabled) {\n            return false;\n        }\n\n        // Fallback using classname\n        if (!Fullscreen.native || this.forceFallback) {\n            return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n        }\n\n        const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n        return element === this.target;\n    }\n\n    // Get target element\n    get target() {\n        return browser.isIos && this.player.config.fullscreen.iosNative\n            ? this.player.media\n            : this.player.elements.container;\n    }\n\n    // Update UI\n    update() {\n        if (this.enabled) {\n            let mode;\n\n            if (this.forceFallback) {\n                mode = 'Fallback (forced)';\n            } else if (Fullscreen.native) {\n                mode = 'Native';\n            } else {\n                mode = 'Fallback';\n            }\n\n            this.player.debug.log(`${mode} fullscreen enabled`);\n        } else {\n            this.player.debug.log('Fullscreen not supported and fallback disabled');\n        }\n\n        // Add styling hook to show button\n        toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n    }\n\n    // Make an element fullscreen\n    enter() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen doesn't need the request step\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitEnterFullscreen();\n        } else if (!Fullscreen.native || this.forceFallback) {\n            toggleFallback.call(this, true);\n        } else if (!this.prefix) {\n            this.target.requestFullscreen();\n        } else if (!is.empty(this.prefix)) {\n            this.target[`${this.prefix}Request${this.property}`]();\n        }\n    }\n\n    // Bail from fullscreen\n    exit() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitExitFullscreen();\n            this.player.play();\n        } else if (!Fullscreen.native || this.forceFallback) {\n            toggleFallback.call(this, false);\n        } else if (!this.prefix) {\n            (document.cancelFullScreen || document.exitFullscreen).call(document);\n        } else if (!is.empty(this.prefix)) {\n            const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n            document[`${this.prefix}${action}${this.property}`]();\n        }\n    }\n\n    // Toggle state\n    toggle() {\n        if (!this.active) {\n            this.enter();\n        } else {\n            this.exit();\n        }\n    }\n}\n\nexport default Fullscreen;\n"",""// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \""naturalWidth\"" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n    return new Promise((resolve, reject) => {\n        const image = new Image();\n\n        const handler = () => {\n            delete image.onload;\n            delete image.onerror;\n            (image.naturalWidth >= minWidth ? resolve : reject)(image);\n        };\n\n        Object.assign(image, { onload: handler, onerror: handler, src });\n    });\n}\n"",""// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n    addStyleHook() {\n        toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n        toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n    },\n\n    // Toggle native HTML5 media controls\n    toggleNativeControls(toggle = false) {\n        if (toggle && this.isHTML5) {\n            this.media.setAttribute('controls', '');\n        } else {\n            this.media.removeAttribute('controls');\n        }\n    },\n\n    // Setup the UI\n    build() {\n        // Re-attach media element listeners\n        // TODO: Use event bubbling?\n        this.listeners.media();\n\n        // Don't setup interface if no support\n        if (!this.supported.ui) {\n            this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n            // Restore native controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Bail\n            return;\n        }\n\n        // Inject custom controls if not present\n        if (!is.element(this.elements.controls)) {\n            // Inject custom controls\n            controls.inject.call(this);\n\n            // Re-attach control listeners\n            this.listeners.controls();\n        }\n\n        // Remove native controls\n        ui.toggleNativeControls.call(this);\n\n        // Setup captions for HTML5\n        if (this.isHTML5) {\n            captions.setup.call(this);\n        }\n\n        // Reset volume\n        this.volume = null;\n\n        // Reset mute state\n        this.muted = null;\n\n        // Reset speed\n        this.speed = null;\n\n        // Reset loop state\n        this.loop = null;\n\n        // Reset quality setting\n        this.quality = null;\n\n        // Reset volume display\n        controls.updateVolume.call(this);\n\n        // Reset time display\n        controls.timeUpdate.call(this);\n\n        // Update the UI\n        ui.checkPlaying.call(this);\n\n        // Check for picture-in-picture support\n        toggleClass(\n            this.elements.container,\n            this.config.classNames.pip.supported,\n            support.pip && this.isHTML5 && this.isVideo,\n        );\n\n        // Check for airplay support\n        toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n        // Add iOS class\n        toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n        // Add touch class\n        toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n        // Ready for API calls\n        this.ready = true;\n\n        // Ready event at end of execution stack\n        setTimeout(() => {\n            triggerEvent.call(this, this.media, 'ready');\n        }, 0);\n\n        // Set the title\n        ui.setTitle.call(this);\n\n        // Assure the poster image is set, if the property was added before the element was created\n        if (this.poster) {\n            ui.setPoster.call(this, this.poster, false).catch(() => {});\n        }\n\n        // Manually set the duration if user has overridden it.\n        // The event listeners for it doesn't get called if preload is disabled (#701)\n        if (this.config.duration) {\n            controls.durationUpdate.call(this);\n        }\n    },\n\n    // Setup aria attribute for play and iframe title\n    setTitle() {\n        // Find the current text\n        let label = i18n.get('play', this.config);\n\n        // If there's a media title set, use that for the label\n        if (is.string(this.config.title) && !is.empty(this.config.title)) {\n            label += `, ${this.config.title}`;\n        }\n\n        // If there's a play button, set label\n        Array.from(this.elements.buttons.play || []).forEach(button => {\n            button.setAttribute('aria-label', label);\n        });\n\n        // Set iframe title\n        // https://github.com/sampotts/plyr/issues/124\n        if (this.isEmbed) {\n            const iframe = getElement.call(this, 'iframe');\n\n            if (!is.element(iframe)) {\n                return;\n            }\n\n            // Default to media type\n            const title = !is.empty(this.config.title) ? this.config.title : 'video';\n            const format = i18n.get('frameTitle', this.config);\n\n            iframe.setAttribute('title', format.replace('{title}', title));\n        }\n    },\n\n    // Toggle poster\n    togglePoster(enable) {\n        toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n    },\n\n    // Set the poster image (async)\n    // Used internally for the poster setter, with the passive option forced to false\n    setPoster(poster, passive = true) {\n        // Don't override if call is passive\n        if (passive && this.poster) {\n            return Promise.reject(new Error('Poster already set'));\n        }\n\n        // Set property synchronously to respect the call order\n        this.media.setAttribute('poster', poster);\n\n        // Wait until ui is ready\n        return (\n            ready\n                .call(this)\n                // Load image\n                .then(() => loadImage(poster))\n                .catch(err => {\n                    // Hide poster on error unless it's been set by another call\n                    if (poster === this.poster) {\n                        ui.togglePoster.call(this, false);\n                    }\n                    // Rethrow\n                    throw err;\n                })\n                .then(() => {\n                    // Prevent race conditions\n                    if (poster !== this.poster) {\n                        throw new Error('setPoster cancelled by later call to setPoster');\n                    }\n                })\n                .then(() => {\n                    Object.assign(this.elements.poster.style, {\n                        backgroundImage: `url('${poster}')`,\n                        // Reset backgroundSize as well (since it can be set to \""cover\"" for padded thumbnails for youtube)\n                        backgroundSize: '',\n                    });\n                    ui.togglePoster.call(this, true);\n                    return poster;\n                })\n        );\n    },\n\n    // Check playing state\n    checkPlaying(event) {\n        // Class hooks\n        toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n        toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n        toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n        // Set state\n        Array.from(this.elements.buttons.play || []).forEach(target => {\n            target.pressed = this.playing;\n        });\n\n        // Only update controls on non timeupdate events\n        if (is.event(event) && event.type === 'timeupdate') {\n            return;\n        }\n\n        // Toggle controls\n        ui.toggleControls.call(this);\n    },\n\n    // Check if media is loading\n    checkLoading(event) {\n        this.loading = ['stalled', 'waiting'].includes(event.type);\n\n        // Clear timer\n        clearTimeout(this.timers.loading);\n\n        // Timer to prevent flicker when seeking\n        this.timers.loading = setTimeout(() => {\n            // Update progress bar loading class state\n            toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n            // Update controls visibility\n            ui.toggleControls.call(this);\n        }, this.loading ? 250 : 0);\n    },\n\n    // Toggle controls based on state and `force` argument\n    toggleControls(force) {\n        const { controls } = this.elements;\n\n        if (controls && this.config.hideControls) {\n            // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n            const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n            // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n            this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n        }\n    },\n};\n\nexport default ui;\n"",""// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport { getAspectRatio, setAspectRatio } from './utils/style';\n\nclass Listeners {\n    constructor(player) {\n        this.player = player;\n        this.lastKey = null;\n        this.focusTimer = null;\n        this.lastKeyDown = null;\n\n        this.handleKey = this.handleKey.bind(this);\n        this.toggleMenu = this.toggleMenu.bind(this);\n        this.setTabFocus = this.setTabFocus.bind(this);\n        this.firstTouch = this.firstTouch.bind(this);\n    }\n\n    // Handle key presses\n    handleKey(event) {\n        const { player } = this;\n        const { elements } = player;\n        const code = event.keyCode ? event.keyCode : event.which;\n        const pressed = event.type === 'keydown';\n        const repeat = pressed && code === this.lastKey;\n\n        // Bail if a modifier key is set\n        if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n            return;\n        }\n\n        // If the event is bubbled from the media element\n        // Firefox doesn't get the keycode for whatever reason\n        if (!is.number(code)) {\n            return;\n        }\n\n        // Seek by the number keys\n        const seekByKey = () => {\n            // Divide the max duration into 10th's and times by the number value\n            player.currentTime = (player.duration / 10) * (code - 48);\n        };\n\n        // Handle the key on keydown\n        // Reset on keyup\n        if (pressed) {\n            // Check focused element\n            // and if the focused element is not editable (e.g. text input)\n            // and any that accept key input http://webaim.org/techniques/keyboard/\n            const focused = document.activeElement;\n            if (is.element(focused)) {\n                const { editable } = player.config.selectors;\n                const { seek } = elements.inputs;\n\n                if (focused !== seek && matches(focused, editable)) {\n                    return;\n                }\n\n                if (event.which === 32 && matches(focused, 'button, [role^=\""menuitem\""]')) {\n                    return;\n                }\n            }\n\n            // Which keycodes should we prevent default\n            const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\n\n            // If the code is found prevent default (e.g. prevent scrolling for arrows)\n            if (preventDefault.includes(code)) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            switch (code) {\n                case 48:\n                case 49:\n                case 50:\n                case 51:\n                case 52:\n                case 53:\n                case 54:\n                case 55:\n                case 56:\n                case 57:\n                    // 0-9\n                    if (!repeat) {\n                        seekByKey();\n                    }\n                    break;\n\n                case 32:\n                case 75:\n                    // Space and K key\n                    if (!repeat) {\n                        player.togglePlay();\n                    }\n                    break;\n\n                case 38:\n                    // Arrow up\n                    player.increaseVolume(0.1);\n                    break;\n\n                case 40:\n                    // Arrow down\n                    player.decreaseVolume(0.1);\n                    break;\n\n                case 77:\n                    // M key\n                    if (!repeat) {\n                        player.muted = !player.muted;\n                    }\n                    break;\n\n                case 39:\n                    // Arrow forward\n                    player.forward();\n                    break;\n\n                case 37:\n                    // Arrow back\n                    player.rewind();\n                    break;\n\n                case 70:\n                    // F key\n                    player.fullscreen.toggle();\n                    break;\n\n                case 67:\n                    // C key\n                    if (!repeat) {\n                        player.toggleCaptions();\n                    }\n                    break;\n\n                case 76:\n                    // L key\n                    player.loop = !player.loop;\n                    break;\n\n                    /* case 73:\n                    this.setLoop('start');\n                    break;\n\n                case 76:\n                    this.setLoop();\n                    break;\n\n                case 79:\n                    this.setLoop('end');\n                    break; */\n\n                default:\n                    break;\n            }\n\n            // Escape is handle natively when in full screen\n            // So we only need to worry about non native\n            if (code === 27 && !player.fullscreen.usingNative && player.fullscreen.active) {\n                player.fullscreen.toggle();\n            }\n\n            // Store last code for next cycle\n            this.lastKey = code;\n        } else {\n            this.lastKey = null;\n        }\n    }\n\n    // Toggle menu\n    toggleMenu(event) {\n        controls.toggleMenu.call(this.player, event);\n    }\n\n    // Device is touch enabled\n    firstTouch() {\n        const { player } = this;\n        const { elements } = player;\n\n        player.touch = true;\n\n        // Add touch class\n        toggleClass(elements.container, player.config.classNames.isTouch, true);\n    }\n\n    setTabFocus(event) {\n        const { player } = this;\n        const { elements } = player;\n\n        clearTimeout(this.focusTimer);\n\n        // Ignore any key other than tab\n        if (event.type === 'keydown' && event.which !== 9) {\n            return;\n        }\n\n        // Store reference to event timeStamp\n        if (event.type === 'keydown') {\n            this.lastKeyDown = event.timeStamp;\n        }\n\n        // Remove current classes\n        const removeCurrent = () => {\n            const className = player.config.classNames.tabFocus;\n            const current = getElements.call(player, `.${className}`);\n            toggleClass(current, className, false);\n        };\n\n        // Determine if a key was pressed to trigger this event\n        const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n        // Ignore focus events if a key was pressed prior\n        if (event.type === 'focus' && !wasKeyDown) {\n            return;\n        }\n\n        // Remove all current\n        removeCurrent();\n\n        // Delay the adding of classname until the focus has changed\n        // This event fires before the focusin event\n        this.focusTimer = setTimeout(() => {\n            const focused = document.activeElement;\n\n            // Ignore if current focus element isn't inside the player\n            if (!elements.container.contains(focused)) {\n                return;\n            }\n\n            toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n        }, 10);\n    }\n\n    // Global window & document listeners\n    global(toggle = true) {\n        const { player } = this;\n\n        // Keyboard shortcuts\n        if (player.config.keyboard.global) {\n            toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n        }\n\n        // Click anywhere closes menu\n        toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n        // Detect touch by events\n        once.call(player, document.body, 'touchstart', this.firstTouch);\n\n        // Tab focus detection\n        toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n    }\n\n    // Container listeners\n    container() {\n        const { player } = this;\n        const { config, elements, timers } = player;\n\n        // Keyboard shortcuts\n        if (!config.keyboard.global && config.keyboard.focused) {\n            on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n        }\n\n        // Toggle controls on mouse events and entering fullscreen\n        on.call(\n            player,\n            elements.container,\n            'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n            event => {\n                const { controls } = elements;\n\n                // Remove button states for fullscreen\n                if (controls && event.type === 'enterfullscreen') {\n                    controls.pressed = false;\n                    controls.hover = false;\n                }\n\n                // Show, then hide after a timeout unless another control event occurs\n                const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n                let delay = 0;\n\n                if (show) {\n                    ui.toggleControls.call(player, true);\n                    // Use longer timeout for touch devices\n                    delay = player.touch ? 3000 : 2000;\n                }\n\n                // Clear timer\n                clearTimeout(timers.controls);\n\n                // Set new timer to prevent flicker when seeking\n                timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n            },\n        );\n\n        // Force edge to repaint on exit fullscreen\n        // TODO: Fix weird bug where Edge doesn't re-draw when exiting fullscreen\n        /* if (browser.isEdge) {\n            on.call(player, elements.container, 'exitfullscreen', () => {\n                setTimeout(() => repaint(elements.container), 100);\n            });\n        } */\n\n        // Set a gutter for Vimeo\n        const setGutter = (ratio, padding, toggle) => {\n            if (!player.isVimeo) {\n                return;\n            }\n\n            const target = player.elements.wrapper.firstChild;\n            const [, y] = ratio;\n            const [videoX, videoY] = getAspectRatio.call(this);\n\n            target.style.maxWidth = toggle ? `${(y / videoY) * videoX}px` : null;\n            target.style.margin = toggle ? '0 auto' : null;\n        };\n\n        // Resize on fullscreen change\n        const setPlayerSize = measure => {\n            // If we don't need to measure the viewport\n            if (!measure) {\n                return setAspectRatio.call(player);\n            }\n\n            const rect = elements.container.getBoundingClientRect();\n            const { width, height } = rect;\n\n            return setAspectRatio.call(player, `${width}:${height}`);\n        };\n\n        const resized = () => {\n            window.clearTimeout(timers.resized);\n            timers.resized = window.setTimeout(setPlayerSize, 50);\n        };\n\n        on.call(player, elements.container, 'enterfullscreen exitfullscreen', event => {\n            const { target, usingNative } = player.fullscreen;\n\n            // Ignore for iOS native\n            if (!player.isEmbed || target !== elements.container) {\n                return;\n            }\n\n            const isEnter = event.type === 'enterfullscreen';\n\n            // Set the player size when entering fullscreen to viewport size\n            const { padding, ratio } = setPlayerSize(isEnter);\n\n            // Set Vimeo gutter\n            setGutter(ratio, padding, isEnter);\n\n            // If not using native fullscreen, we need to check for resizes of viewport\n            if (!usingNative) {\n                if (isEnter) {\n                    on.call(player, window, 'resize', resized);\n                } else {\n                    off.call(player, window, 'resize', resized);\n                }\n            }\n        });\n    }\n\n    // Listen for media events\n    media() {\n        const { player } = this;\n        const { elements } = player;\n\n        // Time change on media\n        on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n        // Display duration\n        on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n            controls.durationUpdate.call(player, event),\n        );\n\n        // Check for audio tracks on load\n        // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n        on.call(player, player.media, 'canplay loadeddata', () => {\n            toggleHidden(elements.volume, !player.hasAudio);\n            toggleHidden(elements.buttons.mute, !player.hasAudio);\n        });\n\n        // Handle the media finishing\n        on.call(player, player.media, 'ended', () => {\n            // Show poster on end\n            if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n                // Restart\n                player.restart();\n            }\n        });\n\n        // Check for buffer progress\n        on.call(player, player.media, 'progress playing seeking seeked', event =>\n            controls.updateProgress.call(player, event),\n        );\n\n        // Handle volume changes\n        on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n        // Handle play/pause\n        on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n            ui.checkPlaying.call(player, event),\n        );\n\n        // Loading state\n        on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n        // Click video\n        if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n            // Re-fetch the wrapper\n            const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n            // Bail if there's no wrapper (this should never happen)\n            if (!is.element(wrapper)) {\n                return;\n            }\n\n            // On click play, pause or restart\n            on.call(player, elements.container, 'click', event => {\n                const targets = [elements.container, wrapper];\n\n                // Ignore if click if not container or in video wrapper\n                if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n                    return;\n                }\n\n                // Touch devices will just show controls (if hidden)\n                if (player.touch && player.config.hideControls) {\n                    return;\n                }\n\n                if (player.ended) {\n                    this.proxy(event, player.restart, 'restart');\n                    this.proxy(event, player.play, 'play');\n                } else {\n                    this.proxy(event, player.togglePlay, 'play');\n                }\n            });\n        }\n\n        // Disable right click\n        if (player.supported.ui && player.config.disableContextMenu) {\n            on.call(\n                player,\n                elements.wrapper,\n                'contextmenu',\n                event => {\n                    event.preventDefault();\n                },\n                false,\n            );\n        }\n\n        // Volume change\n        on.call(player, player.media, 'volumechange', () => {\n            // Save to storage\n            player.storage.set({\n                volume: player.volume,\n                muted: player.muted,\n            });\n        });\n\n        // Speed change\n        on.call(player, player.media, 'ratechange', () => {\n            // Update UI\n            controls.updateSetting.call(player, 'speed');\n\n            // Save to storage\n            player.storage.set({ speed: player.speed });\n        });\n\n        // Quality change\n        on.call(player, player.media, 'qualitychange', event => {\n            // Update UI\n            controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n        });\n\n        // Update download link when ready and if quality changes\n        on.call(player, player.media, 'ready qualitychange', () => {\n            controls.setDownloadLink.call(player);\n        });\n\n        // Proxy events to container\n        // Bubble up key events for Edge\n        const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n        on.call(player, player.media, proxyEvents, event => {\n            let { detail = {} } = event;\n\n            // Get error details from media\n            if (event.type === 'error') {\n                detail = player.media.error;\n            }\n\n            triggerEvent.call(player, elements.container, event.type, true, detail);\n        });\n    }\n\n    // Run default and custom handlers\n    proxy(event, defaultHandler, customHandlerKey) {\n        const { player } = this;\n        const customHandler = player.config.listeners[customHandlerKey];\n        const hasCustomHandler = is.function(customHandler);\n        let returned = true;\n\n        // Execute custom handler\n        if (hasCustomHandler) {\n            returned = customHandler.call(player, event);\n        }\n\n        // Only call default handler if not prevented in custom handler\n        if (returned && is.function(defaultHandler)) {\n            defaultHandler.call(player, event);\n        }\n    }\n\n    // Trigger custom and default handlers\n    bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n        const { player } = this;\n        const customHandler = player.config.listeners[customHandlerKey];\n        const hasCustomHandler = is.function(customHandler);\n\n        on.call(\n            player,\n            element,\n            type,\n            event => this.proxy(event, defaultHandler, customHandlerKey),\n            passive && !hasCustomHandler,\n        );\n    }\n\n    // Listen for control events\n    controls() {\n        const { player } = this;\n        const { elements } = player;\n\n        // IE doesn't support input event, so we fallback to change\n        const inputEvent = browser.isIE ? 'change' : 'input';\n\n        // Play/pause toggle\n        if (elements.buttons.play) {\n            Array.from(elements.buttons.play).forEach(button => {\n                this.bind(button, 'click', player.togglePlay, 'play');\n            });\n        }\n\n        // Pause\n        this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n        // Rewind\n        this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n        // Rewind\n        this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n        // Mute toggle\n        this.bind(\n            elements.buttons.mute,\n            'click',\n            () => {\n                player.muted = !player.muted;\n            },\n            'mute',\n        );\n\n        // Captions toggle\n        this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n        // Download\n        this.bind(\n            elements.buttons.download,\n            'click',\n            () => {\n                triggerEvent.call(player, player.media, 'download');\n            },\n            'download',\n        );\n\n        // Fullscreen toggle\n        this.bind(\n            elements.buttons.fullscreen,\n            'click',\n            () => {\n                player.fullscreen.toggle();\n            },\n            'fullscreen',\n        );\n\n        // Picture-in-Picture\n        this.bind(\n            elements.buttons.pip,\n            'click',\n            () => {\n                player.pip = 'toggle';\n            },\n            'pip',\n        );\n\n        // Airplay\n        this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n        // Settings menu - click toggle\n        this.bind(elements.buttons.settings, 'click', event => {\n            // Prevent the document click listener closing the menu\n            event.stopPropagation();\n\n            controls.toggleMenu.call(player, event);\n        });\n\n        // Settings menu - keyboard toggle\n        // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n        this.bind(\n            elements.buttons.settings,\n            'keyup',\n            event => {\n                const code = event.which;\n\n                // We only care about space and return\n                if (![13, 32].includes(code)) {\n                    return;\n                }\n\n                // Because return triggers a click anyway, all we need to do is set focus\n                if (code === 13) {\n                    controls.focusFirstMenuItem.call(player, null, true);\n                    return;\n                }\n\n                // Prevent scroll\n                event.preventDefault();\n\n                // Prevent playing video (Firefox)\n                event.stopPropagation();\n\n                // Toggle menu\n                controls.toggleMenu.call(player, event);\n            },\n            null,\n            false, // Can't be passive as we're preventing default\n        );\n\n        // Escape closes menu\n        this.bind(elements.settings.menu, 'keydown', event => {\n            if (event.which === 27) {\n                controls.toggleMenu.call(player, event);\n            }\n        });\n\n        // Set range input alternative \""value\"", which matches the tooltip time (#954)\n        this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n            const rect = elements.progress.getBoundingClientRect();\n            const percent = (100 / rect.width) * (event.pageX - rect.left);\n            event.currentTarget.setAttribute('seek-value', percent);\n        });\n\n        // Pause while seeking\n        this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n            const seek = event.currentTarget;\n            const code = event.keyCode ? event.keyCode : event.which;\n            const attribute = 'play-on-seeked';\n\n            if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n                return;\n            }\n\n            // Record seek time so we can prevent hiding controls for a few seconds after seek\n            player.lastSeekTime = Date.now();\n\n            // Was playing before?\n            const play = seek.hasAttribute(attribute);\n\n            // Done seeking\n            const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n            // If we're done seeking and it was playing, resume playback\n            if (play && done) {\n                seek.removeAttribute(attribute);\n                player.play();\n            } else if (!done && player.playing) {\n                seek.setAttribute(attribute, '');\n                player.pause();\n            }\n        });\n\n        // Fix range inputs on iOS\n        // Super weird iOS bug where after you interact with an <input type=\""range\"">,\n        // it takes over further interactions on the page. This is a hack\n        if (browser.isIos) {\n            const inputs = getElements.call(player, 'input[type=\""range\""]');\n            Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n        }\n\n        // Seek\n        this.bind(\n            elements.inputs.seek,\n            inputEvent,\n            event => {\n                const seek = event.currentTarget;\n\n                // If it exists, use seek-value instead of \""value\"" for consistency with tooltip time (#954)\n                let seekTo = seek.getAttribute('seek-value');\n\n                if (is.empty(seekTo)) {\n                    seekTo = seek.value;\n                }\n\n                seek.removeAttribute('seek-value');\n\n                player.currentTime = (seekTo / seek.max) * player.duration;\n            },\n            'seek',\n        );\n\n        // Seek tooltip\n        this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n            controls.updateSeekTooltip.call(player, event),\n        );\n\n        // Preview thumbnails plugin\n        // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n        this.bind(elements.progress, 'mousemove touchmove', event => {\n            const { previewThumbnails } = player;\n\n            if (previewThumbnails && previewThumbnails.loaded) {\n                previewThumbnails.startMove(event);\n            }\n        });\n\n        // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n        this.bind(elements.progress, 'mouseleave click', () => {\n            const { previewThumbnails } = player;\n\n            if (previewThumbnails && previewThumbnails.loaded) {\n                previewThumbnails.endMove(false, true);\n            }\n        });\n\n        // Show scrubbing preview\n        this.bind(elements.progress, 'mousedown touchstart', event => {\n            const { previewThumbnails } = player;\n\n            if (previewThumbnails && previewThumbnails.loaded) {\n                previewThumbnails.startScrubbing(event);\n            }\n        });\n\n        this.bind(elements.progress, 'mouseup touchend', event => {\n            const { previewThumbnails } = player;\n\n            if (previewThumbnails && previewThumbnails.loaded) {\n                previewThumbnails.endScrubbing(event);\n            }\n        });\n\n        // Polyfill for lower fill in <input type=\""range\""> for webkit\n        if (browser.isWebkit) {\n            Array.from(getElements.call(player, 'input[type=\""range\""]')).forEach(element => {\n                this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n            });\n        }\n\n        // Current time invert\n        // Only if one time element is used for both currentTime and duration\n        if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n            this.bind(elements.display.currentTime, 'click', () => {\n                // Do nothing if we're at the start\n                if (player.currentTime === 0) {\n                    return;\n                }\n\n                player.config.invertTime = !player.config.invertTime;\n\n                controls.timeUpdate.call(player);\n            });\n        }\n\n        // Volume\n        this.bind(\n            elements.inputs.volume,\n            inputEvent,\n            event => {\n                player.volume = event.target.value;\n            },\n            'volume',\n        );\n\n        // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n        this.bind(elements.controls, 'mouseenter mouseleave', event => {\n            elements.controls.hover = !player.touch && event.type === 'mouseenter';\n        });\n\n        // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n        this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n            elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n        });\n\n        // Show controls when they receive focus (e.g., when using keyboard tab key)\n        this.bind(elements.controls, 'focusin', () => {\n            const { config, elements, timers } = player;\n\n            // Skip transition to prevent focus from scrolling the parent element\n            toggleClass(elements.controls, config.classNames.noTransition, true);\n\n            // Toggle\n            ui.toggleControls.call(player, true);\n\n            // Restore transition\n            setTimeout(() => {\n                toggleClass(elements.controls, config.classNames.noTransition, false);\n            }, 0);\n\n            // Delay a little more for mouse users\n            const delay = this.touch ? 3000 : 4000;\n\n            // Clear timer\n            clearTimeout(timers.controls);\n\n            // Hide again after delay\n            timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n        });\n\n        // Mouse wheel for volume\n        this.bind(\n            elements.inputs.volume,\n            'wheel',\n            event => {\n                // Detect \""natural\"" scroll - suppored on OS X Safari only\n                // Other browsers on OS X will be inverted until support improves\n                const inverted = event.webkitDirectionInvertedFromDevice;\n\n                // Get delta from event. Invert if `inverted` is true\n                const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n                // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n                const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n                // Change the volume by 2%\n                player.increaseVolume(direction / 50);\n\n                // Don't break page scrolling at max and min\n                const { volume } = player.media;\n                if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n                    event.preventDefault();\n                }\n            },\n            'volume',\n            false,\n        );\n    }\n}\n\nexport default Listeners;\n"",""(function(root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.loadjs = factory();\n  }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n    bundleIdCache = {},\n    bundleResultCache = {},\n    bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n  // listify\n  bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n  var depsNotFound = [],\n      i = bundleIds.length,\n      numWaiting = i,\n      fn,\n      bundleId,\n      r,\n      q;\n\n  // define callback function\n  fn = function (bundleId, pathsNotFound) {\n    if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n    numWaiting--;\n    if (!numWaiting) callbackFn(depsNotFound);\n  };\n\n  // register callback\n  while (i--) {\n    bundleId = bundleIds[i];\n\n    // execute callback if in result cache\n    r = bundleResultCache[bundleId];\n    if (r) {\n      fn(bundleId, r);\n      continue;\n    }\n\n    // add to callback queue\n    q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n    q.push(fn);\n  }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n  // exit if id isn't defined\n  if (!bundleId) return;\n\n  var q = bundleCallbackQueue[bundleId];\n\n  // cache result\n  bundleResultCache[bundleId] = pathsNotFound;\n\n  // exit if queue is empty\n  if (!q) return;\n\n  // empty callback queue\n  while (q.length) {\n    q[0](bundleId, pathsNotFound);\n    q.splice(0, 1);\n  }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n  // accept function as argument\n  if (args.call) args = {success: args};\n\n  // success and error callbacks\n  if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n  else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n  var doc = document,\n      async = args.async,\n      maxTries = (args.numRetries || 0) + 1,\n      beforeCallbackFn = args.before || devnull,\n      pathStripped = path.replace(/^(css|img)!/, ''),\n      isLegacyIECss,\n      e;\n\n  numTries = numTries || 0;\n\n  if (/(^css!|\\.css$)/.test(path)) {\n    // css\n    e = doc.createElement('link');\n    e.rel = 'stylesheet';\n    e.href = pathStripped;\n\n    // tag IE9+\n    isLegacyIECss = 'hideFocus' in e;\n\n    // use preload in IE Edge (to detect load errors)\n    if (isLegacyIECss && e.relList) {\n      isLegacyIECss = 0;\n      e.rel = 'preload';\n      e.as = 'style';\n    }\n  } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n    // image\n    e = doc.createElement('img');\n    e.src = pathStripped;    \n  } else {\n    // javascript\n    e = doc.createElement('script');\n    e.src = path;\n    e.async = async === undefined ? true : async;\n  }\n\n  e.onload = e.onerror = e.onbeforeload = function (ev) {\n    var result = ev.type[0];\n\n    // treat empty stylesheets as failures to get around lack of onerror\n    // support in IE9-11\n    if (isLegacyIECss) {\n      try {\n        if (!e.sheet.cssText.length) result = 'e';\n      } catch (x) {\n        // sheets objects created from load errors don't allow access to\n        // `cssText` (unless error is Code:18 SecurityError)\n        if (x.code != 18) result = 'e';\n      }\n    }\n\n    // handle retries in case of load failure\n    if (result == 'e') {\n      // increment counter\n      numTries += 1;\n\n      // exit function and try again\n      if (numTries < maxTries) {\n        return loadFile(path, callbackFn, args, numTries);\n      }\n    } else if (e.rel == 'preload' && e.as == 'style') {\n      // activate preloaded stylesheets\n      return e.rel = 'stylesheet'; // jshint ignore:line\n    }\n    \n    // execute callback\n    callbackFn(path, result, ev.defaultPrevented);\n  };\n\n  // add to document (unless callback returns `false`)\n  if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n  // listify paths\n  paths = paths.push ? paths : [paths];\n\n  var numWaiting = paths.length,\n      x = numWaiting,\n      pathsNotFound = [],\n      fn,\n      i;\n\n  // define callback function\n  fn = function(path, result, defaultPrevented) {\n    // handle error\n    if (result == 'e') pathsNotFound.push(path);\n\n    // handle beforeload event. If defaultPrevented then that means the load\n    // will be blocked (ex. Ghostery/ABP on Safari)\n    if (result == 'b') {\n      if (defaultPrevented) pathsNotFound.push(path);\n      else return;\n    }\n\n    numWaiting--;\n    if (!numWaiting) callbackFn(pathsNotFound);\n  };\n\n  // load scripts\n  for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function|Object)} [arg1] - The (1) bundleId or (2) success\n *   callback or (3) object literal with success/error arguments, numRetries,\n *   etc.\n * @param {(Function|Object)} [arg2] - The (1) success callback or (2) object\n *   literal with success/error arguments, numRetries, etc.\n */\nfunction loadjs(paths, arg1, arg2) {\n  var bundleId,\n      args;\n\n  // bundleId (if string)\n  if (arg1 && arg1.trim) bundleId = arg1;\n\n  // args (default is {})\n  args = (bundleId ? arg2 : arg1) || {};\n\n  // throw error if bundle is already defined\n  if (bundleId) {\n    if (bundleId in bundleIdCache) {\n      throw \""LoadJS\"";\n    } else {\n      bundleIdCache[bundleId] = true;\n    }\n  }\n\n  function loadFn(resolve, reject) {\n    loadFiles(paths, function (pathsNotFound) {\n      // execute callbacks\n      executeCallbacks(args, pathsNotFound);\n      \n      // resolve Promise\n      if (resolve) {\n        executeCallbacks({success: resolve, error: reject}, pathsNotFound);\n      }\n\n      // publish bundle load event\n      publish(bundleId, pathsNotFound);\n    }, args);\n  }\n  \n  if (args.returnPromise) return new Promise(loadFn);\n  else loadFn();\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n  // subscribe to bundle load event\n  subscribe(deps, function (depsNotFound) {\n    // execute callbacks\n    executeCallbacks(args, depsNotFound);\n  });\n\n  return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n  publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n  bundleIdCache = {};\n  bundleResultCache = {};\n  bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n  return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n"",""// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n    return new Promise((resolve, reject) => {\n        loadjs(url, {\n            success: resolve,\n            error: reject,\n        });\n    });\n}\n"",""// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { extend } from '../utils/objects';\nimport { format, stripHTML } from '../utils/strings';\nimport { setAspectRatio } from '../utils/style';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n    if (is.empty(url)) {\n        return null;\n    }\n\n    if (is.number(Number(url))) {\n        return url;\n    }\n\n    const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n        this.embed.hasPlayed = true;\n    }\n    if (this.media.paused === play) {\n        this.media.paused = !play;\n        triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n}\n\nconst vimeo = {\n    setup() {\n        // Add embed class for responsive\n        toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set intial ratio\n        setAspectRatio.call(this);\n\n        // Load the API if not already\n        if (!is.object(window.Vimeo)) {\n            loadScript(this.config.urls.vimeo.sdk)\n                .then(() => {\n                    vimeo.ready.call(this);\n                })\n                .catch(error => {\n                    this.debug.warn('Vimeo API failed to load', error);\n                });\n        } else {\n            vimeo.ready.call(this);\n        }\n    },\n\n    // API Ready\n    ready() {\n        const player = this;\n        const config = player.config.vimeo;\n\n        // Get Vimeo params for the iframe\n        const params = buildUrlParams(\n            extend(\n                {},\n                {\n                    loop: player.config.loop.active,\n                    autoplay: player.autoplay,\n                    muted: player.muted,\n                    gesture: 'media',\n                    playsinline: !this.config.fullscreen.iosNative,\n                },\n                config,\n            ),\n        );\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (is.empty(source)) {\n            source = player.media.getAttribute(player.config.attributes.embed.id);\n        }\n\n        const id = parseId(source);\n\n        // Build an iframe\n        const iframe = createElement('iframe');\n        const src = format(player.config.urls.vimeo.iframe, id, params);\n        iframe.setAttribute('src', src);\n        iframe.setAttribute('allowfullscreen', '');\n        iframe.setAttribute('allowtransparency', '');\n        iframe.setAttribute('allow', 'autoplay');\n\n        // Get poster, if already set\n        const { poster } = player;\n\n        // Inject the package\n        const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n        wrapper.appendChild(iframe);\n        player.media = replaceElement(wrapper, player.media);\n\n        // Get poster image\n        fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n            if (is.empty(response)) {\n                return;\n            }\n\n            // Get the URL for thumbnail\n            const url = new URL(response[0].thumbnail_large);\n\n            // Get original image\n            url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n            // Set and show poster\n            ui.setPoster.call(player, url.href).catch(() => {});\n        });\n\n        // Setup instance\n        // https://github.com/vimeo/player.js\n        player.embed = new window.Vimeo.Player(iframe, {\n            autopause: player.config.autopause,\n            muted: player.muted,\n        });\n\n        player.media.paused = true;\n        player.media.currentTime = 0;\n\n        // Disable native text track rendering\n        if (player.supported.ui) {\n            player.embed.disableTextTrack();\n        }\n\n        // Create a faux HTML5 API using the Vimeo API\n        player.media.play = () => {\n            assurePlaybackState.call(player, true);\n            return player.embed.play();\n        };\n\n        player.media.pause = () => {\n            assurePlaybackState.call(player, false);\n            return player.embed.pause();\n        };\n\n        player.media.stop = () => {\n            player.pause();\n            player.currentTime = 0;\n        };\n\n        // Seeking\n        let { currentTime } = player.media;\n        Object.defineProperty(player.media, 'currentTime', {\n            get() {\n                return currentTime;\n            },\n            set(time) {\n                // Vimeo will automatically play on seek if the video hasn't been played before\n\n                // Get current paused state and volume etc\n                const { embed, media, paused, volume } = player;\n                const restorePause = paused && !embed.hasPlayed;\n\n                // Set seeking state and trigger event\n                media.seeking = true;\n                triggerEvent.call(player, media, 'seeking');\n\n                // If paused, mute until seek is complete\n                Promise.resolve(restorePause && embed.setVolume(0))\n                    // Seek\n                    .then(() => embed.setCurrentTime(time))\n                    // Restore paused\n                    .then(() => restorePause && embed.pause())\n                    // Restore volume\n                    .then(() => restorePause && embed.setVolume(volume))\n                    .catch(() => {\n                        // Do nothing\n                    });\n            },\n        });\n\n        // Playback speed\n        let speed = player.config.speed.selected;\n        Object.defineProperty(player.media, 'playbackRate', {\n            get() {\n                return speed;\n            },\n            set(input) {\n                player.embed\n                    .setPlaybackRate(input)\n                    .then(() => {\n                        speed = input;\n                        triggerEvent.call(player, player.media, 'ratechange');\n                    })\n                    .catch(error => {\n                        // Hide menu item (and menu if empty)\n                        if (error.name === 'Error') {\n                            controls.setSpeedMenu.call(player, []);\n                        }\n                    });\n            },\n        });\n\n        // Volume\n        let { volume } = player.config;\n        Object.defineProperty(player.media, 'volume', {\n            get() {\n                return volume;\n            },\n            set(input) {\n                player.embed.setVolume(input).then(() => {\n                    volume = input;\n                    triggerEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Muted\n        let { muted } = player.config;\n        Object.defineProperty(player.media, 'muted', {\n            get() {\n                return muted;\n            },\n            set(input) {\n                const toggle = is.boolean(input) ? input : false;\n\n                player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n                    muted = toggle;\n                    triggerEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Loop\n        let { loop } = player.config;\n        Object.defineProperty(player.media, 'loop', {\n            get() {\n                return loop;\n            },\n            set(input) {\n                const toggle = is.boolean(input) ? input : player.config.loop.active;\n\n                player.embed.setLoop(toggle).then(() => {\n                    loop = toggle;\n                });\n            },\n        });\n\n        // Source\n        let currentSrc;\n        player.embed\n            .getVideoUrl()\n            .then(value => {\n                currentSrc = value;\n                controls.setDownloadLink.call(player);\n            })\n            .catch(error => {\n                this.debug.warn(error);\n            });\n\n        Object.defineProperty(player.media, 'currentSrc', {\n            get() {\n                return currentSrc;\n            },\n        });\n\n        // Ended\n        Object.defineProperty(player.media, 'ended', {\n            get() {\n                return player.currentTime === player.duration;\n            },\n        });\n\n        // Set aspect ratio based on video size\n        Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n            const [width, height] = dimensions;\n            player.embed.ratio = `${width}:${height}`;\n            setAspectRatio.call(this);\n        });\n\n        // Set autopause\n        player.embed.setAutopause(player.config.autopause).then(state => {\n            player.config.autopause = state;\n        });\n\n        // Get title\n        player.embed.getVideoTitle().then(title => {\n            player.config.title = title;\n            ui.setTitle.call(this);\n        });\n\n        // Get current time\n        player.embed.getCurrentTime().then(value => {\n            currentTime = value;\n            triggerEvent.call(player, player.media, 'timeupdate');\n        });\n\n        // Get duration\n        player.embed.getDuration().then(value => {\n            player.media.duration = value;\n            triggerEvent.call(player, player.media, 'durationchange');\n        });\n\n        // Get captions\n        player.embed.getTextTracks().then(tracks => {\n            player.media.textTracks = tracks;\n            captions.setup.call(player);\n        });\n\n        player.embed.on('cuechange', ({ cues = [] }) => {\n            const strippedCues = cues.map(cue => stripHTML(cue.text));\n            captions.updateCues.call(player, strippedCues);\n        });\n\n        player.embed.on('loaded', () => {\n            // Assure state and events are updated on autoplay\n            player.embed.getPaused().then(paused => {\n                assurePlaybackState.call(player, !paused);\n                if (!paused) {\n                    triggerEvent.call(player, player.media, 'playing');\n                }\n            });\n\n            if (is.element(player.embed.element) && player.supported.ui) {\n                const frame = player.embed.element;\n\n                // Fix keyboard focus issues\n                // https://github.com/sampotts/plyr/issues/317\n                frame.setAttribute('tabindex', -1);\n            }\n        });\n\n        player.embed.on('play', () => {\n            assurePlaybackState.call(player, true);\n            triggerEvent.call(player, player.media, 'playing');\n        });\n\n        player.embed.on('pause', () => {\n            assurePlaybackState.call(player, false);\n        });\n\n        player.embed.on('timeupdate', data => {\n            player.media.seeking = false;\n            currentTime = data.seconds;\n            triggerEvent.call(player, player.media, 'timeupdate');\n        });\n\n        player.embed.on('progress', data => {\n            player.media.buffered = data.percent;\n            triggerEvent.call(player, player.media, 'progress');\n\n            // Check all loaded\n            if (parseInt(data.percent, 10) === 1) {\n                triggerEvent.call(player, player.media, 'canplaythrough');\n            }\n\n            // Get duration as if we do it before load, it gives an incorrect value\n            // https://github.com/sampotts/plyr/issues/891\n            player.embed.getDuration().then(value => {\n                if (value !== player.media.duration) {\n                    player.media.duration = value;\n                    triggerEvent.call(player, player.media, 'durationchange');\n                }\n            });\n        });\n\n        player.embed.on('seeked', () => {\n            player.media.seeking = false;\n            triggerEvent.call(player, player.media, 'seeked');\n        });\n\n        player.embed.on('ended', () => {\n            player.media.paused = true;\n            triggerEvent.call(player, player.media, 'ended');\n        });\n\n        player.embed.on('error', detail => {\n            player.media.error = detail;\n            triggerEvent.call(player, player.media, 'error');\n        });\n\n        // Rebuild UI\n        setTimeout(() => ui.build.call(player), 0);\n    },\n};\n\nexport default vimeo;\n"",""// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { extend } from '../utils/objects';\nimport { format, generateId } from '../utils/strings';\nimport { setAspectRatio } from '../utils/style';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n    if (is.empty(url)) {\n        return null;\n    }\n\n    const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n        this.embed.hasPlayed = true;\n    }\n    if (this.media.paused === play) {\n        this.media.paused = !play;\n        triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n}\n\nfunction getHost(config) {\n    if (config.noCookie) {\n        return 'https://www.youtube-nocookie.com';\n    }\n\n    if (window.location.protocol === 'http:') {\n        return 'http://www.youtube.com';\n    }\n\n    // Use YouTube's default\n    return undefined;\n}\n\nconst youtube = {\n    setup() {\n        // Add embed class for responsive\n        toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set aspect ratio\n        setAspectRatio.call(this);\n\n        // Setup API\n        if (is.object(window.YT) && is.function(window.YT.Player)) {\n            youtube.ready.call(this);\n        } else {\n            // Load the API\n            loadScript(this.config.urls.youtube.sdk).catch(error => {\n                this.debug.warn('YouTube API failed to load', error);\n            });\n\n            // Setup callback for the API\n            // YouTube has it's own system of course...\n            window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n            // Add to queue\n            window.onYouTubeReadyCallbacks.push(() => {\n                youtube.ready.call(this);\n            });\n\n            // Set callback to process queue\n            window.onYouTubeIframeAPIReady = () => {\n                window.onYouTubeReadyCallbacks.forEach(callback => {\n                    callback();\n                });\n            };\n        }\n    },\n\n    // Get the media title\n    getTitle(videoId) {\n        // Try via undocumented API method first\n        // This method disappears now and then though...\n        // https://github.com/sampotts/plyr/issues/709\n        if (is.function(this.embed.getVideoData)) {\n            const { title } = this.embed.getVideoData();\n\n            if (is.empty(title)) {\n                this.config.title = title;\n                ui.setTitle.call(this);\n                return;\n            }\n        }\n\n        // Or via Google API\n        const key = this.config.keys.google;\n        if (is.string(key) && !is.empty(key)) {\n            const url = format(this.config.urls.youtube.api, videoId, key);\n\n            fetch(url)\n                .then(result => {\n                    if (is.object(result)) {\n                        this.config.title = result.items[0].snippet.title;\n                        ui.setTitle.call(this);\n                    }\n                })\n                .catch(() => {});\n        }\n    },\n\n    // API ready\n    ready() {\n        const player = this;\n\n        // Ignore already setup (race condition)\n        const currentId = player.media.getAttribute('id');\n        if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n            return;\n        }\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (is.empty(source)) {\n            source = player.media.getAttribute(this.config.attributes.embed.id);\n        }\n\n        // Replace the <iframe> with a <div> due to YouTube API issues\n        const videoId = parseId(source);\n        const id = generateId(player.provider);\n\n        // Get poster, if already set\n        const { poster } = player;\n\n        // Replace media element\n        const container = createElement('div', { id, poster });\n        player.media = replaceElement(container, player.media);\n\n        // Id to poster wrapper\n        const posterSrc = format => `https://i.ytimg.com/vi/${videoId}/${format}default.jpg`;\n\n        // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n        loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n            .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n            .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n            .then(image => ui.setPoster.call(player, image.src))\n            .then(posterSrc => {\n                // If the image is padded, use background-size \""cover\"" instead (like youtube does too with their posters)\n                if (!posterSrc.includes('maxres')) {\n                    player.elements.poster.style.backgroundSize = 'cover';\n                }\n            })\n            .catch(() => {});\n\n        const config = player.config.youtube;\n\n        // Setup instance\n        // https://developers.google.com/youtube/iframe_api_reference\n        player.embed = new window.YT.Player(id, {\n            videoId,\n            host: getHost(config),\n            playerVars: extend(\n                {},\n                {\n                    autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n                    hl: player.config.hl, // iframe interface language\n                    controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n                    disablekb: 1, // Disable keyboard as we handle it\n                    playsinline: !player.config.fullscreen.iosNative ? 1 : 0, // Allow iOS inline playback\n                    // Captions are flaky on YouTube\n                    cc_load_policy: player.captions.active ? 1 : 0,\n                    cc_lang_pref: player.config.captions.language,\n                    // Tracking for stats\n                    widget_referrer: window ? window.location.href : null,\n                },\n                config,\n            ),\n            events: {\n                onError(event) {\n                    // YouTube may fire onError twice, so only handle it once\n                    if (!player.media.error) {\n                        const code = event.data;\n                        // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n                        const message =\n                            {\n                                2: 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n                                5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n                                100: 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n                                101: 'The owner of the requested video does not allow it to be played in embedded players.',\n                                150: 'The owner of the requested video does not allow it to be played in embedded players.',\n                            }[code] || 'An unknown error occured';\n\n                        player.media.error = { code, message };\n\n                        triggerEvent.call(player, player.media, 'error');\n                    }\n                },\n                onPlaybackRateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get current speed\n                    player.media.playbackRate = instance.getPlaybackRate();\n\n                    triggerEvent.call(player, player.media, 'ratechange');\n                },\n                onReady(event) {\n                    // Bail if onReady has already been called. See issue #1108\n                    if (is.function(player.media.play)) {\n                        return;\n                    }\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get the title\n                    youtube.getTitle.call(player, videoId);\n\n                    // Create a faux HTML5 API using the YouTube API\n                    player.media.play = () => {\n                        assurePlaybackState.call(player, true);\n                        instance.playVideo();\n                    };\n\n                    player.media.pause = () => {\n                        assurePlaybackState.call(player, false);\n                        instance.pauseVideo();\n                    };\n\n                    player.media.stop = () => {\n                        instance.stopVideo();\n                    };\n\n                    player.media.duration = instance.getDuration();\n                    player.media.paused = true;\n\n                    // Seeking\n                    player.media.currentTime = 0;\n                    Object.defineProperty(player.media, 'currentTime', {\n                        get() {\n                            return Number(instance.getCurrentTime());\n                        },\n                        set(time) {\n                            // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n                            if (player.paused && !player.embed.hasPlayed) {\n                                player.embed.mute();\n                            }\n\n                            // Set seeking state and trigger event\n                            player.media.seeking = true;\n                            triggerEvent.call(player, player.media, 'seeking');\n\n                            // Seek after events sent\n                            instance.seekTo(time);\n                        },\n                    });\n\n                    // Playback speed\n                    Object.defineProperty(player.media, 'playbackRate', {\n                        get() {\n                            return instance.getPlaybackRate();\n                        },\n                        set(input) {\n                            instance.setPlaybackRate(input);\n                        },\n                    });\n\n                    // Volume\n                    let { volume } = player.config;\n                    Object.defineProperty(player.media, 'volume', {\n                        get() {\n                            return volume;\n                        },\n                        set(input) {\n                            volume = input;\n                            instance.setVolume(volume * 100);\n                            triggerEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Muted\n                    let { muted } = player.config;\n                    Object.defineProperty(player.media, 'muted', {\n                        get() {\n                            return muted;\n                        },\n                        set(input) {\n                            const toggle = is.boolean(input) ? input : muted;\n                            muted = toggle;\n                            instance[toggle ? 'mute' : 'unMute']();\n                            triggerEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Source\n                    Object.defineProperty(player.media, 'currentSrc', {\n                        get() {\n                            return instance.getVideoUrl();\n                        },\n                    });\n\n                    // Ended\n                    Object.defineProperty(player.media, 'ended', {\n                        get() {\n                            return player.currentTime === player.duration;\n                        },\n                    });\n\n                    // Get available speeds\n                    player.options.speed = instance.getAvailablePlaybackRates();\n\n                    // Set the tabindex to avoid focus entering iframe\n                    if (player.supported.ui) {\n                        player.media.setAttribute('tabindex', -1);\n                    }\n\n                    triggerEvent.call(player, player.media, 'timeupdate');\n                    triggerEvent.call(player, player.media, 'durationchange');\n\n                    // Reset timer\n                    clearInterval(player.timers.buffering);\n\n                    // Setup buffering\n                    player.timers.buffering = setInterval(() => {\n                        // Get loaded % from YouTube\n                        player.media.buffered = instance.getVideoLoadedFraction();\n\n                        // Trigger progress only when we actually buffer something\n                        if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n                            triggerEvent.call(player, player.media, 'progress');\n                        }\n\n                        // Set last buffer point\n                        player.media.lastBuffered = player.media.buffered;\n\n                        // Bail if we're at 100%\n                        if (player.media.buffered === 1) {\n                            clearInterval(player.timers.buffering);\n\n                            // Trigger event\n                            triggerEvent.call(player, player.media, 'canplaythrough');\n                        }\n                    }, 200);\n\n                    // Rebuild UI\n                    setTimeout(() => ui.build.call(player), 50);\n                },\n                onStateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Reset timer\n                    clearInterval(player.timers.playing);\n\n                    const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n                    if (seeked) {\n                        // Unset seeking and fire seeked event\n                        player.media.seeking = false;\n                        triggerEvent.call(player, player.media, 'seeked');\n                    }\n\n                    // Handle events\n                    // -1   Unstarted\n                    // 0    Ended\n                    // 1    Playing\n                    // 2    Paused\n                    // 3    Buffering\n                    // 5    Video cued\n                    switch (event.data) {\n                        case -1:\n                            // Update scrubber\n                            triggerEvent.call(player, player.media, 'timeupdate');\n\n                            // Get loaded % from YouTube\n                            player.media.buffered = instance.getVideoLoadedFraction();\n                            triggerEvent.call(player, player.media, 'progress');\n\n                            break;\n\n                        case 0:\n                            assurePlaybackState.call(player, false);\n\n                            // YouTube doesn't support loop for a single video, so mimick it.\n                            if (player.media.loop) {\n                                // YouTube needs a call to `stopVideo` before playing again\n                                instance.stopVideo();\n                                instance.playVideo();\n                            } else {\n                                triggerEvent.call(player, player.media, 'ended');\n                            }\n\n                            break;\n\n                        case 1:\n                            // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n                            if (!player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {\n                                player.media.pause();\n                            } else {\n                                assurePlaybackState.call(player, true);\n\n                                triggerEvent.call(player, player.media, 'playing');\n\n                                // Poll to get playback progress\n                                player.timers.playing = setInterval(() => {\n                                    triggerEvent.call(player, player.media, 'timeupdate');\n                                }, 50);\n\n                                // Check duration again due to YouTube bug\n                                // https://github.com/sampotts/plyr/issues/374\n                                // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n                                if (player.media.duration !== instance.getDuration()) {\n                                    player.media.duration = instance.getDuration();\n                                    triggerEvent.call(player, player.media, 'durationchange');\n                                }\n                            }\n\n                            break;\n\n                        case 2:\n                            // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n                            if (!player.muted) {\n                                player.embed.unMute();\n                            }\n                            assurePlaybackState.call(player, false);\n\n                            break;\n\n                        default:\n                            break;\n                    }\n\n                    triggerEvent.call(player, player.elements.container, 'statechange', false, {\n                        code: event.data,\n                    });\n                },\n            },\n        });\n    },\n};\n\nexport default youtube;\n"",""// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\n\nconst media = {\n    // Setup media\n    setup() {\n        // If there's no media, bail\n        if (!this.media) {\n            this.debug.warn('No media element found!');\n            return;\n        }\n\n        // Add type class\n        toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n        // Add provider class\n        toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n        // Add video class for embeds\n        // This will require changes if audio embeds are added\n        if (this.isEmbed) {\n            toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n        }\n\n        // Inject the player wrapper\n        if (this.isVideo) {\n            // Create the wrapper div\n            this.elements.wrapper = createElement('div', {\n                class: this.config.classNames.video,\n            });\n\n            // Wrap the video in a container\n            wrap(this.media, this.elements.wrapper);\n\n            // Faux poster container\n            this.elements.poster = createElement('div', {\n                class: this.config.classNames.poster,\n            });\n\n            this.elements.wrapper.appendChild(this.elements.poster);\n        }\n\n        if (this.isHTML5) {\n            html5.extend.call(this);\n        } else if (this.isYouTube) {\n            youtube.setup.call(this);\n        } else if (this.isVimeo) {\n            vimeo.setup.call(this);\n        }\n    },\n};\n\nexport default media;\n"",""// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n    /**\n     * Ads constructor.\n     * @param {Object} player\n     * @return {Ads}\n     */\n    constructor(player) {\n        this.player = player;\n        this.config = player.config.ads;\n        this.playing = false;\n        this.initialized = false;\n        this.elements = {\n            container: null,\n            displayContainer: null,\n        };\n        this.manager = null;\n        this.loader = null;\n        this.cuePoints = null;\n        this.events = {};\n        this.safetyTimer = null;\n        this.countdownTimer = null;\n\n        // Setup a promise to resolve when the IMA manager is ready\n        this.managerPromise = new Promise((resolve, reject) => {\n            // The ad is loaded and ready\n            this.on('loaded', resolve);\n\n            // Ads failed\n            this.on('error', reject);\n        });\n\n        this.load();\n    }\n\n    get enabled() {\n        const { config } = this;\n\n        return (\n            this.player.isHTML5 &&\n            this.player.isVideo &&\n            config.enabled &&\n            (!is.empty(config.publisherId) || is.url(config.tagUrl))\n        );\n    }\n\n    /**\n     * Load the IMA SDK\n     */\n    load() {\n        if (this.enabled) {\n            // Check if the Google IMA3 SDK is loaded or load it ourselves\n            if (!is.object(window.google) || !is.object(window.google.ima)) {\n                loadScript(this.player.config.urls.googleIMA.sdk)\n                    .then(() => {\n                        this.ready();\n                    })\n                    .catch(() => {\n                        // Script failed to load or is blocked\n                        this.trigger('error', new Error('Google IMA SDK failed to load'));\n                    });\n            } else {\n                this.ready();\n            }\n        }\n    }\n\n    /**\n     * Get the ads instance ready\n     */\n    ready() {\n        // Start ticking our safety timer. If the whole advertisement\n        // thing doesn't resolve within our set time; we bail\n        this.startSafetyTimer(12000, 'ready()');\n\n        // Clear the safety timer\n        this.managerPromise.then(() => {\n            this.clearSafetyTimer('onAdsManagerLoaded()');\n        });\n\n        // Set listeners on the Plyr instance\n        this.listeners();\n\n        // Setup the IMA SDK\n        this.setupIMA();\n    }\n\n    // Build the tag URL\n    get tagUrl() {\n        const { config } = this;\n\n        if (is.url(config.tagUrl)) {\n            return config.tagUrl;\n        }\n\n        const params = {\n            AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n            AV_CHANNELID: '5a0458dc28a06145e4519d21',\n            AV_URL: window.location.hostname,\n            cb: Date.now(),\n            AV_WIDTH: 640,\n            AV_HEIGHT: 480,\n            AV_CDIM2: this.publisherId,\n        };\n\n        const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n        return `${base}?${buildUrlParams(params)}`;\n    }\n\n    /**\n     * In order for the SDK to display ads for our video, we need to tell it where to put them,\n     * so here we define our ad container. This div is set up to render on top of the video player.\n     * Using the code below, we tell the SDK to render ads within that div. We also provide a\n     * handle to the content video player - the SDK will poll the current time of our player to\n     * properly place mid-rolls. After we create the ad display container, we initialize it. On\n     * mobile devices, this initialization is done as the result of a user action.\n     */\n    setupIMA() {\n        // Create the container for our advertisements\n        this.elements.container = createElement('div', {\n            class: this.player.config.classNames.ads,\n        });\n\n        this.player.elements.container.appendChild(this.elements.container);\n\n        // So we can run VPAID2\n        google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n        // Set language\n        google.ima.settings.setLocale(this.player.config.ads.language);\n\n        // Set playback for iOS10+\n        google.ima.settings.setDisableCustomPlaybackForIOS10Plus(this.player.config.playsinline);\n\n        // We assume the adContainer is the video container of the plyr element that will house the ads\n        this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media);\n\n        // Request video ads to be pre-loaded\n        this.requestAds();\n    }\n\n    /**\n     * Request advertisements\n     */\n    requestAds() {\n        const { container } = this.player.elements;\n\n        try {\n            // Create ads loader\n            this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n            // Listen and respond to ads loaded and error events\n            this.loader.addEventListener(\n                google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n                event => this.onAdsManagerLoaded(event),\n                false,\n            );\n            this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n            // Request video ads\n            const request = new google.ima.AdsRequest();\n            request.adTagUrl = this.tagUrl;\n\n            // Specify the linear and nonlinear slot sizes. This helps the SDK\n            // to select the correct creative if multiple are returned\n            request.linearAdSlotWidth = container.offsetWidth;\n            request.linearAdSlotHeight = container.offsetHeight;\n            request.nonLinearAdSlotWidth = container.offsetWidth;\n            request.nonLinearAdSlotHeight = container.offsetHeight;\n\n            // We only overlay ads as we only support video.\n            request.forceNonLinearFullSlot = false;\n\n            // Mute based on current state\n            request.setAdWillPlayMuted(!this.player.muted);\n\n            this.loader.requestAds(request);\n        } catch (e) {\n            this.onAdError(e);\n        }\n    }\n\n    /**\n     * Update the ad countdown\n     * @param {Boolean} start\n     */\n    pollCountdown(start = false) {\n        if (!start) {\n            clearInterval(this.countdownTimer);\n            this.elements.container.removeAttribute('data-badge-text');\n            return;\n        }\n\n        const update = () => {\n            const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n            const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n            this.elements.container.setAttribute('data-badge-text', label);\n        };\n\n        this.countdownTimer = setInterval(update, 100);\n    }\n\n    /**\n     * This method is called whenever the ads are ready inside the AdDisplayContainer\n     * @param {Event} adsManagerLoadedEvent\n     */\n    onAdsManagerLoaded(event) {\n        // Load could occur after a source change (race condition)\n        if (!this.enabled) {\n            return;\n        }\n\n        // Get the ads manager\n        const settings = new google.ima.AdsRenderingSettings();\n\n        // Tell the SDK to save and restore content video state on our behalf\n        settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n        settings.enablePreloading = true;\n\n        // The SDK is polling currentTime on the contentPlayback. And needs a duration\n        // so it can determine when to start the mid- and post-roll\n        this.manager = event.getAdsManager(this.player, settings);\n\n        // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n        this.cuePoints = this.manager.getCuePoints();\n\n        // Set volume to match player\n        this.manager.setVolume(this.player.volume);\n\n        // Add listeners to the required events\n        // Advertisement error events\n        this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n        // Advertisement regular events\n        Object.keys(google.ima.AdEvent.Type).forEach(type => {\n            this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n        });\n\n        // Resolve our adsManager\n        this.trigger('loaded');\n    }\n\n    addCuePoints() {\n        // Add advertisement cue's within the time line if available\n        if (!is.empty(this.cuePoints)) {\n            this.cuePoints.forEach(cuePoint => {\n                if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n                    const seekElement = this.player.elements.progress;\n\n                    if (is.element(seekElement)) {\n                        const cuePercentage = (100 / this.player.duration) * cuePoint;\n                        const cue = createElement('span', {\n                            class: this.player.config.classNames.cues,\n                        });\n\n                        cue.style.left = `${cuePercentage.toString()}%`;\n                        seekElement.appendChild(cue);\n                    }\n                }\n            });\n        }\n    }\n\n    /**\n     * This is where all the event handling takes place. Retrieve the ad from the event. Some\n     * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n     * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n     * @param {Event} event\n     */\n    onAdEvent(event) {\n        const { container } = this.player.elements;\n\n        // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n        // don't have ad object associated\n        const ad = event.getAd();\n        const adData = event.getAdData();\n\n        // Proxy event\n        const dispatchEvent = type => {\n            const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n            triggerEvent.call(this.player, this.player.media, event);\n        };\n\n        switch (event.type) {\n            case google.ima.AdEvent.Type.LOADED:\n                // This is the first event sent for an ad - it is possible to determine whether the\n                // ad is a video ad or an overlay\n                this.trigger('loaded');\n\n                // Bubble event\n                dispatchEvent(event.type);\n\n                // Start countdown\n                this.pollCountdown(true);\n\n                if (!ad.isLinear()) {\n                    // Position AdDisplayContainer correctly for overlay\n                    ad.width = container.offsetWidth;\n                    ad.height = container.offsetHeight;\n                }\n\n                // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n                // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n                break;\n\n            case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n                // All ads for the current videos are done. We can now request new advertisements\n                // in case the video is re-played\n\n                // Fire event\n                dispatchEvent(event.type);\n\n                // TODO: Example for what happens when a next video in a playlist would be loaded.\n                // So here we load a new video when all ads are done.\n                // Then we load new ads within a new adsManager. When the video\n                // Is started - after - the ads are loaded, then we get ads.\n                // You can also easily test cancelling and reloading by running\n                // player.ads.cancel() and player.ads.play from the console I guess.\n                // this.player.source = {\n                //     type: 'video',\n                //     title: 'View From A Blue Moon',\n                //     sources: [{\n                //         src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n                // 'video/mp4', }], poster:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n                // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n                // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n                // };\n\n                // TODO: So there is still this thing where a video should only be allowed to start\n                // playing when the IMA SDK is ready or has failed\n\n                this.loadAds();\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n                // This event indicates the ad has started - the video player can adjust the UI,\n                // for example display a pause button and remaining time. Fired when content should\n                // be paused. This usually happens right before an ad is about to cover the content\n\n                dispatchEvent(event.type);\n\n                this.pauseContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n                // This event indicates the ad has finished - the video player can perform\n                // appropriate UI actions, such as removing the timer for remaining time detection.\n                // Fired when content should be resumed. This usually happens when an ad finishes\n                // or collapses\n\n                dispatchEvent(event.type);\n\n                this.pollCountdown();\n\n                this.resumeContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.STARTED:\n            case google.ima.AdEvent.Type.MIDPOINT:\n            case google.ima.AdEvent.Type.COMPLETE:\n            case google.ima.AdEvent.Type.IMPRESSION:\n            case google.ima.AdEvent.Type.CLICK:\n                dispatchEvent(event.type);\n                break;\n\n            case google.ima.AdEvent.Type.LOG:\n                if (adData.adError) {\n                    this.player.debug.warn(`Non-fatal ad error: ${adData.adError.getMessage()}`);\n                }\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    /**\n     * Any ad error handling comes through here\n     * @param {Event} event\n     */\n    onAdError(event) {\n        this.cancel();\n        this.player.debug.warn('Ads error', event);\n    }\n\n    /**\n     * Setup hooks for Plyr and window events. This ensures\n     * the mid- and post-roll launch at the correct time. And\n     * resize the advertisement when the player resizes\n     */\n    listeners() {\n        const { container } = this.player.elements;\n        let time;\n\n        this.player.on('canplay', () => {\n            this.addCuePoints();\n        });\n\n        this.player.on('ended', () => {\n            this.loader.contentComplete();\n        });\n\n        this.player.on('timeupdate', () => {\n            time = this.player.currentTime;\n        });\n\n        this.player.on('seeked', () => {\n            const seekedTime = this.player.currentTime;\n\n            if (is.empty(this.cuePoints)) {\n                return;\n            }\n\n            this.cuePoints.forEach((cuePoint, index) => {\n                if (time < cuePoint && cuePoint < seekedTime) {\n                    this.manager.discardAdBreak();\n                    this.cuePoints.splice(index, 1);\n                }\n            });\n        });\n\n        // Listen to the resizing of the window. And resize ad accordingly\n        // TODO: eventually implement ResizeObserver\n        window.addEventListener('resize', () => {\n            if (this.manager) {\n                this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n            }\n        });\n    }\n\n    /**\n     * Initialize the adsManager and start playing advertisements\n     */\n    play() {\n        const { container } = this.player.elements;\n\n        if (!this.managerPromise) {\n            this.resumeContent();\n        }\n\n        // Play the requested advertisement whenever the adsManager is ready\n        this.managerPromise\n            .then(() => {\n                // Initialize the container. Must be done via a user action on mobile devices\n                this.elements.displayContainer.initialize();\n\n                try {\n                    if (!this.initialized) {\n                        // Initialize the ads manager. Ad rules playlist will start at this time\n                        this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n                        // Call play to start showing the ad. Single video and overlay ads will\n                        // start at this time; the call will be ignored for ad rules\n                        this.manager.start();\n                    }\n\n                    this.initialized = true;\n                } catch (adError) {\n                    // An error may be thrown if there was a problem with the\n                    // VAST response\n                    this.onAdError(adError);\n                }\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Resume our video\n     */\n    resumeContent() {\n        // Hide the advertisement container\n        this.elements.container.style.zIndex = '';\n\n        // Ad is stopped\n        this.playing = false;\n\n        // Play video\n        this.player.media.play();\n    }\n\n    /**\n     * Pause our video\n     */\n    pauseContent() {\n        // Show the advertisement container\n        this.elements.container.style.zIndex = 3;\n\n        // Ad is playing\n        this.playing = true;\n\n        // Pause our video.\n        this.player.media.pause();\n    }\n\n    /**\n     * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n     * allowed to call new ads based on google policies, as they interpret this as an accidental\n     * video requests. https://developers.google.com/interactive-\n     * media-ads/docs/sdks/android/faq#8\n     */\n    cancel() {\n        // Pause our video\n        if (this.initialized) {\n            this.resumeContent();\n        }\n\n        // Tell our instance that we're done for now\n        this.trigger('error');\n\n        // Re-create our adsManager\n        this.loadAds();\n    }\n\n    /**\n     * Re-create our adsManager\n     */\n    loadAds() {\n        // Tell our adsManager to go bye bye\n        this.managerPromise\n            .then(() => {\n                // Destroy our adsManager\n                if (this.manager) {\n                    this.manager.destroy();\n                }\n\n                // Re-set our adsManager promises\n                this.managerPromise = new Promise(resolve => {\n                    this.on('loaded', resolve);\n                    this.player.debug.log(this.manager);\n                });\n\n                // Now request some new advertisements\n                this.requestAds();\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Handles callbacks after an ad event was invoked\n     * @param {String} event - Event type\n     */\n    trigger(event, ...args) {\n        const handlers = this.events[event];\n\n        if (is.array(handlers)) {\n            handlers.forEach(handler => {\n                if (is.function(handler)) {\n                    handler.apply(this, args);\n                }\n            });\n        }\n    }\n\n    /**\n     * Add event listeners\n     * @param {String} event - Event type\n     * @param {Function} callback - Callback for when event occurs\n     * @return {Ads}\n     */\n    on(event, callback) {\n        if (!is.array(this.events[event])) {\n            this.events[event] = [];\n        }\n\n        this.events[event].push(callback);\n\n        return this;\n    }\n\n    /**\n     * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n     * The advertisement has 12 seconds to get its things together. We stop this timer when the\n     * advertisement is playing, or when a user action is required to start, then we clear the\n     * timer on ad ready\n     * @param {Number} time\n     * @param {String} from\n     */\n    startSafetyTimer(time, from) {\n        this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n        this.safetyTimer = setTimeout(() => {\n            this.cancel();\n            this.clearSafetyTimer('startSafetyTimer()');\n        }, time);\n    }\n\n    /**\n     * Clear our safety timer(s)\n     * @param {String} from\n     */\n    clearSafetyTimer(from) {\n        if (!is.nullOrUndefined(this.safetyTimer)) {\n            this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n            clearTimeout(this.safetyTimer);\n            this.safetyTimer = null;\n        }\n    }\n}\n\nexport default Ads;\n"",""import { createElement } from '../utils/elements';\nimport { once } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport { formatTime } from '../utils/time';\n\n// Arg: vttDataString example: \""WEBVTT\\n\\n1\\n00:00:05.000 --> 00:00:10.000\\n1080p-00001.jpg\""\nconst parseVtt = vttDataString => {\n    const processedList = [];\n    const frames = vttDataString.split(/\\r\\n\\r\\n|\\n\\n|\\r\\r/);\n\n    frames.forEach(frame => {\n        const result = {};\n        const lines = frame.split(/\\r\\n|\\n|\\r/);\n\n        lines.forEach(line => {\n            if (!is.number(result.startTime)) {\n                // The line with start and end times on it is the first line of interest\n                const matchTimes = line.match(\n                    /([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})( ?--> ?)([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})/,\n                ); // Note that this currently ignores caption formatting directives that are optionally on the end of this line - fine for non-captions VTT\n\n                if (matchTimes) {\n                    result.startTime =\n                        Number(matchTimes[1] || 0) * 60 * 60 +\n                        Number(matchTimes[2]) * 60 +\n                        Number(matchTimes[3]) +\n                        Number(`0.${matchTimes[4]}`);\n                    result.endTime =\n                        Number(matchTimes[6] || 0) * 60 * 60 +\n                        Number(matchTimes[7]) * 60 +\n                        Number(matchTimes[8]) +\n                        Number(`0.${matchTimes[9]}`);\n                }\n            } else if (!is.empty(line.trim()) && is.empty(result.text)) {\n                // If we already have the startTime, then we're definitely up to the text line(s)\n                const lineSplit = line.trim().split('#xywh=');\n                [result.text] = lineSplit;\n\n                // If there's content in lineSplit[1], then we have sprites. If not, then it's just one frame per image\n                if (lineSplit[1]) {\n                    [result.x, result.y, result.w, result.h] = lineSplit[1].split(',');\n                }\n            }\n        });\n\n        if (result.text) {\n            processedList.push(result);\n        }\n    });\n\n    return processedList;\n};\n\n/**\n * Preview thumbnails for seek hover and scrubbing\n * Seeking: Hover over the seek bar (desktop only): shows a small preview container above the seek bar\n * Scrubbing: Click and drag the seek bar (desktop and mobile): shows the preview image over the entire video, as if the video is scrubbing at very high speed\n *\n * Notes:\n * - Thumbs are set via JS settings on Plyr init, not HTML5 'track' property. Using the track property would be a bit gross, because it doesn't support custom 'kinds'. kind=metadata might be used for something else, and we want to allow multiple thumbnails tracks. Tracks must have a unique combination of 'kind' and 'label'. We would have to do something like kind=metadata,label=thumbnails1 / kind=metadata,label=thumbnails2. Square peg, round hole\n * - VTT info: the image URL is relative to the VTT, not the current document. But if the url starts with a slash, it will naturally be relative to the current domain. https://support.jwplayer.com/articles/how-to-add-preview-thumbnails\n * - This implementation uses multiple separate img elements. Other implementations use background-image on one element. This would be nice and simple, but Firefox and Safari have flickering issues with replacing backgrounds of larger images. It seems that YouTube perhaps only avoids this because they don't have the option for high-res previews (even the fullscreen ones, when mousedown/seeking). Images appear over the top of each other, and previous ones are discarded once the new ones have been rendered\n */\n\nclass PreviewThumbnails {\n    /**\n     * PreviewThumbnails constructor.\n     * @param {Plyr} player\n     * @return {PreviewThumbnails}\n     */\n    constructor(player) {\n        this.player = player;\n        this.thumbnails = [];\n        this.loaded = false;\n        this.lastMouseMoveTime = Date.now();\n        this.mouseDown = false;\n        this.loadedImages = [];\n\n        this.elements = {\n            thumb: {},\n            scrubbing: {},\n        };\n\n        this.load();\n    }\n\n    get enabled() {\n        return this.player.isHTML5 && this.player.isVideo && this.player.config.previewThumbnails.enabled;\n    }\n\n    load() {\n        // Togglethe regular seek tooltip\n        if (this.player.elements.display.seekTooltip) {\n            this.player.elements.display.seekTooltip.hidden = this.enabled;\n        }\n\n        if (!this.enabled) {\n            return;\n        }\n\n        this.getThumbnails().then(() => {\n            // Render DOM elements\n            this.render();\n\n            // Check to see if thumb container size was specified manually in CSS\n            this.determineContainerAutoSizing();\n\n            this.loaded = true;\n        });\n    }\n\n    // Download VTT files and parse them\n    getThumbnails() {\n        return new Promise(resolve => {\n            const { src } = this.player.config.previewThumbnails;\n\n            if (is.empty(src)) {\n                throw new Error('Missing previewThumbnails.src config attribute');\n            }\n\n            // If string, convert into single-element list\n            const urls = is.string(src) ? [src] : src;\n\n            // Loop through each src URL. Download and process the VTT file, storing the resulting data in this.thumbnails\n            const promises = urls.map(u => this.getThumbnail(u));\n\n            Promise.all(promises).then(() => {\n                // Sort smallest to biggest (e.g., [120p, 480p, 1080p])\n                this.thumbnails.sort((x, y) => x.height - y.height);\n\n                this.player.debug.log('Preview thumbnails', this.thumbnails);\n\n                resolve();\n            });\n        });\n    }\n\n    // Process individual VTT file\n    getThumbnail(url) {\n        return new Promise(resolve => {\n            fetch(url).then(response => {\n                const thumbnail = {\n                    frames: parseVtt(response),\n                    height: null,\n                    urlPrefix: '',\n                };\n\n                // If the URLs don't start with '/', then we need to set their relative path to be the location of the VTT file\n                // If the URLs do start with '/', then they obviously don't need a prefix, so it will remain blank\n                // If the thumbnail URLs start with with none of '/', 'http://' or 'https://', then we need to set their relative path to be the location of the VTT file\n                if (!thumbnail.frames[0].text.startsWith('/') &&\n                    !thumbnail.frames[0].text.startsWith('http://') &&\n                    !thumbnail.frames[0].text.startsWith('https://')) {\n                    thumbnail.urlPrefix = url.substring(0, url.lastIndexOf('/') + 1);\n                }\n\n                // Download the first frame, so that we can determine/set the height of this thumbnailsDef\n                const tempImage = new Image();\n\n                tempImage.onload = () => {\n                    thumbnail.height = tempImage.naturalHeight;\n                    thumbnail.width = tempImage.naturalWidth;\n\n                    this.thumbnails.push(thumbnail);\n\n                    resolve();\n                };\n\n                tempImage.src = thumbnail.urlPrefix + thumbnail.frames[0].text;\n            });\n        });\n    }\n\n    startMove(event) {\n        if (!this.loaded) {\n            return;\n        }\n\n        if (!is.event(event) || !['touchmove', 'mousemove'].includes(event.type)) {\n            return;\n        }\n\n        // Wait until media has a duration\n        if (!this.player.media.duration) {\n            return;\n        }\n\n        if (event.type === 'touchmove') {\n            // Calculate seek hover position as approx video seconds\n            this.seekTime = this.player.media.duration * (this.player.elements.inputs.seek.value / 100);\n        } else {\n            // Calculate seek hover position as approx video seconds\n            const clientRect = this.player.elements.progress.getBoundingClientRect();\n            const percentage = (100 / clientRect.width) * (event.pageX - clientRect.left);\n            this.seekTime = this.player.media.duration * (percentage / 100);\n\n            if (this.seekTime < 0) {\n                // The mousemove fires for 10+px out to the left\n                this.seekTime = 0;\n            }\n\n            if (this.seekTime > this.player.media.duration - 1) {\n                // Took 1 second off the duration for safety, because different players can disagree on the real duration of a video\n                this.seekTime = this.player.media.duration - 1;\n            }\n\n            this.mousePosX = event.pageX;\n\n            // Set time text inside image container\n            this.elements.thumb.time.innerText = formatTime(this.seekTime);\n        }\n\n        // Download and show image\n        this.showImageAtCurrentTime();\n    }\n\n    endMove() {\n        this.toggleThumbContainer(false, true);\n    }\n\n    startScrubbing(event) {\n        // Only act on left mouse button (0), or touch device (event.button is false)\n        if (event.button === false || event.button === 0) {\n            this.mouseDown = true;\n\n            // Wait until media has a duration\n            if (this.player.media.duration) {\n                this.toggleScrubbingContainer(true);\n                this.toggleThumbContainer(false, true);\n\n                // Download and show image\n                this.showImageAtCurrentTime();\n            }\n        }\n    }\n\n    endScrubbing() {\n        this.mouseDown = false;\n\n        // Hide scrubbing preview. But wait until the video has successfully seeked before hiding the scrubbing preview\n        if (Math.ceil(this.lastTime) === Math.ceil(this.player.media.currentTime)) {\n            // The video was already seeked/loaded at the chosen time - hide immediately\n            this.toggleScrubbingContainer(false);\n        } else {\n            // The video hasn't seeked yet. Wait for that\n            once.call(this.player, this.player.media, 'timeupdate', () => {\n                // Re-check mousedown - we might have already started scrubbing again\n                if (!this.mouseDown) {\n                    this.toggleScrubbingContainer(false);\n                }\n            });\n        }\n    }\n\n    /**\n     * Setup hooks for Plyr and window events\n     */\n    listeners() {\n        // Hide thumbnail preview - on mouse click, mouse leave (in listeners.js for now), and video play/seek. All four are required, e.g., for buffering\n        this.player.on('play', () => {\n            this.toggleThumbContainer(false, true);\n        });\n\n        this.player.on('seeked', () => {\n            this.toggleThumbContainer(false);\n        });\n\n        this.player.on('timeupdate', () => {\n            this.lastTime = this.player.media.currentTime;\n        });\n    }\n\n    /**\n     * Create HTML elements for image containers\n     */\n    render() {\n        // Create HTML element: plyr__preview-thumbnail-container\n        this.elements.thumb.container = createElement('div', {\n            class: this.player.config.classNames.previewThumbnails.thumbContainer,\n        });\n\n        // Wrapper for the image for styling\n        this.elements.thumb.imageContainer = createElement('div', {\n            class: this.player.config.classNames.previewThumbnails.imageContainer,\n        });\n        this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer);\n\n        // Create HTML element, parent+span: time text (e.g., 01:32:00)\n        const timeContainer = createElement('div', {\n            class: this.player.config.classNames.previewThumbnails.timeContainer,\n        });\n\n        this.elements.thumb.time = createElement('span', {}, '00:00');\n        timeContainer.appendChild(this.elements.thumb.time);\n\n        this.elements.thumb.container.appendChild(timeContainer);\n\n        // Inject the whole thumb\n        this.player.elements.progress.appendChild(this.elements.thumb.container);\n\n        // Create HTML element: plyr__preview-scrubbing-container\n        this.elements.scrubbing.container = createElement('div', {\n            class: this.player.config.classNames.previewThumbnails.scrubbingContainer,\n        });\n\n        this.player.elements.wrapper.appendChild(this.elements.scrubbing.container);\n    }\n\n    showImageAtCurrentTime() {\n        if (this.mouseDown) {\n            this.setScrubbingContainerSize();\n        } else {\n            this.setThumbContainerSizeAndPos();\n        }\n\n        // Find the desired thumbnail index\n        // TODO: Handle a video longer than the thumbs where thumbNum is null\n        const thumbNum = this.thumbnails[0].frames.findIndex(\n            frame => this.seekTime >= frame.startTime && this.seekTime <= frame.endTime,\n        );\n        const hasThumb = thumbNum >= 0;\n        let qualityIndex = 0;\n\n        // Show the thumb container if we're not scrubbing\n        if (!this.mouseDown) {\n            this.toggleThumbContainer(hasThumb);\n        }\n\n        // No matching thumb found\n        if (!hasThumb) {\n            return;\n        }\n\n        // Check to see if we've already downloaded higher quality versions of this image\n        this.thumbnails.forEach((thumbnail, index) => {\n            if (this.loadedImages.includes(thumbnail.frames[thumbNum].text)) {\n                qualityIndex = index;\n            }\n        });\n\n        // Only proceed if either thumbnum or thumbfilename has changed\n        if (thumbNum !== this.showingThumb) {\n            this.showingThumb = thumbNum;\n            this.loadImage(qualityIndex);\n        }\n    }\n\n    // Show the image that's currently specified in this.showingThumb\n    loadImage(qualityIndex = 0) {\n        const thumbNum = this.showingThumb;\n        const thumbnail = this.thumbnails[qualityIndex];\n        const { urlPrefix } = thumbnail;\n        const frame = thumbnail.frames[thumbNum];\n        const thumbFilename = thumbnail.frames[thumbNum].text;\n        const thumbUrl = urlPrefix + thumbFilename;\n\n        if (!this.currentImageElement || this.currentImageElement.dataset.filename !== thumbFilename) {\n            // If we're already loading a previous image, remove its onload handler - we don't want it to load after this one\n            // Only do this if not using sprites. Without sprites we really want to show as many images as possible, as a best-effort\n            if (this.loadingImage && this.usingSprites) {\n                this.loadingImage.onload = null;\n            }\n\n            // We're building and adding a new image. In other implementations of similar functionality (YouTube), background image\n            // is instead used. But this causes issues with larger images in Firefox and Safari - switching between background\n            // images causes a flicker. Putting a new image over the top does not\n            const previewImage = new Image();\n            previewImage.src = thumbUrl;\n            previewImage.dataset.index = thumbNum;\n            previewImage.dataset.filename = thumbFilename;\n            this.showingThumbFilename = thumbFilename;\n\n            this.player.debug.log(`Loading image: ${thumbUrl}`);\n\n            // For some reason, passing the named function directly causes it to execute immediately. So I've wrapped it in an anonymous function...\n            previewImage.onload = () =>\n                this.showImage(previewImage, frame, qualityIndex, thumbNum, thumbFilename, true);\n            this.loadingImage = previewImage;\n            this.removeOldImages(previewImage);\n        } else {\n            // Update the existing image\n            this.showImage(this.currentImageElement, frame, qualityIndex, thumbNum, thumbFilename, false);\n            this.currentImageElement.dataset.index = thumbNum;\n            this.removeOldImages(this.currentImageElement);\n        }\n    }\n\n    showImage(previewImage, frame, qualityIndex, thumbNum, thumbFilename, newImage = true) {\n        this.player.debug.log(\n            `Showing thumb: ${thumbFilename}. num: ${thumbNum}. qual: ${qualityIndex}. newimg: ${newImage}`,\n        );\n        this.setImageSizeAndOffset(previewImage, frame);\n\n        if (newImage) {\n            this.currentImageContainer.appendChild(previewImage);\n            this.currentImageElement = previewImage;\n\n            if (!this.loadedImages.includes(thumbFilename)) {\n                this.loadedImages.push(thumbFilename);\n            }\n        }\n\n        // Preload images before and after the current one\n        // Show higher quality of the same frame\n        // Each step here has a short time delay, and only continues if still hovering/seeking the same spot. This is to protect slow connections from overloading\n        this.preloadNearby(thumbNum, true)\n            .then(this.preloadNearby(thumbNum, false))\n            .then(this.getHigherQuality(qualityIndex, previewImage, frame, thumbFilename));\n    }\n\n    // Remove all preview images that aren't the designated current image\n    removeOldImages(currentImage) {\n        // Get a list of all images, convert it from a DOM list to an array\n        Array.from(this.currentImageContainer.children).forEach(image => {\n            if (image.tagName.toLowerCase() !== 'img') {\n                return;\n            }\n\n            const removeDelay = this.usingSprites ? 500 : 1000;\n\n            if (image.dataset.index !== currentImage.dataset.index && !image.dataset.deleting) {\n                // Wait 200ms, as the new image can take some time to show on certain browsers (even though it was downloaded before showing). This will prevent flicker, and show some generosity towards slower clients\n                // First set attribute 'deleting' to prevent multi-handling of this on repeat firing of this function\n                image.dataset.deleting = true;\n                // This has to be set before the timeout - to prevent issues switching between hover and scrub\n                const { currentImageContainer } = this;\n\n                setTimeout(() => {\n                    currentImageContainer.removeChild(image);\n                    this.player.debug.log(`Removing thumb: ${image.dataset.filename}`);\n                }, removeDelay);\n            }\n        });\n    }\n\n    // Preload images before and after the current one. Only if the user is still hovering/seeking the same frame\n    // This will only preload the lowest quality\n    preloadNearby(thumbNum, forward = true) {\n        return new Promise(resolve => {\n            setTimeout(() => {\n                const oldThumbFilename = this.thumbnails[0].frames[thumbNum].text;\n\n                if (this.showingThumbFilename === oldThumbFilename) {\n                    // Find the nearest thumbs with different filenames. Sometimes it'll be the next index, but in the case of sprites, it might be 100+ away\n                    let thumbnailsClone;\n                    if (forward) {\n                        thumbnailsClone = this.thumbnails[0].frames.slice(thumbNum);\n                    } else {\n                        thumbnailsClone = this.thumbnails[0].frames.slice(0, thumbNum).reverse();\n                    }\n\n                    let foundOne = false;\n\n                    thumbnailsClone.forEach(frame => {\n                        const newThumbFilename = frame.text;\n\n                        if (newThumbFilename !== oldThumbFilename) {\n                            // Found one with a different filename. Make sure it hasn't already been loaded on this page visit\n                            if (!this.loadedImages.includes(newThumbFilename)) {\n                                foundOne = true;\n                                this.player.debug.log(`Preloading thumb filename: ${newThumbFilename}`);\n\n                                const { urlPrefix } = this.thumbnails[0];\n                                const thumbURL = urlPrefix + newThumbFilename;\n\n                                const previewImage = new Image();\n                                previewImage.src = thumbURL;\n                                previewImage.onload = () => {\n                                    this.player.debug.log(`Preloaded thumb filename: ${newThumbFilename}`);\n                                    if (!this.loadedImages.includes(newThumbFilename))\n                                        this.loadedImages.push(newThumbFilename);\n\n                                    // We don't resolve until the thumb is loaded\n                                    resolve();\n                                };\n                            }\n                        }\n                    });\n\n                    // If there are none to preload then we want to resolve immediately\n                    if (!foundOne) {\n                        resolve();\n                    }\n                }\n            }, 300);\n        });\n    }\n\n    // If user has been hovering current image for half a second, look for a higher quality one\n    getHigherQuality(currentQualityIndex, previewImage, frame, thumbFilename) {\n        if (currentQualityIndex < this.thumbnails.length - 1) {\n            // Only use the higher quality version if it's going to look any better - if the current thumb is of a lower pixel density than the thumbnail container\n            let previewImageHeight = previewImage.naturalHeight;\n\n            if (this.usingSprites) {\n                previewImageHeight = frame.h;\n            }\n\n            if (previewImageHeight < this.thumbContainerHeight) {\n                // Recurse back to the loadImage function - show a higher quality one, but only if the viewer is on this frame for a while\n                setTimeout(() => {\n                    // Make sure the mouse hasn't already moved on and started hovering at another image\n                    if (this.showingThumbFilename === thumbFilename) {\n                        this.player.debug.log(`Showing higher quality thumb for: ${thumbFilename}`);\n                        this.loadImage(currentQualityIndex + 1);\n                    }\n                }, 300);\n            }\n        }\n    }\n\n    get currentImageContainer() {\n        if (this.mouseDown) {\n            return this.elements.scrubbing.container;\n        }\n\n        return this.elements.thumb.imageContainer;\n    }\n\n    get usingSprites() {\n        return Object.keys(this.thumbnails[0].frames[0]).includes('w');\n    }\n\n    get thumbAspectRatio() {\n        if (this.usingSprites) {\n            return this.thumbnails[0].frames[0].w / this.thumbnails[0].frames[0].h;\n        }\n\n        return this.thumbnails[0].width / this.thumbnails[0].height;\n    }\n\n    get thumbContainerHeight() {\n        if (this.mouseDown) {\n            // Can't use media.clientHeight - HTML5 video goes big and does black bars above and below\n            return Math.floor(this.player.media.clientWidth / this.thumbAspectRatio);\n        }\n\n        return Math.floor(this.player.media.clientWidth / this.thumbAspectRatio / 4);\n    }\n\n    get currentImageElement() {\n        if (this.mouseDown) {\n            return this.currentScrubbingImageElement;\n        }\n\n        return this.currentThumbnailImageElement;\n    }\n\n    set currentImageElement(element) {\n        if (this.mouseDown) {\n            this.currentScrubbingImageElement = element;\n        } else {\n            this.currentThumbnailImageElement = element;\n        }\n    }\n\n    toggleThumbContainer(toggle = false, clearShowing = false) {\n        const className = this.player.config.classNames.previewThumbnails.thumbContainerShown;\n        this.elements.thumb.container.classList.toggle(className, toggle);\n\n        if (!toggle && clearShowing) {\n            this.showingThumb = null;\n            this.showingThumbFilename = null;\n        }\n    }\n\n    toggleScrubbingContainer(toggle = false) {\n        const className = this.player.config.classNames.previewThumbnails.scrubbingContainerShown;\n        this.elements.scrubbing.container.classList.toggle(className, toggle);\n\n        if (!toggle) {\n            this.showingThumb = null;\n            this.showingThumbFilename = null;\n        }\n    }\n\n    determineContainerAutoSizing() {\n        if (this.elements.thumb.imageContainer.clientHeight > 20) {\n            // This will prevent auto sizing in this.setThumbContainerSizeAndPos()\n            this.sizeSpecifiedInCSS = true;\n        }\n    }\n\n    // Set the size to be about a quarter of the size of video. Unless option dynamicSize === false, in which case it needs to be set in CSS\n    setThumbContainerSizeAndPos() {\n        if (!this.sizeSpecifiedInCSS) {\n            const thumbWidth = Math.floor(this.thumbContainerHeight * this.thumbAspectRatio);\n            this.elements.thumb.imageContainer.style.height = `${this.thumbContainerHeight}px`;\n            this.elements.thumb.imageContainer.style.width = `${thumbWidth}px`;\n        }\n\n        this.setThumbContainerPos();\n    }\n\n    setThumbContainerPos() {\n        const seekbarRect = this.player.elements.progress.getBoundingClientRect();\n        const plyrRect = this.player.elements.container.getBoundingClientRect();\n        const { container } = this.elements.thumb;\n\n        // Find the lowest and highest desired left-position, so we don't slide out the side of the video container\n        const minVal = plyrRect.left - seekbarRect.left + 10;\n        const maxVal = plyrRect.right - seekbarRect.left - container.clientWidth - 10;\n\n        // Set preview container position to: mousepos, minus seekbar.left, minus half of previewContainer.clientWidth\n        let previewPos = this.mousePosX - seekbarRect.left - container.clientWidth / 2;\n\n        if (previewPos < minVal) {\n            previewPos = minVal;\n        }\n\n        if (previewPos > maxVal) {\n            previewPos = maxVal;\n        }\n\n        container.style.left = `${previewPos}px`;\n    }\n\n    // Can't use 100% width, in case the video is a different aspect ratio to the video container\n    setScrubbingContainerSize() {\n        this.elements.scrubbing.container.style.width = `${this.player.media.clientWidth}px`;\n        // Can't use media.clientHeight - html5 video goes big and does black bars above and below\n        this.elements.scrubbing.container.style.height = `${this.player.media.clientWidth / this.thumbAspectRatio}px`;\n    }\n\n    // Sprites need to be offset to the correct location\n    setImageSizeAndOffset(previewImage, frame) {\n        if (!this.usingSprites) {\n            return;\n        }\n\n        // Find difference between height and preview container height\n        const multiplier = this.thumbContainerHeight / frame.h;\n\n        previewImage.style.height = `${Math.floor(previewImage.naturalHeight * multiplier)}px`;\n        previewImage.style.width = `${Math.floor(previewImage.naturalWidth * multiplier)}px`;\n        previewImage.style.left = `-${frame.x * multiplier}px`;\n        previewImage.style.top = `-${frame.y * multiplier}px`;\n    }\n}\n\nexport default PreviewThumbnails;\n"",""// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n    // Add elements to HTML5 media (source, tracks, etc)\n    insertElements(type, attributes) {\n        if (is.string(attributes)) {\n            insertElement(type, this.media, {\n                src: attributes,\n            });\n        } else if (is.array(attributes)) {\n            attributes.forEach(attribute => {\n                insertElement(type, this.media, attribute);\n            });\n        }\n    },\n\n    // Update source\n    // Sources are not checked for support so be careful\n    change(input) {\n        if (!getDeep(input, 'sources.length')) {\n            this.debug.warn('Invalid source format');\n            return;\n        }\n\n        // Cancel current network requests\n        html5.cancelRequests.call(this);\n\n        // Destroy instance and re-setup\n        this.destroy.call(\n            this,\n            () => {\n                // Reset quality options\n                this.options.quality = [];\n\n                // Remove elements\n                removeElement(this.media);\n                this.media = null;\n\n                // Reset class name\n                if (is.element(this.elements.container)) {\n                    this.elements.container.removeAttribute('class');\n                }\n\n                // Set the type and provider\n                const { sources, type } = input;\n                const [{ provider = providers.html5, src }] = sources;\n                const tagName = provider === 'html5' ? type : 'div';\n                const attributes = provider === 'html5' ? {} : { src };\n\n                Object.assign(this, {\n                    provider,\n                    type,\n                    // Check for support\n                    supported: support.check(type, provider, this.config.playsinline),\n                    // Create new element\n                    media: createElement(tagName, attributes),\n                });\n\n                // Inject the new element\n                this.elements.container.appendChild(this.media);\n\n                // Autoplay the new source?\n                if (is.boolean(input.autoplay)) {\n                    this.config.autoplay = input.autoplay;\n                }\n\n                // Set attributes for audio and video\n                if (this.isHTML5) {\n                    if (this.config.crossorigin) {\n                        this.media.setAttribute('crossorigin', '');\n                    }\n                    if (this.config.autoplay) {\n                        this.media.setAttribute('autoplay', '');\n                    }\n                    if (!is.empty(input.poster)) {\n                        this.poster = input.poster;\n                    }\n                    if (this.config.loop.active) {\n                        this.media.setAttribute('loop', '');\n                    }\n                    if (this.config.muted) {\n                        this.media.setAttribute('muted', '');\n                    }\n                    if (this.config.playsinline) {\n                        this.media.setAttribute('playsinline', '');\n                    }\n                }\n\n                // Restore class hook\n                ui.addStyleHook.call(this);\n\n                // Set new sources for html5\n                if (this.isHTML5) {\n                    source.insertElements.call(this, 'source', sources);\n                }\n\n                // Set video title\n                this.config.title = input.title;\n\n                // Set up from scratch\n                media.setup.call(this);\n\n                // HTML5 stuff\n                if (this.isHTML5) {\n                    // Setup captions\n                    if (Object.keys(input).includes('tracks')) {\n                        source.insertElements.call(this, 'track', input.tracks);\n                    }\n                }\n\n                // If HTML5 or embed but not fully supported, setupInterface and call ready now\n                if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n                    // Setup interface\n                    ui.build.call(this);\n                }\n\n                // Load HTML5 sources\n                if (this.isHTML5) {\n                    this.media.load();\n                }\n\n                // Reload thumbnails\n                if (this.previewThumbnails) {\n                    this.previewThumbnails.load();\n                }\n\n                // Update the fullscreen support\n                this.fullscreen.update();\n            },\n            true,\n        );\n    },\n};\n\nexport default source;\n"",""// ==========================================================================\n// Plyr\n// plyr.js v3.5.3\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport PreviewThumbnails from './plugins/previewThumbnails';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { getAspectRatio, reduceAspectRatio, setAspectRatio, validateRatio } from './utils/style';\nimport { parseUrl } from './utils/urls';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n    constructor(target, options) {\n        this.timers = {};\n\n        // State\n        this.ready = false;\n        this.loading = false;\n        this.failed = false;\n\n        // Touch device\n        this.touch = support.touch;\n\n        // Set the media element\n        this.media = target;\n\n        // String selector passed\n        if (is.string(this.media)) {\n            this.media = document.querySelectorAll(this.media);\n        }\n\n        // jQuery, NodeList or Array passed, use first element\n        if ((window.jQuery && this.media instanceof jQuery) || is.nodeList(this.media) || is.array(this.media)) {\n            // eslint-disable-next-line\n            this.media = this.media[0];\n        }\n\n        // Set config\n        this.config = extend(\n            {},\n            defaults,\n            Plyr.defaults,\n            options || {},\n            (() => {\n                try {\n                    return JSON.parse(this.media.getAttribute('data-plyr-config'));\n                } catch (e) {\n                    return {};\n                }\n            })(),\n        );\n\n        // Elements cache\n        this.elements = {\n            container: null,\n            captions: null,\n            buttons: {},\n            display: {},\n            progress: {},\n            inputs: {},\n            settings: {\n                popup: null,\n                menu: null,\n                panels: {},\n                buttons: {},\n            },\n        };\n\n        // Captions\n        this.captions = {\n            active: null,\n            currentTrack: -1,\n            meta: new WeakMap(),\n        };\n\n        // Fullscreen\n        this.fullscreen = {\n            active: false,\n        };\n\n        // Options\n        this.options = {\n            speed: [],\n            quality: [],\n        };\n\n        // Debugging\n        // TODO: move to globals\n        this.debug = new Console(this.config.debug);\n\n        // Log config options and support\n        this.debug.log('Config', this.config);\n        this.debug.log('Support', support);\n\n        // We need an element to setup\n        if (is.nullOrUndefined(this.media) || !is.element(this.media)) {\n            this.debug.error('Setup failed: no suitable element passed');\n            return;\n        }\n\n        // Bail if the element is initialized\n        if (this.media.plyr) {\n            this.debug.warn('Target already setup');\n            return;\n        }\n\n        // Bail if not enabled\n        if (!this.config.enabled) {\n            this.debug.error('Setup failed: disabled by config');\n            return;\n        }\n\n        // Bail if disabled or no basic support\n        // You may want to disable certain UAs etc\n        if (!support.check().api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        // Cache original element state for .destroy()\n        const clone = this.media.cloneNode(true);\n        clone.autoplay = false;\n        this.elements.original = clone;\n\n        // Set media type based on tag or data attribute\n        // Supported: video, audio, vimeo, youtube\n        const type = this.media.tagName.toLowerCase();\n\n        // Embed properties\n        let iframe = null;\n        let url = null;\n\n        // Different setup based on type\n        switch (type) {\n            case 'div':\n                // Find the frame\n                iframe = this.media.querySelector('iframe');\n\n                // <iframe> type\n                if (is.element(iframe)) {\n                    // Detect provider\n                    url = parseUrl(iframe.getAttribute('src'));\n                    this.provider = getProviderByUrl(url.toString());\n\n                    // Rework elements\n                    this.elements.container = this.media;\n                    this.media = iframe;\n\n                    // Reset classname\n                    this.elements.container.className = '';\n\n                    // Get attributes from URL and set config\n                    if (url.search.length) {\n                        const truthy = ['1', 'true'];\n\n                        if (truthy.includes(url.searchParams.get('autoplay'))) {\n                            this.config.autoplay = true;\n                        }\n                        if (truthy.includes(url.searchParams.get('loop'))) {\n                            this.config.loop.active = true;\n                        }\n\n                        // TODO: replace fullscreen.iosNative with this playsinline config option\n                        // YouTube requires the playsinline in the URL\n                        if (this.isYouTube) {\n                            this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n                            this.config.youtube.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n                        } else {\n                            this.config.playsinline = true;\n                        }\n                    }\n                } else {\n                    // <div> with attributes\n                    this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n                    // Remove attribute\n                    this.media.removeAttribute(this.config.attributes.embed.provider);\n                }\n\n                // Unsupported or missing provider\n                if (is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n                    this.debug.error('Setup failed: Invalid provider');\n                    return;\n                }\n\n                // Audio will come later for external providers\n                this.type = types.video;\n\n                break;\n\n            case 'video':\n            case 'audio':\n                this.type = type;\n                this.provider = providers.html5;\n\n                // Get config from attributes\n                if (this.media.hasAttribute('crossorigin')) {\n                    this.config.crossorigin = true;\n                }\n                if (this.media.hasAttribute('autoplay')) {\n                    this.config.autoplay = true;\n                }\n                if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {\n                    this.config.playsinline = true;\n                }\n                if (this.media.hasAttribute('muted')) {\n                    this.config.muted = true;\n                }\n                if (this.media.hasAttribute('loop')) {\n                    this.config.loop.active = true;\n                }\n\n                break;\n\n            default:\n                this.debug.error('Setup failed: unsupported type');\n                return;\n        }\n\n        // Check for support again but with type\n        this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n        // If no support for even API, bail\n        if (!this.supported.api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        this.eventListeners = [];\n\n        // Create listeners\n        this.listeners = new Listeners(this);\n\n        // Setup local storage for user settings\n        this.storage = new Storage(this);\n\n        // Store reference\n        this.media.plyr = this;\n\n        // Wrap media\n        if (!is.element(this.elements.container)) {\n            this.elements.container = createElement('div', { tabindex: 0 });\n            wrap(this.media, this.elements.container);\n        }\n\n        // Add style hook\n        ui.addStyleHook.call(this);\n\n        // Setup media\n        media.setup.call(this);\n\n        // Listen for events if debugging\n        if (this.config.debug) {\n            on.call(this, this.elements.container, this.config.events.join(' '), event => {\n                this.debug.log(`event: ${event.type}`);\n            });\n        }\n\n        // Setup interface\n        // If embed but not fully supported, build interface now to avoid flash of controls\n        if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n            ui.build.call(this);\n        }\n\n        // Container listeners\n        this.listeners.container();\n\n        // Global listeners\n        this.listeners.global();\n\n        // Setup fullscreen\n        this.fullscreen = new Fullscreen(this);\n\n        // Setup ads if provided\n        if (this.config.ads.enabled) {\n            this.ads = new Ads(this);\n        }\n\n        // Autoplay if required\n        if (this.isHTML5 && this.config.autoplay) {\n            setTimeout(() => this.play(), 10);\n        }\n\n        // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n        this.lastSeekTime = 0;\n\n        // Setup preview thumbnails if enabled\n        if (this.config.previewThumbnails.enabled) {\n            this.previewThumbnails = new PreviewThumbnails(this);\n        }\n    }\n\n    // ---------------------------------------\n    // API\n    // ---------------------------------------\n\n    /**\n     * Types and provider helpers\n     */\n    get isHTML5() {\n        return Boolean(this.provider === providers.html5);\n    }\n\n    get isEmbed() {\n        return Boolean(this.isYouTube || this.isVimeo);\n    }\n\n    get isYouTube() {\n        return Boolean(this.provider === providers.youtube);\n    }\n\n    get isVimeo() {\n        return Boolean(this.provider === providers.vimeo);\n    }\n\n    get isVideo() {\n        return Boolean(this.type === types.video);\n    }\n\n    get isAudio() {\n        return Boolean(this.type === types.audio);\n    }\n\n    /**\n     * Play the media, or play the advertisement (if they are not blocked)\n     */\n    play() {\n        if (!is.function(this.media.play)) {\n            return null;\n        }\n\n        // Intecept play with ads\n        if (this.ads && this.ads.enabled) {\n            this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n        }\n\n        // Return the promise (for HTML5)\n        return this.media.play();\n    }\n\n    /**\n     * Pause the media\n     */\n    pause() {\n        if (!this.playing || !is.function(this.media.pause)) {\n            return;\n        }\n\n        this.media.pause();\n    }\n\n    /**\n     * Get playing state\n     */\n    get playing() {\n        return Boolean(this.ready && !this.paused && !this.ended);\n    }\n\n    /**\n     * Get paused state\n     */\n    get paused() {\n        return Boolean(this.media.paused);\n    }\n\n    /**\n     * Get stopped state\n     */\n    get stopped() {\n        return Boolean(this.paused && this.currentTime === 0);\n    }\n\n    /**\n     * Get ended state\n     */\n    get ended() {\n        return Boolean(this.media.ended);\n    }\n\n    /**\n     * Toggle playback based on current status\n     * @param {Boolean} input\n     */\n    togglePlay(input) {\n        // Toggle based on current state if nothing passed\n        const toggle = is.boolean(input) ? input : !this.playing;\n\n        if (toggle) {\n            this.play();\n        } else {\n            this.pause();\n        }\n    }\n\n    /**\n     * Stop playback\n     */\n    stop() {\n        if (this.isHTML5) {\n            this.pause();\n            this.restart();\n        } else if (is.function(this.media.stop)) {\n            this.media.stop();\n        }\n    }\n\n    /**\n     * Restart playback\n     */\n    restart() {\n        this.currentTime = 0;\n    }\n\n    /**\n     * Rewind\n     * @param {Number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n     */\n    rewind(seekTime) {\n        this.currentTime = this.currentTime - (is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Fast forward\n     * @param {Number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n     */\n    forward(seekTime) {\n        this.currentTime = this.currentTime + (is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Seek to a time\n     * @param {Number} input - where to seek to in seconds. Defaults to 0 (the start)\n     */\n    set currentTime(input) {\n        // Bail if media duration isn't available yet\n        if (!this.duration) {\n            return;\n        }\n\n        // Validate input\n        const inputIsValid = is.number(input) && input > 0;\n\n        // Set\n        this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n        // Logging\n        this.debug.log(`Seeking to ${this.currentTime} seconds`);\n    }\n\n    /**\n     * Get current time\n     */\n    get currentTime() {\n        return Number(this.media.currentTime);\n    }\n\n    /**\n     * Get buffered\n     */\n    get buffered() {\n        const { buffered } = this.media;\n\n        // YouTube / Vimeo return a float between 0-1\n        if (is.number(buffered)) {\n            return buffered;\n        }\n\n        // HTML5\n        // TODO: Handle buffered chunks of the media\n        // (i.e. seek to another section buffers only that section)\n        if (buffered && buffered.length && this.duration > 0) {\n            return buffered.end(0) / this.duration;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Get seeking status\n     */\n    get seeking() {\n        return Boolean(this.media.seeking);\n    }\n\n    /**\n     * Get the duration of the current media\n     */\n    get duration() {\n        // Faux duration set via config\n        const fauxDuration = parseFloat(this.config.duration);\n\n        // Media duration can be NaN or Infinity before the media has loaded\n        const realDuration = (this.media || {}).duration;\n        const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n        // If config duration is funky, use regular duration\n        return fauxDuration || duration;\n    }\n\n    /**\n     * Set the player volume\n     * @param {Number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n     */\n    set volume(value) {\n        let volume = value;\n        const max = 1;\n        const min = 0;\n\n        if (is.string(volume)) {\n            volume = Number(volume);\n        }\n\n        // Load volume from storage if no value specified\n        if (!is.number(volume)) {\n            volume = this.storage.get('volume');\n        }\n\n        // Use config if all else fails\n        if (!is.number(volume)) {\n            ({ volume } = this.config);\n        }\n\n        // Maximum is volumeMax\n        if (volume > max) {\n            volume = max;\n        }\n        // Minimum is volumeMin\n        if (volume < min) {\n            volume = min;\n        }\n\n        // Update config\n        this.config.volume = volume;\n\n        // Set the player volume\n        this.media.volume = volume;\n\n        // If muted, and we're increasing volume manually, reset muted state\n        if (!is.empty(value) && this.muted && volume > 0) {\n            this.muted = false;\n        }\n    }\n\n    /**\n     * Get the current player volume\n     */\n    get volume() {\n        return Number(this.media.volume);\n    }\n\n    /**\n     * Increase volume\n     * @param {Boolean} step - How much to decrease by (between 0 and 1)\n     */\n    increaseVolume(step) {\n        const volume = this.media.muted ? 0 : this.volume;\n        this.volume = volume + (is.number(step) ? step : 0);\n    }\n\n    /**\n     * Decrease volume\n     * @param {Boolean} step - How much to decrease by (between 0 and 1)\n     */\n    decreaseVolume(step) {\n        this.increaseVolume(-step);\n    }\n\n    /**\n     * Set muted state\n     * @param {Boolean} mute\n     */\n    set muted(mute) {\n        let toggle = mute;\n\n        // Load muted state from storage\n        if (!is.boolean(toggle)) {\n            toggle = this.storage.get('muted');\n        }\n\n        // Use config if all else fails\n        if (!is.boolean(toggle)) {\n            toggle = this.config.muted;\n        }\n\n        // Update config\n        this.config.muted = toggle;\n\n        // Set mute on the player\n        this.media.muted = toggle;\n    }\n\n    /**\n     * Get current muted state\n     */\n    get muted() {\n        return Boolean(this.media.muted);\n    }\n\n    /**\n     * Check if the media has audio\n     */\n    get hasAudio() {\n        // Assume yes for all non HTML5 (as we can't tell...)\n        if (!this.isHTML5) {\n            return true;\n        }\n\n        if (this.isAudio) {\n            return true;\n        }\n\n        // Get audio tracks\n        return (\n            Boolean(this.media.mozHasAudio) ||\n            Boolean(this.media.webkitAudioDecodedByteCount) ||\n            Boolean(this.media.audioTracks && this.media.audioTracks.length)\n        );\n    }\n\n    /**\n     * Set playback speed\n     * @param {Number} speed - the speed of playback (0.5-2.0)\n     */\n    set speed(input) {\n        let speed = null;\n\n        if (is.number(input)) {\n            speed = input;\n        }\n\n        if (!is.number(speed)) {\n            speed = this.storage.get('speed');\n        }\n\n        if (!is.number(speed)) {\n            speed = this.config.speed.selected;\n        }\n\n        // Set min/max\n        if (speed < 0.1) {\n            speed = 0.1;\n        }\n        if (speed > 2.0) {\n            speed = 2.0;\n        }\n\n        if (!this.config.speed.options.includes(speed)) {\n            this.debug.warn(`Unsupported speed (${speed})`);\n            return;\n        }\n\n        // Update config\n        this.config.speed.selected = speed;\n\n        // Set media speed\n        this.media.playbackRate = speed;\n    }\n\n    /**\n     * Get current playback speed\n     */\n    get speed() {\n        return Number(this.media.playbackRate);\n    }\n\n    /**\n     * Set playback quality\n     * Currently HTML5 & YouTube only\n     * @param {Number} input - Quality level\n     */\n    set quality(input) {\n        const config = this.config.quality;\n        const options = this.options.quality;\n\n        if (!options.length) {\n            return;\n        }\n\n        let quality = [\n            !is.empty(input) && Number(input),\n            this.storage.get('quality'),\n            config.selected,\n            config.default,\n        ].find(is.number);\n\n        let updateStorage = true;\n\n        if (!options.includes(quality)) {\n            const value = closest(options, quality);\n            this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n            quality = value;\n\n            // Don't update storage if quality is not supported\n            updateStorage = false;\n        }\n\n        // Update config\n        config.selected = quality;\n\n        // Set quality\n        this.media.quality = quality;\n\n        // Save to storage\n        if (updateStorage) {\n            this.storage.set({ quality });\n        }\n    }\n\n    /**\n     * Get current quality level\n     */\n    get quality() {\n        return this.media.quality;\n    }\n\n    /**\n     * Toggle loop\n     * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n     * @param {Boolean} input - Whether to loop or not\n     */\n    set loop(input) {\n        const toggle = is.boolean(input) ? input : this.config.loop.active;\n        this.config.loop.active = toggle;\n        this.media.loop = toggle;\n\n        // Set default to be a true toggle\n        /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n        switch (type) {\n            case 'start':\n                if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n                    this.config.loop.end = null;\n                }\n                this.config.loop.start = this.currentTime;\n                // this.config.loop.indicator.start = this.elements.display.played.value;\n                break;\n\n            case 'end':\n                if (this.config.loop.start >= this.currentTime) {\n                    return this;\n                }\n                this.config.loop.end = this.currentTime;\n                // this.config.loop.indicator.end = this.elements.display.played.value;\n                break;\n\n            case 'all':\n                this.config.loop.start = 0;\n                this.config.loop.end = this.duration - 2;\n                this.config.loop.indicator.start = 0;\n                this.config.loop.indicator.end = 100;\n                break;\n\n            case 'toggle':\n                if (this.config.loop.active) {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = null;\n                } else {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = this.duration - 2;\n                }\n                break;\n\n            default:\n                this.config.loop.start = 0;\n                this.config.loop.end = null;\n                break;\n        } */\n    }\n\n    /**\n     * Get current loop state\n     */\n    get loop() {\n        return Boolean(this.media.loop);\n    }\n\n    /**\n     * Set new media source\n     * @param {Object} input - The new source object (see docs)\n     */\n    set source(input) {\n        source.change.call(this, input);\n    }\n\n    /**\n     * Get current source\n     */\n    get source() {\n        return this.media.currentSrc;\n    }\n\n    /**\n     * Get a download URL (either source or custom)\n     */\n    get download() {\n        const { download } = this.config.urls;\n\n        return is.url(download) ? download : this.source;\n    }\n\n    /**\n     * Set the poster image for a video\n     * @param {String} input - the URL for the new poster image\n     */\n    set poster(input) {\n        if (!this.isVideo) {\n            this.debug.warn('Poster can only be set for video');\n            return;\n        }\n\n        ui.setPoster.call(this, input, false).catch(() => {});\n    }\n\n    /**\n     * Get the current poster image\n     */\n    get poster() {\n        if (!this.isVideo) {\n            return null;\n        }\n\n        return this.media.getAttribute('poster');\n    }\n\n    /**\n     * Get the current aspect ratio in use\n     */\n    get ratio() {\n        const ratio = reduceAspectRatio(getAspectRatio.call(this));\n\n        return is.array(ratio) ? ratio.join(':') : ratio;\n    }\n\n    /**\n     * Set video aspect ratio\n     */\n    set ratio(input) {\n        if (!this.isVideo) {\n            this.debug.warn('Aspect ratio can only be set for video');\n            return;\n        }\n\n        if (!is.string(input) || !validateRatio(input)) {\n            this.debug.error(`Invalid aspect ratio specified (${input})`);\n            return;\n        }\n\n        this.config.ratio = input;\n\n        setAspectRatio.call(this);\n    }\n\n    /**\n     * Set the autoplay state\n     * @param {Boolean} input - Whether to autoplay or not\n     */\n    set autoplay(input) {\n        const toggle = is.boolean(input) ? input : this.config.autoplay;\n        this.config.autoplay = toggle;\n    }\n\n    /**\n     * Get the current autoplay state\n     */\n    get autoplay() {\n        return Boolean(this.config.autoplay);\n    }\n\n    /**\n     * Toggle captions\n     * @param {Boolean} input - Whether to enable captions\n     */\n    toggleCaptions(input) {\n        captions.toggle.call(this, input, false);\n    }\n\n    /**\n     * Set the caption track by index\n     * @param {Number} - Caption index\n     */\n    set currentTrack(input) {\n        captions.set.call(this, input, false);\n    }\n\n    /**\n     * Get the current caption track index (-1 if disabled)\n     */\n    get currentTrack() {\n        const { toggled, currentTrack } = this.captions;\n        return toggled ? currentTrack : -1;\n    }\n\n    /**\n     * Set the wanted language for captions\n     * Since tracks can be added later it won't update the actual caption track until there is a matching track\n     * @param {String} - Two character ISO language code (e.g. EN, FR, PT, etc)\n     */\n    set language(input) {\n        captions.setLanguage.call(this, input, false);\n    }\n\n    /**\n     * Get the current track's language\n     */\n    get language() {\n        return (captions.getCurrentTrack.call(this) || {}).language;\n    }\n\n    /**\n     * Toggle picture-in-picture playback on WebKit/MacOS\n     * TODO: update player with state, support, enabled\n     * TODO: detect outside changes\n     */\n    set pip(input) {\n        // Bail if no support\n        if (!support.pip) {\n            return;\n        }\n\n        // Toggle based on current state if not passed\n        const toggle = is.boolean(input) ? input : !this.pip;\n\n        // Toggle based on current state\n        // Safari\n        if (is.function(this.media.webkitSetPresentationMode)) {\n            this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n        }\n\n        // Chrome\n        if (is.function(this.media.requestPictureInPicture)) {\n            if (!this.pip && toggle) {\n                this.media.requestPictureInPicture();\n            } else if (this.pip && !toggle) {\n                document.exitPictureInPicture();\n            }\n        }\n    }\n\n    /**\n     * Get the current picture-in-picture state\n     */\n    get pip() {\n        if (!support.pip) {\n            return null;\n        }\n\n        // Safari\n        if (!is.empty(this.media.webkitPresentationMode)) {\n            return this.media.webkitPresentationMode === pip.active;\n        }\n\n        // Chrome\n        return this.media === document.pictureInPictureElement;\n    }\n\n    /**\n     * Trigger the airplay dialog\n     * TODO: update player with state, support, enabled\n     */\n    airplay() {\n        // Show dialog if supported\n        if (support.airplay) {\n            this.media.webkitShowPlaybackTargetPicker();\n        }\n    }\n\n    /**\n     * Toggle the player controls\n     * @param {Boolean} [toggle] - Whether to show the controls\n     */\n    toggleControls(toggle) {\n        // Don't toggle if missing UI support or if it's audio\n        if (this.supported.ui && !this.isAudio) {\n            // Get state before change\n            const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n            // Negate the argument if not undefined since adding the class to hides the controls\n            const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n            // Apply and get updated state\n            const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n            // Close menu\n            if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n                controls.toggleMenu.call(this, false);\n            }\n\n            // Trigger event on change\n            if (hiding !== isHidden) {\n                const eventName = hiding ? 'controlshidden' : 'controlsshown';\n                triggerEvent.call(this, this.media, eventName);\n            }\n\n            return !hiding;\n        }\n\n        return false;\n    }\n\n    /**\n     * Add event listeners\n     * @param {String} event - Event type\n     * @param {Function} callback - Callback for when event occurs\n     */\n    on(event, callback) {\n        on.call(this, this.elements.container, event, callback);\n    }\n\n    /**\n     * Add event listeners once\n     * @param {String} event - Event type\n     * @param {Function} callback - Callback for when event occurs\n     */\n    once(event, callback) {\n        once.call(this, this.elements.container, event, callback);\n    }\n\n    /**\n     * Remove event listeners\n     * @param {String} event - Event type\n     * @param {Function} callback - Callback for when event occurs\n     */\n    off(event, callback) {\n        off(this.elements.container, event, callback);\n    }\n\n    /**\n     * Destroy an instance\n     * Event listeners are removed when elements are removed\n     * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n     * @param {Function} callback - Callback for when destroy is complete\n     * @param {Boolean} soft - Whether it's a soft destroy (for source changes etc)\n     */\n    destroy(callback, soft = false) {\n        if (!this.ready) {\n            return;\n        }\n\n        const done = () => {\n            // Reset overflow (incase destroyed while in fullscreen)\n            document.body.style.overflow = '';\n\n            // GC for embed\n            this.embed = null;\n\n            // If it's a soft destroy, make minimal changes\n            if (soft) {\n                if (Object.keys(this.elements).length) {\n                    // Remove elements\n                    removeElement(this.elements.buttons.play);\n                    removeElement(this.elements.captions);\n                    removeElement(this.elements.controls);\n                    removeElement(this.elements.wrapper);\n\n                    // Clear for GC\n                    this.elements.buttons.play = null;\n                    this.elements.captions = null;\n                    this.elements.controls = null;\n                    this.elements.wrapper = null;\n                }\n\n                // Callback\n                if (is.function(callback)) {\n                    callback();\n                }\n            } else {\n                // Unbind listeners\n                unbindListeners.call(this);\n\n                // Replace the container with the original element provided\n                replaceElement(this.elements.original, this.elements.container);\n\n                // Event\n                triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n                // Callback\n                if (is.function(callback)) {\n                    callback.call(this.elements.original);\n                }\n\n                // Reset state\n                this.ready = false;\n\n                // Clear for garbage collection\n                setTimeout(() => {\n                    this.elements = null;\n                    this.media = null;\n                }, 200);\n            }\n        };\n\n        // Stop playback\n        this.stop();\n\n        // Clear timeouts\n        clearTimeout(this.timers.loading);\n        clearTimeout(this.timers.controls);\n        clearTimeout(this.timers.resized);\n\n        // Provider specific stuff\n        if (this.isHTML5) {\n            // Restore native video controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Clean up\n            done();\n        } else if (this.isYouTube) {\n            // Clear timers\n            clearInterval(this.timers.buffering);\n            clearInterval(this.timers.playing);\n\n            // Destroy YouTube API\n            if (this.embed !== null && is.function(this.embed.destroy)) {\n                this.embed.destroy();\n            }\n\n            // Clean up\n            done();\n        } else if (this.isVimeo) {\n            // Destroy Vimeo API\n            // then clean up (wait, to prevent postmessage errors)\n            if (this.embed !== null) {\n                this.embed.unload().then(done);\n            }\n\n            // Vimeo does not always return\n            setTimeout(done, 200);\n        }\n    }\n\n    /**\n     * Check for support for a mime type (HTML5 only)\n     * @param {String} type - Mime type\n     */\n    supports(type) {\n        return support.mime.call(this, type);\n    }\n\n    /**\n     * Check for support\n     * @param {String} type - Player type (audio/video)\n     * @param {String} provider - Provider (html5/youtube/vimeo)\n     * @param {Boolean} inline - Where player has `playsinline` sttribute\n     */\n    static supported(type, provider, inline) {\n        return support.check(type, provider, inline);\n    }\n\n    /**\n     * Load an SVG sprite into the page\n     * @param {String} url - URL for the SVG sprite\n     * @param {String} [id] - Unique ID\n     */\n    static loadSprite(url, id) {\n        return loadSprite(url, id);\n    }\n\n    /**\n     * Setup multiple instances\n     * @param {*} selector\n     * @param {Object} options\n     */\n    static setup(selector, options = {}) {\n        let targets = null;\n\n        if (is.string(selector)) {\n            targets = Array.from(document.querySelectorAll(selector));\n        } else if (is.nodeList(selector)) {\n            targets = Array.from(selector);\n        } else if (is.array(selector)) {\n            targets = selector.filter(is.element);\n        }\n\n        if (is.empty(targets)) {\n            return null;\n        }\n\n        return targets.map(t => new Plyr(t, options));\n    }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n""]}"
303c20dd6a0c8dd20292568dc486f2ff87b28312,28802546,http://bl.ocks.org/d3noob/b3ff6ae1c120eea654b5#data.csv	http://stackoverflow.com/questions/28802546/problems-using-d3-js-locally
7a8188105687e8745218d5749434dcf586a637c5,181348 3561493,"{""version"":3,""sources"":[""momentjs:moment/moment.js"",""momentjs:moment/meteor/export.js""],""names"":[],""mappings"":"";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,a;AACA,oB;AACA,8D;AACA,iB;AACA,gB;;AAEA,6B;AACA,+F;AACA,kE;AACA,6B;AACA,mC;;AAEA,qB;;AAEA,8B;AACA,mD;AACA,K;;AAEA,+D;AACA,8C;AACA,yC;AACA,gC;AACA,K;;AAEA,oC;AACA,6C;AACA,gB;AACA,oC;AACA,iC;AACA,iC;AACA,iC;AACA,gC;AACA,oC;AACA,mC;AACA,oC;AACA,oC;AACA,mC;AACA,U;AACA,K;;AAEA,6B;AACA,0E;AACA,K;;AAEA,4B;AACA,kG;AACA,K;;AAEA,2B;AACA,wB;AACA,0C;AACA,oC;AACA,S;AACA,mB;AACA,K;;AAEA,+B;AACA,0D;AACA,K;;AAEA,2B;AACA,0B;AACA,mC;AACA,4B;AACA,a;AACA,S;;AAEA,wC;AACA,oC;AACA,S;;AAEA,uC;AACA,kC;AACA,S;;AAEA,iB;AACA,K;;AAEA,6D;AACA,2E;AACA,K;;AAEA,gC;AACA,iC;AACA,kD;AACA,qC;AACA,+B;AACA,sC;AACA,mC;AACA,uC;AACA,uC;;AAEA,4B;AACA,0C;AACA,gD;AACA,sD;AACA,gD;AACA,a;AACA,S;AACA,0B;AACA,K;;AAEA,2C;AACA,oC;AACA,4B;AACA,iC;AACA,S;AACA,c;AACA,yC;AACA,S;;AAEA,iB;AACA,K;;AAEA,8D;;AAEA,mC;AACA,yB;;AAEA,2D;AACA,wD;AACA,S;AACA,6C;AACA,4B;AACA,S;AACA,6C;AACA,4B;AACA,S;AACA,6C;AACA,4B;AACA,S;AACA,kD;AACA,sC;AACA,S;AACA,+C;AACA,gC;AACA,S;AACA,iD;AACA,oC;AACA,S;AACA,kD;AACA,sC;AACA,S;AACA,8C;AACA,8B;AACA,S;AACA,kD;AACA,sC;AACA,S;;AAEA,0C;AACA,yC;AACA,2C;AACA,iC;AACA,iD;AACA,mC;AACA,iB;AACA,a;AACA,S;;AAEA,kB;AACA,K;;AAEA,iC;;AAEA,8B;AACA,6B;AACA,iC;AACA,uC;AACA,wE;AACA,mB;AACA,yC;AACA,oC;AACA,4C;AACA,qC;AACA,S;AACA,K;;AAEA,6B;AACA,6F;AACA,K;;AAEA,yC;AACA,iD;AACA,sB;;AAEA,6D;AACA,qC;AACA,kD;AACA,oB;AACA,iD;AACA,a;AACA,S;;AAEA,qB;AACA,K;;AAEA,yD;AACA,yD;AACA,iE;AACA,sB;AACA,c;AACA,mC;AACA,2D;AACA,0E;AACA,wB;AACA,a;AACA,S;AACA,kC;AACA,K;;AAEA,uB;AACA,K;;AAEA,qB;AACA,qB;;AAEA,mC;AACA,+D;AACA,K;;AAEA,qC;AACA,gG;AACA,mI;AACA,kC;AACA,0C;;AAEA,kC;AACA,yD;AACA,6B;AACA,iD;AACA,iD;AACA,2B;AACA,iE;AACA,6B;AACA,kC;AACA,iB;AACA,4F;AACA,0F;AACA,0B;AACA,iB;AACA,oB;AACA,a;AACA,gB;AACA,S;AACA,oB;AACA,K;;AAEA,+B;AACA,6B;AACA,+E;AACA,8D;AACA,2C;AACA,iB;AACA,+C;AACA,4C;AACA,iF;AACA,4D;AACA,uD;AACA,2B;AACA,S;AACA,6B;AACA,K;;AAEA,yE;AACA,2E;AACA,kB;AACA,wD;AACA,iB;AACA,kB;AACA,gD;AACA,+C;AACA,a;AACA,kB;AACA,iD;AACA,a;;AAEA,uB;AACA,mE;AACA,oC;AACA,a;AACA,S;;AAEA,kC;AACA,K;;AAEA,0C;AACA,8B;AACA,+B;AACA,iC;AACA,6C;AACA,a;AACA,sC;;AAEA,4D;AACA,8C;;AAEA,iC;AACA,gB;AACA,iC;AACA,iC;AACA,wB;AACA,S;AACA,K;;AAEA,0B;AACA,uC;AACA,mB;;AAEA,sD;AACA,oC;AACA,S;;AAEA,mB;AACA,gC;AACA,S;;AAEA,4B;AACA,2C;AACA,qC;AACA,yB;AACA,8B;AACA,a;AACA,wB;AACA,S;;AAEA,iC;AACA,K;;AAEA,qB;;AAEA,6C;AACA,2C;AACA,kF;AACA,K;;AAEA,oC;AACA,sG;AACA,K;;AAEA,gD;AACA,iC;AACA,2B;AACA,iB;;AAEA,mC;AACA,gD;AACA,sD;AACA,qC;AACA,wE;AACA,iB;AACA,a;AACA,S;;AAEA,+B;AACA,K;;AAEA,0C;AACA,iC;AACA,gC;AACA,gD;AACA,0D;AACA,4B;AACA,oB;AACA,gD;AACA,a;AACA,U;AACA,K;;AAEA,uC;AACA,kE;AACA,K;;AAEA,8C;AACA,uE;AACA,K;;AAEA,c;;AAEA,oC;AACA,iB;AACA,wC;AACA,iC;AACA,4C;AACA,a;AACA,gB;AACA,0C;AACA,oD;AACA,0C;AACA,a;AACA,S;AACA,oB;AACA,K;;AAEA,wD;AACA,2C;AACA,+B;;AAEA,8C;AACA,kC;AACA,S;AACA,8D;AACA,K;;AAEA,gM;;AAEA,6E;;AAEA,6B;;AAEA,kC;;AAEA,oB;AACA,0B;AACA,qB;AACA,iD;AACA,gE;AACA,4B;AACA,2C;AACA,gC;AACA,wC;AACA,c;AACA,S;AACA,oB;AACA,+C;AACA,S;AACA,qB;AACA,2D;AACA,mF;AACA,c;AACA,S;AACA,sB;AACA,yD;AACA,qF;AACA,c;AACA,S;AACA,K;;AAEA,4C;AACA,sC;AACA,iD;AACA,S;AACA,wC;AACA,K;;AAEA,yC;AACA,8D;;AAEA,6D;AACA,iD;AACA,0D;AACA,oB;AACA,4D;AACA,a;AACA,S;;AAEA,+B;AACA,4B;AACA,0C;AACA,+F;AACA,a;AACA,0B;AACA,U;AACA,K;;AAEA,2C;AACA,sC;AACA,2B;AACA,gD;AACA,S;;AAEA,sD;;AAEA,uC;AACA,iE;AACA,S;;AAEA,0C;AACA,K;;AAEA,2C;AACA,kB;;AAEA,qD;AACA,yD;AACA,S;;AAEA,4C;AACA,8D;AACA,wF;AACA,gD;AACA,mB;AACA,S;;AAEA,sB;AACA,K;;AAEA,wD;AACA,yD;AACA,0D;AACA,2D;AACA,6D;AACA,yD;AACA,0D;AACA,2D;AACA,6D;;AAEA,0D;AACA,0D;;AAEA,gF;;AAEA,2E;;AAEA,wF;AACA,uI;;AAEA,qB;;AAEA,wD;AACA,oF;AACA,mE;AACA,U;AACA,K;;AAEA,oD;AACA,0C;AACA,qD;AACA,S;;AAEA,8D;AACA,K;;AAEA,2G;AACA,gC;AACA,sH;AACA,wC;AACA,qD;AACA,K;;AAEA,oB;;AAEA,8C;AACA,+B;AACA,wC;AACA,4B;AACA,S;AACA,2C;AACA,4C;AACA,+C;AACA,c;AACA,S;AACA,4C;AACA,oC;AACA,S;AACA,K;;AAEA,kD;AACA,qE;AACA,wC;AACA,sD;AACA,W;AACA,K;;AAEA,4D;AACA,yD;AACA,2D;AACA,S;AACA,K;;AAEA,iB;AACA,kB;AACA,iB;AACA,iB;AACA,mB;AACA,mB;AACA,wB;;AAEA,uC;AACA,mE;AACA,K;;AAEA,iB;;AAEA,sD;AACA,gC;AACA,O;;AAEA,mD;AACA,2D;AACA,O;;AAEA,oD;AACA,sD;AACA,O;;AAEA,c;;AAEA,+B;;AAEA,c;;AAEA,qC;AACA,6C;AACA,qC;AACA,qC;;AAEA,wD;AACA,wC;AACA,O;;AAEA,2E;AACA,6E;AACA,oE;AACA,4B;AACA,iC;AACA,gB;AACA,4C;AACA,S;AACA,O;;AAEA,c;;AAEA,iI;AACA,+B;AACA,uC;AACA,K;;AAEA,gG;AACA,oC;AACA,4C;AACA,K;;AAEA,4D;AACA,0B;;AAEA,iC;AACA,mC;AACA,uC;AACA,wC;AACA,S;;AAEA,kC;AACA,yD;AACA,4C;AACA,sD;AACA,8G;AACA,oH;AACA,a;AACA,mD;AACA,sF;AACA,+E;AACA,a;AACA,6B;AACA,0F;AACA,yB;AACA,iG;AACA,yB;AACA,yE;AACA,yB;AACA,a;AACA,S;AACA,K;;AAEA,c;;AAEA,oC;AACA,uB;;AAEA,uC;AACA,wC;AACA,wD;AACA,4C;AACA,4C;AACA,2B;AACA,a;AACA,S;;AAEA,0E;AACA,+E;AACA,mB;AACA,K;;AAEA,kC;AACA,4B;AACA,kC;AACA,kD;AACA,wB;AACA,gB;AACA,+C;AACA,S;AACA,K;;AAEA,gC;AACA,sD;AACA,K;;AAEA,gC;AACA,qB;AACA,qB;;AAEA,yC;AACA,sB;AACA,oE;AACA,8F;AACA,sJ;AACA,qE;AACA,qE;AACA,0E;AACA,mB;;AAEA,mF;AACA,gC;AACA,a;;AAEA,sC;AACA,S;;AAEA,iB;AACA,K;;AAEA,wB;AACA,mH;AACA,wD;AACA,S;AACA,K;;AAEA,iC;AACA,6B;AACA,mC;AACA,4B;AACA,0B;AACA,kC;AACA,a;AACA,6C;AACA,e;AACA,K;;AAEA,0B;;AAEA,yC;AACA,kC;AACA,sB;AACA,sC;AACA,S;AACA,K;;AAEA,qD;;AAEA,4K;;AAEA,oB;AACA,kD;AACA,4C;AACA,4C;AACA,uC;AACA,mC;AACA,M;;AAEA,mC;AACA,oB;AACA,sD;AACA,4C;AACA,oC;AACA,2B;AACA,M;;AAEA,gD;;AAEA,2B;AACA,oC;AACA,iB;AACA,+B;AACA,uD;;AAEA,oB;AACA,kC;AACA,0D;AACA,kD;AACA,0D;AACA,mE;AACA,0B;AACA,iB;AACA,a;AACA,0D;AACA,kD;AACA,gD;AACA,0B;AACA,iB;AACA,a;AACA,4C;AACA,iC;AACA,a;AACA,8C;AACA,gB;AACA,oC;AACA,S;AACA,K;;AAEA,uC;AACA,uC;AACA,sD;;AAEA,+B;AACA,8C;AACA,mB;AACA,S;;AAEA,8B;AACA,wC;AACA,mC;AACA,yD;AACA,S;AACA,K;;AAEA,qD;AACA,+D;AACA,8D;AACA,qC;AACA,sE;AACA,2B;AACA,6E;AACA,S;AACA,M;;AAEA,gD;AACA,8C;AACA,4H;AACA,kD;;AAEA,0D;AACA,uB;AACA,gC;AACA,S;AACA,oB;AACA,K;;AAEA,gC;AACA,6D;AACA,uB;AACA,mC;AACA,S;AACA,oB;AACA,K;;AAEA,iD;AACA,iC;AACA,O;;AAEA,sD;AACA,sD;AACA,sD;;AAEA,c;;AAEA,8B;;AAEA,c;;AAEA,yC;AACA,+C;AACA,+C;AACA,+C;AACA,+C;;AAEA,qD;AACA,iD;AACA,4D;AACA,O;;AAEA,c;;AAEA,+B;AACA,4C;AACA,K;;AAEA,+B;AACA,wE;AACA,K;;AAEA,Y;;AAEA,uD;AACA,gE;AACA,M;;AAEA,c;;AAEA,mD;;AAEA,+B;AACA,uC;AACA,K;;AAEA,iD;AACA,oD;;AAEA,c;;AAEA,8B;AACA,iC;;AAEA,c;;AAEA,mC;AACA,2C;AACA,mC;AACA,2C;;AAEA,qF;AACA,gD;AACA,O;;AAEA,c;;AAEA,4C;AACA,oE;AACA,sD;AACA,4C;AACA,8E;AACA,mD;AACA,4D;AACA,oE;AACA,wD;AACA,+D;AACA,2B;;;AAGA,oC;AACA,iC;AACA,S;;AAEA,wC;AACA,iC;AACA,S;;AAEA,2E;AACA,gB;AACA,4D;AACA,uC;AACA,U;AACA,K;;AAEA,c;;AAEA,+B;AACA,oE;AACA,K;;AAEA,6B;AACA,wD;AACA,iF;AACA,M;;AAEA,sC;AACA,8B;AACA,K;;AAEA,sC;AACA,8B;AACA,K;;AAEA,c;;AAEA,iC;AACA,gD;AACA,wE;AACA,K;;AAEA,oC;AACA,+C;AACA,wE;AACA,K;;AAEA,4D;;AAEA,c;;AAEA,qC;;AAEA,c;;AAEA,qC;AACA,kC;AACA,oE;AACA,yC;AACA,O;;AAEA,c;;AAEA,6G;AACA,4F;AACA,sD;AACA,sB;AACA,sB;;AAEA,4B;AACA,6D;AACA,2G;AACA,gF;;AAEA,gB;AACA,6D;AACA,oF;AACA,U;AACA,K;;AAEA,c;;AAEA,sC;AACA,6G;AACA,8E;AACA,K;;AAEA,wD;AACA,gC;AACA,wB;AACA,qB;AACA,S;AACA,wB;AACA,qB;AACA,S;AACA,iB;AACA,K;;AAEA,uC;AACA,6B;AACA,6B;AACA,+E;AACA,S;AACA,kE;AACA,K;;AAEA,kC;AACA,mD;AACA,iG;AACA,6D;AACA,uC;AACA,wD;;AAEA,wB;AACA,mB;AACA,S;;AAEA,+C;;AAEA,yD;AACA,+E;AACA,0C;AACA,S;;AAEA,8D;AACA,gC;AACA,qE;;AAEA,4D;AACA,qD;AACA,a;;AAEA,kE;AACA,kD;AACA,gD;AACA,S;;AAEA,mC;AACA,wE;AACA,6D;AACA,iD;AACA,qD;AACA,yD;AACA,qD;AACA,S;;AAEA,8D;AACA,4B;AACA,gG;AACA,S;;AAEA,iC;AACA,qC;AACA,0C;AACA,0C;AACA,+C;AACA,mC;AACA,gC;AACA,S;;AAEA,qF;AACA,gF;AACA,0B;AACA,kC;AACA,6E;AACA,S;;AAEA,8B;AACA,iC;AACA,S;AACA,K;;AAEA,4C;AACA,uD;;AAEA,sB;AACA,yD;AACA,oB;AACA,oB;;AAEA,iF;AACA,yE;AACA,gF;AACA,2B;AACA,oG;AACA,oC;AACA,uC;AACA,gB;AACA,2C;AACA,2C;;AAEA,wG;AACA,oC;;AAEA,8B;AACA,sE;AACA,8B;AACA,oC;AACA,2B;AACA,iB;AACA,qC;AACA,yE;AACA,oC;AACA,oB;AACA,8C;AACA,8B;AACA,a;AACA,S;AACA,qE;;AAEA,oC;AACA,2C;AACA,K;;AAEA,2C;;AAEA,yC;AACA,gD;AACA,wF;AACA,kD;AACA,kC;AACA,mB;AACA,S;;AAEA,uB;AACA,gC;;AAEA,kF;AACA,oC;AACA,mD;AACA,yC;AACA,uC;;AAEA,uF;;AAEA,6C;AACA,8B;AACA,wF;AACA,8B;AACA,wE;AACA,yC;AACA,yD;AACA,iB;AACA,wF;AACA,6D;AACA,a;AACA,oD;AACA,8C;AACA,kC;AACA,6C;AACA,iB;AACA,sB;AACA,wD;AACA,iB;AACA,oE;AACA,a;AACA,sD;AACA,oD;AACA,a;AACA,S;;AAEA,4D;AACA,yE;AACA,gC;AACA,gD;AACA,S;;AAEA,2C;AACA,mE;AACA,2C;AACA,S;AACA,0B;AACA,6F;;AAEA,gC;AACA,8B;AACA,K;;;AAGA,uD;AACA,iB;;AAEA,+B;AACA,4B;AACA,wB;AACA,S;AACA,0C;AACA,uD;AACA,yC;AACA,uB;AACA,yC;AACA,oC;AACA,2B;AACA,a;AACA,uC;AACA,yB;AACA,a;AACA,wB;AACA,gB;AACA,6C;AACA,wB;AACA,S;AACA,K;;AAEA,+C;AACA,uB;AACA,uB;;AAEA,wB;AACA,c;AACA,yB;;AAEA,qC;AACA,4C;AACA,sC;AACA,mB;AACA,S;;AAEA,gD;AACA,6B;AACA,gD;AACA,yC;AACA,oD;AACA,a;AACA,mD;AACA,yC;AACA,kD;;AAEA,8C;AACA,yB;AACA,a;;AAEA,sF;AACA,yD;;AAEA,uB;AACA,oE;;AAEA,gD;;AAEA,oE;AACA,2C;AACA,wC;AACA,a;AACA,S;;AAEA,iD;AACA,K;;AAEA,uC;AACA,wB;AACA,mB;AACA,S;;AAEA,gD;AACA,kG;;AAEA,gC;AACA,K;;AAEA,wC;AACA,8B;AACA,+B;AACA,gB;;AAEA,yE;;AAEA,uE;AACA,2D;AACA,S;;AAEA,wC;AACA,+D;AACA,S;;AAEA,8B;AACA,oD;AACA,qC;AACA,6C;AACA,4B;AACA,8C;AACA,gB;AACA,oC;AACA,S;;AAEA,gD;AACA,2B;AACA,gD;AACA,4B;AACA,qC;AACA,S;;AAEA,mB;AACA,K;;AAEA,sC;AACA,8B;AACA,kC;AACA,mC;AACA,mC;AACA,yC;AACA,+C;AACA,qC;AACA,oC;AACA,4D;AACA,yC;AACA,e;AACA,oC;AACA,gD;AACA,qC;AACA,gD;AACA,gC;AACA,wC;AACA,gB;AACA,yD;AACA,S;AACA,K;;AAEA,sE;AACA,mB;;AAEA,2C;AACA,4B;AACA,+B;AACA,S;AACA,qD;AACA,uD;AACA,kC;AACA,qC;AACA,sB;AACA,qB;AACA,sB;AACA,2B;AACA,sC;;AAEA,mC;AACA,K;;AAEA,iE;AACA,sE;AACA,K;;AAEA,iC;AACA,4G;AACA,sB;AACA,mE;AACA,gD;AACA,U;AACA,O;;AAEA,iC;AACA,2G;AACA,qB;AACA,kE;AACA,+C;AACA,S;AACA,M;;AAEA,wE;AACA,8D;AACA,M;AACA,6E;AACA,mD;AACA,kC;AACA,mB;AACA,0D;AACA,iC;AACA,S;AACA,8B;AACA,wC;AACA,S;AACA,yB;AACA,8C;AACA,sC;AACA,iC;AACA,a;AACA,S;AACA,mB;AACA,K;;AAEA,iC;AACA,qB;AACA,+C;;AAEA,wC;AACA,K;;AAEA,qB;AACA,+C;;AAEA,uC;AACA,K;;AAEA,kC;AACA,6D;AACA,8C;AACA,oD;AACA,gD;AACA,8C;AACA,4C;AACA,8C;AACA,kD;AACA,kD;AACA,4D;;AAEA,2C;AACA,4C;AACA,mC;AACA,wC;AACA,2C;AACA,uE;AACA,wE;AACA,4B;AACA,sB;AACA,sE;AACA,sE;AACA,yB;AACA,gC;AACA,0B;AACA,uB;;AAEA,wB;;AAEA,4C;;AAEA,uB;AACA,K;;AAEA,+B;AACA,uC;AACA,K;;AAEA,wC;AACA,iD;AACA,0C;AACA,2B;AACA,6B;AACA,iC;AACA,2B;AACA,a;AACA,kG;AACA,W;AACA,K;;AAEA,qB;AACA,qB;;AAEA,c;;AAEA,qC;AACA,qC;AACA,gE;AACA,8B;AACA,8C;AACA,O;;AAEA,c;;AAEA,uB;AACA,+B;AACA,+B;AACA,wC;;AAEA,uC;AACA,gE;AACA,wD;AACA,qE;AACA,yD;;AAEA,qD;AACA,K;;AAEA,8E;AACA,4C;AACA,sB;AACA,2B;AACA,gC;AACA,qG;AACA,mE;AACA,2C;AACA,kD;AACA,uB;AACA,gB;AACA,qD;AACA,S;AACA,qH;AACA,K;;AAEA,gC;AACA,yE;AACA,qD;AACA,+D;AACA,K;;AAEA,Y;;AAEA,iE;AACA,mE;AACA,+C;;AAEA,c;;AAEA,mE;AACA,2E;AACA,0E;AACA,2D;AACA,M;AACA,0D;AACA,yE;AACA,oE;AACA,sE;AACA,mD;AACA,kD;AACA,uC;AACA,wB;AACA,4B;AACA,4C;AACA,gD;AACA,a;AACA,uC;AACA,mC;AACA,a;AACA,gD;AACA,kD;AACA,a;AACA,iC;AACA,+B;AACA,sC;AACA,2C;AACA,a;AACA,mC;AACA,+D;AACA,2G;AACA,qD;AACA,kD;AACA,0D;AACA,kD;AACA,iB;AACA,a;AACA,wB;AACA,gB;AACA,8D;AACA,S;AACA,K;;AAEA,gD;AACA,4B;AACA,4C;AACA,+B;AACA,a;;AAEA,iD;;AAEA,wB;AACA,gB;AACA,qC;AACA,S;AACA,K;;AAEA,6C;AACA,gD;AACA,K;;AAEA,+C;AACA,0B;AACA,6C;AACA,gC;;AAEA,gC;AACA,wD;AACA,a;AACA,S;AACA,oB;AACA,K;;AAEA,yC;AACA,wB;AACA,sC;AACA,iD;AACA,sD;AACA,S;AACA,oB;AACA,K;;AAEA,2C;AACA,qB;AACA,sB;AACA,S;AACA,c;AACA,0D;AACA,S;;AAEA,qD;AACA,K;;AAEA,sC;AACA,gB;AACA,mE;AACA,gE;AACA,U;AACA,K;;AAEA,6C;AACA,sB;AACA,4F;AACA,iF;AACA,S;;AAEA,qB;AACA,K;;AAEA,yB;AACA,4B;AACA,K;;AAEA,6B;AACA,2B;AACA,K;;AAEA,uB;AACA,iD;AACA,K;;AAEA,6E;;AAEA,gG;AACA,gF;AACA,2J;;AAEA,kD;AACA,6B;AACA,oE;AACA,yB;AACA,iB;AACA,gB;AACA,oB;;AAEA,gC;AACA,wB;AACA,yC;AACA,iC;AACA,kC;AACA,c;AACA,+C;AACA,0B;AACA,sB;AACA,sC;AACA,oB;AACA,8C;AACA,a;AACA,yD;AACA,+C;AACA,wB;AACA,uB;AACA,sD;AACA,sD;AACA,sD;AACA,sD;AACA,qD;AACA,c;AACA,8D;AACA,+C;AACA,wB;AACA,6C;AACA,6C;AACA,6C;AACA,6C;AACA,6C;AACA,6C;AACA,4C;AACA,c;AACA,qE;AACA,0B;AACA,8F;AACA,4G;;AAEA,0B;AACA,+C;AACA,wC;AACA,S;;AAEA,qC;;AAEA,gE;AACA,wC;AACA,S;;AAEA,mB;AACA,K;;AAEA,mC;AACA,sE;AACA,mC;AACA,kE;AACA,2D;AACA,uC;AACA,6C;AACA,K;;AAEA,qD;AACA,+C;;AAEA,mD;AACA,8C;AACA,+D;AACA,yB;AACA,S;;AAEA,yE;;AAEA,mB;AACA,K;;AAEA,6C;AACA,gB;AACA,6C;AACA,mC;AACA,yD;AACA,gB;AACA,yD;AACA,iD;AACA,qC;AACA,S;;AAEA,mB;AACA,K;;AAEA,2C;AACA,uC;AACA,yB;AACA,yD;AACA,qD;AACA,iJ;AACA,sD;AACA,a;;AAEA,uD;AACA,sD;AACA,4D;AACA,wB;AACA,U;AACA,K;;AAEA,gF;AACA,kD;AACA,kC;AACA,sC;AACA,kE;;AAEA,2B;AACA,8D;AACA,S;AACA,mB;AACA,mF;AACA,S;AACA,qB;AACA,0E;AACA,S;AACA,2B;AACA,2D;AACA,S;AACA,K;;AAEA,uD;AACA,6D;;AAEA,wC;AACA,0D;AACA,mF;AACA,+C;AACA,4D;AACA,gD;AACA,6C;AACA,wC;AACA,sC;AACA,sC;AACA,sC;AACA,mD;AACA,8F;AACA,K;;AAEA,uB;AACA,gC;AACA,K;;AAEA,qC;AACA,oB;AACA,qF;AACA,sC;AACA,wE;AACA,kC;AACA,gB;AACA,4E;AACA,0D;AACA,S;AACA,K;;AAEA,sC;AACA,oB;AACA,qF;AACA,sC;AACA,wE;AACA,kC;AACA,gB;AACA,4E;AACA,wD;AACA,S;AACA,K;;AAEA,0C;AACA,qE;AACA,K;;AAEA,oC;AACA,oB;AACA,uD;AACA,sC;AACA,wE;AACA,oC;AACA,gB;AACA,iD;AACA,wG;AACA,S;AACA,K;;AAEA,gC;AACA,yB;AACA,qC;AACA,gB;AACA,sC;AACA,S;AACA,K;;AAEA,2C;AACA,gD;AACA,oE;AACA,0B;;AAEA,sC;;AAEA,2E;AACA,2C;AACA,sC;AACA,oC;AACA,0C;AACA,qC;AACA,a;AACA,gB;AACA,gC;AACA,+D;AACA,+D;AACA,mE;AACA,kG;AACA,wG;AACA,sB;AACA,S;AACA,mD;AACA,K;;AAEA,+B;AACA,+B;AACA,oF;AACA,2D;AACA,6D;AACA,4B;;AAEA,6B;AACA,kE;AACA,sC;AACA,uD;AACA,gB;AACA,kE;AACA,sC;AACA,uD;AACA,S;;AAEA,0C;AACA,K;;AAEA,wD;;AAEA,0B;AACA,oF;AACA,K;;AAEA,4C;AACA,mC;AACA,+C;AACA,mE;AACA,2E;AACA,mD;AACA,oB;AACA,uE;AACA,a;AACA,gB;AACA,qE;AACA,S;AACA,K;;AAEA,mC;AACA,mF;AACA,oD;AACA,K;;AAEA,yC;AACA,6G;AACA,K;;AAEA,sC;AACA,8D;AACA,K;;AAEA,2B;AACA,0B;;AAEA,gC;AACA,sC;AACA,gB;AACA,oD;AACA,wC;AACA,6C;AACA,a;AACA,wB;AACA,S;AACA,K;;AAEA,yB;AACA,0J;AACA,wB;AACA,oC;AACA,yC;AACA,oB;AACA,wC;AACA,a;AACA,S;AACA,M;;AAEA,4B;AACA,4B;AACA,K;;AAEA,8B;AACA,sC;AACA,kE;AACA,gD;AACA,wB;AACA,oB;AACA,0B;AACA,+B;AACA,uB;AACA,qB;AACA,yB;AACA,+B;AACA,oB;AACA,uB;AACA,mB;AACA,0B;AACA,+B;AACA,oB;AACA,4B;AACA,+B;AACA,sB;AACA,4B;AACA,+B;AACA,sB;AACA,iC;AACA,+B;AACA,S;;AAEA,mC;AACA,+B;AACA,4B;AACA,S;AACA,kC;AACA,+B;AACA,S;;AAEA,oC;AACA,kC;AACA,yD;AACA,S;;AAEA,oB;AACA,K;;AAEA,4B;AACA,sC;AACA,6D;AACA,wB;AACA,S;AACA,oG;AACA,K;;AAEA,kC;AACA,wD;AACA,K;;AAEA,sB;AACA,wC;AACA,K;;AAEA,wB;AACA,wD;AACA,K;;AAEA,yB;AACA,qB;AACA,kG;AACA,K;;AAEA,uC;AACA,oC;AACA,K;;AAEA,8B;AACA,oC;AACA,K;;AAEA,2B;AACA,iC;AACA,K;;AAEA,iD;AACA,qC;AACA,O;;AAEA,iD;AACA,wC;AACA,O;;AAEA,qD;AACA,4D;AACA,K;;AAEA,mD;AACA,mD;AACA,mD;AACA,mD;;AAEA,c;;AAEA,mC;AACA,sC;;AAEA,c;;AAEA,yC;AACA,yC;AACA,+C;AACA,+C;AACA,+C;AACA,+C;AACA,+C;AACA,+C;;AAEA,iG;AACA,gD;AACA,O;;AAEA,2E;AACA,4D;AACA,O;;AAEA,c;;AAEA,0C;AACA,yF;AACA,K;;AAEA,c;;AAEA,qC;AACA,mG;AACA,oE;AACA,K;;AAEA,wC;AACA,+C;AACA,oE;AACA,K;;AAEA,mC;AACA,8C;AACA,K;;AAEA,gC;AACA,+C;AACA,oE;AACA,K;;AAEA,yC;;AAEA,c;;AAEA,iC;;AAEA,c;;AAEA,+B;AACA,gD;AACA,8C;AACA,O;;AAEA,c;;AAEA,oC;AACA,kH;AACA,K;;AAEA,iD;;AAEA,c;;AAEA,8B;;AAEA,c;;AAEA,mC;AACA,2C;AACA,qD;AACA,6E;AACA,O;;AAEA,qC;AACA,iD;AACA,2D;AACA,O;;AAEA,c;;AAEA,oD;;AAEA,wC;;AAEA,kD;AACA,2D;AACA,O;;AAEA,mD;AACA,6D;AACA,O;;AAEA,oD;AACA,wD;AACA,O;;AAEA,yC;AACA,4C;;AAEA,c;;AAEA,6B;AACA,iC;AACA,oC;;AAEA,c;;AAEA,qC;AACA,qC;AACA,qC;AACA,qC;AACA,qC;AACA,qC;;AAEA,6E;AACA,0D;AACA,oE;AACA,8B;AACA,6B;AACA,gB;AACA,8C;AACA,S;AACA,O;;AAEA,8E;AACA,mC;AACA,O;;AAEA,c;;AAEA,0C;AACA,wC;AACA,gC;AACA,4C;AACA,a;AACA,kB;AACA,oD;AACA,gD;AACA,gC;AACA,iB;AACA,a;AACA,S;AACA,qB;AACA,K;;AAEA,c;;AAEA,sG;AACA,iC;AACA,uC;AACA,K;;AAEA,8E;AACA,sC;AACA,4C;AACA,K;;AAEA,qE;AACA,oC;AACA,0C;AACA,K;;AAEA,gD;AACA,0B;;AAEA,mC;AACA,qC;AACA,S;;AAEA,iC;AACA,yD;AACA,0C;AACA,2D;AACA,6H;AACA,iF;AACA,a;AACA,6B;AACA,2D;AACA,yB;AACA,a;AACA,S;AACA,K;;AAEA,c;;AAEA,sC;AACA,uE;AACA,4B;AACA,2D;AACA,8C;AACA,gB;AACA,uB;AACA,S;AACA,K;;AAEA,4C;AACA,yE;AACA,wE;AACA,K;;AAEA,yC;AACA,gD;AACA,yE;AACA,kE;AACA,8F;AACA,K;;AAEA,8C;AACA,mD;AACA,uC;AACA,O;;AAEA,0C;AACA,iD;AACA,uF;AACA,W;AACA,K;;AAEA,wB;AACA,yB;;AAEA,c;;AAEA,8B;;AAEA,c;;AAEA,+C;AACA,qC;AACA,K;;AAEA,uC;AACA,uC;AACA,mC;AACA,mC;AACA,2C;AACA,2C;;AAEA,qC;AACA,+D;AACA,kD;AACA,iC;AACA,O;AACA,gE;AACA,mC;AACA,kC;AACA,O;;AAEA,c;;AAEA,iC;AACA,0F;AACA,kD;AACA,8D;AACA,K;;AAEA,qD;AACA,uD;AACA,yB;AACA,yC;AACA,gB;AACA,yC;AACA,S;AACA,K;;;AAGA,c;;AAEA,yE;AACA,6E;AACA,4E;AACA,iB;AACA,+C;;AAEA,gD;;AAEA,c;;AAEA,gC;;AAEA,c;;AAEA,mC;AACA,2C;AACA,uC;;AAEA,c;;AAEA,oD;;AAEA,gD;;AAEA,c;;AAEA,gC;;AAEA,c;;AAEA,mC;AACA,2C;AACA,uC;;AAEA,c;;AAEA,oD;;AAEA,2C;AACA,4C;AACA,O;;AAEA,iD;AACA,2C;AACA,O;;AAEA,gD;AACA,wD;AACA,K;;AAEA,qC;AACA,sC;;AAEA,c;;AAEA,sC;;AAEA,c;;AAEA,6C;AACA,6C;AACA,6C;AACA,yC;AACA,uE;AACA,0D;AACA,O;;AAEA,c;;AAEA,8D;;AAEA,2C;AACA,2C;;AAEA,c;;AAEA,6B;AACA,wC;AACA,K;;AAEA,6B;AACA,+D;AACA,K;;AAEA,kD;;AAEA,4D;AACA,6D;AACA,gD;AACA,+C;AACA,gD;AACA,iD;AACA,+C;AACA,kD;AACA,iD;AACA,oD;AACA,kD;AACA,mD;AACA,oD;AACA,iD;AACA,gE;AACA,+C;AACA,iD;AACA,qD;AACA,uD;AACA,uD;AACA,uD;AACA,iD;AACA,kD;AACA,iE;AACA,kD;AACA,iD;AACA,qE;AACA,qE;AACA,mD;AACA,+C;AACA,2D;;AAEA,W;AACA,mD;AACA,sD;;AAEA,gB;AACA,wD;AACA,2D;;AAEA,c;AACA,qF;;AAEA,Y;AACA,qD;AACA,wD;;AAEA,W;AACA,6F;AACA,gG;AACA,2D;AACA,8D;;AAEA,U;AACA,yD;AACA,kG;AACA,8D;AACA,2D;AACA,wD;;AAEA,W;AACA,4E;;AAEA,a;AACA,kF;;AAEA,a;AACA,kF;;AAEA,kB;AACA,iG;;AAEA,a;AACA,+D;AACA,iE;AACA,mE;AACA,0E;AACA,uE;AACA,uE;AACA,8E;AACA,0D;AACA,8D;AACA,wD;AACA,wD;;AAEA,e;AACA,kD;AACA,kD;;AAEA,mB;AACA,mH;AACA,+G;AACA,4G;AACA,uK;;AAEA,iD;;AAEA,yC;AACA,gD;AACA,K;;AAEA,sC;AACA,qE;AACA,K;;AAEA,2B;AACA,kC;AACA,qC;AACA,kC;AACA,sC;AACA,yC;AACA,sB;AACA,M;;AAEA,wD;AACA,yC;AACA,6E;AACA,K;;AAEA,iC;AACA,2B;AACA,wB;AACA,4B;AACA,8B;AACA,iC;AACA,sC;AACA,M;;AAEA,mC;AACA,+C;AACA,iE;AACA,yG;AACA,oC;AACA,e;AACA,+C;AACA,S;AACA,sB;AACA,K;;AAEA,4C;;AAEA,6B;AACA,iC;AACA,K;;AAEA,8B;AACA,wC;;AAEA,+B;AACA,mD;AACA,K;;AAEA,0C;AACA,sB;AACA,K;;AAEA,+B;AACA,yB;AACA,0B;AACA,6B;AACA,wB;AACA,0B;AACA,uB;AACA,wB;AACA,qB;AACA,uB;AACA,uB;AACA,yB;AACA,sB;AACA,uB;AACA,M;;AAEA,+E;AACA,gD;AACA,+C;AACA,6D;AACA,0C;AACA,K;;AAEA,wC;AACA,sE;AACA,6F;AACA,K;;AAEA,gC;AACA,oB;AACA,2B;AACA,6B;AACA,6C;AACA,+B;AACA,oB;AACA,qC;AACA,a;AACA,S;AACA,uE;AACA,sE;AACA,mG;AACA,K;;AAEA,4C;;AAEA,uD;AACA,iE;AACA,6D;AACA,sD;AACA,0D;AACA,mD;AACA,sD;AACA,+C;AACA,2D;AACA,0D;AACA,0D;AACA,2D;AACA,8D;AACA,kD;AACA,gD;;AAEA,Y;AACA,wD;AACA,wD;AACA,6D;AACA,6D;AACA,6D;;AAEA,W;AACA,uC;AACA,+C;AACA,2D;AACA,2D;;AAEA,kB;AACA,4D;AACA,4D;AACA,+D;AACA,+D;AACA,iE;AACA,iE;AACA,iE;;AAEA,Y;AACA,uC;AACA,iE;AACA,+C;;AAEA,wD;AACA,0C;AACA,sD;AACA,0C;AACA,K;;AAEA,yD;AACA,yC;AACA,2B;AACA,+B;AACA,S;;AAEA,8B;;AAEA,4B;AACA,4D;AACA,S;;AAEA,c;AACA,qB;AACA,qC;AACA,0D;AACA,S;AACA,mB;AACA,K;;AAEA,gD;AACA,0D;AACA,K;;AAEA,qD;AACA,+D;AACA,K;;AAEA,kD;AACA,yD;AACA,K;;AAEA,uD;AACA,8D;AACA,K;;AAEA,qD;AACA,4D;AACA,K;;AAEA,uC;AACA,6C;AACA,qC;AACA,gC;AACA,kE;AACA,kC;AACA,kC;AACA,wC;AACA,mC;AACA,S;AACA,O;;AAEA,0B;AACA,wH;AACA,2H;;AAEA,2B;;AAEA,0B;AACA,wC;;AAEA,yD;AACA,iD;AACA,mD;;AAEA,wD;AACA,mD;AACA,mD;AACA,iD;AACA,kD;AACA,iD;;AAEA,oB;AACA,K;;AAEA,qF;AACA,yD;;AAEA,kE;AACA,0D;AACA,4D;;AAEA,kC;AACA,K;;AAEA,2D;AACA,wD;AACA,yE;AACA,K;;AAEA,qE;AACA,6D;AACA,0E;AACA,K;;AAEA,wB;AACA,8C;AACA,sC;AACA,wC;AACA,sC;AACA,+C;;AAEA,kE;AACA,uC;AACA,gD;;AAEA,0D;AACA,yC;;AAEA,mD;AACA,yC;;AAEA,mD;AACA,uC;;AAEA,qC;;AAEA,sE;AACA,4C;AACA,6C;;AAEA,6B;AACA,yE;AACA,sC;AACA,qB;;AAEA,8B;AACA,wC;AACA,qB;;AAEA,2B;AACA,6B;AACA,4B;;AAEA,oB;AACA,K;;AAEA,iC;AACA,2E;AACA,mC;AACA,K;;AAEA,kC;AACA,8C;AACA,6D;AACA,oC;AACA,K;;AAEA,yB;AACA,iB;AACA,mB;AACA,8C;;AAEA,sC;;AAEA,oD;AACA,yD;AACA,2D;AACA,4D;AACA,gB;AACA,iG;AACA,2E;AACA,4B;AACA,mF;AACA,kF;AACA,iF;AACA,gF;AACA,iF;AACA,sE;AACA,iG;AACA,kE;AACA,a;AACA,S;AACA,K;;AAEA,+B;AACA,6B;AACA,gB;AACA,gC;AACA,gC;AACA,0C;AACA,8C;AACA,U;AACA,K;;AAEA,6B;AACA,4B;AACA,kC;AACA,U;AACA,K;;AAEA,sC;AACA,qC;AACA,qC;AACA,qC;AACA,qC;AACA,qC;AACA,qC;AACA,qC;;AAEA,+B;AACA,sC;AACA,mC;AACA,K;;AAEA,+B;AACA,4B;AACA,oC;AACA,U;AACA,K;;AAEA,uD;AACA,6C;AACA,6C;AACA,2C;AACA,0C;AACA,4C;AACA,2C;;AAEA,uB;AACA,yC;AACA,K;;AAEA,2B;AACA,sB;AACA,oC;AACA,kC;AACA,+B;AACA,gC;AACA,iC;AACA,M;;AAEA,6F;AACA,iF;AACA,mF;AACA,K;;AAEA,6E;AACA,oE;AACA,+C;AACA,+C;AACA,+C;AACA,+C;AACA,+C;AACA,+C;;AAEA,4D;AACA,4D;AACA,4D;AACA,4D;AACA,4D;AACA,4D;AACA,4D;AACA,4D;AACA,4D;AACA,2E;;AAEA,6B;AACA,mC;AACA,sB;AACA,gD;AACA,K;;AAEA,4E;AACA,uE;AACA,kD;AACA,yB;AACA,S;AACA,kC;AACA,yC;AACA,S;AACA,sC;AACA,oB;AACA,K;;AAEA,oC;AACA,uC;AACA,uE;;AAEA,yB;AACA,sD;AACA,S;;AAEA,yC;AACA,K;;AAEA,mC;;AAEA,wC;AACA,uG;AACA,8C;AACA,+C;AACA,6C;AACA,8C;AACA,gD;AACA,6E;AACA,qC;;AAEA,qB;AACA,sE;AACA,2C;AACA,yB;AACA,S;;AAEA,uC;AACA,iB;AACA,gC;AACA,gC;AACA,gC;AACA,wC;AACA,gC;AACA,gC;AACA,+B;AACA,K;;AAEA,uD;;AAEA,wD;AACA,0E;AACA,+E;AACA,kD;AACA,8D;AACA,yD;AACA,yD;AACA,uD;AACA,sD;AACA,uD;AACA,wD;AACA,uD;AACA,2D;AACA,sD;AACA,wD;AACA,iE;AACA,uD;AACA,uD;AACA,qD;AACA,oD;AACA,qD;AACA,sD;AACA,qD;AACA,wD;AACA,uE;AACA,uE;AACA,uE;AACA,sD;AACA,0D;;AAEA,mB;AACA,sK;AACA,0C;;AAEA,0B;;AAEA,sC;AACA,yC;;AAEA,c;;AAEA,oC;AACA,uC;AACA,wD;AACA,2D;AACA,O;AACA,wD;AACA,2C;AACA,O;;AAEA,0B;;;AAGA,oC;;AAEA,wC;;AAEA,yD;AACA,6C;AACA,6C;AACA,wD;AACA,4D;AACA,2D;AACA,gD;AACA,qE;AACA,8D;AACA,gE;AACA,kD;AACA,6D;AACA,8D;AACA,4D;AACA,oD;AACA,gE;AACA,gE;AACA,sD;AACA,kE;AACA,wD;AACA,+E;;AAEA,+B;;AAEA,mB;;AAEA,I;;;;;;;;;;;;;;;;;;ACzgGA,uH;AACA,qB;AACA,mB"",""file"":""/packages/momentjs_moment.js"",""sourcesContent"":[""//! moment.js\n//! version : 2.10.0\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks__hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false\n        };\n    }\n\n    function isArray(input) {\n        return Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isDate(input) {\n        return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function utc__createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function valid__isValid(m) {\n        if (m._isValid == null) {\n            m._isValid = !isNaN(m._d.getTime()) &&\n                m._pf.overflow < 0 &&\n                !m._pf.empty &&\n                !m._pf.invalidMonth &&\n                !m._pf.nullInput &&\n                !m._pf.invalidFormat &&\n                !m._pf.userInvalidated;\n\n            if (m._strict) {\n                m._isValid = m._isValid &&\n                    m._pf.charsLeftOver === 0 &&\n                    m._pf.unusedTokens.length === 0 &&\n                    m._pf.bigHour === undefined;\n            }\n        }\n        return m._isValid;\n    }\n\n    function valid__createInvalid (flags) {\n        var m = utc__createUTC(NaN);\n        if (flags != null) {\n            extend(m._pf, flags);\n        }\n        else {\n            m._pf.userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    var momentProperties = hooks__hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (typeof from._isAMomentObject !== 'undefined') {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (typeof from._i !== 'undefined') {\n            to._i = from._i;\n        }\n        if (typeof from._f !== 'undefined') {\n            to._f = from._f;\n        }\n        if (typeof from._l !== 'undefined') {\n            to._l = from._l;\n        }\n        if (typeof from._strict !== 'undefined') {\n            to._strict = from._strict;\n        }\n        if (typeof from._tzm !== 'undefined') {\n            to._tzm = from._tzm;\n        }\n        if (typeof from._isUTC !== 'undefined') {\n            to._isUTC = from._isUTC;\n        }\n        if (typeof from._offset !== 'undefined') {\n            to._offset = from._offset;\n        }\n        if (typeof from._pf !== 'undefined') {\n            to._pf = from._pf;\n        }\n        if (typeof from._locale !== 'undefined') {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i in momentProperties) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (typeof val !== 'undefined') {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(+config._d);\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks__hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && hasOwnProp(obj, '_isAMomentObject'));\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            if (coercedNumber >= 0) {\n                value = Math.floor(coercedNumber);\n            } else {\n                value = Math.ceil(coercedNumber);\n            }\n        }\n\n        return value;\n    }\n\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function Locale() {\n    }\n\n    var locales = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && typeof module !== 'undefined' &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                require('./locale/' + name);\n                // because defineLocale currently also sets the global locale, we\n                // want to undo that for lazy loaded locales\n                locales__getSetGlobalLocale(oldLocale);\n            } catch (e) { }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function locales__getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (typeof values === 'undefined') {\n                data = locales__getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, values) {\n        if (values !== null) {\n            values.abbr = name;\n            if (!locales[name]) {\n                locales[name] = new Locale();\n            }\n            locales[name].set(values);\n\n            // backwards compat for now: also set the locale\n            locales__getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    // returns locale data\n    function locales__getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                get_set__set(this, unit, value);\n                hooks__hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get_set__get(this, unit);\n            }\n        };\n    }\n\n    function get_set__get (mom, unit) {\n        return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();\n    }\n\n    function get_set__set (mom, unit, value) {\n        return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n    }\n\n    // MOMENTS\n\n    function getSet (units, value) {\n        var unit;\n        if (typeof units === 'object') {\n            for (unit in units) {\n                this.set(unit, units[unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (typeof this[units] === 'function') {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var output = '' + Math.abs(number),\n            sign = number >= 0;\n\n        while (output.length < targetLength) {\n            output = '0' + output;\n        }\n        return (sign ? (forceSign ? '+' : '') : '-') + output;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '';\n            for (i = 0; i < length; i++) {\n                output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n\n        if (!formatFunctions[format]) {\n            formatFunctions[format] = makeFormatFunction(format);\n        }\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    var matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = typeof regex === 'function' ? regex : function (isStrict) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }).replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (typeof callback === 'number') {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n\n    function daysInMonth(year, month) {\n        return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  matchWord);\n    addRegexToken('MMMM', matchWord);\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            config._pf.invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m) {\n        return this._months[m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m) {\n        return this._monthsShort[m.month()];\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = utc__createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        // TODO: Move this out of here!\n        if (typeof value === 'string') {\n            value = mom.localeData().monthsParse(value);\n            // TODO: Another silent failure?\n            if (typeof value !== 'number') {\n                return mom;\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks__hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get_set__get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && m._pf.overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n\n            m._pf.overflow = overflow;\n        }\n\n        return m;\n    }\n\n    function warn(msg) {\n        if (hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n        return extend(function () {\n            if (firstTime) {\n                warn(msg);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks__hooks.suppressDeprecationWarnings = false;\n\n    var from_string__isoRegex = /^\\s*(?:[+-]\\d{6}|\\d{4})-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d{2}-\\d{2}/],\n        ['YYYY-MM-DD', /\\d{4}-\\d{2}-\\d{2}/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d{2}-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d{2}/],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss', /(T| )\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /(T| )\\d\\d:\\d\\d/],\n        ['HH', /(T| )\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = from_string__isoRegex.exec(string);\n\n        if (match) {\n            config._pf.iso = true;\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(string)) {\n                    // match[5] should be 'T' or undefined\n                    config._f = isoDates[i][0] + (match[6] || ' ');\n                    break;\n                }\n            }\n            for (i = 0, l = isoTimes.length; i < l; i++) {\n                if (isoTimes[i][1].exec(string)) {\n                    config._f += isoTimes[i][0];\n                    break;\n                }\n            }\n            if (string.match(matchOffset)) {\n                config._f += 'Z';\n            }\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n            hooks__hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks__hooks.createFromInputFallback = deprecate(\n        'moment construction falls back to js Date. This is ' +\n        'discouraged and will be removed in upcoming major ' +\n        'release. Please refer to ' +\n        'https://github.com/moment/moment/issues/1407 for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    function createDate (y, m, d, h, M, s, ms) {\n        //can't just apply() to create a date:\n        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply\n        var date = new Date(y, m, d, h, M, s, ms);\n\n        //the date constructor doesn't accept years < 1970\n        if (y < 1970) {\n            date.setFullYear(y);\n        }\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date = new Date(Date.UTC.apply(null, arguments));\n        if (y < 1970) {\n            date.setUTCFullYear(y);\n        }\n        return date;\n    }\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYY', 'YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks__hooks.parseTwoDigitYear(input);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    hooks__hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', false);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // firstDayOfWeek       0 = sun, 6 = sat\n    //                      the day of the week that starts the week\n    //                      (usually sunday or monday)\n    // firstDayOfWeekOfYear 0 = sun, 6 = sat\n    //                      the first week is the week that contains the first\n    //                      of this day of the week\n    //                      (eg. ISO weeks use thursday (4))\n    function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {\n        var end = firstDayOfWeekOfYear - firstDayOfWeek,\n            daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),\n            adjustedMoment;\n\n\n        if (daysToDayOfWeek > end) {\n            daysToDayOfWeek -= 7;\n        }\n\n        if (daysToDayOfWeek < end - 7) {\n            daysToDayOfWeek += 7;\n        }\n\n        adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd');\n        return {\n            week: Math.ceil(adjustedMoment.dayOfYear() / 7),\n            year: adjustedMoment.year()\n        };\n    }\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {\n        var d = createUTCDate(year, 0, 1).getUTCDay();\n        var daysToAdd;\n        var dayOfYear;\n\n        d = d === 0 ? 7 : d;\n        weekday = weekday != null ? weekday : firstDayOfWeek;\n        daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);\n        dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;\n\n        return {\n            year      : dayOfYear > 0 ? year      : year - 1,\n            dayOfYear : dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear\n        };\n    }\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        var now = new Date();\n        if (config._useUTC) {\n            return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()];\n        }\n        return [now.getFullYear(), now.getMonth(), now.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse)) {\n                config._pf._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year);\n            week = defaults(w.w, 1);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < dow) {\n                    ++week;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from begining of week\n                weekday = w.e + dow;\n            } else {\n                // default to begining of week\n                weekday = dow;\n            }\n        }\n        temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);\n\n        config._a[YEAR] = temp.year;\n        config._dayOfYear = temp.dayOfYear;\n    }\n\n    hooks__hooks.ISO_8601 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks__hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n\n        config._a = [];\n        config._pf.empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    config._pf.unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    config._pf.empty = false;\n                }\n                else {\n                    config._pf.unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                config._pf.unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        config._pf.charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            config._pf.unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._pf.bigHour === true && config._a[HOUR] <= 12) {\n            config._pf.bigHour = undefined;\n        }\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            config._pf.invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._pf = defaultParsingFlags();\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!valid__isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += tempConfig._pf.charsLeftOver;\n\n            //or tokens\n            currentScore += tempConfig._pf.unusedTokens.length * 10;\n\n            tempConfig._pf.score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond];\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var input = config._i,\n            format = config._f,\n            res;\n\n        config._locale = config._locale || locales__getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return valid__createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        res = new Moment(checkOverflow(config));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (input === undefined) {\n            config._d = new Date();\n        } else if (isDate(input)) {\n            config._d = new Date(+input);\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (typeof(input) === 'object') {\n            configFromObject(config);\n        } else if (typeof(input) === 'number') {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks__hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (typeof(locale) === 'boolean') {\n            strict = locale;\n            locale = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n        c._pf = defaultParsingFlags();\n\n        return createFromConfig(c);\n    }\n\n    function local__createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n         'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548',\n         function () {\n             var other = local__createLocal.apply(null, arguments);\n             return other < this ? this : other;\n         }\n     );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548',\n        function () {\n            var other = local__createLocal.apply(null, arguments);\n            return other > this ? this : other;\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return local__createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 36e5; // 1000 * 60 * 60\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = locales__getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchOffset);\n    addRegexToken('ZZ', matchOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(string) {\n        var matches = ((string || '').match(matchOffset) || []);\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res);\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(+res._d + diff);\n            hooks__hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return local__createLocal(input).local();\n        }\n        return model._isUTC ? local__createLocal(input).zone(model._offset || 0) : local__createLocal(input).local();\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks__hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(input);\n            }\n            if (Math.abs(input) < 16) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks__hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm) {\n            this.utcOffset(this._tzm);\n        } else if (typeof this._i === 'string') {\n            this.utcOffset(offsetFromString(this._i));\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!input) {\n            input = 0;\n        }\n        else {\n            input = local__createLocal(input).utcOffset();\n        }\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (this._a) {\n            var other = this._isUTC ? utc__createUTC(this._a) : local__createLocal(this._a);\n            return this.isValid() && compareArrays(this._a, other.toArray()) > 0;\n        }\n\n        return false;\n    }\n\n    function isLocal () {\n        return !this._isUTC;\n    }\n\n    function isUtcOffset () {\n        return this._isUTC;\n    }\n\n    function isUtc () {\n        return this._isUTC && this._offset === 0;\n    }\n\n    var aspNetRegex = /(\\-)?(?:(\\d*)\\.)?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?)?/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;\n\n    function create__createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (typeof input === 'number') {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])        * sign,\n                h  : toInt(match[HOUR])        * sign,\n                m  : toInt(match[MINUTE])      * sign,\n                s  : toInt(match[SECOND])      * sign,\n                ms : toInt(match[MILLISECOND]) * sign\n            };\n        } else if (!!(match = create__isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                d : parseIso(match[4], sign),\n                h : parseIso(match[5], sign),\n                m : parseIso(match[6], sign),\n                s : parseIso(match[7], sign),\n                w : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {milliseconds: 0, months: 0};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = create__createDuration(val, period);\n            add_subtract__addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = duration._days,\n            months = duration._months;\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (milliseconds) {\n            mom._d.setTime(+mom._d + milliseconds * isAdding);\n        }\n        if (days) {\n            get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);\n        }\n        if (months) {\n            setMonth(mom, get_set__get(mom, 'Month') + months * isAdding);\n        }\n        if (updateOffset) {\n            hooks__hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add_subtract__add      = createAdder(1, 'add');\n    var add_subtract__subtract = createAdder(-1, 'subtract');\n\n    function calendar__calendar (time) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || local__createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            diff = this.diff(sod, 'days', true),\n            format = diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n        return this.format(this.localeData().calendar(format, this, local__createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var inputMs;\n        units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');\n        if (units === 'millisecond') {\n            input = isMoment(input) ? input : local__createLocal(input);\n            return +this > +input;\n        } else {\n            inputMs = isMoment(input) ? +input : +local__createLocal(input);\n            return inputMs < +this.clone().startOf(units);\n        }\n    }\n\n    function isBefore (input, units) {\n        var inputMs;\n        units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');\n        if (units === 'millisecond') {\n            input = isMoment(input) ? input : local__createLocal(input);\n            return +this < +input;\n        } else {\n            inputMs = isMoment(input) ? +input : +local__createLocal(input);\n            return +this.clone().endOf(units) < inputMs;\n        }\n    }\n\n    function isBetween (from, to, units) {\n        return this.isAfter(from, units) && this.isBefore(to, units);\n    }\n\n    function isSame (input, units) {\n        var inputMs;\n        units = normalizeUnits(units || 'millisecond');\n        if (units === 'millisecond') {\n            input = isMoment(input) ? input : local__createLocal(input);\n            return +this === +input;\n        } else {\n            inputMs = +local__createLocal(input);\n            return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));\n        }\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            return Math.ceil(number);\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function diff (input, units, asFloat) {\n        var that = cloneWithOffset(input, this),\n            zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4,\n            delta, output;\n\n        units = normalizeUnits(units);\n\n        if (units === 'year' || units === 'month' || units === 'quarter') {\n            output = monthDiff(this, that);\n            if (units === 'quarter') {\n                output = output / 3;\n            } else if (units === 'year') {\n                output = output / 12;\n            }\n        } else {\n            delta = this - that;\n            output = units === 'second' ? delta / 1e3 : // 1000\n                units === 'minute' ? delta / 6e4 : // 1000 * 60\n                units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n                units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n                units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n                delta;\n        }\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        return -(wholeMonthDiff + adjust);\n    }\n\n    hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function moment_format__toISOString () {\n        var m = this.clone().utc();\n        if (0 < m.year() && m.year() <= 9999) {\n            if ('function' === typeof Date.prototype.toISOString) {\n                // native implementation is ~50x faster, use it when we can\n                return this.toDate().toISOString();\n            } else {\n                return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n            }\n        } else {\n            return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n        }\n    }\n\n    function format (inputString) {\n        var output = formatMoment(this, inputString || hooks__hooks.defaultFormat);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(local__createLocal(), withoutSuffix);\n    }\n\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = locales__getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    function startOf (units) {\n        units = normalizeUnits(units);\n        // the following switch intentionally omits break keywords\n        // to utilize falling through the cases.\n        switch (units) {\n        case 'year':\n            this.month(0);\n            /* falls through */\n        case 'quarter':\n        case 'month':\n            this.date(1);\n            /* falls through */\n        case 'week':\n        case 'isoWeek':\n        case 'day':\n            this.hours(0);\n            /* falls through */\n        case 'hour':\n            this.minutes(0);\n            /* falls through */\n        case 'minute':\n            this.seconds(0);\n            /* falls through */\n        case 'second':\n            this.milliseconds(0);\n            /* falls through */\n        }\n\n        // weeks are a special case\n        if (units === 'week') {\n            this.weekday(0);\n        }\n        if (units === 'isoWeek') {\n            this.isoWeekday(1);\n        }\n\n        // quarters are also special\n        if (units === 'quarter') {\n            this.month(Math.floor(this.month() / 3) * 3);\n        }\n\n        return this;\n    }\n\n    function endOf (units) {\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond') {\n            return this;\n        }\n        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n    }\n\n    function to_type__valueOf () {\n        return +this._d - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(+this / 1000);\n    }\n\n    function toDate () {\n        return this._offset ? new Date(+this) : this._d;\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function moment_valid__isValid () {\n        return valid__isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, this._pf);\n    }\n\n    function invalidAt () {\n        return this._pf.overflow;\n    }\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks__hooks.parseTwoDigitYear(input);\n    });\n\n    // HELPERS\n\n    function weeksInYear(year, dow, doy) {\n        return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week;\n    }\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;\n        return input == null ? year : this.add((input - year), 'y');\n    }\n\n    function getSetISOWeekYear (input) {\n        var year = weekOfYear(this, 1, 4).year;\n        return input == null ? year : this.add((input - year), 'y');\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    addFormatToken('Q', 0, 0, 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0], 10);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   matchWord);\n    addRegexToken('ddd',  matchWord);\n    addRegexToken('dddd', matchWord);\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) {\n        var weekday = config._locale.weekdaysParse(input);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            config._pf.invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input === 'string') {\n            if (!isNaN(input)) {\n                input = parseInt(input, 10);\n            }\n            else {\n                input = locale.weekdaysParse(input);\n                if (typeof input !== 'number') {\n                    return null;\n                }\n            }\n        }\n        return input;\n    }\n\n    // LOCALES\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m) {\n        return this._weekdays[m.day()];\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return this._weekdaysShort[m.day()];\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return this._weekdaysMin[m.day()];\n    }\n\n    function localeWeekdaysParse (weekdayName) {\n        var i, mom, regex;\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            if (!this._weekdaysParse[i]) {\n                mom = local__createLocal([2000, 1]).day(i);\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n        return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, function () {\n        return this.hours() % 12 || 12;\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        config._pf.bigHour = true;\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour he wants. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    function millisecond__milliseconds (token) {\n        addFormatToken(0, [token, 3], 0, 'millisecond');\n    }\n\n    millisecond__milliseconds('SSS');\n    millisecond__milliseconds('SSSS');\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n    addRegexToken('SSSS', matchUnsigned);\n    addParseToken(['S', 'SS', 'SSS', 'SSSS'], function (input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    });\n\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var momentPrototype__proto = Moment.prototype;\n\n    momentPrototype__proto.add          = add_subtract__add;\n    momentPrototype__proto.calendar     = calendar__calendar;\n    momentPrototype__proto.clone        = clone;\n    momentPrototype__proto.diff         = diff;\n    momentPrototype__proto.endOf        = endOf;\n    momentPrototype__proto.format       = format;\n    momentPrototype__proto.from         = from;\n    momentPrototype__proto.fromNow      = fromNow;\n    momentPrototype__proto.get          = getSet;\n    momentPrototype__proto.invalidAt    = invalidAt;\n    momentPrototype__proto.isAfter      = isAfter;\n    momentPrototype__proto.isBefore     = isBefore;\n    momentPrototype__proto.isBetween    = isBetween;\n    momentPrototype__proto.isSame       = isSame;\n    momentPrototype__proto.isValid      = moment_valid__isValid;\n    momentPrototype__proto.lang         = lang;\n    momentPrototype__proto.locale       = locale;\n    momentPrototype__proto.localeData   = localeData;\n    momentPrototype__proto.max          = prototypeMax;\n    momentPrototype__proto.min          = prototypeMin;\n    momentPrototype__proto.parsingFlags = parsingFlags;\n    momentPrototype__proto.set          = getSet;\n    momentPrototype__proto.startOf      = startOf;\n    momentPrototype__proto.subtract     = add_subtract__subtract;\n    momentPrototype__proto.toArray      = toArray;\n    momentPrototype__proto.toDate       = toDate;\n    momentPrototype__proto.toISOString  = moment_format__toISOString;\n    momentPrototype__proto.toJSON       = moment_format__toISOString;\n    momentPrototype__proto.toString     = toString;\n    momentPrototype__proto.unix         = unix;\n    momentPrototype__proto.valueOf      = to_type__valueOf;\n\n    // Year\n    momentPrototype__proto.year       = getSetYear;\n    momentPrototype__proto.isLeapYear = getIsLeapYear;\n\n    // Week Year\n    momentPrototype__proto.weekYear    = getSetWeekYear;\n    momentPrototype__proto.isoWeekYear = getSetISOWeekYear;\n\n    // Quarter\n    momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter;\n\n    // Month\n    momentPrototype__proto.month       = getSetMonth;\n    momentPrototype__proto.daysInMonth = getDaysInMonth;\n\n    // Week\n    momentPrototype__proto.week           = momentPrototype__proto.weeks        = getSetWeek;\n    momentPrototype__proto.isoWeek        = momentPrototype__proto.isoWeeks     = getSetISOWeek;\n    momentPrototype__proto.weeksInYear    = getWeeksInYear;\n    momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear;\n\n    // Day\n    momentPrototype__proto.date       = getSetDayOfMonth;\n    momentPrototype__proto.day        = momentPrototype__proto.days             = getSetDayOfWeek;\n    momentPrototype__proto.weekday    = getSetLocaleDayOfWeek;\n    momentPrototype__proto.isoWeekday = getSetISODayOfWeek;\n    momentPrototype__proto.dayOfYear  = getSetDayOfYear;\n\n    // Hour\n    momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour;\n\n    // Minute\n    momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute;\n\n    // Second\n    momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond;\n\n    // Millisecond\n    momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond;\n\n    // Offset\n    momentPrototype__proto.utcOffset            = getSetOffset;\n    momentPrototype__proto.utc                  = setOffsetToUTC;\n    momentPrototype__proto.local                = setOffsetToLocal;\n    momentPrototype__proto.parseZone            = setOffsetToParsedOffset;\n    momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    momentPrototype__proto.isDST                = isDaylightSavingTime;\n    momentPrototype__proto.isDSTShifted         = isDaylightSavingTimeShifted;\n    momentPrototype__proto.isLocal              = isLocal;\n    momentPrototype__proto.isUtcOffset          = isUtcOffset;\n    momentPrototype__proto.isUtc                = isUtc;\n    momentPrototype__proto.isUTC                = isUtc;\n\n    // Timezone\n    momentPrototype__proto.zoneAbbr = getZoneAbbr;\n    momentPrototype__proto.zoneName = getZoneName;\n\n    // Deprecations\n    momentPrototype__proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    momentPrototype__proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    momentPrototype__proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone);\n\n    var momentPrototype = momentPrototype__proto;\n\n    function moment__createUnix (input) {\n        return local__createLocal(input * 1000);\n    }\n\n    function moment__createInZone () {\n        return local__createLocal.apply(null, arguments).parseZone();\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function locale_calendar__calendar (key, mom, now) {\n        var output = this._calendar[key];\n        return typeof output === 'function' ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY LT',\n        LLLL : 'dddd, MMMM D, YYYY LT'\n    };\n\n    function longDateFormat (key) {\n        var output = this._longDateFormat[key];\n        if (!output && this._longDateFormat[key.toUpperCase()]) {\n            output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) {\n                return val.slice(1);\n            });\n            this._longDateFormat[key] = output;\n        }\n        return output;\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relative__relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (typeof output === 'function') ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);\n    }\n\n    function set__set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (typeof prop === 'function') {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _ordinalParseLenient.\n        this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\\d{1,2}/.source);\n    }\n\n    var prototype__proto = Locale.prototype;\n\n    prototype__proto._calendar       = defaultCalendar;\n    prototype__proto.calendar        = locale_calendar__calendar;\n    prototype__proto._longDateFormat = defaultLongDateFormat;\n    prototype__proto.longDateFormat  = longDateFormat;\n    prototype__proto._invalidDate    = defaultInvalidDate;\n    prototype__proto.invalidDate     = invalidDate;\n    prototype__proto._ordinal        = defaultOrdinal;\n    prototype__proto.ordinal         = ordinal;\n    prototype__proto._ordinalParse   = defaultOrdinalParse;\n    prototype__proto.preparse        = preParsePostFormat;\n    prototype__proto.postformat      = preParsePostFormat;\n    prototype__proto._relativeTime   = defaultRelativeTime;\n    prototype__proto.relativeTime    = relative__relativeTime;\n    prototype__proto.pastFuture      = pastFuture;\n    prototype__proto.set             = set__set;\n\n    // Month\n    prototype__proto.months       =        localeMonths;\n    prototype__proto._months      = defaultLocaleMonths;\n    prototype__proto.monthsShort  =        localeMonthsShort;\n    prototype__proto._monthsShort = defaultLocaleMonthsShort;\n    prototype__proto.monthsParse  =        localeMonthsParse;\n\n    // Week\n    prototype__proto.week = localeWeek;\n    prototype__proto._week = defaultLocaleWeek;\n    prototype__proto.firstDayOfYear = localeFirstDayOfYear;\n    prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;\n\n    // Day of Week\n    prototype__proto.weekdays       =        localeWeekdays;\n    prototype__proto._weekdays      = defaultLocaleWeekdays;\n    prototype__proto.weekdaysMin    =        localeWeekdaysMin;\n    prototype__proto._weekdaysMin   = defaultLocaleWeekdaysMin;\n    prototype__proto.weekdaysShort  =        localeWeekdaysShort;\n    prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort;\n    prototype__proto.weekdaysParse  =        localeWeekdaysParse;\n\n    // Hours\n    prototype__proto.isPM = localeIsPM;\n    prototype__proto._meridiemParse = defaultLocaleMeridiemParse;\n    prototype__proto.meridiem = localeMeridiem;\n\n    function lists__get (format, index, field, setter) {\n        var locale = locales__getLocale();\n        var utc = utc__createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function list (format, index, field, count, setter) {\n        if (typeof format === 'number') {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return lists__get(format, index, field, setter);\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < count; i++) {\n            out[i] = lists__get(format, i, field, setter);\n        }\n        return out;\n    }\n\n    function lists__listMonths (format, index) {\n        return list(format, index, 'months', 12, 'month');\n    }\n\n    function lists__listMonthsShort (format, index) {\n        return list(format, index, 'monthsShort', 12, 'month');\n    }\n\n    function lists__listWeekdays (format, index) {\n        return list(format, index, 'weekdays', 7, 'day');\n    }\n\n    function lists__listWeekdaysShort (format, index) {\n        return list(format, index, 'weekdaysShort', 7, 'day');\n    }\n\n    function lists__listWeekdaysMin (format, index) {\n        return list(format, index, 'weekdaysMin', 7, 'day');\n    }\n\n    locales__getSetGlobalLocale('en', {\n        ordinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n    hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locales__getSetGlobalLocale);\n    hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locales__getLocale);\n\n    var mathAbs = Math.abs;\n\n    function abs__abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function duration_add_subtract__addSubtract (duration, input, value, direction) {\n        var other = create__createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function duration_add_subtract__add (input, value) {\n        return duration_add_subtract__addSubtract(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function duration_add_subtract__subtract (input, value) {\n        return duration_add_subtract__addSubtract(this, input, value, -1);\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years = 0;\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // Accurately convert days to years, assume start from year 0.\n        years = absFloor(daysToYears(days));\n        days -= absFloor(yearsToDays(years));\n\n        // 30 days to a month\n        // TODO (iskren): Use anchor date (like 1st Jan) to compute this.\n        months += absFloor(days / 30);\n        days   %= 30;\n\n        // 12 months -> 1 year\n        years  += absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToYears (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        return days * 400 / 146097;\n    }\n\n    function yearsToDays (years) {\n        // years * 365 + absFloor(years / 4) -\n        //     absFloor(years / 100) + absFloor(years / 400);\n        return years * 146097 / 400;\n    }\n\n    function as (units) {\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'year') {\n            days   = this._days   + milliseconds / 864e5;\n            months = this._months + daysToYears(days) * 12;\n            return units === 'month' ? months : months / 12;\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(yearsToDays(this._months / 12));\n            switch (units) {\n                case 'week'   : return days / 7            + milliseconds / 6048e5;\n                case 'day'    : return days                + milliseconds / 864e5;\n                case 'hour'   : return days * 24           + milliseconds / 36e5;\n                case 'minute' : return days * 24 * 60      + milliseconds / 6e4;\n                case 'second' : return days * 24 * 60 * 60 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function as__valueOf () {\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asYears        = makeAs('y');\n\n    function get__get (units) {\n        units = normalizeUnits(units);\n        return this[units + 's']();\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this._data[name];\n        };\n    }\n\n    var get__milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        s: 45,  // seconds to minute\n        m: 45,  // minutes to hour\n        h: 22,  // hours to day\n        d: 26,  // days to month\n        M: 11   // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function humanize__relativeTime (posNegDuration, withoutSuffix, locale) {\n        var duration = create__createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds < thresholds.s && ['s', seconds]  ||\n                minutes === 1          && ['m']           ||\n                minutes < thresholds.m && ['mm', minutes] ||\n                hours   === 1          && ['h']           ||\n                hours   < thresholds.h && ['hh', hours]   ||\n                days    === 1          && ['d']           ||\n                days    < thresholds.d && ['dd', days]    ||\n                months  === 1          && ['M']           ||\n                months  < thresholds.M && ['MM', months]  ||\n                years   === 1          && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function humanize__getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        var locale = this.localeData();\n        var output = humanize__relativeTime(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var iso_string__abs = Math.abs;\n\n    function iso_string__toISOString() {\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = iso_string__abs(this.years());\n        var M = iso_string__abs(this.months());\n        var D = iso_string__abs(this.days());\n        var h = iso_string__abs(this.hours());\n        var m = iso_string__abs(this.minutes());\n        var s = iso_string__abs(this.seconds() + this.milliseconds() / 1000);\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        return (total < 0 ? '-' : '') +\n            'P' +\n            (Y ? Y + 'Y' : '') +\n            (M ? M + 'M' : '') +\n            (D ? D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? h + 'H' : '') +\n            (m ? m + 'M' : '') +\n            (s ? s + 'S' : '');\n    }\n\n    var duration_prototype__proto = Duration.prototype;\n\n    duration_prototype__proto.abs            = abs__abs;\n    duration_prototype__proto.add            = duration_add_subtract__add;\n    duration_prototype__proto.subtract       = duration_add_subtract__subtract;\n    duration_prototype__proto.as             = as;\n    duration_prototype__proto.asMilliseconds = asMilliseconds;\n    duration_prototype__proto.asSeconds      = asSeconds;\n    duration_prototype__proto.asMinutes      = asMinutes;\n    duration_prototype__proto.asHours        = asHours;\n    duration_prototype__proto.asDays         = asDays;\n    duration_prototype__proto.asWeeks        = asWeeks;\n    duration_prototype__proto.asMonths       = asMonths;\n    duration_prototype__proto.asYears        = asYears;\n    duration_prototype__proto.valueOf        = as__valueOf;\n    duration_prototype__proto._bubble        = bubble;\n    duration_prototype__proto.get            = get__get;\n    duration_prototype__proto.milliseconds   = get__milliseconds;\n    duration_prototype__proto.seconds        = seconds;\n    duration_prototype__proto.minutes        = minutes;\n    duration_prototype__proto.hours          = hours;\n    duration_prototype__proto.days           = days;\n    duration_prototype__proto.weeks          = weeks;\n    duration_prototype__proto.months         = months;\n    duration_prototype__proto.years          = years;\n    duration_prototype__proto.humanize       = humanize;\n    duration_prototype__proto.toISOString    = iso_string__toISOString;\n    duration_prototype__proto.toString       = iso_string__toISOString;\n    duration_prototype__proto.toJSON         = iso_string__toISOString;\n    duration_prototype__proto.locale         = locale;\n    duration_prototype__proto.localeData     = localeData;\n\n    // Deprecations\n    duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString);\n    duration_prototype__proto.lang = lang;\n\n    // Side effect imports\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    hooks__hooks.version = '2.10.0';\n\n    setHookCallback(local__createLocal);\n\n    hooks__hooks.fn                    = momentPrototype;\n    hooks__hooks.min                   = min;\n    hooks__hooks.max                   = max;\n    hooks__hooks.utc                   = utc__createUTC;\n    hooks__hooks.unix                  = moment__createUnix;\n    hooks__hooks.months                = lists__listMonths;\n    hooks__hooks.isDate                = isDate;\n    hooks__hooks.locale                = locales__getSetGlobalLocale;\n    hooks__hooks.invalid               = valid__createInvalid;\n    hooks__hooks.duration              = create__createDuration;\n    hooks__hooks.isMoment              = isMoment;\n    hooks__hooks.weekdays              = lists__listWeekdays;\n    hooks__hooks.parseZone             = moment__createInZone;\n    hooks__hooks.localeData            = locales__getLocale;\n    hooks__hooks.isDuration            = isDuration;\n    hooks__hooks.monthsShort           = lists__listMonthsShort;\n    hooks__hooks.weekdaysMin           = lists__listWeekdaysMin;\n    hooks__hooks.defineLocale          = defineLocale;\n    hooks__hooks.weekdaysShort         = lists__listWeekdaysShort;\n    hooks__hooks.normalizeUnits        = normalizeUnits;\n    hooks__hooks.relativeTimeThreshold = humanize__getSetRelativeTimeThreshold;\n\n    var _moment = hooks__hooks;\n\n    return _moment;\n\n}));"",""// moment.js makes `moment` global on the window (or global) object, while Meteor expects a file-scoped global variable\nmoment = this.moment;\ndelete this.moment;\n""]}"
138dbf6f5cc98b1ae494408e245296b75dde287b,3231804,    # http://stackoverflow.com/questions/3231804/in-bash-how-to-add-are-you-sure-y-n-to-any-command-or-alias
de103faeb9d53dc384f22ffe0354d0281203c988,24394376,    // http://stackoverflow.com/questions/24276619/better-way-to-get-the-viewport-of-a-scrollable-div-in-rtl-mode/24394376#24394376
1deaa2045eb1effd95d16829022bada3458f760f,22492274,https://stackoverflow.com/questions/22492274/neural-network-in-javascript-not-learning-properly
99ee406d96710ad318e78ea96ebadad2727d0e0f,53015798,* [google](https://stackoverflow.com/questions/53015798/jenkins-role-strategy-plugin-and-multibranch-pipeline)
93104ac20f9d1fd5cc64b3437b1ba0e40e7a3127,5294955,    // http://stackoverflow.com/questions/5294955/how-to-scale-down-a-range-of-numbers-with-a-known-min-and-max-value
a08f95c8bb187fcaac7696b7560e17d95e336d01,18939421,[source](http://stackoverflow.com/questions/18939421/what-should-xcode-6-gitignore-file-include)
b723b7bf886e867f3232ccdd4314aad05f3c119c,1200591,     * http://www.stackoverflow.com/questions/1200591/coredata-error-while-saving-binding-not-implemented-for-this-sqltype-7
60dceed5a1b15cf1be4c8fa799c5e943b95087ae,8506881,"				// ""nice number"" algorithm. See http://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks"
24621a6aa5b7914be0f1217a85ace918f04ce9c4,45275402,		// <https://stackoverflow.com/questions/45275402/java-create-a-list-with-n-objects/45275859#comment-77531249>
4baa556e3848627476209d9604bd87dd0549e1d7,470832,  // http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
2812b83a31fe4c4d9b8a24af63f84e74584499aa,359788,   * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
1d7a0fa1fbf383ae4067ef761e8b235c30506aeb,628912,    box-sizing: border-box; /* @see http://stackoverflow.com/questions/628500/can-i-stop-100-width-text-boxes-from-extending-beyond-their-containers/628912#628912 */
2165e1d494e401b5480afb625493167598c6e572,105034, * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
41ceaedcb933e34d855abdd4969552f14f787820,263416,            // credit: http://stackoverflow.com/a/263416/677735
8203ff3646b450adb0622bdf509b42021ddc942e,9355899, http://stackoverflow.com/questions/9355899/android-email-edittext-validation</div>
a256f1b02fae8b4e9a07a1f5dda868d8b9499ba0,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
89a2fe5a6e174db45d6126a90d5648c851894933,3330919,        // http://stackoverflow.com/a/3330919)
1da687b6888c41c3058e85dd548850f9d67691fb,13950376,	 * @see		http://stackoverflow.com/a/13950376
476b8858322201c78908458e52fdbf2f11310abc,5939801,        //http://stackoverflow.com/questions/5939801/passing-extra-parameters-to-source-using-jquery-ui-autocomplete
84d654797046b72996a4314847da641eeff42fda,17988219,[More information](https://stackoverflow.com/questions/17988219/system-windows-forms-messagebox-in-netversion-4-0-4-5-behaves-differently-in-wi)
b2866fb64db4e738e266db7b1d88c488c21403ac,12345,">   2. **Hyperlink directly to the original question**on the source site (e.g., http://stackoverflow.com/questions/12345)"
ac3f78d4a622ca605b8dccd2a3e7c80c607af97e,3330919,        // http://stackoverflow.com/a/3330919)
a540d04e1e3031e1bb8c5e570cc61bd8c060bbcd,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
252c42a26a1f38d933cd411cb916a694289571b1,5334068,    // See http://stackoverflow.com/questions/5324623/functional-o1-append-and-on-iteration-from-first-element-list-data-structure/5334068#5334068
baa7f2e0d4d45462775cabc80f8b4880112c907b,7264899,       //see http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
10a2c8497435286409647e885c8b7eff8987a348,8452751,        // https://stackoverflow.com/a/8452751/946226
9c85d188501106b27860dbd0e3f4c190366b00b4,5526019,   *  [Stack Overflow](http://stackoverflow.com/questions/5526019/compile-errors-stdset-with-const-members)
06925a0192d7d346cf0943cff7eed3530112a2e0,173400,     * http://stackoverflow.com/questions/173400/php-arrays-a-good-way-to-check-if-an-array-is-associative-or-numeric
324ae8e67db4fa4c5689b323ce1323d267f3c2ac,10307561,  // http://stackoverflow.com/questions/10307561/uikeyboardtypenumberpad-ipad
964076c1b4ec7933ffdb794119f9820360f08982,38507454,        /// https://stackoverflow.com/a/38507454/32240
660de1acbe3bef1e544e8b398fe85c30964215a4,1573053,      } // https://stackoverflow.com/questions/1573053/javascript-function-to-convert-color-names-to-hex-codes
5281850e15aa37233f5adac41ab2a57c45537ecc,274094, * After https://stackoverflow.com/questions/273789/is-there-a-version-of-javascripts-string-indexof-that-allows-for-regular-expr/274094#274094
a91bb58a887f47d74019489f775c2b6846ebcb9c,18867628,        //https://stackoverflow.com/questions/18867628/mongoose-deep-population-populate-a-populated-field
a4a6fe2763f4db4eab78e8ebd6cac01b96689c14,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
903ef79a28ca668ef261db45c3e4182af2b0e04b,22913324,	//		http://stackoverflow.com/a/22913324/211160
b66e162c27a3da77341dd31fdea0a4cb92c43421,17636735,        // http://stackoverflow.com/questions/17636735/expandable-listview-in-fragment
9845ee83698b8da79fad5f01eaf9d83f29645715,10943544,    //Credit: http://stackoverflow.com/questions/10943544/how-to-parse-an-rss-feed-using-javascript
fb1ded02b2a44a2e9b274cc0fc6ad1c0269bebd1,38210,- [stackoverflow](http://stackoverflow.com/q/38210/343194) 上的程序员应该阅读的非编程类书籍有哪些？ [中文版](what-non-programming-books-should-programmers-read.md)
8f1d062f449a67b8f82c111b32feefcd54861dd8,3520977,"			shellScript = ""# Version 2.0 (updated for Xcode 4, with some fixes)\n# Changes:\n#    - Works with xcode 4, even when running xcode 3 projects (Workarounds for apple bugs)\n#    - Faster / better: only runs lipo once, instead of once per recursion\n#    - Added some debugging statemetns that can be switched on/off by changing the DEBUG_THIS_SCRIPT variable to \""true\""\n#    - Fixed some typos\n# \n# Purpose:\n#   Create a static library for iPhone from within XCode\n#   Because Apple staff DELIBERATELY broke Xcode to make this impossible from the GUI (Xcode 3.2.3 specifically states this in the Release notes!)\n#   ...no, I don't understand why they did this!\n#\n# Author: Adam Martin - http://twitter.com/redglassesapps\n# Based on: original script from Eonil (main changes: Eonil's script WILL NOT WORK in Xcode GUI - it WILL CRASH YOUR COMPUTER)\n#\n# More info: see this Stack Overflow question: http://stackoverflow.com/questions/3520977/build-fat-static-library-device-simulator-using-xcode-and-sdk-4\n\n#################[ Tests: helps workaround any future bugs in Xcode ]########\n#\nDEBUG_THIS_SCRIPT=\""true\""\n\nif [ $DEBUG_THIS_SCRIPT = \""true\"" ]\nthen\necho \""########### TESTS #############\""\necho \""Use the following variables when debugging this script; note that they may change on recursions\""\necho \""BUILD_DIR = $BUILD_DIR\""\necho \""BUILD_ROOT = $BUILD_ROOT\""\necho \""CONFIGURATION_BUILD_DIR = $CONFIGURATION_BUILD_DIR\""\necho \""BUILT_PRODUCTS_DIR = $BUILT_PRODUCTS_DIR\""\necho \""CONFIGURATION_TEMP_DIR = $CONFIGURATION_TEMP_DIR\""\necho \""TARGET_BUILD_DIR = $TARGET_BUILD_DIR\""\nfi\n\necho \""SYMROOT: ${SYMROOT}\""\n\n#####################[ part 1 ]##################\n# First, work out the BASESDK version number (NB: Apple ought to report this, but they hide it)\n#    (incidental: searching for substrings in sh is a nightmare! Sob)\n\nSDK_VERSION=$(echo ${SDK_NAME} | grep -o '.\\{3\\}$')\n\n# Next, work out if we're in SIM or DEVICE\n\nif [ ${PLATFORM_NAME} = \""iphonesimulator\"" ]\nthen\nOTHER_SDK_TO_BUILD=iphoneos${SDK_VERSION}\nelse\nOTHER_SDK_TO_BUILD=iphonesimulator${SDK_VERSION}\nfi\n\necho \""XCode has selected SDK: ${PLATFORM_NAME} with version: ${SDK_VERSION} (although back-targetting: ${IPHONEOS_DEPLOYMENT_TARGET})\""\necho \""...therefore, OTHER_SDK_TO_BUILD = ${OTHER_SDK_TO_BUILD}\""\n#\n#####################[ end of part 1 ]##################\n\n#####################[ part 2 ]##################\n#\n# IF this is the original invocation, invoke WHATEVER other builds are required\n#\n# Xcode is already building ONE target...\n#\n# ...but this is a LIBRARY, so Apple is wrong to set it to build just one.\n# ...we need to build ALL targets\n# ...we MUST NOT re-build the target that is ALREADY being built: Xcode WILL CRASH YOUR COMPUTER if you try this (infinite recursion!)\n#\n#\n# So: build ONLY the missing platforms/configurations.\n\nif [ \""true\"" == ${ALREADYINVOKED:-false} ]\nthen\necho \""RECURSION: I am NOT the root invocation, so I'm NOT going to recurse\""\nelse\n# CRITICAL:\n# Prevent infinite recursion (Xcode sucks)\nexport ALREADYINVOKED=\""true\""\n\necho \""RECURSION: I am the root ... recursing all missing build targets NOW...\""\necho \""RECURSION: ...about to invoke: xcodebuild -configuration \\\""${CONFIGURATION}\\\"" -target \\\""${TARGET_NAME}\\\"" -sdk \\\""${OTHER_SDK_TO_BUILD}\\\"" ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO\""\n\n# TRACY: had to send output to /dev/null because I couldn't see more than 200 lines in the build log, and was losing the more important messages at the end of the build. If someone knows how to set the number of lines in build log please do!\nxcodebuild -configuration \""${CONFIGURATION}\"" -target \""${TARGET_NAME}\"" -sdk \""${OTHER_SDK_TO_BUILD}\"" ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO BUILD_DIR=\""${BUILD_DIR}\"" BUILD_ROOT=\""${BUILD_ROOT}\"" > /dev/null\n\nACTION=\""build\""\n\n#Merge all platform binaries as a fat binary for each configurations.\n\n# Calculate where the (multiple) built files are coming from:\nCURRENTCONFIG_DEVICE_DIR=${SYMROOT}/${CONFIGURATION}-iphoneos\nCURRENTCONFIG_SIMULATOR_DIR=${SYMROOT}/${CONFIGURATION}-iphonesimulator\n\necho \""Taking device build from: ${CURRENTCONFIG_DEVICE_DIR}\""\necho \""Taking simulator build from: ${CURRENTCONFIG_SIMULATOR_DIR}\""\n\nCREATING_UNIVERSAL_DIR=${SYMROOT}/${CONFIGURATION}-universal\necho \""...I will output a universal build to: ${CREATING_UNIVERSAL_DIR}\""\n\n# ... remove the products of previous runs of this script\n#      NB: this directory is ONLY created by this script - it should be safe to delete!\n\nrm -rf \""${CREATING_UNIVERSAL_DIR}\""\nmkdir \""${CREATING_UNIVERSAL_DIR}\""\n\nfi\n\n#\necho \""lipo: for current configuration (${CONFIGURATION}) creating output file: ${CREATING_UNIVERSAL_DIR}/${STATIC_LIB_NAME}\""\nlipo -create -output \""${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}\"" \""${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}\"" \""${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}\""\n\n#########\n# END StackOverflow script\n#\n\n#########\n# Package it up\n#\n\nCODE_DIR=`pwd`\nRESOURCE_DIR=\""Bitly\""\n\nrm -rf \""${RESOURCE_DIR}\""\nmkdir \""${RESOURCE_DIR}\""\n\ncp -r \""${CODE_DIR}/BitlyLib/BitlyPublic\"" \""${RESOURCE_DIR}\""\ncp \""${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}\"" \""${RESOURCE_DIR}\""\n\n\n\n\n#mkdir \""${RESOURCE_DIR}/Headers\""\n#echo \""Copying headers from ${CURRENTCONFIG_DEVICE_DIR}/usr/local/include/ to ${RESOURCE_DIR}/Headers\""\n#cp \""${CURRENTCONFIG_DEVICE_DIR}/usr/local/include/\""* \""${RESOURCE_DIR}/Headers\""\n#cd ..\n#mkdir \""${RESOURCE_DIR}/Images\""\n#cp \""${CODE_DIR}/BitlyLib/Images/\""* \""${RESOURCE_DIR}/Images\""\n#cp \""${CODE_DIR}/BitlyLib/BitlyTweetSheet_iPad.xib\"" \""${RESOURCE_DIR}\""\n#cp \""${CODE_DIR}/BitlyLib/BitlyTweetSheet_iPhone.xib\"" \""${RESOURCE_DIR}\""\n\n\n# VERSIONING update the Info-plist with latest Build number\nINFO_PLIST=\""${CODE_DIR}/BitlyLib/BitlyLib-Info.plist\""\nVERSION_NUM=`/usr/libexec/PlistBuddy -c \""Print CFBundleVersion\"" \""${INFO_PLIST}\""`\necho \""VERSION_NUM: ${VERSION_NUM}\""\nBUILD_DATE=`date \""+%Y%m%d_%H:%M:%S\""`\necho \""BUILD_DATE: ${BUILD_DATE}\""\n/usr/libexec/PlistBuddy -c \""Set :CFBuildDate ${BUILD_DATE}\"" \""${INFO_PLIST}\""\nBUILD_NUM=`/usr/libexec/PlistBuddy -c \""Print CFBuildNumber\"" \""${INFO_PLIST}\""`\nBUILD_NUM=`expr \""${BUILD_NUM}\"" \""+\"" 1`\necho \""BUILD_NUM: ${BUILD_NUM}\""\n/usr/libexec/PlistBuddy -c \""Set :CFBuildNumber ${BUILD_NUM}\"" \""${INFO_PLIST}\""\n\n\n#ARCHIVE_NAME=\""Bitly_${VERSION_NUM}_${BUILD_NUM}.tgz\""\n\n#pushd \""${CREATING_UNIVERSAL_DIR}\""\n#echo \""creating tar file from ${CREATING_UNIVERSAL_DIR}/Bitly\""\n#tar czvf \""${ARCHIVE_NAME}\"" \""Bitly\""\n\n#cp \""${ARCHIVE_NAME}\"" \""${CODE_DIR}/distribution\""\n\n#echo \""Created archive: ${CODE_DIR}/distribution/${ARCHIVE_NAME}\""\n\n#popd > /dev/null\n\n\n"";"
ebb2b298195a4e85fd52af92ff2f772ec76ec315,7892863,Link: http://stackoverflow.com/questions/7892863/jquery-click-not-working-with-ipad
a87ec5fddd95cd1823a7231bada003646956a10c,36858486,[Update BRAM without regenerate net list](http://stackoverflow.com/a/36858486/586382)
0f89d9489e372dd460d2235630432dea9bc96366,14471414,"7737152,comment,7733881,7736895,1,0,AdamTReineke,,,""If you want to really get that sample working, here&#x27;s a pull request that has Angular working in Win8 apps. I&#x27;m not sure how Angular changes since the request was made would merge so I wouldn&#x27;t recommend it for anything beyond an experiment. <a href=""""https://github.com/angular/angular.js/pull/6217"""" rel=""""nofollow"""">https://github.com/angular/angular.js/pull/6217</a><p>The error originates because certain coding patterns may be unsafe and are blocked to protect users. Here&#x27;s a SO answer on the topic, there may be a better MSDN page with the details, but it&#x27;s late: <a href=""""http://stackoverflow.com/a/14471414"""" rel=""""nofollow"""">http://stackoverflow.com/a/14471414</a><p>(Disclaimer: I work on the IE Dev Tools team and helped test the Hybrid Apps debugger. I was not involved with the pull request or StackOverflow post linked above.)"",1399971666"
a87ec6e58252b97fc7b9613c86536e19525b33bf,29753060,    # http://stackoverflow.com/questions/29753060/how-to-convert-numpy-datetime64-into-datetime
65601a111cb75a06626db9147e8f8c68bbc19903,14967647,// From http://stackoverflow.com/questions/14967647/ (continues on next line)
9744270364fe6b4f4dbb56b57c826b071b7e3c35,6771258,"- For more information, read this awesome [Stack Overflow article](http://stackoverflow.com/questions/6771258/whats-the-difference-if-meta-http-equiv-x-ua-compatible-content-ie-edge-e)."
33c2d053dd5d7831938f4647370abf890806ccea,5501451,//http://stackoverflow.com/questions/5501451/php-x86-how-to-get-filesize-of-2-gb-file-without-external-program
eed25b8b4684b983cb6bdb914a55e928c5734d86,4750470,   * http://stackoverflow.com/questions/4750470/how-to-get-pid-of-process-ive-just-started-within-java-program
e654227592d80fec7053d27c5dd2c669c1c9d89f,3330919,        // http://stackoverflow.com/a/3330919)
42f03907e4736a4472180800f9acd73b6a35d578,301287,"  ""readme"": ""# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/coveralls/bestiejs/punycode.js/master.svg)](https://coveralls.io/r/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js)\n\nA robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891), and works on nearly all JavaScript platforms.\n\nThis JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm:\n\n* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C)\n* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c)\n* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c)\n* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287)\n* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072))\n\nThis project is [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with [Node.js v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) and [io.js v1.0.0+](https://github.com/iojs/io.js/blob/v1.x/lib/punycode.js).\n\n## Installation\n\nVia [npm](https://www.npmjs.com/) (only required for Node.js releases older than v0.6.2):\n\n```bash\nnpm install punycode\n```\n\nVia [Bower](http://bower.io/):\n\n```bash\nbower install punycode\n```\n\nVia [Component](https://github.com/component/component):\n\n```bash\ncomponent install bestiejs/punycode.js\n```\n\nIn a browser:\n\n```html\n<script src=\""punycode.js\""></script>\n```\n\nIn [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/):\n\n```js\nvar punycode = require('punycode');\n```\n\nIn [Rhino](http://www.mozilla.org/rhino/):\n\n```js\nload('punycode.js');\n```\n\nUsing an AMD loader like [RequireJS](http://requirejs.org/):\n\n```js\nrequire(\n  {\n    'paths': {\n      'punycode': 'path/to/punycode'\n    }\n  },\n  ['punycode'],\n  function(punycode) {\n    console.log(punycode);\n  }\n);\n```\n\n## API\n\n### `punycode.decode(string)`\n\nConverts a Punycode string of ASCII symbols to a string of Unicode symbols.\n\n```js\n// decode domain name parts\npunycode.decode('maana-pta'); // 'mañana'\npunycode.decode('--dqo34k'); // '☃-⌘'\n```\n\n### `punycode.encode(string)`\n\nConverts a string of Unicode symbols to a Punycode string of ASCII symbols.\n\n```js\n// encode domain name parts\npunycode.encode('mañana'); // 'maana-pta'\npunycode.encode('☃-⌘'); // '--dqo34k'\n```\n\n### `punycode.toUnicode(input)`\n\nConverts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode.\n\n```js\n// decode domain names\npunycode.toUnicode('xn--maana-pta.com');\n// → 'mañana.com'\npunycode.toUnicode('xn----dqo34k.com');\n// → '☃-⌘.com'\n\n// decode email addresses\npunycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq');\n// → 'джумла@джpумлатест.bрфa'\n```\n\n### `punycode.toASCII(input)`\n\nConverts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII.\n\n```js\n// encode domain names\npunycode.toASCII('mañana.com');\n// → 'xn--maana-pta.com'\npunycode.toASCII('☃-⌘.com');\n// → 'xn----dqo34k.com'\n\n// encode email addresses\npunycode.toASCII('джумла@джpумлатест.bрфa');\n// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'\n```\n\n### `punycode.ucs2`\n\n#### `punycode.ucs2.decode(string)`\n\nCreates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16.\n\n```js\npunycode.ucs2.decode('abc');\n// → [0x61, 0x62, 0x63]\n// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE:\npunycode.ucs2.decode('\\uD834\\uDF06');\n// → [0x1D306]\n```\n\n#### `punycode.ucs2.encode(codePoints)`\n\nCreates a string based on an array of numeric code point values.\n\n```js\npunycode.ucs2.encode([0x61, 0x62, 0x63]);\n// → 'abc'\npunycode.ucs2.encode([0x1D306]);\n// → '\\uD834\\uDF06'\n```\n\n### `punycode.version`\n\nA string representing the current Punycode.js version number.\n\n## Unit tests & code coverage\n\nAfter cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`.\n\nOnce that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`.\n\nTo generate the code coverage report, use `grunt cover`.\n\nFeel free to fork if you see possible improvements!\n\n## Author\n\n| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias \""Follow @mathias on Twitter\"") |\n|---|\n| [Mathias Bynens](https://mathiasbynens.be/) |\n\n## Contributors\n\n| [![twitter/jdalton](https://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \""Follow @jdalton on Twitter\"") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## License\n\nPunycode.js is available under the [MIT](https://mths.be/mit) license.\n"","
969d2c2dddaa6ddd44a2f35fd76ffbc4b0e3bb28,9497120,				// See also https://stackoverflow.com/questions/9497120/how-to-downsample-images-within-pdf-file and
37c96ce3d79dce1bb2b7256024cd9dc04b74a230,274843,                        // http://stackoverflow.com/questions/274843/preventing-javascript-click-event-with-scriptaculous-drag-and-drop
551c331a05fb75ac81ea938f30d6424867ac0fad,22747272 45130990 40355107,"{""version"":3,""sources"":[""webpack://git/webpack/universalModuleDefinition"",""webpack://git/webpack/bootstrap"",""webpack://git/./src/models/GitError.js"",""webpack://git/./src/models/FileSystem.js"",""webpack://git/./src/utils/normalizePath.js"",""webpack://git/./src/utils/join.js"",""webpack://git/./src/utils/plugins.js"",""webpack://git/./src/models/GitPackedRefs.js"",""webpack://git/./src/utils/compareRefNames.js"",""webpack://git/./src/managers/GitRefManager.js"",""webpack://git/./src/storage/readObject.js"",""webpack://git/./node_modules/marky/lib/marky.browser.es.js"",""webpack://git/./src/models/GitCommit.js"",""webpack://git/./src/utils/log.js"",""webpack://git/./src/models/GitPktLine.js"",""webpack://git/(webpack)/node_modules/buffer/index.js"",""webpack://git/./src/models/GitTree.js"",""webpack://git/./src/utils/shasum.js"",""webpack://git/./src/utils/toHex.js"",""webpack://git/./src/utils/DeepMap.js"",""webpack://git/./src/managers/GitIndexManager.js"",""webpack://git/./src/utils/normalizeNewlines.js"",""webpack://git/./src/models/GitAnnotatedTag.js"",""webpack://git/./src/models/GitObject.js"",""webpack://git/./node_modules/pify/index.js"",""webpack://git/./node_modules/pako/index.js"",""webpack://git/./src/utils/symbols.js"",""webpack://git/./src/utils/normalizeStats.js"",""webpack://git/./src/utils/BufferCursor.js"",""webpack://git/./src/storage/writeObject.js"",""webpack://git/./src/utils/dirname.js"",""webpack://git/./src/managers/GitConfigManager.js"",""webpack://git/./node_modules/pako/lib/utils/common.js"",""webpack://git/./src/utils/pkg.js"",""webpack://git/./src/utils/basename.js"",""webpack://git/./src/models/GitWalkerRepo.js"",""webpack://git/./src/models/GitWalkerRepo2.js"",""webpack://git/./src/commands/TREE.js"",""webpack://git/./src/utils/collect.js"",""webpack://git/./src/utils/forAwait.js"",""webpack://git/./src/managers/GitShallowManager.js"",""webpack://git/./src/utils/resolveTree.js"",""webpack://git/./src/utils/unionOfIterators2.js"",""webpack://git/./src/commands/walkBeta2.js"",""webpack://git/./src/utils/compareStrings.js"",""webpack://git/./src/utils/padHex.js"",""webpack://git/./src/utils/parseAuthor.js"",""webpack://git/./src/utils/indent.js"",""webpack://git/./src/utils/comparePath.js"",""webpack://git/./src/models/GitPackIndex.js"",""webpack://git/./src/utils/compareStats.js"",""webpack://git/./src/utils/extractAuthFromUrl.js"",""webpack://git/./src/managers/GitRemoteHTTP.js"",""webpack://git/./node_modules/async-lock/index.js"",""webpack://git/./src/utils/formatAuthor.js"",""webpack://git/./src/utils/calculateBasicAuthUsernamePasswordPair.js"",""webpack://git/./src/utils/calculateBasicAuthHeader.js"",""webpack://git/./src/utils/FIFO.js"",""webpack://git/./node_modules/process/browser.js"",""webpack://git/./src/managers/GitIgnoreManager.js"",""webpack://git/./src/utils/flatFileListToDirectoryStructure.js"",""webpack://git/./src/utils/oauth2.js"",""webpack://git/./src/models/GitSideBand.js"",""webpack://git/./node_modules/sha.js/sha1.js"",""webpack://git/./src/utils/normalizeMode.js"",""webpack://git/./src/models/GitRefSpec.js"",""webpack://git/./src/storage/readPackIndex.js"",""webpack://git/./src/utils/StreamReader.js"",""webpack://git/./src/utils/getIterator.js"",""webpack://git/./src/utils/AsyncIterator.js"",""webpack://git/./src/utils/flat.js"",""webpack://git/./src/utils/http-browser.js"",""webpack://git/./src/wire/parseRefsAdResponse.js"",""webpack://git/./node_modules/base64-js/lib/b64.js"",""webpack://git/./node_modules/pako/lib/zlib/messages.js"",""webpack://git/./src/utils/sleep.js"",""webpack://git/./src/models/GitIndex.js"",""webpack://git/./src/models/GitConfig.js"",""webpack://git/./src/models/GitRefSpecSet.js"",""webpack://git/./src/managers/GitRemoteManager.js"",""webpack://git/./src/utils/mergeFile.js"",""webpack://git/./src/commands/pack.js"",""webpack://git/./src/models/SignedGitCommit.js"",""webpack://git/./src/utils/arrayRange.js"",""webpack://git/./src/models/RunningMinimum.js"",""webpack://git/(webpack)/node_modules/path-browserify/index.js"",""webpack://git/(webpack)/buildin/global.js"",""webpack://git/./node_modules/safe-buffer/index.js"",""webpack://git/./node_modules/pako/lib/zlib/adler32.js"",""webpack://git/./node_modules/pako/lib/zlib/crc32.js"",""webpack://git/./node_modules/pako/lib/utils/strings.js"",""webpack://git/./node_modules/pako/lib/zlib/zstream.js"",""webpack://git/./node_modules/pako/lib/zlib/constants.js"",""webpack://git/./node_modules/bops/typedarray/mapped.js"",""webpack://git/./src/wire/writeUploadPackRequest.js"",""webpack://git/./src/wire/parseUploadPackResponse.js"",""webpack://git/./src/utils/mergeTree.js"",""webpack://git/./src/commands/listCommitsAndTags.js"",""webpack://git/./src/commands/listObjects.js"",""webpack://git/./src/wire/writeReceivePackRequest.js"",""webpack://git/./src/wire/parseReceivePackResponse.js"",""webpack://git/./src/utils/auth.js"",""webpack://git/./node_modules/ignore/index.js"",""webpack://git/./src/storage/writeObjectLoose.js"",""webpack://git/./src/storage/readObjectLoose.js"",""webpack://git/./src/storage/readObjectPacked.js"",""webpack://git/./node_modules/crc-32/crc32.js"",""webpack://git/./node_modules/git-apply-delta/index.js"",""webpack://git/./src/utils/git-list-pack.js"",""webpack://git/./src/utils/outdent.js"",""webpack://git/./node_modules/diff3/diff3.js"",""webpack://git/./src/commands/types.js"",""webpack://git/./node_modules/ieee754/index.js"",""webpack://git/./node_modules/isarray/index.js"",""webpack://git/./node_modules/async-lock/lib/index.js"",""webpack://git/./node_modules/inherits/inherits_browser.js"",""webpack://git/./node_modules/sha.js/hash.js"",""webpack://git/./node_modules/pako/lib/deflate.js"",""webpack://git/./node_modules/pako/lib/zlib/deflate.js"",""webpack://git/./node_modules/pako/lib/zlib/trees.js"",""webpack://git/./node_modules/pako/lib/inflate.js"",""webpack://git/./node_modules/pako/lib/zlib/inflate.js"",""webpack://git/./node_modules/pako/lib/zlib/inffast.js"",""webpack://git/./node_modules/pako/lib/zlib/inftrees.js"",""webpack://git/./node_modules/pako/lib/zlib/gzheader.js"",""webpack://git/./node_modules/bops/index.js"",""webpack://git/./node_modules/bops/typedarray/from.js"",""webpack://git/./node_modules/bops/typedarray/to.js"",""webpack://git/./node_modules/to-utf8/index.js"",""webpack://git/./node_modules/bops/typedarray/is.js"",""webpack://git/./node_modules/bops/typedarray/subarray.js"",""webpack://git/./node_modules/bops/typedarray/join.js"",""webpack://git/./node_modules/bops/typedarray/copy.js"",""webpack://git/./node_modules/bops/typedarray/create.js"",""webpack://git/./node_modules/bops/typedarray/read.js"",""webpack://git/./node_modules/bops/typedarray/write.js"",""webpack://git/./node_modules/varint/decode.js"",""webpack://git/./node_modules/diff3/onp.js"",""webpack://git/./src/wire/writeRefsAdResponse.js"",""webpack://git/./src/commands/uploadPack.js"",""webpack://git/./src/utils/isBinary.js"",""webpack://git/./src/utils/path.js"",""webpack://git/./src/wire/parseUploadPackRequest.js"",""webpack://git/./src/internal-apis.js""],""names"":[""root"",""factory"",""exports"",""module"",""define"",""amd"",""self"",""installedModules"",""__webpack_require__"",""moduleId"",""i"",""l"",""modules"",""call"",""m"",""c"",""d"",""name"",""getter"",""o"",""Object"",""defineProperty"",""enumerable"",""get"",""r"",""Symbol"",""toStringTag"",""value"",""t"",""mode"",""__esModule"",""ns"",""create"",""key"",""bind"",""n"",""object"",""property"",""prototype"",""hasOwnProperty"",""p"",""s"",""messages"",""FileReadError"",""MissingRequiredParameterError"",""InvalidRefNameError"",""InvalidParameterCombinationError"",""RefExistsError"",""RefNotExistsError"",""BranchDeleteError"",""NoHeadCommitError"",""CommitNotFetchedError"",""ObjectTypeUnknownFail"",""ObjectTypeAssertionFail"",""ObjectTypeAssertionInTreeFail"",""ObjectTypeAssertionInRefFail"",""ObjectTypeAssertionInPathFail"",""MissingAuthorError"",""MissingCommitterError"",""MissingTaggerError"",""GitRootNotFoundError"",""UnparseableServerResponseFail"",""InvalidDepthParameterError"",""RemoteDoesNotSupportShallowFail"",""RemoteDoesNotSupportDeepenSinceFail"",""RemoteDoesNotSupportDeepenNotFail"",""RemoteDoesNotSupportDeepenRelativeFail"",""RemoteDoesNotSupportSmartHTTP"",""CorruptShallowOidFail"",""FastForwardFail"",""MergeNotSupportedFail"",""DirectorySeparatorsError"",""ResolveTreeError"",""ResolveCommitError"",""DirectoryIsAFileError"",""TreeOrBlobNotFoundError"",""NotImplementedFail"",""ReadObjectFail"",""NotAnOidFail"",""NoRefspecConfiguredError"",""MismatchRefValueError"",""ResolveRefError"",""ExpandRefError"",""EmptyServerResponseFail"",""AssertServerResponseFail"",""HTTPError"",""RemoteUrlParseError"",""UnknownTransportError"",""AcquireLockFileFail"",""DoubleReleaseLockFileFail"",""InternalFail"",""UnknownOauth2Format"",""MissingPasswordTokenError"",""MissingUsernameError"",""MixPasswordTokenError"",""MixUsernamePasswordTokenError"",""MissingTokenError"",""MixUsernameOauth2formatMissingTokenError"",""MixPasswordOauth2formatMissingTokenError"",""MixUsernamePasswordOauth2formatMissingTokenError"",""MixUsernameOauth2formatTokenError"",""MixPasswordOauth2formatTokenError"",""MixUsernamePasswordOauth2formatTokenError"",""MaxSearchDepthExceeded"",""PushRejectedNonFastForward"",""PushRejectedTagExists"",""AddingRemoteWouldOverwrite"",""PluginUndefined"",""CoreNotFound"",""PluginSchemaViolation"",""PluginUnrecognized"",""AmbiguousShortOid"",""ShortOidNotFound"",""CheckoutConflictError"",""E"",""GitError"",""Error"",""constructor"",""code"",""data"",""super"",""this"",""message"",""template"",""values"",""result"",""keys"",""subs"",""Array"",""isArray"",""join"",""String"",""replace"",""RegExp"",""renderTemplate"",""captureStackTrace"",""toJSON"",""caller"",""toString"",""stack"",""delayedReleases"",""Map"",""fsmap"",""WeakMap"",""FileSystem"",""fs"",""undefined"",""plugin"",""has"",""_original_unwrapped_fs"",""getOwnPropertyDescriptor"",""_readFile"",""promises"",""readFile"",""_writeFile"",""writeFile"",""_mkdir"",""mkdir"",""_rmdir"",""rmdir"",""_unlink"",""unlink"",""_stat"",""stat"",""_lstat"",""lstat"",""_readdir"",""readdir"",""_readlink"",""readlink"",""_symlink"",""symlink"",""pify"",""set"",""exists"",""filepath"",""options"",""err"",""console"",""log"",""read"",""buffer"",""Buffer"",""from"",""write"",""contents"",""dirname"",""_selfCall"",""parent"",""rm"",""names"",""sort"",""compareStrings"",""readdirDeep"",""dir"",""subdirs"",""Promise"",""all"",""map"",""subdir"",""res"",""isDirectory"",""reduce"",""a"",""f"",""concat"",""filename"",""opts"",""encoding"",""writelink"",""lock"",""triesLeft"",""clearTimeout"",""delete"",""sleep"",""unlock"",""delayRelease"",""setTimeout"",""normalizePath"",""path"",""parts"",""plugins"",""pluginSchemas"",""credentialManager"",""emitter"",""pgp"",""http"",""method"",""verifySchema"",""critical"",""Set"",""_cores"",""cores"",""core"",""GitPackedRefs"",""text"",""refs"",""parsedConfig"",""trim"",""split"",""line"",""test"",""comment"",""indexOf"",""startsWith"",""slice"",""ref"",""peeled"",""oid"",""filter"",""entry"",""compareRefNames"",""b"",""_a"",""_b"",""tmp"",""endsWith"",""refpaths"",""GIT_FILES"",""GitRefManager"",""_fs"",""gitdir"",""remote"",""symrefs"",""tags"",""refspecs"",""prune"",""pruneTags"",""match"",""config"",""GitConfigManager"",""getall"",""length"",""unshift"",""refspec"",""GitRefSpecSet"",""actualRefsToWrite"",""listRefs"",""deleteRefs"",""tag"",""serverRef"",""refTranslations"",""translate"",""translatedRef"",""symrefTranslations"",""symtarget"",""translateOne"",""pruned"",""localNamespaces"",""file"",""push"",""packed"",""beforeSize"",""size"",""depth"",""sha"",""resolve"",""packedMap"",""packedRefs"",""allpaths"",""includes"",""expand"",""fullref"",""resolveAgainstMap"",""files"",""x"",""readObject"",""format"",""getExternalRefDelta"",""readObjectLoose"",""readObjectPacked"",""pako"",""inflate"",""shasum"",""type"",""GitObject"",""unwrap"",""mark"",""stop"",""perf"",""performance"",""now"",""Date"",""throwIfEmpty"",""measure"",""entries"",""getEntriesByName"",""getEntriesByType"",""clearMarks"",""clearMeasures"",""marks"",""startTime"",""endTime"",""duration"",""entryType"",""arr"",""item"",""mid"",""low"",""high"",""splice"",""insertSorted"",""GitCommit"",""commit"",""_commit"",""isBuffer"",""render"",""payload"",""signature"",""headers"",""justHeaders"",""justMessage"",""normalizeNewlines"",""indent"",""toObject"",""parseHeaders"",""parse"",""assign"",""hs"",""h"",""obj"",""author"",""parseAuthor"",""committer"",""tree"",""formatAuthor"",""gpgsig"",""renderHeaders"",""withoutSignature"",""isolateSignature"",""outdent"",""secretKey"",""sign"",""signedCommit"",""publicKey"",""verify"",""shouldLog"",""args"",""process"",""env"",""DEBUG"",""window"",""localStorage"",""debug"",""_"",""GitPktLine"",""hexlength"",""padHex"",""stream"",""reader"",""StreamReader"",""parseInt"",""base64"",""ieee754"",""kMaxLength"",""TYPED_ARRAY_SUPPORT"",""createBuffer"",""that"",""RangeError"",""Uint8Array"",""__proto__"",""arg"",""encodingOrOffset"",""allocUnsafe"",""TypeError"",""ArrayBuffer"",""array"",""byteOffset"",""byteLength"",""fromArrayLike"",""fromArrayBuffer"",""string"",""isEncoding"",""actual"",""fromString"",""len"",""checked"",""copy"",""val"",""fromObject"",""assertSize"",""isView"",""loweredCase"",""utf8ToBytes"",""base64ToBytes"",""toLowerCase"",""slowToString"",""start"",""end"",""hexSlice"",""utf8Slice"",""asciiSlice"",""latin1Slice"",""base64Slice"",""utf16leSlice"",""swap"",""bidirectionalIndexOf"",""isNaN"",""arrayIndexOf"",""lastIndexOf"",""indexSize"",""arrLength"",""valLength"",""buf"",""readUInt16BE"",""foundIndex"",""found"",""j"",""hexWrite"",""offset"",""Number"",""remaining"",""strLen"",""parsed"",""substr"",""utf8Write"",""blitBuffer"",""asciiWrite"",""str"",""byteArray"",""charCodeAt"",""asciiToBytes"",""latin1Write"",""base64Write"",""ucs2Write"",""units"",""hi"",""lo"",""utf16leToBytes"",""fromByteArray"",""Math"",""min"",""secondByte"",""thirdByte"",""fourthByte"",""tempCodePoint"",""firstByte"",""codePoint"",""bytesPerSequence"",""codePoints"",""MAX_ARGUMENTS_LENGTH"",""fromCharCode"",""apply"",""decodeCodePointsArray"",""SlowBuffer"",""alloc"",""INSPECT_MAX_BYTES"",""global"",""foo"",""subarray"",""e"",""typedArraySupport"",""poolSize"",""_augment"",""species"",""configurable"",""fill"",""allocUnsafeSlow"",""_isBuffer"",""compare"",""y"",""list"",""pos"",""swap16"",""swap32"",""swap64"",""arguments"",""equals"",""inspect"",""max"",""target"",""thisStart"",""thisEnd"",""thisCopy"",""targetCopy"",""isFinite"",""_arr"",""ret"",""out"",""toHex"",""bytes"",""checkOffset"",""ext"",""checkInt"",""objectWriteUInt16"",""littleEndian"",""objectWriteUInt32"",""checkIEEE754"",""writeFloat"",""noAssert"",""writeDouble"",""newBuf"",""sliceLen"",""readUIntLE"",""mul"",""readUIntBE"",""readUInt8"",""readUInt16LE"",""readUInt32LE"",""readUInt32BE"",""readIntLE"",""pow"",""readIntBE"",""readInt8"",""readInt16LE"",""readInt16BE"",""readInt32LE"",""readInt32BE"",""readFloatLE"",""readFloatBE"",""readDoubleLE"",""readDoubleBE"",""writeUIntLE"",""writeUIntBE"",""writeUInt8"",""floor"",""writeUInt16LE"",""writeUInt16BE"",""writeUInt32LE"",""writeUInt32BE"",""writeIntLE"",""limit"",""sub"",""writeIntBE"",""writeInt8"",""writeInt16LE"",""writeInt16BE"",""writeInt32LE"",""writeInt32BE"",""writeFloatLE"",""writeFloatBE"",""writeDoubleLE"",""writeDoubleBE"",""targetStart"",""INVALID_BASE64_RE"",""Infinity"",""leadSurrogate"",""toByteArray"",""stringtrim"",""base64clean"",""src"",""dst"",""mode2type"",""nudgeIntoShape"",""limitModeToAllowed"",""GitTree"",""_entries"",""cursor"",""space"",""nullchar"",""parseBuffer"",""comparePath"",""iterator"",""supportsSubtleSHA1"",""testSubtleSHA1"",""subtleSHA1"",""Hash"",""update"",""digest"",""shasumSync"",""hex"",""byte"",""crypto"",""subtle"",""deepget"",""DeepMap"",""_root"",""lastKey"",""pop"",""stats"",""rawIndexFile"",""index"",""GitIndex"",""savedStats"",""currStats"",""compareStats"",""GitIndexManager"",""closure"",""AsyncLock"",""maxPending"",""acquire"",""isIndexStale"",""updateCachedIndexFile"",""_dirty"",""GitAnnotatedTag"",""_tag"",""tagger"",""signedTag"",""actualLength"",""processFn"",""fn"",""P"",""promiseModule"",""reject"",""multiArgs"",""errorFirst"",""shift"",""error"",""input"",""exclude"",""objType"",""pattern"",""include"",""some"",""excludeMain"",""getPrototypeOf"",""GitWalkBeta1Symbol"",""GitWalkBeta2Symbol"",""MAX_UINT32"",""SecondsNanoseconds"",""givenSeconds"",""givenNanoseconds"",""milliseconds"",""date"",""valueOf"",""seconds"",""normalizeStats"",""ctimeSeconds"",""ctimeNanoseconds"",""ctimeMs"",""ctime"",""mtimeSeconds"",""mtimeNanoseconds"",""mtimeMs"",""mtime"",""dev"",""ino"",""normalizeMode"",""uid"",""gid"",""BufferCursor"",""_start"",""eof"",""tell"",""seek"",""enc"",""writeObject"",""dryRun"",""wrap"",""deflate"",""writeObjectLoose"",""last"",""GitConfig"",""TYPED_OK"",""Uint16Array"",""Int32Array"",""_has"",""sources"",""source"",""shrinkBuf"",""fnTyped"",""arraySet"",""dest"",""src_offs"",""dest_offs"",""flattenChunks"",""chunks"",""chunk"",""fnUntyped"",""setTyped"",""on"",""Buf8"",""Buf16"",""Buf32"",""pkg"",""version"",""agent"",""basename"",""GitWalkerRepo"",""mapPromise"",""resolveTree"",""walker"",""ConstructEntry"",""populateStat"",""populateContent"",""populateHash"",""fullpath"",""JSON"",""stringify"",""expected"",""content"",""GitWalkerRepo2"",""_fullpath"",""_type"",""_mode"",""_content"",""_oid"",""_entry"",""TREE"",""freeze"",""collect"",""iterable"",""buffers"",""forAwait"",""cb"",""iter"",""getIterator"",""done"",""next"",""return"",""GitShallowManager"",""oids"",""add"",""unionOfIterators2"",""sets"",""RunningMinimum"",""minimum"",""heads"",""numsets"",""consider"",""reset"",""walkBeta2"",""trees"",""children"",""flatten"",""flat"",""iterate"",""walk"",""walkers"",""proxy"",""range"",""arrayRange"",""unionWalkerFromReaddir"",""iterators"",""find"",""walkedChildren"",""repeat"",""email"",""timestamp"",""timezoneOffset"",""parseTimezoneOffset"",""hours"",""minutes"",""GitPackIndex"",""stuff"",""offsetCache"",""idx"",""marky"",""hashes"",""hash"",""offsets"",""packfileSha"",""crcs"",""pack"",""emitterPrefix"",""listpackTypes"",""1"",""2"",""3"",""4"",""6"",""7"",""offsetToObject"",""totalObjectCount"",""lastPercent"",""times"",""readSlice"",""histogram"",""blob"",""bytesProcessed"",""listpack"",""reference"",""num"",""percent"",""emit"",""phase"",""loaded"",""total"",""lengthComputable"",""offsetArray"",""crc"",""crc32"",""count"",""callsToReadSlice"",""callsToGetExternal"",""timeByDepth"",""objectsByDepth"",""readDepth"",""externalReadDepth"",""time"",""totalElapsedTime"",""misc"",""toBuffer"",""fanoutBuffer"",""crcsBuffer"",""offsetsBuffer"",""totalBuffer"",""shaBuffer"",""load"",""unload"",""raw"",""btype"",""lastFour"",""startWith"",""otherVarIntDecode"",""base"",""multibyte"",""lastSeven"",""decodeVarInt"",""baseOffset"",""applyDelta"",""staleness"",""enabled"",""table"",""justWhatMatters"",""extractAuthFromUrl"",""url"",""userpass"",""username"",""password"",""corsProxify"",""corsProxy"",""GitRemoteHTTP"",""service"",""noGitSuffix"",""auth"",""_origUrl"",""urlAuth"",""oauth2format"",""builtinHttp"",""_auth"",""calculateBasicAuthUsernamePasswordPair"",""calculateBasicAuthHeader"",""statusCode"",""rejected"",""approved"",""statusMessage"",""remoteHTTP"",""parseRefsAdResponse"",""body"",""response"",""preview"",""is"",""simpleSign"",""abs"",""strHours"",""strMinutes"",""formatTimezoneOffset"",""token"",""allowEmptyPassword"",""oauth2"",""FIFO"",""_queue"",""_ended"",""_waiting"",""destroy"",""cachedSetTimeout"",""cachedClearTimeout"",""defaultSetTimout"",""defaultClearTimeout"",""runTimeout"",""fun"",""currentQueue"",""queue"",""draining"",""queueIndex"",""cleanUpNextTick"",""drainQueue"",""timeout"",""run"",""marker"",""runClearTimeout"",""Item"",""noop"",""nextTick"",""title"",""browser"",""argv"",""versions"",""addListener"",""once"",""off"",""removeListener"",""removeAllListeners"",""prependListener"",""prependOnceListener"",""listeners"",""binding"",""cwd"",""chdir"",""umask"",""GitIgnoreManager"",""pairs"",""gitignore"",""pieces"",""folder"",""ignoredStatus"",""ign"",""ignore"",""parentdir"",""ignores"",""unignored"",""ignored"",""flatFileListToDirectoryStructure"",""inodes"",""metadata"",""mkfile"",""company"",""GitSideBand"",""streamReader"",""packetlines"",""packfile"",""progress"",""nextBit"",""inherits"",""K"",""W"",""Sha1"",""init"",""_w"",""rotl5"",""rotl30"",""ft"",""_c"",""_d"",""_e"",""_update"",""M"",""_hash"",""H"",""permissions"",""GitRefSpec"",""remotePath"",""localPath"",""force"",""matchPrefix"",""forceMatch"",""remoteGlobMatch"",""localGlobMatch"",""remoteIsGlob"",""remoteBranch"",""reverseTranslate"",""localBranch"",""PackfileCache"",""fromIdx"",""readPackIndex"",""loadPackIndex"",""undoCursor"",""started"",""_discardedBytes"",""_init"",""_loadnext"",""_moveCursor"",""_trim"",""_accumulate"",""skip"",""undo"",""_next"",""lengthBuffers"",""nextbuffer"",""acc"",""asyncIterator"",""fromValue"",""fromStream"",""getReader"",""releaseLock"",""fetch"",""arrayBuffer"",""status"",""statusText"",""capabilities"",""lineOne"",""lineTwo"",""firstRef"",""capabilitiesLine"",""splitAndAssert"",""cap"",""sep"",""lookup"",""b64"",""placeHolders"",""uint8"",""temp"",""extraBytes"",""output"",""0"",""ms"",""fromBuffer"",""shaComputed"",""shaClaimed"",""magic"",""numEntries"",""flags"",""bits"",""assumeValid"",""Boolean"",""extended"",""stage"",""nameLength"",""pathlength"",""padding"",""insert"",""bfilepath"",""clear"",""header"",""writer"",""bpath"",""ceil"",""written"",""renderCacheEntryFlags"",""main"",""sum"",""bool"",""schema"",""filemode"",""bare"",""logallrefupdates"",""symlinks"",""ignorecase"",""bigFileThreshold"",""SECTION_LINE_REGEX"",""SECTION_REGEX"",""VARIABLE_LINE_REGEX"",""VARIABLE_NAME_REGEX"",""VARIABLE_VALUE_COMMENT_REGEX"",""extractSectionLine"",""matches"",""exec"",""section"",""subsection"",""extractVariableLine"",""rawValue"",""valueWithoutComments"",""removeComments"",""removeQuotes"",""commentMatches"",""valueWithoutComment"",""hasOddNumberOfQuotes"",""newText"",""isQuote"",""isEscapeForQuote"",""lower"",""getPath"",""findLastIndex"",""callback"",""lastIndex"",""trimmedLine"",""extractedSection"",""isSection"",""extractedVariable"",""allValues"",""getSubsections"",""deleteSection"",""append"",""configIndex"",""modifiedConfig"",""modified"",""sectionPath"",""sectionIndex"",""findIndex"",""newConfig"",""newSection"",""rules"",""rule"",""remoteRefs"",""remoteRef"",""localRef"",""GitRemoteManager"",""remoteHelpers"",""transport"",""address"",""parseRemoteUrl"",""LINEBREAKS"",""mergeFile"",""ourContent"",""baseContent"",""theirContent"",""ourName"",""baseName"",""theirName"",""markerSize"",""ours"",""theirs"",""diff3Merge"",""mergedText"",""cleanMerge"",""ok"",""conflict"",""outputStream"",""buff"",""stype"",""types"",""SignedGitCommit"",""openpgp"",""privateKeys"",""privKeyObj"",""readArmored"",""util"",""str2Uint8Array"",""detached"",""armor"",""listSigningKeys"",""readSignedContent"",""getSigningKeyIds"",""keyid"",""publicKeys"",""pubKeyObj"",""valid"",""normalizeArray"",""allowAboveRoot"",""up"",""xs"",""resolvedPath"",""resolvedAbsolute"",""charAt"",""normalize"",""isAbsolute"",""trailingSlash"",""paths"",""relative"",""to"",""fromParts"",""toParts"",""samePartsLength"",""outputParts"",""delimiter"",""hasRoot"",""matchedSlash"",""extname"",""startDot"",""startPart"",""preDotState"",""g"",""Function"",""copyProps"",""SafeBuffer"",""adler"",""s1"",""s2"",""crcTable"",""k"",""makeTable"",""utils"",""STR_APPLY_OK"",""STR_APPLY_UIA_OK"",""__"",""_utf8len"",""q"",""buf2binstring"",""string2buf"",""c2"",""m_pos"",""str_len"",""buf_len"",""binstring2buf"",""buf2string"",""c_len"",""utf16buf"",""utf8border"",""next_in"",""avail_in"",""total_in"",""next_out"",""avail_out"",""total_out"",""msg"",""state"",""data_type"",""Z_NO_FLUSH"",""Z_PARTIAL_FLUSH"",""Z_SYNC_FLUSH"",""Z_FULL_FLUSH"",""Z_FINISH"",""Z_BLOCK"",""Z_TREES"",""Z_OK"",""Z_STREAM_END"",""Z_NEED_DICT"",""Z_ERRNO"",""Z_STREAM_ERROR"",""Z_DATA_ERROR"",""Z_BUF_ERROR"",""Z_NO_COMPRESSION"",""Z_BEST_SPEED"",""Z_BEST_COMPRESSION"",""Z_DEFAULT_COMPRESSION"",""Z_FILTERED"",""Z_HUFFMAN_ONLY"",""Z_RLE"",""Z_FIXED"",""Z_DEFAULT_STRATEGY"",""Z_BINARY"",""Z_TEXT"",""Z_UNKNOWN"",""Z_DEFLATED"",""proto"",""DataView"",""writeUploadPackRequest"",""wants"",""haves"",""shallows"",""since"",""packstream"",""firstLineCapabilities"",""encode"",""flush"",""parseUploadPackResponse"",""demux"",""unshallows"",""acks"",""nak"",""mergeTree"",""ourOid"",""baseOid"",""theirOid"",""ourTree"",""baseTree"",""theirTree"",""mergeBlobs"",""listCommitsAndTags"",""finish"",""startingSet"",""finishingSet"",""visited"",""parents"",""listObjects"",""writeReceivePackRequest"",""triplets"",""capsFirstLine"",""trip"",""oldoid"",""fullRef"",""parseReceivePackResponse"",""lines"",""errors"",""refAndMessage"",""makeArray"",""subject"",""REGEX_TEST_BLANK_LINE"",""REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION"",""REGEX_REPLACE_LEADING_EXCAPED_HASH"",""REGEX_SPLITALL_CRLF"",""REGEX_TEST_INVALID_PATH"",""SLASH"",""KEY_IGNORE"",""for"",""REGEX_REGEXP_RANGE"",""REPLACERS"",""p1"",""p2"",""sanitizeRange"",""regexCache"",""isString"",""checkPattern"",""splitPattern"",""IgnoreRule"",""origin"",""negative"",""regex"",""createRule"",""prev"",""current"",""makeRegex"",""throwError"",""Ctor"",""checkPath"",""originalPath"",""doThrow"",""isNotRelative"",""convert"",""Ignore"",""_rules"",""_ignorecase"",""_initCache"",""_ignoreCache"",""_testCache"",""_added"",""forEach"",""_addPattern"",""checkUnignored"",""cache"",""slices"",""_t"",""_testOne"",""_test"",""createFilter"",""returnFalse"",""isPathValid"",""default"",""IGNORE_TEST_WIN32"",""platform"",""makePosix"",""REGIX_IS_WINDOWS_PATH_ABSOLUTE"",""indexFile"",""packFile"",""CRC32"",""T"",""signed_crc_table"",""bstr"",""seed"",""C"",""L"",""crc32_buf_8"",""DO_NOT_EXPORT_CRC"",""delta"",""output_buffer"",""out_idx"",""command"",""base_size_info"",""resized_size_info"",""delta_header"",""binary"",""OFFSET_BUFFER"",""LENGTH_BUFFER"",""check"",""vi"",""ondata"",""onData"",""PACK"",""numObjects"",""ofs"",""parseHeader"",""inflator"",""Inflate"",""ended"",""strm"",""onp"",""diffIndices"",""file1"",""file2"",""tail1"",""tail2"",""candidate"",""diff"",""compose"",""ses"",""getses"",""file1RevIdx"",""file2RevIdx"",""SES_COMMON"",""chain"",""file1index"",""file2index"",""SES_DELETE"",""SES_ADD"",""tail"",""longestCommonSubsequence"",""mismatchLength1"",""mismatchLength2"",""reverse"",""indices"",""m1"",""m2"",""hunks"",""addHunk"",""side"",""commonOffset"",""copyCommon"",""targetOffset"",""hunkIndex"",""firstHunkIndex"",""hunk"",""regionLhs"",""regionRhs"",""maybeOverlapping"",""maybeLhs"",""regions"",""oLhs"",""oRhs"",""abLhs"",""abRhs"",""aLhs"",""aRhs"",""bLhs"",""bRhs"",""diff3MergeIndices"",""okLines"",""flushOk"",""pushOk"",""isTrueConflict"",""rec"",""aoff"",""boff"",""aIndex"",""oIndex"",""bIndex"",""ofs_delta"",""ref_delta"",""isLE"",""mLen"",""nBytes"",""eLen"",""eMax"",""eBias"",""nBits"",""NaN"",""rt"",""LN2"",""queues"",""domains"",""domainReentrant"",""DEFAULT_TIMEOUT"",""DEFAULT_MAX_PENDING"",""_acquireBatch"",""deferredResolve"",""deferredReject"",""deferred"",""resolved"",""timer"",""locked"",""domain"",""called"",""_promiseTry"",""then"",""taskFn"",""skipQueue"",""fnx"",""getFn"",""isBusy"",""ctor"",""superCtor"",""super_"",""writable"",""TempCtor"",""blockSize"",""finalSize"",""_block"",""_finalSize"",""_blockSize"",""_len"",""block"",""accum"",""assigned"",""remainder"",""rem"",""lowBits"",""highBits"",""zlib_deflate"",""strings"",""ZStream"",""Deflate"",""level"",""chunkSize"",""windowBits"",""memLevel"",""strategy"",""opt"",""gzip"",""deflateInit2"",""deflateSetHeader"",""dictionary"",""dict"",""deflateSetDictionary"",""_dict_set"",""deflator"",""onEnd"",""deflateEnd"",""deflateRaw"",""configuration_table"",""adler32"",""MAX_MEM_LEVEL"",""MAX_WBITS"",""DEF_MEM_LEVEL"",""L_CODES"",""LITERALS"",""D_CODES"",""BL_CODES"",""HEAP_SIZE"",""MAX_BITS"",""MIN_MATCH"",""MAX_MATCH"",""MIN_LOOKAHEAD"",""PRESET_DICT"",""INIT_STATE"",""EXTRA_STATE"",""NAME_STATE"",""COMMENT_STATE"",""HCRC_STATE"",""BUSY_STATE"",""FINISH_STATE"",""BS_NEED_MORE"",""BS_BLOCK_DONE"",""BS_FINISH_STARTED"",""BS_FINISH_DONE"",""OS_CODE"",""errorCode"",""rank"",""zero"",""flush_pending"",""pending"",""pending_buf"",""pending_out"",""flush_block_only"",""_tr_flush_block"",""block_start"",""strstart"",""put_byte"",""putShortMSB"",""longest_match"",""cur_match"",""chain_length"",""max_chain_length"",""scan"",""best_len"",""prev_length"",""nice_match"",""w_size"",""_win"",""wmask"",""w_mask"",""strend"",""scan_end1"",""scan_end"",""good_match"",""lookahead"",""match_start"",""fill_window"",""more"",""_w_size"",""window_size"",""hash_size"",""head"",""ins_h"",""hash_shift"",""hash_mask"",""deflate_fast"",""hash_head"",""bflush"",""match_length"",""_tr_tally"",""max_lazy_match"",""last_lit"",""deflate_slow"",""max_insert"",""prev_match"",""match_available"",""Config"",""good_length"",""max_lazy"",""nice_length"",""max_chain"",""func"",""DeflateState"",""pending_buf_size"",""gzhead"",""gzindex"",""last_flush"",""w_bits"",""hash_bits"",""dyn_ltree"",""dyn_dtree"",""bl_tree"",""l_desc"",""d_desc"",""bl_desc"",""bl_count"",""heap"",""heap_len"",""heap_max"",""l_buf"",""lit_bufsize"",""d_buf"",""opt_len"",""static_len"",""bi_buf"",""bi_valid"",""deflateResetKeep"",""_tr_init"",""deflateReset"",""max_block_size"",""max_start"",""deflateInit"",""old_flush"",""beg"",""hcrc"",""extra"",""os"",""bstate"",""deflate_huff"",""deflate_rle"",""_tr_align"",""_tr_stored_block"",""avail"",""tmpDict"",""dictLength"",""deflateInfo"",""STORED_BLOCK"",""STATIC_TREES"",""DYN_TREES"",""LENGTH_CODES"",""Buf_size"",""MAX_BL_BITS"",""END_BLOCK"",""REP_3_6"",""REPZ_3_10"",""REPZ_11_138"",""extra_lbits"",""extra_dbits"",""extra_blbits"",""bl_order"",""static_ltree"",""static_dtree"",""_dist_code"",""_length_code"",""base_length"",""static_l_desc"",""static_d_desc"",""static_bl_desc"",""base_dist"",""StaticTreeDesc"",""static_tree"",""extra_bits"",""extra_base"",""elems"",""max_length"",""has_stree"",""TreeDesc"",""dyn_tree"",""stat_desc"",""max_code"",""d_code"",""dist"",""put_short"",""w"",""send_bits"",""send_code"",""bi_reverse"",""gen_codes"",""next_code"",""init_block"",""bi_windup"",""smaller"",""_n2"",""_m2"",""pqdownheap"",""v"",""compress_block"",""ltree"",""dtree"",""lc"",""lx"",""build_tree"",""desc"",""node"",""stree"",""xbits"",""overflow"",""gen_bitlen"",""scan_tree"",""curlen"",""prevlen"",""nextlen"",""max_count"",""min_count"",""send_tree"",""static_init_done"",""stored_len"",""copy_block"",""tr_static_init"",""opt_lenb"",""static_lenb"",""max_blindex"",""black_mask"",""detect_data_type"",""build_bl_tree"",""lcodes"",""dcodes"",""blcodes"",""send_all_trees"",""bi_flush"",""zlib_inflate"",""GZheader"",""inflateInit2"",""inflateGetHeader"",""inflateSetDictionary"",""next_out_utf8"",""utf8str"",""allowBufError"",""inflateEnd"",""inflateRaw"",""ungzip"",""inflate_fast"",""inflate_table"",""CODES"",""LENS"",""DISTS"",""Z_MEM_ERROR"",""HEAD"",""FLAGS"",""TIME"",""OS"",""EXLEN"",""EXTRA"",""NAME"",""COMMENT"",""HCRC"",""DICTID"",""DICT"",""TYPE"",""TYPEDO"",""STORED"",""COPY_"",""COPY"",""TABLE"",""LENLENS"",""CODELENS"",""LEN_"",""LEN"",""LENEXT"",""DIST"",""DISTEXT"",""MATCH"",""LIT"",""CHECK"",""LENGTH"",""DONE"",""BAD"",""MEM"",""SYNC"",""ENOUGH_LENS"",""ENOUGH_DISTS"",""DEF_WBITS"",""zswap32"",""InflateState"",""havedict"",""dmax"",""wbits"",""wsize"",""whave"",""wnext"",""hold"",""lencode"",""distcode"",""lenbits"",""distbits"",""ncode"",""nlen"",""ndist"",""have"",""lens"",""work"",""lendyn"",""distdyn"",""sane"",""back"",""was"",""inflateResetKeep"",""inflateReset"",""inflateReset2"",""lenfix"",""distfix"",""virgin"",""fixedtables"",""sym"",""updatewindow"",""inflateInit"",""put"",""left"",""_in"",""_out"",""from_source"",""here_bits"",""here_op"",""here_val"",""last_bits"",""last_op"",""last_val"",""here"",""hbuf"",""order"",""inf_leave"",""xflags"",""extra_len"",""inflateInfo"",""s_window"",""lcode"",""dcode"",""lmask"",""dmask"",""op"",""top"",""dolen"",""dodist"",""lbase"",""lext"",""dbase"",""dext"",""lens_index"",""codes"",""table_index"",""incr"",""mask"",""curr"",""drop"",""used"",""huff"",""base_index"",""MAXBITS"",""offs"",""extra_index"",""mix"",""into"",""decoders"",""character"",""utf8"",""ch"",""encodeURIComponent"",""jlen"",""encoders"",""toutf8"",""byt"",""by"",""collecting"",""col"",""find_pad_position"",""unmask"",""fcc"",""reduced"",""targets"",""hint"",""get_length"",""cur"",""curidx"",""curoff"",""target_start"",""source_start"",""source_end"",""fast_copy"",""jend"",""iend"",""slow_copy"",""at"",""getUint16"",""getUint32"",""getInt16"",""getInt32"",""getFloat32"",""getFloat64"",""setUint16"",""setUint32"",""setInt16"",""setInt32"",""setFloat32"",""setFloat64"",""Decoder"",""MSB"",""REST"",""msb"",""a_"",""b_"",""tmp1"",""tmp2"",""ed"",""pathposi"",""lcs"",""seselem"",""elem"",""snake"",""pp"",""editdistance"",""getlcs"",""fp"",""epc"",""px_idx"",""py_idx"",""recordseq"",""writeRefsAdResponse"",""syms"",""caps"",""uploadPack"",""advertiseRefs"",""isBinary"",""_path"",""posix"",""parseUploadPackRequest"",""rest""],""mappings"":""CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAa,IAAID,IAEjBD,EAAU,IAAIC,IARhB,CASGK,KAAM,WACT,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUP,QAGnC,IAAIC,EAASI,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHT,QAAS,IAUV,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,QA0Df,OArDAM,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC3CV,EAAoBW,EAAEjB,EAASe,IAClCG,OAAOC,eAAenB,EAASe,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAAStB,GACX,oBAAXuB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAenB,EAASuB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAShC,GAChC,IAAIe,EAASf,GAAUA,EAAO2B,WAC7B,WAAwB,OAAO3B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAK,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,GAIjBhC,EAAoBA,EAAoBiC,EAAI,K,+BClFrD,gEAGA,MAAMC,EAAW,CACfC,cAAgB,sCAChBC,8BAAgC,0FAChCC,oBAAsB,6IACtBC,iCAAmC,4FACnCC,eAAiB,iFACjBC,kBAAoB,oFACpBC,kBAAoB,8EACpBC,kBAAoB,8FACpBC,sBAAwB,qIACxBC,sBAAwB,8CACxBC,wBAA0B,2HAC1BC,8BAAgC,uFAChCC,6BAA+B,8EAC/BC,8BAAgC,yEAChCC,mBAAqB,qFACrBC,sBAAwB,8EACxBC,mBAAqB,qFACrBC,qBAAuB,4CACvBC,8BAAgC,6GAChCC,2BAA6B,+CAC7BC,gCAAkC,2CAClCC,oCAAsC,mDACtCC,kCAAoC,+EACpCC,uCAAyC,iFACzCC,8BAAgC,2HAChCC,sBAAwB,wCACxBC,gBAAkB,gDAClBC,sBAAwB,+CACxBC,yBAA2B,sIAC3BC,iBAAmB,uCACnBC,mBAAqB,yCACrBC,sBAAwB,mGACxBC,wBAA0B,wDAC1BC,mBAAqB,iDACrBC,eAAiB,6CACjBC,aAAe,wDACfC,yBAA2B,6LAC3BC,sBAAwB,oEACxBC,gBAAkB,yCAClBC,eAAiB,wCACjBC,wBAA0B,kCAC1BC,yBAA2B,gDAC3BC,UAAY,+CACZC,oBAAsB,qCACtBC,sBAAwB,gFACxBC,oBAAsB,8DACtBC,0BAA4B,iDAC5BC,aAAe,0KACfC,oBAAsB,4MACtBC,0BAA4B,4BAC5BC,qBAAuB,mBACvBC,sBAAwB,qCACxBC,8BAAgC,oDAChCC,kBAAoB,gBACpBC,yCAA2C,4DAC3CC,yCAA2C,4DAC3CC,iDAAmD,2EACnDC,kCAAoC,wDACpCC,kCAAoC,wDACpCC,0CAA4C,uEAC5CC,uBAAyB,8CACzBC,2BAA6B,yFAC7BC,sBAAwB,2EACxBC,2BAA6B,+FAC7BC,gBAAkB,mEAClBC,aAAe,yDACfC,sBAAwB,0EACxBC,mBAAqB,wCACrBC,kBAAoB,iHACpBC,iBAAmB,iDACnBC,sBAAwB,6FAGbC,EAAI,CACfvE,cAAgB,gBAChBC,8BAAgC,gCAChCC,oBAAsB,sBACtBC,iCAAmC,mCACnCC,eAAiB,iBACjBC,kBAAoB,oBACpBC,kBAAoB,oBACpBC,kBAAoB,oBACpBC,sBAAwB,wBACxBC,sBAAwB,wBACxBC,wBAA0B,0BAC1BC,8BAAgC,gCAChCC,6BAA+B,+BAC/BC,8BAAgC,gCAChCC,mBAAqB,qBACrBC,sBAAwB,wBACxBC,mBAAqB,qBACrBC,qBAAuB,uBACvBC,8BAAgC,gCAChCC,2BAA6B,6BAC7BC,gCAAkC,kCAClCC,oCAAsC,sCACtCC,kCAAoC,oCACpCC,uCAAyC,yCACzCC,8BAAgC,gCAChCC,sBAAwB,wBACxBC,gBAAkB,kBAClBC,sBAAwB,wBACxBC,yBAA2B,2BAC3BC,iBAAmB,mBACnBC,mBAAqB,qBACrBC,sBAAwB,wBACxBC,wBAA0B,0BAC1BC,mBAAqB,qBACrBC,eAAiB,iBACjBC,aAAe,eACfC,yBAA2B,2BAC3BC,sBAAwB,wBACxBC,gBAAkB,kBAClBC,eAAiB,iBACjBC,wBAA0B,0BAC1BC,yBAA2B,2BAC3BC,UAAY,YACZC,oBAAsB,sBACtBC,sBAAwB,wBACxBC,oBAAsB,sBACtBC,0BAA4B,4BAC5BC,aAAe,eACfC,oBAAsB,sBACtBC,0BAA4B,4BAC5BC,qBAAuB,uBACvBC,sBAAwB,wBACxBC,8BAAgC,gCAChCC,kBAAoB,oBACpBC,yCAA2C,2CAC3CC,yCAA2C,2CAC3CC,iDAAmD,mDACnDC,kCAAoC,oCACpCC,kCAAoC,oCACpCC,0CAA4C,4CAC5CC,uBAAyB,yBACzBC,2BAA6B,6BAC7BC,sBAAwB,wBACxBC,2BAA6B,6BAC7BC,gBAAkB,kBAClBC,aAAe,eACfC,sBAAwB,wBACxBC,mBAAqB,qBACrBC,kBAAoB,oBACpBC,iBAAmB,mBACnBC,sBAAwB,yBAiBnB,MAAME,UAAiBC,MAC5BC,YAAaC,EAAMC,GACjBC,QACAC,KAAKxG,KAAOqG,EACZG,KAAKH,KAAOA,EACZG,KAAKF,KAAOA,EACZE,KAAKC,QApBT,SAAyBC,EAAUC,GACjC,IAAIC,EAASF,EACb,IAAK,MAAM1F,KAAOb,OAAO0G,KAAKF,GAAS,CACrC,IAAIG,EAEFA,EADEC,MAAMC,QAAQL,EAAO3F,IAChB2F,EAAO3F,GAAKiG,KAAK,MAEjBC,OAAOP,EAAO3F,IAEvB4F,EAASA,EAAOO,QAAQ,IAAIC,YAAYpG,MAAS,KAAM8F,GAEzD,OAAOF,EASUS,CAAe5F,EAAS4E,GAAOC,GAAQ,IAClDH,MAAMmB,mBAAmBnB,MAAMmB,kBAAkBd,KAAMA,KAAKJ,aAGlEmB,SACE,MAAO,CACLlB,KAAMG,KAAKH,KACXC,KAAME,KAAKF,KACXkB,OAAQhB,KAAKgB,OACbf,QAASD,KAAKC,SAIlBgB,WACE,OAAOjB,KAAKkB,MAAMD,c,wbClLtB,MAAME,EAAkB,IAAIC,IACtBC,EAAQ,IAAIC,QAIX,MAAMC,EACX3B,YAAa4B,GAGX,QAAWC,IAAPD,EACF,MAAM,IAAI9B,IAASD,IAAEP,gBAAiB,CAAEwC,OAAQ,OAIlD,OAAIL,EAAMM,IAAIH,GACLH,EAAMvH,IAAI0H,GAEfH,EAAMM,IAAIH,EAAGI,wBACRP,EAAMvH,IAAI0H,EAAGI,6BAGmB,IAA9BJ,EAAGI,uBAA+CJ,GAG3D7H,OAAOkI,yBAAyBL,EAAI,aACpC7H,OAAOkI,yBAAyBL,EAAI,YAAY3H,YAEhDmG,KAAK8B,UAAYN,EAAGO,SAASC,SAASvH,KAAK+G,EAAGO,UAC9C/B,KAAKiC,WAAaT,EAAGO,SAASG,UAAUzH,KAAK+G,EAAGO,UAChD/B,KAAKmC,OAASX,EAAGO,SAASK,MAAM3H,KAAK+G,EAAGO,UACxC/B,KAAKqC,OAASb,EAAGO,SAASO,MAAM7H,KAAK+G,EAAGO,UACxC/B,KAAKuC,QAAUf,EAAGO,SAASS,OAAO/H,KAAK+G,EAAGO,UAC1C/B,KAAKyC,MAAQjB,EAAGO,SAASW,KAAKjI,KAAK+G,EAAGO,UACtC/B,KAAK2C,OAASnB,EAAGO,SAASa,MAAMnI,KAAK+G,EAAGO,UACxC/B,KAAK6C,SAAWrB,EAAGO,SAASe,QAAQrI,KAAK+G,EAAGO,UAC5C/B,KAAK+C,UAAYvB,EAAGO,SAASiB,SAASvI,KAAK+G,EAAGO,UAC9C/B,KAAKiD,SAAWzB,EAAGO,SAASmB,QAAQzI,KAAK+G,EAAGO,YAE5C/B,KAAK8B,UAAYqB,IAAK3B,EAAGQ,SAASvH,KAAK+G,IACvCxB,KAAKiC,WAAakB,IAAK3B,EAAGU,UAAUzH,KAAK+G,IACzCxB,KAAKmC,OAASgB,IAAK3B,EAAGY,MAAM3H,KAAK+G,IACjCxB,KAAKqC,OAASc,IAAK3B,EAAGc,MAAM7H,KAAK+G,IACjCxB,KAAKuC,QAAUY,IAAK3B,EAAGgB,OAAO/H,KAAK+G,IACnCxB,KAAKyC,MAAQU,IAAK3B,EAAGkB,KAAKjI,KAAK+G,IAC/BxB,KAAK2C,OAASQ,IAAK3B,EAAGoB,MAAMnI,KAAK+G,IACjCxB,KAAK6C,SAAWM,IAAK3B,EAAGsB,QAAQrI,KAAK+G,IACrCxB,KAAK+C,UAAYI,IAAK3B,EAAGwB,SAASvI,KAAK+G,IACvCxB,KAAKiD,SAAWE,IAAK3B,EAAG0B,QAAQzI,KAAK+G,KAEvCxB,KAAK4B,uBAAyBJ,OAC9BH,EAAM+B,IAAI5B,EAAIxB,OAOVqD,OAAQC,EAAUC,EAAU,IAAI,gCACpC,IAEE,aADM,EAAKd,MAAMa,IACV,EACP,MAAOE,GACP,GAAiB,WAAbA,EAAI3D,MAAkC,YAAb2D,EAAI3D,KAC/B,OAAO,EAGP,MADA4D,QAAQC,IAAI,oDAAqDF,GAC3DA,IAT0B,GAsBhCG,KAAML,EAAUC,EAAU,IAAI,gCAClC,IACE,IAAIK,QAAe,EAAK9B,UAAUwB,EAAUC,GAK5C,MAHsB,iBAAXK,IACTA,EAASC,EAAOC,KAAKF,IAEhBA,EACP,MAAOJ,GACP,OAAO,OATyB,GAoB9BO,MAAOT,EAAUU,EAAUT,EAAU,IAAI,gCAC7C,IAEE,kBADM,EAAKtB,WAAWqB,EAAUU,EAAUT,IAE1C,MAAOC,SAED,EAAKpB,MAAM6B,YAAQX,UACnB,EAAKrB,WAAWqB,EAAUU,EAAUT,KAPC,GAczCnB,MAAOkB,EAAUY,GAAY,GAAO,gCACxC,IAEE,kBADM,EAAK/B,OAAOmB,IAElB,MAAOE,GAEP,GAAY,OAARA,EAAc,OAElB,GAAiB,WAAbA,EAAI3D,KAAmB,OAE3B,GAAIqE,EAAW,MAAMV,EAErB,GAAiB,WAAbA,EAAI3D,KAAmB,CACzB,MAAMsE,EAASF,YAAQX,GAEvB,GAAe,MAAXa,GAA6B,MAAXA,GAAkBA,IAAWb,EAAU,MAAME,QAE7D,EAAKpB,MAAM+B,SACX,EAAK/B,MAAMkB,GAAU,MAlBS,GA0BpCc,GAAId,GAAU,gCAClB,UACQ,EAAKf,QAAQe,GACnB,MAAOE,GACP,GAAiB,WAAbA,EAAI3D,KAAmB,MAAM2D,IAJjB,GAWdlB,MAAOgB,GAAU,gCACrB,UACQ,EAAKjB,OAAOiB,GAClB,MAAOE,GACP,GAAiB,WAAbA,EAAI3D,KAAmB,MAAM2D,IAJd,GAWjBV,QAASQ,GAAU,gCACvB,IACE,MAAMe,QAAc,EAAKxB,SAASS,GAIlC,OADAe,EAAMC,KAAKC,KACJF,EACP,MAAOb,GACP,MAAiB,YAAbA,EAAI3D,KAA2B,KAC5B,KATc,GAmBnB2E,YAAaC,GAAK,gCACtB,MAAMC,QAAgB,EAAK7B,SAAS4B,GASpC,aARoBE,QAAQC,IAC1BF,EAAQG,IAAR,mBAAY,UAAMC,GAChB,MAAMC,EAAMN,EAAM,IAAMK,EACxB,aAAc,EAAKrC,MAAMsC,IAAMC,cAC3B,EAAKR,YAAYO,GACjBA,IAJN,yDAOWE,OAAO,CAACC,EAAGC,IAAMD,EAAEE,OAAOD,GAAI,KAVrB,GAiBlBvC,MAAOyC,GAAU,gCACrB,IAEE,aADoB,EAAK1C,OAAO0C,GAEhC,MAAO7B,GACP,GAAiB,WAAbA,EAAI3D,KACN,OAAO,KAET,MAAM2D,IARa,GAgBjBR,SAAUqC,EAAUC,EAAO,CAAEC,SAAU,WAAY,gCAGvD,IACE,OAAO,EAAKxC,UAAUsC,EAAUC,GAChC,MAAO9B,GACP,GAAiB,WAAbA,EAAI3D,KACN,OAAO,KAET,MAAM2D,IAT+C,GAgBnDgC,UAAWH,EAAUzB,GAAQ,gCACjC,OAAO,EAAKX,SAASW,EAAO3C,SAAS,QAASoE,IADb,GAI7BI,KAAMJ,EAAUK,EAAY,GAAG,gCAEnC,GAAIvE,EAAgBQ,IAAI0D,GAGtB,OAFAM,aAAaxE,EAAgBrH,IAAIuL,SACjClE,EAAgByE,OAAOP,GAGzB,GAAkB,IAAdK,EACF,MAAM,IAAIhG,IAASD,IAAE1B,oBAAqB,CAAEsH,aAE9C,UACQ,EAAKlD,UAAUkD,UACrB,MAAO7B,GACU,WAAbA,EAAI3D,aACAgG,YAAM,WACN,EAAKJ,KAAKJ,EAAUK,EAAY,MAfP,GAoB/BI,OAAQT,EAAUU,EAAe,IAAI,gCACzC,GAAI5E,EAAgBQ,IAAI0D,GACtB,MAAM,IAAI3F,IAASD,IAAEzB,0BAA2B,CAAEqH,aAIpDlE,EAAgBiC,IACdiC,EACAW,WAAU,EAAC,YACT7E,EAAgByE,OAAOP,SACjB,EAAKhD,UAAUgD,YACpBU,KAXoC,O,sDCpQtC,SAASE,EAAeC,GAC7B,OAAOA,EACJvF,QAAQ,UAAW,KACnBA,QAAQ,UAAW,KACnBA,QAAQ,SAAU,KAClBA,QAAQ,SAAU,KAClBA,QAAQ,QAAS,IACjBA,QAAQ,QAAS,IACjBA,QAAQ,UAAW,MACnBA,QAAQ,KAAM,KCLZ,SAASF,KAAS0F,GACvB,OAAOF,EAAcE,EAAMtB,IAAIoB,GAAexF,KAAK,MALrD,iC,6BCAA,2EAgEO,MAAM2F,EAAU,IApDvB,cAAyBhF,IACvBgC,IAAK5I,EAAKN,GACa,EAACM,EAAKN,KAGf,OAARM,GACAb,OAAOkI,yBAAyB3H,EAAO,aACvCP,OAAOkI,yBAAyB3H,EAAO,YAAYL,aAEnDK,EAAQA,EAAM6H,UAEhB,MAAMsE,EAAgB,CACpBC,kBAAmB,CAAC,OAAQ,WAAY,YACxCC,QAAS,CAAC,QACV/E,GAAI,CACF,QACA,QACA,UACA,WACA,QACA,OACA,SACA,aAEFgF,IAAK,CAAC,OAAQ,UACdC,KAAM,IAER,IAAK9M,OAAOkB,UAAUC,eAAe1B,KAAKiN,EAAe7L,GACvD,MAAM,IAAIkF,IAASD,IAAEJ,mBAAoB,CAAEqC,OAAQlH,IAErD,IAAK,MAAMkM,KAAUL,EAAc7L,GACjC,QAAsBiH,IAAlBvH,EAAMwM,GACR,MAAM,IAAIhH,IAASD,IAAEL,sBAAuB,CAAEsC,OAAQlH,EAAKkM,YAIjEC,CAAanM,EAAKN,GAElB6F,MAAMqD,IAAI5I,EAAKN,GAGjBJ,IAAKU,GAEH,MAAMoM,EAAW,IAAIC,IAAI,CAAC,oBAAqB,KAAM,QACrD,IAAK9G,MAAM4B,IAAInH,IAAQoM,EAASjF,IAAInH,GAClC,MAAM,IAAIkF,IAASD,IAAEP,gBAAiB,CAAEwC,OAAQlH,IAElD,OAAOuF,MAAMjG,IAAIU,KAOfsM,EAAS,IAAI1F,IAAI,CAAC,CAAC,UAAWgF,KAEvBW,EAAQ,CAEnBjN,IAAKU,GACH,GAAIsM,EAAOnF,IAAInH,GACb,OAAOsM,EAAOhN,IAAIU,GAElB,MAAM,IAAIkF,IAASD,IAAEN,aAAc,CAAE6H,KAAMxM,KAI/CD,OAAQC,GACFsM,EAAOnF,IAAInH,GACNsM,EAAOhN,IAAIU,IAElBsM,EAAO1D,IAAI5I,EAAK,IAAI4G,KACb0F,EAAOhN,IAAIU,M,+CCnFjB,MAAMyM,EACXrH,YAAasH,GAGX,GAFAlH,KAAKmH,KAAO,IAAI/F,IAChBpB,KAAKoH,aAAe,GAChBF,EAAM,CACR,IAAI1M,EAAM,KACVwF,KAAKoH,aAAeF,EACjBG,OACAC,MAAM,MACNzC,IAAI0C,IACH,GAAI,QAAQC,KAAKD,GACf,MAAO,CAAEA,OAAME,SAAS,GAE1B,MAAMxO,EAAIsO,EAAKG,QAAQ,KACvB,GAAIH,EAAKI,WAAW,KAAM,CAGxB,MAAMzN,EAAQqN,EAAKK,MAAM,GAGzB,OADA5H,KAAKmH,KAAK/D,IAAI5I,EAAM,MAAON,GACpB,CAAEqN,OAAMM,IAAKrN,EAAKsN,OAAQ5N,GAC5B,CAEL,MAAMA,EAAQqN,EAAKK,MAAM,EAAG3O,GAG5B,OAFAuB,EAAM+M,EAAKK,MAAM3O,EAAI,GACrB+G,KAAKmH,KAAK/D,IAAI5I,EAAKN,GACZ,CAAEqN,OAAMM,IAAKrN,EAAKuN,IAAK7N,MAItC,OAAO8F,KAGT,YAAakH,GACX,OAAO,IAAID,EAAcC,GAG3BtB,OAAQiC,GACN7H,KAAKoH,aAAepH,KAAKoH,aAAaY,OAAOC,GAASA,EAAMJ,MAAQA,GACpE7H,KAAKmH,KAAKvB,OAAOiC,GAGnB5G,WACE,OAAOjB,KAAKoH,aAAavC,IAAI,EAAG0C,UAAWA,GAAM9G,KAAK,MAAQ,M,YC3C3D,SAASyH,EAAiBhD,EAAGiD,GAElC,MAAMC,EAAKlD,EAAEvE,QAAQ,UAAW,IAC1B0H,EAAKF,EAAExH,QAAQ,UAAW,IAC1B2H,IAAQF,EAAKC,MAASD,EAAKC,GACjC,OAAY,IAARC,EACKpD,EAAEqD,SAAS,OAAS,GAAK,EAE3BD,E,6WCGT,MAAME,EAAWX,GAAO,IACnBA,YACKA,iBACKA,kBACCA,oBACEA,oBACAA,UAIZY,EAAY,CAAC,SAAU,cAAe,QAAS,UAAW,aAEzD,MAAMC,EACX,yBACElH,GAAImH,EADyB,OAE7BC,EAF6B,OAG7BC,EAH6B,KAI7B1B,EAJ6B,QAK7B2B,EAL6B,KAM7BC,EAN6B,SAO7BC,EAP6B,MAQ7BC,GAAQ,EARqB,UAS7BC,GAAY,IACX,qBACD,MAAM1H,EAAK,IAAID,IAAWoH,GAE1B,IAAK,MAAMzO,KAASiN,EAAKhH,SACvB,IAAKjG,EAAMiP,MAAM,gBACf,MAAM,IAAIzJ,IAASD,IAAEpC,aAAc,CAAEnD,UAGzC,MAAMkP,QAAeC,IAAiBvP,IAAI,CAAE0H,KAAIoH,WAChD,IAAKI,EAAU,CAEb,GAAwB,KADxBA,QAAiBI,EAAOE,iBAAiBT,YAC5BU,OACX,MAAM,IAAI7J,IAASD,IAAEnC,yBAA0B,CAAEuL,WAGnDG,EAASQ,8BAA8BX,UAEzC,MAAMY,EAAUC,IAAc5F,KAAKkF,GAC7BW,EAAoB,IAAIvI,IAE9B,GAAI8H,EAAW,CACb,MAAMH,QAAaL,EAAckB,SAAS,CACxCpI,KACAoH,SACAtF,SAAU,oBAENoF,EAAcmB,WAAW,CAC7BrI,KACAoH,SACAzB,KAAM4B,EAAKlE,IAAIiF,gBAAoBA,OAIvC,GAAIf,EACF,IAAK,MAAMgB,KAAa5C,EAAK9G,OAC3B,GAAI0J,EAAUpC,WAAW,eAAiBoC,EAAUxB,SAAS,gBAE/CG,EAAcrF,OAAO,CAAE7B,KAAIoH,SAAQf,IAAKkC,KAAe,CAEjE,MAAMhC,EAAMZ,EAAKrN,IAAIiQ,EAAY,QAAU5C,EAAKrN,IAAIiQ,GACpDJ,EAAkBvG,IAAI2G,EAAWhC,GAMzC,MAAMiC,EAAkBP,EAAQQ,UAAU,IAAI9C,EAAK9G,SACnD,IAAK,MAAO0J,EAAWG,KAAkBF,EAAiB,CACxD,MAAM9P,EAAQiN,EAAKrN,IAAIiQ,GACvBJ,EAAkBvG,IAAI8G,EAAehQ,GAEvC,MAAMiQ,EAAqBV,EAAQQ,UAAU,IAAInB,EAAQzI,SACzD,IAAK,MAAO0J,EAAWG,KAAkBC,EAAoB,CAC3D,MAAMjQ,EAAQ4O,EAAQhP,IAAIiQ,GACpBK,EAAYX,EAAQY,aAAanQ,GACnCkQ,GACFT,EAAkBvG,IAAI8G,UAAuBE,KAIjD,MAAME,EAAS,GACf,GAAIrB,EAAO,CACT,IAAK,MAAM3F,KAAYmG,EAAQc,kBAAmB,CAChD,MAAMpD,SAAcuB,EAAckB,SAAS,CACzCpI,KACAoH,SACAtF,cACEuB,IAAI2F,MAAWlH,KAAYkH,KAC/B,IAAK,MAAM3C,KAAOV,EACXwC,EAAkBhI,IAAIkG,IACzByC,EAAOG,KAAK5C,GAIdyC,EAAOf,OAAS,UACZb,EAAcmB,WAAW,CAAErI,KAAIoH,SAAQzB,KAAMmD,KAkBvD,IAAK,MAAO9P,EAAKN,KAAUyP,QACnBnI,EAAGuC,MAAMtD,YAAKmI,EAAQpO,MAASN,EAAMmN,WAAY,QAEzD,MAAO,CAAEiD,WAhGR,GAoGH,iBAAyB9I,GAAImH,EAAN,OAAWC,EAAX,IAAmBf,EAAnB,MAAwB3N,IAAS,qBACtD,MAAMsH,EAAK,IAAID,IAAWoH,GAE1B,IAAKzO,EAAMiP,MAAM,gBACf,MAAM,IAAIzJ,IAASD,IAAEpC,aAAc,CAAEnD,gBAEjCsH,EAAGuC,MAAMtD,YAAKmI,EAAQf,MAAS3N,EAAMmN,WAAY,SAND,GASxD,yBAAiC7F,GAAImH,EAAN,OAAWC,EAAX,IAAmBf,EAAnB,MAAwB3N,IAAS,qBAC9D,MAAMsH,EAAK,IAAID,IAAWoH,SACpBnH,EAAGuC,MAAMtD,YAAKmI,EAAQf,GAAM,WAAa3N,EAAMmN,WAAY,SAFH,GAKhE,kBAAwB,GAAE7F,EAAF,OAAMoH,EAAN,IAAcf,IAAO,qBAC3C,OAAOa,EAAcmB,WAAW,CAAErI,KAAIoH,SAAQzB,KAAM,CAACU,MADV,GAI7C,mBAA2BrG,GAAImH,EAAN,OAAWC,EAAX,KAAmBzB,IAAQ,qBAClD,MAAM3F,EAAK,IAAID,IAAWoH,SAEpBhE,QAAQC,IAAIuC,EAAKtC,IAAIgD,GAAOrG,EAAG4C,GAAG3D,YAAKmI,EAAQf,MAErD,IAAIX,QAAa1F,EAAGmC,QAAQiF,gBAAsB,CAAErD,SAAU,SAC9D,MAAMmF,EAASzD,EAAcnD,KAAKoD,GAC5ByD,EAAaD,EAAOvD,KAAKyD,KAC/B,IAAK,MAAM/C,KAAOV,EACZuD,EAAOvD,KAAKxF,IAAIkG,IAClB6C,EAAO9E,OAAOiC,GAGd6C,EAAOvD,KAAKyD,KAAOD,IACrBzD,EAAOwD,EAAOzJ,iBACRO,EAAGuC,SAAS6E,gBAAsB1B,EAAM,CAAE3B,SAAU,WAfV,GAmBpD,gBAAwB/D,GAAImH,EAAN,OAAWC,EAAX,IAAmBf,EAAnB,MAAwBgD,IAAqB,qBACjE,MAAMrJ,EAAK,IAAID,IAAWoH,GAC1B,QAAclH,IAAVoJ,IAEa,MADfA,EAEE,OAAOhD,EAGX,IAAIiD,EAEJ,GAAIjD,EAAIF,WAAW,SAEjB,OADAE,EAAMA,EAAID,MAAM,QAAQ2B,QACjBb,EAAcqC,QAAQ,CAAEvJ,KAAIoH,SAAQf,MAAKgD,UAGlD,GAAmB,KAAfhD,EAAI0B,QAAiB,eAAe/B,KAAKK,GAC3C,OAAOA,EAGT,MAAMmD,QAAkBtC,EAAcuC,WAAW,CAAEzJ,KAAIoH,WAEjDsC,EAAW1C,EAASX,GAAKG,OAAOjN,IAAM0N,EAAU0C,SAASpQ,IAE/D,IAAK,MAAM8M,KAAOqD,EAIhB,GAHAJ,SACStJ,EAAGmC,QAAQiF,KAAUf,IAAO,CAAEtC,SAAU,WAC/CyF,EAAUlR,IAAI+N,GAEd,OAAOa,EAAcqC,QAAQ,CAAEvJ,KAAIoH,SAAQf,IAAKiD,EAAIzD,OAAQwD,UAIhE,MAAM,IAAInL,IAASD,IAAEjC,gBAAiB,CAAEqK,SAhCyB,GAmCnE,eAAqB,GAAErG,EAAF,OAAMoH,EAAN,IAAcf,IAAO,qBACxC,IAEE,aADMa,EAAc0C,OAAO,CAAE5J,KAAIoH,SAAQf,SAClC,EACP,MAAOrE,GACP,OAAO,IAL+B,GAS1C,eAAuBhC,GAAImH,EAAN,OAAWC,EAAX,IAAmBf,IAAO,qBAC7C,MAAMrG,EAAK,IAAID,IAAWoH,GAE1B,GAAmB,KAAfd,EAAI0B,QAAiB,eAAe/B,KAAKK,GAC3C,OAAOA,EAGT,MAAMmD,QAAkBtC,EAAcuC,WAAW,CAAEzJ,KAAIoH,WAEjDsC,EAAW1C,EAASX,GAC1B,IAAK,MAAMA,KAAOqD,EAAU,CAC1B,SAAU1J,EAAG6B,UAAUuF,KAAUf,KAAQ,OAAOA,EAChD,GAAImD,EAAUrJ,IAAIkG,GAAM,OAAOA,EAGjC,MAAM,IAAInI,IAASD,IAAEhC,eAAgB,CAAEoK,SAfM,GAkB/C,yBAA+B,IAAEA,EAAF,IAAOhD,IAAO,qBAE3C,MAAMqG,EAAW1C,EAASX,GAC1B,IAAK,MAAMA,KAAOqD,EAChB,SAAUrG,EAAIlD,IAAIkG,GAAM,OAAOA,EAGjC,MAAM,IAAInI,IAASD,IAAEhC,eAAgB,CAAEoK,SAPI,GAU7C,0BAA0B,IAAEA,EAAF,QAAOwD,EAAUxD,EAAjB,MAAsBgD,EAAtB,IAAyChG,IACjE,QAAcpD,IAAVoJ,IAEa,MADfA,EAEE,MAAO,CAAEQ,UAAStD,IAAKF,GAI3B,GAAIA,EAAIF,WAAW,SAEjB,OADAE,EAAMA,EAAID,MAAM,QAAQ2B,QACjBb,EAAc4C,kBAAkB,CAAEzD,MAAKwD,UAASR,QAAOhG,QAGhE,GAAmB,KAAfgD,EAAI0B,QAAiB,eAAe/B,KAAKK,GAC3C,MAAO,CAAEwD,UAAStD,IAAKF,GAGzB,MAAMqD,EAAW1C,EAASX,GAC1B,IAAK,MAAMA,KAAOqD,EAAU,CAC1B,MAAMJ,EAAMjG,EAAI/K,IAAI+N,GACpB,GAAIiD,EACF,OAAOpC,EAAc4C,kBAAkB,CACrCzD,IAAKiD,EAAIzD,OACTgE,QAASxD,EACTgD,QACAhG,QAKN,MAAM,IAAInF,IAASD,IAAEjC,gBAAiB,CAAEqK,QAG1C,mBAA2BrG,GAAImH,EAAN,OAAWC,IAAU,qBAC5C,MAAMpH,EAAK,IAAID,IAAWoH,GACpBzB,QAAa1F,EAAGmC,QAAQiF,gBAAsB,CAAErD,SAAU,SAEhE,OADe0B,EAAcnD,KAAKoD,GACpBC,MAJ8B,GAQ9C,iBAAyB3F,GAAImH,EAAN,OAAWC,EAAX,SAAmBtF,IAAY,qBACpD,MAAM9B,EAAK,IAAID,IAAWoH,GACpBqC,EAAYtC,EAAcuC,WAAW,CAAEzJ,KAAIoH,WACjD,IAAI2C,EAAQ,KACZ,IAEEA,GADAA,QAAc/J,EAAGgD,eAAeoE,KAAUtF,MAC5BuB,IAAI2G,GAAKA,EAAE7K,WAAWiI,KAAUtF,KAAa,KAC3D,MAAOE,GACP+H,EAAQ,GAGV,IAAK,IAAI/Q,WAAcwQ,GAAW3K,OAE5B7F,EAAImN,WAAWrE,KAEjB9I,EAAMA,EAAImG,QAAQ2C,EAAW,IAAK,IAE7BiI,EAAMJ,SAAS3Q,IAClB+Q,EAAMd,KAAKjQ,IAMjB,OADA+Q,EAAMjH,KAAK4D,GACJqD,GAxB6C,GA2BtD,qBAA6B/J,GAAImH,EAAN,OAAWC,EAAX,OAAmBC,IAAU,qBACtD,MAAMrH,EAAK,IAAID,IAAWoH,GAC1B,OAAIE,EACKH,EAAckB,SAAS,CAC5BpI,KACAoH,SACAtF,yBAA0BuF,MAGrBH,EAAckB,SAAS,CAAEpI,KAAIoH,SAAQtF,SAAW,gBATH,GAaxD,iBAAyB9B,GAAImH,EAAN,OAAWC,IAAU,qBAC1C,MAAMpH,EAAK,IAAID,IAAWoH,GAM1B,aALmBD,EAAckB,SAAS,CACxCpI,KACAoH,SACAtF,SAAW,eAED0E,OAAOwD,IAAMA,EAAEjD,SAAS,SAPM,M,sQC3TvC,SAAekD,EAAtB,kC,4BAAO,WAA6BjK,GAAImH,EAAN,OAAWC,EAAX,IAAmBb,EAAnB,OAAwB2D,EAAS,YACjE,MAAMlK,EAAK,IAAID,IAAWoH,GAGpBgD,EAAsB5D,GAAO0D,EAAW,CAAEjK,KAAIoH,SAAQb,QAE5D,IAAI3H,EAgBJ,GAZY,6CAAR2H,IACF3H,EAAS,CAAEsL,OAAQ,UAAW/Q,OAAQkJ,EAAOC,KAAM,cAGhD1D,IACHA,QAAewL,YAAgB,CAAEpK,KAAIoH,SAAQb,SAG1C3H,IACHA,QAAeyL,YAAiB,CAAErK,KAAIoH,SAAQb,MAAK4D,0BAGhDvL,EACH,MAAM,IAAIV,IAASD,IAAErC,eAAgB,CAAE2K,QAGzC,GAAe,aAAX2D,EACF,OAAOtL,EAMT,OAAQA,EAAOsL,QACb,IAAK,WACHtL,EAAOzF,OAASkJ,EAAOC,KAAKgI,IAAKC,QAAQ3L,EAAOzF,SAChDyF,EAAOsL,OAAS,UAClB,IAAK,UACH,GAAe,YAAXA,GAA0C,YAAlBtL,EAAOsL,OACjC,OAAOtL,EAET,MAAM0K,QAAYkB,YAAO5L,EAAOzF,QAChC,GAAImQ,IAAQ/C,EACV,MAAM,IAAIrI,IAASD,IAAExB,aAAc,CACjCgC,sCAAuC8H,eAAiB+C,MAG5D,MAAM,OAAEnQ,EAAF,KAAUsR,GAASC,IAAUC,OAAO/L,EAAOzF,QACjDyF,EAAO6L,KAAOA,EACd7L,EAAOzF,OAASA,EAChByF,EAAOsL,OAAS,UAClB,IAAK,UACH,GAAe,YAAXA,EAAsB,OAAOtL,EACjC,MACF,QACE,MAAM,IAAIV,IAASD,IAAExB,aAAc,CACjCgC,2BAA4BG,EAAOsL,e,8PCjE3C,gEACA,IA0BIU,EACAC,EA3BAC,EAA8B,oBAAhBC,aAA+BA,YAE7CC,EAAMF,GAAQA,EAAKE,IAAM,WAAc,OAAOF,EAAKE,OAAW,WAAc,OAAOC,KAAKD,OAE5F,SAASE,EAAclT,GACrB,IAAKA,EACH,MAAM,IAAImG,MAAM,0BAyBpB,GAAI2M,GAAQA,EAAKF,KACfA,EAAO,SAAU5S,GACfkT,EAAalT,GACb8S,EAAKF,KAAM,SAAW5S,IAExB6S,EAAO,SAAU7S,GACfkT,EAAalT,GACb8S,EAAKF,KAAM,OAAS5S,GACpB8S,EAAKK,QAAQnT,EAAO,SAAWA,EAAQ,OAASA,GAChD,IAAIoT,EAAUN,EAAKO,iBAAiBrT,GACpC,OAAOoT,EAAQA,EAAQrD,OAAS,IAErB,WAAc,OAAO+C,EAAKQ,iBAAiB,YAChD,WACNR,EAAKS,aACLT,EAAKU,qBAEF,CACL,IAAIC,EAAQ,GACRL,EAAU,GACdR,EAAO,SAAU5S,GACfkT,EAAalT,GACb,IAAI0T,EAAYV,IAChBS,EAAM,IAAMzT,GAAQ0T,GAEtBb,EAAO,SAAU7S,GACfkT,EAAalT,GACb,IAAI2T,EAAUX,IACVU,EAAYD,EAAM,IAAMzT,GAC5B,IAAK0T,EACH,MAAM,IAAIvN,MAAO,kBAAoBnG,GAEvC,IAAIyO,EAAQ,CACViF,UAAWA,EACX1T,KAAMA,EACN4T,SAAUD,EAAUD,EACpBG,UAAW,WAMb,OA9DJ,SAAuBC,EAAKC,GAI1B,IAHA,IAEIC,EAFAC,EAAM,EACNC,EAAOJ,EAAI/D,OAERkE,EAAMC,GAEPJ,EADJE,EAAOC,EAAMC,IAAU,GACVR,UAAYK,EAAKL,UAC5BO,EAAMD,EAAM,EAEZE,EAAOF,EAGXF,EAAIK,OAAOF,EAAK,EAAGF,GAiDjBK,CAAahB,EAAS3E,GACfA,GAEI,WAAc,OAAO2E,GAC1B,WACNK,EAAQ,GACRL,EAAU,M,ubCxEP,MAAMiB,EACXjO,YAAakO,GACX,GAAsB,iBAAXA,EACT9N,KAAK+N,QAAUD,OACV,GAAIjK,EAAOmK,SAASF,GACzB9N,KAAK+N,QAAUD,EAAO7M,SAAS,YAC1B,IAAsB,iBAAX6M,EAGhB,MAAM,IAAIpO,IAASD,IAAExB,aAAc,CACjCgC,QAAS,iDAHXD,KAAK+N,QAAUF,EAAUI,OAAOH,IAQpC,6BAA6B,QAAEI,EAAF,UAAWC,IACtC,MAAMC,EAAUP,EAAUQ,YAAYH,GAChCjO,EAAU4N,EAAUS,YAAYJ,GAChCJ,EAASS,YACbH,EAAU,WAAaI,YAAOL,GAAa,KAAOlO,GAEpD,OAAO,IAAI4N,EAAUC,GAGvB,YAAaA,GACX,OAAO,IAAID,EAAUC,GAGvBW,WACE,OAAO5K,EAAOC,KAAK9D,KAAK+N,QAAS,QAInCK,UACE,OAAOpO,KAAK0O,eAIdzO,UACE,OAAO4N,EAAUS,YAAYtO,KAAK+N,SAGpCY,QACE,OAAOhV,OAAOiV,OAAO,CAAE3O,QAASD,KAAKC,WAAaD,KAAKoO,WAGzD,mBAAoBN,GAClB,OAAOS,YAAkBT,EAAOlG,MAAMkG,EAAOpG,QAAQ,QAAU,IAGjE,mBAAoBoG,GAClB,OAAOA,EAAOlG,MAAM,EAAGkG,EAAOpG,QAAQ,SAGxCgH,eACE,MAAMN,EAAUP,EAAUQ,YAAYrO,KAAK+N,SAASzG,MAAM,MACpDuH,EAAK,GACX,IAAK,MAAMC,KAAKV,EACD,MAATU,EAAE,GAEJD,EAAGA,EAAGtF,OAAS,IAAM,KAAOuF,EAAElH,MAAM,GAEpCiH,EAAGpE,KAAKqE,GAGZ,MAAMC,EAAM,CACV5K,OAAQ,IAEV,IAAK,MAAM2K,KAAKD,EAAI,CAClB,MAAMrU,EAAMsU,EAAElH,MAAM,EAAGkH,EAAEpH,QAAQ,MAC3BxN,EAAQ4U,EAAElH,MAAMkH,EAAEpH,QAAQ,KAAO,GACnCnH,MAAMC,QAAQuO,EAAIvU,IACpBuU,EAAIvU,GAAKiQ,KAAKvQ,GAEd6U,EAAIvU,GAAON,EASf,OANI6U,EAAIC,SACND,EAAIC,OAASC,YAAYF,EAAIC,SAE3BD,EAAIG,YACNH,EAAIG,UAAYD,YAAYF,EAAIG,YAE3BH,EAGT,qBAAsBA,GACpB,IAAIX,EAAU,GAMd,GALIW,EAAII,KACNf,WAAmBW,EAAII,SAEvBf,GAAY,kDAEVW,EAAI5K,OAAQ,CACd,QAA0B1C,IAAtBsN,EAAI5K,OAAOoF,OACb,MAAM,IAAI7J,IAASD,IAAExB,aAAc,CACjCgC,QAAU,gDAGd,IAAK,MAAMlF,KAAKgU,EAAI5K,OAClBiK,aAAqBrT,MAGzB,MAAMiU,EAASD,EAAIC,OACnBZ,aAAqBgB,YAAaJ,OAClC,MAAME,EAAYH,EAAIG,WAAaH,EAAIC,OAKvC,OAJAZ,gBAAwBgB,YAAaF,OACjCH,EAAIM,SACNjB,GAAW,SAAWI,YAAOO,EAAIM,SAE5BjB,EAGT,cAAeW,GACb,OAAOlB,EAAUyB,cAAcP,GAAO,KAAOR,YAAkBQ,EAAI9O,SAGrEgO,SACE,OAAOjO,KAAK+N,QAGdwB,mBACE,MAAMzB,EAASS,YAAkBvO,KAAK+N,SACtC,IAAoC,IAAhCD,EAAOpG,QAAQ,YAAoB,OAAOoG,EAC9C,MAAMM,EAAUN,EAAOlG,MAAM,EAAGkG,EAAOpG,QAAQ,aACzCzH,EAAU6N,EAAOlG,MACrBkG,EAAOpG,QAAQ,iCACb,gCAAgC6B,QAEpC,OAAOgF,YAAkBH,EAAU,KAAOnO,GAG5CuP,mBACE,MAAMrB,EAAYnO,KAAK+N,QAAQnG,MAC7B5H,KAAK+N,QAAQrG,QAAQ,iCACrB1H,KAAK+N,QAAQrG,QAAQ,+BACnB,8BAA8B6B,QAElC,OAAOkG,YAAQtB,GAGjB,YAAmBL,EAAQtH,EAAKkJ,GAAW,qBACzC,MAAMxB,EAAUJ,EAAOyB,mBACjBtP,EAAU4N,EAAUS,YAAYR,EAAOC,SAC7C,IAAI,UAAEI,SAAoB3H,EAAImJ,KAAK,CAAEzB,UAASwB,cAE9CvB,EAAYI,YAAkBJ,GAC9B,MACMyB,EADU/B,EAAUQ,YAAYP,EAAOC,SAEjC,WAAkBS,YAAOL,GAAa,KAAOlO,EAEzD,OAAO4N,EAAU/J,KAAK8L,IAVmB,GAa3C,cAAqB9B,EAAQtH,EAAKqJ,GAAW,qBAC3C,MAAM3B,EAAUJ,EAAOyB,mBACjBpB,EAAYL,EAAO0B,mBACzB,OAAOhJ,EAAIsJ,OAAO,CAAE5B,UAAS2B,YAAW1B,eAHG,O,uDCjK/C,gDAAI4B,EAAY,KAET,SAASrM,KAAQsM,GACtB,GAAkB,OAAdD,EAIF,IACEA,EACGE,GACCA,EAAQC,KACRD,EAAQC,IAAIC,QACW,MAAtBF,EAAQC,IAAIC,OACW,mBAAtBF,EAAQC,IAAIC,QACG,oBAAXC,aACyB,IAAxBA,OAAOC,eACiB,MAA9BD,OAAOC,aAAaC,OACW,mBAA9BF,OAAOC,aAAaC,OAC1B,MAAOC,GACPR,GAAY,EAGZA,GACFtM,QAAQC,OAAOsM,M,yOCkCZ,MAAMQ,EACX,eACE,OAAO3M,EAAOC,KAAK,OAAQ,QAG7B,cAAeyD,GACO,iBAATA,IACTA,EAAO1D,EAAOC,KAAKyD,IAErB,MAAMgC,EAAShC,EAAKgC,OAAS,EACvBkH,EAAYC,YAAO,EAAGnH,GAC5B,OAAO1F,EAAOuB,OAAO,CAACvB,EAAOC,KAAK2M,EAAW,QAASlJ,IAGxD,oBAAqBoJ,GACnB,MAAMC,EAAS,IAAIC,IAAaF,GAChC,sB,EAAA,G,EAAO,YACL,IACE,IAAIpH,QAAeqH,EAAOjN,KAAK,GAC/B,GAAc,MAAV4F,EAAgB,OAAO,EAE3B,GAAe,KADfA,EAASuH,SAASvH,EAAOtI,SAAS,QAAS,KACzB,OAAO,KACzB,MAAM2C,QAAegN,EAAOjN,KAAK4F,EAAS,GAC1C,OAAc,MAAV3F,GACGA,EACP,MAAOJ,GAEP,OADAC,QAAQC,IAAI,QAASF,IACd,I,6KAXX,yD,uDCzEJ;;;;;;;AAUA,IAAIuN,EAAS,EAAQ,IACjBC,EAAU,EAAQ,KAClBxQ,EAAU,EAAQ,KAmDtB,SAASyQ,IACP,OAAOpN,EAAOqN,oBACV,WACA,WAGN,SAASC,EAAcC,EAAM7H,GAC3B,GAAI0H,IAAe1H,EACjB,MAAM,IAAI8H,WAAW,8BAcvB,OAZIxN,EAAOqN,qBAETE,EAAO,IAAIE,WAAW/H,IACjBgI,UAAY1N,EAAOhJ,WAGX,OAATuW,IACFA,EAAO,IAAIvN,EAAO0F,IAEpB6H,EAAK7H,OAASA,GAGT6H,EAaT,SAASvN,EAAQ2N,EAAKC,EAAkBlI,GACtC,KAAK1F,EAAOqN,qBAAyBlR,gBAAgB6D,GACnD,OAAO,IAAIA,EAAO2N,EAAKC,EAAkBlI,GAI3C,GAAmB,iBAARiI,EAAkB,CAC3B,GAAgC,iBAArBC,EACT,MAAM,IAAI9R,MACR,qEAGJ,OAAO+R,EAAY1R,KAAMwR,GAE3B,OAAO1N,EAAK9D,KAAMwR,EAAKC,EAAkBlI,GAW3C,SAASzF,EAAMsN,EAAMlX,EAAOuX,EAAkBlI,GAC5C,GAAqB,iBAAVrP,EACT,MAAM,IAAIyX,UAAU,yCAGtB,MAA2B,oBAAhBC,aAA+B1X,aAAiB0X,YA6H7D,SAA0BR,EAAMS,EAAOC,EAAYvI,GAGjD,GAFAsI,EAAME,WAEFD,EAAa,GAAKD,EAAME,WAAaD,EACvC,MAAM,IAAIT,WAAW,6BAGvB,GAAIQ,EAAME,WAAaD,GAAcvI,GAAU,GAC7C,MAAM,IAAI8H,WAAW,6BAIrBQ,OADiBpQ,IAAfqQ,QAAuCrQ,IAAX8H,EACtB,IAAI+H,WAAWO,QACHpQ,IAAX8H,EACD,IAAI+H,WAAWO,EAAOC,GAEtB,IAAIR,WAAWO,EAAOC,EAAYvI,GAGxC1F,EAAOqN,qBAETE,EAAOS,GACFN,UAAY1N,EAAOhJ,UAGxBuW,EAAOY,EAAcZ,EAAMS,GAE7B,OAAOT,EAvJEa,CAAgBb,EAAMlX,EAAOuX,EAAkBlI,GAGnC,iBAAVrP,EAwFb,SAAqBkX,EAAMc,EAAQ3M,GACT,iBAAbA,GAAsC,KAAbA,IAClCA,EAAW,QAGb,IAAK1B,EAAOsO,WAAW5M,GACrB,MAAM,IAAIoM,UAAU,8CAGtB,IAAIpI,EAAwC,EAA/BwI,EAAWG,EAAQ3M,GAG5B6M,GAFJhB,EAAOD,EAAaC,EAAM7H,IAERxF,MAAMmO,EAAQ3M,GAE5B6M,IAAW7I,IAIb6H,EAAOA,EAAKxJ,MAAM,EAAGwK,IAGvB,OAAOhB,EA5GEiB,CAAWjB,EAAMlX,EAAOuX,GAsJnC,SAAqBL,EAAMrC,GACzB,GAAIlL,EAAOmK,SAASe,GAAM,CACxB,IAAIuD,EAA4B,EAAtBC,EAAQxD,EAAIxF,QAGtB,OAAoB,KAFpB6H,EAAOD,EAAaC,EAAMkB,IAEjB/I,OACA6H,GAGTrC,EAAIyD,KAAKpB,EAAM,EAAG,EAAGkB,GACdlB,GAGT,GAAIrC,EAAK,CACP,GAA4B,oBAAhB6C,aACR7C,EAAInL,kBAAkBgO,aAAgB,WAAY7C,EACpD,MAA0B,iBAAfA,EAAIxF,SA+8CLkJ,EA/8CkC1D,EAAIxF,SAg9CrCkJ,EA/8CFtB,EAAaC,EAAM,GAErBY,EAAcZ,EAAMrC,GAG7B,GAAiB,WAAbA,EAAI9C,MAAqBzL,EAAQuO,EAAIjP,MACvC,OAAOkS,EAAcZ,EAAMrC,EAAIjP,MAw8CrC,IAAgB2S,EAp8Cd,MAAM,IAAId,UAAU,sFA9Kbe,CAAWtB,EAAMlX,GA4B1B,SAASyY,EAAY/H,GACnB,GAAoB,iBAATA,EACT,MAAM,IAAI+G,UAAU,oCACf,GAAI/G,EAAO,EAChB,MAAM,IAAIyG,WAAW,wCA4BzB,SAASK,EAAaN,EAAMxG,GAG1B,GAFA+H,EAAW/H,GACXwG,EAAOD,EAAaC,EAAMxG,EAAO,EAAI,EAAoB,EAAhB2H,EAAQ3H,KAC5C/G,EAAOqN,oBACV,IAAK,IAAIjY,EAAI,EAAGA,EAAI2R,IAAQ3R,EAC1BmY,EAAKnY,GAAK,EAGd,OAAOmY,EAwCT,SAASY,EAAeZ,EAAMS,GAC5B,IAAItI,EAASsI,EAAMtI,OAAS,EAAI,EAA4B,EAAxBgJ,EAAQV,EAAMtI,QAClD6H,EAAOD,EAAaC,EAAM7H,GAC1B,IAAK,IAAItQ,EAAI,EAAGA,EAAIsQ,EAAQtQ,GAAK,EAC/BmY,EAAKnY,GAAgB,IAAX4Y,EAAM5Y,GAElB,OAAOmY,EA+DT,SAASmB,EAAShJ,GAGhB,GAAIA,GAAU0H,IACZ,MAAM,IAAII,WAAW,0DACaJ,IAAahQ,SAAS,IAAM,UAEhE,OAAgB,EAATsI,EAsFT,SAASwI,EAAYG,EAAQ3M,GAC3B,GAAI1B,EAAOmK,SAASkE,GAClB,OAAOA,EAAO3I,OAEhB,GAA2B,oBAAhBqI,aAA6D,mBAAvBA,YAAYgB,SACxDhB,YAAYgB,OAAOV,IAAWA,aAAkBN,aACnD,OAAOM,EAAOH,WAEM,iBAAXG,IACTA,EAAS,GAAKA,GAGhB,IAAII,EAAMJ,EAAO3I,OACjB,GAAY,IAAR+I,EAAW,OAAO,EAItB,IADA,IAAIO,GAAc,IAEhB,OAAQtN,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAO+M,EACT,IAAK,OACL,IAAK,QACL,UAAK7Q,EACH,OAAOqR,EAAYZ,GAAQ3I,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAa,EAAN+I,EACT,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAOS,EAAcb,GAAQ3I,OAC/B,QACE,GAAIsJ,EAAa,OAAOC,EAAYZ,GAAQ3I,OAC5ChE,GAAY,GAAKA,GAAUyN,cAC3BH,GAAc,GAMtB,SAASI,EAAc1N,EAAU2N,EAAOC,GACtC,IAAIN,GAAc,EAclB,SALcpR,IAAVyR,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQlT,KAAKuJ,OACf,MAAO,GAOT,SAJY9H,IAAR0R,GAAqBA,EAAMnT,KAAKuJ,UAClC4J,EAAMnT,KAAKuJ,QAGT4J,GAAO,EACT,MAAO,GAOT,IAHAA,KAAS,KACTD,KAAW,GAGT,MAAO,GAKT,IAFK3N,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,OAAO6N,EAASpT,KAAMkT,EAAOC,GAE/B,IAAK,OACL,IAAK,QACH,OAAOE,EAAUrT,KAAMkT,EAAOC,GAEhC,IAAK,QACH,OAAOG,EAAWtT,KAAMkT,EAAOC,GAEjC,IAAK,SACL,IAAK,SACH,OAAOI,EAAYvT,KAAMkT,EAAOC,GAElC,IAAK,SACH,OAAOK,EAAYxT,KAAMkT,EAAOC,GAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOM,EAAazT,KAAMkT,EAAOC,GAEnC,QACE,GAAIN,EAAa,MAAM,IAAIlB,UAAU,qBAAuBpM,GAC5DA,GAAYA,EAAW,IAAIyN,cAC3BH,GAAc,GAStB,SAASa,EAAMvL,EAAGzN,EAAGrB,GACnB,IAAIJ,EAAIkP,EAAEzN,GACVyN,EAAEzN,GAAKyN,EAAE9O,GACT8O,EAAE9O,GAAKJ,EAmIT,SAAS0a,EAAsB/P,EAAQ6O,EAAKX,EAAYvM,EAAUd,GAEhE,GAAsB,IAAlBb,EAAO2F,OAAc,OAAQ,EAmBjC,GAhB0B,iBAAfuI,GACTvM,EAAWuM,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAEhBA,GAAcA,EACV8B,MAAM9B,KAERA,EAAarN,EAAM,EAAKb,EAAO2F,OAAS,GAItCuI,EAAa,IAAGA,EAAalO,EAAO2F,OAASuI,GAC7CA,GAAclO,EAAO2F,OAAQ,CAC/B,GAAI9E,EAAK,OAAQ,EACZqN,EAAalO,EAAO2F,OAAS,OAC7B,GAAIuI,EAAa,EAAG,CACzB,IAAIrN,EACC,OAAQ,EADJqN,EAAa,EAUxB,GALmB,iBAARW,IACTA,EAAM5O,EAAOC,KAAK2O,EAAKlN,IAIrB1B,EAAOmK,SAASyE,GAElB,OAAmB,IAAfA,EAAIlJ,QACE,EAEHsK,EAAajQ,EAAQ6O,EAAKX,EAAYvM,EAAUd,GAClD,GAAmB,iBAARgO,EAEhB,OADAA,GAAY,IACR5O,EAAOqN,qBACiC,mBAAjCI,WAAWzW,UAAU6M,QAC1BjD,EACK6M,WAAWzW,UAAU6M,QAAQtO,KAAKwK,EAAQ6O,EAAKX,GAE/CR,WAAWzW,UAAUiZ,YAAY1a,KAAKwK,EAAQ6O,EAAKX,GAGvD+B,EAAajQ,EAAQ,CAAE6O,GAAOX,EAAYvM,EAAUd,GAG7D,MAAM,IAAIkN,UAAU,wCAGtB,SAASkC,EAAcvG,EAAKmF,EAAKX,EAAYvM,EAAUd,GACrD,IA0BIxL,EA1BA8a,EAAY,EACZC,EAAY1G,EAAI/D,OAChB0K,EAAYxB,EAAIlJ,OAEpB,QAAiB9H,IAAb8D,IAEe,UADjBA,EAAW7E,OAAO6E,GAAUyN,gBACY,UAAbzN,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAI+H,EAAI/D,OAAS,GAAKkJ,EAAIlJ,OAAS,EACjC,OAAQ,EAEVwK,EAAY,EACZC,GAAa,EACbC,GAAa,EACbnC,GAAc,EAIlB,SAASnO,EAAMuQ,EAAKjb,GAClB,OAAkB,IAAd8a,EACKG,EAAIjb,GAEJib,EAAIC,aAAalb,EAAI8a,GAKhC,GAAItP,EAAK,CACP,IAAI2P,GAAc,EAClB,IAAKnb,EAAI6Y,EAAY7Y,EAAI+a,EAAW/a,IAClC,GAAI0K,EAAK2J,EAAKrU,KAAO0K,EAAK8O,GAAqB,IAAhB2B,EAAoB,EAAInb,EAAImb,IAEzD,IADoB,IAAhBA,IAAmBA,EAAanb,GAChCA,EAAImb,EAAa,IAAMH,EAAW,OAAOG,EAAaL,OAEtC,IAAhBK,IAAmBnb,GAAKA,EAAImb,GAChCA,GAAc,OAKlB,IADItC,EAAamC,EAAYD,IAAWlC,EAAakC,EAAYC,GAC5Dhb,EAAI6Y,EAAY7Y,GAAK,EAAGA,IAAK,CAEhC,IADA,IAAIob,GAAQ,EACHC,EAAI,EAAGA,EAAIL,EAAWK,IAC7B,GAAI3Q,EAAK2J,EAAKrU,EAAIqb,KAAO3Q,EAAK8O,EAAK6B,GAAI,CACrCD,GAAQ,EACR,MAGJ,GAAIA,EAAO,OAAOpb,EAItB,OAAQ,EAeV,SAASsb,EAAUL,EAAKhC,EAAQsC,EAAQjL,GACtCiL,EAASC,OAAOD,IAAW,EAC3B,IAAIE,EAAYR,EAAI3K,OAASiL,EACxBjL,GAGHA,EAASkL,OAAOlL,IACHmL,IACXnL,EAASmL,GAJXnL,EAASmL,EASX,IAAIC,EAASzC,EAAO3I,OACpB,GAAIoL,EAAS,GAAM,EAAG,MAAM,IAAIhD,UAAU,sBAEtCpI,EAASoL,EAAS,IACpBpL,EAASoL,EAAS,GAEpB,IAAK,IAAI1b,EAAI,EAAGA,EAAIsQ,IAAUtQ,EAAG,CAC/B,IAAI2b,EAAS9D,SAASoB,EAAO2C,OAAW,EAAJ5b,EAAO,GAAI,IAC/C,GAAI2a,MAAMgB,GAAS,OAAO3b,EAC1Bib,EAAIM,EAASvb,GAAK2b,EAEpB,OAAO3b,EAGT,SAAS6b,EAAWZ,EAAKhC,EAAQsC,EAAQjL,GACvC,OAAOwL,EAAWjC,EAAYZ,EAAQgC,EAAI3K,OAASiL,GAASN,EAAKM,EAAQjL,GAG3E,SAASyL,EAAYd,EAAKhC,EAAQsC,EAAQjL,GACxC,OAAOwL,EAq6BT,SAAuBE,GAErB,IADA,IAAIC,EAAY,GACPjc,EAAI,EAAGA,EAAIgc,EAAI1L,SAAUtQ,EAEhCic,EAAUzK,KAAyB,IAApBwK,EAAIE,WAAWlc,IAEhC,OAAOic,EA36BWE,CAAalD,GAASgC,EAAKM,EAAQjL,GAGvD,SAAS8L,EAAanB,EAAKhC,EAAQsC,EAAQjL,GACzC,OAAOyL,EAAWd,EAAKhC,EAAQsC,EAAQjL,GAGzC,SAAS+L,EAAapB,EAAKhC,EAAQsC,EAAQjL,GACzC,OAAOwL,EAAWhC,EAAcb,GAASgC,EAAKM,EAAQjL,GAGxD,SAASgM,EAAWrB,EAAKhC,EAAQsC,EAAQjL,GACvC,OAAOwL,EAk6BT,SAAyBE,EAAKO,GAG5B,IAFA,IAAIlc,EAAGmc,EAAIC,EACPR,EAAY,GACPjc,EAAI,EAAGA,EAAIgc,EAAI1L,WACjBiM,GAAS,GAAK,KADavc,EAGhCK,EAAI2b,EAAIE,WAAWlc,GACnBwc,EAAKnc,GAAK,EACVoc,EAAKpc,EAAI,IACT4b,EAAUzK,KAAKiL,GACfR,EAAUzK,KAAKgL,GAGjB,OAAOP,EA/6BWS,CAAezD,EAAQgC,EAAI3K,OAASiL,GAASN,EAAKM,EAAQjL,GAkF9E,SAASiK,EAAaU,EAAKhB,EAAOC,GAChC,OAAc,IAAVD,GAAeC,IAAQe,EAAI3K,OACtBwH,EAAO6E,cAAc1B,GAErBnD,EAAO6E,cAAc1B,EAAItM,MAAMsL,EAAOC,IAIjD,SAASE,EAAWa,EAAKhB,EAAOC,GAC9BA,EAAM0C,KAAKC,IAAI5B,EAAI3K,OAAQ4J,GAI3B,IAHA,IAAIpO,EAAM,GAEN9L,EAAIia,EACDja,EAAIka,GAAK,CACd,IAQM4C,EAAYC,EAAWC,EAAYC,EARrCC,EAAYjC,EAAIjb,GAChBmd,EAAY,KACZC,EAAoBF,EAAY,IAAQ,EACvCA,EAAY,IAAQ,EACpBA,EAAY,IAAQ,EACrB,EAEJ,GAAIld,EAAIod,GAAoBlD,EAG1B,OAAQkD,GACN,KAAK,EACCF,EAAY,MACdC,EAAYD,GAEd,MACF,KAAK,EAEyB,MAAV,KADlBJ,EAAa7B,EAAIjb,EAAI,OAEnBid,GAA6B,GAAZC,IAAqB,EAAoB,GAAbJ,GACzB,MAClBK,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAa7B,EAAIjb,EAAI,GACrB+c,EAAY9B,EAAIjb,EAAI,GACQ,MAAV,IAAb8c,IAAsD,MAAV,IAAZC,KACnCE,GAA6B,GAAZC,IAAoB,IAAoB,GAAbJ,IAAsB,EAAmB,GAAZC,GACrD,OAAUE,EAAgB,OAAUA,EAAgB,SACtEE,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAa7B,EAAIjb,EAAI,GACrB+c,EAAY9B,EAAIjb,EAAI,GACpBgd,EAAa/B,EAAIjb,EAAI,GACO,MAAV,IAAb8c,IAAsD,MAAV,IAAZC,IAAsD,MAAV,IAAbC,KAClEC,GAA6B,GAAZC,IAAoB,IAAqB,GAAbJ,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,GAClF,OAAUC,EAAgB,UAC5CE,EAAYF,GAMJ,OAAdE,GAGFA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACbrR,EAAI0F,KAAK2L,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvBrR,EAAI0F,KAAK2L,GACTnd,GAAKod,EAGP,OAQF,SAAgCC,GAC9B,IAAIhE,EAAMgE,EAAW/M,OACrB,GAAI+I,GAAOiE,EACT,OAAO7V,OAAO8V,aAAaC,MAAM/V,OAAQ4V,GAI3C,IAAIvR,EAAM,GACN9L,EAAI,EACR,KAAOA,EAAIqZ,GACTvN,GAAOrE,OAAO8V,aAAaC,MACzB/V,OACA4V,EAAW1O,MAAM3O,EAAGA,GAAKsd,IAG7B,OAAOxR,EAvBA2R,CAAsB3R,GA98B/BtM,EAAQoL,OAASA,EACjBpL,EAAQke,WAoTR,SAAqBpN,IACdA,GAAUA,IACbA,EAAS,GAEX,OAAO1F,EAAO+S,OAAOrN,IAvTvB9Q,EAAQoe,kBAAoB,GA0B5BhT,EAAOqN,yBAAqDzP,IAA/BqV,EAAO5F,oBAChC4F,EAAO5F,oBAQX,WACE,IACE,IAAI5D,EAAM,IAAIgE,WAAW,GAEzB,OADAhE,EAAIiE,UAAY,CAACA,UAAWD,WAAWzW,UAAWkc,IAAK,WAAc,OAAO,KACvD,KAAdzJ,EAAIyJ,OACiB,mBAAjBzJ,EAAI0J,UACuB,IAAlC1J,EAAI0J,SAAS,EAAG,GAAGjF,WACvB,MAAOkF,GACP,OAAO,GAfPC,GAKJze,EAAQwY,WAAaA,IAkErBpN,EAAOsT,SAAW,KAGlBtT,EAAOuT,SAAW,SAAU9J,GAE1B,OADAA,EAAIiE,UAAY1N,EAAOhJ,UAChByS,GA2BTzJ,EAAOC,KAAO,SAAU5J,EAAOuX,EAAkBlI,GAC/C,OAAOzF,EAAK,KAAM5J,EAAOuX,EAAkBlI,IAGzC1F,EAAOqN,sBACTrN,EAAOhJ,UAAU0W,UAAYD,WAAWzW,UACxCgJ,EAAO0N,UAAYD,WACG,oBAAXtX,QAA0BA,OAAOqd,SACxCxT,EAAO7J,OAAOqd,WAAaxT,GAE7BlK,OAAOC,eAAeiK,EAAQ7J,OAAOqd,QAAS,CAC5Cnd,MAAO,KACPod,cAAc,KAiCpBzT,EAAO+S,MAAQ,SAAUhM,EAAM2M,EAAMhS,GACnC,OArBF,SAAgB6L,EAAMxG,EAAM2M,EAAMhS,GAEhC,OADAoN,EAAW/H,GACPA,GAAQ,EACHuG,EAAaC,EAAMxG,QAEfnJ,IAAT8V,EAIyB,iBAAbhS,EACV4L,EAAaC,EAAMxG,GAAM2M,KAAKA,EAAMhS,GACpC4L,EAAaC,EAAMxG,GAAM2M,KAAKA,GAE7BpG,EAAaC,EAAMxG,GAQnBgM,CAAM,KAAMhM,EAAM2M,EAAMhS,IAiBjC1B,EAAO6N,YAAc,SAAU9G,GAC7B,OAAO8G,EAAY,KAAM9G,IAK3B/G,EAAO2T,gBAAkB,SAAU5M,GACjC,OAAO8G,EAAY,KAAM9G,IAiH3B/G,EAAOmK,SAAW,SAAmB7F,GACnC,QAAe,MAALA,IAAaA,EAAEsP,YAG3B5T,EAAO6T,QAAU,SAAkBxS,EAAGiD,GACpC,IAAKtE,EAAOmK,SAAS9I,KAAOrB,EAAOmK,SAAS7F,GAC1C,MAAM,IAAIwJ,UAAU,6BAGtB,GAAIzM,IAAMiD,EAAG,OAAO,EAKpB,IAHA,IAAIqD,EAAItG,EAAEqE,OACNoO,EAAIxP,EAAEoB,OAEDtQ,EAAI,EAAGqZ,EAAMuD,KAAKC,IAAItK,EAAGmM,GAAI1e,EAAIqZ,IAAOrZ,EAC/C,GAAIiM,EAAEjM,KAAOkP,EAAElP,GAAI,CACjBuS,EAAItG,EAAEjM,GACN0e,EAAIxP,EAAElP,GACN,MAIJ,OAAIuS,EAAImM,GAAW,EACfA,EAAInM,EAAU,EACX,GAGT3H,EAAOsO,WAAa,SAAqB5M,GACvC,OAAQ7E,OAAO6E,GAAUyN,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,IAIbnP,EAAOuB,OAAS,SAAiBwS,EAAMrO,GACrC,IAAK/I,EAAQoX,GACX,MAAM,IAAIjG,UAAU,+CAGtB,GAAoB,IAAhBiG,EAAKrO,OACP,OAAO1F,EAAO+S,MAAM,GAGtB,IAAI3d,EACJ,QAAewI,IAAX8H,EAEF,IADAA,EAAS,EACJtQ,EAAI,EAAGA,EAAI2e,EAAKrO,SAAUtQ,EAC7BsQ,GAAUqO,EAAK3e,GAAGsQ,OAItB,IAAI3F,EAASC,EAAO6N,YAAYnI,GAC5BsO,EAAM,EACV,IAAK5e,EAAI,EAAGA,EAAI2e,EAAKrO,SAAUtQ,EAAG,CAChC,IAAIib,EAAM0D,EAAK3e,GACf,IAAK4K,EAAOmK,SAASkG,GACnB,MAAM,IAAIvC,UAAU,+CAEtBuC,EAAI1B,KAAK5O,EAAQiU,GACjBA,GAAO3D,EAAI3K,OAEb,OAAO3F,GA8CTC,EAAOkO,WAAaA,EA0EpBlO,EAAOhJ,UAAU4c,WAAY,EAQ7B5T,EAAOhJ,UAAUid,OAAS,WACxB,IAAIxF,EAAMtS,KAAKuJ,OACf,GAAI+I,EAAM,GAAM,EACd,MAAM,IAAIjB,WAAW,6CAEvB,IAAK,IAAIpY,EAAI,EAAGA,EAAIqZ,EAAKrZ,GAAK,EAC5Bya,EAAK1T,KAAM/G,EAAGA,EAAI,GAEpB,OAAO+G,MAGT6D,EAAOhJ,UAAUkd,OAAS,WACxB,IAAIzF,EAAMtS,KAAKuJ,OACf,GAAI+I,EAAM,GAAM,EACd,MAAM,IAAIjB,WAAW,6CAEvB,IAAK,IAAIpY,EAAI,EAAGA,EAAIqZ,EAAKrZ,GAAK,EAC5Bya,EAAK1T,KAAM/G,EAAGA,EAAI,GAClBya,EAAK1T,KAAM/G,EAAI,EAAGA,EAAI,GAExB,OAAO+G,MAGT6D,EAAOhJ,UAAUmd,OAAS,WACxB,IAAI1F,EAAMtS,KAAKuJ,OACf,GAAI+I,EAAM,GAAM,EACd,MAAM,IAAIjB,WAAW,6CAEvB,IAAK,IAAIpY,EAAI,EAAGA,EAAIqZ,EAAKrZ,GAAK,EAC5Bya,EAAK1T,KAAM/G,EAAGA,EAAI,GAClBya,EAAK1T,KAAM/G,EAAI,EAAGA,EAAI,GACtBya,EAAK1T,KAAM/G,EAAI,EAAGA,EAAI,GACtBya,EAAK1T,KAAM/G,EAAI,EAAGA,EAAI,GAExB,OAAO+G,MAGT6D,EAAOhJ,UAAUoG,SAAW,WAC1B,IAAIsI,EAAuB,EAAdvJ,KAAKuJ,OAClB,OAAe,IAAXA,EAAqB,GACA,IAArB0O,UAAU1O,OAAqB8J,EAAUrT,KAAM,EAAGuJ,GAC/C0J,EAAawD,MAAMzW,KAAMiY,YAGlCpU,EAAOhJ,UAAUqd,OAAS,SAAiB/P,GACzC,IAAKtE,EAAOmK,SAAS7F,GAAI,MAAM,IAAIwJ,UAAU,6BAC7C,OAAI3R,OAASmI,GACsB,IAA5BtE,EAAO6T,QAAQ1X,KAAMmI,IAG9BtE,EAAOhJ,UAAUsd,QAAU,WACzB,IAAIlD,EAAM,GACNmD,EAAM3f,EAAQoe,kBAKlB,OAJI7W,KAAKuJ,OAAS,IAChB0L,EAAMjV,KAAKiB,SAAS,MAAO,EAAGmX,GAAKjP,MAAM,SAAS1I,KAAK,KACnDT,KAAKuJ,OAAS6O,IAAKnD,GAAO,UAEzB,WAAaA,EAAM,KAG5BpR,EAAOhJ,UAAU6c,QAAU,SAAkBW,EAAQnF,EAAOC,EAAKmF,EAAWC,GAC1E,IAAK1U,EAAOmK,SAASqK,GACnB,MAAM,IAAI1G,UAAU,6BAgBtB,QAbclQ,IAAVyR,IACFA,EAAQ,QAEEzR,IAAR0R,IACFA,EAAMkF,EAASA,EAAO9O,OAAS,QAEf9H,IAAd6W,IACFA,EAAY,QAEE7W,IAAZ8W,IACFA,EAAUvY,KAAKuJ,QAGb2J,EAAQ,GAAKC,EAAMkF,EAAO9O,QAAU+O,EAAY,GAAKC,EAAUvY,KAAKuJ,OACtE,MAAM,IAAI8H,WAAW,sBAGvB,GAAIiH,GAAaC,GAAWrF,GAASC,EACnC,OAAO,EAET,GAAImF,GAAaC,EACf,OAAQ,EAEV,GAAIrF,GAASC,EACX,OAAO,EAQT,GAAInT,OAASqY,EAAQ,OAAO,EAS5B,IAPA,IAAI7M,GAJJ+M,KAAa,IADbD,KAAe,GAMXX,GAPJxE,KAAS,IADTD,KAAW,GASPZ,EAAMuD,KAAKC,IAAItK,EAAGmM,GAElBa,EAAWxY,KAAK4H,MAAM0Q,EAAWC,GACjCE,EAAaJ,EAAOzQ,MAAMsL,EAAOC,GAE5Bla,EAAI,EAAGA,EAAIqZ,IAAOrZ,EACzB,GAAIuf,EAASvf,KAAOwf,EAAWxf,GAAI,CACjCuS,EAAIgN,EAASvf,GACb0e,EAAIc,EAAWxf,GACf,MAIJ,OAAIuS,EAAImM,GAAW,EACfA,EAAInM,EAAU,EACX,GA6HT3H,EAAOhJ,UAAUsQ,SAAW,SAAmBsH,EAAKX,EAAYvM,GAC9D,OAAoD,IAA7CvF,KAAK0H,QAAQ+K,EAAKX,EAAYvM,IAGvC1B,EAAOhJ,UAAU6M,QAAU,SAAkB+K,EAAKX,EAAYvM,GAC5D,OAAOoO,EAAqB3T,KAAMyS,EAAKX,EAAYvM,GAAU,IAG/D1B,EAAOhJ,UAAUiZ,YAAc,SAAsBrB,EAAKX,EAAYvM,GACpE,OAAOoO,EAAqB3T,KAAMyS,EAAKX,EAAYvM,GAAU,IAkD/D1B,EAAOhJ,UAAUkJ,MAAQ,SAAgBmO,EAAQsC,EAAQjL,EAAQhE,GAE/D,QAAe9D,IAAX+S,EACFjP,EAAW,OACXgE,EAASvJ,KAAKuJ,OACdiL,EAAS,OAEJ,QAAe/S,IAAX8H,GAA0C,iBAAXiL,EACxCjP,EAAWiP,EACXjL,EAASvJ,KAAKuJ,OACdiL,EAAS,MAEJ,KAAIkE,SAASlE,GAWlB,MAAM,IAAI7U,MACR,2EAXF6U,GAAkB,EACdkE,SAASnP,IACXA,GAAkB,OACD9H,IAAb8D,IAAwBA,EAAW,UAEvCA,EAAWgE,EACXA,OAAS9H,GASb,IAAIiT,EAAY1U,KAAKuJ,OAASiL,EAG9B,SAFe/S,IAAX8H,GAAwBA,EAASmL,KAAWnL,EAASmL,GAEpDxC,EAAO3I,OAAS,IAAMA,EAAS,GAAKiL,EAAS,IAAOA,EAASxU,KAAKuJ,OACrE,MAAM,IAAI8H,WAAW,0CAGlB9L,IAAUA,EAAW,QAG1B,IADA,IAAIsN,GAAc,IAEhB,OAAQtN,GACN,IAAK,MACH,OAAOgP,EAASvU,KAAMkS,EAAQsC,EAAQjL,GAExC,IAAK,OACL,IAAK,QACH,OAAOuL,EAAU9U,KAAMkS,EAAQsC,EAAQjL,GAEzC,IAAK,QACH,OAAOyL,EAAWhV,KAAMkS,EAAQsC,EAAQjL,GAE1C,IAAK,SACL,IAAK,SACH,OAAO8L,EAAYrV,KAAMkS,EAAQsC,EAAQjL,GAE3C,IAAK,SAEH,OAAO+L,EAAYtV,KAAMkS,EAAQsC,EAAQjL,GAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOgM,EAAUvV,KAAMkS,EAAQsC,EAAQjL,GAEzC,QACE,GAAIsJ,EAAa,MAAM,IAAIlB,UAAU,qBAAuBpM,GAC5DA,GAAY,GAAKA,GAAUyN,cAC3BH,GAAc,IAKtBhP,EAAOhJ,UAAUkG,OAAS,WACxB,MAAO,CACLkL,KAAM,SACNnM,KAAMS,MAAM1F,UAAU+M,MAAMxO,KAAK4G,KAAK2Y,MAAQ3Y,KAAM,KAwFxD,IAAIuW,EAAuB,KAoB3B,SAASjD,EAAYY,EAAKhB,EAAOC,GAC/B,IAAIyF,EAAM,GACVzF,EAAM0C,KAAKC,IAAI5B,EAAI3K,OAAQ4J,GAE3B,IAAK,IAAIla,EAAIia,EAAOja,EAAIka,IAAOla,EAC7B2f,GAAOlY,OAAO8V,aAAsB,IAATtC,EAAIjb,IAEjC,OAAO2f,EAGT,SAASrF,EAAaW,EAAKhB,EAAOC,GAChC,IAAIyF,EAAM,GACVzF,EAAM0C,KAAKC,IAAI5B,EAAI3K,OAAQ4J,GAE3B,IAAK,IAAIla,EAAIia,EAAOja,EAAIka,IAAOla,EAC7B2f,GAAOlY,OAAO8V,aAAatC,EAAIjb,IAEjC,OAAO2f,EAGT,SAASxF,EAAUc,EAAKhB,EAAOC,GAC7B,IAAIb,EAAM4B,EAAI3K,SAET2J,GAASA,EAAQ,KAAGA,EAAQ,KAC5BC,GAAOA,EAAM,GAAKA,EAAMb,KAAKa,EAAMb,GAGxC,IADA,IAAIuG,EAAM,GACD5f,EAAIia,EAAOja,EAAIka,IAAOla,EAC7B4f,GAAOC,EAAM5E,EAAIjb,IAEnB,OAAO4f,EAGT,SAASpF,EAAcS,EAAKhB,EAAOC,GAGjC,IAFA,IAAI4F,EAAQ7E,EAAItM,MAAMsL,EAAOC,GACzBpO,EAAM,GACD9L,EAAI,EAAGA,EAAI8f,EAAMxP,OAAQtQ,GAAK,EACrC8L,GAAOrE,OAAO8V,aAAauC,EAAM9f,GAAoB,IAAf8f,EAAM9f,EAAI,IAElD,OAAO8L,EA0CT,SAASiU,EAAaxE,EAAQyE,EAAK1P,GACjC,GAAKiL,EAAS,GAAO,GAAKA,EAAS,EAAG,MAAM,IAAInD,WAAW,sBAC3D,GAAImD,EAASyE,EAAM1P,EAAQ,MAAM,IAAI8H,WAAW,yCA+JlD,SAAS6H,EAAUhF,EAAKha,EAAOsa,EAAQyE,EAAKb,EAAKtC,GAC/C,IAAKjS,EAAOmK,SAASkG,GAAM,MAAM,IAAIvC,UAAU,+CAC/C,GAAIzX,EAAQke,GAAOle,EAAQ4b,EAAK,MAAM,IAAIzE,WAAW,qCACrD,GAAImD,EAASyE,EAAM/E,EAAI3K,OAAQ,MAAM,IAAI8H,WAAW,sBAkDtD,SAAS8H,EAAmBjF,EAAKha,EAAOsa,EAAQ4E,GAC1Clf,EAAQ,IAAGA,EAAQ,MAASA,EAAQ,GACxC,IAAK,IAAIjB,EAAI,EAAGqb,EAAIuB,KAAKC,IAAI5B,EAAI3K,OAASiL,EAAQ,GAAIvb,EAAIqb,IAAKrb,EAC7Dib,EAAIM,EAASvb,IAAMiB,EAAS,KAAS,GAAKkf,EAAengB,EAAI,EAAIA,MAClC,GAA5BmgB,EAAengB,EAAI,EAAIA,GA8B9B,SAASogB,EAAmBnF,EAAKha,EAAOsa,EAAQ4E,GAC1Clf,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C,IAAK,IAAIjB,EAAI,EAAGqb,EAAIuB,KAAKC,IAAI5B,EAAI3K,OAASiL,EAAQ,GAAIvb,EAAIqb,IAAKrb,EAC7Dib,EAAIM,EAASvb,GAAMiB,IAAuC,GAA5Bkf,EAAengB,EAAI,EAAIA,GAAU,IAmJnE,SAASqgB,EAAcpF,EAAKha,EAAOsa,EAAQyE,EAAKb,EAAKtC,GACnD,GAAItB,EAASyE,EAAM/E,EAAI3K,OAAQ,MAAM,IAAI8H,WAAW,sBACpD,GAAImD,EAAS,EAAG,MAAM,IAAInD,WAAW,sBAGvC,SAASkI,EAAYrF,EAAKha,EAAOsa,EAAQ4E,EAAcI,GAKrD,OAJKA,GACHF,EAAapF,EAAKha,EAAOsa,EAAQ,GAEnCxD,EAAQjN,MAAMmQ,EAAKha,EAAOsa,EAAQ4E,EAAc,GAAI,GAC7C5E,EAAS,EAWlB,SAASiF,EAAavF,EAAKha,EAAOsa,EAAQ4E,EAAcI,GAKtD,OAJKA,GACHF,EAAapF,EAAKha,EAAOsa,EAAQ,GAEnCxD,EAAQjN,MAAMmQ,EAAKha,EAAOsa,EAAQ4E,EAAc,GAAI,GAC7C5E,EAAS,EA/clB3Q,EAAOhJ,UAAU+M,MAAQ,SAAgBsL,EAAOC,GAC9C,IAoBIuG,EApBApH,EAAMtS,KAAKuJ,OAqBf,IApBA2J,IAAUA,GAGE,GACVA,GAASZ,GACG,IAAGY,EAAQ,GACdA,EAAQZ,IACjBY,EAAQZ,IANVa,OAAc1R,IAAR0R,EAAoBb,IAAQa,GASxB,GACRA,GAAOb,GACG,IAAGa,EAAM,GACVA,EAAMb,IACfa,EAAMb,GAGJa,EAAMD,IAAOC,EAAMD,GAGnBrP,EAAOqN,qBACTwI,EAAS1Z,KAAKgX,SAAS9D,EAAOC,IACvB5B,UAAY1N,EAAOhJ,cACrB,CACL,IAAI8e,EAAWxG,EAAMD,EACrBwG,EAAS,IAAI7V,EAAO8V,OAAUlY,GAC9B,IAAK,IAAIxI,EAAI,EAAGA,EAAI0gB,IAAY1gB,EAC9BygB,EAAOzgB,GAAK+G,KAAK/G,EAAIia,GAIzB,OAAOwG,GAWT7V,EAAOhJ,UAAU+e,WAAa,SAAqBpF,EAAQzC,EAAYyH,GACrEhF,GAAkB,EAClBzC,GAA0B,EACrByH,GAAUR,EAAYxE,EAAQzC,EAAY/R,KAAKuJ,QAKpD,IAHA,IAAIkJ,EAAMzS,KAAKwU,GACXqF,EAAM,EACN5gB,EAAI,IACCA,EAAI8Y,IAAe8H,GAAO,MACjCpH,GAAOzS,KAAKwU,EAASvb,GAAK4gB,EAG5B,OAAOpH,GAGT5O,EAAOhJ,UAAUif,WAAa,SAAqBtF,EAAQzC,EAAYyH,GACrEhF,GAAkB,EAClBzC,GAA0B,EACrByH,GACHR,EAAYxE,EAAQzC,EAAY/R,KAAKuJ,QAKvC,IAFA,IAAIkJ,EAAMzS,KAAKwU,IAAWzC,GACtB8H,EAAM,EACH9H,EAAa,IAAM8H,GAAO,MAC/BpH,GAAOzS,KAAKwU,IAAWzC,GAAc8H,EAGvC,OAAOpH,GAGT5O,EAAOhJ,UAAUkf,UAAY,SAAoBvF,EAAQgF,GAEvD,OADKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QACpCvJ,KAAKwU,IAGd3Q,EAAOhJ,UAAUmf,aAAe,SAAuBxF,EAAQgF,GAE7D,OADKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QACpCvJ,KAAKwU,GAAWxU,KAAKwU,EAAS,IAAM,GAG7C3Q,EAAOhJ,UAAUsZ,aAAe,SAAuBK,EAAQgF,GAE7D,OADKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QACnCvJ,KAAKwU,IAAW,EAAKxU,KAAKwU,EAAS,IAG7C3Q,EAAOhJ,UAAUof,aAAe,SAAuBzF,EAAQgF,GAG7D,OAFKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,SAElCvJ,KAAKwU,GACTxU,KAAKwU,EAAS,IAAM,EACpBxU,KAAKwU,EAAS,IAAM,IACD,SAAnBxU,KAAKwU,EAAS,IAGrB3Q,EAAOhJ,UAAUqf,aAAe,SAAuB1F,EAAQgF,GAG7D,OAFKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QAEpB,SAAfvJ,KAAKwU,IACTxU,KAAKwU,EAAS,IAAM,GACrBxU,KAAKwU,EAAS,IAAM,EACrBxU,KAAKwU,EAAS,KAGlB3Q,EAAOhJ,UAAUsf,UAAY,SAAoB3F,EAAQzC,EAAYyH,GACnEhF,GAAkB,EAClBzC,GAA0B,EACrByH,GAAUR,EAAYxE,EAAQzC,EAAY/R,KAAKuJ,QAKpD,IAHA,IAAIkJ,EAAMzS,KAAKwU,GACXqF,EAAM,EACN5gB,EAAI,IACCA,EAAI8Y,IAAe8H,GAAO,MACjCpH,GAAOzS,KAAKwU,EAASvb,GAAK4gB,EAM5B,OAFIpH,IAFJoH,GAAO,OAESpH,GAAOoD,KAAKuE,IAAI,EAAG,EAAIrI,IAEhCU,GAGT5O,EAAOhJ,UAAUwf,UAAY,SAAoB7F,EAAQzC,EAAYyH,GACnEhF,GAAkB,EAClBzC,GAA0B,EACrByH,GAAUR,EAAYxE,EAAQzC,EAAY/R,KAAKuJ,QAKpD,IAHA,IAAItQ,EAAI8Y,EACJ8H,EAAM,EACNpH,EAAMzS,KAAKwU,IAAWvb,GACnBA,EAAI,IAAM4gB,GAAO,MACtBpH,GAAOzS,KAAKwU,IAAWvb,GAAK4gB,EAM9B,OAFIpH,IAFJoH,GAAO,OAESpH,GAAOoD,KAAKuE,IAAI,EAAG,EAAIrI,IAEhCU,GAGT5O,EAAOhJ,UAAUyf,SAAW,SAAmB9F,EAAQgF,GAErD,OADKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QACtB,IAAfvJ,KAAKwU,IAC0B,GAA5B,IAAOxU,KAAKwU,GAAU,GADKxU,KAAKwU,IAI3C3Q,EAAOhJ,UAAU0f,YAAc,SAAsB/F,EAAQgF,GACtDA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QAC3C,IAAIkJ,EAAMzS,KAAKwU,GAAWxU,KAAKwU,EAAS,IAAM,EAC9C,OAAc,MAAN/B,EAAsB,WAANA,EAAmBA,GAG7C5O,EAAOhJ,UAAU2f,YAAc,SAAsBhG,EAAQgF,GACtDA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QAC3C,IAAIkJ,EAAMzS,KAAKwU,EAAS,GAAMxU,KAAKwU,IAAW,EAC9C,OAAc,MAAN/B,EAAsB,WAANA,EAAmBA,GAG7C5O,EAAOhJ,UAAU4f,YAAc,SAAsBjG,EAAQgF,GAG3D,OAFKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QAEnCvJ,KAAKwU,GACVxU,KAAKwU,EAAS,IAAM,EACpBxU,KAAKwU,EAAS,IAAM,GACpBxU,KAAKwU,EAAS,IAAM,IAGzB3Q,EAAOhJ,UAAU6f,YAAc,SAAsBlG,EAAQgF,GAG3D,OAFKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QAEnCvJ,KAAKwU,IAAW,GACrBxU,KAAKwU,EAAS,IAAM,GACpBxU,KAAKwU,EAAS,IAAM,EACpBxU,KAAKwU,EAAS,IAGnB3Q,EAAOhJ,UAAU8f,YAAc,SAAsBnG,EAAQgF,GAE3D,OADKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QACpCyH,EAAQrN,KAAK3D,KAAMwU,GAAQ,EAAM,GAAI,IAG9C3Q,EAAOhJ,UAAU+f,YAAc,SAAsBpG,EAAQgF,GAE3D,OADKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QACpCyH,EAAQrN,KAAK3D,KAAMwU,GAAQ,EAAO,GAAI,IAG/C3Q,EAAOhJ,UAAUggB,aAAe,SAAuBrG,EAAQgF,GAE7D,OADKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QACpCyH,EAAQrN,KAAK3D,KAAMwU,GAAQ,EAAM,GAAI,IAG9C3Q,EAAOhJ,UAAUigB,aAAe,SAAuBtG,EAAQgF,GAE7D,OADKA,GAAUR,EAAYxE,EAAQ,EAAGxU,KAAKuJ,QACpCyH,EAAQrN,KAAK3D,KAAMwU,GAAQ,EAAO,GAAI,IAS/C3Q,EAAOhJ,UAAUkgB,YAAc,SAAsB7gB,EAAOsa,EAAQzC,EAAYyH,IAC9Etf,GAASA,EACTsa,GAAkB,EAClBzC,GAA0B,EACrByH,IAEHN,EAASlZ,KAAM9F,EAAOsa,EAAQzC,EADf8D,KAAKuE,IAAI,EAAG,EAAIrI,GAAc,EACO,GAGtD,IAAI8H,EAAM,EACN5gB,EAAI,EAER,IADA+G,KAAKwU,GAAkB,IAARta,IACNjB,EAAI8Y,IAAe8H,GAAO,MACjC7Z,KAAKwU,EAASvb,GAAMiB,EAAQ2f,EAAO,IAGrC,OAAOrF,EAASzC,GAGlBlO,EAAOhJ,UAAUmgB,YAAc,SAAsB9gB,EAAOsa,EAAQzC,EAAYyH,IAC9Etf,GAASA,EACTsa,GAAkB,EAClBzC,GAA0B,EACrByH,IAEHN,EAASlZ,KAAM9F,EAAOsa,EAAQzC,EADf8D,KAAKuE,IAAI,EAAG,EAAIrI,GAAc,EACO,GAGtD,IAAI9Y,EAAI8Y,EAAa,EACjB8H,EAAM,EAEV,IADA7Z,KAAKwU,EAASvb,GAAa,IAARiB,IACVjB,GAAK,IAAM4gB,GAAO,MACzB7Z,KAAKwU,EAASvb,GAAMiB,EAAQ2f,EAAO,IAGrC,OAAOrF,EAASzC,GAGlBlO,EAAOhJ,UAAUogB,WAAa,SAAqB/gB,EAAOsa,EAAQgF,GAMhE,OALAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,IAAM,GACjD3Q,EAAOqN,sBAAqBhX,EAAQ2b,KAAKqF,MAAMhhB,IACpD8F,KAAKwU,GAAmB,IAARta,EACTsa,EAAS,GAWlB3Q,EAAOhJ,UAAUsgB,cAAgB,SAAwBjhB,EAAOsa,EAAQgF,GAUtE,OATAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,MAAQ,GACpD3Q,EAAOqN,qBACTlR,KAAKwU,GAAmB,IAARta,EAChB8F,KAAKwU,EAAS,GAAMta,IAAU,GAE9Bif,EAAkBnZ,KAAM9F,EAAOsa,GAAQ,GAElCA,EAAS,GAGlB3Q,EAAOhJ,UAAUugB,cAAgB,SAAwBlhB,EAAOsa,EAAQgF,GAUtE,OATAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,MAAQ,GACpD3Q,EAAOqN,qBACTlR,KAAKwU,GAAWta,IAAU,EAC1B8F,KAAKwU,EAAS,GAAc,IAARta,GAEpBif,EAAkBnZ,KAAM9F,EAAOsa,GAAQ,GAElCA,EAAS,GAUlB3Q,EAAOhJ,UAAUwgB,cAAgB,SAAwBnhB,EAAOsa,EAAQgF,GAYtE,OAXAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,WAAY,GACxD3Q,EAAOqN,qBACTlR,KAAKwU,EAAS,GAAMta,IAAU,GAC9B8F,KAAKwU,EAAS,GAAMta,IAAU,GAC9B8F,KAAKwU,EAAS,GAAMta,IAAU,EAC9B8F,KAAKwU,GAAmB,IAARta,GAEhBmf,EAAkBrZ,KAAM9F,EAAOsa,GAAQ,GAElCA,EAAS,GAGlB3Q,EAAOhJ,UAAUygB,cAAgB,SAAwBphB,EAAOsa,EAAQgF,GAYtE,OAXAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,WAAY,GACxD3Q,EAAOqN,qBACTlR,KAAKwU,GAAWta,IAAU,GAC1B8F,KAAKwU,EAAS,GAAMta,IAAU,GAC9B8F,KAAKwU,EAAS,GAAMta,IAAU,EAC9B8F,KAAKwU,EAAS,GAAc,IAARta,GAEpBmf,EAAkBrZ,KAAM9F,EAAOsa,GAAQ,GAElCA,EAAS,GAGlB3Q,EAAOhJ,UAAU0gB,WAAa,SAAqBrhB,EAAOsa,EAAQzC,EAAYyH,GAG5E,GAFAtf,GAASA,EACTsa,GAAkB,GACbgF,EAAU,CACb,IAAIgC,EAAQ3F,KAAKuE,IAAI,EAAG,EAAIrI,EAAa,GAEzCmH,EAASlZ,KAAM9F,EAAOsa,EAAQzC,EAAYyJ,EAAQ,GAAIA,GAGxD,IAAIviB,EAAI,EACJ4gB,EAAM,EACN4B,EAAM,EAEV,IADAzb,KAAKwU,GAAkB,IAARta,IACNjB,EAAI8Y,IAAe8H,GAAO,MAC7B3f,EAAQ,GAAa,IAARuhB,GAAsC,IAAzBzb,KAAKwU,EAASvb,EAAI,KAC9CwiB,EAAM,GAERzb,KAAKwU,EAASvb,IAAOiB,EAAQ2f,GAAQ,GAAK4B,EAAM,IAGlD,OAAOjH,EAASzC,GAGlBlO,EAAOhJ,UAAU6gB,WAAa,SAAqBxhB,EAAOsa,EAAQzC,EAAYyH,GAG5E,GAFAtf,GAASA,EACTsa,GAAkB,GACbgF,EAAU,CACb,IAAIgC,EAAQ3F,KAAKuE,IAAI,EAAG,EAAIrI,EAAa,GAEzCmH,EAASlZ,KAAM9F,EAAOsa,EAAQzC,EAAYyJ,EAAQ,GAAIA,GAGxD,IAAIviB,EAAI8Y,EAAa,EACjB8H,EAAM,EACN4B,EAAM,EAEV,IADAzb,KAAKwU,EAASvb,GAAa,IAARiB,IACVjB,GAAK,IAAM4gB,GAAO,MACrB3f,EAAQ,GAAa,IAARuhB,GAAsC,IAAzBzb,KAAKwU,EAASvb,EAAI,KAC9CwiB,EAAM,GAERzb,KAAKwU,EAASvb,IAAOiB,EAAQ2f,GAAQ,GAAK4B,EAAM,IAGlD,OAAOjH,EAASzC,GAGlBlO,EAAOhJ,UAAU8gB,UAAY,SAAoBzhB,EAAOsa,EAAQgF,GAO9D,OANAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,KAAO,KAClD3Q,EAAOqN,sBAAqBhX,EAAQ2b,KAAKqF,MAAMhhB,IAChDA,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtC8F,KAAKwU,GAAmB,IAARta,EACTsa,EAAS,GAGlB3Q,EAAOhJ,UAAU+gB,aAAe,SAAuB1hB,EAAOsa,EAAQgF,GAUpE,OATAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,OAAS,OACrD3Q,EAAOqN,qBACTlR,KAAKwU,GAAmB,IAARta,EAChB8F,KAAKwU,EAAS,GAAMta,IAAU,GAE9Bif,EAAkBnZ,KAAM9F,EAAOsa,GAAQ,GAElCA,EAAS,GAGlB3Q,EAAOhJ,UAAUghB,aAAe,SAAuB3hB,EAAOsa,EAAQgF,GAUpE,OATAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,OAAS,OACrD3Q,EAAOqN,qBACTlR,KAAKwU,GAAWta,IAAU,EAC1B8F,KAAKwU,EAAS,GAAc,IAARta,GAEpBif,EAAkBnZ,KAAM9F,EAAOsa,GAAQ,GAElCA,EAAS,GAGlB3Q,EAAOhJ,UAAUihB,aAAe,SAAuB5hB,EAAOsa,EAAQgF,GAYpE,OAXAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,YAAa,YACzD3Q,EAAOqN,qBACTlR,KAAKwU,GAAmB,IAARta,EAChB8F,KAAKwU,EAAS,GAAMta,IAAU,EAC9B8F,KAAKwU,EAAS,GAAMta,IAAU,GAC9B8F,KAAKwU,EAAS,GAAMta,IAAU,IAE9Bmf,EAAkBrZ,KAAM9F,EAAOsa,GAAQ,GAElCA,EAAS,GAGlB3Q,EAAOhJ,UAAUkhB,aAAe,SAAuB7hB,EAAOsa,EAAQgF,GAapE,OAZAtf,GAASA,EACTsa,GAAkB,EACbgF,GAAUN,EAASlZ,KAAM9F,EAAOsa,EAAQ,EAAG,YAAa,YACzDta,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GACxC2J,EAAOqN,qBACTlR,KAAKwU,GAAWta,IAAU,GAC1B8F,KAAKwU,EAAS,GAAMta,IAAU,GAC9B8F,KAAKwU,EAAS,GAAMta,IAAU,EAC9B8F,KAAKwU,EAAS,GAAc,IAARta,GAEpBmf,EAAkBrZ,KAAM9F,EAAOsa,GAAQ,GAElCA,EAAS,GAgBlB3Q,EAAOhJ,UAAUmhB,aAAe,SAAuB9hB,EAAOsa,EAAQgF,GACpE,OAAOD,EAAWvZ,KAAM9F,EAAOsa,GAAQ,EAAMgF,IAG/C3V,EAAOhJ,UAAUohB,aAAe,SAAuB/hB,EAAOsa,EAAQgF,GACpE,OAAOD,EAAWvZ,KAAM9F,EAAOsa,GAAQ,EAAOgF,IAWhD3V,EAAOhJ,UAAUqhB,cAAgB,SAAwBhiB,EAAOsa,EAAQgF,GACtE,OAAOC,EAAYzZ,KAAM9F,EAAOsa,GAAQ,EAAMgF,IAGhD3V,EAAOhJ,UAAUshB,cAAgB,SAAwBjiB,EAAOsa,EAAQgF,GACtE,OAAOC,EAAYzZ,KAAM9F,EAAOsa,GAAQ,EAAOgF,IAIjD3V,EAAOhJ,UAAU2X,KAAO,SAAe6F,EAAQ+D,EAAalJ,EAAOC,GAQjE,GAPKD,IAAOA,EAAQ,GACfC,GAAe,IAARA,IAAWA,EAAMnT,KAAKuJ,QAC9B6S,GAAe/D,EAAO9O,SAAQ6S,EAAc/D,EAAO9O,QAClD6S,IAAaA,EAAc,GAC5BjJ,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAG9BC,IAAQD,EAAO,OAAO,EAC1B,GAAsB,IAAlBmF,EAAO9O,QAAgC,IAAhBvJ,KAAKuJ,OAAc,OAAO,EAGrD,GAAI6S,EAAc,EAChB,MAAM,IAAI/K,WAAW,6BAEvB,GAAI6B,EAAQ,GAAKA,GAASlT,KAAKuJ,OAAQ,MAAM,IAAI8H,WAAW,6BAC5D,GAAI8B,EAAM,EAAG,MAAM,IAAI9B,WAAW,2BAG9B8B,EAAMnT,KAAKuJ,SAAQ4J,EAAMnT,KAAKuJ,QAC9B8O,EAAO9O,OAAS6S,EAAcjJ,EAAMD,IACtCC,EAAMkF,EAAO9O,OAAS6S,EAAclJ,GAGtC,IACIja,EADAqZ,EAAMa,EAAMD,EAGhB,GAAIlT,OAASqY,GAAUnF,EAAQkJ,GAAeA,EAAcjJ,EAE1D,IAAKla,EAAIqZ,EAAM,EAAGrZ,GAAK,IAAKA,EAC1Bof,EAAOpf,EAAImjB,GAAepc,KAAK/G,EAAIia,QAEhC,GAAIZ,EAAM,MAASzO,EAAOqN,oBAE/B,IAAKjY,EAAI,EAAGA,EAAIqZ,IAAOrZ,EACrBof,EAAOpf,EAAImjB,GAAepc,KAAK/G,EAAIia,QAGrC5B,WAAWzW,UAAUuI,IAAIhK,KACvBif,EACArY,KAAKgX,SAAS9D,EAAOA,EAAQZ,GAC7B8J,GAIJ,OAAO9J,GAOTzO,EAAOhJ,UAAU0c,KAAO,SAAe9E,EAAKS,EAAOC,EAAK5N,GAEtD,GAAmB,iBAARkN,EAAkB,CAS3B,GARqB,iBAAVS,GACT3N,EAAW2N,EACXA,EAAQ,EACRC,EAAMnT,KAAKuJ,QACa,iBAAR4J,IAChB5N,EAAW4N,EACXA,EAAMnT,KAAKuJ,QAEM,IAAfkJ,EAAIlJ,OAAc,CACpB,IAAI1J,EAAO4S,EAAI0C,WAAW,GACtBtV,EAAO,MACT4S,EAAM5S,GAGV,QAAiB4B,IAAb8D,GAA8C,iBAAbA,EACnC,MAAM,IAAIoM,UAAU,6BAEtB,GAAwB,iBAAbpM,IAA0B1B,EAAOsO,WAAW5M,GACrD,MAAM,IAAIoM,UAAU,qBAAuBpM,OAErB,iBAARkN,IAChBA,GAAY,KAId,GAAIS,EAAQ,GAAKlT,KAAKuJ,OAAS2J,GAASlT,KAAKuJ,OAAS4J,EACpD,MAAM,IAAI9B,WAAW,sBAGvB,GAAI8B,GAAOD,EACT,OAAOlT,KAQT,IAAI/G,EACJ,GANAia,KAAkB,EAClBC,OAAc1R,IAAR0R,EAAoBnT,KAAKuJ,OAAS4J,IAAQ,EAE3CV,IAAKA,EAAM,GAGG,iBAARA,EACT,IAAKxZ,EAAIia,EAAOja,EAAIka,IAAOla,EACzB+G,KAAK/G,GAAKwZ,MAEP,CACL,IAAIsG,EAAQlV,EAAOmK,SAASyE,GACxBA,EACAK,EAAY,IAAIjP,EAAO4O,EAAKlN,GAAUtE,YACtCqR,EAAMyG,EAAMxP,OAChB,IAAKtQ,EAAI,EAAGA,EAAIka,EAAMD,IAASja,EAC7B+G,KAAK/G,EAAIia,GAAS6F,EAAM9f,EAAIqZ,GAIhC,OAAOtS,MAMT,IAAIqc,EAAoB,qBAmBxB,SAASvD,EAAOpe,GACd,OAAIA,EAAI,GAAW,IAAMA,EAAEuG,SAAS,IAC7BvG,EAAEuG,SAAS,IAGpB,SAAS6R,EAAaZ,EAAQsD,GAE5B,IAAIY,EADJZ,EAAQA,GAAS8G,IAMjB,IAJA,IAAI/S,EAAS2I,EAAO3I,OAChBgT,EAAgB,KAChBxD,EAAQ,GAEH9f,EAAI,EAAGA,EAAIsQ,IAAUtQ,EAAG,CAI/B,IAHAmd,EAAYlE,EAAOiD,WAAWlc,IAGd,OAAUmd,EAAY,MAAQ,CAE5C,IAAKmG,EAAe,CAElB,GAAInG,EAAY,MAAQ,EAEjBZ,GAAS,IAAM,GAAGuD,EAAMtO,KAAK,IAAM,IAAM,KAC9C,SACK,GAAIxR,EAAI,IAAMsQ,EAAQ,EAEtBiM,GAAS,IAAM,GAAGuD,EAAMtO,KAAK,IAAM,IAAM,KAC9C,SAIF8R,EAAgBnG,EAEhB,SAIF,GAAIA,EAAY,MAAQ,EACjBZ,GAAS,IAAM,GAAGuD,EAAMtO,KAAK,IAAM,IAAM,KAC9C8R,EAAgBnG,EAChB,SAIFA,EAAkE,OAArDmG,EAAgB,OAAU,GAAKnG,EAAY,YAC/CmG,IAEJ/G,GAAS,IAAM,GAAGuD,EAAMtO,KAAK,IAAM,IAAM,KAMhD,GAHA8R,EAAgB,KAGZnG,EAAY,IAAM,CACpB,IAAKZ,GAAS,GAAK,EAAG,MACtBuD,EAAMtO,KAAK2L,QACN,GAAIA,EAAY,KAAO,CAC5B,IAAKZ,GAAS,GAAK,EAAG,MACtBuD,EAAMtO,KACJ2L,GAAa,EAAM,IACP,GAAZA,EAAmB,UAEhB,GAAIA,EAAY,MAAS,CAC9B,IAAKZ,GAAS,GAAK,EAAG,MACtBuD,EAAMtO,KACJ2L,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,MAAIA,EAAY,SASrB,MAAM,IAAIzW,MAAM,sBARhB,IAAK6V,GAAS,GAAK,EAAG,MACtBuD,EAAMtO,KACJ2L,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,OAAO2C,EA4BT,SAAShG,EAAekC,GACtB,OAAOlE,EAAOyL,YAhIhB,SAAsBvH,GAIpB,IAFAA,EAUF,SAAqBA,GACnB,OAAIA,EAAI5N,KAAa4N,EAAI5N,OAClB4N,EAAItU,QAAQ,aAAc,IAZ3B8b,CAAWxH,GAAKtU,QAAQ0b,EAAmB,KAEzC9S,OAAS,EAAG,MAAO,GAE3B,KAAO0L,EAAI1L,OAAS,GAAM,GACxB0L,GAAY,IAEd,OAAOA,EAuHmByH,CAAYzH,IAGxC,SAASF,EAAY4H,EAAKC,EAAKpI,EAAQjL,GACrC,IAAK,IAAItQ,EAAI,EAAGA,EAAIsQ,KACbtQ,EAAIub,GAAUoI,EAAIrT,QAAYtQ,GAAK0jB,EAAIpT,UADhBtQ,EAE5B2jB,EAAI3jB,EAAIub,GAAUmI,EAAI1jB,GAExB,OAAOA,K,gDCvvDT,+DAYA,SAAS4jB,EAAWziB,GAElB,OAAQA,GACN,IAAK,SAAU,MAAO,OACtB,IAAK,SACL,IAAK,SACL,IAAK,SAAU,MAAO,OACtB,IAAK,SAAU,MAAO,SAExB,MAAM,IAAIsF,IAASD,IAAExB,aAAc,CACjCgC,0CAA2C7F,MA8C/C,SAAS0iB,EAAgB7U,GAQvB,OAPKA,EAAMF,KAAOE,EAAM6C,MACtB7C,EAAMF,IAAME,EAAM6C,KAEpB7C,EAAM7N,KAnBR,SAA6BA,GAK3B,GAJoB,iBAATA,IACTA,EAAOA,EAAK6G,SAAS,IAGnB7G,EAAK+O,MAAM,UAAW,MAAO,SACjC,GAAI/O,EAAK+O,MAAM,WAAY,MAAO,SAClC,GAAI/O,EAAK+O,MAAM,WAAY,MAAO,SAClC,GAAI/O,EAAK+O,MAAM,UAAW,MAAO,SACjC,GAAI/O,EAAK+O,MAAM,UAAW,MAAO,SACjC,MAAM,IAAIzJ,IAASD,IAAExB,aAAc,CACjCgC,2CAA4C7F,MAQjC2iB,CAAmB9U,EAAM7N,MACjC6N,EAAMgE,OACThE,EAAMgE,KAAO,QAERhE,EAGF,MAAM+U,EAIXpd,YAAagN,GACX,GAAI/I,EAAOmK,SAASpB,GAClB5M,KAAKid,SA3DX,SAAsBrZ,GACpB,MAAMqZ,EAAW,GACjB,IAAIC,EAAS,EACb,KAAOA,EAAStZ,EAAO2F,QAAQ,CAC7B,MAAM4T,EAAQvZ,EAAO8D,QAAQ,GAAIwV,GACjC,IAAe,IAAXC,EACF,MAAM,IAAIzd,IAASD,IAAExB,aAAc,CACjCgC,0DAA2Did,gDAG/D,MAAME,EAAWxZ,EAAO8D,QAAQ,EAAGwV,GACnC,IAAkB,IAAdE,EACF,MAAM,IAAI1d,IAASD,IAAExB,aAAc,CACjCgC,0DAA2Did,+CAG/D,IAAI9iB,EAAOwJ,EAAOgE,MAAMsV,EAAQC,GAAOlc,SAAS,QACnC,UAAT7G,IAAkBA,EAAO,UAC7B,MAAM6R,EAAO4Q,EAAUziB,GACjB8L,EAAOtC,EAAOgE,MAAMuV,EAAQ,EAAGC,GAAUnc,SAAS,QAClD8G,EAAMnE,EAAOgE,MAAMwV,EAAW,EAAGA,EAAW,IAAInc,SAAS,OAC/Dic,EAASE,EAAW,GACpBH,EAASxS,KAAK,CAAErQ,OAAM8L,OAAM6B,MAAKkE,SAEnC,OAAOgR,EAmCaI,CAAYzQ,OACvB,KAAIrM,MAAMC,QAAQoM,GAGvB,MAAM,IAAIlN,IAASD,IAAExB,aAAc,CACjCgC,QAAS,+CAHXD,KAAKid,SAAWrQ,EAAQ/H,IAAIiY,GAQ9B9c,KAAKid,SAAS3Y,KAAKgZ,KAGrB,YAAanO,GACX,OAAO,IAAI6N,EAAQ7N,GAGrBlB,SACE,OAAOjO,KAAKid,SACTpY,IAAIoD,MAAYA,EAAM7N,QAAQ6N,EAAMgE,QAAQhE,EAAMF,UAAUE,EAAM/B,QAClEzF,KAAK,MAGVgO,WACE,OAAO5K,EAAOuB,OACZpF,KAAKid,SAASpY,IAAIoD,IAChB,MAAM7N,EAAOyJ,EAAOC,KAAKmE,EAAM7N,KAAKuG,QAAQ,KAAM,KAC5Cwc,EAAQtZ,EAAOC,KAAK,KACpBoC,EAAOrC,EAAOC,KAAKmE,EAAM/B,KAAM,QAC/BkX,EAAWvZ,EAAOC,KAAK,CAAC,IACxBiE,EAAMlE,EAAOC,KAAKmE,EAAMF,IAAK,OACnC,OAAOlE,EAAOuB,OAAO,CAAChL,EAAM+iB,EAAOjX,EAAMkX,EAAUrV,OAKzD6E,UACE,OAAO5M,KAAKid,SAGd,EAAGjjB,OAAOujB,YACR,IAAK,MAAMtV,KAASjI,KAAKid,eACjBhV,M,qaC1HZ,IAAIuV,EAAqB,KAElB,SAAexR,EAAtB,kC,wBAAO,UAAuBpI,GAI5B,OAH2B,OAAvB4Z,IACFA,Q,0CAA2BC,IAEtBD,EAAqBE,EAAW9Z,GAMzC,SAAqBA,GACnB,OAAO,IAAI+Z,KAAOC,OAAOha,GAAQia,OAAO,OAPSC,CAAWla,M,+BAU/C8Z,E,0DAAf,UAA2B9Z,GAEzB,OCvBK,SAAgBA,GACrB,IAAIma,EAAM,GACV,IAAK,MAAMC,KAAQ,IAAI1M,WAAW1N,GAC5Boa,EAAO,KAAID,GAAO,KACtBA,GAAOC,EAAK/c,SAAS,IAEvB,OAAO8c,EDiBAjF,OADYmF,OAAOC,OAAOL,OAAO,QAASja,O,8CAInD,YAGE,IAEE,GAAa,oDADM8Z,EAAW,IAAIpM,WAAW,MACY,OAAO,EAChE,MAAOf,IAGT,OAAO,K,yFEnCT,MAAM4N,EAAU,CAAC9d,EAAMwE,KACrB,IAAK,MAAMrK,KAAO6F,EACXwE,EAAIlD,IAAInH,IAAMqK,EAAIzB,IAAI5I,EAAK,IAAI4G,KACpCyD,EAAMA,EAAI/K,IAAIU,GAEhB,OAAOqK,GAGF,MAAMuZ,EACXxe,cACEI,KAAKqe,MAAQ,IAAIjd,IAGnBgC,IAAK/C,EAAMnG,GACT,MAAMokB,EAAUje,EAAKke,MACLJ,EAAQ9d,EAAML,KAAKqe,OAC3Bjb,IAAIkb,EAASpkB,GAGvBJ,IAAKuG,GACH,MAAMie,EAAUje,EAAKke,MAErB,OADgBJ,EAAQ9d,EAAML,KAAKqe,OACpBvkB,IAAIwkB,GAGrB3c,IAAKtB,GACH,MAAMie,EAAUje,EAAKke,MAErB,OADgBJ,EAAQ9d,EAAML,KAAKqe,OACpB1c,IAAI2c,I,sWCjBvB,MAAMzZ,EAAM,IAAIuZ,EACVI,EAAQ,IAAIJ,EAElB,IAAI3Y,EAAO,K,wBAEX,UAAsCjE,EAAI8B,GACxC,MAAMZ,QAAalB,EAAGoB,MAAMU,GACtBmb,QAAqBjd,EAAGmC,KAAKL,GAC7Bob,QAAcC,IAAS7a,KAAK2a,GAGlC5Z,EAAIzB,IAAI,CAAC5B,EAAI8B,GAAWob,GAGxBF,EAAMpb,IAAI,CAAC5B,EAAI8B,GAAWZ,M,8CAI5B,UAA6BlB,EAAI8B,GAC/B,MAAMsb,EAAaJ,EAAM1kB,IAAI,CAAC0H,EAAI8B,IAClC,QAAmB7B,IAAfmd,EAA0B,OAAO,EACrC,MAAMC,QAAkBrd,EAAGoB,MAAMU,GACjC,OAAmB,OAAfsb,IACc,OAAdC,GACGC,YAAaF,EAAYC,O,sBAG3B,MAAME,EAMX,gBAAwBvd,GAAImH,EAAN,OAAWC,GAAUoW,GAAS,qBAClD,MAAMxd,EAAK,IAAID,IAAWoH,GACpBrF,KAAcsF,UAEpB,IAAIxI,EAqBJ,OAtBa,OAATqF,IAAeA,EAAO,IAAIwZ,IAAU,CAAEC,WAAY5C,aAEhD7W,EAAK0Z,QAAQ7b,EAAb,EAAuB,mB,6CAKjB8b,CAAa5d,EAAI8B,Y,6CACnB+b,CAAsB7d,EAAI8B,IAElC,MAAMob,EAAQ7Z,EAAI/K,IAAI,CAAC0H,EAAI8B,IAE3B,GADAlD,QAAe4e,EAAQN,GACnBA,EAAMY,OAAQ,CAGhB,MAAM1b,QAAe8a,EAAMjQ,iBACrBjN,EAAGuC,MAAMT,EAAUM,GAEzB4a,EAAMpb,IAAI,CAAC5B,EAAI8B,SAAiB9B,EAAGoB,MAAMU,IACzCob,EAAMY,QAAS,MAGZlf,GAzB2C,M,6BC5C/C,SAASmO,EAAmB0G,GAOjC,OADAA,GAFAA,GAFAA,EAAMA,EAAItU,QAAQ,MAAO,KAEfA,QAAQ,OAAQ,KAEhBA,QAAQ,OAAQ,IAAM,KANlC,iC,uaCKO,MAAM4e,EACX3f,YAAakK,GACX,GAAmB,iBAARA,EACT9J,KAAKwf,KAAO1V,OACP,GAAIjG,EAAOmK,SAASlE,GACzB9J,KAAKwf,KAAO1V,EAAI7I,SAAS,YACpB,IAAmB,iBAAR6I,EAGhB,MAAM,IAAIpK,IAASD,IAAExB,aAAc,CACjCgC,QAAS,uDAHXD,KAAKwf,KAAOD,EAAgBtR,OAAOnE,IAQvC,YAAaA,GACX,OAAO,IAAIyV,EAAgBzV,GAG7B,cAAeiF,GACb,gBAAiBA,EAAIpU,gBAClBoU,EAAI9C,aACL8C,EAAIjF,eACDsF,YAAaL,EAAI0Q,cAExB1Q,EAAI9O,YACJ8O,EAAIZ,UAAYY,EAAIZ,UAAY,KAGhCE,cACE,OAAOrO,KAAKwf,KAAK5X,MAAM,EAAG5H,KAAKwf,KAAK9X,QAAQ,SAG9CzH,UACE,MAAM6J,EAAM9J,KAAKuP,mBACjB,OAAOzF,EAAIlC,MAAMkC,EAAIpC,QAAQ,QAAU,GAGzCiH,QACE,OAAOhV,OAAOiV,OAAO5O,KAAKoO,UAAW,CACnCnO,QAASD,KAAKC,UACdkO,UAAWnO,KAAKmO,cAIpBF,SACE,OAAOjO,KAAKwf,KAGdpR,UACE,MAAMA,EAAUpO,KAAKqO,cAAc/G,MAAM,MACnCuH,EAAK,GACX,IAAK,MAAMC,KAAKV,EACD,MAATU,EAAE,GAEJD,EAAGA,EAAGtF,OAAS,IAAM,KAAOuF,EAAElH,MAAM,GAEpCiH,EAAGpE,KAAKqE,GAGZ,MAAMC,EAAM,GACZ,IAAK,MAAMD,KAAKD,EAAI,CAClB,MAAMrU,EAAMsU,EAAElH,MAAM,EAAGkH,EAAEpH,QAAQ,MAC3BxN,EAAQ4U,EAAElH,MAAMkH,EAAEpH,QAAQ,KAAO,GACnCnH,MAAMC,QAAQuO,EAAIvU,IACpBuU,EAAIvU,GAAKiQ,KAAKvQ,GAEd6U,EAAIvU,GAAON,EASf,OANI6U,EAAI0Q,SACN1Q,EAAI0Q,OAASxQ,YAAYF,EAAI0Q,SAE3B1Q,EAAIG,YACNH,EAAIG,UAAYD,YAAYF,EAAIG,YAE3BH,EAGTQ,mBACE,MAAMzF,EAAMyE,YAAkBvO,KAAKwf,MACnC,OAAwD,IAApD1V,EAAIpC,QAAQ,mCAAkDoC,EAC3DA,EAAIlC,MAAM,EAAGkC,EAAIgK,YAAY,oCAGtC3F,YACE,MAAMA,EAAYnO,KAAKwf,KAAK5X,MAC1B5H,KAAKwf,KAAK9X,QAAQ,iCAClB1H,KAAKwf,KAAK9X,QAAQ,+BAChB,8BAA8B6B,QAElC,OAAOgF,YAAkBJ,GAG3BM,WACE,OAAO5K,EAAOC,KAAK9D,KAAKwf,KAAM,QAGhC,YAAmB1V,EAAKtD,EAAKkJ,GAAW,qBACtC,MAAMxB,EAAUpE,EAAIyF,mBAAqB,KACzC,IAAI,UAAEpB,SAAoB3H,EAAImJ,KAAK,CAAEzB,UAASwB,cAG9C,MAAMgQ,EAAYxR,GADlBC,EAAYI,YAAkBJ,IAG9B,OAAOoR,EAAgBzb,KAAK4b,IAPU,GAUxC,cAAqB5V,EAAKtD,EAAKqJ,GAAW,qBACxC,MAAM3B,EAAUpE,EAAIyF,mBAAqB,KACnCpB,EAAYrE,EAAIqE,YACtB,OAAO3H,EAAIsJ,OAAO,CAAE5B,UAAS2B,YAAW1B,eAHA,O,uDCjH5C,uDAEO,MAAMjC,EACX,aAAa,KAAED,EAAF,OAAQtR,IACnB,OAAOkJ,EAAOuB,OAAO,CACnBvB,EAAOC,QAAQmI,KAAQtR,EAAOoX,WAAW9Q,gBACzC4C,EAAOC,KAAKnJ,KAIhB,cAAeiJ,GACb,MAAM5I,EAAI4I,EAAO8D,QAAQ,IACnBzO,EAAI2K,EAAO8D,QAAQ,GACnBuE,EAAOrI,EAAOgE,MAAM,EAAG5M,GAAGiG,SAAS,QACnCsI,EAAS3F,EAAOgE,MAAM5M,EAAI,EAAG/B,GAAGgI,SAAS,QACzC0e,EAAe/b,EAAO2F,QAAUtQ,EAAI,GAE1C,GAAI6X,SAASvH,KAAYoW,EACvB,MAAM,IAAIjgB,IAASD,IAAExB,aAAc,CACjCgC,qCAAsCsJ,mBAAwBoW,eAGlE,MAAO,CACL1T,OACAtR,OAAQkJ,EAAOC,KAAKF,EAAOgE,MAAM3O,EAAI,S,sDCtB3C,MAAM2mB,EAAY,CAACC,EAAItc,KAAY,YAAayM,GAG/C,OAAO,IAAI8P,EAFDvc,EAAQwc,eAEL,CAAChV,EAASiV,KAClBzc,EAAQ0c,UACXjQ,EAAKvF,KAAK,IAAIrK,KACTmD,EAAQ2c,WACP9f,EAAO,GACV4f,EAAO5f,IAEPA,EAAO+f,QACPpV,EAAQ3K,IAGT2K,EAAQ3K,KAGAmD,EAAQ2c,WAClBlQ,EAAKvF,KAAK,CAAC2V,EAAOhgB,KACbggB,EACHJ,EAAOI,GAEPrV,EAAQ3K,KAIV4P,EAAKvF,KAAKM,GAGX8U,EAAGpJ,MAAMzW,KAAMgQ,OAIjBtX,EAAOD,QAAU,CAAC4nB,EAAO9c,KACxBA,EAAU5J,OAAOiV,OAAO,CACvB0R,QAAS,CAAC,oBACVJ,YAAY,EACZH,cAAepb,SACbpB,GAEH,MAAMgd,SAAiBF,EACvB,GAAgB,OAAVA,GAA+B,WAAZE,GAAoC,aAAZA,EAChD,MAAM,IAAI5O,0EAAoF,OAAV0O,EAAiB,OAASE,OAG/G,MAAMvY,EAASxN,IACd,MAAM2O,EAAQqX,GAA8B,iBAAZA,EAAuBhmB,IAAQgmB,EAAUA,EAAQhZ,KAAKhN,GACtF,OAAO+I,EAAQkd,QAAUld,EAAQkd,QAAQC,KAAKvX,IAAU5F,EAAQ+c,QAAQI,KAAKvX,IAG9E,IAAIyP,EAEHA,EADe,aAAZ2H,EACG,YAAavQ,GAClB,OAAOzM,EAAQod,YAAcN,KAASrQ,GAAQ4P,EAAUS,EAAO9c,GAASkT,MAAMzW,KAAMgQ,IAG/ErW,OAAOY,OAAOZ,OAAOinB,eAAeP,IAG3C,IAAK,MAAM7lB,KAAO6lB,EAAO,CACxB,MAAMzlB,EAAWylB,EAAM7lB,GACvBoe,EAAIpe,GAA2B,mBAAbI,GAA2BoN,EAAOxN,GAAOolB,EAAUhlB,EAAU2I,GAAW3I,EAG3F,OAAOge,I,6BC/DR,IAMI9M,EAAO,IAEX8C,EARgB,EAAQ,IAAsBA,QAQvC9C,EANS,EAAQ,KACR,EAAQ,KACR,EAAQ,KAMxBpT,EAAOD,QAAUqT,G,6BCbjB,gEAKO,MAAM+U,EAAqB7mB,OAAO,sBAC5B8mB,EAAqB9mB,OAAO,uB,6BCNzC,4CAEA,MAAM+mB,EAAa,GAAK,GAExB,SAASC,EACPC,EACAC,EACAC,EACAC,GAEA,QAAqB3f,IAAjBwf,QAAmDxf,IAArByf,EAChC,MAAO,CAACD,EAAcC,QAEHzf,IAAjB0f,IACFA,EAAeC,EAAKC,WAEtB,MAAMC,EAAUzL,KAAKqF,MAAMiG,EAAe,KAE1C,MAAO,CAACG,EAD8C,KAAjCH,EAAyB,IAAVG,IAI/B,SAASC,EAAgBtK,GAC9B,MAAOuK,EAAcC,GAAoBT,EACvC/J,EAAEuK,aACFvK,EAAEwK,iBACFxK,EAAEyK,QACFzK,EAAE0K,QAEGC,EAAcC,GAAoBb,EACvC/J,EAAE2K,aACF3K,EAAE4K,iBACF5K,EAAE6K,QACF7K,EAAE8K,OAGJ,MAAO,CACLP,aAAcA,EAAeT,EAC7BU,iBAAkBA,EAAmBV,EACrCa,aAAcA,EAAeb,EAC7Bc,iBAAkBA,EAAmBd,EACrCiB,IAAK/K,EAAE+K,IAAMjB,EACbkB,IAAKhL,EAAEgL,IAAMlB,EACb3mB,KAAM8nB,YAAcjL,EAAE7c,KAAO2mB,GAC7BoB,IAAKlL,EAAEkL,IAAMpB,EACbqB,IAAKnL,EAAEmL,IAAMrB,EAGbnW,KAAMqM,EAAErM,MAAQ,EAAIqM,EAAErM,KAAOmW,EAAa,K,6BC/C9C,gCAEO,MAAMsB,EACXziB,YAAagE,GACX5D,KAAK4D,OAASA,EACd5D,KAAKsiB,OAAS,EAGhBC,MACE,OAAOviB,KAAKsiB,QAAUtiB,KAAK4D,OAAO2F,OAGpCiZ,OACE,OAAOxiB,KAAKsiB,OAGdG,KAAM/nB,GACJsF,KAAKsiB,OAAS5nB,EAGhBkN,MAAOlN,GACL,MAAMX,EAAIiG,KAAK4D,OAAOgE,MAAM5H,KAAKsiB,OAAQtiB,KAAKsiB,OAAS5nB,GAEvD,OADAsF,KAAKsiB,QAAU5nB,EACRX,EAGTkH,SAAUyhB,EAAKnZ,GACb,MAAMxP,EAAIiG,KAAK4D,OAAO3C,SAASyhB,EAAK1iB,KAAKsiB,OAAQtiB,KAAKsiB,OAAS/Y,GAE/D,OADAvJ,KAAKsiB,QAAU/Y,EACRxP,EAGTgK,MAAO7J,EAAOqP,EAAQmZ,GACpB,MAAM3oB,EAAIiG,KAAK4D,OAAOG,MAAM7J,EAAO8F,KAAKsiB,OAAQ/Y,EAAQmZ,GAExD,OADA1iB,KAAKsiB,QAAU/Y,EACRxP,EAGTggB,YACE,MAAMhgB,EAAIiG,KAAK4D,OAAOmW,UAAU/Z,KAAKsiB,QAErC,OADAtiB,KAAKsiB,QAAU,EACRvoB,EAGTkhB,WAAY/gB,GACV,MAAMH,EAAIiG,KAAK4D,OAAOqX,WAAW/gB,EAAO8F,KAAKsiB,QAE7C,OADAtiB,KAAKsiB,QAAU,EACRvoB,EAGToa,eACE,MAAMpa,EAAIiG,KAAK4D,OAAOuQ,aAAanU,KAAKsiB,QAExC,OADAtiB,KAAKsiB,QAAU,EACRvoB,EAGTqhB,cAAelhB,GACb,MAAMH,EAAIiG,KAAK4D,OAAOwX,cAAclhB,EAAO8F,KAAKsiB,QAEhD,OADAtiB,KAAKsiB,QAAU,EACRvoB,EAGTmgB,eACE,MAAMngB,EAAIiG,KAAK4D,OAAOsW,aAAala,KAAKsiB,QAExC,OADAtiB,KAAKsiB,QAAU,EACRvoB,EAGTuhB,cAAephB,GACb,MAAMH,EAAIiG,KAAK4D,OAAO0X,cAAcphB,EAAO8F,KAAKsiB,QAEhD,OADAtiB,KAAKsiB,QAAU,EACRvoB,K,uPChEJ,SAAe4oB,EAAtB,kC,4BAAO,WACLnhB,GAAImH,EAD6B,OAEjCC,EAFiC,KAGjCqD,EAHiC,OAIjCtR,EAJiC,OAKjC+Q,EAAS,UALwB,IAMjC3D,EANiC,OAOjC6a,GAAS,IAST,GAPe,aAAXlX,IACa,YAAXA,IACF/Q,EAASuR,IAAU2W,KAAK,CAAE5W,OAAMtR,YAElCoN,QAAYiE,YAAOrR,GACnBA,EAASkJ,EAAOC,KAAKgI,IAAKgX,QAAQnoB,MAE/BioB,EAAQ,CACX,MAAMphB,EAAK,IAAID,IAAWoH,SACpBoa,YAAiB,CAAEvhB,KAAIoH,SAAQjO,SAAQ+Q,OAAQ,WAAY3D,QAEnE,OAAOA,I,8PC3BF,SAAS9D,EAASiC,GACvB,MAAM8c,EAAOnN,KAAKuC,IAAIlS,EAAK4N,YAAY,KAAM5N,EAAK4N,YAAY,OAC9D,OAAc,IAAVkP,EAAoB,IACX,IAATA,EAAmB,IAChB9c,EAAK0B,MAAM,EAAGob,GAJvB,iC,0YCGO,MAAM3Z,EACX,YAAoB7H,GAAImH,EAAN,OAAWC,IAAU,qBACrC,MAAMpH,EAAK,IAAID,IAAWoH,GAGpBzB,QAAa1F,EAAGmC,QAAQiF,WAAiB,CAAErD,SAAU,SAC3D,OAAO0d,IAAUnf,KAAKoD,IALe,GAQvC,aAAqB1F,GAAImH,EAAN,OAAWC,EAAX,OAAmBQ,IAAU,qBAC9C,MAAM5H,EAAK,IAAID,IAAWoH,SAGpBnH,EAAGuC,SAAS6E,WAAiBQ,EAAOnI,WAAY,CACpDsE,SAAU,UALkC,M,6BCTlD,IAAI2d,EAAmC,oBAAf5R,YACgB,oBAAhB6R,aACe,oBAAfC,WAExB,SAASC,EAAKtU,EAAKvU,GACjB,OAAOb,OAAOkB,UAAUC,eAAe1B,KAAK2V,EAAKvU,GAGnD/B,EAAQmW,OAAS,SAAUG,GAEzB,IADA,IAAIuU,EAAU/iB,MAAM1F,UAAU+M,MAAMxO,KAAK6e,UAAW,GAC7CqL,EAAQ/Z,QAAQ,CACrB,IAAIga,EAASD,EAAQnD,QACrB,GAAKoD,EAAL,CAEA,GAAsB,iBAAXA,EACT,MAAM,IAAI5R,UAAU4R,EAAS,sBAG/B,IAAK,IAAIxoB,KAAKwoB,EACRF,EAAKE,EAAQxoB,KACfgU,EAAIhU,GAAKwoB,EAAOxoB,KAKtB,OAAOgU,GAKTtW,EAAQ+qB,UAAY,SAAUtP,EAAKtJ,GACjC,OAAIsJ,EAAI3K,SAAWqB,EAAesJ,EAC9BA,EAAI8C,SAAmB9C,EAAI8C,SAAS,EAAGpM,IAC3CsJ,EAAI3K,OAASqB,EACNsJ,IAIT,IAAIuP,EAAU,CACZC,SAAU,SAAUC,EAAMhH,EAAKiH,EAAUtR,EAAKuR,GAC5C,GAAIlH,EAAI3F,UAAY2M,EAAK3M,SACvB2M,EAAKvgB,IAAIuZ,EAAI3F,SAAS4M,EAAUA,EAAWtR,GAAMuR,QAInD,IAAK,IAAI5qB,EAAI,EAAGA,EAAIqZ,EAAKrZ,IACvB0qB,EAAKE,EAAY5qB,GAAK0jB,EAAIiH,EAAW3qB,IAIzC6qB,cAAe,SAAUC,GACvB,IAAI9qB,EAAGC,EAAGoZ,EAAKuF,EAAKmM,EAAO5jB,EAI3B,IADAkS,EAAM,EACDrZ,EAAI,EAAGC,EAAI6qB,EAAOxa,OAAQtQ,EAAIC,EAAGD,IACpCqZ,GAAOyR,EAAO9qB,GAAGsQ,OAMnB,IAFAnJ,EAAS,IAAIkR,WAAWgB,GACxBuF,EAAM,EACD5e,EAAI,EAAGC,EAAI6qB,EAAOxa,OAAQtQ,EAAIC,EAAGD,IACpC+qB,EAAQD,EAAO9qB,GACfmH,EAAOgD,IAAI4gB,EAAOnM,GAClBA,GAAOmM,EAAMza,OAGf,OAAOnJ,IAIP6jB,EAAY,CACdP,SAAU,SAAUC,EAAMhH,EAAKiH,EAAUtR,EAAKuR,GAC5C,IAAK,IAAI5qB,EAAI,EAAGA,EAAIqZ,EAAKrZ,IACvB0qB,EAAKE,EAAY5qB,GAAK0jB,EAAIiH,EAAW3qB,IAIzC6qB,cAAe,SAAUC,GACvB,MAAO,GAAG3e,OAAOqR,MAAM,GAAIsN,KAO/BtrB,EAAQyrB,SAAW,SAAUC,GACvBA,GACF1rB,EAAQ2rB,KAAQ9S,WAChB7Y,EAAQ4rB,MAAQlB,YAChB1qB,EAAQ6rB,MAAQlB,WAChB3qB,EAAQmW,OAAOnW,EAASgrB,KAExBhrB,EAAQ2rB,KAAQ7jB,MAChB9H,EAAQ4rB,MAAQ9jB,MAChB9H,EAAQ6rB,MAAQ/jB,MAChB9H,EAAQmW,OAAOnW,EAASwrB,KAI5BxrB,EAAQyrB,SAAShB,I,6BCxGjB,gCAAO,MAAMqB,EAAM,CACjB/qB,KAAM,iBACNgrB,QAAS,SACTC,MAAO,8B,6BCHF,SAASC,EAAUxe,GACxB,MAAM8c,EAAOnN,KAAKuC,IAAIlS,EAAK4N,YAAY,KAAM5N,EAAK4N,YAAY,OAI9D,OAHIkP,GAAQ,IACV9c,EAAOA,EAAK0B,MAAMob,EAAO,IAEpB9c,EALT,iC,8YCSO,MAAMye,EACX/kB,aAAe4B,GAAImH,EAAN,OAAWC,EAAX,IAAmBf,IAC9B,MAAMrG,EAAK,IAAID,IAAWoH,GAC1B3I,KAAKwB,GAAKA,EACVxB,KAAK4I,OAASA,EACd5I,KAAK4kB,WAAa,EAAC,YACjB,MAAM/f,EAAM,IAAIzD,IAChB,IAAI2G,EACJ,IACEA,QAAYW,IAAcqC,QAAQ,CAAEvJ,KAAIoH,SAAQf,QAChD,MAAOoP,GAEHA,EAAEpX,OAASJ,IAAEjC,kBACfuK,EAAM,4CAGV,MAAMoH,QAAa0V,YAAY,CAAErjB,KAAIoH,SAAQb,QAG7C,OAFAoH,EAAKlD,KAAO,OACZpH,EAAIzB,IAAI,IAAK+L,GACNtK,GAdS,GAgBlB,MAAMigB,EAAS9kB,KACfA,KAAK+kB,eAAiB,MACpBnlB,YAAaqI,GACXtO,OAAOiV,OAAO5O,KAAMiI,GAGhB+c,eAAgB,gCACf,EAAK3hB,eACJyhB,EAAOE,aAAa,KAFN,GAKhBC,kBAAmB,gCAClB,EAAK5hB,eACJyhB,EAAOG,gBAAgB,KAFN,GAKnBC,eAAgB,gCACf,EAAK7hB,eACJyhB,EAAOI,aAAa,KAFN,KAOpBpiB,QAASmF,GAAO,gCACpB,IAAKA,EAAM5E,OAAQ,MAAO,GAC1B,MAAMC,EAAW2E,EAAMkd,UACjB,GAAE3jB,EAAF,OAAMoH,GAAW,EACjB/D,QAAY,EAAK+f,WACjB7V,EAAMlK,EAAI/K,IAAIwJ,GACpB,IAAKyL,EAAK,MAAM,IAAIpP,oBAAoB2D,KACxC,MAAMyE,EAAMgH,EAAIhH,IAChB,IAAKA,EAAK,MAAM,IAAIpI,wBAAwBylB,KAAKC,UAAUtW,MAC3D,GAAiB,SAAbA,EAAI9C,KAEN,OAAO,KAET,MAAM,KAAEA,EAAF,OAAQtR,SAAiB8Q,YAAW,CAAEjK,KAAIoH,SAAQb,QACxD,GAAIkE,IAAS8C,EAAI9C,KACf,MAAM,IAAIvM,IAASD,IAAE7D,wBAAyB,CAC5CmM,MACAud,SAAUvW,EAAI9C,KACdA,SAGJ,MAAMkD,EAAO6N,IAAQlZ,KAAKnJ,GAE1B,IAAK,MAAMsN,KAASkH,EAClBtK,EAAIzB,IAAI3C,YAAK6C,EAAU2E,EAAM/B,MAAO+B,GAEtC,OAAOkH,EAAKvC,UAAU/H,IAAIoD,IAAS,CACjCkd,SAAU1kB,YAAK6C,EAAU2E,EAAM/B,MAC/Bwe,SAAUzc,EAAM/B,KAChB7C,QAAQ,MA7BU,GAiChB2hB,aAAc/c,GAAO,gCAEzB,MACMuW,SADY,EAAKoG,YACL9qB,IAAImO,EAAMkd,UAC5B,IAAK3G,EACH,MAAM,IAAI7e,mDACqCsI,EAAMkd,aAGvD,MAAM,KAAE/qB,EAAF,KAAQ6R,GAASuS,EACvB7kB,OAAOiV,OAAO3G,EAAO,CAAE7N,OAAM6R,UAVJ,GAarBgZ,gBAAiBhd,GAAO,gCAC5B,MAAMpD,QAAY,EAAK+f,YACjB,GAAEpjB,EAAF,OAAMoH,GAAW,EACjBmG,EAAMlK,EAAI/K,IAAImO,EAAMkd,UAC1B,IAAKpW,EAAK,MAAM,IAAIpP,oBAAoBsI,EAAMkd,YAC9C,MAAMpd,EAAMgH,EAAIhH,IAChB,IAAKA,EAAK,MAAM,IAAIpI,0BAA0BylB,KAAKC,UAAUtW,MAC7D,MAAM,KAAE9C,EAAF,OAAQtR,SAAiB8Q,YAAW,CAAEjK,KAAIoH,SAAQb,QACxD,GAAa,SAATkE,EACF,MAAM,IAAItM,MAAO,kDAEnBhG,OAAOiV,OAAO3G,EAAO,CAAEsd,QAAS5qB,KAXJ,GAcxBuqB,aAAcjd,GAAO,gCACzB,MACM8G,SADY,EAAK6V,YACP9qB,IAAImO,EAAMkd,UAC1B,IAAKpW,EACH,MAAM,IAAIpP,kDACoCsI,EAAMkd,aAGtD,MAAMpd,EAAMgH,EAAIhH,IAChBpO,OAAOiV,OAAO3G,EAAO,CAAEF,SATE,I,sUCvGtB,MAAMyd,EACX5lB,aAAe4B,GAAImH,EAAN,OAAWC,EAAX,IAAmBf,IAC9B,MAAMrG,EAAK,IAAID,IAAWoH,GAC1B3I,KAAKwB,GAAKA,EACVxB,KAAK4I,OAASA,EACd5I,KAAK4kB,WAAa,EAAC,YACjB,MAAM/f,EAAM,IAAIzD,IAChB,IAAI2G,EACJ,IACEA,QAAYW,IAAcqC,QAAQ,CAAEvJ,KAAIoH,SAAQf,QAChD,MAAOoP,GAEHA,EAAEpX,OAASJ,IAAEjC,kBACfuK,EAAM,4CAGV,MAAMoH,QAAa0V,YAAY,CAAErjB,KAAIoH,SAAQb,QAI7C,OAHAoH,EAAKlD,KAAO,OACZkD,EAAK/U,KAAO,QACZyK,EAAIzB,IAAI,IAAK+L,GACNtK,GAfS,GAiBlB,MAAMigB,EAAS9kB,KACfA,KAAK+kB,eAAiB,MACpBnlB,YAAaulB,GACXnlB,KAAKylB,UAAYN,EACjBnlB,KAAK0lB,OAAQ,EACb1lB,KAAK2lB,OAAQ,EACb3lB,KAAKyC,OAAQ,EACbzC,KAAK4lB,UAAW,EAChB5lB,KAAK6lB,MAAO,EAGR5Z,OAAQ,gCACZ,OAAO6Y,EAAO7Y,KAAK,IADP,GAIR7R,OAAQ,gCACZ,OAAO0qB,EAAO1qB,KAAK,IADP,GAIRsI,OAAQ,gCACZ,OAAOoiB,EAAOpiB,KAAK,IADP,GAIR6iB,UAAW,gCACf,OAAOT,EAAOS,QAAQ,IADP,GAIXxd,MAAO,gCACX,OAAO+c,EAAO/c,IAAI,IADP,KAMXjF,QAASmF,GAAO,gCACpB,MAAM3E,EAAW2E,EAAMwd,WACjB,GAAEjkB,EAAF,OAAMoH,GAAW,EACjB/D,QAAY,EAAK+f,WACjB7V,EAAMlK,EAAI/K,IAAIwJ,GACpB,IAAKyL,EAAK,MAAM,IAAIpP,oBAAoB2D,KACxC,MAAMyE,EAAMgH,EAAIhH,IAChB,IAAKA,EAAK,MAAM,IAAIpI,wBAAwBylB,KAAKC,UAAUtW,MAC3D,GAAiB,SAAbA,EAAI9C,KAEN,OAAO,KAET,MAAM,KAAEA,EAAF,OAAQtR,SAAiB8Q,YAAW,CAAEjK,KAAIoH,SAAQb,QACxD,GAAIkE,IAAS8C,EAAI9C,KACf,MAAM,IAAIvM,IAASD,IAAE7D,wBAAyB,CAC5CmM,MACAud,SAAUvW,EAAI9C,KACdA,SAGJ,MAAMkD,EAAO6N,IAAQlZ,KAAKnJ,GAE1B,IAAK,MAAMsN,KAASkH,EAClBtK,EAAIzB,IAAI3C,YAAK6C,EAAU2E,EAAM/B,MAAO+B,GAEtC,OAAOkH,EAAKvC,UAAU/H,IAAIoD,GAASxH,YAAK6C,EAAU2E,EAAM/B,QAzBpC,GA4BhB+F,KAAMhE,GAAO,gCACjB,IAAoB,IAAhBA,EAAMyd,MAAiB,CACzB,MAAM7gB,QAAY,EAAK+f,YACjB,KAAE3Y,GAASpH,EAAI/K,IAAImO,EAAMwd,WAC/Bxd,EAAMyd,MAAQzZ,EAEhB,OAAOhE,EAAMyd,OANI,GASbtrB,KAAM6N,GAAO,gCACjB,IAAoB,IAAhBA,EAAM0d,MAAiB,CACzB,MAAM9gB,QAAY,EAAK+f,YACjB,KAAExqB,GAASyK,EAAI/K,IAAImO,EAAMwd,WAC/Bxd,EAAM0d,MAAQzD,YAAcpR,SAAS1W,EAAM,IAE7C,OAAO6N,EAAM0d,OANI,GASbjjB,KAAMojB,GAAQ,0BAEdP,QAAStd,GAAO,gCACpB,IAAuB,IAAnBA,EAAM2d,SAAoB,CAC5B,MAAM/gB,QAAY,EAAK+f,YACjB,GAAEpjB,EAAF,OAAMoH,GAAW,EAEjBb,EADMlD,EAAI/K,IAAImO,EAAMwd,WACV1d,KACV,KAAEkE,EAAF,OAAQtR,SAAiB8Q,YAAW,CAAEjK,KAAIoH,SAAQb,QAEtDE,EAAM2d,SADK,SAAT3Z,OACe,EAEAtR,EAGrB,OAAOsN,EAAM2d,UAbO,GAgBhB7d,IAAKE,GAAO,gCAChB,IAAmB,IAAfA,EAAM4d,KAAgB,CACxB,MACM9W,SADY,EAAK6V,YACP9qB,IAAImO,EAAMwd,WAC1Bxd,EAAM4d,KAAO9W,EAAIhH,IAEnB,OAAOE,EAAM4d,MANG,I,mBCxGb,SAASE,GAAM,IACpBle,EAAM,OADc,KAGpBb,EAAO,UAHa,IAKpBvC,EALoB,OAOpBmE,EAEApH,GAAImH,IAEJ,MAAMjP,EAAIC,OAAOY,OAAO,MAexB,OAdAZ,OAAOC,eAAeF,EAAGmnB,IAAoB,CAC3C3mB,MAAO,WACL0O,EAASA,GAAUnI,YAAKgE,EAAK,QAC7BkE,EAAM5B,IAAMjN,IAAIkN,GAAMlN,IAAI,MAC1B,MAAM0H,EAAK,IAAID,IAAWoH,GAC1B,OAAO,IAAIgc,EAAc,CAAEnjB,KAAIoH,SAAQf,WAG3ClO,OAAOC,eAAeF,EAAGonB,IAAoB,CAC3C5mB,MAAO,UAAU,GAAEsH,EAAF,OAAMoH,IACrB,OAAO,IAAI4c,EAAe,CAAEhkB,KAAIoH,SAAQf,WAG5ClO,OAAOqsB,OAAOtsB,GACPA,EAnDT,iC,+MCEO,SAAeusB,EAAtB,kC,4BAAO,UAAwBC,GAC7B,MAAMC,EAAU,GAGhB,aADMC,YAASF,EAAUhsB,GAASisB,EAAQ1b,KAAK5G,EAAOC,KAAK5J,KACpD2J,EAAOuB,OAAO+gB,K,maCHhB,SAAeC,EAAtB,oC,4BAAO,UAAyBF,EAAUG,GACxC,MAAMC,EAAOC,YAAYL,GACzB,OAAa,CACX,MAAM,MAAEhsB,EAAF,KAASssB,SAAeF,EAAKG,OAEnC,GADIvsB,UAAamsB,EAAGnsB,IAChBssB,EAAM,MAERF,EAAKI,QAAQJ,EAAKI,W,imBCLxB,IAAIjhB,EAAO,KAEJ,MAAMkhB,EACX,aAAqBnlB,GAAImH,EAAN,OAAWC,IAAU,qBACtC,MAAMpH,EAAK,IAAID,IAAWoH,GACb,OAATlD,IAAeA,EAAO,IAAIwZ,KAC9B,MAAM3b,EAAW7C,YAAKmI,EAAQ,WACxBge,EAAO,IAAI/f,IAUjB,aATMpB,EAAK0Z,QAAQ7b,EAAb,EAAuB,YAC3B,MAAM4D,QAAa1F,EAAGmC,KAAKL,EAAU,CAAEiC,SAAU,SACjD,OAAa,OAAT2B,EAAsB0f,EACN,KAAhB1f,EAAKG,OAAsBuf,OAC/B1f,EACGG,OACAC,MAAM,MACNzC,IAAIkD,GAAO6e,EAAKC,IAAI9e,OAElB6e,GAd+B,GAiBxC,cAAsBplB,GAAImH,EAAN,OAAWC,EAAX,KAAmBge,IAAQ,qBAC7C,MAAMplB,EAAK,IAAID,IAAWoH,GACb,OAATlD,IAAeA,EAAO,IAAIwZ,KAC9B,MAAM3b,EAAW7C,YAAKmI,EAAQ,WAC9B,GAAIge,EAAKhc,KAAO,EAAG,CACjB,MAAM1D,EAAO,IAAI0f,GAAMnmB,KAAK,MAAQ,WAC9BgF,EAAK0Z,QAAQ7b,EAAb,EAAuB,kBACrB9B,EAAGuC,MAAMT,EAAU4D,EAAM,CAC7B3B,SAAU,uBAKRE,EAAK0Z,QAAQ7b,EAAb,EAAuB,kBACrB9B,EAAG4C,GAAGd,OAd6B,M,+NCnB1C,SAAeuhB,EAAtB,kC,4BAAO,WAA4B,GAAErjB,EAAF,OAAMoH,EAAN,IAAcb,IAE/C,GAAY,6CAARA,EACF,MAAO,CAAEoH,KAAM6N,IAAQlZ,KAAK,IAAKiE,OAEnC,MAAM,KAAEkE,EAAF,OAAQtR,SAAiB8Q,YAAW,CAAEjK,KAAIoH,SAAQb,QAExD,GAAa,QAATkE,EAEF,OAAO4Y,EAAY,CAAErjB,KAAIoH,SAAQb,IADjCA,EAAMwX,IAAgBzb,KAAKnJ,GAAQgU,QAAQhU,SAI7C,GAAa,WAATsR,EAEF,OAAO4Y,EAAY,CAAErjB,KAAIoH,SAAQb,IADjCA,EAAM8F,IAAU/J,KAAKnJ,GAAQgU,QAAQQ,OAGvC,GAAa,SAATlD,EACF,MAAM,IAAIvM,IAASD,IAAE1C,iBAAkB,CAAEgL,QAE3C,MAAO,CAAEoH,KAAM6N,IAAQlZ,KAAKnJ,GAASoN,S,6RCjBhC,SAAW+e,EAAmBC,GAkBnC,MAAMjR,EAAM,IAAIkR,IAChB,IAAIC,EACJ,MAAMC,EAAQ,GACRC,EAAUJ,EAAKxd,OACrB,IAAK,IAAItQ,EAAI,EAAGA,EAAIkuB,EAASluB,IAG3BiuB,EAAMjuB,GAAK8tB,EAAK9tB,GAAGwtB,OAAOvsB,WACTuH,IAAbylB,EAAMjuB,IACR6c,EAAIsR,SAASF,EAAMjuB,IAGvB,GAAkB,OAAd6c,EAAI5b,MAER,OAAa,CACX,MAAMkG,EAAS,GACf6mB,EAAUnR,EAAI5b,MACd4b,EAAIuR,QACJ,IAAK,IAAIpuB,EAAI,EAAGA,EAAIkuB,EAASluB,SACVwI,IAAbylB,EAAMjuB,IAAoBiuB,EAAMjuB,KAAOguB,GACzC7mB,EAAOnH,GAAKiuB,EAAMjuB,GAClBiuB,EAAMjuB,GAAK8tB,EAAK9tB,GAAGwtB,OAAOvsB,OAG1BkG,EAAOnH,GAAK,UAEGwI,IAAbylB,EAAMjuB,IACR6c,EAAIsR,SAASF,EAAMjuB,IAIvB,SADMmH,EACY,OAAd0V,EAAI5b,MAAgB,Q,0TCiMrB,SAAeotB,EAAtB,kC,wBAAO,WAA0B,KAC/BtgB,EAAO,UADwB,IAE/BvC,EAF+B,OAG/BmE,EAASnI,YAAKgE,EAAK,QACnBjD,GAAImH,EAAM5B,IAAMjN,IAAIkN,GAAMlN,IAAI,MAJC,MAK/BytB,EAL+B,IAO/B1iB,EAAG,mBAAG,UAAO0L,EAAGtI,GAAV,OAAoBA,IAAvB,wDAP4B,OAS/BhD,EAAM,mBAAG,UAAOd,EAAQqjB,GACtB,MAAMC,EAAUC,YAAKF,GAErB,YADe/lB,IAAX0C,GAAsBsjB,EAAQje,QAAQrF,GACnCsjB,IAHH,wDATyB,QAe/BE,EAAU,EAACC,EAAMJ,IAAa7iB,QAAQC,IAAI,IAAI4iB,GAAU3iB,IAAI+iB,OAE5D,IACE,MAAMpmB,EAAK,IAAID,IAAWoH,GACpBkf,EAAUN,EAAM1iB,IAAIijB,GACxBA,EAAMhH,KAAoB,CAAEtf,KAAIiD,MAAKmE,YAGjCrQ,EAAO,IAAIgI,MAAMsnB,EAAQte,QAAQgO,KAAK,KACtCwQ,EAAQC,YAAW,EAAGH,EAAQte,QAC9B0e,EAAsB,mBAAG,UAAMrb,GACnCmb,EAAMljB,IAAI5L,IACR2T,EAAQ3T,GAAK2T,EAAQ3T,IAAM,IAAI4uB,EAAQ5uB,GAAG8rB,eAAenY,EAAQ3T,MAEnE,MAIMivB,SAJgBvjB,QAAQC,IAC5BmjB,EAAMljB,IAAI5L,GAAM2T,EAAQ3T,GAAK4uB,EAAQ5uB,GAAG6J,QAAQ8J,EAAQ3T,IAAM,MAI7D4L,IAAIgN,GAAoB,OAAVA,EAAiB,GAAKA,GACpChN,IAAIgN,GAASA,EAAM7X,OAAOujB,aAC7B,MAAO,CACL3Q,UACA4a,SAAUV,EAAkBoB,MAbJ,sDAiBtBN,EAAI,mBAAG,UAAMrvB,GACjB,MAAM,QAAEqU,EAAF,SAAW4a,SAAmBS,EAAuB1vB,GACrD4sB,EAAWvY,EAAQub,KAAKlgB,GAASA,GAASA,EAAMwd,WAAWA,UAC3DthB,QAAeU,EAAIsgB,EAAUvY,GACnC,GAAe,OAAXzI,EAAiB,CACnB,IAAIikB,QAAuBT,EAAQC,EAAMJ,GAEzC,OADAY,EAAiBA,EAAepgB,OAAOwD,QAAW/J,IAAN+J,GACrCvG,EAAOd,EAAQikB,MAPhB,sDAUV,OAAOR,EAAKrvB,GACZ,MAAOiL,GAEP,MADAA,EAAIxC,OAAS,WACPwC,M,oFCjTH,SAASe,EAAgBW,EAAGiD,GAEjC,QAASjD,EAAIiD,MAAQjD,EAAIiD,GAF3B,iC,6BCAO,SAASuI,EAAQvI,EAAGzN,GACzB,MAAMM,EAAIN,EAAEuG,SAAS,IACrB,MAAO,IAAIonB,OAAOlgB,EAAInN,EAAEuO,QAAUvO,EAFpC,iC,6BCAO,SAASiU,EAAaD,GAC3B,MAAO,CAAExV,EAAM8uB,EAAOC,EAAW/T,GAAUxF,EAAO7F,MAChD,2BAEF,MAAO,CACL3P,KAAMA,EACN8uB,MAAOA,EACPC,UAAW9T,OAAO8T,GAClBC,eAAgBC,EAAoBjU,IAQxC,SAASiU,EAAqBjU,GAC5B,IAAK,CAAE7E,EAAM+Y,EAAOC,GAAWnU,EAAOrL,MAAM,sBAE5C,OADAwf,GAAoB,MAAThZ,EAAe,GAAK,IAAsB,GAAhB8E,OAAOiU,GAAcjU,OAAOkU,IAKpD,KADejuB,EAHDiuB,GAIVjuB,GAAKA,EADxB,IAA8BA,EAtB9B,iC,6BCAO,SAAS8T,EAAQyG,GACtB,OACEA,EACG5N,OACAC,MAAM,MACNzC,IAAI2G,GAAK,IAAMA,GACf/K,KAAK,MAAQ,KANpB,iC,8BCAA,4CAEO,SAAS6c,EAAapY,EAAGiD,GAE9B,OAAO5D,YAAeW,EAAEgB,KAAMiC,EAAEjC,Q,gfC0C3B,MAAM0iB,EACXhpB,YAAaipB,GACXlvB,OAAOiV,OAAO5O,KAAM6oB,GACpB7oB,KAAK8oB,YAAc,GAGrB,gBAAsB,IAAEC,EAAF,oBAAOpd,IAAuB,qBAClDqd,IAAW,WACX,MAAMpY,EAAS,IAAIyR,IAAa0G,GAGhC,GAAc,aAFAnY,EAAOhJ,MAAM,GAAG3G,SAAS,OAGrC,OAEF,MAAMujB,EAAU5T,EAAOsJ,eACvB,GAAgB,IAAZsK,EACF,MAAM,IAAI9kB,IAASD,IAAExB,aAAc,CACjCgC,kCAAmCukB,+CAGvC,GAAIuE,EAAIhX,WAAa,WACnB,MAAM,IAAIrS,IAASD,IAAExB,aAAc,CACjCgC,QAAU,wHAId2Q,EAAO6R,KAAK7R,EAAO4R,OAAS,MAE5B,MAAM5X,EAAOgG,EAAOsJ,eACpB8O,IAAW,UACX,MAAMC,EAAS,GACf,IAAK,IAAIhwB,EAAI,EAAGA,EAAI2R,EAAM3R,IAAK,CAC7B,MAAMiwB,EAAOtY,EAAOhJ,MAAM,IAAI3G,SAAS,OACvCgoB,EAAOhwB,GAAKiwB,EAEdxlB,sBAAcslB,IAAW,UAAU5b,YACnCwD,EAAO6R,KAAK7R,EAAO4R,OAAS,EAAI5X,GAEhCoe,IAAW,WAEX,MAAMG,EAAU,IAAI/nB,IACpB,IAAK,IAAInI,EAAI,EAAGA,EAAI2R,EAAM3R,IACxBkwB,EAAQ/lB,IAAI6lB,EAAOhwB,GAAI2X,EAAOsJ,gBAEhCxW,uBAAeslB,IAAW,WAAW5b,YACrC,MAAMgc,EAAcxY,EAAOhJ,MAAM,IAAI3G,SAAS,OAE9C,OADAyC,uBAAeslB,IAAW,WAAW5b,YAC9B,IAAIwb,EAAa,CACtBK,SACAI,KAAM,GACNF,UACAC,cACAzd,yBA9CgD,GAkDpD,iBAAuB,KAAE2d,EAAF,oBAAQ3d,EAAR,QAA6BpF,EAA7B,cAAsCgjB,IAAiB,qBAC5E,MAAMC,EAAgB,CACpBC,EAAG,SACHC,EAAG,OACHC,EAAG,OACHC,EAAG,MACHC,EAAG,YACHC,EAAG,aAECC,EAAiB,GAKjBX,EAAcE,EAAK1hB,OAAO,IAAI3G,SAAS,OAEvCgoB,EAAS,GACTI,EAAO,GACPF,EAAU,IAAI/nB,IACpB,IAAI4oB,EAAmB,KACnBC,EAAc,KAClB,MAAMC,EAAQ,CACZhB,KAAM,EACNiB,UAAW,EACXhB,QAAS,EACTE,KAAM,EACN/kB,KAAM,GAER,IAAI8lB,EAAY,CACdtc,OAAQ,EACRqB,KAAM,EACNkb,KAAM,EACNvgB,IAAK,EACL,YAAa,EACb,YAAa,GAEXwgB,EAAiB,EAErB5mB,YAAI,oBACJA,YACG,8FAEHslB,IAAW,SACXA,IAAW,WACXA,IAAW,iBACLuB,YAAS,CAACjB,GAAO,EAAGxpB,OAAMmM,OAAMue,YAAWhW,SAAQiW,UAC9B,OAArBT,IAA2BA,EAAmBS,GAClD,MAAMC,EAAU7U,KAAKqF,MACS,KAA1B8O,EAAmBS,GAAcT,GAEjCU,IAAYT,IACV1jB,GACFA,EAAQokB,QAAQpB,YAAyB,CACvCqB,MAAO,oBACPC,OAAQb,EAAmBS,EAC3BK,MAAOd,EACPe,kBAAkB,IAGtBrnB,eACKgnB,OAAa7U,KAAKqF,MACnB8N,IAAW,WAAW5b,cAClBkd,MAAmBF,EAAUtc,WAAWsc,EAAUjb,SACtDib,EAAUC,SACPD,EAAUtgB,QAAQsgB,EAAU,iBAC/BA,EAAU,gBAIdA,EAAY,CACVtc,OAAQ,EACRqB,KAAM,EACNkb,KAAM,EACNvgB,IAAK,EACL,YAAa,EACb,YAAa,GAEfwgB,EAAiB,EACjBtB,IAAW,YAEbiB,EAAcS,EAIdN,EAFAne,EAAOud,EAAcvd,MAGrBqe,GAAkBxqB,EAAKiS,WAEnB,CAAC,SAAU,OAAQ,OAAQ,OAAO5G,SAASc,GAC7C8d,EAAevV,GAAU,CACvBvI,OACAuI,UAEgB,cAATvI,EACT8d,EAAevV,GAAU,CACvBvI,OACAuI,UAEgB,cAATvI,IACT8d,EAAevV,GAAU,CACvBvI,OACAuI,aAIN0V,EAAK,QAAcrU,KAAKqF,MAAM8N,IAAW,WAAW5b,UAEpD1J,YAAI,kBACJslB,IAAW,QAEX,MAAMgC,EAAcrxB,OAAO0G,KAAK0pB,GAAgBllB,IAAI4P,QACpD,IAAK,MAAOxb,EAAGia,KAAU8X,EAAYpe,UAAW,CAC9C,MAAMuG,EACJla,EAAI,IAAM+xB,EAAYzhB,OAAS+f,EAAKvX,WAAa,GAAKiZ,EAAY/xB,EAAI,GAClES,EAAIqwB,EAAe7W,GACnB+X,EAAMC,IAAMhX,IAAIoV,EAAK1hB,MAAMsL,EAAOC,MAAU,EAClDzZ,EAAEyZ,IAAMA,EACRzZ,EAAEuxB,IAAMA,EAEVf,EAAK,KAAWrU,KAAKqF,MAAM8N,IAAW,QAAQ5b,UAG9C,MAAMrS,EAAI,IAAI6tB,EAAa,CACzBU,KAAM3kB,QAAQoG,QAAQue,GACtBF,cACAC,OACAJ,SACAE,UACAxd,wBAIFjI,YAAI,oBACJA,YAAK,iEACLslB,IAAW,WACXiB,EAAc,KACd,IAAIkB,EAAQ,EACRC,EAAmB,EACnBC,EAAqB,EACzB,MAAMC,EAAc,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChDC,EAAiB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzD,IAAK,IAAI/W,KAAUuV,EAAgB,CACjCvV,EAASC,OAAOD,GAChB,MAAMkW,EAAU7U,KAAKqF,MAAiB,IAAViQ,IAAiBnB,GACzCU,IAAYT,IACdvmB,eACKgnB,OAAa7U,KAAKqF,MACnB8N,IAAW,WAAW5b,cAClBge,MAAqBC,KAEzB9kB,GACFA,EAAQokB,QAAQpB,YAAyB,CACvCqB,MAAO,mBACPC,OAAQM,EACRL,MAAOd,EACPe,kBAAkB,IAGtB/B,IAAW,WACXoC,EAAmB,EACnBC,EAAqB,GAEvBpB,EAAcS,EAEd,MAAMhxB,EAAIqwB,EAAevV,GACzB,IAAI9a,EAAEqO,IACN,IACEhN,EAAEywB,UAAY,EACdzwB,EAAE0wB,kBAAoB,EACtBzC,IAAW,aACX,MAAM,KAAE/c,EAAF,OAAQtR,SAAiBI,EAAEovB,UAAU,CAAEjX,MAAOsB,IAC9CkX,EAAO1C,IAAW,aAAa5b,SACrC8c,EAAMC,WAAauB,EACnBN,GAAoBrwB,EAAEywB,UACtBH,GAAsBtwB,EAAE0wB,kBACxBH,EAAYvwB,EAAEywB,YAAcE,EAC5BH,EAAexwB,EAAEywB,YAAc,EAC/BxC,IAAW,QACX,MAAMjhB,QAAYiE,YAAOE,IAAU2W,KAAK,CAAE5W,OAAMtR,YAChDuvB,EAAMhB,MAAQF,IAAW,QAAQ5b,SACjC1T,EAAEqO,IAAMA,EACRkhB,EAAOxe,KAAK1C,GACZohB,EAAQ/lB,IAAI2E,EAAKyM,GACjB6U,EAAKthB,GAAOrO,EAAEuxB,IACd,MAAOznB,GACPE,YAAI,QAASF,GACb,UAIJwlB,IAAW,QACXC,EAAO3kB,OACP4lB,EAAK,KAAWrU,KAAKqF,MAAM8N,IAAW,QAAQ5b,UAC9C,MAAMue,EAAmB3C,IAAW,SAAS5b,SAiB7C,OAhBA8c,EAAMhB,KAAOrT,KAAKqF,MAAMgP,EAAMhB,MAC9BgB,EAAMC,UAAYtU,KAAKqF,MAAMgP,EAAMC,WACnCD,EAAM0B,KAAO/V,KAAKqF,MAChBvhB,OAAOwG,OAAO+pB,GAAOjlB,OAAO,CAACC,EAAGiD,IAAMjD,EAAIiD,EAAGwjB,IAE/CjoB,YAAI/J,OAAO0G,KAAK6pB,GAAOzpB,KAAK,OAC5BiD,YAAI/J,OAAOwG,OAAO+pB,GAAOzpB,KAAK,OAC9BiD,YAAI,aACJA,YAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAIjD,KAAK,OAChDiD,YAAI6nB,EAAe3jB,MAAM,EAAG,IAAInH,KAAK,OACrCiD,YACE4nB,EACGzmB,IAAIgR,KAAKqF,OACTtT,MAAM,EAAG,IACTnH,KAAK,OAEH1F,GAjNqE,GAoNxE8wB,WAAY,gCAChB,MAAM1F,EAAU,GACVpiB,EAAQ,CAACkR,EAAK1P,KAClB4gB,EAAQ1b,KAAK5G,EAAOC,KAAKmR,EAAK1P,KAGhCxB,EAAM,WAAY,OAElBA,EAAM,WAAY,OAElB,MAAM+nB,EAAe,IAAIzJ,IAAaxe,EAAO+S,MAAM,OACnD,IAAK,IAAI3d,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC5B,IAAIkyB,EAAQ,EACZ,IAAK,MAAMjC,KAAQ,EAAKD,OAClBnY,SAASoY,EAAKthB,MAAM,EAAG,GAAI,KAAO3O,GAAGkyB,IAE3CW,EAAaxQ,cAAc6P,GAE7BhF,EAAQ1b,KAAKqhB,EAAaloB,QAE1B,IAAK,MAAMslB,KAAQ,EAAKD,OACtBllB,EAAMmlB,EAAM,OAGd,MAAM6C,EAAa,IAAI1J,IAAaxe,EAAO+S,MAA2B,EAArB,EAAKqS,OAAO1f,SAC7D,IAAK,MAAM2f,KAAQ,EAAKD,OACtB8C,EAAWzQ,cAAc,EAAK+N,KAAKH,IAErC/C,EAAQ1b,KAAKshB,EAAWnoB,QAExB,MAAMooB,EAAgB,IAAI3J,IAAaxe,EAAO+S,MAA2B,EAArB,EAAKqS,OAAO1f,SAChE,IAAK,MAAM2f,KAAQ,EAAKD,OACtB+C,EAAc1Q,cAAc,EAAK6N,QAAQrvB,IAAIovB,IAE/C/C,EAAQ1b,KAAKuhB,EAAcpoB,QAE3BG,EAAM,EAAKqlB,YAAa,OAExB,MAAM6C,EAAcpoB,EAAOuB,OAAO+gB,GAC5Brb,QAAYkB,YAAOigB,GACnBC,EAAYroB,EAAO+S,MAAM,IAE/B,OADAsV,EAAUnoB,MAAM+G,EAAK,OACdjH,EAAOuB,OAAO,CAAC6mB,EAAaC,KA1CnB,GA6CZC,MAAM,KAAE7C,IAAQ,gCACpB,EAAKA,KAAOA,GADQ,GAIhB8C,SAAU,gCACd,EAAK9C,KAAO,MADE,GAIV3lB,MAAM,IAAEoE,IAAO,gCACnB,IAAK,EAAKohB,QAAQrvB,IAAIiO,GAAM,CAC1B,GAAI,EAAK4D,oBAEP,OADA,EAAK8f,oBACE,EAAK9f,oBAAoB5D,GAEhC,MAAM,IAAIrI,IAASD,IAAExB,aAAc,CACjCgC,iCAAkC8H,oBAIxC,MAAMmL,EAAQ,EAAKiW,QAAQrvB,IAAIiO,GAC/B,OAAO,EAAKoiB,UAAU,CAAEjX,WAZL,GAefiX,WAAW,MAAEjX,IAAS,gCAC1B,GAAI,EAAK4V,YAAY5V,GACnB,OAAOvZ,OAAOiV,OAAO,GAAI,EAAKka,YAAY5V,IAE5C,EAAKsY,YASL,IAAK,EAAKlC,KACR,MAAM,IAAI5pB,IAASD,IAAExB,aAAc,CACjCgC,QACE,0EAGN,MAAMosB,SAAa,EAAK/C,MAAM1hB,MAAMsL,GAC9BtC,EAAS,IAAIyR,IAAagK,GAC1BrO,EAAOpN,EAAOmJ,YAEduS,EAAe,IAAPtO,EACd,IAAI/R,EAnBU,CACZ,GAAW,SACX,GAAW,OACX,GAAW,OACX,GAAW,MACX,GAAW,YACX,IAAW,aAaIqgB,GACjB,QAAa7qB,IAATwK,EACF,MAAM,IAAIvM,IAASD,IAAExB,aAAc,CACjCgC,QAAS,wBAA0BqsB,EAAMrrB,SAAS,KAKtD,MAAMsrB,EAAkB,GAAPvO,EACjB,IAAIzU,EAASgjB,EAGY,IAAPvO,IAEhBzU,EAlYN,SAA4BqH,EAAQ4b,GAClC,IAAIpsB,EAASosB,EACTrM,EAAQ,EACRnC,EAAO,KACX,GAEE5d,IAAkB,KADlB4d,EAAOpN,EAAOmJ,eACmBoG,EACjCA,GAAS,QACK,IAAPnC,GACT,OAAO5d,EAyXMqsB,CAAkB7b,EAAQ2b,IAErC,IAAIG,EAAO,KACP/xB,EAAS,KAEb,GAAa,cAATsR,EAAsB,CACxB,MAAMuI,EA7ZZ,SAAuB5D,GACrB,MAAMmI,EAAQ,GACd,IAAIiF,EAAO,EACP2O,EAAY,EAChB,EAAG,CAGD,MAAMC,EAAmB,KAFzB5O,EAAOpN,EAAOmJ,aAGdhB,EAAMtO,KAAKmiB,GAGXD,EAAmB,IAAP3O,QACL2O,GAIT,OAAO5T,EAAM9T,OAAO,CAACC,EAAGiD,IAAQjD,EAAI,GAAM,EAAKiD,GAAI,GA6YhC0kB,CAAajc,GACtBkc,EAAa5Z,EAAQsB,IACvB7Z,OAAQ+xB,EAAMzgB,cAAe,EAAKke,UAAU,CAAEjX,MAAO4Z,KAE3D,GAAa,cAAT7gB,EAAsB,CACxB,MAAMlE,EAAM6I,EAAOhJ,MAAM,IAAI3G,SAAS,SAClCtG,OAAQ+xB,EAAMzgB,cAAe,EAAKtI,KAAK,CAAEoE,SAG/C,MAAMnE,EAASyoB,EAAIzkB,MAAMgJ,EAAO4R,QAGhC,IAFA7nB,EAASkJ,EAAOC,KAAKgI,IAAKC,QAAQnI,KAEvBmO,aAAexI,EACxB,MAAM,IAAI7J,IAASD,IAAExB,aAAc,CACjCgC,qDAAsDsJ,uBAA4B5O,EAAOoX,eAW7F,OARI2a,IACF/xB,EAASkJ,EAAOC,KAAKipB,IAAWpyB,EAAQ+xB,KAGtC,EAAKlB,UAAY,IAEnB,EAAK1C,YAAY5V,GAAS,CAAEjH,OAAMtR,WAE7B,CAAEsR,OAAMP,OAAQ,UAAW/Q,WArER,O,sDC9X9B,mDAGO,SAASmkB,EAAc7W,EAAOuW,GAGnC,MAAMvH,EAAIsK,YAAetZ,GACnBjN,EAAIumB,YAAe/C,GACnBwO,EACJ/V,EAAE7c,OAASY,EAAEZ,MACb6c,EAAE2K,eAAiB5mB,EAAE4mB,cACrB3K,EAAEuK,eAAiBxmB,EAAEwmB,cACrBvK,EAAEkL,MAAQnnB,EAAEmnB,KACZlL,EAAEmL,MAAQpnB,EAAEonB,KACZnL,EAAEgL,MAAQjnB,EAAEinB,KACZhL,EAAErM,OAAS5P,EAAE4P,KAKf,OAHIoiB,GAAatpB,IAAIupB,SACnBxpB,QAAQypB,MAAM,CAACC,EAAgBlW,GAAIkW,EAAgBnyB,KAE9CgyB,EAGT,SAASG,EAAiBlW,GACxB,MAAO,CACL7c,KAAM6c,EAAE7c,KACRwnB,aAAc3K,EAAE2K,aAChBJ,aAAcvK,EAAEuK,aAChBW,IAAKlL,EAAEkL,IACPC,IAAKnL,EAAEmL,IACPH,IAAKhL,EAAEgL,IACPrX,KAAMqM,EAAErM,Q,gEC/BL,SAASwiB,EAAoBC,GAMlC,IAAIC,EAAWD,EAAIlkB,MAAM,yBACzB,GAAgB,MAAZmkB,EAAkB,OAAO,KAC7BA,EAAWA,EAAS,GACpB,MAAOC,EAAUC,GAAYF,EAAShmB,MAAM,KAE5C,MAAO,CAAE+lB,IADTA,EAAMA,EAAI1sB,WAAW2sB,KAAa,IACpBC,WAAUC,Y,6XCE1B,MAAMC,EAAc,CAACC,EAAWL,IAC9BK,EAAUnlB,SAAS,QACZmlB,IAAYL,OACZK,KAAaL,EAAI1sB,QAAQ,eAAgB,MAE3C,MAAMgtB,EACX,sBAA6B,qBAC3B,MAAO,CAAC,WAAY,YADO,GAI7B,iBAAuB,KACrB3mB,EADqB,UAErB0mB,EAFqB,QAGrBE,EAHqB,IAIrBP,EAJqB,YAKrBQ,EALqB,KAMrBC,EANqB,QAOrB1f,IACC,qBACD,MAAM2f,EAAWV,EAEZA,EAAI9kB,SAAS,SAAYslB,IAAaR,EAAMA,GAAO,QACxD,MAAMW,EAAUZ,EAAmBC,GAC/BW,IACFX,EAAMW,EAAQX,IAOTS,EAAKG,eACRH,EAAKP,SAAWO,EAAKP,UAAYS,EAAQT,SACzCO,EAAKN,SAAWM,EAAKN,UAAYQ,EAAQR,WAGzCE,IACFL,EAAMI,EAAYC,EAAWL,IAG/B,MAAM5mB,EAAOM,IAAMjN,IAAIkN,GAAMlN,IAAI,SAAWo0B,KAOtB,oBAAX9d,QAA0Bsd,KACnCtf,EAAQ,cAAgBA,EAAQ,eAAiBmW,IAAIE,OAOvD,MAAM0J,EAAQC,YAAuCN,IAAQE,GACzDG,IACF/f,EAAO,cAAoBigB,YAAyBF,IAEtD,IAAIppB,QAAY0B,EAAK,CACnBO,OACAN,OAAQ,MACR2mB,OAAQA,uBAAyBO,IACjCxf,YAEF,GAAuB,MAAnBrJ,EAAIupB,YAAsBvnB,IAAMjN,IAAIkN,GAAMrF,IAAI,qBAAsB,CAEtE,MAAM2E,EAAoBS,IAAMjN,IAAIkN,GAAMlN,IAAI,qBAC9Cg0B,QAAaxnB,EAAkBiR,KAAK,CAAE8V,IAAKU,IAC3C,MAAMI,EAAQC,YAAuCN,GACjDK,IACF/f,EAAO,cAAoBigB,YAAyBF,IAS/B,OAPvBppB,QAAY0B,EAAK,CACfO,OACAN,OAAQ,MACR2mB,OAAQA,uBAAyBO,IACjCxf,aAGMkgB,iBACAhoB,EAAkBioB,SAAS,CAAElB,IAAKU,EAAUD,SACtB,MAAnB/oB,EAAIupB,mBACPhoB,EAAkBkoB,SAAS,CAAEnB,IAAKU,EAAUD,UAGtD,GAAuB,MAAnB/oB,EAAIupB,WACN,MAAM,IAAI5uB,IAASD,IAAE7B,UAAW,CAC9B0wB,WAAYvpB,EAAIupB,WAChBG,cAAe1pB,EAAI0pB,gBAIvB,GACE1pB,EAAIqJ,QAAQ,mCAAqCwf,kBACjD,CACA,MAAMc,QAAmBC,YAAoB5pB,EAAI6pB,KAAM,CAAEhB,YAEzD,OADAc,EAAWZ,KAAOA,EACXY,EACF,CAIL,MAAM5uB,QAAammB,YAAQlhB,EAAI6pB,MACzBC,EAAW/uB,EAAKmB,SAAS,QACzB6tB,EACJD,EAAStlB,OAAS,IAAMslB,EAAWA,EAASjnB,MAAM,EAAG,KAAO,MAE9D,IACE,MAAM8mB,QAAmBC,YAAoB,CAAC7uB,GAAO,CAAE8tB,YAEvD,OADAc,EAAWZ,KAAOA,EACXY,EACP,MAAOzX,GACP,MAAM,IAAIvX,IAASD,IAAE/C,8BAA+B,CAClDoyB,UACAD,gBAjGL,GAuGH,gBAAsB,KACpB7nB,EADoB,QAEpBT,EAFoB,cAGpBgjB,EAHoB,UAIpBmE,EAJoB,QAKpBE,EALoB,IAMpBP,EANoB,YAOpBQ,EAPoB,KAQpBC,EARoB,KASpBc,EAToB,QAUpBxgB,IACC,qBAEIif,EAAI9kB,SAAS,SAAYslB,IAAaR,EAAMA,GAAO,QACxD,MAAMW,EAAUZ,EAAmBC,GAC/BW,IACFX,EAAMW,EAAQX,IAIdS,EAAKP,SAAWO,EAAKP,UAAYS,EAAQT,SACzCO,EAAKN,SAAWM,EAAKN,UAAYQ,EAAQR,UAEvCE,IACFL,EAAMI,EAAYC,EAAWL,IAE/Bjf,EAAQ,iCAAmCwf,YAC3Cxf,EAAO,wBAA8Bwf,WAErC,MAAMnnB,EAAOM,IAAMjN,IAAIkN,GAAMlN,IAAI,SAAWo0B,KAMtB,oBAAX9d,QAA0Bsd,KACnCtf,EAAQ,cAAgBA,EAAQ,eAAiBmW,IAAIE,QAOvDqJ,EAAOM,YAAuCN,IAAQE,MAEpD5f,EAAO,cAAoBigB,YAAyBP,IAEtD,MAAM/oB,QAAY0B,EAAK,CACrBO,OACAT,UACAgjB,gBACA7iB,OAAQ,OACR2mB,OAAQA,KAAOO,IACfgB,OACAxgB,YAEF,GAAuB,MAAnBrJ,EAAIupB,WACN,MAAM,IAAI5uB,IAASD,IAAE7B,UAAW,CAC9B0wB,WAAYvpB,EAAIupB,WAChBG,cAAe1pB,EAAI0pB,gBAGvB,OAAO1pB,GAnDN,M,6BChJLrM,EAAOD,QAAU,EAAQ,M,6BCDlB,SAAS2W,GAAc,KAAE5V,EAAF,MAAQ8uB,EAAR,UAAeC,EAAf,eAA0BC,IAEtD,SAAUhvB,MAAS8uB,MAAUC,KAD7BC,EAQF,SAA+BG,GAC7B,MAAMhZ,EAWR,SAAqBjV,GACnB,OAAOmb,KAAKlG,KAAKjV,KAAOf,OAAOo1B,GAAGr0B,GAAI,IAAM,EAAI,GAZnCs0B,EAeet0B,EAfgBiuB,EAgB/B,IAANjuB,EAAUA,GAAKA,IADxB,IAA8BA,EAd5BiuB,EAAU9S,KAAKoZ,IAAItG,GACnB,MAAMD,EAAQ7S,KAAKqF,MAAMyN,EAAU,IACnCA,GAAmB,GAARD,EACX,IAAIwG,EAAWxuB,OAAOgoB,GAClByG,EAAazuB,OAAOioB,GACpBuG,EAAS3lB,OAAS,IAAG2lB,EAAW,IAAMA,GACtCC,EAAW5lB,OAAS,IAAG4lB,EAAa,IAAMA,GAC9C,QAAkB,IAAVxf,EAAc,IAAM,KAAOuf,EAAWC,EAjB7BC,CAAqB5G,KADxC,iC,6BCAA,mDAIO,SAAS4F,GACd,SAAEb,EAAF,SAAYC,EAAZ,MAAsB6B,EAAtB,aAA6BpB,GAAiB,GAC9CqB,GAAqB,GAUrB,OALY,GAAG/B,IAAYC,IAAY6B,IAASpB,GAC7CppB,IAAI4P,QACJhU,KAAK,KAIN,IAAK,OAAQ,OAAO,KACpB,IAAK,OACH,GAAI6uB,EAAoB,MAAO,CAAE/B,WAAUC,SAAU,IAChD,MAAM,IAAI9tB,IAASD,IAAEtB,2BAC5B,IAAK,OAAQ,MAAM,IAAIuB,IAASD,IAAErB,sBAClC,IAAK,OAAQ,MAAO,CAAEmvB,WAAUC,YAChC,IAAK,OAAQ,MAAO,CAAED,SAAU8B,EAAO7B,SAAU,IACjD,IAAK,OAAQ,MAAO,CAAED,WAAUC,SAAU6B,GAC1C,IAAK,OAAQ,MAAM,IAAI3vB,IAASD,IAAEpB,uBAClC,IAAK,OAAQ,MAAM,IAAIqB,IAASD,IAAEnB,+BAClC,IAAK,OAAQ,MAAM,IAAIoB,IAASD,IAAElB,mBAClC,IAAK,OAAQ,MAAM,IAAImB,IAASD,IAAEjB,0CAClC,IAAK,OAAQ,MAAM,IAAIkB,IAASD,IAAEhB,0CAClC,IAAK,OAAQ,MAAM,IAAIiB,IAASD,IAAEf,kDAClC,IAAK,OAAQ,OAAO6wB,YAAOtB,EAAcoB,GACzC,IAAK,OAAQ,MAAM,IAAI3vB,IAASD,IAAEd,mCAClC,IAAK,OAAQ,MAAM,IAAIe,IAASD,IAAEb,mCAClC,IAAK,OAAQ,MAAM,IAAIc,IAASD,IAAEZ,8C,8BClCtC,YAAO,SAASwvB,GAA0B,SAAEd,EAAF,SAAYC,IACpD,eAAgB3pB,EAAOC,QAAQypB,KAAYC,KAAYvsB,SAAS,YADlE,kC,+MCAO,MAAMuuB,EACX5vB,cACEI,KAAKyvB,OAAS,GAGhB1rB,MAAOigB,GACL,GAAIhkB,KAAK0vB,OACP,MAAM/vB,MAAM,2DAEd,GAAIK,KAAK2vB,SAAU,CACjB,MAAM5kB,EAAU/K,KAAK2vB,SACrB3vB,KAAK2vB,SAAW,KAChB5kB,EAAQ,CAAE7Q,MAAO8pB,SAEjBhkB,KAAKyvB,OAAOhlB,KAAKuZ,GAIrB7Q,MAEE,GADAnT,KAAK0vB,QAAS,EACV1vB,KAAK2vB,SAAU,CACjB,MAAM5kB,EAAU/K,KAAK2vB,SACrB3vB,KAAK2vB,SAAW,KAChB5kB,EAAQ,CAAEyb,MAAM,KAIpBoJ,QAASpsB,GACPxD,KAAK0vB,QAAS,EACd1vB,KAAKogB,MAAQ5c,EAGTijB,OAAQ,I,EAAA,c,EAAA,YACZ,GAAI,EAAKgJ,OAAOlmB,OAAS,EACvB,MAAO,CAAErP,MAAO,EAAKu1B,OAAOtP,SAE9B,GAAI,EAAKuP,OACP,MAAO,CAAElJ,MAAM,GAEjB,GAAI,EAAKmJ,SACP,MAAMhwB,MACJ,sEAGJ,OAAO,IAAIgF,QAAQoG,IACjB,EAAK4kB,SAAW5kB,K,gMC5CtB,IAOI8kB,EACAC,EARA7f,EAAUvX,EAAOD,QAAU,GAU/B,SAASs3B,IACL,MAAM,IAAIpwB,MAAM,mCAEpB,SAASqwB,IACL,MAAM,IAAIrwB,MAAM,qCAsBpB,SAASswB,EAAWC,GAChB,GAAIL,IAAqB7pB,WAErB,OAAOA,WAAWkqB,EAAK,GAG3B,IAAKL,IAAqBE,IAAqBF,IAAqB7pB,WAEhE,OADA6pB,EAAmB7pB,WACZA,WAAWkqB,EAAK,GAE3B,IAEI,OAAOL,EAAiBK,EAAK,GAC/B,MAAMjZ,GACJ,IAEI,OAAO4Y,EAAiBz2B,KAAK,KAAM82B,EAAK,GAC1C,MAAMjZ,GAEJ,OAAO4Y,EAAiBz2B,KAAK4G,KAAMkwB,EAAK,MAvCnD,WACG,IAEQL,EADsB,mBAAf7pB,WACYA,WAEA+pB,EAEzB,MAAO9Y,GACL4Y,EAAmBE,EAEvB,IAEQD,EADwB,mBAAjBnqB,aACcA,aAEAqqB,EAE3B,MAAO/Y,GACL6Y,EAAqBE,GAjB7B,GAwEA,IAEIG,EAFAC,EAAQ,GACRC,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaF,IAGlBE,GAAW,EACPF,EAAa5mB,OACb6mB,EAAQD,EAAa/qB,OAAOgrB,GAE5BE,GAAc,EAEdF,EAAM7mB,QACNinB,KAIR,SAASA,IACL,IAAIH,EAAJ,CAGA,IAAII,EAAUR,EAAWM,GACzBF,GAAW,EAGX,IADA,IAAI/d,EAAM8d,EAAM7mB,OACV+I,GAAK,CAGP,IAFA6d,EAAeC,EACfA,EAAQ,KACCE,EAAahe,GACd6d,GACAA,EAAaG,GAAYI,MAGjCJ,GAAc,EACdhe,EAAM8d,EAAM7mB,OAEhB4mB,EAAe,KACfE,GAAW,EAnEf,SAAyBM,GACrB,GAAIb,IAAuBnqB,aAEvB,OAAOA,aAAagrB,GAGxB,IAAKb,IAAuBE,IAAwBF,IAAuBnqB,aAEvE,OADAmqB,EAAqBnqB,aACdA,aAAagrB,GAExB,IAEWb,EAAmBa,GAC5B,MAAO1Z,GACL,IAEI,OAAO6Y,EAAmB12B,KAAK,KAAMu3B,GACvC,MAAO1Z,GAGL,OAAO6Y,EAAmB12B,KAAK4G,KAAM2wB,KAgD7CC,CAAgBH,IAiBpB,SAASI,EAAKX,EAAKre,GACf7R,KAAKkwB,IAAMA,EACXlwB,KAAK6R,MAAQA,EAYjB,SAASif,KA5BT7gB,EAAQ8gB,SAAW,SAAUb,GACzB,IAAIlgB,EAAO,IAAIzP,MAAM0X,UAAU1O,OAAS,GACxC,GAAI0O,UAAU1O,OAAS,EACnB,IAAK,IAAItQ,EAAI,EAAGA,EAAIgf,UAAU1O,OAAQtQ,IAClC+W,EAAK/W,EAAI,GAAKgf,UAAUhf,GAGhCm3B,EAAM3lB,KAAK,IAAIomB,EAAKX,EAAKlgB,IACJ,IAAjBogB,EAAM7mB,QAAiB8mB,GACvBJ,EAAWO,IASnBK,EAAKh2B,UAAU61B,IAAM,WACjB1wB,KAAKkwB,IAAIzZ,MAAM,KAAMzW,KAAK6R,QAE9B5B,EAAQ+gB,MAAQ,UAChB/gB,EAAQghB,SAAU,EAClBhhB,EAAQC,IAAM,GACdD,EAAQihB,KAAO,GACfjhB,EAAQuU,QAAU,GAClBvU,EAAQkhB,SAAW,GAInBlhB,EAAQkU,GAAK2M,EACb7gB,EAAQmhB,YAAcN,EACtB7gB,EAAQohB,KAAOP,EACf7gB,EAAQqhB,IAAMR,EACd7gB,EAAQshB,eAAiBT,EACzB7gB,EAAQuhB,mBAAqBV,EAC7B7gB,EAAQ0a,KAAOmG,EACf7gB,EAAQwhB,gBAAkBX,EAC1B7gB,EAAQyhB,oBAAsBZ,EAE9B7gB,EAAQ0hB,UAAY,SAAUn4B,GAAQ,MAAO,IAE7CyW,EAAQ2hB,QAAU,SAAUp4B,GACxB,MAAM,IAAImG,MAAM,qCAGpBsQ,EAAQ4hB,IAAM,WAAc,MAAO,KACnC5hB,EAAQ6hB,MAAQ,SAAUrtB,GACtB,MAAM,IAAI9E,MAAM,mCAEpBsQ,EAAQ8hB,MAAQ,WAAa,OAAO,I,yOC3K7B,MAAMC,EACX,kBACExwB,GAAImH,EADkB,IAEtBlE,EAFsB,OAGtBmE,EAASnI,YAAKgE,EAAK,QAHG,SAItBnB,IACC,O,EAAA,YACD,MAAM9B,EAAK,IAAID,IAAWoH,GAE1B,GAA2B,SAAvB+b,YAASphB,GAAsB,OAAO,EAE1C,GAAiB,MAAbA,EAAkB,OAAO,EAE7B,MAAM2uB,EAAQ,CACZ,CACEC,UAAWzxB,YAAKgE,EAAK,cACrBnB,aAGE6uB,EAAS7uB,EAASgE,MAAM,KAC9B,IAAK,IAAIrO,EAAI,EAAGA,EAAIk5B,EAAO5oB,OAAQtQ,IAAK,CACtC,MAAMm5B,EAASD,EAAOvqB,MAAM,EAAG3O,GAAGwH,KAAK,KACjC+J,EAAO2nB,EAAOvqB,MAAM3O,GAAGwH,KAAK,KAClCwxB,EAAMxnB,KAAK,CACTynB,UAAWzxB,YAAKgE,EAAK2tB,EAAQ,cAC7B9uB,SAAUkH,IAGd,IAAI6nB,GAAgB,EACpB,IAAK,MAAMt3B,KAAKk3B,EAAO,CACrB,IAAIznB,EACJ,IACEA,QAAahJ,EAAGmC,KAAK5I,EAAEm3B,UAAW,QAClC,MAAO1uB,GACP,GAAiB,UAAbA,EAAI3D,KAAkB,SAE5B,MAAMyyB,EAAMC,MAAS1L,IAAIrc,GAInBgoB,EAAYvuB,YAAQlJ,EAAEuI,UAC5B,GAAkB,MAAdkvB,GAAqBF,EAAIG,QAAQD,GAAY,OAAO,EAGtDH,EADEA,GACeC,EAAI9qB,KAAKzM,EAAEuI,UAAUovB,UAEtBJ,EAAI9qB,KAAKzM,EAAEuI,UAAUqvB,QAGzC,OAAON,G,qNC7DX,oDAcO,SAASO,EAAkCrnB,GAChD,MAAMsnB,EAAS,IAAIzxB,IACbgB,EAAQ,SAAU5I,GACtB,IAAKq5B,EAAOlxB,IAAInI,GAAO,CACrB,MAAMiL,EAAM,CACVwH,KAAM,OACNkZ,SAAU3rB,EACVkrB,SAAUA,YAASlrB,GACnBs5B,SAAU,GACVtL,SAAU,IAEZqL,EAAOzvB,IAAI5J,EAAMiL,GAIjBA,EAAIN,OAAS/B,EAAM6B,YAAQzK,IACvBiL,EAAIN,QAAUM,EAAIN,SAAWM,GAAKA,EAAIN,OAAOqjB,SAAS/c,KAAKhG,GAEjE,OAAOouB,EAAO/4B,IAAIN,IAGdu5B,EAAS,SAAUv5B,EAAMs5B,GAC7B,IAAKD,EAAOlxB,IAAInI,GAAO,CACrB,MAAMgR,EAAO,CACXyB,KAAM,OACNkZ,SAAU3rB,EACVkrB,SAAUA,YAASlrB,GACnBs5B,SAAUA,EAEV3uB,OAAQ/B,EAAM6B,YAAQzK,IACtBguB,SAAU,IAERhd,EAAKrG,QAAQqG,EAAKrG,OAAOqjB,SAAS/c,KAAKD,GAC3CqoB,EAAOzvB,IAAI5J,EAAMgR,GAEnB,OAAOqoB,EAAO/4B,IAAIN,IAGpB4I,EAAM,KACN,IAAK,MAAMoI,KAAQe,EACjBwnB,EAAOvoB,EAAKtE,KAAMsE,GAEpB,OAAOqoB,I,6BCxDT,2CAOO,SAAStD,EAAQyD,EAAS3D,GAC/B,OAAQ2D,GACN,IAAK,SACH,MAAO,CACLzF,SAAU8B,EACV7B,SAAU,iBAEd,IAAK,YACH,MAAO,CACLD,SAAU,iBACVC,SAAU6B,GAEd,IAAK,YACH,MAAO,CACL9B,SAAU,eACVC,SAAU6B,GAEd,IAAK,SACH,MAAO,CACL9B,SAAU,SACVC,SAAU6B,GAEd,QACE,MAAM,IAAI3vB,IAASD,IAAEvB,oBAAqB,CAAE80B,e,yMCL3C,MAAMC,EACX,aAAc5S,GACZ,MAAM1c,EAAO6M,IAAW0iB,aAAa7S,GAE/B8S,EAAc,IAAI3D,IAClB4D,EAAW,IAAI5D,IACf6D,EAAW,IAAI7D,IAEf8D,EAAO,e,EAAA,G,EAAG,YACd,MAAM/rB,QAAa5D,IAEnB,GAAa,OAAT4D,EAAe,OAAO+rB,IAE1B,IAAa,IAAT/rB,EAIF,OAHA4rB,EAAYhgB,MACZkgB,EAASlgB,WACTigB,EAASjgB,MAIX,OAAQ5L,EAAK,IACX,KAAK,EACH6rB,EAASrvB,MAAMwD,EAAKK,MAAM,IAC1B,MACF,KAAK,EACHyrB,EAAStvB,MAAMwD,EAAKK,MAAM,IAC1B,MACF,KAAK,EACH,MAAMwY,EAAQ7Y,EAAKK,MAAM,GAGzB,OAFAyrB,EAAStvB,MAAMqc,QACfgT,EAASxD,QAAQ,IAAIjwB,MAAMygB,EAAMnf,SAAS,UAE5C,QAEEkyB,EAAYpvB,MAAMwD,EAAKK,MAAM,IAIjC0rB,K,6KA9BW,qDAiCb,OADAA,IACO,CACLH,cACAC,WACAC,e,gBC5DN,IAAIE,EAAW,EAAQ,KACnB5V,EAAO,EAAQ,KACf9Z,EAAS,EAAQ,IAAeA,OAEhC2vB,EAAI,CACN,WAAY,YAAY,YAAgB,WAGtCC,EAAI,IAAIlzB,MAAM,IAElB,SAASmzB,IACP1zB,KAAK2zB,OACL3zB,KAAK4zB,GAAKH,EAEV9V,EAAKvkB,KAAK4G,KAAM,GAAI,IAmBtB,SAAS6zB,EAAOpJ,GACd,OAAQA,GAAO,EAAMA,IAAQ,GAG/B,SAASqJ,EAAQrJ,GACf,OAAQA,GAAO,GAAOA,IAAQ,EAGhC,SAASsJ,EAAI/4B,EAAGmN,EAAG7O,EAAGC,GACpB,OAAU,IAANyB,EAAiBmN,EAAI7O,GAAQ6O,EAAK5O,EAC5B,IAANyB,EAAiBmN,EAAI7O,EAAM6O,EAAI5O,EAAMD,EAAIC,EACtC4O,EAAI7O,EAAIC,EA3BjBg6B,EAASG,EAAM/V,GAEf+V,EAAK74B,UAAU84B,KAAO,WAOpB,OANA3zB,KAAKoI,GAAK,WACVpI,KAAKqI,GAAK,WACVrI,KAAKg0B,GAAK,WACVh0B,KAAKi0B,GAAK,UACVj0B,KAAKk0B,GAAK,WAEHl0B,MAqBT0zB,EAAK74B,UAAUs5B,QAAU,SAAUC,GASjC,IARA,IAnBc3J,EAmBVgJ,EAAIzzB,KAAK4zB,GAET1uB,EAAc,EAAVlF,KAAKoI,GACTD,EAAc,EAAVnI,KAAKqI,GACT/O,EAAc,EAAV0G,KAAKg0B,GACTz6B,EAAc,EAAVyG,KAAKi0B,GACThd,EAAc,EAAVjX,KAAKk0B,GAEJj7B,EAAI,EAAGA,EAAI,KAAMA,EAAGw6B,EAAEx6B,GAAKm7B,EAAE1Z,YAAgB,EAAJzhB,GAClD,KAAOA,EAAI,KAAMA,EAAGw6B,EAAEx6B,IA5BRwxB,EA4BmBgJ,EAAEx6B,EAAI,GAAKw6B,EAAEx6B,EAAI,GAAKw6B,EAAEx6B,EAAI,IAAMw6B,EAAEx6B,EAAI,MA3B1D,EAAMwxB,IAAQ,GA6B7B,IAAK,IAAInW,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAItZ,KAAOsZ,EAAI,IACXna,EAAK05B,EAAM3uB,GAAK6uB,EAAG/4B,EAAGmN,EAAG7O,EAAGC,GAAK0d,EAAIwc,EAAEnf,GAAKkf,EAAEx4B,GAAM,EAExDic,EAAI1d,EACJA,EAAID,EACJA,EAAIw6B,EAAO3rB,GACXA,EAAIjD,EACJA,EAAI/K,EAGN6F,KAAKoI,GAAMlD,EAAIlF,KAAKoI,GAAM,EAC1BpI,KAAKqI,GAAMF,EAAInI,KAAKqI,GAAM,EAC1BrI,KAAKg0B,GAAM16B,EAAI0G,KAAKg0B,GAAM,EAC1Bh0B,KAAKi0B,GAAM16B,EAAIyG,KAAKi0B,GAAM,EAC1Bj0B,KAAKk0B,GAAMjd,EAAIjX,KAAKk0B,GAAM,GAG5BR,EAAK74B,UAAUw5B,MAAQ,WACrB,IAAIC,EAAIzwB,EAAO6N,YAAY,IAQ3B,OANA4iB,EAAEvY,aAAuB,EAAV/b,KAAKoI,GAAQ,GAC5BksB,EAAEvY,aAAuB,EAAV/b,KAAKqI,GAAQ,GAC5BisB,EAAEvY,aAAuB,EAAV/b,KAAKg0B,GAAQ,GAC5BM,EAAEvY,aAAuB,EAAV/b,KAAKi0B,GAAQ,IAC5BK,EAAEvY,aAAuB,EAAV/b,KAAKk0B,GAAQ,IAErBI,GAGT57B,EAAOD,QAAUi7B,G,6BCpFV,SAASxR,EAAe9nB,GAG7B,IAAI6R,EAAO7R,EAAO,EAAIA,GAAQ,GAAK,EAOxB,IAAT6R,GACS,IAATA,GACS,KAATA,GACS,KAATA,IAEAA,EAAO,GAET,IAAIsoB,EAAqB,IAAPn6B,EASlB,OANEm6B,EADgB,GAAdA,EACY,IAEA,IAGH,IAATtoB,IAAiBsoB,EAAc,IAC3BtoB,GAAQ,IAAMsoB,EAxCxB,iC,6BCAA,2CAEO,MAAMC,EACX50B,aAAa,WAAE60B,EAAF,UAAcC,EAAd,MAAyBC,EAAzB,YAAgCC,IAC3Cj7B,OAAOiV,OAAO5O,KAAM,CAClBy0B,aACAC,YACAC,QACAC,gBAIJ,YAAanrB,GACX,MACEorB,EACAJ,EACAK,EACAJ,EACAK,GACEtrB,EAAQN,MAAM,gCAAgCvB,MAAM,GAClD+sB,EAAuB,MAAfE,EACRG,EAAmC,MAApBF,EAIrB,GAAIE,KAHmC,MAAnBD,GAIlB,MAAM,IAAIr1B,IAASD,IAAExB,aAAc,CAAEgC,QAAS,oBAEhD,OAAO,IAAIu0B,EAAW,CACpBC,aACAC,YACAC,QACAC,YAAaI,IAKjB/qB,UAAWgrB,GACT,GAAIj1B,KAAK40B,aACP,GAAIK,EAAattB,WAAW3H,KAAKy0B,YAC/B,OAAOz0B,KAAK00B,UAAYO,EAAat0B,QAAQX,KAAKy0B,WAAY,SAGhE,GAAIQ,IAAiBj1B,KAAKy0B,WAAY,OAAOz0B,KAAK00B,UAEpD,OAAO,KAGTQ,iBAAkBC,GAChB,GAAIn1B,KAAK40B,aACP,GAAIO,EAAYxtB,WAAW3H,KAAK00B,WAC9B,OAAO10B,KAAKy0B,WAAaU,EAAYx0B,QAAQX,KAAK00B,UAAW,SAG/D,GAAIS,IAAgBn1B,KAAK00B,UAAW,OAAO10B,KAAKy0B,WAElD,OAAO,Q,kMCtDX,MAAMW,EAAgB,IAAIh0B,I,4BAE1B,WAA8B,GAC5BI,EAD4B,SAE5B6D,EAF4B,oBAG5BsG,EAH4B,QAI5BpF,EAJ4B,cAK5BgjB,IAEA,MAAMR,QAAYvnB,EAAGmC,KAAK0B,GAC1B,OAAOujB,IAAayM,QAAQ,CAAEtM,MAAKpd,0B,qMAG9B,SAAS2pB,GAAe,GAC7B9zB,EAD6B,SAE7B6D,EAF6B,oBAG7BsG,EAH6B,QAI7BpF,EAJ6B,cAK7BgjB,IAGA,IAAIxuB,EAAIq6B,EAAct7B,IAAIuL,GAW1B,OAVKtK,IACHA,E,2CAAIw6B,CAAc,CAChB/zB,KACA6D,WACAsG,sBACApF,UACAgjB,kBAEF6L,EAAchyB,IAAIiC,EAAUtK,IAEvBA,I,gZC/BF,MAAM8V,EACXjR,YAAa+Q,GACX3Q,KAAK2Q,OAAS4V,YAAY5V,GAC1B3Q,KAAK4D,OAAS,KACd5D,KAAKkd,OAAS,EACdld,KAAKw1B,WAAa,EAClBx1B,KAAKy1B,SAAU,EACfz1B,KAAK0vB,QAAS,EACd1vB,KAAK01B,gBAAkB,EAGzBnT,MACE,OAAOviB,KAAK0vB,QAAU1vB,KAAKkd,SAAWld,KAAK4D,OAAO2F,OAGpDiZ,OACE,OAAOxiB,KAAK01B,gBAAkB11B,KAAKkd,OAG/Bc,OAAQ,gCACZ,IAAI,EAAKuE,QACJ,EAAKkT,gBAAe,EAAKE,SAC1B,EAAKzY,SAAW,EAAKtZ,OAAO2F,eACxB,EAAKqsB,aACP,EAAKlG,SAGX,OADA,EAAKmG,YAAY,GACV,EAAKjyB,OAAO,EAAK4xB,aARZ,GAWRxR,QAAS,gCACb,IAAI,EAAKzB,QACJ,EAAKkT,gBAAe,EAAKE,SAC1B,EAAKzY,SAAW,EAAKtZ,OAAO2F,eACxB,EAAKqsB,aACP,EAAKlG,SAGX,OADA,EAAKmG,YAAY,EAAKjyB,OAAO2F,QACtB,EAAK3F,OAAOgE,MAAM,EAAK4tB,WAAY,EAAKtY,SARlC,GAWTvZ,KAAMjJ,GAAG,gCACb,IAAI,EAAK6nB,MAOT,OANK,EAAKkT,gBAAe,EAAKE,SAC1B,EAAKzY,OAASxiB,EAAI,EAAKkJ,OAAO2F,SAChC,EAAKusB,cACC,EAAKC,YAAYr7B,IAEzB,EAAKm7B,YAAYn7B,GACV,EAAKkJ,OAAOgE,MAAM,EAAK4tB,WAAY,EAAKtY,SARlC,GAWT8Y,KAAMt7B,GAAG,gCACT,EAAK6nB,QACJ,EAAKkT,gBAAe,EAAKE,SAC1B,EAAKzY,OAASxiB,EAAI,EAAKkJ,OAAO2F,SAChC,EAAKusB,cACC,EAAKC,YAAYr7B,IAEzB,EAAKm7B,YAAYn7B,KAPJ,GAUTu7B,OAAQ,gCACZ,EAAK/Y,OAAS,EAAKsY,YADP,GAIRU,QAAS,gCACb,EAAKT,SAAU,EACf,IAAI,KAAEjP,EAAF,MAAQtsB,SAAgB,EAAKyW,OAAO8V,OAOxC,OANID,IACF,EAAKkJ,QAAS,GAEZx1B,IACFA,EAAQ2J,EAAOC,KAAK5J,IAEfA,GATM,GAYf47B,QAGE91B,KAAK4D,OAAS5D,KAAK4D,OAAOgE,MAAM5H,KAAKw1B,YACrCx1B,KAAKkd,QAAUld,KAAKw1B,WACpBx1B,KAAK01B,iBAAmB11B,KAAKw1B,WAC7Bx1B,KAAKw1B,WAAa,EAGpBK,YAAan7B,GACXsF,KAAKw1B,WAAax1B,KAAKkd,OACvBld,KAAKkd,QAAUxiB,EACXsF,KAAKkd,OAASld,KAAK4D,OAAO2F,SAC5BvJ,KAAKkd,OAASld,KAAK4D,OAAO2F,QAIxBwsB,YAAar7B,GAAG,gCACpB,GAAI,EAAKg1B,OAAQ,OAGjB,MAAMvJ,EAAU,CAAC,EAAKviB,QACtB,KAAO,EAAKsZ,OAASxiB,EAAIy7B,EAAchQ,IAAU,CAC/C,MAAMiQ,QAAmB,EAAKF,QAC9B,GAAI,EAAKxG,OAAQ,MACjBvJ,EAAQ1b,KAAK2rB,GAEf,EAAKxyB,OAASC,EAAOuB,OAAO+gB,IAVR,GAahByP,YAAa,gCACjB,EAAKF,iBAAmB,EAAK9xB,OAAO2F,OACpC,EAAKisB,WAAa,EAClB,EAAKtY,OAAS,EACd,EAAKtZ,aAAe,EAAKsyB,SAJR,GAObP,QAAS,gCACb,EAAK/xB,aAAe,EAAKsyB,SADZ,IAOjB,SAASC,EAAehQ,GACtB,OAAOA,EAAQlhB,OAAO,CAACoxB,EAAKzyB,IAAWyyB,EAAMzyB,EAAO2F,OAAQ,M,sDC9H9D,4CAEO,SAASgd,EAAaL,GAC3B,OAAIA,EAASlsB,OAAOs8B,eACXpQ,EAASlsB,OAAOs8B,iBAErBpQ,EAASlsB,OAAOujB,UACX2I,EAASlsB,OAAOujB,YAErB2I,EAASO,KACJP,EAEFqQ,YAAUrQ,K,6BCVZ,SAASsQ,EAAY7lB,GAE1B,GAAIA,EAAO3W,OAAOs8B,eAAgB,OAAO3lB,EACzC,MAAMC,EAASD,EAAO8lB,YACtB,MAAO,CACLhQ,KAAI,IACK7V,EAAOjN,OAEhB+iB,OAAM,KACJ9V,EAAO8lB,cACA,IAET,CAAC18B,OAAOs8B,iBACN,OAAOt2B,OAMN,SAASu2B,EAAWr8B,GACzB,IAAIk2B,EAAQ,CAACl2B,GACb,MAAO,CACLusB,KAAI,IACK9hB,QAAQoG,QAAQ,CAAEyb,KAAuB,IAAjB4J,EAAM7mB,OAAcrP,MAAOk2B,EAAM7R,QAElEmI,OAAM,KACJ0J,EAAQ,GACD,IAET,CAACp2B,OAAOs8B,iBACN,OAAOt2B,OAhCb,iE,6BCAA,gCACO,MAAM0nB,OACqB,IAAzBnnB,MAAM1F,UAAU6sB,KACnB9a,GAAWA,EAAQ3H,OAAO,CAACoxB,EAAK7qB,IAAM6qB,EAAIjxB,OAAOoG,GAAI,IACrDoB,GAAWA,EAAQ8a,Q,uNCDlB,SAAejhB,EAAtB,kC,4BAAO,WAAqB,KAC1BO,EAD0B,QAE1BT,EAF0B,cAG1BgjB,EAH0B,IAI1B8D,EAJ0B,OAK1B3mB,EAAS,MALiB,QAM1B0H,EAAU,GANgB,KAO1BwgB,IAGIA,IACFA,QAAa3I,YAAQ2I,IAEvB,MAAM7pB,QAAY+R,EAAO6f,MAAMtJ,EAAK,CAAE3mB,SAAQ0H,UAASwgB,SACjDtI,EACJvhB,EAAI6pB,MAAQ7pB,EAAI6pB,KAAK6H,UACjBD,YAAWzxB,EAAI6pB,MACf,CAAC,IAAItd,iBAAiBvM,EAAI6xB,gBAEhCxoB,EAAU,GACV,IAAK,MAAO5T,EAAKN,KAAU6K,EAAIqJ,QAAQxB,UACrCwB,EAAQ5T,GAAON,EAEjB,MAAO,CACLmzB,IAAKtoB,EAAIsoB,IACT3mB,OAAQ3B,EAAI2B,OACZ4nB,WAAYvpB,EAAI8xB,OAChBpI,cAAe1pB,EAAI+xB,WACnBlI,KAAMtI,EACNlY,QAASA,K,kaC7BN,SAAeugB,EAAtB,oC,4BAAO,UAAoChe,GAAQ,QAAEid,IACnD,MAAMmJ,EAAe,IAAIlwB,IACnBM,EAAO,IAAI/F,IACX0H,EAAU,IAAI1H,IAIduC,EAAO6M,IAAW0iB,aAAaviB,GACrC,IAAIqmB,QAAgBrzB,IAEpB,KAAmB,OAAZqzB,GAAkBA,QAAgBrzB,IACzC,IAAgB,IAAZqzB,EAAkB,MAAM,IAAIt3B,IAASD,IAAE/B,yBAE3C,GAAIs5B,EAAQ/1B,SAAS,QAAQN,QAAQ,MAAO,mBAAqBitB,IAC/D,MAAM,IAAIluB,IAASD,IAAE9B,yBAA0B,CAC7C2nB,sBAAuBsI,OACvBxb,OAAQ4kB,EAAQ/1B,SAAS,UAG7B,IAAIg2B,QAAgBtzB,IAEpB,KAAmB,OAAZszB,GAAkBA,QAAgBtzB,IAGzC,IAAgB,IAAZszB,EAAkB,MAAO,CAAEF,eAAc5vB,OAAM2B,WACnD,MAAOouB,EAAUC,GAAoBC,EACnCH,EAAQh2B,SAAS,QACjB,KACA,SAEFk2B,EAAiB7vB,MAAM,KAAKzC,IAAI2G,GAAKurB,EAAalQ,IAAIrb,IACtD,MAAO3D,EAAKrO,GAAQ49B,EAAeF,EAAU,IAAK,KAElD,IADA/vB,EAAK/D,IAAI5J,EAAMqO,KACF,CACX,MAAMN,QAAa5D,IACnB,IAAa,IAAT4D,EAAe,MACnB,GAAa,OAATA,EAAe,CACjB,MAAOM,EAAKrO,GAAQ49B,EAAe7vB,EAAKtG,SAAS,QAAS,IAAK,KAC/DkG,EAAK/D,IAAI5J,EAAMqO,IAInB,IAAK,MAAMwvB,KAAON,EAChB,GAAIM,EAAI1vB,WAAW,WAAY,CAC7B,MAAMtO,EAAIg+B,EAAIluB,MAAM,uBACH,IAAb9P,EAAEkQ,QACJT,EAAQ1F,IAAI/J,EAAE,GAAIA,EAAE,IAI1B,MAAO,CAAE09B,eAAc5vB,OAAM2B,a,qMAG/B,SAASsuB,EAAgB7vB,EAAM+vB,EAAKhS,GAClC,MAAMhe,EAAQC,EAAKF,OAAOC,MAAMgwB,GAChC,GAAqB,IAAjBhwB,EAAMiC,OACR,MAAM,IAAI7J,IAASD,IAAE9B,yBAA0B,CAC7C2nB,sCAAuCA,KACvClT,OAAQ7K,EAAKtG,SAAS,UAG1B,OAAOqG,I,eChER,SAAU7O,GACV,aAEA,IAAI8+B,EAAS,mEA8Eb7+B,EAAOD,QAAQ+jB,YA5Ef,SAAwBgb,GACvB,IAAIv+B,EAAGqb,EAAGpb,EAAGoP,EAAKmvB,EAAcnqB,EAEhC,GAAIkqB,EAAIjuB,OAAS,EAAI,EACpB,KAAM,iDAiBP,IALA+D,EAAM,GAGNpU,GANAu+B,GADAA,EAAeD,EAAI9vB,QAAQ,MACG,EAAI8vB,EAAIjuB,OAASkuB,EAAe,GAM3C,EAAID,EAAIjuB,OAAS,EAAIiuB,EAAIjuB,OAEvCtQ,EAAI,EAAGqb,EAAI,EAAGrb,EAAIC,EAAGD,GAAK,EAAGqb,GAAK,EACtChM,EAAOivB,EAAO7vB,QAAQ8vB,EAAIv+B,KAAO,GAAOs+B,EAAO7vB,QAAQ8vB,EAAIv+B,EAAI,KAAO,GAAOs+B,EAAO7vB,QAAQ8vB,EAAIv+B,EAAI,KAAO,EAAKs+B,EAAO7vB,QAAQ8vB,EAAIv+B,EAAI,IACvIqU,EAAI7C,MAAY,SAANnC,IAAmB,IAC7BgF,EAAI7C,MAAY,MAANnC,IAAiB,GAC3BgF,EAAI7C,KAAW,IAANnC,GAYV,OATqB,IAAjBmvB,GACHnvB,EAAOivB,EAAO7vB,QAAQ8vB,EAAIv+B,KAAO,EAAMs+B,EAAO7vB,QAAQ8vB,EAAIv+B,EAAI,KAAO,EACrEqU,EAAI7C,KAAW,IAANnC,IACkB,IAAjBmvB,IACVnvB,EAAOivB,EAAO7vB,QAAQ8vB,EAAIv+B,KAAO,GAAOs+B,EAAO7vB,QAAQ8vB,EAAIv+B,EAAI,KAAO,EAAMs+B,EAAO7vB,QAAQ8vB,EAAIv+B,EAAI,KAAO,EAC1GqU,EAAI7C,KAAMnC,GAAO,EAAK,KACtBgF,EAAI7C,KAAW,IAANnC,IAGHgF,GAwCR5U,EAAOD,QAAQmd,cArCf,SAAuB8hB,GACtB,IAAIz+B,EAGH0+B,EAAMpuB,EAEmBkhB,EAJzBmN,EAAaF,EAAMnuB,OAAS,EAC5BsuB,EAAS,GAQV,IAAK5+B,EAAI,EAAGsQ,EAASmuB,EAAMnuB,OAASquB,EAAY3+B,EAAIsQ,EAAQtQ,GAAK,EAChE0+B,GAAQD,EAAMz+B,IAAM,KAAOy+B,EAAMz+B,EAAI,IAAM,GAAMy+B,EAAMz+B,EAAI,GAC3D4+B,GANON,GADkB9M,EAOCkN,IANL,GAAK,IAAQJ,EAAO9M,GAAO,GAAK,IAAQ8M,EAAO9M,GAAO,EAAI,IAAQ8M,EAAa,GAAN9M,GAU/F,OAAQmN,GACP,KAAK,EACJD,EAAOD,EAAMA,EAAMnuB,OAAS,GAC5BsuB,GAAUN,EAAOI,GAAQ,GACzBE,GAAUN,EAAQI,GAAQ,EAAK,IAC/BE,GAAU,KACV,MACD,KAAK,EACJF,GAAQD,EAAMA,EAAMnuB,OAAS,IAAM,GAAMmuB,EAAMA,EAAMnuB,OAAS,GAC9DsuB,GAAUN,EAAOI,GAAQ,IACzBE,GAAUN,EAAQI,GAAQ,EAAK,IAC/BE,GAAUN,EAAQI,GAAQ,EAAK,IAC/BE,GAAU,IAIZ,OAAOA,GA9ET,I,6BCqBAn/B,EAAOD,QAAU,CACfixB,EAAQ,kBACRD,EAAQ,aACRqO,EAAQ,GACR,KAAQ,aACR,KAAQ,eACR,KAAQ,aACR,KAAQ,sBACR,KAAQ,eACR,KAAQ,yB,sJC9BH,SAAejyB,EAAtB,kC,4BAAO,UAAsBkyB,GAC3B,OAAO,IAAIpzB,QAAQ,CAACoG,EAASiV,IAAWha,WAAW+E,EAASgtB,M,qpBC+BvD,MAAMpZ,EAKX/e,YAAagN,GACX5M,KAAKsf,QAAS,EACdtf,KAAKid,SAAWrQ,GAAW,IAAIxL,IAGjC,YAAmBwC,GAAQ,qBACzB,GAAIC,EAAOmK,SAASpK,GAClB,OAAO+a,EAASqZ,WAAWp0B,GACtB,GAAe,OAAXA,EACT,OAAO,IAAI+a,EAAS,MAEpB,MAAM,IAAIjf,IAASD,IAAExB,aAAc,CACjCgC,QAAS,0CAPY,GAY3B,kBAAyB2D,GAAQ,qBAE/B,MAAMq0B,QAAoBjsB,YAAOpI,EAAOgE,MAAM,GAAI,KAC5CswB,EAAat0B,EAAOgE,OAAO,IAAI3G,SAAS,OAC9C,GAAIi3B,IAAeD,EACjB,MAAM,IAAIv4B,IAASD,IAAExB,aAAc,CACjCgC,yDAA0Di4B,aAAsBD,MAGpF,MAAMrnB,EAAS,IAAIyR,IAAaze,GAC1BqZ,EAAW,IAAI7b,IACf+2B,EAAQvnB,EAAO3P,SAAS,OAAQ,GACtC,GAAc,SAAVk3B,EACF,MAAM,IAAIz4B,IAASD,IAAExB,aAAc,CACjCgC,+CAAgDk4B,MAGpD,MAAM3T,EAAU5T,EAAOsJ,eACvB,GAAgB,IAAZsK,EACF,MAAM,IAAI9kB,IAASD,IAAExB,aAAc,CACjCgC,yCAA0CukB,MAG9C,MAAM4T,EAAaxnB,EAAOsJ,eAC1B,IAAIjhB,EAAI,EACR,MAAQ2X,EAAO2R,OAAStpB,EAAIm/B,GAAY,CACtC,MAAMnwB,EAAQ,GACdA,EAAMuZ,aAAe5Q,EAAOsJ,eAC5BjS,EAAMwZ,iBAAmB7Q,EAAOsJ,eAChCjS,EAAM2Z,aAAehR,EAAOsJ,eAC5BjS,EAAM4Z,iBAAmBjR,EAAOsJ,eAChCjS,EAAM+Z,IAAMpR,EAAOsJ,eACnBjS,EAAMga,IAAMrR,EAAOsJ,eACnBjS,EAAM7N,KAAOwW,EAAOsJ,eACpBjS,EAAMka,IAAMvR,EAAOsJ,eACnBjS,EAAMma,IAAMxR,EAAOsJ,eACnBjS,EAAM2C,KAAOgG,EAAOsJ,eACpBjS,EAAMF,IAAM6I,EAAOhJ,MAAM,IAAI3G,SAAS,OACtC,MAAMo3B,EAAQznB,EAAOuD,eACrBlM,EAAMowB,OArFmBC,EAqFUD,EApFhC,CACLE,YAAaC,QAAe,MAAPF,GACrBG,SAAUD,QAAe,MAAPF,GAClBI,OAAe,MAAPJ,IAA8B,GACtCK,WAAmB,KAAPL,IAkFV,MAAMM,EAAah1B,EAAO8D,QAAQ,EAAGkJ,EAAO4R,OAAS,GAAK5R,EAAO4R,OACjE,GAAIoW,EAAa,EACf,MAAM,IAAIl5B,IAASD,IAAExB,aAAc,CACjCgC,iCAAkC24B,MAItC3wB,EAAM/B,KAAO0K,EAAO3P,SAAS,OAAQ23B,GAIrC,IAAIC,EAAU,GAAMjoB,EAAO4R,OAAS,IAAM,EAE1C,IADgB,IAAZqW,IAAeA,EAAU,GACtBA,KAAW,CAChB,MAAMvwB,EAAMsI,EAAOmJ,YACnB,GAAY,IAARzR,EACF,MAAM,IAAI5I,IAASD,IAAExB,aAAc,CACjCgC,iDAAkDqI,YAAcL,EAAM/B,SAEnE,GAAI0K,EAAO2R,MAChB,MAAM,IAAI7iB,IAASD,IAAExB,aAAc,CACjCgC,QAAS,2BAKfgd,EAAS7Z,IAAI6E,EAAM/B,KAAM+B,GACzBhP,IAlHN,IAA+Bq/B,EAoH3B,OAAO,IAAI3Z,EAAS1B,IAtEW,GAyEjC,cACE,MAAO,IAAIjd,KAAKid,SAAS9c,UAAUmE,KAAKgZ,KAG1C,iBACE,OAAOtd,KAAKid,SAGd,EAAGjjB,OAAOujB,YACR,IAAK,MAAMtV,KAASjI,KAAK4M,cACjB3E,EAIV6wB,QAAQ,SAAEx1B,EAAF,MAAYkb,EAAZ,IAAmBzW,IACzByW,EAAQ+C,YAAe/C,GACvB,MAAMua,EAAYl1B,EAAOC,KAAKR,GACxB2E,EAAQ,CACZuZ,aAAchD,EAAMgD,aACpBC,iBAAkBjD,EAAMiD,iBACxBG,aAAcpD,EAAMoD,aACpBC,iBAAkBrD,EAAMqD,iBACxBG,IAAKxD,EAAMwD,IACXC,IAAKzD,EAAMyD,IAIX7nB,KAAMokB,EAAMpkB,MAAQ,MACpB+nB,IAAK3D,EAAM2D,IACXC,IAAK5D,EAAM4D,IACXxX,KAAM4T,EAAM5T,KACZ1E,KAAM5C,EACNyE,IAAKA,EACLswB,MAAO,CACLE,aAAa,EACbE,UAAU,EACVC,MAAO,EACPC,WAAYI,EAAUxvB,OAAS,KAAQwvB,EAAUxvB,OAAS,OAG9DvJ,KAAKid,SAAS7Z,IAAI6E,EAAM/B,KAAM+B,GAC9BjI,KAAKsf,QAAS,EAGhB1Z,QAAQ,SAAEtC,IACR,GAAItD,KAAKid,SAAStb,IAAI2B,GACpBtD,KAAKid,SAASrX,OAAOtC,QAErB,IAAK,MAAM9I,KAAOwF,KAAKid,SAAS5c,OAC1B7F,EAAImN,WAAWrE,EAAW,MAC5BtD,KAAKid,SAASrX,OAAOpL,GAI3BwF,KAAKsf,QAAS,EAGhB0Z,QACEh5B,KAAKid,SAAS+b,QACdh5B,KAAKsf,QAAS,EAGhBrR,SACE,OAAOjO,KAAK4M,QACT/H,IAAIoD,MAAYA,EAAM7N,KAAK6G,SAAS,MAAMgH,EAAMF,UAAUE,EAAM/B,QAChEzF,KAAK,MAGJgO,WAAY,gCAChB,MAAMwqB,EAASp1B,EAAO+S,MAAM,IACtBsiB,EAAS,IAAI7W,IAAa4W,GAChCC,EAAOn1B,MAAM,OAAQ,EAAG,QACxBm1B,EAAO5d,cAAc,GACrB4d,EAAO5d,cAAc,EAAK1O,QAAQrD,QAClC,MAAMqlB,EAAO/qB,EAAOuB,OAClB,EAAKwH,QAAQ/H,IAAIoD,IACf,MAAMkxB,EAAQt1B,EAAOC,KAAKmE,EAAM/B,MAE1BqD,EAAkD,EAAzCsM,KAAKujB,MAAM,GAAKD,EAAM5vB,OAAS,GAAK,GAC7C8vB,EAAUx1B,EAAO+S,MAAMrN,GACvB2vB,EAAS,IAAI7W,IAAagX,GAC1B32B,EAAO6e,YAAetZ,GAc5B,OAbAixB,EAAO5d,cAAc5Y,EAAK8e,cAC1B0X,EAAO5d,cAAc5Y,EAAK+e,kBAC1ByX,EAAO5d,cAAc5Y,EAAKkf,cAC1BsX,EAAO5d,cAAc5Y,EAAKmf,kBAC1BqX,EAAO5d,cAAc5Y,EAAKsf,KAC1BkX,EAAO5d,cAAc5Y,EAAKuf,KAC1BiX,EAAO5d,cAAc5Y,EAAKtI,MAC1B8+B,EAAO5d,cAAc5Y,EAAKyf,KAC1B+W,EAAO5d,cAAc5Y,EAAK0f,KAC1B8W,EAAO5d,cAAc5Y,EAAKkI,MAC1BsuB,EAAOn1B,MAAMkE,EAAMF,IAAK,GAAI,OAC5BmxB,EAAO9d,cA3Mf,SAAgCnT,GAC9B,MAAMowB,EAAQpwB,EAAMowB,MAMpB,OAJAA,EAAMI,UAAW,EAGjBJ,EAAMM,WAAa9iB,KAAKC,IAAIjS,EAAOC,KAAKmE,EAAM/B,MAAMqD,OAAQ,OAEzD8uB,EAAME,YAAc,MAAqB,IACzCF,EAAMI,SAAW,MAAqB,KACvB,EAAdJ,EAAMK,QAAiB,KACL,KAAnBL,EAAMM,YAgMkBW,CAAsBrxB,IAC3CixB,EAAOn1B,MAAMkE,EAAM/B,KAAMizB,EAAM5vB,OAAQ,QAChC8vB,KAGLE,EAAO11B,EAAOuB,OAAO,CAAC6zB,EAAQrK,IAC9B4K,QAAYxtB,YAAOutB,GACzB,OAAO11B,EAAOuB,OAAO,CAACm0B,EAAM11B,EAAOC,KAAK01B,EAAK,UAhC7B,O,gZClMpB,MAUMC,EAAOhnB,IAEX,GAAY,UADZA,EAAMA,EAAIpL,OAAO2L,gBACa,QAARP,GAAyB,OAARA,EAAc,OAAO,EAC5D,GAAY,UAARA,GAA2B,OAARA,GAAwB,QAARA,EAAe,OAAO,EAC7D,MAAM9S,wEAC8D8S,MAIhEinB,EAAS,CACb1yB,KAAM,CACJ2yB,SAAUF,EACVG,KAAMH,EACNI,iBAAkBJ,EAClBK,SAAUL,EACVM,WAAYN,EACZO,iBA1BQvnB,IACVA,EAAMA,EAAIO,cACV,IAAItY,EAAIoW,SAAS2B,GAIjB,OAHIA,EAAIlK,SAAS,OAAM7N,GAAK,MACxB+X,EAAIlK,SAAS,OAAM7N,GAAK,SACxB+X,EAAIlK,SAAS,OAAM7N,GAAK,YACrBA,KAgCHu/B,EAAqB,qCACrBC,EAAgB,mBAOhBC,EAAsB,gCACtBC,EAAsB,gBAEtBC,EAA+B,oBAE/BC,EAAqB/yB,IACzB,MAAMgzB,EAAUN,EAAmBO,KAAKjzB,GACxC,GAAe,MAAXgzB,EAAiB,CACnB,MAAOE,EAASC,GAAcH,EAAQ3yB,MAAM,GAC5C,MAAO,CAAC6yB,EAASC,GAEnB,OAAO,MAGHC,EAAsBpzB,IAC1B,MAAMgzB,EAAUJ,EAAoBK,KAAKjzB,GACzC,GAAe,MAAXgzB,EAAiB,CACnB,MAAO/gC,EAAMohC,EAAW,QAAUL,EAAQ3yB,MAAM,GAC1CizB,EAAuBC,EAAeF,GAE5C,MAAO,CAACphC,EADmBuhC,EAAaF,IAG1C,OAAO,MAGHC,EAAiBF,IACrB,MAAMI,EAAiBX,EAA6BG,KAAKI,GACzD,GAAsB,MAAlBI,EACF,OAAOJ,EAET,MAAOK,EAAqBxzB,GAAWuzB,EAAepzB,MAAM,GAE5D,OACEszB,EAAqBD,IACrBC,EAAqBzzB,MAEXwzB,IAAsBxzB,IAE3BwzB,GAGHC,EAAuBh0B,IAE3B,OADwBA,EAAKiC,MAAM,kBAAoB,IAAII,OACnC,GAAM,GAG1BwxB,EAAe7zB,GACZA,EAAKI,MAAM,IAAIrC,OAAO,CAACk2B,EAAS7hC,EAAGyvB,EAAK7hB,KAC7C,MAAMk0B,EAAgB,MAAN9hC,GAA+B,OAAlB4N,EAAK6hB,EAAM,GAClCsS,EAAyB,OAAN/hC,GAAgC,MAAlB4N,EAAK6hB,EAAM,GAClD,OAAIqS,GAAWC,EACNF,EAEFA,EAAU7hC,GAChB,IAGCgiC,EAAQp0B,GACG,MAARA,EAAeA,EAAK8L,cAAgB,KAGvCuoB,EAAU,CAACd,EAASC,EAAYlhC,IAC7B,CAAC8hC,EAAMb,GAAUC,EAAYY,EAAM9hC,IACvCwO,OAAO9C,GAAU,MAALA,GACZzE,KAAK,KAGJ+6B,EAAgB,CAAC3pB,EAAO4pB,IACrB5pB,EAAM5M,OAAO,CAACy2B,EAAWnuB,EAAMmR,IAC7B+c,EAASluB,GAAQmR,EAAQgd,GAC9B,GAKC,MAAMzY,EACXrjB,YAAasH,GACX,IAAIuzB,EAAU,KACVC,EAAa,KACjB16B,KAAKoH,aAAeF,EAAKI,MAAM,MAAMzC,IAAI0C,IACvC,IAAI/N,EAAO,KACPU,EAAQ,KAEZ,MAAMyhC,EAAcp0B,EAAKF,OACnBu0B,EAAmBtB,EAAmBqB,GACtCE,EAAgC,MAApBD,EAClB,GAAIC,GACApB,EAASC,GAAckB,MACpB,CACL,MAAME,EAAoBnB,EAAoBgB,GACN,MAArBG,KAEftiC,EAAMU,GAAS4hC,GAIrB,MAAM51B,EAAOq1B,EAAQd,EAASC,EAAYlhC,GAC1C,MAAO,CAAE+N,OAAMs0B,YAAWpB,UAASC,aAAYlhC,OAAMU,QAAOgM,UAIhE,YAAagB,GACX,OAAO,IAAI+b,EAAU/b,GAGjBpN,IAAKoM,EAAMoD,GAAS,GAAO,gCAC/B,MAAMyyB,EAAY,EAAK30B,aACpBY,OAAOoB,GAAUA,EAAOlD,OAASA,EAAK8M,eACtCnO,IAAI,EAAG41B,UAASjhC,OAAMU,YACrB,MAAM2lB,EAAK6Z,EAAOe,IAAYf,EAAOe,GAASjhC,GAC9C,OAAOqmB,EAAKA,EAAG3lB,GAASA,IAE5B,OAAOoP,EAASyyB,EAAYA,EAAUxd,OAPP,GAU3BjV,OAAQpD,GAAM,gCAClB,OAAO,EAAKpM,IAAIoM,GAAM,IADJ,GAId81B,eAAgBvB,GAAS,gCAC7B,OAAO,EAAKrzB,aACTY,OAAOoB,GAAUA,EAAOqxB,UAAYA,GAAWrxB,EAAOyyB,WACtDh3B,IAAIuE,GAAUA,EAAOsxB,aAHK,GAMzBuB,cAAexB,EAASC,GAAY,gCACxC,EAAKtzB,aAAe,EAAKA,aAAaY,OACpCoB,KACIA,EAAOqxB,UAAYA,GAAWrxB,EAAOsxB,aAAeA,KAHlB,GAOpCwB,OAAQh2B,EAAMhM,GAAO,gCACzB,OAAO,EAAKkJ,IAAI8C,EAAMhM,GAAO,IADJ,GAIrBkJ,IAAK8C,EAAMhM,EAAOgiC,GAAS,GAAO,gCACtC,MAAMC,EAAcX,EAClB,EAAKp0B,aACLgC,GAAUA,EAAOlD,OAASA,EAAK8M,eAEjC,GAAa,MAAT9Y,GACmB,IAAjBiiC,GACF,EAAK/0B,aAAauG,OAAOwuB,EAAa,QAGxC,IAAqB,IAAjBA,EAAoB,CACtB,MAAM/yB,EAAS,EAAKhC,aAAa+0B,GAC3BC,EAAiBziC,OAAOiV,OAAO,GAAIxF,EAAQ,CAC/ClP,QACAmiC,UAAU,IAERH,EACF,EAAK90B,aAAauG,OAAOwuB,EAAc,EAAG,EAAGC,GAE7C,EAAKh1B,aAAa+0B,GAAeC,MAE9B,CACL,MAAME,EAAcp2B,EACjBoB,MAAM,KACNM,MAAM,GAAI,GACVnH,KAAK,KACLuS,cACGupB,EAAe,EAAKn1B,aAAao1B,UACrCpzB,GAAUA,EAAOlD,OAASo2B,IAErB7B,EAASC,GAAc4B,EAAYh1B,MAAM,KAC1C9N,EAAO0M,EAAKoB,MAAM,KAAKiX,MACvBke,EAAY,CAChBhC,UACAC,aACAlhC,OACAU,QACAmiC,UAAU,EACVn2B,KAAMq1B,EAAQd,EAASC,EAAYlhC,IAErC,GAAI0gC,EAAc1yB,KAAKizB,IAAYL,EAAoB5yB,KAAKhO,GAC1D,GAAI+iC,GAAgB,EAElB,EAAKn1B,aAAauG,OAAO4uB,EAAe,EAAG,EAAGE,OACzC,CAEL,MAAMC,EAAa,CACjBjC,UACAC,aACA2B,UAAU,EACVn2B,KAAMq1B,EAAQd,EAASC,EAAY,OAErC,EAAKtzB,aAAaqD,KAAKiyB,EAAYD,MApDL,GA2DxCx7B,WACE,OAAOjB,KAAKoH,aACTvC,IAAI,EAAG0C,OAAMkzB,UAASC,aAAYlhC,OAAMU,QAAOmiC,YAAW,KACpDA,EAGO,MAAR7iC,GAAyB,MAATU,OACNV,OAAUU,IAEN,MAAdwgC,MACSD,MAAYC,UAEdD,KARFlzB,GAUV9G,KAAK,S,6BChQZ,4CAEO,MAAMiJ,EACX9J,YAAa+8B,EAAQ,IACnB38B,KAAK28B,MAAQA,EAGf,YAAa3zB,GACX,MAAM2zB,EAAQ,GACd,IAAK,MAAMlzB,KAAWT,EACpB2zB,EAAMlyB,KAAK+pB,IAAW1wB,KAAK2F,IAE7B,OAAO,IAAIC,EAAcizB,GAG3B9V,IAAKpd,GACH,MAAMmzB,EAAOpI,IAAW1wB,KAAK2F,GAC7BzJ,KAAK28B,MAAMlyB,KAAKmyB,GAGlB3yB,UAAW4yB,GACT,MAAMz8B,EAAS,GACf,IAAK,MAAMw8B,KAAQ58B,KAAK28B,MACtB,IAAK,MAAMG,KAAaD,EAAY,CAClC,MAAME,EAAWH,EAAK3yB,UAAU6yB,GAC5BC,GACF38B,EAAOqK,KAAK,CAACqyB,EAAWC,IAI9B,OAAO38B,EAGTiK,aAAcyyB,GACZ,IAAI18B,EAAS,KACb,IAAK,MAAMw8B,KAAQ58B,KAAK28B,MAAO,CAC7B,MAAMI,EAAWH,EAAK3yB,UAAU6yB,GAC5BC,IACF38B,EAAS28B,GAGb,OAAO38B,EAGTmK,kBACE,OAAOvK,KAAK28B,MACT30B,OAAO40B,GAAQA,EAAKhI,aACpB/vB,IAAI+3B,GAAQA,EAAKlI,UAAU/zB,QAAQ,MAAO,Q,6BC/CjD,mDAkCO,MAAMq8B,EACX,2BAA2B,IAAE3P,IAE3B,MAAM4P,EAAgB,IAAI77B,IAC1B67B,EAAc75B,IAAI,OAAQuqB,KAC1BsP,EAAc75B,IAAI,QAASuqB,KAE3B,MAAMxnB,EArCV,UAAyB,IAAEknB,IACzB,MAAMkN,EAAUlN,EAAIlkB,MAAM,uBAC1B,GAAgB,OAAZoxB,EAQJ,MAAmB,QAAfA,EAAQ,GACH,CACL2C,UAAW3C,EAAQ,GACnB4C,QAAS5C,EAAQ,IASF,OAAfA,EAAQ,GACH,CACL2C,UAAW3C,EAAQ,GACnB4C,QAAS5C,EAAQ,SAHrB,EAegB6C,CAAe,CAAE/P,QAC/B,IAAKlnB,EACH,MAAM,IAAIzG,IAASD,IAAE5B,oBAAqB,CAAEwvB,QAE9C,GAAI4P,EAAct7B,IAAIwE,EAAM+2B,WAC1B,OAAOD,EAAcnjC,IAAIqM,EAAM+2B,WAEjC,MAAM,IAAIx9B,IAASD,IAAE3B,sBAAuB,CAC1CuvB,MACA6P,UAAW/2B,EAAM+2B,e,6BClDvB,sDAEA,MAAMG,EAAa,iBAEZ,SAASC,GAAW,WACzBC,EADyB,YAEzBC,EAFyB,aAGzBC,EAHyB,QAIzBC,EAAU,OAJe,SAKzBC,EAAW,OALc,UAMzBC,EAAY,SANa,OAOzBlyB,EAAS,OAPgB,WAQzBmyB,EAAa,IAEb,MAAMC,EAAOP,EAAWp0B,MAAMk0B,GACxB3Q,EAAO8Q,EAAYr0B,MAAMk0B,GACzBU,EAASN,EAAat0B,MAAMk0B,GAG5Bj9B,EAAS49B,IAAWF,EAAMpR,EAAMqR,GAGtC,IAAIE,EAAa,GACbC,GAAa,EACjB,IAAK,MAAM3wB,KAAQnN,EACbmN,EAAK4wB,KACPF,GAAc1wB,EAAK4wB,GAAG19B,KAAK,KAEzB8M,EAAK6wB,WACPF,GAAa,EACbD,MAAiB,IAAI5V,OAAOwV,MAAeH,MAC3CO,GAAc1wB,EAAK6wB,SAASl5B,EAAEzE,KAAK,IACpB,UAAXiL,IACFuyB,MAAiB,IAAI5V,OAAOwV,MAAeF,MAC3CM,GAAc1wB,EAAK6wB,SAAS1kC,EAAE+G,KAAK,KAErCw9B,MAAiB,IAAI5V,OAAOwV,OAC5BI,GAAc1wB,EAAK6wB,SAASj2B,EAAE1H,KAAK,IACnCw9B,MAAiB,IAAI5V,OAAOwV,MAAeD,OAG/C,MAAO,CAAEM,aAAYD,gB,sRCtBhB,SAAe3U,EAAtB,kC,4BAAO,WAAqB,KAC1BtiB,EAAO,UADmB,IAE1BvC,EAF0B,OAG1BmE,EAASnI,YAAKgE,EAAK,QACnBjD,GAAImH,EAAM5B,IAAMjN,IAAIkN,GAAMlN,IAAI,MAJJ,KAK1B8sB,IAEA,MAAMplB,EAAK,IAAID,IAAWoH,GACpBugB,EAAO,IAAIvL,IACX0gB,EAAe,GACrB,SAASt6B,EAAOigB,EAAOtB,GACrB,MAAM4b,EAAOz6B,EAAOC,KAAKkgB,EAAOtB,GAChC2b,EAAa5zB,KAAK6zB,GAClBpV,EAAKtL,OAAO0gB,GAEd,SAAS3b,GAAa,MAAE4b,EAAF,OAAS5jC,IAE7B,MAAMsR,EAAOuyB,IAAMD,GAEnB,IAAIh1B,EAAS5O,EAAO4O,OAGhBojB,EAAYpjB,EAAS,GAAS,IAAa,EAE/C,MAAMgjB,EAAoB,GAAThjB,EAEjBA,KAAoB,EAEpB,IAAIyU,GAAQ2O,EAAY1gB,EAAOsgB,GAAUtrB,SAAS,IAIlD,IAHA8C,EAAMia,EAAM,OAGL2O,GAEL3O,GADA2O,EAAYpjB,EAAS,IAAa,IAAa,GAClB,IAATA,EACpBxF,EAAM2M,YAAO,EAAGsN,GAAO,OACvBzU,KAAoB,EAGtBxF,EAAMF,EAAOC,KAAKgI,IAAKgX,QAAQnoB,KAEjCoJ,EAAM,QACNA,EAAM,WAAY,OAElBA,EAAM2M,YAAO,EAAGkW,EAAKrd,QAAS,OAC9B,IAAK,MAAMxB,KAAO6e,EAAM,CACtB,MAAM,KAAE3a,EAAF,OAAQtR,SAAiB8Q,YAAW,CAAEjK,KAAIoH,SAAQb,QACxD4a,EAAY,CAAE5e,QAAOpJ,SAAQ4jC,MAAOtyB,IAGtC,MAAM4R,EAASqL,EAAKrL,SAEpB,OADAwgB,EAAa5zB,KAAKoT,GACXwgB,I,mnBClEF,MAAMI,UAAwB5wB,IACnC,YAAaC,GACX,OAAO,IAAI2wB,EAAgB3wB,GAGvB6B,KAAM+uB,EAASC,GAAa,gCAChC,MAAM7wB,EAAS,EAAKyB,mBACdnB,EAAUP,IAAUQ,YAAY,EAAKN,SACrC9N,EAAU4N,IAAUS,YAAY,EAAKP,SACrC6wB,EAAaF,EAAQlkC,IAAIqkC,YAAYF,GAAat+B,KACxD,IAAI,UAAE8N,SAAoBuwB,EAAQ/uB,KAAK,CACrC7P,KAAM4+B,EAAQI,KAAKC,eAAejxB,GAClC6wB,YAAaC,EACbI,UAAU,EACVC,OAAO,IAGT9wB,EAAYI,YAAkBJ,GAC9B,MAAMyB,EACJxB,EAAU,WAAkBI,YAAOL,GAAa,KAAOlO,EAEzD,OAAO4N,IAAU/J,KAAK8L,IAhBU,GAmB5BsvB,gBAAiBR,GAAS,gCAK9B,OAJYA,EAAQz+B,QAAQk/B,kBAC1B,EAAK5vB,mBACL,EAAKC,oBAEI4vB,mBAAmBv6B,IAAIw6B,GAASA,EAAMvmB,UALnB,GAQ1BhJ,OAAQ4uB,EAASY,GAAY,gCACjC,MAAMC,EAAYb,EAAQlkC,IAAIqkC,YAAYS,GAAYj/B,KAStD,OARYq+B,EAAQz+B,QAAQk/B,kBAC1B,EAAK5vB,mBACL,EAAKC,oBAEaM,OAAOyvB,GACFt6B,OAAO,CAACC,EAAGiD,IAAMjD,EAAEs6B,OAASr3B,EAAEq3B,MAAO,CAC5DA,OAAO,KARwB,M,6BCpC9B,SAASxX,EAAY9U,EAAOC,GACjC,MAAM5J,EAAS4J,EAAMD,EACrB,OAAO3S,MAAMuD,KAAK,CAAEyF,UAAU,CAACgH,EAAGtX,IAAMia,EAAQja,GAHlD,iC,6BCAA,gCACO,MAAM+tB,EACXpnB,cAGEI,KAAK9F,MAAQ,KAGfktB,SAAUltB,GACJA,UACe,OAAf8F,KAAK9F,MACP8F,KAAK9F,MAAQA,EACJA,EAAQ8F,KAAK9F,QACtB8F,KAAK9F,MAAQA,IAIjBmtB,QACErnB,KAAK9F,MAAQ,Q,iBClBjB,YA4BA,SAASulC,EAAet5B,EAAOu5B,GAG7B,IADA,IAAIC,EAAK,EACA1mC,EAAIkN,EAAMoD,OAAS,EAAGtQ,GAAK,EAAGA,IAAK,CAC1C,IAAI+pB,EAAO7c,EAAMlN,GACJ,MAAT+pB,EACF7c,EAAMwH,OAAO1U,EAAG,GACE,OAAT+pB,GACT7c,EAAMwH,OAAO1U,EAAG,GAChB0mC,KACSA,IACTx5B,EAAMwH,OAAO1U,EAAG,GAChB0mC,KAKJ,GAAID,EACF,KAAOC,IAAMA,EACXx5B,EAAMqD,QAAQ,MAIlB,OAAOrD,EA0OT,SAAS6B,EAAQ43B,EAAIz6B,GACjB,GAAIy6B,EAAG53B,OAAQ,OAAO43B,EAAG53B,OAAO7C,GAEhC,IADA,IAAIJ,EAAM,GACD9L,EAAI,EAAGA,EAAI2mC,EAAGr2B,OAAQtQ,IACvBkM,EAAEy6B,EAAG3mC,GAAIA,EAAG2mC,IAAK76B,EAAI0F,KAAKm1B,EAAG3mC,IAErC,OAAO8L,EA3OXtM,EAAQsS,QAAU,WAIhB,IAHA,IAAI80B,EAAe,GACfC,GAAmB,EAEd7mC,EAAIgf,UAAU1O,OAAS,EAAGtQ,IAAM,IAAM6mC,EAAkB7mC,IAAK,CACpE,IAAIiN,EAAQjN,GAAK,EAAKgf,UAAUhf,GAAKgX,EAAQ4hB,MAG7C,GAAoB,iBAAT3rB,EACT,MAAM,IAAIyL,UAAU,6CACVzL,IAIZ25B,EAAe35B,EAAO,IAAM25B,EAC5BC,EAAsC,MAAnB55B,EAAK65B,OAAO,IAWjC,OAASD,EAAmB,IAAM,KAJlCD,EAAeJ,EAAez3B,EAAO63B,EAAav4B,MAAM,KAAM,SAASvM,GACrE,QAASA,KACN+kC,GAAkBr/B,KAAK,OAE6B,KAK3DhI,EAAQunC,UAAY,SAAS95B,GAC3B,IAAI+5B,EAAaxnC,EAAQwnC,WAAW/5B,GAChCg6B,EAAqC,MAArBrrB,EAAO3O,GAAO,GAclC,OAXAA,EAAOu5B,EAAez3B,EAAO9B,EAAKoB,MAAM,KAAM,SAASvM,GACrD,QAASA,KACNklC,GAAYx/B,KAAK,OAERw/B,IACZ/5B,EAAO,KAELA,GAAQg6B,IACVh6B,GAAQ,MAGF+5B,EAAa,IAAM,IAAM/5B,GAInCzN,EAAQwnC,WAAa,SAAS/5B,GAC5B,MAA0B,MAAnBA,EAAK65B,OAAO,IAIrBtnC,EAAQgI,KAAO,WACb,IAAI0/B,EAAQ5/B,MAAM1F,UAAU+M,MAAMxO,KAAK6e,UAAW,GAClD,OAAOxf,EAAQunC,UAAUh4B,EAAOm4B,EAAO,SAASplC,EAAG2jB,GACjD,GAAiB,iBAAN3jB,EACT,MAAM,IAAI4W,UAAU,0CAEtB,OAAO5W,IACN0F,KAAK,OAMVhI,EAAQ2nC,SAAW,SAASt8B,EAAMu8B,GAIhC,SAASh5B,EAAKiG,GAEZ,IADA,IAAI4F,EAAQ,EACLA,EAAQ5F,EAAI/D,QACE,KAAf+D,EAAI4F,GADiBA,KAK3B,IADA,IAAIC,EAAM7F,EAAI/D,OAAS,EAChB4J,GAAO,GACK,KAAb7F,EAAI6F,GADOA,KAIjB,OAAID,EAAQC,EAAY,GACjB7F,EAAI1F,MAAMsL,EAAOC,EAAMD,EAAQ,GAfxCpP,EAAOrL,EAAQsS,QAAQjH,GAAM+Q,OAAO,GACpCwrB,EAAK5nC,EAAQsS,QAAQs1B,GAAIxrB,OAAO,GAsBhC,IALA,IAAIyrB,EAAYj5B,EAAKvD,EAAKwD,MAAM,MAC5Bi5B,EAAUl5B,EAAKg5B,EAAG/4B,MAAM,MAExBiC,EAASsM,KAAKC,IAAIwqB,EAAU/2B,OAAQg3B,EAAQh3B,QAC5Ci3B,EAAkBj3B,EACbtQ,EAAI,EAAGA,EAAIsQ,EAAQtQ,IAC1B,GAAIqnC,EAAUrnC,KAAOsnC,EAAQtnC,GAAI,CAC/BunC,EAAkBvnC,EAClB,MAIJ,IAAIwnC,EAAc,GAClB,IAASxnC,EAAIunC,EAAiBvnC,EAAIqnC,EAAU/2B,OAAQtQ,IAClDwnC,EAAYh2B,KAAK,MAKnB,OAFAg2B,EAAcA,EAAYr7B,OAAOm7B,EAAQ34B,MAAM44B,KAE5B//B,KAAK,MAG1BhI,EAAQ6+B,IAAM,IACd7+B,EAAQioC,UAAY,IAEpBjoC,EAAQwL,QAAU,SAAUiC,GAE1B,GADoB,iBAATA,IAAmBA,GAAc,IACxB,IAAhBA,EAAKqD,OAAc,MAAO,IAK9B,IAJA,IAAI1J,EAAOqG,EAAKiP,WAAW,GACvBwrB,EAAmB,KAAT9gC,EACVsT,GAAO,EACPytB,GAAe,EACV3nC,EAAIiN,EAAKqD,OAAS,EAAGtQ,GAAK,IAAKA,EAEtC,GAAa,MADb4G,EAAOqG,EAAKiP,WAAWlc,KAEnB,IAAK2nC,EAAc,CACjBztB,EAAMla,EACN,YAIJ2nC,GAAe,EAInB,OAAa,IAATztB,EAAmBwtB,EAAU,IAAM,IACnCA,GAAmB,IAARxtB,EAGN,IAEFjN,EAAK0B,MAAM,EAAGuL,IAiCvB1a,EAAQisB,SAAW,SAAUxe,EAAM+S,GACjC,IAAI9T,EA/BN,SAAkBe,GACI,iBAATA,IAAmBA,GAAc,IAE5C,IAGIjN,EAHAia,EAAQ,EACRC,GAAO,EACPytB,GAAe,EAGnB,IAAK3nC,EAAIiN,EAAKqD,OAAS,EAAGtQ,GAAK,IAAKA,EAClC,GAA2B,KAAvBiN,EAAKiP,WAAWlc,IAGhB,IAAK2nC,EAAc,CACjB1tB,EAAQja,EAAI,EACZ,YAEgB,IAATka,IAGXytB,GAAe,EACfztB,EAAMla,EAAI,GAId,OAAa,IAATka,EAAmB,GAChBjN,EAAK0B,MAAMsL,EAAOC,GAMjBuR,CAASxe,GAIjB,OAHI+S,GAAO9T,EAAE0P,QAAQ,EAAIoE,EAAI1P,UAAY0P,IACvC9T,EAAIA,EAAE0P,OAAO,EAAG1P,EAAEoE,OAAS0P,EAAI1P,SAE1BpE,GAGT1M,EAAQooC,QAAU,SAAU36B,GACN,iBAATA,IAAmBA,GAAc,IAQ5C,IAPA,IAAI46B,GAAY,EACZC,EAAY,EACZ5tB,GAAO,EACPytB,GAAe,EAGfI,EAAc,EACT/nC,EAAIiN,EAAKqD,OAAS,EAAGtQ,GAAK,IAAKA,EAAG,CACzC,IAAI4G,EAAOqG,EAAKiP,WAAWlc,GAC3B,GAAa,KAAT4G,GASS,IAATsT,IAGFytB,GAAe,EACfztB,EAAMla,EAAI,GAEC,KAAT4G,GAEkB,IAAdihC,EACFA,EAAW7nC,EACY,IAAhB+nC,IACPA,EAAc,IACK,IAAdF,IAGTE,GAAe,QArBb,IAAKJ,EAAc,CACjBG,EAAY9nC,EAAI,EAChB,OAuBR,OAAkB,IAAd6nC,IAA4B,IAAT3tB,GAEH,IAAhB6tB,GAEgB,IAAhBA,GAAqBF,IAAa3tB,EAAM,GAAK2tB,IAAaC,EAAY,EACjE,GAEF76B,EAAK0B,MAAMk5B,EAAU3tB,IAa9B,IAAI0B,EAA6B,MAApB,KAAKA,QAAQ,GACpB,SAAUI,EAAK/B,EAAOZ,GAAO,OAAO2C,EAAIJ,OAAO3B,EAAOZ,IACtD,SAAU2C,EAAK/B,EAAOZ,GAEpB,OADIY,EAAQ,IAAGA,EAAQ+B,EAAI1L,OAAS2J,GAC7B+B,EAAIJ,OAAO3B,EAAOZ,M,gCC3SjC,IAAI2uB,EAGJA,EAAI,WACH,OAAOjhC,KADJ,GAIJ,IAECihC,EAAIA,GAAK,IAAIC,SAAS,cAAb,GACR,MAAOjqB,GAEc,iBAAX7G,SAAqB6wB,EAAI7wB,QAOrC1X,EAAOD,QAAUwoC,G,gBClBjB,IAAIr9B,EAAS,EAAQ,IACjBC,EAASD,EAAOC,OAGpB,SAASs9B,EAAWxkB,EAAKC,GACvB,IAAK,IAAIpiB,KAAOmiB,EACdC,EAAIpiB,GAAOmiB,EAAIniB,GAWnB,SAAS4mC,EAAY5vB,EAAKC,EAAkBlI,GAC1C,OAAO1F,EAAO2N,EAAKC,EAAkBlI,GATnC1F,EAAOC,MAAQD,EAAO+S,OAAS/S,EAAO6N,aAAe7N,EAAO2T,gBAC9D9e,EAAOD,QAAUmL,GAGjBu9B,EAAUv9B,EAAQnL,GAClBA,EAAQoL,OAASu9B,GAQnBD,EAAUt9B,EAAQu9B,GAElBA,EAAWt9B,KAAO,SAAU0N,EAAKC,EAAkBlI,GACjD,GAAmB,iBAARiI,EACT,MAAM,IAAIG,UAAU,iCAEtB,OAAO9N,EAAO2N,EAAKC,EAAkBlI,IAGvC63B,EAAWxqB,MAAQ,SAAUhM,EAAM2M,EAAMhS,GACvC,GAAoB,iBAATqF,EACT,MAAM,IAAI+G,UAAU,6BAEtB,IAAIuC,EAAMrQ,EAAO+G,GAUjB,YATanJ,IAAT8V,EACsB,iBAAbhS,EACT2O,EAAIqD,KAAKA,EAAMhS,GAEf2O,EAAIqD,KAAKA,GAGXrD,EAAIqD,KAAK,GAEJrD,GAGTktB,EAAW1vB,YAAc,SAAU9G,GACjC,GAAoB,iBAATA,EACT,MAAM,IAAI+G,UAAU,6BAEtB,OAAO9N,EAAO+G,IAGhBw2B,EAAW5pB,gBAAkB,SAAU5M,GACrC,GAAoB,iBAATA,EACT,MAAM,IAAI+G,UAAU,6BAEtB,OAAO/N,EAAO+S,WAAW/L,K,6BCV3BlS,EAAOD,QAzBP,SAAiB4oC,EAAOntB,EAAK5B,EAAKuF,GAKhC,IAJA,IAAIypB,EAAc,MAARD,EAAiB,EACvBE,EAAOF,IAAU,GAAM,MAAS,EAChC3mC,EAAI,EAEO,IAAR4X,GAAW,CAKhBA,GADA5X,EAAI4X,EAAM,IAAO,IAAOA,EAGxB,GAEEivB,EAAMA,GADND,EAAMA,EAAKptB,EAAI2D,KAAS,GACR,UACPnd,GAEX4mC,GAAM,MACNC,GAAM,MAGR,OAAQD,EAAMC,GAAM,GAAM,I,6BCL5B,IAAIC,EAfJ,WAGE,IAFA,IAAIloC,EAAG4zB,EAAQ,GAENxyB,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC5BpB,EAAIoB,EACJ,IAAK,IAAI+mC,EAAI,EAAGA,EAAI,EAAGA,IACrBnoC,EAAU,EAAJA,EAAU,WAAcA,IAAM,EAAOA,IAAM,EAEnD4zB,EAAMxyB,GAAKpB,EAGb,OAAO4zB,EAIMwU,GAiBfhpC,EAAOD,QAdP,SAAewyB,EAAK/W,EAAK5B,EAAKuF,GAC5B,IAAI1d,EAAIqnC,EACJruB,EAAM0E,EAAMvF,EAEhB2Y,IAAQ,EAER,IAAK,IAAIhyB,EAAI4e,EAAK5e,EAAIka,EAAKla,IACzBgyB,EAAOA,IAAQ,EAAK9wB,EAAmB,KAAhB8wB,EAAM/W,EAAIjb,KAGnC,OAAgB,EAARgyB,I,6BClDV,IAAI0W,EAAQ,EAAQ,IAQhBC,GAAe,EACfC,GAAmB,EAEvB,IAAMnhC,OAAO8V,aAAaC,MAAM,KAAM,CAAE,IAAQ,MAAOqrB,GAAMF,GAAe,EAC5E,IAAMlhC,OAAO8V,aAAaC,MAAM,KAAM,IAAInF,WAAW,IAAO,MAAOwwB,GAAMD,GAAmB,EAO5F,IADA,IAAIE,EAAW,IAAIJ,EAAMvd,KAAK,KACrB4d,EAAI,EAAGA,EAAI,IAAKA,IACvBD,EAASC,GAAMA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAI,EA4D5F,SAASC,EAAc/tB,EAAK5B,GAI1B,GAAIA,EAAM,QACH4B,EAAI8C,UAAY6qB,IAAuB3tB,EAAI8C,UAAY4qB,GAC1D,OAAOlhC,OAAO8V,aAAaC,MAAM,KAAMkrB,EAAMne,UAAUtP,EAAK5B,IAKhE,IADA,IAAIlS,EAAS,GACJnH,EAAI,EAAGA,EAAIqZ,EAAKrZ,IACvBmH,GAAUM,OAAO8V,aAAatC,EAAIjb,IAEpC,OAAOmH,EAxET2hC,EAAS,KAAOA,EAAS,KAAO,EAIhCtpC,EAAQypC,WAAa,SAAUjtB,GAC7B,IAAIf,EAAK5a,EAAG6oC,EAAIC,EAAOnpC,EAAGopC,EAAUptB,EAAI1L,OAAQ+4B,EAAU,EAG1D,IAAKF,EAAQ,EAAGA,EAAQC,EAASD,IAEV,QAAZ,OADT9oC,EAAI2b,EAAIE,WAAWitB,MACaA,EAAQ,EAAIC,GAEpB,QAAZ,OADVF,EAAKltB,EAAIE,WAAWitB,EAAQ,OAE1B9oC,EAAI,OAAYA,EAAI,OAAW,KAAO6oC,EAAK,OAC3CC,KAGJE,GAAWhpC,EAAI,IAAO,EAAIA,EAAI,KAAQ,EAAIA,EAAI,MAAU,EAAI,EAO9D,IAHA4a,EAAM,IAAIytB,EAAMvd,KAAKke,GAGhBrpC,EAAI,EAAGmpC,EAAQ,EAAGnpC,EAAIqpC,EAASF,IAEb,QAAZ,OADT9oC,EAAI2b,EAAIE,WAAWitB,MACaA,EAAQ,EAAIC,GAEpB,QAAZ,OADVF,EAAKltB,EAAIE,WAAWitB,EAAQ,OAE1B9oC,EAAI,OAAYA,EAAI,OAAW,KAAO6oC,EAAK,OAC3CC,KAGA9oC,EAAI,IAEN4a,EAAIjb,KAAOK,EACFA,EAAI,MAEb4a,EAAIjb,KAAO,IAAQK,IAAM,EACzB4a,EAAIjb,KAAO,IAAY,GAAJK,GACVA,EAAI,OAEb4a,EAAIjb,KAAO,IAAQK,IAAM,GACzB4a,EAAIjb,KAAO,IAAQK,IAAM,EAAI,GAC7B4a,EAAIjb,KAAO,IAAY,GAAJK,IAGnB4a,EAAIjb,KAAO,IAAQK,IAAM,GACzB4a,EAAIjb,KAAO,IAAQK,IAAM,GAAK,GAC9B4a,EAAIjb,KAAO,IAAQK,IAAM,EAAI,GAC7B4a,EAAIjb,KAAO,IAAY,GAAJK,GAIvB,OAAO4a,GAuBTzb,EAAQwpC,cAAgB,SAAU/tB,GAChC,OAAO+tB,EAAc/tB,EAAKA,EAAI3K,SAKhC9Q,EAAQ8pC,cAAgB,SAAUttB,GAEhC,IADA,IAAIf,EAAM,IAAIytB,EAAMvd,KAAKnP,EAAI1L,QACpBtQ,EAAI,EAAGqZ,EAAM4B,EAAI3K,OAAQtQ,EAAIqZ,EAAKrZ,IACzCib,EAAIjb,GAAKgc,EAAIE,WAAWlc,GAE1B,OAAOib,GAKTzb,EAAQ+pC,WAAa,SAAUtuB,EAAKkE,GAClC,IAAInf,EAAG4f,EAAKvf,EAAGmpC,EACXnwB,EAAM8F,GAAOlE,EAAI3K,OAKjBm5B,EAAW,IAAIniC,MAAY,EAAN+R,GAEzB,IAAKuG,EAAM,EAAG5f,EAAI,EAAGA,EAAIqZ,GAGvB,IAFAhZ,EAAI4a,EAAIjb,MAEA,IAAQypC,EAAS7pB,KAASvf,OAIlC,IAFAmpC,EAAQV,EAASzoC,IAEL,EAAKopC,EAAS7pB,KAAS,MAAQ5f,GAAKwpC,EAAQ,MAAxD,CAKA,IAFAnpC,GAAe,IAAVmpC,EAAc,GAAiB,IAAVA,EAAc,GAAO,EAExCA,EAAQ,GAAKxpC,EAAIqZ,GACtBhZ,EAAKA,GAAK,EAAiB,GAAX4a,EAAIjb,KACpBwpC,IAIEA,EAAQ,EAAKC,EAAS7pB,KAAS,MAE/Bvf,EAAI,MACNopC,EAAS7pB,KAASvf,GAElBA,GAAK,MACLopC,EAAS7pB,KAAS,MAAWvf,GAAK,GAAM,KACxCopC,EAAS7pB,KAAS,MAAc,KAAJvf,GAIhC,OAAO2oC,EAAcS,EAAU7pB,IAUjCpgB,EAAQkqC,WAAa,SAAUzuB,EAAKkE,GAClC,IAAIP,EAOJ,KALAO,EAAMA,GAAOlE,EAAI3K,QACP2K,EAAI3K,SAAU6O,EAAMlE,EAAI3K,QAGlCsO,EAAMO,EAAM,EACLP,GAAO,GAA2B,MAAV,IAAX3D,EAAI2D,KAAyBA,IAIjD,OAAIA,EAAM,EAAYO,EAIV,IAARP,EAAoBO,EAEhBP,EAAMkqB,EAAS7tB,EAAI2D,IAAQO,EAAOP,EAAMO,I,6BC3IlD1f,EAAOD,QAzBP,WAEEuH,KAAKqgB,MAAQ,KACbrgB,KAAK4iC,QAAU,EAEf5iC,KAAK6iC,SAAW,EAEhB7iC,KAAK8iC,SAAW,EAEhB9iC,KAAK63B,OAAS,KACd73B,KAAK+iC,SAAW,EAEhB/iC,KAAKgjC,UAAY,EAEjBhjC,KAAKijC,UAAY,EAEjBjjC,KAAKkjC,IAAM,GAEXljC,KAAKmjC,MAAQ,KAEbnjC,KAAKojC,UAAY,EAEjBpjC,KAAKqhC,MAAQ,I,6BCtBf3oC,EAAOD,QAAU,CAGf4qC,WAAoB,EACpBC,gBAAoB,EACpBC,aAAoB,EACpBC,aAAoB,EACpBC,SAAoB,EACpBC,QAAoB,EACpBC,QAAoB,EAKpBC,KAAoB,EACpBC,aAAoB,EACpBC,YAAoB,EACpBC,SAAoB,EACpBC,gBAAoB,EACpBC,cAAoB,EAEpBC,aAAoB,EAIpBC,iBAA0B,EAC1BC,aAA0B,EAC1BC,mBAA0B,EAC1BC,uBAA0B,EAG1BC,WAA0B,EAC1BC,eAA0B,EAC1BC,MAA0B,EAC1BC,QAA0B,EAC1BC,mBAA0B,EAG1BC,SAA0B,EAC1BC,OAA0B,EAE1BC,UAA0B,EAG1BC,WAA0B,I,cCjE5B,IAAIC,EACAngC,EAEJnM,EAAOD,QAAUusC,EAAQ,GAEzBngC,EAAyB,oBAAZvD,QAA0B,KAAO,IAAIA,QAElD0jC,EAAMlrC,IAAO+K,EAMb,SAAawT,GACX,IAAIQ,EAAMhU,EAAI/K,IAAIue,EAAOzU,QACrBiV,GACFhU,EAAIzB,IAAIiV,EAAOzU,OAAQiV,EAAM,IAAIosB,SAAS5sB,EAAOzU,OAAQ,IAE3D,OAAOiV,GATT,SAAwBR,GACtB,OAAO,IAAI4sB,SAAS5sB,EAAOzU,OAAQ,K,6BCVrC,2CAEO,SAASshC,GAAwB,aACtCnO,EAAe,GADuB,MAEtCoO,EAAQ,GAF8B,MAGtCC,EAAQ,GAH8B,SAItCC,EAAW,GAJ2B,MAKtCx6B,EAAQ,KAL8B,MAMtCy6B,EAAQ,KAN8B,QAOtChlB,EAAU,KAEV,MAAMilB,EAAa,GACnBJ,EAAQ,IAAI,IAAIt+B,IAAIs+B,IACpB,IAAIK,MAA4BzO,EAAat2B,KAAK,OAClD,IAAK,MAAMsH,KAAOo9B,EAChBI,EAAW96B,KAAK+F,IAAWi1B,eAAe19B,IAAMy9B,QAChDA,EAAwB,GAE1B,IAAK,MAAMz9B,KAAOs9B,EAChBE,EAAW96B,KAAK+F,IAAWi1B,kBAAkB19B,QAEjC,OAAV8C,GACF06B,EAAW96B,KAAK+F,IAAWi1B,iBAAiB56B,QAEhC,OAAVy6B,GACFC,EAAW96B,KACT+F,IAAWi1B,uBAAuB5vB,KAAKqF,MAAMoqB,EAAMjkB,UAAY,WAGnE,IAAK,MAAMtZ,KAAOuY,EAChBilB,EAAW96B,KAAK+F,IAAWi1B,qBAAqB19B,QAElDw9B,EAAW96B,KAAK+F,IAAWk1B,SAC3B,IAAK,MAAM39B,KAAOq9B,EAChBG,EAAW96B,KAAK+F,IAAWi1B,eAAe19B,QAG5C,OADAw9B,EAAW96B,KAAK+F,IAAWi1B,OAAQ,WAC5BF,I,iNCjCF,SAAeI,EAAtB,kC,4BAAO,UAAwCh1B,GAC7C,MAAM,YAAEwiB,EAAF,SAAeC,EAAf,SAAyBC,GAAaJ,IAAY2S,MAAMj1B,GACxD00B,EAAW,GACXQ,EAAa,GACbC,EAAO,GACb,IAAIC,GAAM,EACNvf,GAAO,EACX,OAAO,IAAI7hB,QAAQ,CAACoG,EAASiV,KAE3BoG,YAAS+M,EAAarzB,IACpB,MAAMyH,EAAOzH,EAAKmB,SAAS,QAAQoG,OACnC,GAAIE,EAAKI,WAAW,WAAY,CAC9B,MAAMI,EAAMR,EAAKK,OAAO,IAAIP,OACT,KAAfU,EAAIwB,QACNyW,EAAO,IAAItgB,IAASD,IAAE9C,sBAAuB,CAAEoL,SAEjDs9B,EAAS56B,KAAK1C,QACT,GAAIR,EAAKI,WAAW,aAAc,CACvC,MAAMI,EAAMR,EAAKK,OAAO,IAAIP,OACT,KAAfU,EAAIwB,QACNyW,EAAO,IAAItgB,IAASD,IAAE9C,sBAAuB,CAAEoL,SAEjD89B,EAAWp7B,KAAK1C,QACX,GAAIR,EAAKI,WAAW,OAAQ,CACjC,MAAO,CAAEI,EAAK8uB,GAAUtvB,EAAKD,MAAM,KACnCw+B,EAAKr7B,KAAK,CAAE1C,MAAK8uB,WACZA,IAAQrQ,GAAO,QACXjf,EAAKI,WAAW,SACzBo+B,GAAM,EACNvf,GAAO,GAELA,GACFzb,EAAQ,CAAEs6B,WAAUQ,aAAYC,OAAMC,MAAK3S,WAAUC,mB,2pBCCtD,SAAe2S,EAAtB,kC,wBAAO,WAA0B,KAC/Bh/B,EAAO,UADwB,IAE/BvC,EAF+B,OAG/BmE,EAASnI,YAAKgE,EAAK,QACnBjD,GAAImH,EAAM5B,IAAMjN,IAAIkN,GAAMlN,IAAI,MAJC,OAK/BmsC,EAL+B,QAM/BC,EAN+B,SAO/BC,EAP+B,QAQ/BzI,EAAU,OARqB,SAS/BC,EAAW,OAToB,UAU/BC,EAAY,SAVmB,OAW/Bhb,GAAS,IAET,MAAMphB,EAAK,IAAID,IAAWoH,GACpBy9B,EAAUrgB,YAAK,CAAEle,IAAKo+B,IACtBI,EAAWtgB,YAAK,CAAEle,IAAKq+B,IACvBI,EAAYvgB,YAAK,CAAEle,IAAKs+B,IAyEpB,IAAF,EAjEH,EAsFL,aA5FsB7e,YAAU,CAC9BtgB,OACAxF,KACAiD,MACAmE,SACA2e,MAAO,CAAC6e,EAASC,EAAUC,GAC3BzhC,KAAG,IAAE,UAAgBvB,GAAWw6B,EAAMpR,EAAMqR,IAC1C,MAAM73B,EAAOwe,YAASphB,GAItB,gBAFwB+4B,EAASyB,EAAMpR,YACb2P,EAAS0B,EAAQrR,MAEzC,IAAK,cACH,MAAO,CACLtyB,WAAYsyB,EAAKtyB,OACjB8L,OACA6B,UAAW2kB,EAAK3kB,MAChBkE,WAAYygB,EAAKzgB,QAGrB,IAAK,aACH,OAAO8xB,EACH,CACA3jC,WAAY2jC,EAAO3jC,OACnB8L,OACA6B,UAAWg2B,EAAOh2B,MAClBkE,WAAY8xB,EAAO9xB,aAEnB,EAEN,IAAK,aACH,OAAO6xB,EACH,CACA1jC,WAAY0jC,EAAK1jC,OACjB8L,OACA6B,UAAW+1B,EAAK/1B,MAChBkE,WAAY6xB,EAAK7xB,aAEjB,EAEN,IAAK,YAEH,GACE6xB,GACApR,GACAqR,GACwB,gBAAjBD,EAAK7xB,SACY,gBAAjBygB,EAAKzgB,SACc,gBAAnB8xB,EAAO9xB,QAEd,O,2CAAOs6B,CAAW,CAChB/kC,KACAoH,SACA1C,OACA43B,OACApR,OACAqR,SACAL,UACAC,WACAC,cAIJ,MAAM,IAAIl+B,IAASD,IAAE5C,0BAzDxB,+CAiEHoI,QAAM,IAAE,UAAOd,EAAQqjB,GACrB,MAAM5a,EAAU4a,EAASxf,OAAOwwB,SAGhC,IAAIr0B,GAA0B,SAAhBA,EAAO8H,MAAsC,IAAnBW,EAAQrD,OAAhD,CAEA,GAAIqD,EAAQrD,OAAS,EAAG,CACtB,MACM5O,EADO,IAAIqiB,IAAQpQ,GACL6B,WACd1G,QAAY4a,YAAY,CAC5BnhB,KACAoH,SACAqD,KAAM,OACNtR,SACAioB,WAEFze,EAAO4D,IAAMA,EAEf,OAAO5D,KAlBH,kDAqBO4D,O,+BASFs0B,E,4DAAf,UAAyBp0B,EAAOykB,GAC9B,SAAKzkB,IAAUykB,QACXzkB,GAAUykB,OACTzkB,IAASykB,KACe,gBAAlBzkB,EAAMgE,SAA8C,gBAAjBygB,EAAKzgB,kBAI1ChE,EAAMgE,iBAAmBygB,EAAKzgB,gBAC9BhE,EAAM7N,iBAAmBsyB,EAAKtyB,gBAC9B6N,EAAMF,gBAAkB2kB,EAAK3kB,a,8CAwBxC,WAA2B,GACzBvG,EADyB,OAEzBoH,EAFyB,KAGzB1C,EAHyB,KAIzB43B,EAJyB,KAKzBpR,EALyB,OAMzBqR,EANyB,QAOzBL,EAPyB,UAQzBE,EARyB,SASzBD,EATyB,OAUzBjyB,EAVyB,WAWzBmyB,EAXyB,OAYzBjb,IAEA,MAGMxoB,SACGsyB,EAAKtyB,iBAAmB0jC,EAAK1jC,cAC1B2jC,EAAO3jC,aACP0jC,EAAK1jC,OAEjB,UAAW0jC,EAAK/1B,gBAAkBg2B,EAAOh2B,OACvC,MAAO,CAAE3N,OAAM8L,OAAM6B,UAAW+1B,EAAK/1B,MAAOkE,KATjC,QAYb,UAAW6xB,EAAK/1B,gBAAkB2kB,EAAK3kB,OACrC,MAAO,CAAE3N,OAAM8L,OAAM6B,UAAWg2B,EAAOh2B,MAAOkE,KAbnC,QAeb,UAAW8xB,EAAOh2B,gBAAkB2kB,EAAK3kB,OACvC,MAAO,CAAE3N,OAAM8L,OAAM6B,UAAW+1B,EAAK/1B,MAAOkE,KAhBjC,QAmBb,MAAM,WAAEgyB,EAAF,WAAcC,GAAeZ,YAAU,CAC3CC,kBAAmBO,EAAKvY,WAAWtkB,SAAS,QAC5Cu8B,mBAAoB9Q,EAAKnH,WAAWtkB,SAAS,QAC7Cw8B,oBAAqBM,EAAOxY,WAAWtkB,SAAS,QAChDy8B,UACAE,YACAD,WACAjyB,SACAmyB,eAEF,IAAKK,EAEH,MAAM,IAAIx+B,IAASD,IAAE5C,uBASvB,MAAO,CAAEzC,OAAM8L,OAAM6B,UAPH4a,YAAY,CAC5BnhB,KACAoH,SACAqD,KAAM,OACNtR,OAAQkJ,EAAOC,KAAKm6B,EAAY,QAChCrb,WAEwB3W,KAxCb,W,8eClMR,SAAeu6B,EAAtB,kC,wBAAO,WAAmC,KACxCx/B,EAAO,UADiC,IAExCvC,EAFwC,OAGxCmE,EAASnI,YAAKgE,EAAK,QACnBjD,GAAImH,EAAM5B,IAAMjN,IAAIkN,GAAMlN,IAAI,MAJU,MAKxCoZ,EALwC,OAMxCuzB,IAEA,MAAMjlC,EAAK,IAAID,IAAWoH,GACpB08B,QAAiB1e,IAAkBhjB,KAAK,CAAEnC,KAAIoH,WAC9C89B,EAAc,IAAI7/B,IAClB8/B,EAAe,IAAI9/B,IACzB,IAAK,MAAMgB,KAAOqL,EAChBwzB,EAAY7f,UAAUne,IAAcqC,QAAQ,CAAEvJ,KAAIoH,SAAQf,SAE5D,IAAK,MAAMA,KAAO4+B,EAEhB,IACE,MAAM1+B,QAAYW,IAAcqC,QAAQ,CAAEvJ,KAAIoH,SAAQf,QACtD8+B,EAAa9f,IAAI9e,GACjB,MAAOvE,IAEX,MAAMojC,EAAU,IAAI//B,IAfnB,SAmBc+gB,EAnBd,0DAmBD,UAAqB7f,GACnB6+B,EAAQ/f,IAAI9e,GACZ,MAAM,KAAEkE,EAAF,OAAQtR,SAAiB8Q,YAAW,CAAEjK,KAAIoH,SAAQb,QAExD,GAAa,QAATkE,EAAgB,CAGlB,OAAO2b,EAFKrI,IAAgBzb,KAAKnJ,GACdyT,UAAUzT,QAG/B,GAAa,WAATsR,EACF,MAAM,IAAIvM,IAASD,IAAE7D,wBAAyB,CAC5CmM,MACAkE,OACAqZ,SAAU,WAGd,IAAK+f,EAAS1jC,IAAIoG,GAAM,CACtB,MACM8+B,EADSh5B,IAAU/J,KAAKnJ,GACPyT,UAAUjK,OACjC,IAAK4D,KAAO8+B,EACLF,EAAahlC,IAAIoG,IAAS6+B,EAAQjlC,IAAIoG,WACnC6f,EAAK7f,QAxClB,sBA8CD,IAAK,MAAMA,KAAO2+B,QACV9e,EAAK7f,GAEb,OAAO6+B,K,scC1DF,SAAeE,EAAtB,kC,wBAAO,WAA4B,KACjC9/B,EAAO,UAD0B,IAEjCvC,EAFiC,OAGjCmE,EAASnI,YAAKgE,EAAK,QACnBjD,GAAImH,EAAM5B,IAAMjN,IAAIkN,GAAMlN,IAAI,MAJG,KAKjC8sB,IAEA,MAAMplB,EAAK,IAAID,IAAWoH,GACpBi+B,EAAU,IAAI//B,IAFnB,SAMc+gB,EANd,0DAMD,UAAqB7f,GACnB6+B,EAAQ/f,IAAI9e,GACZ,MAAM,KAAEkE,EAAF,OAAQtR,SAAiB8Q,YAAW,CAAEjK,KAAIoH,SAAQb,QACxD,GAAa,QAATkE,EAAgB,CAClB,MACM8C,EADMwQ,IAAgBzb,KAAKnJ,GACjByT,UAAUzT,aACpBitB,EAAK7Y,QACN,GAAa,WAAT9C,EAAmB,CAC5B,MACMkD,EADStB,IAAU/J,KAAKnJ,GACVyT,UAAUe,WACxByY,EAAKzY,QACN,GAAa,SAATlD,EAAiB,CAC1B,MAAMkD,EAAO6N,IAAQlZ,KAAKnJ,GAC1B,IAAK,MAAMsN,KAASkH,EAGC,SAAflH,EAAMgE,MAAkC,SAAfhE,EAAMgE,MACjC26B,EAAQ/f,IAAI5e,EAAMF,KAGD,SAAfE,EAAMgE,aACF2b,EAAK3f,EAAMF,UA3BxB,sBAiCD,IAAK,MAAMA,KAAO6e,QACVgB,EAAK7f,GAEb,OAAO6+B,K,yNChDF,SAAeG,EAAtB,kC,4BAAO,WAAwC,aAC7ChQ,EAAe,GAD8B,SAE7CiQ,EAAW,KAEX,MAAMzB,EAAa,GACnB,IAAI0B,QAAwBlQ,EAAat2B,KAAK,OAC9C,IAAK,MAAMymC,KAAQF,EACjBzB,EAAW96B,KACT+F,IAAWi1B,UACNyB,EAAKC,UAAUD,EAAKn/B,OAAOm/B,EAAKE,UAAUH,QAGjDA,EAAgB,GAGlB,OADA1B,EAAW96B,KAAK+F,IAAWk1B,SACpBH,I,+YCdF,SAAe8B,EAAtB,kC,4BAAO,UAAyCjU,GAC9C,MAAMhzB,EAAS,GACf,IAAIyuB,EAAW,GACf,MAAMlrB,EAAO6M,IAAW0iB,aAAaE,GACrC,IAAI7rB,QAAa5D,IACjB,MAAgB,IAAT4D,GACQ,OAATA,IAAesnB,GAAYtnB,EAAKtG,SAAS,QAAU,MACvDsG,QAAa5D,IAGf,MAAM2jC,EAAQzY,EAAS5tB,SAAS,QAAQqG,MAAM,MAG9C,KADAC,EAAO+/B,EAAMnnB,SACHxY,WAAW,WACnB,MAAM,IAAIjI,IAASD,IAAErD,8BAA+B,CAAEmL,SAE3C,cAATA,EACFnH,EAAO+9B,GAAK,CAAC,UAEb/9B,EAAOmnC,OAAS,CAAChgC,EAAKF,QAExB,IAAK,MAAME,KAAQ+/B,EAAO,CACxB,MAAMzQ,EAAStvB,EAAKK,MAAM,EAAG,GACvB4/B,EAAgBjgC,EAAKK,MAAM,GAClB,OAAXivB,GACFz2B,EAAO+9B,GAAK/9B,EAAO+9B,IAAM,GACzB/9B,EAAO+9B,GAAG1zB,KAAK+8B,IACK,OAAX3Q,IACTz2B,EAAOmnC,OAASnnC,EAAOmnC,QAAU,GACjCnnC,EAAOmnC,OAAO98B,KAAK+8B,IAGvB,OAAOpnC,I,oOC9BF,SAAS0tB,EAAMP,EAAUC,GAE9B,QAAiB/rB,IAAb+rB,EAAwB,CAC1B,MAAMv0B,EAAIs0B,EAAS7lB,QAAQ,KACvBzO,GAAK,GACPu0B,EAAWD,EAAS3lB,MAAM3O,EAAI,GAC9Bs0B,EAAWA,EAAS3lB,MAAM,EAAG3O,IAE7Bu0B,EAAW,GAGf,MAAO,CAAED,WAAUC,YAhBrB,iC,iBCAA,YACA,SAASia,EAAWC,GAClB,OAAOnnC,MAAMC,QAAQknC,GACjBA,EACA,CAACA,GAGP,MAAMC,EAAwB,QACxBC,EAA4C,OAC5CC,EAAqC,OACrCC,EAAsB,SAMtBC,EAA0B,eAE1BC,EAAQ,IACRC,EAA+B,oBAAXjuC,OACtBA,OAAOkuC,IAAI,eAEX,cAEEvvC,EAAS,CAACgC,EAAQH,EAAKN,IAC3BP,OAAOC,eAAee,EAAQH,EAAK,CAACN,UAEhCiuC,EAAqB,mBAwBrBC,EAAY,CAGhB,CAIE,UACAj/B,GAAiC,IAAxBA,EAAMzB,QAAQ,MACnB,IACA,IAIN,CACE,QACA,IAAM,KAoBR,CACE,iBACAyB,QAAcA,KAGhB,CAGE,sBACA,CAACA,EAAOk/B,EAAIC,IAAc,MAAPA,MAjEDvgB,IAASA,EAAMpnB,QACnCwnC,EACA,CAACh/B,EAAOrF,EAAMu8B,IAAOv8B,EAAKqR,WAAW,IAAMkrB,EAAGlrB,WAAW,GACrDhM,EAGA,IA4DMo/B,CAAcF,WACbl/B,KAGX,CAEE,YACA,IAAM,QAIR,CAKE,MACA,IAAM,KAIR,CACE,MACA,IAAM,OAGR,CAOE,mBAGA,IAAM,eAIR,CAGE,YAcAA,GAAS,MAAM3B,KAAK2B,MAEbA,QAEAA,eAIT,CAIE,YACA,WAEE,MAAQ,UAAU3B,KAAKxH,MAiBnB,IAJA,cASR,CAEE,0BAMA,CAACuQ,EAAGmO,EAAOzJ,IAAQyJ,EAAQ,EAAIzJ,EAAI1L,OAO/B,kBAMA,SAIN,CAME,wBAIA,CAACgH,EAAG83B,OAAUA,YAIhB,CACE,kBACA,CAAC93B,EAAG83B,KAcF,SAbeA,KAORA,SAIH,sBAMR,CAEE,UACA,IAAM,OAKJG,EAAa7uC,OAAOY,OAAO,MAuB3BkuC,EAAWf,GAA8B,iBAAZA,EAG7BgB,EAAeloB,GAAWA,GAC3BioB,EAASjoB,KACRmnB,EAAsBngC,KAAKgZ,IAGH,IAAzBA,EAAQ9Y,QAAQ,KAEfihC,EAAenoB,GAAWA,EAAQlZ,MAAMwgC,GAE9C,MAAMc,EACJ,YACEC,EACAroB,EACAsoB,EACAC,GAEA/oC,KAAK6oC,OAASA,EACd7oC,KAAKwgB,QAAUA,EACfxgB,KAAK8oC,SAAWA,EAChB9oC,KAAK+oC,MAAQA,GAIjB,MAAMC,EAAa,CAACxoB,EAASuZ,KAC3B,MAAM8O,EAASroB,EACf,IAAIsoB,GAAW,EAGc,IAAzBtoB,EAAQ9Y,QAAQ,OAClBohC,GAAW,EACXtoB,EAAUA,EAAQ3L,OAAO,IAW3B,MAAMk0B,EAhEU,EAACvoB,EAASsoB,EAAU/O,KACpC,MAAMhgC,EAAIyuC,EAAWhoB,GACrB,GAAIzmB,EACF,OAAOA,EAOT,MAAMwpB,EAAS6kB,EAAUnjC,OACvB,CAACgkC,EAAMC,IAAYD,EAAKtoC,QAAQuoC,EAAQ,GAAIA,EAAQ,GAAGzuC,KAAK+lB,IAC5DA,GAGF,OAAOgoB,EAAWhoB,GAAWuZ,EACzB,IAAIn5B,OAAO2iB,EAAQ,KACnB,IAAI3iB,OAAO2iB,IA+CD4lB,CARd3oB,EAAUA,EAGT7f,QAAQinC,EAA2C,KAGnDjnC,QAAQknC,EAAoC,KAEZiB,EAAU/O,GAE3C,OAAO,IAAI6O,EACTC,EACAroB,EACAsoB,EACAC,IAIEK,EAAa,CAACnpC,EAASopC,KAC3B,MAAM,IAAIA,EAAKppC,IAGXqpC,EAAY,CAACpjC,EAAMqjC,EAAcC,KACrC,IAAKf,EAASviC,GACZ,OAAOsjC,sCAC+BD,MACpC53B,WAKJ,IAAKzL,EACH,OAAOsjC,EAAQ,yBAA0B73B,WAI3C,GAAI23B,EAAUG,cAAcvjC,GAAO,CAEjC,OAAOsjC,sBADG,yCAEkCD,KAC1Cl4B,YAIJ,OAAO,GAGHo4B,EAAgBvjC,GAAQ6hC,EAAwBvgC,KAAKtB,GAE3DojC,EAAUG,cAAgBA,EAC1BH,EAAUI,QAAU3uC,GAAKA,EAEzB,MAAM4uC,EACJ,aAAa,WACX5P,GAAa,GACX,IACF/5B,KAAK4pC,OAAS,GACd5pC,KAAK6pC,YAAc9P,EACnBphC,EAAOqH,KAAMioC,GAAY,GACzBjoC,KAAK8pC,aAGP,aACE9pC,KAAK+pC,aAAepwC,OAAOY,OAAO,MAClCyF,KAAKgqC,WAAarwC,OAAOY,OAAO,MAGlC,YAAaimB,GAEX,GAAIA,GAAWA,EAAQynB,GAGrB,OAFAjoC,KAAK4pC,OAAS5pC,KAAK4pC,OAAOxkC,OAAOob,EAAQopB,aACzC5pC,KAAKiqC,QAAS,GAIhB,GAAIvB,EAAaloB,GAAU,CACzB,MAAMoc,EAAOoM,EAAWxoB,EAASxgB,KAAK6pC,aACtC7pC,KAAKiqC,QAAS,EACdjqC,KAAK4pC,OAAOn/B,KAAKmyB,IAKrB,IAAKpc,GAeH,OAdAxgB,KAAKiqC,QAAS,EAEdxC,EACEgB,EAASjoB,GACLmoB,EAAanoB,GACbA,GACJ0pB,QAAQlqC,KAAKmqC,YAAanqC,MAIxBA,KAAKiqC,QACPjqC,KAAK8pC,aAGA9pC,KAIT,WAAYwgB,GACV,OAAOxgB,KAAK6mB,IAAIrG,GAmBlB,SAAUta,EAAMkkC,GACd,IAAIzX,GAAU,EACVD,GAAY,EAmBhB,OAjBA1yB,KAAK4pC,OAAOM,QAAQtN,IAClB,MAAM,SAACkM,GAAYlM,EAEjBlK,IAAcoW,GAAYnW,IAAYD,GACnCoW,IAAanW,IAAYD,IAAc0X,GAK5BxN,EAAKmM,MAAMvhC,KAAKtB,KAG9BysB,GAAWmW,EACXpW,EAAYoW,KAIT,CACLnW,UACAD,aAKJ,MAAO6W,EAAcc,EAAOD,EAAgBE,GAC1C,MAAMpkC,EAAOqjC,GAERD,EAAUI,QAAQH,GAIvB,OAFAD,EAAUpjC,EAAMqjC,EAAcH,GAEvBppC,KAAKuqC,GAAGrkC,EAAMmkC,EAAOD,EAAgBE,GAG9C,GAAIpkC,EAAMmkC,EAAOD,EAAgBE,GAC/B,GAAIpkC,KAAQmkC,EACV,OAAOA,EAAMnkC,GAYf,GATKokC,IAGHA,EAASpkC,EAAKoB,MAAM0gC,IAGtBsC,EAAO/rB,OAGF+rB,EAAO/gC,OACV,OAAO8gC,EAAMnkC,GAAQlG,KAAKwqC,SAAStkC,EAAMkkC,GAG3C,MAAMjmC,EAASnE,KAAKuqC,GAClBD,EAAO7pC,KAAKunC,GAASA,EACrBqC,EACAD,EACAE,GAIF,OAAOD,EAAMnkC,GAAQ/B,EAAOwuB,QAGxBxuB,EACAnE,KAAKwqC,SAAStkC,EAAMkkC,GAG1B,QAASlkC,GACP,OAAOlG,KAAKyqC,MAAMvkC,EAAMlG,KAAK+pC,cAAc,GAAOpX,QAGpD,eACE,OAAOzsB,IAASlG,KAAKyyB,QAAQvsB,GAG/B,OAAQi6B,GACN,OAAOsH,EAAUtH,GAAOn4B,OAAOhI,KAAK0qC,gBAItC,KAAMxkC,GACJ,OAAOlG,KAAKyqC,MAAMvkC,EAAMlG,KAAKgqC,YAAY,IAI7C,MAAMxxC,EAAU+K,GAAW,IAAIomC,EAAOpmC,GAEhConC,EAAc,KAAM,EAe1B,GAVAnyC,EAAQoyC,YAHY1kC,GAClBojC,EAAUpjC,GAAQojC,EAAUI,QAAQxjC,GAAOA,EAAMykC,GAKnDnyC,EAAQqyC,QAAUryC,EAElBE,EAAOD,QAAUD,OAOI,IAAZyX,IAELA,EAAQC,KAAOD,EAAQC,IAAI46B,mBACH,UAArB76B,EAAQ86B,UAEb,CAEA,MAAMC,EAAY/1B,GAAO,YAAYzN,KAAKyN,IACvC,wBAAwBzN,KAAKyN,GAC5BA,EACAA,EAAItU,QAAQ,MAAO,KAEvB2oC,EAAUI,QAAUsB,EAIpB,MAAMC,EAAiC,aACvC3B,EAAUG,cAAgBvjC,GACxB+kC,EAA+BzjC,KAAKtB,IACjCujC,EAAcvjC,M,0NCnjBd,SAAe6c,EAAtB,kC,4BAAO,WACLvhB,GAAImH,EADkC,OAEtCC,EAFsC,KAGtCqD,EAHsC,OAItCtR,EAJsC,OAKtC+Q,EALsC,IAMtC3D,IAEA,MAAMvG,EAAK,IAAID,IAAWoH,GAC1B,GAAe,aAAX+C,EACF,MAAM,IAAIhM,IAASD,IAAExB,aAAc,CACjCgC,QACE,0EAGN,MACMqD,KAAcsF,gBADMb,EAAIH,MAAM,EAAG,MAAMG,EAAIH,MAAM,cAK3CpG,EAAG6B,OAAOC,YAAkB9B,EAAGuC,MAAMT,EAAU3I,M,wYCrBtD,SAAeiR,EAAtB,kC,4BAAO,WAAkCpK,GAAImH,EAAN,OAAWC,EAAX,IAAmBb,IACxD,MAAMvG,EAAK,IAAID,IAAWoH,GACpB4a,aAAoBxb,EAAIH,MAAM,EAAG,MAAMG,EAAIH,MAAM,KACjD4C,QAAahJ,EAAGmC,QAAQiF,KAAU2a,KACxC,OAAK/Y,EAGE,CAAE7P,OAAQ6P,EAAMkB,OAAQ,WAAY6X,UAFlC,O,8ZCFJ,SAAe1X,EAAtB,kC,4BAAO,WACLrK,GAAImH,EADkC,OAEtCC,EAFsC,IAGtCb,EAHsC,OAItC2D,EAAS,UAJ6B,oBAKtCC,IAEA,MAAMnK,EAAK,IAAID,IAAWoH,GAG1B,IAAIiP,QAAapW,EAAGsB,QAAQrC,YAAKmI,EAAQ,iBACzCgP,EAAOA,EAAK5P,OAAOwD,GAAKA,EAAEjD,SAAS,SACnC,IAAK,MAAMlD,KAAYuS,EAAM,CAC3B,MAAMszB,KAAetiC,kBAAuBvD,IACtCtK,QAAUu6B,YAAc,CAC5B9zB,KACA6D,SAAU6lC,EACVv/B,wBAEF,GAAI5Q,EAAEqlB,MAAO,MAAM,IAAI1gB,IAASD,IAAExB,aAAc,CAAEgC,QAASlF,EAAEqlB,QAE7D,GAAIrlB,EAAEouB,QAAQxnB,IAAIoG,GAAM,CAEtB,IAAKhN,EAAEuuB,KAAM,CACX,MAAM6hB,EAAWD,EAAUvqC,QAAQ,OAAQ,QAC3C5F,EAAEuuB,KAAO9nB,EAAGmC,KAAKwnC,GAEnB,MAAM/qC,QAAerF,EAAE4I,KAAK,CAAEoE,MAAK4D,wBAGnC,OAFAvL,EAAOsL,OAAS,UAChBtL,EAAOmjB,uBAAyBle,EAAS1E,QAAQ,OAAQ,UAClDP,GAIX,OAAO,O,uNCpCT,IACW5H,IAoBT,SAAS4yC,GACXA,EAAM5mB,QAAU,QAsBhB,IAAI6mB,EAnBJ,WAGC,IAFA,IAAI/xC,EAAI,EAAG4zB,EAAQ,IAAI3sB,MAAM,KAErB7F,EAAG,EAAQ,KAALA,IAAYA,EASzBpB,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAIoB,IACW,UAAapB,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,EAC/C4zB,EAAMxyB,GAAKpB,EAGZ,MAA6B,oBAAf8pB,WAA6B,IAAIA,WAAW8J,GAASA,EAG5Doe,GA+DRF,EAAMle,MAAQme,EAEdD,EAAMG,KAhEN,SAAoBA,EAAMC,GAEzB,IADA,IAAIC,GAAY,EAARD,EAAWE,EAAIH,EAAKhiC,OAAS,EAC7BtQ,EAAI,EAAGA,EAAIyyC,GAElBD,GADAA,EAAKA,IAAI,EAAKJ,EAA2B,KAAxBI,EAAEF,EAAKp2B,WAAWlc,UAC1B,EAAKoyC,EAA2B,KAAxBI,EAAEF,EAAKp2B,WAAWlc,OAGpC,OADGA,IAAMyyC,IAAGD,EAAKA,IAAI,EAAKJ,EAA2B,KAAxBI,EAAIF,EAAKp2B,WAAWlc,OACrC,EAALwyC,GA2DRL,EAAMl3B,IAxDN,SAAmBA,EAAKs3B,GACvB,GAAGt3B,EAAI3K,OAAS,IAAO,OAYxB,SAAqB2K,EAAKs3B,GAEzB,IADA,IAAIC,GAAY,EAARD,EAAWE,EAAIx3B,EAAI3K,OAAS,EAC5BtQ,EAAI,EAAGA,EAAIyyC,GAQlBD,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,EAAKA,IAAI,EAAKJ,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,OAExB,KAAMA,EAAIyyC,EAAE,GAAGD,EAAKA,IAAI,EAAKJ,EAAe,KAAZI,EAAEv3B,EAAIjb,OACtC,OAAY,EAALwyC,EAzBuBE,CAAYz3B,EAAKs3B,GAE/C,IADA,IAAIC,GAAY,EAARD,EAAWE,EAAIx3B,EAAI3K,OAAS,EAC5BtQ,EAAI,EAAGA,EAAIyyC,GAIlBD,GADAA,GADAA,GADAA,EAAKA,IAAI,EAAKJ,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,UACd,EAAKoyC,EAAe,KAAZI,EAAEv3B,EAAIjb,OAExB,KAAMA,EAAIyyC,EAAE,GAAGD,EAAKA,IAAI,EAAKJ,EAAe,KAAZI,EAAEv3B,EAAIjb,OACtC,OAAY,EAALwyC,GAgDRL,EAAMn2B,IA7BN,SAAmBA,EAAKu2B,GAEvB,IADA,IAC6BlyC,EAAGC,EAD5BkyC,GAAY,EAARD,EACAvyC,EAAI,EAAGyyC,EAAEz2B,EAAI1L,OAActQ,EAAIyyC,IACtCpyC,EAAI2b,EAAIE,WAAWlc,MACZ,IACNwyC,EAAKA,IAAI,EAAKJ,EAAU,KAAPI,EAAInyC,IACZA,EAAI,KAEbmyC,GADAA,EAAKA,IAAI,EAAKJ,EAA0B,KAAvBI,GAAK,IAAMnyC,GAAG,EAAG,SACzB,EAAK+xC,EAAqB,KAAlBI,GAAK,IAAO,GAAFnyC,KAClBA,GAAK,OAAUA,EAAI,OAC5BA,EAAa,IAAN,KAAFA,GAAYC,EAAwB,KAApB0b,EAAIE,WAAWlc,KAIpCwyC,GADAA,GADAA,GADAA,EAAKA,IAAI,EAAKJ,EAAyB,KAAtBI,GAAK,IAAMnyC,GAAG,EAAG,QACzB,EAAK+xC,EAA0B,KAAvBI,GAAK,IAAMnyC,GAAG,EAAG,SACzB,EAAK+xC,EAAqC,KAAlCI,GAAK,IAAMlyC,GAAG,EAAG,IAAQ,EAAFD,IAAM,QACrC,EAAK+xC,EAAqB,KAAlBI,GAAK,IAAO,GAAFlyC,MAI3BkyC,GADAA,GADAA,EAAKA,IAAI,EAAKJ,EAA2B,KAAxBI,GAAK,IAAMnyC,GAAG,GAAI,SAC1B,EAAK+xC,EAA0B,KAAvBI,GAAK,IAAMnyC,GAAG,EAAG,SACzB,EAAK+xC,EAAqB,KAAlBI,GAAK,IAAO,GAAFnyC,KAG7B,OAAY,EAALmyC,IArGyB,oBAAtBG,kBAERpzC,EAAQC,GAWTD,EAAgB,K,gBCpBlBE,EAAOD,QAWP,SAAqBozC,EAAOxzB,GAC1B,IAEIyzB,EACAC,EACAC,EACA15B,EACAyW,EANAkjB,EAAiB,CAACrhC,KAAM,KAAMhH,OAAQ,MACtCsoC,EAAoB,CAACthC,KAAM,KAAMhH,OAAQ,MAO7CuoC,EAAaN,EAAOI,GACpBE,EAAaF,EAAeroC,OAAQsoC,GAEpCL,EAAQK,EAAkBtoC,OAE1BmlB,EACAgjB,EAAU,EACVD,EAAgBM,EAAO7xC,OAAO2xC,EAAkBthC,MAEhD0H,EAAMu5B,EAAMtiC,OAEZ,KAAMwf,EAAMzW,GAEA,KADV05B,EAAUH,EAAM9iB,MACCvW,IAASsmB,IAG5B,OAAOgT,EAEP,SAASt5B,IACP45B,EAAO/wB,cAAcgxB,EAAe,EAAG,GACvCD,EAAO/wB,cAAcixB,EAAe,EAAG,GAMvC,IAJA,IACI/iC,EACAiL,EAFA+3B,EAAQ,EAIJ/gC,EAAI,EAAGA,EAAI,IAAKA,EACnBwgC,EAAUO,IACXF,EAAc,EAAI7gC,GAAKqgC,EAAM9iB,MAE/BwjB,IAAU,EAGZ,IAAQ/gC,EAAI,EAAGA,EAAI,IAAKA,EACnBwgC,EAAUO,IACXD,EAAc,EAAI9gC,GAAKqgC,EAAM9iB,MAE/BwjB,IAAU,EAEZD,EAAc,GAAK,EAEnB/iC,EAAS6iC,EAAOlyB,aAAaoyB,EAAe,IAAM,MAClD93B,EAAS43B,EAAOlyB,aAAamyB,EAAe,GAE5CD,EAAO55B,KAAK6F,EAAQyzB,EAAeC,EAASv3B,EAAQA,EAASjL,GAC7DwiC,GAAWxiC,EAGb,SAASuvB,IACPsT,EAAO55B,KAAKq5B,EAAOC,EAAeC,EAAShjB,EAAKijB,EAAUjjB,GAC1DA,GAAOijB,EACPD,GAAWC,IArEf,IAAII,EAAS,EAAQ,KAEjBI,EAAK,IADK,EAAQ,MAKlBH,EAAgBD,EAAO7xC,OAAO,GAC9B+xC,EAAgBF,EAAO7xC,OAAO,GAkElC,SAAS4xC,EAAaj4B,EAAK2jB,GACzB,IAAIrR,GAAO,EACPuC,EAAM,EACNne,EAAO,EAEX4hC,EAAGC,OAAS,SAASzxC,GACnB4P,EAAO5P,EACPwrB,GAAO,GAGT,GACEgmB,EAAGzoC,MAAMmQ,EAAI6U,aACNvC,GAETqR,EAAOjtB,KAAOA,EACditB,EAAOj0B,OAASwoC,EAAOp1B,SAAS9C,EAAK6U,K,waCjFhC,SAAewB,EAAtB,oC,wBAAO,UAAyB5Z,EAAQ+7B,GACtC,MAAM97B,EAAS,IAAIC,IAAaF,GAChC,IAAIg8B,QAAa/7B,EAAOjN,KAAK,GAE7B,GAAa,UADbgpC,EAAOA,EAAK1rC,SAAS,SAEnB,MAAM,IAAIvB,IAASD,IAAExB,aAAc,CACjCgC,gCAAiC0sC,OAIrC,IAAInoB,QAAgB5T,EAAOjN,KAAK,GAEhC,GAAgB,KADhB6gB,EAAUA,EAAQtK,aAAa,IAE7B,MAAM,IAAIxa,IAASD,IAAExB,aAAc,CACjCgC,qCAAsCukB,MAI1C,IAAIooB,QAAmBh8B,EAAOjN,KAAK,GAGnC,MAFAipC,EAAaA,EAAW1yB,aAAa,IAEpB,GAEjB,MAAQtJ,EAAO2R,OAASqqB,KAAc,CACpC,MAAMp4B,EAAS5D,EAAO4R,QAChB,KAAEvW,EAAF,OAAQ1C,EAAR,IAAgBsjC,EAAhB,UAAqBriB,SAAoBsiB,EAAYl8B,GACrDm8B,EAAW,IAAIjhC,IAAKkhC,QAC1B,MAAQD,EAAS3sC,QAAQ,CACvB,MAAM4jB,QAAcpT,EAAOoT,QAC3B,GAAIpT,EAAOq8B,MAAO,MAElB,GADAF,EAAStiC,KAAKuZ,GAAO,GACjB+oB,EAASvpC,IACX,MAAM,IAAI9D,IAASD,IAAExB,aAAc,CACjCgC,uBAAwB8sC,EAAS7J,QAGrC,GAAI6J,EAAS3sC,OAAQ,CACnB,GAAI2sC,EAAS3sC,OAAOmJ,SAAWA,EAC7B,MAAM,IAAI7J,IAASD,IAAExB,aAAc,CACjCgC,QAAU,0EAKR2Q,EAAOqlB,aACPrlB,EAAOjN,KAAKqgB,EAAMza,OAASwjC,EAASG,KAAKrK,UAC/C,MAAM1vB,EAAMvC,EAAO4R,OACnBkqB,EAAO,CACL5sC,KAAMitC,EAAS3sC,OACf6L,OACAwe,IAAKmiB,EACLp4B,SACArB,MACAqX,YACAqiB,c,+BAOKC,E,0DAAf,UAA4Bl8B,GAE1B,IAAIoN,QAAapN,EAAOoN,OACxB,MAAM/R,EAAQ+R,GAAQ,EAAK,EAG3B,IAYI6uB,EACAriB,EAbAjhB,EAAgB,GAAPyU,EAGb,GAAW,IAAPA,EAAmB,CACrB,IAAImC,EAAQ,EACZ,GAEE5W,IAAkB,KADlByU,QAAapN,EAAOoN,UACamC,EACjCA,GAAS,QACK,IAAPnC,GAKX,GAAa,IAAT/R,EAAY,CACd,IAAIkU,EAAQ,EACZ0sB,EAAM,EACN,MAAM9zB,EAAQ,GACd,GAEE8zB,IAAe,KADf7uB,QAAapN,EAAOoN,UACUmC,EAC9BA,GAAS,EACTpH,EAAMtO,KAAKuT,SACG,IAAPA,GACTwM,EAAY3mB,EAAOC,KAAKiV,GAE1B,GAAa,IAAT9M,EAAY,CAEdue,QADkB5Z,EAAOjN,KAAK,IAGhC,MAAO,CAAEsI,OAAM1C,SAAQsjC,MAAKriB,gB,+EC1GvB,SAAS/a,EAASwF,GACvB,OAAOA,EACJ3N,MAAM,MACNzC,IAAI2G,GAAKA,EAAE7K,QAAQ,KAAM,KACzBF,KAAK,MAJV,iC,gBCuBA,IAAI0sC,EAAM,EAAQ,KAoDlB,SAASC,EAAYC,EAAOC,GAS1B,IAJA,IAAIltC,EAAS,GACTmtC,EAAQF,EAAM9jC,OACdikC,EAAQF,EAAM/jC,OAETkkC,EA3DX,SAAkCJ,EAAOC,GACvC,IAAII,EAAO,IAAIP,EAAIE,EAAOC,GAC1BI,EAAKC,UAOL,IANA,IAEIp1C,EACA0wC,EAHA2E,EAAMF,EAAKG,SAIXC,EAAcT,EAAM9jC,OAAS,EAC7BwkC,EAAcT,EAAM/jC,OAAS,EACxBtQ,EAAI20C,EAAIrkC,OAAS,EAAGtQ,GAAK,IAAKA,EAC/B20C,EAAI30C,GAAGkB,IAAMuzC,EAAKM,YAChB/E,GACFA,EAAKgF,MAAQ,CACXC,WAAYJ,EACZK,WAAYJ,EACZE,MAAO,MAEThF,EAAOA,EAAKgF,OAOZhF,EALA1wC,EAAO,CACL21C,WAAYJ,EACZK,WAAYJ,EACZE,MAAO,MAIXH,IACAC,KACSH,EAAI30C,GAAGkB,IAAMuzC,EAAKU,WAC3BN,IACSF,EAAI30C,GAAGkB,IAAMuzC,EAAKW,SAC3BN,IAIN,IAAIO,EAAO,CACTJ,YAAa,EACbC,YAAa,EACbF,MAAO,MAGT,OAAKhF,GAILA,EAAKgF,MAAQK,EAEN/1C,GALE+1C,EAiBYC,CAAyBlB,EAAOC,GAAsB,OAAdG,EAAoBA,EAAYA,EAAUQ,MAAO,CAC5G,IAAIO,EAAkBjB,EAAQE,EAAUS,WAAa,EACjDO,EAAkBjB,EAAQC,EAAUU,WAAa,EACrDZ,EAAQE,EAAUS,WAClBV,EAAQC,EAAUU,YAEdK,GAAmBC,IACrBruC,EAAOqK,KAAK,CACV4iC,MAAO,CAACE,EAAQ,EAAGiB,GACnBlB,MAAO,CAACE,EAAQ,EAAGiB,KAMzB,OADAruC,EAAOsuC,UACAtuC,EA2KT1H,EAAOD,QAhEP,SAAoByM,EAAGxL,EAAGyO,GAKxB,IAAI/H,EAAS,GACTmL,EAAQ,CAACrG,EAAGxL,EAAGyO,GACfwmC,EA/GN,SAA2BzpC,EAAGxL,EAAGyO,GAY/B,IAAIlP,EAEA21C,EAAKxB,EAAY1zC,EAAGwL,GACpB2pC,EAAKzB,EAAY1zC,EAAGyO,GAEpB2mC,EAAQ,GAEZ,SAASC,EAAQjgC,EAAGkgC,GAClBF,EAAMrkC,KAAK,CAACqE,EAAEu+B,MAAM,GAAI2B,EAAMlgC,EAAEu+B,MAAM,GAAIv+B,EAAEw+B,MAAM,GAAIx+B,EAAEw+B,MAAM,KAEhE,IAAKr0C,EAAI,EAAGA,EAAI21C,EAAGrlC,OAAQtQ,IACzB81C,EAAQH,EAAG31C,GAAI,GAEjB,IAAKA,EAAI,EAAGA,EAAI41C,EAAGtlC,OAAQtQ,IACzB81C,EAAQF,EAAG51C,GAAI,GAEjB61C,EAAMxqC,KAAK,SAASkH,EAAGmM,GACrB,OAAOnM,EAAE,GAAKmM,EAAE,KAGlB,IAAIvX,EAAS,GACT6uC,EAAe,EAEnB,SAASC,EAAWC,GACdA,EAAeF,IACjB7uC,EAAOqK,KAAK,CAAC,EAAGwkC,EAAcE,EAAeF,IAC7CA,EAAeE,GAInB,IAAK,IAAIC,EAAY,EAAGA,EAAYN,EAAMvlC,OAAQ6lC,IAAa,CAK7D,IAJA,IAAIC,EAAiBD,EACjBE,EAAOR,EAAMM,GACbG,EAAYD,EAAK,GACjBE,EAAYD,EAAYD,EAAK,GAC1BF,EAAYN,EAAMvlC,OAAS,GAAG,CACnC,IAAIkmC,EAAmBX,EAAMM,EAAY,GACrCM,EAAWD,EAAiB,GAChC,GAAIC,EAAWF,EAAW,MAC1BA,EAAY35B,KAAKuC,IAAIo3B,EAAWE,EAAWD,EAAiB,IAC5DL,IAIF,GADAF,EAAWK,GACPF,GAAkBD,EAIhBE,EAAK,GAAK,GACZlvC,EAAOqK,KAAK,CAAC6kC,EAAK,GAAIA,EAAK,GAAIA,EAAK,SAEjC,CAOL,IAAIK,EAAU,CACZ7X,EAAG,CAAC5yB,EAAEqE,QAAS,EAAG7P,EAAE6P,QAAS,GAC7BmgB,EAAG,CAACvhB,EAAEoB,QAAS,EAAG7P,EAAE6P,QAAS,IAE/B,IAAKtQ,EAAIo2C,EAAgBp2C,GAAKm2C,EAAWn2C,IAAK,CAE5C,IACIc,EAAI41C,GAFRL,EAAOR,EAAM71C,IACG,IAEZ22C,EAAON,EAAK,GACZO,EAAOD,EAAON,EAAK,GACnBQ,EAAQR,EAAK,GACbS,EAAQD,EAAQR,EAAK,GACzBv1C,EAAE,GAAK8b,KAAKC,IAAIg6B,EAAO/1C,EAAE,IACzBA,EAAE,GAAK8b,KAAKuC,IAAI23B,EAAOh2C,EAAE,IACzBA,EAAE,GAAK8b,KAAKC,IAAI85B,EAAM71C,EAAE,IACxBA,EAAE,GAAK8b,KAAKuC,IAAIy3B,EAAM91C,EAAE,IAE1B,IAAIi2C,EAAOL,EAAQ,GAAG,IAAMJ,EAAYI,EAAQ,GAAG,IAC/CM,EAAON,EAAQ,GAAG,IAAMH,EAAYG,EAAQ,GAAG,IAC/CO,EAAOP,EAAQ,GAAG,IAAMJ,EAAYI,EAAQ,GAAG,IAC/CQ,EAAOR,EAAQ,GAAG,IAAMH,EAAYG,EAAQ,GAAG,IACnDvvC,EAAOqK,KAAK,EAAE,EACZulC,EAAMC,EAAOD,EACbT,EAAWC,EAAYD,EACvBW,EAAMC,EAAOD,IAGjBjB,EAAeO,EAIjB,OADAN,EAAWx1C,EAAE6P,QACNnJ,EAUOgwC,CAAkBlrC,EAAGxL,EAAGyO,GAElCkoC,EAAU,GAEd,SAASC,IACHD,EAAQ9mC,QACVnJ,EAAOqK,KAAK,CACV0zB,GAAIkS,IAGRA,EAAU,GAGZ,SAASE,EAAO3Q,GACd,IAAK,IAAItrB,EAAI,EAAGA,EAAIsrB,EAAGr2B,OAAQ+K,IAC7B+7B,EAAQ5lC,KAAKm1B,EAAGtrB,IAIpB,SAASk8B,EAAeC,GACtB,GAAIA,EAAI,IAAMA,EAAI,GAAI,OAAO,EAG7B,IAFA,IAAIC,EAAOD,EAAI,GACXE,EAAOF,EAAI,GACNn8B,EAAI,EAAGA,EAAIm8B,EAAI,GAAIn8B,IAC1B,GAAIpP,EAAEoP,EAAIo8B,IAASvoC,EAAEmM,EAAIq8B,GAAO,OAAO,EAEzC,OAAO,EAGT,IAAK,IAAI13C,EAAI,EAAGA,EAAI01C,EAAQplC,OAAQtQ,IAAK,CACvC,IAAIuS,EAAImjC,EAAQ11C,GACZ+1C,EAAOxjC,EAAE,IACA,GAATwjC,EACGwB,EAAehlC,IAGlB8kC,IACAlwC,EAAOqK,KAAK,CACV2zB,SAAU,CACRl5B,EAAGA,EAAE0C,MAAM4D,EAAE,GAAIA,EAAE,GAAKA,EAAE,IAC1BolC,OAAQplC,EAAE,GACV9R,EAAGA,EAAEkO,MAAM4D,EAAE,GAAIA,EAAE,GAAKA,EAAE,IAC1BqlC,OAAQrlC,EAAE,GACVrD,EAAGA,EAAEP,MAAM4D,EAAE,GAAIA,EAAE,GAAKA,EAAE,IAC1BslC,OAAQtlC,EAAE,OAVd+kC,EAAOhlC,EAAM,GAAG3D,MAAM4D,EAAE,GAAIA,EAAE,GAAKA,EAAE,KAevC+kC,EAAOhlC,EAAMyjC,GAAMpnC,MAAM4D,EAAE,GAAIA,EAAE,GAAKA,EAAE,KAK5C,OADA8kC,IACOlwC,I,6BC3QT,gCAAO,MAAMo+B,EAAQ,CACnB1wB,OAAQ,GACRqB,KAAM,GACNkb,KAAM,GACNvgB,IAAK,GACLinC,UAAW,GACXC,UAAW,M,eCNbv4C,EAAQkL,KAAO,SAAUC,EAAQ4Q,EAAQy8B,EAAMC,EAAMC,GACnD,IAAIl6B,EAAG5d,EACH+3C,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,GAAS,EACTt4C,EAAIg4C,EAAQE,EAAS,EAAK,EAC1B53C,EAAI03C,GAAQ,EAAI,EAChBj2C,EAAI4I,EAAO4Q,EAASvb,GAOxB,IALAA,GAAKM,EAEL0d,EAAIjc,GAAM,IAAOu2C,GAAU,EAC3Bv2C,KAAQu2C,EACRA,GAASH,EACFG,EAAQ,EAAGt6B,EAAS,IAAJA,EAAWrT,EAAO4Q,EAASvb,GAAIA,GAAKM,EAAGg4C,GAAS,GAKvE,IAHAl4C,EAAI4d,GAAM,IAAOs6B,GAAU,EAC3Bt6B,KAAQs6B,EACRA,GAASL,EACFK,EAAQ,EAAGl4C,EAAS,IAAJA,EAAWuK,EAAO4Q,EAASvb,GAAIA,GAAKM,EAAGg4C,GAAS,GAEvE,GAAU,IAANt6B,EACFA,EAAI,EAAIq6B,MACH,IAAIr6B,IAAMo6B,EACf,OAAOh4C,EAAIm4C,IAAsBl1B,KAAdthB,GAAK,EAAI,GAE5B3B,GAAQwc,KAAKuE,IAAI,EAAG82B,GACpBj6B,GAAQq6B,EAEV,OAAQt2C,GAAK,EAAI,GAAK3B,EAAIwc,KAAKuE,IAAI,EAAGnD,EAAIi6B,IAG5Cz4C,EAAQsL,MAAQ,SAAUH,EAAQ1J,EAAOsa,EAAQy8B,EAAMC,EAAMC,GAC3D,IAAIl6B,EAAG5d,EAAGC,EACN83C,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBI,EAAe,KAATP,EAAcr7B,KAAKuE,IAAI,GAAI,IAAMvE,KAAKuE,IAAI,GAAI,IAAM,EAC1DnhB,EAAIg4C,EAAO,EAAKE,EAAS,EACzB53C,EAAI03C,EAAO,GAAK,EAChBj2C,EAAId,EAAQ,GAAgB,IAAVA,GAAe,EAAIA,EAAQ,EAAK,EAAI,EAmC1D,IAjCAA,EAAQ2b,KAAKoZ,IAAI/0B,GAEb0Z,MAAM1Z,IAAUA,IAAUoiB,KAC5BjjB,EAAIua,MAAM1Z,GAAS,EAAI,EACvB+c,EAAIo6B,IAEJp6B,EAAIpB,KAAKqF,MAAMrF,KAAKnS,IAAIxJ,GAAS2b,KAAK67B,KAClCx3C,GAASZ,EAAIuc,KAAKuE,IAAI,GAAInD,IAAM,IAClCA,IACA3d,GAAK,IAGLY,GADE+c,EAAIq6B,GAAS,EACNG,EAAKn4C,EAELm4C,EAAK57B,KAAKuE,IAAI,EAAG,EAAIk3B,IAEpBh4C,GAAK,IACf2d,IACA3d,GAAK,GAGH2d,EAAIq6B,GAASD,GACfh4C,EAAI,EACJ4d,EAAIo6B,GACKp6B,EAAIq6B,GAAS,GACtBj4C,GAAMa,EAAQZ,EAAK,GAAKuc,KAAKuE,IAAI,EAAG82B,GACpCj6B,GAAQq6B,IAERj4C,EAAIa,EAAQ2b,KAAKuE,IAAI,EAAGk3B,EAAQ,GAAKz7B,KAAKuE,IAAI,EAAG82B,GACjDj6B,EAAI,IAIDi6B,GAAQ,EAAGttC,EAAO4Q,EAASvb,GAAS,IAAJI,EAAUJ,GAAKM,EAAGF,GAAK,IAAK63C,GAAQ,GAI3E,IAFAj6B,EAAKA,GAAKi6B,EAAQ73C,EAClB+3C,GAAQF,EACDE,EAAO,EAAGxtC,EAAO4Q,EAASvb,GAAS,IAAJge,EAAUhe,GAAKM,EAAG0d,GAAK,IAAKm6B,GAAQ,GAE1ExtC,EAAO4Q,EAASvb,EAAIM,IAAU,IAAJyB,I,cClF5B,IAAIiG,EAAW,GAAGA,SAElBvI,EAAOD,QAAU8H,MAAMC,SAAW,SAAU8M,GAC1C,MAA6B,kBAAtBrM,EAAS7H,KAAKkU,K,8BCHvB,YAEA,IAAI2R,EAAY,SAAU3Z,GACzBA,EAAOA,GAAQ,GAEftF,KAAK2E,QAAUW,EAAKX,SAAWA,QAI/B3E,KAAK2xC,OAAS,GAGd3xC,KAAK4xC,QAAU,GAGf5xC,KAAK6xC,gBAAkBvsC,EAAKusC,kBAAmB,EAE/C7xC,KAAKywB,QAAUnrB,EAAKmrB,SAAWxR,EAAU6yB,gBACzC9xC,KAAKkf,WAAa5Z,EAAK4Z,YAAcD,EAAU8yB,qBAGhD9yB,EAAU6yB,gBAAkB,EAC5B7yB,EAAU8yB,oBAAsB,IAUhC9yB,EAAUpkB,UAAUskB,QAAU,SAAU3kB,EAAKqlB,EAAIwG,EAAI/gB,GACpD,GAAI/E,MAAMC,QAAQhG,GACjB,OAAOwF,KAAKgyC,cAAcx3C,EAAKqlB,EAAIwG,EAAI/gB,GAGxC,GAAoB,mBAAT,EACV,MAAM,IAAI3F,MAAM,uCAIjB,IAAIsyC,EAAkB,KAClBC,EAAiB,KACjBC,EAAW,KAEK,mBAAT,IACV7sC,EAAO+gB,EACPA,EAAK,KAGL8rB,EAAY,IAAInyC,KAAK2E,QAAQ,SAASoG,EAASiV,GAC9CiyB,EAAkBlnC,EAClBmnC,EAAiBlyB,KAInB1a,EAAOA,GAAQ,GAEf,IAAI8sC,GAAW,EACXC,EAAQ,KACRx5C,EAAOmH,KAEPwmB,EAAO,SAAU8rB,EAAQ9uC,EAAKoV,GAC7B05B,IAC6B,IAA5Bz5C,EAAK84C,OAAOn3C,GAAK+O,eACb1Q,EAAK84C,OAAOn3C,UAEb3B,EAAK+4C,QAAQp3C,IAGhB43C,IACCD,EAOA3uC,EACH0uC,EAAe1uC,GAGfyuC,EAAgBr5B,GAVG,mBAAT,GACVyN,EAAG7iB,EAAKoV,GAYVw5B,GAAW,GAGRE,GAEGz5C,EAAK84C,OAAOn3C,IAAQ3B,EAAK84C,OAAOn3C,GAAK+O,OAAS,GACnD1Q,EAAK84C,OAAOn3C,GAAK2lB,OAAjBtnB,IAKC2hC,EAAO,SAAU8X,GACpB,GAAIF,EACH,OAAO5rB,EAAK8rB,GAab,GAVID,IACH1sC,aAAa0sC,GACbA,EAAQ,MAGLC,IACHz5C,EAAK+4C,QAAQp3C,GAAOyV,EAAQsiC,QAIX,IAAd1yB,EAAGtW,OAAc,CACpB,IAAIipC,GAAS,EACb3yB,EAAG,SAAUrc,EAAKoV,GACZ45B,IACJA,GAAS,EACThsB,EAAK8rB,EAAQ9uC,EAAKoV,WAMpB/f,EAAK45C,YAAY,WAChB,OAAO5yB,MAEP6yB,KAAK,SAAS95B,GACd4N,EAAK8rB,OAAQ7wC,EAAWmX,IACtB,SAASwH,GACXoG,EAAK8rB,EAAQlyB,MAQhB,GAJMnQ,EAAQsiC,SACb/X,EAAOvqB,EAAQsiC,OAAO93C,KAAK+/B,IAGvB3hC,EAAK84C,OAAOn3C,GAIZ,GAAI3B,EAAKg5C,iBAAqB5hC,EAAQsiC,QAAUtiC,EAAQsiC,SAAW15C,EAAK+4C,QAAQp3C,GAGpFggC,GAAK,QAED,GAAI3hC,EAAK84C,OAAOn3C,GAAK+O,QAAU1Q,EAAKqmB,WACxCsH,GAAK,EAAO,IAAI7mB,MAAM,+BAElB,CACJ,IAAIgzC,EAAS,WACZnY,GAAK,IAEFl1B,EAAKstC,UACR/5C,EAAK84C,OAAOn3C,GAAKgP,QAAQmpC,GAEzB95C,EAAK84C,OAAOn3C,GAAKiQ,KAAKkoC,GAGvB,IAAIliB,EAAUnrB,EAAKmrB,SAAW53B,EAAK43B,QAC/BA,IACH4hB,EAAQrsC,WAAW,WAClBqsC,EAAQ,KACR7rB,GAAK,EAAO,IAAI7mB,MAAM,0BACpB8wB,SA1BJ53B,EAAK84C,OAAOn3C,GAAO,GACnBggC,GAAK,GA6BN,OAAI2X,QAAJ,GAqBDlzB,EAAUpkB,UAAUm3C,cAAgB,SAAU3xC,EAAMwf,EAAIwG,EAAI/gB,GACvC,mBAAT,IACVA,EAAO+gB,EACPA,EAAK,MAGN,IAAIxtB,EAAOmH,KAOP6yC,EAAMhzB,EAKV,GAJAxf,EAAKquC,UAAUxE,QAAQ,SAAU1vC,GAChCq4C,EARW,SAAUr4C,EAAKqlB,GAC1B,OAAO,SAAUwG,GAChBxtB,EAAKsmB,QAAQ3kB,EAAKqlB,EAAIwG,EAAI/gB,IAMrBwtC,CAAMt4C,EAAKq4C,KAGE,mBAAT,EAIV,OAAO,IAAI7yC,KAAK2E,QAAQ,SAAUoG,EAASiV,GAEvB,IAAf6yB,EAAItpC,OACPspC,EAAI,SAAUrvC,EAAKoV,GACdpV,EACHwc,EAAOxc,GAGPuH,EAAQ6N,KAIV7N,EAAQ8nC,OAfVA,EAAIxsB,IA0BNpH,EAAUpkB,UAAUk4C,OAAS,SAAUv4C,GACtC,OAAKA,IAIKwF,KAAK2xC,OAAOn3C,GAHdb,OAAO0G,KAAKL,KAAK2xC,QAAQpoC,OAAS,GAU3C0V,EAAUpkB,UAAU43C,YAAc,SAAS5yB,GAC1C,IACC,OAAO7f,KAAK2E,QAAQoG,QAAQ8U,KAC3B,MAAO5I,GACR,OAAOjX,KAAK2E,QAAQqb,OAAO/I,KAI7Bve,EAAOD,QAAUwmB,I,gCC9PY,mBAAlBtlB,OAAOY,OAEhB7B,EAAOD,QAAU,SAAkBu6C,EAAMC,GACvCD,EAAKE,OAASD,EACdD,EAAKn4C,UAAYlB,OAAOY,OAAO04C,EAAUp4C,UAAW,CAClD+E,YAAa,CACX1F,MAAO84C,EACPn5C,YAAY,EACZs5C,UAAU,EACV77B,cAAc,MAMpB5e,EAAOD,QAAU,SAAkBu6C,EAAMC,GACvCD,EAAKE,OAASD,EACd,IAAIG,EAAW,aACfA,EAASv4C,UAAYo4C,EAAUp4C,UAC/Bm4C,EAAKn4C,UAAY,IAAIu4C,EACrBJ,EAAKn4C,UAAU+E,YAAcozC,I,gBCpBjC,IAAInvC,EAAS,EAAQ,IAAeA,OAGpC,SAAS8Z,EAAM01B,EAAWC,GACxBtzC,KAAKuzC,OAAS1vC,EAAO+S,MAAMy8B,GAC3BrzC,KAAKwzC,WAAaF,EAClBtzC,KAAKyzC,WAAaJ,EAClBrzC,KAAK0zC,KAAO,EAGd/1B,EAAK9iB,UAAU+iB,OAAS,SAAU9d,EAAM4iB,GAClB,iBAAT5iB,IACT4iB,EAAMA,GAAO,OACb5iB,EAAO+D,EAAOC,KAAKhE,EAAM4iB,IAQ3B,IALA,IAAIixB,EAAQ3zC,KAAKuzC,OACbF,EAAYrzC,KAAKyzC,WACjBlqC,EAASzJ,EAAKyJ,OACdqqC,EAAQ5zC,KAAK0zC,KAERl/B,EAAS,EAAGA,EAASjL,GAAS,CAIrC,IAHA,IAAIsqC,EAAWD,EAAQP,EACnBS,EAAYj+B,KAAKC,IAAIvM,EAASiL,EAAQ6+B,EAAYQ,GAE7C56C,EAAI,EAAGA,EAAI66C,EAAW76C,IAC7B06C,EAAME,EAAW56C,GAAK6G,EAAK0U,EAASvb,GAItCub,GAAUs/B,GADVF,GAASE,GAGIT,GAAe,GAC1BrzC,KAAKm0B,QAAQwf,GAKjB,OADA3zC,KAAK0zC,MAAQnqC,EACNvJ,MAGT2d,EAAK9iB,UAAUgjB,OAAS,SAAU6E,GAChC,IAAIqxB,EAAM/zC,KAAK0zC,KAAO1zC,KAAKyzC,WAE3BzzC,KAAKuzC,OAAOQ,GAAO,IAInB/zC,KAAKuzC,OAAOh8B,KAAK,EAAGw8B,EAAM,GAEtBA,GAAO/zC,KAAKwzC,aACdxzC,KAAKm0B,QAAQn0B,KAAKuzC,QAClBvzC,KAAKuzC,OAAOh8B,KAAK,IAGnB,IAAI+gB,EAAmB,EAAZt4B,KAAK0zC,KAGhB,GAAIpb,GAAQ,WACVt4B,KAAKuzC,OAAOj4B,cAAcgd,EAAMt4B,KAAKyzC,WAAa,OAG7C,CACL,IAAIO,GAAkB,WAAP1b,KAAuB,EAClC2b,GAAY3b,EAAO0b,GAAW,WAElCh0C,KAAKuzC,OAAOj4B,cAAc24B,EAAUj0C,KAAKyzC,WAAa,GACtDzzC,KAAKuzC,OAAOj4B,cAAc04B,EAASh0C,KAAKyzC,WAAa,GAGvDzzC,KAAKm0B,QAAQn0B,KAAKuzC,QAClB,IAAIrqB,EAAOlpB,KAAKq0B,QAEhB,OAAO3R,EAAMwG,EAAKjoB,SAASyhB,GAAOwG,GAGpCvL,EAAK9iB,UAAUs5B,QAAU,WACvB,MAAM,IAAIx0B,MAAM,4CAGlBjH,EAAOD,QAAUklB,G,6BC7EjB,IAAIu2B,EAAe,EAAQ,KACvBvS,EAAe,EAAQ,IACvBwS,EAAe,EAAQ,IACvBjR,EAAe,EAAQ,IACvBkR,EAAe,EAAQ,IAEvBnzC,EAAWtH,OAAOkB,UAAUoG,SAQ5B2iC,EAAkB,EAIlBU,GAAyB,EAEzBK,EAAwB,EAExBI,EAAc,EA8FlB,SAASsP,EAAQ9wC,GACf,KAAMvD,gBAAgBq0C,GAAU,OAAO,IAAIA,EAAQ9wC,GAEnDvD,KAAKuD,QAAUo+B,EAAM/yB,OAAO,CAC1B0lC,MAAOhQ,EACP59B,OAAQq+B,EACRwP,UAAW,MACXC,WAAY,GACZC,SAAU,EACVC,SAAU/P,EACVtE,GAAI,IACH98B,GAAW,IAEd,IAAIoxC,EAAM30C,KAAKuD,QAEXoxC,EAAItoB,KAAQsoB,EAAIH,WAAa,EAC/BG,EAAIH,YAAcG,EAAIH,WAGfG,EAAIC,MAASD,EAAIH,WAAa,GAAOG,EAAIH,WAAa,KAC7DG,EAAIH,YAAc,IAGpBx0C,KAAKwD,IAAS,EACdxD,KAAKkjC,IAAS,GACdljC,KAAKitC,OAAS,EACdjtC,KAAK+jB,OAAS,GAEd/jB,KAAKktC,KAAO,IAAIkH,EAChBp0C,KAAKktC,KAAKlK,UAAY,EAEtB,IAAInM,EAASqd,EAAaW,aACxB70C,KAAKktC,KACLyH,EAAIL,MACJK,EAAIjuC,OACJiuC,EAAIH,WACJG,EAAIF,SACJE,EAAID,UAGN,GAAI7d,IAAW+M,EACb,MAAM,IAAIjkC,MAAMujC,EAAIrM,IAOtB,GAJI8d,EAAI1b,QACNib,EAAaY,iBAAiB90C,KAAKktC,KAAMyH,EAAI1b,QAG3C0b,EAAII,WAAY,CAClB,IAAIC,EAaJ,GATEA,EAF4B,iBAAnBL,EAAII,WAENZ,EAAQjS,WAAWyS,EAAII,YACa,yBAAlC9zC,EAAS7H,KAAKu7C,EAAII,YACpB,IAAIzjC,WAAWqjC,EAAII,YAEnBJ,EAAII,YAGble,EAASqd,EAAae,qBAAqBj1C,KAAKktC,KAAM8H,MAEvCpR,EACb,MAAM,IAAIjkC,MAAMujC,EAAIrM,IAGtB72B,KAAKk1C,WAAY,GAyKrB,SAASpyB,EAAQzC,EAAO9c,GACtB,IAAI4xC,EAAW,IAAId,EAAQ9wC,GAK3B,GAHA4xC,EAAS1qC,KAAK4V,GAAO,GAGjB80B,EAAS3xC,IAAO,MAAM2xC,EAASjS,KAAOA,EAAIiS,EAAS3xC,KAEvD,OAAO2xC,EAAS/0C,OAhJlBi0C,EAAQx5C,UAAU4P,KAAO,SAAU3K,EAAM1F,GACvC,IAEIy8B,EAAQlR,EAFRunB,EAAOltC,KAAKktC,KACZqH,EAAYv0C,KAAKuD,QAAQgxC,UAG7B,GAAIv0C,KAAKitC,MAAS,OAAO,EAEzBtnB,EAASvrB,MAAWA,EAAQA,GAAkB,IAATA,EAlNjB,EADA,EAsNA,iBAAT0F,EAETotC,EAAK7sB,MAAQ8zB,EAAQjS,WAAWpiC,GACC,yBAAxBmB,EAAS7H,KAAK0G,GACvBotC,EAAK7sB,MAAQ,IAAI/O,WAAWxR,GAE5BotC,EAAK7sB,MAAQvgB,EAGfotC,EAAKtK,QAAU,EACfsK,EAAKrK,SAAWqK,EAAK7sB,MAAM9W,OAE3B,EAAG,CAQD,GAPuB,IAAnB2jC,EAAKlK,YACPkK,EAAKrV,OAAS,IAAI8J,EAAMvd,KAAKmwB,GAC7BrH,EAAKnK,SAAW,EAChBmK,EAAKlK,UAAYuR,GAlOD,KAoOlB1d,EAASqd,EAAapxB,QAAQoqB,EAAMvnB,KAELkR,IAAW+M,EAGxC,OAFA5jC,KAAKo1C,MAAMve,GACX72B,KAAKitC,OAAQ,GACN,EAEc,IAAnBC,EAAKlK,YAAsC,IAAlBkK,EAAKrK,UA9OhB,IA8OmCld,GA1OnC,IA0OyDA,KACjD,WAApB3lB,KAAKuD,QAAQ88B,GACfrgC,KAAK0sC,OAAOyH,EAAQlS,cAAcN,EAAMne,UAAU0pB,EAAKrV,OAAQqV,EAAKnK,YAEpE/iC,KAAK0sC,OAAO/K,EAAMne,UAAU0pB,EAAKrV,OAAQqV,EAAKnK,mBAG1CmK,EAAKrK,SAAW,GAAwB,IAAnBqK,EAAKlK,YAlPhB,IAkPoCnM,GAGxD,OAxPoB,IAwPhBlR,GACFkR,EAASqd,EAAamB,WAAWr1C,KAAKktC,MACtCltC,KAAKo1C,MAAMve,GACX72B,KAAKitC,OAAQ,EACNpW,IAAW+M,GAxPA,IA4PhBje,IACF3lB,KAAKo1C,MAAMxR,GACXsJ,EAAKlK,UAAY,GACV,IAgBXqR,EAAQx5C,UAAU6xC,OAAS,SAAU1oB,GACnChkB,KAAK+jB,OAAOtZ,KAAKuZ,IAcnBqwB,EAAQx5C,UAAUu6C,MAAQ,SAAUve,GAE9BA,IAAW+M,IACW,WAApB5jC,KAAKuD,QAAQ88B,GACfrgC,KAAKI,OAASJ,KAAK+jB,OAAOtjB,KAAK,IAE/BT,KAAKI,OAASuhC,EAAM7d,cAAc9jB,KAAK+jB,SAG3C/jB,KAAK+jB,OAAS,GACd/jB,KAAKwD,IAAMqzB,EACX72B,KAAKkjC,IAAMljC,KAAKktC,KAAKhK,KAgFvBzqC,EAAQ47C,QAAUA,EAClB57C,EAAQqqB,QAAUA,EAClBrqB,EAAQ68C,WAxBR,SAAoBj1B,EAAO9c,GAGzB,OAFAA,EAAUA,GAAW,IACb8oB,KAAM,EACPvJ,EAAQzC,EAAO9c,IAsBxB9K,EAAQm8C,KAVR,SAAcv0B,EAAO9c,GAGnB,OAFAA,EAAUA,GAAW,IACbqxC,MAAO,EACR9xB,EAAQzC,EAAO9c,K,6BCnXxB,IAkgCIgyC,EAlgCA5T,EAAU,EAAQ,IAClBpa,EAAU,EAAQ,KAClBiuB,EAAU,EAAQ,IAClBtqB,EAAU,EAAQ,IAClBgY,EAAU,EAAQ,IAOlBG,EAAkB,EAClBC,EAAkB,EAElBE,EAAkB,EAClBC,EAAkB,EAClBC,EAAkB,EAOlBE,EAAkB,EAClBC,EAAkB,EAGlBG,GAAmB,EACnBC,GAAmB,EAEnBC,GAAmB,EAQnBI,GAAyB,EAGzBC,EAAwB,EACxBC,EAAwB,EACxBC,EAAwB,EACxBC,EAAwB,EACxBC,EAAwB,EAMxBG,EAAwB,EAIxBC,EAAc,EAKd0Q,EAAgB,EAEhBC,EAAY,GAEZC,EAAgB,EAOhBC,EAAgBC,IAEhBC,EAAgB,GAEhBC,EAAgB,GAEhBC,EAAgB,EAAIJ,EAAU,EAE9BK,EAAY,GAGZC,EAAY,EACZC,EAAY,IACZC,EAAiBD,EAAYD,EAAY,EAEzCG,EAAc,GAEdC,EAAa,GACbC,EAAc,GACdC,EAAa,GACbC,EAAgB,GAChBC,EAAa,IACbC,EAAa,IACbC,EAAe,IAEfC,EAAoB,EACpBC,EAAoB,EACpBC,EAAoB,EACpBC,EAAoB,EAEpBC,EAAU,EAEd,SAASzzC,EAAI0pC,EAAMgK,GAEjB,OADAhK,EAAKhK,IAAMA,EAAIgU,GACRA,EAGT,SAASC,EAAKhyC,GACZ,OAAQ,GAAO,IAAM,EAAM,EAAI,EAAI,GAGrC,SAASiyC,EAAKljC,GAA6B,IAAtB,IAAI5B,EAAM4B,EAAI3K,SAAiB+I,GAAO,GAAK4B,EAAI5B,GAAO,EAS3E,SAAS+kC,GAAcnK,GACrB,IAAIlyC,EAAIkyC,EAAK/J,MAGT7wB,EAAMtX,EAAEs8C,QACRhlC,EAAM46B,EAAKlK,YACb1wB,EAAM46B,EAAKlK,WAED,IAAR1wB,IAEJqvB,EAAMje,SAASwpB,EAAKrV,OAAQ78B,EAAEu8C,YAAav8C,EAAEw8C,YAAallC,EAAK46B,EAAKnK,UACpEmK,EAAKnK,UAAYzwB,EACjBtX,EAAEw8C,aAAellC,EACjB46B,EAAKjK,WAAa3wB,EAClB46B,EAAKlK,WAAa1wB,EAClBtX,EAAEs8C,SAAWhlC,EACK,IAAdtX,EAAEs8C,UACJt8C,EAAEw8C,YAAc,IAKpB,SAASC,GAAiBz8C,EAAGgoB,GAC3BuE,EAAMmwB,gBAAgB18C,EAAIA,EAAE28C,aAAe,EAAI38C,EAAE28C,aAAe,EAAI38C,EAAE48C,SAAW58C,EAAE28C,YAAa30B,GAChGhoB,EAAE28C,YAAc38C,EAAE48C,SAClBP,GAAcr8C,EAAEkyC,MAIlB,SAAS2K,GAAS78C,EAAGmN,GACnBnN,EAAEu8C,YAAYv8C,EAAEs8C,WAAanvC,EAS/B,SAAS2vC,GAAY98C,EAAGmN,GAGtBnN,EAAEu8C,YAAYv8C,EAAEs8C,WAAcnvC,IAAM,EAAK,IACzCnN,EAAEu8C,YAAYv8C,EAAEs8C,WAAiB,IAAJnvC,EA6C/B,SAAS4vC,GAAc/8C,EAAGg9C,GACxB,IAEI7uC,EACAmJ,EAHA2lC,EAAej9C,EAAEk9C,iBACjBC,EAAOn9C,EAAE48C,SAGTQ,EAAWp9C,EAAEq9C,YACbC,EAAat9C,EAAEs9C,WACf98B,EAASxgB,EAAE48C,SAAY58C,EAAEu9C,OAASnC,EAClCp7C,EAAE48C,UAAY58C,EAAEu9C,OAASnC,GAAiB,EAE1CoC,EAAOx9C,EAAEoV,OAETqoC,EAAQz9C,EAAE09C,OACVzP,EAAQjuC,EAAEiuC,KAMV0P,EAAS39C,EAAE48C,SAAWzB,EACtByC,EAAaJ,EAAKL,EAAOC,EAAW,GACpCS,EAAaL,EAAKL,EAAOC,GAQzBp9C,EAAEq9C,aAAer9C,EAAE89C,aACrBb,IAAiB,GAKfK,EAAat9C,EAAE+9C,YAAaT,EAAat9C,EAAE+9C,WAI/C,GAaE,GAAIP,GAXJrvC,EAAQ6uC,GAWSI,KAAkBS,GAC/BL,EAAKrvC,EAAQivC,EAAW,KAAOQ,GAC/BJ,EAAKrvC,KAA0BqvC,EAAKL,IACpCK,IAAOrvC,KAAwBqvC,EAAKL,EAAO,GAH/C,CAaAA,GAAQ,EACRhvC,IAMA,UAESqvC,IAAOL,KAAUK,IAAOrvC,IAAUqvC,IAAOL,KAAUK,IAAOrvC,IAC1DqvC,IAAOL,KAAUK,IAAOrvC,IAAUqvC,IAAOL,KAAUK,IAAOrvC,IAC1DqvC,IAAOL,KAAUK,IAAOrvC,IAAUqvC,IAAOL,KAAUK,IAAOrvC,IAC1DqvC,IAAOL,KAAUK,IAAOrvC,IAAUqvC,IAAOL,KAAUK,IAAOrvC,IAC1DgvC,EAAOQ,GAOhB,GAHArmC,EAAM6jC,GAAawC,EAASR,GAC5BA,EAAOQ,EAASxC,EAEZ7jC,EAAM8lC,EAAU,CAGlB,GAFAp9C,EAAEg+C,YAAchB,EAChBI,EAAW9lC,EACPA,GAAOgmC,EACT,MAEFM,EAAaJ,EAAKL,EAAOC,EAAW,GACpCS,EAAaL,EAAKL,EAAOC,YAEnBJ,EAAY/O,EAAK+O,EAAYS,IAAUj9B,GAA4B,KAAjBy8B,GAE5D,OAAIG,GAAYp9C,EAAE+9C,UACTX,EAEFp9C,EAAE+9C,UAcX,SAASE,GAAYj+C,GACnB,IACID,EAAGL,EAAGrB,EAAG6/C,EAAMjkC,EArJHi4B,EAAMh5B,EAAKhB,EAAOtI,EAC9B0H,EAmJA6mC,EAAUn+C,EAAEu9C,OAKhB,EAAG,CAqBD,GApBAW,EAAOl+C,EAAEo+C,YAAcp+C,EAAE+9C,UAAY/9C,EAAE48C,SAoBnC58C,EAAE48C,UAAYuB,GAAWA,EAAU/C,GAAgB,CAErDzU,EAAMje,SAAS1oB,EAAEoV,OAAQpV,EAAEoV,OAAQ+oC,EAASA,EAAS,GACrDn+C,EAAEg+C,aAAeG,EACjBn+C,EAAE48C,UAAYuB,EAEdn+C,EAAE28C,aAAewB,EAUjBp+C,EADAL,EAAIM,EAAEq+C,UAEN,GACEhgD,EAAI2B,EAAEs+C,OAAOv+C,GACbC,EAAEs+C,KAAKv+C,GAAM1B,GAAK8/C,EAAU9/C,EAAI8/C,EAAU,UACjCz+C,GAGXK,EADAL,EAAIy+C,EAEJ,GACE9/C,EAAI2B,EAAEiuC,OAAOluC,GACbC,EAAEiuC,KAAKluC,GAAM1B,GAAK8/C,EAAU9/C,EAAI8/C,EAAU,UAIjCz+C,GAEXw+C,GAAQC,EAEV,GAAwB,IAApBn+C,EAAEkyC,KAAKrK,SACT,MAmBF,GApOcqK,EAgODlyC,EAAEkyC,KAhOKh5B,EAgOClZ,EAAEoV,OAhOE8C,EAgOMlY,EAAE48C,SAAW58C,EAAE+9C,UAhOdnuC,EAgOyBsuC,EA/NvD5mC,YAAM46B,EAAKrK,UAELj4B,IAAQ0H,EAAM1H,GA6NtBlQ,EA5NU,IAAR4X,EAAoB,GAExB46B,EAAKrK,UAAYvwB,EAGjBqvB,EAAMje,SAASxP,EAAKg5B,EAAK7sB,MAAO6sB,EAAKtK,QAAStwB,EAAKY,GAC3B,IAApBg6B,EAAK/J,MAAMtgB,KACbqqB,EAAK7L,MAAQmU,EAAQtI,EAAK7L,MAAOntB,EAAK5B,EAAKY,GAGhB,IAApBg6B,EAAK/J,MAAMtgB,OAClBqqB,EAAK7L,MAAQnW,EAAMgiB,EAAK7L,MAAOntB,EAAK5B,EAAKY,IAG3Cg6B,EAAKtK,SAAWtwB,EAChB46B,EAAKpK,UAAYxwB,EAEVA,GA4MLtX,EAAE+9C,WAAar+C,EAGXM,EAAE+9C,UAAY/9C,EAAE89B,QAAUod,EAS5B,IARAjhC,EAAMja,EAAE48C,SAAW58C,EAAE89B,OACrB99B,EAAEu+C,MAAQv+C,EAAEoV,OAAO6E,GAGnBja,EAAEu+C,OAAUv+C,EAAEu+C,OAASv+C,EAAEw+C,WAAcx+C,EAAEoV,OAAO6E,EAAM,IAAMja,EAAEy+C,UAIvDz+C,EAAE89B,SAEP99B,EAAEu+C,OAAUv+C,EAAEu+C,OAASv+C,EAAEw+C,WAAcx+C,EAAEoV,OAAO6E,EAAMihC,EAAY,IAAMl7C,EAAEy+C,UAE1Ez+C,EAAEiuC,KAAKh0B,EAAMja,EAAE09C,QAAU19C,EAAEs+C,KAAKt+C,EAAEu+C,OAClCv+C,EAAEs+C,KAAKt+C,EAAEu+C,OAAStkC,EAClBA,IACAja,EAAE89B,WACE99B,EAAE+9C,UAAY/9C,EAAE89B,OAASod,aAS1Bl7C,EAAE+9C,UAAY3C,GAAqC,IAApBp7C,EAAEkyC,KAAKrK,UAmJjD,SAAS6W,GAAa1+C,EAAG0qC,GAIvB,IAHA,IAAIiU,EACAC,IAEK,CAMP,GAAI5+C,EAAE+9C,UAAY3C,EAAe,CAE/B,GADA6C,GAAYj+C,GACRA,EAAE+9C,UAAY3C,GAAiB1Q,IAAUrC,EAC3C,OAAOwT,EAET,GAAoB,IAAhB77C,EAAE+9C,UACJ,MA2BJ,GApBAY,EAAY,EACR3+C,EAAE+9C,WAAa7C,IAEjBl7C,EAAEu+C,OAAUv+C,EAAEu+C,OAASv+C,EAAEw+C,WAAcx+C,EAAEoV,OAAOpV,EAAE48C,SAAW1B,EAAY,IAAMl7C,EAAEy+C,UACjFE,EAAY3+C,EAAEiuC,KAAKjuC,EAAE48C,SAAW58C,EAAE09C,QAAU19C,EAAEs+C,KAAKt+C,EAAEu+C,OACrDv+C,EAAEs+C,KAAKt+C,EAAEu+C,OAASv+C,EAAE48C,UAOJ,IAAd+B,GAA4B3+C,EAAE48C,SAAW+B,GAAe3+C,EAAEu9C,OAASnC,IAKrEp7C,EAAE6+C,aAAe9B,GAAc/8C,EAAG2+C,IAGhC3+C,EAAE6+C,cAAgB3D,EAYpB,GAPA0D,EAASryB,EAAMuyB,UAAU9+C,EAAGA,EAAE48C,SAAW58C,EAAEg+C,YAAah+C,EAAE6+C,aAAe3D,GAEzEl7C,EAAE+9C,WAAa/9C,EAAE6+C,aAKb7+C,EAAE6+C,cAAgB7+C,EAAE++C,gBAAuC/+C,EAAE+9C,WAAa7C,EAAW,CACvFl7C,EAAE6+C,eACF,GACE7+C,EAAE48C,WAEF58C,EAAEu+C,OAAUv+C,EAAEu+C,OAASv+C,EAAEw+C,WAAcx+C,EAAEoV,OAAOpV,EAAE48C,SAAW1B,EAAY,IAAMl7C,EAAEy+C,UACjFE,EAAY3+C,EAAEiuC,KAAKjuC,EAAE48C,SAAW58C,EAAE09C,QAAU19C,EAAEs+C,KAAKt+C,EAAEu+C,OACrDv+C,EAAEs+C,KAAKt+C,EAAEu+C,OAASv+C,EAAE48C,eAKQ,KAAnB58C,EAAE6+C,cACb7+C,EAAE48C,gBAGF58C,EAAE48C,UAAY58C,EAAE6+C,aAChB7+C,EAAE6+C,aAAe,EACjB7+C,EAAEu+C,MAAQv+C,EAAEoV,OAAOpV,EAAE48C,UAErB58C,EAAEu+C,OAAUv+C,EAAEu+C,OAASv+C,EAAEw+C,WAAcx+C,EAAEoV,OAAOpV,EAAE48C,SAAW,IAAM58C,EAAEy+C,eAavEG,EAASryB,EAAMuyB,UAAU9+C,EAAG,EAAGA,EAAEoV,OAAOpV,EAAE48C,WAE1C58C,EAAE+9C,YACF/9C,EAAE48C,WAEJ,GAAIgC,IAEFnC,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACT,OAAO6T,EAMb,OADA77C,EAAE89B,OAAW99B,EAAE48C,SAAY1B,EAAY,EAAMl7C,EAAE48C,SAAW1B,EAAY,EAClExQ,IAAUjC,GAEZgU,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,UACF+T,EAGFC,GAELh8C,EAAEg/C,WAEJvC,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACF6T,EAIJC,EAQT,SAASmD,GAAaj/C,EAAG0qC,GAOvB,IANA,IAAIiU,EACAC,EAEAM,IAGK,CAMP,GAAIl/C,EAAE+9C,UAAY3C,EAAe,CAE/B,GADA6C,GAAYj+C,GACRA,EAAE+9C,UAAY3C,GAAiB1Q,IAAUrC,EAC3C,OAAOwT,EAET,GAAoB,IAAhB77C,EAAE+9C,UAAmB,MA0C3B,GApCAY,EAAY,EACR3+C,EAAE+9C,WAAa7C,IAEjBl7C,EAAEu+C,OAAUv+C,EAAEu+C,OAASv+C,EAAEw+C,WAAcx+C,EAAEoV,OAAOpV,EAAE48C,SAAW1B,EAAY,IAAMl7C,EAAEy+C,UACjFE,EAAY3+C,EAAEiuC,KAAKjuC,EAAE48C,SAAW58C,EAAE09C,QAAU19C,EAAEs+C,KAAKt+C,EAAEu+C,OACrDv+C,EAAEs+C,KAAKt+C,EAAEu+C,OAASv+C,EAAE48C,UAMtB58C,EAAEq9C,YAAcr9C,EAAE6+C,aAClB7+C,EAAEm/C,WAAan/C,EAAEg+C,YACjBh+C,EAAE6+C,aAAe3D,EAAY,EAEX,IAAdyD,GAA0B3+C,EAAEq9C,YAAcr9C,EAAE++C,gBAC5C/+C,EAAE48C,SAAW+B,GAAc3+C,EAAEu9C,OAASnC,IAKxCp7C,EAAE6+C,aAAe9B,GAAc/8C,EAAG2+C,GAG9B3+C,EAAE6+C,cAAgB,IAClB7+C,EAAE05C,WAAanQ,GAAevpC,EAAE6+C,eAAiB3D,GAAal7C,EAAE48C,SAAW58C,EAAEg+C,YAAc,QAK7Fh+C,EAAE6+C,aAAe3D,EAAY,IAM7Bl7C,EAAEq9C,aAAenC,GAAal7C,EAAE6+C,cAAgB7+C,EAAEq9C,YAAa,CACjE6B,EAAal/C,EAAE48C,SAAW58C,EAAE+9C,UAAY7C,EAOxC0D,EAASryB,EAAMuyB,UAAU9+C,EAAGA,EAAE48C,SAAW,EAAI58C,EAAEm/C,WAAYn/C,EAAEq9C,YAAcnC,GAM3El7C,EAAE+9C,WAAa/9C,EAAEq9C,YAAc,EAC/Br9C,EAAEq9C,aAAe,EACjB,KACQr9C,EAAE48C,UAAYsC,IAElBl/C,EAAEu+C,OAAUv+C,EAAEu+C,OAASv+C,EAAEw+C,WAAcx+C,EAAEoV,OAAOpV,EAAE48C,SAAW1B,EAAY,IAAMl7C,EAAEy+C,UACjFE,EAAY3+C,EAAEiuC,KAAKjuC,EAAE48C,SAAW58C,EAAE09C,QAAU19C,EAAEs+C,KAAKt+C,EAAEu+C,OACrDv+C,EAAEs+C,KAAKt+C,EAAEu+C,OAASv+C,EAAE48C,gBAGK,KAAlB58C,EAAEq9C,aAKb,GAJAr9C,EAAEo/C,gBAAkB,EACpBp/C,EAAE6+C,aAAe3D,EAAY,EAC7Bl7C,EAAE48C,WAEEgC,IAEFnC,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACT,OAAO6T,OAKN,GAAI77C,EAAEo/C,iBAgBX,IATAR,EAASryB,EAAMuyB,UAAU9+C,EAAG,EAAGA,EAAEoV,OAAOpV,EAAE48C,SAAW,MAInDH,GAAiBz8C,GAAG,GAGtBA,EAAE48C,WACF58C,EAAE+9C,YACuB,IAArB/9C,EAAEkyC,KAAKlK,UACT,OAAO6T,OAMT77C,EAAEo/C,gBAAkB,EACpBp/C,EAAE48C,WACF58C,EAAE+9C,YAYN,OARI/9C,EAAEo/C,kBAGJR,EAASryB,EAAMuyB,UAAU9+C,EAAG,EAAGA,EAAEoV,OAAOpV,EAAE48C,SAAW,IAErD58C,EAAEo/C,gBAAkB,GAEtBp/C,EAAE89B,OAAS99B,EAAE48C,SAAW1B,EAAY,EAAIl7C,EAAE48C,SAAW1B,EAAY,EAC7DxQ,IAAUjC,GAEZgU,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,UACF+T,EAGFC,GAELh8C,EAAEg/C,WAEJvC,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACF6T,EAKJC,EAiKT,SAASuD,GAAOC,EAAaC,EAAUC,EAAaC,EAAWC,GAC7D16C,KAAKs6C,YAAcA,EACnBt6C,KAAKu6C,SAAWA,EAChBv6C,KAAKw6C,YAAcA,EACnBx6C,KAAKy6C,UAAYA,EACjBz6C,KAAK06C,KAAOA,EA+Cd,SAASC,KACP36C,KAAKktC,KAAO,KACZltC,KAAK62B,OAAS,EACd72B,KAAKu3C,YAAc,KACnBv3C,KAAK46C,iBAAmB,EACxB56C,KAAKw3C,YAAc,EACnBx3C,KAAKs3C,QAAU,EACft3C,KAAK6iB,KAAO,EACZ7iB,KAAK66C,OAAS,KACd76C,KAAK86C,QAAU,EACf96C,KAAK0G,OAASq+B,EACd/kC,KAAK+6C,YAAc,EAEnB/6C,KAAKu4C,OAAS,EACdv4C,KAAKg7C,OAAS,EACdh7C,KAAK04C,OAAS,EAEd14C,KAAKoQ,OAAS,KAQdpQ,KAAKo5C,YAAc,EAKnBp5C,KAAKipC,KAAO,KAMZjpC,KAAKs5C,KAAO,KAEZt5C,KAAKu5C,MAAQ,EACbv5C,KAAKq5C,UAAY,EACjBr5C,KAAKi7C,UAAY,EACjBj7C,KAAKy5C,UAAY,EAEjBz5C,KAAKw5C,WAAa,EAOlBx5C,KAAK23C,YAAc,EAKnB33C,KAAK65C,aAAe,EACpB75C,KAAKm6C,WAAa,EAClBn6C,KAAKo6C,gBAAkB,EACvBp6C,KAAK43C,SAAW,EAChB53C,KAAKg5C,YAAc,EACnBh5C,KAAK+4C,UAAY,EAEjB/4C,KAAKq4C,YAAc,EAKnBr4C,KAAKk4C,iBAAmB,EAMxBl4C,KAAK+5C,eAAiB,EAYtB/5C,KAAKs0C,MAAQ,EACbt0C,KAAK00C,SAAW,EAEhB10C,KAAK84C,WAAa,EAGlB94C,KAAKs4C,WAAa,EAYlBt4C,KAAKk7C,UAAa,IAAIvZ,EAAMtd,MAAkB,EAAZ2xB,GAClCh2C,KAAKm7C,UAAa,IAAIxZ,EAAMtd,MAA0B,GAAnB,EAAIyxB,EAAU,IACjD91C,KAAKo7C,QAAa,IAAIzZ,EAAMtd,MAA2B,GAApB,EAAI0xB,EAAW,IAClDqB,EAAKp3C,KAAKk7C,WACV9D,EAAKp3C,KAAKm7C,WACV/D,EAAKp3C,KAAKo7C,SAEVp7C,KAAKq7C,OAAW,KAChBr7C,KAAKs7C,OAAW,KAChBt7C,KAAKu7C,QAAW,KAGhBv7C,KAAKw7C,SAAW,IAAI7Z,EAAMtd,MAAM4xB,EAAW,GAI3Cj2C,KAAKy7C,KAAO,IAAI9Z,EAAMtd,MAAM,EAAIuxB,EAAU,GAC1CwB,EAAKp3C,KAAKy7C,MAEVz7C,KAAK07C,SAAW,EAChB17C,KAAK27C,SAAW,EAKhB37C,KAAK6K,MAAQ,IAAI82B,EAAMtd,MAAM,EAAIuxB,EAAU,GAC3CwB,EAAKp3C,KAAK6K,OAIV7K,KAAK47C,MAAQ,EAEb57C,KAAK67C,YAAc,EAoBnB77C,KAAKg6C,SAAW,EAEhBh6C,KAAK87C,MAAQ,EAMb97C,KAAK+7C,QAAU,EACf/7C,KAAKg8C,WAAa,EAClBh8C,KAAKu6B,QAAU,EACfv6B,KAAK84B,OAAS,EAGd94B,KAAKi8C,OAAS,EAIdj8C,KAAKk8C,SAAW,EAgBlB,SAASC,GAAiBjP,GACxB,IAAIlyC,EAEJ,OAAKkyC,GAASA,EAAK/J,OAInB+J,EAAKpK,SAAWoK,EAAKjK,UAAY,EACjCiK,EAAK9J,UAAY0B,GAEjB9pC,EAAIkyC,EAAK/J,OACPmU,QAAU,EACZt8C,EAAEw8C,YAAc,EAEZx8C,EAAE6nB,KAAO,IACX7nB,EAAE6nB,MAAQ7nB,EAAE6nB,MAGd7nB,EAAE67B,OAAU77B,EAAE6nB,KAAOyzB,EAAaK,EAClCzJ,EAAK7L,MAAoB,IAAXrmC,EAAE6nB,KACd,EAEA,EACF7nB,EAAE+/C,WAAa1X,EACf9b,EAAM60B,SAASphD,GACR4oC,GArBEpgC,EAAI0pC,EAAMlJ,GAyBrB,SAASqY,GAAanP,GACpB,IAlPelyC,EAkPX4d,EAAMujC,GAAiBjP,GAI3B,OAHIt0B,IAAQgrB,KAnPG5oC,EAoPLkyC,EAAK/J,OAnPbiW,YAAc,EAAIp+C,EAAEu9C,OAGtBnB,EAAKp8C,EAAEs+C,MAIPt+C,EAAE++C,eAAiBxE,EAAoBv6C,EAAEs5C,OAAOiG,SAChDv/C,EAAE89C,WAAavD,EAAoBv6C,EAAEs5C,OAAOgG,YAC5Ct/C,EAAEs9C,WAAa/C,EAAoBv6C,EAAEs5C,OAAOkG,YAC5Cx/C,EAAEk9C,iBAAmB3C,EAAoBv6C,EAAEs5C,OAAOmG,UAElDz/C,EAAE48C,SAAW,EACb58C,EAAE28C,YAAc,EAChB38C,EAAE+9C,UAAY,EACd/9C,EAAE89B,OAAS,EACX99B,EAAE6+C,aAAe7+C,EAAEq9C,YAAcnC,EAAY,EAC7Cl7C,EAAEo/C,gBAAkB,EACpBp/C,EAAEu+C,MAAQ,GAmOH3gC,EAYT,SAASi8B,GAAa3H,EAAMoH,EAAO5tC,EAAQ8tC,EAAYC,EAAUC,GAC/D,IAAKxH,EACH,OAAOlJ,EAET,IAAInhB,EAAO,EAiBX,GAfIyxB,IAAUhQ,IACZgQ,EAAQ,GAGNE,EAAa,GACf3xB,EAAO,EACP2xB,GAAcA,GAGPA,EAAa,KACpB3xB,EAAO,EACP2xB,GAAc,IAIZC,EAAW,GAAKA,EAAWgB,GAAiB/uC,IAAWq+B,GACzDyP,EAAa,GAAKA,EAAa,IAAMF,EAAQ,GAAKA,EAAQ,GAC1DI,EAAW,GAAKA,EAAWhQ,EAC3B,OAAOlhC,EAAI0pC,EAAMlJ,GAIA,IAAfwQ,IACFA,EAAa,GAIf,IAAIx5C,EAAI,IAAI2/C,GA0CZ,OAxCAzN,EAAK/J,MAAQnoC,EACbA,EAAEkyC,KAAOA,EAETlyC,EAAE6nB,KAAOA,EACT7nB,EAAE6/C,OAAS,KACX7/C,EAAEggD,OAASxG,EACXx5C,EAAEu9C,OAAS,GAAKv9C,EAAEggD,OAClBhgD,EAAE09C,OAAS19C,EAAEu9C,OAAS,EAEtBv9C,EAAEigD,UAAYxG,EAAW,EACzBz5C,EAAEq+C,UAAY,GAAKr+C,EAAEigD,UACrBjgD,EAAEy+C,UAAYz+C,EAAEq+C,UAAY,EAC5Br+C,EAAEw+C,eAAiBx+C,EAAEigD,UAAY/E,EAAY,GAAKA,GAElDl7C,EAAEoV,OAAS,IAAIuxB,EAAMvd,KAAgB,EAAXppB,EAAEu9C,QAC5Bv9C,EAAEs+C,KAAO,IAAI3X,EAAMtd,MAAMrpB,EAAEq+C,WAC3Br+C,EAAEiuC,KAAO,IAAItH,EAAMtd,MAAMrpB,EAAEu9C,QAK3Bv9C,EAAE6gD,YAAc,GAAMpH,EAAW,EAEjCz5C,EAAE4/C,iBAAmC,EAAhB5/C,EAAE6gD,YAIvB7gD,EAAEu8C,YAAc,IAAI5V,EAAMvd,KAAKppB,EAAE4/C,kBAIjC5/C,EAAE8gD,MAAQ,EAAI9gD,EAAE6gD,YAGhB7gD,EAAE4gD,MAAQ,EAAU5gD,EAAE6gD,YAEtB7gD,EAAEs5C,MAAQA,EACVt5C,EAAE05C,SAAWA,EACb15C,EAAE0L,OAASA,EAEJ21C,GAAanP,GAhWtBqI,EAAsB,CAEpB,IAAI8E,GAAO,EAAG,EAAG,EAAG,EAxiBtB,SAAwBr/C,EAAG0qC,GAIzB,IAAI4W,EAAiB,MAOrB,IALIA,EAAiBthD,EAAE4/C,iBAAmB,IACxC0B,EAAiBthD,EAAE4/C,iBAAmB,KAI/B,CAEP,GAAI5/C,EAAE+9C,WAAa,EAAG,CAUpB,GADAE,GAAYj+C,GACQ,IAAhBA,EAAE+9C,WAAmBrT,IAAUrC,EACjC,OAAOwT,EAGT,GAAoB,IAAhB77C,EAAE+9C,UACJ,MAOJ/9C,EAAE48C,UAAY58C,EAAE+9C,UAChB/9C,EAAE+9C,UAAY,EAGd,IAAIwD,EAAYvhD,EAAE28C,YAAc2E,EAEhC,IAAmB,IAAfthD,EAAE48C,UAAkB58C,EAAE48C,UAAY2E,KAEpCvhD,EAAE+9C,UAAY/9C,EAAE48C,SAAW2E,EAC3BvhD,EAAE48C,SAAW2E,EAEb9E,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACT,OAAO6T,EASX,GAAI77C,EAAE48C,SAAW58C,EAAE28C,aAAgB38C,EAAEu9C,OAASnC,IAE5CqB,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACT,OAAO6T,EAQb,OAFA77C,EAAE89B,OAAS,EAEP4M,IAAUjC,GAEZgU,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,UACF+T,EAGFC,IAGLh8C,EAAE48C,SAAW58C,EAAE28C,cAEjBF,GAAiBz8C,GAAG,GAChBA,EAAEkyC,KAAKlK,WACF6T,KAsdX,IAAIwD,GAAO,EAAG,EAAG,EAAG,EAAGX,IACvB,IAAIW,GAAO,EAAG,EAAG,GAAI,EAAGX,IACxB,IAAIW,GAAO,EAAG,EAAG,GAAI,GAAIX,IAEzB,IAAIW,GAAO,EAAG,EAAG,GAAI,GAAIJ,IACzB,IAAII,GAAO,EAAG,GAAI,GAAI,GAAIJ,IAC1B,IAAII,GAAO,EAAG,GAAI,IAAK,IAAKJ,IAC5B,IAAII,GAAO,EAAG,GAAI,IAAK,IAAKJ,IAC5B,IAAII,GAAO,GAAI,IAAK,IAAK,KAAMJ,IAC/B,IAAII,GAAO,GAAI,IAAK,IAAK,KAAMJ,KA2xBjCxhD,EAAQ+jD,YApcR,SAAqBtP,EAAMoH,GACzB,OAAOO,GAAa3H,EAAMoH,EAAOvP,EAAY2Q,EAAWC,EAAehR,IAoczElsC,EAAQo8C,aAAeA,GACvBp8C,EAAQ4jD,aAAeA,GACvB5jD,EAAQ0jD,iBAAmBA,GAC3B1jD,EAAQq8C,iBA9hBR,SAA0B5H,EAAMoM,GAC9B,OAAKpM,GAASA,EAAK/J,MACK,IAApB+J,EAAK/J,MAAMtgB,KAAqBmhB,GACpCkJ,EAAK/J,MAAM0X,OAASvB,EACb1V,GAH4BI,GA8hBrCvrC,EAAQqqB,QApcR,SAAiBoqB,EAAMxH,GACrB,IAAI+W,EAAWzhD,EACX0hD,EAAKjqC,EAET,IAAKy6B,IAASA,EAAK/J,OACjBuC,EAAQhC,GAAWgC,EAAQ,EAC3B,OAAOwH,EAAO1pC,EAAI0pC,EAAMlJ,GAAkBA,EAK5C,GAFAhpC,EAAIkyC,EAAK/J,OAEJ+J,EAAKrV,SACJqV,EAAK7sB,OAA2B,IAAlB6sB,EAAKrK,UACpB7nC,EAAE67B,SAAW+f,GAAgBlR,IAAUjC,EAC1C,OAAOjgC,EAAI0pC,EAA0B,IAAnBA,EAAKlK,UAAmBkB,EAAcF,GAQ1D,GALAhpC,EAAEkyC,KAAOA,EACTuP,EAAYzhD,EAAE+/C,WACd//C,EAAE+/C,WAAarV,EAGX1qC,EAAE67B,SAAWyf,EAEf,GAAe,IAAXt7C,EAAE6nB,KACJqqB,EAAK7L,MAAQ,EACbwW,GAAS78C,EAAG,IACZ68C,GAAS78C,EAAG,KACZ68C,GAAS78C,EAAG,GACPA,EAAE6/C,QAaLhD,GAAS78C,GAAIA,EAAE6/C,OAAO3zC,KAAO,EAAI,IACpBlM,EAAE6/C,OAAO8B,KAAO,EAAI,IACnB3hD,EAAE6/C,OAAO+B,MAAY,EAAJ,IACjB5hD,EAAE6/C,OAAOrhD,KAAW,EAAJ,IAChBwB,EAAE6/C,OAAOpzC,QAAc,GAAJ,IAEjCowC,GAAS78C,EAAmB,IAAhBA,EAAE6/C,OAAOnvB,MACrBmsB,GAAS78C,EAAIA,EAAE6/C,OAAOnvB,MAAQ,EAAK,KACnCmsB,GAAS78C,EAAIA,EAAE6/C,OAAOnvB,MAAQ,GAAM,KACpCmsB,GAAS78C,EAAIA,EAAE6/C,OAAOnvB,MAAQ,GAAM,KACpCmsB,GAAS78C,EAAe,IAAZA,EAAEs5C,MAAc,EACft5C,EAAE05C,UAAYlQ,GAAkBxpC,EAAEs5C,MAAQ,EAC1C,EAAI,GACjBuD,GAAS78C,EAAiB,IAAdA,EAAE6/C,OAAOgC,IACjB7hD,EAAE6/C,OAAO+B,OAAS5hD,EAAE6/C,OAAO+B,MAAMrzC,SACnCsuC,GAAS78C,EAA2B,IAAxBA,EAAE6/C,OAAO+B,MAAMrzC,QAC3BsuC,GAAS78C,EAAIA,EAAE6/C,OAAO+B,MAAMrzC,QAAU,EAAK,MAEzCvO,EAAE6/C,OAAO8B,OACXzP,EAAK7L,MAAQnW,EAAMgiB,EAAK7L,MAAOrmC,EAAEu8C,YAAav8C,EAAEs8C,QAAS,IAE3Dt8C,EAAE8/C,QAAU,EACZ9/C,EAAE67B,OAAS0f,IAlCXsB,GAAS78C,EAAG,GACZ68C,GAAS78C,EAAG,GACZ68C,GAAS78C,EAAG,GACZ68C,GAAS78C,EAAG,GACZ68C,GAAS78C,EAAG,GACZ68C,GAAS78C,EAAe,IAAZA,EAAEs5C,MAAc,EACft5C,EAAE05C,UAAYlQ,GAAkBxpC,EAAEs5C,MAAQ,EAC1C,EAAI,GACjBuD,GAAS78C,EAAGi8C,GACZj8C,EAAE67B,OAAS8f,OA6Bf,CACE,IAAI1d,EAAU8L,GAAe/pC,EAAEggD,OAAS,GAAM,IAAO,EAYrD/hB,IATIj+B,EAAE05C,UAAYlQ,GAAkBxpC,EAAEs5C,MAAQ,EAC9B,EACLt5C,EAAEs5C,MAAQ,EACL,EACO,IAAZt5C,EAAEs5C,MACG,EAEA,IAEU,EACP,IAAft5C,EAAE48C,WAAkB3e,GAAUod,GAClCpd,GAAU,GAAMA,EAAS,GAEzBj+B,EAAE67B,OAAS8f,EACXmB,GAAY98C,EAAGi+B,GAGI,IAAfj+B,EAAE48C,WACJE,GAAY98C,EAAGkyC,EAAK7L,QAAU,IAC9ByW,GAAY98C,EAAgB,MAAbkyC,EAAK7L,QAEtB6L,EAAK7L,MAAQ,EAKjB,GAAIrmC,EAAE67B,SAAW0f,EACf,GAAIv7C,EAAE6/C,OAAO+B,MAAqB,CAGhC,IAFAF,EAAM1hD,EAAEs8C,QAEDt8C,EAAE8/C,SAAmC,MAAxB9/C,EAAE6/C,OAAO+B,MAAMrzC,UAC7BvO,EAAEs8C,UAAYt8C,EAAE4/C,mBACd5/C,EAAE6/C,OAAO8B,MAAQ3hD,EAAEs8C,QAAUoF,IAC/BxP,EAAK7L,MAAQnW,EAAMgiB,EAAK7L,MAAOrmC,EAAEu8C,YAAav8C,EAAEs8C,QAAUoF,EAAKA,IAEjErF,GAAcnK,GACdwP,EAAM1hD,EAAEs8C,QACJt8C,EAAEs8C,UAAYt8C,EAAE4/C,oBAItB/C,GAAS78C,EAA+B,IAA5BA,EAAE6/C,OAAO+B,MAAM5hD,EAAE8/C,UAC7B9/C,EAAE8/C,UAEA9/C,EAAE6/C,OAAO8B,MAAQ3hD,EAAEs8C,QAAUoF,IAC/BxP,EAAK7L,MAAQnW,EAAMgiB,EAAK7L,MAAOrmC,EAAEu8C,YAAav8C,EAAEs8C,QAAUoF,EAAKA,IAE7D1hD,EAAE8/C,UAAY9/C,EAAE6/C,OAAO+B,MAAMrzC,SAC/BvO,EAAE8/C,QAAU,EACZ9/C,EAAE67B,OAAS2f,QAIbx7C,EAAE67B,OAAS2f,EAGf,GAAIx7C,EAAE67B,SAAW2f,EACf,GAAIx7C,EAAE6/C,OAAOrhD,KAAoB,CAC/BkjD,EAAM1hD,EAAEs8C,QAGR,EAAG,CACD,GAAIt8C,EAAEs8C,UAAYt8C,EAAE4/C,mBACd5/C,EAAE6/C,OAAO8B,MAAQ3hD,EAAEs8C,QAAUoF,IAC/BxP,EAAK7L,MAAQnW,EAAMgiB,EAAK7L,MAAOrmC,EAAEu8C,YAAav8C,EAAEs8C,QAAUoF,EAAKA,IAEjErF,GAAcnK,GACdwP,EAAM1hD,EAAEs8C,QACJt8C,EAAEs8C,UAAYt8C,EAAE4/C,kBAAkB,CACpCnoC,EAAM,EACN,MAKFA,EADEzX,EAAE8/C,QAAU9/C,EAAE6/C,OAAOrhD,KAAK+P,OACkB,IAAxCvO,EAAE6/C,OAAOrhD,KAAK2b,WAAWna,EAAE8/C,WAE3B,EAERjD,GAAS78C,EAAGyX,SACG,IAARA,GAELzX,EAAE6/C,OAAO8B,MAAQ3hD,EAAEs8C,QAAUoF,IAC/BxP,EAAK7L,MAAQnW,EAAMgiB,EAAK7L,MAAOrmC,EAAEu8C,YAAav8C,EAAEs8C,QAAUoF,EAAKA,IAErD,IAARjqC,IACFzX,EAAE8/C,QAAU,EACZ9/C,EAAE67B,OAAS4f,QAIbz7C,EAAE67B,OAAS4f,EAGf,GAAIz7C,EAAE67B,SAAW4f,EACf,GAAIz7C,EAAE6/C,OAAOpzC,QAAuB,CAClCi1C,EAAM1hD,EAAEs8C,QAGR,EAAG,CACD,GAAIt8C,EAAEs8C,UAAYt8C,EAAE4/C,mBACd5/C,EAAE6/C,OAAO8B,MAAQ3hD,EAAEs8C,QAAUoF,IAC/BxP,EAAK7L,MAAQnW,EAAMgiB,EAAK7L,MAAOrmC,EAAEu8C,YAAav8C,EAAEs8C,QAAUoF,EAAKA,IAEjErF,GAAcnK,GACdwP,EAAM1hD,EAAEs8C,QACJt8C,EAAEs8C,UAAYt8C,EAAE4/C,kBAAkB,CACpCnoC,EAAM,EACN,MAKFA,EADEzX,EAAE8/C,QAAU9/C,EAAE6/C,OAAOpzC,QAAQ8B,OACkB,IAA3CvO,EAAE6/C,OAAOpzC,QAAQ0N,WAAWna,EAAE8/C,WAE9B,EAERjD,GAAS78C,EAAGyX,SACG,IAARA,GAELzX,EAAE6/C,OAAO8B,MAAQ3hD,EAAEs8C,QAAUoF,IAC/BxP,EAAK7L,MAAQnW,EAAMgiB,EAAK7L,MAAOrmC,EAAEu8C,YAAav8C,EAAEs8C,QAAUoF,EAAKA,IAErD,IAARjqC,IACFzX,EAAE67B,OAAS6f,QAIb17C,EAAE67B,OAAS6f,EAsBf,GAnBI17C,EAAE67B,SAAW6f,IACX17C,EAAE6/C,OAAO8B,MACP3hD,EAAEs8C,QAAU,EAAIt8C,EAAE4/C,kBACpBvD,GAAcnK,GAEZlyC,EAAEs8C,QAAU,GAAKt8C,EAAE4/C,mBACrB/C,GAAS78C,EAAgB,IAAbkyC,EAAK7L,OACjBwW,GAAS78C,EAAIkyC,EAAK7L,OAAS,EAAK,KAChC6L,EAAK7L,MAAQ,EACbrmC,EAAE67B,OAAS8f,IAIb37C,EAAE67B,OAAS8f,GAMG,IAAd37C,EAAEs8C,SAEJ,GADAD,GAAcnK,GACS,IAAnBA,EAAKlK,UAQP,OADAhoC,EAAE+/C,YAAc,EACTnX,OAOJ,GAAsB,IAAlBsJ,EAAKrK,UAAkBsU,EAAKzR,IAAUyR,EAAKsF,IACpD/W,IAAUjC,EACV,OAAOjgC,EAAI0pC,EAAMhJ,GAInB,GAAIlpC,EAAE67B,SAAW+f,GAAkC,IAAlB1J,EAAKrK,SACpC,OAAOr/B,EAAI0pC,EAAMhJ,GAKnB,GAAsB,IAAlBgJ,EAAKrK,UAAkC,IAAhB7nC,EAAE+9C,WAC1BrT,IAAUrC,GAAcroC,EAAE67B,SAAW+f,EAAe,CACrD,IAAIkG,EAAU9hD,EAAE05C,WAAalQ,EAxqBjC,SAAsBxpC,EAAG0qC,GAGvB,IAFA,IAAIkU,IAEK,CAEP,GAAoB,IAAhB5+C,EAAE+9C,YACJE,GAAYj+C,GACQ,IAAhBA,EAAE+9C,WAAiB,CACrB,GAAIrT,IAAUrC,EACZ,OAAOwT,EAET,MAWJ,GANA77C,EAAE6+C,aAAe,EAGjBD,EAASryB,EAAMuyB,UAAU9+C,EAAG,EAAGA,EAAEoV,OAAOpV,EAAE48C,WAC1C58C,EAAE+9C,YACF/9C,EAAE48C,WACEgC,IAEFnC,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACT,OAAO6T,EAMb,OADA77C,EAAE89B,OAAS,EACP4M,IAAUjC,GAEZgU,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,UACF+T,EAGFC,GAELh8C,EAAEg/C,WAEJvC,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACF6T,EAIJC,EAunB0CiG,CAAa/hD,EAAG0qC,GAC5D1qC,EAAE05C,WAAajQ,EAxwBtB,SAAqBzpC,EAAG0qC,GAOtB,IANA,IAAIkU,EACA3Q,EACAkP,EAAMQ,EAENH,EAAOx9C,EAAEoV,SAEJ,CAKP,GAAIpV,EAAE+9C,WAAa5C,EAAW,CAE5B,GADA8C,GAAYj+C,GACRA,EAAE+9C,WAAa5C,GAAazQ,IAAUrC,EACxC,OAAOwT,EAET,GAAoB,IAAhB77C,EAAE+9C,UAAmB,MAK3B,GADA/9C,EAAE6+C,aAAe,EACb7+C,EAAE+9C,WAAa7C,GAAal7C,EAAE48C,SAAW,IAE3C3O,EAAOuP,EADPL,EAAOn9C,EAAE48C,SAAW,MAEPY,IAAOL,IAASlP,IAASuP,IAAOL,IAASlP,IAASuP,IAAOL,GAAO,CAC3EQ,EAAS39C,EAAE48C,SAAWzB,EACtB,UAESlN,IAASuP,IAAOL,IAASlP,IAASuP,IAAOL,IACzClP,IAASuP,IAAOL,IAASlP,IAASuP,IAAOL,IACzClP,IAASuP,IAAOL,IAASlP,IAASuP,IAAOL,IACzClP,IAASuP,IAAOL,IAASlP,IAASuP,IAAOL,IACzCA,EAAOQ,GAChB39C,EAAE6+C,aAAe1D,GAAawC,EAASR,GACnCn9C,EAAE6+C,aAAe7+C,EAAE+9C,YACrB/9C,EAAE6+C,aAAe7+C,EAAE+9C,WAyBzB,GAlBI/9C,EAAE6+C,cAAgB3D,GAIpB0D,EAASryB,EAAMuyB,UAAU9+C,EAAG,EAAGA,EAAE6+C,aAAe3D,GAEhDl7C,EAAE+9C,WAAa/9C,EAAE6+C,aACjB7+C,EAAE48C,UAAY58C,EAAE6+C,aAChB7+C,EAAE6+C,aAAe,IAKjBD,EAASryB,EAAMuyB,UAAU9+C,EAAG,EAAGA,EAAEoV,OAAOpV,EAAE48C,WAE1C58C,EAAE+9C,YACF/9C,EAAE48C,YAEAgC,IAEFnC,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACT,OAAO6T,EAMb,OADA77C,EAAE89B,OAAS,EACP4M,IAAUjC,GAEZgU,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,UACF+T,EAGFC,GAELh8C,EAAEg/C,WAEJvC,GAAiBz8C,GAAG,GACK,IAArBA,EAAEkyC,KAAKlK,WACF6T,EAIJC,EAgrBqBkG,CAAYhiD,EAAG0qC,GACrC6P,EAAoBv6C,EAAEs5C,OAAOoG,KAAK1/C,EAAG0qC,GAKzC,GAHIoX,IAAW/F,GAAqB+F,IAAW9F,IAC7Ch8C,EAAE67B,OAAS+f,GAETkG,IAAWjG,GAAgBiG,IAAW/F,EAKxC,OAJuB,IAAnB7J,EAAKlK,YACPhoC,EAAE+/C,YAAc,GAGXnX,EAST,GAAIkZ,IAAWhG,IACTpR,IAAUpC,EACZ/b,EAAM01B,UAAUjiD,GAET0qC,IAAUhC,IAEjBnc,EAAM21B,iBAAiBliD,EAAG,EAAG,GAAG,GAI5B0qC,IAAUlC,IAEZ4T,EAAKp8C,EAAEs+C,MAEa,IAAhBt+C,EAAE+9C,YACJ/9C,EAAE48C,SAAW,EACb58C,EAAE28C,YAAc,EAChB38C,EAAE89B,OAAS,KAIjBue,GAAcnK,GACS,IAAnBA,EAAKlK,WAEP,OADAhoC,EAAE+/C,YAAc,EACTnX,EAOb,OAAI8B,IAAUjC,EAAmBG,EAC7B5oC,EAAE6nB,MAAQ,EAAYghB,GAGX,IAAX7oC,EAAE6nB,MACJg1B,GAAS78C,EAAgB,IAAbkyC,EAAK7L,OACjBwW,GAAS78C,EAAIkyC,EAAK7L,OAAS,EAAK,KAChCwW,GAAS78C,EAAIkyC,EAAK7L,OAAS,GAAM,KACjCwW,GAAS78C,EAAIkyC,EAAK7L,OAAS,GAAM,KACjCwW,GAAS78C,EAAmB,IAAhBkyC,EAAKpK,UACjB+U,GAAS78C,EAAIkyC,EAAKpK,UAAY,EAAK,KACnC+U,GAAS78C,EAAIkyC,EAAKpK,UAAY,GAAM,KACpC+U,GAAS78C,EAAIkyC,EAAKpK,UAAY,GAAM,OAIpCgV,GAAY98C,EAAGkyC,EAAK7L,QAAU,IAC9ByW,GAAY98C,EAAgB,MAAbkyC,EAAK7L,QAGtBgW,GAAcnK,GAIVlyC,EAAE6nB,KAAO,IAAK7nB,EAAE6nB,MAAQ7nB,EAAE6nB,MAET,IAAd7nB,EAAEs8C,QAAgB1T,EAAOC,IA0HlCprC,EAAQ48C,WAvHR,SAAoBnI,GAClB,IAAIrW,EAEJ,OAAKqW,GAAsBA,EAAK/J,OAIhCtM,EAASqW,EAAK/J,MAAMtM,UACLyf,GACbzf,IAAW0f,GACX1f,IAAW2f,GACX3f,IAAW4f,GACX5f,IAAW6f,GACX7f,IAAW8f,GACX9f,IAAW+f,EAEJpzC,EAAI0pC,EAAMlJ,IAGnBkJ,EAAK/J,MAAQ,KAENtM,IAAW8f,EAAanzC,EAAI0pC,EAAMjJ,GAAgBL,GAjBhDI,GAoHXvrC,EAAQw8C,qBA3FR,SAA8B/H,EAAM6H,GAClC,IAEI/5C,EACAia,EAAKva,EACLmoB,EACAs6B,EACA12B,EACApG,EACA+8B,EARAC,EAAatI,EAAWxrC,OAU5B,IAAK2jC,IAAsBA,EAAK/J,MAC9B,OAAOa,EAMT,GAAa,KAFbnhB,GADA7nB,EAAIkyC,EAAK/J,OACAtgB,OAEmB,IAATA,GAAc7nB,EAAE67B,SAAWyf,GAAet7C,EAAE+9C,UAC7D,OAAO/U,EAmCT,IA/Ba,IAATnhB,IAEFqqB,EAAK7L,MAAQmU,EAAQtI,EAAK7L,MAAO0T,EAAYsI,EAAY,IAG3DriD,EAAE6nB,KAAO,EAGLw6B,GAAcriD,EAAEu9C,SACL,IAAT11B,IAEFu0B,EAAKp8C,EAAEs+C,MACPt+C,EAAE48C,SAAW,EACb58C,EAAE28C,YAAc,EAChB38C,EAAE89B,OAAS,GAIbskB,EAAU,IAAIzb,EAAMvd,KAAKppB,EAAEu9C,QAC3B5W,EAAMje,SAAS05B,EAASrI,EAAYsI,EAAariD,EAAEu9C,OAAQv9C,EAAEu9C,OAAQ,GACrExD,EAAaqI,EACbC,EAAariD,EAAEu9C,QAGjB4E,EAAQjQ,EAAKrK,SACbpc,EAAOymB,EAAKtK,QACZviB,EAAQ6sB,EAAK7sB,MACb6sB,EAAKrK,SAAWwa,EAChBnQ,EAAKtK,QAAU,EACfsK,EAAK7sB,MAAQ00B,EACbkE,GAAYj+C,GACLA,EAAE+9C,WAAa7C,GAAW,CAC/BjhC,EAAMja,EAAE48C,SACRl9C,EAAIM,EAAE+9C,WAAa7C,EAAY,GAC/B,GAEEl7C,EAAEu+C,OAAUv+C,EAAEu+C,OAASv+C,EAAEw+C,WAAcx+C,EAAEoV,OAAO6E,EAAMihC,EAAY,IAAMl7C,EAAEy+C,UAE1Ez+C,EAAEiuC,KAAKh0B,EAAMja,EAAE09C,QAAU19C,EAAEs+C,KAAKt+C,EAAEu+C,OAElCv+C,EAAEs+C,KAAKt+C,EAAEu+C,OAAStkC,EAClBA,YACSva,GACXM,EAAE48C,SAAW3iC,EACbja,EAAE+9C,UAAY7C,EAAY,EAC1B+C,GAAYj+C,GAYd,OAVAA,EAAE48C,UAAY58C,EAAE+9C,UAChB/9C,EAAE28C,YAAc38C,EAAE48C,SAClB58C,EAAE89B,OAAS99B,EAAE+9C,UACb/9C,EAAE+9C,UAAY,EACd/9C,EAAE6+C,aAAe7+C,EAAEq9C,YAAcnC,EAAY,EAC7Cl7C,EAAEo/C,gBAAkB,EACpBlN,EAAKtK,QAAUnc,EACfymB,EAAK7sB,MAAQA,EACb6sB,EAAKrK,SAAWsa,EAChBniD,EAAE6nB,KAAOA,EACF+gB,GAYTnrC,EAAQ6kD,YAAc,sC,6BCjzDtB,IAAI3b,EAAQ,EAAQ,IAShB+C,EAAwB,EAIxBE,EAAwB,EACxBC,EAAwB,EAExBC,EAAwB,EAK5B,SAASsS,EAAKljC,GAA6B,IAAtB,IAAI5B,EAAM4B,EAAI3K,SAAiB+I,GAAO,GAAK4B,EAAI5B,GAAO,EAI3E,IAAIirC,EAAe,EACfC,EAAe,EACfC,EAAe,EAYfC,EAAgB,GAGhB7H,EAAgB,IAGhBD,EAAgBC,EAAW,EAAI6H,EAG/B5H,EAAgB,GAGhBC,EAAgB,GAGhBC,EAAgB,EAAIJ,EAAU,EAG9BK,EAAgB,GAGhB0H,EAAgB,GAQhBC,EAAc,EAGdC,EAAc,IAGdC,EAAc,GAGdC,EAAc,GAGdC,EAAc,GAIdC,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAEvDC,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAEhEC,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAEnCC,EACF,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAgB3CC,EAAgB,IAAI99C,MAAsB,GAAfq1C,EAAU,IACzCwB,EAAKiH,GAOL,IAAIC,EAAgB,IAAI/9C,MAAgB,EAAVu1C,GAC9BsB,EAAKkH,GAKL,IAAIC,EAAgB,IAAIh+C,MAjBJ,KAkBpB62C,EAAKmH,GAML,IAAIC,EAAgB,IAAIj+C,MAAM41C,KAC9BiB,EAAKoH,GAGL,IAAIC,EAAgB,IAAIl+C,MAAMm9C,GAC9BtG,EAAKqH,GAGL,IAkBIC,EACAC,EACAC,EApBAC,EAAgB,IAAIt+C,MAAMu1C,GAK9B,SAASgJ,EAAeC,EAAaC,EAAYC,EAAYC,EAAOC,GAElEn/C,KAAK++C,YAAeA,EACpB/+C,KAAKg/C,WAAeA,EACpBh/C,KAAKi/C,WAAeA,EACpBj/C,KAAKk/C,MAAeA,EACpBl/C,KAAKm/C,WAAeA,EAGpBn/C,KAAKo/C,UAAeL,GAAeA,EAAYx1C,OASjD,SAAS81C,EAASC,EAAUC,GAC1Bv/C,KAAKs/C,SAAWA,EAChBt/C,KAAKw/C,SAAW,EAChBx/C,KAAKu/C,UAAYA,EAKnB,SAASE,EAAOC,GACd,OAAOA,EAAO,IAAMnB,EAAWmB,GAAQnB,EAAW,KAAOmB,IAAS,IAQpE,SAASC,EAAU3kD,EAAG4kD,GAGpB5kD,EAAEu8C,YAAYv8C,EAAEs8C,WAAmB,IAAN,EAC7Bt8C,EAAEu8C,YAAYv8C,EAAEs8C,WAAcsI,IAAM,EAAK,IAQ3C,SAASC,EAAU7kD,EAAGd,EAAOqP,GACvBvO,EAAEkhD,SAAYyB,EAAWp0C,GAC3BvO,EAAEihD,QAAW/hD,GAASc,EAAEkhD,SAAY,MACpCyD,EAAU3kD,EAAGA,EAAEihD,QACfjhD,EAAEihD,OAAS/hD,GAAUyjD,EAAW3iD,EAAEkhD,SAClClhD,EAAEkhD,UAAY3yC,EAASo0C,IAEvB3iD,EAAEihD,QAAW/hD,GAASc,EAAEkhD,SAAY,MACpClhD,EAAEkhD,UAAY3yC,GAKlB,SAASu2C,EAAU9kD,EAAG1B,EAAG6V,GACvB0wC,EAAU7kD,EAAGmU,EAAS,EAAJ7V,GAAiB6V,EAAS,EAAJ7V,EAAQ,IASlD,SAASymD,EAAWlgD,EAAMyS,GACxB,IAAIvN,EAAM,EACV,GACEA,GAAc,EAAPlF,EACPA,KAAU,EACVkF,IAAQ,UACCuN,EAAM,GACjB,OAAOvN,IAAQ,EAgIjB,SAASi7C,EAAU7wC,EAAMqwC,EAAUhE,GAKjC,IAEIljB,EACA59B,EAHAulD,EAAY,IAAI1/C,MAAM01C,EAAW,GACjCp2C,EAAO,EAOX,IAAKy4B,EAAO,EAAGA,GAAQ2d,EAAU3d,IAC/B2nB,EAAU3nB,GAAQz4B,EAAQA,EAAO27C,EAASljB,EAAO,IAAO,EAS1D,IAAK59B,EAAI,EAAIA,GAAK8kD,EAAU9kD,IAAK,CAC/B,IAAI4X,EAAMnD,EAAS,EAAJzU,EAAQ,GACX,IAAR4X,IAEJnD,EAAS,EAAJzU,GAAkBqlD,EAAWE,EAAU3tC,KAAQA,KAmHxD,SAAS4tC,EAAWllD,GAClB,IAAIN,EAGJ,IAAKA,EAAI,EAAGA,EAAIk7C,EAAUl7C,IAAOM,EAAEkgD,UAAc,EAAJxgD,GAAkB,EAC/D,IAAKA,EAAI,EAAGA,EAAIo7C,EAAUp7C,IAAOM,EAAEmgD,UAAc,EAAJzgD,GAAkB,EAC/D,IAAKA,EAAI,EAAGA,EAAIq7C,EAAUr7C,IAAOM,EAAEogD,QAAY,EAAJ1gD,GAAkB,EAE7DM,EAAEkgD,UAAsB,EAAZ2C,GAA0B,EACtC7iD,EAAE+gD,QAAU/gD,EAAEghD,WAAa,EAC3BhhD,EAAEg/C,SAAWh/C,EAAEu/B,QAAU,EAO3B,SAAS4lB,EAAUnlD,GAEbA,EAAEkhD,SAAW,EACfyD,EAAU3kD,EAAGA,EAAEihD,QACNjhD,EAAEkhD,SAAW,IAEtBlhD,EAAEu8C,YAAYv8C,EAAEs8C,WAAat8C,EAAEihD,QAEjCjhD,EAAEihD,OAAS,EACXjhD,EAAEkhD,SAAW,EA8Bf,SAASkE,EAAQjxC,EAAMzU,EAAGrB,EAAGwR,GAC3B,IAAIw1C,EAAU,EAAJ3lD,EACN4lD,EAAU,EAAJjnD,EACV,OAAQ8V,EAAKkxC,GAAgBlxC,EAAKmxC,IAC1BnxC,EAAKkxC,KAAkBlxC,EAAKmxC,IAAiBz1C,EAAMnQ,IAAMmQ,EAAMxR,GASzE,SAASknD,EAAWvlD,EAAGmU,EAAMsyB,GAO3B,IAFA,IAAI+e,EAAIxlD,EAAEygD,KAAKha,GACXntB,EAAImtB,GAAK,EACNntB,GAAKtZ,EAAE0gD,WAERpnC,EAAItZ,EAAE0gD,UACR0E,EAAQjxC,EAAMnU,EAAEygD,KAAKnnC,EAAI,GAAItZ,EAAEygD,KAAKnnC,GAAItZ,EAAE6P,QAC1CyJ,KAGE8rC,EAAQjxC,EAAMqxC,EAAGxlD,EAAEygD,KAAKnnC,GAAItZ,EAAE6P,SAGlC7P,EAAEygD,KAAKha,GAAKzmC,EAAEygD,KAAKnnC,GACnBmtB,EAAIntB,EAGJA,IAAM,EAERtZ,EAAEygD,KAAKha,GAAK+e,EAUd,SAASC,EAAezlD,EAAG0lD,EAAOC,GAKhC,IAAIjB,EACAkB,EAEA/gD,EACA+8C,EAFAiE,EAAK,EAIT,GAAmB,IAAf7lD,EAAEg/C,SACJ,GACE0F,EAAQ1kD,EAAEu8C,YAAYv8C,EAAE8gD,MAAa,EAAL+E,IAAW,EAAM7lD,EAAEu8C,YAAYv8C,EAAE8gD,MAAa,EAAL+E,EAAS,GAClFD,EAAK5lD,EAAEu8C,YAAYv8C,EAAE4gD,MAAQiF,GAC7BA,IAEa,IAATnB,EACFI,EAAU9kD,EAAG4lD,EAAIF,IAKjBZ,EAAU9kD,GADV6E,EAAO2+C,EAAaoC,IACA/K,EAAW,EAAG6K,GAEpB,KADd9D,EAAQqB,EAAYp+C,KAGlBggD,EAAU7kD,EADV4lD,GAAMnC,EAAY5+C,GACD+8C,GAMnBkD,EAAU9kD,EAHV6E,EAAO4/C,IADPC,GAImBiB,GAEL,KADd/D,EAAQsB,EAAYr+C,KAGlBggD,EAAU7kD,EADV0kD,GAAQb,EAAUh/C,GACC+8C,UAQhBiE,EAAK7lD,EAAEg/C,UAGlB8F,EAAU9kD,EAAG6iD,EAAW6C,GAY1B,SAASI,EAAW9lD,EAAG+lD,GAIrB,IAIIrmD,EAAGrB,EAEH2nD,EANA7xC,EAAW4xC,EAAKzB,SAChB2B,EAAWF,EAAKxB,UAAUR,YAC1BK,EAAY2B,EAAKxB,UAAUH,UAC3BF,EAAW6B,EAAKxB,UAAUL,MAE1BM,GAAY,EAUhB,IAHAxkD,EAAE0gD,SAAW,EACb1gD,EAAE2gD,SAAW3F,EAERt7C,EAAI,EAAGA,EAAIwkD,EAAOxkD,IACQ,IAAzByU,EAAS,EAAJzU,IACPM,EAAEygD,OAAOzgD,EAAE0gD,UAAY8D,EAAW9kD,EAClCM,EAAE6P,MAAMnQ,GAAK,GAGbyU,EAAS,EAAJzU,EAAQ,GAAa,EAS9B,KAAOM,EAAE0gD,SAAW,GAElBvsC,EAAY,GADZ6xC,EAAOhmD,EAAEygD,OAAOzgD,EAAE0gD,UAAa8D,EAAW,IAAMA,EAAW,IACjC,EAC1BxkD,EAAE6P,MAAMm2C,GAAQ,EAChBhmD,EAAE+gD,UAEEqD,IACFpkD,EAAEghD,YAAciF,EAAa,EAAPD,EAAW,IASrC,IALAD,EAAKvB,SAAWA,EAKX9kD,EAAKM,EAAE0gD,UAAY,EAAchhD,GAAK,EAAGA,IAAO6lD,EAAWvlD,EAAGmU,EAAMzU,GAKzEsmD,EAAO9B,EACP,GAGExkD,EAAIM,EAAEygD,KAAK,GACXzgD,EAAEygD,KAAK,GAAiBzgD,EAAEygD,KAAKzgD,EAAE0gD,YACjC6E,EAAWvlD,EAAGmU,EAAM,GAGpB9V,EAAI2B,EAAEygD,KAAK,GAEXzgD,EAAEygD,OAAOzgD,EAAE2gD,UAAYjhD,EACvBM,EAAEygD,OAAOzgD,EAAE2gD,UAAYtiD,EAGvB8V,EAAY,EAAP6xC,GAAqB7xC,EAAS,EAAJzU,GAAkByU,EAAS,EAAJ9V,GACtD2B,EAAE6P,MAAMm2C,IAAShmD,EAAE6P,MAAMnQ,IAAMM,EAAE6P,MAAMxR,GAAK2B,EAAE6P,MAAMnQ,GAAKM,EAAE6P,MAAMxR,IAAM,EACvE8V,EAAS,EAAJzU,EAAQ,GAAayU,EAAS,EAAJ9V,EAAQ,GAAa2nD,EAGpDhmD,EAAEygD,KAAK,GAAiBuF,IACxBT,EAAWvlD,EAAGmU,EAAM,SAEbnU,EAAE0gD,UAAY,GAEvB1gD,EAAEygD,OAAOzgD,EAAE2gD,UAAY3gD,EAAEygD,KAAK,GAjehC,SAAoBzgD,EAAG+lD,GAIrB,IAOIjyC,EACApU,EAAGrB,EACHi/B,EACA4oB,EACA/7C,EAXAgK,EAAkB4xC,EAAKzB,SACvBE,EAAkBuB,EAAKvB,SACvByB,EAAkBF,EAAKxB,UAAUR,YACjCK,EAAkB2B,EAAKxB,UAAUH,UACjCxC,EAAkBmE,EAAKxB,UAAUP,WACjCtyB,EAAkBq0B,EAAKxB,UAAUN,WACjCE,EAAkB4B,EAAKxB,UAAUJ,WAMjCgC,EAAW,EAEf,IAAK7oB,EAAO,EAAGA,GAAQ2d,EAAU3d,IAC/Bt9B,EAAEwgD,SAASljB,GAAQ,EAQrB,IAFAnpB,EAA0B,EAArBnU,EAAEygD,KAAKzgD,EAAE2gD,UAAgB,GAAa,EAEtC7sC,EAAI9T,EAAE2gD,SAAW,EAAG7sC,EAAIknC,EAAWlnC,KAEtCwpB,EAAOnpB,EAA+B,EAA1BA,EAAS,GADrBzU,EAAIM,EAAEygD,KAAK3sC,IACc,GAAiB,GAAa,GAC5CqwC,IACT7mB,EAAO6mB,EACPgC,KAEFhyC,EAAS,EAAJzU,EAAQ,GAAa49B,EAGtB59B,EAAI8kD,IAERxkD,EAAEwgD,SAASljB,KACX4oB,EAAQ,EACJxmD,GAAKgyB,IACPw0B,EAAQtE,EAAMliD,EAAIgyB,IAEpBvnB,EAAIgK,EAAS,EAAJzU,GACTM,EAAE+gD,SAAW52C,GAAKmzB,EAAO4oB,GACrB9B,IACFpkD,EAAEghD,YAAc72C,GAAK87C,EAAU,EAAJvmD,EAAQ,GAAawmD,KAGpD,GAAiB,IAAbC,EAAJ,CAMA,EAAG,CAED,IADA7oB,EAAO6mB,EAAa,EACQ,IAArBnkD,EAAEwgD,SAASljB,IAAeA,IACjCt9B,EAAEwgD,SAASljB,KACXt9B,EAAEwgD,SAASljB,EAAO,IAAM,EACxBt9B,EAAEwgD,SAAS2D,KAIXgC,GAAY,QACLA,EAAW,GAOpB,IAAK7oB,EAAO6mB,EAAqB,IAAT7mB,EAAYA,IAElC,IADA59B,EAAIM,EAAEwgD,SAASljB,GACF,IAAN59B,IACLrB,EAAI2B,EAAEygD,OAAO3sC,IACL0wC,IACJrwC,EAAS,EAAJ9V,EAAQ,KAAei/B,IAE9Bt9B,EAAE+gD,UAAYzjB,EAAOnpB,EAAS,EAAJ9V,EAAQ,IAAc8V,EAAS,EAAJ9V,GACrD8V,EAAS,EAAJ9V,EAAQ,GAAai/B,GAE5B59B,MAmZJ0mD,CAAWpmD,EAAG+lD,GAGdf,EAAU7wC,EAAMqwC,EAAUxkD,EAAEwgD,UAQ9B,SAAS6F,EAAUrmD,EAAGmU,EAAMqwC,GAK1B,IAAI9kD,EAEA4mD,EADAC,GAAW,EAGXC,EAAUryC,EAAK,GAEfgc,EAAQ,EACRs2B,EAAY,EACZC,EAAY,EAQhB,IANgB,IAAZF,IACFC,EAAY,IACZC,EAAY,GAEdvyC,EAAsB,GAAhBqwC,EAAW,GAAS,GAAa,MAElC9kD,EAAI,EAAGA,GAAK8kD,EAAU9kD,IACzB4mD,EAASE,EACTA,EAAUryC,EAAe,GAATzU,EAAI,GAAS,KAEvBywB,EAAQs2B,GAAaH,IAAWE,IAG3Br2B,EAAQu2B,EACjB1mD,EAAEogD,QAAiB,EAATkG,IAAwBn2B,EAEd,IAAXm2B,GAELA,IAAWC,GAAWvmD,EAAEogD,QAAiB,EAATkG,KACpCtmD,EAAEogD,QAAkB,EAAV0C,MAED3yB,GAAS,GAClBnwB,EAAEogD,QAAoB,EAAZ2C,KAGV/iD,EAAEogD,QAAsB,EAAd4C,KAGZ7yB,EAAQ,EACRo2B,EAAUD,EAEM,IAAZE,GACFC,EAAY,IACZC,EAAY,GAEHJ,IAAWE,GACpBC,EAAY,EACZC,EAAY,IAGZD,EAAY,EACZC,EAAY,IAUlB,SAASC,EAAU3mD,EAAGmU,EAAMqwC,GAK1B,IAAI9kD,EAEA4mD,EADAC,GAAW,EAGXC,EAAUryC,EAAK,GAEfgc,EAAQ,EACRs2B,EAAY,EACZC,EAAY,EAQhB,IALgB,IAAZF,IACFC,EAAY,IACZC,EAAY,GAGThnD,EAAI,EAAGA,GAAK8kD,EAAU9kD,IAIzB,GAHA4mD,EAASE,EACTA,EAAUryC,EAAe,GAATzU,EAAI,GAAS,OAEvBywB,EAAQs2B,GAAaH,IAAWE,GAAtC,CAGO,GAAIr2B,EAAQu2B,EACjB,GAAK5B,EAAU9kD,EAAGsmD,EAAQtmD,EAAEogD,eAA+B,KAAVjwB,QAE7B,IAAXm2B,GACLA,IAAWC,IACbzB,EAAU9kD,EAAGsmD,EAAQtmD,EAAEogD,SACvBjwB,KAGF20B,EAAU9kD,EAAG8iD,EAAS9iD,EAAEogD,SACxByE,EAAU7kD,EAAGmwB,EAAQ,EAAG,IAEfA,GAAS,IAClB20B,EAAU9kD,EAAG+iD,EAAW/iD,EAAEogD,SAC1ByE,EAAU7kD,EAAGmwB,EAAQ,EAAG,KAGxB20B,EAAU9kD,EAAGgjD,EAAahjD,EAAEogD,SAC5ByE,EAAU7kD,EAAGmwB,EAAQ,GAAI,IAG3BA,EAAQ,EACRo2B,EAAUD,EACM,IAAZE,GACFC,EAAY,IACZC,EAAY,GAEHJ,IAAWE,GACpBC,EAAY,EACZC,EAAY,IAGZD,EAAY,EACZC,EAAY,IAhuBlBtK,EAAKyH,GAu1BL,IAAI+C,IAAmB,EA4BvB,SAAS1E,GAAiBliD,EAAGkZ,EAAK2tC,EAAY7+B,GAM5C68B,EAAU7kD,GAAIuiD,GAAgB,IAAMv6B,EAAO,EAAI,GAAI,GAzfrD,SAAoBhoB,EAAGkZ,EAAK5B,EAAK2mB,GAM/BknB,EAAUnlD,GAENi+B,IACF0mB,EAAU3kD,EAAGsX,GACbqtC,EAAU3kD,GAAIsX,IAKhBqvB,EAAMje,SAAS1oB,EAAEu8C,YAAav8C,EAAEoV,OAAQ8D,EAAK5B,EAAKtX,EAAEs8C,SACpDt8C,EAAEs8C,SAAWhlC,EA0ebwvC,CAAW9mD,EAAGkZ,EAAK2tC,GAAY,GAoKjCppD,EAAQ2jD,SAlMR,SAAkBphD,GAGX4mD,MAxmBP,WACE,IAAIlnD,EACA49B,EACA/uB,EACA1J,EACA6/C,EACAlE,EAAW,IAAIj7C,MAAM01C,EAAW,GAiBpC,IADA1sC,EAAS,EACJ1J,EAAO,EAAGA,EAAO69C,EAAe,EAAG79C,IAEtC,IADA4+C,EAAY5+C,GAAQ0J,EACf7O,EAAI,EAAGA,EAAK,GAAKujD,EAAYp+C,GAAQnF,IACxC8jD,EAAaj1C,KAAY1J,EAY7B,IAJA2+C,EAAaj1C,EAAS,GAAK1J,EAG3B6/C,EAAO,EACF7/C,EAAO,EAAGA,EAAO,GAAIA,IAExB,IADAg/C,EAAUh/C,GAAQ6/C,EACbhlD,EAAI,EAAGA,EAAK,GAAKwjD,EAAYr+C,GAAQnF,IACxC6jD,EAAWmB,KAAU7/C,EAKzB,IADA6/C,IAAS,EACF7/C,EAAOi2C,EAASj2C,IAErB,IADAg/C,EAAUh/C,GAAQ6/C,GAAQ,EACrBhlD,EAAI,EAAGA,EAAK,GAAMwjD,EAAYr+C,GAAQ,EAAKnF,IAC9C6jD,EAAW,IAAMmB,KAAU7/C,EAM/B,IAAKy4B,EAAO,EAAGA,GAAQ2d,EAAU3d,IAC/BkjB,EAASljB,GAAQ,EAInB,IADA59B,EAAI,EACGA,GAAK,KACV2jD,EAAiB,EAAJ3jD,EAAQ,GAAa,EAClCA,IACA8gD,EAAS,KAEX,KAAO9gD,GAAK,KACV2jD,EAAiB,EAAJ3jD,EAAQ,GAAa,EAClCA,IACA8gD,EAAS,KAEX,KAAO9gD,GAAK,KACV2jD,EAAiB,EAAJ3jD,EAAQ,GAAa,EAClCA,IACA8gD,EAAS,KAEX,KAAO9gD,GAAK,KACV2jD,EAAiB,EAAJ3jD,EAAQ,GAAa,EAClCA,IACA8gD,EAAS,KASX,IAHAwE,EAAU3B,EAAczI,EAAU,EAAG4F,GAGhC9gD,EAAI,EAAGA,EAAIo7C,EAASp7C,IACvB4jD,EAAiB,EAAJ5jD,EAAQ,GAAa,EAClC4jD,EAAiB,EAAJ5jD,GAAkBqlD,EAAWrlD,EAAG,GAI/CgkD,EAAgB,IAAII,EAAeT,EAAcJ,EAAapI,EAAW,EAAGD,EAASK,GACrF0I,EAAgB,IAAIG,EAAeR,EAAcJ,EAAa,EAAYpI,EAASG,GACnF2I,EAAiB,IAAIE,EAAe,IAAIv+C,MAAM,GAAI49C,EAAc,EAAWpI,EAAU6H,GA0gBnFmE,GACAH,IAAmB,GAGrB5mD,EAAEqgD,OAAU,IAAIgE,EAASrkD,EAAEkgD,UAAWwD,GACtC1jD,EAAEsgD,OAAU,IAAI+D,EAASrkD,EAAEmgD,UAAWwD,GACtC3jD,EAAEugD,QAAU,IAAI8D,EAASrkD,EAAEogD,QAASwD,GAEpC5jD,EAAEihD,OAAS,EACXjhD,EAAEkhD,SAAW,EAGbgE,EAAWllD,IAmLbvC,EAAQykD,iBAAmBA,GAC3BzkD,EAAQi/C,gBAnJR,SAAyB18C,EAAGkZ,EAAK2tC,EAAY7+B,GAM3C,IAAIg/B,EAAUC,EACVC,EAAc,EAGdlnD,EAAEs5C,MAAQ,GAGRt5C,EAAEkyC,KAAK9J,YAAc0B,IACvB9pC,EAAEkyC,KAAK9J,UArGb,SAA0BpoC,GAKxB,IACIN,EADAynD,EAAa,WAIjB,IAAKznD,EAAI,EAAGA,GAAK,GAAIA,IAAKynD,KAAgB,EACxC,GAAkB,EAAbA,GAAoD,IAAhCnnD,EAAEkgD,UAAc,EAAJxgD,GACnC,OAAOkqC,EAKX,GAAoC,IAAhC5pC,EAAEkgD,UAAU,KAA0D,IAAjClgD,EAAEkgD,UAAU,KAChB,IAAjClgD,EAAEkgD,UAAU,IACd,OAAOrW,EAET,IAAKnqC,EAAI,GAAIA,EAAIm7C,EAAUn7C,IACzB,GAAoC,IAAhCM,EAAEkgD,UAAc,EAAJxgD,GACd,OAAOmqC,EAOX,OAAOD,EAwEgBwd,CAAiBpnD,IAItC8lD,EAAW9lD,EAAGA,EAAEqgD,QAIhByF,EAAW9lD,EAAGA,EAAEsgD,QAUhB4G,EAnMJ,SAAuBlnD,GACrB,IAAIknD,EAgBJ,IAbAb,EAAUrmD,EAAGA,EAAEkgD,UAAWlgD,EAAEqgD,OAAOmE,UACnC6B,EAAUrmD,EAAGA,EAAEmgD,UAAWngD,EAAEsgD,OAAOkE,UAGnCsB,EAAW9lD,EAAGA,EAAEugD,SASX2G,EAAcnM,EAAW,EAAGmM,GAAe,GACW,IAArDlnD,EAAEogD,QAAgC,EAAxBgD,EAAS8D,GAAmB,GADOA,KAUnD,OAJAlnD,EAAE+gD,SAAW,GAAKmG,EAAc,GAAK,EAAI,EAAI,EAItCA,EAwKSG,CAAcrnD,GAG5BgnD,EAAYhnD,EAAE+gD,QAAU,EAAI,IAAO,GACnCkG,EAAejnD,EAAEghD,WAAa,EAAI,IAAO,IAMtBgG,IAAYA,EAAWC,IAI1CD,EAAWC,EAAcJ,EAAa,EAGnCA,EAAa,GAAKG,IAAuB,IAAT9tC,EASnCgpC,GAAiBliD,EAAGkZ,EAAK2tC,EAAY7+B,GAE5BhoB,EAAE05C,WAAahQ,GAAWud,IAAgBD,GAEnDnC,EAAU7kD,GAAIwiD,GAAgB,IAAMx6B,EAAO,EAAI,GAAI,GACnDy9B,EAAezlD,EAAGqjD,EAAcC,KAGhCuB,EAAU7kD,GAAIyiD,GAAa,IAAMz6B,EAAO,EAAI,GAAI,GAjMpD,SAAwBhoB,EAAGsnD,EAAQC,EAAQC,GAIzC,IAAIrL,EASJ,IAHA0I,EAAU7kD,EAAGsnD,EAAS,IAAK,GAC3BzC,EAAU7kD,EAAGunD,EAAS,EAAK,GAC3B1C,EAAU7kD,EAAGwnD,EAAU,EAAI,GACtBrL,EAAO,EAAGA,EAAOqL,EAASrL,IAE7B0I,EAAU7kD,EAAGA,EAAEogD,QAAyB,EAAjBgD,EAASjH,GAAY,GAAY,GAI1DwK,EAAU3mD,EAAGA,EAAEkgD,UAAWoH,EAAS,GAGnCX,EAAU3mD,EAAGA,EAAEmgD,UAAWoH,EAAS,GA4KjCE,CAAeznD,EAAGA,EAAEqgD,OAAOmE,SAAW,EAAGxkD,EAAEsgD,OAAOkE,SAAW,EAAG0C,EAAc,GAC9EzB,EAAezlD,EAAGA,EAAEkgD,UAAWlgD,EAAEmgD,YAMnC+E,EAAWllD,GAEPgoB,GACFm9B,EAAUnlD,IAuEdvC,EAAQqhD,UA7DR,SAAmB9+C,EAAG0kD,EAAMkB,GAmD1B,OA5CA5lD,EAAEu8C,YAAYv8C,EAAE8gD,MAAqB,EAAb9gD,EAAEg/C,UAAqB0F,IAAS,EAAK,IAC7D1kD,EAAEu8C,YAAYv8C,EAAE8gD,MAAqB,EAAb9gD,EAAEg/C,SAAe,GAAY,IAAP0F,EAE9C1kD,EAAEu8C,YAAYv8C,EAAE4gD,MAAQ5gD,EAAEg/C,UAAiB,IAAL4G,EACtC5lD,EAAEg/C,WAEW,IAAT0F,EAEF1kD,EAAEkgD,UAAe,EAAL0F,MAEZ5lD,EAAEu/B,UAEFmlB,IAKA1kD,EAAEkgD,UAA8C,GAAnCsD,EAAaoC,GAAM/K,EAAW,MAC3C76C,EAAEmgD,UAAyB,EAAfsE,EAAOC,OA0Bb1kD,EAAEg/C,WAAah/C,EAAE6gD,YAAc,GAWzCpjD,EAAQwkD,UAhKR,SAAmBjiD,GACjB6kD,EAAU7kD,EAAGwiD,GAAgB,EAAG,GAChCsC,EAAU9kD,EAAG6iD,EAAWQ,GA5yB1B,SAAkBrjD,GACG,KAAfA,EAAEkhD,UACJyD,EAAU3kD,EAAGA,EAAEihD,QACfjhD,EAAEihD,OAAS,EACXjhD,EAAEkhD,SAAW,GAEJlhD,EAAEkhD,UAAY,IACvBlhD,EAAEu8C,YAAYv8C,EAAEs8C,WAAwB,IAAXt8C,EAAEihD,OAC/BjhD,EAAEihD,SAAW,EACbjhD,EAAEkhD,UAAY,GAoyBhBwG,CAAS1nD,K,6BCriCX,IAAI2nD,EAAe,EAAQ,KACvBhhB,EAAe,EAAQ,IACvBwS,EAAe,EAAQ,IACvB76C,EAAe,EAAQ,IACvB4pC,EAAe,EAAQ,IACvBkR,EAAe,EAAQ,IACvBwO,EAAe,EAAQ,KAEvB3hD,EAAWtH,OAAOkB,UAAUoG,SAiFhC,SAAS+rC,EAAQzpC,GACf,KAAMvD,gBAAgBgtC,GAAU,OAAO,IAAIA,EAAQzpC,GAEnDvD,KAAKuD,QAAUo+B,EAAM/yB,OAAO,CAC1B2lC,UAAW,MACXC,WAAY,EACZnU,GAAI,IACH98B,GAAW,IAEd,IAAIoxC,EAAM30C,KAAKuD,QAIXoxC,EAAItoB,KAAQsoB,EAAIH,YAAc,GAAOG,EAAIH,WAAa,KACxDG,EAAIH,YAAcG,EAAIH,WACC,IAAnBG,EAAIH,aAAoBG,EAAIH,YAAc,OAI3CG,EAAIH,YAAc,GAAOG,EAAIH,WAAa,KACzCjxC,GAAWA,EAAQixC,aACvBG,EAAIH,YAAc,IAKfG,EAAIH,WAAa,IAAQG,EAAIH,WAAa,IAGf,IAAR,GAAjBG,EAAIH,cACPG,EAAIH,YAAc,IAItBx0C,KAAKwD,IAAS,EACdxD,KAAKkjC,IAAS,GACdljC,KAAKitC,OAAS,EACdjtC,KAAK+jB,OAAS,GAEd/jB,KAAKktC,KAAS,IAAIkH,EAClBp0C,KAAKktC,KAAKlK,UAAY,EAEtB,IAAInM,EAAU8rB,EAAaE,aACzB7iD,KAAKktC,KACLyH,EAAIH,YAGN,GAAI3d,IAAWv9B,EAAEsqC,KACf,MAAM,IAAIjkC,MAAMujC,EAAIrM,IAQtB,GALA72B,KAAKi5B,OAAS,IAAI2pB,EAElBD,EAAaG,iBAAiB9iD,KAAKktC,KAAMltC,KAAKi5B,QAG1C0b,EAAII,aAEwB,iBAAnBJ,EAAII,WACbJ,EAAII,WAAaZ,EAAQjS,WAAWyS,EAAII,YACG,yBAAlC9zC,EAAS7H,KAAKu7C,EAAII,cAC3BJ,EAAII,WAAa,IAAIzjC,WAAWqjC,EAAII,aAElCJ,EAAItoB,MACNwK,EAAS8rB,EAAaI,qBAAqB/iD,KAAKktC,KAAMyH,EAAII,eAC3Cz7C,EAAEsqC,MACf,MAAM,IAAIjkC,MAAMujC,EAAIrM,IAgO5B,SAAS9qB,EAAQsU,EAAO9c,GACtB,IAAIwpC,EAAW,IAAIC,EAAQzpC,GAK3B,GAHAwpC,EAAStiC,KAAK4V,GAAO,GAGjB0sB,EAASvpC,IAAO,MAAMupC,EAAS7J,KAAOA,EAAI6J,EAASvpC,KAEvD,OAAOupC,EAAS3sC,OAtMlB4sC,EAAQnyC,UAAU4P,KAAO,SAAU3K,EAAM1F,GACvC,IAGIy8B,EAAQlR,EACRq9B,EAAe1U,EAAM2U,EAJrB/V,EAAOltC,KAAKktC,KACZqH,EAAYv0C,KAAKuD,QAAQgxC,UACzBQ,EAAa/0C,KAAKuD,QAAQwxC,WAM1BmO,GAAgB,EAEpB,GAAIljD,KAAKitC,MAAS,OAAO,EACzBtnB,EAASvrB,MAAWA,EAAQA,GAAkB,IAATA,EAAiBd,EAAEmqC,SAAWnqC,EAAE+pC,WAGjD,iBAATvjC,EAETotC,EAAK7sB,MAAQ8zB,EAAQ5R,cAAcziC,GACF,yBAAxBmB,EAAS7H,KAAK0G,GACvBotC,EAAK7sB,MAAQ,IAAI/O,WAAWxR,GAE5BotC,EAAK7sB,MAAQvgB,EAGfotC,EAAKtK,QAAU,EACfsK,EAAKrK,SAAWqK,EAAK7sB,MAAM9W,OAE3B,EAAG,CAkBD,GAjBuB,IAAnB2jC,EAAKlK,YACPkK,EAAKrV,OAAS,IAAI8J,EAAMvd,KAAKmwB,GAC7BrH,EAAKnK,SAAW,EAChBmK,EAAKlK,UAAYuR,IAGnB1d,EAAS8rB,EAAa52C,QAAQmhC,EAAM5zC,EAAE+pC,eAEvB/pC,EAAEwqC,aAAeiR,IAC9Ble,EAAS8rB,EAAaI,qBAAqB/iD,KAAKktC,KAAM6H,IAGpDle,IAAWv9B,EAAE4qC,cAAiC,IAAlBgf,IAC9BrsB,EAASv9B,EAAEsqC,KACXsf,GAAgB,GAGdrsB,IAAWv9B,EAAEuqC,cAAgBhN,IAAWv9B,EAAEsqC,KAG5C,OAFA5jC,KAAKo1C,MAAMve,GACX72B,KAAKitC,OAAQ,GACN,EAGLC,EAAKnK,WACgB,IAAnBmK,EAAKlK,WAAmBnM,IAAWv9B,EAAEuqC,eAAmC,IAAlBqJ,EAAKrK,UAAmBld,IAAUrsB,EAAEmqC,UAAY9d,IAAUrsB,EAAEiqC,gBAE5F,WAApBvjC,KAAKuD,QAAQ88B,IAEf2iB,EAAgB7O,EAAQxR,WAAWuK,EAAKrV,OAAQqV,EAAKnK,UAErDuL,EAAOpB,EAAKnK,SAAWigB,EACvBC,EAAU9O,EAAQ3R,WAAW0K,EAAKrV,OAAQmrB,GAG1C9V,EAAKnK,SAAWuL,EAChBpB,EAAKlK,UAAYuR,EAAYjG,EACzBA,GAAQ3M,EAAMje,SAASwpB,EAAKrV,OAAQqV,EAAKrV,OAAQmrB,EAAe1U,EAAM,GAE1EtuC,KAAK0sC,OAAOuW,IAGZjjD,KAAK0sC,OAAO/K,EAAMne,UAAU0pB,EAAKrV,OAAQqV,EAAKnK,aAY9B,IAAlBmK,EAAKrK,UAAqC,IAAnBqK,EAAKlK,YAC9BkgB,GAAgB,UAGVhW,EAAKrK,SAAW,GAAwB,IAAnBqK,EAAKlK,YAAoBnM,IAAWv9B,EAAEuqC,cAOrE,OALIhN,IAAWv9B,EAAEuqC,eACfle,EAAQrsB,EAAEmqC,UAIR9d,IAAUrsB,EAAEmqC,UACd5M,EAAS8rB,EAAaQ,WAAWnjD,KAAKktC,MACtCltC,KAAKo1C,MAAMve,GACX72B,KAAKitC,OAAQ,EACNpW,IAAWv9B,EAAEsqC,MAIlBje,IAAUrsB,EAAEiqC,eACdvjC,KAAKo1C,MAAM97C,EAAEsqC,MACbsJ,EAAKlK,UAAY,GACV,IAgBXgK,EAAQnyC,UAAU6xC,OAAS,SAAU1oB,GACnChkB,KAAK+jB,OAAOtZ,KAAKuZ,IAcnBgpB,EAAQnyC,UAAUu6C,MAAQ,SAAUve,GAE9BA,IAAWv9B,EAAEsqC,OACS,WAApB5jC,KAAKuD,QAAQ88B,GAGfrgC,KAAKI,OAASJ,KAAK+jB,OAAOtjB,KAAK,IAE/BT,KAAKI,OAASuhC,EAAM7d,cAAc9jB,KAAK+jB,SAG3C/jB,KAAK+jB,OAAS,GACd/jB,KAAKwD,IAAMqzB,EACX72B,KAAKkjC,IAAMljC,KAAKktC,KAAKhK,KAgFvBzqC,EAAQu0C,QAAUA,EAClBv0C,EAAQsT,QAAUA,EAClBtT,EAAQ2qD,WAnBR,SAAoB/iC,EAAO9c,GAGzB,OAFAA,EAAUA,GAAW,IACb8oB,KAAM,EACPtgB,EAAQsU,EAAO9c,IAiBxB9K,EAAQ4qD,OAAUt3C,G,6BCjZlB,IAAI41B,EAAgB,EAAQ,IACxB6T,EAAgB,EAAQ,IACxBtqB,EAAgB,EAAQ,IACxBo4B,EAAgB,EAAQ,KACxBC,EAAgB,EAAQ,KAExBC,EAAQ,EACRC,EAAO,EACPC,EAAQ,EAWRjgB,EAAkB,EAClBC,EAAkB,EAClBC,EAAkB,EAMlBC,EAAkB,EAClBC,EAAkB,EAClBC,EAAkB,EAElBE,GAAmB,EACnBC,GAAmB,EACnB0f,GAAmB,EACnBzf,GAAmB,EAInBa,EAAc,EAOX6e,EAAO,EACPC,EAAQ,EACRC,EAAO,EACPC,EAAK,EACLC,EAAQ,EACRC,EAAQ,EACRC,EAAO,EACPC,EAAU,EACVC,EAAO,EACPC,EAAS,GACTC,EAAO,GACHC,EAAO,GACPC,EAAS,GACTC,EAAS,GACTC,EAAQ,GACRC,EAAO,GACPC,EAAQ,GACRC,EAAU,GACVC,EAAW,GACPC,EAAO,GACPC,EAAM,GACNC,EAAS,GACTC,EAAO,GACPC,EAAU,GACVC,EAAQ,GACRC,EAAM,GACdC,EAAQ,GACRC,EAAS,GACTC,EAAO,GACPC,EAAM,GACNC,EAAM,GACNC,EAAO,GAMVC,GAAc,IACdC,GAAe,IAKfC,GAFY,GAKhB,SAASC,GAAQ/jB,GACf,OAAWA,IAAM,GAAM,MACbA,IAAM,EAAK,SACP,MAAJA,IAAe,KACX,IAAJA,IAAa,IAIzB,SAASgkB,KACPhmD,KAAK5F,KAAO,EACZ4F,KAAKgjB,MAAO,EACZhjB,KAAK6iB,KAAO,EACZ7iB,KAAKimD,UAAW,EAChBjmD,KAAKq4B,MAAQ,EACbr4B,KAAKkmD,KAAO,EACZlmD,KAAKusC,MAAQ,EACbvsC,KAAK8qB,MAAQ,EAEb9qB,KAAKs5C,KAAO,KAGZt5C,KAAKmmD,MAAQ,EACbnmD,KAAKomD,MAAQ,EACbpmD,KAAKqmD,MAAQ,EACbrmD,KAAKsmD,MAAQ,EACbtmD,KAAKoQ,OAAS,KAGdpQ,KAAKumD,KAAO,EACZvmD,KAAKs4B,KAAO,EAGZt4B,KAAKuJ,OAAS,EACdvJ,KAAKwU,OAAS,EAGdxU,KAAK48C,MAAQ,EAGb58C,KAAKwmD,QAAU,KACfxmD,KAAKymD,SAAW,KAChBzmD,KAAK0mD,QAAU,EACf1mD,KAAK2mD,SAAW,EAGhB3mD,KAAK4mD,MAAQ,EACb5mD,KAAK6mD,KAAO,EACZ7mD,KAAK8mD,MAAQ,EACb9mD,KAAK+mD,KAAO,EACZ/mD,KAAKymB,KAAO,KAEZzmB,KAAKgnD,KAAO,IAAIrlB,EAAMtd,MAAM,KAC5BrkB,KAAKinD,KAAO,IAAItlB,EAAMtd,MAAM,KAO5BrkB,KAAKknD,OAAS,KACdlnD,KAAKmnD,QAAU,KACfnnD,KAAKonD,KAAO,EACZpnD,KAAKqnD,KAAO,EACZrnD,KAAKsnD,IAAM,EAGb,SAASC,GAAiBra,GACxB,IAAI/J,EAEJ,OAAK+J,GAASA,EAAK/J,OACnBA,EAAQ+J,EAAK/J,MACb+J,EAAKpK,SAAWoK,EAAKjK,UAAYE,EAAMrY,MAAQ,EAC/CoiB,EAAKhK,IAAM,GACPC,EAAMtgB,OACRqqB,EAAK7L,MAAqB,EAAb8B,EAAMtgB,MAErBsgB,EAAM/oC,KAAOwpD,EACbzgB,EAAMngB,KAAO,EACbmgB,EAAM8iB,SAAW,EACjB9iB,EAAM+iB,KAAO,MACb/iB,EAAMmW,KAAO,KACbnW,EAAMojB,KAAO,EACbpjB,EAAM7K,KAAO,EAEb6K,EAAMqjB,QAAUrjB,EAAM+jB,OAAS,IAAIvlB,EAAMrd,MAAMshC,IAC/CziB,EAAMsjB,SAAWtjB,EAAMgkB,QAAU,IAAIxlB,EAAMrd,MAAMuhC,IAEjD1iB,EAAMikB,KAAO,EACbjkB,EAAMkkB,MAAQ,EAEPzjB,GArB4BI,EAwBrC,SAASwjB,GAAata,GACpB,IAAI/J,EAEJ,OAAK+J,GAASA,EAAK/J,QACnBA,EAAQ+J,EAAK/J,OACPijB,MAAQ,EACdjjB,EAAMkjB,MAAQ,EACdljB,EAAMmjB,MAAQ,EACPiB,GAAiBra,IALWlJ,EASrC,SAASyjB,GAAcva,EAAMsH,GAC3B,IAAI3xB,EACAsgB,EAGJ,OAAK+J,GAASA,EAAK/J,OACnBA,EAAQ+J,EAAK/J,MAGTqR,EAAa,GACf3xB,EAAO,EACP2xB,GAAcA,IAGd3xB,EAA2B,GAAnB2xB,GAAc,GAClBA,EAAa,KACfA,GAAc,KAKdA,IAAeA,EAAa,GAAKA,EAAa,IACzCxQ,GAEY,OAAjBb,EAAM/yB,QAAmB+yB,EAAMgjB,QAAU3R,IAC3CrR,EAAM/yB,OAAS,MAIjB+yB,EAAMtgB,KAAOA,EACbsgB,EAAMgjB,MAAQ3R,EACPgT,GAAata,KA1BelJ,EA6BrC,SAAS6e,GAAa3V,EAAMsH,GAC1B,IAAI57B,EACAuqB,EAEJ,OAAK+J,GAGL/J,EAAQ,IAAI6iB,GAIZ9Y,EAAK/J,MAAQA,EACbA,EAAM/yB,OAAS,MACfwI,EAAM6uC,GAAcva,EAAMsH,MACd5Q,IACVsJ,EAAK/J,MAAQ,MAERvqB,GAbaorB,EA+BtB,IAEI0jB,GAAQC,GAFRC,IAAS,EAIb,SAASC,GAAY1kB,GAEnB,GAAIykB,GAAQ,CACV,IAAIE,EAOJ,IALAJ,GAAS,IAAI/lB,EAAMrd,MAAM,KACzBqjC,GAAU,IAAIhmB,EAAMrd,MAAM,IAG1BwjC,EAAM,EACCA,EAAM,KAAO3kB,EAAM6jB,KAAKc,KAAS,EACxC,KAAOA,EAAM,KAAO3kB,EAAM6jB,KAAKc,KAAS,EACxC,KAAOA,EAAM,KAAO3kB,EAAM6jB,KAAKc,KAAS,EACxC,KAAOA,EAAM,KAAO3kB,EAAM6jB,KAAKc,KAAS,EAMxC,IAJAvE,EAAcE,EAAOtgB,EAAM6jB,KAAM,EAAG,IAAKU,GAAU,EAAGvkB,EAAM8jB,KAAM,CAAE3uB,KAAM,IAG1EwvB,EAAM,EACCA,EAAM,IAAM3kB,EAAM6jB,KAAKc,KAAS,EAEvCvE,EAAcG,EAAOvgB,EAAM6jB,KAAM,EAAG,GAAMW,GAAS,EAAGxkB,EAAM8jB,KAAM,CAAE3uB,KAAM,IAG1EsvB,IAAS,EAGXzkB,EAAMqjB,QAAUkB,GAChBvkB,EAAMujB,QAAU,EAChBvjB,EAAMsjB,SAAWkB,GACjBxkB,EAAMwjB,SAAW,EAkBnB,SAASoB,GAAa7a,EAAMvwB,EAAKxJ,EAAKX,GACpC,IAAIktC,EACAvc,EAAQ+J,EAAK/J,MAqCjB,OAlCqB,OAAjBA,EAAM/yB,SACR+yB,EAAMijB,MAAQ,GAAKjjB,EAAMgjB,MACzBhjB,EAAMmjB,MAAQ,EACdnjB,EAAMkjB,MAAQ,EAEdljB,EAAM/yB,OAAS,IAAIuxB,EAAMvd,KAAK+e,EAAMijB,QAIlC5zC,GAAQ2wB,EAAMijB,OAChBzkB,EAAMje,SAASyf,EAAM/yB,OAAQuM,EAAKxJ,EAAMgwB,EAAMijB,MAAOjjB,EAAMijB,MAAO,GAClEjjB,EAAMmjB,MAAQ,EACdnjB,EAAMkjB,MAAQljB,EAAMijB,SAGpB1G,EAAOvc,EAAMijB,MAAQjjB,EAAMmjB,OAChB9zC,IACTktC,EAAOltC,GAGTmvB,EAAMje,SAASyf,EAAM/yB,OAAQuM,EAAKxJ,EAAMX,EAAMktC,EAAMvc,EAAMmjB,QAC1D9zC,GAAQktC,IAGN/d,EAAMje,SAASyf,EAAM/yB,OAAQuM,EAAKxJ,EAAMX,EAAMA,EAAM,GACpD2wB,EAAMmjB,MAAQ9zC,EACd2wB,EAAMkjB,MAAQljB,EAAMijB,QAGpBjjB,EAAMmjB,OAAS5G,EACXvc,EAAMmjB,QAAUnjB,EAAMijB,QAASjjB,EAAMmjB,MAAQ,GAC7CnjB,EAAMkjB,MAAQljB,EAAMijB,QAASjjB,EAAMkjB,OAAS3G,KAG7C,EAuoCTjnD,EAAQ+uD,aAAeA,GACvB/uD,EAAQgvD,cAAgBA,GACxBhvD,EAAQ8uD,iBAAmBA,GAC3B9uD,EAAQuvD,YApvCR,SAAqB9a,GACnB,OAAO2V,GAAa3V,EAAM4Y,KAovC5BrtD,EAAQoqD,aAAeA,GACvBpqD,EAAQsT,QAzoCR,SAAiBmhC,EAAMxH,GACrB,IAAIvC,EACA9iB,GAAOwX,GACPpR,GACAwhC,GACAlB,GAAMmB,GACN3B,GACAjuB,GACA6vB,GAAKC,GACL51C,GACA1O,GACAukD,GAEAC,GAAWC,GAASC,GAEpBC,GAAWC,GAASC,GACpBr2C,GACAsG,GAEAtT,GAEA5K,GATAkuD,GAAO,EAMPC,GAAO,IAAIlnB,EAAMvd,KAAK,GAKtB0kC,GACF,CAAE,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IAGlE,IAAK5b,IAASA,EAAK/J,QAAU+J,EAAKrV,SAC5BqV,EAAK7sB,OAA2B,IAAlB6sB,EAAKrK,SACvB,OAAOmB,GAGTb,EAAQ+J,EAAK/J,OACH/oC,OAASmqD,IAAQphB,EAAM/oC,KAAOoqD,GAIxCyD,GAAM/a,EAAKnK,SACXlL,GAASqV,EAAKrV,OACdqwB,GAAOhb,EAAKlK,UACZvc,GAAOymB,EAAKtK,QACZviB,GAAQ6sB,EAAK7sB,MACb0mC,GAAO7Z,EAAKrK,SACZ0jB,GAAOpjB,EAAMojB,KACbjuB,GAAO6K,EAAM7K,KAGb6vB,GAAMpB,GACNqB,GAAOF,GACPtvC,GAAMgrB,EAENmlB,EACA,OACE,OAAQ5lB,EAAM/oC,MACZ,KAAKwpD,EACH,GAAmB,IAAfzgB,EAAMtgB,KAAY,CACpBsgB,EAAM/oC,KAAOoqD,EACb,MAGF,KAAOlsB,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV,GAAkB,EAAb6K,EAAMtgB,MAAsB,QAAT0jC,GAAiB,CACvCpjB,EAAMoJ,MAAQ,EAEdsc,GAAK,GAAY,IAAPtC,GACVsC,GAAK,GAAMtC,KAAS,EAAK,IACzBpjB,EAAMoJ,MAAQrhB,EAAMiY,EAAMoJ,MAAOsc,GAAM,EAAG,GAI1CtC,GAAO,EACPjuB,GAAO,EAEP6K,EAAM/oC,KAAOypD,EACb,MAMF,GAJA1gB,EAAM9K,MAAQ,EACV8K,EAAMmW,OACRnW,EAAMmW,KAAK9yB,MAAO,KAED,EAAb2c,EAAMtgB,UACA,IAAP0jC,KAA2B,IAAMA,IAAQ,IAAM,GAAI,CACtDrZ,EAAKhK,IAAM,yBACXC,EAAM/oC,KAAOqrD,EACb,MAEF,IAAY,GAAPc,MAA4BxhB,EAAY,CAC3CmI,EAAKhK,IAAM,6BACXC,EAAM/oC,KAAOqrD,EACb,MAOF,GAHAntB,IAAQ,EAERhmB,GAAiC,GAAnB,IAHdi0C,MAAU,IAIU,IAAhBpjB,EAAMgjB,MACRhjB,EAAMgjB,MAAQ7zC,QAEX,GAAIA,GAAM6wB,EAAMgjB,MAAO,CAC1BjZ,EAAKhK,IAAM,sBACXC,EAAM/oC,KAAOqrD,EACb,MAEFtiB,EAAM+iB,KAAO,GAAK5zC,GAElB46B,EAAK7L,MAAQ8B,EAAMoJ,MAAQ,EAC3BpJ,EAAM/oC,KAAc,IAAPmsD,GAAelC,EAASE,EAErCgC,GAAO,EACPjuB,GAAO,EAEP,MACF,KAAKurB,EAEH,KAAOvrB,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAIV,GADA6K,EAAM9K,MAAQkuB,IACK,IAAdpjB,EAAM9K,SAAkB0M,EAAY,CACvCmI,EAAKhK,IAAM,6BACXC,EAAM/oC,KAAOqrD,EACb,MAEF,GAAkB,MAAdtiB,EAAM9K,MAAgB,CACxB6U,EAAKhK,IAAM,2BACXC,EAAM/oC,KAAOqrD,EACb,MAEEtiB,EAAMmW,OACRnW,EAAMmW,KAAKpyC,KAASq/C,IAAQ,EAAK,GAEjB,IAAdpjB,EAAM9K,QAERwwB,GAAK,GAAY,IAAPtC,GACVsC,GAAK,GAAMtC,KAAS,EAAK,IACzBpjB,EAAMoJ,MAAQrhB,EAAMiY,EAAMoJ,MAAOsc,GAAM,EAAG,IAI5CtC,GAAO,EACPjuB,GAAO,EAEP6K,EAAM/oC,KAAO0pD,EAEf,KAAKA,EAEH,KAAOxrB,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGN6K,EAAMmW,OACRnW,EAAMmW,KAAK5tB,KAAO66B,IAEF,IAAdpjB,EAAM9K,QAERwwB,GAAK,GAAY,IAAPtC,GACVsC,GAAK,GAAMtC,KAAS,EAAK,IACzBsC,GAAK,GAAMtC,KAAS,GAAM,IAC1BsC,GAAK,GAAMtC,KAAS,GAAM,IAC1BpjB,EAAMoJ,MAAQrhB,EAAMiY,EAAMoJ,MAAOsc,GAAM,EAAG,IAI5CtC,GAAO,EACPjuB,GAAO,EAEP6K,EAAM/oC,KAAO2pD,EAEf,KAAKA,EAEH,KAAOzrB,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGN6K,EAAMmW,OACRnW,EAAMmW,KAAK0P,OAAiB,IAAPzC,GACrBpjB,EAAMmW,KAAKuD,GAAM0J,IAAQ,GAET,IAAdpjB,EAAM9K,QAERwwB,GAAK,GAAY,IAAPtC,GACVsC,GAAK,GAAMtC,KAAS,EAAK,IACzBpjB,EAAMoJ,MAAQrhB,EAAMiY,EAAMoJ,MAAOsc,GAAM,EAAG,IAI5CtC,GAAO,EACPjuB,GAAO,EAEP6K,EAAM/oC,KAAO4pD,EAEf,KAAKA,EACH,GAAkB,KAAd7gB,EAAM9K,MAAgB,CAExB,KAAOC,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV6K,EAAM55B,OAASg9C,GACXpjB,EAAMmW,OACRnW,EAAMmW,KAAK2P,UAAY1C,IAEP,IAAdpjB,EAAM9K,QAERwwB,GAAK,GAAY,IAAPtC,GACVsC,GAAK,GAAMtC,KAAS,EAAK,IACzBpjB,EAAMoJ,MAAQrhB,EAAMiY,EAAMoJ,MAAOsc,GAAM,EAAG,IAI5CtC,GAAO,EACPjuB,GAAO,OAGA6K,EAAMmW,OACbnW,EAAMmW,KAAKsD,MAAQ,MAErBzZ,EAAM/oC,KAAO6pD,EAEf,KAAKA,EACH,GAAkB,KAAd9gB,EAAM9K,SACR7lB,GAAO2wB,EAAM55B,QACFw9C,KAAQv0C,GAAOu0C,IACtBv0C,KACE2wB,EAAMmW,OACRhnC,GAAM6wB,EAAMmW,KAAK2P,UAAY9lB,EAAM55B,OAC9B45B,EAAMmW,KAAKsD,QAEdzZ,EAAMmW,KAAKsD,MAAQ,IAAIr8C,MAAM4iC,EAAMmW,KAAK2P,YAE1CtnB,EAAMje,SACJyf,EAAMmW,KAAKsD,MACXv8B,GACAoG,GAGAjU,GAEAF,KAMc,IAAd6wB,EAAM9K,QACR8K,EAAMoJ,MAAQrhB,EAAMiY,EAAMoJ,MAAOlsB,GAAO7N,GAAMiU,KAEhDsgC,IAAQv0C,GACRiU,IAAQjU,GACR2wB,EAAM55B,QAAUiJ,IAEd2wB,EAAM55B,QAAU,MAAMw/C,EAE5B5lB,EAAM55B,OAAS,EACf45B,EAAM/oC,KAAO8pD,EAEf,KAAKA,EACH,GAAkB,KAAd/gB,EAAM9K,MAAgB,CACxB,GAAa,IAAT0uB,GAAc,MAAMgC,EACxBv2C,GAAO,EACP,GAEEF,GAAM+N,GAAMoG,GAAOjU,MAEf2wB,EAAMmW,MAAQhnC,IACb6wB,EAAM55B,OAAS,QAClB45B,EAAMmW,KAAK9/C,MAAQkH,OAAO8V,aAAalE,WAElCA,IAAOE,GAAOu0C,IAOvB,GALkB,IAAd5jB,EAAM9K,QACR8K,EAAMoJ,MAAQrhB,EAAMiY,EAAMoJ,MAAOlsB,GAAO7N,GAAMiU,KAEhDsgC,IAAQv0C,GACRiU,IAAQjU,GACJF,GAAO,MAAMy2C,OAEV5lB,EAAMmW,OACbnW,EAAMmW,KAAK9/C,KAAO,MAEpB2pC,EAAM55B,OAAS,EACf45B,EAAM/oC,KAAO+pD,EAEf,KAAKA,EACH,GAAkB,KAAdhhB,EAAM9K,MAAgB,CACxB,GAAa,IAAT0uB,GAAc,MAAMgC,EACxBv2C,GAAO,EACP,GACEF,GAAM+N,GAAMoG,GAAOjU,MAEf2wB,EAAMmW,MAAQhnC,IACb6wB,EAAM55B,OAAS,QAClB45B,EAAMmW,KAAK7xC,SAAW/G,OAAO8V,aAAalE,WAErCA,IAAOE,GAAOu0C,IAMvB,GALkB,IAAd5jB,EAAM9K,QACR8K,EAAMoJ,MAAQrhB,EAAMiY,EAAMoJ,MAAOlsB,GAAO7N,GAAMiU,KAEhDsgC,IAAQv0C,GACRiU,IAAQjU,GACJF,GAAO,MAAMy2C,OAEV5lB,EAAMmW,OACbnW,EAAMmW,KAAK7xC,QAAU,MAEvB07B,EAAM/oC,KAAOgqD,EAEf,KAAKA,EACH,GAAkB,IAAdjhB,EAAM9K,MAAgB,CAExB,KAAOC,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV,GAAIiuB,MAAwB,MAAdpjB,EAAMoJ,OAAiB,CACnCW,EAAKhK,IAAM,sBACXC,EAAM/oC,KAAOqrD,EACb,MAGFc,GAAO,EACPjuB,GAAO,EAGL6K,EAAMmW,OACRnW,EAAMmW,KAAKqD,KAASxZ,EAAM9K,OAAS,EAAK,EACxC8K,EAAMmW,KAAK9yB,MAAO,GAEpB0mB,EAAK7L,MAAQ8B,EAAMoJ,MAAQ,EAC3BpJ,EAAM/oC,KAAOmqD,EACb,MACF,KAAKF,EAEH,KAAO/rB,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV4U,EAAK7L,MAAQ8B,EAAMoJ,MAAQwZ,GAAQQ,IAEnCA,GAAO,EACPjuB,GAAO,EAEP6K,EAAM/oC,KAAOkqD,EAEf,KAAKA,EACH,GAAuB,IAAnBnhB,EAAM8iB,SASR,OAPA/Y,EAAKnK,SAAWklB,GAChB/a,EAAKlK,UAAYklB,GACjBhb,EAAKtK,QAAUnc,GACfymB,EAAKrK,SAAWkkB,GAChB5jB,EAAMojB,KAAOA,GACbpjB,EAAM7K,KAAOA,GAENwL,EAEToJ,EAAK7L,MAAQ8B,EAAMoJ,MAAQ,EAC3BpJ,EAAM/oC,KAAOmqD,EAEf,KAAKA,EACH,GAAI7e,IAAUhC,GAAWgC,IAAU/B,EAAW,MAAMolB,EAEtD,KAAKvE,EACH,GAAIrhB,EAAMngB,KAAM,CAEdujC,MAAiB,EAAPjuB,GACVA,IAAe,EAAPA,GAER6K,EAAM/oC,KAAOkrD,EACb,MAGF,KAAOhtB,GAAO,GAAG,CACf,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EASV,OANA6K,EAAMngB,KAAe,EAAPujC,GAGdjuB,IAAQ,EAGQ,GAJhBiuB,MAAU,IAKR,KAAK,EAGHpjB,EAAM/oC,KAAOqqD,EACb,MACF,KAAK,EAKH,GAJAoD,GAAY1kB,GAGZA,EAAM/oC,KAAO2qD,EACTrf,IAAU/B,EAAS,CAErB4iB,MAAU,EACVjuB,IAAQ,EAER,MAAMywB,EAER,MACF,KAAK,EAGH5lB,EAAM/oC,KAAOwqD,EACb,MACF,KAAK,EACH1X,EAAKhK,IAAM,qBACXC,EAAM/oC,KAAOqrD,EAGjBc,MAAU,EACVjuB,IAAQ,EAER,MACF,KAAKmsB,EAMH,IAJA8B,MAAiB,EAAPjuB,GACVA,IAAe,EAAPA,GAGDA,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV,IAAY,MAAPiuB,MAAqBA,KAAS,GAAM,OAAS,CAChDrZ,EAAKhK,IAAM,+BACXC,EAAM/oC,KAAOqrD,EACb,MAUF,GARAtiB,EAAM55B,OAAgB,MAAPg9C,GAIfA,GAAO,EACPjuB,GAAO,EAEP6K,EAAM/oC,KAAOsqD,EACThf,IAAU/B,EAAW,MAAMolB,EAEjC,KAAKrE,EACHvhB,EAAM/oC,KAAOuqD,EAEf,KAAKA,EAEH,GADAnyC,GAAO2wB,EAAM55B,OACH,CAGR,GAFIiJ,GAAOu0C,KAAQv0C,GAAOu0C,IACtBv0C,GAAO01C,KAAQ11C,GAAO01C,IACb,IAAT11C,GAAc,MAAMu2C,EAExBpnB,EAAMje,SAASmU,GAAQxX,GAAOoG,GAAMjU,GAAMy1C,IAE1ClB,IAAQv0C,GACRiU,IAAQjU,GACR01C,IAAQ11C,GACRy1C,IAAOz1C,GACP2wB,EAAM55B,QAAUiJ,GAChB,MAGF2wB,EAAM/oC,KAAOmqD,EACb,MACF,KAAKK,EAEH,KAAOtsB,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAmBV,GAhBA6K,EAAM0jB,KAAkC,KAAnB,GAAPN,IAEdA,MAAU,EACVjuB,IAAQ,EAER6K,EAAM2jB,MAAmC,GAAnB,GAAPP,IAEfA,MAAU,EACVjuB,IAAQ,EAER6K,EAAMyjB,MAAmC,GAAnB,GAAPL,IAEfA,MAAU,EACVjuB,IAAQ,EAGJ6K,EAAM0jB,KAAO,KAAO1jB,EAAM2jB,MAAQ,GAAI,CACxC5Z,EAAKhK,IAAM,sCACXC,EAAM/oC,KAAOqrD,EACb,MAIFtiB,EAAM4jB,KAAO,EACb5jB,EAAM/oC,KAAOyqD,EAEf,KAAKA,EACH,KAAO1hB,EAAM4jB,KAAO5jB,EAAMyjB,OAAO,CAE/B,KAAOtuB,GAAO,GAAG,CACf,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV6K,EAAM6jB,KAAK8B,GAAM3lB,EAAM4jB,SAAmB,EAAPR,GAEnCA,MAAU,EACVjuB,IAAQ,EAGV,KAAO6K,EAAM4jB,KAAO,IAClB5jB,EAAM6jB,KAAK8B,GAAM3lB,EAAM4jB,SAAW,EAapC,GAPA5jB,EAAMqjB,QAAUrjB,EAAM+jB,OACtB/jB,EAAMujB,QAAU,EAEhBphD,GAAO,CAAEgzB,KAAM6K,EAAMujB,SACrB9tC,GAAM2qC,EAAcC,EAAOrgB,EAAM6jB,KAAM,EAAG,GAAI7jB,EAAMqjB,QAAS,EAAGrjB,EAAM8jB,KAAM3hD,IAC5E69B,EAAMujB,QAAUphD,GAAKgzB,KAEjB1f,GAAK,CACPs0B,EAAKhK,IAAM,2BACXC,EAAM/oC,KAAOqrD,EACb,MAGFtiB,EAAM4jB,KAAO,EACb5jB,EAAM/oC,KAAO0qD,EAEf,KAAKA,EACH,KAAO3hB,EAAM4jB,KAAO5jB,EAAM0jB,KAAO1jB,EAAM2jB,OAAO,CAC5C,KAGEyB,IAFAK,GAAOzlB,EAAMqjB,QAAQD,IAAS,GAAKpjB,EAAMujB,SAAW,MAEhC,GAAM,IAC1B8B,GAAkB,MAAPI,MAFXN,GAAYM,KAAS,KAIFtwB,KANZ,CAQP,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV,GAAIkwB,GAAW,GAEbjC,MAAU+B,GACVhwB,IAAQgwB,GAERnlB,EAAM6jB,KAAK7jB,EAAM4jB,QAAUyB,OAExB,CACH,GAAiB,KAAbA,GAAiB,CAGnB,IADA9tD,GAAI4tD,GAAY,EACThwB,GAAO59B,IAAG,CACf,GAAa,IAATqsD,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAOV,GAHAiuB,MAAU+B,GACVhwB,IAAQgwB,GAEW,IAAfnlB,EAAM4jB,KAAY,CACpB7Z,EAAKhK,IAAM,4BACXC,EAAM/oC,KAAOqrD,EACb,MAEFnzC,GAAM6wB,EAAM6jB,KAAK7jB,EAAM4jB,KAAO,GAC9Bv0C,GAAO,GAAY,EAAP+zC,IAEZA,MAAU,EACVjuB,IAAQ,OAGL,GAAiB,KAAbkwB,GAAiB,CAGxB,IADA9tD,GAAI4tD,GAAY,EACThwB,GAAO59B,IAAG,CACf,GAAa,IAATqsD,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAKVA,IAAQgwB,GAERh2C,GAAM,EACNE,GAAO,GAAY,GAJnB+zC,MAAU+B,KAMV/B,MAAU,EACVjuB,IAAQ,MAGL,CAGH,IADA59B,GAAI4tD,GAAY,EACThwB,GAAO59B,IAAG,CACf,GAAa,IAATqsD,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAKVA,IAAQgwB,GAERh2C,GAAM,EACNE,GAAO,IAAa,KAJpB+zC,MAAU+B,KAMV/B,MAAU,EACVjuB,IAAQ,EAGV,GAAI6K,EAAM4jB,KAAOv0C,GAAO2wB,EAAM0jB,KAAO1jB,EAAM2jB,MAAO,CAChD5Z,EAAKhK,IAAM,4BACXC,EAAM/oC,KAAOqrD,EACb,MAEF,KAAOjzC,MACL2wB,EAAM6jB,KAAK7jB,EAAM4jB,QAAUz0C,IAMjC,GAAI6wB,EAAM/oC,OAASqrD,EAAO,MAG1B,GAAwB,IAApBtiB,EAAM6jB,KAAK,KAAY,CACzB9Z,EAAKhK,IAAM,uCACXC,EAAM/oC,KAAOqrD,EACb,MAeF,GATAtiB,EAAMujB,QAAU,EAEhBphD,GAAO,CAAEgzB,KAAM6K,EAAMujB,SACrB9tC,GAAM2qC,EAAcE,EAAMtgB,EAAM6jB,KAAM,EAAG7jB,EAAM0jB,KAAM1jB,EAAMqjB,QAAS,EAAGrjB,EAAM8jB,KAAM3hD,IAGnF69B,EAAMujB,QAAUphD,GAAKgzB,KAGjB1f,GAAK,CACPs0B,EAAKhK,IAAM,8BACXC,EAAM/oC,KAAOqrD,EACb,MAcF,GAXAtiB,EAAMwjB,SAAW,EAGjBxjB,EAAMsjB,SAAWtjB,EAAMgkB,QACvB7hD,GAAO,CAAEgzB,KAAM6K,EAAMwjB,UACrB/tC,GAAM2qC,EAAcG,EAAOvgB,EAAM6jB,KAAM7jB,EAAM0jB,KAAM1jB,EAAM2jB,MAAO3jB,EAAMsjB,SAAU,EAAGtjB,EAAM8jB,KAAM3hD,IAG/F69B,EAAMwjB,SAAWrhD,GAAKgzB,KAGlB1f,GAAK,CACPs0B,EAAKhK,IAAM,wBACXC,EAAM/oC,KAAOqrD,EACb,MAIF,GADAtiB,EAAM/oC,KAAO2qD,EACTrf,IAAU/B,EAAW,MAAMolB,EAEjC,KAAKhE,EACH5hB,EAAM/oC,KAAO4qD,EAEf,KAAKA,EACH,GAAI+B,IAAQ,GAAKmB,IAAQ,IAAK,CAE5Bhb,EAAKnK,SAAWklB,GAChB/a,EAAKlK,UAAYklB,GACjBhb,EAAKtK,QAAUnc,GACfymB,EAAKrK,SAAWkkB,GAChB5jB,EAAMojB,KAAOA,GACbpjB,EAAM7K,KAAOA,GAEbgrB,EAAapW,EAAMkb,IAEnBH,GAAM/a,EAAKnK,SACXlL,GAASqV,EAAKrV,OACdqwB,GAAOhb,EAAKlK,UACZvc,GAAOymB,EAAKtK,QACZviB,GAAQ6sB,EAAK7sB,MACb0mC,GAAO7Z,EAAKrK,SACZ0jB,GAAOpjB,EAAMojB,KACbjuB,GAAO6K,EAAM7K,KAGT6K,EAAM/oC,OAASmqD,IACjBphB,EAAMkkB,MAAQ,GAEhB,MAGF,IADAlkB,EAAMkkB,KAAO,EAIXkB,IAFAK,GAAOzlB,EAAMqjB,QAAQD,IAAS,GAAKpjB,EAAMujB,SAAW,MAEhC,GAAM,IAC1B8B,GAAkB,MAAPI,MAFXN,GAAYM,KAAS,KAIJtwB,KANV,CAQP,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV,GAAIiwB,IAAgC,IAAV,IAAVA,IAAuB,CAIrC,IAHAE,GAAYH,GACZI,GAAUH,GACVI,GAAWH,GAKTD,IAHAK,GAAOzlB,EAAMqjB,QAAQmC,KACXpC,IAAS,GAAMkC,GAAYC,IAAY,IAAoCD,QAEjE,GAAM,IAC1BD,GAAkB,MAAPI,KAENH,IAJLH,GAAYM,KAAS,KAIUtwB,KAPxB,CASP,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAIViuB,MAAUkC,GACVnwB,IAAQmwB,GAERtlB,EAAMkkB,MAAQoB,GAQhB,GALAlC,MAAU+B,GACVhwB,IAAQgwB,GAERnlB,EAAMkkB,MAAQiB,GACdnlB,EAAM55B,OAASi/C,GACC,IAAZD,GAAe,CAIjBplB,EAAM/oC,KAAOirD,EACb,MAEF,GAAc,GAAVkD,GAAc,CAEhBplB,EAAMkkB,MAAQ,EACdlkB,EAAM/oC,KAAOmqD,EACb,MAEF,GAAc,GAAVgE,GAAc,CAChBrb,EAAKhK,IAAM,8BACXC,EAAM/oC,KAAOqrD,EACb,MAEFtiB,EAAMyZ,MAAkB,GAAV2L,GACdplB,EAAM/oC,KAAO6qD,EAEf,KAAKA,EACH,GAAI9hB,EAAMyZ,MAAO,CAGf,IADAliD,GAAIyoC,EAAMyZ,MACHtkB,GAAO59B,IAAG,CACf,GAAa,IAATqsD,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV6K,EAAM55B,QAAUg9C,IAAS,GAAKpjB,EAAMyZ,OAAS,EAE7C2J,MAAUpjB,EAAMyZ,MAChBtkB,IAAQ6K,EAAMyZ,MAEdzZ,EAAMkkB,MAAQlkB,EAAMyZ,MAGtBzZ,EAAMmkB,IAAMnkB,EAAM55B,OAClB45B,EAAM/oC,KAAO8qD,EAEf,KAAKA,EACH,KAGEqD,IAFAK,GAAOzlB,EAAMsjB,SAASF,IAAS,GAAKpjB,EAAMwjB,UAAY,MAElC,GAAM,IAC1B6B,GAAkB,MAAPI,MAFXN,GAAYM,KAAS,KAIFtwB,KANZ,CAQP,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV,GAAyB,IAAV,IAAViwB,IAAuB,CAI1B,IAHAE,GAAYH,GACZI,GAAUH,GACVI,GAAWH,GAKTD,IAHAK,GAAOzlB,EAAMsjB,SAASkC,KACZpC,IAAS,GAAMkC,GAAYC,IAAY,IAAoCD,QAEjE,GAAM,IAC1BD,GAAkB,MAAPI,KAENH,IAJLH,GAAYM,KAAS,KAIUtwB,KAPxB,CASP,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAIViuB,MAAUkC,GACVnwB,IAAQmwB,GAERtlB,EAAMkkB,MAAQoB,GAOhB,GAJAlC,MAAU+B,GACVhwB,IAAQgwB,GAERnlB,EAAMkkB,MAAQiB,GACA,GAAVC,GAAc,CAChBrb,EAAKhK,IAAM,wBACXC,EAAM/oC,KAAOqrD,EACb,MAEFtiB,EAAM3uB,OAASg0C,GACfrlB,EAAMyZ,MAAoB,GAAZ,GACdzZ,EAAM/oC,KAAO+qD,EAEf,KAAKA,EACH,GAAIhiB,EAAMyZ,MAAO,CAGf,IADAliD,GAAIyoC,EAAMyZ,MACHtkB,GAAO59B,IAAG,CACf,GAAa,IAATqsD,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV6K,EAAM3uB,QAAU+xC,IAAS,GAAKpjB,EAAMyZ,OAAS,EAE7C2J,MAAUpjB,EAAMyZ,MAChBtkB,IAAQ6K,EAAMyZ,MAEdzZ,EAAMkkB,MAAQlkB,EAAMyZ,MAGtB,GAAIzZ,EAAM3uB,OAAS2uB,EAAM+iB,KAAM,CAC7BhZ,EAAKhK,IAAM,gCACXC,EAAM/oC,KAAOqrD,EACb,MAIFtiB,EAAM/oC,KAAOgrD,EAEf,KAAKA,EACH,GAAa,IAAT8C,GAAc,MAAMa,EAExB,GADAv2C,GAAO41C,GAAOF,GACV/kB,EAAM3uB,OAAShC,GAAM,CAEvB,IADAA,GAAO2wB,EAAM3uB,OAAShC,IACX2wB,EAAMkjB,OACXljB,EAAMikB,KAAM,CACdla,EAAKhK,IAAM,gCACXC,EAAM/oC,KAAOqrD,EACb,MAkBAjzC,GAAO2wB,EAAMmjB,OACf9zC,IAAQ2wB,EAAMmjB,MACdxiD,GAAOq/B,EAAMijB,MAAQ5zC,IAGrB1O,GAAOq/B,EAAMmjB,MAAQ9zC,GAEnBA,GAAO2wB,EAAM55B,SAAUiJ,GAAO2wB,EAAM55B,QACxC8+C,GAAcllB,EAAM/yB,YAGpBi4C,GAAcxwB,GACd/zB,GAAOmkD,GAAM9kB,EAAM3uB,OACnBhC,GAAO2wB,EAAM55B,OAEXiJ,GAAO01C,KAAQ11C,GAAO01C,IAC1BA,IAAQ11C,GACR2wB,EAAM55B,QAAUiJ,GAChB,GACEqlB,GAAOowB,MAASI,GAAYvkD,cACnB0O,IACU,IAAjB2wB,EAAM55B,SAAgB45B,EAAM/oC,KAAO4qD,GACvC,MACF,KAAKK,EACH,GAAa,IAAT6C,GAAc,MAAMa,EACxBlxB,GAAOowB,MAAS9kB,EAAM55B,OACtB2+C,KACA/kB,EAAM/oC,KAAO4qD,EACb,MACF,KAAKM,EACH,GAAIniB,EAAMtgB,KAAM,CAEd,KAAOyV,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KAEAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAcV,GAXA8vB,IAAQF,GACRhb,EAAKjK,WAAamlB,GAClBjlB,EAAMrY,OAASs9B,GACXA,KACFlb,EAAK7L,MAAQ8B,EAAMoJ,MAEdpJ,EAAM9K,MAAQnN,EAAMiY,EAAMoJ,MAAO1U,GAAQuwB,GAAMH,GAAMG,IAAQ5S,EAAQrS,EAAMoJ,MAAO1U,GAAQuwB,GAAMH,GAAMG,KAG7GA,GAAOF,IAEF/kB,EAAM9K,MAAQkuB,GAAOR,GAAQQ,OAAWpjB,EAAMoJ,MAAO,CACxDW,EAAKhK,IAAM,uBACXC,EAAM/oC,KAAOqrD,EACb,MAGFc,GAAO,EACPjuB,GAAO,EAIT6K,EAAM/oC,KAAOmrD,EAEf,KAAKA,EACH,GAAIpiB,EAAMtgB,MAAQsgB,EAAM9K,MAAO,CAE7B,KAAOC,GAAO,IAAI,CAChB,GAAa,IAATyuB,GAAc,MAAMgC,EACxBhC,KACAR,IAAQlmC,GAAMoG,OAAW6R,GACzBA,IAAQ,EAGV,GAAIiuB,MAAwB,WAAdpjB,EAAMrY,OAAqB,CACvCoiB,EAAKhK,IAAM,yBACXC,EAAM/oC,KAAOqrD,EACb,MAGFc,GAAO,EACPjuB,GAAO,EAIT6K,EAAM/oC,KAAOorD,EAEf,KAAKA,EACH5sC,GAAMirB,EACN,MAAMklB,EACR,KAAKtD,EACH7sC,GAAMqrB,EACN,MAAM8kB,EACR,KAAKrD,EACH,OAAO/B,EACT,KAAKgC,EAEL,QACE,OAAO3hB,EAsBb,OARAkJ,EAAKnK,SAAWklB,GAChB/a,EAAKlK,UAAYklB,GACjBhb,EAAKtK,QAAUnc,GACfymB,EAAKrK,SAAWkkB,GAChB5jB,EAAMojB,KAAOA,GACbpjB,EAAM7K,KAAOA,IAGT6K,EAAMijB,OAAUgC,KAASlb,EAAKlK,WAAaG,EAAM/oC,KAAOqrD,IACvCtiB,EAAM/oC,KAAOkrD,GAAS5f,IAAUjC,KAC/CskB,GAAa7a,EAAMA,EAAKrV,OAAQqV,EAAKnK,SAAUqlB,GAAOlb,EAAKlK,YAC7DG,EAAM/oC,KAAOsrD,EACN/B,IAGXwE,IAAOjb,EAAKrK,SACZulB,IAAQlb,EAAKlK,UACbkK,EAAKpK,UAAYqlB,GACjBjb,EAAKjK,WAAamlB,GAClBjlB,EAAMrY,OAASs9B,GACXjlB,EAAMtgB,MAAQulC,KAChBlb,EAAK7L,MAAQ8B,EAAMoJ,MAChBpJ,EAAM9K,MAAQnN,EAAMiY,EAAMoJ,MAAO1U,GAAQuwB,GAAMlb,EAAKnK,SAAWqlB,IAAQ5S,EAAQrS,EAAMoJ,MAAO1U,GAAQuwB,GAAMlb,EAAKnK,SAAWqlB,KAE/Hlb,EAAK9J,UAAYD,EAAM7K,MAAQ6K,EAAMngB,KAAO,GAAK,IAC9BmgB,EAAM/oC,OAASmqD,EAAO,IAAM,IAC5BphB,EAAM/oC,OAAS2qD,GAAQ5hB,EAAM/oC,OAASsqD,EAAQ,IAAM,IACzD,IAARyD,IAAsB,IAATC,IAAe1iB,IAAUjC,IAAa7qB,KAAQgrB,IAC/DhrB,GAAMsrB,GAEDtrB,KAyETngB,EAAQ0qD,WAtER,SAAoBjW,GAElB,IAAKA,IAASA,EAAK/J,MACjB,OAAOa,EAGT,IAAIb,EAAQ+J,EAAK/J,MAKjB,OAJIA,EAAM/yB,SACR+yB,EAAM/yB,OAAS,MAEjB88B,EAAK/J,MAAQ,KACNS,GA4DTnrC,EAAQqqD,iBAzDR,SAA0B5V,EAAMoM,GAC9B,IAAInW,EAGJ,OAAK+J,GAASA,EAAK/J,MAEM,IAAP,GADlBA,EAAQ+J,EAAK/J,OACFtgB,MAA0BmhB,GAGrCb,EAAMmW,KAAOA,EACbA,EAAK9yB,MAAO,EACLod,GAP4BI,GAsDrCvrC,EAAQsqD,qBA5CR,SAA8B7V,EAAM6H,GAClC,IAEI5R,EAFAka,EAAatI,EAAWxrC,OAO5B,OAAK2jC,GAAyBA,EAAK/J,MAGhB,KAFnBA,EAAQ+J,EAAK/J,OAEHtgB,MAAcsgB,EAAM/oC,OAASkqD,EAC9BtgB,EAILb,EAAM/oC,OAASkqD,GAGR9O,EAFA,EAEgBT,EAAYsI,EAAY,KAClCla,EAAMoJ,MACZtI,EAKL8jB,GAAa7a,EAAM6H,EAAYsI,EAAYA,IAE/Cla,EAAM/oC,KAAOsrD,EACN/B,IAETxgB,EAAM8iB,SAAW,EAEVriB,GAzB4DI,GAqCrEvrC,EAAQywD,YAAc,sC,6BC78CtBxwD,EAAOD,QAAU,SAAsBy0C,EAAMh6B,GAC3C,IAAIiwB,EACAglB,EACAnlC,EACAolC,EACA1L,EACAvpC,EAEA+yC,EAEAE,EACAC,EACAC,EAEA6C,EACA5C,EACAjuB,EACA8wB,EACAC,EACAC,EACAC,EACAX,EACAY,EAEAl3C,EACAotC,EACA57C,EACAukD,EAGAhoC,EAAOwX,EAGXsL,EAAQ+J,EAAK/J,MAEbglB,EAAMjb,EAAKtK,QACXviB,EAAQ6sB,EAAK7sB,MACb2C,EAAOmlC,GAAOjb,EAAKrK,SAAW,GAC9BulB,EAAOlb,EAAKnK,SACZlL,EAASqV,EAAKrV,OACd6kB,EAAM0L,GAAQl1C,EAAQg6B,EAAKlK,WAC3B7vB,EAAMi1C,GAAQlb,EAAKlK,UAAY,KAE/BkjB,EAAO/iB,EAAM+iB,KAEbE,EAAQjjB,EAAMijB,MACdC,EAAQljB,EAAMkjB,MACdC,EAAQnjB,EAAMmjB,MACd6C,EAAWhmB,EAAM/yB,OACjBm2C,EAAOpjB,EAAMojB,KACbjuB,EAAO6K,EAAM7K,KACb8wB,EAAQjmB,EAAMqjB,QACd6C,EAAQlmB,EAAMsjB,SACd6C,GAAS,GAAKnmB,EAAMujB,SAAW,EAC/B6C,GAAS,GAAKpmB,EAAMwjB,UAAY,EAMhC8C,EACA,EAAG,CACGnxB,EAAO,KACTiuB,GAAQlmC,EAAM8nC,MAAU7vB,EACxBA,GAAQ,EACRiuB,GAAQlmC,EAAM8nC,MAAU7vB,EACxBA,GAAQ,GAGVswB,EAAOQ,EAAM7C,EAAO+C,GAEpBI,EACA,OAAS,CAKP,GAHAnD,KADAiD,EAAKZ,IAAS,GAEdtwB,GAAQkxB,EAEG,KADXA,EAAMZ,IAAS,GAAM,KAKnB/wB,EAAOuwB,KAAiB,MAAPQ,MAEd,MAAS,GAALY,GAwKJ,IAAkB,IAAR,GAALA,GAAgB,CACxBZ,EAAOQ,GAAc,MAAPR,IAA8BrC,GAAS,GAAKiD,GAAM,IAChE,SAASE,EAEN,GAAS,GAALF,EAAS,CAEhBrmB,EAAM/oC,KAtSH,GAuSH,MAAMqvD,EAGNvc,EAAKhK,IAAM,8BACXC,EAAM/oC,KA5SJ,GA6SF,MAAMqvD,EAnLNn3C,EAAa,MAAPs2C,GACNY,GAAM,MAEAlxB,EAAOkxB,IACTjD,GAAQlmC,EAAM8nC,MAAU7vB,EACxBA,GAAQ,GAEVhmB,GAAOi0C,GAAS,GAAKiD,GAAM,EAC3BjD,KAAUiD,EACVlxB,GAAQkxB,GAGNlxB,EAAO,KACTiuB,GAAQlmC,EAAM8nC,MAAU7vB,EACxBA,GAAQ,EACRiuB,GAAQlmC,EAAM8nC,MAAU7vB,EACxBA,GAAQ,GAEVswB,EAAOS,EAAM9C,EAAOgD,GAEpBI,EACA,OAAS,CAMP,GAJApD,KADAiD,EAAKZ,IAAS,GAEdtwB,GAAQkxB,IAGC,IAFTA,EAAMZ,IAAS,GAAM,MAiIhB,IAAkB,IAAR,GAALY,GAAgB,CACxBZ,EAAOS,GAAc,MAAPT,IAA8BrC,GAAS,GAAKiD,GAAM,IAChE,SAASG,EAGTzc,EAAKhK,IAAM,wBACXC,EAAM/oC,KA1RR,GA2RE,MAAMqvD,EAzHN,GAZA/J,EAAc,MAAPkJ,EAEHtwB,GADJkxB,GAAM,MAEJjD,GAAQlmC,EAAM8nC,MAAU7vB,GACxBA,GAAQ,GACGkxB,IACTjD,GAAQlmC,EAAM8nC,MAAU7vB,EACxBA,GAAQ,KAGZonB,GAAQ6G,GAAS,GAAKiD,GAAM,GAEjBtD,EAAM,CACfhZ,EAAKhK,IAAM,gCACXC,EAAM/oC,KApKV,GAqKI,MAAMqvD,EAOR,GAJAlD,KAAUiD,EACVlxB,GAAQkxB,EAGJ9J,GADJ8J,EAAKpB,EAAO1L,GACG,CAEb,IADA8M,EAAK9J,EAAO8J,GACHnD,GACHljB,EAAMikB,KAAM,CACdla,EAAKhK,IAAM,gCACXC,EAAM/oC,KAjLd,GAkLQ,MAAMqvD,EA2BV,GAFA3lD,EAAO,EACPukD,EAAcc,EACA,IAAV7C,GAEF,GADAxiD,GAAQsiD,EAAQoD,EACZA,EAAKl3C,EAAK,CACZA,GAAOk3C,EACP,GACE3xB,EAAOuwB,KAAUe,EAASrlD,aACjB0lD,GACX1lD,EAAOskD,EAAO1I,EACd2I,EAAcxwB,QAGb,GAAIyuB,EAAQkD,GAGf,GAFA1lD,GAAQsiD,EAAQE,EAAQkD,GACxBA,GAAMlD,GACGh0C,EAAK,CACZA,GAAOk3C,EACP,GACE3xB,EAAOuwB,KAAUe,EAASrlD,aACjB0lD,GAEX,GADA1lD,EAAO,EACHwiD,EAAQh0C,EAAK,CAEfA,GADAk3C,EAAKlD,EAEL,GACEzuB,EAAOuwB,KAAUe,EAASrlD,aACjB0lD,GACX1lD,EAAOskD,EAAO1I,EACd2I,EAAcxwB,SAMlB,GADA/zB,GAAQwiD,EAAQkD,EACZA,EAAKl3C,EAAK,CACZA,GAAOk3C,EACP,GACE3xB,EAAOuwB,KAAUe,EAASrlD,aACjB0lD,GACX1lD,EAAOskD,EAAO1I,EACd2I,EAAcxwB,EAGlB,KAAOvlB,EAAM,GACXulB,EAAOuwB,KAAUC,EAAYvkD,KAC7B+zB,EAAOuwB,KAAUC,EAAYvkD,KAC7B+zB,EAAOuwB,KAAUC,EAAYvkD,KAC7BwO,GAAO,EAELA,IACFulB,EAAOuwB,KAAUC,EAAYvkD,KACzBwO,EAAM,IACRulB,EAAOuwB,KAAUC,EAAYvkD,WAI9B,CACHA,EAAOskD,EAAO1I,EACd,GACE7nB,EAAOuwB,KAAUvwB,EAAO/zB,KACxB+zB,EAAOuwB,KAAUvwB,EAAO/zB,KACxB+zB,EAAOuwB,KAAUvwB,EAAO/zB,KACxBwO,GAAO,QACAA,EAAM,GACXA,IACFulB,EAAOuwB,KAAUvwB,EAAO/zB,KACpBwO,EAAM,IACRulB,EAAOuwB,KAAUvwB,EAAO/zB,OAehC,OAkBJ,aAEKqkD,EAAMnlC,GAAQolC,EAAOj1C,GAI9Bg1C,GADA71C,EAAMgmB,GAAQ,EAGdiuB,IAAS,IADTjuB,GAAQhmB,GAAO,IACO,EAGtB46B,EAAKtK,QAAUulB,EACfjb,EAAKnK,SAAWqlB,EAChBlb,EAAKrK,SAAYslB,EAAMnlC,EAAYA,EAAOmlC,EAAZ,EAAmB,GAAKA,EAAMnlC,GAC5DkqB,EAAKlK,UAAaolB,EAAOj1C,EAAaA,EAAMi1C,EAAb,IAAqB,KAAOA,EAAOj1C,GAClEgwB,EAAMojB,KAAOA,EACbpjB,EAAM7K,KAAOA,I,6BCjUf,IAAIqJ,EAAQ,EAAQ,IAWhBioB,EAAQ,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACrD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,GAG3DC,EAAO,CACT,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAGtDC,EAAQ,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IACtD,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAClD,KAAM,MAAO,MAAO,MAAO,EAAG,GAG5BC,EAAO,CACT,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGtBrxD,EAAOD,QAAU,SAAuBwT,EAAM+6C,EAAMgD,EAAYC,EAAO/8B,EAAOg9B,EAAajD,EAAM3hD,GAE/F,IAYI6kD,EACA5yC,EACA9J,EACA28C,EACA3jC,EAIAtT,EAMAm1C,EAAWC,EAASC,EA1BpBlwB,EAAOhzB,EAAKgzB,KAGZhmB,EAAM,EACNw1C,EAAM,EACNhyC,EAAM,EAAGsC,EAAM,EACf7f,EAAO,EACP8xD,EAAO,EACPC,EAAO,EACPpC,EAAO,EACPqC,EAAO,EACPC,EAAO,EAMP99B,EAAO,KACP+9B,EAAa,EAGbt/B,EAAQ,IAAIwW,EAAMtd,MAAMqmC,IACxBC,EAAO,IAAIhpB,EAAMtd,MAAMqmC,IACvB9N,EAAQ,KACRgO,EAAc,EAoClB,IAAKt4C,EAAM,EAAGA,GA7FF,GA6FkBA,IAC5B6Y,EAAM7Y,GAAO,EAEf,IAAKw1C,EAAM,EAAGA,EAAMmC,EAAOnC,IACzB38B,EAAM67B,EAAKgD,EAAalC,MAK1B,IADAvvD,EAAO+/B,EACFlgB,EAtGO,GAsGQA,GAAO,GACN,IAAf+S,EAAM/S,GADkBA,KAM9B,GAHI7f,EAAO6f,IACT7f,EAAO6f,GAEG,IAARA,EAaF,OATA8U,EAAMg9B,KAAiB,SAMvBh9B,EAAMg9B,KAAiB,SAEvB5kD,EAAKgzB,KAAO,EACL,EAET,IAAKxiB,EAAM,EAAGA,EAAMsC,GACC,IAAf+S,EAAMrV,GADaA,KASzB,IANIvd,EAAOud,IACTvd,EAAOud,GAIToyC,EAAO,EACF51C,EAAM,EAAGA,GApIF,GAoIkBA,IAG5B,GAFA41C,IAAS,GACTA,GAAQ/8B,EAAM7Y,IACH,EACT,OAAQ,EAGZ,GAAI41C,EAAO,IAtID,IAsIOj8C,GAA0B,IAARmM,GACjC,OAAQ,EAKV,IADAuyC,EAAK,GAAK,EACLr4C,EAAM,EAAGA,EAjJF,GAiJiBA,IAC3Bq4C,EAAKr4C,EAAM,GAAKq4C,EAAKr4C,GAAO6Y,EAAM7Y,GAIpC,IAAKw1C,EAAM,EAAGA,EAAMmC,EAAOnC,IACM,IAA3Bd,EAAKgD,EAAalC,KACpBb,EAAK0D,EAAK3D,EAAKgD,EAAalC,OAAWA,GAmE3C,GAtNU,IAyLN77C,GACFygB,EAAOkwB,EAAQqK,EACf9zC,EAAM,IA1LC,IA4LElH,GACTygB,EAAOk9B,EACPa,GAAc,IACd7N,EAAQiN,EACRe,GAAe,IACfz3C,EAAM,MAGNuZ,EAAOo9B,EACPlN,EAAQmN,EACR52C,GAAO,GAITq3C,EAAO,EACP1C,EAAM,EACNx1C,EAAMwD,EACN2Q,EAAOyjC,EACPG,EAAO9xD,EACP+xD,EAAO,EACP78C,GAAO,EAEP28C,GADAG,EAAO,GAAKhyD,GACE,EAlNL,IAqNJ0T,GAAiBs+C,EA1NN,KAMN,IAqNPt+C,GAAkBs+C,EA1NJ,IA2Nf,OAAO,EAIT,OAAS,CAEPjC,EAAYh2C,EAAMg4C,EACdrD,EAAKa,GAAO30C,GACdo1C,EAAU,EACVC,EAAWvB,EAAKa,IAETb,EAAKa,GAAO30C,GACnBo1C,EAAU3L,EAAMgO,EAAc3D,EAAKa,IACnCU,EAAW97B,EAAK+9B,EAAaxD,EAAKa,MAGlCS,EAAU,GACVC,EAAW,GAIb2B,EAAO,GAAM73C,EAAMg4C,EAEnBx0C,EADAyB,EAAO,GAAK8yC,EAEZ,GAEEn9B,EAAMzG,GAAQ+jC,GAAQF,IADtB/yC,GAAQ4yC,IAC+B7B,GAAa,GAAOC,GAAW,GAAMC,EAAU,QACtE,IAATjxC,GAIT,IADA4yC,EAAO,GAAM73C,EAAM,EACZk4C,EAAOL,GACZA,IAAS,EAWX,GATa,IAATA,GACFK,GAAQL,EAAO,EACfK,GAAQL,GAERK,EAAO,EAIT1C,IACqB,KAAf38B,EAAM7Y,GAAY,CACtB,GAAIA,IAAQ8F,EAAO,MACnB9F,EAAM00C,EAAKgD,EAAa/C,EAAKa,IAI/B,GAAIx1C,EAAM/Z,IAASiyD,EAAOJ,KAAU38C,EAAK,CAYvC,IAVa,IAAT68C,IACFA,EAAO/xD,GAITkuB,GAAQ3Q,EAIRoyC,EAAO,IADPmC,EAAO/3C,EAAMg4C,GAEND,EAAOC,EAAOlyC,MACnB8vC,GAAQ/8B,EAAMk/B,EAAOC,KACT,IACZD,IACAnC,IAAS,EAKX,GADAqC,GAAQ,GAAKF,EA5RR,IA6RAp+C,GAAiBs+C,EAlSV,KAMN,IA6RHt+C,GAAkBs+C,EAlSR,IAmSX,OAAO,EAQTr9B,EAJAzf,EAAM+8C,EAAOJ,GAIC7xD,GAAQ,GAAO8xD,GAAQ,GAAO5jC,EAAOyjC,EAAc,GAiBrE,OAVa,IAATM,IAIFt9B,EAAMzG,EAAO+jC,GAAUl4C,EAAMg4C,GAAS,GAAO,IAAM,GAAK,GAK1DhlD,EAAKgzB,KAAO//B,EACL,I,6BC5RTG,EAAOD,QApCP,WAEEuH,KAAKkH,KAAa,EAElBlH,KAAK0rB,KAAa,EAElB1rB,KAAKgpD,OAAa,EAElBhpD,KAAK68C,GAAa,EAElB78C,KAAK48C,MAAa,KAElB58C,KAAKipD,UAAa,EAWlBjpD,KAAKxG,KAAa,GAIlBwG,KAAKyH,QAAa,GAIlBzH,KAAK28C,KAAa,EAElB38C,KAAKwmB,MAAa,I,gBCtDpB,IAAIwe,EAAQ,GAcZ,SAAS6lB,EAAI/mD,EAAMgnD,GACjB,IAAI,IAAItwD,KAAOsJ,EACbgnD,EAAKtwD,GAAOsJ,EAAKtJ,GAfrB9B,EAAOD,QAAUusC,EAEjBA,EAAMlhC,KAAO,EAAQ,KACrBkhC,EAAM3E,GAAK,EAAQ,KACnB2E,EAAMjW,GAAK,EAAQ,KACnBiW,EAAMhuB,SAAW,EAAQ,KACzBguB,EAAMvkC,KAAO,EAAQ,KACrBukC,EAAMxyB,KAAO,EAAQ,KACrBwyB,EAAMzqC,OAAS,EAAQ,KAEvBswD,EAAI,EAAQ,KAAc7lB,GAC1B6lB,EAAI,EAAQ,KAAe7lB,I,gBCZ3BtsC,EAAOD,QAUP,SAAc8qB,EAAQhe,GACpB,GAAGhF,MAAMC,QAAQ+iB,GACf,OAAO,IAAIjS,WAAWiS,GAGxB,OAAOwnC,EAASxlD,GAAY,QAAQge,IAbtC,IAAIxS,EAAS,EAAQ,IAEjBg6C,EAAW,CACXhtC,IAaJ,SAAkB9I,GAKhB,IAJA,IAAIrK,EAAOqK,EAAI1L,OAAS,EACpB2K,EAAM,IAAI5C,WAAW1G,GACrBogD,EAAY,GAER/xD,EAAI,EAAGqZ,EAAM2C,EAAI1L,OAAQtQ,EAAIqZ,IAAOrZ,EAC1C+xD,GAAa/1C,EAAI8qB,OAAO9mC,GAErBA,EAAI,GAAMA,EAAI,GAAO,IACtBib,EAAIjb,IAAI,GAAK6X,SAASk6C,EAAW,IACjCA,EAAY,IAIhB,OAAO92C,GA1BL+2C,KA6BJ,SAAkBh2C,GAKhB,IAJA,IACI3M,EACA4iD,EAFAnyC,EAAQ,GAIJ9f,EAAI,EAAGqZ,EAAM2C,EAAI1L,OAAQtQ,EAAIqZ,IAAOrZ,EAE1C,GAAQ,KADRiyD,EAAKj2C,EAAIE,WAAWlc,IACN,CACZqP,EAAM6iD,mBAAmBl2C,EAAI8qB,OAAO9mC,IAAI4b,OAAO,GAAGvN,MAAM,KACxD,IAAI,IAAIgN,EAAI,EAAG82C,EAAO9iD,EAAIiB,OAAQ+K,EAAI82C,IAAQ92C,EAC5CyE,EAAMA,EAAMxP,QAAUuH,SAASxI,EAAIgM,GAAI,SAGzCyE,EAAMA,EAAMxP,QAAU2hD,EAI1B,OAAO,IAAI55C,WAAWyH,IA7CpBhI,OAgDJ,SAAqBkE,GACnB,OAAO,IAAI3D,WAAWP,EAAOyL,YAAYvH,O,gBCxD3Cvc,EAAOD,QAWP,SAAYyb,EAAK3O,GACf,OAAO8lD,EAAS9lD,GAAY,QAAQ2O,IAVtC,IAAInD,EAAS,EAAQ,IACjBu6C,EAAS,EAAQ,KAEjBD,EAAW,CACXttC,IASJ,SAAgB7J,GAId,IAHA,IACIq3C,EADAt2C,EAAM,GAGFhc,EAAI,EAAGqZ,EAAM4B,EAAI3K,OAAQtQ,EAAIqZ,IAAOrZ,EAC1CsyD,EAAMr3C,EAAIjb,GACVgc,KAAe,IAANs2C,KAAgB,GAAGtqD,SAAS,IACrCgU,IAAc,GAANs2C,GAAYtqD,SAAS,IAG/B,OAAOgU,GAlBLg2C,KAqBJ,SAAgB/2C,GACd,OAAOo3C,EAAOp3C,IArBZnD,OAwBJ,SAAmBmD,GACjB,OAAOnD,EAAO6E,cAAc1B,M,cCjC9Bxb,EAAOD,QAiBP,SAAiBsgB,EAAO7F,EAAOC,GAC7BD,OAAkBzR,IAAVyR,EAAsB,EAAIA,EAClCC,OAAc1R,IAAR0R,EAAoB4F,EAAMxP,OAAS4J,EAEzC,IAGI0E,EACA2zC,EAJAziC,EAAM,EAEN0iC,EAAa,EAIjBC,EAAIniD,OACJsP,EAAItP,OAAS,EAEb,KAAMwf,EAAMhQ,EAAMxP,QAChBiiD,EAAKzyC,EAAMgQ,IACP0iC,GAVG,IAUWD,GAChB3zC,EAAM8zC,EAAkBH,GACxBC,GAAc5zC,EACXA,EAAM,IACP6zC,EAAIA,EAAIniD,QAAUiiD,EAAKI,EAAO,EAAI/zC,KAE5B4zC,GACRC,EAAIA,EAAIniD,QAAUiiD,EAAKI,EAAO,MAC5BH,GACgBC,EAAIniD,SACpBsP,EAAIA,EAAItP,QAAUsiD,EAAIC,EAAQJ,IAC9BA,EAAIniD,OAAS,IAGfsP,EAAIA,EAAItP,QAAUsiD,EAAIL,KAEtBziC,EAED2iC,EAAIniD,SAAWkiD,IAChB5yC,EAAIA,EAAItP,QAAUsiD,EAAIC,EAAQJ,IAC9BA,EAAIniD,OAAS,GAEf,OAAOsP,EAAIpY,KAAK,KApDlB,IAAIoY,EAAM,GACN6yC,EAAM,GACNG,EAAMnrD,OAAO8V,aACb4zC,EAAO,CAAC,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,GAC5CwB,EAAS,CACP,EACA,EACA,EACA,EACA,GACA,GACA,GACA,KA2CN,SAASD,EAAkBJ,GACzB,IAAI,IAAItyD,EAAI,EAAGA,EAAI,GACZsyD,EAAMnB,EAAKnxD,KADMA,GAKxB,OAAOA,EAGT,SAAS6yD,EAAQl0C,GAEf,IADA,IAAIiB,EAAM,EACF5f,EAAI,EAAGqZ,EAAMsF,EAAKrO,OAAQtQ,EAAIqZ,IAAOrZ,EAC3C4f,GAAOjB,EAAK3e,IAAuB,GAAfqZ,EAAMrZ,EAAI,GAEhC,OAAO4f,I,cCtETngB,EAAOD,QAAU,SAASmL,GACxB,OAAOA,aAAkB0N,a,cCF3B5Y,EAAOD,QAEP,SAAkByb,EAAKpQ,EAAMu8B,GAC3B,OAAOnsB,EAAI8C,SAASlT,GAAQ,EAAGu8B,GAAMnsB,EAAI3K,U,cCH3C7Q,EAAOD,QAEP,SAAcszD,EAASC,GACrB,IAAID,EAAQxiD,OACV,OAAO,IAAI+H,WAAW,GAGxB,IAAIgB,OAAe7Q,IAATuqD,EAAqBA,EAsBjC,SAAoBD,GAElB,IADA,IAAInhD,EAAO,EACH3R,EAAI,EAAGqZ,EAAMy5C,EAAQxiD,OAAQtQ,EAAIqZ,IAAOrZ,EAC9C2R,GAAQmhD,EAAQ9yD,GAAG8Y,WAErB,OAAOnH,EA3B+BqhD,CAAWF,GAC7ClzC,EAAM,IAAIvH,WAAWgB,GACrB45C,EAAMH,EAAQ,GACdzK,EAAS4K,EAAI3iD,OACb4iD,EAAS,EACTC,EAAS,EACTnzD,EAAI,EAER,KAAMA,EAAIqZ,GACL85C,IAAW9K,EAOdzoC,EAAI5f,KAAOizD,EAAIE,MANbA,EAAS,EAETF,EAAMH,IADJI,GAEF7K,EAAS4K,GAAOA,EAAI3iD,QAMxB,OAAOsP,I,cC1BTngB,EAAOD,QAIP,SAAc8qB,EAAQlL,EAAQg0C,EAAcC,EAAcC,GAKxD,GAJAF,EAAep0C,UAAU1O,OAAS,EAAI,EAAI8iD,EAC1CC,EAAer0C,UAAU1O,OAAS,EAAI,EAAI+iD,GAC1CC,EAAat0C,UAAU1O,OAAS,EAAIga,EAAOha,OAASgjD,KAElCD,EAChB,OAGF,GAAqB,IAAlBj0C,EAAO9O,QAAkC,IAAlBga,EAAOha,OAC/B,OAGCgjD,EAAahpC,EAAOha,SACrBgjD,EAAahpC,EAAOha,QAGnB8O,EAAO9O,OAAS8iD,EAAeE,EAAaD,IAC7CC,EAAal0C,EAAO9O,OAAS8iD,EAAeC,GAG9C,GAAG/oC,EAAO3f,SAAWyU,EAAOzU,OAC1B,OAKJ,SAAmB2f,EAAQlL,EAAQg0C,EAAcC,EAAcC,GAG7D,IAFA,IAAIj6C,EAAOi6C,EAAaD,EAAgBD,EAEhCpzD,EAAIozD,EAAc/3C,EAAIg4C,EAC1BrzD,EAAIqZ,IACFrZ,IACAqb,EACJ+D,EAAOpf,GAAKsqB,EAAOjP,GAZZk4C,CAAUjpC,EAAQlL,EAAQg0C,EAAcC,EAAcC,GAE/D,OAcF,SAAmBzoD,EAAMu8B,EAAI/rB,EAAGrb,EAAGwzD,GAMjC,IAJA,IAAIC,EAAOD,EAAOxzD,EACdqP,EAAM,IAAIgJ,WAAW1J,EAAMxO,KAAK0K,EAAM7K,EAAGyzD,IACzClhD,EAAI,EAEFvS,EAAIyzD,IAAQzzD,IAAKuS,EACrB60B,EAAG/rB,KAAOhM,EAAIkD,GArBTmhD,CAAUppC,EAAQlL,EAAQg0C,EAAcC,EAAcC,IA1B/D,IAAI3kD,EAAQ,GAAGA,O,cCFflP,EAAOD,QAAU,SAASmS,GACxB,OAAO,IAAI0G,WAAW1G,K,gBCDxBlS,EAAOD,QAAU,CACbshB,UAkBJ,SAAoB1B,EAAQu0C,GAC1B,OAAOv0C,EAAOu0C,IAlBZtyC,SAqBJ,SAAmBjC,EAAQu0C,GACzB,IAAIpM,EAAInoC,EAAOu0C,GACf,OAAOpM,EAAI,IAAOA,EAAIA,EAAI,KAtBxBxmC,aAyBJ,SAAwB3B,EAAQu0C,GAE9B,OADS/nD,EAAI/K,IAAIue,GACPw0C,UAAUD,EAAKv0C,EAAOvG,YAAY,IA1B1CmI,aA6BJ,SAAwB5B,EAAQu0C,GAE9B,OADS/nD,EAAI/K,IAAIue,GACPy0C,UAAUF,EAAKv0C,EAAOvG,YAAY,IA9B1CyI,YAiCJ,SAAuBlC,EAAQu0C,GAE7B,OADS/nD,EAAI/K,IAAIue,GACP00C,SAASH,EAAKv0C,EAAOvG,YAAY,IAlCzC2I,YAqCJ,SAAuBpC,EAAQu0C,GAE7B,OADS/nD,EAAI/K,IAAIue,GACP20C,SAASJ,EAAKv0C,EAAOvG,YAAY,IAtCzC6I,YAyCJ,SAAuBtC,EAAQu0C,GAE7B,OADS/nD,EAAI/K,IAAIue,GACP40C,WAAWL,EAAKv0C,EAAOvG,YAAY,IA1C3C+I,aA6CJ,SAAwBxC,EAAQu0C,GAE9B,OADS/nD,EAAI/K,IAAIue,GACP60C,WAAWN,EAAKv0C,EAAOvG,YAAY,IA9C3CqC,aAiDJ,SAAwBkE,EAAQu0C,GAE9B,OADS/nD,EAAI/K,IAAIue,GACPw0C,UAAUD,EAAKv0C,EAAOvG,YAAY,IAlD1CoI,aAqDJ,SAAwB7B,EAAQu0C,GAE9B,OADS/nD,EAAI/K,IAAIue,GACPy0C,UAAUF,EAAKv0C,EAAOvG,YAAY,IAtD1C0I,YAyDJ,SAAuBnC,EAAQu0C,GAE7B,OADS/nD,EAAI/K,IAAIue,GACP00C,SAASH,EAAKv0C,EAAOvG,YAAY,IA1DzC4I,YA6DJ,SAAuBrC,EAAQu0C,GAE7B,OADS/nD,EAAI/K,IAAIue,GACP20C,SAASJ,EAAKv0C,EAAOvG,YAAY,IA9DzC8I,YAiEJ,SAAuBvC,EAAQu0C,GAE7B,OADS/nD,EAAI/K,IAAIue,GACP40C,WAAWL,EAAKv0C,EAAOvG,YAAY,IAlE3CgJ,aAqEJ,SAAwBzC,EAAQu0C,GAE9B,OADS/nD,EAAI/K,IAAIue,GACP60C,WAAWN,EAAKv0C,EAAOvG,YAAY,KApE/C,IAAIjN,EAAM,EAAQ,K,gBCjBlBnM,EAAOD,QAAU,CACbwiB,WAkBJ,SAAqB5C,EAAQne,EAAO0yD,GAClC,OAAOv0C,EAAOu0C,GAAM1yD,GAlBlByhB,UAqBJ,SAAoBtD,EAAQne,EAAO0yD,GACjC,OAAOv0C,EAAOu0C,GAAM1yD,EAAQ,EAAIA,EAAQ,IAAQA,GArB9CihB,cAwBJ,SAAyB9C,EAAQne,EAAO0yD,GAEtC,OADS/nD,EAAI/K,IAAIue,GACP80C,UAAUP,EAAKv0C,EAAOvG,WAAY5X,GAAO,IAzBjDmhB,cA4BJ,SAAyBhD,EAAQne,EAAO0yD,GAEtC,OADS/nD,EAAI/K,IAAIue,GACP+0C,UAAUR,EAAKv0C,EAAOvG,WAAY5X,GAAO,IA7BjD0hB,aAgCJ,SAAwBvD,EAAQne,EAAO0yD,GAErC,OADS/nD,EAAI/K,IAAIue,GACPg1C,SAAST,EAAKv0C,EAAOvG,WAAY5X,GAAO,IAjChD4hB,aAoCJ,SAAwBzD,EAAQne,EAAO0yD,GAErC,OADS/nD,EAAI/K,IAAIue,GACPi1C,SAASV,EAAKv0C,EAAOvG,WAAY5X,GAAO,IArChD8hB,aAwCJ,SAAwB3D,EAAQne,EAAO0yD,GAErC,OADS/nD,EAAI/K,IAAIue,GACPk1C,WAAWX,EAAKv0C,EAAOvG,WAAY5X,GAAO,IAzClDgiB,cA4CJ,SAAyB7D,EAAQne,EAAO0yD,GAEtC,OADS/nD,EAAI/K,IAAIue,GACPm1C,WAAWZ,EAAKv0C,EAAOvG,WAAY5X,GAAO,IA7ClDkhB,cAgDJ,SAAyB/C,EAAQne,EAAO0yD,GAEtC,OADS/nD,EAAI/K,IAAIue,GACP80C,UAAUP,EAAKv0C,EAAOvG,WAAY5X,GAAO,IAjDjDohB,cAoDJ,SAAyBjD,EAAQne,EAAO0yD,GAEtC,OADS/nD,EAAI/K,IAAIue,GACP+0C,UAAUR,EAAKv0C,EAAOvG,WAAY5X,GAAO,IArDjD2hB,aAwDJ,SAAwBxD,EAAQne,EAAO0yD,GAErC,OADS/nD,EAAI/K,IAAIue,GACPg1C,SAAST,EAAKv0C,EAAOvG,WAAY5X,GAAO,IAzDhD6hB,aA4DJ,SAAwB1D,EAAQne,EAAO0yD,GAErC,OADS/nD,EAAI/K,IAAIue,GACPi1C,SAASV,EAAKv0C,EAAOvG,WAAY5X,GAAO,IA7DhD+hB,aAgEJ,SAAwB5D,EAAQne,EAAO0yD,GAErC,OADS/nD,EAAI/K,IAAIue,GACPk1C,WAAWX,EAAKv0C,EAAOvG,WAAY5X,GAAO,IAjElDiiB,cAoEJ,SAAyB9D,EAAQne,EAAO0yD,GAEtC,OADS/nD,EAAI/K,IAAIue,GACPm1C,WAAWZ,EAAKv0C,EAAOvG,WAAY5X,GAAO,KAnEtD,IAAI2K,EAAM,EAAQ,K,cCjBlBnM,EAAOD,QAAUg1D,EAEjB,IAAIC,EAAM,IACNC,EAAO,IAGX,SAASF,IACPztD,KAAK4zC,MAAQ,GAEf6Z,EAAQ5yD,UAAUkJ,MAElB,SAAeia,GACb,IAEI1L,EACAuG,EAHA+0C,EAAM5vC,EAAO0vC,EACb9Z,EAAQ5zC,KAAK4zC,MAKjB,GADAA,EAAMA,EAAMrqC,QAAUyU,EAAO2vC,EAC1BC,EACD,OAGFt7C,EAAMshC,EAAMrqC,OACZsP,EAAM,EAEN,IAAI,IAAI5f,EAAI,EAAGA,EAAIqZ,IAAOrZ,EACxB4f,GAAO+6B,EAAM36C,IAAO,EAAIA,EAK1B,OAFA26C,EAAMrqC,OAAS,OACfvJ,KAAKysC,OAAO5zB,K,cCFdngB,EAAOD,QAAU,SAAUo1D,EAAIC,GAC3B,IAeIC,EACAC,EAhBA9oD,EAAa2oD,EACb1lD,EAAa2lD,EACbz0D,EAAa6L,EAAEqE,OACf7O,EAAayN,EAAEoB,OACfmlC,GAAa,EACbuf,EAAa,KACbz5C,EAAanb,EAAI,EACjB6M,EAAa,GACbgoD,EAAa,GACbtgB,EAAa,GACbugB,EAAa,GAqBbruC,EAAI,SAAUtU,EAAGmM,EAAG8pB,GACpB,MAAO,CACH,EAAMj2B,EACN,EAAMmM,EACN,EAAM8pB,IAIV2sB,EAAU,SAAUC,EAAMl0D,GAC1B,MAAO,CACH,KAASk0D,EACT,EAASl0D,IAIbm0D,EAAQ,SAAU7sB,EAAG1mC,EAAGwzD,GACxB,IAAIx0D,EAAGyR,EAAGmM,EASV,IAPI5d,EADAgB,EAAIwzD,EACAroD,EAAKu7B,EAAE,EAAEjtB,GAETtO,EAAKu7B,EAAE,EAAEjtB,GAIjBhJ,GADAmM,EAAI9B,KAAKuC,IAAIrd,EAAGwzD,IACR9sB,EACDj2B,EAAInS,GAAKse,EAAIjd,GAAKwK,EAAEsG,KAAOrD,EAAEwP,MAC9BnM,IACAmM,EAKN,OAFAzR,EAAKu7B,EAAEjtB,GAAU05C,EAAS3kD,OAC1B2kD,EAASA,EAAS3kD,QAAU,IAAIuW,EAAEtU,EAAGmM,EAAG5d,GACjC4d,GAuCX,OAnFQte,GAAKqB,IACLqzD,EAAU7oD,EACV8oD,EAAU30D,EACV6L,EAAUiD,EACVA,EAAU4lD,EACV10D,EAAUqB,EACVA,EAAUszD,EACVtf,GAAU,EACVl6B,EAASnb,EAAI,GA2Ed,CACH+0C,YAAc,EACdJ,WAAc,EACdK,QAAc,EACdmgB,aAAe,WACX,OAAOP,GAEXQ,OAAS,WACL,OAAON,GAEXtgB,OAAS,WACL,OAAOD,GAEXD,QAAU,WACN,IAAI9B,EAAOjhC,EAAM8jD,EAAI3zD,EAAGhB,EAAG40D,EAAK11D,EAAGwoC,EAInC,IAHAoK,EAASnxC,EAAIrB,EACbuR,EAASvR,EAAIqB,EAAI,EACjBg0D,EAAS,GACJz1D,EAAE,EAAEA,EAAE2R,IAAO3R,EACdy1D,EAAGz1D,IAAM,EACTiN,EAAKjN,IAAM,EAEf8B,GAAK,EACL,EAAG,CAEC,IAAK0mC,KADH1mC,EACQ0mC,GAAGoK,EAAM,IAAIpK,EACnBitB,EAAGjtB,EAAEjtB,GAAU85C,EAAM7sB,EAAGitB,EAAGjtB,EAAE,EAAEjtB,GAAQ,EAAGk6C,EAAGjtB,EAAE,EAAEjtB,IAErD,IAAKitB,EAAEoK,EAAM9wC,EAAE0mC,GAAGoK,EAAM,IAAIpK,EACxBitB,EAAGjtB,EAAEjtB,GAAU85C,EAAM7sB,EAAGitB,EAAGjtB,EAAE,EAAEjtB,GAAQ,EAAGk6C,EAAGjtB,EAAE,EAAEjtB,IAErDk6C,EAAG7iB,EAAMr3B,GAAU85C,EAAMziB,EAAO6iB,EAAG7iB,EAAM,EAAEr3B,GAAQ,EAAGk6C,EAAG7iB,EAAM,EAAEr3B,UAC5Dk6C,EAAG7iB,EAAMr3B,KAAY9Z,GAO9B,IALAuzD,EAAKpiB,EAAQ,EAAI9wC,EAEjBhB,EAAImM,EAAK2lC,EAAMr3B,GAEfm6C,EAAO,IACO,IAAP50D,GACH40D,EAAIA,EAAIplD,QAAU,IAAIuW,EAAEouC,EAASn0D,GAAGyR,EAAG0iD,EAASn0D,GAAG4d,EAAG,MACtD5d,EAAIm0D,EAASn0D,GAAG0nC,GA7EZ,SAAUktB,GACtB,IAAkBC,EAAQC,EAAQ51D,EAGlC,IAFkB,EAClB21D,EAASC,EAAS,EACb51D,EAAE01D,EAAIplD,OAAO,EAAEtQ,GAAG,IAAIA,EACvB,KAAM21D,EAASD,EAAI11D,GAAGuS,GAAKqjD,EAASF,EAAI11D,GAAG0e,GACnCg3C,EAAI11D,GAAG0e,EAAIg3C,EAAI11D,GAAGuS,EAAIqjD,EAASD,GAE3BhhB,EAAIA,EAAIrkC,QAAU,IAAI6kD,EAAQjmD,EAAE0mD,GADhCngB,GA9DH,EAEA,GAiED,IACEmgB,GACKF,EAAI11D,GAAG0e,EAAIg3C,EAAI11D,GAAGuS,EAAIqjD,EAASD,GAElChhB,EAAIA,EAAIrkC,QAAU,IAAI6kD,EAAQlpD,EAAE0pD,GADhClgB,EApEH,GAFA,GA2ED,IACEkgB,IAEFhhB,EAAIA,EAAIrkC,QAAU,IAAI6kD,EAAQlpD,EAAE0pD,GA7E/B,GA8EDT,GAAOjpD,EAAE0pD,GACT,EACA,IACEA,IACAC,GAmDVC,CAAUH,O,yOC3Kf,SAAeI,EAAtB,kC,4BAAO,WAAoC,aAAEh4B,EAAF,KAAgB5vB,EAAhB,QAAsB2B,IAC/D,MAAM6H,EAAS,GAEf,IAAIq+C,EAAO,GACX,IAAK,MAAOx0D,EAAKN,KAAUP,OAAOiT,QAAQ9D,GACxCkmD,aAAkBx0D,KAAON,KAE3B,IAAI+0D,OAAc,IAAIl4B,GAAct2B,KAAK,QAAQuuD,UAAazqC,IAAIE,QAKlE,IAAK,MAAOjqB,EAAKN,KAAUP,OAAOiT,QAAQzF,GACxCwJ,EAAOlG,KAAK+F,IAAWi1B,UAAUvrC,KAASM,IAAMy0D,QAChDA,EAAO,GAGT,OADAt+C,EAAOlG,KAAK+F,IAAWk1B,SAChB/0B,I,8TCdF,SAAeu+C,EAAtB,kC,4BAAO,WAA2B,KAChCloD,EAAO,UADyB,IAEhCvC,EAFgC,OAGhCmE,EAASnI,YAAKgE,EAAK,QACnBjD,GAAImH,EAAM5B,IAAMjN,IAAIkN,GAAMlN,IAAI,MAJE,cAKhCq1D,GAAgB,IAEhB,MAAM3tD,EAAK,IAAID,IAAWoH,GAC1B,IACE,GAAIwmD,EAAe,CAEjB,MAAMp4B,EAAe,CACnB,YACA,YACA,gBACA,UACA,eACA,aACA,yBACA,gCAEF,IAAI12B,QAAaqI,IAAckB,SAAS,CACtCpI,KACAoH,SACAtF,SAAU,SAEZjD,EAAOA,EAAKwE,IAAIgD,WAAeA,KAC/B,MAAMV,EAAO,GACb9G,EAAKmJ,QAAQ,QACb,IAAK,MAAMhP,KAAO6F,EAChB8G,EAAK3M,SAAakO,IAAcqC,QAAQ,CAAEvJ,KAAIoH,SAAQf,IAAKrN,IAE7D,MAAMsO,EAAU,GAOhB,OANAA,EAAO,WAAiBJ,IAAcqC,QAAQ,CAC5CvJ,KACAoH,SACAf,IAAK,OACLgD,MAAO,IAEFkkD,EAAoB,CACzBh4B,eACA5vB,OACA2B,aAGJ,MAAOtF,GAEP,MADAA,EAAIxC,OAAS,iBACPwC,K,8ZClCH,SAAS4rD,EAAUxrD,GAKxB,OAAIA,EAAO2F,OADY,YAGhB3F,EAAOgE,MAAM,EAAG,KAAM8Y,KAAKxmB,GAAmB,IAAVA,G,4DCtBtC,MAAMgM,OAAuBzE,IAAhB4tD,IAAMC,MAAsBD,IAAQA,IAAMC,M,6LCFvD,SAAeC,GAAtB,mC,6BAAO,UAAuC5+C,GAC5C,MAAMhN,EAAO6M,IAAW0iB,aAAaviB,GACrC,IAAI6V,GAAO,EACPuQ,EAAe,KACnB,MAAMoO,EAAQ,GACRC,EAAQ,GACRC,EAAW,GACjB,IAAIx6B,EACAy6B,EACJ,MAAMhlB,EAAU,GAChB,IAAI8f,GAAW,EACf,MAAQ5Z,GAAM,CACZ,MAAMjf,QAAa5D,IACnB,IAAa,IAAT4D,EAAe,MACnB,GAAa,OAATA,EAAe,SACnB,MAAO/M,EAAKN,KAAUs1D,GAAQjoD,EAC3BtG,SAAS,QACToG,OACAC,MAAM,KAET,OADKyvB,IAAcA,EAAey4B,GAC1Bh1D,GACN,IAAK,OACH2qC,EAAM16B,KAAKvQ,GACX,MACF,IAAK,OACHkrC,EAAM36B,KAAKvQ,GACX,MACF,IAAK,UACHmrC,EAAS56B,KAAKvQ,GACd,MACF,IAAK,SACH2Q,EAAQiG,SAAS5W,GACjB,MACF,IAAK,eACHorC,EAAQx0B,SAAS5W,GACjB,MACF,IAAK,aACHomB,EAAQ7V,KAAKvQ,GACb,MACF,IAAK,kBACHkmC,GAAW,EACX,MACF,IAAK,OACH5Z,GAAO,GAIb,MAAO,CACLuQ,eACAoO,QACAC,QACAC,WACAx6B,QACAy6B,QACAhlB,UACA8f,WACA5Z,U,8NC1DJ"",""file"":""internal.umd.min.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""git\""] = factory();\n\telse\n\t\troot[\""git\""] = factory();\n})(self, function() {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 134);\n"",""// modeled after Therror https://github.com/therror/therror/\n// but with the goal of being much lighter weight.\n\nconst messages = {\n  FileReadError: `Could not read file \""{ filepath }\"".`,\n  MissingRequiredParameterError: `The function \""{ function }\"" requires a \""{ parameter }\"" parameter but none was provided.`,\n  InvalidRefNameError: `Failed to { verb } { noun } \""{ ref }\"" because that name would not be a valid git reference. A valid alternative would be \""{ suggestion }\"".`,\n  InvalidParameterCombinationError: `The function \""{ function }\"" doesn't take these parameters simultaneously: { parameters }`,\n  RefExistsError: `Failed to create { noun } \""{ ref }\"" because { noun } \""{ ref }\"" already exists.`,\n  RefNotExistsError: `Failed to { verb } { noun } \""{ ref }\"" because { noun } \""{ ref }\"" does not exists.`,\n  BranchDeleteError: `Failed to delete branch \""{ ref }\"" because branch \""{ ref }\"" checked out now.`,\n  NoHeadCommitError: `Failed to create { noun } \""{ ref }\"" because the HEAD ref could not be resolved to a commit.`,\n  CommitNotFetchedError: `Failed to checkout \""{ ref }\"" because commit { oid } is not available locally. Do a git fetch to make the branch available locally.`,\n  ObjectTypeUnknownFail: `Object { oid } has unknown type \""{ type }\"".`,\n  ObjectTypeAssertionFail: `Object { oid } was anticipated to be a { expected } but it is a { type }. This is probably a bug deep in isomorphic-git!`,\n  ObjectTypeAssertionInTreeFail: `Object { oid } in tree for \""{ entrypath }\"" was an unexpected object type \""{ type }\"".`,\n  ObjectTypeAssertionInRefFail: `{ ref } is not pointing to a \""{ expected }\"" object but a \""{ type }\"" object.`,\n  ObjectTypeAssertionInPathFail: `Found a blob { oid } in the path \""{ path }\"" where a tree was expected.`,\n  MissingAuthorError: `Author name and email must be specified as an argument or in the .git/config file.`,\n  MissingCommitterError: `Committer name and email must be specified if a committer object is passed.`,\n  MissingTaggerError: `Tagger name and email must be specified as an argument or in the .git/config file.`,\n  GitRootNotFoundError: `Unable to find git root for { filepath }.`,\n  UnparseableServerResponseFail: `Unparsable response from server! Expected \""unpack ok\"" or \""unpack [error message]\"" but received \""{ line }\"".`,\n  InvalidDepthParameterError: `Invalid value for depth parameter: { depth }`,\n  RemoteDoesNotSupportShallowFail: `Remote does not support shallow fetches.`,\n  RemoteDoesNotSupportDeepenSinceFail: `Remote does not support shallow fetches by date.`,\n  RemoteDoesNotSupportDeepenNotFail: `Remote does not support shallow fetches excluding commits reachable by refs.`,\n  RemoteDoesNotSupportDeepenRelativeFail: `Remote does not support shallow fetches relative to the current shallow depth.`,\n  RemoteDoesNotSupportSmartHTTP: `Remote did not reply using the \""smart\"" HTTP protocol. Expected \""001e# service=git-upload-pack\"" but received: { preview }`,\n  CorruptShallowOidFail: `non-40 character shallow oid: { oid }`,\n  FastForwardFail: `A simple fast-forward merge was not possible.`,\n  MergeNotSupportedFail: `Merges with conflicts are not supported yet.`,\n  DirectorySeparatorsError: `\""filepath\"" parameter should not include leading or trailing directory separators because these can cause problems on some platforms`,\n  ResolveTreeError: `Could not resolve { oid } to a tree.`,\n  ResolveCommitError: `Could not resolve { oid } to a commit.`,\n  DirectoryIsAFileError: `Unable to read \""{ oid }:{ filepath }\"" because encountered a file where a directory was expected.`,\n  TreeOrBlobNotFoundError: `No file or directory found at \""{ oid }:{ filepath }\"".`,\n  NotImplementedFail: `TODO: { thing } still needs to be implemented!`,\n  ReadObjectFail: `Failed to read git object with oid { oid }`,\n  NotAnOidFail: `Expected a 40-char hex object id but saw \""{ value }\"".`,\n  NoRefspecConfiguredError: `Could not find a fetch refspec for remote \""{ remote }\"".\\\\nMake sure the config file has an entry like the following:\\\\n[remote \""{ remote }\""]\\\\nfetch = +refs/heads/*:refs/remotes/origin/*`,\n  MismatchRefValueError: `Provided oldValue doesn\\\\'t match the actual value of \""{ ref }\"".`,\n  ResolveRefError: `Could not resolve reference \""{ ref }\"".`,\n  ExpandRefError: `Could not expand reference \""{ ref }\"".`,\n  EmptyServerResponseFail: `Empty response from git server.`,\n  AssertServerResponseFail: `Expected \""{ expected }\"" but got \""{ actual }\"".`,\n  HTTPError: `HTTP Error: { statusCode } { statusMessage }`,\n  RemoteUrlParseError: `Cannot parse remote URL: \""{ url }\""`,\n  UnknownTransportError: `Git remote \""{ url }\"" uses an unrecognized transport protocol: \""{ transport }\""`,\n  AcquireLockFileFail: `Unable to acquire lockfile \""{ filename }\"". Exhausted tries.`,\n  DoubleReleaseLockFileFail: `Cannot double-release lockfile \""{ filename }\"".`,\n  InternalFail: `An internal error caused this command to fail. Please file a bug report at https://github.com/isomorphic-git/isomorphic-git/issues with this error message: { message }`,\n  UnknownOauth2Format: `I do not know how { company } expects its Basic Auth headers to be formatted for OAuth2 usage. If you do, you can use the regular username and password parameters to set the basic auth header yourself.`,\n  MissingPasswordTokenError: `Missing password or token`,\n  MissingUsernameError: `Missing username`,\n  MixPasswordTokenError: `Cannot mix \""password\"" with \""token\""`,\n  MixUsernamePasswordTokenError: `Cannot mix \""username\"" and \""password\"" with \""token\""`,\n  MissingTokenError: `Missing token`,\n  MixUsernameOauth2formatMissingTokenError: `Cannot mix \""username\"" with \""oauth2format\"". Missing token.`,\n  MixPasswordOauth2formatMissingTokenError: `Cannot mix \""password\"" with \""oauth2format\"". Missing token.`,\n  MixUsernamePasswordOauth2formatMissingTokenError: `Cannot mix \""username\"" and \""password\"" with \""oauth2format\"". Missing token.`,\n  MixUsernameOauth2formatTokenError: `Cannot mix \""username\"" with \""oauth2format\"" and \""token\""`,\n  MixPasswordOauth2formatTokenError: `Cannot mix \""password\"" with \""oauth2format\"" and \""token\""`,\n  MixUsernamePasswordOauth2formatTokenError: `Cannot mix \""username\"" and \""password\"" with \""oauth2format\"" and \""token\""`,\n  MaxSearchDepthExceeded: `Maximum search depth of { depth } exceeded.`,\n  PushRejectedNonFastForward: `Push rejected because it was not a simple fast-forward. Use \""force: true\"" to override.`,\n  PushRejectedTagExists: `Push rejected because tag already exists. Use \""force: true\"" to override.`,\n  AddingRemoteWouldOverwrite: `Adding remote { remote } would overwrite the existing remote. Use \""force: true\"" to override.`,\n  PluginUndefined: `A command required the \""{ plugin }\"" plugin but it was undefined.`,\n  CoreNotFound: `No plugin core with the name \""{ core }\"" is registered.`,\n  PluginSchemaViolation: `Schema check failed for \""{ plugin }\"" plugin; missing { method } method.`,\n  PluginUnrecognized: `Unrecognized plugin type \""{ plugin }\""`,\n  AmbiguousShortOid: `Found multiple oids matching \""{ short }\"" ({ matches }). Use a longer abbreviation length to disambiguate them.`,\n  ShortOidNotFound: `Could not find an object matching \""{ short }\"".`,\n  CheckoutConflictError: `Your local changes to the following files would be overwritten by checkout: { filepaths }`\n}\n\nexport const E = {\n  FileReadError: `FileReadError`,\n  MissingRequiredParameterError: `MissingRequiredParameterError`,\n  InvalidRefNameError: `InvalidRefNameError`,\n  InvalidParameterCombinationError: `InvalidParameterCombinationError`,\n  RefExistsError: `RefExistsError`,\n  RefNotExistsError: `RefNotExistsError`,\n  BranchDeleteError: `BranchDeleteError`,\n  NoHeadCommitError: `NoHeadCommitError`,\n  CommitNotFetchedError: `CommitNotFetchedError`,\n  ObjectTypeUnknownFail: `ObjectTypeUnknownFail`,\n  ObjectTypeAssertionFail: `ObjectTypeAssertionFail`,\n  ObjectTypeAssertionInTreeFail: `ObjectTypeAssertionInTreeFail`,\n  ObjectTypeAssertionInRefFail: `ObjectTypeAssertionInRefFail`,\n  ObjectTypeAssertionInPathFail: `ObjectTypeAssertionInPathFail`,\n  MissingAuthorError: `MissingAuthorError`,\n  MissingCommitterError: `MissingCommitterError`,\n  MissingTaggerError: `MissingTaggerError`,\n  GitRootNotFoundError: `GitRootNotFoundError`,\n  UnparseableServerResponseFail: `UnparseableServerResponseFail`,\n  InvalidDepthParameterError: `InvalidDepthParameterError`,\n  RemoteDoesNotSupportShallowFail: `RemoteDoesNotSupportShallowFail`,\n  RemoteDoesNotSupportDeepenSinceFail: `RemoteDoesNotSupportDeepenSinceFail`,\n  RemoteDoesNotSupportDeepenNotFail: `RemoteDoesNotSupportDeepenNotFail`,\n  RemoteDoesNotSupportDeepenRelativeFail: `RemoteDoesNotSupportDeepenRelativeFail`,\n  RemoteDoesNotSupportSmartHTTP: `RemoteDoesNotSupportSmartHTTP`,\n  CorruptShallowOidFail: `CorruptShallowOidFail`,\n  FastForwardFail: `FastForwardFail`,\n  MergeNotSupportedFail: `MergeNotSupportedFail`,\n  DirectorySeparatorsError: `DirectorySeparatorsError`,\n  ResolveTreeError: `ResolveTreeError`,\n  ResolveCommitError: `ResolveCommitError`,\n  DirectoryIsAFileError: `DirectoryIsAFileError`,\n  TreeOrBlobNotFoundError: `TreeOrBlobNotFoundError`,\n  NotImplementedFail: `NotImplementedFail`,\n  ReadObjectFail: `ReadObjectFail`,\n  NotAnOidFail: `NotAnOidFail`,\n  NoRefspecConfiguredError: `NoRefspecConfiguredError`,\n  MismatchRefValueError: `MismatchRefValueError`,\n  ResolveRefError: `ResolveRefError`,\n  ExpandRefError: `ExpandRefError`,\n  EmptyServerResponseFail: `EmptyServerResponseFail`,\n  AssertServerResponseFail: `AssertServerResponseFail`,\n  HTTPError: `HTTPError`,\n  RemoteUrlParseError: `RemoteUrlParseError`,\n  UnknownTransportError: `UnknownTransportError`,\n  AcquireLockFileFail: `AcquireLockFileFail`,\n  DoubleReleaseLockFileFail: `DoubleReleaseLockFileFail`,\n  InternalFail: `InternalFail`,\n  UnknownOauth2Format: `UnknownOauth2Format`,\n  MissingPasswordTokenError: `MissingPasswordTokenError`,\n  MissingUsernameError: `MissingUsernameError`,\n  MixPasswordTokenError: `MixPasswordTokenError`,\n  MixUsernamePasswordTokenError: `MixUsernamePasswordTokenError`,\n  MissingTokenError: `MissingTokenError`,\n  MixUsernameOauth2formatMissingTokenError: `MixUsernameOauth2formatMissingTokenError`,\n  MixPasswordOauth2formatMissingTokenError: `MixPasswordOauth2formatMissingTokenError`,\n  MixUsernamePasswordOauth2formatMissingTokenError: `MixUsernamePasswordOauth2formatMissingTokenError`,\n  MixUsernameOauth2formatTokenError: `MixUsernameOauth2formatTokenError`,\n  MixPasswordOauth2formatTokenError: `MixPasswordOauth2formatTokenError`,\n  MixUsernamePasswordOauth2formatTokenError: `MixUsernamePasswordOauth2formatTokenError`,\n  MaxSearchDepthExceeded: `MaxSearchDepthExceeded`,\n  PushRejectedNonFastForward: `PushRejectedNonFastForward`,\n  PushRejectedTagExists: `PushRejectedTagExists`,\n  AddingRemoteWouldOverwrite: `AddingRemoteWouldOverwrite`,\n  PluginUndefined: `PluginUndefined`,\n  CoreNotFound: `CoreNotFound`,\n  PluginSchemaViolation: `PluginSchemaViolation`,\n  PluginUnrecognized: `PluginUnrecognized`,\n  AmbiguousShortOid: `AmbiguousShortOid`,\n  ShortOidNotFound: `ShortOidNotFound`,\n  CheckoutConflictError: `CheckoutConflictError`\n}\n\nfunction renderTemplate (template, values) {\n  let result = template\n  for (const key of Object.keys(values)) {\n    let subs\n    if (Array.isArray(values[key])) {\n      subs = values[key].join(', ')\n    } else {\n      subs = String(values[key])\n    }\n    result = result.replace(new RegExp(`{ ${key} }`, 'g'), subs)\n  }\n  return result\n}\n\nexport class GitError extends Error {\n  constructor (code, data) {\n    super()\n    this.name = code\n    this.code = code\n    this.data = data\n    this.message = renderTemplate(messages[code], data || {})\n    if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor)\n  }\n\n  toJSON () {\n    return {\n      code: this.code,\n      data: this.data,\n      caller: this.caller,\n      message: this.message\n    }\n  }\n\n  toString () {\n    return this.stack.toString()\n  }\n}\n"",""import pify from 'pify'\n\nimport { E, GitError } from '../models/GitError.js'\nimport { compareStrings } from '../utils/compareStrings.js'\nimport { dirname } from '../utils/dirname.js'\nimport { sleep } from '../utils/sleep.js'\n\nconst delayedReleases = new Map()\nconst fsmap = new WeakMap()\n/**\n * This is just a collection of helper functions really. At least that's how it started.\n */\nexport class FileSystem {\n  constructor (fs) {\n    // This is not actually the most logical place to put this, but in practice\n    // putting the check here should work great.\n    if (fs === undefined) {\n      throw new GitError(E.PluginUndefined, { plugin: 'fs' })\n    }\n    // This is sad... but preserving reference equality is now necessary\n    // to deal with cache invalidation in GitIndexManager.\n    if (fsmap.has(fs)) {\n      return fsmap.get(fs)\n    }\n    if (fsmap.has(fs._original_unwrapped_fs)) {\n      return fsmap.get(fs._original_unwrapped_fs)\n    }\n\n    if (typeof fs._original_unwrapped_fs !== 'undefined') return fs\n\n    if (\n      Object.getOwnPropertyDescriptor(fs, 'promises') &&\n      Object.getOwnPropertyDescriptor(fs, 'promises').enumerable\n    ) {\n      this._readFile = fs.promises.readFile.bind(fs.promises)\n      this._writeFile = fs.promises.writeFile.bind(fs.promises)\n      this._mkdir = fs.promises.mkdir.bind(fs.promises)\n      this._rmdir = fs.promises.rmdir.bind(fs.promises)\n      this._unlink = fs.promises.unlink.bind(fs.promises)\n      this._stat = fs.promises.stat.bind(fs.promises)\n      this._lstat = fs.promises.lstat.bind(fs.promises)\n      this._readdir = fs.promises.readdir.bind(fs.promises)\n      this._readlink = fs.promises.readlink.bind(fs.promises)\n      this._symlink = fs.promises.symlink.bind(fs.promises)\n    } else {\n      this._readFile = pify(fs.readFile.bind(fs))\n      this._writeFile = pify(fs.writeFile.bind(fs))\n      this._mkdir = pify(fs.mkdir.bind(fs))\n      this._rmdir = pify(fs.rmdir.bind(fs))\n      this._unlink = pify(fs.unlink.bind(fs))\n      this._stat = pify(fs.stat.bind(fs))\n      this._lstat = pify(fs.lstat.bind(fs))\n      this._readdir = pify(fs.readdir.bind(fs))\n      this._readlink = pify(fs.readlink.bind(fs))\n      this._symlink = pify(fs.symlink.bind(fs))\n    }\n    this._original_unwrapped_fs = fs\n    fsmap.set(fs, this)\n  }\n\n  /**\n   * Return true if a file exists, false if it doesn't exist.\n   * Rethrows errors that aren't related to file existance.\n   */\n  async exists (filepath, options = {}) {\n    try {\n      await this._stat(filepath)\n      return true\n    } catch (err) {\n      if (err.code === 'ENOENT' || err.code === 'ENOTDIR') {\n        return false\n      } else {\n        console.log('Unhandled error in \""FileSystem.exists()\"" function', err)\n        throw err\n      }\n    }\n  }\n\n  /**\n   * Return the contents of a file if it exists, otherwise returns null.\n   *\n   * @param {string} filepath\n   * @param {object} [options]\n   *\n   * @returns {Buffer|null}\n   */\n  async read (filepath, options = {}) {\n    try {\n      let buffer = await this._readFile(filepath, options)\n      // Convert plain ArrayBuffers to Buffers\n      if (typeof buffer !== 'string') {\n        buffer = Buffer.from(buffer)\n      }\n      return buffer\n    } catch (err) {\n      return null\n    }\n  }\n\n  /**\n   * Write a file (creating missing directories if need be) without throwing errors.\n   *\n   * @param {string} filepath\n   * @param {Buffer|Uint8Array|string} contents\n   * @param {object|string} [options]\n   */\n  async write (filepath, contents, options = {}) {\n    try {\n      await this._writeFile(filepath, contents, options)\n      return\n    } catch (err) {\n      // Hmm. Let's try mkdirp and try again.\n      await this.mkdir(dirname(filepath))\n      await this._writeFile(filepath, contents, options)\n    }\n  }\n\n  /**\n   * Make a directory (or series of nested directories) without throwing an error if it already exists.\n   */\n  async mkdir (filepath, _selfCall = false) {\n    try {\n      await this._mkdir(filepath)\n      return\n    } catch (err) {\n      // If err is null then operation succeeded!\n      if (err === null) return\n      // If the directory already exists, that's OK!\n      if (err.code === 'EEXIST') return\n      // Avoid infinite loops of failure\n      if (_selfCall) throw err\n      // If we got a \""no such file or directory error\"" backup and try again.\n      if (err.code === 'ENOENT') {\n        const parent = dirname(filepath)\n        // Check to see if we've gone too far\n        if (parent === '.' || parent === '/' || parent === filepath) throw err\n        // Infinite recursion, what could go wrong?\n        await this.mkdir(parent)\n        await this.mkdir(filepath, true)\n      }\n    }\n  }\n\n  /**\n   * Delete a file without throwing an error if it is already deleted.\n   */\n  async rm (filepath) {\n    try {\n      await this._unlink(filepath)\n    } catch (err) {\n      if (err.code !== 'ENOENT') throw err\n    }\n  }\n\n  /**\n   * Delete a directory without throwing an error if it is already deleted.\n   */\n  async rmdir (filepath) {\n    try {\n      await this._rmdir(filepath)\n    } catch (err) {\n      if (err.code !== 'ENOENT') throw err\n    }\n  }\n\n  /**\n   * Read a directory without throwing an error is the directory doesn't exist\n   */\n  async readdir (filepath) {\n    try {\n      const names = await this._readdir(filepath)\n      // Ordering is not guaranteed, and system specific (Windows vs Unix)\n      // so we must sort them ourselves.\n      names.sort(compareStrings)\n      return names\n    } catch (err) {\n      if (err.code === 'ENOTDIR') return null\n      return []\n    }\n  }\n\n  /**\n   * Return a flast list of all the files nested inside a directory\n   *\n   * Based on an elegant concurrent recursive solution from SO\n   * https://stackoverflow.com/a/45130990/2168416\n   */\n  async readdirDeep (dir) {\n    const subdirs = await this._readdir(dir)\n    const files = await Promise.all(\n      subdirs.map(async subdir => {\n        const res = dir + '/' + subdir\n        return (await this._stat(res)).isDirectory()\n          ? this.readdirDeep(res)\n          : res\n      })\n    )\n    return files.reduce((a, f) => a.concat(f), [])\n  }\n\n  /**\n   * Return the Stats of a file/symlink if it exists, otherwise returns null.\n   * Rethrows errors that aren't related to file existance.\n   */\n  async lstat (filename) {\n    try {\n      const stats = await this._lstat(filename)\n      return stats\n    } catch (err) {\n      if (err.code === 'ENOENT') {\n        return null\n      }\n      throw err\n    }\n  }\n\n  /**\n   * Reads the contents of a symlink if it exists, otherwise returns null.\n   * Rethrows errors that aren't related to file existance.\n   */\n  async readlink (filename, opts = { encoding: 'buffer' }) {\n    // Note: FileSystem.readlink returns a buffer by default\n    // so we can dump it into GitObject.write just like any other file.\n    try {\n      return this._readlink(filename, opts)\n    } catch (err) {\n      if (err.code === 'ENOENT') {\n        return null\n      }\n      throw err\n    }\n  }\n\n  /**\n   * Write the contents of buffer to a symlink.\n   */\n  async writelink (filename, buffer) {\n    return this._symlink(buffer.toString('utf8'), filename)\n  }\n\n  async lock (filename, triesLeft = 3) {\n    // check to see if we still have it\n    if (delayedReleases.has(filename)) {\n      clearTimeout(delayedReleases.get(filename))\n      delayedReleases.delete(filename)\n      return\n    }\n    if (triesLeft === 0) {\n      throw new GitError(E.AcquireLockFileFail, { filename })\n    }\n    try {\n      await this._mkdir(`${filename}.lock`)\n    } catch (err) {\n      if (err.code === 'EEXIST') {\n        await sleep(100)\n        await this.lock(filename, triesLeft - 1)\n      }\n    }\n  }\n\n  async unlock (filename, delayRelease = 50) {\n    if (delayedReleases.has(filename)) {\n      throw new GitError(E.DoubleReleaseLockFileFail, { filename })\n    }\n    // Basically, we lie and say it was deleted ASAP.\n    // But really we wait a bit to see if you want to acquire it again.\n    delayedReleases.set(\n      filename,\n      setTimeout(async () => {\n        delayedReleases.delete(filename)\n        await this._rmdir(`${filename}.lock`)\n      }, delayRelease)\n    )\n  }\n}\n"",""export function normalizePath (path) {\n  return path\n    .replace(/\\/\\.\\//g, '/') // Replace '/./' with '/'\n    .replace(/\\/{2,}/g, '/') // Replace consecutive '/'\n    .replace(/^\\/\\.$/, '/') // if path === '/.' return '/'\n    .replace(/^\\.\\/$/, '.') // if path === './' return '.'\n    .replace(/^\\.\\//, '') // Remove leading './'\n    .replace(/\\/\\.$/, '') // Remove trailing '/.'\n    .replace(/(.+)\\/$/, '$1') // Remove trailing '/'\n    .replace(/^$/, '.') // if path === '' return '.'\n}\n"",""// For some reason path.posix.join is undefined in webpack\n// Also, this is just much smaller\nimport { normalizePath } from './normalizePath.js'\n\nexport function join (...parts) {\n  return normalizePath(parts.map(normalizePath).join('/'))\n}\n"",""import { E, GitError } from '../models/GitError'\n\n// A collection of plugins is called a core.\n// 99.99% of the time you will only need a single core,\n// Because if you load isomorphic-git in an entirely new execution context\n// (say a WebWorker) you'll have an entirely separate instance of the module itself\n// and therefore a separate core. HOWEVER, for testing purposes, or a weird\n// multi-tenant environment where you need two distinct instances of isomorphic-git's\n// plugin stack but they share the same module instance - IDK maybe you are writing\n// a tool that copies git objects between different filesystems so you want two\n// cores with different filesystem modules. Anyway, it is architected that way.\n\nclass PluginCore extends Map {\n  set (key, value) {\n    const verifySchema = (key, value) => {\n      // ugh. this sucks\n      if (\n        key === 'fs' &&\n        Object.getOwnPropertyDescriptor(value, 'promises') &&\n        Object.getOwnPropertyDescriptor(value, 'promises').enumerable\n      ) {\n        value = value.promises\n      }\n      const pluginSchemas = {\n        credentialManager: ['fill', 'approved', 'rejected'],\n        emitter: ['emit'],\n        fs: [\n          'lstat',\n          'mkdir',\n          'readdir',\n          'readFile',\n          'rmdir',\n          'stat',\n          'unlink',\n          'writeFile'\n        ],\n        pgp: ['sign', 'verify'],\n        http: []\n      }\n      if (!Object.prototype.hasOwnProperty.call(pluginSchemas, key)) {\n        throw new GitError(E.PluginUnrecognized, { plugin: key })\n      }\n      for (const method of pluginSchemas[key]) {\n        if (value[method] === undefined) {\n          throw new GitError(E.PluginSchemaViolation, { plugin: key, method })\n        }\n      }\n    }\n    verifySchema(key, value)\n    // There can be only one.\n    super.set(key, value)\n  }\n\n  get (key) {\n    // Critical plugins throw an error instead of returning undefined.\n    const critical = new Set(['credentialManager', 'fs', 'pgp'])\n    if (!super.has(key) && critical.has(key)) {\n      throw new GitError(E.PluginUndefined, { plugin: key })\n    }\n    return super.get(key)\n  }\n}\n\n// 99.99% of the time you can simply import { plugins } instead of cores.\nexport const plugins = new PluginCore()\n\nconst _cores = new Map([['default', plugins]])\n\nexport const cores = {\n  // 'get' validates that a core has been registered\n  get (key) {\n    if (_cores.has(key)) {\n      return _cores.get(key)\n    } else {\n      throw new GitError(E.CoreNotFound, { core: key })\n    }\n  },\n  // 'create' works just like get but will create the core if it doesn't exist yet\n  create (key) {\n    if (_cores.has(key)) {\n      return _cores.get(key)\n    } else {\n      _cores.set(key, new Map())\n      return _cores.get(key)\n    }\n  }\n}\n"",""export class GitPackedRefs {\n  constructor (text) {\n    this.refs = new Map()\n    this.parsedConfig = []\n    if (text) {\n      let key = null\n      this.parsedConfig = text\n        .trim()\n        .split('\\n')\n        .map(line => {\n          if (/^\\s*#/.test(line)) {\n            return { line, comment: true }\n          }\n          const i = line.indexOf(' ')\n          if (line.startsWith('^')) {\n            // This is a oid for the commit associated with the annotated tag immediately preceding this line.\n            // Trim off the '^'\n            const value = line.slice(1)\n            // The tagname^{} syntax is based on the output of `git show-ref --tags -d`\n            this.refs.set(key + '^{}', value)\n            return { line, ref: key, peeled: value }\n          } else {\n            // This is an oid followed by the ref name\n            const value = line.slice(0, i)\n            key = line.slice(i + 1)\n            this.refs.set(key, value)\n            return { line, ref: key, oid: value }\n          }\n        })\n    }\n    return this\n  }\n\n  static from (text) {\n    return new GitPackedRefs(text)\n  }\n\n  delete (ref) {\n    this.parsedConfig = this.parsedConfig.filter(entry => entry.ref !== ref)\n    this.refs.delete(ref)\n  }\n\n  toString () {\n    return this.parsedConfig.map(({ line }) => line).join('\\n') + '\\n'\n  }\n}\n"",""export function compareRefNames (a, b) {\n  // https://stackoverflow.com/a/40355107/2168416\n  const _a = a.replace(/\\^\\{\\}$/, '')\n  const _b = b.replace(/\\^\\{\\}$/, '')\n  const tmp = -(_a < _b) || +(_a > _b)\n  if (tmp === 0) {\n    return a.endsWith('^{}') ? 1 : -1\n  }\n  return tmp\n}\n"",""// This is a convenience wrapper for reading and writing files in the 'refs' directory.\nimport { FileSystem } from '../models/FileSystem.js'\nimport { E, GitError } from '../models/GitError.js'\nimport { GitPackedRefs } from '../models/GitPackedRefs.js'\nimport { GitRefSpecSet } from '../models/GitRefSpecSet.js'\nimport { compareRefNames } from '../utils/compareRefNames.js'\nimport { join } from '../utils/join.js'\n\nimport { GitConfigManager } from './GitConfigManager'\n\n// @see https://git-scm.com/docs/git-rev-parse.html#_specifying_revisions\nconst refpaths = ref => [\n  `${ref}`,\n  `refs/${ref}`,\n  `refs/tags/${ref}`,\n  `refs/heads/${ref}`,\n  `refs/remotes/${ref}`,\n  `refs/remotes/${ref}/HEAD`\n]\n\n// @see https://git-scm.com/docs/gitrepository-layout\nconst GIT_FILES = ['config', 'description', 'index', 'shallow', 'commondir']\n\nexport class GitRefManager {\n  static async updateRemoteRefs ({\n    fs: _fs,\n    gitdir,\n    remote,\n    refs,\n    symrefs,\n    tags,\n    refspecs = undefined,\n    prune = false,\n    pruneTags = false\n  }) {\n    const fs = new FileSystem(_fs)\n    // Validate input\n    for (const value of refs.values()) {\n      if (!value.match(/[0-9a-f]{40}/)) {\n        throw new GitError(E.NotAnOidFail, { value })\n      }\n    }\n    const config = await GitConfigManager.get({ fs, gitdir })\n    if (!refspecs) {\n      refspecs = await config.getall(`remote.${remote}.fetch`)\n      if (refspecs.length === 0) {\n        throw new GitError(E.NoRefspecConfiguredError, { remote })\n      }\n      // There's some interesting behavior with HEAD that doesn't follow the refspec.\n      refspecs.unshift(`+HEAD:refs/remotes/${remote}/HEAD`)\n    }\n    const refspec = GitRefSpecSet.from(refspecs)\n    const actualRefsToWrite = new Map()\n    // Delete all current tags if the pruneTags argument is true.\n    if (pruneTags) {\n      const tags = await GitRefManager.listRefs({\n        fs,\n        gitdir,\n        filepath: 'refs/tags'\n      })\n      await GitRefManager.deleteRefs({\n        fs,\n        gitdir,\n        refs: tags.map(tag => `refs/tags/${tag}`)\n      })\n    }\n    // Add all tags if the fetch tags argument is true.\n    if (tags) {\n      for (const serverRef of refs.keys()) {\n        if (serverRef.startsWith('refs/tags') && !serverRef.endsWith('^{}')) {\n          // Git's behavior is to only fetch tags that do not conflict with tags already present.\n          if (!(await GitRefManager.exists({ fs, gitdir, ref: serverRef }))) {\n            // If there is a dereferenced an annotated tag value available, prefer that.\n            const oid = refs.get(serverRef + '^{}') || refs.get(serverRef)\n            actualRefsToWrite.set(serverRef, oid)\n          }\n        }\n      }\n    }\n    // Combine refs and symrefs giving symrefs priority\n    const refTranslations = refspec.translate([...refs.keys()])\n    for (const [serverRef, translatedRef] of refTranslations) {\n      const value = refs.get(serverRef)\n      actualRefsToWrite.set(translatedRef, value)\n    }\n    const symrefTranslations = refspec.translate([...symrefs.keys()])\n    for (const [serverRef, translatedRef] of symrefTranslations) {\n      const value = symrefs.get(serverRef)\n      const symtarget = refspec.translateOne(value)\n      if (symtarget) {\n        actualRefsToWrite.set(translatedRef, `ref: ${symtarget}`)\n      }\n    }\n    // If `prune` argument is true, clear out the existing local refspec roots\n    const pruned = []\n    if (prune) {\n      for (const filepath of refspec.localNamespaces()) {\n        const refs = (await GitRefManager.listRefs({\n          fs,\n          gitdir,\n          filepath\n        })).map(file => `${filepath}/${file}`)\n        for (const ref of refs) {\n          if (!actualRefsToWrite.has(ref)) {\n            pruned.push(ref)\n          }\n        }\n      }\n      if (pruned.length > 0) {\n        await GitRefManager.deleteRefs({ fs, gitdir, refs: pruned })\n      }\n    }\n    // Update files\n    // TODO: For large repos with a history of thousands of pull requests\n    // (i.e. gitlab-ce) it would be vastly more efficient to write them\n    // to .git/packed-refs.\n    // The trick is to make sure we a) don't write a packed ref that is\n    // already shadowed by a loose ref and b) don't loose any refs already\n    // in packed-refs. Doing this efficiently may be difficult. A\n    // solution that might work is\n    // a) load the current packed-refs file\n    // b) add actualRefsToWrite, overriding the existing values if present\n    // c) enumerate all the loose refs currently in .git/refs/remotes/${remote}\n    // d) overwrite their value with the new value.\n    // Examples of refs we need to avoid writing in loose format for efficieny's sake\n    // are .git/refs/remotes/origin/refs/remotes/remote_mirror_3059\n    // and .git/refs/remotes/origin/refs/merge-requests\n    for (const [key, value] of actualRefsToWrite) {\n      await fs.write(join(gitdir, key), `${value.trim()}\\n`, 'utf8')\n    }\n    return { pruned }\n  }\n\n  // TODO: make this less crude?\n  static async writeRef ({ fs: _fs, gitdir, ref, value }) {\n    const fs = new FileSystem(_fs)\n    // Validate input\n    if (!value.match(/[0-9a-f]{40}/)) {\n      throw new GitError(E.NotAnOidFail, { value })\n    }\n    await fs.write(join(gitdir, ref), `${value.trim()}\\n`, 'utf8')\n  }\n\n  static async writeSymbolicRef ({ fs: _fs, gitdir, ref, value }) {\n    const fs = new FileSystem(_fs)\n    await fs.write(join(gitdir, ref), 'ref: ' + `${value.trim()}\\n`, 'utf8')\n  }\n\n  static async deleteRef ({ fs, gitdir, ref }) {\n    return GitRefManager.deleteRefs({ fs, gitdir, refs: [ref] })\n  }\n\n  static async deleteRefs ({ fs: _fs, gitdir, refs }) {\n    const fs = new FileSystem(_fs)\n    // Delete regular ref\n    await Promise.all(refs.map(ref => fs.rm(join(gitdir, ref))))\n    // Delete any packed ref\n    let text = await fs.read(`${gitdir}/packed-refs`, { encoding: 'utf8' })\n    const packed = GitPackedRefs.from(text)\n    const beforeSize = packed.refs.size\n    for (const ref of refs) {\n      if (packed.refs.has(ref)) {\n        packed.delete(ref)\n      }\n    }\n    if (packed.refs.size < beforeSize) {\n      text = packed.toString()\n      await fs.write(`${gitdir}/packed-refs`, text, { encoding: 'utf8' })\n    }\n  }\n\n  static async resolve ({ fs: _fs, gitdir, ref, depth = undefined }) {\n    const fs = new FileSystem(_fs)\n    if (depth !== undefined) {\n      depth--\n      if (depth === -1) {\n        return ref\n      }\n    }\n    let sha\n    // Is it a ref pointer?\n    if (ref.startsWith('ref: ')) {\n      ref = ref.slice('ref: '.length)\n      return GitRefManager.resolve({ fs, gitdir, ref, depth })\n    }\n    // Is it a complete and valid SHA?\n    if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) {\n      return ref\n    }\n    // We need to alternate between the file system and the packed-refs\n    const packedMap = await GitRefManager.packedRefs({ fs, gitdir })\n    // Look in all the proper paths, in this order\n    const allpaths = refpaths(ref).filter(p => !GIT_FILES.includes(p)) // exclude git system files (#709)\n\n    for (const ref of allpaths) {\n      sha =\n        (await fs.read(`${gitdir}/${ref}`, { encoding: 'utf8' })) ||\n        packedMap.get(ref)\n      if (sha) {\n        return GitRefManager.resolve({ fs, gitdir, ref: sha.trim(), depth })\n      }\n    }\n    // Do we give up?\n    throw new GitError(E.ResolveRefError, { ref })\n  }\n\n  static async exists ({ fs, gitdir, ref }) {\n    try {\n      await GitRefManager.expand({ fs, gitdir, ref })\n      return true\n    } catch (err) {\n      return false\n    }\n  }\n\n  static async expand ({ fs: _fs, gitdir, ref }) {\n    const fs = new FileSystem(_fs)\n    // Is it a complete and valid SHA?\n    if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) {\n      return ref\n    }\n    // We need to alternate between the file system and the packed-refs\n    const packedMap = await GitRefManager.packedRefs({ fs, gitdir })\n    // Look in all the proper paths, in this order\n    const allpaths = refpaths(ref)\n    for (const ref of allpaths) {\n      if (await fs.exists(`${gitdir}/${ref}`)) return ref\n      if (packedMap.has(ref)) return ref\n    }\n    // Do we give up?\n    throw new GitError(E.ExpandRefError, { ref })\n  }\n\n  static async expandAgainstMap ({ ref, map }) {\n    // Look in all the proper paths, in this order\n    const allpaths = refpaths(ref)\n    for (const ref of allpaths) {\n      if (await map.has(ref)) return ref\n    }\n    // Do we give up?\n    throw new GitError(E.ExpandRefError, { ref })\n  }\n\n  static resolveAgainstMap ({ ref, fullref = ref, depth = undefined, map }) {\n    if (depth !== undefined) {\n      depth--\n      if (depth === -1) {\n        return { fullref, oid: ref }\n      }\n    }\n    // Is it a ref pointer?\n    if (ref.startsWith('ref: ')) {\n      ref = ref.slice('ref: '.length)\n      return GitRefManager.resolveAgainstMap({ ref, fullref, depth, map })\n    }\n    // Is it a complete and valid SHA?\n    if (ref.length === 40 && /[0-9a-f]{40}/.test(ref)) {\n      return { fullref, oid: ref }\n    }\n    // Look in all the proper paths, in this order\n    const allpaths = refpaths(ref)\n    for (const ref of allpaths) {\n      const sha = map.get(ref)\n      if (sha) {\n        return GitRefManager.resolveAgainstMap({\n          ref: sha.trim(),\n          fullref: ref,\n          depth,\n          map\n        })\n      }\n    }\n    // Do we give up?\n    throw new GitError(E.ResolveRefError, { ref })\n  }\n\n  static async packedRefs ({ fs: _fs, gitdir }) {\n    const fs = new FileSystem(_fs)\n    const text = await fs.read(`${gitdir}/packed-refs`, { encoding: 'utf8' })\n    const packed = GitPackedRefs.from(text)\n    return packed.refs\n  }\n\n  // List all the refs that match the `filepath` prefix\n  static async listRefs ({ fs: _fs, gitdir, filepath }) {\n    const fs = new FileSystem(_fs)\n    const packedMap = GitRefManager.packedRefs({ fs, gitdir })\n    let files = null\n    try {\n      files = await fs.readdirDeep(`${gitdir}/${filepath}`)\n      files = files.map(x => x.replace(`${gitdir}/${filepath}/`, ''))\n    } catch (err) {\n      files = []\n    }\n\n    for (let key of (await packedMap).keys()) {\n      // filter by prefix\n      if (key.startsWith(filepath)) {\n        // remove prefix\n        key = key.replace(filepath + '/', '')\n        // Don't include duplicates; the loose files have precedence anyway\n        if (!files.includes(key)) {\n          files.push(key)\n        }\n      }\n    }\n    // since we just appended things onto an array, we need to sort them now\n    files.sort(compareRefNames)\n    return files\n  }\n\n  static async listBranches ({ fs: _fs, gitdir, remote }) {\n    const fs = new FileSystem(_fs)\n    if (remote) {\n      return GitRefManager.listRefs({\n        fs,\n        gitdir,\n        filepath: `refs/remotes/${remote}`\n      })\n    } else {\n      return GitRefManager.listRefs({ fs, gitdir, filepath: `refs/heads` })\n    }\n  }\n\n  static async listTags ({ fs: _fs, gitdir }) {\n    const fs = new FileSystem(_fs)\n    const tags = await GitRefManager.listRefs({\n      fs,\n      gitdir,\n      filepath: `refs/tags`\n    })\n    return tags.filter(x => !x.endsWith('^{}'))\n  }\n}\n"",""import pako from 'pako'\n\nimport { FileSystem } from '../models/FileSystem.js'\nimport { E, GitError } from '../models/GitError.js'\nimport { GitObject } from '../models/GitObject.js'\nimport { readObjectLoose } from '../storage/readObjectLoose.js'\nimport { readObjectPacked } from '../storage/readObjectPacked.js'\nimport { shasum } from '../utils/shasum.js'\n\nexport async function readObject ({ fs: _fs, gitdir, oid, format = 'content' }) {\n  const fs = new FileSystem(_fs)\n  // Curry the current read method so that the packfile un-deltification\n  // process can acquire external ref-deltas.\n  const getExternalRefDelta = oid => readObject({ fs, gitdir, oid })\n\n  let result\n  // Empty tree - hard-coded so we can use it as a shorthand.\n  // Note: I think the canonical git implementation must do this too because\n  // `git cat-file -t 4b825dc642cb6eb9a060e54bf8d69288fbee4904` prints \""tree\"" even in empty repos.\n  if (oid === '4b825dc642cb6eb9a060e54bf8d69288fbee4904') {\n    result = { format: 'wrapped', object: Buffer.from(`tree 0\\x00`) }\n  }\n  // Look for it in the loose object directory.\n  if (!result) {\n    result = await readObjectLoose({ fs, gitdir, oid })\n  }\n  // Check to see if it's in a packfile.\n  if (!result) {\n    result = await readObjectPacked({ fs, gitdir, oid, getExternalRefDelta })\n  }\n  // Finally\n  if (!result) {\n    throw new GitError(E.ReadObjectFail, { oid })\n  }\n\n  if (format === 'deflated') {\n    return result\n  }\n\n  // BEHOLD! THE ONLY TIME I'VE EVER WANTED TO USE A CASE STATEMENT WITH FOLLOWTHROUGH!\n  // eslint-ignore\n  /* eslint-disable no-fallthrough */\n  switch (result.format) {\n    case 'deflated':\n      result.object = Buffer.from(pako.inflate(result.object))\n      result.format = 'wrapped'\n    case 'wrapped':\n      if (format === 'wrapped' && result.format === 'wrapped') {\n        return result\n      }\n      const sha = await shasum(result.object)\n      if (sha !== oid) {\n        throw new GitError(E.InternalFail, {\n          message: `SHA check failed! Expected ${oid}, computed ${sha}`\n        })\n      }\n      const { object, type } = GitObject.unwrap(result.object)\n      result.type = type\n      result.object = object\n      result.format = 'content'\n    case 'content':\n      if (format === 'content') return result\n      break\n    default:\n      throw new GitError(E.InternalFail, {\n        message: `invalid format \""${result.format}\""`\n      })\n  }\n  /* eslint-enable no-fallthrough */\n}\n"",""/* global performance */\nvar perf = typeof performance !== 'undefined' && performance;\n\nvar now = perf && perf.now ? function () { return perf.now(); } : function () { return Date.now(); };\n\nfunction throwIfEmpty (name) {\n  if (!name) {\n    throw new Error('name must be non-empty')\n  }\n}\n\n// simple binary sort insertion\nfunction insertSorted (arr, item) {\n  var low = 0;\n  var high = arr.length;\n  var mid;\n  while (low < high) {\n    mid = (low + high) >>> 1; // like (num / 2) but faster\n    if (arr[mid].startTime < item.startTime) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n  arr.splice(low, 0, item);\n}\n\nvar mark;\nvar stop;\nvar getEntries;\nvar clear;\n\nif (perf && perf.mark) {\n  mark = function (name) {\n    throwIfEmpty(name);\n    perf.mark((\""start \"" + name));\n  };\n  stop = function (name) {\n    throwIfEmpty(name);\n    perf.mark((\""end \"" + name));\n    perf.measure(name, (\""start \"" + name), (\""end \"" + name));\n    var entries = perf.getEntriesByName(name);\n    return entries[entries.length - 1]\n  };\n  getEntries = function () { return perf.getEntriesByType('measure'); };\n  clear = function () {\n    perf.clearMarks();\n    perf.clearMeasures();\n  };\n} else {\n  var marks = {};\n  var entries = [];\n  mark = function (name) {\n    throwIfEmpty(name);\n    var startTime = now();\n    marks['$' + name] = startTime;\n  };\n  stop = function (name) {\n    throwIfEmpty(name);\n    var endTime = now();\n    var startTime = marks['$' + name];\n    if (!startTime) {\n      throw new Error((\""no known mark: \"" + name))\n    }\n    var entry = {\n      startTime: startTime,\n      name: name,\n      duration: endTime - startTime,\n      entryType: 'measure'\n    };\n    // per the spec this should be at least 150:\n    // https://www.w3.org/TR/resource-timing-1/#extensions-performance-interface\n    // we just have no limit, per Chrome and Edge's de-facto behavior\n    insertSorted(entries, entry);\n    return entry\n  };\n  getEntries = function () { return entries; };\n  clear = function () {\n    marks = {};\n    entries = [];\n  };\n}\n\nexport { mark, stop, getEntries, clear };\n"",""import { E, GitError } from '../models/GitError.js'\nimport { formatAuthor } from '../utils/formatAuthor.js'\nimport { indent } from '../utils/indent.js'\nimport { normalizeNewlines } from '../utils/normalizeNewlines.js'\nimport { outdent } from '../utils/outdent.js'\nimport { parseAuthor } from '../utils/parseAuthor.js'\n\nexport class GitCommit {\n  constructor (commit) {\n    if (typeof commit === 'string') {\n      this._commit = commit\n    } else if (Buffer.isBuffer(commit)) {\n      this._commit = commit.toString('utf8')\n    } else if (typeof commit === 'object') {\n      this._commit = GitCommit.render(commit)\n    } else {\n      throw new GitError(E.InternalFail, {\n        message: 'invalid type passed to GitCommit constructor'\n      })\n    }\n  }\n\n  static fromPayloadSignature ({ payload, signature }) {\n    const headers = GitCommit.justHeaders(payload)\n    const message = GitCommit.justMessage(payload)\n    const commit = normalizeNewlines(\n      headers + '\\ngpgsig' + indent(signature) + '\\n' + message\n    )\n    return new GitCommit(commit)\n  }\n\n  static from (commit) {\n    return new GitCommit(commit)\n  }\n\n  toObject () {\n    return Buffer.from(this._commit, 'utf8')\n  }\n\n  // Todo: allow setting the headers and message\n  headers () {\n    return this.parseHeaders()\n  }\n\n  // Todo: allow setting the headers and message\n  message () {\n    return GitCommit.justMessage(this._commit)\n  }\n\n  parse () {\n    return Object.assign({ message: this.message() }, this.headers())\n  }\n\n  static justMessage (commit) {\n    return normalizeNewlines(commit.slice(commit.indexOf('\\n\\n') + 2))\n  }\n\n  static justHeaders (commit) {\n    return commit.slice(0, commit.indexOf('\\n\\n'))\n  }\n\n  parseHeaders () {\n    const headers = GitCommit.justHeaders(this._commit).split('\\n')\n    const hs = []\n    for (const h of headers) {\n      if (h[0] === ' ') {\n        // combine with previous header (without space indent)\n        hs[hs.length - 1] += '\\n' + h.slice(1)\n      } else {\n        hs.push(h)\n      }\n    }\n    const obj = {\n      parent: []\n    }\n    for (const h of hs) {\n      const key = h.slice(0, h.indexOf(' '))\n      const value = h.slice(h.indexOf(' ') + 1)\n      if (Array.isArray(obj[key])) {\n        obj[key].push(value)\n      } else {\n        obj[key] = value\n      }\n    }\n    if (obj.author) {\n      obj.author = parseAuthor(obj.author)\n    }\n    if (obj.committer) {\n      obj.committer = parseAuthor(obj.committer)\n    }\n    return obj\n  }\n\n  static renderHeaders (obj) {\n    let headers = ''\n    if (obj.tree) {\n      headers += `tree ${obj.tree}\\n`\n    } else {\n      headers += `tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\\n` // the null tree\n    }\n    if (obj.parent) {\n      if (obj.parent.length === undefined) {\n        throw new GitError(E.InternalFail, {\n          message: `commit 'parent' property should be an array`\n        })\n      }\n      for (const p of obj.parent) {\n        headers += `parent ${p}\\n`\n      }\n    }\n    const author = obj.author\n    headers += `author ${formatAuthor(author)}\\n`\n    const committer = obj.committer || obj.author\n    headers += `committer ${formatAuthor(committer)}\\n`\n    if (obj.gpgsig) {\n      headers += 'gpgsig' + indent(obj.gpgsig)\n    }\n    return headers\n  }\n\n  static render (obj) {\n    return GitCommit.renderHeaders(obj) + '\\n' + normalizeNewlines(obj.message)\n  }\n\n  render () {\n    return this._commit\n  }\n\n  withoutSignature () {\n    const commit = normalizeNewlines(this._commit)\n    if (commit.indexOf('\\ngpgsig') === -1) return commit\n    const headers = commit.slice(0, commit.indexOf('\\ngpgsig'))\n    const message = commit.slice(\n      commit.indexOf('-----END PGP SIGNATURE-----\\n') +\n        '-----END PGP SIGNATURE-----\\n'.length\n    )\n    return normalizeNewlines(headers + '\\n' + message)\n  }\n\n  isolateSignature () {\n    const signature = this._commit.slice(\n      this._commit.indexOf('-----BEGIN PGP SIGNATURE-----'),\n      this._commit.indexOf('-----END PGP SIGNATURE-----') +\n        '-----END PGP SIGNATURE-----'.length\n    )\n    return outdent(signature)\n  }\n\n  static async sign (commit, pgp, secretKey) {\n    const payload = commit.withoutSignature()\n    const message = GitCommit.justMessage(commit._commit)\n    let { signature } = await pgp.sign({ payload, secretKey })\n    // renormalize the line endings to the one true line-ending\n    signature = normalizeNewlines(signature)\n    const headers = GitCommit.justHeaders(commit._commit)\n    const signedCommit =\n      headers + '\\n' + 'gpgsig' + indent(signature) + '\\n' + message\n    // return a new commit object\n    return GitCommit.from(signedCommit)\n  }\n\n  static async verify (commit, pgp, publicKey) {\n    const payload = commit.withoutSignature()\n    const signature = commit.isolateSignature()\n    return pgp.verify({ payload, publicKey, signature })\n  }\n}\n"",""let shouldLog = null\n\nexport function log (...args) {\n  if (shouldLog === null) {\n    // Reading localStorage can throw a SECURITY_ERR in Chrome Mobile if \""Block third-party cookies and site data\"" is enabled\n    // and maybe in other scenarios too. I started seeing this error doing Karma testing on my Android phone via local WLAN.\n    // Using the Object.getPropertyDescriptor(window, 'localStorage').enumerable trick didn't avoid the error so using try/catch.\n    try {\n      shouldLog =\n        (process &&\n          process.env &&\n          process.env.DEBUG &&\n          (process.env.DEBUG === '*' ||\n            process.env.DEBUG === 'isomorphic-git')) ||\n        (typeof window !== 'undefined' &&\n          typeof window.localStorage !== 'undefined' &&\n          (window.localStorage.debug === '*' ||\n            window.localStorage.debug === 'isomorphic-git'))\n    } catch (_) {\n      shouldLog = false\n    }\n  }\n  if (shouldLog) {\n    console.log(...args)\n  }\n}\n"",""/**\npkt-line Format\n---------------\n\nMuch (but not all) of the payload is described around pkt-lines.\n\nA pkt-line is a variable length binary string.  The first four bytes\nof the line, the pkt-len, indicates the total length of the line,\nin hexadecimal.  The pkt-len includes the 4 bytes used to contain\nthe length's hexadecimal representation.\n\nA pkt-line MAY contain binary data, so implementors MUST ensure\npkt-line parsing/formatting routines are 8-bit clean.\n\nA non-binary line SHOULD BE terminated by an LF, which if present\nMUST be included in the total length. Receivers MUST treat pkt-lines\nwith non-binary data the same whether or not they contain the trailing\nLF (stripping the LF if present, and not complaining when it is\nmissing).\n\nThe maximum length of a pkt-line's data component is 65516 bytes.\nImplementations MUST NOT send pkt-line whose length exceeds 65520\n(65516 bytes of payload + 4 bytes of length data).\n\nImplementations SHOULD NOT send an empty pkt-line (\""0004\"").\n\nA pkt-line with a length field of 0 (\""0000\""), called a flush-pkt,\nis a special case and MUST be handled differently than an empty\npkt-line (\""0004\"").\n\n----\n  pkt-line     =  data-pkt / flush-pkt\n\n  data-pkt     =  pkt-len pkt-payload\n  pkt-len      =  4*(HEXDIG)\n  pkt-payload  =  (pkt-len - 4)*(OCTET)\n\n  flush-pkt    = \""0000\""\n----\n\nExamples (as C-style strings):\n\n----\n  pkt-line          actual value\n  ---------------------------------\n  \""0006a\\n\""         \""a\\n\""\n  \""0005a\""           \""a\""\n  \""000bfoobar\\n\""    \""foobar\\n\""\n  \""0004\""            \""\""\n----\n*/\nimport { StreamReader } from '../utils/StreamReader.js'\nimport { padHex } from '../utils/padHex.js'\n\n// I'm really using this more as a namespace.\n// There's not a lot of \""state\"" in a pkt-line\n\nexport class GitPktLine {\n  static flush () {\n    return Buffer.from('0000', 'utf8')\n  }\n\n  static encode (line) {\n    if (typeof line === 'string') {\n      line = Buffer.from(line)\n    }\n    const length = line.length + 4\n    const hexlength = padHex(4, length)\n    return Buffer.concat([Buffer.from(hexlength, 'utf8'), line])\n  }\n\n  static streamReader (stream) {\n    const reader = new StreamReader(stream)\n    return async function read () {\n      try {\n        let length = await reader.read(4)\n        if (length == null) return true\n        length = parseInt(length.toString('utf8'), 16)\n        if (length === 0) return null\n        const buffer = await reader.read(length - 4)\n        if (buffer == null) return true\n        return buffer\n      } catch (err) {\n        console.log('error', err)\n        return true\n      }\n    }\n  }\n}\n"",""/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\""value\"" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\""size\"" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\""size\"" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\""encoding\"" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\""list\"" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\""list\"" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \""this.length <= MAX_UINT32\"" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \""foo\"", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \""call stack size exceeded\"".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\""buffer\"" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\""value\"" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n"",""import { E, GitError } from '../models/GitError.js'\nimport { comparePath } from '../utils/comparePath.js'\n\n/*::\ntype TreeEntry = {\n  mode: string,\n  path: string,\n  oid: string,\n  type?: string\n}\n*/\n\nfunction mode2type (mode) {\n  // prettier-ignore\n  switch (mode) {\n    case '040000': return 'tree'\n    case '100644': return 'blob'\n    case '100755': return 'blob'\n    case '120000': return 'blob'\n    case '160000': return 'commit'\n  }\n  throw new GitError(E.InternalFail, {\n    message: `Unexpected GitTree entry mode: ${mode}`\n  })\n}\n\nfunction parseBuffer (buffer) {\n  const _entries = []\n  let cursor = 0\n  while (cursor < buffer.length) {\n    const space = buffer.indexOf(32, cursor)\n    if (space === -1) {\n      throw new GitError(E.InternalFail, {\n        message: `GitTree: Error parsing buffer at byte location ${cursor}: Could not find the next space character.`\n      })\n    }\n    const nullchar = buffer.indexOf(0, cursor)\n    if (nullchar === -1) {\n      throw new GitError(E.InternalFail, {\n        message: `GitTree: Error parsing buffer at byte location ${cursor}: Could not find the next null character.`\n      })\n    }\n    let mode = buffer.slice(cursor, space).toString('utf8')\n    if (mode === '40000') mode = '040000' // makes it line up neater in printed output\n    const type = mode2type(mode)\n    const path = buffer.slice(space + 1, nullchar).toString('utf8')\n    const oid = buffer.slice(nullchar + 1, nullchar + 21).toString('hex')\n    cursor = nullchar + 21\n    _entries.push({ mode, path, oid, type })\n  }\n  return _entries\n}\n\nfunction limitModeToAllowed (mode) {\n  if (typeof mode === 'number') {\n    mode = mode.toString(8)\n  }\n  // tree\n  if (mode.match(/^0?4.*/)) return '040000' // Directory\n  if (mode.match(/^1006.*/)) return '100644' // Regular non-executable file\n  if (mode.match(/^1007.*/)) return '100755' // Regular executable file\n  if (mode.match(/^120.*/)) return '120000' // Symbolic link\n  if (mode.match(/^160.*/)) return '160000' // Commit (git submodule reference)\n  throw new GitError(E.InternalFail, {\n    message: `Could not understand file mode: ${mode}`\n  })\n}\n\nfunction nudgeIntoShape (entry) {\n  if (!entry.oid && entry.sha) {\n    entry.oid = entry.sha // Github\n  }\n  entry.mode = limitModeToAllowed(entry.mode) // index\n  if (!entry.type) {\n    entry.type = 'blob' // index\n  }\n  return entry\n}\n\nexport class GitTree {\n  /*::\n  _entries: Array<TreeEntry>\n  */\n  constructor (entries) {\n    if (Buffer.isBuffer(entries)) {\n      this._entries = parseBuffer(entries)\n    } else if (Array.isArray(entries)) {\n      this._entries = entries.map(nudgeIntoShape)\n    } else {\n      throw new GitError(E.InternalFail, {\n        message: 'invalid type passed to GitTree constructor'\n      })\n    }\n    // There appears to be an edge case (in this repo no less) where\n    // the tree is NOT sorted as expected if some directories end with \"".git\""\n    this._entries.sort(comparePath)\n  }\n\n  static from (tree) {\n    return new GitTree(tree)\n  }\n\n  render () {\n    return this._entries\n      .map(entry => `${entry.mode} ${entry.type} ${entry.oid}    ${entry.path}`)\n      .join('\\n')\n  }\n\n  toObject () {\n    return Buffer.concat(\n      this._entries.map(entry => {\n        const mode = Buffer.from(entry.mode.replace(/^0/, ''))\n        const space = Buffer.from(' ')\n        const path = Buffer.from(entry.path, 'utf8')\n        const nullchar = Buffer.from([0])\n        const oid = Buffer.from(entry.oid, 'hex')\n        return Buffer.concat([mode, space, path, nullchar, oid])\n      })\n    )\n  }\n\n  entries () {\n    return this._entries\n  }\n\n  * [Symbol.iterator] () {\n    for (const entry of this._entries) {\n      yield entry\n    }\n  }\n}\n"",""/* eslint-env node, browser */\nimport Hash from 'sha.js/sha1'\n\nimport { toHex } from './toHex.js'\n\nlet supportsSubtleSHA1 = null\n\nexport async function shasum (buffer) {\n  if (supportsSubtleSHA1 === null) {\n    supportsSubtleSHA1 = await testSubtleSHA1()\n  }\n  return supportsSubtleSHA1 ? subtleSHA1(buffer) : shasumSync(buffer)\n}\n\n// This is modeled after @dominictarr's \""shasum\"" module,\n// but without the 'json-stable-stringify' dependency and\n// extra type-casting features.\nfunction shasumSync (buffer) {\n  return new Hash().update(buffer).digest('hex')\n}\n\nasync function subtleSHA1 (buffer) {\n  const hash = await crypto.subtle.digest('SHA-1', buffer)\n  return toHex(hash)\n}\n\nasync function testSubtleSHA1 () {\n  // I'm using a rather crude method of progressive enhancement, because\n  // some browsers that have crypto.subtle.digest don't actually implement SHA-1.\n  try {\n    const hash = await subtleSHA1(new Uint8Array([]))\n    if (hash === 'da39a3ee5e6b4b0d3255bfef95601890afd80709') return true\n  } catch (_) {\n    // no bother\n  }\n  return false\n}\n"",""export function toHex (buffer) {\n  let hex = ''\n  for (const byte of new Uint8Array(buffer)) {\n    if (byte < 16) hex += '0'\n    hex += byte.toString(16)\n  }\n  return hex\n}\n"",""const deepget = (keys, map) => {\n  for (const key of keys) {\n    if (!map.has(key)) map.set(key, new Map())\n    map = map.get(key)\n  }\n  return map\n}\n\nexport class DeepMap {\n  constructor () {\n    this._root = new Map()\n  }\n\n  set (keys, value) {\n    const lastKey = keys.pop()\n    const lastMap = deepget(keys, this._root)\n    lastMap.set(lastKey, value)\n  }\n\n  get (keys) {\n    const lastKey = keys.pop()\n    const lastMap = deepget(keys, this._root)\n    return lastMap.get(lastKey)\n  }\n\n  has (keys) {\n    const lastKey = keys.pop()\n    const lastMap = deepget(keys, this._root)\n    return lastMap.has(lastKey)\n  }\n}\n"",""// import LockManager from 'travix-lock-manager'\nimport AsyncLock from 'async-lock'\n\nimport { FileSystem } from '../models/FileSystem.js'\nimport { GitIndex } from '../models/GitIndex.js'\nimport { DeepMap } from '../utils/DeepMap.js'\nimport { compareStats } from '../utils/compareStats.js'\n\n// import Lock from '../utils.js'\n\n// TODO: replace with an LRU cache?\nconst map = new DeepMap()\nconst stats = new DeepMap()\n// const lm = new LockManager()\nlet lock = null\n\nasync function updateCachedIndexFile (fs, filepath) {\n  const stat = await fs.lstat(filepath)\n  const rawIndexFile = await fs.read(filepath)\n  const index = await GitIndex.from(rawIndexFile)\n  // cache the GitIndex object so we don't need to re-read it\n  // every time.\n  map.set([fs, filepath], index)\n  // Save the stat data for the index so we know whether\n  // the cached file is stale (modified by an outside process).\n  stats.set([fs, filepath], stat)\n}\n\n// Determine whether our copy of the index file is stale\nasync function isIndexStale (fs, filepath) {\n  const savedStats = stats.get([fs, filepath])\n  if (savedStats === undefined) return true\n  const currStats = await fs.lstat(filepath)\n  if (savedStats === null) return false\n  if (currStats === null) return false\n  return compareStats(savedStats, currStats)\n}\n\nexport class GitIndexManager {\n  /**\n   *\n   * @param {object} opts\n   * @param {function(GitIndex): any} closure\n   */\n  static async acquire ({ fs: _fs, gitdir }, closure) {\n    const fs = new FileSystem(_fs)\n    const filepath = `${gitdir}/index`\n    if (lock === null) lock = new AsyncLock({ maxPending: Infinity })\n    let result\n    await lock.acquire(filepath, async function () {\n      // Acquire a file lock while we're reading the index\n      // to make sure other processes aren't writing to it\n      // simultaneously, which could result in a corrupted index.\n      // const fileLock = await Lock(filepath)\n      if (await isIndexStale(fs, filepath)) {\n        await updateCachedIndexFile(fs, filepath)\n      }\n      const index = map.get([fs, filepath])\n      result = await closure(index)\n      if (index._dirty) {\n        // Acquire a file lock while we're writing the index file\n        // let fileLock = await Lock(filepath)\n        const buffer = await index.toObject()\n        await fs.write(filepath, buffer)\n        // Update cached stat value\n        stats.set([fs, filepath], await fs.lstat(filepath))\n        index._dirty = false\n      }\n    })\n    return result\n  }\n}\n"",""export function normalizeNewlines (str) {\n  // remove all <CR>\n  str = str.replace(/\\r/g, '')\n  // no extra newlines up front\n  str = str.replace(/^\\n+/, '')\n  // and a single newline at the end\n  str = str.replace(/\\n+$/, '') + '\\n'\n  return str\n}\n"",""import { E, GitError } from '../models/GitError.js'\nimport { formatAuthor } from '../utils/formatAuthor.js'\nimport { normalizeNewlines } from '../utils/normalizeNewlines.js'\nimport { parseAuthor } from '../utils/parseAuthor.js'\n\nexport class GitAnnotatedTag {\n  constructor (tag) {\n    if (typeof tag === 'string') {\n      this._tag = tag\n    } else if (Buffer.isBuffer(tag)) {\n      this._tag = tag.toString('utf8')\n    } else if (typeof tag === 'object') {\n      this._tag = GitAnnotatedTag.render(tag)\n    } else {\n      throw new GitError(E.InternalFail, {\n        message: 'invalid type passed to GitAnnotatedTag constructor'\n      })\n    }\n  }\n\n  static from (tag) {\n    return new GitAnnotatedTag(tag)\n  }\n\n  static render (obj) {\n    return `object ${obj.object}\ntype ${obj.type}\ntag ${obj.tag}\ntagger ${formatAuthor(obj.tagger)}\n\n${obj.message}\n${obj.signature ? obj.signature : ''}`\n  }\n\n  justHeaders () {\n    return this._tag.slice(0, this._tag.indexOf('\\n\\n'))\n  }\n\n  message () {\n    const tag = this.withoutSignature()\n    return tag.slice(tag.indexOf('\\n\\n') + 2)\n  }\n\n  parse () {\n    return Object.assign(this.headers(), {\n      message: this.message(),\n      signature: this.signature()\n    })\n  }\n\n  render () {\n    return this._tag\n  }\n\n  headers () {\n    const headers = this.justHeaders().split('\\n')\n    const hs = []\n    for (const h of headers) {\n      if (h[0] === ' ') {\n        // combine with previous header (without space indent)\n        hs[hs.length - 1] += '\\n' + h.slice(1)\n      } else {\n        hs.push(h)\n      }\n    }\n    const obj = {}\n    for (const h of hs) {\n      const key = h.slice(0, h.indexOf(' '))\n      const value = h.slice(h.indexOf(' ') + 1)\n      if (Array.isArray(obj[key])) {\n        obj[key].push(value)\n      } else {\n        obj[key] = value\n      }\n    }\n    if (obj.tagger) {\n      obj.tagger = parseAuthor(obj.tagger)\n    }\n    if (obj.committer) {\n      obj.committer = parseAuthor(obj.committer)\n    }\n    return obj\n  }\n\n  withoutSignature () {\n    const tag = normalizeNewlines(this._tag)\n    if (tag.indexOf('\\n-----BEGIN PGP SIGNATURE-----') === -1) return tag\n    return tag.slice(0, tag.lastIndexOf('\\n-----BEGIN PGP SIGNATURE-----'))\n  }\n\n  signature () {\n    const signature = this._tag.slice(\n      this._tag.indexOf('-----BEGIN PGP SIGNATURE-----'),\n      this._tag.indexOf('-----END PGP SIGNATURE-----') +\n        '-----END PGP SIGNATURE-----'.length\n    )\n    return normalizeNewlines(signature)\n  }\n\n  toObject () {\n    return Buffer.from(this._tag, 'utf8')\n  }\n\n  static async sign (tag, pgp, secretKey) {\n    const payload = tag.withoutSignature() + '\\n'\n    let { signature } = await pgp.sign({ payload, secretKey })\n    // renormalize the line endings to the one true line-ending\n    signature = normalizeNewlines(signature)\n    const signedTag = payload + signature\n    // return a new tag object\n    return GitAnnotatedTag.from(signedTag)\n  }\n\n  static async verify (tag, pgp, publicKey) {\n    const payload = tag.withoutSignature() + '\\n'\n    const signature = tag.signature()\n    return pgp.verify({ payload, publicKey, signature })\n  }\n}\n"",""import { E, GitError } from '../models/GitError.js'\n\nexport class GitObject {\n  static wrap ({ type, object }) {\n    return Buffer.concat([\n      Buffer.from(`${type} ${object.byteLength.toString()}\\x00`),\n      Buffer.from(object)\n    ])\n  }\n\n  static unwrap (buffer) {\n    const s = buffer.indexOf(32) // first space\n    const i = buffer.indexOf(0) // first null value\n    const type = buffer.slice(0, s).toString('utf8') // get type of object\n    const length = buffer.slice(s + 1, i).toString('utf8') // get type of object\n    const actualLength = buffer.length - (i + 1)\n    // verify length\n    if (parseInt(length) !== actualLength) {\n      throw new GitError(E.InternalFail, {\n        message: `Length mismatch: expected ${length} bytes but got ${actualLength} instead.`\n      })\n    }\n    return {\n      type,\n      object: Buffer.from(buffer.slice(i + 1))\n    }\n  }\n}\n"",""'use strict';\n\nconst processFn = (fn, options) => function (...args) {\n\tconst P = options.promiseModule;\n\n\treturn new P((resolve, reject) => {\n\t\tif (options.multiArgs) {\n\t\t\targs.push((...result) => {\n\t\t\t\tif (options.errorFirst) {\n\t\t\t\t\tif (result[0]) {\n\t\t\t\t\t\treject(result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.shift();\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (options.errorFirst) {\n\t\t\targs.push((error, result) => {\n\t\t\t\tif (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\targs.push(resolve);\n\t\t}\n\n\t\tfn.apply(this, args);\n\t});\n};\n\nmodule.exports = (input, options) => {\n\toptions = Object.assign({\n\t\texclude: [/.+(Sync|Stream)$/],\n\t\terrorFirst: true,\n\t\tpromiseModule: Promise\n\t}, options);\n\n\tconst objType = typeof input;\n\tif (!(input !== null && (objType === 'object' || objType === 'function'))) {\n\t\tthrow new TypeError(`Expected \\`input\\` to be a \\`Function\\` or \\`Object\\`, got \\`${input === null ? 'null' : objType}\\``);\n\t}\n\n\tconst filter = key => {\n\t\tconst match = pattern => typeof pattern === 'string' ? key === pattern : pattern.test(key);\n\t\treturn options.include ? options.include.some(match) : !options.exclude.some(match);\n\t};\n\n\tlet ret;\n\tif (objType === 'function') {\n\t\tret = function (...args) {\n\t\t\treturn options.excludeMain ? input(...args) : processFn(input, options).apply(this, args);\n\t\t};\n\t} else {\n\t\tret = Object.create(Object.getPrototypeOf(input));\n\t}\n\n\tfor (const key in input) { // eslint-disable-line guard-for-in\n\t\tconst property = input[key];\n\t\tret[key] = typeof property === 'function' && filter(key) ? processFn(property, options) : property;\n\t}\n\n\treturn ret;\n};\n"",""// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n"",""// This is part of an elaborate system to facilitate code-splitting / tree-shaking.\n// commands/walk.js can depend on only this, and the actual Walker classes exported\n// can be opaque - only having a single property (this symbol) that is not enumerable,\n// and thus the constructor can be passed as an argument to walk while being \""unusable\""\n// outside of it.\nexport const GitWalkBeta1Symbol = Symbol('GitWalkBeta1Symbol')\nexport const GitWalkBeta2Symbol = Symbol('GitWalkBeta2Symbol')\n"",""import { normalizeMode } from './normalizeMode'\n\nconst MAX_UINT32 = 2 ** 32\n\nfunction SecondsNanoseconds (\n  givenSeconds,\n  givenNanoseconds,\n  milliseconds,\n  date\n) {\n  if (givenSeconds !== undefined && givenNanoseconds !== undefined) {\n    return [givenSeconds, givenNanoseconds]\n  }\n  if (milliseconds === undefined) {\n    milliseconds = date.valueOf()\n  }\n  const seconds = Math.floor(milliseconds / 1000)\n  const nanoseconds = (milliseconds - seconds * 1000) * 1000000\n  return [seconds, nanoseconds]\n}\n\nexport function normalizeStats (e) {\n  const [ctimeSeconds, ctimeNanoseconds] = SecondsNanoseconds(\n    e.ctimeSeconds,\n    e.ctimeNanoseconds,\n    e.ctimeMs,\n    e.ctime\n  )\n  const [mtimeSeconds, mtimeNanoseconds] = SecondsNanoseconds(\n    e.mtimeSeconds,\n    e.mtimeNanoseconds,\n    e.mtimeMs,\n    e.mtime\n  )\n\n  return {\n    ctimeSeconds: ctimeSeconds % MAX_UINT32,\n    ctimeNanoseconds: ctimeNanoseconds % MAX_UINT32,\n    mtimeSeconds: mtimeSeconds % MAX_UINT32,\n    mtimeNanoseconds: mtimeNanoseconds % MAX_UINT32,\n    dev: e.dev % MAX_UINT32,\n    ino: e.ino % MAX_UINT32,\n    mode: normalizeMode(e.mode % MAX_UINT32),\n    uid: e.uid % MAX_UINT32,\n    gid: e.gid % MAX_UINT32,\n    // size of -1 happens over a BrowserFS HTTP Backend that doesn't serve Content-Length headers\n    // (like the Karma webserver) because BrowserFS HTTP Backend uses HTTP HEAD requests to do fs.stat\n    size: e.size > -1 ? e.size % MAX_UINT32 : 0\n  }\n}\n"",""// Modeled after https://github.com/tjfontaine/node-buffercursor\n// but with the goal of being much lighter weight.\nexport class BufferCursor {\n  constructor (buffer) {\n    this.buffer = buffer\n    this._start = 0\n  }\n\n  eof () {\n    return this._start >= this.buffer.length\n  }\n\n  tell () {\n    return this._start\n  }\n\n  seek (n) {\n    this._start = n\n  }\n\n  slice (n) {\n    const r = this.buffer.slice(this._start, this._start + n)\n    this._start += n\n    return r\n  }\n\n  toString (enc, length) {\n    const r = this.buffer.toString(enc, this._start, this._start + length)\n    this._start += length\n    return r\n  }\n\n  write (value, length, enc) {\n    const r = this.buffer.write(value, this._start, length, enc)\n    this._start += length\n    return r\n  }\n\n  readUInt8 () {\n    const r = this.buffer.readUInt8(this._start)\n    this._start += 1\n    return r\n  }\n\n  writeUInt8 (value) {\n    const r = this.buffer.writeUInt8(value, this._start)\n    this._start += 1\n    return r\n  }\n\n  readUInt16BE () {\n    const r = this.buffer.readUInt16BE(this._start)\n    this._start += 2\n    return r\n  }\n\n  writeUInt16BE (value) {\n    const r = this.buffer.writeUInt16BE(value, this._start)\n    this._start += 2\n    return r\n  }\n\n  readUInt32BE () {\n    const r = this.buffer.readUInt32BE(this._start)\n    this._start += 4\n    return r\n  }\n\n  writeUInt32BE (value) {\n    const r = this.buffer.writeUInt32BE(value, this._start)\n    this._start += 4\n    return r\n  }\n}\n"",""import pako from 'pako'\n\nimport { FileSystem } from '../models/FileSystem.js'\nimport { GitObject } from '../models/GitObject.js'\nimport { writeObjectLoose } from '../storage/writeObjectLoose.js'\nimport { shasum } from '../utils/shasum.js'\n\nexport async function writeObject ({\n  fs: _fs,\n  gitdir,\n  type,\n  object,\n  format = 'content',\n  oid = undefined,\n  dryRun = false\n}) {\n  if (format !== 'deflated') {\n    if (format !== 'wrapped') {\n      object = GitObject.wrap({ type, object })\n    }\n    oid = await shasum(object)\n    object = Buffer.from(pako.deflate(object))\n  }\n  if (!dryRun) {\n    const fs = new FileSystem(_fs)\n    await writeObjectLoose({ fs, gitdir, object, format: 'deflated', oid })\n  }\n  return oid\n}\n"",""export function dirname (path) {\n  const last = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'))\n  if (last === -1) return '.'\n  if (last === 0) return '/'\n  return path.slice(0, last)\n}\n"",""import { FileSystem } from '../models/FileSystem.js'\nimport { GitConfig } from '../models/GitConfig.js'\n\nexport class GitConfigManager {\n  static async get ({ fs: _fs, gitdir }) {\n    const fs = new FileSystem(_fs)\n    // We can improve efficiency later if needed.\n    // TODO: read from full list of git config files\n    const text = await fs.read(`${gitdir}/config`, { encoding: 'utf8' })\n    return GitConfig.from(text)\n  }\n\n  static async save ({ fs: _fs, gitdir, config }) {\n    const fs = new FileSystem(_fs)\n    // We can improve efficiency later if needed.\n    // TODO: handle saving to the correct global/user/repo location\n    await fs.write(`${gitdir}/config`, config.toString(), {\n      encoding: 'utf8'\n    })\n  }\n}\n"",""'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n"",""export const pkg = {\n  name: 'isomorphic-git',\n  version: '0.70.7',\n  agent: 'git/isomorphic-git@0.70.7'\n}\n"",""export function basename (path) {\n  const last = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'))\n  if (last > -1) {\n    path = path.slice(last + 1)\n  }\n  return path\n}\n"",""import { GitRefManager } from '../managers/GitRefManager.js'\nimport { E, GitError } from '../models/GitError.js'\nimport { readObject } from '../storage/readObject.js'\nimport { join } from '../utils/join'\nimport { resolveTree } from '../utils/resolveTree.js'\n\nimport { FileSystem } from './FileSystem.js'\nimport { GitTree } from './GitTree.js'\n\nexport class GitWalkerRepo {\n  constructor ({ fs: _fs, gitdir, ref }) {\n    const fs = new FileSystem(_fs)\n    this.fs = fs\n    this.gitdir = gitdir\n    this.mapPromise = (async () => {\n      const map = new Map()\n      let oid\n      try {\n        oid = await GitRefManager.resolve({ fs, gitdir, ref })\n      } catch (e) {\n        // Handle fresh branches with no commits\n        if (e.code === E.ResolveRefError) {\n          oid = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'\n        }\n      }\n      const tree = await resolveTree({ fs, gitdir, oid })\n      tree.type = 'tree'\n      map.set('.', tree)\n      return map\n    })()\n    const walker = this\n    this.ConstructEntry = class RepoEntry {\n      constructor (entry) {\n        Object.assign(this, entry)\n      }\n\n      async populateStat () {\n        if (!this.exists) return\n        await walker.populateStat(this)\n      }\n\n      async populateContent () {\n        if (!this.exists) return\n        await walker.populateContent(this)\n      }\n\n      async populateHash () {\n        if (!this.exists) return\n        await walker.populateHash(this)\n      }\n    }\n  }\n\n  async readdir (entry) {\n    if (!entry.exists) return []\n    const filepath = entry.fullpath\n    const { fs, gitdir } = this\n    const map = await this.mapPromise\n    const obj = map.get(filepath)\n    if (!obj) throw new Error(`No obj for ${filepath}`)\n    const oid = obj.oid\n    if (!oid) throw new Error(`No oid for obj ${JSON.stringify(obj)}`)\n    if (obj.type !== 'tree') {\n      // TODO: support submodules (type === 'commit')\n      return null\n    }\n    const { type, object } = await readObject({ fs, gitdir, oid })\n    if (type !== obj.type) {\n      throw new GitError(E.ObjectTypeAssertionFail, {\n        oid,\n        expected: obj.type,\n        type\n      })\n    }\n    const tree = GitTree.from(object)\n    // cache all entries\n    for (const entry of tree) {\n      map.set(join(filepath, entry.path), entry)\n    }\n    return tree.entries().map(entry => ({\n      fullpath: join(filepath, entry.path),\n      basename: entry.path,\n      exists: true\n    }))\n  }\n\n  async populateStat (entry) {\n    // All we can add here is mode and type.\n    const map = await this.mapPromise\n    const stats = map.get(entry.fullpath)\n    if (!stats) {\n      throw new Error(\n        `ENOENT: no such file or directory, lstat '${entry.fullpath}'`\n      )\n    }\n    const { mode, type } = stats\n    Object.assign(entry, { mode, type })\n  }\n\n  async populateContent (entry) {\n    const map = await this.mapPromise\n    const { fs, gitdir } = this\n    const obj = map.get(entry.fullpath)\n    if (!obj) throw new Error(`No obj for ${entry.fullpath}`)\n    const oid = obj.oid\n    if (!oid) throw new Error(`No oid for entry ${JSON.stringify(obj)}`)\n    const { type, object } = await readObject({ fs, gitdir, oid })\n    if (type === 'tree') {\n      throw new Error(`EISDIR: illegal operation on a directory, read`)\n    }\n    Object.assign(entry, { content: object })\n  }\n\n  async populateHash (entry) {\n    const map = await this.mapPromise\n    const obj = map.get(entry.fullpath)\n    if (!obj) {\n      throw new Error(\n        `ENOENT: no such file or directory, open '${entry.fullpath}'`\n      )\n    }\n    const oid = obj.oid\n    Object.assign(entry, { oid })\n  }\n}\n"",""import { GitRefManager } from '../managers/GitRefManager.js'\nimport { E, GitError } from '../models/GitError.js'\nimport { readObject } from '../storage/readObject.js'\nimport { join } from '../utils/join'\nimport { normalizeMode } from '../utils/normalizeMode.js'\nimport { resolveTree } from '../utils/resolveTree.js'\n\nimport { FileSystem } from './FileSystem.js'\nimport { GitTree } from './GitTree.js'\n\nexport class GitWalkerRepo2 {\n  constructor ({ fs: _fs, gitdir, ref }) {\n    const fs = new FileSystem(_fs)\n    this.fs = fs\n    this.gitdir = gitdir\n    this.mapPromise = (async () => {\n      const map = new Map()\n      let oid\n      try {\n        oid = await GitRefManager.resolve({ fs, gitdir, ref })\n      } catch (e) {\n        // Handle fresh branches with no commits\n        if (e.code === E.ResolveRefError) {\n          oid = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'\n        }\n      }\n      const tree = await resolveTree({ fs, gitdir, oid })\n      tree.type = 'tree'\n      tree.mode = '40000'\n      map.set('.', tree)\n      return map\n    })()\n    const walker = this\n    this.ConstructEntry = class TreeEntry {\n      constructor (fullpath) {\n        this._fullpath = fullpath\n        this._type = false\n        this._mode = false\n        this._stat = false\n        this._content = false\n        this._oid = false\n      }\n\n      async type () {\n        return walker.type(this)\n      }\n\n      async mode () {\n        return walker.mode(this)\n      }\n\n      async stat () {\n        return walker.stat(this)\n      }\n\n      async content () {\n        return walker.content(this)\n      }\n\n      async oid () {\n        return walker.oid(this)\n      }\n    }\n  }\n\n  async readdir (entry) {\n    const filepath = entry._fullpath\n    const { fs, gitdir } = this\n    const map = await this.mapPromise\n    const obj = map.get(filepath)\n    if (!obj) throw new Error(`No obj for ${filepath}`)\n    const oid = obj.oid\n    if (!oid) throw new Error(`No oid for obj ${JSON.stringify(obj)}`)\n    if (obj.type !== 'tree') {\n      // TODO: support submodules (type === 'commit')\n      return null\n    }\n    const { type, object } = await readObject({ fs, gitdir, oid })\n    if (type !== obj.type) {\n      throw new GitError(E.ObjectTypeAssertionFail, {\n        oid,\n        expected: obj.type,\n        type\n      })\n    }\n    const tree = GitTree.from(object)\n    // cache all entries\n    for (const entry of tree) {\n      map.set(join(filepath, entry.path), entry)\n    }\n    return tree.entries().map(entry => join(filepath, entry.path))\n  }\n\n  async type (entry) {\n    if (entry._type === false) {\n      const map = await this.mapPromise\n      const { type } = map.get(entry._fullpath)\n      entry._type = type\n    }\n    return entry._type\n  }\n\n  async mode (entry) {\n    if (entry._mode === false) {\n      const map = await this.mapPromise\n      const { mode } = map.get(entry._fullpath)\n      entry._mode = normalizeMode(parseInt(mode, 8))\n    }\n    return entry._mode\n  }\n\n  async stat (_entry) {}\n\n  async content (entry) {\n    if (entry._content === false) {\n      const map = await this.mapPromise\n      const { fs, gitdir } = this\n      const obj = map.get(entry._fullpath)\n      const oid = obj.oid\n      const { type, object } = await readObject({ fs, gitdir, oid })\n      if (type !== 'blob') {\n        entry._content = void 0\n      } else {\n        entry._content = object\n      }\n    }\n    return entry._content\n  }\n\n  async oid (entry) {\n    if (entry._oid === false) {\n      const map = await this.mapPromise\n      const obj = map.get(entry._fullpath)\n      entry._oid = obj.oid\n    }\n    return entry._oid\n  }\n}\n"",""// @ts-check\nimport { FileSystem } from '../models/FileSystem.js'\nimport { GitWalkerRepo } from '../models/GitWalkerRepo.js'\nimport { GitWalkerRepo2 } from '../models/GitWalkerRepo2.js'\nimport { join } from '../utils/join.js'\nimport { cores } from '../utils/plugins.js'\nimport { GitWalkBeta1Symbol, GitWalkBeta2Symbol } from '../utils/symbols.js'\n\n/**\n *\n * @typedef Walker\n * @property {Symbol} Symbol('GitWalkerSymbol')\n */\n\n/**\n * Get a git commit `Walker`\n *\n * See [walkBeta2](./walkBeta2.md)\n *\n * @param {object} args\n * @param {string} [args.ref='HEAD'] - The commit to walk\n *\n * @returns {Walker} Returns a git commit Walker\n *\n */\nexport function TREE ({\n  ref = 'HEAD',\n  // @ts-ignore\n  core = 'default',\n  // @ts-ignore\n  dir,\n  // @ts-ignore\n  gitdir,\n  // @ts-ignore\n  fs: _fs\n}) {\n  const o = Object.create(null)\n  Object.defineProperty(o, GitWalkBeta1Symbol, {\n    value: function () {\n      gitdir = gitdir || join(dir, '.git')\n      _fs = cores.get(core).get('fs')\n      const fs = new FileSystem(_fs)\n      return new GitWalkerRepo({ fs, gitdir, ref })\n    }\n  })\n  Object.defineProperty(o, GitWalkBeta2Symbol, {\n    value: function ({ fs, gitdir }) {\n      return new GitWalkerRepo2({ fs, gitdir, ref })\n    }\n  })\n  Object.freeze(o)\n  return o\n}\n"",""import { forAwait } from './forAwait.js'\n\nexport async function collect (iterable) {\n  const buffers = []\n  // This will be easier once `for await ... of` loops are available.\n  await forAwait(iterable, value => buffers.push(Buffer.from(value)))\n  return Buffer.concat(buffers)\n}\n"",""import { getIterator } from './getIterator.js'\n\n// Currently 'for await' upsets my linters.\nexport async function forAwait (iterable, cb) {\n  const iter = getIterator(iterable)\n  while (true) {\n    const { value, done } = await iter.next()\n    if (value) await cb(value)\n    if (done) break\n  }\n  if (iter.return) iter.return()\n}\n"",""import AsyncLock from 'async-lock'\n\nimport { FileSystem } from '../models/FileSystem.js'\nimport { join } from '../utils/join.js'\n\nlet lock = null\n\nexport class GitShallowManager {\n  static async read ({ fs: _fs, gitdir }) {\n    const fs = new FileSystem(_fs)\n    if (lock === null) lock = new AsyncLock()\n    const filepath = join(gitdir, 'shallow')\n    const oids = new Set()\n    await lock.acquire(filepath, async function () {\n      const text = await fs.read(filepath, { encoding: 'utf8' })\n      if (text === null) return oids // no file\n      if (text.trim() === '') return oids // empty file\n      text\n        .trim()\n        .split('\\n')\n        .map(oid => oids.add(oid))\n    })\n    return oids\n  }\n\n  static async write ({ fs: _fs, gitdir, oids }) {\n    const fs = new FileSystem(_fs)\n    if (lock === null) lock = new AsyncLock()\n    const filepath = join(gitdir, 'shallow')\n    if (oids.size > 0) {\n      const text = [...oids].join('\\n') + '\\n'\n      await lock.acquire(filepath, async function () {\n        await fs.write(filepath, text, {\n          encoding: 'utf8'\n        })\n      })\n    } else {\n      // No shallows\n      await lock.acquire(filepath, async function () {\n        await fs.rm(filepath)\n      })\n    }\n  }\n}\n"",""import { GitAnnotatedTag } from '../models/GitAnnotatedTag.js'\nimport { GitCommit } from '../models/GitCommit.js'\nimport { E, GitError } from '../models/GitError.js'\nimport { GitTree } from '../models/GitTree.js'\nimport { readObject } from '../storage/readObject.js'\n\nexport async function resolveTree ({ fs, gitdir, oid }) {\n  // Empty tree - bypass `readObject`\n  if (oid === '4b825dc642cb6eb9a060e54bf8d69288fbee4904') {\n    return { tree: GitTree.from([]), oid }\n  }\n  const { type, object } = await readObject({ fs, gitdir, oid })\n  // Resolve annotated tag objects to whatever\n  if (type === 'tag') {\n    oid = GitAnnotatedTag.from(object).parse().object\n    return resolveTree({ fs, gitdir, oid })\n  }\n  // Resolve commits to trees\n  if (type === 'commit') {\n    oid = GitCommit.from(object).parse().tree\n    return resolveTree({ fs, gitdir, oid })\n  }\n  if (type !== 'tree') {\n    throw new GitError(E.ResolveTreeError, { oid })\n  }\n  return { tree: GitTree.from(object), oid }\n}\n"",""import { RunningMinimum } from '../models/RunningMinimum'\n\n// Take an array of length N of\n//   iterators of length Q_n\n//     of strings\n// and return an iterator of length max(Q_n) for all n\n//   of arrays of length N\n//     of string|null who all have the same string value\nexport function * unionOfIterators2 (sets) {\n  /* NOTE: We can assume all arrays are sorted.\n   * Indexes are sorted because they are defined that way:\n   *\n   * > Index entries are sorted in ascending order on the name field,\n   * > interpreted as a string of unsigned bytes (i.e. memcmp() order, no\n   * > localization, no special casing of directory separator '/'). Entries\n   * > with the same name are sorted by their stage field.\n   *\n   * Trees should be sorted because they are created directly from indexes.\n   * They definitely should be sorted, or else they wouldn't have a unique SHA1.\n   * So that would be very naughty on the part of the tree-creator.\n   *\n   * Lastly, the working dir entries are sorted because I choose to sort them\n   * in my FileSystem.readdir() implementation.\n   */\n\n  // Init\n  const min = new RunningMinimum()\n  let minimum\n  const heads = []\n  const numsets = sets.length\n  for (let i = 0; i < numsets; i++) {\n    // Abuse the fact that iterators continue to return 'undefined' for value\n    // once they are done\n    heads[i] = sets[i].next().value\n    if (heads[i] !== undefined) {\n      min.consider(heads[i])\n    }\n  }\n  if (min.value === null) return\n  // Iterate\n  while (true) {\n    const result = []\n    minimum = min.value\n    min.reset()\n    for (let i = 0; i < numsets; i++) {\n      if (heads[i] !== undefined && heads[i] === minimum) {\n        result[i] = heads[i]\n        heads[i] = sets[i].next().value\n      } else {\n        // A little hacky, but eh\n        result[i] = null\n      }\n      if (heads[i] !== undefined) {\n        min.consider(heads[i])\n      }\n    }\n    yield result\n    if (min.value === null) return\n  }\n}\n"",""// @ts-check\nimport { FileSystem } from '../models/FileSystem.js'\nimport { arrayRange } from '../utils/arrayRange.js'\nimport { flat } from '../utils/flat.js'\nimport { join } from '../utils/join.js'\nimport { cores } from '../utils/plugins.js'\nimport { GitWalkBeta2Symbol } from '../utils/symbols.js'\nimport { unionOfIterators2 } from '../utils/unionOfIterators2.js'\n\n/**\n *\n * @typedef {Object} Walker\n * @property {Symbol} Symbol('GitWalkBeta2Symbol')\n */\n\n/**\n *\n * @typedef {Object} Stat Normalized subset of filesystem `stat` data:\n * @property {number} ctimeSeconds\n * @property {number} ctimeNanoseconds\n * @property {number} mtimeSeconds\n * @property {number} mtimeNanoseconds\n * @property {number} dev\n * @property {number} ino\n * @property {number} mode\n * @property {number} uid\n * @property {number} gid\n * @property {number} size\n */\n\n/**\n *\n * @typedef {Object} WalkerEntry The `WalkerEntry` is an interface that abstracts computing many common tree / blob stats.\n * @property {function(): Promise<'tree'|'blob'|'special'|'commit'>} type\n * @property {function(): Promise<number>} mode\n * @property {function(): Promise<string>} oid\n * @property {function(): Promise<Buffer>} content\n * @property {function(): Promise<Stat>} stat\n */\n\n/**\n * A powerful recursive tree-walking utility.\n *\n * The `walk` API (tentatively named `walkBeta2`) simplifies gathering detailed information about a tree or comparing all the filepaths in two or more trees.\n * Trees can be git commits, the working directory, or the or git index (staging area).\n * As long as a file or directory is present in at least one of the trees, it will be traversed.\n * Entries are traversed in alphabetical order.\n *\n * The arguments to `walk` are the `trees` you want to traverse, and 3 optional transform functions:\n *  `map`, `reduce`, and `iterate`.\n *\n * ## `TREE`, `WORKDIR`, and `STAGE`\n *\n * Tree walkers are represented by three separate functions that can be imported:\n *\n * ```js\n * import { TREE, WORKDIR, STAGE } from 'isomorphic-git'\n * ```\n *\n * These functions return opaque handles called `Walker`s.\n * The only thing that `Walker` objects are good for is passing into `walkBeta2`.\n * Here are the three `Walker`s passed into `walkBeta2` by the `statusMatrix` command for example:\n *\n * ```js\n * let ref = 'HEAD'\n *\n * let trees = [TREE({ ref }), WORKDIR(), STAGE()]\n * ```\n *\n * For the arguments, see the doc pages for [TREE](./TREE.md), [WORKDIR](./WORKDIR.md), and [STAGE](./STAGE.md).\n *\n * `map`, `reduce`, and `iterate` allow you control the recursive walk by pruning and transforming `WalkerEntry`s into the desired result.\n *\n * ## WalkerEntry\n *\n * {@link WalkerEntry typedef}\n *\n * `map` receives an array of `WalkerEntry[]` as its main argument, one `WalkerEntry` for each `Walker` in the `trees` argument.\n * The methods are memoized per `WalkerEntry` so calling them multiple times in a `map` function does not adversely impact performance.\n * By only computing these values if needed, you build can build lean, mean, efficient walking machines.\n *\n * ### WalkerEntry#type()\n *\n * Returns the kind as a string. This is normally either `tree` or `blob`.\n *\n * `TREE`, `STAGE`, and `WORKDIR` walkers all return a string.\n *\n * Possible values:\n *\n * - `'tree'` directory\n * - `'blob'` file\n * - `'special'` used by `WORKDIR` to represent irregular files like sockets and FIFOs\n * - `'commit'` used by `TREE` to represent submodules\n *\n * ```js\n * await entry.type()\n * ```\n *\n * ### WalkerEntry#mode()\n *\n * Returns the file mode as a number. Use this to distinguish between regular files, symlinks, and executable files.\n *\n * `TREE`, `STAGE`, and `WORKDIR` walkers all return a number for all `type`s of entries.\n *\n * It has been normalized to one of the 4 values that are allowed in git commits:\n *\n * - `0o40000` directory\n * - `0o100644` file\n * - `0o100755` file (executable)\n * - `0o120000` symlink\n *\n * Tip: to make modes more readable, you can print them to octal using `.toString(8)`.\n *\n * ```js\n * await entry.mode()\n * ```\n *\n * ### WalkerEntry#oid()\n *\n * Returns the SHA-1 object id for blobs and trees.\n *\n * `TREE` walkers return a string for `blob` and `tree` entries.\n *\n * `STAGE` and `WORKDIR` walkers return a string for `blob` entries and `undefined` for `tree` entries.\n *\n * ```js\n * await entry.oid()\n * ```\n *\n * ### WalkerEntry#content()\n *\n * Returns the file contents as a Buffer.\n *\n * `TREE` and `WORKDIR` walkers return a Buffer for `blob` entries and `undefined` for `tree` entries.\n *\n * `STAGE` walkers always return `undefined` since the file contents are never stored in the stage.\n *\n * ```js\n * await entry.content()\n * ```\n *\n * ### WalkerEntry#stat()\n *\n * Returns a normalized subset of filesystem Stat data.\n *\n * `WORKDIR` walkers return a `Stat` for `blob` and `tree` entries.\n *\n * `STAGE` walkers return a `Stat` for `blob` entries and `undefined` for `tree` entries.\n *\n * `TREE` walkers return `undefined` for all entry types.\n *\n * ```js\n * await entry.stat()\n * ```\n *\n * {@link Stat typedef}\n *\n * ## map(string, Array<WalkerEntry|null>) => Promise<any>\n *\n * This is the function that is called once per entry BEFORE visiting the children of that node.\n *\n * If you return `null` for a `tree` entry, then none of the children of that `tree` entry will be walked.\n *\n * This is a good place for query logic, such as examining the contents of a file.\n * Ultimately, compare all the entries and return any values you are interested in.\n * If you do not return a value (or return undefined) that entry will be filtered from the results.\n *\n * Example 1: Find all the files containing the word 'foo'.\n * ```js\n * async function map(filepath, [head, workdir]) {\n *   let content = (await workdir.content()).toString('utf8')\n *   if (content.contains('foo')) {\n *     return {\n *       filepath,\n *       content\n *     }\n *   }\n * }\n * ```\n *\n * Example 2: Return the difference between the working directory and the HEAD commit\n * ```js\n * const diff = require('diff-lines')\n * async function map(filepath, [head, workdir]) {\n *   return {\n *     filepath,\n *     oid: await head.oid(),\n *     diff: diff((await head.content()).toString('utf8'), (await workdir.content()).toString('utf8'))\n *   }\n * }\n * ```\n *\n * Example 3:\n * ```js\n * let path = require('path')\n * // Only examine files in the directory `cwd`\n * let cwd = 'src/app'\n * async function map (filepath, [head, workdir, stage]) {\n *   if (\n *     // don't skip the root directory\n *     head.fullpath !== '.' &&\n *     // return true for 'src' and 'src/app'\n *     !cwd.startsWith(filepath) &&\n *     // return true for 'src/app/*'\n *     path.dirname(filepath) !== cwd\n *   ) {\n *     return null\n *   } else {\n *     return filepath\n *   }\n * }\n * ```\n *\n * ## reduce(parent, children)\n *\n * This is the function that is called once per entry AFTER visiting the children of that node.\n *\n * Default: `async (parent, children) => parent === undefined ? children.flat() : [parent, children].flat()`\n *\n * The default implementation of this function returns all directories and children in a giant flat array.\n * You can define a different accumulation method though.\n *\n * Example: Return a hierarchical structure\n * ```js\n * async function reduce (parent, children) {\n *   return Object.assign(parent, { children })\n * }\n * ```\n *\n * ## iterate(walk, children)\n *\n * Default: `(walk, children) => Promise.all([...children].map(walk))`\n *\n * The default implementation recurses all children concurrently using Promise.all.\n * However you could use a custom function to traverse children serially or use a global queue to throttle recursion.\n *\n * @param {object} args\n * @param {string} [args.core = 'default'] - The plugin core identifier to use for plugin injection\n * @param {FileSystem} [args.fs] - [deprecated] The filesystem containing the git repo. Overrides the fs provided by the [plugin system](./plugin_fs.md).\n * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path\n * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path\n * @param {Walker[]} args.trees - The trees you want to traverse\n * @param {function(string, ?WalkerEntry[]): Promise<any>} [args.map] - Transform `WalkerEntry`s into a result form\n * @param {function(any, any[]): Promise<any>} [args.reduce] - Control how mapped entries are combined with their parent result\n * @param {function(function(WalkerEntry[]): Promise<any[]>, IterableIterator<WalkerEntry[]>): Promise<any[]>} [args.iterate] - Fine-tune how entries within a tree are iterated over\n *\n * @returns {Promise<any>} The finished tree-walking result\n *\n *\n */\nexport async function walkBeta2 ({\n  core = 'default',\n  dir,\n  gitdir = join(dir, '.git'),\n  fs: _fs = cores.get(core).get('fs'),\n  trees,\n  // @ts-ignore\n  map = async (_, entry) => entry,\n  // The default reducer is a flatmap that filters out undefineds.\n  reduce = async (parent, children) => {\n    const flatten = flat(children)\n    if (parent !== undefined) flatten.unshift(parent)\n    return flatten\n  },\n  // The default iterate function walks all children concurrently\n  iterate = (walk, children) => Promise.all([...children].map(walk))\n}) {\n  try {\n    const fs = new FileSystem(_fs)\n    const walkers = trees.map(proxy =>\n      proxy[GitWalkBeta2Symbol]({ fs, dir, gitdir })\n    )\n\n    const root = new Array(walkers.length).fill('.')\n    const range = arrayRange(0, walkers.length)\n    const unionWalkerFromReaddir = async entries => {\n      range.map(i => {\n        entries[i] = entries[i] && new walkers[i].ConstructEntry(entries[i])\n      })\n      const subdirs = await Promise.all(\n        range.map(i => (entries[i] ? walkers[i].readdir(entries[i]) : []))\n      )\n      // Now process child directories\n      const iterators = subdirs\n        .map(array => (array === null ? [] : array))\n        .map(array => array[Symbol.iterator]())\n      return {\n        entries,\n        children: unionOfIterators2(iterators)\n      }\n    }\n\n    const walk = async root => {\n      const { entries, children } = await unionWalkerFromReaddir(root)\n      const fullpath = entries.find(entry => entry && entry._fullpath)._fullpath\n      const parent = await map(fullpath, entries)\n      if (parent !== null) {\n        let walkedChildren = await iterate(walk, children)\n        walkedChildren = walkedChildren.filter(x => x !== undefined)\n        return reduce(parent, walkedChildren)\n      }\n    }\n    return walk(root)\n  } catch (err) {\n    err.caller = 'git.walk'\n    throw err\n  }\n}\n"",""export function compareStrings (a, b) {\n  // https://stackoverflow.com/a/40355107/2168416\n  return -(a < b) || +(a > b)\n}\n"",""export function padHex (b, n) {\n  const s = n.toString(16)\n  return '0'.repeat(b - s.length) + s\n}\n"",""export function parseAuthor (author) {\n  const [, name, email, timestamp, offset] = author.match(\n    /^(.*) <(.*)> (.*) (.*)$/\n  )\n  return {\n    name: name,\n    email: email,\n    timestamp: Number(timestamp),\n    timezoneOffset: parseTimezoneOffset(offset)\n  }\n}\n\n// The amount of effort that went into crafting these cases to handle\n// -0 (just so we don't lose that information when parsing and reconstructing)\n// but can also default to +0 was extraordinary.\n\nfunction parseTimezoneOffset (offset) {\n  let [, sign, hours, minutes] = offset.match(/(\\+|-)(\\d\\d)(\\d\\d)/)\n  minutes = (sign === '+' ? 1 : -1) * (Number(hours) * 60 + Number(minutes))\n  return negateExceptForZero(minutes)\n}\n\nfunction negateExceptForZero (n) {\n  return n === 0 ? n : -n\n}\n"",""export function indent (str) {\n  return (\n    str\n      .trim()\n      .split('\\n')\n      .map(x => ' ' + x)\n      .join('\\n') + '\\n'\n  )\n}\n"",""import { compareStrings } from './compareStrings'\n\nexport function comparePath (a, b) {\n  // https://stackoverflow.com/a/40355107/2168416\n  return compareStrings(a.path, b.path)\n}\n"",""import crc32 from 'crc-32'\nimport applyDelta from 'git-apply-delta'\nimport * as marky from 'marky'\nimport pako from 'pako'\n\nimport { E, GitError } from '../models/GitError.js'\nimport { BufferCursor } from '../utils/BufferCursor.js'\nimport { listpack } from '../utils/git-list-pack.js'\nimport { log } from '../utils/log.js'\nimport { shasum } from '../utils/shasum.js'\n\nimport { GitObject } from './GitObject'\n\nfunction decodeVarInt (reader) {\n  const bytes = []\n  let byte = 0\n  let multibyte = 0\n  do {\n    byte = reader.readUInt8()\n    // We keep bits 6543210\n    const lastSeven = byte & 0b01111111\n    bytes.push(lastSeven)\n    // Whether the next byte is part of the variable-length encoded number\n    // is encoded in bit 7\n    multibyte = byte & 0b10000000\n  } while (multibyte)\n  // Now that all the bytes are in big-endian order,\n  // alternate shifting the bits left by 7 and OR-ing the next byte.\n  // And... do a weird increment-by-one thing that I don't quite understand.\n  return bytes.reduce((a, b) => ((a + 1) << 7) | b, -1)\n}\n\n// I'm pretty much copying this one from the git C source code,\n// because it makes no sense.\nfunction otherVarIntDecode (reader, startWith) {\n  let result = startWith\n  let shift = 4\n  let byte = null\n  do {\n    byte = reader.readUInt8()\n    result |= (byte & 0b01111111) << shift\n    shift += 7\n  } while (byte & 0b10000000)\n  return result\n}\n\nexport class GitPackIndex {\n  constructor (stuff) {\n    Object.assign(this, stuff)\n    this.offsetCache = {}\n  }\n\n  static async fromIdx ({ idx, getExternalRefDelta }) {\n    marky.mark('fromIdx')\n    const reader = new BufferCursor(idx)\n    const magic = reader.slice(4).toString('hex')\n    // Check for IDX v2 magic number\n    if (magic !== 'ff744f63') {\n      return // undefined\n    }\n    const version = reader.readUInt32BE()\n    if (version !== 2) {\n      throw new GitError(E.InternalFail, {\n        message: `Unable to read version ${version} packfile IDX. (Only version 2 supported)`\n      })\n    }\n    if (idx.byteLength > 2048 * 1024 * 1024) {\n      throw new GitError(E.InternalFail, {\n        message: `To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.`\n      })\n    }\n    // Skip over fanout table\n    reader.seek(reader.tell() + 4 * 255)\n    // Get hashes\n    const size = reader.readUInt32BE()\n    marky.mark('hashes')\n    const hashes = []\n    for (let i = 0; i < size; i++) {\n      const hash = reader.slice(20).toString('hex')\n      hashes[i] = hash\n    }\n    log(`hashes ${marky.stop('hashes').duration}`)\n    reader.seek(reader.tell() + 4 * size)\n    // Skip over CRCs\n    marky.mark('offsets')\n    // Get offsets\n    const offsets = new Map()\n    for (let i = 0; i < size; i++) {\n      offsets.set(hashes[i], reader.readUInt32BE())\n    }\n    log(`offsets ${marky.stop('offsets').duration}`)\n    const packfileSha = reader.slice(20).toString('hex')\n    log(`fromIdx ${marky.stop('fromIdx').duration}`)\n    return new GitPackIndex({\n      hashes,\n      crcs: {},\n      offsets,\n      packfileSha,\n      getExternalRefDelta\n    })\n  }\n\n  static async fromPack ({ pack, getExternalRefDelta, emitter, emitterPrefix }) {\n    const listpackTypes = {\n      1: 'commit',\n      2: 'tree',\n      3: 'blob',\n      4: 'tag',\n      6: 'ofs-delta',\n      7: 'ref-delta'\n    }\n    const offsetToObject = {}\n\n    // Older packfiles do NOT use the shasum of the pack itself,\n    // so it is recommended to just use whatever bytes are in the trailer.\n    // Source: https://github.com/git/git/commit/1190a1acf800acdcfd7569f87ac1560e2d077414\n    const packfileSha = pack.slice(-20).toString('hex')\n\n    const hashes = []\n    const crcs = {}\n    const offsets = new Map()\n    let totalObjectCount = null\n    let lastPercent = null\n    const times = {\n      hash: 0,\n      readSlice: 0,\n      offsets: 0,\n      crcs: 0,\n      sort: 0\n    }\n    let histogram = {\n      commit: 0,\n      tree: 0,\n      blob: 0,\n      tag: 0,\n      'ofs-delta': 0,\n      'ref-delta': 0\n    }\n    let bytesProcessed = 0\n\n    log('Indexing objects')\n    log(\n      `percent\\tmilliseconds\\tbytesProcessed\\tcommits\\ttrees\\tblobs\\ttags\\tofs-deltas\\tref-deltas`\n    )\n    marky.mark('total')\n    marky.mark('offsets')\n    marky.mark('percent')\n    await listpack([pack], ({ data, type, reference, offset, num }) => {\n      if (totalObjectCount === null) totalObjectCount = num\n      const percent = Math.floor(\n        ((totalObjectCount - num) * 100) / totalObjectCount\n      )\n      if (percent !== lastPercent) {\n        if (emitter) {\n          emitter.emit(`${emitterPrefix}progress`, {\n            phase: 'Receiving objects',\n            loaded: totalObjectCount - num,\n            total: totalObjectCount,\n            lengthComputable: true\n          })\n        }\n        log(\n          `${percent}%\\t${Math.floor(\n            marky.stop('percent').duration\n          )}\\t${bytesProcessed}\\t${histogram.commit}\\t${histogram.tree}\\t${\n            histogram.blob\n          }\\t${histogram.tag}\\t${histogram['ofs-delta']}\\t${\n            histogram['ref-delta']\n          }`\n        )\n\n        histogram = {\n          commit: 0,\n          tree: 0,\n          blob: 0,\n          tag: 0,\n          'ofs-delta': 0,\n          'ref-delta': 0\n        }\n        bytesProcessed = 0\n        marky.mark('percent')\n      }\n      lastPercent = percent\n      // Change type from a number to a meaningful string\n      type = listpackTypes[type]\n\n      histogram[type]++\n      bytesProcessed += data.byteLength\n\n      if (['commit', 'tree', 'blob', 'tag'].includes(type)) {\n        offsetToObject[offset] = {\n          type,\n          offset\n        }\n      } else if (type === 'ofs-delta') {\n        offsetToObject[offset] = {\n          type,\n          offset\n        }\n      } else if (type === 'ref-delta') {\n        offsetToObject[offset] = {\n          type,\n          offset\n        }\n      }\n    })\n    times['offsets'] = Math.floor(marky.stop('offsets').duration)\n\n    log('Computing CRCs')\n    marky.mark('crcs')\n    // We need to know the lengths of the slices to compute the CRCs.\n    const offsetArray = Object.keys(offsetToObject).map(Number)\n    for (const [i, start] of offsetArray.entries()) {\n      const end =\n        i + 1 === offsetArray.length ? pack.byteLength - 20 : offsetArray[i + 1]\n      const o = offsetToObject[start]\n      const crc = crc32.buf(pack.slice(start, end)) >>> 0\n      o.end = end\n      o.crc = crc\n    }\n    times['crcs'] = Math.floor(marky.stop('crcs').duration)\n\n    // We don't have the hashes yet. But we can generate them using the .readSlice function!\n    const p = new GitPackIndex({\n      pack: Promise.resolve(pack),\n      packfileSha,\n      crcs,\n      hashes,\n      offsets,\n      getExternalRefDelta\n    })\n\n    // Resolve deltas and compute the oids\n    log('Resolving deltas')\n    log(`percent2\\tmilliseconds2\\tcallsToReadSlice\\tcallsToGetExternal`)\n    marky.mark('percent')\n    lastPercent = null\n    let count = 0\n    let callsToReadSlice = 0\n    let callsToGetExternal = 0\n    const timeByDepth = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n    const objectsByDepth = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n    for (let offset in offsetToObject) {\n      offset = Number(offset)\n      const percent = Math.floor((count++ * 100) / totalObjectCount)\n      if (percent !== lastPercent) {\n        log(\n          `${percent}%\\t${Math.floor(\n            marky.stop('percent').duration\n          )}\\t${callsToReadSlice}\\t${callsToGetExternal}`\n        )\n        if (emitter) {\n          emitter.emit(`${emitterPrefix}progress`, {\n            phase: 'Resolving deltas',\n            loaded: count,\n            total: totalObjectCount,\n            lengthComputable: true\n          })\n        }\n        marky.mark('percent')\n        callsToReadSlice = 0\n        callsToGetExternal = 0\n      }\n      lastPercent = percent\n\n      const o = offsetToObject[offset]\n      if (o.oid) continue\n      try {\n        p.readDepth = 0\n        p.externalReadDepth = 0\n        marky.mark('readSlice')\n        const { type, object } = await p.readSlice({ start: offset })\n        const time = marky.stop('readSlice').duration\n        times.readSlice += time\n        callsToReadSlice += p.readDepth\n        callsToGetExternal += p.externalReadDepth\n        timeByDepth[p.readDepth] += time\n        objectsByDepth[p.readDepth] += 1\n        marky.mark('hash')\n        const oid = await shasum(GitObject.wrap({ type, object }))\n        times.hash += marky.stop('hash').duration\n        o.oid = oid\n        hashes.push(oid)\n        offsets.set(oid, offset)\n        crcs[oid] = o.crc\n      } catch (err) {\n        log('ERROR', err)\n        continue\n      }\n    }\n\n    marky.mark('sort')\n    hashes.sort()\n    times['sort'] = Math.floor(marky.stop('sort').duration)\n    const totalElapsedTime = marky.stop('total').duration\n    times.hash = Math.floor(times.hash)\n    times.readSlice = Math.floor(times.readSlice)\n    times.misc = Math.floor(\n      Object.values(times).reduce((a, b) => a - b, totalElapsedTime)\n    )\n    log(Object.keys(times).join('\\t'))\n    log(Object.values(times).join('\\t'))\n    log('by depth:')\n    log([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].join('\\t'))\n    log(objectsByDepth.slice(0, 12).join('\\t'))\n    log(\n      timeByDepth\n        .map(Math.floor)\n        .slice(0, 12)\n        .join('\\t')\n    )\n    return p\n  }\n\n  async toBuffer () {\n    const buffers = []\n    const write = (str, encoding) => {\n      buffers.push(Buffer.from(str, encoding))\n    }\n    // Write out IDX v2 magic number\n    write('ff744f63', 'hex')\n    // Write out version number 2\n    write('00000002', 'hex')\n    // Write fanout table\n    const fanoutBuffer = new BufferCursor(Buffer.alloc(256 * 4))\n    for (let i = 0; i < 256; i++) {\n      let count = 0\n      for (const hash of this.hashes) {\n        if (parseInt(hash.slice(0, 2), 16) <= i) count++\n      }\n      fanoutBuffer.writeUInt32BE(count)\n    }\n    buffers.push(fanoutBuffer.buffer)\n    // Write out hashes\n    for (const hash of this.hashes) {\n      write(hash, 'hex')\n    }\n    // Write out crcs\n    const crcsBuffer = new BufferCursor(Buffer.alloc(this.hashes.length * 4))\n    for (const hash of this.hashes) {\n      crcsBuffer.writeUInt32BE(this.crcs[hash])\n    }\n    buffers.push(crcsBuffer.buffer)\n    // Write out offsets\n    const offsetsBuffer = new BufferCursor(Buffer.alloc(this.hashes.length * 4))\n    for (const hash of this.hashes) {\n      offsetsBuffer.writeUInt32BE(this.offsets.get(hash))\n    }\n    buffers.push(offsetsBuffer.buffer)\n    // Write out packfile checksum\n    write(this.packfileSha, 'hex')\n    // Write out shasum\n    const totalBuffer = Buffer.concat(buffers)\n    const sha = await shasum(totalBuffer)\n    const shaBuffer = Buffer.alloc(20)\n    shaBuffer.write(sha, 'hex')\n    return Buffer.concat([totalBuffer, shaBuffer])\n  }\n\n  async load ({ pack }) {\n    this.pack = pack\n  }\n\n  async unload () {\n    this.pack = null\n  }\n\n  async read ({ oid }) {\n    if (!this.offsets.get(oid)) {\n      if (this.getExternalRefDelta) {\n        this.externalReadDepth++\n        return this.getExternalRefDelta(oid)\n      } else {\n        throw new GitError(E.InternalFail, {\n          message: `Could not read object ${oid} from packfile`\n        })\n      }\n    }\n    const start = this.offsets.get(oid)\n    return this.readSlice({ start })\n  }\n\n  async readSlice ({ start }) {\n    if (this.offsetCache[start]) {\n      return Object.assign({}, this.offsetCache[start])\n    }\n    this.readDepth++\n    const types = {\n      0b0010000: 'commit',\n      0b0100000: 'tree',\n      0b0110000: 'blob',\n      0b1000000: 'tag',\n      0b1100000: 'ofs_delta',\n      0b1110000: 'ref_delta'\n    }\n    if (!this.pack) {\n      throw new GitError(E.InternalFail, {\n        message:\n          'Tried to read from a GitPackIndex with no packfile loaded into memory'\n      })\n    }\n    const raw = (await this.pack).slice(start)\n    const reader = new BufferCursor(raw)\n    const byte = reader.readUInt8()\n    // Object type is encoded in bits 654\n    const btype = byte & 0b1110000\n    let type = types[btype]\n    if (type === undefined) {\n      throw new GitError(E.InternalFail, {\n        message: 'Unrecognized type: 0b' + btype.toString(2)\n      })\n    }\n    // The length encoding get complicated.\n    // Last four bits of length is encoded in bits 3210\n    const lastFour = byte & 0b1111\n    let length = lastFour\n    // Whether the next byte is part of the variable-length encoded number\n    // is encoded in bit 7\n    const multibyte = byte & 0b10000000\n    if (multibyte) {\n      length = otherVarIntDecode(reader, lastFour)\n    }\n    let base = null\n    let object = null\n    // Handle deltified objects\n    if (type === 'ofs_delta') {\n      const offset = decodeVarInt(reader)\n      const baseOffset = start - offset\n      ;({ object: base, type } = await this.readSlice({ start: baseOffset }))\n    }\n    if (type === 'ref_delta') {\n      const oid = reader.slice(20).toString('hex')\n      ;({ object: base, type } = await this.read({ oid }))\n    }\n    // Handle undeltified objects\n    const buffer = raw.slice(reader.tell())\n    object = Buffer.from(pako.inflate(buffer))\n    // Assert that the object length is as expected.\n    if (object.byteLength !== length) {\n      throw new GitError(E.InternalFail, {\n        message: `Packfile told us object would have length ${length} but it had length ${object.byteLength}`\n      })\n    }\n    if (base) {\n      object = Buffer.from(applyDelta(object, base))\n    }\n    // Cache the result based on depth.\n    if (this.readDepth > 3) {\n      // hand tuned for speed / memory usage tradeoff\n      this.offsetCache[start] = { type, object }\n    }\n    return { type, format: 'content', object }\n  }\n}\n"",""import { log } from './log.js'\nimport { normalizeStats } from './normalizeStats.js'\n\nexport function compareStats (entry, stats) {\n  // Comparison based on the description in Paragraph 4 of\n  // https://www.kernel.org/pub/software/scm/git/docs/technical/racy-git.txt\n  const e = normalizeStats(entry)\n  const s = normalizeStats(stats)\n  const staleness =\n    e.mode !== s.mode ||\n    e.mtimeSeconds !== s.mtimeSeconds ||\n    e.ctimeSeconds !== s.ctimeSeconds ||\n    e.uid !== s.uid ||\n    e.gid !== s.gid ||\n    e.ino !== s.ino ||\n    e.size !== s.size\n  // console.log(staleness ? 'stale:' : 'fresh:')\n  if (staleness && log.enabled) {\n    console.table([justWhatMatters(e), justWhatMatters(s)])\n  }\n  return staleness\n}\n\nfunction justWhatMatters (e) {\n  return {\n    mode: e.mode,\n    mtimeSeconds: e.mtimeSeconds,\n    ctimeSeconds: e.ctimeSeconds,\n    uid: e.uid,\n    gid: e.gid,\n    ino: e.ino,\n    size: e.size\n  }\n}\n"",""export function extractAuthFromUrl (url) {\n  // For whatever reason, the `fetch` API does not convert credentials embedded in the URL\n  // into Basic Authentication headers automatically. Instead it throws an error!\n  // So we must manually parse the URL, rip out the user:password portion if it is present\n  // and compute the Authorization header.\n  // Note: I tried using new URL(url) but that throws a security exception in Edge. :rolleyes:\n  let userpass = url.match(/^https?:\\/\\/([^/]+)@/)\n  if (userpass == null) return null\n  userpass = userpass[1]\n  const [username, password] = userpass.split(':')\n  url = url.replace(`${userpass}@`, '')\n  return { url, username, password }\n}\n"",""import { E, GitError } from '../models/GitError.js'\nimport { calculateBasicAuthHeader } from '../utils/calculateBasicAuthHeader.js'\nimport { calculateBasicAuthUsernamePasswordPair } from '../utils/calculateBasicAuthUsernamePasswordPair.js'\nimport { collect } from '../utils/collect.js'\nimport { extractAuthFromUrl } from '../utils/extractAuthFromUrl.js'\nimport { http as builtinHttp } from '../utils/http.js'\nimport { pkg } from '../utils/pkg.js'\nimport { cores } from '../utils/plugins.js'\nimport { parseRefsAdResponse } from '../wire/parseRefsAdResponse.js'\n\n// Try to accomodate known CORS proxy implementations:\n// - https://jcubic.pl/proxy.php?  <-- uses query string\n// - https://cors.isomorphic-git.org  <-- uses path\nconst corsProxify = (corsProxy, url) =>\n  corsProxy.endsWith('?')\n    ? `${corsProxy}${url}`\n    : `${corsProxy}/${url.replace(/^https?:\\/\\//, '')}`\n\nexport class GitRemoteHTTP {\n  static async capabilities () {\n    return ['discover', 'connect']\n  }\n\n  static async discover ({\n    core,\n    corsProxy,\n    service,\n    url,\n    noGitSuffix,\n    auth,\n    headers\n  }) {\n    const _origUrl = url\n    // Auto-append the (necessary) .git if it's missing.\n    if (!url.endsWith('.git') && !noGitSuffix) url = url += '.git'\n    const urlAuth = extractAuthFromUrl(url)\n    if (urlAuth) {\n      url = urlAuth.url\n      // To try to be backwards compatible with simple-get's behavior, which uses Node's http.request\n      // setting an Authorization header will override what is in the URL.\n      // Ergo manually specified auth parameters will override those in the URL.\n      // However, since the oauth2 option is incompatible with usernames and passwords, rather than throw an\n      // E.MixUsernamePasswordOauth2formatTokenError error, we'll avoid that situation by ignoring the username\n      // and/or password in the url.\n      if (!auth.oauth2format) {\n        auth.username = auth.username || urlAuth.username\n        auth.password = auth.password || urlAuth.password\n      }\n    }\n    if (corsProxy) {\n      url = corsProxify(corsProxy, url)\n    }\n    // Get the 'http' plugin\n    const http = cores.get(core).get('http') || builtinHttp\n    // headers['Accept'] = `application/x-${service}-advertisement`\n    // Only send a user agent in Node and to CORS proxies by default,\n    // because Gogs and others might not whitelist 'user-agent' in allowed headers.\n    // Solutions using 'process.browser' can't be used as they rely on bundler shims,\n    // ans solutions using 'process.versions.node' had to be discarded because the\n    // BrowserFS 'process' shim is too complete.\n    if (typeof window === 'undefined' || corsProxy) {\n      headers['user-agent'] = headers['user-agent'] || pkg.agent\n    }\n    // If the username came from the URL, we want to allow the password to be missing.\n    // This is because Github allows using the token as the username with an empty password\n    // so that is a style of git clone URL we might encounter and we don't want to throw a \""Missing password or token\"" error.\n    // Also, we don't want to prematurely throw an error before the credentialManager plugin has\n    // had an opportunity to provide the password.\n    const _auth = calculateBasicAuthUsernamePasswordPair(auth, !!urlAuth)\n    if (_auth) {\n      headers['Authorization'] = calculateBasicAuthHeader(_auth)\n    }\n    let res = await http({\n      core,\n      method: 'GET',\n      url: `${url}/info/refs?service=${service}`,\n      headers\n    })\n    if (res.statusCode === 401 && cores.get(core).has('credentialManager')) {\n      // Acquire credentials and try again\n      const credentialManager = cores.get(core).get('credentialManager')\n      auth = await credentialManager.fill({ url: _origUrl })\n      const _auth = calculateBasicAuthUsernamePasswordPair(auth)\n      if (_auth) {\n        headers['Authorization'] = calculateBasicAuthHeader(_auth)\n      }\n      res = await http({\n        core,\n        method: 'GET',\n        url: `${url}/info/refs?service=${service}`,\n        headers\n      })\n      // Tell credential manager if the credentials were no good\n      if (res.statusCode === 401) {\n        await credentialManager.rejected({ url: _origUrl, auth })\n      } else if (res.statusCode === 200) {\n        await credentialManager.approved({ url: _origUrl, auth })\n      }\n    }\n    if (res.statusCode !== 200) {\n      throw new GitError(E.HTTPError, {\n        statusCode: res.statusCode,\n        statusMessage: res.statusMessage\n      })\n    }\n    // Git \""smart\"" HTTP servers should respond with the correct Content-Type header.\n    if (\n      res.headers['content-type'] === `application/x-${service}-advertisement`\n    ) {\n      const remoteHTTP = await parseRefsAdResponse(res.body, { service })\n      remoteHTTP.auth = auth\n      return remoteHTTP\n    } else {\n      // If they don't send the correct content-type header, that's a good indicator it is either a \""dumb\"" HTTP\n      // server, or the user specified an incorrect remote URL and the response is actually an HTML page.\n      // In this case, we save the response as plain text so we can generate a better error message if needed.\n      const data = await collect(res.body)\n      const response = data.toString('utf8')\n      const preview =\n        response.length < 256 ? response : response.slice(0, 256) + '...'\n      // For backwards compatibility, try to parse it anyway.\n      try {\n        const remoteHTTP = await parseRefsAdResponse([data], { service })\n        remoteHTTP.auth = auth\n        return remoteHTTP\n      } catch (e) {\n        throw new GitError(E.RemoteDoesNotSupportSmartHTTP, {\n          preview,\n          response\n        })\n      }\n    }\n  }\n\n  static async connect ({\n    core,\n    emitter,\n    emitterPrefix,\n    corsProxy,\n    service,\n    url,\n    noGitSuffix,\n    auth,\n    body,\n    headers\n  }) {\n    // Auto-append the (necessary) .git if it's missing.\n    if (!url.endsWith('.git') && !noGitSuffix) url = url += '.git'\n    const urlAuth = extractAuthFromUrl(url)\n    if (urlAuth) {\n      url = urlAuth.url\n      // To try to be backwards compatible with simple-get's behavior, which uses Node's http.request\n      // setting an Authorization header will override what is in the URL.\n      // Ergo manually specified auth parameters will override those in the URL.\n      auth.username = auth.username || urlAuth.username\n      auth.password = auth.password || urlAuth.password\n    }\n    if (corsProxy) {\n      url = corsProxify(corsProxy, url)\n    }\n    headers['content-type'] = `application/x-${service}-request`\n    headers['accept'] = `application/x-${service}-result`\n    // Get the 'http' plugin\n    const http = cores.get(core).get('http') || builtinHttp\n    // Only send a user agent in Node and to CORS proxies by default,\n    // because Gogs and others might not whitelist 'user-agent' in allowed headers.\n    // Solutions using 'process.browser' can't be used as they rely on bundler shims,\n    // ans solutions using 'process.versions.node' had to be discarded because the\n    // BrowserFS 'process' shim is too complete.\n    if (typeof window === 'undefined' || corsProxy) {\n      headers['user-agent'] = headers['user-agent'] || pkg.agent\n    }\n    // If the username came from the URL, we want to allow the password to be missing.\n    // This is because Github allows using the token as the username with an empty password\n    // so that is a style of git clone URL we might encounter and we don't want to throw a \""Missing password or token\"" error.\n    // Also, we don't want to prematurely throw an error before the credentialManager plugin has\n    // had an opportunity to provide the password.\n    auth = calculateBasicAuthUsernamePasswordPair(auth, !!urlAuth)\n    if (auth) {\n      headers['Authorization'] = calculateBasicAuthHeader(auth)\n    }\n    const res = await http({\n      core,\n      emitter,\n      emitterPrefix,\n      method: 'POST',\n      url: `${url}/${service}`,\n      body,\n      headers\n    })\n    if (res.statusCode !== 200) {\n      throw new GitError(E.HTTPError, {\n        statusCode: res.statusCode,\n        statusMessage: res.statusMessage\n      })\n    }\n    return res\n  }\n}\n"",""'use strict';\nmodule.exports = require('./lib');\n"",""export function formatAuthor ({ name, email, timestamp, timezoneOffset }) {\n  timezoneOffset = formatTimezoneOffset(timezoneOffset)\n  return `${name} <${email}> ${timestamp} ${timezoneOffset}`\n}\n\n// The amount of effort that went into crafting these cases to handle\n// -0 (just so we don't lose that information when parsing and reconstructing)\n// but can also default to +0 was extraordinary.\n\nfunction formatTimezoneOffset (minutes) {\n  const sign = simpleSign(negateExceptForZero(minutes))\n  minutes = Math.abs(minutes)\n  const hours = Math.floor(minutes / 60)\n  minutes -= hours * 60\n  let strHours = String(hours)\n  let strMinutes = String(minutes)\n  if (strHours.length < 2) strHours = '0' + strHours\n  if (strMinutes.length < 2) strMinutes = '0' + strMinutes\n  return (sign === -1 ? '-' : '+') + strHours + strMinutes\n}\n\nfunction simpleSign (n) {\n  return Math.sign(n) || (Object.is(n, -0) ? -1 : 1)\n}\n\nfunction negateExceptForZero (n) {\n  return n === 0 ? n : -n\n}\n"",""import { E, GitError } from '../models/GitError.js'\n\nimport { oauth2 } from './oauth2'\n\nexport function calculateBasicAuthUsernamePasswordPair (\n  { username, password, token, oauth2format } = {},\n  allowEmptyPassword = false\n) {\n  // This checks for the presense and/or absense of each of the 4 parameters,\n  // converts that to a 4-bit binary representation, and then handles\n  // every possible combination (2^4 or 16 cases) with a lookup table.\n  const key = [!!username, !!password, !!token, !!oauth2format]\n    .map(Number)\n    .join('')\n  // See the truth table on https://isomorphic-git.github.io/docs/authentication.html\n  // prettier-ignore\n  switch (key) {\n    case '0000': return null\n    case '1000':\n      if (allowEmptyPassword) return { username, password: '' }\n      else throw new GitError(E.MissingPasswordTokenError)\n    case '0100': throw new GitError(E.MissingUsernameError)\n    case '1100': return { username, password }\n    case '0010': return { username: token, password: '' } // Github's alternative format\n    case '1010': return { username, password: token }\n    case '0110': throw new GitError(E.MixPasswordTokenError)\n    case '1110': throw new GitError(E.MixUsernamePasswordTokenError)\n    case '0001': throw new GitError(E.MissingTokenError)\n    case '1001': throw new GitError(E.MixUsernameOauth2formatMissingTokenError)\n    case '0101': throw new GitError(E.MixPasswordOauth2formatMissingTokenError)\n    case '1101': throw new GitError(E.MixUsernamePasswordOauth2formatMissingTokenError)\n    case '0011': return oauth2(oauth2format, token)\n    case '1011': throw new GitError(E.MixUsernameOauth2formatTokenError)\n    case '0111': throw new GitError(E.MixPasswordOauth2formatTokenError)\n    case '1111': throw new GitError(E.MixUsernamePasswordOauth2formatTokenError)\n  }\n}\n"",""export function calculateBasicAuthHeader ({ username, password }) {\n  return `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`\n}\n"",""export class FIFO {\n  constructor () {\n    this._queue = []\n  }\n\n  write (chunk) {\n    if (this._ended) {\n      throw Error('You cannot write to a FIFO that has already been ended!')\n    }\n    if (this._waiting) {\n      const resolve = this._waiting\n      this._waiting = null\n      resolve({ value: chunk })\n    } else {\n      this._queue.push(chunk)\n    }\n  }\n\n  end () {\n    this._ended = true\n    if (this._waiting) {\n      const resolve = this._waiting\n      this._waiting = null\n      resolve({ done: true })\n    }\n  }\n\n  destroy (err) {\n    this._ended = true\n    this.error = err\n  }\n\n  async next () {\n    if (this._queue.length > 0) {\n      return { value: this._queue.shift() }\n    }\n    if (this._ended) {\n      return { done: true }\n    }\n    if (this._waiting) {\n      throw Error(\n        'You cannot call read until the previous call to read has returned!'\n      )\n    }\n    return new Promise(resolve => {\n      this._waiting = resolve\n    })\n  }\n}\n"",""// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n"",""import ignore from 'ignore'\n\nimport { FileSystem } from '../models/FileSystem.js'\nimport { basename } from '../utils/basename.js'\nimport { dirname } from '../utils/dirname.js'\nimport { join } from '../utils/join.js'\n\n// I'm putting this in a Manager because I reckon it could benefit\n// from a LOT of cacheing.\n\n// TODO: Implement .git/info/exclude\n\nexport class GitIgnoreManager {\n  static async isIgnored ({\n    fs: _fs,\n    dir,\n    gitdir = join(dir, '.git'),\n    filepath\n  }) {\n    const fs = new FileSystem(_fs)\n    // ALWAYS ignore \"".git\"" folders.\n    if (basename(filepath) === '.git') return true\n    // '.' is not a valid gitignore entry, so '.' is never ignored\n    if (filepath === '.') return false\n    // Find all the .gitignore files that could affect this file\n    const pairs = [\n      {\n        gitignore: join(dir, '.gitignore'),\n        filepath\n      }\n    ]\n    const pieces = filepath.split('/')\n    for (let i = 1; i < pieces.length; i++) {\n      const folder = pieces.slice(0, i).join('/')\n      const file = pieces.slice(i).join('/')\n      pairs.push({\n        gitignore: join(dir, folder, '.gitignore'),\n        filepath: file\n      })\n    }\n    let ignoredStatus = false\n    for (const p of pairs) {\n      let file\n      try {\n        file = await fs.read(p.gitignore, 'utf8')\n      } catch (err) {\n        if (err.code === 'NOENT') continue\n      }\n      const ign = ignore().add(file)\n      // If the parent directory is excluded, we are done.\n      // \""It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined.\""\n      // source: https://git-scm.com/docs/gitignore\n      const parentdir = dirname(p.filepath)\n      if (parentdir !== '.' && ign.ignores(parentdir)) return true\n      // If the file is currently ignored, test for UNignoring.\n      if (ignoredStatus) {\n        ignoredStatus = !ign.test(p.filepath).unignored\n      } else {\n        ignoredStatus = ign.test(p.filepath).ignored\n      }\n    }\n    return ignoredStatus\n  }\n}\n"",""import { basename } from '../utils/basename.js'\nimport { dirname } from '../utils/dirname.js'\n\n/*::\ntype Node = {\n  type: string,\n  fullpath: string,\n  basename: string,\n  metadata: Object, // mode, oid\n  parent?: Node,\n  children: Array<Node>\n}\n*/\n\nexport function flatFileListToDirectoryStructure (files) {\n  const inodes = new Map()\n  const mkdir = function (name) {\n    if (!inodes.has(name)) {\n      const dir = {\n        type: 'tree',\n        fullpath: name,\n        basename: basename(name),\n        metadata: {},\n        children: []\n      }\n      inodes.set(name, dir)\n      // This recursively generates any missing parent folders.\n      // We do it after we've added the inode to the set so that\n      // we don't recurse infinitely trying to create the root '.' dirname.\n      dir.parent = mkdir(dirname(name))\n      if (dir.parent && dir.parent !== dir) dir.parent.children.push(dir)\n    }\n    return inodes.get(name)\n  }\n\n  const mkfile = function (name, metadata) {\n    if (!inodes.has(name)) {\n      const file = {\n        type: 'blob',\n        fullpath: name,\n        basename: basename(name),\n        metadata: metadata,\n        // This recursively generates any missing parent folders.\n        parent: mkdir(dirname(name)),\n        children: []\n      }\n      if (file.parent) file.parent.children.push(file)\n      inodes.set(name, file)\n    }\n    return inodes.get(name)\n  }\n\n  mkdir('.')\n  for (const file of files) {\n    mkfile(file.path, file)\n  }\n  return inodes\n}\n"",""import { E, GitError } from '../models/GitError.js'\n\n/**\n * Use with push and fetch to set Basic Authentication headers.\n *\n * @link https://isomorphic-git.github.io/docs/utils_oauth2.html\n */\nexport function oauth2 (company, token) {\n  switch (company) {\n    case 'github':\n      return {\n        username: token,\n        password: 'x-oauth-basic'\n      }\n    case 'githubapp':\n      return {\n        username: 'x-access-token',\n        password: token\n      }\n    case 'bitbucket':\n      return {\n        username: 'x-token-auth',\n        password: token\n      }\n    case 'gitlab':\n      return {\n        username: 'oauth2',\n        password: token\n      }\n    default:\n      throw new GitError(E.UnknownOauth2Format, { company })\n  }\n}\n"",""/*\nIf 'side-band' or 'side-band-64k' capabilities have been specified by\nthe client, the server will send the packfile data multiplexed.\n\nEach packet starting with the packet-line length of the amount of data\nthat follows, followed by a single byte specifying the sideband the\nfollowing data is coming in on.\n\nIn 'side-band' mode, it will send up to 999 data bytes plus 1 control\ncode, for a total of up to 1000 bytes in a pkt-line.  In 'side-band-64k'\nmode it will send up to 65519 data bytes plus 1 control code, for a\ntotal of up to 65520 bytes in a pkt-line.\n\nThe sideband byte will be a '1', '2' or a '3'. Sideband '1' will contain\npackfile data, sideband '2' will be used for progress information that the\nclient will generally print to stderr and sideband '3' is used for error\ninformation.\n\nIf no 'side-band' capability was specified, the server will stream the\nentire packfile without multiplexing.\n*/\nimport { FIFO } from '../utils/FIFO.js'\n\nimport { GitPktLine } from './GitPktLine.js'\n\nexport class GitSideBand {\n  static demux (input) {\n    const read = GitPktLine.streamReader(input)\n    // And now for the ridiculous side-band or side-band-64k protocol\n    const packetlines = new FIFO()\n    const packfile = new FIFO()\n    const progress = new FIFO()\n    // TODO: Use a proper through stream?\n    const nextBit = async function () {\n      const line = await read()\n      // Skip over flush packets\n      if (line === null) return nextBit()\n      // A made up convention to signal there's no more to read.\n      if (line === true) {\n        packetlines.end()\n        progress.end()\n        packfile.end()\n        return\n      }\n      // Examine first byte to determine which output \""stream\"" to use\n      switch (line[0]) {\n        case 1: // pack data\n          packfile.write(line.slice(1))\n          break\n        case 2: // progress message\n          progress.write(line.slice(1))\n          break\n        case 3: // fatal error message just before stream aborts\n          const error = line.slice(1)\n          progress.write(error)\n          packfile.destroy(new Error(error.toString('utf8')))\n          return\n        default:\n          // Not part of the side-band-64k protocol\n          packetlines.write(line.slice(0))\n      }\n      // Careful not to blow up the stack.\n      // I think Promises in a tail-call position should be OK.\n      nextBit()\n    }\n    nextBit()\n    return {\n      packetlines,\n      packfile,\n      progress\n    }\n  }\n  // static mux ({\n  //   protocol, // 'side-band' or 'side-band-64k'\n  //   packetlines,\n  //   packfile,\n  //   progress,\n  //   error\n  // }) {\n  //   const MAX_PACKET_LENGTH = protocol === 'side-band-64k' ? 999 : 65519\n  //   let output = new PassThrough()\n  //   packetlines.on('data', data => {\n  //     if (data === null) {\n  //       output.write(GitPktLine.flush())\n  //     } else {\n  //       output.write(GitPktLine.encode(data))\n  //     }\n  //   })\n  //   let packfileWasEmpty = true\n  //   let packfileEnded = false\n  //   let progressEnded = false\n  //   let errorEnded = false\n  //   let goodbye = Buffer.concat([\n  //     GitPktLine.encode(Buffer.from('010A', 'hex')),\n  //     GitPktLine.flush()\n  //   ])\n  //   packfile\n  //     .on('data', data => {\n  //       packfileWasEmpty = false\n  //       const buffers = splitBuffer(data, MAX_PACKET_LENGTH)\n  //       for (const buffer of buffers) {\n  //         output.write(\n  //           GitPktLine.encode(Buffer.concat([Buffer.from('01', 'hex'), buffer]))\n  //         )\n  //       }\n  //     })\n  //     .on('end', () => {\n  //       packfileEnded = true\n  //       if (!packfileWasEmpty) output.write(goodbye)\n  //       if (progressEnded && errorEnded) output.end()\n  //     })\n  //   progress\n  //     .on('data', data => {\n  //       const buffers = splitBuffer(data, MAX_PACKET_LENGTH)\n  //       for (const buffer of buffers) {\n  //         output.write(\n  //           GitPktLine.encode(Buffer.concat([Buffer.from('02', 'hex'), buffer]))\n  //         )\n  //       }\n  //     })\n  //     .on('end', () => {\n  //       progressEnded = true\n  //       if (packfileEnded && errorEnded) output.end()\n  //     })\n  //   error\n  //     .on('data', data => {\n  //       const buffers = splitBuffer(data, MAX_PACKET_LENGTH)\n  //       for (const buffer of buffers) {\n  //         output.write(\n  //           GitPktLine.encode(Buffer.concat([Buffer.from('03', 'hex'), buffer]))\n  //         )\n  //       }\n  //     })\n  //     .on('end', () => {\n  //       errorEnded = true\n  //       if (progressEnded && packfileEnded) output.end()\n  //     })\n  //   return output\n  // }\n}\n"",""/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n"",""/**\n * From https://github.com/git/git/blob/master/Documentation/technical/index-format.txt\n *\n * 32-bit mode, split into (high to low bits)\n *\n *  4-bit object type\n *    valid values in binary are 1000 (regular file), 1010 (symbolic link)\n *    and 1110 (gitlink)\n *\n *  3-bit unused\n *\n *  9-bit unix permission. Only 0755 and 0644 are valid for regular files.\n *  Symbolic links and gitlinks have value 0 in this field.\n */\nexport function normalizeMode (mode) {\n  // Note: BrowserFS will use -1 for \""unknown\""\n  // I need to make it non-negative for these bitshifts to work.\n  let type = mode > 0 ? mode >> 12 : 0\n  // If it isn't valid, assume it as a \""regular file\""\n  // 0100 = directory\n  // 1000 = regular file\n  // 1010 = symlink\n  // 1110 = gitlink\n  if (\n    type !== 0b0100 &&\n    type !== 0b1000 &&\n    type !== 0b1010 &&\n    type !== 0b1110\n  ) {\n    type = 0b1000\n  }\n  let permissions = mode & 0o777\n  // Is the file executable? then 755. Else 644.\n  if (permissions & 0b001001001) {\n    permissions = 0o755\n  } else {\n    permissions = 0o644\n  }\n  // If it's not a regular file, scrub all permissions\n  if (type !== 0b1000) permissions = 0\n  return (type << 12) + permissions\n}\n"",""import { E, GitError } from '../models/GitError.js'\n\nexport class GitRefSpec {\n  constructor ({ remotePath, localPath, force, matchPrefix }) {\n    Object.assign(this, {\n      remotePath,\n      localPath,\n      force,\n      matchPrefix\n    })\n  }\n\n  static from (refspec) {\n    const [\n      forceMatch,\n      remotePath,\n      remoteGlobMatch,\n      localPath,\n      localGlobMatch\n    ] = refspec.match(/^(\\+?)(.*?)(\\*?):(.*?)(\\*?)$/).slice(1)\n    const force = forceMatch === '+'\n    const remoteIsGlob = remoteGlobMatch === '*'\n    const localIsGlob = localGlobMatch === '*'\n    // validate\n    // TODO: Make this check more nuanced, and depend on whether this is a fetch refspec or a push refspec\n    if (remoteIsGlob !== localIsGlob) {\n      throw new GitError(E.InternalFail, { message: 'Invalid refspec' })\n    }\n    return new GitRefSpec({\n      remotePath,\n      localPath,\n      force,\n      matchPrefix: remoteIsGlob\n    })\n    // TODO: We need to run resolveRef on both paths to expand them to their full name.\n  }\n\n  translate (remoteBranch) {\n    if (this.matchPrefix) {\n      if (remoteBranch.startsWith(this.remotePath)) {\n        return this.localPath + remoteBranch.replace(this.remotePath, '')\n      }\n    } else {\n      if (remoteBranch === this.remotePath) return this.localPath\n    }\n    return null\n  }\n\n  reverseTranslate (localBranch) {\n    if (this.matchPrefix) {\n      if (localBranch.startsWith(this.localPath)) {\n        return this.remotePath + localBranch.replace(this.localPath, '')\n      }\n    } else {\n      if (localBranch === this.localPath) return this.remotePath\n    }\n    return null\n  }\n}\n"",""import { GitPackIndex } from '../models/GitPackIndex.js'\n\nconst PackfileCache = new Map()\n\nasync function loadPackIndex ({\n  fs,\n  filename,\n  getExternalRefDelta,\n  emitter,\n  emitterPrefix\n}) {\n  const idx = await fs.read(filename)\n  return GitPackIndex.fromIdx({ idx, getExternalRefDelta })\n}\n\nexport function readPackIndex ({\n  fs,\n  filename,\n  getExternalRefDelta,\n  emitter,\n  emitterPrefix\n}) {\n  // Try to get the packfile index from the in-memory cache\n  let p = PackfileCache.get(filename)\n  if (!p) {\n    p = loadPackIndex({\n      fs,\n      filename,\n      getExternalRefDelta,\n      emitter,\n      emitterPrefix\n    })\n    PackfileCache.set(filename, p)\n  }\n  return p\n}\n"",""import { getIterator } from './getIterator.js'\n\n// inspired by 'gartal' but lighter-weight and more battle-tested.\nexport class StreamReader {\n  constructor (stream) {\n    this.stream = getIterator(stream)\n    this.buffer = null\n    this.cursor = 0\n    this.undoCursor = 0\n    this.started = false\n    this._ended = false\n    this._discardedBytes = 0\n  }\n\n  eof () {\n    return this._ended && this.cursor === this.buffer.length\n  }\n\n  tell () {\n    return this._discardedBytes + this.cursor\n  }\n\n  async byte () {\n    if (this.eof()) return\n    if (!this.started) await this._init()\n    if (this.cursor === this.buffer.length) {\n      await this._loadnext()\n      if (this._ended) return\n    }\n    this._moveCursor(1)\n    return this.buffer[this.undoCursor]\n  }\n\n  async chunk () {\n    if (this.eof()) return\n    if (!this.started) await this._init()\n    if (this.cursor === this.buffer.length) {\n      await this._loadnext()\n      if (this._ended) return\n    }\n    this._moveCursor(this.buffer.length)\n    return this.buffer.slice(this.undoCursor, this.cursor)\n  }\n\n  async read (n) {\n    if (this.eof()) return\n    if (!this.started) await this._init()\n    if (this.cursor + n > this.buffer.length) {\n      this._trim()\n      await this._accumulate(n)\n    }\n    this._moveCursor(n)\n    return this.buffer.slice(this.undoCursor, this.cursor)\n  }\n\n  async skip (n) {\n    if (this.eof()) return\n    if (!this.started) await this._init()\n    if (this.cursor + n > this.buffer.length) {\n      this._trim()\n      await this._accumulate(n)\n    }\n    this._moveCursor(n)\n  }\n\n  async undo () {\n    this.cursor = this.undoCursor\n  }\n\n  async _next () {\n    this.started = true\n    let { done, value } = await this.stream.next()\n    if (done) {\n      this._ended = true\n    }\n    if (value) {\n      value = Buffer.from(value)\n    }\n    return value\n  }\n\n  _trim () {\n    // Throw away parts of the buffer we don't need anymore\n    // assert(this.cursor <= this.buffer.length)\n    this.buffer = this.buffer.slice(this.undoCursor)\n    this.cursor -= this.undoCursor\n    this._discardedBytes += this.undoCursor\n    this.undoCursor = 0\n  }\n\n  _moveCursor (n) {\n    this.undoCursor = this.cursor\n    this.cursor += n\n    if (this.cursor > this.buffer.length) {\n      this.cursor = this.buffer.length\n    }\n  }\n\n  async _accumulate (n) {\n    if (this._ended) return\n    // Expand the buffer until we have N bytes of data\n    // or we've reached the end of the stream\n    const buffers = [this.buffer]\n    while (this.cursor + n > lengthBuffers(buffers)) {\n      const nextbuffer = await this._next()\n      if (this._ended) break\n      buffers.push(nextbuffer)\n    }\n    this.buffer = Buffer.concat(buffers)\n  }\n\n  async _loadnext () {\n    this._discardedBytes += this.buffer.length\n    this.undoCursor = 0\n    this.cursor = 0\n    this.buffer = await this._next()\n  }\n\n  async _init () {\n    this.buffer = await this._next()\n  }\n}\n\n// This helper function helps us postpone concatenating buffers, which\n// would create intermediate buffer objects,\nfunction lengthBuffers (buffers) {\n  return buffers.reduce((acc, buffer) => acc + buffer.length, 0)\n}\n"",""import { fromValue } from './AsyncIterator.js'\n\nexport function getIterator (iterable) {\n  if (iterable[Symbol.asyncIterator]) {\n    return iterable[Symbol.asyncIterator]()\n  }\n  if (iterable[Symbol.iterator]) {\n    return iterable[Symbol.iterator]()\n  }\n  if (iterable.next) {\n    return iterable\n  }\n  return fromValue(iterable)\n}\n"",""// Convert a web ReadableStream (not Node stream!) to an Async Iterator\n// adapted from https://jakearchibald.com/2017/async-iterators-and-generators/\nexport function fromStream (stream) {\n  // Use native async iteration if it's available.\n  if (stream[Symbol.asyncIterator]) return stream\n  const reader = stream.getReader()\n  return {\n    next () {\n      return reader.read()\n    },\n    return () {\n      reader.releaseLock()\n      return {}\n    },\n    [Symbol.asyncIterator] () {\n      return this\n    }\n  }\n}\n\n// This will be easier with async generator functions.\nexport function fromValue (value) {\n  let queue = [value]\n  return {\n    next () {\n      return Promise.resolve({ done: queue.length === 0, value: queue.pop() })\n    },\n    return () {\n      queue = []\n      return {}\n    },\n    [Symbol.asyncIterator] () {\n      return this\n    }\n  }\n}\n\n// Convert a Node stream to an Async Iterator\nexport function fromNodeStream (stream) {\n  // Use native async iteration if it's available.\n  if (\n    Object.getOwnPropertyDescriptor(stream, Symbol.asyncIterator) &&\n    Object.getOwnPropertyDescriptor(stream, Symbol.asyncIterator).enumerable\n  ) {\n    return stream\n  }\n  // Author's Note\n  // I tried many MANY ways to do this.\n  // I tried two npm modules (stream-to-async-iterator and streams-to-async-iterator) with no luck.\n  // I tried using 'readable' and .read(), and .pause() and .resume()\n  // It took me two loooong evenings to get to this point.\n  // So if you are horrified that this solution just builds up a queue with no backpressure,\n  // and turns Promises inside out, too bad. This is the first code that worked reliably.\n  let ended = false\n  const queue = []\n  let defer = {}\n  stream.on('data', chunk => {\n    queue.push(chunk)\n    if (defer.resolve) {\n      defer.resolve({ value: queue.shift(), done: false })\n      defer = {}\n    }\n  })\n  stream.on('error', err => {\n    if (defer.reject) {\n      defer.reject(err)\n      defer = {}\n    }\n  })\n  stream.on('end', () => {\n    ended = true\n    if (defer.resolve) {\n      defer.resolve({ done: true })\n      defer = {}\n    }\n  })\n  return {\n    next () {\n      return new Promise((resolve, reject) => {\n        if (queue.length === 0 && ended) {\n          return resolve({ done: true })\n        } else if (queue.length > 0) {\n          return resolve({ value: queue.shift(), done: false })\n        } else if (queue.length === 0 && !ended) {\n          defer = { resolve, reject }\n        }\n      })\n    },\n    return () {\n      stream.removeAllListeners()\n      if (stream.destroy) stream.destroy()\n    },\n    [Symbol.asyncIterator] () {\n      return this\n    }\n  }\n}\n"",""// TODO: Should I just polyfill Array.flat?\nexport const flat =\n  typeof Array.prototype.flat === 'undefined'\n    ? entries => entries.reduce((acc, x) => acc.concat(x), [])\n    : entries => entries.flat()\n"",""import { fromStream } from './AsyncIterator.js'\nimport { collect } from './collect.js'\n\nexport async function http ({\n  core,\n  emitter,\n  emitterPrefix,\n  url,\n  method = 'GET',\n  headers = {},\n  body\n}) {\n  // streaming uploads aren't possible yet in the browser\n  if (body) {\n    body = await collect(body)\n  }\n  const res = await global.fetch(url, { method, headers, body })\n  const iter =\n    res.body && res.body.getReader\n      ? fromStream(res.body)\n      : [new Uint8Array(await res.arrayBuffer())]\n  // convert Header object to ordinary JSON\n  headers = {}\n  for (const [key, value] of res.headers.entries()) {\n    headers[key] = value\n  }\n  return {\n    url: res.url,\n    method: res.method,\n    statusCode: res.status,\n    statusMessage: res.statusText,\n    body: iter,\n    headers: headers\n  }\n}\n"",""import { E, GitError } from '../models/GitError.js'\nimport { GitPktLine } from '../models/GitPktLine.js'\n\nexport async function parseRefsAdResponse (stream, { service }) {\n  const capabilities = new Set()\n  const refs = new Map()\n  const symrefs = new Map()\n\n  // There is probably a better way to do this, but for now\n  // let's just throw the result parser inline here.\n  const read = GitPktLine.streamReader(stream)\n  let lineOne = await read()\n  // skip past any flushes\n  while (lineOne === null) lineOne = await read()\n  if (lineOne === true) throw new GitError(E.EmptyServerResponseFail)\n  // Clients MUST ignore an LF at the end of the line.\n  if (lineOne.toString('utf8').replace(/\\n$/, '') !== `# service=${service}`) {\n    throw new GitError(E.AssertServerResponseFail, {\n      expected: `# service=${service}\\\\n`,\n      actual: lineOne.toString('utf8')\n    })\n  }\n  let lineTwo = await read()\n  // skip past any flushes\n  while (lineTwo === null) lineTwo = await read()\n  // In the edge case of a brand new repo, zero refs (and zero capabilities)\n  // are returned.\n  if (lineTwo === true) return { capabilities, refs, symrefs }\n  const [firstRef, capabilitiesLine] = splitAndAssert(\n    lineTwo.toString('utf8'),\n    '\\x00',\n    '\\\\x00'\n  )\n  capabilitiesLine.split(' ').map(x => capabilities.add(x))\n  const [ref, name] = splitAndAssert(firstRef, ' ', ' ')\n  refs.set(name, ref)\n  while (true) {\n    const line = await read()\n    if (line === true) break\n    if (line !== null) {\n      const [ref, name] = splitAndAssert(line.toString('utf8'), ' ', ' ')\n      refs.set(name, ref)\n    }\n  }\n  // Symrefs are thrown into the \""capabilities\"" unfortunately.\n  for (const cap of capabilities) {\n    if (cap.startsWith('symref=')) {\n      const m = cap.match(/symref=([^:]+):(.*)/)\n      if (m.length === 3) {\n        symrefs.set(m[1], m[2])\n      }\n    }\n  }\n  return { capabilities, refs, symrefs }\n}\n\nfunction splitAndAssert (line, sep, expected) {\n  const split = line.trim().split(sep)\n  if (split.length !== 2) {\n    throw new GitError(E.AssertServerResponseFail, {\n      expected: `Two strings separated by '${expected}'`,\n      actual: line.toString('utf8')\n    })\n  }\n  return split\n}\n"",""(function (exports) {\n\t'use strict';\n\n\tvar lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\tfunction b64ToByteArray(b64) {\n\t\tvar i, j, l, tmp, placeHolders, arr;\n\t\n\t\tif (b64.length % 4 > 0) {\n\t\t\tthrow 'Invalid string. Length must be a multiple of 4';\n\t\t}\n\n\t\t// the number of equal signs (place holders)\n\t\t// if there are two placeholders, than the two characters before it\n\t\t// represent one byte\n\t\t// if there is only one, then the three characters before it represent 2 bytes\n\t\t// this is just a cheap hack to not do indexOf twice\n\t\tplaceHolders = b64.indexOf('=');\n\t\tplaceHolders = placeHolders > 0 ? b64.length - placeHolders : 0;\n\n\t\t// base64 is 4/3 + up to two characters of the original data\n\t\tarr = [];//new Uint8Array(b64.length * 3 / 4 - placeHolders);\n\n\t\t// if there are placeholders, only get up to the last complete 4 chars\n\t\tl = placeHolders > 0 ? b64.length - 4 : b64.length;\n\n\t\tfor (i = 0, j = 0; i < l; i += 4, j += 3) {\n\t\t\ttmp = (lookup.indexOf(b64[i]) << 18) | (lookup.indexOf(b64[i + 1]) << 12) | (lookup.indexOf(b64[i + 2]) << 6) | lookup.indexOf(b64[i + 3]);\n\t\t\tarr.push((tmp & 0xFF0000) >> 16);\n\t\t\tarr.push((tmp & 0xFF00) >> 8);\n\t\t\tarr.push(tmp & 0xFF);\n\t\t}\n\n\t\tif (placeHolders === 2) {\n\t\t\ttmp = (lookup.indexOf(b64[i]) << 2) | (lookup.indexOf(b64[i + 1]) >> 4);\n\t\t\tarr.push(tmp & 0xFF);\n\t\t} else if (placeHolders === 1) {\n\t\t\ttmp = (lookup.indexOf(b64[i]) << 10) | (lookup.indexOf(b64[i + 1]) << 4) | (lookup.indexOf(b64[i + 2]) >> 2);\n\t\t\tarr.push((tmp >> 8) & 0xFF);\n\t\t\tarr.push(tmp & 0xFF);\n\t\t}\n\n\t\treturn arr;\n\t}\n\n\tfunction uint8ToBase64(uint8) {\n\t\tvar i,\n\t\t\textraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\n\t\t\toutput = \""\"",\n\t\t\ttemp, length;\n\n\t\tfunction tripletToBase64 (num) {\n\t\t\treturn lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];\n\t\t};\n\n\t\t// go through the array every three bytes, we'll deal with trailing stuff later\n\t\tfor (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\n\t\t\ttemp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n\t\t\toutput += tripletToBase64(temp);\n\t\t}\n\n\t\t// pad the end with zeros, but make sure to not forget the extra bytes\n\t\tswitch (extraBytes) {\n\t\t\tcase 1:\n\t\t\t\ttemp = uint8[uint8.length - 1];\n\t\t\t\toutput += lookup[temp >> 2];\n\t\t\t\toutput += lookup[(temp << 4) & 0x3F];\n\t\t\t\toutput += '==';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttemp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]);\n\t\t\t\toutput += lookup[temp >> 10];\n\t\t\t\toutput += lookup[(temp >> 4) & 0x3F];\n\t\t\t\toutput += lookup[(temp << 2) & 0x3F];\n\t\t\t\toutput += '=';\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tmodule.exports.toByteArray = b64ToByteArray;\n\tmodule.exports.fromByteArray = uint8ToBase64;\n}());\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n"",""export async function sleep (ms) {\n  return new Promise((resolve, reject) => setTimeout(resolve, ms))\n}\n"",""import { BufferCursor } from '../utils/BufferCursor.js'\nimport { comparePath } from '../utils/comparePath.js'\nimport { normalizeStats } from '../utils/normalizeStats.js'\nimport { shasum } from '../utils/shasum.js'\n\nimport { E, GitError } from './GitError.js'\n\n// Extract 1-bit assume-valid, 1-bit extended flag, 2-bit merge state flag, 12-bit path length flag\nfunction parseCacheEntryFlags (bits) {\n  return {\n    assumeValid: Boolean(bits & 0b1000000000000000),\n    extended: Boolean(bits & 0b0100000000000000),\n    stage: (bits & 0b0011000000000000) >> 12,\n    nameLength: bits & 0b0000111111111111\n  }\n}\n\nfunction renderCacheEntryFlags (entry) {\n  const flags = entry.flags\n  // 1-bit extended flag (must be zero in version 2)\n  flags.extended = false\n  // 12-bit name length if the length is less than 0xFFF; otherwise 0xFFF\n  // is stored in this field.\n  flags.nameLength = Math.min(Buffer.from(entry.path).length, 0xfff)\n  return (\n    (flags.assumeValid ? 0b1000000000000000 : 0) +\n    (flags.extended ? 0b0100000000000000 : 0) +\n    ((flags.stage & 0b11) << 12) +\n    (flags.nameLength & 0b111111111111)\n  )\n}\n\nexport class GitIndex {\n  /*::\n   _entries: Map<string, CacheEntry>\n   _dirty: boolean // Used to determine if index needs to be saved to filesystem\n   */\n  constructor (entries) {\n    this._dirty = false\n    this._entries = entries || new Map()\n  }\n\n  static async from (buffer) {\n    if (Buffer.isBuffer(buffer)) {\n      return GitIndex.fromBuffer(buffer)\n    } else if (buffer === null) {\n      return new GitIndex(null)\n    } else {\n      throw new GitError(E.InternalFail, {\n        message: 'invalid type passed to GitIndex.from'\n      })\n    }\n  }\n\n  static async fromBuffer (buffer) {\n    // Verify shasum\n    const shaComputed = await shasum(buffer.slice(0, -20))\n    const shaClaimed = buffer.slice(-20).toString('hex')\n    if (shaClaimed !== shaComputed) {\n      throw new GitError(E.InternalFail, {\n        message: `Invalid checksum in GitIndex buffer: expected ${shaClaimed} but saw ${shaComputed}`\n      })\n    }\n    const reader = new BufferCursor(buffer)\n    const _entries = new Map()\n    const magic = reader.toString('utf8', 4)\n    if (magic !== 'DIRC') {\n      throw new GitError(E.InternalFail, {\n        message: `Inavlid dircache magic file number: ${magic}`\n      })\n    }\n    const version = reader.readUInt32BE()\n    if (version !== 2) {\n      throw new GitError(E.InternalFail, {\n        message: `Unsupported dircache version: ${version}`\n      })\n    }\n    const numEntries = reader.readUInt32BE()\n    let i = 0\n    while (!reader.eof() && i < numEntries) {\n      const entry = {}\n      entry.ctimeSeconds = reader.readUInt32BE()\n      entry.ctimeNanoseconds = reader.readUInt32BE()\n      entry.mtimeSeconds = reader.readUInt32BE()\n      entry.mtimeNanoseconds = reader.readUInt32BE()\n      entry.dev = reader.readUInt32BE()\n      entry.ino = reader.readUInt32BE()\n      entry.mode = reader.readUInt32BE()\n      entry.uid = reader.readUInt32BE()\n      entry.gid = reader.readUInt32BE()\n      entry.size = reader.readUInt32BE()\n      entry.oid = reader.slice(20).toString('hex')\n      const flags = reader.readUInt16BE()\n      entry.flags = parseCacheEntryFlags(flags)\n      // TODO: handle if (version === 3 && entry.flags.extended)\n      const pathlength = buffer.indexOf(0, reader.tell() + 1) - reader.tell()\n      if (pathlength < 1) {\n        throw new GitError(E.InternalFail, {\n          message: `Got a path length of: ${pathlength}`\n        })\n      }\n      // TODO: handle pathnames larger than 12 bits\n      entry.path = reader.toString('utf8', pathlength)\n      // The next bit is awkward. We expect 1 to 8 null characters\n      // such that the total size of the entry is a multiple of 8 bits.\n      // (Hence subtract 12 bytes for the header.)\n      let padding = 8 - ((reader.tell() - 12) % 8)\n      if (padding === 0) padding = 8\n      while (padding--) {\n        const tmp = reader.readUInt8()\n        if (tmp !== 0) {\n          throw new GitError(E.InternalFail, {\n            message: `Expected 1-8 null characters but got '${tmp}' after ${entry.path}`\n          })\n        } else if (reader.eof()) {\n          throw new GitError(E.InternalFail, {\n            message: 'Unexpected end of file'\n          })\n        }\n      }\n      // end of awkward part\n      _entries.set(entry.path, entry)\n      i++\n    }\n    return new GitIndex(_entries)\n  }\n\n  get entries () {\n    return [...this._entries.values()].sort(comparePath)\n  }\n\n  get entriesMap () {\n    return this._entries\n  }\n\n  * [Symbol.iterator] () {\n    for (const entry of this.entries) {\n      yield entry\n    }\n  }\n\n  insert ({ filepath, stats, oid }) {\n    stats = normalizeStats(stats)\n    const bfilepath = Buffer.from(filepath)\n    const entry = {\n      ctimeSeconds: stats.ctimeSeconds,\n      ctimeNanoseconds: stats.ctimeNanoseconds,\n      mtimeSeconds: stats.mtimeSeconds,\n      mtimeNanoseconds: stats.mtimeNanoseconds,\n      dev: stats.dev,\n      ino: stats.ino,\n      // We provide a fallback value for `mode` here because not all fs\n      // implementations assign it, but we use it in GitTree.\n      // '100644' is for a \""regular non-executable file\""\n      mode: stats.mode || 0o100644,\n      uid: stats.uid,\n      gid: stats.gid,\n      size: stats.size,\n      path: filepath,\n      oid: oid,\n      flags: {\n        assumeValid: false,\n        extended: false,\n        stage: 0,\n        nameLength: bfilepath.length < 0xfff ? bfilepath.length : 0xfff\n      }\n    }\n    this._entries.set(entry.path, entry)\n    this._dirty = true\n  }\n\n  delete ({ filepath }) {\n    if (this._entries.has(filepath)) {\n      this._entries.delete(filepath)\n    } else {\n      for (const key of this._entries.keys()) {\n        if (key.startsWith(filepath + '/')) {\n          this._entries.delete(key)\n        }\n      }\n    }\n    this._dirty = true\n  }\n\n  clear () {\n    this._entries.clear()\n    this._dirty = true\n  }\n\n  render () {\n    return this.entries\n      .map(entry => `${entry.mode.toString(8)} ${entry.oid}    ${entry.path}`)\n      .join('\\n')\n  }\n\n  async toObject () {\n    const header = Buffer.alloc(12)\n    const writer = new BufferCursor(header)\n    writer.write('DIRC', 4, 'utf8')\n    writer.writeUInt32BE(2)\n    writer.writeUInt32BE(this.entries.length)\n    const body = Buffer.concat(\n      this.entries.map(entry => {\n        const bpath = Buffer.from(entry.path)\n        // the fixed length + the filename + at least one null char => align by 8\n        const length = Math.ceil((62 + bpath.length + 1) / 8) * 8\n        const written = Buffer.alloc(length)\n        const writer = new BufferCursor(written)\n        const stat = normalizeStats(entry)\n        writer.writeUInt32BE(stat.ctimeSeconds)\n        writer.writeUInt32BE(stat.ctimeNanoseconds)\n        writer.writeUInt32BE(stat.mtimeSeconds)\n        writer.writeUInt32BE(stat.mtimeNanoseconds)\n        writer.writeUInt32BE(stat.dev)\n        writer.writeUInt32BE(stat.ino)\n        writer.writeUInt32BE(stat.mode)\n        writer.writeUInt32BE(stat.uid)\n        writer.writeUInt32BE(stat.gid)\n        writer.writeUInt32BE(stat.size)\n        writer.write(entry.oid, 20, 'hex')\n        writer.writeUInt16BE(renderCacheEntryFlags(entry))\n        writer.write(entry.path, bpath.length, 'utf8')\n        return written\n      })\n    )\n    const main = Buffer.concat([header, body])\n    const sum = await shasum(main)\n    return Buffer.concat([main, Buffer.from(sum, 'hex')])\n  }\n}\n"",""// This is straight from parse_unit_factor in config.c of canonical git\nconst num = val => {\n  val = val.toLowerCase()\n  let n = parseInt(val)\n  if (val.endsWith('k')) n *= 1024\n  if (val.endsWith('m')) n *= 1024 * 1024\n  if (val.endsWith('g')) n *= 1024 * 1024 * 1024\n  return n\n}\n\n// This is straight from git_parse_maybe_bool_text in config.c of canonical git\nconst bool = val => {\n  val = val.trim().toLowerCase()\n  if (val === 'true' || val === 'yes' || val === 'on') return true\n  if (val === 'false' || val === 'no' || val === 'off') return false\n  throw Error(\n    `Expected 'true', 'false', 'yes', 'no', 'on', or 'off', but got ${val}`\n  )\n}\n\nconst schema = {\n  core: {\n    filemode: bool,\n    bare: bool,\n    logallrefupdates: bool,\n    symlinks: bool,\n    ignorecase: bool,\n    bigFileThreshold: num\n  }\n}\n\n// https://git-scm.com/docs/git-config\n\n// section starts with [ and ends with ]\n// section is alphanumeric (ASCII) with _ and .\n// section is case insensitive\n// subsection is optionnal\n// subsection is specified after section and one or more spaces\n// subsection is specified between double quotes\nconst SECTION_LINE_REGEX = /^\\[([A-Za-z0-9_.]+)(?: \""(.*)\"")?\\]$/\nconst SECTION_REGEX = /^[A-Za-z0-9_.]+$/\n\n// variable lines contain a name, and equal sign and then a value\n// variable lines can also only contain a name (the implicit value is a boolean true)\n// variable name is alphanumeric (ASCII) with _\n// variable name starts with an alphabetic character\n// variable name is case insensitive\nconst VARIABLE_LINE_REGEX = /^([A-Za-z]\\w*)(?: *= *(.*))?$/\nconst VARIABLE_NAME_REGEX = /^[A-Za-z]\\w*$/\n\nconst VARIABLE_VALUE_COMMENT_REGEX = /^(.*?)( *[#;].*)$/\n\nconst extractSectionLine = line => {\n  const matches = SECTION_LINE_REGEX.exec(line)\n  if (matches != null) {\n    const [section, subsection] = matches.slice(1)\n    return [section, subsection]\n  }\n  return null\n}\n\nconst extractVariableLine = line => {\n  const matches = VARIABLE_LINE_REGEX.exec(line)\n  if (matches != null) {\n    const [name, rawValue = 'true'] = matches.slice(1)\n    const valueWithoutComments = removeComments(rawValue)\n    const valueWithoutQuotes = removeQuotes(valueWithoutComments)\n    return [name, valueWithoutQuotes]\n  }\n  return null\n}\n\nconst removeComments = rawValue => {\n  const commentMatches = VARIABLE_VALUE_COMMENT_REGEX.exec(rawValue)\n  if (commentMatches == null) {\n    return rawValue\n  }\n  const [valueWithoutComment, comment] = commentMatches.slice(1)\n  // if odd number of quotes before and after comment => comment is escaped\n  if (\n    hasOddNumberOfQuotes(valueWithoutComment) &&\n    hasOddNumberOfQuotes(comment)\n  ) {\n    return `${valueWithoutComment}${comment}`\n  }\n  return valueWithoutComment\n}\n\nconst hasOddNumberOfQuotes = text => {\n  const numberOfQuotes = (text.match(/(?:^|[^\\\\])\""/g) || []).length\n  return numberOfQuotes % 2 !== 0\n}\n\nconst removeQuotes = text => {\n  return text.split('').reduce((newText, c, idx, text) => {\n    const isQuote = c === '\""' && text[idx - 1] !== '\\\\'\n    const isEscapeForQuote = c === '\\\\' && text[idx + 1] === '\""'\n    if (isQuote || isEscapeForQuote) {\n      return newText\n    }\n    return newText + c\n  }, '')\n}\n\nconst lower = text => {\n  return text != null ? text.toLowerCase() : null\n}\n\nconst getPath = (section, subsection, name) => {\n  return [lower(section), subsection, lower(name)]\n    .filter(a => a != null)\n    .join('.')\n}\n\nconst findLastIndex = (array, callback) => {\n  return array.reduce((lastIndex, item, index) => {\n    return callback(item) ? index : lastIndex\n  }, -1)\n}\n\n// Note: there are a LOT of edge cases that aren't covered (e.g. keys in sections that also\n// have subsections, [include] directives, etc.\nexport class GitConfig {\n  constructor (text) {\n    let section = null\n    let subsection = null\n    this.parsedConfig = text.split('\\n').map(line => {\n      let name = null\n      let value = null\n\n      const trimmedLine = line.trim()\n      const extractedSection = extractSectionLine(trimmedLine)\n      const isSection = extractedSection != null\n      if (isSection) {\n        ;[section, subsection] = extractedSection\n      } else {\n        const extractedVariable = extractVariableLine(trimmedLine)\n        const isVariable = extractedVariable != null\n        if (isVariable) {\n          ;[name, value] = extractedVariable\n        }\n      }\n\n      const path = getPath(section, subsection, name)\n      return { line, isSection, section, subsection, name, value, path }\n    })\n  }\n\n  static from (text) {\n    return new GitConfig(text)\n  }\n\n  async get (path, getall = false) {\n    const allValues = this.parsedConfig\n      .filter(config => config.path === path.toLowerCase())\n      .map(({ section, name, value }) => {\n        const fn = schema[section] && schema[section][name]\n        return fn ? fn(value) : value\n      })\n    return getall ? allValues : allValues.pop()\n  }\n\n  async getall (path) {\n    return this.get(path, true)\n  }\n\n  async getSubsections (section) {\n    return this.parsedConfig\n      .filter(config => config.section === section && config.isSection)\n      .map(config => config.subsection)\n  }\n\n  async deleteSection (section, subsection) {\n    this.parsedConfig = this.parsedConfig.filter(\n      config =>\n        !(config.section === section && config.subsection === subsection)\n    )\n  }\n\n  async append (path, value) {\n    return this.set(path, value, true)\n  }\n\n  async set (path, value, append = false) {\n    const configIndex = findLastIndex(\n      this.parsedConfig,\n      config => config.path === path.toLowerCase()\n    )\n    if (value == null) {\n      if (configIndex !== -1) {\n        this.parsedConfig.splice(configIndex, 1)\n      }\n    } else {\n      if (configIndex !== -1) {\n        const config = this.parsedConfig[configIndex]\n        const modifiedConfig = Object.assign({}, config, {\n          value,\n          modified: true\n        })\n        if (append) {\n          this.parsedConfig.splice(configIndex + 1, 0, modifiedConfig)\n        } else {\n          this.parsedConfig[configIndex] = modifiedConfig\n        }\n      } else {\n        const sectionPath = path\n          .split('.')\n          .slice(0, -1)\n          .join('.')\n          .toLowerCase()\n        const sectionIndex = this.parsedConfig.findIndex(\n          config => config.path === sectionPath\n        )\n        const [section, subsection] = sectionPath.split('.')\n        const name = path.split('.').pop()\n        const newConfig = {\n          section,\n          subsection,\n          name,\n          value,\n          modified: true,\n          path: getPath(section, subsection, name)\n        }\n        if (SECTION_REGEX.test(section) && VARIABLE_NAME_REGEX.test(name)) {\n          if (sectionIndex >= 0) {\n            // Reuse existing section\n            this.parsedConfig.splice(sectionIndex + 1, 0, newConfig)\n          } else {\n            // Add a new section\n            const newSection = {\n              section,\n              subsection,\n              modified: true,\n              path: getPath(section, subsection, null)\n            }\n            this.parsedConfig.push(newSection, newConfig)\n          }\n        }\n      }\n    }\n  }\n\n  toString () {\n    return this.parsedConfig\n      .map(({ line, section, subsection, name, value, modified = false }) => {\n        if (!modified) {\n          return line\n        }\n        if (name != null && value != null) {\n          return `\\t${name} = ${value}`\n        }\n        if (subsection != null) {\n          return `[${section} \""${subsection}\""]`\n        }\n        return `[${section}]`\n      })\n      .join('\\n')\n  }\n}\n"",""import { GitRefSpec } from './GitRefSpec'\n\nexport class GitRefSpecSet {\n  constructor (rules = []) {\n    this.rules = rules\n  }\n\n  static from (refspecs) {\n    const rules = []\n    for (const refspec of refspecs) {\n      rules.push(GitRefSpec.from(refspec)) // might throw\n    }\n    return new GitRefSpecSet(rules)\n  }\n\n  add (refspec) {\n    const rule = GitRefSpec.from(refspec) // might throw\n    this.rules.push(rule)\n  }\n\n  translate (remoteRefs) {\n    const result = []\n    for (const rule of this.rules) {\n      for (const remoteRef of remoteRefs) {\n        const localRef = rule.translate(remoteRef)\n        if (localRef) {\n          result.push([remoteRef, localRef])\n        }\n      }\n    }\n    return result\n  }\n\n  translateOne (remoteRef) {\n    let result = null\n    for (const rule of this.rules) {\n      const localRef = rule.translate(remoteRef)\n      if (localRef) {\n        result = localRef\n      }\n    }\n    return result\n  }\n\n  localNamespaces () {\n    return this.rules\n      .filter(rule => rule.matchPrefix)\n      .map(rule => rule.localPath.replace(/\\/$/, ''))\n  }\n}\n"",""import { E, GitError } from '../models/GitError.js'\n\nimport { GitRemoteHTTP } from './GitRemoteHTTP'\n\nfunction parseRemoteUrl ({ url }) {\n  const matches = url.match(/(\\w+)(:\\/\\/|::)(.*)/)\n  if (matches === null) return\n  /*\n   * When git encounters a URL of the form <transport>://<address>, where <transport> is\n   * a protocol that it cannot handle natively, it automatically invokes git remote-<transport>\n   * with the full URL as the second argument.\n   *\n   * @see https://git-scm.com/docs/git-remote-helpers\n   */\n  if (matches[2] === '://') {\n    return {\n      transport: matches[1],\n      address: matches[0]\n    }\n  }\n  /*\n   * A URL of the form <transport>::<address> explicitly instructs git to invoke\n   * git remote-<transport> with <address> as the second argument.\n   *\n   * @see https://git-scm.com/docs/git-remote-helpers\n   */\n  if (matches[2] === '::') {\n    return {\n      transport: matches[1],\n      address: matches[3]\n    }\n  }\n}\n\nexport class GitRemoteManager {\n  static getRemoteHelperFor ({ url }) {\n    // TODO: clean up the remoteHelper API and move into PluginCore\n    const remoteHelpers = new Map()\n    remoteHelpers.set('http', GitRemoteHTTP)\n    remoteHelpers.set('https', GitRemoteHTTP)\n\n    const parts = parseRemoteUrl({ url })\n    if (!parts) {\n      throw new GitError(E.RemoteUrlParseError, { url })\n    }\n    if (remoteHelpers.has(parts.transport)) {\n      return remoteHelpers.get(parts.transport)\n    }\n    throw new GitError(E.UnknownTransportError, {\n      url,\n      transport: parts.transport\n    })\n  }\n}\n"",""import diff3Merge from 'diff3'\n\nconst LINEBREAKS = /^.*(\\r?\\n|$)/gm\n\nexport function mergeFile ({\n  ourContent,\n  baseContent,\n  theirContent,\n  ourName = 'ours',\n  baseName = 'base',\n  theirName = 'theirs',\n  format = 'diff',\n  markerSize = 7\n}) {\n  const ours = ourContent.match(LINEBREAKS)\n  const base = baseContent.match(LINEBREAKS)\n  const theirs = theirContent.match(LINEBREAKS)\n\n  // Here we let the diff3 library do the heavy lifting.\n  const result = diff3Merge(ours, base, theirs)\n\n  // Here we note whether there are conflicts and format the results\n  let mergedText = ''\n  let cleanMerge = true\n  for (const item of result) {\n    if (item.ok) {\n      mergedText += item.ok.join('')\n    }\n    if (item.conflict) {\n      cleanMerge = false\n      mergedText += `${'<'.repeat(markerSize)} ${ourName}\\n`\n      mergedText += item.conflict.a.join('')\n      if (format === 'diff3') {\n        mergedText += `${'|'.repeat(markerSize)} ${baseName}\\n`\n        mergedText += item.conflict.o.join('')\n      }\n      mergedText += `${'='.repeat(markerSize)}\\n`\n      mergedText += item.conflict.b.join('')\n      mergedText += `${'>'.repeat(markerSize)} ${theirName}\\n`\n    }\n  }\n  return { cleanMerge, mergedText }\n}\n"",""import pako from 'pako'\nimport Hash from 'sha.js/sha1'\n\nimport { FileSystem } from '../models/FileSystem.js'\nimport { readObject } from '../storage/readObject.js'\nimport { join } from '../utils/join.js'\nimport { padHex } from '../utils/padHex.js'\nimport { cores } from '../utils/plugins.js'\n\nimport { types } from './types'\n\n/**\n * @param {object} args\n * @param {string} [args.core = 'default'] - The plugin core identifier to use for plugin injection\n * @param {FileSystem} [args.fs] - [deprecated] The filesystem containing the git repo. Overrides the fs provided by the [plugin system](./plugin_fs.md).\n * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path\n * @param {string} [args.gitdir=join(dir, '.git')] - [required] The [git directory](dir-vs-gitdir.md) path\n * @param {string[]} args.oids\n */\nexport async function pack ({\n  core = 'default',\n  dir,\n  gitdir = join(dir, '.git'),\n  fs: _fs = cores.get(core).get('fs'),\n  oids\n}) {\n  const fs = new FileSystem(_fs)\n  const hash = new Hash()\n  const outputStream = []\n  function write (chunk, enc) {\n    const buff = Buffer.from(chunk, enc)\n    outputStream.push(buff)\n    hash.update(buff)\n  }\n  function writeObject ({ stype, object }) {\n    // Object type is encoded in bits 654\n    const type = types[stype]\n    // The length encoding gets complicated.\n    let length = object.length\n    // Whether the next byte is part of the variable-length encoded number\n    // is encoded in bit 7\n    let multibyte = length > 0b1111 ? 0b10000000 : 0b0\n    // Last four bits of length is encoded in bits 3210\n    const lastFour = length & 0b1111\n    // Discard those bits\n    length = length >>> 4\n    // The first byte is then (1-bit multibyte?), (3-bit type), (4-bit least sig 4-bits of length)\n    let byte = (multibyte | type | lastFour).toString(16)\n    write(byte, 'hex')\n    // Now we keep chopping away at length 7-bits at a time until its zero,\n    // writing out the bytes in what amounts to little-endian order.\n    while (multibyte) {\n      multibyte = length > 0b01111111 ? 0b10000000 : 0b0\n      byte = multibyte | (length & 0b01111111)\n      write(padHex(2, byte), 'hex')\n      length = length >>> 7\n    }\n    // Lastly, we can compress and write the object.\n    write(Buffer.from(pako.deflate(object)))\n  }\n  write('PACK')\n  write('00000002', 'hex')\n  // Write a 4 byte (32-bit) int\n  write(padHex(8, oids.length), 'hex')\n  for (const oid of oids) {\n    const { type, object } = await readObject({ fs, gitdir, oid })\n    writeObject({ write, object, stype: type })\n  }\n  // Write SHA1 checksum\n  const digest = hash.digest()\n  outputStream.push(digest)\n  return outputStream\n}\n"",""import { indent } from '../utils/indent.js'\nimport { normalizeNewlines } from '../utils/normalizeNewlines.js'\n\nimport { GitCommit } from './GitCommit'\n\nexport class SignedGitCommit extends GitCommit {\n  static from (commit) {\n    return new SignedGitCommit(commit)\n  }\n\n  async sign (openpgp, privateKeys) {\n    const commit = this.withoutSignature()\n    const headers = GitCommit.justHeaders(this._commit)\n    const message = GitCommit.justMessage(this._commit)\n    const privKeyObj = openpgp.key.readArmored(privateKeys).keys\n    let { signature } = await openpgp.sign({\n      data: openpgp.util.str2Uint8Array(commit),\n      privateKeys: privKeyObj,\n      detached: true,\n      armor: true\n    })\n    // renormalize the line endings to the one true line-ending\n    signature = normalizeNewlines(signature)\n    const signedCommit =\n      headers + '\\n' + 'gpgsig' + indent(signature) + '\\n' + message\n    // return a new commit object\n    return GitCommit.from(signedCommit)\n  }\n\n  async listSigningKeys (openpgp) {\n    const msg = openpgp.message.readSignedContent(\n      this.withoutSignature(),\n      this.isolateSignature()\n    )\n    return msg.getSigningKeyIds().map(keyid => keyid.toHex())\n  }\n\n  async verify (openpgp, publicKeys) {\n    const pubKeyObj = openpgp.key.readArmored(publicKeys).keys\n    const msg = openpgp.message.readSignedContent(\n      this.withoutSignature(),\n      this.isolateSignature()\n    )\n    const results = msg.verify(pubKeyObj)\n    const validity = results.reduce((a, b) => a.valid && b.valid, {\n      valid: true\n    })\n    return validity\n  }\n}\n"",""// https://dev.to/namirsab/comment/2050\nexport function arrayRange (start, end) {\n  const length = end - start\n  return Array.from({ length }, (_, i) => start + i)\n}\n"",""// This is convenient for computing unions/joins of sorted lists.\nexport class RunningMinimum {\n  constructor () {\n    // Using a getter for 'value' would just bloat the code.\n    // You know better than to set it directly right?\n    this.value = null\n  }\n\n  consider (value) {\n    if (value === null || value === undefined) return\n    if (this.value === null) {\n      this.value = value\n    } else if (value < this.value) {\n      this.value = value\n    }\n  }\n\n  reset () {\n    this.value = null\n  }\n}\n"",""// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n"",""var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\""return this\"")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \""object\"") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n"",""/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n"",""'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n"",""'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n"",""// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n"",""var proto\n  , map\n\nmodule.exports = proto = {}\n\nmap = typeof WeakMap === 'undefined' ? null : new WeakMap\n\nproto.get = !map ? no_weakmap_get : get\n\nfunction no_weakmap_get(target) {\n  return new DataView(target.buffer, 0)\n}\n\nfunction get(target) {\n  var out = map.get(target.buffer)\n  if(!out) {\n    map.set(target.buffer, out = new DataView(target.buffer, 0))\n  }\n  return out\n}\n"",""import { GitPktLine } from '../models/GitPktLine.js'\n\nexport function writeUploadPackRequest ({\n  capabilities = [],\n  wants = [],\n  haves = [],\n  shallows = [],\n  depth = null,\n  since = null,\n  exclude = []\n}) {\n  const packstream = []\n  wants = [...new Set(wants)] // remove duplicates\n  let firstLineCapabilities = ` ${capabilities.join(' ')}`\n  for (const oid of wants) {\n    packstream.push(GitPktLine.encode(`want ${oid}${firstLineCapabilities}\\n`))\n    firstLineCapabilities = ''\n  }\n  for (const oid of shallows) {\n    packstream.push(GitPktLine.encode(`shallow ${oid}\\n`))\n  }\n  if (depth !== null) {\n    packstream.push(GitPktLine.encode(`deepen ${depth}\\n`))\n  }\n  if (since !== null) {\n    packstream.push(\n      GitPktLine.encode(`deepen-since ${Math.floor(since.valueOf() / 1000)}\\n`)\n    )\n  }\n  for (const oid of exclude) {\n    packstream.push(GitPktLine.encode(`deepen-not ${oid}\\n`))\n  }\n  packstream.push(GitPktLine.flush())\n  for (const oid of haves) {\n    packstream.push(GitPktLine.encode(`have ${oid}\\n`))\n  }\n  packstream.push(GitPktLine.encode(`done\\n`))\n  return packstream\n}\n"",""import { E, GitError } from '../models/GitError.js'\nimport { GitSideBand } from '../models/GitSideBand.js'\nimport { forAwait } from '../utils/forAwait.js'\n\nexport async function parseUploadPackResponse (stream) {\n  const { packetlines, packfile, progress } = GitSideBand.demux(stream)\n  const shallows = []\n  const unshallows = []\n  const acks = []\n  let nak = false\n  let done = false\n  return new Promise((resolve, reject) => {\n    // Parse the response\n    forAwait(packetlines, data => {\n      const line = data.toString('utf8').trim()\n      if (line.startsWith('shallow')) {\n        const oid = line.slice(-41).trim()\n        if (oid.length !== 40) {\n          reject(new GitError(E.CorruptShallowOidFail, { oid }))\n        }\n        shallows.push(oid)\n      } else if (line.startsWith('unshallow')) {\n        const oid = line.slice(-41).trim()\n        if (oid.length !== 40) {\n          reject(new GitError(E.CorruptShallowOidFail, { oid }))\n        }\n        unshallows.push(oid)\n      } else if (line.startsWith('ACK')) {\n        const [, oid, status] = line.split(' ')\n        acks.push({ oid, status })\n        if (!status) done = true\n      } else if (line.startsWith('NAK')) {\n        nak = true\n        done = true\n      }\n      if (done) {\n        resolve({ shallows, unshallows, acks, nak, packfile, progress })\n      }\n    })\n  })\n}\n"",""// @ts-check\nimport { TREE } from '../commands/TREE.js'\nimport { walkBeta2 } from '../commands/walkBeta2.js'\nimport { FileSystem } from '../models/FileSystem.js'\nimport { E, GitError } from '../models/GitError.js'\nimport { GitTree } from '../models/GitTree.js'\nimport { writeObject } from '../storage/writeObject.js'\n\nimport { basename } from './basename.js'\nimport { join } from './join.js'\nimport { mergeFile } from './mergeFile.js'\nimport { cores } from './plugins.js'\n\n/**\n *\n * @typedef {import('../commands/readObject').TreeEntry} TreeEntry\n */\n\n/**\n * Create a merged tree\n *\n * @param {Object} args\n * @param {string} [args.core = 'default'] - The plugin core identifier to use for plugin injection\n * @param {FileSystem} [args.fs] - [deprecated] The filesystem containing the git repo. Overrides the fs provided by the [plugin system](./plugin_fs.md).\n * @param {string} [args.dir] - The [working tree](dir-vs-gitdir.md) directory path\n * @param {string} [args.gitdir=join(dir,'.git')] - [required] The [git directory](dir-vs-gitdir.md) path\n * @param {string} args.ourOid - The SHA-1 object id of our tree\n * @param {string} args.baseOid - The SHA-1 object id of the base tree\n * @param {string} args.theirOid - The SHA-1 object id of their tree\n * @param {string} [args.ourName='ours'] - The name to use in conflicted files for our hunks\n * @param {string} [args.baseName='base'] - The name to use in conflicted files (in diff3 format) for the base hunks\n * @param {string} [args.theirName='theirs'] - The name to use in conflicted files for their hunks\n * @param {boolean} [args.dryRun=false]\n *\n * @returns {Promise<string>} - The SHA-1 object id of the merged tree\n *\n */\nexport async function mergeTree ({\n  core = 'default',\n  dir,\n  gitdir = join(dir, '.git'),\n  fs: _fs = cores.get(core).get('fs'),\n  ourOid,\n  baseOid,\n  theirOid,\n  ourName = 'ours',\n  baseName = 'base',\n  theirName = 'theirs',\n  dryRun = false\n}) {\n  const fs = new FileSystem(_fs)\n  const ourTree = TREE({ ref: ourOid })\n  const baseTree = TREE({ ref: baseOid })\n  const theirTree = TREE({ ref: theirOid })\n\n  const results = await walkBeta2({\n    core,\n    fs,\n    dir,\n    gitdir,\n    trees: [ourTree, baseTree, theirTree],\n    map: async function (filepath, [ours, base, theirs]) {\n      const path = basename(filepath)\n      // What we did, what they did\n      const ourChange = await modified(ours, base)\n      const theirChange = await modified(theirs, base)\n      switch (`${ourChange}-${theirChange}`) {\n        case 'false-false': {\n          return {\n            mode: await base.mode(),\n            path,\n            oid: await base.oid(),\n            type: await base.type()\n          }\n        }\n        case 'false-true': {\n          return theirs\n            ? {\n              mode: await theirs.mode(),\n              path,\n              oid: await theirs.oid(),\n              type: await theirs.type()\n            }\n            : void 0\n        }\n        case 'true-false': {\n          return ours\n            ? {\n              mode: await ours.mode(),\n              path,\n              oid: await ours.oid(),\n              type: await ours.type()\n            }\n            : void 0\n        }\n        case 'true-true': {\n          // Modifications\n          if (\n            ours &&\n            base &&\n            theirs &&\n            (await ours.type()) === 'blob' &&\n            (await base.type()) === 'blob' &&\n            (await theirs.type()) === 'blob'\n          ) {\n            return mergeBlobs({\n              fs,\n              gitdir,\n              path,\n              ours,\n              base,\n              theirs,\n              ourName,\n              baseName,\n              theirName\n            })\n          }\n          // all other types of conflicts fail\n          throw new GitError(E.MergeNotSupportedFail)\n        }\n      }\n    },\n    /**\n     * @param {TreeEntry} [parent]\n     * @param {Array<TreeEntry>} children\n     */\n    reduce: async (parent, children) => {\n      const entries = children.filter(Boolean) // remove undefineds\n\n      // automatically delete directories if they have been emptied\n      if (parent && parent.type === 'tree' && entries.length === 0) return\n\n      if (entries.length > 0) {\n        const tree = new GitTree(entries)\n        const object = tree.toObject()\n        const oid = await writeObject({\n          fs,\n          gitdir,\n          type: 'tree',\n          object,\n          dryRun\n        })\n        parent.oid = oid\n      }\n      return parent\n    }\n  })\n  return results.oid\n}\n\n/**\n *\n * @param {import('../commands/walkBeta2.js').WalkerEntry} entry\n * @param {import('../commands/walkBeta2.js').WalkerEntry} base\n *\n */\nasync function modified (entry, base) {\n  if (!entry && !base) return false\n  if (entry && !base) return true\n  if (!entry && base) return true\n  if ((await entry.type()) === 'tree' && (await base.type()) === 'tree') {\n    return false\n  }\n  if (\n    (await entry.type()) === (await base.type()) &&\n    (await entry.mode()) === (await base.mode()) &&\n    (await entry.oid()) === (await base.oid())\n  ) {\n    return false\n  }\n  return true\n}\n\n/**\n *\n * @param {Object} args\n * @param {FileSystem} args.fs\n * @param {string} args.gitdir\n * @param {string} args.path\n * @param {import('../commands/walkBeta2.js').WalkerEntry} args.ours\n * @param {import('../commands/walkBeta2.js').WalkerEntry} args.base\n * @param {import('../commands/walkBeta2.js').WalkerEntry} args.theirs\n * @param {string} [args.ourName]\n * @param {string} [args.baseName]\n * @param {string} [args.theirName]\n * @param {string} [args.format]\n * @param {number} [args.markerSize]\n * @param {boolean} [args.dryRun = false]\n *\n */\nasync function mergeBlobs ({\n  fs,\n  gitdir,\n  path,\n  ours,\n  base,\n  theirs,\n  ourName,\n  theirName,\n  baseName,\n  format,\n  markerSize,\n  dryRun\n}) {\n  const type = 'blob'\n  // Compute the new mode.\n  // Since there are ONLY two valid blob modes ('100755' and '100644') it boils down to this\n  const mode =\n    (await base.mode()) === (await ours.mode())\n      ? await theirs.mode()\n      : await ours.mode()\n  // The trivial case: nothing to merge except maybe mode\n  if ((await ours.oid()) === (await theirs.oid())) {\n    return { mode, path, oid: await ours.oid(), type }\n  }\n  // if only one side made oid changes, return that side's oid\n  if ((await ours.oid()) === (await base.oid())) {\n    return { mode, path, oid: await theirs.oid(), type }\n  }\n  if ((await theirs.oid()) === (await base.oid())) {\n    return { mode, path, oid: await ours.oid(), type }\n  }\n  // if both sides made changes do a merge\n  const { mergedText, cleanMerge } = mergeFile({\n    ourContent: (await ours.content()).toString('utf8'),\n    baseContent: (await base.content()).toString('utf8'),\n    theirContent: (await theirs.content()).toString('utf8'),\n    ourName,\n    theirName,\n    baseName,\n    format,\n    markerSize\n  })\n  if (!cleanMerge) {\n    // all other types of conflicts fail\n    throw new GitError(E.MergeNotSupportedFail)\n  }\n  const oid = await writeObject({\n    fs,\n    gitdir,\n    type: 'blob',\n    object: Buffer.from(mergedText, 'utf8'),\n    dryRun\n  })\n  return { mode, path, oid, type }\n}\n"",""import { GitRefManager } from '../managers/GitRefManager.js'\nimport { GitShallowManager } from '../managers/GitShallowManager.js'\nimport { FileSystem } from '../models/FileSystem.js'\nimport { GitAnnotatedTag } from '../models/GitAnnotatedTag.js'\nimport { GitCommit } from '../models/GitCommit.js'\nimport { E, GitError } from '../models/GitError.js'\nimport { readObject } from '../storage/readObject.js'\nimport { join } from '../utils/join.js'\nimport { cores } from '../utils/plugins.js'\n\nexport async function listCommitsAndTags ({\n  core = 'default',\n  dir,\n  gitdir = join(dir, '.git'),\n  fs: _fs = cores.get(core).get('fs'),\n  start,\n  finish\n}) {\n  const fs = new FileSystem(_fs)\n  const shallows = await GitShallowManager.read({ fs, gitdir })\n  const startingSet = new Set()\n  const finishingSet = new Set()\n  for (const ref of start) {\n    startingSet.add(await GitRefManager.resolve({ fs, gitdir, ref }))\n  }\n  for (const ref of finish) {\n    // We may not have these refs locally so we must try/catch\n    try {\n      const oid = await GitRefManager.resolve({ fs, gitdir, ref })\n      finishingSet.add(oid)\n    } catch (err) {}\n  }\n  const visited = new Set()\n  // Because git commits are named by their hash, there is no\n  // way to construct a cycle. Therefore we won't worry about\n  // setting a default recursion limit.\n  async function walk (oid) {\n    visited.add(oid)\n    const { type, object } = await readObject({ fs, gitdir, oid })\n    // Recursively resolve annotated tags\n    if (type === 'tag') {\n      const tag = GitAnnotatedTag.from(object)\n      const commit = tag.headers().object\n      return walk(commit)\n    }\n    if (type !== 'commit') {\n      throw new GitError(E.ObjectTypeAssertionFail, {\n        oid,\n        type,\n        expected: 'commit'\n      })\n    }\n    if (!shallows.has(oid)) {\n      const commit = GitCommit.from(object)\n      const parents = commit.headers().parent\n      for (oid of parents) {\n        if (!finishingSet.has(oid) && !visited.has(oid)) {\n          await walk(oid)\n        }\n      }\n    }\n  }\n  // Let's go walking!\n  for (const oid of startingSet) {\n    await walk(oid)\n  }\n  return visited\n}\n"",""import { FileSystem } from '../models/FileSystem.js'\nimport { GitAnnotatedTag } from '../models/GitAnnotatedTag.js'\nimport { GitCommit } from '../models/GitCommit.js'\nimport { GitTree } from '../models/GitTree.js'\nimport { readObject } from '../storage/readObject.js'\nimport { join } from '../utils/join.js'\nimport { cores } from '../utils/plugins.js'\n\nexport async function listObjects ({\n  core = 'default',\n  dir,\n  gitdir = join(dir, '.git'),\n  fs: _fs = cores.get(core).get('fs'),\n  oids\n}) {\n  const fs = new FileSystem(_fs)\n  const visited = new Set()\n  // We don't do the purest simplest recursion, because we can\n  // avoid reading Blob objects entirely since the Tree objects\n  // tell us which oids are Blobs and which are Trees.\n  async function walk (oid) {\n    visited.add(oid)\n    const { type, object } = await readObject({ fs, gitdir, oid })\n    if (type === 'tag') {\n      const tag = GitAnnotatedTag.from(object)\n      const obj = tag.headers().object\n      await walk(obj)\n    } else if (type === 'commit') {\n      const commit = GitCommit.from(object)\n      const tree = commit.headers().tree\n      await walk(tree)\n    } else if (type === 'tree') {\n      const tree = GitTree.from(object)\n      for (const entry of tree) {\n        // only add blobs and trees to the set,\n        // skipping over submodules whose type is 'commit'\n        if (entry.type === 'blob' || entry.type === 'tree') {\n          visited.add(entry.oid)\n        }\n        // only recurse for trees\n        if (entry.type === 'tree') {\n          await walk(entry.oid)\n        }\n      }\n    }\n  }\n  // Let's go walking!\n  for (const oid of oids) {\n    await walk(oid)\n  }\n  return visited\n}\n"",""import { GitPktLine } from '../models/GitPktLine.js'\n\nexport async function writeReceivePackRequest ({\n  capabilities = [],\n  triplets = []\n}) {\n  const packstream = []\n  let capsFirstLine = `\\x00 ${capabilities.join(' ')}`\n  for (const trip of triplets) {\n    packstream.push(\n      GitPktLine.encode(\n        `${trip.oldoid} ${trip.oid} ${trip.fullRef}${capsFirstLine}\\n`\n      )\n    )\n    capsFirstLine = ''\n  }\n  packstream.push(GitPktLine.flush())\n  return packstream\n}\n"",""import { E, GitError } from '../models/GitError.js'\nimport { GitPktLine } from '../models/GitPktLine.js'\n\nexport async function parseReceivePackResponse (packfile) {\n  const result = {}\n  let response = ''\n  const read = GitPktLine.streamReader(packfile)\n  let line = await read()\n  while (line !== true) {\n    if (line !== null) response += line.toString('utf8') + '\\n'\n    line = await read()\n  }\n\n  const lines = response.toString('utf8').split('\\n')\n  // We're expecting \""unpack {unpack-result}\""\n  line = lines.shift()\n  if (!line.startsWith('unpack ')) {\n    throw new GitError(E.UnparseableServerResponseFail, { line })\n  }\n  if (line === 'unpack ok') {\n    result.ok = ['unpack']\n  } else {\n    result.errors = [line.trim()]\n  }\n  for (const line of lines) {\n    const status = line.slice(0, 2)\n    const refAndMessage = line.slice(3)\n    if (status === 'ok') {\n      result.ok = result.ok || []\n      result.ok.push(refAndMessage)\n    } else if (status === 'ng') {\n      result.errors = result.errors || []\n      result.errors.push(refAndMessage)\n    }\n  }\n  return result\n}\n"",""/**\n * Use with push and fetch to set Basic Authentication headers.\n *\n * @link https://isomorphic-git.github.io/docs/utils_auth.html\n */\nexport function auth (username, password) {\n  // Allow specifying it as one argument (mostly for CLI inputability)\n  if (password === undefined) {\n    const i = username.indexOf(':')\n    if (i > -1) {\n      password = username.slice(i + 1)\n      username = username.slice(0, i)\n    } else {\n      password = '' // Enables the .auth(GITHUB_TOKEN) no-username shorthand\n    }\n  }\n  return { username, password }\n}\n"",""// A simple implementation of make-array\nfunction makeArray (subject) {\n  return Array.isArray(subject)\n    ? subject\n    : [subject]\n}\n\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\nconst KEY_IGNORE = typeof Symbol !== 'undefined'\n  ? Symbol.for('node-ignore')\n  /* istanbul ignore next */\n  : 'node-ignore'\n\nconst define = (object, key, value) =>\n  Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n  REGEX_REGEXP_RANGE,\n  (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n    ? match\n    // Invalid range (out of order) which is ok for gitignore rules but\n    //   fatal for JavaScript regular expression, so eliminate it.\n    : ''\n)\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// >  (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n//      you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n  // > Trailing spaces are ignored unless they are quoted with backslash (\""\\\"")\n  [\n    // (a\\ ) -> (a )\n    // (a  ) -> (a)\n    // (a \\ ) -> (a  )\n    /\\\\?\\s+$/,\n    match => match.indexOf('\\\\') === 0\n      ? ' '\n      : ''\n  ],\n\n  // replace (\\ ) with ' '\n  [\n    /\\\\\\s/g,\n    () => ' '\n  ],\n\n  // Escape metacharacters\n  // which is written down by users but means special for regular expressions.\n\n  // > There are 12 characters with special meanings:\n  // > - the backslash \\,\n  // > - the caret ^,\n  // > - the dollar sign $,\n  // > - the period or dot .,\n  // > - the vertical bar or pipe symbol |,\n  // > - the question mark ?,\n  // > - the asterisk or star *,\n  // > - the plus sign +,\n  // > - the opening parenthesis (,\n  // > - the closing parenthesis ),\n  // > - and the opening square bracket [,\n  // > - the opening curly brace {,\n  // > These special characters are often called \""metacharacters\"".\n  [\n    /[\\\\^$.|*+(){]/g,\n    match => `\\\\${match}`\n  ],\n\n  [\n    // > [abc] matches any character inside the brackets\n    // >    (in this case a, b, or c);\n    /\\[([^\\]/]*)($|\\])/g,\n    (match, p1, p2) => p2 === ']'\n      ? `[${sanitizeRange(p1)}]`\n      : `\\\\${match}`\n  ],\n\n  [\n    // > a question mark (?) matches a single character\n    /(?!\\\\)\\?/g,\n    () => '[^/]'\n  ],\n\n  // leading slash\n  [\n\n    // > A leading slash matches the beginning of the pathname.\n    // > For example, \""/*.c\"" matches \""cat-file.c\"" but not \""mozilla-sha1/sha1.c\"".\n    // A leading slash matches the beginning of the pathname\n    /^\\//,\n    () => '^'\n  ],\n\n  // replace special metacharacter slash after the leading slash\n  [\n    /\\//g,\n    () => '\\\\/'\n  ],\n\n  [\n    // > A leading \""**\"" followed by a slash means match in all directories.\n    // > For example, \""**/foo\"" matches file or directory \""foo\"" anywhere,\n    // > the same as pattern \""foo\"".\n    // > \""**/foo/bar\"" matches file or directory \""bar\"" anywhere that is directly\n    // >   under directory \""foo\"".\n    // Notice that the '*'s have been replaced as '\\\\*'\n    /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n    // '**/foo' <-> 'foo'\n    () => '^(?:.*\\\\/)?'\n  ],\n\n  // ending\n  [\n    // 'js' will not match 'js.'\n    // 'ab' will not match 'abc'\n    /(?:[^*])$/,\n\n    // WTF!\n    // https://git-scm.com/docs/gitignore\n    // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n    // which re-fixes #24, #38\n\n    // > If there is a separator at the end of the pattern then the pattern\n    // > will only match directories, otherwise the pattern can match both\n    // > files and directories.\n\n    // 'js*' will not match 'a.js'\n    // 'js/' will not match 'a.js'\n    // 'js' will match 'a.js' and 'a.js/'\n    match => /\\/$/.test(match)\n      // foo/ will not match 'foo'\n      ? `${match}$`\n      // foo matches 'foo' and 'foo/'\n      : `${match}(?=$|\\\\/$)`\n  ],\n\n  // starting\n  [\n    // there will be no leading '/'\n    //   (which has been replaced by section \""leading slash\"")\n    // If starts with '**', adding a '^' to the regular expression also works\n    /^(?=[^^])/,\n    function startingReplacer () {\n      // If has a slash `/` at the beginning or middle\n      return !/\\/(?!$)/.test(this)\n        // > Prior to 2.22.1\n        // > If the pattern does not contain a slash /,\n        // >   Git treats it as a shell glob pattern\n        // Actually, if there is only a trailing slash,\n        //   git also treats it as a shell glob pattern\n\n        // After 2.22.1 (compatible but clearer)\n        // > If there is a separator at the beginning or middle (or both)\n        // > of the pattern, then the pattern is relative to the directory\n        // > level of the particular .gitignore file itself.\n        // > Otherwise the pattern may also match at any level below\n        // > the .gitignore level.\n        ? '(?:^|\\\\/)'\n\n        // > Otherwise, Git treats the pattern as a shell glob suitable for\n        // >   consumption by fnmatch(3)\n        : '^'\n    }\n  ],\n\n  // two globstars\n  [\n    // Use lookahead assertions so that we could match more than one `'/**'`\n    /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n    // Zero, one or several directories\n    // should not use '*', or it will be replaced by the next replacer\n\n    // Check if it is not the last `'/**'`\n    (_, index, str) => index + 6 < str.length\n\n      // case: /**/\n      // > A slash followed by two consecutive asterisks then a slash matches\n      // >   zero or more directories.\n      // > For example, \""a/**/b\"" matches \""a/b\"", \""a/x/b\"", \""a/x/y/b\"" and so on.\n      // '/**/'\n      ? '(?:\\\\/[^\\\\/]+)*'\n\n      // case: /**\n      // > A trailing `\""/**\""` matches everything inside.\n\n      // #21: everything inside but it should not include the current folder\n      : '\\\\/.+'\n  ],\n\n  // intermediate wildcards\n  [\n    // Never replace escaped '*'\n    // ignore rule '\\*' will match the path '*'\n\n    // 'abc.*/' -> go\n    // 'abc.*'  -> skip this rule\n    /(^|[^\\\\]+)\\\\\\*(?=.+)/g,\n\n    // '*.js' matches '.js'\n    // '*.js' doesn't match 'abc'\n    (_, p1) => `${p1}[^\\\\/]*`\n  ],\n\n  // trailing wildcard\n  [\n    /(\\^|\\\\\\/)?\\\\\\*$/,\n    (_, p1) => {\n      const prefix = p1\n        // '\\^':\n        // '/*' does not match ''\n        // '/*' does not match everything\n\n        // '\\\\\\/':\n        // 'abc/*' does not match 'abc/'\n        ? `${p1}[^/]+`\n\n        // 'a*' matches 'a'\n        // 'a*' matches 'aa'\n        : '[^/]*'\n\n      return `${prefix}(?=$|\\\\/$)`\n    }\n  ],\n\n  [\n    // unescape\n    /\\\\\\\\\\\\/g,\n    () => '\\\\'\n  ]\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, negative, ignorecase) => {\n  const r = regexCache[pattern]\n  if (r) {\n    return r\n  }\n\n  // const replacers = negative\n  //   ? NEGATIVE_REPLACERS\n  //   : POSITIVE_REPLACERS\n\n  const source = REPLACERS.reduce(\n    (prev, current) => prev.replace(current[0], current[1].bind(pattern)),\n    pattern\n  )\n\n  return regexCache[pattern] = ignorecase\n    ? new RegExp(source, 'i')\n    : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n  && isString(pattern)\n  && !REGEX_TEST_BLANK_LINE.test(pattern)\n\n  // > A line starting with # serves as a comment.\n  && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n  constructor (\n    origin,\n    pattern,\n    negative,\n    regex\n  ) {\n    this.origin = origin\n    this.pattern = pattern\n    this.negative = negative\n    this.regex = regex\n  }\n}\n\nconst createRule = (pattern, ignorecase) => {\n  const origin = pattern\n  let negative = false\n\n  // > An optional prefix \""!\"" which negates the pattern;\n  if (pattern.indexOf('!') === 0) {\n    negative = true\n    pattern = pattern.substr(1)\n  }\n\n  pattern = pattern\n  // > Put a backslash (\""\\\"") in front of the first \""!\"" for patterns that\n  // >   begin with a literal \""!\"", for example, `\""\\!important!.txt\""`.\n  .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n  // > Put a backslash (\""\\\"") in front of the first hash for patterns that\n  // >   begin with a hash.\n  .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n  const regex = makeRegex(pattern, negative, ignorecase)\n\n  return new IgnoreRule(\n    origin,\n    pattern,\n    negative,\n    regex\n  )\n}\n\nconst throwError = (message, Ctor) => {\n  throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n  if (!isString(path)) {\n    return doThrow(\n      `path must be a string, but got \\`${originalPath}\\``,\n      TypeError\n    )\n  }\n\n  // We don't know if we should ignore '', so throw\n  if (!path) {\n    return doThrow(`path must not be empty`, TypeError)\n  }\n\n  // Check if it is a relative path\n  if (checkPath.isNotRelative(path)) {\n    const r = '`path.relative()`d'\n    return doThrow(\n      `path should be a ${r} string, but got \""${originalPath}\""`,\n      RangeError\n    )\n  }\n\n  return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n  constructor ({\n    ignorecase = true\n  } = {}) {\n    this._rules = []\n    this._ignorecase = ignorecase\n    define(this, KEY_IGNORE, true)\n    this._initCache()\n  }\n\n  _initCache () {\n    this._ignoreCache = Object.create(null)\n    this._testCache = Object.create(null)\n  }\n\n  _addPattern (pattern) {\n    // #32\n    if (pattern && pattern[KEY_IGNORE]) {\n      this._rules = this._rules.concat(pattern._rules)\n      this._added = true\n      return\n    }\n\n    if (checkPattern(pattern)) {\n      const rule = createRule(pattern, this._ignorecase)\n      this._added = true\n      this._rules.push(rule)\n    }\n  }\n\n  // @param {Array<string> | string | Ignore} pattern\n  add (pattern) {\n    this._added = false\n\n    makeArray(\n      isString(pattern)\n        ? splitPattern(pattern)\n        : pattern\n    ).forEach(this._addPattern, this)\n\n    // Some rules have just added to the ignore,\n    // making the behavior changed.\n    if (this._added) {\n      this._initCache()\n    }\n\n    return this\n  }\n\n  // legacy\n  addPattern (pattern) {\n    return this.add(pattern)\n  }\n\n  //          |           ignored : unignored\n  // negative |   0:0   |   0:1   |   1:0   |   1:1\n  // -------- | ------- | ------- | ------- | --------\n  //     0    |  TEST   |  TEST   |  SKIP   |    X\n  //     1    |  TESTIF |  SKIP   |  TEST   |    X\n\n  // - SKIP: always skip\n  // - TEST: always test\n  // - TESTIF: only test if checkUnignored\n  // - X: that never happen\n\n  // @param {boolean} whether should check if the path is unignored,\n  //   setting `checkUnignored` to `false` could reduce additional\n  //   path matching.\n\n  // @returns {TestResult} true if a file is ignored\n  _testOne (path, checkUnignored) {\n    let ignored = false\n    let unignored = false\n\n    this._rules.forEach(rule => {\n      const {negative} = rule\n      if (\n        unignored === negative && ignored !== unignored\n        || negative && !ignored && !unignored && !checkUnignored\n      ) {\n        return\n      }\n\n      const matched = rule.regex.test(path)\n\n      if (matched) {\n        ignored = !negative\n        unignored = negative\n      }\n    })\n\n    return {\n      ignored,\n      unignored\n    }\n  }\n\n  // @returns {TestResult}\n  _test (originalPath, cache, checkUnignored, slices) {\n    const path = originalPath\n      // Supports nullable path\n      && checkPath.convert(originalPath)\n\n    checkPath(path, originalPath, throwError)\n\n    return this._t(path, cache, checkUnignored, slices)\n  }\n\n  _t (path, cache, checkUnignored, slices) {\n    if (path in cache) {\n      return cache[path]\n    }\n\n    if (!slices) {\n      // path/to/a.js\n      // ['path', 'to', 'a.js']\n      slices = path.split(SLASH)\n    }\n\n    slices.pop()\n\n    // If the path has no parent directory, just test it\n    if (!slices.length) {\n      return cache[path] = this._testOne(path, checkUnignored)\n    }\n\n    const parent = this._t(\n      slices.join(SLASH) + SLASH,\n      cache,\n      checkUnignored,\n      slices\n    )\n\n    // If the path contains a parent directory, check the parent first\n    return cache[path] = parent.ignored\n      // > It is not possible to re-include a file if a parent directory of\n      // >   that file is excluded.\n      ? parent\n      : this._testOne(path, checkUnignored)\n  }\n\n  ignores (path) {\n    return this._test(path, this._ignoreCache, false).ignored\n  }\n\n  createFilter () {\n    return path => !this.ignores(path)\n  }\n\n  filter (paths) {\n    return makeArray(paths).filter(this.createFilter())\n  }\n\n  // @returns {TestResult}\n  test (path) {\n    return this._test(path, this._testCache, true)\n  }\n}\n\nconst factory = options => new Ignore(options)\n\nconst returnFalse = () => false\n\nconst isPathValid = path =>\n  checkPath(path && checkPath.convert(path), path, returnFalse)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if  */\nif (\n  // Detect `process` so that it can run in browsers.\n  typeof process !== 'undefined'\n  && (\n    process.env && process.env.IGNORE_TEST_WIN32\n    || process.platform === 'win32'\n  )\n) {\n  /* eslint no-control-regex: \""off\"" */\n  const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n  || /[\""<>|\\u0000-\\u001F]+/u.test(str)\n    ? str\n    : str.replace(/\\\\/g, '/')\n\n  checkPath.convert = makePosix\n\n  // 'C:\\\\foo'     <- 'C:\\\\foo' has been converted to 'C:/'\n  // 'd:\\\\foo'\n  const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n  checkPath.isNotRelative = path =>\n    REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n    || isNotRelative(path)\n}\n"",""import { FileSystem } from '../models/FileSystem.js'\nimport { E, GitError } from '../models/GitError.js'\n\nexport async function writeObjectLoose ({\n  fs: _fs,\n  gitdir,\n  type,\n  object,\n  format,\n  oid\n}) {\n  const fs = new FileSystem(_fs)\n  if (format !== 'deflated') {\n    throw new GitError(E.InternalFail, {\n      message:\n        'GitObjectStoreLoose expects objects to write to be in deflated format'\n    })\n  }\n  const source = `objects/${oid.slice(0, 2)}/${oid.slice(2)}`\n  const filepath = `${gitdir}/${source}`\n  // Don't overwrite existing git objects - this helps avoid EPERM errors.\n  // Although I don't know how we'd fix corrupted objects then. Perhaps delete them\n  // on read?\n  if (!(await fs.exists(filepath))) await fs.write(filepath, object)\n}\n"",""import { FileSystem } from '../models/FileSystem.js'\n\nexport async function readObjectLoose ({ fs: _fs, gitdir, oid }) {\n  const fs = new FileSystem(_fs)\n  const source = `objects/${oid.slice(0, 2)}/${oid.slice(2)}`\n  const file = await fs.read(`${gitdir}/${source}`)\n  if (!file) {\n    return null\n  }\n  return { object: file, format: 'deflated', source }\n}\n"",""import { FileSystem } from '../models/FileSystem.js'\nimport { E, GitError } from '../models/GitError.js'\nimport { readPackIndex } from '../storage/readPackIndex.js'\nimport { join } from '../utils/join.js'\n\nexport async function readObjectPacked ({\n  fs: _fs,\n  gitdir,\n  oid,\n  format = 'content',\n  getExternalRefDelta\n}) {\n  const fs = new FileSystem(_fs)\n  // Check to see if it's in a packfile.\n  // Iterate through all the .idx files\n  let list = await fs.readdir(join(gitdir, 'objects/pack'))\n  list = list.filter(x => x.endsWith('.idx'))\n  for (const filename of list) {\n    const indexFile = `${gitdir}/objects/pack/${filename}`\n    const p = await readPackIndex({\n      fs,\n      filename: indexFile,\n      getExternalRefDelta\n    })\n    if (p.error) throw new GitError(E.InternalFail, { message: p.error })\n    // If the packfile DOES have the oid we're looking for...\n    if (p.offsets.has(oid)) {\n      // Get the resolved git object from the packfile\n      if (!p.pack) {\n        const packFile = indexFile.replace(/idx$/, 'pack')\n        p.pack = fs.read(packFile)\n      }\n      const result = await p.read({ oid, getExternalRefDelta })\n      result.format = 'content'\n      result.source = `objects/pack/${filename.replace(/idx$/, 'pack')}`\n      return result\n    }\n  }\n  // Failed to find it\n  return null\n}\n"",""/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32;\n(function (factory) {\n\t/*jshint ignore:start */\n\t/*eslint-disable */\n\tif(typeof DO_NOT_EXPORT_CRC === 'undefined') {\n\t\tif('object' === typeof exports) {\n\t\t\tfactory(exports);\n\t\t} else if ('function' === typeof define && define.amd) {\n\t\t\tdefine(function () {\n\t\t\t\tvar module = {};\n\t\t\t\tfactory(module);\n\t\t\t\treturn module;\n\t\t\t});\n\t\t} else {\n\t\t\tfactory(CRC32 = {});\n\t\t}\n\t} else {\n\t\tfactory(CRC32 = {});\n\t}\n\t/*eslint-enable */\n\t/*jshint ignore:end */\n}(function(CRC32) {\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table() {\n\tvar c = 0, table = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T = signed_crc_table();\nfunction crc32_bstr(bstr, seed) {\n\tvar C = seed ^ -1, L = bstr.length - 1;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];\n\t\tC = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];\n\t}\n\tif(i === L) C = (C>>>8) ^ T[(C ^ bstr.charCodeAt(i))&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_buf(buf, seed) {\n\tif(buf.length > 10000) return crc32_buf_8(buf, seed);\n\tvar C = seed ^ -1, L = buf.length - 3;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t}\n\twhile(i < L+3) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_buf_8(buf, seed) {\n\tvar C = seed ^ -1, L = buf.length - 7;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t}\n\twhile(i < L+7) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_str(str, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L=str.length, c, d; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T[(C ^ c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn C ^ -1;\n}\nCRC32.table = T;\n// $FlowIgnore\nCRC32.bstr = crc32_bstr;\n// $FlowIgnore\nCRC32.buf = crc32_buf;\n// $FlowIgnore\nCRC32.str = crc32_str;\n}));\n"",""module.exports = apply_delta\n\nvar binary = require('bops')\n  , Decoder = require('varint/decode.js')\n  , vi = new Decoder\n\n// we use writeUint[8|32][LE|BE] instead of indexing\n// into buffers so that we get buffer-browserify compat.\nvar OFFSET_BUFFER = binary.create(4)\n  , LENGTH_BUFFER = binary.create(4)\n\nfunction apply_delta(delta, target) {\n  var base_size_info = {size: null, buffer: null}\n    , resized_size_info = {size: null, buffer: null}\n    , output_buffer\n    , out_idx\n    , command\n    , len\n    , idx\n\n  delta_header(delta, base_size_info)\n  delta_header(base_size_info.buffer, resized_size_info)\n\n  delta = resized_size_info.buffer\n\n  idx =\n  out_idx = 0\n  output_buffer = binary.create(resized_size_info.size)\n\n  len = delta.length\n\n  while(idx < len) {\n    command = delta[idx++]\n    command & 0x80 ? copy() : insert()\n  }\n\n  return output_buffer\n\n  function copy() {\n    binary.writeUInt32LE(OFFSET_BUFFER, 0, 0)\n    binary.writeUInt32LE(LENGTH_BUFFER, 0, 0)\n\n    var check = 1\n      , length\n      , offset\n\n    for(var x = 0; x < 4; ++x) {\n      if(command & check) {\n        OFFSET_BUFFER[3 - x] = delta[idx++]\n      }\n      check <<= 1\n    }\n\n    for(var x = 0; x < 3; ++x) {\n      if(command & check) {\n        LENGTH_BUFFER[3 - x] = delta[idx++]\n      }\n      check <<= 1\n    }\n    LENGTH_BUFFER[0] = 0\n\n    length = binary.readUInt32BE(LENGTH_BUFFER, 0) || 0x10000\n    offset = binary.readUInt32BE(OFFSET_BUFFER, 0)\n\n    binary.copy(target, output_buffer, out_idx, offset, offset + length)\n    out_idx += length\n  }\n\n  function insert() {\n    binary.copy(delta, output_buffer, out_idx, idx, command + idx)\n    idx += command\n    out_idx += command\n  }\n}\n\nfunction delta_header(buf, output) {\n  var done = false\n    , idx = 0\n    , size = 0\n\n  vi.ondata = function(s) {\n    size = s\n    done = true\n  }\n\n  do {\n    vi.write(buf[idx++])\n  } while(!done)\n\n  output.size = size\n  output.buffer = binary.subarray(buf, idx)\n}\n"",""// My version of git-list-pack - roughly 15x faster than the original\n// It's used slightly differently - instead of returning a through stream it wraps a stream.\n// (I tried to make it API identical, but that ended up being 2x slower than this version.)\nimport pako from 'pako'\n\nimport { E, GitError } from '../models/GitError.js'\n\nimport { StreamReader } from './StreamReader.js'\n\nexport async function listpack (stream, onData) {\n  const reader = new StreamReader(stream)\n  let PACK = await reader.read(4)\n  PACK = PACK.toString('utf8')\n  if (PACK !== 'PACK') {\n    throw new GitError(E.InternalFail, {\n      message: `Invalid PACK header '${PACK}'`\n    })\n  }\n\n  let version = await reader.read(4)\n  version = version.readUInt32BE(0)\n  if (version !== 2) {\n    throw new GitError(E.InternalFail, {\n      message: `Invalid packfile version: ${version}`\n    })\n  }\n\n  let numObjects = await reader.read(4)\n  numObjects = numObjects.readUInt32BE(0)\n  // If (for some godforsaken reason) this is an empty packfile, abort now.\n  if (numObjects < 1) return\n\n  while (!reader.eof() && numObjects--) {\n    const offset = reader.tell()\n    const { type, length, ofs, reference } = await parseHeader(reader)\n    const inflator = new pako.Inflate()\n    while (!inflator.result) {\n      const chunk = await reader.chunk()\n      if (reader.ended) break\n      inflator.push(chunk, false)\n      if (inflator.err) {\n        throw new GitError(E.InternalFail, {\n          message: `Pako error: ${inflator.msg}`\n        })\n      }\n      if (inflator.result) {\n        if (inflator.result.length !== length) {\n          throw new GitError(E.InternalFail, {\n            message: `Inflated object size is different from that stated in packfile.`\n          })\n        }\n\n        // Backtrack parser to where deflated data ends\n        await reader.undo()\n        await reader.read(chunk.length - inflator.strm.avail_in)\n        const end = reader.tell()\n        onData({\n          data: inflator.result,\n          type,\n          num: numObjects,\n          offset,\n          end,\n          reference,\n          ofs\n        })\n      }\n    }\n  }\n}\n\nasync function parseHeader (reader) {\n  // Object type is encoded in bits 654\n  let byte = await reader.byte()\n  const type = (byte >> 4) & 0b111\n  // The length encoding get complicated.\n  // Last four bits of length is encoded in bits 3210\n  let length = byte & 0b1111\n  // Whether the next byte is part of the variable-length encoded number\n  // is encoded in bit 7\n  if (byte & 0b10000000) {\n    let shift = 4\n    do {\n      byte = await reader.byte()\n      length |= (byte & 0b01111111) << shift\n      shift += 7\n    } while (byte & 0b10000000)\n  }\n  // Handle deltified objects\n  let ofs\n  let reference\n  if (type === 6) {\n    let shift = 0\n    ofs = 0\n    const bytes = []\n    do {\n      byte = await reader.byte()\n      ofs |= (byte & 0b01111111) << shift\n      shift += 7\n      bytes.push(byte)\n    } while (byte & 0b10000000)\n    reference = Buffer.from(bytes)\n  }\n  if (type === 7) {\n    const buf = await reader.read(20)\n    reference = buf\n  }\n  return { type, length, ofs, reference }\n}\n"",""export function outdent (str) {\n  return str\n    .split('\\n')\n    .map(x => x.replace(/^ /, ''))\n    .join('\\n')\n}\n"",""// Copyright (c) 2006, 2008 Tony Garnock-Jones <tonyg@lshift.net>\n// Copyright (c) 2006, 2008 LShift Ltd. <query@lshift.net>\n//\n// Permission is hereby granted, free of charge, to any person\n// obtaining a copy of this software and associated documentation files\n// (the \""Software\""), to deal in the Software without restriction,\n// including without limitation the rights to use, copy, modify, merge,\n// publish, distribute, sublicense, and/or sell copies of the Software,\n// and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nvar onp = require('./onp');\n\nfunction longestCommonSubsequence(file1, file2) {\n  var diff = new onp(file1, file2);\n  diff.compose();\n  var ses = diff.getses();\n\n  var root;\n  var prev;\n  var file1RevIdx = file1.length - 1,\n      file2RevIdx = file2.length - 1;\n  for (var i = ses.length - 1; i >= 0; --i) {\n      if (ses[i].t === diff.SES_COMMON) {\n        if (prev) {\n          prev.chain = {\n            file1index: file1RevIdx,\n            file2index: file2RevIdx,\n            chain: null\n          };\n          prev = prev.chain;\n        } else {\n          root = {\n            file1index: file1RevIdx,\n            file2index: file2RevIdx,\n            chain: null\n          };\n          prev = root;\n        }\n        file1RevIdx--;\n        file2RevIdx--;\n      } else if (ses[i].t === diff.SES_DELETE) {\n        file1RevIdx--;\n      } else if (ses[i].t === diff.SES_ADD) {\n        file2RevIdx--;\n      }\n  }\n\n  var tail = {\n    file1index: -1,\n    file2index: -1,\n    chain: null\n  };\n\n  if (!prev) {\n    return tail;\n  }\n\n  prev.chain = tail;\n\n  return root;\n}\n\nfunction diffIndices(file1, file2) {\n  // We apply the LCS to give a simple representation of the\n  // offsets and lengths of mismatched chunks in the input\n  // files. This is used by diff3_merge_indices below.\n\n  var result = [];\n  var tail1 = file1.length;\n  var tail2 = file2.length;\n\n  for (var candidate = longestCommonSubsequence(file1, file2); candidate !== null; candidate = candidate.chain) {\n    var mismatchLength1 = tail1 - candidate.file1index - 1;\n    var mismatchLength2 = tail2 - candidate.file2index - 1;\n    tail1 = candidate.file1index;\n    tail2 = candidate.file2index;\n\n    if (mismatchLength1 || mismatchLength2) {\n      result.push({\n        file1: [tail1 + 1, mismatchLength1],\n        file2: [tail2 + 1, mismatchLength2]\n      });\n    }\n  }\n\n  result.reverse();\n  return result;\n}\n\nfunction diff3MergeIndices(a, o, b) {\n  // Given three files, A, O, and B, where both A and B are\n  // independently derived from O, returns a fairly complicated\n  // internal representation of merge decisions it's taken. The\n  // interested reader may wish to consult\n  //\n  // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce. \""A\n  // Formal Investigation of Diff3.\"" In Arvind and Prasad,\n  // editors, Foundations of Software Technology and Theoretical\n  // Computer Science (FSTTCS), December 2007.\n  //\n  // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)\n  var i;\n\n  var m1 = diffIndices(o, a);\n  var m2 = diffIndices(o, b);\n\n  var hunks = [];\n\n  function addHunk(h, side) {\n    hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]);\n  }\n  for (i = 0; i < m1.length; i++) {\n    addHunk(m1[i], 0);\n  }\n  for (i = 0; i < m2.length; i++) {\n    addHunk(m2[i], 2);\n  }\n  hunks.sort(function(x, y) {\n    return x[0] - y[0]\n  });\n\n  var result = [];\n  var commonOffset = 0;\n\n  function copyCommon(targetOffset) {\n    if (targetOffset > commonOffset) {\n      result.push([1, commonOffset, targetOffset - commonOffset]);\n      commonOffset = targetOffset;\n    }\n  }\n\n  for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) {\n    var firstHunkIndex = hunkIndex;\n    var hunk = hunks[hunkIndex];\n    var regionLhs = hunk[0];\n    var regionRhs = regionLhs + hunk[2];\n    while (hunkIndex < hunks.length - 1) {\n      var maybeOverlapping = hunks[hunkIndex + 1];\n      var maybeLhs = maybeOverlapping[0];\n      if (maybeLhs > regionRhs) break;\n      regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]);\n      hunkIndex++;\n    }\n\n    copyCommon(regionLhs);\n    if (firstHunkIndex == hunkIndex) {\n      // The \""overlap\"" was only one hunk long, meaning that\n      // there's no conflict here. Either a and o were the\n      // same, or b and o were the same.\n      if (hunk[4] > 0) {\n        result.push([hunk[1], hunk[3], hunk[4]]);\n      }\n    } else {\n      // A proper conflict. Determine the extents of the\n      // regions involved from a, o and b. Effectively merge\n      // all the hunks on the left into one giant hunk, and\n      // do the same for the right; then, correct for skew\n      // in the regions of o that each side changed, and\n      // report appropriate spans for the three sides.\n      var regions = {\n        0: [a.length, -1, o.length, -1],\n        2: [b.length, -1, o.length, -1]\n      };\n      for (i = firstHunkIndex; i <= hunkIndex; i++) {\n        hunk = hunks[i];\n        var side = hunk[1];\n        var r = regions[side];\n        var oLhs = hunk[0];\n        var oRhs = oLhs + hunk[2];\n        var abLhs = hunk[3];\n        var abRhs = abLhs + hunk[4];\n        r[0] = Math.min(abLhs, r[0]);\n        r[1] = Math.max(abRhs, r[1]);\n        r[2] = Math.min(oLhs, r[2]);\n        r[3] = Math.max(oRhs, r[3]);\n      }\n      var aLhs = regions[0][0] + (regionLhs - regions[0][2]);\n      var aRhs = regions[0][1] + (regionRhs - regions[0][3]);\n      var bLhs = regions[2][0] + (regionLhs - regions[2][2]);\n      var bRhs = regions[2][1] + (regionRhs - regions[2][3]);\n      result.push([-1,\n        aLhs, aRhs - aLhs,\n        regionLhs, regionRhs - regionLhs,\n        bLhs, bRhs - bLhs\n      ]);\n    }\n    commonOffset = regionRhs;\n  }\n\n  copyCommon(o.length);\n  return result;\n}\n\nfunction diff3Merge(a, o, b) {\n  // Applies the output of Diff.diff3_merge_indices to actually\n  // construct the merged file; the returned result alternates\n  // between \""ok\"" and \""conflict\"" blocks.\n\n  var result = [];\n  var files = [a, o, b];\n  var indices = diff3MergeIndices(a, o, b);\n\n  var okLines = [];\n\n  function flushOk() {\n    if (okLines.length) {\n      result.push({\n        ok: okLines\n      });\n    }\n    okLines = [];\n  }\n\n  function pushOk(xs) {\n    for (var j = 0; j < xs.length; j++) {\n      okLines.push(xs[j]);\n    }\n  }\n\n  function isTrueConflict(rec) {\n    if (rec[2] != rec[6]) return true;\n    var aoff = rec[1];\n    var boff = rec[5];\n    for (var j = 0; j < rec[2]; j++) {\n      if (a[j + aoff] != b[j + boff]) return true;\n    }\n    return false;\n  }\n\n  for (var i = 0; i < indices.length; i++) {\n    var x = indices[i];\n    var side = x[0];\n    if (side == -1) {\n      if (!isTrueConflict(x)) {\n        pushOk(files[0].slice(x[1], x[1] + x[2]));\n      } else {\n        flushOk();\n        result.push({\n          conflict: {\n            a: a.slice(x[1], x[1] + x[2]),\n            aIndex: x[1],\n            o: o.slice(x[3], x[3] + x[4]),\n            oIndex: x[3],\n            b: b.slice(x[5], x[5] + x[6]),\n            bIndex: x[5]\n          }\n        });\n      }\n    } else {\n      pushOk(files[side].slice(x[1], x[1] + x[2]));\n    }\n  }\n\n  flushOk();\n  return result;\n}\n\nmodule.exports = diff3Merge;\n"",""export const types = {\n  commit: 0b0010000,\n  tree: 0b0100000,\n  blob: 0b0110000,\n  tag: 0b1000000,\n  ofs_delta: 0b1100000,\n  ref_delta: 0b1110000\n}\n"",""exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n"",""var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n"",""'use strict';\n\nvar AsyncLock = function (opts) {\n\topts = opts || {};\n\n\tthis.Promise = opts.Promise || Promise;\n\n\t// format: {key : [fn, fn]}\n\t// queues[key] = null indicates no job running for key\n\tthis.queues = {};\n\n\t// domain of current running func {key : fn}\n\tthis.domains = {};\n\n\t// lock is reentrant for same domain\n\tthis.domainReentrant = opts.domainReentrant || false;\n\n\tthis.timeout = opts.timeout || AsyncLock.DEFAULT_TIMEOUT;\n\tthis.maxPending = opts.maxPending || AsyncLock.DEFAULT_MAX_PENDING;\n};\n\nAsyncLock.DEFAULT_TIMEOUT = 0; //Never\nAsyncLock.DEFAULT_MAX_PENDING = 1000;\n\n/**\n * Acquire Locks\n *\n * @param {String|Array} key \tresource key or keys to lock\n * @param {function} fn \tasync function\n * @param {function} cb \tcallback function, otherwise will return a promise\n * @param {Object} opts \toptions\n */\nAsyncLock.prototype.acquire = function (key, fn, cb, opts) {\n\tif (Array.isArray(key)) {\n\t\treturn this._acquireBatch(key, fn, cb, opts);\n\t}\n\n\tif (typeof (fn) !== 'function') {\n\t\tthrow new Error('You must pass a function to execute');\n\t}\n\n\t// faux-deferred promise using new Promise() (as Promise.defer is deprecated)\n\tvar deferredResolve = null;\n\tvar deferredReject = null;\n\tvar deferred = null;\n\n\tif (typeof (cb) !== 'function') {\n\t\topts = cb;\n\t\tcb = null;\n\n\t\t// will return a promise\n\t\tdeferred =  new this.Promise(function(resolve, reject) {\n\t\t\tdeferredResolve = resolve;\n\t\t\tdeferredReject = reject;\n\t\t});\n\t}\n\n\topts = opts || {};\n\n\tvar resolved = false;\n\tvar timer = null;\n\tvar self = this;\n\n\tvar done = function (locked, err, ret) {\n\t\tif (locked) {\n\t\t\tif (self.queues[key].length === 0) {\n\t\t\t\tdelete self.queues[key];\n\t\t\t}\n\t\t\tdelete self.domains[key];\n\t\t}\n\n\t\tif (!resolved) {\n\t\t\tif (!deferred) {\n\t\t\t\tif (typeof (cb) === 'function') {\n\t\t\t\t\tcb(err, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t//promise mode\n\t\t\t\tif (err) {\n\t\t\t\t\tdeferredReject(err);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdeferredResolve(ret);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolved = true;\n\t\t}\n\n\t\tif (locked) {\n\t\t\t//run next func\n\t\t\tif (!!self.queues[key] && self.queues[key].length > 0) {\n\t\t\t\tself.queues[key].shift()();\n\t\t\t}\n\t\t}\n\t};\n\n\tvar exec = function (locked) {\n\t\tif (resolved) { // may due to timed out\n\t\t\treturn done(locked);\n\t\t}\n\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\n\t\tif (locked) {\n\t\t\tself.domains[key] = process.domain;\n\t\t}\n\n\t\t// Callback mode\n\t\tif (fn.length === 1) {\n\t\t\tvar called = false;\n\t\t\tfn(function (err, ret) {\n\t\t\t\tif (!called) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tdone(locked, err, ret);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// Promise mode\n\t\t\tself._promiseTry(function () {\n\t\t\t\treturn fn();\n\t\t\t})\n\t\t\t.then(function(ret){\n\t\t\t\tdone(locked, undefined, ret);\n\t\t\t}, function(error){\n\t\t\t\tdone(locked, error);\n\t\t\t});\n\t\t}\n\t};\n\tif (!!process.domain) {\n\t\texec = process.domain.bind(exec);\n\t}\n\n\tif (!self.queues[key]) {\n\t\tself.queues[key] = [];\n\t\texec(true);\n\t}\n\telse if (self.domainReentrant && !!process.domain && process.domain === self.domains[key]) {\n\t\t// If code is in the same domain of current running task, run it directly\n\t\t// Since lock is re-enterable\n\t\texec(false);\n\t}\n\telse if (self.queues[key].length >= self.maxPending) {\n\t\tdone(false, new Error('Too much pending tasks'));\n\t}\n\telse {\n\t\tvar taskFn = function () {\n\t\t\texec(true);\n\t\t};\n\t\tif (opts.skipQueue) {\n\t\t\tself.queues[key].unshift(taskFn);\n\t\t} else {\n\t\t\tself.queues[key].push(taskFn);\n\t\t}\n\n\t\tvar timeout = opts.timeout || self.timeout;\n\t\tif (timeout) {\n\t\t\ttimer = setTimeout(function () {\n\t\t\t\ttimer = null;\n\t\t\t\tdone(false, new Error('async-lock timed out'));\n\t\t\t}, timeout);\n\t\t}\n\t}\n\n\tif (deferred) {\n\t\treturn deferred;\n\t}\n};\n\n/*\n * Below is how this function works:\n *\n * Equivalent code:\n * self.acquire(key1, function(cb){\n *     self.acquire(key2, function(cb){\n *         self.acquire(key3, fn, cb);\n *     }, cb);\n * }, cb);\n *\n * Equivalent code:\n * var fn3 = getFn(key3, fn);\n * var fn2 = getFn(key2, fn3);\n * var fn1 = getFn(key1, fn2);\n * fn1(cb);\n */\nAsyncLock.prototype._acquireBatch = function (keys, fn, cb, opts) {\n\tif (typeof (cb) !== 'function') {\n\t\topts = cb;\n\t\tcb = null;\n\t}\n\n\tvar self = this;\n\tvar getFn = function (key, fn) {\n\t\treturn function (cb) {\n\t\t\tself.acquire(key, fn, cb, opts);\n\t\t};\n\t};\n\n\tvar fnx = fn;\n\tkeys.reverse().forEach(function (key) {\n\t\tfnx = getFn(key, fnx);\n\t});\n\n\tif (typeof (cb) === 'function') {\n\t\tfnx(cb);\n\t}\n\telse {\n\t\treturn new this.Promise(function (resolve, reject) {\n\t\t\t// check for promise mode in case keys is empty array\n\t\t\tif (fnx.length === 1) {\n\t\t\t\tfnx(function (err, ret) {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(ret);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresolve(fnx());\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\n *\tWhether there is any running or pending asyncFunc\n *\n *\t@param {String} key\n */\nAsyncLock.prototype.isBusy = function (key) {\n\tif (!key) {\n\t\treturn Object.keys(this.queues).length > 0;\n\t}\n\telse {\n\t\treturn !!this.queues[key];\n\t}\n};\n\n/**\n * Promise.try() implementation to become independent of Q-specific methods\n */\nAsyncLock.prototype._promiseTry = function(fn) {\n\ttry {\n\t\treturn this.Promise.resolve(fn());\n\t} catch (e) {\n\t\treturn this.Promise.reject(e);\n\t}\n};\n\nmodule.exports = AsyncLock;\n"",""if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n"",""var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n"",""'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \""binary string\""\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \""binary string\""\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \""Code too clever\"");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \""need lookahead\"");\n\n  do {\n    // Assert(cur_match < s->strstart, \""no future\"");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \""match[2]?\"");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \""wild scan\"");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \""already enough lookahead\"");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \""more < 2\"");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \""not enough room for search\"");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \""slide too late\"");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\""slide too late\"");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \""block gone\"");\n//    if (s.block_start < 0) throw new Error(\""block gone\"");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\""%c\"", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\""%c\"", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \""no flush?\"");\n  if (s.match_available) {\n    //Tracevv((stderr,\""%c\"", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \""wild scan\"");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\""%c\"", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\""%c\"", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \""longest match\"" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \""bug2\"");\n  //if (strm.avail_out <= 0) { throw new Error(\""bug2\"");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\""\\nbit length overflow\\n\""));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\""code %d bits %d->%d\\n\"", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \""inconsistent bit counts\"");\n  //Tracev((stderr,\""\\ngen_codes: max_code %d \"", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\""\\nn %3d %c l %2d c %4x (%x) \"",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \""tr_static_init: length != 256\"");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \""tr_static_init: dist != 256\"");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \""tr_static_init: 256+dist != 512\"");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\"" '%c' \"", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \""bad d_code\"");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \""pendingBuf overflow\"");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \"" 3_6?\"");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \""\\ndyn trees: dyn %ld, stat %ld\"",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \""not enough codes\"");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \""too many codes\"");\n  //Tracev((stderr, \""\\nbl counts: \""));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \""\\nbl code %2d \"", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \""\\nbl tree: sent %ld\"", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \""\\nlit tree: sent %ld\"", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \""\\ndist tree: sent %ld\"", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \""black list\"" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \""white list\"" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \""gray list\"" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\""black-listed\"") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\""white-listed\"") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \""black-listed\"" or \""white-listed\"" bytes:\n   * this stream either is empty or has tolerated (\""gray-listed\"") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \""\\nlit data: dyn %ld, stat %ld\"", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \""\\ndist data: dyn %ld, stat %ld\"", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \""\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \"",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \""lost buf\"");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \""bad compressed size\"");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\""\\ncomprlen %lu(%lu) \"", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \""_tr_tally: bad match\"");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\""\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \"",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n"",""'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== c.Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 aligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \""in\"" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \""inflate: reset\\n\""));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \""inflate: allocated\\n\""));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \""here\"" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \""last\"" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \""inflate:   zlib header ok\\n\""));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \""inflate:     stored block%s\\n\"",\n            //        state.last ? \"" (last)\"" : \""\""));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \""inflate:     fixed codes block%s\\n\"",\n            //        state.last ? \"" (last)\"" : \""\""));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \""inflate:     dynamic codes block%s\\n\"",\n            //        state.last ? \"" (last)\"" : \""\""));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \""inflate:       stored length %u\\n\"",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \""inflate:       stored end\\n\""));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \""inflate:       table sizes ok\\n\""));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \""inflate:       code lengths ok\\n\""));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \""inflate:         literal '%c'\\n\"" :\n          //        \""inflate:         literal 0x%02x\\n\"", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \""inflate:         end of block\\n\""));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \""inflate:         length %u\\n\"", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \""inflate:         distance %u\\n\"", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \""inflate.c too far\\n\""));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \""inflate:   check matches trailer\\n\""));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \""inflate:   length matches trailer\\n\""));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \""goto inf_leave\"", emulated via \""break inf_leave\""\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \""inflate:   dictionary set\\n\""));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \""inflate:         literal '%c'\\n\"" :\n        //        \""inflate:         literal 0x%02x\\n\"", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \""inflate:         length %u\\n\"", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \""inflate:         distance %u\\n\"", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \""continue\""\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \""inflate:         end of block\\n\""));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \""continue\""\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n"",""'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n"",""var proto = {}\nmodule.exports = proto\n\nproto.from = require('./from.js')\nproto.to = require('./to.js')\nproto.is = require('./is.js')\nproto.subarray = require('./subarray.js')\nproto.join = require('./join.js')\nproto.copy = require('./copy.js')\nproto.create = require('./create.js')\n\nmix(require('./read.js'), proto)\nmix(require('./write.js'), proto)\n\nfunction mix(from, into) {\n  for(var key in from) {\n    into[key] = from[key]\n  }\n}\n"",""module.exports = from\n\nvar base64 = require('base64-js')\n\nvar decoders = {\n    hex: from_hex\n  , utf8: from_utf\n  , base64: from_base64\n}\n\nfunction from(source, encoding) {\n  if(Array.isArray(source)) {\n    return new Uint8Array(source)\n  }\n\n  return decoders[encoding || 'utf8'](source)\n}\n\nfunction from_hex(str) {\n  var size = str.length / 2\n    , buf = new Uint8Array(size)\n    , character = ''\n\n  for(var i = 0, len = str.length; i < len; ++i) {\n    character += str.charAt(i)\n\n    if(i > 0 && (i % 2) === 1) {\n      buf[i>>>1] = parseInt(character, 16)\n      character = '' \n    }\n  }\n\n  return buf \n}\n\nfunction from_utf(str) {\n  var bytes = []\n    , tmp\n    , ch\n\n  for(var i = 0, len = str.length; i < len; ++i) {\n    ch = str.charCodeAt(i)\n    if(ch & 0x80) {\n      tmp = encodeURIComponent(str.charAt(i)).substr(1).split('%')\n      for(var j = 0, jlen = tmp.length; j < jlen; ++j) {\n        bytes[bytes.length] = parseInt(tmp[j], 16)\n      }\n    } else {\n      bytes[bytes.length] = ch \n    }\n  }\n\n  return new Uint8Array(bytes)\n}\n\nfunction from_base64(str) {\n  return new Uint8Array(base64.toByteArray(str)) \n}\n"",""module.exports = to\n\nvar base64 = require('base64-js')\n  , toutf8 = require('to-utf8')\n\nvar encoders = {\n    hex: to_hex\n  , utf8: to_utf\n  , base64: to_base64\n}\n\nfunction to(buf, encoding) {\n  return encoders[encoding || 'utf8'](buf)\n}\n\nfunction to_hex(buf) {\n  var str = ''\n    , byt\n\n  for(var i = 0, len = buf.length; i < len; ++i) {\n    byt = buf[i]\n    str += ((byt & 0xF0) >>> 4).toString(16)\n    str += (byt & 0x0F).toString(16)\n  }\n\n  return str\n}\n\nfunction to_utf(buf) {\n  return toutf8(buf)\n}\n\nfunction to_base64(buf) {\n  return base64.fromByteArray(buf)\n}\n\n"",""module.exports = to_utf8\n\nvar out = []\n  , col = []\n  , fcc = String.fromCharCode\n  , mask = [0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]\n  , unmask = [\n      0x00\n    , 0x01\n    , 0x02 | 0x01\n    , 0x04 | 0x02 | 0x01\n    , 0x08 | 0x04 | 0x02 | 0x01\n    , 0x10 | 0x08 | 0x04 | 0x02 | 0x01\n    , 0x20 | 0x10 | 0x08 | 0x04 | 0x02 | 0x01\n    , 0x40 | 0x20 | 0x10 | 0x08 | 0x04 | 0x02 | 0x01\n  ]\n\nfunction to_utf8(bytes, start, end) {\n  start = start === undefined ? 0 : start\n  end = end === undefined ? bytes.length : end\n\n  var idx = 0\n    , hi = 0x80\n    , collecting = 0\n    , pos\n    , by\n\n  col.length =\n  out.length = 0\n\n  while(idx < bytes.length) {\n    by = bytes[idx]\n    if(!collecting && by & hi) {\n      pos = find_pad_position(by)\n      collecting += pos\n      if(pos < 8) {\n        col[col.length] = by & unmask[6 - pos]\n      }\n    } else if(collecting) {\n      col[col.length] = by & unmask[6]\n      --collecting\n      if(!collecting && col.length) {\n        out[out.length] = fcc(reduced(col, pos))\n        col.length = 0\n      }\n    } else { \n      out[out.length] = fcc(by)\n    }\n    ++idx\n  }\n  if(col.length && !collecting) {\n    out[out.length] = fcc(reduced(col, pos))\n    col.length = 0\n  }\n  return out.join('')\n}\n\nfunction find_pad_position(byt) {\n  for(var i = 0; i < 7; ++i) {\n    if(!(byt & mask[i])) {\n      break\n    }\n  }\n  return i\n}\n\nfunction reduced(list) {\n  var out = 0\n  for(var i = 0, len = list.length; i < len; ++i) {\n    out |= list[i] << ((len - i - 1) * 6)\n  }\n  return out\n}\n"",""\nmodule.exports = function(buffer) {\n  return buffer instanceof Uint8Array;\n}\n"",""module.exports = subarray\n\nfunction subarray(buf, from, to) {\n  return buf.subarray(from || 0, to || buf.length)\n}\n"",""module.exports = join\n\nfunction join(targets, hint) {\n  if(!targets.length) {\n    return new Uint8Array(0)\n  }\n\n  var len = hint !== undefined ? hint : get_length(targets)\n    , out = new Uint8Array(len)\n    , cur = targets[0]\n    , curlen = cur.length\n    , curidx = 0\n    , curoff = 0\n    , i = 0\n\n  while(i < len) {\n    if(curoff === curlen) {\n      curoff = 0\n      ++curidx\n      cur = targets[curidx]\n      curlen = cur && cur.length\n      continue\n    }\n    out[i++] = cur[curoff++] \n  }\n\n  return out\n}\n\nfunction get_length(targets) {\n  var size = 0\n  for(var i = 0, len = targets.length; i < len; ++i) {\n    size += targets[i].byteLength\n  }\n  return size\n}\n"",""module.exports = copy\n\nvar slice = [].slice\n\nfunction copy(source, target, target_start, source_start, source_end) {\n  target_start = arguments.length < 3 ? 0 : target_start\n  source_start = arguments.length < 4 ? 0 : source_start\n  source_end = arguments.length < 5 ? source.length : source_end\n\n  if(source_end === source_start) {\n    return\n  }\n\n  if(target.length === 0 || source.length === 0) {\n    return\n  }\n\n  if(source_end > source.length) {\n    source_end = source.length\n  }\n\n  if(target.length - target_start < source_end - source_start) {\n    source_end = target.length - target_start + source_start\n  }\n\n  if(source.buffer !== target.buffer) {\n    return fast_copy(source, target, target_start, source_start, source_end)\n  }\n  return slow_copy(source, target, target_start, source_start, source_end)\n}\n\nfunction fast_copy(source, target, target_start, source_start, source_end) {\n  var len = (source_end - source_start) + target_start\n\n  for(var i = target_start, j = source_start;\n      i < len;\n      ++i,\n      ++j) {\n    target[i] = source[j]\n  }\n}\n\nfunction slow_copy(from, to, j, i, jend) {\n  // the buffers could overlap.\n  var iend = jend + i\n    , tmp = new Uint8Array(slice.call(from, i, iend))\n    , x = 0\n\n  for(; i < iend; ++i, ++x) {\n    to[j++] = tmp[x]\n  }\n}\n"",""module.exports = function(size) {\n  return new Uint8Array(size)\n}\n"",""module.exports = {\n    readUInt8:      read_uint8\n  , readInt8:       read_int8\n  , readUInt16LE:   read_uint16_le\n  , readUInt32LE:   read_uint32_le\n  , readInt16LE:    read_int16_le\n  , readInt32LE:    read_int32_le\n  , readFloatLE:    read_float_le\n  , readDoubleLE:   read_double_le\n  , readUInt16BE:   read_uint16_be\n  , readUInt32BE:   read_uint32_be\n  , readInt16BE:    read_int16_be\n  , readInt32BE:    read_int32_be\n  , readFloatBE:    read_float_be\n  , readDoubleBE:   read_double_be\n}\n\nvar map = require('./mapped.js')\n\nfunction read_uint8(target, at) {\n  return target[at]\n}\n\nfunction read_int8(target, at) {\n  var v = target[at];\n  return v < 0x80 ? v : v - 0x100\n}\n\nfunction read_uint16_le(target, at) {\n  var dv = map.get(target);\n  return dv.getUint16(at + target.byteOffset, true)\n}\n\nfunction read_uint32_le(target, at) {\n  var dv = map.get(target);\n  return dv.getUint32(at + target.byteOffset, true)\n}\n\nfunction read_int16_le(target, at) {\n  var dv = map.get(target);\n  return dv.getInt16(at + target.byteOffset, true)\n}\n\nfunction read_int32_le(target, at) {\n  var dv = map.get(target);\n  return dv.getInt32(at + target.byteOffset, true)\n}\n\nfunction read_float_le(target, at) {\n  var dv = map.get(target);\n  return dv.getFloat32(at + target.byteOffset, true)\n}\n\nfunction read_double_le(target, at) {\n  var dv = map.get(target);\n  return dv.getFloat64(at + target.byteOffset, true)\n}\n\nfunction read_uint16_be(target, at) {\n  var dv = map.get(target);\n  return dv.getUint16(at + target.byteOffset, false)\n}\n\nfunction read_uint32_be(target, at) {\n  var dv = map.get(target);\n  return dv.getUint32(at + target.byteOffset, false)\n}\n\nfunction read_int16_be(target, at) {\n  var dv = map.get(target);\n  return dv.getInt16(at + target.byteOffset, false)\n}\n\nfunction read_int32_be(target, at) {\n  var dv = map.get(target);\n  return dv.getInt32(at + target.byteOffset, false)\n}\n\nfunction read_float_be(target, at) {\n  var dv = map.get(target);\n  return dv.getFloat32(at + target.byteOffset, false)\n}\n\nfunction read_double_be(target, at) {\n  var dv = map.get(target);\n  return dv.getFloat64(at + target.byteOffset, false)\n}\n"",""module.exports = {\n    writeUInt8:      write_uint8\n  , writeInt8:       write_int8\n  , writeUInt16LE:   write_uint16_le\n  , writeUInt32LE:   write_uint32_le\n  , writeInt16LE:    write_int16_le\n  , writeInt32LE:    write_int32_le\n  , writeFloatLE:    write_float_le\n  , writeDoubleLE:   write_double_le\n  , writeUInt16BE:   write_uint16_be\n  , writeUInt32BE:   write_uint32_be\n  , writeInt16BE:    write_int16_be\n  , writeInt32BE:    write_int32_be\n  , writeFloatBE:    write_float_be\n  , writeDoubleBE:   write_double_be\n}\n\nvar map = require('./mapped.js')\n\nfunction write_uint8(target, value, at) {\n  return target[at] = value\n}\n\nfunction write_int8(target, value, at) {\n  return target[at] = value < 0 ? value + 0x100 : value\n}\n\nfunction write_uint16_le(target, value, at) {\n  var dv = map.get(target);\n  return dv.setUint16(at + target.byteOffset, value, true)\n}\n\nfunction write_uint32_le(target, value, at) {\n  var dv = map.get(target);\n  return dv.setUint32(at + target.byteOffset, value, true)\n}\n\nfunction write_int16_le(target, value, at) {\n  var dv = map.get(target);\n  return dv.setInt16(at + target.byteOffset, value, true)\n}\n\nfunction write_int32_le(target, value, at) {\n  var dv = map.get(target);\n  return dv.setInt32(at + target.byteOffset, value, true)\n}\n\nfunction write_float_le(target, value, at) {\n  var dv = map.get(target);\n  return dv.setFloat32(at + target.byteOffset, value, true)\n}\n\nfunction write_double_le(target, value, at) {\n  var dv = map.get(target);\n  return dv.setFloat64(at + target.byteOffset, value, true)\n}\n\nfunction write_uint16_be(target, value, at) {\n  var dv = map.get(target);\n  return dv.setUint16(at + target.byteOffset, value, false)\n}\n\nfunction write_uint32_be(target, value, at) {\n  var dv = map.get(target);\n  return dv.setUint32(at + target.byteOffset, value, false)\n}\n\nfunction write_int16_be(target, value, at) {\n  var dv = map.get(target);\n  return dv.setInt16(at + target.byteOffset, value, false)\n}\n\nfunction write_int32_be(target, value, at) {\n  var dv = map.get(target);\n  return dv.setInt32(at + target.byteOffset, value, false)\n}\n\nfunction write_float_be(target, value, at) {\n  var dv = map.get(target);\n  return dv.setFloat32(at + target.byteOffset, value, false)\n}\n\nfunction write_double_be(target, value, at) {\n  var dv = map.get(target);\n  return dv.setFloat64(at + target.byteOffset, value, false)\n}\n"",""module.exports = Decoder\n\nvar MSB = 0x80\n  , REST = 0x7F\n\n\nfunction Decoder() {\n  this.accum = []\n}\nDecoder.prototype.write = write;\n\nfunction write(byte) {\n  var msb = byte & MSB\n    , accum = this.accum\n    , len\n    , out\n\n  accum[accum.length] = byte & REST\n  if(msb) {\n    return\n  }\n\n  len = accum.length\n  out = 0\n\n  for(var i = 0; i < len; ++i) {\n    out |= accum[i] << (7 * i)\n  }\n\n  accum.length = 0\n  this.ondata(out)\n  return\n}"",""/*\n * URL: https://github.com/cubicdaiya/onp\n *\n * Copyright (c) 2013 Tatsuhiko Kubo <cubicdaiya@gmail.com>\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \""Software\""), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in\n *  all copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n *  THE SOFTWARE.\n */\n\n/**\n * The algorithm implemented here is based on \""An O(NP) Sequence Comparison Algorithm\""\n * by described by Sun Wu, Udi Manber and Gene Myers\n*/\nmodule.exports = function (a_, b_) {\n    var a          = a_,\n        b          = b_,\n        m          = a.length,\n        n          = b.length,\n        reverse    = false,\n        ed         = null,\n        offset     = m + 1,\n        path       = [],\n        pathposi   = [],\n        ses        = [],\n        lcs        = \""\"",\n        SES_DELETE = -1,\n        SES_COMMON = 0,\n        SES_ADD    = 1;\n\n    var tmp1,\n        tmp2;\n\n    var init = function () {\n        if (m >= n) {\n            tmp1    = a;\n            tmp2    = m;\n            a       = b;\n            b       = tmp1;\n            m       = n;\n            n       = tmp2;\n            reverse = true;\n            offset = m + 1;\n        }\n    };\n\n    var P = function (x, y, k) {\n        return {\n            'x' : x,\n            'y' : y,\n            'k' : k,\n        };\n    };\n\n    var seselem = function (elem, t) {\n        return {\n            'elem' : elem,\n            't'    : t,\n        };\n    };\n\n    var snake = function (k, p, pp) {\n        var r, x, y;\n        if (p > pp) {\n            r = path[k-1+offset];\n        } else {\n            r = path[k+1+offset];\n        }\n\n        y = Math.max(p, pp);\n        x = y - k;\n        while (x < m && y < n && a[x] === b[y]) {\n            ++x;\n            ++y;\n        }\n\n        path[k+offset] = pathposi.length;\n        pathposi[pathposi.length] = new P(x, y, r);\n        return y;\n    };\n\n    var recordseq = function (epc) {\n        var x_idx, y_idx, px_idx, py_idx, i;\n        x_idx  = y_idx  = 1;\n        px_idx = py_idx = 0;\n        for (i=epc.length-1;i>=0;--i) {\n            while(px_idx < epc[i].x || py_idx < epc[i].y) {\n                if (epc[i].y - epc[i].x > py_idx - px_idx) {\n                    if (reverse) {\n                        ses[ses.length] = new seselem(b[py_idx], SES_DELETE);\n                    } else {\n                        ses[ses.length] = new seselem(b[py_idx], SES_ADD);\n                    }\n                    ++y_idx;\n                    ++py_idx;\n                } else if (epc[i].y - epc[i].x < py_idx - px_idx) {\n                    if (reverse) {\n                        ses[ses.length] = new seselem(a[px_idx], SES_ADD);\n                    } else {\n                        ses[ses.length] = new seselem(a[px_idx], SES_DELETE);\n                    }\n                    ++x_idx;\n                    ++px_idx;\n                } else {\n                    ses[ses.length] = new seselem(a[px_idx], SES_COMMON);\n                    lcs += a[px_idx];\n                    ++x_idx;\n                    ++y_idx;\n                    ++px_idx;\n                    ++py_idx;\n                }\n            }\n        }\n    };\n\n    init();\n\n    return {\n        SES_DELETE : -1,\n        SES_COMMON :  0,\n        SES_ADD    :  1,\n        editdistance : function () {\n            return ed;\n        },\n        getlcs : function () {\n            return lcs;\n        },\n        getses : function () {\n            return ses;\n        },\n        compose : function () {\n            var delta, size, fp, p, r, epc, i, k;\n            delta  = n - m;\n            size   = m + n + 3;\n            fp     = {};\n            for (i=0;i<size;++i) {\n                fp[i] = -1;\n                path[i] = -1;\n            }\n            p = -1;\n            do {\n                ++p;\n                for (k=-p;k<=delta-1;++k) {\n                    fp[k+offset] = snake(k, fp[k-1+offset]+1, fp[k+1+offset]);\n                }\n                for (k=delta+p;k>=delta+1;--k) {\n                    fp[k+offset] = snake(k, fp[k-1+offset]+1, fp[k+1+offset]);\n                }\n                fp[delta+offset] = snake(delta, fp[delta-1+offset]+1, fp[delta+1+offset]);\n            } while (fp[delta+offset] !== n);\n\n            ed = delta + 2 * p;\n\n            r = path[delta+offset];\n\n            epc  = [];\n            while (r !== -1) {\n                epc[epc.length] = new P(pathposi[r].x, pathposi[r].y, null);\n                r = pathposi[r].k;\n            }\n            recordseq(epc);\n        }\n    };\n};\n"",""import { GitPktLine } from '../models/GitPktLine.js'\nimport { pkg } from '../utils/pkg'\n\nexport async function writeRefsAdResponse ({ capabilities, refs, symrefs }) {\n  const stream = []\n  // Compose capabilities string\n  let syms = ''\n  for (const [key, value] of Object.entries(symrefs)) {\n    syms += `symref=${key}:${value} `\n  }\n  let caps = `\\x00${[...capabilities].join(' ')} ${syms}agent=${pkg.agent}`\n  // stream.write(GitPktLine.encode(`# service=${service}\\n`))\n  // stream.write(GitPktLine.flush())\n  // Note: In the edge case of a brand new repo, zero refs (and zero capabilities)\n  // are returned.\n  for (const [key, value] of Object.entries(refs)) {\n    stream.push(GitPktLine.encode(`${value} ${key}${caps}\\n`))\n    caps = ''\n  }\n  stream.push(GitPktLine.flush())\n  return stream\n}\n"",""import { GitRefManager } from '../managers/GitRefManager.js'\nimport { FileSystem } from '../models/FileSystem.js'\nimport { join } from '../utils/join.js'\nimport { cores } from '../utils/plugins.js'\nimport { writeRefsAdResponse } from '../wire/writeRefsAdResponse.js'\n\nexport async function uploadPack ({\n  core = 'default',\n  dir,\n  gitdir = join(dir, '.git'),\n  fs: _fs = cores.get(core).get('fs'),\n  advertiseRefs = false\n}) {\n  const fs = new FileSystem(_fs)\n  try {\n    if (advertiseRefs) {\n      // Send a refs advertisement\n      const capabilities = [\n        'thin-pack',\n        'side-band',\n        'side-band-64k',\n        'shallow',\n        'deepen-since',\n        'deepen-not',\n        'allow-tip-sha1-in-want',\n        'allow-reachable-sha1-in-want'\n      ]\n      let keys = await GitRefManager.listRefs({\n        fs,\n        gitdir,\n        filepath: 'refs'\n      })\n      keys = keys.map(ref => `refs/${ref}`)\n      const refs = {}\n      keys.unshift('HEAD') // HEAD must be the first in the list\n      for (const key of keys) {\n        refs[key] = await GitRefManager.resolve({ fs, gitdir, ref: key })\n      }\n      const symrefs = {}\n      symrefs['HEAD'] = await GitRefManager.resolve({\n        fs,\n        gitdir,\n        ref: 'HEAD',\n        depth: 2\n      })\n      return writeRefsAdResponse({\n        capabilities,\n        refs,\n        symrefs\n      })\n    }\n  } catch (err) {\n    err.caller = 'git.uploadPack'\n    throw err\n  }\n}\n"",""/**\n * Determine whether a file is binary (and therefore not worth trying to merge automatically)\n *\n * @param {Uint8Array} buffer\n *\n * If it looks incredibly simple / naive to you, compare it with the original:\n *\n * // xdiff-interface.c\n *\n * #define FIRST_FEW_BYTES 8000\n * int buffer_is_binary(const char *ptr, unsigned long size)\n * {\n *  if (FIRST_FEW_BYTES < size)\n *   size = FIRST_FEW_BYTES;\n *  return !!memchr(ptr, 0, size);\n * }\n *\n * Yup, that's how git does it. We could try to be smarter\n */\nexport function isBinary (buffer) {\n  // in canonical git, this check happens in builtins/merge-file.c\n  // but I think it's DRYer to do it here.\n  // The value picked is explained here: https://github.com/git/git/blob/ab15ad1a3b4b04a29415aef8c9afa2f64fc194a2/xdiff-interface.h#L12\n  const MAX_XDIFF_SIZE = 1024 * 1024 * 1023\n  if (buffer.length > MAX_XDIFF_SIZE) return true\n  // check for null characters in the first 8000 bytes\n  return buffer.slice(0, 8000).some(value => value === 0)\n}\n"",""// This module is necessary because Webpack doesn't ship with\n// a version of path-browserify that includes path.posix, yet path-browserify IS path.posix\nimport _path from 'path'\n\nexport const path = _path.posix === undefined ? _path : _path.posix\n"",""import { GitPktLine } from '../models/GitPktLine.js'\n\nexport async function parseUploadPackRequest (stream) {\n  const read = GitPktLine.streamReader(stream)\n  let done = false\n  let capabilities = null\n  const wants = []\n  const haves = []\n  const shallows = []\n  let depth\n  let since\n  const exclude = []\n  let relative = false\n  while (!done) {\n    const line = await read()\n    if (line === true) break\n    if (line === null) continue\n    const [key, value, ...rest] = line\n      .toString('utf8')\n      .trim()\n      .split(' ')\n    if (!capabilities) capabilities = rest\n    switch (key) {\n      case 'want':\n        wants.push(value)\n        break\n      case 'have':\n        haves.push(value)\n        break\n      case 'shallow':\n        shallows.push(value)\n        break\n      case 'deepen':\n        depth = parseInt(value)\n        break\n      case 'deepen-since':\n        since = parseInt(value)\n        break\n      case 'deepen-not':\n        exclude.push(value)\n        break\n      case 'deepen-relative':\n        relative = true\n        break\n      case 'done':\n        done = true\n        break\n    }\n  }\n  return {\n    capabilities,\n    wants,\n    haves,\n    shallows,\n    depth,\n    since,\n    exclude,\n    relative,\n    done\n  }\n}\n"",""export * from './commands/listCommitsAndTags'\nexport * from './commands/listObjects'\nexport * from './commands/pack'\nexport * from './commands/uploadPack'\n\nexport * from './managers/GitConfigManager'\nexport * from './managers/GitIgnoreManager'\nexport * from './managers/GitIndexManager'\nexport * from './managers/GitRefManager'\nexport * from './managers/GitRemoteHTTP'\nexport * from './managers/GitRemoteManager'\nexport * from './managers/GitShallowManager'\n\nexport * from './models/FileSystem'\nexport * from './models/GitAnnotatedTag'\nexport * from './models/GitCommit'\nexport * from './models/GitConfig'\nexport * from './models/GitError'\nexport * from './models/GitIndex'\nexport * from './models/GitObject'\nexport * from './models/GitPackIndex'\nexport * from './models/GitPktLine'\nexport * from './models/GitRefSpec'\nexport * from './models/GitRefSpecSet'\nexport * from './models/GitSideBand'\nexport * from './models/GitTree'\nexport * from './models/SignedGitCommit'\n\nexport * from './storage/readObject'\nexport * from './storage/writeObject'\n\nexport * from './utils/auth'\nexport * from './utils/calculateBasicAuthHeader'\nexport * from './utils/calculateBasicAuthUsernamePasswordPair'\nexport * from './utils/collect'\nexport * from './utils/comparePath'\nexport * from './utils/http'\nexport * from './utils/flatFileListToDirectoryStructure'\nexport * from './utils/isBinary'\nexport * from './utils/join'\nexport * from './utils/log'\nexport * from './utils/mergeFile'\nexport * from './utils/mergeTree'\nexport * from './utils/oauth2'\nexport * from './utils/padHex'\nexport * from './utils/path'\nexport * from './utils/pkg'\nexport * from './utils/plugins'\nexport * from './utils/resolveTree'\nexport * from './utils/shasum'\nexport * from './utils/sleep'\nexport * from './utils/symbols'\n\nexport * from './wire/parseReceivePackResponse'\nexport * from './wire/parseRefsAdResponse'\nexport * from './wire/parseUploadPackResponse'\nexport * from './wire/parseUploadPackRequest'\nexport * from './wire/writeReceivePackRequest'\nexport * from './wire/writeRefsAdResponse'\nexport * from './wire/writeUploadPackRequest'\n""],""sourceRoot"":""""}"
34eb28cd7f9762e2436cc103a2af50e2afc7fe71,13216903,      // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension
3c4fbff77bd01edbc7c6217f37335cb13b4eeef5,2200494,    * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom
bf017bf0210e02ad194735c4a3b61e0d583b312e,15900485,// see https://stackoverflow.com/questions/15900485/correct-way-to-convert-size-in-bytes-to-kb-mb-gb-in-javascript
8b1c32092ece02bee74527c306e9ed008a8a6ec2,2916081,					// from: http://stackoverflow.com/questions/2916081/zoom-in-on-a-point-using-scale-and-translate
9fb6a34ca31380499a016550206b00219c6b1eae,35681045,//http://stackoverflow.com/questions/35681045/expressiontree-method-to-assign-memberinitexpression-to-property
761597a9152445561af1747becf80dd79436fa3f,8513748,"3360310,comment,3359433,3360240,6,0,cygx,,,""Type-punning through unions is already legal in C99, but there's a known error in Annex J, listing it incorrectly as unspecified behaviour.<p>See <a href=""""http://stackoverflow.com/a/8513748/48015"""" rel=""""nofollow"""">http://stackoverflow.com/a/8513748/48015</a>"",1324032514"
a8dd5540d4e82c6968d76c3bc60835edeb2d0b12,16742828,"      ""source"": ""'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.getDomNodePath = getDomNodePath;\nfunction getDomNodePath(el) {\n  if (!el.nodeName) return '';\n\n  var stack = [];\n  while (el.parentNode != null) {\n    // console.log(el.nodeName);\n    var sibCount = 0;\n    var sibIndex = 0;\n    for (var i = 0; i < el.parentNode.childNodes.length; i++) {\n      var sib = el.parentNode.childNodes[i];\n      if (sib.nodeName == el.nodeName) {\n        if (sib === el) {\n          sibIndex = sibCount;\n        }\n        sibCount++;\n      }\n    }\n    if (el.hasAttribute('id') && el.id != '') {\n      stack.unshift(el.nodeName.toLowerCase() + '#' + el.id);\n    } else if (sibCount > 1) {\n      stack.unshift(el.nodeName.toLowerCase() + ':eq(' + sibIndex + ')');\n    } else {\n      stack.unshift(el.nodeName.toLowerCase());\n    }\n    el = el.parentNode;\n  }\n\n  return stack.slice(1).join(' > ');\n}\n\n// via: http://stackoverflow.com/a/16742828/2511985"""
4032a8343027c019db83ca1faebe4d81d94c336a,2745329,    http://stackoverflow.com/questions/2745329/how-to-make-scipy-interpolate-give-an-extrapolated-result-beyond-the-input-range
ddc85a1baf4d2232da91bf545d35f8248a1c489b,28210364,"{""version"":3,""sources"":[""webpack:///./node_modules/core-js/modules/_iter-define.js"",""webpack:///./node_modules/core-js/modules/es7.promise.finally.js"",""webpack:///./node_modules/axios/lib/core/Axios.js"",""webpack:///./node_modules/core-js/modules/_object-keys.js"",""webpack:///./node_modules/axios/lib/helpers/spread.js"",""webpack:///./node_modules/core-js/modules/_object-dps.js"",""webpack:///./node_modules/core-js/modules/_task.js"",""webpack:///./node_modules/axios/lib/helpers/bind.js"",""webpack:///./node_modules/core-js/modules/_iter-call.js"",""webpack:///./node_modules/core-js/modules/_dom-create.js"",""webpack:///./node_modules/core-js/modules/_classof.js"",""webpack:///./node_modules/axios/lib/defaults.js"",""webpack:///./node_modules/core-js/modules/_object-gops.js"",""webpack:///./node_modules/core-js/modules/core.get-iterator-method.js"",""webpack:///./node_modules/vue-loader/lib/runtime/componentNormalizer.js"",""webpack:///./node_modules/core-js/modules/_redefine.js"",""webpack:///./node_modules/core-js/modules/_object-create.js"",""webpack:///./node_modules/vue/dist/vue.runtime.esm.js"",""webpack:///./node_modules/core-js/modules/_wks.js"",""webpack:///./node_modules/core-js/modules/_library.js"",""webpack:///./node_modules/axios/lib/core/createError.js"",""webpack:///./node_modules/core-js/modules/_cof.js"",""webpack:///./node_modules/axios/lib/cancel/isCancel.js"",""webpack:///./node_modules/axios/lib/helpers/buildURL.js"",""webpack:///./node_modules/core-js/modules/_invoke.js"",""webpack:///./node_modules/core-js/modules/_hide.js"",""webpack:///./node_modules/core-js/modules/_is-array-iter.js"",""webpack:///./node_modules/axios/lib/core/enhanceError.js"",""webpack:///./node_modules/core-js/modules/_object-gpo.js"",""webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js"",""webpack:///./node_modules/core-js/modules/_iter-create.js"",""webpack:///./node_modules/core-js/modules/_to-integer.js"",""webpack:///./node_modules/core-js/modules/_property-desc.js"",""webpack:///./node_modules/axios/lib/core/settle.js"",""webpack:///./node_modules/core-js/modules/_for-of.js"",""webpack:///./node_modules/axios/lib/core/mergeConfig.js"",""webpack:///./node_modules/core-js/modules/_to-object.js"",""webpack:///./node_modules/axios/lib/core/dispatchRequest.js"",""webpack:///./node_modules/core-js/modules/_object-pie.js"",""webpack:///./node_modules/core-js/modules/es6.promise.js"",""webpack:///./node_modules/core-js/modules/_shared.js"",""webpack:///./node_modules/core-js/modules/_export.js"",""webpack:///./node_modules/core-js/modules/_iter-detect.js"",""webpack:///./node_modules/core-js/modules/_shared-key.js"",""webpack:///./node_modules/core-js/modules/_iobject.js"",""webpack:///./node_modules/core-js/modules/_to-iobject.js"",""webpack:///./node_modules/core-js/modules/_has.js"",""webpack:///./node_modules/core-js/modules/_to-primitive.js"",""webpack:///./node_modules/core-js/modules/_object-assign.js"",""webpack:///./node_modules/core-js/modules/_global.js"",""webpack:///./node_modules/core-js/modules/_to-absolute-index.js"",""webpack:///./node_modules/core-js/modules/_fails.js"",""webpack:///./node_modules/core-js/modules/_set-species.js"",""webpack:///./node_modules/axios/lib/cancel/Cancel.js"",""webpack:///./node_modules/axios/lib/helpers/cookies.js"",""webpack:///./node_modules/core-js/modules/_set-to-string-tag.js"",""webpack:///./node_modules/core-js/modules/_microtask.js"",""webpack:///./node_modules/core-js/modules/_core.js"",""webpack:///./node_modules/core-js/modules/_iterators.js"",""webpack:///./node_modules/core-js/modules/_object-dp.js"",""webpack:///./node_modules/axios/lib/cancel/CancelToken.js"",""webpack:///./node_modules/core-js/modules/_ctx.js"",""webpack:///./node_modules/core-js/modules/_add-to-unscopables.js"",""webpack:///./node_modules/core-js/modules/_perform.js"",""webpack:///./node_modules/core-js/modules/_to-length.js"",""webpack:///./node_modules/core-js/modules/_descriptors.js"",""webpack:///./node_modules/core-js/modules/_user-agent.js"",""webpack:///./node_modules/core-js/modules/_new-promise-capability.js"",""webpack:///./node_modules/axios/lib/adapters/xhr.js"",""webpack:///./node_modules/axios/index.js"",""webpack:///./node_modules/core-js/modules/_promise-resolve.js"",""webpack:///./node_modules/core-js/modules/_defined.js"",""webpack:///./node_modules/axios/lib/helpers/parseHeaders.js"",""webpack:///./node_modules/core-js/modules/_array-includes.js"",""webpack:///./node_modules/axios/lib/core/transformData.js"",""webpack:///./node_modules/axios/lib/utils.js"",""webpack:///./node_modules/core-js/modules/_ie8-dom-define.js"",""webpack:///./node_modules/axios/node_modules/is-buffer/index.js"",""webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js"",""webpack:///(webpack)/buildin/global.js"",""webpack:///./node_modules/core-js/modules/_uid.js"",""webpack:///./node_modules/core-js/modules/es6.array.iterator.js"",""webpack:///./node_modules/core-js/modules/_an-object.js"",""webpack:///./node_modules/core-js/modules/_object-keys-internal.js"",""webpack:///./node_modules/axios/lib/axios.js"",""webpack:///./node_modules/core-js/modules/_is-object.js"",""webpack:///./node_modules/core-js/modules/_iter-step.js"",""webpack:///./node_modules/core-js/modules/_a-function.js"",""webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js"",""webpack:///./node_modules/core-js/modules/_redefine-all.js"",""webpack:///./node_modules/core-js/modules/_enum-bug-keys.js"",""webpack:///./node_modules/axios/lib/helpers/combineURLs.js"",""webpack:///./node_modules/core-js/modules/_species-constructor.js"",""webpack:///./node_modules/process/browser.js"",""webpack:///./node_modules/core-js/modules/_an-instance.js"",""webpack:///./node_modules/axios/lib/core/InterceptorManager.js"",""webpack:///./node_modules/core-js/modules/es6.object.assign.js"",""webpack:///./node_modules/core-js/modules/_function-to-string.js"",""webpack:///./node_modules/core-js/modules/_html.js""],""names"":[""LIBRARY"",""__webpack_require__"",""$export"",""redefine"",""hide"",""Iterators"",""$iterCreate"",""setToStringTag"",""getPrototypeOf"",""ITERATOR"",""BUGGY"",""keys"",""FF_ITERATOR"",""KEYS"",""VALUES"",""returnThis"",""this"",""module"",""exports"",""Base"",""NAME"",""Constructor"",""next"",""DEFAULT"",""IS_SET"",""FORCED"",""methods"",""key"",""IteratorPrototype"",""getMethod"",""kind"",""proto"",""TAG"",""DEF_VALUES"",""VALUES_BUG"",""prototype"",""$native"",""$default"",""$entries"",""undefined"",""$anyNative"",""entries"",""call"",""Object"",""name"",""values"",""P"",""F"",""core"",""global"",""speciesConstructor"",""promiseResolve"",""R"",""finally"",""onFinally"",""C"",""Promise"",""isFunction"",""then"",""x"",""e"",""utils"",""buildURL"",""InterceptorManager"",""dispatchRequest"",""mergeConfig"",""Axios"",""instanceConfig"",""defaults"",""interceptors"",""request"",""response"",""config"",""arguments"",""url"",""method"",""toLowerCase"",""chain"",""promise"",""resolve"",""forEach"",""interceptor"",""unshift"",""fulfilled"",""rejected"",""push"",""length"",""shift"",""getUri"",""params"",""paramsSerializer"",""replace"",""merge"",""data"",""$keys"",""enumBugKeys"",""O"",""callback"",""arr"",""apply"",""dP"",""anObject"",""getKeys"",""defineProperties"",""Properties"",""i"",""f"",""defer"",""channel"",""port"",""ctx"",""invoke"",""html"",""cel"",""process"",""setTask"",""setImmediate"",""clearTask"",""clearImmediate"",""MessageChannel"",""Dispatch"",""counter"",""queue"",""ONREADYSTATECHANGE"",""run"",""id"",""hasOwnProperty"",""fn"",""listener"",""event"",""args"",""Function"",""nextTick"",""now"",""port2"",""port1"",""onmessage"",""postMessage"",""addEventListener"",""importScripts"",""appendChild"",""removeChild"",""setTimeout"",""set"",""clear"",""thisArg"",""Array"",""iterator"",""value"",""ret"",""isObject"",""document"",""is"",""createElement"",""it"",""cof"",""ARG"",""tryGet"",""T"",""B"",""callee"",""normalizeHeaderName"",""DEFAULT_CONTENT_TYPE"",""Content-Type"",""setContentTypeIfUnset"",""headers"",""isUndefined"",""getDefaultAdapter"",""adapter"",""toString"",""XMLHttpRequest"",""transformRequest"",""isFormData"",""isArrayBuffer"",""isBuffer"",""isStream"",""isFile"",""isBlob"",""isArrayBufferView"",""buffer"",""isURLSearchParams"",""JSON"",""stringify"",""transformResponse"",""parse"",""timeout"",""xsrfCookieName"",""xsrfHeaderName"",""maxContentLength"",""validateStatus"",""status"",""common"",""Accept"",""getOwnPropertySymbols"",""classof"",""getIteratorMethod"",""normalizeComponent"",""scriptExports"",""render"",""staticRenderFns"",""functionalTemplate"",""injectStyles"",""scopeId"",""moduleIdentifier"",""shadowMode"",""hook"",""options"",""_compiled"",""functional"",""_scopeId"",""context"",""$vnode"",""ssrContext"",""parent"",""__VUE_SSR_CONTEXT__"",""_registeredComponents"",""add"",""_ssrRegister"",""$root"",""$options"",""shadowRoot"",""_injectStyles"",""originalRender"",""h"",""existing"",""beforeCreate"",""concat"",""d"",""__webpack_exports__"",""has"",""SRC"",""$toString"",""TO_STRING"",""TPL"",""split"",""inspectSource"",""val"",""safe"",""join"",""String"",""dPs"",""IE_PROTO"",""Empty"",""PROTOTYPE"",""createDict"",""iframeDocument"",""iframe"",""lt"",""gt"",""style"",""display"",""src"",""contentWindow"",""open"",""write"",""close"",""create"",""result"",""emptyObject"",""freeze"",""isUndef"",""v"",""isDef"",""isTrue"",""isFalse"",""isPrimitive"",""obj"",""_toString"",""isPlainObject"",""isRegExp"",""isValidArrayIndex"",""n"",""parseFloat"",""Math"",""floor"",""isFinite"",""isPromise"",""catch"",""isArray"",""toNumber"",""isNaN"",""makeMap"",""str"",""expectsLowerCase"",""map"",""list"",""isReservedAttribute"",""remove"",""item"",""index"",""indexOf"",""splice"",""hasOwn"",""cached"",""cache"",""hit"",""camelizeRE"",""camelize"",""_"",""c"",""toUpperCase"",""capitalize"",""charAt"",""slice"",""hyphenateRE"",""hyphenate"",""polyfillBind"",""boundFn"",""a"",""l"",""_length"",""nativeBind"",""bind"",""toArray"",""start"",""extend"",""to"",""_from"",""toObject"",""res"",""noop"",""b"",""no"",""identity"",""looseEqual"",""isObjectA"",""isObjectB"",""isArrayA"",""isArrayB"",""every"",""Date"",""getTime"",""keysA"",""keysB"",""looseIndexOf"",""once"",""called"",""SSR_ATTR"",""ASSET_TYPES"",""LIFECYCLE_HOOKS"",""optionMergeStrategies"",""silent"",""productionTip"",""devtools"",""performance"",""errorHandler"",""warnHandler"",""ignoredElements"",""keyCodes"",""isReservedTag"",""isReservedAttr"",""isUnknownElement"",""getTagNamespace"",""parsePlatformTagName"",""mustUseProp"",""async"",""_lifecycleHooks"",""unicodeRegExp"",""isReserved"",""charCodeAt"",""def"",""enumerable"",""defineProperty"",""writable"",""configurable"",""bailRE"",""RegExp"",""parsePath"",""path"",""test"",""segments"",""_isServer"",""hasProto"",""inBrowser"",""window"",""inWeex"",""WXEnvironment"",""platform"",""weexPlatform"",""UA"",""navigator"",""userAgent"",""isIE"",""isIE9"",""isEdge"",""isIOS"",""isFF"",""match"",""nativeWatch"",""watch"",""supportsPassive"",""opts"",""get"",""isServerRendering"",""env"",""VUE_ENV"",""__VUE_DEVTOOLS_GLOBAL_HOOK__"",""isNative"",""Ctor"",""_Set"",""hasSymbol"",""Symbol"",""Reflect"",""ownKeys"",""Set"",""warn"",""uid"",""Dep"",""subs"",""addSub"",""sub"",""removeSub"",""depend"",""target"",""addDep"",""notify"",""update"",""targetStack"",""pushTarget"",""popTarget"",""pop"",""VNode"",""tag"",""children"",""text"",""elm"",""componentOptions"",""asyncFactory"",""ns"",""fnContext"",""fnOptions"",""fnScopeId"",""componentInstance"",""raw"",""isStatic"",""isRootInsert"",""isComment"",""isCloned"",""isOnce"",""asyncMeta"",""isAsyncPlaceholder"",""prototypeAccessors"",""child"",""createEmptyVNode"",""node"",""createTextVNode"",""cloneVNode"",""vnode"",""cloned"",""arrayProto"",""arrayMethods"",""methodsToPatch"",""original"",""len"",""inserted"",""ob"",""__ob__"",""observeArray"",""dep"",""arrayKeys"",""getOwnPropertyNames"",""shouldObserve"",""toggleObserving"",""Observer"",""vmCount"",""protoAugment"",""copyAugment"",""walk"",""__proto__"",""observe"",""asRootData"",""isExtensible"",""_isVue"",""defineReactive$$1"",""customSetter"",""shallow"",""property"",""getOwnPropertyDescriptor"",""getter"",""setter"",""childOb"",""dependArray"",""newVal"",""max"",""del"",""items"",""strats"",""mergeData"",""from"",""toVal"",""fromVal"",""mergeDataOrFn"",""parentVal"",""childVal"",""vm"",""instanceData"",""defaultData"",""mergeHook"",""dedupeHooks"",""hooks"",""mergeAssets"",""type"",""key$1"",""props"",""inject"",""computed"",""provide"",""defaultStrat"",""normalizeProps"",""normalizeInject"",""normalized"",""normalizeDirectives"",""dirs"",""directives"",""def$$1"",""mergeOptions"",""_base"",""extends"",""mixins"",""mergeField"",""strat"",""resolveAsset"",""warnMissing"",""assets"",""camelizedId"",""PascalCaseId"",""validateProp"",""propOptions"",""propsData"",""prop"",""absent"",""booleanIndex"",""getTypeIndex"",""Boolean"",""stringIndex"",""getPropDefaultValue"",""prevShouldObserve"",""default"",""_props"",""getType"",""isSameType"",""expectedTypes"",""handleError"",""err"",""info"",""cur"",""$parent"",""errorCaptured"",""capture"",""globalHandleError"",""invokeWithErrorHandling"",""handler"",""_handled"",""logError"",""console"",""error"",""timerFunc"",""isUsingMicroTask"",""callbacks"",""pending"",""flushCallbacks"",""copies"",""p"",""MutationObserver"",""observer"",""textNode"",""createTextNode"",""characterData"",""cb"",""_resolve"",""seenObjects"",""traverse"",""_traverse"",""seen"",""isA"",""isFrozen"",""depId"",""normalizeEvent"",""passive"",""once$$1"",""createFnInvoker"",""fns"",""invoker"",""arguments$1"",""updateListeners"",""on"",""oldOn"",""remove$$1"",""createOnceHandler"",""old"",""mergeVNodeHook"",""hookKey"",""oldHook"",""wrappedHook"",""merged"",""extractPropsFromVNodeData"",""attrs"",""altKey"",""checkProp"",""hash"",""preserve"",""simpleNormalizeChildren"",""normalizeChildren"",""normalizeArrayChildren"",""isTextNode"",""nestedIndex"",""lastIndex"",""last"",""_isVList"",""initProvide"",""_provided"",""initInjections"",""resolveInject"",""provideKey"",""source"",""provideDefault"",""resolveSlots"",""slots"",""slot"",""name$1"",""isWhitespace"",""normalizeScopedSlots"",""normalSlots"",""prevSlots"",""hasNormalSlots"",""isStable"",""$stable"",""$key"",""_normalized"",""$hasNormal"",""normalizeScopedSlot"",""key$2"",""proxyNormalSlot"",""proxy"",""renderList"",""done"",""renderSlot"",""fallback"",""bindObject"",""nodes"",""scopedSlotFn"",""$scopedSlots"",""$slots"",""$createElement"",""resolveFilter"",""isKeyNotMatch"",""expect"",""actual"",""checkKeyCodes"",""eventKeyCode"",""builtInKeyCode"",""eventKeyName"",""builtInKeyName"",""mappedKeyCode"",""bindObjectProps"",""asProp"",""isSync"",""loop"",""domProps"",""camelizedKey"",""hyphenatedKey"",""$event"",""renderStatic"",""isInFor"",""_staticTrees"",""tree"",""_renderProxy"",""markStatic"",""markOnce"",""markStaticNode"",""bindObjectListeners"",""ours"",""resolveScopedSlots"",""hasDynamicKeys"",""contentHashKey"",""bindDynamicKeys"",""baseObj"",""prependModifier"",""symbol"",""installRenderHelpers"",""_o"",""_n"",""_s"",""_l"",""_t"",""_q"",""_i"",""_m"",""_f"",""_k"",""_b"",""_v"",""_e"",""_u"",""_g"",""_d"",""_p"",""FunctionalRenderContext"",""contextVm"",""this$1"",""_original"",""isCompiled"",""needNormalization"",""listeners"",""injections"",""scopedSlots"",""_c"",""createFunctionalComponent"",""mergeProps"",""renderContext"",""cloneAndMarkFunctionalResult"",""vnodes"",""clone"",""componentVNodeHooks"",""init"",""hydrating"",""_isDestroyed"",""keepAlive"",""mountedNode"",""prepatch"",""createComponentInstanceForVnode"",""activeInstance"",""$mount"",""oldVnode"",""updateChildComponent"",""insert"",""_isMounted"",""callHook"",""queueActivatedComponent"",""activateChildComponent"",""destroy"",""deactivateChildComponent"",""$destroy"",""hooksToMerge"",""createComponent"",""baseCtor"",""cid"",""resolveAsyncComponent"",""createAsyncPlaceholder"",""resolveConstructorOptions"",""model"",""transformModel"",""nativeOn"",""abstract"",""installComponentHooks"",""_isComponent"",""_parentVnode"",""inlineTemplate"",""toMerge"",""_merged"",""mergeHook$1"",""f1"",""f2"",""SIMPLE_NORMALIZE"",""ALWAYS_NORMALIZE"",""normalizationType"",""alwaysNormalize"",""_createElement"",""pre"",""applyNS"",""registerDeepBindings"",""force"",""class"",""initRender"",""_vnode"",""parentVnode"",""_renderChildren"",""parentData"",""_parentListeners"",""currentRenderingInstance"",""renderMixin"",""Vue"",""$nextTick"",""_render"",""ref"",""ensureCtor"",""comp"",""base"",""__esModule"",""toStringTag"",""factory"",""errorComp"",""resolved"",""owner"",""owners"",""loading"",""loadingComp"",""sync"",""timerLoading"",""timerTimeout"",""$on"",""forceRender"",""renderCompleted"",""$forceUpdate"",""clearTimeout"",""reject"",""reason"",""component"",""delay"",""getFirstComponentChild"",""initEvents"",""_events"",""_hasHookEvent"",""updateComponentListeners"",""remove$1"",""$off"",""_target"",""onceHandler"",""oldListeners"",""eventsMixin"",""hookRE"",""$once"",""i$1"",""cbs"",""$emit"",""setActiveInstance"",""prevActiveInstance"",""initLifecycle"",""$children"",""$refs"",""_watcher"",""_inactive"",""_directInactive"",""_isBeingDestroyed"",""lifecycleMixin"",""_update"",""prevEl"",""$el"",""prevVnode"",""restoreActiveInstance"",""__patch__"",""__vue__"",""teardown"",""_watchers"",""_data"",""mountComponent"",""el"",""updateComponent"",""Watcher"",""before"",""renderChildren"",""newScopedSlots"",""oldScopedSlots"",""hasDynamicScopedSlot"",""needsForceUpdate"",""$attrs"",""$listeners"",""propKeys"",""_propKeys"",""isInInactiveTree"",""direct"",""handlers"",""j"",""activatedChildren"",""waiting"",""flushing"",""resetSchedulerState"",""currentFlushTimestamp"",""getNow"",""createEvent"",""timeStamp"",""flushSchedulerQueue"",""watcher"",""sort"",""activatedQueue"",""updatedQueue"",""callActivatedHooks"",""callUpdatedHooks"",""emit"",""queueWatcher"",""uid$2"",""expOrFn"",""isRenderWatcher"",""deep"",""user"",""lazy"",""active"",""dirty"",""deps"",""newDeps"",""depIds"",""newDepIds"",""expression"",""cleanupDeps"",""tmp"",""oldValue"",""evaluate"",""sharedPropertyDefinition"",""sourceKey"",""initState"",""initProps"",""initMethods"",""initData"",""initComputed"",""initWatch"",""propsOptions"",""isRoot"",""getData"",""computedWatcherOptions"",""watchers"",""_computedWatchers"",""isSSR"",""userDef"",""defineComputed"",""shouldCache"",""createComputedGetter"",""createGetterInvoker"",""createWatcher"",""$watch"",""stateMixin"",""dataDef"",""propsDef"",""$set"",""$delete"",""immediate"",""uid$3"",""initMixin"",""_init"",""_uid"",""initInternalComponent"",""constructor"",""_self"",""vnodeComponentOptions"",""_componentTag"",""super"",""superOptions"",""cachedSuperOptions"",""modifiedOptions"",""resolveModifiedOptions"",""extendOptions"",""components"",""modified"",""latest"",""sealed"",""sealedOptions"",""initUse"",""use"",""plugin"",""installedPlugins"",""_installedPlugins"",""install"",""initMixin$1"",""mixin"",""initExtend"",""Super"",""SuperId"",""cachedCtors"",""_Ctor"",""Sub"",""initProps$1"",""initComputed$1"",""Comp"",""initAssetRegisters"",""definition"",""getComponentName"",""matches"",""pattern"",""pruneCache"",""keepAliveInstance"",""filter"",""cachedNode"",""pruneCacheEntry"",""current"",""cached$$1"",""patternTypes"",""KeepAlive"",""include"",""exclude"",""Number"",""created"",""destroyed"",""mounted"",""ref$1"",""parseInt"",""builtInComponents"",""initGlobalAPI"",""configDef"",""util"",""defineReactive"",""delete"",""observable"",""version"",""acceptValue"",""attr"",""isEnumeratedAttr"",""isValidContentEditableValue"",""convertEnumeratedValue"",""isFalsyAttrValue"",""isBooleanAttr"",""xlinkNS"",""isXlink"",""getXlinkProp"",""genClassForVnode"",""parentNode"",""childNode"",""mergeClassData"",""renderClass"",""staticClass"",""dynamicClass"",""stringifyClass"",""stringifyArray"",""stringifyObject"",""stringified"",""namespaceMap"",""svg"",""math"",""isHTMLTag"",""isSVG"",""unknownElementCache"",""HTMLUnknownElement"",""HTMLElement"",""isTextInputType"",""query"",""selected"",""querySelector"",""createElement$1"",""tagName"",""multiple"",""setAttribute"",""createElementNS"",""namespace"",""createComment"",""insertBefore"",""newNode"",""referenceNode"",""nextSibling"",""setTextContent"",""textContent"",""setStyleScope"",""nodeOps"",""registerRef"",""isRemoval"",""refs"",""refInFor"",""emptyNode"",""sameVnode"",""sameInputType"",""typeA"",""typeB"",""createKeyToOldIdx"",""beginIdx"",""endIdx"",""createPatchFunction"",""backend"",""modules"",""emptyNodeAt"",""createRmCb"",""childElm"",""removeNode"",""createElm"",""insertedVnodeQueue"",""parentElm"",""refElm"",""nested"",""ownerArray"",""setScope"",""createChildren"",""invokeCreateHooks"",""isReactivated"",""initComponent"",""reactivateComponent"",""pendingInsert"",""isPatchable"",""innerNode"",""transition"",""activate"",""ref$$1"",""ancestor"",""addVnodes"",""startIdx"",""invokeDestroyHook"",""removeVnodes"",""ch"",""removeAndInvokeRemoveHook"",""rm"",""updateChildren"",""oldCh"",""newCh"",""removeOnly"",""oldKeyToIdx"",""idxInOld"",""vnodeToMove"",""oldStartIdx"",""newStartIdx"",""oldEndIdx"",""oldStartVnode"",""oldEndVnode"",""newEndIdx"",""newStartVnode"",""newEndVnode"",""canMove"",""patchVnode"",""findIdxInOld"",""end"",""hydrate"",""postpatch"",""invokeInsertHook"",""initial"",""isRenderedModule"",""inVPre"",""hasChildNodes"",""innerHTML"",""childrenMatch"",""firstChild"",""fullInvoke"",""isInitialPatch"",""isRealElement"",""nodeType"",""hasAttribute"",""removeAttribute"",""oldElm"",""_leaveCb"",""patchable"",""i$2"",""updateDirectives"",""oldDir"",""dir"",""isCreate"",""isDestroy"",""oldDirs"",""normalizeDirectives$1"",""newDirs"",""dirsWithInsert"",""dirsWithPostpatch"",""oldArg"",""arg"",""callHook$1"",""componentUpdated"",""callInsert"",""emptyModifiers"",""modifiers"",""getRawDirName"",""rawName"",""baseModules"",""updateAttrs"",""inheritAttrs"",""oldAttrs"",""setAttr"",""removeAttributeNS"",""baseSetAttr"",""setAttributeNS"",""__ieph"",""blocker"",""stopImmediatePropagation"",""removeEventListener"",""updateClass"",""oldData"",""cls"",""transitionClass"",""_transitionClasses"",""_prevClass"",""target$1"",""klass"",""RANGE_TOKEN"",""CHECKBOX_RADIO_TOKEN"",""normalizeEvents"",""change"",""createOnceHandler$1"",""remove$2"",""useMicrotaskFix"",""add$1"",""attachedTimestamp"",""_wrapper"",""currentTarget"",""ownerDocument"",""updateDOMListeners"",""svgContainer"",""events"",""updateDOMProps"",""oldProps"",""childNodes"",""_value"",""strCur"",""shouldUpdateValue"",""checkVal"",""composing"",""isNotInFocusAndDirty"",""isDirtyWithModifiers"",""notInFocus"",""activeElement"",""_vModifiers"",""number"",""trim"",""parseStyleText"",""cssText"",""listDelimiter"",""propertyDelimiter"",""normalizeStyleData"",""normalizeStyleBinding"",""staticStyle"",""bindingStyle"",""getStyle"",""checkChild"",""styleData"",""emptyStyle"",""cssVarRE"",""importantRE"",""setProp"",""setProperty"",""normalizedName"",""normalize"",""vendorNames"",""capName"",""updateStyle"",""oldStaticStyle"",""oldStyleBinding"",""normalizedStyle"",""oldStyle"",""newStyle"",""whitespaceRE"",""addClass"",""classList"",""getAttribute"",""removeClass"",""tar"",""resolveTransition"",""css"",""autoCssTransition"",""enterClass"",""enterToClass"",""enterActiveClass"",""leaveClass"",""leaveToClass"",""leaveActiveClass"",""hasTransition"",""TRANSITION"",""ANIMATION"",""transitionProp"",""transitionEndEvent"",""animationProp"",""animationEndEvent"",""ontransitionend"",""onwebkittransitionend"",""onanimationend"",""onwebkitanimationend"",""raf"",""requestAnimationFrame"",""nextFrame"",""addTransitionClass"",""transitionClasses"",""removeTransitionClass"",""whenTransitionEnds"",""expectedType"",""getTransitionInfo"",""propCount"",""ended"",""onEnd"",""transformRE"",""styles"",""getComputedStyle"",""transitionDelays"",""transitionDurations"",""transitionTimeout"",""getTimeout"",""animationDelays"",""animationDurations"",""animationTimeout"",""hasTransform"",""delays"",""durations"",""toMs"",""s"",""enter"",""toggleDisplay"",""cancelled"",""_enterCb"",""appearClass"",""appearToClass"",""appearActiveClass"",""beforeEnter"",""afterEnter"",""enterCancelled"",""beforeAppear"",""appear"",""afterAppear"",""appearCancelled"",""duration"",""transitionNode"",""isAppear"",""startClass"",""activeClass"",""toClass"",""beforeEnterHook"",""enterHook"",""afterEnterHook"",""enterCancelledHook"",""explicitEnterDuration"",""expectsCSS"",""userWantsControl"",""getHookArgumentsLength"",""show"",""pendingNode"",""_pending"",""isValidDuration"",""leave"",""beforeLeave"",""afterLeave"",""leaveCancelled"",""delayLeave"",""explicitLeaveDuration"",""performLeave"",""invokerFns"",""_enter"",""platformModules"",""patch"",""vmodel"",""trigger"",""directive"",""binding"",""_vOptions"",""setSelected"",""getValue"",""onCompositionStart"",""onCompositionEnd"",""prevOptions"",""curOptions"",""some"",""o"",""needReset"",""hasNoMatchingOption"",""actuallySetSelected"",""isMultiple"",""option"",""selectedIndex"",""initEvent"",""dispatchEvent"",""locateNode"",""transition$$1"",""originalDisplay"",""__vOriginalDisplay"",""unbind"",""platformDirectives"",""transitionProps"",""mode"",""getRealChild"",""compOptions"",""extractTransitionData"",""placeholder"",""rawChild"",""hasParentTransition"",""isSameChild"",""oldChild"",""isNotTextNode"",""isVShowDirective"",""Transition"",""_leaving"",""oldRawChild"",""delayedLeave"",""moveClass"",""TransitionGroup"",""beforeMount"",""kept"",""prevChildren"",""rawChildren"",""transitionData"",""removed"",""c$1"",""pos"",""getBoundingClientRect"",""updated"",""hasMove"",""callPendingCbs"",""recordPosition"",""applyTranslation"",""_reflow"",""body"",""offsetHeight"",""moved"",""transform"",""WebkitTransform"",""transitionDuration"",""_moveCb"",""propertyName"",""_hasMove"",""cloneNode"",""newPos"",""oldPos"",""dx"",""left"",""dy"",""top"",""platformComponents"",""store"",""USE_SYMBOL"",""$exports"",""enhanceError"",""message"",""code"",""Error"",""__CANCEL__"",""encode"",""encodeURIComponent"",""serializedParams"",""parts"",""isDate"",""toISOString"",""hashmarkIndex"",""that"",""un"",""createDesc"",""object"",""ArrayProto"",""isAxiosError"",""toJSON"",""description"",""fileName"",""lineNumber"",""columnNumber"",""stack"",""ObjectProto"",""isStandardBrowserEnv"",""originURL"",""msie"",""urlParsingNode"",""resolveURL"",""href"",""protocol"",""host"",""search"",""hostname"",""pathname"",""location"",""requestURL"",""parsed"",""isString"",""descriptor"",""ceil"",""bitmap"",""createError"",""isArrayIter"",""toLength"",""getIterFn"",""BREAK"",""RETURN"",""iterable"",""step"",""iterFn"",""TypeError"",""config1"",""config2"",""deepMerge"",""defined"",""transformData"",""isCancel"",""isAbsoluteURL"",""combineURLs"",""throwIfCancellationRequested"",""cancelToken"",""throwIfRequested"",""baseURL"",""propertyIsEnumerable"",""Internal"",""newGenericPromiseCapability"",""OwnPromiseCapability"",""Wrapper"",""aFunction"",""anInstance"",""forOf"",""task"",""microtask"",""newPromiseCapabilityModule"",""perform"",""PROMISE"",""versions"",""v8"",""$Promise"",""isNode"",""empty"",""newPromiseCapability"",""USE_NATIVE"",""FakePromise"",""exec"",""PromiseRejectionEvent"",""isThenable"",""isReject"",""ok"",""reaction"",""exited"",""fail"",""domain"",""_h"",""onHandleUnhandled"",""exit"",""onUnhandled"",""unhandled"",""isUnhandled"",""onunhandledrejection"",""_a"",""onrejectionhandled"",""$reject"",""_w"",""$resolve"",""wrapper"",""executor"",""onFulfilled"",""onRejected"",""G"",""W"",""S"",""r"",""capability"",""$$reject"",""iter"",""all"",""remaining"",""$index"",""alreadyCalled"",""race"",""SHARED"",""copyright"",""own"",""out"",""exp"",""IS_FORCED"",""IS_GLOBAL"",""IS_STATIC"",""IS_PROTO"",""IS_BIND"",""expProto"",""U"",""SAFE_CLOSING"",""riter"",""skipClosing"",""shared"",""IObject"",""valueOf"",""DESCRIPTORS"",""gOPS"",""pIE"",""$assign"",""assign"",""A"",""K"",""k"",""aLen"",""getSymbols"",""isEnum"",""self"",""__g"",""toInteger"",""min"",""SPECIES"",""KEY"",""Cancel"",""expires"",""secure"",""cookie"",""isNumber"",""toGMTString"",""read"",""decodeURIComponent"",""stat"",""macrotask"",""WebKitMutationObserver"",""head"",""flush"",""standalone"",""toggle"",""__e"",""IE8_DOM_DEFINE"",""toPrimitive"",""Attributes"",""CancelToken"",""resolvePromise"",""token"",""cancel"",""UNSCOPABLES"",""PromiseCapability"",""$$resolve"",""settle"",""parseHeaders"",""isURLSameOrigin"",""requestData"",""requestHeaders"",""auth"",""username"",""password"",""Authorization"",""btoa"",""onreadystatechange"",""readyState"",""responseURL"",""responseHeaders"",""getAllResponseHeaders"",""responseData"",""responseType"",""responseText"",""statusText"",""onabort"",""onerror"",""ontimeout"",""cookies"",""xsrfValue"",""withCredentials"",""setRequestHeader"",""onDownloadProgress"",""onUploadProgress"",""upload"",""abort"",""send"",""promiseCapability"",""ignoreDuplicateOf"",""line"",""substr"",""toIObject"",""toAbsoluteIndex"",""IS_INCLUDES"",""$this"",""fromIndex"",""FormData"",""ArrayBuffer"",""isView"",""pipe"",""URLSearchParams"",""product"",""assignValue"",""g"",""px"",""random"",""addToUnscopables"",""iterated"",""Arguments"",""arrayIndexOf"",""names"",""createInstance"",""defaultConfig"",""instance"",""axios"",""promises"",""spread"",""relativeURL"",""D"",""cachedSetTimeout"",""cachedClearTimeout"",""defaultSetTimout"",""defaultClearTimeout"",""runTimeout"",""fun"",""runClearTimeout"",""marker"",""currentQueue"",""draining"",""queueIndex"",""cleanUpNextTick"",""drainQueue"",""Item"",""array"",""title"",""browser"",""argv"",""addListener"",""off"",""removeListener"",""removeAllListeners"",""prependListener"",""prependOnceListener"",""cwd"",""chdir"",""umask"",""forbiddenField"",""eject"",""documentElement""],""mappings"":""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"",""file"":""js/chunk-vendors.f73a15c8.js"",""sourcesContent"":[""'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n"",""// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n"",""'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = arguments[1] || {};\n    config.url = arguments[0];\n  } else {\n    config = config || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n  config.method = config.method ? config.method.toLowerCase() : 'get';\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n"",""// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n"",""'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n"",""var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n"",""var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n"",""'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n"",""// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n"",""var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n"",""// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n"",""'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  // Only Node.JS has a process variable that is of [[Class]] process\n  if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  } else if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n"",""exports.f = Object.getOwnPropertySymbols;\n"",""var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n"",""/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n"",""var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n"",""// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n"",""/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n/*  */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n  return v === undefined || v === null\n}\n\nfunction isDef (v) {\n  return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n  return v === true\n}\n\nfunction isFalse (v) {\n  return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n  return (\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    // $flow-disable-line\n    typeof value === 'symbol' ||\n    typeof value === 'boolean'\n  )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n  return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n  return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n  return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n  var n = parseFloat(String(val));\n  return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n  return (\n    isDef(val) &&\n    typeof val.then === 'function' &&\n    typeof val.catch === 'function'\n  )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n  return val == null\n    ? ''\n    : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n      ? JSON.stringify(val, null, 2)\n      : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n  var n = parseFloat(val);\n  return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n  str,\n  expectsLowerCase\n) {\n  var map = Object.create(null);\n  var list = str.split(',');\n  for (var i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase\n    ? function (val) { return map[val.toLowerCase()]; }\n    : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item);\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache = Object.create(null);\n  return (function cachedFn (str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str))\n  })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n  return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n  function boundFn (a) {\n    var l = arguments.length;\n    return l\n      ? l > 1\n        ? fn.apply(ctx, arguments)\n        : fn.call(ctx, a)\n      : fn.call(ctx)\n  }\n\n  boundFn._length = fn.length;\n  return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n  return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n  ? nativeBind\n  : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n  start = start || 0;\n  var i = list.length - start;\n  var ret = new Array(i);\n  while (i--) {\n    ret[i] = list[i + start];\n  }\n  return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key];\n  }\n  return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n  var res = {};\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i]);\n    }\n  }\n  return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n  if (a === b) { return true }\n  var isObjectA = isObject(a);\n  var isObjectB = isObject(b);\n  if (isObjectA && isObjectB) {\n    try {\n      var isArrayA = Array.isArray(a);\n      var isArrayB = Array.isArray(b);\n      if (isArrayA && isArrayB) {\n        return a.length === b.length && a.every(function (e, i) {\n          return looseEqual(e, b[i])\n        })\n      } else if (a instanceof Date && b instanceof Date) {\n        return a.getTime() === b.getTime()\n      } else if (!isArrayA && !isArrayB) {\n        var keysA = Object.keys(a);\n        var keysB = Object.keys(b);\n        return keysA.length === keysB.length && keysA.every(function (key) {\n          return looseEqual(a[key], b[key])\n        })\n      } else {\n        /* istanbul ignore next */\n        return false\n      }\n    } catch (e) {\n      /* istanbul ignore next */\n      return false\n    }\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b)\n  } else {\n    return false\n  }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n  for (var i = 0; i < arr.length; i++) {\n    if (looseEqual(arr[i], val)) { return i }\n  }\n  return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n  var called = false;\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(this, arguments);\n    }\n  }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n  'component',\n  'directive',\n  'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n  'beforeCreate',\n  'created',\n  'beforeMount',\n  'mounted',\n  'beforeUpdate',\n  'updated',\n  'beforeDestroy',\n  'destroyed',\n  'activated',\n  'deactivated',\n  'errorCaptured',\n  'serverPrefetch'\n];\n\n/*  */\n\n\n\nvar config = ({\n  /**\n   * Option merge strategies (used in core/util/options)\n   */\n  // $flow-disable-line\n  optionMergeStrategies: Object.create(null),\n\n  /**\n   * Whether to suppress warnings.\n   */\n  silent: false,\n\n  /**\n   * Show production mode tip message on boot?\n   */\n  productionTip: process.env.NODE_ENV !== 'production',\n\n  /**\n   * Whether to enable devtools\n   */\n  devtools: process.env.NODE_ENV !== 'production',\n\n  /**\n   * Whether to record perf\n   */\n  performance: false,\n\n  /**\n   * Error handler for watcher errors\n   */\n  errorHandler: null,\n\n  /**\n   * Warn handler for watcher warns\n   */\n  warnHandler: null,\n\n  /**\n   * Ignore certain custom elements\n   */\n  ignoredElements: [],\n\n  /**\n   * Custom user key aliases for v-on\n   */\n  // $flow-disable-line\n  keyCodes: Object.create(null),\n\n  /**\n   * Check if a tag is reserved so that it cannot be registered as a\n   * component. This is platform-dependent and may be overwritten.\n   */\n  isReservedTag: no,\n\n  /**\n   * Check if an attribute is reserved so that it cannot be used as a component\n   * prop. This is platform-dependent and may be overwritten.\n   */\n  isReservedAttr: no,\n\n  /**\n   * Check if a tag is an unknown element.\n   * Platform-dependent.\n   */\n  isUnknownElement: no,\n\n  /**\n   * Get the namespace of an element\n   */\n  getTagNamespace: noop,\n\n  /**\n   * Parse the real tag name for the specific platform.\n   */\n  parsePlatformTagName: identity,\n\n  /**\n   * Check if an attribute must be bound using property, e.g. value\n   * Platform-dependent.\n   */\n  mustUseProp: no,\n\n  /**\n   * Perform updates asynchronously. Intended to be used by Vue Test Utils\n   * This will significantly reduce performance if set to false.\n   */\n  async: true,\n\n  /**\n   * Exposed for legacy reasons\n   */\n  _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/*  */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n  var c = (str + '').charCodeAt(0);\n  return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n  Object.defineProperty(obj, key, {\n    value: val,\n    enumerable: !!enumerable,\n    writable: true,\n    configurable: true\n  });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\""[^\"" + (unicodeRegExp.source) + \"".$_\\\\d]\""));\nfunction parsePath (path) {\n  if (bailRE.test(path)) {\n    return\n  }\n  var segments = path.split('.');\n  return function (obj) {\n    for (var i = 0; i < segments.length; i++) {\n      if (!obj) { return }\n      obj = obj[segments[i]];\n    }\n    return obj\n  }\n}\n\n/*  */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \""watch\"" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n  try {\n    var opts = {};\n    Object.defineProperty(opts, 'passive', ({\n      get: function get () {\n        /* istanbul ignore next */\n        supportsPassive = true;\n      }\n    })); // https://github.com/facebook/flow/issues/285\n    window.addEventListener('test-passive', null, opts);\n  } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n  if (_isServer === undefined) {\n    /* istanbul ignore if */\n    if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n      // detect presence of vue-server-renderer and avoid\n      // Webpack shimming the process\n      _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n    } else {\n      _isServer = false;\n    }\n  }\n  return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n  typeof Symbol !== 'undefined' && isNative(Symbol) &&\n  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n  // use native Set when available.\n  _Set = Set;\n} else {\n  // a non-standard Set polyfill that only works with primitive keys.\n  _Set = /*@__PURE__*/(function () {\n    function Set () {\n      this.set = Object.create(null);\n    }\n    Set.prototype.has = function has (key) {\n      return this.set[key] === true\n    };\n    Set.prototype.add = function add (key) {\n      this.set[key] = true;\n    };\n    Set.prototype.clear = function clear () {\n      this.set = Object.create(null);\n    };\n\n    return Set;\n  }());\n}\n\n/*  */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n  var hasConsole = typeof console !== 'undefined';\n  var classifyRE = /(?:^|[-_])(\\w)/g;\n  var classify = function (str) { return str\n    .replace(classifyRE, function (c) { return c.toUpperCase(); })\n    .replace(/[-_]/g, ''); };\n\n  warn = function (msg, vm) {\n    var trace = vm ? generateComponentTrace(vm) : '';\n\n    if (config.warnHandler) {\n      config.warnHandler.call(null, msg, vm, trace);\n    } else if (hasConsole && (!config.silent)) {\n      console.error((\""[Vue warn]: \"" + msg + trace));\n    }\n  };\n\n  tip = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.warn(\""[Vue tip]: \"" + msg + (\n        vm ? generateComponentTrace(vm) : ''\n      ));\n    }\n  };\n\n  formatComponentName = function (vm, includeFile) {\n    if (vm.$root === vm) {\n      return '<Root>'\n    }\n    var options = typeof vm === 'function' && vm.cid != null\n      ? vm.options\n      : vm._isVue\n        ? vm.$options || vm.constructor.options\n        : vm;\n    var name = options.name || options._componentTag;\n    var file = options.__file;\n    if (!name && file) {\n      var match = file.match(/([^/\\\\]+)\\.vue$/);\n      name = match && match[1];\n    }\n\n    return (\n      (name ? (\""<\"" + (classify(name)) + \"">\"") : \""<Anonymous>\"") +\n      (file && includeFile !== false ? (\"" at \"" + file) : '')\n    )\n  };\n\n  var repeat = function (str, n) {\n    var res = '';\n    while (n) {\n      if (n % 2 === 1) { res += str; }\n      if (n > 1) { str += str; }\n      n >>= 1;\n    }\n    return res\n  };\n\n  generateComponentTrace = function (vm) {\n    if (vm._isVue && vm.$parent) {\n      var tree = [];\n      var currentRecursiveSequence = 0;\n      while (vm) {\n        if (tree.length > 0) {\n          var last = tree[tree.length - 1];\n          if (last.constructor === vm.constructor) {\n            currentRecursiveSequence++;\n            vm = vm.$parent;\n            continue\n          } else if (currentRecursiveSequence > 0) {\n            tree[tree.length - 1] = [last, currentRecursiveSequence];\n            currentRecursiveSequence = 0;\n          }\n        }\n        tree.push(vm);\n        vm = vm.$parent;\n      }\n      return '\\n\\nfound in\\n\\n' + tree\n        .map(function (vm, i) { return (\""\"" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n            ? ((formatComponentName(vm[0])) + \""... (\"" + (vm[1]) + \"" recursive calls)\"")\n            : formatComponentName(vm))); })\n        .join('\\n')\n    } else {\n      return (\""\\n\\n(found in \"" + (formatComponentName(vm)) + \"")\"")\n    }\n  };\n}\n\n/*  */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n  this.id = uid++;\n  this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n  this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n  remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n  if (Dep.target) {\n    Dep.target.addDep(this);\n  }\n};\n\nDep.prototype.notify = function notify () {\n  // stabilize the subscriber list first\n  var subs = this.subs.slice();\n  if (process.env.NODE_ENV !== 'production' && !config.async) {\n    // subs aren't sorted in scheduler if not running async\n    // we need to sort them now to make sure they fire in correct\n    // order\n    subs.sort(function (a, b) { return a.id - b.id; });\n  }\n  for (var i = 0, l = subs.length; i < l; i++) {\n    subs[i].update();\n  }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n  targetStack.push(target);\n  Dep.target = target;\n}\n\nfunction popTarget () {\n  targetStack.pop();\n  Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*  */\n\nvar VNode = function VNode (\n  tag,\n  data,\n  children,\n  text,\n  elm,\n  context,\n  componentOptions,\n  asyncFactory\n) {\n  this.tag = tag;\n  this.data = data;\n  this.children = children;\n  this.text = text;\n  this.elm = elm;\n  this.ns = undefined;\n  this.context = context;\n  this.fnContext = undefined;\n  this.fnOptions = undefined;\n  this.fnScopeId = undefined;\n  this.key = data && data.key;\n  this.componentOptions = componentOptions;\n  this.componentInstance = undefined;\n  this.parent = undefined;\n  this.raw = false;\n  this.isStatic = false;\n  this.isRootInsert = true;\n  this.isComment = false;\n  this.isCloned = false;\n  this.isOnce = false;\n  this.asyncFactory = asyncFactory;\n  this.asyncMeta = undefined;\n  this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n  return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n  if ( text === void 0 ) text = '';\n\n  var node = new VNode();\n  node.text = text;\n  node.isComment = true;\n  return node\n};\n\nfunction createTextVNode (val) {\n  return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n  var cloned = new VNode(\n    vnode.tag,\n    vnode.data,\n    // #7975\n    // clone children array to avoid mutating original in case of cloning\n    // a child.\n    vnode.children && vnode.children.slice(),\n    vnode.text,\n    vnode.elm,\n    vnode.context,\n    vnode.componentOptions,\n    vnode.asyncFactory\n  );\n  cloned.ns = vnode.ns;\n  cloned.isStatic = vnode.isStatic;\n  cloned.key = vnode.key;\n  cloned.isComment = vnode.isComment;\n  cloned.fnContext = vnode.fnContext;\n  cloned.fnOptions = vnode.fnOptions;\n  cloned.fnScopeId = vnode.fnScopeId;\n  cloned.asyncMeta = vnode.asyncMeta;\n  cloned.isCloned = true;\n  return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n  'push',\n  'pop',\n  'shift',\n  'unshift',\n  'splice',\n  'sort',\n  'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n  // cache original method\n  var original = arrayProto[method];\n  def(arrayMethods, method, function mutator () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var result = original.apply(this, args);\n    var ob = this.__ob__;\n    var inserted;\n    switch (method) {\n      case 'push':\n      case 'unshift':\n        inserted = args;\n        break\n      case 'splice':\n        inserted = args.slice(2);\n        break\n    }\n    if (inserted) { ob.observeArray(inserted); }\n    // notify change\n    ob.dep.notify();\n    return result\n  });\n});\n\n/*  */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n  shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n  this.value = value;\n  this.dep = new Dep();\n  this.vmCount = 0;\n  def(value, '__ob__', this);\n  if (Array.isArray(value)) {\n    if (hasProto) {\n      protoAugment(value, arrayMethods);\n    } else {\n      copyAugment(value, arrayMethods, arrayKeys);\n    }\n    this.observeArray(value);\n  } else {\n    this.walk(value);\n  }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n  var keys = Object.keys(obj);\n  for (var i = 0; i < keys.length; i++) {\n    defineReactive$$1(obj, keys[i]);\n  }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n  for (var i = 0, l = items.length; i < l; i++) {\n    observe(items[i]);\n  }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n  /* eslint-disable no-proto */\n  target.__proto__ = src;\n  /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n  for (var i = 0, l = keys.length; i < l; i++) {\n    var key = keys[i];\n    def(target, key, src[key]);\n  }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n  if (!isObject(value) || value instanceof VNode) {\n    return\n  }\n  var ob;\n  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n    ob = value.__ob__;\n  } else if (\n    shouldObserve &&\n    !isServerRendering() &&\n    (Array.isArray(value) || isPlainObject(value)) &&\n    Object.isExtensible(value) &&\n    !value._isVue\n  ) {\n    ob = new Observer(value);\n  }\n  if (asRootData && ob) {\n    ob.vmCount++;\n  }\n  return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n  obj,\n  key,\n  val,\n  customSetter,\n  shallow\n) {\n  var dep = new Dep();\n\n  var property = Object.getOwnPropertyDescriptor(obj, key);\n  if (property && property.configurable === false) {\n    return\n  }\n\n  // cater for pre-defined getter/setters\n  var getter = property && property.get;\n  var setter = property && property.set;\n  if ((!getter || setter) && arguments.length === 2) {\n    val = obj[key];\n  }\n\n  var childOb = !shallow && observe(val);\n  Object.defineProperty(obj, key, {\n    enumerable: true,\n    configurable: true,\n    get: function reactiveGetter () {\n      var value = getter ? getter.call(obj) : val;\n      if (Dep.target) {\n        dep.depend();\n        if (childOb) {\n          childOb.dep.depend();\n          if (Array.isArray(value)) {\n            dependArray(value);\n          }\n        }\n      }\n      return value\n    },\n    set: function reactiveSetter (newVal) {\n      var value = getter ? getter.call(obj) : val;\n      /* eslint-disable no-self-compare */\n      if (newVal === value || (newVal !== newVal && value !== value)) {\n        return\n      }\n      /* eslint-enable no-self-compare */\n      if (process.env.NODE_ENV !== 'production' && customSetter) {\n        customSetter();\n      }\n      // #7981: for accessor properties without setter\n      if (getter && !setter) { return }\n      if (setter) {\n        setter.call(obj, newVal);\n      } else {\n        val = newVal;\n      }\n      childOb = !shallow && observe(newVal);\n      dep.notify();\n    }\n  });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n  if (process.env.NODE_ENV !== 'production' &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\""Cannot set reactive property on undefined, null, or primitive value: \"" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.length = Math.max(target.length, key);\n    target.splice(key, 1, val);\n    return val\n  }\n  if (key in target && !(key in Object.prototype)) {\n    target[key] = val;\n    return val\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n    process.env.NODE_ENV !== 'production' && warn(\n      'Avoid adding reactive properties to a Vue instance or its root $data ' +\n      'at runtime - declare it upfront in the data option.'\n    );\n    return val\n  }\n  if (!ob) {\n    target[key] = val;\n    return val\n  }\n  defineReactive$$1(ob.value, key, val);\n  ob.dep.notify();\n  return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n  if (process.env.NODE_ENV !== 'production' &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\""Cannot delete reactive property on undefined, null, or primitive value: \"" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.splice(key, 1);\n    return\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n    process.env.NODE_ENV !== 'production' && warn(\n      'Avoid deleting properties on a Vue instance or its root $data ' +\n      '- just set it to null.'\n    );\n    return\n  }\n  if (!hasOwn(target, key)) {\n    return\n  }\n  delete target[key];\n  if (!ob) {\n    return\n  }\n  ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n    e = value[i];\n    e && e.__ob__ && e.__ob__.dep.depend();\n    if (Array.isArray(e)) {\n      dependArray(e);\n    }\n  }\n}\n\n/*  */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n  strats.el = strats.propsData = function (parent, child, vm, key) {\n    if (!vm) {\n      warn(\n        \""option \\\""\"" + key + \""\\\"" can only be used during instance \"" +\n        'creation with the `new` keyword.'\n      );\n    }\n    return defaultStrat(parent, child)\n  };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n  if (!from) { return to }\n  var key, toVal, fromVal;\n\n  var keys = hasSymbol\n    ? Reflect.ownKeys(from)\n    : Object.keys(from);\n\n  for (var i = 0; i < keys.length; i++) {\n    key = keys[i];\n    // in case the object is already observed...\n    if (key === '__ob__') { continue }\n    toVal = to[key];\n    fromVal = from[key];\n    if (!hasOwn(to, key)) {\n      set(to, key, fromVal);\n    } else if (\n      toVal !== fromVal &&\n      isPlainObject(toVal) &&\n      isPlainObject(fromVal)\n    ) {\n      mergeData(toVal, fromVal);\n    }\n  }\n  return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    // in a Vue.extend merge, both should be functions\n    if (!childVal) {\n      return parentVal\n    }\n    if (!parentVal) {\n      return childVal\n    }\n    // when parentVal & childVal are both present,\n    // we need to return a function that returns the\n    // merged result of both functions... no need to\n    // check if parentVal is a function here because\n    // it has to be a function to pass previous merges.\n    return function mergedDataFn () {\n      return mergeData(\n        typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n        typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n      )\n    }\n  } else {\n    return function mergedInstanceDataFn () {\n      // instance merge\n      var instanceData = typeof childVal === 'function'\n        ? childVal.call(vm, vm)\n        : childVal;\n      var defaultData = typeof parentVal === 'function'\n        ? parentVal.call(vm, vm)\n        : parentVal;\n      if (instanceData) {\n        return mergeData(instanceData, defaultData)\n      } else {\n        return defaultData\n      }\n    }\n  }\n}\n\nstrats.data = function (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    if (childVal && typeof childVal !== 'function') {\n      process.env.NODE_ENV !== 'production' && warn(\n        'The \""data\"" option should be a function ' +\n        'that returns a per-instance value in component ' +\n        'definitions.',\n        vm\n      );\n\n      return parentVal\n    }\n    return mergeDataOrFn(parentVal, childVal)\n  }\n\n  return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n  parentVal,\n  childVal\n) {\n  var res = childVal\n    ? parentVal\n      ? parentVal.concat(childVal)\n      : Array.isArray(childVal)\n        ? childVal\n        : [childVal]\n    : parentVal;\n  return res\n    ? dedupeHooks(res)\n    : res\n}\n\nfunction dedupeHooks (hooks) {\n  var res = [];\n  for (var i = 0; i < hooks.length; i++) {\n    if (res.indexOf(hooks[i]) === -1) {\n      res.push(hooks[i]);\n    }\n  }\n  return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n  strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  var res = Object.create(parentVal || null);\n  if (childVal) {\n    process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n    return extend(res, childVal)\n  } else {\n    return res\n  }\n}\n\nASSET_TYPES.forEach(function (type) {\n  strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  // work around Firefox's Object.prototype.watch...\n  if (parentVal === nativeWatch) { parentVal = undefined; }\n  if (childVal === nativeWatch) { childVal = undefined; }\n  /* istanbul ignore if */\n  if (!childVal) { return Object.create(parentVal || null) }\n  if (process.env.NODE_ENV !== 'production') {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = {};\n  extend(ret, parentVal);\n  for (var key$1 in childVal) {\n    var parent = ret[key$1];\n    var child = childVal[key$1];\n    if (parent && !Array.isArray(parent)) {\n      parent = [parent];\n    }\n    ret[key$1] = parent\n      ? parent.concat(child)\n      : Array.isArray(child) ? child : [child];\n  }\n  return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  if (childVal && process.env.NODE_ENV !== 'production') {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = Object.create(null);\n  extend(ret, parentVal);\n  if (childVal) { extend(ret, childVal); }\n  return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n  return childVal === undefined\n    ? parentVal\n    : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n  for (var key in options.components) {\n    validateComponentName(key);\n  }\n}\n\nfunction validateComponentName (name) {\n  if (!new RegExp((\""^[a-zA-Z][\\\\-\\\\.0-9_\"" + (unicodeRegExp.source) + \""]*$\"")).test(name)) {\n    warn(\n      'Invalid component name: \""' + name + '\"". Component names ' +\n      'should conform to valid custom element name in html5 specification.'\n    );\n  }\n  if (isBuiltInTag(name) || config.isReservedTag(name)) {\n    warn(\n      'Do not use built-in or reserved HTML elements as component ' +\n      'id: ' + name\n    );\n  }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n  var props = options.props;\n  if (!props) { return }\n  var res = {};\n  var i, val, name;\n  if (Array.isArray(props)) {\n    i = props.length;\n    while (i--) {\n      val = props[i];\n      if (typeof val === 'string') {\n        name = camelize(val);\n        res[name] = { type: null };\n      } else if (process.env.NODE_ENV !== 'production') {\n        warn('props must be strings when using array syntax.');\n      }\n    }\n  } else if (isPlainObject(props)) {\n    for (var key in props) {\n      val = props[key];\n      name = camelize(key);\n      res[name] = isPlainObject(val)\n        ? val\n        : { type: val };\n    }\n  } else if (process.env.NODE_ENV !== 'production') {\n    warn(\n      \""Invalid value for option \\\""props\\\"": expected an Array or an Object, \"" +\n      \""but got \"" + (toRawType(props)) + \"".\"",\n      vm\n    );\n  }\n  options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n  var inject = options.inject;\n  if (!inject) { return }\n  var normalized = options.inject = {};\n  if (Array.isArray(inject)) {\n    for (var i = 0; i < inject.length; i++) {\n      normalized[inject[i]] = { from: inject[i] };\n    }\n  } else if (isPlainObject(inject)) {\n    for (var key in inject) {\n      var val = inject[key];\n      normalized[key] = isPlainObject(val)\n        ? extend({ from: key }, val)\n        : { from: val };\n    }\n  } else if (process.env.NODE_ENV !== 'production') {\n    warn(\n      \""Invalid value for option \\\""inject\\\"": expected an Array or an Object, \"" +\n      \""but got \"" + (toRawType(inject)) + \"".\"",\n      vm\n    );\n  }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n  var dirs = options.directives;\n  if (dirs) {\n    for (var key in dirs) {\n      var def$$1 = dirs[key];\n      if (typeof def$$1 === 'function') {\n        dirs[key] = { bind: def$$1, update: def$$1 };\n      }\n    }\n  }\n}\n\nfunction assertObjectType (name, value, vm) {\n  if (!isPlainObject(value)) {\n    warn(\n      \""Invalid value for option \\\""\"" + name + \""\\\"": expected an Object, \"" +\n      \""but got \"" + (toRawType(value)) + \"".\"",\n      vm\n    );\n  }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n  parent,\n  child,\n  vm\n) {\n  if (process.env.NODE_ENV !== 'production') {\n    checkComponents(child);\n  }\n\n  if (typeof child === 'function') {\n    child = child.options;\n  }\n\n  normalizeProps(child, vm);\n  normalizeInject(child, vm);\n  normalizeDirectives(child);\n\n  // Apply extends and mixins on the child options,\n  // but only if it is a raw options object that isn't\n  // the result of another mergeOptions call.\n  // Only merged options has the _base property.\n  if (!child._base) {\n    if (child.extends) {\n      parent = mergeOptions(parent, child.extends, vm);\n    }\n    if (child.mixins) {\n      for (var i = 0, l = child.mixins.length; i < l; i++) {\n        parent = mergeOptions(parent, child.mixins[i], vm);\n      }\n    }\n  }\n\n  var options = {};\n  var key;\n  for (key in parent) {\n    mergeField(key);\n  }\n  for (key in child) {\n    if (!hasOwn(parent, key)) {\n      mergeField(key);\n    }\n  }\n  function mergeField (key) {\n    var strat = strats[key] || defaultStrat;\n    options[key] = strat(parent[key], child[key], vm, key);\n  }\n  return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n  options,\n  type,\n  id,\n  warnMissing\n) {\n  /* istanbul ignore if */\n  if (typeof id !== 'string') {\n    return\n  }\n  var assets = options[type];\n  // check local registration variations first\n  if (hasOwn(assets, id)) { return assets[id] }\n  var camelizedId = camelize(id);\n  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n  var PascalCaseId = capitalize(camelizedId);\n  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n  // fallback to prototype chain\n  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n  if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n    warn(\n      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n      options\n    );\n  }\n  return res\n}\n\n/*  */\n\n\n\nfunction validateProp (\n  key,\n  propOptions,\n  propsData,\n  vm\n) {\n  var prop = propOptions[key];\n  var absent = !hasOwn(propsData, key);\n  var value = propsData[key];\n  // boolean casting\n  var booleanIndex = getTypeIndex(Boolean, prop.type);\n  if (booleanIndex > -1) {\n    if (absent && !hasOwn(prop, 'default')) {\n      value = false;\n    } else if (value === '' || value === hyphenate(key)) {\n      // only cast empty string / same name to boolean if\n      // boolean has higher priority\n      var stringIndex = getTypeIndex(String, prop.type);\n      if (stringIndex < 0 || booleanIndex < stringIndex) {\n        value = true;\n      }\n    }\n  }\n  // check default value\n  if (value === undefined) {\n    value = getPropDefaultValue(vm, prop, key);\n    // since the default value is a fresh copy,\n    // make sure to observe it.\n    var prevShouldObserve = shouldObserve;\n    toggleObserving(true);\n    observe(value);\n    toggleObserving(prevShouldObserve);\n  }\n  if (\n    process.env.NODE_ENV !== 'production' &&\n    // skip validation for weex recycle-list child component props\n    !(false)\n  ) {\n    assertProp(prop, key, value, vm, absent);\n  }\n  return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n  // no default, return undefined\n  if (!hasOwn(prop, 'default')) {\n    return undefined\n  }\n  var def = prop.default;\n  // warn against non-factory defaults for Object & Array\n  if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n    warn(\n      'Invalid default value for prop \""' + key + '\"": ' +\n      'Props with type Object/Array must use a factory function ' +\n      'to return the default value.',\n      vm\n    );\n  }\n  // the raw prop value was also undefined from previous render,\n  // return previous default value to avoid unnecessary watcher trigger\n  if (vm && vm.$options.propsData &&\n    vm.$options.propsData[key] === undefined &&\n    vm._props[key] !== undefined\n  ) {\n    return vm._props[key]\n  }\n  // call factory function for non-Function types\n  // a value is Function if its prototype is function even across different execution context\n  return typeof def === 'function' && getType(prop.type) !== 'Function'\n    ? def.call(vm)\n    : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n  prop,\n  name,\n  value,\n  vm,\n  absent\n) {\n  if (prop.required && absent) {\n    warn(\n      'Missing required prop: \""' + name + '\""',\n      vm\n    );\n    return\n  }\n  if (value == null && !prop.required) {\n    return\n  }\n  var type = prop.type;\n  var valid = !type || type === true;\n  var expectedTypes = [];\n  if (type) {\n    if (!Array.isArray(type)) {\n      type = [type];\n    }\n    for (var i = 0; i < type.length && !valid; i++) {\n      var assertedType = assertType(value, type[i]);\n      expectedTypes.push(assertedType.expectedType || '');\n      valid = assertedType.valid;\n    }\n  }\n\n  if (!valid) {\n    warn(\n      getInvalidTypeMessage(name, value, expectedTypes),\n      vm\n    );\n    return\n  }\n  var validator = prop.validator;\n  if (validator) {\n    if (!validator(value)) {\n      warn(\n        'Invalid prop: custom validator check failed for prop \""' + name + '\"".',\n        vm\n      );\n    }\n  }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n  var valid;\n  var expectedType = getType(type);\n  if (simpleCheckRE.test(expectedType)) {\n    var t = typeof value;\n    valid = t === expectedType.toLowerCase();\n    // for primitive wrapper objects\n    if (!valid && t === 'object') {\n      valid = value instanceof type;\n    }\n  } else if (expectedType === 'Object') {\n    valid = isPlainObject(value);\n  } else if (expectedType === 'Array') {\n    valid = Array.isArray(value);\n  } else {\n    valid = value instanceof type;\n  }\n  return {\n    valid: valid,\n    expectedType: expectedType\n  }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n  var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n  return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n  return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n  if (!Array.isArray(expectedTypes)) {\n    return isSameType(expectedTypes, type) ? 0 : -1\n  }\n  for (var i = 0, len = expectedTypes.length; i < len; i++) {\n    if (isSameType(expectedTypes[i], type)) {\n      return i\n    }\n  }\n  return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n  var message = \""Invalid prop: type check failed for prop \\\""\"" + name + \""\\\"".\"" +\n    \"" Expected \"" + (expectedTypes.map(capitalize).join(', '));\n  var expectedType = expectedTypes[0];\n  var receivedType = toRawType(value);\n  var expectedValue = styleValue(value, expectedType);\n  var receivedValue = styleValue(value, receivedType);\n  // check if we need to specify expected value\n  if (expectedTypes.length === 1 &&\n      isExplicable(expectedType) &&\n      !isBoolean(expectedType, receivedType)) {\n    message += \"" with value \"" + expectedValue;\n  }\n  message += \"", got \"" + receivedType + \"" \"";\n  // check if we need to specify received value\n  if (isExplicable(receivedType)) {\n    message += \""with value \"" + receivedValue + \"".\"";\n  }\n  return message\n}\n\nfunction styleValue (value, type) {\n  if (type === 'String') {\n    return (\""\\\""\"" + value + \""\\\""\"")\n  } else if (type === 'Number') {\n    return (\""\"" + (Number(value)))\n  } else {\n    return (\""\"" + value)\n  }\n}\n\nfunction isExplicable (value) {\n  var explicitTypes = ['string', 'number', 'boolean'];\n  return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n  var args = [], len = arguments.length;\n  while ( len-- ) args[ len ] = arguments[ len ];\n\n  return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/*  */\n\nfunction handleError (err, vm, info) {\n  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n  // See: https://github.com/vuejs/vuex/issues/1505\n  pushTarget();\n  try {\n    if (vm) {\n      var cur = vm;\n      while ((cur = cur.$parent)) {\n        var hooks = cur.$options.errorCaptured;\n        if (hooks) {\n          for (var i = 0; i < hooks.length; i++) {\n            try {\n              var capture = hooks[i].call(cur, err, vm, info) === false;\n              if (capture) { return }\n            } catch (e) {\n              globalHandleError(e, cur, 'errorCaptured hook');\n            }\n          }\n        }\n      }\n    }\n    globalHandleError(err, vm, info);\n  } finally {\n    popTarget();\n  }\n}\n\nfunction invokeWithErrorHandling (\n  handler,\n  context,\n  args,\n  vm,\n  info\n) {\n  var res;\n  try {\n    res = args ? handler.apply(context, args) : handler.call(context);\n    if (res && !res._isVue && isPromise(res) && !res._handled) {\n      res.catch(function (e) { return handleError(e, vm, info + \"" (Promise/async)\""); });\n      // issue #9511\n      // avoid catch triggering multiple times when nested calls\n      res._handled = true;\n    }\n  } catch (e) {\n    handleError(e, vm, info);\n  }\n  return res\n}\n\nfunction globalHandleError (err, vm, info) {\n  if (config.errorHandler) {\n    try {\n      return config.errorHandler.call(null, err, vm, info)\n    } catch (e) {\n      // if the user intentionally throws the original error in the handler,\n      // do not log it twice\n      if (e !== err) {\n        logError(e, null, 'config.errorHandler');\n      }\n    }\n  }\n  logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n  if (process.env.NODE_ENV !== 'production') {\n    warn((\""Error in \"" + info + \"": \\\""\"" + (err.toString()) + \""\\\""\""), vm);\n  }\n  /* istanbul ignore else */\n  if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n    console.error(err);\n  } else {\n    throw err\n  }\n}\n\n/*  */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n  pending = false;\n  var copies = callbacks.slice(0);\n  callbacks.length = 0;\n  for (var i = 0; i < copies.length; i++) {\n    copies[i]();\n  }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n  var p = Promise.resolve();\n  timerFunc = function () {\n    p.then(flushCallbacks);\n    // In problematic UIWebViews, Promise.then doesn't completely break, but\n    // it can get stuck in a weird state where callbacks are pushed into the\n    // microtask queue but the queue isn't being flushed, until the browser\n    // needs to do some other work, e.g. handle a timer. Therefore we can\n    // \""force\"" the microtask queue to be flushed by adding an empty timer.\n    if (isIOS) { setTimeout(noop); }\n  };\n  isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n  isNative(MutationObserver) ||\n  // PhantomJS and iOS 7.x\n  MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n  // Use MutationObserver where native Promise is not available,\n  // e.g. PhantomJS, iOS7, Android 4.4\n  // (#6466 MutationObserver is unreliable in IE11)\n  var counter = 1;\n  var observer = new MutationObserver(flushCallbacks);\n  var textNode = document.createTextNode(String(counter));\n  observer.observe(textNode, {\n    characterData: true\n  });\n  timerFunc = function () {\n    counter = (counter + 1) % 2;\n    textNode.data = String(counter);\n  };\n  isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n  // Fallback to setImmediate.\n  // Techinically it leverages the (macro) task queue,\n  // but it is still a better choice than setTimeout.\n  timerFunc = function () {\n    setImmediate(flushCallbacks);\n  };\n} else {\n  // Fallback to setTimeout.\n  timerFunc = function () {\n    setTimeout(flushCallbacks, 0);\n  };\n}\n\nfunction nextTick (cb, ctx) {\n  var _resolve;\n  callbacks.push(function () {\n    if (cb) {\n      try {\n        cb.call(ctx);\n      } catch (e) {\n        handleError(e, ctx, 'nextTick');\n      }\n    } else if (_resolve) {\n      _resolve(ctx);\n    }\n  });\n  if (!pending) {\n    pending = true;\n    timerFunc();\n  }\n  // $flow-disable-line\n  if (!cb && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve) {\n      _resolve = resolve;\n    })\n  }\n}\n\n/*  */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n  var allowedGlobals = makeMap(\n    'Infinity,undefined,NaN,isFinite,isNaN,' +\n    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n    'require' // for Webpack/Browserify\n  );\n\n  var warnNonPresent = function (target, key) {\n    warn(\n      \""Property or method \\\""\"" + key + \""\\\"" is not defined on the instance but \"" +\n      'referenced during render. Make sure that this property is reactive, ' +\n      'either in the data option, or for class-based components, by ' +\n      'initializing the property. ' +\n      'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n      target\n    );\n  };\n\n  var warnReservedPrefix = function (target, key) {\n    warn(\n      \""Property \\\""\"" + key + \""\\\"" must be accessed with \\\""$data.\"" + key + \""\\\"" because \"" +\n      'properties starting with \""$\"" or \""_\"" are not proxied in the Vue instance to ' +\n      'prevent conflicts with Vue internals' +\n      'See: https://vuejs.org/v2/api/#data',\n      target\n    );\n  };\n\n  var hasProxy =\n    typeof Proxy !== 'undefined' && isNative(Proxy);\n\n  if (hasProxy) {\n    var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n    config.keyCodes = new Proxy(config.keyCodes, {\n      set: function set (target, key, value) {\n        if (isBuiltInModifier(key)) {\n          warn((\""Avoid overwriting built-in modifier in config.keyCodes: .\"" + key));\n          return false\n        } else {\n          target[key] = value;\n          return true\n        }\n      }\n    });\n  }\n\n  var hasHandler = {\n    has: function has (target, key) {\n      var has = key in target;\n      var isAllowed = allowedGlobals(key) ||\n        (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n      if (!has && !isAllowed) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return has || !isAllowed\n    }\n  };\n\n  var getHandler = {\n    get: function get (target, key) {\n      if (typeof key === 'string' && !(key in target)) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return target[key]\n    }\n  };\n\n  initProxy = function initProxy (vm) {\n    if (hasProxy) {\n      // determine which proxy handler to use\n      var options = vm.$options;\n      var handlers = options.render && options.render._withStripped\n        ? getHandler\n        : hasHandler;\n      vm._renderProxy = new Proxy(vm, handlers);\n    } else {\n      vm._renderProxy = vm;\n    }\n  };\n}\n\n/*  */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \""deep\"" dependency.\n */\nfunction traverse (val) {\n  _traverse(val, seenObjects);\n  seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n  var i, keys;\n  var isA = Array.isArray(val);\n  if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n    return\n  }\n  if (val.__ob__) {\n    var depId = val.__ob__.dep.id;\n    if (seen.has(depId)) {\n      return\n    }\n    seen.add(depId);\n  }\n  if (isA) {\n    i = val.length;\n    while (i--) { _traverse(val[i], seen); }\n  } else {\n    keys = Object.keys(val);\n    i = keys.length;\n    while (i--) { _traverse(val[keys[i]], seen); }\n  }\n}\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n  var perf = inBrowser && window.performance;\n  /* istanbul ignore if */\n  if (\n    perf &&\n    perf.mark &&\n    perf.measure &&\n    perf.clearMarks &&\n    perf.clearMeasures\n  ) {\n    mark = function (tag) { return perf.mark(tag); };\n    measure = function (name, startTag, endTag) {\n      perf.measure(name, startTag, endTag);\n      perf.clearMarks(startTag);\n      perf.clearMarks(endTag);\n      // perf.clearMeasures(name)\n    };\n  }\n}\n\n/*  */\n\nvar normalizeEvent = cached(function (name) {\n  var passive = name.charAt(0) === '&';\n  name = passive ? name.slice(1) : name;\n  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n  name = once$$1 ? name.slice(1) : name;\n  var capture = name.charAt(0) === '!';\n  name = capture ? name.slice(1) : name;\n  return {\n    name: name,\n    once: once$$1,\n    capture: capture,\n    passive: passive\n  }\n});\n\nfunction createFnInvoker (fns, vm) {\n  function invoker () {\n    var arguments$1 = arguments;\n\n    var fns = invoker.fns;\n    if (Array.isArray(fns)) {\n      var cloned = fns.slice();\n      for (var i = 0; i < cloned.length; i++) {\n        invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \""v-on handler\"");\n      }\n    } else {\n      // return handler return value for single handlers\n      return invokeWithErrorHandling(fns, null, arguments, vm, \""v-on handler\"")\n    }\n  }\n  invoker.fns = fns;\n  return invoker\n}\n\nfunction updateListeners (\n  on,\n  oldOn,\n  add,\n  remove$$1,\n  createOnceHandler,\n  vm\n) {\n  var name, def$$1, cur, old, event;\n  for (name in on) {\n    def$$1 = cur = on[name];\n    old = oldOn[name];\n    event = normalizeEvent(name);\n    if (isUndef(cur)) {\n      process.env.NODE_ENV !== 'production' && warn(\n        \""Invalid handler for event \\\""\"" + (event.name) + \""\\\"": got \"" + String(cur),\n        vm\n      );\n    } else if (isUndef(old)) {\n      if (isUndef(cur.fns)) {\n        cur = on[name] = createFnInvoker(cur, vm);\n      }\n      if (isTrue(event.once)) {\n        cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n      }\n      add(event.name, cur, event.capture, event.passive, event.params);\n    } else if (cur !== old) {\n      old.fns = cur;\n      on[name] = old;\n    }\n  }\n  for (name in oldOn) {\n    if (isUndef(on[name])) {\n      event = normalizeEvent(name);\n      remove$$1(event.name, oldOn[name], event.capture);\n    }\n  }\n}\n\n/*  */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n  if (def instanceof VNode) {\n    def = def.data.hook || (def.data.hook = {});\n  }\n  var invoker;\n  var oldHook = def[hookKey];\n\n  function wrappedHook () {\n    hook.apply(this, arguments);\n    // important: remove merged hook to ensure it's called only once\n    // and prevent memory leak\n    remove(invoker.fns, wrappedHook);\n  }\n\n  if (isUndef(oldHook)) {\n    // no existing hook\n    invoker = createFnInvoker([wrappedHook]);\n  } else {\n    /* istanbul ignore if */\n    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n      // already a merged invoker\n      invoker = oldHook;\n      invoker.fns.push(wrappedHook);\n    } else {\n      // existing plain hook\n      invoker = createFnInvoker([oldHook, wrappedHook]);\n    }\n  }\n\n  invoker.merged = true;\n  def[hookKey] = invoker;\n}\n\n/*  */\n\nfunction extractPropsFromVNodeData (\n  data,\n  Ctor,\n  tag\n) {\n  // we are only extracting raw values here.\n  // validation and default values are handled in the child\n  // component itself.\n  var propOptions = Ctor.options.props;\n  if (isUndef(propOptions)) {\n    return\n  }\n  var res = {};\n  var attrs = data.attrs;\n  var props = data.props;\n  if (isDef(attrs) || isDef(props)) {\n    for (var key in propOptions) {\n      var altKey = hyphenate(key);\n      if (process.env.NODE_ENV !== 'production') {\n        var keyInLowerCase = key.toLowerCase();\n        if (\n          key !== keyInLowerCase &&\n          attrs && hasOwn(attrs, keyInLowerCase)\n        ) {\n          tip(\n            \""Prop \\\""\"" + keyInLowerCase + \""\\\"" is passed to component \"" +\n            (formatComponentName(tag || Ctor)) + \"", but the declared prop name is\"" +\n            \"" \\\""\"" + key + \""\\\"". \"" +\n            \""Note that HTML attributes are case-insensitive and camelCased \"" +\n            \""props need to use their kebab-case equivalents when using in-DOM \"" +\n            \""templates. You should probably use \\\""\"" + altKey + \""\\\"" instead of \\\""\"" + key + \""\\\"".\""\n          );\n        }\n      }\n      checkProp(res, props, key, altKey, true) ||\n      checkProp(res, attrs, key, altKey, false);\n    }\n  }\n  return res\n}\n\nfunction checkProp (\n  res,\n  hash,\n  key,\n  altKey,\n  preserve\n) {\n  if (isDef(hash)) {\n    if (hasOwn(hash, key)) {\n      res[key] = hash[key];\n      if (!preserve) {\n        delete hash[key];\n      }\n      return true\n    } else if (hasOwn(hash, altKey)) {\n      res[key] = hash[altKey];\n      if (!preserve) {\n        delete hash[altKey];\n      }\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n  for (var i = 0; i < children.length; i++) {\n    if (Array.isArray(children[i])) {\n      return Array.prototype.concat.apply([], children)\n    }\n  }\n  return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n  return isPrimitive(children)\n    ? [createTextVNode(children)]\n    : Array.isArray(children)\n      ? normalizeArrayChildren(children)\n      : undefined\n}\n\nfunction isTextNode (node) {\n  return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n  var res = [];\n  var i, c, lastIndex, last;\n  for (i = 0; i < children.length; i++) {\n    c = children[i];\n    if (isUndef(c) || typeof c === 'boolean') { continue }\n    lastIndex = res.length - 1;\n    last = res[lastIndex];\n    //  nested\n    if (Array.isArray(c)) {\n      if (c.length > 0) {\n        c = normalizeArrayChildren(c, ((nestedIndex || '') + \""_\"" + i));\n        // merge adjacent text nodes\n        if (isTextNode(c[0]) && isTextNode(last)) {\n          res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n          c.shift();\n        }\n        res.push.apply(res, c);\n      }\n    } else if (isPrimitive(c)) {\n      if (isTextNode(last)) {\n        // merge adjacent text nodes\n        // this is necessary for SSR hydration because text nodes are\n        // essentially merged when rendered to HTML strings\n        res[lastIndex] = createTextVNode(last.text + c);\n      } else if (c !== '') {\n        // convert primitive to vnode\n        res.push(createTextVNode(c));\n      }\n    } else {\n      if (isTextNode(c) && isTextNode(last)) {\n        // merge adjacent text nodes\n        res[lastIndex] = createTextVNode(last.text + c.text);\n      } else {\n        // default key for nested array children (likely generated by v-for)\n        if (isTrue(children._isVList) &&\n          isDef(c.tag) &&\n          isUndef(c.key) &&\n          isDef(nestedIndex)) {\n          c.key = \""__vlist\"" + nestedIndex + \""_\"" + i + \""__\"";\n        }\n        res.push(c);\n      }\n    }\n  }\n  return res\n}\n\n/*  */\n\nfunction initProvide (vm) {\n  var provide = vm.$options.provide;\n  if (provide) {\n    vm._provided = typeof provide === 'function'\n      ? provide.call(vm)\n      : provide;\n  }\n}\n\nfunction initInjections (vm) {\n  var result = resolveInject(vm.$options.inject, vm);\n  if (result) {\n    toggleObserving(false);\n    Object.keys(result).forEach(function (key) {\n      /* istanbul ignore else */\n      if (process.env.NODE_ENV !== 'production') {\n        defineReactive$$1(vm, key, result[key], function () {\n          warn(\n            \""Avoid mutating an injected value directly since the changes will be \"" +\n            \""overwritten whenever the provided component re-renders. \"" +\n            \""injection being mutated: \\\""\"" + key + \""\\\""\"",\n            vm\n          );\n        });\n      } else {\n        defineReactive$$1(vm, key, result[key]);\n      }\n    });\n    toggleObserving(true);\n  }\n}\n\nfunction resolveInject (inject, vm) {\n  if (inject) {\n    // inject is :any because flow is not smart enough to figure out cached\n    var result = Object.create(null);\n    var keys = hasSymbol\n      ? Reflect.ownKeys(inject)\n      : Object.keys(inject);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      // #6574 in case the inject object is observed...\n      if (key === '__ob__') { continue }\n      var provideKey = inject[key].from;\n      var source = vm;\n      while (source) {\n        if (source._provided && hasOwn(source._provided, provideKey)) {\n          result[key] = source._provided[provideKey];\n          break\n        }\n        source = source.$parent;\n      }\n      if (!source) {\n        if ('default' in inject[key]) {\n          var provideDefault = inject[key].default;\n          result[key] = typeof provideDefault === 'function'\n            ? provideDefault.call(vm)\n            : provideDefault;\n        } else if (process.env.NODE_ENV !== 'production') {\n          warn((\""Injection \\\""\"" + key + \""\\\"" not found\""), vm);\n        }\n      }\n    }\n    return result\n  }\n}\n\n/*  */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n  children,\n  context\n) {\n  if (!children || !children.length) {\n    return {}\n  }\n  var slots = {};\n  for (var i = 0, l = children.length; i < l; i++) {\n    var child = children[i];\n    var data = child.data;\n    // remove slot attribute if the node is resolved as a Vue slot node\n    if (data && data.attrs && data.attrs.slot) {\n      delete data.attrs.slot;\n    }\n    // named slots should only be respected if the vnode was rendered in the\n    // same context.\n    if ((child.context === context || child.fnContext === context) &&\n      data && data.slot != null\n    ) {\n      var name = data.slot;\n      var slot = (slots[name] || (slots[name] = []));\n      if (child.tag === 'template') {\n        slot.push.apply(slot, child.children || []);\n      } else {\n        slot.push(child);\n      }\n    } else {\n      (slots.default || (slots.default = [])).push(child);\n    }\n  }\n  // ignore slots that contains only whitespace\n  for (var name$1 in slots) {\n    if (slots[name$1].every(isWhitespace)) {\n      delete slots[name$1];\n    }\n  }\n  return slots\n}\n\nfunction isWhitespace (node) {\n  return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/*  */\n\nfunction normalizeScopedSlots (\n  slots,\n  normalSlots,\n  prevSlots\n) {\n  var res;\n  var hasNormalSlots = Object.keys(normalSlots).length > 0;\n  var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n  var key = slots && slots.$key;\n  if (!slots) {\n    res = {};\n  } else if (slots._normalized) {\n    // fast path 1: child component re-render only, parent did not change\n    return slots._normalized\n  } else if (\n    isStable &&\n    prevSlots &&\n    prevSlots !== emptyObject &&\n    key === prevSlots.$key &&\n    !hasNormalSlots &&\n    !prevSlots.$hasNormal\n  ) {\n    // fast path 2: stable scoped slots w/ no normal slots to proxy,\n    // only need to normalize once\n    return prevSlots\n  } else {\n    res = {};\n    for (var key$1 in slots) {\n      if (slots[key$1] && key$1[0] !== '$') {\n        res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n      }\n    }\n  }\n  // expose normal slots on scopedSlots\n  for (var key$2 in normalSlots) {\n    if (!(key$2 in res)) {\n      res[key$2] = proxyNormalSlot(normalSlots, key$2);\n    }\n  }\n  // avoriaz seems to mock a non-extensible $scopedSlots object\n  // and when that is passed down this would cause an error\n  if (slots && Object.isExtensible(slots)) {\n    (slots)._normalized = res;\n  }\n  def(res, '$stable', isStable);\n  def(res, '$key', key);\n  def(res, '$hasNormal', hasNormalSlots);\n  return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n  var normalized = function () {\n    var res = arguments.length ? fn.apply(null, arguments) : fn({});\n    res = res && typeof res === 'object' && !Array.isArray(res)\n      ? [res] // single vnode\n      : normalizeChildren(res);\n    return res && (\n      res.length === 0 ||\n      (res.length === 1 && res[0].isComment) // #9658\n    ) ? undefined\n      : res\n  };\n  // this is a slot using the new v-slot syntax without scope. although it is\n  // compiled as a scoped slot, render fn users would expect it to be present\n  // on this.$slots because the usage is semantically a normal slot.\n  if (fn.proxy) {\n    Object.defineProperty(normalSlots, key, {\n      get: normalized,\n      enumerable: true,\n      configurable: true\n    });\n  }\n  return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n  return function () { return slots[key]; }\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n  val,\n  render\n) {\n  var ret, i, l, keys, key;\n  if (Array.isArray(val) || typeof val === 'string') {\n    ret = new Array(val.length);\n    for (i = 0, l = val.length; i < l; i++) {\n      ret[i] = render(val[i], i);\n    }\n  } else if (typeof val === 'number') {\n    ret = new Array(val);\n    for (i = 0; i < val; i++) {\n      ret[i] = render(i + 1, i);\n    }\n  } else if (isObject(val)) {\n    if (hasSymbol && val[Symbol.iterator]) {\n      ret = [];\n      var iterator = val[Symbol.iterator]();\n      var result = iterator.next();\n      while (!result.done) {\n        ret.push(render(result.value, ret.length));\n        result = iterator.next();\n      }\n    } else {\n      keys = Object.keys(val);\n      ret = new Array(keys.length);\n      for (i = 0, l = keys.length; i < l; i++) {\n        key = keys[i];\n        ret[i] = render(val[key], key, i);\n      }\n    }\n  }\n  if (!isDef(ret)) {\n    ret = [];\n  }\n  (ret)._isVList = true;\n  return ret\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n  name,\n  fallback,\n  props,\n  bindObject\n) {\n  var scopedSlotFn = this.$scopedSlots[name];\n  var nodes;\n  if (scopedSlotFn) { // scoped slot\n    props = props || {};\n    if (bindObject) {\n      if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {\n        warn(\n          'slot v-bind without argument expects an Object',\n          this\n        );\n      }\n      props = extend(extend({}, bindObject), props);\n    }\n    nodes = scopedSlotFn(props) || fallback;\n  } else {\n    nodes = this.$slots[name] || fallback;\n  }\n\n  var target = props && props.slot;\n  if (target) {\n    return this.$createElement('template', { slot: target }, nodes)\n  } else {\n    return nodes\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n  return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/*  */\n\nfunction isKeyNotMatch (expect, actual) {\n  if (Array.isArray(expect)) {\n    return expect.indexOf(actual) === -1\n  } else {\n    return expect !== actual\n  }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n  eventKeyCode,\n  key,\n  builtInKeyCode,\n  eventKeyName,\n  builtInKeyName\n) {\n  var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n    return isKeyNotMatch(builtInKeyName, eventKeyName)\n  } else if (mappedKeyCode) {\n    return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n  } else if (eventKeyName) {\n    return hyphenate(eventKeyName) !== key\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for merging v-bind=\""object\"" into a VNode's data.\n */\nfunction bindObjectProps (\n  data,\n  tag,\n  value,\n  asProp,\n  isSync\n) {\n  if (value) {\n    if (!isObject(value)) {\n      process.env.NODE_ENV !== 'production' && warn(\n        'v-bind without argument expects an Object or Array value',\n        this\n      );\n    } else {\n      if (Array.isArray(value)) {\n        value = toObject(value);\n      }\n      var hash;\n      var loop = function ( key ) {\n        if (\n          key === 'class' ||\n          key === 'style' ||\n          isReservedAttribute(key)\n        ) {\n          hash = data;\n        } else {\n          var type = data.attrs && data.attrs.type;\n          hash = asProp || config.mustUseProp(tag, type, key)\n            ? data.domProps || (data.domProps = {})\n            : data.attrs || (data.attrs = {});\n        }\n        var camelizedKey = camelize(key);\n        var hyphenatedKey = hyphenate(key);\n        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n          hash[key] = value[key];\n\n          if (isSync) {\n            var on = data.on || (data.on = {});\n            on[(\""update:\"" + key)] = function ($event) {\n              value[key] = $event;\n            };\n          }\n        }\n      };\n\n      for (var key in value) loop( key );\n    }\n  }\n  return data\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n  index,\n  isInFor\n) {\n  var cached = this._staticTrees || (this._staticTrees = []);\n  var tree = cached[index];\n  // if has already-rendered static tree and not inside v-for,\n  // we can reuse the same tree.\n  if (tree && !isInFor) {\n    return tree\n  }\n  // otherwise, render a fresh tree.\n  tree = cached[index] = this.$options.staticRenderFns[index].call(\n    this._renderProxy,\n    null,\n    this // for render fns generated for functional component templates\n  );\n  markStatic(tree, (\""__static__\"" + index), false);\n  return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n  tree,\n  index,\n  key\n) {\n  markStatic(tree, (\""__once__\"" + index + (key ? (\""_\"" + key) : \""\"")), true);\n  return tree\n}\n\nfunction markStatic (\n  tree,\n  key,\n  isOnce\n) {\n  if (Array.isArray(tree)) {\n    for (var i = 0; i < tree.length; i++) {\n      if (tree[i] && typeof tree[i] !== 'string') {\n        markStaticNode(tree[i], (key + \""_\"" + i), isOnce);\n      }\n    }\n  } else {\n    markStaticNode(tree, key, isOnce);\n  }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n  node.isStatic = true;\n  node.key = key;\n  node.isOnce = isOnce;\n}\n\n/*  */\n\nfunction bindObjectListeners (data, value) {\n  if (value) {\n    if (!isPlainObject(value)) {\n      process.env.NODE_ENV !== 'production' && warn(\n        'v-on without argument expects an Object value',\n        this\n      );\n    } else {\n      var on = data.on = data.on ? extend({}, data.on) : {};\n      for (var key in value) {\n        var existing = on[key];\n        var ours = value[key];\n        on[key] = existing ? [].concat(existing, ours) : ours;\n      }\n    }\n  }\n  return data\n}\n\n/*  */\n\nfunction resolveScopedSlots (\n  fns, // see flow/vnode\n  res,\n  // the following are added in 2.6\n  hasDynamicKeys,\n  contentHashKey\n) {\n  res = res || { $stable: !hasDynamicKeys };\n  for (var i = 0; i < fns.length; i++) {\n    var slot = fns[i];\n    if (Array.isArray(slot)) {\n      resolveScopedSlots(slot, res, hasDynamicKeys);\n    } else if (slot) {\n      // marker for reverse proxying v-slot without scope on this.$slots\n      if (slot.proxy) {\n        slot.fn.proxy = true;\n      }\n      res[slot.key] = slot.fn;\n    }\n  }\n  if (contentHashKey) {\n    (res).$key = contentHashKey;\n  }\n  return res\n}\n\n/*  */\n\nfunction bindDynamicKeys (baseObj, values) {\n  for (var i = 0; i < values.length; i += 2) {\n    var key = values[i];\n    if (typeof key === 'string' && key) {\n      baseObj[values[i]] = values[i + 1];\n    } else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {\n      // null is a speical value for explicitly removing a binding\n      warn(\n        (\""Invalid value for dynamic directive argument (expected string or null): \"" + key),\n        this\n      );\n    }\n  }\n  return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n  return typeof value === 'string' ? symbol + value : value\n}\n\n/*  */\n\nfunction installRenderHelpers (target) {\n  target._o = markOnce;\n  target._n = toNumber;\n  target._s = toString;\n  target._l = renderList;\n  target._t = renderSlot;\n  target._q = looseEqual;\n  target._i = looseIndexOf;\n  target._m = renderStatic;\n  target._f = resolveFilter;\n  target._k = checkKeyCodes;\n  target._b = bindObjectProps;\n  target._v = createTextVNode;\n  target._e = createEmptyVNode;\n  target._u = resolveScopedSlots;\n  target._g = bindObjectListeners;\n  target._d = bindDynamicKeys;\n  target._p = prependModifier;\n}\n\n/*  */\n\nfunction FunctionalRenderContext (\n  data,\n  props,\n  children,\n  parent,\n  Ctor\n) {\n  var this$1 = this;\n\n  var options = Ctor.options;\n  // ensure the createElement function in functional components\n  // gets a unique context - this is necessary for correct named slot check\n  var contextVm;\n  if (hasOwn(parent, '_uid')) {\n    contextVm = Object.create(parent);\n    // $flow-disable-line\n    contextVm._original = parent;\n  } else {\n    // the context vm passed in is a functional context as well.\n    // in this case we want to make sure we are able to get a hold to the\n    // real context instance.\n    contextVm = parent;\n    // $flow-disable-line\n    parent = parent._original;\n  }\n  var isCompiled = isTrue(options._compiled);\n  var needNormalization = !isCompiled;\n\n  this.data = data;\n  this.props = props;\n  this.children = children;\n  this.parent = parent;\n  this.listeners = data.on || emptyObject;\n  this.injections = resolveInject(options.inject, parent);\n  this.slots = function () {\n    if (!this$1.$slots) {\n      normalizeScopedSlots(\n        data.scopedSlots,\n        this$1.$slots = resolveSlots(children, parent)\n      );\n    }\n    return this$1.$slots\n  };\n\n  Object.defineProperty(this, 'scopedSlots', ({\n    enumerable: true,\n    get: function get () {\n      return normalizeScopedSlots(data.scopedSlots, this.slots())\n    }\n  }));\n\n  // support for compiled functional template\n  if (isCompiled) {\n    // exposing $options for renderStatic()\n    this.$options = options;\n    // pre-resolve slots for renderSlot()\n    this.$slots = this.slots();\n    this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n  }\n\n  if (options._scopeId) {\n    this._c = function (a, b, c, d) {\n      var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n      if (vnode && !Array.isArray(vnode)) {\n        vnode.fnScopeId = options._scopeId;\n        vnode.fnContext = parent;\n      }\n      return vnode\n    };\n  } else {\n    this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n  }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n  Ctor,\n  propsData,\n  data,\n  contextVm,\n  children\n) {\n  var options = Ctor.options;\n  var props = {};\n  var propOptions = options.props;\n  if (isDef(propOptions)) {\n    for (var key in propOptions) {\n      props[key] = validateProp(key, propOptions, propsData || emptyObject);\n    }\n  } else {\n    if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n    if (isDef(data.props)) { mergeProps(props, data.props); }\n  }\n\n  var renderContext = new FunctionalRenderContext(\n    data,\n    props,\n    children,\n    contextVm,\n    Ctor\n  );\n\n  var vnode = options.render.call(null, renderContext._c, renderContext);\n\n  if (vnode instanceof VNode) {\n    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n  } else if (Array.isArray(vnode)) {\n    var vnodes = normalizeChildren(vnode) || [];\n    var res = new Array(vnodes.length);\n    for (var i = 0; i < vnodes.length; i++) {\n      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n    }\n    return res\n  }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n  // #7817 clone node before setting fnContext, otherwise if the node is reused\n  // (e.g. it was from a cached normal slot) the fnContext causes named slots\n  // that should not be matched to match.\n  var clone = cloneVNode(vnode);\n  clone.fnContext = contextVm;\n  clone.fnOptions = options;\n  if (process.env.NODE_ENV !== 'production') {\n    (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n  }\n  if (data.slot) {\n    (clone.data || (clone.data = {})).slot = data.slot;\n  }\n  return clone\n}\n\nfunction mergeProps (to, from) {\n  for (var key in from) {\n    to[camelize(key)] = from[key];\n  }\n}\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n  init: function init (vnode, hydrating) {\n    if (\n      vnode.componentInstance &&\n      !vnode.componentInstance._isDestroyed &&\n      vnode.data.keepAlive\n    ) {\n      // kept-alive components, treat as a patch\n      var mountedNode = vnode; // work around flow\n      componentVNodeHooks.prepatch(mountedNode, mountedNode);\n    } else {\n      var child = vnode.componentInstance = createComponentInstanceForVnode(\n        vnode,\n        activeInstance\n      );\n      child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n    }\n  },\n\n  prepatch: function prepatch (oldVnode, vnode) {\n    var options = vnode.componentOptions;\n    var child = vnode.componentInstance = oldVnode.componentInstance;\n    updateChildComponent(\n      child,\n      options.propsData, // updated props\n      options.listeners, // updated listeners\n      vnode, // new parent vnode\n      options.children // new children\n    );\n  },\n\n  insert: function insert (vnode) {\n    var context = vnode.context;\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isMounted) {\n      componentInstance._isMounted = true;\n      callHook(componentInstance, 'mounted');\n    }\n    if (vnode.data.keepAlive) {\n      if (context._isMounted) {\n        // vue-router#1212\n        // During updates, a kept-alive component's child components may\n        // change, so directly walking the tree here may call activated hooks\n        // on incorrect children. Instead we push them into a queue which will\n        // be processed after the whole patch process ended.\n        queueActivatedComponent(componentInstance);\n      } else {\n        activateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  },\n\n  destroy: function destroy (vnode) {\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isDestroyed) {\n      if (!vnode.data.keepAlive) {\n        componentInstance.$destroy();\n      } else {\n        deactivateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n  Ctor,\n  data,\n  context,\n  children,\n  tag\n) {\n  if (isUndef(Ctor)) {\n    return\n  }\n\n  var baseCtor = context.$options._base;\n\n  // plain options object: turn it into a constructor\n  if (isObject(Ctor)) {\n    Ctor = baseCtor.extend(Ctor);\n  }\n\n  // if at this stage it's not a constructor or an async component factory,\n  // reject.\n  if (typeof Ctor !== 'function') {\n    if (process.env.NODE_ENV !== 'production') {\n      warn((\""Invalid Component definition: \"" + (String(Ctor))), context);\n    }\n    return\n  }\n\n  // async component\n  var asyncFactory;\n  if (isUndef(Ctor.cid)) {\n    asyncFactory = Ctor;\n    Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n    if (Ctor === undefined) {\n      // return a placeholder node for async component, which is rendered\n      // as a comment node but preserves all the raw information for the node.\n      // the information will be used for async server-rendering and hydration.\n      return createAsyncPlaceholder(\n        asyncFactory,\n        data,\n        context,\n        children,\n        tag\n      )\n    }\n  }\n\n  data = data || {};\n\n  // resolve constructor options in case global mixins are applied after\n  // component constructor creation\n  resolveConstructorOptions(Ctor);\n\n  // transform component v-model data into props & events\n  if (isDef(data.model)) {\n    transformModel(Ctor.options, data);\n  }\n\n  // extract props\n  var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n  // functional component\n  if (isTrue(Ctor.options.functional)) {\n    return createFunctionalComponent(Ctor, propsData, data, context, children)\n  }\n\n  // extract listeners, since these needs to be treated as\n  // child component listeners instead of DOM listeners\n  var listeners = data.on;\n  // replace with listeners with .native modifier\n  // so it gets processed during parent component patch.\n  data.on = data.nativeOn;\n\n  if (isTrue(Ctor.options.abstract)) {\n    // abstract components do not keep anything\n    // other than props & listeners & slot\n\n    // work around flow\n    var slot = data.slot;\n    data = {};\n    if (slot) {\n      data.slot = slot;\n    }\n  }\n\n  // install component management hooks onto the placeholder node\n  installComponentHooks(data);\n\n  // return a placeholder vnode\n  var name = Ctor.options.name || tag;\n  var vnode = new VNode(\n    (\""vue-component-\"" + (Ctor.cid) + (name ? (\""-\"" + name) : '')),\n    data, undefined, undefined, undefined, context,\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n    asyncFactory\n  );\n\n  return vnode\n}\n\nfunction createComponentInstanceForVnode (\n  vnode, // we know it's MountedComponentVNode but flow doesn't\n  parent // activeInstance in lifecycle state\n) {\n  var options = {\n    _isComponent: true,\n    _parentVnode: vnode,\n    parent: parent\n  };\n  // check inline-template render functions\n  var inlineTemplate = vnode.data.inlineTemplate;\n  if (isDef(inlineTemplate)) {\n    options.render = inlineTemplate.render;\n    options.staticRenderFns = inlineTemplate.staticRenderFns;\n  }\n  return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n  var hooks = data.hook || (data.hook = {});\n  for (var i = 0; i < hooksToMerge.length; i++) {\n    var key = hooksToMerge[i];\n    var existing = hooks[key];\n    var toMerge = componentVNodeHooks[key];\n    if (existing !== toMerge && !(existing && existing._merged)) {\n      hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n    }\n  }\n}\n\nfunction mergeHook$1 (f1, f2) {\n  var merged = function (a, b) {\n    // flow complains about extra args which is why we use any\n    f1(a, b);\n    f2(a, b);\n  };\n  merged._merged = true;\n  return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n  var prop = (options.model && options.model.prop) || 'value';\n  var event = (options.model && options.model.event) || 'input'\n  ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n  var on = data.on || (data.on = {});\n  var existing = on[event];\n  var callback = data.model.callback;\n  if (isDef(existing)) {\n    if (\n      Array.isArray(existing)\n        ? existing.indexOf(callback) === -1\n        : existing !== callback\n    ) {\n      on[event] = [callback].concat(existing);\n    }\n  } else {\n    on[event] = callback;\n  }\n}\n\n/*  */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType,\n  alwaysNormalize\n) {\n  if (Array.isArray(data) || isPrimitive(data)) {\n    normalizationType = children;\n    children = data;\n    data = undefined;\n  }\n  if (isTrue(alwaysNormalize)) {\n    normalizationType = ALWAYS_NORMALIZE;\n  }\n  return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType\n) {\n  if (isDef(data) && isDef((data).__ob__)) {\n    process.env.NODE_ENV !== 'production' && warn(\n      \""Avoid using observed data object as vnode data: \"" + (JSON.stringify(data)) + \""\\n\"" +\n      'Always create fresh vnode data objects in each render!',\n      context\n    );\n    return createEmptyVNode()\n  }\n  // object syntax in v-bind\n  if (isDef(data) && isDef(data.is)) {\n    tag = data.is;\n  }\n  if (!tag) {\n    // in case of component :is set to falsy value\n    return createEmptyVNode()\n  }\n  // warn against non-primitive key\n  if (process.env.NODE_ENV !== 'production' &&\n    isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n  ) {\n    {\n      warn(\n        'Avoid using non-primitive value as key, ' +\n        'use string/number value instead.',\n        context\n      );\n    }\n  }\n  // support single function children as default scoped slot\n  if (Array.isArray(children) &&\n    typeof children[0] === 'function'\n  ) {\n    data = data || {};\n    data.scopedSlots = { default: children[0] };\n    children.length = 0;\n  }\n  if (normalizationType === ALWAYS_NORMALIZE) {\n    children = normalizeChildren(children);\n  } else if (normalizationType === SIMPLE_NORMALIZE) {\n    children = simpleNormalizeChildren(children);\n  }\n  var vnode, ns;\n  if (typeof tag === 'string') {\n    var Ctor;\n    ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n    if (config.isReservedTag(tag)) {\n      // platform built-in elements\n      vnode = new VNode(\n        config.parsePlatformTagName(tag), data, children,\n        undefined, undefined, context\n      );\n    } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n      // component\n      vnode = createComponent(Ctor, data, context, children, tag);\n    } else {\n      // unknown or unlisted namespaced elements\n      // check at runtime because it may get assigned a namespace when its\n      // parent normalizes children\n      vnode = new VNode(\n        tag, data, children,\n        undefined, undefined, context\n      );\n    }\n  } else {\n    // direct component options / constructor\n    vnode = createComponent(tag, data, context, children);\n  }\n  if (Array.isArray(vnode)) {\n    return vnode\n  } else if (isDef(vnode)) {\n    if (isDef(ns)) { applyNS(vnode, ns); }\n    if (isDef(data)) { registerDeepBindings(data); }\n    return vnode\n  } else {\n    return createEmptyVNode()\n  }\n}\n\nfunction applyNS (vnode, ns, force) {\n  vnode.ns = ns;\n  if (vnode.tag === 'foreignObject') {\n    // use default namespace inside foreignObject\n    ns = undefined;\n    force = true;\n  }\n  if (isDef(vnode.children)) {\n    for (var i = 0, l = vnode.children.length; i < l; i++) {\n      var child = vnode.children[i];\n      if (isDef(child.tag) && (\n        isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n        applyNS(child, ns, force);\n      }\n    }\n  }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n  if (isObject(data.style)) {\n    traverse(data.style);\n  }\n  if (isObject(data.class)) {\n    traverse(data.class);\n  }\n}\n\n/*  */\n\nfunction initRender (vm) {\n  vm._vnode = null; // the root of the child tree\n  vm._staticTrees = null; // v-once cached trees\n  var options = vm.$options;\n  var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n  var renderContext = parentVnode && parentVnode.context;\n  vm.$slots = resolveSlots(options._renderChildren, renderContext);\n  vm.$scopedSlots = emptyObject;\n  // bind the createElement fn to this instance\n  // so that we get proper render context inside it.\n  // args order: tag, data, children, normalizationType, alwaysNormalize\n  // internal version is used by render functions compiled from templates\n  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n  // normalization is always applied for the public version, used in\n  // user-written render functions.\n  vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n  // $attrs & $listeners are exposed for easier HOC creation.\n  // they need to be reactive so that HOCs using them are always updated\n  var parentData = parentVnode && parentVnode.data;\n\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== 'production') {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\""$attrs is readonly.\"", vm);\n    }, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\""$listeners is readonly.\"", vm);\n    }, true);\n  } else {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n  }\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n  // install runtime convenience helpers\n  installRenderHelpers(Vue.prototype);\n\n  Vue.prototype.$nextTick = function (fn) {\n    return nextTick(fn, this)\n  };\n\n  Vue.prototype._render = function () {\n    var vm = this;\n    var ref = vm.$options;\n    var render = ref.render;\n    var _parentVnode = ref._parentVnode;\n\n    if (_parentVnode) {\n      vm.$scopedSlots = normalizeScopedSlots(\n        _parentVnode.data.scopedSlots,\n        vm.$slots,\n        vm.$scopedSlots\n      );\n    }\n\n    // set parent vnode. this allows render functions to have access\n    // to the data on the placeholder node.\n    vm.$vnode = _parentVnode;\n    // render self\n    var vnode;\n    try {\n      // There's no need to maintain a stack becaues all render fns are called\n      // separately from one another. Nested component's render fns are called\n      // when parent component is patched.\n      currentRenderingInstance = vm;\n      vnode = render.call(vm._renderProxy, vm.$createElement);\n    } catch (e) {\n      handleError(e, vm, \""render\"");\n      // return error render result,\n      // or previous vnode to prevent render error causing blank component\n      /* istanbul ignore else */\n      if (process.env.NODE_ENV !== 'production' && vm.$options.renderError) {\n        try {\n          vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n        } catch (e) {\n          handleError(e, vm, \""renderError\"");\n          vnode = vm._vnode;\n        }\n      } else {\n        vnode = vm._vnode;\n      }\n    } finally {\n      currentRenderingInstance = null;\n    }\n    // if the returned array contains only a single node, allow it\n    if (Array.isArray(vnode) && vnode.length === 1) {\n      vnode = vnode[0];\n    }\n    // return empty vnode in case the render function errored out\n    if (!(vnode instanceof VNode)) {\n      if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {\n        warn(\n          'Multiple root nodes returned from render function. Render function ' +\n          'should return a single root node.',\n          vm\n        );\n      }\n      vnode = createEmptyVNode();\n    }\n    // set parent\n    vnode.parent = _parentVnode;\n    return vnode\n  };\n}\n\n/*  */\n\nfunction ensureCtor (comp, base) {\n  if (\n    comp.__esModule ||\n    (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n  ) {\n    comp = comp.default;\n  }\n  return isObject(comp)\n    ? base.extend(comp)\n    : comp\n}\n\nfunction createAsyncPlaceholder (\n  factory,\n  data,\n  context,\n  children,\n  tag\n) {\n  var node = createEmptyVNode();\n  node.asyncFactory = factory;\n  node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n  return node\n}\n\nfunction resolveAsyncComponent (\n  factory,\n  baseCtor\n) {\n  if (isTrue(factory.error) && isDef(factory.errorComp)) {\n    return factory.errorComp\n  }\n\n  if (isDef(factory.resolved)) {\n    return factory.resolved\n  }\n\n  var owner = currentRenderingInstance;\n  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n    // already pending\n    factory.owners.push(owner);\n  }\n\n  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n    return factory.loadingComp\n  }\n\n  if (owner && !isDef(factory.owners)) {\n    var owners = factory.owners = [owner];\n    var sync = true;\n    var timerLoading = null;\n    var timerTimeout = null\n\n    ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n    var forceRender = function (renderCompleted) {\n      for (var i = 0, l = owners.length; i < l; i++) {\n        (owners[i]).$forceUpdate();\n      }\n\n      if (renderCompleted) {\n        owners.length = 0;\n        if (timerLoading !== null) {\n          clearTimeout(timerLoading);\n          timerLoading = null;\n        }\n        if (timerTimeout !== null) {\n          clearTimeout(timerTimeout);\n          timerTimeout = null;\n        }\n      }\n    };\n\n    var resolve = once(function (res) {\n      // cache resolved\n      factory.resolved = ensureCtor(res, baseCtor);\n      // invoke callbacks only if this is not a synchronous resolve\n      // (async resolves are shimmed as synchronous during SSR)\n      if (!sync) {\n        forceRender(true);\n      } else {\n        owners.length = 0;\n      }\n    });\n\n    var reject = once(function (reason) {\n      process.env.NODE_ENV !== 'production' && warn(\n        \""Failed to resolve async component: \"" + (String(factory)) +\n        (reason ? (\""\\nReason: \"" + reason) : '')\n      );\n      if (isDef(factory.errorComp)) {\n        factory.error = true;\n        forceRender(true);\n      }\n    });\n\n    var res = factory(resolve, reject);\n\n    if (isObject(res)) {\n      if (isPromise(res)) {\n        // () => Promise\n        if (isUndef(factory.resolved)) {\n          res.then(resolve, reject);\n        }\n      } else if (isPromise(res.component)) {\n        res.component.then(resolve, reject);\n\n        if (isDef(res.error)) {\n          factory.errorComp = ensureCtor(res.error, baseCtor);\n        }\n\n        if (isDef(res.loading)) {\n          factory.loadingComp = ensureCtor(res.loading, baseCtor);\n          if (res.delay === 0) {\n            factory.loading = true;\n          } else {\n            timerLoading = setTimeout(function () {\n              timerLoading = null;\n              if (isUndef(factory.resolved) && isUndef(factory.error)) {\n                factory.loading = true;\n                forceRender(false);\n              }\n            }, res.delay || 200);\n          }\n        }\n\n        if (isDef(res.timeout)) {\n          timerTimeout = setTimeout(function () {\n            timerTimeout = null;\n            if (isUndef(factory.resolved)) {\n              reject(\n                process.env.NODE_ENV !== 'production'\n                  ? (\""timeout (\"" + (res.timeout) + \""ms)\"")\n                  : null\n              );\n            }\n          }, res.timeout);\n        }\n      }\n    }\n\n    sync = false;\n    // return in case resolved synchronously\n    return factory.loading\n      ? factory.loadingComp\n      : factory.resolved\n  }\n}\n\n/*  */\n\nfunction isAsyncPlaceholder (node) {\n  return node.isComment && node.asyncFactory\n}\n\n/*  */\n\nfunction getFirstComponentChild (children) {\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      var c = children[i];\n      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n        return c\n      }\n    }\n  }\n}\n\n/*  */\n\n/*  */\n\nfunction initEvents (vm) {\n  vm._events = Object.create(null);\n  vm._hasHookEvent = false;\n  // init parent attached events\n  var listeners = vm.$options._parentListeners;\n  if (listeners) {\n    updateComponentListeners(vm, listeners);\n  }\n}\n\nvar target;\n\nfunction add (event, fn) {\n  target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n  target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n  var _target = target;\n  return function onceHandler () {\n    var res = fn.apply(null, arguments);\n    if (res !== null) {\n      _target.$off(event, onceHandler);\n    }\n  }\n}\n\nfunction updateComponentListeners (\n  vm,\n  listeners,\n  oldListeners\n) {\n  target = vm;\n  updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n  target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n  var hookRE = /^hook:/;\n  Vue.prototype.$on = function (event, fn) {\n    var vm = this;\n    if (Array.isArray(event)) {\n      for (var i = 0, l = event.length; i < l; i++) {\n        vm.$on(event[i], fn);\n      }\n    } else {\n      (vm._events[event] || (vm._events[event] = [])).push(fn);\n      // optimize hook:event cost by using a boolean flag marked at registration\n      // instead of a hash lookup\n      if (hookRE.test(event)) {\n        vm._hasHookEvent = true;\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$once = function (event, fn) {\n    var vm = this;\n    function on () {\n      vm.$off(event, on);\n      fn.apply(vm, arguments);\n    }\n    on.fn = fn;\n    vm.$on(event, on);\n    return vm\n  };\n\n  Vue.prototype.$off = function (event, fn) {\n    var vm = this;\n    // all\n    if (!arguments.length) {\n      vm._events = Object.create(null);\n      return vm\n    }\n    // array of events\n    if (Array.isArray(event)) {\n      for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n        vm.$off(event[i$1], fn);\n      }\n      return vm\n    }\n    // specific event\n    var cbs = vm._events[event];\n    if (!cbs) {\n      return vm\n    }\n    if (!fn) {\n      vm._events[event] = null;\n      return vm\n    }\n    // specific handler\n    var cb;\n    var i = cbs.length;\n    while (i--) {\n      cb = cbs[i];\n      if (cb === fn || cb.fn === fn) {\n        cbs.splice(i, 1);\n        break\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$emit = function (event) {\n    var vm = this;\n    if (process.env.NODE_ENV !== 'production') {\n      var lowerCaseEvent = event.toLowerCase();\n      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n        tip(\n          \""Event \\\""\"" + lowerCaseEvent + \""\\\"" is emitted in component \"" +\n          (formatComponentName(vm)) + \"" but the handler is registered for \\\""\"" + event + \""\\\"". \"" +\n          \""Note that HTML attributes are case-insensitive and you cannot use \"" +\n          \""v-on to listen to camelCase events when using in-DOM templates. \"" +\n          \""You should probably use \\\""\"" + (hyphenate(event)) + \""\\\"" instead of \\\""\"" + event + \""\\\"".\""\n        );\n      }\n    }\n    var cbs = vm._events[event];\n    if (cbs) {\n      cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n      var args = toArray(arguments, 1);\n      var info = \""event handler for \\\""\"" + event + \""\\\""\"";\n      for (var i = 0, l = cbs.length; i < l; i++) {\n        invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n      }\n    }\n    return vm\n  };\n}\n\n/*  */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n  var prevActiveInstance = activeInstance;\n  activeInstance = vm;\n  return function () {\n    activeInstance = prevActiveInstance;\n  }\n}\n\nfunction initLifecycle (vm) {\n  var options = vm.$options;\n\n  // locate first non-abstract parent\n  var parent = options.parent;\n  if (parent && !options.abstract) {\n    while (parent.$options.abstract && parent.$parent) {\n      parent = parent.$parent;\n    }\n    parent.$children.push(vm);\n  }\n\n  vm.$parent = parent;\n  vm.$root = parent ? parent.$root : vm;\n\n  vm.$children = [];\n  vm.$refs = {};\n\n  vm._watcher = null;\n  vm._inactive = null;\n  vm._directInactive = false;\n  vm._isMounted = false;\n  vm._isDestroyed = false;\n  vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n  Vue.prototype._update = function (vnode, hydrating) {\n    var vm = this;\n    var prevEl = vm.$el;\n    var prevVnode = vm._vnode;\n    var restoreActiveInstance = setActiveInstance(vm);\n    vm._vnode = vnode;\n    // Vue.prototype.__patch__ is injected in entry points\n    // based on the rendering backend used.\n    if (!prevVnode) {\n      // initial render\n      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n    } else {\n      // updates\n      vm.$el = vm.__patch__(prevVnode, vnode);\n    }\n    restoreActiveInstance();\n    // update __vue__ reference\n    if (prevEl) {\n      prevEl.__vue__ = null;\n    }\n    if (vm.$el) {\n      vm.$el.__vue__ = vm;\n    }\n    // if parent is an HOC, update its $el as well\n    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n      vm.$parent.$el = vm.$el;\n    }\n    // updated hook is called by the scheduler to ensure that children are\n    // updated in a parent's updated hook.\n  };\n\n  Vue.prototype.$forceUpdate = function () {\n    var vm = this;\n    if (vm._watcher) {\n      vm._watcher.update();\n    }\n  };\n\n  Vue.prototype.$destroy = function () {\n    var vm = this;\n    if (vm._isBeingDestroyed) {\n      return\n    }\n    callHook(vm, 'beforeDestroy');\n    vm._isBeingDestroyed = true;\n    // remove self from parent\n    var parent = vm.$parent;\n    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n      remove(parent.$children, vm);\n    }\n    // teardown watchers\n    if (vm._watcher) {\n      vm._watcher.teardown();\n    }\n    var i = vm._watchers.length;\n    while (i--) {\n      vm._watchers[i].teardown();\n    }\n    // remove reference from data ob\n    // frozen object may not have observer.\n    if (vm._data.__ob__) {\n      vm._data.__ob__.vmCount--;\n    }\n    // call the last hook...\n    vm._isDestroyed = true;\n    // invoke destroy hooks on current rendered tree\n    vm.__patch__(vm._vnode, null);\n    // fire destroyed hook\n    callHook(vm, 'destroyed');\n    // turn off all instance listeners.\n    vm.$off();\n    // remove __vue__ reference\n    if (vm.$el) {\n      vm.$el.__vue__ = null;\n    }\n    // release circular reference (#6759)\n    if (vm.$vnode) {\n      vm.$vnode.parent = null;\n    }\n  };\n}\n\nfunction mountComponent (\n  vm,\n  el,\n  hydrating\n) {\n  vm.$el = el;\n  if (!vm.$options.render) {\n    vm.$options.render = createEmptyVNode;\n    if (process.env.NODE_ENV !== 'production') {\n      /* istanbul ignore if */\n      if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n        vm.$options.el || el) {\n        warn(\n          'You are using the runtime-only build of Vue where the template ' +\n          'compiler is not available. Either pre-compile the templates into ' +\n          'render functions, or use the compiler-included build.',\n          vm\n        );\n      } else {\n        warn(\n          'Failed to mount component: template or render function not defined.',\n          vm\n        );\n      }\n    }\n  }\n  callHook(vm, 'beforeMount');\n\n  var updateComponent;\n  /* istanbul ignore if */\n  if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n    updateComponent = function () {\n      var name = vm._name;\n      var id = vm._uid;\n      var startTag = \""vue-perf-start:\"" + id;\n      var endTag = \""vue-perf-end:\"" + id;\n\n      mark(startTag);\n      var vnode = vm._render();\n      mark(endTag);\n      measure((\""vue \"" + name + \"" render\""), startTag, endTag);\n\n      mark(startTag);\n      vm._update(vnode, hydrating);\n      mark(endTag);\n      measure((\""vue \"" + name + \"" patch\""), startTag, endTag);\n    };\n  } else {\n    updateComponent = function () {\n      vm._update(vm._render(), hydrating);\n    };\n  }\n\n  // we set this to vm._watcher inside the watcher's constructor\n  // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n  // component's mounted hook), which relies on vm._watcher being already defined\n  new Watcher(vm, updateComponent, noop, {\n    before: function before () {\n      if (vm._isMounted && !vm._isDestroyed) {\n        callHook(vm, 'beforeUpdate');\n      }\n    }\n  }, true /* isRenderWatcher */);\n  hydrating = false;\n\n  // manually mounted instance, call mounted on self\n  // mounted is called for render-created child components in its inserted hook\n  if (vm.$vnode == null) {\n    vm._isMounted = true;\n    callHook(vm, 'mounted');\n  }\n  return vm\n}\n\nfunction updateChildComponent (\n  vm,\n  propsData,\n  listeners,\n  parentVnode,\n  renderChildren\n) {\n  if (process.env.NODE_ENV !== 'production') {\n    isUpdatingChildComponent = true;\n  }\n\n  // determine whether component has slot children\n  // we need to do this before overwriting $options._renderChildren.\n\n  // check if there are dynamic scopedSlots (hand-written or compiled but with\n  // dynamic slot names). Static scoped slots compiled from template has the\n  // \""$stable\"" marker.\n  var newScopedSlots = parentVnode.data.scopedSlots;\n  var oldScopedSlots = vm.$scopedSlots;\n  var hasDynamicScopedSlot = !!(\n    (newScopedSlots && !newScopedSlots.$stable) ||\n    (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n    (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n  );\n\n  // Any static slot children from the parent may have changed during parent's\n  // update. Dynamic scoped slots may also have changed. In such cases, a forced\n  // update is necessary to ensure correctness.\n  var needsForceUpdate = !!(\n    renderChildren ||               // has new static slots\n    vm.$options._renderChildren ||  // has old static slots\n    hasDynamicScopedSlot\n  );\n\n  vm.$options._parentVnode = parentVnode;\n  vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n  if (vm._vnode) { // update child tree's parent\n    vm._vnode.parent = parentVnode;\n  }\n  vm.$options._renderChildren = renderChildren;\n\n  // update $attrs and $listeners hash\n  // these are also reactive so they may trigger child update if the child\n  // used them during render\n  vm.$attrs = parentVnode.data.attrs || emptyObject;\n  vm.$listeners = listeners || emptyObject;\n\n  // update props\n  if (propsData && vm.$options.props) {\n    toggleObserving(false);\n    var props = vm._props;\n    var propKeys = vm.$options._propKeys || [];\n    for (var i = 0; i < propKeys.length; i++) {\n      var key = propKeys[i];\n      var propOptions = vm.$options.props; // wtf flow?\n      props[key] = validateProp(key, propOptions, propsData, vm);\n    }\n    toggleObserving(true);\n    // keep a copy of raw propsData\n    vm.$options.propsData = propsData;\n  }\n\n  // update listeners\n  listeners = listeners || emptyObject;\n  var oldListeners = vm.$options._parentListeners;\n  vm.$options._parentListeners = listeners;\n  updateComponentListeners(vm, listeners, oldListeners);\n\n  // resolve slots + force update if has children\n  if (needsForceUpdate) {\n    vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n    vm.$forceUpdate();\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    isUpdatingChildComponent = false;\n  }\n}\n\nfunction isInInactiveTree (vm) {\n  while (vm && (vm = vm.$parent)) {\n    if (vm._inactive) { return true }\n  }\n  return false\n}\n\nfunction activateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = false;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  } else if (vm._directInactive) {\n    return\n  }\n  if (vm._inactive || vm._inactive === null) {\n    vm._inactive = false;\n    for (var i = 0; i < vm.$children.length; i++) {\n      activateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'activated');\n  }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = true;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  }\n  if (!vm._inactive) {\n    vm._inactive = true;\n    for (var i = 0; i < vm.$children.length; i++) {\n      deactivateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'deactivated');\n  }\n}\n\nfunction callHook (vm, hook) {\n  // #7573 disable dep collection when invoking lifecycle hooks\n  pushTarget();\n  var handlers = vm.$options[hook];\n  var info = hook + \"" hook\"";\n  if (handlers) {\n    for (var i = 0, j = handlers.length; i < j; i++) {\n      invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n    }\n  }\n  if (vm._hasHookEvent) {\n    vm.$emit('hook:' + hook);\n  }\n  popTarget();\n}\n\n/*  */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n  index = queue.length = activatedChildren.length = 0;\n  has = {};\n  if (process.env.NODE_ENV !== 'production') {\n    circular = {};\n  }\n  waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n  var performance = window.performance;\n  if (\n    performance &&\n    typeof performance.now === 'function' &&\n    getNow() > document.createEvent('Event').timeStamp\n  ) {\n    // if the event timestamp, although evaluated AFTER the Date.now(), is\n    // smaller than it, it means the event is using a hi-res timestamp,\n    // and we need to use the hi-res version for event listener timestamps as\n    // well.\n    getNow = function () { return performance.now(); };\n  }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n  currentFlushTimestamp = getNow();\n  flushing = true;\n  var watcher, id;\n\n  // Sort queue before flush.\n  // This ensures that:\n  // 1. Components are updated from parent to child. (because parent is always\n  //    created before the child)\n  // 2. A component's user watchers are run before its render watcher (because\n  //    user watchers are created before the render watcher)\n  // 3. If a component is destroyed during a parent component's watcher run,\n  //    its watchers can be skipped.\n  queue.sort(function (a, b) { return a.id - b.id; });\n\n  // do not cache length because more watchers might be pushed\n  // as we run existing watchers\n  for (index = 0; index < queue.length; index++) {\n    watcher = queue[index];\n    if (watcher.before) {\n      watcher.before();\n    }\n    id = watcher.id;\n    has[id] = null;\n    watcher.run();\n    // in dev build, check and stop circular updates.\n    if (process.env.NODE_ENV !== 'production' && has[id] != null) {\n      circular[id] = (circular[id] || 0) + 1;\n      if (circular[id] > MAX_UPDATE_COUNT) {\n        warn(\n          'You may have an infinite update loop ' + (\n            watcher.user\n              ? (\""in watcher with expression \\\""\"" + (watcher.expression) + \""\\\""\"")\n              : \""in a component render function.\""\n          ),\n          watcher.vm\n        );\n        break\n      }\n    }\n  }\n\n  // keep copies of post queues before resetting state\n  var activatedQueue = activatedChildren.slice();\n  var updatedQueue = queue.slice();\n\n  resetSchedulerState();\n\n  // call component updated and activated hooks\n  callActivatedHooks(activatedQueue);\n  callUpdatedHooks(updatedQueue);\n\n  // devtool hook\n  /* istanbul ignore if */\n  if (devtools && config.devtools) {\n    devtools.emit('flush');\n  }\n}\n\nfunction callUpdatedHooks (queue) {\n  var i = queue.length;\n  while (i--) {\n    var watcher = queue[i];\n    var vm = watcher.vm;\n    if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n      callHook(vm, 'updated');\n    }\n  }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n  // setting _inactive to false here so that a render function can\n  // rely on checking whether it's in an inactive tree (e.g. router-view)\n  vm._inactive = false;\n  activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n  for (var i = 0; i < queue.length; i++) {\n    queue[i]._inactive = true;\n    activateChildComponent(queue[i], true /* true */);\n  }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n  var id = watcher.id;\n  if (has[id] == null) {\n    has[id] = true;\n    if (!flushing) {\n      queue.push(watcher);\n    } else {\n      // if already flushing, splice the watcher based on its id\n      // if already past its id, it will be run next immediately.\n      var i = queue.length - 1;\n      while (i > index && queue[i].id > watcher.id) {\n        i--;\n      }\n      queue.splice(i + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n      waiting = true;\n\n      if (process.env.NODE_ENV !== 'production' && !config.async) {\n        flushSchedulerQueue();\n        return\n      }\n      nextTick(flushSchedulerQueue);\n    }\n  }\n}\n\n/*  */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n  vm,\n  expOrFn,\n  cb,\n  options,\n  isRenderWatcher\n) {\n  this.vm = vm;\n  if (isRenderWatcher) {\n    vm._watcher = this;\n  }\n  vm._watchers.push(this);\n  // options\n  if (options) {\n    this.deep = !!options.deep;\n    this.user = !!options.user;\n    this.lazy = !!options.lazy;\n    this.sync = !!options.sync;\n    this.before = options.before;\n  } else {\n    this.deep = this.user = this.lazy = this.sync = false;\n  }\n  this.cb = cb;\n  this.id = ++uid$2; // uid for batching\n  this.active = true;\n  this.dirty = this.lazy; // for lazy watchers\n  this.deps = [];\n  this.newDeps = [];\n  this.depIds = new _Set();\n  this.newDepIds = new _Set();\n  this.expression = process.env.NODE_ENV !== 'production'\n    ? expOrFn.toString()\n    : '';\n  // parse expression for getter\n  if (typeof expOrFn === 'function') {\n    this.getter = expOrFn;\n  } else {\n    this.getter = parsePath(expOrFn);\n    if (!this.getter) {\n      this.getter = noop;\n      process.env.NODE_ENV !== 'production' && warn(\n        \""Failed watching path: \\\""\"" + expOrFn + \""\\\"" \"" +\n        'Watcher only accepts simple dot-delimited paths. ' +\n        'For full control, use a function instead.',\n        vm\n      );\n    }\n  }\n  this.value = this.lazy\n    ? undefined\n    : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n  pushTarget(this);\n  var value;\n  var vm = this.vm;\n  try {\n    value = this.getter.call(vm, vm);\n  } catch (e) {\n    if (this.user) {\n      handleError(e, vm, (\""getter for watcher \\\""\"" + (this.expression) + \""\\\""\""));\n    } else {\n      throw e\n    }\n  } finally {\n    // \""touch\"" every property so they are all tracked as\n    // dependencies for deep watching\n    if (this.deep) {\n      traverse(value);\n    }\n    popTarget();\n    this.cleanupDeps();\n  }\n  return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n  var id = dep.id;\n  if (!this.newDepIds.has(id)) {\n    this.newDepIds.add(id);\n    this.newDeps.push(dep);\n    if (!this.depIds.has(id)) {\n      dep.addSub(this);\n    }\n  }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n  var i = this.deps.length;\n  while (i--) {\n    var dep = this.deps[i];\n    if (!this.newDepIds.has(dep.id)) {\n      dep.removeSub(this);\n    }\n  }\n  var tmp = this.depIds;\n  this.depIds = this.newDepIds;\n  this.newDepIds = tmp;\n  this.newDepIds.clear();\n  tmp = this.deps;\n  this.deps = this.newDeps;\n  this.newDeps = tmp;\n  this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n  /* istanbul ignore else */\n  if (this.lazy) {\n    this.dirty = true;\n  } else if (this.sync) {\n    this.run();\n  } else {\n    queueWatcher(this);\n  }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n  if (this.active) {\n    var value = this.get();\n    if (\n      value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated.\n      isObject(value) ||\n      this.deep\n    ) {\n      // set new value\n      var oldValue = this.value;\n      this.value = value;\n      if (this.user) {\n        try {\n          this.cb.call(this.vm, value, oldValue);\n        } catch (e) {\n          handleError(e, this.vm, (\""callback for watcher \\\""\"" + (this.expression) + \""\\\""\""));\n        }\n      } else {\n        this.cb.call(this.vm, value, oldValue);\n      }\n    }\n  }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n  this.value = this.get();\n  this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n  var i = this.deps.length;\n  while (i--) {\n    this.deps[i].depend();\n  }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n  if (this.active) {\n    // remove self from vm's watcher list\n    // this is a somewhat expensive operation so we skip it\n    // if the vm is being destroyed.\n    if (!this.vm._isBeingDestroyed) {\n      remove(this.vm._watchers, this);\n    }\n    var i = this.deps.length;\n    while (i--) {\n      this.deps[i].removeSub(this);\n    }\n    this.active = false;\n  }\n};\n\n/*  */\n\nvar sharedPropertyDefinition = {\n  enumerable: true,\n  configurable: true,\n  get: noop,\n  set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n  sharedPropertyDefinition.get = function proxyGetter () {\n    return this[sourceKey][key]\n  };\n  sharedPropertyDefinition.set = function proxySetter (val) {\n    this[sourceKey][key] = val;\n  };\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n  vm._watchers = [];\n  var opts = vm.$options;\n  if (opts.props) { initProps(vm, opts.props); }\n  if (opts.methods) { initMethods(vm, opts.methods); }\n  if (opts.data) {\n    initData(vm);\n  } else {\n    observe(vm._data = {}, true /* asRootData */);\n  }\n  if (opts.computed) { initComputed(vm, opts.computed); }\n  if (opts.watch && opts.watch !== nativeWatch) {\n    initWatch(vm, opts.watch);\n  }\n}\n\nfunction initProps (vm, propsOptions) {\n  var propsData = vm.$options.propsData || {};\n  var props = vm._props = {};\n  // cache prop keys so that future props updates can iterate using Array\n  // instead of dynamic object key enumeration.\n  var keys = vm.$options._propKeys = [];\n  var isRoot = !vm.$parent;\n  // root instance props should be converted\n  if (!isRoot) {\n    toggleObserving(false);\n  }\n  var loop = function ( key ) {\n    keys.push(key);\n    var value = validateProp(key, propsOptions, propsData, vm);\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== 'production') {\n      var hyphenatedKey = hyphenate(key);\n      if (isReservedAttribute(hyphenatedKey) ||\n          config.isReservedAttr(hyphenatedKey)) {\n        warn(\n          (\""\\\""\"" + hyphenatedKey + \""\\\"" is a reserved attribute and cannot be used as component prop.\""),\n          vm\n        );\n      }\n      defineReactive$$1(props, key, value, function () {\n        if (!isRoot && !isUpdatingChildComponent) {\n          warn(\n            \""Avoid mutating a prop directly since the value will be \"" +\n            \""overwritten whenever the parent component re-renders. \"" +\n            \""Instead, use a data or computed property based on the prop's \"" +\n            \""value. Prop being mutated: \\\""\"" + key + \""\\\""\"",\n            vm\n          );\n        }\n      });\n    } else {\n      defineReactive$$1(props, key, value);\n    }\n    // static props are already proxied on the component's prototype\n    // during Vue.extend(). We only need to proxy props defined at\n    // instantiation here.\n    if (!(key in vm)) {\n      proxy(vm, \""_props\"", key);\n    }\n  };\n\n  for (var key in propsOptions) loop( key );\n  toggleObserving(true);\n}\n\nfunction initData (vm) {\n  var data = vm.$options.data;\n  data = vm._data = typeof data === 'function'\n    ? getData(data, vm)\n    : data || {};\n  if (!isPlainObject(data)) {\n    data = {};\n    process.env.NODE_ENV !== 'production' && warn(\n      'data functions should return an object:\\n' +\n      'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n      vm\n    );\n  }\n  // proxy data on instance\n  var keys = Object.keys(data);\n  var props = vm.$options.props;\n  var methods = vm.$options.methods;\n  var i = keys.length;\n  while (i--) {\n    var key = keys[i];\n    if (process.env.NODE_ENV !== 'production') {\n      if (methods && hasOwn(methods, key)) {\n        warn(\n          (\""Method \\\""\"" + key + \""\\\"" has already been defined as a data property.\""),\n          vm\n        );\n      }\n    }\n    if (props && hasOwn(props, key)) {\n      process.env.NODE_ENV !== 'production' && warn(\n        \""The data property \\\""\"" + key + \""\\\"" is already declared as a prop. \"" +\n        \""Use prop default value instead.\"",\n        vm\n      );\n    } else if (!isReserved(key)) {\n      proxy(vm, \""_data\"", key);\n    }\n  }\n  // observe data\n  observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n  // #7573 disable dep collection when invoking data getters\n  pushTarget();\n  try {\n    return data.call(vm, vm)\n  } catch (e) {\n    handleError(e, vm, \""data()\"");\n    return {}\n  } finally {\n    popTarget();\n  }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n  // $flow-disable-line\n  var watchers = vm._computedWatchers = Object.create(null);\n  // computed properties are just getters during SSR\n  var isSSR = isServerRendering();\n\n  for (var key in computed) {\n    var userDef = computed[key];\n    var getter = typeof userDef === 'function' ? userDef : userDef.get;\n    if (process.env.NODE_ENV !== 'production' && getter == null) {\n      warn(\n        (\""Getter is missing for computed property \\\""\"" + key + \""\\\"".\""),\n        vm\n      );\n    }\n\n    if (!isSSR) {\n      // create internal watcher for the computed property.\n      watchers[key] = new Watcher(\n        vm,\n        getter || noop,\n        noop,\n        computedWatcherOptions\n      );\n    }\n\n    // component-defined computed properties are already defined on the\n    // component prototype. We only need to define computed properties defined\n    // at instantiation here.\n    if (!(key in vm)) {\n      defineComputed(vm, key, userDef);\n    } else if (process.env.NODE_ENV !== 'production') {\n      if (key in vm.$data) {\n        warn((\""The computed property \\\""\"" + key + \""\\\"" is already defined in data.\""), vm);\n      } else if (vm.$options.props && key in vm.$options.props) {\n        warn((\""The computed property \\\""\"" + key + \""\\\"" is already defined as a prop.\""), vm);\n      }\n    }\n  }\n}\n\nfunction defineComputed (\n  target,\n  key,\n  userDef\n) {\n  var shouldCache = !isServerRendering();\n  if (typeof userDef === 'function') {\n    sharedPropertyDefinition.get = shouldCache\n      ? createComputedGetter(key)\n      : createGetterInvoker(userDef);\n    sharedPropertyDefinition.set = noop;\n  } else {\n    sharedPropertyDefinition.get = userDef.get\n      ? shouldCache && userDef.cache !== false\n        ? createComputedGetter(key)\n        : createGetterInvoker(userDef.get)\n      : noop;\n    sharedPropertyDefinition.set = userDef.set || noop;\n  }\n  if (process.env.NODE_ENV !== 'production' &&\n      sharedPropertyDefinition.set === noop) {\n    sharedPropertyDefinition.set = function () {\n      warn(\n        (\""Computed property \\\""\"" + key + \""\\\"" was assigned to but it has no setter.\""),\n        this\n      );\n    };\n  }\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n  return function computedGetter () {\n    var watcher = this._computedWatchers && this._computedWatchers[key];\n    if (watcher) {\n      if (watcher.dirty) {\n        watcher.evaluate();\n      }\n      if (Dep.target) {\n        watcher.depend();\n      }\n      return watcher.value\n    }\n  }\n}\n\nfunction createGetterInvoker(fn) {\n  return function computedGetter () {\n    return fn.call(this, this)\n  }\n}\n\nfunction initMethods (vm, methods) {\n  var props = vm.$options.props;\n  for (var key in methods) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof methods[key] !== 'function') {\n        warn(\n          \""Method \\\""\"" + key + \""\\\"" has type \\\""\"" + (typeof methods[key]) + \""\\\"" in the component definition. \"" +\n          \""Did you reference the function correctly?\"",\n          vm\n        );\n      }\n      if (props && hasOwn(props, key)) {\n        warn(\n          (\""Method \\\""\"" + key + \""\\\"" has already been defined as a prop.\""),\n          vm\n        );\n      }\n      if ((key in vm) && isReserved(key)) {\n        warn(\n          \""Method \\\""\"" + key + \""\\\"" conflicts with an existing Vue instance method. \"" +\n          \""Avoid defining component methods that start with _ or $.\""\n        );\n      }\n    }\n    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n  }\n}\n\nfunction initWatch (vm, watch) {\n  for (var key in watch) {\n    var handler = watch[key];\n    if (Array.isArray(handler)) {\n      for (var i = 0; i < handler.length; i++) {\n        createWatcher(vm, key, handler[i]);\n      }\n    } else {\n      createWatcher(vm, key, handler);\n    }\n  }\n}\n\nfunction createWatcher (\n  vm,\n  expOrFn,\n  handler,\n  options\n) {\n  if (isPlainObject(handler)) {\n    options = handler;\n    handler = handler.handler;\n  }\n  if (typeof handler === 'string') {\n    handler = vm[handler];\n  }\n  return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n  // flow somehow has problems with directly declared definition object\n  // when using Object.defineProperty, so we have to procedurally build up\n  // the object here.\n  var dataDef = {};\n  dataDef.get = function () { return this._data };\n  var propsDef = {};\n  propsDef.get = function () { return this._props };\n  if (process.env.NODE_ENV !== 'production') {\n    dataDef.set = function () {\n      warn(\n        'Avoid replacing instance root $data. ' +\n        'Use nested data properties instead.',\n        this\n      );\n    };\n    propsDef.set = function () {\n      warn(\""$props is readonly.\"", this);\n    };\n  }\n  Object.defineProperty(Vue.prototype, '$data', dataDef);\n  Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n  Vue.prototype.$set = set;\n  Vue.prototype.$delete = del;\n\n  Vue.prototype.$watch = function (\n    expOrFn,\n    cb,\n    options\n  ) {\n    var vm = this;\n    if (isPlainObject(cb)) {\n      return createWatcher(vm, expOrFn, cb, options)\n    }\n    options = options || {};\n    options.user = true;\n    var watcher = new Watcher(vm, expOrFn, cb, options);\n    if (options.immediate) {\n      try {\n        cb.call(vm, watcher.value);\n      } catch (error) {\n        handleError(error, vm, (\""callback for immediate watcher \\\""\"" + (watcher.expression) + \""\\\""\""));\n      }\n    }\n    return function unwatchFn () {\n      watcher.teardown();\n    }\n  };\n}\n\n/*  */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n  Vue.prototype._init = function (options) {\n    var vm = this;\n    // a uid\n    vm._uid = uid$3++;\n\n    var startTag, endTag;\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n      startTag = \""vue-perf-start:\"" + (vm._uid);\n      endTag = \""vue-perf-end:\"" + (vm._uid);\n      mark(startTag);\n    }\n\n    // a flag to avoid this being observed\n    vm._isVue = true;\n    // merge options\n    if (options && options._isComponent) {\n      // optimize internal component instantiation\n      // since dynamic options merging is pretty slow, and none of the\n      // internal component options needs special treatment.\n      initInternalComponent(vm, options);\n    } else {\n      vm.$options = mergeOptions(\n        resolveConstructorOptions(vm.constructor),\n        options || {},\n        vm\n      );\n    }\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== 'production') {\n      initProxy(vm);\n    } else {\n      vm._renderProxy = vm;\n    }\n    // expose real self\n    vm._self = vm;\n    initLifecycle(vm);\n    initEvents(vm);\n    initRender(vm);\n    callHook(vm, 'beforeCreate');\n    initInjections(vm); // resolve injections before data/props\n    initState(vm);\n    initProvide(vm); // resolve provide after data/props\n    callHook(vm, 'created');\n\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n      vm._name = formatComponentName(vm, false);\n      mark(endTag);\n      measure((\""vue \"" + (vm._name) + \"" init\""), startTag, endTag);\n    }\n\n    if (vm.$options.el) {\n      vm.$mount(vm.$options.el);\n    }\n  };\n}\n\nfunction initInternalComponent (vm, options) {\n  var opts = vm.$options = Object.create(vm.constructor.options);\n  // doing this because it's faster than dynamic enumeration.\n  var parentVnode = options._parentVnode;\n  opts.parent = options.parent;\n  opts._parentVnode = parentVnode;\n\n  var vnodeComponentOptions = parentVnode.componentOptions;\n  opts.propsData = vnodeComponentOptions.propsData;\n  opts._parentListeners = vnodeComponentOptions.listeners;\n  opts._renderChildren = vnodeComponentOptions.children;\n  opts._componentTag = vnodeComponentOptions.tag;\n\n  if (options.render) {\n    opts.render = options.render;\n    opts.staticRenderFns = options.staticRenderFns;\n  }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n  var options = Ctor.options;\n  if (Ctor.super) {\n    var superOptions = resolveConstructorOptions(Ctor.super);\n    var cachedSuperOptions = Ctor.superOptions;\n    if (superOptions !== cachedSuperOptions) {\n      // super option changed,\n      // need to resolve new options.\n      Ctor.superOptions = superOptions;\n      // check if there are any late-modified/attached options (#4976)\n      var modifiedOptions = resolveModifiedOptions(Ctor);\n      // update base extend options\n      if (modifiedOptions) {\n        extend(Ctor.extendOptions, modifiedOptions);\n      }\n      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n      if (options.name) {\n        options.components[options.name] = Ctor;\n      }\n    }\n  }\n  return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n  var modified;\n  var latest = Ctor.options;\n  var sealed = Ctor.sealedOptions;\n  for (var key in latest) {\n    if (latest[key] !== sealed[key]) {\n      if (!modified) { modified = {}; }\n      modified[key] = latest[key];\n    }\n  }\n  return modified\n}\n\nfunction Vue (options) {\n  if (process.env.NODE_ENV !== 'production' &&\n    !(this instanceof Vue)\n  ) {\n    warn('Vue is a constructor and should be called with the `new` keyword');\n  }\n  this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/*  */\n\nfunction initUse (Vue) {\n  Vue.use = function (plugin) {\n    var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n    if (installedPlugins.indexOf(plugin) > -1) {\n      return this\n    }\n\n    // additional parameters\n    var args = toArray(arguments, 1);\n    args.unshift(this);\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args);\n    } else if (typeof plugin === 'function') {\n      plugin.apply(null, args);\n    }\n    installedPlugins.push(plugin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initMixin$1 (Vue) {\n  Vue.mixin = function (mixin) {\n    this.options = mergeOptions(this.options, mixin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initExtend (Vue) {\n  /**\n   * Each instance constructor, including Vue, has a unique\n   * cid. This enables us to create wrapped \""child\n   * constructors\"" for prototypal inheritance and cache them.\n   */\n  Vue.cid = 0;\n  var cid = 1;\n\n  /**\n   * Class inheritance\n   */\n  Vue.extend = function (extendOptions) {\n    extendOptions = extendOptions || {};\n    var Super = this;\n    var SuperId = Super.cid;\n    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n    if (cachedCtors[SuperId]) {\n      return cachedCtors[SuperId]\n    }\n\n    var name = extendOptions.name || Super.options.name;\n    if (process.env.NODE_ENV !== 'production' && name) {\n      validateComponentName(name);\n    }\n\n    var Sub = function VueComponent (options) {\n      this._init(options);\n    };\n    Sub.prototype = Object.create(Super.prototype);\n    Sub.prototype.constructor = Sub;\n    Sub.cid = cid++;\n    Sub.options = mergeOptions(\n      Super.options,\n      extendOptions\n    );\n    Sub['super'] = Super;\n\n    // For props and computed properties, we define the proxy getters on\n    // the Vue instances at extension time, on the extended prototype. This\n    // avoids Object.defineProperty calls for each instance created.\n    if (Sub.options.props) {\n      initProps$1(Sub);\n    }\n    if (Sub.options.computed) {\n      initComputed$1(Sub);\n    }\n\n    // allow further extension/mixin/plugin usage\n    Sub.extend = Super.extend;\n    Sub.mixin = Super.mixin;\n    Sub.use = Super.use;\n\n    // create asset registers, so extended classes\n    // can have their private assets too.\n    ASSET_TYPES.forEach(function (type) {\n      Sub[type] = Super[type];\n    });\n    // enable recursive self-lookup\n    if (name) {\n      Sub.options.components[name] = Sub;\n    }\n\n    // keep a reference to the super options at extension time.\n    // later at instantiation we can check if Super's options have\n    // been updated.\n    Sub.superOptions = Super.options;\n    Sub.extendOptions = extendOptions;\n    Sub.sealedOptions = extend({}, Sub.options);\n\n    // cache constructor\n    cachedCtors[SuperId] = Sub;\n    return Sub\n  };\n}\n\nfunction initProps$1 (Comp) {\n  var props = Comp.options.props;\n  for (var key in props) {\n    proxy(Comp.prototype, \""_props\"", key);\n  }\n}\n\nfunction initComputed$1 (Comp) {\n  var computed = Comp.options.computed;\n  for (var key in computed) {\n    defineComputed(Comp.prototype, key, computed[key]);\n  }\n}\n\n/*  */\n\nfunction initAssetRegisters (Vue) {\n  /**\n   * Create asset registration methods.\n   */\n  ASSET_TYPES.forEach(function (type) {\n    Vue[type] = function (\n      id,\n      definition\n    ) {\n      if (!definition) {\n        return this.options[type + 's'][id]\n      } else {\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production' && type === 'component') {\n          validateComponentName(id);\n        }\n        if (type === 'component' && isPlainObject(definition)) {\n          definition.name = definition.name || id;\n          definition = this.options._base.extend(definition);\n        }\n        if (type === 'directive' && typeof definition === 'function') {\n          definition = { bind: definition, update: definition };\n        }\n        this.options[type + 's'][id] = definition;\n        return definition\n      }\n    };\n  });\n}\n\n/*  */\n\n\n\nfunction getComponentName (opts) {\n  return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n  if (Array.isArray(pattern)) {\n    return pattern.indexOf(name) > -1\n  } else if (typeof pattern === 'string') {\n    return pattern.split(',').indexOf(name) > -1\n  } else if (isRegExp(pattern)) {\n    return pattern.test(name)\n  }\n  /* istanbul ignore next */\n  return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n  var cache = keepAliveInstance.cache;\n  var keys = keepAliveInstance.keys;\n  var _vnode = keepAliveInstance._vnode;\n  for (var key in cache) {\n    var cachedNode = cache[key];\n    if (cachedNode) {\n      var name = getComponentName(cachedNode.componentOptions);\n      if (name && !filter(name)) {\n        pruneCacheEntry(cache, key, keys, _vnode);\n      }\n    }\n  }\n}\n\nfunction pruneCacheEntry (\n  cache,\n  key,\n  keys,\n  current\n) {\n  var cached$$1 = cache[key];\n  if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n    cached$$1.componentInstance.$destroy();\n  }\n  cache[key] = null;\n  remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n  name: 'keep-alive',\n  abstract: true,\n\n  props: {\n    include: patternTypes,\n    exclude: patternTypes,\n    max: [String, Number]\n  },\n\n  created: function created () {\n    this.cache = Object.create(null);\n    this.keys = [];\n  },\n\n  destroyed: function destroyed () {\n    for (var key in this.cache) {\n      pruneCacheEntry(this.cache, key, this.keys);\n    }\n  },\n\n  mounted: function mounted () {\n    var this$1 = this;\n\n    this.$watch('include', function (val) {\n      pruneCache(this$1, function (name) { return matches(val, name); });\n    });\n    this.$watch('exclude', function (val) {\n      pruneCache(this$1, function (name) { return !matches(val, name); });\n    });\n  },\n\n  render: function render () {\n    var slot = this.$slots.default;\n    var vnode = getFirstComponentChild(slot);\n    var componentOptions = vnode && vnode.componentOptions;\n    if (componentOptions) {\n      // check pattern\n      var name = getComponentName(componentOptions);\n      var ref = this;\n      var include = ref.include;\n      var exclude = ref.exclude;\n      if (\n        // not included\n        (include && (!name || !matches(include, name))) ||\n        // excluded\n        (exclude && name && matches(exclude, name))\n      ) {\n        return vnode\n      }\n\n      var ref$1 = this;\n      var cache = ref$1.cache;\n      var keys = ref$1.keys;\n      var key = vnode.key == null\n        // same constructor may get registered as different local components\n        // so cid alone is not enough (#3269)\n        ? componentOptions.Ctor.cid + (componentOptions.tag ? (\""::\"" + (componentOptions.tag)) : '')\n        : vnode.key;\n      if (cache[key]) {\n        vnode.componentInstance = cache[key].componentInstance;\n        // make current key freshest\n        remove(keys, key);\n        keys.push(key);\n      } else {\n        cache[key] = vnode;\n        keys.push(key);\n        // prune oldest entry\n        if (this.max && keys.length > parseInt(this.max)) {\n          pruneCacheEntry(cache, keys[0], keys, this._vnode);\n        }\n      }\n\n      vnode.data.keepAlive = true;\n    }\n    return vnode || (slot && slot[0])\n  }\n};\n\nvar builtInComponents = {\n  KeepAlive: KeepAlive\n};\n\n/*  */\n\nfunction initGlobalAPI (Vue) {\n  // config\n  var configDef = {};\n  configDef.get = function () { return config; };\n  if (process.env.NODE_ENV !== 'production') {\n    configDef.set = function () {\n      warn(\n        'Do not replace the Vue.config object, set individual fields instead.'\n      );\n    };\n  }\n  Object.defineProperty(Vue, 'config', configDef);\n\n  // exposed util methods.\n  // NOTE: these are not considered part of the public API - avoid relying on\n  // them unless you are aware of the risk.\n  Vue.util = {\n    warn: warn,\n    extend: extend,\n    mergeOptions: mergeOptions,\n    defineReactive: defineReactive$$1\n  };\n\n  Vue.set = set;\n  Vue.delete = del;\n  Vue.nextTick = nextTick;\n\n  // 2.6 explicit observable API\n  Vue.observable = function (obj) {\n    observe(obj);\n    return obj\n  };\n\n  Vue.options = Object.create(null);\n  ASSET_TYPES.forEach(function (type) {\n    Vue.options[type + 's'] = Object.create(null);\n  });\n\n  // this is used to identify the \""base\"" constructor to extend all plain-object\n  // components with in Weex's multi-instance scenarios.\n  Vue.options._base = Vue;\n\n  extend(Vue.options.components, builtInComponents);\n\n  initUse(Vue);\n  initMixin$1(Vue);\n  initExtend(Vue);\n  initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n  get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n  get: function get () {\n    /* istanbul ignore next */\n    return this.$vnode && this.$vnode.ssrContext\n  }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n  value: FunctionalRenderContext\n});\n\nVue.version = '2.6.10';\n\n/*  */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n  return (\n    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n    (attr === 'selected' && tag === 'option') ||\n    (attr === 'checked' && tag === 'input') ||\n    (attr === 'muted' && tag === 'video')\n  )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n  return isFalsyAttrValue(value) || value === 'false'\n    ? 'false'\n    // allow arbitrary string value for contenteditable\n    : key === 'contenteditable' && isValidContentEditableValue(value)\n      ? value\n      : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n  'required,reversed,scoped,seamless,selected,sortable,translate,' +\n  'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n  return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n  return val == null || val === false\n};\n\n/*  */\n\nfunction genClassForVnode (vnode) {\n  var data = vnode.data;\n  var parentNode = vnode;\n  var childNode = vnode;\n  while (isDef(childNode.componentInstance)) {\n    childNode = childNode.componentInstance._vnode;\n    if (childNode && childNode.data) {\n      data = mergeClassData(childNode.data, data);\n    }\n  }\n  while (isDef(parentNode = parentNode.parent)) {\n    if (parentNode && parentNode.data) {\n      data = mergeClassData(data, parentNode.data);\n    }\n  }\n  return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n  return {\n    staticClass: concat(child.staticClass, parent.staticClass),\n    class: isDef(child.class)\n      ? [child.class, parent.class]\n      : parent.class\n  }\n}\n\nfunction renderClass (\n  staticClass,\n  dynamicClass\n) {\n  if (isDef(staticClass) || isDef(dynamicClass)) {\n    return concat(staticClass, stringifyClass(dynamicClass))\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction concat (a, b) {\n  return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n  if (Array.isArray(value)) {\n    return stringifyArray(value)\n  }\n  if (isObject(value)) {\n    return stringifyObject(value)\n  }\n  if (typeof value === 'string') {\n    return value\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction stringifyArray (value) {\n  var res = '';\n  var stringified;\n  for (var i = 0, l = value.length; i < l; i++) {\n    if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n      if (res) { res += ' '; }\n      res += stringified;\n    }\n  }\n  return res\n}\n\nfunction stringifyObject (value) {\n  var res = '';\n  for (var key in value) {\n    if (value[key]) {\n      if (res) { res += ' '; }\n      res += key;\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar namespaceMap = {\n  svg: 'http://www.w3.org/2000/svg',\n  math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n  'html,body,base,head,link,meta,style,title,' +\n  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n  'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n  'embed,object,param,source,canvas,script,noscript,del,ins,' +\n  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n  'output,progress,select,textarea,' +\n  'details,dialog,menu,menuitem,summary,' +\n  'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n  'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n  true\n);\n\nvar isReservedTag = function (tag) {\n  return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n  if (isSVG(tag)) {\n    return 'svg'\n  }\n  // basic support for MathML\n  // note it doesn't support other MathML elements being component roots\n  if (tag === 'math') {\n    return 'math'\n  }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n  /* istanbul ignore if */\n  if (!inBrowser) {\n    return true\n  }\n  if (isReservedTag(tag)) {\n    return false\n  }\n  tag = tag.toLowerCase();\n  /* istanbul ignore if */\n  if (unknownElementCache[tag] != null) {\n    return unknownElementCache[tag]\n  }\n  var el = document.createElement(tag);\n  if (tag.indexOf('-') > -1) {\n    // http://stackoverflow.com/a/28210364/1070244\n    return (unknownElementCache[tag] = (\n      el.constructor === window.HTMLUnknownElement ||\n      el.constructor === window.HTMLElement\n    ))\n  } else {\n    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n  }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/*  */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n  if (typeof el === 'string') {\n    var selected = document.querySelector(el);\n    if (!selected) {\n      process.env.NODE_ENV !== 'production' && warn(\n        'Cannot find element: ' + el\n      );\n      return document.createElement('div')\n    }\n    return selected\n  } else {\n    return el\n  }\n}\n\n/*  */\n\nfunction createElement$1 (tagName, vnode) {\n  var elm = document.createElement(tagName);\n  if (tagName !== 'select') {\n    return elm\n  }\n  // false or null will remove the attribute but undefined will not\n  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n    elm.setAttribute('multiple', 'multiple');\n  }\n  return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n  return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n  return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n  return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n  parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n  node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n  node.appendChild(child);\n}\n\nfunction parentNode (node) {\n  return node.parentNode\n}\n\nfunction nextSibling (node) {\n  return node.nextSibling\n}\n\nfunction tagName (node) {\n  return node.tagName\n}\n\nfunction setTextContent (node, text) {\n  node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n  node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n  createElement: createElement$1,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  setStyleScope: setStyleScope\n});\n\n/*  */\n\nvar ref = {\n  create: function create (_, vnode) {\n    registerRef(vnode);\n  },\n  update: function update (oldVnode, vnode) {\n    if (oldVnode.data.ref !== vnode.data.ref) {\n      registerRef(oldVnode, true);\n      registerRef(vnode);\n    }\n  },\n  destroy: function destroy (vnode) {\n    registerRef(vnode, true);\n  }\n};\n\nfunction registerRef (vnode, isRemoval) {\n  var key = vnode.data.ref;\n  if (!isDef(key)) { return }\n\n  var vm = vnode.context;\n  var ref = vnode.componentInstance || vnode.elm;\n  var refs = vm.$refs;\n  if (isRemoval) {\n    if (Array.isArray(refs[key])) {\n      remove(refs[key], ref);\n    } else if (refs[key] === ref) {\n      refs[key] = undefined;\n    }\n  } else {\n    if (vnode.data.refInFor) {\n      if (!Array.isArray(refs[key])) {\n        refs[key] = [ref];\n      } else if (refs[key].indexOf(ref) < 0) {\n        // $flow-disable-line\n        refs[key].push(ref);\n      }\n    } else {\n      refs[key] = ref;\n    }\n  }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n  return (\n    a.key === b.key && (\n      (\n        a.tag === b.tag &&\n        a.isComment === b.isComment &&\n        isDef(a.data) === isDef(b.data) &&\n        sameInputType(a, b)\n      ) || (\n        isTrue(a.isAsyncPlaceholder) &&\n        a.asyncFactory === b.asyncFactory &&\n        isUndef(b.asyncFactory.error)\n      )\n    )\n  )\n}\n\nfunction sameInputType (a, b) {\n  if (a.tag !== 'input') { return true }\n  var i;\n  var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n  var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n  var i, key;\n  var map = {};\n  for (i = beginIdx; i <= endIdx; ++i) {\n    key = children[i].key;\n    if (isDef(key)) { map[key] = i; }\n  }\n  return map\n}\n\nfunction createPatchFunction (backend) {\n  var i, j;\n  var cbs = {};\n\n  var modules = backend.modules;\n  var nodeOps = backend.nodeOps;\n\n  for (i = 0; i < hooks.length; ++i) {\n    cbs[hooks[i]] = [];\n    for (j = 0; j < modules.length; ++j) {\n      if (isDef(modules[j][hooks[i]])) {\n        cbs[hooks[i]].push(modules[j][hooks[i]]);\n      }\n    }\n  }\n\n  function emptyNodeAt (elm) {\n    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n  }\n\n  function createRmCb (childElm, listeners) {\n    function remove$$1 () {\n      if (--remove$$1.listeners === 0) {\n        removeNode(childElm);\n      }\n    }\n    remove$$1.listeners = listeners;\n    return remove$$1\n  }\n\n  function removeNode (el) {\n    var parent = nodeOps.parentNode(el);\n    // element may have already been removed due to v-html / v-text\n    if (isDef(parent)) {\n      nodeOps.removeChild(parent, el);\n    }\n  }\n\n  function isUnknownElement$$1 (vnode, inVPre) {\n    return (\n      !inVPre &&\n      !vnode.ns &&\n      !(\n        config.ignoredElements.length &&\n        config.ignoredElements.some(function (ignore) {\n          return isRegExp(ignore)\n            ? ignore.test(vnode.tag)\n            : ignore === vnode.tag\n        })\n      ) &&\n      config.isUnknownElement(vnode.tag)\n    )\n  }\n\n  var creatingElmInVPre = 0;\n\n  function createElm (\n    vnode,\n    insertedVnodeQueue,\n    parentElm,\n    refElm,\n    nested,\n    ownerArray,\n    index\n  ) {\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // This vnode was used in a previous render!\n      // now it's used as a new node, overwriting its elm would cause\n      // potential patch errors down the road when it's used as an insertion\n      // reference node. Instead, we clone the node on-demand before creating\n      // associated DOM element for it.\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    vnode.isRootInsert = !nested; // for transition enter check\n    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n      return\n    }\n\n    var data = vnode.data;\n    var children = vnode.children;\n    var tag = vnode.tag;\n    if (isDef(tag)) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (data && data.pre) {\n          creatingElmInVPre++;\n        }\n        if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n          warn(\n            'Unknown custom element: <' + tag + '> - did you ' +\n            'register the component correctly? For recursive components, ' +\n            'make sure to provide the \""name\"" option.',\n            vnode.context\n          );\n        }\n      }\n\n      vnode.elm = vnode.ns\n        ? nodeOps.createElementNS(vnode.ns, tag)\n        : nodeOps.createElement(tag, vnode);\n      setScope(vnode);\n\n      /* istanbul ignore if */\n      {\n        createChildren(vnode, children, insertedVnodeQueue);\n        if (isDef(data)) {\n          invokeCreateHooks(vnode, insertedVnodeQueue);\n        }\n        insert(parentElm, vnode.elm, refElm);\n      }\n\n      if (process.env.NODE_ENV !== 'production' && data && data.pre) {\n        creatingElmInVPre--;\n      }\n    } else if (isTrue(vnode.isComment)) {\n      vnode.elm = nodeOps.createComment(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    } else {\n      vnode.elm = nodeOps.createTextNode(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    }\n  }\n\n  function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i = vnode.data;\n    if (isDef(i)) {\n      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n      if (isDef(i = i.hook) && isDef(i = i.init)) {\n        i(vnode, false /* hydrating */);\n      }\n      // after calling the init hook, if the vnode is a child component\n      // it should've created a child instance and mounted it. the child\n      // component also has set the placeholder vnode's elm.\n      // in that case we can just return the element and be done.\n      if (isDef(vnode.componentInstance)) {\n        initComponent(vnode, insertedVnodeQueue);\n        insert(parentElm, vnode.elm, refElm);\n        if (isTrue(isReactivated)) {\n          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n        }\n        return true\n      }\n    }\n  }\n\n  function initComponent (vnode, insertedVnodeQueue) {\n    if (isDef(vnode.data.pendingInsert)) {\n      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n      vnode.data.pendingInsert = null;\n    }\n    vnode.elm = vnode.componentInstance.$el;\n    if (isPatchable(vnode)) {\n      invokeCreateHooks(vnode, insertedVnodeQueue);\n      setScope(vnode);\n    } else {\n      // empty component root.\n      // skip all element-related modules except for ref (#3455)\n      registerRef(vnode);\n      // make sure to invoke the insert hook\n      insertedVnodeQueue.push(vnode);\n    }\n  }\n\n  function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i;\n    // hack for #4339: a reactivated component with inner transition\n    // does not trigger because the inner node's created hooks are not called\n    // again. It's not ideal to involve module-specific logic in here but\n    // there doesn't seem to be a better way to do it.\n    var innerNode = vnode;\n    while (innerNode.componentInstance) {\n      innerNode = innerNode.componentInstance._vnode;\n      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n        for (i = 0; i < cbs.activate.length; ++i) {\n          cbs.activate[i](emptyNode, innerNode);\n        }\n        insertedVnodeQueue.push(innerNode);\n        break\n      }\n    }\n    // unlike a newly created component,\n    // a reactivated keep-alive component doesn't insert itself\n    insert(parentElm, vnode.elm, refElm);\n  }\n\n  function insert (parent, elm, ref$$1) {\n    if (isDef(parent)) {\n      if (isDef(ref$$1)) {\n        if (nodeOps.parentNode(ref$$1) === parent) {\n          nodeOps.insertBefore(parent, elm, ref$$1);\n        }\n      } else {\n        nodeOps.appendChild(parent, elm);\n      }\n    }\n  }\n\n  function createChildren (vnode, children, insertedVnodeQueue) {\n    if (Array.isArray(children)) {\n      if (process.env.NODE_ENV !== 'production') {\n        checkDuplicateKeys(children);\n      }\n      for (var i = 0; i < children.length; ++i) {\n        createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n      }\n    } else if (isPrimitive(vnode.text)) {\n      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n    }\n  }\n\n  function isPatchable (vnode) {\n    while (vnode.componentInstance) {\n      vnode = vnode.componentInstance._vnode;\n    }\n    return isDef(vnode.tag)\n  }\n\n  function invokeCreateHooks (vnode, insertedVnodeQueue) {\n    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n      cbs.create[i$1](emptyNode, vnode);\n    }\n    i = vnode.data.hook; // Reuse variable\n    if (isDef(i)) {\n      if (isDef(i.create)) { i.create(emptyNode, vnode); }\n      if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n    }\n  }\n\n  // set scope id attribute for scoped CSS.\n  // this is implemented as a special case to avoid the overhead\n  // of going through the normal attribute patching process.\n  function setScope (vnode) {\n    var i;\n    if (isDef(i = vnode.fnScopeId)) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    } else {\n      var ancestor = vnode;\n      while (ancestor) {\n        if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n          nodeOps.setStyleScope(vnode.elm, i);\n        }\n        ancestor = ancestor.parent;\n      }\n    }\n    // for slot content they should also get the scopeId from the host instance.\n    if (isDef(i = activeInstance) &&\n      i !== vnode.context &&\n      i !== vnode.fnContext &&\n      isDef(i = i.$options._scopeId)\n    ) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    }\n  }\n\n  function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n    }\n  }\n\n  function invokeDestroyHook (vnode) {\n    var i, j;\n    var data = vnode.data;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n      for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n    }\n    if (isDef(i = vnode.children)) {\n      for (j = 0; j < vnode.children.length; ++j) {\n        invokeDestroyHook(vnode.children[j]);\n      }\n    }\n  }\n\n  function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      var ch = vnodes[startIdx];\n      if (isDef(ch)) {\n        if (isDef(ch.tag)) {\n          removeAndInvokeRemoveHook(ch);\n          invokeDestroyHook(ch);\n        } else { // Text node\n          removeNode(ch.elm);\n        }\n      }\n    }\n  }\n\n  function removeAndInvokeRemoveHook (vnode, rm) {\n    if (isDef(rm) || isDef(vnode.data)) {\n      var i;\n      var listeners = cbs.remove.length + 1;\n      if (isDef(rm)) {\n        // we have a recursively passed down rm callback\n        // increase the listeners count\n        rm.listeners += listeners;\n      } else {\n        // directly removing\n        rm = createRmCb(vnode.elm, listeners);\n      }\n      // recursively invoke hooks on child component root node\n      if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n        removeAndInvokeRemoveHook(i, rm);\n      }\n      for (i = 0; i < cbs.remove.length; ++i) {\n        cbs.remove[i](vnode, rm);\n      }\n      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n        i(vnode, rm);\n      } else {\n        rm();\n      }\n    } else {\n      removeNode(vnode.elm);\n    }\n  }\n\n  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n    var oldStartIdx = 0;\n    var newStartIdx = 0;\n    var oldEndIdx = oldCh.length - 1;\n    var oldStartVnode = oldCh[0];\n    var oldEndVnode = oldCh[oldEndIdx];\n    var newEndIdx = newCh.length - 1;\n    var newStartVnode = newCh[0];\n    var newEndVnode = newCh[newEndIdx];\n    var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n    // removeOnly is a special flag used only by <transition-group>\n    // to ensure removed elements stay in correct relative positions\n    // during leaving transitions\n    var canMove = !removeOnly;\n\n    if (process.env.NODE_ENV !== 'production') {\n      checkDuplicateKeys(newCh);\n    }\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n      if (isUndef(oldStartVnode)) {\n        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n      } else if (isUndef(oldEndVnode)) {\n        oldEndVnode = oldCh[--oldEndIdx];\n      } else if (sameVnode(oldStartVnode, newStartVnode)) {\n        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        oldStartVnode = oldCh[++oldStartIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else if (sameVnode(oldEndVnode, newEndVnode)) {\n        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n        oldStartVnode = oldCh[++oldStartIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else {\n        if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n        idxInOld = isDef(newStartVnode.key)\n          ? oldKeyToIdx[newStartVnode.key]\n          : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n        if (isUndef(idxInOld)) { // New element\n          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n        } else {\n          vnodeToMove = oldCh[idxInOld];\n          if (sameVnode(vnodeToMove, newStartVnode)) {\n            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n            oldCh[idxInOld] = undefined;\n            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n          } else {\n            // same key but different element. treat as new element\n            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n          }\n        }\n        newStartVnode = newCh[++newStartIdx];\n      }\n    }\n    if (oldStartIdx > oldEndIdx) {\n      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n    } else if (newStartIdx > newEndIdx) {\n      removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n    }\n  }\n\n  function checkDuplicateKeys (children) {\n    var seenKeys = {};\n    for (var i = 0; i < children.length; i++) {\n      var vnode = children[i];\n      var key = vnode.key;\n      if (isDef(key)) {\n        if (seenKeys[key]) {\n          warn(\n            (\""Duplicate keys detected: '\"" + key + \""'. This may cause an update error.\""),\n            vnode.context\n          );\n        } else {\n          seenKeys[key] = true;\n        }\n      }\n    }\n  }\n\n  function findIdxInOld (node, oldCh, start, end) {\n    for (var i = start; i < end; i++) {\n      var c = oldCh[i];\n      if (isDef(c) && sameVnode(node, c)) { return i }\n    }\n  }\n\n  function patchVnode (\n    oldVnode,\n    vnode,\n    insertedVnodeQueue,\n    ownerArray,\n    index,\n    removeOnly\n  ) {\n    if (oldVnode === vnode) {\n      return\n    }\n\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // clone reused vnode\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    var elm = vnode.elm = oldVnode.elm;\n\n    if (isTrue(oldVnode.isAsyncPlaceholder)) {\n      if (isDef(vnode.asyncFactory.resolved)) {\n        hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n      } else {\n        vnode.isAsyncPlaceholder = true;\n      }\n      return\n    }\n\n    // reuse element for static trees.\n    // note we only do this if the vnode is cloned -\n    // if the new node is not cloned it means the render functions have been\n    // reset by the hot-reload-api and we need to do a proper re-render.\n    if (isTrue(vnode.isStatic) &&\n      isTrue(oldVnode.isStatic) &&\n      vnode.key === oldVnode.key &&\n      (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n    ) {\n      vnode.componentInstance = oldVnode.componentInstance;\n      return\n    }\n\n    var i;\n    var data = vnode.data;\n    if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n      i(oldVnode, vnode);\n    }\n\n    var oldCh = oldVnode.children;\n    var ch = vnode.children;\n    if (isDef(data) && isPatchable(vnode)) {\n      for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n      if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n    }\n    if (isUndef(vnode.text)) {\n      if (isDef(oldCh) && isDef(ch)) {\n        if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n      } else if (isDef(ch)) {\n        if (process.env.NODE_ENV !== 'production') {\n          checkDuplicateKeys(ch);\n        }\n        if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n      } else if (isDef(oldCh)) {\n        removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n      } else if (isDef(oldVnode.text)) {\n        nodeOps.setTextContent(elm, '');\n      }\n    } else if (oldVnode.text !== vnode.text) {\n      nodeOps.setTextContent(elm, vnode.text);\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n    }\n  }\n\n  function invokeInsertHook (vnode, queue, initial) {\n    // delay insert hooks for component root nodes, invoke them after the\n    // element is really inserted\n    if (isTrue(initial) && isDef(vnode.parent)) {\n      vnode.parent.data.pendingInsert = queue;\n    } else {\n      for (var i = 0; i < queue.length; ++i) {\n        queue[i].data.hook.insert(queue[i]);\n      }\n    }\n  }\n\n  var hydrationBailed = false;\n  // list of modules that can skip create hook during hydration because they\n  // are already rendered on the client or has no need for initialization\n  // Note: style is excluded because it relies on initial clone for future\n  // deep updates (#7063).\n  var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n  // Note: this is a browser-only function so we can assume elms are DOM nodes.\n  function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n    var i;\n    var tag = vnode.tag;\n    var data = vnode.data;\n    var children = vnode.children;\n    inVPre = inVPre || (data && data.pre);\n    vnode.elm = elm;\n\n    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n      vnode.isAsyncPlaceholder = true;\n      return true\n    }\n    // assert node match\n    if (process.env.NODE_ENV !== 'production') {\n      if (!assertNodeMatch(elm, vnode, inVPre)) {\n        return false\n      }\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n      if (isDef(i = vnode.componentInstance)) {\n        // child component. it should have hydrated its own tree.\n        initComponent(vnode, insertedVnodeQueue);\n        return true\n      }\n    }\n    if (isDef(tag)) {\n      if (isDef(children)) {\n        // empty element, allow client to pick up and populate children\n        if (!elm.hasChildNodes()) {\n          createChildren(vnode, children, insertedVnodeQueue);\n        } else {\n          // v-html and domProps: innerHTML\n          if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n            if (i !== elm.innerHTML) {\n              /* istanbul ignore if */\n              if (process.env.NODE_ENV !== 'production' &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('server innerHTML: ', i);\n                console.warn('client innerHTML: ', elm.innerHTML);\n              }\n              return false\n            }\n          } else {\n            // iterate and compare children lists\n            var childrenMatch = true;\n            var childNode = elm.firstChild;\n            for (var i$1 = 0; i$1 < children.length; i$1++) {\n              if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n                childrenMatch = false;\n                break\n              }\n              childNode = childNode.nextSibling;\n            }\n            // if childNode is not null, it means the actual childNodes list is\n            // longer than the virtual children list.\n            if (!childrenMatch || childNode) {\n              /* istanbul ignore if */\n              if (process.env.NODE_ENV !== 'production' &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n              }\n              return false\n            }\n          }\n        }\n      }\n      if (isDef(data)) {\n        var fullInvoke = false;\n        for (var key in data) {\n          if (!isRenderedModule(key)) {\n            fullInvoke = true;\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            break\n          }\n        }\n        if (!fullInvoke && data['class']) {\n          // ensure collecting deps for deep class bindings for future updates\n          traverse(data['class']);\n        }\n      }\n    } else if (elm.data !== vnode.text) {\n      elm.data = vnode.text;\n    }\n    return true\n  }\n\n  function assertNodeMatch (node, vnode, inVPre) {\n    if (isDef(vnode.tag)) {\n      return vnode.tag.indexOf('vue-component') === 0 || (\n        !isUnknownElement$$1(vnode, inVPre) &&\n        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n      )\n    } else {\n      return node.nodeType === (vnode.isComment ? 8 : 3)\n    }\n  }\n\n  return function patch (oldVnode, vnode, hydrating, removeOnly) {\n    if (isUndef(vnode)) {\n      if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n      return\n    }\n\n    var isInitialPatch = false;\n    var insertedVnodeQueue = [];\n\n    if (isUndef(oldVnode)) {\n      // empty mount (likely as component), create new root element\n      isInitialPatch = true;\n      createElm(vnode, insertedVnodeQueue);\n    } else {\n      var isRealElement = isDef(oldVnode.nodeType);\n      if (!isRealElement && sameVnode(oldVnode, vnode)) {\n        // patch existing root node\n        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n      } else {\n        if (isRealElement) {\n          // mounting to a real element\n          // check if this is server-rendered content and if we can perform\n          // a successful hydration.\n          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n            oldVnode.removeAttribute(SSR_ATTR);\n            hydrating = true;\n          }\n          if (isTrue(hydrating)) {\n            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n              invokeInsertHook(vnode, insertedVnodeQueue, true);\n              return oldVnode\n            } else if (process.env.NODE_ENV !== 'production') {\n              warn(\n                'The client-side rendered virtual DOM tree is not matching ' +\n                'server-rendered content. This is likely caused by incorrect ' +\n                'HTML markup, for example nesting block-level elements inside ' +\n                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                'full client-side render.'\n              );\n            }\n          }\n          // either not server-rendered, or hydration failed.\n          // create an empty node and replace it\n          oldVnode = emptyNodeAt(oldVnode);\n        }\n\n        // replacing existing element\n        var oldElm = oldVnode.elm;\n        var parentElm = nodeOps.parentNode(oldElm);\n\n        // create new node\n        createElm(\n          vnode,\n          insertedVnodeQueue,\n          // extremely rare edge case: do not insert if old element is in a\n          // leaving transition. Only happens when combining transition +\n          // keep-alive + HOCs. (#4590)\n          oldElm._leaveCb ? null : parentElm,\n          nodeOps.nextSibling(oldElm)\n        );\n\n        // update parent placeholder node element, recursively\n        if (isDef(vnode.parent)) {\n          var ancestor = vnode.parent;\n          var patchable = isPatchable(vnode);\n          while (ancestor) {\n            for (var i = 0; i < cbs.destroy.length; ++i) {\n              cbs.destroy[i](ancestor);\n            }\n            ancestor.elm = vnode.elm;\n            if (patchable) {\n              for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n                cbs.create[i$1](emptyNode, ancestor);\n              }\n              // #6513\n              // invoke insert hooks that may have been merged by create hooks.\n              // e.g. for directives that uses the \""inserted\"" hook.\n              var insert = ancestor.data.hook.insert;\n              if (insert.merged) {\n                // start at index 1 to avoid re-invoking component mounted hook\n                for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n                  insert.fns[i$2]();\n                }\n              }\n            } else {\n              registerRef(ancestor);\n            }\n            ancestor = ancestor.parent;\n          }\n        }\n\n        // destroy old node\n        if (isDef(parentElm)) {\n          removeVnodes(parentElm, [oldVnode], 0, 0);\n        } else if (isDef(oldVnode.tag)) {\n          invokeDestroyHook(oldVnode);\n        }\n      }\n    }\n\n    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n    return vnode.elm\n  }\n}\n\n/*  */\n\nvar directives = {\n  create: updateDirectives,\n  update: updateDirectives,\n  destroy: function unbindDirectives (vnode) {\n    updateDirectives(vnode, emptyNode);\n  }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n  if (oldVnode.data.directives || vnode.data.directives) {\n    _update(oldVnode, vnode);\n  }\n}\n\nfunction _update (oldVnode, vnode) {\n  var isCreate = oldVnode === emptyNode;\n  var isDestroy = vnode === emptyNode;\n  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n  var dirsWithInsert = [];\n  var dirsWithPostpatch = [];\n\n  var key, oldDir, dir;\n  for (key in newDirs) {\n    oldDir = oldDirs[key];\n    dir = newDirs[key];\n    if (!oldDir) {\n      // new directive, bind\n      callHook$1(dir, 'bind', vnode, oldVnode);\n      if (dir.def && dir.def.inserted) {\n        dirsWithInsert.push(dir);\n      }\n    } else {\n      // existing directive, update\n      dir.oldValue = oldDir.value;\n      dir.oldArg = oldDir.arg;\n      callHook$1(dir, 'update', vnode, oldVnode);\n      if (dir.def && dir.def.componentUpdated) {\n        dirsWithPostpatch.push(dir);\n      }\n    }\n  }\n\n  if (dirsWithInsert.length) {\n    var callInsert = function () {\n      for (var i = 0; i < dirsWithInsert.length; i++) {\n        callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n      }\n    };\n    if (isCreate) {\n      mergeVNodeHook(vnode, 'insert', callInsert);\n    } else {\n      callInsert();\n    }\n  }\n\n  if (dirsWithPostpatch.length) {\n    mergeVNodeHook(vnode, 'postpatch', function () {\n      for (var i = 0; i < dirsWithPostpatch.length; i++) {\n        callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n      }\n    });\n  }\n\n  if (!isCreate) {\n    for (key in oldDirs) {\n      if (!newDirs[key]) {\n        // no longer present, unbind\n        callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n      }\n    }\n  }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n  dirs,\n  vm\n) {\n  var res = Object.create(null);\n  if (!dirs) {\n    // $flow-disable-line\n    return res\n  }\n  var i, dir;\n  for (i = 0; i < dirs.length; i++) {\n    dir = dirs[i];\n    if (!dir.modifiers) {\n      // $flow-disable-line\n      dir.modifiers = emptyModifiers;\n    }\n    res[getRawDirName(dir)] = dir;\n    dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n  }\n  // $flow-disable-line\n  return res\n}\n\nfunction getRawDirName (dir) {\n  return dir.rawName || ((dir.name) + \"".\"" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n  var fn = dir.def && dir.def[hook];\n  if (fn) {\n    try {\n      fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n    } catch (e) {\n      handleError(e, vnode.context, (\""directive \"" + (dir.name) + \"" \"" + hook + \"" hook\""));\n    }\n  }\n}\n\nvar baseModules = [\n  ref,\n  directives\n];\n\n/*  */\n\nfunction updateAttrs (oldVnode, vnode) {\n  var opts = vnode.componentOptions;\n  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n    return\n  }\n  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n    return\n  }\n  var key, cur, old;\n  var elm = vnode.elm;\n  var oldAttrs = oldVnode.data.attrs || {};\n  var attrs = vnode.data.attrs || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(attrs.__ob__)) {\n    attrs = vnode.data.attrs = extend({}, attrs);\n  }\n\n  for (key in attrs) {\n    cur = attrs[key];\n    old = oldAttrs[key];\n    if (old !== cur) {\n      setAttr(elm, key, cur);\n    }\n  }\n  // #4391: in IE9, setting type can reset value for input[type=radio]\n  // #6666: IE/Edge forces progress value down to 1 before setting a max\n  /* istanbul ignore if */\n  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n    setAttr(elm, 'value', attrs.value);\n  }\n  for (key in oldAttrs) {\n    if (isUndef(attrs[key])) {\n      if (isXlink(key)) {\n        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n      } else if (!isEnumeratedAttr(key)) {\n        elm.removeAttribute(key);\n      }\n    }\n  }\n}\n\nfunction setAttr (el, key, value) {\n  if (el.tagName.indexOf('-') > -1) {\n    baseSetAttr(el, key, value);\n  } else if (isBooleanAttr(key)) {\n    // set attribute for blank value\n    // e.g. <option disabled>Select one</option>\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key);\n    } else {\n      // technically allowfullscreen is a boolean attribute for <iframe>,\n      // but Flash expects a value of \""true\"" when used on <embed> tag\n      value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n        ? 'true'\n        : key;\n      el.setAttribute(key, value);\n    }\n  } else if (isEnumeratedAttr(key)) {\n    el.setAttribute(key, convertEnumeratedValue(key, value));\n  } else if (isXlink(key)) {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    baseSetAttr(el, key, value);\n  }\n}\n\nfunction baseSetAttr (el, key, value) {\n  if (isFalsyAttrValue(value)) {\n    el.removeAttribute(key);\n  } else {\n    // #7138: IE10 & 11 fires input event when setting placeholder on\n    // <textarea>... block the first input event and remove the blocker\n    // immediately.\n    /* istanbul ignore if */\n    if (\n      isIE && !isIE9 &&\n      el.tagName === 'TEXTAREA' &&\n      key === 'placeholder' && value !== '' && !el.__ieph\n    ) {\n      var blocker = function (e) {\n        e.stopImmediatePropagation();\n        el.removeEventListener('input', blocker);\n      };\n      el.addEventListener('input', blocker);\n      // $flow-disable-line\n      el.__ieph = true; /* IE placeholder patched */\n    }\n    el.setAttribute(key, value);\n  }\n}\n\nvar attrs = {\n  create: updateAttrs,\n  update: updateAttrs\n};\n\n/*  */\n\nfunction updateClass (oldVnode, vnode) {\n  var el = vnode.elm;\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n  if (\n    isUndef(data.staticClass) &&\n    isUndef(data.class) && (\n      isUndef(oldData) || (\n        isUndef(oldData.staticClass) &&\n        isUndef(oldData.class)\n      )\n    )\n  ) {\n    return\n  }\n\n  var cls = genClassForVnode(vnode);\n\n  // handle transition classes\n  var transitionClass = el._transitionClasses;\n  if (isDef(transitionClass)) {\n    cls = concat(cls, stringifyClass(transitionClass));\n  }\n\n  // set the class\n  if (cls !== el._prevClass) {\n    el.setAttribute('class', cls);\n    el._prevClass = cls;\n  }\n}\n\nvar klass = {\n  create: updateClass,\n  update: updateClass\n};\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\n/*  */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n  /* istanbul ignore if */\n  if (isDef(on[RANGE_TOKEN])) {\n    // IE input[type=range] only supports `change` event\n    var event = isIE ? 'change' : 'input';\n    on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n    delete on[RANGE_TOKEN];\n  }\n  // This was originally intended to fix #4521 but no longer necessary\n  // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n  /* istanbul ignore if */\n  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n    delete on[CHECKBOX_RADIO_TOKEN];\n  }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n  var _target = target$1; // save current target element in closure\n  return function onceHandler () {\n    var res = handler.apply(null, arguments);\n    if (res !== null) {\n      remove$2(event, onceHandler, capture, _target);\n    }\n  }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n  name,\n  handler,\n  capture,\n  passive\n) {\n  // async edge case #6566: inner click event triggers patch, event handler\n  // attached to outer element during patch, and triggered again. This\n  // happens because browsers fire microtask ticks between event propagation.\n  // the solution is simple: we save the timestamp when a handler is attached,\n  // and the handler would only fire if the event passed to it was fired\n  // AFTER it was attached.\n  if (useMicrotaskFix) {\n    var attachedTimestamp = currentFlushTimestamp;\n    var original = handler;\n    handler = original._wrapper = function (e) {\n      if (\n        // no bubbling, should always fire.\n        // this is just a safety net in case event.timeStamp is unreliable in\n        // certain weird environments...\n        e.target === e.currentTarget ||\n        // event is fired after handler attachment\n        e.timeStamp >= attachedTimestamp ||\n        // bail for environments that have buggy event.timeStamp implementations\n        // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n        // #9681 QtWebEngine event.timeStamp is negative value\n        e.timeStamp <= 0 ||\n        // #9448 bail if event is fired in another document in a multi-page\n        // electron/nw.js app, since event.timeStamp will be using a different\n        // starting reference\n        e.target.ownerDocument !== document\n      ) {\n        return original.apply(this, arguments)\n      }\n    };\n  }\n  target$1.addEventListener(\n    name,\n    handler,\n    supportsPassive\n      ? { capture: capture, passive: passive }\n      : capture\n  );\n}\n\nfunction remove$2 (\n  name,\n  handler,\n  capture,\n  _target\n) {\n  (_target || target$1).removeEventListener(\n    name,\n    handler._wrapper || handler,\n    capture\n  );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n    return\n  }\n  var on = vnode.data.on || {};\n  var oldOn = oldVnode.data.on || {};\n  target$1 = vnode.elm;\n  normalizeEvents(on);\n  updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n  target$1 = undefined;\n}\n\nvar events = {\n  create: updateDOMListeners,\n  update: updateDOMListeners\n};\n\n/*  */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n    return\n  }\n  var key, cur;\n  var elm = vnode.elm;\n  var oldProps = oldVnode.data.domProps || {};\n  var props = vnode.data.domProps || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(props.__ob__)) {\n    props = vnode.data.domProps = extend({}, props);\n  }\n\n  for (key in oldProps) {\n    if (!(key in props)) {\n      elm[key] = '';\n    }\n  }\n\n  for (key in props) {\n    cur = props[key];\n    // ignore children if the node has textContent or innerHTML,\n    // as these will throw away existing DOM nodes and cause removal errors\n    // on subsequent patches (#3360)\n    if (key === 'textContent' || key === 'innerHTML') {\n      if (vnode.children) { vnode.children.length = 0; }\n      if (cur === oldProps[key]) { continue }\n      // #6601 work around Chrome version <= 55 bug where single textNode\n      // replaced by innerHTML/textContent retains its parentNode property\n      if (elm.childNodes.length === 1) {\n        elm.removeChild(elm.childNodes[0]);\n      }\n    }\n\n    if (key === 'value' && elm.tagName !== 'PROGRESS') {\n      // store value as _value as well since\n      // non-string values will be stringified\n      elm._value = cur;\n      // avoid resetting cursor position when value is the same\n      var strCur = isUndef(cur) ? '' : String(cur);\n      if (shouldUpdateValue(elm, strCur)) {\n        elm.value = strCur;\n      }\n    } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n      // IE doesn't support innerHTML for SVG elements\n      svgContainer = svgContainer || document.createElement('div');\n      svgContainer.innerHTML = \""<svg>\"" + cur + \""</svg>\"";\n      var svg = svgContainer.firstChild;\n      while (elm.firstChild) {\n        elm.removeChild(elm.firstChild);\n      }\n      while (svg.firstChild) {\n        elm.appendChild(svg.firstChild);\n      }\n    } else if (\n      // skip the update if old and new VDOM state is the same.\n      // `value` is handled separately because the DOM value may be temporarily\n      // out of sync with VDOM state due to focus, composition and modifiers.\n      // This  #4521 by skipping the unnecesarry `checked` update.\n      cur !== oldProps[key]\n    ) {\n      // some property updates can throw\n      // e.g. `value` on <progress> w/ non-finite value\n      try {\n        elm[key] = cur;\n      } catch (e) {}\n    }\n  }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n  return (!elm.composing && (\n    elm.tagName === 'OPTION' ||\n    isNotInFocusAndDirty(elm, checkVal) ||\n    isDirtyWithModifiers(elm, checkVal)\n  ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n  // return true when textbox (.number and .trim) loses focus and its value is\n  // not equal to the updated value\n  var notInFocus = true;\n  // #6157\n  // work around IE bug when accessing document.activeElement in an iframe\n  try { notInFocus = document.activeElement !== elm; } catch (e) {}\n  return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n  var value = elm.value;\n  var modifiers = elm._vModifiers; // injected by v-model runtime\n  if (isDef(modifiers)) {\n    if (modifiers.number) {\n      return toNumber(value) !== toNumber(newVal)\n    }\n    if (modifiers.trim) {\n      return value.trim() !== newVal.trim()\n    }\n  }\n  return value !== newVal\n}\n\nvar domProps = {\n  create: updateDOMProps,\n  update: updateDOMProps\n};\n\n/*  */\n\nvar parseStyleText = cached(function (cssText) {\n  var res = {};\n  var listDelimiter = /;(?![^(]*\\))/g;\n  var propertyDelimiter = /:(.+)/;\n  cssText.split(listDelimiter).forEach(function (item) {\n    if (item) {\n      var tmp = item.split(propertyDelimiter);\n      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n  var style = normalizeStyleBinding(data.style);\n  // static style is pre-processed into an object during compilation\n  // and is always a fresh object, so it's safe to merge into it\n  return data.staticStyle\n    ? extend(data.staticStyle, style)\n    : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n  if (Array.isArray(bindingStyle)) {\n    return toObject(bindingStyle)\n  }\n  if (typeof bindingStyle === 'string') {\n    return parseStyleText(bindingStyle)\n  }\n  return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n  var res = {};\n  var styleData;\n\n  if (checkChild) {\n    var childNode = vnode;\n    while (childNode.componentInstance) {\n      childNode = childNode.componentInstance._vnode;\n      if (\n        childNode && childNode.data &&\n        (styleData = normalizeStyleData(childNode.data))\n      ) {\n        extend(res, styleData);\n      }\n    }\n  }\n\n  if ((styleData = normalizeStyleData(vnode.data))) {\n    extend(res, styleData);\n  }\n\n  var parentNode = vnode;\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n      extend(res, styleData);\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n  /* istanbul ignore if */\n  if (cssVarRE.test(name)) {\n    el.style.setProperty(name, val);\n  } else if (importantRE.test(val)) {\n    el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n  } else {\n    var normalizedName = normalize(name);\n    if (Array.isArray(val)) {\n      // Support values array created by autoprefixer, e.g.\n      // {display: [\""-webkit-box\"", \""-ms-flexbox\"", \""flex\""]}\n      // Set them one by one, and the browser will only set those it can recognize\n      for (var i = 0, len = val.length; i < len; i++) {\n        el.style[normalizedName] = val[i];\n      }\n    } else {\n      el.style[normalizedName] = val;\n    }\n  }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n  emptyStyle = emptyStyle || document.createElement('div').style;\n  prop = camelize(prop);\n  if (prop !== 'filter' && (prop in emptyStyle)) {\n    return prop\n  }\n  var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n  for (var i = 0; i < vendorNames.length; i++) {\n    var name = vendorNames[i] + capName;\n    if (name in emptyStyle) {\n      return name\n    }\n  }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n\n  if (isUndef(data.staticStyle) && isUndef(data.style) &&\n    isUndef(oldData.staticStyle) && isUndef(oldData.style)\n  ) {\n    return\n  }\n\n  var cur, name;\n  var el = vnode.elm;\n  var oldStaticStyle = oldData.staticStyle;\n  var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n  // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n  var oldStyle = oldStaticStyle || oldStyleBinding;\n\n  var style = normalizeStyleBinding(vnode.data.style) || {};\n\n  // store normalized style under a different key for next diff\n  // make sure to clone it if it's reactive, since the user likely wants\n  // to mutate it.\n  vnode.data.normalizedStyle = isDef(style.__ob__)\n    ? extend({}, style)\n    : style;\n\n  var newStyle = getStyle(vnode, true);\n\n  for (name in oldStyle) {\n    if (isUndef(newStyle[name])) {\n      setProp(el, name, '');\n    }\n  }\n  for (name in newStyle) {\n    cur = newStyle[name];\n    if (cur !== oldStyle[name]) {\n      // ie9 setting to null has no effect, must use empty string\n      setProp(el, name, cur == null ? '' : cur);\n    }\n  }\n}\n\nvar style = {\n  create: updateStyle,\n  update: updateStyle\n};\n\n/*  */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n    } else {\n      el.classList.add(cls);\n    }\n  } else {\n    var cur = \"" \"" + (el.getAttribute('class') || '') + \"" \"";\n    if (cur.indexOf(' ' + cls + ' ') < 0) {\n      el.setAttribute('class', (cur + cls).trim());\n    }\n  }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n    } else {\n      el.classList.remove(cls);\n    }\n    if (!el.classList.length) {\n      el.removeAttribute('class');\n    }\n  } else {\n    var cur = \"" \"" + (el.getAttribute('class') || '') + \"" \"";\n    var tar = ' ' + cls + ' ';\n    while (cur.indexOf(tar) >= 0) {\n      cur = cur.replace(tar, ' ');\n    }\n    cur = cur.trim();\n    if (cur) {\n      el.setAttribute('class', cur);\n    } else {\n      el.removeAttribute('class');\n    }\n  }\n}\n\n/*  */\n\nfunction resolveTransition (def$$1) {\n  if (!def$$1) {\n    return\n  }\n  /* istanbul ignore else */\n  if (typeof def$$1 === 'object') {\n    var res = {};\n    if (def$$1.css !== false) {\n      extend(res, autoCssTransition(def$$1.name || 'v'));\n    }\n    extend(res, def$$1);\n    return res\n  } else if (typeof def$$1 === 'string') {\n    return autoCssTransition(def$$1)\n  }\n}\n\nvar autoCssTransition = cached(function (name) {\n  return {\n    enterClass: (name + \""-enter\""),\n    enterToClass: (name + \""-enter-to\""),\n    enterActiveClass: (name + \""-enter-active\""),\n    leaveClass: (name + \""-leave\""),\n    leaveToClass: (name + \""-leave-to\""),\n    leaveActiveClass: (name + \""-leave-active\"")\n  }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n  /* istanbul ignore if */\n  if (window.ontransitionend === undefined &&\n    window.onwebkittransitionend !== undefined\n  ) {\n    transitionProp = 'WebkitTransition';\n    transitionEndEvent = 'webkitTransitionEnd';\n  }\n  if (window.onanimationend === undefined &&\n    window.onwebkitanimationend !== undefined\n  ) {\n    animationProp = 'WebkitAnimation';\n    animationEndEvent = 'webkitAnimationEnd';\n  }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n  ? window.requestAnimationFrame\n    ? window.requestAnimationFrame.bind(window)\n    : setTimeout\n  : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n  raf(function () {\n    raf(fn);\n  });\n}\n\nfunction addTransitionClass (el, cls) {\n  var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n  if (transitionClasses.indexOf(cls) < 0) {\n    transitionClasses.push(cls);\n    addClass(el, cls);\n  }\n}\n\nfunction removeTransitionClass (el, cls) {\n  if (el._transitionClasses) {\n    remove(el._transitionClasses, cls);\n  }\n  removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n  el,\n  expectedType,\n  cb\n) {\n  var ref = getTransitionInfo(el, expectedType);\n  var type = ref.type;\n  var timeout = ref.timeout;\n  var propCount = ref.propCount;\n  if (!type) { return cb() }\n  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n  var ended = 0;\n  var end = function () {\n    el.removeEventListener(event, onEnd);\n    cb();\n  };\n  var onEnd = function (e) {\n    if (e.target === el) {\n      if (++ended >= propCount) {\n        end();\n      }\n    }\n  };\n  setTimeout(function () {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n  var styles = window.getComputedStyle(el);\n  // JSDOM may return undefined for transition properties\n  var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n  var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n  var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n  var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n  var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n  var type;\n  var timeout = 0;\n  var propCount = 0;\n  /* istanbul ignore if */\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0\n      ? transitionTimeout > animationTimeout\n        ? TRANSITION\n        : ANIMATION\n      : null;\n    propCount = type\n      ? type === TRANSITION\n        ? transitionDurations.length\n        : animationDurations.length\n      : 0;\n  }\n  var hasTransform =\n    type === TRANSITION &&\n    transformRE.test(styles[transitionProp + 'Property']);\n  return {\n    type: type,\n    timeout: timeout,\n    propCount: propCount,\n    hasTransform: hasTransform\n  }\n}\n\nfunction getTimeout (delays, durations) {\n  /* istanbul ignore next */\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n\n  return Math.max.apply(null, durations.map(function (d, i) {\n    return toMs(d) + toMs(delays[i])\n  }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n  return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/*  */\n\nfunction enter (vnode, toggleDisplay) {\n  var el = vnode.elm;\n\n  // call leave callback now\n  if (isDef(el._leaveCb)) {\n    el._leaveCb.cancelled = true;\n    el._leaveCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data)) {\n    return\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._enterCb) || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var enterClass = data.enterClass;\n  var enterToClass = data.enterToClass;\n  var enterActiveClass = data.enterActiveClass;\n  var appearClass = data.appearClass;\n  var appearToClass = data.appearToClass;\n  var appearActiveClass = data.appearActiveClass;\n  var beforeEnter = data.beforeEnter;\n  var enter = data.enter;\n  var afterEnter = data.afterEnter;\n  var enterCancelled = data.enterCancelled;\n  var beforeAppear = data.beforeAppear;\n  var appear = data.appear;\n  var afterAppear = data.afterAppear;\n  var appearCancelled = data.appearCancelled;\n  var duration = data.duration;\n\n  // activeInstance will always be the <transition> component managing this\n  // transition. One edge case to check is when the <transition> is placed\n  // as the root node of a child component. In that case we need to check\n  // <transition>'s parent for appear check.\n  var context = activeInstance;\n  var transitionNode = activeInstance.$vnode;\n  while (transitionNode && transitionNode.parent) {\n    context = transitionNode.context;\n    transitionNode = transitionNode.parent;\n  }\n\n  var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n  if (isAppear && !appear && appear !== '') {\n    return\n  }\n\n  var startClass = isAppear && appearClass\n    ? appearClass\n    : enterClass;\n  var activeClass = isAppear && appearActiveClass\n    ? appearActiveClass\n    : enterActiveClass;\n  var toClass = isAppear && appearToClass\n    ? appearToClass\n    : enterToClass;\n\n  var beforeEnterHook = isAppear\n    ? (beforeAppear || beforeEnter)\n    : beforeEnter;\n  var enterHook = isAppear\n    ? (typeof appear === 'function' ? appear : enter)\n    : enter;\n  var afterEnterHook = isAppear\n    ? (afterAppear || afterEnter)\n    : afterEnter;\n  var enterCancelledHook = isAppear\n    ? (appearCancelled || enterCancelled)\n    : enterCancelled;\n\n  var explicitEnterDuration = toNumber(\n    isObject(duration)\n      ? duration.enter\n      : duration\n  );\n\n  if (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {\n    checkDuration(explicitEnterDuration, 'enter', vnode);\n  }\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(enterHook);\n\n  var cb = el._enterCb = once(function () {\n    if (expectsCSS) {\n      removeTransitionClass(el, toClass);\n      removeTransitionClass(el, activeClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, startClass);\n      }\n      enterCancelledHook && enterCancelledHook(el);\n    } else {\n      afterEnterHook && afterEnterHook(el);\n    }\n    el._enterCb = null;\n  });\n\n  if (!vnode.data.show) {\n    // remove pending leave element on enter by injecting an insert hook\n    mergeVNodeHook(vnode, 'insert', function () {\n      var parent = el.parentNode;\n      var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n      if (pendingNode &&\n        pendingNode.tag === vnode.tag &&\n        pendingNode.elm._leaveCb\n      ) {\n        pendingNode.elm._leaveCb();\n      }\n      enterHook && enterHook(el, cb);\n    });\n  }\n\n  // start enter transition\n  beforeEnterHook && beforeEnterHook(el);\n  if (expectsCSS) {\n    addTransitionClass(el, startClass);\n    addTransitionClass(el, activeClass);\n    nextFrame(function () {\n      removeTransitionClass(el, startClass);\n      if (!cb.cancelled) {\n        addTransitionClass(el, toClass);\n        if (!userWantsControl) {\n          if (isValidDuration(explicitEnterDuration)) {\n            setTimeout(cb, explicitEnterDuration);\n          } else {\n            whenTransitionEnds(el, type, cb);\n          }\n        }\n      }\n    });\n  }\n\n  if (vnode.data.show) {\n    toggleDisplay && toggleDisplay();\n    enterHook && enterHook(el, cb);\n  }\n\n  if (!expectsCSS && !userWantsControl) {\n    cb();\n  }\n}\n\nfunction leave (vnode, rm) {\n  var el = vnode.elm;\n\n  // call enter callback now\n  if (isDef(el._enterCb)) {\n    el._enterCb.cancelled = true;\n    el._enterCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data) || el.nodeType !== 1) {\n    return rm()\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._leaveCb)) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var leaveClass = data.leaveClass;\n  var leaveToClass = data.leaveToClass;\n  var leaveActiveClass = data.leaveActiveClass;\n  var beforeLeave = data.beforeLeave;\n  var leave = data.leave;\n  var afterLeave = data.afterLeave;\n  var leaveCancelled = data.leaveCancelled;\n  var delayLeave = data.delayLeave;\n  var duration = data.duration;\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(leave);\n\n  var explicitLeaveDuration = toNumber(\n    isObject(duration)\n      ? duration.leave\n      : duration\n  );\n\n  if (process.env.NODE_ENV !== 'production' && isDef(explicitLeaveDuration)) {\n    checkDuration(explicitLeaveDuration, 'leave', vnode);\n  }\n\n  var cb = el._leaveCb = once(function () {\n    if (el.parentNode && el.parentNode._pending) {\n      el.parentNode._pending[vnode.key] = null;\n    }\n    if (expectsCSS) {\n      removeTransitionClass(el, leaveToClass);\n      removeTransitionClass(el, leaveActiveClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, leaveClass);\n      }\n      leaveCancelled && leaveCancelled(el);\n    } else {\n      rm();\n      afterLeave && afterLeave(el);\n    }\n    el._leaveCb = null;\n  });\n\n  if (delayLeave) {\n    delayLeave(performLeave);\n  } else {\n    performLeave();\n  }\n\n  function performLeave () {\n    // the delayed leave may have already been cancelled\n    if (cb.cancelled) {\n      return\n    }\n    // record leaving element\n    if (!vnode.data.show && el.parentNode) {\n      (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n    }\n    beforeLeave && beforeLeave(el);\n    if (expectsCSS) {\n      addTransitionClass(el, leaveClass);\n      addTransitionClass(el, leaveActiveClass);\n      nextFrame(function () {\n        removeTransitionClass(el, leaveClass);\n        if (!cb.cancelled) {\n          addTransitionClass(el, leaveToClass);\n          if (!userWantsControl) {\n            if (isValidDuration(explicitLeaveDuration)) {\n              setTimeout(cb, explicitLeaveDuration);\n            } else {\n              whenTransitionEnds(el, type, cb);\n            }\n          }\n        }\n      });\n    }\n    leave && leave(el, cb);\n    if (!expectsCSS && !userWantsControl) {\n      cb();\n    }\n  }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n  if (typeof val !== 'number') {\n    warn(\n      \""<transition> explicit \"" + name + \"" duration is not a valid number - \"" +\n      \""got \"" + (JSON.stringify(val)) + \"".\"",\n      vnode.context\n    );\n  } else if (isNaN(val)) {\n    warn(\n      \""<transition> explicit \"" + name + \"" duration is NaN - \"" +\n      'the duration expression might be incorrect.',\n      vnode.context\n    );\n  }\n}\n\nfunction isValidDuration (val) {\n  return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n  if (isUndef(fn)) {\n    return false\n  }\n  var invokerFns = fn.fns;\n  if (isDef(invokerFns)) {\n    // invoker\n    return getHookArgumentsLength(\n      Array.isArray(invokerFns)\n        ? invokerFns[0]\n        : invokerFns\n    )\n  } else {\n    return (fn._length || fn.length) > 1\n  }\n}\n\nfunction _enter (_, vnode) {\n  if (vnode.data.show !== true) {\n    enter(vnode);\n  }\n}\n\nvar transition = inBrowser ? {\n  create: _enter,\n  activate: _enter,\n  remove: function remove$$1 (vnode, rm) {\n    /* istanbul ignore else */\n    if (vnode.data.show !== true) {\n      leave(vnode, rm);\n    } else {\n      rm();\n    }\n  }\n} : {};\n\nvar platformModules = [\n  attrs,\n  klass,\n  events,\n  domProps,\n  style,\n  transition\n];\n\n/*  */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n  // http://www.matts411.com/post/internet-explorer-9-oninput/\n  document.addEventListener('selectionchange', function () {\n    var el = document.activeElement;\n    if (el && el.vmodel) {\n      trigger(el, 'input');\n    }\n  });\n}\n\nvar directive = {\n  inserted: function inserted (el, binding, vnode, oldVnode) {\n    if (vnode.tag === 'select') {\n      // #6903\n      if (oldVnode.elm && !oldVnode.elm._vOptions) {\n        mergeVNodeHook(vnode, 'postpatch', function () {\n          directive.componentUpdated(el, binding, vnode);\n        });\n      } else {\n        setSelected(el, binding, vnode.context);\n      }\n      el._vOptions = [].map.call(el.options, getValue);\n    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n      el._vModifiers = binding.modifiers;\n      if (!binding.modifiers.lazy) {\n        el.addEventListener('compositionstart', onCompositionStart);\n        el.addEventListener('compositionend', onCompositionEnd);\n        // Safari < 10.2 & UIWebView doesn't fire compositionend when\n        // switching focus before confirming composition choice\n        // this also fixes the issue where some browsers e.g. iOS Chrome\n        // fires \""change\"" instead of \""input\"" on autocomplete.\n        el.addEventListener('change', onCompositionEnd);\n        /* istanbul ignore if */\n        if (isIE9) {\n          el.vmodel = true;\n        }\n      }\n    }\n  },\n\n  componentUpdated: function componentUpdated (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context);\n      // in case the options rendered by v-for have changed,\n      // it's possible that the value is out-of-sync with the rendered options.\n      // detect such cases and filter out values that no longer has a matching\n      // option in the DOM.\n      var prevOptions = el._vOptions;\n      var curOptions = el._vOptions = [].map.call(el.options, getValue);\n      if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n        // trigger change event if\n        // no matching option found for at least one value\n        var needReset = el.multiple\n          ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n          : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n        if (needReset) {\n          trigger(el, 'change');\n        }\n      }\n    }\n  }\n};\n\nfunction setSelected (el, binding, vm) {\n  actuallySetSelected(el, binding, vm);\n  /* istanbul ignore if */\n  if (isIE || isEdge) {\n    setTimeout(function () {\n      actuallySetSelected(el, binding, vm);\n    }, 0);\n  }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n  var value = binding.value;\n  var isMultiple = el.multiple;\n  if (isMultiple && !Array.isArray(value)) {\n    process.env.NODE_ENV !== 'production' && warn(\n      \""<select multiple v-model=\\\""\"" + (binding.expression) + \""\\\""> \"" +\n      \""expects an Array value for its binding, but got \"" + (Object.prototype.toString.call(value).slice(8, -1)),\n      vm\n    );\n    return\n  }\n  var selected, option;\n  for (var i = 0, l = el.options.length; i < l; i++) {\n    option = el.options[i];\n    if (isMultiple) {\n      selected = looseIndexOf(value, getValue(option)) > -1;\n      if (option.selected !== selected) {\n        option.selected = selected;\n      }\n    } else {\n      if (looseEqual(getValue(option), value)) {\n        if (el.selectedIndex !== i) {\n          el.selectedIndex = i;\n        }\n        return\n      }\n    }\n  }\n  if (!isMultiple) {\n    el.selectedIndex = -1;\n  }\n}\n\nfunction hasNoMatchingOption (value, options) {\n  return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n  return '_value' in option\n    ? option._value\n    : option.value\n}\n\nfunction onCompositionStart (e) {\n  e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n  // prevent triggering an input event for no reason\n  if (!e.target.composing) { return }\n  e.target.composing = false;\n  trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n  var e = document.createEvent('HTMLEvents');\n  e.initEvent(type, true, true);\n  el.dispatchEvent(e);\n}\n\n/*  */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n    ? locateNode(vnode.componentInstance._vnode)\n    : vnode\n}\n\nvar show = {\n  bind: function bind (el, ref, vnode) {\n    var value = ref.value;\n\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    var originalDisplay = el.__vOriginalDisplay =\n      el.style.display === 'none' ? '' : el.style.display;\n    if (value && transition$$1) {\n      vnode.data.show = true;\n      enter(vnode, function () {\n        el.style.display = originalDisplay;\n      });\n    } else {\n      el.style.display = value ? originalDisplay : 'none';\n    }\n  },\n\n  update: function update (el, ref, vnode) {\n    var value = ref.value;\n    var oldValue = ref.oldValue;\n\n    /* istanbul ignore if */\n    if (!value === !oldValue) { return }\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    if (transition$$1) {\n      vnode.data.show = true;\n      if (value) {\n        enter(vnode, function () {\n          el.style.display = el.__vOriginalDisplay;\n        });\n      } else {\n        leave(vnode, function () {\n          el.style.display = 'none';\n        });\n      }\n    } else {\n      el.style.display = value ? el.__vOriginalDisplay : 'none';\n    }\n  },\n\n  unbind: function unbind (\n    el,\n    binding,\n    vnode,\n    oldVnode,\n    isDestroy\n  ) {\n    if (!isDestroy) {\n      el.style.display = el.__vOriginalDisplay;\n    }\n  }\n};\n\nvar platformDirectives = {\n  model: directive,\n  show: show\n};\n\n/*  */\n\nvar transitionProps = {\n  name: String,\n  appear: Boolean,\n  css: Boolean,\n  mode: String,\n  type: String,\n  enterClass: String,\n  leaveClass: String,\n  enterToClass: String,\n  leaveToClass: String,\n  enterActiveClass: String,\n  leaveActiveClass: String,\n  appearClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n  var compOptions = vnode && vnode.componentOptions;\n  if (compOptions && compOptions.Ctor.options.abstract) {\n    return getRealChild(getFirstComponentChild(compOptions.children))\n  } else {\n    return vnode\n  }\n}\n\nfunction extractTransitionData (comp) {\n  var data = {};\n  var options = comp.$options;\n  // props\n  for (var key in options.propsData) {\n    data[key] = comp[key];\n  }\n  // events.\n  // extract listeners and pass them directly to the transition methods\n  var listeners = options._parentListeners;\n  for (var key$1 in listeners) {\n    data[camelize(key$1)] = listeners[key$1];\n  }\n  return data\n}\n\nfunction placeholder (h, rawChild) {\n  if (/\\d-keep-alive$/.test(rawChild.tag)) {\n    return h('keep-alive', {\n      props: rawChild.componentOptions.propsData\n    })\n  }\n}\n\nfunction hasParentTransition (vnode) {\n  while ((vnode = vnode.parent)) {\n    if (vnode.data.transition) {\n      return true\n    }\n  }\n}\n\nfunction isSameChild (child, oldChild) {\n  return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n  name: 'transition',\n  props: transitionProps,\n  abstract: true,\n\n  render: function render (h) {\n    var this$1 = this;\n\n    var children = this.$slots.default;\n    if (!children) {\n      return\n    }\n\n    // filter out text nodes (possible whitespaces)\n    children = children.filter(isNotTextNode);\n    /* istanbul ignore if */\n    if (!children.length) {\n      return\n    }\n\n    // warn multiple elements\n    if (process.env.NODE_ENV !== 'production' && children.length > 1) {\n      warn(\n        '<transition> can only be used on a single element. Use ' +\n        '<transition-group> for lists.',\n        this.$parent\n      );\n    }\n\n    var mode = this.mode;\n\n    // warn invalid mode\n    if (process.env.NODE_ENV !== 'production' &&\n      mode && mode !== 'in-out' && mode !== 'out-in'\n    ) {\n      warn(\n        'invalid <transition> mode: ' + mode,\n        this.$parent\n      );\n    }\n\n    var rawChild = children[0];\n\n    // if this is a component root node and the component's\n    // parent container node also has transition, skip.\n    if (hasParentTransition(this.$vnode)) {\n      return rawChild\n    }\n\n    // apply transition data to child\n    // use getRealChild() to ignore abstract components e.g. keep-alive\n    var child = getRealChild(rawChild);\n    /* istanbul ignore if */\n    if (!child) {\n      return rawChild\n    }\n\n    if (this._leaving) {\n      return placeholder(h, rawChild)\n    }\n\n    // ensure a key that is unique to the vnode type and to this transition\n    // component instance. This key will be used to remove pending leaving nodes\n    // during entering.\n    var id = \""__transition-\"" + (this._uid) + \""-\"";\n    child.key = child.key == null\n      ? child.isComment\n        ? id + 'comment'\n        : id + child.tag\n      : isPrimitive(child.key)\n        ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n        : child.key;\n\n    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n    var oldRawChild = this._vnode;\n    var oldChild = getRealChild(oldRawChild);\n\n    // mark v-show\n    // so that the transition module can hand over the control to the directive\n    if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n      child.data.show = true;\n    }\n\n    if (\n      oldChild &&\n      oldChild.data &&\n      !isSameChild(child, oldChild) &&\n      !isAsyncPlaceholder(oldChild) &&\n      // #6687 component root is a comment node\n      !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n    ) {\n      // replace old child transition data with fresh one\n      // important for dynamic transitions!\n      var oldData = oldChild.data.transition = extend({}, data);\n      // handle transition mode\n      if (mode === 'out-in') {\n        // return placeholder node and queue update when leave finishes\n        this._leaving = true;\n        mergeVNodeHook(oldData, 'afterLeave', function () {\n          this$1._leaving = false;\n          this$1.$forceUpdate();\n        });\n        return placeholder(h, rawChild)\n      } else if (mode === 'in-out') {\n        if (isAsyncPlaceholder(child)) {\n          return oldRawChild\n        }\n        var delayedLeave;\n        var performLeave = function () { delayedLeave(); };\n        mergeVNodeHook(data, 'afterEnter', performLeave);\n        mergeVNodeHook(data, 'enterCancelled', performLeave);\n        mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n      }\n    }\n\n    return rawChild\n  }\n};\n\n/*  */\n\nvar props = extend({\n  tag: String,\n  moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n  props: props,\n\n  beforeMount: function beforeMount () {\n    var this$1 = this;\n\n    var update = this._update;\n    this._update = function (vnode, hydrating) {\n      var restoreActiveInstance = setActiveInstance(this$1);\n      // force removing pass\n      this$1.__patch__(\n        this$1._vnode,\n        this$1.kept,\n        false, // hydrating\n        true // removeOnly (!important, avoids unnecessary moves)\n      );\n      this$1._vnode = this$1.kept;\n      restoreActiveInstance();\n      update.call(this$1, vnode, hydrating);\n    };\n  },\n\n  render: function render (h) {\n    var tag = this.tag || this.$vnode.data.tag || 'span';\n    var map = Object.create(null);\n    var prevChildren = this.prevChildren = this.children;\n    var rawChildren = this.$slots.default || [];\n    var children = this.children = [];\n    var transitionData = extractTransitionData(this);\n\n    for (var i = 0; i < rawChildren.length; i++) {\n      var c = rawChildren[i];\n      if (c.tag) {\n        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n          children.push(c);\n          map[c.key] = c\n          ;(c.data || (c.data = {})).transition = transitionData;\n        } else if (process.env.NODE_ENV !== 'production') {\n          var opts = c.componentOptions;\n          var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n          warn((\""<transition-group> children must be keyed: <\"" + name + \"">\""));\n        }\n      }\n    }\n\n    if (prevChildren) {\n      var kept = [];\n      var removed = [];\n      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n        var c$1 = prevChildren[i$1];\n        c$1.data.transition = transitionData;\n        c$1.data.pos = c$1.elm.getBoundingClientRect();\n        if (map[c$1.key]) {\n          kept.push(c$1);\n        } else {\n          removed.push(c$1);\n        }\n      }\n      this.kept = h(tag, null, kept);\n      this.removed = removed;\n    }\n\n    return h(tag, null, children)\n  },\n\n  updated: function updated () {\n    var children = this.prevChildren;\n    var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n      return\n    }\n\n    // we divide the work into three loops to avoid mixing DOM reads and writes\n    // in each iteration - which helps prevent layout thrashing.\n    children.forEach(callPendingCbs);\n    children.forEach(recordPosition);\n    children.forEach(applyTranslation);\n\n    // force reflow to put everything in position\n    // assign to this to avoid being removed in tree-shaking\n    // $flow-disable-line\n    this._reflow = document.body.offsetHeight;\n\n    children.forEach(function (c) {\n      if (c.data.moved) {\n        var el = c.elm;\n        var s = el.style;\n        addTransitionClass(el, moveClass);\n        s.transform = s.WebkitTransform = s.transitionDuration = '';\n        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n          if (e && e.target !== el) {\n            return\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(transitionEndEvent, cb);\n            el._moveCb = null;\n            removeTransitionClass(el, moveClass);\n          }\n        });\n      }\n    });\n  },\n\n  methods: {\n    hasMove: function hasMove (el, moveClass) {\n      /* istanbul ignore if */\n      if (!hasTransition) {\n        return false\n      }\n      /* istanbul ignore if */\n      if (this._hasMove) {\n        return this._hasMove\n      }\n      // Detect whether an element with the move class applied has\n      // CSS transitions. Since the element may be inside an entering\n      // transition at this very moment, we make a clone of it and remove\n      // all other transition classes applied to ensure only the move class\n      // is applied.\n      var clone = el.cloneNode();\n      if (el._transitionClasses) {\n        el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n      }\n      addClass(clone, moveClass);\n      clone.style.display = 'none';\n      this.$el.appendChild(clone);\n      var info = getTransitionInfo(clone);\n      this.$el.removeChild(clone);\n      return (this._hasMove = info.hasTransform)\n    }\n  }\n};\n\nfunction callPendingCbs (c) {\n  /* istanbul ignore if */\n  if (c.elm._moveCb) {\n    c.elm._moveCb();\n  }\n  /* istanbul ignore if */\n  if (c.elm._enterCb) {\n    c.elm._enterCb();\n  }\n}\n\nfunction recordPosition (c) {\n  c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n  var oldPos = c.data.pos;\n  var newPos = c.data.newPos;\n  var dx = oldPos.left - newPos.left;\n  var dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    c.data.moved = true;\n    var s = c.elm.style;\n    s.transform = s.WebkitTransform = \""translate(\"" + dx + \""px,\"" + dy + \""px)\"";\n    s.transitionDuration = '0s';\n  }\n}\n\nvar platformComponents = {\n  Transition: Transition,\n  TransitionGroup: TransitionGroup\n};\n\n/*  */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && inBrowser ? query(el) : undefined;\n  return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n  setTimeout(function () {\n    if (config.devtools) {\n      if (devtools) {\n        devtools.emit('init', Vue);\n      } else if (\n        process.env.NODE_ENV !== 'production' &&\n        process.env.NODE_ENV !== 'test'\n      ) {\n        console[console.info ? 'info' : 'log'](\n          'Download the Vue Devtools extension for a better development experience:\\n' +\n          'https://github.com/vuejs/vue-devtools'\n        );\n      }\n    }\n    if (process.env.NODE_ENV !== 'production' &&\n      process.env.NODE_ENV !== 'test' &&\n      config.productionTip !== false &&\n      typeof console !== 'undefined'\n    ) {\n      console[console.info ? 'info' : 'log'](\n        \""You are running Vue in development mode.\\n\"" +\n        \""Make sure to turn on production mode when deploying for production.\\n\"" +\n        \""See more tips at https://vuejs.org/guide/deployment.html\""\n      );\n    }\n  }, 0);\n}\n\n/*  */\n\nexport default Vue;\n"",""var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n"",""module.exports = false;\n"",""'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n"",""var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n"",""'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n"",""'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n"",""// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n"",""var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n"",""// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n"",""'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code\n    };\n  };\n  return error;\n};\n"",""// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n"",""'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n"",""'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n"",""// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n"",""module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n"",""'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n"",""var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n"",""'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    }\n  });\n\n  utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n    if (utils.isObject(config2[prop])) {\n      config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n    } else if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (utils.isObject(config1[prop])) {\n      config[prop] = utils.deepMerge(config1[prop]);\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  utils.forEach([\n    'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n    'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n    'socketPath'\n  ], function defaultToConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  return config;\n};\n"",""// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n"",""'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Support baseURL config\n  if (config.baseURL && !isAbsoluteURL(config.url)) {\n    config.url = combineURLs(config.baseURL, config.url);\n  }\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers || {}\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n"",""exports.f = {}.propertyIsEnumerable;\n"",""'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\""Promise can't be resolved itself\"");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n"",""var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n"",""var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n"",""var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n"",""var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n"",""// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n"",""// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n"",""var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n"",""// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n"",""'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n"",""// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n"",""var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n"",""module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n"",""'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n"",""'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n"",""'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n"",""var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n"",""var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n"",""var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n"",""module.exports = {};\n"",""var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n"",""'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n"",""// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n"",""// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n"",""module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n"",""// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n"",""// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n"",""var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n"",""'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n"",""'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request.onreadystatechange = function handleLoad() {\n      if (!request || request.readyState !== 4) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = require('./../helpers/cookies');\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (config.withCredentials) {\n      request.withCredentials = true;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n"",""module.exports = require('./lib/axios');"",""var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n"",""// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n"",""'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n"",""// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n"",""'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n"",""'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = deepMerge(result[key], val);\n    } else if (typeof val === 'object') {\n      result[key] = deepMerge({}, val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  deepMerge: deepMerge,\n  extend: extend,\n  trim: trim\n};\n"",""module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n"",""/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n  return obj != null && obj.constructor != null &&\n    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n"",""'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n"",""var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\""return this\"")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \""object\"") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n"",""var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n"",""'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n"",""var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n"",""var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n"",""'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n"",""module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n"",""module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n"",""module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n"",""'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \""<scheme>://\"" or \""//\"" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n"",""var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n"",""// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n"",""'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n"",""// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n"",""// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n"",""module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n"",""'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n"",""// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n"",""module.exports = require('./_shared')('native-function-to-string', Function.toString);\n"",""var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n""],""sourceRoot"":""""}"
681e8d04b0ff0c429834ec2da4f2ff6b76bf69af,358835,        /// taken from http://stackoverflow.com/questions/358835/getproperties-to-return-all-properties-for-an-interface-inheritance-hierarchy
2387e96ad89439c1e4d665b694ab57c93ac7c2cd,24853,"4820020,comment,4819827,4819827,2,0,Claudus,,,""The answer, from the same site:<p><a href=""""http://stackoverflow.com/questions/24853/what-is-the-difference-between-i-and-i"""" rel=""""nofollow"""">http://stackoverflow.com/questions/24853/what-is-the-differe...</a><p>""""<i>++i will increment the value of i, and then return the incremented value.</i>""""<p>""""<i>i++ will increment the value of i, but return the pre-incremented value.</i>"""""",1353618878"
86c64efa9a47ba87be6b8f670dad9716d3a1f63d,1827489,"<span class=""sd"">    http://stackoverflow.com/questions/1827489/numpy-meshgrid-in-3d and fixed.</span>"
e2cc9c864da5da897d25c57101421e21688ca669,22899053, * Taken from (http://stackoverflow.com/questions/22899053/why-is-stdmutex-so-slow-on-osx)
ee14f494185452c1375127f487f0d2d1dde43b73,13915849,	// add an individual page item to the pdf - for element detection see: http://stackoverflow.com/a/13915849
81ae9ba480f54261ca5c6875febaada3b33990d2,8936984,  // http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197
8ae9e94b91c560626ab1e4e0186b1a5a7d2ed2bc,16824853,            // http://stackoverflow.com/questions/16824853/way-to-ng-repeat-defined-number-of-times-instead-of-repeating-over-array
b0331b8440645735ba462dfa1c560e2beee81491,1885660, * Original code from http://stackoverflow.com/a/1885660/394013
6501829cfd62fc41a94e4b080c63e4724f366b73,2353818,"* Node.js - Start by going through [Node.js Official Website](http://nodejs.org/) and this [StackOverflow Thread](http://stackoverflow.com/questions/2353818/how-do-i-get-started-with-node-js), which should get you going with the Node.js platform in no time."
6930c6596c43e0f7090e276a4fd8a8fb4c062d9b,11130156,# from https://stackoverflow.com/questions/11130156/suppress-stdout-stderr-print-from-python-functions
95954b8a7b3d9251f86ad33a44315959b4763752,1024748,      // http://stackoverflow.com/questions/1024748/how-do-i-fix-nsurlerrordomain-error-999-in-iphone-3-0-os
cc225d8b08bee7ac4a5bd11db63bc84e1f92c401,2953466,	 * @see	http://stackoverflow.com/questions/2485388/heuristic-to-identify-if-a-series-of-4-bytes-chunks-of-data-are-integers-or-float/2953466#2953466
4073bc2a9082f7fa8e025f0bdc0598c5ea34985d,2522897,  as described [here](http://stackoverflow.com/questions/2522897/eclipse-junit-ea-vm-option).
e897cb9211dca5e286b1ab5c0d9181a2c825f455,16211410,[1] http://stackoverflow.com/questions/16211410/ambiguity-when-using-boostassignlist-of-to-construct-a-stdvector
d59ec301ef4bfe9bd93858266cad0b0e7aa203b9,3330919,        // http://stackoverflow.com/a/3330919)
9d54fc0396dd43482bf2d6a3f3450c44fccad966,17025392,     * Based on http://stackoverflow.com/a/17025392/2834898
e899a019adc8801d812fded9ee988ffd60da01de,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
96873155309fb8799b18e3ea7471d591d831fe56,13148356,        // http://stackoverflow.com/questions/13148356/how-to-properly-unit-test-jquerys-ajax-promises-using-jasmine-and-or-sinon
e0ba51c4876a00d595af6118fe5675cce36e2660,36796281,Be aware of the [difference between default and named exports](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281). It is a common source of mistakes.
30f2afeb1025e41802cbb440d9b0982e3043ac31,236129,"    // there are many ways, ref: http://stackoverflow.com/questions/236129/split-a-string-in-c"
823bc0c45f3cedee6d300b481e7ee6a3deb8149d,8231048,       * http://stackoverflow.com/questions/8231048/why-use-x3c-instead-of-when-generating-html-from-javascript
0ba43e5b0cccf0d96b9d575f21fad45e6c3ebae0,15249340,[warning-document-isnt-included-in-any-toctree-for-included-file](https://stackoverflow.com/questions/15249340/warning-document-isnt-included-in-any-toctree-for-included-file)
7f4eb7c17c8e24aeeaff6a15e56cc265e20428bf,19366006,    - [Error when installing windows SDK 7.1](http://stackoverflow.com/questions/19366006/error-when-installing-windows-sdk-7-1)
f3bc6884ec95bd1135ddd10194b323959e37f4c0,6903762,"{""version"":3,""file"":""polyfills.bundle.js"",""sources"":[""webpack:///webpack/bootstrap 01bf75ec9d48e4b1b881"",""webpack:///./app/polyfills.browser.ts"",""webpack:///./~/core-js/modules/_export.js"",""webpack:///./~/core-js/modules/_an-object.js"",""webpack:///./~/core-js/modules/_fails.js"",""webpack:///./~/core-js/modules/_is-object.js"",""webpack:///./~/core-js/modules/_global.js"",""webpack:///./~/core-js/modules/_core.js"",""webpack:///./~/core-js/modules/_wks.js"",""webpack:///./~/core-js/modules/_object-dp.js"",""webpack:///./~/core-js/modules/_descriptors.js"",""webpack:///./~/core-js/modules/_to-length.js"",""webpack:///./~/core-js/modules/_has.js"",""webpack:///./~/core-js/modules/_redefine.js"",""webpack:///./~/core-js/modules/_string-html.js"",""webpack:///./~/core-js/modules/_hide.js"",""webpack:///./~/core-js/modules/_to-object.js"",""webpack:///./~/core-js/modules/_strict-method.js"",""webpack:///./~/core-js/modules/_to-iobject.js"",""webpack:///./~/core-js/modules/_array-methods.js"",""webpack:///./~/core-js/modules/_object-gpo.js"",""webpack:///./~/core-js/modules/_object-sap.js"",""webpack:///./~/core-js/modules/_defined.js"",""webpack:///./~/core-js/modules/_metadata.js"",""webpack:///./~/core-js/modules/_object-gopd.js"",""webpack:///./~/core-js/modules/_typed-array.js"",""webpack:///./~/core-js/modules/_a-function.js"",""webpack:///./~/core-js/modules/_meta.js"",""webpack:///./~/core-js/modules/_property-desc.js"",""webpack:///./~/core-js/modules/_to-integer.js"",""webpack:///./~/core-js/modules/_to-primitive.js"",""webpack:///./~/core-js/modules/_cof.js"",""webpack:///./~/core-js/modules/_ctx.js"",""webpack:///./~/core-js/modules/_object-create.js"",""webpack:///./~/core-js/modules/_object-gopn.js"",""webpack:///./~/core-js/modules/_to-index.js"",""webpack:///./~/core-js/modules/_uid.js"",""webpack:///./~/core-js/modules/es6.object.to-string.js"",""webpack:///./~/core-js/modules/_iterators.js"",""webpack:///./~/core-js/modules/_object-keys.js"",""webpack:///./~/core-js/modules/_add-to-unscopables.js"",""webpack:///./~/core-js/modules/_an-instance.js"",""webpack:///./~/core-js/modules/_iobject.js"",""webpack:///./~/core-js/modules/_library.js"",""webpack:///./~/core-js/modules/_redefine-all.js"",""webpack:///./~/core-js/modules/_set-species.js"",""webpack:///./~/core-js/modules/_set-to-string-tag.js"",""webpack:///./~/core-js/modules/_collection.js"",""webpack:///./~/core-js/modules/_fix-re-wks.js"",""webpack:///./~/core-js/modules/_for-of.js"",""webpack:///./~/core-js/modules/_object-gops.js"",""webpack:///./~/core-js/modules/_object-pie.js"",""webpack:///./~/core-js/modules/_shared.js"",""webpack:///./~/core-js/modules/_string-trim.js"",""webpack:///./~/core-js/modules/_typed.js"",""webpack:///./~/core-js/modules/es6.array.iterator.js"",""webpack:///./~/core-js/modules/es6.string.iterator.js"",""webpack:///./~/core-js/modules/_array-fill.js"",""webpack:///./~/core-js/modules/_array-includes.js"",""webpack:///./~/core-js/modules/_classof.js"",""webpack:///./~/core-js/modules/_enum-bug-keys.js"",""webpack:///./~/core-js/modules/_fails-is-regexp.js"",""webpack:///./~/core-js/modules/_flags.js"",""webpack:///./~/core-js/modules/_inherit-if-required.js"",""webpack:///./~/core-js/modules/_is-array-iter.js"",""webpack:///./~/core-js/modules/_is-array.js"",""webpack:///./~/core-js/modules/_is-regexp.js"",""webpack:///./~/core-js/modules/_iter-define.js"",""webpack:///./~/core-js/modules/_iter-detect.js"",""webpack:///./~/core-js/modules/_math-expm1.js"",""webpack:///./~/core-js/modules/_math-sign.js"",""webpack:///./~/core-js/modules/_set-proto.js"",""webpack:///./~/core-js/modules/_shared-key.js"",""webpack:///./~/core-js/modules/_string-context.js"",""webpack:///./~/core-js/modules/_string-ws.js"",""webpack:///./~/core-js/modules/_typed-buffer.js"",""webpack:///./~/core-js/modules/core.get-iterator-method.js"",""webpack:///./~/core-js/modules/web.dom.iterable.js"",""webpack:///./~/core-js/modules/_a-number-value.js"",""webpack:///./~/core-js/modules/_array-copy-within.js"",""webpack:///./~/core-js/modules/_array-reduce.js"",""webpack:///./~/core-js/modules/_bind.js"",""webpack:///./~/core-js/modules/_collection-strong.js"",""webpack:///./~/core-js/modules/_collection-weak.js"",""webpack:///./~/core-js/modules/_create-property.js"",""webpack:///./~/core-js/modules/_dom-create.js"",""webpack:///./~/core-js/modules/_html.js"",""webpack:///./~/core-js/modules/_ie8-dom-define.js"",""webpack:///./~/core-js/modules/_is-integer.js"",""webpack:///./~/core-js/modules/_iter-call.js"",""webpack:///./~/core-js/modules/_iter-create.js"",""webpack:///./~/core-js/modules/_iter-step.js"",""webpack:///./~/core-js/modules/_math-log1p.js"",""webpack:///./~/core-js/modules/_object-assign.js"",""webpack:///./~/core-js/modules/_object-dps.js"",""webpack:///./~/core-js/modules/_object-gopn-ext.js"",""webpack:///./~/core-js/modules/_object-keys-internal.js"",""webpack:///./~/core-js/modules/_parse-float.js"",""webpack:///./~/core-js/modules/_parse-int.js"",""webpack:///./~/core-js/modules/_same-value.js"",""webpack:///./~/core-js/modules/_species-constructor.js"",""webpack:///./~/core-js/modules/_string-at.js"",""webpack:///./~/core-js/modules/_string-repeat.js"",""webpack:///./~/core-js/modules/_wks-ext.js"",""webpack:///./~/core-js/modules/es6.map.js"",""webpack:///./~/core-js/modules/es6.regexp.flags.js"",""webpack:///./~/core-js/modules/es6.regexp.match.js"",""webpack:///./~/core-js/modules/es6.regexp.replace.js"",""webpack:///./~/core-js/modules/es6.regexp.search.js"",""webpack:///./~/core-js/modules/es6.regexp.split.js"",""webpack:///./~/core-js/modules/es6.set.js"",""webpack:///./~/core-js/modules/es6.symbol.js"",""webpack:///./~/core-js/modules/es6.weak-map.js"",""webpack:///./~/core-js/es6/array.js"",""webpack:///./~/core-js/es6/date.js"",""webpack:///./~/core-js/es6/function.js"",""webpack:///./~/core-js/es6/map.js"",""webpack:///./~/core-js/es6/math.js"",""webpack:///./~/core-js/es6/number.js"",""webpack:///./~/core-js/es6/object.js"",""webpack:///./~/core-js/es6/parse-float.js"",""webpack:///./~/core-js/es6/parse-int.js"",""webpack:///./~/core-js/es6/reflect.js"",""webpack:///./~/core-js/es6/regexp.js"",""webpack:///./~/core-js/es6/set.js"",""webpack:///./~/core-js/es6/string.js"",""webpack:///./~/core-js/es6/symbol.js"",""webpack:///./~/core-js/es6/typed.js"",""webpack:///./~/core-js/es6/weak-map.js"",""webpack:///./~/core-js/es6/weak-set.js"",""webpack:///./~/core-js/es7/reflect.js"",""webpack:///./~/core-js/modules/_array-from-iterable.js"",""webpack:///./~/core-js/modules/_array-species-constructor.js"",""webpack:///./~/core-js/modules/_array-species-create.js"",""webpack:///./~/core-js/modules/_date-to-primitive.js"",""webpack:///./~/core-js/modules/_enum-keys.js"",""webpack:///./~/core-js/modules/_invoke.js"",""webpack:///./~/core-js/modules/_keyof.js"",""webpack:///./~/core-js/modules/_own-keys.js"",""webpack:///./~/core-js/modules/_wks-define.js"",""webpack:///./~/core-js/modules/es6.array.copy-within.js"",""webpack:///./~/core-js/modules/es6.array.every.js"",""webpack:///./~/core-js/modules/es6.array.fill.js"",""webpack:///./~/core-js/modules/es6.array.filter.js"",""webpack:///./~/core-js/modules/es6.array.find-index.js"",""webpack:///./~/core-js/modules/es6.array.find.js"",""webpack:///./~/core-js/modules/es6.array.for-each.js"",""webpack:///./~/core-js/modules/es6.array.from.js"",""webpack:///./~/core-js/modules/es6.array.index-of.js"",""webpack:///./~/core-js/modules/es6.array.is-array.js"",""webpack:///./~/core-js/modules/es6.array.join.js"",""webpack:///./~/core-js/modules/es6.array.last-index-of.js"",""webpack:///./~/core-js/modules/es6.array.map.js"",""webpack:///./~/core-js/modules/es6.array.of.js"",""webpack:///./~/core-js/modules/es6.array.reduce-right.js"",""webpack:///./~/core-js/modules/es6.array.reduce.js"",""webpack:///./~/core-js/modules/es6.array.slice.js"",""webpack:///./~/core-js/modules/es6.array.some.js"",""webpack:///./~/core-js/modules/es6.array.sort.js"",""webpack:///./~/core-js/modules/es6.array.species.js"",""webpack:///./~/core-js/modules/es6.date.now.js"",""webpack:///./~/core-js/modules/es6.date.to-iso-string.js"",""webpack:///./~/core-js/modules/es6.date.to-json.js"",""webpack:///./~/core-js/modules/es6.date.to-primitive.js"",""webpack:///./~/core-js/modules/es6.date.to-string.js"",""webpack:///./~/core-js/modules/es6.function.bind.js"",""webpack:///./~/core-js/modules/es6.function.has-instance.js"",""webpack:///./~/core-js/modules/es6.function.name.js"",""webpack:///./~/core-js/modules/es6.math.acosh.js"",""webpack:///./~/core-js/modules/es6.math.asinh.js"",""webpack:///./~/core-js/modules/es6.math.atanh.js"",""webpack:///./~/core-js/modules/es6.math.cbrt.js"",""webpack:///./~/core-js/modules/es6.math.clz32.js"",""webpack:///./~/core-js/modules/es6.math.cosh.js"",""webpack:///./~/core-js/modules/es6.math.expm1.js"",""webpack:///./~/core-js/modules/es6.math.fround.js"",""webpack:///./~/core-js/modules/es6.math.hypot.js"",""webpack:///./~/core-js/modules/es6.math.imul.js"",""webpack:///./~/core-js/modules/es6.math.log10.js"",""webpack:///./~/core-js/modules/es6.math.log1p.js"",""webpack:///./~/core-js/modules/es6.math.log2.js"",""webpack:///./~/core-js/modules/es6.math.sign.js"",""webpack:///./~/core-js/modules/es6.math.sinh.js"",""webpack:///./~/core-js/modules/es6.math.tanh.js"",""webpack:///./~/core-js/modules/es6.math.trunc.js"",""webpack:///./~/core-js/modules/es6.number.constructor.js"",""webpack:///./~/core-js/modules/es6.number.epsilon.js"",""webpack:///./~/core-js/modules/es6.number.is-finite.js"",""webpack:///./~/core-js/modules/es6.number.is-integer.js"",""webpack:///./~/core-js/modules/es6.number.is-nan.js"",""webpack:///./~/core-js/modules/es6.number.is-safe-integer.js"",""webpack:///./~/core-js/modules/es6.number.max-safe-integer.js"",""webpack:///./~/core-js/modules/es6.number.min-safe-integer.js"",""webpack:///./~/core-js/modules/es6.number.parse-float.js"",""webpack:///./~/core-js/modules/es6.number.parse-int.js"",""webpack:///./~/core-js/modules/es6.number.to-fixed.js"",""webpack:///./~/core-js/modules/es6.number.to-precision.js"",""webpack:///./~/core-js/modules/es6.object.assign.js"",""webpack:///./~/core-js/modules/es6.object.create.js"",""webpack:///./~/core-js/modules/es6.object.define-properties.js"",""webpack:///./~/core-js/modules/es6.object.define-property.js"",""webpack:///./~/core-js/modules/es6.object.freeze.js"",""webpack:///./~/core-js/modules/es6.object.get-own-property-descriptor.js"",""webpack:///./~/core-js/modules/es6.object.get-own-property-names.js"",""webpack:///./~/core-js/modules/es6.object.get-prototype-of.js"",""webpack:///./~/core-js/modules/es6.object.is-extensible.js"",""webpack:///./~/core-js/modules/es6.object.is-frozen.js"",""webpack:///./~/core-js/modules/es6.object.is-sealed.js"",""webpack:///./~/core-js/modules/es6.object.is.js"",""webpack:///./~/core-js/modules/es6.object.keys.js"",""webpack:///./~/core-js/modules/es6.object.prevent-extensions.js"",""webpack:///./~/core-js/modules/es6.object.seal.js"",""webpack:///./~/core-js/modules/es6.object.set-prototype-of.js"",""webpack:///./~/core-js/modules/es6.parse-float.js"",""webpack:///./~/core-js/modules/es6.parse-int.js"",""webpack:///./~/core-js/modules/es6.reflect.apply.js"",""webpack:///./~/core-js/modules/es6.reflect.construct.js"",""webpack:///./~/core-js/modules/es6.reflect.define-property.js"",""webpack:///./~/core-js/modules/es6.reflect.delete-property.js"",""webpack:///./~/core-js/modules/es6.reflect.enumerate.js"",""webpack:///./~/core-js/modules/es6.reflect.get-own-property-descriptor.js"",""webpack:///./~/core-js/modules/es6.reflect.get-prototype-of.js"",""webpack:///./~/core-js/modules/es6.reflect.get.js"",""webpack:///./~/core-js/modules/es6.reflect.has.js"",""webpack:///./~/core-js/modules/es6.reflect.is-extensible.js"",""webpack:///./~/core-js/modules/es6.reflect.own-keys.js"",""webpack:///./~/core-js/modules/es6.reflect.prevent-extensions.js"",""webpack:///./~/core-js/modules/es6.reflect.set-prototype-of.js"",""webpack:///./~/core-js/modules/es6.reflect.set.js"",""webpack:///./~/core-js/modules/es6.regexp.constructor.js"",""webpack:///./~/core-js/modules/es6.regexp.to-string.js"",""webpack:///./~/core-js/modules/es6.string.anchor.js"",""webpack:///./~/core-js/modules/es6.string.big.js"",""webpack:///./~/core-js/modules/es6.string.blink.js"",""webpack:///./~/core-js/modules/es6.string.bold.js"",""webpack:///./~/core-js/modules/es6.string.code-point-at.js"",""webpack:///./~/core-js/modules/es6.string.ends-with.js"",""webpack:///./~/core-js/modules/es6.string.fixed.js"",""webpack:///./~/core-js/modules/es6.string.fontcolor.js"",""webpack:///./~/core-js/modules/es6.string.fontsize.js"",""webpack:///./~/core-js/modules/es6.string.from-code-point.js"",""webpack:///./~/core-js/modules/es6.string.includes.js"",""webpack:///./~/core-js/modules/es6.string.italics.js"",""webpack:///./~/core-js/modules/es6.string.link.js"",""webpack:///./~/core-js/modules/es6.string.raw.js"",""webpack:///./~/core-js/modules/es6.string.repeat.js"",""webpack:///./~/core-js/modules/es6.string.small.js"",""webpack:///./~/core-js/modules/es6.string.starts-with.js"",""webpack:///./~/core-js/modules/es6.string.strike.js"",""webpack:///./~/core-js/modules/es6.string.sub.js"",""webpack:///./~/core-js/modules/es6.string.sup.js"",""webpack:///./~/core-js/modules/es6.string.trim.js"",""webpack:///./~/core-js/modules/es6.typed.array-buffer.js"",""webpack:///./~/core-js/modules/es6.typed.data-view.js"",""webpack:///./~/core-js/modules/es6.typed.float32-array.js"",""webpack:///./~/core-js/modules/es6.typed.float64-array.js"",""webpack:///./~/core-js/modules/es6.typed.int16-array.js"",""webpack:///./~/core-js/modules/es6.typed.int32-array.js"",""webpack:///./~/core-js/modules/es6.typed.int8-array.js"",""webpack:///./~/core-js/modules/es6.typed.uint16-array.js"",""webpack:///./~/core-js/modules/es6.typed.uint32-array.js"",""webpack:///./~/core-js/modules/es6.typed.uint8-array.js"",""webpack:///./~/core-js/modules/es6.typed.uint8-clamped-array.js"",""webpack:///./~/core-js/modules/es6.weak-set.js"",""webpack:///./~/core-js/modules/es7.reflect.define-metadata.js"",""webpack:///./~/core-js/modules/es7.reflect.delete-metadata.js"",""webpack:///./~/core-js/modules/es7.reflect.get-metadata-keys.js"",""webpack:///./~/core-js/modules/es7.reflect.get-metadata.js"",""webpack:///./~/core-js/modules/es7.reflect.get-own-metadata-keys.js"",""webpack:///./~/core-js/modules/es7.reflect.get-own-metadata.js"",""webpack:///./~/core-js/modules/es7.reflect.has-metadata.js"",""webpack:///./~/core-js/modules/es7.reflect.has-own-metadata.js"",""webpack:///./~/core-js/modules/es7.reflect.metadata.js"",""webpack:///./~/ie-shim/index.js"",""webpack:///./~/process/browser.js"",""webpack:///./~/zone.js/dist/long-stack-trace-zone.js"",""webpack:///./~/zone.js/dist/zone.js""],""sourcesContent"":["" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\""webpackJsonp\""];\n \twindow[\""webpackJsonp\""] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \""moreModules\"" to the modules object,\n \t\t// then flag all \""chunkIds\"" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n \t\tif(moreModules[0]) {\n \t\t\tinstalledModules[0] = 0;\n \t\t\treturn __webpack_require__(0);\n \t\t}\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \""0\"" means \""already loaded\""\n \t// Array means \""loading\"", array contains callbacks\n \tvar installedChunks = {\n \t\t0:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \""0\"" is the signal for \""already loaded\""\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \""currently loading\"".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \""\"" + chunkId + \"".chunk.js\"";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 01bf75ec9d48e4b1b881\n **/"",""// Polyfills\r\n\r\nimport 'ie-shim'; // Internet Explorer 9 support\r\n\r\n// import 'core-js/es6';\r\n// Added parts of es6 which are necessary for your project or your browser support requirements.\r\nimport 'core-js/es6/symbol';\r\nimport 'core-js/es6/object';\r\nimport 'core-js/es6/function';\r\nimport 'core-js/es6/parse-int';\r\nimport 'core-js/es6/parse-float';\r\nimport 'core-js/es6/number';\r\nimport 'core-js/es6/math';\r\nimport 'core-js/es6/string';\r\nimport 'core-js/es6/date';\r\nimport 'core-js/es6/array';\r\nimport 'core-js/es6/regexp';\r\nimport 'core-js/es6/map';\r\nimport 'core-js/es6/set';\r\nimport 'core-js/es6/weak-map';\r\nimport 'core-js/es6/weak-set';\r\nimport 'core-js/es6/typed';\r\nimport 'core-js/es6/reflect';\r\n// see issue https://github.com/AngularClass/angular2-webpack-starter/issues/709\r\n// import 'core-js/es6/promise';\r\n\r\nimport 'core-js/es7/reflect';\r\nimport 'zone.js/dist/zone';\r\nimport 'zone.js/dist/long-stack-trace-zone';\n\n\n/** WEBPACK FOOTER **\n ** node_modules/angular2-template-loader!./app/polyfills.browser.ts\n **/"",""var global    = require('./_global')\n  , core      = require('./_core')\n  , hide      = require('./_hide')\n  , redefine  = require('./_redefine')\n  , ctx       = require('./_ctx')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})\n    , key, own, out, exp;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if(target)redefine(target, key, out, type & $export.U);\n    // export\n    if(exports[key] != out)hide(exports, key, exp);\n    if(IS_PROTO && expProto[key] != out)expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_export.js\n ** module id = 1\n ** module chunks = 0\n **/"",""var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_an-object.js\n ** module id = 2\n ** module chunks = 0\n **/"",""module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_fails.js\n ** module id = 3\n ** module chunks = 0\n **/"",""module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_is-object.js\n ** module id = 4\n ** module chunks = 0\n **/"",""// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_global.js\n ** module id = 5\n ** module chunks = 0\n **/"",""var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_core.js\n ** module id = 6\n ** module chunks = 0\n **/"",""var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_wks.js\n ** module id = 7\n ** module chunks = 0\n **/"",""var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-dp.js\n ** module id = 8\n ** module chunks = 0\n **/"",""// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_descriptors.js\n ** module id = 9\n ** module chunks = 0\n **/"",""// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_to-length.js\n ** module id = 10\n ** module chunks = 0\n **/"",""var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_has.js\n ** module id = 11\n ** module chunks = 0\n **/"",""var global    = require('./_global')\n  , hide      = require('./_hide')\n  , has       = require('./_has')\n  , SRC       = require('./_uid')('src')\n  , TO_STRING = 'toString'\n  , $toString = Function[TO_STRING]\n  , TPL       = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function(it){\n  return $toString.call(it);\n};\n\n(module.exports = function(O, key, val, safe){\n  var isFunction = typeof val == 'function';\n  if(isFunction)has(val, 'name') || hide(val, 'name', key);\n  if(O[key] === val)return;\n  if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if(O === global){\n    O[key] = val;\n  } else {\n    if(!safe){\n      delete O[key];\n      hide(O, key, val);\n    } else {\n      if(O[key])O[key] = val;\n      else hide(O, key, val);\n    }\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString(){\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_redefine.js\n ** module id = 12\n ** module chunks = 0\n **/"",""var $export = require('./_export')\n  , fails   = require('./_fails')\n  , defined = require('./_defined')\n  , quot    = /\""/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function(string, tag, attribute, value) {\n  var S  = String(defined(string))\n    , p1 = '<' + tag;\n  if(attribute !== '')p1 += ' ' + attribute + '=\""' + String(value).replace(quot, '&quot;') + '\""';\n  return p1 + '>' + S + '</' + tag + '>';\n};\nmodule.exports = function(NAME, exec){\n  var O = {};\n  O[NAME] = exec(createHTML);\n  $export($export.P + $export.F * fails(function(){\n    var test = ''[NAME]('\""');\n    return test !== test.toLowerCase() || test.split('\""').length > 3;\n  }), 'String', O);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_string-html.js\n ** module id = 13\n ** module chunks = 0\n **/"",""var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_hide.js\n ** module id = 16\n ** module chunks = 0\n **/"",""// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_to-object.js\n ** module id = 17\n ** module chunks = 0\n **/"",""var fails = require('./_fails');\n\nmodule.exports = function(method, arg){\n  return !!method && fails(function(){\n    arg ? method.call(null, function(){}, 1) : method.call(null);\n  });\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_strict-method.js\n ** module id = 18\n ** module chunks = 0\n **/"",""// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_to-iobject.js\n ** module id = 19\n ** module chunks = 0\n **/"",""// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx      = require('./_ctx')\n  , IObject  = require('./_iobject')\n  , toObject = require('./_to-object')\n  , toLength = require('./_to-length')\n  , asc      = require('./_array-species-create');\nmodule.exports = function(TYPE, $create){\n  var IS_MAP        = TYPE == 1\n    , IS_FILTER     = TYPE == 2\n    , IS_SOME       = TYPE == 3\n    , IS_EVERY      = TYPE == 4\n    , IS_FIND_INDEX = TYPE == 6\n    , NO_HOLES      = TYPE == 5 || IS_FIND_INDEX\n    , create        = $create || asc;\n  return function($this, callbackfn, that){\n    var O      = toObject($this)\n      , self   = IObject(O)\n      , f      = ctx(callbackfn, that, 3)\n      , length = toLength(self.length)\n      , index  = 0\n      , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined\n      , val, res;\n    for(;length > index; index++)if(NO_HOLES || index in self){\n      val = self[index];\n      res = f(val, index, O);\n      if(TYPE){\n        if(IS_MAP)result[index] = res;            // map\n        else if(res)switch(TYPE){\n          case 3: return true;                    // some\n          case 5: return val;                     // find\n          case 6: return index;                   // findIndex\n          case 2: result.push(val);               // filter\n        } else if(IS_EVERY)return false;          // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-methods.js\n ** module id = 20\n ** module chunks = 0\n **/"",""// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has         = require('./_has')\n  , toObject    = require('./_to-object')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n  O = toObject(O);\n  if(has(O, IE_PROTO))return O[IE_PROTO];\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-gpo.js\n ** module id = 21\n ** module chunks = 0\n **/"",""// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-sap.js\n ** module id = 22\n ** module chunks = 0\n **/"",""// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_defined.js\n ** module id = 24\n ** module chunks = 0\n **/"",""var Map     = require('./es6.map')\n  , $export = require('./_export')\n  , shared  = require('./_shared')('metadata')\n  , store   = shared.store || (shared.store = new (require('./es6.weak-map')));\n\nvar getOrCreateMetadataMap = function(target, targetKey, create){\n  var targetMetadata = store.get(target);\n  if(!targetMetadata){\n    if(!create)return undefined;\n    store.set(target, targetMetadata = new Map);\n  }\n  var keyMetadata = targetMetadata.get(targetKey);\n  if(!keyMetadata){\n    if(!create)return undefined;\n    targetMetadata.set(targetKey, keyMetadata = new Map);\n  } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function(MetadataKey, O, P){\n  var metadataMap = getOrCreateMetadataMap(O, P, false);\n  return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function(MetadataKey, O, P){\n  var metadataMap = getOrCreateMetadataMap(O, P, false);\n  return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){\n  getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function(target, targetKey){\n  var metadataMap = getOrCreateMetadataMap(target, targetKey, false)\n    , keys        = [];\n  if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); });\n  return keys;\n};\nvar toMetaKey = function(it){\n  return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function(O){\n  $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n  store: store,\n  map: getOrCreateMetadataMap,\n  has: ordinaryHasOwnMetadata,\n  get: ordinaryGetOwnMetadata,\n  set: ordinaryDefineOwnMetadata,\n  keys: ordinaryOwnMetadataKeys,\n  key: toMetaKey,\n  exp: exp\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_metadata.js\n ** module id = 25\n ** module chunks = 0\n **/"",""var pIE            = require('./_object-pie')\n  , createDesc     = require('./_property-desc')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , has            = require('./_has')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , gOPD           = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if(IE8_DOM_DEFINE)try {\n    return gOPD(O, P);\n  } catch(e){ /* empty */ }\n  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-gopd.js\n ** module id = 26\n ** module chunks = 0\n **/"",""'use strict';\nif(require('./_descriptors')){\n  var LIBRARY             = require('./_library')\n    , global              = require('./_global')\n    , fails               = require('./_fails')\n    , $export             = require('./_export')\n    , $typed              = require('./_typed')\n    , $buffer             = require('./_typed-buffer')\n    , ctx                 = require('./_ctx')\n    , anInstance          = require('./_an-instance')\n    , propertyDesc        = require('./_property-desc')\n    , hide                = require('./_hide')\n    , redefineAll         = require('./_redefine-all')\n    , toInteger           = require('./_to-integer')\n    , toLength            = require('./_to-length')\n    , toIndex             = require('./_to-index')\n    , toPrimitive         = require('./_to-primitive')\n    , has                 = require('./_has')\n    , same                = require('./_same-value')\n    , classof             = require('./_classof')\n    , isObject            = require('./_is-object')\n    , toObject            = require('./_to-object')\n    , isArrayIter         = require('./_is-array-iter')\n    , create              = require('./_object-create')\n    , getPrototypeOf      = require('./_object-gpo')\n    , gOPN                = require('./_object-gopn').f\n    , getIterFn           = require('./core.get-iterator-method')\n    , uid                 = require('./_uid')\n    , wks                 = require('./_wks')\n    , createArrayMethod   = require('./_array-methods')\n    , createArrayIncludes = require('./_array-includes')\n    , speciesConstructor  = require('./_species-constructor')\n    , ArrayIterators      = require('./es6.array.iterator')\n    , Iterators           = require('./_iterators')\n    , $iterDetect         = require('./_iter-detect')\n    , setSpecies          = require('./_set-species')\n    , arrayFill           = require('./_array-fill')\n    , arrayCopyWithin     = require('./_array-copy-within')\n    , $DP                 = require('./_object-dp')\n    , $GOPD               = require('./_object-gopd')\n    , dP                  = $DP.f\n    , gOPD                = $GOPD.f\n    , RangeError          = global.RangeError\n    , TypeError           = global.TypeError\n    , Uint8Array          = global.Uint8Array\n    , ARRAY_BUFFER        = 'ArrayBuffer'\n    , SHARED_BUFFER       = 'Shared' + ARRAY_BUFFER\n    , BYTES_PER_ELEMENT   = 'BYTES_PER_ELEMENT'\n    , PROTOTYPE           = 'prototype'\n    , ArrayProto          = Array[PROTOTYPE]\n    , $ArrayBuffer        = $buffer.ArrayBuffer\n    , $DataView           = $buffer.DataView\n    , arrayForEach        = createArrayMethod(0)\n    , arrayFilter         = createArrayMethod(2)\n    , arraySome           = createArrayMethod(3)\n    , arrayEvery          = createArrayMethod(4)\n    , arrayFind           = createArrayMethod(5)\n    , arrayFindIndex      = createArrayMethod(6)\n    , arrayIncludes       = createArrayIncludes(true)\n    , arrayIndexOf        = createArrayIncludes(false)\n    , arrayValues         = ArrayIterators.values\n    , arrayKeys           = ArrayIterators.keys\n    , arrayEntries        = ArrayIterators.entries\n    , arrayLastIndexOf    = ArrayProto.lastIndexOf\n    , arrayReduce         = ArrayProto.reduce\n    , arrayReduceRight    = ArrayProto.reduceRight\n    , arrayJoin           = ArrayProto.join\n    , arraySort           = ArrayProto.sort\n    , arraySlice          = ArrayProto.slice\n    , arrayToString       = ArrayProto.toString\n    , arrayToLocaleString = ArrayProto.toLocaleString\n    , ITERATOR            = wks('iterator')\n    , TAG                 = wks('toStringTag')\n    , TYPED_CONSTRUCTOR   = uid('typed_constructor')\n    , DEF_CONSTRUCTOR     = uid('def_constructor')\n    , ALL_CONSTRUCTORS    = $typed.CONSTR\n    , TYPED_ARRAY         = $typed.TYPED\n    , VIEW                = $typed.VIEW\n    , WRONG_LENGTH        = 'Wrong length!';\n\n  var $map = createArrayMethod(1, function(O, length){\n    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n  });\n\n  var LITTLE_ENDIAN = fails(function(){\n    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n  });\n\n  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){\n    new Uint8Array(1).set({});\n  });\n\n  var strictToLength = function(it, SAME){\n    if(it === undefined)throw TypeError(WRONG_LENGTH);\n    var number = +it\n      , length = toLength(it);\n    if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH);\n    return length;\n  };\n\n  var toOffset = function(it, BYTES){\n    var offset = toInteger(it);\n    if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!');\n    return offset;\n  };\n\n  var validate = function(it){\n    if(isObject(it) && TYPED_ARRAY in it)return it;\n    throw TypeError(it + ' is not a typed array!');\n  };\n\n  var allocate = function(C, length){\n    if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){\n      throw TypeError('It is not a typed array constructor!');\n    } return new C(length);\n  };\n\n  var speciesFromList = function(O, list){\n    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n  };\n\n  var fromList = function(C, list){\n    var index  = 0\n      , length = list.length\n      , result = allocate(C, length);\n    while(length > index)result[index] = list[index++];\n    return result;\n  };\n\n  var addGetter = function(it, key, internal){\n    dP(it, key, {get: function(){ return this._d[internal]; }});\n  };\n\n  var $from = function from(source /*, mapfn, thisArg */){\n    var O       = toObject(source)\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , iterFn  = getIterFn(O)\n      , i, length, values, result, step, iterator;\n    if(iterFn != undefined && !isArrayIter(iterFn)){\n      for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){\n        values.push(step.value);\n      } O = values;\n    }\n    if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2);\n    for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){\n      result[i] = mapping ? mapfn(O[i], i) : O[i];\n    }\n    return result;\n  };\n\n  var $of = function of(/*...items*/){\n    var index  = 0\n      , length = arguments.length\n      , result = allocate(this, length);\n    while(length > index)result[index] = arguments[index++];\n    return result;\n  };\n\n  // iOS Safari 6.x fails here\n  var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); });\n\n  var $toLocaleString = function toLocaleString(){\n    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n  };\n\n  var proto = {\n    copyWithin: function copyWithin(target, start /*, end */){\n      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    every: function every(callbackfn /*, thisArg */){\n      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars\n      return arrayFill.apply(validate(this), arguments);\n    },\n    filter: function filter(callbackfn /*, thisArg */){\n      return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n        arguments.length > 1 ? arguments[1] : undefined));\n    },\n    find: function find(predicate /*, thisArg */){\n      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    findIndex: function findIndex(predicate /*, thisArg */){\n      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    forEach: function forEach(callbackfn /*, thisArg */){\n      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    indexOf: function indexOf(searchElement /*, fromIndex */){\n      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    includes: function includes(searchElement /*, fromIndex */){\n      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    join: function join(separator){ // eslint-disable-line no-unused-vars\n      return arrayJoin.apply(validate(this), arguments);\n    },\n    lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars\n      return arrayLastIndexOf.apply(validate(this), arguments);\n    },\n    map: function map(mapfn /*, thisArg */){\n      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n      return arrayReduce.apply(validate(this), arguments);\n    },\n    reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n      return arrayReduceRight.apply(validate(this), arguments);\n    },\n    reverse: function reverse(){\n      var that   = this\n        , length = validate(that).length\n        , middle = Math.floor(length / 2)\n        , index  = 0\n        , value;\n      while(index < middle){\n        value         = that[index];\n        that[index++] = that[--length];\n        that[length]  = value;\n      } return that;\n    },\n    some: function some(callbackfn /*, thisArg */){\n      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    sort: function sort(comparefn){\n      return arraySort.call(validate(this), comparefn);\n    },\n    subarray: function subarray(begin, end){\n      var O      = validate(this)\n        , length = O.length\n        , $begin = toIndex(begin, length);\n      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n        O.buffer,\n        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n        toLength((end === undefined ? length : toIndex(end, length)) - $begin)\n      );\n    }\n  };\n\n  var $slice = function slice(start, end){\n    return speciesFromList(this, arraySlice.call(validate(this), start, end));\n  };\n\n  var $set = function set(arrayLike /*, offset */){\n    validate(this);\n    var offset = toOffset(arguments[1], 1)\n      , length = this.length\n      , src    = toObject(arrayLike)\n      , len    = toLength(src.length)\n      , index  = 0;\n    if(len + offset > length)throw RangeError(WRONG_LENGTH);\n    while(index < len)this[offset + index] = src[index++];\n  };\n\n  var $iterators = {\n    entries: function entries(){\n      return arrayEntries.call(validate(this));\n    },\n    keys: function keys(){\n      return arrayKeys.call(validate(this));\n    },\n    values: function values(){\n      return arrayValues.call(validate(this));\n    }\n  };\n\n  var isTAIndex = function(target, key){\n    return isObject(target)\n      && target[TYPED_ARRAY]\n      && typeof key != 'symbol'\n      && key in target\n      && String(+key) == String(key);\n  };\n  var $getDesc = function getOwnPropertyDescriptor(target, key){\n    return isTAIndex(target, key = toPrimitive(key, true))\n      ? propertyDesc(2, target[key])\n      : gOPD(target, key);\n  };\n  var $setDesc = function defineProperty(target, key, desc){\n    if(isTAIndex(target, key = toPrimitive(key, true))\n      && isObject(desc)\n      && has(desc, 'value')\n      && !has(desc, 'get')\n      && !has(desc, 'set')\n      // TODO: add validation descriptor w/o calling accessors\n      && !desc.configurable\n      && (!has(desc, 'writable') || desc.writable)\n      && (!has(desc, 'enumerable') || desc.enumerable)\n    ){\n      target[key] = desc.value;\n      return target;\n    } else return dP(target, key, desc);\n  };\n\n  if(!ALL_CONSTRUCTORS){\n    $GOPD.f = $getDesc;\n    $DP.f   = $setDesc;\n  }\n\n  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n    getOwnPropertyDescriptor: $getDesc,\n    defineProperty:           $setDesc\n  });\n\n  if(fails(function(){ arrayToString.call({}); })){\n    arrayToString = arrayToLocaleString = function toString(){\n      return arrayJoin.call(this);\n    }\n  }\n\n  var $TypedArrayPrototype$ = redefineAll({}, proto);\n  redefineAll($TypedArrayPrototype$, $iterators);\n  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n  redefineAll($TypedArrayPrototype$, {\n    slice:          $slice,\n    set:            $set,\n    constructor:    function(){ /* noop */ },\n    toString:       arrayToString,\n    toLocaleString: $toLocaleString\n  });\n  addGetter($TypedArrayPrototype$, 'buffer', 'b');\n  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n  addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n  addGetter($TypedArrayPrototype$, 'length', 'e');\n  dP($TypedArrayPrototype$, TAG, {\n    get: function(){ return this[TYPED_ARRAY]; }\n  });\n\n  module.exports = function(KEY, BYTES, wrapper, CLAMPED){\n    CLAMPED = !!CLAMPED;\n    var NAME       = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'\n      , ISNT_UINT8 = NAME != 'Uint8Array'\n      , GETTER     = 'get' + KEY\n      , SETTER     = 'set' + KEY\n      , TypedArray = global[NAME]\n      , Base       = TypedArray || {}\n      , TAC        = TypedArray && getPrototypeOf(TypedArray)\n      , FORCED     = !TypedArray || !$typed.ABV\n      , O          = {}\n      , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n    var getter = function(that, index){\n      var data = that._d;\n      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n    };\n    var setter = function(that, index, value){\n      var data = that._d;\n      if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n    };\n    var addElement = function(that, index){\n      dP(that, index, {\n        get: function(){\n          return getter(this, index);\n        },\n        set: function(value){\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n    if(FORCED){\n      TypedArray = wrapper(function(that, data, $offset, $length){\n        anInstance(that, TypedArray, NAME, '_d');\n        var index  = 0\n          , offset = 0\n          , buffer, byteLength, length, klass;\n        if(!isObject(data)){\n          length     = strictToLength(data, true)\n          byteLength = length * BYTES;\n          buffer     = new $ArrayBuffer(byteLength);\n        } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n          buffer = data;\n          offset = toOffset($offset, BYTES);\n          var $len = data.byteLength;\n          if($length === undefined){\n            if($len % BYTES)throw RangeError(WRONG_LENGTH);\n            byteLength = $len - offset;\n            if(byteLength < 0)throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if(TYPED_ARRAY in data){\n          return fromList(TypedArray, data);\n        } else {\n          return $from.call(TypedArray, data);\n        }\n        hide(that, '_d', {\n          b: buffer,\n          o: offset,\n          l: byteLength,\n          e: length,\n          v: new $DataView(buffer)\n        });\n        while(index < length)addElement(that, index++);\n      });\n      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n      hide(TypedArrayPrototype, 'constructor', TypedArray);\n    } else if(!$iterDetect(function(iter){\n      // V8 works with iterators, but fails in many other cases\n      // https://code.google.com/p/v8/issues/detail?id=4552\n      new TypedArray(null); // eslint-disable-line no-new\n      new TypedArray(iter); // eslint-disable-line no-new\n    }, true)){\n      TypedArray = wrapper(function(that, data, $offset, $length){\n        anInstance(that, TypedArray, NAME);\n        var klass;\n        // `ws` module bug, temporarily remove validation length for Uint8Array\n        // https://github.com/websockets/ws/pull/645\n        if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8));\n        if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n          return $length !== undefined\n            ? new Base(data, toOffset($offset, BYTES), $length)\n            : $offset !== undefined\n              ? new Base(data, toOffset($offset, BYTES))\n              : new Base(data);\n        }\n        if(TYPED_ARRAY in data)return fromList(TypedArray, data);\n        return $from.call(TypedArray, data);\n      });\n      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){\n        if(!(key in TypedArray))hide(TypedArray, key, Base[key]);\n      });\n      TypedArray[PROTOTYPE] = TypedArrayPrototype;\n      if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray;\n    }\n    var $nativeIterator   = TypedArrayPrototype[ITERATOR]\n      , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined)\n      , $iterator         = $iterators.values;\n    hide(TypedArray, TYPED_CONSTRUCTOR, true);\n    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n    hide(TypedArrayPrototype, VIEW, true);\n    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n    if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){\n      dP(TypedArrayPrototype, TAG, {\n        get: function(){ return NAME; }\n      });\n    }\n\n    O[NAME] = TypedArray;\n\n    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n    $export($export.S, NAME, {\n      BYTES_PER_ELEMENT: BYTES,\n      from: $from,\n      of: $of\n    });\n\n    if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n    $export($export.P, NAME, proto);\n\n    setSpecies(NAME);\n\n    $export($export.P + $export.F * FORCED_SET, NAME, {set: $set});\n\n    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n    $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString});\n\n    $export($export.P + $export.F * fails(function(){\n      new TypedArray(1).slice();\n    }), NAME, {slice: $slice});\n\n    $export($export.P + $export.F * (fails(function(){\n      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString()\n    }) || !fails(function(){\n      TypedArrayPrototype.toLocaleString.call([1, 2]);\n    })), NAME, {toLocaleString: $toLocaleString});\n\n    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n    if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator);\n  };\n} else module.exports = function(){ /* empty */ };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_typed-array.js\n ** module id = 27\n ** module chunks = 0\n **/"",""module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_a-function.js\n ** module id = 28\n ** module chunks = 0\n **/"",""var META     = require('./_uid')('meta')\n  , isObject = require('./_is-object')\n  , has      = require('./_has')\n  , setDesc  = require('./_object-dp').f\n  , id       = 0;\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\nvar FREEZE = !require('./_fails')(function(){\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n  setDesc(it, META, {value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  }});\n};\nvar fastKey = function(it, create){\n  // return primitive with prefix\n  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return 'F';\n    // not necessary to add metadata\n    if(!create)return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function(it, create){\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return true;\n    // not necessary to add metadata\n    if(!create)return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY:      META,\n  NEED:     false,\n  fastKey:  fastKey,\n  getWeak:  getWeak,\n  onFreeze: onFreeze\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_meta.js\n ** module id = 29\n ** module chunks = 0\n **/"",""module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_property-desc.js\n ** module id = 30\n ** module chunks = 0\n **/"",""// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_to-integer.js\n ** module id = 31\n ** module chunks = 0\n **/"",""// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_to-primitive.js\n ** module id = 32\n ** module chunks = 0\n **/"",""var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_cof.js\n ** module id = 33\n ** module chunks = 0\n **/"",""// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_ctx.js\n ** module id = 34\n ** module chunks = 0\n **/"",""// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject    = require('./_an-object')\n  , dPs         = require('./_object-dps')\n  , enumBugKeys = require('./_enum-bug-keys')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , Empty       = function(){ /* empty */ }\n  , PROTOTYPE   = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe')\n    , i      = enumBugKeys.length\n    , lt     = '<'\n    , gt     = '>'\n    , iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n  var result;\n  if(O !== null){\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty;\n    Empty[PROTOTYPE] = null;\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-create.js\n ** module id = 35\n ** module chunks = 0\n **/"",""// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys      = require('./_object-keys-internal')\n  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\n  return $keys(O, hiddenKeys);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-gopn.js\n ** module id = 36\n ** module chunks = 0\n **/"",""var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_to-index.js\n ** module id = 37\n ** module chunks = 0\n **/"",""var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_uid.js\n ** module id = 38\n ** module chunks = 0\n **/"",""'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof')\n  , test    = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif(test + '' != '[object z]'){\n  require('./_redefine')(Object.prototype, 'toString', function toString(){\n    return '[object ' + classof(this) + ']';\n  }, true);\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.to-string.js\n ** module id = 39\n ** module chunks = 0\n **/"",""module.exports = {};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_iterators.js\n ** module id = 41\n ** module chunks = 0\n **/"",""// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys       = require('./_object-keys-internal')\n  , enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O){\n  return $keys(O, enumBugKeys);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-keys.js\n ** module id = 42\n ** module chunks = 0\n **/"",""// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables')\n  , ArrayProto  = Array.prototype;\nif(ArrayProto[UNSCOPABLES] == undefined)require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function(key){\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_add-to-unscopables.js\n ** module id = 43\n ** module chunks = 0\n **/"",""module.exports = function(it, Constructor, name, forbiddenField){\n  if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_an-instance.js\n ** module id = 44\n ** module chunks = 0\n **/"",""// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_iobject.js\n ** module id = 45\n ** module chunks = 0\n **/"",""module.exports = false;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_library.js\n ** module id = 46\n ** module chunks = 0\n **/"",""var redefine = require('./_redefine');\nmodule.exports = function(target, src, safe){\n  for(var key in src)redefine(target, key, src[key], safe);\n  return target;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_redefine-all.js\n ** module id = 47\n ** module chunks = 0\n **/"",""'use strict';\nvar global      = require('./_global')\n  , dP          = require('./_object-dp')\n  , DESCRIPTORS = require('./_descriptors')\n  , SPECIES     = require('./_wks')('species');\n\nmodule.exports = function(KEY){\n  var C = global[KEY];\n  if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {\n    configurable: true,\n    get: function(){ return this; }\n  });\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_set-species.js\n ** module id = 48\n ** module chunks = 0\n **/"",""var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_set-to-string-tag.js\n ** module id = 49\n ** module chunks = 0\n **/"",""'use strict';\nvar global            = require('./_global')\n  , $export           = require('./_export')\n  , redefine          = require('./_redefine')\n  , redefineAll       = require('./_redefine-all')\n  , meta              = require('./_meta')\n  , forOf             = require('./_for-of')\n  , anInstance        = require('./_an-instance')\n  , isObject          = require('./_is-object')\n  , fails             = require('./_fails')\n  , $iterDetect       = require('./_iter-detect')\n  , setToStringTag    = require('./_set-to-string-tag')\n  , inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n  var Base  = global[NAME]\n    , C     = Base\n    , ADDER = IS_MAP ? 'set' : 'add'\n    , proto = C && C.prototype\n    , O     = {};\n  var fixMethod = function(KEY){\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function(a){\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a){\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a){\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n    new C().entries().next();\n  }))){\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance             = new C\n      // early implementations not supports chaining\n      , HASNT_CHAINING       = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance\n      // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n      , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })\n      // most early implementations doesn't supports iterables, most modern - not close it correctly\n      , ACCEPT_ITERABLES     = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new\n      // for early implementations -0 and +0 not the same\n      , BUGGY_ZERO = !IS_WEAK && fails(function(){\n        // V8 ~ Chromium 42- fails only with 5+ elements\n        var $instance = new C()\n          , index     = 5;\n        while(index--)$instance[ADDER](index, index);\n        return !$instance.has(-0);\n      });\n    if(!ACCEPT_ITERABLES){ \n      C = wrapper(function(target, iterable){\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base, target, C);\n        if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if(IS_WEAK && proto.clear)delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_collection.js\n ** module id = 51\n ** module chunks = 0\n **/"",""'use strict';\nvar hide     = require('./_hide')\n  , redefine = require('./_redefine')\n  , fails    = require('./_fails')\n  , defined  = require('./_defined')\n  , wks      = require('./_wks');\n\nmodule.exports = function(KEY, length, exec){\n  var SYMBOL   = wks(KEY)\n    , fns      = exec(defined, SYMBOL, ''[KEY])\n    , strfn    = fns[0]\n    , rxfn     = fns[1];\n  if(fails(function(){\n    var O = {};\n    O[SYMBOL] = function(){ return 7; };\n    return ''[KEY](O) != 7;\n  })){\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function(string, arg){ return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function(string){ return rxfn.call(string, this); }\n    );\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_fix-re-wks.js\n ** module id = 52\n ** module chunks = 0\n **/"",""var ctx         = require('./_ctx')\n  , call        = require('./_iter-call')\n  , isArrayIter = require('./_is-array-iter')\n  , anObject    = require('./_an-object')\n  , toLength    = require('./_to-length')\n  , getIterFn   = require('./core.get-iterator-method')\n  , BREAK       = {}\n  , RETURN      = {};\nvar exports = module.exports = function(iterable, entries, fn, that, ITERATOR){\n  var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)\n    , f      = ctx(fn, that, entries ? 2 : 1)\n    , index  = 0\n    , length, step, iterator, result;\n  if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if(result === BREAK || result === RETURN)return result;\n  } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n    result = call(iterator, f, step.value, entries);\n    if(result === BREAK || result === RETURN)return result;\n  }\n};\nexports.BREAK  = BREAK;\nexports.RETURN = RETURN;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_for-of.js\n ** module id = 53\n ** module chunks = 0\n **/"",""exports.f = Object.getOwnPropertySymbols;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-gops.js\n ** module id = 54\n ** module chunks = 0\n **/"",""exports.f = {}.propertyIsEnumerable;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-pie.js\n ** module id = 55\n ** module chunks = 0\n **/"",""var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_shared.js\n ** module id = 56\n ** module chunks = 0\n **/"",""var $export = require('./_export')\n  , defined = require('./_defined')\n  , fails   = require('./_fails')\n  , spaces  = require('./_string-ws')\n  , space   = '[' + spaces + ']'\n  , non     = '\\u200b\\u0085'\n  , ltrim   = RegExp('^' + space + space + '*')\n  , rtrim   = RegExp(space + space + '*$');\n\nvar exporter = function(KEY, exec, ALIAS){\n  var exp   = {};\n  var FORCE = fails(function(){\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if(ALIAS)exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function(string, TYPE){\n  string = String(defined(string));\n  if(TYPE & 1)string = string.replace(ltrim, '');\n  if(TYPE & 2)string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_string-trim.js\n ** module id = 57\n ** module chunks = 0\n **/"",""var global = require('./_global')\n  , hide   = require('./_hide')\n  , uid    = require('./_uid')\n  , TYPED  = uid('typed_array')\n  , VIEW   = uid('view')\n  , ABV    = !!(global.ArrayBuffer && global.DataView)\n  , CONSTR = ABV\n  , i = 0, l = 9, Typed;\n\nvar TypedArrayConstructors = (\n  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile(i < l){\n  if(Typed = global[TypedArrayConstructors[i++]]){\n    hide(Typed.prototype, TYPED, true);\n    hide(Typed.prototype, VIEW, true);\n  } else CONSTR = false;\n}\n\nmodule.exports = {\n  ABV:    ABV,\n  CONSTR: CONSTR,\n  TYPED:  TYPED,\n  VIEW:   VIEW\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_typed.js\n ** module id = 58\n ** module chunks = 0\n **/"",""'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.iterator.js\n ** module id = 59\n ** module chunks = 0\n **/"",""'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.iterator.js\n ** module id = 60\n ** module chunks = 0\n **/"",""// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object')\n  , toIndex  = require('./_to-index')\n  , toLength = require('./_to-length');\nmodule.exports = function fill(value /*, start = 0, end = @length */){\n  var O      = toObject(this)\n    , length = toLength(O.length)\n    , aLen   = arguments.length\n    , index  = toIndex(aLen > 1 ? arguments[1] : undefined, length)\n    , end    = aLen > 2 ? arguments[2] : undefined\n    , endPos = end === undefined ? length : toIndex(end, length);\n  while(endPos > index)O[index++] = value;\n  return O;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-fill.js\n ** module id = 62\n ** module chunks = 0\n **/"",""// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-includes.js\n ** module id = 63\n ** module chunks = 0\n **/"",""// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_classof.js\n ** module id = 64\n ** module chunks = 0\n **/"",""// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_enum-bug-keys.js\n ** module id = 65\n ** module chunks = 0\n **/"",""var MATCH = require('./_wks')('match');\nmodule.exports = function(KEY){\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch(e){\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch(f){ /* empty */ }\n  } return true;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_fails-is-regexp.js\n ** module id = 66\n ** module chunks = 0\n **/"",""'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function(){\n  var that   = anObject(this)\n    , result = '';\n  if(that.global)     result += 'g';\n  if(that.ignoreCase) result += 'i';\n  if(that.multiline)  result += 'm';\n  if(that.unicode)    result += 'u';\n  if(that.sticky)     result += 'y';\n  return result;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_flags.js\n ** module id = 67\n ** module chunks = 0\n **/"",""var isObject       = require('./_is-object')\n  , setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function(that, target, C){\n  var P, S = target.constructor;\n  if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){\n    setPrototypeOf(that, P);\n  } return that;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_inherit-if-required.js\n ** module id = 68\n ** module chunks = 0\n **/"",""// check on default Array iterator\nvar Iterators  = require('./_iterators')\n  , ITERATOR   = require('./_wks')('iterator')\n  , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_is-array-iter.js\n ** module id = 69\n ** module chunks = 0\n **/"",""// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg){\n  return cof(arg) == 'Array';\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_is-array.js\n ** module id = 70\n ** module chunks = 0\n **/"",""// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object')\n  , cof      = require('./_cof')\n  , MATCH    = require('./_wks')('match');\nmodule.exports = function(it){\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_is-regexp.js\n ** module id = 71\n ** module chunks = 0\n **/"",""'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_iter-define.js\n ** module id = 72\n ** module chunks = 0\n **/"",""var ITERATOR     = require('./_wks')('iterator')\n  , SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function(){ SAFE_CLOSING = true; };\n  Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n  if(!skipClosing && !SAFE_CLOSING)return false;\n  var safe = false;\n  try {\n    var arr  = [7]\n      , iter = arr[ITERATOR]();\n    iter.next = function(){ return {done: safe = true}; };\n    arr[ITERATOR] = function(){ return iter; };\n    exec(arr);\n  } catch(e){ /* empty */ }\n  return safe;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_iter-detect.js\n ** module id = 73\n ** module chunks = 0\n **/"",""// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n  // Old FF bug\n  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n  // Tor Browser bug\n  || $expm1(-2e-17) != -2e-17\n) ? function expm1(x){\n  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_math-expm1.js\n ** module id = 74\n ** module chunks = 0\n **/"",""// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_math-sign.js\n ** module id = 75\n ** module chunks = 0\n **/"",""// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object')\n  , anObject = require('./_an-object');\nvar check = function(O, proto){\n  anObject(O);\n  if(!isObject(proto) && proto !== null)throw TypeError(proto + \"": can't set as prototype!\"");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function(test, buggy, set){\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch(e){ buggy = true; }\n      return function setPrototypeOf(O, proto){\n        check(O, proto);\n        if(buggy)O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_set-proto.js\n ** module id = 76\n ** module chunks = 0\n **/"",""var shared = require('./_shared')('keys')\n  , uid    = require('./_uid');\nmodule.exports = function(key){\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_shared-key.js\n ** module id = 77\n ** module chunks = 0\n **/"",""// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp')\n  , defined  = require('./_defined');\n\nmodule.exports = function(that, searchString, NAME){\n  if(isRegExp(searchString))throw TypeError('String#' + NAME + \"" doesn't accept regex!\"");\n  return String(defined(that));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_string-context.js\n ** module id = 78\n ** module chunks = 0\n **/"",""module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_string-ws.js\n ** module id = 79\n ** module chunks = 0\n **/"",""'use strict';\nvar global         = require('./_global')\n  , DESCRIPTORS    = require('./_descriptors')\n  , LIBRARY        = require('./_library')\n  , $typed         = require('./_typed')\n  , hide           = require('./_hide')\n  , redefineAll    = require('./_redefine-all')\n  , fails          = require('./_fails')\n  , anInstance     = require('./_an-instance')\n  , toInteger      = require('./_to-integer')\n  , toLength       = require('./_to-length')\n  , gOPN           = require('./_object-gopn').f\n  , dP             = require('./_object-dp').f\n  , arrayFill      = require('./_array-fill')\n  , setToStringTag = require('./_set-to-string-tag')\n  , ARRAY_BUFFER   = 'ArrayBuffer'\n  , DATA_VIEW      = 'DataView'\n  , PROTOTYPE      = 'prototype'\n  , WRONG_LENGTH   = 'Wrong length!'\n  , WRONG_INDEX    = 'Wrong index!'\n  , $ArrayBuffer   = global[ARRAY_BUFFER]\n  , $DataView      = global[DATA_VIEW]\n  , Math           = global.Math\n  , RangeError     = global.RangeError\n  , Infinity       = global.Infinity\n  , BaseBuffer     = $ArrayBuffer\n  , abs            = Math.abs\n  , pow            = Math.pow\n  , floor          = Math.floor\n  , log            = Math.log\n  , LN2            = Math.LN2\n  , BUFFER         = 'buffer'\n  , BYTE_LENGTH    = 'byteLength'\n  , BYTE_OFFSET    = 'byteOffset'\n  , $BUFFER        = DESCRIPTORS ? '_b' : BUFFER\n  , $LENGTH        = DESCRIPTORS ? '_l' : BYTE_LENGTH\n  , $OFFSET        = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar packIEEE754 = function(value, mLen, nBytes){\n  var buffer = Array(nBytes)\n    , eLen   = nBytes * 8 - mLen - 1\n    , eMax   = (1 << eLen) - 1\n    , eBias  = eMax >> 1\n    , rt     = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0\n    , i      = 0\n    , s      = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0\n    , e, m, c;\n  value = abs(value)\n  if(value != value || value === Infinity){\n    m = value != value ? 1 : 0;\n    e = eMax;\n  } else {\n    e = floor(log(value) / LN2);\n    if(value * (c = pow(2, -e)) < 1){\n      e--;\n      c *= 2;\n    }\n    if(e + eBias >= 1){\n      value += rt / c;\n    } else {\n      value += rt * pow(2, 1 - eBias);\n    }\n    if(value * c >= 2){\n      e++;\n      c /= 2;\n    }\n    if(e + eBias >= eMax){\n      m = 0;\n      e = eMax;\n    } else if(e + eBias >= 1){\n      m = (value * c - 1) * pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * pow(2, eBias - 1) * pow(2, mLen);\n      e = 0;\n    }\n  }\n  for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n  e = e << mLen | m;\n  eLen += mLen;\n  for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n  buffer[--i] |= s * 128;\n  return buffer;\n};\nvar unpackIEEE754 = function(buffer, mLen, nBytes){\n  var eLen  = nBytes * 8 - mLen - 1\n    , eMax  = (1 << eLen) - 1\n    , eBias = eMax >> 1\n    , nBits = eLen - 7\n    , i     = nBytes - 1\n    , s     = buffer[i--]\n    , e     = s & 127\n    , m;\n  s >>= 7;\n  for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n  for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n  if(e === 0){\n    e = 1 - eBias;\n  } else if(e === eMax){\n    return m ? NaN : s ? -Infinity : Infinity;\n  } else {\n    m = m + pow(2, mLen);\n    e = e - eBias;\n  } return (s ? -1 : 1) * m * pow(2, e - mLen);\n};\n\nvar unpackI32 = function(bytes){\n  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n};\nvar packI8 = function(it){\n  return [it & 0xff];\n};\nvar packI16 = function(it){\n  return [it & 0xff, it >> 8 & 0xff];\n};\nvar packI32 = function(it){\n  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n};\nvar packF64 = function(it){\n  return packIEEE754(it, 52, 8);\n};\nvar packF32 = function(it){\n  return packIEEE754(it, 23, 4);\n};\n\nvar addGetter = function(C, key, internal){\n  dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }});\n};\n\nvar get = function(view, bytes, index, isLittleEndian){\n  var numIndex = +index\n    , intIndex = toInteger(numIndex);\n  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b\n    , start = intIndex + view[$OFFSET]\n    , pack  = store.slice(start, start + bytes);\n  return isLittleEndian ? pack : pack.reverse();\n};\nvar set = function(view, bytes, index, conversion, value, isLittleEndian){\n  var numIndex = +index\n    , intIndex = toInteger(numIndex);\n  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b\n    , start = intIndex + view[$OFFSET]\n    , pack  = conversion(+value);\n  for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n};\n\nvar validateArrayBufferArguments = function(that, length){\n  anInstance(that, $ArrayBuffer, ARRAY_BUFFER);\n  var numberLength = +length\n    , byteLength   = toLength(numberLength);\n  if(numberLength != byteLength)throw RangeError(WRONG_LENGTH);\n  return byteLength;\n};\n\nif(!$typed.ABV){\n  $ArrayBuffer = function ArrayBuffer(length){\n    var byteLength = validateArrayBufferArguments(this, length);\n    this._b       = arrayFill.call(Array(byteLength), 0);\n    this[$LENGTH] = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength){\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = buffer[$LENGTH]\n      , offset       = toInteger(byteOffset);\n    if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH);\n    this[$BUFFER] = buffer;\n    this[$OFFSET] = offset;\n    this[$LENGTH] = byteLength;\n  };\n\n  if(DESCRIPTORS){\n    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n    addGetter($DataView, BUFFER, '_b');\n    addGetter($DataView, BYTE_LENGTH, '_l');\n    addGetter($DataView, BYTE_OFFSET, '_o');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset){\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset){\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /*, littleEndian */){\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /*, littleEndian */){\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /*, littleEndian */){\n      return unpackI32(get(this, 4, byteOffset, arguments[1]));\n    },\n    getUint32: function getUint32(byteOffset /*, littleEndian */){\n      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /*, littleEndian */){\n      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n    },\n    getFloat64: function getFloat64(byteOffset /*, littleEndian */){\n      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n    },\n    setInt8: function setInt8(byteOffset, value){\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setUint8: function setUint8(byteOffset, value){\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /*, littleEndian */){\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setUint16: function setUint16(byteOffset, value /*, littleEndian */){\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setInt32: function setInt32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setUint32: function setUint32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packF32, value, arguments[2]);\n    },\n    setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){\n      set(this, 8, byteOffset, packF64, value, arguments[2]);\n    }\n  });\n} else {\n  if(!fails(function(){\n    new $ArrayBuffer;     // eslint-disable-line no-new\n  }) || !fails(function(){\n    new $ArrayBuffer(.5); // eslint-disable-line no-new\n  })){\n    $ArrayBuffer = function ArrayBuffer(length){\n      return new BaseBuffer(validateArrayBufferArguments(this, length));\n    };\n    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n    for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){\n      if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]);\n    };\n    if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer;\n  }\n  // iOS Safari 7.x bug\n  var view = new $DataView(new $ArrayBuffer(2))\n    , $setInt8 = $DataView[PROTOTYPE].setInt8;\n  view.setInt8(0, 2147483648);\n  view.setInt8(1, 2147483649);\n  if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], {\n    setInt8: function setInt8(byteOffset, value){\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value){\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_typed-buffer.js\n ** module id = 80\n ** module chunks = 0\n **/"",""var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/core.get-iterator-method.js\n ** module id = 81\n ** module chunks = 0\n **/"",""var $iterators    = require('./es6.array.iterator')\n  , redefine      = require('./_redefine')\n  , global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , wks           = require('./_wks')\n  , ITERATOR      = wks('iterator')\n  , TO_STRING_TAG = wks('toStringTag')\n  , ArrayValues   = Iterators.Array;\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype\n    , key;\n  if(proto){\n    if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues);\n    if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true);\n  }\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/web.dom.iterable.js\n ** module id = 82\n ** module chunks = 0\n **/"",""var cof = require('./_cof');\nmodule.exports = function(it, msg){\n  if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg);\n  return +it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_a-number-value.js\n ** module id = 95\n ** module chunks = 0\n **/"",""// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object')\n  , toIndex  = require('./_to-index')\n  , toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){\n  var O     = toObject(this)\n    , len   = toLength(O.length)\n    , to    = toIndex(target, len)\n    , from  = toIndex(start, len)\n    , end   = arguments.length > 2 ? arguments[2] : undefined\n    , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)\n    , inc   = 1;\n  if(from < to && to < from + count){\n    inc  = -1;\n    from += count - 1;\n    to   += count - 1;\n  }\n  while(count-- > 0){\n    if(from in O)O[to] = O[from];\n    else delete O[to];\n    to   += inc;\n    from += inc;\n  } return O;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-copy-within.js\n ** module id = 96\n ** module chunks = 0\n **/"",""var aFunction = require('./_a-function')\n  , toObject  = require('./_to-object')\n  , IObject   = require('./_iobject')\n  , toLength  = require('./_to-length');\n\nmodule.exports = function(that, callbackfn, aLen, memo, isRight){\n  aFunction(callbackfn);\n  var O      = toObject(that)\n    , self   = IObject(O)\n    , length = toLength(O.length)\n    , index  = isRight ? length - 1 : 0\n    , i      = isRight ? -1 : 1;\n  if(aLen < 2)for(;;){\n    if(index in self){\n      memo = self[index];\n      index += i;\n      break;\n    }\n    index += i;\n    if(isRight ? index < 0 : length <= index){\n      throw TypeError('Reduce of empty array with no initial value');\n    }\n  }\n  for(;isRight ? index >= 0 : length > index; index += i)if(index in self){\n    memo = callbackfn(memo, self[index], index, O);\n  }\n  return memo;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-reduce.js\n ** module id = 97\n ** module chunks = 0\n **/"",""'use strict';\nvar aFunction  = require('./_a-function')\n  , isObject   = require('./_is-object')\n  , invoke     = require('./_invoke')\n  , arraySlice = [].slice\n  , factories  = {};\n\nvar construct = function(F, len, args){\n  if(!(len in factories)){\n    for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';\n    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n  } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /*, args... */){\n  var fn       = aFunction(this)\n    , partArgs = arraySlice.call(arguments, 1);\n  var bound = function(/* args... */){\n    var args = partArgs.concat(arraySlice.call(arguments));\n    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n  };\n  if(isObject(fn.prototype))bound.prototype = fn.prototype;\n  return bound;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_bind.js\n ** module id = 98\n ** module chunks = 0\n **/"",""'use strict';\nvar dP          = require('./_object-dp').f\n  , create      = require('./_object-create')\n  , redefineAll = require('./_redefine-all')\n  , ctx         = require('./_ctx')\n  , anInstance  = require('./_an-instance')\n  , defined     = require('./_defined')\n  , forOf       = require('./_for-of')\n  , $iterDefine = require('./_iter-define')\n  , step        = require('./_iter-step')\n  , setSpecies  = require('./_set-species')\n  , DESCRIPTORS = require('./_descriptors')\n  , fastKey     = require('./_meta').fastKey\n  , SIZE        = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function(that, key){\n  // fast case\n  var index = fastKey(key), entry;\n  if(index !== 'F')return that._i[index];\n  // frozen object case\n  for(entry = that._f; entry; entry = entry.n){\n    if(entry.k == key)return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n    var C = wrapper(function(that, iterable){\n      anInstance(that, C, NAME, '_i');\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear(){\n        for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){\n          entry.r = true;\n          if(entry.p)entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function(key){\n        var that  = this\n          , entry = getEntry(that, key);\n        if(entry){\n          var next = entry.n\n            , prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if(prev)prev.n = next;\n          if(next)next.p = prev;\n          if(that._f == entry)that._f = next;\n          if(that._l == entry)that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /*, that = undefined */){\n        anInstance(this, C, 'forEach');\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)\n          , entry;\n        while(entry = entry ? entry.n : this._f){\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while(entry && entry.r)entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key){\n        return !!getEntry(this, key);\n      }\n    });\n    if(DESCRIPTORS)dP(C.prototype, 'size', {\n      get: function(){\n        return defined(this[SIZE]);\n      }\n    });\n    return C;\n  },\n  def: function(that, key, value){\n    var entry = getEntry(that, key)\n      , prev, index;\n    // change existing entry\n    if(entry){\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if(!that._f)that._f = entry;\n      if(prev)prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if(index !== 'F')that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function(C, NAME, IS_MAP){\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function(iterated, kind){\n      this._t = iterated;  // target\n      this._k = kind;      // kind\n      this._l = undefined; // previous\n    }, function(){\n      var that  = this\n        , kind  = that._k\n        , entry = that._l;\n      // revert to the last existing entry\n      while(entry && entry.r)entry = entry.p;\n      // get next entry\n      if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if(kind == 'keys'  )return step(0, entry.k);\n      if(kind == 'values')return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_collection-strong.js\n ** module id = 99\n ** module chunks = 0\n **/"",""'use strict';\nvar redefineAll       = require('./_redefine-all')\n  , getWeak           = require('./_meta').getWeak\n  , anObject          = require('./_an-object')\n  , isObject          = require('./_is-object')\n  , anInstance        = require('./_an-instance')\n  , forOf             = require('./_for-of')\n  , createArrayMethod = require('./_array-methods')\n  , $has              = require('./_has')\n  , arrayFind         = createArrayMethod(5)\n  , arrayFindIndex    = createArrayMethod(6)\n  , id                = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function(that){\n  return that._l || (that._l = new UncaughtFrozenStore);\n};\nvar UncaughtFrozenStore = function(){\n  this.a = [];\n};\nvar findUncaughtFrozen = function(store, key){\n  return arrayFind(store.a, function(it){\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function(key){\n    var entry = findUncaughtFrozen(this, key);\n    if(entry)return entry[1];\n  },\n  has: function(key){\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function(key, value){\n    var entry = findUncaughtFrozen(this, key);\n    if(entry)entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function(key){\n    var index = arrayFindIndex(this.a, function(it){\n      return it[0] === key;\n    });\n    if(~index)this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n    var C = wrapper(function(that, iterable){\n      anInstance(that, C, NAME, '_i');\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function(key){\n        if(!isObject(key))return false;\n        var data = getWeak(key);\n        if(data === true)return uncaughtFrozenStore(this)['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key){\n        if(!isObject(key))return false;\n        var data = getWeak(key);\n        if(data === true)return uncaughtFrozenStore(this).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function(that, key, value){\n    var data = getWeak(anObject(key), true);\n    if(data === true)uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_collection-weak.js\n ** module id = 100\n ** module chunks = 0\n **/"",""'use strict';\nvar $defineProperty = require('./_object-dp')\n  , createDesc      = require('./_property-desc');\n\nmodule.exports = function(object, index, value){\n  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_create-property.js\n ** module id = 101\n ** module chunks = 0\n **/"",""var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_dom-create.js\n ** module id = 102\n ** module chunks = 0\n **/"",""module.exports = require('./_global').document && document.documentElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_html.js\n ** module id = 103\n ** module chunks = 0\n **/"",""module.exports = !require('./_descriptors') && !require('./_fails')(function(){\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_ie8-dom-define.js\n ** module id = 104\n ** module chunks = 0\n **/"",""// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object')\n  , floor    = Math.floor;\nmodule.exports = function isInteger(it){\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_is-integer.js\n ** module id = 105\n ** module chunks = 0\n **/"",""// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function(iterator, fn, value, entries){\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch(e){\n    var ret = iterator['return'];\n    if(ret !== undefined)anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_iter-call.js\n ** module id = 106\n ** module chunks = 0\n **/"",""'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_iter-create.js\n ** module id = 107\n ** module chunks = 0\n **/"",""module.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_iter-step.js\n ** module id = 108\n ** module chunks = 0\n **/"",""// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x){\n  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_math-log1p.js\n ** module id = 109\n ** module chunks = 0\n **/"",""'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = require('./_object-keys')\n  , gOPS     = require('./_object-gops')\n  , pIE      = require('./_object-pie')\n  , toObject = require('./_to-object')\n  , IObject  = require('./_iobject')\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-assign.js\n ** module id = 110\n ** module chunks = 0\n **/"",""var dP       = require('./_object-dp')\n  , anObject = require('./_an-object')\n  , getKeys  = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\n  anObject(O);\n  var keys   = getKeys(Properties)\n    , length = keys.length\n    , i = 0\n    , P;\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-dps.js\n ** module id = 111\n ** module chunks = 0\n **/"",""// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject')\n  , gOPN      = require('./_object-gopn').f\n  , toString  = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n  try {\n    return gOPN(it);\n  } catch(e){\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-gopn-ext.js\n ** module id = 112\n ** module chunks = 0\n **/"",""var has          = require('./_has')\n  , toIObject    = require('./_to-iobject')\n  , arrayIndexOf = require('./_array-includes')(false)\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function(object, names){\n  var O      = toIObject(object)\n    , i      = 0\n    , result = []\n    , key;\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while(names.length > i)if(has(O, key = names[i++])){\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_object-keys-internal.js\n ** module id = 113\n ** module chunks = 0\n **/"",""var $parseFloat = require('./_global').parseFloat\n  , $trim       = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str){\n  var string = $trim(String(str), 3)\n    , result = $parseFloat(string);\n  return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_parse-float.js\n ** module id = 114\n ** module chunks = 0\n **/"",""var $parseInt = require('./_global').parseInt\n  , $trim     = require('./_string-trim').trim\n  , ws        = require('./_string-ws')\n  , hex       = /^[\\-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){\n  var string = $trim(String(str), 3);\n  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_parse-int.js\n ** module id = 115\n ** module chunks = 0\n **/"",""// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_same-value.js\n ** module id = 116\n ** module chunks = 0\n **/"",""// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject  = require('./_an-object')\n  , aFunction = require('./_a-function')\n  , SPECIES   = require('./_wks')('species');\nmodule.exports = function(O, D){\n  var C = anObject(O).constructor, S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_species-constructor.js\n ** module id = 117\n ** module chunks = 0\n **/"",""var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_string-at.js\n ** module id = 118\n ** module chunks = 0\n **/"",""'use strict';\nvar toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n\nmodule.exports = function repeat(count){\n  var str = String(defined(this))\n    , res = ''\n    , n   = toInteger(count);\n  if(n < 0 || n == Infinity)throw RangeError(\""Count can't be negative\"");\n  for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;\n  return res;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_string-repeat.js\n ** module id = 119\n ** module chunks = 0\n **/"",""exports.f = require('./_wks');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_wks-ext.js\n ** module id = 120\n ** module chunks = 0\n **/"",""'use strict';\nvar strong = require('./_collection-strong');\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')('Map', function(get){\n  return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key){\n    var entry = strong.getEntry(this, key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value){\n    return strong.def(this, key === 0 ? 0 : key, value);\n  }\n}, strong, true);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.map.js\n ** module id = 121\n ** module chunks = 0\n **/"",""// 21.2.5.3 get RegExp.prototype.flags()\nif(require('./_descriptors') && /./g.flags != 'g')require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.flags.js\n ** module id = 122\n ** module chunks = 0\n **/"",""// @@match logic\nrequire('./_fix-re-wks')('match', 1, function(defined, MATCH, $match){\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp){\n    'use strict';\n    var O  = defined(this)\n      , fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.match.js\n ** module id = 123\n ** module chunks = 0\n **/"",""// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue){\n    'use strict';\n    var O  = defined(this)\n      , fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.replace.js\n ** module id = 124\n ** module chunks = 0\n **/"",""// @@search logic\nrequire('./_fix-re-wks')('search', 1, function(defined, SEARCH, $search){\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp){\n    'use strict';\n    var O  = defined(this)\n      , fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.search.js\n ** module id = 125\n ** module chunks = 0\n **/"",""// @@split logic\nrequire('./_fix-re-wks')('split', 2, function(defined, SPLIT, $split){\n  'use strict';\n  var isRegExp   = require('./_is-regexp')\n    , _split     = $split\n    , $push      = [].push\n    , $SPLIT     = 'split'\n    , LENGTH     = 'length'\n    , LAST_INDEX = 'lastIndex';\n  if(\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ){\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function(separator, limit){\n      var string = String(this);\n      if(separator === undefined && limit === 0)return [];\n      // If `separator` is not a regex, use native split\n      if(!isRegExp(separator))return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while(match = separatorCopy.exec(string)){\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if(lastIndex > lastLastIndex){\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){\n            for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;\n          });\n          if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if(output[LENGTH] >= splitLimit)break;\n        }\n        if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if(lastLastIndex === string[LENGTH]){\n        if(lastLength || !separatorCopy.test(''))output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if('0'[$SPLIT](undefined, 0)[LENGTH]){\n    $split = function(separator, limit){\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit){\n    var O  = defined(this)\n      , fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.split.js\n ** module id = 126\n ** module chunks = 0\n **/"",""'use strict';\nvar strong = require('./_collection-strong');\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')('Set', function(get){\n  return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value){\n    return strong.def(this, value = value === 0 ? 0 : value, value);\n  }\n}, strong);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.set.js\n ** module id = 127\n ** module chunks = 0\n **/"",""'use strict';\n// ECMAScript 6 symbols shim\nvar global         = require('./_global')\n  , has            = require('./_has')\n  , DESCRIPTORS    = require('./_descriptors')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , META           = require('./_meta').KEY\n  , $fails         = require('./_fails')\n  , shared         = require('./_shared')\n  , setToStringTag = require('./_set-to-string-tag')\n  , uid            = require('./_uid')\n  , wks            = require('./_wks')\n  , wksExt         = require('./_wks-ext')\n  , wksDefine      = require('./_wks-define')\n  , keyOf          = require('./_keyof')\n  , enumKeys       = require('./_enum-keys')\n  , isArray        = require('./_is-array')\n  , anObject       = require('./_an-object')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , createDesc     = require('./_property-desc')\n  , _create        = require('./_object-create')\n  , gOPNExt        = require('./_object-gopn-ext')\n  , $GOPD          = require('./_object-gopd')\n  , $DP            = require('./_object-dp')\n  , $keys          = require('./_object-keys')\n  , gOPD           = $GOPD.f\n  , dP             = $DP.f\n  , gOPN           = gOPNExt.f\n  , $Symbol        = global.Symbol\n  , $JSON          = global.JSON\n  , _stringify     = $JSON && $JSON.stringify\n  , PROTOTYPE      = 'prototype'\n  , HIDDEN         = wks('_hidden')\n  , TO_PRIMITIVE   = wks('toPrimitive')\n  , isEnum         = {}.propertyIsEnumerable\n  , SymbolRegistry = shared('symbol-registry')\n  , AllSymbols     = shared('symbols')\n  , OPSymbols      = shared('op-symbols')\n  , ObjectProto    = Object[PROTOTYPE]\n  , USE_NATIVE     = typeof $Symbol == 'function'\n  , QObject        = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n  return _create(dP({}, 'a', {\n    get: function(){ return dP(this, 'a', {value: 7}).a; }\n  })).a != 7;\n}) ? function(it, key, D){\n  var protoDesc = gOPD(ObjectProto, key);\n  if(protoDesc)delete ObjectProto[key];\n  dP(it, key, D);\n  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n  return typeof it == 'symbol';\n} : function(it){\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if(has(AllSymbols, key)){\n    if(!D.enumerable){\n      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n      D = _create(D, {enumerable: createDesc(0, false)});\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P))\n    , i    = 0\n    , l = keys.length\n    , key;\n  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P){\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n  it  = toIObject(it);\n  key = toPrimitive(key, true);\n  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n  var D = gOPD(it, key);\n  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n  var names  = gOPN(toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n  var IS_OP  = it === ObjectProto\n    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n  $Symbol = function Symbol(){\n    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function(value){\n      if(this === ObjectProto)$set.call(OPSymbols, value);\n      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f   = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f  = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if(DESCRIPTORS && !require('./_library')){\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function(name){\n    return wrap(wks(name));\n  }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function(key){\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(key){\n    if(isSymbol(key))return keyOf(SymbolRegistry, key);\n    throw TypeError(key + ' is not a symbol!');\n  },\n  useSetter: function(){ setter = true; },\n  useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it){\n    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n    var args = [it]\n      , i    = 1\n      , replacer, $replacer;\n    while(arguments.length > i)args.push(arguments[i++]);\n    replacer = args[1];\n    if(typeof replacer == 'function')$replacer = replacer;\n    if($replacer || !isArray(replacer))replacer = function(key, value){\n      if($replacer)value = $replacer.call(this, key, value);\n      if(!isSymbol(value))return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.symbol.js\n ** module id = 128\n ** module chunks = 0\n **/"",""'use strict';\nvar each         = require('./_array-methods')(0)\n  , redefine     = require('./_redefine')\n  , meta         = require('./_meta')\n  , assign       = require('./_object-assign')\n  , weak         = require('./_collection-weak')\n  , isObject     = require('./_is-object')\n  , getWeak      = meta.getWeak\n  , isExtensible = Object.isExtensible\n  , uncaughtFrozenStore = weak.ufstore\n  , tmp          = {}\n  , InternalMap;\n\nvar wrapper = function(get){\n  return function WeakMap(){\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key){\n    if(isObject(key)){\n      var data = getWeak(key);\n      if(data === true)return uncaughtFrozenStore(this).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value){\n    return weak.def(this, key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')('WeakMap', wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){\n  InternalMap = weak.getConstructor(wrapper);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function(key){\n    var proto  = $WeakMap.prototype\n      , method = proto[key];\n    redefine(proto, key, function(a, b){\n      // store frozen objects on internal weakmap shim\n      if(isObject(a) && !isExtensible(a)){\n        if(!this._f)this._f = new InternalMap;\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.weak-map.js\n ** module id = 129\n ** module chunks = 0\n **/"",""require('../modules/es6.string.iterator');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nmodule.exports = require('../modules/_core').Array;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/array.js\n ** module id = 147\n ** module chunks = 0\n **/"",""require('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nmodule.exports = Date;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/date.js\n ** module id = 148\n ** module chunks = 0\n **/"",""require('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nmodule.exports = require('../modules/_core').Function;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/function.js\n ** module id = 149\n ** module chunks = 0\n **/"",""require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.map');\nmodule.exports = require('../modules/_core').Map;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/map.js\n ** module id = 150\n ** module chunks = 0\n **/"",""require('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nmodule.exports = require('../modules/_core').Math;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/math.js\n ** module id = 151\n ** module chunks = 0\n **/"",""require('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nmodule.exports = require('../modules/_core').Number;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/number.js\n ** module id = 152\n ** module chunks = 0\n **/"",""require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\n\nmodule.exports = require('../modules/_core').Object;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/object.js\n ** module id = 153\n ** module chunks = 0\n **/"",""require('../modules/es6.parse-float');\nmodule.exports = require('../modules/_core').parseFloat;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/parse-float.js\n ** module id = 154\n ** module chunks = 0\n **/"",""require('../modules/es6.parse-int');\nmodule.exports = require('../modules/_core').parseInt;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/parse-int.js\n ** module id = 155\n ** module chunks = 0\n **/"",""require('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core').Reflect;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/reflect.js\n ** module id = 156\n ** module chunks = 0\n **/"",""require('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nmodule.exports = require('../modules/_core').RegExp;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/regexp.js\n ** module id = 157\n ** module chunks = 0\n **/"",""require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.set');\nmodule.exports = require('../modules/_core').Set;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/set.js\n ** module id = 158\n ** module chunks = 0\n **/"",""require('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nmodule.exports = require('../modules/_core').String;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/string.js\n ** module id = 159\n ** module chunks = 0\n **/"",""require('../modules/es6.symbol');\nrequire('../modules/es6.object.to-string');\nmodule.exports = require('../modules/_core').Symbol;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/symbol.js\n ** module id = 160\n ** module chunks = 0\n **/"",""require('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.object.to-string');\nmodule.exports = require('../modules/_core');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/typed.js\n ** module id = 161\n ** module chunks = 0\n **/"",""require('../modules/es6.object.to-string');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.weak-map');\nmodule.exports = require('../modules/_core').WeakMap;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/weak-map.js\n ** module id = 162\n ** module chunks = 0\n **/"",""require('../modules/es6.object.to-string');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.weak-set');\nmodule.exports = require('../modules/_core').WeakSet;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es6/weak-set.js\n ** module id = 163\n ** module chunks = 0\n **/"",""require('../modules/es7.reflect.define-metadata');\nrequire('../modules/es7.reflect.delete-metadata');\nrequire('../modules/es7.reflect.get-metadata');\nrequire('../modules/es7.reflect.get-metadata-keys');\nrequire('../modules/es7.reflect.get-own-metadata');\nrequire('../modules/es7.reflect.get-own-metadata-keys');\nrequire('../modules/es7.reflect.has-metadata');\nrequire('../modules/es7.reflect.has-own-metadata');\nrequire('../modules/es7.reflect.metadata');\nmodule.exports = require('../modules/_core').Reflect;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/es7/reflect.js\n ** module id = 164\n ** module chunks = 0\n **/"",""var forOf = require('./_for-of');\n\nmodule.exports = function(iter, ITERATOR){\n  var result = [];\n  forOf(iter, false, result.push, result, ITERATOR);\n  return result;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-from-iterable.js\n ** module id = 165\n ** module chunks = 0\n **/"",""var isObject = require('./_is-object')\n  , isArray  = require('./_is-array')\n  , SPECIES  = require('./_wks')('species');\n\nmodule.exports = function(original){\n  var C;\n  if(isArray(original)){\n    C = original.constructor;\n    // cross-realm fallback\n    if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;\n    if(isObject(C)){\n      C = C[SPECIES];\n      if(C === null)C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-species-constructor.js\n ** module id = 166\n ** module chunks = 0\n **/"",""// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function(original, length){\n  return new (speciesConstructor(original))(length);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_array-species-create.js\n ** module id = 167\n ** module chunks = 0\n **/"",""'use strict';\nvar anObject    = require('./_an-object')\n  , toPrimitive = require('./_to-primitive')\n  , NUMBER      = 'number';\n\nmodule.exports = function(hint){\n  if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');\n  return toPrimitive(anObject(this), hint != NUMBER);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_date-to-primitive.js\n ** module id = 168\n ** module chunks = 0\n **/"",""// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys')\n  , gOPS    = require('./_object-gops')\n  , pIE     = require('./_object-pie');\nmodule.exports = function(it){\n  var result     = getKeys(it)\n    , getSymbols = gOPS.f;\n  if(getSymbols){\n    var symbols = getSymbols(it)\n      , isEnum  = pIE.f\n      , i       = 0\n      , key;\n    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n  } return result;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_enum-keys.js\n ** module id = 169\n ** module chunks = 0\n **/"",""// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n  var un = that === undefined;\n  switch(args.length){\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return              fn.apply(that, args);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_invoke.js\n ** module id = 170\n ** module chunks = 0\n **/"",""var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject');\nmodule.exports = function(object, el){\n  var O      = toIObject(object)\n    , keys   = getKeys(O)\n    , length = keys.length\n    , index  = 0\n    , key;\n  while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_keyof.js\n ** module id = 171\n ** module chunks = 0\n **/"",""// all object keys, includes non-enumerable and symbols\nvar gOPN     = require('./_object-gopn')\n  , gOPS     = require('./_object-gops')\n  , anObject = require('./_an-object')\n  , Reflect  = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it){\n  var keys       = gOPN.f(anObject(it))\n    , getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_own-keys.js\n ** module id = 172\n ** module chunks = 0\n **/"",""var global         = require('./_global')\n  , core           = require('./_core')\n  , LIBRARY        = require('./_library')\n  , wksExt         = require('./_wks-ext')\n  , defineProperty = require('./_object-dp').f;\nmodule.exports = function(name){\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/_wks-define.js\n ** module id = 173\n ** module chunks = 0\n **/"",""// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {copyWithin: require('./_array-copy-within')});\n\nrequire('./_add-to-unscopables')('copyWithin');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.copy-within.js\n ** module id = 174\n ** module chunks = 0\n **/"",""'use strict';\nvar $export = require('./_export')\n  , $every  = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n  every: function every(callbackfn /* , thisArg */){\n    return $every(this, callbackfn, arguments[1]);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.every.js\n ** module id = 175\n ** module chunks = 0\n **/"",""// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {fill: require('./_array-fill')});\n\nrequire('./_add-to-unscopables')('fill');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.fill.js\n ** module id = 176\n ** module chunks = 0\n **/"",""'use strict';\nvar $export = require('./_export')\n  , $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n  filter: function filter(callbackfn /* , thisArg */){\n    return $filter(this, callbackfn, arguments[1]);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.filter.js\n ** module id = 177\n ** module chunks = 0\n **/"",""'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export')\n  , $find   = require('./_array-methods')(6)\n  , KEY     = 'findIndex'\n  , forced  = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn/*, that = undefined */){\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.find-index.js\n ** module id = 178\n ** module chunks = 0\n **/"",""'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export')\n  , $find   = require('./_array-methods')(5)\n  , KEY     = 'find'\n  , forced  = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn/*, that = undefined */){\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.find.js\n ** module id = 179\n ** module chunks = 0\n **/"",""'use strict';\nvar $export  = require('./_export')\n  , $forEach = require('./_array-methods')(0)\n  , STRICT   = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n  forEach: function forEach(callbackfn /* , thisArg */){\n    return $forEach(this, callbackfn, arguments[1]);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.for-each.js\n ** module id = 180\n ** module chunks = 0\n **/"",""'use strict';\nvar ctx            = require('./_ctx')\n  , $export        = require('./_export')\n  , toObject       = require('./_to-object')\n  , call           = require('./_iter-call')\n  , isArrayIter    = require('./_is-array-iter')\n  , toLength       = require('./_to-length')\n  , createProperty = require('./_create-property')\n  , getIterFn      = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n    var O       = toObject(arrayLike)\n      , C       = typeof this == 'function' ? this : Array\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , index   = 0\n      , iterFn  = getIterFn(O)\n      , length, result, step, iterator;\n    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for(result = new C(length); length > index; index++){\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.from.js\n ** module id = 181\n ** module chunks = 0\n **/"",""'use strict';\nvar $export       = require('./_export')\n  , $indexOf      = require('./_array-includes')(false)\n  , $native       = [].indexOf\n  , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n  indexOf: function indexOf(searchElement /*, fromIndex = 0 */){\n    return NEGATIVE_ZERO\n      // convert -0 to +0\n      ? $native.apply(this, arguments) || 0\n      : $indexOf(this, searchElement, arguments[1]);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.index-of.js\n ** module id = 182\n ** module chunks = 0\n **/"",""// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', {isArray: require('./_is-array')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.is-array.js\n ** module id = 183\n ** module chunks = 0\n **/"",""'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export   = require('./_export')\n  , toIObject = require('./_to-iobject')\n  , arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n  join: function join(separator){\n    return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.join.js\n ** module id = 184\n ** module chunks = 0\n **/"",""'use strict';\nvar $export       = require('./_export')\n  , toIObject     = require('./_to-iobject')\n  , toInteger     = require('./_to-integer')\n  , toLength      = require('./_to-length')\n  , $native       = [].lastIndexOf\n  , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n  lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){\n    // convert -0 to +0\n    if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;\n    var O      = toIObject(this)\n      , length = toLength(O.length)\n      , index  = length - 1;\n    if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));\n    if(index < 0)index = length + index;\n    for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;\n    return -1;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.last-index-of.js\n ** module id = 185\n ** module chunks = 0\n **/"",""'use strict';\nvar $export = require('./_export')\n  , $map    = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n  map: function map(callbackfn /* , thisArg */){\n    return $map(this, callbackfn, arguments[1]);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.map.js\n ** module id = 186\n ** module chunks = 0\n **/"",""'use strict';\nvar $export        = require('./_export')\n  , createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function(){\n  function F(){}\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */){\n    var index  = 0\n      , aLen   = arguments.length\n      , result = new (typeof this == 'function' ? this : Array)(aLen);\n    while(aLen > index)createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.of.js\n ** module id = 187\n ** module chunks = 0\n **/"",""'use strict';\nvar $export = require('./_export')\n  , $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n  reduceRight: function reduceRight(callbackfn /* , initialValue */){\n    return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.reduce-right.js\n ** module id = 188\n ** module chunks = 0\n **/"",""'use strict';\nvar $export = require('./_export')\n  , $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n  reduce: function reduce(callbackfn /* , initialValue */){\n    return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.reduce.js\n ** module id = 189\n ** module chunks = 0\n **/"",""'use strict';\nvar $export    = require('./_export')\n  , html       = require('./_html')\n  , cof        = require('./_cof')\n  , toIndex    = require('./_to-index')\n  , toLength   = require('./_to-length')\n  , arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function(){\n  if(html)arraySlice.call(html);\n}), 'Array', {\n  slice: function slice(begin, end){\n    var len   = toLength(this.length)\n      , klass = cof(this);\n    end = end === undefined ? len : end;\n    if(klass == 'Array')return arraySlice.call(this, begin, end);\n    var start  = toIndex(begin, len)\n      , upTo   = toIndex(end, len)\n      , size   = toLength(upTo - start)\n      , cloned = Array(size)\n      , i      = 0;\n    for(; i < size; i++)cloned[i] = klass == 'String'\n      ? this.charAt(start + i)\n      : this[start + i];\n    return cloned;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.slice.js\n ** module id = 190\n ** module chunks = 0\n **/"",""'use strict';\nvar $export = require('./_export')\n  , $some   = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n  some: function some(callbackfn /* , thisArg */){\n    return $some(this, callbackfn, arguments[1]);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.some.js\n ** module id = 191\n ** module chunks = 0\n **/"",""'use strict';\nvar $export   = require('./_export')\n  , aFunction = require('./_a-function')\n  , toObject  = require('./_to-object')\n  , fails     = require('./_fails')\n  , $sort     = [].sort\n  , test      = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function(){\n  // IE8-\n  test.sort(undefined);\n}) || !fails(function(){\n  // V8 bug\n  test.sort(null);\n  // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n  // 22.1.3.25 Array.prototype.sort(comparefn)\n  sort: function sort(comparefn){\n    return comparefn === undefined\n      ? $sort.call(toObject(this))\n      : $sort.call(toObject(this), aFunction(comparefn));\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.sort.js\n ** module id = 192\n ** module chunks = 0\n **/"",""require('./_set-species')('Array');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.array.species.js\n ** module id = 193\n ** module chunks = 0\n **/"",""// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.now.js\n ** module id = 194\n ** module chunks = 0\n **/"",""'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export')\n  , fails   = require('./_fails')\n  , getTime = Date.prototype.getTime;\n\nvar lz = function(num){\n  return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (fails(function(){\n  return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';\n}) || !fails(function(){\n  new Date(NaN).toISOString();\n})), 'Date', {\n  toISOString: function toISOString(){\n    if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');\n    var d = this\n      , y = d.getUTCFullYear()\n      , m = d.getUTCMilliseconds()\n      , s = y < 0 ? '-' : y > 9999 ? '+' : '';\n    return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n      '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n      'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n      ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.to-iso-string.js\n ** module id = 195\n ** module chunks = 0\n **/"",""'use strict';\nvar $export     = require('./_export')\n  , toObject    = require('./_to-object')\n  , toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function(){\n  return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;\n}), 'Date', {\n  toJSON: function toJSON(key){\n    var O  = toObject(this)\n      , pv = toPrimitive(O);\n    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.to-json.js\n ** module id = 196\n ** module chunks = 0\n **/"",""var TO_PRIMITIVE = require('./_wks')('toPrimitive')\n  , proto        = Date.prototype;\n\nif(!(TO_PRIMITIVE in proto))require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.to-primitive.js\n ** module id = 197\n ** module chunks = 0\n **/"",""var DateProto    = Date.prototype\n  , INVALID_DATE = 'Invalid Date'\n  , TO_STRING    = 'toString'\n  , $toString    = DateProto[TO_STRING]\n  , getTime      = DateProto.getTime;\nif(new Date(NaN) + '' != INVALID_DATE){\n  require('./_redefine')(DateProto, TO_STRING, function toString(){\n    var value = getTime.call(this);\n    return value === value ? $toString.call(this) : INVALID_DATE;\n  });\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.date.to-string.js\n ** module id = 198\n ** module chunks = 0\n **/"",""// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', {bind: require('./_bind')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.function.bind.js\n ** module id = 199\n ** module chunks = 0\n **/"",""'use strict';\nvar isObject       = require('./_is-object')\n  , getPrototypeOf = require('./_object-gpo')\n  , HAS_INSTANCE   = require('./_wks')('hasInstance')\n  , FunctionProto  = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif(!(HAS_INSTANCE in FunctionProto))require('./_object-dp').f(FunctionProto, HAS_INSTANCE, {value: function(O){\n  if(typeof this != 'function' || !isObject(O))return false;\n  if(!isObject(this.prototype))return O instanceof this;\n  // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n  while(O = getPrototypeOf(O))if(this.prototype === O)return true;\n  return false;\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.function.has-instance.js\n ** module id = 200\n ** module chunks = 0\n **/"",""var dP         = require('./_object-dp').f\n  , createDesc = require('./_property-desc')\n  , has        = require('./_has')\n  , FProto     = Function.prototype\n  , nameRE     = /^\\s*function ([^ (]*)/\n  , NAME       = 'name';\n\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function(){\n    try {\n      var that = this\n        , name = ('' + that).match(nameRE)[1];\n      has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));\n      return name;\n    } catch(e){\n      return '';\n    }\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.function.name.js\n ** module id = 201\n ** module chunks = 0\n **/"",""// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export')\n  , log1p   = require('./_math-log1p')\n  , sqrt    = Math.sqrt\n  , $acosh  = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n  && Math.floor($acosh(Number.MAX_VALUE)) == 710\n  // Tor Browser bug: Math.acosh(Infinity) -> NaN \n  && $acosh(Infinity) == Infinity\n), 'Math', {\n  acosh: function acosh(x){\n    return (x = +x) < 1 ? NaN : x > 94906265.62425156\n      ? Math.log(x) + Math.LN2\n      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.acosh.js\n ** module id = 202\n ** module chunks = 0\n **/"",""// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export')\n  , $asinh  = Math.asinh;\n\nfunction asinh(x){\n  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0 \n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.asinh.js\n ** module id = 203\n ** module chunks = 0\n **/"",""// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export')\n  , $atanh  = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0 \n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n  atanh: function atanh(x){\n    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.atanh.js\n ** module id = 204\n ** module chunks = 0\n **/"",""// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export')\n  , sign    = require('./_math-sign');\n\n$export($export.S, 'Math', {\n  cbrt: function cbrt(x){\n    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.cbrt.js\n ** module id = 205\n ** module chunks = 0\n **/"",""// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  clz32: function clz32(x){\n    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.clz32.js\n ** module id = 206\n ** module chunks = 0\n **/"",""// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export')\n  , exp     = Math.exp;\n\n$export($export.S, 'Math', {\n  cosh: function cosh(x){\n    return (exp(x = +x) + exp(-x)) / 2;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.cosh.js\n ** module id = 207\n ** module chunks = 0\n **/"",""// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export')\n  , $expm1  = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.expm1.js\n ** module id = 208\n ** module chunks = 0\n **/"",""// 20.2.2.16 Math.fround(x)\nvar $export   = require('./_export')\n  , sign      = require('./_math-sign')\n  , pow       = Math.pow\n  , EPSILON   = pow(2, -52)\n  , EPSILON32 = pow(2, -23)\n  , MAX32     = pow(2, 127) * (2 - EPSILON32)\n  , MIN32     = pow(2, -126);\n\nvar roundTiesToEven = function(n){\n  return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n\n$export($export.S, 'Math', {\n  fround: function fround(x){\n    var $abs  = Math.abs(x)\n      , $sign = sign(x)\n      , a, result;\n    if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n    a = (1 + EPSILON32 / EPSILON) * $abs;\n    result = a - (a - $abs);\n    if(result > MAX32 || result != result)return $sign * Infinity;\n    return $sign * result;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.fround.js\n ** module id = 209\n ** module chunks = 0\n **/"",""// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export')\n  , abs     = Math.abs;\n\n$export($export.S, 'Math', {\n  hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars\n    var sum  = 0\n      , i    = 0\n      , aLen = arguments.length\n      , larg = 0\n      , arg, div;\n    while(i < aLen){\n      arg = abs(arguments[i++]);\n      if(larg < arg){\n        div  = larg / arg;\n        sum  = sum * div * div + 1;\n        larg = arg;\n      } else if(arg > 0){\n        div  = arg / larg;\n        sum += div * div;\n      } else sum += arg;\n    }\n    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.hypot.js\n ** module id = 210\n ** module chunks = 0\n **/"",""// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export')\n  , $imul   = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function(){\n  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n  imul: function imul(x, y){\n    var UINT16 = 0xffff\n      , xn = +x\n      , yn = +y\n      , xl = UINT16 & xn\n      , yl = UINT16 & yn;\n    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.imul.js\n ** module id = 211\n ** module chunks = 0\n **/"",""// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log10: function log10(x){\n    return Math.log(x) / Math.LN10;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.log10.js\n ** module id = 212\n ** module chunks = 0\n **/"",""// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {log1p: require('./_math-log1p')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.log1p.js\n ** module id = 213\n ** module chunks = 0\n **/"",""// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log2: function log2(x){\n    return Math.log(x) / Math.LN2;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.log2.js\n ** module id = 214\n ** module chunks = 0\n **/"",""// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {sign: require('./_math-sign')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.sign.js\n ** module id = 215\n ** module chunks = 0\n **/"",""// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export')\n  , expm1   = require('./_math-expm1')\n  , exp     = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function(){\n  return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n  sinh: function sinh(x){\n    return Math.abs(x = +x) < 1\n      ? (expm1(x) - expm1(-x)) / 2\n      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.sinh.js\n ** module id = 216\n ** module chunks = 0\n **/"",""// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export')\n  , expm1   = require('./_math-expm1')\n  , exp     = Math.exp;\n\n$export($export.S, 'Math', {\n  tanh: function tanh(x){\n    var a = expm1(x = +x)\n      , b = expm1(-x);\n    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.tanh.js\n ** module id = 217\n ** module chunks = 0\n **/"",""// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  trunc: function trunc(it){\n    return (it > 0 ? Math.floor : Math.ceil)(it);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.math.trunc.js\n ** module id = 218\n ** module chunks = 0\n **/"",""'use strict';\nvar global            = require('./_global')\n  , has               = require('./_has')\n  , cof               = require('./_cof')\n  , inheritIfRequired = require('./_inherit-if-required')\n  , toPrimitive       = require('./_to-primitive')\n  , fails             = require('./_fails')\n  , gOPN              = require('./_object-gopn').f\n  , gOPD              = require('./_object-gopd').f\n  , dP                = require('./_object-dp').f\n  , $trim             = require('./_string-trim').trim\n  , NUMBER            = 'Number'\n  , $Number           = global[NUMBER]\n  , Base              = $Number\n  , proto             = $Number.prototype\n  // Opera ~12 has broken Object#toString\n  , BROKEN_COF        = cof(require('./_object-create')(proto)) == NUMBER\n  , TRIM              = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function(argument){\n  var it = toPrimitive(argument, false);\n  if(typeof it == 'string' && it.length > 2){\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0)\n      , third, radix, maxCode;\n    if(first === 43 || first === 45){\n      third = it.charCodeAt(2);\n      if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if(first === 48){\n      switch(it.charCodeAt(1)){\n        case 66 : case 98  : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default : return +it;\n      }\n      for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){\n        code = digits.charCodeAt(i);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if(code < 48 || code > maxCode)return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\nif(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){\n  $Number = function Number(value){\n    var it = arguments.length < 1 ? 0 : value\n      , that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for(var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++){\n    if(has(Base, key = keys[j]) && !has($Number, key)){\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.constructor.js\n ** module id = 219\n ** module chunks = 0\n **/"",""// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.epsilon.js\n ** module id = 220\n ** module chunks = 0\n **/"",""// 20.1.2.2 Number.isFinite(number)\nvar $export   = require('./_export')\n  , _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it){\n    return typeof it == 'number' && _isFinite(it);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.is-finite.js\n ** module id = 221\n ** module chunks = 0\n **/"",""// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {isInteger: require('./_is-integer')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.is-integer.js\n ** module id = 222\n ** module chunks = 0\n **/"",""// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number){\n    return number != number;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.is-nan.js\n ** module id = 223\n ** module chunks = 0\n **/"",""// 20.1.2.5 Number.isSafeInteger(number)\nvar $export   = require('./_export')\n  , isInteger = require('./_is-integer')\n  , abs       = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number){\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.is-safe-integer.js\n ** module id = 224\n ** module chunks = 0\n **/"",""// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.max-safe-integer.js\n ** module id = 225\n ** module chunks = 0\n **/"",""// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.min-safe-integer.js\n ** module id = 226\n ** module chunks = 0\n **/"",""var $export     = require('./_export')\n  , $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.parse-float.js\n ** module id = 227\n ** module chunks = 0\n **/"",""var $export   = require('./_export')\n  , $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.parse-int.js\n ** module id = 228\n ** module chunks = 0\n **/"",""'use strict';\nvar $export      = require('./_export')\n  , toInteger    = require('./_to-integer')\n  , aNumberValue = require('./_a-number-value')\n  , repeat       = require('./_string-repeat')\n  , $toFixed     = 1..toFixed\n  , floor        = Math.floor\n  , data         = [0, 0, 0, 0, 0, 0]\n  , ERROR        = 'Number.toFixed: incorrect invocation!'\n  , ZERO         = '0';\n\nvar multiply = function(n, c){\n  var i  = -1\n    , c2 = c;\n  while(++i < 6){\n    c2 += n * data[i];\n    data[i] = c2 % 1e7;\n    c2 = floor(c2 / 1e7);\n  }\n};\nvar divide = function(n){\n  var i = 6\n    , c = 0;\n  while(--i >= 0){\n    c += data[i];\n    data[i] = floor(c / n);\n    c = (c % n) * 1e7;\n  }\n};\nvar numToString = function(){\n  var i = 6\n    , s = '';\n  while(--i >= 0){\n    if(s !== '' || i === 0 || data[i] !== 0){\n      var t = String(data[i]);\n      s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n    }\n  } return s;\n};\nvar pow = function(x, n, acc){\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function(x){\n  var n  = 0\n    , x2 = x;\n  while(x2 >= 4096){\n    n += 12;\n    x2 /= 4096;\n  }\n  while(x2 >= 2){\n    n  += 1;\n    x2 /= 2;\n  } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n  0.00008.toFixed(3) !== '0.000' ||\n  0.9.toFixed(0) !== '1' ||\n  1.255.toFixed(2) !== '1.25' ||\n  1000000000000000128..toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function(){\n  // V8 ~ Android 4.3-\n  $toFixed.call({});\n})), 'Number', {\n  toFixed: function toFixed(fractionDigits){\n    var x = aNumberValue(this, ERROR)\n      , f = toInteger(fractionDigits)\n      , s = ''\n      , m = ZERO\n      , e, z, j, k;\n    if(f < 0 || f > 20)throw RangeError(ERROR);\n    if(x != x)return 'NaN';\n    if(x <= -1e21 || x >= 1e21)return String(x);\n    if(x < 0){\n      s = '-';\n      x = -x;\n    }\n    if(x > 1e-21){\n      e = log(x * pow(2, 69, 1)) - 69;\n      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n      z *= 0x10000000000000;\n      e = 52 - e;\n      if(e > 0){\n        multiply(0, z);\n        j = f;\n        while(j >= 7){\n          multiply(1e7, 0);\n          j -= 7;\n        }\n        multiply(pow(10, j, 1), 0);\n        j = e - 1;\n        while(j >= 23){\n          divide(1 << 23);\n          j -= 23;\n        }\n        divide(1 << j);\n        multiply(1, 1);\n        divide(2);\n        m = numToString();\n      } else {\n        multiply(0, z);\n        multiply(1 << -e, 0);\n        m = numToString() + repeat.call(ZERO, f);\n      }\n    }\n    if(f > 0){\n      k = m.length;\n      m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n    } else {\n      m = s + m;\n    } return m;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.to-fixed.js\n ** module id = 229\n ** module chunks = 0\n **/"",""'use strict';\nvar $export      = require('./_export')\n  , $fails       = require('./_fails')\n  , aNumberValue = require('./_a-number-value')\n  , $toPrecision = 1..toPrecision;\n\n$export($export.P + $export.F * ($fails(function(){\n  // IE7-\n  return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function(){\n  // V8 ~ Android 4.3-\n  $toPrecision.call({});\n})), 'Number', {\n  toPrecision: function toPrecision(precision){\n    var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); \n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.number.to-precision.js\n ** module id = 230\n ** module chunks = 0\n **/"",""// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.assign.js\n ** module id = 231\n ** module chunks = 0\n **/"",""var $export = require('./_export')\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', {create: require('./_object-create')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.create.js\n ** module id = 232\n ** module chunks = 0\n **/"",""var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperties: require('./_object-dps')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.define-properties.js\n ** module id = 233\n ** module chunks = 0\n **/"",""var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.define-property.js\n ** module id = 234\n ** module chunks = 0\n **/"",""// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function($freeze){\n  return function freeze(it){\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.freeze.js\n ** module id = 235\n ** module chunks = 0\n **/"",""// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject                 = require('./_to-iobject')\n  , $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function(){\n  return function getOwnPropertyDescriptor(it, key){\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.get-own-property-descriptor.js\n ** module id = 236\n ** module chunks = 0\n **/"",""// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function(){\n  return require('./_object-gopn-ext').f;\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.get-own-property-names.js\n ** module id = 237\n ** module chunks = 0\n **/"",""// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject        = require('./_to-object')\n  , $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function(){\n  return function getPrototypeOf(it){\n    return $getPrototypeOf(toObject(it));\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.get-prototype-of.js\n ** module id = 238\n ** module chunks = 0\n **/"",""// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function($isExtensible){\n  return function isExtensible(it){\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.is-extensible.js\n ** module id = 239\n ** module chunks = 0\n **/"",""// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function($isFrozen){\n  return function isFrozen(it){\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.is-frozen.js\n ** module id = 240\n ** module chunks = 0\n **/"",""// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function($isSealed){\n  return function isSealed(it){\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.is-sealed.js\n ** module id = 241\n ** module chunks = 0\n **/"",""// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', {is: require('./_same-value')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.is.js\n ** module id = 242\n ** module chunks = 0\n **/"",""// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.keys.js\n ** module id = 243\n ** module chunks = 0\n **/"",""// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function($preventExtensions){\n  return function preventExtensions(it){\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.prevent-extensions.js\n ** module id = 244\n ** module chunks = 0\n **/"",""// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function($seal){\n  return function seal(it){\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.seal.js\n ** module id = 245\n ** module chunks = 0\n **/"",""// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.object.set-prototype-of.js\n ** module id = 246\n ** module chunks = 0\n **/"",""var $export     = require('./_export')\n  , $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.parse-float.js\n ** module id = 247\n ** module chunks = 0\n **/"",""var $export   = require('./_export')\n  , $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.parse-int.js\n ** module id = 248\n ** module chunks = 0\n **/"",""// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export   = require('./_export')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , rApply    = (require('./_global').Reflect || {}).apply\n  , fApply    = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function(){\n  rApply(function(){});\n}), 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList){\n    var T = aFunction(target)\n      , L = anObject(argumentsList);\n    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.apply.js\n ** module id = 249\n ** module chunks = 0\n **/"",""// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export    = require('./_export')\n  , create     = require('./_object-create')\n  , aFunction  = require('./_a-function')\n  , anObject   = require('./_an-object')\n  , isObject   = require('./_is-object')\n  , fails      = require('./_fails')\n  , bind       = require('./_bind')\n  , rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function(){\n  function F(){}\n  return !(rConstruct(function(){}, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function(){\n  rConstruct(function(){});\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n  construct: function construct(Target, args /*, newTarget*/){\n    aFunction(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n    if(ARGS_BUG && !NEW_TARGET_BUG)return rConstruct(Target, args, newTarget);\n    if(Target == newTarget){\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch(args.length){\n        case 0: return new Target;\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      $args.push.apply($args, args);\n      return new (bind.apply(Target, $args));\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto    = newTarget.prototype\n      , instance = create(isObject(proto) ? proto : Object.prototype)\n      , result   = Function.apply.call(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.construct.js\n ** module id = 250\n ** module chunks = 0\n **/"",""// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP          = require('./_object-dp')\n  , $export     = require('./_export')\n  , anObject    = require('./_an-object')\n  , toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function(){\n  Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});\n}), 'Reflect', {\n  defineProperty: function defineProperty(target, propertyKey, attributes){\n    anObject(target);\n    propertyKey = toPrimitive(propertyKey, true);\n    anObject(attributes);\n    try {\n      dP.f(target, propertyKey, attributes);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.define-property.js\n ** module id = 251\n ** module chunks = 0\n **/"",""// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export  = require('./_export')\n  , gOPD     = require('./_object-gopd').f\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  deleteProperty: function deleteProperty(target, propertyKey){\n    var desc = gOPD(anObject(target), propertyKey);\n    return desc && !desc.configurable ? false : delete target[propertyKey];\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.delete-property.js\n ** module id = 252\n ** module chunks = 0\n **/"",""'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export  = require('./_export')\n  , anObject = require('./_an-object');\nvar Enumerate = function(iterated){\n  this._t = anObject(iterated); // target\n  this._i = 0;                  // next index\n  var keys = this._k = []       // keys\n    , key;\n  for(key in iterated)keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function(){\n  var that = this\n    , keys = that._k\n    , key;\n  do {\n    if(that._i >= keys.length)return {value: undefined, done: true};\n  } while(!((key = keys[that._i++]) in that._t));\n  return {value: key, done: false};\n});\n\n$export($export.S, 'Reflect', {\n  enumerate: function enumerate(target){\n    return new Enumerate(target);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.enumerate.js\n ** module id = 253\n ** module chunks = 0\n **/"",""// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD     = require('./_object-gopd')\n  , $export  = require('./_export')\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){\n    return gOPD.f(anObject(target), propertyKey);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.get-own-property-descriptor.js\n ** module id = 254\n ** module chunks = 0\n **/"",""// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export  = require('./_export')\n  , getProto = require('./_object-gpo')\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getPrototypeOf: function getPrototypeOf(target){\n    return getProto(anObject(target));\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.get-prototype-of.js\n ** module id = 255\n ** module chunks = 0\n **/"",""// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD           = require('./_object-gopd')\n  , getPrototypeOf = require('./_object-gpo')\n  , has            = require('./_has')\n  , $export        = require('./_export')\n  , isObject       = require('./_is-object')\n  , anObject       = require('./_an-object');\n\nfunction get(target, propertyKey/*, receiver*/){\n  var receiver = arguments.length < 3 ? target : arguments[2]\n    , desc, proto;\n  if(anObject(target) === receiver)return target[propertyKey];\n  if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')\n    ? desc.value\n    : desc.get !== undefined\n      ? desc.get.call(receiver)\n      : undefined;\n  if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {get: get});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.get.js\n ** module id = 256\n ** module chunks = 0\n **/"",""// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n  has: function has(target, propertyKey){\n    return propertyKey in target;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.has.js\n ** module id = 257\n ** module chunks = 0\n **/"",""// 26.1.10 Reflect.isExtensible(target)\nvar $export       = require('./_export')\n  , anObject      = require('./_an-object')\n  , $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n  isExtensible: function isExtensible(target){\n    anObject(target);\n    return $isExtensible ? $isExtensible(target) : true;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.is-extensible.js\n ** module id = 258\n ** module chunks = 0\n **/"",""// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {ownKeys: require('./_own-keys')});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.own-keys.js\n ** module id = 259\n ** module chunks = 0\n **/"",""// 26.1.12 Reflect.preventExtensions(target)\nvar $export            = require('./_export')\n  , anObject           = require('./_an-object')\n  , $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n  preventExtensions: function preventExtensions(target){\n    anObject(target);\n    try {\n      if($preventExtensions)$preventExtensions(target);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.prevent-extensions.js\n ** module id = 260\n ** module chunks = 0\n **/"",""// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export  = require('./_export')\n  , setProto = require('./_set-proto');\n\nif(setProto)$export($export.S, 'Reflect', {\n  setPrototypeOf: function setPrototypeOf(target, proto){\n    setProto.check(target, proto);\n    try {\n      setProto.set(target, proto);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.set-prototype-of.js\n ** module id = 261\n ** module chunks = 0\n **/"",""// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP             = require('./_object-dp')\n  , gOPD           = require('./_object-gopd')\n  , getPrototypeOf = require('./_object-gpo')\n  , has            = require('./_has')\n  , $export        = require('./_export')\n  , createDesc     = require('./_property-desc')\n  , anObject       = require('./_an-object')\n  , isObject       = require('./_is-object');\n\nfunction set(target, propertyKey, V/*, receiver*/){\n  var receiver = arguments.length < 4 ? target : arguments[3]\n    , ownDesc  = gOPD.f(anObject(target), propertyKey)\n    , existingDescriptor, proto;\n  if(!ownDesc){\n    if(isObject(proto = getPrototypeOf(target))){\n      return set(proto, propertyKey, V, receiver);\n    }\n    ownDesc = createDesc(0);\n  }\n  if(has(ownDesc, 'value')){\n    if(ownDesc.writable === false || !isObject(receiver))return false;\n    existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n    existingDescriptor.value = V;\n    dP.f(receiver, propertyKey, existingDescriptor);\n    return true;\n  }\n  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {set: set});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.reflect.set.js\n ** module id = 262\n ** module chunks = 0\n **/"",""var global            = require('./_global')\n  , inheritIfRequired = require('./_inherit-if-required')\n  , dP                = require('./_object-dp').f\n  , gOPN              = require('./_object-gopn').f\n  , isRegExp          = require('./_is-regexp')\n  , $flags            = require('./_flags')\n  , $RegExp           = global.RegExp\n  , Base              = $RegExp\n  , proto             = $RegExp.prototype\n  , re1               = /a/g\n  , re2               = /a/g\n  // \""new\"" creates a new object, old webkit buggy here\n  , CORRECT_NEW       = new $RegExp(re1) !== re1;\n\nif(require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function(){\n  re2[require('./_wks')('match')] = false;\n  // RegExp constructor can alter flags and IsRegExp works correct with @@match\n  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))){\n  $RegExp = function RegExp(p, f){\n    var tiRE = this instanceof $RegExp\n      , piRE = isRegExp(p)\n      , fiU  = f === undefined;\n    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n      : inheritIfRequired(CORRECT_NEW\n        ? new Base(piRE && !fiU ? p.source : p, f)\n        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n      , tiRE ? this : proto, $RegExp);\n  };\n  var proxy = function(key){\n    key in $RegExp || dP($RegExp, key, {\n      configurable: true,\n      get: function(){ return Base[key]; },\n      set: function(it){ Base[key] = it; }\n    });\n  };\n  for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);\n  proto.constructor = $RegExp;\n  $RegExp.prototype = proto;\n  require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.constructor.js\n ** module id = 263\n ** module chunks = 0\n **/"",""'use strict';\nrequire('./es6.regexp.flags');\nvar anObject    = require('./_an-object')\n  , $flags      = require('./_flags')\n  , DESCRIPTORS = require('./_descriptors')\n  , TO_STRING   = 'toString'\n  , $toString   = /./[TO_STRING];\n\nvar define = function(fn){\n  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif(require('./_fails')(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){\n  define(function toString(){\n    var R = anObject(this);\n    return '/'.concat(R.source, '/',\n      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n  });\n// FF44- RegExp#toString has a wrong name\n} else if($toString.name != TO_STRING){\n  define(function toString(){\n    return $toString.call(this);\n  });\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.regexp.to-string.js\n ** module id = 264\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function(createHTML){\n  return function anchor(name){\n    return createHTML(this, 'a', 'name', name);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.anchor.js\n ** module id = 265\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function(createHTML){\n  return function big(){\n    return createHTML(this, 'big', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.big.js\n ** module id = 266\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function(createHTML){\n  return function blink(){\n    return createHTML(this, 'blink', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.blink.js\n ** module id = 267\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function(createHTML){\n  return function bold(){\n    return createHTML(this, 'b', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.bold.js\n ** module id = 268\n ** module chunks = 0\n **/"",""'use strict';\nvar $export = require('./_export')\n  , $at     = require('./_string-at')(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos){\n    return $at(this, pos);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.code-point-at.js\n ** module id = 269\n ** module chunks = 0\n **/"",""// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export   = require('./_export')\n  , toLength  = require('./_to-length')\n  , context   = require('./_string-context')\n  , ENDS_WITH = 'endsWith'\n  , $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /*, endPosition = @length */){\n    var that = context(this, searchString, ENDS_WITH)\n      , endPosition = arguments.length > 1 ? arguments[1] : undefined\n      , len    = toLength(that.length)\n      , end    = endPosition === undefined ? len : Math.min(toLength(endPosition), len)\n      , search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.ends-with.js\n ** module id = 270\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function(createHTML){\n  return function fixed(){\n    return createHTML(this, 'tt', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.fixed.js\n ** module id = 271\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function(createHTML){\n  return function fontcolor(color){\n    return createHTML(this, 'font', 'color', color);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.fontcolor.js\n ** module id = 272\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function(createHTML){\n  return function fontsize(size){\n    return createHTML(this, 'font', 'size', size);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.fontsize.js\n ** module id = 273\n ** module chunks = 0\n **/"",""var $export        = require('./_export')\n  , toIndex        = require('./_to-index')\n  , fromCharCode   = String.fromCharCode\n  , $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars\n    var res  = []\n      , aLen = arguments.length\n      , i    = 0\n      , code;\n    while(aLen > i){\n      code = +arguments[i++];\n      if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.from-code-point.js\n ** module id = 274\n ** module chunks = 0\n **/"",""// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export  = require('./_export')\n  , context  = require('./_string-context')\n  , INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /*, position = 0 */){\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.includes.js\n ** module id = 275\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function(createHTML){\n  return function italics(){\n    return createHTML(this, 'i', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.italics.js\n ** module id = 276\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function(createHTML){\n  return function link(url){\n    return createHTML(this, 'a', 'href', url);\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.link.js\n ** module id = 277\n ** module chunks = 0\n **/"",""var $export   = require('./_export')\n  , toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length');\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite){\n    var tpl  = toIObject(callSite.raw)\n      , len  = toLength(tpl.length)\n      , aLen = arguments.length\n      , res  = []\n      , i    = 0;\n    while(len > i){\n      res.push(String(tpl[i++]));\n      if(i < aLen)res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.raw.js\n ** module id = 278\n ** module chunks = 0\n **/"",""var $export = require('./_export');\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: require('./_string-repeat')\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.repeat.js\n ** module id = 279\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function(createHTML){\n  return function small(){\n    return createHTML(this, 'small', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.small.js\n ** module id = 280\n ** module chunks = 0\n **/"",""// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export     = require('./_export')\n  , toLength    = require('./_to-length')\n  , context     = require('./_string-context')\n  , STARTS_WITH = 'startsWith'\n  , $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /*, position = 0 */){\n    var that   = context(this, searchString, STARTS_WITH)\n      , index  = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))\n      , search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.starts-with.js\n ** module id = 281\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function(createHTML){\n  return function strike(){\n    return createHTML(this, 'strike', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.strike.js\n ** module id = 282\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function(createHTML){\n  return function sub(){\n    return createHTML(this, 'sub', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.sub.js\n ** module id = 283\n ** module chunks = 0\n **/"",""'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function(createHTML){\n  return function sup(){\n    return createHTML(this, 'sup', '', '');\n  }\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.sup.js\n ** module id = 284\n ** module chunks = 0\n **/"",""'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function($trim){\n  return function trim(){\n    return $trim(this, 3);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.string.trim.js\n ** module id = 285\n ** module chunks = 0\n **/"",""'use strict';\nvar $export      = require('./_export')\n  , $typed       = require('./_typed')\n  , buffer       = require('./_typed-buffer')\n  , anObject     = require('./_an-object')\n  , toIndex      = require('./_to-index')\n  , toLength     = require('./_to-length')\n  , isObject     = require('./_is-object')\n  , ArrayBuffer  = require('./_global').ArrayBuffer\n  , speciesConstructor = require('./_species-constructor')\n  , $ArrayBuffer = buffer.ArrayBuffer\n  , $DataView    = buffer.DataView\n  , $isView      = $typed.ABV && ArrayBuffer.isView\n  , $slice       = $ArrayBuffer.prototype.slice\n  , VIEW         = $typed.VIEW\n  , ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n  // 24.1.3.1 ArrayBuffer.isView(arg)\n  isView: function isView(it){\n    return $isView && $isView(it) || isObject(it) && VIEW in it;\n  }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function(){\n  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n  slice: function slice(start, end){\n    if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix\n    var len    = anObject(this).byteLength\n      , first  = toIndex(start, len)\n      , final  = toIndex(end === undefined ? len : end, len)\n      , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))\n      , viewS  = new $DataView(this)\n      , viewT  = new $DataView(result)\n      , index  = 0;\n    while(first < final){\n      viewT.setUint8(index++, viewS.getUint8(first++));\n    } return result;\n  }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.array-buffer.js\n ** module id = 286\n ** module chunks = 0\n **/"",""var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n  DataView: require('./_typed-buffer').DataView\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.data-view.js\n ** module id = 287\n ** module chunks = 0\n **/"",""require('./_typed-array')('Float32', 4, function(init){\n  return function Float32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.float32-array.js\n ** module id = 288\n ** module chunks = 0\n **/"",""require('./_typed-array')('Float64', 8, function(init){\n  return function Float64Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.float64-array.js\n ** module id = 289\n ** module chunks = 0\n **/"",""require('./_typed-array')('Int16', 2, function(init){\n  return function Int16Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.int16-array.js\n ** module id = 290\n ** module chunks = 0\n **/"",""require('./_typed-array')('Int32', 4, function(init){\n  return function Int32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.int32-array.js\n ** module id = 291\n ** module chunks = 0\n **/"",""require('./_typed-array')('Int8', 1, function(init){\n  return function Int8Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.int8-array.js\n ** module id = 292\n ** module chunks = 0\n **/"",""require('./_typed-array')('Uint16', 2, function(init){\n  return function Uint16Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.uint16-array.js\n ** module id = 293\n ** module chunks = 0\n **/"",""require('./_typed-array')('Uint32', 4, function(init){\n  return function Uint32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.uint32-array.js\n ** module id = 294\n ** module chunks = 0\n **/"",""require('./_typed-array')('Uint8', 1, function(init){\n  return function Uint8Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.uint8-array.js\n ** module id = 295\n ** module chunks = 0\n **/"",""require('./_typed-array')('Uint8', 1, function(init){\n  return function Uint8ClampedArray(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n}, true);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.typed.uint8-clamped-array.js\n ** module id = 296\n ** module chunks = 0\n **/"",""'use strict';\nvar weak = require('./_collection-weak');\n\n// 23.4 WeakSet Objects\nrequire('./_collection')('WeakSet', function(get){\n  return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value){\n    return weak.def(this, value, true);\n  }\n}, weak, false, true);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es6.weak-set.js\n ** module id = 297\n ** module chunks = 0\n **/"",""var metadata                  = require('./_metadata')\n  , anObject                  = require('./_an-object')\n  , toMetaKey                 = metadata.key\n  , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){\n  ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.define-metadata.js\n ** module id = 298\n ** module chunks = 0\n **/"",""var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , toMetaKey              = metadata.key\n  , getOrCreateMetadataMap = metadata.map\n  , store                  = metadata.store;\n\nmetadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){\n  var targetKey   = arguments.length < 3 ? undefined : toMetaKey(arguments[2])\n    , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n  if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false;\n  if(metadataMap.size)return true;\n  var targetMetadata = store.get(target);\n  targetMetadata['delete'](targetKey);\n  return !!targetMetadata.size || store['delete'](target);\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.delete-metadata.js\n ** module id = 299\n ** module chunks = 0\n **/"",""var Set                     = require('./es6.set')\n  , from                    = require('./_array-from-iterable')\n  , metadata                = require('./_metadata')\n  , anObject                = require('./_an-object')\n  , getPrototypeOf          = require('./_object-gpo')\n  , ordinaryOwnMetadataKeys = metadata.keys\n  , toMetaKey               = metadata.key;\n\nvar ordinaryMetadataKeys = function(O, P){\n  var oKeys  = ordinaryOwnMetadataKeys(O, P)\n    , parent = getPrototypeOf(O);\n  if(parent === null)return oKeys;\n  var pKeys  = ordinaryMetadataKeys(parent, P);\n  return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){\n  return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.get-metadata-keys.js\n ** module id = 300\n ** module chunks = 0\n **/"",""var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , getPrototypeOf         = require('./_object-gpo')\n  , ordinaryHasOwnMetadata = metadata.has\n  , ordinaryGetOwnMetadata = metadata.get\n  , toMetaKey              = metadata.key;\n\nvar ordinaryGetMetadata = function(MetadataKey, O, P){\n  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n  if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P);\n  var parent = getPrototypeOf(O);\n  return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.get-metadata.js\n ** module id = 301\n ** module chunks = 0\n **/"",""var metadata                = require('./_metadata')\n  , anObject                = require('./_an-object')\n  , ordinaryOwnMetadataKeys = metadata.keys\n  , toMetaKey               = metadata.key;\n\nmetadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){\n  return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.get-own-metadata-keys.js\n ** module id = 302\n ** module chunks = 0\n **/"",""var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , ordinaryGetOwnMetadata = metadata.get\n  , toMetaKey              = metadata.key;\n\nmetadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.get-own-metadata.js\n ** module id = 303\n ** module chunks = 0\n **/"",""var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , getPrototypeOf         = require('./_object-gpo')\n  , ordinaryHasOwnMetadata = metadata.has\n  , toMetaKey              = metadata.key;\n\nvar ordinaryHasMetadata = function(MetadataKey, O, P){\n  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n  if(hasOwn)return true;\n  var parent = getPrototypeOf(O);\n  return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.has-metadata.js\n ** module id = 304\n ** module chunks = 0\n **/"",""var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , ordinaryHasOwnMetadata = metadata.has\n  , toMetaKey              = metadata.key;\n\nmetadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.has-own-metadata.js\n ** module id = 305\n ** module chunks = 0\n **/"",""var metadata                  = require('./_metadata')\n  , anObject                  = require('./_an-object')\n  , aFunction                 = require('./_a-function')\n  , toMetaKey                 = metadata.key\n  , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({metadata: function metadata(metadataKey, metadataValue){\n  return function decorator(target, targetKey){\n    ordinaryDefineOwnMetadata(\n      metadataKey, metadataValue,\n      (targetKey !== undefined ? anObject : aFunction)(target),\n      toMetaKey(targetKey)\n    );\n  };\n}});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/modules/es7.reflect.metadata.js\n ** module id = 306\n ** module chunks = 0\n **/"",""// function.name (all IE)\n/*! @source http://stackoverflow.com/questions/6903762/function-name-not-supported-in-ie*/\nif (!Object.hasOwnProperty('name')) {\n  Object.defineProperty(Function.prototype, 'name', {\n    get: function() {\n      var matches = this.toString().match(/^\\s*function\\s*(\\S*)\\s*\\(/);\n      var name = matches && matches.length > 1 ? matches[1] : \""\"";\n      // For better performance only parse once, and then cache the\n      // result through a new accessor for repeated access.\n      Object.defineProperty(this, 'name', {value: name});\n      return name;\n    }\n  });\n}\n\n// URL polyfill for SystemJS (all IE)\n/*! @source https://github.com/ModuleLoader/es6-module-loader/blob/master/src/url-polyfill.js*/\n// from https://gist.github.com/Yaffle/1088850\n(function(global) {\n  function URLPolyfill(url, baseURL) {\n    if (typeof url != 'string') {\n      throw new TypeError('URL must be a string');\n    }\n    var m = String(url).replace(/^\\s+|\\s+$/g, \""\"").match(/^([^:\\/?#]+:)?(?:\\/\\/(?:([^:@\\/?#]*)(?::([^:@\\/?#]*))?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);\n    if (!m) {\n      throw new RangeError();\n    }\n    var protocol = m[1] || \""\"";\n    var username = m[2] || \""\"";\n    var password = m[3] || \""\"";\n    var host = m[4] || \""\"";\n    var hostname = m[5] || \""\"";\n    var port = m[6] || \""\"";\n    var pathname = m[7] || \""\"";\n    var search = m[8] || \""\"";\n    var hash = m[9] || \""\"";\n    if (baseURL !== undefined) {\n      var base = baseURL instanceof URLPolyfill ? baseURL : new URLPolyfill(baseURL);\n      var flag = protocol === \""\"" && host === \""\"" && username === \""\"";\n      if (flag && pathname === \""\"" && search === \""\"") {\n        search = base.search;\n      }\n      if (flag && pathname.charAt(0) !== \""/\"") {\n        pathname = (pathname !== \""\"" ? (((base.host !== \""\"" || base.username !== \""\"") && base.pathname === \""\"" ? \""/\"" : \""\"") + base.pathname.slice(0, base.pathname.lastIndexOf(\""/\"") + 1) + pathname) : base.pathname);\n      }\n      // dot segments removal\n      var output = [];\n      pathname.replace(/^(\\.\\.?(\\/|$))+/, \""\"")\n        .replace(/\\/(\\.(\\/|$))+/g, \""/\"")\n        .replace(/\\/\\.\\.$/, \""/../\"")\n        .replace(/\\/?[^\\/]*/g, function (p) {\n          if (p === \""/..\"") {\n            output.pop();\n          } else {\n            output.push(p);\n          }\n        });\n      pathname = output.join(\""\"").replace(/^\\//, pathname.charAt(0) === \""/\"" ? \""/\"" : \""\"");\n      if (flag) {\n        port = base.port;\n        hostname = base.hostname;\n        host = base.host;\n        password = base.password;\n        username = base.username;\n      }\n      if (protocol === \""\"") {\n        protocol = base.protocol;\n      }\n    }\n\n    // convert windows file URLs to use /\n    if (protocol == 'file:')\n      pathname = pathname.replace(/\\\\/g, '/');\n\n    this.origin = protocol + (protocol !== \""\"" || host !== \""\"" ? \""//\"" : \""\"") + host;\n    this.href = protocol + (protocol !== \""\"" || host !== \""\"" ? \""//\"" : \""\"") + (username !== \""\"" ? username + (password !== \""\"" ? \"":\"" + password : \""\"") + \""@\"" : \""\"") + host + pathname + search + hash;\n    this.protocol = protocol;\n    this.username = username;\n    this.password = password;\n    this.host = host;\n    this.hostname = hostname;\n    this.port = port;\n    this.pathname = pathname;\n    this.search = search;\n    this.hash = hash;\n  }\nglobal.URLPolyfill = URLPolyfill;\n})(typeof self != 'undefined' ? self : global);\n\n//classList (IE9)\n/*! @license please refer to http://unlicense.org/ */\n/*! @author Eli Grey */\n/*! @source https://github.com/eligrey/classList.js */\n;if(\""document\"" in self&&!(\""classList\"" in document.createElement(\""_\""))){(function(j){\""use strict\"";if(!(\""Element\"" in j)){return}var a=\""classList\"",f=\""prototype\"",m=j.Element[f],b=Object,k=String[f].trim||function(){return this.replace(/^\\s+|\\s+$/g,\""\"")},c=Array[f].indexOf||function(q){var p=0,o=this.length;for(;p<o;p++){if(p in this&&this[p]===q){return p}}return -1},n=function(o,p){this.name=o;this.code=DOMException[o];this.message=p},g=function(p,o){if(o===\""\""){throw new n(\""SYNTAX_ERR\"",\""An invalid or illegal string was specified\"")}if(/\\s/.test(o)){throw new n(\""INVALID_CHARACTER_ERR\"",\""String contains an invalid character\"")}return c.call(p,o)},d=function(s){var r=k.call(s.getAttribute(\""class\"")||\""\""),q=r?r.split(/\\s+/):[],p=0,o=q.length;for(;p<o;p++){this.push(q[p])}this._updateClassName=function(){s.setAttribute(\""class\"",this.toString())}},e=d[f]=[],i=function(){return new d(this)};n[f]=Error[f];e.item=function(o){return this[o]||null};e.contains=function(o){o+=\""\"";return g(this,o)!==-1};e.add=function(){var s=arguments,r=0,p=s.length,q,o=false;do{q=s[r]+\""\"";if(g(this,q)===-1){this.push(q);o=true}}while(++r<p);if(o){this._updateClassName()}};e.remove=function(){var t=arguments,s=0,p=t.length,r,o=false;do{r=t[s]+\""\"";var q=g(this,r);if(q!==-1){this.splice(q,1);o=true}}while(++s<p);if(o){this._updateClassName()}};e.toggle=function(p,q){p+=\""\"";var o=this.contains(p),r=o?q!==true&&\""remove\"":q!==false&&\""add\"";if(r){this[r](p)}return !o};e.toString=function(){return this.join(\"" \"")};if(b.defineProperty){var l={get:i,enumerable:true,configurable:true};try{b.defineProperty(m,a,l)}catch(h){if(h.number===-2146823252){l.enumerable=false;b.defineProperty(m,a,l)}}}else{if(b[f].__defineGetter__){m.__defineGetter__(a,i)}}}(self))};\n\n//console mock (IE9)\nif (!window.console) window.console = {};\nif (!window.console.log) window.console.log = function () { };\nif (!window.console.error) window.console.error = function () { };\nif (!window.console.warn) window.console.warn = function () { };\nif (!window.console.assert) window.console.assert = function () { };\n\n//RequestAnimationFrame (IE9, Android 4.1, 4.2, 4.3)\n/*! @author Paul Irish */\n/*! @source https://gist.github.com/paulirish/1579671 */\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n// MIT license\n\n(function() {\n    var lastTime = 0;\n\n    if (!window.requestAnimationFrame)\n        window.requestAnimationFrame = function(callback, element) {\n            var currTime = Date.now();\n            var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n            var id = window.setTimeout(function() { callback(currTime + timeToCall); },\n              timeToCall);\n            lastTime = currTime + timeToCall;\n            return id;\n        };\n\n    if (!window.cancelAnimationFrame)\n        window.cancelAnimationFrame = function(id) {\n            clearTimeout(id);\n        };\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/ie-shim/index.js\n ** module id = 307\n ** module chunks = 0\n **/"",""// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 310\n ** module chunks = 0\n **/"",""/**\n* @license\n* Copyright Google Inc. All Rights Reserved.\n*\n* Use of this source code is governed by an MIT-style license that can be\n* found in the LICENSE file at https://angular.io/license\n*/\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (factory());\n}(this, (function () { 'use strict';\n\nvar NEWLINE = '\\n';\nvar SEP = '  -------------  ';\nvar IGNORE_FRAMES = [];\nvar creationTrace = '__creationTrace__';\nvar LongStackTrace = (function () {\n    function LongStackTrace() {\n        this.error = getStacktrace();\n        this.timestamp = new Date();\n    }\n    return LongStackTrace;\n}());\nfunction getStacktraceWithUncaughtError() {\n    return new Error('STACKTRACE TRACKING');\n}\nfunction getStacktraceWithCaughtError() {\n    try {\n        throw getStacktraceWithUncaughtError();\n    }\n    catch (e) {\n        return e;\n    }\n}\n// Some implementations of exception handling don't create a stack trace if the exception\n// isn't thrown, however it's faster not to actually throw the exception.\nvar error = getStacktraceWithUncaughtError();\nvar coughtError = getStacktraceWithCaughtError();\nvar getStacktrace = error.stack\n    ? getStacktraceWithUncaughtError\n    : (coughtError.stack ? getStacktraceWithCaughtError : getStacktraceWithUncaughtError);\nfunction getFrames(error) {\n    return error.stack ? error.stack.split(NEWLINE) : [];\n}\nfunction addErrorStack(lines, error) {\n    var trace = getFrames(error);\n    for (var i = 0; i < trace.length; i++) {\n        var frame = trace[i];\n        // Filter out the Frames which are part of stack capturing.\n        if (!(i < IGNORE_FRAMES.length && IGNORE_FRAMES[i] === frame)) {\n            lines.push(trace[i]);\n        }\n    }\n}\nfunction renderLongStackTrace(frames, stack) {\n    var longTrace = [stack];\n    if (frames) {\n        var timestamp = new Date().getTime();\n        for (var i = 0; i < frames.length; i++) {\n            var traceFrames = frames[i];\n            var lastTime = traceFrames.timestamp;\n            longTrace.push(SEP + \"" Elapsed: \"" + (timestamp - lastTime.getTime()) + \"" ms; At: \"" + lastTime + \"" \"" + SEP);\n            addErrorStack(longTrace, traceFrames.error);\n            timestamp = lastTime.getTime();\n        }\n    }\n    return longTrace.join(NEWLINE);\n}\nZone['longStackTraceZoneSpec'] = {\n    name: 'long-stack-trace',\n    longStackTraceLimit: 10,\n    onScheduleTask: function (parentZoneDelegate, currentZone, targetZone, task) {\n        var currentTask = Zone.currentTask;\n        var trace = currentTask && currentTask.data && currentTask.data[creationTrace] || [];\n        trace = [new LongStackTrace()].concat(trace);\n        if (trace.length > this.longStackTraceLimit) {\n            trace.length = this.longStackTraceLimit;\n        }\n        if (!task.data)\n            task.data = {};\n        task.data[creationTrace] = trace;\n        return parentZoneDelegate.scheduleTask(targetZone, task);\n    },\n    onHandleError: function (parentZoneDelegate, currentZone, targetZone, error) {\n        var parentTask = Zone.currentTask || error.task;\n        if (error instanceof Error && parentTask) {\n            var stackSetSucceded = null;\n            try {\n                var descriptor = Object.getOwnPropertyDescriptor(error, 'stack');\n                if (descriptor && descriptor.configurable) {\n                    var delegateGet_1 = descriptor.get;\n                    var value_1 = descriptor.value;\n                    descriptor = {\n                        get: function () {\n                            return renderLongStackTrace(parentTask.data && parentTask.data[creationTrace], delegateGet_1 ? delegateGet_1.apply(this) : value_1);\n                        }\n                    };\n                    Object.defineProperty(error, 'stack', descriptor);\n                    stackSetSucceded = true;\n                }\n            }\n            catch (e) { }\n            var longStack = stackSetSucceded ? null : renderLongStackTrace(parentTask.data && parentTask.data[creationTrace], error.stack);\n            if (!stackSetSucceded) {\n                try {\n                    stackSetSucceded = error.stack = longStack;\n                }\n                catch (e) { }\n            }\n            if (!stackSetSucceded) {\n                try {\n                    stackSetSucceded = error.longStack = longStack;\n                }\n                catch (e) { }\n            }\n        }\n        return parentZoneDelegate.handleError(targetZone, error);\n    }\n};\nfunction captureStackTraces(stackTraces, count) {\n    if (count > 0) {\n        stackTraces.push(getFrames((new LongStackTrace()).error));\n        captureStackTraces(stackTraces, count - 1);\n    }\n}\nfunction computeIgnoreFrames() {\n    var frames = [];\n    captureStackTraces(frames, 2);\n    var frames1 = frames[0];\n    var frames2 = frames[1];\n    for (var i = 0; i < frames1.length; i++) {\n        var frame1 = frames1[i];\n        var frame2 = frames2[i];\n        if (frame1 === frame2) {\n            IGNORE_FRAMES.push(frame1);\n        }\n        else {\n            break;\n        }\n    }\n}\ncomputeIgnoreFrames();\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/zone.js/dist/long-stack-trace-zone.js\n ** module id = 337\n ** module chunks = 0\n **/"",""/**\n* @license\n* Copyright Google Inc. All Rights Reserved.\n*\n* Use of this source code is governed by an MIT-style license that can be\n* found in the LICENSE file at https://angular.io/license\n*/\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (factory());\n}(this, (function () { 'use strict';\n\nvar Zone$1 = (function (global) {\n    if (global.Zone) {\n        throw new Error('Zone already loaded.');\n    }\n    var Zone = (function () {\n        function Zone(parent, zoneSpec) {\n            this._properties = null;\n            this._parent = parent;\n            this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '<root>';\n            this._properties = zoneSpec && zoneSpec.properties || {};\n            this._zoneDelegate = new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);\n        }\n        Zone.assertZonePatched = function () {\n            if (global.Promise !== ZoneAwarePromise) {\n                throw new Error(\""Zone.js has detected that ZoneAwarePromise `(window|global).Promise` \"" +\n                    \""has been overwritten.\\n\"" +\n                    \""Most likely cause is that a Promise polyfill has been loaded \"" +\n                    \""after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. \"" +\n                    \""If you must load one, do so before loading zone.js.)\"");\n            }\n        };\n        Object.defineProperty(Zone, \""current\"", {\n            get: function () { return _currentZone; },\n            enumerable: true,\n            configurable: true\n        });\n        \n        Object.defineProperty(Zone, \""currentTask\"", {\n            get: function () { return _currentTask; },\n            enumerable: true,\n            configurable: true\n        });\n        \n        Object.defineProperty(Zone.prototype, \""parent\"", {\n            get: function () { return this._parent; },\n            enumerable: true,\n            configurable: true\n        });\n        \n        Object.defineProperty(Zone.prototype, \""name\"", {\n            get: function () { return this._name; },\n            enumerable: true,\n            configurable: true\n        });\n        \n        Zone.prototype.get = function (key) {\n            var zone = this.getZoneWith(key);\n            if (zone)\n                return zone._properties[key];\n        };\n        Zone.prototype.getZoneWith = function (key) {\n            var current = this;\n            while (current) {\n                if (current._properties.hasOwnProperty(key)) {\n                    return current;\n                }\n                current = current._parent;\n            }\n            return null;\n        };\n        Zone.prototype.fork = function (zoneSpec) {\n            if (!zoneSpec)\n                throw new Error('ZoneSpec required!');\n            return this._zoneDelegate.fork(this, zoneSpec);\n        };\n        Zone.prototype.wrap = function (callback, source) {\n            if (typeof callback !== 'function') {\n                throw new Error('Expecting function got: ' + callback);\n            }\n            var _callback = this._zoneDelegate.intercept(this, callback, source);\n            var zone = this;\n            return function () {\n                return zone.runGuarded(_callback, this, arguments, source);\n            };\n        };\n        Zone.prototype.run = function (callback, applyThis, applyArgs, source) {\n            if (applyThis === void 0) { applyThis = null; }\n            if (applyArgs === void 0) { applyArgs = null; }\n            if (source === void 0) { source = null; }\n            var oldZone = _currentZone;\n            _currentZone = this;\n            try {\n                return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n            }\n            finally {\n                _currentZone = oldZone;\n            }\n        };\n        Zone.prototype.runGuarded = function (callback, applyThis, applyArgs, source) {\n            if (applyThis === void 0) { applyThis = null; }\n            if (applyArgs === void 0) { applyArgs = null; }\n            if (source === void 0) { source = null; }\n            var oldZone = _currentZone;\n            _currentZone = this;\n            try {\n                try {\n                    return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n                }\n                catch (error) {\n                    if (this._zoneDelegate.handleError(this, error)) {\n                        throw error;\n                    }\n                }\n            }\n            finally {\n                _currentZone = oldZone;\n            }\n        };\n        Zone.prototype.runTask = function (task, applyThis, applyArgs) {\n            task.runCount++;\n            if (task.zone != this)\n                throw new Error('A task can only be run in the zone which created it! (Creation: ' +\n                    task.zone.name + '; Execution: ' + this.name + ')');\n            var previousTask = _currentTask;\n            _currentTask = task;\n            var oldZone = _currentZone;\n            _currentZone = this;\n            try {\n                if (task.type == 'macroTask' && task.data && !task.data.isPeriodic) {\n                    task.cancelFn = null;\n                }\n                try {\n                    return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs);\n                }\n                catch (error) {\n                    if (this._zoneDelegate.handleError(this, error)) {\n                        throw error;\n                    }\n                }\n            }\n            finally {\n                _currentZone = oldZone;\n                _currentTask = previousTask;\n            }\n        };\n        Zone.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) {\n            return this._zoneDelegate.scheduleTask(this, new ZoneTask('microTask', this, source, callback, data, customSchedule, null));\n        };\n        Zone.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) {\n            return this._zoneDelegate.scheduleTask(this, new ZoneTask('macroTask', this, source, callback, data, customSchedule, customCancel));\n        };\n        Zone.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) {\n            return this._zoneDelegate.scheduleTask(this, new ZoneTask('eventTask', this, source, callback, data, customSchedule, customCancel));\n        };\n        Zone.prototype.cancelTask = function (task) {\n            var value = this._zoneDelegate.cancelTask(this, task);\n            task.runCount = -1;\n            task.cancelFn = null;\n            return value;\n        };\n        Zone.__symbol__ = __symbol__;\n        return Zone;\n    }());\n    \n    var ZoneDelegate = (function () {\n        function ZoneDelegate(zone, parentDelegate, zoneSpec) {\n            this._taskCounts = { microTask: 0, macroTask: 0, eventTask: 0 };\n            this.zone = zone;\n            this._parentDelegate = parentDelegate;\n            this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);\n            this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);\n            this._interceptZS = zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);\n            this._interceptDlgt = zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);\n            this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);\n            this._invokeDlgt = zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);\n            this._handleErrorZS = zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);\n            this._handleErrorDlgt = zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);\n            this._scheduleTaskZS = zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);\n            this._scheduleTaskDlgt = zoneSpec && (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);\n            this._invokeTaskZS = zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);\n            this._invokeTaskDlgt = zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);\n            this._cancelTaskZS = zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);\n            this._cancelTaskDlgt = zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);\n            this._hasTaskZS = zoneSpec && (zoneSpec.onHasTask ? zoneSpec : parentDelegate._hasTaskZS);\n            this._hasTaskDlgt = zoneSpec && (zoneSpec.onHasTask ? parentDelegate : parentDelegate._hasTaskDlgt);\n        }\n        ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) {\n            return this._forkZS\n                ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec)\n                : new Zone(targetZone, zoneSpec);\n        };\n        ZoneDelegate.prototype.intercept = function (targetZone, callback, source) {\n            return this._interceptZS\n                ? this._interceptZS.onIntercept(this._interceptDlgt, this.zone, targetZone, callback, source)\n                : callback;\n        };\n        ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) {\n            return this._invokeZS\n                ? this._invokeZS.onInvoke(this._invokeDlgt, this.zone, targetZone, callback, applyThis, applyArgs, source)\n                : callback.apply(applyThis, applyArgs);\n        };\n        ZoneDelegate.prototype.handleError = function (targetZone, error) {\n            return this._handleErrorZS\n                ? this._handleErrorZS.onHandleError(this._handleErrorDlgt, this.zone, targetZone, error)\n                : true;\n        };\n        ZoneDelegate.prototype.scheduleTask = function (targetZone, task) {\n            try {\n                if (this._scheduleTaskZS) {\n                    return this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this.zone, targetZone, task);\n                }\n                else if (task.scheduleFn) {\n                    task.scheduleFn(task);\n                }\n                else if (task.type == 'microTask') {\n                    scheduleMicroTask(task);\n                }\n                else {\n                    throw new Error('Task is missing scheduleFn.');\n                }\n                return task;\n            }\n            finally {\n                if (targetZone == this.zone) {\n                    this._updateTaskCount(task.type, 1);\n                }\n            }\n        };\n        ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) {\n            try {\n                return this._invokeTaskZS\n                    ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this.zone, targetZone, task, applyThis, applyArgs)\n                    : task.callback.apply(applyThis, applyArgs);\n            }\n            finally {\n                if (targetZone == this.zone && (task.type != 'eventTask') && !(task.data && task.data.isPeriodic)) {\n                    this._updateTaskCount(task.type, -1);\n                }\n            }\n        };\n        ZoneDelegate.prototype.cancelTask = function (targetZone, task) {\n            var value;\n            if (this._cancelTaskZS) {\n                value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this.zone, targetZone, task);\n            }\n            else if (!task.cancelFn) {\n                throw new Error('Task does not support cancellation, or is already canceled.');\n            }\n            else {\n                value = task.cancelFn(task);\n            }\n            if (targetZone == this.zone) {\n                // this should not be in the finally block, because exceptions assume not canceled.\n                this._updateTaskCount(task.type, -1);\n            }\n            return value;\n        };\n        ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) {\n            return this._hasTaskZS && this._hasTaskZS.onHasTask(this._hasTaskDlgt, this.zone, targetZone, isEmpty);\n        };\n        ZoneDelegate.prototype._updateTaskCount = function (type, count) {\n            var counts = this._taskCounts;\n            var prev = counts[type];\n            var next = counts[type] = prev + count;\n            if (next < 0) {\n                throw new Error('More tasks executed then were scheduled.');\n            }\n            if (prev == 0 || next == 0) {\n                var isEmpty = {\n                    microTask: counts.microTask > 0,\n                    macroTask: counts.macroTask > 0,\n                    eventTask: counts.eventTask > 0,\n                    change: type\n                };\n                try {\n                    this.hasTask(this.zone, isEmpty);\n                }\n                finally {\n                    if (this._parentDelegate) {\n                        this._parentDelegate._updateTaskCount(type, count);\n                    }\n                }\n            }\n        };\n        return ZoneDelegate;\n    }());\n    var ZoneTask = (function () {\n        function ZoneTask(type, zone, source, callback, options, scheduleFn, cancelFn) {\n            this.runCount = 0;\n            this.type = type;\n            this.zone = zone;\n            this.source = source;\n            this.data = options;\n            this.scheduleFn = scheduleFn;\n            this.cancelFn = cancelFn;\n            this.callback = callback;\n            var self = this;\n            this.invoke = function () {\n                _numberOfNestedTaskFrames++;\n                try {\n                    return zone.runTask(self, this, arguments);\n                }\n                finally {\n                    if (_numberOfNestedTaskFrames == 1) {\n                        drainMicroTaskQueue();\n                    }\n                    _numberOfNestedTaskFrames--;\n                }\n            };\n        }\n        ZoneTask.prototype.toString = function () {\n            if (this.data && typeof this.data.handleId !== 'undefined') {\n                return this.data.handleId;\n            }\n            else {\n                return this.toString();\n            }\n        };\n        return ZoneTask;\n    }());\n    function __symbol__(name) { return '__zone_symbol__' + name; }\n    \n    var symbolSetTimeout = __symbol__('setTimeout');\n    var symbolPromise = __symbol__('Promise');\n    var symbolThen = __symbol__('then');\n    var _currentZone = new Zone(null, null);\n    var _currentTask = null;\n    var _microTaskQueue = [];\n    var _isDrainingMicrotaskQueue = false;\n    var _uncaughtPromiseErrors = [];\n    var _numberOfNestedTaskFrames = 0;\n    function scheduleQueueDrain() {\n        // if we are not running in any task, and there has not been anything scheduled\n        // we must bootstrap the initial task creation by manually scheduling the drain\n        if (_numberOfNestedTaskFrames == 0 && _microTaskQueue.length == 0) {\n            // We are not running in Task, so we need to kickstart the microtask queue.\n            if (global[symbolPromise]) {\n                global[symbolPromise].resolve(0)[symbolThen](drainMicroTaskQueue);\n            }\n            else {\n                global[symbolSetTimeout](drainMicroTaskQueue, 0);\n            }\n        }\n    }\n    function scheduleMicroTask(task) {\n        scheduleQueueDrain();\n        _microTaskQueue.push(task);\n    }\n    function consoleError(e) {\n        var rejection = e && e.rejection;\n        if (rejection) {\n            console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);\n        }\n        console.error(e);\n    }\n    function drainMicroTaskQueue() {\n        if (!_isDrainingMicrotaskQueue) {\n            _isDrainingMicrotaskQueue = true;\n            while (_microTaskQueue.length) {\n                var queue = _microTaskQueue;\n                _microTaskQueue = [];\n                for (var i = 0; i < queue.length; i++) {\n                    var task = queue[i];\n                    try {\n                        task.zone.runTask(task, null, null);\n                    }\n                    catch (e) {\n                        consoleError(e);\n                    }\n                }\n            }\n            while (_uncaughtPromiseErrors.length) {\n                var _loop_1 = function() {\n                    var uncaughtPromiseError = _uncaughtPromiseErrors.shift();\n                    try {\n                        uncaughtPromiseError.zone.runGuarded(function () { throw uncaughtPromiseError; });\n                    }\n                    catch (e) {\n                        consoleError(e);\n                    }\n                };\n                while (_uncaughtPromiseErrors.length) {\n                    _loop_1();\n                }\n            }\n            _isDrainingMicrotaskQueue = false;\n        }\n    }\n    function isThenable(value) {\n        return value && value.then;\n    }\n    function forwardResolution(value) { return value; }\n    function forwardRejection(rejection) { return ZoneAwarePromise.reject(rejection); }\n    var symbolState = __symbol__('state');\n    var symbolValue = __symbol__('value');\n    var source = 'Promise.then';\n    var UNRESOLVED = null;\n    var RESOLVED = true;\n    var REJECTED = false;\n    var REJECTED_NO_CATCH = 0;\n    function makeResolver(promise, state) {\n        return function (v) {\n            resolvePromise(promise, state, v);\n            // Do not return value or you will break the Promise spec.\n        };\n    }\n    function resolvePromise(promise, state, value) {\n        if (promise[symbolState] === UNRESOLVED) {\n            if (value instanceof ZoneAwarePromise && value[symbolState] !== UNRESOLVED) {\n                clearRejectedNoCatch(value);\n                resolvePromise(promise, value[symbolState], value[symbolValue]);\n            }\n            else if (isThenable(value)) {\n                value.then(makeResolver(promise, state), makeResolver(promise, false));\n            }\n            else {\n                promise[symbolState] = state;\n                var queue = promise[symbolValue];\n                promise[symbolValue] = value;\n                for (var i = 0; i < queue.length;) {\n                    scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);\n                }\n                if (queue.length == 0 && state == REJECTED) {\n                    promise[symbolState] = REJECTED_NO_CATCH;\n                    try {\n                        throw new Error(\""Uncaught (in promise): \"" + value);\n                    }\n                    catch (e) {\n                        var error_1 = e;\n                        error_1.rejection = value;\n                        error_1.promise = promise;\n                        error_1.zone = Zone.current;\n                        error_1.task = Zone.currentTask;\n                        _uncaughtPromiseErrors.push(error_1);\n                        scheduleQueueDrain();\n                    }\n                }\n            }\n        }\n        // Resolving an already resolved promise is a noop.\n        return promise;\n    }\n    function clearRejectedNoCatch(promise) {\n        if (promise[symbolState] === REJECTED_NO_CATCH) {\n            promise[symbolState] = REJECTED;\n            for (var i = 0; i < _uncaughtPromiseErrors.length; i++) {\n                if (promise === _uncaughtPromiseErrors[i].promise) {\n                    _uncaughtPromiseErrors.splice(i, 1);\n                    break;\n                }\n            }\n        }\n    }\n    function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {\n        clearRejectedNoCatch(promise);\n        var delegate = promise[symbolState] ? onFulfilled || forwardResolution : onRejected || forwardRejection;\n        zone.scheduleMicroTask(source, function () {\n            try {\n                resolvePromise(chainPromise, true, zone.run(delegate, null, [promise[symbolValue]]));\n            }\n            catch (error) {\n                resolvePromise(chainPromise, false, error);\n            }\n        });\n    }\n    var ZoneAwarePromise = (function () {\n        function ZoneAwarePromise(executor) {\n            var promise = this;\n            if (!(promise instanceof ZoneAwarePromise)) {\n                throw new Error('Must be an instanceof Promise.');\n            }\n            promise[symbolState] = UNRESOLVED;\n            promise[symbolValue] = []; // queue;\n            try {\n                executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED));\n            }\n            catch (e) {\n                resolvePromise(promise, false, e);\n            }\n        }\n        ZoneAwarePromise.resolve = function (value) {\n            return resolvePromise(new this(null), RESOLVED, value);\n        };\n        ZoneAwarePromise.reject = function (error) {\n            return resolvePromise(new this(null), REJECTED, error);\n        };\n        ZoneAwarePromise.race = function (values) {\n            var resolve;\n            var reject;\n            var promise = new this(function (res, rej) { resolve = res; reject = rej; });\n            function onResolve(value) { promise && (promise = null || resolve(value)); }\n            function onReject(error) { promise && (promise = null || reject(error)); }\n            for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n                var value = values_1[_i];\n                if (!isThenable(value)) {\n                    value = this.resolve(value);\n                }\n                value.then(onResolve, onReject);\n            }\n            return promise;\n        };\n        ZoneAwarePromise.all = function (values) {\n            var resolve;\n            var reject;\n            var promise = new this(function (res, rej) { resolve = res; reject = rej; });\n            var count = 0;\n            var resolvedValues = [];\n            for (var _i = 0, values_2 = values; _i < values_2.length; _i++) {\n                var value = values_2[_i];\n                if (!isThenable(value)) {\n                    value = this.resolve(value);\n                }\n                value.then((function (index) { return function (value) {\n                    resolvedValues[index] = value;\n                    count--;\n                    if (!count) {\n                        resolve(resolvedValues);\n                    }\n                }; })(count), reject);\n                count++;\n            }\n            if (!count)\n                resolve(resolvedValues);\n            return promise;\n        };\n        ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) {\n            var chainPromise = new this.constructor(null);\n            var zone = Zone.current;\n            if (this[symbolState] == UNRESOLVED) {\n                this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);\n            }\n            else {\n                scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);\n            }\n            return chainPromise;\n        };\n        ZoneAwarePromise.prototype.catch = function (onRejected) {\n            return this.then(null, onRejected);\n        };\n        return ZoneAwarePromise;\n    }());\n    // Protect against aggressive optimizers dropping seemingly unused properties.\n    // E.g. Closure Compiler in advanced mode.\n    ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;\n    ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;\n    ZoneAwarePromise['race'] = ZoneAwarePromise.race;\n    ZoneAwarePromise['all'] = ZoneAwarePromise.all;\n    var NativePromise = global[__symbol__('Promise')] = global.Promise;\n    global.Promise = ZoneAwarePromise;\n    function patchThen(NativePromise) {\n        var NativePromiseProtototype = NativePromise.prototype;\n        var NativePromiseThen = NativePromiseProtototype[__symbol__('then')]\n            = NativePromiseProtototype.then;\n        NativePromiseProtototype.then = function (onResolve, onReject) {\n            var nativePromise = this;\n            return new ZoneAwarePromise(function (resolve, reject) {\n                NativePromiseThen.call(nativePromise, resolve, reject);\n            }).then(onResolve, onReject);\n        };\n    }\n    if (NativePromise) {\n        patchThen(NativePromise);\n        if (typeof global['fetch'] !== 'undefined') {\n            var fetchPromise = void 0;\n            try {\n                // In MS Edge this throws\n                fetchPromise = global['fetch']();\n            }\n            catch (e) {\n                // In Chrome this throws instead.\n                fetchPromise = global['fetch']('about:blank');\n            }\n            // ignore output to prevent error;\n            fetchPromise.then(function () { return null; }, function () { return null; });\n            if (fetchPromise.constructor != NativePromise) {\n                patchThen(fetchPromise.constructor);\n            }\n        }\n    }\n    // This is not part of public API, but it is usefull for tests, so we expose it.\n    Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;\n    return global.Zone = Zone;\n})(typeof window === 'object' && window || typeof self === 'object' && self || global);\n\n/**\n * Suppress closure compiler errors about unknown 'process' variable\n * @fileoverview\n * @suppress {undefinedVars}\n */\nvar zoneSymbol = Zone['__symbol__'];\nvar _global$1 = typeof window === 'object' && window || typeof self === 'object' && self || global;\nfunction bindArguments(args, source) {\n    for (var i = args.length - 1; i >= 0; i--) {\n        if (typeof args[i] === 'function') {\n            args[i] = Zone.current.wrap(args[i], source + '_' + i);\n        }\n    }\n    return args;\n}\n\nfunction patchPrototype(prototype, fnNames) {\n    var source = prototype.constructor['name'];\n    var _loop_1 = function(i) {\n        var name_1 = fnNames[i];\n        var delegate = prototype[name_1];\n        if (delegate) {\n            prototype[name_1] = (function (delegate) {\n                return function () {\n                    return delegate.apply(this, bindArguments(arguments, source + '.' + name_1));\n                };\n            })(delegate);\n        }\n    };\n    for (var i = 0; i < fnNames.length; i++) {\n        _loop_1(i);\n    }\n}\n\nvar isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope);\nvar isNode = (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]');\nvar isBrowser = !isNode && !isWebWorker && !!(typeof window !== 'undefined' && window['HTMLElement']);\nfunction patchProperty(obj, prop) {\n    var desc = Object.getOwnPropertyDescriptor(obj, prop) || {\n        enumerable: true,\n        configurable: true\n    };\n    // A property descriptor cannot have getter/setter and be writable\n    // deleting the writable and value properties avoids this error:\n    //\n    // TypeError: property descriptors must not specify a value or be writable when a\n    // getter or setter has been specified\n    delete desc.writable;\n    delete desc.value;\n    // substr(2) cuz 'onclick' -> 'click', etc\n    var eventName = prop.substr(2);\n    var _prop = '_' + prop;\n    desc.set = function (fn) {\n        if (this[_prop]) {\n            this.removeEventListener(eventName, this[_prop]);\n        }\n        if (typeof fn === 'function') {\n            var wrapFn = function (event) {\n                var result;\n                result = fn.apply(this, arguments);\n                if (result != undefined && !result)\n                    event.preventDefault();\n            };\n            this[_prop] = wrapFn;\n            this.addEventListener(eventName, wrapFn, false);\n        }\n        else {\n            this[_prop] = null;\n        }\n    };\n    // The getter would return undefined for unassigned properties but the default value of an unassigned property is null\n    desc.get = function () {\n        return this[_prop] || null;\n    };\n    Object.defineProperty(obj, prop, desc);\n}\n\nfunction patchOnProperties(obj, properties) {\n    var onProperties = [];\n    for (var prop in obj) {\n        if (prop.substr(0, 2) == 'on') {\n            onProperties.push(prop);\n        }\n    }\n    for (var j = 0; j < onProperties.length; j++) {\n        patchProperty(obj, onProperties[j]);\n    }\n    if (properties) {\n        for (var i = 0; i < properties.length; i++) {\n            patchProperty(obj, 'on' + properties[i]);\n        }\n    }\n}\n\nvar EVENT_TASKS = zoneSymbol('eventTasks');\n// For EventTarget\nvar ADD_EVENT_LISTENER = 'addEventListener';\nvar REMOVE_EVENT_LISTENER = 'removeEventListener';\nfunction findExistingRegisteredTask(target, handler, name, capture, remove) {\n    var eventTasks = target[EVENT_TASKS];\n    if (eventTasks) {\n        for (var i = 0; i < eventTasks.length; i++) {\n            var eventTask = eventTasks[i];\n            var data = eventTask.data;\n            if (data.handler === handler\n                && data.useCapturing === capture\n                && data.eventName === name) {\n                if (remove) {\n                    eventTasks.splice(i, 1);\n                }\n                return eventTask;\n            }\n        }\n    }\n    return null;\n}\nfunction attachRegisteredEvent(target, eventTask) {\n    var eventTasks = target[EVENT_TASKS];\n    if (!eventTasks) {\n        eventTasks = target[EVENT_TASKS] = [];\n    }\n    eventTasks.push(eventTask);\n}\nfunction makeZoneAwareAddListener(addFnName, removeFnName, useCapturingParam, allowDuplicates) {\n    if (useCapturingParam === void 0) { useCapturingParam = true; }\n    if (allowDuplicates === void 0) { allowDuplicates = false; }\n    var addFnSymbol = zoneSymbol(addFnName);\n    var removeFnSymbol = zoneSymbol(removeFnName);\n    var defaultUseCapturing = useCapturingParam ? false : undefined;\n    function scheduleEventListener(eventTask) {\n        var meta = eventTask.data;\n        attachRegisteredEvent(meta.target, eventTask);\n        return meta.target[addFnSymbol](meta.eventName, eventTask.invoke, meta.useCapturing);\n    }\n    function cancelEventListener(eventTask) {\n        var meta = eventTask.data;\n        findExistingRegisteredTask(meta.target, eventTask.invoke, meta.eventName, meta.useCapturing, true);\n        meta.target[removeFnSymbol](meta.eventName, eventTask.invoke, meta.useCapturing);\n    }\n    return function zoneAwareAddListener(self, args) {\n        var eventName = args[0];\n        var handler = args[1];\n        var useCapturing = args[2] || defaultUseCapturing;\n        // - Inside a Web Worker, `this` is undefined, the context is `global`\n        // - When `addEventListener` is called on the global context in strict mode, `this` is undefined\n        // see https://github.com/angular/zone.js/issues/190\n        var target = self || _global$1;\n        var delegate = null;\n        if (typeof handler == 'function') {\n            delegate = handler;\n        }\n        else if (handler && handler.handleEvent) {\n            delegate = function (event) { return handler.handleEvent(event); };\n        }\n        var validZoneHandler = false;\n        try {\n            // In cross site contexts (such as WebDriver frameworks like Selenium),\n            // accessing the handler object here will cause an exception to be thrown which\n            // will fail tests prematurely.\n            validZoneHandler = handler && handler.toString() === \""[object FunctionWrapper]\"";\n        }\n        catch (e) {\n            // Returning nothing here is fine, because objects in a cross-site context are unusable\n            return;\n        }\n        // Ignore special listeners of IE11 & Edge dev tools, see https://github.com/angular/zone.js/issues/150\n        if (!delegate || validZoneHandler) {\n            return target[addFnSymbol](eventName, handler, useCapturing);\n        }\n        if (!allowDuplicates) {\n            var eventTask = findExistingRegisteredTask(target, handler, eventName, useCapturing, false);\n            if (eventTask) {\n                // we already registered, so this will have noop.\n                return target[addFnSymbol](eventName, eventTask.invoke, useCapturing);\n            }\n        }\n        var zone = Zone.current;\n        var source = target.constructor['name'] + '.' + addFnName + ':' + eventName;\n        var data = {\n            target: target,\n            eventName: eventName,\n            name: eventName,\n            useCapturing: useCapturing,\n            handler: handler\n        };\n        zone.scheduleEventTask(source, delegate, data, scheduleEventListener, cancelEventListener);\n    };\n}\nfunction makeZoneAwareRemoveListener(fnName, useCapturingParam) {\n    if (useCapturingParam === void 0) { useCapturingParam = true; }\n    var symbol = zoneSymbol(fnName);\n    var defaultUseCapturing = useCapturingParam ? false : undefined;\n    return function zoneAwareRemoveListener(self, args) {\n        var eventName = args[0];\n        var handler = args[1];\n        var useCapturing = args[2] || defaultUseCapturing;\n        // - Inside a Web Worker, `this` is undefined, the context is `global`\n        // - When `addEventListener` is called on the global context in strict mode, `this` is undefined\n        // see https://github.com/angular/zone.js/issues/190\n        var target = self || _global$1;\n        var eventTask = findExistingRegisteredTask(target, handler, eventName, useCapturing, true);\n        if (eventTask) {\n            eventTask.zone.cancelTask(eventTask);\n        }\n        else {\n            target[symbol](eventName, handler, useCapturing);\n        }\n    };\n}\n\nvar zoneAwareAddEventListener = makeZoneAwareAddListener(ADD_EVENT_LISTENER, REMOVE_EVENT_LISTENER);\nvar zoneAwareRemoveEventListener = makeZoneAwareRemoveListener(REMOVE_EVENT_LISTENER);\nfunction patchEventTargetMethods(obj) {\n    if (obj && obj.addEventListener) {\n        patchMethod(obj, ADD_EVENT_LISTENER, function () { return zoneAwareAddEventListener; });\n        patchMethod(obj, REMOVE_EVENT_LISTENER, function () { return zoneAwareRemoveEventListener; });\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nvar originalInstanceKey = zoneSymbol('originalInstance');\n// wrap some native API on `window`\nfunction patchClass(className) {\n    var OriginalClass = _global$1[className];\n    if (!OriginalClass)\n        return;\n    _global$1[className] = function () {\n        var a = bindArguments(arguments, className);\n        switch (a.length) {\n            case 0:\n                this[originalInstanceKey] = new OriginalClass();\n                break;\n            case 1:\n                this[originalInstanceKey] = new OriginalClass(a[0]);\n                break;\n            case 2:\n                this[originalInstanceKey] = new OriginalClass(a[0], a[1]);\n                break;\n            case 3:\n                this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);\n                break;\n            case 4:\n                this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);\n                break;\n            default: throw new Error('Arg list too long.');\n        }\n    };\n    var instance = new OriginalClass(function () { });\n    var prop;\n    for (prop in instance) {\n        // https://bugs.webkit.org/show_bug.cgi?id=44721\n        if (className === 'XMLHttpRequest' && prop === 'responseBlob')\n            continue;\n        (function (prop) {\n            if (typeof instance[prop] === 'function') {\n                _global$1[className].prototype[prop] = function () {\n                    return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n                };\n            }\n            else {\n                Object.defineProperty(_global$1[className].prototype, prop, {\n                    set: function (fn) {\n                        if (typeof fn === 'function') {\n                            this[originalInstanceKey][prop] = Zone.current.wrap(fn, className + '.' + prop);\n                        }\n                        else {\n                            this[originalInstanceKey][prop] = fn;\n                        }\n                    },\n                    get: function () {\n                        return this[originalInstanceKey][prop];\n                    }\n                });\n            }\n        }(prop));\n    }\n    for (prop in OriginalClass) {\n        if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n            _global$1[className][prop] = OriginalClass[prop];\n        }\n    }\n}\n\nfunction createNamedFn(name, delegate) {\n    try {\n        return (Function('f', \""return function \"" + name + \""(){return f(this, arguments)}\""))(delegate);\n    }\n    catch (e) {\n        // if we fail, we must be CSP, just return delegate.\n        return function () {\n            return delegate(this, arguments);\n        };\n    }\n}\nfunction patchMethod(target, name, patchFn) {\n    var proto = target;\n    while (proto && !proto.hasOwnProperty(name)) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    if (!proto && target[name]) {\n        // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n        proto = target;\n    }\n    var delegateName = zoneSymbol(name);\n    var delegate;\n    if (proto && !(delegate = proto[delegateName])) {\n        delegate = proto[delegateName] = proto[name];\n        proto[name] = createNamedFn(name, patchFn(delegate, delegateName, name));\n    }\n    return delegate;\n}\n\nvar WTF_ISSUE_555 = 'Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video';\nvar NO_EVENT_TARGET = 'ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex'.split(',');\nvar EVENT_TARGET = 'EventTarget';\nfunction eventTargetPatch(_global) {\n    var apis = [];\n    var isWtf = _global['wtf'];\n    if (isWtf) {\n        // Workaround for: https://github.com/google/tracing-framework/issues/555\n        apis = WTF_ISSUE_555.split(',').map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET);\n    }\n    else if (_global[EVENT_TARGET]) {\n        apis.push(EVENT_TARGET);\n    }\n    else {\n        // Note: EventTarget is not available in all browsers,\n        // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget\n        apis = NO_EVENT_TARGET;\n    }\n    for (var i = 0; i < apis.length; i++) {\n        var type = _global[apis[i]];\n        patchEventTargetMethods(type && type.prototype);\n    }\n}\n\n/*\n * This is necessary for Chrome and Chrome mobile, to enable\n * things like redefining `createdCallback` on an element.\n */\nvar _defineProperty = Object[zoneSymbol('defineProperty')] = Object.defineProperty;\nvar _getOwnPropertyDescriptor = Object[zoneSymbol('getOwnPropertyDescriptor')] = Object.getOwnPropertyDescriptor;\nvar _create = Object.create;\nvar unconfigurablesKey = zoneSymbol('unconfigurables');\nfunction propertyPatch() {\n    Object.defineProperty = function (obj, prop, desc) {\n        if (isUnconfigurable(obj, prop)) {\n            throw new TypeError('Cannot assign to read only property \\'' + prop + '\\' of ' + obj);\n        }\n        var originalConfigurableFlag = desc.configurable;\n        if (prop !== 'prototype') {\n            desc = rewriteDescriptor(obj, prop, desc);\n        }\n        return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n    };\n    Object.defineProperties = function (obj, props) {\n        Object.keys(props).forEach(function (prop) {\n            Object.defineProperty(obj, prop, props[prop]);\n        });\n        return obj;\n    };\n    Object.create = function (obj, proto) {\n        if (typeof proto === 'object' && !Object.isFrozen(proto)) {\n            Object.keys(proto).forEach(function (prop) {\n                proto[prop] = rewriteDescriptor(obj, prop, proto[prop]);\n            });\n        }\n        return _create(obj, proto);\n    };\n    Object.getOwnPropertyDescriptor = function (obj, prop) {\n        var desc = _getOwnPropertyDescriptor(obj, prop);\n        if (isUnconfigurable(obj, prop)) {\n            desc.configurable = false;\n        }\n        return desc;\n    };\n}\n\nfunction _redefineProperty(obj, prop, desc) {\n    var originalConfigurableFlag = desc.configurable;\n    desc = rewriteDescriptor(obj, prop, desc);\n    return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n}\n\nfunction isUnconfigurable(obj, prop) {\n    return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];\n}\nfunction rewriteDescriptor(obj, prop, desc) {\n    desc.configurable = true;\n    if (!desc.configurable) {\n        if (!obj[unconfigurablesKey]) {\n            _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });\n        }\n        obj[unconfigurablesKey][prop] = true;\n    }\n    return desc;\n}\nfunction _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) {\n    try {\n        return _defineProperty(obj, prop, desc);\n    }\n    catch (e) {\n        if (desc.configurable) {\n            // In case of errors, when the configurable flag was likely set by rewriteDescriptor(), let's retry with the original flag value\n            if (typeof originalConfigurableFlag == 'undefined') {\n                delete desc.configurable;\n            }\n            else {\n                desc.configurable = originalConfigurableFlag;\n            }\n            try {\n                return _defineProperty(obj, prop, desc);\n            }\n            catch (e) {\n                var descJson = null;\n                try {\n                    descJson = JSON.stringify(desc);\n                }\n                catch (e) {\n                    descJson = descJson.toString();\n                }\n                console.log(\""Attempting to configure '\"" + prop + \""' with descriptor '\"" + descJson + \""' on object '\"" + obj + \""' and got error, giving up: \"" + e);\n            }\n        }\n        else {\n            throw e;\n        }\n    }\n}\n\nfunction registerElementPatch(_global) {\n    if (!isBrowser || !('registerElement' in _global.document)) {\n        return;\n    }\n    var _registerElement = document.registerElement;\n    var callbacks = [\n        'createdCallback',\n        'attachedCallback',\n        'detachedCallback',\n        'attributeChangedCallback'\n    ];\n    document.registerElement = function (name, opts) {\n        if (opts && opts.prototype) {\n            callbacks.forEach(function (callback) {\n                var source = 'Document.registerElement::' + callback;\n                if (opts.prototype.hasOwnProperty(callback)) {\n                    var descriptor = Object.getOwnPropertyDescriptor(opts.prototype, callback);\n                    if (descriptor && descriptor.value) {\n                        descriptor.value = Zone.current.wrap(descriptor.value, source);\n                        _redefineProperty(opts.prototype, callback, descriptor);\n                    }\n                    else {\n                        opts.prototype[callback] = Zone.current.wrap(opts.prototype[callback], source);\n                    }\n                }\n                else if (opts.prototype[callback]) {\n                    opts.prototype[callback] = Zone.current.wrap(opts.prototype[callback], source);\n                }\n            });\n        }\n        return _registerElement.apply(document, [name, opts]);\n    };\n}\n\n// we have to patch the instance since the proto is non-configurable\nfunction apply(_global) {\n    var WS = _global.WebSocket;\n    // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener\n    // On older Chrome, no need since EventTarget was already patched\n    if (!_global.EventTarget) {\n        patchEventTargetMethods(WS.prototype);\n    }\n    _global.WebSocket = function (a, b) {\n        var socket = arguments.length > 1 ? new WS(a, b) : new WS(a);\n        var proxySocket;\n        // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance\n        var onmessageDesc = Object.getOwnPropertyDescriptor(socket, 'onmessage');\n        if (onmessageDesc && onmessageDesc.configurable === false) {\n            proxySocket = Object.create(socket);\n            ['addEventListener', 'removeEventListener', 'send', 'close'].forEach(function (propName) {\n                proxySocket[propName] = function () {\n                    return socket[propName].apply(socket, arguments);\n                };\n            });\n        }\n        else {\n            // we can patch the real socket\n            proxySocket = socket;\n        }\n        patchOnProperties(proxySocket, ['close', 'error', 'message', 'open']);\n        return proxySocket;\n    };\n    for (var prop in WS) {\n        _global.WebSocket[prop] = WS[prop];\n    }\n}\n\nvar eventNames = 'copy cut paste abort blur focus canplay canplaythrough change click contextmenu dblclick drag dragend dragenter dragleave dragover dragstart drop durationchange emptied ended input invalid keydown keypress keyup load loadeddata loadedmetadata loadstart message mousedown mouseenter mouseleave mousemove mouseout mouseover mouseup pause play playing progress ratechange reset scroll seeked seeking select show stalled submit suspend timeupdate volumechange waiting mozfullscreenchange mozfullscreenerror mozpointerlockchange mozpointerlockerror error webglcontextrestored webglcontextlost webglcontextcreationerror'.split(' ');\nfunction propertyDescriptorPatch(_global) {\n    if (isNode) {\n        return;\n    }\n    var supportsWebSocket = typeof WebSocket !== 'undefined';\n    if (canPatchViaPropertyDescriptor()) {\n        // for browsers that we can patch the descriptor:  Chrome & Firefox\n        if (isBrowser) {\n            patchOnProperties(HTMLElement.prototype, eventNames);\n        }\n        patchOnProperties(XMLHttpRequest.prototype, null);\n        if (typeof IDBIndex !== 'undefined') {\n            patchOnProperties(IDBIndex.prototype, null);\n            patchOnProperties(IDBRequest.prototype, null);\n            patchOnProperties(IDBOpenDBRequest.prototype, null);\n            patchOnProperties(IDBDatabase.prototype, null);\n            patchOnProperties(IDBTransaction.prototype, null);\n            patchOnProperties(IDBCursor.prototype, null);\n        }\n        if (supportsWebSocket) {\n            patchOnProperties(WebSocket.prototype, null);\n        }\n    }\n    else {\n        // Safari, Android browsers (Jelly Bean)\n        patchViaCapturingAllTheEvents();\n        patchClass('XMLHttpRequest');\n        if (supportsWebSocket) {\n            apply(_global);\n        }\n    }\n}\nfunction canPatchViaPropertyDescriptor() {\n    if (isBrowser && !Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'onclick')\n        && typeof Element !== 'undefined') {\n        // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364\n        // IDL interface attributes are not configurable\n        var desc = Object.getOwnPropertyDescriptor(Element.prototype, 'onclick');\n        if (desc && !desc.configurable)\n            return false;\n    }\n    Object.defineProperty(XMLHttpRequest.prototype, 'onreadystatechange', {\n        get: function () {\n            return true;\n        }\n    });\n    var req = new XMLHttpRequest();\n    var result = !!req.onreadystatechange;\n    Object.defineProperty(XMLHttpRequest.prototype, 'onreadystatechange', {});\n    return result;\n}\n\nvar unboundKey = zoneSymbol('unbound');\n// Whenever any eventListener fires, we check the eventListener target and all parents\n// for `onwhatever` properties and replace them with zone-bound functions\n// - Chrome (for now)\nfunction patchViaCapturingAllTheEvents() {\n    var _loop_1 = function(i) {\n        var property = eventNames[i];\n        var onproperty = 'on' + property;\n        document.addEventListener(property, function (event) {\n            var elt = event.target, bound, source;\n            if (elt) {\n                source = elt.constructor['name'] + '.' + onproperty;\n            }\n            else {\n                source = 'unknown.' + onproperty;\n            }\n            while (elt) {\n                if (elt[onproperty] && !elt[onproperty][unboundKey]) {\n                    bound = Zone.current.wrap(elt[onproperty], source);\n                    bound[unboundKey] = elt[onproperty];\n                    elt[onproperty] = bound;\n                }\n                elt = elt.parentElement;\n            }\n        }, true);\n    };\n    for (var i = 0; i < eventNames.length; i++) {\n        _loop_1(i);\n    }\n    \n}\n\nfunction patchTimer(window, setName, cancelName, nameSuffix) {\n    var setNative = null;\n    var clearNative = null;\n    setName += nameSuffix;\n    cancelName += nameSuffix;\n    function scheduleTask(task) {\n        var data = task.data;\n        data.args[0] = task.invoke;\n        data.handleId = setNative.apply(window, data.args);\n        return task;\n    }\n    function clearTask(task) {\n        return clearNative(task.data.handleId);\n    }\n    setNative = patchMethod(window, setName, function (delegate) { return function (self, args) {\n        if (typeof args[0] === 'function') {\n            var zone = Zone.current;\n            var options = {\n                handleId: null,\n                isPeriodic: nameSuffix === 'Interval',\n                delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 : null,\n                args: args\n            };\n            var task = zone.scheduleMacroTask(setName, args[0], options, scheduleTask, clearTask);\n            if (!task) {\n                return task;\n            }\n            // Node.js must additionally support the ref and unref functions.\n            var handle = task.data.handleId;\n            if (handle.ref && handle.unref) {\n                task.ref = handle.ref.bind(handle);\n                task.unref = handle.unref.bind(handle);\n            }\n            return task;\n        }\n        else {\n            // cause an error by calling it directly.\n            return delegate.apply(window, args);\n        }\n    }; });\n    clearNative = patchMethod(window, cancelName, function (delegate) { return function (self, args) {\n        var task = args[0];\n        if (task && typeof task.type === 'string') {\n            if (task.cancelFn && task.data.isPeriodic || task.runCount === 0) {\n                // Do not cancel already canceled functions\n                task.zone.cancelTask(task);\n            }\n        }\n        else {\n            // cause an error by calling it directly.\n            delegate.apply(window, args);\n        }\n    }; });\n}\n\nvar set = 'set';\nvar clear = 'clear';\nvar blockingMethods = ['alert', 'prompt', 'confirm'];\nvar _global = typeof window === 'object' && window || typeof self === 'object' && self || global;\npatchTimer(_global, set, clear, 'Timeout');\npatchTimer(_global, set, clear, 'Interval');\npatchTimer(_global, set, clear, 'Immediate');\npatchTimer(_global, 'request', 'cancel', 'AnimationFrame');\npatchTimer(_global, 'mozRequest', 'mozCancel', 'AnimationFrame');\npatchTimer(_global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');\nfor (var i = 0; i < blockingMethods.length; i++) {\n    var name = blockingMethods[i];\n    patchMethod(_global, name, function (delegate, symbol, name) {\n        return function (s, args) {\n            return Zone.current.run(delegate, _global, args, name);\n        };\n    });\n}\neventTargetPatch(_global);\npropertyDescriptorPatch(_global);\npatchClass('MutationObserver');\npatchClass('WebKitMutationObserver');\npatchClass('FileReader');\npropertyPatch();\nregisterElementPatch(_global);\n// Treat XMLHTTPRequest as a macrotask.\npatchXHR(_global);\nvar XHR_TASK = zoneSymbol('xhrTask');\nvar XHR_SYNC = zoneSymbol('xhrSync');\nfunction patchXHR(window) {\n    function findPendingTask(target) {\n        var pendingTask = target[XHR_TASK];\n        return pendingTask;\n    }\n    function scheduleTask(task) {\n        var data = task.data;\n        data.target.addEventListener('readystatechange', function () {\n            if (data.target.readyState === data.target.DONE) {\n                if (!data.aborted) {\n                    task.invoke();\n                }\n            }\n        });\n        var storedTask = data.target[XHR_TASK];\n        if (!storedTask) {\n            data.target[XHR_TASK] = task;\n        }\n        sendNative.apply(data.target, data.args);\n        return task;\n    }\n    function placeholderCallback() {\n    }\n    function clearTask(task) {\n        var data = task.data;\n        // Note - ideally, we would call data.target.removeEventListener here, but it's too late\n        // to prevent it from firing. So instead, we store info for the event listener.\n        data.aborted = true;\n        return abortNative.apply(data.target, data.args);\n    }\n    var openNative = patchMethod(window.XMLHttpRequest.prototype, 'open', function () { return function (self, args) {\n        self[XHR_SYNC] = args[2] == false;\n        return openNative.apply(self, args);\n    }; });\n    var sendNative = patchMethod(window.XMLHttpRequest.prototype, 'send', function () { return function (self, args) {\n        var zone = Zone.current;\n        if (self[XHR_SYNC]) {\n            // if the XHR is sync there is no task to schedule, just execute the code.\n            return sendNative.apply(self, args);\n        }\n        else {\n            var options = {\n                target: self,\n                isPeriodic: false,\n                delay: null,\n                args: args,\n                aborted: false\n            };\n            return zone.scheduleMacroTask('XMLHttpRequest.send', placeholderCallback, options, scheduleTask, clearTask);\n        }\n    }; });\n    var abortNative = patchMethod(window.XMLHttpRequest.prototype, 'abort', function (delegate) { return function (self, args) {\n        var task = findPendingTask(self);\n        if (task && typeof task.type == 'string') {\n            // If the XHR has already completed, do nothing.\n            if (task.cancelFn == null) {\n                return;\n            }\n            task.zone.cancelTask(task);\n        }\n        // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no task to cancel. Do nothing.\n    }; });\n}\n/// GEO_LOCATION\nif (_global['navigator'] && _global['navigator'].geolocation) {\n    patchPrototype(_global['navigator'].geolocation, [\n        'getCurrentPosition',\n        'watchPosition'\n    ]);\n}\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/zone.js/dist/zone.js\n ** module id = 338\n ** module chunks = 0\n **/""],""mappings"":"";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5FA;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1CA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;;;;;;ACHA;AACA;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9dA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;;;;;;ACAA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxBA;;;;;;ACAA;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtBA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxBA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;;;;;;ACAA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnBA;AACA;;;;;;ACDA;AACA;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1BA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACdA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtBA;;;;;;ACAA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACbA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACVA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpEA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjBA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;;;;;;ACFA;AACA;AACA;;;;;;ACFA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACVA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7CA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"",""sourceRoot"":""""}"
e8b5eb9cb60e2f3a33ca4a86a17f6fbf11ad10ae,11268943,	// Handle Ctl+C from http://stackoverflow.com/questions/11268943/golang-is-it-possible-to-capture-a-ctrlc-signal-and-run-a-cleanup-function-in
3ba1161638f222a249195a90d583ab7b2f277e4e,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
fd150c50a5a82f0cdb87df3dfebc6f86df0ebda8,5871730,Project contains source code that was made originally for the [Django file upload example at StackOverflow](http://stackoverflow.com/questions/5871730/need-a-minimal-django-file-upload-example).
1e05ed5f6cb4115d50263c52a5a85c02adc0794e,11642877,		 * 】 http://stackoverflow.com/questions/11642877/how-to-recognize-
f951053cc77519f6e44a38c6f24ddda0a74f8832,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
ad5b9f993fd73fa3a609ef64bf4bb959a5f90f6b,43044,      // based on awesome response : http://stackoverflow.com/questions/43044/algorithm-to-randomly-generate-an-aesthetically-pleasing-color-palette
969a1484c0931dd7f01b6ea96e4a230f76a6ae10,1544317,		// and it may also be safer for IE (see http://stackoverflow.com/questions/1544317/change-type-of-input-field-with-jquery
a6d327169bceab54b078ea4313a90195be9c2dfb,2387724,"3853453,comment,3852731,3852731,2,0,olalonde,,,""> thats beneficial to the scaling architectures of both Node.js<p>That's not very accurate (unless you run multiple Node.js processes). See <a href=""""http://stackoverflow.com/questions/2387724/node-js-on-multi-core-machines"""" rel=""""nofollow"""">http://stackoverflow.com/questions/2387724/node-js-on-multi-...</a>"",1334680774"
0658d7743e0e3900abed491d383034cd449c6f03,17907445,        // http://stackoverflow.com/questions/17907445/how-to-detect-ie11#comment30165888_17907562
038a12002caad21b472e5720afcc923525bb8b54,26949021,	## and http://stackoverflow.com/a/26949021/4900327
a777ceb719885cc2bc4ea8b30778ddc5961fb9d7,625433,     * http://stackoverflow.com/questions/625433/how-to-convert-milliseconds-to-x-mins-x-seconds-in-java
62a07f8e67d3a2c3c92df5d8b3e8dd0d46b13bac,2411487, * http://stackoverflow.com/questions/2411487/nullpointerexception-in-java-with-no-stacktrace
c619b5bb45dbbaa2538812846c27f4cfd2305f58,105034,// code based on: http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
0190e71c8f306c758995b6aa2c6563493bab6e24,209905,"6721725,story,,,1,0,shayanjm,""Representational state transfer (REST) vs Simple Object Access Protocol (SOAP)"",http://stackoverflow.com/questions/209905/representational-state-transfer-rest-and-simple-object-access-protocol-soap,,1384295038"
5226ff2cf21e813ed483201e1516f8ca2f6429c4,8308412,"</head><body><h2>Wie funktioniert FasterGPS?</h2><p>The following information is from <a href=""http://stackoverflow.com/questions/8308412/gps-how-ntp-time-injection-works"">Stackoverflow</a> (License: CC BY-SA 3.0):"
2e56cbfac8b1fee00c03de511ca6904e4bf6e3bf,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
c5ed625abd8115eaae0eaef923947ab7a1b5be2b,10119793,                    //Possibly related to http://stackoverflow.com/questions/10119793/why-does-firefox-react-differently-from-webkit-and-ie-to-click-event-on-selec
e645e46ddbd6e72282de161ced78ad6dae94bdaa,3232965,      //http://stackoverflow.com/questions/3232965/sort-multidimensional-array-by-multiple-keys
ef4be17c9101ce69d91231565b64a8c2b47244c8,32855671,"</a><a href=""http://stackoverflow.com/questions/32855671/xcode-update-impossible-to-debug?rq=1"" class=""question-hyperlink"">Xcode update - impossible to debug</a>"
55672c4f0cd9ba4e759b9b8c7f485562d1108a81,17527870,"6014998,story,,,1,0,mike,""How does Trello access the user's clipboard?"",http://stackoverflow.com/questions/17527870/how-does-trello-access-the-users-clipboard,,1373400053"
c59497f4c18b72b4d098dfd9b236cb3a3e975765,246128,# is invoked with the right options. Adapted from the bash script (http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in/246128#246128).
60abec1a378b28203aabc6b6c6823680a6ab0a5d,4868205,    # @see http://stackoverflow.com/questions/4868205/rails-mail-getting-the-body-as-plain-text
11e7036ae987cdf988715793186a49fa256fbcb1,7422072,// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
725a0d63a141c0f0b07f846b88b3a731e2c8cb65,3786201,// http://stackoverflow.com/questions/3786201/parsing-of-date-time-from-string-boost
fc878f94989f45c1a37811f4d480854b50af7161,52359686,* https://stackoverflow.com/questions/52359686/configure-gradle-for-kotlin-with-java-1-7
25b0ca94d5a5822fd7afcab99dc002c8edcbcdeb,9847580,// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
37e9b1b5024c5992bde4b556b81b73ac25d2b599,26603875,		// http://stackoverflow.com/a/26603875
3ad7503d2d6b21b2b794cf3d2ed9c5c9a26997f9,14922098,   * http://stackoverflow.com/questions/14922098/how-to-check-internet-access-is-enabled-in-android
14177c76e8604b2c9b95d3d756bd74b854b51b96,6664967,    // http://stackoverflow.com/questions/6664967/how-to-give-a-blob-uploaded-as-formdata-a-file-name
94dd7e8b7c6573adfec9b93f8980e5103c41e713,23930339,"     * @author <a href=""https://stackoverflow.com/a/23930339"">skiwi</a>"
a13e985abdf0cdc8e760e8b13ccbc13ef7448745,1087227,    http://stackoverflow.com/questions/1087227/validate-ssl-certificates-with-python
3ea143670fcdd6ca5d944ac12682b0eb5c8afc99,16822426,                # https://stackoverflow.com/questions/16822426/r-dealing-with-true-false-na-and-nan
3265a8d4ebf6ad31d3b9a0a9763d87c3dbad4505,32231579 12528049 23349191,"{""version"":3,""sources"":[""node_modules/custom-event-polyfill/polyfill.js"",""node_modules/url-polyfill/url-polyfill.js"",""node_modules/core-js/modules/_a-function.js"",""node_modules/core-js/modules/_ctx.js"",""node_modules/core-js/modules/_global.js"",""node_modules/core-js/modules/_core.js"",""node_modules/core-js/modules/_is-object.js"",""node_modules/core-js/modules/_an-object.js"",""node_modules/core-js/modules/_fails.js"",""node_modules/core-js/modules/_descriptors.js"",""node_modules/core-js/modules/_dom-create.js"",""node_modules/core-js/modules/_ie8-dom-define.js"",""node_modules/core-js/modules/_to-primitive.js"",""node_modules/core-js/modules/_object-dp.js"",""node_modules/core-js/modules/_property-desc.js"",""node_modules/core-js/modules/_hide.js"",""node_modules/core-js/modules/_has.js"",""node_modules/core-js/modules/_uid.js"",""node_modules/core-js/modules/_redefine.js"",""node_modules/core-js/modules/_export.js"",""node_modules/core-js/modules/_defined.js"",""node_modules/core-js/modules/_to-object.js"",""node_modules/core-js/modules/_iter-call.js"",""node_modules/core-js/modules/_iterators.js"",""node_modules/core-js/modules/_library.js"",""node_modules/core-js/modules/_shared.js"",""node_modules/core-js/modules/_wks.js"",""node_modules/core-js/modules/_is-array-iter.js"",""node_modules/core-js/modules/_to-integer.js"",""node_modules/core-js/modules/_to-length.js"",""node_modules/core-js/modules/_create-property.js"",""node_modules/core-js/modules/_cof.js"",""node_modules/core-js/modules/_classof.js"",""node_modules/core-js/modules/core.get-iterator-method.js"",""node_modules/core-js/modules/_iter-detect.js"",""node_modules/core-js/modules/es6.array.from.js"",""node_modules/core-js/modules/_iobject.js"",""node_modules/core-js/modules/_is-array.js"",""node_modules/core-js/modules/_array-species-constructor.js"",""node_modules/core-js/modules/_array-species-create.js"",""node_modules/core-js/modules/_array-methods.js"",""node_modules/core-js/modules/_add-to-unscopables.js"",""node_modules/core-js/modules/es6.array.find.js"",""node_modules/core-js/modules/_object-pie.js"",""node_modules/core-js/modules/_to-iobject.js"",""node_modules/core-js/modules/_object-gopd.js"",""node_modules/core-js/modules/_set-proto.js"",""node_modules/core-js/modules/_inherit-if-required.js"",""node_modules/core-js/modules/_to-absolute-index.js"",""node_modules/core-js/modules/_array-includes.js"",""node_modules/core-js/modules/_shared-key.js"",""node_modules/core-js/modules/_object-keys-internal.js"",""node_modules/core-js/modules/_enum-bug-keys.js"",""node_modules/core-js/modules/_object-gopn.js"",""node_modules/core-js/modules/_string-ws.js"",""node_modules/core-js/modules/_string-trim.js"",""node_modules/core-js/modules/_object-keys.js"",""node_modules/core-js/modules/_object-dps.js"",""node_modules/core-js/modules/_html.js"",""node_modules/core-js/modules/_object-create.js"",""node_modules/core-js/modules/es6.number.constructor.js"",""node_modules/core-js/modules/_object-sap.js"",""node_modules/core-js/modules/es6.object.keys.js"",""node_modules/core-js/modules/_is-regexp.js"",""node_modules/core-js/modules/_string-context.js"",""node_modules/core-js/modules/_fails-is-regexp.js"",""node_modules/core-js/modules/es6.string.includes.js"",""node_modules/core-js/modules/es7.array.includes.js"",""node_modules/core-js/modules/_same-value.js"",""node_modules/core-js/modules/_regexp-exec-abstract.js"",""node_modules/core-js/modules/_flags.js"",""node_modules/core-js/modules/_regexp-exec.js"",""node_modules/core-js/modules/es6.regexp.exec.js"",""node_modules/core-js/modules/_fix-re-wks.js"",""node_modules/core-js/modules/es6.regexp.search.js"",""node_modules/core-js/modules/es6.regexp.flags.js"",""node_modules/core-js/modules/es6.regexp.to-string.js"",""node_modules/core-js/modules/_iter-step.js"",""node_modules/core-js/modules/_set-to-string-tag.js"",""node_modules/core-js/modules/_iter-create.js"",""node_modules/core-js/modules/_object-gpo.js"",""node_modules/core-js/modules/_iter-define.js"",""node_modules/core-js/modules/es6.array.iterator.js"",""node_modules/core-js/modules/web.dom.iterable.js"",""node_modules/core-js/modules/_string-at.js"",""node_modules/core-js/modules/es6.string.iterator.js"",""node_modules/core-js/modules/_meta.js"",""node_modules/core-js/modules/_object-gops.js"",""node_modules/core-js/modules/_object-assign.js"",""node_modules/core-js/modules/_redefine-all.js"",""node_modules/core-js/modules/_an-instance.js"",""node_modules/core-js/modules/_for-of.js"",""node_modules/core-js/modules/_validate-collection.js"",""node_modules/core-js/modules/_collection-weak.js"",""node_modules/core-js/modules/_collection.js"",""node_modules/core-js/modules/es6.weak-map.js"",""node_modules/core-js/modules/_strict-method.js"",""node_modules/core-js/modules/es6.array.sort.js"",""node_modules/core-js/modules/es6.object.assign.js"",""node_modules/core-js/modules/_species-constructor.js"",""node_modules/core-js/modules/_advance-string-index.js"",""node_modules/core-js/modules/es6.regexp.split.js"",""node_modules/core-js/modules/_object-to-array.js"",""node_modules/core-js/modules/es7.object.entries.js"",""node_modules/core-js/modules/es7.object.values.js"",""node_modules/core-js/modules/es6.regexp.replace.js"",""node_modules/core-js/modules/_invoke.js"",""node_modules/core-js/modules/_task.js"",""node_modules/core-js/modules/_microtask.js"",""node_modules/core-js/modules/_new-promise-capability.js"",""node_modules/core-js/modules/_perform.js"",""node_modules/core-js/modules/_user-agent.js"",""node_modules/core-js/modules/_promise-resolve.js"",""node_modules/core-js/modules/_set-species.js"",""node_modules/core-js/modules/es6.promise.js"",""node_modules/core-js/modules/es6.string.starts-with.js"",""node_modules/core-js/modules/es6.number.is-nan.js"",""src/js/utils/is.js"",""src/js/utils/events.js"",""src/js/utils/elements.js"",""src/js/utils/animation.js"",""src/js/utils/browser.js"",""src/js/support.js"",""src/js/html5.js"",""src/js/utils/arrays.js"",""src/js/utils/objects.js"",""node_modules/core-js/modules/es6.regexp.constructor.js"",""src/js/utils/strings.js"",""src/js/utils/i18n.js"",""src/js/storage.js"",""src/js/utils/fetch.js"",""src/js/utils/loadSprite.js"",""src/js/utils/time.js"",""src/js/controls.js"",""src/js/utils/urls.js"",""src/js/captions.js"",""src/js/config/defaults.js"",""src/js/config/states.js"",""src/js/config/types.js"",""src/js/console.js"",""src/js/fullscreen.js"",""node_modules/core-js/modules/_math-sign.js"",""node_modules/core-js/modules/es6.math.sign.js"",""src/js/utils/loadImage.js"",""src/js/ui.js"",""src/js/listeners.js"",""node_modules/core-js/modules/es6.function.name.js"",""node_modules/core-js/modules/es6.regexp.match.js"",""node_modules/loadjs/dist/loadjs.umd.js"",""src/js/utils/loadScript.js"",""src/js/plugins/vimeo.js"",""src/js/plugins/youtube.js"",""src/js/media.js"",""src/js/plugins/ads.js"",""src/js/source.js"",""src/js/plyr.js"",""src/js/plyr.polyfilled.js""],""names"":[""global"",""this"",""aFunction"",""isObject"",""require$$0"",""document"",""require$$1"",""require$$2"",""anObject"",""toPrimitive"",""IE8_DOM_DEFINE"",""dP"",""createDesc"",""has"",""hide"",""core"",""ctx"",""redefine"",""defined"",""uid"",""Iterators"",""toInteger"",""$defineProperty"",""cof"",""ITERATOR"",""classof"",""$export"",""toObject"",""getIterFn"",""isArrayIter"",""createProperty"",""call"",""toLength"",""isArray"",""speciesConstructor"",""asc"",""IObject"",""ArrayProto"",""toIObject"",""pIE"",""min"",""toAbsoluteIndex"",""$keys"",""spaces"",""fails"",""enumBugKeys"",""getKeys"",""IE_PROTO"",""PROTOTYPE"",""dPs"",""gOPD"",""require$$3"",""require$$4"",""inheritIfRequired"",""require$$5"",""require$$6"",""isRegExp"",""MATCH"",""context"",""regexpFlags"",""regexpExec"",""SPECIES"",""wks"",""sameValue"",""regExpExec"",""DESCRIPTORS"",""$flags"",""TAG"",""create"",""descriptor"",""setToStringTag"",""$iterCreate"",""getPrototypeOf"",""LIBRARY"",""step"",""addToUnscopables"",""proto"",""key"",""$iterators"",""gOPS"",""createArrayMethod"",""id"",""anInstance"",""forOf"",""redefineAll"",""validate"",""$has"",""meta"",""$iterDetect"",""weak"",""assign"",""LAST_INDEX"",""callRegExpExec"",""advanceStringIndex"",""max"",""floor"",""invoke"",""cel"",""html"",""process"",""Promise"",""navigator"",""newPromiseCapability"",""TypeError"",""isNode"",""newPromiseCapabilityModule"",""userAgent"",""perform"",""promiseResolve"",""require$$7"",""getConstructor"",""input"",""constructor"",""instanceOf"",""Boolean"",""isNullOrUndefined"",""Object"",""isNumber"",""Number"",""isNaN"",""isString"",""String"",""isBoolean"",""isFunction"",""Function"",""Array"",""isWeakMap"",""WeakMap"",""isNodeList"",""NodeList"",""isElement"",""Element"",""isTextNode"",""Text"",""isEvent"",""Event"",""isKeyboardEvent"",""KeyboardEvent"",""isCue"",""window"",""TextTrackCue"",""VTTCue"",""isTrack"",""TextTrack"",""kind"",""isEmpty"",""length"",""keys"",""isUrl"",""URL"",""string"",""startsWith"",""hostname"",""e"",""nullOrUndefined"",""object"",""number"",""boolean"",""function"",""array"",""weakMap"",""nodeList"",""element"",""textNode"",""event"",""keyboardEvent"",""cue"",""track"",""url"",""empty"",""supportsPassiveListeners"",""supported"",""options"",""defineProperty"",""get"",""addEventListener"",""removeEventListener"",""toggleListener"",""callback"",""toggle"",""passive"",""capture"",""is"",""events"",""split"",""forEach"",""type"",""eventListeners"",""push"",""on"",""off"",""once"",""onceCallback"",""args"",""apply"",""triggerEvent"",""bubbles"",""detail"",""CustomEvent"",""plyr"",""dispatchEvent"",""unbindListeners"",""item"",""ready"",""resolve"",""setTimeout"",""elements"",""container"",""then"",""wrap"",""wrapper"",""targets"",""from"",""reverse"",""index"",""child"",""cloneNode"",""parent"",""parentNode"",""sibling"",""nextSibling"",""appendChild"",""insertBefore"",""setAttributes"",""attributes"",""entries"",""filter"",""value"",""setAttribute"",""createElement"",""text"",""innerText"",""insertAfter"",""target"",""insertElement"",""removeElement"",""removeChild"",""emptyElement"",""childNodes"",""lastChild"",""replaceElement"",""newChild"",""oldChild"",""replaceChild"",""getAttributesFromSelector"",""sel"",""existingAttributes"",""existing"",""s"",""selector"",""trim"",""className"",""replace"",""stripped"",""parts"",""start"",""charAt"",""class"",""toggleHidden"",""hidden"",""removeAttribute"",""toggleClass"",""force"",""map"",""method"",""classList"",""contains"",""hasClass"",""matches"",""match"",""querySelectorAll"",""includes"",""prototype"",""getElements"",""getElement"",""querySelector"",""trapFocus"",""focusable"",""first"",""last"",""trap"",""keyCode"",""focused"",""activeElement"",""shiftKey"",""focus"",""preventDefault"",""setFocus"",""tabFocus"",""preventScroll"",""config"",""classNames"",""transitionEndEvent"",""WebkitTransition"",""MozTransition"",""OTransition"",""transition"",""find"",""style"",""undefined"",""repaint"",""offsetHeight"",""browser"",""isIE"",""documentMode"",""isWebkit"",""documentElement"",""test"",""isIPhone"",""platform"",""isIos"",""defaultCodecs"",""support"",""audio"",""video"",""check"",""provider"",""playsinline"",""canPlayInline"",""api"",""ui"",""rangeInput"",""pip"",""webkitSetPresentationMode"",""pictureInPictureEnabled"",""disablePictureInPicture"",""airplay"",""WebKitPlaybackTargetAvailabilityEvent"",""mime"",""inputType"",""mediaType"",""isHTML5"",""media"",""canPlayType"",""textTracks"",""range"",""touch"",""transitions"",""reducedMotion"",""matchMedia"",""html5"",""getSources"",""sources"",""source"",""getAttribute"",""getQualityOptions"",""extend"",""player"",""set"",""currentTime"",""paused"",""preload"",""readyState"",""src"",""play"",""load"",""quality"",""cancelRequests"",""blankVideo"",""debug"",""log"",""dedupe"",""indexOf"",""closest"",""reduce"",""prev"",""curr"",""Math"",""abs"",""cloneDeep"",""JSON"",""parse"",""stringify"",""getDeep"",""path"",""obj"",""shift"",""gOPN"",""Base"",""i"",""generateId"",""prefix"",""random"",""format"",""toString"",""getPercentage"",""current"",""toFixed"",""replaceAll"",""RegExp"",""toTitleCase"",""toUpperCase"",""substr"",""toLowerCase"",""toPascalCase"",""toCamelCase"",""slice"",""stripHTML"",""fragment"",""createDocumentFragment"",""innerHTML"",""firstChild"",""getHTML"",""resources"",""vimeo"",""youtube"",""i18n"",""seekTime"",""title"",""Storage"",""enabled"",""storage"",""store"",""localStorage"",""getItem"",""json"",""setItem"",""removeItem"",""fetch"",""responseType"",""reject"",""request"",""XMLHttpRequest"",""responseText"",""response"",""Error"",""status"",""open"",""send"",""loadSprite"",""hasId"",""isCached"",""exists"",""getElementById"",""update"",""data"",""body"",""insertAdjacentElement"",""useStorage"",""cached"",""content"",""result"",""catch"",""getHours"",""parseInt"",""getMinutes"",""getSeconds"",""formatTime"",""time"",""displayHours"",""inverted"",""hours"",""mins"",""secs"",""controls"",""getIconUrl"",""iconUrl"",""location"",""cors"",""host"",""svg4everybody"",""findElements"",""selectors"",""buttons"",""pause"",""restart"",""rewind"",""fastForward"",""mute"",""settings"",""captions"",""fullscreen"",""progress"",""inputs"",""seek"",""volume"",""display"",""buffer"",""duration"",""seekTooltip"",""tooltip"",""error"",""warn"",""toggleNativeControls"",""createIcon"",""namespace"",""iconPath"",""iconPrefix"",""icon"",""createElementNS"",""role"",""use"",""setAttributeNS"",""createLabel"",""attr"",""join"",""createBadge"",""badge"",""menu"",""createButton"",""buttonType"",""props"",""label"",""labelPressed"",""iconPressed"",""control"",""button"",""createRange"",""autocomplete"",""updateRangeFill"",""createProgress"",""suffixKey"",""played"",""suffix"",""createTime"",""bindMenuItemShortcuts"",""menuItem"",""which"",""stopPropagation"",""isRadioButton"",""showMenuPanel"",""nextElementSibling"",""firstElementChild"",""previousElementSibling"",""lastElementChild"",""focusFirstMenuItem"",""createMenuItem"",""list"",""checked"",""flex"",""enumerable"",""children"",""node"",""listeners"",""bind"",""currentTrack"",""speed"",""parseFloat"",""forceHours"",""updateTimeDisplay"",""updateVolume"",""setRange"",""muted"",""pressed"",""updateProgress"",""setProgress"",""getElementsByTagName"",""nodeValue"",""buffered"",""percent"",""setProperty"",""updateSeekTooltip"",""tooltips"",""clientRect"",""getBoundingClientRect"",""visible"",""width"",""pageX"",""left"",""timeUpdate"",""invert"",""invertTime"",""seeking"",""durationUpdate"",""hasDuration"",""displayDuration"",""toggleMenuButton"",""setting"",""updateSetting"",""pane"",""panels"",""default"",""getLabel"",""setQualityMenu"",""checkMenu"",""getBadge"",""sort"",""a"",""b"",""sorting"",""setCaptionsMenu"",""tracks"",""getTracks"",""toggled"",""language"",""unshift"",""setSpeedMenu"",""isVimeo"",""values"",""some"",""popup"",""firstItem"",""toggleMenu"",""show"",""isMenuItem"",""getMenuSize"",""tab"",""clone"",""position"",""opacity"",""scrollWidth"",""height"",""scrollHeight"",""size"",""restore"",""propertyName"",""setDownloadLink"",""download"",""inner"",""home"",""backButton"",""href"",""urls"",""isEmbed"",""inject"",""seektime"",""insertMethod"",""addProperty"",""controlPressed"",""labels"",""parseUrl"",""safe"",""parser"",""buildUrlParams"",""params"",""URLSearchParams"",""setup"",""isVideo"",""isYouTube"",""protocol"",""blob"",""createObjectURL"",""browserLanguages"",""languages"",""userLanguage"",""active"",""trackEvents"",""currentTrackNode"",""languageExists"",""mode"",""updateCues"",""setLanguage"",""activeClass"",""findTrack"",""embed"",""enableTextTrack"",""sortIsDefault"",""sorted"",""every"",""getCurrentTrack"",""cues"",""activeCues"",""getCueAsHTML"",""cueText"",""changed"",""caption"",""defaults"",""autoplay"",""autopause"",""toggleInvert"",""ratio"",""clickToPlay"",""hideControls"",""resetOnEnd"",""disableContextMenu"",""loop"",""selected"",""keyboard"",""fallback"",""iosNative"",""seekLabel"",""unmute"",""enableCaptions"",""disableCaptions"",""enterFullscreen"",""exitFullscreen"",""frameTitle"",""menuBack"",""normal"",""end"",""all"",""reset"",""disabled"",""advertisement"",""qualityBadge"",""sdk"",""iframe"",""googleIMA"",""editable"",""embedContainer"",""poster"",""posterEnabled"",""ads"",""playing"",""stopped"",""loading"",""hover"",""isTouch"",""uiSupported"",""noTransition"",""google"",""publisherId"",""inactive"",""providers"",""types"",""getProviderByUrl"",""noop"",""Console"",""console"",""onChange"",""toggleFallback"",""scrollPosition"",""x"",""scrollX"",""y"",""scrollY"",""scrollTo"",""overflow"",""viewport"",""head"",""property"",""hasProperty"",""cleanupViewport"",""part"",""Fullscreen"",""native"",""webkitEnterFullscreen"",""requestFullscreen"",""webkitExitFullscreen"",""cancelFullScreen"",""action"",""enter"",""exit"",""fullscreenElement"",""fullscreenEnabled"",""webkitFullscreenEnabled"",""mozFullScreenEnabled"",""msFullscreenEnabled"",""prefixes"",""pre"",""loadImage"",""minWidth"",""image"",""Image"",""handler"",""onload"",""onerror"",""naturalWidth"",""addStyleHook"",""build"",""checkPlaying"",""setTitle"",""setPoster"",""togglePoster"",""enable"",""err"",""backgroundImage"",""backgroundSize"",""toggleControls"",""checkLoading"",""clearTimeout"",""timers"",""recentTouchSeek"",""lastSeekTime"",""Date"",""now"",""Listeners"",""lastKey"",""focusTimer"",""lastKeyDown"",""handleKey"",""setTabFocus"",""firstTouch"",""code"",""repeat"",""altKey"",""ctrlKey"",""metaKey"",""seekByKey"",""togglePlay"",""increaseVolume"",""decreaseVolume"",""forward"",""toggleCaptions"",""timeStamp"",""removeCurrent"",""wasKeyDown"",""delay"",""hasAudio"",""initialized"",""managerPromise"",""isAudio"",""ended"",""proxyEvents"",""concat"",""defaultHandler"",""customHandlerKey"",""customHandler"",""hasCustomHandler"",""returned"",""proxy"",""inputEvent"",""rect"",""currentTarget"",""attribute"",""hasAttribute"",""done"",""seekTo"",""webkitDirectionInvertedFromDevice"",""deltaX"",""deltaY"",""direction"",""sign"",""NAME"",""loadScript"",""loadjs"",""success"",""parseId"",""regex"",""$2"",""getAspectRatio"",""getRatio"",""w"",""h"",""assurePlaybackState"",""hasPlayed"",""setAspectRatio"",""Vimeo"",""padding"",""paddingBottom"",""offset"",""transform"",""byline"",""portrait"",""transparent"",""gesture"",""thumbnail_large"",""pathname"",""Player"",""disableTextTrack"",""stop"",""restorePause"",""setVolume"",""setCurrentTime"",""setPlaybackRate"",""name"",""setLoop"",""currentSrc"",""getVideoUrl"",""getVideoWidth"",""getVideoHeight"",""dimensions"",""setAutopause"",""state"",""getVideoTitle"",""getCurrentTime"",""getDuration"",""getTextTracks"",""strippedCues"",""getPaused"",""frame"",""seconds"",""dimension"",""YT"",""onYouTubeReadyCallbacks"",""onYouTubeIframeAPIReady"",""getTitle"",""videoId"",""getVideoData"",""items"",""snippet"",""currentId"",""posterSrc"",""playerVars"",""hl"",""rel"",""showinfo"",""iv_load_policy"",""modestbranding"",""disablekb"",""widget_referrer"",""cc_load_policy"",""cc_lang_pref"",""onError"",""message"",""onPlaybackRateChange"",""instance"",""playbackRate"",""getPlaybackRate"",""onReady"",""playVideo"",""pauseVideo"",""stopVideo"",""getAvailablePlaybackRates"",""clearInterval"",""buffering"",""setInterval"",""getVideoLoadedFraction"",""lastBuffered"",""onStateChange"",""seeked"",""unMute"",""Ads"",""displayContainer"",""manager"",""loader"",""cuePoints"",""safetyTimer"",""countdownTimer"",""ima"",""trigger"",""startSafetyTimer"",""clearSafetyTimer"",""setupIMA"",""setVpaidMode"",""ImaSdkSettings"",""VpaidMode"",""ENABLED"",""setLocale"",""AdDisplayContainer"",""requestAds"",""AdsLoader"",""AdsManagerLoadedEvent"",""Type"",""ADS_MANAGER_LOADED"",""onAdsManagerLoaded"",""AdErrorEvent"",""AD_ERROR"",""onAdError"",""AdsRequest"",""adTagUrl"",""tagUrl"",""linearAdSlotWidth"",""offsetWidth"",""linearAdSlotHeight"",""nonLinearAdSlotWidth"",""nonLinearAdSlotHeight"",""forceNonLinearFullSlot"",""setAdWillPlayMuted"",""getRemainingTime"",""AdsRenderingSettings"",""restoreCustomPlaybackStateOnAdBreakComplete"",""enablePreloading"",""getAdsManager"",""getCuePoints"",""cuePoint"",""seekElement"",""cuePercentage"",""AdEvent"",""onAdEvent"",""ad"",""getAd"",""LOADED"",""pollCountdown"",""isLinear"",""ALL_ADS_COMPLETED"",""loadAds"",""CONTENT_PAUSE_REQUESTED"",""pauseContent"",""CONTENT_RESUME_REQUESTED"",""resumeContent"",""STARTED"",""MIDPOINT"",""COMPLETE"",""IMPRESSION"",""CLICK"",""cancel"",""contentComplete"",""seekedTime"",""discardAdBreak"",""splice"",""resize"",""ViewMode"",""NORMAL"",""initialize"",""init"",""adError"",""zIndex"",""destroy"",""handlers"",""AV_PUBLISHERID"",""AV_CHANNELID"",""AV_URL"",""cb"",""AV_WIDTH"",""AV_HEIGHT"",""AV_CDIM2"",""base"",""insertElements"",""change"",""tagName"",""crossorigin"",""Plyr"",""failed"",""jQuery"",""original"",""search"",""truthy"",""searchParams"",""webkitShowPlaybackTargetPicker"",""isHidden"",""hiding"",""eventName"",""soft"",""unload"",""inputIsValid"",""fauxDuration"",""realDuration"",""Infinity"",""mozHasAudio"",""webkitAudioDecodedByteCount"",""audioTracks"",""updateStorage"",""requestPictureInPicture"",""exitPictureInPicture"",""webkitPresentationMode"",""pictureInPictureElement"",""inline"",""t""],""mappings"":""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"",""file"":""plyr.polyfilled.js"",""sourcesContent"":[""// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function() {\n  if (typeof window === 'undefined') {\n    return;\n  }\n\n  try {\n    var ce = new window.CustomEvent('test', { cancelable: true });\n    ce.preventDefault();\n    if (ce.defaultPrevented !== true) {\n      // IE has problems with .preventDefault() on custom events\n      // http://stackoverflow.com/questions/23349191\n      throw new Error('Could not prevent default');\n    }\n  } catch (e) {\n    var CustomEvent = function(event, params) {\n      var evt, origPrevent;\n      params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined\n      };\n\n      evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(\n        event,\n        params.bubbles,\n        params.cancelable,\n        params.detail\n      );\n      origPrevent = evt.preventDefault;\n      evt.preventDefault = function() {\n        origPrevent.call(this);\n        try {\n          Object.defineProperty(this, 'defaultPrevented', {\n            get: function() {\n              return true;\n            }\n          });\n        } catch (e) {\n          this.defaultPrevented = true;\n        }\n      };\n      return evt;\n    };\n\n    CustomEvent.prototype = window.Event.prototype;\n    window.CustomEvent = CustomEvent; // expose definition to window\n  }\n})();\n"",""(function(global) {\r\n  /**\r\n   * Polyfill URLSearchParams\r\n   *\r\n   * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n   */\r\n\r\n  var checkIfIteratorIsSupported = function() {\r\n    try {\r\n      return !!Symbol.iterator;\r\n    } catch (error) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n\r\n  var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n  var createIterator = function(items) {\r\n    var iterator = {\r\n      next: function() {\r\n        var value = items.shift();\r\n        return { done: value === void 0, value: value };\r\n      }\r\n    };\r\n\r\n    if (iteratorSupported) {\r\n      iterator[Symbol.iterator] = function() {\r\n        return iterator;\r\n      };\r\n    }\r\n\r\n    return iterator;\r\n  };\r\n\r\n  /**\r\n   * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n   * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n   */\r\n  var serializeParam = function(value) {\r\n    return encodeURIComponent(value).replace(/%20/g, '+');\r\n  };\r\n\r\n  var deserializeParam = function(value) {\r\n    return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n  };\r\n\r\n  var polyfillURLSearchParams = function() {\r\n\r\n    var URLSearchParams = function(searchString) {\r\n      Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n      var typeofSearchString = typeof searchString;\r\n\r\n      if (typeofSearchString === 'undefined') {\r\n        // do nothing\r\n      } else if (typeofSearchString === 'string') {\r\n        if (searchString !== '') {\r\n          this._fromString(searchString);\r\n        }\r\n      } else if (searchString instanceof URLSearchParams) {\r\n        var _this = this;\r\n        searchString.forEach(function(value, name) {\r\n          _this.append(name, value);\r\n        });\r\n      } else if ((searchString !== null) && (typeofSearchString === 'object')) {\r\n        if (Object.prototype.toString.call(searchString) === '[object Array]') {\r\n          for (var i = 0; i < searchString.length; i++) {\r\n            var entry = searchString[i];\r\n            if ((Object.prototype.toString.call(entry) === '[object Array]') || (entry.length !== 2)) {\r\n              this.append(entry[0], entry[1]);\r\n            } else {\r\n              throw new TypeError('Expected [string, any] as entry at index ' + i + ' of URLSearchParams\\'s input');\r\n            }\r\n          }\r\n        } else {\r\n          for (var key in searchString) {\r\n            if (searchString.hasOwnProperty(key)) {\r\n              this.append(key, searchString[key]);\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        throw new TypeError('Unsupported input\\'s type for URLSearchParams');\r\n      }\r\n    };\r\n\r\n    var proto = URLSearchParams.prototype;\r\n\r\n    proto.append = function(name, value) {\r\n      if (name in this._entries) {\r\n        this._entries[name].push(String(value));\r\n      } else {\r\n        this._entries[name] = [String(value)];\r\n      }\r\n    };\r\n\r\n    proto.delete = function(name) {\r\n      delete this._entries[name];\r\n    };\r\n\r\n    proto.get = function(name) {\r\n      return (name in this._entries) ? this._entries[name][0] : null;\r\n    };\r\n\r\n    proto.getAll = function(name) {\r\n      return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n    };\r\n\r\n    proto.has = function(name) {\r\n      return (name in this._entries);\r\n    };\r\n\r\n    proto.set = function(name, value) {\r\n      this._entries[name] = [String(value)];\r\n    };\r\n\r\n    proto.forEach = function(callback, thisArg) {\r\n      var entries;\r\n      for (var name in this._entries) {\r\n        if (this._entries.hasOwnProperty(name)) {\r\n          entries = this._entries[name];\r\n          for (var i = 0; i < entries.length; i++) {\r\n            callback.call(thisArg, entries[i], name, this);\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    proto.keys = function() {\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push(name);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    proto.values = function() {\r\n      var items = [];\r\n      this.forEach(function(value) {\r\n        items.push(value);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    proto.entries = function() {\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push([name, value]);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    if (iteratorSupported) {\r\n      proto[Symbol.iterator] = proto.entries;\r\n    }\r\n\r\n    proto.toString = function() {\r\n      var searchArray = [];\r\n      this.forEach(function(value, name) {\r\n        searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n      });\r\n      return searchArray.join('&');\r\n    };\r\n\r\n\r\n    global.URLSearchParams = URLSearchParams;\r\n  };\r\n\r\n  if (!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n    polyfillURLSearchParams();\r\n  }\r\n\r\n  var proto = URLSearchParams.prototype;\r\n\r\n  if (typeof proto.sort !== 'function') {\r\n    proto.sort = function() {\r\n      var _this = this;\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push([name, value]);\r\n        if (!_this._entries) {\r\n          _this.delete(name);\r\n        }\r\n      });\r\n      items.sort(function(a, b) {\r\n        if (a[0] < b[0]) {\r\n          return -1;\r\n        } else if (a[0] > b[0]) {\r\n          return +1;\r\n        } else {\r\n          return 0;\r\n        }\r\n      });\r\n      if (_this._entries) { // force reset because IE keeps keys index\r\n        _this._entries = {};\r\n      }\r\n      for (var i = 0; i < items.length; i++) {\r\n        this.append(items[i][0], items[i][1]);\r\n      }\r\n    };\r\n  }\r\n\r\n  if (typeof proto._fromString !== 'function') {\r\n    Object.defineProperty(proto, '_fromString', {\r\n      enumerable: false,\r\n      configurable: false,\r\n      writable: false,\r\n      value: function(searchString) {\r\n        if (this._entries) {\r\n          this._entries = {};\r\n        } else {\r\n          var keys = [];\r\n          this.forEach(function(value, name) {\r\n            keys.push(name);\r\n          });\r\n          for (var i = 0; i < keys.length; i++) {\r\n            this.delete(keys[i]);\r\n          }\r\n        }\r\n\r\n        searchString = searchString.replace(/^\\?/, '');\r\n        var attributes = searchString.split('&');\r\n        var attribute;\r\n        for (var i = 0; i < attributes.length; i++) {\r\n          attribute = attributes[i].split('=');\r\n          this.append(\r\n            deserializeParam(attribute[0]),\r\n            (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n          );\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  // HTMLAnchorElement\r\n\r\n})(\r\n  (typeof global !== 'undefined') ? global\r\n    : ((typeof window !== 'undefined') ? window\r\n    : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n  /**\r\n   * Polyfill URL\r\n   *\r\n   * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n   */\r\n\r\n  var checkIfURLIsSupported = function() {\r\n    try {\r\n      var u = new URL('b', 'http://a');\r\n      u.pathname = 'c%20d';\r\n      return (u.href === 'http://a/c%20d') && u.searchParams;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n\r\n  var polyfillURL = function() {\r\n    var _URL = global.URL;\r\n\r\n    var URL = function(url, base) {\r\n      if (typeof url !== 'string') url = String(url);\r\n\r\n      // Only create another document if the base is different from current location.\r\n      var doc = document, baseElement;\r\n      if (base && (global.location === void 0 || base !== global.location.href)) {\r\n        doc = document.implementation.createHTMLDocument('');\r\n        baseElement = doc.createElement('base');\r\n        baseElement.href = base;\r\n        doc.head.appendChild(baseElement);\r\n        try {\r\n          if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n        } catch (err) {\r\n          throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n        }\r\n      }\r\n\r\n      var anchorElement = doc.createElement('a');\r\n      anchorElement.href = url;\r\n      if (baseElement) {\r\n        doc.body.appendChild(anchorElement);\r\n        anchorElement.href = anchorElement.href; // force href to refresh\r\n      }\r\n\r\n      if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n        throw new TypeError('Invalid URL');\r\n      }\r\n\r\n      Object.defineProperty(this, '_anchorElement', {\r\n        value: anchorElement\r\n      });\r\n\r\n\r\n      // create a linked searchParams which reflect its changes on URL\r\n      var searchParams = new URLSearchParams(this.search);\r\n      var enableSearchUpdate = true;\r\n      var enableSearchParamsUpdate = true;\r\n      var _this = this;\r\n      ['append', 'delete', 'set'].forEach(function(methodName) {\r\n        var method = searchParams[methodName];\r\n        searchParams[methodName] = function() {\r\n          method.apply(searchParams, arguments);\r\n          if (enableSearchUpdate) {\r\n            enableSearchParamsUpdate = false;\r\n            _this.search = searchParams.toString();\r\n            enableSearchParamsUpdate = true;\r\n          }\r\n        };\r\n      });\r\n\r\n      Object.defineProperty(this, 'searchParams', {\r\n        value: searchParams,\r\n        enumerable: true\r\n      });\r\n\r\n      var search = void 0;\r\n      Object.defineProperty(this, '_updateSearchParams', {\r\n        enumerable: false,\r\n        configurable: false,\r\n        writable: false,\r\n        value: function() {\r\n          if (this.search !== search) {\r\n            search = this.search;\r\n            if (enableSearchParamsUpdate) {\r\n              enableSearchUpdate = false;\r\n              this.searchParams._fromString(this.search);\r\n              enableSearchUpdate = true;\r\n            }\r\n          }\r\n        }\r\n      });\r\n    };\r\n\r\n    var proto = URL.prototype;\r\n\r\n    var linkURLWithAnchorAttribute = function(attributeName) {\r\n      Object.defineProperty(proto, attributeName, {\r\n        get: function() {\r\n          return this._anchorElement[attributeName];\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement[attributeName] = value;\r\n        },\r\n        enumerable: true\r\n      });\r\n    };\r\n\r\n    ['hash', 'host', 'hostname', 'port', 'protocol']\r\n      .forEach(function(attributeName) {\r\n        linkURLWithAnchorAttribute(attributeName);\r\n      });\r\n\r\n    Object.defineProperty(proto, 'search', {\r\n      get: function() {\r\n        return this._anchorElement['search'];\r\n      },\r\n      set: function(value) {\r\n        this._anchorElement['search'] = value;\r\n        this._updateSearchParams();\r\n      },\r\n      enumerable: true\r\n    });\r\n\r\n    Object.defineProperties(proto, {\r\n\r\n      'toString': {\r\n        get: function() {\r\n          var _this = this;\r\n          return function() {\r\n            return _this.href;\r\n          };\r\n        }\r\n      },\r\n\r\n      'href': {\r\n        get: function() {\r\n          return this._anchorElement.href.replace(/\\?$/, '');\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement.href = value;\r\n          this._updateSearchParams();\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'pathname': {\r\n        get: function() {\r\n          return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement.pathname = value;\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'origin': {\r\n        get: function() {\r\n          // get expected port from protocol\r\n          var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n          // add port to origin if, expected port is different than actual port\r\n          // and it is not empty f.e http://foo:8080\r\n          // 8080 != 80 && 8080 != ''\r\n          var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n            this._anchorElement.port !== '';\r\n\r\n          return this._anchorElement.protocol +\r\n            '//' +\r\n            this._anchorElement.hostname +\r\n            (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'password': { // TODO\r\n        get: function() {\r\n          return '';\r\n        },\r\n        set: function(value) {\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'username': { // TODO\r\n        get: function() {\r\n          return '';\r\n        },\r\n        set: function(value) {\r\n        },\r\n        enumerable: true\r\n      },\r\n    });\r\n\r\n    URL.createObjectURL = function(blob) {\r\n      return _URL.createObjectURL.apply(_URL, arguments);\r\n    };\r\n\r\n    URL.revokeObjectURL = function(url) {\r\n      return _URL.revokeObjectURL.apply(_URL, arguments);\r\n    };\r\n\r\n    global.URL = URL;\r\n\r\n  };\r\n\r\n  if (!checkIfURLIsSupported()) {\r\n    polyfillURL();\r\n  }\r\n\r\n  if ((global.location !== void 0) && !('origin' in global.location)) {\r\n    var getOrigin = function() {\r\n      return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n    };\r\n\r\n    try {\r\n      Object.defineProperty(global.location, 'origin', {\r\n        get: getOrigin,\r\n        enumerable: true\r\n      });\r\n    } catch (e) {\r\n      setInterval(function() {\r\n        global.location.origin = getOrigin();\r\n      }, 100);\r\n    }\r\n  }\r\n\r\n})(\r\n  (typeof global !== 'undefined') ? global\r\n    : ((typeof window !== 'undefined') ? window\r\n    : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n"",""module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n"",""// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n"",""// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n"",""var core = module.exports = { version: '2.6.2' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n"",""module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n"",""var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n"",""module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n"",""// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n"",""var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n"",""module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n"",""// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n"",""var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n"",""module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n"",""var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n"",""var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n"",""var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n"",""var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n"",""var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n"",""// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n"",""// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n"",""// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n"",""module.exports = {};\n"",""module.exports = false;\n"",""var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n"",""var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n"",""// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n"",""// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n"",""// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n"",""'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n"",""var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n"",""// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n"",""var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n"",""var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n"",""'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n"",""// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n"",""// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n"",""var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n"",""// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n"",""// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n"",""// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n"",""'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n"",""exports.f = {}.propertyIsEnumerable;\n"",""// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n"",""var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n"",""// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \"": can't set as prototype!\"");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n"",""var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n"",""var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n"",""// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n"",""var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n"",""var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n"",""// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n"",""// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n"",""module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n"",""var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n  var exp = {};\n  var FORCE = fails(function () {\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if (ALIAS) exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n  string = String(defined(string));\n  if (TYPE & 1) string = string.replace(ltrim, '');\n  if (TYPE & 2) string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;\n"",""// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n"",""var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n"",""var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n"",""// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n"",""'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, false);\n  if (typeof it == 'string' && it.length > 2) {\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0);\n    var third, radix, maxCode;\n    if (first === 43 || first === 45) {\n      third = it.charCodeAt(2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (it.charCodeAt(1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default: return +it;\n      }\n      for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n        code = digits.charCodeAt(i);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if (code < 48 || code > maxCode) return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n  $Number = function Number(value) {\n    var it = arguments.length < 1 ? 0 : value;\n    var that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for (var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (has(Base, key = keys[j]) && !has($Number, key)) {\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}\n"",""// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n"",""// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n"",""// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n"",""// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \"" doesn't accept regex!\"");\n  return String(defined(that));\n};\n"",""var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n"",""// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n"",""'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n"",""// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n"",""'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n"",""'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n"",""'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n"",""'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n"",""'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \""grops\"" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \""split\"" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n"",""'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n  return [\n    // `String.prototype.search` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.search\n    function search(regexp) {\n      var O = defined(this);\n      var fn = regexp == undefined ? undefined : regexp[SEARCH];\n      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n    },\n    // `RegExp.prototype[@@search]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n    function (regexp) {\n      var res = maybeCallNative($search, regexp, this);\n      if (res.done) return res.value;\n      var rx = anObject(regexp);\n      var S = String(this);\n      var previousLastIndex = rx.lastIndex;\n      if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n      var result = regExpExec(rx, S);\n      if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n      return result === null ? -1 : result.index;\n    }\n  ];\n});\n"",""// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});\n"",""'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n  define(function toString() {\n    var R = anObject(this);\n    return '/'.concat(R.source, '/',\n      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n  });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n  define(function toString() {\n    return $toString.call(this);\n  });\n}\n"",""module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n"",""var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n"",""'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n"",""// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n"",""'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n"",""'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n"",""var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n"",""var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n"",""'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n"",""var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n"",""exports.f = Object.getOwnPropertySymbols;\n"",""'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n"",""var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n"",""module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n"",""var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n"",""var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n"",""'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n  return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n  this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n  return arrayFind(store.a, function (it) {\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = arrayFindIndex(this.a, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;      // collection type\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var data = getWeak(anObject(key), true);\n    if (data === true) uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n"",""'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n"",""'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n  return function WeakMap() {\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key) {\n    if (isObject(key)) {\n      var data = getWeak(key);\n      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value) {\n    return weak.def(validate(this, WEAK_MAP), key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function (key) {\n    var proto = $WeakMap.prototype;\n    var method = proto[key];\n    redefine(proto, key, function (a, b) {\n      // store frozen objects on internal weakmap shim\n      if (isObject(a) && !isExtensible(a)) {\n        if (!this._f) this._f = new InternalMap();\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}\n"",""'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call\n    arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n  });\n};\n"",""'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n  // IE8-\n  test.sort(undefined);\n}) || !fails(function () {\n  // V8 bug\n  test.sort(null);\n  // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n  // 22.1.3.25 Array.prototype.sort(comparefn)\n  sort: function sort(comparefn) {\n    return comparefn === undefined\n      ? $sort.call(toObject(this))\n      : $sort.call(toObject(this), aFunction(comparefn));\n  }\n});\n"",""// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n"",""// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n"",""'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n"",""'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\n\n// eslint-disable-next-line no-empty\nvar SUPPORTS_Y = !!(function () { try { return new RegExp('x', 'y'); } catch (e) {} })();\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return $split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = regexpExec.call(separatorCopy, string)) {\n        lastIndex = separatorCopy[LAST_INDEX];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n    };\n  } else {\n    internalSplit = $split;\n  }\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = defined(this);\n      var splitter = separator == undefined ? undefined : separator[SPLIT];\n      return splitter !== undefined\n        ? splitter.call(separator, O, limit)\n        : internalSplit.call(String(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (regexp, limit) {\n      var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                    (rx.multiline ? 'm' : '') +\n                    (rx.unicode ? 'u' : '') +\n                    (SUPPORTS_Y ? 'y' : 'g');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n      var lim = limit === undefined ? 0xffffffff : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = SUPPORTS_Y ? q : 0;\n        var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n        var e;\n        if (\n          z === null ||\n          (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          A.push(S.slice(p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            A.push(z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      A.push(S.slice(p));\n      return A;\n    }\n  ];\n});\n"",""var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) if (isEnum.call(O, key = keys[i++])) {\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n"",""// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it) {\n    return $entries(it);\n  }\n});\n"",""// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n"",""'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \""doesn't work\"" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \""'\"": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n"",""// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n"",""var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n"",""var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n"",""'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n"",""module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n"",""var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n"",""var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n"",""'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n"",""'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\""Promise can't be resolved itself\"");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n"",""// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n"",""// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n"",""// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n    isNullOrUndefined(input) ||\n    ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n    (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n    // Accept a URL object\n    if (instanceOf(input, window.URL)) {\n        return true;\n    }\n\n    // Must be string from here\n    if (!isString(input)) {\n        return false;\n    }\n\n    // Add the protocol if required\n    let string = input;\n    if (!input.startsWith('http://') || !input.startsWith('https://')) {\n        string = `http://${input}`;\n    }\n\n    try {\n        return !isEmpty(new URL(string).hostname);\n    } catch (e) {\n        return false;\n    }\n};\n\nexport default {\n    nullOrUndefined: isNullOrUndefined,\n    object: isObject,\n    number: isNumber,\n    string: isString,\n    boolean: isBoolean,\n    function: isFunction,\n    array: isArray,\n    weakMap: isWeakMap,\n    nodeList: isNodeList,\n    element: isElement,\n    textNode: isTextNode,\n    event: isEvent,\n    keyboardEvent: isKeyboardEvent,\n    cue: isCue,\n    track: isTrack,\n    url: isUrl,\n    empty: isEmpty,\n};\n"",""// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n    // Test via a getter in the options object to see if the passive property is accessed\n    let supported = false;\n    try {\n        const options = Object.defineProperty({}, 'passive', {\n            get() {\n                supported = true;\n                return null;\n            },\n        });\n        window.addEventListener('test', null, options);\n        window.removeEventListener('test', null, options);\n    } catch (e) {\n        // Do nothing\n    }\n\n    return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n    // Bail if no element, event, or callback\n    if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n        return;\n    }\n\n    // Allow multiple events\n    const events = event.split(' ');\n\n    // Build options\n    // Default to just the capture boolean for browsers with no passive listener support\n    let options = capture;\n\n    // If passive events listeners are supported\n    if (supportsPassiveListeners) {\n        options = {\n            // Whether the listener can be passive (i.e. default never prevented)\n            passive,\n            // Whether the listener is a capturing listener or not\n            capture,\n        };\n    }\n\n    // If a single node is passed, bind the event listener\n    events.forEach(type => {\n        if (this && this.eventListeners && toggle) {\n            // Cache event listener\n            this.eventListeners.push({ element, type, callback, options });\n        }\n\n        element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n    });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n    toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n    toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n    function onceCallback(...args) {\n        off(element, events, onceCallback, passive, capture);\n        callback.apply(this, args);\n    }\n\n    toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n    // Bail if no element\n    if (!is.element(element) || is.empty(type)) {\n        return;\n    }\n\n    // Create and dispatch the event\n    const event = new CustomEvent(type, {\n        bubbles,\n        detail: Object.assign({}, detail, {\n            plyr: this,\n        }),\n    });\n\n    // Dispatch the event\n    element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n    if (this && this.eventListeners) {\n        this.eventListeners.forEach(item => {\n            const { element, type, callback, options } = item;\n            element.removeEventListener(type, callback, options);\n        });\n\n        this.eventListeners = [];\n    }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n    return new Promise(\n        resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n    ).then(() => {});\n}\n"",""// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function wrap(elements, wrapper) {\n    // Convert `elements` to an array, if necessary.\n    const targets = elements.length ? elements : [elements];\n\n    // Loops backwards to prevent having to clone the wrapper on the\n    // first element (see `child` below).\n    Array.from(targets)\n        .reverse()\n        .forEach((element, index) => {\n            const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n            // Cache the current parent and sibling.\n            const parent = element.parentNode;\n            const sibling = element.nextSibling;\n\n            // Wrap the element (is automatically removed from its current\n            // parent).\n            child.appendChild(element);\n\n            // If the element had a sibling, insert the wrapper before\n            // the sibling to maintain the HTML structure; otherwise, just\n            // append it to the parent.\n            if (sibling) {\n                parent.insertBefore(child, sibling);\n            } else {\n                parent.appendChild(child);\n            }\n        });\n}\n\n// Set attributes\nexport function setAttributes(element, attributes) {\n    if (!is.element(element) || is.empty(attributes)) {\n        return;\n    }\n\n    // Assume null and undefined attributes should be left out,\n    // Setting them would otherwise convert them to \""null\"" and \""undefined\""\n    Object.entries(attributes)\n        .filter(([, value]) => !is.nullOrUndefined(value))\n        .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n    // Create a new <element>\n    const element = document.createElement(type);\n\n    // Set all passed attributes\n    if (is.object(attributes)) {\n        setAttributes(element, attributes);\n    }\n\n    // Add text node\n    if (is.string(text)) {\n        element.innerText = text;\n    }\n\n    // Return built element\n    return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n    if (!is.element(element) || !is.element(target)) {\n        return;\n    }\n\n    target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n    if (!is.element(parent)) {\n        return;\n    }\n\n    parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n    if (is.nodeList(element) || is.array(element)) {\n        Array.from(element).forEach(removeElement);\n        return;\n    }\n\n    if (!is.element(element) || !is.element(element.parentNode)) {\n        return;\n    }\n\n    element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    let { length } = element.childNodes;\n\n    while (length > 0) {\n        element.removeChild(element.lastChild);\n        length -= 1;\n    }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n    if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n        return null;\n    }\n\n    oldChild.parentNode.replaceChild(newChild, oldChild);\n\n    return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function getAttributesFromSelector(sel, existingAttributes) {\n    // For example:\n    // '.test' to { class: 'test' }\n    // '#test' to { id: 'test' }\n    // '[data-test=\""test\""]' to { 'data-test': 'test' }\n\n    if (!is.string(sel) || is.empty(sel)) {\n        return {};\n    }\n\n    const attributes = {};\n    const existing = existingAttributes;\n\n    sel.split(',').forEach(s => {\n        // Remove whitespace\n        const selector = s.trim();\n        const className = selector.replace('.', '');\n        const stripped = selector.replace(/[[\\]]/g, '');\n\n        // Get the parts and value\n        const parts = stripped.split('=');\n        const key = parts[0];\n        const value = parts.length > 1 ? parts[1].replace(/[\""']/g, '') : '';\n\n        // Get the first character\n        const start = selector.charAt(0);\n\n        switch (start) {\n            case '.':\n                // Add to existing classname\n                if (is.object(existing) && is.string(existing.class)) {\n                    existing.class += ` ${className}`;\n                }\n\n                attributes.class = className;\n                break;\n\n            case '#':\n                // ID selector\n                attributes.id = selector.replace('#', '');\n                break;\n\n            case '[':\n                // Attribute selector\n                attributes[key] = value;\n\n                break;\n\n            default:\n                break;\n        }\n    });\n\n    return attributes;\n}\n\n// Toggle hidden\nexport function toggleHidden(element, hidden) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    let hide = hidden;\n\n    if (!is.boolean(hide)) {\n        hide = !element.hidden;\n    }\n\n    if (hide) {\n        element.setAttribute('hidden', '');\n    } else {\n        element.removeAttribute('hidden');\n    }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \""force\"" argument\nexport function toggleClass(element, className, force) {\n    if (is.nodeList(element)) {\n        return Array.from(element).map(e => toggleClass(e, className, force));\n    }\n\n    if (is.element(element)) {\n        let method = 'toggle';\n        if (typeof force !== 'undefined') {\n            method = force ? 'add' : 'remove';\n        }\n\n        element.classList[method](className);\n        return element.classList.contains(className);\n    }\n\n    return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n    return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function matches(element, selector) {\n    const prototype = { Element };\n\n    function match() {\n        return Array.from(document.querySelectorAll(selector)).includes(this);\n    }\n\n    const matches =\n        prototype.matches ||\n        prototype.webkitMatchesSelector ||\n        prototype.mozMatchesSelector ||\n        prototype.msMatchesSelector ||\n        match;\n\n    return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n    return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n    return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    const focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n    const first = focusable[0];\n    const last = focusable[focusable.length - 1];\n\n    const trap = event => {\n        // Bail if not tab key or not fullscreen\n        if (event.key !== 'Tab' || event.keyCode !== 9) {\n            return;\n        }\n\n        // Get the current focused element\n        const focused = document.activeElement;\n\n        if (focused === last && !event.shiftKey) {\n            // Move focus to first element that can be tabbed if Shift isn't used\n            first.focus();\n            event.preventDefault();\n        } else if (focused === first && event.shiftKey) {\n            // Move focus to last element that can be tabbed if Shift is used\n            last.focus();\n            event.preventDefault();\n        }\n    };\n\n    toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    // Set regular focus\n    element.focus({ preventScroll: true });\n\n    // If we want to mimic keyboard focus via tab\n    if (tabFocus) {\n        toggleClass(element, this.config.classNames.tabFocus);\n    }\n}\n"",""// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const transitionEndEvent = (() => {\n    const element = document.createElement('span');\n\n    const events = {\n        WebkitTransition: 'webkitTransitionEnd',\n        MozTransition: 'transitionend',\n        OTransition: 'oTransitionEnd otransitionend',\n        transition: 'transitionend',\n    };\n\n    const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n    return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n    setTimeout(() => {\n        try {\n            toggleHidden(element, true);\n            element.offsetHeight; // eslint-disable-line\n            toggleHidden(element, false);\n        } catch (e) {\n            // Do nothing\n        }\n    }, 0);\n}\n"",""// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\n    isIE: /* @cc_on!@ */ false || !!document.documentMode,\n    isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n    isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n    isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n};\n\nexport default browser;\n"",""// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n    'audio/ogg': 'vorbis',\n    'audio/wav': '1',\n    'video/webm': 'vp8, vorbis',\n    'video/mp4': 'avc1.42E01E, mp4a.40.2',\n    'video/ogg': 'theora',\n};\n\n// Check for feature support\nconst support = {\n    // Basic support\n    audio: 'canPlayType' in document.createElement('audio'),\n    video: 'canPlayType' in document.createElement('video'),\n\n    // Check for support\n    // Basic functionality vs full UI\n    check(type, provider, playsinline) {\n        const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n        const api = support[type] || provider !== 'html5';\n        const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n        return {\n            api,\n            ui,\n        };\n    },\n\n    // Picture-in-picture support\n    // Safari & Chrome only currently\n    pip: (() => {\n        if (browser.isIPhone) {\n            return false;\n        }\n\n        // Safari\n        // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n        if (is.function(createElement('video').webkitSetPresentationMode)) {\n            return true;\n        }\n\n        // Chrome\n        // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n        if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n            return true;\n        }\n\n        return false;\n    })(),\n\n    // Airplay support\n    // Safari only currently\n    airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n    // Inline playback support\n    // https://webkit.org/blog/6784/new-video-policies-for-ios/\n    playsinline: 'playsInline' in document.createElement('video'),\n\n    // Check for mime type support against a player instance\n    // Credits: http://diveintohtml5.info/everything.html\n    // Related: http://www.leanbackplayer.com/test/h5mt.html\n    mime(inputType) {\n        const [mediaType] = inputType.split('/');\n        let type = inputType;\n\n        // Verify we're using HTML5 and there's no media type mismatch\n        if (!this.isHTML5 || mediaType !== this.type) {\n            return false;\n        }\n\n        // Add codec if required\n        if (Object.keys(defaultCodecs).includes(type)) {\n            type += `; codecs=\""${defaultCodecs[inputType]}\""`;\n        }\n\n        try {\n            return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n        } catch (e) {\n            return false;\n        }\n    },\n\n    // Check for textTracks support\n    textTracks: 'textTracks' in document.createElement('video'),\n\n    // <input type=\""range\""> Sliders\n    rangeInput: (() => {\n        const range = document.createElement('input');\n        range.type = 'range';\n        return range.type === 'range';\n    })(),\n\n    // Touch\n    // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n    touch: 'ontouchstart' in document.documentElement,\n\n    // Detect transitions support\n    transitions: transitionEndEvent !== false,\n\n    // Reduced motion iOS & MacOS setting\n    // https://webkit.org/blog/7551/responsive-design-for-motion/\n    reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n"",""// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n    getSources() {\n        if (!this.isHTML5) {\n            return [];\n        }\n\n        const sources = Array.from(this.media.querySelectorAll('source'));\n\n        // Filter out unsupported sources\n        return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n    },\n\n    // Get quality levels\n    getQualityOptions() {\n        // Get sizes from <source> elements\n        return html5.getSources\n            .call(this)\n            .map(source => Number(source.getAttribute('size')))\n            .filter(Boolean);\n    },\n\n    extend() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        const player = this;\n\n        // Quality\n        Object.defineProperty(player.media, 'quality', {\n            get() {\n                // Get sources\n                const sources = html5.getSources.call(player);\n                const source = sources.find(source => source.getAttribute('src') === player.source);\n\n                // Return size, if match is found\n                return source && Number(source.getAttribute('size'));\n            },\n            set(input) {\n                // Get sources\n                const sources = html5.getSources.call(player);\n\n                // Get first match for requested size\n                const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n                // No matching source found\n                if (!source) {\n                    return;\n                }\n\n                // Get current state\n                const { currentTime, paused, preload, readyState } = player.media;\n\n                // Set new source\n                player.media.src = source.getAttribute('src');\n\n                // Prevent loading if preload=\""none\"" and the current source isn't loaded (#1044)\n                if (preload !== 'none' || readyState) {\n                    // Restore time\n                    player.once('loadedmetadata', () => {\n                        player.currentTime = currentTime;\n\n                        // Resume playing\n                        if (!paused) {\n                            player.play();\n                        }\n                    });\n\n                    // Load new source\n                    player.media.load();\n                }\n\n                // Trigger change event\n                triggerEvent.call(player, player.media, 'qualitychange', false, {\n                    quality: input,\n                });\n            },\n        });\n    },\n\n    // Cancel current network requests\n    // See https://github.com/sampotts/plyr/issues/174\n    cancelRequests() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        // Remove child sources\n        removeElement(html5.getSources.call(this));\n\n        // Set blank video src attribute\n        // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n        // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n        this.media.setAttribute('src', this.config.blankVideo);\n\n        // Load the new empty source\n        // This will cancel existing requests\n        // See https://github.com/sampotts/plyr/issues/174\n        this.media.load();\n\n        // Debugging\n        this.debug.log('Cancelled network requests');\n    },\n};\n\nexport default html5;\n"",""// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n    if (!is.array(array)) {\n        return array;\n    }\n\n    return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n    if (!is.array(array) || !array.length) {\n        return null;\n    }\n\n    return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n"",""// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n    return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n    return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n    if (!sources.length) {\n        return target;\n    }\n\n    const source = sources.shift();\n\n    if (!is.object(source)) {\n        return target;\n    }\n\n    Object.keys(source).forEach(key => {\n        if (is.object(source[key])) {\n            if (!Object.keys(target).includes(key)) {\n                Object.assign(target, { [key]: {} });\n            }\n\n            extend(target[key], source[key]);\n        } else {\n            Object.assign(target, { [key]: source[key] });\n        }\n    });\n\n    return extend(target, ...sources);\n}\n"",""var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \""new\"" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n  re2[require('./_wks')('match')] = false;\n  // RegExp constructor can alter flags and IsRegExp works correct with @@match\n  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n  $RegExp = function RegExp(p, f) {\n    var tiRE = this instanceof $RegExp;\n    var piRE = isRegExp(p);\n    var fiU = f === undefined;\n    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n      : inheritIfRequired(CORRECT_NEW\n        ? new Base(piRE && !fiU ? p.source : p, f)\n        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n      , tiRE ? this : proto, $RegExp);\n  };\n  var proxy = function (key) {\n    key in $RegExp || dP($RegExp, key, {\n      configurable: true,\n      get: function () { return Base[key]; },\n      set: function (it) { Base[key] = it; }\n    });\n  };\n  for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n  proto.constructor = $RegExp;\n  $RegExp.prototype = proto;\n  require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n"",""// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n    return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n    if (is.empty(input)) {\n        return input;\n    }\n\n    return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n    if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n        return 0;\n    }\n\n    return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n    return input.replace(\n        new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n        replace.toString(),\n    );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n    return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n    let string = input.toString();\n\n    // Convert kebab case\n    string = replaceAll(string, '-', ' ');\n\n    // Convert snake case\n    string = replaceAll(string, '_', ' ');\n\n    // Convert to title case\n    string = toTitleCase(string);\n\n    // Convert to pascal case\n    return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n    let string = input.toString();\n\n    // Convert to pascal case\n    string = toPascalCase(string);\n\n    // Convert first character to lowercase\n    return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n    const fragment = document.createDocumentFragment();\n    const element = document.createElement('div');\n    fragment.appendChild(element);\n    element.innerHTML = source;\n    return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n    const wrapper = document.createElement('div');\n    wrapper.appendChild(element);\n    return wrapper.innerHTML;\n}\n"",""// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n    pip: 'PIP',\n    airplay: 'AirPlay',\n    html5: 'HTML5',\n    vimeo: 'Vimeo',\n    youtube: 'YouTube',\n};\n\nconst i18n = {\n    get(key = '', config = {}) {\n        if (is.empty(key) || is.empty(config)) {\n            return '';\n        }\n\n        let string = getDeep(config.i18n, key);\n\n        if (is.empty(string)) {\n            if (Object.keys(resources).includes(key)) {\n                return resources[key];\n            }\n\n            return '';\n        }\n\n        const replace = {\n            '{seektime}': config.seekTime,\n            '{title}': config.title,\n        };\n\n        Object.entries(replace).forEach(([key, value]) => {\n            string = replaceAll(string, key, value);\n        });\n\n        return string;\n    },\n};\n\nexport default i18n;\n"",""// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\n\nclass Storage {\n    constructor(player) {\n        this.enabled = player.config.storage.enabled;\n        this.key = player.config.storage.key;\n    }\n\n    // Check for actual support (see if we can use it)\n    static get supported() {\n        try {\n            if (!('localStorage' in window)) {\n                return false;\n            }\n\n            const test = '___test';\n\n            // Try to use it (it might be disabled, e.g. user is in private mode)\n            // see: https://github.com/sampotts/plyr/issues/131\n            window.localStorage.setItem(test, test);\n            window.localStorage.removeItem(test);\n\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    get(key) {\n        if (!Storage.supported || !this.enabled) {\n            return null;\n        }\n\n        const store = window.localStorage.getItem(this.key);\n\n        if (is.empty(store)) {\n            return null;\n        }\n\n        const json = JSON.parse(store);\n\n        return is.string(key) && key.length ? json[key] : json;\n    }\n\n    set(object) {\n        // Bail if we don't have localStorage support or it's disabled\n        if (!Storage.supported || !this.enabled) {\n            return;\n        }\n\n        // Can only store objectst\n        if (!is.object(object)) {\n            return;\n        }\n\n        // Get current storage\n        let storage = this.get();\n\n        // Default to empty object\n        if (is.empty(storage)) {\n            storage = {};\n        }\n\n        // Update the working copy of the values\n        extend(storage, object);\n\n        // Update storage\n        window.localStorage.setItem(this.key, JSON.stringify(storage));\n    }\n}\n\nexport default Storage;\n"",""// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function fetch(url, responseType = 'text') {\n    return new Promise((resolve, reject) => {\n        try {\n            const request = new XMLHttpRequest();\n\n            // Check for CORS support\n            if (!('withCredentials' in request)) {\n                return;\n            }\n\n            request.addEventListener('load', () => {\n                if (responseType === 'text') {\n                    try {\n                        resolve(JSON.parse(request.responseText));\n                    } catch (e) {\n                        resolve(request.responseText);\n                    }\n                } else {\n                    resolve(request.response);\n                }\n            });\n\n            request.addEventListener('error', () => {\n                throw new Error(request.status);\n            });\n\n            request.open('GET', url, true);\n\n            // Set the required response type\n            request.responseType = responseType;\n\n            request.send();\n        } catch (e) {\n            reject(e);\n        }\n    });\n}\n"",""// ==========================================================================\n// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n    if (!is.string(url)) {\n        return;\n    }\n\n    const prefix = 'cache';\n    const hasId = is.string(id);\n    let isCached = false;\n\n    const exists = () => document.getElementById(id) !== null;\n\n    const update = (container, data) => {\n        container.innerHTML = data;\n\n        // Check again incase of race condition\n        if (hasId && exists()) {\n            return;\n        }\n\n        // Inject the SVG to the body\n        document.body.insertAdjacentElement('afterbegin', container);\n    };\n\n    // Only load once if ID set\n    if (!hasId || !exists()) {\n        const useStorage = Storage.supported;\n\n        // Create container\n        const container = document.createElement('div');\n        container.setAttribute('hidden', '');\n\n        if (hasId) {\n            container.setAttribute('id', id);\n        }\n\n        // Check in cache\n        if (useStorage) {\n            const cached = window.localStorage.getItem(`${prefix}-${id}`);\n            isCached = cached !== null;\n\n            if (isCached) {\n                const data = JSON.parse(cached);\n                update(container, data.content);\n            }\n        }\n\n        // Get the sprite\n        fetch(url)\n            .then(result => {\n                if (is.empty(result)) {\n                    return;\n                }\n\n                if (useStorage) {\n                    window.localStorage.setItem(\n                        `${prefix}-${id}`,\n                        JSON.stringify({\n                            content: result,\n                        }),\n                    );\n                }\n\n                update(container, result);\n            })\n            .catch(() => {});\n    }\n}\n"",""// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n    // Bail if the value isn't a number\n    if (!is.number(time)) {\n        return formatTime(null, displayHours, inverted);\n    }\n\n    // Format time component to add leading zero\n    const format = value => `0${value}`.slice(-2);\n\n    // Breakdown to hours, mins, secs\n    let hours = getHours(time);\n    const mins = getMinutes(time);\n    const secs = getSeconds(time);\n\n    // Do we need to display hours?\n    if (displayHours || hours > 0) {\n        hours = `${hours}:`;\n    } else {\n        hours = '';\n    }\n\n    // Render\n    return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n"",""// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n    // Get icon URL\n    getIconUrl() {\n        const url = new URL(this.config.iconUrl, window.location);\n        const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n        return {\n            url: this.config.iconUrl,\n            cors,\n        };\n    },\n\n    // Find the UI controls\n    findElements() {\n        try {\n            this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n            // Buttons\n            this.elements.buttons = {\n                play: getElements.call(this, this.config.selectors.buttons.play),\n                pause: getElement.call(this, this.config.selectors.buttons.pause),\n                restart: getElement.call(this, this.config.selectors.buttons.restart),\n                rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n                fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n                mute: getElement.call(this, this.config.selectors.buttons.mute),\n                pip: getElement.call(this, this.config.selectors.buttons.pip),\n                airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n                settings: getElement.call(this, this.config.selectors.buttons.settings),\n                captions: getElement.call(this, this.config.selectors.buttons.captions),\n                fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n            };\n\n            // Progress\n            this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n            // Inputs\n            this.elements.inputs = {\n                seek: getElement.call(this, this.config.selectors.inputs.seek),\n                volume: getElement.call(this, this.config.selectors.inputs.volume),\n            };\n\n            // Display\n            this.elements.display = {\n                buffer: getElement.call(this, this.config.selectors.display.buffer),\n                currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n                duration: getElement.call(this, this.config.selectors.display.duration),\n            };\n\n            // Seek tooltip\n            if (is.element(this.elements.progress)) {\n                this.elements.display.seekTooltip = this.elements.progress.querySelector(\n                    `.${this.config.classNames.tooltip}`,\n                );\n            }\n\n            return true;\n        } catch (error) {\n            // Log it\n            this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n            // Restore native video controls\n            this.toggleNativeControls(true);\n\n            return false;\n        }\n    },\n\n    // Create <svg> icon\n    createIcon(type, attributes) {\n        const namespace = 'http://www.w3.org/2000/svg';\n        const iconUrl = controls.getIconUrl.call(this);\n        const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n        // Create <svg>\n        const icon = document.createElementNS(namespace, 'svg');\n        setAttributes(\n            icon,\n            extend(attributes, {\n                role: 'presentation',\n                focusable: 'false',\n            }),\n        );\n\n        // Create the <use> to reference sprite\n        const use = document.createElementNS(namespace, 'use');\n        const path = `${iconPath}-${type}`;\n\n        // Set `href` attributes\n        // https://github.com/sampotts/plyr/issues/460\n        // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n        if ('href' in use) {\n            use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n        }\n\n        // Always set the older attribute even though it's \""deprecated\"" (it'll be around for ages)\n        use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n        // Add <use> to <svg>\n        icon.appendChild(use);\n\n        return icon;\n    },\n\n    // Create hidden text label\n    createLabel(key, attr = {}) {\n        const text = i18n.get(key, this.config);\n\n        const attributes = Object.assign({}, attr, {\n            class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n        });\n\n        return createElement('span', attributes, text);\n    },\n\n    // Create a badge\n    createBadge(text) {\n        if (is.empty(text)) {\n            return null;\n        }\n\n        const badge = createElement('span', {\n            class: this.config.classNames.menu.value,\n        });\n\n        badge.appendChild(\n            createElement(\n                'span',\n                {\n                    class: this.config.classNames.menu.badge,\n                },\n                text,\n            ),\n        );\n\n        return badge;\n    },\n\n    // Create a <button>\n    createButton(buttonType, attr) {\n        const attributes = Object.assign({}, attr);\n        let type = toCamelCase(buttonType);\n\n        const props = {\n            element: 'button',\n            toggle: false,\n            label: null,\n            icon: null,\n            labelPressed: null,\n            iconPressed: null,\n        };\n\n        ['element', 'icon', 'label'].forEach(key => {\n            if (Object.keys(attributes).includes(key)) {\n                props[key] = attributes[key];\n                delete attributes[key];\n            }\n        });\n\n        // Default to 'button' type to prevent form submission\n        if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n            attributes.type = 'button';\n        }\n\n        // Set class name\n        if (Object.keys(attributes).includes('class')) {\n            if (!attributes.class.includes(this.config.classNames.control)) {\n                attributes.class += ` ${this.config.classNames.control}`;\n            }\n        } else {\n            attributes.class = this.config.classNames.control;\n        }\n\n        // Large play button\n        switch (buttonType) {\n            case 'play':\n                props.toggle = true;\n                props.label = 'play';\n                props.labelPressed = 'pause';\n                props.icon = 'play';\n                props.iconPressed = 'pause';\n                break;\n\n            case 'mute':\n                props.toggle = true;\n                props.label = 'mute';\n                props.labelPressed = 'unmute';\n                props.icon = 'volume';\n                props.iconPressed = 'muted';\n                break;\n\n            case 'captions':\n                props.toggle = true;\n                props.label = 'enableCaptions';\n                props.labelPressed = 'disableCaptions';\n                props.icon = 'captions-off';\n                props.iconPressed = 'captions-on';\n                break;\n\n            case 'fullscreen':\n                props.toggle = true;\n                props.label = 'enterFullscreen';\n                props.labelPressed = 'exitFullscreen';\n                props.icon = 'enter-fullscreen';\n                props.iconPressed = 'exit-fullscreen';\n                break;\n\n            case 'play-large':\n                attributes.class += ` ${this.config.classNames.control}--overlaid`;\n                type = 'play';\n                props.label = 'play';\n                props.icon = 'play';\n                break;\n\n            default:\n                if (is.empty(props.label)) {\n                    props.label = type;\n                }\n                if (is.empty(props.icon)) {\n                    props.icon = buttonType;\n                }\n        }\n\n        const button = createElement(props.element);\n\n        // Setup toggle icon and labels\n        if (props.toggle) {\n            // Icon\n            button.appendChild(\n                controls.createIcon.call(this, props.iconPressed, {\n                    class: 'icon--pressed',\n                }),\n            );\n            button.appendChild(\n                controls.createIcon.call(this, props.icon, {\n                    class: 'icon--not-pressed',\n                }),\n            );\n\n            // Label/Tooltip\n            button.appendChild(\n                controls.createLabel.call(this, props.labelPressed, {\n                    class: 'label--pressed',\n                }),\n            );\n            button.appendChild(\n                controls.createLabel.call(this, props.label, {\n                    class: 'label--not-pressed',\n                }),\n            );\n        } else {\n            button.appendChild(controls.createIcon.call(this, props.icon));\n            button.appendChild(controls.createLabel.call(this, props.label));\n        }\n\n        // Merge and set attributes\n        extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n        setAttributes(button, attributes);\n\n        // We have multiple play buttons\n        if (type === 'play') {\n            if (!is.array(this.elements.buttons[type])) {\n                this.elements.buttons[type] = [];\n            }\n\n            this.elements.buttons[type].push(button);\n        } else {\n            this.elements.buttons[type] = button;\n        }\n\n        return button;\n    },\n\n    // Create an <input type='range'>\n    createRange(type, attributes) {\n        // Seek input\n        const input = createElement(\n            'input',\n            extend(\n                getAttributesFromSelector(this.config.selectors.inputs[type]),\n                {\n                    type: 'range',\n                    min: 0,\n                    max: 100,\n                    step: 0.01,\n                    value: 0,\n                    autocomplete: 'off',\n                    // A11y fixes for https://github.com/sampotts/plyr/issues/905\n                    role: 'slider',\n                    'aria-label': i18n.get(type, this.config),\n                    'aria-valuemin': 0,\n                    'aria-valuemax': 100,\n                    'aria-valuenow': 0,\n                },\n                attributes,\n            ),\n        );\n\n        this.elements.inputs[type] = input;\n\n        // Set the fill for webkit now\n        controls.updateRangeFill.call(this, input);\n\n        return input;\n    },\n\n    // Create a <progress>\n    createProgress(type, attributes) {\n        const progress = createElement(\n            'progress',\n            extend(\n                getAttributesFromSelector(this.config.selectors.display[type]),\n                {\n                    min: 0,\n                    max: 100,\n                    value: 0,\n                    role: 'presentation',\n                    'aria-hidden': true,\n                },\n                attributes,\n            ),\n        );\n\n        // Create the label inside\n        if (type !== 'volume') {\n            progress.appendChild(createElement('span', null, '0'));\n\n            const suffixKey = {\n                played: 'played',\n                buffer: 'buffered',\n            }[type];\n            const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n            progress.innerText = `% ${suffix.toLowerCase()}`;\n        }\n\n        this.elements.display[type] = progress;\n\n        return progress;\n    },\n\n    // Create time display\n    createTime(type) {\n        const attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n        const container = createElement(\n            'div',\n            extend(attributes, {\n                class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n                'aria-label': i18n.get(type, this.config),\n            }),\n            '00:00',\n        );\n\n        // Reference for updates\n        this.elements.display[type] = container;\n\n        return container;\n    },\n\n    // Bind keyboard shortcuts for a menu item\n    // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n    bindMenuItemShortcuts(menuItem, type) {\n        // Navigate through menus via arrow keys and space\n        on(\n            menuItem,\n            'keydown keyup',\n            event => {\n                // We only care about space and ⬆️ ⬇️️ ➡️\n                if (![32, 38, 39, 40].includes(event.which)) {\n                    return;\n                }\n\n                // Prevent play / seek\n                event.preventDefault();\n                event.stopPropagation();\n\n                // We're just here to prevent the keydown bubbling\n                if (event.type === 'keydown') {\n                    return;\n                }\n\n                const isRadioButton = matches(menuItem, '[role=\""menuitemradio\""]');\n\n                // Show the respective menu\n                if (!isRadioButton && [32, 39].includes(event.which)) {\n                    controls.showMenuPanel.call(this, type, true);\n                } else {\n                    let target;\n\n                    if (event.which !== 32) {\n                        if (event.which === 40 || (isRadioButton && event.which === 39)) {\n                            target = menuItem.nextElementSibling;\n\n                            if (!is.element(target)) {\n                                target = menuItem.parentNode.firstElementChild;\n                            }\n                        } else {\n                            target = menuItem.previousElementSibling;\n\n                            if (!is.element(target)) {\n                                target = menuItem.parentNode.lastElementChild;\n                            }\n                        }\n\n                        setFocus.call(this, target, true);\n                    }\n                }\n            },\n            false,\n        );\n\n        // Enter will fire a `click` event but we still need to manage focus\n        // So we bind to keyup which fires after and set focus here\n        on(menuItem, 'keyup', event => {\n            if (event.which !== 13) {\n                return;\n            }\n\n            controls.focusFirstMenuItem.call(this, null, true);\n        });\n    },\n\n    // Create a settings menu item\n    createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n        const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n        const menuItem = createElement(\n            'button',\n            extend(attributes, {\n                type: 'button',\n                role: 'menuitemradio',\n                class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n                'aria-checked': checked,\n                value,\n            }),\n        );\n\n        const flex = createElement('span');\n\n        // We have to set as HTML incase of special characters\n        flex.innerHTML = title;\n\n        if (is.element(badge)) {\n            flex.appendChild(badge);\n        }\n\n        menuItem.appendChild(flex);\n\n        // Replicate radio button behaviour\n        Object.defineProperty(menuItem, 'checked', {\n            enumerable: true,\n            get() {\n                return menuItem.getAttribute('aria-checked') === 'true';\n            },\n            set(checked) {\n                // Ensure exclusivity\n                if (checked) {\n                    Array.from(menuItem.parentNode.children)\n                        .filter(node => matches(node, '[role=\""menuitemradio\""]'))\n                        .forEach(node => node.setAttribute('aria-checked', 'false'));\n                }\n\n                menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n            },\n        });\n\n        this.listeners.bind(\n            menuItem,\n            'click keyup',\n            event => {\n                if (is.keyboardEvent(event) && event.which !== 32) {\n                    return;\n                }\n\n                event.preventDefault();\n                event.stopPropagation();\n\n                menuItem.checked = true;\n\n                switch (type) {\n                    case 'language':\n                        this.currentTrack = Number(value);\n                        break;\n\n                    case 'quality':\n                        this.quality = value;\n                        break;\n\n                    case 'speed':\n                        this.speed = parseFloat(value);\n                        break;\n\n                    default:\n                        break;\n                }\n\n                controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n            },\n            type,\n            false,\n        );\n\n        controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n        list.appendChild(menuItem);\n    },\n\n    // Format a time for display\n    formatTime(time = 0, inverted = false) {\n        // Bail if the value isn't a number\n        if (!is.number(time)) {\n            return time;\n        }\n\n        // Always display hours if duration is over an hour\n        const forceHours = getHours(this.duration) > 0;\n\n        return formatTime(time, forceHours, inverted);\n    },\n\n    // Update the displayed time\n    updateTimeDisplay(target = null, time = 0, inverted = false) {\n        // Bail if there's no element to display or the value isn't a number\n        if (!is.element(target) || !is.number(time)) {\n            return;\n        }\n\n        // eslint-disable-next-line no-param-reassign\n        target.innerText = controls.formatTime(time, inverted);\n    },\n\n    // Update volume UI and storage\n    updateVolume() {\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Update range\n        if (is.element(this.elements.inputs.volume)) {\n            controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n        }\n\n        // Update mute state\n        if (is.element(this.elements.buttons.mute)) {\n            this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n        }\n    },\n\n    // Update seek value and lower fill\n    setRange(target, value = 0) {\n        if (!is.element(target)) {\n            return;\n        }\n\n        // eslint-disable-next-line\n        target.value = value;\n\n        // Webkit range fill\n        controls.updateRangeFill.call(this, target);\n    },\n\n    // Update <progress> elements\n    updateProgress(event) {\n        if (!this.supported.ui || !is.event(event)) {\n            return;\n        }\n\n        let value = 0;\n\n        const setProgress = (target, input) => {\n            const value = is.number(input) ? input : 0;\n            const progress = is.element(target) ? target : this.elements.display.buffer;\n\n            // Update value and label\n            if (is.element(progress)) {\n                progress.value = value;\n\n                // Update text label inside\n                const label = progress.getElementsByTagName('span')[0];\n                if (is.element(label)) {\n                    label.childNodes[0].nodeValue = value;\n                }\n            }\n        };\n\n        if (event) {\n            switch (event.type) {\n                // Video playing\n                case 'timeupdate':\n                case 'seeking':\n                case 'seeked':\n                    value = getPercentage(this.currentTime, this.duration);\n\n                    // Set seek range value only if it's a 'natural' time event\n                    if (event.type === 'timeupdate') {\n                        controls.setRange.call(this, this.elements.inputs.seek, value);\n                    }\n\n                    break;\n\n                // Check buffer status\n                case 'playing':\n                case 'progress':\n                    setProgress(this.elements.display.buffer, this.buffered * 100);\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n    },\n\n    // Webkit polyfill for lower fill range\n    updateRangeFill(target) {\n        // Get range from event if event passed\n        const range = is.event(target) ? target.target : target;\n\n        // Needs to be a valid <input type='range'>\n        if (!is.element(range) || range.getAttribute('type') !== 'range') {\n            return;\n        }\n\n        // Set aria values for https://github.com/sampotts/plyr/issues/905\n        if (matches(range, this.config.selectors.inputs.seek)) {\n            range.setAttribute('aria-valuenow', this.currentTime);\n            const currentTime = controls.formatTime(this.currentTime);\n            const duration = controls.formatTime(this.duration);\n            const format = i18n.get('seekLabel', this.config);\n            range.setAttribute(\n                'aria-valuetext',\n                format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n            );\n        } else if (matches(range, this.config.selectors.inputs.volume)) {\n            const percent = range.value * 100;\n            range.setAttribute('aria-valuenow', percent);\n            range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n        } else {\n            range.setAttribute('aria-valuenow', range.value);\n        }\n\n        // WebKit only\n        if (!browser.isWebkit) {\n            return;\n        }\n\n        // Set CSS custom property\n        range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n    },\n\n    // Update hover tooltip for seeking\n    updateSeekTooltip(event) {\n        // Bail if setting not true\n        if (\n            !this.config.tooltips.seek ||\n            !is.element(this.elements.inputs.seek) ||\n            !is.element(this.elements.display.seekTooltip) ||\n            this.duration === 0\n        ) {\n            return;\n        }\n\n        // Calculate percentage\n        let percent = 0;\n        const clientRect = this.elements.progress.getBoundingClientRect();\n        const visible = `${this.config.classNames.tooltip}--visible`;\n\n        const toggle = toggle => {\n            toggleClass(this.elements.display.seekTooltip, visible, toggle);\n        };\n\n        // Hide on touch\n        if (this.touch) {\n            toggle(false);\n            return;\n        }\n\n        // Determine percentage, if already visible\n        if (is.event(event)) {\n            percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n        } else if (hasClass(this.elements.display.seekTooltip, visible)) {\n            percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n        } else {\n            return;\n        }\n\n        // Set bounds\n        if (percent < 0) {\n            percent = 0;\n        } else if (percent > 100) {\n            percent = 100;\n        }\n\n        // Display the time a click would seek to\n        controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n        // Set position\n        this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n        // Show/hide the tooltip\n        // If the event is a moues in/out and percentage is inside bounds\n        if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n            toggle(event.type === 'mouseenter');\n        }\n    },\n\n    // Handle time change event\n    timeUpdate(event) {\n        // Only invert if only one time element is displayed and used for both duration and currentTime\n        const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n        // Duration\n        controls.updateTimeDisplay.call(\n            this,\n            this.elements.display.currentTime,\n            invert ? this.duration - this.currentTime : this.currentTime,\n            invert,\n        );\n\n        // Ignore updates while seeking\n        if (event && event.type === 'timeupdate' && this.media.seeking) {\n            return;\n        }\n\n        // Playing progress\n        controls.updateProgress.call(this, event);\n    },\n\n    // Show the duration on metadataloaded or durationchange events\n    durationUpdate() {\n        // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n        if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n            return;\n        }\n\n        // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n        // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n        // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n        // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n        if (this.duration >= 2 ** 32) {\n            toggleHidden(this.elements.display.currentTime, true);\n            toggleHidden(this.elements.progress, true);\n            return;\n        }\n\n        // Update ARIA values\n        if (is.element(this.elements.inputs.seek)) {\n            this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n        }\n\n        // If there's a spot to display duration\n        const hasDuration = is.element(this.elements.display.duration);\n\n        // If there's only one time display, display duration there\n        if (!hasDuration && this.config.displayDuration && this.paused) {\n            controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n        }\n\n        // If there's a duration element, update content\n        if (hasDuration) {\n            controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n        }\n\n        // Update the tooltip (if visible)\n        controls.updateSeekTooltip.call(this);\n    },\n\n    // Hide/show a tab\n    toggleMenuButton(setting, toggle) {\n        toggleHidden(this.elements.settings.buttons[setting], !toggle);\n    },\n\n    // Update the selected setting\n    updateSetting(setting, container, input) {\n        const pane = this.elements.settings.panels[setting];\n        let value = null;\n        let list = container;\n\n        if (setting === 'captions') {\n            value = this.currentTrack;\n        } else {\n            value = !is.empty(input) ? input : this[setting];\n\n            // Get default\n            if (is.empty(value)) {\n                value = this.config[setting].default;\n            }\n\n            // Unsupported value\n            if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n                this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n                return;\n            }\n\n            // Disabled value\n            if (!this.config[setting].options.includes(value)) {\n                this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n                return;\n            }\n        }\n\n        // Get the list if we need to\n        if (!is.element(list)) {\n            list = pane && pane.querySelector('[role=\""menu\""]');\n        }\n\n        // If there's no list it means it's not been rendered...\n        if (!is.element(list)) {\n            return;\n        }\n\n        // Update the label\n        const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n        label.innerHTML = controls.getLabel.call(this, setting, value);\n\n        // Find the radio option and check it\n        const target = list && list.querySelector(`[value=\""${value}\""]`);\n\n        if (is.element(target)) {\n            target.checked = true;\n        }\n    },\n\n    // Translate a value into a nice label\n    getLabel(setting, value) {\n        switch (setting) {\n            case 'speed':\n                return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n            case 'quality':\n                if (is.number(value)) {\n                    const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n                    if (!label.length) {\n                        return `${value}p`;\n                    }\n\n                    return label;\n                }\n\n                return toTitleCase(value);\n\n            case 'captions':\n                return captions.getLabel.call(this);\n\n            default:\n                return null;\n        }\n    },\n\n    // Set the quality menu\n    setQualityMenu(options) {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.quality)) {\n            return;\n        }\n\n        const type = 'quality';\n        const list = this.elements.settings.panels.quality.querySelector('[role=\""menu\""]');\n\n        // Set options if passed and filter based on uniqueness and config\n        if (is.array(options)) {\n            this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n        }\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Get the badge HTML for HD, 4K etc\n        const getBadge = quality => {\n            const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n            if (!label.length) {\n                return null;\n            }\n\n            return controls.createBadge.call(this, label);\n        };\n\n        // Sort options by the config and then render options\n        this.options.quality\n            .sort((a, b) => {\n                const sorting = this.config.quality.options;\n                return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n            })\n            .forEach(quality => {\n                controls.createMenuItem.call(this, {\n                    value: quality,\n                    list,\n                    type,\n                    title: controls.getLabel.call(this, 'quality', quality),\n                    badge: getBadge(quality),\n                });\n            });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set the looping options\n    /* setLoopMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.loop)) {\n            return;\n        }\n\n        const options = ['start', 'end', 'all', 'reset'];\n        const list = this.elements.settings.panels.loop.querySelector('[role=\""menu\""]');\n\n        // Show the pane and tab\n        toggleHidden(this.elements.settings.buttons.loop, false);\n        toggleHidden(this.elements.settings.panels.loop, false);\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.loop.options);\n        controls.toggleMenuButton.call(this, 'loop', toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        options.forEach(option => {\n            const item = createElement('li');\n\n            const button = createElement(\n                'button',\n                extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n                    type: 'button',\n                    class: this.config.classNames.control,\n                    'data-plyr-loop-action': option,\n                }),\n                i18n.get(option, this.config)\n            );\n\n            if (['start', 'end'].includes(option)) {\n                const badge = controls.createBadge.call(this, '00:00');\n                button.appendChild(badge);\n            }\n\n            item.appendChild(button);\n            list.appendChild(item);\n        });\n    }, */\n\n    // Get current selected caption language\n    // TODO: rework this to user the getter in the API?\n\n    // Set a list of available captions languages\n    setCaptionsMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.captions)) {\n            return;\n        }\n\n        // TODO: Captions or language? Currently it's mixed\n        const type = 'captions';\n        const list = this.elements.settings.panels.captions.querySelector('[role=\""menu\""]');\n        const tracks = captions.getTracks.call(this);\n        const toggle = Boolean(tracks.length);\n\n        // Toggle the pane and tab\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If there's no captions, bail\n        if (!toggle) {\n            return;\n        }\n\n        // Generate options data\n        const options = tracks.map((track, value) => ({\n            value,\n            checked: this.captions.toggled && this.currentTrack === value,\n            title: captions.getLabel.call(this, track),\n            badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n            list,\n            type: 'language',\n        }));\n\n        // Add the \""Disabled\"" option to turn off captions\n        options.unshift({\n            value: -1,\n            checked: !this.captions.toggled,\n            title: i18n.get('disabled', this.config),\n            list,\n            type: 'language',\n        });\n\n        // Generate options\n        options.forEach(controls.createMenuItem.bind(this));\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set a list of available captions languages\n    setSpeedMenu(options) {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.speed)) {\n            return;\n        }\n\n        const type = 'speed';\n        const list = this.elements.settings.panels.speed.querySelector('[role=\""menu\""]');\n\n        // Set the speed options\n        if (is.array(options)) {\n            this.options.speed = options;\n        } else if (this.isHTML5 || this.isVimeo) {\n            this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n        }\n\n        // Set options if passed and filter based on config\n        this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Create items\n        this.options.speed.forEach(speed => {\n            controls.createMenuItem.call(this, {\n                value: speed,\n                list,\n                type,\n                title: controls.getLabel.call(this, 'speed', speed),\n            });\n        });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Check if we need to hide/show the settings menu\n    checkMenu() {\n        const { buttons } = this.elements.settings;\n        const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n        toggleHidden(this.elements.settings.menu, !visible);\n    },\n\n    // Focus the first menu item in a given (or visible) menu\n    focusFirstMenuItem(pane, tabFocus = false) {\n        if (this.elements.settings.popup.hidden) {\n            return;\n        }\n\n        let target = pane;\n\n        if (!is.element(target)) {\n            target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n        }\n\n        const firstItem = target.querySelector('[role^=\""menuitem\""]');\n\n        setFocus.call(this, firstItem, tabFocus);\n    },\n\n    // Show/hide menu\n    toggleMenu(input) {\n        const { popup } = this.elements.settings;\n        const button = this.elements.buttons.settings;\n\n        // Menu and button are required\n        if (!is.element(popup) || !is.element(button)) {\n            return;\n        }\n\n        // True toggle by default\n        const { hidden } = popup;\n        let show = hidden;\n\n        if (is.boolean(input)) {\n            show = input;\n        } else if (is.keyboardEvent(input) && input.which === 27) {\n            show = false;\n        } else if (is.event(input)) {\n            const isMenuItem = popup.contains(input.target);\n\n            // If the click was inside the menu or if the click\n            // wasn't the button or menu item and we're trying to\n            // show the menu (a doc click shouldn't show the menu)\n            if (isMenuItem || (!isMenuItem && input.target !== button && show)) {\n                return;\n            }\n        }\n\n        // Set button attributes\n        button.setAttribute('aria-expanded', show);\n\n        // Show the actual popup\n        toggleHidden(popup, !show);\n\n        // Add class hook\n        toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n        // Focus the first item if key interaction\n        if (show && is.keyboardEvent(input)) {\n            controls.focusFirstMenuItem.call(this, null, true);\n        } else if (!show && !hidden) {\n            // If closing, re-focus the button\n            setFocus.call(this, button, is.keyboardEvent(input));\n        }\n    },\n\n    // Get the natural size of a menu panel\n    getMenuSize(tab) {\n        const clone = tab.cloneNode(true);\n        clone.style.position = 'absolute';\n        clone.style.opacity = 0;\n        clone.removeAttribute('hidden');\n\n        // Append to parent so we get the \""real\"" size\n        tab.parentNode.appendChild(clone);\n\n        // Get the sizes before we remove\n        const width = clone.scrollWidth;\n        const height = clone.scrollHeight;\n\n        // Remove from the DOM\n        removeElement(clone);\n\n        return {\n            width,\n            height,\n        };\n    },\n\n    // Show a panel in the menu\n    showMenuPanel(type = '', tabFocus = false) {\n        const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n        // Nothing to show, bail\n        if (!is.element(target)) {\n            return;\n        }\n\n        // Hide all other panels\n        const container = target.parentNode;\n        const current = Array.from(container.children).find(node => !node.hidden);\n\n        // If we can do fancy animations, we'll animate the height/width\n        if (support.transitions && !support.reducedMotion) {\n            // Set the current width as a base\n            container.style.width = `${current.scrollWidth}px`;\n            container.style.height = `${current.scrollHeight}px`;\n\n            // Get potential sizes\n            const size = controls.getMenuSize.call(this, target);\n\n            // Restore auto height/width\n            const restore = event => {\n                // We're only bothered about height and width on the container\n                if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n                    return;\n                }\n\n                // Revert back to auto\n                container.style.width = '';\n                container.style.height = '';\n\n                // Only listen once\n                off.call(this, container, transitionEndEvent, restore);\n            };\n\n            // Listen for the transition finishing and restore auto height/width\n            on.call(this, container, transitionEndEvent, restore);\n\n            // Set dimensions to target\n            container.style.width = `${size.width}px`;\n            container.style.height = `${size.height}px`;\n        }\n\n        // Set attributes on current tab\n        toggleHidden(current, true);\n\n        // Set attributes on target\n        toggleHidden(target, false);\n\n        // Focus the first item\n        controls.focusFirstMenuItem.call(this, target, tabFocus);\n    },\n\n    // Set the download link\n    setDownloadLink() {\n        const button = this.elements.buttons.download;\n\n        // Bail if no button\n        if (!is.element(button)) {\n            return;\n        }\n\n        // Set download link\n        button.setAttribute('href', this.download);\n    },\n\n    // Build the default HTML\n    // TODO: Set order based on order in the config.controls array?\n    create(data) {\n        // Create the container\n        const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n        // Restart button\n        if (this.config.controls.includes('restart')) {\n            container.appendChild(controls.createButton.call(this, 'restart'));\n        }\n\n        // Rewind button\n        if (this.config.controls.includes('rewind')) {\n            container.appendChild(controls.createButton.call(this, 'rewind'));\n        }\n\n        // Play/Pause button\n        if (this.config.controls.includes('play')) {\n            container.appendChild(controls.createButton.call(this, 'play'));\n        }\n\n        // Fast forward button\n        if (this.config.controls.includes('fast-forward')) {\n            container.appendChild(controls.createButton.call(this, 'fast-forward'));\n        }\n\n        // Progress\n        if (this.config.controls.includes('progress')) {\n            const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n            // Seek range slider\n            progress.appendChild(\n                controls.createRange.call(this, 'seek', {\n                    id: `plyr-seek-${data.id}`,\n                }),\n            );\n\n            // Buffer progress\n            progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n            // TODO: Add loop display indicator\n\n            // Seek tooltip\n            if (this.config.tooltips.seek) {\n                const tooltip = createElement(\n                    'span',\n                    {\n                        class: this.config.classNames.tooltip,\n                    },\n                    '00:00',\n                );\n\n                progress.appendChild(tooltip);\n                this.elements.display.seekTooltip = tooltip;\n            }\n\n            this.elements.progress = progress;\n            container.appendChild(this.elements.progress);\n        }\n\n        // Media current time display\n        if (this.config.controls.includes('current-time')) {\n            container.appendChild(controls.createTime.call(this, 'currentTime'));\n        }\n\n        // Media duration display\n        if (this.config.controls.includes('duration')) {\n            container.appendChild(controls.createTime.call(this, 'duration'));\n        }\n\n        // Volume controls\n        if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n            const volume = createElement('div', {\n                class: 'plyr__volume',\n            });\n\n            // Toggle mute button\n            if (this.config.controls.includes('mute')) {\n                volume.appendChild(controls.createButton.call(this, 'mute'));\n            }\n\n            // Volume range control\n            if (this.config.controls.includes('volume')) {\n                // Set the attributes\n                const attributes = {\n                    max: 1,\n                    step: 0.05,\n                    value: this.config.volume,\n                };\n\n                // Create the volume range slider\n                volume.appendChild(\n                    controls.createRange.call(\n                        this,\n                        'volume',\n                        extend(attributes, {\n                            id: `plyr-volume-${data.id}`,\n                        }),\n                    ),\n                );\n\n                this.elements.volume = volume;\n            }\n\n            container.appendChild(volume);\n        }\n\n        // Toggle captions button\n        if (this.config.controls.includes('captions')) {\n            container.appendChild(controls.createButton.call(this, 'captions'));\n        }\n\n        // Settings button / menu\n        if (this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n            const control = createElement('div', {\n                class: 'plyr__menu',\n                hidden: '',\n            });\n\n            control.appendChild(\n                controls.createButton.call(this, 'settings', {\n                    'aria-haspopup': true,\n                    'aria-controls': `plyr-settings-${data.id}`,\n                    'aria-expanded': false,\n                }),\n            );\n\n            const popup = createElement('div', {\n                class: 'plyr__menu__container',\n                id: `plyr-settings-${data.id}`,\n                hidden: '',\n            });\n\n            const inner = createElement('div');\n\n            const home = createElement('div', {\n                id: `plyr-settings-${data.id}-home`,\n            });\n\n            // Create the menu\n            const menu = createElement('div', {\n                role: 'menu',\n            });\n\n            home.appendChild(menu);\n            inner.appendChild(home);\n            this.elements.settings.panels.home = home;\n\n            // Build the menu items\n            this.config.settings.forEach(type => {\n                // TODO: bundle this with the createMenuItem helper and bindings\n                const menuItem = createElement(\n                    'button',\n                    extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n                        type: 'button',\n                        class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n                        role: 'menuitem',\n                        'aria-haspopup': true,\n                        hidden: '',\n                    }),\n                );\n\n                // Bind menu shortcuts for keyboard users\n                controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n                // Show menu on click\n                on(menuItem, 'click', () => {\n                    controls.showMenuPanel.call(this, type, false);\n                });\n\n                const flex = createElement('span', null, i18n.get(type, this.config));\n\n                const value = createElement('span', {\n                    class: this.config.classNames.menu.value,\n                });\n\n                // Speed contains HTML entities\n                value.innerHTML = data[type];\n\n                flex.appendChild(value);\n                menuItem.appendChild(flex);\n                menu.appendChild(menuItem);\n\n                // Build the panes\n                const pane = createElement('div', {\n                    id: `plyr-settings-${data.id}-${type}`,\n                    hidden: '',\n                });\n\n                // Back button\n                const backButton = createElement('button', {\n                    type: 'button',\n                    class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n                });\n\n                // Visible label\n                backButton.appendChild(\n                    createElement(\n                        'span',\n                        {\n                            'aria-hidden': true,\n                        },\n                        i18n.get(type, this.config),\n                    ),\n                );\n\n                // Screen reader label\n                backButton.appendChild(\n                    createElement(\n                        'span',\n                        {\n                            class: this.config.classNames.hidden,\n                        },\n                        i18n.get('menuBack', this.config),\n                    ),\n                );\n\n                // Go back via keyboard\n                on(\n                    pane,\n                    'keydown',\n                    event => {\n                        // We only care about <-\n                        if (event.which !== 37) {\n                            return;\n                        }\n\n                        // Prevent seek\n                        event.preventDefault();\n                        event.stopPropagation();\n\n                        // Show the respective menu\n                        controls.showMenuPanel.call(this, 'home', true);\n                    },\n                    false,\n                );\n\n                // Go back via button click\n                on(backButton, 'click', () => {\n                    controls.showMenuPanel.call(this, 'home', false);\n                });\n\n                // Add to pane\n                pane.appendChild(backButton);\n\n                // Menu\n                pane.appendChild(\n                    createElement('div', {\n                        role: 'menu',\n                    }),\n                );\n\n                inner.appendChild(pane);\n\n                this.elements.settings.buttons[type] = menuItem;\n                this.elements.settings.panels[type] = pane;\n            });\n\n            popup.appendChild(inner);\n            control.appendChild(popup);\n            container.appendChild(control);\n\n            this.elements.settings.popup = popup;\n            this.elements.settings.menu = control;\n        }\n\n        // Picture in picture button\n        if (this.config.controls.includes('pip') && support.pip) {\n            container.appendChild(controls.createButton.call(this, 'pip'));\n        }\n\n        // Airplay button\n        if (this.config.controls.includes('airplay') && support.airplay) {\n            container.appendChild(controls.createButton.call(this, 'airplay'));\n        }\n\n        // Download button\n        if (this.config.controls.includes('download')) {\n            const attributes = {\n                element: 'a',\n                href: this.download,\n                target: '_blank',\n            };\n\n            const { download } = this.config.urls;\n\n            if (!is.url(download) && this.isEmbed) {\n                extend(attributes, {\n                    icon: `logo-${this.provider}`,\n                    label: this.provider,\n                });\n            }\n\n            container.appendChild(controls.createButton.call(this, 'download', attributes));\n        }\n\n        // Toggle fullscreen button\n        if (this.config.controls.includes('fullscreen')) {\n            container.appendChild(controls.createButton.call(this, 'fullscreen'));\n        }\n\n        // Larger overlaid play button\n        if (this.config.controls.includes('play-large')) {\n            this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n        }\n\n        this.elements.controls = container;\n\n        // Set available quality levels\n        if (this.isHTML5) {\n            controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n        }\n\n        controls.setSpeedMenu.call(this);\n\n        return container;\n    },\n\n    // Insert controls\n    inject() {\n        // Sprite\n        if (this.config.loadSprite) {\n            const icon = controls.getIconUrl.call(this);\n\n            // Only load external sprite using AJAX\n            if (icon.cors) {\n                loadSprite(icon.url, 'sprite-plyr');\n            }\n        }\n\n        // Create a unique ID\n        this.id = Math.floor(Math.random() * 10000);\n\n        // Null by default\n        let container = null;\n        this.elements.controls = null;\n\n        // Set template properties\n        const props = {\n            id: this.id,\n            seektime: this.config.seekTime,\n            title: this.config.title,\n        };\n        let update = true;\n\n        // If function, run it and use output\n        if (is.function(this.config.controls)) {\n            this.config.controls = this.config.controls.call(this, props);\n        }\n\n        // Convert falsy controls to empty array (primarily for empty strings)\n        if (!this.config.controls) {\n            this.config.controls = [];\n        }\n\n        if (is.element(this.config.controls) || is.string(this.config.controls)) {\n            // HTMLElement or Non-empty string passed as the option\n            container = this.config.controls;\n        } else {\n            // Create controls\n            container = controls.create.call(this, {\n                id: this.id,\n                seektime: this.config.seekTime,\n                speed: this.speed,\n                quality: this.quality,\n                captions: captions.getLabel.call(this),\n                // TODO: Looping\n                // loop: 'None',\n            });\n            update = false;\n        }\n\n        // Replace props with their value\n        const replace = input => {\n            let result = input;\n\n            Object.entries(props).forEach(([key, value]) => {\n                result = replaceAll(result, `{${key}}`, value);\n            });\n\n            return result;\n        };\n\n        // Update markup\n        if (update) {\n            if (is.string(this.config.controls)) {\n                container = replace(container);\n            } else if (is.element(container)) {\n                container.innerHTML = replace(container.innerHTML);\n            }\n        }\n\n        // Controls container\n        let target;\n\n        // Inject to custom location\n        if (is.string(this.config.selectors.controls.container)) {\n            target = document.querySelector(this.config.selectors.controls.container);\n        }\n\n        // Inject into the container by default\n        if (!is.element(target)) {\n            target = this.elements.container;\n        }\n\n        // Inject controls HTML (needs to be before captions, hence \""afterbegin\"")\n        const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n        target[insertMethod]('afterbegin', container);\n\n        // Find the elements if need be\n        if (!is.element(this.elements.controls)) {\n            controls.findElements.call(this);\n        }\n\n        // Add pressed property to buttons\n        if (!is.empty(this.elements.buttons)) {\n            const addProperty = button => {\n                const className = this.config.classNames.controlPressed;\n                Object.defineProperty(button, 'pressed', {\n                    enumerable: true,\n                    get() {\n                        return hasClass(button, className);\n                    },\n                    set(pressed = false) {\n                        toggleClass(button, className, pressed);\n                    },\n                });\n            };\n\n            // Toggle classname when pressed property is set\n            Object.values(this.elements.buttons)\n                .filter(Boolean)\n                .forEach(button => {\n                    if (is.array(button) || is.nodeList(button)) {\n                        Array.from(button).filter(Boolean).forEach(addProperty);\n                    } else {\n                        addProperty(button);\n                    }\n                });\n        }\n\n        // Edge sometimes doesn't finish the paint so force a redraw\n        if (window.navigator.userAgent.includes('Edge')) {\n            repaint(target);\n        }\n\n        // Setup tooltips\n        if (this.config.tooltips.controls) {\n            const { classNames, selectors } = this.config;\n            const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n            const labels = getElements.call(this, selector);\n\n            Array.from(labels).forEach(label => {\n                toggleClass(label, this.config.classNames.hidden, false);\n                toggleClass(label, this.config.classNames.tooltip, true);\n            });\n        }\n    },\n};\n\nexport default controls;\n"",""// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n    let url = input;\n\n    if (safe) {\n        const parser = document.createElement('a');\n        parser.href = url;\n        url = parser.href;\n    }\n\n    try {\n        return new URL(url);\n    } catch (e) {\n        return null;\n    }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n    const params = new URLSearchParams();\n\n    if (is.object(input)) {\n        Object.entries(input).forEach(([key, value]) => {\n            params.set(key, value);\n        });\n    }\n\n    return params;\n}\n"",""// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n    createElement,\n    emptyElement,\n    getAttributesFromSelector,\n    insertAfter,\n    removeElement,\n    toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n    // Setup captions\n    setup() {\n        // Requires UI support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Only Vimeo and HTML5 video supported at this point\n        if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n            // Clear menu and hide\n            if (\n                is.array(this.config.controls) &&\n                this.config.controls.includes('settings') &&\n                this.config.settings.includes('captions')\n            ) {\n                controls.setCaptionsMenu.call(this);\n            }\n\n            return;\n        }\n\n        // Inject the container\n        if (!is.element(this.elements.captions)) {\n            this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n            insertAfter(this.elements.captions, this.elements.wrapper);\n        }\n\n        // Fix IE captions if CORS is used\n        // Fetch captions and inject as blobs instead (data URIs not supported!)\n        if (browser.isIE && window.URL) {\n            const elements = this.media.querySelectorAll('track');\n\n            Array.from(elements).forEach(track => {\n                const src = track.getAttribute('src');\n                const url = parseUrl(src);\n\n                if (\n                    url !== null &&\n                    url.hostname !== window.location.href.hostname &&\n                    ['http:', 'https:'].includes(url.protocol)\n                ) {\n                    fetch(src, 'blob')\n                        .then(blob => {\n                            track.setAttribute('src', window.URL.createObjectURL(blob));\n                        })\n                        .catch(() => {\n                            removeElement(track);\n                        });\n                }\n            });\n        }\n\n        // Get and set initial data\n        // The \""preferred\"" options are not realized unless / until the wanted language has a match\n        // * languages: Array of user's browser languages.\n        // * language:  The language preferred by user settings or config\n        // * active:    The state preferred by user settings or config\n        // * toggled:   The real captions state\n\n        const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n        const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n        let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n        // Use first browser language when language is 'auto'\n        if (language === 'auto') {\n            [language] = languages;\n        }\n\n        let active = this.storage.get('captions');\n        if (!is.boolean(active)) {\n            ({ active } = this.config.captions);\n        }\n\n        Object.assign(this.captions, {\n            toggled: false,\n            active,\n            language,\n            languages,\n        });\n\n        // Watch changes to textTracks and update captions menu\n        if (this.isHTML5) {\n            const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n            on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n        }\n\n        // Update available languages in list next tick (the event must not be triggered before the listeners)\n        setTimeout(captions.update.bind(this), 0);\n    },\n\n    // Update available language options in settings based on tracks\n    update() {\n        const tracks = captions.getTracks.call(this, true);\n        // Get the wanted language\n        const { active, language, meta, currentTrackNode } = this.captions;\n        const languageExists = Boolean(tracks.find(track => track.language === language));\n\n        // Handle tracks (add event listener and \""pseudo\""-default)\n        if (this.isHTML5 && this.isVideo) {\n            tracks.filter(track => !meta.get(track)).forEach(track => {\n                this.debug.log('Track added', track);\n                // Attempt to store if the original dom element was \""default\""\n                meta.set(track, {\n                    default: track.mode === 'showing',\n                });\n\n                // Turn off native caption rendering to avoid double captions\n                track.mode = 'hidden';\n\n                // Add event listener for cue changes\n                on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n            });\n        }\n\n        // Update language first time it matches, or if the previous matching track was removed\n        if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n            captions.setLanguage.call(this, language);\n            captions.toggle.call(this, active && languageExists);\n        }\n\n        // Enable or disable captions based on track length\n        toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n        // Update available languages in list\n        if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n            controls.setCaptionsMenu.call(this);\n        }\n    },\n\n    // Toggle captions display\n    // Used internally for the toggleCaptions method, with the passive option forced to false\n    toggle(input, passive = true) {\n        // If there's no full support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        const { toggled } = this.captions; // Current state\n        const activeClass = this.config.classNames.captions.active;\n\n        // Get the next state\n        // If the method is called without parameter, toggle based on current value\n        const active = is.nullOrUndefined(input) ? !toggled : input;\n\n        // Update state and trigger event\n        if (active !== toggled) {\n            // When passive, don't override user preferences\n            if (!passive) {\n                this.captions.active = active;\n                this.storage.set({ captions: active });\n            }\n\n            // Force language if the call isn't passive and there is no matching language to toggle to\n            if (!this.language && active && !passive) {\n                const tracks = captions.getTracks.call(this);\n                const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n                // Override user preferences to avoid switching languages if a matching track is added\n                this.captions.language = track.language;\n\n                // Set caption, but don't store in localStorage as user preference\n                captions.set.call(this, tracks.indexOf(track));\n                return;\n            }\n\n            // Toggle button if it's enabled\n            if (this.elements.buttons.captions) {\n                this.elements.buttons.captions.pressed = active;\n            }\n\n            // Add class hook\n            toggleClass(this.elements.container, activeClass, active);\n\n            this.captions.toggled = active;\n\n            // Update settings menu\n            controls.updateSetting.call(this, 'captions');\n\n            // Trigger event (not used internally)\n            triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n        }\n    },\n\n    // Set captions by track index\n    // Used internally for the currentTrack setter with the passive option forced to false\n    set(index, passive = true) {\n        const tracks = captions.getTracks.call(this);\n\n        // Disable captions if setting to -1\n        if (index === -1) {\n            captions.toggle.call(this, false, passive);\n            return;\n        }\n\n        if (!is.number(index)) {\n            this.debug.warn('Invalid caption argument', index);\n            return;\n        }\n\n        if (!(index in tracks)) {\n            this.debug.warn('Track not found', index);\n            return;\n        }\n\n        if (this.captions.currentTrack !== index) {\n            this.captions.currentTrack = index;\n            const track = tracks[index];\n            const { language } = track || {};\n\n            // Store reference to node for invalidation on remove\n            this.captions.currentTrackNode = track;\n\n            // Update settings menu\n            controls.updateSetting.call(this, 'captions');\n\n            // When passive, don't override user preferences\n            if (!passive) {\n                this.captions.language = language;\n                this.storage.set({ language });\n            }\n\n            // Handle Vimeo captions\n            if (this.isVimeo) {\n                this.embed.enableTextTrack(language);\n            }\n\n            // Trigger event\n            triggerEvent.call(this, this.media, 'languagechange');\n        }\n\n        // Show captions\n        captions.toggle.call(this, true, passive);\n\n        if (this.isHTML5 && this.isVideo) {\n            // If we change the active track while a cue is already displayed we need to update it\n            captions.updateCues.call(this);\n        }\n    },\n\n    // Set captions by language\n    // Used internally for the language setter with the passive option forced to false\n    setLanguage(input, passive = true) {\n        if (!is.string(input)) {\n            this.debug.warn('Invalid language argument', input);\n            return;\n        }\n        // Normalize\n        const language = input.toLowerCase();\n        this.captions.language = language;\n\n        // Set currentTrack\n        const tracks = captions.getTracks.call(this);\n        const track = captions.findTrack.call(this, [language]);\n        captions.set.call(this, tracks.indexOf(track), passive);\n    },\n\n    // Get current valid caption tracks\n    // If update is false it will also ignore tracks without metadata\n    // This is used to \""freeze\"" the language options when captions.update is false\n    getTracks(update = false) {\n        // Handle media or textTracks missing or null\n        const tracks = Array.from((this.media || {}).textTracks || []);\n        // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n        // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n        return tracks\n            .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n            .filter(track => ['captions', 'subtitles'].includes(track.kind));\n    },\n\n    // Match tracks based on languages and get the first\n    findTrack(languages, force = false) {\n        const tracks = captions.getTracks.call(this);\n        const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n        const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n        let track;\n        languages.every(language => {\n            track = sorted.find(track => track.language === language);\n            return !track; // Break iteration if there is a match\n        });\n        // If no match is found but is required, get first\n        return track || (force ? sorted[0] : undefined);\n    },\n\n    // Get the current track\n    getCurrentTrack() {\n        return captions.getTracks.call(this)[this.currentTrack];\n    },\n\n    // Get UI label for track\n    getLabel(track) {\n        let currentTrack = track;\n\n        if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n            currentTrack = captions.getCurrentTrack.call(this);\n        }\n\n        if (is.track(currentTrack)) {\n            if (!is.empty(currentTrack.label)) {\n                return currentTrack.label;\n            }\n\n            if (!is.empty(currentTrack.language)) {\n                return track.language.toUpperCase();\n            }\n\n            return i18n.get('enabled', this.config);\n        }\n\n        return i18n.get('disabled', this.config);\n    },\n\n    // Update captions using current track's active cues\n    // Also optional array argument in case there isn't any track (ex: vimeo)\n    updateCues(input) {\n        // Requires UI\n        if (!this.supported.ui) {\n            return;\n        }\n\n        if (!is.element(this.elements.captions)) {\n            this.debug.warn('No captions element to render to');\n            return;\n        }\n\n        // Only accept array or empty input\n        if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n            this.debug.warn('updateCues: Invalid input', input);\n            return;\n        }\n\n        let cues = input;\n\n        // Get cues from track\n        if (!cues) {\n            const track = captions.getCurrentTrack.call(this);\n            cues = Array.from((track || {}).activeCues || [])\n                .map(cue => cue.getCueAsHTML())\n                .map(getHTML);\n        }\n\n        // Set new caption text\n        const content = cues.map(cueText => cueText.trim()).join('\\n');\n        const changed = content !== this.elements.captions.innerHTML;\n\n        if (changed) {\n            // Empty the container and create a new child element\n            emptyElement(this.elements.captions);\n            const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n            caption.innerHTML = content;\n            this.elements.captions.appendChild(caption);\n\n            // Trigger event\n            triggerEvent.call(this, this.media, 'cuechange');\n        }\n    },\n};\n\nexport default captions;\n"",""// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n    // Disable\n    enabled: true,\n\n    // Custom media title\n    title: '',\n\n    // Logging to console\n    debug: false,\n\n    // Auto play (if supported)\n    autoplay: false,\n\n    // Only allow one media playing at once (vimeo only)\n    autopause: true,\n\n    // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n    // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n    playsinline: true,\n\n    // Default time to skip when rewind/fast forward\n    seekTime: 10,\n\n    // Default volume\n    volume: 1,\n    muted: false,\n\n    // Pass a custom duration\n    duration: null,\n\n    // Display the media duration on load in the current time position\n    // If you have opted to display both duration and currentTime, this is ignored\n    displayDuration: true,\n\n    // Invert the current time to be a countdown\n    invertTime: true,\n\n    // Clicking the currentTime inverts it's value to show time left rather than elapsed\n    toggleInvert: true,\n\n    // Aspect ratio (for embeds)\n    ratio: '16:9',\n\n    // Click video container to play/pause\n    clickToPlay: true,\n\n    // Auto hide the controls\n    hideControls: true,\n\n    // Reset to start when playback ended\n    resetOnEnd: false,\n\n    // Disable the standard context menu\n    disableContextMenu: true,\n\n    // Sprite (for icons)\n    loadSprite: true,\n    iconPrefix: 'plyr',\n    iconUrl: 'https://cdn.plyr.io/3.4.8/plyr.svg',\n\n    // Blank video (used to prevent errors on source change)\n    blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n    // Quality default\n    quality: {\n        default: 576,\n        options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n    },\n\n    // Set loops\n    loop: {\n        active: false,\n        // start: null,\n        // end: null,\n    },\n\n    // Speed default and options to display\n    speed: {\n        selected: 1,\n        options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n    },\n\n    // Keyboard shortcut settings\n    keyboard: {\n        focused: true,\n        global: false,\n    },\n\n    // Display tooltips\n    tooltips: {\n        controls: false,\n        seek: true,\n    },\n\n    // Captions settings\n    captions: {\n        active: false,\n        language: 'auto',\n        // Listen to new tracks added after Plyr is initialized.\n        // This is needed for streaming captions, but may result in unselectable options\n        update: false,\n    },\n\n    // Fullscreen settings\n    fullscreen: {\n        enabled: true, // Allow fullscreen?\n        fallback: true, // Fallback for vintage browsers\n        iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n    },\n\n    // Local storage\n    storage: {\n        enabled: true,\n        key: 'plyr',\n    },\n\n    // Default controls\n    controls: [\n        'play-large',\n        // 'restart',\n        // 'rewind',\n        'play',\n        // 'fast-forward',\n        'progress',\n        'current-time',\n        'mute',\n        'volume',\n        'captions',\n        'settings',\n        'pip',\n        'airplay',\n        // 'download',\n        'fullscreen',\n    ],\n    settings: ['captions', 'quality', 'speed'],\n\n    // Localisation\n    i18n: {\n        restart: 'Restart',\n        rewind: 'Rewind {seektime}s',\n        play: 'Play',\n        pause: 'Pause',\n        fastForward: 'Forward {seektime}s',\n        seek: 'Seek',\n        seekLabel: '{currentTime} of {duration}',\n        played: 'Played',\n        buffered: 'Buffered',\n        currentTime: 'Current time',\n        duration: 'Duration',\n        volume: 'Volume',\n        mute: 'Mute',\n        unmute: 'Unmute',\n        enableCaptions: 'Enable captions',\n        disableCaptions: 'Disable captions',\n        download: 'Download',\n        enterFullscreen: 'Enter fullscreen',\n        exitFullscreen: 'Exit fullscreen',\n        frameTitle: 'Player for {title}',\n        captions: 'Captions',\n        settings: 'Settings',\n        menuBack: 'Go back to previous menu',\n        speed: 'Speed',\n        normal: 'Normal',\n        quality: 'Quality',\n        loop: 'Loop',\n        start: 'Start',\n        end: 'End',\n        all: 'All',\n        reset: 'Reset',\n        disabled: 'Disabled',\n        enabled: 'Enabled',\n        advertisement: 'Ad',\n        qualityBadge: {\n            2160: '4K',\n            1440: 'HD',\n            1080: 'HD',\n            720: 'HD',\n            576: 'SD',\n            480: 'SD',\n        },\n    },\n\n    // URLs\n    urls: {\n        download: null,\n        vimeo: {\n            sdk: 'https://player.vimeo.com/api/player.js',\n            iframe: 'https://player.vimeo.com/video/{0}?{1}',\n            api: 'https://vimeo.com/api/v2/video/{0}.json',\n        },\n        youtube: {\n            sdk: 'https://www.youtube.com/iframe_api',\n            api:\n                'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n        },\n        googleIMA: {\n            sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n        },\n    },\n\n    // Custom control listeners\n    listeners: {\n        seek: null,\n        play: null,\n        pause: null,\n        restart: null,\n        rewind: null,\n        fastForward: null,\n        mute: null,\n        volume: null,\n        captions: null,\n        download: null,\n        fullscreen: null,\n        pip: null,\n        airplay: null,\n        speed: null,\n        quality: null,\n        loop: null,\n        language: null,\n    },\n\n    // Events to watch and bubble\n    events: [\n        // Events to watch on HTML5 media elements and bubble\n        // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n        'ended',\n        'progress',\n        'stalled',\n        'playing',\n        'waiting',\n        'canplay',\n        'canplaythrough',\n        'loadstart',\n        'loadeddata',\n        'loadedmetadata',\n        'timeupdate',\n        'volumechange',\n        'play',\n        'pause',\n        'error',\n        'seeking',\n        'seeked',\n        'emptied',\n        'ratechange',\n        'cuechange',\n\n        // Custom events\n        'download',\n        'enterfullscreen',\n        'exitfullscreen',\n        'captionsenabled',\n        'captionsdisabled',\n        'languagechange',\n        'controlshidden',\n        'controlsshown',\n        'ready',\n\n        // YouTube\n        'statechange',\n\n        // Quality\n        'qualitychange',\n\n        // Ads\n        'adsloaded',\n        'adscontentpause',\n        'adscontentresume',\n        'adstarted',\n        'adsmidpoint',\n        'adscomplete',\n        'adsallcomplete',\n        'adsimpression',\n        'adsclick',\n    ],\n\n    // Selectors\n    // Change these to match your template if using custom HTML\n    selectors: {\n        editable: 'input, textarea, select, [contenteditable]',\n        container: '.plyr',\n        controls: {\n            container: null,\n            wrapper: '.plyr__controls',\n        },\n        labels: '[data-plyr]',\n        buttons: {\n            play: '[data-plyr=\""play\""]',\n            pause: '[data-plyr=\""pause\""]',\n            restart: '[data-plyr=\""restart\""]',\n            rewind: '[data-plyr=\""rewind\""]',\n            fastForward: '[data-plyr=\""fast-forward\""]',\n            mute: '[data-plyr=\""mute\""]',\n            captions: '[data-plyr=\""captions\""]',\n            download: '[data-plyr=\""download\""]',\n            fullscreen: '[data-plyr=\""fullscreen\""]',\n            pip: '[data-plyr=\""pip\""]',\n            airplay: '[data-plyr=\""airplay\""]',\n            settings: '[data-plyr=\""settings\""]',\n            loop: '[data-plyr=\""loop\""]',\n        },\n        inputs: {\n            seek: '[data-plyr=\""seek\""]',\n            volume: '[data-plyr=\""volume\""]',\n            speed: '[data-plyr=\""speed\""]',\n            language: '[data-plyr=\""language\""]',\n            quality: '[data-plyr=\""quality\""]',\n        },\n        display: {\n            currentTime: '.plyr__time--current',\n            duration: '.plyr__time--duration',\n            buffer: '.plyr__progress__buffer',\n            loop: '.plyr__progress__loop', // Used later\n            volume: '.plyr__volume--display',\n        },\n        progress: '.plyr__progress',\n        captions: '.plyr__captions',\n        caption: '.plyr__caption',\n        menu: {\n            quality: '.js-plyr__menu__list--quality',\n        },\n    },\n\n    // Class hooks added to the player in different states\n    classNames: {\n        type: 'plyr--{0}',\n        provider: 'plyr--{0}',\n        video: 'plyr__video-wrapper',\n        embed: 'plyr__video-embed',\n        embedContainer: 'plyr__video-embed__container',\n        poster: 'plyr__poster',\n        posterEnabled: 'plyr__poster-enabled',\n        ads: 'plyr__ads',\n        control: 'plyr__control',\n        controlPressed: 'plyr__control--pressed',\n        playing: 'plyr--playing',\n        paused: 'plyr--paused',\n        stopped: 'plyr--stopped',\n        loading: 'plyr--loading',\n        hover: 'plyr--hover',\n        tooltip: 'plyr__tooltip',\n        cues: 'plyr__cues',\n        hidden: 'plyr__sr-only',\n        hideControls: 'plyr--hide-controls',\n        isIos: 'plyr--is-ios',\n        isTouch: 'plyr--is-touch',\n        uiSupported: 'plyr--full-ui',\n        noTransition: 'plyr--no-transition',\n        display: {\n            time: 'plyr__time',\n        },\n        menu: {\n            value: 'plyr__menu__value',\n            badge: 'plyr__badge',\n            open: 'plyr--menu-open',\n        },\n        captions: {\n            enabled: 'plyr--captions-enabled',\n            active: 'plyr--captions-active',\n        },\n        fullscreen: {\n            enabled: 'plyr--fullscreen-enabled',\n            fallback: 'plyr--fullscreen-fallback',\n        },\n        pip: {\n            supported: 'plyr--pip-supported',\n            active: 'plyr--pip-active',\n        },\n        airplay: {\n            supported: 'plyr--airplay-supported',\n            active: 'plyr--airplay-active',\n        },\n        tabFocus: 'plyr__tab-focus',\n    },\n\n    // Embed attributes\n    attributes: {\n        embed: {\n            provider: 'data-plyr-provider',\n            id: 'data-plyr-embed-id',\n        },\n    },\n\n    // API keys\n    keys: {\n        google: null,\n    },\n\n    // Advertisements plugin\n    // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n    ads: {\n        enabled: false,\n        publisherId: '',\n    },\n};\n\nexport default defaults;\n"",""// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n    active: 'picture-in-picture',\n    inactive: 'inline',\n};\n\nexport default { pip };\n"",""// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n    html5: 'html5',\n    youtube: 'youtube',\n    vimeo: 'vimeo',\n};\n\nexport const types = {\n    audio: 'audio',\n    video: 'video',\n};\n\n/**\n * Get provider by URL\n * @param {String} url\n */\nexport function getProviderByUrl(url) {\n    // YouTube\n    if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n        return providers.youtube;\n    }\n\n    // Vimeo\n    if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n        return providers.vimeo;\n    }\n\n    return null;\n}\n\nexport default { providers, types };\n"",""// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n    constructor(enabled = false) {\n        this.enabled = window.console && enabled;\n\n        if (this.enabled) {\n            this.log('Debugging enabled');\n        }\n    }\n\n    get log() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n    }\n\n    get warn() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n    }\n\n    get error() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n    }\n}\n"",""// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nfunction onChange() {\n    if (!this.enabled) {\n        return;\n    }\n\n    // Update toggle button\n    const button = this.player.elements.buttons.fullscreen;\n    if (is.element(button)) {\n        button.pressed = this.active;\n    }\n\n    // Trigger an event\n    triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n    // Trap focus in container\n    if (!browser.isIos) {\n        trapFocus.call(this.player, this.target, this.active);\n    }\n}\n\nfunction toggleFallback(toggle = false) {\n    // Store or restore scroll position\n    if (toggle) {\n        this.scrollPosition = {\n            x: window.scrollX || 0,\n            y: window.scrollY || 0,\n        };\n    } else {\n        window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n    }\n\n    // Toggle scroll\n    document.body.style.overflow = toggle ? 'hidden' : '';\n\n    // Toggle class hook\n    toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n    // Force full viewport on iPhone X+\n    if (browser.isIos) {\n        let viewport = document.head.querySelector('meta[name=\""viewport\""]');\n        const property = 'viewport-fit=cover';\n\n        // Inject the viewport meta if required\n        if (!viewport) {\n            viewport = document.createElement('meta');\n            viewport.setAttribute('name', 'viewport');\n        }\n\n        // Check if the property already exists\n        const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n        if (toggle) {\n            this.cleanupViewport = !hasProperty;\n\n            if (!hasProperty) {\n                viewport.content += `,${property}`;\n            }\n        } else if (this.cleanupViewport) {\n            viewport.content = viewport.content\n                .split(',')\n                .filter(part => part.trim() !== property)\n                .join(',');\n        }\n\n        // Force a repaint as sometimes Safari doesn't want to fill the screen\n        setTimeout(() => repaint(this.target), 100);\n    }\n\n    // Toggle button and fire events\n    onChange.call(this);\n}\n\nclass Fullscreen {\n    constructor(player) {\n        // Keep reference to parent\n        this.player = player;\n\n        // Get prefix\n        this.prefix = Fullscreen.prefix;\n        this.property = Fullscreen.property;\n\n        // Scroll position\n        this.scrollPosition = { x: 0, y: 0 };\n\n        // Register event listeners\n        // Handle event (incase user presses escape etc)\n        on.call(\n            this.player,\n            document,\n            this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n            () => {\n                // TODO: Filter for target??\n                onChange.call(this);\n            },\n        );\n\n        // Fullscreen toggle on double click\n        on.call(this.player, this.player.elements.container, 'dblclick', event => {\n            // Ignore double click in controls\n            if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n                return;\n            }\n\n            this.toggle();\n        });\n\n        // Update the UI\n        this.update();\n    }\n\n    // Determine if native supported\n    static get native() {\n        return !!(\n            document.fullscreenEnabled ||\n            document.webkitFullscreenEnabled ||\n            document.mozFullScreenEnabled ||\n            document.msFullscreenEnabled\n        );\n    }\n\n    // Get the prefix for handlers\n    static get prefix() {\n        // No prefix\n        if (is.function(document.exitFullscreen)) {\n            return '';\n        }\n\n        // Check for fullscreen support by vendor prefix\n        let value = '';\n        const prefixes = ['webkit', 'moz', 'ms'];\n\n        prefixes.some(pre => {\n            if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n                value = pre;\n                return true;\n            }\n\n            return false;\n        });\n\n        return value;\n    }\n\n    static get property() {\n        return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n    }\n\n    // Determine if fullscreen is enabled\n    get enabled() {\n        return (\n            (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n            this.player.config.fullscreen.enabled &&\n            this.player.supported.ui &&\n            this.player.isVideo\n        );\n    }\n\n    // Get active state\n    get active() {\n        if (!this.enabled) {\n            return false;\n        }\n\n        // Fallback using classname\n        if (!Fullscreen.native) {\n            return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n        }\n\n        const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n        return element === this.target;\n    }\n\n    // Get target element\n    get target() {\n        return browser.isIos && this.player.config.fullscreen.iosNative\n            ? this.player.media\n            : this.player.elements.container;\n    }\n\n    // Update UI\n    update() {\n        if (this.enabled) {\n            this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n        } else {\n            this.player.debug.log('Fullscreen not supported and fallback disabled');\n        }\n\n        // Add styling hook to show button\n        toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n    }\n\n    // Make an element fullscreen\n    enter() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen doesn't need the request step\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitEnterFullscreen();\n        } else if (!Fullscreen.native) {\n            toggleFallback.call(this, true);\n        } else if (!this.prefix) {\n            this.target.requestFullscreen();\n        } else if (!is.empty(this.prefix)) {\n            this.target[`${this.prefix}Request${this.property}`]();\n        }\n    }\n\n    // Bail from fullscreen\n    exit() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitExitFullscreen();\n            this.player.play();\n        } else if (!Fullscreen.native) {\n            toggleFallback.call(this, false);\n        } else if (!this.prefix) {\n            (document.cancelFullScreen || document.exitFullscreen).call(document);\n        } else if (!is.empty(this.prefix)) {\n            const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n            document[`${this.prefix}${action}${this.property}`]();\n        }\n    }\n\n    // Toggle state\n    toggle() {\n        if (!this.active) {\n            this.enter();\n        } else {\n            this.exit();\n        }\n    }\n}\n\nexport default Fullscreen;\n"",""// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n  // eslint-disable-next-line no-self-compare\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n"",""// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n"",""// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \""naturalWidth\"" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n    return new Promise((resolve, reject) => {\n        const image = new Image();\n\n        const handler = () => {\n            delete image.onload;\n            delete image.onerror;\n            (image.naturalWidth >= minWidth ? resolve : reject)(image);\n        };\n\n        Object.assign(image, { onload: handler, onerror: handler, src });\n    });\n}\n"",""// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n    addStyleHook() {\n        toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n        toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n    },\n\n    // Toggle native HTML5 media controls\n    toggleNativeControls(toggle = false) {\n        if (toggle && this.isHTML5) {\n            this.media.setAttribute('controls', '');\n        } else {\n            this.media.removeAttribute('controls');\n        }\n    },\n\n    // Setup the UI\n    build() {\n        // Re-attach media element listeners\n        // TODO: Use event bubbling?\n        this.listeners.media();\n\n        // Don't setup interface if no support\n        if (!this.supported.ui) {\n            this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n            // Restore native controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Bail\n            return;\n        }\n\n        // Inject custom controls if not present\n        if (!is.element(this.elements.controls)) {\n            // Inject custom controls\n            controls.inject.call(this);\n\n            // Re-attach control listeners\n            this.listeners.controls();\n        }\n\n        // Remove native controls\n        ui.toggleNativeControls.call(this);\n\n        // Setup captions for HTML5\n        if (this.isHTML5) {\n            captions.setup.call(this);\n        }\n\n        // Reset volume\n        this.volume = null;\n\n        // Reset mute state\n        this.muted = null;\n\n        // Reset speed\n        this.speed = null;\n\n        // Reset loop state\n        this.loop = null;\n\n        // Reset quality setting\n        this.quality = null;\n\n        // Reset volume display\n        controls.updateVolume.call(this);\n\n        // Reset time display\n        controls.timeUpdate.call(this);\n\n        // Update the UI\n        ui.checkPlaying.call(this);\n\n        // Check for picture-in-picture support\n        toggleClass(\n            this.elements.container,\n            this.config.classNames.pip.supported,\n            support.pip && this.isHTML5 && this.isVideo,\n        );\n\n        // Check for airplay support\n        toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n        // Add iOS class\n        toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n        // Add touch class\n        toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n        // Ready for API calls\n        this.ready = true;\n\n        // Ready event at end of execution stack\n        setTimeout(() => {\n            triggerEvent.call(this, this.media, 'ready');\n        }, 0);\n\n        // Set the title\n        ui.setTitle.call(this);\n\n        // Assure the poster image is set, if the property was added before the element was created\n        if (this.poster) {\n            ui.setPoster.call(this, this.poster, false).catch(() => {});\n        }\n\n        // Manually set the duration if user has overridden it.\n        // The event listeners for it doesn't get called if preload is disabled (#701)\n        if (this.config.duration) {\n            controls.durationUpdate.call(this);\n        }\n    },\n\n    // Setup aria attribute for play and iframe title\n    setTitle() {\n        // Find the current text\n        let label = i18n.get('play', this.config);\n\n        // If there's a media title set, use that for the label\n        if (is.string(this.config.title) && !is.empty(this.config.title)) {\n            label += `, ${this.config.title}`;\n        }\n\n        // If there's a play button, set label\n        Array.from(this.elements.buttons.play || []).forEach(button => {\n            button.setAttribute('aria-label', label);\n        });\n\n        // Set iframe title\n        // https://github.com/sampotts/plyr/issues/124\n        if (this.isEmbed) {\n            const iframe = getElement.call(this, 'iframe');\n\n            if (!is.element(iframe)) {\n                return;\n            }\n\n            // Default to media type\n            const title = !is.empty(this.config.title) ? this.config.title : 'video';\n            const format = i18n.get('frameTitle', this.config);\n\n            iframe.setAttribute('title', format.replace('{title}', title));\n        }\n    },\n\n    // Toggle poster\n    togglePoster(enable) {\n        toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n    },\n\n    // Set the poster image (async)\n    // Used internally for the poster setter, with the passive option forced to false\n    setPoster(poster, passive = true) {\n        // Don't override if call is passive\n        if (passive && this.poster) {\n            return Promise.reject(new Error('Poster already set'));\n        }\n\n        // Set property synchronously to respect the call order\n        this.media.setAttribute('poster', poster);\n\n        // Wait until ui is ready\n        return (\n            ready\n                .call(this)\n                // Load image\n                .then(() => loadImage(poster))\n                .catch(err => {\n                    // Hide poster on error unless it's been set by another call\n                    if (poster === this.poster) {\n                        ui.togglePoster.call(this, false);\n                    }\n                    // Rethrow\n                    throw err;\n                })\n                .then(() => {\n                    // Prevent race conditions\n                    if (poster !== this.poster) {\n                        throw new Error('setPoster cancelled by later call to setPoster');\n                    }\n                })\n                .then(() => {\n                    Object.assign(this.elements.poster.style, {\n                        backgroundImage: `url('${poster}')`,\n                        // Reset backgroundSize as well (since it can be set to \""cover\"" for padded thumbnails for youtube)\n                        backgroundSize: '',\n                    });\n                    ui.togglePoster.call(this, true);\n                    return poster;\n                })\n        );\n    },\n\n    // Check playing state\n    checkPlaying(event) {\n        // Class hooks\n        toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n        toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n        toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n        // Set state\n        Array.from(this.elements.buttons.play || []).forEach(target => {\n            target.pressed = this.playing;\n        });\n\n        // Only update controls on non timeupdate events\n        if (is.event(event) && event.type === 'timeupdate') {\n            return;\n        }\n\n        // Toggle controls\n        ui.toggleControls.call(this);\n    },\n\n    // Check if media is loading\n    checkLoading(event) {\n        this.loading = ['stalled', 'waiting'].includes(event.type);\n\n        // Clear timer\n        clearTimeout(this.timers.loading);\n\n        // Timer to prevent flicker when seeking\n        this.timers.loading = setTimeout(() => {\n            // Update progress bar loading class state\n            toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n            // Update controls visibility\n            ui.toggleControls.call(this);\n        }, this.loading ? 250 : 0);\n    },\n\n    // Toggle controls based on state and `force` argument\n    toggleControls(force) {\n        const { controls } = this.elements;\n\n        if (controls && this.config.hideControls) {\n            // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n            const recentTouchSeek = (this.touch && this.lastSeekTime + 2000 > Date.now());\n\n            // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n            this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n        }\n    },\n};\n\nexport default ui;\n"",""// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n    constructor(player) {\n        this.player = player;\n        this.lastKey = null;\n        this.focusTimer = null;\n        this.lastKeyDown = null;\n\n        this.handleKey = this.handleKey.bind(this);\n        this.toggleMenu = this.toggleMenu.bind(this);\n        this.setTabFocus = this.setTabFocus.bind(this);\n        this.firstTouch = this.firstTouch.bind(this);\n    }\n\n    // Handle key presses\n    handleKey(event) {\n        const { player } = this;\n        const { elements } = player;\n        const code = event.keyCode ? event.keyCode : event.which;\n        const pressed = event.type === 'keydown';\n        const repeat = pressed && code === this.lastKey;\n\n        // Bail if a modifier key is set\n        if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n            return;\n        }\n\n        // If the event is bubbled from the media element\n        // Firefox doesn't get the keycode for whatever reason\n        if (!is.number(code)) {\n            return;\n        }\n\n        // Seek by the number keys\n        const seekByKey = () => {\n            // Divide the max duration into 10th's and times by the number value\n            player.currentTime = (player.duration / 10) * (code - 48);\n        };\n\n        // Handle the key on keydown\n        // Reset on keyup\n        if (pressed) {\n            // Check focused element\n            // and if the focused element is not editable (e.g. text input)\n            // and any that accept key input http://webaim.org/techniques/keyboard/\n            const focused = document.activeElement;\n            if (is.element(focused)) {\n                const { editable } = player.config.selectors;\n                const { seek } = elements.inputs;\n\n                if (focused !== seek && matches(focused, editable)) {\n                    return;\n                }\n\n                if (event.which === 32 && matches(focused, 'button, [role^=\""menuitem\""]')) {\n                    return;\n                }\n            }\n\n            // Which keycodes should we prevent default\n            const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\n\n            // If the code is found prevent default (e.g. prevent scrolling for arrows)\n            if (preventDefault.includes(code)) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            switch (code) {\n                case 48:\n                case 49:\n                case 50:\n                case 51:\n                case 52:\n                case 53:\n                case 54:\n                case 55:\n                case 56:\n                case 57:\n                    // 0-9\n                    if (!repeat) {\n                        seekByKey();\n                    }\n                    break;\n\n                case 32:\n                case 75:\n                    // Space and K key\n                    if (!repeat) {\n                        player.togglePlay();\n                    }\n                    break;\n\n                case 38:\n                    // Arrow up\n                    player.increaseVolume(0.1);\n                    break;\n\n                case 40:\n                    // Arrow down\n                    player.decreaseVolume(0.1);\n                    break;\n\n                case 77:\n                    // M key\n                    if (!repeat) {\n                        player.muted = !player.muted;\n                    }\n                    break;\n\n                case 39:\n                    // Arrow forward\n                    player.forward();\n                    break;\n\n                case 37:\n                    // Arrow back\n                    player.rewind();\n                    break;\n\n                case 70:\n                    // F key\n                    player.fullscreen.toggle();\n                    break;\n\n                case 67:\n                    // C key\n                    if (!repeat) {\n                        player.toggleCaptions();\n                    }\n                    break;\n\n                case 76:\n                    // L key\n                    player.loop = !player.loop;\n                    break;\n\n                    /* case 73:\n                    this.setLoop('start');\n                    break;\n\n                case 76:\n                    this.setLoop();\n                    break;\n\n                case 79:\n                    this.setLoop('end');\n                    break; */\n\n                default:\n                    break;\n            }\n\n            // Escape is handle natively when in full screen\n            // So we only need to worry about non native\n            if (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n                player.fullscreen.toggle();\n            }\n\n            // Store last code for next cycle\n            this.lastKey = code;\n        } else {\n            this.lastKey = null;\n        }\n    }\n\n    // Toggle menu\n    toggleMenu(event) {\n        controls.toggleMenu.call(this.player, event);\n    }\n\n    // Device is touch enabled\n    firstTouch() {\n        const { player } = this;\n        const { elements } = player;\n\n        player.touch = true;\n\n        // Add touch class\n        toggleClass(elements.container, player.config.classNames.isTouch, true);\n    }\n\n    setTabFocus(event) {\n        const { player } = this;\n        const { elements } = player;\n\n        clearTimeout(this.focusTimer);\n\n        // Ignore any key other than tab\n        if (event.type === 'keydown' && event.which !== 9) {\n            return;\n        }\n\n        // Store reference to event timeStamp\n        if (event.type === 'keydown') {\n            this.lastKeyDown = event.timeStamp;\n        }\n\n        // Remove current classes\n        const removeCurrent = () => {\n            const className = player.config.classNames.tabFocus;\n            const current = getElements.call(player, `.${className}`);\n            toggleClass(current, className, false);\n        };\n\n        // Determine if a key was pressed to trigger this event\n        const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n        // Ignore focus events if a key was pressed prior\n        if (event.type === 'focus' && !wasKeyDown) {\n            return;\n        }\n\n        // Remove all current\n        removeCurrent();\n\n        // Delay the adding of classname until the focus has changed\n        // This event fires before the focusin event\n        this.focusTimer = setTimeout(() => {\n            const focused = document.activeElement;\n\n            // Ignore if current focus element isn't inside the player\n            if (!elements.container.contains(focused)) {\n                return;\n            }\n\n            toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n        }, 10);\n    }\n\n    // Global window & document listeners\n    global(toggle = true) {\n        const { player } = this;\n\n        // Keyboard shortcuts\n        if (player.config.keyboard.global) {\n            toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n        }\n\n        // Click anywhere closes menu\n        toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n        // Detect touch by events\n        once.call(player, document.body, 'touchstart', this.firstTouch);\n\n        // Tab focus detection\n        toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n    }\n\n    // Container listeners\n    container() {\n        const { player } = this;\n        const { elements } = player;\n\n        // Keyboard shortcuts\n        if (!player.config.keyboard.global && player.config.keyboard.focused) {\n            on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n        }\n\n        // Toggle controls on mouse events and entering fullscreen\n        on.call(\n            player,\n            elements.container,\n            'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n            event => {\n                const { controls } = elements;\n\n                // Remove button states for fullscreen\n                if (controls && event.type === 'enterfullscreen') {\n                    controls.pressed = false;\n                    controls.hover = false;\n                }\n\n                // Show, then hide after a timeout unless another control event occurs\n                const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n                let delay = 0;\n\n                if (show) {\n                    ui.toggleControls.call(player, true);\n                    // Use longer timeout for touch devices\n                    delay = player.touch ? 3000 : 2000;\n                }\n\n                // Clear timer\n                clearTimeout(player.timers.controls);\n\n                // Set new timer to prevent flicker when seeking\n                player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n            },\n        );\n    }\n\n    // Listen for media events\n    media() {\n        const { player } = this;\n        const { elements } = player;\n\n        // Time change on media\n        on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n        // Display duration\n        on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n            controls.durationUpdate.call(player, event),\n        );\n\n        // Check for audio tracks on load\n        // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n        on.call(player, player.media, 'canplay loadeddata', () => {\n            toggleHidden(elements.volume, !player.hasAudio);\n            toggleHidden(elements.buttons.mute, !player.hasAudio);\n        });\n\n        // Handle the media finishing\n        on.call(player, player.media, 'ended', () => {\n            // Show poster on end\n            if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n                // Restart\n                player.restart();\n            }\n        });\n\n        // Check for buffer progress\n        on.call(player, player.media, 'progress playing seeking seeked', event =>\n            controls.updateProgress.call(player, event),\n        );\n\n        // Handle volume changes\n        on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n        // Handle play/pause\n        on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n            ui.checkPlaying.call(player, event),\n        );\n\n        // Loading state\n        on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n        // If autoplay, then load advertisement if required\n        // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n        on.call(player, player.media, 'playing', () => {\n            if (!player.ads) {\n                return;\n            }\n\n            // If ads are enabled, wait for them first\n            if (player.ads.enabled && !player.ads.initialized) {\n                // Wait for manager response\n                player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n            }\n        });\n\n        // Click video\n        if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n            // Re-fetch the wrapper\n            const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n            // Bail if there's no wrapper (this should never happen)\n            if (!is.element(wrapper)) {\n                return;\n            }\n\n            // On click play, pause or restart\n            on.call(player, elements.container, 'click', event => {\n                const targets = [elements.container, wrapper];\n\n                // Ignore if click if not container or in video wrapper\n                if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n                    return;\n                }\n\n                // Touch devices will just show controls (if hidden)\n                if (player.touch && player.config.hideControls) {\n                    return;\n                }\n\n                if (player.ended) {\n                    player.restart();\n                    player.play();\n                } else {\n                    player.togglePlay();\n                }\n            });\n        }\n\n        // Disable right click\n        if (player.supported.ui && player.config.disableContextMenu) {\n            on.call(\n                player,\n                elements.wrapper,\n                'contextmenu',\n                event => {\n                    event.preventDefault();\n                },\n                false,\n            );\n        }\n\n        // Volume change\n        on.call(player, player.media, 'volumechange', () => {\n            // Save to storage\n            player.storage.set({\n                volume: player.volume,\n                muted: player.muted,\n            });\n        });\n\n        // Speed change\n        on.call(player, player.media, 'ratechange', () => {\n            // Update UI\n            controls.updateSetting.call(player, 'speed');\n\n            // Save to storage\n            player.storage.set({ speed: player.speed });\n        });\n\n        // Quality change\n        on.call(player, player.media, 'qualitychange', event => {\n            // Update UI\n            controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n        });\n\n        // Update download link when ready and if quality changes\n        on.call(player, player.media, 'ready qualitychange', () => {\n            controls.setDownloadLink.call(player);\n        });\n\n        // Proxy events to container\n        // Bubble up key events for Edge\n        const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n        on.call(player, player.media, proxyEvents, event => {\n            let { detail = {} } = event;\n\n            // Get error details from media\n            if (event.type === 'error') {\n                detail = player.media.error;\n            }\n\n            triggerEvent.call(player, elements.container, event.type, true, detail);\n        });\n    }\n\n    // Run default and custom handlers\n    proxy(event, defaultHandler, customHandlerKey) {\n        const { player } = this;\n        const customHandler = player.config.listeners[customHandlerKey];\n        const hasCustomHandler = is.function(customHandler);\n        let returned = true;\n\n        // Execute custom handler\n        if (hasCustomHandler) {\n            returned = customHandler.call(player, event);\n        }\n\n        // Only call default handler if not prevented in custom handler\n        if (returned && is.function(defaultHandler)) {\n            defaultHandler.call(player, event);\n        }\n    }\n\n    // Trigger custom and default handlers\n    bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n        const { player } = this;\n        const customHandler = player.config.listeners[customHandlerKey];\n        const hasCustomHandler = is.function(customHandler);\n\n        on.call(\n            player,\n            element,\n            type,\n            event => this.proxy(event, defaultHandler, customHandlerKey),\n            passive && !hasCustomHandler,\n        );\n    }\n\n    // Listen for control events\n    controls() {\n        const { player } = this;\n        const { elements } = player;\n\n        // IE doesn't support input event, so we fallback to change\n        const inputEvent = browser.isIE ? 'change' : 'input';\n\n        // Play/pause toggle\n        if (elements.buttons.play) {\n            Array.from(elements.buttons.play).forEach(button => {\n                this.bind(button, 'click', player.togglePlay, 'play');\n            });\n        }\n\n        // Pause\n        this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n        // Rewind\n        this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n        // Rewind\n        this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n        // Mute toggle\n        this.bind(\n            elements.buttons.mute,\n            'click',\n            () => {\n                player.muted = !player.muted;\n            },\n            'mute',\n        );\n\n        // Captions toggle\n        this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n        // Download\n        this.bind(\n            elements.buttons.download,\n            'click',\n            () => {\n                triggerEvent.call(player, player.media, 'download');\n            },\n            'download',\n        );\n\n        // Fullscreen toggle\n        this.bind(\n            elements.buttons.fullscreen,\n            'click',\n            () => {\n                player.fullscreen.toggle();\n            },\n            'fullscreen',\n        );\n\n        // Picture-in-Picture\n        this.bind(\n            elements.buttons.pip,\n            'click',\n            () => {\n                player.pip = 'toggle';\n            },\n            'pip',\n        );\n\n        // Airplay\n        this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n        // Settings menu - click toggle\n        this.bind(elements.buttons.settings, 'click', event => {\n            // Prevent the document click listener closing the menu\n            event.stopPropagation();\n\n            controls.toggleMenu.call(player, event);\n        });\n\n        // Settings menu - keyboard toggle\n        // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n        this.bind(\n            elements.buttons.settings,\n            'keyup',\n            event => {\n                const code = event.which;\n\n                // We only care about space and return\n                if (![13, 32].includes(code)) {\n                    return;\n                }\n\n                // Because return triggers a click anyway, all we need to do is set focus\n                if (code === 13) {\n                    controls.focusFirstMenuItem.call(player, null, true);\n                    return;\n                }\n\n                // Prevent scroll\n                event.preventDefault();\n\n                // Prevent playing video (Firefox)\n                event.stopPropagation();\n\n                // Toggle menu\n                controls.toggleMenu.call(player, event);\n            },\n            null,\n            false, // Can't be passive as we're preventing default\n        );\n\n        // Escape closes menu\n        this.bind(elements.settings.menu, 'keydown', event => {\n            if (event.which === 27) {\n                controls.toggleMenu.call(player, event);\n            }\n        });\n\n        // Set range input alternative \""value\"", which matches the tooltip time (#954)\n        this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n            const rect = elements.progress.getBoundingClientRect();\n            const percent = (100 / rect.width) * (event.pageX - rect.left);\n            event.currentTarget.setAttribute('seek-value', percent);\n        });\n\n        // Pause while seeking\n        this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n            const seek = event.currentTarget;\n            const code = event.keyCode ? event.keyCode : event.which;\n            const attribute = 'play-on-seeked';\n\n            if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n                return;\n            }\n\n            // Record seek time so we can prevent hiding controls for a few seconds after seek\n            player.lastSeekTime = Date.now();\n\n            // Was playing before?\n            const play = seek.hasAttribute(attribute);\n\n            // Done seeking\n            const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n            // If we're done seeking and it was playing, resume playback\n            if (play && done) {\n                seek.removeAttribute(attribute);\n                player.play();\n            } else if (!done && player.playing) {\n                seek.setAttribute(attribute, '');\n                player.pause();\n            }\n        });\n\n        // Fix range inputs on iOS\n        // Super weird iOS bug where after you interact with an <input type=\""range\"">,\n        // it takes over further interactions on the page. This is a hack\n        if (browser.isIos) {\n            const inputs = getElements.call(player, 'input[type=\""range\""]');\n            Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n        }\n\n        // Seek\n        this.bind(\n            elements.inputs.seek,\n            inputEvent,\n            event => {\n                const seek = event.currentTarget;\n\n                // If it exists, use seek-value instead of \""value\"" for consistency with tooltip time (#954)\n                let seekTo = seek.getAttribute('seek-value');\n\n                if (is.empty(seekTo)) {\n                    seekTo = seek.value;\n                }\n\n                seek.removeAttribute('seek-value');\n\n                player.currentTime = (seekTo / seek.max) * player.duration;\n            },\n            'seek',\n        );\n\n        // Seek tooltip\n        this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n            controls.updateSeekTooltip.call(player, event),\n        );\n\n        // Polyfill for lower fill in <input type=\""range\""> for webkit\n        if (browser.isWebkit) {\n            Array.from(getElements.call(player, 'input[type=\""range\""]')).forEach(element => {\n                this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n            });\n        }\n\n        // Current time invert\n        // Only if one time element is used for both currentTime and duration\n        if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n            this.bind(elements.display.currentTime, 'click', () => {\n                // Do nothing if we're at the start\n                if (player.currentTime === 0) {\n                    return;\n                }\n\n                player.config.invertTime = !player.config.invertTime;\n\n                controls.timeUpdate.call(player);\n            });\n        }\n\n        // Volume\n        this.bind(\n            elements.inputs.volume,\n            inputEvent,\n            event => {\n                player.volume = event.target.value;\n            },\n            'volume',\n        );\n\n        // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n        this.bind(elements.controls, 'mouseenter mouseleave', event => {\n            elements.controls.hover = !player.touch && event.type === 'mouseenter';\n        });\n\n        // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n        this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n            elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n        });\n\n        // Show controls when they receive focus (e.g., when using keyboard tab key)\n        this.bind(elements.controls, 'focusin', () => {\n            const { config, elements, timers } = player;\n\n            // Skip transition to prevent focus from scrolling the parent element\n            toggleClass(elements.controls, config.classNames.noTransition, true);\n\n            // Toggle\n            ui.toggleControls.call(player, true);\n\n            // Restore transition\n            setTimeout(() => {\n                toggleClass(elements.controls, config.classNames.noTransition, false);\n            }, 0);\n\n            // Delay a little more for mouse users\n            const delay = this.touch ? 3000 : 4000;\n\n            // Clear timer\n            clearTimeout(timers.controls);\n\n            // Hide again after delay\n            timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n        });\n\n        // Mouse wheel for volume\n        this.bind(\n            elements.inputs.volume,\n            'wheel',\n            event => {\n                // Detect \""natural\"" scroll - suppored on OS X Safari only\n                // Other browsers on OS X will be inverted until support improves\n                const inverted = event.webkitDirectionInvertedFromDevice;\n\n                // Get delta from event. Invert if `inverted` is true\n                const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n                // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n                const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n                // Change the volume by 2%\n                player.increaseVolume(direction / 50);\n\n                // Don't break page scrolling at max and min\n                const { volume } = player.media;\n                if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n                    event.preventDefault();\n                }\n            },\n            'volume',\n            false,\n        );\n    }\n}\n\nexport default Listeners;\n"",""var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n"",""'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = defined(this);\n      var fn = regexp == undefined ? undefined : regexp[MATCH];\n      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n    function (regexp) {\n      var res = maybeCallNative($match, regexp, this);\n      if (res.done) return res.value;\n      var rx = anObject(regexp);\n      var S = String(this);\n      if (!rx.global) return regExpExec(rx, S);\n      var fullUnicode = rx.unicode;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = String(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n"",""(function(root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.loadjs = factory();\n  }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n    bundleIdCache = {},\n    bundleResultCache = {},\n    bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n  // listify\n  bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n  var depsNotFound = [],\n      i = bundleIds.length,\n      numWaiting = i,\n      fn,\n      bundleId,\n      r,\n      q;\n\n  // define callback function\n  fn = function (bundleId, pathsNotFound) {\n    if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n    numWaiting--;\n    if (!numWaiting) callbackFn(depsNotFound);\n  };\n\n  // register callback\n  while (i--) {\n    bundleId = bundleIds[i];\n\n    // execute callback if in result cache\n    r = bundleResultCache[bundleId];\n    if (r) {\n      fn(bundleId, r);\n      continue;\n    }\n\n    // add to callback queue\n    q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n    q.push(fn);\n  }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n  // exit if id isn't defined\n  if (!bundleId) return;\n\n  var q = bundleCallbackQueue[bundleId];\n\n  // cache result\n  bundleResultCache[bundleId] = pathsNotFound;\n\n  // exit if queue is empty\n  if (!q) return;\n\n  // empty callback queue\n  while (q.length) {\n    q[0](bundleId, pathsNotFound);\n    q.splice(0, 1);\n  }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n  // accept function as argument\n  if (args.call) args = {success: args};\n\n  // success and error callbacks\n  if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n  else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n  var doc = document,\n      async = args.async,\n      maxTries = (args.numRetries || 0) + 1,\n      beforeCallbackFn = args.before || devnull,\n      pathStripped = path.replace(/^(css|img)!/, ''),\n      isCss,\n      e;\n\n  numTries = numTries || 0;\n\n  if (/(^css!|\\.css$)/.test(path)) {\n    isCss = true;\n\n    // css\n    e = doc.createElement('link');\n    e.rel = 'stylesheet';\n    e.href = pathStripped; //.replace(/^css!/, '');  // remove \""css!\"" prefix\n  } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n    // image\n    e = doc.createElement('img');\n    e.src = pathStripped;    \n  } else {\n    // javascript\n    e = doc.createElement('script');\n    e.src = path;\n    e.async = async === undefined ? true : async;\n  }\n\n  e.onload = e.onerror = e.onbeforeload = function (ev) {\n    var result = ev.type[0];\n\n    // Note: The following code isolates IE using `hideFocus` and treats empty\n    // stylesheets as failures to get around lack of onerror support\n    if (isCss && 'hideFocus' in e) {\n      try {\n        if (!e.sheet.cssText.length) result = 'e';\n      } catch (x) {\n        // sheets objects created from load errors don't allow access to\n        // `cssText` (unless error is Code:18 SecurityError)\n        if (x.code != 18) result = 'e';\n      }\n    }\n\n    // handle retries in case of load failure\n    if (result == 'e') {\n      // increment counter\n      numTries += 1;\n\n      // exit function and try again\n      if (numTries < maxTries) {\n        return loadFile(path, callbackFn, args, numTries);\n      }\n    }\n\n    // execute callback\n    callbackFn(path, result, ev.defaultPrevented);\n  };\n\n  // add to document (unless callback returns `false`)\n  if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n  // listify paths\n  paths = paths.push ? paths : [paths];\n\n  var numWaiting = paths.length,\n      x = numWaiting,\n      pathsNotFound = [],\n      fn,\n      i;\n\n  // define callback function\n  fn = function(path, result, defaultPrevented) {\n    // handle error\n    if (result == 'e') pathsNotFound.push(path);\n\n    // handle beforeload event. If defaultPrevented then that means the load\n    // will be blocked (ex. Ghostery/ABP on Safari)\n    if (result == 'b') {\n      if (defaultPrevented) pathsNotFound.push(path);\n      else return;\n    }\n\n    numWaiting--;\n    if (!numWaiting) callbackFn(pathsNotFound);\n  };\n\n  // load scripts\n  for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n  var bundleId,\n      args;\n\n  // bundleId (if string)\n  if (arg1 && arg1.trim) bundleId = arg1;\n\n  // args (default is {})\n  args = (bundleId ? arg2 : arg1) || {};\n\n  // throw error if bundle is already defined\n  if (bundleId) {\n    if (bundleId in bundleIdCache) {\n      throw \""LoadJS\"";\n    } else {\n      bundleIdCache[bundleId] = true;\n    }\n  }\n\n  // load scripts\n  loadFiles(paths, function (pathsNotFound) {\n    // execute callbacks\n    executeCallbacks(args, pathsNotFound);\n\n    // publish bundle load event\n    publish(bundleId, pathsNotFound);\n  }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n  // subscribe to bundle load event\n  subscribe(deps, function (depsNotFound) {\n    // execute callbacks\n    executeCallbacks(args, depsNotFound);\n  });\n\n  return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n  publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n  bundleIdCache = {};\n  bundleResultCache = {};\n  bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n  return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n"",""// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n    return new Promise((resolve, reject) => {\n        loadjs(url, {\n            success: resolve,\n            error: reject,\n        });\n    });\n}\n"",""// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n    if (is.empty(url)) {\n        return null;\n    }\n\n    if (is.number(Number(url))) {\n        return url;\n    }\n\n    const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n    const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n    const ratio = getRatio(width, height);\n    return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n        this.embed.hasPlayed = true;\n    }\n    if (this.media.paused === play) {\n        this.media.paused = !play;\n        triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n}\n\nconst vimeo = {\n    setup() {\n        // Add embed class for responsive\n        toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set intial ratio\n        vimeo.setAspectRatio.call(this);\n\n        // Load the API if not already\n        if (!is.object(window.Vimeo)) {\n            loadScript(this.config.urls.vimeo.sdk)\n                .then(() => {\n                    vimeo.ready.call(this);\n                })\n                .catch(error => {\n                    this.debug.warn('Vimeo API failed to load', error);\n                });\n        } else {\n            vimeo.ready.call(this);\n        }\n    },\n\n    // Set aspect ratio\n    // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n    setAspectRatio(input) {\n        const [x, y] = (is.string(input) ? input : this.config.ratio).split(':').map(Number);\n        const padding = (100 / x) * y;\n        vimeo.padding = padding;\n        this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n        if (this.supported.ui) {\n            const height = 240;\n            const offset = (height - padding) / (height / 50);\n\n            this.media.style.transform = `translateY(-${offset}%)`;\n        }\n    },\n\n    // API Ready\n    ready() {\n        const player = this;\n\n        // Get Vimeo params for the iframe\n        const options = {\n            loop: player.config.loop.active,\n            autoplay: player.autoplay,\n            // muted: player.muted,\n            byline: false,\n            portrait: false,\n            title: false,\n            speed: true,\n            transparent: 0,\n            gesture: 'media',\n            playsinline: !this.config.fullscreen.iosNative,\n        };\n        const params = buildUrlParams(options);\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (is.empty(source)) {\n            source = player.media.getAttribute(player.config.attributes.embed.id);\n        }\n\n        const id = parseId(source);\n\n        // Build an iframe\n        const iframe = createElement('iframe');\n        const src = format(player.config.urls.vimeo.iframe, id, params);\n        iframe.setAttribute('src', src);\n        iframe.setAttribute('allowfullscreen', '');\n        iframe.setAttribute('allowtransparency', '');\n        iframe.setAttribute('allow', 'autoplay');\n\n        // Get poster, if already set\n        const { poster } = player;\n\n        // Inject the package\n        const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n        wrapper.appendChild(iframe);\n        player.media = replaceElement(wrapper, player.media);\n\n        // Get poster image\n        fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n            if (is.empty(response)) {\n                return;\n            }\n\n            // Get the URL for thumbnail\n            const url = new URL(response[0].thumbnail_large);\n\n            // Get original image\n            url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n            // Set and show poster\n            ui.setPoster.call(player, url.href).catch(() => {});\n        });\n\n        // Setup instance\n        // https://github.com/vimeo/player.js\n        player.embed = new window.Vimeo.Player(iframe, {\n            autopause: player.config.autopause,\n            muted: player.muted,\n        });\n\n        player.media.paused = true;\n        player.media.currentTime = 0;\n\n        // Disable native text track rendering\n        if (player.supported.ui) {\n            player.embed.disableTextTrack();\n        }\n\n        // Create a faux HTML5 API using the Vimeo API\n        player.media.play = () => {\n            assurePlaybackState.call(player, true);\n            return player.embed.play();\n        };\n\n        player.media.pause = () => {\n            assurePlaybackState.call(player, false);\n            return player.embed.pause();\n        };\n\n        player.media.stop = () => {\n            player.pause();\n            player.currentTime = 0;\n        };\n\n        // Seeking\n        let { currentTime } = player.media;\n        Object.defineProperty(player.media, 'currentTime', {\n            get() {\n                return currentTime;\n            },\n            set(time) {\n                // Vimeo will automatically play on seek if the video hasn't been played before\n\n                // Get current paused state and volume etc\n                const { embed, media, paused, volume } = player;\n                const restorePause = paused && !embed.hasPlayed;\n\n                // Set seeking state and trigger event\n                media.seeking = true;\n                triggerEvent.call(player, media, 'seeking');\n\n                // If paused, mute until seek is complete\n                Promise.resolve(restorePause && embed.setVolume(0))\n                    // Seek\n                    .then(() => embed.setCurrentTime(time))\n                    // Restore paused\n                    .then(() => restorePause && embed.pause())\n                    // Restore volume\n                    .then(() => restorePause && embed.setVolume(volume))\n                    .catch(() => {\n                        // Do nothing\n                    });\n            },\n        });\n\n        // Playback speed\n        let speed = player.config.speed.selected;\n        Object.defineProperty(player.media, 'playbackRate', {\n            get() {\n                return speed;\n            },\n            set(input) {\n                player.embed\n                    .setPlaybackRate(input)\n                    .then(() => {\n                        speed = input;\n                        triggerEvent.call(player, player.media, 'ratechange');\n                    })\n                    .catch(error => {\n                        // Hide menu item (and menu if empty)\n                        if (error.name === 'Error') {\n                            controls.setSpeedMenu.call(player, []);\n                        }\n                    });\n            },\n        });\n\n        // Volume\n        let { volume } = player.config;\n        Object.defineProperty(player.media, 'volume', {\n            get() {\n                return volume;\n            },\n            set(input) {\n                player.embed.setVolume(input).then(() => {\n                    volume = input;\n                    triggerEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Muted\n        let { muted } = player.config;\n        Object.defineProperty(player.media, 'muted', {\n            get() {\n                return muted;\n            },\n            set(input) {\n                const toggle = is.boolean(input) ? input : false;\n\n                player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n                    muted = toggle;\n                    triggerEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Loop\n        let { loop } = player.config;\n        Object.defineProperty(player.media, 'loop', {\n            get() {\n                return loop;\n            },\n            set(input) {\n                const toggle = is.boolean(input) ? input : player.config.loop.active;\n\n                player.embed.setLoop(toggle).then(() => {\n                    loop = toggle;\n                });\n            },\n        });\n\n        // Source\n        let currentSrc;\n        player.embed\n            .getVideoUrl()\n            .then(value => {\n                currentSrc = value;\n                controls.setDownloadLink.call(player);\n            })\n            .catch(error => {\n                this.debug.warn(error);\n            });\n\n        Object.defineProperty(player.media, 'currentSrc', {\n            get() {\n                return currentSrc;\n            },\n        });\n\n        // Ended\n        Object.defineProperty(player.media, 'ended', {\n            get() {\n                return player.currentTime === player.duration;\n            },\n        });\n\n        // Set aspect ratio based on video size\n        Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n            vimeo.ratio = getAspectRatio(dimensions[0], dimensions[1]);\n            vimeo.setAspectRatio.call(this, vimeo.ratio);\n        });\n\n        // Set autopause\n        player.embed.setAutopause(player.config.autopause).then(state => {\n            player.config.autopause = state;\n        });\n\n        // Get title\n        player.embed.getVideoTitle().then(title => {\n            player.config.title = title;\n            ui.setTitle.call(this);\n        });\n\n        // Get current time\n        player.embed.getCurrentTime().then(value => {\n            currentTime = value;\n            triggerEvent.call(player, player.media, 'timeupdate');\n        });\n\n        // Get duration\n        player.embed.getDuration().then(value => {\n            player.media.duration = value;\n            triggerEvent.call(player, player.media, 'durationchange');\n        });\n\n        // Get captions\n        player.embed.getTextTracks().then(tracks => {\n            player.media.textTracks = tracks;\n            captions.setup.call(player);\n        });\n\n        player.embed.on('cuechange', ({ cues = [] }) => {\n            const strippedCues = cues.map(cue => stripHTML(cue.text));\n            captions.updateCues.call(player, strippedCues);\n        });\n\n        player.embed.on('loaded', () => {\n            // Assure state and events are updated on autoplay\n            player.embed.getPaused().then(paused => {\n                assurePlaybackState.call(player, !paused);\n                if (!paused) {\n                    triggerEvent.call(player, player.media, 'playing');\n                }\n            });\n\n            if (is.element(player.embed.element) && player.supported.ui) {\n                const frame = player.embed.element;\n\n                // Fix keyboard focus issues\n                // https://github.com/sampotts/plyr/issues/317\n                frame.setAttribute('tabindex', -1);\n            }\n        });\n\n        player.embed.on('play', () => {\n            assurePlaybackState.call(player, true);\n            triggerEvent.call(player, player.media, 'playing');\n        });\n\n        player.embed.on('pause', () => {\n            assurePlaybackState.call(player, false);\n        });\n\n        player.embed.on('timeupdate', data => {\n            player.media.seeking = false;\n            currentTime = data.seconds;\n            triggerEvent.call(player, player.media, 'timeupdate');\n        });\n\n        player.embed.on('progress', data => {\n            player.media.buffered = data.percent;\n            triggerEvent.call(player, player.media, 'progress');\n\n            // Check all loaded\n            if (parseInt(data.percent, 10) === 1) {\n                triggerEvent.call(player, player.media, 'canplaythrough');\n            }\n\n            // Get duration as if we do it before load, it gives an incorrect value\n            // https://github.com/sampotts/plyr/issues/891\n            player.embed.getDuration().then(value => {\n                if (value !== player.media.duration) {\n                    player.media.duration = value;\n                    triggerEvent.call(player, player.media, 'durationchange');\n                }\n            });\n        });\n\n        player.embed.on('seeked', () => {\n            player.media.seeking = false;\n            triggerEvent.call(player, player.media, 'seeked');\n        });\n\n        player.embed.on('ended', () => {\n            player.media.paused = true;\n            triggerEvent.call(player, player.media, 'ended');\n        });\n\n        player.embed.on('error', detail => {\n            player.media.error = detail;\n            triggerEvent.call(player, player.media, 'error');\n        });\n\n        // Set height/width on fullscreen\n        player.on('enterfullscreen exitfullscreen', event => {\n            const { target } = player.fullscreen;\n\n            // Ignore for iOS native\n            if (target !== player.elements.container) {\n                return;\n            }\n\n            const toggle = event.type === 'enterfullscreen';\n            const [x, y] = vimeo.ratio.split(':').map(Number);\n            const dimension = x > y ? 'width' : 'height';\n\n            target.style[dimension] = toggle ? `${vimeo.padding}%` : null;\n        });\n\n        // Rebuild UI\n        setTimeout(() => ui.build.call(player), 0);\n    },\n};\n\nexport default vimeo;\n"",""// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n    if (is.empty(url)) {\n        return null;\n    }\n\n    const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n        this.embed.hasPlayed = true;\n    }\n    if (this.media.paused === play) {\n        this.media.paused = !play;\n        triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n}\n\nconst youtube = {\n    setup() {\n        // Add embed class for responsive\n        toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set aspect ratio\n        youtube.setAspectRatio.call(this);\n\n        // Setup API\n        if (is.object(window.YT) && is.function(window.YT.Player)) {\n            youtube.ready.call(this);\n        } else {\n            // Load the API\n            loadScript(this.config.urls.youtube.sdk).catch(error => {\n                this.debug.warn('YouTube API failed to load', error);\n            });\n\n            // Setup callback for the API\n            // YouTube has it's own system of course...\n            window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n            // Add to queue\n            window.onYouTubeReadyCallbacks.push(() => {\n                youtube.ready.call(this);\n            });\n\n            // Set callback to process queue\n            window.onYouTubeIframeAPIReady = () => {\n                window.onYouTubeReadyCallbacks.forEach(callback => {\n                    callback();\n                });\n            };\n        }\n    },\n\n    // Get the media title\n    getTitle(videoId) {\n        // Try via undocumented API method first\n        // This method disappears now and then though...\n        // https://github.com/sampotts/plyr/issues/709\n        if (is.function(this.embed.getVideoData)) {\n            const { title } = this.embed.getVideoData();\n\n            if (is.empty(title)) {\n                this.config.title = title;\n                ui.setTitle.call(this);\n                return;\n            }\n        }\n\n        // Or via Google API\n        const key = this.config.keys.google;\n        if (is.string(key) && !is.empty(key)) {\n            const url = format(this.config.urls.youtube.api, videoId, key);\n\n            fetch(url)\n                .then(result => {\n                    if (is.object(result)) {\n                        this.config.title = result.items[0].snippet.title;\n                        ui.setTitle.call(this);\n                    }\n                })\n                .catch(() => {});\n        }\n    },\n\n    // Set aspect ratio\n    setAspectRatio() {\n        const ratio = this.config.ratio.split(':');\n        this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n    },\n\n    // API ready\n    ready() {\n        const player = this;\n\n        // Ignore already setup (race condition)\n        const currentId = player.media.getAttribute('id');\n        if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n            return;\n        }\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (is.empty(source)) {\n            source = player.media.getAttribute(this.config.attributes.embed.id);\n        }\n\n        // Replace the <iframe> with a <div> due to YouTube API issues\n        const videoId = parseId(source);\n        const id = generateId(player.provider);\n\n        // Get poster, if already set\n        const { poster } = player;\n\n        // Replace media element\n        const container = createElement('div', { id, poster });\n        player.media = replaceElement(container, player.media);\n\n        // Id to poster wrapper\n        const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n        // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n        loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n            .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n            .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n            .then(image => ui.setPoster.call(player, image.src))\n            .then(posterSrc => {\n                // If the image is padded, use background-size \""cover\"" instead (like youtube does too with their posters)\n                if (!posterSrc.includes('maxres')) {\n                    player.elements.poster.style.backgroundSize = 'cover';\n                }\n            })\n            .catch(() => {});\n\n        // Setup instance\n        // https://developers.google.com/youtube/iframe_api_reference\n        player.embed = new window.YT.Player(id, {\n            videoId,\n            playerVars: {\n                autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n                hl: player.config.hl, // iframe interface language\n                controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n                rel: 0, // No related vids\n                showinfo: 0, // Hide info\n                iv_load_policy: 3, // Hide annotations\n                modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n                disablekb: 1, // Disable keyboard as we handle it\n                playsinline: 1, // Allow iOS inline playback\n\n                // Tracking for stats\n                // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n                widget_referrer: window ? window.location.href : null,\n\n                // Captions are flaky on YouTube\n                cc_load_policy: player.captions.active ? 1 : 0,\n                cc_lang_pref: player.config.captions.language,\n            },\n            events: {\n                onError(event) {\n                    // YouTube may fire onError twice, so only handle it once\n                    if (!player.media.error) {\n                        const code = event.data;\n                        // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n                        const message =\n                            {\n                                2: 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n                                5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n                                100: 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n                                101: 'The owner of the requested video does not allow it to be played in embedded players.',\n                                150: 'The owner of the requested video does not allow it to be played in embedded players.',\n                            }[code] || 'An unknown error occured';\n\n                        player.media.error = { code, message };\n\n                        triggerEvent.call(player, player.media, 'error');\n                    }\n                },\n                onPlaybackRateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get current speed\n                    player.media.playbackRate = instance.getPlaybackRate();\n\n                    triggerEvent.call(player, player.media, 'ratechange');\n                },\n                onReady(event) {\n                    // Bail if onReady has already been called. See issue #1108\n                    if (is.function(player.media.play)) {\n                        return;\n                    }\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get the title\n                    youtube.getTitle.call(player, videoId);\n\n                    // Create a faux HTML5 API using the YouTube API\n                    player.media.play = () => {\n                        assurePlaybackState.call(player, true);\n                        instance.playVideo();\n                    };\n\n                    player.media.pause = () => {\n                        assurePlaybackState.call(player, false);\n                        instance.pauseVideo();\n                    };\n\n                    player.media.stop = () => {\n                        instance.stopVideo();\n                    };\n\n                    player.media.duration = instance.getDuration();\n                    player.media.paused = true;\n\n                    // Seeking\n                    player.media.currentTime = 0;\n                    Object.defineProperty(player.media, 'currentTime', {\n                        get() {\n                            return Number(instance.getCurrentTime());\n                        },\n                        set(time) {\n                            // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n                            if (player.paused && !player.embed.hasPlayed) {\n                                player.embed.mute();\n                            }\n\n                            // Set seeking state and trigger event\n                            player.media.seeking = true;\n                            triggerEvent.call(player, player.media, 'seeking');\n\n                            // Seek after events sent\n                            instance.seekTo(time);\n                        },\n                    });\n\n                    // Playback speed\n                    Object.defineProperty(player.media, 'playbackRate', {\n                        get() {\n                            return instance.getPlaybackRate();\n                        },\n                        set(input) {\n                            instance.setPlaybackRate(input);\n                        },\n                    });\n\n                    // Volume\n                    let { volume } = player.config;\n                    Object.defineProperty(player.media, 'volume', {\n                        get() {\n                            return volume;\n                        },\n                        set(input) {\n                            volume = input;\n                            instance.setVolume(volume * 100);\n                            triggerEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Muted\n                    let { muted } = player.config;\n                    Object.defineProperty(player.media, 'muted', {\n                        get() {\n                            return muted;\n                        },\n                        set(input) {\n                            const toggle = is.boolean(input) ? input : muted;\n                            muted = toggle;\n                            instance[toggle ? 'mute' : 'unMute']();\n                            triggerEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Source\n                    Object.defineProperty(player.media, 'currentSrc', {\n                        get() {\n                            return instance.getVideoUrl();\n                        },\n                    });\n\n                    // Ended\n                    Object.defineProperty(player.media, 'ended', {\n                        get() {\n                            return player.currentTime === player.duration;\n                        },\n                    });\n\n                    // Get available speeds\n                    player.options.speed = instance.getAvailablePlaybackRates();\n\n                    // Set the tabindex to avoid focus entering iframe\n                    if (player.supported.ui) {\n                        player.media.setAttribute('tabindex', -1);\n                    }\n\n                    triggerEvent.call(player, player.media, 'timeupdate');\n                    triggerEvent.call(player, player.media, 'durationchange');\n\n                    // Reset timer\n                    clearInterval(player.timers.buffering);\n\n                    // Setup buffering\n                    player.timers.buffering = setInterval(() => {\n                        // Get loaded % from YouTube\n                        player.media.buffered = instance.getVideoLoadedFraction();\n\n                        // Trigger progress only when we actually buffer something\n                        if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n                            triggerEvent.call(player, player.media, 'progress');\n                        }\n\n                        // Set last buffer point\n                        player.media.lastBuffered = player.media.buffered;\n\n                        // Bail if we're at 100%\n                        if (player.media.buffered === 1) {\n                            clearInterval(player.timers.buffering);\n\n                            // Trigger event\n                            triggerEvent.call(player, player.media, 'canplaythrough');\n                        }\n                    }, 200);\n\n                    // Rebuild UI\n                    setTimeout(() => ui.build.call(player), 50);\n                },\n                onStateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Reset timer\n                    clearInterval(player.timers.playing);\n\n                    const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n                    if (seeked) {\n                        // Unset seeking and fire seeked event\n                        player.media.seeking = false;\n                        triggerEvent.call(player, player.media, 'seeked');\n                    }\n\n                    // Handle events\n                    // -1   Unstarted\n                    // 0    Ended\n                    // 1    Playing\n                    // 2    Paused\n                    // 3    Buffering\n                    // 5    Video cued\n                    switch (event.data) {\n                        case -1:\n                            // Update scrubber\n                            triggerEvent.call(player, player.media, 'timeupdate');\n\n                            // Get loaded % from YouTube\n                            player.media.buffered = instance.getVideoLoadedFraction();\n                            triggerEvent.call(player, player.media, 'progress');\n\n                            break;\n\n                        case 0:\n                            assurePlaybackState.call(player, false);\n\n                            // YouTube doesn't support loop for a single video, so mimick it.\n                            if (player.media.loop) {\n                                // YouTube needs a call to `stopVideo` before playing again\n                                instance.stopVideo();\n                                instance.playVideo();\n                            } else {\n                                triggerEvent.call(player, player.media, 'ended');\n                            }\n\n                            break;\n\n                        case 1:\n                            // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n                            if (player.media.paused && !player.embed.hasPlayed) {\n                                player.media.pause();\n                            } else {\n                                assurePlaybackState.call(player, true);\n\n                                triggerEvent.call(player, player.media, 'playing');\n\n                                // Poll to get playback progress\n                                player.timers.playing = setInterval(() => {\n                                    triggerEvent.call(player, player.media, 'timeupdate');\n                                }, 50);\n\n                                // Check duration again due to YouTube bug\n                                // https://github.com/sampotts/plyr/issues/374\n                                // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n                                if (player.media.duration !== instance.getDuration()) {\n                                    player.media.duration = instance.getDuration();\n                                    triggerEvent.call(player, player.media, 'durationchange');\n                                }\n                            }\n\n                            break;\n\n                        case 2:\n                            // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n                            if (!player.muted) {\n                                player.embed.unMute();\n                            }\n                            assurePlaybackState.call(player, false);\n\n                            break;\n\n                        default:\n                            break;\n                    }\n\n                    triggerEvent.call(player, player.elements.container, 'statechange', false, {\n                        code: event.data,\n                    });\n                },\n            },\n        });\n    },\n};\n\nexport default youtube;\n"",""// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\n\nconst media = {\n    // Setup media\n    setup() {\n        // If there's no media, bail\n        if (!this.media) {\n            this.debug.warn('No media element found!');\n            return;\n        }\n\n        // Add type class\n        toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n        // Add provider class\n        toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n        // Add video class for embeds\n        // This will require changes if audio embeds are added\n        if (this.isEmbed) {\n            toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n        }\n\n        // Inject the player wrapper\n        if (this.isVideo) {\n            // Create the wrapper div\n            this.elements.wrapper = createElement('div', {\n                class: this.config.classNames.video,\n            });\n\n            // Wrap the video in a container\n            wrap(this.media, this.elements.wrapper);\n\n            // Faux poster container\n            this.elements.poster = createElement('div', {\n                class: this.config.classNames.poster,\n            });\n\n            this.elements.wrapper.appendChild(this.elements.poster);\n        }\n\n        if (this.isHTML5) {\n            html5.extend.call(this);\n        } else if (this.isYouTube) {\n            youtube.setup.call(this);\n        } else if (this.isVimeo) {\n            vimeo.setup.call(this);\n        }\n    },\n};\n\nexport default media;\n"",""// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n    /**\n     * Ads constructor.\n     * @param {object} player\n     * @return {Ads}\n     */\n    constructor(player) {\n        this.player = player;\n        this.publisherId = player.config.ads.publisherId;\n        this.playing = false;\n        this.initialized = false;\n        this.elements = {\n            container: null,\n            displayContainer: null,\n        };\n        this.manager = null;\n        this.loader = null;\n        this.cuePoints = null;\n        this.events = {};\n        this.safetyTimer = null;\n        this.countdownTimer = null;\n\n        // Setup a promise to resolve when the IMA manager is ready\n        this.managerPromise = new Promise((resolve, reject) => {\n            // The ad is loaded and ready\n            this.on('loaded', resolve);\n\n            // Ads failed\n            this.on('error', reject);\n        });\n\n        this.load();\n    }\n\n    get enabled() {\n        return (\n            this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n        );\n    }\n\n    /**\n     * Load the IMA SDK\n     */\n    load() {\n        if (this.enabled) {\n            // Check if the Google IMA3 SDK is loaded or load it ourselves\n            if (!is.object(window.google) || !is.object(window.google.ima)) {\n                loadScript(this.player.config.urls.googleIMA.sdk)\n                    .then(() => {\n                        this.ready();\n                    })\n                    .catch(() => {\n                        // Script failed to load or is blocked\n                        this.trigger('error', new Error('Google IMA SDK failed to load'));\n                    });\n            } else {\n                this.ready();\n            }\n        }\n    }\n\n    /**\n     * Get the ads instance ready\n     */\n    ready() {\n        // Start ticking our safety timer. If the whole advertisement\n        // thing doesn't resolve within our set time; we bail\n        this.startSafetyTimer(12000, 'ready()');\n\n        // Clear the safety timer\n        this.managerPromise.then(() => {\n            this.clearSafetyTimer('onAdsManagerLoaded()');\n        });\n\n        // Set listeners on the Plyr instance\n        this.listeners();\n\n        // Setup the IMA SDK\n        this.setupIMA();\n    }\n\n    // Build the default tag URL\n    get tagUrl() {\n        const params = {\n            AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n            AV_CHANNELID: '5a0458dc28a06145e4519d21',\n            AV_URL: window.location.hostname,\n            cb: Date.now(),\n            AV_WIDTH: 640,\n            AV_HEIGHT: 480,\n            AV_CDIM2: this.publisherId,\n        };\n\n        const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n        return `${base}?${buildUrlParams(params)}`;\n    }\n\n    /**\n     * In order for the SDK to display ads for our video, we need to tell it where to put them,\n     * so here we define our ad container. This div is set up to render on top of the video player.\n     * Using the code below, we tell the SDK to render ads within that div. We also provide a\n     * handle to the content video player - the SDK will poll the current time of our player to\n     * properly place mid-rolls. After we create the ad display container, we initialize it. On\n     * mobile devices, this initialization is done as the result of a user action.\n     */\n    setupIMA() {\n        // Create the container for our advertisements\n        this.elements.container = createElement('div', {\n            class: this.player.config.classNames.ads,\n        });\n        this.player.elements.container.appendChild(this.elements.container);\n\n        // So we can run VPAID2\n        google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n        // Set language\n        google.ima.settings.setLocale(this.player.config.ads.language);\n\n        // We assume the adContainer is the video container of the plyr element\n        // that will house the ads\n        this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n        // Request video ads to be pre-loaded\n        this.requestAds();\n    }\n\n    /**\n     * Request advertisements\n     */\n    requestAds() {\n        const { container } = this.player.elements;\n\n        try {\n            // Create ads loader\n            this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n            // Listen and respond to ads loaded and error events\n            this.loader.addEventListener(\n                google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n                event => this.onAdsManagerLoaded(event),\n                false,\n            );\n            this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n            // Request video ads\n            const request = new google.ima.AdsRequest();\n            request.adTagUrl = this.tagUrl;\n\n            // Specify the linear and nonlinear slot sizes. This helps the SDK\n            // to select the correct creative if multiple are returned\n            request.linearAdSlotWidth = container.offsetWidth;\n            request.linearAdSlotHeight = container.offsetHeight;\n            request.nonLinearAdSlotWidth = container.offsetWidth;\n            request.nonLinearAdSlotHeight = container.offsetHeight;\n\n            // We only overlay ads as we only support video.\n            request.forceNonLinearFullSlot = false;\n\n            // Mute based on current state\n            request.setAdWillPlayMuted(!this.player.muted);\n\n            this.loader.requestAds(request);\n        } catch (e) {\n            this.onAdError(e);\n        }\n    }\n\n    /**\n     * Update the ad countdown\n     * @param {boolean} start\n     */\n    pollCountdown(start = false) {\n        if (!start) {\n            clearInterval(this.countdownTimer);\n            this.elements.container.removeAttribute('data-badge-text');\n            return;\n        }\n\n        const update = () => {\n            const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n            const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n            this.elements.container.setAttribute('data-badge-text', label);\n        };\n\n        this.countdownTimer = setInterval(update, 100);\n    }\n\n    /**\n     * This method is called whenever the ads are ready inside the AdDisplayContainer\n     * @param {Event} adsManagerLoadedEvent\n     */\n    onAdsManagerLoaded(event) {\n        // Load could occur after a source change (race condition)\n        if (!this.enabled) {\n            return;\n        }\n\n        // Get the ads manager\n        const settings = new google.ima.AdsRenderingSettings();\n\n        // Tell the SDK to save and restore content video state on our behalf\n        settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n        settings.enablePreloading = true;\n\n        // The SDK is polling currentTime on the contentPlayback. And needs a duration\n        // so it can determine when to start the mid- and post-roll\n        this.manager = event.getAdsManager(this.player, settings);\n\n        // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n        this.cuePoints = this.manager.getCuePoints();\n\n        // Add advertisement cue's within the time line if available\n        if (!is.empty(this.cuePoints)) {\n            this.cuePoints.forEach(cuePoint => {\n                if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n                    const seekElement = this.player.elements.progress;\n\n                    if (is.element(seekElement)) {\n                        const cuePercentage = 100 / this.player.duration * cuePoint;\n                        const cue = createElement('span', {\n                            class: this.player.config.classNames.cues,\n                        });\n\n                        cue.style.left = `${cuePercentage.toString()}%`;\n                        seekElement.appendChild(cue);\n                    }\n                }\n            });\n        }\n\n        // Set volume to match player\n        this.manager.setVolume(this.player.volume);\n\n        // Add listeners to the required events\n        // Advertisement error events\n        this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n        // Advertisement regular events\n        Object.keys(google.ima.AdEvent.Type).forEach(type => {\n            this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n        });\n\n        // Resolve our adsManager\n        this.trigger('loaded');\n    }\n\n    /**\n     * This is where all the event handling takes place. Retrieve the ad from the event. Some\n     * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n     * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n     * @param {Event} event\n     */\n    onAdEvent(event) {\n        const { container } = this.player.elements;\n\n        // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n        // don't have ad object associated\n        const ad = event.getAd();\n\n        // Proxy event\n        const dispatchEvent = type => {\n            const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n            triggerEvent.call(this.player, this.player.media, event);\n        };\n\n        switch (event.type) {\n            case google.ima.AdEvent.Type.LOADED:\n                // This is the first event sent for an ad - it is possible to determine whether the\n                // ad is a video ad or an overlay\n                this.trigger('loaded');\n\n                // Bubble event\n                dispatchEvent(event.type);\n\n                // Start countdown\n                this.pollCountdown(true);\n\n                if (!ad.isLinear()) {\n                    // Position AdDisplayContainer correctly for overlay\n                    ad.width = container.offsetWidth;\n                    ad.height = container.offsetHeight;\n                }\n\n                // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n                // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n                break;\n\n            case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n                // All ads for the current videos are done. We can now request new advertisements\n                // in case the video is re-played\n\n                // Fire event\n                dispatchEvent(event.type);\n\n                // TODO: Example for what happens when a next video in a playlist would be loaded.\n                // So here we load a new video when all ads are done.\n                // Then we load new ads within a new adsManager. When the video\n                // Is started - after - the ads are loaded, then we get ads.\n                // You can also easily test cancelling and reloading by running\n                // player.ads.cancel() and player.ads.play from the console I guess.\n                // this.player.source = {\n                //     type: 'video',\n                //     title: 'View From A Blue Moon',\n                //     sources: [{\n                //         src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n                // 'video/mp4', }], poster:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n                // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n                // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n                // };\n\n                // TODO: So there is still this thing where a video should only be allowed to start\n                // playing when the IMA SDK is ready or has failed\n\n                this.loadAds();\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n                // This event indicates the ad has started - the video player can adjust the UI,\n                // for example display a pause button and remaining time. Fired when content should\n                // be paused. This usually happens right before an ad is about to cover the content\n\n                dispatchEvent(event.type);\n\n                this.pauseContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n                // This event indicates the ad has finished - the video player can perform\n                // appropriate UI actions, such as removing the timer for remaining time detection.\n                // Fired when content should be resumed. This usually happens when an ad finishes\n                // or collapses\n\n                dispatchEvent(event.type);\n\n                this.pollCountdown();\n\n                this.resumeContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.STARTED:\n            case google.ima.AdEvent.Type.MIDPOINT:\n            case google.ima.AdEvent.Type.COMPLETE:\n            case google.ima.AdEvent.Type.IMPRESSION:\n            case google.ima.AdEvent.Type.CLICK:\n                dispatchEvent(event.type);\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    /**\n     * Any ad error handling comes through here\n     * @param {Event} event\n     */\n    onAdError(event) {\n        this.cancel();\n        this.player.debug.warn('Ads error', event);\n    }\n\n    /**\n     * Setup hooks for Plyr and window events. This ensures\n     * the mid- and post-roll launch at the correct time. And\n     * resize the advertisement when the player resizes\n     */\n    listeners() {\n        const { container } = this.player.elements;\n        let time;\n\n        // Add listeners to the required events\n        this.player.on('ended', () => {\n            this.loader.contentComplete();\n        });\n\n        this.player.on('seeking', () => {\n            time = this.player.currentTime;\n            return time;\n        });\n\n        this.player.on('seeked', () => {\n            const seekedTime = this.player.currentTime;\n\n            if (is.empty(this.cuePoints)) {\n                return;\n            }\n\n            this.cuePoints.forEach((cuePoint, index) => {\n                if (time < cuePoint && cuePoint < seekedTime) {\n                    this.manager.discardAdBreak();\n                    this.cuePoints.splice(index, 1);\n                }\n            });\n        });\n\n        // Listen to the resizing of the window. And resize ad accordingly\n        // TODO: eventually implement ResizeObserver\n        window.addEventListener('resize', () => {\n            if (this.manager) {\n                this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n            }\n        });\n    }\n\n    /**\n     * Initialize the adsManager and start playing advertisements\n     */\n    play() {\n        const { container } = this.player.elements;\n\n        if (!this.managerPromise) {\n            this.resumeContent();\n        }\n\n        // Play the requested advertisement whenever the adsManager is ready\n        this.managerPromise\n            .then(() => {\n                // Initialize the container. Must be done via a user action on mobile devices\n                this.elements.displayContainer.initialize();\n\n                try {\n                    if (!this.initialized) {\n                        // Initialize the ads manager. Ad rules playlist will start at this time\n                        this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n                        // Call play to start showing the ad. Single video and overlay ads will\n                        // start at this time; the call will be ignored for ad rules\n                        this.manager.start();\n                    }\n\n                    this.initialized = true;\n                } catch (adError) {\n                    // An error may be thrown if there was a problem with the\n                    // VAST response\n                    this.onAdError(adError);\n                }\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Resume our video\n     */\n    resumeContent() {\n        // Hide the advertisement container\n        this.elements.container.style.zIndex = '';\n\n        // Ad is stopped\n        this.playing = false;\n\n        // Play our video\n        if (this.player.currentTime < this.player.duration) {\n            this.player.play();\n        }\n    }\n\n    /**\n     * Pause our video\n     */\n    pauseContent() {\n        // Show the advertisement container\n        this.elements.container.style.zIndex = 3;\n\n        // Ad is playing.\n        this.playing = true;\n\n        // Pause our video.\n        this.player.pause();\n    }\n\n    /**\n     * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n     * allowed to call new ads based on google policies, as they interpret this as an accidental\n     * video requests. https://developers.google.com/interactive-\n     * media-ads/docs/sdks/android/faq#8\n     */\n    cancel() {\n        // Pause our video\n        if (this.initialized) {\n            this.resumeContent();\n        }\n\n        // Tell our instance that we're done for now\n        this.trigger('error');\n\n        // Re-create our adsManager\n        this.loadAds();\n    }\n\n    /**\n     * Re-create our adsManager\n     */\n    loadAds() {\n        // Tell our adsManager to go bye bye\n        this.managerPromise\n            .then(() => {\n                // Destroy our adsManager\n                if (this.manager) {\n                    this.manager.destroy();\n                }\n\n                // Re-set our adsManager promises\n                this.managerPromise = new Promise(resolve => {\n                    this.on('loaded', resolve);\n                    this.player.debug.log(this.manager);\n                });\n\n                // Now request some new advertisements\n                this.requestAds();\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Handles callbacks after an ad event was invoked\n     * @param {string} event - Event type\n     */\n    trigger(event, ...args) {\n        const handlers = this.events[event];\n\n        if (is.array(handlers)) {\n            handlers.forEach(handler => {\n                if (is.function(handler)) {\n                    handler.apply(this, args);\n                }\n            });\n        }\n    }\n\n    /**\n     * Add event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     * @return {Ads}\n     */\n    on(event, callback) {\n        if (!is.array(this.events[event])) {\n            this.events[event] = [];\n        }\n\n        this.events[event].push(callback);\n\n        return this;\n    }\n\n    /**\n     * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n     * The advertisement has 12 seconds to get its things together. We stop this timer when the\n     * advertisement is playing, or when a user action is required to start, then we clear the\n     * timer on ad ready\n     * @param {number} time\n     * @param {string} from\n     */\n    startSafetyTimer(time, from) {\n        this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n        this.safetyTimer = setTimeout(() => {\n            this.cancel();\n            this.clearSafetyTimer('startSafetyTimer()');\n        }, time);\n    }\n\n    /**\n     * Clear our safety timer(s)\n     * @param {string} from\n     */\n    clearSafetyTimer(from) {\n        if (!is.nullOrUndefined(this.safetyTimer)) {\n            this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n            clearTimeout(this.safetyTimer);\n            this.safetyTimer = null;\n        }\n    }\n}\n\nexport default Ads;\n"",""// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n    // Add elements to HTML5 media (source, tracks, etc)\n    insertElements(type, attributes) {\n        if (is.string(attributes)) {\n            insertElement(type, this.media, {\n                src: attributes,\n            });\n        } else if (is.array(attributes)) {\n            attributes.forEach(attribute => {\n                insertElement(type, this.media, attribute);\n            });\n        }\n    },\n\n    // Update source\n    // Sources are not checked for support so be careful\n    change(input) {\n        if (!getDeep(input, 'sources.length')) {\n            this.debug.warn('Invalid source format');\n            return;\n        }\n\n        // Cancel current network requests\n        html5.cancelRequests.call(this);\n\n        // Destroy instance and re-setup\n        this.destroy.call(\n            this,\n            () => {\n                // Reset quality options\n                this.options.quality = [];\n\n                // Remove elements\n                removeElement(this.media);\n                this.media = null;\n\n                // Reset class name\n                if (is.element(this.elements.container)) {\n                    this.elements.container.removeAttribute('class');\n                }\n\n                // Set the type and provider\n                const { sources, type } = input;\n                const [{ provider = providers.html5, src }] = sources;\n                const tagName = provider === 'html5' ? type : 'div';\n                const attributes = provider === 'html5' ? {} : { src };\n\n                Object.assign(this, {\n                    provider,\n                    type,\n                    // Check for support\n                    supported: support.check(type, provider, this.config.playsinline),\n                    // Create new element\n                    media: createElement(tagName, attributes),\n                });\n\n                // Inject the new element\n                this.elements.container.appendChild(this.media);\n\n                // Autoplay the new source?\n                if (is.boolean(input.autoplay)) {\n                    this.config.autoplay = input.autoplay;\n                }\n\n                // Set attributes for audio and video\n                if (this.isHTML5) {\n                    if (this.config.crossorigin) {\n                        this.media.setAttribute('crossorigin', '');\n                    }\n                    if (this.config.autoplay) {\n                        this.media.setAttribute('autoplay', '');\n                    }\n                    if (!is.empty(input.poster)) {\n                        this.poster = input.poster;\n                    }\n                    if (this.config.loop.active) {\n                        this.media.setAttribute('loop', '');\n                    }\n                    if (this.config.muted) {\n                        this.media.setAttribute('muted', '');\n                    }\n                    if (this.config.playsinline) {\n                        this.media.setAttribute('playsinline', '');\n                    }\n                }\n\n                // Restore class hook\n                ui.addStyleHook.call(this);\n\n                // Set new sources for html5\n                if (this.isHTML5) {\n                    source.insertElements.call(this, 'source', sources);\n                }\n\n                // Set video title\n                this.config.title = input.title;\n\n                // Set up from scratch\n                media.setup.call(this);\n\n                // HTML5 stuff\n                if (this.isHTML5) {\n                    // Setup captions\n                    if (Object.keys(input).includes('tracks')) {\n                        source.insertElements.call(this, 'track', input.tracks);\n                    }\n                }\n\n                // If HTML5 or embed but not fully supported, setupInterface and call ready now\n                if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n                    // Setup interface\n                    ui.build.call(this);\n                }\n\n                if (this.isHTML5) {\n                    // Load HTML5 sources\n                    this.media.load();\n                }\n\n                // Update the fullscreen support\n                this.fullscreen.update();\n            },\n            true,\n        );\n    },\n};\n\nexport default source;\n"",""// ==========================================================================\n// Plyr\n// plyr.js v3.4.8\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { pip } from './config/states';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n    constructor(target, options) {\n        this.timers = {};\n\n        // State\n        this.ready = false;\n        this.loading = false;\n        this.failed = false;\n\n        // Touch device\n        this.touch = support.touch;\n\n        // Set the media element\n        this.media = target;\n\n        // String selector passed\n        if (is.string(this.media)) {\n            this.media = document.querySelectorAll(this.media);\n        }\n\n        // jQuery, NodeList or Array passed, use first element\n        if ((window.jQuery && this.media instanceof jQuery) || is.nodeList(this.media) || is.array(this.media)) {\n            // eslint-disable-next-line\n            this.media = this.media[0];\n        }\n\n        // Set config\n        this.config = extend(\n            {},\n            defaults,\n            Plyr.defaults,\n            options || {},\n            (() => {\n                try {\n                    return JSON.parse(this.media.getAttribute('data-plyr-config'));\n                } catch (e) {\n                    return {};\n                }\n            })(),\n        );\n\n        // Elements cache\n        this.elements = {\n            container: null,\n            captions: null,\n            buttons: {},\n            display: {},\n            progress: {},\n            inputs: {},\n            settings: {\n                popup: null,\n                menu: null,\n                panels: {},\n                buttons: {},\n            },\n        };\n\n        // Captions\n        this.captions = {\n            active: null,\n            currentTrack: -1,\n            meta: new WeakMap(),\n        };\n\n        // Fullscreen\n        this.fullscreen = {\n            active: false,\n        };\n\n        // Options\n        this.options = {\n            speed: [],\n            quality: [],\n        };\n\n        // Debugging\n        // TODO: move to globals\n        this.debug = new Console(this.config.debug);\n\n        // Log config options and support\n        this.debug.log('Config', this.config);\n        this.debug.log('Support', support);\n\n        // We need an element to setup\n        if (is.nullOrUndefined(this.media) || !is.element(this.media)) {\n            this.debug.error('Setup failed: no suitable element passed');\n            return;\n        }\n\n        // Bail if the element is initialized\n        if (this.media.plyr) {\n            this.debug.warn('Target already setup');\n            return;\n        }\n\n        // Bail if not enabled\n        if (!this.config.enabled) {\n            this.debug.error('Setup failed: disabled by config');\n            return;\n        }\n\n        // Bail if disabled or no basic support\n        // You may want to disable certain UAs etc\n        if (!support.check().api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        // Cache original element state for .destroy()\n        const clone = this.media.cloneNode(true);\n        clone.autoplay = false;\n        this.elements.original = clone;\n\n        // Set media type based on tag or data attribute\n        // Supported: video, audio, vimeo, youtube\n        const type = this.media.tagName.toLowerCase();\n\n        // Embed properties\n        let iframe = null;\n        let url = null;\n\n        // Different setup based on type\n        switch (type) {\n            case 'div':\n                // Find the frame\n                iframe = this.media.querySelector('iframe');\n\n                // <iframe> type\n                if (is.element(iframe)) {\n                    // Detect provider\n                    url = parseUrl(iframe.getAttribute('src'));\n                    this.provider = getProviderByUrl(url.toString());\n\n                    // Rework elements\n                    this.elements.container = this.media;\n                    this.media = iframe;\n\n                    // Reset classname\n                    this.elements.container.className = '';\n\n                    // Get attributes from URL and set config\n                    if (url.search.length) {\n                        const truthy = ['1', 'true'];\n\n                        if (truthy.includes(url.searchParams.get('autoplay'))) {\n                            this.config.autoplay = true;\n                        }\n                        if (truthy.includes(url.searchParams.get('loop'))) {\n                            this.config.loop.active = true;\n                        }\n\n                        // TODO: replace fullscreen.iosNative with this playsinline config option\n                        // YouTube requires the playsinline in the URL\n                        if (this.isYouTube) {\n                            this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n                            this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n                        } else {\n                            this.config.playsinline = true;\n                        }\n                    }\n                } else {\n                    // <div> with attributes\n                    this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n                    // Remove attribute\n                    this.media.removeAttribute(this.config.attributes.embed.provider);\n                }\n\n                // Unsupported or missing provider\n                if (is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n                    this.debug.error('Setup failed: Invalid provider');\n                    return;\n                }\n\n                // Audio will come later for external providers\n                this.type = types.video;\n\n                break;\n\n            case 'video':\n            case 'audio':\n                this.type = type;\n                this.provider = providers.html5;\n\n                // Get config from attributes\n                if (this.media.hasAttribute('crossorigin')) {\n                    this.config.crossorigin = true;\n                }\n                if (this.media.hasAttribute('autoplay')) {\n                    this.config.autoplay = true;\n                }\n                if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {\n                    this.config.playsinline = true;\n                }\n                if (this.media.hasAttribute('muted')) {\n                    this.config.muted = true;\n                }\n                if (this.media.hasAttribute('loop')) {\n                    this.config.loop.active = true;\n                }\n\n                break;\n\n            default:\n                this.debug.error('Setup failed: unsupported type');\n                return;\n        }\n\n        // Check for support again but with type\n        this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n        // If no support for even API, bail\n        if (!this.supported.api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        this.eventListeners = [];\n\n        // Create listeners\n        this.listeners = new Listeners(this);\n\n        // Setup local storage for user settings\n        this.storage = new Storage(this);\n\n        // Store reference\n        this.media.plyr = this;\n\n        // Wrap media\n        if (!is.element(this.elements.container)) {\n            this.elements.container = createElement('div');\n            wrap(this.media, this.elements.container);\n        }\n\n        // Add style hook\n        ui.addStyleHook.call(this);\n\n        // Setup media\n        media.setup.call(this);\n\n        // Listen for events if debugging\n        if (this.config.debug) {\n            on.call(this, this.elements.container, this.config.events.join(' '), event => {\n                this.debug.log(`event: ${event.type}`);\n            });\n        }\n\n        // Setup interface\n        // If embed but not fully supported, build interface now to avoid flash of controls\n        if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n            ui.build.call(this);\n        }\n\n        // Container listeners\n        this.listeners.container();\n\n        // Global listeners\n        this.listeners.global();\n\n        // Setup fullscreen\n        this.fullscreen = new Fullscreen(this);\n\n        // Setup ads if provided\n        if (this.config.ads.enabled) {\n            this.ads = new Ads(this);\n        }\n\n        // Autoplay if required\n        if (this.config.autoplay) {\n            this.play();\n        }\n\n        // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n        this.lastSeekTime = 0;\n    }\n\n    // ---------------------------------------\n    // API\n    // ---------------------------------------\n\n    /**\n     * Types and provider helpers\n     */\n    get isHTML5() {\n        return Boolean(this.provider === providers.html5);\n    }\n\n    get isEmbed() {\n        return Boolean(this.isYouTube || this.isVimeo);\n    }\n\n    get isYouTube() {\n        return Boolean(this.provider === providers.youtube);\n    }\n\n    get isVimeo() {\n        return Boolean(this.provider === providers.vimeo);\n    }\n\n    get isVideo() {\n        return Boolean(this.type === types.video);\n    }\n\n    get isAudio() {\n        return Boolean(this.type === types.audio);\n    }\n\n    /**\n     * Play the media, or play the advertisement (if they are not blocked)\n     */\n    play() {\n        if (!is.function(this.media.play)) {\n            return null;\n        }\n\n        // Return the promise (for HTML5)\n        return this.media.play();\n    }\n\n    /**\n     * Pause the media\n     */\n    pause() {\n        if (!this.playing || !is.function(this.media.pause)) {\n            return;\n        }\n\n        this.media.pause();\n    }\n\n    /**\n     * Get playing state\n     */\n    get playing() {\n        return Boolean(this.ready && !this.paused && !this.ended);\n    }\n\n    /**\n     * Get paused state\n     */\n    get paused() {\n        return Boolean(this.media.paused);\n    }\n\n    /**\n     * Get stopped state\n     */\n    get stopped() {\n        return Boolean(this.paused && this.currentTime === 0);\n    }\n\n    /**\n     * Get ended state\n     */\n    get ended() {\n        return Boolean(this.media.ended);\n    }\n\n    /**\n     * Toggle playback based on current status\n     * @param {boolean} input\n     */\n    togglePlay(input) {\n        // Toggle based on current state if nothing passed\n        const toggle = is.boolean(input) ? input : !this.playing;\n\n        if (toggle) {\n            this.play();\n        } else {\n            this.pause();\n        }\n    }\n\n    /**\n     * Stop playback\n     */\n    stop() {\n        if (this.isHTML5) {\n            this.pause();\n            this.restart();\n        } else if (is.function(this.media.stop)) {\n            this.media.stop();\n        }\n    }\n\n    /**\n     * Restart playback\n     */\n    restart() {\n        this.currentTime = 0;\n    }\n\n    /**\n     * Rewind\n     * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n     */\n    rewind(seekTime) {\n        this.currentTime = this.currentTime - (is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Fast forward\n     * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n     */\n    forward(seekTime) {\n        this.currentTime = this.currentTime + (is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Seek to a time\n     * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n     */\n    set currentTime(input) {\n        // Bail if media duration isn't available yet\n        if (!this.duration) {\n            return;\n        }\n\n        // Validate input\n        const inputIsValid = is.number(input) && input > 0;\n\n        // Set\n        this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n        // Logging\n        this.debug.log(`Seeking to ${this.currentTime} seconds`);\n    }\n\n    /**\n     * Get current time\n     */\n    get currentTime() {\n        return Number(this.media.currentTime);\n    }\n\n    /**\n     * Get buffered\n     */\n    get buffered() {\n        const { buffered } = this.media;\n\n        // YouTube / Vimeo return a float between 0-1\n        if (is.number(buffered)) {\n            return buffered;\n        }\n\n        // HTML5\n        // TODO: Handle buffered chunks of the media\n        // (i.e. seek to another section buffers only that section)\n        if (buffered && buffered.length && this.duration > 0) {\n            return buffered.end(0) / this.duration;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Get seeking status\n     */\n    get seeking() {\n        return Boolean(this.media.seeking);\n    }\n\n    /**\n     * Get the duration of the current media\n     */\n    get duration() {\n        // Faux duration set via config\n        const fauxDuration = parseFloat(this.config.duration);\n\n        // Media duration can be NaN or Infinity before the media has loaded\n        const realDuration = (this.media || {}).duration;\n        const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n        // If config duration is funky, use regular duration\n        return fauxDuration || duration;\n    }\n\n    /**\n     * Set the player volume\n     * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n     */\n    set volume(value) {\n        let volume = value;\n        const max = 1;\n        const min = 0;\n\n        if (is.string(volume)) {\n            volume = Number(volume);\n        }\n\n        // Load volume from storage if no value specified\n        if (!is.number(volume)) {\n            volume = this.storage.get('volume');\n        }\n\n        // Use config if all else fails\n        if (!is.number(volume)) {\n            ({ volume } = this.config);\n        }\n\n        // Maximum is volumeMax\n        if (volume > max) {\n            volume = max;\n        }\n        // Minimum is volumeMin\n        if (volume < min) {\n            volume = min;\n        }\n\n        // Update config\n        this.config.volume = volume;\n\n        // Set the player volume\n        this.media.volume = volume;\n\n        // If muted, and we're increasing volume manually, reset muted state\n        if (!is.empty(value) && this.muted && volume > 0) {\n            this.muted = false;\n        }\n    }\n\n    /**\n     * Get the current player volume\n     */\n    get volume() {\n        return Number(this.media.volume);\n    }\n\n    /**\n     * Increase volume\n     * @param {boolean} step - How much to decrease by (between 0 and 1)\n     */\n    increaseVolume(step) {\n        const volume = this.media.muted ? 0 : this.volume;\n        this.volume = volume + (is.number(step) ? step : 0);\n    }\n\n    /**\n     * Decrease volume\n     * @param {boolean} step - How much to decrease by (between 0 and 1)\n     */\n    decreaseVolume(step) {\n        this.increaseVolume(-step);\n    }\n\n    /**\n     * Set muted state\n     * @param {boolean} mute\n     */\n    set muted(mute) {\n        let toggle = mute;\n\n        // Load muted state from storage\n        if (!is.boolean(toggle)) {\n            toggle = this.storage.get('muted');\n        }\n\n        // Use config if all else fails\n        if (!is.boolean(toggle)) {\n            toggle = this.config.muted;\n        }\n\n        // Update config\n        this.config.muted = toggle;\n\n        // Set mute on the player\n        this.media.muted = toggle;\n    }\n\n    /**\n     * Get current muted state\n     */\n    get muted() {\n        return Boolean(this.media.muted);\n    }\n\n    /**\n     * Check if the media has audio\n     */\n    get hasAudio() {\n        // Assume yes for all non HTML5 (as we can't tell...)\n        if (!this.isHTML5) {\n            return true;\n        }\n\n        if (this.isAudio) {\n            return true;\n        }\n\n        // Get audio tracks\n        return (\n            Boolean(this.media.mozHasAudio) ||\n            Boolean(this.media.webkitAudioDecodedByteCount) ||\n            Boolean(this.media.audioTracks && this.media.audioTracks.length)\n        );\n    }\n\n    /**\n     * Set playback speed\n     * @param {number} speed - the speed of playback (0.5-2.0)\n     */\n    set speed(input) {\n        let speed = null;\n\n        if (is.number(input)) {\n            speed = input;\n        }\n\n        if (!is.number(speed)) {\n            speed = this.storage.get('speed');\n        }\n\n        if (!is.number(speed)) {\n            speed = this.config.speed.selected;\n        }\n\n        // Set min/max\n        if (speed < 0.1) {\n            speed = 0.1;\n        }\n        if (speed > 2.0) {\n            speed = 2.0;\n        }\n\n        if (!this.config.speed.options.includes(speed)) {\n            this.debug.warn(`Unsupported speed (${speed})`);\n            return;\n        }\n\n        // Update config\n        this.config.speed.selected = speed;\n\n        // Set media speed\n        this.media.playbackRate = speed;\n    }\n\n    /**\n     * Get current playback speed\n     */\n    get speed() {\n        return Number(this.media.playbackRate);\n    }\n\n    /**\n     * Set playback quality\n     * Currently HTML5 & YouTube only\n     * @param {number} input - Quality level\n     */\n    set quality(input) {\n        const config = this.config.quality;\n        const options = this.options.quality;\n\n        if (!options.length) {\n            return;\n        }\n\n        let quality = [\n            !is.empty(input) && Number(input),\n            this.storage.get('quality'),\n            config.selected,\n            config.default,\n        ].find(is.number);\n\n        let updateStorage = true;\n\n        if (!options.includes(quality)) {\n            const value = closest(options, quality);\n            this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n            quality = value;\n\n            // Don't update storage if quality is not supported\n            updateStorage = false;\n        }\n\n        // Update config\n        config.selected = quality;\n\n        // Set quality\n        this.media.quality = quality;\n\n        // Save to storage\n        if (updateStorage) {\n            this.storage.set({ quality });\n        }\n    }\n\n    /**\n     * Get current quality level\n     */\n    get quality() {\n        return this.media.quality;\n    }\n\n    /**\n     * Toggle loop\n     * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n     * @param {boolean} input - Whether to loop or not\n     */\n    set loop(input) {\n        const toggle = is.boolean(input) ? input : this.config.loop.active;\n        this.config.loop.active = toggle;\n        this.media.loop = toggle;\n\n        // Set default to be a true toggle\n        /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n        switch (type) {\n            case 'start':\n                if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n                    this.config.loop.end = null;\n                }\n                this.config.loop.start = this.currentTime;\n                // this.config.loop.indicator.start = this.elements.display.played.value;\n                break;\n\n            case 'end':\n                if (this.config.loop.start >= this.currentTime) {\n                    return this;\n                }\n                this.config.loop.end = this.currentTime;\n                // this.config.loop.indicator.end = this.elements.display.played.value;\n                break;\n\n            case 'all':\n                this.config.loop.start = 0;\n                this.config.loop.end = this.duration - 2;\n                this.config.loop.indicator.start = 0;\n                this.config.loop.indicator.end = 100;\n                break;\n\n            case 'toggle':\n                if (this.config.loop.active) {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = null;\n                } else {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = this.duration - 2;\n                }\n                break;\n\n            default:\n                this.config.loop.start = 0;\n                this.config.loop.end = null;\n                break;\n        } */\n    }\n\n    /**\n     * Get current loop state\n     */\n    get loop() {\n        return Boolean(this.media.loop);\n    }\n\n    /**\n     * Set new media source\n     * @param {object} input - The new source object (see docs)\n     */\n    set source(input) {\n        source.change.call(this, input);\n    }\n\n    /**\n     * Get current source\n     */\n    get source() {\n        return this.media.currentSrc;\n    }\n\n    /**\n     * Get a download URL (either source or custom)\n     */\n    get download() {\n        const { download } = this.config.urls;\n\n        return is.url(download) ? download : this.source;\n    }\n\n    /**\n     * Set the poster image for a video\n     * @param {input} - the URL for the new poster image\n     */\n    set poster(input) {\n        if (!this.isVideo) {\n            this.debug.warn('Poster can only be set for video');\n            return;\n        }\n\n        ui.setPoster.call(this, input, false).catch(() => {});\n    }\n\n    /**\n     * Get the current poster image\n     */\n    get poster() {\n        if (!this.isVideo) {\n            return null;\n        }\n\n        return this.media.getAttribute('poster');\n    }\n\n    /**\n     * Set the autoplay state\n     * @param {boolean} input - Whether to autoplay or not\n     */\n    set autoplay(input) {\n        const toggle = is.boolean(input) ? input : this.config.autoplay;\n        this.config.autoplay = toggle;\n    }\n\n    /**\n     * Get the current autoplay state\n     */\n    get autoplay() {\n        return Boolean(this.config.autoplay);\n    }\n\n    /**\n     * Toggle captions\n     * @param {boolean} input - Whether to enable captions\n     */\n    toggleCaptions(input) {\n        captions.toggle.call(this, input, false);\n    }\n\n    /**\n     * Set the caption track by index\n     * @param {number} - Caption index\n     */\n    set currentTrack(input) {\n        captions.set.call(this, input, false);\n    }\n\n    /**\n     * Get the current caption track index (-1 if disabled)\n     */\n    get currentTrack() {\n        const { toggled, currentTrack } = this.captions;\n        return toggled ? currentTrack : -1;\n    }\n\n    /**\n     * Set the wanted language for captions\n     * Since tracks can be added later it won't update the actual caption track until there is a matching track\n     * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n     */\n    set language(input) {\n        captions.setLanguage.call(this, input, false);\n    }\n\n    /**\n     * Get the current track's language\n     */\n    get language() {\n        return (captions.getCurrentTrack.call(this) || {}).language;\n    }\n\n    /**\n     * Toggle picture-in-picture playback on WebKit/MacOS\n     * TODO: update player with state, support, enabled\n     * TODO: detect outside changes\n     */\n    set pip(input) {\n        // Bail if no support\n        if (!support.pip) {\n            return;\n        }\n\n        // Toggle based on current state if not passed\n        const toggle = is.boolean(input) ? input : !this.pip;\n\n        // Toggle based on current state\n        // Safari\n        if (is.function(this.media.webkitSetPresentationMode)) {\n            this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n        }\n\n        // Chrome\n        if (is.function(this.media.requestPictureInPicture)) {\n            if (!this.pip && toggle) {\n                this.media.requestPictureInPicture();\n            } else if (this.pip && !toggle) {\n                document.exitPictureInPicture();\n            }\n        }\n    }\n\n    /**\n     * Get the current picture-in-picture state\n     */\n    get pip() {\n        if (!support.pip) {\n            return null;\n        }\n\n        // Safari\n        if (!is.empty(this.media.webkitPresentationMode)) {\n            return this.media.webkitPresentationMode === pip.active;\n        }\n\n        // Chrome\n        return this.media === document.pictureInPictureElement;\n    }\n\n    /**\n     * Trigger the airplay dialog\n     * TODO: update player with state, support, enabled\n     */\n    airplay() {\n        // Show dialog if supported\n        if (support.airplay) {\n            this.media.webkitShowPlaybackTargetPicker();\n        }\n    }\n\n    /**\n     * Toggle the player controls\n     * @param {boolean} [toggle] - Whether to show the controls\n     */\n    toggleControls(toggle) {\n        // Don't toggle if missing UI support or if it's audio\n        if (this.supported.ui && !this.isAudio) {\n            // Get state before change\n            const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n            // Negate the argument if not undefined since adding the class to hides the controls\n            const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n            // Apply and get updated state\n            const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n            // Close menu\n            if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n                controls.toggleMenu.call(this, false);\n            }\n\n            // Trigger event on change\n            if (hiding !== isHidden) {\n                const eventName = hiding ? 'controlshidden' : 'controlsshown';\n                triggerEvent.call(this, this.media, eventName);\n            }\n\n            return !hiding;\n        }\n\n        return false;\n    }\n\n    /**\n     * Add event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    on(event, callback) {\n        on.call(this, this.elements.container, event, callback);\n    }\n\n    /**\n     * Add event listeners once\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    once(event, callback) {\n        once.call(this, this.elements.container, event, callback);\n    }\n\n    /**\n     * Remove event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    off(event, callback) {\n        off(this.elements.container, event, callback);\n    }\n\n    /**\n     * Destroy an instance\n     * Event listeners are removed when elements are removed\n     * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n     * @param {function} callback - Callback for when destroy is complete\n     * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n     */\n    destroy(callback, soft = false) {\n        if (!this.ready) {\n            return;\n        }\n\n        const done = () => {\n            // Reset overflow (incase destroyed while in fullscreen)\n            document.body.style.overflow = '';\n\n            // GC for embed\n            this.embed = null;\n\n            // If it's a soft destroy, make minimal changes\n            if (soft) {\n                if (Object.keys(this.elements).length) {\n                    // Remove elements\n                    removeElement(this.elements.buttons.play);\n                    removeElement(this.elements.captions);\n                    removeElement(this.elements.controls);\n                    removeElement(this.elements.wrapper);\n\n                    // Clear for GC\n                    this.elements.buttons.play = null;\n                    this.elements.captions = null;\n                    this.elements.controls = null;\n                    this.elements.wrapper = null;\n                }\n\n                // Callback\n                if (is.function(callback)) {\n                    callback();\n                }\n            } else {\n                // Unbind listeners\n                unbindListeners.call(this);\n\n                // Replace the container with the original element provided\n                replaceElement(this.elements.original, this.elements.container);\n\n                // Event\n                triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n                // Callback\n                if (is.function(callback)) {\n                    callback.call(this.elements.original);\n                }\n\n                // Reset state\n                this.ready = false;\n\n                // Clear for garbage collection\n                setTimeout(() => {\n                    this.elements = null;\n                    this.media = null;\n                }, 200);\n            }\n        };\n\n        // Stop playback\n        this.stop();\n\n        // Provider specific stuff\n        if (this.isHTML5) {\n            // Clear timeout\n            clearTimeout(this.timers.loading);\n\n            // Restore native video controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Clean up\n            done();\n        } else if (this.isYouTube) {\n            // Clear timers\n            clearInterval(this.timers.buffering);\n            clearInterval(this.timers.playing);\n\n            // Destroy YouTube API\n            if (this.embed !== null && is.function(this.embed.destroy)) {\n                this.embed.destroy();\n            }\n\n            // Clean up\n            done();\n        } else if (this.isVimeo) {\n            // Destroy Vimeo API\n            // then clean up (wait, to prevent postmessage errors)\n            if (this.embed !== null) {\n                this.embed.unload().then(done);\n            }\n\n            // Vimeo does not always return\n            setTimeout(done, 200);\n        }\n    }\n\n    /**\n     * Check for support for a mime type (HTML5 only)\n     * @param {string} type - Mime type\n     */\n    supports(type) {\n        return support.mime.call(this, type);\n    }\n\n    /**\n     * Check for support\n     * @param {string} type - Player type (audio/video)\n     * @param {string} provider - Provider (html5/youtube/vimeo)\n     * @param {bool} inline - Where player has `playsinline` sttribute\n     */\n    static supported(type, provider, inline) {\n        return support.check(type, provider, inline);\n    }\n\n    /**\n     * Load an SVG sprite into the page\n     * @param {string} url - URL for the SVG sprite\n     * @param {string} [id] - Unique ID\n     */\n    static loadSprite(url, id) {\n        return loadSprite(url, id);\n    }\n\n    /**\n     * Setup multiple instances\n     * @param {*} selector\n     * @param {object} options\n     */\n    static setup(selector, options = {}) {\n        let targets = null;\n\n        if (is.string(selector)) {\n            targets = Array.from(document.querySelectorAll(selector));\n        } else if (is.nodeList(selector)) {\n            targets = Array.from(selector);\n        } else if (is.array(selector)) {\n            targets = selector.filter(is.element);\n        }\n\n        if (is.empty(targets)) {\n            return null;\n        }\n\n        return targets.map(t => new Plyr(t, options));\n    }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"",""// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.4.8\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n""]}"
59f0e114675c95b119252dffb2e529c9c4f721ea,19366134,"At first you might be like ""What the hell are with all of the brackets?"" but don't get too hung up on that. Think of it like dot-notation's long lost brother that only appears in Objective-C. Objective-C is a derivative of C/C++, but more specifically it's a superset of C *more strictly* than C++. If you'd like to read up on that you can do that [here](http://stackoverflow.com/questions/19366134/what-does-objective-c-is-a-superset-of-c-more-strictly-than-c-mean-exactly). So if you've ever written C or C++, then you know some of the inner workings of Objective-C. Either way, it's really only a syntactical barrier if you've ever programmed at all. The best way to overcome this fear is to dive right in to some code, so lets start with the most important file we'll be working with in our app."
476f1cc4a4cd00165aa33b14a1488402ecfb8341,9944203, * Link to the answer: http://stackoverflow.com/a/9944203/2354849
37f240a5c3cba4f3611bbddbd5d054f0947a0d0e,3330919,        // http://stackoverflow.com/a/3330919)
eb5c29cab52ac4fc2eb9f87bd1c218dc60edfc9e,14579474,    #http://stackoverflow.com/questions/14579474/multiprocessing-pool-spawning-new-childern-after-terminate-on-linux-python2-7
15d5dc9e234e11956d39f6565c9f74d446480a58,1218925,				// https://stackoverflow.com/questions/1218925/php-script-to-download-file-not-working-in-ie
eab6d0176dcfb54a313093cf59032dc37f379613,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
0b7f42f3daf463ca8c3f269e26f901c0428d177f,65048,                [1] http://stackoverflow.com/questions/437/what-is-your-solution-to-the-fizzbuzz-problem#65048<br>
79880299777c819dc5e60330e25527175b6622bb,37598072,        // http://stackoverflow.com/a/37598072/242520
7873e91f7122467c6ff8d77dd7ae8fd0761223c8,5844653,https://stackoverflow.com/questions/5844653/haskell-why-the-convention-to-name-a-helper-function-go
6654e6a5f13a6dac98724bbb45490458666e0544,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
2f1f2ead53b436f79597be80efe76417fd8ae52c,2345915,    // http://stackoverflow.com/a/2345915
91569dfe2265916a6ab9432585f6052b6ca37cc0,25750468,    # from here: https://stackoverflow.com/questions/25750468/
c23e1af24e05d4b3df231d771d611aa7e8a528df,24656898,  http://stackoverflow.com/questions/24656898/gulp-browserify-shim-and-jquery-depended
d19cec890d09293adc5869b612efbddd8763345f,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
3836fc168473325086acf8f456844c94729b414d,11354786,"    ""* [multiple-inheritance-super](https://stackoverflow.com/questions/11354786/super-confusing-python-multiple-inheritance-super)\n"","
f3ee497eb807abba0b8dfca8164b387628d97e9e,3330919,        // http://stackoverflow.com/a/3330919)
05290cdcb5b49ffa0d54b5b164dd2e5a048866b5,3516110,        // of control points. See http://stackoverflow.com/a/3516110/393756 for details.
2fe7031e23ed8fde963673fb80f9e9835b87bc2c,1795176,"<p>from:<br>1.<a href=""http://stackoverflow.com/questions/1795176/how-to-change-mysql-data-directory"" target=""_blank"" rel=""external"">How to change MySQL data directory?</a><br>2.<a href=""http://article.my-addr.com/?show=linux_ubuntu_change_datadir-move_mysql_database_to_other_path"" target=""_blank"" rel=""external"">Linux Ubuntu change datadir / database location dir in 5 minutes Move mysql database to other path</a></p>"
01acb45b5e4371557b84762f4852933c7333b172,10454552,            // credit: http://stackoverflow.com/a/10454552/677735
24653bbf6a7f306d4fc2711abd7f54f77fe17683,11168238,-- http://stackoverflow.com/questions/11168238/haskell-generating-all-paths-between-nodes
a42acba673ff8d4c18292c35dc90e58351e3ec56,6034390,http://stackoverflow.com/questions/6034390/compiling-with-cython-and-mingw-produces-gcc-error-unrecognized-command-line-o
934236b1c00e234c6cadece0ace7e8f2fcab67fa,15633341,        <!-- TODO: Investigate AJAX a la http://stackoverflow.com/questions/15633341/jquery-ui-sortable-then-write-order-into-a-database -->
5f11e38a8c3c2ef93f70361b5326952f32eb6399,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
a67d17a67fca822c76dd99964143f31ea8efa11c,175739,    // http://stackoverflow.com/questions/175739/is-there-a-built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number
9ae1dd96d2b7b75ae06690a27d5916a0f44fda5b,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
158d157a5124dfd883a14bab3e4a9e85b56e330e,5069224,            https://stackoverflow.com/questions/5069224/handling-subprocess-crash-in-windows
a315d5f4339892e694b82212f9fad7dbbf609a4f,15037955,// Original Posting: http://stackoverflow.com/questions/15037955/luabind-cant-return-shared-ptr
2039be82e4f1b48d7a6c877dc23a4dc6a71be401,37519828,    					// see http://stackoverflow.com/questions/37519828
0362e915a8d104ec417bac636ac73663753bee2a,4100506,' http://stackoverflow.com/questions/4100506/check-if-an-object-exists-in-vbscript
41a69ff7d84e833cf5b0caf9b495f8dc27d51721,7688070,* [1]: https://stackoverflow.com/questions/7688070/why-is-comparing-the-constructor-property-of-two-windows-unreliable
d4cfc811ab054eeee3936fd8e6e86a00aeb13b66,31723271,"                                  # (Which seems useless under OS X, see: http://stackoverflow.com/q/31723271/1027706)"
5d411dcdc12d1ccc80ea44435732b77a0237da4a,4774054,# get the script path http://stackoverflow.com/questions/4774054/reliable-way-for-a-bash-script-to-get-the-full-path-to-itself
ca1c9be11d9c1e95c5b15cb971372b30f81be26c,2394609,"<li><a href=""https://stackoverflow.com/questions/2394609"">Makefile, header dependencies</a></li>"
d092b81b4b291f410e38d5d1684da588d7eee770,7178108,This gem based off this [solution](http://stackoverflow.com/a/7178108/289797).
4e405c6edf514ce913579c10006eb10f31ff1cca,333995,elif sys.gettrace():  # http://stackoverflow.com/questions/333995/how-to-detect-that-python-code-is-being-executed-through-the-debugger
5775028406e89cc910207b1af4b8671131e80652,38843970,`service-worker.js` [with HTTP caching disabled](http://stackoverflow.com/questions/38843970/service-worker-javascript-update-frequency-every-24-hours).
76ce03c79b413efa54278f1a8ae90f9fa34c1324,15145121,            //(https://stackoverflow.com/a/15145121)
80177952cb2f26a7dc524e57d00e2f306435607c,32868665,[10]: https://stackoverflow.com/questions/32868665/how-to-initialize-a-map-using-a-lambda
f8a24fb14f308b2a912b80f9e1198a04f7ad1f51,6917009,"    ""body"": ""Is it possible to choose which views are cached, or will Express just cache them all?\r\n\r\n(context http://stackoverflow.com/questions/6917009/caching-in-node-express-how-do-you-whitelist-blacklist-views)"""
74c28356378645e907504606877c1c4ea813ce4c,15786966,        // More info here: http://stackoverflow.com/questions/15786966/xdomainrequest-aborts-post-on-ie-9
5e7313b6bc1866875bc53550009c6d4d530d3f5b,54771452,# https://stackoverflow.com/questions/54771452/expanding-a-variable-cmakedefine-and-generator-expression-in-template-file
6f15e5a76630557ab53db966aec4b2b582cde2f8,579687,                    # (from http://stackoverflow.com/questions/579687/how-do-i-copy-a-string-to-the-clipboard-on-windows-using-python)
55fa31db408ecccda95a8064316f6b4743098da3,7814017, * Found at http://stackoverflow.com/questions/7814017/is-it-possible-to-disable-scrolling-on-a-viewpager.
4432626f048cbb0cf6d6811356bdb17e12b1e94d,41429723,		await this.driver.sleep( 2000 ); // https://stackoverflow.com/questions/41429723/unhandled-error-cannot-find-context-with-specified-id-using-robot-framework
7103cfddd5c993ac32ac85b1d7a19eaa999b50b1,11672294,        #buffer = httpProxy.buffer(req)  # see http://stackoverflow.com/questions/11672294/invoking-an-asynchronous-method-inside-a-middleware-in-node-http-proxy
8f3d7acc07c087f910cb5e0342a7701ff307180f,3330919,        // http://stackoverflow.com/a/3330919)
522d731ddfc5c7aa44fa5038f9102cf68780b9e2,10046972,	  // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request
915469693efd61b172c69e73d7dc1a2021446bf6,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
b735561e90edfd6efd220ee10021c83e8215b3ea,13234898,https://stackoverflow.com/questions/13165913/draw-an-arrow-between-two-circles#13234898
493a3aaca3ddf5d546f88d199388c75f531930da,23846961, * @see http://stackoverflow.com/a/23846961/2289640
77a830e35c04c084f7ec1ccea9985c64a8d5389b,9338122,             * http://stackoverflow.com/questions/9338122/action-items-from-viewpager-initial-fragment-not-being-displayed
9f9f2789bad7b2220263b3073e13a0e6a1cedae7,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
0309bc21823687b2f2e9eedd9ad1f01c762f95a9,18946610,    // http://stackoverflow.com/a/18946610/1047713
3e8006b11df5ba9aaddbb2305f7cb116071f1505,1162491,     * http://stackoverflow.com/questions/1162491/alternative-to-mysql-real-escape-string-without-connecting-to-db
14544bae7327aff91f882f99143062efaaf0845d,22626756,	/// Thanks to Neco @ https://stackoverflow.com/questions/237807/net-sslstream-doesnt-close-tls-connection-properly/22626756#22626756
9808216117eb5afd91fb07ff8986b3d9fc1cfba7,3085263,'''Based on http://stackoverflow.com/questions/3085263/create-an-utf-8-csv-file-in-python'''
2771cbd020c4c3089df094e26a2eb131713a44ea,13086110,# See http://stackoverflow.com/questions/13086110/jquery-mobile-router-doesnt-route-the-first-page-load
73b16cb5ca83142229c10f346bed7cef3b3aca6a,14243380,#src for lol: https://stackoverflow.com/questions/14243380/how-to-configure-git-log-to-show-commit-date
768107028561dc90d81843e8bf270899a662d4d3,11110801,;; https://stackoverflow.com/questions/11110801/why-does-ctrl-not-work-when-i-bind-it-to-a-command-in-emacs
874fa1f46c0d1aa804bd28a7d7797941aa0ffaa6,14887378,//http://stackoverflow.com/questions/14887378/how-to-return-array-from-c-function-to-python-using-ctypes
81c4e1a8db7e0a6a725d4de83b4be3b5b0205931,4020824,            # https://stackoverflow.com/a/4020824/2350244
cb6310aa87e6b66a5fbbb3107141414707cb342d,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
081332fdb375077b9154642adb78e9aeade48acb,3330919,        // http://stackoverflow.com/a/3330919)
5a61aae6d1fcea670a5397db7cc165dff6b59f34,8955580,// Thank you: http://stackoverflow.com/a/8955580
f5d2fea206e1cbfd19babab4895caac0b04301ac,8131396,"        // Reference: ""http://stackoverflow.com/questions/8131396/remove-nested-span-without-id"""
2b6319db3d8b474ca51c08f6420eae52f21b5244,16861050,		// Multi Screen Popup Positioning (http://stackoverflow.com/a/16861050)
29880b528c485e8b9155cefbfc47d8f3fd3c53ca,8587913,            // http://stackoverflow.com/questions/8587913/what-exactly-does-urlconnection-setdooutput-affect
c928e44d99a0027feb92826fede56b296b4a4d31,12545570,;; `http://stackoverflow.com/questions/12545570/how-to-destroy-processing-papplet-without-calling-exit`
62fea664470ecb732294304f6eda2d0a68263816,4176923,    // http://stackoverflow.com/questions/4176923/html-of-selected-text
3bd757c08a4b50e199137b18304466700f245457,11744120,          //// Based on [this Stack Overflow answer. ](http://stackoverflow.com/a/11744120)
adaa47adb4c20b432e0c94cb911bff06826805c8,6938990,	/* http://stackoverflow.com/a/6938990 */
a7e9294b80880453dd0c0d4dc7ac650dafe2371e,1696693,[source](http://stackoverflow.com/questions/1696693/clojure-how-to-find-out-the-arity-of-function-at-runtime)
74ab9036aeeb3b78b6c452ab2f32adbbdc56b44e,10456557,"    1. Add a Symbolic Breakpoint that configures the debugger to ignore the signals. ([Thanks, puzzle on stackoverflow.](http://stackoverflow.com/a/10456557/1207583))"
0bba8b845dbc5f741cf7a0dd34c9806b16218b6f,7267102,        // thanks to http://stackoverflow.com/questions/7267102/how-do-i-update-upsert-a-document-in-mongoose
22fd0108e42ef0cb1300805d8f5afde24f6b1acd,9419263,* ![playing-audio-with-javascript](http://stackoverflow.com/questions/9419263/playing-audio-with-javascript)
d0d749c84be6fbc1380434c6ef1728610269592a,24315631,//Taken from: http://stackoverflow.com/a/24315631
2cf7303e3d37513649e8dec1a1ec44a99740aef5,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
2e0b5a48d2336c9e553b1dc6f0fff28f64fa681c,7089687,    // Great way to save a view's state http://stackoverflow.com/a/7089687/1991053
0c51e927b7a7a84008c80a1f01c1d1a0f7b6e844,39512823,<http://stackoverflow.com/questions/39512823/duplicate-symbols-for-architecture-arm64-after-xcode-8-0-update>
445fd1ecbc63a207a09ba61b87c7e7e1a47c84c6,3330919,        // http://stackoverflow.com/a/3330919)
ab78a98b231ad818f9bbeea6a7d938e602208d66,5623838,	            /* Hex to RGB conversion. Copyright Tim Down: http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb */
ac4b75c7a142f53ab711144f9608484082ea1d89,8041343,        // From http://stackoverflow.com/questions/8041343/how-to-split-a-byte
74e38dcff41216400988540371f7a9755542e723,6348902,https://stackoverflow.com/questions/6348902/how-can-i-add-numbers-in-a-bash-script
f06480518644e85152234ec890a025615db08e83,311165,      // http://stackoverflow.com/questions/311165/how-do-you-convert-byte-array-to-hexadecimal-string-and-vice-versa
9f171a6d1aeac097585a44836ff5934567982b28,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
eeb83b19f7529a3b1da2a42df00661ee7e8760db,5377960,clone me now! [Thnx for idea](http://stackoverflow.com/questions/5377960/whats-the-best-practice-to-git-clone-into-an-existing-folder)
52c33a19a656c379fdda0a2f8f370adabe04e8cd,16642628,  [this helped](https://stackoverflow.com/questions/14534397/squash-all-my-commits-into-one-for-github-pull-request/16642628#16642628)
2fa27bbcac806f3fda95d4d49a9739ea61291b16,3732234,            //https://stackoverflow.com/a/3732234/294804
821855187e29eb006ef856ad889666c0cd46a46d,7738439,				$content =~ s/(<br\ ?\/?>)+/<br \/>/ig; # http://stackoverflow.com/questions/7738439/how-to-regex-replace-multiple-br-tags-with-one-br-tag
597fdd2acedea75884c1e8e44d96f8d40d459d5d,23256768,      # According to http://stackoverflow.com/a/23256768 YouTube does not
32e84e450255f6741b1df4814e82ff4dd9011084,3640853,// http://stackoverflow.com/questions/3640853/performance-test-sem-t-v-s-dispatch-semaphore-t-and-pthread-once-t-v-s-dispat
4c8ca9b2e3c1e27edfaed56b8f3096dda44b1b3b,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
c73895405a0444840d19ffcbcea333c5a5ee4397,23855976,                http://stackoverflow.com/questions/23855976/middle-point-of-each-pair-of-an-numpy-array
375dc789a5043b2239fc8901aef801c916ceb0ca,10560779,      // http://stackoverflow.com/questions/10560779/cl-exe-when-launched-via-createprocess-does-not-seem-to-have-write-permissions
9da2e04cbd34fc938e5b82608d5a46f5241f40a2,13907921,"[22]C.  Express, ""Cannot render swig templates in Express"", Stackoverflow.com, 2016. [Online]. Available: http://stackoverflow.com/a/13907921. [Accessed: 11- Apr- 2016]."
ded796e444afb7b9cc3fa5dd7284dc504082fc9a,19498009,Dieser [StackOverflow](http://stackoverflow.com/a/19498009/288703) Post erklaert warum.
657f60eb315713b5bd91f814b97ec7614a06a11c,7408407,-- http://stackoverflow.com/questions/7408407/generate-next-largest-or-smallest-representable-floating-point-number-without-bi
3ba40027d2350e82d12f70fa81c875b3c3150d2a,97962,    // http://stackoverflow.com/questions/97962/debounce-clicks-when-submitting-a-web-form
27492c6f684ab191539c1c4fd2c53c53e4eb101c,1844688,    //Modified from http://stackoverflow.com/questions/1844688/read-all-files-in-a-folder
e8e0ed4507f1e40df0cc5e688578a4b49268053d,13728184,  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
f2644dbf49c29d91a36c58974d9148b2a9bff291,12866060,"{""version"":3,""file"":""ZeroClipboard.Core.min.js"",""sources"":[""ZeroClipboard.Core.js""],""names"":[""window"",""undefined"",""_currentElement"",""_window"",""_document"",""document"",""_navigator"",""navigator"",""_setTimeout"",""setTimeout"",""_encodeURIComponent"",""encodeURIComponent"",""_ActiveXObject"",""ActiveXObject"",""_Error"",""Error"",""_parseInt"",""Number"",""parseInt"",""_parseFloat"",""parseFloat"",""_isNaN"",""isNaN"",""_round"",""Math"",""round"",""_now"",""Date"",""now"",""_keys"",""Object"",""keys"",""_defineProperty"",""defineProperty"",""_hasOwn"",""prototype"",""hasOwnProperty"",""_slice"",""Array"",""slice"",""_args"",""argumentsObj"",""call"",""_extend"",""i"",""len"",""arg"",""prop"",""src"",""copy"",""args"",""arguments"",""target"",""length"",""_deepCopy"",""source"",""_pick"",""obj"",""newObj"",""_omit"",""indexOf"",""_deleteOwnProperties"",""_containedBy"",""el"",""ancestorEl"",""nodeType"",""ownerDocument"",""parentNode"",""_getDirPathOfUrl"",""url"",""dir"",""split"",""lastIndexOf"",""_getCurrentScriptUrlFromErrorStack"",""stack"",""matches"",""match"",""_getCurrentScriptUrlFromError"",""err"",""e"",""sourceURL"",""fileName"",""_getCurrentScriptUrl"",""jsPath"",""scripts"",""currentScript"",""getElementsByTagName"",""readyState"",""_getUnanimousScriptParentDir"",""jsDir"",""_getDefaultSwfPath"",""_flashState"",""bridge"",""version"",""pluginType"",""disabled"",""outdated"",""unavailable"",""deactivated"",""overdue"",""ready"",""_minimumFlashVersion"",""_handlers"",""_clipData"",""_clipDataFormatMap"",""_eventMessages"",""error"",""flash-disabled"",""flash-outdated"",""flash-unavailable"",""flash-deactivated"",""flash-overdue"",""_globalConfig"",""swfPath"",""trustedDomains"",""location"",""host"",""cacheBust"",""forceEnhancedClipboard"",""flashLoadTimeout"",""autoActivate"",""bubbleEvents"",""containerId"",""containerClass"",""swfObjectId"",""hoverClass"",""activeClass"",""forceHandCursor"",""title"",""zIndex"",""_config"",""options"",""test"",""_isValidHtml4Id"",""_state"",""browser"",""flash"",""zeroclipboard"",""ZeroClipboard"",""config"",""_isFlashUnusable"",""_on"",""eventType"",""listener"",""events"",""added"",""toLowerCase"",""on"",""replace"",""push"",""emit"",""type"",""errorTypes"",""name"",""_off"",""foundIndex"",""perEventHandlers"",""off"",""splice"",""_listeners"",""_emit"",""event"",""eventCopy"",""returnVal"",""tmp"",""_createEvent"",""_preprocessEvent"",""_dispatchCallbacks"",""this"",""_mapClipDataToFlash"",""data"",""formatMap"",""_create"",""isFlashUnusable"",""maxWait"",""_embedSwf"",""_destroy"",""clearData"",""blur"",""_unembedSwf"",""_setData"",""format"",""dataObj"",""dataFormat"",""_clearData"",""_getData"",""_focus"",""element"",""_removeClass"",""_addClass"",""newTitle"",""getAttribute"",""htmlBridge"",""_getHtmlBridge"",""setAttribute"",""useHandCursor"",""_getStyle"",""_setHandCursor"",""_reposition"",""_blur"",""removeAttribute"",""style"",""left"",""top"",""width"",""_activeElement"",""id"",""relatedTarget"",""currentTarget"",""timeStamp"",""msg"",""message"",""minimumVersion"",""clipboardData"",""setData"",""_mapClipResultsFromFlash"",""_getRelatedTarget"",""_addMouseData"",""targetEl"",""relatedTargetId"",""getElementById"",""srcElement"",""fromElement"",""toElement"",""pos"",""_getDOMObjectPosition"",""screenLeft"",""screenX"",""screenTop"",""screenY"",""scrollLeft"",""body"",""documentElement"",""scrollTop"",""pageX"",""_stageX"",""pageY"",""_stageY"",""clientX"",""clientY"",""moveX"",""movementX"",""moveY"",""movementY"",""x"",""y"",""offsetX"",""offsetY"",""layerX"",""layerY"",""_shouldPerformAsync"",""_dispatchCallback"",""func"",""context"",""async"",""apply"",""wildcardTypeHandlers"",""specificTypeHandlers"",""handlers"",""concat"",""originalContext"",""handleEvent"",""sourceIsSwf"",""_source"",""flashErrorNames"",""wasDeactivated"",""textContent"",""htmlContent"",""value"",""outerHTML"",""innerHTML"",""innerText"",""_safeActiveElement"",""focus"",""_fireMouseEvent"",""bubbles"",""cancelable"",""doc"",""defaults"",""view"",""defaultView"",""canBubble"",""detail"",""button"",""which"",""createEvent"",""dispatchEvent"",""ctrlKey"",""altKey"",""shiftKey"",""metaKey"",""initMouseEvent"",""_createHtmlBridge"",""container"",""createElement"",""className"",""position"",""height"",""_getSafeZIndex"",""flashBridge"",""nodeName"",""allowScriptAccess"",""_determineScriptAccess"",""allowNetworking"",""flashvars"",""_vars"",""swfUrl"",""_cacheBust"",""divToBeReplaced"",""appendChild"",""tmpDiv"",""oldIE"",""firstChild"",""replaceChild"",""display"",""removeSwfFromIE"",""removeChild"",""clipData"",""newClipData"",""text"",""html"",""rtf"",""clipResults"",""newResults"",""tmpHash"",""path"",""domain"",""domains"",""str"",""trustedOriginsExpanded"",""_extractDomain"",""protocol"",""join"",""originOrUrl"",""protocolIndex"",""pathIndex"",""_extractAllDomains"",""origins"",""resultsArray"",""currentDomain"",""configOptions"",""swfDomain"",""activeElement"",""classList"",""contains"",""add"",""classNames"",""setClass"",""c"",""cl"",""remove"",""getComputedStyle"",""getPropertyValue"",""_getZoomFactor"",""rect"",""physicalWidth"",""logicalWidth"",""zoomFactor"",""getBoundingClientRect"",""right"",""offsetWidth"",""info"",""pageXOffset"",""pageYOffset"",""leftBorderWidth"",""clientLeft"",""topBorderWidth"",""clientTop"",""bottom"",""enabled"",""setHandCursor"",""val"",""_detectFlashSupport"",""parseFlashVersion"",""desc"",""isPepperFlash"",""flashPlayerFileName"",""inspectPlugin"",""plugin"",""hasFlash"",""flashVersion"",""description"",""filename"",""isPPAPI"",""ax"",""mimeType"",""isActiveX"",""plugins"",""mimeTypes"",""enabledPlugin"",""GetVariable"",""e1"",""e2"",""e3"",""_createClient"",""writable"",""configurable"",""enumerable"",""state"",""create"",""destroy"",""getData"",""activate"",""deactivate"",""define"",""amd"",""module"",""exports""],""mappings"":""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"",""sourcesContent"":[""/*!\n * ZeroClipboard\n * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n * Copyright (c) 2014 Jon Rohan, James M. Greene\n * Licensed MIT\n * http://zeroclipboard.org/\n * v2.1.3\n */\n(function(window, undefined) {\n  \""use strict\"";\n  /**\n * Store references to critically important global functions that may be\n * overridden on certain web pages.\n */\n  var _window = window, _document = _window.document, _navigator = _window.navigator, _setTimeout = _window.setTimeout, _encodeURIComponent = _window.encodeURIComponent, _ActiveXObject = _window.ActiveXObject, _Error = _window.Error, _parseInt = _window.Number.parseInt || _window.parseInt, _parseFloat = _window.Number.parseFloat || _window.parseFloat, _isNaN = _window.Number.isNaN || _window.isNaN, _round = _window.Math.round, _now = _window.Date.now, _keys = _window.Object.keys, _defineProperty = _window.Object.defineProperty, _hasOwn = _window.Object.prototype.hasOwnProperty, _slice = _window.Array.prototype.slice;\n  /**\n * Convert an `arguments` object into an Array.\n *\n * @returns The arguments as an Array\n * @private\n */\n  var _args = function(argumentsObj) {\n    return _slice.call(argumentsObj, 0);\n  };\n  /**\n * Shallow-copy the owned, enumerable properties of one object over to another, similar to jQuery's `$.extend`.\n *\n * @returns The target object, augmented\n * @private\n */\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, args = _args(arguments), target = args[0] || {};\n    for (i = 1, len = args.length; i < len; i++) {\n      if ((arg = args[i]) != null) {\n        for (prop in arg) {\n          if (_hasOwn.call(arg, prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target !== copy && copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  /**\n * Return a deep copy of the source object or array.\n *\n * @returns Object or Array\n * @private\n */\n  var _deepCopy = function(source) {\n    var copy, i, len, prop;\n    if (typeof source !== \""object\"" || source == null) {\n      copy = source;\n    } else if (typeof source.length === \""number\"") {\n      copy = [];\n      for (i = 0, len = source.length; i < len; i++) {\n        if (_hasOwn.call(source, i)) {\n          copy[i] = _deepCopy(source[i]);\n        }\n      }\n    } else {\n      copy = {};\n      for (prop in source) {\n        if (_hasOwn.call(source, prop)) {\n          copy[prop] = _deepCopy(source[prop]);\n        }\n      }\n    }\n    return copy;\n  };\n  /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to keep.\n * The inverse of `_omit`, mostly. The big difference is that these properties do NOT need to be enumerable to\n * be kept.\n *\n * @returns A new filtered object.\n * @private\n */\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to omit.\n * The inverse of `_pick`.\n *\n * @returns A new filtered object.\n * @private\n */\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (keys.indexOf(prop) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  /**\n * Remove all owned, enumerable properties from an object.\n *\n * @returns The original object without its owned, enumerable properties.\n * @private\n */\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (_hasOwn.call(obj, prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  /**\n * Determine if an element is contained within another element.\n *\n * @returns Boolean\n * @private\n */\n  var _containedBy = function(el, ancestorEl) {\n    if (el && el.nodeType === 1 && el.ownerDocument && ancestorEl && (ancestorEl.nodeType === 1 && ancestorEl.ownerDocument && ancestorEl.ownerDocument === el.ownerDocument || ancestorEl.nodeType === 9 && !ancestorEl.ownerDocument && ancestorEl === el.ownerDocument)) {\n      do {\n        if (el === ancestorEl) {\n          return true;\n        }\n        el = el.parentNode;\n      } while (el);\n    }\n    return false;\n  };\n  /**\n * Get the URL path's parent directory.\n *\n * @returns String or `undefined`\n * @private\n */\n  var _getDirPathOfUrl = function(url) {\n    var dir;\n    if (typeof url === \""string\"" && url) {\n      dir = url.split(\""#\"")[0].split(\""?\"")[0];\n      dir = url.slice(0, url.lastIndexOf(\""/\"") + 1);\n    }\n    return dir;\n  };\n  /**\n * Get the current script's URL by throwing an `Error` and analyzing it.\n *\n * @returns String or `undefined`\n * @private\n */\n  var _getCurrentScriptUrlFromErrorStack = function(stack) {\n    var url, matches;\n    if (typeof stack === \""string\"" && stack) {\n      matches = stack.match(/^(?:|[^:@]*@|.+\\)@(?=http[s]?|file)|.+?\\s+(?: at |@)(?:[^:\\(]+ )*[\\(]?)((?:http[s]?|file):\\/\\/[\\/]?.+?\\/[^:\\)]*?)(?::\\d+)(?::\\d+)?/);\n      if (matches && matches[1]) {\n        url = matches[1];\n      } else {\n        matches = stack.match(/\\)@((?:http[s]?|file):\\/\\/[\\/]?.+?\\/[^:\\)]*?)(?::\\d+)(?::\\d+)?/);\n        if (matches && matches[1]) {\n          url = matches[1];\n        }\n      }\n    }\n    return url;\n  };\n  /**\n * Get the current script's URL by throwing an `Error` and analyzing it.\n *\n * @returns String or `undefined`\n * @private\n */\n  var _getCurrentScriptUrlFromError = function() {\n    var url, err;\n    try {\n      throw new _Error();\n    } catch (e) {\n      err = e;\n    }\n    if (err) {\n      url = err.sourceURL || err.fileName || _getCurrentScriptUrlFromErrorStack(err.stack);\n    }\n    return url;\n  };\n  /**\n * Get the current script's URL.\n *\n * @returns String or `undefined`\n * @private\n */\n  var _getCurrentScriptUrl = function() {\n    var jsPath, scripts, i;\n    if (_document.currentScript && (jsPath = _document.currentScript.src)) {\n      return jsPath;\n    }\n    scripts = _document.getElementsByTagName(\""script\"");\n    if (scripts.length === 1) {\n      return scripts[0].src || undefined;\n    }\n    if (\""readyState\"" in scripts[0]) {\n      for (i = scripts.length; i--; ) {\n        if (scripts[i].readyState === \""interactive\"" && (jsPath = scripts[i].src)) {\n          return jsPath;\n        }\n      }\n    }\n    if (_document.readyState === \""loading\"" && (jsPath = scripts[scripts.length - 1].src)) {\n      return jsPath;\n    }\n    if (jsPath = _getCurrentScriptUrlFromError()) {\n      return jsPath;\n    }\n    return undefined;\n  };\n  /**\n * Get the unanimous parent directory of ALL script tags.\n * If any script tags are either (a) inline or (b) from differing parent\n * directories, this method must return `undefined`.\n *\n * @returns String or `undefined`\n * @private\n */\n  var _getUnanimousScriptParentDir = function() {\n    var i, jsDir, jsPath, scripts = _document.getElementsByTagName(\""script\"");\n    for (i = scripts.length; i--; ) {\n      if (!(jsPath = scripts[i].src)) {\n        jsDir = null;\n        break;\n      }\n      jsPath = _getDirPathOfUrl(jsPath);\n      if (jsDir == null) {\n        jsDir = jsPath;\n      } else if (jsDir !== jsPath) {\n        jsDir = null;\n        break;\n      }\n    }\n    return jsDir || undefined;\n  };\n  /**\n * Get the presumed location of the \""ZeroClipboard.swf\"" file, based on the location\n * of the executing JavaScript file (e.g. \""ZeroClipboard.js\"", etc.).\n *\n * @returns String\n * @private\n */\n  var _getDefaultSwfPath = function() {\n    var jsDir = _getDirPathOfUrl(_getCurrentScriptUrl()) || _getUnanimousScriptParentDir() || \""\"";\n    return jsDir + \""ZeroClipboard.swf\"";\n  };\n  /**\n * Keep track of the state of the Flash object.\n * @private\n */\n  var _flashState = {\n    bridge: null,\n    version: \""0.0.0\"",\n    pluginType: \""unknown\"",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  /**\n * The minimum Flash Player version required to use ZeroClipboard completely.\n * @readonly\n * @private\n */\n  var _minimumFlashVersion = \""11.0.0\"";\n  /**\n * Keep track of all event listener registrations.\n * @private\n */\n  var _handlers = {};\n  /**\n * Keep track of the currently activated element.\n * @private\n */\n  var _currentElement;\n  /**\n * Keep track of data for the pending clipboard transaction.\n * @private\n */\n  var _clipData = {};\n  /**\n * Keep track of data formats for the pending clipboard transaction.\n * @private\n */\n  var _clipDataFormatMap = null;\n  /**\n * The `message` store for events\n * @private\n */\n  var _eventMessages = {\n    ready: \""Flash communication is established\"",\n    error: {\n      \""flash-disabled\"": \""Flash is disabled or not installed\"",\n      \""flash-outdated\"": \""Flash is too outdated to support ZeroClipboard\"",\n      \""flash-unavailable\"": \""Flash is unable to communicate bidirectionally with JavaScript\"",\n      \""flash-deactivated\"": \""Flash is too outdated for your browser and/or is configured as click-to-activate\"",\n      \""flash-overdue\"": \""Flash communication was established but NOT within the acceptable time limit\""\n    }\n  };\n  /**\n * ZeroClipboard configuration defaults for the Core module.\n * @private\n */\n  var _globalConfig = {\n    swfPath: _getDefaultSwfPath(),\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceEnhancedClipboard: false,\n    flashLoadTimeout: 3e4,\n    autoActivate: true,\n    bubbleEvents: true,\n    containerId: \""global-zeroclipboard-html-bridge\"",\n    containerClass: \""global-zeroclipboard-container\"",\n    swfObjectId: \""global-zeroclipboard-flash-bridge\"",\n    hoverClass: \""zeroclipboard-is-hover\"",\n    activeClass: \""zeroclipboard-is-active\"",\n    forceHandCursor: false,\n    title: null,\n    zIndex: 999999999\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.config`.\n * @private\n */\n  var _config = function(options) {\n    if (typeof options === \""object\"" && options !== null) {\n      for (var prop in options) {\n        if (_hasOwn.call(options, prop)) {\n          if (/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(prop)) {\n            _globalConfig[prop] = options[prop];\n          } else if (_flashState.bridge == null) {\n            if (prop === \""containerId\"" || prop === \""swfObjectId\"") {\n              if (_isValidHtml4Id(options[prop])) {\n                _globalConfig[prop] = options[prop];\n              } else {\n                throw new Error(\""The specified `\"" + prop + \""` value is not valid as an HTML4 Element ID\"");\n              }\n            } else {\n              _globalConfig[prop] = options[prop];\n            }\n          }\n        }\n      }\n    }\n    if (typeof options === \""string\"" && options) {\n      if (_hasOwn.call(_globalConfig, options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    return _deepCopy(_globalConfig);\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.state`.\n * @private\n */\n  var _state = function() {\n    return {\n      browser: _pick(_navigator, [ \""userAgent\"", \""platform\"", \""appName\"" ]),\n      flash: _omit(_flashState, [ \""bridge\"" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.isFlashUnusable`.\n * @private\n */\n  var _isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.on`.\n * @private\n */\n  var _on = function(eventType, listener) {\n    var i, len, events, added = {};\n    if (typeof eventType === \""string\"" && eventType) {\n      events = eventType.toLowerCase().split(/\\s+/);\n    } else if (typeof eventType === \""object\"" && eventType && typeof listener === \""undefined\"") {\n      for (i in eventType) {\n        if (_hasOwn.call(eventType, i) && typeof i === \""string\"" && i && typeof eventType[i] === \""function\"") {\n          ZeroClipboard.on(i, eventType[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventType = events[i].replace(/^on/, \""\"");\n        added[eventType] = true;\n        if (!_handlers[eventType]) {\n          _handlers[eventType] = [];\n        }\n        _handlers[eventType].push(listener);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \""ready\""\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \""disabled\"", \""outdated\"", \""unavailable\"", \""deactivated\"", \""overdue\"" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]] === true) {\n            ZeroClipboard.emit({\n              type: \""error\"",\n              name: \""flash-\"" + errorTypes[i]\n            });\n            break;\n          }\n        }\n      }\n    }\n    return ZeroClipboard;\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.off`.\n * @private\n */\n  var _off = function(eventType, listener) {\n    var i, len, foundIndex, events, perEventHandlers;\n    if (arguments.length === 0) {\n      events = _keys(_handlers);\n    } else if (typeof eventType === \""string\"" && eventType) {\n      events = eventType.split(/\\s+/);\n    } else if (typeof eventType === \""object\"" && eventType && typeof listener === \""undefined\"") {\n      for (i in eventType) {\n        if (_hasOwn.call(eventType, i) && typeof i === \""string\"" && i && typeof eventType[i] === \""function\"") {\n          ZeroClipboard.off(i, eventType[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventType = events[i].toLowerCase().replace(/^on/, \""\"");\n        perEventHandlers = _handlers[eventType];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (listener) {\n            foundIndex = perEventHandlers.indexOf(listener);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = perEventHandlers.indexOf(listener, foundIndex);\n            }\n          } else {\n            perEventHandlers.length = 0;\n          }\n        }\n      }\n    }\n    return ZeroClipboard;\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.handlers`.\n * @private\n */\n  var _listeners = function(eventType) {\n    var copy;\n    if (typeof eventType === \""string\"" && eventType) {\n      copy = _deepCopy(_handlers[eventType]) || null;\n    } else {\n      copy = _deepCopy(_handlers);\n    }\n    return copy;\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.emit`.\n * @private\n */\n  var _emit = function(event) {\n    var eventCopy, returnVal, tmp;\n    event = _createEvent(event);\n    if (!event) {\n      return;\n    }\n    if (_preprocessEvent(event)) {\n      return;\n    }\n    if (event.type === \""ready\"" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \""error\"",\n        name: \""flash-overdue\""\n      });\n    }\n    eventCopy = _extend({}, event);\n    _dispatchCallbacks.call(this, eventCopy);\n    if (event.type === \""copy\"") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.create`.\n * @private\n */\n  var _create = function() {\n    if (typeof _flashState.ready !== \""boolean\"") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \""number\"" && maxWait >= 0) {\n        _setTimeout(function() {\n          if (typeof _flashState.deactivated !== \""boolean\"") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \""error\"",\n              name: \""flash-deactivated\""\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _embedSwf();\n    }\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.destroy`.\n * @private\n */\n  var _destroy = function() {\n    ZeroClipboard.clearData();\n    ZeroClipboard.blur();\n    ZeroClipboard.emit(\""destroy\"");\n    _unembedSwf();\n    ZeroClipboard.off();\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.setData`.\n * @private\n */\n  var _setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \""object\"" && format && typeof data === \""undefined\"") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \""string\"" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (typeof dataFormat === \""string\"" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === \""string\"" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.clearData`.\n * @private\n */\n  var _clearData = function(format) {\n    if (typeof format === \""undefined\"") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \""string\"" && _hasOwn.call(_clipData, format)) {\n      delete _clipData[format];\n    }\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.getData`.\n * @private\n */\n  var _getData = function(format) {\n    if (typeof format === \""undefined\"") {\n      return _deepCopy(_clipData);\n    } else if (typeof format === \""string\"" && _hasOwn.call(_clipData, format)) {\n      return _clipData[format];\n    }\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.focus`/`ZeroClipboard.activate`.\n * @private\n */\n  var _focus = function(element) {\n    if (!(element && element.nodeType === 1)) {\n      return;\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      if (_currentElement !== element) {\n        _removeClass(_currentElement, _globalConfig.hoverClass);\n      }\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    var newTitle = element.getAttribute(\""title\"") || _globalConfig.title;\n    if (typeof newTitle === \""string\"" && newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\""title\"", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \""cursor\"") === \""pointer\"";\n    _setHandCursor(useHandCursor);\n    _reposition();\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.blur`/`ZeroClipboard.deactivate`.\n * @private\n */\n  var _blur = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\""title\"");\n      htmlBridge.style.left = \""0px\"";\n      htmlBridge.style.top = \""-9999px\"";\n      htmlBridge.style.width = \""1px\"";\n      htmlBridge.style.top = \""1px\"";\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  /**\n * The underlying implementation of `ZeroClipboard.activeElement`.\n * @private\n */\n  var _activeElement = function() {\n    return _currentElement || null;\n  };\n  /**\n * Check if a value is a valid HTML4 `ID` or `Name` token.\n * @private\n */\n  var _isValidHtml4Id = function(id) {\n    return typeof id === \""string\"" && id && /^[A-Za-z][A-Za-z0-9_:\\-\\.]*$/.test(id);\n  };\n  /**\n * Create or update an `event` object, based on the `eventType`.\n * @private\n */\n  var _createEvent = function(event) {\n    var eventType;\n    if (typeof event === \""string\"" && event) {\n      eventType = event;\n      event = {};\n    } else if (typeof event === \""object\"" && event && typeof event.type === \""string\"" && event.type) {\n      eventType = event.type;\n    }\n    if (!eventType) {\n      return;\n    }\n    _extend(event, {\n      type: eventType.toLowerCase(),\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null,\n      timeStamp: event.timeStamp || _now() || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \""error\"" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \""ready\"") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \""error\"") {\n      if (/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          target: null,\n          minimumVersion: _minimumFlashVersion\n        });\n      }\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version\n        });\n      }\n    }\n    if (event.type === \""copy\"") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \""aftercopy\"") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    event = _addMouseData(event);\n    return event;\n  };\n  /**\n * Get a relatedTarget from the target's `data-clipboard-target` attribute\n * @private\n */\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\""data-clipboard-target\"");\n    return relatedTargetId ? _document.getElementById(relatedTargetId) : null;\n  };\n  /**\n * Add element and position data to `MouseEvent` instances\n * @private\n */\n  var _addMouseData = function(event) {\n    if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n      var srcElement = event.target;\n      var fromElement = event.type === \""_mouseover\"" && event.relatedTarget ? event.relatedTarget : undefined;\n      var toElement = event.type === \""_mouseout\"" && event.relatedTarget ? event.relatedTarget : undefined;\n      var pos = _getDOMObjectPosition(srcElement);\n      var screenLeft = _window.screenLeft || _window.screenX || 0;\n      var screenTop = _window.screenTop || _window.screenY || 0;\n      var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft;\n      var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop;\n      var pageX = pos.left + (typeof event._stageX === \""number\"" ? event._stageX : 0);\n      var pageY = pos.top + (typeof event._stageY === \""number\"" ? event._stageY : 0);\n      var clientX = pageX - scrollLeft;\n      var clientY = pageY - scrollTop;\n      var screenX = screenLeft + clientX;\n      var screenY = screenTop + clientY;\n      var moveX = typeof event.movementX === \""number\"" ? event.movementX : 0;\n      var moveY = typeof event.movementY === \""number\"" ? event.movementY : 0;\n      delete event._stageX;\n      delete event._stageY;\n      _extend(event, {\n        srcElement: srcElement,\n        fromElement: fromElement,\n        toElement: toElement,\n        screenX: screenX,\n        screenY: screenY,\n        pageX: pageX,\n        pageY: pageY,\n        clientX: clientX,\n        clientY: clientY,\n        x: clientX,\n        y: clientY,\n        movementX: moveX,\n        movementY: moveY,\n        offsetX: 0,\n        offsetY: 0,\n        layerX: 0,\n        layerY: 0\n      });\n    }\n    return event;\n  };\n  /**\n * Determine if an event's registered handlers should be execute synchronously or asynchronously.\n *\n * @returns {boolean}\n * @private\n */\n  var _shouldPerformAsync = function(event) {\n    var eventType = event && typeof event.type === \""string\"" && event.type || \""\"";\n    return !/^(?:(?:before)?copy|destroy)$/.test(eventType);\n  };\n  /**\n * Control if a callback should be executed asynchronously or not.\n *\n * @returns `undefined`\n * @private\n */\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      _setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  /**\n * Handle the actual dispatching of events to client instances.\n *\n * @returns `undefined`\n * @private\n */\n  var _dispatchCallbacks = function(event) {\n    if (!(typeof event === \""object\"" && event && event.type)) {\n      return;\n    }\n    var async = _shouldPerformAsync(event);\n    var wildcardTypeHandlers = _handlers[\""*\""] || [];\n    var specificTypeHandlers = _handlers[event.type] || [];\n    var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);\n    if (handlers && handlers.length) {\n      var i, len, func, context, eventCopy, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \""string\"" && typeof _window[func] === \""function\"") {\n          func = _window[func];\n        }\n        if (typeof func === \""object\"" && func && typeof func.handleEvent === \""function\"") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \""function\"") {\n          eventCopy = _extend({}, event);\n          _dispatchCallback(func, context, [ eventCopy ], async);\n        }\n      }\n    }\n    return this;\n  };\n  /**\n * Preprocess any special behaviors, reactions, or state changes after receiving this event.\n * Executes only once per event emitted, NOT once per client.\n * @private\n */\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement || null;\n    var sourceIsSwf = event._source === \""swf\"";\n    delete event._source;\n    var flashErrorNames = [ \""flash-disabled\"", \""flash-outdated\"", \""flash-unavailable\"", \""flash-deactivated\"", \""flash-overdue\"" ];\n    switch (event.type) {\n     case \""error\"":\n      if (flashErrorNames.indexOf(event.name) !== -1) {\n        _extend(_flashState, {\n          disabled: event.name === \""flash-disabled\"",\n          outdated: event.name === \""flash-outdated\"",\n          unavailable: event.name === \""flash-unavailable\"",\n          deactivated: event.name === \""flash-deactivated\"",\n          overdue: event.name === \""flash-overdue\"",\n          ready: false\n        });\n      }\n      break;\n\n     case \""ready\"":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \""copy\"":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\""text/html\""] || _clipData[\""text/plain\""]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\""text/plain\"", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\""text/html\"", htmlContent);\n        }\n      } else if (!_clipData[\""text/plain\""] && event.target && (textContent = event.target.getAttribute(\""data-clipboard-text\""))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\""text/plain\"", textContent);\n      }\n      break;\n\n     case \""aftercopy\"":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \""_mouseover\"":\n      ZeroClipboard.focus(element);\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n          _fireMouseEvent(_extend({}, event, {\n            type: \""mouseenter\"",\n            bubbles: false,\n            cancelable: false\n          }));\n        }\n        _fireMouseEvent(_extend({}, event, {\n          type: \""mouseover\""\n        }));\n      }\n      break;\n\n     case \""_mouseout\"":\n      ZeroClipboard.blur();\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n          _fireMouseEvent(_extend({}, event, {\n            type: \""mouseleave\"",\n            bubbles: false,\n            cancelable: false\n          }));\n        }\n        _fireMouseEvent(_extend({}, event, {\n          type: \""mouseout\""\n        }));\n      }\n      break;\n\n     case \""_mousedown\"":\n      _addClass(element, _globalConfig.activeClass);\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        _fireMouseEvent(_extend({}, event, {\n          type: event.type.slice(1)\n        }));\n      }\n      break;\n\n     case \""_mouseup\"":\n      _removeClass(element, _globalConfig.activeClass);\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        _fireMouseEvent(_extend({}, event, {\n          type: event.type.slice(1)\n        }));\n      }\n      break;\n\n     case \""_click\"":\n     case \""_mousemove\"":\n      if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n        _fireMouseEvent(_extend({}, event, {\n          type: event.type.slice(1)\n        }));\n      }\n      break;\n    }\n    if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n      return true;\n    }\n  };\n  /**\n * Dispatch a synthetic MouseEvent.\n *\n * @returns `undefined`\n * @private\n */\n  var _fireMouseEvent = function(event) {\n    if (!(event && typeof event.type === \""string\"" && event)) {\n      return;\n    }\n    var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = {\n      view: doc.defaultView || _window,\n      canBubble: true,\n      cancelable: true,\n      detail: event.type === \""click\"" ? 1 : 0,\n      button: typeof event.which === \""number\"" ? event.which - 1 : typeof event.button === \""number\"" ? event.button : doc.createEvent ? 0 : 1\n    }, args = _extend(defaults, event);\n    if (!target) {\n      return;\n    }\n    if (doc.createEvent && target.dispatchEvent) {\n      args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ];\n      e = doc.createEvent(\""MouseEvents\"");\n      if (e.initMouseEvent) {\n        e.initMouseEvent.apply(e, args);\n        e._source = \""js\"";\n        target.dispatchEvent(e);\n      }\n    }\n  };\n  /**\n * Create the HTML bridge element to embed the Flash object into.\n * @private\n */\n  var _createHtmlBridge = function() {\n    var container = _document.createElement(\""div\"");\n    container.id = _globalConfig.containerId;\n    container.className = _globalConfig.containerClass;\n    container.style.position = \""absolute\"";\n    container.style.left = \""0px\"";\n    container.style.top = \""-9999px\"";\n    container.style.width = \""1px\"";\n    container.style.height = \""1px\"";\n    container.style.zIndex = \""\"" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  /**\n * Get the HTML element container that wraps the Flash bridge object/element.\n * @private\n */\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \""OBJECT\"" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  /**\n * Create the SWF object.\n *\n * @returns The SWF object reference.\n * @private\n */\n  var _embedSwf = function() {\n    var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge);\n    if (!flashBridge) {\n      var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \""never\"" ? \""none\"" : \""all\"";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = _document.createElement(\""div\"");\n      container.appendChild(divToBeReplaced);\n      _document.body.appendChild(container);\n      var tmpDiv = _document.createElement(\""div\"");\n      var oldIE = _flashState.pluginType === \""activex\"";\n      tmpDiv.innerHTML = '<object id=\""' + _globalConfig.swfObjectId + '\"" name=\""' + _globalConfig.swfObjectId + '\"" ' + 'width=\""100%\"" height=\""100%\"" ' + (oldIE ? 'classid=\""clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\""' : 'type=\""application/x-shockwave-flash\"" data=\""' + swfUrl + '\""') + \"">\"" + (oldIE ? '<param name=\""movie\"" value=\""' + swfUrl + '\""/>' : \""\"") + '<param name=\""allowScriptAccess\"" value=\""' + allowScriptAccess + '\""/>' + '<param name=\""allowNetworking\"" value=\""' + allowNetworking + '\""/>' + '<param name=\""menu\"" value=\""false\""/>' + '<param name=\""wmode\"" value=\""transparent\""/>' + '<param name=\""flashvars\"" value=\""' + flashvars + '\""/>' + \""</object>\"";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = _document[_globalConfig.swfObjectId];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge && container) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n    return flashBridge;\n  };\n  /**\n * Destroy the SWF object.\n * @private\n */\n  var _unembedSwf = function() {\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \""activex\"" && \""readyState\"" in flashBridge) {\n          flashBridge.style.display = \""none\"";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \""function\"") {\n                  flashBridge[prop] = null;\n                }\n              }\n              if (flashBridge.parentNode) {\n                flashBridge.parentNode.removeChild(flashBridge);\n              }\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              _setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          if (flashBridge.parentNode) {\n            flashBridge.parentNode.removeChild(flashBridge);\n          }\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n  };\n  /**\n * Map the data format names of the \""clipData\"" to Flash-friendly names.\n *\n * @returns A new transformed object.\n * @private\n */\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \""object\"" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === \""string\"" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \""text/plain\"":\n         case \""text\"":\n         case \""air:text\"":\n         case \""flash:text\"":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \""text/html\"":\n         case \""html\"":\n         case \""air:html\"":\n         case \""flash:html\"":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \""application/rtf\"":\n         case \""text/rtf\"":\n         case \""rtf\"":\n         case \""richtext\"":\n         case \""air:rtf\"":\n         case \""flash:rtf\"":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  /**\n * Map the data format names from Flash-friendly names back to their original \""clipData\"" names (via a format mapping).\n *\n * @returns A new transformed object.\n * @private\n */\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \""object\"" && clipResults && typeof formatMap === \""object\"" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (_hasOwn.call(clipResults, prop)) {\n        if (prop !== \""success\"" && prop !== \""data\"") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  /**\n * Will look at a path, and will create a \""?noCache={time}\"" or \""&noCache={time}\""\n * query param string to return. Does NOT append that string to the original path.\n * This is useful because ExternalInterface often breaks when a Flash SWF is cached.\n *\n * @returns The `noCache` query param with necessary \""?\""/\""&\"" prefix.\n * @private\n */\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\""?\"") === -1 ? \""?\"" : \""&\"") + \""noCache=\"" + _now();\n    } else {\n      return \""\"";\n    }\n  };\n  /**\n * Creates a query string for the FlashVars param.\n * Does NOT include the cache-busting query param.\n *\n * @returns FlashVars query string\n * @private\n */\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \""\"", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \""string\"") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \""object\"" && \""length\"" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === \""string\"") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \""*\"") {\n            trustedOriginsExpanded.length = 0;\n            trustedOriginsExpanded.push(domain);\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \""//\"" + domain, _window.location.protocol + \""//\"" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \""trustedOrigins=\"" + _encodeURIComponent(trustedOriginsExpanded.join(\"",\""));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \""&\"" : \""\"") + \""forceEnhancedClipboard=true\"";\n    }\n    if (typeof options.swfObjectId === \""string\"" && options.swfObjectId) {\n      str += (str ? \""&\"" : \""\"") + \""swfObjectId=\"" + _encodeURIComponent(options.swfObjectId);\n    }\n    return str;\n  };\n  /**\n * Extract the domain (e.g. \""github.com\"") from an origin (e.g. \""https://github.com\"") or\n * URL (e.g. \""https://github.com/zeroclipboard/zeroclipboard/\"").\n *\n * @returns the domain\n * @private\n */\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \""\"") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \""\"");\n    if (originOrUrl === \""\"") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\""//\"");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\""/\"");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \"".swf\"") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  /**\n * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`.\n *\n * @returns The appropriate script access level.\n * @private\n */\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins) {\n      var i, len, tmp, resultsArray = [];\n      if (typeof origins === \""string\"") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \""object\"" && origins && typeof origins.length === \""number\"")) {\n        return resultsArray;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \""*\"") {\n            resultsArray.length = 0;\n            resultsArray.push(\""*\"");\n            break;\n          }\n          if (resultsArray.indexOf(tmp) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n      return resultsArray;\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = _extractAllDomains(configOptions.trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \""*\"") {\n          return \""always\"";\n        }\n        if (trustedDomains.indexOf(currentDomain) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \""sameDomain\"";\n          }\n          return \""always\"";\n        }\n      }\n      return \""never\"";\n    };\n  }();\n  /**\n * Get the currently active/focused DOM element.\n *\n * @returns the currently active/focused element, or `null`\n * @private\n */\n  var _safeActiveElement = function() {\n    try {\n      return _document.activeElement;\n    } catch (err) {\n      return null;\n    }\n  };\n  /**\n * Add a class to an element, if it doesn't already have it.\n *\n * @returns The element, with its new class added.\n * @private\n */\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \""string\"") {\n      var classNames = (value || \""\"").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \"" \"" + element.className + \"" \"", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\"" \"" + classNames[c] + \"" \"") < 0) {\n              setClass += \"" \"" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \""\"");\n        }\n      }\n    }\n    return element;\n  };\n  /**\n * Remove a class from an element, if it has it.\n *\n * @returns The element, with its class removed.\n * @private\n */\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (typeof value === \""string\"" && value) {\n      var classNames = value.split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        var className = (\"" \"" + element.className + \"" \"").replace(/[\\n\\t]/g, \"" \"");\n        for (var c = 0, cl = classNames.length; c < cl; c++) {\n          className = className.replace(\"" \"" + classNames[c] + \"" \"", \"" \"");\n        }\n        element.className = className.replace(/^\\s+|\\s+$/g, \""\"");\n      }\n    }\n    return element;\n  };\n  /**\n * Attempt to interpret the element's CSS styling. If `prop` is `\""cursor\""`,\n * then we assume that it should be a hand (\""pointer\"") cursor if the element\n * is an anchor element (\""a\"" tag).\n *\n * @returns The computed style property.\n * @private\n */\n  var _getStyle = function(el, prop) {\n    var value = _window.getComputedStyle(el, null).getPropertyValue(prop);\n    if (prop === \""cursor\"") {\n      if (!value || value === \""auto\"") {\n        if (el.nodeName === \""A\"") {\n          return \""pointer\"";\n        }\n      }\n    }\n    return value;\n  };\n  /**\n * Get the zoom factor of the browser. Always returns `1.0`, except at\n * non-default zoom levels in IE<8 and some older versions of WebKit.\n *\n * @returns Floating unit percentage of the zoom factor (e.g. 150% = `1.5`).\n * @private\n */\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof _document.body.getBoundingClientRect === \""function\"") {\n      rect = _document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = _document.body.offsetWidth;\n      zoomFactor = _round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  /**\n * Get the DOM positioning info of an element.\n *\n * @returns Object containing the element's position, width, and height.\n * @private\n */\n  var _getDOMObjectPosition = function(obj) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\""pageXOffset\"" in _window && \""pageYOffset\"" in _window) {\n        pageXOffset = _window.pageXOffset;\n        pageYOffset = _window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = _round(_document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = _round(_document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = _document.documentElement.clientLeft || 0;\n      var topBorderWidth = _document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \""width\"" in rect ? rect.width : rect.right - rect.left;\n      info.height = \""height\"" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  /**\n * Reposition the Flash object to cover the currently activated element.\n *\n * @returns `undefined`\n * @private\n */\n  var _reposition = function() {\n    var htmlBridge;\n    if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) {\n      var pos = _getDOMObjectPosition(_currentElement);\n      _extend(htmlBridge.style, {\n        width: pos.width + \""px\"",\n        height: pos.height + \""px\"",\n        top: pos.top + \""px\"",\n        left: pos.left + \""px\"",\n        zIndex: \""\"" + _getSafeZIndex(_globalConfig.zIndex)\n      });\n    }\n  };\n  /**\n * Sends a signal to the Flash object to display the hand cursor if `true`.\n *\n * @returns `undefined`\n * @private\n */\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true) {\n      if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === \""function\"") {\n        _flashState.bridge.setHandCursor(enabled);\n      } else {\n        _flashState.ready = false;\n      }\n    }\n  };\n  /**\n * Get a safe value for `zIndex`\n *\n * @returns an integer, or \""auto\""\n * @private\n */\n  var _getSafeZIndex = function(val) {\n    if (/^(?:auto|inherit)$/.test(val)) {\n      return val;\n    }\n    var zIndex;\n    if (typeof val === \""number\"" && !_isNaN(val)) {\n      zIndex = val;\n    } else if (typeof val === \""string\"") {\n      zIndex = _getSafeZIndex(_parseInt(val, 10));\n    }\n    return typeof zIndex === \""number\"" ? zIndex : \""auto\"";\n  };\n  /**\n * Detect the Flash Player status, version, and plugin type.\n *\n * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code}\n * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}\n *\n * @returns `undefined`\n * @private\n */\n  var _detectFlashSupport = function(ActiveXObject) {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \""\"";\n    /**\n   * Derived from Apple's suggested sniffer.\n   * @param {String} desc e.g. \""Shockwave Flash 7.0 r61\""\n   * @returns {String} \""7.0.61\""\n   * @private\n   */\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\"".\"");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \""chrome.plugin\"");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (_navigator.plugins && _navigator.plugins.length) {\n      plugin = _navigator.plugins[\""Shockwave Flash\""];\n      inspectPlugin(plugin);\n      if (_navigator.plugins[\""Shockwave Flash 2.0\""]) {\n        hasFlash = true;\n        flashVersion = \""2.0.0.11\"";\n      }\n    } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) {\n      mimeType = _navigator.mimeTypes[\""application/x-shockwave-flash\""];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \""undefined\"") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\""ShockwaveFlash.ShockwaveFlash.7\"");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\""$version\""));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\""ShockwaveFlash.ShockwaveFlash.6\"");\n          hasFlash = true;\n          flashVersion = \""6.0.21\"";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\""ShockwaveFlash.ShockwaveFlash\"");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\""$version\""));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion);\n    _flashState.version = flashVersion || \""0.0.0\"";\n    _flashState.pluginType = isPPAPI ? \""pepper\"" : isActiveX ? \""activex\"" : hasFlash ? \""netscape\"" : \""unknown\"";\n  };\n  /**\n * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later.\n */\n  _detectFlashSupport(_ActiveXObject);\n  /**\n * A shell constructor for `ZeroClipboard` client instances.\n *\n * @constructor\n */\n  var ZeroClipboard = function() {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard();\n    }\n    if (typeof ZeroClipboard._createClient === \""function\"") {\n      ZeroClipboard._createClient.apply(this, _args(arguments));\n    }\n  };\n  /**\n * The ZeroClipboard library's version number.\n *\n * @static\n * @readonly\n * @property {string}\n */\n  _defineProperty(ZeroClipboard, \""version\"", {\n    value: \""2.1.3\"",\n    writable: false,\n    configurable: true,\n    enumerable: true\n  });\n  /**\n * Update or get a copy of the ZeroClipboard global configuration.\n * Returns a copy of the current/updated configuration.\n *\n * @returns Object\n * @static\n */\n  ZeroClipboard.config = function() {\n    return _config.apply(this, _args(arguments));\n  };\n  /**\n * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard.\n *\n * @returns Object\n * @static\n */\n  ZeroClipboard.state = function() {\n    return _state.apply(this, _args(arguments));\n  };\n  /**\n * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc.\n *\n * @returns Boolean\n * @static\n */\n  ZeroClipboard.isFlashUnusable = function() {\n    return _isFlashUnusable.apply(this, _args(arguments));\n  };\n  /**\n * Register an event listener.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n  ZeroClipboard.on = function() {\n    return _on.apply(this, _args(arguments));\n  };\n  /**\n * Unregister an event listener.\n * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`.\n * If no `eventType` is provided, it will unregister all listeners for every event type.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n  ZeroClipboard.off = function() {\n    return _off.apply(this, _args(arguments));\n  };\n  /**\n * Retrieve event listeners for an `eventType`.\n * If no `eventType` is provided, it will retrieve all listeners for every event type.\n *\n * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`\n */\n  ZeroClipboard.handlers = function() {\n    return _listeners.apply(this, _args(arguments));\n  };\n  /**\n * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners.\n *\n * @returns For the \""copy\"" event, returns the Flash-friendly \""clipData\"" object; otherwise `undefined`.\n * @static\n */\n  ZeroClipboard.emit = function() {\n    return _emit.apply(this, _args(arguments));\n  };\n  /**\n * Create and embed the Flash object.\n *\n * @returns The Flash object\n * @static\n */\n  ZeroClipboard.create = function() {\n    return _create.apply(this, _args(arguments));\n  };\n  /**\n * Self-destruct and clean up everything, including the embedded Flash object.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.destroy = function() {\n    return _destroy.apply(this, _args(arguments));\n  };\n  /**\n * Set the pending data for clipboard injection.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.setData = function() {\n    return _setData.apply(this, _args(arguments));\n  };\n  /**\n * Clear the pending data for clipboard injection.\n * If no `format` is provided, all pending data formats will be cleared.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.clearData = function() {\n    return _clearData.apply(this, _args(arguments));\n  };\n  /**\n * Get a copy of the pending data for clipboard injection.\n * If no `format` is provided, a copy of ALL pending data formats will be returned.\n *\n * @returns `String` or `Object`\n * @static\n */\n  ZeroClipboard.getData = function() {\n    return _getData.apply(this, _args(arguments));\n  };\n  /**\n * Sets the current HTML object that the Flash object should overlay. This will put the global\n * Flash object on top of the current element; depending on the setup, this may also set the\n * pending clipboard text data as well as the Flash object's wrapping element's title attribute\n * based on the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.focus = ZeroClipboard.activate = function() {\n    return _focus.apply(this, _args(arguments));\n  };\n  /**\n * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on\n * the setup, this may also unset the Flash object's wrapping element's title attribute based on\n * the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n  ZeroClipboard.blur = ZeroClipboard.deactivate = function() {\n    return _blur.apply(this, _args(arguments));\n  };\n  /**\n * Returns the currently focused/\""activated\"" HTML element that the Flash object is wrapping.\n *\n * @returns `HTMLElement` or `null`\n * @static\n */\n  ZeroClipboard.activeElement = function() {\n    return _activeElement.apply(this, _args(arguments));\n  };\n  if (typeof define === \""function\"" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \""object\"" && module && typeof module.exports === \""object\"" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this || window;\n}());""]}"
9aaa4bd148bc149c8cb9af2d2a62b65f1de48c96,28887273,http://stackoverflow.com/questions/8309981/how-to-create-and-show-common-dialog-error-warning-confirmation-in-javafx-2/28887273#28887273
e26d8a0dee32a31f44f5f8c28cd6e148d01b2fdd,4793630,             * http://stackoverflow.com/a/4793630/113195 */
8d7481b56bb8d9d596933e59f6c512bf6418cbc4,28210364,    // http://stackoverflow.com/a/28210364/1070244
89170432c4295c26ffc09677efaa150cdc99d510,10209955,|<!-- SVG --> {{yes}}<ref>http://stackoverflow.com/a/10209955/874824</ref>
ba9a0a201440532f8b393138dd6ec73cb9d9ba5e,728360,- [How do I correctly clone a JavaScript object?](https://stackoverflow.com/questions/728360/how-do-i-correctly-clone-a-javascript-object/30042948)
08cacc47076c1ad684571a27ca8f4a9689517d39,26603875 181348 32954565 3561493,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///webpack/bootstrap fd0fff5fe957ce252f03"",""webpack:///./src/main.js"",""webpack:///external {\""root\"":\""jQuery\"",\""commonjs\"":\""jquery\"",\""commonjs2\"":\""jquery\"",\""amd\"":\""jquery\""}"",""webpack:///../js-sdk/src/timekit.js"",""webpack:///../js-sdk/~/axios/index.js"",""webpack:///../js-sdk/~/axios/lib/axios.js"",""webpack:///../js-sdk/~/axios/lib/defaults.js"",""webpack:///../js-sdk/~/axios/lib/utils.js"",""webpack:///../js-sdk/~/axios/lib/helpers/normalizeHeaderName.js"",""webpack:///../js-sdk/~/axios/lib/core/dispatchRequest.js"",""webpack:///./~/process/browser.js"",""webpack:///../js-sdk/~/axios/lib/adapters/xhr.js"",""webpack:///../js-sdk/~/axios/lib/helpers/buildURL.js"",""webpack:///../js-sdk/~/axios/lib/helpers/parseHeaders.js"",""webpack:///../js-sdk/~/axios/lib/helpers/transformData.js"",""webpack:///../js-sdk/~/axios/lib/helpers/isURLSameOrigin.js"",""webpack:///../js-sdk/~/axios/lib/helpers/btoa.js"",""webpack:///../js-sdk/~/axios/lib/helpers/settle.js"",""webpack:///../js-sdk/~/axios/lib/helpers/cookies.js"",""webpack:///../js-sdk/~/axios/lib/core/InterceptorManager.js"",""webpack:///../js-sdk/~/axios/lib/helpers/isAbsoluteURL.js"",""webpack:///../js-sdk/~/axios/lib/helpers/combineURLs.js"",""webpack:///../js-sdk/~/axios/lib/helpers/bind.js"",""webpack:///../js-sdk/~/axios/lib/helpers/spread.js"",""webpack:///../js-sdk/~/base-64/base64.js"",""webpack:///(webpack)/buildin/module.js"",""webpack:///../js-sdk/~/humps/humps.js"",""webpack:///./~/sprintf-js/src/sprintf.js"",""webpack:///./~/fullcalendar/dist/fullcalendar.js"",""webpack:///./~/moment/moment.js"",""webpack:///./~/moment/locale en-gb"",""webpack:///./~/moment/locale/en-gb.js"",""webpack:///./~/moment-timezone/builds/moment-timezone-with-data-2012-2022.js"",""webpack:///./~/fullcalendar/dist/fullcalendar.css?34a3"",""webpack:///./~/fullcalendar/dist/fullcalendar.css"",""webpack:///./~/css-loader/lib/css-base.js"",""webpack:///./~/style-loader/addStyles.js"",""webpack:///./src/utils.js"",""webpack:///./~/console-polyfill/index.js"",""webpack:///./src/defaults.js"",""webpack:///./src/styles/fullcalendar.scss?64b6"",""webpack:///./src/styles/fullcalendar.scss"",""webpack:///./src/styles/utils.scss?c3d7"",""webpack:///./src/styles/utils.scss"",""webpack:///./src/styles/main.scss?04c9"",""webpack:///./src/styles/main.scss"",""webpack:///./src/assets/timezone-icon.svg"",""webpack:///./src/templates/timezone-helper.html"",""webpack:///./~/hogan.js/lib/hogan.js"",""webpack:///./~/hogan.js/lib/compiler.js"",""webpack:///./~/hogan.js/lib/template.js"",""webpack:///./src/templates/user-avatar.html"",""webpack:///./src/templates/user-displayname.html"",""webpack:///./src/templates/loading.html"",""webpack:///./src/assets/loading-spinner.svg"",""webpack:///./src/templates/error.html"",""webpack:///./src/assets/error-warning-icon.svg"",""webpack:///./src/templates/booking-fields.html"",""webpack:///./src/templates/booking-page.html"",""webpack:///./src/assets/close-icon.svg"",""webpack:///./src/assets/checkmark-icon.svg"",""webpack:///./src/assets/error-icon.svg"",""webpack:///./src/templates/poweredby.html"",""webpack:///./src/assets/timekit-logo.svg""],""names"":[],""mappings"":""AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;;AAEA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAwB,oBAAoB;;AAE5C;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;;AAEA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA,gDAA+C,kBAAkB;AACjE,8CAA6C,mBAAmB;AAChE,6CAA4C,oBAAoB;AAChE,iDAAgD,gBAAgB;AAChE,mDAAkD,cAAc;;AAEhE;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B,mBAAmB;AAChD,MAAK;;AAEL;;AAEA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,MAAK;;AAEL;;AAEA,MAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAgD,sCAAsC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA,2BAA0B,kCAAkC;AAC5D,6BAA4B,gCAAgC;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;AACA,6BAA4B;AAC5B;;AAEA;AACA;AACA,8CAA6C;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA,sCAAqC;;AAErC;AACA;AACA;AACA;;AAEA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA,yBAAwB,kCAAkC;AAC1D,MAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA,kBAAiB;AACjB;AACA;;AAEA;;AAEA;AACA;;AAEA,qDAAoD,kBAAkB;AACtE;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,EAAC;AACD;AACA;;;;;;;ACt6BA,gD;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC,kBAAkB;AACxD;AACA;AACA;;AAEA;AACA,yDAAwD,6CAA6C;;AAErG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;AACA,+BAA8B,6BAA6B;AAC3D;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;AACA,6BAA4B,4BAA4B;AACxD;AACA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;AACL;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA,aAAY;AACZ,eAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;;AAEA;;;;;;;AC15BA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,kDAAiD,gBAAgB;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B,wCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;;;;;;AC1HD;;AAEA;AACA;;AAEA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAwE;AACxE;AACA;AACA;AACA,wDAAuD;AACvD;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,YAAY;AACnB;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;ACvEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA2B;AAC3B;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpRA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;AChCA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;;AAErC;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;ACvLtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACjKA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;ACnEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACpCA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,MAAM;AACjB,YAAW,eAAe;AAC1B,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;;;;;ACnBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAc,OAAO;AACrB,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;ACnEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACjBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAwC;AACxC,QAAO;;AAEP;AACA,2DAA0D,wBAAwB;AAClF;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,iCAAgC;AAChC,8BAA6B,aAAa,EAAE;AAC5C;AACA;AACA,IAAG;AACH;;;;;;;ACpDA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACnDA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;;;;;;ACXA;;AAEA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA,YAAW,SAAS;AACpB,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;;;;;;;mCC1BA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAEA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF,oBAAmB;AACnB;AACA,IAAG,OAAO;AACV;AACA;AACA;AACA;AACA,GAAE,OAAO;AACT;AACA;;AAEA,EAAC;;;;;;;;ACpKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,KAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;;AAEA,EAAC;;;;;;;AClID;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA,gCAA+B,qBAAqB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA;AACA,uBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;ACpPD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,sDAAqD;AACrD,iBAAgB;;AAEhB,mCAAkC;AAClC;AACA,+CAA8C;AAC9C,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4DAA2D;AAC3D,+EAA8E;AAC9E,mBAAkB;AAClB,uBAAsB;AACtB,uBAAsB;AACtB;;AAEA,0BAAyB;;AAEzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,gFAA+E;AAC/E;;AAEA;AACA;AACA;AACA;AACA;AACA,+DAA8D;;AAE9D,mCAAkC;AAClC;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF,kBAAiB;;AAEjB;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF,uDAAsD;AACtD,YAAW,yBAAyB,EAAE;;AAEtC;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,YAAW;;AAEX,iEAAgE;AAChE;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;;;AAGA;;AAEA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA,wCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,qDAAoD;AACpD;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,mBAAmB;AAC/B;;AAEA;AACA;AACA;AACA,OAAM,uCAAuC;AAC7C,OAAM;AACN;AACA;AACA;AACA,gBAAe,cAAc;AAC7B;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA,aAAY,uBAAuB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qEAAoE;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+FAA8F;;;AAG9F;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,sBAAsB;AAClC;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAa;AACb;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA,oBAAmB,UAAU;AAC7B;AACA;AACA;;AAEA,oBAAmB;AACnB;AACA;AACA,sCAAqC;AACrC;AACA;AACA,QAAO,WAAW,aAAa;AAC/B;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA0B,qBAAqB;AAC/C;AACA,0BAAyB,yBAAyB;AAClD;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,oCAAmC,EAAE;AACrC;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,0BAAyB;;;AAGzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,yBAAyB;AACtC;AACA;;AAEA;AACA,iCAAgC,QAAQ;AACxC;;AAEA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA8B,QAAQ;AACtC;;AAEA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,oBAAoB;AAC/B;AACA;AACA;AACA;AACA;;;AAGA;AACA,eAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;;;AAGA;AACA,sCAAqC;AACrC,uBAAsB;AACtB,uBAAsB;AACtB,yBAAwB;AACxB,yBAAwB;AACxB;AACA;;;AAGA;AACA,4BAA2B;AAC3B;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF,2BAA0B;AAC1B;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;;AAGA;AACA;AACA;;;AAGA,gCAA+B;AAC/B;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAoC,EAAE;AACtC;AACA,UAAS,EAAE;AACX,gCAA+B;AAC/B,iCAAgC,kBAAkB;;AAElD;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB;AACrB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA,kCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAAyB;AACzB;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;;AAEA,2BAA0B;;AAE1B;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,wDAAuD;AACvD;AACA;AACA;AACA,wDAAuD;AACvD;;AAEA,oDAAmD;AACnD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,QAAO;;AAEP,2BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,0BAAyB;AACzB;;AAEA,cAAa;AACb;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAa;AACb;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAa;AACb;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;;AAEA,2CAA0C;AAC1C,yCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;AACA;AACA,qCAAoC;;AAEpC;AACA;AACA;AACA;AACA,6BAA4B;AAC5B,gGAA+F;;AAE/F;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA,GAAE;AACF,qBAAoB;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK,yBAAyB;AAC9B,MAAK,0BAA0B;AAC/B,MAAK,yBAAyB;AAC9B,MAAK,yBAAyB;AAC9B,MAAK,wBAAwB;AAC7B,MAAK,wBAAwB;AAC7B;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAmD;AACnD;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA8C;AAC9C,+CAA8C;;AAE9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uBAAsB,mBAAmB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,uBAAsB;AACtB,iBAAgB,qCAAqC;AACrD;AACA,uBAAsB;AACtB,iBAAgB,kBAAkB;AAClC;AACA,uBAAsB;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,mBAAmB;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,mBAAmB;AAC/B;;AAEA;AACA;AACA,sDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,sBAAsB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,mDAAkD;AAClD,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,mBAAmB;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA,kBAAiB;;AAEjB;AACA,mBAAkB;;;AAGlB;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,SAAS;AACrB;AACA,qBAAoB;AACpB;AACA;AACA;;AAEA,wCAAuC,EAAE;AACzC;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa,oBAAoB;AACjC;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,sBAAqB;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF,yBAAwB;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAa,kBAAkB;AAC/B;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,uBAAsB;AACtB;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,mBAAkB;AAClB,uBAAsB;AACtB;;AAEA;AACA;AACA,gCAA+B;AAC/B,iCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,4BAA2B;;AAE3B;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,KAAI;AACJ,IAAG;;AAEH;AACA;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,uBAAuB;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;;;AAGA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;AACnB;AACA;AACA,MAAK;AACL,iBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA,wCAAuC;AACvC;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF,uBAAsB;AACtB;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA,wBAAuB;;AAEvB;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAgC;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B,cAAc;AAC5C;AACA,kBAAiB;AACjB;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,2BAA0B,QAAQ;AAClC;;AAEA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA,8BAA6B;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,EAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA,eAAc;AACd,GAAE;;;AAGF;AACA;AACA,eAAc;AACd,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;AAEA,eAAc;AACd,GAAE;;;AAGF;AACA,uDAAsD;;AAEtD;AACA,kCAAiC,aAAa;;AAE9C,eAAc;AACd,GAAE;;;AAGF;;AAEA;AACA;AACA,kCAAiC,+BAA+B;;AAEhE,eAAc;AACd;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,kCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;;AAEA,0DAAyD;AACzD;AACA,oBAAmB;AACnB,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,SAAS;AAC5B,kEAAiE,sBAAsB;AACvF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,gCAA+B;AAC/B;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA,qCAAoC;AACpC,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;AACA,kDAAiD;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,6BAA4B;AAC5B,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA,kCAAiC;AACjC;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA,wBAAuB;;AAEvB;AACA;AACA,kDAAiD;AACjD;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAe;;AAEf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA,qDAAoD;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;;AAEA,6BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA,+BAA8B;AAC9B,8BAA6B;AAC7B;AACA;AACA;AACA,oCAAmC;AACnC,oEAAmE;AACnE;AACA;AACA;;AAEA,gCAA+B;AAC/B,+BAA8B;AAC9B;AACA;AACA;AACA,qCAAoC;AACpC,mEAAkE;AAClE;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B;;AAE5B;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA,EAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA,oCAAmC;;AAEnC;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA6B;;AAE7B;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA,2CAA0C;AAC1C;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAkB;AAClB;;AAEA;AACA;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA,iEAAgE;;AAEhE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA,4DAA2D;;AAE3D;;AAEA,qCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,+DAA8D;AAC9D,GAAE;;;AAGF;AACA;AACA;;AAEA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,sEAAqE;;AAErE;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC;AAChC;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,KAAI,iBAAiB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;;AAEA;AACA;AACA,4BAA2B;;AAE3B;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,uBAAsB;AACtB;AACA;;;AAGA;AACA;AACA;;AAEA,sBAAqB;AACrB;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8EAA6E;AAC7E,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA,wBAAuB;AACvB;AACA;;AAEA,oCAAmC;;AAEnC;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;;AAEA;;AAEA,2DAA0D;AAC1D;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,gBAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA,oDAAmD;AACnD;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sDAAqD;AACrD;;AAEA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,mBAAkB;;AAElB;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,wBAAuB;AACvB;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,qBAAoB;;AAEpB;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,qBAAoB;AACpB,KAAI;AACJ;AACA;AACA;;AAEA,mBAAkB;;AAElB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,wBAAuB;AACvB;AACA;AACA,KAAI;AACJ,yBAAwB;AACxB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAAyC;AACzC;AACA;AACA,4CAA2C;AAC3C;AACA;AACA,+CAA8C;AAC9C;AACA,GAAE;;;AAGF;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,kDAAiD;AACjD,GAAE;;;AAGF;AACA;AACA;AACA;AACA,kEAAiE;;AAEjE;AACA;AACA,2BAA0B;AAC1B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,8BAA6B;;AAE7B,WAAU;AACV,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA,GAAE;;;AAGF;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA,GAAE;;;AAGF;AACA,GAAE;;;AAGF;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,eAAc,iBAAiB;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAa;AACb,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;;AAGF;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gEAA+D;;AAE/D;AACA;AACA;AACA;AACA,GAAE;;;;AAIF;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA,WAAU;AACV,cAAa;AACb,mBAAkB;AAClB,gBAAe;AACf,eAAc;AACd,cAAa;AACb,SAAQ;AACR;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,cAAa,mBAAmB;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,4BAA2B;AAC3B;;AAEA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB;;AAEpB;AACA,eAAc,iBAAiB;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,kDAAiD;AACjD,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;;AAEpC;AACA;AACA,yCAAwC;AACxC;AACA,IAAG;AACH,GAAE;;;AAGF;AACA,+EAA8E;AAC9E;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA,kDAAiD,cAAc;;AAE/D;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qDAAoD;;AAEpD;AACA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA,sCAAqC;;AAErC,uCAAsC;AACtC;AACA,KAAI;AACJ;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;;AAIF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB,oBAAmB;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,0BAAyB;AACzB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA,2BAA0B;AAC1B,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B;AACA;AACA,2BAA0B;AAC1B;;AAEA;AACA,0BAAyB;AACzB;AACA,KAAI;AACJ,wBAAuB;AACvB,yBAAwB;AACxB,0BAAyB;AACzB;AACA,KAAI;AACJ,yBAAwB;AACxB;AACA,KAAI;AACJ;AACA,0BAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;;AAEH;AACA,GAAE;;;AAGF;AACA;AACA;AACA,2EAA0E,EAAE;AAC5E,GAAE;;;AAGF;AACA;AACA;AACA,0EAAyE,EAAE;AAC3E,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,+BAA8B;AAC9B;;AAEA;AACA;AACA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,mCAAkC;AAClC,oBAAmB;;AAEnB;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,qDAAoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;AACA,KAAI;AACJ;AACA,yBAAwB;AACxB,KAAI;AACJ,yBAAwB;AACxB;AACA;AACA,KAAI;AACJ;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,8BAA6B;AAC7B,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;;AAIF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,sCAAqC;AACrC;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ,wBAAuB;AACvB;AACA,2BAA0B;AAC1B,KAAI;AACJ,yBAAwB;AACxB;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,GAAE;;;AAGF;AACA;AACA;AACA,6EAA4E,EAAE;AAC9E,GAAE;;;AAGF;AACA;AACA;AACA,4EAA2E,EAAE;AAC7E,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,uBAAuB;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF,iEAAgE;AAChE;AACA;AACA;AACA;;AAEA;AACA,gBAAe,uBAAuB;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,6CAA4C,KAAK;;AAEjD;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA,GAAE;;;;AAIF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAkB,KAAK;AACvB;;AAEA,eAAc,mBAAmB;AACjC,gDAA+C;;AAE/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mDAAkD;;AAElD,gBAAe,wBAAwB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,wBAAwB;AACvC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,GAAE;;;AAGF;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAc;;AAEd;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU;AACV,GAAE;;;AAGF;AACA;AACA,mBAAkB;AAClB;AACA;AACA;AACA;;AAEA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA,kBAAiB;AACjB;AACA;AACA;AACA,uBAAsB,gBAAgB;AACtC,GAAE;;;AAGF;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAuC;AACvC;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,kDAAiD;AACjD,8CAA6C;AAC7C;AACA,yBAAwB;AACxB;;AAEA;AACA;;AAEA,cAAa,mBAAmB;AAChC;;AAEA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAwB;AACxB;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;;AAGD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,4BAA2B;AAC3B;AACA;AACA;AACA,0BAAyB;;;AAGzB;AACA;AACA;;;AAGA;AACA,yCAAwC;AACxC;;;AAGA;AACA;AACA;;AAEA,aAAY,mBAAmB;AAC/B;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,qCAAoC;AACpC;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,gBAAe;AACf;AACA;;AAEA,eAAc,eAAe;AAC7B;;AAEA;AACA;AACA,4BAA2B,cAAc;AACzC;AACA,SAAQ;AACR;AACA;;AAEA;AACA;AACA,2BAA0B,6BAA6B,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB,uCAAuC;AAChE,0BAAyB,sCAAsC,EAAE;AACjE,yBAAwB,yCAAyC;AACjE,sBAAqB,mCAAmC;;AAExD;AACA;AACA;AACA;;AAEA,UAAS;AACT;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oCAAmC;AACnC;AACA,qCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,WAAU;AACV,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA,kBAAiB;AACjB;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,sDAAqD;AACrD,4DAA2D;AAC3D,qFAAoF;AACpF;AACA;AACA,yBAAwB;AACxB,yBAAwB;;AAExB,gBAAe,mBAAmB;AAClC;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;AAClC,kCAAiC;;AAEjC,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,sDAAqD;AACrD,4DAA2D;AAC3D,qFAAoF;AACpF;AACA;AACA,yBAAwB;AACxB;AACA,yBAAwB;;AAExB,gBAAe,mBAAmB;AAClC;AACA;;AAEA,sBAAqB,cAAc;;AAEnC;AACA;AACA;;AAEA;AACA,oCAAmC;AACnC,mCAAkC;;AAElC,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA,iCAAgC;AAChC,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA,gBAAe,mBAAmB;AAClC;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,+DAA8D;AAC9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAA+C;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,6DAA6D;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA,iCAAgC;AAChC,GAAE;;;AAGF;AACA;AACA;;AAEA,gBAAe,mBAAmB;AAClC;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA,+DAA8D;AAC9D;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAe,cAAc;AAC7B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;;AAEH;AACA,gBAAe,cAAc;AAC7B,iBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA,+CAA8C;AAC9C;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA,gBAAe,mBAAmB;AAClC;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,+DAA8D;AAC9D;AACA;AACA;;AAEA;AACA;AACA,mBAAkB;AAClB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK,2BAA2B;AAChC,MAAK,4BAA4B;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK,2BAA2B;AAChC;AACA;AACA;;AAEA;;AAEA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,gDAA+C;AAC/C,GAAE;;;AAGF;AACA;AACA,2BAA0B;AAC1B,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,0EAAyE;AACzE,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,uBAAuB;AACpC;AACA;;AAEA;AACA;AACA,8DAA6D;AAC7D;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,cAAa,uBAAuB;AACpC;AACA;;AAEA,6DAA4D;AAC5D,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,oCAAmC;AACnC;;AAEA;AACA;AACA,2BAA0B;AAC1B,yEAAwE;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA2C;;AAE3C,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;;AAEA;;AAEA;;;AAGA;AACA;AACA,2BAA0B;AAC1B,wDAAuD;AACvD,GAAE;;;AAGF;AACA;AACA;AACA,oCAAmC;AACnC,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,6DAA4D;AAC5D,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,eAAc;AACd,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAoC;;AAEpC;AACA,gBAAe,sBAAsB;AACrC;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,gDAA+C;AAC/C,gDAA+C;AAC/C;AACA,sBAAqB;AACrB,uBAAsB;AACtB,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAa,cAAc,OAAO;AAClC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,sBAAsB,OAAO;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;;AAEA,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;;AAEA;AACA,eAAc,mBAAmB;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa,mBAAmB;AAChC;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;;AAEA;AACA;;AAEA,EAAC;;;AAGD;AACA;AACA;;AAEA,aAAY,sBAAsB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA,2BAA0B;AAC1B;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA,gBAAe,yBAAyB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,mCAAkC;AAClC,kCAAiC;AACjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAa,kBAAkB;AAC/B,iDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAe;AACf,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB,eAAc;AACd,iBAAgB;AAChB,kBAAiB;AACjB,oBAAmB;AACnB;AACA,iBAAgB;AAChB,sBAAqB;AACrB,oBAAmB;AACnB;AACA,oBAAmB;AACnB;AACA;;AAEA;AACA,qCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+DAA8D;AAC9D;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,eAAc,sBAAsB;AACpC;AACA,kCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAAyB;AACzB,mDAAkD;AAClD;AACA;;AAEA;AACA,iBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uDAAsD;AACtD;AACA;AACA;;AAEA,iCAAgC;AAChC,qCAAoC;AACpC,2CAA0C;AAC1C;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;;AAEA;AACA;AACA;AACA,gDAA+C;AAC/C;AACA;AACA,KAAI;AACJ,GAAE;;;AAGF;AACA;AACA;AACA;AACA,oCAAmC;AACnC,aAAY;AACZ;;AAEA;AACA,oBAAmB;AACnB;AACA;AACA,gCAA+B;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,8BAA8B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uEAAsE;AACtE;AACA;AACA,8CAA6C;AAC7C;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAAyC;AACzC;;AAEA,cAAa,iBAAiB;;AAE9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,mBAAkB;;AAElB;AACA;AACA;AACA;AACA,gDAA+C;AAC/C,+BAA8B;AAC9B;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA,+BAA8B;;AAE9B;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;;AAEH;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,sDAAqD;AACrD,gBAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mDAAkD;;AAElD,yCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAiD,QAAQ;AACzD;AACA;AACA;AACA;AACA;AACA;;AAEA,wCAAuC;AACvC,GAAE;;;AAGF;AACA;AACA,gDAA+C;AAC/C,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD,6DAA4D;AAC5D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA,4CAA2C;AAC3C,6CAA4C;AAC5C;;AAEA;AACA;;AAEA,WAAU;AACV,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,4BAA4B;AAChD,sDAAqD;AACrD;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;;AAGA,kCAAiC;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,qEAAoE;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;;AAIF;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,aAAY;;AAEZ;AACA;AACA;AACA;AACA,SAAQ;AACR;;AAEA,eAAc,uBAAuB;AACrC;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,6DAA4D;AAC5D,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,oEAAmE;AACnE,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA,mBAAkB;AAClB,GAAE;;;AAGF;AACA;AACA;AACA,+BAA8B,yBAAyB;AACvD;AACA;AACA;;AAEA;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA,yBAAwB;AACxB;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,uCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,eAAc;AACd,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA,uBAAsB;AACtB,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA,iDAAgD;AAChD;AACA;AACA;AACA,eAAc;AACd,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA,mDAAkD;AAClD;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA,uDAAsD;AACtD;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAe,mBAAmB,SAAS;AAC3C;;AAEA,eAAc,iBAAiB;AAC/B;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA,GAAE;;;;AAIF;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,oCAAmC;AACnC;;AAEA,gBAAe,mBAAmB;AAClC;AACA;;AAEA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,qBAAoB;;AAEpB;;AAEA,qCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,6DAA4D;AAC5D;AACA,IAAG;AACH;AACA;AACA;AACA,8DAA6D;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,kCAAiC;AACjC,sCAAqC;AACrC;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;;AAEA;;AAEA,eAAc,mBAAmB;AACjC;AACA;;AAEA,eAAc,mBAAmB;AACjC;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wCAAuC;;AAEvC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAiC;;AAEjC;AACA;AACA,aAAY,sBAAsB;AAClC;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,yCAAwC;AACxC,uCAAsC;AACtC,gDAA+C;AAC/C,YAAW;AACX,aAAY;;AAEZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B;AAC/B;AACA;;AAEA;AACA;AACA,8DAA6D;AAC7D;;AAEA;AACA;;AAEA,EAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,eAAe;AACzB;;AAEA;AACA,YAAW,iBAAiB;AAC5B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;;AAEA,YAAW,gBAAgB;AAC3B;;AAEA;AACA,eAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAAyC;;AAEzC,YAAW,sBAAsB;AACjC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,eAAc,oBAAoB;AAClC;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA,gBAAe;AACf;AACA;AACA,gBAAe;AACf;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA,wBAAuB;AACvB,kCAAiC;AACjC;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,0BAAyB;;AAEzB,mBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gDAA+C;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,gEAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB;AACjB;;AAEA;AACA;AACA,8BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,mBAAkB;AAClB;;AAEA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;;AAEZ;AACA;AACA;AACA,gDAA+C;;AAE/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAkC;AAClC,gEAA+D;AAC/D,MAAK;AACL;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,sBAAqB,iBAAiB;AACtC;AACA,GAAE;;;AAGF;AACA,kEAAiE;;AAEjE;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA,aAAY;AACZ,GAAE;;;AAGF;AACA,aAAY;AACZ,GAAE;;;AAGF;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA,yBAAwB;AACxB;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAA+B;AAC/B,GAAE;;;AAGF;AACA;AACA,8EAA6E,EAAE,MAAM;AACrF,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA2B;AAC3B,iEAAgE;AAChE;;AAEA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;;AAEA;AACA,sDAAqD;AACrD;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAA+B;AAC/B,GAAE;;;AAGF;AACA;AACA,oFAAmF,EAAE,MAAM;AAC3F,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC,4BAA2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,WAAU;AACV,GAAE;;;AAGF;AACA;AACA,2CAA0C;;AAE1C;AACA;;AAEA,EAAC;;;AAGD;AACA;AACA,EAAC;AACD;AACA,EAAC;;;AAGD;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;;;AAGD;AACA,sDAAqD;AACrD,EAAC;AACD;AACA,EAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2CAA0C;;AAE1C,WAAU;AACV,GAAE;;;AAGF;AACA,2BAA0B,UAAU;AACpC,GAAE;;;AAGF;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,SAAQ;AACR;AACA,yBAAwB;AACxB;AACA;AACA,uBAAsB;AACtB;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,wCAAuC;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,WAAU;AACV,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,WAAU;AACV,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,UAAU;AACrC;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,iDAAgD;AAChD,4BAA2B;AAC3B;AACA;;AAEA;AACA,0BAAyB;AACzB;;AAEA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA8B;AAC9B;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAqB,mDAAmD;AACxE,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA,sDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA,2DAA0D;AAC1D,qDAAoD;AACpD;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,6CAA4C;AAC5C;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA,KAAI;AACJ;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA6B;AAC7B;;AAEA,2BAA0B;AAC1B;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA,yCAAwC;;AAExC;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA;;AAEA,+CAA8C;AAC9C,iCAAgC;AAChC;AACA,MAAK;AACL;AACA,UAAS;AACT,6DAA4D;AAC5D;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,gCAA+B;AAC/B;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA,oCAAmC;AACnC;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,+CAA8C;AAC9C,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF,wBAAuB;AACvB;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU;AACV,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,WAAU;AACV,GAAE;;;AAGF,8BAA6B;AAC7B;AACA,6BAA4B;AAC5B;AACA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA,+BAA8B,aAAa;AAC3C;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA,8BAA6B;AAC7B;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAgD;;AAEhD;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA0B;AAC1B,8BAA6B;AAC7B;;AAEA,EAAC;;AAED;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC;AAClC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4CAA2C,YAAY;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+DAA8D;AAC9D;;AAEA;;AAEA;AACA;AACA;AACA,6CAA4C;AAC5C;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA,+CAA8C;AAC9C;AACA;AACA,qDAAoD;AACpD;;AAEA,4BAA2B;;AAE3B;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAmB;AACnB,0DAAyD;AACzD,uDAAsD;AACtD;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;;AAIF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB;AACnB;;AAEA;AACA;;AAEA,EAAC;;AAED;;AAEA;;AAEA;;;AAGA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kDAAiD;AACjD,yCAAwC;AACxC;AACA,KAAI;;AAEJ,eAAc,sBAAsB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,sBAAqB;AACrB,0BAAyB;AACzB,2BAA0B;AAC1B;AACA,YAAW;AACX,iBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB,qCAAoC;AACpC,aAAY;AACZ;;AAEA;AACA;AACA,8CAA6C;AAC7C;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6BAA4B;;AAE5B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,sDAAqD;AACrD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA,EAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB;;AAErB;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;;AAIF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,+BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;;AAEA;AACA,+BAA8B;AAC9B;;AAEA,gBAAe;AACf;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF,yBAAwB;AACxB;AACA;;AAEA,gDAA+C;AAC/C;AACA;AACA,uDAAsD;AACtD;AACA;AACA,8CAA6C;AAC7C;AACA;AACA,gDAA+C;AAC/C;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA,EAAC;;AAED;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,sEAAqE;AACrE;AACA,IAAG;AACH;;AAEA,EAAC;;AAED;;AAEA;;AAEA;AACA;;AAEA;AACA,+BAA8B,UAAU;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;;AAGA,6BAA4B;AAC5B;AACA;;;AAGA,yBAAwB;AACxB,WAAU;AACV;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,wCAAuC;;;AAGvC;;;AAGA;AACA;AACA;;AAEA;AACA,oFAAmF;;AAEnF;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,gFAA+E;;AAE/E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,+CAA8C;;AAE9C;AACA;;AAEA;AACA,qBAAoB;AACpB;AACA;AACA,6BAA4B;AAC5B;AACA;AACA,GAAE;;AAEF;AACA,0CAAyC;AACzC;AACA,4BAA2B;AAC3B,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,4BAA2B;AAC3B,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,4BAA2B;AAC3B,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,4BAA2B;AAC3B,GAAE;;AAEF;AACA;AACA;AACA,2BAA0B;AAC1B;;AAEA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA,0BAAyB;AACzB;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,sBAAqB;AACrB;AACA;AACA,2BAA0B;AAC1B,iBAAgB;AAChB,kBAAiB;;;AAGjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA,cAAa,mBAAmB;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;;;AAIA;AACA;;;AAGA;AACA;AACA;AACA,yCAAwC;AACxC;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAa,4BAA4B;AACzC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAa,4BAA4B;AACzC;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC,KAAI;AACJ;AACA,SAAQ;AACR;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,wBAAwB;AACxC;;AAEA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,YAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B,kBAAkB;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA,MAAK;AACL,KAAI;AACJ;AACA;AACA;AACA;;;;AAIA;AACA;;;AAGA;AACA;AACA;AACA;AACA,yCAAwC;AACxC;AACA;;;AAGA,0CAAyC;AACzC;AACA;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA,wBAAuB,eAAe;AACtC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA,MAAK;AACL;;AAEA,aAAY,sBAAsB;AAClC;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,8CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA,cAAa,0BAA0B;AACvC;AACA;;AAEA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,0BAA0B;AACzC;AACA,oBAAmB;AACnB;AACA;AACA,iBAAgB;AAChB,KAAI;;AAEJ;AACA;;AAEA;AACA;;;AAGA;AACA,2BAA0B;AAC1B;;;AAGA;AACA;AACA;AACA,IAAG;AACH;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAa,wBAAwB;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,cAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;;AAGA;AACA;AACA;AACA;AACA,mBAAkB,4BAA4B;AAC9C;AACA,mBAAkB;AAClB;AACA;AACA,gBAAe;AACf,IAAG;AACH;;;;AAIA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA,cAAa,mBAAmB;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAgD;AAChD;;AAEA,uBAAsB;AACtB;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,8CAA6C;AAC7C;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAa,wBAAwB;AACrC;;AAEA,wBAAuB;AACvB;;AAEA,gBAAe,6BAA6B;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA8B;AAC9B;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA,wBAAuB;AACvB,yBAAwB,aAAa,GAAG;AACxC;AACA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;;AAEtC;AACA;AACA;AACA,YAAW,kBAAkB;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA,KAAI;AACJ;AACA,gBAAe;AACf;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAa,oBAAoB;AACjC;AACA;;AAEA,gBAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD,gDAA+C;AAC/C,0BAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yBAAwB;;AAExB;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAiE;AACjE;AACA;AACA,8DAA6D;AAC7D;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA,4CAA2C;;AAE3C,uCAAsC;AACtC,mCAAkC;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA0C,kBAAkB;AAC5D,mDAAkD,sBAAsB;;AAExE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC;;AAEjC;AACA;AACA;AACA;AACA,8CAA6C;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC;AACxC,4BAA2B;;AAE3B;AACA;AACA,6BAA4B;AAC5B,KAAI;AACJ,IAAG;;AAEH;AACA,mBAAkB,0BAA0B;AAC5C;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;;AAEzB;AACA,eAAc,6BAA6B;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,aAAY,uBAAuB;AACnC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;AACA;AACA,gBAAe;AACf;AACA;;AAEA,4CAA2C;AAC3C;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAY,mBAAmB;AAC/B;;AAEA;AACA;AACA;;AAEA;AACA,sBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAmD;AACnD;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;AAEA,6EAA4E;AAC5E;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA,uCAAsC;AACtC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAsC;AACtC;;AAEA,iBAAgB;;AAEhB;AACA;;AAEA,wDAAuD;;AAEvD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,qDAAoD;AACpD,GAAE;;;AAGF;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA,wDAAuD;AACvD;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA,WAAU;AACV,GAAE;;;AAGF;AACA,WAAU;AACV,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;;AAEA,uBAAsB;AACtB,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA,EAAC;;;AAGD;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO,6DAA6D;AACpE;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0DAAyD;AACzD,GAAE;;;AAGF;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA,aAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA,gCAA+B;AAC/B,6CAA4C;AAC5C;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qEAAoE;AACpE,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;;AAEA,kDAAiD;AACjD,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA2B;AAC3B,yBAAwB;AACxB;;AAEA;AACA;AACA,oCAAmC;;AAEnC;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA;;AAEA,iBAAgB;;AAEhB;AACA;AACA;;AAEA,wDAAuD;;AAEvD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,qDAAoD;AACpD,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,UAAS;AACT;;AAEA,WAAU;AACV,GAAE;;;AAGF;AACA,WAAU;AACV,GAAE;;;AAGF;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;;AAGD;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO,4DAA4D;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;;AAEA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;AAGA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE,WAAW;AACb,GAAE,cAAc;AAChB,GAAE,cAAc;AAChB,GAAE,cAAc;AAChB,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA,2BAA0B;AAC1B,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,qDAAoD;AACpD,GAAE;;AAEF;AACA,wCAAuC;AACvC,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,wDAAuD;;AAEvD;AACA;AACA;AACA,0CAAyC;AACzC,gCAA+B;AAC/B;AACA;AACA,GAAE;;AAEF;AACA;AACA,oCAAmC;;AAEnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,gDAA+C;AAC/C;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,6BAA6B;AACjD;AACA,kBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;;AAEA,gBAAe,oBAAoB;AACnC,oCAAmC;AACnC;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,sBAAqB;AACrB;;AAEA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO,kCAAkC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,QAAO,iCAAiC;AACxC;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAAyC;AACzC,mCAAkC;AAClC;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY,UAAU;AACtB;AACA;AACA;AACA;;AAEA;;AAEA,WAAU;AACV,EAAC,E;;;;;;ACtueD;AACA;AACA;AACA;AACA;;AAEA,EAAC;AACD;AACA;AACA;AACA,EAAC,qBAAqB;;AAEtB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,gBAAgB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA,wBAAuB,SAAS;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,IAAI;AAC3B;;AAEA;AACA,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,yCAAwC,IAAI;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAoB,iCAAiC;AACrD;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yLAAwL,IAAI;;AAE5L,kEAAiE,IAAI;;AAErE;;AAEA;;AAEA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uCAAsC,YAAY;AAClD;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,2BAA0B;AAC1B,6BAA4B;AAC5B,0BAAyB,EAAE,EAAE;AAC7B,0BAAyB,EAAE,EAAE;AAC7B,+BAA8B,EAAE,EAAE;AAClC,8BAA6B;AAC7B,kCAAiC;AACjC,sCAAqC;AACrC,0BAAyB,IAAI,EAAE;AAC/B,0BAAyB,IAAI,EAAE;AAC/B,+BAA8B,IAAI,EAAE;;AAEpC,4BAA2B;AAC3B,iCAAgC;;AAEhC,2CAA0C;AAC1C,kDAAiD;;AAEjD,qCAAoC,IAAI,IAAI;;AAE5C;AACA;AACA,6HAA4H,IAAI;;;AAGhI;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA,2CAA0C;AAC1C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,QAAQ;AACvB;AACA;AACA;AACA,gBAAe,QAAQ;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;;;AAGA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wCAAuC,EAAE,IAAI,EAAE;AAC/C,qCAAoC,EAAE,IAAI,EAAE;;AAE5C;;AAEA;AACA,8BAA6B,EAAE;AAC/B,wBAAuB,EAAE;AACzB,0BAAyB,EAAE;AAC3B,wBAAuB,EAAE;AACzB,sBAAqB,EAAE,IAAI,EAAE;AAC7B,qBAAoB,EAAE;AACtB,4BAA2B,GAAG;AAC9B,sBAAqB,EAAE;AACvB;AACA,wBAAuB,EAAE,IAAI,EAAE;AAC/B,uBAAsB,EAAE,IAAI,EAAE;AAC9B,qBAAoB,EAAE;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA,6MAA4M,EAAE;;AAE9M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAiC;AACjC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAuB;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAe,+BAA+B;AAC9C;AACA;;AAEA;AACA,WAAU,OAAO;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,gBAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAe,sBAAsB;AACrC;AACA,mCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,+BAA8B,gBAAgB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,qBAAqB;AACxC;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK,6BAA6B;AAClC;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe;;AAEf;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB,cAAc;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B,qBAAqB;AACpD,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAA+B,qBAAqB;AACpD,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAoB;AACpB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;;;AAGD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAgC,IAAI;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;;AAED;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,EAAC;;;;;;;;AC92ID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,uDAAuD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA;AACA;AACA;;AAEA,EAAC;AACD,SACA;AACA;AACA;AACA,EAAC,2BAA2B;;;AAG5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,iCAAgC,IAAI;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA,EAAC;;;;;;;AClED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qZAA8B;AAC9B,GAAE;AACF,+CAA8C;AAC9C,GAAE;AACF,wBAAuB;AACvB;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAY;AACZ,aAAY;AACZ,aAAY;AACZ,eAAc;AACd;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS,kBAAkB;AAC3B;AACA;AACA;;AAEA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;;AAEA;AACA,kBAAiB,YAAY;AAC7B,oEAAmE;AACnE;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAa,oBAAoB;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA,eAAc,mBAAmB;AACjC;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAc,SAAS;AACvB;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,mCAAkC,IAAI;AACtC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB;AACvB;AACA;;AAEA,cAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAa,oBAAoB;AACjC;AACA,eAAc,mBAAmB;AACjC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,cAAa,mBAAmB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,cAAa,oBAAoB;AACjC;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,iBAAgB,qBAAqB;AACrC;;AAEA;AACA;AACA,kBAAiB,2BAA2B;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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CA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB,sBAAsB;AACtC;AACA;AACA,mBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA,kBAAiB,2BAA2B;AAC5C;AACA;AACA,SAAQ,uBAAuB;AAC/B;AACA;AACA,IAAG;AACH;AACA,kBAAiB,uBAAuB;AACxC;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA,iCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wDAAuD;AACvD;;AAEA,8BAA6B,mBAAmB;;AAEhD;;AAEA;;AAEA;AACA;AACA;;;;;;;ACrPA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,wBAAuB,2EAA2E;AAClG;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH,oBAAmB;AACnB,0BAAyB,EAAE;AAC3B,0BAAyB,EAAE;AAC3B;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5RA;;AAEA;AACA;AACA;AACA;AACA,gDAAgF,iBAAiB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,iCAAgC,UAAU,EAAE;AAC5C,E;;;;;;ACpBA;AACA;;;AAGA;AACA,8CAA6C,yBAAyB,WAAW,yBAAyB,gCAAgC,wCAAwC,eAAe,gBAAgB,cAAc,SAAS,cAAc,eAAe,kBAAkB,iBAAiB,gBAAgB,sBAAsB,sBAAsB,kBAAkB,WAAW,yBAAyB,gBAAgB,gBAAgB,SAAS,aAAa,uEAAuE,aAAa,SAAS,6BAA6B,qBAAqB,0BAA0B,gBAAgB,UAAU,gBAAgB,gCAAgC,gBAAgB,yBAAyB,kBAAkB,YAAY,UAAU,cAAc,4BAA4B,WAAW,+BAA+B,UAAU,2CAA2C,sBAAsB,UAAU,wCAAwC,kBAAkB,wCAAwC,iBAAiB,kCAAkC,gBAAgB,iDAAiD,iBAAiB,6BAA6B,eAAe,yBAAyB,W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AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,sBAAqB,SAAS;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB;AACvB,sFAAqF;AACrF;AACA;AACA;AACA,4BAA2B;AAC3B,4BAA2B;AAC3B;AACA,cAAa;AACb;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAwB;;AAExB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAAyD,iBAAiB;AAC1E;AACA,cAAa,0BAA0B;AACvC;;AAEA;AACA;AACA;AACA,0CAAyC,iGAAiG;AAC1I;AACA,wBAAuB,2BAA2B;AAClD;;AAEA;AACA,cAAa,wBAAwB,uCAAuC,qCAAqC;AACjH;;AAEA;AACA;AACA;AACA,oBAAmB,mBAAmB,cAAc;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAuB,aAAa,0BAA0B;AAC9D;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA6B;AAC7B,uFAAsF;AACtF;AACA;;AAEA;AACA;AACA;AACA,sGAAqG;AACrG,sDAAqD;AACrD;AACA,yBAAwB,EAAE,SAAS;AACnC,MAAK;;AAEL;AACA,2GAA0G;AAC1G;AACA,0BAAyB;AACzB,MAAK;;AAEL;AACA;AACA,kBAAiB,YAAY,oBAAoB;AACjD;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,kBAAiB,QAAQ;AACzB;AACA;AACA;AACA,6DAA4D;AAC5D;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA,8FAA6F;AAC7F,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL,OAAM;;AAEN;AACA;;AAEA;AACA,4FAA2F;AAC3F;;AAEA;AACA,4BAA2B;AAC3B;;AAEA;AACA;AACA,yCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;;;;;;ACtaD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA6C,WAAW,EAAE;;AAE1D;AACA;;AAEA;AACA;;AAEA;AACA,+CAA8C;AAC9C,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA,mCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,qBAAoB,eAAe,EAAE;;AAErC,qBAAoB,kBAAkB,eAAe,UAAU,EAAE;;AAEjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAC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"",""file"":""booking.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\""jquery\""));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\""jquery\""], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""TimekitBooking\""] = factory(require(\""jquery\""));\n\telse\n\t\troot[\""TimekitBooking\""] = factory(root[\""jQuery\""]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fd0fff5fe957ce252f03"",""'use strict';\n\n/*!\n * Booking.js\n * http://timekit.io\n *\n * Copyright 2015 Timekit, Inc.\n * Booking.js is freely distributable under the MIT license.\n *\n */\n\n// External depenencies\nvar $               = require('jquery');\nvar timekit         = require('timekit-sdk');\nvar interpolate     = require('sprintf-js');\nwindow.fullcalendar = require('fullcalendar');\nvar moment          = window.moment = require('moment');\nrequire('moment-timezone/builds/moment-timezone-with-data-2012-2022.js');\nrequire('fullcalendar/dist/fullcalendar.css');\n\n// Internal dependencies\nvar utils         = require('./utils');\nvar defaultConfig = require('./defaults');\nrequire('./styles/fullcalendar.scss');\nrequire('./styles/utils.scss');\nrequire('./styles/main.scss');\n\n// Main library\nfunction TimekitBooking() {\n\n  // Library config\n  var config = {};\n\n  // DOM nodes\n  var rootTarget;\n  var calendarTarget;\n  var bookingPageTarget;\n  var loadingTarget;\n  var errorTarget;\n\n  // Make sure DOM element is ready and clean it\n  var prepareDOM = function(suppliedConfig) {\n\n    var targetElement = suppliedConfig.targetEl || config.targetEl || defaultConfig.primary.targetEl;\n\n    rootTarget = $(targetElement);\n\n    if (rootTarget.length === 0) {\n      throw triggerError('No target DOM element was found (' + targetElement + ')');\n    }\n\n    rootTarget.addClass('bookingjs');\n    rootTarget.children(':not(script)').remove();\n\n  };\n\n  // Setup the Timekit SDK with correct config\n  var timekitSetupConfig = function() {\n\n    timekit.configure(config.timekitConfig);\n\n  };\n\n  // Setup the Timekit SDK with correct credentials\n  var timekitSetupUser = function() {\n\n    timekit.setUser(config.email, config.apiToken);\n\n  };\n\n  // Fetch availabile time through Timekit SDK\n  var timekitFindTime = function() {\n\n    var args = {};\n\n    // Only add email to findtime if no calendars or users are explicitly specified\n    if (!config.timekitFindTime.calendar_ids && !config.timekitFindTime.user_ids) {\n      args.emails = [config.email];\n    }\n    $.extend(args, config.timekitFindTime);\n\n    utils.doCallback('findTimeStarted', config, args);\n\n    timekit.findTime(args)\n    .then(function(response){\n\n      utils.doCallback('findTimeSuccessful', config, response);\n      hideLoadingScreen();\n\n      // Render available timeslots in FullCalendar\n      if(response.data.length > 0) renderCalendarEvents(response.data);\n\n    }).catch(function(response){\n      utils.doCallback('findTimeFailed', config, response);\n      hideLoadingScreen();\n      triggerError(['An error with Timekit FindTime occured', response]);\n    });\n\n  };\n\n  // Fetch availabile team time through Timekit SDK\n  var timekitFindTimeTeam = function() {\n\n    var requestData = {\n      url: '/findtime/team',\n      method: 'post',\n      data: config.timekitFindTimeTeam\n    }\n\n    $.each(config.timekitFindTimeTeam.users, function (index, item) {\n      $.extend(item, config.timekitFindTime);\n      // Only add email to findtime if no calendars are explicitly specified\n      if (!item.calendar_ids && !item.user_ids) {\n        item.emails = [item._email];\n      }\n    })\n\n    utils.doCallback('findTimeTeamStarted', config, requestData);\n\n    timekit.makeRequest(requestData)\n    .then(function(response){\n\n      utils.doCallback('findTimeTeamSuccessful', config, response);\n      hideLoadingScreen();\n\n      // Render available timeslots in FullCalendar\n      if(response.data.length > 0) renderCalendarEvents(response.data);\n\n    }).catch(function(response){\n      utils.doCallback('findTimeTeamFailed', config, response);\n      hideLoadingScreen();\n      triggerError(['An error with Timekit FindTimeTeam occured', response]);\n    });\n\n  };\n\n  // Fetch availabile time through Timekit SDK\n  var timekitGetBookingSlots = function() {\n\n    utils.doCallback('GetBookingSlotsStarted', config);\n\n    var requestData = {\n      url: '/bookings/groups',\n      method: 'get'\n    }\n\n    // scope group booking slots by widget ID if possible\n    if (config.widgetId) requestData.params = {\n      search: 'widget.id:' + config.widgetId\n    }\n\n    timekit\n    .makeRequest(requestData)\n    .then(function(response){\n\n      var slots = response.data.map(function (item) {\n        return {\n          title: item.attributes.event_info.what,\n          start: item.attributes.event_info.start,\n          end: item.attributes.event_info.end,\n          booking: item\n        }\n      })\n\n      utils.doCallback('getBookingSlotsSuccessful', config, response);\n      hideLoadingScreen();\n\n      // Render available timeslots in FullCalendar\n      if(slots.length > 0) renderCalendarEvents(slots);\n\n    }).catch(function(response){\n      utils.doCallback('getBookingSlotsFailed', config, response);\n      hideLoadingScreen();\n      triggerError(['An error with Timekit GetBookings occured', response]);\n    });\n\n  };\n\n  // Universal functional to retrieve availability through either findtime or group booking slots\n  var getAvailability = function() {\n\n    showLoadingScreen();\n\n    calendarTarget.fullCalendar('removeEventSources');\n\n    if (config.bookingGraph === 'group_customer' || config.bookingGraph === 'group_customer_payment') {\n      // If in group bookings mode, fetch slots\n      timekitGetBookingSlots();\n    } else if (config.timekitFindTimeTeam) {\n      // If in team availability mode, call findtime team\n      timekitFindTimeTeam();\n    } else {\n      // If in normal single-participant mode, call findtime\n      timekitFindTime();\n    }\n  }\n\n  // Go to the first timeslot in a list of timeslots\n  var goToFirstEvent = function(firstEventStart) {\n\n    calendarTarget.fullCalendar('gotoDate', firstEventStart);\n\n    var firstEventStartHour = moment(firstEventStart).format('H');\n    scrollToTime(firstEventStartHour);\n\n  };\n\n  // Scrolls fullcalendar to the specified hour\n  var scrollToTime = function(time) {\n\n    // Only proceed for agendaWeek view\n    if (calendarTarget.fullCalendar('getView').name !== 'agendaWeek'){\n      return;\n    }\n\n    // Get height of each hour row\n    var slotDuration = calendarTarget.fullCalendar('option', 'slotDuration');\n    var slotDurationMinutes = 30;\n    if (slotDuration) slotDurationMinutes = slotDuration.slice(3, 5);\n    var hours = calendarTarget.find('.fc-slats .fc-minor');\n    var hourHeight = $(hours[0]).height() * (60 / slotDurationMinutes);\n\n    // If minTime is set in fullCalendar config, subtract that from the scollTo calculationn\n    var minTimeHeight = 0;\n    if (config.fullCalendar.minTime) {\n      var minTime = moment(config.fullCalendar.minTime, 'HH:mm:ss').format('H');\n      minTimeHeight = hourHeight * minTime;\n    }\n\n    // Calculate scrolling location and container sizes\n    var scrollTo = (hourHeight * time) - minTimeHeight;\n    var scrollable = calendarTarget.find('.fc-scroller');\n    var scrollableHeight = scrollable.height();\n    var scrollableScrollTop = scrollable.scrollTop();\n    var maximumHeight = scrollable.find('.fc-time-grid').height();\n\n    // Only perform the scroll if the scrollTo is outside the current visible boundary\n    if (scrollTo > scrollableScrollTop && scrollTo < scrollableScrollTop + scrollableHeight) {\n      return;\n    }\n\n    // If scrollTo point is past the maximum height, then scroll to maximum possible while still animating\n    if (scrollTo > maximumHeight - scrollableHeight) {\n      scrollTo = maximumHeight - scrollableHeight;\n    }\n\n    // Perform the scrollTo animation\n    scrollable.animate({scrollTop: scrollTo});\n\n  };\n\n  // Calculate and display timezone helper\n  var renderTimezoneHelper = function() {\n\n    var localTzOffset = (moment().utcOffset()/60);\n    var timezoneIcon = require('!svg-inline!./assets/timezone-icon.svg');\n\n    var template = require('./templates/timezone-helper.html');\n\n    var timezoneHelperTarget = $(template.render({\n      timezoneIcon: timezoneIcon,\n      loadingText: config.localization.strings.timezoneHelperLoading,\n      loading: true\n    }));\n\n    rootTarget.addClass('has-timezonehelper');\n    rootTarget.append(timezoneHelperTarget);\n\n    var args = {\n      email: config.email\n    };\n\n    utils.doCallback('getUserTimezoneStarted', config, args);\n\n    timekit.getUserTimezone(args).then(function(response){\n\n      utils.doCallback('getUserTimezoneSuccessful', config, response);\n\n      var hostTzOffset = response.data.utc_offset;\n      var tzOffsetDiff = localTzOffset - hostTzOffset;\n      var tzOffsetDiffAbs = Math.abs(localTzOffset - hostTzOffset);\n      var tzDirection = (tzOffsetDiff > 0 ? 'ahead of' : 'behind');\n\n      var template = require('./templates/timezone-helper.html');\n      var newTimezoneHelperTarget = $(template.render({\n        timezoneIcon: timezoneIcon,\n        timezoneDifference: (tzOffsetDiffAbs === 0 ? false : true),\n        timezoneDifferent: interpolate.sprintf(config.localization.strings.timezoneHelperDifferent, tzOffsetDiffAbs, tzDirection, config.name),\n        timezoneSame: interpolate.sprintf(config.localization.strings.timezoneHelperSame, config.name)\n      }));\n\n      timezoneHelperTarget.replaceWith(newTimezoneHelperTarget);\n\n    }).catch(function(response){\n      utils.doCallback('getUserTimezoneFailed', config, response);\n      utils.logError(['An error with Timekit getUserTimezone occured', response]);\n    });\n\n  };\n\n  // Setup and render FullCalendar\n  var initializeCalendar = function() {\n\n    var sizing = decideCalendarSize(config.fullCalendar.defaultView);\n\n    var args = {\n      height: sizing.height,\n      eventClick: clickTimeslot,\n      windowResize: function() {\n        var sizing = decideCalendarSize();\n        calendarTarget.fullCalendar('changeView', sizing.view);\n        calendarTarget.fullCalendar('option', 'height', sizing.height);\n      }\n    };\n\n    $.extend(true, args, config.fullCalendar);\n    args.defaultView = sizing.view;\n\n    calendarTarget = $('<div class=\""bookingjs-calendar empty-calendar\"">');\n    rootTarget.append(calendarTarget);\n\n    calendarTarget.fullCalendar(args);\n\n    utils.doCallback('fullCalendarInitialized', config);\n\n  };\n\n  // Clicking a timeslot\n  var clickTimeslot = function(eventData) {\n    if (!config.disableConfirmPage) {\n      showBookingPage(eventData)\n    } else {\n      $('.fc-event-clicked').removeClass('fc-event-clicked');\n      $(this).addClass('fc-event-clicked');\n      utils.doCallback('clickTimeslot', config, eventData);\n    }\n  }\n\n  // Fires when window is resized and calendar must adhere\n  var decideCalendarSize = function(currentView) {\n\n    currentView = currentView || calendarTarget.fullCalendar('getView').name\n\n    var view = config.fullCalendar.defaultView\n    var height = 430;\n\n    if (rootTarget.width() < 480) {\n      height = 390;\n      rootTarget.addClass('is-small');\n      if (config.avatar) height -= 15;\n      if (currentView === 'agendaWeek' || currentView === 'basicDay') {\n        view = 'basicDay';\n      }\n    } else {\n      rootTarget.removeClass('is-small');\n    }\n\n    if (config.bookingFields.comment.enabled) {    height += 100; }\n    if (config.bookingFields.phone.enabled) {      height += 64; }\n    if (config.bookingFields.voip.enabled) {       height += 64; }\n    if (config.bookingFields.location.enabled) {   height += 64; }\n    if (!config.localization.showTimezoneHelper) { height += 33; }\n\n    return {\n      height: height,\n      view: view\n    };\n\n  };\n\n  // Render the supplied calendar events in FullCalendar\n  var renderCalendarEvents = function(eventData) {\n\n    var firstEventStart = moment(eventData[0].start)\n    var firstEventEnd = moment(eventData[0].end)\n    var firstEventDuration = firstEventEnd.diff(firstEventStart, 'minutes')\n\n    if (firstEventDuration <= 90) {\n      calendarTarget.fullCalendar('option', 'slotDuration', '00:15:00')\n    }\n\n    calendarTarget.fullCalendar('addEventSource', {\n      events: eventData\n    });\n\n    calendarTarget.removeClass('empty-calendar');\n\n    // Go to first event if enabled\n    if (config.goToFirstEvent) goToFirstEvent(eventData[0].start);\n\n  };\n\n  // Render the avatar image\n  var renderAvatarImage = function() {\n\n    var template = require('./templates/user-avatar.html');\n    var avatarTarget = $(template.render({\n      image: config.avatar\n    }));\n\n    rootTarget.addClass('has-avatar');\n    rootTarget.append(avatarTarget);\n\n  };\n\n  // Render the avatar image\n  var renderDisplayName = function() {\n\n    var template = require('./templates/user-displayname.html');\n    var displayNameTarget = $(template.render({\n      name: config.name\n    }));\n\n    rootTarget.addClass('has-displayname');\n    rootTarget.append(displayNameTarget);\n\n  };\n\n  // Show loading spinner screen\n  var showLoadingScreen = function() {\n\n    utils.doCallback('showLoadingScreen', config);\n\n    var template = require('./templates/loading.html');\n    loadingTarget = $(template.render({\n      loadingIcon: require('!svg-inline!./assets/loading-spinner.svg')\n    }));\n\n    rootTarget.append(loadingTarget);\n\n  };\n\n  // Remove the booking page DOM node\n  var hideLoadingScreen = function() {\n\n    utils.doCallback('hideLoadingScreen', config);\n    loadingTarget.removeClass('show');\n\n    setTimeout(function(){\n      loadingTarget.remove();\n    }, 500);\n\n  };\n\n  // Show error and warning screen\n  var triggerError = function(message) {\n\n    // If an error already has been thrown, exit\n    if (errorTarget) return message\n\n    utils.doCallback('errorTriggered', message);\n    utils.logError(message)\n\n    // If no target DOM element exists, only do the logging\n    if (!rootTarget) return message\n\n    var messageProcessed = message\n    var contextProcessed = null\n\n    if (utils.isArray(message)) {\n      messageProcessed = message[0]\n      if (message[1].data) {\n        contextProcessed = JSON.stringify(message[1].data.errors || message[1].data.error || message[1].data)\n      } else {\n        contextProcessed = JSON.stringify(message[1])\n      }\n    }\n\n    var template = require('./templates/error.html');\n    errorTarget = $(template.render({\n      errorWarningIcon: require('!svg-inline!./assets/error-warning-icon.svg'),\n      message: messageProcessed,\n      context: contextProcessed\n    }));\n\n    rootTarget.append(errorTarget);\n\n    return message\n\n  };\n\n  // Event handler when a timeslot is clicked in FullCalendar\n  var showBookingPage = function(eventData) {\n\n    utils.doCallback('showBookingPage', config, eventData);\n\n    var fieldsTemplate = require('./templates/booking-fields.html');\n    var template = require('./templates/booking-page.html');\n\n    var dateFormat = config.localization.bookingDateFormat || moment.localeData().longDateFormat('LL');\n    var timeFormat = config.localization.bookingTimeFormat || moment.localeData().longDateFormat('LT');\n\n    bookingPageTarget = $(template.render({\n      chosenDate:           moment(eventData.start).format(dateFormat),\n      chosenTime:           moment(eventData.start).format(timeFormat) + ' - ' + moment(eventData.end).format(timeFormat),\n      closeIcon:            require('!svg-inline!./assets/close-icon.svg'),\n      checkmarkIcon:        require('!svg-inline!./assets/checkmark-icon.svg'),\n      loadingIcon:          require('!svg-inline!./assets/loading-spinner.svg'),\n      errorIcon:            require('!svg-inline!./assets/error-icon.svg'),\n      submitText:           config.localization.strings.submitText,\n      successMessageTitle:  config.localization.strings.successMessageTitle,\n      successMessageBody:   interpolate.sprintf(config.localization.strings.successMessageBody, '<span class=\""booked-email\""></span>'),\n      fields:               config.bookingFields\n    }, {\n      formFields: fieldsTemplate\n    }));\n\n    var form = bookingPageTarget.children('.bookingjs-form');\n\n    bookingPageTarget.children('.bookingjs-bookpage-close').click(function(e) {\n      e.preventDefault();\n      var bookingHasBeenCreated = $(form).hasClass('success');\n      if (bookingHasBeenCreated) getAvailability();\n      hideBookingPage();\n    });\n\n    if (eventData.users) {\n      utils.logDebug(['Available users for chosen timeslot:', eventData.users], config);\n    }\n\n\n    form.find('.bookingjs-form-input').on('input', function() {\n      var field = $(this).closest('.bookingjs-form-field');\n      if (this.value) field.addClass('bookingjs-form-field--dirty');\n      else field.removeClass('bookingjs-form-field--dirty');\n    });\n\n    form.submit(function(e) {\n      submitBookingForm(this, e, eventData);\n    });\n\n    // Show powered by Timekit message\n    if (config.showCredits) {\n      renderPoweredByMessage(bookingPageTarget);\n    }\n\n    $(document).on('keyup', function(e) {\n      // escape key maps to keycode `27`\n      if (e.keyCode === 27) { hideBookingPage(); }\n    });\n\n    rootTarget.append(bookingPageTarget);\n\n    setTimeout(function(){\n      bookingPageTarget.addClass('show');\n    }, 100);\n\n  };\n\n  // Remove the booking page DOM node\n  var hideBookingPage = function() {\n\n    utils.doCallback('closeBookingPage', config);\n\n    bookingPageTarget.removeClass('show');\n\n    setTimeout(function(){\n      bookingPageTarget.remove();\n    }, 200);\n\n    $(document).off('keyup');\n\n  };\n\n  // Event handler on form submit\n  var submitBookingForm = function(form, e, eventData) {\n\n    e.preventDefault();\n\n    var formElement = $(form);\n\n    if(formElement.hasClass('success')) {\n      getAvailability();\n      hideBookingPage();\n      return;\n    }\n\n    // Abort if form is submitting, have submitted or does not validate\n    if(formElement.hasClass('loading') || formElement.hasClass('error') || !e.target.checkValidity()) {\n      var submitButton = formElement.find('.bookingjs-form-button');\n      submitButton.addClass('button-shake');\n      setTimeout(function() {\n        submitButton.removeClass('button-shake');\n      }, 500);\n      return;\n    }\n\n    var formData = {};\n    $.each(formElement.serializeArray(), function(i, field) {\n      formData[field.name] = field.value;\n    });\n\n    formElement.addClass('loading');\n\n    utils.doCallback('submitBookingForm', config, formData);\n\n    // Call create event endpoint\n    timekitCreateBooking(formData, eventData).then(function(response){\n\n      formElement.find('.booked-email').html(formData.email);\n      formElement.removeClass('loading').addClass('success');\n\n    }).catch(function(response){\n\n      showBookingFailed(formElement)\n\n    });\n\n  };\n\n  var showBookingFailed = function (formElement) {\n\n    var submitButton = formElement.find('.bookingjs-form-button');\n    submitButton.addClass('button-shake');\n    setTimeout(function() {\n      submitButton.removeClass('button-shake');\n    }, 500);\n\n    formElement.removeClass('loading').addClass('error');\n    setTimeout(function() {\n      formElement.removeClass('error');\n    }, 2000);\n\n  }\n\n  // Create new booking\n  var timekitCreateBooking = function(formData, eventData) {\n\n    var args = {\n      event: {\n        start: eventData.start.format(),\n        end: eventData.end.format(),\n        what: config.name + ' x ' + formData.name,\n        where: 'TBD',\n        description: '',\n        calendar_id: config.calendar,\n        participants: [formData.email]\n      },\n      customer: {\n        name: formData.name,\n        email: formData.email,\n        timezone: moment.tz.guess()\n      }\n    };\n\n    if (config.bookingFields.location.enabled) { args.event.where = formData.location; }\n    if (config.bookingFields.comment.enabled) {\n      args.event.description += config.bookingFields.comment.placeholder + ': ' + formData.comment + '\\n';\n    }\n    if (config.bookingFields.phone.enabled) {\n      args.customer.phone = formData.phone;\n      args.event.description += config.bookingFields.phone.placeholder + ': ' + formData.phone + '\\n';\n    }\n    if (config.bookingFields.voip.enabled) {\n      args.customer.voip = formData.voip;\n      args.event.description += config.bookingFields.voip.placeholder + ': ' + formData.voip + '\\n';\n    }\n\n    $.extend(true, args, config.timekitCreateBooking);\n\n    // Handle group booking specifics\n    if (config.bookingGraph === 'group_customer' || config.bookingGraph === 'group_customer_payment') {\n      delete args.event\n      args.related = { owner_booking_id: eventData.booking.id }\n    }\n\n    // Handle team availability specifics\n    if (eventData.users) {\n      var designatedUser = eventData.users[0]\n      var teamUser = $.grep(config.timekitFindTimeTeam.users, function(user) {\n        return designatedUser.email === user._email\n      })\n      if (teamUser.length < 1 || !teamUser[0]._calendar) {\n        throw triggerError(['Encountered an error when picking designated team user to receive booking', designatedUser, config.timekitFindTimeTeam.users]);\n      } else {\n        timekit = timekit.asUser(designatedUser.email, designatedUser.token)\n        args.event.calendar_id = teamUser[0]._calendar\n      }\n      utils.logDebug(['Creating booking for user:', designatedUser], config);\n    }\n\n    // if a remote widget (has ID) is used, pass that reference when creating booking\n    // TODO had to be disabled for team availability because not all members own the widget\n    if (!eventData.users && config.widgetId) args.widget_id = config.widgetId\n\n    utils.doCallback('createBookingStarted', config, args);\n\n    var requestHeaders = {\n      'Timekit-OutputTimestampFormat': 'Y-m-d ' + config.localization.emailTimeFormat + ' (P e)'\n    };\n\n    var request = timekit\n    .include('attributes', 'event', 'user')\n    .headers(requestHeaders)\n    .createBooking(args);\n\n    request\n    .then(function(response){\n      utils.doCallback('createBookingSuccessful', config, response);\n    }).catch(function(response){\n      utils.doCallback('createBookingFailed', config, response);\n      triggerError(['An error with Timekit CreateBooking occured', response]);\n    });\n\n    return request;\n  };\n\n  // Render the powered by Timekit message\n  var renderPoweredByMessage = function(pageTarget) {\n\n    var campaignName = 'widget'\n    var campaignSource = window.location.hostname.replace(/\\./g, '-')\n    if (config.widgetId) { campaignName = 'embedded-widget'; }\n    if (config.widgetSlug) { campaignName = 'hosted-widget'; }\n\n    var template = require('./templates/poweredby.html');\n    var timekitLogo = require('!svg-inline!./assets/timekit-logo.svg');\n    var poweredTarget = $(template.render({\n      timekitLogo: timekitLogo,\n      campaignName: campaignName,\n      campaignSource: campaignSource\n    }));\n\n    pageTarget.append(poweredTarget);\n\n  };\n\n  // Set config defaults\n  var setConfigDefaults = function(suppliedConfig) {\n    return $.extend(true, {}, defaultConfig.primary, suppliedConfig);\n  }\n\n  var applyConfigPreset = function (config, propertyName, propertyObject) {\n    var presetCheck = defaultConfig.presets[propertyName][propertyObject];\n    if (presetCheck) return $.extend(true, {}, presetCheck, config);\n    return config\n  }\n\n  // Setup config\n  var setConfig = function(suppliedConfig) {\n\n    // Check whether a config is supplied\n    if(suppliedConfig === undefined || typeof suppliedConfig !== 'object' || $.isEmptyObject(suppliedConfig)) {\n      throw triggerError('No configuration was supplied or found. Please supply a config object upon library initialization');\n    }\n\n    // Extend the default config with supplied settings\n    var newConfig = setConfigDefaults(suppliedConfig);\n    if (suppliedConfig.app) newConfig.timekitConfig.app = suppliedConfig.app\n\n    // Apply presets\n    newConfig = applyConfigPreset(newConfig, 'timeDateFormat', newConfig.localization.timeDateFormat)\n    newConfig = applyConfigPreset(newConfig, 'bookingGraph', newConfig.bookingGraph)\n    newConfig = applyConfigPreset(newConfig, 'availabilityView', newConfig.availabilityView)\n\n    // Check for required settings\n    if (!newConfig.app && !newConfig.timekitConfig.app) {\n      throw triggerError('A required config setting (\""app\"") was missing');\n    }\n    if (!newConfig.email) {\n      throw triggerError('A required config setting (\""email\"") was missing');\n    }\n    if (!newConfig.apiToken) {\n      throw triggerError('A required config setting (\""apiToken\"") was missing');\n    }\n    if (!newConfig.calendar && newConfig.bookingGraph !== 'group_customer' && newConfig.bookingGraph !== 'group_customer_payment' && !newConfig.timekitFindTimeTeam) {\n      throw triggerError('A required config setting (\""calendar\"") was missing');\n    }\n\n    // Set new config to instance config\n    config = newConfig;\n\n    utils.logDebug(['Final config:', config], config);\n    utils.logDebug(['Version:', getVersion()], config);\n\n    return config;\n\n  };\n\n  // Get library config\n  var getConfig = function() {\n\n    return config;\n\n  };\n\n  // Get library version\n  var getVersion = function() {\n\n    return VERSION;\n\n  };\n\n  // Render method\n  var render = function() {\n\n    utils.doCallback('renderStarted', config);\n\n    // Setup Timekit SDK config\n    timekitSetupConfig();\n    timekitSetupUser();\n\n    // Initialize FullCalendar\n    initializeCalendar();\n\n    // Get availability through Timekit SDK\n    getAvailability();\n\n    // Show timezone helper if enabled\n    if (config.localization.showTimezoneHelper) {\n      renderTimezoneHelper();\n    }\n\n    // Show image avatar if set\n    if (config.avatar) {\n      renderAvatarImage();\n    }\n\n    // Print out display name\n    if (config.name) {\n      renderDisplayName();\n    }\n\n    utils.doCallback('renderCompleted', config);\n\n    return this;\n\n  };\n\n  // Initilization method\n  var init = function(suppliedConfig) {\n\n    utils.logDebug(['Supplied config:', suppliedConfig], suppliedConfig);\n\n    try {\n\n      // Set rootTarget to the target element and clean before child nodes before continuing\n      prepareDOM(suppliedConfig || {});\n\n      // Start from local config\n      if (!suppliedConfig || (!suppliedConfig.widgetId && !suppliedConfig.widgetSlug) || suppliedConfig.disableRemoteLoad) {\n        return start(suppliedConfig)\n      }\n\n    } catch (e) {\n      return this\n    }\n\n    // Load remote config\n    loadRemoteConfig(suppliedConfig)\n    .then(function (response) {\n      // save widget ID from remote to reference it when creating bookings\n      var remoteConfig = response.data.config\n      if (response.data.id) remoteConfig.widgetId = response.data.id\n      // merge with supplied config for overwriting settings\n      var mergedConfig = $.extend(true, {}, remoteConfig, suppliedConfig);\n      utils.logDebug(['Remote config:', remoteConfig], mergedConfig);\n      start(mergedConfig)\n    })\n    .catch(function () {\n      triggerError('The widget could not be found, please double-check your widgetId/widgetSlug');\n    })\n\n    return this\n\n  };\n\n  // Load config from remote (embed or hosted)\n  var loadRemoteConfig = function(suppliedConfig) {\n\n    config = setConfigDefaults(suppliedConfig)\n    timekitSetupConfig();\n    if (suppliedConfig.widgetId) {\n      return timekit\n      .getEmbedWidget({ id: suppliedConfig.widgetId })\n    }\n    if (suppliedConfig.widgetSlug) {\n      return timekit\n      .getHostedWidget({ slug: suppliedConfig.widgetSlug })\n    } else {\n      throw triggerError('No widget configuration, widgetSlug or widgetId found');\n    }\n\n  }\n\n  var start = function(suppliedConfig) {\n\n    // Handle config and defaults\n    setConfig(suppliedConfig);\n    return render();\n\n  }\n\n  var destroy = function() {\n\n    prepareDOM({});\n    config = {};\n    return this;\n\n  };\n\n  // The fullCalendar object for advanced puppeting\n  var fullCalendar = function() {\n\n    if (calendarTarget.fullCalendar === undefined) { return undefined; }\n    return calendarTarget.fullCalendar.apply(calendarTarget, arguments);\n\n  };\n\n  // Expose methods\n  return {\n    setConfig:    setConfig,\n    getConfig:    getConfig,\n    getVersion:   getVersion,\n    render:       render,\n    init:         init,\n    destroy:      destroy,\n    timekitCreateBooking: timekitCreateBooking,\n    fullCalendar: fullCalendar,\n    timekitSdk:   timekit\n  };\n\n}\n\n// Autoload if config is available on window, else export function\nvar globalLibraryConfig = window.timekitBookingConfig\nif (window && globalLibraryConfig && globalLibraryConfig.autoload !== false) {\n  $(window).load(function(){\n    var instance = new TimekitBooking();\n    instance.init(globalLibraryConfig);\n    module.exports = instance;\n  });\n} else {\n  module.exports = TimekitBooking;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/main.js\n// module id = 0\n// module chunks = 0"",""module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\""root\"":\""jQuery\"",\""commonjs\"":\""jquery\"",\""commonjs2\"":\""jquery\"",\""amd\"":\""jquery\""}\n// module id = 1\n// module chunks = 0"",""'use strict';\n\n/*!\n * Timekit JavaScript SDK\n * http://timekit.io\n *\n * Copyright 2015 Timekit, Inc.\n * The Timekit JavaScript SDK is freely distributable under the MIT license.\n *\n */\nvar axios = require('axios');\nvar base64 = require('base-64');\nvar humps = require('humps');\n\nfunction Timekit() {\n\n  /**\n   * Auth variables for login gated API methods\n   * @type {String}\n   */\n  var userEmail;\n  var userToken;\n  var includes = [];\n  var headers = {};\n\n  /**\n   * Default config\n   * @type {Object}\n   */\n  var config = {\n    app: '',\n    apiBaseUrl: 'https://api.timekit.io/',\n    apiVersion: 'v2',\n    convertResponseToCamelcase: false,\n    convertRequestToSnakecase: true,\n    autoFlattenResponse: true\n  };\n\n  /**\n   * Generate base64 string for basic auth purposes\n   * @type {Function}\n   * @return {String}\n   */\n\n  var encodeAuthHeader = function(email, token) {\n    return base64.encode(email + ':' + token);\n  };\n\n  /**\n   * Build absolute URL for API call\n   * @type {Function}\n   * @return {String}\n   */\n  var buildUrl = function(endpoint) {\n    return config.apiBaseUrl + config.apiVersion + endpoint;\n  };\n\n  var copyResponseMetaData = function(response) {\n    if (Object.keys(response.data).length < 2) return\n    response.metaData = {}\n    Object.keys(response.data).forEach(function(key) {\n      if (key !== 'data') response.metaData[key] = response.data[key]\n    })\n  }\n\n  /**\n   * Root Object that holds methods to expose for API consumption\n   * @type {Object}\n   */\n  var TK = {};\n\n  /**\n   * Prepare and make HTTP request to API\n   * @type {Object}\n   * @return {Promise}\n   */\n  TK.makeRequest = function(args) {\n\n    // construct URL with base, version and endpoint\n    args.url = buildUrl(args.url);\n\n    // add http headers if applicable\n    args.headers = args.headers || headers || {};\n\n    if (!args.headers['Timekit-App'] && config.app) {\n      args.headers['Timekit-App'] = config.app;\n    }\n    if (config.inputTimestampFormat) {\n      args.headers['Timekit-InputTimestampFormat'] = config.inputTimestampFormat;\n    }\n    if (config.outputTimestampFormat) {\n      args.headers['Timekit-OutputTimestampFormat'] = config.outputTimestampFormat;\n    }\n    if (config.timezone) {\n      args.headers['Timekit-Timezone'] = config.timezone;\n    }\n\n    // add auth headers if not being overwritten by request/asUser\n    if (!args.headers['Authorization'] && userEmail && userToken) {\n      args.headers['Authorization'] = 'Basic ' + encodeAuthHeader(userEmail, userToken);\n    }\n\n    // reset headers\n    if (Object.keys(headers).length > 0) {\n      headers = {};\n    }\n\n    // add dynamic includes if applicable\n    if (includes && includes.length > 0) {\n      if (args.params === undefined) { args.params = {}; }\n      args.params.include = includes.join();\n      includes = [];\n    }\n\n    // decamelize keys in data objects\n    if (args.data && config.convertRequestToSnakecase) { args.data = humps.decamelizeKeys(args.data); }\n\n    // register response interceptor for data manipulation\n    var interceptor = axios.interceptors.response.use(function (response) {\n      if (response.data && response.data.data) {\n        if (config.autoFlattenResponse) {\n          copyResponseMetaData(response)\n          response.data = response.data.data;\n        }\n        if (config.convertResponseToCamelcase) {\n          response.data = humps.camelizeKeys(response.data);\n        }\n      }\n      return response;\n    }, function (error) {\n      return Promise.reject(error);\n    });\n\n    // execute request!\n    var request = axios(args);\n\n    // deregister response interceptor\n    axios.interceptors.response.eject(interceptor);\n\n    return request;\n  };\n\n  /**\n   * Overwrite default config with supplied settings\n   * @type {Function}\n   * @return {Object}\n   */\n  TK.configure = function(custom) {\n    for (var attr in custom) { config[attr] = custom[attr]; }\n    return config;\n  };\n\n  /**\n   * Returns the current config\n   * @type {Function}\n   * @return {Object}\n   */\n  TK.getConfig = function() {\n    return config;\n  };\n\n  /**\n   * Set the active user manually (happens automatically on timekit.auth())\n   * @type {Function}\n   */\n  TK.setUser = function(email, apiToken) {\n    userEmail = email;\n    userToken = apiToken;\n  };\n\n  /**\n   * Returns the current active user\n   * @type {Function}\n   * @return {Object}\n   */\n  TK.getUser = function() {\n    return {\n      email: userEmail,\n      apiToken: userToken\n    };\n  };\n\n  /**\n   * Set the active user temporarily for the next request (fluent/chainable return)\n   * @type {Function}\n   */\n  TK.asUser = function(email, apiToken) {\n    headers['Authorization'] = 'Basic ' + encodeAuthHeader(email, apiToken);\n    return this;\n  };\n\n  /**\n  * Set the timekit app slug temporarily for the next request (fluent/chainable return)\n  * @type {Function}\n  */\n  TK.asApp = function(slug) {\n    headers['Timekit-App'] = slug;\n    return this;\n  };\n\n  /**\n   * Add supplied dynamic includes to the next request (fluent/chainable return)\n   * @type {Function}\n   * @return {Object}\n   */\n  TK.include = function() {\n    includes = Array.prototype.slice.call(arguments);\n    return this;\n  };\n\n  /**\n   * Add supplied headers to the next request (fluent/chainable return)\n   * @type {Function}\n   * @return {Object}\n   */\n  TK.headers = function(data) {\n    for (var attr in data) { headers[attr] = data[attr]; }\n    return this;\n  };\n\n  /**\n   * Get user's connected accounts\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getAccounts = function() {\n\n    return TK.makeRequest({\n      url: '/accounts',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Redirect to the Google signup/login page\n   * @type {Function}\n   * @return {String}\n   */\n  TK.accountGoogleSignup = function(data, shouldAutoRedirect) {\n\n    var url = buildUrl('/accounts/google/signup') + '?Timekit-App=' + config.app + (data && data.callback ? '&callback=' + data.callback : '');\n\n    if(shouldAutoRedirect && window) {\n      window.location.href = url;\n    } else {\n      return url;\n    }\n\n  };\n\n  /**\n   * Initiate an account sync\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.accountSync = function(data) {\n\n    return TK.makeRequest({\n      url: '/accounts/sync',\n      method: 'get',\n      params: data\n    });\n\n  };\n\n  /**\n   * Authenticate a user to retrive API token for future calls\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.auth = function(data) {\n\n    var r = TK.makeRequest({\n      url: '/auth',\n      method: 'post',\n      data: data\n    });\n\n    r.then(function(response) {\n      TK.setUser(response.data.email, response.data.api_token);\n    }).catch(function(){\n      TK.setUser('','');\n    });\n\n    return r;\n\n  };\n\n  /**\n   * Get list of apps\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getApps = function() {\n\n    return TK.makeRequest({\n      url: '/apps',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get settings for a specific app\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getApp = function(data) {\n\n    return TK.makeRequest({\n      url: '/apps/' + data.slug,\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Create a new Timekit app\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.createApp = function(data) {\n\n    return TK.makeRequest({\n      url: '/apps',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Update settings for a specific app\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.updateApp = function(data) {\n\n    var slug = data.slug;\n    delete data.slug;\n\n    return TK.makeRequest({\n      url: '/apps/' + slug,\n      method: 'put',\n      data: data\n    });\n\n  };\n\n  /**\n   * Delete an app\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.deleteApp = function(data) {\n\n    return TK.makeRequest({\n      url: '/apps/' + data.slug,\n      method: 'delete'\n    });\n\n  };\n\n  /**\n   * Get users calendars that are present on Timekit (synced from providers)\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getCalendars = function() {\n\n    return TK.makeRequest({\n      url: '/calendars',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get users calendars that are present on Timekit (synced from providers)\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getCalendar = function(data) {\n\n    return TK.makeRequest({\n      url: '/calendars/' + data.id,\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Create a new calendar for current user\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.createCalendar = function(data) {\n\n    return TK.makeRequest({\n      url: '/calendars/',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Update a calendar for current user\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.updateCalendar = function(data) {\n\n    var id = data.id;\n    delete data.id;\n\n    return TK.makeRequest({\n      url: '/calendars/' + id,\n      method: 'put',\n      data: data\n    });\n\n  };\n\n  /**\n   * Delete a calendar\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.deleteCalendar = function(data) {\n\n    return TK.makeRequest({\n      url: '/calendars/' + data.id,\n      method: 'delete'\n    });\n\n  };\n\n  /**\n   * Get all user's events\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getEvents = function(data) {\n\n    return TK.makeRequest({\n      url: '/events',\n      method: 'get',\n      params: data\n    });\n\n  };\n\n  /**\n   * Get a user's event by ID\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getEvent = function(data) {\n\n    return TK.makeRequest({\n      url: '/events/' + data.id,\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Create a new event\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.createEvent = function(data) {\n\n    return TK.makeRequest({\n      url: '/events',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Update an existing event\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.updateEvent = function(data) {\n\n    var id = data.id;\n    delete data.id;\n\n    return TK.makeRequest({\n      url: '/events/' + id,\n      method: 'put',\n      data: data\n    });\n\n  };\n\n  /**\n   * Delete a user's event by ID\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.deleteEvent = function(data) {\n\n    return TK.makeRequest({\n      url: '/events/' + data.id,\n      method: 'delete'\n    });\n\n  };\n\n  /**\n   * Find mutual availability across multiple users/calendars\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.findTime = function(data) {\n\n    return TK.makeRequest({\n      url: '/findtime',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Find bulk availability across multiple users/calendars\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.findTimeBulk = function(data) {\n\n    return TK.makeRequest({\n      url: '/findtime/bulk',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Find team availability across multiple users/calendars\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.findTimeTeam = function(data) {\n\n    return TK.makeRequest({\n      url: '/findtime/team',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Create a findtime filtercollection\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.createFindTimeFilterCollection = function(data) {\n\n    return TK.makeRequest({\n      url: '/findtime/filtercollections',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Get findtime filtercollections\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getFindTimeFilterCollections = function() {\n\n    return TK.makeRequest({\n      url: '/findtime/filtercollections',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Update a findtime filtercollections\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.updateFindTimeFilterCollection = function(data) {\n\n    var id = data.id;\n    delete data.id;\n\n    return TK.makeRequest({\n      url: '/findtime/filtercollections/' + id,\n      method: 'get',\n      data: data\n    });\n\n  };\n\n  /**\n   * Create a new user with the given properties\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.createUser = function(data) {\n\n    return TK.makeRequest({\n      url: '/users',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Fetch current user data from server\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getUserInfo = function() {\n\n    return TK.makeRequest({\n      url: '/users/me',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Fetch current user data from server\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.updateUser = function(data) {\n\n    return TK.makeRequest({\n      url: '/users/me',\n      method: 'put',\n      data: data\n    });\n\n  };\n\n  /**\n   * Reset password for a user\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.resetUserPassword = function(data) {\n\n    return TK.makeRequest({\n      url: '/users/resetpassword',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Get a specific users' timezone\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getUserTimezone = function(data) {\n\n    return TK.makeRequest({\n      url: '/users/timezone/' + data.email,\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get all user auth credentials\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getCredentials = function() {\n\n    return TK.makeRequest({\n      url: '/credentials',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Create a new pair of auth credentials\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.createCredential = function(data) {\n\n    return TK.makeRequest({\n      url: '/credentials',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Delete a pair of auth credentials\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.deleteCredential = function(data) {\n\n    return TK.makeRequest({\n      url: '/credentials/' + data.id,\n      method: 'delete'\n    });\n\n  };\n\n  /**\n   * Get all bookings\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getBookings = function() {\n\n    return TK.makeRequest({\n      url: '/bookings',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get specific booking\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getBooking = function(data) {\n\n    return TK.makeRequest({\n      url: '/bookings/' + data.id,\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Create a new booking\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.createBooking = function(data) {\n\n    return TK.makeRequest({\n      url: '/bookings',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Update an existing booking\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.updateBooking = function(data) {\n\n    var id = data.id;\n    delete data.id;\n\n    var action = data.action;\n    delete data.action;\n\n    return TK.makeRequest({\n      url: '/bookings/' + id + '/' + action,\n      method: 'put',\n      data: data\n    });\n\n  };\n\n  /**\n   * Get all bookings\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getGroupBookings = function() {\n\n    return TK.makeRequest({\n      url: '/bookings/groups',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get specific booking\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getGroupBooking = function(data) {\n\n    return TK.makeRequest({\n      url: '/bookings/' + data.id + '/groups',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get widgets\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getWidgets = function() {\n\n    return TK.makeRequest({\n      url: '/widgets',\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get a specific widget\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getWidget = function(data) {\n\n    return TK.makeRequest({\n      url: '/widgets/' + data.id,\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get public widget by slug\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getHostedWidget = function(data) {\n\n    return TK.makeRequest({\n      url: '/widgets/hosted/' + data.slug,\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Get public widget by slug\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.getEmbedWidget = function(data) {\n\n    return TK.makeRequest({\n      url: '/widgets/embed/' + data.id,\n      method: 'get'\n    });\n\n  };\n\n  /**\n   * Create a new widget\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.createWidget = function(data) {\n\n    return TK.makeRequest({\n      url: '/widgets',\n      method: 'post',\n      data: data\n    });\n\n  };\n\n  /**\n   * Update an existing widget\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.updateWidget = function(data) {\n\n    var id = data.id;\n    delete data.id;\n\n    return TK.makeRequest({\n      url: '/widgets/' + id,\n      method: 'put',\n      data: data\n    });\n\n  };\n\n  /**\n   * Delete a widget\n   * @type {Function}\n   * @return {Promise}\n   */\n  TK.deleteWidget = function(data) {\n\n    return TK.makeRequest({\n      url: '/widgets/' + data.id,\n      method: 'delete'\n    });\n\n  };\n\n  return TK;\n\n}\n\nmodule.exports = new Timekit();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/src/timekit.js\n// module id = 2\n// module chunks = 0"",""module.exports = require('./lib/axios');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/index.js\n// module id = 3\n// module chunks = 0"",""'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n  this.defaults = utils.merge({}, defaultConfig);\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = utils.merge({\n      url: arguments[0]\n    }, arguments[1]);\n  }\n\n  config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n  // Support baseURL config\n  if (config.baseURL && !isAbsoluteURL(config.url)) {\n    config.url = combineURLs(config.baseURL, config.url);\n  }\n\n  // Don't allow overriding defaults.withCredentials\n  config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers || {}\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\naxios.request = bind(Axios.prototype.request, defaultInstance);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose properties from defaultInstance\naxios.defaults = defaultInstance.defaults;\naxios.interceptors = defaultInstance.interceptors;\n\n// Factory for creating new instances\naxios.create = function create(defaultConfig) {\n  return new Axios(defaultConfig);\n};\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n  axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n  axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/axios.js\n// module id = 4\n// module chunks = 0"",""'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nmodule.exports = {\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      data = data.replace(PROTECTION_PREFIX, '');\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*'\n    },\n    patch: utils.merge(DEFAULT_CONTENT_TYPE),\n    post: utils.merge(DEFAULT_CONTENT_TYPE),\n    put: utils.merge(DEFAULT_CONTENT_TYPE)\n  },\n\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/defaults.js\n// module id = 5\n// module chunks = 0"",""'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined' &&\n    typeof document.createElement === 'function'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object' && !isArray(obj)) {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  trim: trim\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/utils.js\n// module id = 6\n// module chunks = 0"",""'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/normalizeHeaderName.js\n// module id = 7\n// module chunks = 0"",""'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  return new Promise(function executor(resolve, reject) {\n    try {\n      var adapter;\n\n      if (typeof config.adapter === 'function') {\n        // For custom adapter support\n        adapter = config.adapter;\n      } else if (typeof XMLHttpRequest !== 'undefined') {\n        // For browsers use XHR adapter\n        adapter = require('../adapters/xhr');\n      } else if (typeof process !== 'undefined') {\n        // For node use HTTP adapter\n        adapter = require('../adapters/http');\n      }\n\n      if (typeof adapter === 'function') {\n        adapter(resolve, reject, config);\n      }\n    } catch (e) {\n      reject(e);\n    }\n  });\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/core/dispatchRequest.js\n// module id = 8\n// module chunks = 0"",""// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 9\n// module chunks = 0"",""'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = (typeof window !== 'undefined' && window.btoa) || require('./../helpers/btoa');\nvar settle = require('../helpers/settle');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n  var requestData = config.data;\n  var requestHeaders = config.headers;\n\n  if (utils.isFormData(requestData)) {\n    delete requestHeaders['Content-Type']; // Let the browser set it\n  }\n\n  var request = new XMLHttpRequest();\n  var loadEvent = 'onreadystatechange';\n  var xDomain = false;\n\n  // For IE 8/9 CORS support\n  // Only supports POST and GET calls and doesn't returns the response headers.\n  // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n  if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n    request = new window.XDomainRequest();\n    loadEvent = 'onload';\n    xDomain = true;\n    request.onprogress = function handleProgress() {};\n    request.ontimeout = function handleTimeout() {};\n  }\n\n  // HTTP basic authentication\n  if (config.auth) {\n    var username = config.auth.username || '';\n    var password = config.auth.password || '';\n    requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n  }\n\n  request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n  // Set the request timeout in MS\n  request.timeout = config.timeout;\n\n  // Listen for ready state\n  request[loadEvent] = function handleLoad() {\n    if (!request || (request.readyState !== 4 && !xDomain)) {\n      return;\n    }\n\n    // The request errored out and we didn't get a response, this will be\n    // handled by onerror instead\n    if (request.status === 0) {\n      return;\n    }\n\n    // Prepare the response\n    var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n    var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n    var response = {\n      data: transformData(\n        responseData,\n        responseHeaders,\n        config.transformResponse\n      ),\n      // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n      status: request.status === 1223 ? 204 : request.status,\n      statusText: request.status === 1223 ? 'No Content' : request.statusText,\n      headers: responseHeaders,\n      config: config,\n      request: request\n    };\n\n    settle(resolve, reject, response);\n\n    // Clean up request\n    request = null;\n  };\n\n  // Handle low level network errors\n  request.onerror = function handleError() {\n    // Real errors are hidden from us by the browser\n    // onerror should only fire if it's a network error\n    reject(new Error('Network Error'));\n\n    // Clean up request\n    request = null;\n  };\n\n  // Handle timeout\n  request.ontimeout = function handleTimeout() {\n    var err = new Error('timeout of ' + config.timeout + 'ms exceeded');\n    err.timeout = config.timeout;\n    err.code = 'ECONNABORTED';\n    reject(err);\n\n    // Clean up request\n    request = null;\n  };\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n  if (utils.isStandardBrowserEnv()) {\n    var cookies = require('./../helpers/cookies');\n\n    // Add xsrf header\n    var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n    if (xsrfValue) {\n      requestHeaders[config.xsrfHeaderName] = xsrfValue;\n    }\n  }\n\n  // Add headers to the request\n  if ('setRequestHeader' in request) {\n    utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n      if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n        // Remove Content-Type if data is undefined\n        delete requestHeaders[key];\n      } else {\n        // Otherwise add header to the request\n        request.setRequestHeader(key, val);\n      }\n    });\n  }\n\n  // Add withCredentials to request if needed\n  if (config.withCredentials) {\n    request.withCredentials = true;\n  }\n\n  // Add responseType to request if needed\n  if (config.responseType) {\n    try {\n      request.responseType = config.responseType;\n    } catch (e) {\n      if (request.responseType !== 'json') {\n        throw e;\n      }\n    }\n  }\n\n  // Handle progress if needed\n  if (config.progress) {\n    if (config.method === 'post' || config.method === 'put') {\n      request.upload.addEventListener('progress', config.progress);\n    } else if (config.method === 'get') {\n      request.addEventListener('progress', config.progress);\n    }\n  }\n\n  if (requestData === undefined) {\n    requestData = null;\n  }\n\n  // Send the request\n  request.send(requestData);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/adapters/xhr.js\n// module id = 10\n// module chunks = 0"",""'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      }\n\n      if (!utils.isArray(val)) {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/buildURL.js\n// module id = 11\n// module chunks = 0"",""'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/parseHeaders.js\n// module id = 12\n// module chunks = 0"",""'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/transformData.js\n// module id = 13\n// module chunks = 0"",""'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n  (function standardBrowserEnv() {\n    var msie = /(msie|trident)/i.test(navigator.userAgent);\n    var urlParsingNode = document.createElement('a');\n    var originURL;\n\n    /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n    function resolveURL(url) {\n      var href = url;\n\n      if (msie) {\n        // IE needs attribute set twice to normalize properties\n        urlParsingNode.setAttribute('href', href);\n        href = urlParsingNode.href;\n      }\n\n      urlParsingNode.setAttribute('href', href);\n\n      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n      return {\n        href: urlParsingNode.href,\n        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n        host: urlParsingNode.host,\n        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n        hostname: urlParsingNode.hostname,\n        port: urlParsingNode.port,\n        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n                  urlParsingNode.pathname :\n                  '/' + urlParsingNode.pathname\n      };\n    }\n\n    originURL = resolveURL(window.location.href);\n\n    /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n    return function isURLSameOrigin(requestURL) {\n      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n      return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n    };\n  })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return function isURLSameOrigin() {\n      return true;\n    };\n  })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/isURLSameOrigin.js\n// module id = 14\n// module chunks = 0"",""'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n  this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n  var str = String(input);\n  var output = '';\n  for (\n    // initialize result and counter\n    var block, charCode, idx = 0, map = chars;\n    // if the next str index does not exist:\n    //   change the mapping table to \""=\""\n    //   check if d has no fractional digits\n    str.charAt(idx | 0) || (map = '=', idx % 1);\n    // \""8 - idx % 1 * 8\"" generates the sequence 2, 4, 6, 8\n    output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n  ) {\n    charCode = str.charCodeAt(idx += 3 / 4);\n    if (charCode > 0xFF) {\n      throw new E();\n    }\n    block = block << 8 | charCode;\n  }\n  return output;\n}\n\nmodule.exports = btoa;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/btoa.js\n// module id = 15\n// module chunks = 0"",""'use strict';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  // Note: status is not exposed by XDomainRequest\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(response);\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/settle.js\n// module id = 16\n// module chunks = 0"",""'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n  (function standardBrowserEnv() {\n    return {\n      write: function write(name, value, expires, path, domain, secure) {\n        var cookie = [];\n        cookie.push(name + '=' + encodeURIComponent(value));\n\n        if (utils.isNumber(expires)) {\n          cookie.push('expires=' + new Date(expires).toGMTString());\n        }\n\n        if (utils.isString(path)) {\n          cookie.push('path=' + path);\n        }\n\n        if (utils.isString(domain)) {\n          cookie.push('domain=' + domain);\n        }\n\n        if (secure === true) {\n          cookie.push('secure');\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read: function read(name) {\n        var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n        return (match ? decodeURIComponent(match[3]) : null);\n      },\n\n      remove: function remove(name) {\n        this.write(name, '', Date.now() - 86400000);\n      }\n    };\n  })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return {\n      write: function write() {},\n      read: function read() { return null; },\n      remove: function remove() {}\n    };\n  })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/cookies.js\n// module id = 17\n// module chunks = 0"",""'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/core/InterceptorManager.js\n// module id = 18\n// module chunks = 0"",""'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \""<scheme>://\"" or \""//\"" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/isAbsoluteURL.js\n// module id = 19\n// module chunks = 0"",""'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/combineURLs.js\n// module id = 20\n// module chunks = 0"",""'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/bind.js\n// module id = 21\n// module chunks = 0"",""'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/axios/lib/helpers/spread.js\n// module id = 22\n// module chunks = 0"",""/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/base-64/base64.js\n// module id = 23\n// module chunks = 0"",""module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 24\n// module chunks = 0"",""// =========\n// = humps =\n// =========\n// version 0.7.0\n// Underscore-to-camelCase converter (and vice versa)\n// for strings and object keys\n\n// humps is copyright © 2012+ Dom Christie\n// Released under the MIT license.\n\n\n;(function(global) {\n\n  var _processKeys = function(convert, obj, separator, ignoreNumbers) {\n    if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj)) {\n      return obj;\n    }\n\n    var output,\n        i = 0,\n        l = 0;\n\n    if(_isArray(obj)) {\n      output = [];\n      for(l=obj.length; i<l; i++) {\n        output.push(_processKeys(convert, obj[i], separator, ignoreNumbers));\n      }\n    }\n    else {\n      output = {};\n      for(var key in obj) {\n        if(obj.hasOwnProperty(key)) {\n          output[convert(key, separator, ignoreNumbers)] = _processKeys(convert, obj[key], separator, ignoreNumbers);\n        }\n      }\n    }\n    return output;\n  };\n\n  // String conversion methods\n\n  var separateWords = function(string, separator, ignoreNumbers) {\n    if (typeof separator === 'undefined') {\n      separator = '_';\n    }\n\n    var regexp = /([a-z])([A-Z0-9])/g;\n\n    if (ignoreNumbers) {\n      regexp = /([a-z])([A-Z])/g;\n    }\n\n    return string.replace(regexp, '$1'+ separator +'$2');\n  };\n\n  var camelize = function(string) {\n    if (_isNumerical(string)) {\n      return string;\n    }\n    string = string.replace(/[\\-_\\s]+(.)?/g, function(match, chr) {\n      return chr ? chr.toUpperCase() : '';\n    });\n    // Ensure 1st char is always lowercase\n    return string.substr(0, 1).toLowerCase() + string.substr(1);\n  };\n\n  var pascalize = function(string) {\n    var camelized = camelize(string);\n    // Ensure 1st char is always uppercase\n    return camelized.substr(0, 1).toUpperCase() + camelized.substr(1);\n  };\n\n  var decamelize = function(string, separator, ignoreNumbers) {\n    return separateWords(string, separator, ignoreNumbers).toLowerCase();\n  };\n\n  // Utilities\n  // Taken from Underscore.js\n\n  var toString = Object.prototype.toString;\n\n  var _isObject = function(obj) {\n    return obj === Object(obj);\n  };\n  var _isArray = function(obj) {\n    return toString.call(obj) == '[object Array]';\n  };\n  var _isDate = function(obj) {\n    return toString.call(obj) == '[object Date]';\n  };\n  var _isRegExp = function(obj) {\n    return toString.call(obj) == '[object RegExp]';\n  };\n  var _isBoolean = function(obj) {\n    return toString.call(obj) == '[object Boolean]';\n  };\n\n  // Performant way to determine if obj coerces to a number\n  var _isNumerical = function(obj) {\n    obj = obj - 0;\n    return obj === obj;\n  };\n\n  var humps = {\n    camelize: camelize,\n    decamelize: decamelize,\n    pascalize: pascalize,\n    depascalize: decamelize,\n    camelizeKeys: function(object) {\n      return _processKeys(camelize, object);\n    },\n    decamelizeKeys: function(object, separator, ignoreNumbers) {\n      return _processKeys(decamelize, object, separator, ignoreNumbers);\n    },\n    pascalizeKeys: function(object) {\n      return _processKeys(pascalize, object);\n    },\n    depascalizeKeys: function () {\n      return this.decamelizeKeys.apply(this, arguments);\n    }\n  };\n\n  if (typeof define === 'function' && define.amd) {\n    define(humps);\n  } else if (typeof module !== 'undefined' && module.exports) {\n    module.exports = humps;\n  } else {\n    global.humps = humps;\n  }\n\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../js-sdk/~/humps/humps.js\n// module id = 25\n// module chunks = 0"",""/* globals window, exports, define */\n\n(function(window) {\n    'use strict'\n\n    var re = {\n        not_string: /[^s]/,\n        not_bool: /[^t]/,\n        not_type: /[^T]/,\n        not_primitive: /[^v]/,\n        number: /[diefg]/,\n        numeric_arg: /[bcdiefguxX]/,\n        json: /[j]/,\n        not_json: /[^j]/,\n        text: /^[^\\x25]+/,\n        modulo: /^\\x25{2}/,\n        placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n        key: /^([a-z_][a-z_\\d]*)/i,\n        key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n        index_access: /^\\[(\\d+)\\]/,\n        sign: /^[\\+\\-]/\n    }\n\n    function sprintf() {\n        var key = arguments[0], cache = sprintf.cache\n        if (!(cache[key])) {\n            cache[key] = sprintf.parse(key)\n        }\n        return sprintf.format.call(null, cache[key], arguments)\n    }\n\n    sprintf.format = function(parse_tree, argv) {\n        var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = ''\n        for (i = 0; i < tree_length; i++) {\n            node_type = get_type(parse_tree[i])\n            if (node_type === 'string') {\n                output[output.length] = parse_tree[i]\n            }\n            else if (node_type === 'array') {\n                match = parse_tree[i] // convenience purposes only\n                if (match[2]) { // keyword argument\n                    arg = argv[cursor]\n                    for (k = 0; k < match[2].length; k++) {\n                        if (!arg.hasOwnProperty(match[2][k])) {\n                            throw new Error(sprintf('[sprintf] property \""%s\"" does not exist', match[2][k]))\n                        }\n                        arg = arg[match[2][k]]\n                    }\n                }\n                else if (match[1]) { // positional argument (explicit)\n                    arg = argv[match[1]]\n                }\n                else { // positional argument (implicit)\n                    arg = argv[cursor++]\n                }\n\n                if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && get_type(arg) == 'function') {\n                    arg = arg()\n                }\n\n                if (re.numeric_arg.test(match[8]) && (get_type(arg) != 'number' && isNaN(arg))) {\n                    throw new TypeError(sprintf(\""[sprintf] expecting number but found %s\"", get_type(arg)))\n                }\n\n                if (re.number.test(match[8])) {\n                    is_positive = arg >= 0\n                }\n\n                switch (match[8]) {\n                    case 'b':\n                        arg = parseInt(arg, 10).toString(2)\n                    break\n                    case 'c':\n                        arg = String.fromCharCode(parseInt(arg, 10))\n                    break\n                    case 'd':\n                    case 'i':\n                        arg = parseInt(arg, 10)\n                    break\n                    case 'j':\n                        arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0)\n                    break\n                    case 'e':\n                        arg = match[7] ? parseFloat(arg).toExponential(match[7]) : parseFloat(arg).toExponential()\n                    break\n                    case 'f':\n                        arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg)\n                    break\n                    case 'g':\n                        arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg)\n                    break\n                    case 'o':\n                        arg = arg.toString(8)\n                    break\n                    case 's':\n                        arg = String(arg)\n                        arg = (match[7] ? arg.substring(0, match[7]) : arg)\n                    break\n                    case 't':\n                        arg = String(!!arg)\n                        arg = (match[7] ? arg.substring(0, match[7]) : arg)\n                    break\n                    case 'T':\n                        arg = get_type(arg)\n                        arg = (match[7] ? arg.substring(0, match[7]) : arg)\n                    break\n                    case 'u':\n                        arg = parseInt(arg, 10) >>> 0\n                    break\n                    case 'v':\n                        arg = arg.valueOf()\n                        arg = (match[7] ? arg.substring(0, match[7]) : arg)\n                    break\n                    case 'x':\n                        arg = parseInt(arg, 10).toString(16)\n                    break\n                    case 'X':\n                        arg = parseInt(arg, 10).toString(16).toUpperCase()\n                    break\n                }\n                if (re.json.test(match[8])) {\n                    output[output.length] = arg\n                }\n                else {\n                    if (re.number.test(match[8]) && (!is_positive || match[3])) {\n                        sign = is_positive ? '+' : '-'\n                        arg = arg.toString().replace(re.sign, '')\n                    }\n                    else {\n                        sign = ''\n                    }\n                    pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' '\n                    pad_length = match[6] - (sign + arg).length\n                    pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : '') : ''\n                    output[output.length] = match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n                }\n            }\n        }\n        return output.join('')\n    }\n\n    sprintf.cache = Object.create(null)\n\n    sprintf.parse = function(fmt) {\n        var _fmt = fmt, match = [], parse_tree = [], arg_names = 0\n        while (_fmt) {\n            if ((match = re.text.exec(_fmt)) !== null) {\n                parse_tree[parse_tree.length] = match[0]\n            }\n            else if ((match = re.modulo.exec(_fmt)) !== null) {\n                parse_tree[parse_tree.length] = '%'\n            }\n            else if ((match = re.placeholder.exec(_fmt)) !== null) {\n                if (match[2]) {\n                    arg_names |= 1\n                    var field_list = [], replacement_field = match[2], field_match = []\n                    if ((field_match = re.key.exec(replacement_field)) !== null) {\n                        field_list[field_list.length] = field_match[1]\n                        while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n                            if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n                                field_list[field_list.length] = field_match[1]\n                            }\n                            else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n                                field_list[field_list.length] = field_match[1]\n                            }\n                            else {\n                                throw new SyntaxError(\""[sprintf] failed to parse named argument key\"")\n                            }\n                        }\n                    }\n                    else {\n                        throw new SyntaxError(\""[sprintf] failed to parse named argument key\"")\n                    }\n                    match[2] = field_list\n                }\n                else {\n                    arg_names |= 2\n                }\n                if (arg_names === 3) {\n                    throw new Error(\""[sprintf] mixing positional and named placeholders is not (yet) supported\"")\n                }\n                parse_tree[parse_tree.length] = match\n            }\n            else {\n                throw new SyntaxError(\""[sprintf] unexpected placeholder\"")\n            }\n            _fmt = _fmt.substring(match[0].length)\n        }\n        return parse_tree\n    }\n\n    var vsprintf = function(fmt, argv, _argv) {\n        _argv = (argv || []).slice(0)\n        _argv.splice(0, 0, fmt)\n        return sprintf.apply(null, _argv)\n    }\n\n    /**\n     * helpers\n     */\n    function get_type(variable) {\n        if (typeof variable === 'number') {\n            return 'number'\n        }\n        else if (typeof variable === 'string') {\n            return 'string'\n        }\n        else {\n            return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase()\n        }\n    }\n\n    var preformattedPadding = {\n        '0': ['', '0', '00', '000', '0000', '00000', '000000', '0000000'],\n        ' ': ['', ' ', '  ', '   ', '    ', '     ', '      ', '       '],\n        '_': ['', '_', '__', '___', '____', '_____', '______', '_______'],\n    }\n    function str_repeat(input, multiplier) {\n        if (multiplier >= 0 && multiplier <= 7 && preformattedPadding[input]) {\n            return preformattedPadding[input][multiplier]\n        }\n        return Array(multiplier + 1).join(input)\n    }\n\n    /**\n     * export to either browser or node.js\n     */\n    if (typeof exports !== 'undefined') {\n        exports.sprintf = sprintf\n        exports.vsprintf = vsprintf\n    }\n    if (typeof window !== 'undefined') {\n        window.sprintf = sprintf\n        window.vsprintf = vsprintf\n\n        if (typeof define === 'function' && define.amd) {\n            define(function() {\n                return {\n                    sprintf: sprintf,\n                    vsprintf: vsprintf\n                }\n            })\n        }\n    }\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/sprintf-js/src/sprintf.js\n// module id = 26\n// module chunks = 0"",""/*!\n * FullCalendar v3.4.0\n * Docs & License: https://fullcalendar.io/\n * (c) 2017 Adam Shaw\n */\n\n(function(factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine([ 'jquery', 'moment' ], factory);\n\t}\n\telse if (typeof exports === 'object') { // Node/CommonJS\n\t\tmodule.exports = factory(require('jquery'), require('moment'));\n\t}\n\telse {\n\t\tfactory(jQuery, moment);\n\t}\n})(function($, moment) {\n\n;;\n\nvar FC = $.fullCalendar = {\n\tversion: \""3.4.0\"",\n\t// When introducing internal API incompatibilities (where fullcalendar plugins would break),\n\t// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\n\t// and the below integer should be incremented.\n\tinternalApiVersion: 9\n};\nvar fcViews = FC.views = {};\n\n\n$.fn.fullCalendar = function(options) {\n\tvar args = Array.prototype.slice.call(arguments, 1); // for a possible method call\n\tvar res = this; // what this function will return (this jQuery object by default)\n\n\tthis.each(function(i, _element) { // loop each DOM element involved\n\t\tvar element = $(_element);\n\t\tvar calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\n\t\tvar singleRes; // the returned value of this single method call\n\n\t\t// a method call\n\t\tif (typeof options === 'string') {\n\t\t\tif (calendar && $.isFunction(calendar[options])) {\n\t\t\t\tsingleRes = calendar[options].apply(calendar, args);\n\t\t\t\tif (!i) {\n\t\t\t\t\tres = singleRes; // record the first method call result\n\t\t\t\t}\n\t\t\t\tif (options === 'destroy') { // for the destroy method, must remove Calendar object data\n\t\t\t\t\telement.removeData('fullCalendar');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// a new calendar initialization\n\t\telse if (!calendar) { // don't initialize twice\n\t\t\tcalendar = new Calendar(element, options);\n\t\t\telement.data('fullCalendar', calendar);\n\t\t\tcalendar.render();\n\t\t}\n\t});\n\n\treturn res;\n};\n\n\nvar complexOptions = [ // names of options that are objects whose properties should be combined\n\t'header',\n\t'footer',\n\t'buttonText',\n\t'buttonIcons',\n\t'themeButtonIcons'\n];\n\n\n// Merges an array of option objects into a single object\nfunction mergeOptions(optionObjs) {\n\treturn mergeProps(optionObjs, complexOptions);\n}\n\n;;\n\n// exports\nFC.intersectRanges = intersectRanges;\nFC.applyAll = applyAll;\nFC.debounce = debounce;\nFC.isInt = isInt;\nFC.htmlEscape = htmlEscape;\nFC.cssToStr = cssToStr;\nFC.proxy = proxy;\nFC.capitaliseFirstLetter = capitaliseFirstLetter;\n\n\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\nfunction compensateScroll(rowEls, scrollbarWidths) {\n\tif (scrollbarWidths.left) {\n\t\trowEls.css({\n\t\t\t'border-left-width': 1,\n\t\t\t'margin-left': scrollbarWidths.left - 1\n\t\t});\n\t}\n\tif (scrollbarWidths.right) {\n\t\trowEls.css({\n\t\t\t'border-right-width': 1,\n\t\t\t'margin-right': scrollbarWidths.right - 1\n\t\t});\n\t}\n}\n\n\n// Undoes compensateScroll and restores all borders/margins\nfunction uncompensateScroll(rowEls) {\n\trowEls.css({\n\t\t'margin-left': '',\n\t\t'margin-right': '',\n\t\t'border-left-width': '',\n\t\t'border-right-width': ''\n\t});\n}\n\n\n// Make the mouse cursor express that an event is not allowed in the current area\nfunction disableCursor() {\n\t$('body').addClass('fc-not-allowed');\n}\n\n\n// Returns the mouse cursor to its original look\nfunction enableCursor() {\n\t$('body').removeClass('fc-not-allowed');\n}\n\n\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and \n// reduces the available height.\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\n\n\t// *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\n\t// and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\n\n\tvar minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\n\tvar minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\n\tvar flexEls = []; // elements that are allowed to expand. array of DOM nodes\n\tvar flexOffsets = []; // amount of vertical space it takes up\n\tvar flexHeights = []; // actual css height\n\tvar usedHeight = 0;\n\n\tundistributeHeight(els); // give all elements their natural height\n\n\t// find elements that are below the recommended height (expandable).\n\t// important to query for heights in a single first pass (to avoid reflow oscillation).\n\tels.each(function(i, el) {\n\t\tvar minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\n\t\tvar naturalOffset = $(el).outerHeight(true);\n\n\t\tif (naturalOffset < minOffset) {\n\t\t\tflexEls.push(el);\n\t\t\tflexOffsets.push(naturalOffset);\n\t\t\tflexHeights.push($(el).height());\n\t\t}\n\t\telse {\n\t\t\t// this element stretches past recommended height (non-expandable). mark the space as occupied.\n\t\t\tusedHeight += naturalOffset;\n\t\t}\n\t});\n\n\t// readjust the recommended height to only consider the height available to non-maxed-out rows.\n\tif (shouldRedistribute) {\n\t\tavailableHeight -= usedHeight;\n\t\tminOffset1 = Math.floor(availableHeight / flexEls.length);\n\t\tminOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\n\t}\n\n\t// assign heights to all expandable elements\n\t$(flexEls).each(function(i, el) {\n\t\tvar minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\n\t\tvar naturalOffset = flexOffsets[i];\n\t\tvar naturalHeight = flexHeights[i];\n\t\tvar newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\n\n\t\tif (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\n\t\t\t$(el).height(newHeight);\n\t\t}\n\t});\n}\n\n\n// Undoes distrubuteHeight, restoring all els to their natural height\nfunction undistributeHeight(els) {\n\tels.height('');\n}\n\n\n// Given `els`, a jQuery set of <td> cells, find the cell with the largest natural width and set the widths of all the\n// cells to be that width.\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\nfunction matchCellWidths(els) {\n\tvar maxInnerWidth = 0;\n\n\tels.find('> *').each(function(i, innerEl) {\n\t\tvar innerWidth = $(innerEl).outerWidth();\n\t\tif (innerWidth > maxInnerWidth) {\n\t\t\tmaxInnerWidth = innerWidth;\n\t\t}\n\t});\n\n\tmaxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\n\n\tels.width(maxInnerWidth);\n\n\treturn maxInnerWidth;\n}\n\n\n// Given one element that resides inside another,\n// Subtracts the height of the inner element from the outer element.\nfunction subtractInnerElHeight(outerEl, innerEl) {\n\tvar both = outerEl.add(innerEl);\n\tvar diff;\n\n\t// effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\n\tboth.css({\n\t\tposition: 'relative', // cause a reflow, which will force fresh dimension recalculation\n\t\tleft: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\n\t});\n\tdiff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\n\tboth.css({ position: '', left: '' }); // undo hack\n\n\treturn diff;\n}\n\n\n/* Element Geom Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.getOuterRect = getOuterRect;\nFC.getClientRect = getClientRect;\nFC.getContentRect = getContentRect;\nFC.getScrollbarWidths = getScrollbarWidths;\n\n\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\nfunction getScrollParent(el) {\n\tvar position = el.css('position'),\n\t\tscrollParent = el.parents().filter(function() {\n\t\t\tvar parent = $(this);\n\t\t\treturn (/(auto|scroll)/).test(\n\t\t\t\tparent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x')\n\t\t\t);\n\t\t}).eq(0);\n\n\treturn position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\n}\n\n\n// Queries the outer bounding area of a jQuery element.\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n// Origin is optional.\nfunction getOuterRect(el, origin) {\n\tvar offset = el.offset();\n\tvar left = offset.left - (origin ? origin.left : 0);\n\tvar top = offset.top - (origin ? origin.top : 0);\n\n\treturn {\n\t\tleft: left,\n\t\tright: left + el.outerWidth(),\n\t\ttop: top,\n\t\tbottom: top + el.outerHeight()\n\t};\n}\n\n\n// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n// Origin is optional.\n// WARNING: given element can't have borders\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\nfunction getClientRect(el, origin) {\n\tvar offset = el.offset();\n\tvar scrollbarWidths = getScrollbarWidths(el);\n\tvar left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\n\tvar top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\n\n\treturn {\n\t\tleft: left,\n\t\tright: left + el[0].clientWidth, // clientWidth includes padding but NOT scrollbars\n\t\ttop: top,\n\t\tbottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\n\t};\n}\n\n\n// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n// Origin is optional.\nfunction getContentRect(el, origin) {\n\tvar offset = el.offset(); // just outside of border, margin not included\n\tvar left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -\n\t\t(origin ? origin.left : 0);\n\tvar top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -\n\t\t(origin ? origin.top : 0);\n\n\treturn {\n\t\tleft: left,\n\t\tright: left + el.width(),\n\t\ttop: top,\n\t\tbottom: top + el.height()\n\t};\n}\n\n\n// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\n// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\nfunction getScrollbarWidths(el) {\n\tvar leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\n\tvar bottomWidth = el[0].offsetHeight - el[0].clientHeight;\n\tvar widths;\n\n\tleftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\n\tbottomWidth = sanitizeScrollbarWidth(bottomWidth);\n\n\twidths = { left: 0, right: 0, top: 0, bottom: bottomWidth };\n\n\tif (getIsLeftRtlScrollbars() && el.css('direction') == 'rtl') { // is the scrollbar on the left side?\n\t\twidths.left = leftRightWidth;\n\t}\n\telse {\n\t\twidths.right = leftRightWidth;\n\t}\n\n\treturn widths;\n}\n\n\n// The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\n// retina displays, rounding, and IE11. Massage them into a usable value.\nfunction sanitizeScrollbarWidth(width) {\n\twidth = Math.max(0, width); // no negatives\n\twidth = Math.round(width);\n\treturn width;\n}\n\n\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\n\nvar _isLeftRtlScrollbars = null;\n\nfunction getIsLeftRtlScrollbars() { // responsible for caching the computation\n\tif (_isLeftRtlScrollbars === null) {\n\t\t_isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\n\t}\n\treturn _isLeftRtlScrollbars;\n}\n\nfunction computeIsLeftRtlScrollbars() { // creates an offscreen test element, then removes it\n\tvar el = $('<div><div/></div>')\n\t\t.css({\n\t\t\tposition: 'absolute',\n\t\t\ttop: -1000,\n\t\t\tleft: 0,\n\t\t\tborder: 0,\n\t\t\tpadding: 0,\n\t\t\toverflow: 'scroll',\n\t\t\tdirection: 'rtl'\n\t\t})\n\t\t.appendTo('body');\n\tvar innerEl = el.children();\n\tvar res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\n\tel.remove();\n\treturn res;\n}\n\n\n// Retrieves a jQuery element's computed CSS value as a floating-point number.\n// If the queried value is non-numeric (ex: IE can return \""medium\"" for border width), will just return zero.\nfunction getCssFloat(el, prop) {\n\treturn parseFloat(el.css(prop)) || 0;\n}\n\n\n/* Mouse / Touch Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.preventDefault = preventDefault;\n\n\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\nfunction isPrimaryMouseButton(ev) {\n\treturn ev.which == 1 && !ev.ctrlKey;\n}\n\n\nfunction getEvX(ev) {\n\tvar touches = ev.originalEvent.touches;\n\n\t// on mobile FF, pageX for touch events is present, but incorrect,\n\t// so, look at touch coordinates first.\n\tif (touches && touches.length) {\n\t\treturn touches[0].pageX;\n\t}\n\n\treturn ev.pageX;\n}\n\n\nfunction getEvY(ev) {\n\tvar touches = ev.originalEvent.touches;\n\n\t// on mobile FF, pageX for touch events is present, but incorrect,\n\t// so, look at touch coordinates first.\n\tif (touches && touches.length) {\n\t\treturn touches[0].pageY;\n\t}\n\n\treturn ev.pageY;\n}\n\n\nfunction getEvIsTouch(ev) {\n\treturn /^touch/.test(ev.type);\n}\n\n\nfunction preventSelection(el) {\n\tel.addClass('fc-unselectable')\n\t\t.on('selectstart', preventDefault);\n}\n\n\nfunction allowSelection(el) {\n\tel.removeClass('fc-unselectable')\n\t\t.off('selectstart', preventDefault);\n}\n\n\n// Stops a mouse/touch event from doing it's native browser action\nfunction preventDefault(ev) {\n\tev.preventDefault();\n}\n\n\n/* General Geometry Utils\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.intersectRects = intersectRects;\n\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\nfunction intersectRects(rect1, rect2) {\n\tvar res = {\n\t\tleft: Math.max(rect1.left, rect2.left),\n\t\tright: Math.min(rect1.right, rect2.right),\n\t\ttop: Math.max(rect1.top, rect2.top),\n\t\tbottom: Math.min(rect1.bottom, rect2.bottom)\n\t};\n\n\tif (res.left < res.right && res.top < res.bottom) {\n\t\treturn res;\n\t}\n\treturn false;\n}\n\n\n// Returns a new point that will have been moved to reside within the given rectangle\nfunction constrainPoint(point, rect) {\n\treturn {\n\t\tleft: Math.min(Math.max(point.left, rect.left), rect.right),\n\t\ttop: Math.min(Math.max(point.top, rect.top), rect.bottom)\n\t};\n}\n\n\n// Returns a point that is the center of the given rectangle\nfunction getRectCenter(rect) {\n\treturn {\n\t\tleft: (rect.left + rect.right) / 2,\n\t\ttop: (rect.top + rect.bottom) / 2\n\t};\n}\n\n\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\nfunction diffPoints(point1, point2) {\n\treturn {\n\t\tleft: point1.left - point2.left,\n\t\ttop: point1.top - point2.top\n\t};\n}\n\n\n/* Object Ordering by Field\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.parseFieldSpecs = parseFieldSpecs;\nFC.compareByFieldSpecs = compareByFieldSpecs;\nFC.compareByFieldSpec = compareByFieldSpec;\nFC.flexibleCompare = flexibleCompare;\n\n\nfunction parseFieldSpecs(input) {\n\tvar specs = [];\n\tvar tokens = [];\n\tvar i, token;\n\n\tif (typeof input === 'string') {\n\t\ttokens = input.split(/\\s*,\\s*/);\n\t}\n\telse if (typeof input === 'function') {\n\t\ttokens = [ input ];\n\t}\n\telse if ($.isArray(input)) {\n\t\ttokens = input;\n\t}\n\n\tfor (i = 0; i < tokens.length; i++) {\n\t\ttoken = tokens[i];\n\n\t\tif (typeof token === 'string') {\n\t\t\tspecs.push(\n\t\t\t\ttoken.charAt(0) == '-' ?\n\t\t\t\t\t{ field: token.substring(1), order: -1 } :\n\t\t\t\t\t{ field: token, order: 1 }\n\t\t\t);\n\t\t}\n\t\telse if (typeof token === 'function') {\n\t\t\tspecs.push({ func: token });\n\t\t}\n\t}\n\n\treturn specs;\n}\n\n\nfunction compareByFieldSpecs(obj1, obj2, fieldSpecs) {\n\tvar i;\n\tvar cmp;\n\n\tfor (i = 0; i < fieldSpecs.length; i++) {\n\t\tcmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i]);\n\t\tif (cmp) {\n\t\t\treturn cmp;\n\t\t}\n\t}\n\n\treturn 0;\n}\n\n\nfunction compareByFieldSpec(obj1, obj2, fieldSpec) {\n\tif (fieldSpec.func) {\n\t\treturn fieldSpec.func(obj1, obj2);\n\t}\n\treturn flexibleCompare(obj1[fieldSpec.field], obj2[fieldSpec.field]) *\n\t\t(fieldSpec.order || 1);\n}\n\n\nfunction flexibleCompare(a, b) {\n\tif (!a && !b) {\n\t\treturn 0;\n\t}\n\tif (b == null) {\n\t\treturn -1;\n\t}\n\tif (a == null) {\n\t\treturn 1;\n\t}\n\tif ($.type(a) === 'string' || $.type(b) === 'string') {\n\t\treturn String(a).localeCompare(String(b));\n\t}\n\treturn a - b;\n}\n\n\n/* FullCalendar-specific Misc Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\n// Computes the intersection of the two ranges. Will return fresh date clones in a range.\n// Returns undefined if no intersection.\n// Expects all dates to be normalized to the same timezone beforehand.\n// TODO: move to date section?\nfunction intersectRanges(subjectRange, constraintRange) {\n\tvar subjectStart = subjectRange.start;\n\tvar subjectEnd = subjectRange.end;\n\tvar constraintStart = constraintRange.start;\n\tvar constraintEnd = constraintRange.end;\n\tvar segStart, segEnd;\n\tvar isStart, isEnd;\n\n\tif (subjectEnd > constraintStart && subjectStart < constraintEnd) { // in bounds at all?\n\n\t\tif (subjectStart >= constraintStart) {\n\t\t\tsegStart = subjectStart.clone();\n\t\t\tisStart = true;\n\t\t}\n\t\telse {\n\t\t\tsegStart = constraintStart.clone();\n\t\t\tisStart =  false;\n\t\t}\n\n\t\tif (subjectEnd <= constraintEnd) {\n\t\t\tsegEnd = subjectEnd.clone();\n\t\t\tisEnd = true;\n\t\t}\n\t\telse {\n\t\t\tsegEnd = constraintEnd.clone();\n\t\t\tisEnd = false;\n\t\t}\n\n\t\treturn {\n\t\t\tstart: segStart,\n\t\t\tend: segEnd,\n\t\t\tisStart: isStart,\n\t\t\tisEnd: isEnd\n\t\t};\n\t}\n}\n\n\n/* Date Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.computeGreatestUnit = computeGreatestUnit;\nFC.divideRangeByDuration = divideRangeByDuration;\nFC.divideDurationByDuration = divideDurationByDuration;\nFC.multiplyDuration = multiplyDuration;\nFC.durationHasTime = durationHasTime;\n\nvar dayIDs = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ];\nvar unitsDesc = [ 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond' ]; // descending\n\n\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\n// Moments will have their timezones normalized.\nfunction diffDayTime(a, b) {\n\treturn moment.duration({\n\t\tdays: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\n\t\tms: a.time() - b.time() // time-of-day from day start. disregards timezone\n\t});\n}\n\n\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\nfunction diffDay(a, b) {\n\treturn moment.duration({\n\t\tdays: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\n\t});\n}\n\n\n// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\nfunction diffByUnit(a, b, unit) {\n\treturn moment.duration(\n\t\tMath.round(a.diff(b, unit, true)), // returnFloat=true\n\t\tunit\n\t);\n}\n\n\n// Computes the unit name of the largest whole-unit period of time.\n// For example, 48 hours will be \""days\"" whereas 49 hours will be \""hours\"".\n// Accepts start/end, a range object, or an original duration object.\nfunction computeGreatestUnit(start, end) {\n\tvar i, unit;\n\tvar val;\n\n\tfor (i = 0; i < unitsDesc.length; i++) {\n\t\tunit = unitsDesc[i];\n\t\tval = computeRangeAs(unit, start, end);\n\n\t\tif (val >= 1 && isInt(val)) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn unit; // will be \""milliseconds\"" if nothing else matches\n}\n\n\n// like computeGreatestUnit, but has special abilities to interpret the source input for clues\nfunction computeDurationGreatestUnit(duration, durationInput) {\n\tvar unit = computeGreatestUnit(duration);\n\n\t// prevent days:7 from being interpreted as a week\n\tif (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {\n\t\tunit = 'day';\n\t}\n\n\treturn unit;\n}\n\n\n// Computes the number of units (like \""hours\"") in the given range.\n// Range can be a {start,end} object, separate start/end args, or a Duration.\n// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\n// of month-diffing logic (which tends to vary from version to version).\nfunction computeRangeAs(unit, start, end) {\n\n\tif (end != null) { // given start, end\n\t\treturn end.diff(start, unit, true);\n\t}\n\telse if (moment.isDuration(start)) { // given duration\n\t\treturn start.as(unit);\n\t}\n\telse { // given { start, end } range object\n\t\treturn start.end.diff(start.start, unit, true);\n\t}\n}\n\n\n// Intelligently divides a range (specified by a start/end params) by a duration\nfunction divideRangeByDuration(start, end, dur) {\n\tvar months;\n\n\tif (durationHasTime(dur)) {\n\t\treturn (end - start) / dur;\n\t}\n\tmonths = dur.asMonths();\n\tif (Math.abs(months) >= 1 && isInt(months)) {\n\t\treturn end.diff(start, 'months', true) / months;\n\t}\n\treturn end.diff(start, 'days', true) / dur.asDays();\n}\n\n\n// Intelligently divides one duration by another\nfunction divideDurationByDuration(dur1, dur2) {\n\tvar months1, months2;\n\n\tif (durationHasTime(dur1) || durationHasTime(dur2)) {\n\t\treturn dur1 / dur2;\n\t}\n\tmonths1 = dur1.asMonths();\n\tmonths2 = dur2.asMonths();\n\tif (\n\t\tMath.abs(months1) >= 1 && isInt(months1) &&\n\t\tMath.abs(months2) >= 1 && isInt(months2)\n\t) {\n\t\treturn months1 / months2;\n\t}\n\treturn dur1.asDays() / dur2.asDays();\n}\n\n\n// Intelligently multiplies a duration by a number\nfunction multiplyDuration(dur, n) {\n\tvar months;\n\n\tif (durationHasTime(dur)) {\n\t\treturn moment.duration(dur * n);\n\t}\n\tmonths = dur.asMonths();\n\tif (Math.abs(months) >= 1 && isInt(months)) {\n\t\treturn moment.duration({ months: months * n });\n\t}\n\treturn moment.duration({ days: dur.asDays() * n });\n}\n\n\nfunction cloneRange(range) {\n\treturn {\n\t\tstart: range.start.clone(),\n\t\tend: range.end.clone()\n\t};\n}\n\n\n// Trims the beginning and end of inner range to be completely within outerRange.\n// Returns a new range object.\nfunction constrainRange(innerRange, outerRange) {\n\tinnerRange = cloneRange(innerRange);\n\n\tif (outerRange.start) {\n\t\t// needs to be inclusively before outerRange's end\n\t\tinnerRange.start = constrainDate(innerRange.start, outerRange);\n\t}\n\n\tif (outerRange.end) {\n\t\tinnerRange.end = minMoment(innerRange.end, outerRange.end);\n\t}\n\n\treturn innerRange;\n}\n\n\n// If the given date is not within the given range, move it inside.\n// (If it's past the end, make it one millisecond before the end).\n// Always returns a new moment.\nfunction constrainDate(date, range) {\n\tdate = date.clone();\n\n\tif (range.start) {\n\t\tdate = maxMoment(date, range.start);\n\t}\n\n\tif (range.end && date >= range.end) {\n\t\tdate = range.end.clone().subtract(1);\n\t}\n\n\treturn date;\n}\n\n\nfunction isDateWithinRange(date, range) {\n\treturn (!range.start || date >= range.start) &&\n\t\t(!range.end || date < range.end);\n}\n\n\n// TODO: deal with repeat code in intersectRanges\n// constraintRange can have unspecified start/end, an open-ended range.\nfunction doRangesIntersect(subjectRange, constraintRange) {\n\treturn (!constraintRange.start || subjectRange.end >= constraintRange.start) &&\n\t\t(!constraintRange.end || subjectRange.start < constraintRange.end);\n}\n\n\nfunction isRangeWithinRange(innerRange, outerRange) {\n\treturn (!outerRange.start || innerRange.start >= outerRange.start) &&\n\t\t(!outerRange.end || innerRange.end <= outerRange.end);\n}\n\n\nfunction isRangesEqual(range0, range1) {\n\treturn ((range0.start && range1.start && range0.start.isSame(range1.start)) || (!range0.start && !range1.start)) &&\n\t\t((range0.end && range1.end && range0.end.isSame(range1.end)) || (!range0.end && !range1.end));\n}\n\n\n// Returns the moment that's earlier in time. Always a copy.\nfunction minMoment(mom1, mom2) {\n\treturn (mom1.isBefore(mom2) ? mom1 : mom2).clone();\n}\n\n\n// Returns the moment that's later in time. Always a copy.\nfunction maxMoment(mom1, mom2) {\n\treturn (mom1.isAfter(mom2) ? mom1 : mom2).clone();\n}\n\n\n// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\nfunction durationHasTime(dur) {\n\treturn Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\n}\n\n\nfunction isNativeDate(input) {\n\treturn  Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\n}\n\n\n// Returns a boolean about whether the given input is a time string, like \""06:40:00\"" or \""06:00\""\nfunction isTimeString(str) {\n\treturn /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\n}\n\n\n/* Logging and Debug\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.log = function() {\n\tvar console = window.console;\n\n\tif (console && console.log) {\n\t\treturn console.log.apply(console, arguments);\n\t}\n};\n\nFC.warn = function() {\n\tvar console = window.console;\n\n\tif (console && console.warn) {\n\t\treturn console.warn.apply(console, arguments);\n\t}\n\telse {\n\t\treturn FC.log.apply(FC, arguments);\n\t}\n};\n\n\n/* General Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar hasOwnPropMethod = {}.hasOwnProperty;\n\n\n// Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\nfunction mergeProps(propObjs, complexProps) {\n\tvar dest = {};\n\tvar i, name;\n\tvar complexObjs;\n\tvar j, val;\n\tvar props;\n\n\tif (complexProps) {\n\t\tfor (i = 0; i < complexProps.length; i++) {\n\t\t\tname = complexProps[i];\n\t\t\tcomplexObjs = [];\n\n\t\t\t// collect the trailing object values, stopping when a non-object is discovered\n\t\t\tfor (j = propObjs.length - 1; j >= 0; j--) {\n\t\t\t\tval = propObjs[j][name];\n\n\t\t\t\tif (typeof val === 'object') {\n\t\t\t\t\tcomplexObjs.unshift(val);\n\t\t\t\t}\n\t\t\t\telse if (val !== undefined) {\n\t\t\t\t\tdest[name] = val; // if there were no objects, this value will be used\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if the trailing values were objects, use the merged value\n\t\t\tif (complexObjs.length) {\n\t\t\t\tdest[name] = mergeProps(complexObjs);\n\t\t\t}\n\t\t}\n\t}\n\n\t// copy values into the destination, going from last to first\n\tfor (i = propObjs.length - 1; i >= 0; i--) {\n\t\tprops = propObjs[i];\n\n\t\tfor (name in props) {\n\t\t\tif (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\n\t\t\t\tdest[name] = props[name];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dest;\n}\n\n\n// Create an object that has the given prototype. Just like Object.create\nfunction createObject(proto) {\n\tvar f = function() {};\n\tf.prototype = proto;\n\treturn new f();\n}\nFC.createObject = createObject;\n\n\nfunction copyOwnProps(src, dest) {\n\tfor (var name in src) {\n\t\tif (hasOwnProp(src, name)) {\n\t\t\tdest[name] = src[name];\n\t\t}\n\t}\n}\n\n\nfunction hasOwnProp(obj, name) {\n\treturn hasOwnPropMethod.call(obj, name);\n}\n\n\n// Is the given value a non-object non-function value?\nfunction isAtomic(val) {\n\treturn /undefined|null|boolean|number|string/.test($.type(val));\n}\n\n\nfunction applyAll(functions, thisObj, args) {\n\tif ($.isFunction(functions)) {\n\t\tfunctions = [ functions ];\n\t}\n\tif (functions) {\n\t\tvar i;\n\t\tvar ret;\n\t\tfor (i=0; i<functions.length; i++) {\n\t\t\tret = functions[i].apply(thisObj, args) || ret;\n\t\t}\n\t\treturn ret;\n\t}\n}\n\n\nfunction firstDefined() {\n\tfor (var i=0; i<arguments.length; i++) {\n\t\tif (arguments[i] !== undefined) {\n\t\t\treturn arguments[i];\n\t\t}\n\t}\n}\n\n\nfunction htmlEscape(s) {\n\treturn (s + '').replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/'/g, '&#039;')\n\t\t.replace(/\""/g, '&quot;')\n\t\t.replace(/\\n/g, '<br />');\n}\n\n\nfunction stripHtmlEntities(text) {\n\treturn text.replace(/&.*?;/g, '');\n}\n\n\n// Given a hash of CSS properties, returns a string of CSS.\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\nfunction cssToStr(cssProps) {\n\tvar statements = [];\n\n\t$.each(cssProps, function(name, val) {\n\t\tif (val != null) {\n\t\t\tstatements.push(name + ':' + val);\n\t\t}\n\t});\n\n\treturn statements.join(';');\n}\n\n\n// Given an object hash of HTML attribute names to values,\n// generates a string that can be injected between < > in HTML\nfunction attrsToStr(attrs) {\n\tvar parts = [];\n\n\t$.each(attrs, function(name, val) {\n\t\tif (val != null) {\n\t\t\tparts.push(name + '=\""' + htmlEscape(val) + '\""');\n\t\t}\n\t});\n\n\treturn parts.join(' ');\n}\n\n\nfunction capitaliseFirstLetter(str) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nfunction compareNumbers(a, b) { // for .sort()\n\treturn a - b;\n}\n\n\nfunction isInt(n) {\n\treturn n % 1 === 0;\n}\n\n\n// Returns a method bound to the given object context.\n// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\n// different contexts as identical when binding/unbinding events.\nfunction proxy(obj, methodName) {\n\tvar method = obj[methodName];\n\n\treturn function() {\n\t\treturn method.apply(obj, arguments);\n\t};\n}\n\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\nfunction debounce(func, wait, immediate) {\n\tvar timeout, args, context, timestamp, result;\n\n\tvar later = function() {\n\t\tvar last = +new Date() - timestamp;\n\t\tif (last < wait) {\n\t\t\ttimeout = setTimeout(later, wait - last);\n\t\t}\n\t\telse {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) {\n\t\t\t\tresult = func.apply(context, args);\n\t\t\t\tcontext = args = null;\n\t\t\t}\n\t\t}\n\t};\n\n\treturn function() {\n\t\tcontext = this;\n\t\targs = arguments;\n\t\ttimestamp = +new Date();\n\t\tvar callNow = immediate && !timeout;\n\t\tif (!timeout) {\n\t\t\ttimeout = setTimeout(later, wait);\n\t\t}\n\t\tif (callNow) {\n\t\t\tresult = func.apply(context, args);\n\t\t\tcontext = args = null;\n\t\t}\n\t\treturn result;\n\t};\n}\n\n;;\n\n/*\nGENERAL NOTE on moments throughout the *entire rest* of the codebase:\nAll moments are assumed to be ambiguously-zoned unless otherwise noted,\nwith the NOTABLE EXCEOPTION of start/end dates that live on *Event Objects*.\nAmbiguously-TIMED moments are assumed to be ambiguously-zoned by nature.\n*/\n\nvar ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\nvar ambigTimeOrZoneRegex =\n\t/^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\nvar newMomentProto = moment.fn; // where we will attach our new methods\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\n\n// tell momentjs to transfer these properties upon clone\nvar momentProperties = moment.momentProperties;\nmomentProperties.push('_fullCalendar');\nmomentProperties.push('_ambigTime');\nmomentProperties.push('_ambigZone');\n\n\n// Creating\n// -------------------------------------------------------------------------------------------------\n\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\n// it will function as a clone (and retain the zone of the moment). Anything else will\n// result in a moment in the local zone.\nFC.moment = function() {\n\treturn makeMoment(arguments);\n};\n\n// Sames as FC.moment, but forces the resulting moment to be in the UTC timezone.\nFC.moment.utc = function() {\n\tvar mom = makeMoment(arguments, true);\n\n\t// Force it into UTC because makeMoment doesn't guarantee it\n\t// (if given a pre-existing moment for example)\n\tif (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\n\t\tmom.utc();\n\t}\n\n\treturn mom;\n};\n\n// Same as FC.moment, but when given an ISO8601 string, the timezone offset is preserved.\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\nFC.moment.parseZone = function() {\n\treturn makeMoment(arguments, true, true);\n};\n\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\n// Anything else needs to be \""parsed\"" (a string or an array), and will be affected by:\n//    parseAsUTC - if there is no zone information, should we parse the input in UTC?\n//    parseZone - if there is zone information, should we force the zone of the moment?\nfunction makeMoment(args, parseAsUTC, parseZone) {\n\tvar input = args[0];\n\tvar isSingleString = args.length == 1 && typeof input === 'string';\n\tvar isAmbigTime;\n\tvar isAmbigZone;\n\tvar ambigMatch;\n\tvar mom;\n\n\tif (moment.isMoment(input) || isNativeDate(input) || input === undefined) {\n\t\tmom = moment.apply(null, args);\n\t}\n\telse { // \""parsing\"" is required\n\t\tisAmbigTime = false;\n\t\tisAmbigZone = false;\n\n\t\tif (isSingleString) {\n\t\t\tif (ambigDateOfMonthRegex.test(input)) {\n\t\t\t\t// accept strings like '2014-05', but convert to the first of the month\n\t\t\t\tinput += '-01';\n\t\t\t\targs = [ input ]; // for when we pass it on to moment's constructor\n\t\t\t\tisAmbigTime = true;\n\t\t\t\tisAmbigZone = true;\n\t\t\t}\n\t\t\telse if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\n\t\t\t\tisAmbigTime = !ambigMatch[5]; // no time part?\n\t\t\t\tisAmbigZone = true;\n\t\t\t}\n\t\t}\n\t\telse if ($.isArray(input)) {\n\t\t\t// arrays have no timezone information, so assume ambiguous zone\n\t\t\tisAmbigZone = true;\n\t\t}\n\t\t// otherwise, probably a string with a format\n\n\t\tif (parseAsUTC || isAmbigTime) {\n\t\t\tmom = moment.utc.apply(moment, args);\n\t\t}\n\t\telse {\n\t\t\tmom = moment.apply(null, args);\n\t\t}\n\n\t\tif (isAmbigTime) {\n\t\t\tmom._ambigTime = true;\n\t\t\tmom._ambigZone = true; // ambiguous time always means ambiguous zone\n\t\t}\n\t\telse if (parseZone) { // let's record the inputted zone somehow\n\t\t\tif (isAmbigZone) {\n\t\t\t\tmom._ambigZone = true;\n\t\t\t}\n\t\t\telse if (isSingleString) {\n\t\t\t\tmom.utcOffset(input); // if not a valid zone, will assign UTC\n\t\t\t}\n\t\t}\n\t}\n\n\tmom._fullCalendar = true; // flag for extended functionality\n\n\treturn mom;\n}\n\n\n// Week Number\n// -------------------------------------------------------------------------------------------------\n\n\n// Returns the week number, considering the locale's custom week number calcuation\n// `weeks` is an alias for `week`\nnewMomentProto.week = newMomentProto.weeks = function(input) {\n\tvar weekCalc = this._locale._fullCalendar_weekCalc;\n\n\tif (input == null && typeof weekCalc === 'function') { // custom function only works for getter\n\t\treturn weekCalc(this);\n\t}\n\telse if (weekCalc === 'ISO') {\n\t\treturn oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\n\t}\n\n\treturn oldMomentProto.week.apply(this, arguments); // local getter/setter\n};\n\n\n// Time-of-day\n// -------------------------------------------------------------------------------------------------\n\n// GETTER\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\n//\n// SETTER\n// You can supply a Duration, a Moment, or a Duration-like argument.\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\nnewMomentProto.time = function(time) {\n\n\t// Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\n\t// `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\n\tif (!this._fullCalendar) {\n\t\treturn oldMomentProto.time.apply(this, arguments);\n\t}\n\n\tif (time == null) { // getter\n\t\treturn moment.duration({\n\t\t\thours: this.hours(),\n\t\t\tminutes: this.minutes(),\n\t\t\tseconds: this.seconds(),\n\t\t\tmilliseconds: this.milliseconds()\n\t\t});\n\t}\n\telse { // setter\n\n\t\tthis._ambigTime = false; // mark that the moment now has a time\n\n\t\tif (!moment.isDuration(time) && !moment.isMoment(time)) {\n\t\t\ttime = moment.duration(time);\n\t\t}\n\n\t\t// The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\n\t\t// Only for Duration times, not Moment times.\n\t\tvar dayHours = 0;\n\t\tif (moment.isDuration(time)) {\n\t\t\tdayHours = Math.floor(time.asDays()) * 24;\n\t\t}\n\n\t\t// We need to set the individual fields.\n\t\t// Can't use startOf('day') then add duration. In case of DST at start of day.\n\t\treturn this.hours(dayHours + time.hours())\n\t\t\t.minutes(time.minutes())\n\t\t\t.seconds(time.seconds())\n\t\t\t.milliseconds(time.milliseconds());\n\t}\n};\n\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\n// but preserving its YMD. A moment with a stripped time will display no time\n// nor timezone offset when .format() is called.\nnewMomentProto.stripTime = function() {\n\n\tif (!this._ambigTime) {\n\n\t\tthis.utc(true); // keepLocalTime=true (for keeping *date* value)\n\n\t\t// set time to zero\n\t\tthis.set({\n\t\t\thours: 0,\n\t\t\tminutes: 0,\n\t\t\tseconds: 0,\n\t\t\tms: 0\n\t\t});\n\n\t\t// Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\n\t\t// which clears all ambig flags.\n\t\tthis._ambigTime = true;\n\t\tthis._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\n\t}\n\n\treturn this; // for chaining\n};\n\n// Returns if the moment has a non-ambiguous time (boolean)\nnewMomentProto.hasTime = function() {\n\treturn !this._ambigTime;\n};\n\n\n// Timezone\n// -------------------------------------------------------------------------------------------------\n\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\n// timezone offset when .format() is called.\nnewMomentProto.stripZone = function() {\n\tvar wasAmbigTime;\n\n\tif (!this._ambigZone) {\n\n\t\twasAmbigTime = this._ambigTime;\n\n\t\tthis.utc(true); // keepLocalTime=true (for keeping date and time values)\n\n\t\t// the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\n\t\tthis._ambigTime = wasAmbigTime || false;\n\n\t\t// Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\n\t\t// which clears the ambig flags.\n\t\tthis._ambigZone = true;\n\t}\n\n\treturn this; // for chaining\n};\n\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\nnewMomentProto.hasZone = function() {\n\treturn !this._ambigZone;\n};\n\n\n// implicitly marks a zone\nnewMomentProto.local = function(keepLocalTime) {\n\n\t// for when converting from ambiguously-zoned to local,\n\t// keep the time values when converting from UTC -> local\n\toldMomentProto.local.call(this, this._ambigZone || keepLocalTime);\n\n\t// ensure non-ambiguous\n\t// this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\n\tthis._ambigTime = false;\n\tthis._ambigZone = false;\n\n\treturn this; // for chaining\n};\n\n\n// implicitly marks a zone\nnewMomentProto.utc = function(keepLocalTime) {\n\n\toldMomentProto.utc.call(this, keepLocalTime);\n\n\t// ensure non-ambiguous\n\t// this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\n\tthis._ambigTime = false;\n\tthis._ambigZone = false;\n\n\treturn this;\n};\n\n\n// implicitly marks a zone (will probably get called upon .utc() and .local())\nnewMomentProto.utcOffset = function(tzo) {\n\n\tif (tzo != null) { // setter\n\t\t// these assignments needs to happen before the original zone method is called.\n\t\t// I forget why, something to do with a browser crash.\n\t\tthis._ambigTime = false;\n\t\tthis._ambigZone = false;\n\t}\n\n\treturn oldMomentProto.utcOffset.apply(this, arguments);\n};\n\n\n// Formatting\n// -------------------------------------------------------------------------------------------------\n\nnewMomentProto.format = function() {\n\n\tif (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\n\t\treturn formatDate(this, arguments[0]); // our extended formatting\n\t}\n\tif (this._ambigTime) {\n\t\treturn oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\n\t}\n\tif (this._ambigZone) {\n\t\treturn oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\n\t}\n\tif (this._fullCalendar) { // enhanced non-ambig moment?\n\t\t// moment.format() doesn't ensure english, but we want to.\n\t\treturn oldMomentFormat(englishMoment(this));\n\t}\n\n\treturn oldMomentProto.format.apply(this, arguments);\n};\n\nnewMomentProto.toISOString = function() {\n\n\tif (this._ambigTime) {\n\t\treturn oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\n\t}\n\tif (this._ambigZone) {\n\t\treturn oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\n\t}\n\tif (this._fullCalendar) { // enhanced non-ambig moment?\n\t\t// depending on browser, moment might not output english. ensure english.\n\t\t// https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\n\t\treturn oldMomentProto.toISOString.apply(englishMoment(this), arguments);\n\t}\n\n\treturn oldMomentProto.toISOString.apply(this, arguments);\n};\n\nfunction englishMoment(mom) {\n\tif (mom.locale() !== 'en') {\n\t\treturn mom.clone().locale('en');\n\t}\n\treturn mom;\n}\n\n;;\n(function() {\n\n// exports\nFC.formatDate = formatDate;\nFC.formatRange = formatRange;\nFC.oldMomentFormat = oldMomentFormat;\nFC.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\n\n\n// Config\n// ---------------------------------------------------------------------------------------------------------------------\n\n/*\nInserted between chunks in the fake (\""intermediate\"") formatting string.\nImportant that it passes as whitespace (\\s) because moment often identifies non-standalone months\nvia a regexp with an \\s.\n*/\nvar PART_SEPARATOR = '\\u000b'; // vertical tab\n\n/*\nInserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\nbut rather, a \""special\"" token that has custom rendering (see specialTokens map).\n*/\nvar SPECIAL_TOKEN_MARKER = '\\u001f'; // information separator 1\n\n/*\nInserted at the beginning and end of a span of text that must have non-zero numeric characters.\nHandling of these markers is done in a post-processing step at the very end of text rendering.\n*/\nvar MAYBE_MARKER = '\\u001e'; // information separator 2\nvar MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\n\n/*\nAddition formatting tokens we want recognized\n*/\nvar specialTokens = {\n\tt: function(date) { // \""a\"" or \""p\""\n\t\treturn oldMomentFormat(date, 'a').charAt(0);\n\t},\n\tT: function(date) { // \""A\"" or \""P\""\n\t\treturn oldMomentFormat(date, 'A').charAt(0);\n\t}\n};\n\n/*\nThe first characters of formatting tokens for units that are 1 day or larger.\n`value` is for ranking relative size (lower means bigger).\n`unit` is a normalized unit, used for comparing moments.\n*/\nvar largeTokenMap = {\n\tY: { value: 1, unit: 'year' },\n\tM: { value: 2, unit: 'month' },\n\tW: { value: 3, unit: 'week' }, // ISO week\n\tw: { value: 3, unit: 'week' }, // local week\n\tD: { value: 4, unit: 'day' }, // day of month\n\td: { value: 4, unit: 'day' } // day of week\n};\n\n\n// Single Date Formatting\n// ---------------------------------------------------------------------------------------------------------------------\n\n/*\nFormats `date` with a Moment formatting string, but allow our non-zero areas and special token\n*/\nfunction formatDate(date, formatStr) {\n\treturn renderFakeFormatString(\n\t\tgetParsedFormatString(formatStr).fakeFormatString,\n\t\tdate\n\t);\n}\n\n/*\nCall this if you want Moment's original format method to be used\n*/\nfunction oldMomentFormat(mom, formatStr) {\n\treturn oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\n}\n\n\n// Date Range Formatting\n// -------------------------------------------------------------------------------------------------\n// TODO: make it work with timezone offset\n\n/*\nUsing a formatting string meant for a single date, generate a range string, like\n\""Sep 2 - 9 2013\"", that intelligently inserts a separator where the dates differ.\nIf the dates are the same as far as the format string is concerned, just return a single\nrendering of one date, without any separator.\n*/\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\n\tvar localeData;\n\n\tdate1 = FC.moment.parseZone(date1);\n\tdate2 = FC.moment.parseZone(date2);\n\n\tlocaleData = date1.localeData();\n\n\t// Expand localized format strings, like \""LL\"" -> \""MMMM D YYYY\"".\n\t// BTW, this is not important for `formatDate` because it is impossible to put custom tokens\n\t// or non-zero areas in Moment's localized format strings.\n\tformatStr = localeData.longDateFormat(formatStr) || formatStr;\n\n\treturn renderParsedFormat(\n\t\tgetParsedFormatString(formatStr),\n\t\tdate1,\n\t\tdate2,\n\t\tseparator || ' - ',\n\t\tisRTL\n\t);\n}\n\n/*\nRenders a range with an already-parsed format string.\n*/\nfunction renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\n\tvar sameUnits = parsedFormat.sameUnits;\n\tvar unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\n\tvar unzonedDate2 = date2.clone().stripZone(); // \""\n\n\tvar renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\n\tvar renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\n\n\tvar leftI;\n\tvar leftStr = '';\n\tvar rightI;\n\tvar rightStr = '';\n\tvar middleI;\n\tvar middleStr1 = '';\n\tvar middleStr2 = '';\n\tvar middleStr = '';\n\n\t// Start at the leftmost side of the formatting string and continue until you hit a token\n\t// that is not the same between dates.\n\tfor (\n\t\tleftI = 0;\n\t\tleftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI]));\n\t\tleftI++\n\t) {\n\t\tleftStr += renderedParts1[leftI];\n\t}\n\n\t// Similarly, start at the rightmost side of the formatting string and move left\n\tfor (\n\t\trightI = sameUnits.length - 1;\n\t\trightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI]));\n\t\trightI--\n\t) {\n\t\t// If current chunk is on the boundary of unique date-content, and is a special-case\n\t\t// date-formatting postfix character, then don't consume it. Consider it unique date-content.\n\t\t// TODO: make configurable\n\t\tif (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\n\t\t\tbreak;\n\t\t}\n\n\t\trightStr = renderedParts1[rightI] + rightStr;\n\t}\n\n\t// The area in the middle is different for both of the dates.\n\t// Collect them distinctly so we can jam them together later.\n\tfor (middleI = leftI; middleI <= rightI; middleI++) {\n\t\tmiddleStr1 += renderedParts1[middleI];\n\t\tmiddleStr2 += renderedParts2[middleI];\n\t}\n\n\tif (middleStr1 || middleStr2) {\n\t\tif (isRTL) {\n\t\t\tmiddleStr = middleStr2 + separator + middleStr1;\n\t\t}\n\t\telse {\n\t\t\tmiddleStr = middleStr1 + separator + middleStr2;\n\t\t}\n\t}\n\n\treturn processMaybeMarkers(\n\t\tleftStr + middleStr + rightStr\n\t);\n}\n\n\n// Format String Parsing\n// ---------------------------------------------------------------------------------------------------------------------\n\nvar parsedFormatStrCache = {};\n\n/*\nReturns a parsed format string, leveraging a cache.\n*/\nfunction getParsedFormatString(formatStr) {\n\treturn parsedFormatStrCache[formatStr] ||\n\t\t(parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\n}\n\n/*\nParses a format string into the following:\n- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\n- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \""day\""),\n  that indicates how similar a range's start & end must be in order to share the same formatted text.\n  If not a token, then the value is null.\n  Always a flat array (not nested liked \""chunks\"").\n*/\nfunction parseFormatString(formatStr) {\n\tvar chunks = chunkFormatString(formatStr);\n\t\n\treturn {\n\t\tfakeFormatString: buildFakeFormatString(chunks),\n\t\tsameUnits: buildSameUnits(chunks)\n\t};\n}\n\n/*\nBreak the formatting string into an array of chunks.\nA 'maybe' chunk will have nested chunks.\n*/\nfunction chunkFormatString(formatStr) {\n\tvar chunks = [];\n\tvar match;\n\n\t// TODO: more descrimination\n\t// \\4 is a backreference to the first character of a multi-character set.\n\tvar chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\n\n\twhile ((match = chunker.exec(formatStr))) {\n\t\tif (match[1]) { // a literal string inside [ ... ]\n\t\t\tchunks.push.apply(chunks, // append\n\t\t\t\tsplitStringLiteral(match[1])\n\t\t\t);\n\t\t}\n\t\telse if (match[2]) { // non-zero formatting inside ( ... )\n\t\t\tchunks.push({ maybe: chunkFormatString(match[2]) });\n\t\t}\n\t\telse if (match[3]) { // a formatting token\n\t\t\tchunks.push({ token: match[3] });\n\t\t}\n\t\telse if (match[5]) { // an unenclosed literal string\n\t\t\tchunks.push.apply(chunks, // append\n\t\t\t\tsplitStringLiteral(match[5])\n\t\t\t);\n\t\t}\n\t}\n\n\treturn chunks;\n}\n\n/*\nPotentially splits a literal-text string into multiple parts. For special cases.\n*/\nfunction splitStringLiteral(s) {\n\tif (s === '. ') {\n\t\treturn [ '.', ' ' ]; // for locales with periods bound to the end of each year/month/date\n\t}\n\telse {\n\t\treturn [ s ];\n\t}\n}\n\n/*\nGiven chunks parsed from a real format string, generate a fake (aka \""intermediate\"") format string with special control\ncharacters that will eventually be given to moment for formatting, and then post-processed.\n*/\nfunction buildFakeFormatString(chunks) {\n\tvar parts = [];\n\tvar i, chunk;\n\n\tfor (i = 0; i < chunks.length; i++) {\n\t\tchunk = chunks[i];\n\n\t\tif (typeof chunk === 'string') {\n\t\t\tparts.push('[' + chunk + ']');\n\t\t}\n\t\telse if (chunk.token) {\n\t\t\tif (chunk.token in specialTokens) {\n\t\t\t\tparts.push(\n\t\t\t\t\tSPECIAL_TOKEN_MARKER + // useful during post-processing\n\t\t\t\t\t'[' + chunk.token + ']' // preserve as literal text\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparts.push(chunk.token); // unprotected text implies a format string\n\t\t\t}\n\t\t}\n\t\telse if (chunk.maybe) {\n\t\t\tparts.push(\n\t\t\t\tMAYBE_MARKER + // useful during post-processing\n\t\t\t\tbuildFakeFormatString(chunk.maybe) +\n\t\t\t\tMAYBE_MARKER\n\t\t\t);\n\t\t}\n\t}\n\n\treturn parts.join(PART_SEPARATOR);\n}\n\n/*\nGiven parsed chunks from a real formatting string, generates an array of unit strings (like \""day\"") that indicate\nin which regard two dates must be similar in order to share range formatting text.\nThe `chunks` can be nested (because of \""maybe\"" chunks), however, the returned array will be flat.\n*/\nfunction buildSameUnits(chunks) {\n\tvar units = [];\n\tvar i, chunk;\n\tvar tokenInfo;\n\n\tfor (i = 0; i < chunks.length; i++) {\n\t\tchunk = chunks[i];\n\n\t\tif (chunk.token) {\n\t\t\ttokenInfo = largeTokenMap[chunk.token.charAt(0)];\n\t\t\tunits.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\n\t\t}\n\t\telse if (chunk.maybe) {\n\t\t\tunits.push.apply(units, // append\n\t\t\t\tbuildSameUnits(chunk.maybe)\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tunits.push(null);\n\t\t}\n\t}\n\n\treturn units;\n}\n\n\n// Rendering to text\n// ---------------------------------------------------------------------------------------------------------------------\n\n/*\nFormats a date with a fake format string, post-processes the control characters, then returns.\n*/\nfunction renderFakeFormatString(fakeFormatString, date) {\n\treturn processMaybeMarkers(\n\t\trenderFakeFormatStringParts(fakeFormatString, date).join('')\n\t);\n}\n\n/*\nFormats a date into parts that will have been post-processed, EXCEPT for the \""maybe\"" markers.\n*/\nfunction renderFakeFormatStringParts(fakeFormatString, date) {\n\tvar parts = [];\n\tvar fakeRender = oldMomentFormat(date, fakeFormatString);\n\tvar fakeParts = fakeRender.split(PART_SEPARATOR);\n\tvar i, fakePart;\n\n\tfor (i = 0; i < fakeParts.length; i++) {\n\t\tfakePart = fakeParts[i];\n\n\t\tif (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\n\t\t\tparts.push(\n\t\t\t\t// the literal string IS the token's name.\n\t\t\t\t// call special token's registered function.\n\t\t\t\tspecialTokens[fakePart.substring(1)](date)\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tparts.push(fakePart);\n\t\t}\n\t}\n\n\treturn parts;\n}\n\n/*\nAccepts an almost-finally-formatted string and processes the \""maybe\"" control characters, returning a new string.\n*/\nfunction processMaybeMarkers(s) {\n\treturn s.replace(MAYBE_REGEXP, function(m0, m1) { // regex assumed to have 'g' flag\n\t\tif (m1.match(/[1-9]/)) { // any non-zero numeric characters?\n\t\t\treturn m1;\n\t\t}\n\t\telse {\n\t\t\treturn '';\n\t\t}\n\t});\n}\n\n\n// Misc Utils\n// -------------------------------------------------------------------------------------------------\n\n/*\nReturns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\n*/\nfunction queryMostGranularFormatUnit(formatStr) {\n\tvar chunks = chunkFormatString(formatStr);\n\tvar i, chunk;\n\tvar candidate;\n\tvar best;\n\n\tfor (i = 0; i < chunks.length; i++) {\n\t\tchunk = chunks[i];\n\n\t\tif (chunk.token) {\n\t\t\tcandidate = largeTokenMap[chunk.token.charAt(0)];\n\t\t\tif (candidate) {\n\t\t\t\tif (!best || candidate.value > best.value) {\n\t\t\t\t\tbest = candidate;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (best) {\n\t\treturn best.unit;\n\t}\n\n\treturn null;\n};\n\n})();\n\n// quick local references\nvar formatDate = FC.formatDate;\nvar formatRange = FC.formatRange;\nvar oldMomentFormat = FC.oldMomentFormat;\n\n;;\n\nFC.Class = Class; // export\n\n// Class that all other classes will inherit from\nfunction Class() { }\n\n\n// Called on a class to create a subclass.\n// Last argument contains instance methods. Any argument before the last are considered mixins.\nClass.extend = function() {\n\tvar len = arguments.length;\n\tvar i;\n\tvar members;\n\n\tfor (i = 0; i < len; i++) {\n\t\tmembers = arguments[i];\n\t\tif (i < len - 1) { // not the last argument?\n\t\t\tmixIntoClass(this, members);\n\t\t}\n\t}\n\n\treturn extendClass(this, members || {}); // members will be undefined if no arguments\n};\n\n\n// Adds new member variables/methods to the class's prototype.\n// Can be called with another class, or a plain object hash containing new members.\nClass.mixin = function(members) {\n\tmixIntoClass(this, members);\n};\n\n\nfunction extendClass(superClass, members) {\n\tvar subClass;\n\n\t// ensure a constructor for the subclass, forwarding all arguments to the super-constructor if it doesn't exist\n\tif (hasOwnProp(members, 'constructor')) {\n\t\tsubClass = members.constructor;\n\t}\n\tif (typeof subClass !== 'function') {\n\t\tsubClass = members.constructor = function() {\n\t\t\tsuperClass.apply(this, arguments);\n\t\t};\n\t}\n\n\t// build the base prototype for the subclass, which is an new object chained to the superclass's prototype\n\tsubClass.prototype = createObject(superClass.prototype);\n\n\t// copy each member variable/method onto the the subclass's prototype\n\tcopyOwnProps(members, subClass.prototype);\n\n\t// copy over all class variables/methods to the subclass, such as `extend` and `mixin`\n\tcopyOwnProps(superClass, subClass);\n\n\treturn subClass;\n}\n\n\nfunction mixIntoClass(theClass, members) {\n\tcopyOwnProps(members, theClass.prototype);\n}\n;;\n\nvar Model = Class.extend(EmitterMixin, ListenerMixin, {\n\n\t_props: null,\n\t_watchers: null,\n\t_globalWatchArgs: null,\n\n\tconstructor: function() {\n\t\tthis._watchers = {};\n\t\tthis._props = {};\n\t\tthis.applyGlobalWatchers();\n\t},\n\n\tapplyGlobalWatchers: function() {\n\t\tvar argSets = this._globalWatchArgs || [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < argSets.length; i++) {\n\t\t\tthis.watch.apply(this, argSets[i]);\n\t\t}\n\t},\n\n\thas: function(name) {\n\t\treturn name in this._props;\n\t},\n\n\tget: function(name) {\n\t\tif (name === undefined) {\n\t\t\treturn this._props;\n\t\t}\n\n\t\treturn this._props[name];\n\t},\n\n\tset: function(name, val) {\n\t\tvar newProps;\n\n\t\tif (typeof name === 'string') {\n\t\t\tnewProps = {};\n\t\t\tnewProps[name] = val === undefined ? null : val;\n\t\t}\n\t\telse {\n\t\t\tnewProps = name;\n\t\t}\n\n\t\tthis.setProps(newProps);\n\t},\n\n\treset: function(newProps) {\n\t\tvar oldProps = this._props;\n\t\tvar changeset = {}; // will have undefined's to signal unsets\n\t\tvar name;\n\n\t\tfor (name in oldProps) {\n\t\t\tchangeset[name] = undefined;\n\t\t}\n\n\t\tfor (name in newProps) {\n\t\t\tchangeset[name] = newProps[name];\n\t\t}\n\n\t\tthis.setProps(changeset);\n\t},\n\n\tunset: function(name) { // accepts a string or array of strings\n\t\tvar newProps = {};\n\t\tvar names;\n\t\tvar i;\n\n\t\tif (typeof name === 'string') {\n\t\t\tnames = [ name ];\n\t\t}\n\t\telse {\n\t\t\tnames = name;\n\t\t}\n\n\t\tfor (i = 0; i < names.length; i++) {\n\t\t\tnewProps[names[i]] = undefined;\n\t\t}\n\n\t\tthis.setProps(newProps);\n\t},\n\n\tsetProps: function(newProps) {\n\t\tvar changedProps = {};\n\t\tvar changedCnt = 0;\n\t\tvar name, val;\n\n\t\tfor (name in newProps) {\n\t\t\tval = newProps[name];\n\n\t\t\t// a change in value?\n\t\t\t// if an object, don't check equality, because might have been mutated internally.\n\t\t\t// TODO: eventually enforce immutability.\n\t\t\tif (\n\t\t\t\ttypeof val === 'object' ||\n\t\t\t\tval !== this._props[name]\n\t\t\t) {\n\t\t\t\tchangedProps[name] = val;\n\t\t\t\tchangedCnt++;\n\t\t\t}\n\t\t}\n\n\t\tif (changedCnt) {\n\n\t\t\tthis.trigger('before:batchChange', changedProps);\n\n\t\t\tfor (name in changedProps) {\n\t\t\t\tval = changedProps[name];\n\n\t\t\t\tthis.trigger('before:change', name, val);\n\t\t\t\tthis.trigger('before:change:' + name, val);\n\t\t\t}\n\n\t\t\tfor (name in changedProps) {\n\t\t\t\tval = changedProps[name];\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\tdelete this._props[name];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._props[name] = val;\n\t\t\t\t}\n\n\t\t\t\tthis.trigger('change:' + name, val);\n\t\t\t\tthis.trigger('change', name, val);\n\t\t\t}\n\n\t\t\tthis.trigger('batchChange', changedProps);\n\t\t}\n\t},\n\n\twatch: function(name, depList, startFunc, stopFunc) {\n\t\tvar _this = this;\n\n\t\tthis.unwatch(name);\n\n\t\tthis._watchers[name] = this._watchDeps(depList, function(deps) {\n\t\t\tvar res = startFunc.call(_this, deps);\n\n\t\t\tif (res && res.then) {\n\t\t\t\t_this.unset(name); // put in an unset state while resolving\n\t\t\t\tres.then(function(val) {\n\t\t\t\t\t_this.set(name, val);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_this.set(name, res);\n\t\t\t}\n\t\t}, function() {\n\t\t\t_this.unset(name);\n\n\t\t\tif (stopFunc) {\n\t\t\t\tstopFunc.call(_this);\n\t\t\t}\n\t\t});\n\t},\n\n\tunwatch: function(name) {\n\t\tvar watcher = this._watchers[name];\n\n\t\tif (watcher) {\n\t\t\tdelete this._watchers[name];\n\t\t\twatcher.teardown();\n\t\t}\n\t},\n\n\t_watchDeps: function(depList, startFunc, stopFunc) {\n\t\tvar _this = this;\n\t\tvar queuedChangeCnt = 0;\n\t\tvar depCnt = depList.length;\n\t\tvar satisfyCnt = 0;\n\t\tvar values = {}; // what's passed as the `deps` arguments\n\t\tvar bindTuples = []; // array of [ eventName, handlerFunc ] arrays\n\t\tvar isCallingStop = false;\n\n\t\tfunction onBeforeDepChange(depName, val, isOptional) {\n\t\t\tqueuedChangeCnt++;\n\t\t\tif (queuedChangeCnt === 1) { // first change to cause a \""stop\"" ?\n\t\t\t\tif (satisfyCnt === depCnt) { // all deps previously satisfied?\n\t\t\t\t\tisCallingStop = true;\n\t\t\t\t\tstopFunc();\n\t\t\t\t\tisCallingStop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onDepChange(depName, val, isOptional) {\n\n\t\t\tif (val === undefined) { // unsetting a value?\n\n\t\t\t\t// required dependency that was previously set?\n\t\t\t\tif (!isOptional && values[depName] !== undefined) {\n\t\t\t\t\tsatisfyCnt--;\n\t\t\t\t}\n\n\t\t\t\tdelete values[depName];\n\t\t\t}\n\t\t\telse { // setting a value?\n\n\t\t\t\t// required dependency that was previously unset?\n\t\t\t\tif (!isOptional && values[depName] === undefined) {\n\t\t\t\t\tsatisfyCnt++;\n\t\t\t\t}\n\n\t\t\t\tvalues[depName] = val;\n\t\t\t}\n\n\t\t\tqueuedChangeCnt--;\n\t\t\tif (!queuedChangeCnt) { // last change to cause a \""start\""?\n\n\t\t\t\t// now finally satisfied or satisfied all along?\n\t\t\t\tif (satisfyCnt === depCnt) {\n\n\t\t\t\t\t// if the stopFunc initiated another value change, ignore it.\n\t\t\t\t\t// it will be processed by another change event anyway.\n\t\t\t\t\tif (!isCallingStop) {\n\t\t\t\t\t\tstartFunc(values);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// intercept for .on() that remembers handlers\n\t\tfunction bind(eventName, handler) {\n\t\t\t_this.on(eventName, handler);\n\t\t\tbindTuples.push([ eventName, handler ]);\n\t\t}\n\n\t\t// listen to dependency changes\n\t\tdepList.forEach(function(depName) {\n\t\t\tvar isOptional = false;\n\n\t\t\tif (depName.charAt(0) === '?') { // TODO: more DRY\n\t\t\t\tdepName = depName.substring(1);\n\t\t\t\tisOptional = true;\n\t\t\t}\n\n\t\t\tbind('before:change:' + depName, function(val) {\n\t\t\t\tonBeforeDepChange(depName, val, isOptional);\n\t\t\t});\n\n\t\t\tbind('change:' + depName, function(val) {\n\t\t\t\tonDepChange(depName, val, isOptional);\n\t\t\t});\n\t\t});\n\n\t\t// process current dependency values\n\t\tdepList.forEach(function(depName) {\n\t\t\tvar isOptional = false;\n\n\t\t\tif (depName.charAt(0) === '?') { // TODO: more DRY\n\t\t\t\tdepName = depName.substring(1);\n\t\t\t\tisOptional = true;\n\t\t\t}\n\n\t\t\tif (_this.has(depName)) {\n\t\t\t\tvalues[depName] = _this.get(depName);\n\t\t\t\tsatisfyCnt++;\n\t\t\t}\n\t\t\telse if (isOptional) {\n\t\t\t\tsatisfyCnt++;\n\t\t\t}\n\t\t});\n\n\t\t// initially satisfied\n\t\tif (satisfyCnt === depCnt) {\n\t\t\tstartFunc(values);\n\t\t}\n\n\t\treturn {\n\t\t\tteardown: function() {\n\t\t\t\t// remove all handlers\n\t\t\t\tfor (var i = 0; i < bindTuples.length; i++) {\n\t\t\t\t\t_this.off(bindTuples[i][0], bindTuples[i][1]);\n\t\t\t\t}\n\t\t\t\tbindTuples = null;\n\n\t\t\t\t// was satisfied, so call stopFunc\n\t\t\t\tif (satisfyCnt === depCnt) {\n\t\t\t\t\tstopFunc();\n\t\t\t\t}\n\t\t\t},\n\t\t\tflash: function() {\n\t\t\t\tif (satisfyCnt === depCnt) {\n\t\t\t\t\tstopFunc();\n\t\t\t\t\tstartFunc(values);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t},\n\n\tflash: function(name) {\n\t\tvar watcher = this._watchers[name];\n\n\t\tif (watcher) {\n\t\t\twatcher.flash();\n\t\t}\n\t}\n\n});\n\n\nModel.watch = function(/* same arguments as this.watch() */) {\n\tvar proto = this.prototype;\n\n\tif (!proto._globalWatchArgs) {\n\t\tproto._globalWatchArgs = [];\n\t}\n\n\tproto._globalWatchArgs.push(arguments);\n};\n\n\nFC.Model = Model;\n\n\n;;\n\nvar Promise = {\n\n\tconstruct: function(executor) {\n\t\tvar deferred = $.Deferred();\n\t\tvar promise = deferred.promise();\n\n\t\tif (typeof executor === 'function') {\n\t\t\texecutor(\n\t\t\t\tfunction(val) { // resolve\n\t\t\t\t\tdeferred.resolve(val);\n\t\t\t\t\tattachImmediatelyResolvingThen(promise, val);\n\t\t\t\t},\n\t\t\t\tfunction() { // reject\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t\tattachImmediatelyRejectingThen(promise);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\treturn promise;\n\t},\n\n\tresolve: function(val) {\n\t\tvar deferred = $.Deferred().resolve(val);\n\t\tvar promise = deferred.promise();\n\n\t\tattachImmediatelyResolvingThen(promise, val);\n\n\t\treturn promise;\n\t},\n\n\treject: function() {\n\t\tvar deferred = $.Deferred().reject();\n\t\tvar promise = deferred.promise();\n\n\t\tattachImmediatelyRejectingThen(promise);\n\n\t\treturn promise;\n\t}\n\n};\n\n\nfunction attachImmediatelyResolvingThen(promise, val) {\n\tpromise.then = function(onResolve) {\n\t\tif (typeof onResolve === 'function') {\n\t\t\tonResolve(val);\n\t\t}\n\t\treturn promise; // for chaining\n\t};\n}\n\n\nfunction attachImmediatelyRejectingThen(promise) {\n\tpromise.then = function(onResolve, onReject) {\n\t\tif (typeof onReject === 'function') {\n\t\t\tonReject();\n\t\t}\n\t\treturn promise; // for chaining\n\t};\n}\n\n\nFC.Promise = Promise;\n\n;;\n\nvar TaskQueue = Class.extend(EmitterMixin, {\n\n\tq: null,\n\tisPaused: false,\n\tisRunning: false,\n\n\n\tconstructor: function() {\n\t\tthis.q = [];\n\t},\n\n\n\tqueue: function(/* taskFunc, taskFunc... */) {\n\t\tthis.q.push.apply(this.q, arguments); // append\n\t\tthis.tryStart();\n\t},\n\n\n\tpause: function() {\n\t\tthis.isPaused = true;\n\t},\n\n\n\tresume: function() {\n\t\tthis.isPaused = false;\n\t\tthis.tryStart();\n\t},\n\n\n\ttryStart: function() {\n\t\tif (!this.isRunning && this.canRunNext()) {\n\t\t\tthis.isRunning = true;\n\t\t\tthis.trigger('start');\n\t\t\tthis.runNext();\n\t\t}\n\t},\n\n\n\tcanRunNext: function() {\n\t\treturn !this.isPaused && this.q.length;\n\t},\n\n\n\trunNext: function() { // does not check canRunNext\n\t\tthis.runTask(this.q.shift());\n\t},\n\n\n\trunTask: function(task) {\n\t\tthis.runTaskFunc(task);\n\t},\n\n\n\trunTaskFunc: function(taskFunc) {\n\t\tvar _this = this;\n\t\tvar res = taskFunc();\n\n\t\tif (res && res.then) {\n\t\t\tres.then(done);\n\t\t}\n\t\telse {\n\t\t\tdone();\n\t\t}\n\n\t\tfunction done() {\n\t\t\tif (_this.canRunNext()) {\n\t\t\t\t_this.runNext();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_this.isRunning = false;\n\t\t\t\t_this.trigger('stop');\n\t\t\t}\n\t\t}\n\t}\n\n});\n\nFC.TaskQueue = TaskQueue;\n\n;;\n\nvar RenderQueue = TaskQueue.extend({\n\n\twaitsByNamespace: null,\n\twaitNamespace: null,\n\twaitId: null,\n\n\n\tconstructor: function(waitsByNamespace) {\n\t\tTaskQueue.call(this); // super-constructor\n\n\t\tthis.waitsByNamespace = waitsByNamespace || {};\n\t},\n\n\n\tqueue: function(taskFunc, namespace, type) {\n\t\tvar task = {\n\t\t\tfunc: taskFunc,\n\t\t\tnamespace: namespace,\n\t\t\ttype: type\n\t\t};\n\t\tvar waitMs;\n\n\t\tif (namespace) {\n\t\t\twaitMs = this.waitsByNamespace[namespace];\n\t\t}\n\n\t\tif (this.waitNamespace) {\n\t\t\tif (namespace === this.waitNamespace && waitMs != null) {\n\t\t\t\tthis.delayWait(waitMs);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.clearWait();\n\t\t\t\tthis.tryStart();\n\t\t\t}\n\t\t}\n\n\t\tif (this.compoundTask(task)) { // appended to queue?\n\n\t\t\tif (!this.waitNamespace && waitMs != null) {\n\t\t\t\tthis.startWait(namespace, waitMs);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.tryStart();\n\t\t\t}\n\t\t}\n\t},\n\n\n\tstartWait: function(namespace, waitMs) {\n\t\tthis.waitNamespace = namespace;\n\t\tthis.spawnWait(waitMs);\n\t},\n\n\n\tdelayWait: function(waitMs) {\n\t\tclearTimeout(this.waitId);\n\t\tthis.spawnWait(waitMs);\n\t},\n\n\n\tspawnWait: function(waitMs) {\n\t\tvar _this = this;\n\n\t\tthis.waitId = setTimeout(function() {\n\t\t\t_this.waitNamespace = null;\n\t\t\t_this.tryStart();\n\t\t}, waitMs);\n\t},\n\n\n\tclearWait: function() {\n\t\tif (this.waitNamespace) {\n\t\t\tclearTimeout(this.waitId);\n\t\t\tthis.waitId = null;\n\t\t\tthis.waitNamespace = null;\n\t\t}\n\t},\n\n\n\tcanRunNext: function() {\n\t\tif (!TaskQueue.prototype.canRunNext.apply(this, arguments)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// waiting for a certain namespace to stop receiving tasks?\n\t\tif (this.waitNamespace) {\n\n\t\t\t// if there was a different namespace task in the meantime,\n\t\t\t// that forces all previously-waiting tasks to suddenly execute.\n\t\t\t// TODO: find a way to do this in constant time.\n\t\t\tfor (var q = this.q, i = 0; i < q.length; i++) {\n\t\t\t\tif (q[i].namespace !== this.waitNamespace) {\n\t\t\t\t\treturn true; // allow execution\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\n\trunTask: function(task) {\n\t\tthis.runTaskFunc(task.func);\n\t},\n\n\n\tcompoundTask: function(newTask) {\n\t\tvar q = this.q;\n\t\tvar shouldAppend = true;\n\t\tvar i, task;\n\n\t\tif (newTask.namespace) {\n\n\t\t\tif (newTask.type === 'destroy' || newTask.type === 'init') {\n\n\t\t\t\t// remove all add/remove ops with same namespace, regardless of order\n\t\t\t\tfor (i = q.length - 1; i >= 0; i--) {\n\t\t\t\t\ttask = q[i];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttask.namespace === newTask.namespace &&\n\t\t\t\t\t\t(task.type === 'add' || task.type === 'remove')\n\t\t\t\t\t) {\n\t\t\t\t\t\tq.splice(i, 1); // remove task\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (newTask.type === 'destroy') {\n\t\t\t\t\t// eat away final init/destroy operation\n\t\t\t\t\tif (q.length) {\n\t\t\t\t\t\ttask = q[q.length - 1]; // last task\n\n\t\t\t\t\t\tif (task.namespace === newTask.namespace) {\n\n\t\t\t\t\t\t\t// the init and our destroy cancel each other out\n\t\t\t\t\t\t\tif (task.type === 'init') {\n\t\t\t\t\t\t\t\tshouldAppend = false;\n\t\t\t\t\t\t\t\tq.pop();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// prefer to use the destroy operation that's already present\n\t\t\t\t\t\t\telse if (task.type === 'destroy') {\n\t\t\t\t\t\t\t\tshouldAppend = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (newTask.type === 'init') {\n\t\t\t\t\t// eat away final init operation\n\t\t\t\t\tif (q.length) {\n\t\t\t\t\t\ttask = q[q.length - 1]; // last task\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttask.namespace === newTask.namespace &&\n\t\t\t\t\t\t\ttask.type === 'init'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// our init operation takes precedence\n\t\t\t\t\t\t\tq.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (shouldAppend) {\n\t\t\tq.push(newTask);\n\t\t}\n\n\t\treturn shouldAppend;\n\t}\n\n});\n\nFC.RenderQueue = RenderQueue;\n\n;;\n\nvar EmitterMixin = FC.EmitterMixin = {\n\n\t// jQuery-ification via $(this) allows a non-DOM object to have\n\t// the same event handling capabilities (including namespaces).\n\n\n\ton: function(types, handler) {\n\t\t$(this).on(types, this._prepareIntercept(handler));\n\t\treturn this; // for chaining\n\t},\n\n\n\tone: function(types, handler) {\n\t\t$(this).one(types, this._prepareIntercept(handler));\n\t\treturn this; // for chaining\n\t},\n\n\n\t_prepareIntercept: function(handler) {\n\t\t// handlers are always called with an \""event\"" object as their first param.\n\t\t// sneak the `this` context and arguments into the extra parameter object\n\t\t// and forward them on to the original handler.\n\t\tvar intercept = function(ev, extra) {\n\t\t\treturn handler.apply(\n\t\t\t\textra.context || this,\n\t\t\t\textra.args || []\n\t\t\t);\n\t\t};\n\n\t\t// mimick jQuery's internal \""proxy\"" system (risky, I know)\n\t\t// causing all functions with the same .guid to appear to be the same.\n\t\t// https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\n\t\t// this is needed for calling .off with the original non-intercept handler.\n\t\tif (!handler.guid) {\n\t\t\thandler.guid = $.guid++;\n\t\t}\n\t\tintercept.guid = handler.guid;\n\n\t\treturn intercept;\n\t},\n\n\n\toff: function(types, handler) {\n\t\t$(this).off(types, handler);\n\n\t\treturn this; // for chaining\n\t},\n\n\n\ttrigger: function(types) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1); // arguments after the first\n\n\t\t// pass in \""extra\"" info to the intercept\n\t\t$(this).triggerHandler(types, { args: args });\n\n\t\treturn this; // for chaining\n\t},\n\n\n\ttriggerWith: function(types, context, args) {\n\n\t\t// `triggerHandler` is less reliant on the DOM compared to `trigger`.\n\t\t// pass in \""extra\"" info to the intercept.\n\t\t$(this).triggerHandler(types, { context: context, args: args });\n\n\t\treturn this; // for chaining\n\t}\n\n};\n\n;;\n\n/*\nUtility methods for easily listening to events on another object,\nand more importantly, easily unlistening from them.\n*/\nvar ListenerMixin = FC.ListenerMixin = (function() {\n\tvar guid = 0;\n\tvar ListenerMixin = {\n\n\t\tlistenerId: null,\n\n\t\t/*\n\t\tGiven an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\n\t\tThe `callback` will be called with the `this` context of the object that .listenTo is being called on.\n\t\tCan be called:\n\t\t\t.listenTo(other, eventName, callback)\n\t\tOR\n\t\t\t.listenTo(other, {\n\t\t\t\teventName1: callback1,\n\t\t\t\teventName2: callback2\n\t\t\t})\n\t\t*/\n\t\tlistenTo: function(other, arg, callback) {\n\t\t\tif (typeof arg === 'object') { // given dictionary of callbacks\n\t\t\t\tfor (var eventName in arg) {\n\t\t\t\t\tif (arg.hasOwnProperty(eventName)) {\n\t\t\t\t\t\tthis.listenTo(other, eventName, arg[eventName]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof arg === 'string') {\n\t\t\t\tother.on(\n\t\t\t\t\targ + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\n\t\t\t\t\t$.proxy(callback, this) // always use `this` context\n\t\t\t\t\t\t// the usually-undesired jQuery guid behavior doesn't matter,\n\t\t\t\t\t\t// because we always unbind via namespace\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/*\n\t\tCauses the current object to stop listening to events on the `other` object.\n\t\t`eventName` is optional. If omitted, will stop listening to ALL events on `other`.\n\t\t*/\n\t\tstopListeningTo: function(other, eventName) {\n\t\t\tother.off((eventName || '') + '.' + this.getListenerNamespace());\n\t\t},\n\n\t\t/*\n\t\tReturns a string, unique to this object, to be used for event namespacing\n\t\t*/\n\t\tgetListenerNamespace: function() {\n\t\t\tif (this.listenerId == null) {\n\t\t\t\tthis.listenerId = guid++;\n\t\t\t}\n\t\t\treturn '_listener' + this.listenerId;\n\t\t}\n\n\t};\n\treturn ListenerMixin;\n})();\n;;\n\n/* A rectangular panel that is absolutely positioned over other content\n------------------------------------------------------------------------------------------------------------------------\nOptions:\n\t- className (string)\n\t- content (HTML string or jQuery element set)\n\t- parentEl\n\t- top\n\t- left\n\t- right (the x coord of where the right edge should be. not a \""CSS\"" right)\n\t- autoHide (boolean)\n\t- show (callback)\n\t- hide (callback)\n*/\n\nvar Popover = Class.extend(ListenerMixin, {\n\n\tisHidden: true,\n\toptions: null,\n\tel: null, // the container element for the popover. generated by this object\n\tmargin: 10, // the space required between the popover and the edges of the scroll container\n\n\n\tconstructor: function(options) {\n\t\tthis.options = options || {};\n\t},\n\n\n\t// Shows the popover on the specified position. Renders it if not already\n\tshow: function() {\n\t\tif (this.isHidden) {\n\t\t\tif (!this.el) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\tthis.el.show();\n\t\t\tthis.position();\n\t\t\tthis.isHidden = false;\n\t\t\tthis.trigger('show');\n\t\t}\n\t},\n\n\n\t// Hides the popover, through CSS, but does not remove it from the DOM\n\thide: function() {\n\t\tif (!this.isHidden) {\n\t\t\tthis.el.hide();\n\t\t\tthis.isHidden = true;\n\t\t\tthis.trigger('hide');\n\t\t}\n\t},\n\n\n\t// Creates `this.el` and renders content inside of it\n\trender: function() {\n\t\tvar _this = this;\n\t\tvar options = this.options;\n\n\t\tthis.el = $('<div class=\""fc-popover\""/>')\n\t\t\t.addClass(options.className || '')\n\t\t\t.css({\n\t\t\t\t// position initially to the top left to avoid creating scrollbars\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t})\n\t\t\t.append(options.content)\n\t\t\t.appendTo(options.parentEl);\n\n\t\t// when a click happens on anything inside with a 'fc-close' className, hide the popover\n\t\tthis.el.on('click', '.fc-close', function() {\n\t\t\t_this.hide();\n\t\t});\n\n\t\tif (options.autoHide) {\n\t\t\tthis.listenTo($(document), 'mousedown', this.documentMousedown);\n\t\t}\n\t},\n\n\n\t// Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n\tdocumentMousedown: function(ev) {\n\t\t// only hide the popover if the click happened outside the popover\n\t\tif (this.el && !$(ev.target).closest(this.el).length) {\n\t\t\tthis.hide();\n\t\t}\n\t},\n\n\n\t// Hides and unregisters any handlers\n\tremoveElement: function() {\n\t\tthis.hide();\n\n\t\tif (this.el) {\n\t\t\tthis.el.remove();\n\t\t\tthis.el = null;\n\t\t}\n\n\t\tthis.stopListeningTo($(document), 'mousedown');\n\t},\n\n\n\t// Positions the popover optimally, using the top/left/right options\n\tposition: function() {\n\t\tvar options = this.options;\n\t\tvar origin = this.el.offsetParent().offset();\n\t\tvar width = this.el.outerWidth();\n\t\tvar height = this.el.outerHeight();\n\t\tvar windowEl = $(window);\n\t\tvar viewportEl = getScrollParent(this.el);\n\t\tvar viewportTop;\n\t\tvar viewportLeft;\n\t\tvar viewportOffset;\n\t\tvar top; // the \""position\"" (not \""offset\"") values for the popover\n\t\tvar left; //\n\n\t\t// compute top and left\n\t\ttop = options.top || 0;\n\t\tif (options.left !== undefined) {\n\t\t\tleft = options.left;\n\t\t}\n\t\telse if (options.right !== undefined) {\n\t\t\tleft = options.right - width; // derive the left value from the right value\n\t\t}\n\t\telse {\n\t\t\tleft = 0;\n\t\t}\n\n\t\tif (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\n\t\t\tviewportEl = windowEl;\n\t\t\tviewportTop = 0; // the window is always at the top left\n\t\t\tviewportLeft = 0; // (and .offset() won't work if called here)\n\t\t}\n\t\telse {\n\t\t\tviewportOffset = viewportEl.offset();\n\t\t\tviewportTop = viewportOffset.top;\n\t\t\tviewportLeft = viewportOffset.left;\n\t\t}\n\n\t\t// if the window is scrolled, it causes the visible area to be further down\n\t\tviewportTop += windowEl.scrollTop();\n\t\tviewportLeft += windowEl.scrollLeft();\n\n\t\t// constrain to the view port. if constrained by two edges, give precedence to top/left\n\t\tif (options.viewportConstrain !== false) {\n\t\t\ttop = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\n\t\t\ttop = Math.max(top, viewportTop + this.margin);\n\t\t\tleft = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\n\t\t\tleft = Math.max(left, viewportLeft + this.margin);\n\t\t}\n\n\t\tthis.el.css({\n\t\t\ttop: top - origin.top,\n\t\t\tleft: left - origin.left\n\t\t});\n\t},\n\n\n\t// Triggers a callback. Calls a function in the option hash of the same name.\n\t// Arguments beyond the first `name` are forwarded on.\n\t// TODO: better code reuse for this. Repeat code\n\ttrigger: function(name) {\n\t\tif (this.options[name]) {\n\t\t\tthis.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t}\n\n});\n\n;;\n\n/*\nA cache for the left/right/top/bottom/width/height values for one or more elements.\nWorks with both offset (from topleft document) and position (from offsetParent).\n\noptions:\n- els\n- isHorizontal\n- isVertical\n*/\nvar CoordCache = FC.CoordCache = Class.extend({\n\n\tels: null, // jQuery set (assumed to be siblings)\n\tforcedOffsetParentEl: null, // options can override the natural offsetParent\n\torigin: null, // {left,top} position of offsetParent of els\n\tboundingRect: null, // constrain cordinates to this rectangle. {left,right,top,bottom} or null\n\tisHorizontal: false, // whether to query for left/right/width\n\tisVertical: false, // whether to query for top/bottom/height\n\n\t// arrays of coordinates (offsets from topleft of document)\n\tlefts: null,\n\trights: null,\n\ttops: null,\n\tbottoms: null,\n\n\n\tconstructor: function(options) {\n\t\tthis.els = $(options.els);\n\t\tthis.isHorizontal = options.isHorizontal;\n\t\tthis.isVertical = options.isVertical;\n\t\tthis.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\n\t},\n\n\n\t// Queries the els for coordinates and stores them.\n\t// Call this method before using and of the get* methods below.\n\tbuild: function() {\n\t\tvar offsetParentEl = this.forcedOffsetParentEl;\n\t\tif (!offsetParentEl && this.els.length > 0) {\n\t\t\toffsetParentEl = this.els.eq(0).offsetParent();\n\t\t}\n\n\t\tthis.origin = offsetParentEl ?\n\t\t\toffsetParentEl.offset() :\n\t\t\tnull;\n\n\t\tthis.boundingRect = this.queryBoundingRect();\n\n\t\tif (this.isHorizontal) {\n\t\t\tthis.buildElHorizontals();\n\t\t}\n\t\tif (this.isVertical) {\n\t\t\tthis.buildElVerticals();\n\t\t}\n\t},\n\n\n\t// Destroys all internal data about coordinates, freeing memory\n\tclear: function() {\n\t\tthis.origin = null;\n\t\tthis.boundingRect = null;\n\t\tthis.lefts = null;\n\t\tthis.rights = null;\n\t\tthis.tops = null;\n\t\tthis.bottoms = null;\n\t},\n\n\n\t// When called, if coord caches aren't built, builds them\n\tensureBuilt: function() {\n\t\tif (!this.origin) {\n\t\t\tthis.build();\n\t\t}\n\t},\n\n\n\t// Populates the left/right internal coordinate arrays\n\tbuildElHorizontals: function() {\n\t\tvar lefts = [];\n\t\tvar rights = [];\n\n\t\tthis.els.each(function(i, node) {\n\t\t\tvar el = $(node);\n\t\t\tvar left = el.offset().left;\n\t\t\tvar width = el.outerWidth();\n\n\t\t\tlefts.push(left);\n\t\t\trights.push(left + width);\n\t\t});\n\n\t\tthis.lefts = lefts;\n\t\tthis.rights = rights;\n\t},\n\n\n\t// Populates the top/bottom internal coordinate arrays\n\tbuildElVerticals: function() {\n\t\tvar tops = [];\n\t\tvar bottoms = [];\n\n\t\tthis.els.each(function(i, node) {\n\t\t\tvar el = $(node);\n\t\t\tvar top = el.offset().top;\n\t\t\tvar height = el.outerHeight();\n\n\t\t\ttops.push(top);\n\t\t\tbottoms.push(top + height);\n\t\t});\n\n\t\tthis.tops = tops;\n\t\tthis.bottoms = bottoms;\n\t},\n\n\n\t// Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n\t// If no intersection is made, returns undefined.\n\tgetHorizontalIndex: function(leftOffset) {\n\t\tthis.ensureBuilt();\n\n\t\tvar lefts = this.lefts;\n\t\tvar rights = this.rights;\n\t\tvar len = lefts.length;\n\t\tvar i;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (leftOffset >= lefts[i] && leftOffset < rights[i]) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Given a top offset (from document top), returns the index of the el that it vertically intersects.\n\t// If no intersection is made, returns undefined.\n\tgetVerticalIndex: function(topOffset) {\n\t\tthis.ensureBuilt();\n\n\t\tvar tops = this.tops;\n\t\tvar bottoms = this.bottoms;\n\t\tvar len = tops.length;\n\t\tvar i;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (topOffset >= tops[i] && topOffset < bottoms[i]) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Gets the left offset (from document left) of the element at the given index\n\tgetLeftOffset: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.lefts[leftIndex];\n\t},\n\n\n\t// Gets the left position (from offsetParent left) of the element at the given index\n\tgetLeftPosition: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.lefts[leftIndex] - this.origin.left;\n\t},\n\n\n\t// Gets the right offset (from document left) of the element at the given index.\n\t// This value is NOT relative to the document's right edge, like the CSS concept of \""right\"" would be.\n\tgetRightOffset: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.rights[leftIndex];\n\t},\n\n\n\t// Gets the right position (from offsetParent left) of the element at the given index.\n\t// This value is NOT relative to the offsetParent's right edge, like the CSS concept of \""right\"" would be.\n\tgetRightPosition: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.rights[leftIndex] - this.origin.left;\n\t},\n\n\n\t// Gets the width of the element at the given index\n\tgetWidth: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.rights[leftIndex] - this.lefts[leftIndex];\n\t},\n\n\n\t// Gets the top offset (from document top) of the element at the given index\n\tgetTopOffset: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.tops[topIndex];\n\t},\n\n\n\t// Gets the top position (from offsetParent top) of the element at the given position\n\tgetTopPosition: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.tops[topIndex] - this.origin.top;\n\t},\n\n\t// Gets the bottom offset (from the document top) of the element at the given index.\n\t// This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \""bottom\"" would be.\n\tgetBottomOffset: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.bottoms[topIndex];\n\t},\n\n\n\t// Gets the bottom position (from the offsetParent top) of the element at the given index.\n\t// This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \""bottom\"" would be.\n\tgetBottomPosition: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.bottoms[topIndex] - this.origin.top;\n\t},\n\n\n\t// Gets the height of the element at the given index\n\tgetHeight: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.bottoms[topIndex] - this.tops[topIndex];\n\t},\n\n\n\t// Bounding Rect\n\t// TODO: decouple this from CoordCache\n\n\t// Compute and return what the elements' bounding rectangle is, from the user's perspective.\n\t// Right now, only returns a rectangle if constrained by an overflow:scroll element.\n\t// Returns null if there are no elements\n\tqueryBoundingRect: function() {\n\t\tvar scrollParentEl;\n\n\t\tif (this.els.length > 0) {\n\t\t\tscrollParentEl = getScrollParent(this.els.eq(0));\n\n\t\t\tif (!scrollParentEl.is(document)) {\n\t\t\t\treturn getClientRect(scrollParentEl);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\tisPointInBounds: function(leftOffset, topOffset) {\n\t\treturn this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\n\t},\n\n\tisLeftInBounds: function(leftOffset) {\n\t\treturn !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);\n\t},\n\n\tisTopInBounds: function(topOffset) {\n\t\treturn !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);\n\t}\n\n});\n\n;;\n\n/* Tracks a drag's mouse movement, firing various handlers\n----------------------------------------------------------------------------------------------------------------------*/\n// TODO: use Emitter\n\nvar DragListener = FC.DragListener = Class.extend(ListenerMixin, {\n\n\toptions: null,\n\tsubjectEl: null,\n\n\t// coordinates of the initial mousedown\n\toriginX: null,\n\toriginY: null,\n\n\t// the wrapping element that scrolls, or MIGHT scroll if there's overflow.\n\t// TODO: do this for wrappers that have overflow:hidden as well.\n\tscrollEl: null,\n\n\tisInteracting: false,\n\tisDistanceSurpassed: false,\n\tisDelayEnded: false,\n\tisDragging: false,\n\tisTouch: false,\n\tisGeneric: false, // initiated by 'dragstart' (jqui)\n\n\tdelay: null,\n\tdelayTimeoutId: null,\n\tminDistance: null,\n\n\tshouldCancelTouchScroll: true,\n\tscrollAlwaysKills: false,\n\n\n\tconstructor: function(options) {\n\t\tthis.options = options || {};\n\t},\n\n\n\t// Interaction (high-level)\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tstartInteraction: function(ev, extraOptions) {\n\n\t\tif (ev.type === 'mousedown') {\n\t\t\tif (GlobalEmitter.get().shouldIgnoreMouse()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (!isPrimaryMouseButton(ev)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tev.preventDefault(); // prevents native selection in most browsers\n\t\t\t}\n\t\t}\n\n\t\tif (!this.isInteracting) {\n\n\t\t\t// process options\n\t\t\textraOptions = extraOptions || {};\n\t\t\tthis.delay = firstDefined(extraOptions.delay, this.options.delay, 0);\n\t\t\tthis.minDistance = firstDefined(extraOptions.distance, this.options.distance, 0);\n\t\t\tthis.subjectEl = this.options.subjectEl;\n\n\t\t\tpreventSelection($('body'));\n\n\t\t\tthis.isInteracting = true;\n\t\t\tthis.isTouch = getEvIsTouch(ev);\n\t\t\tthis.isGeneric = ev.type === 'dragstart';\n\t\t\tthis.isDelayEnded = false;\n\t\t\tthis.isDistanceSurpassed = false;\n\n\t\t\tthis.originX = getEvX(ev);\n\t\t\tthis.originY = getEvY(ev);\n\t\t\tthis.scrollEl = getScrollParent($(ev.target));\n\n\t\t\tthis.bindHandlers();\n\t\t\tthis.initAutoScroll();\n\t\t\tthis.handleInteractionStart(ev);\n\t\t\tthis.startDelay(ev);\n\n\t\t\tif (!this.minDistance) {\n\t\t\t\tthis.handleDistanceSurpassed(ev);\n\t\t\t}\n\t\t}\n\t},\n\n\n\thandleInteractionStart: function(ev) {\n\t\tthis.trigger('interactionStart', ev);\n\t},\n\n\n\tendInteraction: function(ev, isCancelled) {\n\t\tif (this.isInteracting) {\n\t\t\tthis.endDrag(ev);\n\n\t\t\tif (this.delayTimeoutId) {\n\t\t\t\tclearTimeout(this.delayTimeoutId);\n\t\t\t\tthis.delayTimeoutId = null;\n\t\t\t}\n\n\t\t\tthis.destroyAutoScroll();\n\t\t\tthis.unbindHandlers();\n\n\t\t\tthis.isInteracting = false;\n\t\t\tthis.handleInteractionEnd(ev, isCancelled);\n\n\t\t\tallowSelection($('body'));\n\t\t}\n\t},\n\n\n\thandleInteractionEnd: function(ev, isCancelled) {\n\t\tthis.trigger('interactionEnd', ev, isCancelled || false);\n\t},\n\n\n\t// Binding To DOM\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tbindHandlers: function() {\n\t\t// some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\n\t\t// so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\n\t\tvar globalEmitter = GlobalEmitter.get();\n\n\t\tif (this.isGeneric) {\n\t\t\tthis.listenTo($(document), { // might only work on iOS because of GlobalEmitter's bind :(\n\t\t\t\tdrag: this.handleMove,\n\t\t\t\tdragstop: this.endInteraction\n\t\t\t});\n\t\t}\n\t\telse if (this.isTouch) {\n\t\t\tthis.listenTo(globalEmitter, {\n\t\t\t\ttouchmove: this.handleTouchMove,\n\t\t\t\ttouchend: this.endInteraction,\n\t\t\t\tscroll: this.handleTouchScroll\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.listenTo(globalEmitter, {\n\t\t\t\tmousemove: this.handleMouseMove,\n\t\t\t\tmouseup: this.endInteraction\n\t\t\t});\n\t\t}\n\n\t\tthis.listenTo(globalEmitter, {\n\t\t\tselectstart: preventDefault, // don't allow selection while dragging\n\t\t\tcontextmenu: preventDefault // long taps would open menu on Chrome dev tools\n\t\t});\n\t},\n\n\n\tunbindHandlers: function() {\n\t\tthis.stopListeningTo(GlobalEmitter.get());\n\t\tthis.stopListeningTo($(document)); // for isGeneric\n\t},\n\n\n\t// Drag (high-level)\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// extraOptions ignored if drag already started\n\tstartDrag: function(ev, extraOptions) {\n\t\tthis.startInteraction(ev, extraOptions); // ensure interaction began\n\n\t\tif (!this.isDragging) {\n\t\t\tthis.isDragging = true;\n\t\t\tthis.handleDragStart(ev);\n\t\t}\n\t},\n\n\n\thandleDragStart: function(ev) {\n\t\tthis.trigger('dragStart', ev);\n\t},\n\n\n\thandleMove: function(ev) {\n\t\tvar dx = getEvX(ev) - this.originX;\n\t\tvar dy = getEvY(ev) - this.originY;\n\t\tvar minDistance = this.minDistance;\n\t\tvar distanceSq; // current distance from the origin, squared\n\n\t\tif (!this.isDistanceSurpassed) {\n\t\t\tdistanceSq = dx * dx + dy * dy;\n\t\t\tif (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\n\t\t\t\tthis.handleDistanceSurpassed(ev);\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDragging) {\n\t\t\tthis.handleDrag(dx, dy, ev);\n\t\t}\n\t},\n\n\n\t// Called while the mouse is being moved and when we know a legitimate drag is taking place\n\thandleDrag: function(dx, dy, ev) {\n\t\tthis.trigger('drag', dx, dy, ev);\n\t\tthis.updateAutoScroll(ev); // will possibly cause scrolling\n\t},\n\n\n\tendDrag: function(ev) {\n\t\tif (this.isDragging) {\n\t\t\tthis.isDragging = false;\n\t\t\tthis.handleDragEnd(ev);\n\t\t}\n\t},\n\n\n\thandleDragEnd: function(ev) {\n\t\tthis.trigger('dragEnd', ev);\n\t},\n\n\n\t// Delay\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tstartDelay: function(initialEv) {\n\t\tvar _this = this;\n\n\t\tif (this.delay) {\n\t\t\tthis.delayTimeoutId = setTimeout(function() {\n\t\t\t\t_this.handleDelayEnd(initialEv);\n\t\t\t}, this.delay);\n\t\t}\n\t\telse {\n\t\t\tthis.handleDelayEnd(initialEv);\n\t\t}\n\t},\n\n\n\thandleDelayEnd: function(initialEv) {\n\t\tthis.isDelayEnded = true;\n\n\t\tif (this.isDistanceSurpassed) {\n\t\t\tthis.startDrag(initialEv);\n\t\t}\n\t},\n\n\n\t// Distance\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\thandleDistanceSurpassed: function(ev) {\n\t\tthis.isDistanceSurpassed = true;\n\n\t\tif (this.isDelayEnded) {\n\t\t\tthis.startDrag(ev);\n\t\t}\n\t},\n\n\n\t// Mouse / Touch\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\thandleTouchMove: function(ev) {\n\n\t\t// prevent inertia and touchmove-scrolling while dragging\n\t\tif (this.isDragging && this.shouldCancelTouchScroll) {\n\t\t\tev.preventDefault();\n\t\t}\n\n\t\tthis.handleMove(ev);\n\t},\n\n\n\thandleMouseMove: function(ev) {\n\t\tthis.handleMove(ev);\n\t},\n\n\n\t// Scrolling (unrelated to auto-scroll)\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\thandleTouchScroll: function(ev) {\n\t\t// if the drag is being initiated by touch, but a scroll happens before\n\t\t// the drag-initiating delay is over, cancel the drag\n\t\tif (!this.isDragging || this.scrollAlwaysKills) {\n\t\t\tthis.endInteraction(ev, true); // isCancelled=true\n\t\t}\n\t},\n\n\n\t// Utils\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Triggers a callback. Calls a function in the option hash of the same name.\n\t// Arguments beyond the first `name` are forwarded on.\n\ttrigger: function(name) {\n\t\tif (this.options[name]) {\n\t\t\tthis.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t\t// makes _methods callable by event name. TODO: kill this\n\t\tif (this['_' + name]) {\n\t\t\tthis['_' + name].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t}\n\n\n});\n\n;;\n/*\nthis.scrollEl is set in DragListener\n*/\nDragListener.mixin({\n\n\tisAutoScroll: false,\n\n\tscrollBounds: null, // { top, bottom, left, right }\n\tscrollTopVel: null, // pixels per second\n\tscrollLeftVel: null, // pixels per second\n\tscrollIntervalId: null, // ID of setTimeout for scrolling animation loop\n\n\t// defaults\n\tscrollSensitivity: 30, // pixels from edge for scrolling to start\n\tscrollSpeed: 200, // pixels per second, at maximum speed\n\tscrollIntervalMs: 50, // millisecond wait between scroll increment\n\n\n\tinitAutoScroll: function() {\n\t\tvar scrollEl = this.scrollEl;\n\n\t\tthis.isAutoScroll =\n\t\t\tthis.options.scroll &&\n\t\t\tscrollEl &&\n\t\t\t!scrollEl.is(window) &&\n\t\t\t!scrollEl.is(document);\n\n\t\tif (this.isAutoScroll) {\n\t\t\t// debounce makes sure rapid calls don't happen\n\t\t\tthis.listenTo(scrollEl, 'scroll', debounce(this.handleDebouncedScroll, 100));\n\t\t}\n\t},\n\n\n\tdestroyAutoScroll: function() {\n\t\tthis.endAutoScroll(); // kill any animation loop\n\n\t\t// remove the scroll handler if there is a scrollEl\n\t\tif (this.isAutoScroll) {\n\t\t\tthis.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\n\t\t}\n\t},\n\n\n\t// Computes and stores the bounding rectangle of scrollEl\n\tcomputeScrollBounds: function() {\n\t\tif (this.isAutoScroll) {\n\t\t\tthis.scrollBounds = getOuterRect(this.scrollEl);\n\t\t\t// TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\n\t\t}\n\t},\n\n\n\t// Called when the dragging is in progress and scrolling should be updated\n\tupdateAutoScroll: function(ev) {\n\t\tvar sensitivity = this.scrollSensitivity;\n\t\tvar bounds = this.scrollBounds;\n\t\tvar topCloseness, bottomCloseness;\n\t\tvar leftCloseness, rightCloseness;\n\t\tvar topVel = 0;\n\t\tvar leftVel = 0;\n\n\t\tif (bounds) { // only scroll if scrollEl exists\n\n\t\t\t// compute closeness to edges. valid range is from 0.0 - 1.0\n\t\t\ttopCloseness = (sensitivity - (getEvY(ev) - bounds.top)) / sensitivity;\n\t\t\tbottomCloseness = (sensitivity - (bounds.bottom - getEvY(ev))) / sensitivity;\n\t\t\tleftCloseness = (sensitivity - (getEvX(ev) - bounds.left)) / sensitivity;\n\t\t\trightCloseness = (sensitivity - (bounds.right - getEvX(ev))) / sensitivity;\n\n\t\t\t// translate vertical closeness into velocity.\n\t\t\t// mouse must be completely in bounds for velocity to happen.\n\t\t\tif (topCloseness >= 0 && topCloseness <= 1) {\n\t\t\t\ttopVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\n\t\t\t}\n\t\t\telse if (bottomCloseness >= 0 && bottomCloseness <= 1) {\n\t\t\t\ttopVel = bottomCloseness * this.scrollSpeed;\n\t\t\t}\n\n\t\t\t// translate horizontal closeness into velocity\n\t\t\tif (leftCloseness >= 0 && leftCloseness <= 1) {\n\t\t\t\tleftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\n\t\t\t}\n\t\t\telse if (rightCloseness >= 0 && rightCloseness <= 1) {\n\t\t\t\tleftVel = rightCloseness * this.scrollSpeed;\n\t\t\t}\n\t\t}\n\n\t\tthis.setScrollVel(topVel, leftVel);\n\t},\n\n\n\t// Sets the speed-of-scrolling for the scrollEl\n\tsetScrollVel: function(topVel, leftVel) {\n\n\t\tthis.scrollTopVel = topVel;\n\t\tthis.scrollLeftVel = leftVel;\n\n\t\tthis.constrainScrollVel(); // massages into realistic values\n\n\t\t// if there is non-zero velocity, and an animation loop hasn't already started, then START\n\t\tif ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\n\t\t\tthis.scrollIntervalId = setInterval(\n\t\t\t\tproxy(this, 'scrollIntervalFunc'), // scope to `this`\n\t\t\t\tthis.scrollIntervalMs\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\n\tconstrainScrollVel: function() {\n\t\tvar el = this.scrollEl;\n\n\t\tif (this.scrollTopVel < 0) { // scrolling up?\n\t\t\tif (el.scrollTop() <= 0) { // already scrolled all the way up?\n\t\t\t\tthis.scrollTopVel = 0;\n\t\t\t}\n\t\t}\n\t\telse if (this.scrollTopVel > 0) { // scrolling down?\n\t\t\tif (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\n\t\t\t\tthis.scrollTopVel = 0;\n\t\t\t}\n\t\t}\n\n\t\tif (this.scrollLeftVel < 0) { // scrolling left?\n\t\t\tif (el.scrollLeft() <= 0) { // already scrolled all the left?\n\t\t\t\tthis.scrollLeftVel = 0;\n\t\t\t}\n\t\t}\n\t\telse if (this.scrollLeftVel > 0) { // scrolling right?\n\t\t\tif (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\n\t\t\t\tthis.scrollLeftVel = 0;\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// This function gets called during every iteration of the scrolling animation loop\n\tscrollIntervalFunc: function() {\n\t\tvar el = this.scrollEl;\n\t\tvar frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\n\n\t\t// change the value of scrollEl's scroll\n\t\tif (this.scrollTopVel) {\n\t\t\tel.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\n\t\t}\n\t\tif (this.scrollLeftVel) {\n\t\t\tel.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\n\t\t}\n\n\t\tthis.constrainScrollVel(); // since the scroll values changed, recompute the velocities\n\n\t\t// if scrolled all the way, which causes the vels to be zero, stop the animation loop\n\t\tif (!this.scrollTopVel && !this.scrollLeftVel) {\n\t\t\tthis.endAutoScroll();\n\t\t}\n\t},\n\n\n\t// Kills any existing scrolling animation loop\n\tendAutoScroll: function() {\n\t\tif (this.scrollIntervalId) {\n\t\t\tclearInterval(this.scrollIntervalId);\n\t\t\tthis.scrollIntervalId = null;\n\n\t\t\tthis.handleScrollEnd();\n\t\t}\n\t},\n\n\n\t// Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\n\thandleDebouncedScroll: function() {\n\t\t// recompute all coordinates, but *only* if this is *not* part of our scrolling animation\n\t\tif (!this.scrollIntervalId) {\n\t\t\tthis.handleScrollEnd();\n\t\t}\n\t},\n\n\n\t// Called when scrolling has stopped, whether through auto scroll, or the user scrolling\n\thandleScrollEnd: function() {\n\t}\n\n});\n;;\n\n/* Tracks mouse movements over a component and raises events about which hit the mouse is over.\n------------------------------------------------------------------------------------------------------------------------\noptions:\n- subjectEl\n- subjectCenter\n*/\n\nvar HitDragListener = DragListener.extend({\n\n\tcomponent: null, // converts coordinates to hits\n\t\t// methods: hitsNeeded, hitsNotNeeded, queryHit\n\n\torigHit: null, // the hit the mouse was over when listening started\n\thit: null, // the hit the mouse is over\n\tcoordAdjust: null, // delta that will be added to the mouse coordinates when computing collisions\n\n\n\tconstructor: function(component, options) {\n\t\tDragListener.call(this, options); // call the super-constructor\n\n\t\tthis.component = component;\n\t},\n\n\n\t// Called when drag listening starts (but a real drag has not necessarily began).\n\t// ev might be undefined if dragging was started manually.\n\thandleInteractionStart: function(ev) {\n\t\tvar subjectEl = this.subjectEl;\n\t\tvar subjectRect;\n\t\tvar origPoint;\n\t\tvar point;\n\n\t\tthis.component.hitsNeeded();\n\t\tthis.computeScrollBounds(); // for autoscroll\n\n\t\tif (ev) {\n\t\t\torigPoint = { left: getEvX(ev), top: getEvY(ev) };\n\t\t\tpoint = origPoint;\n\n\t\t\t// constrain the point to bounds of the element being dragged\n\t\t\tif (subjectEl) {\n\t\t\t\tsubjectRect = getOuterRect(subjectEl); // used for centering as well\n\t\t\t\tpoint = constrainPoint(point, subjectRect);\n\t\t\t}\n\n\t\t\tthis.origHit = this.queryHit(point.left, point.top);\n\n\t\t\t// treat the center of the subject as the collision point?\n\t\t\tif (subjectEl && this.options.subjectCenter) {\n\n\t\t\t\t// only consider the area the subject overlaps the hit. best for large subjects.\n\t\t\t\t// TODO: skip this if hit didn't supply left/right/top/bottom\n\t\t\t\tif (this.origHit) {\n\t\t\t\t\tsubjectRect = intersectRects(this.origHit, subjectRect) ||\n\t\t\t\t\t\tsubjectRect; // in case there is no intersection\n\t\t\t\t}\n\n\t\t\t\tpoint = getRectCenter(subjectRect);\n\t\t\t}\n\n\t\t\tthis.coordAdjust = diffPoints(point, origPoint); // point - origPoint\n\t\t}\n\t\telse {\n\t\t\tthis.origHit = null;\n\t\t\tthis.coordAdjust = null;\n\t\t}\n\n\t\t// call the super-method. do it after origHit has been computed\n\t\tDragListener.prototype.handleInteractionStart.apply(this, arguments);\n\t},\n\n\n\t// Called when the actual drag has started\n\thandleDragStart: function(ev) {\n\t\tvar hit;\n\n\t\tDragListener.prototype.handleDragStart.apply(this, arguments); // call the super-method\n\n\t\t// might be different from this.origHit if the min-distance is large\n\t\thit = this.queryHit(getEvX(ev), getEvY(ev));\n\n\t\t// report the initial hit the mouse is over\n\t\t// especially important if no min-distance and drag starts immediately\n\t\tif (hit) {\n\t\t\tthis.handleHitOver(hit);\n\t\t}\n\t},\n\n\n\t// Called when the drag moves\n\thandleDrag: function(dx, dy, ev) {\n\t\tvar hit;\n\n\t\tDragListener.prototype.handleDrag.apply(this, arguments); // call the super-method\n\n\t\thit = this.queryHit(getEvX(ev), getEvY(ev));\n\n\t\tif (!isHitsEqual(hit, this.hit)) { // a different hit than before?\n\t\t\tif (this.hit) {\n\t\t\t\tthis.handleHitOut();\n\t\t\t}\n\t\t\tif (hit) {\n\t\t\t\tthis.handleHitOver(hit);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Called when dragging has been stopped\n\thandleDragEnd: function() {\n\t\tthis.handleHitDone();\n\t\tDragListener.prototype.handleDragEnd.apply(this, arguments); // call the super-method\n\t},\n\n\n\t// Called when a the mouse has just moved over a new hit\n\thandleHitOver: function(hit) {\n\t\tvar isOrig = isHitsEqual(hit, this.origHit);\n\n\t\tthis.hit = hit;\n\n\t\tthis.trigger('hitOver', this.hit, isOrig, this.origHit);\n\t},\n\n\n\t// Called when the mouse has just moved out of a hit\n\thandleHitOut: function() {\n\t\tif (this.hit) {\n\t\t\tthis.trigger('hitOut', this.hit);\n\t\t\tthis.handleHitDone();\n\t\t\tthis.hit = null;\n\t\t}\n\t},\n\n\n\t// Called after a hitOut. Also called before a dragStop\n\thandleHitDone: function() {\n\t\tif (this.hit) {\n\t\t\tthis.trigger('hitDone', this.hit);\n\t\t}\n\t},\n\n\n\t// Called when the interaction ends, whether there was a real drag or not\n\thandleInteractionEnd: function() {\n\t\tDragListener.prototype.handleInteractionEnd.apply(this, arguments); // call the super-method\n\n\t\tthis.origHit = null;\n\t\tthis.hit = null;\n\n\t\tthis.component.hitsNotNeeded();\n\t},\n\n\n\t// Called when scrolling has stopped, whether through auto scroll, or the user scrolling\n\thandleScrollEnd: function() {\n\t\tDragListener.prototype.handleScrollEnd.apply(this, arguments); // call the super-method\n\n\t\t// hits' absolute positions will be in new places after a user's scroll.\n\t\t// HACK for recomputing.\n\t\tif (this.isDragging) {\n\t\t\tthis.component.releaseHits();\n\t\t\tthis.component.prepareHits();\n\t\t}\n\t},\n\n\n\t// Gets the hit underneath the coordinates for the given mouse event\n\tqueryHit: function(left, top) {\n\n\t\tif (this.coordAdjust) {\n\t\t\tleft += this.coordAdjust.left;\n\t\t\ttop += this.coordAdjust.top;\n\t\t}\n\n\t\treturn this.component.queryHit(left, top);\n\t}\n\n});\n\n\n// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\n// Two null values will be considered equal, as two \""out of the component\"" states are the same.\nfunction isHitsEqual(hit0, hit1) {\n\n\tif (!hit0 && !hit1) {\n\t\treturn true;\n\t}\n\n\tif (hit0 && hit1) {\n\t\treturn hit0.component === hit1.component &&\n\t\t\tisHitPropsWithin(hit0, hit1) &&\n\t\t\tisHitPropsWithin(hit1, hit0); // ensures all props are identical\n\t}\n\n\treturn false;\n}\n\n\n// Returns true if all of subHit's non-standard properties are within superHit\nfunction isHitPropsWithin(subHit, superHit) {\n\tfor (var propName in subHit) {\n\t\tif (!/^(component|left|right|top|bottom)$/.test(propName)) {\n\t\t\tif (subHit[propName] !== superHit[propName]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\n;;\n\n/*\nListens to document and window-level user-interaction events, like touch events and mouse events,\nand fires these events as-is to whoever is observing a GlobalEmitter.\nBest when used as a singleton via GlobalEmitter.get()\n\nNormalizes mouse/touch events. For examples:\n- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\n- compensates for various buggy scenarios where a touchend does not fire\n*/\n\nFC.touchMouseIgnoreWait = 500;\n\nvar GlobalEmitter = Class.extend(ListenerMixin, EmitterMixin, {\n\n\tisTouching: false,\n\tmouseIgnoreDepth: 0,\n\thandleScrollProxy: null,\n\n\n\tbind: function() {\n\t\tvar _this = this;\n\n\t\tthis.listenTo($(document), {\n\t\t\ttouchstart: this.handleTouchStart,\n\t\t\ttouchcancel: this.handleTouchCancel,\n\t\t\ttouchend: this.handleTouchEnd,\n\t\t\tmousedown: this.handleMouseDown,\n\t\t\tmousemove: this.handleMouseMove,\n\t\t\tmouseup: this.handleMouseUp,\n\t\t\tclick: this.handleClick,\n\t\t\tselectstart: this.handleSelectStart,\n\t\t\tcontextmenu: this.handleContextMenu\n\t\t});\n\n\t\t// because we need to call preventDefault\n\t\t// because https://www.chromestatus.com/features/5093566007214080\n\t\t// TODO: investigate performance because this is a global handler\n\t\twindow.addEventListener(\n\t\t\t'touchmove',\n\t\t\tthis.handleTouchMoveProxy = function(ev) {\n\t\t\t\t_this.handleTouchMove($.Event(ev));\n\t\t\t},\n\t\t\t{ passive: false } // allows preventDefault()\n\t\t);\n\n\t\t// attach a handler to get called when ANY scroll action happens on the page.\n\t\t// this was impossible to do with normal on/off because 'scroll' doesn't bubble.\n\t\t// http://stackoverflow.com/a/32954565/96342\n\t\twindow.addEventListener(\n\t\t\t'scroll',\n\t\t\tthis.handleScrollProxy = function(ev) {\n\t\t\t\t_this.handleScroll($.Event(ev));\n\t\t\t},\n\t\t\ttrue // useCapture\n\t\t);\n\t},\n\n\tunbind: function() {\n\t\tthis.stopListeningTo($(document));\n\n\t\twindow.removeEventListener(\n\t\t\t'touchmove',\n\t\t\tthis.handleTouchMoveProxy\n\t\t);\n\n\t\twindow.removeEventListener(\n\t\t\t'scroll',\n\t\t\tthis.handleScrollProxy,\n\t\t\ttrue // useCapture\n\t\t);\n\t},\n\n\n\t// Touch Handlers\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\thandleTouchStart: function(ev) {\n\n\t\t// if a previous touch interaction never ended with a touchend, then implicitly end it,\n\t\t// but since a new touch interaction is about to begin, don't start the mouse ignore period.\n\t\tthis.stopTouch(ev, true); // skipMouseIgnore=true\n\n\t\tthis.isTouching = true;\n\t\tthis.trigger('touchstart', ev);\n\t},\n\n\thandleTouchMove: function(ev) {\n\t\tif (this.isTouching) {\n\t\t\tthis.trigger('touchmove', ev);\n\t\t}\n\t},\n\n\thandleTouchCancel: function(ev) {\n\t\tif (this.isTouching) {\n\t\t\tthis.trigger('touchcancel', ev);\n\n\t\t\t// Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\n\t\t\t// If touchend fires later, it won't have any effect b/c isTouching will be false.\n\t\t\tthis.stopTouch(ev);\n\t\t}\n\t},\n\n\thandleTouchEnd: function(ev) {\n\t\tthis.stopTouch(ev);\n\t},\n\n\n\t// Mouse Handlers\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\thandleMouseDown: function(ev) {\n\t\tif (!this.shouldIgnoreMouse()) {\n\t\t\tthis.trigger('mousedown', ev);\n\t\t}\n\t},\n\n\thandleMouseMove: function(ev) {\n\t\tif (!this.shouldIgnoreMouse()) {\n\t\t\tthis.trigger('mousemove', ev);\n\t\t}\n\t},\n\n\thandleMouseUp: function(ev) {\n\t\tif (!this.shouldIgnoreMouse()) {\n\t\t\tthis.trigger('mouseup', ev);\n\t\t}\n\t},\n\n\thandleClick: function(ev) {\n\t\tif (!this.shouldIgnoreMouse()) {\n\t\t\tthis.trigger('click', ev);\n\t\t}\n\t},\n\n\n\t// Misc Handlers\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\thandleSelectStart: function(ev) {\n\t\tthis.trigger('selectstart', ev);\n\t},\n\n\thandleContextMenu: function(ev) {\n\t\tthis.trigger('contextmenu', ev);\n\t},\n\n\thandleScroll: function(ev) {\n\t\tthis.trigger('scroll', ev);\n\t},\n\n\n\t// Utils\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\tstopTouch: function(ev, skipMouseIgnore) {\n\t\tif (this.isTouching) {\n\t\t\tthis.isTouching = false;\n\t\t\tthis.trigger('touchend', ev);\n\n\t\t\tif (!skipMouseIgnore) {\n\t\t\t\tthis.startTouchMouseIgnore();\n\t\t\t}\n\t\t}\n\t},\n\n\tstartTouchMouseIgnore: function() {\n\t\tvar _this = this;\n\t\tvar wait = FC.touchMouseIgnoreWait;\n\n\t\tif (wait) {\n\t\t\tthis.mouseIgnoreDepth++;\n\t\t\tsetTimeout(function() {\n\t\t\t\t_this.mouseIgnoreDepth--;\n\t\t\t}, wait);\n\t\t}\n\t},\n\n\tshouldIgnoreMouse: function() {\n\t\treturn this.isTouching || Boolean(this.mouseIgnoreDepth);\n\t}\n\n});\n\n\n// Singleton\n// ---------------------------------------------------------------------------------------------------------------------\n\n(function() {\n\tvar globalEmitter = null;\n\tvar neededCount = 0;\n\n\n\t// gets the singleton\n\tGlobalEmitter.get = function() {\n\n\t\tif (!globalEmitter) {\n\t\t\tglobalEmitter = new GlobalEmitter();\n\t\t\tglobalEmitter.bind();\n\t\t}\n\n\t\treturn globalEmitter;\n\t};\n\n\n\t// called when an object knows it will need a GlobalEmitter in the near future.\n\tGlobalEmitter.needed = function() {\n\t\tGlobalEmitter.get(); // ensures globalEmitter\n\t\tneededCount++;\n\t};\n\n\n\t// called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\n\tGlobalEmitter.unneeded = function() {\n\t\tneededCount--;\n\n\t\tif (!neededCount) { // nobody else needs it\n\t\t\tglobalEmitter.unbind();\n\t\t\tglobalEmitter = null;\n\t\t}\n\t};\n\n})();\n\n;;\n\n/* Creates a clone of an element and lets it track the mouse as it moves\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar MouseFollower = Class.extend(ListenerMixin, {\n\n\toptions: null,\n\n\tsourceEl: null, // the element that will be cloned and made to look like it is dragging\n\tel: null, // the clone of `sourceEl` that will track the mouse\n\tparentEl: null, // the element that `el` (the clone) will be attached to\n\n\t// the initial position of el, relative to the offset parent. made to match the initial offset of sourceEl\n\ttop0: null,\n\tleft0: null,\n\n\t// the absolute coordinates of the initiating touch/mouse action\n\ty0: null,\n\tx0: null,\n\n\t// the number of pixels the mouse has moved from its initial position\n\ttopDelta: null,\n\tleftDelta: null,\n\n\tisFollowing: false,\n\tisHidden: false,\n\tisAnimating: false, // doing the revert animation?\n\n\tconstructor: function(sourceEl, options) {\n\t\tthis.options = options = options || {};\n\t\tthis.sourceEl = sourceEl;\n\t\tthis.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\n\t},\n\n\n\t// Causes the element to start following the mouse\n\tstart: function(ev) {\n\t\tif (!this.isFollowing) {\n\t\t\tthis.isFollowing = true;\n\n\t\t\tthis.y0 = getEvY(ev);\n\t\t\tthis.x0 = getEvX(ev);\n\t\t\tthis.topDelta = 0;\n\t\t\tthis.leftDelta = 0;\n\n\t\t\tif (!this.isHidden) {\n\t\t\t\tthis.updatePosition();\n\t\t\t}\n\n\t\t\tif (getEvIsTouch(ev)) {\n\t\t\t\tthis.listenTo($(document), 'touchmove', this.handleMove);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.listenTo($(document), 'mousemove', this.handleMove);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\n\t// `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\n\tstop: function(shouldRevert, callback) {\n\t\tvar _this = this;\n\t\tvar revertDuration = this.options.revertDuration;\n\n\t\tfunction complete() { // might be called by .animate(), which might change `this` context\n\t\t\t_this.isAnimating = false;\n\t\t\t_this.removeElement();\n\n\t\t\t_this.top0 = _this.left0 = null; // reset state for future updatePosition calls\n\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\n\t\tif (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\n\t\t\tthis.isFollowing = false;\n\n\t\t\tthis.stopListeningTo($(document));\n\n\t\t\tif (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\n\t\t\t\tthis.isAnimating = true;\n\t\t\t\tthis.el.animate({\n\t\t\t\t\ttop: this.top0,\n\t\t\t\t\tleft: this.left0\n\t\t\t\t}, {\n\t\t\t\t\tduration: revertDuration,\n\t\t\t\t\tcomplete: complete\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Gets the tracking element. Create it if necessary\n\tgetEl: function() {\n\t\tvar el = this.el;\n\n\t\tif (!el) {\n\t\t\tel = this.el = this.sourceEl.clone()\n\t\t\t\t.addClass(this.options.additionalClass || '')\n\t\t\t\t.css({\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tvisibility: '', // in case original element was hidden (commonly through hideEvents())\n\t\t\t\t\tdisplay: this.isHidden ? 'none' : '', // for when initially hidden\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tright: 'auto', // erase and set width instead\n\t\t\t\t\tbottom: 'auto', // erase and set height instead\n\t\t\t\t\twidth: this.sourceEl.width(), // explicit height in case there was a 'right' value\n\t\t\t\t\theight: this.sourceEl.height(), // explicit width in case there was a 'bottom' value\n\t\t\t\t\topacity: this.options.opacity || '',\n\t\t\t\t\tzIndex: this.options.zIndex\n\t\t\t\t});\n\n\t\t\t// we don't want long taps or any mouse interaction causing selection/menus.\n\t\t\t// would use preventSelection(), but that prevents selectstart, causing problems.\n\t\t\tel.addClass('fc-unselectable');\n\n\t\t\tel.appendTo(this.parentEl);\n\t\t}\n\n\t\treturn el;\n\t},\n\n\n\t// Removes the tracking element if it has already been created\n\tremoveElement: function() {\n\t\tif (this.el) {\n\t\t\tthis.el.remove();\n\t\t\tthis.el = null;\n\t\t}\n\t},\n\n\n\t// Update the CSS position of the tracking element\n\tupdatePosition: function() {\n\t\tvar sourceOffset;\n\t\tvar origin;\n\n\t\tthis.getEl(); // ensure this.el\n\n\t\t// make sure origin info was computed\n\t\tif (this.top0 === null) {\n\t\t\tsourceOffset = this.sourceEl.offset();\n\t\t\torigin = this.el.offsetParent().offset();\n\t\t\tthis.top0 = sourceOffset.top - origin.top;\n\t\t\tthis.left0 = sourceOffset.left - origin.left;\n\t\t}\n\n\t\tthis.el.css({\n\t\t\ttop: this.top0 + this.topDelta,\n\t\t\tleft: this.left0 + this.leftDelta\n\t\t});\n\t},\n\n\n\t// Gets called when the user moves the mouse\n\thandleMove: function(ev) {\n\t\tthis.topDelta = getEvY(ev) - this.y0;\n\t\tthis.leftDelta = getEvX(ev) - this.x0;\n\n\t\tif (!this.isHidden) {\n\t\t\tthis.updatePosition();\n\t\t}\n\t},\n\n\n\t// Temporarily makes the tracking element invisible. Can be called before following starts\n\thide: function() {\n\t\tif (!this.isHidden) {\n\t\t\tthis.isHidden = true;\n\t\t\tif (this.el) {\n\t\t\t\tthis.el.hide();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Show the tracking element after it has been temporarily hidden\n\tshow: function() {\n\t\tif (this.isHidden) {\n\t\t\tthis.isHidden = false;\n\t\t\tthis.updatePosition();\n\t\t\tthis.getEl().show();\n\t\t}\n\t}\n\n});\n\n;;\n\n/* An abstract class comprised of a \""grid\"" of areas that each represent a specific datetime\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar Grid = FC.Grid = Class.extend(ListenerMixin, {\n\n\t// self-config, overridable by subclasses\n\thasDayInteractions: true, // can user click/select ranges of time?\n\n\tview: null, // a View object\n\tisRTL: null, // shortcut to the view's isRTL option\n\n\tstart: null,\n\tend: null,\n\n\tel: null, // the containing element\n\telsByFill: null, // a hash of jQuery element sets used for rendering each fill. Keyed by fill name.\n\n\t// derived from options\n\teventTimeFormat: null,\n\tdisplayEventTime: null,\n\tdisplayEventEnd: null,\n\n\tminResizeDuration: null, // TODO: hack. set by subclasses. minumum event resize duration\n\n\t// if defined, holds the unit identified (ex: \""year\"" or \""month\"") that determines the level of granularity\n\t// of the date areas. if not defined, assumes to be day and time granularity.\n\t// TODO: port isTimeScale into same system?\n\tlargeUnit: null,\n\n\tdayClickListener: null,\n\tdaySelectListener: null,\n\tsegDragListener: null,\n\tsegResizeListener: null,\n\texternalDragListener: null,\n\n\n\tconstructor: function(view) {\n\t\tthis.view = view;\n\t\tthis.isRTL = view.opt('isRTL');\n\t\tthis.elsByFill = {};\n\n\t\tthis.dayClickListener = this.buildDayClickListener();\n\t\tthis.daySelectListener = this.buildDaySelectListener();\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Generates the format string used for event time text, if not explicitly defined by 'timeFormat'\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.view.opt('smallTimeFormat');\n\t},\n\n\n\t// Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventTime'.\n\t// Only applies to non-all-day events.\n\tcomputeDisplayEventTime: function() {\n\t\treturn true;\n\t},\n\n\n\t// Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventEnd'\n\tcomputeDisplayEventEnd: function() {\n\t\treturn true;\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Tells the grid about what period of time to display.\n\t// Any date-related internal data should be generated.\n\tsetRange: function(range) {\n\t\tthis.start = range.start.clone();\n\t\tthis.end = range.end.clone();\n\n\t\tthis.rangeUpdated();\n\t\tthis.processRangeOptions();\n\t},\n\n\n\t// Called when internal variables that rely on the range should be updated\n\trangeUpdated: function() {\n\t},\n\n\n\t// Updates values that rely on options and also relate to range\n\tprocessRangeOptions: function() {\n\t\tvar view = this.view;\n\t\tvar displayEventTime;\n\t\tvar displayEventEnd;\n\n\t\tthis.eventTimeFormat =\n\t\t\tview.opt('eventTimeFormat') ||\n\t\t\tview.opt('timeFormat') || // deprecated\n\t\t\tthis.computeEventTimeFormat();\n\n\t\tdisplayEventTime = view.opt('displayEventTime');\n\t\tif (displayEventTime == null) {\n\t\t\tdisplayEventTime = this.computeDisplayEventTime(); // might be based off of range\n\t\t}\n\n\t\tdisplayEventEnd = view.opt('displayEventEnd');\n\t\tif (displayEventEnd == null) {\n\t\t\tdisplayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\n\t\t}\n\n\t\tthis.displayEventTime = displayEventTime;\n\t\tthis.displayEventEnd = displayEventEnd;\n\t},\n\n\n\t// Converts a span (has unzoned start/end and any other grid-specific location information)\n\t// into an array of segments (pieces of events whose format is decided by the grid).\n\tspanToSegs: function(span) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Diffs the two dates, returning a duration, based on granularity of the grid\n\t// TODO: port isTimeScale into this system?\n\tdiffDates: function(a, b) {\n\t\tif (this.largeUnit) {\n\t\t\treturn diffByUnit(a, b, this.largeUnit);\n\t\t}\n\t\telse {\n\t\t\treturn diffDayTime(a, b);\n\t\t}\n\t},\n\n\n\t/* Hit Area\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\thitsNeededDepth: 0, // necessary because multiple callers might need the same hits\n\n\thitsNeeded: function() {\n\t\tif (!(this.hitsNeededDepth++)) {\n\t\t\tthis.prepareHits();\n\t\t}\n\t},\n\n\thitsNotNeeded: function() {\n\t\tif (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {\n\t\t\tthis.releaseHits();\n\t\t}\n\t},\n\n\n\t// Called before one or more queryHit calls might happen. Should prepare any cached coordinates for queryHit\n\tprepareHits: function() {\n\t},\n\n\n\t// Called when queryHit calls have subsided. Good place to clear any coordinate caches.\n\treleaseHits: function() {\n\t},\n\n\n\t// Given coordinates from the topleft of the document, return data about the date-related area underneath.\n\t// Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\n\t// Must have a `grid` property, a reference to this current grid. TODO: avoid this\n\t// The returned object will be processed by getHitSpan and getHitEl.\n\tqueryHit: function(leftOffset, topOffset) {\n\t},\n\n\n\t// like getHitSpan, but returns null if the resulting span's range is invalid\n\tgetSafeHitSpan: function(hit) {\n\t\tvar hitSpan = this.getHitSpan(hit);\n\n\t\tif (!isRangeWithinRange(hitSpan, this.view.activeRange)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn hitSpan;\n\t},\n\n\n\t// Given position-level information about a date-related area within the grid,\n\t// should return an object with at least a start/end date. Can provide other information as well.\n\tgetHitSpan: function(hit) {\n\t},\n\n\n\t// Given position-level information about a date-related area within the grid,\n\t// should return a jQuery element that best represents it. passed to dayClick callback.\n\tgetHitEl: function(hit) {\n\t},\n\n\n\t/* Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Sets the container element that the grid should render inside of.\n\t// Does other DOM-related initializations.\n\tsetElement: function(el) {\n\t\tthis.el = el;\n\n\t\tif (this.hasDayInteractions) {\n\t\t\tpreventSelection(el);\n\n\t\t\tthis.bindDayHandler('touchstart', this.dayTouchStart);\n\t\t\tthis.bindDayHandler('mousedown', this.dayMousedown);\n\t\t}\n\n\t\t// attach event-element-related handlers. in Grid.events\n\t\t// same garbage collection note as above.\n\t\tthis.bindSegHandlers();\n\n\t\tthis.bindGlobalHandlers();\n\t},\n\n\n\tbindDayHandler: function(name, handler) {\n\t\tvar _this = this;\n\n\t\t// attach a handler to the grid's root element.\n\t\t// jQuery will take care of unregistering them when removeElement gets called.\n\t\tthis.el.on(name, function(ev) {\n\t\t\tif (\n\t\t\t\t!$(ev.target).is(\n\t\t\t\t\t_this.segSelector + ',' + // directly on an event element\n\t\t\t\t\t_this.segSelector + ' *,' + // within an event element\n\t\t\t\t\t'.fc-more,' + // a \""more..\"" link\n\t\t\t\t\t'a[data-goto]' // a clickable nav link\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn handler.call(_this, ev);\n\t\t\t}\n\t\t});\n\t},\n\n\n\t// Removes the grid's container element from the DOM. Undoes any other DOM-related attachments.\n\t// DOES NOT remove any content beforehand (doesn't clear events or call unrenderDates), unlike View\n\tremoveElement: function() {\n\t\tthis.unbindGlobalHandlers();\n\t\tthis.clearDragListeners();\n\n\t\tthis.el.remove();\n\n\t\t// NOTE: we don't null-out this.el for the same reasons we don't do it within View::removeElement\n\t},\n\n\n\t// Renders the basic structure of grid view before any content is rendered\n\trenderSkeleton: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Renders the grid's date-related content (like areas that represent days/times).\n\t// Assumes setRange has already been called and the skeleton has already been rendered.\n\trenderDates: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Unrenders the grid's date-related content\n\tunrenderDates: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Handlers\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Binds DOM handlers to elements that reside outside the grid, such as the document\n\tbindGlobalHandlers: function() {\n\t\tthis.listenTo($(document), {\n\t\t\tdragstart: this.externalDragStart, // jqui\n\t\t\tsortstart: this.externalDragStart // jqui\n\t\t});\n\t},\n\n\n\t// Unbinds DOM handlers from elements that reside outside the grid\n\tunbindGlobalHandlers: function() {\n\t\tthis.stopListeningTo($(document));\n\t},\n\n\n\t// Process a mousedown on an element that represents a day. For day clicking and selecting.\n\tdayMousedown: function(ev) {\n\t\tvar view = this.view;\n\n\t\t// HACK\n\t\t// This will still work even though bindDayHandler doesn't use GlobalEmitter.\n\t\tif (GlobalEmitter.get().shouldIgnoreMouse()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.dayClickListener.startInteraction(ev);\n\n\t\tif (view.opt('selectable')) {\n\t\t\tthis.daySelectListener.startInteraction(ev, {\n\t\t\t\tdistance: view.opt('selectMinDistance')\n\t\t\t});\n\t\t}\n\t},\n\n\n\tdayTouchStart: function(ev) {\n\t\tvar view = this.view;\n\t\tvar selectLongPressDelay;\n\n\t\t// On iOS (and Android?) when a new selection is initiated overtop another selection,\n\t\t// the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\n\t\t// HACK: simply don't allow this to happen.\n\t\t// ALSO: prevent selection when an *event* is already raised.\n\t\tif (view.isSelected || view.selectedEvent) {\n\t\t\treturn;\n\t\t}\n\n\t\tselectLongPressDelay = view.opt('selectLongPressDelay');\n\t\tif (selectLongPressDelay == null) {\n\t\t\tselectLongPressDelay = view.opt('longPressDelay'); // fallback\n\t\t}\n\n\t\tthis.dayClickListener.startInteraction(ev);\n\n\t\tif (view.opt('selectable')) {\n\t\t\tthis.daySelectListener.startInteraction(ev, {\n\t\t\t\tdelay: selectLongPressDelay\n\t\t\t});\n\t\t}\n\t},\n\n\n\t// Creates a listener that tracks the user's drag across day elements, for day clicking.\n\tbuildDayClickListener: function() {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar dayClickHit; // null if invalid dayClick\n\n\t\tvar dragListener = new HitDragListener(this, {\n\t\t\tscroll: view.opt('dragScroll'),\n\t\t\tinteractionStart: function() {\n\t\t\t\tdayClickHit = dragListener.origHit;\n\t\t\t},\n\t\t\thitOver: function(hit, isOrig, origHit) {\n\t\t\t\t// if user dragged to another cell at any point, it can no longer be a dayClick\n\t\t\t\tif (!isOrig) {\n\t\t\t\t\tdayClickHit = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() { // called before mouse moves to a different hit OR moved out of all hits\n\t\t\t\tdayClickHit = null;\n\t\t\t},\n\t\t\tinteractionEnd: function(ev, isCancelled) {\n\t\t\t\tvar hitSpan;\n\n\t\t\t\tif (!isCancelled && dayClickHit) {\n\t\t\t\t\thitSpan = _this.getSafeHitSpan(dayClickHit);\n\n\t\t\t\t\tif (hitSpan) {\n\t\t\t\t\t\tview.triggerDayClick(hitSpan, _this.getHitEl(dayClickHit), ev);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// because dayClickListener won't be called with any time delay, \""dragging\"" will begin immediately,\n\t\t// which will kill any touchmoving/scrolling. Prevent this.\n\t\tdragListener.shouldCancelTouchScroll = false;\n\n\t\tdragListener.scrollAlwaysKills = true;\n\n\t\treturn dragListener;\n\t},\n\n\n\t// Creates a listener that tracks the user's drag across day elements, for day selecting.\n\tbuildDaySelectListener: function() {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar selectionSpan; // null if invalid selection\n\n\t\tvar dragListener = new HitDragListener(this, {\n\t\t\tscroll: view.opt('dragScroll'),\n\t\t\tinteractionStart: function() {\n\t\t\t\tselectionSpan = null;\n\t\t\t},\n\t\t\tdragStart: function() {\n\t\t\t\tview.unselect(); // since we could be rendering a new selection, we want to clear any old one\n\t\t\t},\n\t\t\thitOver: function(hit, isOrig, origHit) {\n\t\t\t\tvar origHitSpan;\n\t\t\t\tvar hitSpan;\n\n\t\t\t\tif (origHit) { // click needs to have started on a hit\n\n\t\t\t\t\torigHitSpan = _this.getSafeHitSpan(origHit);\n\t\t\t\t\thitSpan = _this.getSafeHitSpan(hit);\n\n\t\t\t\t\tif (origHitSpan && hitSpan) {\n\t\t\t\t\t\tselectionSpan = _this.computeSelection(origHitSpan, hitSpan);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tselectionSpan = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (selectionSpan) {\n\t\t\t\t\t\t_this.renderSelection(selectionSpan);\n\t\t\t\t\t}\n\t\t\t\t\telse if (selectionSpan === false) {\n\t\t\t\t\t\tdisableCursor();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() { // called before mouse moves to a different hit OR moved out of all hits\n\t\t\t\tselectionSpan = null;\n\t\t\t\t_this.unrenderSelection();\n\t\t\t},\n\t\t\thitDone: function() { // called after a hitOut OR before a dragEnd\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tinteractionEnd: function(ev, isCancelled) {\n\t\t\t\tif (!isCancelled && selectionSpan) {\n\t\t\t\t\t// the selection will already have been rendered. just report it\n\t\t\t\t\tview.reportSelection(selectionSpan, ev);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn dragListener;\n\t},\n\n\n\t// Kills all in-progress dragging.\n\t// Useful for when public API methods that result in re-rendering are invoked during a drag.\n\t// Also useful for when touch devices misbehave and don't fire their touchend.\n\tclearDragListeners: function() {\n\t\tthis.dayClickListener.endInteraction();\n\t\tthis.daySelectListener.endInteraction();\n\n\t\tif (this.segDragListener) {\n\t\t\tthis.segDragListener.endInteraction(); // will clear this.segDragListener\n\t\t}\n\t\tif (this.segResizeListener) {\n\t\t\tthis.segResizeListener.endInteraction(); // will clear this.segResizeListener\n\t\t}\n\t\tif (this.externalDragListener) {\n\t\t\tthis.externalDragListener.endInteraction(); // will clear this.externalDragListener\n\t\t}\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: should probably move this to Grid.events, like we did event dragging / resizing\n\n\n\t// Renders a mock event at the given event location, which contains zoned start/end properties.\n\t// Returns all mock event elements.\n\trenderEventLocationHelper: function(eventLocation, sourceSeg) {\n\t\tvar fakeEvent = this.fabricateHelperEvent(eventLocation, sourceSeg);\n\n\t\treturn this.renderHelper(fakeEvent, sourceSeg); // do the actual rendering\n\t},\n\n\n\t// Builds a fake event given zoned event date properties and a segment is should be inspired from.\n\t// The range's end can be null, in which case the mock event that is rendered will have a null end time.\n\t// `sourceSeg` is the internal segment object involved in the drag. If null, something external is dragging.\n\tfabricateHelperEvent: function(eventLocation, sourceSeg) {\n\t\tvar fakeEvent = sourceSeg ? createObject(sourceSeg.event) : {}; // mask the original event object if possible\n\n\t\tfakeEvent.start = eventLocation.start.clone();\n\t\tfakeEvent.end = eventLocation.end ? eventLocation.end.clone() : null;\n\t\tfakeEvent.allDay = null; // force it to be freshly computed by normalizeEventDates\n\t\tthis.view.calendar.normalizeEventDates(fakeEvent);\n\n\t\t// this extra className will be useful for differentiating real events from mock events in CSS\n\t\tfakeEvent.className = (fakeEvent.className || []).concat('fc-helper');\n\n\t\t// if something external is being dragged in, don't render a resizer\n\t\tif (!sourceSeg) {\n\t\t\tfakeEvent.editable = false;\n\t\t}\n\n\t\treturn fakeEvent;\n\t},\n\n\n\t// Renders a mock event. Given zoned event date properties.\n\t// Must return all mock event elements.\n\trenderHelper: function(eventLocation, sourceSeg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a mock event\n\tunrenderHelper: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection. Will highlight by default but can be overridden by subclasses.\n\t// Given a span (unzoned start/end and other misc data)\n\trenderSelection: function(span) {\n\t\tthis.renderHighlight(span);\n\t},\n\n\n\t// Unrenders any visual indications of a selection. Will unrender a highlight by default.\n\tunrenderSelection: function() {\n\t\tthis.unrenderHighlight();\n\t},\n\n\n\t// Given the first and last date-spans of a selection, returns another date-span object.\n\t// Subclasses can override and provide additional data in the span object. Will be passed to renderSelection().\n\t// Will return false if the selection is invalid and this should be indicated to the user.\n\t// Will return null/undefined if a selection invalid but no error should be reported.\n\tcomputeSelection: function(span0, span1) {\n\t\tvar span = this.computeSelectionSpan(span0, span1);\n\n\t\tif (span && !this.view.calendar.isSelectionSpanAllowed(span)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn span;\n\t},\n\n\n\t// Given two spans, must return the combination of the two.\n\t// TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\n\tcomputeSelectionSpan: function(span0, span1) {\n\t\tvar dates = [ span0.start, span0.end, span1.start, span1.end ];\n\n\t\tdates.sort(compareNumbers); // sorts chronologically. works with Moments\n\n\t\treturn { start: dates[0].clone(), end: dates[3].clone() };\n\t},\n\n\n\t/* Highlight\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\n\trenderHighlight: function(span) {\n\t\tthis.renderFill('highlight', this.spanToSegs(span));\n\t},\n\n\n\t// Unrenders the emphasis on a date range\n\tunrenderHighlight: function() {\n\t\tthis.unrenderFill('highlight');\n\t},\n\n\n\t// Generates an array of classNames for rendering the highlight. Used by the fill system.\n\thighlightSegClasses: function() {\n\t\treturn [ 'fc-highlight' ];\n\t},\n\n\n\t/* Business Hours\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBusinessHours: function() {\n\t},\n\n\n\tunrenderBusinessHours: function() {\n\t},\n\n\n\t/* Now Indicator\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tgetNowIndicatorUnit: function() {\n\t},\n\n\n\trenderNowIndicator: function(date) {\n\t},\n\n\n\tunrenderNowIndicator: function() {\n\t},\n\n\n\t/* Fill System (highlight, background events, business hours)\n\t--------------------------------------------------------------------------------------------------------------------\n\tTODO: remove this system. like we did in TimeGrid\n\t*/\n\n\n\t// Renders a set of rectangles over the given segments of time.\n\t// MUST RETURN a subset of segs, the segs that were actually rendered.\n\t// Responsible for populating this.elsByFill. TODO: better API for expressing this requirement\n\trenderFill: function(type, segs) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a specific type of fill that is currently rendered on the grid\n\tunrenderFill: function(type) {\n\t\tvar el = this.elsByFill[type];\n\n\t\tif (el) {\n\t\t\tel.remove();\n\t\t\tdelete this.elsByFill[type];\n\t\t}\n\t},\n\n\n\t// Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\n\t// Only returns segments that successfully rendered.\n\t// To be harnessed by renderFill (implemented by subclasses).\n\t// Analagous to renderFgSegEls.\n\trenderFillSegEls: function(type, segs) {\n\t\tvar _this = this;\n\t\tvar segElMethod = this[type + 'SegEl'];\n\t\tvar html = '';\n\t\tvar renderedSegs = [];\n\t\tvar i;\n\n\t\tif (segs.length) {\n\n\t\t\t// build a large concatenation of segment HTML\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\thtml += this.fillSegHtml(type, segs[i]);\n\t\t\t}\n\n\t\t\t// Grab individual elements from the combined HTML string. Use each as the default rendering.\n\t\t\t// Then, compute the 'el' for each segment.\n\t\t\t$(html).each(function(i, node) {\n\t\t\t\tvar seg = segs[i];\n\t\t\t\tvar el = $(node);\n\n\t\t\t\t// allow custom filter methods per-type\n\t\t\t\tif (segElMethod) {\n\t\t\t\t\tel = segElMethod.call(_this, seg, el);\n\t\t\t\t}\n\n\t\t\t\tif (el) { // custom filters did not cancel the render\n\t\t\t\t\tel = $(el); // allow custom filter to return raw DOM node\n\n\t\t\t\t\t// correct element type? (would be bad if a non-TD were inserted into a table for example)\n\t\t\t\t\tif (el.is(_this.fillSegTag)) {\n\t\t\t\t\t\tseg.el = el;\n\t\t\t\t\t\trenderedSegs.push(seg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn renderedSegs;\n\t},\n\n\n\tfillSegTag: 'div', // subclasses can override\n\n\n\t// Builds the HTML needed for one fill segment. Generic enough to work with different types.\n\tfillSegHtml: function(type, seg) {\n\n\t\t// custom hooks per-type\n\t\tvar classesMethod = this[type + 'SegClasses'];\n\t\tvar cssMethod = this[type + 'SegCss'];\n\n\t\tvar classes = classesMethod ? classesMethod.call(this, seg) : [];\n\t\tvar css = cssToStr(cssMethod ? cssMethod.call(this, seg) : {});\n\n\t\treturn '<' + this.fillSegTag +\n\t\t\t(classes.length ? ' class=\""' + classes.join(' ') + '\""' : '') +\n\t\t\t(css ? ' style=\""' + css + '\""' : '') +\n\t\t\t' />';\n\t},\n\n\n\n\t/* Generic rendering utilities for subclasses\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes HTML classNames for a single-day element\n\tgetDayClasses: function(date, noThemeHighlight) {\n\t\tvar view = this.view;\n\t\tvar classes = [];\n\t\tvar today;\n\n\t\tif (!isDateWithinRange(date, view.activeRange)) {\n\t\t\tclasses.push('fc-disabled-day'); // TODO: jQuery UI theme?\n\t\t}\n\t\telse {\n\t\t\tclasses.push('fc-' + dayIDs[date.day()]);\n\n\t\t\tif (\n\t\t\t\tview.currentRangeAs('months') == 1 && // TODO: somehow get into MonthView\n\t\t\t\tdate.month() != view.currentRange.start.month()\n\t\t\t) {\n\t\t\t\tclasses.push('fc-other-month');\n\t\t\t}\n\n\t\t\ttoday = view.calendar.getNow();\n\n\t\t\tif (date.isSame(today, 'day')) {\n\t\t\t\tclasses.push('fc-today');\n\n\t\t\t\tif (noThemeHighlight !== true) {\n\t\t\t\t\tclasses.push(view.highlightStateClass);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (date < today) {\n\t\t\t\tclasses.push('fc-past');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclasses.push('fc-future');\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n});\n\n;;\n\n/* Event-rendering and event-interaction methods for the abstract Grid class\n----------------------------------------------------------------------------------------------------------------------\n\nData Types:\n\tevent - { title, id, start, (end), whatever }\n\tlocation - { start, (end), allDay }\n\trawEventRange - { start, end }\n\teventRange - { start, end, isStart, isEnd }\n\teventSpan - { start, end, isStart, isEnd, whatever }\n\teventSeg - { event, whatever }\n\tseg - { whatever }\n*/\n\nGrid.mixin({\n\n\t// self-config, overridable by subclasses\n\tsegSelector: '.fc-event-container > *', // what constitutes an event element?\n\n\tmousedOverSeg: null, // the segment object the user's mouse is over. null if over nothing\n\tisDraggingSeg: false, // is a segment being dragged? boolean\n\tisResizingSeg: false, // is a segment being resized? boolean\n\tisDraggingExternal: false, // jqui-dragging an external element? boolean\n\tsegs: null, // the *event* segments currently rendered in the grid. TODO: rename to `eventSegs`\n\n\n\t// Renders the given events onto the grid\n\trenderEvents: function(events) {\n\t\tvar bgEvents = [];\n\t\tvar fgEvents = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < events.length; i++) {\n\t\t\t(isBgEvent(events[i]) ? bgEvents : fgEvents).push(events[i]);\n\t\t}\n\n\t\tthis.segs = [].concat( // record all segs\n\t\t\tthis.renderBgEvents(bgEvents),\n\t\t\tthis.renderFgEvents(fgEvents)\n\t\t);\n\t},\n\n\n\trenderBgEvents: function(events) {\n\t\tvar segs = this.eventsToSegs(events);\n\n\t\t// renderBgSegs might return a subset of segs, segs that were actually rendered\n\t\treturn this.renderBgSegs(segs) || segs;\n\t},\n\n\n\trenderFgEvents: function(events) {\n\t\tvar segs = this.eventsToSegs(events);\n\n\t\t// renderFgSegs might return a subset of segs, segs that were actually rendered\n\t\treturn this.renderFgSegs(segs) || segs;\n\t},\n\n\n\t// Unrenders all events currently rendered on the grid\n\tunrenderEvents: function() {\n\t\tthis.handleSegMouseout(); // trigger an eventMouseout if user's mouse is over an event\n\t\tthis.clearDragListeners();\n\n\t\tthis.unrenderFgSegs();\n\t\tthis.unrenderBgSegs();\n\n\t\tthis.segs = null;\n\t},\n\n\n\t// Retrieves all rendered segment objects currently rendered on the grid\n\tgetEventSegs: function() {\n\t\treturn this.segs || [];\n\t},\n\n\n\t/* Foreground Segment Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders foreground event segments onto the grid. May return a subset of segs that were rendered.\n\trenderFgSegs: function(segs) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders all currently rendered foreground segments\n\tunrenderFgSegs: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Renders and assigns an `el` property for each foreground event segment.\n\t// Only returns segments that successfully rendered.\n\t// A utility that subclasses may use.\n\trenderFgSegEls: function(segs, disableResizing) {\n\t\tvar view = this.view;\n\t\tvar html = '';\n\t\tvar renderedSegs = [];\n\t\tvar i;\n\n\t\tif (segs.length) { // don't build an empty html string\n\n\t\t\t// build a large concatenation of event segment HTML\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\thtml += this.fgSegHtml(segs[i], disableResizing);\n\t\t\t}\n\n\t\t\t// Grab individual elements from the combined HTML string. Use each as the default rendering.\n\t\t\t// Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\n\t\t\t$(html).each(function(i, node) {\n\t\t\t\tvar seg = segs[i];\n\t\t\t\tvar el = view.resolveEventEl(seg.event, $(node));\n\n\t\t\t\tif (el) {\n\t\t\t\t\tel.data('fc-seg', seg); // used by handlers\n\t\t\t\t\tseg.el = el;\n\t\t\t\t\trenderedSegs.push(seg);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn renderedSegs;\n\t},\n\n\n\t// Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\n\tfgSegHtml: function(seg, disableResizing) {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Background Segment Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders the given background event segments onto the grid.\n\t// Returns a subset of the segs that were actually rendered.\n\trenderBgSegs: function(segs) {\n\t\treturn this.renderFill('bgEvent', segs);\n\t},\n\n\n\t// Unrenders all the currently rendered background event segments\n\tunrenderBgSegs: function() {\n\t\tthis.unrenderFill('bgEvent');\n\t},\n\n\n\t// Renders a background event element, given the default rendering. Called by the fill system.\n\tbgEventSegEl: function(seg, el) {\n\t\treturn this.view.resolveEventEl(seg.event, el); // will filter through eventRender\n\t},\n\n\n\t// Generates an array of classNames to be used for the default rendering of a background event.\n\t// Called by fillSegHtml.\n\tbgEventSegClasses: function(seg) {\n\t\tvar event = seg.event;\n\t\tvar source = event.source || {};\n\n\t\treturn [ 'fc-bgevent' ].concat(\n\t\t\tevent.className,\n\t\t\tsource.className || []\n\t\t);\n\t},\n\n\n\t// Generates a semicolon-separated CSS string to be used for the default rendering of a background event.\n\t// Called by fillSegHtml.\n\tbgEventSegCss: function(seg) {\n\t\treturn {\n\t\t\t'background-color': this.getSegSkinCss(seg)['background-color']\n\t\t};\n\t},\n\n\n\t// Generates an array of classNames to be used for the rendering business hours overlay. Called by the fill system.\n\t// Called by fillSegHtml.\n\tbusinessHoursSegClasses: function(seg) {\n\t\treturn [ 'fc-nonbusiness', 'fc-bgevent' ];\n\t},\n\n\n\t/* Business Hours\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Compute business hour segs for the grid's current date range.\n\t// Caller must ask if whole-day business hours are needed.\n\t// If no `businessHours` configuration value is specified, assumes the calendar default.\n\tbuildBusinessHourSegs: function(wholeDay, businessHours) {\n\t\treturn this.eventsToSegs(\n\t\t\tthis.buildBusinessHourEvents(wholeDay, businessHours)\n\t\t);\n\t},\n\n\n\t// Compute business hour *events* for the grid's current date range.\n\t// Caller must ask if whole-day business hours are needed.\n\t// If no `businessHours` configuration value is specified, assumes the calendar default.\n\tbuildBusinessHourEvents: function(wholeDay, businessHours) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar events;\n\n\t\tif (businessHours == null) {\n\t\t\t// fallback\n\t\t\t// access from calendawr. don't access from view. doesn't update with dynamic options.\n\t\t\tbusinessHours = calendar.opt('businessHours');\n\t\t}\n\n\t\tevents = calendar.computeBusinessHourEvents(wholeDay, businessHours);\n\n\t\t// HACK. Eventually refactor business hours \""events\"" system.\n\t\t// If no events are given, but businessHours is activated, this means the entire visible range should be\n\t\t// marked as *not* business-hours, via inverse-background rendering.\n\t\tif (!events.length && businessHours) {\n\t\t\tevents = [\n\t\t\t\t$.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, {\n\t\t\t\t\tstart: this.view.activeRange.end, // guaranteed out-of-range\n\t\t\t\t\tend: this.view.activeRange.end,   // \""\n\t\t\t\t\tdow: null\n\t\t\t\t})\n\t\t\t];\n\t\t}\n\n\t\treturn events;\n\t},\n\n\n\t/* Handlers\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Attaches event-element-related handlers for *all* rendered event segments of the view.\n\tbindSegHandlers: function() {\n\t\tthis.bindSegHandlersToEl(this.el);\n\t},\n\n\n\t// Attaches event-element-related handlers to an arbitrary container element. leverages bubbling.\n\tbindSegHandlersToEl: function(el) {\n\t\tthis.bindSegHandlerToEl(el, 'touchstart', this.handleSegTouchStart);\n\t\tthis.bindSegHandlerToEl(el, 'mouseenter', this.handleSegMouseover);\n\t\tthis.bindSegHandlerToEl(el, 'mouseleave', this.handleSegMouseout);\n\t\tthis.bindSegHandlerToEl(el, 'mousedown', this.handleSegMousedown);\n\t\tthis.bindSegHandlerToEl(el, 'click', this.handleSegClick);\n\t},\n\n\n\t// Executes a handler for any a user-interaction on a segment.\n\t// Handler gets called with (seg, ev), and with the `this` context of the Grid\n\tbindSegHandlerToEl: function(el, name, handler) {\n\t\tvar _this = this;\n\n\t\tel.on(name, this.segSelector, function(ev) {\n\t\t\tvar seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEvents\n\n\t\t\t// only call the handlers if there is not a drag/resize in progress\n\t\t\tif (seg && !_this.isDraggingSeg && !_this.isResizingSeg) {\n\t\t\t\treturn handler.call(_this, seg, ev); // context will be the Grid\n\t\t\t}\n\t\t});\n\t},\n\n\n\thandleSegClick: function(seg, ev) {\n\t\tvar res = this.view.publiclyTrigger('eventClick', seg.el[0], seg.event, ev); // can return `false` to cancel\n\t\tif (res === false) {\n\t\t\tev.preventDefault();\n\t\t}\n\t},\n\n\n\t// Updates internal state and triggers handlers for when an event element is moused over\n\thandleSegMouseover: function(seg, ev) {\n\t\tif (\n\t\t\t!GlobalEmitter.get().shouldIgnoreMouse() &&\n\t\t\t!this.mousedOverSeg\n\t\t) {\n\t\t\tthis.mousedOverSeg = seg;\n\t\t\tif (this.view.isEventResizable(seg.event)) {\n\t\t\t\tseg.el.addClass('fc-allow-mouse-resize');\n\t\t\t}\n\t\t\tthis.view.publiclyTrigger('eventMouseover', seg.el[0], seg.event, ev);\n\t\t}\n\t},\n\n\n\t// Updates internal state and triggers handlers for when an event element is moused out.\n\t// Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\n\thandleSegMouseout: function(seg, ev) {\n\t\tev = ev || {}; // if given no args, make a mock mouse event\n\n\t\tif (this.mousedOverSeg) {\n\t\t\tseg = seg || this.mousedOverSeg; // if given no args, use the currently moused-over segment\n\t\t\tthis.mousedOverSeg = null;\n\t\t\tif (this.view.isEventResizable(seg.event)) {\n\t\t\t\tseg.el.removeClass('fc-allow-mouse-resize');\n\t\t\t}\n\t\t\tthis.view.publiclyTrigger('eventMouseout', seg.el[0], seg.event, ev);\n\t\t}\n\t},\n\n\n\thandleSegMousedown: function(seg, ev) {\n\t\tvar isResizing = this.startSegResize(seg, ev, { distance: 5 });\n\n\t\tif (!isResizing && this.view.isEventDraggable(seg.event)) {\n\t\t\tthis.buildSegDragListener(seg)\n\t\t\t\t.startInteraction(ev, {\n\t\t\t\t\tdistance: 5\n\t\t\t\t});\n\t\t}\n\t},\n\n\n\thandleSegTouchStart: function(seg, ev) {\n\t\tvar view = this.view;\n\t\tvar event = seg.event;\n\t\tvar isSelected = view.isEventSelected(event);\n\t\tvar isDraggable = view.isEventDraggable(event);\n\t\tvar isResizable = view.isEventResizable(event);\n\t\tvar isResizing = false;\n\t\tvar dragListener;\n\t\tvar eventLongPressDelay;\n\n\t\tif (isSelected && isResizable) {\n\t\t\t// only allow resizing of the event is selected\n\t\t\tisResizing = this.startSegResize(seg, ev);\n\t\t}\n\n\t\tif (!isResizing && (isDraggable || isResizable)) { // allowed to be selected?\n\n\t\t\teventLongPressDelay = view.opt('eventLongPressDelay');\n\t\t\tif (eventLongPressDelay == null) {\n\t\t\t\teventLongPressDelay = view.opt('longPressDelay'); // fallback\n\t\t\t}\n\n\t\t\tdragListener = isDraggable ?\n\t\t\t\tthis.buildSegDragListener(seg) :\n\t\t\t\tthis.buildSegSelectListener(seg); // seg isn't draggable, but still needs to be selected\n\n\t\t\tdragListener.startInteraction(ev, { // won't start if already started\n\t\t\t\tdelay: isSelected ? 0 : eventLongPressDelay // do delay if not already selected\n\t\t\t});\n\t\t}\n\t},\n\n\n\t// returns boolean whether resizing actually started or not.\n\t// assumes the seg allows resizing.\n\t// `dragOptions` are optional.\n\tstartSegResize: function(seg, ev, dragOptions) {\n\t\tif ($(ev.target).is('.fc-resizer')) {\n\t\t\tthis.buildSegResizeListener(seg, $(ev.target).is('.fc-start-resizer'))\n\t\t\t\t.startInteraction(ev, dragOptions);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\n\n\t/* Event Dragging\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Builds a listener that will track user-dragging on an event segment.\n\t// Generic enough to work with any type of Grid.\n\t// Has side effect of setting/unsetting `segDragListener`\n\tbuildSegDragListener: function(seg) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar el = seg.el;\n\t\tvar event = seg.event;\n\t\tvar isDragging;\n\t\tvar mouseFollower; // A clone of the original element that will move with the mouse\n\t\tvar dropLocation; // zoned event date properties\n\n\t\tif (this.segDragListener) {\n\t\t\treturn this.segDragListener;\n\t\t}\n\n\t\t// Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\n\t\t// of the view.\n\t\tvar dragListener = this.segDragListener = new HitDragListener(view, {\n\t\t\tscroll: view.opt('dragScroll'),\n\t\t\tsubjectEl: el,\n\t\t\tsubjectCenter: true,\n\t\t\tinteractionStart: function(ev) {\n\t\t\t\tseg.component = _this; // for renderDrag\n\t\t\t\tisDragging = false;\n\t\t\t\tmouseFollower = new MouseFollower(seg.el, {\n\t\t\t\t\tadditionalClass: 'fc-dragging',\n\t\t\t\t\tparentEl: view.el,\n\t\t\t\t\topacity: dragListener.isTouch ? null : view.opt('dragOpacity'),\n\t\t\t\t\trevertDuration: view.opt('dragRevertDuration'),\n\t\t\t\t\tzIndex: 2 // one above the .fc-view\n\t\t\t\t});\n\t\t\t\tmouseFollower.hide(); // don't show until we know this is a real drag\n\t\t\t\tmouseFollower.start(ev);\n\t\t\t},\n\t\t\tdragStart: function(ev) {\n\t\t\t\tif (dragListener.isTouch && !view.isEventSelected(event)) {\n\t\t\t\t\t// if not previously selected, will fire after a delay. then, select the event\n\t\t\t\t\tview.selectEvent(event);\n\t\t\t\t}\n\t\t\t\tisDragging = true;\n\t\t\t\t_this.handleSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported\n\t\t\t\t_this.segDragStart(seg, ev);\n\t\t\t\tview.hideEvent(event); // hide all event segments. our mouseFollower will take over\n\t\t\t},\n\t\t\thitOver: function(hit, isOrig, origHit) {\n\t\t\t\tvar isAllowed = true;\n\t\t\t\tvar origHitSpan;\n\t\t\t\tvar hitSpan;\n\t\t\t\tvar dragHelperEls;\n\n\t\t\t\t// starting hit could be forced (DayGrid.limit)\n\t\t\t\tif (seg.hit) {\n\t\t\t\t\torigHit = seg.hit;\n\t\t\t\t}\n\n\t\t\t\t// hit might not belong to this grid, so query origin grid\n\t\t\t\torigHitSpan = origHit.component.getSafeHitSpan(origHit);\n\t\t\t\thitSpan = hit.component.getSafeHitSpan(hit);\n\n\t\t\t\tif (origHitSpan && hitSpan) {\n\t\t\t\t\tdropLocation = _this.computeEventDrop(origHitSpan, hitSpan, event);\n\t\t\t\t\tisAllowed = dropLocation && _this.isEventLocationAllowed(dropLocation, event);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tisAllowed = false;\n\t\t\t\t}\n\n\t\t\t\tif (!isAllowed) {\n\t\t\t\t\tdropLocation = null;\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\n\t\t\t\t// if a valid drop location, have the subclass render a visual indication\n\t\t\t\tif (dropLocation && (dragHelperEls = view.renderDrag(dropLocation, seg))) {\n\n\t\t\t\t\tdragHelperEls.addClass('fc-dragging');\n\t\t\t\t\tif (!dragListener.isTouch) {\n\t\t\t\t\t\t_this.applyDragOpacity(dragHelperEls);\n\t\t\t\t\t}\n\n\t\t\t\t\tmouseFollower.hide(); // if the subclass is already using a mock event \""helper\"", hide our own\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\n\t\t\t\t}\n\n\t\t\t\tif (isOrig) {\n\t\t\t\t\tdropLocation = null; // needs to have moved hits to be a valid drop\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() { // called before mouse moves to a different hit OR moved out of all hits\n\t\t\t\tview.unrenderDrag(); // unrender whatever was done in renderDrag\n\t\t\t\tmouseFollower.show(); // show in case we are moving out of all hits\n\t\t\t\tdropLocation = null;\n\t\t\t},\n\t\t\thitDone: function() { // Called after a hitOut OR before a dragEnd\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tinteractionEnd: function(ev) {\n\t\t\t\tdelete seg.component; // prevent side effects\n\n\t\t\t\t// do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\n\t\t\t\tmouseFollower.stop(!dropLocation, function() {\n\t\t\t\t\tif (isDragging) {\n\t\t\t\t\t\tview.unrenderDrag();\n\t\t\t\t\t\t_this.segDragStop(seg, ev);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (dropLocation) {\n\t\t\t\t\t\t// no need to re-show original, will rerender all anyways. esp important if eventRenderWait\n\t\t\t\t\t\tview.reportSegDrop(seg, dropLocation, _this.largeUnit, el, ev);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tview.showEvent(event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t_this.segDragListener = null;\n\t\t\t}\n\t\t});\n\n\t\treturn dragListener;\n\t},\n\n\n\t// seg isn't draggable, but let's use a generic DragListener\n\t// simply for the delay, so it can be selected.\n\t// Has side effect of setting/unsetting `segDragListener`\n\tbuildSegSelectListener: function(seg) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar event = seg.event;\n\n\t\tif (this.segDragListener) {\n\t\t\treturn this.segDragListener;\n\t\t}\n\n\t\tvar dragListener = this.segDragListener = new DragListener({\n\t\t\tdragStart: function(ev) {\n\t\t\t\tif (dragListener.isTouch && !view.isEventSelected(event)) {\n\t\t\t\t\t// if not previously selected, will fire after a delay. then, select the event\n\t\t\t\t\tview.selectEvent(event);\n\t\t\t\t}\n\t\t\t},\n\t\t\tinteractionEnd: function(ev) {\n\t\t\t\t_this.segDragListener = null;\n\t\t\t}\n\t\t});\n\n\t\treturn dragListener;\n\t},\n\n\n\t// Called before event segment dragging starts\n\tsegDragStart: function(seg, ev) {\n\t\tthis.isDraggingSeg = true;\n\t\tthis.view.publiclyTrigger('eventDragStart', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy\n\t},\n\n\n\t// Called after event segment dragging stops\n\tsegDragStop: function(seg, ev) {\n\t\tthis.isDraggingSeg = false;\n\t\tthis.view.publiclyTrigger('eventDragStop', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy\n\t},\n\n\n\t// Given the spans an event drag began, and the span event was dropped, calculates the new zoned start/end/allDay\n\t// values for the event. Subclasses may override and set additional properties to be used by renderDrag.\n\t// A falsy returned value indicates an invalid drop.\n\t// DOES NOT consider overlap/constraint.\n\tcomputeEventDrop: function(startSpan, endSpan, event) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar dragStart = startSpan.start;\n\t\tvar dragEnd = endSpan.start;\n\t\tvar delta;\n\t\tvar dropLocation; // zoned event date properties\n\n\t\tif (dragStart.hasTime() === dragEnd.hasTime()) {\n\t\t\tdelta = this.diffDates(dragEnd, dragStart);\n\n\t\t\t// if an all-day event was in a timed area and it was dragged to a different time,\n\t\t\t// guarantee an end and adjust start/end to have times\n\t\t\tif (event.allDay && durationHasTime(delta)) {\n\t\t\t\tdropLocation = {\n\t\t\t\t\tstart: event.start.clone(),\n\t\t\t\t\tend: calendar.getEventEnd(event), // will be an ambig day\n\t\t\t\t\tallDay: false // for normalizeEventTimes\n\t\t\t\t};\n\t\t\t\tcalendar.normalizeEventTimes(dropLocation);\n\t\t\t}\n\t\t\t// othewise, work off existing values\n\t\t\telse {\n\t\t\t\tdropLocation = pluckEventDateProps(event);\n\t\t\t}\n\n\t\t\tdropLocation.start.add(delta);\n\t\t\tif (dropLocation.end) {\n\t\t\t\tdropLocation.end.add(delta);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// if switching from day <-> timed, start should be reset to the dropped date, and the end cleared\n\t\t\tdropLocation = {\n\t\t\t\tstart: dragEnd.clone(),\n\t\t\t\tend: null, // end should be cleared\n\t\t\t\tallDay: !dragEnd.hasTime()\n\t\t\t};\n\t\t}\n\n\t\treturn dropLocation;\n\t},\n\n\n\t// Utility for apply dragOpacity to a jQuery set\n\tapplyDragOpacity: function(els) {\n\t\tvar opacity = this.view.opt('dragOpacity');\n\n\t\tif (opacity != null) {\n\t\t\tels.css('opacity', opacity);\n\t\t}\n\t},\n\n\n\t/* External Element Dragging\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Called when a jQuery UI drag is initiated anywhere in the DOM\n\texternalDragStart: function(ev, ui) {\n\t\tvar view = this.view;\n\t\tvar el;\n\t\tvar accept;\n\n\t\tif (view.opt('droppable')) { // only listen if this setting is on\n\t\t\tel = $((ui ? ui.item : null) || ev.target);\n\n\t\t\t// Test that the dragged element passes the dropAccept selector or filter function.\n\t\t\t// FYI, the default is \""*\"" (matches all)\n\t\t\taccept = view.opt('dropAccept');\n\t\t\tif ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\n\t\t\t\tif (!this.isDraggingExternal) { // prevent double-listening if fired twice\n\t\t\t\t\tthis.listenToExternalDrag(el, ev, ui);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Called when a jQuery UI drag starts and it needs to be monitored for dropping\n\tlistenToExternalDrag: function(el, ev, ui) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\n\t\tvar dropLocation; // a null value signals an unsuccessful drag\n\n\t\t// listener that tracks mouse movement over date-associated pixel regions\n\t\tvar dragListener = _this.externalDragListener = new HitDragListener(this, {\n\t\t\tinteractionStart: function() {\n\t\t\t\t_this.isDraggingExternal = true;\n\t\t\t},\n\t\t\thitOver: function(hit) {\n\t\t\t\tvar isAllowed = true;\n\t\t\t\tvar hitSpan = hit.component.getSafeHitSpan(hit); // hit might not belong to this grid\n\n\t\t\t\tif (hitSpan) {\n\t\t\t\t\tdropLocation = _this.computeExternalDrop(hitSpan, meta);\n\t\t\t\t\tisAllowed = dropLocation && _this.isExternalLocationAllowed(dropLocation, meta.eventProps);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tisAllowed = false;\n\t\t\t\t}\n\n\t\t\t\tif (!isAllowed) {\n\t\t\t\t\tdropLocation = null;\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\n\t\t\t\tif (dropLocation) {\n\t\t\t\t\t_this.renderDrag(dropLocation); // called without a seg parameter\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() {\n\t\t\t\tdropLocation = null; // signal unsuccessful\n\t\t\t},\n\t\t\thitDone: function() { // Called after a hitOut OR before a dragEnd\n\t\t\t\tenableCursor();\n\t\t\t\t_this.unrenderDrag();\n\t\t\t},\n\t\t\tinteractionEnd: function(ev) {\n\t\t\t\tif (dropLocation) { // element was dropped on a valid hit\n\t\t\t\t\tview.reportExternalDrop(meta, dropLocation, el, ev, ui);\n\t\t\t\t}\n\t\t\t\t_this.isDraggingExternal = false;\n\t\t\t\t_this.externalDragListener = null;\n\t\t\t}\n\t\t});\n\n\t\tdragListener.startDrag(ev); // start listening immediately\n\t},\n\n\n\t// Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\n\t// returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\n\t// Returning a null value signals an invalid drop hit.\n\t// DOES NOT consider overlap/constraint.\n\tcomputeExternalDrop: function(span, meta) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar dropLocation = {\n\t\t\tstart: calendar.applyTimezone(span.start), // simulate a zoned event start date\n\t\t\tend: null\n\t\t};\n\n\t\t// if dropped on an all-day span, and element's metadata specified a time, set it\n\t\tif (meta.startTime && !dropLocation.start.hasTime()) {\n\t\t\tdropLocation.start.time(meta.startTime);\n\t\t}\n\n\t\tif (meta.duration) {\n\t\t\tdropLocation.end = dropLocation.start.clone().add(meta.duration);\n\t\t}\n\n\t\treturn dropLocation;\n\t},\n\n\n\n\t/* Drag Rendering (for both events and an external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event or external element being dragged.\n\t// `dropLocation` contains hypothetical start/end/allDay values the event would have if dropped. end can be null.\n\t// `seg` is the internal segment object that is being dragged. If dragging an external element, `seg` is null.\n\t// A truthy returned value indicates this method has rendered a helper element.\n\t// Must return elements used for any mock events.\n\trenderDrag: function(dropLocation, seg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a visual indication of an event or external element being dragged\n\tunrenderDrag: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Resizing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Creates a listener that tracks the user as they resize an event segment.\n\t// Generic enough to work with any type of Grid.\n\tbuildSegResizeListener: function(seg, isStart) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar el = seg.el;\n\t\tvar event = seg.event;\n\t\tvar eventEnd = calendar.getEventEnd(event);\n\t\tvar isDragging;\n\t\tvar resizeLocation; // zoned event date properties. falsy if invalid resize\n\n\t\t// Tracks mouse movement over the *grid's* coordinate map\n\t\tvar dragListener = this.segResizeListener = new HitDragListener(this, {\n\t\t\tscroll: view.opt('dragScroll'),\n\t\t\tsubjectEl: el,\n\t\t\tinteractionStart: function() {\n\t\t\t\tisDragging = false;\n\t\t\t},\n\t\t\tdragStart: function(ev) {\n\t\t\t\tisDragging = true;\n\t\t\t\t_this.handleSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported\n\t\t\t\t_this.segResizeStart(seg, ev);\n\t\t\t},\n\t\t\thitOver: function(hit, isOrig, origHit) {\n\t\t\t\tvar isAllowed = true;\n\t\t\t\tvar origHitSpan = _this.getSafeHitSpan(origHit);\n\t\t\t\tvar hitSpan = _this.getSafeHitSpan(hit);\n\n\t\t\t\tif (origHitSpan && hitSpan) {\n\t\t\t\t\tresizeLocation = isStart ?\n\t\t\t\t\t\t_this.computeEventStartResize(origHitSpan, hitSpan, event) :\n\t\t\t\t\t\t_this.computeEventEndResize(origHitSpan, hitSpan, event);\n\n\t\t\t\t\tisAllowed = resizeLocation && _this.isEventLocationAllowed(resizeLocation, event);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tisAllowed = false;\n\t\t\t\t}\n\n\t\t\t\tif (!isAllowed) {\n\t\t\t\t\tresizeLocation = null;\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (\n\t\t\t\t\t\tresizeLocation.start.isSame(event.start.clone().stripZone()) &&\n\t\t\t\t\t\tresizeLocation.end.isSame(eventEnd.clone().stripZone())\n\t\t\t\t\t) {\n\t\t\t\t\t\t// no change. (FYI, event dates might have zones)\n\t\t\t\t\t\tresizeLocation = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (resizeLocation) {\n\t\t\t\t\tview.hideEvent(event);\n\t\t\t\t\t_this.renderEventResize(resizeLocation, seg);\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() { // called before mouse moves to a different hit OR moved out of all hits\n\t\t\t\tresizeLocation = null;\n\t\t\t\tview.showEvent(event); // for when out-of-bounds. show original\n\t\t\t},\n\t\t\thitDone: function() { // resets the rendering to show the original event\n\t\t\t\t_this.unrenderEventResize();\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tinteractionEnd: function(ev) {\n\t\t\t\tif (isDragging) {\n\t\t\t\t\t_this.segResizeStop(seg, ev);\n\t\t\t\t}\n\n\t\t\t\tif (resizeLocation) { // valid date to resize to?\n\t\t\t\t\t// no need to re-show original, will rerender all anyways. esp important if eventRenderWait\n\t\t\t\t\tview.reportSegResize(seg, resizeLocation, _this.largeUnit, el, ev);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tview.showEvent(event);\n\t\t\t\t}\n\t\t\t\t_this.segResizeListener = null;\n\t\t\t}\n\t\t});\n\n\t\treturn dragListener;\n\t},\n\n\n\t// Called before event segment resizing starts\n\tsegResizeStart: function(seg, ev) {\n\t\tthis.isResizingSeg = true;\n\t\tthis.view.publiclyTrigger('eventResizeStart', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy\n\t},\n\n\n\t// Called after event segment resizing stops\n\tsegResizeStop: function(seg, ev) {\n\t\tthis.isResizingSeg = false;\n\t\tthis.view.publiclyTrigger('eventResizeStop', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy\n\t},\n\n\n\t// Returns new date-information for an event segment being resized from its start\n\tcomputeEventStartResize: function(startSpan, endSpan, event) {\n\t\treturn this.computeEventResize('start', startSpan, endSpan, event);\n\t},\n\n\n\t// Returns new date-information for an event segment being resized from its end\n\tcomputeEventEndResize: function(startSpan, endSpan, event) {\n\t\treturn this.computeEventResize('end', startSpan, endSpan, event);\n\t},\n\n\n\t// Returns new zoned date information for an event segment being resized from its start OR end\n\t// `type` is either 'start' or 'end'.\n\t// DOES NOT consider overlap/constraint.\n\tcomputeEventResize: function(type, startSpan, endSpan, event) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar delta = this.diffDates(endSpan[type], startSpan[type]);\n\t\tvar resizeLocation; // zoned event date properties\n\t\tvar defaultDuration;\n\n\t\t// build original values to work from, guaranteeing a start and end\n\t\tresizeLocation = {\n\t\t\tstart: event.start.clone(),\n\t\t\tend: calendar.getEventEnd(event),\n\t\t\tallDay: event.allDay\n\t\t};\n\n\t\t// if an all-day event was in a timed area and was resized to a time, adjust start/end to have times\n\t\tif (resizeLocation.allDay && durationHasTime(delta)) {\n\t\t\tresizeLocation.allDay = false;\n\t\t\tcalendar.normalizeEventTimes(resizeLocation);\n\t\t}\n\n\t\tresizeLocation[type].add(delta); // apply delta to start or end\n\n\t\t// if the event was compressed too small, find a new reasonable duration for it\n\t\tif (!resizeLocation.start.isBefore(resizeLocation.end)) {\n\n\t\t\tdefaultDuration =\n\t\t\t\tthis.minResizeDuration || // TODO: hack\n\t\t\t\t(event.allDay ?\n\t\t\t\t\tcalendar.defaultAllDayEventDuration :\n\t\t\t\t\tcalendar.defaultTimedEventDuration);\n\n\t\t\tif (type == 'start') { // resizing the start?\n\t\t\t\tresizeLocation.start = resizeLocation.end.clone().subtract(defaultDuration);\n\t\t\t}\n\t\t\telse { // resizing the end?\n\t\t\t\tresizeLocation.end = resizeLocation.start.clone().add(defaultDuration);\n\t\t\t}\n\t\t}\n\n\t\treturn resizeLocation;\n\t},\n\n\n\t// Renders a visual indication of an event being resized.\n\t// `range` has the updated dates of the event. `seg` is the original segment object involved in the drag.\n\t// Must return elements used for any mock events.\n\trenderEventResize: function(range, seg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a visual indication of an event being resized.\n\tunrenderEventResize: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Rendering Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Compute the text that should be displayed on an event's element.\n\t// `range` can be the Event object itself, or something range-like, with at least a `start`.\n\t// If event times are disabled, or the event has no time, will return a blank string.\n\t// If not specified, formatStr will default to the eventTimeFormat setting,\n\t// and displayEnd will default to the displayEventEnd setting.\n\tgetEventTimeText: function(range, formatStr, displayEnd) {\n\n\t\tif (formatStr == null) {\n\t\t\tformatStr = this.eventTimeFormat;\n\t\t}\n\n\t\tif (displayEnd == null) {\n\t\t\tdisplayEnd = this.displayEventEnd;\n\t\t}\n\n\t\tif (this.displayEventTime && range.start.hasTime()) {\n\t\t\tif (displayEnd && range.end) {\n\t\t\t\treturn this.view.formatRange(range, formatStr);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn range.start.format(formatStr);\n\t\t\t}\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generic utility for generating the HTML classNames for an event segment's element\n\tgetSegClasses: function(seg, isDraggable, isResizable) {\n\t\tvar view = this.view;\n\t\tvar classes = [\n\t\t\t'fc-event',\n\t\t\tseg.isStart ? 'fc-start' : 'fc-not-start',\n\t\t\tseg.isEnd ? 'fc-end' : 'fc-not-end'\n\t\t].concat(this.getSegCustomClasses(seg));\n\n\t\tif (isDraggable) {\n\t\t\tclasses.push('fc-draggable');\n\t\t}\n\t\tif (isResizable) {\n\t\t\tclasses.push('fc-resizable');\n\t\t}\n\n\t\t// event is currently selected? attach a className.\n\t\tif (view.isEventSelected(seg.event)) {\n\t\t\tclasses.push('fc-selected');\n\t\t}\n\n\t\treturn classes;\n\t},\n\n\n\t// List of classes that were defined by the caller of the API in some way\n\tgetSegCustomClasses: function(seg) {\n\t\tvar event = seg.event;\n\n\t\treturn [].concat(\n\t\t\tevent.className, // guaranteed to be an array\n\t\t\tevent.source ? event.source.className : []\n\t\t);\n\t},\n\n\n\t// Utility for generating event skin-related CSS properties\n\tgetSegSkinCss: function(seg) {\n\t\treturn {\n\t\t\t'background-color': this.getSegBackgroundColor(seg),\n\t\t\t'border-color': this.getSegBorderColor(seg),\n\t\t\tcolor: this.getSegTextColor(seg)\n\t\t};\n\t},\n\n\n\t// Queries for caller-specified color, then falls back to default\n\tgetSegBackgroundColor: function(seg) {\n\t\treturn seg.event.backgroundColor ||\n\t\t\tseg.event.color ||\n\t\t\tthis.getSegDefaultBackgroundColor(seg);\n\t},\n\n\n\tgetSegDefaultBackgroundColor: function(seg) {\n\t\tvar source = seg.event.source || {};\n\n\t\treturn source.backgroundColor ||\n\t\t\tsource.color ||\n\t\t\tthis.view.opt('eventBackgroundColor') ||\n\t\t\tthis.view.opt('eventColor');\n\t},\n\n\n\t// Queries for caller-specified color, then falls back to default\n\tgetSegBorderColor: function(seg) {\n\t\treturn seg.event.borderColor ||\n\t\t\tseg.event.color ||\n\t\t\tthis.getSegDefaultBorderColor(seg);\n\t},\n\n\n\tgetSegDefaultBorderColor: function(seg) {\n\t\tvar source = seg.event.source || {};\n\n\t\treturn source.borderColor ||\n\t\t\tsource.color ||\n\t\t\tthis.view.opt('eventBorderColor') ||\n\t\t\tthis.view.opt('eventColor');\n\t},\n\n\n\t// Queries for caller-specified color, then falls back to default\n\tgetSegTextColor: function(seg) {\n\t\treturn seg.event.textColor ||\n\t\t\tthis.getSegDefaultTextColor(seg);\n\t},\n\n\n\tgetSegDefaultTextColor: function(seg) {\n\t\tvar source = seg.event.source || {};\n\n\t\treturn source.textColor ||\n\t\t\tthis.view.opt('eventTextColor');\n\t},\n\n\n\t/* Event Location Validation\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tisEventLocationAllowed: function(eventLocation, event) {\n\t\tif (this.isEventLocationInRange(eventLocation)) {\n\t\t\tvar calendar = this.view.calendar;\n\t\t\tvar eventSpans = this.eventToSpans(eventLocation);\n\t\t\tvar i;\n\n\t\t\tif (eventSpans.length) {\n\t\t\t\tfor (i = 0; i < eventSpans.length; i++) {\n\t\t\t\t\tif (!calendar.isEventSpanAllowed(eventSpans[i], event)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\n\tisExternalLocationAllowed: function(eventLocation, metaProps) { // FOR the external element\n\t\tif (this.isEventLocationInRange(eventLocation)) {\n\t\t\tvar calendar = this.view.calendar;\n\t\t\tvar eventSpans = this.eventToSpans(eventLocation);\n\t\t\tvar i;\n\n\t\t\tif (eventSpans.length) {\n\t\t\t\tfor (i = 0; i < eventSpans.length; i++) {\n\t\t\t\t\tif (!calendar.isExternalSpanAllowed(eventSpans[i], eventLocation, metaProps)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\n\tisEventLocationInRange: function(eventLocation) {\n\t\treturn isRangeWithinRange(\n\t\t\tthis.eventToRawRange(eventLocation),\n\t\t\tthis.view.validRange\n\t\t);\n\t},\n\n\n\t/* Converting events -> eventRange -> eventSpan -> eventSegs\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Generates an array of segments for the given single event\n\t// Can accept an event \""location\"" as well (which only has start/end and no allDay)\n\teventToSegs: function(event) {\n\t\treturn this.eventsToSegs([ event ]);\n\t},\n\n\n\t// Generates spans (always unzoned) for the given event.\n\t// Does not do any inverting for inverse-background events.\n\t// Can accept an event \""location\"" as well (which only has start/end and no allDay)\n\teventToSpans: function(event) {\n\t\tvar eventRange = this.eventToRange(event); // { start, end, isStart, isEnd }\n\n\t\tif (eventRange) {\n\t\t\treturn this.eventRangeToSpans(eventRange, event);\n\t\t}\n\t\telse { // out of view's valid range\n\t\t\treturn [];\n\t\t}\n\t},\n\n\n\n\t// Converts an array of event objects into an array of event segment objects.\n\t// A custom `segSliceFunc` may be given for arbitrarily slicing up events.\n\t// Doesn't guarantee an order for the resulting array.\n\teventsToSegs: function(allEvents, segSliceFunc) {\n\t\tvar _this = this;\n\t\tvar eventsById = groupEventsById(allEvents);\n\t\tvar segs = [];\n\n\t\t$.each(eventsById, function(id, events) {\n\t\t\tvar visibleEvents = [];\n\t\t\tvar eventRanges = [];\n\t\t\tvar eventRange; // { start, end, isStart, isEnd }\n\t\t\tvar i;\n\n\t\t\tfor (i = 0; i < events.length; i++) {\n\t\t\t\teventRange = _this.eventToRange(events[i]); // might be null if completely out of range\n\n\t\t\t\tif (eventRange) {\n\t\t\t\t\teventRanges.push(eventRange);\n\t\t\t\t\tvisibleEvents.push(events[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// inverse-background events (utilize only the first event in calculations)\n\t\t\tif (isInverseBgEvent(events[0])) {\n\t\t\t\teventRanges = _this.invertRanges(eventRanges); // will lose isStart/isEnd\n\n\t\t\t\tfor (i = 0; i < eventRanges.length; i++) {\n\t\t\t\t\tsegs.push.apply(segs, // append to\n\t\t\t\t\t\t_this.eventRangeToSegs(eventRanges[i], events[0], segSliceFunc)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// normal event ranges\n\t\t\telse {\n\t\t\t\tfor (i = 0; i < eventRanges.length; i++) {\n\t\t\t\t\tsegs.push.apply(segs, // append to\n\t\t\t\t\t\t_this.eventRangeToSegs(eventRanges[i], visibleEvents[i], segSliceFunc)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn segs;\n\t},\n\n\n\t// Generates the unzoned start/end dates an event appears to occupy\n\t// Can accept an event \""location\"" as well (which only has start/end and no allDay)\n\t// returns { start, end, isStart, isEnd }\n\t// If the event is completely outside of the grid's valid range, will return undefined.\n\teventToRange: function(event) {\n\t\treturn this.refineRawEventRange(\n\t\t\tthis.eventToRawRange(event)\n\t\t);\n\t},\n\n\n\t// Ensures the given range is within the view's activeRange and is correctly localized.\n\t// Always returns a result\n\trefineRawEventRange: function(rawRange) {\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar range = intersectRanges(rawRange, view.activeRange);\n\n\t\tif (range) { // otherwise, event doesn't have valid range\n\n\t\t\t// hack: dynamic locale change forgets to upate stored event localed\n\t\t\tcalendar.localizeMoment(range.start);\n\t\t\tcalendar.localizeMoment(range.end);\n\n\t\t\treturn range;\n\t\t}\n\t},\n\n\n\t// not constrained to valid dates\n\t// not given localizeMoment hack\n\teventToRawRange: function(event) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar start = event.start.clone().stripZone();\n\t\tvar end = (\n\t\t\t\tevent.end ?\n\t\t\t\t\tevent.end.clone() :\n\t\t\t\t\t// derive the end from the start and allDay. compute allDay if necessary\n\t\t\t\t\tcalendar.getDefaultEventEnd(\n\t\t\t\t\t\tevent.allDay != null ?\n\t\t\t\t\t\t\tevent.allDay :\n\t\t\t\t\t\t\t!event.start.hasTime(),\n\t\t\t\t\t\tevent.start\n\t\t\t\t\t)\n\t\t\t).stripZone();\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\t// Given an event's range (unzoned start/end), and the event itself,\n\t// slice into segments (using the segSliceFunc function if specified)\n\t// eventRange - { start, end, isStart, isEnd }\n\teventRangeToSegs: function(eventRange, event, segSliceFunc) {\n\t\tvar eventSpans = this.eventRangeToSpans(eventRange, event);\n\t\tvar segs = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventSpans.length; i++) {\n\t\t\tsegs.push.apply(segs, // append to\n\t\t\t\tthis.eventSpanToSegs(eventSpans[i], event, segSliceFunc)\n\t\t\t);\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Given an event's unzoned date range, return an array of eventSpan objects.\n\t// eventSpan - { start, end, isStart, isEnd, otherthings... }\n\t// Subclasses can override.\n\t// Subclasses are obligated to forward eventRange.isStart/isEnd to the resulting spans.\n\teventRangeToSpans: function(eventRange, event) {\n\t\treturn [ $.extend({}, eventRange) ]; // copy into a single-item array\n\t},\n\n\n\t// Given an event's span (unzoned start/end and other misc data), and the event itself,\n\t// slices into segments and attaches event-derived properties to them.\n\t// eventSpan - { start, end, isStart, isEnd, otherthings... }\n\teventSpanToSegs: function(eventSpan, event, segSliceFunc) {\n\t\tvar segs = segSliceFunc ? segSliceFunc(eventSpan) : this.spanToSegs(eventSpan);\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\n\t\t\t// the eventSpan's isStart/isEnd takes precedence over the seg's\n\t\t\tif (!eventSpan.isStart) {\n\t\t\t\tseg.isStart = false;\n\t\t\t}\n\t\t\tif (!eventSpan.isEnd) {\n\t\t\t\tseg.isEnd = false;\n\t\t\t}\n\n\t\t\tseg.event = event;\n\t\t\tseg.eventStartMS = +eventSpan.start; // TODO: not the best name after making spans unzoned\n\t\t\tseg.eventDurationMS = eventSpan.end - eventSpan.start;\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Produces a new array of range objects that will cover all the time NOT covered by the given ranges.\n\t// SIDE EFFECT: will mutate the given array and will use its date references.\n\tinvertRanges: function(ranges) {\n\t\tvar view = this.view;\n\t\tvar viewStart = view.activeRange.start.clone(); // need a copy\n\t\tvar viewEnd = view.activeRange.end.clone(); // need a copy\n\t\tvar inverseRanges = [];\n\t\tvar start = viewStart; // the end of the previous range. the start of the new range\n\t\tvar i, range;\n\n\t\t// ranges need to be in order. required for our date-walking algorithm\n\t\tranges.sort(compareRanges);\n\n\t\tfor (i = 0; i < ranges.length; i++) {\n\t\t\trange = ranges[i];\n\n\t\t\t// add the span of time before the event (if there is any)\n\t\t\tif (range.start > start) { // compare millisecond time (skip any ambig logic)\n\t\t\t\tinverseRanges.push({\n\t\t\t\t\tstart: start,\n\t\t\t\t\tend: range.start\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (range.end > start) {\n\t\t\t\tstart = range.end;\n\t\t\t}\n\t\t}\n\n\t\t// add the span of time after the last event (if there is any)\n\t\tif (start < viewEnd) { // compare millisecond time (skip any ambig logic)\n\t\t\tinverseRanges.push({\n\t\t\t\tstart: start,\n\t\t\t\tend: viewEnd\n\t\t\t});\n\t\t}\n\n\t\treturn inverseRanges;\n\t},\n\n\n\tsortEventSegs: function(segs) {\n\t\tsegs.sort(proxy(this, 'compareEventSegs'));\n\t},\n\n\n\t// A cmp function for determining which segments should take visual priority\n\tcompareEventSegs: function(seg1, seg2) {\n\t\treturn seg1.eventStartMS - seg2.eventStartMS || // earlier events go first\n\t\t\tseg2.eventDurationMS - seg1.eventDurationMS || // tie? longer events go first\n\t\t\tseg2.event.allDay - seg1.event.allDay || // tie? put all-day events first (booleans cast to 0/1)\n\t\t\tcompareByFieldSpecs(seg1.event, seg2.event, this.view.eventOrderSpecs);\n\t}\n\n});\n\n\n/* Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\nfunction pluckEventDateProps(event) {\n\treturn {\n\t\tstart: event.start.clone(),\n\t\tend: event.end ? event.end.clone() : null,\n\t\tallDay: event.allDay // keep it the same\n\t};\n}\nFC.pluckEventDateProps = pluckEventDateProps;\n\n\nfunction isBgEvent(event) { // returns true if background OR inverse-background\n\tvar rendering = getEventRendering(event);\n\treturn rendering === 'background' || rendering === 'inverse-background';\n}\nFC.isBgEvent = isBgEvent; // export\n\n\nfunction isInverseBgEvent(event) {\n\treturn getEventRendering(event) === 'inverse-background';\n}\n\n\nfunction getEventRendering(event) {\n\treturn firstDefined((event.source || {}).rendering, event.rendering);\n}\n\n\nfunction groupEventsById(events) {\n\tvar eventsById = {};\n\tvar i, event;\n\n\tfor (i = 0; i < events.length; i++) {\n\t\tevent = events[i];\n\t\t(eventsById[event._id] || (eventsById[event._id] = [])).push(event);\n\t}\n\n\treturn eventsById;\n}\n\n\n// A cmp function for determining which non-inverted \""ranges\"" (see above) happen earlier\nfunction compareRanges(range1, range2) {\n\treturn range1.start - range2.start; // earlier ranges go first\n}\n\n\n/* External-Dragging-Element Data\n----------------------------------------------------------------------------------------------------------------------*/\n\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\nFC.dataAttrPrefix = '';\n\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\n// to be used for Event Object creation.\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\nfunction getDraggedElMeta(el) {\n\tvar prefix = FC.dataAttrPrefix;\n\tvar eventProps; // properties for creating the event, not related to date/time\n\tvar startTime; // a Duration\n\tvar duration;\n\tvar stick;\n\n\tif (prefix) { prefix += '-'; }\n\teventProps = el.data(prefix + 'event') || null;\n\n\tif (eventProps) {\n\t\tif (typeof eventProps === 'object') {\n\t\t\teventProps = $.extend({}, eventProps); // make a copy\n\t\t}\n\t\telse { // something like 1 or true. still signal event creation\n\t\t\teventProps = {};\n\t\t}\n\n\t\t// pluck special-cased date/time properties\n\t\tstartTime = eventProps.start;\n\t\tif (startTime == null) { startTime = eventProps.time; } // accept 'time' as well\n\t\tduration = eventProps.duration;\n\t\tstick = eventProps.stick;\n\t\tdelete eventProps.start;\n\t\tdelete eventProps.time;\n\t\tdelete eventProps.duration;\n\t\tdelete eventProps.stick;\n\t}\n\n\t// fallback to standalone attribute values for each of the date/time properties\n\tif (startTime == null) { startTime = el.data(prefix + 'start'); }\n\tif (startTime == null) { startTime = el.data(prefix + 'time'); } // accept 'time' as well\n\tif (duration == null) { duration = el.data(prefix + 'duration'); }\n\tif (stick == null) { stick = el.data(prefix + 'stick'); }\n\n\t// massage into correct data types\n\tstartTime = startTime != null ? moment.duration(startTime) : null;\n\tduration = duration != null ? moment.duration(duration) : null;\n\tstick = Boolean(stick);\n\n\treturn { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\n}\n\n\n;;\n\n/*\nA set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\nPrerequisite: the object being mixed into needs to be a *Grid*\n*/\nvar DayTableMixin = FC.DayTableMixin = {\n\n\tbreakOnWeeks: false, // should create a new row for each week?\n\tdayDates: null, // whole-day dates for each column. left to right\n\tdayIndices: null, // for each day from start, the offset\n\tdaysPerRow: null,\n\trowCnt: null,\n\tcolCnt: null,\n\tcolHeadFormat: null,\n\n\n\t// Populates internal variables used for date calculation and rendering\n\tupdateDayTable: function() {\n\t\tvar view = this.view;\n\t\tvar date = this.start.clone();\n\t\tvar dayIndex = -1;\n\t\tvar dayIndices = [];\n\t\tvar dayDates = [];\n\t\tvar daysPerRow;\n\t\tvar firstDay;\n\t\tvar rowCnt;\n\n\t\twhile (date.isBefore(this.end)) { // loop each day from start to end\n\t\t\tif (view.isHiddenDay(date)) {\n\t\t\t\tdayIndices.push(dayIndex + 0.5); // mark that it's between indices\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdayIndex++;\n\t\t\t\tdayIndices.push(dayIndex);\n\t\t\t\tdayDates.push(date.clone());\n\t\t\t}\n\t\t\tdate.add(1, 'days');\n\t\t}\n\n\t\tif (this.breakOnWeeks) {\n\t\t\t// count columns until the day-of-week repeats\n\t\t\tfirstDay = dayDates[0].day();\n\t\t\tfor (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\n\t\t\t\tif (dayDates[daysPerRow].day() == firstDay) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\trowCnt = Math.ceil(dayDates.length / daysPerRow);\n\t\t}\n\t\telse {\n\t\t\trowCnt = 1;\n\t\t\tdaysPerRow = dayDates.length;\n\t\t}\n\n\t\tthis.dayDates = dayDates;\n\t\tthis.dayIndices = dayIndices;\n\t\tthis.daysPerRow = daysPerRow;\n\t\tthis.rowCnt = rowCnt;\n\n\t\tthis.updateDayTableCols();\n\t},\n\n\n\t// Computes and assigned the colCnt property and updates any options that may be computed from it\n\tupdateDayTableCols: function() {\n\t\tthis.colCnt = this.computeColCnt();\n\t\tthis.colHeadFormat = this.view.opt('columnFormat') || this.computeColHeadFormat();\n\t},\n\n\n\t// Determines how many columns there should be in the table\n\tcomputeColCnt: function() {\n\t\treturn this.daysPerRow;\n\t},\n\n\n\t// Computes the ambiguously-timed moment for the given cell\n\tgetCellDate: function(row, col) {\n\t\treturn this.dayDates[\n\t\t\t\tthis.getCellDayIndex(row, col)\n\t\t\t].clone();\n\t},\n\n\n\t// Computes the ambiguously-timed date range for the given cell\n\tgetCellRange: function(row, col) {\n\t\tvar start = this.getCellDate(row, col);\n\t\tvar end = start.clone().add(1, 'days');\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\t// Returns the number of day cells, chronologically, from the first of the grid (0-based)\n\tgetCellDayIndex: function(row, col) {\n\t\treturn row * this.daysPerRow + this.getColDayIndex(col);\n\t},\n\n\n\t// Returns the numner of day cells, chronologically, from the first cell in *any given row*\n\tgetColDayIndex: function(col) {\n\t\tif (this.isRTL) {\n\t\t\treturn this.colCnt - 1 - col;\n\t\t}\n\t\telse {\n\t\t\treturn col;\n\t\t}\n\t},\n\n\n\t// Given a date, returns its chronolocial cell-index from the first cell of the grid.\n\t// If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n\t// If before the first offset, returns a negative number.\n\t// If after the last offset, returns an offset past the last cell offset.\n\t// Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n\tgetDateDayIndex: function(date) {\n\t\tvar dayIndices = this.dayIndices;\n\t\tvar dayOffset = date.diff(this.start, 'days');\n\n\t\tif (dayOffset < 0) {\n\t\t\treturn dayIndices[0] - 1;\n\t\t}\n\t\telse if (dayOffset >= dayIndices.length) {\n\t\t\treturn dayIndices[dayIndices.length - 1] + 1;\n\t\t}\n\t\telse {\n\t\t\treturn dayIndices[dayOffset];\n\t\t}\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes a default column header formatting string if `colFormat` is not explicitly defined\n\tcomputeColHeadFormat: function() {\n\t\t// if more than one week row, or if there are a lot of columns with not much space,\n\t\t// put just the day numbers will be in each cell\n\t\tif (this.rowCnt > 1 || this.colCnt > 10) {\n\t\t\treturn 'ddd'; // \""Sat\""\n\t\t}\n\t\t// multiple days, so full single date string WON'T be in title text\n\t\telse if (this.colCnt > 1) {\n\t\t\treturn this.view.opt('dayOfMonthFormat'); // \""Sat 12/10\""\n\t\t}\n\t\t// single day, so full single date string will probably be in title text\n\t\telse {\n\t\t\treturn 'dddd'; // \""Saturday\""\n\t\t}\n\t},\n\n\n\t/* Slicing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Slices up a date range into a segment for every week-row it intersects with\n\tsliceRangeByRow: function(range) {\n\t\tvar daysPerRow = this.daysPerRow;\n\t\tvar normalRange = this.view.computeDayRange(range); // make whole-day range, considering nextDayThreshold\n\t\tvar rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\n\t\tvar rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\n\t\tvar segs = [];\n\t\tvar row;\n\t\tvar rowFirst, rowLast; // inclusive day-index range for current row\n\t\tvar segFirst, segLast; // inclusive day-index range for segment\n\n\t\tfor (row = 0; row < this.rowCnt; row++) {\n\t\t\trowFirst = row * daysPerRow;\n\t\t\trowLast = rowFirst + daysPerRow - 1;\n\n\t\t\t// intersect segment's offset range with the row's\n\t\t\tsegFirst = Math.max(rangeFirst, rowFirst);\n\t\t\tsegLast = Math.min(rangeLast, rowLast);\n\n\t\t\t// deal with in-between indices\n\t\t\tsegFirst = Math.ceil(segFirst); // in-between starts round to next cell\n\t\t\tsegLast = Math.floor(segLast); // in-between ends round to prev cell\n\n\t\t\tif (segFirst <= segLast) { // was there any intersection with the current row?\n\t\t\t\tsegs.push({\n\t\t\t\t\trow: row,\n\n\t\t\t\t\t// normalize to start of row\n\t\t\t\t\tfirstRowDayIndex: segFirst - rowFirst,\n\t\t\t\t\tlastRowDayIndex: segLast - rowFirst,\n\n\t\t\t\t\t// must be matching integers to be the segment's start/end\n\t\t\t\t\tisStart: segFirst === rangeFirst,\n\t\t\t\t\tisEnd: segLast === rangeLast\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Slices up a date range into a segment for every day-cell it intersects with.\n\t// TODO: make more DRY with sliceRangeByRow somehow.\n\tsliceRangeByDay: function(range) {\n\t\tvar daysPerRow = this.daysPerRow;\n\t\tvar normalRange = this.view.computeDayRange(range); // make whole-day range, considering nextDayThreshold\n\t\tvar rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\n\t\tvar rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\n\t\tvar segs = [];\n\t\tvar row;\n\t\tvar rowFirst, rowLast; // inclusive day-index range for current row\n\t\tvar i;\n\t\tvar segFirst, segLast; // inclusive day-index range for segment\n\n\t\tfor (row = 0; row < this.rowCnt; row++) {\n\t\t\trowFirst = row * daysPerRow;\n\t\t\trowLast = rowFirst + daysPerRow - 1;\n\n\t\t\tfor (i = rowFirst; i <= rowLast; i++) {\n\n\t\t\t\t// intersect segment's offset range with the row's\n\t\t\t\tsegFirst = Math.max(rangeFirst, i);\n\t\t\t\tsegLast = Math.min(rangeLast, i);\n\n\t\t\t\t// deal with in-between indices\n\t\t\t\tsegFirst = Math.ceil(segFirst); // in-between starts round to next cell\n\t\t\t\tsegLast = Math.floor(segLast); // in-between ends round to prev cell\n\n\t\t\t\tif (segFirst <= segLast) { // was there any intersection with the current row?\n\t\t\t\t\tsegs.push({\n\t\t\t\t\t\trow: row,\n\n\t\t\t\t\t\t// normalize to start of row\n\t\t\t\t\t\tfirstRowDayIndex: segFirst - rowFirst,\n\t\t\t\t\t\tlastRowDayIndex: segLast - rowFirst,\n\n\t\t\t\t\t\t// must be matching integers to be the segment's start/end\n\t\t\t\t\t\tisStart: segFirst === rangeFirst,\n\t\t\t\t\t\tisEnd: segLast === rangeLast\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t/* Header Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderHeadHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '' +\n\t\t\t'<div class=\""fc-row ' + view.widgetHeaderClass + '\"">' +\n\t\t\t\t'<table>' +\n\t\t\t\t\t'<thead>' +\n\t\t\t\t\t\tthis.renderHeadTrHtml() +\n\t\t\t\t\t'</thead>' +\n\t\t\t\t'</table>' +\n\t\t\t'</div>';\n\t},\n\n\n\trenderHeadIntroHtml: function() {\n\t\treturn this.renderIntroHtml(); // fall back to generic\n\t},\n\n\n\trenderHeadTrHtml: function() {\n\t\treturn '' +\n\t\t\t'<tr>' +\n\t\t\t\t(this.isRTL ? '' : this.renderHeadIntroHtml()) +\n\t\t\t\tthis.renderHeadDateCellsHtml() +\n\t\t\t\t(this.isRTL ? this.renderHeadIntroHtml() : '') +\n\t\t\t'</tr>';\n\t},\n\n\n\trenderHeadDateCellsHtml: function() {\n\t\tvar htmls = [];\n\t\tvar col, date;\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tdate = this.getCellDate(0, col);\n\t\t\thtmls.push(this.renderHeadDateCellHtml(date));\n\t\t}\n\n\t\treturn htmls.join('');\n\t},\n\n\n\t// TODO: when internalApiVersion, accept an object for HTML attributes\n\t// (colspan should be no different)\n\trenderHeadDateCellHtml: function(date, colspan, otherAttrs) {\n\t\tvar view = this.view;\n\t\tvar isDateValid = isDateWithinRange(date, view.activeRange); // TODO: called too frequently. cache somehow.\n\t\tvar classNames = [\n\t\t\t'fc-day-header',\n\t\t\tview.widgetHeaderClass\n\t\t];\n\t\tvar innerHtml = htmlEscape(date.format(this.colHeadFormat));\n\n\t\t// if only one row of days, the classNames on the header can represent the specific days beneath\n\t\tif (this.rowCnt === 1) {\n\t\t\tclassNames = classNames.concat(\n\t\t\t\t// includes the day-of-week class\n\t\t\t\t// noThemeHighlight=true (don't highlight the header)\n\t\t\t\tthis.getDayClasses(date, true)\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tclassNames.push('fc-' + dayIDs[date.day()]); // only add the day-of-week class\n\t\t}\n\n\t\treturn '' +\n            '<th class=\""' + classNames.join(' ') + '\""' +\n\t\t\t\t((isDateValid && this.rowCnt) === 1 ?\n\t\t\t\t\t' data-date=\""' + date.format('YYYY-MM-DD') + '\""' :\n\t\t\t\t\t'') +\n\t\t\t\t(colspan > 1 ?\n\t\t\t\t\t' colspan=\""' + colspan + '\""' :\n\t\t\t\t\t'') +\n\t\t\t\t(otherAttrs ?\n\t\t\t\t\t' ' + otherAttrs :\n\t\t\t\t\t'') +\n\t\t\t\t'>' +\n\t\t\t\t(isDateValid ?\n\t\t\t\t\t// don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\n\t\t\t\t\tview.buildGotoAnchorHtml(\n\t\t\t\t\t\t{ date: date, forceOff: this.rowCnt > 1 || this.colCnt === 1 },\n\t\t\t\t\t\tinnerHtml\n\t\t\t\t\t) :\n\t\t\t\t\t// if not valid, display text, but no link\n\t\t\t\t\tinnerHtml\n\t\t\t\t) +\n\t\t\t'</th>';\n\t},\n\n\n\t/* Background Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBgTrHtml: function(row) {\n\t\treturn '' +\n\t\t\t'<tr>' +\n\t\t\t\t(this.isRTL ? '' : this.renderBgIntroHtml(row)) +\n\t\t\t\tthis.renderBgCellsHtml(row) +\n\t\t\t\t(this.isRTL ? this.renderBgIntroHtml(row) : '') +\n\t\t\t'</tr>';\n\t},\n\n\n\trenderBgIntroHtml: function(row) {\n\t\treturn this.renderIntroHtml(); // fall back to generic\n\t},\n\n\n\trenderBgCellsHtml: function(row) {\n\t\tvar htmls = [];\n\t\tvar col, date;\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tdate = this.getCellDate(row, col);\n\t\t\thtmls.push(this.renderBgCellHtml(date));\n\t\t}\n\n\t\treturn htmls.join('');\n\t},\n\n\n\trenderBgCellHtml: function(date, otherAttrs) {\n\t\tvar view = this.view;\n\t\tvar isDateValid = isDateWithinRange(date, view.activeRange); // TODO: called too frequently. cache somehow.\n\t\tvar classes = this.getDayClasses(date);\n\n\t\tclasses.unshift('fc-day', view.widgetContentClass);\n\n\t\treturn '<td class=\""' + classes.join(' ') + '\""' +\n\t\t\t(isDateValid ?\n\t\t\t\t' data-date=\""' + date.format('YYYY-MM-DD') + '\""' : // if date has a time, won't format it\n\t\t\t\t'') +\n\t\t\t(otherAttrs ?\n\t\t\t\t' ' + otherAttrs :\n\t\t\t\t'') +\n\t\t\t'></td>';\n\t},\n\n\n\t/* Generic\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Generates the default HTML intro for any row. User classes should override\n\trenderIntroHtml: function() {\n\t},\n\n\n\t// TODO: a generic method for dealing with <tr>, RTL, intro\n\t// when increment internalApiVersion\n\t// wrapTr (scheduler)\n\n\n\t/* Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Applies the generic \""intro\"" and \""outro\"" HTML to the given cells.\n\t// Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\n\tbookendCells: function(trEl) {\n\t\tvar introHtml = this.renderIntroHtml();\n\n\t\tif (introHtml) {\n\t\t\tif (this.isRTL) {\n\t\t\t\ttrEl.append(introHtml);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttrEl.prepend(introHtml);\n\t\t\t}\n\t\t}\n\t}\n\n};\n\n;;\n\n/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {\n\n\tnumbersVisible: false, // should render a row for day/week numbers? set by outside view. TODO: make internal\n\tbottomCoordPadding: 0, // hack for extending the hit area for the last row of the coordinate grid\n\n\trowEls: null, // set of fake row elements\n\tcellEls: null, // set of whole-day elements comprising the row's background\n\thelperEls: null, // set of cell skeleton elements for rendering the mock event \""helper\""\n\n\trowCoordCache: null,\n\tcolCoordCache: null,\n\n\n\t// Renders the rows and columns into the component's `this.el`, which should already be assigned.\n\t// isRigid determins whether the individual rows should ignore the contents and be a constant height.\n\t// Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\n\trenderDates: function(isRigid) {\n\t\tvar view = this.view;\n\t\tvar rowCnt = this.rowCnt;\n\t\tvar colCnt = this.colCnt;\n\t\tvar html = '';\n\t\tvar row;\n\t\tvar col;\n\n\t\tfor (row = 0; row < rowCnt; row++) {\n\t\t\thtml += this.renderDayRowHtml(row, isRigid);\n\t\t}\n\t\tthis.el.html(html);\n\n\t\tthis.rowEls = this.el.find('.fc-row');\n\t\tthis.cellEls = this.el.find('.fc-day, .fc-disabled-day');\n\n\t\tthis.rowCoordCache = new CoordCache({\n\t\t\tels: this.rowEls,\n\t\t\tisVertical: true\n\t\t});\n\t\tthis.colCoordCache = new CoordCache({\n\t\t\tels: this.cellEls.slice(0, this.colCnt), // only the first row\n\t\t\tisHorizontal: true\n\t\t});\n\n\t\t// trigger dayRender with each cell's element\n\t\tfor (row = 0; row < rowCnt; row++) {\n\t\t\tfor (col = 0; col < colCnt; col++) {\n\t\t\t\tview.publiclyTrigger(\n\t\t\t\t\t'dayRender',\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.getCellDate(row, col),\n\t\t\t\t\tthis.getCellEl(row, col)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\n\n\tunrenderDates: function() {\n\t\tthis.removeSegPopover();\n\t},\n\n\n\trenderBusinessHours: function() {\n\t\tvar segs = this.buildBusinessHourSegs(true); // wholeDay=true\n\t\tthis.renderFill('businessHours', segs, 'bgevent');\n\t},\n\n\n\tunrenderBusinessHours: function() {\n\t\tthis.unrenderFill('businessHours');\n\t},\n\n\n\t// Generates the HTML for a single row, which is a div that wraps a table.\n\t// `row` is the row number.\n\trenderDayRowHtml: function(row, isRigid) {\n\t\tvar view = this.view;\n\t\tvar classes = [ 'fc-row', 'fc-week', view.widgetContentClass ];\n\n\t\tif (isRigid) {\n\t\t\tclasses.push('fc-rigid');\n\t\t}\n\n\t\treturn '' +\n\t\t\t'<div class=\""' + classes.join(' ') + '\"">' +\n\t\t\t\t'<div class=\""fc-bg\"">' +\n\t\t\t\t\t'<table>' +\n\t\t\t\t\t\tthis.renderBgTrHtml(row) +\n\t\t\t\t\t'</table>' +\n\t\t\t\t'</div>' +\n\t\t\t\t'<div class=\""fc-content-skeleton\"">' +\n\t\t\t\t\t'<table>' +\n\t\t\t\t\t\t(this.numbersVisible ?\n\t\t\t\t\t\t\t'<thead>' +\n\t\t\t\t\t\t\t\tthis.renderNumberTrHtml(row) +\n\t\t\t\t\t\t\t'</thead>' :\n\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t) +\n\t\t\t\t\t'</table>' +\n\t\t\t\t'</div>' +\n\t\t\t'</div>';\n\t},\n\n\n\t/* Grid Number Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderNumberTrHtml: function(row) {\n\t\treturn '' +\n\t\t\t'<tr>' +\n\t\t\t\t(this.isRTL ? '' : this.renderNumberIntroHtml(row)) +\n\t\t\t\tthis.renderNumberCellsHtml(row) +\n\t\t\t\t(this.isRTL ? this.renderNumberIntroHtml(row) : '') +\n\t\t\t'</tr>';\n\t},\n\n\n\trenderNumberIntroHtml: function(row) {\n\t\treturn this.renderIntroHtml();\n\t},\n\n\n\trenderNumberCellsHtml: function(row) {\n\t\tvar htmls = [];\n\t\tvar col, date;\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tdate = this.getCellDate(row, col);\n\t\t\thtmls.push(this.renderNumberCellHtml(date));\n\t\t}\n\n\t\treturn htmls.join('');\n\t},\n\n\n\t// Generates the HTML for the <td>s of the \""number\"" row in the DayGrid's content skeleton.\n\t// The number row will only exist if either day numbers or week numbers are turned on.\n\trenderNumberCellHtml: function(date) {\n\t\tvar view = this.view;\n\t\tvar html = '';\n\t\tvar isDateValid = isDateWithinRange(date, view.activeRange); // TODO: called too frequently. cache somehow.\n\t\tvar isDayNumberVisible = view.dayNumbersVisible && isDateValid;\n\t\tvar classes;\n\t\tvar weekCalcFirstDoW;\n\n\t\tif (!isDayNumberVisible && !view.cellWeekNumbersVisible) {\n\t\t\t// no numbers in day cell (week number must be along the side)\n\t\t\treturn '<td/>'; //  will create an empty space above events :(\n\t\t}\n\n\t\tclasses = this.getDayClasses(date);\n\t\tclasses.unshift('fc-day-top');\n\n\t\tif (view.cellWeekNumbersVisible) {\n\t\t\t// To determine the day of week number change under ISO, we cannot\n\t\t\t// rely on moment.js methods such as firstDayOfWeek() or weekday(),\n\t\t\t// because they rely on the locale's dow (possibly overridden by\n\t\t\t// our firstDay option), which may not be Monday. We cannot change\n\t\t\t// dow, because that would affect the calendar start day as well.\n\t\t\tif (date._locale._fullCalendar_weekCalc === 'ISO') {\n\t\t\t\tweekCalcFirstDoW = 1;  // Monday by ISO 8601 definition\n\t\t\t}\n\t\t\telse {\n\t\t\t\tweekCalcFirstDoW = date._locale.firstDayOfWeek();\n\t\t\t}\n\t\t}\n\n\t\thtml += '<td class=\""' + classes.join(' ') + '\""' +\n\t\t\t(isDateValid ?\n\t\t\t\t' data-date=\""' + date.format() + '\""' :\n\t\t\t\t''\n\t\t\t\t) +\n\t\t\t'>';\n\n\t\tif (view.cellWeekNumbersVisible && (date.day() == weekCalcFirstDoW)) {\n\t\t\thtml += view.buildGotoAnchorHtml(\n\t\t\t\t{ date: date, type: 'week' },\n\t\t\t\t{ 'class': 'fc-week-number' },\n\t\t\t\tdate.format('w') // inner HTML\n\t\t\t);\n\t\t}\n\n\t\tif (isDayNumberVisible) {\n\t\t\thtml += view.buildGotoAnchorHtml(\n\t\t\t\tdate,\n\t\t\t\t{ 'class': 'fc-day-number' },\n\t\t\t\tdate.date() // inner HTML\n\t\t\t);\n\t\t}\n\n\t\thtml += '</td>';\n\n\t\treturn html;\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes a default event time formatting string if `timeFormat` is not explicitly defined\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.view.opt('extraSmallTimeFormat'); // like \""6p\"" or \""6:30p\""\n\t},\n\n\n\t// Computes a default `displayEventEnd` value if one is not expliclty defined\n\tcomputeDisplayEventEnd: function() {\n\t\treturn this.colCnt == 1; // we'll likely have space if there's only one day\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trangeUpdated: function() {\n\t\tthis.updateDayTable();\n\t},\n\n\n\t// Slices up the given span (unzoned start/end with other misc data) into an array of segments\n\tspanToSegs: function(span) {\n\t\tvar segs = this.sliceRangeByRow(span);\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tif (this.isRTL) {\n\t\t\t\tseg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\n\t\t\t\tseg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tseg.leftCol = seg.firstRowDayIndex;\n\t\t\t\tseg.rightCol = seg.lastRowDayIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t/* Hit System\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tprepareHits: function() {\n\t\tthis.colCoordCache.build();\n\t\tthis.rowCoordCache.build();\n\t\tthis.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\n\t},\n\n\n\treleaseHits: function() {\n\t\tthis.colCoordCache.clear();\n\t\tthis.rowCoordCache.clear();\n\t},\n\n\n\tqueryHit: function(leftOffset, topOffset) {\n\t\tif (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\n\t\t\tvar col = this.colCoordCache.getHorizontalIndex(leftOffset);\n\t\t\tvar row = this.rowCoordCache.getVerticalIndex(topOffset);\n\n\t\t\tif (row != null && col != null) {\n\t\t\t\treturn this.getCellHit(row, col);\n\t\t\t}\n\t\t}\n\t},\n\n\n\tgetHitSpan: function(hit) {\n\t\treturn this.getCellRange(hit.row, hit.col);\n\t},\n\n\n\tgetHitEl: function(hit) {\n\t\treturn this.getCellEl(hit.row, hit.col);\n\t},\n\n\n\t/* Cell System\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// FYI: the first column is the leftmost column, regardless of date\n\n\n\tgetCellHit: function(row, col) {\n\t\treturn {\n\t\t\trow: row,\n\t\t\tcol: col,\n\t\t\tcomponent: this, // needed unfortunately :(\n\t\t\tleft: this.colCoordCache.getLeftOffset(col),\n\t\t\tright: this.colCoordCache.getRightOffset(col),\n\t\t\ttop: this.rowCoordCache.getTopOffset(row),\n\t\t\tbottom: this.rowCoordCache.getBottomOffset(row)\n\t\t};\n\t},\n\n\n\tgetCellEl: function(row, col) {\n\t\treturn this.cellEls.eq(row * this.colCnt + col);\n\t},\n\n\n\t/* Event Drag Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: move to DayGrid.event, similar to what we did with Grid's drag methods\n\n\n\t// Renders a visual indication of an event or external element being dragged.\n\t// `eventLocation` has zoned start and end (optional)\n\trenderDrag: function(eventLocation, seg) {\n\t\tvar eventSpans = this.eventToSpans(eventLocation);\n\t\tvar i;\n\n\t\t// always render a highlight underneath\n\t\tfor (i = 0; i < eventSpans.length; i++) {\n\t\t\tthis.renderHighlight(eventSpans[i]);\n\t\t}\n\n\t\t// if a segment from the same calendar but another component is being dragged, render a helper event\n\t\tif (seg && seg.component !== this) {\n\t\t\treturn this.renderEventLocationHelper(eventLocation, seg); // returns mock event elements\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of a hovering event\n\tunrenderDrag: function() {\n\t\tthis.unrenderHighlight();\n\t\tthis.unrenderHelper();\n\t},\n\n\n\t/* Event Resize Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being resized\n\trenderEventResize: function(eventLocation, seg) {\n\t\tvar eventSpans = this.eventToSpans(eventLocation);\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventSpans.length; i++) {\n\t\t\tthis.renderHighlight(eventSpans[i]);\n\t\t}\n\n\t\treturn this.renderEventLocationHelper(eventLocation, seg); // returns mock event elements\n\t},\n\n\n\t// Unrenders a visual indication of an event being resized\n\tunrenderEventResize: function() {\n\t\tthis.unrenderHighlight();\n\t\tthis.unrenderHelper();\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a mock \""helper\"" event. `sourceSeg` is the associated internal segment object. It can be null.\n\trenderHelper: function(event, sourceSeg) {\n\t\tvar helperNodes = [];\n\t\tvar segs = this.eventToSegs(event);\n\t\tvar rowStructs;\n\n\t\tsegs = this.renderFgSegEls(segs); // assigns each seg's el and returns a subset of segs that were rendered\n\t\trowStructs = this.renderSegRows(segs);\n\n\t\t// inject each new event skeleton into each associated row\n\t\tthis.rowEls.each(function(row, rowNode) {\n\t\t\tvar rowEl = $(rowNode); // the .fc-row\n\t\t\tvar skeletonEl = $('<div class=\""fc-helper-skeleton\""><table/></div>'); // will be absolutely positioned\n\t\t\tvar skeletonTop;\n\n\t\t\t// If there is an original segment, match the top position. Otherwise, put it at the row's top level\n\t\t\tif (sourceSeg && sourceSeg.row === row) {\n\t\t\t\tskeletonTop = sourceSeg.el.position().top;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tskeletonTop = rowEl.find('.fc-content-skeleton tbody').position().top;\n\t\t\t}\n\n\t\t\tskeletonEl.css('top', skeletonTop)\n\t\t\t\t.find('table')\n\t\t\t\t\t.append(rowStructs[row].tbodyEl);\n\n\t\t\trowEl.append(skeletonEl);\n\t\t\thelperNodes.push(skeletonEl[0]);\n\t\t});\n\n\t\treturn ( // must return the elements rendered\n\t\t\tthis.helperEls = $(helperNodes) // array -> jQuery set\n\t\t);\n\t},\n\n\n\t// Unrenders any visual indication of a mock helper event\n\tunrenderHelper: function() {\n\t\tif (this.helperEls) {\n\t\t\tthis.helperEls.remove();\n\t\t\tthis.helperEls = null;\n\t\t}\n\t},\n\n\n\t/* Fill System (highlight, background events, business hours)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tfillSegTag: 'td', // override the default tag name\n\n\n\t// Renders a set of rectangles over the given segments of days.\n\t// Only returns segments that successfully rendered.\n\trenderFill: function(type, segs, className) {\n\t\tvar nodes = [];\n\t\tvar i, seg;\n\t\tvar skeletonEl;\n\n\t\tsegs = this.renderFillSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tskeletonEl = this.renderFillRow(type, seg, className);\n\t\t\tthis.rowEls.eq(seg.row).append(skeletonEl);\n\t\t\tnodes.push(skeletonEl[0]);\n\t\t}\n\n\t\tthis.elsByFill[type] = $(nodes);\n\n\t\treturn segs;\n\t},\n\n\n\t// Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\n\trenderFillRow: function(type, seg, className) {\n\t\tvar colCnt = this.colCnt;\n\t\tvar startCol = seg.leftCol;\n\t\tvar endCol = seg.rightCol + 1;\n\t\tvar skeletonEl;\n\t\tvar trEl;\n\n\t\tclassName = className || type.toLowerCase();\n\n\t\tskeletonEl = $(\n\t\t\t'<div class=\""fc-' + className + '-skeleton\"">' +\n\t\t\t\t'<table><tr/></table>' +\n\t\t\t'</div>'\n\t\t);\n\t\ttrEl = skeletonEl.find('tr');\n\n\t\tif (startCol > 0) {\n\t\t\ttrEl.append('<td colspan=\""' + startCol + '\""/>');\n\t\t}\n\n\t\ttrEl.append(\n\t\t\tseg.el.attr('colspan', endCol - startCol)\n\t\t);\n\n\t\tif (endCol < colCnt) {\n\t\t\ttrEl.append('<td colspan=\""' + (colCnt - endCol) + '\""/>');\n\t\t}\n\n\t\tthis.bookendCells(trEl);\n\n\t\treturn skeletonEl;\n\t}\n\n});\n\n;;\n\n/* Event-rendering methods for the DayGrid class\n----------------------------------------------------------------------------------------------------------------------*/\n\nDayGrid.mixin({\n\n\trowStructs: null, // an array of objects, each holding information about a row's foreground event-rendering\n\n\n\t// Unrenders all events currently rendered on the grid\n\tunrenderEvents: function() {\n\t\tthis.removeSegPopover(); // removes the \""more..\"" events popover\n\t\tGrid.prototype.unrenderEvents.apply(this, arguments); // calls the super-method\n\t},\n\n\n\t// Retrieves all rendered segment objects currently rendered on the grid\n\tgetEventSegs: function() {\n\t\treturn Grid.prototype.getEventSegs.call(this) // get the segments from the super-method\n\t\t\t.concat(this.popoverSegs || []); // append the segments from the \""more...\"" popover\n\t},\n\n\n\t// Renders the given background event segments onto the grid\n\trenderBgSegs: function(segs) {\n\n\t\t// don't render timed background events\n\t\tvar allDaySegs = $.grep(segs, function(seg) {\n\t\t\treturn seg.event.allDay;\n\t\t});\n\n\t\treturn Grid.prototype.renderBgSegs.call(this, allDaySegs); // call the super-method\n\t},\n\n\n\t// Renders the given foreground event segments onto the grid\n\trenderFgSegs: function(segs) {\n\t\tvar rowStructs;\n\n\t\t// render an `.el` on each seg\n\t\t// returns a subset of the segs. segs that were actually rendered\n\t\tsegs = this.renderFgSegEls(segs);\n\n\t\trowStructs = this.rowStructs = this.renderSegRows(segs);\n\n\t\t// append to each row's content skeleton\n\t\tthis.rowEls.each(function(i, rowNode) {\n\t\t\t$(rowNode).find('.fc-content-skeleton > table').append(\n\t\t\t\trowStructs[i].tbodyEl\n\t\t\t);\n\t\t});\n\n\t\treturn segs; // return only the segs that were actually rendered\n\t},\n\n\n\t// Unrenders all currently rendered foreground event segments\n\tunrenderFgSegs: function() {\n\t\tvar rowStructs = this.rowStructs || [];\n\t\tvar rowStruct;\n\n\t\twhile ((rowStruct = rowStructs.pop())) {\n\t\t\trowStruct.tbodyEl.remove();\n\t\t}\n\n\t\tthis.rowStructs = null;\n\t},\n\n\n\t// Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.\n\t// Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\n\t// PRECONDITION: each segment shoud already have a rendered and assigned `.el`\n\trenderSegRows: function(segs) {\n\t\tvar rowStructs = [];\n\t\tvar segRows;\n\t\tvar row;\n\n\t\tsegRows = this.groupSegRows(segs); // group into nested arrays\n\n\t\t// iterate each row of segment groupings\n\t\tfor (row = 0; row < segRows.length; row++) {\n\t\t\trowStructs.push(\n\t\t\t\tthis.renderSegRow(row, segRows[row])\n\t\t\t);\n\t\t}\n\n\t\treturn rowStructs;\n\t},\n\n\n\t// Builds the HTML to be used for the default element for an individual segment\n\tfgSegHtml: function(seg, disableResizing) {\n\t\tvar view = this.view;\n\t\tvar event = seg.event;\n\t\tvar isDraggable = view.isEventDraggable(event);\n\t\tvar isResizableFromStart = !disableResizing && event.allDay &&\n\t\t\tseg.isStart && view.isEventResizableFromStart(event);\n\t\tvar isResizableFromEnd = !disableResizing && event.allDay &&\n\t\t\tseg.isEnd && view.isEventResizableFromEnd(event);\n\t\tvar classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\n\t\tvar skinCss = cssToStr(this.getSegSkinCss(seg));\n\t\tvar timeHtml = '';\n\t\tvar timeText;\n\t\tvar titleHtml;\n\n\t\tclasses.unshift('fc-day-grid-event', 'fc-h-event');\n\n\t\t// Only display a timed events time if it is the starting segment\n\t\tif (seg.isStart) {\n\t\t\ttimeText = this.getEventTimeText(event);\n\t\t\tif (timeText) {\n\t\t\t\ttimeHtml = '<span class=\""fc-time\"">' + htmlEscape(timeText) + '</span>';\n\t\t\t}\n\t\t}\n\n\t\ttitleHtml =\n\t\t\t'<span class=\""fc-title\"">' +\n\t\t\t\t(htmlEscape(event.title || '') || '&nbsp;') + // we always want one line of height\n\t\t\t'</span>';\n\t\t\n\t\treturn '<a class=\""' + classes.join(' ') + '\""' +\n\t\t\t\t(event.url ?\n\t\t\t\t\t' href=\""' + htmlEscape(event.url) + '\""' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t\t(skinCss ?\n\t\t\t\t\t' style=\""' + skinCss + '\""' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t'>' +\n\t\t\t\t'<div class=\""fc-content\"">' +\n\t\t\t\t\t(this.isRTL ?\n\t\t\t\t\t\ttitleHtml + ' ' + timeHtml : // put a natural space in between\n\t\t\t\t\t\ttimeHtml + ' ' + titleHtml   //\n\t\t\t\t\t\t) +\n\t\t\t\t'</div>' +\n\t\t\t\t(isResizableFromStart ?\n\t\t\t\t\t'<div class=\""fc-resizer fc-start-resizer\"" />' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t\t(isResizableFromEnd ?\n\t\t\t\t\t'<div class=\""fc-resizer fc-end-resizer\"" />' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t'</a>';\n\t},\n\n\n\t// Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains\n\t// the segments. Returns object with a bunch of internal data about how the render was calculated.\n\t// NOTE: modifies rowSegs\n\trenderSegRow: function(row, rowSegs) {\n\t\tvar colCnt = this.colCnt;\n\t\tvar segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\n\t\tvar levelCnt = Math.max(1, segLevels.length); // ensure at least one level\n\t\tvar tbody = $('<tbody/>');\n\t\tvar segMatrix = []; // lookup for which segments are rendered into which level+col cells\n\t\tvar cellMatrix = []; // lookup for all <td> elements of the level+col matrix\n\t\tvar loneCellMatrix = []; // lookup for <td> elements that only take up a single column\n\t\tvar i, levelSegs;\n\t\tvar col;\n\t\tvar tr;\n\t\tvar j, seg;\n\t\tvar td;\n\n\t\t// populates empty cells from the current column (`col`) to `endCol`\n\t\tfunction emptyCellsUntil(endCol) {\n\t\t\twhile (col < endCol) {\n\t\t\t\t// try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\n\t\t\t\ttd = (loneCellMatrix[i - 1] || [])[col];\n\t\t\t\tif (td) {\n\t\t\t\t\ttd.attr(\n\t\t\t\t\t\t'rowspan',\n\t\t\t\t\t\tparseInt(td.attr('rowspan') || 1, 10) + 1\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttd = $('<td/>');\n\t\t\t\t\ttr.append(td);\n\t\t\t\t}\n\t\t\t\tcellMatrix[i][col] = td;\n\t\t\t\tloneCellMatrix[i][col] = td;\n\t\t\t\tcol++;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < levelCnt; i++) { // iterate through all levels\n\t\t\tlevelSegs = segLevels[i];\n\t\t\tcol = 0;\n\t\t\ttr = $('<tr/>');\n\n\t\t\tsegMatrix.push([]);\n\t\t\tcellMatrix.push([]);\n\t\t\tloneCellMatrix.push([]);\n\n\t\t\t// levelCnt might be 1 even though there are no actual levels. protect against this.\n\t\t\t// this single empty row is useful for styling.\n\t\t\tif (levelSegs) {\n\t\t\t\tfor (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\n\t\t\t\t\tseg = levelSegs[j];\n\n\t\t\t\t\temptyCellsUntil(seg.leftCol);\n\n\t\t\t\t\t// create a container that occupies or more columns. append the event element.\n\t\t\t\t\ttd = $('<td class=\""fc-event-container\""/>').append(seg.el);\n\t\t\t\t\tif (seg.leftCol != seg.rightCol) {\n\t\t\t\t\t\ttd.attr('colspan', seg.rightCol - seg.leftCol + 1);\n\t\t\t\t\t}\n\t\t\t\t\telse { // a single-column segment\n\t\t\t\t\t\tloneCellMatrix[i][col] = td;\n\t\t\t\t\t}\n\n\t\t\t\t\twhile (col <= seg.rightCol) {\n\t\t\t\t\t\tcellMatrix[i][col] = td;\n\t\t\t\t\t\tsegMatrix[i][col] = seg;\n\t\t\t\t\t\tcol++;\n\t\t\t\t\t}\n\n\t\t\t\t\ttr.append(td);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\temptyCellsUntil(colCnt); // finish off the row\n\t\t\tthis.bookendCells(tr);\n\t\t\ttbody.append(tr);\n\t\t}\n\n\t\treturn { // a \""rowStruct\""\n\t\t\trow: row, // the row number\n\t\t\ttbodyEl: tbody,\n\t\t\tcellMatrix: cellMatrix,\n\t\t\tsegMatrix: segMatrix,\n\t\t\tsegLevels: segLevels,\n\t\t\tsegs: rowSegs\n\t\t};\n\t},\n\n\n\t// Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\n\t// NOTE: modifies segs\n\tbuildSegLevels: function(segs) {\n\t\tvar levels = [];\n\t\tvar i, seg;\n\t\tvar j;\n\n\t\t// Give preference to elements with certain criteria, so they have\n\t\t// a chance to be closer to the top.\n\t\tthis.sortEventSegs(segs);\n\t\t\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\n\t\t\t// loop through levels, starting with the topmost, until the segment doesn't collide with other segments\n\t\t\tfor (j = 0; j < levels.length; j++) {\n\t\t\t\tif (!isDaySegCollision(seg, levels[j])) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// `j` now holds the desired subrow index\n\t\t\tseg.level = j;\n\n\t\t\t// create new level array if needed and append segment\n\t\t\t(levels[j] || (levels[j] = [])).push(seg);\n\t\t}\n\n\t\t// order segments left-to-right. very important if calendar is RTL\n\t\tfor (j = 0; j < levels.length; j++) {\n\t\t\tlevels[j].sort(compareDaySegCols);\n\t\t}\n\n\t\treturn levels;\n\t},\n\n\n\t// Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\n\tgroupSegRows: function(segs) {\n\t\tvar segRows = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < this.rowCnt; i++) {\n\t\t\tsegRows.push([]);\n\t\t}\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tsegRows[segs[i].row].push(segs[i]);\n\t\t}\n\n\t\treturn segRows;\n\t}\n\n});\n\n\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\nfunction isDaySegCollision(seg, otherSegs) {\n\tvar i, otherSeg;\n\n\tfor (i = 0; i < otherSegs.length; i++) {\n\t\totherSeg = otherSegs[i];\n\n\t\tif (\n\t\t\totherSeg.leftCol <= seg.rightCol &&\n\t\t\totherSeg.rightCol >= seg.leftCol\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n\n// A cmp function for determining the leftmost event\nfunction compareDaySegCols(a, b) {\n\treturn a.leftCol - b.leftCol;\n}\n\n;;\n\n/* Methods relate to limiting the number events for a given day on a DayGrid\n----------------------------------------------------------------------------------------------------------------------*/\n// NOTE: all the segs being passed around in here are foreground segs\n\nDayGrid.mixin({\n\n\tsegPopover: null, // the Popover that holds events that can't fit in a cell. null when not visible\n\tpopoverSegs: null, // an array of segment objects that the segPopover holds. null when not visible\n\n\n\tremoveSegPopover: function() {\n\t\tif (this.segPopover) {\n\t\t\tthis.segPopover.hide(); // in handler, will call segPopover's removeElement\n\t\t}\n\t},\n\n\n\t// Limits the number of \""levels\"" (vertically stacking layers of events) for each row of the grid.\n\t// `levelLimit` can be false (don't limit), a number, or true (should be computed).\n\tlimitRows: function(levelLimit) {\n\t\tvar rowStructs = this.rowStructs || [];\n\t\tvar row; // row #\n\t\tvar rowLevelLimit;\n\n\t\tfor (row = 0; row < rowStructs.length; row++) {\n\t\t\tthis.unlimitRow(row);\n\n\t\t\tif (!levelLimit) {\n\t\t\t\trowLevelLimit = false;\n\t\t\t}\n\t\t\telse if (typeof levelLimit === 'number') {\n\t\t\t\trowLevelLimit = levelLimit;\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowLevelLimit = this.computeRowLevelLimit(row);\n\t\t\t}\n\n\t\t\tif (rowLevelLimit !== false) {\n\t\t\t\tthis.limitRow(row, rowLevelLimit);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Computes the number of levels a row will accomodate without going outside its bounds.\n\t// Assumes the row is \""rigid\"" (maintains a constant height regardless of what is inside).\n\t// `row` is the row number.\n\tcomputeRowLevelLimit: function(row) {\n\t\tvar rowEl = this.rowEls.eq(row); // the containing \""fake\"" row div\n\t\tvar rowHeight = rowEl.height(); // TODO: cache somehow?\n\t\tvar trEls = this.rowStructs[row].tbodyEl.children();\n\t\tvar i, trEl;\n\t\tvar trHeight;\n\n\t\tfunction iterInnerHeights(i, childNode) {\n\t\t\ttrHeight = Math.max(trHeight, $(childNode).outerHeight());\n\t\t}\n\n\t\t// Reveal one level <tr> at a time and stop when we find one out of bounds\n\t\tfor (i = 0; i < trEls.length; i++) {\n\t\t\ttrEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\n\n\t\t\t// with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\n\t\t\t// so instead, find the tallest inner content element.\n\t\t\ttrHeight = 0;\n\t\t\ttrEl.find('> td > :first-child').each(iterInnerHeights);\n\n\t\t\tif (trEl.position().top + trHeight > rowHeight) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn false; // should not limit at all\n\t},\n\n\n\t// Limits the given grid row to the maximum number of levels and injects \""more\"" links if necessary.\n\t// `row` is the row number.\n\t// `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\n\tlimitRow: function(row, levelLimit) {\n\t\tvar _this = this;\n\t\tvar rowStruct = this.rowStructs[row];\n\t\tvar moreNodes = []; // array of \""more\"" <a> links and <td> DOM nodes\n\t\tvar col = 0; // col #, left-to-right (not chronologically)\n\t\tvar levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\n\t\tvar cellMatrix; // a matrix (by level, then column) of all <td> jQuery elements in the row\n\t\tvar limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes\n\t\tvar i, seg;\n\t\tvar segsBelow; // array of segment objects below `seg` in the current `col`\n\t\tvar totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\n\t\tvar colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\n\t\tvar td, rowspan;\n\t\tvar segMoreNodes; // array of \""more\"" <td> cells that will stand-in for the current seg's cell\n\t\tvar j;\n\t\tvar moreTd, moreWrap, moreLink;\n\n\t\t// Iterates through empty level cells and places \""more\"" links inside if need be\n\t\tfunction emptyCellsUntil(endCol) { // goes from current `col` to `endCol`\n\t\t\twhile (col < endCol) {\n\t\t\t\tsegsBelow = _this.getCellSegs(row, col, levelLimit);\n\t\t\t\tif (segsBelow.length) {\n\t\t\t\t\ttd = cellMatrix[levelLimit - 1][col];\n\t\t\t\t\tmoreLink = _this.renderMoreLink(row, col, segsBelow);\n\t\t\t\t\tmoreWrap = $('<div/>').append(moreLink);\n\t\t\t\t\ttd.append(moreWrap);\n\t\t\t\t\tmoreNodes.push(moreWrap[0]);\n\t\t\t\t}\n\t\t\t\tcol++;\n\t\t\t}\n\t\t}\n\n\t\tif (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\n\t\t\tlevelSegs = rowStruct.segLevels[levelLimit - 1];\n\t\t\tcellMatrix = rowStruct.cellMatrix;\n\n\t\t\tlimitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level <tr> elements past the limit\n\t\t\t\t.addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\n\n\t\t\t// iterate though segments in the last allowable level\n\t\t\tfor (i = 0; i < levelSegs.length; i++) {\n\t\t\t\tseg = levelSegs[i];\n\t\t\t\temptyCellsUntil(seg.leftCol); // process empty cells before the segment\n\n\t\t\t\t// determine *all* segments below `seg` that occupy the same columns\n\t\t\t\tcolSegsBelow = [];\n\t\t\t\ttotalSegsBelow = 0;\n\t\t\t\twhile (col <= seg.rightCol) {\n\t\t\t\t\tsegsBelow = this.getCellSegs(row, col, levelLimit);\n\t\t\t\t\tcolSegsBelow.push(segsBelow);\n\t\t\t\t\ttotalSegsBelow += segsBelow.length;\n\t\t\t\t\tcol++;\n\t\t\t\t}\n\n\t\t\t\tif (totalSegsBelow) { // do we need to replace this segment with one or many \""more\"" links?\n\t\t\t\t\ttd = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\n\t\t\t\t\trowspan = td.attr('rowspan') || 1;\n\t\t\t\t\tsegMoreNodes = [];\n\n\t\t\t\t\t// make a replacement <td> for each column the segment occupies. will be one for each colspan\n\t\t\t\t\tfor (j = 0; j < colSegsBelow.length; j++) {\n\t\t\t\t\t\tmoreTd = $('<td class=\""fc-more-cell\""/>').attr('rowspan', rowspan);\n\t\t\t\t\t\tsegsBelow = colSegsBelow[j];\n\t\t\t\t\t\tmoreLink = this.renderMoreLink(\n\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\tseg.leftCol + j,\n\t\t\t\t\t\t\t[ seg ].concat(segsBelow) // count seg as hidden too\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmoreWrap = $('<div/>').append(moreLink);\n\t\t\t\t\t\tmoreTd.append(moreWrap);\n\t\t\t\t\t\tsegMoreNodes.push(moreTd[0]);\n\t\t\t\t\t\tmoreNodes.push(moreTd[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\ttd.addClass('fc-limited').after($(segMoreNodes)); // hide original <td> and inject replacements\n\t\t\t\t\tlimitedNodes.push(td[0]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\temptyCellsUntil(this.colCnt); // finish off the level\n\t\t\trowStruct.moreEls = $(moreNodes); // for easy undoing later\n\t\t\trowStruct.limitedEls = $(limitedNodes); // for easy undoing later\n\t\t}\n\t},\n\n\n\t// Reveals all levels and removes all \""more\""-related elements for a grid's row.\n\t// `row` is a row number.\n\tunlimitRow: function(row) {\n\t\tvar rowStruct = this.rowStructs[row];\n\n\t\tif (rowStruct.moreEls) {\n\t\t\trowStruct.moreEls.remove();\n\t\t\trowStruct.moreEls = null;\n\t\t}\n\n\t\tif (rowStruct.limitedEls) {\n\t\t\trowStruct.limitedEls.removeClass('fc-limited');\n\t\t\trowStruct.limitedEls = null;\n\t\t}\n\t},\n\n\n\t// Renders an <a> element that represents hidden event element for a cell.\n\t// Responsible for attaching click handler as well.\n\trenderMoreLink: function(row, col, hiddenSegs) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\n\t\treturn $('<a class=\""fc-more\""/>')\n\t\t\t.text(\n\t\t\t\tthis.getMoreLinkText(hiddenSegs.length)\n\t\t\t)\n\t\t\t.on('click', function(ev) {\n\t\t\t\tvar clickOption = view.opt('eventLimitClick');\n\t\t\t\tvar date = _this.getCellDate(row, col);\n\t\t\t\tvar moreEl = $(this);\n\t\t\t\tvar dayEl = _this.getCellEl(row, col);\n\t\t\t\tvar allSegs = _this.getCellSegs(row, col);\n\n\t\t\t\t// rescope the segments to be within the cell's date\n\t\t\t\tvar reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\n\t\t\t\tvar reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\n\n\t\t\t\tif (typeof clickOption === 'function') {\n\t\t\t\t\t// the returned value can be an atomic option\n\t\t\t\t\tclickOption = view.publiclyTrigger('eventLimitClick', null, {\n\t\t\t\t\t\tdate: date,\n\t\t\t\t\t\tdayEl: dayEl,\n\t\t\t\t\t\tmoreEl: moreEl,\n\t\t\t\t\t\tsegs: reslicedAllSegs,\n\t\t\t\t\t\thiddenSegs: reslicedHiddenSegs\n\t\t\t\t\t}, ev);\n\t\t\t\t}\n\n\t\t\t\tif (clickOption === 'popover') {\n\t\t\t\t\t_this.showSegPopover(row, col, moreEl, reslicedAllSegs);\n\t\t\t\t}\n\t\t\t\telse if (typeof clickOption === 'string') { // a view name\n\t\t\t\t\tview.calendar.zoomTo(date, clickOption);\n\t\t\t\t}\n\t\t\t});\n\t},\n\n\n\t// Reveals the popover that displays all events within a cell\n\tshowSegPopover: function(row, col, moreLink, segs) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar moreWrap = moreLink.parent(); // the <div> wrapper around the <a>\n\t\tvar topEl; // the element we want to match the top coordinate of\n\t\tvar options;\n\n\t\tif (this.rowCnt == 1) {\n\t\t\ttopEl = view.el; // will cause the popover to cover any sort of header\n\t\t}\n\t\telse {\n\t\t\ttopEl = this.rowEls.eq(row); // will align with top of row\n\t\t}\n\n\t\toptions = {\n\t\t\tclassName: 'fc-more-popover',\n\t\t\tcontent: this.renderSegPopoverContent(row, col, segs),\n\t\t\tparentEl: this.view.el, // attach to root of view. guarantees outside of scrollbars.\n\t\t\ttop: topEl.offset().top,\n\t\t\tautoHide: true, // when the user clicks elsewhere, hide the popover\n\t\t\tviewportConstrain: view.opt('popoverViewportConstrain'),\n\t\t\thide: function() {\n\t\t\t\t// kill everything when the popover is hidden\n\t\t\t\t// notify events to be removed\n\t\t\t\tif (_this.popoverSegs) {\n\t\t\t\t\tvar seg;\n\t\t\t\t\tfor (var i = 0; i < _this.popoverSegs.length; ++i) {\n\t\t\t\t\t\tseg = _this.popoverSegs[i];\n\t\t\t\t\t\tview.publiclyTrigger('eventDestroy', seg.event, seg.event, seg.el);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_this.segPopover.removeElement();\n\t\t\t\t_this.segPopover = null;\n\t\t\t\t_this.popoverSegs = null;\n\t\t\t}\n\t\t};\n\n\t\t// Determine horizontal coordinate.\n\t\t// We use the moreWrap instead of the <td> to avoid border confusion.\n\t\tif (this.isRTL) {\n\t\t\toptions.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\n\t\t}\n\t\telse {\n\t\t\toptions.left = moreWrap.offset().left - 1; // -1 to be over cell border\n\t\t}\n\n\t\tthis.segPopover = new Popover(options);\n\t\tthis.segPopover.show();\n\n\t\t// the popover doesn't live within the grid's container element, and thus won't get the event\n\t\t// delegated-handlers for free. attach event-related handlers to the popover.\n\t\tthis.bindSegHandlersToEl(this.segPopover.el);\n\t},\n\n\n\t// Builds the inner DOM contents of the segment popover\n\trenderSegPopoverContent: function(row, col, segs) {\n\t\tvar view = this.view;\n\t\tvar isTheme = view.opt('theme');\n\t\tvar title = this.getCellDate(row, col).format(view.opt('dayPopoverFormat'));\n\t\tvar content = $(\n\t\t\t'<div class=\""fc-header ' + view.widgetHeaderClass + '\"">' +\n\t\t\t\t'<span class=\""fc-close ' +\n\t\t\t\t\t(isTheme ? 'ui-icon ui-icon-closethick' : 'fc-icon fc-icon-x') +\n\t\t\t\t'\""></span>' +\n\t\t\t\t'<span class=\""fc-title\"">' +\n\t\t\t\t\thtmlEscape(title) +\n\t\t\t\t'</span>' +\n\t\t\t\t'<div class=\""fc-clear\""/>' +\n\t\t\t'</div>' +\n\t\t\t'<div class=\""fc-body ' + view.widgetContentClass + '\"">' +\n\t\t\t\t'<div class=\""fc-event-container\""></div>' +\n\t\t\t'</div>'\n\t\t);\n\t\tvar segContainer = content.find('.fc-event-container');\n\t\tvar i;\n\n\t\t// render each seg's `el` and only return the visible segs\n\t\tsegs = this.renderFgSegEls(segs, true); // disableResizing=true\n\t\tthis.popoverSegs = segs;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\n\t\t\t// because segments in the popover are not part of a grid coordinate system, provide a hint to any\n\t\t\t// grids that want to do drag-n-drop about which cell it came from\n\t\t\tthis.hitsNeeded();\n\t\t\tsegs[i].hit = this.getCellHit(row, col);\n\t\t\tthis.hitsNotNeeded();\n\n\t\t\tsegContainer.append(segs[i].el);\n\t\t}\n\n\t\treturn content;\n\t},\n\n\n\t// Given the events within an array of segment objects, reslice them to be in a single day\n\tresliceDaySegs: function(segs, dayDate) {\n\n\t\t// build an array of the original events\n\t\tvar events = $.map(segs, function(seg) {\n\t\t\treturn seg.event;\n\t\t});\n\n\t\tvar dayStart = dayDate.clone();\n\t\tvar dayEnd = dayStart.clone().add(1, 'days');\n\t\tvar dayRange = { start: dayStart, end: dayEnd };\n\n\t\t// slice the events with a custom slicing function\n\t\tsegs = this.eventsToSegs(\n\t\t\tevents,\n\t\t\tfunction(range) {\n\t\t\t\tvar seg = intersectRanges(range, dayRange); // undefind if no intersection\n\t\t\t\treturn seg ? [ seg ] : []; // must return an array of segments\n\t\t\t}\n\t\t);\n\n\t\t// force an order because eventsToSegs doesn't guarantee one\n\t\tthis.sortEventSegs(segs);\n\n\t\treturn segs;\n\t},\n\n\n\t// Generates the text that should be inside a \""more\"" link, given the number of events it represents\n\tgetMoreLinkText: function(num) {\n\t\tvar opt = this.view.opt('eventLimitText');\n\n\t\tif (typeof opt === 'function') {\n\t\t\treturn opt(num);\n\t\t}\n\t\telse {\n\t\t\treturn '+' + num + ' ' + opt;\n\t\t}\n\t},\n\n\n\t// Returns segments within a given cell.\n\t// If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\n\tgetCellSegs: function(row, col, startLevel) {\n\t\tvar segMatrix = this.rowStructs[row].segMatrix;\n\t\tvar level = startLevel || 0;\n\t\tvar segs = [];\n\t\tvar seg;\n\n\t\twhile (level < segMatrix.length) {\n\t\t\tseg = segMatrix[level][col];\n\t\t\tif (seg) {\n\t\t\t\tsegs.push(seg);\n\t\t\t}\n\t\t\tlevel++;\n\t\t}\n\n\t\treturn segs;\n\t}\n\n});\n\n;;\n\n/* A component that renders one or more columns of vertical time slots\n----------------------------------------------------------------------------------------------------------------------*/\n// We mixin DayTable, even though there is only a single row of days\n\nvar TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {\n\n\tslotDuration: null, // duration of a \""slot\"", a distinct time segment on given day, visualized by lines\n\tsnapDuration: null, // granularity of time for dragging and selecting\n\tsnapsPerSlot: null,\n\tlabelFormat: null, // formatting string for times running along vertical axis\n\tlabelInterval: null, // duration of how often a label should be displayed for a slot\n\n\tcolEls: null, // cells elements in the day-row background\n\tslatContainerEl: null, // div that wraps all the slat rows\n\tslatEls: null, // elements running horizontally across all columns\n\tnowIndicatorEls: null,\n\n\tcolCoordCache: null,\n\tslatCoordCache: null,\n\n\n\tconstructor: function() {\n\t\tGrid.apply(this, arguments); // call the super-constructor\n\n\t\tthis.processOptions();\n\t},\n\n\n\t// Renders the time grid into `this.el`, which should already be assigned.\n\t// Relies on the view's colCnt. In the future, this component should probably be self-sufficient.\n\trenderDates: function() {\n\t\tthis.el.html(this.renderHtml());\n\t\tthis.colEls = this.el.find('.fc-day, .fc-disabled-day');\n\t\tthis.slatContainerEl = this.el.find('.fc-slats');\n\t\tthis.slatEls = this.slatContainerEl.find('tr');\n\n\t\tthis.colCoordCache = new CoordCache({\n\t\t\tels: this.colEls,\n\t\t\tisHorizontal: true\n\t\t});\n\t\tthis.slatCoordCache = new CoordCache({\n\t\t\tels: this.slatEls,\n\t\t\tisVertical: true\n\t\t});\n\n\t\tthis.renderContentSkeleton();\n\t},\n\n\n\t// Renders the basic HTML skeleton for the grid\n\trenderHtml: function() {\n\t\treturn '' +\n\t\t\t'<div class=\""fc-bg\"">' +\n\t\t\t\t'<table>' +\n\t\t\t\t\tthis.renderBgTrHtml(0) + // row=0\n\t\t\t\t'</table>' +\n\t\t\t'</div>' +\n\t\t\t'<div class=\""fc-slats\"">' +\n\t\t\t\t'<table>' +\n\t\t\t\t\tthis.renderSlatRowHtml() +\n\t\t\t\t'</table>' +\n\t\t\t'</div>';\n\t},\n\n\n\t// Generates the HTML for the horizontal \""slats\"" that run width-wise. Has a time axis on a side. Depends on RTL.\n\trenderSlatRowHtml: function() {\n\t\tvar view = this.view;\n\t\tvar isRTL = this.isRTL;\n\t\tvar html = '';\n\t\tvar slotTime = moment.duration(+this.view.minTime); // wish there was .clone() for durations\n\t\tvar slotDate; // will be on the view's first day, but we only care about its time\n\t\tvar isLabeled;\n\t\tvar axisHtml;\n\n\t\t// Calculate the time for each slot\n\t\twhile (slotTime < this.view.maxTime) {\n\t\t\tslotDate = this.start.clone().time(slotTime);\n\t\t\tisLabeled = isInt(divideDurationByDuration(slotTime, this.labelInterval));\n\n\t\t\taxisHtml =\n\t\t\t\t'<td class=\""fc-axis fc-time ' + view.widgetContentClass + '\"" ' + view.axisStyleAttr() + '>' +\n\t\t\t\t\t(isLabeled ?\n\t\t\t\t\t\t'<span>' + // for matchCellWidths\n\t\t\t\t\t\t\thtmlEscape(slotDate.format(this.labelFormat)) +\n\t\t\t\t\t\t'</span>' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t'</td>';\n\n\t\t\thtml +=\n\t\t\t\t'<tr data-time=\""' + slotDate.format('HH:mm:ss') + '\""' +\n\t\t\t\t\t(isLabeled ? '' : ' class=\""fc-minor\""') +\n\t\t\t\t\t'>' +\n\t\t\t\t\t(!isRTL ? axisHtml : '') +\n\t\t\t\t\t'<td class=\""' + view.widgetContentClass + '\""/>' +\n\t\t\t\t\t(isRTL ? axisHtml : '') +\n\t\t\t\t\""</tr>\"";\n\n\t\t\tslotTime.add(this.slotDuration);\n\t\t}\n\n\t\treturn html;\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Parses various options into properties of this object\n\tprocessOptions: function() {\n\t\tvar view = this.view;\n\t\tvar slotDuration = view.opt('slotDuration');\n\t\tvar snapDuration = view.opt('snapDuration');\n\t\tvar input;\n\n\t\tslotDuration = moment.duration(slotDuration);\n\t\tsnapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\n\n\t\tthis.slotDuration = slotDuration;\n\t\tthis.snapDuration = snapDuration;\n\t\tthis.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\n\n\t\tthis.minResizeDuration = snapDuration; // hack\n\n\t\t// might be an array value (for TimelineView).\n\t\t// if so, getting the most granular entry (the last one probably).\n\t\tinput = view.opt('slotLabelFormat');\n\t\tif ($.isArray(input)) {\n\t\t\tinput = input[input.length - 1];\n\t\t}\n\n\t\tthis.labelFormat =\n\t\t\tinput ||\n\t\t\tview.opt('smallTimeFormat'); // the computed default\n\n\t\tinput = view.opt('slotLabelInterval');\n\t\tthis.labelInterval = input ?\n\t\t\tmoment.duration(input) :\n\t\t\tthis.computeLabelInterval(slotDuration);\n\t},\n\n\n\t// Computes an automatic value for slotLabelInterval\n\tcomputeLabelInterval: function(slotDuration) {\n\t\tvar i;\n\t\tvar labelInterval;\n\t\tvar slotsPerLabel;\n\n\t\t// find the smallest stock label interval that results in more than one slots-per-label\n\t\tfor (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\n\t\t\tlabelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\n\t\t\tslotsPerLabel = divideDurationByDuration(labelInterval, slotDuration);\n\t\t\tif (isInt(slotsPerLabel) && slotsPerLabel > 1) {\n\t\t\t\treturn labelInterval;\n\t\t\t}\n\t\t}\n\n\t\treturn moment.duration(slotDuration); // fall back. clone\n\t},\n\n\n\t// Computes a default event time formatting string if `timeFormat` is not explicitly defined\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.view.opt('noMeridiemTimeFormat'); // like \""6:30\"" (no AM/PM)\n\t},\n\n\n\t// Computes a default `displayEventEnd` value if one is not expliclty defined\n\tcomputeDisplayEventEnd: function() {\n\t\treturn true;\n\t},\n\n\n\t/* Hit System\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tprepareHits: function() {\n\t\tthis.colCoordCache.build();\n\t\tthis.slatCoordCache.build();\n\t},\n\n\n\treleaseHits: function() {\n\t\tthis.colCoordCache.clear();\n\t\t// NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\n\t},\n\n\n\tqueryHit: function(leftOffset, topOffset) {\n\t\tvar snapsPerSlot = this.snapsPerSlot;\n\t\tvar colCoordCache = this.colCoordCache;\n\t\tvar slatCoordCache = this.slatCoordCache;\n\n\t\tif (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\n\t\t\tvar colIndex = colCoordCache.getHorizontalIndex(leftOffset);\n\t\t\tvar slatIndex = slatCoordCache.getVerticalIndex(topOffset);\n\n\t\t\tif (colIndex != null && slatIndex != null) {\n\t\t\t\tvar slatTop = slatCoordCache.getTopOffset(slatIndex);\n\t\t\t\tvar slatHeight = slatCoordCache.getHeight(slatIndex);\n\t\t\t\tvar partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\n\t\t\t\tvar localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\n\t\t\t\tvar snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\n\t\t\t\tvar snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;\n\t\t\t\tvar snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;\n\n\t\t\t\treturn {\n\t\t\t\t\tcol: colIndex,\n\t\t\t\t\tsnap: snapIndex,\n\t\t\t\t\tcomponent: this, // needed unfortunately :(\n\t\t\t\t\tleft: colCoordCache.getLeftOffset(colIndex),\n\t\t\t\t\tright: colCoordCache.getRightOffset(colIndex),\n\t\t\t\t\ttop: snapTop,\n\t\t\t\t\tbottom: snapBottom\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t},\n\n\n\tgetHitSpan: function(hit) {\n\t\tvar start = this.getCellDate(0, hit.col); // row=0\n\t\tvar time = this.computeSnapTime(hit.snap); // pass in the snap-index\n\t\tvar end;\n\n\t\tstart.time(time);\n\t\tend = start.clone().add(this.snapDuration);\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\tgetHitEl: function(hit) {\n\t\treturn this.colEls.eq(hit.col);\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trangeUpdated: function() {\n\t\tthis.updateDayTable();\n\t},\n\n\n\t// Given a row number of the grid, representing a \""snap\"", returns a time (Duration) from its start-of-day\n\tcomputeSnapTime: function(snapIndex) {\n\t\treturn moment.duration(this.view.minTime + this.snapDuration * snapIndex);\n\t},\n\n\n\t// Slices up the given span (unzoned start/end with other misc data) into an array of segments\n\tspanToSegs: function(span) {\n\t\tvar segs = this.sliceRangeByTimes(span);\n\t\tvar i;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tif (this.isRTL) {\n\t\t\t\tsegs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsegs[i].col = segs[i].dayIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\tsliceRangeByTimes: function(range) {\n\t\tvar segs = [];\n\t\tvar seg;\n\t\tvar dayIndex;\n\t\tvar dayDate;\n\t\tvar dayRange;\n\n\t\tfor (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\n\t\t\tdayDate = this.dayDates[dayIndex].clone().time(0); // TODO: better API for this?\n\t\t\tdayRange = {\n\t\t\t\tstart: dayDate.clone().add(this.view.minTime), // don't use .time() because it sux with negatives\n\t\t\t\tend: dayDate.clone().add(this.view.maxTime)\n\t\t\t};\n\t\t\tseg = intersectRanges(range, dayRange); // both will be ambig timezone\n\t\t\tif (seg) {\n\t\t\t\tseg.dayIndex = dayIndex;\n\t\t\t\tsegs.push(seg);\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t/* Coordinates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tupdateSize: function(isResize) { // NOT a standard Grid method\n\t\tthis.slatCoordCache.build();\n\n\t\tif (isResize) {\n\t\t\tthis.updateSegVerticals(\n\t\t\t\t[].concat(this.fgSegs || [], this.bgSegs || [], this.businessSegs || [])\n\t\t\t);\n\t\t}\n\t},\n\n\n\tgetTotalSlatHeight: function() {\n\t\treturn this.slatContainerEl.outerHeight();\n\t},\n\n\n\t// Computes the top coordinate, relative to the bounds of the grid, of the given date.\n\t// A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n\tcomputeDateTop: function(date, startOfDayDate) {\n\t\treturn this.computeTimeTop(\n\t\t\tmoment.duration(\n\t\t\t\tdate - startOfDayDate.clone().stripTime()\n\t\t\t)\n\t\t);\n\t},\n\n\n\t// Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n\tcomputeTimeTop: function(time) {\n\t\tvar len = this.slatEls.length;\n\t\tvar slatCoverage = (time - this.view.minTime) / this.slotDuration; // floating-point value of # of slots covered\n\t\tvar slatIndex;\n\t\tvar slatRemainder;\n\n\t\t// compute a floating-point number for how many slats should be progressed through.\n\t\t// from 0 to number of slats (inclusive)\n\t\t// constrained because minTime/maxTime might be customized.\n\t\tslatCoverage = Math.max(0, slatCoverage);\n\t\tslatCoverage = Math.min(len, slatCoverage);\n\n\t\t// an integer index of the furthest whole slat\n\t\t// from 0 to number slats (*exclusive*, so len-1)\n\t\tslatIndex = Math.floor(slatCoverage);\n\t\tslatIndex = Math.min(slatIndex, len - 1);\n\n\t\t// how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\n\t\t// could be 1.0 if slatCoverage is covering *all* the slots\n\t\tslatRemainder = slatCoverage - slatIndex;\n\n\t\treturn this.slatCoordCache.getTopPosition(slatIndex) +\n\t\t\tthis.slatCoordCache.getHeight(slatIndex) * slatRemainder;\n\t},\n\n\n\n\t/* Event Drag Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being dragged over the specified date(s).\n\t// A returned value of `true` signals that a mock \""helper\"" event has been rendered.\n\trenderDrag: function(eventLocation, seg) {\n\t\tvar eventSpans;\n\t\tvar i;\n\n\t\tif (seg) { // if there is event information for this drag, render a helper event\n\n\t\t\t// returns mock event elements\n\t\t\t// signal that a helper has been rendered\n\t\t\treturn this.renderEventLocationHelper(eventLocation, seg);\n\t\t}\n\t\telse { // otherwise, just render a highlight\n\t\t\teventSpans = this.eventToSpans(eventLocation);\n\n\t\t\tfor (i = 0; i < eventSpans.length; i++) {\n\t\t\t\tthis.renderHighlight(eventSpans[i]);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of an event being dragged\n\tunrenderDrag: function() {\n\t\tthis.unrenderHelper();\n\t\tthis.unrenderHighlight();\n\t},\n\n\n\t/* Event Resize Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being resized\n\trenderEventResize: function(eventLocation, seg) {\n\t\treturn this.renderEventLocationHelper(eventLocation, seg); // returns mock event elements\n\t},\n\n\n\t// Unrenders any visual indication of an event being resized\n\tunrenderEventResize: function() {\n\t\tthis.unrenderHelper();\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a mock \""helper\"" event. `sourceSeg` is the original segment object and might be null (an external drag)\n\trenderHelper: function(event, sourceSeg) {\n\t\treturn this.renderHelperSegs(this.eventToSegs(event), sourceSeg); // returns mock event elements\n\t},\n\n\n\t// Unrenders any mock helper event\n\tunrenderHelper: function() {\n\t\tthis.unrenderHelperSegs();\n\t},\n\n\n\t/* Business Hours\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBusinessHours: function() {\n\t\tthis.renderBusinessSegs(\n\t\t\tthis.buildBusinessHourSegs()\n\t\t);\n\t},\n\n\n\tunrenderBusinessHours: function() {\n\t\tthis.unrenderBusinessSegs();\n\t},\n\n\n\t/* Now Indicator\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tgetNowIndicatorUnit: function() {\n\t\treturn 'minute'; // will refresh on the minute\n\t},\n\n\n\trenderNowIndicator: function(date) {\n\t\t// seg system might be overkill, but it handles scenario where line needs to be rendered\n\t\t//  more than once because of columns with the same date (resources columns for example)\n\t\tvar segs = this.spanToSegs({ start: date, end: date });\n\t\tvar top = this.computeDateTop(date, date);\n\t\tvar nodes = [];\n\t\tvar i;\n\n\t\t// render lines within the columns\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tnodes.push($('<div class=\""fc-now-indicator fc-now-indicator-line\""></div>')\n\t\t\t\t.css('top', top)\n\t\t\t\t.appendTo(this.colContainerEls.eq(segs[i].col))[0]);\n\t\t}\n\n\t\t// render an arrow over the axis\n\t\tif (segs.length > 0) { // is the current time in view?\n\t\t\tnodes.push($('<div class=\""fc-now-indicator fc-now-indicator-arrow\""></div>')\n\t\t\t\t.css('top', top)\n\t\t\t\t.appendTo(this.el.find('.fc-content-skeleton'))[0]);\n\t\t}\n\n\t\tthis.nowIndicatorEls = $(nodes);\n\t},\n\n\n\tunrenderNowIndicator: function() {\n\t\tif (this.nowIndicatorEls) {\n\t\t\tthis.nowIndicatorEls.remove();\n\t\t\tthis.nowIndicatorEls = null;\n\t\t}\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\n\trenderSelection: function(span) {\n\t\tif (this.view.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\n\n\t\t\t// normally acceps an eventLocation, span has a start/end, which is good enough\n\t\t\tthis.renderEventLocationHelper(span);\n\t\t}\n\t\telse {\n\t\t\tthis.renderHighlight(span);\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of a selection\n\tunrenderSelection: function() {\n\t\tthis.unrenderHelper();\n\t\tthis.unrenderHighlight();\n\t},\n\n\n\t/* Highlight\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderHighlight: function(span) {\n\t\tthis.renderHighlightSegs(this.spanToSegs(span));\n\t},\n\n\n\tunrenderHighlight: function() {\n\t\tthis.unrenderHighlightSegs();\n\t}\n\n});\n\n;;\n\n/* Methods for rendering SEGMENTS, pieces of content that live on the view\n ( this file is no longer just for events )\n----------------------------------------------------------------------------------------------------------------------*/\n\nTimeGrid.mixin({\n\n\tcolContainerEls: null, // containers for each column\n\n\t// inner-containers for each column where different types of segs live\n\tfgContainerEls: null,\n\tbgContainerEls: null,\n\thelperContainerEls: null,\n\thighlightContainerEls: null,\n\tbusinessContainerEls: null,\n\n\t// arrays of different types of displayed segments\n\tfgSegs: null,\n\tbgSegs: null,\n\thelperSegs: null,\n\thighlightSegs: null,\n\tbusinessSegs: null,\n\n\n\t// Renders the DOM that the view's content will live in\n\trenderContentSkeleton: function() {\n\t\tvar cellHtml = '';\n\t\tvar i;\n\t\tvar skeletonEl;\n\n\t\tfor (i = 0; i < this.colCnt; i++) {\n\t\t\tcellHtml +=\n\t\t\t\t'<td>' +\n\t\t\t\t\t'<div class=\""fc-content-col\"">' +\n\t\t\t\t\t\t'<div class=\""fc-event-container fc-helper-container\""></div>' +\n\t\t\t\t\t\t'<div class=\""fc-event-container\""></div>' +\n\t\t\t\t\t\t'<div class=\""fc-highlight-container\""></div>' +\n\t\t\t\t\t\t'<div class=\""fc-bgevent-container\""></div>' +\n\t\t\t\t\t\t'<div class=\""fc-business-container\""></div>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</td>';\n\t\t}\n\n\t\tskeletonEl = $(\n\t\t\t'<div class=\""fc-content-skeleton\"">' +\n\t\t\t\t'<table>' +\n\t\t\t\t\t'<tr>' + cellHtml + '</tr>' +\n\t\t\t\t'</table>' +\n\t\t\t'</div>'\n\t\t);\n\n\t\tthis.colContainerEls = skeletonEl.find('.fc-content-col');\n\t\tthis.helperContainerEls = skeletonEl.find('.fc-helper-container');\n\t\tthis.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\n\t\tthis.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\n\t\tthis.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\n\t\tthis.businessContainerEls = skeletonEl.find('.fc-business-container');\n\n\t\tthis.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\n\t\tthis.el.append(skeletonEl);\n\t},\n\n\n\t/* Foreground Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderFgSegs: function(segs) {\n\t\tsegs = this.renderFgSegsIntoContainers(segs, this.fgContainerEls);\n\t\tthis.fgSegs = segs;\n\t\treturn segs; // needed for Grid::renderEvents\n\t},\n\n\n\tunrenderFgSegs: function() {\n\t\tthis.unrenderNamedSegs('fgSegs');\n\t},\n\n\n\t/* Foreground Helper Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderHelperSegs: function(segs, sourceSeg) {\n\t\tvar helperEls = [];\n\t\tvar i, seg;\n\t\tvar sourceEl;\n\n\t\tsegs = this.renderFgSegsIntoContainers(segs, this.helperContainerEls);\n\n\t\t// Try to make the segment that is in the same row as sourceSeg look the same\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tif (sourceSeg && sourceSeg.col === seg.col) {\n\t\t\t\tsourceEl = sourceSeg.el;\n\t\t\t\tseg.el.css({\n\t\t\t\t\tleft: sourceEl.css('left'),\n\t\t\t\t\tright: sourceEl.css('right'),\n\t\t\t\t\t'margin-left': sourceEl.css('margin-left'),\n\t\t\t\t\t'margin-right': sourceEl.css('margin-right')\n\t\t\t\t});\n\t\t\t}\n\t\t\thelperEls.push(seg.el[0]);\n\t\t}\n\n\t\tthis.helperSegs = segs;\n\n\t\treturn $(helperEls); // must return rendered helpers\n\t},\n\n\n\tunrenderHelperSegs: function() {\n\t\tthis.unrenderNamedSegs('helperSegs');\n\t},\n\n\n\t/* Background Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBgSegs: function(segs) {\n\t\tsegs = this.renderFillSegEls('bgEvent', segs); // TODO: old fill system\n\t\tthis.updateSegVerticals(segs);\n\t\tthis.attachSegsByCol(this.groupSegsByCol(segs), this.bgContainerEls);\n\t\tthis.bgSegs = segs;\n\t\treturn segs; // needed for Grid::renderEvents\n\t},\n\n\n\tunrenderBgSegs: function() {\n\t\tthis.unrenderNamedSegs('bgSegs');\n\t},\n\n\n\t/* Highlight\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderHighlightSegs: function(segs) {\n\t\tsegs = this.renderFillSegEls('highlight', segs); // TODO: old fill system\n\t\tthis.updateSegVerticals(segs);\n\t\tthis.attachSegsByCol(this.groupSegsByCol(segs), this.highlightContainerEls);\n\t\tthis.highlightSegs = segs;\n\t},\n\n\n\tunrenderHighlightSegs: function() {\n\t\tthis.unrenderNamedSegs('highlightSegs');\n\t},\n\n\n\t/* Business Hours\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBusinessSegs: function(segs) {\n\t\tsegs = this.renderFillSegEls('businessHours', segs); // TODO: old fill system\n\t\tthis.updateSegVerticals(segs);\n\t\tthis.attachSegsByCol(this.groupSegsByCol(segs), this.businessContainerEls);\n\t\tthis.businessSegs = segs;\n\t},\n\n\n\tunrenderBusinessSegs: function() {\n\t\tthis.unrenderNamedSegs('businessSegs');\n\t},\n\n\n\t/* Seg Rendering Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\n\tgroupSegsByCol: function(segs) {\n\t\tvar segsByCol = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < this.colCnt; i++) {\n\t\t\tsegsByCol.push([]);\n\t\t}\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tsegsByCol[segs[i].col].push(segs[i]);\n\t\t}\n\n\t\treturn segsByCol;\n\t},\n\n\n\t// Given segments grouped by column, insert the segments' elements into a parallel array of container\n\t// elements, each living within a column.\n\tattachSegsByCol: function(segsByCol, containerEls) {\n\t\tvar col;\n\t\tvar segs;\n\t\tvar i;\n\n\t\tfor (col = 0; col < this.colCnt; col++) { // iterate each column grouping\n\t\t\tsegs = segsByCol[col];\n\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\tcontainerEls.eq(col).append(segs[i].el);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Given the name of a property of `this` object, assumed to be an array of segments,\n\t// loops through each segment and removes from DOM. Will null-out the property afterwards.\n\tunrenderNamedSegs: function(propName) {\n\t\tvar segs = this[propName];\n\t\tvar i;\n\n\t\tif (segs) {\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\tsegs[i].el.remove();\n\t\t\t}\n\t\t\tthis[propName] = null;\n\t\t}\n\t},\n\n\n\n\t/* Foreground Event Rendering Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Given an array of foreground segments, render a DOM element for each, computes position,\n\t// and attaches to the column inner-container elements.\n\trenderFgSegsIntoContainers: function(segs, containerEls) {\n\t\tvar segsByCol;\n\t\tvar col;\n\n\t\tsegs = this.renderFgSegEls(segs); // will call fgSegHtml\n\t\tsegsByCol = this.groupSegsByCol(segs);\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tthis.updateFgSegCoords(segsByCol[col]);\n\t\t}\n\n\t\tthis.attachSegsByCol(segsByCol, containerEls);\n\n\t\treturn segs;\n\t},\n\n\n\t// Renders the HTML for a single event segment's default rendering\n\tfgSegHtml: function(seg, disableResizing) {\n\t\tvar view = this.view;\n\t\tvar event = seg.event;\n\t\tvar isDraggable = view.isEventDraggable(event);\n\t\tvar isResizableFromStart = !disableResizing && seg.isStart && view.isEventResizableFromStart(event);\n\t\tvar isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventResizableFromEnd(event);\n\t\tvar classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\n\t\tvar skinCss = cssToStr(this.getSegSkinCss(seg));\n\t\tvar timeText;\n\t\tvar fullTimeText; // more verbose time text. for the print stylesheet\n\t\tvar startTimeText; // just the start time text\n\n\t\tclasses.unshift('fc-time-grid-event', 'fc-v-event');\n\n\t\tif (view.isMultiDayEvent(event)) { // if the event appears to span more than one day...\n\t\t\t// Don't display time text on segments that run entirely through a day.\n\t\t\t// That would appear as midnight-midnight and would look dumb.\n\t\t\t// Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\n\t\t\tif (seg.isStart || seg.isEnd) {\n\t\t\t\ttimeText = this.getEventTimeText(seg);\n\t\t\t\tfullTimeText = this.getEventTimeText(seg, 'LT');\n\t\t\t\tstartTimeText = this.getEventTimeText(seg, null, false); // displayEnd=false\n\t\t\t}\n\t\t} else {\n\t\t\t// Display the normal time text for the *event's* times\n\t\t\ttimeText = this.getEventTimeText(event);\n\t\t\tfullTimeText = this.getEventTimeText(event, 'LT');\n\t\t\tstartTimeText = this.getEventTimeText(event, null, false); // displayEnd=false\n\t\t}\n\n\t\treturn '<a class=\""' + classes.join(' ') + '\""' +\n\t\t\t(event.url ?\n\t\t\t\t' href=\""' + htmlEscape(event.url) + '\""' :\n\t\t\t\t''\n\t\t\t\t) +\n\t\t\t(skinCss ?\n\t\t\t\t' style=\""' + skinCss + '\""' :\n\t\t\t\t''\n\t\t\t\t) +\n\t\t\t'>' +\n\t\t\t\t'<div class=\""fc-content\"">' +\n\t\t\t\t\t(timeText ?\n\t\t\t\t\t\t'<div class=\""fc-time\""' +\n\t\t\t\t\t\t' data-start=\""' + htmlEscape(startTimeText) + '\""' +\n\t\t\t\t\t\t' data-full=\""' + htmlEscape(fullTimeText) + '\""' +\n\t\t\t\t\t\t'>' +\n\t\t\t\t\t\t\t'<span>' + htmlEscape(timeText) + '</span>' +\n\t\t\t\t\t\t'</div>' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t\t(event.title ?\n\t\t\t\t\t\t'<div class=\""fc-title\"">' +\n\t\t\t\t\t\t\thtmlEscape(event.title) +\n\t\t\t\t\t\t'</div>' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t'</div>' +\n\t\t\t\t'<div class=\""fc-bg\""/>' +\n\t\t\t\t/* TODO: write CSS for this\n\t\t\t\t(isResizableFromStart ?\n\t\t\t\t\t'<div class=\""fc-resizer fc-start-resizer\"" />' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t\t*/\n\t\t\t\t(isResizableFromEnd ?\n\t\t\t\t\t'<div class=\""fc-resizer fc-end-resizer\"" />' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t'</a>';\n\t},\n\n\n\t/* Seg Position Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Refreshes the CSS top/bottom coordinates for each segment element.\n\t// Works when called after initial render, after a window resize/zoom for example.\n\tupdateSegVerticals: function(segs) {\n\t\tthis.computeSegVerticals(segs);\n\t\tthis.assignSegVerticals(segs);\n\t},\n\n\n\t// For each segment in an array, computes and assigns its top and bottom properties\n\tcomputeSegVerticals: function(segs) {\n\t\tvar i, seg;\n\t\tvar dayDate;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tdayDate = this.dayDates[seg.dayIndex];\n\n\t\t\tseg.top = this.computeDateTop(seg.start, dayDate);\n\t\t\tseg.bottom = this.computeDateTop(seg.end, dayDate);\n\t\t}\n\t},\n\n\n\t// Given segments that already have their top/bottom properties computed, applies those values to\n\t// the segments' elements.\n\tassignSegVerticals: function(segs) {\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tseg.el.css(this.generateSegVerticalCss(seg));\n\t\t}\n\t},\n\n\n\t// Generates an object with CSS properties for the top/bottom coordinates of a segment element\n\tgenerateSegVerticalCss: function(seg) {\n\t\treturn {\n\t\t\ttop: seg.top,\n\t\t\tbottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\n\t\t};\n\t},\n\n\n\t/* Foreground Event Positioning Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Given segments that are assumed to all live in the *same column*,\n\t// compute their verical/horizontal coordinates and assign to their elements.\n\tupdateFgSegCoords: function(segs) {\n\t\tthis.computeSegVerticals(segs); // horizontals relies on this\n\t\tthis.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\n\t\tthis.assignSegVerticals(segs);\n\t\tthis.assignFgSegHorizontals(segs);\n\t},\n\n\n\t// Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\n\t// NOTE: Also reorders the given array by date!\n\tcomputeFgSegHorizontals: function(segs) {\n\t\tvar levels;\n\t\tvar level0;\n\t\tvar i;\n\n\t\tthis.sortEventSegs(segs); // order by certain criteria\n\t\tlevels = buildSlotSegLevels(segs);\n\t\tcomputeForwardSlotSegs(levels);\n\n\t\tif ((level0 = levels[0])) {\n\n\t\t\tfor (i = 0; i < level0.length; i++) {\n\t\t\t\tcomputeSlotSegPressures(level0[i]);\n\t\t\t}\n\n\t\t\tfor (i = 0; i < level0.length; i++) {\n\t\t\t\tthis.computeFgSegForwardBack(level0[i], 0, 0);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\n\t// from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \""left\"" and\n\t// seg.forwardCoord maps to \""right\"" (via percentage). Vice-versa if the calendar is right-to-left.\n\t//\n\t// The segment might be part of a \""series\"", which means consecutive segments with the same pressure\n\t// who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\n\t// segments behind this one in the current series, and `seriesBackwardCoord` is the starting\n\t// coordinate of the first segment in the series.\n\tcomputeFgSegForwardBack: function(seg, seriesBackwardPressure, seriesBackwardCoord) {\n\t\tvar forwardSegs = seg.forwardSegs;\n\t\tvar i;\n\n\t\tif (seg.forwardCoord === undefined) { // not already computed\n\n\t\t\tif (!forwardSegs.length) {\n\n\t\t\t\t// if there are no forward segments, this segment should butt up against the edge\n\t\t\t\tseg.forwardCoord = 1;\n\t\t\t}\n\t\t\telse {\n\n\t\t\t\t// sort highest pressure first\n\t\t\t\tthis.sortForwardSegs(forwardSegs);\n\n\t\t\t\t// this segment's forwardCoord will be calculated from the backwardCoord of the\n\t\t\t\t// highest-pressure forward segment.\n\t\t\t\tthis.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\n\t\t\t\tseg.forwardCoord = forwardSegs[0].backwardCoord;\n\t\t\t}\n\n\t\t\t// calculate the backwardCoord from the forwardCoord. consider the series\n\t\t\tseg.backwardCoord = seg.forwardCoord -\n\t\t\t\t(seg.forwardCoord - seriesBackwardCoord) / // available width for series\n\t\t\t\t(seriesBackwardPressure + 1); // # of segments in the series\n\n\t\t\t// use this segment's coordinates to computed the coordinates of the less-pressurized\n\t\t\t// forward segments\n\t\t\tfor (i=0; i<forwardSegs.length; i++) {\n\t\t\t\tthis.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\n\t\t\t}\n\t\t}\n\t},\n\n\n\tsortForwardSegs: function(forwardSegs) {\n\t\tforwardSegs.sort(proxy(this, 'compareForwardSegs'));\n\t},\n\n\n\t// A cmp function for determining which forward segment to rely on more when computing coordinates.\n\tcompareForwardSegs: function(seg1, seg2) {\n\t\t// put higher-pressure first\n\t\treturn seg2.forwardPressure - seg1.forwardPressure ||\n\t\t\t// put segments that are closer to initial edge first (and favor ones with no coords yet)\n\t\t\t(seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||\n\t\t\t// do normal sorting...\n\t\t\tthis.compareEventSegs(seg1, seg2);\n\t},\n\n\n\t// Given foreground event segments that have already had their position coordinates computed,\n\t// assigns position-related CSS values to their elements.\n\tassignFgSegHorizontals: function(segs) {\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tseg.el.css(this.generateFgSegHorizontalCss(seg));\n\n\t\t\t// if the height is short, add a className for alternate styling\n\t\t\tif (seg.bottom - seg.top < 30) {\n\t\t\t\tseg.el.addClass('fc-short');\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Generates an object with CSS properties/values that should be applied to an event segment element.\n\t// Contains important positioning-related properties that should be applied to any event element, customized or not.\n\tgenerateFgSegHorizontalCss: function(seg) {\n\t\tvar shouldOverlap = this.view.opt('slotEventOverlap');\n\t\tvar backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\n\t\tvar forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\n\t\tvar props = this.generateSegVerticalCss(seg); // get top/bottom first\n\t\tvar left; // amount of space from left edge, a fraction of the total width\n\t\tvar right; // amount of space from right edge, a fraction of the total width\n\n\t\tif (shouldOverlap) {\n\t\t\t// double the width, but don't go beyond the maximum forward coordinate (1.0)\n\t\t\tforwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\n\t\t}\n\n\t\tif (this.isRTL) {\n\t\t\tleft = 1 - forwardCoord;\n\t\t\tright = backwardCoord;\n\t\t}\n\t\telse {\n\t\t\tleft = backwardCoord;\n\t\t\tright = 1 - forwardCoord;\n\t\t}\n\n\t\tprops.zIndex = seg.level + 1; // convert from 0-base to 1-based\n\t\tprops.left = left * 100 + '%';\n\t\tprops.right = right * 100 + '%';\n\n\t\tif (shouldOverlap && seg.forwardPressure) {\n\t\t\t// add padding to the edge so that forward stacked events don't cover the resizer's icon\n\t\t\tprops[this.isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\n\t\t}\n\n\t\treturn props;\n\t}\n\n});\n\n\n// Builds an array of segments \""levels\"". The first level will be the leftmost tier of segments if the calendar is\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\nfunction buildSlotSegLevels(segs) {\n\tvar levels = [];\n\tvar i, seg;\n\tvar j;\n\n\tfor (i=0; i<segs.length; i++) {\n\t\tseg = segs[i];\n\n\t\t// go through all the levels and stop on the first level where there are no collisions\n\t\tfor (j=0; j<levels.length; j++) {\n\t\t\tif (!computeSlotSegCollisions(seg, levels[j]).length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tseg.level = j;\n\n\t\t(levels[j] || (levels[j] = [])).push(seg);\n\t}\n\n\treturn levels;\n}\n\n\n// For every segment, figure out the other segments that are in subsequent\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\nfunction computeForwardSlotSegs(levels) {\n\tvar i, level;\n\tvar j, seg;\n\tvar k;\n\n\tfor (i=0; i<levels.length; i++) {\n\t\tlevel = levels[i];\n\n\t\tfor (j=0; j<level.length; j++) {\n\t\t\tseg = level[j];\n\n\t\t\tseg.forwardSegs = [];\n\t\t\tfor (k=i+1; k<levels.length; k++) {\n\t\t\t\tcomputeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\nfunction computeSlotSegPressures(seg) {\n\tvar forwardSegs = seg.forwardSegs;\n\tvar forwardPressure = 0;\n\tvar i, forwardSeg;\n\n\tif (seg.forwardPressure === undefined) { // not already computed\n\n\t\tfor (i=0; i<forwardSegs.length; i++) {\n\t\t\tforwardSeg = forwardSegs[i];\n\n\t\t\t// figure out the child's maximum forward path\n\t\t\tcomputeSlotSegPressures(forwardSeg);\n\n\t\t\t// either use the existing maximum, or use the child's forward pressure\n\t\t\t// plus one (for the forwardSeg itself)\n\t\t\tforwardPressure = Math.max(\n\t\t\t\tforwardPressure,\n\t\t\t\t1 + forwardSeg.forwardPressure\n\t\t\t);\n\t\t}\n\n\t\tseg.forwardPressure = forwardPressure;\n\t}\n}\n\n\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\n// Append into an optionally-supplied `results` array and return.\nfunction computeSlotSegCollisions(seg, otherSegs, results) {\n\tresults = results || [];\n\n\tfor (var i=0; i<otherSegs.length; i++) {\n\t\tif (isSlotSegCollision(seg, otherSegs[i])) {\n\t\t\tresults.push(otherSegs[i]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\n\n// Do these segments occupy the same vertical space?\nfunction isSlotSegCollision(seg1, seg2) {\n\treturn seg1.bottom > seg2.top && seg1.top < seg2.bottom;\n}\n\n;;\n\n/* An abstract class from which other views inherit from\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar View = FC.View = Model.extend({\n\n\ttype: null, // subclass' view name (string)\n\tname: null, // deprecated. use `type` instead\n\ttitle: null, // the text that will be displayed in the header's title\n\n\tcalendar: null, // owner Calendar object\n\tviewSpec: null,\n\toptions: null, // hash containing all options. already merged with view-specific-options\n\tel: null, // the view's containing element. set by Calendar\n\n\trenderQueue: null,\n\tbatchRenderDepth: 0,\n\tisDatesRendered: false,\n\tisEventsRendered: false,\n\tisBaseRendered: false, // related to viewRender/viewDestroy triggers\n\n\tqueuedScroll: null,\n\n\tisRTL: false,\n\tisSelected: false, // boolean whether a range of time is user-selected or not\n\tselectedEvent: null,\n\n\teventOrderSpecs: null, // criteria for ordering events when they have same date/time\n\n\t// classNames styled by jqui themes\n\twidgetHeaderClass: null,\n\twidgetContentClass: null,\n\thighlightStateClass: null,\n\n\t// for date utils, computed from options\n\tnextDayThreshold: null,\n\tisHiddenDayHash: null,\n\n\t// now indicator\n\tisNowIndicatorRendered: null,\n\tinitialNowDate: null, // result first getNow call\n\tinitialNowQueriedMs: null, // ms time the getNow was called\n\tnowIndicatorTimeoutID: null, // for refresh timing of now indicator\n\tnowIndicatorIntervalID: null, // \""\n\n\n\tconstructor: function(calendar, viewSpec) {\n\t\tModel.prototype.constructor.call(this);\n\n\t\tthis.calendar = calendar;\n\t\tthis.viewSpec = viewSpec;\n\n\t\t// shortcuts\n\t\tthis.type = viewSpec.type;\n\t\tthis.options = viewSpec.options;\n\n\t\t// .name is deprecated\n\t\tthis.name = this.type;\n\n\t\tthis.nextDayThreshold = moment.duration(this.opt('nextDayThreshold'));\n\t\tthis.initThemingProps();\n\t\tthis.initHiddenDays();\n\t\tthis.isRTL = this.opt('isRTL');\n\n\t\tthis.eventOrderSpecs = parseFieldSpecs(this.opt('eventOrder'));\n\n\t\tthis.renderQueue = this.buildRenderQueue();\n\t\tthis.initAutoBatchRender();\n\n\t\tthis.initialize();\n\t},\n\n\n\tbuildRenderQueue: function() {\n\t\tvar _this = this;\n\t\tvar renderQueue = new RenderQueue({\n\t\t\tevent: this.opt('eventRenderWait')\n\t\t});\n\n\t\trenderQueue.on('start', function() {\n\t\t\t_this.freezeHeight();\n\t\t\t_this.addScroll(_this.queryScroll());\n\t\t});\n\n\t\trenderQueue.on('stop', function() {\n\t\t\t_this.thawHeight();\n\t\t\t_this.popScroll();\n\t\t});\n\n\t\treturn renderQueue;\n\t},\n\n\n\tinitAutoBatchRender: function() {\n\t\tvar _this = this;\n\n\t\tthis.on('before:change', function() {\n\t\t\t_this.startBatchRender();\n\t\t});\n\n\t\tthis.on('change', function() {\n\t\t\t_this.stopBatchRender();\n\t\t});\n\t},\n\n\n\tstartBatchRender: function() {\n\t\tif (!(this.batchRenderDepth++)) {\n\t\t\tthis.renderQueue.pause();\n\t\t}\n\t},\n\n\n\tstopBatchRender: function() {\n\t\tif (!(--this.batchRenderDepth)) {\n\t\t\tthis.renderQueue.resume();\n\t\t}\n\t},\n\n\n\t// A good place for subclasses to initialize member variables\n\tinitialize: function() {\n\t\t// subclasses can implement\n\t},\n\n\n\t// Retrieves an option with the given name\n\topt: function(name) {\n\t\treturn this.options[name];\n\t},\n\n\n\t// Triggers handlers that are view-related. Modifies args before passing to calendar.\n\tpubliclyTrigger: function(name, thisObj) { // arguments beyond thisObj are passed along\n\t\tvar calendar = this.calendar;\n\n\t\treturn calendar.publiclyTrigger.apply(\n\t\t\tcalendar,\n\t\t\t[name, thisObj || this].concat(\n\t\t\t\tArray.prototype.slice.call(arguments, 2), // arguments beyond thisObj\n\t\t\t\t[ this ] // always make the last argument a reference to the view. TODO: deprecate\n\t\t\t)\n\t\t);\n\t},\n\n\n\t/* Title and Date Formatting\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Sets the view's title property to the most updated computed value\n\tupdateTitle: function() {\n\t\tthis.title = this.computeTitle();\n\t\tthis.calendar.setToolbarsTitle(this.title);\n\t},\n\n\n\t// Computes what the title at the top of the calendar should be for this view\n\tcomputeTitle: function() {\n\t\tvar range;\n\n\t\t// for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n\t\tif (/^(year|month)$/.test(this.currentRangeUnit)) {\n\t\t\trange = this.currentRange;\n\t\t}\n\t\telse { // for day units or smaller, use the actual day range\n\t\t\trange = this.activeRange;\n\t\t}\n\n\t\treturn this.formatRange(\n\t\t\t{\n\t\t\t\t// in case currentRange has a time, make sure timezone is correct\n\t\t\t\tstart: this.calendar.applyTimezone(range.start),\n\t\t\t\tend: this.calendar.applyTimezone(range.end)\n\t\t\t},\n\t\t\tthis.opt('titleFormat') || this.computeTitleFormat(),\n\t\t\tthis.opt('titleRangeSeparator')\n\t\t);\n\t},\n\n\n\t// Generates the format string that should be used to generate the title for the current date range.\n\t// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\n\tcomputeTitleFormat: function() {\n\t\tif (this.currentRangeUnit == 'year') {\n\t\t\treturn 'YYYY';\n\t\t}\n\t\telse if (this.currentRangeUnit == 'month') {\n\t\t\treturn this.opt('monthYearFormat'); // like \""September 2014\""\n\t\t}\n\t\telse if (this.currentRangeAs('days') > 1) {\n\t\t\treturn 'll'; // multi-day range. shorter, like \""Sep 9 - 10 2014\""\n\t\t}\n\t\telse {\n\t\t\treturn 'LL'; // one day. longer, like \""September 9 2014\""\n\t\t}\n\t},\n\n\n\t// Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\n\t// Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\n\t// The timezones of the dates within `range` will be respected.\n\tformatRange: function(range, formatStr, separator) {\n\t\tvar end = range.end;\n\n\t\tif (!end.hasTime()) { // all-day?\n\t\t\tend = end.clone().subtract(1); // convert to inclusive. last ms of previous day\n\t\t}\n\n\t\treturn formatRange(range.start, end, formatStr, separator, this.opt('isRTL'));\n\t},\n\n\n\tgetAllDayHtml: function() {\n\t\treturn this.opt('allDayHtml') || htmlEscape(this.opt('allDayText'));\n\t},\n\n\n\t/* Navigation\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Generates HTML for an anchor to another view into the calendar.\n\t// Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.\n\t// `gotoOptions` can either be a moment input, or an object with the form:\n\t// { date, type, forceOff }\n\t// `type` is a view-type like \""day\"" or \""week\"". default value is \""day\"".\n\t// `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\n\tbuildGotoAnchorHtml: function(gotoOptions, attrs, innerHtml) {\n\t\tvar date, type, forceOff;\n\t\tvar finalOptions;\n\n\t\tif ($.isPlainObject(gotoOptions)) {\n\t\t\tdate = gotoOptions.date;\n\t\t\ttype = gotoOptions.type;\n\t\t\tforceOff = gotoOptions.forceOff;\n\t\t}\n\t\telse {\n\t\t\tdate = gotoOptions; // a single moment input\n\t\t}\n\t\tdate = FC.moment(date); // if a string, parse it\n\n\t\tfinalOptions = { // for serialization into the link\n\t\t\tdate: date.format('YYYY-MM-DD'),\n\t\t\ttype: type || 'day'\n\t\t};\n\n\t\tif (typeof attrs === 'string') {\n\t\t\tinnerHtml = attrs;\n\t\t\tattrs = null;\n\t\t}\n\n\t\tattrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space\n\t\tinnerHtml = innerHtml || '';\n\n\t\tif (!forceOff && this.opt('navLinks')) {\n\t\t\treturn '<a' + attrs +\n\t\t\t\t' data-goto=\""' + htmlEscape(JSON.stringify(finalOptions)) + '\"">' +\n\t\t\t\tinnerHtml +\n\t\t\t\t'</a>';\n\t\t}\n\t\telse {\n\t\t\treturn '<span' + attrs + '>' +\n\t\t\t\tinnerHtml +\n\t\t\t\t'</span>';\n\t\t}\n\t},\n\n\n\t// Rendering Non-date-related Content\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Sets the container element that the view should render inside of, does global DOM-related initializations,\n\t// and renders all the non-date-related content inside.\n\tsetElement: function(el) {\n\t\tthis.el = el;\n\t\tthis.bindGlobalHandlers();\n\t\tthis.bindBaseRenderHandlers();\n\t\tthis.renderSkeleton();\n\t},\n\n\n\t// Removes the view's container element from the DOM, clearing any content beforehand.\n\t// Undoes any other DOM-related attachments.\n\tremoveElement: function() {\n\t\tthis.unsetDate();\n\t\tthis.unrenderSkeleton();\n\n\t\tthis.unbindGlobalHandlers();\n\t\tthis.unbindBaseRenderHandlers();\n\n\t\tthis.el.remove();\n\t\t// NOTE: don't null-out this.el in case the View was destroyed within an API callback.\n\t\t// We don't null-out the View's other jQuery element references upon destroy,\n\t\t//  so we shouldn't kill this.el either.\n\t},\n\n\n\t// Renders the basic structure of the view before any content is rendered\n\trenderSkeleton: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Unrenders the basic structure of the view\n\tunrenderSkeleton: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Date Setting/Unsetting\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tsetDate: function(date) {\n\t\tvar currentDateProfile = this.get('dateProfile');\n\t\tvar newDateProfile = this.buildDateProfile(date, null, true); // forceToValid=true\n\n\t\tif (\n\t\t\t!currentDateProfile ||\n\t\t\t!isRangesEqual(currentDateProfile.activeRange, newDateProfile.activeRange)\n\t\t) {\n\t\t\tthis.set('dateProfile', newDateProfile);\n\t\t}\n\n\t\treturn newDateProfile.date;\n\t},\n\n\n\tunsetDate: function() {\n\t\tthis.unset('dateProfile');\n\t},\n\n\n\t// Date Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\trequestDateRender: function(dateProfile) {\n\t\tvar _this = this;\n\n\t\tthis.renderQueue.queue(function() {\n\t\t\t_this.executeDateRender(dateProfile);\n\t\t}, 'date', 'init');\n\t},\n\n\n\trequestDateUnrender: function() {\n\t\tvar _this = this;\n\n\t\tthis.renderQueue.queue(function() {\n\t\t\t_this.executeDateUnrender();\n\t\t}, 'date', 'destroy');\n\t},\n\n\n\t// Event Data\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tfetchInitialEvents: function(dateProfile) {\n\t\treturn this.calendar.requestEvents(\n\t\t\tdateProfile.activeRange.start,\n\t\t\tdateProfile.activeRange.end\n\t\t);\n\t},\n\n\n\tbindEventChanges: function() {\n\t\tthis.listenTo(this.calendar, 'eventsReset', this.resetEvents);\n\t},\n\n\n\tunbindEventChanges: function() {\n\t\tthis.stopListeningTo(this.calendar, 'eventsReset');\n\t},\n\n\n\tsetEvents: function(events) {\n\t\tthis.set('currentEvents', events);\n\t\tthis.set('hasEvents', true);\n\t},\n\n\n\tunsetEvents: function() {\n\t\tthis.unset('currentEvents');\n\t\tthis.unset('hasEvents');\n\t},\n\n\n\tresetEvents: function(events) {\n\t\tthis.startBatchRender();\n\t\tthis.unsetEvents();\n\t\tthis.setEvents(events);\n\t\tthis.stopBatchRender();\n\t},\n\n\n\t// Event Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\trequestEventsRender: function(events) {\n\t\tvar _this = this;\n\n\t\tthis.renderQueue.queue(function() {\n\t\t\t_this.executeEventsRender(events);\n\t\t}, 'event', 'init');\n\t},\n\n\n\trequestEventsUnrender: function() {\n\t\tvar _this = this;\n\n\t\tthis.renderQueue.queue(function() {\n\t\t\t_this.executeEventsUnrender();\n\t\t}, 'event', 'destroy');\n\t},\n\n\n\t// Date High-level Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// if dateProfile not specified, uses current\n\texecuteDateRender: function(dateProfile, skipScroll) {\n\n\t\tthis.setDateProfileForRendering(dateProfile);\n\t\tthis.updateTitle();\n\t\tthis.calendar.updateToolbarButtons();\n\n\t\tif (this.render) {\n\t\t\tthis.render(); // TODO: deprecate\n\t\t}\n\n\t\tthis.renderDates();\n\t\tthis.updateSize();\n\t\tthis.renderBusinessHours(); // might need coordinates, so should go after updateSize()\n\t\tthis.startNowIndicator();\n\n\t\tif (!skipScroll) {\n\t\t\tthis.addScroll(this.computeInitialDateScroll());\n\t\t}\n\n\t\tthis.isDatesRendered = true;\n\t\tthis.trigger('datesRendered');\n\t},\n\n\n\texecuteDateUnrender: function() {\n\n\t\tthis.unselect();\n\t\tthis.stopNowIndicator();\n\n\t\tthis.trigger('before:datesUnrendered');\n\n\t\tthis.unrenderBusinessHours();\n\t\tthis.unrenderDates();\n\n\t\tif (this.destroy) {\n\t\t\tthis.destroy(); // TODO: deprecate\n\t\t}\n\n\t\tthis.isDatesRendered = false;\n\t},\n\n\n\t// Date Low-level Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// date-cell content only\n\trenderDates: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// date-cell content only\n\tunrenderDates: function() {\n\t\t// subclasses should override\n\t},\n\n\n\t// Determing when the \""meat\"" of the view is rendered (aka the base)\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tbindBaseRenderHandlers: function() {\n\t\tvar _this = this;\n\n\t\tthis.on('datesRendered.baseHandler', function() {\n\t\t\t_this.onBaseRender();\n\t\t});\n\n\t\tthis.on('before:datesUnrendered.baseHandler', function() {\n\t\t\t_this.onBeforeBaseUnrender();\n\t\t});\n\t},\n\n\n\tunbindBaseRenderHandlers: function() {\n\t\tthis.off('.baseHandler');\n\t},\n\n\n\tonBaseRender: function() {\n\t\tthis.applyScreenState();\n\t\tthis.publiclyTrigger('viewRender', this, this, this.el);\n\t},\n\n\n\tonBeforeBaseUnrender: function() {\n\t\tthis.applyScreenState();\n\t\tthis.publiclyTrigger('viewDestroy', this, this, this.el);\n\t},\n\n\n\t// Misc view rendering utils\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Binds DOM handlers to elements that reside outside the view container, such as the document\n\tbindGlobalHandlers: function() {\n\t\tthis.listenTo(GlobalEmitter.get(), {\n\t\t\ttouchstart: this.processUnselect,\n\t\t\tmousedown: this.handleDocumentMousedown\n\t\t});\n\t},\n\n\n\t// Unbinds DOM handlers from elements that reside outside the view container\n\tunbindGlobalHandlers: function() {\n\t\tthis.stopListeningTo(GlobalEmitter.get());\n\t},\n\n\n\t// Initializes internal variables related to theming\n\tinitThemingProps: function() {\n\t\tvar tm = this.opt('theme') ? 'ui' : 'fc';\n\n\t\tthis.widgetHeaderClass = tm + '-widget-header';\n\t\tthis.widgetContentClass = tm + '-widget-content';\n\t\tthis.highlightStateClass = tm + '-state-highlight';\n\t},\n\n\n\t/* Business Hours\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders business-hours onto the view. Assumes updateSize has already been called.\n\trenderBusinessHours: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Unrenders previously-rendered business-hours\n\tunrenderBusinessHours: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Now Indicator\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Immediately render the current time indicator and begins re-rendering it at an interval,\n\t// which is defined by this.getNowIndicatorUnit().\n\t// TODO: somehow do this for the current whole day's background too\n\tstartNowIndicator: function() {\n\t\tvar _this = this;\n\t\tvar unit;\n\t\tvar update;\n\t\tvar delay; // ms wait value\n\n\t\tif (this.opt('nowIndicator')) {\n\t\t\tunit = this.getNowIndicatorUnit();\n\t\t\tif (unit) {\n\t\t\t\tupdate = proxy(this, 'updateNowIndicator'); // bind to `this`\n\n\t\t\t\tthis.initialNowDate = this.calendar.getNow();\n\t\t\t\tthis.initialNowQueriedMs = +new Date();\n\t\t\t\tthis.renderNowIndicator(this.initialNowDate);\n\t\t\t\tthis.isNowIndicatorRendered = true;\n\n\t\t\t\t// wait until the beginning of the next interval\n\t\t\t\tdelay = this.initialNowDate.clone().startOf(unit).add(1, unit) - this.initialNowDate;\n\t\t\t\tthis.nowIndicatorTimeoutID = setTimeout(function() {\n\t\t\t\t\t_this.nowIndicatorTimeoutID = null;\n\t\t\t\t\tupdate();\n\t\t\t\t\tdelay = +moment.duration(1, unit);\n\t\t\t\t\tdelay = Math.max(100, delay); // prevent too frequent\n\t\t\t\t\t_this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\n\t\t\t\t}, delay);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// rerenders the now indicator, computing the new current time from the amount of time that has passed\n\t// since the initial getNow call.\n\tupdateNowIndicator: function() {\n\t\tif (this.isNowIndicatorRendered) {\n\t\t\tthis.unrenderNowIndicator();\n\t\t\tthis.renderNowIndicator(\n\t\t\t\tthis.initialNowDate.clone().add(new Date() - this.initialNowQueriedMs) // add ms\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Immediately unrenders the view's current time indicator and stops any re-rendering timers.\n\t// Won't cause side effects if indicator isn't rendered.\n\tstopNowIndicator: function() {\n\t\tif (this.isNowIndicatorRendered) {\n\n\t\t\tif (this.nowIndicatorTimeoutID) {\n\t\t\t\tclearTimeout(this.nowIndicatorTimeoutID);\n\t\t\t\tthis.nowIndicatorTimeoutID = null;\n\t\t\t}\n\t\t\tif (this.nowIndicatorIntervalID) {\n\t\t\t\tclearTimeout(this.nowIndicatorIntervalID);\n\t\t\t\tthis.nowIndicatorIntervalID = null;\n\t\t\t}\n\n\t\t\tthis.unrenderNowIndicator();\n\t\t\tthis.isNowIndicatorRendered = false;\n\t\t}\n\t},\n\n\n\t// Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\n\t// should be refreshed. If something falsy is returned, no time indicator is rendered at all.\n\tgetNowIndicatorUnit: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Renders a current time indicator at the given datetime\n\trenderNowIndicator: function(date) {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Undoes the rendering actions from renderNowIndicator\n\tunrenderNowIndicator: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Refreshes anything dependant upon sizing of the container element of the grid\n\tupdateSize: function(isResize) {\n\t\tvar scroll;\n\n\t\tif (isResize) {\n\t\t\tscroll = this.queryScroll();\n\t\t}\n\n\t\tthis.updateHeight(isResize);\n\t\tthis.updateWidth(isResize);\n\t\tthis.updateNowIndicator();\n\n\t\tif (isResize) {\n\t\t\tthis.applyScroll(scroll);\n\t\t}\n\t},\n\n\n\t// Refreshes the horizontal dimensions of the calendar\n\tupdateWidth: function(isResize) {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Refreshes the vertical dimensions of the calendar\n\tupdateHeight: function(isResize) {\n\t\tvar calendar = this.calendar; // we poll the calendar for height information\n\n\t\tthis.setHeight(\n\t\t\tcalendar.getSuggestedViewHeight(),\n\t\t\tcalendar.isHeightAuto()\n\t\t);\n\t},\n\n\n\t// Updates the vertical dimensions of the calendar to the specified height.\n\t// if `isAuto` is set to true, height becomes merely a suggestion and the view should use its \""natural\"" height.\n\tsetHeight: function(height, isAuto) {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Scroller\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\taddForcedScroll: function(scroll) {\n\t\tthis.addScroll(\n\t\t\t$.extend(scroll, { isForced: true })\n\t\t);\n\t},\n\n\n\taddScroll: function(scroll) {\n\t\tvar queuedScroll = this.queuedScroll || (this.queuedScroll = {});\n\n\t\tif (!queuedScroll.isForced) {\n\t\t\t$.extend(queuedScroll, scroll);\n\t\t}\n\t},\n\n\n\tpopScroll: function() {\n\t\tthis.applyQueuedScroll();\n\t\tthis.queuedScroll = null;\n\t},\n\n\n\tapplyQueuedScroll: function() {\n\t\tif (this.queuedScroll) {\n\t\t\tthis.applyScroll(this.queuedScroll);\n\t\t}\n\t},\n\n\n\tqueryScroll: function() {\n\t\tvar scroll = {};\n\n\t\tif (this.isDatesRendered) {\n\t\t\t$.extend(scroll, this.queryDateScroll());\n\t\t}\n\n\t\treturn scroll;\n\t},\n\n\n\tapplyScroll: function(scroll) {\n\t\tif (this.isDatesRendered) {\n\t\t\tthis.applyDateScroll(scroll);\n\t\t}\n\t},\n\n\n\tcomputeInitialDateScroll: function() {\n\t\treturn {}; // subclasses must implement\n\t},\n\n\n\tqueryDateScroll: function() {\n\t\treturn {}; // subclasses must implement\n\t},\n\n\n\tapplyDateScroll: function(scroll) {\n\t\t; // subclasses must implement\n\t},\n\n\n\t/* Height Freezing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tfreezeHeight: function() {\n\t\tthis.calendar.freezeContentHeight();\n\t},\n\n\n\tthawHeight: function() {\n\t\tthis.calendar.thawContentHeight();\n\t},\n\n\n\t// Event High-level Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\texecuteEventsRender: function(events) {\n\t\tthis.renderEvents(events);\n\t\tthis.isEventsRendered = true;\n\n\t\tthis.onEventsRender();\n\t},\n\n\n\texecuteEventsUnrender: function() {\n\t\tthis.onBeforeEventsUnrender();\n\n\t\tif (this.destroyEvents) {\n\t\t\tthis.destroyEvents(); // TODO: deprecate\n\t\t}\n\n\t\tthis.unrenderEvents();\n\t\tthis.isEventsRendered = false;\n\t},\n\n\n\t// Event Rendering Triggers\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Signals that all events have been rendered\n\tonEventsRender: function() {\n\t\tthis.applyScreenState();\n\n\t\tthis.renderedEventSegEach(function(seg) {\n\t\t\tthis.publiclyTrigger('eventAfterRender', seg.event, seg.event, seg.el);\n\t\t});\n\t\tthis.publiclyTrigger('eventAfterAllRender');\n\t},\n\n\n\t// Signals that all event elements are about to be removed\n\tonBeforeEventsUnrender: function() {\n\t\tthis.applyScreenState();\n\n\t\tthis.renderedEventSegEach(function(seg) {\n\t\t\tthis.publiclyTrigger('eventDestroy', seg.event, seg.event, seg.el);\n\t\t});\n\t},\n\n\n\tapplyScreenState: function() {\n\t\tthis.thawHeight();\n\t\tthis.freezeHeight();\n\t\tthis.applyQueuedScroll();\n\t},\n\n\n\t// Event Low-level Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Renders the events onto the view.\n\trenderEvents: function(events) {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Removes event elements from the view.\n\tunrenderEvents: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Event Rendering Utils\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Given an event and the default element used for rendering, returns the element that should actually be used.\n\t// Basically runs events and elements through the eventRender hook.\n\tresolveEventEl: function(event, el) {\n\t\tvar custom = this.publiclyTrigger('eventRender', event, event, el);\n\n\t\tif (custom === false) { // means don't render at all\n\t\t\tel = null;\n\t\t}\n\t\telse if (custom && custom !== true) {\n\t\t\tel = $(custom);\n\t\t}\n\n\t\treturn el;\n\t},\n\n\n\t// Hides all rendered event segments linked to the given event\n\tshowEvent: function(event) {\n\t\tthis.renderedEventSegEach(function(seg) {\n\t\t\tseg.el.css('visibility', '');\n\t\t}, event);\n\t},\n\n\n\t// Shows all rendered event segments linked to the given event\n\thideEvent: function(event) {\n\t\tthis.renderedEventSegEach(function(seg) {\n\t\t\tseg.el.css('visibility', 'hidden');\n\t\t}, event);\n\t},\n\n\n\t// Iterates through event segments that have been rendered (have an el). Goes through all by default.\n\t// If the optional `event` argument is specified, only iterates through segments linked to that event.\n\t// The `this` value of the callback function will be the view.\n\trenderedEventSegEach: function(func, event) {\n\t\tvar segs = this.getEventSegs();\n\t\tvar i;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tif (!event || segs[i].event._id === event._id) {\n\t\t\t\tif (segs[i].el) {\n\t\t\t\t\tfunc.call(this, segs[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Retrieves all the rendered segment objects for the view\n\tgetEventSegs: function() {\n\t\t// subclasses must implement\n\t\treturn [];\n\t},\n\n\n\t/* Event Drag-n-Drop\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes if the given event is allowed to be dragged by the user\n\tisEventDraggable: function(event) {\n\t\treturn this.isEventStartEditable(event);\n\t},\n\n\n\tisEventStartEditable: function(event) {\n\t\treturn firstDefined(\n\t\t\tevent.startEditable,\n\t\t\t(event.source || {}).startEditable,\n\t\t\tthis.opt('eventStartEditable'),\n\t\t\tthis.isEventGenerallyEditable(event)\n\t\t);\n\t},\n\n\n\tisEventGenerallyEditable: function(event) {\n\t\treturn firstDefined(\n\t\t\tevent.editable,\n\t\t\t(event.source || {}).editable,\n\t\t\tthis.opt('editable')\n\t\t);\n\t},\n\n\n\t// Must be called when an event in the view is dropped onto new location.\n\t// `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\n\treportSegDrop: function(seg, dropLocation, largeUnit, el, ev) {\n\t\tvar calendar = this.calendar;\n\t\tvar mutateResult = calendar.mutateSeg(seg, dropLocation, largeUnit);\n\t\tvar undoFunc = function() {\n\t\t\tmutateResult.undo();\n\t\t\tcalendar.reportEventChange();\n\t\t};\n\n\t\tthis.triggerEventDrop(seg.event, mutateResult.dateDelta, undoFunc, el, ev);\n\t\tcalendar.reportEventChange(); // will rerender events\n\t},\n\n\n\t// Triggers event-drop handlers that have subscribed via the API\n\ttriggerEventDrop: function(event, dateDelta, undoFunc, el, ev) {\n\t\tthis.publiclyTrigger('eventDrop', el[0], event, dateDelta, undoFunc, ev, {}); // {} = jqui dummy\n\t},\n\n\n\t/* External Element Drag-n-Drop\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\n\t// `meta` is the parsed data that has been embedded into the dragging event.\n\t// `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\n\treportExternalDrop: function(meta, dropLocation, el, ev, ui) {\n\t\tvar eventProps = meta.eventProps;\n\t\tvar eventInput;\n\t\tvar event;\n\n\t\t// Try to build an event object and render it. TODO: decouple the two\n\t\tif (eventProps) {\n\t\t\teventInput = $.extend({}, eventProps, dropLocation);\n\t\t\tevent = this.calendar.renderEvent(eventInput, meta.stick)[0]; // renderEvent returns an array\n\t\t}\n\n\t\tthis.triggerExternalDrop(event, dropLocation, el, ev, ui);\n\t},\n\n\n\t// Triggers external-drop handlers that have subscribed via the API\n\ttriggerExternalDrop: function(event, dropLocation, el, ev, ui) {\n\n\t\t// trigger 'drop' regardless of whether element represents an event\n\t\tthis.publiclyTrigger('drop', el[0], dropLocation.start, ev, ui);\n\n\t\tif (event) {\n\t\t\tthis.publiclyTrigger('eventReceive', null, event); // signal an external event landed\n\t\t}\n\t},\n\n\n\t/* Drag-n-Drop Rendering (for both events and external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a event or external-element drag over the given drop zone.\n\t// If an external-element, seg will be `null`.\n\t// Must return elements used for any mock events.\n\trenderDrag: function(dropLocation, seg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a visual indication of an event or external-element being dragged.\n\tunrenderDrag: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t/* Event Resizing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes if the given event is allowed to be resized from its starting edge\n\tisEventResizableFromStart: function(event) {\n\t\treturn this.opt('eventResizableFromStart') && this.isEventResizable(event);\n\t},\n\n\n\t// Computes if the given event is allowed to be resized from its ending edge\n\tisEventResizableFromEnd: function(event) {\n\t\treturn this.isEventResizable(event);\n\t},\n\n\n\t// Computes if the given event is allowed to be resized by the user at all\n\tisEventResizable: function(event) {\n\t\tvar source = event.source || {};\n\n\t\treturn firstDefined(\n\t\t\tevent.durationEditable,\n\t\t\tsource.durationEditable,\n\t\t\tthis.opt('eventDurationEditable'),\n\t\t\tevent.editable,\n\t\t\tsource.editable,\n\t\t\tthis.opt('editable')\n\t\t);\n\t},\n\n\n\t// Must be called when an event in the view has been resized to a new length\n\treportSegResize: function(seg, resizeLocation, largeUnit, el, ev) {\n\t\tvar calendar = this.calendar;\n\t\tvar mutateResult = calendar.mutateSeg(seg, resizeLocation, largeUnit);\n\t\tvar undoFunc = function() {\n\t\t\tmutateResult.undo();\n\t\t\tcalendar.reportEventChange();\n\t\t};\n\n\t\tthis.triggerEventResize(seg.event, mutateResult.durationDelta, undoFunc, el, ev);\n\t\tcalendar.reportEventChange(); // will rerender events\n\t},\n\n\n\t// Triggers event-resize handlers that have subscribed via the API\n\ttriggerEventResize: function(event, durationDelta, undoFunc, el, ev) {\n\t\tthis.publiclyTrigger('eventResize', el[0], event, durationDelta, undoFunc, ev, {}); // {} = jqui dummy\n\t},\n\n\n\t/* Selection (time range)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Selects a date span on the view. `start` and `end` are both Moments.\n\t// `ev` is the native mouse event that begin the interaction.\n\tselect: function(span, ev) {\n\t\tthis.unselect(ev);\n\t\tthis.renderSelection(span);\n\t\tthis.reportSelection(span, ev);\n\t},\n\n\n\t// Renders a visual indication of the selection\n\trenderSelection: function(span) {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Called when a new selection is made. Updates internal state and triggers handlers.\n\treportSelection: function(span, ev) {\n\t\tthis.isSelected = true;\n\t\tthis.triggerSelect(span, ev);\n\t},\n\n\n\t// Triggers handlers to 'select'\n\ttriggerSelect: function(span, ev) {\n\t\tthis.publiclyTrigger(\n\t\t\t'select',\n\t\t\tnull,\n\t\t\tthis.calendar.applyTimezone(span.start), // convert to calendar's tz for external API\n\t\t\tthis.calendar.applyTimezone(span.end), // \""\n\t\t\tev\n\t\t);\n\t},\n\n\n\t// Undoes a selection. updates in the internal state and triggers handlers.\n\t// `ev` is the native mouse event that began the interaction.\n\tunselect: function(ev) {\n\t\tif (this.isSelected) {\n\t\t\tthis.isSelected = false;\n\t\t\tif (this.destroySelection) {\n\t\t\t\tthis.destroySelection(); // TODO: deprecate\n\t\t\t}\n\t\t\tthis.unrenderSelection();\n\t\t\tthis.publiclyTrigger('unselect', null, ev);\n\t\t}\n\t},\n\n\n\t// Unrenders a visual indication of selection\n\tunrenderSelection: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Event Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tselectEvent: function(event) {\n\t\tif (!this.selectedEvent || this.selectedEvent !== event) {\n\t\t\tthis.unselectEvent();\n\t\t\tthis.renderedEventSegEach(function(seg) {\n\t\t\t\tseg.el.addClass('fc-selected');\n\t\t\t}, event);\n\t\t\tthis.selectedEvent = event;\n\t\t}\n\t},\n\n\n\tunselectEvent: function() {\n\t\tif (this.selectedEvent) {\n\t\t\tthis.renderedEventSegEach(function(seg) {\n\t\t\t\tseg.el.removeClass('fc-selected');\n\t\t\t}, this.selectedEvent);\n\t\t\tthis.selectedEvent = null;\n\t\t}\n\t},\n\n\n\tisEventSelected: function(event) {\n\t\t// event references might change on refetchEvents(), while selectedEvent doesn't,\n\t\t// so compare IDs\n\t\treturn this.selectedEvent && this.selectedEvent._id === event._id;\n\t},\n\n\n\t/* Mouse / Touch Unselecting (time range & event unselection)\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: move consistently to down/start or up/end?\n\t// TODO: don't kill previous selection if touch scrolling\n\n\n\thandleDocumentMousedown: function(ev) {\n\t\tif (isPrimaryMouseButton(ev)) {\n\t\t\tthis.processUnselect(ev);\n\t\t}\n\t},\n\n\n\tprocessUnselect: function(ev) {\n\t\tthis.processRangeUnselect(ev);\n\t\tthis.processEventUnselect(ev);\n\t},\n\n\n\tprocessRangeUnselect: function(ev) {\n\t\tvar ignore;\n\n\t\t// is there a time-range selection?\n\t\tif (this.isSelected && this.opt('unselectAuto')) {\n\t\t\t// only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\n\t\t\tignore = this.opt('unselectCancel');\n\t\t\tif (!ignore || !$(ev.target).closest(ignore).length) {\n\t\t\t\tthis.unselect(ev);\n\t\t\t}\n\t\t}\n\t},\n\n\n\tprocessEventUnselect: function(ev) {\n\t\tif (this.selectedEvent) {\n\t\t\tif (!$(ev.target).closest('.fc-selected').length) {\n\t\t\t\tthis.unselectEvent();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* Day Click\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Triggers handlers to 'dayClick'\n\t// Span has start/end of the clicked area. Only the start is useful.\n\ttriggerDayClick: function(span, dayEl, ev) {\n\t\tthis.publiclyTrigger(\n\t\t\t'dayClick',\n\t\t\tdayEl,\n\t\t\tthis.calendar.applyTimezone(span.start), // convert to calendar's timezone for external API\n\t\t\tev\n\t\t);\n\t},\n\n\n\t/* Date Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Returns the date range of the full days the given range visually appears to occupy.\n\t// Returns a new range object.\n\tcomputeDayRange: function(range) {\n\t\tvar startDay = range.start.clone().stripTime(); // the beginning of the day the range starts\n\t\tvar end = range.end;\n\t\tvar endDay = null;\n\t\tvar endTimeMS;\n\n\t\tif (end) {\n\t\t\tendDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\n\t\t\tendTimeMS = +end.time(); // # of milliseconds into `endDay`\n\n\t\t\t// If the end time is actually inclusively part of the next day and is equal to or\n\t\t\t// beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n\t\t\t// Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n\t\t\tif (endTimeMS && endTimeMS >= this.nextDayThreshold) {\n\t\t\t\tendDay.add(1, 'days');\n\t\t\t}\n\t\t}\n\n\t\t// If no end was specified, or if it is within `startDay` but not past nextDayThreshold,\n\t\t// assign the default duration of one day.\n\t\tif (!end || endDay <= startDay) {\n\t\t\tendDay = startDay.clone().add(1, 'days');\n\t\t}\n\n\t\treturn { start: startDay, end: endDay };\n\t},\n\n\n\t// Does the given event visually appear to occupy more than one day?\n\tisMultiDayEvent: function(event) {\n\t\tvar range = this.computeDayRange(event); // event is range-ish\n\n\t\treturn range.end.diff(range.start, 'days') > 1;\n\t}\n\n});\n\n\nView.watch('displayingDates', [ 'dateProfile' ], function(deps) {\n\tthis.requestDateRender(deps.dateProfile);\n}, function() {\n\tthis.requestDateUnrender();\n});\n\n\nView.watch('initialEvents', [ 'dateProfile' ], function(deps) {\n\treturn this.fetchInitialEvents(deps.dateProfile);\n});\n\n\nView.watch('bindingEvents', [ 'initialEvents' ], function(deps) {\n\tthis.setEvents(deps.initialEvents);\n\tthis.bindEventChanges();\n}, function() {\n\tthis.unbindEventChanges();\n\tthis.unsetEvents();\n});\n\n\nView.watch('displayingEvents', [ 'displayingDates', 'hasEvents' ], function() {\n\tthis.requestEventsRender(this.get('currentEvents')); // if there were event mutations after initialEvents\n}, function() {\n\tthis.requestEventsUnrender();\n});\n\n;;\n\nView.mixin({\n\n\t// range the view is formally responsible for.\n\t// for example, a month view might have 1st-31st, excluding padded dates\n\tcurrentRange: null,\n\tcurrentRangeUnit: null, // name of largest unit being displayed, like \""month\"" or \""week\""\n\n\t// date range with a rendered skeleton\n\t// includes not-active days that need some sort of DOM\n\trenderRange: null,\n\n\t// dates that display events and accept drag-n-drop\n\tactiveRange: null,\n\n\t// constraint for where prev/next operations can go and where events can be dragged/resized to.\n\t// an object with optional start and end properties.\n\tvalidRange: null,\n\n\t// how far the current date will move for a prev/next operation\n\tdateIncrement: null,\n\n\tminTime: null, // Duration object that denotes the first visible time of any given day\n\tmaxTime: null, // Duration object that denotes the exclusive visible end time of any given day\n\tusesMinMaxTime: false, // whether minTime/maxTime will affect the activeRange. Views must opt-in.\n\n\t// DEPRECATED\n\tstart: null, // use activeRange.start\n\tend: null, // use activeRange.end\n\tintervalStart: null, // use currentRange.start\n\tintervalEnd: null, // use currentRange.end\n\n\n\t/* Date Range Computation\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tsetDateProfileForRendering: function(dateProfile) {\n\t\tthis.currentRange = dateProfile.currentRange;\n\t\tthis.currentRangeUnit = dateProfile.currentRangeUnit;\n\t\tthis.renderRange = dateProfile.renderRange;\n\t\tthis.activeRange = dateProfile.activeRange;\n\t\tthis.validRange = dateProfile.validRange;\n\t\tthis.dateIncrement = dateProfile.dateIncrement;\n\t\tthis.minTime = dateProfile.minTime;\n\t\tthis.maxTime = dateProfile.maxTime;\n\n\t\t// DEPRECATED, but we need to keep it updated\n\t\tthis.start = dateProfile.activeRange.start;\n\t\tthis.end = dateProfile.activeRange.end;\n\t\tthis.intervalStart = dateProfile.currentRange.start;\n\t\tthis.intervalEnd = dateProfile.currentRange.end;\n\t},\n\n\n\t// Builds a structure with info about what the dates/ranges will be for the \""prev\"" view.\n\tbuildPrevDateProfile: function(date) {\n\t\tvar prevDate = date.clone().startOf(this.currentRangeUnit).subtract(this.dateIncrement);\n\n\t\treturn this.buildDateProfile(prevDate, -1);\n\t},\n\n\n\t// Builds a structure with info about what the dates/ranges will be for the \""next\"" view.\n\tbuildNextDateProfile: function(date) {\n\t\tvar nextDate = date.clone().startOf(this.currentRangeUnit).add(this.dateIncrement);\n\n\t\treturn this.buildDateProfile(nextDate, 1);\n\t},\n\n\n\t// Builds a structure holding dates/ranges for rendering around the given date.\n\t// Optional direction param indicates whether the date is being incremented/decremented\n\t// from its previous value. decremented = -1, incremented = 1 (default).\n\tbuildDateProfile: function(date, direction, forceToValid) {\n\t\tvar validRange = this.buildValidRange();\n\t\tvar minTime = null;\n\t\tvar maxTime = null;\n\t\tvar currentInfo;\n\t\tvar renderRange;\n\t\tvar activeRange;\n\t\tvar isValid;\n\n\t\tif (forceToValid) {\n\t\t\tdate = constrainDate(date, validRange);\n\t\t}\n\n\t\tcurrentInfo = this.buildCurrentRangeInfo(date, direction);\n\t\trenderRange = this.buildRenderRange(currentInfo.range, currentInfo.unit);\n\t\tactiveRange = cloneRange(renderRange);\n\n\t\tif (!this.opt('showNonCurrentDates')) {\n\t\t\tactiveRange = constrainRange(activeRange, currentInfo.range);\n\t\t}\n\n\t\tminTime = moment.duration(this.opt('minTime'));\n\t\tmaxTime = moment.duration(this.opt('maxTime'));\n\t\tthis.adjustActiveRange(activeRange, minTime, maxTime);\n\n\t\tactiveRange = constrainRange(activeRange, validRange);\n\t\tdate = constrainDate(date, activeRange);\n\n\t\t// it's invalid if the originally requested date is not contained,\n\t\t// or if the range is completely outside of the valid range.\n\t\tisValid = doRangesIntersect(currentInfo.range, validRange);\n\n\t\treturn {\n\t\t\tvalidRange: validRange,\n\t\t\tcurrentRange: currentInfo.range,\n\t\t\tcurrentRangeUnit: currentInfo.unit,\n\t\t\tactiveRange: activeRange,\n\t\t\trenderRange: renderRange,\n\t\t\tminTime: minTime,\n\t\t\tmaxTime: maxTime,\n\t\t\tisValid: isValid,\n\t\t\tdate: date,\n\t\t\tdateIncrement: this.buildDateIncrement(currentInfo.duration)\n\t\t\t\t// pass a fallback (might be null) ^\n\t\t};\n\t},\n\n\n\t// Builds an object with optional start/end properties.\n\t// Indicates the minimum/maximum dates to display.\n\tbuildValidRange: function() {\n\t\treturn this.getRangeOption('validRange', this.calendar.getNow()) || {};\n\t},\n\n\n\t// Builds a structure with info about the \""current\"" range, the range that is\n\t// highlighted as being the current month for example.\n\t// See buildDateProfile for a description of `direction`.\n\t// Guaranteed to have `range` and `unit` properties. `duration` is optional.\n\tbuildCurrentRangeInfo: function(date, direction) {\n\t\tvar duration = null;\n\t\tvar unit = null;\n\t\tvar range = null;\n\t\tvar dayCount;\n\n\t\tif (this.viewSpec.duration) {\n\t\t\tduration = this.viewSpec.duration;\n\t\t\tunit = this.viewSpec.durationUnit;\n\t\t\trange = this.buildRangeFromDuration(date, direction, duration, unit);\n\t\t}\n\t\telse if ((dayCount = this.opt('dayCount'))) {\n\t\t\tunit = 'day';\n\t\t\trange = this.buildRangeFromDayCount(date, direction, dayCount);\n\t\t}\n\t\telse if ((range = this.buildCustomVisibleRange(date))) {\n\t\t\tunit = computeGreatestUnit(range.start, range.end);\n\t\t}\n\t\telse {\n\t\t\tduration = this.getFallbackDuration();\n\t\t\tunit = computeGreatestUnit(duration);\n\t\t\trange = this.buildRangeFromDuration(date, direction, duration, unit);\n\t\t}\n\n\t\tthis.normalizeCurrentRange(range, unit); // modifies in-place\n\n\t\treturn { duration: duration, unit: unit, range: range };\n\t},\n\n\n\tgetFallbackDuration: function() {\n\t\treturn moment.duration({ days: 1 });\n\t},\n\n\n\t// If the range has day units or larger, remove times. Otherwise, ensure times.\n\tnormalizeCurrentRange: function(range, unit) {\n\n\t\tif (/^(year|month|week|day)$/.test(unit)) { // whole-days?\n\t\t\trange.start.stripTime();\n\t\t\trange.end.stripTime();\n\t\t}\n\t\telse { // needs to have a time?\n\t\t\tif (!range.start.hasTime()) {\n\t\t\t\trange.start.time(0); // give 00:00 time\n\t\t\t}\n\t\t\tif (!range.end.hasTime()) {\n\t\t\t\trange.end.time(0); // give 00:00 time\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Mutates the given activeRange to have time values (un-ambiguate)\n\t// if the minTime or maxTime causes the range to expand.\n\t// TODO: eventually activeRange should *always* have times.\n\tadjustActiveRange: function(range, minTime, maxTime) {\n\t\tvar hasSpecialTimes = false;\n\n\t\tif (this.usesMinMaxTime) {\n\n\t\t\tif (minTime < 0) {\n\t\t\t\trange.start.time(0).add(minTime);\n\t\t\t\thasSpecialTimes = true;\n\t\t\t}\n\n\t\t\tif (maxTime > 24 * 60 * 60 * 1000) { // beyond 24 hours?\n\t\t\t\trange.end.time(maxTime - (24 * 60 * 60 * 1000));\n\t\t\t\thasSpecialTimes = true;\n\t\t\t}\n\n\t\t\tif (hasSpecialTimes) {\n\t\t\t\tif (!range.start.hasTime()) {\n\t\t\t\t\trange.start.time(0);\n\t\t\t\t}\n\t\t\t\tif (!range.end.hasTime()) {\n\t\t\t\t\trange.end.time(0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Builds the \""current\"" range when it is specified as an explicit duration.\n\t// `unit` is the already-computed computeGreatestUnit value of duration.\n\tbuildRangeFromDuration: function(date, direction, duration, unit) {\n\t\tvar alignment = this.opt('dateAlignment');\n\t\tvar start = date.clone();\n\t\tvar end;\n\t\tvar dateIncrementInput;\n\t\tvar dateIncrementDuration;\n\n\t\t// if the view displays a single day or smaller\n\t\tif (duration.as('days') <= 1) {\n\t\t\tif (this.isHiddenDay(start)) {\n\t\t\t\tstart = this.skipHiddenDays(start, direction);\n\t\t\t\tstart.startOf('day');\n\t\t\t}\n\t\t}\n\n\t\t// compute what the alignment should be\n\t\tif (!alignment) {\n\t\t\tdateIncrementInput = this.opt('dateIncrement');\n\n\t\t\tif (dateIncrementInput) {\n\t\t\t\tdateIncrementDuration = moment.duration(dateIncrementInput);\n\n\t\t\t\t// use the smaller of the two units\n\t\t\t\tif (dateIncrementDuration < duration) {\n\t\t\t\t\talignment = computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\talignment = unit;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\talignment = unit;\n\t\t\t}\n\t\t}\n\n\t\tstart.startOf(alignment);\n\t\tend = start.clone().add(duration);\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\t// Builds the \""current\"" range when a dayCount is specified.\n\tbuildRangeFromDayCount: function(date, direction, dayCount) {\n\t\tvar customAlignment = this.opt('dateAlignment');\n\t\tvar runningCount = 0;\n\t\tvar start = date.clone();\n\t\tvar end;\n\n\t\tif (customAlignment) {\n\t\t\tstart.startOf(customAlignment);\n\t\t}\n\n\t\tstart.startOf('day');\n\t\tstart = this.skipHiddenDays(start, direction);\n\n\t\tend = start.clone();\n\t\tdo {\n\t\t\tend.add(1, 'day');\n\t\t\tif (!this.isHiddenDay(end)) {\n\t\t\t\trunningCount++;\n\t\t\t}\n\t\t} while (runningCount < dayCount);\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\t// Builds a normalized range object for the \""visible\"" range,\n\t// which is a way to define the currentRange and activeRange at the same time.\n\tbuildCustomVisibleRange: function(date) {\n\t\tvar visibleRange = this.getRangeOption(\n\t\t\t'visibleRange',\n\t\t\tthis.calendar.moment(date) // correct zone. also generates new obj that avoids mutations\n\t\t);\n\n\t\tif (visibleRange && (!visibleRange.start || !visibleRange.end)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visibleRange;\n\t},\n\n\n\t// Computes the range that will represent the element/cells for *rendering*,\n\t// but which may have voided days/times.\n\tbuildRenderRange: function(currentRange, currentRangeUnit) {\n\t\t// cut off days in the currentRange that are hidden\n\t\treturn this.trimHiddenDays(currentRange);\n\t},\n\n\n\t// Compute the duration value that should be added/substracted to the current date\n\t// when a prev/next operation happens.\n\tbuildDateIncrement: function(fallback) {\n\t\tvar dateIncrementInput = this.opt('dateIncrement');\n\t\tvar customAlignment;\n\n\t\tif (dateIncrementInput) {\n\t\t\treturn moment.duration(dateIncrementInput);\n\t\t}\n\t\telse if ((customAlignment = this.opt('dateAlignment'))) {\n\t\t\treturn moment.duration(1, customAlignment);\n\t\t}\n\t\telse if (fallback) {\n\t\t\treturn fallback;\n\t\t}\n\t\telse {\n\t\t\treturn moment.duration({ days: 1 });\n\t\t}\n\t},\n\n\n\t// Remove days from the beginning and end of the range that are computed as hidden.\n\ttrimHiddenDays: function(inputRange) {\n\t\treturn {\n\t\t\tstart: this.skipHiddenDays(inputRange.start),\n\t\t\tend: this.skipHiddenDays(inputRange.end, -1, true) // exclusively move backwards\n\t\t};\n\t},\n\n\n\t// Compute the number of the give units in the \""current\"" range.\n\t// Will return a floating-point number. Won't round.\n\tcurrentRangeAs: function(unit) {\n\t\tvar currentRange = this.currentRange;\n\t\treturn currentRange.end.diff(currentRange.start, unit, true);\n\t},\n\n\n\t// Arguments after name will be forwarded to a hypothetical function value\n\t// WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\n\t// Always clone your objects if you fear mutation.\n\tgetRangeOption: function(name) {\n\t\tvar val = this.opt(name);\n\n\t\tif (typeof val === 'function') {\n\t\t\tval = val.apply(\n\t\t\t\tnull,\n\t\t\t\tArray.prototype.slice.call(arguments, 1)\n\t\t\t);\n\t\t}\n\n\t\tif (val) {\n\t\t\treturn this.calendar.parseRange(val);\n\t\t}\n\t},\n\n\n\t/* Hidden Days\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Initializes internal variables related to calculating hidden days-of-week\n\tinitHiddenDays: function() {\n\t\tvar hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\n\t\tvar isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n\t\tvar dayCnt = 0;\n\t\tvar i;\n\n\t\tif (this.opt('weekends') === false) {\n\t\t\thiddenDays.push(0, 6); // 0=sunday, 6=saturday\n\t\t}\n\n\t\tfor (i = 0; i < 7; i++) {\n\t\t\tif (\n\t\t\t\t!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)\n\t\t\t) {\n\t\t\t\tdayCnt++;\n\t\t\t}\n\t\t}\n\n\t\tif (!dayCnt) {\n\t\t\tthrow 'invalid hiddenDays'; // all days were hidden? bad.\n\t\t}\n\n\t\tthis.isHiddenDayHash = isHiddenDayHash;\n\t},\n\n\n\t// Is the current day hidden?\n\t// `day` is a day-of-week index (0-6), or a Moment\n\tisHiddenDay: function(day) {\n\t\tif (moment.isMoment(day)) {\n\t\t\tday = day.day();\n\t\t}\n\t\treturn this.isHiddenDayHash[day];\n\t},\n\n\n\t// Incrementing the current day until it is no longer a hidden day, returning a copy.\n\t// DOES NOT CONSIDER validRange!\n\t// If the initial value of `date` is not a hidden day, don't do anything.\n\t// Pass `isExclusive` as `true` if you are dealing with an end date.\n\t// `inc` defaults to `1` (increment one day forward each time)\n\tskipHiddenDays: function(date, inc, isExclusive) {\n\t\tvar out = date.clone();\n\t\tinc = inc || 1;\n\t\twhile (\n\t\t\tthis.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]\n\t\t) {\n\t\t\tout.add(inc, 'days');\n\t\t}\n\t\treturn out;\n\t}\n\n});\n\n;;\n\n/*\nEmbodies a div that has potential scrollbars\n*/\nvar Scroller = FC.Scroller = Class.extend({\n\n\tel: null, // the guaranteed outer element\n\tscrollEl: null, // the element with the scrollbars\n\toverflowX: null,\n\toverflowY: null,\n\n\n\tconstructor: function(options) {\n\t\toptions = options || {};\n\t\tthis.overflowX = options.overflowX || options.overflow || 'auto';\n\t\tthis.overflowY = options.overflowY || options.overflow || 'auto';\n\t},\n\n\n\trender: function() {\n\t\tthis.el = this.renderEl();\n\t\tthis.applyOverflow();\n\t},\n\n\n\trenderEl: function() {\n\t\treturn (this.scrollEl = $('<div class=\""fc-scroller\""></div>'));\n\t},\n\n\n\t// sets to natural height, unlocks overflow\n\tclear: function() {\n\t\tthis.setHeight('auto');\n\t\tthis.applyOverflow();\n\t},\n\n\n\tdestroy: function() {\n\t\tthis.el.remove();\n\t},\n\n\n\t// Overflow\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tapplyOverflow: function() {\n\t\tthis.scrollEl.css({\n\t\t\t'overflow-x': this.overflowX,\n\t\t\t'overflow-y': this.overflowY\n\t\t});\n\t},\n\n\n\t// Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\n\t// Useful for preserving scrollbar widths regardless of future resizes.\n\t// Can pass in scrollbarWidths for optimization.\n\tlockOverflow: function(scrollbarWidths) {\n\t\tvar overflowX = this.overflowX;\n\t\tvar overflowY = this.overflowY;\n\n\t\tscrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\n\n\t\tif (overflowX === 'auto') {\n\t\t\toverflowX = (\n\t\t\t\t\tscrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\n\t\t\t\t\t// OR scrolling pane with massless scrollbars?\n\t\t\t\t\tthis.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth\n\t\t\t\t\t\t// subtract 1 because of IE off-by-one issue\n\t\t\t\t) ? 'scroll' : 'hidden';\n\t\t}\n\n\t\tif (overflowY === 'auto') {\n\t\t\toverflowY = (\n\t\t\t\t\tscrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\n\t\t\t\t\t// OR scrolling pane with massless scrollbars?\n\t\t\t\t\tthis.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight\n\t\t\t\t\t\t// subtract 1 because of IE off-by-one issue\n\t\t\t\t) ? 'scroll' : 'hidden';\n\t\t}\n\n\t\tthis.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });\n\t},\n\n\n\t// Getters / Setters\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tsetHeight: function(height) {\n\t\tthis.scrollEl.height(height);\n\t},\n\n\n\tgetScrollTop: function() {\n\t\treturn this.scrollEl.scrollTop();\n\t},\n\n\n\tsetScrollTop: function(top) {\n\t\tthis.scrollEl.scrollTop(top);\n\t},\n\n\n\tgetClientWidth: function() {\n\t\treturn this.scrollEl[0].clientWidth;\n\t},\n\n\n\tgetClientHeight: function() {\n\t\treturn this.scrollEl[0].clientHeight;\n\t},\n\n\n\tgetScrollbarWidths: function() {\n\t\treturn getScrollbarWidths(this.scrollEl);\n\t}\n\n});\n\n;;\nfunction Iterator(items) {\n    this.items = items || [];\n}\n\n\n/* Calls a method on every item passing the arguments through */\nIterator.prototype.proxyCall = function(methodName) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    var results = [];\n\n    this.items.forEach(function(item) {\n        results.push(item[methodName].apply(item, args));\n    });\n\n    return results;\n};\n\n;;\n\n/* Toolbar with buttons and title\n----------------------------------------------------------------------------------------------------------------------*/\n\nfunction Toolbar(calendar, toolbarOptions) {\n\tvar t = this;\n\n\t// exports\n\tt.setToolbarOptions = setToolbarOptions;\n\tt.render = render;\n\tt.removeElement = removeElement;\n\tt.updateTitle = updateTitle;\n\tt.activateButton = activateButton;\n\tt.deactivateButton = deactivateButton;\n\tt.disableButton = disableButton;\n\tt.enableButton = enableButton;\n\tt.getViewsWithButtons = getViewsWithButtons;\n\tt.el = null; // mirrors local `el`\n\n\t// locals\n\tvar el;\n\tvar viewsWithButtons = [];\n\tvar tm;\n\n\t// method to update toolbar-specific options, not calendar-wide options\n\tfunction setToolbarOptions(newToolbarOptions) {\n\t\ttoolbarOptions = newToolbarOptions;\n\t}\n\n\t// can be called repeatedly and will rerender\n\tfunction render() {\n\t\tvar sections = toolbarOptions.layout;\n\n\t\ttm = calendar.opt('theme') ? 'ui' : 'fc';\n\n\t\tif (sections) {\n\t\t\tif (!el) {\n\t\t\t\tel = this.el = $(\""<div class='fc-toolbar \""+ toolbarOptions.extraClasses + \""'/>\"");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tel.empty();\n\t\t\t}\n\t\t\tel.append(renderSection('left'))\n\t\t\t\t.append(renderSection('right'))\n\t\t\t\t.append(renderSection('center'))\n\t\t\t\t.append('<div class=\""fc-clear\""/>');\n\t\t}\n\t\telse {\n\t\t\tremoveElement();\n\t\t}\n\t}\n\n\n\tfunction removeElement() {\n\t\tif (el) {\n\t\t\tel.remove();\n\t\t\tel = t.el = null;\n\t\t}\n\t}\n\n\n\tfunction renderSection(position) {\n\t\tvar sectionEl = $('<div class=\""fc-' + position + '\""/>');\n\t\tvar buttonStr = toolbarOptions.layout[position];\n\t\tvar calendarCustomButtons = calendar.opt('customButtons') || {};\n\t\tvar calendarButtonText = calendar.opt('buttonText') || {};\n\n\t\tif (buttonStr) {\n\t\t\t$.each(buttonStr.split(' '), function(i) {\n\t\t\t\tvar groupChildren = $();\n\t\t\t\tvar isOnlyButtons = true;\n\t\t\t\tvar groupEl;\n\n\t\t\t\t$.each(this.split(','), function(j, buttonName) {\n\t\t\t\t\tvar customButtonProps;\n\t\t\t\t\tvar viewSpec;\n\t\t\t\t\tvar buttonClick;\n\t\t\t\t\tvar overrideText; // text explicitly set by calendar's constructor options. overcomes icons\n\t\t\t\t\tvar defaultText;\n\t\t\t\t\tvar themeIcon;\n\t\t\t\t\tvar normalIcon;\n\t\t\t\t\tvar innerHtml;\n\t\t\t\t\tvar classes;\n\t\t\t\t\tvar button; // the element\n\n\t\t\t\t\tif (buttonName == 'title') {\n\t\t\t\t\t\tgroupChildren = groupChildren.add($('<h2>&nbsp;</h2>')); // we always want it to take up height\n\t\t\t\t\t\tisOnlyButtons = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif ((customButtonProps = calendarCustomButtons[buttonName])) {\n\t\t\t\t\t\t\tbuttonClick = function(ev) {\n\t\t\t\t\t\t\t\tif (customButtonProps.click) {\n\t\t\t\t\t\t\t\t\tcustomButtonProps.click.call(button[0], ev);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\toverrideText = ''; // icons will override text\n\t\t\t\t\t\t\tdefaultText = customButtonProps.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ((viewSpec = calendar.getViewSpec(buttonName))) {\n\t\t\t\t\t\t\tbuttonClick = function() {\n\t\t\t\t\t\t\t\tcalendar.changeView(buttonName);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tviewsWithButtons.push(buttonName);\n\t\t\t\t\t\t\toverrideText = viewSpec.buttonTextOverride;\n\t\t\t\t\t\t\tdefaultText = viewSpec.buttonTextDefault;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (calendar[buttonName]) { // a calendar method\n\t\t\t\t\t\t\tbuttonClick = function() {\n\t\t\t\t\t\t\t\tcalendar[buttonName]();\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\toverrideText = (calendar.overrides.buttonText || {})[buttonName];\n\t\t\t\t\t\t\tdefaultText = calendarButtonText[buttonName]; // everything else is considered default\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (buttonClick) {\n\n\t\t\t\t\t\t\tthemeIcon =\n\t\t\t\t\t\t\t\tcustomButtonProps ?\n\t\t\t\t\t\t\t\t\tcustomButtonProps.themeIcon :\n\t\t\t\t\t\t\t\t\tcalendar.opt('themeButtonIcons')[buttonName];\n\n\t\t\t\t\t\t\tnormalIcon =\n\t\t\t\t\t\t\t\tcustomButtonProps ?\n\t\t\t\t\t\t\t\t\tcustomButtonProps.icon :\n\t\t\t\t\t\t\t\t\tcalendar.opt('buttonIcons')[buttonName];\n\n\t\t\t\t\t\t\tif (overrideText) {\n\t\t\t\t\t\t\t\tinnerHtml = htmlEscape(overrideText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (themeIcon && calendar.opt('theme')) {\n\t\t\t\t\t\t\t\tinnerHtml = \""<span class='ui-icon ui-icon-\"" + themeIcon + \""'></span>\"";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (normalIcon && !calendar.opt('theme')) {\n\t\t\t\t\t\t\t\tinnerHtml = \""<span class='fc-icon fc-icon-\"" + normalIcon + \""'></span>\"";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tinnerHtml = htmlEscape(defaultText);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tclasses = [\n\t\t\t\t\t\t\t\t'fc-' + buttonName + '-button',\n\t\t\t\t\t\t\t\ttm + '-button',\n\t\t\t\t\t\t\t\ttm + '-state-default'\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tbutton = $( // type=\""button\"" so that it doesn't submit a form\n\t\t\t\t\t\t\t\t'<button type=\""button\"" class=\""' + classes.join(' ') + '\"">' +\n\t\t\t\t\t\t\t\t\tinnerHtml +\n\t\t\t\t\t\t\t\t'</button>'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.click(function(ev) {\n\t\t\t\t\t\t\t\t\t// don't process clicks for disabled buttons\n\t\t\t\t\t\t\t\t\tif (!button.hasClass(tm + '-state-disabled')) {\n\n\t\t\t\t\t\t\t\t\t\tbuttonClick(ev);\n\n\t\t\t\t\t\t\t\t\t\t// after the click action, if the button becomes the \""active\"" tab, or disabled,\n\t\t\t\t\t\t\t\t\t\t// it should never have a hover class, so remove it now.\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tbutton.hasClass(tm + '-state-active') ||\n\t\t\t\t\t\t\t\t\t\t\tbutton.hasClass(tm + '-state-disabled')\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tbutton.removeClass(tm + '-state-hover');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.mousedown(function() {\n\t\t\t\t\t\t\t\t\t// the *down* effect (mouse pressed in).\n\t\t\t\t\t\t\t\t\t// only on buttons that are not the \""active\"" tab, or disabled\n\t\t\t\t\t\t\t\t\tbutton\n\t\t\t\t\t\t\t\t\t\t.not('.' + tm + '-state-active')\n\t\t\t\t\t\t\t\t\t\t.not('.' + tm + '-state-disabled')\n\t\t\t\t\t\t\t\t\t\t.addClass(tm + '-state-down');\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.mouseup(function() {\n\t\t\t\t\t\t\t\t\t// undo the *down* effect\n\t\t\t\t\t\t\t\t\tbutton.removeClass(tm + '-state-down');\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.hover(\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t// the *hover* effect.\n\t\t\t\t\t\t\t\t\t\t// only on buttons that are not the \""active\"" tab, or disabled\n\t\t\t\t\t\t\t\t\t\tbutton\n\t\t\t\t\t\t\t\t\t\t\t.not('.' + tm + '-state-active')\n\t\t\t\t\t\t\t\t\t\t\t.not('.' + tm + '-state-disabled')\n\t\t\t\t\t\t\t\t\t\t\t.addClass(tm + '-state-hover');\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t// undo the *hover* effect\n\t\t\t\t\t\t\t\t\t\tbutton\n\t\t\t\t\t\t\t\t\t\t\t.removeClass(tm + '-state-hover')\n\t\t\t\t\t\t\t\t\t\t\t.removeClass(tm + '-state-down'); // if mouseleave happens before mouseup\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tgroupChildren = groupChildren.add(button);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (isOnlyButtons) {\n\t\t\t\t\tgroupChildren\n\t\t\t\t\t\t.first().addClass(tm + '-corner-left').end()\n\t\t\t\t\t\t.last().addClass(tm + '-corner-right').end();\n\t\t\t\t}\n\n\t\t\t\tif (groupChildren.length > 1) {\n\t\t\t\t\tgroupEl = $('<div/>');\n\t\t\t\t\tif (isOnlyButtons) {\n\t\t\t\t\t\tgroupEl.addClass('fc-button-group');\n\t\t\t\t\t}\n\t\t\t\t\tgroupEl.append(groupChildren);\n\t\t\t\t\tsectionEl.append(groupEl);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsectionEl.append(groupChildren); // 1 or 0 children\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn sectionEl;\n\t}\n\n\n\tfunction updateTitle(text) {\n\t\tif (el) {\n\t\t\tel.find('h2').text(text);\n\t\t}\n\t}\n\n\n\tfunction activateButton(buttonName) {\n\t\tif (el) {\n\t\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t\t.addClass(tm + '-state-active');\n\t\t}\n\t}\n\n\n\tfunction deactivateButton(buttonName) {\n\t\tif (el) {\n\t\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t\t.removeClass(tm + '-state-active');\n\t\t}\n\t}\n\n\n\tfunction disableButton(buttonName) {\n\t\tif (el) {\n\t\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t\t.prop('disabled', true)\n\t\t\t\t.addClass(tm + '-state-disabled');\n\t\t}\n\t}\n\n\n\tfunction enableButton(buttonName) {\n\t\tif (el) {\n\t\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t\t.prop('disabled', false)\n\t\t\t\t.removeClass(tm + '-state-disabled');\n\t\t}\n\t}\n\n\n\tfunction getViewsWithButtons() {\n\t\treturn viewsWithButtons;\n\t}\n\n}\n\n;;\n\nvar Calendar = FC.Calendar = Class.extend(EmitterMixin, {\n\n\tview: null, // current View object\n\tviewsByType: null, // holds all instantiated view instances, current or not\n\tcurrentDate: null, // unzoned moment. private (public API should use getDate instead)\n\tloadingLevel: 0, // number of simultaneous loading tasks\n\n\n\tconstructor: function(el, overrides) {\n\n\t\t// declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\n\t\t// unneeded() is called in destroy.\n\t\tGlobalEmitter.needed();\n\n\t\tthis.el = el;\n\t\tthis.viewsByType = {};\n\t\tthis.viewSpecCache = {};\n\n\t\tthis.initOptionsInternals(overrides);\n\t\tthis.initMomentInternals(); // needs to happen after options hash initialized\n\t\tthis.initCurrentDate();\n\n\t\tEventManager.call(this); // needs options immediately\n\t\tthis.initialize();\n\t},\n\n\n\t// Subclasses can override this for initialization logic after the constructor has been called\n\tinitialize: function() {\n\t},\n\n\n\t// Public API\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tgetCalendar: function() {\n\t\treturn this;\n\t},\n\n\n\tgetView: function() {\n\t\treturn this.view;\n\t},\n\n\n\tpubliclyTrigger: function(name, thisObj) {\n\t\tvar args = Array.prototype.slice.call(arguments, 2);\n\t\tvar optHandler = this.opt(name);\n\n\t\tthisObj = thisObj || this.el[0];\n\t\tthis.triggerWith(name, thisObj, args); // Emitter's method\n\n\t\tif (optHandler) {\n\t\t\treturn optHandler.apply(thisObj, args);\n\t\t}\n\t},\n\n\n\t// View\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Given a view name for a custom view or a standard view, creates a ready-to-go View object\n\tinstantiateView: function(viewType) {\n\t\tvar spec = this.getViewSpec(viewType);\n\n\t\treturn new spec['class'](this, spec);\n\t},\n\n\n\t// Returns a boolean about whether the view is okay to instantiate at some point\n\tisValidViewType: function(viewType) {\n\t\treturn Boolean(this.getViewSpec(viewType));\n\t},\n\n\n\tchangeView: function(viewName, dateOrRange) {\n\n\t\tif (dateOrRange) {\n\n\t\t\tif (dateOrRange.start && dateOrRange.end) { // a range\n\t\t\t\tthis.recordOptionOverrides({ // will not rerender\n\t\t\t\t\tvisibleRange: dateOrRange\n\t\t\t\t});\n\t\t\t}\n\t\t\telse { // a date\n\t\t\t\tthis.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\n\t\t\t}\n\t\t}\n\n\t\tthis.renderView(viewName);\n\t},\n\n\n\t// Forces navigation to a view for the given date.\n\t// `viewType` can be a specific view name or a generic one like \""week\"" or \""day\"".\n\tzoomTo: function(newDate, viewType) {\n\t\tvar spec;\n\n\t\tviewType = viewType || 'day'; // day is default zoom\n\t\tspec = this.getViewSpec(viewType) || this.getUnitViewSpec(viewType);\n\n\t\tthis.currentDate = newDate.clone();\n\t\tthis.renderView(spec ? spec.type : null);\n\t},\n\n\n\t// Current Date\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tinitCurrentDate: function() {\n\t\tvar defaultDateInput = this.opt('defaultDate');\n\n\t\t// compute the initial ambig-timezone date\n\t\tif (defaultDateInput != null) {\n\t\t\tthis.currentDate = this.moment(defaultDateInput).stripZone();\n\t\t}\n\t\telse {\n\t\t\tthis.currentDate = this.getNow(); // getNow already returns unzoned\n\t\t}\n\t},\n\n\n\tprev: function() {\n\t\tvar prevInfo = this.view.buildPrevDateProfile(this.currentDate);\n\n\t\tif (prevInfo.isValid) {\n\t\t\tthis.currentDate = prevInfo.date;\n\t\t\tthis.renderView();\n\t\t}\n\t},\n\n\n\tnext: function() {\n\t\tvar nextInfo = this.view.buildNextDateProfile(this.currentDate);\n\n\t\tif (nextInfo.isValid) {\n\t\t\tthis.currentDate = nextInfo.date;\n\t\t\tthis.renderView();\n\t\t}\n\t},\n\n\n\tprevYear: function() {\n\t\tthis.currentDate.add(-1, 'years');\n\t\tthis.renderView();\n\t},\n\n\n\tnextYear: function() {\n\t\tthis.currentDate.add(1, 'years');\n\t\tthis.renderView();\n\t},\n\n\n\ttoday: function() {\n\t\tthis.currentDate = this.getNow(); // should deny like prev/next?\n\t\tthis.renderView();\n\t},\n\n\n\tgotoDate: function(zonedDateInput) {\n\t\tthis.currentDate = this.moment(zonedDateInput).stripZone();\n\t\tthis.renderView();\n\t},\n\n\n\tincrementDate: function(delta) {\n\t\tthis.currentDate.add(moment.duration(delta));\n\t\tthis.renderView();\n\t},\n\n\n\t// for external API\n\tgetDate: function() {\n\t\treturn this.applyTimezone(this.currentDate); // infuse the calendar's timezone\n\t},\n\n\n\t// Loading Triggering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Should be called when any type of async data fetching begins\n\tpushLoading: function() {\n\t\tif (!(this.loadingLevel++)) {\n\t\t\tthis.publiclyTrigger('loading', null, true, this.view);\n\t\t}\n\t},\n\n\n\t// Should be called when any type of async data fetching completes\n\tpopLoading: function() {\n\t\tif (!(--this.loadingLevel)) {\n\t\t\tthis.publiclyTrigger('loading', null, false, this.view);\n\t\t}\n\t},\n\n\n\t// Selection\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// this public method receives start/end dates in any format, with any timezone\n\tselect: function(zonedStartInput, zonedEndInput) {\n\t\tthis.view.select(\n\t\t\tthis.buildSelectSpan.apply(this, arguments)\n\t\t);\n\t},\n\n\n\tunselect: function() { // safe to be called before renderView\n\t\tif (this.view) {\n\t\t\tthis.view.unselect();\n\t\t}\n\t},\n\n\n\t// Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\n\tbuildSelectSpan: function(zonedStartInput, zonedEndInput) {\n\t\tvar start = this.moment(zonedStartInput).stripZone();\n\t\tvar end;\n\n\t\tif (zonedEndInput) {\n\t\t\tend = this.moment(zonedEndInput).stripZone();\n\t\t}\n\t\telse if (start.hasTime()) {\n\t\t\tend = start.clone().add(this.defaultTimedEventDuration);\n\t\t}\n\t\telse {\n\t\t\tend = start.clone().add(this.defaultAllDayEventDuration);\n\t\t}\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\t// Misc\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// will return `null` if invalid range\n\tparseRange: function(rangeInput) {\n\t\tvar start = null;\n\t\tvar end = null;\n\n\t\tif (rangeInput.start) {\n\t\t\tstart = this.moment(rangeInput.start).stripZone();\n\t\t}\n\n\t\tif (rangeInput.end) {\n\t\t\tend = this.moment(rangeInput.end).stripZone();\n\t\t}\n\n\t\tif (!start && !end) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (start && end && end.isBefore(start)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\trerenderEvents: function() { // API method. destroys old events if previously rendered.\n\t\tif (this.elementVisible()) {\n\t\t\tthis.reportEventChange(); // will re-trasmit events to the view, causing a rerender\n\t\t}\n\t}\n\n});\n\n;;\n/*\nOptions binding/triggering system.\n*/\nCalendar.mixin({\n\n\tdirDefaults: null, // option defaults related to LTR or RTL\n\tlocaleDefaults: null, // option defaults related to current locale\n\toverrides: null, // option overrides given to the fullCalendar constructor\n\tdynamicOverrides: null, // options set with dynamic setter method. higher precedence than view overrides.\n\toptionsModel: null, // all defaults combined with overrides\n\n\n\tinitOptionsInternals: function(overrides) {\n\t\tthis.overrides = $.extend({}, overrides); // make a copy\n\t\tthis.dynamicOverrides = {};\n\t\tthis.optionsModel = new Model();\n\n\t\tthis.populateOptionsHash();\n\t},\n\n\n\t// public getter/setter\n\toption: function(name, value) {\n\t\tvar newOptionHash;\n\n\t\tif (typeof name === 'string') {\n\t\t\tif (value === undefined) { // getter\n\t\t\t\treturn this.optionsModel.get(name);\n\t\t\t}\n\t\t\telse { // setter for individual option\n\t\t\t\tnewOptionHash = {};\n\t\t\t\tnewOptionHash[name] = value;\n\t\t\t\tthis.setOptions(newOptionHash);\n\t\t\t}\n\t\t}\n\t\telse if (typeof name === 'object') { // compound setter with object input\n\t\t\tthis.setOptions(name);\n\t\t}\n\t},\n\n\n\t// private getter\n\topt: function(name) {\n\t\treturn this.optionsModel.get(name);\n\t},\n\n\n\tsetOptions: function(newOptionHash) {\n\t\tvar optionCnt = 0;\n\t\tvar optionName;\n\n\t\tthis.recordOptionOverrides(newOptionHash);\n\n\t\tfor (optionName in newOptionHash) {\n\t\t\toptionCnt++;\n\t\t}\n\n\t\t// special-case handling of single option change.\n\t\t// if only one option change, `optionName` will be its name.\n\t\tif (optionCnt === 1) {\n\t\t\tif (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\n\t\t\t\tthis.updateSize(true); // true = allow recalculation of height\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (optionName === 'defaultDate') {\n\t\t\t\treturn; // can't change date this way. use gotoDate instead\n\t\t\t}\n\t\t\telse if (optionName === 'businessHours') {\n\t\t\t\tif (this.view) {\n\t\t\t\t\tthis.view.unrenderBusinessHours();\n\t\t\t\t\tthis.view.renderBusinessHours();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (optionName === 'timezone') {\n\t\t\t\tthis.rezoneArrayEventSources();\n\t\t\t\tthis.refetchEvents();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// catch-all. rerender the header and footer and rebuild/rerender the current view\n\t\tthis.renderHeader();\n\t\tthis.renderFooter();\n\n\t\t// even non-current views will be affected by this option change. do before rerender\n\t\t// TODO: detangle\n\t\tthis.viewsByType = {};\n\n\t\tthis.reinitView();\n\t},\n\n\n\t// Computes the flattened options hash for the calendar and assigns to `this.options`.\n\t// Assumes this.overrides and this.dynamicOverrides have already been initialized.\n\tpopulateOptionsHash: function() {\n\t\tvar locale, localeDefaults;\n\t\tvar isRTL, dirDefaults;\n\t\tvar rawOptions;\n\n\t\tlocale = firstDefined( // explicit locale option given?\n\t\t\tthis.dynamicOverrides.locale,\n\t\t\tthis.overrides.locale\n\t\t);\n\t\tlocaleDefaults = localeOptionHash[locale];\n\t\tif (!localeDefaults) { // explicit locale option not given or invalid?\n\t\t\tlocale = Calendar.defaults.locale;\n\t\t\tlocaleDefaults = localeOptionHash[locale] || {};\n\t\t}\n\n\t\tisRTL = firstDefined( // based on options computed so far, is direction RTL?\n\t\t\tthis.dynamicOverrides.isRTL,\n\t\t\tthis.overrides.isRTL,\n\t\t\tlocaleDefaults.isRTL,\n\t\t\tCalendar.defaults.isRTL\n\t\t);\n\t\tdirDefaults = isRTL ? Calendar.rtlDefaults : {};\n\n\t\tthis.dirDefaults = dirDefaults;\n\t\tthis.localeDefaults = localeDefaults;\n\n\t\trawOptions = mergeOptions([ // merge defaults and overrides. lowest to highest precedence\n\t\t\tCalendar.defaults, // global defaults\n\t\t\tdirDefaults,\n\t\t\tlocaleDefaults,\n\t\t\tthis.overrides,\n\t\t\tthis.dynamicOverrides\n\t\t]);\n\t\tpopulateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\n\n\t\tthis.optionsModel.reset(rawOptions);\n\t},\n\n\n\t// stores the new options internally, but does not rerender anything.\n\trecordOptionOverrides: function(newOptionHash) {\n\t\tvar optionName;\n\n\t\tfor (optionName in newOptionHash) {\n\t\t\tthis.dynamicOverrides[optionName] = newOptionHash[optionName];\n\t\t}\n\n\t\tthis.viewSpecCache = {}; // the dynamic override invalidates the options in this cache, so just clear it\n\t\tthis.populateOptionsHash(); // this.options needs to be recomputed after the dynamic override\n\t}\n\n});\n\n;;\n\nCalendar.mixin({\n\n\tdefaultAllDayEventDuration: null,\n\tdefaultTimedEventDuration: null,\n\tlocaleData: null,\n\n\n\tinitMomentInternals: function() {\n\t\tvar _this = this;\n\n\t\tthis.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\n\t\tthis.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));\n\n\t\t// Called immediately, and when any of the options change.\n\t\t// Happens before any internal objects rebuild or rerender, because this is very core.\n\t\tthis.optionsModel.watch('buildingMomentLocale', [\n\t\t\t'?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',\n\t\t\t'?firstDay', '?weekNumberCalculation'\n\t\t], function(opts) {\n\t\t\tvar weekNumberCalculation = opts.weekNumberCalculation;\n\t\t\tvar firstDay = opts.firstDay;\n\t\t\tvar _week;\n\n\t\t\t// normalize\n\t\t\tif (weekNumberCalculation === 'iso') {\n\t\t\t\tweekNumberCalculation = 'ISO'; // normalize\n\t\t\t}\n\n\t\t\tvar localeData = createObject( // make a cheap copy\n\t\t\t\tgetMomentLocaleData(opts.locale) // will fall back to en\n\t\t\t);\n\n\t\t\tif (opts.monthNames) {\n\t\t\t\tlocaleData._months = opts.monthNames;\n\t\t\t}\n\t\t\tif (opts.monthNamesShort) {\n\t\t\t\tlocaleData._monthsShort = opts.monthNamesShort;\n\t\t\t}\n\t\t\tif (opts.dayNames) {\n\t\t\t\tlocaleData._weekdays = opts.dayNames;\n\t\t\t}\n\t\t\tif (opts.dayNamesShort) {\n\t\t\t\tlocaleData._weekdaysShort = opts.dayNamesShort;\n\t\t\t}\n\n\t\t\tif (firstDay == null && weekNumberCalculation === 'ISO') {\n\t\t\t\tfirstDay = 1;\n\t\t\t}\n\t\t\tif (firstDay != null) {\n\t\t\t\t_week = createObject(localeData._week); // _week: { dow: # }\n\t\t\t\t_week.dow = firstDay;\n\t\t\t\tlocaleData._week = _week;\n\t\t\t}\n\n\t\t\tif ( // whitelist certain kinds of input\n\t\t\t\tweekNumberCalculation === 'ISO' ||\n\t\t\t\tweekNumberCalculation === 'local' ||\n\t\t\t\ttypeof weekNumberCalculation === 'function'\n\t\t\t) {\n\t\t\t\tlocaleData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\n\t\t\t}\n\n\t\t\t_this.localeData = localeData;\n\n\t\t\t// If the internal current date object already exists, move to new locale.\n\t\t\t// We do NOT need to do this technique for event dates, because this happens when converting to \""segments\"".\n\t\t\tif (_this.currentDate) {\n\t\t\t\t_this.localizeMoment(_this.currentDate); // sets to localeData\n\t\t\t}\n\t\t});\n\t},\n\n\n\t// Builds a moment using the settings of the current calendar: timezone and locale.\n\t// Accepts anything the vanilla moment() constructor accepts.\n\tmoment: function() {\n\t\tvar mom;\n\n\t\tif (this.opt('timezone') === 'local') {\n\t\t\tmom = FC.moment.apply(null, arguments);\n\n\t\t\t// Force the moment to be local, because FC.moment doesn't guarantee it.\n\t\t\tif (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\n\t\t\t\tmom.local();\n\t\t\t}\n\t\t}\n\t\telse if (this.opt('timezone') === 'UTC') {\n\t\t\tmom = FC.moment.utc.apply(null, arguments); // process as UTC\n\t\t}\n\t\telse {\n\t\t\tmom = FC.moment.parseZone.apply(null, arguments); // let the input decide the zone\n\t\t}\n\n\t\tthis.localizeMoment(mom); // TODO\n\n\t\treturn mom;\n\t},\n\n\n\t// Updates the given moment's locale settings to the current calendar locale settings.\n\tlocalizeMoment: function(mom) {\n\t\tmom._locale = this.localeData;\n\t},\n\n\n\t// Returns a boolean about whether or not the calendar knows how to calculate\n\t// the timezone offset of arbitrary dates in the current timezone.\n\tgetIsAmbigTimezone: function() {\n\t\treturn this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\n\t},\n\n\n\t// Returns a copy of the given date in the current timezone. Has no effect on dates without times.\n\tapplyTimezone: function(date) {\n\t\tif (!date.hasTime()) {\n\t\t\treturn date.clone();\n\t\t}\n\n\t\tvar zonedDate = this.moment(date.toArray());\n\t\tvar timeAdjust = date.time() - zonedDate.time();\n\t\tvar adjustedZonedDate;\n\n\t\t// Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\n\t\tif (timeAdjust) { // is the time result different than expected?\n\t\t\tadjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\n\t\t\tif (date.time() - adjustedZonedDate.time() === 0) { // does it match perfectly now?\n\t\t\t\tzonedDate = adjustedZonedDate;\n\t\t\t}\n\t\t}\n\n\t\treturn zonedDate;\n\t},\n\n\n\t// Returns a moment for the current date, as defined by the client's computer or from the `now` option.\n\t// Will return an moment with an ambiguous timezone.\n\tgetNow: function() {\n\t\tvar now = this.opt('now');\n\t\tif (typeof now === 'function') {\n\t\t\tnow = now();\n\t\t}\n\t\treturn this.moment(now).stripZone();\n\t},\n\n\n\t// Produces a human-readable string for the given duration.\n\t// Side-effect: changes the locale of the given duration.\n\thumanizeDuration: function(duration) {\n\t\treturn duration.locale(this.opt('locale')).humanize();\n\t},\n\n\n\n\t// Event-Specific Date Utilities. TODO: move\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Get an event's normalized end date. If not present, calculate it from the defaults.\n\tgetEventEnd: function(event) {\n\t\tif (event.end) {\n\t\t\treturn event.end.clone();\n\t\t}\n\t\telse {\n\t\t\treturn this.getDefaultEventEnd(event.allDay, event.start);\n\t\t}\n\t},\n\n\n\t// Given an event's allDay status and start date, return what its fallback end date should be.\n\t// TODO: rename to computeDefaultEventEnd\n\tgetDefaultEventEnd: function(allDay, zonedStart) {\n\t\tvar end = zonedStart.clone();\n\n\t\tif (allDay) {\n\t\t\tend.stripTime().add(this.defaultAllDayEventDuration);\n\t\t}\n\t\telse {\n\t\t\tend.add(this.defaultTimedEventDuration);\n\t\t}\n\n\t\tif (this.getIsAmbigTimezone()) {\n\t\t\tend.stripZone(); // we don't know what the tzo should be\n\t\t}\n\n\t\treturn end;\n\t}\n\n});\n\n;;\n\nCalendar.mixin({\n\n\tviewSpecCache: null, // cache of view definitions (initialized in Calendar.js)\n\n\n\t// Gets information about how to create a view. Will use a cache.\n\tgetViewSpec: function(viewType) {\n\t\tvar cache = this.viewSpecCache;\n\n\t\treturn cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\n\t},\n\n\n\t// Given a duration singular unit, like \""week\"" or \""day\"", finds a matching view spec.\n\t// Preference is given to views that have corresponding buttons.\n\tgetUnitViewSpec: function(unit) {\n\t\tvar viewTypes;\n\t\tvar i;\n\t\tvar spec;\n\n\t\tif ($.inArray(unit, unitsDesc) != -1) {\n\n\t\t\t// put views that have buttons first. there will be duplicates, but oh well\n\t\t\tviewTypes = this.header.getViewsWithButtons(); // TODO: include footer as well?\n\t\t\t$.each(FC.views, function(viewType) { // all views\n\t\t\t\tviewTypes.push(viewType);\n\t\t\t});\n\n\t\t\tfor (i = 0; i < viewTypes.length; i++) {\n\t\t\t\tspec = this.getViewSpec(viewTypes[i]);\n\t\t\t\tif (spec) {\n\t\t\t\t\tif (spec.singleUnit == unit) {\n\t\t\t\t\t\treturn spec;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Builds an object with information on how to create a given view\n\tbuildViewSpec: function(requestedViewType) {\n\t\tvar viewOverrides = this.overrides.views || {};\n\t\tvar specChain = []; // for the view. lowest to highest priority\n\t\tvar defaultsChain = []; // for the view. lowest to highest priority\n\t\tvar overridesChain = []; // for the view. lowest to highest priority\n\t\tvar viewType = requestedViewType;\n\t\tvar spec; // for the view\n\t\tvar overrides; // for the view\n\t\tvar durationInput;\n\t\tvar duration;\n\t\tvar unit;\n\n\t\t// iterate from the specific view definition to a more general one until we hit an actual View class\n\t\twhile (viewType) {\n\t\t\tspec = fcViews[viewType];\n\t\t\toverrides = viewOverrides[viewType];\n\t\t\tviewType = null; // clear. might repopulate for another iteration\n\n\t\t\tif (typeof spec === 'function') { // TODO: deprecate\n\t\t\t\tspec = { 'class': spec };\n\t\t\t}\n\n\t\t\tif (spec) {\n\t\t\t\tspecChain.unshift(spec);\n\t\t\t\tdefaultsChain.unshift(spec.defaults || {});\n\t\t\t\tdurationInput = durationInput || spec.duration;\n\t\t\t\tviewType = viewType || spec.type;\n\t\t\t}\n\n\t\t\tif (overrides) {\n\t\t\t\toverridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\n\t\t\t\tdurationInput = durationInput || overrides.duration;\n\t\t\t\tviewType = viewType || overrides.type;\n\t\t\t}\n\t\t}\n\n\t\tspec = mergeProps(specChain);\n\t\tspec.type = requestedViewType;\n\t\tif (!spec['class']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fall back to top-level `duration` option\n\t\tdurationInput = durationInput ||\n\t\t\tthis.dynamicOverrides.duration ||\n\t\t\tthis.overrides.duration;\n\n\t\tif (durationInput) {\n\t\t\tduration = moment.duration(durationInput);\n\n\t\t\tif (duration.valueOf()) { // valid?\n\n\t\t\t\tunit = computeDurationGreatestUnit(duration, durationInput);\n\n\t\t\t\tspec.duration = duration;\n\t\t\t\tspec.durationUnit = unit;\n\n\t\t\t\t// view is a single-unit duration, like \""week\"" or \""day\""\n\t\t\t\t// incorporate options for this. lowest priority\n\t\t\t\tif (duration.as(unit) === 1) {\n\t\t\t\t\tspec.singleUnit = unit;\n\t\t\t\t\toverridesChain.unshift(viewOverrides[unit] || {});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tspec.defaults = mergeOptions(defaultsChain);\n\t\tspec.overrides = mergeOptions(overridesChain);\n\n\t\tthis.buildViewSpecOptions(spec);\n\t\tthis.buildViewSpecButtonText(spec, requestedViewType);\n\n\t\treturn spec;\n\t},\n\n\n\t// Builds and assigns a view spec's options object from its already-assigned defaults and overrides\n\tbuildViewSpecOptions: function(spec) {\n\t\tspec.options = mergeOptions([ // lowest to highest priority\n\t\t\tCalendar.defaults, // global defaults\n\t\t\tspec.defaults, // view's defaults (from ViewSubclass.defaults)\n\t\t\tthis.dirDefaults,\n\t\t\tthis.localeDefaults, // locale and dir take precedence over view's defaults!\n\t\t\tthis.overrides, // calendar's overrides (options given to constructor)\n\t\t\tspec.overrides, // view's overrides (view-specific options)\n\t\t\tthis.dynamicOverrides // dynamically set via setter. highest precedence\n\t\t]);\n\t\tpopulateInstanceComputableOptions(spec.options);\n\t},\n\n\n\t// Computes and assigns a view spec's buttonText-related options\n\tbuildViewSpecButtonText: function(spec, requestedViewType) {\n\n\t\t// given an options object with a possible `buttonText` hash, lookup the buttonText for the\n\t\t// requested view, falling back to a generic unit entry like \""week\"" or \""day\""\n\t\tfunction queryButtonText(options) {\n\t\t\tvar buttonText = options.buttonText || {};\n\t\t\treturn buttonText[requestedViewType] ||\n\t\t\t\t// view can decide to look up a certain key\n\t\t\t\t(spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||\n\t\t\t\t// a key like \""month\""\n\t\t\t\t(spec.singleUnit ? buttonText[spec.singleUnit] : null);\n\t\t}\n\n\t\t// highest to lowest priority\n\t\tspec.buttonTextOverride =\n\t\t\tqueryButtonText(this.dynamicOverrides) ||\n\t\t\tqueryButtonText(this.overrides) || // constructor-specified buttonText lookup hash takes precedence\n\t\t\tspec.overrides.buttonText; // `buttonText` for view-specific options is a string\n\n\t\t// highest to lowest priority. mirrors buildViewSpecOptions\n\t\tspec.buttonTextDefault =\n\t\t\tqueryButtonText(this.localeDefaults) ||\n\t\t\tqueryButtonText(this.dirDefaults) ||\n\t\t\tspec.defaults.buttonText || // a single string. from ViewSubclass.defaults\n\t\t\tqueryButtonText(Calendar.defaults) ||\n\t\t\t(spec.duration ? this.humanizeDuration(spec.duration) : null) || // like \""3 days\""\n\t\t\trequestedViewType; // fall back to given view name\n\t}\n\n});\n\n;;\n\nCalendar.mixin({\n\n\tel: null,\n\tcontentEl: null,\n\tsuggestedViewHeight: null,\n\twindowResizeProxy: null,\n\tignoreWindowResize: 0,\n\n\n\trender: function() {\n\t\tif (!this.contentEl) {\n\t\t\tthis.initialRender();\n\t\t}\n\t\telse if (this.elementVisible()) {\n\t\t\t// mainly for the public API\n\t\t\tthis.calcSize();\n\t\t\tthis.renderView();\n\t\t}\n\t},\n\n\n\tinitialRender: function() {\n\t\tvar _this = this;\n\t\tvar el = this.el;\n\n\t\tel.addClass('fc');\n\n\t\t// event delegation for nav links\n\t\tel.on('click.fc', 'a[data-goto]', function(ev) {\n\t\t\tvar anchorEl = $(this);\n\t\t\tvar gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\n\t\t\tvar date = _this.moment(gotoOptions.date);\n\t\t\tvar viewType = gotoOptions.type;\n\n\t\t\t// property like \""navLinkDayClick\"". might be a string or a function\n\t\t\tvar customAction = _this.view.opt('navLink' + capitaliseFirstLetter(viewType) + 'Click');\n\n\t\t\tif (typeof customAction === 'function') {\n\t\t\t\tcustomAction(date, ev);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (typeof customAction === 'string') {\n\t\t\t\t\tviewType = customAction;\n\t\t\t\t}\n\t\t\t\t_this.zoomTo(date, viewType);\n\t\t\t}\n\t\t});\n\n\t\t// called immediately, and upon option change\n\t\tthis.optionsModel.watch('applyingThemeClasses', [ '?theme' ], function(opts) {\n\t\t\tel.toggleClass('ui-widget', opts.theme);\n\t\t\tel.toggleClass('fc-unthemed', !opts.theme);\n\t\t});\n\n\t\t// called immediately, and upon option change.\n\t\t// HACK: locale often affects isRTL, so we explicitly listen to that too.\n\t\tthis.optionsModel.watch('applyingDirClasses', [ '?isRTL', '?locale' ], function(opts) {\n\t\t\tel.toggleClass('fc-ltr', !opts.isRTL);\n\t\t\tel.toggleClass('fc-rtl', opts.isRTL);\n\t\t});\n\n\t\tthis.contentEl = $(\""<div class='fc-view-container'/>\"").prependTo(el);\n\n\t\tthis.initToolbars();\n\t\tthis.renderHeader();\n\t\tthis.renderFooter();\n\t\tthis.renderView(this.opt('defaultView'));\n\n\t\tif (this.opt('handleWindowResize')) {\n\t\t\t$(window).resize(\n\t\t\t\tthis.windowResizeProxy = debounce( // prevents rapid calls\n\t\t\t\t\tthis.windowResize.bind(this),\n\t\t\t\t\tthis.opt('windowResizeDelay')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t},\n\n\n\tdestroy: function() {\n\n\t\tif (this.view) {\n\t\t\tthis.view.removeElement();\n\n\t\t\t// NOTE: don't null-out this.view in case API methods are called after destroy.\n\t\t\t// It is still the \""current\"" view, just not rendered.\n\t\t}\n\n\t\tthis.toolbarsManager.proxyCall('removeElement');\n\t\tthis.contentEl.remove();\n\t\tthis.el.removeClass('fc fc-ltr fc-rtl fc-unthemed ui-widget');\n\n\t\tthis.el.off('.fc'); // unbind nav link handlers\n\n\t\tif (this.windowResizeProxy) {\n\t\t\t$(window).unbind('resize', this.windowResizeProxy);\n\t\t\tthis.windowResizeProxy = null;\n\t\t}\n\n\t\tGlobalEmitter.unneeded();\n\t},\n\n\n\telementVisible: function() {\n\t\treturn this.el.is(':visible');\n\t},\n\n\n\n\t// View Rendering\n\t// -----------------------------------------------------------------------------------\n\n\n\t// Renders a view because of a date change, view-type change, or for the first time.\n\t// If not given a viewType, keep the current view but render different dates.\n\t// Accepts an optional scroll state to restore to.\n\trenderView: function(viewType, forcedScroll) {\n\n\t\tthis.ignoreWindowResize++;\n\n\t\tvar needsClearView = this.view && viewType && this.view.type !== viewType;\n\n\t\t// if viewType is changing, remove the old view's rendering\n\t\tif (needsClearView) {\n\t\t\tthis.freezeContentHeight(); // prevent a scroll jump when view element is removed\n\t\t\tthis.clearView();\n\t\t}\n\n\t\t// if viewType changed, or the view was never created, create a fresh view\n\t\tif (!this.view && viewType) {\n\t\t\tthis.view =\n\t\t\t\tthis.viewsByType[viewType] ||\n\t\t\t\t(this.viewsByType[viewType] = this.instantiateView(viewType));\n\n\t\t\tthis.view.setElement(\n\t\t\t\t$(\""<div class='fc-view fc-\"" + viewType + \""-view' />\"").appendTo(this.contentEl)\n\t\t\t);\n\t\t\tthis.toolbarsManager.proxyCall('activateButton', viewType);\n\t\t}\n\n\t\tif (this.view) {\n\n\t\t\tif (forcedScroll) {\n\t\t\t\tthis.view.addForcedScroll(forcedScroll);\n\t\t\t}\n\n\t\t\tif (this.elementVisible()) {\n\t\t\t\tthis.currentDate = this.view.setDate(this.currentDate);\n\t\t\t}\n\t\t}\n\n\t\tif (needsClearView) {\n\t\t\tthis.thawContentHeight();\n\t\t}\n\n\t\tthis.ignoreWindowResize--;\n\t},\n\n\n\t// Unrenders the current view and reflects this change in the Header.\n\t// Unregsiters the `view`, but does not remove from viewByType hash.\n\tclearView: function() {\n\t\tthis.toolbarsManager.proxyCall('deactivateButton', this.view.type);\n\t\tthis.view.removeElement();\n\t\tthis.view = null;\n\t},\n\n\n\t// Destroys the view, including the view object. Then, re-instantiates it and renders it.\n\t// Maintains the same scroll state.\n\t// TODO: maintain any other user-manipulated state.\n\treinitView: function() {\n\t\tthis.ignoreWindowResize++;\n\t\tthis.freezeContentHeight();\n\n\t\tvar viewType = this.view.type;\n\t\tvar scrollState = this.view.queryScroll();\n\t\tthis.clearView();\n\t\tthis.calcSize();\n\t\tthis.renderView(viewType, scrollState);\n\n\t\tthis.thawContentHeight();\n\t\tthis.ignoreWindowResize--;\n\t},\n\n\n\t// Resizing\n\t// -----------------------------------------------------------------------------------\n\n\n\tgetSuggestedViewHeight: function() {\n\t\tif (this.suggestedViewHeight === null) {\n\t\t\tthis.calcSize();\n\t\t}\n\t\treturn this.suggestedViewHeight;\n\t},\n\n\n\tisHeightAuto: function() {\n\t\treturn this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\n\t},\n\n\n\tupdateSize: function(shouldRecalc) {\n\t\tif (this.elementVisible()) {\n\n\t\t\tif (shouldRecalc) {\n\t\t\t\tthis._calcSize();\n\t\t\t}\n\n\t\t\tthis.ignoreWindowResize++;\n\t\t\tthis.view.updateSize(true); // isResize=true. will poll getSuggestedViewHeight() and isHeightAuto()\n\t\t\tthis.ignoreWindowResize--;\n\n\t\t\treturn true; // signal success\n\t\t}\n\t},\n\n\n\tcalcSize: function() {\n\t\tif (this.elementVisible()) {\n\t\t\tthis._calcSize();\n\t\t}\n\t},\n\n\n\t_calcSize: function() { // assumes elementVisible\n\t\tvar contentHeightInput = this.opt('contentHeight');\n\t\tvar heightInput = this.opt('height');\n\n\t\tif (typeof contentHeightInput === 'number') { // exists and not 'auto'\n\t\t\tthis.suggestedViewHeight = contentHeightInput;\n\t\t}\n\t\telse if (typeof contentHeightInput === 'function') { // exists and is a function\n\t\t\tthis.suggestedViewHeight = contentHeightInput();\n\t\t}\n\t\telse if (typeof heightInput === 'number') { // exists and not 'auto'\n\t\t\tthis.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\n\t\t}\n\t\telse if (typeof heightInput === 'function') { // exists and is a function\n\t\t\tthis.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\n\t\t}\n\t\telse if (heightInput === 'parent') { // set to height of parent element\n\t\t\tthis.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\n\t\t}\n\t\telse {\n\t\t\tthis.suggestedViewHeight = Math.round(\n\t\t\t\tthis.contentEl.width() /\n\t\t\t\tMath.max(this.opt('aspectRatio'), .5)\n\t\t\t);\n\t\t}\n\t},\n\n\n\twindowResize: function(ev) {\n\t\tif (\n\t\t\t!this.ignoreWindowResize &&\n\t\t\tev.target === window && // so we don't process jqui \""resize\"" events that have bubbled up\n\t\t\tthis.view.renderRange // view has already been rendered\n\t\t) {\n\t\t\tif (this.updateSize(true)) {\n\t\t\t\tthis.view.publiclyTrigger('windowResize', this.el[0]);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* Height \""Freezing\""\n\t-----------------------------------------------------------------------------*/\n\n\n\tfreezeContentHeight: function() {\n\t\tthis.contentEl.css({\n\t\t\twidth: '100%',\n\t\t\theight: this.contentEl.height(),\n\t\t\toverflow: 'hidden'\n\t\t});\n\t},\n\n\n\tthawContentHeight: function() {\n\t\tthis.contentEl.css({\n\t\t\twidth: '',\n\t\t\theight: '',\n\t\t\toverflow: ''\n\t\t});\n\t}\n\n});\n\n;;\n\nCalendar.mixin({\n\n\theader: null,\n\tfooter: null,\n\ttoolbarsManager: null,\n\n\n\tinitToolbars: function() {\n\t\tthis.header = new Toolbar(this, this.computeHeaderOptions());\n\t\tthis.footer = new Toolbar(this, this.computeFooterOptions());\n\t\tthis.toolbarsManager = new Iterator([ this.header, this.footer ]);\n\t},\n\n\n\tcomputeHeaderOptions: function() {\n\t\treturn {\n\t\t\textraClasses: 'fc-header-toolbar',\n\t\t\tlayout: this.opt('header')\n\t\t};\n\t},\n\n\n\tcomputeFooterOptions: function() {\n\t\treturn {\n\t\t\textraClasses: 'fc-footer-toolbar',\n\t\t\tlayout: this.opt('footer')\n\t\t};\n\t},\n\n\n\t// can be called repeatedly and Header will rerender\n\trenderHeader: function() {\n\t\tvar header = this.header;\n\n\t\theader.setToolbarOptions(this.computeHeaderOptions());\n\t\theader.render();\n\n\t\tif (header.el) {\n\t\t\tthis.el.prepend(header.el);\n\t\t}\n\t},\n\n\n\t// can be called repeatedly and Footer will rerender\n\trenderFooter: function() {\n\t\tvar footer = this.footer;\n\n\t\tfooter.setToolbarOptions(this.computeFooterOptions());\n\t\tfooter.render();\n\n\t\tif (footer.el) {\n\t\t\tthis.el.append(footer.el);\n\t\t}\n\t},\n\n\n\tsetToolbarsTitle: function(title) {\n\t\tthis.toolbarsManager.proxyCall('updateTitle', title);\n\t},\n\n\n\tupdateToolbarButtons: function() {\n\t\tvar now = this.getNow();\n\t\tvar view = this.view;\n\t\tvar todayInfo = view.buildDateProfile(now);\n\t\tvar prevInfo = view.buildPrevDateProfile(this.currentDate);\n\t\tvar nextInfo = view.buildNextDateProfile(this.currentDate);\n\n\t\tthis.toolbarsManager.proxyCall(\n\t\t\t(todayInfo.isValid && !isDateWithinRange(now, view.currentRange)) ?\n\t\t\t\t'enableButton' :\n\t\t\t\t'disableButton',\n\t\t\t'today'\n\t\t);\n\n\t\tthis.toolbarsManager.proxyCall(\n\t\t\tprevInfo.isValid ?\n\t\t\t\t'enableButton' :\n\t\t\t\t'disableButton',\n\t\t\t'prev'\n\t\t);\n\n\t\tthis.toolbarsManager.proxyCall(\n\t\t\tnextInfo.isValid ?\n\t\t\t\t'enableButton' :\n\t\t\t\t'disableButton',\n\t\t\t'next'\n\t\t);\n\t},\n\n\n\tqueryToolbarsHeight: function() {\n\t\treturn this.toolbarsManager.items.reduce(function(accumulator, toolbar) {\n\t\t\tvar toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\n\t\t\treturn accumulator + toolbarHeight;\n\t\t}, 0);\n\t}\n\n});\n\n;;\n\nCalendar.defaults = {\n\n\ttitleRangeSeparator: ' \\u2013 ', // en dash\n\tmonthYearFormat: 'MMMM YYYY', // required for en. other locales rely on datepicker computable option\n\n\tdefaultTimedEventDuration: '02:00:00',\n\tdefaultAllDayEventDuration: { days: 1 },\n\tforceEventDuration: false,\n\tnextDayThreshold: '09:00:00', // 9am\n\n\t// display\n\tdefaultView: 'month',\n\taspectRatio: 1.35,\n\theader: {\n\t\tleft: 'title',\n\t\tcenter: '',\n\t\tright: 'today prev,next'\n\t},\n\tweekends: true,\n\tweekNumbers: false,\n\n\tweekNumberTitle: 'W',\n\tweekNumberCalculation: 'local',\n\t\n\t//editable: false,\n\n\t//nowIndicator: false,\n\n\tscrollTime: '06:00:00',\n\tminTime: '00:00:00',\n\tmaxTime: '24:00:00',\n\tshowNonCurrentDates: true,\n\t\n\t// event ajax\n\tlazyFetching: true,\n\tstartParam: 'start',\n\tendParam: 'end',\n\ttimezoneParam: 'timezone',\n\n\ttimezone: false,\n\n\t//allDayDefault: undefined,\n\n\t// locale\n\tisRTL: false,\n\tbuttonText: {\n\t\tprev: \""prev\"",\n\t\tnext: \""next\"",\n\t\tprevYear: \""prev year\"",\n\t\tnextYear: \""next year\"",\n\t\tyear: 'year', // TODO: locale files need to specify this\n\t\ttoday: 'today',\n\t\tmonth: 'month',\n\t\tweek: 'week',\n\t\tday: 'day'\n\t},\n\n\tbuttonIcons: {\n\t\tprev: 'left-single-arrow',\n\t\tnext: 'right-single-arrow',\n\t\tprevYear: 'left-double-arrow',\n\t\tnextYear: 'right-double-arrow'\n\t},\n\n\tallDayText: 'all-day',\n\t\n\t// jquery-ui theming\n\ttheme: false,\n\tthemeButtonIcons: {\n\t\tprev: 'circle-triangle-w',\n\t\tnext: 'circle-triangle-e',\n\t\tprevYear: 'seek-prev',\n\t\tnextYear: 'seek-next'\n\t},\n\n\t//eventResizableFromStart: false,\n\tdragOpacity: .75,\n\tdragRevertDuration: 500,\n\tdragScroll: true,\n\t\n\t//selectable: false,\n\tunselectAuto: true,\n\t//selectMinDistance: 0,\n\t\n\tdropAccept: '*',\n\n\teventOrder: 'title',\n\t//eventRenderWait: null,\n\n\teventLimit: false,\n\teventLimitText: 'more',\n\teventLimitClick: 'popover',\n\tdayPopoverFormat: 'LL',\n\t\n\thandleWindowResize: true,\n\twindowResizeDelay: 100, // milliseconds before an updateSize happens\n\n\tlongPressDelay: 1000\n\t\n};\n\n\nCalendar.englishDefaults = { // used by locale.js\n\tdayPopoverFormat: 'dddd, MMMM D'\n};\n\n\nCalendar.rtlDefaults = { // right-to-left defaults\n\theader: { // TODO: smarter solution (first/center/last ?)\n\t\tleft: 'next,prev today',\n\t\tcenter: '',\n\t\tright: 'title'\n\t},\n\tbuttonIcons: {\n\t\tprev: 'right-single-arrow',\n\t\tnext: 'left-single-arrow',\n\t\tprevYear: 'right-double-arrow',\n\t\tnextYear: 'left-double-arrow'\n\t},\n\tthemeButtonIcons: {\n\t\tprev: 'circle-triangle-e',\n\t\tnext: 'circle-triangle-w',\n\t\tnextYear: 'seek-prev',\n\t\tprevYear: 'seek-next'\n\t}\n};\n\n;;\n\nvar localeOptionHash = FC.locales = {}; // initialize and expose\n\n\n// TODO: document the structure and ordering of a FullCalendar locale file\n\n\n// Initialize jQuery UI datepicker translations while using some of the translations\n// Will set this as the default locales for datepicker.\nFC.datepickerLocale = function(localeCode, dpLocaleCode, dpOptions) {\n\n\t// get the FullCalendar internal option hash for this locale. create if necessary\n\tvar fcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {});\n\n\t// transfer some simple options from datepicker to fc\n\tfcOptions.isRTL = dpOptions.isRTL;\n\tfcOptions.weekNumberTitle = dpOptions.weekHeader;\n\n\t// compute some more complex options from datepicker\n\t$.each(dpComputableOptions, function(name, func) {\n\t\tfcOptions[name] = func(dpOptions);\n\t});\n\n\t// is jQuery UI Datepicker is on the page?\n\tif ($.datepicker) {\n\n\t\t// Register the locale data.\n\t\t// FullCalendar and MomentJS use locale codes like \""pt-br\"" but Datepicker\n\t\t// does it like \""pt-BR\"" or if it doesn't have the locale, maybe just \""pt\"".\n\t\t// Make an alias so the locale can be referenced either way.\n\t\t$.datepicker.regional[dpLocaleCode] =\n\t\t\t$.datepicker.regional[localeCode] = // alias\n\t\t\t\tdpOptions;\n\n\t\t// Alias 'en' to the default locale data. Do this every time.\n\t\t$.datepicker.regional.en = $.datepicker.regional[''];\n\n\t\t// Set as Datepicker's global defaults.\n\t\t$.datepicker.setDefaults(dpOptions);\n\t}\n};\n\n\n// Sets FullCalendar-specific translations. Will set the locales as the global default.\nFC.locale = function(localeCode, newFcOptions) {\n\tvar fcOptions;\n\tvar momOptions;\n\n\t// get the FullCalendar internal option hash for this locale. create if necessary\n\tfcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {});\n\n\t// provided new options for this locales? merge them in\n\tif (newFcOptions) {\n\t\tfcOptions = localeOptionHash[localeCode] = mergeOptions([ fcOptions, newFcOptions ]);\n\t}\n\n\t// compute locale options that weren't defined.\n\t// always do this. newFcOptions can be undefined when initializing from i18n file,\n\t// so no way to tell if this is an initialization or a default-setting.\n\tmomOptions = getMomentLocaleData(localeCode); // will fall back to en\n\t$.each(momComputableOptions, function(name, func) {\n\t\tif (fcOptions[name] == null) {\n\t\t\tfcOptions[name] = func(momOptions, fcOptions);\n\t\t}\n\t});\n\n\t// set it as the default locale for FullCalendar\n\tCalendar.defaults.locale = localeCode;\n};\n\n\n// NOTE: can't guarantee any of these computations will run because not every locale has datepicker\n// configs, so make sure there are English fallbacks for these in the defaults file.\nvar dpComputableOptions = {\n\n\tbuttonText: function(dpOptions) {\n\t\treturn {\n\t\t\t// the translations sometimes wrongly contain HTML entities\n\t\t\tprev: stripHtmlEntities(dpOptions.prevText),\n\t\t\tnext: stripHtmlEntities(dpOptions.nextText),\n\t\t\ttoday: stripHtmlEntities(dpOptions.currentText)\n\t\t};\n\t},\n\n\t// Produces format strings like \""MMMM YYYY\"" -> \""September 2014\""\n\tmonthYearFormat: function(dpOptions) {\n\t\treturn dpOptions.showMonthAfterYear ?\n\t\t\t'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\n\t\t\t'MMMM YYYY[' + dpOptions.yearSuffix + ']';\n\t}\n\n};\n\nvar momComputableOptions = {\n\n\t// Produces format strings like \""ddd M/D\"" -> \""Fri 9/15\""\n\tdayOfMonthFormat: function(momOptions, fcOptions) {\n\t\tvar format = momOptions.longDateFormat('l'); // for the format like \""M/D/YYYY\""\n\n\t\t// strip the year off the edge, as well as other misc non-whitespace chars\n\t\tformat = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\n\n\t\tif (fcOptions.isRTL) {\n\t\t\tformat += ' ddd'; // for RTL, add day-of-week to end\n\t\t}\n\t\telse {\n\t\t\tformat = 'ddd ' + format; // for LTR, add day-of-week to beginning\n\t\t}\n\t\treturn format;\n\t},\n\n\t// Produces format strings like \""h:mma\"" -> \""6:00pm\""\n\tmediumTimeFormat: function(momOptions) { // can't be called `timeFormat` because collides with option\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \""h(:mm)a\"" -> \""6pm\"" / \""6:30pm\""\n\tsmallTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(':mm', '(:mm)')\n\t\t\t.replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\n\t\t\t.replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \""h(:mm)t\"" -> \""6p\"" / \""6:30p\""\n\textraSmallTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(':mm', '(:mm)')\n\t\t\t.replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\n\t\t\t.replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \""ha\"" / \""H\"" -> \""6pm\"" / \""18\""\n\thourFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(':mm', '')\n\t\t\t.replace(/(\\Wmm)$/, '') // like above, but for foreign locales\n\t\t\t.replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \""h:mm\"" -> \""6:30\"" (with no AM/PM)\n\tnoMeridiemTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(/\\s*a$/i, ''); // remove trailing AM/PM\n\t}\n\n};\n\n\n// options that should be computed off live calendar options (considers override options)\n// TODO: best place for this? related to locale?\n// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\nvar instanceComputableOptions = {\n\n\t// Produces format strings for results like \""Mo 16\""\n\tsmallDayDateFormat: function(options) {\n\t\treturn options.isRTL ?\n\t\t\t'D dd' :\n\t\t\t'dd D';\n\t},\n\n\t// Produces format strings for results like \""Wk 5\""\n\tweekFormat: function(options) {\n\t\treturn options.isRTL ?\n\t\t\t'w[ ' + options.weekNumberTitle + ']' :\n\t\t\t'[' + options.weekNumberTitle + ' ]w';\n\t},\n\n\t// Produces format strings for results like \""Wk5\""\n\tsmallWeekFormat: function(options) {\n\t\treturn options.isRTL ?\n\t\t\t'w[' + options.weekNumberTitle + ']' :\n\t\t\t'[' + options.weekNumberTitle + ']w';\n\t}\n\n};\n\n// TODO: make these computable properties in optionsModel\nfunction populateInstanceComputableOptions(options) {\n\t$.each(instanceComputableOptions, function(name, func) {\n\t\tif (options[name] == null) {\n\t\t\toptions[name] = func(options);\n\t\t}\n\t});\n}\n\n\n// Returns moment's internal locale data. If doesn't exist, returns English.\nfunction getMomentLocaleData(localeCode) {\n\treturn moment.localeData(localeCode) || moment.localeData('en');\n}\n\n\n// Initialize English by forcing computation of moment-derived options.\n// Also, sets it as the default.\nFC.locale('en', Calendar.englishDefaults);\n\n;;\n\nFC.sourceNormalizers = [];\nFC.sourceFetchers = [];\n\nvar ajaxDefaults = {\n\tdataType: 'json',\n\tcache: false\n};\n\nvar eventGUID = 1;\n\n\nfunction EventManager() { // assumed to be a calendar\n\tvar t = this;\n\n\n\t// exports\n\tt.requestEvents = requestEvents;\n\tt.reportEventChange = reportEventChange;\n\tt.isFetchNeeded = isFetchNeeded;\n\tt.fetchEvents = fetchEvents;\n\tt.fetchEventSources = fetchEventSources;\n\tt.refetchEvents = refetchEvents;\n\tt.refetchEventSources = refetchEventSources;\n\tt.getEventSources = getEventSources;\n\tt.getEventSourceById = getEventSourceById;\n\tt.addEventSource = addEventSource;\n\tt.removeEventSource = removeEventSource;\n\tt.removeEventSources = removeEventSources;\n\tt.updateEvent = updateEvent;\n\tt.updateEvents = updateEvents;\n\tt.renderEvent = renderEvent;\n\tt.renderEvents = renderEvents;\n\tt.removeEvents = removeEvents;\n\tt.clientEvents = clientEvents;\n\tt.mutateEvent = mutateEvent;\n\tt.normalizeEventDates = normalizeEventDates;\n\tt.normalizeEventTimes = normalizeEventTimes;\n\n\n\t// locals\n\tvar stickySource = { events: [] };\n\tvar sources = [ stickySource ];\n\tvar rangeStart, rangeEnd;\n\tvar pendingSourceCnt = 0; // outstanding fetch requests, max one per source\n\tvar cache = []; // holds events that have already been expanded\n\tvar prunedCache; // like cache, but only events that intersect with rangeStart/rangeEnd\n\n\n\t$.each(\n\t\t(t.opt('events') ? [ t.opt('events') ] : []).concat(t.opt('eventSources') || []),\n\t\tfunction(i, sourceInput) {\n\t\t\tvar source = buildEventSource(sourceInput);\n\t\t\tif (source) {\n\t\t\t\tsources.push(source);\n\t\t\t}\n\t\t}\n\t);\n\n\n\n\tfunction requestEvents(start, end) {\n\t\tif (!t.opt('lazyFetching') || isFetchNeeded(start, end)) {\n\t\t\treturn fetchEvents(start, end);\n\t\t}\n\t\telse {\n\t\t\treturn Promise.resolve(prunedCache);\n\t\t}\n\t}\n\n\n\tfunction reportEventChange() {\n\t\tprunedCache = filterEventsWithinRange(cache);\n\t\tt.trigger('eventsReset', prunedCache);\n\t}\n\n\n\tfunction filterEventsWithinRange(events) {\n\t\tvar filteredEvents = [];\n\t\tvar i, event;\n\n\t\tfor (i = 0; i < events.length; i++) {\n\t\t\tevent = events[i];\n\n\t\t\tif (\n\t\t\t\tevent.start.clone().stripZone() < rangeEnd &&\n\t\t\t\tt.getEventEnd(event).stripZone() > rangeStart\n\t\t\t) {\n\t\t\t\tfilteredEvents.push(event);\n\t\t\t}\n\t\t}\n\n\t\treturn filteredEvents;\n\t}\n\n\n\tt.getEventCache = function() {\n\t\treturn cache;\n\t};\n\n\n\n\t/* Fetching\n\t-----------------------------------------------------------------------------*/\n\n\n\t// start and end are assumed to be unzoned\n\tfunction isFetchNeeded(start, end) {\n\t\treturn !rangeStart || // nothing has been fetched yet?\n\t\t\tstart < rangeStart || end > rangeEnd; // is part of the new range outside of the old range?\n\t}\n\n\n\tfunction fetchEvents(start, end) {\n\t\trangeStart = start;\n\t\trangeEnd = end;\n\t\treturn refetchEvents();\n\t}\n\n\n\t// poorly named. fetches all sources with current `rangeStart` and `rangeEnd`.\n\tfunction refetchEvents() {\n\t\treturn fetchEventSources(sources, 'reset');\n\t}\n\n\n\t// poorly named. fetches a subset of event sources.\n\tfunction refetchEventSources(matchInputs) {\n\t\treturn fetchEventSources(getEventSourcesByMatchArray(matchInputs));\n\t}\n\n\n\t// expects an array of event source objects (the originals, not copies)\n\t// `specialFetchType` is an optimization parameter that affects purging of the event cache.\n\tfunction fetchEventSources(specificSources, specialFetchType) {\n\t\tvar i, source;\n\n\t\tif (specialFetchType === 'reset') {\n\t\t\tcache = [];\n\t\t}\n\t\telse if (specialFetchType !== 'add') {\n\t\t\tcache = excludeEventsBySources(cache, specificSources);\n\t\t}\n\n\t\tfor (i = 0; i < specificSources.length; i++) {\n\t\t\tsource = specificSources[i];\n\n\t\t\t// already-pending sources have already been accounted for in pendingSourceCnt\n\t\t\tif (source._status !== 'pending') {\n\t\t\t\tpendingSourceCnt++;\n\t\t\t}\n\n\t\t\tsource._fetchId = (source._fetchId || 0) + 1;\n\t\t\tsource._status = 'pending';\n\t\t}\n\n\t\tfor (i = 0; i < specificSources.length; i++) {\n\t\t\tsource = specificSources[i];\n\t\t\ttryFetchEventSource(source, source._fetchId);\n\t\t}\n\n\t\tif (pendingSourceCnt) {\n\t\t\treturn Promise.construct(function(resolve) {\n\t\t\t\tt.one('eventsReceived', resolve); // will send prunedCache\n\t\t\t});\n\t\t}\n\t\telse { // executed all synchronously, or no sources at all\n\t\t\treturn Promise.resolve(prunedCache);\n\t\t}\n\t}\n\n\n\t// fetches an event source and processes its result ONLY if it is still the current fetch.\n\t// caller is responsible for incrementing pendingSourceCnt first.\n\tfunction tryFetchEventSource(source, fetchId) {\n\t\t_fetchEventSource(source, function(eventInputs) {\n\t\t\tvar isArraySource = $.isArray(source.events);\n\t\t\tvar i, eventInput;\n\t\t\tvar abstractEvent;\n\n\t\t\tif (\n\t\t\t\t// is this the source's most recent fetch?\n\t\t\t\t// if not, rely on an upcoming fetch of this source to decrement pendingSourceCnt\n\t\t\t\tfetchId === source._fetchId &&\n\t\t\t\t// event source no longer valid?\n\t\t\t\tsource._status !== 'rejected'\n\t\t\t) {\n\t\t\t\tsource._status = 'resolved';\n\n\t\t\t\tif (eventInputs) {\n\t\t\t\t\tfor (i = 0; i < eventInputs.length; i++) {\n\t\t\t\t\t\teventInput = eventInputs[i];\n\n\t\t\t\t\t\tif (isArraySource) { // array sources have already been convert to Event Objects\n\t\t\t\t\t\t\tabstractEvent = eventInput;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tabstractEvent = buildEventFromInput(eventInput, source);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (abstractEvent) { // not false (an invalid event)\n\t\t\t\t\t\t\tcache.push.apply( // append\n\t\t\t\t\t\t\t\tcache,\n\t\t\t\t\t\t\t\texpandEvent(abstractEvent) // add individual expanded events to the cache\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdecrementPendingSourceCnt();\n\t\t\t}\n\t\t});\n\t}\n\n\n\tfunction rejectEventSource(source) {\n\t\tvar wasPending = source._status === 'pending';\n\n\t\tsource._status = 'rejected';\n\n\t\tif (wasPending) {\n\t\t\tdecrementPendingSourceCnt();\n\t\t}\n\t}\n\n\n\tfunction decrementPendingSourceCnt() {\n\t\tpendingSourceCnt--;\n\t\tif (!pendingSourceCnt) {\n\t\t\treportEventChange(cache); // updates prunedCache\n\t\t\tt.trigger('eventsReceived', prunedCache);\n\t\t}\n\t}\n\n\n\tfunction _fetchEventSource(source, callback) {\n\t\tvar i;\n\t\tvar fetchers = FC.sourceFetchers;\n\t\tvar res;\n\n\t\tfor (i=0; i<fetchers.length; i++) {\n\t\t\tres = fetchers[i].call(\n\t\t\t\tt, // this, the Calendar object\n\t\t\t\tsource,\n\t\t\t\trangeStart.clone(),\n\t\t\t\trangeEnd.clone(),\n\t\t\t\tt.opt('timezone'),\n\t\t\t\tcallback\n\t\t\t);\n\n\t\t\tif (res === true) {\n\t\t\t\t// the fetcher is in charge. made its own async request\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (typeof res == 'object') {\n\t\t\t\t// the fetcher returned a new source. process it\n\t\t\t\t_fetchEventSource(res, callback);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tvar events = source.events;\n\t\tif (events) {\n\t\t\tif ($.isFunction(events)) {\n\t\t\t\tt.pushLoading();\n\t\t\t\tevents.call(\n\t\t\t\t\tt, // this, the Calendar object\n\t\t\t\t\trangeStart.clone(),\n\t\t\t\t\trangeEnd.clone(),\n\t\t\t\t\tt.opt('timezone'),\n\t\t\t\t\tfunction(events) {\n\t\t\t\t\t\tcallback(events);\n\t\t\t\t\t\tt.popLoading();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\telse if ($.isArray(events)) {\n\t\t\t\tcallback(events);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}else{\n\t\t\tvar url = source.url;\n\t\t\tif (url) {\n\t\t\t\tvar success = source.success;\n\t\t\t\tvar error = source.error;\n\t\t\t\tvar complete = source.complete;\n\n\t\t\t\t// retrieve any outbound GET/POST $.ajax data from the options\n\t\t\t\tvar customData;\n\t\t\t\tif ($.isFunction(source.data)) {\n\t\t\t\t\t// supplied as a function that returns a key/value object\n\t\t\t\t\tcustomData = source.data();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// supplied as a straight key/value object\n\t\t\t\t\tcustomData = source.data;\n\t\t\t\t}\n\n\t\t\t\t// use a copy of the custom data so we can modify the parameters\n\t\t\t\t// and not affect the passed-in object.\n\t\t\t\tvar data = $.extend({}, customData || {});\n\n\t\t\t\tvar startParam = firstDefined(source.startParam, t.opt('startParam'));\n\t\t\t\tvar endParam = firstDefined(source.endParam, t.opt('endParam'));\n\t\t\t\tvar timezoneParam = firstDefined(source.timezoneParam, t.opt('timezoneParam'));\n\n\t\t\t\tif (startParam) {\n\t\t\t\t\tdata[startParam] = rangeStart.format();\n\t\t\t\t}\n\t\t\t\tif (endParam) {\n\t\t\t\t\tdata[endParam] = rangeEnd.format();\n\t\t\t\t}\n\t\t\t\tif (t.opt('timezone') && t.opt('timezone') != 'local') {\n\t\t\t\t\tdata[timezoneParam] = t.opt('timezone');\n\t\t\t\t}\n\n\t\t\t\tt.pushLoading();\n\t\t\t\t$.ajax($.extend({}, ajaxDefaults, source, {\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function(events) {\n\t\t\t\t\t\tevents = events || [];\n\t\t\t\t\t\tvar res = applyAll(success, this, arguments);\n\t\t\t\t\t\tif ($.isArray(res)) {\n\t\t\t\t\t\t\tevents = res;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallback(events);\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tapplyAll(error, this, arguments);\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tapplyAll(complete, this, arguments);\n\t\t\t\t\t\tt.popLoading();\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}else{\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/* Sources\n\t-----------------------------------------------------------------------------*/\n\n\n\tfunction addEventSource(sourceInput) {\n\t\tvar source = buildEventSource(sourceInput);\n\t\tif (source) {\n\t\t\tsources.push(source);\n\t\t\tfetchEventSources([ source ], 'add'); // will eventually call reportEventChange\n\t\t}\n\t}\n\n\n\tfunction buildEventSource(sourceInput) { // will return undefined if invalid source\n\t\tvar normalizers = FC.sourceNormalizers;\n\t\tvar source;\n\t\tvar i;\n\n\t\tif ($.isFunction(sourceInput) || $.isArray(sourceInput)) {\n\t\t\tsource = { events: sourceInput };\n\t\t}\n\t\telse if (typeof sourceInput === 'string') {\n\t\t\tsource = { url: sourceInput };\n\t\t}\n\t\telse if (typeof sourceInput === 'object') {\n\t\t\tsource = $.extend({}, sourceInput); // shallow copy\n\t\t}\n\n\t\tif (source) {\n\n\t\t\t// TODO: repeat code, same code for event classNames\n\t\t\tif (source.className) {\n\t\t\t\tif (typeof source.className === 'string') {\n\t\t\t\t\tsource.className = source.className.split(/\\s+/);\n\t\t\t\t}\n\t\t\t\t// otherwise, assumed to be an array\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsource.className = [];\n\t\t\t}\n\n\t\t\t// for array sources, we convert to standard Event Objects up front\n\t\t\tif ($.isArray(source.events)) {\n\t\t\t\tsource.origArray = source.events; // for removeEventSource\n\t\t\t\tsource.events = $.map(source.events, function(eventInput) {\n\t\t\t\t\treturn buildEventFromInput(eventInput, source);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (i=0; i<normalizers.length; i++) {\n\t\t\t\tnormalizers[i].call(t, source);\n\t\t\t}\n\n\t\t\treturn source;\n\t\t}\n\t}\n\n\n\tfunction removeEventSource(matchInput) {\n\t\tremoveSpecificEventSources(\n\t\t\tgetEventSourcesByMatch(matchInput)\n\t\t);\n\t}\n\n\n\t// if called with no arguments, removes all.\n\tfunction removeEventSources(matchInputs) {\n\t\tif (matchInputs == null) {\n\t\t\tremoveSpecificEventSources(sources, true); // isAll=true\n\t\t}\n\t\telse {\n\t\t\tremoveSpecificEventSources(\n\t\t\t\tgetEventSourcesByMatchArray(matchInputs)\n\t\t\t);\n\t\t}\n\t}\n\n\n\tfunction removeSpecificEventSources(targetSources, isAll) {\n\t\tvar i;\n\n\t\t// cancel pending requests\n\t\tfor (i = 0; i < targetSources.length; i++) {\n\t\t\trejectEventSource(targetSources[i]);\n\t\t}\n\n\t\tif (isAll) { // an optimization\n\t\t\tsources = [];\n\t\t\tcache = [];\n\t\t}\n\t\telse {\n\t\t\t// remove from persisted source list\n\t\t\tsources = $.grep(sources, function(source) {\n\t\t\t\tfor (i = 0; i < targetSources.length; i++) {\n\t\t\t\t\tif (source === targetSources[i]) {\n\t\t\t\t\t\treturn false; // exclude\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true; // include\n\t\t\t});\n\n\t\t\tcache = excludeEventsBySources(cache, targetSources);\n\t\t}\n\n\t\treportEventChange();\n\t}\n\n\n\tfunction getEventSources() {\n\t\treturn sources.slice(1); // returns a shallow copy of sources with stickySource removed\n\t}\n\n\n\tfunction getEventSourceById(id) {\n\t\treturn $.grep(sources, function(source) {\n\t\t\treturn source.id && source.id === id;\n\t\t})[0];\n\t}\n\n\n\t// like getEventSourcesByMatch, but accepts multple match criteria (like multiple IDs)\n\tfunction getEventSourcesByMatchArray(matchInputs) {\n\n\t\t// coerce into an array\n\t\tif (!matchInputs) {\n\t\t\tmatchInputs = [];\n\t\t}\n\t\telse if (!$.isArray(matchInputs)) {\n\t\t\tmatchInputs = [ matchInputs ];\n\t\t}\n\n\t\tvar matchingSources = [];\n\t\tvar i;\n\n\t\t// resolve raw inputs to real event source objects\n\t\tfor (i = 0; i < matchInputs.length; i++) {\n\t\t\tmatchingSources.push.apply( // append\n\t\t\t\tmatchingSources,\n\t\t\t\tgetEventSourcesByMatch(matchInputs[i])\n\t\t\t);\n\t\t}\n\n\t\treturn matchingSources;\n\t}\n\n\n\t// matchInput can either by a real event source object, an ID, or the function/URL for the source.\n\t// returns an array of matching source objects.\n\tfunction getEventSourcesByMatch(matchInput) {\n\t\tvar i, source;\n\n\t\t// given an proper event source object\n\t\tfor (i = 0; i < sources.length; i++) {\n\t\t\tsource = sources[i];\n\t\t\tif (source === matchInput) {\n\t\t\t\treturn [ source ];\n\t\t\t}\n\t\t}\n\n\t\t// an ID match\n\t\tsource = getEventSourceById(matchInput);\n\t\tif (source) {\n\t\t\treturn [ source ];\n\t\t}\n\n\t\treturn $.grep(sources, function(source) {\n\t\t\treturn isSourcesEquivalent(matchInput, source);\n\t\t});\n\t}\n\n\n\tfunction isSourcesEquivalent(source1, source2) {\n\t\treturn source1 && source2 && getSourcePrimitive(source1) == getSourcePrimitive(source2);\n\t}\n\n\n\tfunction getSourcePrimitive(source) {\n\t\treturn (\n\t\t\t(typeof source === 'object') ? // a normalized event source?\n\t\t\t\t(source.origArray || source.googleCalendarId || source.url || source.events) : // get the primitive\n\t\t\t\tnull\n\t\t) ||\n\t\tsource; // the given argument *is* the primitive\n\t}\n\n\n\t// util\n\t// returns a filtered array without events that are part of any of the given sources\n\tfunction excludeEventsBySources(specificEvents, specificSources) {\n\t\treturn $.grep(specificEvents, function(event) {\n\t\t\tfor (var i = 0; i < specificSources.length; i++) {\n\t\t\t\tif (event.source === specificSources[i]) {\n\t\t\t\t\treturn false; // exclude\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true; // keep\n\t\t});\n\t}\n\n\n\n\t/* Manipulation\n\t-----------------------------------------------------------------------------*/\n\n\n\t// Only ever called from the externally-facing API\n\tfunction updateEvent(event) {\n\t\tupdateEvents([ event ]);\n\t}\n\n\n\t// Only ever called from the externally-facing API\n\tfunction updateEvents(events) {\n\t\tvar i, event;\n\n\t\tfor (i = 0; i < events.length; i++) {\n\t\t\tevent = events[i];\n\n\t\t\t// massage start/end values, even if date string values\n\t\t\tevent.start = t.moment(event.start);\n\t\t\tif (event.end) {\n\t\t\t\tevent.end = t.moment(event.end);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tevent.end = null;\n\t\t\t}\n\n\t\t\tmutateEvent(event, getMiscEventProps(event)); // will handle start/end/allDay normalization\n\t\t}\n\n\t\treportEventChange(); // reports event modifications (so we can redraw)\n\t}\n\n\n\t// Returns a hash of misc event properties that should be copied over to related events.\n\tfunction getMiscEventProps(event) {\n\t\tvar props = {};\n\n\t\t$.each(event, function(name, val) {\n\t\t\tif (isMiscEventPropName(name)) {\n\t\t\t\tif (val !== undefined && isAtomic(val)) { // a defined non-object\n\t\t\t\t\tprops[name] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn props;\n\t}\n\n\t// non-date-related, non-id-related, non-secret\n\tfunction isMiscEventPropName(name) {\n\t\treturn !/^_|^(id|allDay|start|end)$/.test(name);\n\t}\n\n\n\t// returns the expanded events that were created\n\tfunction renderEvent(eventInput, stick) {\n\t\treturn renderEvents([ eventInput ], stick);\n\t}\n\n\n\t// returns the expanded events that were created\n\tfunction renderEvents(eventInputs, stick) {\n\t\tvar renderedEvents = [];\n\t\tvar renderableEvents;\n\t\tvar abstractEvent;\n\t\tvar i, j, event;\n\n\t\tfor (i = 0; i < eventInputs.length; i++) {\n\t\t\tabstractEvent = buildEventFromInput(eventInputs[i]);\n\n\t\t\tif (abstractEvent) { // not false (a valid input)\n\t\t\t\trenderableEvents = expandEvent(abstractEvent);\n\n\t\t\t\tfor (j = 0; j < renderableEvents.length; j++) {\n\t\t\t\t\tevent = renderableEvents[j];\n\n\t\t\t\t\tif (!event.source) {\n\t\t\t\t\t\tif (stick) {\n\t\t\t\t\t\t\tstickySource.events.push(event);\n\t\t\t\t\t\t\tevent.source = stickySource;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcache.push(event);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trenderedEvents = renderedEvents.concat(renderableEvents);\n\t\t\t}\n\t\t}\n\n\t\tif (renderedEvents.length) { // any new events rendered?\n\t\t\treportEventChange();\n\t\t}\n\n\t\treturn renderedEvents;\n\t}\n\n\n\tfunction removeEvents(filter) {\n\t\tvar eventID;\n\t\tvar i;\n\n\t\tif (filter == null) { // null or undefined. remove all events\n\t\t\tfilter = function() { return true; }; // will always match\n\t\t}\n\t\telse if (!$.isFunction(filter)) { // an event ID\n\t\t\teventID = filter + '';\n\t\t\tfilter = function(event) {\n\t\t\t\treturn event._id == eventID;\n\t\t\t};\n\t\t}\n\n\t\t// Purge event(s) from our local cache\n\t\tcache = $.grep(cache, filter, true); // inverse=true\n\n\t\t// Remove events from array sources.\n\t\t// This works because they have been converted to official Event Objects up front.\n\t\t// (and as a result, event._id has been calculated).\n\t\tfor (i=0; i<sources.length; i++) {\n\t\t\tif ($.isArray(sources[i].events)) {\n\t\t\t\tsources[i].events = $.grep(sources[i].events, filter, true);\n\t\t\t}\n\t\t}\n\n\t\treportEventChange();\n\t}\n\n\n\tfunction clientEvents(filter) {\n\t\tif ($.isFunction(filter)) {\n\t\t\treturn $.grep(cache, filter);\n\t\t}\n\t\telse if (filter != null) { // not null, not undefined. an event ID\n\t\t\tfilter += '';\n\t\t\treturn $.grep(cache, function(e) {\n\t\t\t\treturn e._id == filter;\n\t\t\t});\n\t\t}\n\t\treturn cache; // else, return all\n\t}\n\n\n\t// Makes sure all array event sources have their internal event objects\n\t// converted over to the Calendar's current timezone.\n\tt.rezoneArrayEventSources = function() {\n\t\tvar i;\n\t\tvar events;\n\t\tvar j;\n\n\t\tfor (i = 0; i < sources.length; i++) {\n\t\t\tevents = sources[i].events;\n\t\t\tif ($.isArray(events)) {\n\n\t\t\t\tfor (j = 0; j < events.length; j++) {\n\t\t\t\t\trezoneEventDates(events[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction rezoneEventDates(event) {\n\t\tevent.start = t.moment(event.start);\n\t\tif (event.end) {\n\t\t\tevent.end = t.moment(event.end);\n\t\t}\n\t\tbackupEventDates(event);\n\t}\n\n\n\t/* Event Normalization\n\t-----------------------------------------------------------------------------*/\n\n\n\t// Given a raw object with key/value properties, returns an \""abstract\"" Event object.\n\t// An \""abstract\"" event is an event that, if recurring, will not have been expanded yet.\n\t// Will return `false` when input is invalid.\n\t// `source` is optional\n\tfunction buildEventFromInput(input, source) {\n\t\tvar calendarEventDataTransform = t.opt('eventDataTransform');\n\t\tvar out = {};\n\t\tvar start, end;\n\t\tvar allDay;\n\n\t\tif (calendarEventDataTransform) {\n\t\t\tinput = calendarEventDataTransform(input);\n\t\t}\n\t\tif (source && source.eventDataTransform) {\n\t\t\tinput = source.eventDataTransform(input);\n\t\t}\n\n\t\t// Copy all properties over to the resulting object.\n\t\t// The special-case properties will be copied over afterwards.\n\t\t$.extend(out, input);\n\n\t\tif (source) {\n\t\t\tout.source = source;\n\t\t}\n\n\t\tout._id = input._id || (input.id === undefined ? '_fc' + eventGUID++ : input.id + '');\n\n\t\tif (input.className) {\n\t\t\tif (typeof input.className == 'string') {\n\t\t\t\tout.className = input.className.split(/\\s+/);\n\t\t\t}\n\t\t\telse { // assumed to be an array\n\t\t\t\tout.className = input.className;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tout.className = [];\n\t\t}\n\n\t\tstart = input.start || input.date; // \""date\"" is an alias for \""start\""\n\t\tend = input.end;\n\n\t\t// parse as a time (Duration) if applicable\n\t\tif (isTimeString(start)) {\n\t\t\tstart = moment.duration(start);\n\t\t}\n\t\tif (isTimeString(end)) {\n\t\t\tend = moment.duration(end);\n\t\t}\n\n\t\tif (input.dow || moment.isDuration(start) || moment.isDuration(end)) {\n\n\t\t\t// the event is \""abstract\"" (recurring) so don't calculate exact start/end dates just yet\n\t\t\tout.start = start ? moment.duration(start) : null; // will be a Duration or null\n\t\t\tout.end = end ? moment.duration(end) : null; // will be a Duration or null\n\t\t\tout._recurring = true; // our internal marker\n\t\t}\n\t\telse {\n\n\t\t\tif (start) {\n\t\t\t\tstart = t.moment(start);\n\t\t\t\tif (!start.isValid()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (end) {\n\t\t\t\tend = t.moment(end);\n\t\t\t\tif (!end.isValid()) {\n\t\t\t\t\tend = null; // let defaults take over\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tallDay = input.allDay;\n\t\t\tif (allDay === undefined) { // still undefined? fallback to default\n\t\t\t\tallDay = firstDefined(\n\t\t\t\t\tsource ? source.allDayDefault : undefined,\n\t\t\t\t\tt.opt('allDayDefault')\n\t\t\t\t);\n\t\t\t\t// still undefined? normalizeEventDates will calculate it\n\t\t\t}\n\n\t\t\tassignDatesToEvent(start, end, allDay, out);\n\t\t}\n\n\t\tt.normalizeEvent(out); // hook for external use. a prototype method\n\n\t\treturn out;\n\t}\n\tt.buildEventFromInput = buildEventFromInput;\n\n\n\t// Normalizes and assigns the given dates to the given partially-formed event object.\n\t// NOTE: mutates the given start/end moments. does not make a copy.\n\tfunction assignDatesToEvent(start, end, allDay, event) {\n\t\tevent.start = start;\n\t\tevent.end = end;\n\t\tevent.allDay = allDay;\n\t\tnormalizeEventDates(event);\n\t\tbackupEventDates(event);\n\t}\n\n\n\t// Ensures proper values for allDay/start/end. Accepts an Event object, or a plain object with event-ish properties.\n\t// NOTE: Will modify the given object.\n\tfunction normalizeEventDates(eventProps) {\n\n\t\tnormalizeEventTimes(eventProps);\n\n\t\tif (eventProps.end && !eventProps.end.isAfter(eventProps.start)) {\n\t\t\teventProps.end = null;\n\t\t}\n\n\t\tif (!eventProps.end) {\n\t\t\tif (t.opt('forceEventDuration')) {\n\t\t\t\teventProps.end = t.getDefaultEventEnd(eventProps.allDay, eventProps.start);\n\t\t\t}\n\t\t\telse {\n\t\t\t\teventProps.end = null;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Ensures the allDay property exists and the timeliness of the start/end dates are consistent\n\tfunction normalizeEventTimes(eventProps) {\n\t\tif (eventProps.allDay == null) {\n\t\t\teventProps.allDay = !(eventProps.start.hasTime() || (eventProps.end && eventProps.end.hasTime()));\n\t\t}\n\n\t\tif (eventProps.allDay) {\n\t\t\teventProps.start.stripTime();\n\t\t\tif (eventProps.end) {\n\t\t\t\t// TODO: consider nextDayThreshold here? If so, will require a lot of testing and adjustment\n\t\t\t\teventProps.end.stripTime();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!eventProps.start.hasTime()) {\n\t\t\t\teventProps.start = t.applyTimezone(eventProps.start.time(0)); // will assign a 00:00 time\n\t\t\t}\n\t\t\tif (eventProps.end && !eventProps.end.hasTime()) {\n\t\t\t\teventProps.end = t.applyTimezone(eventProps.end.time(0)); // will assign a 00:00 time\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// If the given event is a recurring event, break it down into an array of individual instances.\n\t// If not a recurring event, return an array with the single original event.\n\t// If given a falsy input (probably because of a failed buildEventFromInput call), returns an empty array.\n\t// HACK: can override the recurring window by providing custom rangeStart/rangeEnd (for businessHours).\n\tfunction expandEvent(abstractEvent, _rangeStart, _rangeEnd) {\n\t\tvar events = [];\n\t\tvar dowHash;\n\t\tvar dow;\n\t\tvar i;\n\t\tvar date;\n\t\tvar startTime, endTime;\n\t\tvar start, end;\n\t\tvar event;\n\n\t\t_rangeStart = _rangeStart || rangeStart;\n\t\t_rangeEnd = _rangeEnd || rangeEnd;\n\n\t\tif (abstractEvent) {\n\t\t\tif (abstractEvent._recurring) {\n\n\t\t\t\t// make a boolean hash as to whether the event occurs on each day-of-week\n\t\t\t\tif ((dow = abstractEvent.dow)) {\n\t\t\t\t\tdowHash = {};\n\t\t\t\t\tfor (i = 0; i < dow.length; i++) {\n\t\t\t\t\t\tdowHash[dow[i]] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// iterate through every day in the current range\n\t\t\t\tdate = _rangeStart.clone().stripTime(); // holds the date of the current day\n\t\t\t\twhile (date.isBefore(_rangeEnd)) {\n\n\t\t\t\t\tif (!dowHash || dowHash[date.day()]) { // if everyday, or this particular day-of-week\n\n\t\t\t\t\t\tstartTime = abstractEvent.start; // the stored start and end properties are times (Durations)\n\t\t\t\t\t\tendTime = abstractEvent.end; // \""\n\t\t\t\t\t\tstart = date.clone();\n\t\t\t\t\t\tend = null;\n\n\t\t\t\t\t\tif (startTime) {\n\t\t\t\t\t\t\tstart = start.time(startTime);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (endTime) {\n\t\t\t\t\t\t\tend = date.clone().time(endTime);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tevent = $.extend({}, abstractEvent); // make a copy of the original\n\t\t\t\t\t\tassignDatesToEvent(\n\t\t\t\t\t\t\tstart, end,\n\t\t\t\t\t\t\t!startTime && !endTime, // allDay?\n\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t);\n\t\t\t\t\t\tevents.push(event);\n\t\t\t\t\t}\n\n\t\t\t\t\tdate.add(1, 'days');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tevents.push(abstractEvent); // return the original event. will be a one-item array\n\t\t\t}\n\t\t}\n\n\t\treturn events;\n\t}\n\tt.expandEvent = expandEvent;\n\n\n\n\t/* Event Modification Math\n\t-----------------------------------------------------------------------------------------*/\n\n\n\t// Modifies an event and all related events by applying the given properties.\n\t// Special date-diffing logic is used for manipulation of dates.\n\t// If `props` does not contain start/end dates, the updated values are assumed to be the event's current start/end.\n\t// All date comparisons are done against the event's pristine _start and _end dates.\n\t// Returns an object with delta information and a function to undo all operations.\n\t// For making computations in a granularity greater than day/time, specify largeUnit.\n\t// NOTE: The given `newProps` might be mutated for normalization purposes.\n\tfunction mutateEvent(event, newProps, largeUnit) {\n\t\tvar miscProps = {};\n\t\tvar oldProps;\n\t\tvar clearEnd;\n\t\tvar startDelta;\n\t\tvar endDelta;\n\t\tvar durationDelta;\n\t\tvar undoFunc;\n\n\t\t// diffs the dates in the appropriate way, returning a duration\n\t\tfunction diffDates(date1, date0) { // date1 - date0\n\t\t\tif (largeUnit) {\n\t\t\t\treturn diffByUnit(date1, date0, largeUnit);\n\t\t\t}\n\t\t\telse if (newProps.allDay) {\n\t\t\t\treturn diffDay(date1, date0);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn diffDayTime(date1, date0);\n\t\t\t}\n\t\t}\n\n\t\tnewProps = newProps || {};\n\n\t\t// normalize new date-related properties\n\t\tif (!newProps.start) {\n\t\t\tnewProps.start = event.start.clone();\n\t\t}\n\t\tif (newProps.end === undefined) {\n\t\t\tnewProps.end = event.end ? event.end.clone() : null;\n\t\t}\n\t\tif (newProps.allDay == null) { // is null or undefined?\n\t\t\tnewProps.allDay = event.allDay;\n\t\t}\n\t\tnormalizeEventDates(newProps);\n\n\t\t// create normalized versions of the original props to compare against\n\t\t// need a real end value, for diffing\n\t\toldProps = {\n\t\t\tstart: event._start.clone(),\n\t\t\tend: event._end ? event._end.clone() : t.getDefaultEventEnd(event._allDay, event._start),\n\t\t\tallDay: newProps.allDay // normalize the dates in the same regard as the new properties\n\t\t};\n\t\tnormalizeEventDates(oldProps);\n\n\t\t// need to clear the end date if explicitly changed to null\n\t\tclearEnd = event._end !== null && newProps.end === null;\n\n\t\t// compute the delta for moving the start date\n\t\tstartDelta = diffDates(newProps.start, oldProps.start);\n\n\t\t// compute the delta for moving the end date\n\t\tif (newProps.end) {\n\t\t\tendDelta = diffDates(newProps.end, oldProps.end);\n\t\t\tdurationDelta = endDelta.subtract(startDelta);\n\t\t}\n\t\telse {\n\t\t\tdurationDelta = null;\n\t\t}\n\n\t\t// gather all non-date-related properties\n\t\t$.each(newProps, function(name, val) {\n\t\t\tif (isMiscEventPropName(name)) {\n\t\t\t\tif (val !== undefined) {\n\t\t\t\t\tmiscProps[name] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// apply the operations to the event and all related events\n\t\tundoFunc = mutateEvents(\n\t\t\tclientEvents(event._id), // get events with this ID\n\t\t\tclearEnd,\n\t\t\tnewProps.allDay,\n\t\t\tstartDelta,\n\t\t\tdurationDelta,\n\t\t\tmiscProps\n\t\t);\n\n\t\treturn {\n\t\t\tdateDelta: startDelta,\n\t\t\tdurationDelta: durationDelta,\n\t\t\tundo: undoFunc\n\t\t};\n\t}\n\n\n\t// Modifies an array of events in the following ways (operations are in order):\n\t// - clear the event's `end`\n\t// - convert the event to allDay\n\t// - add `dateDelta` to the start and end\n\t// - add `durationDelta` to the event's duration\n\t// - assign `miscProps` to the event\n\t//\n\t// Returns a function that can be called to undo all the operations.\n\t//\n\t// TODO: don't use so many closures. possible memory issues when lots of events with same ID.\n\t//\n\tfunction mutateEvents(events, clearEnd, allDay, dateDelta, durationDelta, miscProps) {\n\t\tvar isAmbigTimezone = t.getIsAmbigTimezone();\n\t\tvar undoFunctions = [];\n\n\t\t// normalize zero-length deltas to be null\n\t\tif (dateDelta && !dateDelta.valueOf()) { dateDelta = null; }\n\t\tif (durationDelta && !durationDelta.valueOf()) { durationDelta = null; }\n\n\t\t$.each(events, function(i, event) {\n\t\t\tvar oldProps;\n\t\t\tvar newProps;\n\n\t\t\t// build an object holding all the old values, both date-related and misc.\n\t\t\t// for the undo function.\n\t\t\toldProps = {\n\t\t\t\tstart: event.start.clone(),\n\t\t\t\tend: event.end ? event.end.clone() : null,\n\t\t\t\tallDay: event.allDay\n\t\t\t};\n\t\t\t$.each(miscProps, function(name) {\n\t\t\t\toldProps[name] = event[name];\n\t\t\t});\n\n\t\t\t// new date-related properties. work off the original date snapshot.\n\t\t\t// ok to use references because they will be thrown away when backupEventDates is called.\n\t\t\tnewProps = {\n\t\t\t\tstart: event._start,\n\t\t\t\tend: event._end,\n\t\t\t\tallDay: allDay // normalize the dates in the same regard as the new properties\n\t\t\t};\n\t\t\tnormalizeEventDates(newProps); // massages start/end/allDay\n\n\t\t\t// strip or ensure the end date\n\t\t\tif (clearEnd) {\n\t\t\t\tnewProps.end = null;\n\t\t\t}\n\t\t\telse if (durationDelta && !newProps.end) { // the duration translation requires an end date\n\t\t\t\tnewProps.end = t.getDefaultEventEnd(newProps.allDay, newProps.start);\n\t\t\t}\n\n\t\t\tif (dateDelta) {\n\t\t\t\tnewProps.start.add(dateDelta);\n\t\t\t\tif (newProps.end) {\n\t\t\t\t\tnewProps.end.add(dateDelta);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (durationDelta) {\n\t\t\t\tnewProps.end.add(durationDelta); // end already ensured above\n\t\t\t}\n\n\t\t\t// if the dates have changed, and we know it is impossible to recompute the\n\t\t\t// timezone offsets, strip the zone.\n\t\t\tif (\n\t\t\t\tisAmbigTimezone &&\n\t\t\t\t!newProps.allDay &&\n\t\t\t\t(dateDelta || durationDelta)\n\t\t\t) {\n\t\t\t\tnewProps.start.stripZone();\n\t\t\t\tif (newProps.end) {\n\t\t\t\t\tnewProps.end.stripZone();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$.extend(event, miscProps, newProps); // copy over misc props, then date-related props\n\t\t\tbackupEventDates(event); // regenerate internal _start/_end/_allDay\n\n\t\t\tundoFunctions.push(function() {\n\t\t\t\t$.extend(event, oldProps);\n\t\t\t\tbackupEventDates(event); // regenerate internal _start/_end/_allDay\n\t\t\t});\n\t\t});\n\n\t\treturn function() {\n\t\t\tfor (var i = 0; i < undoFunctions.length; i++) {\n\t\t\t\tundoFunctions[i]();\n\t\t\t}\n\t\t};\n\t}\n\n}\n\n\n// returns an undo function\nCalendar.prototype.mutateSeg = function(seg, newProps) {\n\treturn this.mutateEvent(seg.event, newProps);\n};\n\n\n// hook for external libs to manipulate event properties upon creation.\n// should manipulate the event in-place.\nCalendar.prototype.normalizeEvent = function(event) {\n};\n\n\n// Does the given span (start, end, and other location information)\n// fully contain the other?\nCalendar.prototype.spanContainsSpan = function(outerSpan, innerSpan) {\n\tvar eventStart = outerSpan.start.clone().stripZone();\n\tvar eventEnd = this.getEventEnd(outerSpan).stripZone();\n\n\treturn innerSpan.start >= eventStart && innerSpan.end <= eventEnd;\n};\n\n\n// Returns a list of events that the given event should be compared against when being considered for a move to\n// the specified span. Attached to the Calendar's prototype because EventManager is a mixin for a Calendar.\nCalendar.prototype.getPeerEvents = function(span, event) {\n\tvar cache = this.getEventCache();\n\tvar peerEvents = [];\n\tvar i, otherEvent;\n\n\tfor (i = 0; i < cache.length; i++) {\n\t\totherEvent = cache[i];\n\t\tif (\n\t\t\t!event ||\n\t\t\tevent._id !== otherEvent._id // don't compare the event to itself or other related [repeating] events\n\t\t) {\n\t\t\tpeerEvents.push(otherEvent);\n\t\t}\n\t}\n\n\treturn peerEvents;\n};\n\n\n// updates the \""backup\"" properties, which are preserved in order to compute diffs later on.\nfunction backupEventDates(event) {\n\tevent._allDay = event.allDay;\n\tevent._start = event.start.clone();\n\tevent._end = event.end ? event.end.clone() : null;\n}\n\n\n/* Overlapping / Constraining\n-----------------------------------------------------------------------------------------*/\n\n\n// Determines if the given event can be relocated to the given span (unzoned start/end with other misc data)\nCalendar.prototype.isEventSpanAllowed = function(span, event) {\n\tvar source = event.source || {};\n\tvar eventAllowFunc = this.opt('eventAllow');\n\n\tvar constraint = firstDefined(\n\t\tevent.constraint,\n\t\tsource.constraint,\n\t\tthis.opt('eventConstraint')\n\t);\n\n\tvar overlap = firstDefined(\n\t\tevent.overlap,\n\t\tsource.overlap,\n\t\tthis.opt('eventOverlap')\n\t);\n\n\treturn this.isSpanAllowed(span, constraint, overlap, event) &&\n\t\t(!eventAllowFunc || eventAllowFunc(span, event) !== false);\n};\n\n\n// Determines if an external event can be relocated to the given span (unzoned start/end with other misc data)\nCalendar.prototype.isExternalSpanAllowed = function(eventSpan, eventLocation, eventProps) {\n\tvar eventInput;\n\tvar event;\n\n\t// note: very similar logic is in View's reportExternalDrop\n\tif (eventProps) {\n\t\teventInput = $.extend({}, eventProps, eventLocation);\n\t\tevent = this.expandEvent(\n\t\t\tthis.buildEventFromInput(eventInput)\n\t\t)[0];\n\t}\n\n\tif (event) {\n\t\treturn this.isEventSpanAllowed(eventSpan, event);\n\t}\n\telse { // treat it as a selection\n\n\t\treturn this.isSelectionSpanAllowed(eventSpan);\n\t}\n};\n\n\n// Determines the given span (unzoned start/end with other misc data) can be selected.\nCalendar.prototype.isSelectionSpanAllowed = function(span) {\n\tvar selectAllowFunc = this.opt('selectAllow');\n\n\treturn this.isSpanAllowed(span, this.opt('selectConstraint'), this.opt('selectOverlap')) &&\n\t\t(!selectAllowFunc || selectAllowFunc(span) !== false);\n};\n\n\n// Returns true if the given span (caused by an event drop/resize or a selection) is allowed to exist\n// according to the constraint/overlap settings.\n// `event` is not required if checking a selection.\nCalendar.prototype.isSpanAllowed = function(span, constraint, overlap, event) {\n\tvar constraintEvents;\n\tvar anyContainment;\n\tvar peerEvents;\n\tvar i, peerEvent;\n\tvar peerOverlap;\n\n\t// the range must be fully contained by at least one of produced constraint events\n\tif (constraint != null) {\n\n\t\t// not treated as an event! intermediate data structure\n\t\t// TODO: use ranges in the future\n\t\tconstraintEvents = this.constraintToEvents(constraint);\n\t\tif (constraintEvents) { // not invalid\n\n\t\t\tanyContainment = false;\n\t\t\tfor (i = 0; i < constraintEvents.length; i++) {\n\t\t\t\tif (this.spanContainsSpan(constraintEvents[i], span)) {\n\t\t\t\t\tanyContainment = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!anyContainment) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tpeerEvents = this.getPeerEvents(span, event);\n\n\tfor (i = 0; i < peerEvents.length; i++)  {\n\t\tpeerEvent = peerEvents[i];\n\n\t\t// there needs to be an actual intersection before disallowing anything\n\t\tif (this.eventIntersectsRange(peerEvent, span)) {\n\n\t\t\t// evaluate overlap for the given range and short-circuit if necessary\n\t\t\tif (overlap === false) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// if the event's overlap is a test function, pass the peer event in question as the first param\n\t\t\telse if (typeof overlap === 'function' && !overlap(peerEvent, event)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// if we are computing if the given range is allowable for an event, consider the other event's\n\t\t\t// EventObject-specific or Source-specific `overlap` property\n\t\t\tif (event) {\n\t\t\t\tpeerOverlap = firstDefined(\n\t\t\t\t\tpeerEvent.overlap,\n\t\t\t\t\t(peerEvent.source || {}).overlap\n\t\t\t\t\t// we already considered the global `eventOverlap`\n\t\t\t\t);\n\t\t\t\tif (peerOverlap === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// if the peer event's overlap is a test function, pass the subject event as the first param\n\t\t\t\tif (typeof peerOverlap === 'function' && !peerOverlap(event, peerEvent)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n};\n\n\n// Given an event input from the API, produces an array of event objects. Possible event inputs:\n// 'businessHours'\n// An event ID (number or string)\n// An object with specific start/end dates or a recurring event (like what businessHours accepts)\nCalendar.prototype.constraintToEvents = function(constraintInput) {\n\n\tif (constraintInput === 'businessHours') {\n\t\treturn this.getCurrentBusinessHourEvents();\n\t}\n\n\tif (typeof constraintInput === 'object') {\n\t\tif (constraintInput.start != null) { // needs to be event-like input\n\t\t\treturn this.expandEvent(this.buildEventFromInput(constraintInput));\n\t\t}\n\t\telse {\n\t\t\treturn null; // invalid\n\t\t}\n\t}\n\n\treturn this.clientEvents(constraintInput); // probably an ID\n};\n\n\n// Does the event's date range intersect with the given range?\n// start/end already assumed to have stripped zones :(\nCalendar.prototype.eventIntersectsRange = function(event, range) {\n\tvar eventStart = event.start.clone().stripZone();\n\tvar eventEnd = this.getEventEnd(event).stripZone();\n\n\treturn range.start < eventEnd && range.end > eventStart;\n};\n\n\n/* Business Hours\n-----------------------------------------------------------------------------------------*/\n\nvar BUSINESS_HOUR_EVENT_DEFAULTS = {\n\tid: '_fcBusinessHours', // will relate events from different calls to expandEvent\n\tstart: '09:00',\n\tend: '17:00',\n\tdow: [ 1, 2, 3, 4, 5 ], // monday - friday\n\trendering: 'inverse-background'\n\t// classNames are defined in businessHoursSegClasses\n};\n\n// Return events objects for business hours within the current view.\n// Abuse of our event system :(\nCalendar.prototype.getCurrentBusinessHourEvents = function(wholeDay) {\n\treturn this.computeBusinessHourEvents(wholeDay, this.opt('businessHours'));\n};\n\n// Given a raw input value from options, return events objects for business hours within the current view.\nCalendar.prototype.computeBusinessHourEvents = function(wholeDay, input) {\n\tif (input === true) {\n\t\treturn this.expandBusinessHourEvents(wholeDay, [ {} ]);\n\t}\n\telse if ($.isPlainObject(input)) {\n\t\treturn this.expandBusinessHourEvents(wholeDay, [ input ]);\n\t}\n\telse if ($.isArray(input)) {\n\t\treturn this.expandBusinessHourEvents(wholeDay, input, true);\n\t}\n\telse {\n\t\treturn [];\n\t}\n};\n\n// inputs expected to be an array of objects.\n// if ignoreNoDow is true, will ignore entries that don't specify a day-of-week (dow) key.\nCalendar.prototype.expandBusinessHourEvents = function(wholeDay, inputs, ignoreNoDow) {\n\tvar view = this.getView();\n\tvar events = [];\n\tvar i, input;\n\n\tfor (i = 0; i < inputs.length; i++) {\n\t\tinput = inputs[i];\n\n\t\tif (ignoreNoDow && !input.dow) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// give defaults. will make a copy\n\t\tinput = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, input);\n\n\t\t// if a whole-day series is requested, clear the start/end times\n\t\tif (wholeDay) {\n\t\t\tinput.start = null;\n\t\t\tinput.end = null;\n\t\t}\n\n\t\tevents.push.apply(events, // append\n\t\t\tthis.expandEvent(\n\t\t\t\tthis.buildEventFromInput(input),\n\t\t\t\tview.activeRange.start,\n\t\t\t\tview.activeRange.end\n\t\t\t)\n\t\t);\n\t}\n\n\treturn events;\n};\n\n;;\n\n/* An abstract class for the \""basic\"" views, as well as month view. Renders one or more rows of day cells.\n----------------------------------------------------------------------------------------------------------------------*/\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\n// It is responsible for managing width/height.\n\nvar BasicView = FC.BasicView = View.extend({\n\n\tscroller: null,\n\n\tdayGridClass: DayGrid, // class the dayGrid will be instantiated from (overridable by subclasses)\n\tdayGrid: null, // the main subcomponent that does most of the heavy lifting\n\n\tdayNumbersVisible: false, // display day numbers on each day cell?\n\tcolWeekNumbersVisible: false, // display week numbers along the side?\n\tcellWeekNumbersVisible: false, // display week numbers in day cell?\n\n\tweekNumberWidth: null, // width of all the week-number cells running down the side\n\n\theadContainerEl: null, // div that hold's the dayGrid's rendered date header\n\theadRowEl: null, // the fake row element of the day-of-week header\n\n\n\tinitialize: function() {\n\t\tthis.dayGrid = this.instantiateDayGrid();\n\n\t\tthis.scroller = new Scroller({\n\t\t\toverflowX: 'hidden',\n\t\t\toverflowY: 'auto'\n\t\t});\n\t},\n\n\n\t// Generates the DayGrid object this view needs. Draws from this.dayGridClass\n\tinstantiateDayGrid: function() {\n\t\t// generate a subclass on the fly with BasicView-specific behavior\n\t\t// TODO: cache this subclass\n\t\tvar subclass = this.dayGridClass.extend(basicDayGridMethods);\n\n\t\treturn new subclass(this);\n\t},\n\n\n\t// Computes the date range that will be rendered.\n\tbuildRenderRange: function(currentRange, currentRangeUnit) {\n\t\tvar renderRange = View.prototype.buildRenderRange.apply(this, arguments);\n\n\t\t// year and month views should be aligned with weeks. this is already done for week\n\t\tif (/^(year|month)$/.test(currentRangeUnit)) {\n\t\t\trenderRange.start.startOf('week');\n\n\t\t\t// make end-of-week if not already\n\t\t\tif (renderRange.end.weekday()) {\n\t\t\t\trenderRange.end.add(1, 'week').startOf('week'); // exclusively move backwards\n\t\t\t}\n\t\t}\n\n\t\treturn this.trimHiddenDays(renderRange);\n\t},\n\n\n\t// Renders the view into `this.el`, which should already be assigned\n\trenderDates: function() {\n\n\t\tthis.dayGrid.breakOnWeeks = /year|month|week/.test(this.currentRangeUnit); // do before Grid::setRange\n\t\tthis.dayGrid.setRange(this.renderRange);\n\n\t\tthis.dayNumbersVisible = this.dayGrid.rowCnt > 1; // TODO: make grid responsible\n\t\tif (this.opt('weekNumbers')) {\n\t\t\tif (this.opt('weekNumbersWithinDays')) {\n\t\t\t\tthis.cellWeekNumbersVisible = true;\n\t\t\t\tthis.colWeekNumbersVisible = false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.cellWeekNumbersVisible = false;\n\t\t\t\tthis.colWeekNumbersVisible = true;\n\t\t\t};\n\t\t}\n\t\tthis.dayGrid.numbersVisible = this.dayNumbersVisible ||\n\t\t\tthis.cellWeekNumbersVisible || this.colWeekNumbersVisible;\n\n\t\tthis.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\n\t\tthis.renderHead();\n\n\t\tthis.scroller.render();\n\t\tvar dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\n\t\tvar dayGridEl = $('<div class=\""fc-day-grid\"" />').appendTo(dayGridContainerEl);\n\t\tthis.el.find('.fc-body > tr > td').append(dayGridContainerEl);\n\n\t\tthis.dayGrid.setElement(dayGridEl);\n\t\tthis.dayGrid.renderDates(this.hasRigidRows());\n\t},\n\n\n\t// render the day-of-week headers\n\trenderHead: function() {\n\t\tthis.headContainerEl =\n\t\t\tthis.el.find('.fc-head-container')\n\t\t\t\t.html(this.dayGrid.renderHeadHtml());\n\t\tthis.headRowEl = this.headContainerEl.find('.fc-row');\n\t},\n\n\n\t// Unrenders the content of the view. Since we haven't separated skeleton rendering from date rendering,\n\t// always completely kill the dayGrid's rendering.\n\tunrenderDates: function() {\n\t\tthis.dayGrid.unrenderDates();\n\t\tthis.dayGrid.removeElement();\n\t\tthis.scroller.destroy();\n\t},\n\n\n\trenderBusinessHours: function() {\n\t\tthis.dayGrid.renderBusinessHours();\n\t},\n\n\n\tunrenderBusinessHours: function() {\n\t\tthis.dayGrid.unrenderBusinessHours();\n\t},\n\n\n\t// Builds the HTML skeleton for the view.\n\t// The day-grid component will render inside of a container defined by this HTML.\n\trenderSkeletonHtml: function() {\n\t\treturn '' +\n\t\t\t'<table>' +\n\t\t\t\t'<thead class=\""fc-head\"">' +\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td class=\""fc-head-container ' + this.widgetHeaderClass + '\""></td>' +\n\t\t\t\t\t'</tr>' +\n\t\t\t\t'</thead>' +\n\t\t\t\t'<tbody class=\""fc-body\"">' +\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td class=\""' + this.widgetContentClass + '\""></td>' +\n\t\t\t\t\t'</tr>' +\n\t\t\t\t'</tbody>' +\n\t\t\t'</table>';\n\t},\n\n\n\t// Generates an HTML attribute string for setting the width of the week number column, if it is known\n\tweekNumberStyleAttr: function() {\n\t\tif (this.weekNumberWidth !== null) {\n\t\t\treturn 'style=\""width:' + this.weekNumberWidth + 'px\""';\n\t\t}\n\t\treturn '';\n\t},\n\n\n\t// Determines whether each row should have a constant height\n\thasRigidRows: function() {\n\t\tvar eventLimit = this.opt('eventLimit');\n\t\treturn eventLimit && typeof eventLimit !== 'number';\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Refreshes the horizontal dimensions of the view\n\tupdateWidth: function() {\n\t\tif (this.colWeekNumbersVisible) {\n\t\t\t// Make sure all week number cells running down the side have the same width.\n\t\t\t// Record the width for cells created later.\n\t\t\tthis.weekNumberWidth = matchCellWidths(\n\t\t\t\tthis.el.find('.fc-week-number')\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Adjusts the vertical dimensions of the view to the specified values\n\tsetHeight: function(totalHeight, isAuto) {\n\t\tvar eventLimit = this.opt('eventLimit');\n\t\tvar scrollerHeight;\n\t\tvar scrollbarWidths;\n\n\t\t// reset all heights to be natural\n\t\tthis.scroller.clear();\n\t\tuncompensateScroll(this.headRowEl);\n\n\t\tthis.dayGrid.removeSegPopover(); // kill the \""more\"" popover if displayed\n\n\t\t// is the event limit a constant level number?\n\t\tif (eventLimit && typeof eventLimit === 'number') {\n\t\t\tthis.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\n\t\t}\n\n\t\t// distribute the height to the rows\n\t\t// (totalHeight is a \""recommended\"" value if isAuto)\n\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\tthis.setGridHeight(scrollerHeight, isAuto);\n\n\t\t// is the event limit dynamically calculated?\n\t\tif (eventLimit && typeof eventLimit !== 'number') {\n\t\t\tthis.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\n\t\t}\n\n\t\tif (!isAuto) { // should we force dimensions of the scroll container?\n\n\t\t\tthis.scroller.setHeight(scrollerHeight);\n\t\t\tscrollbarWidths = this.scroller.getScrollbarWidths();\n\n\t\t\tif (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\n\n\t\t\t\tcompensateScroll(this.headRowEl, scrollbarWidths);\n\n\t\t\t\t// doing the scrollbar compensation might have created text overflow which created more height. redo\n\t\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\t\tthis.scroller.setHeight(scrollerHeight);\n\t\t\t}\n\n\t\t\t// guarantees the same scrollbar widths\n\t\t\tthis.scroller.lockOverflow(scrollbarWidths);\n\t\t}\n\t},\n\n\n\t// given a desired total height of the view, returns what the height of the scroller should be\n\tcomputeScrollerHeight: function(totalHeight) {\n\t\treturn totalHeight -\n\t\t\tsubtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n\t},\n\n\n\t// Sets the height of just the DayGrid component in this view\n\tsetGridHeight: function(height, isAuto) {\n\t\tif (isAuto) {\n\t\t\tundistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\n\t\t}\n\t\telse {\n\t\t\tdistributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\n\t\t}\n\t},\n\n\n\t/* Scroll\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tcomputeInitialDateScroll: function() {\n\t\treturn { top: 0 };\n\t},\n\n\n\tqueryDateScroll: function() {\n\t\treturn { top: this.scroller.getScrollTop() };\n\t},\n\n\n\tapplyDateScroll: function(scroll) {\n\t\tif (scroll.top !== undefined) {\n\t\t\tthis.scroller.setScrollTop(scroll.top);\n\t\t}\n\t},\n\n\n\t/* Hit Areas\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// forward all hit-related method calls to dayGrid\n\n\n\thitsNeeded: function() {\n\t\tthis.dayGrid.hitsNeeded();\n\t},\n\n\n\thitsNotNeeded: function() {\n\t\tthis.dayGrid.hitsNotNeeded();\n\t},\n\n\n\tprepareHits: function() {\n\t\tthis.dayGrid.prepareHits();\n\t},\n\n\n\treleaseHits: function() {\n\t\tthis.dayGrid.releaseHits();\n\t},\n\n\n\tqueryHit: function(left, top) {\n\t\treturn this.dayGrid.queryHit(left, top);\n\t},\n\n\n\tgetHitSpan: function(hit) {\n\t\treturn this.dayGrid.getHitSpan(hit);\n\t},\n\n\n\tgetHitEl: function(hit) {\n\t\treturn this.dayGrid.getHitEl(hit);\n\t},\n\n\n\t/* Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders the given events onto the view and populates the segments array\n\trenderEvents: function(events) {\n\t\tthis.dayGrid.renderEvents(events);\n\n\t\tthis.updateHeight(); // must compensate for events that overflow the row\n\t},\n\n\n\t// Retrieves all segment objects that are rendered in the view\n\tgetEventSegs: function() {\n\t\treturn this.dayGrid.getEventSegs();\n\t},\n\n\n\t// Unrenders all event elements and clears internal segment data\n\tunrenderEvents: function() {\n\t\tthis.dayGrid.unrenderEvents();\n\n\t\t// we DON'T need to call updateHeight() because\n\t\t// a renderEvents() call always happens after this, which will eventually call updateHeight()\n\t},\n\n\n\t/* Dragging (for both events and external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// A returned value of `true` signals that a mock \""helper\"" event has been rendered.\n\trenderDrag: function(dropLocation, seg) {\n\t\treturn this.dayGrid.renderDrag(dropLocation, seg);\n\t},\n\n\n\tunrenderDrag: function() {\n\t\tthis.dayGrid.unrenderDrag();\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection\n\trenderSelection: function(span) {\n\t\tthis.dayGrid.renderSelection(span);\n\t},\n\n\n\t// Unrenders a visual indications of a selection\n\tunrenderSelection: function() {\n\t\tthis.dayGrid.unrenderSelection();\n\t}\n\n});\n\n\n// Methods that will customize the rendering behavior of the BasicView's dayGrid\nvar basicDayGridMethods = {\n\n\n\t// Generates the HTML that will go before the day-of week header cells\n\trenderHeadIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\tif (view.colWeekNumbersVisible) {\n\t\t\treturn '' +\n\t\t\t\t'<th class=\""fc-week-number ' + view.widgetHeaderClass + '\"" ' + view.weekNumberStyleAttr() + '>' +\n\t\t\t\t\t'<span>' + // needed for matchCellWidths\n\t\t\t\t\t\thtmlEscape(view.opt('weekNumberTitle')) +\n\t\t\t\t\t'</span>' +\n\t\t\t\t'</th>';\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generates the HTML that will go before content-skeleton cells that display the day/week numbers\n\trenderNumberIntroHtml: function(row) {\n\t\tvar view = this.view;\n\t\tvar weekStart = this.getCellDate(row, 0);\n\n\t\tif (view.colWeekNumbersVisible) {\n\t\t\treturn '' +\n\t\t\t\t'<td class=\""fc-week-number\"" ' + view.weekNumberStyleAttr() + '>' +\n\t\t\t\t\tview.buildGotoAnchorHtml( // aside from link, important for matchCellWidths\n\t\t\t\t\t\t{ date: weekStart, type: 'week', forceOff: this.colCnt === 1 },\n\t\t\t\t\t\tweekStart.format('w') // inner HTML\n\t\t\t\t\t) +\n\t\t\t\t'</td>';\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generates the HTML that goes before the day bg cells for each day-row\n\trenderBgIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\tif (view.colWeekNumbersVisible) {\n\t\t\treturn '<td class=\""fc-week-number ' + view.widgetContentClass + '\"" ' +\n\t\t\t\tview.weekNumberStyleAttr() + '></td>';\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generates the HTML that goes before every other type of row generated by DayGrid.\n\t// Affects helper-skeleton and highlight-skeleton rows.\n\trenderIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\tif (view.colWeekNumbersVisible) {\n\t\t\treturn '<td class=\""fc-week-number\"" ' + view.weekNumberStyleAttr() + '></td>';\n\t\t}\n\n\t\treturn '';\n\t}\n\n};\n\n;;\n\n/* A month view with day cells running in rows (one-per-week) and columns\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar MonthView = FC.MonthView = BasicView.extend({\n\n\n\t// Computes the date range that will be rendered.\n\tbuildRenderRange: function() {\n\t\tvar renderRange = BasicView.prototype.buildRenderRange.apply(this, arguments);\n\t\tvar rowCnt;\n\n\t\t// ensure 6 weeks\n\t\tif (this.isFixedWeeks()) {\n\t\t\trowCnt = Math.ceil( // could be partial weeks due to hiddenDays\n\t\t\t\trenderRange.end.diff(renderRange.start, 'weeks', true) // dontRound=true\n\t\t\t);\n\t\t\trenderRange.end.add(6 - rowCnt, 'weeks');\n\t\t}\n\n\t\treturn renderRange;\n\t},\n\n\n\t// Overrides the default BasicView behavior to have special multi-week auto-height logic\n\tsetGridHeight: function(height, isAuto) {\n\n\t\t// if auto, make the height of each row the height that it would be if there were 6 weeks\n\t\tif (isAuto) {\n\t\t\theight *= this.rowCnt / 6;\n\t\t}\n\n\t\tdistributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\n\t},\n\n\n\tisFixedWeeks: function() {\n\t\treturn this.opt('fixedWeekCount');\n\t}\n\n});\n\n;;\n\nfcViews.basic = {\n\t'class': BasicView\n};\n\nfcViews.basicDay = {\n\ttype: 'basic',\n\tduration: { days: 1 }\n};\n\nfcViews.basicWeek = {\n\ttype: 'basic',\n\tduration: { weeks: 1 }\n};\n\nfcViews.month = {\n\t'class': MonthView,\n\tduration: { months: 1 }, // important for prev/next\n\tdefaults: {\n\t\tfixedWeekCount: true\n\t}\n};\n;;\n\n/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\n----------------------------------------------------------------------------------------------------------------------*/\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\n// Responsible for managing width/height.\n\nvar AgendaView = FC.AgendaView = View.extend({\n\n\tscroller: null,\n\n\ttimeGridClass: TimeGrid, // class used to instantiate the timeGrid. subclasses can override\n\ttimeGrid: null, // the main time-grid subcomponent of this view\n\n\tdayGridClass: DayGrid, // class used to instantiate the dayGrid. subclasses can override\n\tdayGrid: null, // the \""all-day\"" subcomponent. if all-day is turned off, this will be null\n\n\taxisWidth: null, // the width of the time axis running down the side\n\n\theadContainerEl: null, // div that hold's the timeGrid's rendered date header\n\tnoScrollRowEls: null, // set of fake row elements that must compensate when scroller has scrollbars\n\n\t// when the time-grid isn't tall enough to occupy the given height, we render an <hr> underneath\n\tbottomRuleEl: null,\n\n\t// indicates that minTime/maxTime affects rendering\n\tusesMinMaxTime: true,\n\n\n\tinitialize: function() {\n\t\tthis.timeGrid = this.instantiateTimeGrid();\n\n\t\tif (this.opt('allDaySlot')) { // should we display the \""all-day\"" area?\n\t\t\tthis.dayGrid = this.instantiateDayGrid(); // the all-day subcomponent of this view\n\t\t}\n\n\t\tthis.scroller = new Scroller({\n\t\t\toverflowX: 'hidden',\n\t\t\toverflowY: 'auto'\n\t\t});\n\t},\n\n\n\t// Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\n\tinstantiateTimeGrid: function() {\n\t\tvar subclass = this.timeGridClass.extend(agendaTimeGridMethods);\n\n\t\treturn new subclass(this);\n\t},\n\n\n\t// Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\n\tinstantiateDayGrid: function() {\n\t\tvar subclass = this.dayGridClass.extend(agendaDayGridMethods);\n\n\t\treturn new subclass(this);\n\t},\n\n\n\t/* Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders the view into `this.el`, which has already been assigned\n\trenderDates: function() {\n\n\t\tthis.timeGrid.setRange(this.renderRange);\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.setRange(this.renderRange);\n\t\t}\n\n\t\tthis.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\n\t\tthis.renderHead();\n\n\t\tthis.scroller.render();\n\t\tvar timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\n\t\tvar timeGridEl = $('<div class=\""fc-time-grid\"" />').appendTo(timeGridWrapEl);\n\t\tthis.el.find('.fc-body > tr > td').append(timeGridWrapEl);\n\n\t\tthis.timeGrid.setElement(timeGridEl);\n\t\tthis.timeGrid.renderDates();\n\n\t\t// the <hr> that sometimes displays under the time-grid\n\t\tthis.bottomRuleEl = $('<hr class=\""fc-divider ' + this.widgetHeaderClass + '\""/>')\n\t\t\t.appendTo(this.timeGrid.el); // inject it into the time-grid\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.setElement(this.el.find('.fc-day-grid'));\n\t\t\tthis.dayGrid.renderDates();\n\n\t\t\t// have the day-grid extend it's coordinate area over the <hr> dividing the two grids\n\t\t\tthis.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\n\t\t}\n\n\t\tthis.noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)'); // fake rows not within the scroller\n\t},\n\n\n\t// render the day-of-week headers\n\trenderHead: function() {\n\t\tthis.headContainerEl =\n\t\t\tthis.el.find('.fc-head-container')\n\t\t\t\t.html(this.timeGrid.renderHeadHtml());\n\t},\n\n\n\t// Unrenders the content of the view. Since we haven't separated skeleton rendering from date rendering,\n\t// always completely kill each grid's rendering.\n\tunrenderDates: function() {\n\t\tthis.timeGrid.unrenderDates();\n\t\tthis.timeGrid.removeElement();\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.unrenderDates();\n\t\t\tthis.dayGrid.removeElement();\n\t\t}\n\n\t\tthis.scroller.destroy();\n\t},\n\n\n\t// Builds the HTML skeleton for the view.\n\t// The day-grid and time-grid components will render inside containers defined by this HTML.\n\trenderSkeletonHtml: function() {\n\t\treturn '' +\n\t\t\t'<table>' +\n\t\t\t\t'<thead class=\""fc-head\"">' +\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td class=\""fc-head-container ' + this.widgetHeaderClass + '\""></td>' +\n\t\t\t\t\t'</tr>' +\n\t\t\t\t'</thead>' +\n\t\t\t\t'<tbody class=\""fc-body\"">' +\n\t\t\t\t\t'<tr>' +\n\t\t\t\t\t\t'<td class=\""' + this.widgetContentClass + '\"">' +\n\t\t\t\t\t\t\t(this.dayGrid ?\n\t\t\t\t\t\t\t\t'<div class=\""fc-day-grid\""/>' +\n\t\t\t\t\t\t\t\t'<hr class=\""fc-divider ' + this.widgetHeaderClass + '\""/>' :\n\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t\t) +\n\t\t\t\t\t\t'</td>' +\n\t\t\t\t\t'</tr>' +\n\t\t\t\t'</tbody>' +\n\t\t\t'</table>';\n\t},\n\n\n\t// Generates an HTML attribute string for setting the width of the axis, if it is known\n\taxisStyleAttr: function() {\n\t\tif (this.axisWidth !== null) {\n\t\t\t return 'style=\""width:' + this.axisWidth + 'px\""';\n\t\t}\n\t\treturn '';\n\t},\n\n\n\t/* Business Hours\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBusinessHours: function() {\n\t\tthis.timeGrid.renderBusinessHours();\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.renderBusinessHours();\n\t\t}\n\t},\n\n\n\tunrenderBusinessHours: function() {\n\t\tthis.timeGrid.unrenderBusinessHours();\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.unrenderBusinessHours();\n\t\t}\n\t},\n\n\n\t/* Now Indicator\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tgetNowIndicatorUnit: function() {\n\t\treturn this.timeGrid.getNowIndicatorUnit();\n\t},\n\n\n\trenderNowIndicator: function(date) {\n\t\tthis.timeGrid.renderNowIndicator(date);\n\t},\n\n\n\tunrenderNowIndicator: function() {\n\t\tthis.timeGrid.unrenderNowIndicator();\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tupdateSize: function(isResize) {\n\t\tthis.timeGrid.updateSize(isResize);\n\n\t\tView.prototype.updateSize.call(this, isResize); // call the super-method\n\t},\n\n\n\t// Refreshes the horizontal dimensions of the view\n\tupdateWidth: function() {\n\t\t// make all axis cells line up, and record the width so newly created axis cells will have it\n\t\tthis.axisWidth = matchCellWidths(this.el.find('.fc-axis'));\n\t},\n\n\n\t// Adjusts the vertical dimensions of the view to the specified values\n\tsetHeight: function(totalHeight, isAuto) {\n\t\tvar eventLimit;\n\t\tvar scrollerHeight;\n\t\tvar scrollbarWidths;\n\n\t\t// reset all dimensions back to the original state\n\t\tthis.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary\n\t\tthis.scroller.clear(); // sets height to 'auto' and clears overflow\n\t\tuncompensateScroll(this.noScrollRowEls);\n\n\t\t// limit number of events in the all-day area\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.removeSegPopover(); // kill the \""more\"" popover if displayed\n\n\t\t\teventLimit = this.opt('eventLimit');\n\t\t\tif (eventLimit && typeof eventLimit !== 'number') {\n\t\t\t\teventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \""auto\"" goes to a real number\n\t\t\t}\n\t\t\tif (eventLimit) {\n\t\t\t\tthis.dayGrid.limitRows(eventLimit);\n\t\t\t}\n\t\t}\n\n\t\tif (!isAuto) { // should we force dimensions of the scroll container?\n\n\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\tthis.scroller.setHeight(scrollerHeight);\n\t\t\tscrollbarWidths = this.scroller.getScrollbarWidths();\n\n\t\t\tif (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\n\n\t\t\t\t// make the all-day and header rows lines up\n\t\t\t\tcompensateScroll(this.noScrollRowEls, scrollbarWidths);\n\n\t\t\t\t// the scrollbar compensation might have changed text flow, which might affect height, so recalculate\n\t\t\t\t// and reapply the desired height to the scroller.\n\t\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\t\tthis.scroller.setHeight(scrollerHeight);\n\t\t\t}\n\n\t\t\t// guarantees the same scrollbar widths\n\t\t\tthis.scroller.lockOverflow(scrollbarWidths);\n\n\t\t\t// if there's any space below the slats, show the horizontal rule.\n\t\t\t// this won't cause any new overflow, because lockOverflow already called.\n\t\t\tif (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\n\t\t\t\tthis.bottomRuleEl.show();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// given a desired total height of the view, returns what the height of the scroller should be\n\tcomputeScrollerHeight: function(totalHeight) {\n\t\treturn totalHeight -\n\t\t\tsubtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n\t},\n\n\n\t/* Scroll\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes the initial pre-configured scroll state prior to allowing the user to change it\n\tcomputeInitialDateScroll: function() {\n\t\tvar scrollTime = moment.duration(this.opt('scrollTime'));\n\t\tvar top = this.timeGrid.computeTimeTop(scrollTime);\n\n\t\t// zoom can give weird floating-point values. rather scroll a little bit further\n\t\ttop = Math.ceil(top);\n\n\t\tif (top) {\n\t\t\ttop++; // to overcome top border that slots beyond the first have. looks better\n\t\t}\n\n\t\treturn { top: top };\n\t},\n\n\n\tqueryDateScroll: function() {\n\t\treturn { top: this.scroller.getScrollTop() };\n\t},\n\n\n\tapplyDateScroll: function(scroll) {\n\t\tif (scroll.top !== undefined) {\n\t\t\tthis.scroller.setScrollTop(scroll.top);\n\t\t}\n\t},\n\n\n\t/* Hit Areas\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// forward all hit-related method calls to the grids (dayGrid might not be defined)\n\n\n\thitsNeeded: function() {\n\t\tthis.timeGrid.hitsNeeded();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.hitsNeeded();\n\t\t}\n\t},\n\n\n\thitsNotNeeded: function() {\n\t\tthis.timeGrid.hitsNotNeeded();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.hitsNotNeeded();\n\t\t}\n\t},\n\n\n\tprepareHits: function() {\n\t\tthis.timeGrid.prepareHits();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.prepareHits();\n\t\t}\n\t},\n\n\n\treleaseHits: function() {\n\t\tthis.timeGrid.releaseHits();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.releaseHits();\n\t\t}\n\t},\n\n\n\tqueryHit: function(left, top) {\n\t\tvar hit = this.timeGrid.queryHit(left, top);\n\n\t\tif (!hit && this.dayGrid) {\n\t\t\thit = this.dayGrid.queryHit(left, top);\n\t\t}\n\n\t\treturn hit;\n\t},\n\n\n\tgetHitSpan: function(hit) {\n\t\t// TODO: hit.component is set as a hack to identify where the hit came from\n\t\treturn hit.component.getHitSpan(hit);\n\t},\n\n\n\tgetHitEl: function(hit) {\n\t\t// TODO: hit.component is set as a hack to identify where the hit came from\n\t\treturn hit.component.getHitEl(hit);\n\t},\n\n\n\t/* Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders events onto the view and populates the View's segment array\n\trenderEvents: function(events) {\n\t\tvar dayEvents = [];\n\t\tvar timedEvents = [];\n\t\tvar daySegs = [];\n\t\tvar timedSegs;\n\t\tvar i;\n\n\t\t// separate the events into all-day and timed\n\t\tfor (i = 0; i < events.length; i++) {\n\t\t\tif (events[i].allDay) {\n\t\t\t\tdayEvents.push(events[i]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttimedEvents.push(events[i]);\n\t\t\t}\n\t\t}\n\n\t\t// render the events in the subcomponents\n\t\ttimedSegs = this.timeGrid.renderEvents(timedEvents);\n\t\tif (this.dayGrid) {\n\t\t\tdaySegs = this.dayGrid.renderEvents(dayEvents);\n\t\t}\n\n\t\t// the all-day area is flexible and might have a lot of events, so shift the height\n\t\tthis.updateHeight();\n\t},\n\n\n\t// Retrieves all segment objects that are rendered in the view\n\tgetEventSegs: function() {\n\t\treturn this.timeGrid.getEventSegs().concat(\n\t\t\tthis.dayGrid ? this.dayGrid.getEventSegs() : []\n\t\t);\n\t},\n\n\n\t// Unrenders all event elements and clears internal segment data\n\tunrenderEvents: function() {\n\n\t\t// unrender the events in the subcomponents\n\t\tthis.timeGrid.unrenderEvents();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.unrenderEvents();\n\t\t}\n\n\t\t// we DON'T need to call updateHeight() because\n\t\t// a renderEvents() call always happens after this, which will eventually call updateHeight()\n\t},\n\n\n\t/* Dragging (for events and external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// A returned value of `true` signals that a mock \""helper\"" event has been rendered.\n\trenderDrag: function(dropLocation, seg) {\n\t\tif (dropLocation.start.hasTime()) {\n\t\t\treturn this.timeGrid.renderDrag(dropLocation, seg);\n\t\t}\n\t\telse if (this.dayGrid) {\n\t\t\treturn this.dayGrid.renderDrag(dropLocation, seg);\n\t\t}\n\t},\n\n\n\tunrenderDrag: function() {\n\t\tthis.timeGrid.unrenderDrag();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.unrenderDrag();\n\t\t}\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection\n\trenderSelection: function(span) {\n\t\tif (span.start.hasTime() || span.end.hasTime()) {\n\t\t\tthis.timeGrid.renderSelection(span);\n\t\t}\n\t\telse if (this.dayGrid) {\n\t\t\tthis.dayGrid.renderSelection(span);\n\t\t}\n\t},\n\n\n\t// Unrenders a visual indications of a selection\n\tunrenderSelection: function() {\n\t\tthis.timeGrid.unrenderSelection();\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.unrenderSelection();\n\t\t}\n\t}\n\n});\n\n\n// Methods that will customize the rendering behavior of the AgendaView's timeGrid\n// TODO: move into TimeGrid\nvar agendaTimeGridMethods = {\n\n\n\t// Generates the HTML that will go before the day-of week header cells\n\trenderHeadIntroHtml: function() {\n\t\tvar view = this.view;\n\t\tvar weekText;\n\n\t\tif (view.opt('weekNumbers')) {\n\t\t\tweekText = this.start.format(view.opt('smallWeekFormat'));\n\n\t\t\treturn '' +\n\t\t\t\t'<th class=\""fc-axis fc-week-number ' + view.widgetHeaderClass + '\"" ' + view.axisStyleAttr() + '>' +\n\t\t\t\t\tview.buildGotoAnchorHtml( // aside from link, important for matchCellWidths\n\t\t\t\t\t\t{ date: this.start, type: 'week', forceOff: this.colCnt > 1 },\n\t\t\t\t\t\thtmlEscape(weekText) // inner HTML\n\t\t\t\t\t) +\n\t\t\t\t'</th>';\n\t\t}\n\t\telse {\n\t\t\treturn '<th class=\""fc-axis ' + view.widgetHeaderClass + '\"" ' + view.axisStyleAttr() + '></th>';\n\t\t}\n\t},\n\n\n\t// Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\n\trenderBgIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '<td class=\""fc-axis ' + view.widgetContentClass + '\"" ' + view.axisStyleAttr() + '></td>';\n\t},\n\n\n\t// Generates the HTML that goes before all other types of cells.\n\t// Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\n\trenderIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '<td class=\""fc-axis\"" ' + view.axisStyleAttr() + '></td>';\n\t}\n\n};\n\n\n// Methods that will customize the rendering behavior of the AgendaView's dayGrid\nvar agendaDayGridMethods = {\n\n\n\t// Generates the HTML that goes before the all-day cells\n\trenderBgIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '' +\n\t\t\t'<td class=\""fc-axis ' + view.widgetContentClass + '\"" ' + view.axisStyleAttr() + '>' +\n\t\t\t\t'<span>' + // needed for matchCellWidths\n\t\t\t\t\tview.getAllDayHtml() +\n\t\t\t\t'</span>' +\n\t\t\t'</td>';\n\t},\n\n\n\t// Generates the HTML that goes before all other types of cells.\n\t// Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\n\trenderIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '<td class=\""fc-axis\"" ' + view.axisStyleAttr() + '></td>';\n\t}\n\n};\n\n;;\n\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\n\n// potential nice values for the slot-duration and interval-duration\n// from largest to smallest\nvar AGENDA_STOCK_SUB_DURATIONS = [\n\t{ hours: 1 },\n\t{ minutes: 30 },\n\t{ minutes: 15 },\n\t{ seconds: 30 },\n\t{ seconds: 15 }\n];\n\nfcViews.agenda = {\n\t'class': AgendaView,\n\tdefaults: {\n\t\tallDaySlot: true,\n\t\tslotDuration: '00:30:00',\n\t\tslotEventOverlap: true // a bad name. confused with overlap/constraint system\n\t}\n};\n\nfcViews.agendaDay = {\n\ttype: 'agenda',\n\tduration: { days: 1 }\n};\n\nfcViews.agendaWeek = {\n\ttype: 'agenda',\n\tduration: { weeks: 1 }\n};\n;;\n\n/*\nResponsible for the scroller, and forwarding event-related actions into the \""grid\""\n*/\nvar ListView = View.extend({\n\n\tgrid: null,\n\tscroller: null,\n\n\tinitialize: function() {\n\t\tthis.grid = new ListViewGrid(this);\n\t\tthis.scroller = new Scroller({\n\t\t\toverflowX: 'hidden',\n\t\t\toverflowY: 'auto'\n\t\t});\n\t},\n\n\trenderSkeleton: function() {\n\t\tthis.el.addClass(\n\t\t\t'fc-list-view ' +\n\t\t\tthis.widgetContentClass\n\t\t);\n\n\t\tthis.scroller.render();\n\t\tthis.scroller.el.appendTo(this.el);\n\n\t\tthis.grid.setElement(this.scroller.scrollEl);\n\t},\n\n\tunrenderSkeleton: function() {\n\t\tthis.scroller.destroy(); // will remove the Grid too\n\t},\n\n\tsetHeight: function(totalHeight, isAuto) {\n\t\tthis.scroller.setHeight(this.computeScrollerHeight(totalHeight));\n\t},\n\n\tcomputeScrollerHeight: function(totalHeight) {\n\t\treturn totalHeight -\n\t\t\tsubtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n\t},\n\n\trenderDates: function() {\n\t\tthis.grid.setRange(this.renderRange); // needs to process range-related options\n\t},\n\n\trenderEvents: function(events) {\n\t\tthis.grid.renderEvents(events);\n\t},\n\n\tunrenderEvents: function() {\n\t\tthis.grid.unrenderEvents();\n\t},\n\n\tisEventResizable: function(event) {\n\t\treturn false;\n\t},\n\n\tisEventDraggable: function(event) {\n\t\treturn false;\n\t}\n\n});\n\n/*\nResponsible for event rendering and user-interaction.\nIts \""el\"" is the inner-content of the above view's scroller.\n*/\nvar ListViewGrid = Grid.extend({\n\n\tsegSelector: '.fc-list-item', // which elements accept event actions\n\thasDayInteractions: false, // no day selection or day clicking\n\n\t// slices by day\n\tspanToSegs: function(span) {\n\t\tvar view = this.view;\n\t\tvar dayStart = view.renderRange.start.clone().time(0); // timed, so segs get times!\n\t\tvar dayIndex = 0;\n\t\tvar seg;\n\t\tvar segs = [];\n\n\t\twhile (dayStart < view.renderRange.end) {\n\n\t\t\tseg = intersectRanges(span, {\n\t\t\t\tstart: dayStart,\n\t\t\t\tend: dayStart.clone().add(1, 'day')\n\t\t\t});\n\n\t\t\tif (seg) {\n\t\t\t\tseg.dayIndex = dayIndex;\n\t\t\t\tsegs.push(seg);\n\t\t\t}\n\n\t\t\tdayStart.add(1, 'day');\n\t\t\tdayIndex++;\n\n\t\t\t// detect when span won't go fully into the next day,\n\t\t\t// and mutate the latest seg to the be the end.\n\t\t\tif (\n\t\t\t\tseg && !seg.isEnd && span.end.hasTime() &&\n\t\t\t\tspan.end < dayStart.clone().add(this.view.nextDayThreshold)\n\t\t\t) {\n\t\t\t\tseg.end = span.end.clone();\n\t\t\t\tseg.isEnd = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\t// like \""4:00am\""\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.view.opt('mediumTimeFormat');\n\t},\n\n\t// for events with a url, the whole <tr> should be clickable,\n\t// but it's impossible to wrap with an <a> tag. simulate this.\n\thandleSegClick: function(seg, ev) {\n\t\tvar url;\n\n\t\tGrid.prototype.handleSegClick.apply(this, arguments); // super. might prevent the default action\n\n\t\t// not clicking on or within an <a> with an href\n\t\tif (!$(ev.target).closest('a[href]').length) {\n\t\t\turl = seg.event.url;\n\t\t\tif (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler\n\t\t\t\twindow.location.href = url; // simulate link click\n\t\t\t}\n\t\t}\n\t},\n\n\t// returns list of foreground segs that were actually rendered\n\trenderFgSegs: function(segs) {\n\t\tsegs = this.renderFgSegEls(segs); // might filter away hidden events\n\n\t\tif (!segs.length) {\n\t\t\tthis.renderEmptyMessage();\n\t\t}\n\t\telse {\n\t\t\tthis.renderSegList(segs);\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\trenderEmptyMessage: function() {\n\t\tthis.el.html(\n\t\t\t'<div class=\""fc-list-empty-wrap2\"">' + // TODO: try less wraps\n\t\t\t'<div class=\""fc-list-empty-wrap1\"">' +\n\t\t\t'<div class=\""fc-list-empty\"">' +\n\t\t\t\thtmlEscape(this.view.opt('noEventsMessage')) +\n\t\t\t'</div>' +\n\t\t\t'</div>' +\n\t\t\t'</div>'\n\t\t);\n\t},\n\n\t// render the event segments in the view\n\trenderSegList: function(allSegs) {\n\t\tvar segsByDay = this.groupSegsByDay(allSegs); // sparse array\n\t\tvar dayIndex;\n\t\tvar daySegs;\n\t\tvar i;\n\t\tvar tableEl = $('<table class=\""fc-list-table\""><tbody/></table>');\n\t\tvar tbodyEl = tableEl.find('tbody');\n\n\t\tfor (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\n\t\t\tdaySegs = segsByDay[dayIndex];\n\t\t\tif (daySegs) { // sparse array, so might be undefined\n\n\t\t\t\t// append a day header\n\t\t\t\ttbodyEl.append(this.dayHeaderHtml(\n\t\t\t\t\tthis.view.renderRange.start.clone().add(dayIndex, 'days')\n\t\t\t\t));\n\n\t\t\t\tthis.sortEventSegs(daySegs);\n\n\t\t\t\tfor (i = 0; i < daySegs.length; i++) {\n\t\t\t\t\ttbodyEl.append(daySegs[i].el); // append event row\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.el.empty().append(tableEl);\n\t},\n\n\t// Returns a sparse array of arrays, segs grouped by their dayIndex\n\tgroupSegsByDay: function(segs) {\n\t\tvar segsByDay = []; // sparse array\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\t(segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\n\t\t\t\t.push(seg);\n\t\t}\n\n\t\treturn segsByDay;\n\t},\n\n\t// generates the HTML for the day headers that live amongst the event rows\n\tdayHeaderHtml: function(dayDate) {\n\t\tvar view = this.view;\n\t\tvar mainFormat = view.opt('listDayFormat');\n\t\tvar altFormat = view.opt('listDayAltFormat');\n\n\t\treturn '<tr class=\""fc-list-heading\"" data-date=\""' + dayDate.format('YYYY-MM-DD') + '\"">' +\n\t\t\t'<td class=\""' + view.widgetHeaderClass + '\"" colspan=\""3\"">' +\n\t\t\t\t(mainFormat ?\n\t\t\t\t\tview.buildGotoAnchorHtml(\n\t\t\t\t\t\tdayDate,\n\t\t\t\t\t\t{ 'class': 'fc-list-heading-main' },\n\t\t\t\t\t\thtmlEscape(dayDate.format(mainFormat)) // inner HTML\n\t\t\t\t\t) :\n\t\t\t\t\t'') +\n\t\t\t\t(altFormat ?\n\t\t\t\t\tview.buildGotoAnchorHtml(\n\t\t\t\t\t\tdayDate,\n\t\t\t\t\t\t{ 'class': 'fc-list-heading-alt' },\n\t\t\t\t\t\thtmlEscape(dayDate.format(altFormat)) // inner HTML\n\t\t\t\t\t) :\n\t\t\t\t\t'') +\n\t\t\t'</td>' +\n\t\t'</tr>';\n\t},\n\n\t// generates the HTML for a single event row\n\tfgSegHtml: function(seg) {\n\t\tvar view = this.view;\n\t\tvar classes = [ 'fc-list-item' ].concat(this.getSegCustomClasses(seg));\n\t\tvar bgColor = this.getSegBackgroundColor(seg);\n\t\tvar event = seg.event;\n\t\tvar url = event.url;\n\t\tvar timeHtml;\n\n\t\tif (event.allDay) {\n\t\t\ttimeHtml = view.getAllDayHtml();\n\t\t}\n\t\telse if (view.isMultiDayEvent(event)) { // if the event appears to span more than one day\n\t\t\tif (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day\n\t\t\t\ttimeHtml = htmlEscape(this.getEventTimeText(seg));\n\t\t\t}\n\t\t\telse { // inner segment that lasts the whole day\n\t\t\t\ttimeHtml = view.getAllDayHtml();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Display the normal time text for the *event's* times\n\t\t\ttimeHtml = htmlEscape(this.getEventTimeText(event));\n\t\t}\n\n\t\tif (url) {\n\t\t\tclasses.push('fc-has-url');\n\t\t}\n\n\t\treturn '<tr class=\""' + classes.join(' ') + '\"">' +\n\t\t\t(this.displayEventTime ?\n\t\t\t\t'<td class=\""fc-list-item-time ' + view.widgetContentClass + '\"">' +\n\t\t\t\t\t(timeHtml || '') +\n\t\t\t\t'</td>' :\n\t\t\t\t'') +\n\t\t\t'<td class=\""fc-list-item-marker ' + view.widgetContentClass + '\"">' +\n\t\t\t\t'<span class=\""fc-event-dot\""' +\n\t\t\t\t(bgColor ?\n\t\t\t\t\t' style=\""background-color:' + bgColor + '\""' :\n\t\t\t\t\t'') +\n\t\t\t\t'></span>' +\n\t\t\t'</td>' +\n\t\t\t'<td class=\""fc-list-item-title ' + view.widgetContentClass + '\"">' +\n\t\t\t\t'<a' + (url ? ' href=\""' + htmlEscape(url) + '\""' : '') + '>' +\n\t\t\t\t\thtmlEscape(seg.event.title || '') +\n\t\t\t\t'</a>' +\n\t\t\t'</td>' +\n\t\t'</tr>';\n\t}\n\n});\n\n;;\n\nfcViews.list = {\n\t'class': ListView,\n\tbuttonTextKey: 'list', // what to lookup in locale files\n\tdefaults: {\n\t\tbuttonText: 'list', // text to display for English\n\t\tlistDayFormat: 'LL', // like \""January 1, 2016\""\n\t\tnoEventsMessage: 'No events to display'\n\t}\n};\n\nfcViews.listDay = {\n\ttype: 'list',\n\tduration: { days: 1 },\n\tdefaults: {\n\t\tlistDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\n\t}\n};\n\nfcViews.listWeek = {\n\ttype: 'list',\n\tduration: { weeks: 1 },\n\tdefaults: {\n\t\tlistDayFormat: 'dddd', // day-of-week is more important\n\t\tlistDayAltFormat: 'LL'\n\t}\n};\n\nfcViews.listMonth = {\n\ttype: 'list',\n\tduration: { month: 1 },\n\tdefaults: {\n\t\tlistDayAltFormat: 'dddd' // day-of-week is nice-to-have\n\t}\n};\n\nfcViews.listYear = {\n\ttype: 'list',\n\tduration: { year: 1 },\n\tdefaults: {\n\t\tlistDayAltFormat: 'dddd' // day-of-week is nice-to-have\n\t}\n};\n\n;;\n\r\nreturn FC; // export for Node/CommonJS\r\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/fullcalendar/dist/fullcalendar.js\n// module id = 27\n// module chunks = 0"",""//! moment.js\n//! version : 2.18.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\nvar hookCallback;\n\nfunction hooks () {\n    return hookCallback.apply(null, arguments);\n}\n\n// This is done to register the method called with moment()\n// without creating circular dependencies.\nfunction setHookCallback (callback) {\n    hookCallback = callback;\n}\n\nfunction isArray(input) {\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n}\n\nfunction isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n}\n\nfunction isObjectEmpty(obj) {\n    var k;\n    for (k in obj) {\n        // even if its not own property I'd still call it non-empty\n        return false;\n    }\n    return true;\n}\n\nfunction isUndefined(input) {\n    return input === void 0;\n}\n\nfunction isNumber(input) {\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n}\n\nfunction isDate(input) {\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n}\n\nfunction map(arr, fn) {\n    var res = [], i;\n    for (i = 0; i < arr.length; ++i) {\n        res.push(fn(arr[i], i));\n    }\n    return res;\n}\n\nfunction hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction extend(a, b) {\n    for (var i in b) {\n        if (hasOwnProp(b, i)) {\n            a[i] = b[i];\n        }\n    }\n\n    if (hasOwnProp(b, 'toString')) {\n        a.toString = b.toString;\n    }\n\n    if (hasOwnProp(b, 'valueOf')) {\n        a.valueOf = b.valueOf;\n    }\n\n    return a;\n}\n\nfunction createUTC (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction defaultParsingFlags() {\n    // We need to deep clone this object.\n    return {\n        empty           : false,\n        unusedTokens    : [],\n        unusedInput     : [],\n        overflow        : -2,\n        charsLeftOver   : 0,\n        nullInput       : false,\n        invalidMonth    : null,\n        invalidFormat   : false,\n        userInvalidated : false,\n        iso             : false,\n        parsedDateParts : [],\n        meridiem        : null,\n        rfc2822         : false,\n        weekdayMismatch : false\n    };\n}\n\nfunction getParsingFlags(m) {\n    if (m._pf == null) {\n        m._pf = defaultParsingFlags();\n    }\n    return m._pf;\n}\n\nvar some;\nif (Array.prototype.some) {\n    some = Array.prototype.some;\n} else {\n    some = function (fun) {\n        var t = Object(this);\n        var len = t.length >>> 0;\n\n        for (var i = 0; i < len; i++) {\n            if (i in t && fun.call(this, t[i], i, t)) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n}\n\nvar some$1 = some;\n\nfunction isValid(m) {\n    if (m._isValid == null) {\n        var flags = getParsingFlags(m);\n        var parsedParts = some$1.call(flags.parsedDateParts, function (i) {\n            return i != null;\n        });\n        var isNowValid = !isNaN(m._d.getTime()) &&\n            flags.overflow < 0 &&\n            !flags.empty &&\n            !flags.invalidMonth &&\n            !flags.invalidWeekday &&\n            !flags.nullInput &&\n            !flags.invalidFormat &&\n            !flags.userInvalidated &&\n            (!flags.meridiem || (flags.meridiem && parsedParts));\n\n        if (m._strict) {\n            isNowValid = isNowValid &&\n                flags.charsLeftOver === 0 &&\n                flags.unusedTokens.length === 0 &&\n                flags.bigHour === undefined;\n        }\n\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        }\n        else {\n            return isNowValid;\n        }\n    }\n    return m._isValid;\n}\n\nfunction createInvalid (flags) {\n    var m = createUTC(NaN);\n    if (flags != null) {\n        extend(getParsingFlags(m), flags);\n    }\n    else {\n        getParsingFlags(m).userInvalidated = true;\n    }\n\n    return m;\n}\n\n// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = hooks.momentProperties = [];\n\nfunction copyConfig(to, from) {\n    var i, prop, val;\n\n    if (!isUndefined(from._isAMomentObject)) {\n        to._isAMomentObject = from._isAMomentObject;\n    }\n    if (!isUndefined(from._i)) {\n        to._i = from._i;\n    }\n    if (!isUndefined(from._f)) {\n        to._f = from._f;\n    }\n    if (!isUndefined(from._l)) {\n        to._l = from._l;\n    }\n    if (!isUndefined(from._strict)) {\n        to._strict = from._strict;\n    }\n    if (!isUndefined(from._tzm)) {\n        to._tzm = from._tzm;\n    }\n    if (!isUndefined(from._isUTC)) {\n        to._isUTC = from._isUTC;\n    }\n    if (!isUndefined(from._offset)) {\n        to._offset = from._offset;\n    }\n    if (!isUndefined(from._pf)) {\n        to._pf = getParsingFlags(from);\n    }\n    if (!isUndefined(from._locale)) {\n        to._locale = from._locale;\n    }\n\n    if (momentProperties.length > 0) {\n        for (i = 0; i < momentProperties.length; i++) {\n            prop = momentProperties[i];\n            val = from[prop];\n            if (!isUndefined(val)) {\n                to[prop] = val;\n            }\n        }\n    }\n\n    return to;\n}\n\nvar updateInProgress = false;\n\n// Moment prototype object\nfunction Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n    if (!this.isValid()) {\n        this._d = new Date(NaN);\n    }\n    // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n    if (updateInProgress === false) {\n        updateInProgress = true;\n        hooks.updateOffset(this);\n        updateInProgress = false;\n    }\n}\n\nfunction isMoment (obj) {\n    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n}\n\nfunction absFloor (number) {\n    if (number < 0) {\n        // -0 -> 0\n        return Math.ceil(number) || 0;\n    } else {\n        return Math.floor(number);\n    }\n}\n\nfunction toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n        value = 0;\n\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n        value = absFloor(coercedNumber);\n    }\n\n    return value;\n}\n\n// compare two arrays, return the number of differences\nfunction compareArrays(array1, array2, dontConvert) {\n    var len = Math.min(array1.length, array2.length),\n        lengthDiff = Math.abs(array1.length - array2.length),\n        diffs = 0,\n        i;\n    for (i = 0; i < len; i++) {\n        if ((dontConvert && array1[i] !== array2[i]) ||\n            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n            diffs++;\n        }\n    }\n    return diffs + lengthDiff;\n}\n\nfunction warn(msg) {\n    if (hooks.suppressDeprecationWarnings === false &&\n            (typeof console !==  'undefined') && console.warn) {\n        console.warn('Deprecation warning: ' + msg);\n    }\n}\n\nfunction deprecate(msg, fn) {\n    var firstTime = true;\n\n    return extend(function () {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(null, msg);\n        }\n        if (firstTime) {\n            var args = [];\n            var arg;\n            for (var i = 0; i < arguments.length; i++) {\n                arg = '';\n                if (typeof arguments[i] === 'object') {\n                    arg += '\\n[' + i + '] ';\n                    for (var key in arguments[0]) {\n                        arg += key + ': ' + arguments[0][key] + ', ';\n                    }\n                    arg = arg.slice(0, -2); // Remove trailing comma and space\n                } else {\n                    arg = arguments[i];\n                }\n                args.push(arg);\n            }\n            warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n            firstTime = false;\n        }\n        return fn.apply(this, arguments);\n    }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(name, msg);\n    }\n    if (!deprecations[name]) {\n        warn(msg);\n        deprecations[name] = true;\n    }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n}\n\nfunction set (config) {\n    var prop, i;\n    for (i in config) {\n        prop = config[i];\n        if (isFunction(prop)) {\n            this[i] = prop;\n        } else {\n            this['_' + i] = prop;\n        }\n    }\n    this._config = config;\n    // Lenient ordinal parsing accepts just a number in addition to\n    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n    // TODO: Remove \""ordinalParse\"" fallback in next major release.\n    this._dayOfMonthOrdinalParseLenient = new RegExp(\n        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n            '|' + (/\\d{1,2}/).source);\n}\n\nfunction mergeConfigs(parentConfig, childConfig) {\n    var res = extend({}, parentConfig), prop;\n    for (prop in childConfig) {\n        if (hasOwnProp(childConfig, prop)) {\n            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                res[prop] = {};\n                extend(res[prop], parentConfig[prop]);\n                extend(res[prop], childConfig[prop]);\n            } else if (childConfig[prop] != null) {\n                res[prop] = childConfig[prop];\n            } else {\n                delete res[prop];\n            }\n        }\n    }\n    for (prop in parentConfig) {\n        if (hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])) {\n            // make sure changes to properties don't modify parent config\n            res[prop] = extend({}, res[prop]);\n        }\n    }\n    return res;\n}\n\nfunction Locale(config) {\n    if (config != null) {\n        this.set(config);\n    }\n}\n\nvar keys;\n\nif (Object.keys) {\n    keys = Object.keys;\n} else {\n    keys = function (obj) {\n        var i, res = [];\n        for (i in obj) {\n            if (hasOwnProp(obj, i)) {\n                res.push(i);\n            }\n        }\n        return res;\n    };\n}\n\nvar keys$1 = keys;\n\nvar defaultCalendar = {\n    sameDay : '[Today at] LT',\n    nextDay : '[Tomorrow at] LT',\n    nextWeek : 'dddd [at] LT',\n    lastDay : '[Yesterday at] LT',\n    lastWeek : '[Last] dddd [at] LT',\n    sameElse : 'L'\n};\n\nfunction calendar (key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n}\n\nvar defaultLongDateFormat = {\n    LTS  : 'h:mm:ss A',\n    LT   : 'h:mm A',\n    L    : 'MM/DD/YYYY',\n    LL   : 'MMMM D, YYYY',\n    LLL  : 'MMMM D, YYYY h:mm A',\n    LLLL : 'dddd, MMMM D, YYYY h:mm A'\n};\n\nfunction longDateFormat (key) {\n    var format = this._longDateFormat[key],\n        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n    if (format || !formatUpper) {\n        return format;\n    }\n\n    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n        return val.slice(1);\n    });\n\n    return this._longDateFormat[key];\n}\n\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate () {\n    return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d';\nvar defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal (number) {\n    return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n    future : 'in %s',\n    past   : '%s ago',\n    s  : 'a few seconds',\n    ss : '%d seconds',\n    m  : 'a minute',\n    mm : '%d minutes',\n    h  : 'an hour',\n    hh : '%d hours',\n    d  : 'a day',\n    dd : '%d days',\n    M  : 'a month',\n    MM : '%d months',\n    y  : 'a year',\n    yy : '%d years'\n};\n\nfunction relativeTime (number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return (isFunction(output)) ?\n        output(number, withoutSuffix, string, isFuture) :\n        output.replace(/%d/i, number);\n}\n\nfunction pastFuture (diff, output) {\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n}\n\nvar aliases = {};\n\nfunction addUnitAlias (unit, shorthand) {\n    var lowerCase = unit.toLowerCase();\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n}\n\nfunction normalizeUnits(units) {\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n}\n\nfunction normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n        normalizedProp,\n        prop;\n\n    for (prop in inputObject) {\n        if (hasOwnProp(inputObject, prop)) {\n            normalizedProp = normalizeUnits(prop);\n            if (normalizedProp) {\n                normalizedInput[normalizedProp] = inputObject[prop];\n            }\n        }\n    }\n\n    return normalizedInput;\n}\n\nvar priorities = {};\n\nfunction addUnitPriority(unit, priority) {\n    priorities[unit] = priority;\n}\n\nfunction getPrioritizedUnits(unitsObj) {\n    var units = [];\n    for (var u in unitsObj) {\n        units.push({unit: u, priority: priorities[u]});\n    }\n    units.sort(function (a, b) {\n        return a.priority - b.priority;\n    });\n    return units;\n}\n\nfunction makeGetSet (unit, keepTime) {\n    return function (value) {\n        if (value != null) {\n            set$1(this, unit, value);\n            hooks.updateOffset(this, keepTime);\n            return this;\n        } else {\n            return get(this, unit);\n        }\n    };\n}\n\nfunction get (mom, unit) {\n    return mom.isValid() ?\n        mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n}\n\nfunction set$1 (mom, unit, value) {\n    if (mom.isValid()) {\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n    }\n}\n\n// MOMENTS\n\nfunction stringGet (units) {\n    units = normalizeUnits(units);\n    if (isFunction(this[units])) {\n        return this[units]();\n    }\n    return this;\n}\n\n\nfunction stringSet (units, value) {\n    if (typeof units === 'object') {\n        units = normalizeObjectUnits(units);\n        var prioritized = getPrioritizedUnits(units);\n        for (var i = 0; i < prioritized.length; i++) {\n            this[prioritized[i].unit](units[prioritized[i].unit]);\n        }\n    } else {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units](value);\n        }\n    }\n    return this;\n}\n\nfunction zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n        zerosToFill = targetLength - absNumber.length,\n        sign = number >= 0;\n    return (sign ? (forceSign ? '+' : '') : '-') +\n        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n}\n\nvar formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\nvar localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\nvar formatFunctions = {};\n\nvar formatTokenFunctions = {};\n\n// token:    'M'\n// padded:   ['MM', 2]\n// ordinal:  'Mo'\n// callback: function () { this.month() + 1 }\nfunction addFormatToken (token, padded, ordinal, callback) {\n    var func = callback;\n    if (typeof callback === 'string') {\n        func = function () {\n            return this[callback]();\n        };\n    }\n    if (token) {\n        formatTokenFunctions[token] = func;\n    }\n    if (padded) {\n        formatTokenFunctions[padded[0]] = function () {\n            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n        };\n    }\n    if (ordinal) {\n        formatTokenFunctions[ordinal] = function () {\n            return this.localeData().ordinal(func.apply(this, arguments), token);\n        };\n    }\n}\n\nfunction removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n        return input.replace(/^\\[|\\]$/g, '');\n    }\n    return input.replace(/\\\\/g, '');\n}\n\nfunction makeFormatFunction(format) {\n    var array = format.match(formattingTokens), i, length;\n\n    for (i = 0, length = array.length; i < length; i++) {\n        if (formatTokenFunctions[array[i]]) {\n            array[i] = formatTokenFunctions[array[i]];\n        } else {\n            array[i] = removeFormattingTokens(array[i]);\n        }\n    }\n\n    return function (mom) {\n        var output = '', i;\n        for (i = 0; i < length; i++) {\n            output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n        }\n        return output;\n    };\n}\n\n// format date using native date object\nfunction formatMoment(m, format) {\n    if (!m.isValid()) {\n        return m.localeData().invalidDate();\n    }\n\n    format = expandFormat(format, m.localeData());\n    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n    return formatFunctions[format](m);\n}\n\nfunction expandFormat(format, locale) {\n    var i = 5;\n\n    function replaceLongDateFormatTokens(input) {\n        return locale.longDateFormat(input) || input;\n    }\n\n    localFormattingTokens.lastIndex = 0;\n    while (i >= 0 && localFormattingTokens.test(format)) {\n        format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n        localFormattingTokens.lastIndex = 0;\n        i -= 1;\n    }\n\n    return format;\n}\n\nvar match1         = /\\d/;            //       0 - 9\nvar match2         = /\\d\\d/;          //      00 - 99\nvar match3         = /\\d{3}/;         //     000 - 999\nvar match4         = /\\d{4}/;         //    0000 - 9999\nvar match6         = /[+-]?\\d{6}/;    // -999999 - 999999\nvar match1to2      = /\\d\\d?/;         //       0 - 99\nvar match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\nvar match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\nvar match1to3      = /\\d{1,3}/;       //       0 - 999\nvar match1to4      = /\\d{1,4}/;       //       0 - 9999\nvar match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\nvar matchUnsigned  = /\\d+/;           //       0 - inf\nvar matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\nvar matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\nvar matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\nvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n// any word (or two) characters or numbers including two/three word month in arabic.\n// includes scottish gaelic two word and hyphenated months\nvar matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n\nvar regexes = {};\n\nfunction addRegexToken (token, regex, strictRegex) {\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n        return (isStrict && strictRegex) ? strictRegex : regex;\n    };\n}\n\nfunction getParseRegexForToken (token, config) {\n    if (!hasOwnProp(regexes, token)) {\n        return new RegExp(unescapeFormat(token));\n    }\n\n    return regexes[token](config._strict, config._locale);\n}\n\n// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\nfunction unescapeFormat(s) {\n    return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n        return p1 || p2 || p3 || p4;\n    }));\n}\n\nfunction regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nvar tokens = {};\n\nfunction addParseToken (token, callback) {\n    var i, func = callback;\n    if (typeof token === 'string') {\n        token = [token];\n    }\n    if (isNumber(callback)) {\n        func = function (input, array) {\n            array[callback] = toInt(input);\n        };\n    }\n    for (i = 0; i < token.length; i++) {\n        tokens[token[i]] = func;\n    }\n}\n\nfunction addWeekParseToken (token, callback) {\n    addParseToken(token, function (input, array, config, token) {\n        config._w = config._w || {};\n        callback(input, config._w, config, token);\n    });\n}\n\nfunction addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n        tokens[token](input, config._a, config, token);\n    }\n}\n\nvar YEAR = 0;\nvar MONTH = 1;\nvar DATE = 2;\nvar HOUR = 3;\nvar MINUTE = 4;\nvar SECOND = 5;\nvar MILLISECOND = 6;\nvar WEEK = 7;\nvar WEEKDAY = 8;\n\nvar indexOf;\n\nif (Array.prototype.indexOf) {\n    indexOf = Array.prototype.indexOf;\n} else {\n    indexOf = function (o) {\n        // I know\n        var i;\n        for (i = 0; i < this.length; ++i) {\n            if (this[i] === o) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\n\nvar indexOf$1 = indexOf;\n\nfunction daysInMonth(year, month) {\n    return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n});\n\n// ALIASES\n\naddUnitAlias('month', 'M');\n\n// PRIORITY\n\naddUnitPriority('month', 8);\n\n// PARSING\n\naddRegexToken('M',    match1to2);\naddRegexToken('MM',   match1to2, match2);\naddRegexToken('MMM',  function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n    var month = config._locale.monthsParse(input, token, config._strict);\n    // if we didn't find a month name, mark the date as invalid.\n    if (month != null) {\n        array[MONTH] = month;\n    } else {\n        getParsingFlags(config).invalidMonth = input;\n    }\n});\n\n// LOCALES\n\nvar MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\nvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\nfunction localeMonths (m, format) {\n    if (!m) {\n        return isArray(this._months) ? this._months :\n            this._months['standalone'];\n    }\n    return isArray(this._months) ? this._months[m.month()] :\n        this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nvar defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\nfunction localeMonthsShort (m, format) {\n    if (!m) {\n        return isArray(this._monthsShort) ? this._monthsShort :\n            this._monthsShort['standalone'];\n    }\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nfunction handleStrictParse(monthName, format, strict) {\n    var i, ii, mom, llc = monthName.toLocaleLowerCase();\n    if (!this._monthsParse) {\n        // this is not used\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n        for (i = 0; i < 12; ++i) {\n            mom = createUTC([2000, i]);\n            this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'MMM') {\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'MMM') {\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeMonthsParse (monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n        return handleStrictParse.call(this, monthName, format, strict);\n    }\n\n    if (!this._monthsParse) {\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n    }\n\n    // TODO: add sorting\n    // Sorting makes sure if one month (or abbr) is a prefix of another\n    // see sorting in computeMonthsParse\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        if (strict && !this._longMonthsParse[i]) {\n            this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n            this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n        }\n        if (!strict && !this._monthsParse[i]) {\n            regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n            return i;\n        } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n            return i;\n        } else if (!strict && this._monthsParse[i].test(monthName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction setMonth (mom, value) {\n    var dayOfMonth;\n\n    if (!mom.isValid()) {\n        // No op\n        return mom;\n    }\n\n    if (typeof value === 'string') {\n        if (/^\\d+$/.test(value)) {\n            value = toInt(value);\n        } else {\n            value = mom.localeData().monthsParse(value);\n            // TODO: Another silent failure?\n            if (!isNumber(value)) {\n                return mom;\n            }\n        }\n    }\n\n    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n    return mom;\n}\n\nfunction getSetMonth (value) {\n    if (value != null) {\n        setMonth(this, value);\n        hooks.updateOffset(this, true);\n        return this;\n    } else {\n        return get(this, 'Month');\n    }\n}\n\nfunction getDaysInMonth () {\n    return daysInMonth(this.year(), this.month());\n}\n\nvar defaultMonthsShortRegex = matchWord;\nfunction monthsShortRegex (isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsShortStrictRegex;\n        } else {\n            return this._monthsShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsShortRegex')) {\n            this._monthsShortRegex = defaultMonthsShortRegex;\n        }\n        return this._monthsShortStrictRegex && isStrict ?\n            this._monthsShortStrictRegex : this._monthsShortRegex;\n    }\n}\n\nvar defaultMonthsRegex = matchWord;\nfunction monthsRegex (isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsStrictRegex;\n        } else {\n            return this._monthsRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            this._monthsRegex = defaultMonthsRegex;\n        }\n        return this._monthsStrictRegex && isStrict ?\n            this._monthsStrictRegex : this._monthsRegex;\n    }\n}\n\nfunction computeMonthsParse () {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var shortPieces = [], longPieces = [], mixedPieces = [],\n        i, mom;\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        shortPieces.push(this.monthsShort(mom, ''));\n        longPieces.push(this.months(mom, ''));\n        mixedPieces.push(this.months(mom, ''));\n        mixedPieces.push(this.monthsShort(mom, ''));\n    }\n    // Sorting makes sure if one month (or abbr) is a prefix of another it\n    // will match the longer piece.\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n    for (i = 0; i < 12; i++) {\n        shortPieces[i] = regexEscape(shortPieces[i]);\n        longPieces[i] = regexEscape(longPieces[i]);\n    }\n    for (i = 0; i < 24; i++) {\n        mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n}\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? '' + y : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY',   4],       0, 'year');\naddFormatToken(0, ['YYYYY',  5],       0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// ALIASES\n\naddUnitAlias('year', 'y');\n\n// PRIORITIES\n\naddUnitPriority('year', 1);\n\n// PARSING\n\naddRegexToken('Y',      matchSigned);\naddRegexToken('YY',     match1to2, match2);\naddRegexToken('YYYY',   match1to4, match4);\naddRegexToken('YYYYY',  match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n}\n\nfunction isLeapYear(year) {\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear () {\n    return isLeapYear(this.year());\n}\n\nfunction createDate (y, m, d, h, M, s, ms) {\n    // can't just apply() to create a date:\n    // https://stackoverflow.com/q/181348\n    var date = new Date(y, m, d, h, M, s, ms);\n\n    // the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n        date.setFullYear(y);\n    }\n    return date;\n}\n\nfunction createUTCDate (y) {\n    var date = new Date(Date.UTC.apply(null, arguments));\n\n    // the Date.UTC function remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n        date.setUTCFullYear(y);\n    }\n    return date;\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n        fwd = 7 + dow - doy,\n        // first-week day local weekday -- which local weekday is fwd\n        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n    return -fwdlw + fwd - 1;\n}\n\n// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n    var localWeekday = (7 + weekday - dow) % 7,\n        weekOffset = firstWeekOffset(year, dow, doy),\n        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n        resYear, resDayOfYear;\n\n    if (dayOfYear <= 0) {\n        resYear = year - 1;\n        resDayOfYear = daysInYear(resYear) + dayOfYear;\n    } else if (dayOfYear > daysInYear(year)) {\n        resYear = year + 1;\n        resDayOfYear = dayOfYear - daysInYear(year);\n    } else {\n        resYear = year;\n        resDayOfYear = dayOfYear;\n    }\n\n    return {\n        year: resYear,\n        dayOfYear: resDayOfYear\n    };\n}\n\nfunction weekOfYear(mom, dow, doy) {\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n        resWeek, resYear;\n\n    if (week < 1) {\n        resYear = mom.year() - 1;\n        resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n        resWeek = week - weeksInYear(mom.year(), dow, doy);\n        resYear = mom.year() + 1;\n    } else {\n        resYear = mom.year();\n        resWeek = week;\n    }\n\n    return {\n        week: resWeek,\n        year: resYear\n    };\n}\n\nfunction weeksInYear(year, dow, doy) {\n    var weekOffset = firstWeekOffset(year, dow, doy),\n        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n\n// FORMATTING\n\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// ALIASES\n\naddUnitAlias('week', 'w');\naddUnitAlias('isoWeek', 'W');\n\n// PRIORITIES\n\naddUnitPriority('week', 5);\naddUnitPriority('isoWeek', 5);\n\n// PARSING\n\naddRegexToken('w',  match1to2);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W',  match1to2);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n    week[token.substr(0, 1)] = toInt(input);\n});\n\n// HELPERS\n\n// LOCALES\n\nfunction localeWeek (mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar defaultLocaleWeek = {\n    dow : 0, // Sunday is the first day of the week.\n    doy : 6  // The week that contains Jan 1st is the first week of the year.\n};\n\nfunction localeFirstDayOfWeek () {\n    return this._week.dow;\n}\n\nfunction localeFirstDayOfYear () {\n    return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek (input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction getSetISOWeek (input) {\n    var week = weekOfYear(this, 1, 4).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// ALIASES\n\naddUnitAlias('day', 'd');\naddUnitAlias('weekday', 'e');\naddUnitAlias('isoWeekday', 'E');\n\n// PRIORITY\naddUnitPriority('day', 11);\naddUnitPriority('weekday', 11);\naddUnitPriority('isoWeekday', 11);\n\n// PARSING\n\naddRegexToken('d',    match1to2);\naddRegexToken('e',    match1to2);\naddRegexToken('E',    match1to2);\naddRegexToken('dd',   function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd',   function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd',   function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n    var weekday = config._locale.weekdaysParse(input, token, config._strict);\n    // if we didn't get a weekday name, mark the date as invalid\n    if (weekday != null) {\n        week.d = weekday;\n    } else {\n        getParsingFlags(config).invalidWeekday = input;\n    }\n});\n\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction parseWeekday(input, locale) {\n    if (typeof input !== 'string') {\n        return input;\n    }\n\n    if (!isNaN(input)) {\n        return parseInt(input, 10);\n    }\n\n    input = locale.weekdaysParse(input);\n    if (typeof input === 'number') {\n        return input;\n    }\n\n    return null;\n}\n\nfunction parseIsoWeekday(input, locale) {\n    if (typeof input === 'string') {\n        return locale.weekdaysParse(input) % 7 || 7;\n    }\n    return isNaN(input) ? null : input;\n}\n\n// LOCALES\n\nvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\nfunction localeWeekdays (m, format) {\n    if (!m) {\n        return isArray(this._weekdays) ? this._weekdays :\n            this._weekdays['standalone'];\n    }\n    return isArray(this._weekdays) ? this._weekdays[m.day()] :\n        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n}\n\nvar defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\nfunction localeWeekdaysShort (m) {\n    return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n}\n\nvar defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\nfunction localeWeekdaysMin (m) {\n    return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(weekdayName, format, strict) {\n    var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._minWeekdaysParse = [];\n\n        for (i = 0; i < 7; ++i) {\n            mom = createUTC([2000, 1]).day(i);\n            this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n            this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'dddd') {\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'dddd') {\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeWeekdaysParse (weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n        return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._minWeekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._fullWeekdaysParse = [];\n    }\n\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n\n        mom = createUTC([2000, 1]).day(i);\n        if (strict && !this._fullWeekdaysParse[i]) {\n            this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n            this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n            this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n        }\n        if (!this._weekdaysParse[i]) {\n            regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction getSetDayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n    if (input != null) {\n        input = parseWeekday(input, this.localeData());\n        return this.add(input - day, 'd');\n    } else {\n        return day;\n    }\n}\n\nfunction getSetLocaleDayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n    return input == null ? weekday : this.add(input - weekday, 'd');\n}\n\nfunction getSetISODayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n\n    // behaves the same as moment#day except\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n    // as a setter, sunday should belong to the previous week.\n\n    if (input != null) {\n        var weekday = parseIsoWeekday(input, this.localeData());\n        return this.day(this.day() % 7 ? weekday : weekday - 7);\n    } else {\n        return this.day() || 7;\n    }\n}\n\nvar defaultWeekdaysRegex = matchWord;\nfunction weekdaysRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysStrictRegex;\n        } else {\n            return this._weekdaysRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            this._weekdaysRegex = defaultWeekdaysRegex;\n        }\n        return this._weekdaysStrictRegex && isStrict ?\n            this._weekdaysStrictRegex : this._weekdaysRegex;\n    }\n}\n\nvar defaultWeekdaysShortRegex = matchWord;\nfunction weekdaysShortRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysShortStrictRegex;\n        } else {\n            return this._weekdaysShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n            this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n        }\n        return this._weekdaysShortStrictRegex && isStrict ?\n            this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n    }\n}\n\nvar defaultWeekdaysMinRegex = matchWord;\nfunction weekdaysMinRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysMinStrictRegex;\n        } else {\n            return this._weekdaysMinRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n            this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n        }\n        return this._weekdaysMinStrictRegex && isStrict ?\n            this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n    }\n}\n\n\nfunction computeWeekdaysParse () {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n        i, mom, minp, shortp, longp;\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, 1]).day(i);\n        minp = this.weekdaysMin(mom, '');\n        shortp = this.weekdaysShort(mom, '');\n        longp = this.weekdays(mom, '');\n        minPieces.push(minp);\n        shortPieces.push(shortp);\n        longPieces.push(longp);\n        mixedPieces.push(minp);\n        mixedPieces.push(shortp);\n        mixedPieces.push(longp);\n    }\n    // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n    // will match the longer piece.\n    minPieces.sort(cmpLenRev);\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n    for (i = 0; i < 7; i++) {\n        shortPieces[i] = regexEscape(shortPieces[i]);\n        longPieces[i] = regexEscape(longPieces[i]);\n        mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n\n    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n}\n\n// FORMATTING\n\nfunction hFormat() {\n    return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n    return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\nfunction meridiem (token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n        return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n    });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// ALIASES\n\naddUnitAlias('hour', 'h');\n\n// PRIORITY\naddUnitPriority('hour', 13);\n\n// PARSING\n\nfunction matchMeridiem (isStrict, locale) {\n    return locale._meridiemParse;\n}\n\naddRegexToken('a',  matchMeridiem);\naddRegexToken('A',  matchMeridiem);\naddRegexToken('H',  match1to2);\naddRegexToken('h',  match1to2);\naddRegexToken('k',  match1to2);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\naddRegexToken('kk', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['k', 'kk'], function (input, array, config) {\n    var kInput = toInt(input);\n    array[HOUR] = kInput === 24 ? 0 : kInput;\n});\naddParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('Hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n});\naddParseToken('Hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n});\n\n// LOCALES\n\nfunction localeIsPM (input) {\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n    // Using charAt should be more compatible.\n    return ((input + '').toLowerCase().charAt(0) === 'p');\n}\n\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\nfunction localeMeridiem (hours, minutes, isLower) {\n    if (hours > 11) {\n        return isLower ? 'pm' : 'PM';\n    } else {\n        return isLower ? 'am' : 'AM';\n    }\n}\n\n\n// MOMENTS\n\n// Setting the hour should keep the time, because the user explicitly\n// specified which hour he wants. So trying to maintain the same hour (in\n// a new timezone) makes sense. Adding/subtracting hours does not follow\n// this rule.\nvar getSetHour = makeGetSet('Hours', true);\n\n// months\n// week\n// weekdays\n// meridiem\nvar baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n    relativeTime: defaultRelativeTime,\n\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n\n    week: defaultLocaleWeek,\n\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n\n    meridiemParse: defaultLocaleMeridiemParse\n};\n\n// internal storage for locale config files\nvar locales = {};\nvar localeFamilies = {};\nvar globalLocale;\n\nfunction normalizeLocale(key) {\n    return key ? key.toLowerCase().replace('_', '-') : key;\n}\n\n// pick the locale from the array\n// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\nfunction chooseLocale(names) {\n    var i = 0, j, next, locale, split;\n\n    while (i < names.length) {\n        split = normalizeLocale(names[i]).split('-');\n        j = split.length;\n        next = normalizeLocale(names[i + 1]);\n        next = next ? next.split('-') : null;\n        while (j > 0) {\n            locale = loadLocale(split.slice(0, j).join('-'));\n            if (locale) {\n                return locale;\n            }\n            if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                //the next array item is better than a shallower substring of this one\n                break;\n            }\n            j--;\n        }\n        i++;\n    }\n    return null;\n}\n\nfunction loadLocale(name) {\n    var oldLocale = null;\n    // TODO: Find a better way to register and load all the locales in Node\n    if (!locales[name] && (typeof module !== 'undefined') &&\n            module && module.exports) {\n        try {\n            oldLocale = globalLocale._abbr;\n            require('./locale/' + name);\n            // because defineLocale currently also sets the global locale, we\n            // want to undo that for lazy loaded locales\n            getSetGlobalLocale(oldLocale);\n        } catch (e) { }\n    }\n    return locales[name];\n}\n\n// This function will load locale and then set the global locale.  If\n// no arguments are passed in, it will simply return the current global\n// locale key.\nfunction getSetGlobalLocale (key, values) {\n    var data;\n    if (key) {\n        if (isUndefined(values)) {\n            data = getLocale(key);\n        }\n        else {\n            data = defineLocale(key, values);\n        }\n\n        if (data) {\n            // moment.duration._locale = moment._locale = data;\n            globalLocale = data;\n        }\n    }\n\n    return globalLocale._abbr;\n}\n\nfunction defineLocale (name, config) {\n    if (config !== null) {\n        var parentConfig = baseConfig;\n        config.abbr = name;\n        if (locales[name] != null) {\n            deprecateSimple('defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                    'an existing locale. moment.defineLocale(localeName, ' +\n                    'config) should only be used for creating a new locale ' +\n                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n            parentConfig = locales[name]._config;\n        } else if (config.parentLocale != null) {\n            if (locales[config.parentLocale] != null) {\n                parentConfig = locales[config.parentLocale]._config;\n            } else {\n                if (!localeFamilies[config.parentLocale]) {\n                    localeFamilies[config.parentLocale] = [];\n                }\n                localeFamilies[config.parentLocale].push({\n                    name: name,\n                    config: config\n                });\n                return null;\n            }\n        }\n        locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n        if (localeFamilies[name]) {\n            localeFamilies[name].forEach(function (x) {\n                defineLocale(x.name, x.config);\n            });\n        }\n\n        // backwards compat for now: also set the locale\n        // make sure we set the locale AFTER all child locales have been\n        // created, so we won't end up with the child locale set.\n        getSetGlobalLocale(name);\n\n\n        return locales[name];\n    } else {\n        // useful for testing\n        delete locales[name];\n        return null;\n    }\n}\n\nfunction updateLocale(name, config) {\n    if (config != null) {\n        var locale, parentConfig = baseConfig;\n        // MERGE\n        if (locales[name] != null) {\n            parentConfig = locales[name]._config;\n        }\n        config = mergeConfigs(parentConfig, config);\n        locale = new Locale(config);\n        locale.parentLocale = locales[name];\n        locales[name] = locale;\n\n        // backwards compat for now: also set the locale\n        getSetGlobalLocale(name);\n    } else {\n        // pass null for config to unupdate, useful for tests\n        if (locales[name] != null) {\n            if (locales[name].parentLocale != null) {\n                locales[name] = locales[name].parentLocale;\n            } else if (locales[name] != null) {\n                delete locales[name];\n            }\n        }\n    }\n    return locales[name];\n}\n\n// returns locale data\nfunction getLocale (key) {\n    var locale;\n\n    if (key && key._locale && key._locale._abbr) {\n        key = key._locale._abbr;\n    }\n\n    if (!key) {\n        return globalLocale;\n    }\n\n    if (!isArray(key)) {\n        //short-circuit everything else\n        locale = loadLocale(key);\n        if (locale) {\n            return locale;\n        }\n        key = [key];\n    }\n\n    return chooseLocale(key);\n}\n\nfunction listLocales() {\n    return keys$1(locales);\n}\n\nfunction checkOverflow (m) {\n    var overflow;\n    var a = m._a;\n\n    if (a && getParsingFlags(m).overflow === -2) {\n        overflow =\n            a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n            a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n            a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n            a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n            a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n            a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n            -1;\n\n        if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n            overflow = DATE;\n        }\n        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n            overflow = WEEK;\n        }\n        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n            overflow = WEEKDAY;\n        }\n\n        getParsingFlags(m).overflow = overflow;\n    }\n\n    return m;\n}\n\n// iso 8601 regex\n// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\nvar extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\nvar basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\nvar tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\nvar isoDates = [\n    ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n    ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n    ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n    ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n    ['YYYY-DDD', /\\d{4}-\\d{3}/],\n    ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n    ['YYYYYYMMDD', /[+-]\\d{10}/],\n    ['YYYYMMDD', /\\d{8}/],\n    // YYYYMM is NOT allowed by the standard\n    ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n    ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n    ['YYYYDDD', /\\d{7}/]\n];\n\n// iso time formats and regexes\nvar isoTimes = [\n    ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n    ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n    ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n    ['HH:mm', /\\d\\d:\\d\\d/],\n    ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n    ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n    ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n    ['HHmm', /\\d\\d\\d\\d/],\n    ['HH', /\\d\\d/]\n];\n\nvar aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n// date from iso format\nfunction configFromISO(config) {\n    var i, l,\n        string = config._i,\n        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n        allowTime, dateFormat, timeFormat, tzFormat;\n\n    if (match) {\n        getParsingFlags(config).iso = true;\n\n        for (i = 0, l = isoDates.length; i < l; i++) {\n            if (isoDates[i][1].exec(match[1])) {\n                dateFormat = isoDates[i][0];\n                allowTime = isoDates[i][2] !== false;\n                break;\n            }\n        }\n        if (dateFormat == null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[3]) {\n            for (i = 0, l = isoTimes.length; i < l; i++) {\n                if (isoTimes[i][1].exec(match[3])) {\n                    // match[2] should be 'T' or space\n                    timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                    break;\n                }\n            }\n            if (timeFormat == null) {\n                config._isValid = false;\n                return;\n            }\n        }\n        if (!allowTime && timeFormat != null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[4]) {\n            if (tzRegex.exec(match[4])) {\n                tzFormat = 'Z';\n            } else {\n                config._isValid = false;\n                return;\n            }\n        }\n        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n        configFromStringAndFormat(config);\n    } else {\n        config._isValid = false;\n    }\n}\n\n// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\nvar basicRfcRegex = /^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d?\\d\\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(?:\\d\\d)?\\d\\d\\s)(\\d\\d:\\d\\d)(\\:\\d\\d)?(\\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\\d{4}))$/;\n\n// date and time from ref 2822 format\nfunction configFromRFC2822(config) {\n    var string, match, dayFormat,\n        dateFormat, timeFormat, tzFormat;\n    var timezones = {\n        ' GMT': ' +0000',\n        ' EDT': ' -0400',\n        ' EST': ' -0500',\n        ' CDT': ' -0500',\n        ' CST': ' -0600',\n        ' MDT': ' -0600',\n        ' MST': ' -0700',\n        ' PDT': ' -0700',\n        ' PST': ' -0800'\n    };\n    var military = 'YXWVUTSRQPONZABCDEFGHIKLM';\n    var timezone, timezoneIndex;\n\n    string = config._i\n        .replace(/\\([^\\)]*\\)|[\\n\\t]/g, ' ') // Remove comments and folding whitespace\n        .replace(/(\\s\\s+)/g, ' ') // Replace multiple-spaces with a single space\n        .replace(/^\\s|\\s$/g, ''); // Remove leading and trailing spaces\n    match = basicRfcRegex.exec(string);\n\n    if (match) {\n        dayFormat = match[1] ? 'ddd' + ((match[1].length === 5) ? ', ' : ' ') : '';\n        dateFormat = 'D MMM ' + ((match[2].length > 10) ? 'YYYY ' : 'YY ');\n        timeFormat = 'HH:mm' + (match[4] ? ':ss' : '');\n\n        // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n        if (match[1]) { // day of week given\n            var momentDate = new Date(match[2]);\n            var momentDay = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()];\n\n            if (match[1].substr(0,3) !== momentDay) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return;\n            }\n        }\n\n        switch (match[5].length) {\n            case 2: // military\n                if (timezoneIndex === 0) {\n                    timezone = ' +0000';\n                } else {\n                    timezoneIndex = military.indexOf(match[5][1].toUpperCase()) - 12;\n                    timezone = ((timezoneIndex < 0) ? ' -' : ' +') +\n                        (('' + timezoneIndex).replace(/^-?/, '0')).match(/..$/)[0] + '00';\n                }\n                break;\n            case 4: // Zone\n                timezone = timezones[match[5]];\n                break;\n            default: // UT or +/-9999\n                timezone = timezones[' GMT'];\n        }\n        match[5] = timezone;\n        config._i = match.splice(1).join('');\n        tzFormat = ' ZZ';\n        config._f = dayFormat + dateFormat + timeFormat + tzFormat;\n        configFromStringAndFormat(config);\n        getParsingFlags(config).rfc2822 = true;\n    } else {\n        config._isValid = false;\n    }\n}\n\n// date from iso format or fallback\nfunction configFromString(config) {\n    var matched = aspNetJsonRegex.exec(config._i);\n\n    if (matched !== null) {\n        config._d = new Date(+matched[1]);\n        return;\n    }\n\n    configFromISO(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    configFromRFC2822(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    // Final attempt, use Input Fallback\n    hooks.createFromInputFallback(config);\n}\n\nhooks.createFromInputFallback = deprecate(\n    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n    'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n    'discouraged and will be removed in an upcoming major release. Please refer to ' +\n    'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n    function (config) {\n        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n    }\n);\n\n// Pick the first defined of two or three arguments.\nfunction defaults(a, b, c) {\n    if (a != null) {\n        return a;\n    }\n    if (b != null) {\n        return b;\n    }\n    return c;\n}\n\nfunction currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n    if (config._useUTC) {\n        return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n    }\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n}\n\n// convert an array to a date.\n// the array should mirror the parameters below\n// note: all values past the year are optional and will default to the lowest possible value.\n// [year, month, day , hour, minute, second, millisecond]\nfunction configFromArray (config) {\n    var i, date, input = [], currentDate, yearToUse;\n\n    if (config._d) {\n        return;\n    }\n\n    currentDate = currentDateArray(config);\n\n    //compute day of the year from weeks and weekdays\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n        dayOfYearFromWeekInfo(config);\n    }\n\n    //if the day of the year is set, figure out what it is\n    if (config._dayOfYear != null) {\n        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n        if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n            getParsingFlags(config)._overflowDayOfYear = true;\n        }\n\n        date = createUTCDate(yearToUse, 0, config._dayOfYear);\n        config._a[MONTH] = date.getUTCMonth();\n        config._a[DATE] = date.getUTCDate();\n    }\n\n    // Default to current date.\n    // * if no year, month, day of month are given, default to today\n    // * if day of month is given, default month and year\n    // * if month is given, default only year\n    // * if year is given, don't default anything\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n        config._a[i] = input[i] = currentDate[i];\n    }\n\n    // Zero out whatever was not defaulted, including time\n    for (; i < 7; i++) {\n        config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n    }\n\n    // Check for 24:00:00.000\n    if (config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0) {\n        config._nextDay = true;\n        config._a[HOUR] = 0;\n    }\n\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n    // Apply timezone offset from input. The actual utcOffset can be changed\n    // with parseZone.\n    if (config._tzm != null) {\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n    }\n\n    if (config._nextDay) {\n        config._a[HOUR] = 24;\n    }\n}\n\nfunction dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n    w = config._w;\n    if (w.GG != null || w.W != null || w.E != null) {\n        dow = 1;\n        doy = 4;\n\n        // TODO: We need to take the current isoWeekYear, but that depends on\n        // how we interpret now (local, utc, fixed offset). So create\n        // a now version of current config (take local/utc/offset flags, and\n        // create now).\n        weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n        week = defaults(w.W, 1);\n        weekday = defaults(w.E, 1);\n        if (weekday < 1 || weekday > 7) {\n            weekdayOverflow = true;\n        }\n    } else {\n        dow = config._locale._week.dow;\n        doy = config._locale._week.doy;\n\n        var curWeek = weekOfYear(createLocal(), dow, doy);\n\n        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n        // Default to current week.\n        week = defaults(w.w, curWeek.week);\n\n        if (w.d != null) {\n            // weekday -- low day numbers are considered next week\n            weekday = w.d;\n            if (weekday < 0 || weekday > 6) {\n                weekdayOverflow = true;\n            }\n        } else if (w.e != null) {\n            // local weekday -- counting starts from begining of week\n            weekday = w.e + dow;\n            if (w.e < 0 || w.e > 6) {\n                weekdayOverflow = true;\n            }\n        } else {\n            // default to begining of week\n            weekday = dow;\n        }\n    }\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n        getParsingFlags(config)._overflowWeeks = true;\n    } else if (weekdayOverflow != null) {\n        getParsingFlags(config)._overflowWeekday = true;\n    } else {\n        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n        config._a[YEAR] = temp.year;\n        config._dayOfYear = temp.dayOfYear;\n    }\n}\n\n// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// constant that refers to the RFC 2822 form\nhooks.RFC_2822 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n        configFromISO(config);\n        return;\n    }\n    if (config._f === hooks.RFC_2822) {\n        configFromRFC2822(config);\n        return;\n    }\n    config._a = [];\n    getParsingFlags(config).empty = true;\n\n    // This array is used to make a Date, either with `new Date` or `Date.UTC`\n    var string = '' + config._i,\n        i, parsedInput, tokens, token, skipped,\n        stringLength = string.length,\n        totalParsedInputLength = 0;\n\n    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n    for (i = 0; i < tokens.length; i++) {\n        token = tokens[i];\n        parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n        // console.log('token', token, 'parsedInput', parsedInput,\n        //         'regex', getParseRegexForToken(token, config));\n        if (parsedInput) {\n            skipped = string.substr(0, string.indexOf(parsedInput));\n            if (skipped.length > 0) {\n                getParsingFlags(config).unusedInput.push(skipped);\n            }\n            string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n            totalParsedInputLength += parsedInput.length;\n        }\n        // don't parse if it's not a known token\n        if (formatTokenFunctions[token]) {\n            if (parsedInput) {\n                getParsingFlags(config).empty = false;\n            }\n            else {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n            addTimeToArrayFromToken(token, parsedInput, config);\n        }\n        else if (config._strict && !parsedInput) {\n            getParsingFlags(config).unusedTokens.push(token);\n        }\n    }\n\n    // add remaining unparsed input length to the string\n    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n    if (string.length > 0) {\n        getParsingFlags(config).unusedInput.push(string);\n    }\n\n    // clear _12h flag if hour is <= 12\n    if (config._a[HOUR] <= 12 &&\n        getParsingFlags(config).bigHour === true &&\n        config._a[HOUR] > 0) {\n        getParsingFlags(config).bigHour = undefined;\n    }\n\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem;\n    // handle meridiem\n    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n    configFromArray(config);\n    checkOverflow(config);\n}\n\n\nfunction meridiemFixWrap (locale, hour, meridiem) {\n    var isPm;\n\n    if (meridiem == null) {\n        // nothing to do\n        return hour;\n    }\n    if (locale.meridiemHour != null) {\n        return locale.meridiemHour(hour, meridiem);\n    } else if (locale.isPM != null) {\n        // Fallback\n        isPm = locale.isPM(meridiem);\n        if (isPm && hour < 12) {\n            hour += 12;\n        }\n        if (!isPm && hour === 12) {\n            hour = 0;\n        }\n        return hour;\n    } else {\n        // this is not supposed to happen\n        return hour;\n    }\n}\n\n// date from string and array of format strings\nfunction configFromStringAndArray(config) {\n    var tempConfig,\n        bestMoment,\n\n        scoreToBeat,\n        i,\n        currentScore;\n\n    if (config._f.length === 0) {\n        getParsingFlags(config).invalidFormat = true;\n        config._d = new Date(NaN);\n        return;\n    }\n\n    for (i = 0; i < config._f.length; i++) {\n        currentScore = 0;\n        tempConfig = copyConfig({}, config);\n        if (config._useUTC != null) {\n            tempConfig._useUTC = config._useUTC;\n        }\n        tempConfig._f = config._f[i];\n        configFromStringAndFormat(tempConfig);\n\n        if (!isValid(tempConfig)) {\n            continue;\n        }\n\n        // if there is any input that was not parsed add a penalty for that format\n        currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n        //or tokens\n        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n        getParsingFlags(tempConfig).score = currentScore;\n\n        if (scoreToBeat == null || currentScore < scoreToBeat) {\n            scoreToBeat = currentScore;\n            bestMoment = tempConfig;\n        }\n    }\n\n    extend(config, bestMoment || tempConfig);\n}\n\nfunction configFromObject(config) {\n    if (config._d) {\n        return;\n    }\n\n    var i = normalizeObjectUnits(config._i);\n    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n        return obj && parseInt(obj, 10);\n    });\n\n    configFromArray(config);\n}\n\nfunction createFromConfig (config) {\n    var res = new Moment(checkOverflow(prepareConfig(config)));\n    if (res._nextDay) {\n        // Adding is smart enough around DST\n        res.add(1, 'd');\n        res._nextDay = undefined;\n    }\n\n    return res;\n}\n\nfunction prepareConfig (config) {\n    var input = config._i,\n        format = config._f;\n\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || (format === undefined && input === '')) {\n        return createInvalid({nullInput: true});\n    }\n\n    if (typeof input === 'string') {\n        config._i = input = config._locale.preparse(input);\n    }\n\n    if (isMoment(input)) {\n        return new Moment(checkOverflow(input));\n    } else if (isDate(input)) {\n        config._d = input;\n    } else if (isArray(format)) {\n        configFromStringAndArray(config);\n    } else if (format) {\n        configFromStringAndFormat(config);\n    }  else {\n        configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n        config._d = null;\n    }\n\n    return config;\n}\n\nfunction configFromInput(config) {\n    var input = config._i;\n    if (isUndefined(input)) {\n        config._d = new Date(hooks.now());\n    } else if (isDate(input)) {\n        config._d = new Date(input.valueOf());\n    } else if (typeof input === 'string') {\n        configFromString(config);\n    } else if (isArray(input)) {\n        config._a = map(input.slice(0), function (obj) {\n            return parseInt(obj, 10);\n        });\n        configFromArray(config);\n    } else if (isObject(input)) {\n        configFromObject(config);\n    } else if (isNumber(input)) {\n        // from milliseconds\n        config._d = new Date(input);\n    } else {\n        hooks.createFromInputFallback(config);\n    }\n}\n\nfunction createLocalOrUTC (input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (locale === true || locale === false) {\n        strict = locale;\n        locale = undefined;\n    }\n\n    if ((isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)) {\n        input = undefined;\n    }\n    // object construction must be done this way.\n    // https://github.com/moment/moment/issues/1423\n    c._isAMomentObject = true;\n    c._useUTC = c._isUTC = isUTC;\n    c._l = locale;\n    c._i = input;\n    c._f = format;\n    c._strict = strict;\n\n    return createFromConfig(c);\n}\n\nfunction createLocal (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n    'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other < this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\nvar prototypeMax = deprecate(\n    'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other > this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\n// Pick a moment m from moments so that m[fn](other) is true for all\n// other. This relies on the function fn to be transitive.\n//\n// moments should either be an array of moment objects or an array, whose\n// first element is an array of moment objects.\nfunction pickBy(fn, moments) {\n    var res, i;\n    if (moments.length === 1 && isArray(moments[0])) {\n        moments = moments[0];\n    }\n    if (!moments.length) {\n        return createLocal();\n    }\n    res = moments[0];\n    for (i = 1; i < moments.length; ++i) {\n        if (!moments[i].isValid() || moments[i][fn](res)) {\n            res = moments[i];\n        }\n    }\n    return res;\n}\n\n// TODO: Use [].sort instead?\nfunction min () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isBefore', args);\n}\n\nfunction max () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isAfter', args);\n}\n\nvar now = function () {\n    return Date.now ? Date.now() : +(new Date());\n};\n\nvar ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\nfunction isDurationValid(m) {\n    for (var key in m) {\n        if (!(ordering.indexOf(key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n            return false;\n        }\n    }\n\n    var unitHasDecimal = false;\n    for (var i = 0; i < ordering.length; ++i) {\n        if (m[ordering[i]]) {\n            if (unitHasDecimal) {\n                return false; // only allow non-integers for smallest unit\n            }\n            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                unitHasDecimal = true;\n            }\n        }\n    }\n\n    return true;\n}\n\nfunction isValid$1() {\n    return this._isValid;\n}\n\nfunction createInvalid$1() {\n    return createDuration(NaN);\n}\n\nfunction Duration (duration) {\n    var normalizedInput = normalizeObjectUnits(duration),\n        years = normalizedInput.year || 0,\n        quarters = normalizedInput.quarter || 0,\n        months = normalizedInput.month || 0,\n        weeks = normalizedInput.week || 0,\n        days = normalizedInput.day || 0,\n        hours = normalizedInput.hour || 0,\n        minutes = normalizedInput.minute || 0,\n        seconds = normalizedInput.second || 0,\n        milliseconds = normalizedInput.millisecond || 0;\n\n    this._isValid = isDurationValid(normalizedInput);\n\n    // representation for dateAddRemove\n    this._milliseconds = +milliseconds +\n        seconds * 1e3 + // 1000\n        minutes * 6e4 + // 1000 * 60\n        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n    // Because of dateAddRemove treats 24 hours as different from a\n    // day when working around DST, we need to store them separately\n    this._days = +days +\n        weeks * 7;\n    // It is impossible translate months into days without knowing\n    // which months you are are talking about, so we have to store\n    // it separately.\n    this._months = +months +\n        quarters * 3 +\n        years * 12;\n\n    this._data = {};\n\n    this._locale = getLocale();\n\n    this._bubble();\n}\n\nfunction isDuration (obj) {\n    return obj instanceof Duration;\n}\n\nfunction absRound (number) {\n    if (number < 0) {\n        return Math.round(-1 * number) * -1;\n    } else {\n        return Math.round(number);\n    }\n}\n\n// FORMATTING\n\nfunction offset (token, separator) {\n    addFormatToken(token, 0, 0, function () {\n        var offset = this.utcOffset();\n        var sign = '+';\n        if (offset < 0) {\n            offset = -offset;\n            sign = '-';\n        }\n        return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n    });\n}\n\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z',  matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['Z', 'ZZ'], function (input, array, config) {\n    config._useUTC = true;\n    config._tzm = offsetFromString(matchShortOffset, input);\n});\n\n// HELPERS\n\n// timezone chunker\n// '+10:00' > ['10',  '00']\n// '-1530'  > ['-15', '30']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher);\n\n    if (matches === null) {\n        return null;\n    }\n\n    var chunk   = matches[matches.length - 1] || [];\n    var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n    return minutes === 0 ?\n      0 :\n      parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n    var res, diff;\n    if (model._isUTC) {\n        res = model.clone();\n        diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n        // Use low-level api, because this fn is low-level api.\n        res._d.setTime(res._d.valueOf() + diff);\n        hooks.updateOffset(res, false);\n        return res;\n    } else {\n        return createLocal(input).local();\n    }\n}\n\nfunction getDateOffset (m) {\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n}\n\n// HOOKS\n\n// This function will be called whenever a moment is mutated.\n// It is intended to keep the offset in sync with the timezone.\nhooks.updateOffset = function () {};\n\n// MOMENTS\n\n// keepLocalTime = true means only change the timezone, without\n// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n// +0200, so we adjust the time as needed, to be valid.\n//\n// Keeping the time actually adds/subtracts (one hour)\n// from the actual represented time. That is why we call updateOffset\n// a second time. In case it wants us to change the offset again\n// _changeInProgress == true case, then we have to adjust, because\n// there is no such time in the given timezone.\nfunction getSetOffset (input, keepLocalTime, keepMinutes) {\n    var offset = this._offset || 0,\n        localAdjust;\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    if (input != null) {\n        if (typeof input === 'string') {\n            input = offsetFromString(matchShortOffset, input);\n            if (input === null) {\n                return this;\n            }\n        } else if (Math.abs(input) < 16 && !keepMinutes) {\n            input = input * 60;\n        }\n        if (!this._isUTC && keepLocalTime) {\n            localAdjust = getDateOffset(this);\n        }\n        this._offset = input;\n        this._isUTC = true;\n        if (localAdjust != null) {\n            this.add(localAdjust, 'm');\n        }\n        if (offset !== input) {\n            if (!keepLocalTime || this._changeInProgress) {\n                addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n            } else if (!this._changeInProgress) {\n                this._changeInProgress = true;\n                hooks.updateOffset(this, true);\n                this._changeInProgress = null;\n            }\n        }\n        return this;\n    } else {\n        return this._isUTC ? offset : getDateOffset(this);\n    }\n}\n\nfunction getSetZone (input, keepLocalTime) {\n    if (input != null) {\n        if (typeof input !== 'string') {\n            input = -input;\n        }\n\n        this.utcOffset(input, keepLocalTime);\n\n        return this;\n    } else {\n        return -this.utcOffset();\n    }\n}\n\nfunction setOffsetToUTC (keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n}\n\nfunction setOffsetToLocal (keepLocalTime) {\n    if (this._isUTC) {\n        this.utcOffset(0, keepLocalTime);\n        this._isUTC = false;\n\n        if (keepLocalTime) {\n            this.subtract(getDateOffset(this), 'm');\n        }\n    }\n    return this;\n}\n\nfunction setOffsetToParsedOffset () {\n    if (this._tzm != null) {\n        this.utcOffset(this._tzm, false, true);\n    } else if (typeof this._i === 'string') {\n        var tZone = offsetFromString(matchOffset, this._i);\n        if (tZone != null) {\n            this.utcOffset(tZone);\n        }\n        else {\n            this.utcOffset(0, true);\n        }\n    }\n    return this;\n}\n\nfunction hasAlignedHourOffset (input) {\n    if (!this.isValid()) {\n        return false;\n    }\n    input = input ? createLocal(input).utcOffset() : 0;\n\n    return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime () {\n    return (\n        this.utcOffset() > this.clone().month(0).utcOffset() ||\n        this.utcOffset() > this.clone().month(5).utcOffset()\n    );\n}\n\nfunction isDaylightSavingTimeShifted () {\n    if (!isUndefined(this._isDSTShifted)) {\n        return this._isDSTShifted;\n    }\n\n    var c = {};\n\n    copyConfig(c, this);\n    c = prepareConfig(c);\n\n    if (c._a) {\n        var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n        this._isDSTShifted = this.isValid() &&\n            compareArrays(c._a, other.toArray()) > 0;\n    } else {\n        this._isDSTShifted = false;\n    }\n\n    return this._isDSTShifted;\n}\n\nfunction isLocal () {\n    return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset () {\n    return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc () {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n// and further modified to allow for strings containing both week and day\nvar isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;\n\nfunction createDuration (input, key) {\n    var duration = input,\n        // matching against regexp is expensive, do it on demand\n        match = null,\n        sign,\n        ret,\n        diffRes;\n\n    if (isDuration(input)) {\n        duration = {\n            ms : input._milliseconds,\n            d  : input._days,\n            M  : input._months\n        };\n    } else if (isNumber(input)) {\n        duration = {};\n        if (key) {\n            duration[key] = input;\n        } else {\n            duration.milliseconds = input;\n        }\n    } else if (!!(match = aspNetRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : 1;\n        duration = {\n            y  : 0,\n            d  : toInt(match[DATE])                         * sign,\n            h  : toInt(match[HOUR])                         * sign,\n            m  : toInt(match[MINUTE])                       * sign,\n            s  : toInt(match[SECOND])                       * sign,\n            ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n        };\n    } else if (!!(match = isoRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : 1;\n        duration = {\n            y : parseIso(match[2], sign),\n            M : parseIso(match[3], sign),\n            w : parseIso(match[4], sign),\n            d : parseIso(match[5], sign),\n            h : parseIso(match[6], sign),\n            m : parseIso(match[7], sign),\n            s : parseIso(match[8], sign)\n        };\n    } else if (duration == null) {// checks for null or undefined\n        duration = {};\n    } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n        diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n        duration = {};\n        duration.ms = diffRes.milliseconds;\n        duration.M = diffRes.months;\n    }\n\n    ret = new Duration(duration);\n\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n        ret._locale = input._locale;\n    }\n\n    return ret;\n}\n\ncreateDuration.fn = Duration.prototype;\ncreateDuration.invalid = createInvalid$1;\n\nfunction parseIso (inp, sign) {\n    // We'd normally use ~~inp for this, but unfortunately it also\n    // converts floats to ints.\n    // inp may be undefined, so careful calling replace on it.\n    var res = inp && parseFloat(inp.replace(',', '.'));\n    // apply sign while we're at it\n    return (isNaN(res) ? 0 : res) * sign;\n}\n\nfunction positiveMomentsDifference(base, other) {\n    var res = {milliseconds: 0, months: 0};\n\n    res.months = other.month() - base.month() +\n        (other.year() - base.year()) * 12;\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n        --res.months;\n    }\n\n    res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n    return res;\n}\n\nfunction momentsDifference(base, other) {\n    var res;\n    if (!(base.isValid() && other.isValid())) {\n        return {milliseconds: 0, months: 0};\n    }\n\n    other = cloneWithOffset(other, base);\n    if (base.isBefore(other)) {\n        res = positiveMomentsDifference(base, other);\n    } else {\n        res = positiveMomentsDifference(other, base);\n        res.milliseconds = -res.milliseconds;\n        res.months = -res.months;\n    }\n\n    return res;\n}\n\n// TODO: remove 'name' arg after deprecation is removed\nfunction createAdder(direction, name) {\n    return function (val, period) {\n        var dur, tmp;\n        //invert the arguments, but complain about it\n        if (period !== null && !isNaN(+period)) {\n            deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n            'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n            tmp = val; val = period; period = tmp;\n        }\n\n        val = typeof val === 'string' ? +val : val;\n        dur = createDuration(val, period);\n        addSubtract(this, dur, direction);\n        return this;\n    };\n}\n\nfunction addSubtract (mom, duration, isAdding, updateOffset) {\n    var milliseconds = duration._milliseconds,\n        days = absRound(duration._days),\n        months = absRound(duration._months);\n\n    if (!mom.isValid()) {\n        // No op\n        return;\n    }\n\n    updateOffset = updateOffset == null ? true : updateOffset;\n\n    if (milliseconds) {\n        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n    if (days) {\n        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n    if (months) {\n        setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n    if (updateOffset) {\n        hooks.updateOffset(mom, days || months);\n    }\n}\n\nvar add      = createAdder(1, 'add');\nvar subtract = createAdder(-1, 'subtract');\n\nfunction getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6 ? 'sameElse' :\n            diff < -1 ? 'lastWeek' :\n            diff < 0 ? 'lastDay' :\n            diff < 1 ? 'sameDay' :\n            diff < 2 ? 'nextDay' :\n            diff < 7 ? 'nextWeek' : 'sameElse';\n}\n\nfunction calendar$1 (time, formats) {\n    // We want to compare the start of today, vs this.\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\n    var now = time || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n}\n\nfunction clone () {\n    return new Moment(this);\n}\n\nfunction isAfter (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() > localInput.valueOf();\n    } else {\n        return localInput.valueOf() < this.clone().startOf(units).valueOf();\n    }\n}\n\nfunction isBefore (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() < localInput.valueOf();\n    } else {\n        return this.clone().endOf(units).valueOf() < localInput.valueOf();\n    }\n}\n\nfunction isBetween (from, to, units, inclusivity) {\n    inclusivity = inclusivity || '()';\n    return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n        (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n}\n\nfunction isSame (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input),\n        inputMs;\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units || 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() === localInput.valueOf();\n    } else {\n        inputMs = localInput.valueOf();\n        return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n    }\n}\n\nfunction isSameOrAfter (input, units) {\n    return this.isSame(input, units) || this.isAfter(input,units);\n}\n\nfunction isSameOrBefore (input, units) {\n    return this.isSame(input, units) || this.isBefore(input,units);\n}\n\nfunction diff (input, units, asFloat) {\n    var that,\n        zoneDelta,\n        delta, output;\n\n    if (!this.isValid()) {\n        return NaN;\n    }\n\n    that = cloneWithOffset(input, this);\n\n    if (!that.isValid()) {\n        return NaN;\n    }\n\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n    units = normalizeUnits(units);\n\n    if (units === 'year' || units === 'month' || units === 'quarter') {\n        output = monthDiff(this, that);\n        if (units === 'quarter') {\n            output = output / 3;\n        } else if (units === 'year') {\n            output = output / 12;\n        }\n    } else {\n        delta = this - that;\n        output = units === 'second' ? delta / 1e3 : // 1000\n            units === 'minute' ? delta / 6e4 : // 1000 * 60\n            units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n            units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n            units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n            delta;\n    }\n    return asFloat ? output : absFloor(output);\n}\n\nfunction monthDiff (a, b) {\n    // difference in months\n    var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n        // b is in (anchor - 1 month, anchor + 1 month)\n        anchor = a.clone().add(wholeMonthDiff, 'months'),\n        anchor2, adjust;\n\n    if (b - anchor < 0) {\n        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor - anchor2);\n    } else {\n        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor2 - anchor);\n    }\n\n    //check for negative zero, return zero if negative zero\n    return -(wholeMonthDiff + adjust) || 0;\n}\n\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString () {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString() {\n    if (!this.isValid()) {\n        return null;\n    }\n    var m = this.clone().utc();\n    if (m.year() < 0 || m.year() > 9999) {\n        return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n    }\n    if (isFunction(Date.prototype.toISOString)) {\n        // native implementation is ~50x faster, use it when we can\n        return this.toDate().toISOString();\n    }\n    return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect () {\n    if (!this.isValid()) {\n        return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n    var func = 'moment';\n    var zone = '';\n    if (!this.isLocal()) {\n        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n        zone = 'Z';\n    }\n    var prefix = '[' + func + '(\""]';\n    var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n    var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    var suffix = zone + '[\"")]';\n\n    return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format (inputString) {\n    if (!inputString) {\n        inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n    }\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n}\n\nfunction from (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction fromNow (withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction toNow (withoutSuffix) {\n    return this.to(createLocal(), withoutSuffix);\n}\n\n// If passed a locale key, it will set the locale for this\n// instance.  Otherwise, it will return the locale configuration\n// variables for this instance.\nfunction locale (key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n        return this._locale._abbr;\n    } else {\n        newLocaleData = getLocale(key);\n        if (newLocaleData != null) {\n            this._locale = newLocaleData;\n        }\n        return this;\n    }\n}\n\nvar lang = deprecate(\n    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n    function (key) {\n        if (key === undefined) {\n            return this.localeData();\n        } else {\n            return this.locale(key);\n        }\n    }\n);\n\nfunction localeData () {\n    return this._locale;\n}\n\nfunction startOf (units) {\n    units = normalizeUnits(units);\n    // the following switch intentionally omits break keywords\n    // to utilize falling through the cases.\n    switch (units) {\n        case 'year':\n            this.month(0);\n            /* falls through */\n        case 'quarter':\n        case 'month':\n            this.date(1);\n            /* falls through */\n        case 'week':\n        case 'isoWeek':\n        case 'day':\n        case 'date':\n            this.hours(0);\n            /* falls through */\n        case 'hour':\n            this.minutes(0);\n            /* falls through */\n        case 'minute':\n            this.seconds(0);\n            /* falls through */\n        case 'second':\n            this.milliseconds(0);\n    }\n\n    // weeks are a special case\n    if (units === 'week') {\n        this.weekday(0);\n    }\n    if (units === 'isoWeek') {\n        this.isoWeekday(1);\n    }\n\n    // quarters are also special\n    if (units === 'quarter') {\n        this.month(Math.floor(this.month() / 3) * 3);\n    }\n\n    return this;\n}\n\nfunction endOf (units) {\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond') {\n        return this;\n    }\n\n    // 'date' is an alias for 'day', so it should be considered as such.\n    if (units === 'date') {\n        units = 'day';\n    }\n\n    return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n}\n\nfunction valueOf () {\n    return this._d.valueOf() - ((this._offset || 0) * 60000);\n}\n\nfunction unix () {\n    return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate () {\n    return new Date(this.valueOf());\n}\n\nfunction toArray () {\n    var m = this;\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n}\n\nfunction toObject () {\n    var m = this;\n    return {\n        years: m.year(),\n        months: m.month(),\n        date: m.date(),\n        hours: m.hours(),\n        minutes: m.minutes(),\n        seconds: m.seconds(),\n        milliseconds: m.milliseconds()\n    };\n}\n\nfunction toJSON () {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$2 () {\n    return isValid(this);\n}\n\nfunction parsingFlags () {\n    return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt () {\n    return getParsingFlags(this).overflow;\n}\n\nfunction creationData() {\n    return {\n        input: this._i,\n        format: this._f,\n        locale: this._locale,\n        isUTC: this._isUTC,\n        strict: this._strict\n    };\n}\n\n// FORMATTING\n\naddFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken (token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg',     'weekYear');\naddWeekYearFormatToken('ggggg',    'weekYear');\naddWeekYearFormatToken('GGGG',  'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\naddUnitAlias('weekYear', 'gg');\naddUnitAlias('isoWeekYear', 'GG');\n\n// PRIORITY\n\naddUnitPriority('weekYear', 1);\naddUnitPriority('isoWeekYear', 1);\n\n\n// PARSING\n\naddRegexToken('G',      matchSigned);\naddRegexToken('g',      matchSigned);\naddRegexToken('GG',     match1to2, match2);\naddRegexToken('gg',     match1to2, match2);\naddRegexToken('GGGG',   match1to4, match4);\naddRegexToken('gggg',   match1to4, match4);\naddRegexToken('GGGGG',  match1to6, match6);\naddRegexToken('ggggg',  match1to6, match6);\n\naddWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n    week[token.substr(0, 2)] = toInt(input);\n});\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction getSetWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy);\n}\n\nfunction getSetISOWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input, this.isoWeek(), this.isoWeekday(), 1, 4);\n}\n\nfunction getISOWeeksInYear () {\n    return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getWeeksInYear () {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n    var weeksTarget;\n    if (input == null) {\n        return weekOfYear(this, dow, doy).year;\n    } else {\n        weeksTarget = weeksInYear(input, dow, doy);\n        if (week > weeksTarget) {\n            week = weeksTarget;\n        }\n        return setWeekAll.call(this, input, week, weekday, dow, doy);\n    }\n}\n\nfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n    this.year(date.getUTCFullYear());\n    this.month(date.getUTCMonth());\n    this.date(date.getUTCDate());\n    return this;\n}\n\n// FORMATTING\n\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// ALIASES\n\naddUnitAlias('quarter', 'Q');\n\n// PRIORITY\n\naddUnitPriority('quarter', 7);\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction getSetQuarter (input) {\n    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n}\n\n// FORMATTING\n\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// ALIASES\n\naddUnitAlias('date', 'D');\n\n// PRIOROITY\naddUnitPriority('date', 9);\n\n// PARSING\n\naddRegexToken('D',  match1to2);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n    // TODO: Remove \""ordinalParse\"" fallback in next major release.\n    return isStrict ?\n      (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n      locale._dayOfMonthOrdinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0], 10);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// ALIASES\n\naddUnitAlias('dayOfYear', 'DDD');\n\n// PRIORITY\naddUnitPriority('dayOfYear', 4);\n\n// PARSING\n\naddRegexToken('DDD',  match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction getSetDayOfYear (input) {\n    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n    return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n}\n\n// FORMATTING\n\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// ALIASES\n\naddUnitAlias('minute', 'm');\n\n// PRIORITY\n\naddUnitPriority('minute', 14);\n\n// PARSING\n\naddRegexToken('m',  match1to2);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// ALIASES\n\naddUnitAlias('second', 's');\n\n// PRIORITY\n\naddUnitPriority('second', 15);\n\n// PARSING\n\naddRegexToken('s',  match1to2);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n});\n\n\n// ALIASES\n\naddUnitAlias('millisecond', 'ms');\n\n// PRIORITY\n\naddUnitPriority('millisecond', 16);\n\n// PARSING\n\naddRegexToken('S',    match1to3, match1);\naddRegexToken('SS',   match1to3, match2);\naddRegexToken('SSS',  match1to3, match3);\n\nvar token;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n}\n// MOMENTS\n\nvar getSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z',  0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr () {\n    return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName () {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add               = add;\nproto.calendar          = calendar$1;\nproto.clone             = clone;\nproto.diff              = diff;\nproto.endOf             = endOf;\nproto.format            = format;\nproto.from              = from;\nproto.fromNow           = fromNow;\nproto.to                = to;\nproto.toNow             = toNow;\nproto.get               = stringGet;\nproto.invalidAt         = invalidAt;\nproto.isAfter           = isAfter;\nproto.isBefore          = isBefore;\nproto.isBetween         = isBetween;\nproto.isSame            = isSame;\nproto.isSameOrAfter     = isSameOrAfter;\nproto.isSameOrBefore    = isSameOrBefore;\nproto.isValid           = isValid$2;\nproto.lang              = lang;\nproto.locale            = locale;\nproto.localeData        = localeData;\nproto.max               = prototypeMax;\nproto.min               = prototypeMin;\nproto.parsingFlags      = parsingFlags;\nproto.set               = stringSet;\nproto.startOf           = startOf;\nproto.subtract          = subtract;\nproto.toArray           = toArray;\nproto.toObject          = toObject;\nproto.toDate            = toDate;\nproto.toISOString       = toISOString;\nproto.inspect           = inspect;\nproto.toJSON            = toJSON;\nproto.toString          = toString;\nproto.unix              = unix;\nproto.valueOf           = valueOf;\nproto.creationData      = creationData;\n\n// Year\nproto.year       = getSetYear;\nproto.isLeapYear = getIsLeapYear;\n\n// Week Year\nproto.weekYear    = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\n\n// Quarter\nproto.quarter = proto.quarters = getSetQuarter;\n\n// Month\nproto.month       = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\n\n// Week\nproto.week           = proto.weeks        = getSetWeek;\nproto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\nproto.weeksInYear    = getWeeksInYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\n\n// Day\nproto.date       = getSetDayOfMonth;\nproto.day        = proto.days             = getSetDayOfWeek;\nproto.weekday    = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear  = getSetDayOfYear;\n\n// Hour\nproto.hour = proto.hours = getSetHour;\n\n// Minute\nproto.minute = proto.minutes = getSetMinute;\n\n// Second\nproto.second = proto.seconds = getSetSecond;\n\n// Millisecond\nproto.millisecond = proto.milliseconds = getSetMillisecond;\n\n// Offset\nproto.utcOffset            = getSetOffset;\nproto.utc                  = setOffsetToUTC;\nproto.local                = setOffsetToLocal;\nproto.parseZone            = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST                = isDaylightSavingTime;\nproto.isLocal              = isLocal;\nproto.isUtcOffset          = isUtcOffset;\nproto.isUtc                = isUtc;\nproto.isUTC                = isUtc;\n\n// Timezone\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\n\n// Deprecations\nproto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\nproto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\nproto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\nproto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\nproto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\nfunction createUnix (input) {\n    return createLocal(input * 1000);\n}\n\nfunction createInZone () {\n    return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat (string) {\n    return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar        = calendar;\nproto$1.longDateFormat  = longDateFormat;\nproto$1.invalidDate     = invalidDate;\nproto$1.ordinal         = ordinal;\nproto$1.preparse        = preParsePostFormat;\nproto$1.postformat      = preParsePostFormat;\nproto$1.relativeTime    = relativeTime;\nproto$1.pastFuture      = pastFuture;\nproto$1.set             = set;\n\n// Month\nproto$1.months            =        localeMonths;\nproto$1.monthsShort       =        localeMonthsShort;\nproto$1.monthsParse       =        localeMonthsParse;\nproto$1.monthsRegex       = monthsRegex;\nproto$1.monthsShortRegex  = monthsShortRegex;\n\n// Week\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n// Day of Week\nproto$1.weekdays       =        localeWeekdays;\nproto$1.weekdaysMin    =        localeWeekdaysMin;\nproto$1.weekdaysShort  =        localeWeekdaysShort;\nproto$1.weekdaysParse  =        localeWeekdaysParse;\n\nproto$1.weekdaysRegex       =        weekdaysRegex;\nproto$1.weekdaysShortRegex  =        weekdaysShortRegex;\nproto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n// Hours\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1 (format, index, field, setter) {\n    var locale = getLocale();\n    var utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n}\n\nfunction listMonthsImpl (format, index, field) {\n    if (isNumber(format)) {\n        index = format;\n        format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n        return get$1(format, index, field, 'month');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 12; i++) {\n        out[i] = get$1(format, i, field, 'month');\n    }\n    return out;\n}\n\n// ()\n// (5)\n// (fmt, 5)\n// (fmt)\n// (true)\n// (true, 5)\n// (true, fmt, 5)\n// (true, fmt)\nfunction listWeekdaysImpl (localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    } else {\n        format = localeSorted;\n        index = format;\n        localeSorted = false;\n\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0;\n\n    if (index != null) {\n        return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 7; i++) {\n        out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n    return out;\n}\n\nfunction listMonths (format, index) {\n    return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort (format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (toInt(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    }\n});\n\n// Side effect imports\nhooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\nhooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\nvar mathAbs = Math.abs;\n\nfunction abs () {\n    var data           = this._data;\n\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days         = mathAbs(this._days);\n    this._months       = mathAbs(this._months);\n\n    data.milliseconds  = mathAbs(data.milliseconds);\n    data.seconds       = mathAbs(data.seconds);\n    data.minutes       = mathAbs(data.minutes);\n    data.hours         = mathAbs(data.hours);\n    data.months        = mathAbs(data.months);\n    data.years         = mathAbs(data.years);\n\n    return this;\n}\n\nfunction addSubtract$1 (duration, input, value, direction) {\n    var other = createDuration(input, value);\n\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days         += direction * other._days;\n    duration._months       += direction * other._months;\n\n    return duration._bubble();\n}\n\n// supports only 2.0-style add(1, 's') or add(duration)\nfunction add$1 (input, value) {\n    return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1 (input, value) {\n    return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil (number) {\n    if (number < 0) {\n        return Math.floor(number);\n    } else {\n        return Math.ceil(number);\n    }\n}\n\nfunction bubble () {\n    var milliseconds = this._milliseconds;\n    var days         = this._days;\n    var months       = this._months;\n    var data         = this._data;\n    var seconds, minutes, hours, years, monthsFromDays;\n\n    // if we have a mix of positive and negative values, bubble down first\n    // check: https://github.com/moment/moment/issues/2166\n    if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n            (milliseconds <= 0 && days <= 0 && months <= 0))) {\n        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n        days = 0;\n        months = 0;\n    }\n\n    // The following code bubbles up values, see the tests for\n    // examples of what that means.\n    data.milliseconds = milliseconds % 1000;\n\n    seconds           = absFloor(milliseconds / 1000);\n    data.seconds      = seconds % 60;\n\n    minutes           = absFloor(seconds / 60);\n    data.minutes      = minutes % 60;\n\n    hours             = absFloor(minutes / 60);\n    data.hours        = hours % 24;\n\n    days += absFloor(hours / 24);\n\n    // convert days to months\n    monthsFromDays = absFloor(daysToMonths(days));\n    months += monthsFromDays;\n    days -= absCeil(monthsToDays(monthsFromDays));\n\n    // 12 months -> 1 year\n    years = absFloor(months / 12);\n    months %= 12;\n\n    data.days   = days;\n    data.months = months;\n    data.years  = years;\n\n    return this;\n}\n\nfunction daysToMonths (days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    // 400 years have 12 months === 4800\n    return days * 4800 / 146097;\n}\n\nfunction monthsToDays (months) {\n    // the reverse of daysToMonths\n    return months * 146097 / 4800;\n}\n\nfunction as (units) {\n    if (!this.isValid()) {\n        return NaN;\n    }\n    var days;\n    var months;\n    var milliseconds = this._milliseconds;\n\n    units = normalizeUnits(units);\n\n    if (units === 'month' || units === 'year') {\n        days   = this._days   + milliseconds / 864e5;\n        months = this._months + daysToMonths(days);\n        return units === 'month' ? months : months / 12;\n    } else {\n        // handle milliseconds separately because of floating point math errors (issue #1867)\n        days = this._days + Math.round(monthsToDays(this._months));\n        switch (units) {\n            case 'week'   : return days / 7     + milliseconds / 6048e5;\n            case 'day'    : return days         + milliseconds / 864e5;\n            case 'hour'   : return days * 24    + milliseconds / 36e5;\n            case 'minute' : return days * 1440  + milliseconds / 6e4;\n            case 'second' : return days * 86400 + milliseconds / 1000;\n            // Math.floor prevents floating point math errors here\n            case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n            default: throw new Error('Unknown unit ' + units);\n        }\n    }\n}\n\n// TODO: Use this.as('ms')?\nfunction valueOf$1 () {\n    if (!this.isValid()) {\n        return NaN;\n    }\n    return (\n        this._milliseconds +\n        this._days * 864e5 +\n        (this._months % 12) * 2592e6 +\n        toInt(this._months / 12) * 31536e6\n    );\n}\n\nfunction makeAs (alias) {\n    return function () {\n        return this.as(alias);\n    };\n}\n\nvar asMilliseconds = makeAs('ms');\nvar asSeconds      = makeAs('s');\nvar asMinutes      = makeAs('m');\nvar asHours        = makeAs('h');\nvar asDays         = makeAs('d');\nvar asWeeks        = makeAs('w');\nvar asMonths       = makeAs('M');\nvar asYears        = makeAs('y');\n\nfunction get$2 (units) {\n    units = normalizeUnits(units);\n    return this.isValid() ? this[units + 's']() : NaN;\n}\n\nfunction makeGetter(name) {\n    return function () {\n        return this.isValid() ? this._data[name] : NaN;\n    };\n}\n\nvar milliseconds = makeGetter('milliseconds');\nvar seconds      = makeGetter('seconds');\nvar minutes      = makeGetter('minutes');\nvar hours        = makeGetter('hours');\nvar days         = makeGetter('days');\nvar months       = makeGetter('months');\nvar years        = makeGetter('years');\n\nfunction weeks () {\n    return absFloor(this.days() / 7);\n}\n\nvar round = Math.round;\nvar thresholds = {\n    ss: 44,         // a few seconds to seconds\n    s : 45,         // seconds to minute\n    m : 45,         // minutes to hour\n    h : 22,         // hours to day\n    d : 26,         // days to month\n    M : 11          // months to year\n};\n\n// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n    var duration = createDuration(posNegDuration).abs();\n    var seconds  = round(duration.as('s'));\n    var minutes  = round(duration.as('m'));\n    var hours    = round(duration.as('h'));\n    var days     = round(duration.as('d'));\n    var months   = round(duration.as('M'));\n    var years    = round(duration.as('y'));\n\n    var a = seconds <= thresholds.ss && ['s', seconds]  ||\n            seconds < thresholds.s   && ['ss', seconds] ||\n            minutes <= 1             && ['m']           ||\n            minutes < thresholds.m   && ['mm', minutes] ||\n            hours   <= 1             && ['h']           ||\n            hours   < thresholds.h   && ['hh', hours]   ||\n            days    <= 1             && ['d']           ||\n            days    < thresholds.d   && ['dd', days]    ||\n            months  <= 1             && ['M']           ||\n            months  < thresholds.M   && ['MM', months]  ||\n            years   <= 1             && ['y']           || ['yy', years];\n\n    a[2] = withoutSuffix;\n    a[3] = +posNegDuration > 0;\n    a[4] = locale;\n    return substituteTimeAgo.apply(null, a);\n}\n\n// This function allows you to set the rounding function for relative time strings\nfunction getSetRelativeTimeRounding (roundingFunction) {\n    if (roundingFunction === undefined) {\n        return round;\n    }\n    if (typeof(roundingFunction) === 'function') {\n        round = roundingFunction;\n        return true;\n    }\n    return false;\n}\n\n// This function allows you to set a threshold for relative time strings\nfunction getSetRelativeTimeThreshold (threshold, limit) {\n    if (thresholds[threshold] === undefined) {\n        return false;\n    }\n    if (limit === undefined) {\n        return thresholds[threshold];\n    }\n    thresholds[threshold] = limit;\n    if (threshold === 's') {\n        thresholds.ss = limit - 1;\n    }\n    return true;\n}\n\nfunction humanize (withSuffix) {\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var locale = this.localeData();\n    var output = relativeTime$1(this, !withSuffix, locale);\n\n    if (withSuffix) {\n        output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction toISOString$1() {\n    // for ISO strings we do not use the normal bubbling rules:\n    //  * milliseconds bubble up until they become hours\n    //  * days do not bubble at all\n    //  * months bubble up until they become years\n    // This is because there is no context-free conversion between hours and days\n    // (think of clock changes)\n    // and also not between days and months (28-31 days per month)\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var seconds = abs$1(this._milliseconds) / 1000;\n    var days         = abs$1(this._days);\n    var months       = abs$1(this._months);\n    var minutes, hours, years;\n\n    // 3600 seconds -> 60 minutes -> 1 hour\n    minutes           = absFloor(seconds / 60);\n    hours             = absFloor(minutes / 60);\n    seconds %= 60;\n    minutes %= 60;\n\n    // 12 months -> 1 year\n    years  = absFloor(months / 12);\n    months %= 12;\n\n\n    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n    var Y = years;\n    var M = months;\n    var D = days;\n    var h = hours;\n    var m = minutes;\n    var s = seconds;\n    var total = this.asSeconds();\n\n    if (!total) {\n        // this is the same as C#'s (Noda) and python (isodate)...\n        // but not other JS (goog.date)\n        return 'P0D';\n    }\n\n    return (total < 0 ? '-' : '') +\n        'P' +\n        (Y ? Y + 'Y' : '') +\n        (M ? M + 'M' : '') +\n        (D ? D + 'D' : '') +\n        ((h || m || s) ? 'T' : '') +\n        (h ? h + 'H' : '') +\n        (m ? m + 'M' : '') +\n        (s ? s + 'S' : '');\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.isValid        = isValid$1;\nproto$2.abs            = abs;\nproto$2.add            = add$1;\nproto$2.subtract       = subtract$1;\nproto$2.as             = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds      = asSeconds;\nproto$2.asMinutes      = asMinutes;\nproto$2.asHours        = asHours;\nproto$2.asDays         = asDays;\nproto$2.asWeeks        = asWeeks;\nproto$2.asMonths       = asMonths;\nproto$2.asYears        = asYears;\nproto$2.valueOf        = valueOf$1;\nproto$2._bubble        = bubble;\nproto$2.get            = get$2;\nproto$2.milliseconds   = milliseconds;\nproto$2.seconds        = seconds;\nproto$2.minutes        = minutes;\nproto$2.hours          = hours;\nproto$2.days           = days;\nproto$2.weeks          = weeks;\nproto$2.months         = months;\nproto$2.years          = years;\nproto$2.humanize       = humanize;\nproto$2.toISOString    = toISOString$1;\nproto$2.toString       = toISOString$1;\nproto$2.toJSON         = toISOString$1;\nproto$2.locale         = locale;\nproto$2.localeData     = localeData;\n\n// Deprecations\nproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\nproto$2.lang = lang;\n\n// Side effect imports\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input, 10) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n});\n\n// Side effect imports\n\n\nhooks.version = '2.18.1';\n\nsetHookCallback(createLocal);\n\nhooks.fn                    = proto;\nhooks.min                   = min;\nhooks.max                   = max;\nhooks.now                   = now;\nhooks.utc                   = createUTC;\nhooks.unix                  = createUnix;\nhooks.months                = listMonths;\nhooks.isDate                = isDate;\nhooks.locale                = getSetGlobalLocale;\nhooks.invalid               = createInvalid;\nhooks.duration              = createDuration;\nhooks.isMoment              = isMoment;\nhooks.weekdays              = listWeekdays;\nhooks.parseZone             = createInZone;\nhooks.localeData            = getLocale;\nhooks.isDuration            = isDuration;\nhooks.monthsShort           = listMonthsShort;\nhooks.weekdaysMin           = listWeekdaysMin;\nhooks.defineLocale          = defineLocale;\nhooks.updateLocale          = updateLocale;\nhooks.locales               = listLocales;\nhooks.weekdaysShort         = listWeekdaysShort;\nhooks.normalizeUnits        = normalizeUnits;\nhooks.relativeTimeRounding = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat        = getCalendarFormat;\nhooks.prototype             = proto;\n\nreturn hooks;\n\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/moment/moment.js\n// module id = 28\n// module chunks = 0"",""var map = {\n\t\""./en-gb\"": 30,\n\t\""./en-gb.js\"": 30\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\""Cannot find module '\"" + req + \""'.\"") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 29;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/moment/locale en-gb\n// module id = 29\n// module chunks = 0"",""//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar enGb = moment.defineLocale('en-gb', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        m : 'a minute',\n        mm : '%d minutes',\n        h : 'an hour',\n        hh : '%d hours',\n        d : 'a day',\n        dd : '%d days',\n        M : 'a month',\n        MM : '%d months',\n        y : 'a year',\n        yy : '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enGb;\n\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/moment/locale/en-gb.js\n// module id = 30\n// module chunks = 0"",""//! moment-timezone.js\r\n//! version : 0.5.13\r\n//! Copyright (c) JS Foundation and other contributors\r\n//! license : MIT\r\n//! github.com/moment/moment-timezone\r\n\r\n(function (root, factory) {\r\n\t\""use strict\"";\r\n\r\n\t/*global define*/\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(['moment'], factory);                 // AMD\r\n\t} else if (typeof module === 'object' && module.exports) {\r\n\t\tmodule.exports = factory(require('moment')); // Node\r\n\t} else {\r\n\t\tfactory(root.moment);                        // Browser\r\n\t}\r\n}(this, function (moment) {\r\n\t\""use strict\"";\r\n\r\n\t// Do not load moment-timezone a second time.\r\n\t// if (moment.tz !== undefined) {\r\n\t// \tlogError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);\r\n\t// \treturn moment;\r\n\t// }\r\n\r\n\tvar VERSION = \""0.5.13\"",\r\n\t\tzones = {},\r\n\t\tlinks = {},\r\n\t\tnames = {},\r\n\t\tguesses = {},\r\n\t\tcachedGuess,\r\n\r\n\t\tmomentVersion = moment.version.split('.'),\r\n\t\tmajor = +momentVersion[0],\r\n\t\tminor = +momentVersion[1];\r\n\r\n\t// Moment.js version check\r\n\tif (major < 2 || (major === 2 && minor < 6)) {\r\n\t\tlogError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');\r\n\t}\r\n\r\n\t/************************************\r\n\t\tUnpacking\r\n\t************************************/\r\n\r\n\tfunction charCodeToInt(charCode) {\r\n\t\tif (charCode > 96) {\r\n\t\t\treturn charCode - 87;\r\n\t\t} else if (charCode > 64) {\r\n\t\t\treturn charCode - 29;\r\n\t\t}\r\n\t\treturn charCode - 48;\r\n\t}\r\n\r\n\tfunction unpackBase60(string) {\r\n\t\tvar i = 0,\r\n\t\t\tparts = string.split('.'),\r\n\t\t\twhole = parts[0],\r\n\t\t\tfractional = parts[1] || '',\r\n\t\t\tmultiplier = 1,\r\n\t\t\tnum,\r\n\t\t\tout = 0,\r\n\t\t\tsign = 1;\r\n\r\n\t\t// handle negative numbers\r\n\t\tif (string.charCodeAt(0) === 45) {\r\n\t\t\ti = 1;\r\n\t\t\tsign = -1;\r\n\t\t}\r\n\r\n\t\t// handle digits before the decimal\r\n\t\tfor (i; i < whole.length; i++) {\r\n\t\t\tnum = charCodeToInt(whole.charCodeAt(i));\r\n\t\t\tout = 60 * out + num;\r\n\t\t}\r\n\r\n\t\t// handle digits after the decimal\r\n\t\tfor (i = 0; i < fractional.length; i++) {\r\n\t\t\tmultiplier = multiplier / 60;\r\n\t\t\tnum = charCodeToInt(fractional.charCodeAt(i));\r\n\t\t\tout += num * multiplier;\r\n\t\t}\r\n\r\n\t\treturn out * sign;\r\n\t}\r\n\r\n\tfunction arrayToInt (array) {\r\n\t\tfor (var i = 0; i < array.length; i++) {\r\n\t\t\tarray[i] = unpackBase60(array[i]);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction intToUntil (array, length) {\r\n\t\tfor (var i = 0; i < length; i++) {\r\n\t\t\tarray[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\r\n\t\t}\r\n\r\n\t\tarray[length - 1] = Infinity;\r\n\t}\r\n\r\n\tfunction mapIndices (source, indices) {\r\n\t\tvar out = [], i;\r\n\r\n\t\tfor (i = 0; i < indices.length; i++) {\r\n\t\t\tout[i] = source[indices[i]];\r\n\t\t}\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\tfunction unpack (string) {\r\n\t\tvar data = string.split('|'),\r\n\t\t\toffsets = data[2].split(' '),\r\n\t\t\tindices = data[3].split(''),\r\n\t\t\tuntils  = data[4].split(' ');\r\n\r\n\t\tarrayToInt(offsets);\r\n\t\tarrayToInt(indices);\r\n\t\tarrayToInt(untils);\r\n\r\n\t\tintToUntil(untils, indices.length);\r\n\r\n\t\treturn {\r\n\t\t\tname       : data[0],\r\n\t\t\tabbrs      : mapIndices(data[1].split(' '), indices),\r\n\t\t\toffsets    : mapIndices(offsets, indices),\r\n\t\t\tuntils     : untils,\r\n\t\t\tpopulation : data[5] | 0\r\n\t\t};\r\n\t}\r\n\r\n\t/************************************\r\n\t\tZone object\r\n\t************************************/\r\n\r\n\tfunction Zone (packedString) {\r\n\t\tif (packedString) {\r\n\t\t\tthis._set(unpack(packedString));\r\n\t\t}\r\n\t}\r\n\r\n\tZone.prototype = {\r\n\t\t_set : function (unpacked) {\r\n\t\t\tthis.name       = unpacked.name;\r\n\t\t\tthis.abbrs      = unpacked.abbrs;\r\n\t\t\tthis.untils     = unpacked.untils;\r\n\t\t\tthis.offsets    = unpacked.offsets;\r\n\t\t\tthis.population = unpacked.population;\r\n\t\t},\r\n\r\n\t\t_index : function (timestamp) {\r\n\t\t\tvar target = +timestamp,\r\n\t\t\t\tuntils = this.untils,\r\n\t\t\t\ti;\r\n\r\n\t\t\tfor (i = 0; i < untils.length; i++) {\r\n\t\t\t\tif (target < untils[i]) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tparse : function (timestamp) {\r\n\t\t\tvar target  = +timestamp,\r\n\t\t\t\toffsets = this.offsets,\r\n\t\t\t\tuntils  = this.untils,\r\n\t\t\t\tmax     = untils.length - 1,\r\n\t\t\t\toffset, offsetNext, offsetPrev, i;\r\n\r\n\t\t\tfor (i = 0; i < max; i++) {\r\n\t\t\t\toffset     = offsets[i];\r\n\t\t\t\toffsetNext = offsets[i + 1];\r\n\t\t\t\toffsetPrev = offsets[i ? i - 1 : i];\r\n\r\n\t\t\t\tif (offset < offsetNext && tz.moveAmbiguousForward) {\r\n\t\t\t\t\toffset = offsetNext;\r\n\t\t\t\t} else if (offset > offsetPrev && tz.moveInvalidForward) {\r\n\t\t\t\t\toffset = offsetPrev;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (target < untils[i] - (offset * 60000)) {\r\n\t\t\t\t\treturn offsets[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn offsets[max];\r\n\t\t},\r\n\r\n\t\tabbr : function (mom) {\r\n\t\t\treturn this.abbrs[this._index(mom)];\r\n\t\t},\r\n\r\n\t\toffset : function (mom) {\r\n\t\t\treturn this.offsets[this._index(mom)];\r\n\t\t}\r\n\t};\r\n\r\n\t/************************************\r\n\t\tCurrent Timezone\r\n\t************************************/\r\n\r\n\tfunction OffsetAt(at) {\r\n\t\tvar timeString = at.toTimeString();\r\n\t\tvar abbr = timeString.match(/\\([a-z ]+\\)/i);\r\n\t\tif (abbr && abbr[0]) {\r\n\t\t\t// 17:56:31 GMT-0600 (CST)\r\n\t\t\t// 17:56:31 GMT-0600 (Central Standard Time)\r\n\t\t\tabbr = abbr[0].match(/[A-Z]/g);\r\n\t\t\tabbr = abbr ? abbr.join('') : undefined;\r\n\t\t} else {\r\n\t\t\t// 17:56:31 CST\r\n\t\t\t// 17:56:31 GMT+0800 (台北標準時間)\r\n\t\t\tabbr = timeString.match(/[A-Z]{3,5}/g);\r\n\t\t\tabbr = abbr ? abbr[0] : undefined;\r\n\t\t}\r\n\r\n\t\tif (abbr === 'GMT') {\r\n\t\t\tabbr = undefined;\r\n\t\t}\r\n\r\n\t\tthis.at = +at;\r\n\t\tthis.abbr = abbr;\r\n\t\tthis.offset = at.getTimezoneOffset();\r\n\t}\r\n\r\n\tfunction ZoneScore(zone) {\r\n\t\tthis.zone = zone;\r\n\t\tthis.offsetScore = 0;\r\n\t\tthis.abbrScore = 0;\r\n\t}\r\n\r\n\tZoneScore.prototype.scoreOffsetAt = function (offsetAt) {\r\n\t\tthis.offsetScore += Math.abs(this.zone.offset(offsetAt.at) - offsetAt.offset);\r\n\t\tif (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {\r\n\t\t\tthis.abbrScore++;\r\n\t\t}\r\n\t};\r\n\r\n\tfunction findChange(low, high) {\r\n\t\tvar mid, diff;\r\n\r\n\t\twhile ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {\r\n\t\t\tmid = new OffsetAt(new Date(low.at + diff));\r\n\t\t\tif (mid.offset === low.offset) {\r\n\t\t\t\tlow = mid;\r\n\t\t\t} else {\r\n\t\t\t\thigh = mid;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn low;\r\n\t}\r\n\r\n\tfunction userOffsets() {\r\n\t\tvar startYear = new Date().getFullYear() - 2,\r\n\t\t\tlast = new OffsetAt(new Date(startYear, 0, 1)),\r\n\t\t\toffsets = [last],\r\n\t\t\tchange, next, i;\r\n\r\n\t\tfor (i = 1; i < 48; i++) {\r\n\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\r\n\t\t\tif (next.offset !== last.offset) {\r\n\t\t\t\tchange = findChange(last, next);\r\n\t\t\t\toffsets.push(change);\r\n\t\t\t\toffsets.push(new OffsetAt(new Date(change.at + 6e4)));\r\n\t\t\t}\r\n\t\t\tlast = next;\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < 4; i++) {\r\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));\r\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));\r\n\t\t}\r\n\r\n\t\treturn offsets;\r\n\t}\r\n\r\n\tfunction sortZoneScores (a, b) {\r\n\t\tif (a.offsetScore !== b.offsetScore) {\r\n\t\t\treturn a.offsetScore - b.offsetScore;\r\n\t\t}\r\n\t\tif (a.abbrScore !== b.abbrScore) {\r\n\t\t\treturn a.abbrScore - b.abbrScore;\r\n\t\t}\r\n\t\treturn b.zone.population - a.zone.population;\r\n\t}\r\n\r\n\tfunction addToGuesses (name, offsets) {\r\n\t\tvar i, offset;\r\n\t\tarrayToInt(offsets);\r\n\t\tfor (i = 0; i < offsets.length; i++) {\r\n\t\t\toffset = offsets[i];\r\n\t\t\tguesses[offset] = guesses[offset] || {};\r\n\t\t\tguesses[offset][name] = true;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction guessesForUserOffsets (offsets) {\r\n\t\tvar offsetsLength = offsets.length,\r\n\t\t\tfilteredGuesses = {},\r\n\t\t\tout = [],\r\n\t\t\ti, j, guessesOffset;\r\n\r\n\t\tfor (i = 0; i < offsetsLength; i++) {\r\n\t\t\tguessesOffset = guesses[offsets[i].offset] || {};\r\n\t\t\tfor (j in guessesOffset) {\r\n\t\t\t\tif (guessesOffset.hasOwnProperty(j)) {\r\n\t\t\t\t\tfilteredGuesses[j] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i in filteredGuesses) {\r\n\t\t\tif (filteredGuesses.hasOwnProperty(i)) {\r\n\t\t\t\tout.push(names[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\tfunction rebuildGuess () {\r\n\r\n\t\t// use Intl API when available and returning valid time zone\r\n\t\ttry {\r\n\t\t\tvar intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n\t\t\tif (intlName){\r\n\t\t\t\tvar name = names[normalizeName(intlName)];\r\n\t\t\t\tif (name) {\r\n\t\t\t\t\treturn name;\r\n\t\t\t\t}\r\n\t\t\t\tlogError(\""Moment Timezone found \"" + intlName + \"" from the Intl api, but did not have that data loaded.\"");\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\t// Intl unavailable, fall back to manual guessing.\r\n\t\t}\r\n\r\n\t\tvar offsets = userOffsets(),\r\n\t\t\toffsetsLength = offsets.length,\r\n\t\t\tguesses = guessesForUserOffsets(offsets),\r\n\t\t\tzoneScores = [],\r\n\t\t\tzoneScore, i, j;\r\n\r\n\t\tfor (i = 0; i < guesses.length; i++) {\r\n\t\t\tzoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);\r\n\t\t\tfor (j = 0; j < offsetsLength; j++) {\r\n\t\t\t\tzoneScore.scoreOffsetAt(offsets[j]);\r\n\t\t\t}\r\n\t\t\tzoneScores.push(zoneScore);\r\n\t\t}\r\n\r\n\t\tzoneScores.sort(sortZoneScores);\r\n\r\n\t\treturn zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;\r\n\t}\r\n\r\n\tfunction guess (ignoreCache) {\r\n\t\tif (!cachedGuess || ignoreCache) {\r\n\t\t\tcachedGuess = rebuildGuess();\r\n\t\t}\r\n\t\treturn cachedGuess;\r\n\t}\r\n\r\n\t/************************************\r\n\t\tGlobal Methods\r\n\t************************************/\r\n\r\n\tfunction normalizeName (name) {\r\n\t\treturn (name || '').toLowerCase().replace(/\\//g, '_');\r\n\t}\r\n\r\n\tfunction addZone (packed) {\r\n\t\tvar i, name, split, normalized;\r\n\r\n\t\tif (typeof packed === \""string\"") {\r\n\t\t\tpacked = [packed];\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < packed.length; i++) {\r\n\t\t\tsplit = packed[i].split('|');\r\n\t\t\tname = split[0];\r\n\t\t\tnormalized = normalizeName(name);\r\n\t\t\tzones[normalized] = packed[i];\r\n\t\t\tnames[normalized] = name;\r\n\t\t\tif (split[5]) {\r\n\t\t\t\taddToGuesses(normalized, split[2].split(' '));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getZone (name, caller) {\r\n\t\tname = normalizeName(name);\r\n\r\n\t\tvar zone = zones[name];\r\n\t\tvar link;\r\n\r\n\t\tif (zone instanceof Zone) {\r\n\t\t\treturn zone;\r\n\t\t}\r\n\r\n\t\tif (typeof zone === 'string') {\r\n\t\t\tzone = new Zone(zone);\r\n\t\t\tzones[name] = zone;\r\n\t\t\treturn zone;\r\n\t\t}\r\n\r\n\t\t// Pass getZone to prevent recursion more than 1 level deep\r\n\t\tif (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {\r\n\t\t\tzone = zones[name] = new Zone();\r\n\t\t\tzone._set(link);\r\n\t\t\tzone.name = names[name];\r\n\t\t\treturn zone;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction getNames () {\r\n\t\tvar i, out = [];\r\n\r\n\t\tfor (i in names) {\r\n\t\t\tif (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {\r\n\t\t\t\tout.push(names[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn out.sort();\r\n\t}\r\n\r\n\tfunction addLink (aliases) {\r\n\t\tvar i, alias, normal0, normal1;\r\n\r\n\t\tif (typeof aliases === \""string\"") {\r\n\t\t\taliases = [aliases];\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < aliases.length; i++) {\r\n\t\t\talias = aliases[i].split('|');\r\n\r\n\t\t\tnormal0 = normalizeName(alias[0]);\r\n\t\t\tnormal1 = normalizeName(alias[1]);\r\n\r\n\t\t\tlinks[normal0] = normal1;\r\n\t\t\tnames[normal0] = alias[0];\r\n\r\n\t\t\tlinks[normal1] = normal0;\r\n\t\t\tnames[normal1] = alias[1];\r\n\t\t}\r\n\t}\r\n\r\n\tfunction loadData (data) {\r\n\t\taddZone(data.zones);\r\n\t\taddLink(data.links);\r\n\t\ttz.dataVersion = data.version;\r\n\t}\r\n\r\n\tfunction zoneExists (name) {\r\n\t\tif (!zoneExists.didShowError) {\r\n\t\t\tzoneExists.didShowError = true;\r\n\t\t\t\tlogError(\""moment.tz.zoneExists('\"" + name + \""') has been deprecated in favor of !moment.tz.zone('\"" + name + \""')\"");\r\n\t\t}\r\n\t\treturn !!getZone(name);\r\n\t}\r\n\r\n\tfunction needsOffset (m) {\r\n\t\treturn !!(m._a && (m._tzm === undefined));\r\n\t}\r\n\r\n\tfunction logError (message) {\r\n\t\tif (typeof console !== 'undefined' && typeof console.error === 'function') {\r\n\t\t\tconsole.error(message);\r\n\t\t}\r\n\t}\r\n\r\n\t/************************************\r\n\t\tmoment.tz namespace\r\n\t************************************/\r\n\r\n\tfunction tz (input) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 0, -1),\r\n\t\t\tname = arguments[arguments.length - 1],\r\n\t\t\tzone = getZone(name),\r\n\t\t\tout  = moment.utc.apply(null, args);\r\n\r\n\t\tif (zone && !moment.isMoment(input) && needsOffset(out)) {\r\n\t\t\tout.add(zone.parse(out), 'minutes');\r\n\t\t}\r\n\r\n\t\tout.tz(name);\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\ttz.version      = VERSION;\r\n\ttz.dataVersion  = '';\r\n\ttz._zones       = zones;\r\n\ttz._links       = links;\r\n\ttz._names       = names;\r\n\ttz.add          = addZone;\r\n\ttz.link         = addLink;\r\n\ttz.load         = loadData;\r\n\ttz.zone         = getZone;\r\n\ttz.zoneExists   = zoneExists; // deprecated in 0.1.0\r\n\ttz.guess        = guess;\r\n\ttz.names        = getNames;\r\n\ttz.Zone         = Zone;\r\n\ttz.unpack       = unpack;\r\n\ttz.unpackBase60 = unpackBase60;\r\n\ttz.needsOffset  = needsOffset;\r\n\ttz.moveInvalidForward   = true;\r\n\ttz.moveAmbiguousForward = false;\r\n\r\n\t/************************************\r\n\t\tInterface with Moment.js\r\n\t************************************/\r\n\r\n\tvar fn = moment.fn;\r\n\r\n\tmoment.tz = tz;\r\n\r\n\tmoment.defaultZone = null;\r\n\r\n\tmoment.updateOffset = function (mom, keepTime) {\r\n\t\tvar zone = moment.defaultZone,\r\n\t\t\toffset;\r\n\r\n\t\tif (mom._z === undefined) {\r\n\t\t\tif (zone && needsOffset(mom) && !mom._isUTC) {\r\n\t\t\t\tmom._d = moment.utc(mom._a)._d;\r\n\t\t\t\tmom.utc().add(zone.parse(mom), 'minutes');\r\n\t\t\t}\r\n\t\t\tmom._z = zone;\r\n\t\t}\r\n\t\tif (mom._z) {\r\n\t\t\toffset = mom._z.offset(mom);\r\n\t\t\tif (Math.abs(offset) < 16) {\r\n\t\t\t\toffset = offset / 60;\r\n\t\t\t}\r\n\t\t\tif (mom.utcOffset !== undefined) {\r\n\t\t\t\tmom.utcOffset(-offset, keepTime);\r\n\t\t\t} else {\r\n\t\t\t\tmom.zone(offset, keepTime);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tfn.tz = function (name) {\r\n\t\tif (name) {\r\n\t\t\tthis._z = getZone(name);\r\n\t\t\tif (this._z) {\r\n\t\t\t\tmoment.updateOffset(this);\r\n\t\t\t} else {\r\n\t\t\t\tlogError(\""Moment Timezone has no data for \"" + name + \"". See http://momentjs.com/timezone/docs/#/data-loading/.\"");\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (this._z) { return this._z.name; }\r\n\t};\r\n\r\n\tfunction abbrWrap (old) {\r\n\t\treturn function () {\r\n\t\t\tif (this._z) { return this._z.abbr(this); }\r\n\t\t\treturn old.call(this);\r\n\t\t};\r\n\t}\r\n\r\n\tfunction resetZoneWrap (old) {\r\n\t\treturn function () {\r\n\t\t\tthis._z = null;\r\n\t\t\treturn old.apply(this, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tfn.zoneName = abbrWrap(fn.zoneName);\r\n\tfn.zoneAbbr = abbrWrap(fn.zoneAbbr);\r\n\tfn.utc      = resetZoneWrap(fn.utc);\r\n\r\n\tmoment.tz.setDefault = function(name) {\r\n\t\tif (major < 2 || (major === 2 && minor < 9)) {\r\n\t\t\tlogError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');\r\n\t\t}\r\n\t\tmoment.defaultZone = name ? getZone(name) : null;\r\n\t\treturn moment;\r\n\t};\r\n\r\n\t// Cloning a moment should include the _z property.\r\n\tvar momentProperties = moment.momentProperties;\r\n\tif (Object.prototype.toString.call(momentProperties) === '[object Array]') {\r\n\t\t// moment 2.8.1+\r\n\t\tmomentProperties.push('_z');\r\n\t\tmomentProperties.push('_a');\r\n\t} else if (momentProperties) {\r\n\t\t// moment 2.7.0\r\n\t\tmomentProperties._z = null;\r\n\t}\r\n\r\n\tloadData({\r\n\t\t\""version\"": \""2017b\"",\r\n\t\t\""zones\"": [\r\n\t\t\t\""Africa/Abidjan|GMT|0|0||48e5\"",\r\n\t\t\t\""Africa/Khartoum|EAT|-30|0||51e5\"",\r\n\t\t\t\""Africa/Algiers|CET|-10|0||26e5\"",\r\n\t\t\t\""Africa/Lagos|WAT|-10|0||17e6\"",\r\n\t\t\t\""Africa/Maputo|CAT|-20|0||26e5\"",\r\n\t\t\t\""Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6\"",\r\n\t\t\t\""Africa/Casablanca|WET WEST|0 -10|0101010101010101010101010101010101010101010|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00|32e5\"",\r\n\t\t\t\""Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6\"",\r\n\t\t\t\""Africa/Johannesburg|SAST|-20|0||84e5\"",\r\n\t\t\t\""Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5\"",\r\n\t\t\t\""Africa/Windhoek|WAST WAT|-20 -10|01010101010101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|32e4\"",\r\n\t\t\t\""America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326\"",\r\n\t\t\t\""America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4\"",\r\n\t\t\t\""America/Santo_Domingo|AST|40|0||29e5\"",\r\n\t\t\t\""America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4\"",\r\n\t\t\t\""America/Fortaleza|-03|30|0||34e5\"",\r\n\t\t\t\""America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5\"",\r\n\t\t\t\""America/Panama|EST|50|0||15e5\"",\r\n\t\t\t\""America/Bahia|-02 -03|20 30|01|1GCq0|27e5\"",\r\n\t\t\t\""America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\"",\r\n\t\t\t\""America/Managua|CST|60|0||22e5\"",\r\n\t\t\t\""America/La_Paz|-04|40|0||19e5\"",\r\n\t\t\t\""America/Lima|-05|50|0||11e6\"",\r\n\t\t\t\""America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5\"",\r\n\t\t\t\""America/Campo_Grande|-03 -04|30 40|01010101010101010101010|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0|77e4\"",\r\n\t\t\t\""America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\"",\r\n\t\t\t\""America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5\"",\r\n\t\t\t\""America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5\"",\r\n\t\t\t\""America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\"",\r\n\t\t\t\""America/Phoenix|MST|70|0||42e5\"",\r\n\t\t\t\""America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6\"",\r\n\t\t\t\""America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6\"",\r\n\t\t\t\""America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4\"",\r\n\t\t\t\""America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\"",\r\n\t\t\t\""America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4\"",\r\n\t\t\t\""America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3\"",\r\n\t\t\t\""America/Grand_Turk|EST EDT AST|50 40 40|010101012|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2\"",\r\n\t\t\t\""America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5\"",\r\n\t\t\t\""America/Metlakatla|PST AKST AKDT|80 90 80|0121212121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2\"",\r\n\t\t\t\""America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2\"",\r\n\t\t\t\""America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5\"",\r\n\t\t\t\""America/Noronha|-02|20|0||30e2\"",\r\n\t\t\t\""America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5\"",\r\n\t\t\t\""Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\"",\r\n\t\t\t\""America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0|62e5\"",\r\n\t\t\t\""America/Sao_Paulo|-02 -03|20 30|01010101010101010101010|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0|20e6\"",\r\n\t\t\t\""Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4\"",\r\n\t\t\t\""America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4\"",\r\n\t\t\t\""Antarctica/Casey|+11 +08|-b0 -80|010|1GAF0 blz0|10\"",\r\n\t\t\t\""Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70\"",\r\n\t\t\t\""Pacific/Port_Moresby|+10|-a0|0||25e4\"",\r\n\t\t\t\""Pacific/Guadalcanal|+11|-b0|0||11e4\"",\r\n\t\t\t\""Asia/Tashkent|+05|-50|0||23e5\"",\r\n\t\t\t\""Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\"",\r\n\t\t\t\""Asia/Baghdad|+03|-30|0||66e5\"",\r\n\t\t\t\""Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40\"",\r\n\t\t\t\""Asia/Dhaka|+06|-60|0||16e6\"",\r\n\t\t\t\""Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00|25e5\"",\r\n\t\t\t\""Asia/Kamchatka|+12|-c0|0||18e4\"",\r\n\t\t\t\""Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\"",\r\n\t\t\t\""Asia/Bangkok|+07|-70|0||15e6\"",\r\n\t\t\t\""Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0\"",\r\n\t\t\t\""Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5\"",\r\n\t\t\t\""Asia/Manila|+08|-80|0||24e6\"",\r\n\t\t\t\""Asia/Kolkata|IST|-5u|0||15e6\"",\r\n\t\t\t\""Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4\"",\r\n\t\t\t\""Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5\"",\r\n\t\t\t\""Asia/Shanghai|CST|-80|0||23e6\"",\r\n\t\t\t\""Asia/Colombo|+0530|-5u|0||22e5\"",\r\n\t\t\t\""Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\"",\r\n\t\t\t\""Asia/Dili|+09|-90|0||19e4\"",\r\n\t\t\t\""Asia/Dubai|+04|-40|0||39e5\"",\r\n\t\t\t\""Asia/Famagusta|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0\"",\r\n\t\t\t\""Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|18e5\"",\r\n\t\t\t\""Asia/Hong_Kong|HKT|-80|0||73e5\"",\r\n\t\t\t\""Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3\"",\r\n\t\t\t\""Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4\"",\r\n\t\t\t\""Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\"",\r\n\t\t\t\""Asia/Jakarta|WIB|-70|0||31e6\"",\r\n\t\t\t\""Asia/Jayapura|WIT|-90|0||26e4\"",\r\n\t\t\t\""Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4\"",\r\n\t\t\t\""Asia/Kabul|+0430|-4u|0||46e5\"",\r\n\t\t\t\""Asia/Karachi|PKT|-50|0||24e6\"",\r\n\t\t\t\""Asia/Kathmandu|+0545|-5J|0||12e5\"",\r\n\t\t\t\""Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4\"",\r\n\t\t\t\""Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5\"",\r\n\t\t\t\""Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3\"",\r\n\t\t\t\""Asia/Makassar|WITA|-80|0||15e5\"",\r\n\t\t\t\""Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5\"",\r\n\t\t\t\""Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5\"",\r\n\t\t\t\""Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5\"",\r\n\t\t\t\""Asia/Pyongyang|KST KST|-90 -8u|01|1P4D0|29e5\"",\r\n\t\t\t\""Asia/Rangoon|+0630|-6u|0||48e5\"",\r\n\t\t\t\""Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4\"",\r\n\t\t\t\""Asia/Seoul|KST|-90|0||23e6\"",\r\n\t\t\t\""Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2\"",\r\n\t\t\t\""Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\"",\r\n\t\t\t\""Asia/Tokyo|JST|-90|0||38e6\"",\r\n\t\t\t\""Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5\"",\r\n\t\t\t\""Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4\"",\r\n\t\t\t\""Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5\"",\r\n\t\t\t\""Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5\"",\r\n\t\t\t\""Atlantic/Cape_Verde|-01|10|0||50e4\"",\r\n\t\t\t\""Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\"",\r\n\t\t\t\""Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\"",\r\n\t\t\t\""Australia/Brisbane|AEST|-a0|0||20e5\"",\r\n\t\t\t\""Australia/Darwin|ACST|-9u|0||12e4\"",\r\n\t\t\t\""Australia/Eucla|+0845|-8J|0||368\"",\r\n\t\t\t\""Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\"",\r\n\t\t\t\""Australia/Perth|AWST|-80|0||18e5\"",\r\n\t\t\t\""Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0|30e2\"",\r\n\t\t\t\""Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5\"",\r\n\t\t\t\""Pacific/Tahiti|-10|a0|0||18e4\"",\r\n\t\t\t\""Pacific/Niue|-11|b0|0||12e2\"",\r\n\t\t\t\""Etc/GMT+12|-12|c0|0|\"",\r\n\t\t\t\""Pacific/Galapagos|-06|60|0||25e3\"",\r\n\t\t\t\""Etc/GMT+7|-07|70|0|\"",\r\n\t\t\t\""Pacific/Pitcairn|-08|80|0||56\"",\r\n\t\t\t\""Pacific/Gambier|-09|90|0||125\"",\r\n\t\t\t\""Etc/GMT-1|+01|-10|0|\"",\r\n\t\t\t\""Pacific/Fakaofo|+13|-d0|0||483\"",\r\n\t\t\t\""Pacific/Kiritimati|+14|-e0|0||51e2\"",\r\n\t\t\t\""Etc/GMT-2|+02|-20|0|\"",\r\n\t\t\t\""Etc/UCT|UCT|0|0|\"",\r\n\t\t\t\""Etc/UTC|UTC|0|0|\"",\r\n\t\t\t\""Europe/Astrakhan|+04 +03|-40 -30|010|1N7y0 3rd0\"",\r\n\t\t\t\""Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6\"",\r\n\t\t\t\""Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4\"",\r\n\t\t\t\""Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4\"",\r\n\t\t\t\""Europe/Volgograd|+04 +03|-40 -30|01|1N7y0|10e5\"",\r\n\t\t\t\""Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6\"",\r\n\t\t\t\""Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810\"",\r\n\t\t\t\""Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4\"",\r\n\t\t\t\""Pacific/Honolulu|HST|a0|0||37e4\"",\r\n\t\t\t\""MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0\"",\r\n\t\t\t\""Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\"",\r\n\t\t\t\""Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3\"",\r\n\t\t\t\""Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4\"",\r\n\t\t\t\""Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0|88e4\"",\r\n\t\t\t\""Pacific/Guam|ChST|-a0|0||17e4\"",\r\n\t\t\t\""Pacific/Marquesas|-0930|9u|0||86e2\"",\r\n\t\t\t\""Pacific/Pago_Pago|SST|b0|0||37e2\"",\r\n\t\t\t\""Pacific/Norfolk|+1130 +11|-bu -b0|01|1PoCu|25e4\"",\r\n\t\t\t\""Pacific/Tongatapu|+13 +14|-d0 -e0|01010101010101|1S4d0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0|75e3\""\r\n\t\t],\r\n\t\t\""links\"": [\r\n\t\t\t\""Africa/Abidjan|Africa/Accra\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Bamako\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Banjul\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Bissau\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Conakry\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Dakar\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Freetown\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Lome\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Monrovia\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Nouakchott\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Ouagadougou\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Sao_Tome\"",\r\n\t\t\t\""Africa/Abidjan|Africa/Timbuktu\"",\r\n\t\t\t\""Africa/Abidjan|America/Danmarkshavn\"",\r\n\t\t\t\""Africa/Abidjan|Atlantic/Reykjavik\"",\r\n\t\t\t\""Africa/Abidjan|Atlantic/St_Helena\"",\r\n\t\t\t\""Africa/Abidjan|Etc/GMT\"",\r\n\t\t\t\""Africa/Abidjan|Etc/GMT+0\"",\r\n\t\t\t\""Africa/Abidjan|Etc/GMT-0\"",\r\n\t\t\t\""Africa/Abidjan|Etc/GMT0\"",\r\n\t\t\t\""Africa/Abidjan|Etc/Greenwich\"",\r\n\t\t\t\""Africa/Abidjan|GMT\"",\r\n\t\t\t\""Africa/Abidjan|GMT+0\"",\r\n\t\t\t\""Africa/Abidjan|GMT-0\"",\r\n\t\t\t\""Africa/Abidjan|GMT0\"",\r\n\t\t\t\""Africa/Abidjan|Greenwich\"",\r\n\t\t\t\""Africa/Abidjan|Iceland\"",\r\n\t\t\t\""Africa/Algiers|Africa/Tunis\"",\r\n\t\t\t\""Africa/Cairo|Egypt\"",\r\n\t\t\t\""Africa/Casablanca|Africa/El_Aaiun\"",\r\n\t\t\t\""Africa/Johannesburg|Africa/Maseru\"",\r\n\t\t\t\""Africa/Johannesburg|Africa/Mbabane\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Addis_Ababa\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Asmara\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Asmera\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Dar_es_Salaam\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Djibouti\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Juba\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Kampala\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Mogadishu\"",\r\n\t\t\t\""Africa/Khartoum|Africa/Nairobi\"",\r\n\t\t\t\""Africa/Khartoum|Indian/Antananarivo\"",\r\n\t\t\t\""Africa/Khartoum|Indian/Comoro\"",\r\n\t\t\t\""Africa/Khartoum|Indian/Mayotte\"",\r\n\t\t\t\""Africa/Lagos|Africa/Bangui\"",\r\n\t\t\t\""Africa/Lagos|Africa/Brazzaville\"",\r\n\t\t\t\""Africa/Lagos|Africa/Douala\"",\r\n\t\t\t\""Africa/Lagos|Africa/Kinshasa\"",\r\n\t\t\t\""Africa/Lagos|Africa/Libreville\"",\r\n\t\t\t\""Africa/Lagos|Africa/Luanda\"",\r\n\t\t\t\""Africa/Lagos|Africa/Malabo\"",\r\n\t\t\t\""Africa/Lagos|Africa/Ndjamena\"",\r\n\t\t\t\""Africa/Lagos|Africa/Niamey\"",\r\n\t\t\t\""Africa/Lagos|Africa/Porto-Novo\"",\r\n\t\t\t\""Africa/Maputo|Africa/Blantyre\"",\r\n\t\t\t\""Africa/Maputo|Africa/Bujumbura\"",\r\n\t\t\t\""Africa/Maputo|Africa/Gaborone\"",\r\n\t\t\t\""Africa/Maputo|Africa/Harare\"",\r\n\t\t\t\""Africa/Maputo|Africa/Kigali\"",\r\n\t\t\t\""Africa/Maputo|Africa/Lubumbashi\"",\r\n\t\t\t\""Africa/Maputo|Africa/Lusaka\"",\r\n\t\t\t\""Africa/Tripoli|Libya\"",\r\n\t\t\t\""America/Adak|America/Atka\"",\r\n\t\t\t\""America/Adak|US/Aleutian\"",\r\n\t\t\t\""America/Anchorage|America/Juneau\"",\r\n\t\t\t\""America/Anchorage|America/Nome\"",\r\n\t\t\t\""America/Anchorage|America/Sitka\"",\r\n\t\t\t\""America/Anchorage|America/Yakutat\"",\r\n\t\t\t\""America/Anchorage|US/Alaska\"",\r\n\t\t\t\""America/Campo_Grande|America/Cuiaba\"",\r\n\t\t\t\""America/Chicago|America/Indiana/Knox\"",\r\n\t\t\t\""America/Chicago|America/Indiana/Tell_City\"",\r\n\t\t\t\""America/Chicago|America/Knox_IN\"",\r\n\t\t\t\""America/Chicago|America/Matamoros\"",\r\n\t\t\t\""America/Chicago|America/Menominee\"",\r\n\t\t\t\""America/Chicago|America/North_Dakota/Beulah\"",\r\n\t\t\t\""America/Chicago|America/North_Dakota/Center\"",\r\n\t\t\t\""America/Chicago|America/North_Dakota/New_Salem\"",\r\n\t\t\t\""America/Chicago|America/Rainy_River\"",\r\n\t\t\t\""America/Chicago|America/Rankin_Inlet\"",\r\n\t\t\t\""America/Chicago|America/Resolute\"",\r\n\t\t\t\""America/Chicago|America/Winnipeg\"",\r\n\t\t\t\""America/Chicago|CST6CDT\"",\r\n\t\t\t\""America/Chicago|Canada/Central\"",\r\n\t\t\t\""America/Chicago|US/Central\"",\r\n\t\t\t\""America/Chicago|US/Indiana-Starke\"",\r\n\t\t\t\""America/Chihuahua|America/Mazatlan\"",\r\n\t\t\t\""America/Chihuahua|Mexico/BajaSur\"",\r\n\t\t\t\""America/Denver|America/Boise\"",\r\n\t\t\t\""America/Denver|America/Cambridge_Bay\"",\r\n\t\t\t\""America/Denver|America/Edmonton\"",\r\n\t\t\t\""America/Denver|America/Inuvik\"",\r\n\t\t\t\""America/Denver|America/Ojinaga\"",\r\n\t\t\t\""America/Denver|America/Shiprock\"",\r\n\t\t\t\""America/Denver|America/Yellowknife\"",\r\n\t\t\t\""America/Denver|Canada/Mountain\"",\r\n\t\t\t\""America/Denver|MST7MDT\"",\r\n\t\t\t\""America/Denver|Navajo\"",\r\n\t\t\t\""America/Denver|US/Mountain\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Buenos_Aires\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Catamarca\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/ComodRivadavia\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Cordoba\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Jujuy\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/La_Rioja\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Mendoza\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Rio_Gallegos\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Salta\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/San_Juan\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/San_Luis\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Tucuman\"",\r\n\t\t\t\""America/Fortaleza|America/Argentina/Ushuaia\"",\r\n\t\t\t\""America/Fortaleza|America/Belem\"",\r\n\t\t\t\""America/Fortaleza|America/Buenos_Aires\"",\r\n\t\t\t\""America/Fortaleza|America/Catamarca\"",\r\n\t\t\t\""America/Fortaleza|America/Cayenne\"",\r\n\t\t\t\""America/Fortaleza|America/Cordoba\"",\r\n\t\t\t\""America/Fortaleza|America/Jujuy\"",\r\n\t\t\t\""America/Fortaleza|America/Maceio\"",\r\n\t\t\t\""America/Fortaleza|America/Mendoza\"",\r\n\t\t\t\""America/Fortaleza|America/Paramaribo\"",\r\n\t\t\t\""America/Fortaleza|America/Recife\"",\r\n\t\t\t\""America/Fortaleza|America/Rosario\"",\r\n\t\t\t\""America/Fortaleza|America/Santarem\"",\r\n\t\t\t\""America/Fortaleza|Antarctica/Rothera\"",\r\n\t\t\t\""America/Fortaleza|Atlantic/Stanley\"",\r\n\t\t\t\""America/Fortaleza|Etc/GMT+3\"",\r\n\t\t\t\""America/Halifax|America/Glace_Bay\"",\r\n\t\t\t\""America/Halifax|America/Goose_Bay\"",\r\n\t\t\t\""America/Halifax|America/Moncton\"",\r\n\t\t\t\""America/Halifax|America/Thule\"",\r\n\t\t\t\""America/Halifax|Atlantic/Bermuda\"",\r\n\t\t\t\""America/Halifax|Canada/Atlantic\"",\r\n\t\t\t\""America/Havana|Cuba\"",\r\n\t\t\t\""America/La_Paz|America/Boa_Vista\"",\r\n\t\t\t\""America/La_Paz|America/Guyana\"",\r\n\t\t\t\""America/La_Paz|America/Manaus\"",\r\n\t\t\t\""America/La_Paz|America/Porto_Velho\"",\r\n\t\t\t\""America/La_Paz|Brazil/West\"",\r\n\t\t\t\""America/La_Paz|Etc/GMT+4\"",\r\n\t\t\t\""America/Lima|America/Bogota\"",\r\n\t\t\t\""America/Lima|America/Guayaquil\"",\r\n\t\t\t\""America/Lima|Etc/GMT+5\"",\r\n\t\t\t\""America/Los_Angeles|America/Dawson\"",\r\n\t\t\t\""America/Los_Angeles|America/Ensenada\"",\r\n\t\t\t\""America/Los_Angeles|America/Santa_Isabel\"",\r\n\t\t\t\""America/Los_Angeles|America/Tijuana\"",\r\n\t\t\t\""America/Los_Angeles|America/Vancouver\"",\r\n\t\t\t\""America/Los_Angeles|America/Whitehorse\"",\r\n\t\t\t\""America/Los_Angeles|Canada/Pacific\"",\r\n\t\t\t\""America/Los_Angeles|Canada/Yukon\"",\r\n\t\t\t\""America/Los_Angeles|Mexico/BajaNorte\"",\r\n\t\t\t\""America/Los_Angeles|PST8PDT\"",\r\n\t\t\t\""America/Los_Angeles|US/Pacific\"",\r\n\t\t\t\""America/Los_Angeles|US/Pacific-New\"",\r\n\t\t\t\""America/Managua|America/Belize\"",\r\n\t\t\t\""America/Managua|America/Costa_Rica\"",\r\n\t\t\t\""America/Managua|America/El_Salvador\"",\r\n\t\t\t\""America/Managua|America/Guatemala\"",\r\n\t\t\t\""America/Managua|America/Regina\"",\r\n\t\t\t\""America/Managua|America/Swift_Current\"",\r\n\t\t\t\""America/Managua|America/Tegucigalpa\"",\r\n\t\t\t\""America/Managua|Canada/East-Saskatchewan\"",\r\n\t\t\t\""America/Managua|Canada/Saskatchewan\"",\r\n\t\t\t\""America/Mexico_City|America/Bahia_Banderas\"",\r\n\t\t\t\""America/Mexico_City|America/Merida\"",\r\n\t\t\t\""America/Mexico_City|America/Monterrey\"",\r\n\t\t\t\""America/Mexico_City|Mexico/General\"",\r\n\t\t\t\""America/New_York|America/Detroit\"",\r\n\t\t\t\""America/New_York|America/Fort_Wayne\"",\r\n\t\t\t\""America/New_York|America/Indiana/Indianapolis\"",\r\n\t\t\t\""America/New_York|America/Indiana/Marengo\"",\r\n\t\t\t\""America/New_York|America/Indiana/Petersburg\"",\r\n\t\t\t\""America/New_York|America/Indiana/Vevay\"",\r\n\t\t\t\""America/New_York|America/Indiana/Vincennes\"",\r\n\t\t\t\""America/New_York|America/Indiana/Winamac\"",\r\n\t\t\t\""America/New_York|America/Indianapolis\"",\r\n\t\t\t\""America/New_York|America/Iqaluit\"",\r\n\t\t\t\""America/New_York|America/Kentucky/Louisville\"",\r\n\t\t\t\""America/New_York|America/Kentucky/Monticello\"",\r\n\t\t\t\""America/New_York|America/Louisville\"",\r\n\t\t\t\""America/New_York|America/Montreal\"",\r\n\t\t\t\""America/New_York|America/Nassau\"",\r\n\t\t\t\""America/New_York|America/Nipigon\"",\r\n\t\t\t\""America/New_York|America/Pangnirtung\"",\r\n\t\t\t\""America/New_York|America/Thunder_Bay\"",\r\n\t\t\t\""America/New_York|America/Toronto\"",\r\n\t\t\t\""America/New_York|Canada/Eastern\"",\r\n\t\t\t\""America/New_York|EST5EDT\"",\r\n\t\t\t\""America/New_York|US/East-Indiana\"",\r\n\t\t\t\""America/New_York|US/Eastern\"",\r\n\t\t\t\""America/New_York|US/Michigan\"",\r\n\t\t\t\""America/Noronha|Atlantic/South_Georgia\"",\r\n\t\t\t\""America/Noronha|Brazil/DeNoronha\"",\r\n\t\t\t\""America/Noronha|Etc/GMT+2\"",\r\n\t\t\t\""America/Panama|America/Atikokan\"",\r\n\t\t\t\""America/Panama|America/Cayman\"",\r\n\t\t\t\""America/Panama|America/Coral_Harbour\"",\r\n\t\t\t\""America/Panama|America/Jamaica\"",\r\n\t\t\t\""America/Panama|EST\"",\r\n\t\t\t\""America/Panama|Jamaica\"",\r\n\t\t\t\""America/Phoenix|America/Creston\"",\r\n\t\t\t\""America/Phoenix|America/Dawson_Creek\"",\r\n\t\t\t\""America/Phoenix|America/Hermosillo\"",\r\n\t\t\t\""America/Phoenix|MST\"",\r\n\t\t\t\""America/Phoenix|US/Arizona\"",\r\n\t\t\t\""America/Rio_Branco|America/Eirunepe\"",\r\n\t\t\t\""America/Rio_Branco|America/Porto_Acre\"",\r\n\t\t\t\""America/Rio_Branco|Brazil/Acre\"",\r\n\t\t\t\""America/Santiago|Chile/Continental\"",\r\n\t\t\t\""America/Santo_Domingo|America/Anguilla\"",\r\n\t\t\t\""America/Santo_Domingo|America/Antigua\"",\r\n\t\t\t\""America/Santo_Domingo|America/Aruba\"",\r\n\t\t\t\""America/Santo_Domingo|America/Barbados\"",\r\n\t\t\t\""America/Santo_Domingo|America/Blanc-Sablon\"",\r\n\t\t\t\""America/Santo_Domingo|America/Curacao\"",\r\n\t\t\t\""America/Santo_Domingo|America/Dominica\"",\r\n\t\t\t\""America/Santo_Domingo|America/Grenada\"",\r\n\t\t\t\""America/Santo_Domingo|America/Guadeloupe\"",\r\n\t\t\t\""America/Santo_Domingo|America/Kralendijk\"",\r\n\t\t\t\""America/Santo_Domingo|America/Lower_Princes\"",\r\n\t\t\t\""America/Santo_Domingo|America/Marigot\"",\r\n\t\t\t\""America/Santo_Domingo|America/Martinique\"",\r\n\t\t\t\""America/Santo_Domingo|America/Montserrat\"",\r\n\t\t\t\""America/Santo_Domingo|America/Port_of_Spain\"",\r\n\t\t\t\""America/Santo_Domingo|America/Puerto_Rico\"",\r\n\t\t\t\""America/Santo_Domingo|America/St_Barthelemy\"",\r\n\t\t\t\""America/Santo_Domingo|America/St_Kitts\"",\r\n\t\t\t\""America/Santo_Domingo|America/St_Lucia\"",\r\n\t\t\t\""America/Santo_Domingo|America/St_Thomas\"",\r\n\t\t\t\""America/Santo_Domingo|America/St_Vincent\"",\r\n\t\t\t\""America/Santo_Domingo|America/Tortola\"",\r\n\t\t\t\""America/Santo_Domingo|America/Virgin\"",\r\n\t\t\t\""America/Sao_Paulo|Brazil/East\"",\r\n\t\t\t\""America/St_Johns|Canada/Newfoundland\"",\r\n\t\t\t\""Antarctica/Palmer|America/Punta_Arenas\"",\r\n\t\t\t\""Asia/Baghdad|Antarctica/Syowa\"",\r\n\t\t\t\""Asia/Baghdad|Asia/Aden\"",\r\n\t\t\t\""Asia/Baghdad|Asia/Bahrain\"",\r\n\t\t\t\""Asia/Baghdad|Asia/Kuwait\"",\r\n\t\t\t\""Asia/Baghdad|Asia/Qatar\"",\r\n\t\t\t\""Asia/Baghdad|Asia/Riyadh\"",\r\n\t\t\t\""Asia/Baghdad|Etc/GMT-3\"",\r\n\t\t\t\""Asia/Baghdad|Europe/Minsk\"",\r\n\t\t\t\""Asia/Bangkok|Asia/Ho_Chi_Minh\"",\r\n\t\t\t\""Asia/Bangkok|Asia/Novokuznetsk\"",\r\n\t\t\t\""Asia/Bangkok|Asia/Phnom_Penh\"",\r\n\t\t\t\""Asia/Bangkok|Asia/Saigon\"",\r\n\t\t\t\""Asia/Bangkok|Asia/Vientiane\"",\r\n\t\t\t\""Asia/Bangkok|Etc/GMT-7\"",\r\n\t\t\t\""Asia/Bangkok|Indian/Christmas\"",\r\n\t\t\t\""Asia/Dhaka|Antarctica/Vostok\"",\r\n\t\t\t\""Asia/Dhaka|Asia/Almaty\"",\r\n\t\t\t\""Asia/Dhaka|Asia/Bishkek\"",\r\n\t\t\t\""Asia/Dhaka|Asia/Dacca\"",\r\n\t\t\t\""Asia/Dhaka|Asia/Kashgar\"",\r\n\t\t\t\""Asia/Dhaka|Asia/Qyzylorda\"",\r\n\t\t\t\""Asia/Dhaka|Asia/Thimbu\"",\r\n\t\t\t\""Asia/Dhaka|Asia/Thimphu\"",\r\n\t\t\t\""Asia/Dhaka|Asia/Urumqi\"",\r\n\t\t\t\""Asia/Dhaka|Etc/GMT-6\"",\r\n\t\t\t\""Asia/Dhaka|Indian/Chagos\"",\r\n\t\t\t\""Asia/Dili|Etc/GMT-9\"",\r\n\t\t\t\""Asia/Dili|Pacific/Palau\"",\r\n\t\t\t\""Asia/Dubai|Asia/Muscat\"",\r\n\t\t\t\""Asia/Dubai|Asia/Tbilisi\"",\r\n\t\t\t\""Asia/Dubai|Asia/Yerevan\"",\r\n\t\t\t\""Asia/Dubai|Etc/GMT-4\"",\r\n\t\t\t\""Asia/Dubai|Europe/Samara\"",\r\n\t\t\t\""Asia/Dubai|Indian/Mahe\"",\r\n\t\t\t\""Asia/Dubai|Indian/Mauritius\"",\r\n\t\t\t\""Asia/Dubai|Indian/Reunion\"",\r\n\t\t\t\""Asia/Gaza|Asia/Hebron\"",\r\n\t\t\t\""Asia/Hong_Kong|Hongkong\"",\r\n\t\t\t\""Asia/Jakarta|Asia/Pontianak\"",\r\n\t\t\t\""Asia/Jerusalem|Asia/Tel_Aviv\"",\r\n\t\t\t\""Asia/Jerusalem|Israel\"",\r\n\t\t\t\""Asia/Kamchatka|Asia/Anadyr\"",\r\n\t\t\t\""Asia/Kamchatka|Etc/GMT-12\"",\r\n\t\t\t\""Asia/Kamchatka|Kwajalein\"",\r\n\t\t\t\""Asia/Kamchatka|Pacific/Funafuti\"",\r\n\t\t\t\""Asia/Kamchatka|Pacific/Kwajalein\"",\r\n\t\t\t\""Asia/Kamchatka|Pacific/Majuro\"",\r\n\t\t\t\""Asia/Kamchatka|Pacific/Nauru\"",\r\n\t\t\t\""Asia/Kamchatka|Pacific/Tarawa\"",\r\n\t\t\t\""Asia/Kamchatka|Pacific/Wake\"",\r\n\t\t\t\""Asia/Kamchatka|Pacific/Wallis\"",\r\n\t\t\t\""Asia/Kathmandu|Asia/Katmandu\"",\r\n\t\t\t\""Asia/Kolkata|Asia/Calcutta\"",\r\n\t\t\t\""Asia/Makassar|Asia/Ujung_Pandang\"",\r\n\t\t\t\""Asia/Manila|Asia/Brunei\"",\r\n\t\t\t\""Asia/Manila|Asia/Kuala_Lumpur\"",\r\n\t\t\t\""Asia/Manila|Asia/Kuching\"",\r\n\t\t\t\""Asia/Manila|Asia/Singapore\"",\r\n\t\t\t\""Asia/Manila|Etc/GMT-8\"",\r\n\t\t\t\""Asia/Manila|Singapore\"",\r\n\t\t\t\""Asia/Rangoon|Asia/Yangon\"",\r\n\t\t\t\""Asia/Rangoon|Indian/Cocos\"",\r\n\t\t\t\""Asia/Seoul|ROK\"",\r\n\t\t\t\""Asia/Shanghai|Asia/Chongqing\"",\r\n\t\t\t\""Asia/Shanghai|Asia/Chungking\"",\r\n\t\t\t\""Asia/Shanghai|Asia/Harbin\"",\r\n\t\t\t\""Asia/Shanghai|Asia/Macao\"",\r\n\t\t\t\""Asia/Shanghai|Asia/Macau\"",\r\n\t\t\t\""Asia/Shanghai|Asia/Taipei\"",\r\n\t\t\t\""Asia/Shanghai|PRC\"",\r\n\t\t\t\""Asia/Shanghai|ROC\"",\r\n\t\t\t\""Asia/Tashkent|Antarctica/Mawson\"",\r\n\t\t\t\""Asia/Tashkent|Asia/Aqtau\"",\r\n\t\t\t\""Asia/Tashkent|Asia/Aqtobe\"",\r\n\t\t\t\""Asia/Tashkent|Asia/Ashgabat\"",\r\n\t\t\t\""Asia/Tashkent|Asia/Ashkhabad\"",\r\n\t\t\t\""Asia/Tashkent|Asia/Atyrau\"",\r\n\t\t\t\""Asia/Tashkent|Asia/Dushanbe\"",\r\n\t\t\t\""Asia/Tashkent|Asia/Oral\"",\r\n\t\t\t\""Asia/Tashkent|Asia/Samarkand\"",\r\n\t\t\t\""Asia/Tashkent|Etc/GMT-5\"",\r\n\t\t\t\""Asia/Tashkent|Indian/Kerguelen\"",\r\n\t\t\t\""Asia/Tashkent|Indian/Maldives\"",\r\n\t\t\t\""Asia/Tehran|Iran\"",\r\n\t\t\t\""Asia/Tokyo|Japan\"",\r\n\t\t\t\""Asia/Ulaanbaatar|Asia/Choibalsan\"",\r\n\t\t\t\""Asia/Ulaanbaatar|Asia/Ulan_Bator\"",\r\n\t\t\t\""Asia/Vladivostok|Asia/Ust-Nera\"",\r\n\t\t\t\""Asia/Yakutsk|Asia/Khandyga\"",\r\n\t\t\t\""Atlantic/Azores|America/Scoresbysund\"",\r\n\t\t\t\""Atlantic/Cape_Verde|Etc/GMT+1\"",\r\n\t\t\t\""Australia/Adelaide|Australia/Broken_Hill\"",\r\n\t\t\t\""Australia/Adelaide|Australia/South\"",\r\n\t\t\t\""Australia/Adelaide|Australia/Yancowinna\"",\r\n\t\t\t\""Australia/Brisbane|Australia/Lindeman\"",\r\n\t\t\t\""Australia/Brisbane|Australia/Queensland\"",\r\n\t\t\t\""Australia/Darwin|Australia/North\"",\r\n\t\t\t\""Australia/Lord_Howe|Australia/LHI\"",\r\n\t\t\t\""Australia/Perth|Australia/West\"",\r\n\t\t\t\""Australia/Sydney|Australia/ACT\"",\r\n\t\t\t\""Australia/Sydney|Australia/Canberra\"",\r\n\t\t\t\""Australia/Sydney|Australia/Currie\"",\r\n\t\t\t\""Australia/Sydney|Australia/Hobart\"",\r\n\t\t\t\""Australia/Sydney|Australia/Melbourne\"",\r\n\t\t\t\""Australia/Sydney|Australia/NSW\"",\r\n\t\t\t\""Australia/Sydney|Australia/Tasmania\"",\r\n\t\t\t\""Australia/Sydney|Australia/Victoria\"",\r\n\t\t\t\""Etc/UCT|UCT\"",\r\n\t\t\t\""Etc/UTC|Etc/Universal\"",\r\n\t\t\t\""Etc/UTC|Etc/Zulu\"",\r\n\t\t\t\""Etc/UTC|UTC\"",\r\n\t\t\t\""Etc/UTC|Universal\"",\r\n\t\t\t\""Etc/UTC|Zulu\"",\r\n\t\t\t\""Europe/Astrakhan|Europe/Ulyanovsk\"",\r\n\t\t\t\""Europe/Athens|Asia/Nicosia\"",\r\n\t\t\t\""Europe/Athens|EET\"",\r\n\t\t\t\""Europe/Athens|Europe/Bucharest\"",\r\n\t\t\t\""Europe/Athens|Europe/Helsinki\"",\r\n\t\t\t\""Europe/Athens|Europe/Kiev\"",\r\n\t\t\t\""Europe/Athens|Europe/Mariehamn\"",\r\n\t\t\t\""Europe/Athens|Europe/Nicosia\"",\r\n\t\t\t\""Europe/Athens|Europe/Riga\"",\r\n\t\t\t\""Europe/Athens|Europe/Sofia\"",\r\n\t\t\t\""Europe/Athens|Europe/Tallinn\"",\r\n\t\t\t\""Europe/Athens|Europe/Uzhgorod\"",\r\n\t\t\t\""Europe/Athens|Europe/Vilnius\"",\r\n\t\t\t\""Europe/Athens|Europe/Zaporozhye\"",\r\n\t\t\t\""Europe/Chisinau|Europe/Tiraspol\"",\r\n\t\t\t\""Europe/Dublin|Eire\"",\r\n\t\t\t\""Europe/Istanbul|Asia/Istanbul\"",\r\n\t\t\t\""Europe/Istanbul|Turkey\"",\r\n\t\t\t\""Europe/Lisbon|Atlantic/Canary\"",\r\n\t\t\t\""Europe/Lisbon|Atlantic/Faeroe\"",\r\n\t\t\t\""Europe/Lisbon|Atlantic/Faroe\"",\r\n\t\t\t\""Europe/Lisbon|Atlantic/Madeira\"",\r\n\t\t\t\""Europe/Lisbon|Portugal\"",\r\n\t\t\t\""Europe/Lisbon|WET\"",\r\n\t\t\t\""Europe/London|Europe/Belfast\"",\r\n\t\t\t\""Europe/London|Europe/Guernsey\"",\r\n\t\t\t\""Europe/London|Europe/Isle_of_Man\"",\r\n\t\t\t\""Europe/London|Europe/Jersey\"",\r\n\t\t\t\""Europe/London|GB\"",\r\n\t\t\t\""Europe/London|GB-Eire\"",\r\n\t\t\t\""Europe/Moscow|W-SU\"",\r\n\t\t\t\""Europe/Paris|Africa/Ceuta\"",\r\n\t\t\t\""Europe/Paris|Arctic/Longyearbyen\"",\r\n\t\t\t\""Europe/Paris|Atlantic/Jan_Mayen\"",\r\n\t\t\t\""Europe/Paris|CET\"",\r\n\t\t\t\""Europe/Paris|Europe/Amsterdam\"",\r\n\t\t\t\""Europe/Paris|Europe/Andorra\"",\r\n\t\t\t\""Europe/Paris|Europe/Belgrade\"",\r\n\t\t\t\""Europe/Paris|Europe/Berlin\"",\r\n\t\t\t\""Europe/Paris|Europe/Bratislava\"",\r\n\t\t\t\""Europe/Paris|Europe/Brussels\"",\r\n\t\t\t\""Europe/Paris|Europe/Budapest\"",\r\n\t\t\t\""Europe/Paris|Europe/Busingen\"",\r\n\t\t\t\""Europe/Paris|Europe/Copenhagen\"",\r\n\t\t\t\""Europe/Paris|Europe/Gibraltar\"",\r\n\t\t\t\""Europe/Paris|Europe/Ljubljana\"",\r\n\t\t\t\""Europe/Paris|Europe/Luxembourg\"",\r\n\t\t\t\""Europe/Paris|Europe/Madrid\"",\r\n\t\t\t\""Europe/Paris|Europe/Malta\"",\r\n\t\t\t\""Europe/Paris|Europe/Monaco\"",\r\n\t\t\t\""Europe/Paris|Europe/Oslo\"",\r\n\t\t\t\""Europe/Paris|Europe/Podgorica\"",\r\n\t\t\t\""Europe/Paris|Europe/Prague\"",\r\n\t\t\t\""Europe/Paris|Europe/Rome\"",\r\n\t\t\t\""Europe/Paris|Europe/San_Marino\"",\r\n\t\t\t\""Europe/Paris|Europe/Sarajevo\"",\r\n\t\t\t\""Europe/Paris|Europe/Skopje\"",\r\n\t\t\t\""Europe/Paris|Europe/Stockholm\"",\r\n\t\t\t\""Europe/Paris|Europe/Tirane\"",\r\n\t\t\t\""Europe/Paris|Europe/Vaduz\"",\r\n\t\t\t\""Europe/Paris|Europe/Vatican\"",\r\n\t\t\t\""Europe/Paris|Europe/Vienna\"",\r\n\t\t\t\""Europe/Paris|Europe/Warsaw\"",\r\n\t\t\t\""Europe/Paris|Europe/Zagreb\"",\r\n\t\t\t\""Europe/Paris|Europe/Zurich\"",\r\n\t\t\t\""Europe/Paris|Poland\"",\r\n\t\t\t\""Europe/Volgograd|Europe/Kirov\"",\r\n\t\t\t\""Pacific/Auckland|Antarctica/McMurdo\"",\r\n\t\t\t\""Pacific/Auckland|Antarctica/South_Pole\"",\r\n\t\t\t\""Pacific/Auckland|NZ\"",\r\n\t\t\t\""Pacific/Chatham|NZ-CHAT\"",\r\n\t\t\t\""Pacific/Easter|Chile/EasterIsland\"",\r\n\t\t\t\""Pacific/Fakaofo|Etc/GMT-13\"",\r\n\t\t\t\""Pacific/Fakaofo|Pacific/Enderbury\"",\r\n\t\t\t\""Pacific/Galapagos|Etc/GMT+6\"",\r\n\t\t\t\""Pacific/Gambier|Etc/GMT+9\"",\r\n\t\t\t\""Pacific/Guadalcanal|Antarctica/Macquarie\"",\r\n\t\t\t\""Pacific/Guadalcanal|Etc/GMT-11\"",\r\n\t\t\t\""Pacific/Guadalcanal|Pacific/Efate\"",\r\n\t\t\t\""Pacific/Guadalcanal|Pacific/Kosrae\"",\r\n\t\t\t\""Pacific/Guadalcanal|Pacific/Noumea\"",\r\n\t\t\t\""Pacific/Guadalcanal|Pacific/Pohnpei\"",\r\n\t\t\t\""Pacific/Guadalcanal|Pacific/Ponape\"",\r\n\t\t\t\""Pacific/Guam|Pacific/Saipan\"",\r\n\t\t\t\""Pacific/Honolulu|HST\"",\r\n\t\t\t\""Pacific/Honolulu|Pacific/Johnston\"",\r\n\t\t\t\""Pacific/Honolulu|US/Hawaii\"",\r\n\t\t\t\""Pacific/Kiritimati|Etc/GMT-14\"",\r\n\t\t\t\""Pacific/Niue|Etc/GMT+11\"",\r\n\t\t\t\""Pacific/Pago_Pago|Pacific/Midway\"",\r\n\t\t\t\""Pacific/Pago_Pago|Pacific/Samoa\"",\r\n\t\t\t\""Pacific/Pago_Pago|US/Samoa\"",\r\n\t\t\t\""Pacific/Pitcairn|Etc/GMT+8\"",\r\n\t\t\t\""Pacific/Port_Moresby|Antarctica/DumontDUrville\"",\r\n\t\t\t\""Pacific/Port_Moresby|Etc/GMT-10\"",\r\n\t\t\t\""Pacific/Port_Moresby|Pacific/Chuuk\"",\r\n\t\t\t\""Pacific/Port_Moresby|Pacific/Truk\"",\r\n\t\t\t\""Pacific/Port_Moresby|Pacific/Yap\"",\r\n\t\t\t\""Pacific/Tahiti|Etc/GMT+10\"",\r\n\t\t\t\""Pacific/Tahiti|Pacific/Rarotonga\""\r\n\t\t]\r\n\t});\r\n\r\n\r\n\treturn moment;\r\n}));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/moment-timezone/builds/moment-timezone-with-data-2012-2022.js\n// module id = 31\n// module chunks = 0"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../../css-loader/index.js?minimize!../../autoprefixer-loader/index.js!./fullcalendar.css\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../../style-loader/addStyles.js\"")(content, {\""singleton\"":true});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../../css-loader/index.js?minimize!../../autoprefixer-loader/index.js!./fullcalendar.css\"", function() {\n\t\t\tvar newContent = require(\""!!../../css-loader/index.js?minimize!../../autoprefixer-loader/index.js!./fullcalendar.css\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/fullcalendar/dist/fullcalendar.css\n// module id = 32\n// module chunks = 0"",""exports = module.exports = require(\""../../css-loader/lib/css-base.js\"")();\n// imports\n\n\n// module\nexports.push([module.id, \""/*!\\n * FullCalendar v3.4.0 Stylesheet\\n * Docs & License: https://fullcalendar.io/\\n * (c) 2017 Adam Shaw\\n */.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.ui-widget .fc-disabled-day{background-image:none}.fc-icon{display:inline-block;height:1em;line-height:1em;font-size:1em;text-align:center;overflow:hidden;font-family:Courier New,Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:\\\""\\\\2039\\\"";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:\\\""\\\\203A\\\"";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:\\\""\\\\AB\\\"";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:\\\""\\\\BB\\\"";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:\\\""\\\\25C4\\\"";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:\\\""\\\\25BA\\\"";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:\\\""\\\\25BC\\\"";font-size:125%;top:2%}.fc-icon-x:after{content:\\\""\\\\D7\\\"";font-size:200%;top:6%}.fc button{box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-default{background-color:#f5f5f5;background-image:linear-gradient(180deg,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px hsla(0,0%,100%,.75);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]{cursor:pointer}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{background:none;border-color:transparent;border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad;font-weight:400}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover,.ui-widget .fc-event{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-event[href]{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:\\\""\\\"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:\\\""\\\"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:\\\""\\\"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.fc-toolbar{text-align:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:gray}.fc-basic-view td.fc-week-number{text-align:center}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-slats .ui-widget-content{background:none}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event{overflow:hidden}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:\\\""\\\\A0-\\\\A0\\\""}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:\\\""=\\\""}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item:hover td{background-color:#f5f5f5}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/autoprefixer-loader!./~/fullcalendar/dist/fullcalendar.css\n// module id = 33\n// module chunks = 0"",""/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\n// css base code, injected by the css-loader\r\nmodule.exports = function() {\r\n\tvar list = [];\r\n\r\n\t// return the list of modules as css string\r\n\tlist.toString = function toString() {\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar item = this[i];\r\n\t\t\tif(item[2]) {\r\n\t\t\t\tresult.push(\""@media \"" + item[2] + \""{\"" + item[1] + \""}\"");\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(item[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result.join(\""\"");\r\n\t};\r\n\r\n\t// import a list of modules into the list\r\n\tlist.i = function(modules, mediaQuery) {\r\n\t\tif(typeof modules === \""string\"")\r\n\t\t\tmodules = [[null, modules, \""\""]];\r\n\t\tvar alreadyImportedModules = {};\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar id = this[i][0];\r\n\t\t\tif(typeof id === \""number\"")\r\n\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t}\r\n\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\tvar item = modules[i];\r\n\t\t\t// skip already imported module\r\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t//  when a module is imported multiple times with different media queries.\r\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\tif(typeof item[0] !== \""number\"" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\titem[2] = \""(\"" + item[2] + \"") and (\"" + mediaQuery + \"")\"";\r\n\t\t\t\t}\r\n\t\t\t\tlist.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn list;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader/lib/css-base.js\n// module id = 34\n// module chunks = 0"",""/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nvar stylesInDom = {},\n\tmemoize = function(fn) {\n\t\tvar memo;\n\t\treturn function () {\n\t\t\tif (typeof memo === \""undefined\"") memo = fn.apply(this, arguments);\n\t\t\treturn memo;\n\t\t};\n\t},\n\tisOldIE = memoize(function() {\n\t\treturn /msie [6-9]\\b/.test(self.navigator.userAgent.toLowerCase());\n\t}),\n\tgetHeadElement = memoize(function () {\n\t\treturn document.head || document.getElementsByTagName(\""head\"")[0];\n\t}),\n\tsingletonElement = null,\n\tsingletonCounter = 0,\n\tstyleElementsInsertedAtTop = [];\n\nmodule.exports = function(list, options) {\n\tif(typeof DEBUG !== \""undefined\"" && DEBUG) {\n\t\tif(typeof document !== \""object\"") throw new Error(\""The style-loader cannot be used in a non-browser environment\"");\n\t}\n\n\toptions = options || {};\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (typeof options.singleton === \""undefined\"") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the bottom of <head>.\n\tif (typeof options.insertAt === \""undefined\"") options.insertAt = \""bottom\"";\n\n\tvar styles = listToStyles(list);\n\taddStylesToDom(styles, options);\n\n\treturn function update(newList) {\n\t\tvar mayRemove = [];\n\t\tfor(var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\t\tfor(var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++)\n\t\t\t\t\tdomStyle.parts[j]();\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction addStylesToDom(styles, options) {\n\tfor(var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles(list) {\n\tvar styles = [];\n\tvar newStyles = {};\n\tfor(var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\t\tif(!newStyles[id])\n\t\t\tstyles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse\n\t\t\tnewStyles[id].parts.push(part);\n\t}\n\treturn styles;\n}\n\nfunction insertStyleElement(options, styleElement) {\n\tvar head = getHeadElement();\n\tvar lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\n\tif (options.insertAt === \""top\"") {\n\t\tif(!lastStyleElementInsertedAtTop) {\n\t\t\thead.insertBefore(styleElement, head.firstChild);\n\t\t} else if(lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\thead.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\thead.appendChild(styleElement);\n\t\t}\n\t\tstyleElementsInsertedAtTop.push(styleElement);\n\t} else if (options.insertAt === \""bottom\"") {\n\t\thead.appendChild(styleElement);\n\t} else {\n\t\tthrow new Error(\""Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\"");\n\t}\n}\n\nfunction removeStyleElement(styleElement) {\n\tstyleElement.parentNode.removeChild(styleElement);\n\tvar idx = styleElementsInsertedAtTop.indexOf(styleElement);\n\tif(idx >= 0) {\n\t\tstyleElementsInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement(options) {\n\tvar styleElement = document.createElement(\""style\"");\n\tstyleElement.type = \""text/css\"";\n\tinsertStyleElement(options, styleElement);\n\treturn styleElement;\n}\n\nfunction createLinkElement(options) {\n\tvar linkElement = document.createElement(\""link\"");\n\tlinkElement.rel = \""stylesheet\"";\n\tinsertStyleElement(options, linkElement);\n\treturn linkElement;\n}\n\nfunction addStyle(obj, options) {\n\tvar styleElement, update, remove;\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\t\tstyleElement = singletonElement || (singletonElement = createStyleElement(options));\n\t\tupdate = applyToSingletonTag.bind(null, styleElement, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);\n\t} else if(obj.sourceMap &&\n\t\ttypeof URL === \""function\"" &&\n\t\ttypeof URL.createObjectURL === \""function\"" &&\n\t\ttypeof URL.revokeObjectURL === \""function\"" &&\n\t\ttypeof Blob === \""function\"" &&\n\t\ttypeof btoa === \""function\"") {\n\t\tstyleElement = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, styleElement);\n\t\tremove = function() {\n\t\t\tremoveStyleElement(styleElement);\n\t\t\tif(styleElement.href)\n\t\t\t\tURL.revokeObjectURL(styleElement.href);\n\t\t};\n\t} else {\n\t\tstyleElement = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, styleElement);\n\t\tremove = function() {\n\t\t\tremoveStyleElement(styleElement);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle(newObj) {\n\t\tif(newObj) {\n\t\t\tif(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)\n\t\t\t\treturn;\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag(styleElement, index, remove, obj) {\n\tvar css = remove ? \""\"" : obj.css;\n\n\tif (styleElement.styleSheet) {\n\t\tstyleElement.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = styleElement.childNodes;\n\t\tif (childNodes[index]) styleElement.removeChild(childNodes[index]);\n\t\tif (childNodes.length) {\n\t\t\tstyleElement.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyleElement.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag(styleElement, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyleElement.setAttribute(\""media\"", media)\n\t}\n\n\tif(styleElement.styleSheet) {\n\t\tstyleElement.styleSheet.cssText = css;\n\t} else {\n\t\twhile(styleElement.firstChild) {\n\t\t\tstyleElement.removeChild(styleElement.firstChild);\n\t\t}\n\t\tstyleElement.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink(linkElement, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\tif(sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \""\\n/*# sourceMappingURL=data:application/json;base64,\"" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \"" */\"";\n\t}\n\n\tvar blob = new Blob([css], { type: \""text/css\"" });\n\n\tvar oldSrc = linkElement.href;\n\n\tlinkElement.href = URL.createObjectURL(blob);\n\n\tif(oldSrc)\n\t\tURL.revokeObjectURL(oldSrc);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/style-loader/addStyles.js\n// module id = 35\n// module chunks = 0"",""'use strict';\n\nrequire('console-polyfill');\n\n/*\n * Utily functions\n */\n\nmodule.exports = {\n\n  isFunction: function(object) {\n   return !!(object && object.constructor && object.call && object.apply);\n  },\n\n  isArray: function(object) {\n   return object && object.constructor === Array;\n  },\n\n  doCallback: function(hook, config, arg, deprecated) {\n    if(config.callbacks && this.isFunction(config.callbacks[hook])) {\n      if (deprecated) { this.logDeprecated(hook + ' callback has been replaced, please see docs'); }\n      config.callbacks[hook](arg);\n    }\n    this.logDebug(['Trigger callback \""' + hook + '\"" with arguments:', arg], config);\n  },\n\n  logDebug: function(message, config) {\n    if (config && config.debug) console.log('TimekitBooking Debug: ', message);\n  },\n\n  logError: function(message) {\n    console.warn('TimekitBooking Error: ', message);\n  },\n\n  logDeprecated: function(message) {\n    console.warn('TimekitBooking Deprecated: ', message);\n  }\n\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utils.js\n// module id = 36\n// module chunks = 0"",""// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n  'use strict';\n  if (!global.console) {\n    global.console = {};\n  }\n  var con = global.console;\n  var prop, method;\n  var dummy = function() {};\n  var properties = ['memory'];\n  var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n     'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n     'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n  while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n  while (method = methods.pop()) if (typeof con[method] !== 'function') con[method] = dummy;\n  // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 37\n// module chunks = 0"",""'use strict';\n\n/*\n * Default configuration\n */\n\nvar primary = {\n\n  targetEl: '#bookingjs',\n  name: '',\n  avatar: '',\n  autoload: true,\n  disableRemoteLoad: false,\n  disableConfirmPage: false,\n  showCredits: true,\n  goToFirstEvent: true,\n  bookingGraph: 'instant',\n  debug: false,\n  availabilityView: 'agendaWeek',\n  bookingFields: {\n    name: {\n      placeholder: 'Full name',\n      prefilled: false,\n      locked: false\n    },\n    email: {\n      placeholder: 'E-mail',\n      prefilled: false,\n      locked: false\n    },\n    comment: {\n      enabled: true,\n      placeholder: 'Comment',\n      prefilled: false,\n      required: false,\n      locked: false\n    },\n    phone: {\n      enabled: false,\n      placeholder: 'Phone number',\n      prefilled: false,\n      required: false,\n      locked: false\n    },\n    voip: {\n      enabled: false,\n      placeholder: 'Skype username',\n      prefilled: false,\n      required: false,\n      locked: false\n    },\n    location: {\n      enabled: false,\n      placeholder: 'Location',\n      prefilled: false,\n      required: false,\n      locked: false\n    }\n  },\n  timekitFindTime: {\n    future: '4 weeks',\n    length: '1 hour'\n  },\n  timekitConfig: {},\n  timekitCreateBooking: { },\n  timekitUpdateBooking: { },\n  fullCalendar: {\n    views: {\n      agenda: {\n        displayEventEnd: false\n      },\n      listing: {\n        type: 'list',\n        duration: { days: 365 / 2 },\n        listDayAltFormat: 'dddd',\n        noEventsMessage: 'No timeslots available'\n      }\n    },\n    allDaySlot: false,\n    scrollTime: '08:00:00',\n    timezone: 'local',\n    nowIndicator: true\n  },\n  localization: {\n    showTimezoneHelper: true,\n    timeDateFormat: '12h-mdy-sun',\n    strings: {\n      submitText: 'Book it',\n      successMessageTitle: 'Thanks!',\n      timezoneHelperLoading: 'Loading..',\n      timezoneHelperDifferent: 'Your timezone is %s hours %s %s (calendar shown in your local time)',\n      timezoneHelperSame: 'You are in the same timezone as %s'\n    }\n  },\n  callbacks: {}\n\n};\n\n// Preset: bookingGraph = 'instant'\nvar bookingInstant = {\n\n  timekitCreateBooking: {\n    graph: 'instant',\n    action: 'confirm',\n    event: {\n      invite: true,\n      my_rsvp: 'accepted',\n      sync_provider: true\n    }\n  },\n  localization: {\n    strings: {\n      successMessageBody: 'An invitation has been sent to: <br /> %s <br /><br /> Please accept the invitation to confirm the booking.'\n    }\n  }\n\n};\n\n// Preset: bookingGraph = 'instant_payment'\nvar bookingInstantPayment = {\n\n  timekitCreateBooking: {\n    graph: 'instant_payment',\n    action: 'tentative',\n    event: {\n      invite: true,\n      my_rsvp: 'accepted',\n      sync_provider: true\n    }\n  },\n  localization: {\n    strings: {\n      successMessageBody: \""We have received your payment and reserved your timeslot.<br /><br />Have a great day!\""\n    }\n  }\n\n};\n\n// Preset: bookingGraph = 'confirm_decline'\nvar bookingConfirmDecline = {\n\n  timekitCreateBooking: {\n    graph: 'confirm_decline',\n    action: 'create',\n    event: {\n      invite: true,\n      my_rsvp: 'accepted',\n      sync_provider: true\n    }\n  },\n  localization: {\n    strings: {\n      successMessageBody: \""We have received your request and we'll be in touch when we have reviewed it. <br /><br />Have a great day!\""\n    }\n  }\n\n};\n\n// Preset: bookingGraph = 'group_customer'\nvar bookingGroupCustomer = {\n\n  timekitCreateBooking: {\n    graph: 'group_customer',\n    action: 'create',\n  },\n  localization: {\n    strings: {\n      successMessageBody: \""Your seat has been reserved and we've sent you a confirmation by email. <br /><br />Have a great day!\""\n    }\n  }\n\n};\n\n// Preset: bookingGraph = 'group_customer_payment'\nvar bookingGroupCustomerPayment = {\n\n  timekitCreateBooking: {\n    graph: 'group_customer_payment',\n    action: 'create',\n  },\n  localization: {\n    strings: {\n      successMessageBody: \""We have received your payment and reserved a seat for you.<br /><br />Have a great day!\""\n    }\n  }\n\n};\n\n// Preset: timeDateFormat = '24h-dmy-mon'\nvar timeDateFormat24hdmymon = {\n\n  fullCalendar: {\n    timeFormat: 'HH:mm',\n    firstDay: 1,\n    views: {\n      basic: {\n        columnFormat: 'dddd D/M'\n      },\n      agenda: {\n        columnFormat: 'ddd D/M',\n        slotLabelFormat: 'HH:mm'\n      }\n    }\n  },\n  localization: {\n    bookingDateFormat: 'D. MMMM YYYY',\n    bookingTimeFormat: 'HH:mm',\n    emailTimeFormat: 'H:i'\n  }\n\n};\n\n// Preset: timeDateFormat = '12h-mdy-sun'\nvar timeDateFormat12hmdysun = {\n\n  fullCalendar: {\n    timeFormat: 'h:mma',\n    firstDay: 0,\n    views: {\n      basic: {\n        columnFormat: 'dddd M/D',\n      },\n      agenda: {\n        columnFormat: 'ddd M/D',\n        slotLabelFormat: 'h:mma'\n      }\n    },\n  },\n  localization: {\n    bookingDateFormat: 'MMMM D, YYYY',\n    bookingTimeFormat: 'h:mma',\n    emailTimeFormat: 'h:ia'\n  }\n\n};\n\n// Preset: availabilityView = 'agendaWeek'\nvar availabilityViewAgendaWeek = {\n\n  fullCalendar: {\n    header: {\n      left: '',\n      center: '',\n      right: 'today, prev, next'\n    },\n    defaultView: 'agendaWeek'\n  }\n\n}\n\n// Preset: availabilityView = 'listing'\nvar availabilityViewListing = {\n\n  fullCalendar: {\n    header: {\n      left: '',\n      center: '',\n      right: ''\n    },\n    defaultView: 'listing'\n  }\n\n}\n\n// Export objects\nmodule.exports = {\n  primary: primary,\n  presets: {\n    timeDateFormat: {\n      '24h-dmy-mon': timeDateFormat24hdmymon,\n      '12h-mdy-sun': timeDateFormat12hmdysun\n    },\n    bookingGraph: {\n      'instant': bookingInstant,\n      'instant_payment': bookingInstantPayment,\n      'confirm_decline': bookingConfirmDecline,\n      'group_customer': bookingGroupCustomer,\n      'group_customer_payment': bookingGroupCustomerPayment\n    },\n    availabilityView: {\n      'agendaWeek': availabilityViewAgendaWeek,\n      'listing': availabilityViewListing\n    }\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/defaults.js\n// module id = 38\n// module chunks = 0"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./fullcalendar.scss\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../../node_modules/style-loader/addStyles.js\"")(content, {\""singleton\"":true});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./fullcalendar.scss\"", function() {\n\t\t\tvar newContent = require(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./fullcalendar.scss\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/styles/fullcalendar.scss\n// module id = 39\n// module chunks = 0"",""exports = module.exports = require(\""../../node_modules/css-loader/lib/css-base.js\"")();\n// imports\n\n\n// module\nexports.push([module.id, \"".fc-view-container{background-color:#fbfbfb;color:#333}.fc-row.fc-widget-header{border-bottom:1px solid #ececec}.fc-row.fc-widget-header .fc-day-header{font-size:12px;font-weight:600;color:#acacac}.fc-axis{color:#acacac;font-size:.9em}.fc-state-default{text-shadow:none;box-shadow:none;background-image:none;background-color:#fff;border-color:#fff}.fc-button{text-transform:uppercase;font-weight:600;font-size:1.1em;border:0;outline:none}.fc-button:active,.fc-button:focus,.fc-button:hover,.fc-button:visited{outline:none;border:0;background-color:transparent}.fc-content-skeleton{border-top:1px solid #ddd}.fc .fc-toolbar{padding:0;margin-bottom:0;border-bottom:1px solid #ececec;min-height:48px}.fc .fc-toolbar>*>button{padding:15px 17px;height:auto;outline:0;margin-left:0;transition:opacity .2s ease;opacity:.3}.fc .fc-toolbar>*>button:hover{opacity:1}.fc .fc-toolbar>*>button.fc-state-disabled{transition:opacity 0s;opacity:0}.fc .fc-toolbar>*>button.fc-prev-button{padding-right:8px}.fc .fc-toolbar>*>button.fc-next-button{padding-left:8px}.fc .fc-toolbar>*>button .fc-icon{font-size:1.1em}.fc .fc-toolbar>.fc-right>button.fc-today-button{padding:15px 5px}.fc .fc-toolbar>.fc-right h2{font-size:13px;padding:15px 0 15px 20px;color:#333;font-weight:600}.fc-unthemed td.fc-today{background:#fff}.fc-body>tr>.fc-widget-content,.fc-head>tr>.fc-widget-header{border:0!important}.fc th{border-color:#fff;padding:5px}.fc-unthemed .fc-divider,.fc-unthemed .fc-popover .fc-header{background-color:transparent}.empty-calendar .fc-event{opacity:0}.fc-event{transition:color .2s ease,border-color .2s ease,opacity .6s ease,box-shadow .2s ease;border:none;border-left:2px solid #939393;padding:3px;background-color:#fff;border-radius:3px;color:#333;margin:1px 0;box-shadow:0 1px 2px rgba(0,0,0,.07);cursor:pointer;margin-bottom:2px;opacity:1}.fc-event-clicked,.fc-event:hover{box-shadow:0 2px 4px rgba(0,0,0,.12);border-left:3px solid #2e5bec;color:#2e5bec;font-weight:600;padding-left:2px}.fc-event .fc-content{-webkit-transform:translateX(0);transform:translateX(0);transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.fc-event:hover .fc-content{-webkit-transform:translateX(2px);transform:translateX(2px)}.fc-event .fc-bg{opacity:0}.fc-day-grid-event{padding:13px 15px;margin:1px 0 3px}.fc-day-grid-event-clicked,.fc-day-grid-event:hover{padding-left:14px}.fc-day-grid-event .fc-time,.fc-day-grid-event .fc-title{font-size:12px;font-weight:500}.fc-day-grid-event .fc-title{padding:0 5px 5px}.fc-day-grid-event-clicked .fc-time,.fc-day-grid-event-clicked .fc-title,.fc-day-grid-event:hover .fc-time,.fc-day-grid-event:hover .fc-title{font-weight:600}.fc-time-grid .fc-slats .fc-minor td{border-top-style:none}.fc-time-grid .fc-slats td{border-top-color:#fbfbfb}.fc-time-grid .fc-slats td.fc-axis{border-top-color:#ececec}.fc-time-grid-event.fc-short .fc-content{font-size:.7em;line-height:.2em}.fc-time-grid-event.fc-short .fc-time:after{content:\\\""\\\""}.fc-time-grid-event .fc-time{font-size:1.1em;padding:5px}.fc-time-grid-event .fc-title{padding:0 5px 5px;font-weight:700}.fc-unthemed .fc-divider,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ececec}.fc-agendaMonthly-view .fc-event{color:#fff}.fc-now-indicator{border-color:rgba(255,0,0,.5)}.fc-unthemed .fc-basic-view .fc-scroller{padding:5px 15px}.fc-unthemed .fc-basic-view .fc-content-skeleton{border-top:0}.fc-unthemed .fc-list-view .fc-scroller{padding:0 15px}.fc-list-view{border-width:0}.fc-list-table{width:80%;max-width:400px;margin:0 auto}.fc-unthemed .fc-list-heading td{background:transparent;border-color:transparent;font-size:1.3em;line-height:1em;padding:20px 19px 15px;font-weight:500;color:#2e5bec}.fc-unthemed .fc-list-heading td .fc-list-heading-alt{color:#acacac}.is-small .fc-unthemed .fc-list-heading td{font-size:1.1em}.fc-list-item{display:block;transition:color .2s ease,border-color .2s ease,opacity .6s ease,box-shadow .2s ease;border:none;border-left:2px solid #939393;padding:3px;background-color:#fff;border-radius:3px;color:#333;margin:1px 0;box-shadow:0 1px 2px rgba(0,0,0,.07);cursor:pointer;margin-bottom:3px;font-weight:500;font-size:12px}.fc-list-item:hover{box-shadow:0 2px 4px rgba(0,0,0,.12);border-left:3px solid #2e5bec;color:#2e5bec;font-weight:600;padding-left:2px}.fc-list-item td{background:transparent;border-color:transparent;-webkit-transform:translateX(0);transform:translateX(0);transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.fc-list-item:hover td{background:transparent;-webkit-transform:translateX(2px);transform:translateX(2px)}.fc-list-item .fc-list-item-marker{display:none}.fc-list-item .fc-list-item-time{padding-right:0;min-width:110px}.fc-list-item .fc-list-item-title a{font-weight:600}.fc-unthemed .fc-list-empty{background-color:transparent}\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/autoprefixer-loader!./~/sass-loader!./src/styles/fullcalendar.scss\n// module id = 40\n// module chunks = 0"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./utils.scss\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../../node_modules/style-loader/addStyles.js\"")(content, {\""singleton\"":true});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./utils.scss\"", function() {\n\t\t\tvar newContent = require(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./utils.scss\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/styles/utils.scss\n// module id = 41\n// module chunks = 0"",""exports = module.exports = require(\""../../node_modules/css-loader/lib/css-base.js\"")();\n// imports\n\n\n// module\nexports.push([module.id, \""@-webkit-keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes shake{0%{-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-transform:translateX(5px);transform:translateX(5px)}50%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}75%{-webkit-transform:translateX(5px);transform:translateX(5px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes shake{0%{-webkit-transform:translateX(0);transform:translateX(0)}25%{-webkit-transform:translateX(5px);transform:translateX(5px)}50%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}75%{-webkit-transform:translateX(5px);transform:translateX(5px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/autoprefixer-loader!./~/sass-loader!./src/styles/utils.scss\n// module id = 42\n// module chunks = 0"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./main.scss\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../../node_modules/style-loader/addStyles.js\"")(content, {\""singleton\"":true});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./main.scss\"", function() {\n\t\t\tvar newContent = require(\""!!../../node_modules/css-loader/index.js?minimize!../../node_modules/autoprefixer-loader/index.js!../../node_modules/sass-loader/index.js!./main.scss\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/styles/main.scss\n// module id = 43\n// module chunks = 0"",""exports = module.exports = require(\""../../node_modules/css-loader/lib/css-base.js\"")();\n// imports\nexports.push([module.id, \""@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600);\"", \""\""]);\n\n// module\nexports.push([module.id, \""/*!\\n * Booking.js\\n * http://timekit.io\\n * (c) 2015 Timekit Inc.\\n */.bookingjs{position:relative;font-family:Open Sans,Helvetica,Tahoma,Arial,sans-serif;font-size:13px;border-radius:4px;background-color:#fff;box-shadow:0 3px 40px 0 rgba(0,0,0,.15);margin:20px auto;z-index:10;opacity:1;color:#333;border-top:1px solid #ececec;min-height:200px}.bookingjs.has-avatar{margin-top:60px}.is-small.has-avatar.has-displayname .bookingjs-calendar .fc-toolbar{padding-bottom:24px}.is-small .bookingjs-calendar .fc-toolbar>.fc-right>button.fc-today-button{position:absolute;left:15px}.is-small.has-avatar .bookingjs-calendar .fc-toolbar .fc-right h2{display:none}.bookingjs-timezonehelper{color:#aeaeae;text-align:center;padding:7px 10px;background-color:#fbfbfb;border-top:1px solid #ececec;min-height:15px;z-index:20;border-radius:0 0 4px 4px}.bookingjs-timezoneicon{width:10px;margin-right:5px}.bookingjs-avatar{position:absolute;top:-50px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:150px;border:3px solid #fff;box-shadow:0 1px 3px 0 rgba(0,0,0,.13);overflow:hidden;z-index:40;background-color:#fff}.is-small .bookingjs-avatar{top:-40px}.bookingjs-avatar img{max-width:100%;vertical-align:middle;display:inline-block;width:80px;height:80px}.is-small .bookingjs-avatar img{width:70px;height:70px}.bookingjs-displayname{position:absolute;top:0;left:0;padding:15px 20px;color:#333;font-weight:600}.is-small.has-avatar .bookingjs-displayname{top:44px;padding:0 20px;text-align:center;left:0;right:0;box-sizing:border-box}.bookingjs-bookpage{position:absolute;height:100%;width:100%;top:0;left:0;background-color:#fbfbfb;z-index:30;opacity:0;transition:opacity .2s ease;border-radius:4px}.bookingjs-bookpage.show{opacity:1}.bookingjs-bookpage-close{position:absolute;top:0;right:0;padding:18px;transition:opacity .2s ease;opacity:.3}.bookingjs-bookpage-close:hover{opacity:1}.bookingjs-bookpage-date,.bookingjs-bookpage h2{text-align:center;font-size:34px;font-weight:400;margin-top:70px;margin-bottom:10px}.is-small .bookingjs-bookpage-date,.is-small .bookingjs-bookpage h2{font-size:27px;margin-top:60px}.bookingjs-bookpage-time,.bookingjs-bookpage h3{text-align:center;font-size:17px;font-weight:400;margin-bottom:50px;margin-top:10px}.is-small .bookingjs-bookpage-time,.is-small .bookingjs-bookpage h3{font-size:15px;margin-bottom:35px}.bookingjs-closeicon{height:15px;width:15px}.bookingjs-form{width:350px;position:relative;margin:0 auto;text-align:center}.is-small .bookingjs-form{width:90%}.bookingjs-form-box{position:relative;box-shadow:0 1px 3px 0 rgba(0,0,0,.1);overflow:hidden;background-color:#fff;line-height:0}.bookingjs-form-success-message{position:absolute;top:-999px;left:0;right:0;padding:30px;z-index:10;background-color:#fff;opacity:0;transition:opacity .3s ease;line-height:normal}.is-small .bookingjs-form-success-message{padding:22px 10px}.bookingjs-form-success-message .title{font-size:20px;display:block;margin-bottom:25px}.bookingjs-form-success-message .body{display:block}.bookingjs-form-success-message .body .booked-email{color:#aeaeae}.bookingjs-form.success .bookingjs-form-success-message{opacity:1;top:0;bottom:0}.bookingjs-form-field{position:relative}.bookingjs-form-field--dirty .bookingjs-form-label{opacity:1;top:20px;font-size:11px;color:#2e5bec}.bookingjs-form-field--dirty .bookingjs-form-input{padding:25px 25px 5px}.bookingjs-form-field--dirty .bookingjs-form-input--textarea{padding:30px 25px 10px}.bookingjs-form-label{position:absolute;top:30px;left:25px;color:#333;opacity:0;font-size:12px;transition:opacity .2s ease,font-size .2s ease,color .2s ease,top .2s ease}.bookingjs-form-input,.bookingjs-form input,.bookingjs-form input:invalid textarea,.bookingjs-form textarea:invalid{transition:box-shadow .2s ease;width:100%;padding:15px 25px;margin:0;border:0 solid #ececec;font-size:1em;box-shadow:inset 0 0 1px 1px hsla(0,0%,100%,0);text-align:left;box-sizing:border-box;line-height:1.5em;font-family:Open Sans,Helvetica,Tahoma,Arial,sans-serif;color:#333;overflow:auto;border-bottom:1px solid #ececec}.bookingjs-form-input:focus,.bookingjs-form input:focus,.bookingjs-form input:invalid textarea:focus,.bookingjs-form textarea:invalid:focus{outline:0;box-shadow:inset 0 0 1px 1px #2e5bec}.bookingjs-form-input.hidden,.bookingjs-form input.hidden,.bookingjs-form input:invalid textarea.hidden,.bookingjs-form textarea:invalid.hidden{display:none}.bookingjs-form-input:-moz-read-only,.bookingjs-form input:-moz-read-only,.bookingjs-form input:invalid textarea:-moz-read-only,.bookingjs-form textarea:invalid:-moz-read-only{cursor:not-allowed;font-style:italic}.bookingjs-form-input:read-only,.bookingjs-form input:invalid textarea:read-only,.bookingjs-form input:read-only,.bookingjs-form textarea:invalid:read-only{cursor:not-allowed;font-style:italic}.bookingjs-form-input:-moz-read-only:focus,.bookingjs-form input:-moz-read-only:focus,.bookingjs-form input:invalid textarea:-moz-read-only:focus,.bookingjs-form textarea:invalid:-moz-read-only:focus{box-shadow:inset 0 0 1px 1px #d8d8d8}.bookingjs-form-input:read-only:focus,.bookingjs-form input:invalid textarea:read-only:focus,.bookingjs-form input:read-only:focus,.bookingjs-form textarea:invalid:read-only:focus{box-shadow:inset 0 0 1px 1px #d8d8d8}.bookingjs-form-input--textarea{padding:15px 25px 25px;overflow:auto}.bookingjs-form-button{position:relative;transition:background-color .2s,max-width .3s;display:inline-block;padding:13px 25px;background-color:#2e5bec;text-transform:uppercase;box-shadow:0 1px 3px 0 rgba(0,0,0,.15);color:#fff;border:0;border-radius:3px;font-size:1.1em;font-weight:600;margin-top:30px;cursor:pointer;height:44px;outline:0;text-align:center;max-width:200px}.bookingjs-form-button .error-text,.bookingjs-form-button .loading-text,.bookingjs-form-button .success-text{transition:opacity .3s ease;position:absolute;top:13px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.bookingjs-form-button .inactive-text{white-space:nowrap;opacity:1}.bookingjs-form-button .loading-text svg{height:19px;width:19px;-webkit-animation:spin .6s infinite linear;animation:spin .6s infinite linear}.bookingjs-form-button .error-text svg{height:15px;width:15px;margin-top:2px}.bookingjs-form-button .success-text svg{height:15px;margin-top:2px;-webkit-transform:scale(0);transform:scale(0);transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}.bookingjs-form-button:focus,.bookingjs-form-button:hover{background-color:#1341d4}.bookingjs-form-button.button-shake{-webkit-animation:shake .5s 1 ease;animation:shake .5s 1 ease}.bookingjs-form.loading .bookingjs-form-button,.bookingjs-form.loading .bookingjs-form-button:hover{max-width:80px;background-color:#b1b1b1;cursor:not-allowed}.bookingjs-form.loading .bookingjs-form-button .inactive-text,.bookingjs-form.loading .bookingjs-form-button:hover .inactive-text{opacity:0}.bookingjs-form.loading .bookingjs-form-button .loading-text,.bookingjs-form.loading .bookingjs-form-button:hover .loading-text{opacity:1}.bookingjs-form.error .bookingjs-form-button,.bookingjs-form.error .bookingjs-form-button:hover{max-width:80px;background-color:#d83b46;cursor:not-allowed}.bookingjs-form.error .bookingjs-form-button .inactive-text,.bookingjs-form.error .bookingjs-form-button:hover .inactive-text{opacity:0}.bookingjs-form.error .bookingjs-form-button .error-text,.bookingjs-form.error .bookingjs-form-button:hover .error-text{opacity:1}.bookingjs-form.success .bookingjs-form-button,.bookingjs-form.success .bookingjs-form-button:hover{max-width:80px;background-color:#5baf56;cursor:pointer}.bookingjs-form.success .bookingjs-form-button .inactive-text,.bookingjs-form.success .bookingjs-form-button:hover .inactive-text{opacity:0}.bookingjs-form.success .bookingjs-form-button .success-text,.bookingjs-form.success .bookingjs-form-button:hover .success-text{opacity:1}.bookingjs-form.success .bookingjs-form-button .success-text svg,.bookingjs-form.success .bookingjs-form-button:hover .success-text svg{-webkit-transform:scale(1);transform:scale(1)}.bookingjs-poweredby{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:7px 10px}.bookingjs-poweredby a{transition:color .2s ease;color:#aeaeae;text-decoration:none}.bookingjs-poweredby a svg path{transition:fill .2s ease;fill:#aeaeae}.bookingjs-poweredby a:hover{color:#333}.bookingjs-poweredby a:hover svg path{fill:#333}.bookingjs-timekitlogo{width:15px;height:15px;margin-right:5px;vertical-align:sub}.bookingjs-loading{position:absolute;height:100%;width:100%;top:0;left:0;background-color:#fbfbfb;z-index:30;opacity:0;transition:opacity .5s ease;border-radius:4px}.bookingjs-loading.show{opacity:1}.bookingjs-loading-icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.bookingjs-loading-icon svg{height:30px;width:30px;-webkit-animation:spin .6s infinite linear;animation:spin .6s infinite linear}.bookingjs-loading-icon svg path{fill:#2e5bec}.bookingjs-error{position:absolute;height:100%;width:100%;top:0;left:0;background-color:#fbfbfb;z-index:31;opacity:0;transition:opacity .5s ease;border-radius:4px}.bookingjs-error.show{opacity:1}.bookingjs-error-inner{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;overflow:scroll;max-height:100%;padding:30px;box-sizing:border-box;width:100%}.bookingjs-error-icon svg{height:30px;width:30px}.bookingjs-error-icon svg g{fill:#d83b46}.bookingjs-error-heading{color:#d83b46;font-size:15px;margin:15px 0}.bookingjs-error-text{font-size:12px;color:#aeaeae;word-break:break-word;overflow:scroll}.bookingjs-error-text-context,.bookingjs-error-text-messag{display:block}\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/css-loader?minimize!./~/autoprefixer-loader!./~/sass-loader!./src/styles/main.scss\n// module id = 44\n// module chunks = 0"",""module.exports = \""<svg class=\\\""bookingjs-timezoneicon\\\"" viewBox=\\\""0 0 98 98\\\"" version=\\\""1.1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\"" xmlns:sketch=\\\""http://www.bohemiancoding.com/sketch/ns\\\""><title>Shape</title><desc>Created with Sketch.</desc><defs></defs><g id=\\\""Page-1\\\"" stroke=\\\""none\\\"" stroke-width=\\\""1\\\"" fill=\\\""none\\\"" fill-rule=\\\""evenodd\\\"" sketch:type=\\\""MSPage\\\""><g id=\\\""timezone-icon\\\"" sketch:type=\\\""MSLayerGroup\\\"" fill=\\\""#AEAEAE\\\""><path d=\\\""M37.656,1.387 L39.381,2.516 L46.176,3.475 L49.313,2.778 L55.186,3.495 L56.364,5.065 L52.274,4.52 L48.092,6.262 L49.293,9.385 L53.613,11.348 L54.189,7.395 L58.285,7.133 L64.121,12.707 L65.775,14.887 L66.56,16.28 L62.029,18.067 L55.185,21.169 L54.624,24.206 L50.095,28.476 L50.271,32.572 L48.9,32.559 L48.353,29.086 L45.757,28.238 L38.294,28.631 L35.286,34.137 L37.901,37.274 L42.221,34.917 L42.516,38.755 L44.172,40.062 L47.131,43.46 L46.985,47.751 L52.448,49.034 L56.454,46.159 L58.284,46.768 L65.003,49.45 L74.433,52.985 L76.396,57.698 L83.111,60.968 L84.644,66.732 L80.062,71.857 L74.66,77.519 L68.933,80.482 L63.04,84.408 L55.185,89.515 L50.835,93.941 L49.292,92.263 L52.782,83.419 L53.663,73.167 L46.15,66.34 L46.199,60.596 L48.164,58.239 L50.471,51.415 L45.809,48.811 L42.664,43.706 L37.75,41.817 L30.047,37.667 L26.904,29.024 L25.334,33.344 L22.977,26.276 L23.762,15.671 L27.69,12.136 L26.512,9.779 L29.26,5.459 L23.905,6.99 C9.611,15.545 0.01,31.135 0.01,49.006 C0.01,76.062 21.945,98 49.006,98 C76.062,98 98,76.062 98,49.006 C98,21.947 76.062,0.012 49.006,0.012 C45.092,0.012 41.305,0.52 37.656,1.387 Z\\\"" id=\\\""Shape\\\"" sketch:type=\\\""MSShapeGroup\\\""></path></g></g></svg>\""\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/svg-inline-loader!./src/assets/timezone-icon.svg\n// module id = 45\n// module chunks = 0"",""var H = require(\""hogan.js\"");\nmodule.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||\""\"");t.b(\""<div class=\\\""bookingjs-timezonehelper\\\"">\"");t.b(\""\\n\"");t.b(\""\\n\"" + i);t.b(\""  \"");t.b(t.t(t.f(\""timezoneIcon\"",c,p,0)));t.b(\""\\n\"");t.b(\""\\n\"" + i);if(t.s(t.f(\""loading\"",c,p,1),c,p,0,79,117,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\""    <span>\"");t.b(t.v(t.f(\""loadingText\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);});c.pop();}t.b(\""\\n\"" + i);if(!t.s(t.f(\""loading\"",c,p,1),c,p,1,0,0,\""\"")){if(t.s(t.f(\""timezoneDifference\"",c,p,1),c,p,0,179,227,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\""      <span>\"");t.b(t.v(t.f(\""timezoneDifferent\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);});c.pop();}t.b(\""\\n\"" + i);if(!t.s(t.f(\""timezoneDifference\"",c,p,1),c,p,1,0,0,\""\"")){t.b(\""      <span>\"");t.b(t.v(t.f(\""timezoneSame\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);};};t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");return t.fl(); },partials: {}, subs: {  }}, \""<div class=\\\""bookingjs-timezonehelper\\\"">\\n\\n  {{& timezoneIcon }}\\n\\n  {{# loading }}\\n    <span>{{ loadingText }}</span>\\n  {{/ loading }}\\n\\n  {{^ loading }}\\n    {{# timezoneDifference }}\\n      <span>{{ timezoneDifferent }}</span>\\n    {{/ timezoneDifference }}\\n\\n    {{^ timezoneDifference }}\\n      <span>{{ timezoneSame }}</span>\\n    {{/ timezoneDifference }}\\n  {{/ loading }}\\n\\n</div>\\n\"", H);return T; }();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/timezone-helper.html\n// module id = 46\n// module chunks = 0"",""/*\n *  Copyright 2011 Twitter, Inc.\n *  Licensed under the Apache License, Version 2.0 (the \""License\"");\n *  you may not use this file except in compliance with the License.\n *  You may obtain a copy of the License at\n *\n *  http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \""AS IS\"" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\n// This file is for use with Node.js. See dist/ for browser files.\n\nvar Hogan = require('./compiler');\nHogan.Template = require('./template').Template;\nHogan.template = Hogan.Template;\nmodule.exports = Hogan;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/hogan.js/lib/hogan.js\n// module id = 47\n// module chunks = 0"",""/*\n *  Copyright 2011 Twitter, Inc.\n *  Licensed under the Apache License, Version 2.0 (the \""License\"");\n *  you may not use this file except in compliance with the License.\n *  You may obtain a copy of the License at\n *\n *  http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \""AS IS\"" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\n(function (Hogan) {\n  // Setup regex  assignments\n  // remove whitespace according to Mustache spec\n  var rIsWhitespace = /\\S/,\n      rQuot = /\\\""/g,\n      rNewline =  /\\n/g,\n      rCr = /\\r/g,\n      rSlash = /\\\\/g,\n      rLineSep = /\\u2028/,\n      rParagraphSep = /\\u2029/;\n\n  Hogan.tags = {\n    '#': 1, '^': 2, '<': 3, '$': 4,\n    '/': 5, '!': 6, '>': 7, '=': 8, '_v': 9,\n    '{': 10, '&': 11, '_t': 12\n  };\n\n  Hogan.scan = function scan(text, delimiters) {\n    var len = text.length,\n        IN_TEXT = 0,\n        IN_TAG_TYPE = 1,\n        IN_TAG = 2,\n        state = IN_TEXT,\n        tagType = null,\n        tag = null,\n        buf = '',\n        tokens = [],\n        seenTag = false,\n        i = 0,\n        lineStart = 0,\n        otag = '{{',\n        ctag = '}}';\n\n    function addBuf() {\n      if (buf.length > 0) {\n        tokens.push({tag: '_t', text: new String(buf)});\n        buf = '';\n      }\n    }\n\n    function lineIsWhitespace() {\n      var isAllWhitespace = true;\n      for (var j = lineStart; j < tokens.length; j++) {\n        isAllWhitespace =\n          (Hogan.tags[tokens[j].tag] < Hogan.tags['_v']) ||\n          (tokens[j].tag == '_t' && tokens[j].text.match(rIsWhitespace) === null);\n        if (!isAllWhitespace) {\n          return false;\n        }\n      }\n\n      return isAllWhitespace;\n    }\n\n    function filterLine(haveSeenTag, noNewLine) {\n      addBuf();\n\n      if (haveSeenTag && lineIsWhitespace()) {\n        for (var j = lineStart, next; j < tokens.length; j++) {\n          if (tokens[j].text) {\n            if ((next = tokens[j+1]) && next.tag == '>') {\n              // set indent to token value\n              next.indent = tokens[j].text.toString()\n            }\n            tokens.splice(j, 1);\n          }\n        }\n      } else if (!noNewLine) {\n        tokens.push({tag:'\\n'});\n      }\n\n      seenTag = false;\n      lineStart = tokens.length;\n    }\n\n    function changeDelimiters(text, index) {\n      var close = '=' + ctag,\n          closeIndex = text.indexOf(close, index),\n          delimiters = trim(\n            text.substring(text.indexOf('=', index) + 1, closeIndex)\n          ).split(' ');\n\n      otag = delimiters[0];\n      ctag = delimiters[delimiters.length - 1];\n\n      return closeIndex + close.length - 1;\n    }\n\n    if (delimiters) {\n      delimiters = delimiters.split(' ');\n      otag = delimiters[0];\n      ctag = delimiters[1];\n    }\n\n    for (i = 0; i < len; i++) {\n      if (state == IN_TEXT) {\n        if (tagChange(otag, text, i)) {\n          --i;\n          addBuf();\n          state = IN_TAG_TYPE;\n        } else {\n          if (text.charAt(i) == '\\n') {\n            filterLine(seenTag);\n          } else {\n            buf += text.charAt(i);\n          }\n        }\n      } else if (state == IN_TAG_TYPE) {\n        i += otag.length - 1;\n        tag = Hogan.tags[text.charAt(i + 1)];\n        tagType = tag ? text.charAt(i + 1) : '_v';\n        if (tagType == '=') {\n          i = changeDelimiters(text, i);\n          state = IN_TEXT;\n        } else {\n          if (tag) {\n            i++;\n          }\n          state = IN_TAG;\n        }\n        seenTag = i;\n      } else {\n        if (tagChange(ctag, text, i)) {\n          tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag,\n                       i: (tagType == '/') ? seenTag - otag.length : i + ctag.length});\n          buf = '';\n          i += ctag.length - 1;\n          state = IN_TEXT;\n          if (tagType == '{') {\n            if (ctag == '}}') {\n              i++;\n            } else {\n              cleanTripleStache(tokens[tokens.length - 1]);\n            }\n          }\n        } else {\n          buf += text.charAt(i);\n        }\n      }\n    }\n\n    filterLine(seenTag, true);\n\n    return tokens;\n  }\n\n  function cleanTripleStache(token) {\n    if (token.n.substr(token.n.length - 1) === '}') {\n      token.n = token.n.substring(0, token.n.length - 1);\n    }\n  }\n\n  function trim(s) {\n    if (s.trim) {\n      return s.trim();\n    }\n\n    return s.replace(/^\\s*|\\s*$/g, '');\n  }\n\n  function tagChange(tag, text, index) {\n    if (text.charAt(index) != tag.charAt(0)) {\n      return false;\n    }\n\n    for (var i = 1, l = tag.length; i < l; i++) {\n      if (text.charAt(index + i) != tag.charAt(i)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  // the tags allowed inside super templates\n  var allowedInSuper = {'_t': true, '\\n': true, '$': true, '/': true};\n\n  function buildTree(tokens, kind, stack, customTags) {\n    var instructions = [],\n        opener = null,\n        tail = null,\n        token = null;\n\n    tail = stack[stack.length - 1];\n\n    while (tokens.length > 0) {\n      token = tokens.shift();\n\n      if (tail && tail.tag == '<' && !(token.tag in allowedInSuper)) {\n        throw new Error('Illegal content in < super tag.');\n      }\n\n      if (Hogan.tags[token.tag] <= Hogan.tags['$'] || isOpener(token, customTags)) {\n        stack.push(token);\n        token.nodes = buildTree(tokens, token.tag, stack, customTags);\n      } else if (token.tag == '/') {\n        if (stack.length === 0) {\n          throw new Error('Closing tag without opener: /' + token.n);\n        }\n        opener = stack.pop();\n        if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) {\n          throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n);\n        }\n        opener.end = token.i;\n        return instructions;\n      } else if (token.tag == '\\n') {\n        token.last = (tokens.length == 0) || (tokens[0].tag == '\\n');\n      }\n\n      instructions.push(token);\n    }\n\n    if (stack.length > 0) {\n      throw new Error('missing closing tag: ' + stack.pop().n);\n    }\n\n    return instructions;\n  }\n\n  function isOpener(token, tags) {\n    for (var i = 0, l = tags.length; i < l; i++) {\n      if (tags[i].o == token.n) {\n        token.tag = '#';\n        return true;\n      }\n    }\n  }\n\n  function isCloser(close, open, tags) {\n    for (var i = 0, l = tags.length; i < l; i++) {\n      if (tags[i].c == close && tags[i].o == open) {\n        return true;\n      }\n    }\n  }\n\n  function stringifySubstitutions(obj) {\n    var items = [];\n    for (var key in obj) {\n      items.push('\""' + esc(key) + '\"": function(c,p,t,i) {' + obj[key] + '}');\n    }\n    return \""{ \"" + items.join(\"",\"") + \"" }\"";\n  }\n\n  function stringifyPartials(codeObj) {\n    var partials = [];\n    for (var key in codeObj.partials) {\n      partials.push('\""' + esc(key) + '\"":{name:\""' + esc(codeObj.partials[key].name) + '\"", ' + stringifyPartials(codeObj.partials[key]) + \""}\"");\n    }\n    return \""partials: {\"" + partials.join(\"",\"") + \""}, subs: \"" + stringifySubstitutions(codeObj.subs);\n  }\n\n  Hogan.stringify = function(codeObj, text, options) {\n    return \""{code: function (c,p,i) { \"" + Hogan.wrapMain(codeObj.code) + \"" },\"" + stringifyPartials(codeObj) +  \""}\"";\n  }\n\n  var serialNo = 0;\n  Hogan.generate = function(tree, text, options) {\n    serialNo = 0;\n    var context = { code: '', subs: {}, partials: {} };\n    Hogan.walk(tree, context);\n\n    if (options.asString) {\n      return this.stringify(context, text, options);\n    }\n\n    return this.makeTemplate(context, text, options);\n  }\n\n  Hogan.wrapMain = function(code) {\n    return 'var t=this;t.b(i=i||\""\"");' + code + 'return t.fl();';\n  }\n\n  Hogan.template = Hogan.Template;\n\n  Hogan.makeTemplate = function(codeObj, text, options) {\n    var template = this.makePartials(codeObj);\n    template.code = new Function('c', 'p', 'i', this.wrapMain(codeObj.code));\n    return new this.template(template, text, this, options);\n  }\n\n  Hogan.makePartials = function(codeObj) {\n    var key, template = {subs: {}, partials: codeObj.partials, name: codeObj.name};\n    for (key in template.partials) {\n      template.partials[key] = this.makePartials(template.partials[key]);\n    }\n    for (key in codeObj.subs) {\n      template.subs[key] = new Function('c', 'p', 't', 'i', codeObj.subs[key]);\n    }\n    return template;\n  }\n\n  function esc(s) {\n    return s.replace(rSlash, '\\\\\\\\')\n            .replace(rQuot, '\\\\\\\""')\n            .replace(rNewline, '\\\\n')\n            .replace(rCr, '\\\\r')\n            .replace(rLineSep, '\\\\u2028')\n            .replace(rParagraphSep, '\\\\u2029');\n  }\n\n  function chooseMethod(s) {\n    return (~s.indexOf('.')) ? 'd' : 'f';\n  }\n\n  function createPartial(node, context) {\n    var prefix = \""<\"" + (context.prefix || \""\"");\n    var sym = prefix + node.n + serialNo++;\n    context.partials[sym] = {name: node.n, partials: {}};\n    context.code += 't.b(t.rp(\""' +  esc(sym) + '\"",c,p,\""' + (node.indent || '') + '\""));';\n    return sym;\n  }\n\n  Hogan.codegen = {\n    '#': function(node, context) {\n      context.code += 'if(t.s(t.' + chooseMethod(node.n) + '(\""' + esc(node.n) + '\"",c,p,1),' +\n                      'c,p,0,' + node.i + ',' + node.end + ',\""' + node.otag + \"" \"" + node.ctag + '\"")){' +\n                      't.rs(c,p,' + 'function(c,p,t){';\n      Hogan.walk(node.nodes, context);\n      context.code += '});c.pop();}';\n    },\n\n    '^': function(node, context) {\n      context.code += 'if(!t.s(t.' + chooseMethod(node.n) + '(\""' + esc(node.n) + '\"",c,p,1),c,p,1,0,0,\""\"")){';\n      Hogan.walk(node.nodes, context);\n      context.code += '};';\n    },\n\n    '>': createPartial,\n    '<': function(node, context) {\n      var ctx = {partials: {}, code: '', subs: {}, inPartial: true};\n      Hogan.walk(node.nodes, ctx);\n      var template = context.partials[createPartial(node, context)];\n      template.subs = ctx.subs;\n      template.partials = ctx.partials;\n    },\n\n    '$': function(node, context) {\n      var ctx = {subs: {}, code: '', partials: context.partials, prefix: node.n};\n      Hogan.walk(node.nodes, ctx);\n      context.subs[node.n] = ctx.code;\n      if (!context.inPartial) {\n        context.code += 't.sub(\""' + esc(node.n) + '\"",c,p,i);';\n      }\n    },\n\n    '\\n': function(node, context) {\n      context.code += write('\""\\\\n\""' + (node.last ? '' : ' + i'));\n    },\n\n    '_v': function(node, context) {\n      context.code += 't.b(t.v(t.' + chooseMethod(node.n) + '(\""' + esc(node.n) + '\"",c,p,0)));';\n    },\n\n    '_t': function(node, context) {\n      context.code += write('\""' + esc(node.text) + '\""');\n    },\n\n    '{': tripleStache,\n\n    '&': tripleStache\n  }\n\n  function tripleStache(node, context) {\n    context.code += 't.b(t.t(t.' + chooseMethod(node.n) + '(\""' + esc(node.n) + '\"",c,p,0)));';\n  }\n\n  function write(s) {\n    return 't.b(' + s + ');';\n  }\n\n  Hogan.walk = function(nodelist, context) {\n    var func;\n    for (var i = 0, l = nodelist.length; i < l; i++) {\n      func = Hogan.codegen[nodelist[i].tag];\n      func && func(nodelist[i], context);\n    }\n    return context;\n  }\n\n  Hogan.parse = function(tokens, text, options) {\n    options = options || {};\n    return buildTree(tokens, '', [], options.sectionTags || []);\n  }\n\n  Hogan.cache = {};\n\n  Hogan.cacheKey = function(text, options) {\n    return [text, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join('||');\n  }\n\n  Hogan.compile = function(text, options) {\n    options = options || {};\n    var key = Hogan.cacheKey(text, options);\n    var template = this.cache[key];\n\n    if (template) {\n      var partials = template.partials;\n      for (var name in partials) {\n        delete partials[name].instance;\n      }\n      return template;\n    }\n\n    template = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options);\n    return this.cache[key] = template;\n  }\n})(typeof exports !== 'undefined' ? exports : Hogan);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/hogan.js/lib/compiler.js\n// module id = 48\n// module chunks = 0"",""/*\n *  Copyright 2011 Twitter, Inc.\n *  Licensed under the Apache License, Version 2.0 (the \""License\"");\n *  you may not use this file except in compliance with the License.\n *  You may obtain a copy of the License at\n *\n *  http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \""AS IS\"" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\nvar Hogan = {};\n\n(function (Hogan) {\n  Hogan.Template = function (codeObj, text, compiler, options) {\n    codeObj = codeObj || {};\n    this.r = codeObj.code || this.r;\n    this.c = compiler;\n    this.options = options || {};\n    this.text = text || '';\n    this.partials = codeObj.partials || {};\n    this.subs = codeObj.subs || {};\n    this.buf = '';\n  }\n\n  Hogan.Template.prototype = {\n    // render: replaced by generated code.\n    r: function (context, partials, indent) { return ''; },\n\n    // variable escaping\n    v: hoganEscape,\n\n    // triple stache\n    t: coerceToString,\n\n    render: function render(context, partials, indent) {\n      return this.ri([context], partials || {}, indent);\n    },\n\n    // render internal -- a hook for overrides that catches partials too\n    ri: function (context, partials, indent) {\n      return this.r(context, partials, indent);\n    },\n\n    // ensurePartial\n    ep: function(symbol, partials) {\n      var partial = this.partials[symbol];\n\n      // check to see that if we've instantiated this partial before\n      var template = partials[partial.name];\n      if (partial.instance && partial.base == template) {\n        return partial.instance;\n      }\n\n      if (typeof template == 'string') {\n        if (!this.c) {\n          throw new Error(\""No compiler available.\"");\n        }\n        template = this.c.compile(template, this.options);\n      }\n\n      if (!template) {\n        return null;\n      }\n\n      // We use this to check whether the partials dictionary has changed\n      this.partials[symbol].base = template;\n\n      if (partial.subs) {\n        // Make sure we consider parent template now\n        if (!partials.stackText) partials.stackText = {};\n        for (key in partial.subs) {\n          if (!partials.stackText[key]) {\n            partials.stackText[key] = (this.activeSub !== undefined && partials.stackText[this.activeSub]) ? partials.stackText[this.activeSub] : this.text;\n          }\n        }\n        template = createSpecializedPartial(template, partial.subs, partial.partials,\n          this.stackSubs, this.stackPartials, partials.stackText);\n      }\n      this.partials[symbol].instance = template;\n\n      return template;\n    },\n\n    // tries to find a partial in the current scope and render it\n    rp: function(symbol, context, partials, indent) {\n      var partial = this.ep(symbol, partials);\n      if (!partial) {\n        return '';\n      }\n\n      return partial.ri(context, partials, indent);\n    },\n\n    // render a section\n    rs: function(context, partials, section) {\n      var tail = context[context.length - 1];\n\n      if (!isArray(tail)) {\n        section(context, partials, this);\n        return;\n      }\n\n      for (var i = 0; i < tail.length; i++) {\n        context.push(tail[i]);\n        section(context, partials, this);\n        context.pop();\n      }\n    },\n\n    // maybe start a section\n    s: function(val, ctx, partials, inverted, start, end, tags) {\n      var pass;\n\n      if (isArray(val) && val.length === 0) {\n        return false;\n      }\n\n      if (typeof val == 'function') {\n        val = this.ms(val, ctx, partials, inverted, start, end, tags);\n      }\n\n      pass = !!val;\n\n      if (!inverted && pass && ctx) {\n        ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]);\n      }\n\n      return pass;\n    },\n\n    // find values with dotted names\n    d: function(key, ctx, partials, returnFound) {\n      var found,\n          names = key.split('.'),\n          val = this.f(names[0], ctx, partials, returnFound),\n          doModelGet = this.options.modelGet,\n          cx = null;\n\n      if (key === '.' && isArray(ctx[ctx.length - 2])) {\n        val = ctx[ctx.length - 1];\n      } else {\n        for (var i = 1; i < names.length; i++) {\n          found = findInScope(names[i], val, doModelGet);\n          if (found !== undefined) {\n            cx = val;\n            val = found;\n          } else {\n            val = '';\n          }\n        }\n      }\n\n      if (returnFound && !val) {\n        return false;\n      }\n\n      if (!returnFound && typeof val == 'function') {\n        ctx.push(cx);\n        val = this.mv(val, ctx, partials);\n        ctx.pop();\n      }\n\n      return val;\n    },\n\n    // find values with normal names\n    f: function(key, ctx, partials, returnFound) {\n      var val = false,\n          v = null,\n          found = false,\n          doModelGet = this.options.modelGet;\n\n      for (var i = ctx.length - 1; i >= 0; i--) {\n        v = ctx[i];\n        val = findInScope(key, v, doModelGet);\n        if (val !== undefined) {\n          found = true;\n          break;\n        }\n      }\n\n      if (!found) {\n        return (returnFound) ? false : \""\"";\n      }\n\n      if (!returnFound && typeof val == 'function') {\n        val = this.mv(val, ctx, partials);\n      }\n\n      return val;\n    },\n\n    // higher order templates\n    ls: function(func, cx, partials, text, tags) {\n      var oldTags = this.options.delimiters;\n\n      this.options.delimiters = tags;\n      this.b(this.ct(coerceToString(func.call(cx, text)), cx, partials));\n      this.options.delimiters = oldTags;\n\n      return false;\n    },\n\n    // compile text\n    ct: function(text, cx, partials) {\n      if (this.options.disableLambda) {\n        throw new Error('Lambda features disabled.');\n      }\n      return this.c.compile(text, this.options).render(cx, partials);\n    },\n\n    // template result buffering\n    b: function(s) { this.buf += s; },\n\n    fl: function() { var r = this.buf; this.buf = ''; return r; },\n\n    // method replace section\n    ms: function(func, ctx, partials, inverted, start, end, tags) {\n      var textSource,\n          cx = ctx[ctx.length - 1],\n          result = func.call(cx);\n\n      if (typeof result == 'function') {\n        if (inverted) {\n          return true;\n        } else {\n          textSource = (this.activeSub && this.subsText && this.subsText[this.activeSub]) ? this.subsText[this.activeSub] : this.text;\n          return this.ls(result, cx, partials, textSource.substring(start, end), tags);\n        }\n      }\n\n      return result;\n    },\n\n    // method replace variable\n    mv: function(func, ctx, partials) {\n      var cx = ctx[ctx.length - 1];\n      var result = func.call(cx);\n\n      if (typeof result == 'function') {\n        return this.ct(coerceToString(result.call(cx)), cx, partials);\n      }\n\n      return result;\n    },\n\n    sub: function(name, context, partials, indent) {\n      var f = this.subs[name];\n      if (f) {\n        this.activeSub = name;\n        f(context, partials, this, indent);\n        this.activeSub = false;\n      }\n    }\n\n  };\n\n  //Find a key in an object\n  function findInScope(key, scope, doModelGet) {\n    var val;\n\n    if (scope && typeof scope == 'object') {\n\n      if (scope[key] !== undefined) {\n        val = scope[key];\n\n      // try lookup with get for backbone or similar model data\n      } else if (doModelGet && scope.get && typeof scope.get == 'function') {\n        val = scope.get(key);\n      }\n    }\n\n    return val;\n  }\n\n  function createSpecializedPartial(instance, subs, partials, stackSubs, stackPartials, stackText) {\n    function PartialTemplate() {};\n    PartialTemplate.prototype = instance;\n    function Substitutions() {};\n    Substitutions.prototype = instance.subs;\n    var key;\n    var partial = new PartialTemplate();\n    partial.subs = new Substitutions();\n    partial.subsText = {};  //hehe. substext.\n    partial.buf = '';\n\n    stackSubs = stackSubs || {};\n    partial.stackSubs = stackSubs;\n    partial.subsText = stackText;\n    for (key in subs) {\n      if (!stackSubs[key]) stackSubs[key] = subs[key];\n    }\n    for (key in stackSubs) {\n      partial.subs[key] = stackSubs[key];\n    }\n\n    stackPartials = stackPartials || {};\n    partial.stackPartials = stackPartials;\n    for (key in partials) {\n      if (!stackPartials[key]) stackPartials[key] = partials[key];\n    }\n    for (key in stackPartials) {\n      partial.partials[key] = stackPartials[key];\n    }\n\n    return partial;\n  }\n\n  var rAmp = /&/g,\n      rLt = /</g,\n      rGt = />/g,\n      rApos = /\\'/g,\n      rQuot = /\\\""/g,\n      hChars = /[&<>\\\""\\']/;\n\n  function coerceToString(val) {\n    return String((val === null || val === undefined) ? '' : val);\n  }\n\n  function hoganEscape(str) {\n    str = coerceToString(str);\n    return hChars.test(str) ?\n      str\n        .replace(rAmp, '&amp;')\n        .replace(rLt, '&lt;')\n        .replace(rGt, '&gt;')\n        .replace(rApos, '&#39;')\n        .replace(rQuot, '&quot;') :\n      str;\n  }\n\n  var isArray = Array.isArray || function(a) {\n    return Object.prototype.toString.call(a) === '[object Array]';\n  };\n\n})(typeof exports !== 'undefined' ? exports : Hogan);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/hogan.js/lib/template.js\n// module id = 49\n// module chunks = 0"",""var H = require(\""hogan.js\"");\nmodule.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||\""\"");t.b(\""<div class=\\\""bookingjs-avatar\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <img src=\\\""\"");t.b(t.t(t.f(\""image\"",c,p,0)));t.b(\""\\\"" />\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");return t.fl(); },partials: {}, subs: {  }}, \""<div class=\\\""bookingjs-avatar\\\"">\\n  <img src=\\\""{{& image }}\\\"" />\\n</div>\\n\"", H);return T; }();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/user-avatar.html\n// module id = 50\n// module chunks = 0"",""var H = require(\""hogan.js\"");\nmodule.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||\""\"");t.b(\""<div class=\\\""bookingjs-displayname\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <span>\"");t.b(t.v(t.f(\""name\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");return t.fl(); },partials: {}, subs: {  }}, \""<div class=\\\""bookingjs-displayname\\\"">\\n  <span>{{ name }}</span>\\n</div>\\n\"", H);return T; }();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/user-displayname.html\n// module id = 51\n// module chunks = 0"",""var H = require(\""hogan.js\"");\nmodule.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||\""\"");t.b(\""<div class=\\\""bookingjs-loading show\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <div class=\\\""bookingjs-loading-icon\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    \"");t.b(t.t(t.f(\""loadingIcon\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""  </div>\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");return t.fl(); },partials: {}, subs: {  }}, \""<div class=\\\""bookingjs-loading show\\\"">\\n  <div class=\\\""bookingjs-loading-icon\\\"">\\n    {{& loadingIcon }}\\n  </div>\\n</div>\\n\"", H);return T; }();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/loading.html\n// module id = 52\n// module chunks = 0"",""module.exports = \""<svg version=\\\""1.1\\\"" id=\\\""loader-1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\"" x=\\\""0px\\\"" y=\\\""0px\\\"" viewBox=\\\""0 0 38 38\\\"" xml:space=\\\""preserve\\\""><path fill=\\\""#fff\\\"" d=\\\""M38,19 C38,8.50658975 29.4934102,0 19,0 C8.50658975,0 0,8.50658975 0,19 L5,19 C5,11.2680135 11.2680135,5 19,5 C26.7319865,5 33,11.2680135 33,19 L38,19 Z\\\"" id=\\\""Oval-1\\\"" sketch:type=\\\""MSShapeGroup\\\""></path></path></svg>\""\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/svg-inline-loader!./src/assets/loading-spinner.svg\n// module id = 53\n// module chunks = 0"",""var H = require(\""hogan.js\"");\nmodule.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||\""\"");t.b(\""<div class=\\\""bookingjs-error show\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <div class=\\\""bookingjs-error-inner\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    <div class=\\\""bookingjs-error-icon\\\"">\"");t.b(\""\\n\"" + i);t.b(\""      \"");t.b(t.t(t.f(\""errorWarningIcon\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""    </div>\"");t.b(\""\\n\"" + i);t.b(\""    <div class=\\\""bookingjs-error-heading\\\"">\"");t.b(\""\\n\"" + i);t.b(\""      Ouch, we've encountered a problem\"");t.b(\""\\n\"" + i);t.b(\""    </div>\"");t.b(\""\\n\"" + i);t.b(\""    <div class=\\\""bookingjs-error-text\\\"">\"");t.b(\""\\n\"" + i);t.b(\""      <span class=\\\""bookingjs-error-text-message\\\"">\"");t.b(t.t(t.f(\""message\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);t.b(\""      <span class=\\\""bookingjs-error-text-context\\\"">\"");t.b(t.t(t.f(\""context\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);t.b(\""    </div>\"");t.b(\""\\n\"" + i);t.b(\""  </div>\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");return t.fl(); },partials: {}, subs: {  }}, \""<div class=\\\""bookingjs-error show\\\"">\\n  <div class=\\\""bookingjs-error-inner\\\"">\\n    <div class=\\\""bookingjs-error-icon\\\"">\\n      {{& errorWarningIcon }}\\n    </div>\\n    <div class=\\\""bookingjs-error-heading\\\"">\\n      Ouch, we've encountered a problem\\n    </div>\\n    <div class=\\\""bookingjs-error-text\\\"">\\n      <span class=\\\""bookingjs-error-text-message\\\"">{{& message }}</span>\\n      <span class=\\\""bookingjs-error-text-context\\\"">{{& context }}</span>\\n    </div>\\n  </div>\\n</div>\\n\"", H);return T; }();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/error.html\n// module id = 54\n// module chunks = 0"",""module.exports = \""<svg viewBox=\\\""0 0 62 55\\\"" version=\\\""1.1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\""><title>error-warning-icon</title><desc>Created with Sketch.</desc><defs></defs><g id=\\\""Page-1\\\"" stroke=\\\""none\\\"" stroke-width=\\\""1\\\"" fill=\\\""none\\\"" fill-rule=\\\""evenodd\\\""><g id=\\\""error-warning-icon\\\"" fill-rule=\\\""nonzero\\\"" fill=\\\""#D83B46\\\""><path d=\\\""M60.2,41.5 L38.7,5.3 C37.1,2.5 34.2,0.9 31,0.9 C27.8,0.9 24.9,2.5 23.3,5.3 L1.8,41.5 C0.1,44.3 0.1,47.7 1.7,50.5 C3.3,53.3 6.2,55 9.5,55 L52.4,55 C55.7,55 58.6,53.3 60.2,50.5 C61.9,47.7 61.9,44.3 60.2,41.5 Z M55.1,47.6 C54.8,48.1 54.1,49.1 52.5,49.1 L9.5,49.1 C7.9,49.1 7.2,48 6.9,47.6 C6.6,47.1 6.1,45.9 6.9,44.6 L28.4,8.4 C29.2,7.1 30.5,6.9 31,6.9 C31.5,6.9 32.8,7 33.6,8.4 L55.1,44.6 C55.9,45.9 55.3,47.1 55.1,47.6 Z\\\"" id=\\\""Shape\\\""></path><path d=\\\""M31,15.2 C29.3,15.2 28,16.5 28,18.2 L28,34.2 C28,35.9 29.3,37.2 31,37.2 C32.7,37.2 34,35.9 34,34.2 L34,18.2 C34,16.6 32.7,15.2 31,15.2 Z\\\"" id=\\\""Shape\\\""></path><path d=\\\""M31,38.8 C29.3,38.8 28,40.1 28,41.8 L28,42.8 C28,44.5 29.3,45.8 31,45.8 C32.7,45.8 34,44.5 34,42.8 L34,41.8 C34,40.1 32.7,38.8 31,38.8 Z\\\"" id=\\\""Shape\\\""></path></g></g></svg>\""\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/svg-inline-loader!./src/assets/error-warning-icon.svg\n// module id = 55\n// module chunks = 0"",""var H = require(\""hogan.js\"");\nmodule.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||\""\"");t.b(\""<div class=\\\""bookingjs-form-field\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <label\"");t.b(\""\\n\"" + i);t.b(\""    for=\\\""input-name\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-label label-name\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    \"");t.b(t.v(t.d(\""fields.name.placeholder\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""  </label>\"");t.b(\""\\n\"" + i);t.b(\""  <input\"");t.b(\""\\n\"" + i);t.b(\""    id=\\\""input-name\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-input input-name\\\""\"");t.b(\""\\n\"" + i);t.b(\""    type=\\\""text\\\""\"");t.b(\""\\n\"" + i);t.b(\""    name=\\\""name\\\""\"");t.b(\""\\n\"" + i);t.b(\""    placeholder=\\\""\"");t.b(t.v(t.d(\""fields.name.placeholder\"",c,p,0)));t.b(\""\\\""\"");t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.name.prefilled\"",c,p,1),c,p,0,340,377,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" value=\\\""\"");t.b(t.v(t.d(\""fields.name.prefilled\"",c,p,0)));t.b(\""\\\"" \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.name.locked\"",c,p,1),c,p,0,435,445,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" readonly \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    required\"");t.b(\""\\n\"" + i);t.b(\""  />\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");t.b(\""\\n\"" + i);t.b(\""<div class=\\\""bookingjs-form-field\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <label\"");t.b(\""\\n\"" + i);t.b(\""    for=\\\""input-email\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-label label-email\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    \"");t.b(t.v(t.d(\""fields.email.placeholder\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""  </label>\"");t.b(\""\\n\"" + i);t.b(\""  <input\"");t.b(\""\\n\"" + i);t.b(\""    id=\\\""input-email\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-input input-email\\\""\"");t.b(\""\\n\"" + i);t.b(\""    type=\\\""email\\\""\"");t.b(\""\\n\"" + i);t.b(\""    name=\\\""email\\\""\"");t.b(\""\\n\"" + i);t.b(\""    placeholder=\\\""\"");t.b(t.v(t.d(\""fields.email.placeholder\"",c,p,0)));t.b(\""\\\""\"");t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.email.prefilled\"",c,p,1),c,p,0,846,884,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" value=\\\""\"");t.b(t.v(t.d(\""fields.email.prefilled\"",c,p,0)));t.b(\""\\\"" \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.email.locked\"",c,p,1),c,p,0,944,954,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" readonly \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    required\"");t.b(\""\\n\"" + i);t.b(\""  />\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");t.b(\""\\n\"" + i);if(t.s(t.d(\""fields.phone.enabled\"",c,p,1),c,p,0,1034,1600,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\""<div class=\\\""bookingjs-form-field\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <label\"");t.b(\""\\n\"" + i);t.b(\""    for=\\\""input-phone\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-label label-phone\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    \"");t.b(t.v(t.d(\""fields.phone.placeholder\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""  </label>\"");t.b(\""\\n\"" + i);t.b(\""  <input\"");t.b(\""\\n\"" + i);t.b(\""    id=\\\""input-phone\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-input input-phone\\\""\"");t.b(\""\\n\"" + i);t.b(\""    type=\\\""tel\\\""\"");t.b(\""\\n\"" + i);t.b(\""    name=\\\""phone\\\""\"");t.b(\""\\n\"" + i);t.b(\""    placeholder=\\\""\"");t.b(t.v(t.d(\""fields.phone.placeholder\"",c,p,0)));t.b(\""\\\""\"");t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.phone.prefilled\"",c,p,1),c,p,0,1382,1420,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" value=\\\""\"");t.b(t.v(t.d(\""fields.phone.prefilled\"",c,p,0)));t.b(\""\\\"" \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.phone.required\"",c,p,1),c,p,0,1482,1492,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" required \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.phone.locked\"",c,p,1),c,p,0,1551,1561,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" readonly \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""  />\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"" + i);});c.pop();}t.b(\""\\n\"" + i);if(t.s(t.d(\""fields.voip.enabled\"",c,p,1),c,p,0,1655,2208,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\""<div class=\\\""bookingjs-form-field\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <label\"");t.b(\""\\n\"" + i);t.b(\""    for=\\\""input-voip\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-label label-voip\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    \"");t.b(t.v(t.d(\""fields.voip.placeholder\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""  </label>\"");t.b(\""\\n\"" + i);t.b(\""  <input\"");t.b(\""\\n\"" + i);t.b(\""    id=\\\""input-voip\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-input input-voip\\\""\"");t.b(\""\\n\"" + i);t.b(\""    type=\\\""text\\\""\"");t.b(\""\\n\"" + i);t.b(\""    name=\\\""voip\\\""\"");t.b(\""\\n\"" + i);t.b(\""    placeholder=\\\""\"");t.b(t.v(t.d(\""fields.voip.placeholder\"",c,p,0)));t.b(\""\\\""\"");t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.voip.prefilled\"",c,p,1),c,p,0,1996,2033,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" value=\\\""\"");t.b(t.v(t.d(\""fields.voip.prefilled\"",c,p,0)));t.b(\""\\\"" \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.voip.required\"",c,p,1),c,p,0,2093,2103,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" required \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.voip.locked\"",c,p,1),c,p,0,2160,2170,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" readonly \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""  />\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"" + i);});c.pop();}t.b(\""\\n\"" + i);if(t.s(t.d(\""fields.location.enabled\"",c,p,1),c,p,0,2266,2875,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\""<div class=\\\""bookingjs-form-field\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <label\"");t.b(\""\\n\"" + i);t.b(\""    for=\\\""input-location\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-label label-location\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    \"");t.b(t.v(t.d(\""fields.location.placeholder\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""  </label>\"");t.b(\""\\n\"" + i);t.b(\""  <input\"");t.b(\""\\n\"" + i);t.b(\""    id=\\\""input-location\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-input input-location\\\""\"");t.b(\""\\n\"" + i);t.b(\""    type=\\\""text\\\""\"");t.b(\""\\n\"" + i);t.b(\""    name=\\\""location\\\""\"");t.b(\""\\n\"" + i);t.b(\""    placeholder=\\\""\"");t.b(t.v(t.d(\""fields.location.placeholder\"",c,p,0)));t.b(\""\\\""\"");t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.location.prefilled\"",c,p,1),c,p,0,2639,2680,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" value=\\\""\"");t.b(t.v(t.d(\""fields.location.prefilled\"",c,p,0)));t.b(\""\\\"" \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.location.required\"",c,p,1),c,p,0,2748,2758,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" required \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.location.locked\"",c,p,1),c,p,0,2823,2833,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" readonly \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""  />\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"" + i);});c.pop();}t.b(\""\\n\"" + i);if(t.s(t.d(\""fields.comment.enabled\"",c,p,1),c,p,0,2936,3554,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\""<div class=\\\""bookingjs-form-field\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <label\"");t.b(\""\\n\"" + i);t.b(\""    for=\\\""input-comment\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-label label-comment\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    \"");t.b(t.v(t.d(\""fields.comment.placeholder\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""  </label>\"");t.b(\""\\n\"" + i);t.b(\""  <textarea\"");t.b(\""\\n\"" + i);t.b(\""    id=\\\""input-comment\\\""\"");t.b(\""\\n\"" + i);t.b(\""    class=\\\""bookingjs-form-input bookingjs-form-input--textarea input-comment\\\""\"");t.b(\""\\n\"" + i);t.b(\""    rows=\\\""3\\\""\"");t.b(\""\\n\"" + i);t.b(\""    name=\\\""comment\\\""\"");t.b(\""\\n\"" + i);t.b(\""    placeholder=\\\""\"");t.b(t.v(t.d(\""fields.comment.placeholder\"",c,p,0)));t.b(\""\\\""\"");t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.comment.required\"",c,p,1),c,p,0,3331,3341,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" required \"");});c.pop();}t.b(\""\\n\"" + i);t.b(\""    \"");if(t.s(t.d(\""fields.comment.locked\"",c,p,1),c,p,0,3404,3414,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(\"" readonly \"");});c.pop();}t.b(\"">\"");if(t.s(t.d(\""fields.comment.prefilled\"",c,p,1),c,p,0,3474,3504,\""{{ }}\"")){t.rs(c,p,function(c,p,t){t.b(t.v(t.d(\""fields.comment.prefilled\"",c,p,0)));});c.pop();}t.b(\""</textarea>\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"" + i);});c.pop();}return t.fl(); },partials: {}, subs: {  }}, \""<div class=\\\""bookingjs-form-field\\\"">\\n  <label\\n    for=\\\""input-name\\\""\\n    class=\\\""bookingjs-form-label label-name\\\"">\\n    {{ fields.name.placeholder }}\\n  </label>\\n  <input\\n    id=\\\""input-name\\\""\\n    class=\\\""bookingjs-form-input input-name\\\""\\n    type=\\\""text\\\""\\n    name=\\\""name\\\""\\n    placeholder=\\\""{{ fields.name.placeholder }}\\\""\\n    {{# fields.name.prefilled }} value=\\\""{{ fields.name.prefilled }}\\\"" {{/ fields.name.prefilled }}\\n    {{# fields.name.locked }} readonly {{/ fields.name.locked }}\\n    required\\n  />\\n</div>\\n\\n<div class=\\\""bookingjs-form-field\\\"">\\n  <label\\n    for=\\\""input-email\\\""\\n    class=\\\""bookingjs-form-label label-email\\\"">\\n    {{ fields.email.placeholder }}\\n  </label>\\n  <input\\n    id=\\\""input-email\\\""\\n    class=\\\""bookingjs-form-input input-email\\\""\\n    type=\\\""email\\\""\\n    name=\\\""email\\\""\\n    placeholder=\\\""{{ fields.email.placeholder }}\\\""\\n    {{# fields.email.prefilled }} value=\\\""{{ fields.email.prefilled }}\\\"" {{/ fields.email.prefilled }}\\n    {{# fields.email.locked }} readonly {{/ fields.email.locked }}\\n    required\\n  />\\n</div>\\n\\n{{# fields.phone.enabled }}\\n<div class=\\\""bookingjs-form-field\\\"">\\n  <label\\n    for=\\\""input-phone\\\""\\n    class=\\\""bookingjs-form-label label-phone\\\"">\\n    {{ fields.phone.placeholder }}\\n  </label>\\n  <input\\n    id=\\\""input-phone\\\""\\n    class=\\\""bookingjs-form-input input-phone\\\""\\n    type=\\\""tel\\\""\\n    name=\\\""phone\\\""\\n    placeholder=\\\""{{ fields.phone.placeholder }}\\\""\\n    {{# fields.phone.prefilled }} value=\\\""{{ fields.phone.prefilled }}\\\"" {{/ fields.phone.prefilled }}\\n    {{# fields.phone.required }} required {{/ fields.phone.required }}\\n    {{# fields.phone.locked }} readonly {{/ fields.phone.locked }}\\n  />\\n</div>\\n{{/ fields.phone.enabled }}\\n\\n{{# fields.voip.enabled }}\\n<div class=\\\""bookingjs-form-field\\\"">\\n  <label\\n    for=\\\""input-voip\\\""\\n    class=\\\""bookingjs-form-label label-voip\\\"">\\n    {{ fields.voip.placeholder }}\\n  </label>\\n  <input\\n    id=\\\""input-voip\\\""\\n    class=\\\""bookingjs-form-input input-voip\\\""\\n    type=\\\""text\\\""\\n    name=\\\""voip\\\""\\n    placeholder=\\\""{{ fields.voip.placeholder }}\\\""\\n    {{# fields.voip.prefilled }} value=\\\""{{ fields.voip.prefilled }}\\\"" {{/ fields.voip.prefilled }}\\n    {{# fields.voip.required }} required {{/ fields.voip.required }}\\n    {{# fields.voip.locked }} readonly {{/ fields.voip.locked }}\\n  />\\n</div>\\n{{/ fields.voip.enabled }}\\n\\n{{# fields.location.enabled }}\\n<div class=\\\""bookingjs-form-field\\\"">\\n  <label\\n    for=\\\""input-location\\\""\\n    class=\\\""bookingjs-form-label label-location\\\"">\\n    {{ fields.location.placeholder }}\\n  </label>\\n  <input\\n    id=\\\""input-location\\\""\\n    class=\\\""bookingjs-form-input input-location\\\""\\n    type=\\\""text\\\""\\n    name=\\\""location\\\""\\n    placeholder=\\\""{{ fields.location.placeholder }}\\\""\\n    {{# fields.location.prefilled }} value=\\\""{{ fields.location.prefilled }}\\\"" {{/ fields.location.prefilled }}\\n    {{# fields.location.required }} required {{/ fields.location.required }}\\n    {{# fields.location.locked }} readonly {{/ fields.location.locked }}\\n  />\\n</div>\\n{{/ fields.location.enabled }}\\n\\n{{# fields.comment.enabled }}\\n<div class=\\\""bookingjs-form-field\\\"">\\n  <label\\n    for=\\\""input-comment\\\""\\n    class=\\\""bookingjs-form-label label-comment\\\"">\\n    {{ fields.comment.placeholder }}\\n  </label>\\n  <textarea\\n    id=\\\""input-comment\\\""\\n    class=\\\""bookingjs-form-input bookingjs-form-input--textarea input-comment\\\""\\n    rows=\\\""3\\\""\\n    name=\\\""comment\\\""\\n    placeholder=\\\""{{ fields.comment.placeholder }}\\\""\\n    {{# fields.comment.required }} required {{/ fields.comment.required }}\\n    {{# fields.comment.locked }} readonly {{/ fields.comment.locked }}>{{# fields.comment.prefilled }}{{ fields.comment.prefilled }}{{/ fields.comment.prefilled }}</textarea>\\n</div>\\n{{/ fields.comment.enabled }}\\n\"", H);return T; }();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/booking-fields.html\n// module id = 56\n// module chunks = 0"",""var H = require(\""hogan.js\"");\nmodule.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||\""\"");t.b(\""<div class=\\\""bookingjs-bookpage\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <a class=\\\""bookingjs-bookpage-close\\\"" href=\\\""#\\\"">\"");t.b(t.t(t.f(\""closeIcon\"",c,p,0)));t.b(\""</a>\"");t.b(\""\\n\"" + i);t.b(\""  <h2 class=\\\""bookingjs-bookpage-date\\\"">\"");t.b(t.v(t.f(\""chosenDate\"",c,p,0)));t.b(\""</h2>\"");t.b(\""\\n\"" + i);t.b(\""  <h3 class=\\\""bookingjs-bookpage-time\\\"">\"");t.b(t.v(t.f(\""chosenTime\"",c,p,0)));t.b(\""</h3>\"");t.b(\""\\n\"" + i);t.b(\""  <form class=\\\""bookingjs-form\\\"" action=\\\""#\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    <div class=\\\""bookingjs-form-box\\\"">\"");t.b(\""\\n\"" + i);t.b(\""      <div class=\\\""bookingjs-form-success-message\\\"">\"");t.b(\""\\n\"" + i);t.b(\""        <div class=\\\""title\\\"">\"");t.b(t.v(t.f(\""successMessageTitle\"",c,p,0)));t.b(\""</div>\"");t.b(\""\\n\"" + i);t.b(\""        <div class=\\\""body\\\"">\"");t.b(t.t(t.f(\""successMessageBody\"",c,p,0)));t.b(\""</div>\"");t.b(\""\\n\"" + i);t.b(\""      </div>\"");t.b(\""\\n\"" + i);t.b(\""      <div class=\\\""bookingjs-form-fields\\\"">\"");t.b(\""\\n\"" + i);t.b(t.rp(\""<formFields0\"",c,p,\""        \""));t.b(\""      </div>\"");t.b(\""\\n\"" + i);t.b(\""    </div>\"");t.b(\""\\n\"" + i);t.b(\""    <button class=\\\""bookingjs-form-button\\\"" type=\\\""submit\\\"">\"");t.b(\""\\n\"" + i);t.b(\""      <span class=\\\""inactive-text\\\"">\"");t.b(t.v(t.f(\""submitText\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);t.b(\""      <span class=\\\""loading-text\\\"">\"");t.b(t.t(t.f(\""loadingIcon\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);t.b(\""      <span class=\\\""error-text\\\"">\"");t.b(t.t(t.f(\""errorIcon\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);t.b(\""      <span class=\\\""success-text\\\"">\"");t.b(t.t(t.f(\""checkmarkIcon\"",c,p,0)));t.b(\""</span>\"");t.b(\""\\n\"" + i);t.b(\""    </button>\"");t.b(\""\\n\"" + i);t.b(\""  </form>\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");return t.fl(); },partials: {\""<formFields0\"":{name:\""formFields\"", partials: {}, subs: {  }}}, subs: {  }}, \""<div class=\\\""bookingjs-bookpage\\\"">\\n  <a class=\\\""bookingjs-bookpage-close\\\"" href=\\\""#\\\"">{{& closeIcon }}</a>\\n  <h2 class=\\\""bookingjs-bookpage-date\\\"">{{ chosenDate }}</h2>\\n  <h3 class=\\\""bookingjs-bookpage-time\\\"">{{ chosenTime }}</h3>\\n  <form class=\\\""bookingjs-form\\\"" action=\\\""#\\\"">\\n    <div class=\\\""bookingjs-form-box\\\"">\\n      <div class=\\\""bookingjs-form-success-message\\\"">\\n        <div class=\\\""title\\\"">{{ successMessageTitle }}</div>\\n        <div class=\\\""body\\\"">{{& successMessageBody }}</div>\\n      </div>\\n      <div class=\\\""bookingjs-form-fields\\\"">\\n        {{> formFields }}\\n      </div>\\n    </div>\\n    <button class=\\\""bookingjs-form-button\\\"" type=\\\""submit\\\"">\\n      <span class=\\\""inactive-text\\\"">{{ submitText }}</span>\\n      <span class=\\\""loading-text\\\"">{{& loadingIcon }}</span>\\n      <span class=\\\""error-text\\\"">{{& errorIcon }}</span>\\n      <span class=\\\""success-text\\\"">{{& checkmarkIcon }}</span>\\n    </button>\\n  </form>\\n</div>\\n\"", H);return T; }();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/booking-page.html\n// module id = 57\n// module chunks = 0"",""module.exports = \""<svg class=\\\""bookingjs-closeicon\\\"" viewBox=\\\""0 0 90 90\\\"" version=\\\""1.1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\"" xmlns:sketch=\\\""http://www.bohemiancoding.com/sketch/ns\\\""><title>close-icon</title><desc>Created with Sketch.</desc><defs></defs><g id=\\\""Page-1\\\"" stroke=\\\""none\\\"" stroke-width=\\\""1\\\"" fill=\\\""none\\\"" fill-rule=\\\""evenodd\\\"" sketch:type=\\\""MSPage\\\""><g id=\\\""close-icon\\\"" sketch:type=\\\""MSLayerGroup\\\"" fill=\\\""#000000\\\""><path d=\\\""M58,45 L87.2,15.8 C90.9,12.1 90.9,6.3 87.3,2.7 C83.7,-0.9 77.8,-0.8 74.2,2.8 L45,32 L15.8,2.8 C12.1,-0.9 6.3,-0.9 2.7,2.7 C-0.9,6.3 -0.8,12.2 2.8,15.8 L32,45 L2.8,74.2 C-0.9,77.9 -0.9,83.7 2.7,87.3 C6.3,90.9 12.2,90.8 15.8,87.2 L45,58 L74.2,87.2 C77.9,90.9 83.7,90.9 87.3,87.3 C90.9,83.7 90.8,77.8 87.2,74.2 L58,45 L58,45 Z\\\"" id=\\\""Shape\\\"" sketch:type=\\\""MSShapeGroup\\\""></path></g></g></svg>\""\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/svg-inline-loader!./src/assets/close-icon.svg\n// module id = 58\n// module chunks = 0"",""module.exports = \""<svg viewBox=\\\""0 0 38 26\\\"" x=\\\""0px\\\"" y=\\\""0px\\\"" version=\\\""1.1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\"" xmlns:sketch=\\\""http://www.bohemiancoding.com/sketch/ns\\\""><path fill=\\\""#fff\\\"" d=\\\""M4.59255916,9.14153015 L4.59255916,9.14153015 L4.59255917,9.14153016 C3.61060488,8.15335155 2.0152224,8.15314806 1.03260582,9.1419932 L0.737322592,9.43914816 C-0.245558943,10.4282599 -0.245836003,12.0327396 0.736862454,13.0216671 L12.8967481,25.2586313 C13.4826504,25.8482474 14.3060779,26.1023412 15.1093609,25.9623831 L15.1946218,25.9520176 C15.7962843,25.9101633 16.3621851,25.6553951 16.7974015,25.21742 L37.2642739,4.6208133 C38.2456495,3.63321696 38.2453889,2.02851586 37.2626092,1.03950653 L36.967326,0.742351578 C35.9843771,-0.246827998 34.390543,-0.247513927 33.4085772,0.740676315 L15.4197831,18.8434968 L14.826599,19.4404409 L14.2334149,18.8434968 L4.59255916,9.14153015 Z\\\"" id=\\\""Path\\\""></path></svg>\""\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/svg-inline-loader!./src/assets/checkmark-icon.svg\n// module id = 59\n// module chunks = 0"",""module.exports = \""<svg class=\\\""bookingjs-closeicon\\\"" viewBox=\\\""0 0 90 90\\\"" version=\\\""1.1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\"" xmlns:sketch=\\\""http://www.bohemiancoding.com/sketch/ns\\\""><title>error-icon</title><desc>Created with Sketch.</desc><defs></defs><g id=\\\""Page-1\\\"" stroke=\\\""none\\\"" stroke-width=\\\""1\\\"" fill=\\\""none\\\"" fill-rule=\\\""evenodd\\\"" sketch:type=\\\""MSPage\\\""><g id=\\\""error-icon\\\"" sketch:type=\\\""MSLayerGroup\\\"" fill=\\\""#FFFFFF\\\""><path d=\\\""M58,45 L87.2,15.8 C90.9,12.1 90.9,6.3 87.3,2.7 C83.7,-0.9 77.8,-0.8 74.2,2.8 L45,32 L15.8,2.8 C12.1,-0.9 6.3,-0.9 2.7,2.7 C-0.9,6.3 -0.8,12.2 2.8,15.8 L32,45 L2.8,74.2 C-0.9,77.9 -0.9,83.7 2.7,87.3 C6.3,90.9 12.2,90.8 15.8,87.2 L45,58 L74.2,87.2 C77.9,90.9 83.7,90.9 87.3,87.3 C90.9,83.7 90.8,77.8 87.2,74.2 L58,45 L58,45 Z\\\"" id=\\\""Shape\\\"" sketch:type=\\\""MSShapeGroup\\\""></path></g></g></svg>\""\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/svg-inline-loader!./src/assets/error-icon.svg\n// module id = 60\n// module chunks = 0"",""var H = require(\""hogan.js\"");\nmodule.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||\""\"");t.b(\""<div class=\\\""bookingjs-poweredby\\\"">\"");t.b(\""\\n\"" + i);t.b(\""  <a href=\\\""http://timekit.io?utm_medium=link&utm_source=\"");t.b(t.v(t.f(\""campaignSource\"",c,p,0)));t.b(\""&utm_campaign=\"");t.b(t.v(t.f(\""campaignName\"",c,p,0)));t.b(\""&utm_content=powered-by\\\"" target=\\\""_blank\\\"">\"");t.b(\""\\n\"" + i);t.b(\""    \"");t.b(t.t(t.f(\""timekitLogo\"",c,p,0)));t.b(\""\\n\"" + i);t.b(\""    <span>Powered by Timekit</span>\"");t.b(\""\\n\"" + i);t.b(\""  </a>\"");t.b(\""\\n\"" + i);t.b(\""</div>\"");t.b(\""\\n\"");return t.fl(); },partials: {}, subs: {  }}, \""<div class=\\\""bookingjs-poweredby\\\"">\\n  <a href=\\\""http://timekit.io?utm_medium=link&utm_source={{ campaignSource }}&utm_campaign={{ campaignName }}&utm_content=powered-by\\\"" target=\\\""_blank\\\"">\\n    {{& timekitLogo }}\\n    <span>Powered by Timekit</span>\\n  </a>\\n</div>\\n\"", H);return T; }();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/poweredby.html\n// module id = 61\n// module chunks = 0"",""module.exports = \""<svg class=\\\""bookingjs-timekitlogo\\\"" viewBox=\\\""0 0 513 548\\\"" version=\\\""1.1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\""><title>timekit-logo</title><desc>Created with Sketch.</desc><defs></defs><g id=\\\""Page-1\\\"" stroke=\\\""none\\\"" stroke-width=\\\""1\\\"" fill=\\\""none\\\"" fill-rule=\\\""evenodd\\\""><g id=\\\""timekit-logo\\\"" transform=\\\""translate(9.000000, 9.000000)\\\"" fill=\\\""#AEAEAE\\\""><path d=\\\""M55.2163313,275.621588 L198.50357,163.134257 C227.693194,140.219007 274.527519,140.836287 303.106573,164.516436 L439.222777,277.300154 L294.687237,386.088734 C265.004826,408.430003 217.635083,407.547293 188.834846,384.15411 L55.2163313,275.621588 Z M29.1450782,296.088768 L22.5453033,301.269906 C-6.64628574,324.186699 -6.96035256,361.73094 21.8567615,385.137832 L188.814783,520.750588 C217.626101,544.152772 265.020127,545.031261 294.666324,522.71725 L471.933566,389.292269 C501.58244,366.976243 502.456142,329.694313 473.870647,306.008826 L465.168534,298.798395 L304.79022,419.511467 C268.948833,446.488455 213.042282,445.460488 178.242802,417.194379 L29.1450782,296.088768 Z\\\"" id=\\\""Base-layer\\\""></path><path d=\\\""M303.106573,18.9036609 L473.870647,160.396052 C502.470886,184.093754 501.573077,221.370515 471.912654,243.695235 L294.687237,377.088734 C265.004826,399.430003 217.635083,398.547293 188.834846,375.15411 L21.8366979,239.50876 C-6.94564818,216.130109 -6.64628574,178.573924 22.5453033,155.657132 L198.50357,17.5214821 C227.708304,-5.40562963 274.527519,-4.77648801 303.106573,18.9036609 Z M292.387775,31.8399435 C269.89295,13.2010897 231.857075,12.6958644 208.877526,30.7359084 L32.9192595,168.871558 C12.2117199,185.127966 12.006219,209.880161 32.4287426,226.468491 L199.426891,362.113841 C222.242635,380.64608 261.076006,381.360119 284.584254,363.666001 L461.809671,230.272501 C482.810002,214.466035 483.387128,190.098964 463.151849,173.332334 L292.387775,31.8399435 Z\\\"" id=\\\""Middle-layer\\\"" stroke=\\\""#AEAEAE\\\"" stroke-width=\\\""18\\\""></path></g></g></svg>\""\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/svg-inline-loader!./src/assets/timekit-logo.svg\n// module id = 62\n// module chunks = 0""],""sourceRoot"":""""}"
51a4cf03b212fe9b76d720060189d618057a1d79,7057934,<http://stackoverflow.com/questions/7057934/property-vs-instance-variable>
6dcc73dbb0705b1a1820067528ff0ad1fa7f469b,49478,"# For updates, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects"
e30434f6dfff09f952932d2ec29f339968765af9,1248081 6491463,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///webpack/bootstrap 63adaf49bae41c649d1e"",""webpack:///./src/mixins/themeable.js"",""webpack:///./src/util/helpers.js"",""webpack:///./src/mixins/colorable.js"",""webpack:///./src/components/VIcon/index.js"",""webpack:///./src/mixins/toggleable.js"",""webpack:///./src/components/transitions/index.js"",""webpack:///./src/directives/click-outside.js"",""webpack:///./src/directives/resize.js"",""webpack:///./src/directives/touch.js"",""webpack:///./src/directives/ripple.js"",""webpack:///./src/components/VBtn/index.js"",""webpack:///./src/mixins/bootable.js"",""webpack:///./src/mixins/routable.js"",""webpack:///./src/stylus/components/_input-groups.styl"",""webpack:///./src/mixins/input.js"",""webpack:///./src/mixins/dependent.js"",""webpack:///./src/components/VCard/index.js"",""webpack:///./src/mixins/applicationable.js"",""webpack:///./src/mixins/detachable.js"",""webpack:///./src/mixins/positionable.js"",""webpack:///./src/stylus/components/_selection-controls.styl"",""webpack:///./src/mixins/rippleable.js"",""webpack:///./src/stylus/components/_grid.styl"",""webpack:///./src/components/VGrid/grid.js"",""webpack:///./src/mixins/contextualable.js"",""webpack:///./src/mixins/button-group.js"",""webpack:///./src/components/VDialog/VDialog.js"",""webpack:///./src/mixins/overlayable.js"",""webpack:///./src/mixins/stackable.js"",""webpack:///./src/components/VCheckbox/index.js"",""webpack:///./src/components/transitions/row-expand-transition.js"",""webpack:///./src/mixins/selectable.js"",""webpack:///./src/mixins/loadable.js"",""webpack:///./src/components/VProgressLinear/index.js"",""webpack:///./src/components/VSelect/index.js"",""webpack:///./src/stylus/components/_text-fields.styl"",""webpack:///./src/components/VList/index.js"",""webpack:///./src/components/VMenu/index.js"",""webpack:///./src/mixins/delayable.js"",""webpack:///./src/mixins/menuable.js"",""webpack:///./src/mixins/filterable.js"",""webpack:///./src/mixins/maskable.js"",""webpack:///./src/util/mask.js"",""webpack:///./src/stylus/components/_pickers.styl"",""webpack:///./src/mixins/picker.js"",""webpack:///./src/index.js"",""webpack:///./src/stylus/app.styl"",""webpack:///./node_modules/semver/semver.js"",""webpack:///./node_modules/process/browser.js"",""webpack:///./package.json"",""webpack:///./src/components/index.js"",""webpack:///./src/components/Vuetify/index.js"",""webpack:///./src/util/load.js"",""webpack:///./src/components/VApp/index.js"",""webpack:///./src/components/VApp/VApp.js"",""webpack:///./src/stylus/components/_app.styl"",""webpack:///./src/util/breakpoint.js"",""webpack:///./src/util/touchSupport.js"",""webpack:///./src/components/VAlert/index.js"",""webpack:///./src/components/VAlert/VAlert.js"",""webpack:///./src/stylus/components/_alerts.styl"",""webpack:///./src/components/VIcon/VIcon.js"",""webpack:///./src/stylus/components/_icons.styl"",""webpack:///./src/mixins/transitionable.js"",""webpack:///./src/components/VAvatar/index.js"",""webpack:///./src/components/VAvatar/VAvatar.js"",""webpack:///./src/stylus/components/_avatars.styl"",""webpack:///./src/components/VBadge/index.js"",""webpack:///./src/components/VBadge/VBadge.js"",""webpack:///./src/stylus/components/_badges.styl"",""webpack:///./src/components/VBottomNav/index.js"",""webpack:///./src/components/VBottomNav/VBottomNav.js"",""webpack:///./src/stylus/components/_bottom-navs.styl"",""webpack:///./src/components/VBottomSheet/index.js"",""webpack:///./src/components/VBottomSheet/VBottomSheet.js"",""webpack:///./src/stylus/components/_bottom-sheets.styl"",""webpack:///./src/stylus/components/_dialogs.styl"",""webpack:///./src/stylus/components/_overlay.styl"",""webpack:///./src/components/VBreadcrumbs/index.js"",""webpack:///./src/components/VBreadcrumbs/VBreadcrumbs.js"",""webpack:///./src/stylus/components/_breadcrumbs.styl"",""webpack:///./src/components/VBreadcrumbs/VBreadcrumbsItem.js"",""webpack:///./src/components/VBtn/VBtn.js"",""webpack:///./src/stylus/components/_buttons.styl"",""webpack:///./src/components/VBtnToggle/index.js"",""webpack:///./src/components/VBtnToggle/VBtnToggle.js"",""webpack:///./src/stylus/components/_button-toggle.styl"",""webpack:///./src/components/VCard/VCard.js"",""webpack:///./src/stylus/components/_cards.styl"",""webpack:///./src/components/VCard/VCardMedia.js"",""webpack:///./src/components/VCard/VCardTitle.js"",""webpack:///./src/components/VCarousel/index.js"",""webpack:///./src/components/VCarousel/VCarousel.js"",""webpack:///./src/stylus/components/_carousel.styl"",""webpack:///./src/components/VCarousel/VCarouselItem.js"",""webpack:///./src/components/VCheckbox/VCheckbox.js"",""webpack:///./src/components/transitions/expand-transition.js"",""webpack:///./src/mixins/validatable.js"",""webpack:///./src/components/VChip/index.js"",""webpack:///./src/components/VChip/VChip.js"",""webpack:///./src/stylus/components/_chips.styl"",""webpack:///./src/components/VDataTable/index.js"",""webpack:///./src/components/VDataTable/VDataTable.js"",""webpack:///./src/stylus/components/_tables.styl"",""webpack:///./src/stylus/components/_data-table.styl"",""webpack:///./src/components/VProgressLinear/VProgressLinear.js"",""webpack:///./src/stylus/components/_progress-linear.styl"",""webpack:///./src/components/VSelect/VSelect.js"",""webpack:///./src/stylus/components/_select.styl"",""webpack:///./src/components/VList/VList.js"",""webpack:///./src/stylus/components/_lists.styl"",""webpack:///./src/components/VList/VListGroup.js"",""webpack:///./src/components/VList/VListTile.js"",""webpack:///./src/components/VList/VListTileAction.js"",""webpack:///./src/components/VMenu/VMenu.js"",""webpack:///./src/stylus/components/_menus.styl"",""webpack:///./src/components/VMenu/mixins/menu-activator.js"",""webpack:///./src/components/VMenu/mixins/menu-generators.js"",""webpack:///./src/components/VMenu/mixins/menu-keyable.js"",""webpack:///./src/components/VMenu/mixins/menu-position.js"",""webpack:///./src/components/VSelect/mixins/select-autocomplete.js"",""webpack:///./src/components/VSelect/mixins/select-generators.js"",""webpack:///./src/components/VDataTable/mixins/head.js"",""webpack:///./src/components/VDataTable/mixins/body.js"",""webpack:///./src/components/VDataTable/mixins/foot.js"",""webpack:///./src/components/VDataTable/mixins/progress.js"",""webpack:///./src/components/VDataTable/VEditDialog.js"",""webpack:///./src/stylus/components/_small-dialog.styl"",""webpack:///./src/components/VDatePicker/index.js"",""webpack:///./src/components/VDatePicker/VDatePicker.js"",""webpack:///./src/stylus/components/_date-picker.styl"",""webpack:///./src/components/VDatePicker/mixins/date-years.js"",""webpack:///./src/components/VDatePicker/mixins/date-title.js"",""webpack:///./src/components/VDatePicker/mixins/date-header.js"",""webpack:///./src/components/VDatePicker/mixins/date-table.js"",""webpack:///./src/components/VDatePicker/mixins/month-table.js"",""webpack:///./src/components/VDialog/index.js"",""webpack:///./src/components/VDivider/index.js"",""webpack:///./src/components/VDivider/VDivider.js"",""webpack:///./src/stylus/components/_dividers.styl"",""webpack:///./src/components/VExpansionPanel/index.js"",""webpack:///./src/components/VExpansionPanel/VExpansionPanel.js"",""webpack:///./src/stylus/components/_expansion-panel.styl"",""webpack:///./src/components/VExpansionPanel/VExpansionPanelContent.js"",""webpack:///./src/components/VFooter/index.js"",""webpack:///./src/components/VFooter/VFooter.js"",""webpack:///./src/stylus/components/_footer.styl"",""webpack:///./src/components/VForm/index.js"",""webpack:///./src/components/VForm/VForm.js"",""webpack:///./src/components/VGrid/index.js"",""webpack:///./src/components/VGrid/VContent.js"",""webpack:///./src/stylus/components/_content.styl"",""webpack:///./src/components/VGrid/VContainer.js"",""webpack:///./src/components/VGrid/VFlex.js"",""webpack:///./src/components/VGrid/VLayout.js"",""webpack:///./src/components/VNavigationDrawer/index.js"",""webpack:///./src/components/VNavigationDrawer/VNavigationDrawer.js"",""webpack:///./src/stylus/components/_navigation-drawer.styl"",""webpack:///./src/components/VPagination/index.js"",""webpack:///./src/components/VPagination/VPagination.js"",""webpack:///./src/stylus/components/_pagination.styl"",""webpack:///./src/components/VParallax/index.js"",""webpack:///./src/components/VParallax/VParallax.js"",""webpack:///./src/stylus/components/_parallax.styl"",""webpack:///./src/mixins/translatable.js"",""webpack:///./src/components/VProgressCircular/index.js"",""webpack:///./src/components/VProgressCircular/VProgressCircular.js"",""webpack:///./src/stylus/components/_progress-circular.styl"",""webpack:///./src/components/VRadioGroup/index.js"",""webpack:///./src/components/VRadioGroup/VRadioGroup.js"",""webpack:///./src/stylus/components/_radio-group.styl"",""webpack:///./src/components/VRadioGroup/VRadio.js"",""webpack:///./src/mixins/tab-focusable.js"",""webpack:///./src/components/VSlider/index.js"",""webpack:///./src/components/VSlider/VSlider.js"",""webpack:///./src/stylus/components/_sliders.styl"",""webpack:///./src/components/VSnackbar/index.js"",""webpack:///./src/components/VSnackbar/VSnackbar.js"",""webpack:///./src/stylus/components/_snackbars.styl"",""webpack:///./src/components/VSpeedDial/index.js"",""webpack:///./src/components/VSpeedDial/VSpeedDial.js"",""webpack:///./src/stylus/components/_speed-dial.styl"",""webpack:///./src/components/VStepper/index.js"",""webpack:///./src/components/VStepper/VStepper.js"",""webpack:///./src/stylus/components/_steppers.styl"",""webpack:///./src/components/VStepper/VStepperStep.js"",""webpack:///./src/components/VStepper/VStepperContent.js"",""webpack:///./src/components/VSubheader/index.js"",""webpack:///./src/components/VSubheader/VSubheader.js"",""webpack:///./src/stylus/components/_subheaders.styl"",""webpack:///./src/components/VSwitch/index.js"",""webpack:///./src/components/VSwitch/VSwitch.js"",""webpack:///./src/stylus/components/_switch.styl"",""webpack:///./src/components/VSystemBar/index.js"",""webpack:///./src/components/VSystemBar/VSystemBar.js"",""webpack:///./src/stylus/components/_system-bars.styl"",""webpack:///./src/components/VTabs/index.js"",""webpack:///./src/components/VTabs/VTabs.js"",""webpack:///./src/stylus/components/_tabs.styl"",""webpack:///./src/components/VTabs/VTabsBar.js"",""webpack:///./src/components/VTabs/VTabsContent.js"",""webpack:///./src/components/VTabs/VTabsItem.js"",""webpack:///./src/components/VTabs/VTabsItems.js"",""webpack:///./src/components/VTabs/VTabsSlider.js"",""webpack:///./src/components/VTextField/index.js"",""webpack:///./src/components/VTextField/VTextField.js"",""webpack:///./src/components/VTimePicker/index.js"",""webpack:///./src/components/VTimePicker/VTimePicker.js"",""webpack:///./src/stylus/components/_time-picker.styl"",""webpack:///./src/components/VTimePicker/mixins/time-title.js"",""webpack:///./src/components/VTimePicker/mixins/time-body.js"",""webpack:///./src/components/VToolbar/index.js"",""webpack:///./src/components/VToolbar/VToolbar.js"",""webpack:///./src/stylus/components/_toolbar.styl"",""webpack:///./src/components/VToolbar/VToolbarSideIcon.js"",""webpack:///./src/components/VTooltip/index.js"",""webpack:///./src/components/VTooltip/VTooltip.js"",""webpack:///./src/stylus/components/_tooltips.styl"",""webpack:///./src/directives/index.js"",""webpack:///./src/directives/scroll.js""],""names"":[""props"",""dark"",""Boolean"",""light"",""computed"",""themeClasses"",""createSimpleFunctional"",""c"",""el"",""name"",""replace"",""functional"",""render"",""h"",""data"",""children"",""staticClass"",""trim"",""createSimpleTransition"",""origin"",""mode"",""type"",""String"",""default"",""context"",""on"",""Object"",""isExtensible"",""beforeEnter"",""style"",""transformOrigin"",""webkitTransformOrigin"",""createJavaScriptTransition"",""functions"",""css"",""directiveConfig"",""binding"",""defaults"",""assign"",""modifiers"",""value"",""arg"",""addOnceEventListener"",""event"",""cb"",""once"",""removeEventListener"",""addEventListener"",""getObjectValueByPath"",""obj"",""path"",""constructor"",""a"",""split"",""i"",""n"",""length"",""k"",""createRange"",""Array"",""from"",""v"",""getZIndex"",""nodeType"",""Node"",""ELEMENT_NODE"",""zi"",""document"",""defaultView"",""getComputedStyle"",""getPropertyValue"",""isNaN"",""parentNode"",""color"",""methods"",""addBackgroundColorClassChecks"",""classes"",""prop"",""addTextColorClassChecks"",""parts"",""VIcon"",""install"",""Vue"",""component"",""factory"",""model"",""required"",""isActive"",""watch"",""val"",""$emit"",""Toggleable"",""VBottomSheetTranstion"",""VCarouselTransition"",""VCarouselReverseTransition"",""VTabTransition"",""VTabReverseTransition"",""VMenuTransition"",""VFabTransition"",""VDialogTransition"",""VDialogBottomTransition"",""VFadeTransition"",""VScaleTransition"",""VSlideXTransition"",""VSlideXReverseTransition"",""VSlideYTransition"",""VSlideYReverseTransition"",""VExpandTransition"",""VRowExpandTransition"",""directive"",""e"",""callback"",""elements"",""include"",""push"",""clickedInEls"",""setTimeout"",""x"",""clientX"",""y"",""clientY"",""clickedInEl"",""b"",""getBoundingClientRect"",""left"",""right"",""top"",""bottom"",""bind"",""$vuetify"",""load"",""onClick"",""app"",""querySelector"",""body"",""_clickOutside"",""unbind"",""inserted"",""debounce"",""debounceTimeout"",""onResize"",""clearTimeout"",""window"",""passive"",""_onResize"",""touchstart"",""wrapper"",""touch"",""changedTouches"",""touchstartX"",""touchstartY"",""start"",""touchend"",""touchendX"",""touchendY"",""end"",""handleGesture"",""touchmove"",""touchmoveX"",""touchmoveY"",""move"",""dirRatio"",""minDistance"",""offsetX"",""offsetY"",""Math"",""abs"",""up"",""down"",""target"",""parent"",""options"",""forEach"",""RippleDataAttribute"",""ripple"",""show"",""getAttribute"",""container"",""createElement"",""animation"",""appendChild"",""className"",""class"",""size"",""clientWidth"",""clientHeight"",""width"",""center"",""height"",""position"",""offset"",""classList"",""add"",""dataset"",""activated"",""Date"",""now"",""remove"",""hide"",""ripples"",""getElementsByClassName"",""diff"",""Number"",""delay"",""removeChild"",""setAttribute"",""update"",""oldValue"",""VBtn"",""isBooted"",""lazy"",""showLazyContent"",""content"",""directives"",""Ripple"",""activeClass"",""append"",""disabled"",""exact"",""href"",""to"",""nuxt"",""tag"",""click"",""generateRouteLink"",""attrs"",""$listeners"",""components"",""mixins"",""isFocused"",""tabFocused"",""internalTabIndex"",""lazyValue"",""appendIcon"",""appendIconCb"",""Function"",""hint"",""hideDetails"",""label"",""persistentHint"",""placeholder"",""prependIcon"",""prependIconCb"",""readonly"",""tabindex"",""toggleKeys"",""inputGroupClasses"",""loading"",""isDirty"",""hasError"",""inputValue"",""groupFocus"",""groupBlur"",""genLabel"",""$createElement"",""for"",""$attrs"",""id"",""$slots"",""genMessages"",""messages"",""validations"",""genHint"",""map"",""genError"",""key"",""domProps"",""innerHTML"",""error"",""genIcon"",""defaultCallback"",""shouldClear"",""clearable"",""icon"",""clearableCallback"",""stopPropagation"",""genInputGroup"",""input"",""defaultAppendCallback"",""wrapperChildren"",""detailsChildren"",""focus"",""blur"",""keyup"",""includes"",""keyCode"",""keydown"",""toggle"",""preventDefault"",""unshift"",""progress"",""genProgress"",""counter"",""genCounter"",""searchChildren"",""results"",""child"",""isDependent"",""$children"",""closeDependents"",""getOpenDependents"",""getOpenDependentElements"",""result"",""dependent"",""getClickableDependentElements"",""$el"",""$refs"",""VCard"",""VCardActions"",""VCardText"",""VCardMedia"",""VCardTitle"",""created"",""updateApplication"",""contentClass"",""mounted"",""initDetach"",""beforeDestroy"",""_isDestroyed"",""console"",""warn"",""insertBefore"",""firstChild"",""absolute"",""fixed"",""genRipple"",""rippleClasses"",""Grid"",""keys"",""join"",""primary"",""secondary"",""success"",""info"",""warning"",""buttons"",""listeners"",""getValue"",""selected"",""button"",""elm"",""removeAttribute"",""isSelected"",""contains"",""index"",""updateValue"",""$on"",""$off"",""require"",""ClickOutside"",""stackClass"",""stackMinZIndex"",""persistent"",""fullscreen"",""fullWidth"",""maxWidth"",""scrollable"",""transition"",""stackedActions"",""contentClasses"",""removeOverlay"",""init"",""closeConditional"",""getMaxZIndex"",""hideOverlay"",""genOverlay"",""hideScroll"",""onKeydown"",""ref"",""log"",""activator"",""dialog"",""zIndex"",""activeZIndex"",""display"",""overlay"",""overlayOffset"",""overlayTimeout"",""overlayTransitionDuration"",""requestAnimationFrame"",""undefined"",""showScroll"",""scrollListener"",""deltaY"",""checkPath"",""hasScrollbar"",""scrollHeight"",""shouldScroll"",""delta"",""scrollTop"",""isInside"",""composedPath"",""wheelDelta"",""getSelection"",""anchorNode"",""documentElement"",""tagName"",""parentElement"",""breakpoint"",""mdAndDown"",""stackBase"",""stackElement"",""stackExclude"",""exclude"",""base"",""zis"",""activeElements"",""activeElement"",""max"",""VCheckbox"",""enter"",""done"",""td"",""overflow"",""afterEnter"",""leave"",""afterLeave"",""falseValue"",""trueValue"",""isArray"",""indexOf"",""indeterminate"",""inputIndeterminate"",""slice"",""splice"",""validate"",""VProgressLinear"",""VSelect"",""VListTileActionText"",""VListTileAvatar"",""VListTileContent"",""VListTileTitle"",""VListTileSubTitle"",""VList"",""VListGroup"",""VListTile"",""VListTileAction"",""VMenu"",""openTimeout"",""closeTimeout"",""openDelay"",""closeDelay"",""clearDelay"",""runDelay"",""parseInt"",""dimensions"",""offsetTop"",""hasWindow"",""absoluteX"",""absoluteY"",""isContentActive"",""pageYOffset"",""allowOverflow"",""minWidth"",""nudgeBottom"",""nudgeLeft"",""nudgeRight"",""nudgeTop"",""nudgeWidth"",""offsetOverflow"",""positionX"",""positionY"",""hasActivator"",""callDeactivate"",""callActivate"",""absolutePosition"",""activate"",""calcLeft"",""calcTop"",""checkForWindow"",""calcXOverflow"",""parsedMaxWidth"",""innerWidth"",""getInnerWidth"",""totalWidth"",""availableWidth"",""calcYOverflow"",""documentHeight"",""getInnerHeight"",""toTop"",""contentHeight"",""totalHeight"",""isOverflowing"",""deactivate"",""getOffsetTop"",""getActivator"",""innerHeight"",""measure"",""selector"",""sneakPeek"",""isShown"",""startTransition"",""resetDimensions"",""updateDimensions"",""noDataText"",""selection"",""preDefined"",""dontFillMaskBlanks"",""mask"",""returnMaskedValue"",""masked"",""oldText"",""newText"",""maskText"",""substr"",""char"",""isMaskDelimiter"",""setCaretPosition"",""setSelectionRange"",""updateRange"",""newValue"",""lazySelection"",""text"",""unmaskText"",""$nextTick"",""allowedMasks"",""test"",""match"",""convert"",""toUpperCase"",""toLowerCase"",""defaultDelimiters"",""isMask"",""hasOwnProperty"",""maskValidates"",""textIndex"",""maskIndex"",""RegExp"",""isSaving"",""actions"",""autosave"",""landscape"",""noTitle"",""save"",""cancel"",""genSlot"",""$scopedSlots"",""Vuetify"",""use"",""version"",""checkVueVersion"",""vueDep"",""devDependencies"",""vue"",""Semver"",""satisfies"",""opts"",""application"",""bar"",""touchSupport"",""util"",""defineReactive"",""prototype"",""transitions"",""t"",""startsWith"",""d"",""_loadCallbacks"",""readyState"",""VApp"",""Resize"",""resizeTimeout"",""runCallbacks"",""pop"",""clientDimensions"",""getWidth"",""getHeight"",""xs"",""sm"",""md"",""lg"",""xl"",""xsOnly"",""smOnly"",""smAndDown"",""smAndUp"",""mdOnly"",""mdAndUp"",""lgOnly"",""lgAndDown"",""lgAndUp"",""xlOnly"",""VAlert"",""dismissible"",""close"",""alert"",""large"",""medium"",""xLarge"",""Contextualable"",""fa"",""mdi"",""iconName"",""iconType"",""textContent"",""thirdPartyIcon"",""Colorable"",""call"",""iconClasses"",""filter"",""comparison"",""VAvatar"",""tile"",""VBadge"",""overlap"",""badge"",""VBottomNav"",""active"",""shift"",""item"",""VBottomSheet"",""VDialog"",""inset"",""slot"",""VBreadcrumbs"",""VBreadcrumbsItem"",""provide"",""divider"",""icons"",""items"",""inject"",""ToggleableFactory"",""block"",""fab"",""flat"",""outline"",""raised"",""round"",""small"",""colorBackground"",""colorText"",""hover"",""detail"",""genContent"",""genLoader"",""loader"",""JSON"",""stringify"",""VBtnToggle"",""mandatory"",""multiple"",""hasValue"",""handler"",""deep"",""img"",""horizontal"",""styles"",""background"",""contain"",""src"",""primaryTitle"",""VCarousel"",""VCarouselItem"",""Touch"",""slideTimeout"",""reverse"",""cycle"",""hideControls"",""interval"",""validator"",""leftControlIcon"",""rightControlIcon"",""open"",""_uid"",""restartTimeout"",""genControls"",""genItems"",""direction"",""fn"",""select"",""raf"",""startTimeout"",""next"",""prev"",""reverseTransition"",""computedTransition"",""backgroundImage"",""role"",""errorBucket"",""hasFocused"",""hasInput"",""shouldValidate"",""valid"",""errorMessages"",""rules"",""validateOnBlur"",""newVal"",""oldVal"",""reset"",""isMultiple"",""force"",""rule"",""TypeError"",""VChip"",""textColor"",""VDataTable"",""VTableOverflow"",""VEditDialog"",""all"",""searchLength"",""defaultPagination"",""descending"",""page"",""rowsPerPage"",""sortBy"",""totalItems"",""expanded"",""expand"",""headers"",""headerText"",""hideActions"",""hideHeaders"",""mustSort"",""noResultsText"",""rowsPerPageItems"",""rowsPerPageText"",""selectAll"",""search"",""toString"",""customFilter"",""some"",""j"",""customSort"",""isDescending"",""sort"",""sortA"",""sortB"",""s"",""toLocaleLowerCase"",""itemKey"",""pagination"",""computedPagination"",""hasPagination"",""hasSelectAll"",""itemsLength"",""someItems"",""everyItem"",""filteredItems"",""every"",""getPage"",""pageStart"",""pageStop"",""hasSearch"",""updatePagination"",""updatedPagination"",""isExpanded"",""needsTR"",""row"",""find"",""genTR"",""firstSortable"",""sortable"",""genTHead"",""genTProgress"",""genTBody"",""genTFoot"",""backgroundColor"",""backgroundOpacity"",""bufferValue"",""query"",""effectiveWidth"",""bufferStyles"",""backgroundStyle"",""parseFloat"",""opacity"",""genDeterminate"",""genBar"",""genIndeterminate"",""fade"",""slide"",""inheritAttrs"",""cachedItems"",""tags"",""lastItem"",""lazySearch"",""menuIsActive"",""searchTimeout"",""selectedIndex"",""selectedItems"",""shouldBreak"",""auto"",""autocomplete"",""cacheItems"",""chips"",""combobox"",""debounceSearch"",""browserAutocomplete"",""itemAvatar"",""itemText"",""itemValue"",""itemDisabled"",""maxHeight"",""multiLine"",""solo"",""searchInput"",""singleLine"",""returnObject"",""segmented"",""editable"",""isAutocomplete"",""isDropdown"",""computedContentClass"",""computedItems"",""filterDuplicates"",""concat"",""currentRange"",""getText"",""selectedItem"",""isNotFiltering"",""filterSearch"",""hideSelections"",""searchValue"",""get"",""set"",""genSelectedItems"",""onScroll"",""scrollLeft"",""scrollWidth"",""menu"",""listIndex"",""changeSelectedIndex"",""indexes"",""newIndex"",""selectItem"",""compareObjects"",""aProps"",""bProps"",""propName"",""arr"",""values"",""genDirectives"",""genListeners"",""showMenuItems"",""onKeyDown"",""getPropertyFromItem"",""field"",""showMenu"",""showMoreItems"",""findIndex"",""savedIndex"",""genSelectionsAndSearch"",""genMenu"",""listClick"",""listClose"",""uid"",""groups"",""dense"",""subheader"",""threeLine"",""twoLine"",""$options"",""_componentTag"",""group"",""noAction"",""$route"",""matchRoute"",""avatar"",""inactive"",""isLink"",""isRouteLink"",""defaultOffset"",""maxHeightAutoDefault"",""startIndex"",""stopIndex"",""hasJustFocused"",""closeOnClick"",""closeOnContentClick"",""openOnClick"",""openOnHover"",""calculatedLeft"",""calcLeftAuto"",""calculatedMaxHeight"",""calculatedMaxWidth"",""calculatedMinWidth"",""min"",""calculatedTop"",""calcTopAuto"",""newActivator"",""oldActivator"",""removeActivatorEvents"",""addActivatorEvents"",""getTiles"",""calculateScroll"",""offsetWidth"",""changeListIndex"",""genActivator"",""genTransition"",""activatorClickHandler"",""mouseEnterHandler"",""mouseLeaveHandler"",""relatedTarget"",""mouseenter"",""mouseleave"",""tiles"",""querySelectorAll"",""actingIndex"",""offsetPadding"",""queryText"",""genFiltered"",""getMaskedCharacters"",""middle"",""genHighlight"",""newItem"",""addTag"",""selectionStart"",""selectionEnd"",""$delete"",""menuZIndex"",""genList"",""genSelections"",""genSearch"",""slots"",""genSlotSelection"",""genChipSelection"",""genSegmentedBtn"",""genCommaSelection"",""flex"",""isDisabled"",""comma"",""o"",""header"",""genHeader"",""genDivider"",""genTile"",""noData"",""genAction"",""checkbox"",""change"",""array"",""headerCell"",""genHeaderData"",""scope"",""genHeaderSortingData"",""align"",""tabIndex"",""beingSorted"",""genEmptyBody"",""genFilteredItems"",""genExpandedRow"",""colspan"",""RowExpandTransitionFunctions"",""createProps"",""defineProperty"",""$set"",""rows"",""expandRow"",""genPrevIcon"",""genNextIcon"",""genSelect"",""genPagination"",""stop"",""pageText"",""genActions"",""footer"",""col"",""cancelText"",""saveText"",""genButton"",""VDatePicker"",""createDefaultDateFormat"",""pad"",""isoString"",""date"",""getFullYear"",""getMonth"",""getDate"",""month"",""year"",""tableDate"",""originalDate"",""currentDay"",""currentMonth"",""currentYear"",""isReversing"",""narrowDays"",""activePicker"",""locale"",""dateFormat"",""titleDateFormat"",""headerDateFormat"",""monthFormat"",""formattedValue"",""allowedDates"",""firstDayOfWeek"",""yearIcon"",""timeZone"",""Intl"",""DateTimeFormat"",""resolvedOptions"",""toLocaleDateString"",""day"",""supportsLocaleFormat"",""firstAllowedDate"",""setDate"",""setHours"",""setMonth"",""isAllowed"",""inputDate"",""makeDate"",""pickerDateFormat"",""tableMonth"",""tableYear"",""titleText"",""normalizeDate"",""defaultTitleDateFormat"",""weekday"",""setInterval"",""years"",""clearInterval"",""getWeekDays"",""$parent"",""first"",""getDay"",""format"",""allowedDate"",""genTableTouch"",""touchCallback"",""genTable"",""tableChildren"",""wheel"",""monthWheelScroll"",""dateWheelScroll"",""table"",""genPickerBody"",""pickerBodyChildren"",""genSelector"",""dateGenTHead"",""dateGenTBody"",""monthGenTBody"",""genYears"",""genTitle"",""genYearItems"",""yearClick"",""buttonText"",""genYearIcon"",""getYearBtn"",""titleDate"",""genTitleText"",""title"",""genTitleDate"",""genBtn"",""nativeOn"",""keyValue"",""selectorText"",""selectorDate"",""days"",""dateGenTR"",""dateClick"",""dateGenButtonText"",""dateGenTD"",""dateIsActive"",""dateIsCurrent"",""daysInMonth"",""monthClick"",""monthGenTD"",""monthName"",""monthIsActive"",""monthIsCurrent"",""cols"",""fill"",""_"",""VDivider"",""VExpansionPanel"",""VExpansionPanelContent"",""panelClick"",""focusable"",""popout"",""getChildren"",""panel"",""genBody"",""VFooter"",""paddingLeft"",""paddingRight"",""destroyed"",""VForm"",""inputs"",""errorBag"",""lazyValidation"",""errors"",""getInputs"",""depth"",""watchInputs"",""watchChild"",""watcher"",""$watch"",""immediate"",""updated"",""removed"",""submit"",""VSpacer"",""VGrid"",""VContent"",""VContainer"",""VFlex"",""VLayout"",""paddingTop"",""paddingBottom"",""VNavigationDrawer"",""isMobile"",""touchArea"",""clipped"",""disableRouteWatcher"",""enableResizeWatcher"",""floating"",""miniVariant"",""miniVariantWidth"",""mobileBreakPoint"",""permanent"",""temporary"",""touchless"",""calculatedHeight"",""calculatedWidth"",""marginTop"",""showOverlay"",""calculateTouchArea"",""parentRect"",""checkIfMobile"",""swipeLeft"",""swipeRight"",""VPagination"",""circle"",""totalVisible"",""nextIcon"",""prevIcon"",""maxButtons"",""maxLength"",""range"",""even"",""floor"",""previous"",""genItem"",""VParallax"",""alt"",""jumbotron"",""transform"",""parallax"",""complete"",""translate"",""objHeight"",""naturalHeight"",""elOffsetTop"",""imgData"",""normalizedHeight"",""parallaxDist"",""percentScrolled"",""windowHeight"",""windowBottom"",""imgHeight"",""calcDimensions"",""translated"",""VProgressCircular"",""rotate"",""calculatedSize"",""circumference"",""PI"",""radius"",""cxy"",""normalizedValue"",""strokeDashArray"",""strokeDashOffset"",""svgSize"",""svgStyles"",""viewBox"",""genCircle"",""cx"",""cy"",""r"",""genSvg"",""xmlns"",""svg"",""VRadioGroup"",""VRadio"",""isMandatory"",""registerChild"",""unregisterChild"",""column"",""getRadios"",""radio"",""toggleRadio"",""radioBlur"",""radioFocus"",""genInput"",""genWrapper"",""checked"",""$vnode"",""endsWith"",""VSlider"",""keyPressed"",""step"",""thumbColor"",""thumbLabel"",""snap"",""trackColor"",""inputWidth"",""thumbContainerClasses"",""thumbStyles"",""tickContainerStyles"",""trackStyles"",""scaleX"",""calculateScale"",""translateX"",""trackFillStyles"",""numTicks"",""scale"",""onMouseDown"",""onMouseMove"",""onMouseUp"",""track"",""offsetLeft"",""trackWidth"",""touches"",""multiplier"",""shiftKey"",""ctrlKey"",""amount"",""onKeyUp"",""sliderMove"",""genThumbLabel"",""genThumbContainer"",""mousedown"",""genSteps"",""ticks"",""span"",""genTrackContainer"",""slider"",""mouseup"",""VSnackbar"",""activeTimeout"",""timeout"",""vertical"",""VSpeedDial"",""list"",""VStepper"",""VStepperHeader"",""VStepperItems"",""VStepperContent"",""VStepperStep"",""stepClick"",""steps"",""isReverse"",""nonLinear"",""altLabels"",""getSteps"",""isVertical"",""isInactive"",""completeIcon"",""editIcon"",""errorIcon"",""stepContent"",""wrapperClasses"",""onTransition"",""contentData"",""wrapperData"",""VSubheader"",""VSwitch"",""containerClasses"",""toggleClasses"",""VSystemBar"",""lightsOut"",""status"",""computedHeight"",""VTabs"",""VTabsBar"",""VTabsContent"",""VTabsItem"",""VTabsItems"",""VTabsSlider"",""registerContent"",""unregisterContent"",""registerTabItem"",""unregisterTabItem"",""tabClick"",""isScrollable"",""tabItems"",""activeIndex"",""tabsSlider"",""targetEl"",""tabsContainer"",""transitionTime"",""centered"",""grow"",""updateTabs"",""newItems"",""oldItems"",""onContainerResize"",""tab"",""nextIndex"",""prevIndex"",""setActiveIndex"",""addTabItem"",""action"",""removeTabItem"",""scrollOffset"",""itemOffset"",""startX"",""containerStyles"",""leftIconVisible"",""rightIconVisible"",""newOffsetRight"",""itemWidth"",""genContainer"",""capitalize"",""charAt"",""newOffset"",""scrollRight"",""newOffsetLeft"",""currentOffset"",""currentIndex"",""showTransition"",""div"",""callSlider"",""link"",""VTextField"",""initialValue"",""inputHeight"",""badInput"",""autofocus"",""autoGrow"",""box"",""prefix"",""suffix"",""textarea"",""count"",""inputLength"",""counterLength"",""parsedLength"",""shouldAutoGrow"",""calculateInputHeight"",""minHeight"",""onInput"",""resetSelections"",""validity"",""maxlength"",""genFix"",""VTimePicker"",""isDragging"",""originalTime"",""period"",""selectingHour"",""ranges"",""hours"",""minutes"",""allowedHours"",""allowedMinutes"",""is24hr"",""is24hrAfter12"",""hour"",""degrees"",""degreesPerUnit"",""inputTime"",""getHours"",""minute"",""getMinutes"",""firstAllowed"",""timeArray"",""clockHand"",""clockSize"",""allowed"",""mod"",""convert12to24hr"",""pm"",""generateRange"",""genTime"",""genAMPM"",""genPeriod"",""hasChanged"",""genHand"",""mousemove"",""onDragMove"",""genHours"",""genMinutes"",""changing"",""getTransform"",""num"",""getPosition"",""radiusPercentage"",""sin"",""cos"",""changeHour"",""time"",""changeMinute"",""current"",""m"",""rect"",""clock"",""coords"",""selecting"",""angle"",""insideClick"",""euclidean"",""p0"",""p1"",""dx"",""dy"",""sqrt"",""atan2"",""VToolbarTitle"",""VToolbarItems"",""VToolbar"",""heights"",""mobileLandscape"",""mobile"",""desktop"",""denseHeight"",""defaultHeight"",""prominentHeight"",""isExtended"",""isScrollingProxy"",""previousScroll"",""card"",""clippedLeft"",""clippedRight"",""extended"",""manualScroll"",""prominent"",""scrollOffScreen"",""scrollTarget"",""scrollThreshold"",""computedMarginTop"",""isScrolling"",""whenScrolled"",""currentScroll"",""extension"",""defaultSlot"",""VTooltip"",""tooltip"",""_onScroll""],""mappings"":""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CA,OAAO5D,GAA5C,EAAiD;AAC/C4D,SAAO5D,GAAP,CAAWyc,OAAX,IAAsBC,iBAAtB;AACA9Y,SAAO5D,GAAP,CAAWwc,GAAX,CAAeD,OAAf;AACD;;AAED,+DAAeA,OAAf,E;;;;;;AC7BA,yC;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,sCAAsC;AACtC,oCAAoC;AACpC,sCAAsC;AACtC,oCAAoC;AACpC,sCAAsC;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,2BAA2B;AAC3B,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,2BAA2B;AAC3B,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/wCA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,U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"",""file"":""vuetify.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""Vuetify\""] = factory();\n\telse\n\t\troot[\""Vuetify\""] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""/dist/\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 63adaf49bae41c649d1e"",""export default {\n  props: {\n    dark: Boolean,\n    light: Boolean\n  },\n\n  computed: {\n    themeClasses () {\n      return {\n        'theme--light': this.light,\n        'theme--dark': this.dark\n      }\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/themeable.js"",""export function createSimpleFunctional (c, el = 'div', name) {\n  name = name || c.replace(/__/g, '-')\n\n  return {\n    name: `v-${name}`,\n    functional: true,\n\n    render: (h, { data, children }) => {\n      data.staticClass = (`${c} ${data.staticClass || ''}`).trim()\n\n      return h(el, data, children)\n    }\n  }\n}\n\nexport function createSimpleTransition (name, origin = 'top center 0', mode) {\n  return {\n    name,\n\n    functional: true,\n\n    props: {\n      origin: {\n        type: String,\n        default: origin\n      }\n    },\n\n    render (h, context) {\n      context.data = context.data || {}\n      context.data.props = { name }\n      context.data.on = context.data.on || {}\n      if (!Object.isExtensible(context.data.on)) {\n        context.data.on = { ...context.data.on }\n      }\n\n      if (mode) context.data.props.mode = mode\n\n      context.data.on.beforeEnter = el => {\n        el.style.transformOrigin = context.props.origin\n        el.style.webkitTransformOrigin = context.props.origin\n      }\n\n      return h('transition', context.data, context.children)\n    }\n  }\n}\n\nexport function createJavaScriptTransition (name, functions, css = true, mode = 'in-out') {\n  return {\n    name,\n\n    functional: true,\n\n    props: {\n      css: {\n        type: Boolean,\n        default: css\n      },\n      mode: {\n        type: String,\n        default: mode\n      }\n    },\n\n    render (h, context) {\n      const data = {\n        props: {\n          ...context.props,\n          name\n        },\n        on: functions\n      }\n\n      return h('transition', data, context.children)\n    }\n  }\n}\n\nexport function directiveConfig (binding, defaults = {}) {\n  return Object.assign({},\n    defaults,\n    binding.modifiers,\n    { value: binding.arg },\n    binding.value || {}\n  )\n}\n\nexport function addOnceEventListener (el, event, cb) {\n  var once = () => {\n    cb()\n    el.removeEventListener(event, once, false)\n  }\n\n  el.addEventListener(event, once, false)\n}\n\nexport function getObjectValueByPath (obj, path) {\n  // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n  if (!path || path.constructor !== String) return\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n  path = path.replace(/^\\./, '') // strip a leading dot\n  const a = path.split('.')\n  for (var i = 0, n = a.length; i < n; ++i) {\n    var k = a[i]\n    if (obj instanceof Object && k in obj) {\n      obj = obj[k]\n    } else {\n      return\n    }\n  }\n  return obj\n}\n\nexport function createRange (length) {\n  return [...Array.from({ length }, (v, k) => k)]\n}\n\nexport function getZIndex (el) {\n  if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\n  var zi = document.defaultView.getComputedStyle(el).getPropertyValue('z-index')\n  if (isNaN(zi)) return getZIndex(el.parentNode)\n\n  return zi\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/helpers.js"",""export default {\n  props: {\n    color: String\n  },\n  methods: {\n    addBackgroundColorClassChecks (classes, prop = 'color') {\n      if (this[prop]) {\n        classes[this[prop]] = true\n      }\n      return classes\n    },\n    addTextColorClassChecks (classes, prop = 'color') {\n      const parts = this[prop] ? this[prop].trim().split(' ') : ['']\n      let color = parts[0] + '--text'\n      if (parts.length > 1) color += ' text--' + parts[1]\n      classes[color] = !!this[prop]\n      return classes\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/colorable.js"",""import VIcon from './VIcon'\n\nVIcon.install = function install (Vue) {\n  Vue.component(VIcon.name, VIcon)\n}\n\nexport default VIcon\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VIcon/index.js"",""export function factory (prop = 'value', event = 'input') {\n  return {\n    model: { prop, event },\n\n    props: {\n      [prop]: { required: false }\n    },\n\n    data () {\n      return {\n        isActive: !!this[prop]\n      }\n    },\n\n    watch: {\n      [prop] (val) {\n        this.isActive = !!val\n      },\n      isActive (val) {\n        !!val !== this[prop] && this.$emit(event, val)\n      }\n    }\n  }\n}\n\nconst Toggleable = factory()\n\nexport default Toggleable\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/toggleable.js"",""import {\n  createSimpleTransition,\n  createJavaScriptTransition\n} from '../../util/helpers'\n\nimport ExpandTransitionFunctions from './expand-transition'\nimport RowExpandTransitionFunctions from './row-expand-transition'\n\n// Component specific transitions\nexport const VBottomSheetTranstion = createSimpleTransition('bottom-sheet-transition')\nexport const VCarouselTransition = createSimpleTransition('carousel-transition')\nexport const VCarouselReverseTransition = createSimpleTransition('carousel-reverse-transition')\nexport const VTabTransition = createSimpleTransition('tab-transition')\nexport const VTabReverseTransition = createSimpleTransition('tab-reverse-transition')\nexport const VMenuTransition = createSimpleTransition('menu-transition')\nexport const VFabTransition = createSimpleTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogTransition = createSimpleTransition('dialog-transition')\nexport const VDialogBottomTransition = createSimpleTransition('dialog-bottom-transition')\nexport const VFadeTransition = createSimpleTransition('fade-transition')\nexport const VScaleTransition = createSimpleTransition('scale-transition')\nexport const VSlideXTransition = createSimpleTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createSimpleTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition')\n\n// JavaScript transitions\nexport const VExpandTransition = createJavaScriptTransition('expand-transition', ExpandTransitionFunctions)\nexport const VRowExpandTransition = createJavaScriptTransition('row-expand-transition', RowExpandTransitionFunctions)\n\nexport default function install (Vue) {\n  Vue.component('v-bottom-sheet-transition', VBottomSheetTranstion)\n  Vue.component('v-carousel-transition', VCarouselTransition)\n  Vue.component('v-carousel-reverse-transition', VCarouselReverseTransition)\n  Vue.component('v-dialog-transition', VDialogTransition)\n  Vue.component('v-dialog-bottom-transition', VDialogBottomTransition)\n  Vue.component('v-fab-transition', VFabTransition)\n  Vue.component('v-fade-transition', VFadeTransition)\n  Vue.component('v-menu-transition', VMenuTransition)\n  Vue.component('v-scale-transition', VScaleTransition)\n  Vue.component('v-slide-x-transition', VSlideXTransition)\n  Vue.component('v-slide-x-reverse-transition', VSlideXReverseTransition)\n  Vue.component('v-slide-y-transition', VSlideYTransition)\n  Vue.component('v-slide-y-reverse-transition', VSlideYReverseTransition)\n  Vue.component('v-tab-reverse-transition', VTabReverseTransition)\n  Vue.component('v-tab-transition', VTabTransition)\n  Vue.component('v-expand-transition', VExpandTransition)\n  Vue.component('v-row-expand-transition', VRowExpandTransition)\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/transitions/index.js"",""function directive (e, el, binding, v) {\n  // The include element callbacks below can be expensive\n  // so we should avoid calling them when we're not active.\n  // Explicitly check for false to allow fallback compatibility \n  // with non-toggleable components\n  if (!e || v.context.isActive === false) return\n\n  // Get value passed to directive\n  const val = binding.value || (() => true)\n  // Check if callback was passed in object or as the value\n  const cb = val.callback || val\n  // Check if additional elements were passed to be included in check\n  // (click must be outside all included elements, if any)\n  const elements = (val.include || (() => []))()\n  // Add the root element for the component this directive was defined on\n  elements.push(el)\n\n  // Check if it's a click outside our elements, and then if our callback returns true.\n  // Non-toggleable components should take action in their callback and return falsy.\n  // Toggleable can return true if it wants to deactivate.\n  // Note that, because we're in the capture phase, this callback will occure before\n  // the bubbling click event on any outside elements. \n  if (!clickedInEls(e, elements) && cb(e)) {\n    // Delay setting toggleable inactive to avoid conflicting \n    // with an outside click on any activator toggling our state.\n    setTimeout(() => (v.context.isActive = false), 0)\n  }\n}\n\nfunction clickedInEls (e, elements) {\n  // Get position of click\n  const { clientX: x, clientY: y } = e\n  // Loop over all included elements to see if click was in any of them\n  for (const el of elements) {\n    if (clickedInEl(el, x, y)) return true\n  }\n\n  return false\n}\n\nfunction clickedInEl (el, x, y) {\n  // Get bounding rect for element \n  // (we're in capturing event and we want to check for multiple elements,\n  //  so can't use target.)\n  const b = el.getBoundingClientRect()\n  // Check if the click was in the element's bounding rect\n\n  return x >= b.left && x <= b.right && y >= b.top && y <= b.bottom\n}\n\nexport default {\n  name: 'click-outside',\n\n  bind (el, binding, v) {\n    v.context.$vuetify.load(() => {\n      const onClick = e => directive(e, el, binding, v)\n      // iOS does not recognize click events on document\n      // or body, this is the entire purpose of the v-app\n      // component and [data-app], stop removing this\n      const app = document.querySelector('[data-app]') ||\n        document.body // This is only for unit tests\n      app.addEventListener('click', onClick, true)\n      el._clickOutside = onClick\n    })\n  },\n\n  unbind (el) {\n    const app = document.querySelector('[data-app]') ||\n      document.body // This is only for unit tests\n    app && app.removeEventListener('click', el._clickOutside, true)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/click-outside.js"",""function inserted (el, binding) {\n  let cb = binding.value\n  let debounce = 200\n\n  if (typeof binding.value !== 'function') {\n    cb = binding.value.value\n    debounce = binding.value.debounce\n  }\n\n  let debounceTimeout = setTimeout(cb, debounce)\n  const onResize = () => {\n    clearTimeout(debounceTimeout)\n    debounceTimeout = setTimeout(cb, debounce)\n  }\n\n  window.addEventListener('resize', onResize, { passive: true })\n  el._onResize = onResize\n\n  onResize()\n}\n\nfunction unbind (el, binding) {\n  window.removeEventListener('resize', el._onResize)\n}\n\nexport default {\n  name: 'resize',\n  inserted,\n  unbind\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/resize.js"",""const touchstart = (event, wrapper) => {\n  const touch = event.changedTouches[0]\n  wrapper.touchstartX = touch.clientX\n  wrapper.touchstartY = touch.clientY\n\n  wrapper.start &&\n    wrapper.start(Object.assign(event, wrapper))\n}\n\nconst touchend = (event, wrapper) => {\n  const touch = event.changedTouches[0]\n  wrapper.touchendX = touch.clientX\n  wrapper.touchendY = touch.clientY\n\n  wrapper.end &&\n    wrapper.end(Object.assign(event, wrapper))\n\n  handleGesture(wrapper)\n}\n\nconst touchmove = (event, wrapper) => {\n  const touch = event.changedTouches[0]\n  wrapper.touchmoveX = touch.clientX\n  wrapper.touchmoveY = touch.clientY\n\n  wrapper.move && wrapper.move(Object.assign(event, wrapper))\n}\n\nconst handleGesture = (wrapper) => {\n  const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n  const dirRatio = 0.5\n  const minDistance = 16\n  wrapper.offsetX = touchendX - touchstartX\n  wrapper.offsetY = touchendY - touchstartY\n\n  if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n    wrapper.left && (touchendX < touchstartX - minDistance) && wrapper.left(wrapper)\n    wrapper.right && (touchendX > touchstartX + minDistance) && wrapper.right(wrapper)\n  }\n\n  if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n    wrapper.up && (touchendY < touchstartY - minDistance) && wrapper.up(wrapper)\n    wrapper.down && (touchendY > touchstartY + minDistance) && wrapper.down(wrapper)\n  }\n}\n\nfunction inserted (el, { value }) {\n  const wrapper = {\n    touchstartX: 0,\n    touchstartY: 0,\n    touchendX: 0,\n    touchendY: 0,\n    touchmoveX: 0,\n    touchmoveY: 0,\n    offsetX: 0,\n    offsetY: 0,\n    left: value.left,\n    right: value.right,\n    up: value.up,\n    down: value.down,\n    start: value.start,\n    move: value.move,\n    end: value.end\n  }\n\n  const target = value.parent ? el.parentNode : el\n  const options = value.options || { passive: true }\n\n  // Needed to pass unit tests\n  if (!target) return\n  target.addEventListener('touchstart', e => touchstart(e, wrapper), options)\n  target.addEventListener('touchend', e => touchend(e, wrapper), options)\n  target.addEventListener('touchmove', e => touchmove(e, wrapper), options)\n}\n\nfunction unbind (el, { value }) {\n  const target = value.parent ? el.parentNode : el\n\n  if (!target) return\n\n  target.removeEventListener('touchstart', touchstart)\n  target.removeEventListener('touchend', touchend)\n  target.removeEventListener('touchmove', touchmove)\n}\n\nexport default {\n  name: 'touch',\n  inserted,\n  unbind\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/touch.js"",""function style (el, value) {\n  [\n    'transform',\n    'webkitTransform'\n  ].forEach(i => {\n    el.style[i] = value\n  })\n}\n\nconst RippleDataAttribute = 'data-ripple'\n\nconst ripple = {\n  show: (e, el, { value = {} }) => {\n    if (el.getAttribute(RippleDataAttribute) !== 'true') {\n      return\n    }\n\n    var container = document.createElement('span')\n    var animation = document.createElement('span')\n\n    container.appendChild(animation)\n    container.className = 'ripple__container'\n\n    if (value.class) {\n      container.className += ` ${value.class}`\n    }\n\n    const size = el.clientWidth > el.clientHeight\n      ? el.clientWidth\n      : el.clientHeight\n    animation.className = 'ripple__animation'\n    animation.style.width = `${size * (value.center ? 1 : 2)}px`\n    animation.style.height = animation.style.width\n\n    el.appendChild(container)\n    const computed = window.getComputedStyle(el)\n    if (computed.position !== 'absolute' && computed.position !== 'fixed') el.style.position = 'relative'\n\n    const offset = el.getBoundingClientRect()\n    const x = value.center ? '50%' : `${e.clientX - offset.left}px`\n    const y = value.center ? '50%' : `${e.clientY - offset.top}px`\n\n    animation.classList.add('ripple__animation--enter')\n    animation.classList.add('ripple__animation--visible')\n    style(animation, `translate(-50%, -50%) translate(${x}, ${y}) scale3d(0.01,0.01,0.01)`)\n    animation.dataset.activated = Date.now()\n\n    setTimeout(() => {\n      animation.classList.remove('ripple__animation--enter')\n      style(animation, `translate(-50%, -50%) translate(${x}, ${y})  scale3d(0.99,0.99,0.99)`)\n    }, 0)\n  },\n\n  hide: (el) => {\n    if (el.getAttribute(RippleDataAttribute) !== 'true') {\n      return\n    }\n\n    const ripples = el.getElementsByClassName('ripple__animation')\n\n    if (ripples.length === 0) return\n    const animation = ripples[ripples.length - 1]\n    const diff = Date.now() - Number(animation.dataset.activated)\n    let delay = 400 - diff\n\n    delay = delay < 0 ? 0 : delay\n\n    setTimeout(() => {\n      animation.classList.remove('ripple__animation--visible')\n\n      setTimeout(() => {\n        // Need to figure out a new way to do this\n        try {\n          if (ripples.length < 1) el.style.position = null\n          animation.parentNode && el.removeChild(animation.parentNode)\n        } catch (e) {}\n      }, 300)\n    }, delay)\n  }\n}\n\nfunction directive (el, binding) {\n  el.setAttribute(RippleDataAttribute, !!binding.value)\n\n  if ('ontouchstart' in window) {\n    el.addEventListener('touchend', () => ripple.hide(el), false)\n    el.addEventListener('touchcancel', () => ripple.hide(el), false)\n  }\n\n  el.addEventListener('mousedown', e => ripple.show(e, el, binding), false)\n  el.addEventListener('mouseup', () => ripple.hide(el), false)\n  el.addEventListener('mouseleave', () => ripple.hide(el), false)\n  // Anchor tags can be dragged, causes other hides to fail - #1537\n  el.addEventListener('dragstart', () => ripple.hide(el), false)\n}\n\nfunction unbind (el, binding) {\n  el.removeEventListener('touchstart', e => ripple.show(e, el, binding), false)\n  el.removeEventListener('mousedown', e => ripple.show(e, el, binding), false)\n  el.removeEventListener('touchend', () => ripple.hide(el), false)\n  el.removeEventListener('touchcancel', () => ripple.hide(el), false)\n  el.removeEventListener('mouseup', () => ripple.hide(el), false)\n  el.removeEventListener('mouseleave', () => ripple.hide(el), false)\n  el.removeEventListener('dragstart', () => ripple.hide(el), false)\n}\n\nfunction update (el, binding) {\n  if (binding.value === binding.oldValue) {\n    return\n  }\n\n  el.setAttribute(RippleDataAttribute, !!binding.value)\n}\n\nexport default {\n  name: 'ripple',\n  bind: directive,\n  unbind: unbind,\n  update: update\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/ripple.js"",""import VBtn from './VBtn'\n\nVBtn.install = function install (Vue) {\n  Vue.component(VBtn.name, VBtn)\n}\n\nexport default VBtn\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBtn/index.js"",""/**\n * Bootable\n * @mixin\n *\n * Used to add lazy content functionality to components\n * Looks for change in \""isActive\"" to automatically boot\n * Otherwise can be set manually\n */\nexport default {\n  data: () => ({\n    isBooted: false\n  }),\n\n  props: {\n    lazy: Boolean\n  },\n\n  watch: {\n    isActive () {\n      this.isBooted = true\n    }\n  },\n\n  methods: {\n    showLazyContent (content) {\n      return (this.isBooted || !this.lazy)\n        ? content\n        : null\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/bootable.js"",""import Ripple from '../directives/ripple'\n\nexport default {\n  directives: {\n    Ripple\n  },\n\n  props: {\n    activeClass: String,\n    append: Boolean,\n    disabled: Boolean,\n    exact: Boolean,\n    href: [String, Object],\n    to: [String, Object],\n    nuxt: Boolean,\n    replace: Boolean,\n    ripple: Boolean,\n    tag: String,\n    target: String\n  },\n\n  methods: {\n    click () {},\n    generateRouteLink () {\n      let exact = this.exact\n      let tag\n\n      const data = {\n        attrs: { disabled: this.disabled },\n        class: this.classes,\n        props: {},\n        directives: [{\n          name: 'ripple',\n          value: this.ripple || false\n        }],\n        on: {\n          ...(this.$listeners || {}),\n          click: this.click\n        }\n      }\n\n      if (typeof this.exact === 'undefined') {\n        exact = this.to === '/' ||\n          (this.to === Object(this.to) && this.to.path === '/')\n      }\n\n      if (this.to) {\n        tag = this.nuxt ? 'nuxt-link' : 'router-link'\n        data.props.to = this.to\n        data.props.exact = exact\n        data.props.activeClass = this.activeClass\n        data.props.append = this.append\n        data.props.replace = this.replace\n      } else {\n        tag = this.href && 'a' || this.tag || 'a'\n\n        if (tag === 'a') {\n          data.attrs.href = this.href || 'javascript:;'\n          if (this.target) data.attrs.target = this.target\n        }\n      }\n\n      return { tag, data }\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/routable.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_input-groups.styl\n// module id = 13\n// module chunks = 0"",""import Loadable from './loadable'\nimport Themeable from './themeable'\nimport Validatable from './validatable'\nimport VIcon from '../components/VIcon'\n\nexport default {\n  components: {\n    VIcon\n  },\n\n  mixins: [Loadable, Themeable, Validatable],\n\n  data () {\n    return {\n      isFocused: false,\n      tabFocused: false,\n      internalTabIndex: null,\n      lazyValue: this.value\n    }\n  },\n\n  props: {\n    appendIcon: String,\n    appendIconCb: Function,\n    disabled: Boolean,\n    hint: String,\n    hideDetails: Boolean,\n    label: String,\n    persistentHint: Boolean,\n    placeholder: String,\n    prependIcon: String,\n    prependIconCb: Function,\n    readonly: Boolean,\n    required: Boolean,\n    tabindex: {\n      default: 0\n    },\n    toggleKeys: {\n      type: Array,\n      default: () => [13, 32]\n    },\n    value: {\n      required: false\n    }\n  },\n\n  computed: {\n    inputGroupClasses () {\n      return Object.assign({\n        'input-group': true,\n        'input-group--async-loading': this.loading !== false,\n        'input-group--focused': this.isFocused,\n        'input-group--dirty': this.isDirty,\n        'input-group--tab-focused': this.tabFocused,\n        'input-group--disabled': this.disabled,\n        'input-group--error': this.hasError,\n        'input-group--append-icon': this.appendIcon,\n        'input-group--prepend-icon': this.prependIcon,\n        'input-group--required': this.required,\n        'input-group--hide-details': this.hideDetails,\n        'input-group--placeholder': !!this.placeholder,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      }, this.classes)\n    },\n    isDirty () {\n      return !!this.inputValue\n    }\n  },\n\n  methods: {\n    groupFocus (e) {},\n    groupBlur (e) {\n      this.tabFocused = false\n    },\n    genLabel () {\n      return this.$createElement('label', {\n        attrs: {\n          for: this.$attrs.id\n        }\n      }, this.$slots.label || this.label)\n    },\n    genMessages () {\n      let messages = []\n\n      if ((this.hint &&\n            this.isFocused ||\n            this.hint &&\n            this.persistentHint) &&\n          this.validations.length === 0\n      ) {\n        messages = [this.genHint()]\n      } else if (this.validations.length) {\n        messages = this.validations.map(v => this.genError(v))\n      }\n\n      return this.$createElement('transition-group', {\n        'class': 'input-group__messages',\n        props: {\n          tag: 'div',\n          name: 'slide-y-transition'\n        }\n      }, messages)\n    },\n    genHint () {\n      return this.$createElement('div', {\n        'class': 'input-group__hint',\n        key: this.hint,\n        domProps: { innerHTML: this.hint }\n      })\n    },\n    genError (error) {\n      return this.$createElement(\n        'div',\n        {\n          'class': 'input-group__error',\n          key: error\n        },\n        error\n      )\n    },\n    genIcon (type, defaultCallback = null) {\n      const shouldClear = type === 'append' && this.clearable && this.isDirty\n      const icon = shouldClear ? 'clear' : this[`${type}Icon`]\n      const callback = shouldClear\n        ? this.clearableCallback\n        : (this[`${type}IconCb`] || defaultCallback)\n\n      return this.$createElement('v-icon', {\n        attrs: {\n          'aria-hidden': true\n        },\n        'class': {\n          [`input-group__${type}-icon`]: true,\n          'input-group__icon-cb': !!callback,\n          'input-group__icon-clearable': shouldClear\n        },\n        props: {\n          disabled: this.disabled\n        },\n        on: {\n          click: e => {\n            if (!callback) return\n\n            e.stopPropagation()\n            callback()\n          }\n        }\n      }, icon)\n    },\n    genInputGroup (input, data = {}, defaultAppendCallback = null) {\n      const children = []\n      const wrapperChildren = []\n      const detailsChildren = []\n\n      data = Object.assign({}, {\n        'class': this.inputGroupClasses,\n        attrs: {\n          tabindex: this.disabled\n            ? -1\n            : this.internalTabIndex || this.tabindex\n        },\n        on: {\n          focus: this.groupFocus,\n          blur: this.groupBlur,\n          click: () => (this.tabFocused = false),\n          keyup: e => {\n            if ([9, 16].includes(e.keyCode)) {\n              this.tabFocused = true\n            }\n          },\n          keydown: e => {\n            if (!this.toggle) return\n\n            if (this.toggleKeys.includes(e.keyCode)) {\n              e.preventDefault()\n              this.toggle()\n            }\n          }\n        }\n      }, data)\n\n      if (this.$slots.label || this.label) {\n        children.push(this.genLabel())\n      }\n\n      wrapperChildren.push(input)\n\n      if (this.prependIcon) {\n        wrapperChildren.unshift(this.genIcon('prepend'))\n      }\n\n      if (this.appendIcon || this.clearable) {\n        wrapperChildren.push(this.genIcon('append', defaultAppendCallback))\n      }\n\n      const progress = this.genProgress()\n      progress && detailsChildren.push(progress)\n\n      children.push(\n        this.$createElement('div', {\n          'class': 'input-group__input'\n        }, wrapperChildren)\n      )\n      detailsChildren.push(this.genMessages())\n\n      if (this.counter) {\n        detailsChildren.push(this.genCounter())\n      }\n\n      children.push(\n        this.$createElement('div', {\n          'class': 'input-group__details'\n        }, detailsChildren)\n      )\n\n      return this.$createElement('div', data, children)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/input.js"",""function searchChildren (children) {\n  const results = []\n  for (const child of children) {\n    if (child.isActive && child.isDependent) {\n      results.push(child)\n    } else {\n      results.push(...searchChildren(child.$children))\n    }\n  }\n\n  return results\n}\n\nexport default {\n  data () {\n    return {\n      closeDependents: true,\n      isDependent: true\n    }\n  },\n\n  methods: {\n    getOpenDependents () {\n      if (this.closeDependents) return searchChildren(this.$children)\n\n      return []\n    },\n    getOpenDependentElements () {\n      const result = []\n\n      for (const dependent of this.getOpenDependents()) {\n        result.push(...dependent.getClickableDependentElements())\n      }\n\n      return result\n    },\n    getClickableDependentElements () {\n      const result = [this.$el]\n      if (this.$refs.content) result.push(this.$refs.content)\n      result.push(...this.getOpenDependentElements())\n\n      return result\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      if (val) return\n\n      for (const dependent of this.getOpenDependents()) {\n        dependent.isActive = false\n      }\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/dependent.js"",""import { createSimpleFunctional } from '../../util/helpers'\nimport VCard from './VCard'\nimport VCardMedia from './VCardMedia'\nimport VCardTitle from './VCardTitle'\n\nexport { VCard, VCardMedia, VCardTitle }\n\nVCard.install = function install (Vue) {\n  const VCardActions = createSimpleFunctional('card__actions')\n  const VCardText = createSimpleFunctional('card__text')\n\n  Vue.component(VCard.name, VCard)\n  Vue.component(VCardMedia.name, VCardMedia)\n  Vue.component(VCardTitle.name, VCardTitle)\n  Vue.component('v-card-actions', VCardActions)\n  Vue.component('v-card-text', VCardText)\n}\n\nexport default VCard\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCard/index.js"",""export default {\n  props: {\n    app: Boolean\n  },\n\n  created () {\n    this.updateApplication()\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/applicationable.js"",""import Bootable from './bootable'\n\nexport default {\n  mixins: [Bootable],\n\n  props: {\n    contentClass: {\n      default: ''\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(this.initDetach)\n  },\n\n  beforeDestroy () {\n    if (!this.$refs.content) return\n\n    // IE11 Fix\n    try {\n      this.$refs.content.parentNode.removeChild(this.$refs.content)\n    } catch (e) {}\n  },\n\n  methods: {\n    initDetach () {\n      if (this._isDestroyed) return\n\n      const app = document.querySelector('[data-app]')\n\n      if (!app) {\n        return console.warn('Application is missing <v-app> component.')\n      }\n\n      // If child has already been removed, bail\n      if (!this.$refs.content) return\n\n      app.insertBefore(\n        this.$refs.content,\n        app.firstChild\n      )\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/detachable.js"",""export default {\n  props: {\n    absolute: Boolean,\n    bottom: Boolean,\n    fixed: Boolean,\n    left: Boolean,\n    right: Boolean,\n    top: Boolean\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/positionable.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_selection-controls.styl\n// module id = 20\n// module chunks = 0"",""import Ripple from '../directives/ripple'\n\n/** @mixin */\nexport default {\n  directives: { Ripple },\n\n  methods: {\n    genRipple () {\n      return this.$createElement('div', {\n        'class': this.rippleClasses || 'input-group--selection-controls__ripple',\n        on: Object.assign({}, {\n          click: this.toggle\n        }, this.$listeners),\n        directives: [{\n          name: 'ripple',\n          value: !this.disabled && { center: true }\n        }]\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/rippleable.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_grid.styl\n// module id = 22\n// module chunks = 0"",""export default function Grid (name) {\n  return {\n    name: `v-${name}`,\n\n    functional: true,\n\n    props: {\n      id: String,\n      tag: {\n        type: String,\n        default: 'div'\n      }\n    },\n\n    render: (h, { props, data, children }) => {\n      data.staticClass = (`${name} ${data.staticClass || ''}`).trim()\n\n      if (data.attrs) {\n        const classes = []\n\n        Object.keys(data.attrs).forEach(key => {\n          const value = data.attrs[key]\n\n          if (typeof value === 'string') classes.push(key)\n          else if (value) classes.push(key)\n        })\n\n        if (classes.length) data.staticClass += ` ${classes.join(' ')}`\n        delete data.attrs\n      }\n\n      if (props.id) {\n        data.domProps = data.domProps || {}\n        data.domProps.id = props.id\n      }\n\n      return h(props.tag, data, children)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VGrid/grid.js"",""export default {\n  props: {\n    primary: Boolean,\n    secondary: Boolean,\n    success: Boolean,\n    info: Boolean,\n    warning: Boolean,\n    error: Boolean\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/contextualable.js"",""export default {\n  data () {\n    return {\n      buttons: [],\n      listeners: []\n    }\n  },\n\n  methods: {\n    getValue (i) {\n      if (this.buttons[i].value != null) {\n        return this.buttons[i].value\n      }\n\n      // Fix for testing, this should always be false in the browser\n      if (this.buttons[i].$el.value != null && this.buttons[i].$el.value !== '') {\n        return this.buttons[i].$el.value\n      }\n\n      return i\n    },\n    update () {\n      const selected = []\n\n      this.buttons\n        .forEach((button, i) => {\n          const elm = button.$el\n\n          // Fix for testing, dataset does not exist on elm?\n          if (!elm.dataset) elm.dataset = {}\n\n          elm.removeAttribute('data-only-child')\n\n          if (this.isSelected(i)) {\n            elm.setAttribute('data-selected', true)\n\n            if (!elm.classList.contains('btn--router')) {\n              elm.classList.add('btn--active')\n            }\n\n            selected.push(i)\n          } else {\n            elm.removeAttribute('data-selected')\n\n            if (!elm.classList.contains('btn--router')) {\n              elm.classList.remove('btn--active')\n            }\n          }\n\n          elm.dataset.index = i\n        })\n\n      if (selected.length === 1) {\n        this.buttons[selected[0]].$el.setAttribute('data-only-child', true)\n      }\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(() => {\n      this.buttons = this.$children\n\n      this.buttons.forEach((button, i) => {\n        this.listeners.push(this.updateValue.bind(this, i))\n        button.$on('click', this.listeners[i])\n      })\n\n      this.update()\n    })\n  },\n\n  beforeDestroy () {\n    this.buttons.forEach((button, i) => {\n      button.$off('click', this.listeners[i])\n    })\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/button-group.js"",""require('../../stylus/components/_dialogs.styl')\n\n// Mixins\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Overlayable from '../../mixins/overlayable'\nimport Stackable from '../../mixins/stackable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\n\n// Helpers\nimport { getZIndex } from '../../util/helpers'\n\nexport default {\n  name: 'v-dialog',\n\n  mixins: [Dependent, Detachable, Overlayable, Stackable, Toggleable],\n\n  directives: {\n    ClickOutside\n  },\n\n  data () {\n    return {\n      isDependent: false,\n      stackClass: 'dialog__content__active',\n      stackMinZIndex: 200\n    }\n  },\n\n  props: {\n    disabled: Boolean,\n    persistent: Boolean,\n    fullscreen: Boolean,\n    fullWidth: Boolean,\n    maxWidth: {\n      type: [String, Number],\n      default: 290\n    },\n    origin: {\n      type: String,\n      default: 'center center'\n    },\n    width: [String, Number],\n    scrollable: Boolean,\n    transition: {\n      type: [String, Boolean],\n      default: 'dialog-transition'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        [(`dialog ${this.contentClass}`).trim()]: true,\n        'dialog--active': this.isActive,\n        'dialog--persistent': this.persistent,\n        'dialog--fullscreen': this.fullscreen,\n        'dialog--stacked-actions': this.stackedActions && !this.fullscreen,\n        'dialog--scrollable': this.scrollable\n      }\n    },\n    contentClasses () {\n      return {\n        'dialog__content': true,\n        'dialog__content__active': this.isActive\n      }\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      if (val) {\n        this.show()\n      } else {\n        this.removeOverlay()\n        this.unbind()\n      }\n    }\n  },\n\n  mounted () {\n    this.isBooted = this.isActive\n    this.$vuetify.load(this.init)\n  },\n\n  beforeDestroy () {\n    if (typeof window !== 'undefined') this.unbind()\n  },\n\n  methods: {\n    closeConditional (e) {\n      // close dialog if !persistent, clicked outside and we're the topmost dialog.\n      // Since this should only be called in a capture event (bottom up), we shouldn't need to stop propagation\n      return !this.persistent && getZIndex(this.$refs.content) >= this.getMaxZIndex()\n    },\n    init () {\n      this.isActive && this.show()\n    },\n    show () {\n      !this.fullscreen && !this.hideOverlay && this.genOverlay()\n      this.fullscreen && this.hideScroll()\n      this.$refs.content.focus()\n      this.$listeners.keydown && this.bind()\n    },\n    bind () {\n      window.addEventListener('keydown', this.onKeydown)\n    },\n    unbind () {\n      window.removeEventListener('keydown', this.onKeydown)\n    },\n    onKeydown (e) {\n      this.$emit('keydown', e)\n    }\n  },\n\n  render (h) {\n    const children = []\n    const data = {\n      'class': this.classes,\n      ref: 'dialog',\n      directives: [\n        {\n          name: 'click-outside',\n          value: {\n            callback: this.closeConditional,\n            include: this.getOpenDependentElements\n          }\n        },\n        { name: 'show', value: this.isActive }\n      ],\n      on: { click: e => e.stopPropagation() }\n    }\n\n    if (!this.fullscreen) {\n      let width = this.maxWidth\n\n      if (this.width) {\n        console.log('The {width} property is being deprecated, please use {max-width}.')\n        // TODO: Deprecate\n        width = this.width\n      }\n\n      data.style = {\n        maxWidth: isNaN(width) ? width : `${width}px`\n      }\n    }\n\n    if (this.$slots.activator) {\n      children.push(h('div', {\n        'class': 'dialog__activator',\n        on: {\n          click: e => {\n            if (!this.disabled) this.isActive = !this.isActive\n          }\n        }\n      }, [this.$slots.activator]))\n    }\n\n    const dialog = h('transition', {\n      props: {\n        name: this.transition || '', // If false, show nothing\n        origin: this.origin\n      }\n    }, [h('div', data,\n      this.showLazyContent(this.$slots.default)\n    )])\n\n    children.push(h('div', {\n      'class': this.contentClasses,\n      style: { zIndex: this.activeZIndex },\n      ref: 'content'\n    }, [dialog]))\n\n    return h('div', {\n      'class': 'dialog__container',\n      style: {\n        display: !this.$slots.activator && 'none' || this.fullWidth ? 'block' : 'inline-block'\n      }\n    }, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDialog/VDialog.js"",""require('../stylus/components/_overlay.styl')\n\nexport default {\n  data () {\n    return {\n      overlay: null,\n      overlayOffset: 0,\n      overlayTimeout: null,\n      overlayTransitionDuration: 500 + 150 // transition + delay\n    }\n  },\n\n  props: {\n    hideOverlay: Boolean\n  },\n\n  beforeDestroy () {\n    this.removeOverlay()\n  },\n\n  methods: {\n    genOverlay () {\n      // If fn is called and timeout is active\n      // or overlay already exists\n      // cancel removal of overlay and re-add active\n      if ((!this.isActive || this.hideOverlay) ||\n        (this.isActive && this.overlayTimeout) ||\n        this.overlay\n      ) {\n        clearTimeout(this.overlayTimeout)\n\n        return this.overlay &&\n          this.overlay.classList.add('overlay--active')\n      }\n\n      this.overlay = document.createElement('div')\n      this.overlay.className = 'overlay'\n\n      if (this.absolute) this.overlay.className += ' overlay--absolute'\n\n      this.hideScroll()\n\n      const parent = this.absolute\n        ? this.$el.parentNode\n        : document.querySelector('[data-app]')\n\n      parent.insertBefore(this.overlay, parent.firstChild)\n\n      this.overlay.clientHeight // Force repaint\n      requestAnimationFrame(() => {\n        this.overlay.className += ' overlay--active'\n\n        if (this.activeZIndex !== undefined) {\n          this.overlay.style.zIndex = this.activeZIndex - 1\n        }\n      })\n\n      return true\n    },\n    removeOverlay () {\n      if (!this.overlay) {\n        return this.showScroll()\n      }\n\n      this.overlay.classList.remove('overlay--active')\n\n      this.overlayTimeout = setTimeout(() => {\n        // IE11 Fix\n        try {\n          this.overlay.parentNode.removeChild(this.overlay)\n          this.overlay = null\n          this.showScroll()\n        } catch (e) {}\n\n        clearTimeout(this.overlayTimeout)\n        this.overlayTimeout = null\n      }, this.overlayTransitionDuration)\n    },\n    /**\n     * @param {Event} e\n     * @returns void\n     */\n    scrollListener (e) {\n      if (e.type === 'keydown') {\n        const up = [38, 33]\n        const down = [40, 34]\n\n        if (up.includes(e.keyCode)) {\n          e.deltaY = -1\n        } else if (down.includes(e.keyCode)) {\n          e.deltaY = 1\n        } else {\n          return\n        }\n      }\n\n      if (e.target === this.overlay ||\n        (e.type !== 'keydown' && e.target === document.body) ||\n        this.checkPath(e)) e.preventDefault()\n    },\n    hasScrollbar (el) {\n      const style = window.getComputedStyle(el)\n      return ['auto', 'scroll'].includes(style['overflow-y']) && el.scrollHeight > el.clientHeight\n    },\n    shouldScroll (el, delta) {\n      if (el.scrollTop === 0 && delta < 0) return true\n      return el.scrollTop + el.clientHeight === el.scrollHeight && delta > 0\n    },\n    isInside (el, parent) {\n      if (el === parent) {\n        return true\n      } else if (el === null || el === document.body) {\n        return false\n      } else {\n        return this.isInside(el.parentNode, parent)\n      }\n    },\n    /**\n     * @param {Event} e\n     * @returns boolean\n     */\n    checkPath (e) {\n      const path = e.path || this.composedPath(e)\n      const delta = e.deltaY || -e.wheelDelta\n\n      if (e.type === 'keydown' && path[0] === document.body) {\n        const dialog = this.$refs.dialog\n        const selected = window.getSelection().anchorNode\n        if (this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {\n          return this.shouldScroll(dialog, delta)\n        }\n        return true\n      }\n\n      for (const el of path) {\n        if ([document, document.documentElement, this.$refs.content].includes(el)) return true\n        if (this.hasScrollbar(el)) return this.shouldScroll(el, delta)\n      }\n\n      return true\n    },\n    /**\n     * Polyfill for Event.prototype.composedPath\n     * @param {Event} e\n     * @returns Element[]\n     */\n    composedPath (e) {\n      if (e.composedPath) return e.composedPath()\n\n      const path = []\n      let el = e.target\n\n      while (el) {\n        path.push(el)\n\n        if (el.tagName === 'HTML') {\n          path.push(document)\n          path.push(window)\n\n          return path\n        }\n\n        el = el.parentElement\n      }\n    },\n    hideScroll () {\n      if (this.$vuetify.breakpoint.mdAndDown) {\n        document.documentElement.classList.add('overflow-y-hidden')\n      } else {\n        window.addEventListener('wheel', this.scrollListener)\n        window.addEventListener('keydown', this.scrollListener)\n      }\n    },\n    showScroll () {\n      document.documentElement.classList.remove('overflow-y-hidden')\n      window.removeEventListener('wheel', this.scrollListener)\n      window.removeEventListener('keydown', this.scrollListener)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/overlayable.js"",""import { getZIndex } from '../util/helpers'\n\nexport default {\n  data () {\n    return {\n      stackBase: null,\n      stackClass: 'unpecified',\n      stackElement: null,\n      stackExclude: null,\n      stackMinZIndex: 0\n    }\n  },\n  computed: {\n    activeZIndex () {\n      const content = this.stackElement || this.$refs.content\n      // Return current zindex if not active\n      if (!this.isActive) return getZIndex(content)\n\n      // Return max current z-index (excluding self) + 2\n      // (2 to leave room for an overlay below, if needed)\n      return this.getMaxZIndex(this.stackExclude || [content]) + 2\n    }\n  },\n  methods: {\n    getMaxZIndex (exclude = []) {\n      const base = this.stackBase || this.$el\n      // Start with lowest allowed z-index or z-index of\n      // base component's element, whichever is greater\n      const zis = [this.stackMinZIndex, getZIndex(base)]\n      // Convert the NodeList to an array to\n      // prevent an Edge bug with Symbol.iterator\n      // https://github.com/vuetifyjs/vuetify/issues/2146\n      const activeElements = [...document.getElementsByClassName(this.stackClass)]\n\n      // Get z-index for all active dialogs\n      for (const activeElement of activeElements) {\n        if (!exclude.includes(activeElement)) {\n          zis.push(getZIndex(activeElement))\n        }\n      }\n\n      return Math.max(...zis)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/stackable.js"",""import VCheckbox from './VCheckbox'\n\nVCheckbox.install = function install (Vue) {\n  Vue.component(VCheckbox.name, VCheckbox)\n}\n\nexport default VCheckbox\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCheckbox/index.js"",""import { addOnceEventListener } from '../../util/helpers'\n\nexport default {\n  enter (el, done) {\n    el.td = el.parentNode\n\n    addOnceEventListener(el, 'transitionend', done)\n\n    // Get height that is to be scrolled\n    const height = el.dataset.height || el.clientHeight\n    el.dataset.height = height\n    el.style.overflow = 'hidden'\n    el.style.height = 0\n    el.td.style['border-bottom'] = '1px solid rgba(0,0,0,0.12)'\n\n    setTimeout(() => {\n      el.dataset.height = el.style.height = `${el.scrollHeight}px`\n    }, 50)\n  },\n  afterEnter (el) {\n    el.style.overflow = null\n  },\n  leave (el, done) {\n    // Remove initial transition\n    addOnceEventListener(el, 'transitionend', done)\n\n    // Set height before we transition to 0\n    el.style.overflow = 'hidden'\n    el.style.height = `${el.dataset.height}px`\n\n    setTimeout(() => {\n      el.style.height = 0\n    }, 50)\n  },\n  afterLeave (el) {\n    el.td.style['border-bottom'] = null\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/transitions/row-expand-transition.js"",""import Colorable from './colorable'\nimport Input from './input'\n\nexport default {\n  mixins: [Input, Colorable],\n\n  model: {\n    prop: 'inputValue',\n    event: 'change'\n  },\n\n  props: {\n    id: String,\n    inputValue: null,\n    falseValue: null,\n    trueValue: null\n  },\n\n  computed: {\n    isActive () {\n      if ((Array.isArray(this.inputValue))\n      ) {\n        return this.inputValue.indexOf(this.value) !== -1\n      }\n\n      if (!this.trueValue || !this.falseValue) {\n        return this.value\n          ? this.value === this.inputValue\n          : Boolean(this.inputValue)\n      }\n\n      return this.inputValue === this.trueValue\n    },\n    isDirty () {\n      return this.isActive\n    }\n  },\n\n  watch: {\n    indeterminate (val) {\n      this.inputIndeterminate = val\n    }\n  },\n\n  methods: {\n    genLabel () {\n      return this.$createElement('label', {\n        on: { click: this.toggle },\n        attrs: {\n          for: this.id\n        }\n      }, this.$slots.label || this.label)\n    },\n    toggle () {\n      if (this.disabled) {\n        return\n      }\n\n      let input = this.inputValue\n      if (Array.isArray(input)) {\n        input = input.slice()\n        const i = input.indexOf(this.value)\n\n        if (i === -1) {\n          input.push(this.value)\n        } else {\n          input.splice(i, 1)\n        }\n      } else if (this.trueValue || this.falseValue) {\n        input = input === this.trueValue ? this.falseValue : this.trueValue\n      } else if (this.value) {\n        input = this.value === this.inputValue\n          ? null\n          : this.value\n      } else {\n        input = !input\n      }\n\n      this.validate(true, input)\n\n      this.$emit('change', input)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/selectable.js"",""/**\n * Loadable\n *\n * @mixin\n *\n * Used to add linear progress bar to components\n * Can use a default bar with a specific color\n * or designate a custom progress linear bar\n */\nexport default {\n  props: {\n    loading: {\n      type: [Boolean, String],\n      default: false\n    }\n  },\n\n  methods: {\n    genProgress () {\n      if (this.loading === false) return null\n\n      return this.$slots.progress || this.$createElement('v-progress-linear', {\n        props: {\n          color: (this.loading === true || this.loading === '')\n            ? (this.color || 'primary')\n            : this.loading,\n          height: 2,\n          indeterminate: true\n        }\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/loadable.js"",""import VProgressLinear from './VProgressLinear'\n\nVProgressLinear.install = function install (Vue) {\n  Vue.component(VProgressLinear.name, VProgressLinear)\n}\n\nexport default VProgressLinear\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VProgressLinear/index.js"",""import VSelect from './VSelect'\n\nVSelect.install = function install (Vue) {\n  Vue.component(VSelect.name, VSelect)\n}\n\nexport default VSelect\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSelect/index.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_text-fields.styl\n// module id = 35\n// module chunks = 0"",""import { createSimpleFunctional } from '../../util/helpers'\n\nimport VList from './VList'\nimport VListGroup from './VListGroup'\nimport VListTile from './VListTile'\nimport VListTileAction from './VListTileAction'\n\nexport { VList, VListGroup, VListTile, VListTileAction }\nexport const VListTileActionText = createSimpleFunctional('list__tile__action-text', 'span')\nexport const VListTileAvatar = createSimpleFunctional('list__tile__avatar', 'v-avatar')\nexport const VListTileContent = createSimpleFunctional('list__tile__content', 'div')\nexport const VListTileTitle = createSimpleFunctional('list__tile__title', 'div')\nexport const VListTileSubTitle = createSimpleFunctional('list__tile__sub-title', 'div')\n\nVList.install = function install (Vue) {\n  Vue.component(VList.name, VList)\n  Vue.component(VListGroup.name, VListGroup)\n  Vue.component(VListTile.name, VListTile)\n  Vue.component(VListTileAction.name, VListTileAction)\n  Vue.component('v-list-tile-action-text', VListTileActionText)\n  Vue.component('v-list-tile-avatar', VListTileAvatar)\n  Vue.component('v-list-tile-content', VListTileContent)\n  Vue.component('v-list-tile-sub-title', VListTileSubTitle)\n  Vue.component('v-list-tile-title', VListTileTitle)\n}\n\nexport default VList\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VList/index.js"",""import VMenu from './VMenu'\n\nVMenu.install = function install (Vue) {\n  Vue.component(VMenu.name, VMenu)\n}\n\nexport default VMenu\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VMenu/index.js"",""/**\n * Delayable\n *\n * @mixin\n *\n * Changes the open or close\n * delay time for elements\n */\nexport default {\n  data: () => ({\n    openTimeout: null,\n    closeTimeout: null\n  }),\n\n  props: {\n    openDelay: {\n      type: [Number, String],\n      default: 0\n    },\n    closeDelay: {\n      type: [Number, String],\n      default: 200\n    }\n  },\n\n  methods: {\n    /**\n     * Clear any pending delay\n     * timers from executing\n     * \n     * @return {void}\n     */\n    clearDelay () {\n      clearTimeout(this.openTimeout)\n      clearTimeout(this.closeTimeout)\n    },\n    /**\n     * Runs callback after\n     * a specified delay\n     * \n     * @param  {String}   type\n     * @param  {Function} cb\n     * \n     * @return {void}\n     */\n    runDelay (type, cb) {\n      this.clearDelay()\n\n      const delay = parseInt(this[`${type}Delay`], 10)\n\n      this[`${type}Timeout`] = setTimeout(cb, delay)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/delayable.js"",""import Positionable from './positionable'\n\nimport Stackable from './stackable'\n\nconst dimensions = {\n  activator: {\n    top: 0, left: 0,\n    bottom: 0, right: 0,\n    width: 0, height: 0,\n    offsetTop: 0, scrollHeight: 0\n  },\n  content: {\n    top: 0, left: 0,\n    bottom: 0, right: 0,\n    width: 0, height: 0,\n    offsetTop: 0, scrollHeight: 0\n  },\n  hasWindow: false\n}\n\n/**\n * Menuable\n *\n * @mixin\n *\n * Used for fixed or absolutely positioning\n * elements within the DOM\n * Can calculate X and Y axis overflows\n * As well as be manually positioned\n */\nexport default {\n  mixins: [Positionable, Stackable],\n\n  data: () => ({\n    absoluteX: 0,\n    absoluteY: 0,\n    dimensions: Object.assign({}, dimensions),\n    isContentActive: false,\n    pageYOffset: 0,\n    stackClass: 'menuable__content__active',\n    stackMinZIndex: 6\n  }),\n\n  props: {\n    activator: {\n      default: null,\n      validate: val => {\n        return ['string', 'object'].includes(typeof val)\n      }\n    },\n    allowOverflow: Boolean,\n    maxWidth: {\n      type: [Number, String],\n      default: 'auto'\n    },\n    minWidth: [Number, String],\n    nudgeBottom: {\n      type: Number,\n      default: 0\n    },\n    nudgeLeft: {\n      type: Number,\n      default: 0\n    },\n    nudgeRight: {\n      type: Number,\n      default: 0\n    },\n    nudgeTop: {\n      type: Number,\n      default: 0\n    },\n    nudgeWidth: {\n      type: Number,\n      default: 0\n    },\n    offsetOverflow: Boolean,\n    positionX: {\n      type: Number,\n      default: null\n    },\n    positionY: {\n      type: Number,\n      default: null\n    },\n    zIndex: {\n      type: [Number, String],\n      default: null\n    }\n  },\n\n  computed: {\n    hasActivator () {\n      return !!this.$slots.activator || this.activator\n    }\n  },\n\n  watch: {\n    disabled (val) {\n      val && this.callDeactivate()\n    },\n    isActive (val) {\n      if (this.disabled) return\n\n      val && this.callActivate() || this.callDeactivate()\n    }\n  },\n\n  methods: {\n    absolutePosition () {\n      return {\n        offsetTop: 0,\n        scrollHeight: 0,\n        top: this.positionY || this.absoluteY,\n        bottom: this.positionY || this.absoluteY,\n        left: this.positionX || this.absoluteX,\n        right: this.positionX || this.absoluteX,\n        height: 0,\n        width: 0\n      }\n    },\n    activate () {},\n    calcLeft () {\n      const a = this.dimensions.activator\n      const c = this.dimensions.content\n      let left = this.left ? a.right - c.width : a.left\n\n      if (this.offsetX) left += this.left ? -a.width : a.width\n      if (this.nudgeLeft) left -= this.nudgeLeft\n      if (this.nudgeRight) left += this.nudgeRight\n\n      return left\n    },\n    calcTop () {\n      this.checkForWindow()\n\n      const a = this.dimensions.activator\n      const c = this.dimensions.content\n      let top = this.top ? a.bottom - c.height : a.top\n\n      if (this.offsetY) top += this.top ? -a.height : a.height\n      if (this.nudgeTop) top -= this.nudgeTop\n      if (this.nudgeBottom) top += this.nudgeBottom\n\n      return top + this.pageYOffset\n    },\n    calcXOverflow (left) {\n      const parsedMaxWidth = isNaN(parseInt(this.maxWidth))\n        ? 0\n        : parseInt(this.maxWidth)\n      const innerWidth = this.getInnerWidth()\n      const maxWidth = Math.max(\n        this.dimensions.content.width,\n        parsedMaxWidth\n      )\n      const totalWidth = left + maxWidth\n      const availableWidth = totalWidth - innerWidth\n\n      if ((!this.left || this.right) && availableWidth > 0) {\n        left = (\n          innerWidth -\n          maxWidth -\n          (innerWidth > 600 ? 30 : 12) // Account for scrollbar\n        )\n      }\n\n      if (left < 0) left = 12\n\n      return left\n    },\n    calcYOverflow (top) {\n      const documentHeight = this.getInnerHeight()\n      const toTop = this.pageYOffset + documentHeight\n      const activator = this.dimensions.activator\n      const contentHeight = this.dimensions.content.height\n      const totalHeight = top + contentHeight\n      const isOverflowing = toTop < totalHeight\n\n      // If overflowing bottom and offset\n      if (isOverflowing && this.offsetOverflow) {\n        top = this.pageYOffset + (activator.top - contentHeight)\n      // If overflowing bottom\n      } else if (isOverflowing && !this.allowOverflow) {\n        top = toTop - contentHeight - 12\n      // If overflowing top\n      } else if (top < this.pageYOffset && !this.allowOverflow) {\n        top = this.pageYOffset + 12\n      }\n\n      return top < 12 ? 12 : top\n    },\n    callActivate () {\n      this.checkForWindow()\n      if (!this.hasWindow) return\n\n      this.activate()\n    },\n    callDeactivate () {\n      this.isContentActive = false\n\n      this.deactivate()\n    },\n    checkForWindow () {\n      this.hasWindow = typeof window !== 'undefined'\n\n      if (this.hasWindow) {\n        this.pageYOffset = this.getOffsetTop()\n      }\n    },\n    deactivate () {},\n    getActivator () {\n      if (this.activator) {\n        return typeof this.activator === 'string'\n          ? document.querySelector(this.activator)\n          : this.activator\n      }\n\n      return this.$refs.activator.children\n        ? this.$refs.activator.children[0]\n        : this.$refs.activator\n    },\n    getInnerHeight () {\n      if (!this.hasWindow) return 0\n\n      return window.innerHeight ||\n        document.documentElement.clientHeight\n    },\n    getInnerWidth () {\n      if (!this.hasWindow) return 0\n\n      return window.innerWidth\n    },\n    getOffsetTop () {\n      if (!this.hasWindow) return 0\n\n      return window.pageYOffset ||\n        document.documentElement.scrollTop\n    },\n    measure (el, selector) {\n      el = selector ? el.querySelector(selector) : el\n\n      if (!el) return null\n\n      const {\n        top,\n        bottom,\n        left,\n        right,\n        height,\n        width\n      } = el.getBoundingClientRect()\n\n      return {\n        offsetTop: el.offsetTop,\n        scrollHeight: el.scrollHeight,\n        top, bottom, left, right, height, width\n      }\n    },\n    sneakPeek (cb) {\n      requestAnimationFrame(() => {\n        const el = this.$refs.content\n\n        if (this.isShown(el)) return cb()\n\n        el.style.display = 'inline-block'\n        cb()\n        el.style.display = 'none'\n      })\n    },\n    startTransition () {\n      requestAnimationFrame(() => (this.isContentActive = true))\n    },\n    isShown (el) {\n      return el.style.display !== 'none'\n    },\n    resetDimensions () {\n      this.dimensions = Object.assign({}, dimensions)\n    },\n    updateDimensions () {\n      // Ensure that overflow calculation\n      // can work properly every update\n      this.resetDimensions()\n\n      const dimensions = {}\n\n      // Activate should already be shown\n      dimensions.activator = !this.hasActivator || this.absolute\n        ? this.absolutePosition()\n        : this.measure(this.getActivator())\n\n      // Display and hide to get dimensions\n      this.sneakPeek(() => {\n        dimensions.content = this.measure(this.$refs.content)\n\n        this.dimensions = dimensions\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/menuable.js"",""export default {\n  props: {\n    noDataText: {\n      type: String,\n      default: 'No data available'\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/filterable.js"",""/**\n * Maskable\n *\n * @mixin\n *\n * Creates an input mask that is\n * generated from a masked str\n *\n * Example: mask=\""#### #### #### ####\""\n */\n\nimport {\n  isMaskDelimiter,\n  maskText,\n  unmaskText\n} from '../util/mask'\n\nexport default {\n  data: () => ({\n    selection: 0,\n    preDefined: {\n      'credit-card': '#### - #### - #### - ####',\n      'date': '##/##/####',\n      'date-with-time': '##/##/#### ##:##',\n      'phone': '(###) ### - ####',\n      'social': '###-##-####',\n      'time': '##:##',\n      'time-with-seconds': '##:##:##'\n    }\n  }),\n\n  props: {\n    dontFillMaskBlanks: Boolean,\n    mask: {\n      type: [Object, String],\n      default: null\n    },\n    returnMaskedValue: Boolean\n  },\n\n  computed: {\n    masked () {\n      const preDefined = this.preDefined[this.mask]\n      const mask = preDefined || this.mask || ''\n\n      return mask.split('')\n    }\n  },\n\n  watch: {\n    /**\n     * Make sure the cursor is in the correct\n     * location when the mask changes\n     */\n    mask () {\n      if (!this.$refs.input) return\n\n      const oldText = this.$refs.input.value\n      const newText = this.maskText(this.lazyValue)\n      let position = 0\n      let selection = this.selection\n\n      for (const char of oldText.substr(0, selection)) {\n        isMaskDelimiter(char) || position++\n      }\n\n      selection = 0\n      for (const char of newText) {\n        isMaskDelimiter(char) || position--\n        selection++\n        if (position <= 0) break\n      }\n\n      this.setCaretPosition(selection)\n    }\n  },\n\n  methods: {\n    setCaretPosition (selection) {\n      this.selection = selection\n      window.setTimeout(() => {\n        this.$refs.input && this.$refs.input.setSelectionRange(this.selection, this.selection)\n      }, 0)\n    },\n    updateRange () {\n      if (!this.$refs.input) return\n\n      const newValue = this.maskText(this.lazyValue)\n      let selection = 0\n\n      this.$refs.input.value = newValue\n      for (const char of newValue) {\n        if (this.lazySelection <= 0) break\n        isMaskDelimiter(char) || this.lazySelection--\n        selection++\n      }\n\n      this.setCaretPosition(selection)\n    },\n    maskText (text) {\n      if (!this.mask) return text\n\n      return maskText(text, this.masked, this.dontFillMaskBlanks)\n    },\n    unmaskText (text) {\n      if (this.returnMaskedValue || !this.mask) return text\n\n      return unmaskText(text)\n    },\n    // When the input changes and is\n    // re-created, ensure that the\n    // caret location is correct\n    setSelectionRange () {\n      this.$nextTick(this.updateRange)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/maskable.js"",""/**\n * Mask keys\n *\n * @type {Object}\n */\nconst allowedMasks = {\n  '#': {\n    test: char => char.match(/[0-9]/)\n  },\n  'A': {\n    test: char => char.match(/[A-Z]/i),\n    convert: char => char.toUpperCase()\n  },\n  'a': {\n    test: char => char.match(/[a-z]/i),\n    convert: char => char.toLowerCase()\n  },\n  'N': {\n    test: char => char.match(/[0-9A-Z]/i),\n    convert: char => char.toUpperCase()\n  },\n  'n': {\n    test: char => char.match(/[0-9a-z]/i),\n    convert: char => char.toLowerCase()\n  },\n  'X': {\n    test: isMaskDelimiter\n  }\n}\n\n/**\n * Default delimiter RegExp\n *\n * @type {RegExp}\n */\nexport const defaultDelimiters = /[-!$%^&*()_+|~=`{}\\[\\]:\"";'<>?,.\\/\\\\ ]/\n\n/**\n * Is Character mask\n *\n * @param  {String} char\n *\n * @return {Boolean}\n */\nconst isMask = char => allowedMasks.hasOwnProperty(char)\n\n/**\n * Automatically convert char case\n *\n * @param  {String} mask\n * @param  {String} char\n *\n * @return {String}\n */\nconst convert = (mask, char) => {\n  return allowedMasks[mask].convert ? allowedMasks[mask].convert(char) : char\n}\n\n/**\n *\n * @param {String} char\n *\n * @return {Boolean}\n */\nexport const isMaskDelimiter = char => char && char.match(defaultDelimiters)\n\n/**\n * Mask Validation\n *\n * @param  {String} mask\n * @param  {String} char\n *\n * @return {Boolean}\n */\nconst maskValidates = (mask, char) => {\n  if (char == null || !isMask(mask)) return false\n  return allowedMasks[mask].test(char)\n}\n\n/**\n * Mask Text\n *\n * Takes an array of characters\n * and returns a compiled str\n *\n * @param {*} text\n * @param {Array|String} masked\n * @param {Boolean} [dontFillMaskBlanks]\n *\n * @return {String}\n */\nexport const maskText = (text, masked, dontFillMaskBlanks) => {\n  if (text == null) return ''\n  text = String(text)\n  if (!masked.length || !text.length) return text\n  if (!Array.isArray(masked)) masked = masked.split('')\n\n  let textIndex = 0\n  let maskIndex = 0\n  let newText = ''\n  while (maskIndex < masked.length) {\n    const mask = masked[maskIndex]\n\n    // Assign the next character\n    const char = text[textIndex]\n\n    // Check if mask is delimiter\n    // and current char matches\n    if (!isMask(mask) && char === mask) {\n      newText += mask\n      textIndex++\n    // Check if not mask\n    } else if (!isMask(mask) && !dontFillMaskBlanks) {\n      newText += mask\n    // Check if is mask and validates\n    } else if (maskValidates(mask, char)) {\n      newText += convert(mask, char)\n      textIndex++\n    } else {\n      return newText\n    }\n\n    maskIndex++\n  }\n\n  return newText\n}\n\n/**\n * Unmask Text\n *\n * @param {String} text\n *\n * @return {String}\n */\nexport const unmaskText = (text) => {\n  return text.replace(new RegExp(defaultDelimiters, 'g'), '')\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/mask.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_pickers.styl\n// module id = 43\n// module chunks = 0"",""import Themeable from './themeable'\n\nexport default {\n  mixins: [Themeable],\n\n  data () {\n    return {\n      isSaving: false\n    }\n  },\n\n  props: {\n    actions: Boolean,\n    autosave: Boolean,\n    landscape: Boolean,\n    noTitle: Boolean,\n    scrollable: Boolean,\n    value: {\n      required: true\n    },\n    light: Boolean,\n    dark: Boolean\n  },\n\n  methods: {\n    save () {},\n    cancel () {},\n    genSlot () {\n      return this.$scopedSlots.default({\n        save: this.save,\n        cancel: this.cancel\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/picker.js"",""require('./stylus/app.styl')\nimport Semver from 'semver'\nimport { devDependencies, version } from '../package.json'\nimport * as components from './components'\nimport * as directives from './directives'\n\nfunction Vuetify (Vue) {\n  const Vuetify = components.Vuetify\n\n  Vue.use(Vuetify, {\n    components,\n    directives\n  })\n}\n\nVuetify.version = version\n\nfunction checkVueVersion () {\n  const vueDep = devDependencies.vue\n  if (!Semver.satisfies(window.Vue.version, vueDep)) {\n    console.warn(`Vuetify requires Vue version ${vueDep}`)\n  }\n}\n\nif (typeof window !== 'undefined' && window.Vue) {\n  window.Vue.version && checkVueVersion()\n  window.Vue.use(Vuetify)\n}\n\nexport default Vuetify\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/app.styl\n// module id = 46\n// module chunks = 0"",""exports = module.exports = SemVer;\n\n// The debug function is excluded entirely from the minified version.\n/* nomin */ var debug;\n/* nomin */ if (typeof process === 'object' &&\n    /* nomin */ process.env &&\n    /* nomin */ process.env.NODE_DEBUG &&\n    /* nomin */ /\\bsemver\\b/i.test(process.env.NODE_DEBUG))\n  /* nomin */ debug = function() {\n    /* nomin */ var args = Array.prototype.slice.call(arguments, 0);\n    /* nomin */ args.unshift('SEMVER');\n    /* nomin */ console.log.apply(console, args);\n    /* nomin */ };\n/* nomin */ else\n  /* nomin */ debug = function() {};\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0';\n\nvar MAX_LENGTH = 256;\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\n// The actual regexps go on exports.re\nvar re = exports.re = [];\nvar src = exports.src = [];\nvar R = 0;\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++;\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*';\nvar NUMERICIDENTIFIERLOOSE = R++;\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+';\n\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++;\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*';\n\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++;\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[NUMERICIDENTIFIER] + ')';\n\nvar MAINVERSIONLOOSE = R++;\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')';\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++;\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n                            '|' + src[NONNUMERICIDENTIFIER] + ')';\n\nvar PRERELEASEIDENTIFIERLOOSE = R++;\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n                                 '|' + src[NONNUMERICIDENTIFIER] + ')';\n\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++;\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n                  '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))';\n\nvar PRERELEASELOOSE = R++;\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n                       '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))';\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++;\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+';\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++;\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n             '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))';\n\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++;\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n                src[PRERELEASE] + '?' +\n                src[BUILD] + '?';\n\nsrc[FULL] = '^' + FULLPLAIN + '$';\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n                 src[PRERELEASELOOSE] + '?' +\n                 src[BUILD] + '?';\n\nvar LOOSE = R++;\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$';\n\nvar GTLT = R++;\nsrc[GTLT] = '((?:<|>)?=?)';\n\n// Something like \""2.*\"" or \""1.2.x\"".\n// Note that \""x.x\"" is a valid xRange identifer, meaning \""any version\""\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++;\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*';\nvar XRANGEIDENTIFIER = R++;\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*';\n\nvar XRANGEPLAIN = R++;\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n                   '(?:' + src[PRERELEASE] + ')?' +\n                   src[BUILD] + '?' +\n                   ')?)?';\n\nvar XRANGEPLAINLOOSE = R++;\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:' + src[PRERELEASELOOSE] + ')?' +\n                        src[BUILD] + '?' +\n                        ')?)?';\n\nvar XRANGE = R++;\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$';\nvar XRANGELOOSE = R++;\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$';\n\n// Tilde ranges.\n// Meaning is \""reasonably at or greater than\""\nvar LONETILDE = R++;\nsrc[LONETILDE] = '(?:~>?)';\n\nvar TILDETRIM = R++;\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+';\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');\nvar tildeTrimReplace = '$1~';\n\nvar TILDE = R++;\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';\nvar TILDELOOSE = R++;\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';\n\n// Caret ranges.\n// Meaning is \""at least and backwards compatible with\""\nvar LONECARET = R++;\nsrc[LONECARET] = '(?:\\\\^)';\n\nvar CARETTRIM = R++;\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+';\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');\nvar caretTrimReplace = '$1^';\n\nvar CARET = R++;\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';\nvar CARETLOOSE = R++;\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';\n\n// A simple gt/lt/eq thing, or just \""\"" to indicate \""any version\""\nvar COMPARATORLOOSE = R++;\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$';\nvar COMPARATOR = R++;\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$';\n\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++;\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n                      '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');\nvar comparatorTrimReplace = '$1$2$3';\n\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++;\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n                   '\\\\s+-\\\\s+' +\n                   '(' + src[XRANGEPLAIN] + ')' +\n                   '\\\\s*$';\n\nvar HYPHENRANGELOOSE = R++;\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s+-\\\\s+' +\n                        '(' + src[XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s*$';\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++;\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*';\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n  debug(i, src[i]);\n  if (!re[i])\n    re[i] = new RegExp(src[i]);\n}\n\nexports.parse = parse;\nfunction parse(version, loose) {\n  if (version instanceof SemVer)\n    return version;\n\n  if (typeof version !== 'string')\n    return null;\n\n  if (version.length > MAX_LENGTH)\n    return null;\n\n  var r = loose ? re[LOOSE] : re[FULL];\n  if (!r.test(version))\n    return null;\n\n  try {\n    return new SemVer(version, loose);\n  } catch (er) {\n    return null;\n  }\n}\n\nexports.valid = valid;\nfunction valid(version, loose) {\n  var v = parse(version, loose);\n  return v ? v.version : null;\n}\n\n\nexports.clean = clean;\nfunction clean(version, loose) {\n  var s = parse(version.trim().replace(/^[=v]+/, ''), loose);\n  return s ? s.version : null;\n}\n\nexports.SemVer = SemVer;\n\nfunction SemVer(version, loose) {\n  if (version instanceof SemVer) {\n    if (version.loose === loose)\n      return version;\n    else\n      version = version.version;\n  } else if (typeof version !== 'string') {\n    throw new TypeError('Invalid Version: ' + version);\n  }\n\n  if (version.length > MAX_LENGTH)\n    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n\n  if (!(this instanceof SemVer))\n    return new SemVer(version, loose);\n\n  debug('SemVer', version, loose);\n  this.loose = loose;\n  var m = version.trim().match(loose ? re[LOOSE] : re[FULL]);\n\n  if (!m)\n    throw new TypeError('Invalid Version: ' + version);\n\n  this.raw = version;\n\n  // these are actually numbers\n  this.major = +m[1];\n  this.minor = +m[2];\n  this.patch = +m[3];\n\n  if (this.major > MAX_SAFE_INTEGER || this.major < 0)\n    throw new TypeError('Invalid major version')\n\n  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)\n    throw new TypeError('Invalid minor version')\n\n  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)\n    throw new TypeError('Invalid patch version')\n\n  // numberify any prerelease numeric ids\n  if (!m[4])\n    this.prerelease = [];\n  else\n    this.prerelease = m[4].split('.').map(function(id) {\n      if (/^[0-9]+$/.test(id)) {\n        var num = +id;\n        if (num >= 0 && num < MAX_SAFE_INTEGER)\n          return num;\n      }\n      return id;\n    });\n\n  this.build = m[5] ? m[5].split('.') : [];\n  this.format();\n}\n\nSemVer.prototype.format = function() {\n  this.version = this.major + '.' + this.minor + '.' + this.patch;\n  if (this.prerelease.length)\n    this.version += '-' + this.prerelease.join('.');\n  return this.version;\n};\n\nSemVer.prototype.toString = function() {\n  return this.version;\n};\n\nSemVer.prototype.compare = function(other) {\n  debug('SemVer.compare', this.version, this.loose, other);\n  if (!(other instanceof SemVer))\n    other = new SemVer(other, this.loose);\n\n  return this.compareMain(other) || this.comparePre(other);\n};\n\nSemVer.prototype.compareMain = function(other) {\n  if (!(other instanceof SemVer))\n    other = new SemVer(other, this.loose);\n\n  return compareIdentifiers(this.major, other.major) ||\n         compareIdentifiers(this.minor, other.minor) ||\n         compareIdentifiers(this.patch, other.patch);\n};\n\nSemVer.prototype.comparePre = function(other) {\n  if (!(other instanceof SemVer))\n    other = new SemVer(other, this.loose);\n\n  // NOT having a prerelease is > having one\n  if (this.prerelease.length && !other.prerelease.length)\n    return -1;\n  else if (!this.prerelease.length && other.prerelease.length)\n    return 1;\n  else if (!this.prerelease.length && !other.prerelease.length)\n    return 0;\n\n  var i = 0;\n  do {\n    var a = this.prerelease[i];\n    var b = other.prerelease[i];\n    debug('prerelease compare', i, a, b);\n    if (a === undefined && b === undefined)\n      return 0;\n    else if (b === undefined)\n      return 1;\n    else if (a === undefined)\n      return -1;\n    else if (a === b)\n      continue;\n    else\n      return compareIdentifiers(a, b);\n  } while (++i);\n};\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function(release, identifier) {\n  switch (release) {\n    case 'premajor':\n      this.prerelease.length = 0;\n      this.patch = 0;\n      this.minor = 0;\n      this.major++;\n      this.inc('pre', identifier);\n      break;\n    case 'preminor':\n      this.prerelease.length = 0;\n      this.patch = 0;\n      this.minor++;\n      this.inc('pre', identifier);\n      break;\n    case 'prepatch':\n      // If this is already a prerelease, it will bump to the next version\n      // drop any prereleases that might already exist, since they are not\n      // relevant at this point.\n      this.prerelease.length = 0;\n      this.inc('patch', identifier);\n      this.inc('pre', identifier);\n      break;\n    // If the input is a non-prerelease version, this acts the same as\n    // prepatch.\n    case 'prerelease':\n      if (this.prerelease.length === 0)\n        this.inc('patch', identifier);\n      this.inc('pre', identifier);\n      break;\n\n    case 'major':\n      // If this is a pre-major version, bump up to the same major version.\n      // Otherwise increment major.\n      // 1.0.0-5 bumps to 1.0.0\n      // 1.1.0 bumps to 2.0.0\n      if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)\n        this.major++;\n      this.minor = 0;\n      this.patch = 0;\n      this.prerelease = [];\n      break;\n    case 'minor':\n      // If this is a pre-minor version, bump up to the same minor version.\n      // Otherwise increment minor.\n      // 1.2.0-5 bumps to 1.2.0\n      // 1.2.1 bumps to 1.3.0\n      if (this.patch !== 0 || this.prerelease.length === 0)\n        this.minor++;\n      this.patch = 0;\n      this.prerelease = [];\n      break;\n    case 'patch':\n      // If this is not a pre-release version, it will increment the patch.\n      // If it is a pre-release it will bump up to the same patch version.\n      // 1.2.0-5 patches to 1.2.0\n      // 1.2.0 patches to 1.2.1\n      if (this.prerelease.length === 0)\n        this.patch++;\n      this.prerelease = [];\n      break;\n    // This probably shouldn't be used publicly.\n    // 1.0.0 \""pre\"" would become 1.0.0-0 which is the wrong direction.\n    case 'pre':\n      if (this.prerelease.length === 0)\n        this.prerelease = [0];\n      else {\n        var i = this.prerelease.length;\n        while (--i >= 0) {\n          if (typeof this.prerelease[i] === 'number') {\n            this.prerelease[i]++;\n            i = -2;\n          }\n        }\n        if (i === -1) // didn't increment anything\n          this.prerelease.push(0);\n      }\n      if (identifier) {\n        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n        if (this.prerelease[0] === identifier) {\n          if (isNaN(this.prerelease[1]))\n            this.prerelease = [identifier, 0];\n        } else\n          this.prerelease = [identifier, 0];\n      }\n      break;\n\n    default:\n      throw new Error('invalid increment argument: ' + release);\n  }\n  this.format();\n  this.raw = this.version;\n  return this;\n};\n\nexports.inc = inc;\nfunction inc(version, release, loose, identifier) {\n  if (typeof(loose) === 'string') {\n    identifier = loose;\n    loose = undefined;\n  }\n\n  try {\n    return new SemVer(version, loose).inc(release, identifier).version;\n  } catch (er) {\n    return null;\n  }\n}\n\nexports.diff = diff;\nfunction diff(version1, version2) {\n  if (eq(version1, version2)) {\n    return null;\n  } else {\n    var v1 = parse(version1);\n    var v2 = parse(version2);\n    if (v1.prerelease.length || v2.prerelease.length) {\n      for (var key in v1) {\n        if (key === 'major' || key === 'minor' || key === 'patch') {\n          if (v1[key] !== v2[key]) {\n            return 'pre'+key;\n          }\n        }\n      }\n      return 'prerelease';\n    }\n    for (var key in v1) {\n      if (key === 'major' || key === 'minor' || key === 'patch') {\n        if (v1[key] !== v2[key]) {\n          return key;\n        }\n      }\n    }\n  }\n}\n\nexports.compareIdentifiers = compareIdentifiers;\n\nvar numeric = /^[0-9]+$/;\nfunction compareIdentifiers(a, b) {\n  var anum = numeric.test(a);\n  var bnum = numeric.test(b);\n\n  if (anum && bnum) {\n    a = +a;\n    b = +b;\n  }\n\n  return (anum && !bnum) ? -1 :\n         (bnum && !anum) ? 1 :\n         a < b ? -1 :\n         a > b ? 1 :\n         0;\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers;\nfunction rcompareIdentifiers(a, b) {\n  return compareIdentifiers(b, a);\n}\n\nexports.major = major;\nfunction major(a, loose) {\n  return new SemVer(a, loose).major;\n}\n\nexports.minor = minor;\nfunction minor(a, loose) {\n  return new SemVer(a, loose).minor;\n}\n\nexports.patch = patch;\nfunction patch(a, loose) {\n  return new SemVer(a, loose).patch;\n}\n\nexports.compare = compare;\nfunction compare(a, b, loose) {\n  return new SemVer(a, loose).compare(new SemVer(b, loose));\n}\n\nexports.compareLoose = compareLoose;\nfunction compareLoose(a, b) {\n  return compare(a, b, true);\n}\n\nexports.rcompare = rcompare;\nfunction rcompare(a, b, loose) {\n  return compare(b, a, loose);\n}\n\nexports.sort = sort;\nfunction sort(list, loose) {\n  return list.sort(function(a, b) {\n    return exports.compare(a, b, loose);\n  });\n}\n\nexports.rsort = rsort;\nfunction rsort(list, loose) {\n  return list.sort(function(a, b) {\n    return exports.rcompare(a, b, loose);\n  });\n}\n\nexports.gt = gt;\nfunction gt(a, b, loose) {\n  return compare(a, b, loose) > 0;\n}\n\nexports.lt = lt;\nfunction lt(a, b, loose) {\n  return compare(a, b, loose) < 0;\n}\n\nexports.eq = eq;\nfunction eq(a, b, loose) {\n  return compare(a, b, loose) === 0;\n}\n\nexports.neq = neq;\nfunction neq(a, b, loose) {\n  return compare(a, b, loose) !== 0;\n}\n\nexports.gte = gte;\nfunction gte(a, b, loose) {\n  return compare(a, b, loose) >= 0;\n}\n\nexports.lte = lte;\nfunction lte(a, b, loose) {\n  return compare(a, b, loose) <= 0;\n}\n\nexports.cmp = cmp;\nfunction cmp(a, op, b, loose) {\n  var ret;\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') a = a.version;\n      if (typeof b === 'object') b = b.version;\n      ret = a === b;\n      break;\n    case '!==':\n      if (typeof a === 'object') a = a.version;\n      if (typeof b === 'object') b = b.version;\n      ret = a !== b;\n      break;\n    case '': case '=': case '==': ret = eq(a, b, loose); break;\n    case '!=': ret = neq(a, b, loose); break;\n    case '>': ret = gt(a, b, loose); break;\n    case '>=': ret = gte(a, b, loose); break;\n    case '<': ret = lt(a, b, loose); break;\n    case '<=': ret = lte(a, b, loose); break;\n    default: throw new TypeError('Invalid operator: ' + op);\n  }\n  return ret;\n}\n\nexports.Comparator = Comparator;\nfunction Comparator(comp, loose) {\n  if (comp instanceof Comparator) {\n    if (comp.loose === loose)\n      return comp;\n    else\n      comp = comp.value;\n  }\n\n  if (!(this instanceof Comparator))\n    return new Comparator(comp, loose);\n\n  debug('comparator', comp, loose);\n  this.loose = loose;\n  this.parse(comp);\n\n  if (this.semver === ANY)\n    this.value = '';\n  else\n    this.value = this.operator + this.semver.version;\n\n  debug('comp', this);\n}\n\nvar ANY = {};\nComparator.prototype.parse = function(comp) {\n  var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR];\n  var m = comp.match(r);\n\n  if (!m)\n    throw new TypeError('Invalid comparator: ' + comp);\n\n  this.operator = m[1];\n  if (this.operator === '=')\n    this.operator = '';\n\n  // if it literally is just '>' or '' then allow anything.\n  if (!m[2])\n    this.semver = ANY;\n  else\n    this.semver = new SemVer(m[2], this.loose);\n};\n\nComparator.prototype.toString = function() {\n  return this.value;\n};\n\nComparator.prototype.test = function(version) {\n  debug('Comparator.test', version, this.loose);\n\n  if (this.semver === ANY)\n    return true;\n\n  if (typeof version === 'string')\n    version = new SemVer(version, this.loose);\n\n  return cmp(version, this.operator, this.semver, this.loose);\n};\n\nComparator.prototype.intersects = function(comp, loose) {\n  if (!(comp instanceof Comparator)) {\n    throw new TypeError('a Comparator is required');\n  }\n\n  var rangeTmp;\n\n  if (this.operator === '') {\n    rangeTmp = new Range(comp.value, loose);\n    return satisfies(this.value, rangeTmp, loose);\n  } else if (comp.operator === '') {\n    rangeTmp = new Range(this.value, loose);\n    return satisfies(comp.semver, rangeTmp, loose);\n  }\n\n  var sameDirectionIncreasing =\n    (this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '>=' || comp.operator === '>');\n  var sameDirectionDecreasing =\n    (this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '<=' || comp.operator === '<');\n  var sameSemVer = this.semver.version === comp.semver.version;\n  var differentDirectionsInclusive =\n    (this.operator === '>=' || this.operator === '<=') &&\n    (comp.operator === '>=' || comp.operator === '<=');\n  var oppositeDirectionsLessThan =\n    cmp(this.semver, '<', comp.semver, loose) &&\n    ((this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '<=' || comp.operator === '<'));\n  var oppositeDirectionsGreaterThan =\n    cmp(this.semver, '>', comp.semver, loose) &&\n    ((this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '>=' || comp.operator === '>'));\n\n  return sameDirectionIncreasing || sameDirectionDecreasing ||\n    (sameSemVer && differentDirectionsInclusive) ||\n    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;\n};\n\n\nexports.Range = Range;\nfunction Range(range, loose) {\n  if (range instanceof Range) {\n    if (range.loose === loose) {\n      return range;\n    } else {\n      return new Range(range.raw, loose);\n    }\n  }\n\n  if (range instanceof Comparator) {\n    return new Range(range.value, loose);\n  }\n\n  if (!(this instanceof Range))\n    return new Range(range, loose);\n\n  this.loose = loose;\n\n  // First, split based on boolean or ||\n  this.raw = range;\n  this.set = range.split(/\\s*\\|\\|\\s*/).map(function(range) {\n    return this.parseRange(range.trim());\n  }, this).filter(function(c) {\n    // throw out any that are not relevant for whatever reason\n    return c.length;\n  });\n\n  if (!this.set.length) {\n    throw new TypeError('Invalid SemVer Range: ' + range);\n  }\n\n  this.format();\n}\n\nRange.prototype.format = function() {\n  this.range = this.set.map(function(comps) {\n    return comps.join(' ').trim();\n  }).join('||').trim();\n  return this.range;\n};\n\nRange.prototype.toString = function() {\n  return this.range;\n};\n\nRange.prototype.parseRange = function(range) {\n  var loose = this.loose;\n  range = range.trim();\n  debug('range', range, loose);\n  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n  var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE];\n  range = range.replace(hr, hyphenReplace);\n  debug('hyphen replace', range);\n  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n  range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);\n  debug('comparator trim', range, re[COMPARATORTRIM]);\n\n  // `~ 1.2.3` => `~1.2.3`\n  range = range.replace(re[TILDETRIM], tildeTrimReplace);\n\n  // `^ 1.2.3` => `^1.2.3`\n  range = range.replace(re[CARETTRIM], caretTrimReplace);\n\n  // normalize spaces\n  range = range.split(/\\s+/).join(' ');\n\n  // At this point, the range is completely trimmed and\n  // ready to be split into comparators.\n\n  var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];\n  var set = range.split(' ').map(function(comp) {\n    return parseComparator(comp, loose);\n  }).join(' ').split(/\\s+/);\n  if (this.loose) {\n    // in loose mode, throw out any that are not valid comparators\n    set = set.filter(function(comp) {\n      return !!comp.match(compRe);\n    });\n  }\n  set = set.map(function(comp) {\n    return new Comparator(comp, loose);\n  });\n\n  return set;\n};\n\nRange.prototype.intersects = function(range, loose) {\n  if (!(range instanceof Range)) {\n    throw new TypeError('a Range is required');\n  }\n\n  return this.set.some(function(thisComparators) {\n    return thisComparators.every(function(thisComparator) {\n      return range.set.some(function(rangeComparators) {\n        return rangeComparators.every(function(rangeComparator) {\n          return thisComparator.intersects(rangeComparator, loose);\n        });\n      });\n    });\n  });\n};\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators;\nfunction toComparators(range, loose) {\n  return new Range(range, loose).set.map(function(comp) {\n    return comp.map(function(c) {\n      return c.value;\n    }).join(' ').trim().split(' ');\n  });\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator(comp, loose) {\n  debug('comp', comp);\n  comp = replaceCarets(comp, loose);\n  debug('caret', comp);\n  comp = replaceTildes(comp, loose);\n  debug('tildes', comp);\n  comp = replaceXRanges(comp, loose);\n  debug('xrange', comp);\n  comp = replaceStars(comp, loose);\n  debug('stars', comp);\n  return comp;\n}\n\nfunction isX(id) {\n  return !id || id.toLowerCase() === 'x' || id === '*';\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes(comp, loose) {\n  return comp.trim().split(/\\s+/).map(function(comp) {\n    return replaceTilde(comp, loose);\n  }).join(' ');\n}\n\nfunction replaceTilde(comp, loose) {\n  var r = loose ? re[TILDELOOSE] : re[TILDE];\n  return comp.replace(r, function(_, M, m, p, pr) {\n    debug('tilde', comp, _, M, m, p, pr);\n    var ret;\n\n    if (isX(M))\n      ret = '';\n    else if (isX(m))\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';\n    else if (isX(p))\n      // ~1.2 == >=1.2.0 <1.3.0\n      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';\n    else if (pr) {\n      debug('replaceTilde pr', pr);\n      if (pr.charAt(0) !== '-')\n        pr = '-' + pr;\n      ret = '>=' + M + '.' + m + '.' + p + pr +\n            ' <' + M + '.' + (+m + 1) + '.0';\n    } else\n      // ~1.2.3 == >=1.2.3 <1.3.0\n      ret = '>=' + M + '.' + m + '.' + p +\n            ' <' + M + '.' + (+m + 1) + '.0';\n\n    debug('tilde return', ret);\n    return ret;\n  });\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets(comp, loose) {\n  return comp.trim().split(/\\s+/).map(function(comp) {\n    return replaceCaret(comp, loose);\n  }).join(' ');\n}\n\nfunction replaceCaret(comp, loose) {\n  debug('caret', comp, loose);\n  var r = loose ? re[CARETLOOSE] : re[CARET];\n  return comp.replace(r, function(_, M, m, p, pr) {\n    debug('caret', comp, _, M, m, p, pr);\n    var ret;\n\n    if (isX(M))\n      ret = '';\n    else if (isX(m))\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';\n    else if (isX(p)) {\n      if (M === '0')\n        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';\n      else\n        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0';\n    } else if (pr) {\n      debug('replaceCaret pr', pr);\n      if (pr.charAt(0) !== '-')\n        pr = '-' + pr;\n      if (M === '0') {\n        if (m === '0')\n          ret = '>=' + M + '.' + m + '.' + p + pr +\n                ' <' + M + '.' + m + '.' + (+p + 1);\n        else\n          ret = '>=' + M + '.' + m + '.' + p + pr +\n                ' <' + M + '.' + (+m + 1) + '.0';\n      } else\n        ret = '>=' + M + '.' + m + '.' + p + pr +\n              ' <' + (+M + 1) + '.0.0';\n    } else {\n      debug('no pr');\n      if (M === '0') {\n        if (m === '0')\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + m + '.' + (+p + 1);\n        else\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + (+m + 1) + '.0';\n      } else\n        ret = '>=' + M + '.' + m + '.' + p +\n              ' <' + (+M + 1) + '.0.0';\n    }\n\n    debug('caret return', ret);\n    return ret;\n  });\n}\n\nfunction replaceXRanges(comp, loose) {\n  debug('replaceXRanges', comp, loose);\n  return comp.split(/\\s+/).map(function(comp) {\n    return replaceXRange(comp, loose);\n  }).join(' ');\n}\n\nfunction replaceXRange(comp, loose) {\n  comp = comp.trim();\n  var r = loose ? re[XRANGELOOSE] : re[XRANGE];\n  return comp.replace(r, function(ret, gtlt, M, m, p, pr) {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr);\n    var xM = isX(M);\n    var xm = xM || isX(m);\n    var xp = xm || isX(p);\n    var anyX = xp;\n\n    if (gtlt === '=' && anyX)\n      gtlt = '';\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0';\n      } else {\n        // nothing is forbidden\n        ret = '*';\n      }\n    } else if (gtlt && anyX) {\n      // replace X with 0\n      if (xm)\n        m = 0;\n      if (xp)\n        p = 0;\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        // >1.2.3 => >= 1.2.4\n        gtlt = '>=';\n        if (xm) {\n          M = +M + 1;\n          m = 0;\n          p = 0;\n        } else if (xp) {\n          m = +m + 1;\n          p = 0;\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<';\n        if (xm)\n          M = +M + 1;\n        else\n          m = +m + 1;\n      }\n\n      ret = gtlt + M + '.' + m + '.' + p;\n    } else if (xm) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';\n    } else if (xp) {\n      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';\n    }\n\n    debug('xRange return', ret);\n\n    return ret;\n  });\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \""any version\"", just remove the *s entirely.\nfunction replaceStars(comp, loose) {\n  debug('replaceStars', comp, loose);\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp.trim().replace(re[STAR], '');\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace($0,\n                       from, fM, fm, fp, fpr, fb,\n                       to, tM, tm, tp, tpr, tb) {\n\n  if (isX(fM))\n    from = '';\n  else if (isX(fm))\n    from = '>=' + fM + '.0.0';\n  else if (isX(fp))\n    from = '>=' + fM + '.' + fm + '.0';\n  else\n    from = '>=' + from;\n\n  if (isX(tM))\n    to = '';\n  else if (isX(tm))\n    to = '<' + (+tM + 1) + '.0.0';\n  else if (isX(tp))\n    to = '<' + tM + '.' + (+tm + 1) + '.0';\n  else if (tpr)\n    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;\n  else\n    to = '<=' + to;\n\n  return (from + ' ' + to).trim();\n}\n\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function(version) {\n  if (!version)\n    return false;\n\n  if (typeof version === 'string')\n    version = new SemVer(version, this.loose);\n\n  for (var i = 0; i < this.set.length; i++) {\n    if (testSet(this.set[i], version))\n      return true;\n  }\n  return false;\n};\n\nfunction testSet(set, version) {\n  for (var i = 0; i < set.length; i++) {\n    if (!set[i].test(version))\n      return false;\n  }\n\n  if (version.prerelease.length) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (var i = 0; i < set.length; i++) {\n      debug(set[i].semver);\n      if (set[i].semver === ANY)\n        continue;\n\n      if (set[i].semver.prerelease.length > 0) {\n        var allowed = set[i].semver;\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch)\n          return true;\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false;\n  }\n\n  return true;\n}\n\nexports.satisfies = satisfies;\nfunction satisfies(version, range, loose) {\n  try {\n    range = new Range(range, loose);\n  } catch (er) {\n    return false;\n  }\n  return range.test(version);\n}\n\nexports.maxSatisfying = maxSatisfying;\nfunction maxSatisfying(versions, range, loose) {\n  var max = null;\n  var maxSV = null;\n  try {\n    var rangeObj = new Range(range, loose);\n  } catch (er) {\n    return null;\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) { // satisfies(v, range, loose)\n      if (!max || maxSV.compare(v) === -1) { // compare(max, v, true)\n        max = v;\n        maxSV = new SemVer(max, loose);\n      }\n    }\n  })\n  return max;\n}\n\nexports.minSatisfying = minSatisfying;\nfunction minSatisfying(versions, range, loose) {\n  var min = null;\n  var minSV = null;\n  try {\n    var rangeObj = new Range(range, loose);\n  } catch (er) {\n    return null;\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) { // satisfies(v, range, loose)\n      if (!min || minSV.compare(v) === 1) { // compare(min, v, true)\n        min = v;\n        minSV = new SemVer(min, loose);\n      }\n    }\n  })\n  return min;\n}\n\nexports.validRange = validRange;\nfunction validRange(range, loose) {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, loose).range || '*';\n  } catch (er) {\n    return null;\n  }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr;\nfunction ltr(version, range, loose) {\n  return outside(version, range, '<', loose);\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr;\nfunction gtr(version, range, loose) {\n  return outside(version, range, '>', loose);\n}\n\nexports.outside = outside;\nfunction outside(version, range, hilo, loose) {\n  version = new SemVer(version, loose);\n  range = new Range(range, loose);\n\n  var gtfn, ltefn, ltfn, comp, ecomp;\n  switch (hilo) {\n    case '>':\n      gtfn = gt;\n      ltefn = lte;\n      ltfn = lt;\n      comp = '>';\n      ecomp = '>=';\n      break;\n    case '<':\n      gtfn = lt;\n      ltefn = gte;\n      ltfn = gt;\n      comp = '<';\n      ecomp = '<=';\n      break;\n    default:\n      throw new TypeError('Must provide a hilo val of \""<\"" or \"">\""');\n  }\n\n  // If it satisifes the range it is not outside\n  if (satisfies(version, range, loose)) {\n    return false;\n  }\n\n  // From now on, variable terms are as if we're in \""gtr\"" mode.\n  // but note that everything is flipped for the \""ltr\"" function.\n\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i];\n\n    var high = null;\n    var low = null;\n\n    comparators.forEach(function(comparator) {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator;\n      low = low || comparator;\n      if (gtfn(comparator.semver, high.semver, loose)) {\n        high = comparator;\n      } else if (ltfn(comparator.semver, low.semver, loose)) {\n        low = comparator;\n      }\n    });\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false;\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false;\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexports.prerelease = prerelease;\nfunction prerelease(version, loose) {\n  var parsed = parse(version, loose);\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;\n}\n\nexports.intersects = intersects;\nfunction intersects(r1, r2, loose) {\n  r1 = new Range(r1, loose)\n  r2 = new Range(r2, loose)\n  return r1.intersects(r2)\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/semver/semver.js\n// module id = 47\n// module chunks = 0"",""// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = 48\n// module chunks = 0"",""module.exports = {\""name\"":\""vuetify\"",\""version\"":\""0.16.9\"",\""author\"":{\""name\"":\""John Leider\"",\""email\"":\""john@vuetifyjs.com\""},\""license\"":\""MIT\"",\""homepage\"":\""http://vuetifyjs.com\"",\""main\"":\""dist/vuetify.js\"",\""unpkg\"":\""dist/vuetify.js\"",\""types\"":\""index.d.ts\"",\""scripts\"":{\""watch\"":\""cross-env TARGET=development webpack --config build/config.js --progress --hide-modules --watch\"",\""dev\"":\""cross-env NODE_ENV=development webpack-dev-server --config build/webpack.dev.config.js --open --hot\"",\""build\"":\""npm run build:dist && npm run build:es5\"",\""build:dev\"":\""cross-env NODE_ENV=production node build/webpack.dev.config.js\"",\""build:dist\"":\""rimraf dist && cross-env NODE_ENV=production webpack --config build/config.js --progress --hide-modules\"",\""build:es5\"":\""rimraf es5 && cross-env NODE_ENV=es5 babel src --out-dir es5\"",\""debug-build\"":\""node --inspect --debug-brk build/config.js\"",\""debug:test\"":\""./node_modules/.bin/cross-env NODE_ENV=test node --inspect --inspect-brk ./node_modules/jest/bin/jest.js --no-cache --runInBand --verbose\"",\""test\"":\""cross-env NODE_ENV=test jest -i\"",\""lint\"":\""eslint --ext .js,.vue src\"",\""preparecommitmsg\"":\""node dev/prepare-commit-message.js\"",\""precommit\"":\""yarn run lint && yarn test\"",\""prepush\"":\""yarn run lint && yarn test\""},\""description\"":\""Vue.js 2 Semantic Component Framework\"",\""devDependencies\"":{\""autoprefixer\"":\""^7.1.4\"",\""avoriaz\"":\""^4.1.0\"",\""babel-cli\"":\""^6.26.0\"",\""babel-core\"":\""^6.26.0\"",\""babel-eslint\"":\""^8.0.0\"",\""babel-jest\"":\""^21.0.2\"",\""babel-loader\"":\""^7.1.2\"",\""babel-plugin-add-filehash\"":\""^6.9.4\"",\""babel-plugin-detective\"":\""^2.0.0\"",\""babel-plugin-module-resolver\"":\""^2.7.1\"",\""babel-plugin-transform-async-to-generator\"":\""^6.24.1\"",\""babel-plugin-transform-runtime\"":\""^6.23.0\"",\""babel-polyfill\"":\""^6.26.0\"",\""babel-preset-env\"":\""^1.5.1\"",\""babel-preset-es2015\"":\""^6.24.1\"",\""babel-preset-stage-2\"":\""^6.24.1\"",\""cross-env\"":\""^5.0.5\"",\""cross-spawn\"":\""^5.1.0\"",\""css-loader\"":\""^0.28.7\"",\""css-mqpacker\"":\""^6.0.1\"",\""cssnano\"":\""^3.10.0\"",\""eslint\"":\""^4.6.1\"",\""eslint-config-standard\"":\""^10.2.1\"",\""eslint-config-vue\"":\""^2.0.2\"",\""eslint-friendly-formatter\"":\""^3.0.0\"",\""eslint-loader\"":\""^1.6.1\"",\""eslint-plugin-html\"":\""^3.2.1\"",\""eslint-plugin-import\"":\""^2.7.0\"",\""eslint-plugin-node\"":\""^5.1.1\"",\""eslint-plugin-promise\"":\""^3.4.0\"",\""eslint-plugin-pug\"":\""^1.0.0\"",\""eslint-plugin-standard\"":\""^3.0.1\"",\""eslint-plugin-vue\"":\""^2.1.0\"",\""eventsource-polyfill\"":\""^0.9.6\"",\""extract-text-webpack-plugin\"":\""^3.0.0\"",\""friendly-errors-webpack-plugin\"":\""^1.6.1\"",\""function-bind\"":\""^1.1.1\"",\""husky\"":\""^0.14.3\"",\""jest\"":\""^21.1.0\"",\""jest-cli\"":\""^21.1.0\"",\""jest-css-modules\"":\""^1.1.0\"",\""jest-serializer-html\"":\""^4.0.0\"",\""jest-vue-preprocessor\"":\""^1.1.0\"",\""optimize-css-assets-webpack-plugin\"":\""^3.2.0\"",\""optimize-js-plugin\"":\""^0.0.4\"",\""postcss-loader\"":\""^1.3.3\"",\""progress-bar-webpack-plugin\"":\""^1.10.0\"",\""pug\"":\""^2.0.0-rc.4\"",\""pug-loader\"":\""^2.3.0\"",\""ress\"":\""^1.1.1\"",\""rimraf\"":\""^2.6.2\"",\""semver\"":\""^5.4.1\"",\""serialize-javascript\"":\""^1.3.0\"",\""style-loader\"":\""^0.18.2\"",\""stylus\"":\""^0.54.5\"",\""stylus-loader\"":\""^3.0.1\"",\""uglifyjs-webpack-plugin\"":\""^0.4.6\"",\""vue\"":\""^2.4.4\"",\""vue-loader\"":\""^13.0.4\"",\""vue-router\"":\""^2.7.0\"",\""vue-server-renderer\"":\""^2.4.4\"",\""vue-template-compiler\"":\""^2.4.4\"",\""webpack\"":\""^3.6.0\"",\""webpack-bundle-analyzer\"":\""^2.9.0\"",\""webpack-bundle-size-analyzer\"":\""^2.7.0\"",\""webpack-dev-server\"":\""^2.8.2\"",\""webpack-merge\"":\""^4.1.0\"",\""write-file-webpack-plugin\"":\""^4.1.0\""},\""dependencies\"":{},\""peerDependencies\"":{\""vue\"":\""^2.4.3\""},\""engines\"":{\""node\"":\"">= 4.0.0\"",\""npm\"":\"">= 3.0.0\""},\""jest\"":{\""verbose\"":false,\""roots\"":[\""<rootDir>/src\""],\""moduleFileExtensions\"":[\""js\"",\""vue\""],\""moduleDirectories\"":[\""node_modules\""],\""moduleNameMapper\"":{\""src/(.*)\"":\""<rootDir>/src/$1\""},\""transform\"":{\"".*\\\\.(vue)$\"":\""<rootDir>/node_modules/jest-vue-preprocessor\"",\""\\\\.(styl)$\"":\""<rootDir>/node_modules/jest-css-modules\"",\"".*\\\\.(vue|js)$\"":\""<rootDir>/node_modules/babel-jest\""},\""transformIgnorePatterns\"":[\""node_modules/(?!vue-router)\""],\""snapshotSerializers\"":[\""jest-serializer-html\""]}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./package.json\n// module id = 49\n// module chunks = 0"",""export { default as Vuetify } from './Vuetify'\nexport { default as VApp } from './VApp'\nexport { default as VAlert } from './VAlert'\nexport { default as VAvatar } from './VAvatar'\nexport { default as VBadge } from './VBadge'\nexport { default as VBottomNav } from './VBottomNav'\nexport { default as VBottomSheet } from './VBottomSheet'\nexport { default as VBreadcrumbs } from './VBreadcrumbs'\nexport { default as VBtn } from './VBtn'\nexport { default as VBtnToggle } from './VBtnToggle'\nexport { default as VCard } from './VCard'\nexport { default as VCarousel } from './VCarousel'\nexport { default as VCheckbox } from './VCheckbox'\nexport { default as VChip } from './VChip'\nexport { default as VDataTable } from './VDataTable'\nexport { default as VDatePicker } from './VDatePicker'\nexport { default as VDialog } from './VDialog'\nexport { default as VDivider } from './VDivider'\nexport { default as VExpansionPanel } from './VExpansionPanel'\nexport { default as VFooter } from './VFooter'\nexport { default as VForm } from './VForm'\nexport { default as VGrid } from './VGrid'\nexport { default as VIcon } from './VIcon'\nexport { default as VList } from './VList'\nexport { default as VMenu } from './VMenu'\nexport { default as VNavigationDrawer } from './VNavigationDrawer'\nexport { default as VPagination } from './VPagination'\nexport { default as VParallax } from './VParallax'\nexport { default as VProgressCircular } from './VProgressCircular'\nexport { default as VProgressLinear } from './VProgressLinear'\nexport { default as VRadioGroup } from './VRadioGroup'\nexport { default as VSelect } from './VSelect'\nexport { default as VSlider } from './VSlider'\nexport { default as VSnackbar } from './VSnackbar'\nexport { default as VSpeedDial } from './VSpeedDial'\nexport { default as VStepper } from './VStepper'\nexport { default as VSubheader } from './VSubheader'\nexport { default as VSwitch } from './VSwitch'\nexport { default as VSystemBar } from './VSystemBar'\nexport { default as VTabs } from './VTabs'\nexport { default as VTextField } from './VTextField'\nexport { default as VTimePicker } from './VTimePicker'\nexport { default as VToolbar } from './VToolbar'\nexport { default as VTooltip } from './VTooltip'\nexport { default as Transitions } from './transitions'\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index.js"",""import load from '../../util/load'\n\nconst Vuetify = {\n  install (Vue, opts = {}) {\n    const $vuetify = {\n      load,\n      application: {\n        bar: 0,\n        top: 0,\n        bottom: 0,\n        left: 0,\n        right: 0\n      },\n      breakpoint: {},\n      touchSupport: false\n    }\n\n    Vue.util.defineReactive({}, 'breakpoint', $vuetify)\n    Vue.util.defineReactive({}, 'application', $vuetify)\n\n    Vue.prototype.$vuetify = $vuetify\n\n    if (opts.transitions) {\n      Object.keys(opts.transitions).forEach(key => {\n        const t = opts.transitions[key]\n        if (t.name !== undefined && t.name.startsWith('v-')) {\n          Vue.component(t.name, t)\n        }\n      })\n    }\n\n    if (opts.directives) {\n      Object.keys(opts.directives).forEach(key => {\n        const d = opts.directives[key]\n        Vue.directive(d.name, d)\n      })\n    }\n\n    if (opts.components) {\n      Object.keys(opts.components).forEach(key => {\n        const c = opts.components[key]\n        Vue.use(c)\n      })\n    }\n  }\n}\n\nexport default Vuetify\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Vuetify/index.js"",""function load (cb, i = 0) {\n  if (!document._loadCallbacks) {\n    document._loadCallbacks = []\n  }\n\n  if (document.readyState === 'complete') {\n    return cb()\n  }\n\n  document._loadCallbacks.push(cb)\n}\n\nexport default load\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/load.js"",""import VApp from './VApp'\n\nVApp.install = function install (Vue) {\n  Vue.component(VApp.name, VApp)\n}\n\nexport default VApp\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VApp/index.js"",""require('../../stylus/components/_app.styl')\n\nimport Breakpoint from '../../util/breakpoint'\nimport Themeable from '../../mixins/themeable'\nimport TouchSupport from '../../util/touchSupport'\n\nimport Resize from '../../directives/resize'\n\nexport default {\n  name: 'v-app',\n\n  mixins: [Breakpoint, Themeable, TouchSupport],\n\n  directives: {\n    Resize\n  },\n\n  data: () => ({\n    resizeTimeout: {}\n  }),\n\n  props: {\n    id: {\n      type: String,\n      default: 'app'\n    }\n  },\n\n  mounted () {\n    this.$vuetify.breakpoint = this.breakpoint\n    window.addEventListener('load', this.runCallbacks)\n  },\n\n  methods: {\n    // Run all load callbacks created\n    // from the load helper utility\n    runCallbacks () {\n      // For unit tests\n      if (!document._loadCallbacks) return\n\n      while (document._loadCallbacks.length) {\n        document._loadCallbacks.pop()()\n      }\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'application',\n      'class': {\n        'application--dark': this.dark,\n        'application--light': !this.dark\n      },\n      attrs: { 'data-app': true },\n      domProps: { id: this.id },\n      directives: [{\n        name: 'resize',\n        value: this.onResize\n      }]\n    }\n\n    return h('div', data, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VApp/VApp.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_app.styl\n// module id = 55\n// module chunks = 0"",""/**\n * A modified version of https://gist.github.com/cb109/b074a65f7595cffc21cea59ce8d15f9b\n */\n\n/**\n * A Vue mixin to get the current width/height and the associated breakpoint.\n *\n * Useful to e.g. adapt the user interface from inside a Vue component\n * as opposed to using CSS classes. The breakpoint pixel values and\n * range names are taken from Vuetify (https://github.com/vuetifyjs).\n *\n * Use within a component:\n *\n *   import breakpoint from './breakpoint.js'\n *\n *   export default {\n *     name: 'my-component',\n *     mixins: [breakpoint],\n *     ...\n *\n * Then inside a template:\n *\n *   <div v-if=\""$breakpoint.smAndDown\"">...</div>\n */\nconst breakpoint = {\n  data () {\n    return {\n      clientWidth: clientDimensions.getWidth(),\n      clientHeight: clientDimensions.getHeight()\n    }\n  },\n\n  computed: {\n    breakpoint () {\n      const xs = this.clientWidth < 600\n      const sm = this.clientWidth < 960 && !xs\n      const md = this.clientWidth < (1280 - 16) && !(sm || xs)\n      const lg = this.clientWidth < (1920 - 16) && !(md || sm || xs)\n      const xl = this.clientWidth >= (1920 - 16) && !(lg || md || sm || xs)\n\n      const xsOnly = xs\n      const smOnly = sm\n      const smAndDown = (xs || sm) && !(md || lg || xl)\n      const smAndUp = !xs && (sm || md || lg || xl)\n      const mdOnly = md\n      const mdAndDown = (xs || sm || md) && !(lg || xl)\n      const mdAndUp = !(xs || sm) && (md || lg || xl)\n      const lgOnly = lg\n      const lgAndDown = (xs || sm || md || lg) && !xl\n      const lgAndUp = !(xs || sm || md) && (lg || xl)\n      const xlOnly = xl\n\n      let name\n      switch (true) {\n        case (xs):\n          name = 'xs'\n          break\n        case (sm):\n          name = 'sm'\n          break\n        case (md):\n          name = 'md'\n          break\n        case (lg):\n          name = 'lg'\n          break\n        default:\n          name = 'xl'\n          break\n      }\n\n      const result = {\n        // Definite breakpoint.\n        xs,\n        sm,\n        md,\n        lg,\n        xl,\n\n        // Useful e.g. to construct CSS class names dynamically.\n        name,\n\n        // Breakpoint ranges.\n        xsOnly,\n        smOnly,\n        smAndDown,\n        smAndUp,\n        mdOnly,\n        mdAndDown,\n        mdAndUp,\n        lgOnly,\n        lgAndDown,\n        lgAndUp,\n        xlOnly,\n\n        // For custom breakpoint logic.\n        width: this.clientWidth,\n        height: this.clientHeight\n      }\n\n      return result\n    }\n  },\n\n  watch: {\n    breakpoint (val) {\n      this.$vuetify.breakpoint = val\n    }\n  },\n\n  methods: {\n    onResize () {\n      this.clientWidth = clientDimensions.getWidth()\n      this.clientHeight = clientDimensions.getHeight()\n    }\n  }\n}\n\n// Cross-browser support as described in:\n// https://stackoverflow.com/questions/1248081\nconst clientDimensions = {\n  getWidth () {\n    if (typeof document === 'undefined') return 0 // SSR\n    return Math.max(\n      document.documentElement.clientWidth,\n      window.innerWidth || 0\n    )\n  },\n  getHeight () {\n    if (typeof document === 'undefined') return 0 // SSR\n    return Math.max(\n      document.documentElement.clientHeight,\n      window.innerHeight || 0\n    )\n  }\n}\n\nexport default breakpoint\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/breakpoint.js"",""import { addOnceEventListener } from './helpers'\n\n/**\n * @mixin\n */\nexport default {\n  mounted () {\n    addOnceEventListener(window, 'touchstart', () => {\n      this.$vuetify.touchSupport = true\n    })\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/touchSupport.js"",""import VAlert from './VAlert'\n\nVAlert.install = function install (Vue) {\n  Vue.component(VAlert.name, VAlert)\n}\n\nexport default VAlert\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VAlert/index.js"",""require('../../stylus/components/_alerts.styl')\n\nimport VIcon from '../VIcon'\n\nimport Colorable from '../../mixins/colorable'\nimport Toggleable from '../../mixins/toggleable'\nimport Transitionable from '../../mixins/transitionable'\n\nexport default {\n  name: 'v-alert',\n\n  components: {\n    VIcon\n  },\n\n  mixins: [Colorable, Toggleable, Transitionable],\n\n  props: {\n    dismissible: Boolean,\n    icon: String\n  },\n\n  computed: {\n    classes () {\n      return {\n        'alert--dismissible': this.dismissible,\n        [this.color || 'error']: true\n      }\n    }\n  },\n\n  render (h) {\n    const children = [h('div', this.$slots.default)]\n\n    if (this.icon) {\n      children.unshift(h('v-icon', {\n        'class': 'alert__icon'\n      }, this.icon))\n    }\n\n    if (this.dismissible) {\n      const close = h('a', {\n        'class': 'alert__dismissible',\n        domProps: { href: 'javascript:;' },\n        on: { click: () => this.$emit('input', false) }\n      }, [\n        h(VIcon, {\n          props: {\n            right: true\n          }\n        }, 'cancel')\n      ])\n\n      children.push(close)\n    }\n\n    const alert = h('div', {\n      staticClass: 'alert',\n      'class': this.classes,\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }],\n      on: this.$listeners\n    }, children)\n\n    if (!this.transition) return alert\n\n    return h('transition', {\n      props: {\n        name: this.transition,\n        origin: this.origin,\n        mode: this.mode\n      }\n    }, [alert])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VAlert/VAlert.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_alerts.styl\n// module id = 60\n// module chunks = 0"",""require('../../stylus/components/_icons.styl')\n\nimport Themeable from '../../mixins/themeable'\nimport Colorable from '../../mixins/colorable'\nimport Contextualable from '../../mixins/contextualable'\n\nexport default {\n  name: 'v-icon',\n\n  functional: true,\n\n  mixins: [Colorable, Contextualable, Themeable],\n\n  props: {\n    disabled: Boolean,\n    large: Boolean,\n    left: Boolean,\n    medium: Boolean,\n    right: Boolean,\n    xLarge: Boolean\n  },\n\n  render (h, { props, data, children = [] }) {\n    Object.keys(Contextualable.props).forEach(prop => {\n      if (props[prop]) {\n        console.warn(`Context prop '${prop}' for VIcon component has been deprecated. Use 'color' prop instead.`)\n      }\n    })\n\n    if (props.fa || props.mdi) console.warn(`The v-icon prop 'fa' and 'mdi' will be deprecated in the next release. Use 'fa' or 'mdi' prefix in icon name instead.`)\n    let iconName = ''\n    let iconType = 'material-icons'\n\n    if (children.length) {\n      iconName = children.pop().text\n    } else if (data.domProps && data.domProps.textContent) {\n      iconName = data.domProps.textContent\n      delete data.domProps.textContent\n    } else if (data.domProps && data.domProps.innerHTML) {\n      iconName = data.domProps.innerHTML\n      delete data.domProps.innerHTML\n    }\n\n    const thirdPartyIcon = iconName.indexOf('-') > -1\n    if (thirdPartyIcon) iconType = iconName.slice(0, iconName.indexOf('-'))\n\n    // To keep things backwards compatible for now\n    iconType = props.fa ? 'fa' : props.mdi ? 'mdi' : iconType\n\n    data.staticClass = (`${iconType} icon ${data.staticClass || ''}`).trim()\n    data.attrs = data.attrs || {}\n\n    const classes = Object.assign({\n      'icon--disabled': props.disabled,\n      'icon--large': props.large,\n      'icon--left': props.left,\n      'icon--medium': props.medium,\n      'icon--right': props.right,\n      'icon--x-large': props.xLarge,\n      'theme--dark': props.dark,\n      'theme--light': props.light\n    }, props.color ? Colorable.methods.addTextColorClassChecks.call(props, {}) : {\n      'primary--text': props.primary,\n      'secondary--text': props.secondary,\n      'success--text': props.success,\n      'info--text': props.info,\n      'warning--text': props.warning,\n      'error--text': props.error\n    })\n\n    const iconClasses = Object.keys(classes).filter(k => classes[k]).join(' ')\n    iconClasses && (data.staticClass += ` ${iconClasses}`)\n\n    // To keep things backwards compatible for now\n    if (props.fa || props.mdi) {\n      const comparison = props.fa ? 'fa' : 'mdi'\n\n      if (iconName.indexOf(' ') > -1) data.staticClass += ` ${comparison}-${iconName}`\n      else data.staticClass += ` ${comparison}-${iconName.split(' ').join('-')}`\n    }\n\n    if (thirdPartyIcon) data.staticClass += ` ${iconName}`\n    !(thirdPartyIcon || props.fa || props.mdi) && children.push(iconName)\n\n    return h('i', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VIcon/VIcon.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_icons.styl\n// module id = 62\n// module chunks = 0"",""export default {\n  props: {\n    mode: String,\n    origin: String,\n    transition: String\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/transitionable.js"",""import VAvatar from './VAvatar'\n\nVAvatar.install = function install (Vue) {\n  Vue.component(VAvatar.name, VAvatar)\n}\n\nexport default VAvatar\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VAvatar/index.js"",""require('../../stylus/components/_avatars.styl')\n\nexport default {\n  name: 'v-avatar',\n\n  functional: true,\n\n  props: {\n    size: {\n      type: String,\n      default: '48px'\n    },\n    tile: Boolean\n  },\n\n  render (h, { data, props, children }) {\n    data.staticClass = (`avatar ${data.staticClass || ''}`).trim()\n    data.style = data.style || {}\n\n    if (props.tile) data.staticClass += ' avatar--tile'\n\n    data.style.height = props.size\n    data.style.width = props.size\n\n    return h('div', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VAvatar/VAvatar.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_avatars.styl\n// module id = 66\n// module chunks = 0"",""import VBadge from './VBadge'\n\nVBadge.install = function install (Vue) {\n  Vue.component(VBadge.name, VBadge)\n}\n\nexport default VBadge\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBadge/index.js"",""require('../../stylus/components/_badges.styl')\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'v-badge',\n\n  mixins: [Colorable, Toggleable],\n\n  props: {\n    bottom: Boolean,\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    left: Boolean,\n    overlap: Boolean,\n    transition: {\n      type: String,\n      default: 'fab-transition'\n    },\n    value: {\n      default: true\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'badge--bottom': this.bottom,\n        'badge--left': this.left,\n        'badge--overlap': this.overlap\n      }\n    }\n  },\n\n  render (h) {\n    const badge = this.$slots.badge ? [h('span', {\n      staticClass: 'badge__badge',\n      'class': this.addBackgroundColorClassChecks({}),\n      attrs: this.attrs,\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }]\n    }, this.$slots.badge)] : null\n\n    return h('span', {\n      staticClass: 'badge',\n      'class': this.classes\n    }, [\n      this.$slots.default,\n      h('transition', {\n        props: {\n          name: this.transition\n        }\n      }, badge)\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBadge/VBadge.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_badges.styl\n// module id = 69\n// module chunks = 0"",""import VBottomNav from './VBottomNav'\n\nVBottomNav.install = function install (Vue) {\n  Vue.component(VBottomNav.name, VBottomNav)\n}\n\nexport default VBottomNav\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBottomNav/index.js"",""require('../../stylus/components/_bottom-navs.styl')\n\nimport ButtonGroup from '../../mixins/button-group'\n\nexport default {\n  name: 'v-bottom-nav',\n\n  mixins: [ButtonGroup],\n\n  props: {\n    absolute: Boolean,\n    active: [Number, String],\n    shift: Boolean,\n    value: { required: false }\n  },\n\n  watch: {\n    active () {\n      this.update()\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'bottom-nav': true,\n        'bottom-nav--absolute': this.absolute,\n        'bottom-nav--shift': this.shift,\n        'bottom-nav--active': this.value\n      }\n    }\n  },\n\n  methods: {\n    isSelected (i) {\n      const item = this.getValue(i)\n      return this.active === item\n    },\n    updateValue (i) {\n      const item = this.getValue(i)\n      this.$emit('update:active', item)\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      class: this.classes\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBottomNav/VBottomNav.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_bottom-navs.styl\n// module id = 72\n// module chunks = 0"",""import VBottomSheet from './VBottomSheet'\n\nVBottomSheet.install = function install (Vue) {\n  Vue.component(VBottomSheet.name, VBottomSheet)\n}\n\nexport default VBottomSheet\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBottomSheet/index.js"",""require('../../stylus/components/_bottom-sheets.styl')\n\nimport VDialog from '../VDialog/VDialog'\n\nexport default {\n  name: 'v-bottom-sheet',\n\n  components: {\n    VDialog\n  },\n\n  props: {\n    inset: Boolean,\n    value: null\n  },\n\n  render (h) {\n    const activator = h('template', {\n      slot: 'activator'\n    }, this.$slots.activator)\n\n    const contentClass = [\n      'bottom-sheet',\n      this.inset ? 'bottom-sheet--inset' : ''\n    ].join(' ')\n\n    return h(VDialog, {\n      attrs: {\n        ...this.$attrs\n      },\n      on: {\n        ...this.$listeners\n      },\n      props: {\n        contentClass: contentClass,\n        transition: 'bottom-sheet-transition',\n        value: this.value\n      }\n    }, [activator, this.$slots.default])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBottomSheet/VBottomSheet.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_bottom-sheets.styl\n// module id = 75\n// module chunks = 0"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_dialogs.styl\n// module id = 76\n// module chunks = 0"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_overlay.styl\n// module id = 77\n// module chunks = 0"",""import VBreadcrumbs from './VBreadcrumbs'\nimport VBreadcrumbsItem from './VBreadcrumbsItem'\n\nexport { VBreadcrumbs, VBreadcrumbsItem }\n\nVBreadcrumbs.install = function install (Vue) {\n  Vue.component(VBreadcrumbs.name, VBreadcrumbs)\n  Vue.component(VBreadcrumbsItem.name, VBreadcrumbsItem)\n}\n\nexport default VBreadcrumbs\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBreadcrumbs/index.js"",""require('../../stylus/components/_breadcrumbs.styl')\n\nexport default {\n  name: 'v-breadcrumbs',\n\n  provide () {\n    return {\n      divider: this.divider\n    }\n  },\n\n  props: {\n    divider: {\n      type: String,\n      default: '/'\n    },\n    icons: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'breadcrumbs': true,\n        'breadcrumbs--with-icons': this.icons\n      }\n    }\n  },\n\n  render (h) {\n    return h('ul', {\n      'class': this.classes,\n      props: { items: this.items }\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBreadcrumbs/VBreadcrumbs.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_breadcrumbs.styl\n// module id = 80\n// module chunks = 0"",""import Routable from '../../mixins/routable'\n\nexport default {\n  name: 'v-breadcrumbs-item',\n\n  mixins: [Routable],\n\n  inject: ['divider'],\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'breadcrumbs__item--disabled'\n    }\n  },\n\n  computed: {\n    classes () {\n      const classes = {\n        'breadcrumbs__item': true\n      }\n\n      classes[this.activeClass] = this.disabled\n\n      return classes\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n\n    return h('li', {\n      attrs: { 'data-divider': this.divider }\n    }, [\n      h(tag, data, this.$slots.default)\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBreadcrumbs/VBreadcrumbsItem.js"",""require('../../stylus/components/_buttons.styl')\n\nimport Colorable from '../../mixins/colorable'\nimport Contextualable from '../../mixins/contextualable'\nimport Positionable from '../../mixins/positionable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\n\nexport default {\n  name: 'v-btn',\n\n  mixins: [\n    Colorable,\n    Contextualable,\n    Routable,\n    Positionable,\n    Themeable,\n    ToggleableFactory('inputValue')\n  ],\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'btn--active'\n    },\n    block: Boolean,\n    fab: Boolean,\n    flat: Boolean,\n    icon: Boolean,\n    large: Boolean,\n    loading: Boolean,\n    outline: Boolean,\n    raised: {\n      type: Boolean,\n      default: true\n    },\n    ripple: {\n      type: [Boolean, Object],\n      default: true\n    },\n    round: Boolean,\n    small: Boolean,\n    tag: {\n      type: String,\n      default: 'button'\n    },\n    type: {\n      type: String,\n      default: 'button'\n    },\n    value: null\n  },\n\n  computed: {\n    classes () {\n      const colorBackground = !this.outline && !this.flat\n      const colorText = !this.disabled && !colorBackground\n\n      const classes = {\n        'btn': true,\n        'btn--active': this.isActive,\n        'btn--absolute': this.absolute,\n        'btn--block': this.block,\n        'btn--bottom': this.bottom,\n        'btn--disabled': this.disabled,\n        'btn--flat': this.flat,\n        'btn--floating': this.fab,\n        'btn--fixed': this.fixed,\n        'btn--hover': this.hover,\n        'btn--icon': this.icon,\n        'btn--large': this.large,\n        'btn--left': this.left,\n        'btn--loader': this.loading,\n        'btn--outline': this.outline,\n        'btn--raised': !this.flat || this.raised,\n        'btn--right': this.right,\n        'btn--round': this.round,\n        'btn--router': this.to,\n        'btn--small': this.small,\n        'btn--top': this.top,\n        ...this.themeClasses\n      }\n\n      if (!this.color) {\n        return Object.assign(classes, {\n          'primary': this.primary && colorBackground,\n          'secondary': this.secondary && colorBackground,\n          'success': this.success && colorBackground,\n          'info': this.info && colorBackground,\n          'warning': this.warning && colorBackground,\n          'error': this.error && colorBackground,\n          'primary--text': this.primary && colorText,\n          'secondary--text': this.secondary && colorText,\n          'success--text': this.success && colorText,\n          'info--text': this.info && colorText,\n          'warning--text': this.warning && colorText,\n          'error--text': this.error && colorText\n        })\n      }\n\n      return colorBackground\n        ? this.addBackgroundColorClassChecks(classes)\n        : this.addTextColorClassChecks(classes)\n    }\n  },\n\n  methods: {\n    // Prevent focus to match md spec\n    click (e) {\n      !this.fab &&\n        e.detail &&\n        this.$el.blur()\n\n      this.$emit('click', e)\n    },\n    genContent () {\n      return this.$createElement(\n        'div',\n        { 'class': 'btn__content' },\n        [this.$slots.default]\n      )\n    },\n    genLoader () {\n      const children = []\n\n      if (!this.$slots.loader) {\n        children.push(this.$createElement('v-progress-circular', {\n          props: {\n            indeterminate: true,\n            size: 26\n          }\n        }))\n      } else {\n        children.push(this.$slots.loader)\n      }\n\n      return this.$createElement('span', { 'class': 'btn__loading' }, children)\n    }\n  },\n\n  mounted () {\n    Object.keys(Contextualable.props).forEach(prop => {\n      if (this[prop]) {\n        console.warn(`Context prop '${prop}' for VBtn component has been deprecated. Use 'color' prop instead.`)\n      }\n    })\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n    const children = [this.genContent()]\n\n    tag === 'button' && (data.attrs.type = this.type)\n    this.loading && children.push(this.genLoader())\n\n    data.attrs.value = ['string', 'number'].includes(typeof this.value)\n      ? this.value\n      : JSON.stringify(this.value)\n\n    return h(tag, data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBtn/VBtn.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_buttons.styl\n// module id = 83\n// module chunks = 0"",""import VBtnToggle from './VBtnToggle'\n\nVBtnToggle.install = function install (Vue) {\n  Vue.component(VBtnToggle.name, VBtnToggle)\n}\n\nexport default VBtnToggle\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBtnToggle/index.js"",""require('../../stylus/components/_button-toggle.styl')\n\nimport ButtonGroup from '../../mixins/button-group'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-btn-toggle',\n\n  model: {\n    prop: 'inputValue',\n    event: 'change'\n  },\n\n  mixins: [ButtonGroup, Themeable],\n\n  props: {\n    inputValue: {\n      required: false\n    },\n    items: {\n      type: Array,\n      default: () => []\n    },\n    mandatory: Boolean,\n    multiple: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'btn-toggle': true,\n        'btn-toggle--selected': this.hasValue,\n        'theme--light': this.light,\n        'theme--dark': this.dark\n      }\n    },\n    hasValue () {\n      return (this.multiple && this.inputValue.length) ||\n        (!this.multiple && this.inputValue !== null &&\n          typeof this.inputValue !== 'undefined')\n    }\n  },\n\n  watch: {\n    inputValue: {\n      handler () {\n        this.update()\n      },\n      deep: true\n    }\n  },\n\n  methods: {\n    isSelected (i) {\n      const item = this.getValue(i)\n      if (!this.multiple) {\n        return this.inputValue === item\n      }\n\n      return this.inputValue.includes(item)\n    },\n    updateValue (i) {\n      const item = this.getValue(i)\n      if (!this.multiple) {\n        if (this.mandatory && this.inputValue === item) return\n        return this.$emit('change', this.inputValue === item ? null : item)\n      }\n\n      const items = this.inputValue.slice()\n\n      const index = items.indexOf(item)\n      if (index > -1) {\n        if (this.mandatory && items.length === 1) return\n        items.length >= 1 && items.splice(index, 1)\n      } else {\n        items.push(item)\n      }\n\n      this.$emit('change', items)\n    }\n  },\n\n  mounted () {\n    if (this.items.length > 0) {\n      console.warn('The \\'items\\' props has been deprecated. v-btn-toggle now has a default slot where you can place buttons.')\n    }\n  },\n\n  render (h) {\n    return h('div', { class: this.classes }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VBtnToggle/VBtnToggle.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_button-toggle.styl\n// module id = 86\n// module chunks = 0"",""require('../../stylus/components/_cards.styl')\n\nimport Colorable from '../../mixins/colorable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-card',\n\n  mixins: [Colorable, Routable, Themeable],\n\n  props: {\n    flat: Boolean,\n    height: {\n      type: String,\n      default: 'auto'\n    },\n    hover: Boolean,\n    img: String,\n    raised: Boolean,\n    tag: {\n      type: String,\n      default: 'div'\n    },\n    tile: Boolean\n  },\n\n  computed: {\n    classes () {\n      return this.addBackgroundColorClassChecks({\n        'card': true,\n        'card--flat': this.flat,\n        'card--horizontal': this.horizontal,\n        'card--hover': this.hover,\n        'card--raised': this.raised,\n        'card--tile': this.tile,\n        'theme--light': this.light,\n        'theme--dark': this.dark\n      })\n    },\n    styles () {\n      const style = {\n        height: isNaN(this.height) ? this.height : `${this.height}px`\n      }\n\n      if (this.img) {\n        style.background = `url(${this.img}) center center / cover no-repeat`\n      }\n\n      return style\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink()\n\n    data.style = this.styles\n\n    return h(tag, data, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCard/VCard.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_cards.styl\n// module id = 88\n// module chunks = 0"",""export default {\n  name: 'v-card-media',\n\n  props: {\n    contain: Boolean,\n    height: {\n      type: [Number, String],\n      default: 'auto'\n    },\n    src: {\n      type: String\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': 'card__media',\n      style: {\n        height: !isNaN(this.height) ? `${this.height}px` : this.height\n      },\n      on: this.$listeners\n    }\n\n    const children = []\n\n    if (this.src) {\n      children.push(h('div', {\n        'class': 'card__media__background',\n        style: {\n          background: `url(${this.src}) center center / ${this.contain ? 'contain' : 'cover'} no-repeat`\n        }\n      }))\n    }\n\n    children.push(h('div', {\n      'class': 'card__media__content'\n    }, this.$slots.default))\n\n    return h('div', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCard/VCardMedia.js"",""export default {\n  name: 'v-card-title',\n\n  functional: true,\n\n  props: {\n    primaryTitle: Boolean\n  },\n\n  render (h, { data, props, children }) {\n    data.staticClass = (`card__title ${data.staticClass || ''}`).trim()\n\n    if (props.primaryTitle) data.staticClass += ' card__title--primary'\n\n    return h('div', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCard/VCardTitle.js"",""import VCarousel from './VCarousel'\nimport VCarouselItem from './VCarouselItem'\n\nexport { VCarousel, VCarouselItem }\n\nVCarousel.install = function install (Vue) {\n  Vue.component(VCarousel.name, VCarousel)\n  Vue.component(VCarouselItem.name, VCarouselItem)\n}\n\nexport default VCarousel\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCarousel/index.js"",""require('../../stylus/components/_carousel.styl')\n\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\nimport Bootable from '../../mixins/bootable'\nimport Themeable from '../../mixins/themeable'\n\nimport Touch from '../../directives/touch'\n\nexport default {\n  name: 'v-carousel',\n\n  mixins: [Bootable, Themeable],\n\n  directives: { Touch },\n\n  data () {\n    return {\n      inputValue: null,\n      items: [],\n      slideTimeout: null,\n      reverse: false\n    }\n  },\n\n  props: {\n    cycle: {\n      type: Boolean,\n      default: true\n    },\n    hideControls: Boolean,\n    icon: {\n      type: String,\n      default: 'fiber_manual_record'\n    },\n    interval: {\n      type: [Number, String],\n      default: 6000,\n      validator: value => value > 0\n    },\n    leftControlIcon: {\n      type: [Boolean, String],\n      default: 'chevron_left'\n    },\n    rightControlIcon: {\n      type: [Boolean, String],\n      default: 'chevron_right'\n    },\n    value: Number\n  },\n\n  watch: {\n    inputValue () {\n      // Evaluate items when inputValue changes to account for\n      // dynamic changing of children\n      this.items = this.$children.filter(i => {\n        return i.$el.classList && i.$el.classList.contains('carousel__item')\n      })\n\n      this.items.forEach(i => i.open(\n        this.items[this.inputValue]._uid,\n        this.reverse\n      ))\n\n      this.$emit('input', this.inputValue)\n      this.restartTimeout()\n    },\n    value (val) {\n      this.inputValue = val\n    },\n    interval () {\n      this.restartTimeout()\n    },\n    cycle (val) {\n      if (val) {\n        this.restartTimeout()\n      } else {\n        clearTimeout(this.slideTimeout)\n        this.slideTimeout = null\n      }\n    }\n  },\n\n  mounted () {\n    this.init()\n  },\n\n  methods: {\n    genControls () {\n      return this.$createElement('div', {\n        staticClass: 'carousel__controls'\n      }, this.genItems())\n    },\n    genIcon (direction, icon, fn) {\n      if (!icon) return null\n\n      return this.$createElement('div', {\n        staticClass: `carousel__${direction}`\n      }, [\n        this.$createElement(VBtn, {\n          props: {\n            icon: true,\n            dark: this.dark || !this.light,\n            light: this.light\n          },\n          on: { click: fn }\n        }, [this.$createElement(VIcon, icon)])\n      ])\n    },\n    genItems () {\n      return this.items.map((item, index) => {\n        return this.$createElement(VBtn, {\n          class: {\n            'carousel__controls__item': true,\n            'carousel__controls__item--active': index === this.inputValue\n          },\n          props: {\n            icon: true,\n            dark: this.dark || !this.light,\n            light: this.light\n          },\n          key: index,\n          on: { click: this.select.bind(this, index) }\n        }, [this.$createElement(VIcon, this.icon)])\n      })\n    },\n    restartTimeout () {\n      this.slideTimeout && clearTimeout(this.slideTimeout)\n      this.slideTimeout = null\n\n      const raf = requestAnimationFrame || setTimeout\n      raf(this.startTimeout)\n    },\n    init () {\n      this.inputValue = this.value || 0\n    },\n    next () {\n      this.reverse = false\n      this.inputValue = (this.inputValue + 1) % this.items.length\n    },\n    prev () {\n      this.reverse = true\n      this.inputValue = (this.inputValue + this.items.length - 1) % this.items.length\n    },\n    select (index) {\n      this.reverse = index < this.inputValue\n      this.inputValue = index\n    },\n    startTimeout () {\n      if (!this.cycle) return\n\n      this.slideTimeout = setTimeout(() => this.next(), this.interval > 0 ? this.interval : 6000)\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      staticClass: 'carousel',\n      directives: [{\n        name: 'touch',\n        value: {\n          left: this.next,\n          right: this.prev\n        }\n      }]\n    }, [\n      this.genIcon('left', this.leftControlIcon, this.prev),\n      this.genIcon('right', this.rightControlIcon, this.next),\n      this.hideControls ? null : this.genControls(),\n      this.$slots.default\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCarousel/VCarousel.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_carousel.styl\n// module id = 93\n// module chunks = 0"",""export default {\n  name: 'v-carousel-item',\n\n  data () {\n    return {\n      active: false,\n      reverse: false\n    }\n  },\n\n  props: {\n    src: {\n      type: String,\n      required: true\n    },\n\n    transition: {\n      type: String,\n      default: 'tab-transition'\n    },\n\n    reverseTransition: {\n      type: String,\n      default: 'tab-reverse-transition'\n    }\n  },\n\n  computed: {\n    computedTransition () {\n      return this.reverse ? this.reverseTransition : this.transition\n    },\n\n    styles () {\n      return {\n        backgroundImage: `url(${this.src})`\n      }\n    }\n  },\n\n  methods: {\n    open (id, reverse) {\n      this.active = this._uid === id\n      this.reverse = reverse\n    }\n  },\n\n  render (h) {\n    const item = h('div', {\n      class: {\n        'carousel__item': true,\n        'reverse': this.reverse\n      },\n      style: this.styles,\n      on: this.$listeners,\n      directives: [\n        {\n          name: 'show',\n          value: this.active\n        }\n      ]\n    }, [this.$slots.default])\n\n    return h('transition', { props: { name: this.computedTransition } }, [item])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCarousel/VCarouselItem.js"",""require('../../stylus/components/_input-groups.styl')\nrequire('../../stylus/components/_selection-controls.styl')\n\nimport VIcon from '../VIcon'\nimport { VFadeTransition } from '../transitions'\nimport Rippleable from '../../mixins/rippleable'\nimport Selectable from '../../mixins/selectable'\n\nexport default {\n  name: 'v-checkbox',\n\n  components: {\n    VFadeTransition,\n    VIcon\n  },\n\n  mixins: [Rippleable, Selectable],\n\n  data () {\n    return {\n      inputIndeterminate: this.indeterminate\n    }\n  },\n\n  props: {\n    indeterminate: Boolean\n  },\n\n  computed: {\n    classes () {\n      const classes = {\n        'checkbox': true,\n        'input-group--selection-controls': true,\n        'input-group--active': this.isActive\n      }\n\n      if (this.hasError) {\n        classes['error--text'] = true\n      } else {\n        return this.addTextColorClassChecks(classes)\n      }\n\n      return classes\n    },\n    icon () {\n      if (this.inputIndeterminate) {\n        return 'indeterminate_check_box'\n      } else if (this.isActive) {\n        return 'check_box'\n      } else {\n        return 'check_box_outline_blank'\n      }\n    }\n  },\n\n  methods: {\n    groupFocus (e) {\n      this.isFocused = true\n      this.$emit('focus', e)\n    },\n    groupBlur (e) {\n      this.isFocused = false\n      this.tabFocused = false\n      this.$emit('blur', this.inputValue)\n    }\n  },\n\n  render (h) {\n    const transition = h('v-fade-transition', [\n      h('v-icon', {\n        staticClass: 'icon--selection-control',\n        'class': {\n          'icon--checkbox': this.icon === 'check_box'\n        },\n        key: this.icon\n      }, this.icon)\n    ])\n\n    const data = {\n      attrs: {\n        tabindex: this.disabled\n          ? -1\n          : this.internalTabIndex || this.tabindex,\n        role: 'checkbox',\n        'aria-checked': this.inputIndeterminate && 'mixed' || this.isActive && 'true' || 'false',\n        'aria-label': this.label\n      }\n    }\n\n    return this.genInputGroup([transition, this.genRipple()], data)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VCheckbox/VCheckbox.js"",""import { addOnceEventListener } from '../../util/helpers'\n\nexport default {\n  enter (el, done) {\n    // Remove initial transition\n    el.style.transition = 'none'\n    addOnceEventListener(el, 'transitionend', done)\n\n    // Get height that is to be scrolled\n    el.style.overflow = 'hidden'\n    el.style.height = null\n    el.style.display = 'block'\n    const height = `${el.clientHeight}px`\n    el.style.height = 0\n    el.style.transition = null\n\n    setTimeout(() => (el.style.height = height), 100)\n  },\n\n  afterEnter (el) {\n    el.style.height = 'auto'\n    el.style.overflow = null\n  },\n\n  leave (el, done) {\n    addOnceEventListener(el, 'transitionend', done)\n\n    // Set height before we transition to 0\n    el.style.overflow = 'hidden'\n    el.style.height = `${el.clientHeight}px`\n\n    setTimeout(() => (el.style.height = 0), 100)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/transitions/expand-transition.js"",""export default {\n  data () {\n    return {\n      errorBucket: [],\n      hasFocused: false,\n      hasInput: false,\n      shouldValidate: false,\n      valid: false\n    }\n  },\n\n  props: {\n    error: {\n      type: Boolean\n    },\n    errorMessages: {\n      type: [String, Array],\n      default: () => []\n    },\n    rules: {\n      type: Array,\n      default: () => []\n    },\n    validateOnBlur: Boolean\n  },\n\n  computed: {\n    validations () {\n      if (!Array.isArray(this.errorMessages)) {\n        return [this.errorMessages]\n      } else if (this.errorMessages.length > 0) {\n        return this.errorMessages\n      } else if (this.shouldValidate) {\n        return this.errorBucket\n      } else {\n        return []\n      }\n    },\n    hasError () {\n      return this.validations.length > 0 ||\n        this.errorMessages.length > 0 ||\n        this.error\n    }\n  },\n\n  watch: {\n    rules: {\n      handler (newVal, oldVal) {\n        // TODO: This handler seems to trigger when input changes, even though\n        // rules array stays the same? Solved it like this for now\n        if (newVal.length === oldVal.length) return\n\n        this.validate()\n      },\n      deep: true\n    },\n    inputValue (val) {\n      // If it's the first time we're setting input,\n      // mark it with hasInput\n      if (!!val && !this.hasInput) this.hasInput = true\n\n      if (this.hasInput && !this.validateOnBlur) this.shouldValidate = true\n    },\n    isFocused (val) {\n      // If we're not focused, and it's the first time\n      // we're defocusing, set shouldValidate to true\n      if (!val && !this.hasFocused) {\n        this.hasFocused = true\n        this.shouldValidate = true\n\n        this.$emit('update:error', this.errorBucket.length > 0)\n      }\n    },\n    hasError (val) {\n      if (this.shouldValidate) {\n        this.$emit('update:error', val)\n      }\n    },\n    error (val) {\n      this.shouldValidate = !!val\n    }\n  },\n\n  mounted () {\n    this.shouldValidate = !!this.error\n    this.validate()\n  },\n\n  methods: {\n    reset () {\n      // TODO: Do this another way!\n      // This is so that we can reset all types of inputs\n      this.$emit('input', this.isMultiple ? [] : null)\n      this.$emit('change', null)\n\n      this.$nextTick(() => {\n        this.shouldValidate = false\n        this.hasFocused = false\n        this.validate()\n      })\n    },\n    validate (force = false, value = this.inputValue) {\n      if (force) this.shouldValidate = true\n\n      this.errorBucket = []\n\n      this.rules.forEach(rule => {\n        const valid = typeof rule === 'function' ? rule(value) : rule\n\n        if (valid !== true && !['string', 'boolean'].includes(typeof valid)) {\n          throw new TypeError(`Rules should return a string or boolean, received '${typeof valid}' instead`)\n        }\n\n        if (valid !== true) {\n          this.errorBucket.push(valid)\n        }\n      })\n\n      this.valid = this.errorBucket.length === 0\n\n      return this.valid\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/validatable.js"",""import VChip from './VChip'\n\nVChip.install = function install (Vue) {\n  Vue.component(VChip.name, VChip)\n}\n\nexport default VChip\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VChip/index.js"",""require('../../stylus/components/_chips.styl')\n\nimport VIcon from '../VIcon'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'v-chip',\n\n  components: {\n    VIcon\n  },\n\n  mixins: [Colorable, Themeable, Toggleable],\n\n  props: {\n    close: Boolean,\n    disabled: Boolean,\n    label: Boolean,\n    outline: Boolean,\n    // Used for selects/tagging\n    selected: Boolean,\n    small: Boolean,\n    textColor: String,\n    value: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  computed: {\n    classes () {\n      const classes = this.addBackgroundColorClassChecks({\n        'chip': true,\n        'chip--disabled': this.disabled,\n        'chip--selected': this.selected,\n        'chip--label': this.label,\n        'chip--outline': this.outline,\n        'chip--small': this.small,\n        'chip--removable': this.close,\n        'theme--light': this.light,\n        'theme--dark': this.dark\n      })\n\n      return (this.textColor || this.outline)\n        ? this.addTextColorClassChecks(classes, this.textColor ? 'textColor' : 'color')\n        : classes\n    }\n  },\n\n  render (h) {\n    const children = [this.$slots.default]\n    const data = {\n      'class': this.classes,\n      attrs: { tabindex: this.disabled ? -1 : 0 },\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }],\n      on: this.$listeners\n    }\n\n    if (this.close) {\n      const data = {\n        staticClass: 'chip__close',\n        on: {\n          click: e => {\n            e.stopPropagation()\n\n            this.$emit('input', false)\n          }\n        }\n      }\n\n      children.push(h('div', data, [\n        h(VIcon, { props: { right: true } }, 'cancel')\n      ]))\n    }\n\n    return h('span', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VChip/VChip.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_chips.styl\n// module id = 100\n// module chunks = 0"",""import {\n  createSimpleFunctional\n} from '../../util/helpers'\n\nimport VDataTable from './VDataTable'\nimport VEditDialog from './VEditDialog'\n\nVDataTable.install = function install (Vue) {\n  const VTableOverflow = createSimpleFunctional('table__overflow')\n\n  Vue.component(VDataTable.name, VDataTable)\n  Vue.component(VEditDialog.name, VEditDialog)\n  Vue.component('v-table-overflow', VTableOverflow)\n}\n\nexport default VDataTable\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDataTable/index.js"",""require('../../stylus/components/_tables.styl')\nrequire('../../stylus/components/_data-table.styl')\n\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\nimport VProgressLinear from '../VProgressLinear'\nimport VSelect from '../VSelect'\n\nimport Filterable from '../../mixins/filterable'\nimport Themeable from '../../mixins/themeable'\nimport Loadable from '../../mixins/loadable'\nimport Head from './mixins/head'\nimport Body from './mixins/body'\nimport Foot from './mixins/foot'\nimport Progress from './mixins/progress'\n\nimport {\n  createSimpleFunctional,\n  getObjectValueByPath\n} from '../../util/helpers'\n\nexport default {\n  name: 'v-data-table',\n\n  components: {\n    VBtn,\n    VIcon,\n    VProgressLinear,\n    VSelect,\n    // Importing does not work properly\n    'v-table-overflow': createSimpleFunctional('table__overflow')\n  },\n\n  data () {\n    return {\n      all: false,\n      searchLength: 0,\n      defaultPagination: {\n        descending: false,\n        page: 1,\n        rowsPerPage: 5,\n        sortBy: null,\n        totalItems: 0\n      },\n      expanded: {}\n    }\n  },\n\n  mixins: [Head, Body, Filterable, Foot, Loadable, Progress, Themeable],\n\n  props: {\n    expand: {\n      type: Boolean\n    },\n    headers: {\n      type: Array,\n      default: () => []\n    },\n    headerText: {\n      type: String,\n      default: 'text'\n    },\n    hideActions: Boolean,\n    hideHeaders: Boolean,\n    mustSort: Boolean,\n    noResultsText: {\n      type: String,\n      default: 'No matching records found'\n    },\n    rowsPerPageItems: {\n      type: Array,\n      default () {\n        return [\n          5,\n          10,\n          25,\n          { text: 'All', value: -1 }\n        ]\n      }\n    },\n    rowsPerPageText: {\n      type: String,\n      default: 'Rows per page:'\n    },\n    selectAll: [Boolean, String],\n    search: {\n      required: false\n    },\n    filter: {\n      type: Function,\n      default: (val, search) => {\n        return val !== null &&\n          ['undefined', 'boolean'].indexOf(typeof val) === -1 &&\n          val.toString().toLowerCase().indexOf(search) !== -1\n      }\n    },\n    customFilter: {\n      type: Function,\n      default: (items, search, filter) => {\n        search = search.toString().toLowerCase()\n        return items.filter(i => (\n          Object.keys(i).some(j => filter(i[j], search))\n        ))\n      }\n    },\n    customSort: {\n      type: Function,\n      default: (items, index, isDescending) => {\n        if (index === null) return items\n\n        return items.sort((a, b) => {\n          let sortA = getObjectValueByPath(a, index)\n          let sortB = getObjectValueByPath(b, index)\n\n          if (isDescending) {\n            [sortA, sortB] = [sortB, sortA]\n          }\n\n          // Check if both are numbers\n          if (!isNaN(sortA) && !isNaN(sortB)) {\n            return sortA - sortB\n          }\n\n          // Check if both cannot be evaluated\n          if (sortA === null && sortB === null) {\n            return 0\n          }\n\n          [sortA, sortB] = [sortA, sortB]\n            .map(s => (\n              (s || '').toString().toLocaleLowerCase()\n            ))\n\n          if (sortA > sortB) return 1\n          if (sortA < sortB) return -1\n\n          return 0\n        })\n      }\n    },\n    value: {\n      type: Array,\n      default: () => []\n    },\n    items: {\n      type: Array,\n      required: true,\n      default: () => []\n    },\n    totalItems: {\n      type: Number,\n      default: null\n    },\n    itemKey: {\n      type: String,\n      default: 'id'\n    },\n    pagination: {\n      type: Object,\n      default: () => {}\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'datatable table': true,\n        'datatable--select-all': this.selectAll !== false,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      }\n    },\n    computedPagination () {\n      return this.hasPagination\n        ? this.pagination\n        : this.defaultPagination\n    },\n    hasPagination () {\n      const pagination = this.pagination || {}\n\n      return Object.keys(pagination).length > 0\n    },\n    hasSelectAll () {\n      return this.selectAll !== undefined && this.selectAll !== false\n    },\n    itemsLength () {\n      if (this.search) return this.searchLength\n      return this.totalItems || this.items.length\n    },\n    indeterminate () {\n      return this.hasSelectAll && this.someItems && !this.everyItem\n    },\n    everyItem () {\n      return this.filteredItems.length &&\n        this.filteredItems.every(i => this.isSelected(i))\n    },\n    someItems () {\n      return this.filteredItems.some(i => this.isSelected(i))\n    },\n    getPage () {\n      const { rowsPerPage } = this.computedPagination\n\n      return rowsPerPage === Object(rowsPerPage)\n        ? rowsPerPage.value\n        : rowsPerPage\n    },\n    pageStart () {\n      return this.getPage === -1\n        ? 0\n        : (this.computedPagination.page - 1) * this.getPage\n    },\n    pageStop () {\n      return this.getPage === -1\n        ? this.itemsLength\n        : this.computedPagination.page * this.getPage\n    },\n    filteredItems () {\n      if (this.totalItems) return this.items\n\n      let items = this.items.slice()\n      const hasSearch = typeof this.search !== 'undefined' &&\n        this.search !== null\n\n      if (hasSearch) {\n        items = this.customFilter(items, this.search, this.filter)\n        this.searchLength = items.length\n      }\n\n      items = this.customSort(\n        items,\n        this.computedPagination.sortBy,\n        this.computedPagination.descending\n      )\n\n      return this.hideActions &&\n        !this.hasPagination\n        ? items\n        : items.slice(this.pageStart, this.pageStop)\n    },\n    selected () {\n      const selected = {}\n      this.value.forEach(i => (selected[i[this.itemKey]] = true))\n      return selected\n    }\n  },\n\n  watch: {\n    indeterminate (val) {\n      if (val) this.all = true\n    },\n    someItems (val) {\n      if (!val) this.all = false\n    },\n    search () {\n      this.updatePagination({ page: 1, totalItems: this.itemsLength })\n    },\n    everyItem (val) {\n      if (val) this.all = true\n    }\n  },\n\n  methods: {\n    updatePagination (val) {\n      const pagination = this.hasPagination\n        ? this.pagination\n        : this.defaultPagination\n      const updatedPagination = Object.assign({}, pagination, val)\n      this.$emit('update:pagination', updatedPagination)\n\n      if (!this.hasPagination) {\n        this.defaultPagination = updatedPagination\n      }\n    },\n    isSelected (item) {\n      return this.selected[item[this.itemKey]]\n    },\n    isExpanded (item) {\n      return this.expanded[item[this.itemKey]]\n    },\n    sort (index) {\n      const { sortBy, descending } = this.computedPagination\n      if (sortBy === null) {\n        this.updatePagination({ sortBy: index, descending: false })\n      } else if (sortBy === index && !descending) {\n        this.updatePagination({ descending: true })\n      } else if (sortBy !== index) {\n        this.updatePagination({ sortBy: index, descending: false })\n      } else if (!this.mustSort) {\n        this.updatePagination({ sortBy: null, descending: null })\n      } else {\n        this.updatePagination({ sortBy: index, descending: false })\n      }\n    },\n    needsTR (row) {\n      return row.length && row.find(c => c.tag === 'td')\n    },\n    genTR (children, data = {}) {\n      return this.$createElement('tr', data, children)\n    },\n    toggle (value) {\n      const selected = Object.assign({}, this.selected)\n      this.filteredItems.forEach(i => (\n        selected[i[this.itemKey]] = value)\n      )\n\n      this.$emit('input', this.items.filter(i => (\n        selected[i[this.itemKey]]))\n      )\n    }\n  },\n\n  created () {\n    const firstSortable = this.headers.find(h => (\n      !('sortable' in h) || h.sortable)\n    )\n\n    this.defaultPagination.sortBy = firstSortable\n      ? firstSortable.value\n      : null\n\n    if (!this.rowsPerPageItems.length) {\n      console.warn('The prop \\'rows-per-page-items\\' in v-data-table can not be empty.')\n    } else {\n      this.defaultPagination.rowsPerPage = this.rowsPerPageItems[0]\n    }\n\n    this.defaultPagination.totalItems = this.itemsLength\n\n    this.updatePagination(\n      Object.assign({}, this.defaultPagination, this.pagination)\n    )\n  },\n\n  render (h) {\n    return h('v-table-overflow', {}, [\n      h('table', {\n        'class': this.classes\n      }, [\n        this.genTHead(),\n        this.genTProgress(),\n        this.genTBody(),\n        this.genTFoot()\n      ])\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDataTable/VDataTable.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_tables.styl\n// module id = 103\n// module chunks = 0"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_data-table.styl\n// module id = 104\n// module chunks = 0"",""require('../../stylus/components/_progress-linear.styl')\n\nimport Colorable from '../../mixins/colorable'\n\nimport {\n  VFadeTransition,\n  VSlideXTransition\n} from '../transitions'\n\nexport default {\n  name: 'v-progress-linear',\n\n  components: {\n    VFadeTransition,\n    VSlideXTransition\n  },\n\n  mixins: [Colorable],\n\n  props: {\n    active: {\n      type: Boolean,\n      default: true\n    },\n    backgroundColor: {\n      type: String,\n      default: null\n    },\n    backgroundOpacity: {\n      type: [Number, String],\n      default: null\n    },\n    bufferValue: {\n      type: [Number, String],\n      default: 100\n    },\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    height: {\n      type: [Number, String],\n      default: 7\n    },\n    indeterminate: Boolean,\n    query: Boolean,\n    value: {\n      type: [Number, String],\n      default: 0\n    }\n  },\n\n  computed: {\n    styles () {\n      const styles = {}\n\n      if (!this.active) {\n        styles.height = 0\n      }\n\n      if (!this.indeterminate && parseInt(this.bufferValue, 10) !== 100) {\n        styles.width = `${this.bufferValue}%`\n      }\n\n      return styles\n    },\n    effectiveWidth () {\n      if (!this.bufferValue) {\n        return 0\n      }\n\n      return this.value * 100 / this.bufferValue\n    },\n    bufferStyles () {\n      const styles = {}\n\n      if (!this.active) {\n        styles.height = 0\n      }\n\n      return styles\n    },\n    backgroundStyle () {\n      const backgroundOpacity = this.backgroundOpacity == null\n        ? (this.backgroundColor ? 1 : 0.3)\n        : parseFloat(this.backgroundOpacity)\n\n      return {\n        height: this.active ? 'auto' : 0,\n        opacity: backgroundOpacity,\n        width: `${this.bufferValue}%`\n      }\n    }\n  },\n\n  methods: {\n    genDeterminate (h) {\n      return h('div', {\n        ref: 'front',\n        staticClass: `progress-linear__bar__determinate`,\n        class: this.addBackgroundColorClassChecks({}),\n        style: {\n          width: `${this.effectiveWidth}%`\n        }\n      })\n    },\n    genBar (h, name) {\n      return h('div', {\n        staticClass: 'progress-linear__bar__indeterminate',\n        class: this.addBackgroundColorClassChecks({\n          [name]: true\n        })\n      })\n    },\n    genIndeterminate (h) {\n      return h('div', {\n        ref: 'front',\n        staticClass: 'progress-linear__bar__indeterminate',\n        class: {\n          'progress-linear__bar__indeterminate--active': this.active\n        }\n      }, [\n        this.genBar(h, 'long'),\n        this.genBar(h, 'short')\n      ])\n    }\n  },\n\n  render (h) {\n    const fade = h('v-fade-transition', [this.indeterminate && this.genIndeterminate(h)])\n    const slide = h('v-slide-x-transition', [!this.indeterminate && this.genDeterminate(h)])\n\n    const bar = h('div', {\n      staticClass: 'progress-linear__bar',\n      style: this.styles\n    }, [fade, slide])\n    const background = h('div', {\n      staticClass: 'progress-linear__background',\n      class: [this.backgroundColor || this.color],\n      style: this.backgroundStyle\n    })\n\n    return h('div', {\n      staticClass: 'progress-linear',\n      class: {\n        'progress-linear--query': this.query\n      },\n      style: {\n        height: `${this.height}px`\n      },\n      on: this.$listeners\n    }, [\n      background,\n      bar\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VProgressLinear/VProgressLinear.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_progress-linear.styl\n// module id = 106\n// module chunks = 0"",""require('../../stylus/components/_text-fields.styl')\nrequire('../../stylus/components/_input-groups.styl')\nrequire('../../stylus/components/_select.styl')\n\n// Components\nimport VCard from '../VCard'\nimport VCheckbox from '../VCheckbox'\nimport {\n  VList,\n  VListTile,\n  VListTileAction,\n  VListTileContent,\n  VListTileTitle\n} from '../VList'\nimport VMenu from '../VMenu'\nimport VBtn from '../VBtn'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Dependent from '../../mixins/dependent'\nimport Filterable from '../../mixins/filterable'\nimport Input from '../../mixins/input'\nimport Maskable from '../../mixins/maskable'\n\n// Component level mixins\nimport Autocomplete from './mixins/select-autocomplete'\nimport Generators from './mixins/select-generators'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\n\n// Helpers\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default {\n  name: 'v-select',\n\n  inheritAttrs: false,\n\n  components: {\n    VCard,\n    VCheckbox,\n    VList,\n    VListTile,\n    VListTileAction,\n    VListTileContent,\n    VListTileTitle,\n    VMenu,\n    VBtn\n  },\n\n  directives: {\n    ClickOutside\n  },\n\n  mixins: [Autocomplete, Colorable, Dependent, Filterable, Generators, Input, Maskable],\n\n  data () {\n    return {\n      cachedItems: [],\n      content: {},\n      inputValue: (this.multiple || this.tags) && !this.value ? [] : this.value,\n      isBooted: false,\n      lastItem: 20,\n      lazySearch: null,\n      isActive: false,\n      menuIsActive: false,\n      searchTimeout: null,\n      selectedIndex: -1,\n      selectedItems: [],\n      shouldBreak: false\n    }\n  },\n\n  props: {\n    appendIcon: {\n      type: String,\n      default: 'arrow_drop_down'\n    },\n    appendIconCb: Function,\n    auto: Boolean,\n    autocomplete: Boolean,\n    cacheItems: Boolean,\n    chips: Boolean,\n    clearable: Boolean,\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    combobox: Boolean,\n    debounceSearch: {\n      type: [Number, String],\n      default: 200\n    },\n    browserAutocomplete: {\n      type: String,\n      default: 'on'\n    },\n    items: {\n      type: Array,\n      default: () => []\n    },\n    itemAvatar: {\n      type: String,\n      default: 'avatar'\n    },\n    itemText: {\n      type: String,\n      default: 'text'\n    },\n    itemValue: {\n      type: String,\n      default: 'value'\n    },\n    itemDisabled: {\n      type: String,\n      default: 'disabled'\n    },\n    maxHeight: {\n      type: [Number, String],\n      default: 300\n    },\n    minWidth: {\n      type: [Boolean, Number, String],\n      default: false\n    },\n    multiple: Boolean,\n    multiLine: Boolean,\n    solo: Boolean,\n    searchInput: {\n      default: null\n    },\n    singleLine: Boolean,\n    tags: Boolean,\n    returnObject: Boolean,\n    overflow: Boolean,\n    segmented: Boolean,\n    editable: Boolean\n  },\n\n  computed: {\n    classes () {\n      const classes = {\n        'input-group--text-field input-group--select': true,\n        'input-group--auto': this.auto,\n        'input-group--overflow': this.overflow,\n        'input-group--segmented': this.segmented,\n        'input-group--editable': this.editable,\n        'input-group--autocomplete': this.isAutocomplete,\n        'input-group--single-line': this.singleLine || this.isDropdown,\n        'input-group--multi-line': this.multiLine,\n        'input-group--chips': this.chips,\n        'input-group--solo': this.solo,\n        'input-group--multiple': this.multiple\n      }\n\n      if (this.hasError) {\n        classes['error--text'] = true\n      } else {\n        return this.addTextColorClassChecks(classes)\n      }\n\n      return classes\n    },\n    computedContentClass () {\n      const children = [\n        'menu__content--select',\n        this.auto ? 'menu__content--auto' : '',\n        this.isDropdown ? 'menu__content--dropdown' : '',\n        this.isAutocomplete ? 'menu__content--autocomplete' : ''\n      ]\n\n      return children.join(' ')\n    },\n    computedItems () {\n      return this.filterDuplicates(this.cachedItems.concat(this.items))\n    },\n    /**\n     * The range of the current input text\n     *\n     * @return {Number}\n     */\n    currentRange () {\n      return this.getText(this.selectedItem || '').length\n    },\n    filteredItems () {\n      // If we are not actively filtering\n      // Show all available items\n      const items = this.isNotFiltering\n        ? this.computedItems\n        : this.filterSearch()\n\n      return !this.auto ? items.slice(0, this.lastItem) : items\n    },\n    hideSelections () {\n      return this.isAutocomplete &&\n        !this.isMultiple &&\n        this.isFocused &&\n        !this.chips\n    },\n    isNotFiltering () {\n      return this.isAutocomplete &&\n        this.isDirty &&\n        this.searchValue === this.getText(this.selectedItem)\n    },\n    isAutocomplete () {\n      return this.autocomplete || this.editable || this.tags || this.combobox\n    },\n    isDirty () {\n      return this.selectedItems.length > 0\n    },\n    isDropdown () {\n      return this.segmented || this.overflow || this.editable || this.solo\n    },\n    isMultiple () {\n      return this.multiple || this.tags\n    },\n    searchValue: {\n      get () { return this.lazySearch },\n      set (val) {\n        if (!this.isAutocomplete ||\n          this.selectedIndex > -1\n        ) return\n\n        this.lazySearch = val\n\n        clearTimeout(this.searchTimeout)\n\n        this.searchTimeout = setTimeout(() => {\n          this.$emit('update:searchInput', val)\n        }, this.debounceSearch)\n      }\n    },\n    selectedItem () {\n      if (this.isMultiple) return null\n\n      return this.selectedItems.find(i => (\n        this.getValue(i) === this.getValue(this.inputValue)\n      )) || null\n    }\n  },\n\n  watch: {\n    inputValue (val) {\n      // Populate selected items\n      this.genSelectedItems(val)\n\n      this.$emit('input', val)\n\n      // When inputValue is changed\n      // and combobox is true set\n      // menu property to false\n      if (this.combobox) this.menuIsActive = false\n    },\n    isActive (val) {\n      if (!val) {\n        this.searchValue = null\n        this.menuIsActive = false\n        this.isFocused = false\n        this.selectedIndex = -1\n      } else {\n        this.searchValue = this.getText(this.selectedItem)\n      }\n\n      // this.lastItem += !val ? 20 : 0\n    },\n    isBooted () {\n      this.$nextTick(() => {\n        if (this.content && this.content.addEventListener) {\n          this.content.addEventListener('scroll', this.onScroll, false)\n        }\n      })\n    },\n    isFocused (val) {\n      // When focusing the input\n      // re-set the caret position\n      if (this.isAutocomplete &&\n        !this.mask &&\n        !this.isMultiple &&\n        val\n      ) {\n        this.setCaretPosition(this.currentRange)\n        this.shouldBreak && this.$nextTick(() => {\n          this.$refs.input.scrollLeft = this.$refs.input.scrollWidth\n        })\n      }\n    },\n    items (val) {\n      if (this.cacheItems) {\n        this.cachedItems = this.filterDuplicates(this.cachedItems.concat(val))\n      }\n\n      this.$refs.menu.listIndex = -1\n\n      this.searchValue && this.$nextTick(() => {\n        this.$refs.menu && (this.$refs.menu.listIndex = 0)\n      })\n\n      this.genSelectedItems()\n    },\n    menuIsActive (val) {\n      if (!val) return\n\n      this.isBooted = true\n      this.isActive = true\n    },\n    isMultiple (val) {\n      this.inputValue = val ? [] : null\n    },\n    searchInput (val) {\n      this.searchValue = val\n    },\n    searchValue (val) {\n      // Wrap input to next line if overflowing\n      if (this.$refs.input.scrollWidth > this.$refs.input.clientWidth) {\n        this.shouldBreak = true\n        this.$nextTick(this.$refs.menu.updateDimensions)\n      } else if (val === null) {\n        this.shouldBreak = false\n      }\n\n      // Activate menu if inactive and searching\n      if (this.isActive &&\n        !this.menuIsActive &&\n        val !== this.getValue(this.selectedItem)\n      ) {\n        this.menuIsActive = true\n      }\n\n      this.$refs.menu.listIndex = null\n\n      this.$nextTick(() => {\n        this.$refs.menu && (this.$refs.menu.listIndex = val ? 0 : -1)\n      })\n    },\n    selectedItems () {\n      clearTimeout(this.searchTimeout)\n\n      if (this.isAutocomplete) {\n        this.$nextTick(this.$refs.menu.updateDimensions)\n      }\n    },\n    value (val) {\n      this.inputValue = val\n      this.validate()\n    }\n  },\n\n  mounted () {\n    // If instance is being destroyed\n    // do not run mounted functions\n    if (this._isDestroyed) return\n\n    // Evaluate the selected items immediately\n    // to avoid a unnecessary label transition\n    this.genSelectedItems()\n\n    this.content = this.$refs.menu.$refs.content\n  },\n\n  beforeDestroy () {\n    if (this.isBooted) {\n      if (this.content) {\n        this.content.removeEventListener('scroll', this.onScroll, false)\n      }\n    }\n  },\n\n  methods: {\n    blur () {\n      this.$emit('blur')\n      if (this.isAutocomplete && this.$refs.input) this.$refs.input.blur()\n      this.$nextTick(() => (this.isActive = false))\n    },\n    changeSelectedIndex (keyCode) {\n      // backspace, left, right, delete\n      if (![8, 37, 39, 46].includes(keyCode)) return\n\n      const indexes = this.selectedItems.length - 1\n\n      if (keyCode === 37) { // Left arrow\n        this.selectedIndex = this.selectedIndex === -1\n          ? indexes\n          : this.selectedIndex - 1\n      } else if (keyCode === 39) { // Right arrow\n        this.selectedIndex = this.selectedIndex >= indexes\n          ? -1\n          : this.selectedIndex + 1\n      } else if (this.selectedIndex === -1) {\n        this.selectedIndex = indexes\n        return\n      }\n\n      // backspace/delete\n      if ([8, 46].includes(keyCode)) {\n        const newIndex = this.selectedIndex === indexes\n          ? this.selectedIndex - 1\n          : this.selectedItems[this.selectedIndex + 1]\n            ? this.selectedIndex\n            : -1\n\n        this.selectItem(this.selectedItems[this.selectedIndex])\n        this.selectedIndex = newIndex\n      }\n    },\n    compareObjects (a, b) {\n      const aProps = Object.keys(a)\n      const bProps = Object.keys(b)\n\n      if (aProps.length !== bProps.length) return false\n\n      for (let i = 0, length = aProps.length; i < length; i++) {\n        const propName = aProps[i]\n\n        if (a[propName] !== b[propName]) return false\n      }\n\n      return true\n    },\n    filterDuplicates (arr) {\n      const values = arr.map(this.getValue)\n      return arr.filter((el, i) => i === values.indexOf(values[i]))\n    },\n    focus () {\n      this.isActive = true\n      this.isFocused = true\n\n      if (this.$refs.input && this.isAutocomplete) {\n        this.$refs.input.focus()\n      } else {\n        this.$el.focus()\n      }\n\n      this.$emit('focus')\n    },\n    genDirectives () {\n      return [{\n        name: 'click-outside',\n        value: e => {\n          return (\n            this.$refs.menu &&\n            !this.$refs.menu.$refs.content.contains(e.target)\n          )\n        }\n      }]\n    },\n    genListeners () {\n      const listeners = Object.assign({}, this.$listeners)\n      delete listeners.input\n\n      return {\n        ...listeners,\n        click: () => {\n          if (this.disabled || this.readonly) return\n          this.showMenuItems()\n          this.selectedIndex = -1\n        },\n        focus: () => {\n          if (this.disabled || this.readonly) return\n\n          !this.isFocused && this.focus()\n        },\n        keydown: this.onKeyDown // Located in mixins/select-autocomplete.js\n      }\n    },\n    genLabel () {\n      const singleLine = this.singleLine || this.isDropdown\n      if (singleLine && this.isDirty ||\n        singleLine && this.isFocused && this.searchValue\n      ) return null\n\n      const data = {}\n\n      if (this.id) data.attrs = { for: this.id }\n\n      return this.$createElement('label', data, this.$slots.label || this.label)\n    },\n    getPropertyFromItem (item, field) {\n      if (item !== Object(item)) return item\n\n      const value = getObjectValueByPath(item, field)\n\n      return typeof value === 'undefined' ? item : value\n    },\n    genSelectedItems (val = this.inputValue) {\n      // If we are using tags, don't filter results\n      if (this.tags) return (this.selectedItems = val)\n\n      // Combobox is the single version\n      // of a taggable select element\n      if (this.combobox) return (this.selectedItems = val ? [val] : [])\n\n      let selectedItems = this.computedItems.filter(i => {\n        if (!this.isMultiple) {\n          return this.getValue(i) === this.getValue(val)\n        } else {\n          // Always return Boolean\n          return val.find((j) => {\n            const a = this.getValue(j)\n            const b = this.getValue(i)\n\n            if (a !== Object(a)) return a === b\n\n            return this.compareObjects(a, b)\n          }) !== undefined\n        }\n      })\n\n      if (!selectedItems.length &&\n        val != null &&\n        this.tags\n      ) {\n        selectedItems = Array.isArray(val) ? val : [val]\n      }\n\n      this.selectedItems = selectedItems\n    },\n    getText (item) {\n      return this.getPropertyFromItem(item, this.itemText)\n    },\n    getValue (item) {\n      return this.getPropertyFromItem(item, this.itemValue)\n    },\n    clearableCallback () {\n      const inputValue = this.isMultiple ? [] : null\n\n      this.inputValue = inputValue\n      this.searchValue = null\n      this.$emit('change', inputValue)\n      this.genSelectedItems()\n      this.showMenu()\n    },\n    showMenu () {\n      this.showMenuItems()\n      this.isAutocomplete && this.focus()\n    },\n    onScroll () {\n      if (!this.isActive) {\n        requestAnimationFrame(() => (this.content.scrollTop = 0))\n      } else {\n        if (this.lastItem >= this.computedItems.length) return\n\n        const showMoreItems = (\n          this.content.scrollHeight -\n          (this.content.scrollTop +\n          this.content.clientHeight)\n        ) < 200\n\n        if (showMoreItems) {\n          this.lastItem += 20\n        }\n      }\n    },\n    selectItem (item) {\n      if (!this.isMultiple) {\n        this.inputValue = this.returnObject ? item : this.getValue(item)\n        this.selectedItems = [item]\n      } else {\n        const selectedItems = []\n        const inputValue = this.inputValue.slice()\n        const i = this.inputValue.findIndex((i) => {\n          const a = this.getValue(i)\n          const b = this.getValue(item)\n\n          if (a !== Object(a)) return a === b\n\n          return this.compareObjects(a, b)\n        })\n\n        i !== -1 && inputValue.splice(i, 1) || inputValue.push(item)\n        this.inputValue = inputValue.map((i) => {\n          selectedItems.push(i)\n          return this.returnObject ? i : this.getValue(i)\n        })\n\n        this.selectedItems = selectedItems\n      }\n\n      this.searchValue = !this.isMultiple || this.chips\n        ? this.getText(this.selectedItem)\n        : ''\n\n      this.$emit('change', this.inputValue)\n\n      // List tile will re-render, reset index to\n      // maintain highlighting\n      const savedIndex = this.$refs.menu.listIndex\n      this.$refs.menu.listIndex = -1\n\n      // After selecting an item\n      // refocus the input and\n      // reset the caret pos\n      this.$nextTick(() => {\n        this.focus()\n        this.setCaretPosition(this.currentRange)\n        this.$refs.menu && (this.$refs.menu.listIndex = savedIndex)\n      })\n    },\n    showMenuItems () {\n      this.isActive = true\n      this.menuIsActive = true\n      this.chips && (this.$refs.menu.listIndex = -1)\n    }\n  },\n\n  render (h) {\n    const data = {\n      attrs: {\n        tabindex: this.isAutocomplete || this.disabled ? -1 : this.tabindex,\n        ...(this.isAutocomplete ? null : this.$attrs),\n        role: this.isAutocomplete ? null : 'combobox'\n      }\n    }\n\n    if (!this.isAutocomplete) {\n      data.on = this.genListeners()\n      data.directives = this.genDirectives()\n    } else {\n      data.on = {\n        click: () => {\n          if (this.disabled || this.readonly) return\n\n          // Workaround for clicking select\n          // when using autocomplete\n          // and click doesn't target the input\n          setTimeout(() => {\n            if (this.menuIsActive) return\n\n            this.focus()\n            this.menuIsActive = true\n          }, 100)\n        }\n      }\n    }\n\n    return this.genInputGroup([\n      this.genSelectionsAndSearch(),\n      this.genMenu()\n    ], data, () => this.showMenu())\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSelect/VSelect.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_select.styl\n// module id = 108\n// module chunks = 0"",""require('../../stylus/components/_lists.styl')\n\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-list',\n\n  provide () {\n    return {\n      listClick: this.listClick,\n      listClose: this.listClose\n    }\n  },\n\n  mixins: [Themeable],\n\n  data () {\n    return {\n      uid: null,\n      groups: []\n    }\n  },\n\n  props: {\n    dense: Boolean,\n    subheader: Boolean,\n    threeLine: Boolean,\n    twoLine: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'list': true,\n        'list--two-line': this.twoLine,\n        'list--dense': this.dense,\n        'list--three-line': this.threeLine,\n        'list--subheader': this.subheader,\n        'theme--dark dark--bg': this.dark,\n        'theme--light light--bg': this.light\n      }\n    }\n  },\n\n  watch: {\n    uid () {\n      this.$children.filter(i => i.$options._componentTag === 'v-list-group').forEach(i => i.toggle(this.uid))\n    }\n  },\n\n  methods: {\n    listClick (uid, force) {\n      if (force) {\n        this.uid = uid\n      } else {\n        this.uid = this.uid === uid ? null : uid\n      }\n    },\n\n    listClose (uid) {\n      if (this.uid === uid) {\n        this.uid = null\n      }\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': this.classes,\n      attrs: { 'data-uid': this._uid }\n    }\n\n    return h('ul', data, [this.$slots.default])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VList/VList.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_lists.styl\n// module id = 110\n// module chunks = 0"",""import { VExpandTransition } from '../transitions'\n\nimport Bootable from '../../mixins/bootable'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'v-list-group',\n\n  inject: ['listClick', 'listClose'],\n\n  mixins: [Bootable, Toggleable],\n\n  props: {\n    group: String,\n    noAction: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'list--group__header': true,\n        'list--group__header--active': this.isActive,\n        'list--group__header--no-action': this.noAction\n      }\n    }\n  },\n\n  watch: {\n    isActive () {\n      this.isBooted = true\n\n      if (!this.isActive) {\n        this.listClose(this._uid)\n      }\n    },\n    $route (to) {\n      const isActive = this.matchRoute(to.path)\n\n      if (this.group) {\n        if (isActive && this.isActive !== isActive) {\n          this.listClick(this._uid)\n        }\n        this.isActive = isActive\n      }\n    }\n  },\n\n  mounted () {\n    this.isBooted = this.isActive\n\n    if (this.group) {\n      this.isActive = this.matchRoute(this.$route.path)\n    }\n\n    if (this.isActive) {\n      this.listClick(this._uid)\n    }\n  },\n\n  methods: {\n    click () {\n      if (!this.$refs.item.querySelector('.list__tile--disabled')) {\n        requestAnimationFrame(() => this.listClick(this._uid))\n      }\n    },\n    toggle (uid) {\n      this.isActive = this._uid === uid\n    },\n    matchRoute (to) {\n      if (!this.group) return false\n      return to.match(this.group) !== null\n    }\n  },\n\n  render (h) {\n    const group = h('ul', {\n      'class': 'list list--group',\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }],\n      ref: 'group'\n    }, this.showLazyContent(this.$slots.default))\n\n    const item = h('div', {\n      'class': this.classes,\n      on: Object.assign({}, { click: this.click }, this.$listeners),\n      ref: 'item'\n    }, [this.$slots.item])\n\n    const transition = h(VExpandTransition, [group])\n\n    return h('div', { 'class': 'list--group__container' }, [item, transition])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VList/VListGroup.js"",""import Routable from '../../mixins/routable'\nimport Toggleable from '../../mixins/toggleable'\nimport Ripple from '../../directives/ripple'\n\nexport default {\n  name: 'v-list-tile',\n\n  mixins: [Routable, Toggleable],\n\n  directives: {\n    Ripple\n  },\n\n  inheritAttrs: false,\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'list__tile--active'\n    },\n    avatar: Boolean,\n    inactive: Boolean,\n    tag: String\n  },\n\n  computed: {\n    classes () {\n      return {\n        'list__tile': true,\n        'list__tile--link': this.isLink && !this.inactive,\n        'list__tile--avatar': this.avatar,\n        'list__tile--disabled': this.disabled,\n        [this.activeClass]: this.isActive\n      }\n    },\n    isLink () {\n      return this.href || this.to ||\n        (this.$listeners && (this.$listeners.click || this.$listeners['!click']))\n    }\n  },\n\n  render (h) {\n    const isRouteLink = !this.inactive && this.isLink\n    const { tag, data } = isRouteLink ? this.generateRouteLink() : {\n      tag: this.tag || 'div',\n      data: {\n        class: this.classes\n      }\n    }\n\n    data.attrs = Object.assign({}, data.attrs, this.$attrs)\n\n    return h('li', {\n      attrs: {\n        disabled: this.disabled\n      },\n      on: {\n        ...this.$listeners\n      }\n    }, [h(tag, data, this.$slots.default)])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VList/VListTile.js"",""export default {\n  functional: true,\n\n  name: 'v-list-tile-action',\n\n  render (h, { data, children }) {\n    data.staticClass = data.staticClass ? `list__tile__action ${data.staticClass || ''}` : 'list__tile__action'\n    if ((children || []).length > 1) data.staticClass += ' list__tile__action--stack'\n\n    return h('div', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VList/VListTileAction.js"",""require('../../stylus/components/_menus.styl')\n\n// Mixins\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable.js'\nimport Toggleable from '../../mixins/toggleable'\n\n// Component level mixins\nimport Activator from './mixins/menu-activator'\nimport Generators from './mixins/menu-generators'\nimport Keyable from './mixins/menu-keyable'\nimport Position from './mixins/menu-position'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\n\nexport default {\n  name: 'v-menu',\n\n  mixins: [\n    Activator,\n    Dependent,\n    Delayable,\n    Detachable,\n    Generators,\n    Keyable,\n    Menuable,\n    Position,\n    Toggleable\n  ],\n\n  directives: {\n    ClickOutside,\n    Resize\n  },\n\n  data () {\n    return {\n      defaultOffset: 8,\n      maxHeightAutoDefault: '200px',\n      startIndex: 3,\n      stopIndex: 0,\n      hasJustFocused: false,\n      resizeTimeout: null\n    }\n  },\n\n  props: {\n    auto: Boolean,\n    closeOnClick: {\n      type: Boolean,\n      default: true\n    },\n    closeOnContentClick: {\n      type: Boolean,\n      default: true\n    },\n    disabled: Boolean,\n    fullWidth: Boolean,\n    maxHeight: { default: 'auto' },\n    offsetX: Boolean,\n    offsetY: Boolean,\n    openOnClick: {\n      type: Boolean,\n      default: true\n    },\n    openOnHover: Boolean,\n    origin: {\n      type: String,\n      default: 'top left'\n    },\n    transition: {\n      type: [Boolean, String],\n      default: 'menu-transition'\n    }\n  },\n\n  computed: {\n    calculatedLeft () {\n      let left = this.calcLeft\n      if (this.auto) left = this.calcLeftAuto\n\n      return `${this.calcXOverflow(left())}px`\n    },\n    calculatedMaxHeight () {\n      return this.auto\n        ? '200px'\n        : isNaN(this.maxHeight)\n          ? this.maxHeight\n          : `${this.maxHeight}px`\n    },\n    calculatedMaxWidth () {\n      return isNaN(this.maxWidth)\n        ? this.maxWidth\n        : `${this.maxWidth}px`\n    },\n    calculatedMinWidth () {\n      if (this.minWidth) {\n        return isNaN(this.minWidth)\n          ? this.minWidth\n          : `${this.minWidth}px`\n      }\n\n      const minWidth = (\n        this.dimensions.activator.width +\n        this.nudgeWidth +\n        (this.auto ? 16 : 0)\n      )\n\n      const calculatedMaxWidth = isNaN(parseInt(this.calculatedMaxWidth))\n        ? minWidth\n        : parseInt(this.calculatedMaxWidth)\n\n      return `${Math.min(\n        calculatedMaxWidth,\n        minWidth\n      )}px`\n    },\n    calculatedTop () {\n      const top = this.auto ? this.calcTopAuto : this.calcTop\n\n      return `${this.calcYOverflow(top())}px`\n    },\n    styles () {\n      return {\n        maxHeight: this.calculatedMaxHeight,\n        minWidth: this.calculatedMinWidth,\n        maxWidth: this.calculatedMaxWidth,\n        top: this.calculatedTop,\n        left: this.calculatedLeft,\n        transformOrigin: this.origin,\n        zIndex: this.zIndex || this.activeZIndex\n      }\n    }\n  },\n\n  watch: {\n    activator (newActivator, oldActivator) {\n      this.removeActivatorEvents(oldActivator)\n      this.addActivatorEvents(newActivator)\n    },\n    isContentActive (val) {\n      this.hasJustFocused = val\n    }\n  },\n\n  methods: {\n    activate () {\n      // This exists primarily for v-select\n      // helps determine which tiles to activate\n      this.getTiles()\n      // Update coordinates and dimensions of menu\n      // and its activator\n      this.updateDimensions()\n      // Start the transition\n      requestAnimationFrame(this.startTransition)\n      // Once transitioning, calculate scroll position\n      setTimeout(this.calculateScroll, 50)\n    },\n    onResize () {\n      if (!this.isActive) return\n\n      // Account for screen resize\n      // and orientation change\n      this.$refs.content.offsetWidth\n      this.updateDimensions()\n\n      // When resizing to a smaller width\n      // content width is evaluated before\n      // the new activator width has been\n      // set, causing it to not size properly\n      // hacky but will revisit in the future\n      clearTimeout(this.resizeTimeout)\n      this.resizeTimeout = setTimeout(this.updateDimensions, 100)\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'menu',\n      class: {\n        'menu--disabled': this.disabled\n      },\n      style: {\n        display: this.fullWidth ? 'block' : 'inline-block'\n      },\n      directives: [{\n        name: 'resize',\n        value: {\n          debounce: 500,\n          value: this.onResize\n        }\n      }],\n      on: {\n        keydown: this.changeListIndex\n      }\n    }\n\n    return h('div', data, [\n      this.genActivator(),\n      this.genTransition()\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VMenu/VMenu.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_menus.styl\n// module id = 115\n// module chunks = 0"",""/**\n * Menu activator\n *\n * @mixin\n *\n * Handles the click and hover activation\n * Supports slotted and detached activators\n */\nexport default {\n  methods: {\n    activatorClickHandler (e) {\n      if (this.disabled) return\n      if (this.openOnClick && !this.isActive) {\n        this.getActivator().focus()\n        this.isActive = true\n        this.absoluteX = e.clientX\n        this.absoluteY = e.clientY\n      } else if (this.closeOnClick && this.isActive) {\n        this.getActivator().blur()\n        this.isActive = false\n      }\n    },\n    mouseEnterHandler (e) {\n      this.runDelay('open', () => {\n        if (this.hasJustFocused) return\n\n        this.hasJustFocused = true\n        this.isActive = true\n      })\n    },\n    mouseLeaveHandler (e) {\n      // Prevent accidental re-activation\n      this.runDelay('close', () => {\n        if (this.$refs.content.contains(e.relatedTarget)) return\n\n        requestAnimationFrame(() => {\n          this.isActive = false\n          this.callDeactivate()\n        })\n      })\n    },\n    addActivatorEvents (activator = null) {\n      if (!activator) return\n      activator.addEventListener('click', this.activatorClickHandler)\n    },\n    removeActivatorEvents (activator = null) {\n      if (!activator) return\n      activator.removeEventListener('click', this.activatorClickHandler)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VMenu/mixins/menu-activator.js"",""/**\n * Menu generators\n *\n * @mixin\n *\n * Used for creating the DOM elements for VMenu\n */\nexport default {\n  methods: {\n    genActivator () {\n      if (!this.$slots.activator) return null\n\n      const options = {\n        staticClass: 'menu__activator',\n        'class': {\n          'menu__activator--active': this.hasJustFocused || this.isActive\n        },\n        ref: 'activator',\n        on: {}\n      }\n\n      if (this.openOnHover) {\n        options.on['mouseenter'] = this.mouseEnterHandler\n        options.on['mouseleave'] = this.mouseLeaveHandler\n      } else if (this.openOnClick) {\n        options.on['click'] = this.activatorClickHandler\n      }\n\n      return this.$createElement('div', options, this.$slots.activator)\n    },\n\n    genTransition () {\n      if (!this.transition) return this.genContent()\n\n      return this.$createElement('transition', {\n        props: {\n          name: this.transition\n        }\n      }, [this.genContent()])\n    },\n\n    genDirectives () {\n      // Do not add click outside for hover menu\n      const directives = !this.openOnHover ? [{\n        name: 'click-outside',\n        value: {\n          callback: () => this.closeOnClick,\n          include: () => [this.$el, ...this.getOpenDependentElements()]\n        }\n      }] : []\n\n      directives.push({\n        name: 'show',\n        value: this.isContentActive\n      })\n\n      return directives\n    },\n\n    genContent () {\n      const options = {\n        'class': [\n          (`menu__content ${this.contentClass}`).trim(),\n          { 'menuable__content__active': this.isActive }\n        ],\n        style: this.styles,\n        directives: this.genDirectives(),\n        ref: 'content',\n        on: {\n          click: e => {\n            e.stopPropagation()\n            if (e.target.getAttribute('disabled')) return\n            if (this.closeOnContentClick) this.isActive = false\n          }\n        }\n      }\n\n      !this.disabled && this.openOnHover && (options.on.mouseenter = this.mouseEnterHandler)\n      this.openOnHover && (options.on.mouseleave = this.mouseLeaveHandler)\n\n      return this.$createElement('div', options, this.showLazyContent(this.$slots.default))\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VMenu/mixins/menu-generators.js"",""/**\n * Menu keyable\n *\n * @mixin\n *\n * Primarily used to support VSelect\n * Handles opening and closing of VMenu from keystrokes\n * Will conditionally highlight VListTiles for VSelect\n */\nexport default {\n  data: () => ({\n    listIndex: -1,\n    tiles: []\n  }),\n\n  watch: {\n    isActive (val) {\n      if (!val) this.listIndex = -1\n    },\n    listIndex (next, prev) {\n      // For infinite scroll and autocomplete, re-evaluate children\n      this.getTiles()\n\n      if (next in this.tiles) {\n        this.tiles[next].classList.add('list__tile--highlighted')\n        this.$refs.content.scrollTop = next * 48\n      }\n\n      prev in this.tiles &&\n        this.tiles[prev].classList.remove('list__tile--highlighted')\n    }\n  },\n\n  methods: {\n    changeListIndex (e) {\n      // Up, Down, Enter, Space\n      if ([40, 38, 13].includes(e.keyCode) ||\n        e.keyCode === 32 && !this.isActive\n      ) {\n        e.preventDefault()\n      }\n\n      // Esc, Tab\n      if ([27, 9].includes(e.keyCode)) return this.isActive = false\n      else if (!this.isActive &&\n        // Enter, Space\n        [13, 32].includes(e.keyCode) &&\n        this.openOnClick\n      ) {\n        return this.isActive = true\n      }\n\n      // Down\n      if (e.keyCode === 40 && this.listIndex < this.tiles.length - 1) {\n        this.listIndex++\n      // Up\n      } else if (e.keyCode === 38 && this.listIndex > 0) {\n        this.listIndex--\n      // Enter\n      } else if (e.keyCode === 13 && this.listIndex !== -1) {\n        this.tiles[this.listIndex].click()\n      }\n    },\n    getTiles () {\n      this.tiles = this.$refs.content.querySelectorAll('.list__tile')\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VMenu/mixins/menu-keyable.js"",""/**\n * Menu position\n * \n * @mixin\n *\n * Used for calculating an automatic position (used for VSelect)\n * Will position the VMenu content properly over the VSelect\n */\nexport default {\n  methods: {\n    // Revisit this\n    calculateScroll () {\n      if (this.selectedIndex === null) return\n\n      let scrollTop = 0\n\n      if (this.selectedIndex >= this.stopIndex) {\n        scrollTop = this.$refs.content.scrollHeight\n      } else if (this.selectedIndex > this.startIndex) {\n        scrollTop = (\n          (this.selectedIndex * (this.defaultOffset * 6)) -\n          (this.defaultOffset * 7)\n        )\n      }\n\n      this.$refs.content.scrollTop = scrollTop\n    },\n    calcLeftAuto () {\n      const a = this.dimensions.activator\n\n      return parseInt(a.left - this.defaultOffset * 2)\n    },\n    calcTopAuto () {\n      if (!this.hasActivator) return this.calcTop()\n\n      const selectedIndex = Array.from(this.tiles)\n        .findIndex(n => n.classList.contains('list__tile--active'))\n\n      if (selectedIndex === -1) {\n        this.selectedIndex = null\n\n        return this.calcTop()\n      }\n\n      this.selectedIndex = selectedIndex\n      let actingIndex = selectedIndex\n\n      let offsetPadding = -(this.defaultOffset * 2)\n      // #708 Stop index should vary by tile length\n      this.stopIndex = this.tiles.length > 4\n        ? this.tiles.length - 4\n        : this.tiles.length\n\n      if (selectedIndex > this.startIndex && selectedIndex < this.stopIndex) {\n        actingIndex = 2\n        offsetPadding = (this.defaultOffset * 3)\n      } else if (selectedIndex >= this.stopIndex) {\n        offsetPadding = -(this.defaultOffset)\n        actingIndex = selectedIndex - this.stopIndex\n      }\n\n      // Is always off by 1 pixel, send help (┛ಠ_ಠ)┛彡┻━┻\n      offsetPadding--\n\n      return (\n        this.calcTop() +\n        offsetPadding -\n        (actingIndex * (this.defaultOffset * 6))\n      )\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VMenu/mixins/menu-position.js"",""/**\n * Select autocomplete\n *\n * @mixin\n *\n * Handles logic when using the \""autocomplete\"" prop\n */\nexport default {\n  props: {\n    filter: {\n      type: Function,\n      default: (item, queryText, itemText) => {\n        const hasValue = val => [undefined, null].includes(val)\n\n        const text = hasValue(itemText) ? '' : itemText\n        const query = hasValue(queryText) ? '' : queryText\n\n        return text.toString()\n          .toLowerCase()\n          .indexOf(query.toString().toLowerCase()) > -1\n      }\n    }\n  },\n\n  methods: {\n    genFiltered (text) {\n      if (!this.isAutocomplete ||\n        !this.searchValue ||\n        this.filteredItems.length < 1\n      ) return text\n\n      text = (text || '').toString()\n\n      const { start, middle, end } = this.getMaskedCharacters(text)\n\n      return `${start}${this.genHighlight(middle)}${end}`\n    },\n    genHighlight (text) {\n      if (this.isNotFiltering) return text\n\n      return `<span class=\""list__tile__mask\"">${text}</span>`\n    },\n    getMaskedCharacters (text) {\n      const searchValue = (this.searchValue || '').toString().toLowerCase()\n      const index = text.toLowerCase().indexOf(searchValue)\n\n      if (index < 0) return { start: '', middle: text, end: '' }\n\n      const start = text.slice(0, index)\n      const middle = text.slice(index, index + searchValue.length)\n      const end = text.slice(index + searchValue.length)\n      return { start, middle, end }\n    },\n    filterSearch () {\n      if (!this.isAutocomplete) return this.computedItems\n\n      return this.computedItems.filter(i => this.filter(\n        i, this.searchValue, this.getText(i))\n      )\n    },\n    onKeyDown (e) {\n      // If enter, space, up, or down is pressed, open menu\n      if (!this.menuIsActive && [13, 32, 38, 40].includes(e.keyCode)) {\n        e.preventDefault()\n        return this.showMenuItems()\n      }\n\n      // If escape or tab with no search, blur\n      if (e.keyCode === 27 || e.keyCode === 9 && !this.searchValue) {\n        return this.blur()\n      }\n\n      // Tab shouldn't switch inputs\n      if (e.keyCode === 9) {\n        this.tags ? e.preventDefault() : this.blur()\n      }\n\n      if (!this.isAutocomplete ||\n        ![32].includes(e.keyCode) // space\n      ) this.$refs.menu.changeListIndex(e)\n\n      // Up or down\n      if ([38, 40].includes(e.keyCode)) this.selectedIndex = -1\n\n      if (this.isAutocomplete &&\n        !this.hideSelections &&\n        !this.searchValue\n      ) this.changeSelectedIndex(e.keyCode)\n\n      if (!this.tags || !this.searchValue) return\n\n      // Tab, enter\n      if ([9, 13].includes(e.keyCode)) {\n        const newItem = this.filteredItems.length && this.$refs.menu.listIndex >= 0\n          ? this.filteredItems[this.$refs.menu.listIndex]\n          : this.searchValue\n        this.addTag(newItem)\n      }\n\n      // Left arrow\n      if (e.keyCode === 37 && this.$refs.input.selectionStart === 0 && this.selectedItems.length) {\n        this.addTag(this.searchValue)\n        this.$nextTick(() => {\n          this.selectedIndex = Math.max(this.selectedItems.length - 2, 0)\n        })\n      }\n\n      // Right arrow\n      if (e.keyCode === 39 && this.$refs.input.selectionEnd === this.searchValue.length) {\n        this.$refs.menu.listIndex = -1\n      }\n    },\n    addTag (content) {\n      if (this.selectedItems.includes(content)) {\n        this.$delete(this.selectedItems, this.selectedItems.indexOf(content))\n      } else {\n        this.selectedItems.push(content)\n      }\n      this.$nextTick(() => {\n        this.searchValue = null\n        this.$emit('change', this.selectedItems)\n      })\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSelect/mixins/select-autocomplete.js"",""import { getObjectValueByPath } from '../../../util/helpers'\n\n/**\n * Select generators\n *\n * @mixin\n *\n * Used for creating the DOM elements for VSelect\n */\nexport default {\n  methods: {\n    genMenu () {\n      const offsetY = this.isAutocomplete || this.offset || this.isDropdown\n      let nudgeTop = 0\n\n      if (this.auto) nudgeTop = -18\n      else if (this.solo) nudgeTop = 0\n      else if (this.isDropdown) nudgeTop = 26\n      else if (offsetY) nudgeTop = 24\n\n      const data = {\n        ref: 'menu',\n        props: {\n          activator: this.$el,\n          auto: this.auto,\n          closeOnClick: false,\n          closeOnContentClick: !this.isMultiple,\n          contentClass: this.computedContentClass,\n          disabled: this.disabled,\n          maxHeight: this.maxHeight,\n          nudgeTop,\n          offsetY,\n          offsetOverflow: this.isAutocomplete,\n          openOnClick: false,\n          value: this.menuIsActive &&\n            (!this.tags || this.filteredItems.length > 0) &&\n            (!this.combobox || this.filteredItems.length > 0),\n          zIndex: this.menuZIndex\n        },\n        on: {\n          input: val => {\n            if (!val) {\n              this.menuIsActive = false\n            }\n          }\n        }\n      }\n\n      if (this.isAutocomplete) data.props.transition = ''\n\n      this.minWidth && (data.props.minWidth = this.minWidth)\n\n      return this.$createElement('v-menu', data, [this.genList()])\n    },\n    genSelectionsAndSearch () {\n      return this.$createElement('div', {\n        'class': 'input-group__selections',\n        style: { 'overflow': 'hidden' },\n        ref: 'activator'\n      }, [\n        ...this.genSelections(),\n        this.genSearch()\n      ])\n    },\n    genSelections () {\n      if (this.hideSelections) return []\n\n      const children = []\n      const chips = this.chips\n      const slots = this.$scopedSlots.selection\n      const length = this.selectedItems.length\n      this.selectedItems.forEach((item, i) => {\n        if (slots) {\n          children.push(this.genSlotSelection(item, i))\n        } else if (chips) {\n          children.push(this.genChipSelection(item, i))\n        } else if (this.segmented) {\n          children.push(this.genSegmentedBtn(item, i))\n        } else {\n          children.push(this.genCommaSelection(item, i < length - 1, i))\n        }\n      })\n\n      return children\n    },\n    genSearch () {\n      const data = {\n        staticClass: 'input-group--select__autocomplete',\n        'class': {\n          'input-group--select__autocomplete--index': this.selectedIndex > -1\n        },\n        style: {\n          flex: this.shouldBreak ? '1 0 100%' : null\n        },\n        attrs: {\n          ...this.$attrs,\n          disabled: this.disabled || !this.isAutocomplete,\n          readonly: this.readonly,\n          tabindex: this.disabled || !this.isAutocomplete ? -1 : this.tabindex\n        },\n        domProps: {\n          value: this.maskText(this.lazySearch || '')\n        },\n        directives: [{\n          name: 'show',\n          value: (this.isAutocomplete) ||\n            (this.placeholder && !this.selectedItems.length)\n        }],\n        ref: 'input',\n        key: 'input'\n      }\n\n      if (this.isAutocomplete) {\n        data.attrs.role = 'combobox'\n        data.domProps.autocomplete = this.browserAutocomplete\n\n        data.on = {\n          ...this.genListeners(),\n          input: e => {\n            this.searchValue = this.unmaskText(e.target.value)\n          }\n        }\n\n        if (this.combobox) {\n          // When using the combobox\n          // update inputValue and\n          // set the menu status\n          data.on.blur = () => {\n            this.inputValue = this.lazySearch\n          }\n        }\n\n        data.directives = data.directives.concat(this.genDirectives())\n      }\n\n      if (this.placeholder) data.domProps.placeholder = this.placeholder\n\n      return this.$createElement('input', data)\n    },\n    genSegmentedBtn (item) {\n      if (!item.text || !item.callback) {\n        console.warn('[Vuetify] Warn: When using the v-select component with \\'segmented\\' prop without a selection slot, items must contain both a text and callback property')\n        return null\n      }\n\n      return this.$createElement('v-btn', {\n        props: {\n          flat: true\n        },\n        on: {\n          click (e) {\n            e.stopPropagation()\n            item.callback(e)\n          }\n        }\n      }, [item.text])\n    },\n    genSlotSelection (item, index) {\n      return this.$scopedSlots.selection({\n        parent: this,\n        item,\n        index,\n        selected: index === this.selectedIndex,\n        disabled: this.disabled || this.readonly\n      })\n    },\n    genChipSelection (item, index) {\n      const isDisabled = this.disabled || this.readonly\n      const click = e => {\n        if (isDisabled) return\n\n        e.stopPropagation()\n        this.focus()\n        this.selectedIndex = index\n      }\n\n      return this.$createElement('v-chip', {\n        staticClass: 'chip--select-multi',\n        attrs: { tabindex: '-1' },\n        props: {\n          close: !isDisabled,\n          dark: this.dark,\n          disabled: isDisabled,\n          selected: index === this.selectedIndex\n        },\n        on: {\n          click: click,\n          focus: click,\n          input: () => this.selectItem(item)\n        },\n        key: this.getValue(item)\n      }, this.getText(item))\n    },\n    genCommaSelection (item, comma, index) {\n      return this.$createElement('div', {\n        staticClass: 'input-group__selections__comma',\n        'class': {\n          'input-group__selections__comma--active': index === this.selectedIndex\n        },\n        key: JSON.stringify(this.getValue(item)) // Item may be an object\n      }, `${this.getText(item)}${comma ? ', ' : ''}`)\n    },\n    genList () {\n      const children = this.filteredItems.map(o => {\n        if (o.header) return this.genHeader(o)\n        if (o.divider) return this.genDivider(o)\n        else return this.genTile(o)\n      })\n\n      if (!children.length) {\n        const noData = this.$slots['no-data']\n        if (noData) {\n          children.push(noData)\n        } else {\n          children.push(this.genTile(this.noDataText, true))\n        }\n      }\n\n      return this.$createElement('v-card', [\n        this.$createElement('v-list', {\n          ref: 'list'\n        }, children)\n      ])\n    },\n    genHeader (item) {\n      return this.$createElement('v-subheader', {\n        props: item\n      }, item.header)\n    },\n    genDivider (item) {\n      return this.$createElement('v-divider', {\n        props: item\n      })\n    },\n    genTile (item, disabled) {\n      const active = this.selectedItems.indexOf(item) !== -1\n\n      if (typeof disabled === 'undefined') {\n        disabled = getObjectValueByPath(item, this.itemDisabled)\n      }\n\n      const data = {\n        on: {\n          click: e => {\n            if (disabled) return\n\n            this.selectItem(item)\n          }\n        },\n        props: {\n          avatar: item === Object(item) && this.itemAvatar in item,\n          ripple: true,\n          value: active\n        }\n      }\n\n      if (disabled) {\n        data.props.disabled = disabled\n      }\n\n      if (this.$scopedSlots.item) {\n        return this.$createElement('v-list-tile', data,\n          [this.$scopedSlots.item({ parent: this, item })]\n        )\n      }\n\n      return this.$createElement('v-list-tile', data,\n        [this.genAction(item, active), this.genContent(item)]\n      )\n    },\n    genAction (item, active) {\n      if (!this.isMultiple) return null\n\n      const data = {\n        staticClass: 'list__tile__action--select-multi',\n        on: {\n          click: e => {\n            e.stopPropagation()\n            this.selectItem(item)\n          }\n        }\n      }\n\n      return this.$createElement('v-list-tile-action', data, [\n        this.$createElement('v-checkbox', { props: { inputValue: active } })\n      ])\n    },\n    genContent (item) {\n      const text = this.getText(item)\n\n      return this.$createElement('v-list-tile-content',\n        [this.$createElement('v-list-tile-title', {\n          domProps: {\n            innerHTML: this.genFiltered(text)\n          }\n        })]\n      )\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSelect/mixins/select-generators.js"",""export default {\n  methods: {\n    genTHead () {\n      if (this.hideHeaders) return // Exit Early since no headers are needed.\n\n      let children = []\n\n      if (this.$scopedSlots.headers) {\n        const row = this.$scopedSlots.headers({\n          headers: this.headers,\n          indeterminate: this.indeterminate,\n          all: this.all\n        })\n\n        children = this.needsTR(row) ? this.genTR(row) : row\n      } else {\n        const row = this.headers.map(o => this.genHeader(o))\n        const checkbox = this.$createElement('v-checkbox', {\n          props: {\n            dark: this.dark,\n            light: this.light,\n            color: this.selectAll === true ? '' : this.selectAll,\n            hideDetails: true,\n            inputValue: this.all,\n            indeterminate: this.indeterminate\n          },\n          on: { change: this.toggle }\n        })\n\n        this.hasSelectAll && row.unshift(this.$createElement('th', [checkbox]))\n\n        children = this.genTR(row)\n      }\n\n      return this.$createElement('thead', [children])\n    },\n    genHeader (header) {\n      const array = [\n        this.$scopedSlots.headerCell\n          ? this.$scopedSlots.headerCell({ header })\n          : header[this.headerText]\n      ]\n\n      return this.$createElement('th', ...this.genHeaderData(header, array))\n    },\n    genHeaderData (header, children) {\n      const classes = ['column']\n      const data = {\n        attrs: {\n          role: 'columnheader',\n          scope: 'col',\n          'aria-label': header[this.headerText] || '',\n          'aria-sort': 'none'\n        }\n      }\n\n      if ('sortable' in header && header.sortable || !('sortable' in header)) {\n        this.genHeaderSortingData(header, children, data, classes)\n      } else {\n        data.attrs['aria-label'] += ': Not sorted.' // TODO: Localization\n      }\n\n      classes.push(`text-xs-${header.align || 'right'}`)\n      if (Array.isArray(header.class)) {\n        classes.push(...header.class)\n      } else if (header.class) {\n        classes.push(header.class)\n      }\n      data.class = classes\n\n      return [data, children]\n    },\n    genHeaderSortingData (header, children, data, classes) {\n      if (!('value' in header)) {\n        console.warn('Data table headers must have a value property that corresponds to a value in the v-model array')\n      }\n\n      data.attrs.tabIndex = 0\n      data.on = {\n        click: () => {\n          this.expanded = []\n          this.sort(header.value)\n        },\n        keydown: e => {\n          // check for space\n          if (e.keyCode === 32) {\n            e.preventDefault()\n            this.sort(header.value)\n          }\n        }\n      }\n\n      classes.push('sortable')\n      const icon = this.$createElement('v-icon', { attrs: { 'aria-hidden': true } }, 'arrow_upward')\n      if (header.align && header.align === 'left') {\n        children.push(icon)\n      } else {\n        children.unshift(icon)\n      }\n\n      const pagination = this.computedPagination\n      const beingSorted = pagination.sortBy === header.value\n      if (beingSorted) {\n        classes.push('active')\n        if (pagination.descending) {\n          classes.push('desc')\n          data.attrs['aria-sort'] = 'descending'\n          data.attrs['aria-label'] += ': Sorted descending. Activate to remove sorting.' // TODO: Localization\n        } else {\n          classes.push('asc')\n          data.attrs['aria-sort'] = 'ascending'\n          data.attrs['aria-label'] += ': Sorted ascending. Activate to sort descending.' // TODO: Localization\n        }\n      } else {\n        data.attrs['aria-label'] += ': Not sorted. Activate to sort ascending.' // TODO: Localization\n      }\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDataTable/mixins/head.js"",""import RowExpandTransitionFunctions from '../../transitions/row-expand-transition'\n\nexport default {\n  methods: {\n    genTBody () {\n      const children = []\n\n      if (!this.itemsLength) {\n        children.push(this.genEmptyBody(this.noDataText))\n      } else if (!this.filteredItems.length) {\n        children.push(this.genEmptyBody(this.noResultsText))\n      } else {\n        children.push(this.genFilteredItems())\n      }\n\n      return this.$createElement('tbody', children)\n    },\n    genExpandedRow (props) {\n      const children = []\n\n      if (this.isExpanded(props.item)) {\n        const expand = this.$createElement('div', {\n          class: 'datatable__expand-content',\n          key: props.item[this.itemKey]\n        }, this.$scopedSlots.expand(props))\n\n        children.push(expand)\n      }\n\n      const transition = this.$createElement('transition-group', {\n        class: 'datatable__expand-col',\n        attrs: { colspan: '100%' },\n        props: {\n          tag: 'td'\n        },\n        on: RowExpandTransitionFunctions\n      }, children)\n\n      return this.genTR([transition], { class: 'datatable__expand-row' })\n    },\n    createProps (item, index) {\n      const props = { item, index }\n      const key = this.itemKey\n\n      Object.defineProperty(props, 'selected', {\n        get: () => this.selected[item[this.itemKey]],\n        set: (value) => {\n          let selected = this.value.slice()\n          if (value) selected.push(item)\n          else selected = selected.filter(i => i[key] !== item[key])\n          this.$emit('input', selected)\n        }\n      })\n\n      Object.defineProperty(props, 'expanded', {\n        get: () => this.expanded[item[this.itemKey]],\n        set: (value) => {\n          if (!this.expand) {\n            Object.keys(this.expanded).forEach((key) => {\n              this.$set(this.expanded, key, false)\n            })\n          }\n          this.$set(this.expanded, item[this.itemKey], value)\n        }\n      })\n\n      return props\n    },\n    genFilteredItems () {\n      const rows = []\n      this.filteredItems.forEach((item, index) => {\n        const props = this.createProps(item, index)\n        const row = this.$scopedSlots.items\n          ? this.$scopedSlots.items(props)\n          : []\n\n        rows.push(this.needsTR(row)\n          ? this.genTR(row, {\n            attrs: { active: this.isSelected(item) }\n          })\n          : row)\n\n        if (this.$scopedSlots.expand) {\n          const expandRow = this.genExpandedRow(props)\n          rows.push(expandRow)\n        }\n      })\n\n      return rows\n    },\n    genEmptyBody (text) {\n      return this.genTR([this.$createElement('td', {\n        'class': 'text-xs-center',\n        attrs: { colspan: '100%' }\n      }, text)])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDataTable/mixins/body.js"",""export default {\n  methods: {\n    genPrevIcon () {\n      return this.$createElement('v-btn', {\n        props: {\n          disabled: this.computedPagination.page === 1,\n          icon: true,\n          flat: true,\n          dark: this.dark,\n          light: this.light\n        },\n        on: {\n          click: () => {\n            const page = this.computedPagination.page\n            this.updatePagination({ page: page - 1 })\n          }\n        },\n        attrs: {\n          'aria-label': 'Previous page' // TODO: Localization\n        }\n      }, [this.$createElement('v-icon', 'chevron_left')])\n    },\n    genNextIcon () {\n      const pagination = this.computedPagination\n      const disabled = pagination.rowsPerPage < 0 ||\n        pagination.page * pagination.rowsPerPage >= this.itemsLength ||\n        this.pageStop < 0\n\n      return this.$createElement('v-btn', {\n        props: {\n          disabled,\n          icon: true,\n          flat: true,\n          dark: this.dark,\n          light: this.light\n        },\n        on: {\n          click: () => {\n            const page = this.computedPagination.page\n            this.updatePagination({ page: page + 1 })\n          }\n        },\n        attrs: {\n          'aria-label': 'Next page' // TODO: Localization\n        }\n      }, [this.$createElement('v-icon', 'chevron_right')])\n    },\n    genSelect () {\n      return this.$createElement('div', {\n        'class': 'datatable__actions__select'\n      }, [\n        this.rowsPerPageText,\n        this.$createElement('v-select', {\n          attrs: {\n            'aria-label': this.rowsPerPageText\n          },\n          props: {\n            items: this.rowsPerPageItems,\n            value: this.computedPagination.rowsPerPage,\n            hideDetails: true,\n            auto: true,\n            minWidth: '75px'\n          },\n          on: {\n            input: (val) => {\n              this.updatePagination({\n                page: 1,\n                rowsPerPage: val\n              })\n            }\n          }\n        })\n      ])\n    },\n    genPagination () {\n      let pagination = '–'\n\n      if (this.itemsLength) {\n        const stop = this.itemsLength < this.pageStop || this.pageStop < 0\n          ? this.itemsLength\n          : this.pageStop\n\n        pagination = this.$scopedSlots.pageText\n          ? this.$scopedSlots.pageText({\n            pageStart: this.pageStart + 1,\n            pageStop: stop,\n            itemsLength: this.itemsLength\n          })\n          : `${this.pageStart + 1}-${stop} of ${this.itemsLength}`\n      }\n\n      return this.$createElement('div', {\n        'class': 'datatable__actions__pagination'\n      }, [pagination])\n    },\n    genActions () {\n      return [this.$createElement('div', {\n        'class': 'datatable__actions'\n      }, [\n        this.genSelect(),\n        this.genPagination(),\n        this.genPrevIcon(),\n        this.genNextIcon()\n      ])]\n    },\n    genTFoot () {\n      const children = []\n\n      if (this.$slots.footer) {\n        const footer = this.$slots.footer\n        const row = this.needsTR(footer) ? this.genTR(footer) : footer\n\n        children.push(row)\n      }\n\n      if (!this.hideActions) {\n        children.push(this.genTR([\n          this.$createElement('td', {\n            attrs: { colspan: '100%' }\n          }, this.genActions())\n        ]))\n      }\n\n      if (!children.length) return null\n      return this.$createElement('tfoot', children)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDataTable/mixins/foot.js"",""export default {\n  methods: {\n    genTProgress () {\n      const col = this.$createElement('th', {\n        staticClass: 'column',\n        attrs: {\n          colspan: '100%'\n        }\n      }, [this.genProgress()])\n\n      return this.$createElement('thead', {\n        staticClass: 'datatable__progress'\n      }, [this.genTR([col])])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDataTable/mixins/progress.js"",""require('../../stylus/components/_small-dialog.styl')\n\nexport default {\n  name: 'v-edit-dialog',\n\n  data () {\n    return {\n      isActive: false,\n      isSaving: false\n    }\n  },\n\n  props: {\n    cancelText: {\n      default: 'Cancel'\n    },\n    large: Boolean,\n    lazy: Boolean,\n    saveText: {\n      default: 'Save'\n    },\n    transition: {\n      type: String,\n      default: 'slide-x-reverse-transition'\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      val &&\n        this.$emit('open') &&\n        setTimeout(this.focus, 50) // Give DOM time to paint\n\n      if (!val) {\n        !this.isSaving && this.$emit('cancel')\n        this.isSaving && this.$emit('close')\n        this.isSaving = false\n      }\n    }\n  },\n\n  methods: {\n    cancel () {\n      this.isActive = false\n    },\n    focus () {\n      const input = this.$refs.content.querySelector('input')\n      input && input.focus()\n    },\n    save () {\n      this.isSaving = true\n      this.isActive = false\n      this.$emit('save')\n    },\n    genButton (fn, text) {\n      return this.$createElement('v-btn', {\n        props: {\n          flat: true,\n          color: 'primary',\n          light: true\n        },\n        on: { click: fn }\n      }, text)\n    },\n    genActions () {\n      return this.$createElement('div', {\n        'class': 'small-dialog__actions'\n      }, [\n        this.genButton(this.cancel, this.cancelText),\n        this.genButton(this.save, this.saveText)\n      ])\n    },\n    genContent () {\n      return this.$createElement('div', {\n        on: {\n          keydown: e => {\n            e.keyCode === 27 && this.cancel()\n            e.keyCode === 13 && this.save()\n          }\n        },\n        ref: 'content'\n      }, [this.$slots.input])\n    }\n  },\n\n  render (h) {\n    return h('v-menu', {\n      'class': 'small-dialog',\n      props: {\n        contentClass: 'small-dialog__content',\n        transition: this.transition,\n        origin: 'top right',\n        right: true,\n        value: this.isActive,\n        closeOnContentClick: false,\n        lazy: this.lazy\n      },\n      on: {\n        input: val => (this.isActive = val)\n      }\n    }, [\n      h('a', {\n        domProps: { href: 'javascript:;' },\n        slot: 'activator'\n      }, this.$slots.default),\n      this.genContent(),\n      this.large ? this.genActions() : null\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDataTable/VEditDialog.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_small-dialog.styl\n// module id = 127\n// module chunks = 0"",""import VDatePicker from './VDatePicker'\n\nVDatePicker.install = function install (Vue) {\n  Vue.component(VDatePicker.name, VDatePicker)\n}\n\nexport default VDatePicker\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDatePicker/index.js"",""require('../../stylus/components/_pickers.styl')\nrequire('../../stylus/components/_date-picker.styl')\n\nimport { createRange } from '../../util/helpers'\n\nimport Picker from '../../mixins/picker'\nimport DateYears from './mixins/date-years'\nimport DateTitle from './mixins/date-title'\nimport DateHeader from './mixins/date-header'\nimport DateTable from './mixins/date-table'\nimport MonthTable from './mixins/month-table'\nimport VBtn from '../VBtn'\nimport VCard from '../VCard'\nimport VIcon from '../VIcon'\n\nimport Touch from '../../directives/touch'\n\nconst createDefaultDateFormat = type => date => {\n  const pad = n => n < 10 ? `0${n}` : `${n}`\n  const isoString = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`\n  return isoString.substr(0, { date: 10, month: 7, year: 4 }[type])\n}\n\nexport default {\n  name: 'v-date-picker',\n\n  components: {\n    VBtn,\n    VCard,\n    VIcon\n  },\n\n  mixins: [Picker, DateYears, DateTitle, DateHeader, DateTable, MonthTable],\n\n  directives: { Touch },\n\n  data () {\n    return {\n      tableDate: new Date(),\n      originalDate: this.value,\n      currentDay: null,\n      currentMonth: null,\n      currentYear: null,\n      isReversing: false,\n      narrowDays: [],\n      activePicker: this.type.toUpperCase()\n    }\n  },\n\n  props: {\n    locale: {\n      type: String,\n      default: 'en-us'\n    },\n    type: {\n      type: String,\n      default: 'date',\n      validator: type => ['date', 'month'/*, 'year'*/].includes(type)\n    },\n    dateFormat: {\n      type: Function,\n      default: null\n    },\n    titleDateFormat: {\n      type: [Object, Function],\n      default: null\n    },\n    headerDateFormat: {\n      type: [Object, Function],\n      default: () => ({ month: 'long', year: 'numeric' })\n    },\n    monthFormat: {\n      type: [Object, Function],\n      default: () => ({ month: 'short' })\n    },\n    formattedValue: {\n      required: false\n    },\n    allowedDates: {\n      type: [Array, Object, Function],\n      default: () => (null)\n    },\n    firstDayOfWeek: {\n      type: [String, Number],\n      default: 0\n    },\n    yearIcon: String\n  },\n\n  computed: {\n    timeZone () {\n      try {\n        const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone\n        new Date('2000-01-15').toLocaleDateString('en', {\n          day: 'numeric',\n          timeZone\n        })\n        return timeZone\n      } catch (e) {\n        return 'UTC'\n      }\n    },\n    supportsLocaleFormat () {\n      return ('toLocaleDateString' in Date.prototype) &&\n        new Date('2000-01-15').toLocaleDateString('en', {\n          day: 'numeric',\n          timeZone: 'UTC'\n        }) === '15'\n    },\n    firstAllowedDate () {\n      const date = new Date()\n\n      if (this.type === 'month') {\n        date.setDate(1)\n        date.setHours(1)\n\n        if (this.allowedDates) {\n          const valid = new Date(date)\n          for (let month = 0; month < 12; month++) {\n            valid.setMonth(month)\n            if (this.isAllowed(valid)) {\n              return valid\n            }\n          }\n        }\n      } else if (this.type === 'date') {\n        date.setHours(1)\n        const month = date.getMonth()\n\n        if (this.allowedDates) {\n          const valid = new Date(date)\n          for (let i = 0; i < 31; i++) {\n            if (date.getMonth() === month && this.isAllowed(valid)) return valid\n            valid.setDate(i)\n          }\n        }\n      }\n\n      return date\n    },\n    inputDate: {\n      get () {\n        const date = this.makeDate(this.value)\n        return date == null ? this.firstAllowedDate : date\n      },\n      set (value) {\n        const date = this.makeDate(value)\n        const pickerDateFormat = createDefaultDateFormat(this.type)\n        this.$emit('input', date == null ? this.originalDate : pickerDateFormat(date))\n        this.$emit('update:formattedValue', (this.dateFormat || pickerDateFormat)(date == null ? (this.makeDate(this.originalDate) || this.firstAllowedDate) : date))\n      }\n    },\n    day () {\n      return this.inputDate.getDate()\n    },\n    month () {\n      return this.inputDate.getMonth()\n    },\n    year () {\n      return this.inputDate.getFullYear()\n    },\n    tableMonth () {\n      return this.tableDate.getMonth()\n    },\n    tableYear () {\n      return this.tableDate.getFullYear()\n    },\n    computedTransition () {\n      return this.isReversing ? 'tab-reverse-transition' : 'tab-transition'\n    },\n    titleText () {\n      const date = this.normalizeDate(this.year, this.month, this.day)\n\n      const defaultTitleDateFormat = this.type === 'year' ? {\n        year: 'numeric'\n      } : (this.type === 'month' ? {\n        month: 'long'\n      } : {\n        weekday: 'short',\n        month: 'short',\n        day: 'numeric'\n      })\n\n      let titleText\n      if (typeof this.titleDateFormat === 'function') {\n        titleText = this.titleDateFormat(date)\n      } else if (this.supportsLocaleFormat) {\n        titleText = date.toLocaleDateString(this.locale, Object.assign(this.titleDateFormat || defaultTitleDateFormat, {\n          timeZone: this.timeZone\n        }))\n      } else if ('toLocaleDateString' in Date.prototype) {\n        titleText = createDefaultDateFormat(this.type)(date)\n      }\n\n      if (this.landscape) {\n        if (titleText.indexOf(',') > -1) titleText = titleText.replace(',', ',<br>')\n        else if (titleText.indexOf(' ') > -1) titleText = titleText.replace(' ', '<br>')\n      }\n\n      return titleText\n    }\n  },\n\n  watch: {\n    activePicker (val, prev) {\n      if (val !== 'YEAR') return\n\n      // That's a quirk, setting timeout stopped working after fixing #1649\n      // It worked but for timeouts significantly longer than the transition duration\n      const interval = setInterval(() => {\n        if (this.$refs.years) {\n          this.$refs.years.scrollTop = this.$refs.years.scrollHeight / 2 - 125\n          clearInterval(interval)\n        }\n      }, 100)\n    },\n    tableDate (val, prev) {\n      this.isReversing = val < prev\n    },\n    value (val) {\n      if (val) this.tableDate = this.inputDate\n    },\n    type (val) {\n      if (val === 'month' && this.activePicker === 'DATE') {\n        this.activePicker = 'MONTH'\n      } else if (val === 'year') {\n        this.activePicker = 'YEAR'\n      }\n    },\n    firstDayOfWeek () {\n      this.getWeekDays()\n    }\n  },\n\n  methods: {\n    save () {\n      if (this.originalDate) {\n        this.originalDate = this.value\n      } else {\n        this.originalDate = this.inputDate\n      }\n\n      if (this.$parent && this.$parent.isActive) this.$parent.isActive = false\n    },\n    cancel () {\n      this.inputDate = this.originalDate\n      if (this.$parent && this.$parent.isActive) this.$parent.isActive = false\n    },\n    getWeekDays () {\n      const first = parseInt(this.firstDayOfWeek, 10)\n      if (this.supportsLocaleFormat) {\n        const date = this.normalizeDate(2000, 1, 7)\n        const day = date.getDate() - date.getDay() + first\n        const format = { weekday: 'narrow' }\n        this.narrowDays = createRange(7).map(i => this.normalizeDate(2000, 1, day + i).toLocaleDateString(this.locale, format))\n      } else {\n        this.narrowDays = createRange(7).map(i => ['S', 'M', 'T', 'W', 'T', 'F', 'S'][(i + first) % 7])\n      }\n    },\n    isAllowed (date) {\n      if (!this.allowedDates) return true\n\n      if (Array.isArray(this.allowedDates)) {\n        const format = createDefaultDateFormat(this.activePicker === 'MONTH' ? 'month' : 'date')\n        date = format(this.makeDate(date))\n        return !!this.allowedDates.find(allowedDate => {\n          allowedDate = this.makeDate(allowedDate)\n          return allowedDate && format(allowedDate) === date\n        })\n      } else if (this.allowedDates instanceof Function) {\n        return this.allowedDates(date)\n      } else if (this.allowedDates instanceof Object) {\n        const format = createDefaultDateFormat(this.activePicker === 'MONTH' ? 'month' : 'date')\n        const min = format(this.makeDate(this.allowedDates.min))\n        const max = format(this.makeDate(this.allowedDates.max))\n        date = format(date)\n        return (!min || min <= date) && (!max || max >= date)\n      }\n\n      return true\n    },\n    genTableTouch (touchCallback) {\n      return {\n        name: 'touch',\n        value: {\n          left: e => (e.offsetX < -15) && touchCallback(1),\n          right: e => (e.offsetX > 15) && touchCallback(-1)\n        }\n      }\n    },\n    genTable (tableChildren, touchCallback) {\n      const wheel = this.activePicker === 'MONTH' ? this.monthWheelScroll : this.dateWheelScroll\n      const options = {\n        staticClass: 'picker--date__table',\n        'class': {\n          'picker--month__table': this.activePicker === 'MONTH'\n        },\n        on: this.scrollable ? { wheel } : undefined,\n        directives: [this.genTableTouch(touchCallback)]\n      }\n\n      const table = this.$createElement('table', {\n        key: this.activePicker === 'MONTH' ? this.tableYear : this.tableMonth\n      }, tableChildren)\n\n      return this.$createElement('div', options, [\n        this.$createElement('transition', {\n          props: { name: this.computedTransition }\n        }, [table])\n      ])\n    },\n    genPickerBody (h) {\n      const pickerBodyChildren = []\n      if (this.activePicker === 'DATE') {\n        pickerBodyChildren.push(h('div', { staticClass: 'picker--date__header' }, [this.genSelector()]))\n        pickerBodyChildren.push(this.genTable([\n          this.dateGenTHead(),\n          this.dateGenTBody()\n        ], value => this.tableDate = this.normalizeDate(this.tableYear, this.tableMonth + value)))\n      } else if (this.activePicker === 'MONTH') {\n        pickerBodyChildren.push(h('div', { staticClass: 'picker--date__header' }, [this.genSelector()]))\n        pickerBodyChildren.push(this.genTable([\n          this.monthGenTBody()\n        ], value => this.tableDate = this.normalizeDate(this.tableYear + value)))\n      } else if (this.activePicker === 'YEAR') {\n        pickerBodyChildren.push(this.genYears())\n      }\n\n      return pickerBodyChildren\n    },\n    makeDate (val) {\n      if (val == null) return val\n      if (val instanceof Date) return val\n      if (!isNaN(val)) return new Date(val)\n      const [year, month, date] = val.trim().split(' ')[0].split('-')\n      return this.normalizeDate(year, month ? (month - 1) : 0, date ? (date * 1) : 1)\n    },\n    normalizeDate (year, month = 0, date = 1) {\n      return new Date(year, month, date, 1 /* Workaround for #1409 */)\n    }\n  },\n\n  created () {\n    this.getWeekDays()\n    this.tableDate = this.inputDate\n  },\n\n  mounted () {\n    const date = new Date()\n    this.currentDay = date.getDate()\n    this.currentMonth = date.getMonth()\n    this.currentYear = date.getFullYear()\n  },\n\n  render (h) {\n    const children = []\n\n    !this.noTitle && children.push(this.genTitle(this.titleText))\n\n    children.push(h('transition', {\n      props: {\n        origin: 'center center',\n        mode: 'out-in',\n        name: 'scale-transition'\n      }\n    }, [h('div', {\n      staticClass: 'picker__body',\n      key: this.activePicker\n    }, this.genPickerBody(h))]))\n\n    this.$scopedSlots.default && children.push(this.genSlot())\n\n    return h('v-card', {\n      staticClass: 'picker picker--date',\n      'class': {\n        'picker--landscape': this.landscape,\n        ...this.themeClasses\n      }\n    }, children)\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDatePicker/VDatePicker.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_date-picker.styl\n// module id = 130\n// module chunks = 0"",""export default {\n  methods: {\n    genYears () {\n      return this.$createElement('ul', {\n        staticClass: 'picker--date__years',\n        key: 'year',\n        ref: 'years'\n      }, this.genYearItems())\n    },\n    yearClick (year) {\n      this.inputDate = this.normalizeDate(year, this.tableMonth, this.day)\n\n      if (this.type === 'year') {\n        this.$nextTick(() => (this.autosave && this.save()))\n      } else {\n        this.activePicker = 'MONTH'\n      }\n    },\n    genYearItems () {\n      const children = []\n      for (let year = this.year + 100, length = this.year - 100; year > length; year--) {\n        const date = this.normalizeDate(year, this.month, this.day)\n        const buttonText = this.supportsLocaleFormat\n          ? date.toLocaleDateString(this.locale, {\n            year: 'numeric',\n            timeZone: this.timeZone\n          })\n          : year\n\n        children.push(this.$createElement('li', {\n          'class': {\n            active: this.year === year\n          },\n          on: {\n            click: () => this.yearClick(year)\n          }\n        }, buttonText))\n      }\n      return children\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDatePicker/mixins/date-years.js"",""\nexport default {\n  methods: {\n    genYearIcon () {\n      return this.yearIcon\n        ? this.$createElement('v-icon', {\n          props: {\n            dark: true\n          }\n        }, this.yearIcon)\n        : null\n    },\n\n    getYearBtn () {\n      const titleDate = this.normalizeDate(this.year, this.month, this.day)\n      return this.$createElement('div', {\n        'class': {\n          'picker--date__title-year': true,\n          'active': this.activePicker === 'YEAR'\n        },\n        on: {\n          click: e => {\n            e.stopPropagation()\n            this.activePicker = 'YEAR'\n          }\n        }\n      }, [\n        this.supportsLocaleFormat\n          ? titleDate.toLocaleDateString(this.locale, {\n            year: 'numeric',\n            timeZone: this.timeZone\n          })\n          : this.year,\n        this.genYearIcon()\n      ])\n    },\n\n    genTitleText (title) {\n      return this.$createElement('transition', {\n        props: {\n          name: 'slide-y-reverse-transition',\n          mode: 'out-in'\n        }\n      }, [\n        this.$createElement('div', {\n          domProps: { innerHTML: title },\n          key: title\n        })\n      ])\n    },\n\n    genTitleDate (title) {\n      return this.$createElement('div', {\n        staticClass: 'picker--date__title-date',\n        'class': {\n          'active': this.activePicker === this.type.toUpperCase()\n        },\n        on: {\n          click: e => {\n            e.stopPropagation()\n            this.activePicker = this.type.toUpperCase()\n          }\n        }\n      }, [this.genTitleText(title)])\n    },\n\n    genTitle (title) {\n      return this.$createElement('div', {\n        'class': 'picker__title'\n      }, [\n        this.getYearBtn(),\n        this.genTitleDate(title)\n      ])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDatePicker/mixins/date-title.js"",""export default {\n  methods: {\n    genBtn (change, children) {\n      return this.$createElement('v-btn', {\n        props: {\n          dark: this.dark,\n          icon: true\n        },\n        nativeOn: {\n          click: e => {\n            e.stopPropagation()\n            if (this.activePicker === 'DATE') {\n              this.tableDate = this.normalizeDate(this.tableYear, change)\n            } else if (this.activePicker === 'MONTH') {\n              this.tableDate = this.normalizeDate(change, this.tableMonth)\n            }\n          }\n        }\n      }, children)\n    },\n\n    genHeader (keyValue, selectorText) {\n      const header = this.$createElement('strong', {\n        key: keyValue,\n        on: {\n          click: () => this.activePicker = this.activePicker === 'DATE' ? 'MONTH' : 'YEAR'\n        }\n      }, selectorText)\n\n      const transition = this.$createElement('transition', {\n        props: { name: this.computedTransition }\n      }, [header])\n\n      return this.$createElement('div', {\n        'class': 'picker--date__header-selector-date'\n      }, [transition])\n    },\n\n    genSelector () {\n      const keyValue = this.activePicker === 'DATE' ? this.tableMonth : this.tableYear\n      const selectorDate = this.normalizeDate(this.tableYear, this.tableMonth)\n\n      let selectorText = ''\n      if (typeof this.headerDateFormat === 'function' && this.activePicker === 'DATE') {\n        selectorText = this.headerDateFormat(selectorDate, this.activePicker)\n      } else if (this.supportsLocaleFormat) {\n        const format = this.activePicker === 'DATE'\n          ? this.headerDateFormat\n          : { year: 'numeric' }\n        selectorText = selectorDate.toLocaleDateString(this.locale, Object.assign(format, {\n          timeZone: this.timeZone\n        }))\n      } else if (this.activePicker === 'DATE') {\n        selectorText = selectorDate.getFullYear() + '/'\n        if (selectorDate.getMonth() < 9) selectorText += '0'\n        selectorText += (1 + selectorDate.getMonth())\n      } else if (this.activePicker === 'MONTH') {\n        selectorText = selectorDate.getFullYear()\n      }\n\n      return this.$createElement('div', {\n        'class': 'picker--date__header-selector'\n      }, [\n        this.genBtn(keyValue - 1, [\n          this.$createElement('v-icon', 'chevron_left')\n        ]),\n        this.genHeader(keyValue, selectorText),\n        this.genBtn(keyValue + 1, [\n          this.$createElement('v-icon', 'chevron_right')\n        ])\n      ])\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDatePicker/mixins/date-header.js"",""export default {\n  methods: {\n    dateWheelScroll (e) {\n      e.preventDefault()\n\n      let month = this.tableMonth\n\n      if (e.deltaY < 0) month++\n      else month--\n\n      this.tableDate = this.normalizeDate(this.tableYear, month)\n    },\n    dateGenTHead () {\n      const days = this.narrowDays.map(day => this.$createElement('th', day))\n      return this.$createElement('thead', this.dateGenTR(days))\n    },\n    dateClick (day) {\n      this.inputDate = this.normalizeDate(this.tableYear, this.tableMonth, day)\n      this.$nextTick(() => (this.autosave && this.save()))\n    },\n    dateGenButtonText (date, day) {\n      return this.supportsLocaleFormat\n        ? date.toLocaleDateString(this.locale, {\n          day: 'numeric',\n          timeZone: this.timeZone\n        })\n        : day\n    },\n    dateGenTD (day) {\n      const date = this.normalizeDate(this.tableYear, this.tableMonth, day)\n      const buttonText = this.dateGenButtonText(date, day)\n      const button = this.$createElement('button', {\n        staticClass: 'btn btn--date-picker btn--floating btn--small btn--flat',\n        'class': {\n          'btn--active': this.dateIsActive(day),\n          'btn--outline': this.dateIsCurrent(day) && !this.dateIsActive(day),\n          'btn--disabled': !this.isAllowed(date)\n        },\n        attrs: {\n          type: 'button'\n        },\n        domProps: {\n          innerHTML: `<span class=\""btn__content\"">${buttonText}</span>`\n        },\n        on: {\n          click: () => this.dateClick(day)\n        }\n      })\n\n      return this.$createElement('td', [button])\n    },\n    dateGenTBody () {\n      const children = []\n      const daysInMonth = this.normalizeDate(this.tableYear, this.tableMonth + 1, 0).getDate()\n      let rows = []\n      const day = (this.normalizeDate(this.tableYear, this.tableMonth).getDay() - parseInt(this.firstDayOfWeek) + 7) % 7\n\n      for (let i = 0; i < day; i++) {\n        rows.push(this.$createElement('td'))\n      }\n\n      for (let i = 1; i <= daysInMonth; i++) {\n        rows.push(this.dateGenTD(i))\n\n        if (rows.length % 7 === 0) {\n          children.push(this.dateGenTR(rows))\n          rows = []\n        }\n      }\n\n      if (rows.length) {\n        children.push(this.dateGenTR(rows))\n      }\n\n      children.length < 6 && children.push(this.dateGenTR([\n        this.$createElement('td', { domProps: { innerHTML: '&nbsp;' } })\n      ]))\n\n      return this.$createElement('tbody', children)\n    },\n    dateGenTR (children = [], data = {}) {\n      return [this.$createElement('tr', data, children)]\n    },\n    dateIsActive (i) {\n      return this.tableYear === this.year &&\n        this.tableMonth === this.month &&\n        this.day === i\n    },\n    dateIsCurrent (i) {\n      return this.currentYear === this.tableYear &&\n        this.currentMonth === this.tableMonth &&\n        this.currentDay === i\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDatePicker/mixins/date-table.js"",""export default {\n  methods: {\n    monthWheelScroll (e) {\n      e.preventDefault()\n\n      let year = this.tableYear\n\n      if (e.deltaY < 0) year++\n      else year--\n\n      this.tableDate = this.normalizeDate(year)\n    },\n    monthClick (month) {\n      this.inputDate = this.normalizeDate(this.tableYear, month, this.day)\n      if (this.type === 'date') {\n        this.activePicker = 'DATE'\n      } else {\n        this.$nextTick(() => (this.autosave && this.save()))\n      }\n    },\n    monthGenTD (month) {\n      const date = this.normalizeDate(this.tableYear, month)\n      let monthName\n\n      if (typeof this.monthFormat === 'function') {\n        monthName = this.monthFormat(date)\n      } else if (this.supportsLocaleFormat) {\n        monthName = date.toLocaleDateString(this.locale, Object.assign(this.monthFormat, {\n          timeZone: this.timeZone\n        }))\n      } else {\n        monthName = date.getMonth() + 1\n        if (monthName < 10) {\n          monthName = `0${monthName}`\n        }\n      }\n\n      return this.$createElement('td', [\n        this.$createElement('button', {\n          'class': {\n            'btn btn--date-picker': true,\n            'btn--raised': this.monthIsActive(month),\n            'btn--flat': true,\n            'btn--active': this.monthIsActive(month),\n            'btn--outline': this.monthIsCurrent(month) && !this.monthIsActive(month),\n            'btn--disabled': this.type === 'month' && !this.isAllowed(date)\n          },\n          attrs: {\n            type: 'button'\n          },\n          domProps: {\n            innerHTML: `<span class=\""btn__content\"">${monthName}</span>`\n          },\n          on: {\n            click: () => this.monthClick(month)\n          }\n        })\n      ])\n    },\n    monthGenTBody () {\n      const children = []\n      const cols = Array(3).fill(null)\n      const rows = 12 / cols.length\n\n      for (let row = 0; row < rows; row++) {\n        children.push(this.$createElement('tr', cols.map((_, col) => {\n          return this.monthGenTD(row * cols.length + col)\n        })))\n      }\n\n      return this.$createElement('tbody', children)\n    },\n    monthIsActive (i) {\n      return this.tableYear === this.year &&\n        this.month === i\n    },\n    monthIsCurrent (i) {\n      return this.currentYear === this.tableYear &&\n        this.currentMonth === i\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDatePicker/mixins/month-table.js"",""import VDialog from './VDialog'\n\nVDialog.install = function install (Vue) {\n  Vue.component(VDialog.name, VDialog)\n}\n\nexport default VDialog\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDialog/index.js"",""import VDivider from './VDivider'\n\nVDivider.install = function install (Vue) {\n  Vue.component(VDivider.name, VDivider)\n}\n\nexport default VDivider\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDivider/index.js"",""require('../../stylus/components/_dividers.styl')\n\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-divider',\n\n  functional: true,\n\n  mixins: [Themeable],\n\n  props: {\n    inset: Boolean\n  },\n\n  render (h, { props, data, children }) {\n    data.staticClass = (`divider ${data.staticClass || ''}`).trim()\n\n    if (props.inset) data.staticClass += ' divider--inset'\n    if (props.light) data.staticClass += ' theme--light'\n    if (props.dark) data.staticClass += ' theme--dark'\n\n    return h('hr', data)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VDivider/VDivider.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_dividers.styl\n// module id = 139\n// module chunks = 0"",""import VExpansionPanel from './VExpansionPanel'\nimport VExpansionPanelContent from './VExpansionPanelContent'\n\nVExpansionPanel.install = function install (Vue) {\n  Vue.component(VExpansionPanel.name, VExpansionPanel)\n  Vue.component(VExpansionPanelContent.name, VExpansionPanelContent)\n}\n\nexport default VExpansionPanel\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VExpansionPanel/index.js"",""require('../../stylus/components/_expansion-panel.styl')\n\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-expansion-panel',\n\n  mixins: [Themeable],\n\n  provide () {\n    return {\n      panelClick: this.panelClick,\n      focusable: this.focusable\n    }\n  },\n\n  props: {\n    expand: Boolean,\n    focusable: Boolean,\n    inset: Boolean,\n    popout: Boolean\n  },\n\n  methods: {\n    getChildren () {\n      return this.$children.filter(c => {\n        if (!c.$options) return\n\n        return c.$options._componentTag === 'v-expansion-panel-content'\n      })\n    },\n    panelClick (uid) {\n      if (!this.expand) {\n        return this.getChildren()\n          .forEach(e => e.toggle(uid))\n      }\n\n      const panel = this.$children.find(e => e._uid === uid)\n\n      panel && panel.toggle(uid)\n    }\n  },\n\n  render (h) {\n    return h('ul', {\n      staticClass: 'expansion-panel',\n      'class': {\n        'expansion-panel--focusable': this.focusable,\n        'expansion-panel--popout': this.popout,\n        'expansion-panel--inset': this.inset,\n        ...this.themeClasses\n      }\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VExpansionPanel/VExpansionPanel.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_expansion-panel.styl\n// module id = 142\n// module chunks = 0"",""import { VExpandTransition } from '../transitions'\n\nimport Bootable from '../../mixins/bootable'\nimport Toggleable from '../../mixins/toggleable'\n\nimport VIcon from '../VIcon'\n\nimport Ripple from '../../directives/ripple'\nimport ClickOutside from '../../directives/click-outside'\n\nexport default {\n  name: 'v-expansion-panel-content',\n\n  mixins: [Bootable, Toggleable],\n\n  components: {\n    VIcon\n  },\n\n  directives: {\n    Ripple,\n    ClickOutside\n  },\n\n  inject: ['focusable', 'panelClick'],\n\n  data () {\n    return {\n      height: 'auto'\n    }\n  },\n\n  props: {\n    hideActions: Boolean,\n    ripple: Boolean\n  },\n\n  methods: {\n    genBody () {\n      return this.$createElement('div', {\n        ref: 'body',\n        class: 'expansion-panel__body',\n        directives: [\n          {\n            name: 'show',\n            value: this.isActive\n          }\n        ]\n      }, this.showLazyContent(this.$slots.default))\n    },\n    genHeader () {\n      return this.$createElement('div', {\n        staticClass: 'expansion-panel__header',\n        directives: [{\n          name: 'ripple',\n          value: this.ripple\n        }],\n        on: {\n          click: () => this.panelClick(this._uid)\n        }\n      }, [\n        this.$slots.header,\n        this.genIcon()\n      ])\n    },\n    genIcon (h) {\n      if (this.hideActions) return null\n\n      const icon = this.$slots.actions ||\n        this.$createElement('v-icon', 'keyboard_arrow_down')\n\n      return this.$createElement('div', {\n        staticClass: 'header__icon'\n      }, [icon])\n    },\n    toggle (uid) {\n      const isActive = this._uid === uid && !this.isActive\n\n      if (isActive) this.isBooted = true\n\n      // We treat bootable differently\n      // Needs time to calc height\n      this.$nextTick(() => (this.isActive = isActive))\n    }\n  },\n\n  render (h) {\n    const children = []\n\n    this.$slots.header && children.push(this.genHeader())\n    children.push(h(VExpandTransition, [this.genBody()]))\n\n    return h('li', {\n      staticClass: 'expansion-panel__container',\n      'class': {\n        'expansion-panel__container--active': this.isActive\n      },\n      attrs: {\n        tabindex: 0\n      },\n      on: {\n        keydown: e => {\n          // Ensure element is focusable and the activeElement\n          if (this.focusable &&\n            this.$el === document.activeElement &&\n            e.keyCode === 13\n          ) this.panelClick(this._uid)\n        }\n      }\n    }, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VExpansionPanel/VExpansionPanelContent.js"",""import VFooter from './VFooter'\n\nVFooter.install = function install (Vue) {\n  Vue.component(VFooter.name, VFooter)\n}\n\nexport default VFooter\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VFooter/index.js"",""require('../../stylus/components/_footer.styl')\n\nimport Applicationable from '../../mixins/applicationable'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-footer',\n\n  mixins: [Applicationable, Colorable, Themeable],\n\n  props: {\n    absolute: Boolean,\n    fixed: Boolean\n  },\n\n  computed: {\n    paddingLeft () {\n      return this.fixed || !this.app\n        ? 0\n        : this.$vuetify.application.left\n    },\n    paddingRight () {\n      return this.fixed || !this.app\n        ? 0\n        : this.$vuetify.application.right\n    }\n  },\n\n  destroyed () {\n    if (this.app) this.$vuetify.application.bottom = 0\n  },\n\n  methods: {\n    updateApplication () {\n      if (!this.app) return\n\n      this.$vuetify.application.bottom = this.fixed\n        ? this.$el && this.$el.clientHeight\n        : 0\n    }\n  },\n\n  mounted () {\n    this.updateApplication()\n  },\n\n  render (h) {\n    this.updateApplication()\n\n    const data = {\n      staticClass: 'footer',\n      'class': this.addBackgroundColorClassChecks({\n        'footer--absolute': this.absolute,\n        'footer--fixed': this.fixed,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      }),\n      style: {\n        paddingLeft: `${this.paddingLeft}px`,\n        paddingRight: `${this.paddingRight}px`\n      }\n    }\n\n    return h('footer', data, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VFooter/VFooter.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_footer.styl\n// module id = 146\n// module chunks = 0"",""import VForm from './VForm'\n\nVForm.install = function install (Vue) {\n  Vue.component(VForm.name, VForm)\n}\n\nexport default VForm\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VForm/index.js"",""export default {\n  name: 'v-form',\n\n  inheritAttrs: false,\n\n  data () {\n    return {\n      inputs: [],\n      errorBag: {}\n    }\n  },\n\n  props: {\n    value: Boolean,\n    lazyValidation: Boolean\n  },\n\n  watch: {\n    errorBag: {\n      handler () {\n        const errors = Object.values(this.errorBag).includes(true)\n\n        this.$emit('input', !errors)\n\n        return !errors\n      },\n      deep: true\n    }\n  },\n\n  methods: {\n    getInputs () {\n      const results = []\n\n      const search = (children, depth = 0) => {\n        for (const child of children) {\n          if (child.errorBucket !== undefined) {\n            results.push(child)\n          } else {\n            search(child.$children, depth + 1)\n          }\n        }\n        if (depth === 0) return results\n      }\n\n      return search(this.$children)\n    },\n    watchInputs (inputs = this.getInputs()) {\n      for (const child of inputs) {\n        if (this.inputs.includes(child)) {\n          continue // We already know about this input\n        }\n\n        this.inputs.push(child)\n        this.watchChild(child)\n      }\n    },\n    watchChild (child) {\n      const watcher = (child) => {\n        child.$watch('valid', (val) => {\n          this.$set(this.errorBag, child._uid, !val)\n        }, { immediate: true })\n      }\n\n      if (!this.lazyValidation) return watcher(child)\n\n      // Only start watching inputs if we need to\n      child.$watch('shouldValidate', (val) => {\n        if (!val) return\n\n        // Only watch if we're not already doing it\n        if (this.errorBag.hasOwnProperty(child._uid)) return\n\n        watcher(child)\n      })\n    },\n    validate () {\n      const errors = this.inputs.filter(input => !input.validate(true)).length\n      return !errors\n    },\n    reset () {\n      this.inputs.forEach((input) => input.reset())\n      if (this.lazyValidation) {\n        Object.keys(this.errorBag).forEach(key => this.$delete(this.errorBag, key))\n      }\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(() => this.watchInputs())\n  },\n\n  updated () {\n    const inputs = this.getInputs()\n\n    if (inputs.length < this.inputs.length) {\n      // Something was removed, we don't want it in the errorBag any more\n      const removed = this.inputs.filter(i => !inputs.includes(i))\n\n      for (const input of removed) {\n        this.$delete(this.errorBag, input._uid)\n        this.$delete(this.inputs, this.inputs.indexOf(input))\n      }\n    }\n\n    this.watchInputs(inputs)\n  },\n\n  render (h) {\n    return h('form', {\n      attrs: this.$attrs,\n      on: {\n        submit: e => this.$emit('submit', e)\n      }\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VForm/VForm.js"",""import {\n  createSimpleFunctional\n} from '../../util/helpers'\nimport VContent from './VContent'\nimport VContainer from './VContainer'\nimport VFlex from './VFlex'\nimport VLayout from './VLayout'\n\nexport const VSpacer = createSimpleFunctional('spacer')\nexport {\n  VContainer,\n  VContent,\n  VFlex,\n  VLayout\n}\n\nconst VGrid = {}\n\nVGrid.install = function install (Vue) {\n  Vue.component(VContent.name, VContent)\n  Vue.component(VContainer.name, VContainer)\n  Vue.component(VFlex.name, VFlex)\n  Vue.component(VLayout.name, VLayout)\n  Vue.component(VSpacer.name, VSpacer)\n}\n\nexport default VGrid\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VGrid/index.js"",""require('../../stylus/components/_content.styl')\n\nexport default {\n  name: 'v-content',\n\n  computed: {\n    styles () {\n      const {\n        bar, top, right, bottom, left\n      } = this.$vuetify.application\n\n      return {\n        paddingTop: `${top + bar}px`,\n        paddingRight: `${right}px`,\n        paddingBottom: `${bottom}px`,\n        paddingLeft: `${left}px`\n      }\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'content',\n      style: this.styles\n    }\n\n    return h('div', data, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VGrid/VContent.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_content.styl\n// module id = 151\n// module chunks = 0"",""require('../../stylus/components/_grid.styl')\n\nimport Grid from './grid'\n\nexport default Grid('container')\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VGrid/VContainer.js"",""require('../../stylus/components/_grid.styl')\n\nimport Grid from './grid'\n\nexport default Grid('flex')\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VGrid/VFlex.js"",""require('../../stylus/components/_grid.styl')\n\nimport Grid from './grid'\n\nexport default Grid('layout')\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VGrid/VLayout.js"",""import VNavigationDrawer from './VNavigationDrawer'\n\nVNavigationDrawer.install = function install (Vue) {\n  Vue.component(VNavigationDrawer.name, VNavigationDrawer)\n}\n\nexport default VNavigationDrawer\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VNavigationDrawer/index.js"",""require('../../stylus/components/_navigation-drawer.styl')\n\nimport Applicationable from '../../mixins/applicationable'\nimport Overlayable from '../../mixins/overlayable'\nimport Themeable from '../../mixins/themeable'\n\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\n\nexport default {\n  name: 'v-navigation-drawer',\n\n  mixins: [Applicationable, Overlayable, Themeable],\n\n  directives: {\n    ClickOutside,\n    Resize,\n    Touch\n  },\n\n  data () {\n    return {\n      isActive: this.value,\n      isBooted: false,\n      isMobile: false,\n      touchArea: {\n        left: 0,\n        right: 0\n      }\n    }\n  },\n\n  props: {\n    absolute: Boolean,\n    clipped: Boolean,\n    disableRouteWatcher: Boolean,\n    enableResizeWatcher: Boolean,\n    height: String,\n    floating: Boolean,\n    miniVariant: Boolean,\n    miniVariantWidth: {\n      type: [Number, String],\n      default: 80\n    },\n    mobileBreakPoint: {\n      type: Number,\n      default: 1264\n    },\n    permanent: Boolean,\n    persistent: Boolean,\n    right: Boolean,\n    temporary: Boolean,\n    touchless: Boolean,\n    width: {\n      type: [Number, String],\n      default: 300\n    },\n    value: { required: false }\n  },\n\n  computed: {\n    calculatedHeight () {\n      return this.height || '100%'\n    },\n    calculatedWidth () {\n      return this.miniVariant\n        ? this.miniVariantWidth\n        : this.width\n    },\n    classes () {\n      return {\n        'navigation-drawer': true,\n        'navigation-drawer--absolute': this.absolute,\n        'navigation-drawer--clipped': this.clipped,\n        'navigation-drawer--close': !this.isBooted || !this.isActive,\n        'navigation-drawer--floating': this.floating,\n        'navigation-drawer--is-booted': this.isBooted,\n        'navigation-drawer--is-mobile': this.isMobile,\n        'navigation-drawer--mini-variant': this.miniVariant,\n        'navigation-drawer--open': this.isActive && this.isBooted,\n        'navigation-drawer--permanent': this.permanent,\n        'navigation-drawer--persistent': this.persistent,\n        'navigation-drawer--right': this.right,\n        'navigation-drawer--temporary': this.temporary,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      }\n    },\n    marginTop () {\n      if (!this.app) return 0\n      let marginTop = this.$vuetify.application.bar\n\n      marginTop += this.clipped\n        ? this.$vuetify.application.top\n        : 0\n\n      return marginTop\n    },\n    maxHeight () {\n      if (!this.app) return '100%'\n\n      return this.clipped\n        ? this.$vuetify.application.top + this.$vuetify.application.bottom\n        : this.$vuetify.application.bottom\n    },\n    showOverlay () {\n      return !this.permanent &&\n        this.isActive &&\n        (this.temporary || this.isMobile)\n    },\n    styles () {\n      return {\n        height: this.calculatedHeight,\n        marginTop: `${this.marginTop}px`,\n        maxHeight: `calc(100% - ${this.maxHeight}px)`,\n        width: `${this.calculatedWidth}px`\n      }\n    }\n  },\n\n  watch: {\n    $route () {\n      if (!this.disableRouteWatcher) {\n        this.isActive = !this.closeConditional()\n      }\n    },\n    isActive (val) {\n      this.$emit('input', val)\n      this.showOverlay &&\n        val &&\n        this.genOverlay() ||\n        this.removeOverlay()\n      this.$el.scrollTop = 0\n    },\n    isMobile (val) {\n      !val && this.removeOverlay()\n    },\n    permanent (val) {\n      this.$emit('input', val)\n    },\n    value (val) {\n      if (this.permanent) return\n      if (val !== this.isActive) this.isActive = val\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(this.init)\n  },\n\n  methods: {\n    init () {\n      if (this.value != null) this.isActive = this.value\n      else if (this.permanent) this.isActive = true\n      else if (this.isMobile) this.isActive = false\n      else if (!this.value &&\n        (this.persistent || this.temporary)\n      ) this.isActive = false\n      else this.isActive = true\n\n      setTimeout(() => (this.isBooted = true), 0)\n    },\n    calculateTouchArea () {\n      if (!this.$el.parentNode) return\n      const parentRect = this.$el.parentNode.getBoundingClientRect()\n\n      this.touchArea = {\n        left: parentRect.left + 50,\n        right: parentRect.right - 50\n      }\n    },\n    checkIfMobile () {\n      this.isMobile = window.innerWidth < parseInt(this.mobileBreakPoint)\n    },\n    closeConditional () {\n      return !this.permanent && (this.temporary || this.isMobile)\n    },\n    genDirectives () {\n      const directives = [\n        {\n          name: 'click-outside',\n          value: this.closeConditional\n        },\n        {\n          name: 'resize',\n          value: this.onResize\n        }\n      ]\n\n      !this.touchless && directives.push({\n        name: 'touch',\n        value: {\n          parent: true,\n          left: this.swipeLeft,\n          right: this.swipeRight\n        }\n      })\n\n      return directives\n    },\n    onResize () {\n      if (!this.enableResizeWatcher ||\n        this.permanent ||\n        this.temporary\n      ) return\n\n      this.checkIfMobile()\n\n      this.isActive = !this.isMobile\n    },\n    swipeRight (e) {\n      if (this.isActive && !this.right) return\n      this.calculateTouchArea()\n\n      if (Math.abs(e.touchendX - e.touchstartX) < 100) return\n      else if (!this.right &&\n        e.touchstartX <= this.touchArea.left\n      ) this.isActive = true\n      else if (this.right && this.isActive) this.isActive = false\n    },\n    swipeLeft (e) {\n      if (this.isActive && this.right) return\n      this.calculateTouchArea()\n\n      if (Math.abs(e.touchendX - e.touchstartX) < 100) return\n      else if (this.right &&\n        e.touchstartX >= this.touchArea.right\n      ) this.isActive = true\n      else if (!this.right && this.isActive) this.isActive = false\n    },\n    updateApplication () {\n      if (!this.app) return\n\n      const width = !this.isActive ||\n        !this.isBooted ||\n        !this.permanent &&\n        this.$vuetify.breakpoint.width < this.mobileBreakPoint\n        ? 0\n        : this.calculatedWidth\n\n      if (this.right) {\n        this.$vuetify.application.right = width\n      } else {\n        this.$vuetify.application.left = width\n      }\n    }\n  },\n\n  render (h) {\n    this.updateApplication()\n\n    const data = {\n      'class': this.classes,\n      style: this.styles,\n      directives: this.genDirectives(),\n      on: {\n        click: () => this.$emit('update:miniVariant', false)\n      }\n    }\n\n    return h('aside', data, [\n      this.$slots.default,\n      h('div', { 'class': 'navigation-drawer__border' })\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VNavigationDrawer/VNavigationDrawer.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_navigation-drawer.styl\n// module id = 157\n// module chunks = 0"",""import VPagination from './VPagination'\n\nVPagination.install = function install (Vue) {\n  Vue.component(VPagination.name, VPagination)\n}\n\nexport default VPagination\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VPagination/index.js"",""require('../../stylus/components/_pagination.styl')\n\nimport VIcon from '../VIcon'\n\nimport Resize from '../../directives/resize'\n\nexport default {\n  name: 'v-pagination',\n\n  directives: { Resize },\n\n  props: {\n    circle: Boolean,\n    disabled: Boolean,\n    length: {\n      type: Number,\n      default: 0,\n      validator: val => val % 1 === 0\n    },\n    totalVisible: [Number, String],\n    nextIcon: {\n      type: String,\n      default: 'chevron_right'\n    },\n    prevIcon: {\n      type: String,\n      default: 'chevron_left'\n    },\n    value: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  data () {\n    return {\n      maxButtons: 0\n    }\n  },\n\n  watch: {\n    value () {\n      this.init()\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'pagination': true,\n        'pagination--circle': this.circle,\n        'pagination--disabled': this.disabled\n      }\n    },\n\n    items () {\n      const maxLength = this.totalVisible || this.maxButtons\n      if (this.length <= maxLength) {\n        return this.range(1, this.length)\n      }\n\n      const even = maxLength % 2 === 0 ? 1 : 0\n      const left = Math.floor(maxLength / 2)\n      const right = this.length - left + 1 + even\n\n      if (this.value >= left && this.value <= right) {\n        const start = this.value - left + 2\n        const end = this.value + left - 2 - even\n\n        return [1, '...', ...this.range(start, end), '...', this.length]\n      } else {\n        return [\n          ...this.range(1, left),\n          '...',\n          ...this.range(this.length - left + 1 + even, this.length)\n        ]\n      }\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load.call(this, this.init)\n  },\n\n  methods: {\n    onResize () {\n      const width = this.$el && this.$el.parentNode\n        ? this.$el.parentNode.clientWidth\n        : window.innerWidth\n\n      this.maxButtons = Math.floor((width - 96) / 42)\n    },\n    init () {\n      this.selected = null\n\n      // Change this\n      setTimeout(() => (this.selected = this.value), 100)\n    },\n    next (e) {\n      e.preventDefault()\n      this.$emit('input', this.value + 1)\n      this.$emit('next')\n    },\n    previous (e) {\n      e.preventDefault()\n      this.$emit('input', this.value - 1)\n      this.$emit('previous')\n    },\n    range (from, to) {\n      const range = []\n\n      from = from > 0 ? from : 1\n\n      for (let i = from; i <= to; i++) {\n        range.push(i)\n      }\n\n      return range\n    },\n    genIcon (h, icon, disabled, fn) {\n      return h('li', [\n        h('a', {\n          class: {\n            'pagination__navigation': true,\n            'pagination__navigation--disabled': disabled\n          },\n          attrs: { href: '#!' },\n          on: { click: fn }\n        }, [h(VIcon, [icon])])\n      ])\n    },\n    genItem (h, i) {\n      return h('a', {\n        class: {\n          'pagination__item': true,\n          'pagination__item--active': i === this.value\n        },\n        attrs: { href: '#!' },\n        on: {\n          click: (e) => {\n            e.preventDefault()\n            this.$emit('input', i)\n          }\n        }\n      }, [i])\n    },\n    genItems (h) {\n      return this.items.map((i) => {\n        return h('li', [\n          isNaN(i) && h('span', { class: 'pagination__more' }, [i]) || this.genItem(h, i)\n        ])\n      })\n    }\n  },\n\n  render (h) {\n    const children = [\n      this.genIcon(h, this.prevIcon, this.value === 1, this.previous),\n      this.genItems(h),\n      this.genIcon(h, this.nextIcon, this.value === this.length, this.next)\n    ]\n\n    return h('ul', {\n      directives: [{ name: 'resize', value: this.onResize }],\n      class: this.classes\n    }, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VPagination/VPagination.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_pagination.styl\n// module id = 160\n// module chunks = 0"",""import VParallax from './VParallax'\n\nVParallax.install = function install (Vue) {\n  Vue.component(VParallax.name, VParallax)\n}\n\nexport default VParallax\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VParallax/index.js"",""require('../../stylus/components/_parallax.styl')\n\nimport Translatable from '../../mixins/translatable'\n\nexport default {\n  name: 'v-parallax',\n\n  mixins: [Translatable],\n\n  data () {\n    return {\n      isBooted: false\n    }\n  },\n\n  props: {\n    alt: String,\n    height: {\n      type: [String, Number],\n      default: 500\n    },\n    jumbotron: Boolean,\n    src: String\n  },\n\n  computed: {\n    styles () {\n      return {\n        display: 'block',\n        opacity: this.isBooted ? 1 : 0,\n        transform: `translate3d(-50%, ${this.jumbotron ? 0 : this.parallax + 'px'}, 0)`\n      }\n    }\n  },\n\n  watch: {\n    parallax () {\n      this.isBooted = true\n    }\n  },\n\n  methods: {\n    init () {\n      if (!this.$refs.img) return\n\n      if (this.$refs.img.complete) {\n        this.translate()\n        this.listeners()\n      } else {\n        this.$refs.img.addEventListener('load', () => {\n          this.translate()\n          this.listeners()\n        }, false)\n      }\n    },\n    objHeight () {\n      return this.$refs.img.naturalHeight\n    },\n    elOffsetTop () {\n      return this.$el.offsetTop\n    }\n  },\n\n  render (h) {\n    const imgData = {\n      staticClass: 'parallax__image',\n      'class': {\n        'parallax__image--jumbotron': this.jumbotron\n      },\n      style: this.styles,\n      attrs: {\n        src: this.src\n      },\n      ref: 'img'\n    }\n\n    if (this.alt) imgData.attrs.alt = this.alt\n\n    const container = h('div', {\n      staticClass: 'parallax__image-container'\n    }, [\n      h('img', imgData)\n    ])\n\n    const content = h('div', {\n      staticClass: 'parallax__content'\n    }, this.$slots.default)\n\n    return h('div', {\n      staticClass: 'parallax',\n      style: {\n        height: this.jumbotron\n          ? this.normalizedHeight\n          : `${this.normalizedHeight}px`\n      },\n      on: this.$listeners\n    }, [container, content])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VParallax/VParallax.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_parallax.styl\n// module id = 163\n// module chunks = 0"",""export default {\n  data () {\n    return {\n      parallax: null,\n      parallaxDist: null,\n      percentScrolled: null,\n      scrollTop: null,\n      windowHeight: null,\n      windowBottom: null\n    }\n  },\n\n  computed: {\n    normalizedHeight () {\n      if (this.jumbotron) {\n        return isNaN(this.height) ? this.height : `${this.height}px`\n      }\n\n      return Number(this.height.toString().replace(/(^[0-9]*$)/, '$1'))\n    },\n\n    imgHeight () {\n      return this.objHeight()\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(this.init)\n  },\n\n  beforeDestroy () {\n    window.removeEventListener('scroll', this.translate, false)\n    window.removeEventListener('resize', this.translate, false)\n  },\n\n  methods: {\n    listeners () {\n      window.addEventListener('scroll', this.translate, false)\n      window.addEventListener('resize', this.translate, false)\n    },\n\n    translate () {\n      this.calcDimensions()\n\n      this.percentScrolled = (\n        (this.windowBottom - this.elOffsetTop) /\n        (this.normalizedHeight + this.windowHeight)\n      )\n\n      this.parallax = Math.round(this.parallaxDist * this.percentScrolled)\n\n      if (this.translated) {\n        this.translated()\n      }\n    },\n\n    calcDimensions () {\n      const offset = this.$el.getBoundingClientRect()\n\n      this.scrollTop = window.pageYOffset\n      this.parallaxDist = this.imgHeight - this.normalizedHeight\n      this.elOffsetTop = offset.top + this.scrollTop\n      this.windowHeight = window.innerHeight\n      this.windowBottom = this.scrollTop + this.windowHeight\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/translatable.js"",""import VProgressCircular from './VProgressCircular'\n\nVProgressCircular.install = function install (Vue) {\n  Vue.component(VProgressCircular.name, VProgressCircular)\n}\n\nexport default VProgressCircular\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VProgressCircular/index.js"",""require('../../stylus/components/_progress-circular.styl')\n\nimport Colorable from '../../mixins/colorable'\n\nexport default {\n  name: 'v-progress-circular',\n\n  mixins: [Colorable],\n\n  props: {\n    button: Boolean,\n\n    fill: {\n      type: String,\n      default () { return this.indeterminate ? 'none' : 'transparent' }\n    },\n\n    indeterminate: Boolean,\n\n    rotate: {\n      type: Number,\n      default: 0\n    },\n\n    size: {\n      type: [Number, String],\n      default: 32\n    },\n\n    width: {\n      type: Number,\n      default: 4\n    },\n\n    value: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  computed: {\n    calculatedSize () {\n      let size = Number(this.size)\n\n      if (this.button) {\n        size += 8\n      }\n\n      return size\n    },\n\n    circumference () {\n      return 2 * Math.PI * this.radius\n    },\n\n    classes () {\n      return this.addTextColorClassChecks({\n        'progress-circular': true,\n        'progress-circular--indeterminate': this.indeterminate,\n        'progress-circular--button': this.button\n      })\n    },\n\n    cxy () {\n      return this.indeterminate && !this.button ? 50 : this.calculatedSize / 2\n    },\n\n    normalizedValue () {\n      if (this.value < 0) {\n        return 0\n      }\n\n      if (this.value > 100) {\n        return 100\n      }\n\n      return this.value\n    },\n\n    radius () {\n      return this.indeterminate &&\n        !this.button\n        ? 20\n        : (this.calculatedSize - this.width) / 2\n    },\n\n    strokeDashArray () {\n      return Math.round(this.circumference * 1000) / 1000\n    },\n\n    strokeDashOffset () {\n      return ((100 - this.normalizedValue) / 100) * this.circumference + 'px'\n    },\n\n    styles () {\n      return {\n        height: `${this.calculatedSize}px`,\n        width: `${this.calculatedSize}px`\n      }\n    },\n\n    svgSize () {\n      return this.indeterminate ? false : this.calculatedSize\n    },\n\n    svgStyles () {\n      return {\n        transform: `rotate(${this.rotate}deg)`\n      }\n    },\n\n    viewBox () {\n      return this.indeterminate ? '25 25 50 50' : false\n    }\n  },\n\n  methods: {\n    genCircle (h, name, offset) {\n      return h('circle', {\n        class: `progress-circular__${name}`,\n        attrs: {\n          fill: 'transparent',\n          cx: this.cxy,\n          cy: this.cxy,\n          r: this.radius,\n          'stroke-width': this.width,\n          'stroke-dasharray': this.strokeDashArray,\n          'stroke-dashoffset': offset\n        }\n      })\n    },\n    genSvg (h) {\n      const children = [\n        !this.indeterminate && this.genCircle(h, 'underlay', 0),\n        this.genCircle(h, 'overlay', this.strokeDashOffset)\n      ]\n\n      return h('svg', {\n        style: this.svgStyles,\n        attrs: {\n          xmlns: 'http://www.w3.org/2000/svg',\n          height: this.svgSize,\n          width: this.svgSize,\n          viewBox: this.viewBox\n        }\n      }, children)\n    }\n  },\n\n  render (h) {\n    const info = h('div', { class: 'progress-circular__info' }, [this.$slots.default])\n    const svg = this.genSvg(h)\n\n    return h('div', {\n      class: this.classes,\n      style: this.styles,\n      on: this.$listeners\n    }, [svg, info])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VProgressCircular/VProgressCircular.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_progress-circular.styl\n// module id = 167\n// module chunks = 0"",""import VRadioGroup from './VRadioGroup'\nimport VRadio from './VRadio'\n\nexport { VRadioGroup, VRadio }\n\nVRadioGroup.install = function install (Vue) {\n  Vue.component(VRadioGroup.name, VRadioGroup)\n  Vue.component(VRadio.name, VRadio)\n}\n\nexport default VRadioGroup\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VRadioGroup/index.js"",""require('../../stylus/components/_input-groups.styl')\nrequire('../../stylus/components/_selection-controls.styl')\nrequire('../../stylus/components/_radio-group.styl')\n\nimport Input from '../../mixins/input'\n\nexport default {\n  name: 'v-radio-group',\n\n  mixins: [Input],\n\n  model: {\n    prop: 'inputValue',\n    event: 'change'\n  },\n\n  provide () {\n    return {\n      isMandatory: () => this.mandatory,\n      name: () => this.name,\n      registerChild: this.registerChild,\n      unregisterChild: this.unregisterChild\n    }\n  },\n\n  props: {\n    column: {\n      type: Boolean,\n      default: true\n    },\n    inputValue: null,\n    mandatory: {\n      type: Boolean,\n      default: true\n    },\n    name: String,\n    row: Boolean\n  },\n\n  data () {\n    return {\n      internalTabIndex: -1\n    }\n  },\n\n  watch: {\n    inputValue (val) {\n      this.getRadios().forEach((radio) => {\n        radio.isActive = val === radio.value\n      })\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'radio-group': true,\n        'radio-group--column': this.column && !this.row,\n        'radio-group--row': this.row\n      }\n    }\n  },\n\n  methods: {\n    getRadios () {\n      return this.$children\n        .filter((child) => child.$el.classList.contains('radio'))\n    },\n    toggleRadio (value) {\n      if (this.disabled) {\n        return\n      }\n\n      this.shouldValidate = true\n      this.$emit('change', value)\n      this.$nextTick(() => this.validate())\n\n      this.getRadios()\n        .filter(r => r.value !== value)\n        .forEach(r => r.isActive = false)\n    },\n    radioBlur (e) {\n      if (!e.relatedTarget || !e.relatedTarget.classList.contains('radio')) {\n        this.shouldValidate = true\n        this.$emit('blur', this.inputValue)\n      }\n    },\n    registerChild (radio) {\n      radio.isActive = this.inputValue === radio.value\n      radio.$el.tabIndex = radio.$el.tabIndex > 0 ? radio.$el.tabIndex : 0\n      radio.$on('change', this.toggleRadio)\n      radio.$on('blur', this.radioBlur)\n      radio.$on('focus', this.radioFocus)\n    },\n    unregisterChild (radio) {\n      radio.$off('change', this.toggleRadio)\n      radio.$off('blur', this.radioBlur)\n      radio.$off('focus', this.radioFocus)\n    }\n  },\n\n  mounted () {\n    this.getRadios().forEach(radio => this.registerChild(radio))\n  },\n\n  beforeDestroy () {\n    this.getRadios().forEach(radio => this.unregisterChild(radio))\n  },\n\n  render (h) {\n    const data = {\n      attrs: {\n        role: 'radiogroup'\n      }\n    }\n    return this.genInputGroup(this.$slots.default, data)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VRadioGroup/VRadioGroup.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_radio-group.styl\n// module id = 170\n// module chunks = 0"",""import { VFadeTransition } from '../transitions'\nimport VIcon from '../VIcon'\n\nimport Colorable from '../../mixins/colorable'\nimport Rippleable from '../../mixins/rippleable'\nimport TabFocusable from '../../mixins/tab-focusable'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-radio',\n\n  inheritAttrs: false,\n\n  inject: ['isMandatory', 'name', 'registerChild', 'unregisterChild'],\n\n  components: {\n    VFadeTransition,\n    VIcon\n  },\n\n  mixins: [Colorable, Rippleable, TabFocusable, Themeable],\n\n  props: {\n    disabled: Boolean,\n    value: null,\n    label: String\n  },\n\n  data () {\n    return {\n      isActive: false\n    }\n  },\n\n  computed: {\n    classes () {\n      return this.addTextColorClassChecks({\n        'input-group': true,\n        'input-group--active': this.isActive,\n        'input-group--disabled': this.disabled,\n        'input-group--selection-controls': true,\n        'input-group--tab-focused': this.tabFocused,\n        'radio': true,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      })\n    },\n\n    icon () {\n      return this.isActive ? 'radio_button_checked' : 'radio_button_unchecked'\n    }\n  },\n\n  methods: {\n    genInput (radio) {\n      const value = ['string', 'number'].includes(typeof this.value)\n        ? this.value\n        : JSON.stringify(this.value)\n      const input = this.$createElement('input', {\n        ref: 'input',\n        style: {\n          display: 'none'\n        },\n        attrs: Object.assign({\n          name: this.name && this.name(),\n          id: this.id,\n          type: 'radio',\n          value\n        }, this.$attrs)\n      }, [value])\n\n      radio.push(input)\n\n      return this.$createElement('div', {\n        class: 'input-group__input'\n      }, radio)\n    },\n    genWrapper (radio) {\n      const children = []\n\n      children.push(this.genLabel())\n      children.push(this.genInput(radio))\n\n      return this.$createElement('div', {\n        class: this.classes,\n        attrs: {\n          role: 'radio',\n          'aria-checked': this.isActive && 'true' || 'false',\n          'aria-label': this.label\n        },\n        on: {\n          keydown: e => {\n            if ([13, 32].includes(e.keyCode)) {\n              e.preventDefault()\n              this.toggle()\n            }\n          },\n          blur: e => {\n            this.$emit('blur', e)\n            this.tabFocused = false\n          }\n        }\n      }, children)\n    },\n    genLabel () {\n      return this.$createElement('label', {\n        on: {\n          click: this.toggle\n        }\n      }, this.$slots.label || this.label)\n    },\n    toggle () {\n      const mandatory = this.isMandatory &&\n        this.isMandatory() || false\n\n      if (!this.disabled && (!this.isActive || !mandatory)) {\n        this.$refs.input.checked = true\n        this.isActive = true\n        this.$emit('change', this.value)\n      }\n    }\n  },\n\n  created () {\n    // Semantic check to help people identify the reason for the inject error above it.\n    if (!this.$parent || !this.$parent.$vnode || !this.$parent.$vnode.tag ||\n      !this.$parent.$vnode.tag.endsWith('v-radio-group')) {\n      console.warn('[Vuetify] Warn: The v-radio component must have an immediate parent of v-radio-group.')\n    }\n  },\n\n  mounted () {\n    this.registerChild(this)\n  },\n\n  beforeDestroy () {\n    this.unregisterChild(this)\n  },\n\n  render (h) {\n    const transition = h('v-fade-transition', {}, [\n      h('v-icon', {\n        staticClass: 'icon--selection-control',\n        'class': {\n          'icon--radio': this.isActive\n        },\n        key: this.icon\n      }, this.icon)\n    ])\n\n    return this.genWrapper([transition, this.genRipple()])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VRadioGroup/VRadio.js"",""export default {\n  data () {\n    return {\n      tabFocused: false\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/tab-focusable.js"",""import VSlider from './VSlider'\n\nVSlider.install = function install (Vue) {\n  Vue.component(VSlider.name, VSlider)\n}\n\nexport default VSlider\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSlider/index.js"",""require('../../stylus/components/_sliders.styl')\n\nimport { addOnceEventListener, createRange } from '../../util/helpers'\n\nimport Input from '../../mixins/input'\n\nimport ClickOutside from '../../directives/click-outside'\n\nexport default {\n  name: 'v-slider',\n\n  mixins: [Input],\n\n  directives: { ClickOutside },\n\n  data () {\n    return {\n      app: {},\n      isActive: false,\n      keyPressed: 0\n    }\n  },\n\n  props: {\n    color: {\n      type: String,\n      default: null\n    },\n    min: {\n      type: [Number, String],\n      default: 0\n    },\n    max: {\n      type: [Number, String],\n      default: 100\n    },\n    step: {\n      type: [Number, String],\n      default: null\n    },\n    thumbColor: {\n      type: String,\n      default: null\n    },\n    thumbLabel: Boolean,\n    value: [Number, String],\n    snap: Boolean,\n    trackColor: {\n      type: String,\n      default: null\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'input-group--slider': true,\n        'input-group--active': this.isActive,\n        'input-group--dirty': this.inputWidth > 0,\n        'input-group--disabled': this.disabled,\n        'input-group--ticks': !this.disabled && this.step\n      }\n    },\n    inputValue: {\n      get () {\n        return this.value\n      },\n      set (val) {\n        const { min, max, step, snap } = this\n        val = val < min && min || val > max && max || val\n\n        // Round value to ensure the\n        // entire slider range can\n        // be selected with step\n        const value = snap ? Math.round(val / step) * step : Math.round(val)\n        this.lazyValue = value\n\n        if (value !== this.value) {\n          this.$emit('input', value)\n        }\n      }\n    },\n    interval () {\n      return 100 / (this.max - this.min) * this.step\n    },\n    thumbContainerClasses () {\n      return {\n        'slider__thumb-container': true,\n        'slider__thumb-container--label': this.thumbLabel\n      }\n    },\n    thumbStyles () {\n      return {\n        transition: this.keyPressed >= 2 ? 'none' : '',\n        left: `${this.inputWidth}%`\n      }\n    },\n    tickContainerStyles () {\n      return {\n        transform: `translate3d(0, -50%, 0)`\n      }\n    },\n    trackStyles () {\n      const scaleX = this.calculateScale(1 - (this.inputWidth / 100))\n      const offsetX = this.thumbLabel ? 0 : !this.isActive ? 8 : 12\n      const translateX = `${offsetX}px`\n      return {\n        transition: this.keyPressed >= 2 ? 'none' : '',\n        transform: `scaleX(${scaleX}) translateX(${translateX})`\n      }\n    },\n    trackFillStyles () {\n      const inputWidth = this.inputWidth\n      const scaleX = this.calculateScale(inputWidth / 100)\n      const translateX = inputWidth > 99 && !this.thumbLabel ? `${-8}px` : 0\n      return {\n        transition: this.keyPressed >= 2 ? 'none' : '',\n        transform: `scaleX(${scaleX}) translateX(${translateX})`\n      }\n    },\n    numTicks () {\n      return parseInt((this.max - this.min) / this.step)\n    },\n    inputWidth () {\n      let val = this.inputValue\n      if (this.snap) {\n        val = Math.round(val / this.step) * this.step\n      }\n\n      val = (val - this.min) / (this.max - this.min) * 100\n\n      return val < 0.15 ? 0 : val\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      this.isFocused = val\n    },\n    min (val) {\n      val > this.inputValue && this.$emit('input', val)\n    },\n    max (val) {\n      val < this.inputValue && this.$emit('input', val)\n    },\n    value (val) {\n      this.inputValue = val\n    }\n  },\n\n  mounted () {\n    this.inputValue = this.value\n\n    // Without a v-app, iOS does not work with body selectors\n    this.app = document.querySelector('[data-app]') ||\n      console.warn('The v-slider component requires the presence of v-app or a non-body wrapping element with the [data-app] attribute.')\n  },\n\n  methods: {\n    calculateScale (scale) {\n      return this.disabled ? scale - 0.015 : scale\n    },\n    onMouseDown (e) {\n      this.keyPressed = 2\n      const options = { passive: true }\n      this.isActive = true\n\n      if ('touches' in e) {\n        this.app.addEventListener('touchmove', this.onMouseMove, options)\n        addOnceEventListener(this.app, 'touchend', this.onMouseUp)\n      } else {\n        this.app.addEventListener('mousemove', this.onMouseMove, options)\n        addOnceEventListener(this.app, 'mouseup', this.onMouseUp)\n      }\n    },\n    onMouseUp () {\n      this.keyPressed = 0\n      const options = { passive: true }\n      this.isActive = false\n      this.app.removeEventListener('touchmove', this.onMouseMove, options)\n      this.app.removeEventListener('mousemove', this.onMouseMove, options)\n    },\n    onMouseMove (e) {\n      const {\n        left: offsetLeft,\n        width: trackWidth\n      } = this.$refs.track.getBoundingClientRect()\n      const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX\n      const left = (\n        ((clientX - offsetLeft) / trackWidth) * 100\n      )\n\n      if (left >= 0 && left <= 100) {\n        this.inputValue = parseInt(this.min, 10) + ((left / 100) * (this.max - this.min))\n      }\n    },\n    onKeyDown (e) {\n      if (e.keyCode === 37 || e.keyCode === 39) {\n        this.keyPressed += 1\n\n        const direction = e.keyCode === 37 && -1 || e.keyCode === 39 && 1 || 0\n        const multiplier = e.shiftKey && 3 || e.ctrlKey && 2 || 1\n        const amount = this.snap && this.step || 1\n\n        this.inputValue = this.inputValue + (direction * amount * multiplier)\n      }\n    },\n    onKeyUp (e) {\n      this.keyPressed = 0\n    },\n    sliderMove (e) {\n      if (!this.isActive) {\n        this.onMouseMove(e)\n      }\n    },\n    genThumbLabel (h) {\n      return h('v-scale-transition', {\n        props: { origin: 'bottom center' }\n      }, [\n        h('div', {\n          'class': 'slider__thumb--label__container',\n          directives: [\n            {\n              name: 'show',\n              value: this.isActive\n            }\n          ]\n        }, [\n          h('div', { 'class': ['slider__thumb--label', this.thumbColor || this.color] }, [\n            h('span', {}, parseInt(this.inputValue))\n          ])\n        ])\n      ])\n    },\n    genThumbContainer (h) {\n      const children = []\n      children.push(h('div', { 'class': ['slider__thumb', this.thumbColor || this.color] }))\n\n      this.thumbLabel && children.push(this.genThumbLabel(h))\n\n      return h('div', {\n        'class': this.thumbContainerClasses,\n        style: this.thumbStyles,\n        on: {\n          touchstart: this.onMouseDown,\n          mousedown: this.onMouseDown\n        },\n        ref: 'thumb'\n      }, children)\n    },\n    genSteps (h) {\n      const ticks = createRange(this.numTicks + 1).map((i) => {\n        const span = h('span', {\n          class: 'slider__tick',\n          style: {\n            left: `${i * (100 / this.numTicks)}%`\n          }\n        })\n\n        return span\n      })\n\n      return h('div', {\n        'class': 'slider__ticks-container',\n        style: this.tickContainerStyles\n      }, ticks)\n    },\n    genTrackContainer (h) {\n      const children = [\n        h('div', {\n          'class': ['slider__track', this.trackColor],\n          style: this.trackStyles\n        }),\n        h('div', {\n          'class': ['slider__track-fill', this.color],\n          style: this.trackFillStyles\n        })\n      ]\n\n      return h('div', {\n        'class': 'slider__track__container',\n        ref: 'track'\n      }, children)\n    }\n  },\n\n  render (h) {\n    const children = []\n\n    children.push(this.genTrackContainer(h))\n    this.step && children.push(this.genSteps(h))\n    children.push(this.genThumbContainer(h))\n\n    const slider = h('div', { 'class': 'slider' }, children)\n\n    return this.genInputGroup([slider], {\n      attrs: {\n        role: 'slider',\n        tabindex: this.tabindex\n      },\n      on: Object.assign({}, {\n        mouseup: this.sliderMove,\n        keydown: this.onKeyDown,\n        keyup: this.onKeyUp\n      }, this.$listeners),\n      directives: [{\n        name: 'click-outside'\n      }]\n    })\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSlider/VSlider.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_sliders.styl\n// module id = 175\n// module chunks = 0"",""import VSnackbar from './VSnackbar'\n\nVSnackbar.install = function install (Vue) {\n  Vue.component(VSnackbar.name, VSnackbar)\n}\n\nexport default VSnackbar\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSnackbar/index.js"",""require('../../stylus/components/_snackbars.styl')\n\nimport {\n  VSlideYTransition,\n  VSlideYReverseTransition\n} from '../transitions'\n\nimport Colorable from '../../mixins/colorable'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'v-snackbar',\n\n  components: {\n    VSlideYTransition,\n    VSlideYReverseTransition\n  },\n\n  mixins: [Colorable, Toggleable],\n\n  data () {\n    return {\n      activeTimeout: {}\n    }\n  },\n\n  props: {\n    absolute: Boolean,\n    bottom: Boolean,\n    left: Boolean,\n    multiLine: Boolean,\n    right: Boolean,\n    top: Boolean,\n    // TODO: change this to closeDelay to match other API in delayable.js\n    timeout: {\n      type: Number,\n      default: 6000\n    },\n    vertical: Boolean\n  },\n\n  computed: {\n    classes () {\n      return this.addBackgroundColorClassChecks({\n        'snack--active': this.isActive,\n        'snack--absolute': this.absolute,\n        'snack--bottom': this.bottom || !this.top,\n        'snack--left': this.left,\n        'snack--multi-line': this.multiLine && !this.vertical,\n        'snack--right': this.right,\n        'snack--top': this.top,\n        'snack--vertical': this.vertical\n      })\n    },\n    computedTransition () {\n      return this.top ? 'v-slide-y-transition' : 'v-slide-y-reverse-transition'\n    }\n  },\n\n  watch: {\n    isActive () {\n      this.setTimeout()\n    }\n  },\n\n  methods: {\n    setTimeout () {\n      clearTimeout(this.activeTimeout)\n\n      if (this.isActive && this.timeout) {\n        this.activeTimeout = setTimeout(() => {\n          this.isActive = false\n        }, this.timeout)\n      }\n    }\n  },\n\n  mounted () {\n    this.setTimeout()\n  },\n\n  render (h) {\n    const children = []\n\n    if (this.isActive) {\n      children.push(h('div', {\n        staticClass: 'snack__content'\n      }, this.$slots.default))\n    }\n\n    return h('div', {\n      staticClass: 'snack',\n      'class': this.classes,\n      on: this.$listeners\n    }, [h(this.computedTransition, children)])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSnackbar/VSnackbar.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_snackbars.styl\n// module id = 178\n// module chunks = 0"",""import VSpeedDial from './VSpeedDial'\n\nVSpeedDial.install = function install (Vue) {\n  Vue.component(VSpeedDial.name, VSpeedDial)\n}\n\nexport default VSpeedDial\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSpeedDial/index.js"",""require('../../stylus/components/_speed-dial.styl')\n\nimport Toggleable from '../../mixins/toggleable'\nimport Positionable from '../../mixins/positionable'\n\nimport ClickOutside from '../../directives/click-outside'\n\nexport default {\n  name: 'v-speed-dial',\n\n  mixins: [Positionable, Toggleable],\n\n  directives: { ClickOutside },\n\n  props: {\n    direction: {\n      type: String,\n      default: 'top',\n      validator: (val) => {\n        return ['top', 'right', 'bottom', 'left'].includes(val)\n      }\n    },\n    hover: Boolean,\n    transition: {\n      type: String,\n      default: 'scale-transition'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'speed-dial': true,\n        'speed-dial--top': this.top,\n        'speed-dial--right': this.right,\n        'speed-dial--bottom': this.bottom,\n        'speed-dial--left': this.left,\n        'speed-dial--absolute': this.absolute,\n        'speed-dial--fixed': this.fixed,\n        [`speed-dial--direction-${this.direction}`]: true\n      }\n    }\n  },\n\n  render (h) {\n    let children = []\n    const data = {\n      'class': this.classes,\n      directives: [{\n        name: 'click-outside'\n      }],\n      on: {\n        click: () => (this.isActive = !this.isActive)\n      }\n    }\n\n    if (this.hover) {\n      data.on.mouseenter = () => (this.isActive = true)\n      data.on.mouseleave = () => (this.isActive = false)\n    }\n\n    if (this.isActive) {\n      children = (this.$slots.default || []).map((b, i) => {\n        b.key = i\n\n        return b\n      })\n    }\n\n    const list = h('transition-group', {\n      'class': 'speed-dial__list',\n      props: {\n        name: this.transition,\n        tag: 'div'\n      }\n    }, children)\n\n    return h('div', data, [this.$slots.activator, list])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSpeedDial/VSpeedDial.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_speed-dial.styl\n// module id = 181\n// module chunks = 0"",""import { createSimpleFunctional } from '../../util/helpers'\nimport VStepper from './VStepper'\nimport VStepperStep from './VStepperStep'\nimport VStepperContent from './VStepperContent'\n\nVStepper.install = function install (Vue) {\n  const VStepperHeader = createSimpleFunctional('stepper__header')\n  const VStepperItems = createSimpleFunctional('stepper__items')\n\n  Vue.component(VStepper.name, VStepper)\n  Vue.component(VStepperContent.name, VStepperContent)\n  Vue.component(VStepperStep.name, VStepperStep)\n  Vue.component(VStepperHeader.name, VStepperHeader)\n  Vue.component(VStepperItems.name, VStepperItems)\n}\n\nexport default VStepper\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VStepper/index.js"",""require('../../stylus/components/_steppers.styl')\n\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-stepper',\n\n  mixins: [Themeable],\n\n  provide () {\n    return {\n      stepClick: this.stepClick\n    }\n  },\n\n  data () {\n    return {\n      inputValue: null,\n      isBooted: false,\n      steps: [],\n      content: [],\n      isReverse: false\n    }\n  },\n\n  props: {\n    nonLinear: Boolean,\n    altLabels: Boolean,\n    vertical: Boolean,\n    value: [Number, String]\n  },\n\n  computed: {\n    classes () {\n      return {\n        'stepper': true,\n        'stepper--is-booted': this.isBooted,\n        'stepper--vertical': this.vertical,\n        'stepper--alt-labels': this.altLabels,\n        'stepper--non-linear': this.nonLinear,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      }\n    }\n  },\n\n  watch: {\n    inputValue (val, prev) {\n      this.isReverse = Number(val) < Number(prev)\n      this.steps.forEach(i => i.toggle(this.inputValue))\n      this.content.forEach(i => i.toggle(this.inputValue, this.isReverse))\n\n      this.$emit('input', this.inputValue)\n      prev && (this.isBooted = true)\n    },\n    value () {\n      this.getSteps()\n      this.$nextTick(() => (this.inputValue = this.value))\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(this.init)\n  },\n\n  methods: {\n    init () {\n      this.getSteps()\n\n      this.inputValue = this.value || this.steps[0].step || 1\n    },\n    getSteps () {\n      this.steps = []\n      this.content = []\n      this.$children.forEach(i => {\n        if (i.$options._componentTag === 'v-stepper-step') {\n          this.steps.push(i)\n        } else if (i.$options._componentTag === 'v-stepper-content') {\n          i.isVertical = this.vertical\n          this.content.push(i)\n        }\n      })\n    },\n    stepClick (step) {\n      this.getSteps()\n      this.$nextTick(() => (this.inputValue = step))\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      'class': this.classes\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VStepper/VStepper.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_steppers.styl\n// module id = 184\n// module chunks = 0"",""import VIcon from '../VIcon'\nimport Ripple from '../../directives/ripple'\n\nexport default {\n  name: 'v-stepper-step',\n\n  components: { VIcon },\n\n  directives: { Ripple },\n\n  inject: ['stepClick'],\n\n  data () {\n    return {\n      isActive: false,\n      isInactive: true\n    }\n  },\n\n  props: {\n    complete: Boolean,\n    completeIcon: {\n      type: String,\n      default: 'check'\n    },\n    editIcon: {\n      type: String,\n      default: 'edit'\n    },\n    errorIcon: {\n      type: String,\n      default: 'warning'\n    },\n    editable: Boolean,\n    rules: {\n      type: Array,\n      default: () => []\n    },\n    step: [Number, String]\n  },\n\n  computed: {\n    classes () {\n      return {\n        'stepper__step': true,\n        'stepper__step--active': this.isActive,\n        'stepper__step--editable': this.editable,\n        'stepper__step--inactive': this.isInactive,\n        'stepper__step--error': this.hasError,\n        'stepper__step--complete': this.complete\n      }\n    },\n    hasError () {\n      return this.rules.some(i => (i() !== true))\n    }\n  },\n\n  methods: {\n    click (e) {\n      e.stopPropagation()\n\n      if (this.editable) {\n        this.stepClick(this.step)\n      }\n    },\n    toggle (step) {\n      this.isActive = step.toString() === this.step.toString()\n      this.isInactive = Number(step) < Number(this.step)\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': this.classes,\n      directives: [{\n        name: 'ripple',\n        value: this.editable\n      }],\n      on: { click: this.click }\n    }\n    let stepContent\n\n    if (this.hasError) {\n      stepContent = [h('v-icon', {}, this.errorIcon)]\n    } else if (this.complete) {\n      if (this.editable) {\n        stepContent = [h('v-icon', {}, this.editIcon)]\n      } else {\n        stepContent = [h('v-icon', {}, this.completeIcon)]\n      }\n    } else {\n      stepContent = this.step\n    }\n\n    const step = h('span', { 'class': 'stepper__step__step' }, stepContent)\n    const label = h('div', { 'class': 'stepper__label' }, this.$slots.default)\n\n    return h('div', data, [step, label])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VStepper/VStepperStep.js"",""import {\n  VTabTransition,\n  VTabReverseTransition\n} from '../transitions'\n\nexport default {\n  name: 'v-stepper-content',\n\n  components: {\n    VTabTransition,\n    VTabReverseTransition\n  },\n\n  data () {\n    return {\n      height: 0,\n      isActive: false,\n      isReverse: false,\n      isVertical: false\n    }\n  },\n\n  props: {\n    step: {\n      type: [Number, String],\n      required: true\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'stepper__content': true\n      }\n    },\n    computedTransition () {\n      return this.isReverse\n        ? 'v-tab-reverse-transition'\n        : 'v-tab-transition'\n    },\n    styles () {\n      if (!this.isVertical) return {}\n\n      return {\n        height: !isNaN(this.height) ? `${this.height}px` : this.height\n      }\n    },\n    wrapperClasses () {\n      return {\n        'stepper__wrapper': true\n      }\n    }\n  },\n\n  watch: {\n    isActive () {\n      if (!this.isVertical) {\n        return\n      }\n\n      if (this.isActive) {\n        this.enter()\n      } else {\n        this.leave()\n      }\n    }\n  },\n\n  mounted () {\n    this.$refs.wrapper.addEventListener(\n      'transitionend',\n      this.onTransition,\n      false\n    )\n  },\n\n  beforeDestroy () {\n    this.$refs.wrapper.removeEventListener(\n      'transitionend',\n      this.onTransition,\n      false\n    )\n  },\n\n  methods: {\n    onTransition () {\n      if (!this.isActive) return\n\n      this.height = 'auto'\n    },\n    enter () {\n      let scrollHeight = 0\n\n      // Render bug with height\n      setTimeout(() => {\n        scrollHeight = this.$refs.wrapper.scrollHeight\n      }, 0)\n\n      this.height = 0\n\n      // Give the collapsing element time to collapse\n      setTimeout(() => (this.height = (scrollHeight || 'auto')), 450)\n    },\n    leave () {\n      this.height = this.$refs.wrapper.clientHeight\n      setTimeout(() => (this.height = 0), 0)\n    },\n    toggle (step, reverse) {\n      this.isActive = step.toString() === this.step.toString()\n      this.isReverse = reverse\n    }\n  },\n\n  render (h) {\n    const contentData = {\n      'class': this.classes\n    }\n    const wrapperData = {\n      'class': this.wrapperClasses,\n      style: this.styles,\n      ref: 'wrapper'\n    }\n\n    if (!this.isVertical) {\n      contentData.directives = [{\n        name: 'show',\n        value: this.isActive\n      }]\n    }\n\n    const wrapper = h('div', wrapperData, [this.$slots.default])\n    const content = h('div', contentData, [wrapper])\n\n    return h(this.computedTransition, {\n      on: this.$listeners\n    }, [content])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VStepper/VStepperContent.js"",""import VSubheader from './VSubheader'\n\nVSubheader.install = function install (Vue) {\n  Vue.component(VSubheader.name, VSubheader)\n}\n\nexport default VSubheader\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSubheader/index.js"",""require('../../stylus/components/_subheaders.styl')\n\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-subheader',\n\n  functional: true,\n\n  mixins: [Themeable],\n\n  props: {\n    inset: Boolean\n  },\n\n  render (h, { data, children, props }) {\n    data.staticClass = (`subheader ${data.staticClass || ''}`).trim()\n\n    if (props.inset) data.staticClass += ' subheader--inset'\n    if (props.light) data.staticClass += ' theme--light'\n    if (props.dark) data.staticClass += ' theme--dark'\n\n    return h('li', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSubheader/VSubheader.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_subheaders.styl\n// module id = 189\n// module chunks = 0"",""import VSwitch from './VSwitch'\n\nVSwitch.install = function install (Vue) {\n  Vue.component(VSwitch.name, VSwitch)\n}\n\nexport default VSwitch\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSwitch/index.js"",""require('../../stylus/components/_input-groups.styl')\nrequire('../../stylus/components/_selection-controls.styl')\nrequire('../../stylus/components/_switch.styl')\n\nimport Rippleable from '../../mixins/rippleable'\nimport Selectable from '../../mixins/selectable'\n\nexport default {\n  name: 'v-switch',\n\n  mixins: [Rippleable, Selectable],\n\n  computed: {\n    classes () {\n      const classes = {\n        'input-group--selection-controls switch': true\n      }\n\n      if (this.hasError) {\n        classes['error--text'] = true\n      } else {\n        return this.addTextColorClassChecks(classes)\n      }\n\n      return classes\n    },\n    rippleClasses () {\n      return {\n        'input-group--selection-controls__ripple': true,\n        'input-group--selection-controls__ripple--active': this.isActive\n      }\n    },\n    containerClasses () {\n      return {\n        'input-group--selection-controls__container': true,\n        'input-group--selection-controls__container--light': this.light,\n        'input-group--selection-controls__container--disabled': this.disabled\n      }\n    },\n    toggleClasses () {\n      return {\n        'input-group--selection-controls__toggle': true,\n        'input-group--selection-controls__toggle--active': this.isActive\n      }\n    }\n  },\n\n  render (h) {\n    const container = h('div', {\n      'class': this.containerClasses\n    }, [\n      h('div', { 'class': this.toggleClasses }),\n      this.genRipple()\n    ])\n\n    return this.genInputGroup([container])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSwitch/VSwitch.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_switch.styl\n// module id = 192\n// module chunks = 0"",""import VSystemBar from './VSystemBar'\n\nVSystemBar.install = function install (Vue) {\n  Vue.component(VSystemBar.name, VSystemBar)\n}\n\nexport default VSystemBar\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSystemBar/index.js"",""require('../../stylus/components/_system-bars.styl')\n\nimport Applicationable from '../../mixins/applicationable'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-system-bar',\n\n  mixins: [Applicationable, Colorable, Themeable],\n\n  props: {\n    lightsOut: Boolean,\n    status: Boolean,\n    window: Boolean\n  },\n\n  computed: {\n    classes () {\n      return this.addBackgroundColorClassChecks({\n        'system-bar': true,\n        'system-bar--lights-out': this.lightsOut,\n        'system-bar--status': this.status,\n        'system-bar--window': this.window,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      })\n    },\n    computedHeight () {\n      if (this.window) return 32\n\n      return 24\n    }\n  },\n\n  methods: {\n    updateApplication () {\n      if (!this.app) return\n\n      this.$vuetify.application.bar = this.computedHeight\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': this.classes,\n      style: {\n        height: `${this.computedHeight}px`\n      }\n    }\n\n    return h('div', data, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VSystemBar/VSystemBar.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_system-bars.styl\n// module id = 195\n// module chunks = 0"",""import VTabs from './VTabs'\nimport VTabsBar from './VTabsBar'\nimport VTabsContent from './VTabsContent'\nimport VTabsItem from './VTabsItem'\nimport VTabsItems from './VTabsItems'\nimport VTabsSlider from './VTabsSlider'\n\nVTabs.install = function install (Vue) {\n  Vue.component(VTabs.name, VTabs)\n  Vue.component(VTabsBar.name, VTabsBar)\n  Vue.component(VTabsContent.name, VTabsContent)\n  Vue.component(VTabsItem.name, VTabsItem)\n  Vue.component(VTabsItems.name, VTabsItems)\n  Vue.component(VTabsSlider.name, VTabsSlider)\n}\n\nexport default VTabs\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTabs/index.js"",""require('../../stylus/components/_tabs.styl')\n\nimport Themeable from '../../mixins/themeable'\nimport Resize from '../../directives/resize'\n\nexport default {\n  name: 'v-tabs',\n\n  directives: {\n    Resize\n  },\n\n  mixins: [Themeable],\n\n  provide () {\n    return {\n      registerContent: this.registerContent,\n      unregisterContent: this.unregisterContent,\n      registerTabItem: this.registerTabItem,\n      unregisterTabItem: this.unregisterTabItem,\n      next: this.next,\n      prev: this.prev,\n      slider: this.slider,\n      tabClick: this.tabClick,\n      isScrollable: () => this.scrollable,\n      isMobile: () => this.isMobile\n    }\n  },\n\n  data () {\n    return {\n      content: [],\n      tabItems: [],\n      activeIndex: null,\n      isBooted: false,\n      isMobile: false,\n      resizeTimeout: null,\n      reverse: false,\n      target: null,\n      tabsSlider: null,\n      targetEl: null,\n      tabsContainer: null,\n      transitionTime: 300\n    }\n  },\n\n  props: {\n    centered: Boolean,\n    fixed: Boolean,\n    grow: Boolean,\n    icons: Boolean,\n    mobileBreakPoint: {\n      type: [Number, String],\n      default: 1280\n    },\n    value: String,\n    scrollable: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'tabs': true,\n        'tabs--centered': this.centered,\n        'tabs--fixed': this.fixed,\n        'tabs--grow': this.grow,\n        'tabs--icons': this.icons,\n        'tabs--mobile': this.isMobile,\n        'tabs--scroll-bars': this.scrollable,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      }\n    }\n  },\n\n  watch: {\n    value () {\n      this.tabClick(this.value)\n    },\n    activeIndex () {\n      this.updateTabs()\n      this.$nextTick(() => (this.isBooted = true))\n    },\n    tabItems (newItems, oldItems) {\n      // Tab item got removed\n      if (oldItems.length > newItems.length) {\n        if (!newItems.find(o => o.id === this.target)) {\n          const i = oldItems.findIndex(o => o.id === this.target)\n\n          this.$nextTick(() => {\n            this.activeIndex = this.tabItems[i > 0 ? i - 1 : 0].id\n            this.target = this.activeIndex\n          })\n        }\n      }\n      this.slider()\n    },\n    '$vuetify.application.left' () {\n      this.onContainerResize()\n    },\n    '$vuetify.application.right' () {\n      this.onContainerResize()\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(() => {\n      // // This is a workaround to detect if link is active\n      // // when being used as a router or nuxt link\n      const i = this.tabItems.findIndex(({ el }) => {\n        return el.firstChild.classList.contains('tabs__item--active')\n      })\n\n      const tab = this.value || (this.tabItems[i !== -1 ? i : 0] || {}).id\n\n      tab && this.tabClick(tab) && this.onResize()\n    })\n  },\n\n  methods: {\n    registerContent (id, toggle) {\n      this.content.push({ id, toggle })\n    },\n    registerTabItem (id, toggle, el) {\n      this.tabItems.push({ id, toggle, el })\n    },\n    unregisterContent (id) {\n      this.content = this.content.filter(o => o.id !== id)\n    },\n    unregisterTabItem (id) {\n      this.tabItems = this.tabItems.filter(o => o.id !== id)\n    },\n    next (cycle) {\n      let nextIndex = this.activeIndex + 1\n\n      if (!this.content[nextIndex]) {\n        if (!cycle) return\n        nextIndex = 0\n      }\n\n      this.tabClick(this.tabItems[nextIndex].id)\n    },\n    prev (cycle) {\n      let prevIndex = this.activeIndex - 1\n\n      if (!this.content[prevIndex]) {\n        if (!cycle) return\n        prevIndex = this.content.length - 1\n      }\n\n      this.tabClick(this.tabItems[prevIndex].id)\n    },\n    onResize () {\n      this.isMobile = window.innerWidth < this.mobileBreakPoint\n      this.slider()\n    },\n    /**\n     * When v-navigation-drawer changes the\n     * width of the container, call resize\n     * after the transition is complete\n     * \n     * @return {Void}\n     */\n    onContainerResize () {\n      clearTimeout(this.resizeTimeout)\n      this.resizeTimeout = setTimeout(this.onResize, this.transitionTime)\n    },\n    slider (el) {\n      this.tabsSlider = this.tabsSlider ||\n        this.$el.querySelector('.tabs__slider')\n\n      this.tabsContainer = this.tabsContainer ||\n        this.$el.querySelector('.tabs__container')\n\n      if (!this.tabsSlider || !this.tabsContainer) return\n\n      this.targetEl = el || this.targetEl\n\n      if (!this.targetEl) return\n\n      // Gives DOM time to paint when\n      // processing slider for\n      // dynamic tabs\n      this.$nextTick(() => {\n        // #684 Calculate width as %\n        const width = (\n          this.targetEl.scrollWidth /\n          this.tabsContainer.clientWidth *\n          100\n        )\n\n        this.tabsSlider.style.width = `${width}%`\n        this.tabsSlider.style.left = `${this.targetEl.offsetLeft}px`\n      })\n    },\n    tabClick (target) {\n      const setActiveIndex = index => {\n        if (this.activeIndex === index) {\n          // #762 update tabs display\n          // In case tabs count got changed but activeIndex didn't\n          this.updateTabs()\n        } else {\n          this.activeIndex = index\n        }\n      }\n\n      this.target = target\n\n      this.$nextTick(() => {\n        const nextIndex = this.content.findIndex(o => o.id === target)\n        this.reverse = nextIndex < this.activeIndex\n        setActiveIndex(nextIndex)\n\n        this.$emit('input', this.target)\n      })\n    },\n    updateTabs () {\n      this.content.forEach(({ toggle }) => {\n        toggle(this.target, this.reverse, this.isBooted)\n      })\n\n      this.tabItems.forEach(({ toggle }) => {\n        toggle(this.target)\n      })\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      'class': this.classes,\n      directives: [{\n        name: 'resize',\n        value: this.onResize\n      }]\n    }, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTabs/VTabs.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_tabs.styl\n// module id = 198\n// module chunks = 0"",""import VIcon from '../VIcon'\n\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\n\nexport default {\n  name: 'v-tabs-bar',\n\n  directives: {\n    Resize,\n    Touch\n  },\n\n  provide () {\n    return {\n      addTabItem: (action, toggle, el) => {\n        this.registerTabItem(action, toggle, el)\n        this.onResize()\n      },\n      removeTabItem: (action) => {\n        this.unregisterTabItem(action)\n        this.onResize()\n      }\n    }\n  },\n\n  inject: ['isScrollable', 'isMobile', 'registerTabItem', 'unregisterTabItem'],\n\n  data () {\n    return {\n      isOverflowing: false,\n      scrollOffset: 0,\n      itemOffset: 0,\n      startX: 0\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'tabs__bar': true\n      }\n    },\n    containerClasses () {\n      return {\n        'tabs__container': true\n      }\n    },\n    wrapperClasses () {\n      return {\n        'tabs__wrapper': true,\n        'tabs__wrapper--scrollable': this.isScrollable(),\n        'tabs__wrapper--overflow': this.isOverflowing\n      }\n    },\n    containerStyles () {\n      return {\n        'transform': `translateX(${-this.scrollOffset}px)`\n      }\n    },\n    leftIconVisible () {\n      return !this.isMobile() &&\n        this.isScrollable() &&\n        this.isOverflowing &&\n        this.scrollOffset > 0\n    },\n    rightIconVisible () {\n      if (this.isMobile() ||\n        !this.isScrollable() ||\n        !this.isOverflowing) return\n\n      // Check one scroll ahead to know the width of right-most item\n      const container = this.$refs.container\n      const item = this.newOffsetRight(this.scrollOffset, this.itemOffset)\n      const itemWidth = item && container.children[item.index].clientWidth || 0\n      const scrollOffset = this.scrollOffset + container.clientWidth\n\n      return container.scrollWidth - scrollOffset > itemWidth * 0.30\n    }\n  },\n\n  methods: {\n    genContainer () {\n      return this.$createElement('ul', {\n        'class': this.containerClasses,\n        'style': this.containerStyles,\n        ref: 'container'\n      }, this.$slots.default)\n    },\n    genIcon (direction) {\n      const capitalize = direction.charAt(0).toUpperCase() + direction.slice(1)\n      return this.$createElement(VIcon, {\n        props: { [`${direction}`]: true },\n        style: { display: 'inline-flex' },\n        on: {\n          click: this[`scroll${capitalize}`]\n        }\n      }, `chevron_${direction}`)\n    },\n    genWrapper () {\n      return this.$createElement('div', {\n        class: this.wrapperClasses,\n        directives: [{\n          name: 'touch',\n          value: {\n            start: this.start,\n            move: this.move,\n            end: this.end\n          }\n        }]\n      }, [this.genContainer()])\n    },\n    start (e) {\n      this.startX = this.scrollOffset + e.touchstartX\n      this.$refs.container.style.transition = 'none'\n    },\n    move (e) {\n      const offset = this.startX - e.touchmoveX\n      this.scrollOffset = offset\n    },\n    end (e) {\n      this.onResize()\n      const container = this.$refs.container\n      const scrollWidth = container.scrollWidth - this.$el.clientWidth / 2\n      container.style.transition = null\n\n      if (this.scrollOffset < 0 || !this.isOverflowing) {\n        this.scrollOffset = 0\n      } else if (this.scrollOffset >= scrollWidth) {\n        const lastItem = container.children[container.children.length - 1]\n        this.scrollOffset = scrollWidth - lastItem.clientWidth\n      }\n    },\n    scrollLeft () {\n      const { offset, index } = this.newOffset('Left')\n      this.scrollOffset = offset\n      this.itemOffset = index\n    },\n    scrollRight () {\n      const { offset, index } = this.newOffset('Right')\n      this.scrollOffset = offset\n      this.itemOffset = index\n    },\n    onResize () {\n      if (this._isDestroyed) return\n\n      const container = this.$refs.container\n      this.isOverflowing = container.clientWidth < container.scrollWidth\n    },\n    newOffset (direction) {\n      return this[`newOffset${direction}`](this.scrollOffset, this.itemOffset)\n    },\n    newOffsetLeft (currentOffset, currentIndex) {\n      const container = this.$refs.container\n      const items = container.children\n      let offset = 0\n\n      for (let index = currentIndex - 1; index >= 0; index--) {\n        if (!items[index].classList.contains('tabs__slider')) {\n          const newOffset = offset + items[index].clientWidth\n          if (newOffset >= container.clientWidth) {\n            return { offset: currentOffset - offset, index: index + 1 }\n          }\n          offset = newOffset\n        }\n      }\n\n      return { offset: 0, index: 0 }\n    },\n    newOffsetRight (currentOffset, currentIndex) {\n      const container = this.$refs.container\n      const items = container.children\n      let offset = currentOffset\n\n      for (let index = currentIndex; index < items.length; index++) {\n        if (!items[index].classList.contains('tabs__slider')) {\n          const newOffset = offset + items[index].clientWidth\n          if (newOffset > currentOffset + container.clientWidth) {\n            return { offset, index }\n          }\n          offset = newOffset\n        }\n      }\n\n      return null\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      'class': this.classes,\n      directives: [{\n        name: 'resize',\n        value: this.onResize\n      }]\n    }, [\n      this.genWrapper(),\n      this.leftIconVisible ? this.genIcon('left') : null,\n      this.rightIconVisible ? this.genIcon('right') : null\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTabs/VTabsBar.js"",""import Bootable from '../../mixins/bootable'\n\nimport {\n  VTabTransition,\n  VTabReverseTransition\n} from '../transitions'\n\nimport Touch from '../../directives/touch'\n\nexport default {\n  name: 'v-tabs-content',\n\n  mixins: [Bootable],\n\n  inject: ['registerContent', 'unregisterContent'],\n\n  components: {\n    VTabTransition,\n    VTabReverseTransition\n  },\n\n  directives: {\n    Touch\n  },\n\n  data () {\n    return {\n      isActive: false,\n      reverse: false\n    }\n  },\n\n  props: {\n    id: {\n      type: String,\n      required: true\n    },\n    transition: {\n      type: [Boolean, String],\n      default: 'tab-transition'\n    },\n    reverseTransition: {\n      type: [Boolean, String],\n      default: 'tab-reverse-transition'\n    }\n  },\n\n  computed: {\n    computedTransition () {\n      return this.reverse ? this.reverseTransition : this.transition\n    }\n  },\n\n  methods: {\n    toggle (target, reverse, showTransition) {\n      this.$el.style.transition = !showTransition ? 'none' : null\n      this.reverse = reverse\n      this.isActive = this.id === target\n    }\n  },\n\n  mounted () {\n    this.registerContent(this.id, this.toggle)\n  },\n\n  beforeDestroy () {\n    this.unregisterContent(this.id)\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'tabs__content',\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }],\n      on: this.$listeners\n    }\n\n    if (this.id) data.domProps = { id: this.id }\n\n    const div = h('div', data, this.showLazyContent(this.$slots.default))\n\n    if (!this.computedTransition) return div\n\n    return h('transition', {\n      props: { name: this.computedTransition }\n    }, [div])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTabs/VTabsContent.js"",""import Routable from '../../mixins/routable'\n\nexport default {\n  name: 'v-tabs-item',\n\n  inject: ['slider', 'tabClick', 'addTabItem', 'removeTabItem'],\n\n  mixins: [Routable],\n\n  data () {\n    return {\n      isActive: false\n    }\n  },\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'tabs__item--active'\n    }\n  },\n\n  computed: {\n    classes () {\n      const classes = {\n        'tabs__item': true,\n        'tabs__item--disabled': this.disabled\n      }\n\n      classes[this.activeClass] = !this.to && this.isActive\n\n      return classes\n    },\n    action () {\n      const to = this.to || this.href\n\n      if (!to || to === Object(to)) return this._uid\n\n      return to.replace('#', '')\n    }\n  },\n\n  watch: {\n    $route () {\n      this.to && this.callSlider()\n    }\n  },\n\n  mounted () {\n    this.addTabItem(this.action, this.toggle, this.$el)\n    this.callSlider()\n  },\n\n  beforeDestroy () {\n    this.removeTabItem(this.action)\n  },\n\n  methods: {\n    callSlider () {\n      setTimeout(() => {\n        this.$el.firstChild.classList.contains('tabs__item--active') &&\n        this.slider(this.$el)\n      }, 0)\n    },\n    click (e) {\n      e.preventDefault()\n      this.$emit('click', e)\n\n      if (!this.to && !this.href) return\n\n      if (!this.to) {\n        this.tabClick(this.action)\n      }\n\n      this.callSlider()\n    },\n\n    toggle (action) {\n      this.isActive = this.action === action\n\n      this.$nextTick(() => {\n        this.isActive && this.slider(this.$el)\n      })\n    }\n  },\n\n  render (h) {\n    const link = this.generateRouteLink()\n    const { data } = link\n\n    // If disabled, use div as anchor tags do not support\n    // being disabled\n    const tag = this.disabled ? 'div' : link.tag\n\n    return h('li', {\n      'class': 'tabs__li'\n    }, [h(tag, data, this.$slots.default)])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTabs/VTabsItem.js"",""import Touch from '../../directives/touch'\n\nexport default {\n  name: 'v-tabs-items',\n\n  directives: { Touch },\n\n  inject: ['next', 'prev'],\n\n  props: {\n    cycle: Boolean,\n    touchless: Boolean\n  },\n\n  methods: {\n    swipeLeft () {\n      this.next(this.cycle)\n    },\n    swipeRight () {\n      this.prev(this.cycle)\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'tabs__items',\n      directives: []\n    }\n\n    !this.touchless && data.directives.push({\n      name: 'touch',\n      value: {\n        left: this.swipeLeft,\n        right: this.swipeRight\n      }\n    })\n\n    return h('div', data, this.$slots.default)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTabs/VTabsItems.js"",""import Colorable from '../../mixins/colorable'\n\nexport default {\n  name: 'v-tabs-slider',\n\n  mixins: [Colorable],\n\n  render (h) {\n    return h('li', {\n      staticClass: 'tabs__slider',\n      class: this.addBackgroundColorClassChecks({})\n    })\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTabs/VTabsSlider.js"",""import VTextField from './VTextField'\n\nVTextField.install = function install (Vue) {\n  Vue.component(VTextField.name, VTextField)\n}\n\nexport default VTextField\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTextField/index.js"",""require('../../stylus/components/_input-groups.styl')\nrequire('../../stylus/components/_text-fields.styl')\n\nimport Colorable from '../../mixins/colorable'\nimport Input from '../../mixins/input'\nimport Maskable from '../../mixins/maskable'\nimport { isMaskDelimiter } from '../../util/mask'\n\nexport default {\n  name: 'v-text-field',\n\n  mixins: [Colorable, Input, Maskable],\n\n  inheritAttrs: false,\n\n  data () {\n    return {\n      initialValue: null,\n      inputHeight: null,\n      badInput: false,\n      lazySelection: 0\n    }\n  },\n\n  props: {\n    autofocus: Boolean,\n    autoGrow: Boolean,\n    box: Boolean,\n    clearable: Boolean,\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    counter: [Boolean, Number, String],\n    fullWidth: Boolean,\n    multiLine: Boolean,\n    placeholder: String,\n    prefix: String,\n    rows: {\n      default: 5\n    },\n    singleLine: Boolean,\n    solo: Boolean,\n    suffix: String,\n    textarea: Boolean,\n    type: {\n      type: String,\n      default: 'text'\n    }\n  },\n\n  computed: {\n    classes () {\n      const classes = {\n        'input-group--text-field': true,\n        'input-group--text-field-box': this.box,\n        'input-group--single-line': this.singleLine || this.solo,\n        'input-group--solo': this.solo,\n        'input-group--multi-line': this.multiLine,\n        'input-group--full-width': this.fullWidth,\n        'input-group--prefix': this.prefix,\n        'input-group--suffix': this.suffix,\n        'input-group--textarea': this.textarea\n      }\n\n      if (this.hasError) {\n        classes['error--text'] = true\n      } else {\n        return this.addTextColorClassChecks(classes)\n      }\n\n      return classes\n    },\n    count () {\n      let inputLength\n      if (this.inputValue) inputLength = this.inputValue.toString().length\n      else inputLength = 0\n\n      return `${inputLength} / ${this.counterLength}`\n    },\n    counterLength () {\n      const parsedLength = parseInt(this.counter, 10)\n      return isNaN(parsedLength) ? 25 : parsedLength\n    },\n    inputValue: {\n      get () {\n        return this.value\n      },\n      set (val) {\n        this.lazyValue = val\n        this.mask && this.setSelectionRange()\n        this.$emit('input', val)\n      }\n    },\n    isDirty () {\n      return this.lazyValue != null &&\n        this.lazyValue.toString().length > 0 ||\n        this.badInput ||\n        ['time', 'date', 'datetime-local', 'week', 'month'].includes(this.type)\n    },\n    shouldAutoGrow () {\n      return (this.multiLine || this.textarea) && this.autoGrow\n    }\n  },\n\n  watch: {\n    isFocused (val) {\n      if (val) {\n        this.initialValue = this.lazyValue\n      } else if (this.initialValue !== this.lazyValue) {\n        this.$emit('change', this.lazyValue)\n      }\n    },\n    value (val) {\n      // Value was changed externally, update lazy\n      this.lazyValue = val\n\n      !this.validateOnBlur && this.validate()\n      this.shouldAutoGrow && this.calculateInputHeight()\n    }\n  },\n\n  mounted () {\n    this.$vuetify.load(() => {\n      this.shouldAutoGrow && this.calculateInputHeight()\n      this.autofocus && this.focus()\n    })\n  },\n\n  methods: {\n    calculateInputHeight () {\n      this.inputHeight = null\n\n      this.$nextTick(() => {\n        const height = this.$refs.input\n          ? this.$refs.input.scrollHeight\n          : 0\n        const minHeight = this.rows * 24\n        const inputHeight = height < minHeight ? minHeight : height\n        this.inputHeight = inputHeight + (this.textarea ? 4 : 0)\n      })\n    },\n    onInput (e) {\n      this.resetSelections(e.target)\n      this.inputValue = this.unmaskText(e.target.value)\n      this.badInput = e.target.validity && e.target.validity.badInput\n      this.shouldAutoGrow && this.calculateInputHeight()\n    },\n    blur (e) {\n      this.isFocused = false\n\n      this.$nextTick(() => {\n        this.validate()\n      })\n      this.$emit('blur', e)\n    },\n    focus (e) {\n      if (!this.$refs.input) return\n\n      this.isFocused = true\n      if (document.activeElement !== this.$refs.input) {\n        this.$refs.input.focus()\n      }\n      this.$emit('focus', e)\n    },\n    genCounter () {\n      return this.$createElement('div', {\n        'class': {\n          'input-group__counter': true,\n          'input-group__counter--error': this.hasError\n        }\n      }, this.count)\n    },\n    genInput () {\n      const tag = this.multiLine || this.textarea ? 'textarea' : 'input'\n      const listeners = Object.assign({}, this.$listeners)\n      delete listeners['change'] // Change should not be bound externally\n\n      const data = {\n        style: {},\n        domProps: {\n          autofocus: this.autofocus,\n          disabled: this.disabled,\n          required: this.required,\n          value: this.maskText(this.lazyValue)\n        },\n        attrs: {\n          ...this.$attrs,\n          readonly: this.readonly,\n          tabindex: this.tabindex,\n          'aria-label': (!this.$attrs || !this.$attrs.id) && this.label // Label `for` will be set if we have an id\n        },\n        on: Object.assign(listeners, {\n          blur: this.blur,\n          input: this.onInput,\n          focus: this.focus\n        }),\n        ref: 'input'\n      }\n\n      if (this.shouldAutoGrow) {\n        data.style.height = this.inputHeight && `${this.inputHeight}px`\n      }\n\n      if (this.placeholder) data.domProps.placeholder = this.placeholder\n\n      if (!this.textarea && !this.multiLine) {\n        data.domProps.type = this.type\n      } else {\n        data.domProps.rows = this.rows\n      }\n\n      if (this.mask) {\n        data.attrs.maxlength = this.masked.length\n      }\n\n      const children = [this.$createElement(tag, data)]\n\n      this.prefix && children.unshift(this.genFix('prefix'))\n      this.suffix && children.push(this.genFix('suffix'))\n\n      return children\n    },\n    genFix (type) {\n      return this.$createElement('span', {\n        'class': `input-group--text-field__${type}`\n      }, this[type])\n    },\n    clearableCallback () {\n      this.inputValue = null\n      this.$nextTick(() => this.$refs.input.focus())\n    },\n    resetSelections (input) {\n      this.selection = input.selectionEnd\n      this.lazySelection = 0\n\n      for (const char of input.value.substr(0, this.selection)) {\n        isMaskDelimiter(char) || this.lazySelection++\n      }\n    }\n  },\n\n  render () {\n    return this.genInputGroup(this.genInput(), { attrs: { tabindex: false } })\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTextField/VTextField.js"",""import VTimePicker from './VTimePicker'\n\nVTimePicker.install = function install (Vue) {\n  Vue.component(VTimePicker.name, VTimePicker)\n}\n\nexport default VTimePicker\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTimePicker/index.js"",""require('../../stylus/components/_pickers.styl')\nrequire('../../stylus/components/_time-picker.styl')\n\nimport { createRange } from '../../util/helpers'\n\nimport VCard from '../VCard'\n\nimport Picker from '../../mixins/picker'\nimport TimeTitle from './mixins/time-title'\nimport TimeBody from './mixins/time-body'\n\nexport default {\n  name: 'v-time-picker',\n\n  components: {\n    VCard\n  },\n\n  mixins: [Picker, TimeBody, TimeTitle],\n\n  data () {\n    return {\n      isDragging: false,\n      rotate: 0,\n      originalTime: this.value,\n      period: 'am',\n      selectingHour: true,\n      ranges: {\n        hours: createRange(24),\n        minutes: createRange(60)\n      }\n    }\n  },\n\n  props: {\n    format: {\n      type: String,\n      default: 'ampm',\n      validator (val) {\n        return ['ampm', '24hr'].includes(val)\n      }\n    },\n    allowedHours: {\n      type: [Array, Object, Function],\n      default: () => (null)\n    },\n    allowedMinutes: {\n      type: [Array, Object, Function],\n      default: () => (null)\n    }\n  },\n\n  computed: {\n    is24hr () {\n      return this.format !== 'ampm'\n    },\n    is24hrAfter12 () {\n      return this.selectingHour && this.is24hr && this.hour >= 12\n    },\n    divider () {\n      return this.selectingHour ? 12 : 60\n    },\n    degrees () {\n      return this.degreesPerUnit * Math.PI / 180\n    },\n    degreesPerUnit () {\n      return 360 / this.divider\n    },\n    inputTime: {\n      get () {\n        if (this.value && !(this.value instanceof Date)) {\n          if (!this.is24hr) {\n            this.period = this.value.match(/pm/i)\n              ? 'pm'\n              : 'am'\n          }\n\n          return this.value\n        }\n        let value = new Date()\n\n        if (this.value instanceof Date) {\n          value = this.value\n        }\n\n        let hour = value.getHours()\n        let minute = value.getMinutes()\n        let period = ''\n\n        if (!this.is24hr) {\n          period = hour >= 12 ? 'pm' : 'am'\n          hour = hour > 12 ? hour - 12 : hour\n          hour = hour === 0 ? 12 : hour\n        }\n\n        period && (this.period = period)\n\n        hour = this.firstAllowed('hour', hour)\n        minute = this.firstAllowed('minute', minute)\n\n        minute = minute < 10 ? `0${minute}` : minute > 59 ? '00' : minute\n\n        return `${hour}:${minute}${period}`\n      },\n      set (val) {\n        return this.$emit('input', val)\n      }\n    },\n    timeArray () {\n      return this.inputTime.replace(/(am|pm)/, '').split(':')\n    },\n    hour: {\n      get () {\n        return parseInt(this.timeArray[0])\n      },\n      set (val) {\n        if (!this.is24hr) {\n          val = val > 12 ? val - 12 : val < 1 ? 12 : val\n        } else {\n          val = val < 10 ? `0${val}` : val > 23 ? '00' : val\n        }\n\n        this.inputTime = `${val}:${this.minute}${!this.is24hr ? this.period : ''}`\n      }\n    },\n    minute: {\n      get () {\n        const minute = parseInt(this.timeArray[1])\n\n        return minute < 10 ? `0${minute}` : minute > 59 ? '00' : minute\n      },\n      set (val) {\n        val = val < 10 ? `0${parseInt(val)}` : val > 59 ? '00' : val\n        let hour = this.hour\n\n        if (this.is24hr && hour < 10) {\n          hour = `0${hour}`\n        }\n\n        this.inputTime = `${hour}:${val}${!this.is24hr ? this.period : ''}`\n      }\n    },\n    clockHand () {\n      if (this.selectingHour) return this.degreesPerUnit * this.hour\n      return this.degreesPerUnit * this.minute\n    },\n    radius () {\n      return this.clockSize / 2\n    },\n    clockSize: {\n      get () {\n        return this.size\n      },\n      set (val) {\n        this.size = val\n      }\n    },\n    size () {\n      return this.landscape ? 250 : 280\n    }\n  },\n\n  watch: {\n    period (val) {\n      const hour = !!this.allowedHours && this.selectingHour ? this.firstAllowed('hour', this.hour - 1) : this.hour\n      this.inputTime = `${hour}:${this.minute}${val}`\n    },\n    value (val) {\n      if (this.isSaving) {\n        this.originalTime = this.inputTime\n        this.isSaving = false\n      }\n    }\n  },\n\n  methods: {\n    save () {\n      if (this.originalTime) {\n        this.originalTime = this.value\n      } else {\n        this.inputTime = this.inputTime\n        this.originalTime = this.inputTime\n      }\n\n      if (this.$parent && this.$parent.isActive) this.$parent.isActive = false\n\n      // Fix for #1818\n      // Wait for data to persist\n      // then set selectingHour\n      this.$nextTick(() => (this.selectingHour = true))\n    },\n    cancel () {\n      this.inputTime = this.originalTime\n      if (this.$parent && this.$parent.isActive) this.$parent.isActive = false\n\n      // Fix for #1818\n      // Wait for data to persist\n      // then set selectingHour\n      this.$nextTick(() => (this.selectingHour = true))\n    },\n    isAllowed (type, value) {\n      const allowed = this[`allowed${type.charAt(0).toUpperCase() + type.slice(1)}s`]\n\n      if (!allowed) return true\n\n      if (Array.isArray(allowed)) {\n        return !!allowed.some(v => v === value)\n      } else if (allowed instanceof Function) {\n        return allowed(value)\n      } else if (allowed === Object(allowed)) {\n        const range = type === 'minute' ? this.ranges.minutes : this.ranges.hours\n        const mod = type === 'minute' ? 60 : 24\n\n        if (allowed.min === String(allowed.min)) {\n          allowed.min = this.convert12to24hr(allowed.min)\n        }\n\n        if (allowed.max === String(allowed.max)) {\n          allowed.max = this.convert12to24hr(allowed.max)\n        }\n\n        const steps = allowed.max - allowed.min\n        value = type === 'hour' && !this.is24hr && this.period === 'pm' ? value + 12 : value\n\n        for (let i = 0; i <= steps; i++) {\n          const index = (allowed.min + i) % mod\n          if (range[index] === value) return true\n        }\n\n        return false\n      }\n\n      return true\n    },\n    convert12to24hr (input) {\n      input = input.toLowerCase()\n      const pm = input.indexOf('pm') !== -1\n      const hour = parseInt(input.slice(0, input.indexOf(pm ? 'pm' : 'am')))\n\n      return pm ? hour + 12 : hour\n    },\n    generateRange (type, start) {\n      let range = type === 'hour' ? this.ranges.hours : this.ranges.minutes\n      let offset = 1\n\n      if (type === 'hour' && !this.is24hr) {\n        range = range.slice(1, 13)\n        offset = 0\n      }\n\n      return range.slice(start + offset, range.length)\n        .concat(range.slice(0, start + offset))\n    },\n    firstAllowed (type, value) {\n      const allowed = this[`allowed${type.charAt(0).toUpperCase() + type.slice(1)}s`]\n\n      if (!allowed) return value\n\n      const range = this.generateRange(type, value)\n\n      const first = range.find(v => this.isAllowed(type, v))\n\n      return first || value\n    }\n  },\n\n  render (h) {\n    const children = [this.genBody()]\n\n    !this.noTitle && children.unshift(this.genTitle())\n    this.$scopedSlots.default && children.push(this.genSlot())\n\n    return h('v-card', {\n      'class': {\n        'picker picker--time': true,\n        'picker--landscape': this.landscape,\n        'picker--time--hours': this.selectingHour,\n        ...this.themeClasses\n      }\n    }, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTimePicker/VTimePicker.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_time-picker.styl\n// module id = 208\n// module chunks = 0"",""export default {\n  methods: {\n    genTitle () {\n      const children = [this.genTime()]\n\n      if (this.format === 'ampm') {\n        children.push(this.genAMPM())\n      }\n\n      return this.$createElement('div', {\n        'class': 'picker__title'\n      }, children)\n    },\n    genTime () {\n      let hour = this.hour\n\n      if (this.is24hr && hour < 10) {\n        hour = `0${hour}`\n      }\n\n      return this.$createElement('div', {\n        'class': 'picker--time__title'\n      }, [\n        this.$createElement('span', {\n          'class': { active: this.selectingHour },\n          on: {\n            click: () => (this.selectingHour = true)\n          }\n        }, hour),\n        this.$createElement('span', {\n          'class': { active: !this.selectingHour },\n          on: {\n            click: () => (this.selectingHour = false)\n          }\n        }, `:${this.minute}`)\n      ])\n    },\n    genAMPM () {\n      return this.$createElement('div', [\n        this.genPeriod('am'),\n        this.genPeriod('pm')\n      ])\n    },\n    genPeriod (period) {\n      return this.$createElement('span', {\n        'class': { active: this.period === period },\n        on: { click: () => (this.period = period) }\n      }, period.toUpperCase())\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTimePicker/mixins/time-title.js"",""export default {\n  data () {\n    return {\n      hasChanged: false\n    }\n  },\n  methods: {\n    genBody () {\n      const children = [this.genHand(this.selectingHour ? 'hour' : 'minute')]\n      const data = {\n        'class': 'picker--time__clock',\n        on: {\n          mousedown: this.onMouseDown,\n          mouseup: this.onMouseUp,\n          mouseleave: () => {\n            this.isDragging && this.onMouseUp()\n          },\n          touchstart: this.onMouseDown,\n          touchend: this.onMouseUp,\n          mousemove: this.onDragMove,\n          touchmove: this.onDragMove\n        },\n        key: this.selectingHour ? 'hour' : 'minute',\n        ref: 'clock'\n      }\n\n      this.selectingHour &&\n        children.push(this.genHours()) ||\n        children.push(this.genMinutes())\n\n      if (this.scrollable) {\n        data.on.wheel = e => {\n          e.preventDefault()\n\n          const diff = e.wheelDelta > 0 ? 1 : -1\n          const changing = this.selectingHour ? 'changeHour' : 'changeMinute'\n\n          this[changing](diff)\n        }\n      }\n\n      return this.$createElement('div', {\n        'class': 'picker__body'\n      }, [\n        this.$createElement('transition', {\n          props: {\n            name: 'fade-transition',\n            mode: 'out-in'\n          }\n        }, [\n          this.$createElement('div', data, children)\n        ])\n      ])\n    },\n    genHand (type) {\n      const scale = this.is24hrAfter12 ? 'scaleY(0.6)' : ''\n      return [this.$createElement('div', {\n        'class': `picker--time__clock-hand ${type}`,\n        style: {\n          transform: `rotate(${this.clockHand}deg) ${scale}`\n        }\n      })]\n    },\n    genHours () {\n      let hours = this.is24hr ? 24 : 12\n      const children = []\n      let start = 0\n\n      if (hours === 12) {\n        hours++\n        start = 1\n      }\n\n      for (let i = start; i < hours; i++) {\n        children.push(this.$createElement('span', {\n          'class': {\n            'active': i === this.hour,\n            'disabled': !this.isAllowed('hour', i)\n          },\n          style: this.getTransform(i),\n          domProps: { innerHTML: `<span>${i}</span>` }\n        }))\n      }\n\n      return children\n    },\n    genMinutes () {\n      const children = []\n\n      for (let i = 0; i < 60; i = i + 5) {\n        let num = i\n\n        if (num < 10) num = `0${num}`\n        if (num === 60) num = '00'\n\n        children.push(this.$createElement('span', {\n          'class': {\n            'active': num.toString() === this.minute.toString(),\n            'disabled': !this.isAllowed('minute', i)\n          },\n          style: this.getTransform(i),\n          domProps: { innerHTML: `<span>${num}</span>` }\n        }))\n      }\n\n      return children\n    },\n    getTransform (i) {\n      const { x, y } = this.getPosition(i)\n\n      return { transform: `translate(${x}px, ${y}px)` }\n    },\n    getPosition (i) {\n      const radiusPercentage = this.selectingHour &&\n        this.is24hr &&\n        i >= 12 ? 0.5 : 0.8\n      const r = this.radius * radiusPercentage\n      i = this.selectingHour && this.is24hr ? i % 12 : i\n      return {\n        x: Math.round(Math.sin(i * this.degrees) * r),\n        y: Math.round(-Math.cos(i * this.degrees) * r)\n      }\n    },\n    changeHour (time) {\n      let range = this.generateRange('hour', this.hour)\n\n      time < 0 && (range = range.reverse().slice(1))\n      this.hour = range.find((h) => {\n        return this.allowedHours ? this.isAllowed('hour', h) : true\n      })\n\n      return true\n    },\n    changeMinute (time) {\n      const current = Number(this.minute)\n      let range = this.generateRange('minute', current)\n\n      time < 0 && (range = range.reverse().slice(1))\n      const minute = range.find((m) => {\n        return this.allowedMinutes ? this.isAllowed('minute', m) : true\n      })\n\n      this.minute = minute < 10 ? `0${minute}` : minute\n\n      return true\n    },\n    onMouseDown (e) {\n      e.preventDefault()\n\n      this.isDragging = true\n      this.onDragMove(e)\n    },\n    onMouseUp () {\n      this.isDragging = false\n      !this.selectingHour && this.autosave && this.save()\n      if (this.hasChanged) {\n        this.selectingHour = false\n        this.hasChanged = false\n      }\n    },\n    onDragMove (e) {\n      e.preventDefault()\n      if (!this.isDragging && e.type !== 'click') return\n\n      const rect = this.$refs.clock.getBoundingClientRect()\n      const center = { x: rect.width / 2, y: 0 - rect.width / 2 }\n      const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY\n      const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX\n      const coords = {\n        y: rect.top - clientY,\n        x: clientX - rect.left\n      }\n\n      const selecting = this.selectingHour ? 'hour' : 'minute'\n      let value = Math.round(this.angle(center, coords) / this.degreesPerUnit)\n\n      if (this.selectingHour && this.is24hr) {\n        const insideClick = this.euclidean(center, coords) / this.radius < 0.65\n        value = insideClick ? value + 12 : value\n\n        // Necessary to fix edge case when selecting left part of 0 and 12\n        value = this.angle(center, coords) >= 345 ? (value + 12) % 24 : value\n      }\n\n      if (this.isAllowed(selecting, value)) {\n        this[selecting] = value\n        this.hasChanged = true\n      }\n    },\n    euclidean (p0, p1) {\n      const dx = Math.abs(p1.x - p0.x)\n      const dy = Math.abs(p1.y - p0.y)\n\n      return Math.sqrt(dx * dx + dy * dy)\n    },\n    angle (center, p1) {\n      var p0 = {\n        x: center.x,\n        y: center.y + Math.sqrt(\n          Math.abs(p1.x - center.x) * Math.abs(p1.x - center.x) +\n          Math.abs(p1.y - center.y) * Math.abs(p1.y - center.y))\n      }\n\n      const value = 2 * Math.atan2(p1.y - p0.y, p1.x - p0.x)\n      return Math.abs(value * 180 / Math.PI)\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTimePicker/mixins/time-body.js"",""import {\n  createSimpleFunctional\n} from '../../util/helpers'\n\nimport VToolbar from './VToolbar'\nimport VToolbarSideIcon from './VToolbarSideIcon'\n\nexport { VToolbar, VToolbarSideIcon }\nexport const VToolbarTitle = createSimpleFunctional('toolbar__title')\nexport const VToolbarItems = createSimpleFunctional('toolbar__items')\n\nVToolbar.install = function install (Vue) {\n  Vue.component('v-toolbar', VToolbar)\n  Vue.component('v-toolbar-items', VToolbarItems)\n  Vue.component('v-toolbar-title', VToolbarTitle)\n  Vue.component('v-toolbar-side-icon', VToolbarSideIcon)\n}\n\nexport default VToolbar\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VToolbar/index.js"",""require('../../stylus/components/_toolbar.styl')\n\nimport Applicationable from '../../mixins/applicationable'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\nexport default {\n  name: 'v-toolbar',\n\n  mixins: [Applicationable, Colorable, Themeable],\n\n  data: () => ({\n    heights: {\n      mobileLandscape: 48,\n      mobile: 56,\n      desktop: 64,\n      dense: 48\n    },\n    denseHeight: 48,\n    defaultHeight: 56,\n    prominentHeight: 64,\n    isExtended: false,\n    isScrollingProxy: false,\n    marginTop: 0,\n    previousScroll: null,\n    target: null\n  }),\n\n  props: {\n    absolute: Boolean,\n    card: Boolean,\n    clippedLeft: Boolean,\n    clippedRight: Boolean,\n    dense: Boolean,\n    extended: Boolean,\n    fixed: Boolean,\n    flat: Boolean,\n    floating: Boolean,\n    height: [Number, String],\n    manualScroll: {\n      type: Boolean,\n      default: null\n    },\n    prominent: Boolean,\n    scrollOffScreen: Boolean,\n    scrollTarget: String,\n    scrollThreshold: {\n      type: Number,\n      default: 100\n    }\n  },\n\n  computed: {\n    computedHeight () {\n      if (this.height) return parseInt(this.height)\n      if (this.dense) return this.heights.dense\n      if (this.prominent ||\n        this.$vuetify.breakpoint.mdAndUp\n      ) return this.heights.desktop\n      if (this.$vuetify.breakpoint.width >\n        this.$vuetify.breakpoint.height\n      ) return this.mobileLandscape\n\n      return this.heights.mobile\n    },\n    computedMarginTop () {\n      return this.marginTop + this.$vuetify.application.bar\n    },\n    classes () {\n      return this.addBackgroundColorClassChecks({\n        'toolbar': true,\n        'elevation-0': this.flat,\n        'toolbar--absolute': this.absolute,\n        'toolbar--card': this.card,\n        'toolbar--clipped': this.clippedLeft || this.clippedRight,\n        'toolbar--dense': this.dense,\n        'toolbar--fixed': this.fixed,\n        'toolbar--floating': this.floating,\n        'toolbar--prominent': this.prominent,\n        'toolbar--extended': this.isExtended,\n        'theme--dark': this.dark,\n        'theme--light': this.light\n      })\n    },\n    isScrolling: {\n      get () {\n        return this.manualScroll != null\n          ? this.manualScroll\n          : this.isScrollingProxy\n      },\n      set (val) {\n        this.isScrollingProxy = val\n      }\n    },\n    paddingLeft () {\n      if (!this.app || this.clippedLeft) return 0\n\n      return this.$vuetify.application.left\n    },\n    paddingRight () {\n      if (!this.app || this.clippedRight) return 0\n\n      return this.$vuetify.application.right\n    },\n    styles () {\n      return this.app && {\n        marginTop: `${this.computedMarginTop}px`,\n        paddingLeft: `${this.paddingLeft}px`,\n        paddingRight: `${this.paddingRight}px`\n      }\n    }\n  },\n\n  watch: {\n    isScrolling (val) {\n      this.whenScrolled(val)\n    }\n  },\n\n  mounted () {\n    this.whenScrolled(this.isScrolling)\n  },\n\n  destroyed () {\n    if (this.app) this.$vuetify.application.top = 0\n  },\n\n  methods: {\n    onScroll () {\n      if (typeof window === 'undefined') return\n\n      if (!this.target) {\n        this.target = this.scrollTarget\n          ? document.querySelector(this.scrollTarget)\n          : window\n      }\n\n      const currentScroll = this.scrollTarget\n        ? this.target.scrollTop\n        : this.target.pageYOffset || document.documentElement.scrollTop\n\n      if (currentScroll < this.scrollThreshold) return\n\n      if (this.previousScroll === null) {\n        this.previousScroll = currentScroll\n      }\n\n      this.isScrollingProxy = this.previousScroll < currentScroll\n\n      this.previousScroll = currentScroll\n    },\n    updateApplication () {\n      if (!this.app) return\n\n      this.$vuetify.application.top = !this.fixed && !this.absolute\n        ? 0\n        : this.isExtended && !this.isScrolling\n          ? this.computedHeight * 2\n          : this.computedHeight\n    },\n    whenScrolled (val) {\n      this.marginTop = val\n        ? -this.$refs.content.clientHeight - 6\n        : 0\n\n      this.updateApplication()\n    }\n  },\n\n  render (h) {\n    this.isExtended = this.extended || !!this.$slots.extension\n    this.updateApplication()\n\n    const children = []\n    const data = {\n      'class': this.classes,\n      style: this.styles,\n      on: this.$listeners\n    }\n\n    if (this.scrollOffScreen) {\n      data.directives = [{\n        name: 'scroll',\n        value: {\n          callback: this.onScroll,\n          target: this.scrollTarget\n        }\n      }]\n    }\n\n    children.push(h('div', {\n      staticClass: 'toolbar__content',\n      style: { height: `${this.computedHeight}px` },\n      ref: 'content'\n    }, this.$slots.default))\n\n    if (this.isExtended) {\n      children.push(h('div', {\n        staticClass: 'toolbar__extension',\n        style: { height: `${this.computedHeight}px` }\n      }, this.$slots.extension))\n    }\n\n    return h('nav', data, children)\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VToolbar/VToolbar.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_toolbar.styl\n// module id = 213\n// module chunks = 0"",""import VBtn from '../../components/VBtn'\nimport VIcon from '../../components/VIcon'\n\nexport default {\n  name: 'v-toolbar-side-icon',\n\n  functional: true,\n\n  render (h, { slots, listeners, props, data }) {\n    const classes = data.staticClass\n      ? `${data.staticClass} toolbar__side-icon`\n      : 'toolbar__side-icon'\n\n    const d = Object.assign(data, {\n      staticClass: classes,\n      props: Object.assign(props, {\n        icon: true\n      }),\n      on: listeners\n    })\n\n    const defaultSlot = slots().default\n\n    return h(VBtn, d, defaultSlot || [h(VIcon, 'menu')])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VToolbar/VToolbarSideIcon.js"",""import VTooltip from './VTooltip'\n\nVTooltip.install = function install (Vue) {\n  Vue.component(VTooltip.name, VTooltip)\n}\n\nexport default VTooltip\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTooltip/index.js"",""require('../../stylus/components/_tooltips.styl')\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable'\nimport Toggleable from '../../mixins/toggleable'\n\nexport default {\n  name: 'v-tooltip',\n\n  mixins: [Colorable, Delayable, Dependent, Detachable, Menuable, Toggleable],\n\n  data: () => ({\n    calculatedMinWidth: 0,\n    closeDependents: false\n  }),\n\n  props: {\n    debounce: {\n      type: [Number, String],\n      default: 0\n    },\n    fixed: {\n      type: Boolean,\n      default: true\n    },\n    tag: {\n      type: String,\n      default: 'span'\n    },\n    transition: String,\n    zIndex: {\n      default: null\n    }\n  },\n\n  computed: {\n    calculatedLeft () {\n      const { activator, content } = this.dimensions\n      let left = 0\n\n      if (this.top || this.bottom) {\n        left = (\n          activator.left +\n          (activator.width / 2) -\n          (content.width / 2)\n        )\n      } else if (this.left || this.right) {\n        left = (\n          activator.left +\n          (this.right ? activator.width : -content.width) +\n          (this.right ? 10 : -10)\n        )\n      }\n\n      return `${this.calcXOverflow(left)}px`\n    },\n    calculatedTop () {\n      const { activator, content } = this.dimensions\n      let top = 0\n\n      if (this.top || this.bottom) {\n        top = (\n          activator.top -\n          (this.top ? activator.height : -activator.height) -\n          (this.top ? 0 : -10)\n        )\n      } else if (this.left || this.right) {\n        top = (\n          activator.top +\n          (activator.height / 2) -\n          (content.height / 2)\n        )\n      }\n\n      return `${this.calcYOverflow(top + this.pageYOffset)}px`\n    },\n    classes () {\n      return {\n        'tooltip--top': this.top,\n        'tooltip--right': this.right,\n        'tooltip--bottom': this.bottom,\n        'tooltip--left': this.left\n      }\n    },\n    computedTransition () {\n      if (this.transition) return this.transition\n      if (this.top) return 'slide-y-reverse-transition'\n      if (this.right) return 'slide-x-transition'\n      if (this.bottom) return 'slide-y-transition'\n      if (this.left) return 'slide-x-reverse-transition'\n    },\n    offsetY () {\n      return this.top || this.bottom\n    },\n    offsetX () {\n      return this.left || this.right\n    },\n    styles () {\n      return {\n        left: this.calculatedLeft,\n        maxWidth: isNaN(this.maxWidth) ? this.maxWidth : `${this.maxWidth}px`,\n        opacity: this.isActive ? 0.9 : 0,\n        top: this.calculatedTop,\n        zIndex: this.zIndex || this.activeZIndex\n      }\n    }\n  },\n\n  methods: {\n    activate () {\n      // Update coordinates and dimensions of menu\n      // and its activator\n      this.updateDimensions()\n      // Start the transition\n      requestAnimationFrame(this.startTransition)\n    }\n  },\n\n  render (h) {\n    const tooltip = h('div', {\n      staticClass: 'tooltip__content',\n      'class': this.addBackgroundColorClassChecks({\n        [this.contentClass]: true,\n        'menuable__content__active': this.isActive\n      }),\n      style: this.styles,\n      attrs: this.attrs,\n      directives: [{\n        name: 'show',\n        value: this.isContentActive\n      }],\n      ref: 'content'\n    }, this.$slots.default)\n\n    return h(this.tag, {\n      staticClass: 'tooltip',\n      'class': this.classes\n    }, [\n      h('transition', {\n        props: {\n          name: this.computedTransition\n        }\n      }, [tooltip]),\n      h('span', {\n        on: {\n          mouseenter: () => {\n            this.runDelay('open', () => (this.isActive = true))\n          },\n          mouseleave: () => {\n            this.runDelay('close', () => (this.isActive = false))\n          }\n        },\n        ref: 'activator'\n      }, this.$slots.activator)\n    ])\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VTooltip/VTooltip.js"",""// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/stylus/components/_tooltips.styl\n// module id = 217\n// module chunks = 0"",""import ClickOutside from './click-outside'\nimport Resize from './resize'\nimport Ripple from './ripple'\nimport Scroll from './scroll'\nimport Touch from './touch'\n\nexport {\n  ClickOutside,\n  Ripple,\n  Resize,\n  Scroll,\n  Touch\n}\n\nexport default function install (Vue) {\n  Vue.directive('click-outside', ClickOutside)\n  Vue.directive('ripple', Ripple)\n  Vue.directive('resize', Resize)\n  Vue.directive('scroll', Scroll)\n  Vue.directive('touch', Touch)\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/index.js"",""function inserted (el, binding) {\n  const callback = typeof binding.value === 'function'\n    ? binding.value\n    : binding.value.callback\n  const options = binding.value.options || { passive: true }\n  let target = binding.value.target || window\n  if (target === 'undefined') return\n\n  if (target !== window) {\n    target = document.querySelector(target)\n  }\n\n  target.addEventListener('scroll', callback, options)\n\n  el._onScroll = {\n    target,\n    options\n  }\n}\n\nfunction unbind (el, binding) {\n  const { target, options } = el._onScroll\n\n  target.removeEventListener('scroll', binding.callback, options)\n}\n\nexport default {\n  name: 'scroll',\n  inserted,\n  unbind\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/directives/scroll.js""],""sourceRoot"":""""}"
5d6f625d86d6e735f3a4fd175c01d822c871e234,3809435,    // taken from https://stackoverflow.com/a/3809435/1331425
9306c2e503017402bfb105e2fd2c1992d00b63a6,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
e48fe78da4d043188a69e06d00175dc961bedc0e,10722367,    // Fix of bottom padding: http://stackoverflow.com/questions/10722367/bottom-padding-not-working-on-overflow-element-in-non-chrome-browsers
b58c5c8d362e1fa1bdc36734e94c66ae76d98deb,22945884,				// See http://stackoverflow.com/questions/22945884/domparser-appending-script-tags-to-head-body-but-not-executing
fcab458fce98d1aa987d08a665790c674b69678d,16761459,    # http://stackoverflow.com/a/16761459
fbfb516796d74fef7afc5f43d671e561a0b53cd9,9739955,    // Should fail in Safari: https://stackoverflow.com/questions/9739955/feature-detecting-support-for-svg-filters.
1c7ed0aded7fbe3d54ddd8a1fce1b2c96c89bde0,28134883,* http://stackoverflow.com/questions/28134883/spring-boot-using-a-service-in-quartz-job-execution
c1e212e71f97c3ecd1001aa41f42c2e4eac8c24d,9677193, See also: http://stackoverflow.com/questions/9677193/ios-storekit-can-i-detect-when-im-in-the-sandbox
bb9d42aa03137622c2deb2ab945346459a66a73e,36796281,* [When to use the curly braces?](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281)
df7757d4cf779a5a582246fe57b025d3590ace19,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
7a9059f27c7cb56210399eb8b4beb81892626fa1,298990,		/// http://stackoverflow.com/questions/298830/split-string-containing-command-line-parameters-into-string-in-c-sharp/298990#298990
fde0ede8b95ebb2901980827b5442924ff69432c,6778961,""" http://stackoverflow.com/questions/6778961/alt-key-shortcuts-not-working-on-gnome-terminal-with-vim"
4401c6910f50aea4966f84b4638f58fe09ac6acc,32720475,        # https://stackoverflow.com/a/32720475/3549270
0e9dbd78dc011762a76b8c8ceef160d07cf35cd4,4775722,                // see http://stackoverflow.com/questions/4775722/check-if-object-is-array
d1e0ec9d696ed2bc00e07076af17ab027ce93886,18076157,     <https://stackoverflow.com/questions/18076157/why-does-configure-say-no-c-compiler-found-when-gcc-is-installed>  
b24230869e6b94381c383174a517c7c0c5e8bb91,6021372,    # generate random key #2 http://stackoverflow.com/questions/6021372/best-way-to-create-unique-token-in-rails
ba2d5923d208bb27b7ddccadd331134bd75fde6e,41001482,    // http://stackoverflow.com/questions/41001482/msvc2015-decltype-parameter-type-in-overloaded-template-function
8826bffc8614ac8b4c2bc8c8a962027f155bfdba,5725296,"6210652,comment,6210181,6210290,3,0,noonespecial,,,""I use these languages in ascending order for sys-admin/config:<p>shell -> perl -> python.<p>On OpenWRT systems, sometimes even microperl won&#x27;t fit. All you&#x27;ve got is shell. (and sh only, none of this fancy bash stuff<i>(1)</i>) Its good to be able to do things at many levels.<p><i>(1) <a href=""""http://stackoverflow.com/questions/5725296/difference-between-sh-and-bash*"""" rel=""""nofollow"""">http://stackoverflow.com/questions/5725296/difference-betwee...</a>"",1376474263"
572956a20e3d03f53ee1e64c7d402602b4965c77,12264789,https://stackoverflow.com/questions/12264789/shuffle-array-in-go
0df32d6b66b5410e14b19f43aa39226426aa5c91,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
772362cab396c654a05fbc6fd212af775628403d,14898574,<http://stackoverflow.com/questions/14898574/resample-intrday-pandas-dataframe-without-add-new-days>`__
8ec3c74e91746f93259d6546e1dcd4be0877202b,950087,    // http://stackoverflow.com/questions/950087/include-a-javascript-file-in-another-javascript-file
5dc6611a14e554e74d0e36e25cd6f2f559e9e47d,28210364,    // http://stackoverflow.com/a/28210364/1070244
52d426513c01967e6db8b44deee25b16e8209ff6,6965107,//http://stackoverflow.com/questions/6965107/ (continues on next line)
0d88ce54f381179733d735c629e05e1bb4ccf114,1148928,        # http://stackoverflow.com/q/1148928/200145
c1911aec4345a866ee873a35fac17e501739cab9,9884132,"    ""* [StackOverflow - What exactly are Python's iterator, iterable, and iteration protocols?](http://stackoverflow.com/questions/9884132/what-exactly-are-pythons-iterator-iterable-and-iteration-protocols)\n"","
484f0cbdfb1923aa031df2b0c82bfd20759a26b1,2150078,        // FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
a55d0c68f4e21e2de5334fb70e8c3cffaac17705,2117523,    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
f27311b5393b00f4270ac7b1901145d730ae21b8,24026510,// http://stackoverflow.com/questions/24026510/how-do-i-shuffle-an-array-in-swift
cda3663cd1221a4d6459b242fc3ff8ea9b254347,26248599, * http://stackoverflow.com/questions/26248599/instanceof-htmlelement-in-iframe-is-not-element-or-object).
95edd3f4d590dd8bd7f3bd8109c411370aea0373,8455200,			//  http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements
fbca4e91ecb5931aea1881eba5824790f0b60a8d,7688070,* [1]: https://stackoverflow.com/questions/7688070/why-is-comparing-the-constructor-property-of-two-windows-unreliable
2770c6bc8a921ea53c780e1f408cc597bb839de6,3572788,<</C[0 0 1]/Border[0 0 0]/A<</URI(http://stackoverflow.com/questions/3572788/c-where-to-write-the-code-documentation-in-cpp-or-in-hpp-files)/S/URI>>/Subtype/Link/Rect[426.53 678.44 450.39 690.73]>>
9b1bba8cb100c32e98c78672fda95a95cbf25ea6,309424,"   * @see ""http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string"""
1f3f0d43889f1880f2b231ab9b20e575ff1a78fc,15518328,		// http://stackoverflow.com/questions/15518328/creating-js-object-with-object-createnull#answer-21079232
3b324b6a57853836018da960dd0033eb2d8362ad,12824140,# codes from http://stackoverflow.com/a/12824140/735926
2aa44c410cdb8698f993bf2332cb1a54e3acdeda,40596003,"- numpy's odd way of [telling if an array contains only 1 or 0](http://stackoverflow.com/a/40596003/1558430) is `((arr == 0) | (arr == 1)).all()`, or `~((arr != 0) & (arr != 1)).any()`."
d36c8a3c496ad2b8e0998ca837c55316ca9917a5,11834091,        // http://stackoverflow.com/questions/11834091/how-to-check-if-localhost
f032b9e69eb5e5be933c1cb520b690cb783e06b5,8955448,    from http://stackoverflow.com/questions/8955448/save-load-scipy-sparse-csr-matrix-in-portable-data-format
9fcad72b2a23a714630d52b80665fe9bb20f2968,29053280,"&lt;p&gt;In this final step, we looked into ways to pitch and present design value metric system created for maximum impact. We developed 30-60-90 day plan which described activities such as inform and enlist stakeholders identified (data owners, key decision makers, partners and dependencies), implement metric visualisation to  communicate results (create compelling stories through numbers, graphic and infographics) and decide how to modify / refine the system further.&lt;/p&gt;</content><author><name>Albert Hardy</name></author><category term=""workshop"" /><summary type=""html"">Demonstrating the value of design in business is key to positioning, growing investment, and getting design into the strategic activities of companies. Unfortunately many designers and creatives find it hard to expertly assess and put a value on design. This workshop by Robb Ziegler &amp;amp; Deb Mrazek aimed to help design practitioner with an approach to identify (assess) and effectively communicate (express) their design value, impact and contributions for business success.</summary></entry><entry><title type=""html"">Nielsen Norman Group Singapore UX Conference</title><link href=""tanutama.com/fieldnotes/2017/01/workshop-nng/"" rel=""alternate"" type=""text/html"" title=""Nielsen Norman Group Singapore UX Conference"" /><published>2017-01-20T00:00:00+08:00</published><updated>2017-01-20T00:00:00+08:00</updated><id>tanutama.com/fieldnotes/2017/01/workshop-nng</id><content type=""html"" xml:base=""tanutama.com/fieldnotes/2017/01/workshop-nng/"">&lt;!-- https://stackoverflow.com/questions/29053280/jekyll-markup-appearing-in-p-tag --&gt;"
6fa745f46bd2c50e39edb9c279597542badf9e7c,1197928, * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
a5630851a2f99ca3a8966f664b1661b77f115374,14762162,[How do I give Jenkins more heap space when it's running as a daemon on Ubuntu?](https://stackoverflow.com/questions/14762162/how-do-i-give-jenkins-more-heap-space-when-its-running-as-a-daemon-on-ubuntu)
79fa433c1e986afd5e40bf62c7253c309480c045,616645,# https://stackoverflow.com/questions/616645/how-do-i-duplicate-sys-stdout-to-a-log-file-in-python
24d98b7bcd59c4f6a7665909628d8779ca117478,28144668,"      ""description"":""Firefox 46 and below do not support the `textTrack.onCueChange()` event ([see details](http://stackoverflow.com/questions/28144668/html5-audio-texttrack-kind-subtitles-cuechange-event-not-working-in-firefox))."""
9356358af0db990d83e3082b583e8c4915320db1,47400936,"- Missing LaTeX packages confuse users [forever](https://github.com/rstudio/rmarkdown/issues/359), [forever](https://github.com/rstudio/rmarkdown/issues/1076), [forever](https://github.com/rstudio/rmarkdown/issues/1393), and it takes [forever](https://twitter.com/xieyihui/status/763805846807547904) to figure them out and install. [Error messages](https://stackoverflow.com/q/47400936/559676) can also be confusing. Sometimes we just [don't have a clue](https://github.com/rstudio/bookdown/issues/507)."
4aba55da6a27524d29c5bf0f4802c4e73c591e3e,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
ca6e8afe6039f3cf351c4d6597d3a732a1113db2,42950,            Code from: http://stackoverflow.com/questions/42950/get-last-day-of-the-month-in-python
7b7300fca23eb5e140ad7e75cb44b2bac9208b50,29518780,"            <a href=""http://stackoverflow.com/questions/29518780/way-to-compare-range-of-commits-in-pull-request-on-github"" class=""started-link"">asked <span title=""2015-04-08 15:21:28Z"" class=""relativetime"">3 mins ago</span></a>"
3660b1947382c90b96f1237c3d31ba07059eab7b,1219860,	        // taken from http://stackoverflow.com/questions/1219860/javascript-jquery-html-encoding
84eabcedf42abd659e7aac0b6cc20e2f08c34fca,11126315,     *  http://stackoverflow.com/questions/11126315/what-are-optimal-scrypt-work-factors
ecd70f31e822fcb4e8eb0384cb97c88bdf52e242,8749616,		http://stackoverflow.com/a/8749616
14a752700192265d009c8365829eade9d48cbc33,284797,"6819160,comment,6818245,6818245,2,0,jheriko,,,""i&#x27;d recommend looking at how this works as a very tiny com file... its a bit out of date but reveals a lot about how an OS can choose different ways to achieve this, including how it can implement system calls differently and how simple an executable loader used to be...<p><a href=""""http://stackoverflow.com/questions/284797/hello-world-in-less-than-20-bytes"""" rel=""""nofollow"""">http://stackoverflow.com/questions/284797/hello-world-in-les...</a>"",1385728959"
4b3f07c1d96452517a1d0834b480ea41c97c43b8,4820549,"      <p><a href=""http://stackoverflow.com/questions/4820549/how-to-empty-db-in-heroku"">How to empty DB in heroku</a></p>"
a7e8a4305010038a9f699384c638d148fed30aad,13148313,"* <a href=""http://stackoverflow.com/a/13148313"" target=""_blank"">push.default</a>"
dd90718e47043ab901a9ce8453a2dd6ede94491e,44479078,# https://stackoverflow.com/questions/39254562/csrf-with-django-reactredux-using-axios/44479078#44479078
5c4adfde0dcbda404638ff3673905e2ca9aa92c0,21564666,"	stats_body_text = ''.join(filter(STATS_WHITELISTED_CHARACTERS.__contains__,body_text)) # https://stackoverflow.com/a/21564666"
5180a775bbab40e6e29221cf032b6204b9dbcab1,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
05b5e4f7f7f5f022aa7695c5cea813652870e850,12270322,    <!-- http://stackoverflow.com/a/12270322 -->
c88c37a2bd71b4442e4500c2b1378d26f79022a0,37628,0;23;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;interface;interface_;0.2;0.012858555885262116;1.0;1.212858555885262;0.7071067811865475;0
560f7b42bc9e7d6cf9429c23ad51c70f79bfe58d,8653516,		# from https://stackoverflow.com/questions/8653516/python-list-of-dictionaries-search	
617e48b19752ae31f0cafbbf21cc836c50fa1042,14667190,- [Simple example for why Same Origin Policy is needed](https://stackoverflow.com/a/14667190/431698)
ccb87a05e5b8f69a4549bb93a07c0d5907678934,15167911,"	//	@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL, optional=true) //bug with orphanRemoval = true (http://stackoverflow.com/questions/15167911/orphanremoval-true-bidirectional-onetoone)"
6df411d66f35f55f9dcc61dab3a4641adf4e5ccf,3330919,        // http://stackoverflow.com/a/3330919)
bdfaa062733ed2a70c84bf4ffa36b987380e3845,24027482, * https://stackoverflow.com/questions/24027482/find-k-most-occurring-elements-in-an-integer-array
734067246d45dad5666f932d9d19461dec124f2b,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
88c9884389c73d98114afeb9905197fa026b590a,2657076,                    // as suggested in http://stackoverflow.com/questions/2657076/jquery-ui-dialog-fixed-positioning
1c96f8bece63bca65c17a3465ee4355ce52fd632,27755891,  // see http://stackoverflow.com/questions/27755891/meteor-what-is-spacebars-kw-hash-object
4ab224c79a9705e6b571b5d3d3e124b18d93d1d6,18690202,REGEX_LAT='^[-+]?([1-8]?[0-9](\.[0-9]+)?|90(\.0+)?)$' # http://stackoverflow.com/a/18690202
d7975e3be8163f3063a34570845740feda428ce8,3613284,//https://stackoverflow.com/questions/3613284/c-stdstring-to-boolean
500181b38054d21ee450064fc0807e7f355e6ba8,3654492,     * http://stackoverflow.com/questions/3654492
525b42899b9aa5c741ad5f44553da46e693c8214,70579,            //#     NOTE: sPrefix must begin with /A-Za-z/ to be HTML4 compliant (see: http://stackoverflow.com/questions/70579/what-are-valid-values-for-the-id-attribute-in-html)
ce71adbb9f7b51674bb8c816af0af22ea2ca82dd,13751649,    # See: http://stackoverflow.com/a/13751649/163740
6367e33de4ea28e3082340c047708e229bcb4ba2,9142833,	 * @link http://stackoverflow.com/questions/9142833/show-my-location-on-google-maps-api-v3
44e674ace49768a0f6a34ee180eb2b1be94b412f,20832546,    /// site:http://stackoverflow.com/questions/20832546/entity-framework-with-mysql-and-migrations-failing-because-max-key-length-is-76
8cf461232f461a7223c481f1413bcf9c25c8a7ee,28611921,    # cf. https://stackoverflow.com/a/28611921/3565696
c530eec0e4a5388f3f36a4a16a84c0a76d14f7ef,20469026,                    see: http://stackoverflow.com/q/20469026/3542091 -->
03c4e68c1d65c3ecbabeab2233ac0a64358cc8c3,19029676,        // http://stackoverflow.com/questions/19029676/angular-ui-tooltip-with-html
40b2c2588c8af5f10cf7579406427ea405debb0e,14176123,    // https://stackoverflow.com/questions/14176123/correct-usage-of-strtol
c84f5d40aecbec0006525cfb3b0f40875a6fc2e0,37628,49;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;advance;1.0;0.001072961373390558;27.0;0
b699c3e93ef060ac69fce1df5a98498ed7e87f4c,731738,通过Java操作Memcached：[http://stackoverflow.com/questions/731738/java-memcached-client](http://stackoverflow.com/questions/731738/java-memcached-client)
9457b02f9a414a8752fc45f63a40b905e1a106c3,17849101,		// https://stackoverflow.com/questions/17849101/laymans-explanation-for-why-javascript-has-weird-floating-math-ieee-754-stand
80aad6f8cd3f37b6d4e5fae7e642f5b7de197cf2,29972553,    // [ref](https://stackoverflow.com/a/29972553)
9d8f63ccbc921cb5af32b25db76b9c564206a902,50845779,        // For accessibility. See https://stackoverflow.com/a/50845779.
6fd35afeec02f1b233f8238057350e6635763f7e,9739955,  // Should fail in Safari: https://stackoverflow.com/questions/9739955/feature-detecting-support-for-svg-filters.
9eef4ef0ae4a0cdef24e478528cc41503fe9a7ba,2237080,  - https://stackoverflow.com/questions/2237080/how-to-compare-strings-in-bash
149b01b6815973816e1db78b49c26855860898a4,12029499,// http://stackoverflow.com/questions/12029499/set-a-minimum-width-for-the-sidebar-nav-in-twitter-bootstrap
aa2ef90276f1e9791a7dbe386cdf7ea9b79c6866,1714027,    http://stackoverflow.com/questions/1714027/version-number-comparison
867cf5780e0132851bf358e3f91ff7178fd482c9,49501350,    # Ref: https://stackoverflow.com/questions/24347450/how-do-you-add-additional-files-to-a-wheel/49501350#49501350
8af1663afb584711dea08740d2fe2404988c42b0,6117967,        // https://stackoverflow.com/questions/6117967/how-to-remove-focus-without-setting-focus-to-another-control/15481511
703015134679b8cc3aa03738dac8fa7497fe1ec8,10834390,- [stackoverflow - AngularJs/Symfony2](http://stackoverflow.com/questions/10834390/angularjs-on-a-symfony2-application)
cfd8b77f201ca39b4973c4dd4adfb18e37f40bde,26543131,    //http://stackoverflow.com/questions/26543131/how-to-implement-endless-list-with-recyclerview
1cec7929c864a71a216886cebab1f3f82f837733,21840551,/// @link http://stackoverflow.com/questions/21840551/background-size-with-svg-squished-in-ie9-10
7c7f3029bb4b9e595226ec0c3601abe3ae47f18f,25712099,	 * Credit goes to this SO post: http://stackoverflow.com/questions/25712099/php-multidimensional-array-merge-recursive
55a7264971325a749959e7e1f3dd2461246c6bbc,34015469,    // http://stackoverflow.com/a/34015469/988941
c8a492d5565201ff381baf5847a8f8a72d9dd49f,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
d9e1989ec36d8e63360157dc62b3020b99220efc,4361242,        // http://stackoverflow.com/questions/4361242/
4f14e820091ed0c10162b99dbc12d87eab3fb61a,30741722,        // See http://stackoverflow.com/a/30741722/969302
526600e2500264753c33676cfd531c2803319a51,33562396,    https://stackoverflow.com/questions/33562396.  It works as expected in 
8675502b0271beca57bfc10e44b2e9c82233ae25,28778969,# see: http://stackoverflow.com/a/28778969
c6bad7fd089fea18d9f027833de7478640d9f8bf,12627202,        # Concept from http://stackoverflow.com/a/12627202/579416
0fc9dda172e46d1b4b8ce19bc6528767b07572f6,39647742,"- I want to filter different deals trough categories. So I need to know how to [filter data I get from Firebase](http://stackoverflow.com/questions/39647742/how-to-filter-firebase-data-in-swift). This goes wrong!! When you click on filter and the map opens again, the first time only two pins are displayed and the second time you filter and go to the map again, zero pin annotations are displayed!! I don't seem to understand why this happens. I will ask this on Julian on monday or tuesday and go on with other things right now, because I really tried and nothing seems to work. "
d7fc3fbc1dd13bfc33a5046b7bba8a61c5d65bd6,10300743,  // based on http://stackoverflow.com/a/10300743/280842
da0ea308081f8b622b95a90925edb0e64dd60981,1475307,"<p>It was a bit tricky to get the code for the params together, but with <a href=""http://stackoverflow.com/questions/1475307/including-documents-in-the-emit-vs-include-docs-true-for-couchdb"">include_docs=true</a> you can build fancy database joins and complex applications. For more examples on Nano see <a href=""http://writings.nunojob.com/2011/09/getting-started-with-nodejs-and-couchdb.html"">this article</a>. Enjoy.</p>"
ea5d4d685523ef256e52662a73e5e209b0f14e53,17033397,// from http://stackoverflow.com/questions/17033397/javascript-strings-with-keyword-parameters
d1762a43d68874a7c6b9258e7a9c18d94f310c0b,2854407, * ( source: http://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the-resize-is-completed )
e2864efb05f1eb093931740b1b8b27d19054f1f8,6255835,"Now, the only step left is to calculate the similarity score between the query and its result set, and rank the documents in the result set by this score. There are tons of different approaches to this, but what I'll use here is something called [cosine similarity](https://en.wikipedia.org/wiki/Cosine_similarity), which essentially just takes the dot product of the query and each document vector in the result set and divides it by the product of the magnitudes of these two vectors, which returns the cosine of the angle between these vectors (read [this](http://stackoverflow.com/questions/6255835/cosine-similarity-and-tf-idf) StackOverflow question for clarification). This is a particularly useful metric because it doesn't take the magnitudes of the two vectors into account when computing similarity (as opposed to, say, Euclidean Distance), which is quite important when you have one very sparse vector (our query), and one significantly less sparse vector (our document). "
5b95093bb589389954d1c76b31015a2dc2b902db,14388707,* http://stackoverflow.com/a/14388707/884770
b7bfeaadcba9e655f196d6ad6bb1e81c598f597e,40037487,    // https://stackoverflow.com/questions/40037487/the-filename-or-extension-is-too-long-error-using-gradle
c7c2b4e584b39f97bfe3816da346ebe7d1846ce5,20750843,	// http://stackoverflow.com/questions/20750843/using-named-matches-from-go-regex
179d2f602aa2a4d5dad604acf48507e76271cf9a,24289251,"""sourcesContent"": [""/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; // 1\n  font: inherit; // 2\n  margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n  overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\""button\""], // 1\ninput[type=\""reset\""],\ninput[type=\""submit\""] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\""checkbox\""],\ninput[type=\""radio\""] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\""number\""]::-webkit-inner-spin-button,\ninput[type=\""number\""]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\""search\""] {\n  -webkit-appearance: textfield; // 1\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; // 2\n  box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\""search\""]::-webkit-search-cancel-button,\ninput[type=\""search\""]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"",""/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n    *,\n    *:before,\n    *:after {\n        background: transparent !important;\n        color: #000 !important; // Black prints faster: h5bp.com/s\n        box-shadow: none !important;\n        text-shadow: none !important;\n    }\n\n    a,\n    a:visited {\n        text-decoration: underline;\n    }\n\n    a[href]:after {\n        content: \"" (\"" attr(href) \"")\"";\n    }\n\n    abbr[title]:after {\n        content: \"" (\"" attr(title) \"")\"";\n    }\n\n    // Don't show links that are fragment identifiers,\n    // or use the `javascript:` pseudo protocol\n    a[href^=\""#\""]:after,\n    a[href^=\""javascript:\""]:after {\n        content: \""\"";\n    }\n\n    pre,\n    blockquote {\n        border: 1px solid #999;\n        page-break-inside: avoid;\n    }\n\n    thead {\n        display: table-header-group; // h5bp.com/t\n    }\n\n    tr,\n    img {\n        page-break-inside: avoid;\n    }\n\n    img {\n        max-width: 100% !important;\n    }\n\n    p,\n    h2,\n    h3 {\n        orphans: 3;\n        widows: 3;\n    }\n\n    h2,\n    h3 {\n        page-break-after: avoid;\n    }\n\n    // Bootstrap specific changes start\n    //\n    // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n    // Once fixed, we can just straight up remove this.\n    select {\n        background: #fff !important;\n    }\n\n    // Bootstrap components\n    .navbar {\n        display: none;\n    }\n    .btn,\n    .dropup > .btn {\n        > .caret {\n            border-top-color: #000 !important;\n        }\n    }\n    .label {\n        border: 1px solid #000;\n    }\n\n    .table {\n        border-collapse: collapse !important;\n\n        td,\n        th {\n            background-color: #fff !important;\n        }\n    }\n    .table-bordered {\n        th,\n        td {\n            border: 1px solid #ddd !important;\n        }\n    }\n\n    // Bootstrap specific changes end\n}\n"",""//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\""#\""><span class=\""glyphicon glyphicon-star\""></span> Star</a>\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'), '#{$icon-font-path}#{$icon-font-name}.eot'));\n  src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot?#iefix'), '#{$icon-font-path}#{$icon-font-name}.eot?#iefix')) format('embedded-opentype'),\n       url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff2'), '#{$icon-font-path}#{$icon-font-name}.woff2')) format('woff2'),\n       url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff'), '#{$icon-font-path}#{$icon-font-name}.woff')) format('woff'),\n       url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.ttf'), '#{$icon-font-path}#{$icon-font-name}.ttf')) format('truetype'),\n       url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}'), '#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}')) format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \""\\2a\""; } }\n.glyphicon-plus                   { &:before { content: \""\\2b\""; } }\n.glyphicon-euro,\n.glyphicon-eur                    { &:before { content: \""\\20ac\""; } }\n.glyphicon-minus                  { &:before { content: \""\\2212\""; } }\n.glyphicon-cloud                  { &:before { content: \""\\2601\""; } }\n.glyphicon-envelope               { &:before { content: \""\\2709\""; } }\n.glyphicon-pencil                 { &:before { content: \""\\270f\""; } }\n.glyphicon-glass                  { &:before { content: \""\\e001\""; } }\n.glyphicon-music                  { &:before { content: \""\\e002\""; } }\n.glyphicon-search                 { &:before { content: \""\\e003\""; } }\n.glyphicon-heart                  { &:before { content: \""\\e005\""; } }\n.glyphicon-star                   { &:before { content: \""\\e006\""; } }\n.glyphicon-star-empty             { &:before { content: \""\\e007\""; } }\n.glyphicon-user                   { &:before { content: \""\\e008\""; } }\n.glyphicon-film                   { &:before { content: \""\\e009\""; } }\n.glyphicon-th-large               { &:before { content: \""\\e010\""; } }\n.glyphicon-th                     { &:before { content: \""\\e011\""; } }\n.glyphicon-th-list                { &:before { content: \""\\e012\""; } }\n.glyphicon-ok                     { &:before { content: \""\\e013\""; } }\n.glyphicon-remove                 { &:before { content: \""\\e014\""; } }\n.glyphicon-zoom-in                { &:before { content: \""\\e015\""; } }\n.glyphicon-zoom-out               { &:before { content: \""\\e016\""; } }\n.glyphicon-off                    { &:before { content: \""\\e017\""; } }\n.glyphicon-signal                 { &:before { content: \""\\e018\""; } }\n.glyphicon-cog                    { &:before { content: \""\\e019\""; } }\n.glyphicon-trash                  { &:before { content: \""\\e020\""; } }\n.glyphicon-home                   { &:before { content: \""\\e021\""; } }\n.glyphicon-file                   { &:before { content: \""\\e022\""; } }\n.glyphicon-time                   { &:before { content: \""\\e023\""; } }\n.glyphicon-road                   { &:before { content: \""\\e024\""; } }\n.glyphicon-download-alt           { &:before { content: \""\\e025\""; } }\n.glyphicon-download               { &:before { content: \""\\e026\""; } }\n.glyphicon-upload                 { &:before { content: \""\\e027\""; } }\n.glyphicon-inbox                  { &:before { content: \""\\e028\""; } }\n.glyphicon-play-circle            { &:before { content: \""\\e029\""; } }\n.glyphicon-repeat                 { &:before { content: \""\\e030\""; } }\n.glyphicon-refresh                { &:before { content: \""\\e031\""; } }\n.glyphicon-list-alt               { &:before { content: \""\\e032\""; } }\n.glyphicon-lock                   { &:before { content: \""\\e033\""; } }\n.glyphicon-flag                   { &:before { content: \""\\e034\""; } }\n.glyphicon-headphones             { &:before { content: \""\\e035\""; } }\n.glyphicon-volume-off             { &:before { content: \""\\e036\""; } }\n.glyphicon-volume-down            { &:before { content: \""\\e037\""; } }\n.glyphicon-volume-up              { &:before { content: \""\\e038\""; } }\n.glyphicon-qrcode                 { &:before { content: \""\\e039\""; } }\n.glyphicon-barcode                { &:before { content: \""\\e040\""; } }\n.glyphicon-tag                    { &:before { content: \""\\e041\""; } }\n.glyphicon-tags                   { &:before { content: \""\\e042\""; } }\n.glyphicon-book                   { &:before { content: \""\\e043\""; } }\n.glyphicon-bookmark               { &:before { content: \""\\e044\""; } }\n.glyphicon-print                  { &:before { content: \""\\e045\""; } }\n.glyphicon-camera                 { &:before { content: \""\\e046\""; } }\n.glyphicon-font                   { &:before { content: \""\\e047\""; } }\n.glyphicon-bold                   { &:before { content: \""\\e048\""; } }\n.glyphicon-italic                 { &:before { content: \""\\e049\""; } }\n.glyphicon-text-height            { &:before { content: \""\\e050\""; } }\n.glyphicon-text-width             { &:before { content: \""\\e051\""; } }\n.glyphicon-align-left             { &:before { content: \""\\e052\""; } }\n.glyphicon-align-center           { &:before { content: \""\\e053\""; } }\n.glyphicon-align-right            { &:before { content: \""\\e054\""; } }\n.glyphicon-align-justify          { &:before { content: \""\\e055\""; } }\n.glyphicon-list                   { &:before { content: \""\\e056\""; } }\n.glyphicon-indent-left            { &:before { content: \""\\e057\""; } }\n.glyphicon-indent-right           { &:before { content: \""\\e058\""; } }\n.glyphicon-facetime-video         { &:before { content: \""\\e059\""; } }\n.glyphicon-picture                { &:before { content: \""\\e060\""; } }\n.glyphicon-map-marker             { &:before { content: \""\\e062\""; } }\n.glyphicon-adjust                 { &:before { content: \""\\e063\""; } }\n.glyphicon-tint                   { &:before { content: \""\\e064\""; } }\n.glyphicon-edit                   { &:before { content: \""\\e065\""; } }\n.glyphicon-share                  { &:before { content: \""\\e066\""; } }\n.glyphicon-check                  { &:before { content: \""\\e067\""; } }\n.glyphicon-move                   { &:before { content: \""\\e068\""; } }\n.glyphicon-step-backward          { &:before { content: \""\\e069\""; } }\n.glyphicon-fast-backward          { &:before { content: \""\\e070\""; } }\n.glyphicon-backward               { &:before { content: \""\\e071\""; } }\n.glyphicon-play                   { &:before { content: \""\\e072\""; } }\n.glyphicon-pause                  { &:before { content: \""\\e073\""; } }\n.glyphicon-stop                   { &:before { content: \""\\e074\""; } }\n.glyphicon-forward                { &:before { content: \""\\e075\""; } }\n.glyphicon-fast-forward           { &:before { content: \""\\e076\""; } }\n.glyphicon-step-forward           { &:before { content: \""\\e077\""; } }\n.glyphicon-eject                  { &:before { content: \""\\e078\""; } }\n.glyphicon-chevron-left           { &:before { content: \""\\e079\""; } }\n.glyphicon-chevron-right          { &:before { content: \""\\e080\""; } }\n.glyphicon-plus-sign              { &:before { content: \""\\e081\""; } }\n.glyphicon-minus-sign             { &:before { content: \""\\e082\""; } }\n.glyphicon-remove-sign            { &:before { content: \""\\e083\""; } }\n.glyphicon-ok-sign                { &:before { content: \""\\e084\""; } }\n.glyphicon-question-sign          { &:before { content: \""\\e085\""; } }\n.glyphicon-info-sign              { &:before { content: \""\\e086\""; } }\n.glyphicon-screenshot             { &:before { content: \""\\e087\""; } }\n.glyphicon-remove-circle          { &:before { content: \""\\e088\""; } }\n.glyphicon-ok-circle              { &:before { content: \""\\e089\""; } }\n.glyphicon-ban-circle             { &:before { content: \""\\e090\""; } }\n.glyphicon-arrow-left             { &:before { content: \""\\e091\""; } }\n.glyphicon-arrow-right            { &:before { content: \""\\e092\""; } }\n.glyphicon-arrow-up               { &:before { content: \""\\e093\""; } }\n.glyphicon-arrow-down             { &:before { content: \""\\e094\""; } }\n.glyphicon-share-alt              { &:before { content: \""\\e095\""; } }\n.glyphicon-resize-full            { &:before { content: \""\\e096\""; } }\n.glyphicon-resize-small           { &:before { content: \""\\e097\""; } }\n.glyphicon-exclamation-sign       { &:before { content: \""\\e101\""; } }\n.glyphicon-gift                   { &:before { content: \""\\e102\""; } }\n.glyphicon-leaf                   { &:before { content: \""\\e103\""; } }\n.glyphicon-fire                   { &:before { content: \""\\e104\""; } }\n.glyphicon-eye-open               { &:before { content: \""\\e105\""; } }\n.glyphicon-eye-close              { &:before { content: \""\\e106\""; } }\n.glyphicon-warning-sign           { &:before { content: \""\\e107\""; } }\n.glyphicon-plane                  { &:before { content: \""\\e108\""; } }\n.glyphicon-calendar               { &:before { content: \""\\e109\""; } }\n.glyphicon-random                 { &:before { content: \""\\e110\""; } }\n.glyphicon-comment                { &:before { content: \""\\e111\""; } }\n.glyphicon-magnet                 { &:before { content: \""\\e112\""; } }\n.glyphicon-chevron-up             { &:before { content: \""\\e113\""; } }\n.glyphicon-chevron-down           { &:before { content: \""\\e114\""; } }\n.glyphicon-retweet                { &:before { content: \""\\e115\""; } }\n.glyphicon-shopping-cart          { &:before { content: \""\\e116\""; } }\n.glyphicon-folder-close           { &:before { content: \""\\e117\""; } }\n.glyphicon-folder-open            { &:before { content: \""\\e118\""; } }\n.glyphicon-resize-vertical        { &:before { content: \""\\e119\""; } }\n.glyphicon-resize-horizontal      { &:before { content: \""\\e120\""; } }\n.glyphicon-hdd                    { &:before { content: \""\\e121\""; } }\n.glyphicon-bullhorn               { &:before { content: \""\\e122\""; } }\n.glyphicon-bell                   { &:before { content: \""\\e123\""; } }\n.glyphicon-certificate            { &:before { content: \""\\e124\""; } }\n.glyphicon-thumbs-up              { &:before { content: \""\\e125\""; } }\n.glyphicon-thumbs-down            { &:before { content: \""\\e126\""; } }\n.glyphicon-hand-right             { &:before { content: \""\\e127\""; } }\n.glyphicon-hand-left              { &:before { content: \""\\e128\""; } }\n.glyphicon-hand-up                { &:before { content: \""\\e129\""; } }\n.glyphicon-hand-down              { &:before { content: \""\\e130\""; } }\n.glyphicon-circle-arrow-right     { &:before { content: \""\\e131\""; } }\n.glyphicon-circle-arrow-left      { &:before { content: \""\\e132\""; } }\n.glyphicon-circle-arrow-up        { &:before { content: \""\\e133\""; } }\n.glyphicon-circle-arrow-down      { &:before { content: \""\\e134\""; } }\n.glyphicon-globe                  { &:before { content: \""\\e135\""; } }\n.glyphicon-wrench                 { &:before { content: \""\\e136\""; } }\n.glyphicon-tasks                  { &:before { content: \""\\e137\""; } }\n.glyphicon-filter                 { &:before { content: \""\\e138\""; } }\n.glyphicon-briefcase              { &:before { content: \""\\e139\""; } }\n.glyphicon-fullscreen             { &:before { content: \""\\e140\""; } }\n.glyphicon-dashboard              { &:before { content: \""\\e141\""; } }\n.glyphicon-paperclip              { &:before { content: \""\\e142\""; } }\n.glyphicon-heart-empty            { &:before { content: \""\\e143\""; } }\n.glyphicon-link                   { &:before { content: \""\\e144\""; } }\n.glyphicon-phone                  { &:before { content: \""\\e145\""; } }\n.glyphicon-pushpin                { &:before { content: \""\\e146\""; } }\n.glyphicon-usd                    { &:before { content: \""\\e148\""; } }\n.glyphicon-gbp                    { &:before { content: \""\\e149\""; } }\n.glyphicon-sort                   { &:before { content: \""\\e150\""; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \""\\e151\""; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \""\\e152\""; } }\n.glyphicon-sort-by-order          { &:before { content: \""\\e153\""; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \""\\e154\""; } }\n.glyphicon-sort-by-attributes     { &:before { content: \""\\e155\""; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \""\\e156\""; } }\n.glyphicon-unchecked              { &:before { content: \""\\e157\""; } }\n.glyphicon-expand                 { &:before { content: \""\\e158\""; } }\n.glyphicon-collapse-down          { &:before { content: \""\\e159\""; } }\n.glyphicon-collapse-up            { &:before { content: \""\\e160\""; } }\n.glyphicon-log-in                 { &:before { content: \""\\e161\""; } }\n.glyphicon-flash                  { &:before { content: \""\\e162\""; } }\n.glyphicon-log-out                { &:before { content: \""\\e163\""; } }\n.glyphicon-new-window             { &:before { content: \""\\e164\""; } }\n.glyphicon-record                 { &:before { content: \""\\e165\""; } }\n.glyphicon-save                   { &:before { content: \""\\e166\""; } }\n.glyphicon-open                   { &:before { content: \""\\e167\""; } }\n.glyphicon-saved                  { &:before { content: \""\\e168\""; } }\n.glyphicon-import                 { &:before { content: \""\\e169\""; } }\n.glyphicon-export                 { &:before { content: \""\\e170\""; } }\n.glyphicon-send                   { &:before { content: \""\\e171\""; } }\n.glyphicon-floppy-disk            { &:before { content: \""\\e172\""; } }\n.glyphicon-floppy-saved           { &:before { content: \""\\e173\""; } }\n.glyphicon-floppy-remove          { &:before { content: \""\\e174\""; } }\n.glyphicon-floppy-save            { &:before { content: \""\\e175\""; } }\n.glyphicon-floppy-open            { &:before { content: \""\\e176\""; } }\n.glyphicon-credit-card            { &:before { content: \""\\e177\""; } }\n.glyphicon-transfer               { &:before { content: \""\\e178\""; } }\n.glyphicon-cutlery                { &:before { content: \""\\e179\""; } }\n.glyphicon-header                 { &:before { content: \""\\e180\""; } }\n.glyphicon-compressed             { &:before { content: \""\\e181\""; } }\n.glyphicon-earphone               { &:before { content: \""\\e182\""; } }\n.glyphicon-phone-alt              { &:before { content: \""\\e183\""; } }\n.glyphicon-tower                  { &:before { content: \""\\e184\""; } }\n.glyphicon-stats                  { &:before { content: \""\\e185\""; } }\n.glyphicon-sd-video               { &:before { content: \""\\e186\""; } }\n.glyphicon-hd-video               { &:before { content: \""\\e187\""; } }\n.glyphicon-subtitles              { &:before { content: \""\\e188\""; } }\n.glyphicon-sound-stereo           { &:before { content: \""\\e189\""; } }\n.glyphicon-sound-dolby            { &:before { content: \""\\e190\""; } }\n.glyphicon-sound-5-1              { &:before { content: \""\\e191\""; } }\n.glyphicon-sound-6-1              { &:before { content: \""\\e192\""; } }\n.glyphicon-sound-7-1              { &:before { content: \""\\e193\""; } }\n.glyphicon-copyright-mark         { &:before { content: \""\\e194\""; } }\n.glyphicon-registration-mark      { &:before { content: \""\\e195\""; } }\n.glyphicon-cloud-download         { &:before { content: \""\\e197\""; } }\n.glyphicon-cloud-upload           { &:before { content: \""\\e198\""; } }\n.glyphicon-tree-conifer           { &:before { content: \""\\e199\""; } }\n.glyphicon-tree-deciduous         { &:before { content: \""\\e200\""; } }\n.glyphicon-cd                     { &:before { content: \""\\e201\""; } }\n.glyphicon-save-file              { &:before { content: \""\\e202\""; } }\n.glyphicon-open-file              { &:before { content: \""\\e203\""; } }\n.glyphicon-level-up               { &:before { content: \""\\e204\""; } }\n.glyphicon-copy                   { &:before { content: \""\\e205\""; } }\n.glyphicon-paste                  { &:before { content: \""\\e206\""; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door                   { &:before { content: \""\\1f6aa\""; } }\n// .glyphicon-key                    { &:before { content: \""\\1f511\""; } }\n.glyphicon-alert                  { &:before { content: \""\\e209\""; } }\n.glyphicon-equalizer              { &:before { content: \""\\e210\""; } }\n.glyphicon-king                   { &:before { content: \""\\e211\""; } }\n.glyphicon-queen                  { &:before { content: \""\\e212\""; } }\n.glyphicon-pawn                   { &:before { content: \""\\e213\""; } }\n.glyphicon-bishop                 { &:before { content: \""\\e214\""; } }\n.glyphicon-knight                 { &:before { content: \""\\e215\""; } }\n.glyphicon-baby-formula           { &:before { content: \""\\e216\""; } }\n.glyphicon-tent                   { &:before { content: \""\\26fa\""; } }\n.glyphicon-blackboard             { &:before { content: \""\\e218\""; } }\n.glyphicon-bed                    { &:before { content: \""\\e219\""; } }\n.glyphicon-apple                  { &:before { content: \""\\f8ff\""; } }\n.glyphicon-erase                  { &:before { content: \""\\e221\""; } }\n.glyphicon-hourglass              { &:before { content: \""\\231b\""; } }\n.glyphicon-lamp                   { &:before { content: \""\\e223\""; } }\n.glyphicon-duplicate              { &:before { content: \""\\e224\""; } }\n.glyphicon-piggy-bank             { &:before { content: \""\\e225\""; } }\n.glyphicon-scissors               { &:before { content: \""\\e226\""; } }\n.glyphicon-bitcoin                { &:before { content: \""\\e227\""; } }\n.glyphicon-btc                    { &:before { content: \""\\e227\""; } }\n.glyphicon-xbt                    { &:before { content: \""\\e227\""; } }\n.glyphicon-yen                    { &:before { content: \""\\00a5\""; } }\n.glyphicon-jpy                    { &:before { content: \""\\00a5\""; } }\n.glyphicon-ruble                  { &:before { content: \""\\20bd\""; } }\n.glyphicon-rub                    { &:before { content: \""\\20bd\""; } }\n.glyphicon-scale                  { &:before { content: \""\\e230\""; } }\n.glyphicon-ice-lolly              { &:before { content: \""\\e231\""; } }\n.glyphicon-ice-lolly-tasted       { &:before { content: \""\\e232\""; } }\n.glyphicon-education              { &:before { content: \""\\e233\""; } }\n.glyphicon-option-horizontal      { &:before { content: \""\\e234\""; } }\n.glyphicon-option-vertical        { &:before { content: \""\\e235\""; } }\n.glyphicon-menu-hamburger         { &:before { content: \""\\e236\""; } }\n.glyphicon-modal-window           { &:before { content: \""\\e237\""; } }\n.glyphicon-oil                    { &:before { content: \""\\e238\""; } }\n.glyphicon-grain                  { &:before { content: \""\\e239\""; } }\n.glyphicon-sunglasses             { &:before { content: \""\\e240\""; } }\n.glyphicon-text-size              { &:before { content: \""\\e241\""; } }\n.glyphicon-text-color             { &:before { content: \""\\e242\""; } }\n.glyphicon-text-background        { &:before { content: \""\\e243\""; } }\n.glyphicon-object-align-top       { &:before { content: \""\\e244\""; } }\n.glyphicon-object-align-bottom    { &:before { content: \""\\e245\""; } }\n.glyphicon-object-align-horizontal{ &:before { content: \""\\e246\""; } }\n.glyphicon-object-align-left      { &:before { content: \""\\e247\""; } }\n.glyphicon-object-align-vertical  { &:before { content: \""\\e248\""; } }\n.glyphicon-object-align-right     { &:before { content: \""\\e249\""; } }\n.glyphicon-triangle-right         { &:before { content: \""\\e250\""; } }\n.glyphicon-triangle-left          { &:before { content: \""\\e251\""; } }\n.glyphicon-triangle-bottom        { &:before { content: \""\\e252\""; } }\n.glyphicon-triangle-top           { &:before { content: \""\\e253\""; } }\n.glyphicon-console                { &:before { content: \""\\e254\""; } }\n.glyphicon-superscript            { &:before { content: \""\\e255\""; } }\n.glyphicon-subscript              { &:before { content: \""\\e256\""; } }\n.glyphicon-menu-left              { &:before { content: \""\\e257\""; } }\n.glyphicon-menu-right             { &:before { content: \""\\e258\""; } }\n.glyphicon-menu-down              { &:before { content: \""\\e259\""; } }\n.glyphicon-menu-up                { &:before { content: \""\\e260\""; } }\n"",""//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n  @include box-sizing(border-box);\n}\n*:before,\n*:after {\n  @include box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n  font-family: $font-family-base;\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $text-color;\n  background-color: $body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n\n// Links\n\na {\n  color: $link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: $link-hover-color;\n    text-decoration: $link-hover-decoration;\n  }\n\n  &:focus {\n    @include tab-focus;\n  }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n  margin: 0;\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  @include img-responsive;\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: $border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: $thumbnail-padding;\n  line-height: $line-height-base;\n  background-color: $thumbnail-bg;\n  border: 1px solid $thumbnail-border;\n  border-radius: $thumbnail-border-radius;\n  @include transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  @include img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top:    $line-height-computed;\n  margin-bottom: $line-height-computed;\n  border: 0;\n  border-top: 1px solid $hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \""Skip to main content\"" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n\n\n// iOS \""clickable elements\"" fix for role=\""button\""\n//\n// Fixes \""clickability\"" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\""button\""\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged\n\n[role=\""button\""] {\n  cursor: pointer;\n}"",""// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n@mixin animation($animation) {\n  -webkit-animation: $animation;\n       -o-animation: $animation;\n          animation: $animation;\n}\n@mixin animation-name($name) {\n  -webkit-animation-name: $name;\n          animation-name: $name;\n}\n@mixin animation-duration($duration) {\n  -webkit-animation-duration: $duration;\n          animation-duration: $duration;\n}\n@mixin animation-timing-function($timing-function) {\n  -webkit-animation-timing-function: $timing-function;\n          animation-timing-function: $timing-function;\n}\n@mixin animation-delay($delay) {\n  -webkit-animation-delay: $delay;\n          animation-delay: $delay;\n}\n@mixin animation-iteration-count($iteration-count) {\n  -webkit-animation-iteration-count: $iteration-count;\n          animation-iteration-count: $iteration-count;\n}\n@mixin animation-direction($direction) {\n  -webkit-animation-direction: $direction;\n          animation-direction: $direction;\n}\n@mixin animation-fill-mode($fill-mode) {\n  -webkit-animation-fill-mode: $fill-mode;\n          animation-fill-mode: $fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n@mixin backface-visibility($visibility){\n  -webkit-backface-visibility: $visibility;\n     -moz-backface-visibility: $visibility;\n          backface-visibility: $visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n@mixin box-shadow($shadow...) {\n  -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1\n          box-shadow: $shadow;\n}\n\n// Box sizing\n@mixin box-sizing($boxmodel) {\n  -webkit-box-sizing: $boxmodel;\n     -moz-box-sizing: $boxmodel;\n          box-sizing: $boxmodel;\n}\n\n// CSS3 Content Columns\n@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {\n  -webkit-column-count: $column-count;\n     -moz-column-count: $column-count;\n          column-count: $column-count;\n  -webkit-column-gap: $column-gap;\n     -moz-column-gap: $column-gap;\n          column-gap: $column-gap;\n}\n\n// Optional hyphenation\n@mixin hyphens($mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: $mode;\n     -moz-hyphens: $mode;\n      -ms-hyphens: $mode; // IE10+\n       -o-hyphens: $mode;\n          hyphens: $mode;\n}\n\n// Placeholder text\n@mixin placeholder($color: $input-color-placeholder) {\n  // Firefox\n  &::-moz-placeholder {\n    color: $color;\n    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n  }\n  &:-ms-input-placeholder { color: $color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: $color; } // Safari and Chrome\n}\n\n// Transformations\n@mixin scale($ratio...) {\n  -webkit-transform: scale($ratio);\n      -ms-transform: scale($ratio); // IE9 only\n       -o-transform: scale($ratio);\n          transform: scale($ratio);\n}\n\n@mixin scaleX($ratio) {\n  -webkit-transform: scaleX($ratio);\n      -ms-transform: scaleX($ratio); // IE9 only\n       -o-transform: scaleX($ratio);\n          transform: scaleX($ratio);\n}\n@mixin scaleY($ratio) {\n  -webkit-transform: scaleY($ratio);\n      -ms-transform: scaleY($ratio); // IE9 only\n       -o-transform: scaleY($ratio);\n          transform: scaleY($ratio);\n}\n@mixin skew($x, $y) {\n  -webkit-transform: skewX($x) skewY($y);\n      -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX($x) skewY($y);\n          transform: skewX($x) skewY($y);\n}\n@mixin translate($x, $y) {\n  -webkit-transform: translate($x, $y);\n      -ms-transform: translate($x, $y); // IE9 only\n       -o-transform: translate($x, $y);\n          transform: translate($x, $y);\n}\n@mixin translate3d($x, $y, $z) {\n  -webkit-transform: translate3d($x, $y, $z);\n          transform: translate3d($x, $y, $z);\n}\n@mixin rotate($degrees) {\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees); // IE9 only\n       -o-transform: rotate($degrees);\n          transform: rotate($degrees);\n}\n@mixin rotateX($degrees) {\n  -webkit-transform: rotateX($degrees);\n      -ms-transform: rotateX($degrees); // IE9 only\n       -o-transform: rotateX($degrees);\n          transform: rotateX($degrees);\n}\n@mixin rotateY($degrees) {\n  -webkit-transform: rotateY($degrees);\n      -ms-transform: rotateY($degrees); // IE9 only\n       -o-transform: rotateY($degrees);\n          transform: rotateY($degrees);\n}\n@mixin perspective($perspective) {\n  -webkit-perspective: $perspective;\n     -moz-perspective: $perspective;\n          perspective: $perspective;\n}\n@mixin perspective-origin($perspective) {\n  -webkit-perspective-origin: $perspective;\n     -moz-perspective-origin: $perspective;\n          perspective-origin: $perspective;\n}\n@mixin transform-origin($origin) {\n  -webkit-transform-origin: $origin;\n     -moz-transform-origin: $origin;\n      -ms-transform-origin: $origin; // IE9 only\n          transform-origin: $origin;\n}\n\n\n// Transitions\n\n@mixin transition($transition...) {\n  -webkit-transition: $transition;\n       -o-transition: $transition;\n          transition: $transition;\n}\n@mixin transition-property($transition-property...) {\n  -webkit-transition-property: $transition-property;\n          transition-property: $transition-property;\n}\n@mixin transition-delay($transition-delay) {\n  -webkit-transition-delay: $transition-delay;\n          transition-delay: $transition-delay;\n}\n@mixin transition-duration($transition-duration...) {\n  -webkit-transition-duration: $transition-duration;\n          transition-duration: $transition-duration;\n}\n@mixin transition-timing-function($timing-function) {\n  -webkit-transition-timing-function: $timing-function;\n          transition-timing-function: $timing-function;\n}\n@mixin transition-transform($transition...) {\n  -webkit-transition: -webkit-transform $transition;\n     -moz-transition: -moz-transform $transition;\n       -o-transition: -o-transform $transition;\n          transition: transform $transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n@mixin user-select($select) {\n  -webkit-user-select: $select;\n     -moz-user-select: $select;\n      -ms-user-select: $select; // IE10+\n          user-select: $select;\n}\n"",""@import '../node_modules/@blackbaud/skyux-design-tokens/scss/variables.scss';\n\n// begin _variables\n\n$bb-nav-bg-color: #2f4050 !default;\n$bb-btn-border-radius: 3px !default;\n$bb-label-badge-color: #5e5e5e !default;\n\n$bb-color-green: $sky-color-green-50 !default;\n$bb-color-blue: $sky-color-blue-70 !default;\n$bb-color-aqua: $sky-color-teal-50 !default;\n$bb-color-yellow: $sky-color-yellow-50 !default;\n$bb-color-red: $sky-color-red-50 !default;\n$bb-color-white: $sky-color-white !default;\n$bb-color-purple: $sky-color-purple-50 !default;\n$bb-text-deemphasized-color: $sky-text-color-deemphasized !default;\n\n$bb-brand-alternate: $sky-background-color-primary-dark !default;\n$bb-brand-alternate-light: lighten($bb-brand-alternate, 10%) !default; \n$bb-brand-alternate-lighter: lighten($bb-brand-alternate, 20%) !default;\n\n$bb-inline-filter-color: $sky-background-color-neutral-light !default;\n\n$bb-nav-color: #a7b1c2 !default;\n$bb-nav-selected-color: $bb-color-white !default;\n$bb-nav-selected-bg-color: #293846 !default;\n$bb-nav-item-padding: 16px !default;\n$bb-nav-selected-border-width: 4px !default;\n\n$bb-error-color: #ca2a2a !default;\n$bb-selected-color: $sky-background-color-selected !default;\n\n$bb-focus-border-color: #1f90d8 !default;\n$bb-focus-shadow-color: rgba(28, 132, 198, 0.6) !default;\n\n\n$font-family-sans-serif: \""Blackbaud Sans\"", Helvetica, Arial, sans-serif !default;\n\n$font-family-base: \""Blackbaud Sans\"", Helvetica, Arial, sans-serif !default;\n\n$bb-font-family-narrow: \""Blackbaud Sans\"", Helvetica, Arial, sans-serif !default;\n$bb-font-family-alternate: $font-family-sans-serif !default;\n\n$font-size-base: 15px;\n\n$bb-font-size-xxxl: floor(($font-size-base * 3.5)) !default; // ~42px\n$bb-font-size-xxl: floor(($font-size-base * 2.5)) !default; // ~30px\n$bb-font-size-xl: floor(($font-size-base * 1.333)) !default; // ~16px\n$bb-font-size-lg: ceil(($font-size-base * 1.07)) !default; // ~14px\n$bb-font-size-sm: ceil(($font-size-base * 0.833)) !default; // ~10px\n\n$bb-alternate-font-size-xxxl: floor(($font-size-base * 4)) !default; // ~48px\n$bb-alternate-font-size-xxl: floor(($font-size-base * 3.5)) !default; // ~42px\n$bb-alternate-font-size-xl: floor(($font-size-base * 2.333)) !default; // ~28px\n$bb-alternate-font-size-lg: ceil(($font-size-base * 2)) !default; // ~24px\n$bb-alternate-font-size-base: ceil(($font-size-base * 1.833)) !default; // ~22px\n$bb-alternate-font-size-sm: ceil(($font-size-base * 1.667)) !default; // ~20px\n\n$bb-text-color-success: $bb-color-green !default;\n$bb-text-color-info: $bb-color-aqua !default;\n$bb-text-color-warning: $bb-color-yellow !default;\n$bb-text-color-danger: $bb-color-red !default;\n\n// End new variables\n\n\n// Bootstrap overrides\n\n$navbar-default-link-active-bg: $bb-nav-selected-bg-color;\n\n$body-bg: $sky-background-color-neutral-light;\n\n$gray-darker: $sky-color-gray-100;\n$gray-dark: $sky-color-gray-100;\n$gray: $sky-color-gray-70;\n$gray-light: $sky-color-gray-70;\n$gray-lighter: $sky-color-gray-20;\n\n$brand-primary: $bb-color-green;\n\n$thumbnail-bg: $bb-color-white;\n$nav-tabs-active-link-hover-bg: $bb-color-white;\n$nav-tabs-justified-active-link-border-color: $bb-color-white;\n\n$pagination-active-bg: $sky-background-color-neutral-light;\n$pagination-active-border: $sky-border-color-neutral-medium;\n\n$nav-pills-active-link-hover-bg: $bb-brand-alternate;\n\n$panel-primary-border: $bb-brand-alternate;\n\n$panel-primary-heading-bg: $bb-brand-alternate;\n\n$btn-primary-color: $bb-color-white;\n$btn-primary-bg: $bb-brand-alternate;\n$btn-primary-border: $bb-brand-alternate;\n\n$state-danger-text: $bb-error-color;\n\n//other colors\n$gray-lightest: $sky-color-gray-05;\n\n$gray-dark-text: $sky-color-gray-20;\n\n// end colors\n\n// begin fonts\n\n$font-size-h1: $bb-alternate-font-size-xxxl;\n$font-size-h2: $bb-alternate-font-size-xxl;\n$font-size-h3: $bb-alternate-font-size-xl;\n$font-size-h4: $bb-font-size-lg;\n$font-size-h5: $font-size-base;\n$font-size-h6: $bb-font-size-sm;\n\n$bbsky-char-add: \""\\e600\"";\n$bbsky-char-add-fill: \""\\e601\"";\n$bbsky-char-add-nostroke: \""\\e602\"";\n$bbsky-char-delete: \""\\e603\"";\n$bbsky-char-close: \""\\e604\"";\n$bbsky-char-check: \""\\e605\"";\n$bbsky-char-check-nostroke: \""\\e606\"";\n$bbsky-char-arrow: \""\\e607\"";\n$bbsky-char-arrow-angle: \""\\e608\"";\n$bbsky-char-arrow-bub: \""\\e609\"";\n$bbsky-char-back: \""\\e60a\"";\n$bbsky-char-search: \""\\e60b\"";\n$bbsky-char-edit: \""\\e60c\"";\n$bbsky-char-save: \""\\e60d\"";\n$bbsky-char-print: \""\\e60e\"";\n$bbsky-char-folder: \""\\e60f\"";\n$bbsky-char-warning: \""\\e610\"";\n$bbsky-char-gear: \""\\e611\"";\n$bbsky-char-gear-fill: \""\\e612\"";\n$bbsky-char-columns: \""\\e613\"";\n$bbsky-char-filter: \""\\e614\"";\n$bbsky-char-note: \""\\e615\"";\n$bbsky-char-message-bub: \""\\e616\"";\n$bbsky-char-export: \""\\e617\"";\n$bbsky-char-user: \""\\e618\"";\n$bbsky-char-user-face: \""\\e619\"";\n$bbsky-char-present: \""\\e61a\"";\n$bbsky-char-phone: \""\\e61b\"";\n$bbsky-char-calendar: \""\\e61c\"";\n$bbsky-char-new-donor: \""\\e61d\"";\n$bbsky-char-globe: \""\\e61e\"";\n$bbsky-char-cloud: \""\\e61f\"";\n$bbsky-char-key: \""\\e620\"";\n$bbsky-char-key-angle: \""\\e621\"";\n$bbsky-char-share: \""\\e622\"";\n$bbsky-char-lock: \""\\e623\"";\n$bbsky-char-unlock: \""\\e624\"";\n$bbsky-char-copy: \""\\e625\"";\n$bbsky-char-cake: \""\\e626\"";\n$bbsky-char-help: \""\\e627\"";\n$bbsky-char-community: \""\\e628\"";\n$bbsky-char-facebook: \""\\e629\"";\n$bbsky-char-twitter: \""\\e62a\"";\n$bbsky-char-linkedin: \""\\e62b\"";\n$bbsky-char-googleplus: \""\\e62c\"";\n$bbsky-char-youtube: \""\\e62d\"";\n$bbsky-char-arrow-sharp: \""\\e62e\"";\n$bbsky-char-pdf: \""\\e62f\"";\n$bbsky-char-facebook-plain: \""\\e630\"";\n$bbsky-char-twitter-plain: \""\\e631\"";\n$bbsky-char-linkedin-plain: \""\\e632\"";\n$bbsky-char-googleplus-plain: \""\\e633\"";\n$bbsky-char-youtube-plain: \""\\e634\"";\n$bbsky-char-envelope: \""\\e635\"";\n$bbsky-char-envelope-plain: \""\\e636\"";\n$bbsky-char-loading: \""\\e637\"";\n$bbsky-char-trash: \""\\e638\"";\n$bbsky-char-stamp: \""\\e639\"";\n$bbsky-char-bb-icon: \""\\e63a\"";\n$bbsky-char-bb-icon-small: \""\\e63b\"";\n$bbsky-char-cloud-key: \""\\e63c\"";\n$bbsky-char-info: \""\\e63d\"";\n$bbsky-char-adjustment: \""\\e63e\"";\n$bbsky-char-expand: \""\\e63f\"";\n$bbsky-char-collapse: \""\\e640\"";\n$bbsky-char-refresh: \""\\e641\"";\n$bbsky-char-tasks: \""\\e642\"";\n$bbsky-char-nxt: \""\\e643\"";\n$bbsky-char-re: \""\\e644\"";\n$bbsky-char-fe: \""\\e645\"";\n$bbsky-char-multi-action: \""\\e646\"";\n$bbsky-char-database: \""\\e647\"";\n$bbsky-char-rim: \""\\e900\"";\n// end fonts\n\n// begin margin & padding\n$base-margin: 10px;\n$base-padding: 10px;\n\n$margin-half: floor(($base-margin * 0.5));\n$margin-3_4: floor(($base-margin * 0.75));\n$margin: $base-margin;\n$margin-plus-half: ceil(($base-margin * 1.5));\n$margin-double: ceil(($base-margin * 2));\n$margin-triple: ceil(($base-margin * 3));\n\n$padding-half: floor(($base-padding * 0.5));\n$padding-3_4: floor(($base-padding * 0.75));\n$padding: $base-padding;\n$padding-plus-half: ceil(($base-padding * 1.5));\n$padding-double: ceil(($base-padding * 2));\n$padding-triple: ceil(($base-padding * 3));\n// end margin & padding\n\n// begin toolbar\n$toolbar-button-color: #2B7DBA;\n$toolbar-button-fontsize: $bb-font-size-lg;\n$toolbar-background-color: $bb-color-white;\n// end toolbar\n\n// begin form\n$form-gray-light: #DDDDDD;\n$form-background: $bb-color-white;\n$form-border-color: #D9D9D9;\n$form-header-color: #333333;\n$form-textarea-color: $form-gray-light;\n$form-cancelbutton-color: $bb-brand-alternate;\n$form-select-border-color: $form-gray-light;\n$form-button-color: $bb-color-white;\n$form-button-border: #CCCCCC;\n$form-button-gradient-light: #666666;\n$form-button-gradient-dark: #444444;\n$invalid-field-color: #b94a48;\n// end form\n\n//begin dialog\n$z-index-flyout: 999 !default;\n$z-index-dialog: 2000;\n$z-index-control: 10000;\n//end dialog\n\n// begin omnibar/help widget\n$zindex-modal-background: 1040;\n$help-widget-zindex: $zindex-modal-background + 1000 !default;\n$omnibar-zindex: $zindex-modal-background - 1 !default;\n\n// uib-modal starts at $zindex-modal-background and increments each modal by 10.\n// This allows for at least 10 nested modals.\n$bb-zindex-dropdown-append-to-body: 1151;\n\n$bb-zindex-viewkeeper: 100 !default;\n$bb-zindex-popover-list: $bb-zindex-viewkeeper - 1 !default;\n//end omnibar/help widget\n\n//begin tile\n$tile-header-tool-padding: 15px;\n$tile-form-background: #F2F2F2;\n//end tile\n\n// begin text color\n$text-color: $sky-text-color-default !default;\n// end text color\n\n// begin omnibar/help widget\n$omnibar-height: 50px !default;\n$omnibar-height-small: 30px !default;\n//end omnibar/help widget\n\n// begin color palette\n$bb-palette-multi: (\n  scale-color($bb-color-blue, $lightness: 8%),\n  scale-color($bb-color-yellow, $lightness: 12%),\n  scale-color($bb-color-green, $lightness: 8%),\n  scale-color($bb-color-purple, $lightness: 26%, $saturation: -30%),\n  scale-color($bb-color-aqua, $lightness: 8%),\n  scale-color($bb-color-red, $lightness: 12%),\n  scale-color($gray, $lightness: 28%),\n  scale-color($bb-color-blue, $lightness: 48%),\n  scale-color($bb-color-yellow, $lightness: 42%),\n  scale-color($bb-color-green, $lightness: 48%),\n  scale-color($bb-color-purple, $lightness: 56%, $saturation: -30%),\n  scale-color($bb-color-aqua, $lightness: 48%),\n  scale-color($bb-color-red, $lightness: 42%),\n  scale-color($gray, $lightness: 48%)\n);\n\n$bb-palette-mono: (\n  scale-color($bb-color-blue, $lightness: -25%),\n  $bb-color-blue,\n  scale-color($bb-color-blue, $lightness: 25%),\n  scale-color($bb-color-blue, $lightness: 50%),\n  scale-color($bb-color-blue, $lightness: 75%)\n);\n// end color palette\n\n// begin avatar\n$bb-avatar-height: 100px !default;\n$bb-avatar-width: $bb-avatar-height !default;\n$bb-avatar-border-width: 2px !default;\n// end avatar\n\n// begin transitions\n$bb-transition-time-short: 150ms;\n$bb-transition-time-medium: 250ms;\n$bb-transition-time-long: 500ms;\n// end transitions\n\n// begin context menu\n$bb-context-menu-size: 24px !default;\n// end context menu\n\n// begin card\n$bb-card-height: 350px !default;\n$bb-card-width: 300px !default;\n\n$bb-card-height-small: 250px !default;\n$bb-card-width-small: 200px !default;\n// end card\n\n// end _variables\n"",""$bootstrap-sass-asset-helper: false !default;\n//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n$gray-base:              #000 !default;\n$gray-darker:            lighten($gray-base, 13.5%) !default; // #222\n$gray-dark:              lighten($gray-base, 20%) !default;   // #333\n$gray:                   lighten($gray-base, 33.5%) !default; // #555\n$gray-light:             lighten($gray-base, 46.7%) !default; // #777\n$gray-lighter:           lighten($gray-base, 93.5%) !default; // #eee\n\n$brand-primary:         darken(#428bca, 6.5%) !default; // #337ab7\n$brand-success:         #5cb85c !default;\n$brand-info:            #5bc0de !default;\n$brand-warning:         #f0ad4e !default;\n$brand-danger:          #d9534f !default;\n\n\n//== Scaffolding\n//\n//## Settings for some of the most global styles.\n\n//** Background color for `<body>`.\n$body-bg:               #fff !default;\n//** Global text color on `<body>`.\n$text-color:            $gray-dark !default;\n\n//** Global textual link color.\n$link-color:            $brand-primary !default;\n//** Link hover color set via `darken()` function.\n$link-hover-color:      darken($link-color, 15%) !default;\n//** Link hover decoration.\n$link-hover-decoration: underline !default;\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n$font-family-sans-serif:  \""Helvetica Neue\"", Helvetica, Arial, sans-serif !default;\n$font-family-serif:       Georgia, \""Times New Roman\"", Times, serif !default;\n//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.\n$font-family-monospace:   Menlo, Monaco, Consolas, \""Courier New\"", monospace !default;\n$font-family-base:        $font-family-sans-serif !default;\n\n$font-size-base:          14px !default;\n$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px\n$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px\n\n$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px\n$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px\n$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px\n$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px\n$font-size-h5:            $font-size-base !default;\n$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n$line-height-base:        1.428571429 !default; // 20/14\n//** Computed \""line-height\"" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px\n\n//** By default, this inherits from the `<body>`.\n$headings-font-family:    inherit !default;\n$headings-font-weight:    500 !default;\n$headings-line-height:    1.1 !default;\n$headings-color:          inherit !default;\n\n\n//== Iconography\n//\n//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n//** Load fonts from this directory.\n\n// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.\n// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.\n$icon-font-path: if($bootstrap-sass-asset-helper, \""bootstrap/\"", \""../fonts/bootstrap/\"") !default;\n\n//** File name for all font files.\n$icon-font-name:          \""glyphicons-halflings-regular\"" !default;\n//** Element ID within SVG icon file.\n$icon-font-svg-id:        \""glyphicons_halflingsregular\"" !default;\n\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n$padding-base-vertical:     6px !default;\n$padding-base-horizontal:   12px !default;\n\n$padding-large-vertical:    10px !default;\n$padding-large-horizontal:  16px !default;\n\n$padding-small-vertical:    5px !default;\n$padding-small-horizontal:  10px !default;\n\n$padding-xs-vertical:       1px !default;\n$padding-xs-horizontal:     5px !default;\n\n$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome\n$line-height-small:         1.5 !default;\n\n$border-radius-base:        4px !default;\n$border-radius-large:       6px !default;\n$border-radius-small:       3px !default;\n\n//** Global color for active items (e.g., navs or dropdowns).\n$component-active-color:    #fff !default;\n//** Global background color for active items (e.g., navs or dropdowns).\n$component-active-bg:       $brand-primary !default;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n$caret-width-base:          4px !default;\n//** Carets increase slightly in size for larger components.\n$caret-width-large:         5px !default;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for `<th>`s and `<td>`s.\n$table-cell-padding:            8px !default;\n//** Padding for cells in `.table-condensed`.\n$table-condensed-cell-padding:  5px !default;\n\n//** Default background color used for all tables.\n$table-bg:                      transparent !default;\n//** Background color used for `.table-striped`.\n$table-bg-accent:               #f9f9f9 !default;\n//** Background color used for `.table-hover`.\n$table-bg-hover:                #f5f5f5 !default;\n$table-bg-active:               $table-bg-hover !default;\n\n//** Border color for table and cell borders.\n$table-border-color:            #ddd !default;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n$btn-font-weight:                normal !default;\n\n$btn-default-color:              #333 !default;\n$btn-default-bg:                 #fff !default;\n$btn-default-border:             #ccc !default;\n\n$btn-primary-color:              #fff !default;\n$btn-primary-bg:                 $brand-primary !default;\n$btn-primary-border:             darken($btn-primary-bg, 5%) !default;\n\n$btn-success-color:              #fff !default;\n$btn-success-bg:                 $brand-success !default;\n$btn-success-border:             darken($btn-success-bg, 5%) !default;\n\n$btn-info-color:                 #fff !default;\n$btn-info-bg:                    $brand-info !default;\n$btn-info-border:                darken($btn-info-bg, 5%) !default;\n\n$btn-warning-color:              #fff !default;\n$btn-warning-bg:                 $brand-warning !default;\n$btn-warning-border:             darken($btn-warning-bg, 5%) !default;\n\n$btn-danger-color:               #fff !default;\n$btn-danger-bg:                  $brand-danger !default;\n$btn-danger-border:              darken($btn-danger-bg, 5%) !default;\n\n$btn-link-disabled-color:        $gray-light !default;\n\n\n//== Forms\n//\n//##\n\n//** `<input>` background color\n$input-bg:                       #fff !default;\n//** `<input disabled>` background color\n$input-bg-disabled:              $gray-lighter !default;\n\n//** Text color for `<input>`s\n$input-color:                    $gray !default;\n//** `<input>` border color\n$input-border:                   #ccc !default;\n\n// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4\n//** Default `.form-control` border radius\n// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.\n$input-border-radius:            $border-radius-base !default;\n//** Large `.form-control` border radius\n$input-border-radius-large:      $border-radius-large !default;\n//** Small `.form-control` border radius\n$input-border-radius-small:      $border-radius-small !default;\n\n//** Border color for inputs on focus\n$input-border-focus:             #66afe9 !default;\n\n//** Placeholder text color\n$input-color-placeholder:        #999 !default;\n\n//** Default `.form-control` height\n$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;\n//** Large `.form-control` height\n$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;\n//** Small `.form-control` height\n$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;\n\n//** `.form-group` margin\n$form-group-margin-bottom:       15px !default;\n\n$legend-color:                   $gray-dark !default;\n$legend-border-color:            #e5e5e5 !default;\n\n//** Background color for textual input addons\n$input-group-addon-bg:           $gray-lighter !default;\n//** Border color for textual input addons\n$input-group-addon-border-color: $input-border !default;\n\n//** Disabled cursor for form controls and buttons.\n$cursor-disabled:                not-allowed !default;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n$dropdown-bg:                    #fff !default;\n//** Dropdown menu `border-color`.\n$dropdown-border:                rgba(0,0,0,.15) !default;\n//** Dropdown menu `border-color` **for IE8**.\n$dropdown-fallback-border:       #ccc !default;\n//** Divider color for between dropdown items.\n$dropdown-divider-bg:            #e5e5e5 !default;\n\n//** Dropdown link text color.\n$dropdown-link-color:            $gray-dark !default;\n//** Hover color for dropdown links.\n$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;\n//** Hover background for dropdown links.\n$dropdown-link-hover-bg:         #f5f5f5 !default;\n\n//** Active dropdown menu item text color.\n$dropdown-link-active-color:     $component-active-color !default;\n//** Active dropdown menu item background color.\n$dropdown-link-active-bg:        $component-active-bg !default;\n\n//** Disabled dropdown menu item background color.\n$dropdown-link-disabled-color:   $gray-light !default;\n\n//** Text color for headers within dropdown menus.\n$dropdown-header-color:          $gray-light !default;\n\n//** Deprecated `$dropdown-caret-color` as of v3.1.0\n$dropdown-caret-color:           #000 !default;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n$zindex-navbar:            1000 !default;\n$zindex-dropdown:          1000 !default;\n$zindex-popover:           1060 !default;\n$zindex-tooltip:           1070 !default;\n$zindex-navbar-fixed:      1030 !default;\n$zindex-modal-background:  1040 !default;\n$zindex-modal:             1050 !default;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n//** Deprecated `$screen-xs` as of v3.0.1\n$screen-xs:                  480px !default;\n//** Deprecated `$screen-xs-min` as of v3.2.0\n$screen-xs-min:              $screen-xs !default;\n//** Deprecated `$screen-phone` as of v3.0.1\n$screen-phone:               $screen-xs-min !default;\n\n// Small screen / tablet\n//** Deprecated `$screen-sm` as of v3.0.1\n$screen-sm:                  768px !default;\n$screen-sm-min:              $screen-sm !default;\n//** Deprecated `$screen-tablet` as of v3.0.1\n$screen-tablet:              $screen-sm-min !default;\n\n// Medium screen / desktop\n//** Deprecated `$screen-md` as of v3.0.1\n$screen-md:                  992px !default;\n$screen-md-min:              $screen-md !default;\n//** Deprecated `$screen-desktop` as of v3.0.1\n$screen-desktop:             $screen-md-min !default;\n\n// Large screen / wide desktop\n//** Deprecated `$screen-lg` as of v3.0.1\n$screen-lg:                  1200px !default;\n$screen-lg-min:              $screen-lg !default;\n//** Deprecated `$screen-lg-desktop` as of v3.0.1\n$screen-lg-desktop:          $screen-lg-min !default;\n\n// So media queries don't overlap when required, provide a maximum\n$screen-xs-max:              ($screen-sm-min - 1) !default;\n$screen-sm-max:              ($screen-md-min - 1) !default;\n$screen-md-max:              ($screen-lg-min - 1) !default;\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n$grid-columns:              12 !default;\n//** Padding between columns. Gets divided in half for the left and right.\n$grid-gutter-width:         30px !default;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n$grid-float-breakpoint:     $screen-sm-min !default;\n//** Point at which the navbar begins collapsing.\n$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n$container-tablet:             (720px + $grid-gutter-width) !default;\n//** For `$screen-sm-min` and up.\n$container-sm:                 $container-tablet !default;\n\n// Medium screen / desktop\n$container-desktop:            (940px + $grid-gutter-width) !default;\n//** For `$screen-md-min` and up.\n$container-md:                 $container-desktop !default;\n\n// Large screen / wide desktop\n$container-large-desktop:      (1140px + $grid-gutter-width) !default;\n//** For `$screen-lg-min` and up.\n$container-lg:                 $container-large-desktop !default;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n$navbar-height:                    50px !default;\n$navbar-margin-bottom:             $line-height-computed !default;\n$navbar-border-radius:             $border-radius-base !default;\n$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;\n$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;\n$navbar-collapse-max-height:       340px !default;\n\n$navbar-default-color:             #777 !default;\n$navbar-default-bg:                #f8f8f8 !default;\n$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;\n\n// Navbar links\n$navbar-default-link-color:                #777 !default;\n$navbar-default-link-hover-color:          #333 !default;\n$navbar-default-link-hover-bg:             transparent !default;\n$navbar-default-link-active-color:         #555 !default;\n$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;\n$navbar-default-link-disabled-color:       #ccc !default;\n$navbar-default-link-disabled-bg:          transparent !default;\n\n// Navbar brand label\n$navbar-default-brand-color:               $navbar-default-link-color !default;\n$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;\n$navbar-default-brand-hover-bg:            transparent !default;\n\n// Navbar toggle\n$navbar-default-toggle-hover-bg:           #ddd !default;\n$navbar-default-toggle-icon-bar-bg:        #888 !default;\n$navbar-default-toggle-border-color:       #ddd !default;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n$navbar-inverse-color:                      lighten($gray-light, 15%) !default;\n$navbar-inverse-bg:                         #222 !default;\n$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;\n\n// Inverted navbar links\n$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;\n$navbar-inverse-link-hover-color:           #fff !default;\n$navbar-inverse-link-hover-bg:              transparent !default;\n$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;\n$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;\n$navbar-inverse-link-disabled-color:        #444 !default;\n$navbar-inverse-link-disabled-bg:           transparent !default;\n\n// Inverted navbar brand label\n$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;\n$navbar-inverse-brand-hover-color:          #fff !default;\n$navbar-inverse-brand-hover-bg:             transparent !default;\n\n// Inverted navbar toggle\n$navbar-inverse-toggle-hover-bg:            #333 !default;\n$navbar-inverse-toggle-icon-bar-bg:         #fff !default;\n$navbar-inverse-toggle-border-color:        #333 !default;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n$nav-link-padding:                          10px 15px !default;\n$nav-link-hover-bg:                         $gray-lighter !default;\n\n$nav-disabled-link-color:                   $gray-light !default;\n$nav-disabled-link-hover-color:             $gray-light !default;\n\n//== Tabs\n$nav-tabs-border-color:                     #ddd !default;\n\n$nav-tabs-link-hover-border-color:          $gray-lighter !default;\n\n$nav-tabs-active-link-hover-bg:             $body-bg !default;\n$nav-tabs-active-link-hover-color:          $gray !default;\n$nav-tabs-active-link-hover-border-color:   #ddd !default;\n\n$nav-tabs-justified-link-border-color:            #ddd !default;\n$nav-tabs-justified-active-link-border-color:     $body-bg !default;\n\n//== Pills\n$nav-pills-border-radius:                   $border-radius-base !default;\n$nav-pills-active-link-hover-bg:            $component-active-bg !default;\n$nav-pills-active-link-hover-color:         $component-active-color !default;\n\n\n//== Pagination\n//\n//##\n\n$pagination-color:                     $link-color !default;\n$pagination-bg:                        #fff !default;\n$pagination-border:                    #ddd !default;\n\n$pagination-hover-color:               $link-hover-color !default;\n$pagination-hover-bg:                  $gray-lighter !default;\n$pagination-hover-border:              #ddd !default;\n\n$pagination-active-color:              #fff !default;\n$pagination-active-bg:                 $brand-primary !default;\n$pagination-active-border:             $brand-primary !default;\n\n$pagination-disabled-color:            $gray-light !default;\n$pagination-disabled-bg:               #fff !default;\n$pagination-disabled-border:           #ddd !default;\n\n\n//== Pager\n//\n//##\n\n$pager-bg:                             $pagination-bg !default;\n$pager-border:                         $pagination-border !default;\n$pager-border-radius:                  15px !default;\n\n$pager-hover-bg:                       $pagination-hover-bg !default;\n\n$pager-active-bg:                      $pagination-active-bg !default;\n$pager-active-color:                   $pagination-active-color !default;\n\n$pager-disabled-color:                 $pagination-disabled-color !default;\n\n\n//== Jumbotron\n//\n//##\n\n$jumbotron-padding:              30px !default;\n$jumbotron-color:                inherit !default;\n$jumbotron-bg:                   $gray-lighter !default;\n$jumbotron-heading-color:        inherit !default;\n$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n$state-success-text:             #3c763d !default;\n$state-success-bg:               #dff0d8 !default;\n$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;\n\n$state-info-text:                #31708f !default;\n$state-info-bg:                  #d9edf7 !default;\n$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;\n\n$state-warning-text:             #8a6d3b !default;\n$state-warning-bg:               #fcf8e3 !default;\n$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;\n\n$state-danger-text:              #a94442 !default;\n$state-danger-bg:                #f2dede !default;\n$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n$tooltip-max-width:           200px !default;\n//** Tooltip text color\n$tooltip-color:               #fff !default;\n//** Tooltip background color\n$tooltip-bg:                  #000 !default;\n$tooltip-opacity:             .9 !default;\n\n//** Tooltip arrow width\n$tooltip-arrow-width:         5px !default;\n//** Tooltip arrow color\n$tooltip-arrow-color:         $tooltip-bg !default;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n$popover-bg:                          #fff !default;\n//** Popover maximum width\n$popover-max-width:                   276px !default;\n//** Popover border color\n$popover-border-color:                rgba(0,0,0,.2) !default;\n//** Popover fallback border color\n$popover-fallback-border-color:       #ccc !default;\n\n//** Popover title background color\n$popover-title-bg:                    darken($popover-bg, 3%) !default;\n\n//** Popover arrow width\n$popover-arrow-width:                 10px !default;\n//** Popover arrow color\n$popover-arrow-color:                 $popover-bg !default;\n\n//** Popover outer arrow width\n$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;\n//** Popover outer arrow color\n$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;\n//** Popover outer arrow fallback color\n$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n$label-default-bg:            $gray-light !default;\n//** Primary label background color\n$label-primary-bg:            $brand-primary !default;\n//** Success label background color\n$label-success-bg:            $brand-success !default;\n//** Info label background color\n$label-info-bg:               $brand-info !default;\n//** Warning label background color\n$label-warning-bg:            $brand-warning !default;\n//** Danger label background color\n$label-danger-bg:             $brand-danger !default;\n\n//** Default label text color\n$label-color:                 #fff !default;\n//** Default text color of a linked label\n$label-link-hover-color:      #fff !default;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n$modal-inner-padding:         15px !default;\n\n//** Padding applied to the modal title\n$modal-title-padding:         15px !default;\n//** Modal title line-height\n$modal-title-line-height:     $line-height-base !default;\n\n//** Background color of modal content area\n$modal-content-bg:                             #fff !default;\n//** Modal content border color\n$modal-content-border-color:                   rgba(0,0,0,.2) !default;\n//** Modal content border color **for IE8**\n$modal-content-fallback-border-color:          #999 !default;\n\n//** Modal backdrop background color\n$modal-backdrop-bg:           #000 !default;\n//** Modal backdrop opacity\n$modal-backdrop-opacity:      .5 !default;\n//** Modal header border color\n$modal-header-border-color:   #e5e5e5 !default;\n//** Modal footer border color\n$modal-footer-border-color:   $modal-header-border-color !default;\n\n$modal-lg:                    900px !default;\n$modal-md:                    600px !default;\n$modal-sm:                    300px !default;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n$alert-padding:               15px !default;\n$alert-border-radius:         $border-radius-base !default;\n$alert-link-font-weight:      bold !default;\n\n$alert-success-bg:            $state-success-bg !default;\n$alert-success-text:          $state-success-text !default;\n$alert-success-border:        $state-success-border !default;\n\n$alert-info-bg:               $state-info-bg !default;\n$alert-info-text:             $state-info-text !default;\n$alert-info-border:           $state-info-border !default;\n\n$alert-warning-bg:            $state-warning-bg !default;\n$alert-warning-text:          $state-warning-text !default;\n$alert-warning-border:        $state-warning-border !default;\n\n$alert-danger-bg:             $state-danger-bg !default;\n$alert-danger-text:           $state-danger-text !default;\n$alert-danger-border:         $state-danger-border !default;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n$progress-bg:                 #f5f5f5 !default;\n//** Progress bar text color\n$progress-bar-color:          #fff !default;\n//** Variable for setting rounded corners on progress bar.\n$progress-border-radius:      $border-radius-base !default;\n\n//** Default progress bar color\n$progress-bar-bg:             $brand-primary !default;\n//** Success progress bar color\n$progress-bar-success-bg:     $brand-success !default;\n//** Warning progress bar color\n$progress-bar-warning-bg:     $brand-warning !default;\n//** Danger progress bar color\n$progress-bar-danger-bg:      $brand-danger !default;\n//** Info progress bar color\n$progress-bar-info-bg:        $brand-info !default;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n$list-group-bg:                 #fff !default;\n//** `.list-group-item` border color\n$list-group-border:             #ddd !default;\n//** List group border radius\n$list-group-border-radius:      $border-radius-base !default;\n\n//** Background color of single list items on hover\n$list-group-hover-bg:           #f5f5f5 !default;\n//** Text color of active list items\n$list-group-active-color:       $component-active-color !default;\n//** Background color of active list items\n$list-group-active-bg:          $component-active-bg !default;\n//** Border color of active list elements\n$list-group-active-border:      $list-group-active-bg !default;\n//** Text color for content within active list items\n$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;\n\n//** Text color of disabled list items\n$list-group-disabled-color:      $gray-light !default;\n//** Background color of disabled list items\n$list-group-disabled-bg:         $gray-lighter !default;\n//** Text color for content within disabled list items\n$list-group-disabled-text-color: $list-group-disabled-color !default;\n\n$list-group-link-color:         #555 !default;\n$list-group-link-hover-color:   $list-group-link-color !default;\n$list-group-link-heading-color: #333 !default;\n\n\n//== Panels\n//\n//##\n\n$panel-bg:                    #fff !default;\n$panel-body-padding:          15px !default;\n$panel-heading-padding:       10px 15px !default;\n$panel-footer-padding:        $panel-heading-padding !default;\n$panel-border-radius:         $border-radius-base !default;\n\n//** Border color for elements within panels\n$panel-inner-border:          #ddd !default;\n$panel-footer-bg:             #f5f5f5 !default;\n\n$panel-default-text:          $gray-dark !default;\n$panel-default-border:        #ddd !default;\n$panel-default-heading-bg:    #f5f5f5 !default;\n\n$panel-primary-text:          #fff !default;\n$panel-primary-border:        $brand-primary !default;\n$panel-primary-heading-bg:    $brand-primary !default;\n\n$panel-success-text:          $state-success-text !default;\n$panel-success-border:        $state-success-border !default;\n$panel-success-heading-bg:    $state-success-bg !default;\n\n$panel-info-text:             $state-info-text !default;\n$panel-info-border:           $state-info-border !default;\n$panel-info-heading-bg:       $state-info-bg !default;\n\n$panel-warning-text:          $state-warning-text !default;\n$panel-warning-border:        $state-warning-border !default;\n$panel-warning-heading-bg:    $state-warning-bg !default;\n\n$panel-danger-text:           $state-danger-text !default;\n$panel-danger-border:         $state-danger-border !default;\n$panel-danger-heading-bg:     $state-danger-bg !default;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n$thumbnail-padding:           4px !default;\n//** Thumbnail background color\n$thumbnail-bg:                $body-bg !default;\n//** Thumbnail border color\n$thumbnail-border:            #ddd !default;\n//** Thumbnail border radius\n$thumbnail-border-radius:     $border-radius-base !default;\n\n//** Custom text color for thumbnail captions\n$thumbnail-caption-color:     $text-color !default;\n//** Padding around the thumbnail caption\n$thumbnail-caption-padding:   9px !default;\n\n\n//== Wells\n//\n//##\n\n$well-bg:                     #f5f5f5 !default;\n$well-border:                 darken($well-bg, 7%) !default;\n\n\n//== Badges\n//\n//##\n\n$badge-color:                 #fff !default;\n//** Linked badge text color on hover\n$badge-link-hover-color:      #fff !default;\n$badge-bg:                    $gray-light !default;\n\n//** Badge text color in active nav link\n$badge-active-color:          $link-color !default;\n//** Badge background color in active nav link\n$badge-active-bg:             #fff !default;\n\n$badge-font-weight:           bold !default;\n$badge-line-height:           1 !default;\n$badge-border-radius:         10px !default;\n\n\n//== Breadcrumbs\n//\n//##\n\n$breadcrumb-padding-vertical:   8px !default;\n$breadcrumb-padding-horizontal: 15px !default;\n//** Breadcrumb background color\n$breadcrumb-bg:                 #f5f5f5 !default;\n//** Breadcrumb text color\n$breadcrumb-color:              #ccc !default;\n//** Text color of current page in the breadcrumb\n$breadcrumb-active-color:       $gray-light !default;\n//** Textual separator for between breadcrumb elements\n$breadcrumb-separator:          \""/\"" !default;\n\n\n//== Carousel\n//\n//##\n\n$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;\n\n$carousel-control-color:                      #fff !default;\n$carousel-control-width:                      15% !default;\n$carousel-control-opacity:                    .5 !default;\n$carousel-control-font-size:                  20px !default;\n\n$carousel-indicator-active-bg:                #fff !default;\n$carousel-indicator-border-color:             #fff !default;\n\n$carousel-caption-color:                      #fff !default;\n\n\n//== Close\n//\n//##\n\n$close-font-weight:           bold !default;\n$close-color:                 #000 !default;\n$close-text-shadow:           0 1px 0 #fff !default;\n\n\n//== Code\n//\n//##\n\n$code-color:                  #c7254e !default;\n$code-bg:                     #f9f2f4 !default;\n\n$kbd-color:                   #fff !default;\n$kbd-bg:                      #333 !default;\n\n$pre-bg:                      #f5f5f5 !default;\n$pre-color:                   $gray-dark !default;\n$pre-border-color:            #ccc !default;\n$pre-scrollable-max-height:   340px !default;\n\n\n//== Type\n//\n//##\n\n//** Horizontal offset for forms and lists.\n$component-offset-horizontal: 180px !default;\n//** Text muted color\n$text-muted:                  $gray-light !default;\n//** Abbreviations and acronyms border color\n$abbr-border-color:           $gray-light !default;\n//** Headings small color\n$headings-small-color:        $gray-light !default;\n//** Blockquote small color\n$blockquote-small-color:      $gray-light !default;\n//** Blockquote font size\n$blockquote-font-size:        ($font-size-base * 1.25) !default;\n//** Blockquote border color\n$blockquote-border-color:     $gray-lighter !default;\n//** Page header border color\n$page-header-border-color:    $gray-lighter !default;\n//** Width of horizontal description list titles\n$dl-horizontal-offset:        $component-offset-horizontal !default;\n//** Horizontal line color.\n$hr-border:                   $gray-lighter !default;\n"",""// WebKit-style focus\n\n@mixin tab-focus() {\n  // Default\n  outline: thin dotted;\n  // WebKit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n"",""// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n@mixin img-responsive($display: block) {\n  display: $display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n  background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path(\""#{$file-1x}\""), \""#{$file-1x}\""));\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path(\""#{$file-2x}\""), \""#{$file-2x}\""));\n    background-size: $width-1x $height-1x;\n  }\n}\n"",""//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: $headings-font-family;\n  font-weight: $headings-font-weight;\n  line-height: $headings-line-height;\n  color: $headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: $headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: $line-height-computed;\n  margin-bottom: ($line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: ($line-height-computed / 2);\n  margin-bottom: ($line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: $font-size-h1; }\nh2, .h2 { font-size: $font-size-h2; }\nh3, .h3 { font-size: $font-size-h3; }\nh4, .h4 { font-size: $font-size-h4; }\nh5, .h5 { font-size: $font-size-h5; }\nh6, .h6 { font-size: $font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 ($line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: $line-height-computed;\n  font-size: floor(($font-size-base * 1.15));\n  font-weight: 300;\n  line-height: 1.4;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: ($font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n  font-size: floor((100% * $font-size-small / $font-size-base));\n}\n\nmark,\n.mark {\n  background-color: $state-warning-bg;\n  padding: .2em;\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n.text-nowrap         { white-space: nowrap; }\n\n// Transformation\n.text-lowercase      { text-transform: lowercase; }\n.text-uppercase      { text-transform: uppercase; }\n.text-capitalize     { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n  color: $text-muted;\n}\n\n@include text-emphasis-variant('.text-primary', $brand-primary);\n\n@include text-emphasis-variant('.text-success', $state-success-text);\n\n@include text-emphasis-variant('.text-info', $state-info-text);\n\n@include text-emphasis-variant('.text-warning', $state-warning-text);\n\n@include text-emphasis-variant('.text-danger', $state-danger-text);\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n}\n@include bg-variant('.bg-primary', $brand-primary);\n\n@include bg-variant('.bg-success', $state-success-bg);\n\n@include bg-variant('.bg-info', $state-info-bg);\n\n@include bg-variant('.bg-warning', $state-warning-bg);\n\n@include bg-variant('.bg-danger', $state-danger-bg);\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: (($line-height-computed / 2) - 1);\n  margin: ($line-height-computed * 2) 0 $line-height-computed;\n  border-bottom: 1px solid $page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: ($line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// [converter] extracted from `.list-unstyled` for libsass compatibility\n@mixin list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n// [converter] extracted as `@mixin list-unstyled` for libsass compatibility\n.list-unstyled {\n  @include list-unstyled;\n}\n\n\n// Inline turns list items into inline-block\n.list-inline {\n  @include list-unstyled;\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: $line-height-computed;\n}\ndt,\ndd {\n  line-height: $line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n  dd {\n    @include clearfix; // Clear the floated `dt` if an empty `dd` is present\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    dt {\n      float: left;\n      width: ($dl-horizontal-offset - 20);\n      clear: left;\n      text-align: right;\n      @include text-overflow;\n    }\n    dd {\n      margin-left: $dl-horizontal-offset;\n    }\n  }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted $abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  @extend .text-uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: ($line-height-computed / 2) $line-height-computed;\n  margin: 0 0 $line-height-computed;\n  font-size: $blockquote-font-size;\n  border-left: 5px solid $blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: $line-height-base;\n    color: $blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid $blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Addresses\naddress {\n  margin-bottom: $line-height-computed;\n  font-style: normal;\n  line-height: $line-height-base;\n}\n"",""// Typography\n\n// [converter] $parent hack\n@mixin text-emphasis-variant($parent, $color) {\n  #{$parent} {\n    color: $color;\n  }\n  a#{$parent}:hover {\n    color: darken($color, 10%);\n  }\n}\n"",""// Contextual backgrounds\n\n// [converter] $parent hack\n@mixin bg-variant($parent, $color) {\n  #{$parent} {\n    background-color: $color;\n  }\n  a#{$parent}:hover {\n    background-color: darken($color, 10%);\n  }\n}\n"",""// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n@mixin clearfix() {\n  &:before,\n  &:after {\n    content: \"" \""; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n}\n"",""// Text overflow\n// Requires inline-block or block for proper styling\n\n@mixin text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n"",""//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: $code-color;\n  background-color: $code-bg;\n  border-radius: $border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: $kbd-color;\n  background-color: $kbd-bg;\n  border-radius: $border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: bold;\n    box-shadow: none;\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: (($line-height-computed - 1) / 2);\n  margin: 0 0 ($line-height-computed / 2);\n  font-size: ($font-size-base - 1); // 14px to 13px\n  line-height: $line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: $pre-color;\n  background-color: $pre-bg;\n  border: 1px solid $pre-border-color;\n  border-radius: $border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: $pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n"",""//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  @include container-fixed;\n\n  @media (min-width: $screen-sm-min) {\n    width: $container-sm;\n  }\n  @media (min-width: $screen-md-min) {\n    width: $container-md;\n  }\n  @media (min-width: $screen-lg-min) {\n    width: $container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  @include container-fixed;\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  @include make-row;\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@include make-grid-columns;\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n@include make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: $screen-sm-min) {\n  @include make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: $screen-md-min) {\n  @include make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: $screen-lg-min) {\n  @include make-grid(lg);\n}\n"",""// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n@mixin container-fixed($gutter: $grid-gutter-width) {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n  @include clearfix;\n}\n\n// Creates a wrapper for a series of columns\n@mixin make-row($gutter: $grid-gutter-width) {\n  margin-left:  ($gutter / -2);\n  margin-right: ($gutter / -2);\n  @include clearfix;\n}\n\n// Generate the extra small columns\n@mixin make-xs-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage(($columns / $grid-columns));\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n}\n@mixin make-xs-column-offset($columns) {\n  margin-left: percentage(($columns / $grid-columns));\n}\n@mixin make-xs-column-push($columns) {\n  left: percentage(($columns / $grid-columns));\n}\n@mixin make-xs-column-pull($columns) {\n  right: percentage(($columns / $grid-columns));\n}\n\n// Generate the small columns\n@mixin make-sm-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-sm-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-offset($columns) {\n  @media (min-width: $screen-sm-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-push($columns) {\n  @media (min-width: $screen-sm-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-pull($columns) {\n  @media (min-width: $screen-sm-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the medium columns\n@mixin make-md-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-md-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-offset($columns) {\n  @media (min-width: $screen-md-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-push($columns) {\n  @media (min-width: $screen-md-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-pull($columns) {\n  @media (min-width: $screen-md-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the large columns\n@mixin make-lg-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  @media (min-width: $screen-lg-min) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-offset($columns) {\n  @media (min-width: $screen-lg-min) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-push($columns) {\n  @media (min-width: $screen-lg-min) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-pull($columns) {\n  @media (min-width: $screen-lg-min) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n"",""// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin make-grid-columns($i: 1, $list: \"".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}\"") {\n  @for $i from (1 + 1) through $grid-columns {\n    $list: \""#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}\"";\n  }\n  #{$list} {\n    position: relative;\n    // Prevent columns from collapsing when empty\n    min-height: 1px;\n    // Inner gutter via padding\n    padding-left:  ($grid-gutter-width / 2);\n    padding-right: ($grid-gutter-width / 2);\n  }\n}\n\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin float-grid-columns($class, $i: 1, $list: \"".col-#{$class}-#{$i}\"") {\n  @for $i from (1 + 1) through $grid-columns {\n    $list: \""#{$list}, .col-#{$class}-#{$i}\"";\n  }\n  #{$list} {\n    float: left;\n  }\n}\n\n\n@mixin calc-grid-column($index, $class, $type) {\n  @if ($type == width) and ($index > 0) {\n    .col-#{$class}-#{$index} {\n      width: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == push) and ($index > 0) {\n    .col-#{$class}-push-#{$index} {\n      left: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == push) and ($index == 0) {\n    .col-#{$class}-push-0 {\n      left: auto;\n    }\n  }\n  @if ($type == pull) and ($index > 0) {\n    .col-#{$class}-pull-#{$index} {\n      right: percentage(($index / $grid-columns));\n    }\n  }\n  @if ($type == pull) and ($index == 0) {\n    .col-#{$class}-pull-0 {\n      right: auto;\n    }\n  }\n  @if ($type == offset) {\n    .col-#{$class}-offset-#{$index} {\n      margin-left: percentage(($index / $grid-columns));\n    }\n  }\n}\n\n// [converter] This is defined recursively in LESS, but Sass supports real loops\n@mixin loop-grid-columns($columns, $class, $type) {\n  @for $i from 0 through $columns {\n    @include calc-grid-column($i, $class, $type);\n  }\n}\n\n\n// Create grid for specific class\n@mixin make-grid($class) {\n  @include float-grid-columns($class);\n  @include loop-grid-columns($grid-columns, $class, width);\n  @include loop-grid-columns($grid-columns, $class, pull);\n  @include loop-grid-columns($grid-columns, $class, push);\n  @include loop-grid-columns($grid-columns, $class, offset);\n}\n"",""//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  background-color: $table-bg;\n}\ncaption {\n  padding-top: $table-cell-padding;\n  padding-bottom: $table-cell-padding;\n  color: $text-muted;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: $line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: $table-cell-padding;\n        line-height: $line-height-base;\n        vertical-align: top;\n        border-top: 1px solid $table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid $table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid $table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: $body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: $table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid $table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid $table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-of-type(odd) {\n    background-color: $table-bg-accent;\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    background-color: $table-bg-hover;\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\""col-\""] {\n  position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\""col-\""] {\n      position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n@include table-row-variant('active', $table-bg-active);\n@include table-row-variant('success', $state-success-bg);\n@include table-row-variant('info', $state-info-bg);\n@include table-row-variant('warning', $state-warning-bg);\n@include table-row-variant('danger', $state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  overflow-x: auto;\n  min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n  @media screen and (max-width: $screen-xs-max) {\n    width: 100%;\n    margin-bottom: ($line-height-computed * 0.75);\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid $table-border-color;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n"",""// Tables\n\n@mixin table-row-variant($state, $background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.#{$state},\n    > th.#{$state},\n    &.#{$state} > td,\n    &.#{$state} > th {\n      background-color: $background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.#{$state}:hover,\n    > th.#{$state}:hover,\n    &.#{$state}:hover > td,\n    &:hover > .#{$state},\n    &.#{$state}:hover > th {\n      background-color: darken($background, 5%);\n    }\n  }\n}\n"",""//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: $line-height-computed;\n  font-size: ($font-size-base * 1.5);\n  line-height: inherit;\n  color: $legend-color;\n  border: 0;\n  border-bottom: 1px solid $legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\""search\""] {\n  @include box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\""radio\""],\ninput[type=\""checkbox\""] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\""file\""] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\""range\""] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\""file\""]:focus,\ninput[type=\""radio\""]:focus,\ninput[type=\""checkbox\""]:focus {\n  @include tab-focus;\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: ($padding-base-vertical + 1);\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\""text\""]\n// input[type=\""password\""]\n// input[type=\""datetime\""]\n// input[type=\""datetime-local\""]\n// input[type=\""date\""]\n// input[type=\""month\""]\n// input[type=\""time\""]\n// input[type=\""week\""]\n// input[type=\""number\""]\n// input[type=\""email\""]\n// input[type=\""url\""]\n// input[type=\""search\""]\n// input[type=\""tel\""]\n// input[type=\""color\""]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: $padding-base-vertical $padding-base-horizontal;\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $input-color;\n  background-color: $input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid $input-border;\n  border-radius: $input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n  @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  @include form-control-focus;\n\n  // Placeholder\n  @include placeholder;\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    background-color: $input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n  }\n\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: $cursor-disabled;\n  }\n\n  // [converter] extracted textarea& to textarea.form-control\n}\n\n// Reset height for `textarea`s\ntextarea.form-control {\n  height: auto;\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\""search\""] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\""date\""],\n  input[type=\""time\""],\n  input[type=\""datetime-local\""],\n  input[type=\""month\""] {\n    line-height: $input-height-base;\n\n    &.input-sm,\n    .input-group-sm & {\n      line-height: $input-height-small;\n    }\n\n    &.input-lg,\n    .input-group-lg & {\n      line-height: $input-height-large;\n    }\n  }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: $form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n\n  label {\n    min-height: $line-height-computed; // Ensure the input doesn't jump when there is no text\n    padding-left: 20px;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\""radio\""],\n.radio-inline input[type=\""radio\""],\n.checkbox input[type=\""checkbox\""],\n.checkbox-inline input[type=\""checkbox\""] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\""radio\""],\ninput[type=\""checkbox\""] {\n  &[disabled],\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: $cursor-disabled;\n  }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: $cursor-disabled;\n  }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n  &.disabled,\n  fieldset[disabled] & {\n    label {\n      cursor: $cursor-disabled;\n    }\n  }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  // Size it appropriately next to real form controls\n  padding-top: ($padding-base-vertical + 1);\n  padding-bottom: ($padding-base-vertical + 1);\n  // Remove default margin from `p`\n  margin-bottom: 0;\n  min-height: ($line-height-computed + $font-size-base);\n\n  &.input-lg,\n  &.input-sm {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n@include input-size('.input-sm', $input-height-small, $padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $input-border-radius-small);\n.form-group-sm {\n\n  @include input-size('.form-control', $input-height-small, $padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $input-border-radius-small);\n\n  .form-control-static {\n    height: $input-height-small;\n    padding: $padding-small-vertical $padding-small-horizontal;\n    font-size: $font-size-small;\n    line-height: $line-height-small;\n    min-height: ($line-height-computed + $font-size-small);\n  }\n}\n\n@include input-size('.input-lg', $input-height-large, $padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $input-border-radius-large);\n.form-group-lg {\n\n  @include input-size('.form-control', $input-height-large, $padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $input-border-radius-large);\n\n  .form-control-static {\n    height: $input-height-large;\n    padding: $padding-large-vertical $padding-large-horizontal;\n    font-size: $font-size-large;\n    line-height: $line-height-large;\n    min-height: ($line-height-computed + $font-size-large);\n  }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: ($input-height-base * 1.25);\n  }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2; // Ensure icon is above input groups\n  display: block;\n  width: $input-height-base;\n  height: $input-height-base;\n  line-height: $input-height-base;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n  width: $input-height-large;\n  height: $input-height-large;\n  line-height: $input-height-large;\n}\n.input-sm + .form-control-feedback {\n  width: $input-height-small;\n  height: $input-height-small;\n  line-height: $input-height-small;\n}\n\n// Feedback states\n.has-success {\n  @include form-control-validation($state-success-text, $state-success-text, $state-success-bg);\n}\n.has-warning {\n  @include form-control-validation($state-warning-text, $state-warning-text, $state-warning-bg);\n}\n.has-error {\n  @include form-control-validation($state-danger-text, $state-danger-text, $state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n  & ~ .form-control-feedback {\n     top: ($line-height-computed + 5); // Height of the `label` and its margin\n  }\n  &.sr-only ~ .form-control-feedback {\n     top: 0;\n  }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten($text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n// [converter] extracted from `.form-inline` for libsass compatibility\n@mixin form-inline {\n\n  // Kick in the inline\n  @media (min-width: $screen-sm-min) {\n    // Inline-block all the things for \""inline\""\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n\n    // Make static controls behave like regular ones\n    .form-control-static {\n      display: inline-block;\n    }\n\n    .input-group {\n      display: inline-table;\n      vertical-align: middle;\n\n      .input-group-addon,\n      .input-group-btn,\n      .form-control {\n        width: auto;\n      }\n    }\n\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match.\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle;\n\n      label {\n        padding-left: 0;\n      }\n    }\n    .radio input[type=\""radio\""],\n    .checkbox input[type=\""checkbox\""] {\n      position: relative;\n      margin-left: 0;\n    }\n\n    // Re-override the feedback icon.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n// [converter] extracted as `@mixin form-inline` for libsass compatibility\n.form-inline {\n  @include form-inline;\n}\n\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of radios and checkboxes\n  //\n  // Labels also get some reset styles, but that is scoped to a media query below.\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: ($padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: ($line-height-computed + ($padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    @include make-row;\n  }\n\n  // Reset spacing and right align labels, but scope to media queries so that\n  // labels on narrow viewports stack the same as a default form example.\n  @media (min-width: $screen-sm-min) {\n    .control-label {\n      text-align: right;\n      margin-bottom: 0;\n      padding-top: ($padding-base-vertical + 1); // Default padding plus a border\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    right: ($grid-gutter-width / 2);\n  }\n\n  // Form group sizes\n  //\n  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n  // inputs and labels within a `.form-group`.\n  .form-group-lg {\n    @media (min-width: $screen-sm-min) {\n      .control-label {\n        padding-top: (($padding-large-vertical * $line-height-large) + 1);\n      }\n    }\n  }\n  .form-group-sm {\n    @media (min-width: $screen-sm-min) {\n      .control-label {\n        padding-top: ($padding-small-vertical + 1);\n      }\n    }\n  }\n}\n"",""// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline,\n  &.radio label,\n  &.checkbox label,\n  &.radio-inline label,\n  &.checkbox-inline label  {\n    color: $text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: $border-color;\n    @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken($border-color, 10%);\n      $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%);\n      @include box-shadow($shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: $text-color;\n    border-color: $border-color;\n    background-color: $background-color;\n  }\n  // Optional feedback icon\n  .form-control-feedback {\n    color: $text-color;\n  }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus($color: $input-border-focus) {\n  $color-rgba: rgba(red($color), green($color), blue($color), .6);\n  &:focus {\n    border-color: $color;\n    outline: 0;\n    @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba);\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n// [converter] $parent hack\n@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  #{$parent} {\n    height: $input-height;\n    padding: $padding-vertical $padding-horizontal;\n    font-size: $font-size;\n    line-height: $line-height;\n    border-radius: $border-radius;\n  }\n\n  select#{$parent} {\n    height: $input-height;\n    line-height: $input-height;\n  }\n\n  textarea#{$parent},\n  select[multiple]#{$parent} {\n    height: auto;\n  }\n}\n"",""//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: $btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $border-radius-base);\n  @include user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus,\n    &.focus {\n      @include tab-focus;\n    }\n  }\n\n  &:hover,\n  &:focus,\n  &.focus {\n    color: $btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: $cursor-disabled;\n    pointer-events: none; // Future-proof disabling of clicks\n    @include opacity(.65);\n    @include box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);\n}\n.btn-primary {\n  @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: $link-color;\n  font-weight: normal;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &.active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    @include box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: $link-hover-color;\n    text-decoration: $link-hover-decoration;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: $btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);\n}\n.btn-xs {\n  @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\""submit\""],\ninput[type=\""reset\""],\ninput[type=\""button\""] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n"",""// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($color, $background, $border) {\n  color: $color;\n  background-color: $background;\n  border-color: $border;\n\n  &:hover,\n  &:focus,\n  &.focus,\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &.focus,\n    &:active,\n    &.active {\n      background-color: $background;\n          border-color: $border;\n    }\n  }\n\n  .badge {\n    color: $background;\n    background-color: $color;\n  }\n}\n\n// Button sizes\n@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  padding: $padding-vertical $padding-horizontal;\n  font-size: $font-size;\n  line-height: $line-height;\n  border-radius: $border-radius;\n}\n"",""// Opacity\n\n@mixin opacity($opacity) {\n  opacity: $opacity;\n  // IE8 filter\n  $opacity-ie: ($opacity * 100);\n  filter: alpha(opacity=$opacity-ie);\n}\n"",""//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  @include transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in      { display: block; }\n  // [converter] extracted tr&.in to tr.collapse.in\n  // [converter] extracted tbody&.in to tbody.collapse.in\n}\n\ntr.collapse.in    { display: table-row; }\n\ntbody.collapse.in { display: table-row-group; }\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  @include transition-property(height, visibility);\n  @include transition-duration(.35s);\n  @include transition-timing-function(ease);\n}\n"",""//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   $caret-width-base dashed;\n  border-right: $caret-width-base solid transparent;\n  border-left:  $caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: $zindex-dropdown;\n  display: none; // none by default, but block on \""open\"" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: $font-size-base;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  background-color: $dropdown-bg;\n  border: 1px solid $dropdown-fallback-border; // IE8 fallback\n  border: 1px solid $dropdown-border;\n  border-radius: $border-radius-base;\n  @include box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    @include nav-divider($dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: $line-height-base;\n    color: $dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: $dropdown-link-hover-color;\n    background-color: $dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: $dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: $dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: $dropdown-link-disabled-color;\n  }\n\n  // Nuke hover/focus effects\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    @include reset-filter;\n    cursor: $cursor-disabled;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: $font-size-small;\n  line-height: $line-height-base;\n  color: $dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: ($zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: $caret-width-base solid;\n    content: \""\"";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 2px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: $grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      right: 0; left: auto;\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      left: 0; right: auto;\n    }\n  }\n}\n"",""@import \""variables\"";\n/* begin _bootstrap-variable-defaults */\n/* These are bootstrap-specific variables that will be set here to be inhereted by bootstrap*/\n\n\n$zindex-dropdown: $z-index-flyout + 1;\n\n$zindex-modal: $bb-zindex-dropdown-append-to-body - 1;\n$border-color: #e7eaec;\n\n$icon-font-path: 'sky/bootstrap/fonts/' !default;\n\n$nav-link-padding: 0px 5px !default;\n$alert-padding: 10px !default;\n\n$link-color: $bb-color-blue;\n\n$modal-inner-padding: $padding !default;\n$modal-title-padding: $padding-plus-half !default;\n\n$font-family-sans-serif: \""open sans\"", \""Helvetica Neue\"", Helvetica, Arial, sans-serif !default;\n\n$font-family-serif: BenchNine, Trebuchet, serif !default;\n$font-family-base: $font-family-sans-serif !default;\n\n/* end _bootstrap-variable-defaults */\n\n/* Font Awesome defaults */\n$fa-font-path: 'sky/fontawesome/fonts' !default;\n"",""// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: #e5e5e5) {\n  height: 1px;\n  margin: (($line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: $color;\n}\n"",""// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n@mixin reset-filter() {\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n"",""//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \""active\"" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  @include clearfix;\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    @include border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  @include border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  @include border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { @extend .btn-xs; }\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    @include box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: $caret-width-large $caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 $caret-width-large $caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    @include clearfix;\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: $border-radius-base;\n    @include border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: $border-radius-base;\n    @include border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  @include border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n\n  > .btn-group .dropdown-menu {\n    left: auto;\n  }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \""hide\"" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\""buttons\""] {\n  > .btn,\n  > .btn-group > .btn {\n    input[type=\""radio\""],\n    input[type=\""checkbox\""] {\n      position: absolute;\n      clip: rect(0,0,0,0);\n      pointer-events: none;\n    }\n  }\n}\n"",""// Single side border-radius\n\n@mixin border-top-radius($radius) {\n  border-top-right-radius: $radius;\n   border-top-left-radius: $radius;\n}\n@mixin border-right-radius($radius) {\n  border-bottom-right-radius: $radius;\n     border-top-right-radius: $radius;\n}\n@mixin border-bottom-radius($radius) {\n  border-bottom-right-radius: $radius;\n   border-bottom-left-radius: $radius;\n}\n@mixin border-left-radius($radius) {\n  border-bottom-left-radius: $radius;\n     border-top-left-radius: $radius;\n}\n"",""//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\""col-\""] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  @extend .input-lg;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  @extend .input-sm;\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: $padding-base-vertical $padding-base-horizontal;\n  font-size: $font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: $input-color;\n  text-align: center;\n  background-color: $input-group-addon-bg;\n  border: 1px solid $input-group-addon-border-color;\n  border-radius: $border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: $padding-small-vertical $padding-small-horizontal;\n    font-size: $font-size-small;\n    border-radius: $border-radius-small;\n  }\n  &.input-lg {\n    padding: $padding-large-vertical $padding-large-horizontal;\n    font-size: $font-size-large;\n    border-radius: $border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\""radio\""],\n  input[type=\""checkbox\""] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  @include border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  @include border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \""active\"" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n"",""//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  @include clearfix;\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: $nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: $nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: $nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: $nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: $cursor-disabled;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: $nav-link-hover-bg;\n      border-color: $link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    @include nav-divider;\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid $nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: $line-height-base;\n      border: 1px solid transparent;\n      border-radius: $border-radius-base $border-radius-base 0 0;\n      &:hover {\n        border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $nav-tabs-active-link-hover-color;\n        background-color: $nav-tabs-active-link-hover-bg;\n        border: 1px solid $nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    @extend .nav-justified;\n    @extend .nav-tabs-justified;\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: $nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $nav-pills-active-link-hover-color;\n        background-color: $nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n    > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: $screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: $border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid $nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: $screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid $nav-tabs-justified-link-border-color;\n      border-radius: $border-radius-base $border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: $nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  @include border-top-radius(0);\n}\n"",""//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: $navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  @include clearfix;\n\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: $navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  @include clearfix;\n\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: $navbar-padding-horizontal;\n  padding-left:  $navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  @include clearfix;\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  .navbar-collapse {\n    max-height: $navbar-collapse-max-height;\n\n    @media (max-device-width: $screen-xs-min) and (orientation: landscape) {\n      max-height: 200px;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -$navbar-padding-horizontal;\n    margin-left:  -$navbar-padding-horizontal;\n\n    @media (min-width: $grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: $zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: $zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: $navbar-padding-vertical $navbar-padding-horizontal;\n  font-size: $font-size-large;\n  line-height: $line-height-computed;\n  height: $navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  > img {\n    display: block;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -$navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: $navbar-padding-horizontal;\n  padding: 9px 10px;\n  @include navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: $border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: 0;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal);\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: $line-height-computed;\n  }\n\n  @media (max-width: $grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: $line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    $navbar-padding-vertical;\n        padding-bottom: $navbar-padding-vertical;\n      }\n    }\n  }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -$navbar-padding-horizontal;\n  margin-right: -$navbar-padding-horizontal;\n  padding: 10px $navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  @include box-shadow($shadow);\n\n  // Mixin behavior for optimum display\n  @include form-inline;\n\n  .form-group {\n    @media (max-width: $grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  @include navbar-vertical-align($input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: $grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    @include box-shadow(none);\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  @include border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  @include border-top-radius($navbar-border-radius);\n  @include border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  @include navbar-vertical-align($input-height-base);\n\n  &.btn-sm {\n    @include navbar-vertical-align($input-height-small);\n  }\n  &.btn-xs {\n    @include navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  @include navbar-vertical-align($line-height-computed);\n\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n    margin-left: $navbar-padding-horizontal;\n    margin-right: $navbar-padding-horizontal;\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: $grid-float-breakpoint) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  margin-right: -$navbar-padding-horizontal;\n\n    ~ .navbar-right {\n      margin-right: 0;\n    }\n  }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: $navbar-default-bg;\n  border-color: $navbar-default-border;\n\n  .navbar-brand {\n    color: $navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: $navbar-default-brand-hover-color;\n      background-color: $navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: $navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: $navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-hover-color;\n        background-color: $navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-active-color;\n        background-color: $navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-disabled-color;\n        background-color: $navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: $navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: $navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: $navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: $navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: $navbar-default-link-active-bg;\n        color: $navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: $grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: $navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-hover-color;\n            background-color: $navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-active-color;\n            background-color: $navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-disabled-color;\n            background-color: $navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: $navbar-default-link-color;\n    &:hover {\n      color: $navbar-default-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: $navbar-default-link-color;\n    &:hover,\n    &:focus {\n      color: $navbar-default-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-disabled-color;\n      }\n    }\n  }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: $navbar-inverse-bg;\n  border-color: $navbar-inverse-border;\n\n  .navbar-brand {\n    color: $navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: $navbar-inverse-brand-hover-color;\n      background-color: $navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: $navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: $navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-hover-color;\n        background-color: $navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-active-color;\n        background-color: $navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-disabled-color;\n        background-color: $navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: $navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: $navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: $navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken($navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: $navbar-inverse-link-active-bg;\n        color: $navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: $grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: $navbar-inverse-border;\n        }\n        .divider {\n          background-color: $navbar-inverse-border;\n        }\n        > li > a {\n          color: $navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-hover-color;\n            background-color: $navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-active-color;\n            background-color: $navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-disabled-color;\n            background-color: $navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: $navbar-inverse-link-color;\n    &:hover {\n      color: $navbar-inverse-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: $navbar-inverse-link-color;\n    &:hover,\n    &:focus {\n      color: $navbar-inverse-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-disabled-color;\n      }\n    }\n  }\n}\n"",""// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n@mixin navbar-vertical-align($element-height) {\n  margin-top: (($navbar-height - $element-height) / 2);\n  margin-bottom: (($navbar-height - $element-height) / 2);\n}\n"",""//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;\n  margin-bottom: $line-height-computed;\n  list-style: none;\n  background-color: $breadcrumb-bg;\n  border-radius: $border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \""#{$breadcrumb-separator}\\00a0\""; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: $breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: $breadcrumb-active-color;\n  }\n}\n"",""//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: $line-height-computed 0;\n  border-radius: $border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: $padding-base-vertical $padding-base-horizontal;\n      line-height: $line-height-base;\n      text-decoration: none;\n      color: $pagination-color;\n      background-color: $pagination-bg;\n      border: 1px solid $pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        @include border-left-radius($border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        @include border-right-radius($border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: $pagination-hover-color;\n      background-color: $pagination-hover-bg;\n      border-color: $pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: $pagination-active-color;\n      background-color: $pagination-active-bg;\n      border-color: $pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: $pagination-disabled-color;\n      background-color: $pagination-disabled-bg;\n      border-color: $pagination-disabled-border;\n      cursor: $cursor-disabled;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small);\n}\n"",""// Pagination\n\n@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: $padding-vertical $padding-horizontal;\n      font-size: $font-size;\n    }\n    &:first-child {\n      > a,\n      > span {\n        @include border-left-radius($border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        @include border-right-radius($border-radius);\n      }\n    }\n  }\n}\n"",""//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: $line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  @include clearfix;\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: $pager-bg;\n      border: 1px solid $pager-border;\n      border-radius: $pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: $pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: $pager-disabled-color;\n      background-color: $pager-bg;\n      cursor: $cursor-disabled;\n    }\n  }\n}\n"",""//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: $label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // [converter] extracted a& to a.label\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Add hover effects, but only for links\na.label {\n  &:hover,\n  &:focus {\n    color: $label-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  @include label-variant($label-default-bg);\n}\n\n.label-primary {\n  @include label-variant($label-primary-bg);\n}\n\n.label-success {\n  @include label-variant($label-success-bg);\n}\n\n.label-info {\n  @include label-variant($label-info-bg);\n}\n\n.label-warning {\n  @include label-variant($label-warning-bg);\n}\n\n.label-danger {\n  @include label-variant($label-danger-bg);\n}\n"",""// Labels\n\n@mixin label-variant($color) {\n  background-color: $color;\n\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken($color, 10%);\n    }\n  }\n}\n"",""//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: $font-size-small;\n  font-weight: $badge-font-weight;\n  color: $badge-color;\n  line-height: $badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: $badge-bg;\n  border-radius: $badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n\n  .btn-xs &,\n  .btn-group-xs > .btn & {\n    top: 0;\n    padding: 1px 5px;\n  }\n\n  // [converter] extracted a& to a.badge\n\n  // Account for badges in navs\n  .list-group-item.active > &,\n  .nav-pills > .active > a > & {\n    color: $badge-active-color;\n    background-color: $badge-active-bg;\n  }\n\n  .list-group-item > & {\n    float: right;\n  }\n\n  .list-group-item > & + & {\n    margin-right: 5px;\n  }\n\n  .nav-pills > li > a > & {\n    margin-left: 3px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: $badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n"",""//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: $jumbotron-padding ($jumbotron-padding / 2);\n  margin-bottom: $jumbotron-padding;\n  color: $jumbotron-color;\n  background-color: $jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: $jumbotron-heading-color;\n  }\n\n  p {\n    margin-bottom: ($jumbotron-padding / 2);\n    font-size: $jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  > hr {\n    border-top-color: darken($jumbotron-bg, 10%);\n  }\n\n  .container &,\n  .container-fluid & {\n    border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: $screen-sm-min) {\n    padding: ($jumbotron-padding * 1.6) 0;\n\n    .container &,\n    .container-fluid & {\n      padding-left:  ($jumbotron-padding * 2);\n      padding-right: ($jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: ($font-size-base * 4.5);\n    }\n  }\n}\n"",""//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: $thumbnail-padding;\n  margin-bottom: $line-height-computed;\n  line-height: $line-height-base;\n  background-color: $thumbnail-bg;\n  border: 1px solid $thumbnail-border;\n  border-radius: $thumbnail-border-radius;\n  @include transition(border .2s ease-in-out);\n\n  > img,\n  a > img {\n    @include img-responsive;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active\n\n  // Image captions\n  .caption {\n    padding: $thumbnail-caption-padding;\n    color: $thumbnail-caption-color;\n  }\n}\n\n// Add a hover state for linked versions only\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: $link-color;\n}\n"",""//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: $alert-padding;\n  margin-bottom: $line-height-computed;\n  border: 1px solid transparent;\n  border-radius: $alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing $headings-color\n    color: inherit;\n  }\n\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: $alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n  padding-right: ($alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);\n}\n\n.alert-info {\n  @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);\n}\n\n.alert-warning {\n  @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);\n}\n\n.alert-danger {\n  @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);\n}\n"",""// Alerts\n\n@mixin alert-variant($background, $border, $text-color) {\n  background-color: $background;\n  border-color: $border;\n  color: $text-color;\n\n  hr {\n    border-top-color: darken($border, 5%);\n  }\n  .alert-link {\n    color: darken($text-color, 10%);\n  }\n}\n"",""//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: $line-height-computed;\n  margin-bottom: $line-height-computed;\n  background-color: $progress-bg;\n  border-radius: $progress-border-radius;\n  @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: $font-size-small;\n  line-height: $line-height-computed;\n  color: $progress-bar-color;\n  text-align: center;\n  background-color: $progress-bar-bg;\n  @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  @include transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  @include gradient-striped;\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n  @include animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  @include progress-bar-variant($progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  @include progress-bar-variant($progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  @include progress-bar-variant($progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  @include progress-bar-variant($progress-bar-danger-bg);\n}\n"",""// Gradients\n\n\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12\n  background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent);  // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent);  // Opera 12\n  background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down\n}\n\n@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {\n  background-repeat: repeat-x;\n  background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+\n  background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12\n  background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n}\n@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n  background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n  background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-radial($inner-color: #555, $outer-color: #333) {\n  background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);\n  background-image: radial-gradient(circle, $inner-color, $outer-color);\n  background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {\n  background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n  background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n"",""// Progress bars\n\n@mixin progress-bar-variant($color) {\n  background-color: $color;\n\n  // Deprecated parent class requirement as of v3.2.0\n  .progress-striped & {\n    @include gradient-striped;\n  }\n}\n"","".media {\n  // Proper spacing between instances of .media\n  margin-top: 15px;\n\n  &:first-child {\n    margin-top: 0;\n  }\n}\n\n.media,\n.media-body {\n  zoom: 1;\n  overflow: hidden;\n}\n\n.media-body {\n  width: 10000px;\n}\n\n.media-object {\n  display: block;\n}\n\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n\n.media-middle {\n  vertical-align: middle;\n}\n\n.media-bottom {\n  vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n"",""//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  margin-bottom: 20px;\n  padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: $list-group-bg;\n  border: 1px solid $list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    @include border-top-radius($list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    @include border-bottom-radius($list-group-border-radius);\n  }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n  color: $list-group-link-color;\n\n  .list-group-item-heading {\n    color: $list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: $list-group-link-hover-color;\n    background-color: $list-group-hover-bg;\n  }\n}\n\n.list-group-item {\n  // Disabled state\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:focus {\n    background-color: $list-group-disabled-bg;\n    color: $list-group-disabled-color;\n    cursor: $cursor-disabled;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: $list-group-disabled-text-color;\n    }\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: $list-group-active-color;\n    background-color: $list-group-active-bg;\n    border-color: $list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading,\n    .list-group-item-heading > small,\n    .list-group-item-heading > .small {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: $list-group-active-text-color;\n    }\n  }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@include list-group-item-variant(success, $state-success-bg, $state-success-text);\n@include list-group-item-variant(info, $state-info-bg, $state-info-text);\n@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text);\n@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n"",""// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n  .list-group-item-#{$state} {\n    color: $color;\n    background-color: $background;\n\n    // [converter] extracted a& to a.list-group-item-#{$state}\n  }\n\n  a.list-group-item-#{$state} {\n    color: $color;\n\n    .list-group-item-heading {\n      color: inherit;\n    }\n\n    &:hover,\n    &:focus {\n      color: $color;\n      background-color: darken($background, 5%);\n    }\n    &.active,\n    &.active:hover,\n    &.active:focus {\n      color: #fff;\n      background-color: $color;\n      border-color: $color;\n    }\n  }\n}\n"",""//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: $line-height-computed;\n  background-color: $panel-bg;\n  border: 1px solid transparent;\n  border-radius: $panel-border-radius;\n  @include box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n  padding: $panel-body-padding;\n  @include clearfix;\n}\n\n// Optional heading\n.panel-heading {\n  padding: $panel-heading-padding;\n  border-bottom: 1px solid transparent;\n  @include border-top-radius(($panel-border-radius - 1));\n\n  > .dropdown .dropdown-toggle {\n    color: inherit;\n  }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil(($font-size-base * 1.125));\n  color: inherit;\n\n  > a,\n  > small,\n  > .small,\n  > small > a,\n  > .small > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: $panel-footer-padding;\n  background-color: $panel-footer-bg;\n  border-top: 1px solid $panel-inner-border;\n  @include border-bottom-radius(($panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group,\n  > .panel-collapse > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n      border-radius: 0;\n    }\n\n    // Add border top radius for first one\n    &:first-child {\n      .list-group-item:first-child {\n        border-top: 0;\n        @include border-top-radius(($panel-border-radius - 1));\n      }\n    }\n    // Add border bottom radius for last one\n    &:last-child {\n      .list-group-item:last-child {\n        border-bottom: 0;\n        @include border-bottom-radius(($panel-border-radius - 1));\n      }\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive > .table,\n  > .panel-collapse > .table {\n    margin-bottom: 0;\n\n    caption {\n      padding-left: $panel-body-padding;\n      padding-right: $panel-body-padding;\n    }\n  }\n  // Add border top radius for first one\n  > .table:first-child,\n  > .table-responsive:first-child > .table:first-child {\n    @include border-top-radius(($panel-border-radius - 1));\n\n    > thead:first-child,\n    > tbody:first-child {\n      > tr:first-child {\n        border-top-left-radius: ($panel-border-radius - 1);\n        border-top-right-radius: ($panel-border-radius - 1);\n\n        td:first-child,\n        th:first-child {\n          border-top-left-radius: ($panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-top-right-radius: ($panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  // Add border bottom radius for last one\n  > .table:last-child,\n  > .table-responsive:last-child > .table:last-child {\n    @include border-bottom-radius(($panel-border-radius - 1));\n\n    > tbody:last-child,\n    > tfoot:last-child {\n      > tr:last-child {\n        border-bottom-left-radius: ($panel-border-radius - 1);\n        border-bottom-right-radius: ($panel-border-radius - 1);\n\n        td:first-child,\n        th:first-child {\n          border-bottom-left-radius: ($panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-bottom-right-radius: ($panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive,\n  > .table + .panel-body,\n  > .table-responsive + .panel-body {\n    border-top: 1px solid $table-border-color;\n  }\n  > .table > tbody:first-child > tr:first-child th,\n  > .table > tbody:first-child > tr:first-child td {\n    border-top: 0;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n    border: 0;\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th:first-child,\n        > td:first-child {\n          border-left: 0;\n        }\n        > th:last-child,\n        > td:last-child {\n          border-right: 0;\n        }\n      }\n    }\n    > thead,\n    > tbody {\n      > tr:first-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n    > tbody,\n    > tfoot {\n      > tr:last-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n  > .table-responsive {\n    border: 0;\n    margin-bottom: 0;\n  }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  margin-bottom: $line-height-computed;\n\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: $panel-border-radius;\n\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n\n    + .panel-collapse > .panel-body,\n    + .panel-collapse > .list-group {\n      border-top: 1px solid $panel-inner-border;\n    }\n  }\n\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid $panel-inner-border;\n    }\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  @include panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border);\n}\n.panel-primary {\n  @include panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border);\n}\n.panel-success {\n  @include panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border);\n}\n.panel-info {\n  @include panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border);\n}\n.panel-warning {\n  @include panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border);\n}\n.panel-danger {\n  @include panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border);\n}\n"",""// Panels\n\n@mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) {\n  border-color: $border;\n\n  & > .panel-heading {\n    color: $heading-text-color;\n    background-color: $heading-bg-color;\n    border-color: $heading-border;\n\n    + .panel-collapse > .panel-body {\n      border-top-color: $border;\n    }\n    .badge {\n      color: $heading-bg-color;\n      background-color: $heading-text-color;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse > .panel-body {\n      border-bottom-color: $border;\n    }\n  }\n}\n"",""// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n\n  .embed-responsive-item,\n  iframe,\n  embed,\n  object,\n  video {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    height: 100%;\n    width: 100%;\n    border: 0;\n  }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n"",""//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: $well-bg;\n  border: 1px solid $well-border;\n  border-radius: $border-radius-base;\n  @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0,0,0,.15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: $border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: $border-radius-small;\n}\n"",""//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: ($font-size-base * 1.5);\n  font-weight: $close-font-weight;\n  line-height: 1;\n  color: $close-color;\n  text-shadow: $close-text-shadow;\n  @include opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: $close-color;\n    text-decoration: none;\n    cursor: pointer;\n    @include opacity(.5);\n  }\n\n  // [converter] extracted button& to button.close\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\""#\""`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n"",""//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: $zindex-modal;\n  -webkit-overflow-scrolling: touch;\n\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    @include translate(0, -25%);\n    @include transition-transform(0.3s ease-out);\n  }\n  &.in .modal-dialog { @include translate(0, 0) }\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: $modal-content-bg;\n  border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid $modal-content-border-color;\n  border-radius: $border-radius-large;\n  @include box-shadow(0 3px 9px rgba(0,0,0,.5));\n  background-clip: padding-box;\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: $zindex-modal-background;\n  background-color: $modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { @include opacity(0); }\n  &.in { @include opacity($modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: $modal-title-padding;\n  border-bottom: 1px solid $modal-header-border-color;\n  min-height: ($modal-title-padding + $modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  padding: $modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid $modal-footer-border-color;\n  @include clearfix; // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; // account for input[type=\""submit\""] which gets the bottom margin like all other inputs\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: $screen-sm-min) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    width: $modal-md;\n    margin: 30px auto;\n  }\n  .modal-content {\n    @include box-shadow(0 5px 15px rgba(0,0,0,.5));\n  }\n\n  // Modal sizes\n  .modal-sm { width: $modal-sm; }\n}\n\n@media (min-width: $screen-md-min) {\n  .modal-lg { width: $modal-lg; }\n}\n"",""//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n  position: absolute;\n  z-index: $zindex-tooltip;\n  display: block;\n  // Reset font and text properties given new insertion method\n  font-family: $font-family-base;\n  font-size: $font-size-small;\n  font-weight: normal;\n  line-height: 1.4;\n  @include opacity(0);\n\n  &.in     { @include opacity($tooltip-opacity); }\n  &.top    { margin-top:  -3px; padding: $tooltip-arrow-width 0; }\n  &.right  { margin-left:  3px; padding: 0 $tooltip-arrow-width; }\n  &.bottom { margin-top:   3px; padding: $tooltip-arrow-width 0; }\n  &.left   { margin-left: -3px; padding: 0 $tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: $tooltip-max-width;\n  padding: 3px 8px;\n  color: $tooltip-color;\n  text-align: center;\n  text-decoration: none;\n  background-color: $tooltip-bg;\n  border-radius: $border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n  &.top .tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-top-color: $tooltip-arrow-color;\n  }\n  &.top-left .tooltip-arrow {\n    bottom: 0;\n    right: $tooltip-arrow-width;\n    margin-bottom: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-top-color: $tooltip-arrow-color;\n  }\n  &.top-right .tooltip-arrow {\n    bottom: 0;\n    left: $tooltip-arrow-width;\n    margin-bottom: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-top-color: $tooltip-arrow-color;\n  }\n  &.right .tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-right-color: $tooltip-arrow-color;\n  }\n  &.left .tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-left-color: $tooltip-arrow-color;\n  }\n  &.bottom .tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -$tooltip-arrow-width;\n    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-bottom-color: $tooltip-arrow-color;\n  }\n  &.bottom-left .tooltip-arrow {\n    top: 0;\n    right: $tooltip-arrow-width;\n    margin-top: -$tooltip-arrow-width;\n    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-bottom-color: $tooltip-arrow-color;\n  }\n  &.bottom-right .tooltip-arrow {\n    top: 0;\n    left: $tooltip-arrow-width;\n    margin-top: -$tooltip-arrow-width;\n    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-bottom-color: $tooltip-arrow-color;\n  }\n}\n"",""//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: $zindex-popover;\n  display: none;\n  max-width: $popover-max-width;\n  padding: 1px;\n  // Reset font and text properties given new insertion method\n  font-family: $font-family-base;\n  font-size: $font-size-base;\n  font-weight: normal;\n  line-height: $line-height-base;\n  text-align: left;\n  background-color: $popover-bg;\n  background-clip: padding-box;\n  border: 1px solid $popover-fallback-border-color;\n  border: 1px solid $popover-border-color;\n  border-radius: $border-radius-large;\n  @include box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n  // Overrides for proper insertion\n  white-space: normal;\n\n  // Offset the popover to account for the popover arrow\n  &.top     { margin-top: -$popover-arrow-width; }\n  &.right   { margin-left: $popover-arrow-width; }\n  &.bottom  { margin-top: $popover-arrow-width; }\n  &.left    { margin-left: -$popover-arrow-width; }\n}\n\n.popover-title {\n  margin: 0; // reset heading margin\n  padding: 8px 14px;\n  font-size: $font-size-base;\n  background-color: $popover-title-bg;\n  border-bottom: 1px solid darken($popover-title-bg, 5%);\n  border-radius: ($border-radius-large - 1) ($border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n  &,\n  &:after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n  }\n}\n.popover > .arrow {\n  border-width: $popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n  border-width: $popover-arrow-width;\n  content: \""\"";\n}\n\n.popover {\n  &.top > .arrow {\n    left: 50%;\n    margin-left: -$popover-arrow-outer-width;\n    border-bottom-width: 0;\n    border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n    border-top-color: $popover-arrow-outer-color;\n    bottom: -$popover-arrow-outer-width;\n    &:after {\n      content: \"" \"";\n      bottom: 1px;\n      margin-left: -$popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: $popover-arrow-color;\n    }\n  }\n  &.right > .arrow {\n    top: 50%;\n    left: -$popover-arrow-outer-width;\n    margin-top: -$popover-arrow-outer-width;\n    border-left-width: 0;\n    border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n    border-right-color: $popover-arrow-outer-color;\n    &:after {\n      content: \"" \"";\n      left: 1px;\n      bottom: -$popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: $popover-arrow-color;\n    }\n  }\n  &.bottom > .arrow {\n    left: 50%;\n    margin-left: -$popover-arrow-outer-width;\n    border-top-width: 0;\n    border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n    border-bottom-color: $popover-arrow-outer-color;\n    top: -$popover-arrow-outer-width;\n    &:after {\n      content: \"" \"";\n      top: 1px;\n      margin-left: -$popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: $popover-arrow-color;\n    }\n  }\n\n  &.left > .arrow {\n    top: 50%;\n    right: -$popover-arrow-outer-width;\n    margin-top: -$popover-arrow-outer-width;\n    border-right-width: 0;\n    border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n    border-left-color: $popover-arrow-outer-color;\n    &:after {\n      content: \"" \"";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: $popover-arrow-color;\n      bottom: -$popover-arrow-width;\n    }\n  }\n}\n"",""//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    @include transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      @include img-responsive;\n      line-height: 1;\n    }\n\n    // WebKit CSS3 transforms for supported devices\n    @media all and (transform-3d), (-webkit-transform-3d) {\n      @include transition-transform(0.6s ease-in-out);\n      @include backface-visibility(hidden);\n      @include perspective(1000);\n\n      &.next,\n      &.active.right {\n        @include translate3d(100%, 0, 0);\n        left: 0;\n      }\n      &.prev,\n      &.active.left {\n        @include translate3d(-100%, 0, 0);\n        left: 0;\n      }\n      &.next.left,\n      &.prev.right,\n      &.active {\n        @include translate3d(0, 0, 0);\n        left: 0;\n      }\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev {\n    display: block;\n  }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: $carousel-control-width;\n  @include opacity($carousel-control-opacity);\n  font-size: $carousel-control-font-size;\n  color: $carousel-control-color;\n  text-align: center;\n  text-shadow: $carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: 0;\n    color: $carousel-control-color;\n    text-decoration: none;\n    @include opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n    margin-left: -10px;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n    margin-right: -10px;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    line-height: 1;\n    font-family: serif;\n  }\n\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid $carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: $carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: $carousel-caption-color;\n  text-align: center;\n  text-shadow: $carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: $screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      font-size: 30px;\n    }\n    .glyphicon-chevron-left,\n    .icon-prev {\n      margin-left: -15px;\n    }\n    .glyphicon-chevron-right,\n    .icon-next {\n      margin-right: -15px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n"",""//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  @include clearfix;\n}\n.center-block {\n  @include center-block;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  @include text-hide;\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n"",""// Center-align a block level element\n\n@mixin center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n"",""// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n@mixin hide-text() {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n// New mixin to use as of v3.0.1\n@mixin text-hide() {\n  @include hide-text;\n}\n"",""//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n\n@include responsive-invisibility('.visible-xs');\n@include responsive-invisibility('.visible-sm');\n@include responsive-invisibility('.visible-md');\n@include responsive-invisibility('.visible-lg');\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n\n@media (max-width: $screen-xs-max) {\n  @include responsive-visibility('.visible-xs');\n}\n.visible-xs-block {\n  @media (max-width: $screen-xs-max) {\n    display: block !important;\n  }\n}\n.visible-xs-inline {\n  @media (max-width: $screen-xs-max) {\n    display: inline !important;\n  }\n}\n.visible-xs-inline-block {\n  @media (max-width: $screen-xs-max) {\n    display: inline-block !important;\n  }\n}\n\n@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n  @include responsive-visibility('.visible-sm');\n}\n.visible-sm-block {\n  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n    display: block !important;\n  }\n}\n.visible-sm-inline {\n  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n    display: inline !important;\n  }\n}\n.visible-sm-inline-block {\n  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n    display: inline-block !important;\n  }\n}\n\n@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n  @include responsive-visibility('.visible-md');\n}\n.visible-md-block {\n  @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n    display: block !important;\n  }\n}\n.visible-md-inline {\n  @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n    display: inline !important;\n  }\n}\n.visible-md-inline-block {\n  @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n    display: inline-block !important;\n  }\n}\n\n@media (min-width: $screen-lg-min) {\n  @include responsive-visibility('.visible-lg');\n}\n.visible-lg-block {\n  @media (min-width: $screen-lg-min) {\n    display: block !important;\n  }\n}\n.visible-lg-inline {\n  @media (min-width: $screen-lg-min) {\n    display: inline !important;\n  }\n}\n.visible-lg-inline-block {\n  @media (min-width: $screen-lg-min) {\n    display: inline-block !important;\n  }\n}\n\n@media (max-width: $screen-xs-max) {\n  @include responsive-invisibility('.hidden-xs');\n}\n\n@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n  @include responsive-invisibility('.hidden-sm');\n}\n\n@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n  @include responsive-invisibility('.hidden-md');\n}\n\n@media (min-width: $screen-lg-min) {\n  @include responsive-invisibility('.hidden-lg');\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n\n@include responsive-invisibility('.visible-print');\n\n@media print {\n  @include responsive-visibility('.visible-print');\n}\n.visible-print-block {\n  display: none !important;\n\n  @media print {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n\n  @media print {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n\n  @media print {\n    display: inline-block !important;\n  }\n}\n\n@media print {\n  @include responsive-invisibility('.hidden-print');\n}\n"",""// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n// [converter] $parent hack\n@mixin responsive-visibility($parent) {\n  #{$parent} {\n    display: block !important;\n  }\n  table#{$parent}  { display: table; }\n  tr#{$parent}     { display: table-row !important; }\n  th#{$parent},\n  td#{$parent}     { display: table-cell !important; }\n}\n\n// [converter] $parent hack\n@mixin responsive-invisibility($parent) {\n  #{$parent} {\n    display: none !important;\n  }\n}\n"",""/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n@import \""variables\"";\n@import \""mixins\"";\n@import \""path\"";\n@import \""core\"";\n@import \""larger\"";\n@import \""fixed-width\"";\n@import \""list\"";\n@import \""bordered-pulled\"";\n@import \""animated\"";\n@import \""rotated-flipped\"";\n@import \""stacked\"";\n@import \""icons\"";\n@import \""screen-reader\"";\n"",""/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),\n    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),\n    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');\n//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"",""// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n"",""// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.#{$fa-css-prefix}-2x { font-size: 2em; }\n.#{$fa-css-prefix}-3x { font-size: 3em; }\n.#{$fa-css-prefix}-4x { font-size: 4em; }\n.#{$fa-css-prefix}-5x { font-size: 5em; }\n"",""// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"",""// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: $fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.#{$fa-css-prefix}-li {\n  position: absolute;\n  left: -$fa-li-width;\n  width: $fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.#{$fa-css-prefix}-lg {\n    left: -$fa-li-width + (4em / 14);\n  }\n}\n"",""// Variables\n// --------------------------\n\n$fa-font-path:        \""../fonts\"" !default;\n$fa-font-size-base:   14px !default;\n$fa-line-height-base: 1 !default;\n//$fa-font-path:        \""//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts\"" !default; // for referencing Bootstrap CDN font files directly\n$fa-css-prefix:       fa !default;\n$fa-version:          \""4.7.0\"" !default;\n$fa-border-color:     #eee !default;\n$fa-inverse:          #fff !default;\n$fa-li-width:         (30em / 14) !default;\n\n$fa-var-500px: \""\\f26e\"";\n$fa-var-address-book: \""\\f2b9\"";\n$fa-var-address-book-o: \""\\f2ba\"";\n$fa-var-address-card: \""\\f2bb\"";\n$fa-var-address-card-o: \""\\f2bc\"";\n$fa-var-adjust: \""\\f042\"";\n$fa-var-adn: \""\\f170\"";\n$fa-var-align-center: \""\\f037\"";\n$fa-var-align-justify: \""\\f039\"";\n$fa-var-align-left: \""\\f036\"";\n$fa-var-align-right: \""\\f038\"";\n$fa-var-amazon: \""\\f270\"";\n$fa-var-ambulance: \""\\f0f9\"";\n$fa-var-american-sign-language-interpreting: \""\\f2a3\"";\n$fa-var-anchor: \""\\f13d\"";\n$fa-var-android: \""\\f17b\"";\n$fa-var-angellist: \""\\f209\"";\n$fa-var-angle-double-down: \""\\f103\"";\n$fa-var-angle-double-left: \""\\f100\"";\n$fa-var-angle-double-right: \""\\f101\"";\n$fa-var-angle-double-up: \""\\f102\"";\n$fa-var-angle-down: \""\\f107\"";\n$fa-var-angle-left: \""\\f104\"";\n$fa-var-angle-right: \""\\f105\"";\n$fa-var-angle-up: \""\\f106\"";\n$fa-var-apple: \""\\f179\"";\n$fa-var-archive: \""\\f187\"";\n$fa-var-area-chart: \""\\f1fe\"";\n$fa-var-arrow-circle-down: \""\\f0ab\"";\n$fa-var-arrow-circle-left: \""\\f0a8\"";\n$fa-var-arrow-circle-o-down: \""\\f01a\"";\n$fa-var-arrow-circle-o-left: \""\\f190\"";\n$fa-var-arrow-circle-o-right: \""\\f18e\"";\n$fa-var-arrow-circle-o-up: \""\\f01b\"";\n$fa-var-arrow-circle-right: \""\\f0a9\"";\n$fa-var-arrow-circle-up: \""\\f0aa\"";\n$fa-var-arrow-down: \""\\f063\"";\n$fa-var-arrow-left: \""\\f060\"";\n$fa-var-arrow-right: \""\\f061\"";\n$fa-var-arrow-up: \""\\f062\"";\n$fa-var-arrows: \""\\f047\"";\n$fa-var-arrows-alt: \""\\f0b2\"";\n$fa-var-arrows-h: \""\\f07e\"";\n$fa-var-arrows-v: \""\\f07d\"";\n$fa-var-asl-interpreting: \""\\f2a3\"";\n$fa-var-assistive-listening-systems: \""\\f2a2\"";\n$fa-var-asterisk: \""\\f069\"";\n$fa-var-at: \""\\f1fa\"";\n$fa-var-audio-description: \""\\f29e\"";\n$fa-var-automobile: \""\\f1b9\"";\n$fa-var-backward: \""\\f04a\"";\n$fa-var-balance-scale: \""\\f24e\"";\n$fa-var-ban: \""\\f05e\"";\n$fa-var-bandcamp: \""\\f2d5\"";\n$fa-var-bank: \""\\f19c\"";\n$fa-var-bar-chart: \""\\f080\"";\n$fa-var-bar-chart-o: \""\\f080\"";\n$fa-var-barcode: \""\\f02a\"";\n$fa-var-bars: \""\\f0c9\"";\n$fa-var-bath: \""\\f2cd\"";\n$fa-var-bathtub: \""\\f2cd\"";\n$fa-var-battery: \""\\f240\"";\n$fa-var-battery-0: \""\\f244\"";\n$fa-var-battery-1: \""\\f243\"";\n$fa-var-battery-2: \""\\f242\"";\n$fa-var-battery-3: \""\\f241\"";\n$fa-var-battery-4: \""\\f240\"";\n$fa-var-battery-empty: \""\\f244\"";\n$fa-var-battery-full: \""\\f240\"";\n$fa-var-battery-half: \""\\f242\"";\n$fa-var-battery-quarter: \""\\f243\"";\n$fa-var-battery-three-quarters: \""\\f241\"";\n$fa-var-bed: \""\\f236\"";\n$fa-var-beer: \""\\f0fc\"";\n$fa-var-behance: \""\\f1b4\"";\n$fa-var-behance-square: \""\\f1b5\"";\n$fa-var-bell: \""\\f0f3\"";\n$fa-var-bell-o: \""\\f0a2\"";\n$fa-var-bell-slash: \""\\f1f6\"";\n$fa-var-bell-slash-o: \""\\f1f7\"";\n$fa-var-bicycle: \""\\f206\"";\n$fa-var-binoculars: \""\\f1e5\"";\n$fa-var-birthday-cake: \""\\f1fd\"";\n$fa-var-bitbucket: \""\\f171\"";\n$fa-var-bitbucket-square: \""\\f172\"";\n$fa-var-bitcoin: \""\\f15a\"";\n$fa-var-black-tie: \""\\f27e\"";\n$fa-var-blind: \""\\f29d\"";\n$fa-var-bluetooth: \""\\f293\"";\n$fa-var-bluetooth-b: \""\\f294\"";\n$fa-var-bold: \""\\f032\"";\n$fa-var-bolt: \""\\f0e7\"";\n$fa-var-bomb: \""\\f1e2\"";\n$fa-var-book: \""\\f02d\"";\n$fa-var-bookmark: \""\\f02e\"";\n$fa-var-bookmark-o: \""\\f097\"";\n$fa-var-braille: \""\\f2a1\"";\n$fa-var-briefcase: \""\\f0b1\"";\n$fa-var-btc: \""\\f15a\"";\n$fa-var-bug: \""\\f188\"";\n$fa-var-building: \""\\f1ad\"";\n$fa-var-building-o: \""\\f0f7\"";\n$fa-var-bullhorn: \""\\f0a1\"";\n$fa-var-bullseye: \""\\f140\"";\n$fa-var-bus: \""\\f207\"";\n$fa-var-buysellads: \""\\f20d\"";\n$fa-var-cab: \""\\f1ba\"";\n$fa-var-calculator: \""\\f1ec\"";\n$fa-var-calendar: \""\\f073\"";\n$fa-var-calendar-check-o: \""\\f274\"";\n$fa-var-calendar-minus-o: \""\\f272\"";\n$fa-var-calendar-o: \""\\f133\"";\n$fa-var-calendar-plus-o: \""\\f271\"";\n$fa-var-calendar-times-o: \""\\f273\"";\n$fa-var-camera: \""\\f030\"";\n$fa-var-camera-retro: \""\\f083\"";\n$fa-var-car: \""\\f1b9\"";\n$fa-var-caret-down: \""\\f0d7\"";\n$fa-var-caret-left: \""\\f0d9\"";\n$fa-var-caret-right: \""\\f0da\"";\n$fa-var-caret-square-o-down: \""\\f150\"";\n$fa-var-caret-square-o-left: \""\\f191\"";\n$fa-var-caret-square-o-right: \""\\f152\"";\n$fa-var-caret-square-o-up: \""\\f151\"";\n$fa-var-caret-up: \""\\f0d8\"";\n$fa-var-cart-arrow-down: \""\\f218\"";\n$fa-var-cart-plus: \""\\f217\"";\n$fa-var-cc: \""\\f20a\"";\n$fa-var-cc-amex: \""\\f1f3\"";\n$fa-var-cc-diners-club: \""\\f24c\"";\n$fa-var-cc-discover: \""\\f1f2\"";\n$fa-var-cc-jcb: \""\\f24b\"";\n$fa-var-cc-mastercard: \""\\f1f1\"";\n$fa-var-cc-paypal: \""\\f1f4\"";\n$fa-var-cc-stripe: \""\\f1f5\"";\n$fa-var-cc-visa: \""\\f1f0\"";\n$fa-var-certificate: \""\\f0a3\"";\n$fa-var-chain: \""\\f0c1\"";\n$fa-var-chain-broken: \""\\f127\"";\n$fa-var-check: \""\\f00c\"";\n$fa-var-check-circle: \""\\f058\"";\n$fa-var-check-circle-o: \""\\f05d\"";\n$fa-var-check-square: \""\\f14a\"";\n$fa-var-check-square-o: \""\\f046\"";\n$fa-var-chevron-circle-down: \""\\f13a\"";\n$fa-var-chevron-circle-left: \""\\f137\"";\n$fa-var-chevron-circle-right: \""\\f138\"";\n$fa-var-chevron-circle-up: \""\\f139\"";\n$fa-var-chevron-down: \""\\f078\"";\n$fa-var-chevron-left: \""\\f053\"";\n$fa-var-chevron-right: \""\\f054\"";\n$fa-var-chevron-up: \""\\f077\"";\n$fa-var-child: \""\\f1ae\"";\n$fa-var-chrome: \""\\f268\"";\n$fa-var-circle: \""\\f111\"";\n$fa-var-circle-o: \""\\f10c\"";\n$fa-var-circle-o-notch: \""\\f1ce\"";\n$fa-var-circle-thin: \""\\f1db\"";\n$fa-var-clipboard: \""\\f0ea\"";\n$fa-var-clock-o: \""\\f017\"";\n$fa-var-clone: \""\\f24d\"";\n$fa-var-close: \""\\f00d\"";\n$fa-var-cloud: \""\\f0c2\"";\n$fa-var-cloud-download: \""\\f0ed\"";\n$fa-var-cloud-upload: \""\\f0ee\"";\n$fa-var-cny: \""\\f157\"";\n$fa-var-code: \""\\f121\"";\n$fa-var-code-fork: \""\\f126\"";\n$fa-var-codepen: \""\\f1cb\"";\n$fa-var-codiepie: \""\\f284\"";\n$fa-var-coffee: \""\\f0f4\"";\n$fa-var-cog: \""\\f013\"";\n$fa-var-cogs: \""\\f085\"";\n$fa-var-columns: \""\\f0db\"";\n$fa-var-comment: \""\\f075\"";\n$fa-var-comment-o: \""\\f0e5\"";\n$fa-var-commenting: \""\\f27a\"";\n$fa-var-commenting-o: \""\\f27b\"";\n$fa-var-comments: \""\\f086\"";\n$fa-var-comments-o: \""\\f0e6\"";\n$fa-var-compass: \""\\f14e\"";\n$fa-var-compress: \""\\f066\"";\n$fa-var-connectdevelop: \""\\f20e\"";\n$fa-var-contao: \""\\f26d\"";\n$fa-var-copy: \""\\f0c5\"";\n$fa-var-copyright: \""\\f1f9\"";\n$fa-var-creative-commons: \""\\f25e\"";\n$fa-var-credit-card: \""\\f09d\"";\n$fa-var-credit-card-alt: \""\\f283\"";\n$fa-var-crop: \""\\f125\"";\n$fa-var-crosshairs: \""\\f05b\"";\n$fa-var-css3: \""\\f13c\"";\n$fa-var-cube: \""\\f1b2\"";\n$fa-var-cubes: \""\\f1b3\"";\n$fa-var-cut: \""\\f0c4\"";\n$fa-var-cutlery: \""\\f0f5\"";\n$fa-var-dashboard: \""\\f0e4\"";\n$fa-var-dashcube: \""\\f210\"";\n$fa-var-database: \""\\f1c0\"";\n$fa-var-deaf: \""\\f2a4\"";\n$fa-var-deafness: \""\\f2a4\"";\n$fa-var-dedent: \""\\f03b\"";\n$fa-var-delicious: \""\\f1a5\"";\n$fa-var-desktop: \""\\f108\"";\n$fa-var-deviantart: \""\\f1bd\"";\n$fa-var-diamond: \""\\f219\"";\n$fa-var-digg: \""\\f1a6\"";\n$fa-var-dollar: \""\\f155\"";\n$fa-var-dot-circle-o: \""\\f192\"";\n$fa-var-download: \""\\f019\"";\n$fa-var-dribbble: \""\\f17d\"";\n$fa-var-drivers-license: \""\\f2c2\"";\n$fa-var-drivers-license-o: \""\\f2c3\"";\n$fa-var-dropbox: \""\\f16b\"";\n$fa-var-drupal: \""\\f1a9\"";\n$fa-var-edge: \""\\f282\"";\n$fa-var-edit: \""\\f044\"";\n$fa-var-eercast: \""\\f2da\"";\n$fa-var-eject: \""\\f052\"";\n$fa-var-ellipsis-h: \""\\f141\"";\n$fa-var-ellipsis-v: \""\\f142\"";\n$fa-var-empire: \""\\f1d1\"";\n$fa-var-envelope: \""\\f0e0\"";\n$fa-var-envelope-o: \""\\f003\"";\n$fa-var-envelope-open: \""\\f2b6\"";\n$fa-var-envelope-open-o: \""\\f2b7\"";\n$fa-var-envelope-square: \""\\f199\"";\n$fa-var-envira: \""\\f299\"";\n$fa-var-eraser: \""\\f12d\"";\n$fa-var-etsy: \""\\f2d7\"";\n$fa-var-eur: \""\\f153\"";\n$fa-var-euro: \""\\f153\"";\n$fa-var-exchange: \""\\f0ec\"";\n$fa-var-exclamation: \""\\f12a\"";\n$fa-var-exclamation-circle: \""\\f06a\"";\n$fa-var-exclamation-triangle: \""\\f071\"";\n$fa-var-expand: \""\\f065\"";\n$fa-var-expeditedssl: \""\\f23e\"";\n$fa-var-external-link: \""\\f08e\"";\n$fa-var-external-link-square: \""\\f14c\"";\n$fa-var-eye: \""\\f06e\"";\n$fa-var-eye-slash: \""\\f070\"";\n$fa-var-eyedropper: \""\\f1fb\"";\n$fa-var-fa: \""\\f2b4\"";\n$fa-var-facebook: \""\\f09a\"";\n$fa-var-facebook-f: \""\\f09a\"";\n$fa-var-facebook-official: \""\\f230\"";\n$fa-var-facebook-square: \""\\f082\"";\n$fa-var-fast-backward: \""\\f049\"";\n$fa-var-fast-forward: \""\\f050\"";\n$fa-var-fax: \""\\f1ac\"";\n$fa-var-feed: \""\\f09e\"";\n$fa-var-female: \""\\f182\"";\n$fa-var-fighter-jet: \""\\f0fb\"";\n$fa-var-file: \""\\f15b\"";\n$fa-var-file-archive-o: \""\\f1c6\"";\n$fa-var-file-audio-o: \""\\f1c7\"";\n$fa-var-file-code-o: \""\\f1c9\"";\n$fa-var-file-excel-o: \""\\f1c3\"";\n$fa-var-file-image-o: \""\\f1c5\"";\n$fa-var-file-movie-o: \""\\f1c8\"";\n$fa-var-file-o: \""\\f016\"";\n$fa-var-file-pdf-o: \""\\f1c1\"";\n$fa-var-file-photo-o: \""\\f1c5\"";\n$fa-var-file-picture-o: \""\\f1c5\"";\n$fa-var-file-powerpoint-o: \""\\f1c4\"";\n$fa-var-file-sound-o: \""\\f1c7\"";\n$fa-var-file-text: \""\\f15c\"";\n$fa-var-file-text-o: \""\\f0f6\"";\n$fa-var-file-video-o: \""\\f1c8\"";\n$fa-var-file-word-o: \""\\f1c2\"";\n$fa-var-file-zip-o: \""\\f1c6\"";\n$fa-var-files-o: \""\\f0c5\"";\n$fa-var-film: \""\\f008\"";\n$fa-var-filter: \""\\f0b0\"";\n$fa-var-fire: \""\\f06d\"";\n$fa-var-fire-extinguisher: \""\\f134\"";\n$fa-var-firefox: \""\\f269\"";\n$fa-var-first-order: \""\\f2b0\"";\n$fa-var-flag: \""\\f024\"";\n$fa-var-flag-checkered: \""\\f11e\"";\n$fa-var-flag-o: \""\\f11d\"";\n$fa-var-flash: \""\\f0e7\"";\n$fa-var-flask: \""\\f0c3\"";\n$fa-var-flickr: \""\\f16e\"";\n$fa-var-floppy-o: \""\\f0c7\"";\n$fa-var-folder: \""\\f07b\"";\n$fa-var-folder-o: \""\\f114\"";\n$fa-var-folder-open: \""\\f07c\"";\n$fa-var-folder-open-o: \""\\f115\"";\n$fa-var-font: \""\\f031\"";\n$fa-var-font-awesome: \""\\f2b4\"";\n$fa-var-fonticons: \""\\f280\"";\n$fa-var-fort-awesome: \""\\f286\"";\n$fa-var-forumbee: \""\\f211\"";\n$fa-var-forward: \""\\f04e\"";\n$fa-var-foursquare: \""\\f180\"";\n$fa-var-free-code-camp: \""\\f2c5\"";\n$fa-var-frown-o: \""\\f119\"";\n$fa-var-futbol-o: \""\\f1e3\"";\n$fa-var-gamepad: \""\\f11b\"";\n$fa-var-gavel: \""\\f0e3\"";\n$fa-var-gbp: \""\\f154\"";\n$fa-var-ge: \""\\f1d1\"";\n$fa-var-gear: \""\\f013\"";\n$fa-var-gears: \""\\f085\"";\n$fa-var-genderless: \""\\f22d\"";\n$fa-var-get-pocket: \""\\f265\"";\n$fa-var-gg: \""\\f260\"";\n$fa-var-gg-circle: \""\\f261\"";\n$fa-var-gift: \""\\f06b\"";\n$fa-var-git: \""\\f1d3\"";\n$fa-var-git-square: \""\\f1d2\"";\n$fa-var-github: \""\\f09b\"";\n$fa-var-github-alt: \""\\f113\"";\n$fa-var-github-square: \""\\f092\"";\n$fa-var-gitlab: \""\\f296\"";\n$fa-var-gittip: \""\\f184\"";\n$fa-var-glass: \""\\f000\"";\n$fa-var-glide: \""\\f2a5\"";\n$fa-var-glide-g: \""\\f2a6\"";\n$fa-var-globe: \""\\f0ac\"";\n$fa-var-google: \""\\f1a0\"";\n$fa-var-google-plus: \""\\f0d5\"";\n$fa-var-google-plus-circle: \""\\f2b3\"";\n$fa-var-google-plus-official: \""\\f2b3\"";\n$fa-var-google-plus-square: \""\\f0d4\"";\n$fa-var-google-wallet: \""\\f1ee\"";\n$fa-var-graduation-cap: \""\\f19d\"";\n$fa-var-gratipay: \""\\f184\"";\n$fa-var-grav: \""\\f2d6\"";\n$fa-var-group: \""\\f0c0\"";\n$fa-var-h-square: \""\\f0fd\"";\n$fa-var-hacker-news: \""\\f1d4\"";\n$fa-var-hand-grab-o: \""\\f255\"";\n$fa-var-hand-lizard-o: \""\\f258\"";\n$fa-var-hand-o-down: \""\\f0a7\"";\n$fa-var-hand-o-left: \""\\f0a5\"";\n$fa-var-hand-o-right: \""\\f0a4\"";\n$fa-var-hand-o-up: \""\\f0a6\"";\n$fa-var-hand-paper-o: \""\\f256\"";\n$fa-var-hand-peace-o: \""\\f25b\"";\n$fa-var-hand-pointer-o: \""\\f25a\"";\n$fa-var-hand-rock-o: \""\\f255\"";\n$fa-var-hand-scissors-o: \""\\f257\"";\n$fa-var-hand-spock-o: \""\\f259\"";\n$fa-var-hand-stop-o: \""\\f256\"";\n$fa-var-handshake-o: \""\\f2b5\"";\n$fa-var-hard-of-hearing: \""\\f2a4\"";\n$fa-var-hashtag: \""\\f292\"";\n$fa-var-hdd-o: \""\\f0a0\"";\n$fa-var-header: \""\\f1dc\"";\n$fa-var-headphones: \""\\f025\"";\n$fa-var-heart: \""\\f004\"";\n$fa-var-heart-o: \""\\f08a\"";\n$fa-var-heartbeat: \""\\f21e\"";\n$fa-var-history: \""\\f1da\"";\n$fa-var-home: \""\\f015\"";\n$fa-var-hospital-o: \""\\f0f8\"";\n$fa-var-hotel: \""\\f236\"";\n$fa-var-hourglass: \""\\f254\"";\n$fa-var-hourglass-1: \""\\f251\"";\n$fa-var-hourglass-2: \""\\f252\"";\n$fa-var-hourglass-3: \""\\f253\"";\n$fa-var-hourglass-end: \""\\f253\"";\n$fa-var-hourglass-half: \""\\f252\"";\n$fa-var-hourglass-o: \""\\f250\"";\n$fa-var-hourglass-start: \""\\f251\"";\n$fa-var-houzz: \""\\f27c\"";\n$fa-var-html5: \""\\f13b\"";\n$fa-var-i-cursor: \""\\f246\"";\n$fa-var-id-badge: \""\\f2c1\"";\n$fa-var-id-card: \""\\f2c2\"";\n$fa-var-id-card-o: \""\\f2c3\"";\n$fa-var-ils: \""\\f20b\"";\n$fa-var-image: \""\\f03e\"";\n$fa-var-imdb: \""\\f2d8\"";\n$fa-var-inbox: \""\\f01c\"";\n$fa-var-indent: \""\\f03c\"";\n$fa-var-industry: \""\\f275\"";\n$fa-var-info: \""\\f129\"";\n$fa-var-info-circle: \""\\f05a\"";\n$fa-var-inr: \""\\f156\"";\n$fa-var-instagram: \""\\f16d\"";\n$fa-var-institution: \""\\f19c\"";\n$fa-var-internet-explorer: \""\\f26b\"";\n$fa-var-intersex: \""\\f224\"";\n$fa-var-ioxhost: \""\\f208\"";\n$fa-var-italic: \""\\f033\"";\n$fa-var-joomla: \""\\f1aa\"";\n$fa-var-jpy: \""\\f157\"";\n$fa-var-jsfiddle: \""\\f1cc\"";\n$fa-var-key: \""\\f084\"";\n$fa-var-keyboard-o: \""\\f11c\"";\n$fa-var-krw: \""\\f159\"";\n$fa-var-language: \""\\f1ab\"";\n$fa-var-laptop: \""\\f109\"";\n$fa-var-lastfm: \""\\f202\"";\n$fa-var-lastfm-square: \""\\f203\"";\n$fa-var-leaf: \""\\f06c\"";\n$fa-var-leanpub: \""\\f212\"";\n$fa-var-legal: \""\\f0e3\"";\n$fa-var-lemon-o: \""\\f094\"";\n$fa-var-level-down: \""\\f149\"";\n$fa-var-level-up: \""\\f148\"";\n$fa-var-life-bouy: \""\\f1cd\"";\n$fa-var-life-buoy: \""\\f1cd\"";\n$fa-var-life-ring: \""\\f1cd\"";\n$fa-var-life-saver: \""\\f1cd\"";\n$fa-var-lightbulb-o: \""\\f0eb\"";\n$fa-var-line-chart: \""\\f201\"";\n$fa-var-link: \""\\f0c1\"";\n$fa-var-linkedin: \""\\f0e1\"";\n$fa-var-linkedin-square: \""\\f08c\"";\n$fa-var-linode: \""\\f2b8\"";\n$fa-var-linux: \""\\f17c\"";\n$fa-var-list: \""\\f03a\"";\n$fa-var-list-alt: \""\\f022\"";\n$fa-var-list-ol: \""\\f0cb\"";\n$fa-var-list-ul: \""\\f0ca\"";\n$fa-var-location-arrow: \""\\f124\"";\n$fa-var-lock: \""\\f023\"";\n$fa-var-long-arrow-down: \""\\f175\"";\n$fa-var-long-arrow-left: \""\\f177\"";\n$fa-var-long-arrow-right: \""\\f178\"";\n$fa-var-long-arrow-up: \""\\f176\"";\n$fa-var-low-vision: \""\\f2a8\"";\n$fa-var-magic: \""\\f0d0\"";\n$fa-var-magnet: \""\\f076\"";\n$fa-var-mail-forward: \""\\f064\"";\n$fa-var-mail-reply: \""\\f112\"";\n$fa-var-mail-reply-all: \""\\f122\"";\n$fa-var-male: \""\\f183\"";\n$fa-var-map: \""\\f279\"";\n$fa-var-map-marker: \""\\f041\"";\n$fa-var-map-o: \""\\f278\"";\n$fa-var-map-pin: \""\\f276\"";\n$fa-var-map-signs: \""\\f277\"";\n$fa-var-mars: \""\\f222\"";\n$fa-var-mars-double: \""\\f227\"";\n$fa-var-mars-stroke: \""\\f229\"";\n$fa-var-mars-stroke-h: \""\\f22b\"";\n$fa-var-mars-stroke-v: \""\\f22a\"";\n$fa-var-maxcdn: \""\\f136\"";\n$fa-var-meanpath: \""\\f20c\"";\n$fa-var-medium: \""\\f23a\"";\n$fa-var-medkit: \""\\f0fa\"";\n$fa-var-meetup: \""\\f2e0\"";\n$fa-var-meh-o: \""\\f11a\"";\n$fa-var-mercury: \""\\f223\"";\n$fa-var-microchip: \""\\f2db\"";\n$fa-var-microphone: \""\\f130\"";\n$fa-var-microphone-slash: \""\\f131\"";\n$fa-var-minus: \""\\f068\"";\n$fa-var-minus-circle: \""\\f056\"";\n$fa-var-minus-square: \""\\f146\"";\n$fa-var-minus-square-o: \""\\f147\"";\n$fa-var-mixcloud: \""\\f289\"";\n$fa-var-mobile: \""\\f10b\"";\n$fa-var-mobile-phone: \""\\f10b\"";\n$fa-var-modx: \""\\f285\"";\n$fa-var-money: \""\\f0d6\"";\n$fa-var-moon-o: \""\\f186\"";\n$fa-var-mortar-board: \""\\f19d\"";\n$fa-var-motorcycle: \""\\f21c\"";\n$fa-var-mouse-pointer: \""\\f245\"";\n$fa-var-music: \""\\f001\"";\n$fa-var-navicon: \""\\f0c9\"";\n$fa-var-neuter: \""\\f22c\"";\n$fa-var-newspaper-o: \""\\f1ea\"";\n$fa-var-object-group: \""\\f247\"";\n$fa-var-object-ungroup: \""\\f248\"";\n$fa-var-odnoklassniki: \""\\f263\"";\n$fa-var-odnoklassniki-square: \""\\f264\"";\n$fa-var-opencart: \""\\f23d\"";\n$fa-var-openid: \""\\f19b\"";\n$fa-var-opera: \""\\f26a\"";\n$fa-var-optin-monster: \""\\f23c\"";\n$fa-var-outdent: \""\\f03b\"";\n$fa-var-pagelines: \""\\f18c\"";\n$fa-var-paint-brush: \""\\f1fc\"";\n$fa-var-paper-plane: \""\\f1d8\"";\n$fa-var-paper-plane-o: \""\\f1d9\"";\n$fa-var-paperclip: \""\\f0c6\"";\n$fa-var-paragraph: \""\\f1dd\"";\n$fa-var-paste: \""\\f0ea\"";\n$fa-var-pause: \""\\f04c\"";\n$fa-var-pause-circle: \""\\f28b\"";\n$fa-var-pause-circle-o: \""\\f28c\"";\n$fa-var-paw: \""\\f1b0\"";\n$fa-var-paypal: \""\\f1ed\"";\n$fa-var-pencil: \""\\f040\"";\n$fa-var-pencil-square: \""\\f14b\"";\n$fa-var-pencil-square-o: \""\\f044\"";\n$fa-var-percent: \""\\f295\"";\n$fa-var-phone: \""\\f095\"";\n$fa-var-phone-square: \""\\f098\"";\n$fa-var-photo: \""\\f03e\"";\n$fa-var-picture-o: \""\\f03e\"";\n$fa-var-pie-chart: \""\\f200\"";\n$fa-var-pied-piper: \""\\f2ae\"";\n$fa-var-pied-piper-alt: \""\\f1a8\"";\n$fa-var-pied-piper-pp: \""\\f1a7\"";\n$fa-var-pinterest: \""\\f0d2\"";\n$fa-var-pinterest-p: \""\\f231\"";\n$fa-var-pinterest-square: \""\\f0d3\"";\n$fa-var-plane: \""\\f072\"";\n$fa-var-play: \""\\f04b\"";\n$fa-var-play-circle: \""\\f144\"";\n$fa-var-play-circle-o: \""\\f01d\"";\n$fa-var-plug: \""\\f1e6\"";\n$fa-var-plus: \""\\f067\"";\n$fa-var-plus-circle: \""\\f055\"";\n$fa-var-plus-square: \""\\f0fe\"";\n$fa-var-plus-square-o: \""\\f196\"";\n$fa-var-podcast: \""\\f2ce\"";\n$fa-var-power-off: \""\\f011\"";\n$fa-var-print: \""\\f02f\"";\n$fa-var-product-hunt: \""\\f288\"";\n$fa-var-puzzle-piece: \""\\f12e\"";\n$fa-var-qq: \""\\f1d6\"";\n$fa-var-qrcode: \""\\f029\"";\n$fa-var-question: \""\\f128\"";\n$fa-var-question-circle: \""\\f059\"";\n$fa-var-question-circle-o: \""\\f29c\"";\n$fa-var-quora: \""\\f2c4\"";\n$fa-var-quote-left: \""\\f10d\"";\n$fa-var-quote-right: \""\\f10e\"";\n$fa-var-ra: \""\\f1d0\"";\n$fa-var-random: \""\\f074\"";\n$fa-var-ravelry: \""\\f2d9\"";\n$fa-var-rebel: \""\\f1d0\"";\n$fa-var-recycle: \""\\f1b8\"";\n$fa-var-reddit: \""\\f1a1\"";\n$fa-var-reddit-alien: \""\\f281\"";\n$fa-var-reddit-square: \""\\f1a2\"";\n$fa-var-refresh: \""\\f021\"";\n$fa-var-registered: \""\\f25d\"";\n$fa-var-remove: \""\\f00d\"";\n$fa-var-renren: \""\\f18b\"";\n$fa-var-reorder: \""\\f0c9\"";\n$fa-var-repeat: \""\\f01e\"";\n$fa-var-reply: \""\\f112\"";\n$fa-var-reply-all: \""\\f122\"";\n$fa-var-resistance: \""\\f1d0\"";\n$fa-var-retweet: \""\\f079\"";\n$fa-var-rmb: \""\\f157\"";\n$fa-var-road: \""\\f018\"";\n$fa-var-rocket: \""\\f135\"";\n$fa-var-rotate-left: \""\\f0e2\"";\n$fa-var-rotate-right: \""\\f01e\"";\n$fa-var-rouble: \""\\f158\"";\n$fa-var-rss: \""\\f09e\"";\n$fa-var-rss-square: \""\\f143\"";\n$fa-var-rub: \""\\f158\"";\n$fa-var-ruble: \""\\f158\"";\n$fa-var-rupee: \""\\f156\"";\n$fa-var-s15: \""\\f2cd\"";\n$fa-var-safari: \""\\f267\"";\n$fa-var-save: \""\\f0c7\"";\n$fa-var-scissors: \""\\f0c4\"";\n$fa-var-scribd: \""\\f28a\"";\n$fa-var-search: \""\\f002\"";\n$fa-var-search-minus: \""\\f010\"";\n$fa-var-search-plus: \""\\f00e\"";\n$fa-var-sellsy: \""\\f213\"";\n$fa-var-send: \""\\f1d8\"";\n$fa-var-send-o: \""\\f1d9\"";\n$fa-var-server: \""\\f233\"";\n$fa-var-share: \""\\f064\"";\n$fa-var-share-alt: \""\\f1e0\"";\n$fa-var-share-alt-square: \""\\f1e1\"";\n$fa-var-share-square: \""\\f14d\"";\n$fa-var-share-square-o: \""\\f045\"";\n$fa-var-shekel: \""\\f20b\"";\n$fa-var-sheqel: \""\\f20b\"";\n$fa-var-shield: \""\\f132\"";\n$fa-var-ship: \""\\f21a\"";\n$fa-var-shirtsinbulk: \""\\f214\"";\n$fa-var-shopping-bag: \""\\f290\"";\n$fa-var-shopping-basket: \""\\f291\"";\n$fa-var-shopping-cart: \""\\f07a\"";\n$fa-var-shower: \""\\f2cc\"";\n$fa-var-sign-in: \""\\f090\"";\n$fa-var-sign-language: \""\\f2a7\"";\n$fa-var-sign-out: \""\\f08b\"";\n$fa-var-signal: \""\\f012\"";\n$fa-var-signing: \""\\f2a7\"";\n$fa-var-simplybuilt: \""\\f215\"";\n$fa-var-sitemap: \""\\f0e8\"";\n$fa-var-skyatlas: \""\\f216\"";\n$fa-var-skype: \""\\f17e\"";\n$fa-var-slack: \""\\f198\"";\n$fa-var-sliders: \""\\f1de\"";\n$fa-var-slideshare: \""\\f1e7\"";\n$fa-var-smile-o: \""\\f118\"";\n$fa-var-snapchat: \""\\f2ab\"";\n$fa-var-snapchat-ghost: \""\\f2ac\"";\n$fa-var-snapchat-square: \""\\f2ad\"";\n$fa-var-snowflake-o: \""\\f2dc\"";\n$fa-var-soccer-ball-o: \""\\f1e3\"";\n$fa-var-sort: \""\\f0dc\"";\n$fa-var-sort-alpha-asc: \""\\f15d\"";\n$fa-var-sort-alpha-desc: \""\\f15e\"";\n$fa-var-sort-amount-asc: \""\\f160\"";\n$fa-var-sort-amount-desc: \""\\f161\"";\n$fa-var-sort-asc: \""\\f0de\"";\n$fa-var-sort-desc: \""\\f0dd\"";\n$fa-var-sort-down: \""\\f0dd\"";\n$fa-var-sort-numeric-asc: \""\\f162\"";\n$fa-var-sort-numeric-desc: \""\\f163\"";\n$fa-var-sort-up: \""\\f0de\"";\n$fa-var-soundcloud: \""\\f1be\"";\n$fa-var-space-shuttle: \""\\f197\"";\n$fa-var-spinner: \""\\f110\"";\n$fa-var-spoon: \""\\f1b1\"";\n$fa-var-spotify: \""\\f1bc\"";\n$fa-var-square: \""\\f0c8\"";\n$fa-var-square-o: \""\\f096\"";\n$fa-var-stack-exchange: \""\\f18d\"";\n$fa-var-stack-overflow: \""\\f16c\"";\n$fa-var-star: \""\\f005\"";\n$fa-var-star-half: \""\\f089\"";\n$fa-var-star-half-empty: \""\\f123\"";\n$fa-var-star-half-full: \""\\f123\"";\n$fa-var-star-half-o: \""\\f123\"";\n$fa-var-star-o: \""\\f006\"";\n$fa-var-steam: \""\\f1b6\"";\n$fa-var-steam-square: \""\\f1b7\"";\n$fa-var-step-backward: \""\\f048\"";\n$fa-var-step-forward: \""\\f051\"";\n$fa-var-stethoscope: \""\\f0f1\"";\n$fa-var-sticky-note: \""\\f249\"";\n$fa-var-sticky-note-o: \""\\f24a\"";\n$fa-var-stop: \""\\f04d\"";\n$fa-var-stop-circle: \""\\f28d\"";\n$fa-var-stop-circle-o: \""\\f28e\"";\n$fa-var-street-view: \""\\f21d\"";\n$fa-var-strikethrough: \""\\f0cc\"";\n$fa-var-stumbleupon: \""\\f1a4\"";\n$fa-var-stumbleupon-circle: \""\\f1a3\"";\n$fa-var-subscript: \""\\f12c\"";\n$fa-var-subway: \""\\f239\"";\n$fa-var-suitcase: \""\\f0f2\"";\n$fa-var-sun-o: \""\\f185\"";\n$fa-var-superpowers: \""\\f2dd\"";\n$fa-var-superscript: \""\\f12b\"";\n$fa-var-support: \""\\f1cd\"";\n$fa-var-table: \""\\f0ce\"";\n$fa-var-tablet: \""\\f10a\"";\n$fa-var-tachometer: \""\\f0e4\"";\n$fa-var-tag: \""\\f02b\"";\n$fa-var-tags: \""\\f02c\"";\n$fa-var-tasks: \""\\f0ae\"";\n$fa-var-taxi: \""\\f1ba\"";\n$fa-var-telegram: \""\\f2c6\"";\n$fa-var-television: \""\\f26c\"";\n$fa-var-tencent-weibo: \""\\f1d5\"";\n$fa-var-terminal: \""\\f120\"";\n$fa-var-text-height: \""\\f034\"";\n$fa-var-text-width: \""\\f035\"";\n$fa-var-th: \""\\f00a\"";\n$fa-var-th-large: \""\\f009\"";\n$fa-var-th-list: \""\\f00b\"";\n$fa-var-themeisle: \""\\f2b2\"";\n$fa-var-thermometer: \""\\f2c7\"";\n$fa-var-thermometer-0: \""\\f2cb\"";\n$fa-var-thermometer-1: \""\\f2ca\"";\n$fa-var-thermometer-2: \""\\f2c9\"";\n$fa-var-thermometer-3: \""\\f2c8\"";\n$fa-var-thermometer-4: \""\\f2c7\"";\n$fa-var-thermometer-empty: \""\\f2cb\"";\n$fa-var-thermometer-full: \""\\f2c7\"";\n$fa-var-thermometer-half: \""\\f2c9\"";\n$fa-var-thermometer-quarter: \""\\f2ca\"";\n$fa-var-thermometer-three-quarters: \""\\f2c8\"";\n$fa-var-thumb-tack: \""\\f08d\"";\n$fa-var-thumbs-down: \""\\f165\"";\n$fa-var-thumbs-o-down: \""\\f088\"";\n$fa-var-thumbs-o-up: \""\\f087\"";\n$fa-var-thumbs-up: \""\\f164\"";\n$fa-var-ticket: \""\\f145\"";\n$fa-var-times: \""\\f00d\"";\n$fa-var-times-circle: \""\\f057\"";\n$fa-var-times-circle-o: \""\\f05c\"";\n$fa-var-times-rectangle: \""\\f2d3\"";\n$fa-var-times-rectangle-o: \""\\f2d4\"";\n$fa-var-tint: \""\\f043\"";\n$fa-var-toggle-down: \""\\f150\"";\n$fa-var-toggle-left: \""\\f191\"";\n$fa-var-toggle-off: \""\\f204\"";\n$fa-var-toggle-on: \""\\f205\"";\n$fa-var-toggle-right: \""\\f152\"";\n$fa-var-toggle-up: \""\\f151\"";\n$fa-var-trademark: \""\\f25c\"";\n$fa-var-train: \""\\f238\"";\n$fa-var-transgender: \""\\f224\"";\n$fa-var-transgender-alt: \""\\f225\"";\n$fa-var-trash: \""\\f1f8\"";\n$fa-var-trash-o: \""\\f014\"";\n$fa-var-tree: \""\\f1bb\"";\n$fa-var-trello: \""\\f181\"";\n$fa-var-tripadvisor: \""\\f262\"";\n$fa-var-trophy: \""\\f091\"";\n$fa-var-truck: \""\\f0d1\"";\n$fa-var-try: \""\\f195\"";\n$fa-var-tty: \""\\f1e4\"";\n$fa-var-tumblr: \""\\f173\"";\n$fa-var-tumblr-square: \""\\f174\"";\n$fa-var-turkish-lira: \""\\f195\"";\n$fa-var-tv: \""\\f26c\"";\n$fa-var-twitch: \""\\f1e8\"";\n$fa-var-twitter: \""\\f099\"";\n$fa-var-twitter-square: \""\\f081\"";\n$fa-var-umbrella: \""\\f0e9\"";\n$fa-var-underline: \""\\f0cd\"";\n$fa-var-undo: \""\\f0e2\"";\n$fa-var-universal-access: \""\\f29a\"";\n$fa-var-university: \""\\f19c\"";\n$fa-var-unlink: \""\\f127\"";\n$fa-var-unlock: \""\\f09c\"";\n$fa-var-unlock-alt: \""\\f13e\"";\n$fa-var-unsorted: \""\\f0dc\"";\n$fa-var-upload: \""\\f093\"";\n$fa-var-usb: \""\\f287\"";\n$fa-var-usd: \""\\f155\"";\n$fa-var-user: \""\\f007\"";\n$fa-var-user-circle: \""\\f2bd\"";\n$fa-var-user-circle-o: \""\\f2be\"";\n$fa-var-user-md: \""\\f0f0\"";\n$fa-var-user-o: \""\\f2c0\"";\n$fa-var-user-plus: \""\\f234\"";\n$fa-var-user-secret: \""\\f21b\"";\n$fa-var-user-times: \""\\f235\"";\n$fa-var-users: \""\\f0c0\"";\n$fa-var-vcard: \""\\f2bb\"";\n$fa-var-vcard-o: \""\\f2bc\"";\n$fa-var-venus: \""\\f221\"";\n$fa-var-venus-double: \""\\f226\"";\n$fa-var-venus-mars: \""\\f228\"";\n$fa-var-viacoin: \""\\f237\"";\n$fa-var-viadeo: \""\\f2a9\"";\n$fa-var-viadeo-square: \""\\f2aa\"";\n$fa-var-video-camera: \""\\f03d\"";\n$fa-var-vimeo: \""\\f27d\"";\n$fa-var-vimeo-square: \""\\f194\"";\n$fa-var-vine: \""\\f1ca\"";\n$fa-var-vk: \""\\f189\"";\n$fa-var-volume-control-phone: \""\\f2a0\"";\n$fa-var-volume-down: \""\\f027\"";\n$fa-var-volume-off: \""\\f026\"";\n$fa-var-volume-up: \""\\f028\"";\n$fa-var-warning: \""\\f071\"";\n$fa-var-wechat: \""\\f1d7\"";\n$fa-var-weibo: \""\\f18a\"";\n$fa-var-weixin: \""\\f1d7\"";\n$fa-var-whatsapp: \""\\f232\"";\n$fa-var-wheelchair: \""\\f193\"";\n$fa-var-wheelchair-alt: \""\\f29b\"";\n$fa-var-wifi: \""\\f1eb\"";\n$fa-var-wikipedia-w: \""\\f266\"";\n$fa-var-window-close: \""\\f2d3\"";\n$fa-var-window-close-o: \""\\f2d4\"";\n$fa-var-window-maximize: \""\\f2d0\"";\n$fa-var-window-minimize: \""\\f2d1\"";\n$fa-var-window-restore: \""\\f2d2\"";\n$fa-var-windows: \""\\f17a\"";\n$fa-var-won: \""\\f159\"";\n$fa-var-wordpress: \""\\f19a\"";\n$fa-var-wpbeginner: \""\\f297\"";\n$fa-var-wpexplorer: \""\\f2de\"";\n$fa-var-wpforms: \""\\f298\"";\n$fa-var-wrench: \""\\f0ad\"";\n$fa-var-xing: \""\\f168\"";\n$fa-var-xing-square: \""\\f169\"";\n$fa-var-y-combinator: \""\\f23b\"";\n$fa-var-y-combinator-square: \""\\f1d4\"";\n$fa-var-yahoo: \""\\f19e\"";\n$fa-var-yc: \""\\f23b\"";\n$fa-var-yc-square: \""\\f1d4\"";\n$fa-var-yelp: \""\\f1e9\"";\n$fa-var-yen: \""\\f157\"";\n$fa-var-yoast: \""\\f2b1\"";\n$fa-var-youtube: \""\\f167\"";\n$fa-var-youtube-play: \""\\f16a\"";\n$fa-var-youtube-square: \""\\f166\"";\n\n"",""// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em $fa-border-color;\n  border-radius: .1em;\n}\n\n.#{$fa-css-prefix}-pull-left { float: left; }\n.#{$fa-css-prefix}-pull-right { float: right; }\n\n.#{$fa-css-prefix} {\n  &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }\n  &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.#{$fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"",""// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.#{$fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"",""// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }\n.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }\n.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }\n\n.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }\n.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$fa-css-prefix}-rotate-90,\n:root .#{$fa-css-prefix}-rotate-180,\n:root .#{$fa-css-prefix}-rotate-270,\n:root .#{$fa-css-prefix}-flip-horizontal,\n:root .#{$fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"",""// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n\n@mixin fa-icon-rotate($degrees, $rotation) {\n  -ms-filter: \""progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})\"";\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees);\n          transform: rotate($degrees);\n}\n\n@mixin fa-icon-flip($horiz, $vert, $rotation) {\n  -ms-filter: \""progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)\"";\n  -webkit-transform: scale($horiz, $vert);\n      -ms-transform: scale($horiz, $vert);\n          transform: scale($horiz, $vert);\n}\n\n\n// Only display content to screen readers. A la Bootstrap 4.\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n@mixin sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \""Skip to main content\"" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n"",""// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.#{$fa-css-prefix}-stack-1x { line-height: inherit; }\n.#{$fa-css-prefix}-stack-2x { font-size: 2em; }\n.#{$fa-css-prefix}-inverse { color: $fa-inverse; }\n"",""/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\n.#{$fa-css-prefix}-music:before { content: $fa-var-music; }\n.#{$fa-css-prefix}-search:before { content: $fa-var-search; }\n.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }\n.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }\n.#{$fa-css-prefix}-star:before { content: $fa-var-star; }\n.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }\n.#{$fa-css-prefix}-user:before { content: $fa-var-user; }\n.#{$fa-css-prefix}-film:before { content: $fa-var-film; }\n.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }\n.#{$fa-css-prefix}-th:before { content: $fa-var-th; }\n.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }\n.#{$fa-css-prefix}-check:before { content: $fa-var-check; }\n.#{$fa-css-prefix}-remove:before,\n.#{$fa-css-prefix}-close:before,\n.#{$fa-css-prefix}-times:before { content: $fa-var-times; }\n.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }\n.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }\n.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }\n.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }\n.#{$fa-css-prefix}-gear:before,\n.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }\n.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }\n.#{$fa-css-prefix}-home:before { content: $fa-var-home; }\n.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }\n.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }\n.#{$fa-css-prefix}-road:before { content: $fa-var-road; }\n.#{$fa-css-prefix}-download:before { content: $fa-var-download; }\n.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }\n.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }\n.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }\n.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }\n.#{$fa-css-prefix}-rotate-right:before,\n.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }\n.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }\n.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }\n.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }\n.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }\n.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }\n.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }\n.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }\n.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }\n.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }\n.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }\n.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }\n.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }\n.#{$fa-css-prefix}-book:before { content: $fa-var-book; }\n.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }\n.#{$fa-css-prefix}-print:before { content: $fa-var-print; }\n.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }\n.#{$fa-css-prefix}-font:before { content: $fa-var-font; }\n.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }\n.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }\n.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }\n.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }\n.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }\n.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }\n.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }\n.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }\n.#{$fa-css-prefix}-list:before { content: $fa-var-list; }\n.#{$fa-css-prefix}-dedent:before,\n.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }\n.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }\n.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }\n.#{$fa-css-prefix}-photo:before,\n.#{$fa-css-prefix}-image:before,\n.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }\n.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }\n.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }\n.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }\n.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }\n.#{$fa-css-prefix}-edit:before,\n.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }\n.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }\n.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }\n.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }\n.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }\n.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }\n.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }\n.#{$fa-css-prefix}-play:before { content: $fa-var-play; }\n.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }\n.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }\n.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }\n.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }\n.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }\n.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }\n.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }\n.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }\n.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }\n.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }\n.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }\n.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }\n.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }\n.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }\n.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }\n.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }\n.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }\n.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }\n.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }\n.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }\n.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }\n.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }\n.#{$fa-css-prefix}-mail-forward:before,\n.#{$fa-css-prefix}-share:before { content: $fa-var-share; }\n.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }\n.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }\n.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }\n.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }\n.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }\n.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }\n.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }\n.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }\n.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }\n.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }\n.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }\n.#{$fa-css-prefix}-warning:before,\n.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }\n.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }\n.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }\n.#{$fa-css-prefix}-random:before { content: $fa-var-random; }\n.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }\n.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }\n.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }\n.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }\n.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }\n.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }\n.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }\n.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }\n.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }\n.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }\n.#{$fa-css-prefix}-bar-chart-o:before,\n.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }\n.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }\n.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }\n.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }\n.#{$fa-css-prefix}-key:before { content: $fa-var-key; }\n.#{$fa-css-prefix}-gears:before,\n.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }\n.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }\n.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }\n.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }\n.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }\n.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }\n.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }\n.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }\n.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }\n.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }\n.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }\n.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }\n.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }\n.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }\n.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }\n.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }\n.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }\n.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }\n.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }\n.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }\n.#{$fa-css-prefix}-facebook-f:before,\n.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }\n.#{$fa-css-prefix}-github:before { content: $fa-var-github; }\n.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }\n.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }\n.#{$fa-css-prefix}-feed:before,\n.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }\n.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }\n.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }\n.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }\n.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }\n.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }\n.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }\n.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }\n.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }\n.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }\n.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }\n.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }\n.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }\n.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }\n.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }\n.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }\n.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }\n.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }\n.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }\n.#{$fa-css-prefix}-group:before,\n.#{$fa-css-prefix}-users:before { content: $fa-var-users; }\n.#{$fa-css-prefix}-chain:before,\n.#{$fa-css-prefix}-link:before { content: $fa-var-link; }\n.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }\n.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }\n.#{$fa-css-prefix}-cut:before,\n.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }\n.#{$fa-css-prefix}-copy:before,\n.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }\n.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }\n.#{$fa-css-prefix}-save:before,\n.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }\n.#{$fa-css-prefix}-square:before { content: $fa-var-square; }\n.#{$fa-css-prefix}-navicon:before,\n.#{$fa-css-prefix}-reorder:before,\n.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }\n.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }\n.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }\n.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }\n.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }\n.#{$fa-css-prefix}-table:before { content: $fa-var-table; }\n.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }\n.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }\n.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }\n.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }\n.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }\n.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }\n.#{$fa-css-prefix}-money:before { content: $fa-var-money; }\n.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }\n.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }\n.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }\n.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }\n.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }\n.#{$fa-css-prefix}-unsorted:before,\n.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }\n.#{$fa-css-prefix}-sort-down:before,\n.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }\n.#{$fa-css-prefix}-sort-up:before,\n.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }\n.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }\n.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }\n.#{$fa-css-prefix}-rotate-left:before,\n.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }\n.#{$fa-css-prefix}-legal:before,\n.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }\n.#{$fa-css-prefix}-dashboard:before,\n.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }\n.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }\n.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }\n.#{$fa-css-prefix}-flash:before,\n.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }\n.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }\n.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }\n.#{$fa-css-prefix}-paste:before,\n.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }\n.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }\n.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }\n.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }\n.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }\n.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }\n.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }\n.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }\n.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }\n.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }\n.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }\n.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }\n.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }\n.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }\n.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }\n.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }\n.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }\n.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }\n.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }\n.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }\n.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }\n.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }\n.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }\n.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }\n.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }\n.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }\n.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }\n.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }\n.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }\n.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }\n.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }\n.#{$fa-css-prefix}-mobile-phone:before,\n.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }\n.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }\n.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }\n.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }\n.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }\n.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }\n.#{$fa-css-prefix}-mail-reply:before,\n.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }\n.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }\n.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }\n.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }\n.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }\n.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }\n.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }\n.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }\n.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }\n.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }\n.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }\n.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }\n.#{$fa-css-prefix}-code:before { content: $fa-var-code; }\n.#{$fa-css-prefix}-mail-reply-all:before,\n.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }\n.#{$fa-css-prefix}-star-half-empty:before,\n.#{$fa-css-prefix}-star-half-full:before,\n.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }\n.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }\n.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }\n.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }\n.#{$fa-css-prefix}-unlink:before,\n.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }\n.#{$fa-css-prefix}-question:before { content: $fa-var-question; }\n.#{$fa-css-prefix}-info:before { content: $fa-var-info; }\n.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }\n.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }\n.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }\n.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }\n.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }\n.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }\n.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }\n.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }\n.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }\n.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }\n.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }\n.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }\n.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }\n.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }\n.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }\n.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }\n.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }\n.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }\n.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }\n.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }\n.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }\n.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }\n.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }\n.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }\n.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }\n.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }\n.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }\n.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }\n.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }\n.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }\n.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }\n.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }\n.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }\n.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }\n.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }\n.#{$fa-css-prefix}-toggle-down:before,\n.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }\n.#{$fa-css-prefix}-toggle-up:before,\n.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }\n.#{$fa-css-prefix}-toggle-right:before,\n.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }\n.#{$fa-css-prefix}-euro:before,\n.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }\n.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }\n.#{$fa-css-prefix}-dollar:before,\n.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }\n.#{$fa-css-prefix}-rupee:before,\n.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }\n.#{$fa-css-prefix}-cny:before,\n.#{$fa-css-prefix}-rmb:before,\n.#{$fa-css-prefix}-yen:before,\n.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }\n.#{$fa-css-prefix}-ruble:before,\n.#{$fa-css-prefix}-rouble:before,\n.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }\n.#{$fa-css-prefix}-won:before,\n.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }\n.#{$fa-css-prefix}-bitcoin:before,\n.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }\n.#{$fa-css-prefix}-file:before { content: $fa-var-file; }\n.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }\n.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }\n.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }\n.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }\n.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }\n.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }\n.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }\n.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }\n.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }\n.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }\n.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }\n.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }\n.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }\n.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }\n.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }\n.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }\n.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }\n.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }\n.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }\n.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }\n.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }\n.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }\n.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }\n.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }\n.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }\n.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }\n.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }\n.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }\n.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }\n.#{$fa-css-prefix}-android:before { content: $fa-var-android; }\n.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }\n.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }\n.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }\n.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }\n.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }\n.#{$fa-css-prefix}-female:before { content: $fa-var-female; }\n.#{$fa-css-prefix}-male:before { content: $fa-var-male; }\n.#{$fa-css-prefix}-gittip:before,\n.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }\n.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }\n.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }\n.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }\n.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }\n.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }\n.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }\n.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }\n.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }\n.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }\n.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }\n.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }\n.#{$fa-css-prefix}-toggle-left:before,\n.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }\n.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }\n.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }\n.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }\n.#{$fa-css-prefix}-turkish-lira:before,\n.#{$fa-css-prefix}-try:before { content: $fa-var-try; }\n.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }\n.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }\n.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }\n.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }\n.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }\n.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }\n.#{$fa-css-prefix}-institution:before,\n.#{$fa-css-prefix}-bank:before,\n.#{$fa-css-prefix}-university:before { content: $fa-var-university; }\n.#{$fa-css-prefix}-mortar-board:before,\n.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }\n.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }\n.#{$fa-css-prefix}-google:before { content: $fa-var-google; }\n.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }\n.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }\n.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }\n.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }\n.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }\n.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }\n.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }\n.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }\n.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }\n.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }\n.#{$fa-css-prefix}-language:before { content: $fa-var-language; }\n.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }\n.#{$fa-css-prefix}-building:before { content: $fa-var-building; }\n.#{$fa-css-prefix}-child:before { content: $fa-var-child; }\n.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }\n.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }\n.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }\n.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }\n.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }\n.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }\n.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }\n.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }\n.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }\n.#{$fa-css-prefix}-automobile:before,\n.#{$fa-css-prefix}-car:before { content: $fa-var-car; }\n.#{$fa-css-prefix}-cab:before,\n.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }\n.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }\n.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }\n.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }\n.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }\n.#{$fa-css-prefix}-database:before { content: $fa-var-database; }\n.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }\n.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }\n.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }\n.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }\n.#{$fa-css-prefix}-file-photo-o:before,\n.#{$fa-css-prefix}-file-picture-o:before,\n.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }\n.#{$fa-css-prefix}-file-zip-o:before,\n.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }\n.#{$fa-css-prefix}-file-sound-o:before,\n.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }\n.#{$fa-css-prefix}-file-movie-o:before,\n.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }\n.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }\n.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }\n.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }\n.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }\n.#{$fa-css-prefix}-life-bouy:before,\n.#{$fa-css-prefix}-life-buoy:before,\n.#{$fa-css-prefix}-life-saver:before,\n.#{$fa-css-prefix}-support:before,\n.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }\n.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }\n.#{$fa-css-prefix}-ra:before,\n.#{$fa-css-prefix}-resistance:before,\n.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }\n.#{$fa-css-prefix}-ge:before,\n.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }\n.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }\n.#{$fa-css-prefix}-git:before { content: $fa-var-git; }\n.#{$fa-css-prefix}-y-combinator-square:before,\n.#{$fa-css-prefix}-yc-square:before,\n.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }\n.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }\n.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }\n.#{$fa-css-prefix}-wechat:before,\n.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }\n.#{$fa-css-prefix}-send:before,\n.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }\n.#{$fa-css-prefix}-send-o:before,\n.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }\n.#{$fa-css-prefix}-history:before { content: $fa-var-history; }\n.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }\n.#{$fa-css-prefix}-header:before { content: $fa-var-header; }\n.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }\n.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }\n.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }\n.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }\n.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }\n.#{$fa-css-prefix}-soccer-ball-o:before,\n.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }\n.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }\n.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }\n.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }\n.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }\n.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }\n.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }\n.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }\n.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }\n.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }\n.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }\n.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }\n.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }\n.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }\n.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }\n.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }\n.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }\n.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }\n.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }\n.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }\n.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }\n.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }\n.#{$fa-css-prefix}-at:before { content: $fa-var-at; }\n.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }\n.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }\n.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }\n.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }\n.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }\n.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }\n.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }\n.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }\n.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }\n.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }\n.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }\n.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }\n.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }\n.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }\n.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }\n.#{$fa-css-prefix}-shekel:before,\n.#{$fa-css-prefix}-sheqel:before,\n.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }\n.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }\n.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }\n.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }\n.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }\n.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }\n.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }\n.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }\n.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }\n.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }\n.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }\n.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }\n.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }\n.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }\n.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }\n.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }\n.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }\n.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }\n.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }\n.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }\n.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }\n.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }\n.#{$fa-css-prefix}-intersex:before,\n.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }\n.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }\n.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }\n.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }\n.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }\n.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }\n.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }\n.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }\n.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }\n.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }\n.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }\n.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }\n.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }\n.#{$fa-css-prefix}-server:before { content: $fa-var-server; }\n.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }\n.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }\n.#{$fa-css-prefix}-hotel:before,\n.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }\n.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }\n.#{$fa-css-prefix}-train:before { content: $fa-var-train; }\n.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }\n.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }\n.#{$fa-css-prefix}-yc:before,\n.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }\n.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }\n.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }\n.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }\n.#{$fa-css-prefix}-battery-4:before,\n.#{$fa-css-prefix}-battery:before,\n.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }\n.#{$fa-css-prefix}-battery-3:before,\n.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }\n.#{$fa-css-prefix}-battery-2:before,\n.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }\n.#{$fa-css-prefix}-battery-1:before,\n.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }\n.#{$fa-css-prefix}-battery-0:before,\n.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }\n.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }\n.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }\n.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }\n.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }\n.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }\n.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }\n.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }\n.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }\n.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }\n.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }\n.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }\n.#{$fa-css-prefix}-hourglass-1:before,\n.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }\n.#{$fa-css-prefix}-hourglass-2:before,\n.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }\n.#{$fa-css-prefix}-hourglass-3:before,\n.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }\n.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }\n.#{$fa-css-prefix}-hand-grab-o:before,\n.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }\n.#{$fa-css-prefix}-hand-stop-o:before,\n.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }\n.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }\n.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }\n.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }\n.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }\n.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }\n.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }\n.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }\n.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }\n.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }\n.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }\n.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }\n.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }\n.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }\n.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }\n.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }\n.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }\n.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }\n.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }\n.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }\n.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }\n.#{$fa-css-prefix}-tv:before,\n.#{$fa-css-prefix}-television:before { content: $fa-var-television; }\n.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }\n.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }\n.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }\n.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }\n.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }\n.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }\n.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }\n.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }\n.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }\n.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }\n.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }\n.#{$fa-css-prefix}-map:before { content: $fa-var-map; }\n.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }\n.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }\n.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }\n.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }\n.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }\n.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }\n.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }\n.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }\n.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }\n.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }\n.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }\n.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }\n.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }\n.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }\n.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }\n.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }\n.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }\n.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }\n.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }\n.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }\n.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }\n.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }\n.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }\n.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }\n.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }\n.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }\n.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }\n.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }\n.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }\n.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }\n.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }\n.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }\n.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }\n.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }\n.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }\n.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }\n.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }\n.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }\n.#{$fa-css-prefix}-asl-interpreting:before,\n.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }\n.#{$fa-css-prefix}-deafness:before,\n.#{$fa-css-prefix}-hard-of-hearing:before,\n.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }\n.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }\n.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }\n.#{$fa-css-prefix}-signing:before,\n.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }\n.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }\n.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }\n.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }\n.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }\n.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }\n.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }\n.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }\n.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }\n.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }\n.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }\n.#{$fa-css-prefix}-google-plus-circle:before,\n.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }\n.#{$fa-css-prefix}-fa:before,\n.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }\n.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }\n.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }\n.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }\n.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }\n.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }\n.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }\n.#{$fa-css-prefix}-vcard:before,\n.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }\n.#{$fa-css-prefix}-vcard-o:before,\n.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }\n.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }\n.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }\n.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }\n.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }\n.#{$fa-css-prefix}-drivers-license:before,\n.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }\n.#{$fa-css-prefix}-drivers-license-o:before,\n.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }\n.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }\n.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }\n.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }\n.#{$fa-css-prefix}-thermometer-4:before,\n.#{$fa-css-prefix}-thermometer:before,\n.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }\n.#{$fa-css-prefix}-thermometer-3:before,\n.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }\n.#{$fa-css-prefix}-thermometer-2:before,\n.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }\n.#{$fa-css-prefix}-thermometer-1:before,\n.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }\n.#{$fa-css-prefix}-thermometer-0:before,\n.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }\n.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }\n.#{$fa-css-prefix}-bathtub:before,\n.#{$fa-css-prefix}-s15:before,\n.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }\n.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }\n.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }\n.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }\n.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }\n.#{$fa-css-prefix}-times-rectangle:before,\n.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }\n.#{$fa-css-prefix}-times-rectangle-o:before,\n.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }\n.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }\n.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }\n.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }\n.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }\n.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }\n.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }\n.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }\n.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }\n.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }\n.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }\n.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }\n"",""// Screen Readers\n// -------------------------\n\n.sr-only { @include sr-only(); }\n.sr-only-focusable { @include sr-only-focusable(); }\n"",""@font-face {\n  font-family: 'Blackbaud Sans';\n  font-style: normal;\n  font-weight: 400;\n  src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans.woff) format('woff');\n}\n\n// @font-face {\n//   font-family: 'Blackbaud Sans';\n//   font-style: normal;\n//   font-weight: 500;\n//   src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-semi-bold.woff) format('woff');\n// }\n\n// @font-face {\n//   font-family: 'Blackbaud Sans';\n//   font-style: italic;\n//   font-weight: 500;\n//   src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-semi-bold-italic.woff) format('woff');\n// }\n\n@font-face {\n  font-family: 'Blackbaud Sans';\n  font-style: normal;\n  font-weight: 600;\n  src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-bold.woff) format('woff');\n}\n\n// @font-face {\n//   font-family: 'Blackbaud Sans';\n//   font-style: italic;\n//   font-weight: 600;\n//   src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-bold-italic.woff) format('woff');\n// }\n\n\n@font-face {\n  font-family: 'Blackbaud Sans';\n  font-style: italic;\n  font-weight: 400;\n  src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-italic.woff) format('woff');\n}\n\n@font-face {\n  font-family: 'Blackbaud Sans';\n  font-style: normal;\n  font-weight: 300;\n  src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-light.woff) format('woff');\n}\n\n// @font-face {\n//   font-family: 'Blackbaud Sans';\n//   font-style: italic;\n//   font-weight: 300;\n//   src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-light-italic.woff) format('woff');\n// }\n\n// @font-face {\n//   font-family: 'Blackbaud Sans';\n//   font-weight: 100;\n//   src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-thin.woff) format('woff');\n// }\n\n// @font-face {\n//   font-family: 'Blackbaud Sans';\n//   font-style: italic;\n//   font-weight: 100;\n//   src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-thin-italic.woff) format('woff');\n// }\n\n@font-face {\n  font-family: 'Blackbaud Sans';\n  font-style: normal;\n  font-weight: 400;\n  font-stretch: condensed;\n  src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-condensed.woff) format('woff');\n}\n\n@font-face {\n  font-family: 'Blackbaud Sans';\n  font-style: normal;\n  font-weight: 300;\n  font-stretch: condensed;\n  src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-condensed-light.woff) format('woff');\n}\n\n\n// @font-face {\n//   font-family: 'Blackbaud Sans';\n//   font-style: normal;\n//   font-weight: 500;\n//   font-stretch: condensed;\n//   src: url(https://sky.blackbaudcdn.net/skyux-fonts/1.0.0/blackbaud-sans-condensed-semi-bold.woff) format('woff');\n// }\n"",""@import \""shared\"";\n\n// CSS Animations.\n\n// Apply an animation property and value with the correct browser support\n@mixin animation-support($property, $value) {\n  @include experimental($property, $value, -moz, -webkit, -o, -ms, not -khtml, official); }\n\n// Name of any animation as a string.\n$default-animation-name             : false !default;\n\n// Duration of the entire animation in seconds.\n$default-animation-duration         : false !default;\n\n// Delay for start of animation in seconds.\n$default-animation-delay            : false !default;\n\n// The timing function(s) to be used between keyframes. [ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier($number, $number, $number, $number)]\n$default-animation-timing-function  : false !default;\n\n// The number of times an animation cycle is played. [infinite | $number]\n$default-animation-iteration-count  : false !default;\n\n// Whether or not the animation should play in reverse on alternate cycles. [normal | alternate]\n$default-animation-direction        : false !default;\n\n// What values are applied by the animation outside the time it is executing. [none | forwards | backwards | both]\n$default-animation-fill-mode        : false !default;\n\n// Whether the animation is running or paused. [running | paused]\n$default-animation-play-state       : false !default;\n\n// Create a named animation sequence that can be applied to elements later.\n//\n//     $name    - The name of your animation.\n//     @content - The keyframes of the animation.\n@mixin keyframes(\n  $name,\n  $moz: $experimental-support-for-mozilla,\n  $webkit: $experimental-support-for-webkit,\n  $o: $experimental-support-for-opera,\n  $ms: $experimental-support-for-microsoft,\n  $khtml: $experimental-support-for-khtml,\n  $official: true\n) {\n  @if $moz {\n    @include with-only-support-for($moz: true) {\n      @-moz-keyframes #{$name} { @content; }\n    }\n  }\n  @if $webkit {\n    @include with-only-support-for($webkit: true) {\n      @-webkit-keyframes #{$name} { @content; }\n    }\n  }\n  @if $o {\n    @include with-only-support-for($o: true) {\n      @-o-keyframes #{$name} { @content; }\n    }\n  }\n  @if $ms {\n    @include with-only-support-for($ms: true) {\n      @-ms-keyframes #{$name} { @content; }\n    }\n  }\n  @if $khtml {\n    @include with-only-support-for($khtml: true) {\n      @-khtml-keyframes #{$name} { @content; }\n    }\n  }\n  @if $official {\n    @include with-only-support-for {\n      @keyframes #{$name} { @content; }\n    }\n  }\n}\n\n// Apply 1-10 animation names.\n@mixin animation-name($name-1: $default-animation-name, $name-2: false, $name-3: false, $name-4: false, $name-5: false, $name-6: false, $name-7: false, $name-8: false, $name-9: false, $name-10: false) {\n  $name: compact($name-1, $name-2, $name-3, $name-4, $name-5, $name-6, $name-7, $name-8, $name-9, $name-10);\n  @include animation-support(animation-name, $name); }\n\n// Apply 1-10 animation durations.\n@mixin animation-duration($duration-1: $default-animation-duration, $duration-2: false, $duration-3: false, $duration-4: false, $duration-5: false, $duration-6: false, $duration-7: false, $duration-8: false, $duration-9: false, $duration-10: false) {\n  $duration: compact($duration-1, $duration-2, $duration-3, $duration-4, $duration-5, $duration-6, $duration-7, $duration-8, $duration-9, $duration-10);\n  @include animation-support(animation-duration, $duration); }\n\n// Apply 1-10 animation delays.\n@mixin animation-delay($delay-1: $default-animation-delay, $delay-2: false, $delay-3: false, $delay-4: false, $delay-5: false, $delay-6: false, $delay-7: false, $delay-8: false, $delay-9: false, $delay-10: false) {\n  $delay: compact($delay-1, $delay-2, $delay-3, $delay-4, $delay-5, $delay-6, $delay-7, $delay-8, $delay-9, $delay-10);\n  @include animation-support(animation-delay, $delay); }\n\n// Apply 1-10 animation timing functions.\n@mixin animation-timing-function($function-1: $default-animation-timing-function, $function-2: false, $function-3: false, $function-4: false, $function-5: false, $function-6: false, $function-7: false, $function-8: false, $function-9: false, $function-10: false) {\n  $function: compact($function-1, $function-2, $function-3, $function-4, $function-5, $function-6, $function-7, $function-8, $function-9, $function-10);\n  @include animation-support(animation-timing-function, $function); }\n\n// Apply 1-10 animation iteration counts.\n@mixin animation-iteration-count($count-1: $default-animation-iteration-count, $count-2: false, $count-3: false, $count-4: false, $count-5: false, $count-6: false, $count-7: false, $count-8: false, $count-9: false, $count-10: false) {\n  $count: compact($count-1, $count-2, $count-3, $count-4, $count-5, $count-6, $count-7, $count-8, $count-9, $count-10);\n  @include animation-support(animation-iteration-count, $count); }\n\n// Apply 1-10 animation directions.\n@mixin animation-direction($direction-1: $default-animation-direction, $direction-2: false, $direction-3: false, $direction-4: false, $direction-5: false, $direction-6: false, $direction-7: false, $direction-8: false, $direction-9: false, $direction-10: false) {\n  $direction: compact($direction-1, $direction-2, $direction-3, $direction-4, $direction-5, $direction-6, $direction-7, $direction-8, $direction-9, $direction-10);\n  @include animation-support(animation-direction, $direction); }\n\n// Apply 1-10 animation fill modes.\n@mixin animation-fill-mode($mode-1: $default-animation-fill-mode, $mode-2: false, $mode-3: false, $mode-4: false, $mode-5: false, $mode-6: false, $mode-7: false, $mode-8: false, $mode-9: false, $mode-10: false) {\n  $mode: compact($mode-1, $mode-2, $mode-3, $mode-4, $mode-5, $mode-6, $mode-7, $mode-8, $mode-9, $mode-10);\n  @include animation-support(animation-fill-mode, $mode); }\n\n// Apply 1-10 animation play states.\n@mixin animation-play-state($state-1: $default-animation-play-state, $state-2: false, $state-3: false, $state-4: false, $state-5: false, $state-6: false, $state-7: false, $state-8: false, $state-9: false, $state-10: false) {\n  $state: compact($state-1, $state-2, $state-3, $state-4, $state-5, $state-6, $state-7, $state-8, $state-9, $state-10);\n  @include animation-support(animation-play-state, $state); }\n\n// Shortcut to apply a named animation to an element, with all the settings.\n//\n//     $animation-1   : Name and settings for the first animation. [<values> | default]\n//     ...\n//     $animation-10  : Name and settings for the tenth animation. <values>\n@mixin animation($animation-1: default, $animation-2: false, $animation-3: false, $animation-4: false, $animation-5: false, $animation-6: false, $animation-7: false, $animation-8: false, $animation-9: false, $animation-10: false) {\n  @if $animation-1 == default {\n    $animation-1: -compass-space-list(compact($default-animation-name, $default-animation-duration, $default-animation-timing-function, $default-animation-delay, $default-animation-iteration-count, $default-animation-direction, $default-animation-fill-mode, $default-animation-play-state)); }\n  $animation: compact($animation-1, $animation-2, $animation-3, $animation-4, $animation-5, $animation-6, $animation-7, $animation-8, $animation-9, $animation-10);\n  @include animation-support(animation, $animation); }\n"",""// ---------------------------------------------------------------------------\n@include keyframes(flash) {\n  0% {\n    opacity: 1; }\n  25% {\n    opacity: 0; }\n  50% {\n    opacity: 1; }\n  75% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounce) {\n  0% {\n    @include translateY(0); }\n  20% {\n    @include translateY(0); }\n  40% {\n    @include translateY(-30px); }\n  50% {\n    @include translateY(0); }\n  60% {\n    @include translateY(-15px); }\n  80% {\n    @include translateY(0); }\n  100% {\n    @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(shake) {\n  0% {\n    @include translateX(0); }\n  10% {\n    @include translateX(-10px); }\n  20% {\n    @include translateX(10px); }\n  30% {\n    @include translateX(-10px); }\n  40% {\n    @include translateX(10px); }\n  50% {\n    @include translateX(-10px); }\n  60% {\n    @include translateX(10px); }\n  70% {\n    @include translateX(-10px); }\n  80% {\n    @include translateX(10px); }\n  90% {\n    @include translateX(-10px); }\n  100% {\n    @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(tada) {\n  0% {\n    @include scale(1); }\n  10% {\n    @include transform(scale(0.9) rotate(-3deg)); }\n  20% {\n    @include transform(scale(0.9) rotate(-3deg)); }\n  30% {\n    @include transform(scale(1.1) rotate(3deg)); }\n  40% {\n    @include transform(scale(1.1) rotate(-3deg)); }\n  50% {\n    @include transform(scale(1.1) rotate(3deg)); }\n  60% {\n    @include transform(scale(1.1) rotate(-3deg)); }\n  70% {\n    @include transform(scale(1.1) rotate(3deg)); }\n  80% {\n    @include transform(scale(1.1) rotate(-3deg)); }\n  90% {\n    @include transform(scale(1.1) rotate(3deg)); }\n  100% {\n    @include transform(scale(1) rotate(0)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(swing) {\n  20%, 40%, 60%, 80%, 100% {\n    @include transform-origin(top center); }\n  20% {\n    @include rotate(15deg); }\n  40% {\n    @include rotate(-10deg); }\n  60% {\n    @include rotate(5deg); }\n  80% {\n    @include rotate(-5deg); }\n  100% {\n    @include rotate(0deg); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(wobble) {\n  0% {\n    @include translateX(0%); }\n  15% {\n    @include transform(translateX(-25%) rotate(-5deg)); }\n  30% {\n    @include transform(translateX(20%) rotate(3deg)); }\n  45% {\n    @include transform(translateX(-15%) rotate(-3deg)); }\n  60% {\n    @include transform(translateX(10%) rotate(2deg)); }\n  75% {\n    @include transform(translateX(-5%) rotate(-1deg)); }\n  100% {\n    @include transform(translateX(0%)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(pulse) {\n  0% {\n    @include scale(1); }\n  50% {\n    @include scale(1.1); }\n  100% {\n    @include scale(1); } }\n    \n    \n// ---------------------------------------------------------------------------\n@include keyframes(wiggle) {\n  0% {\n    @include skewX(9deg); }\n  10% {\n    @include skewX(-8deg); }\n  20% {\n    @include skewX(7deg); }\n  30% {\n    @include skewX(-6deg); }\n  40% {\n    @include skewX(5deg); }\n  50% {\n    @include skewX(-4deg); }\n  60% {\n    @include skewX(3deg); }\n  70% {\n    @include skewX(-2deg); }\n  80% {\n    @include skewX(1deg); }\n  90% {\n    @include skewX(0deg); }\n  100% {\n    @include skewX(0deg); } }"",""@import \""../support\"";\n\n// This mixin provides basic support for CSS3 properties and\n// their corresponding experimental CSS2 properties when\n// the implementations are identical except for the property\n// prefix.\n@mixin experimental($property, $value,\n  $moz      : $experimental-support-for-mozilla,\n  $webkit   : $experimental-support-for-webkit,\n  $o        : $experimental-support-for-opera,\n  $ms       : $experimental-support-for-microsoft,\n  $khtml    : $experimental-support-for-khtml,\n  $official : true\n) {\n  @if $webkit  and $experimental-support-for-webkit    { -webkit-#{$property} : $value; }\n  @if $khtml   and $experimental-support-for-khtml     {  -khtml-#{$property} : $value; }\n  @if $moz     and $experimental-support-for-mozilla   {    -moz-#{$property} : $value; }\n  @if $ms      and $experimental-support-for-microsoft {     -ms-#{$property} : $value; }\n  @if $o       and $experimental-support-for-opera     {      -o-#{$property} : $value; }\n  @if $official                                        {         #{$property} : $value; }\n}\n\n// Same as experimental(), but for cases when the property is the same and the value is vendorized\n@mixin experimental-value($property, $value,\n  $moz      : $experimental-support-for-mozilla,\n  $webkit   : $experimental-support-for-webkit,\n  $o        : $experimental-support-for-opera,\n  $ms       : $experimental-support-for-microsoft,\n  $khtml    : $experimental-support-for-khtml,\n  $official : true\n) {\n  @if $webkit  and $experimental-support-for-webkit    { #{$property} : -webkit-#{$value}; }\n  @if $khtml   and $experimental-support-for-khtml     { #{$property} :  -khtml-#{$value}; }\n  @if $moz     and $experimental-support-for-mozilla   { #{$property} :    -moz-#{$value}; }\n  @if $ms      and $experimental-support-for-microsoft { #{$property} :     -ms-#{$value}; }\n  @if $o       and $experimental-support-for-opera     { #{$property} :      -o-#{$value}; }\n  @if $official                                        { #{$property} :         #{$value}; }\n}\n"",""@import \""shared\"";\n\n// @doc off\n// Note ----------------------------------------------------------------------\n// Safari, Chrome, and Firefox all support 3D transforms. However,\n// only in the most recent builds. You should also provide fallback 2d support for\n// Opera and IE. IE10 is slated to have 3d enabled, but is currently unreleased.\n// To make that easy, all 2D transforms include an browser-targeting toggle ($only3d)\n// to switch between the two support lists. The toggle defaults to 'false' (2D),\n// and also accepts 'true' (3D). Currently the lists are as follows:\n// 2D: Mozilla, Webkit, Opera, Official\n// 3D: Webkit, Firefox.\n\n// Available Transforms ------------------------------------------------------\n// - Scale (2d and 3d)\n// - Rotate (2d and 3d)\n// - Translate (2d and 3d)\n// - Skew (2d only)\n\n// Transform Parameters ------------------------------------------------------\n// - Transform Origin (2d and 3d)\n// - Perspective (3d)\n// - Perspective Origin (3d)\n// - Transform Style (3d)\n// - Backface Visibility (3d)\n\n// Mixins --------------------------------------------------------------------\n// transform-origin\n//  - shortcuts:  transform-origin2d, transform-origin3d\n//  - helpers:    apply-origin\n// transform\n//  - shortcuts:  transform2d, transform3d\n//  - helpers:    simple-transform, create-transform\n// perspective\n//  - helpers:    perspective-origin\n// transform-style\n// backface-visibility\n// scale\n//  - shortcuts:  scaleX, scaleY, scaleZ, scale3d\n// rotate\n//  - shortcuts:  rotateX, rotateY, rotate3d\n// translate\n//  - shortcuts:  translateX, translateY, translateZ, translate3d\n// skew\n//  - shortcuts:  skewX, skewY\n\n// Defaults ------------------------------------------------------------------\n// @doc on\n\n// The default x-origin for transforms\n$default-origin-x    : 50%                   !default;\n// The default y-origin for transforms\n$default-origin-y    : 50%                   !default;\n// The default z-origin for transforms\n$default-origin-z    : 50%                   !default;\n\n\n// The default x-multiplier for scaling\n$default-scale-x     : 1.25                  !default;\n// The default y-multiplier for scaling\n$default-scale-y     : $default-scale-x      !default;\n// The default z-multiplier for scaling\n$default-scale-z     : $default-scale-x      !default;\n\n\n// The default angle for rotations\n$default-rotate      : 45deg                 !default;\n\n\n// The default x-vector for the axis of 3d rotations\n$default-vector-x    : 1                     !default;\n// The default y-vector for the axis of 3d rotations\n$default-vector-y    : 1                     !default;\n// The default z-vector for the axis of 3d rotations\n$default-vector-z    : 1                     !default;\n\n\n// The default x-length for translations\n$default-translate-x : 1em                   !default;\n// The default y-length for translations\n$default-translate-y : $default-translate-x  !default;\n// The default z-length for translations\n$default-translate-z : $default-translate-x  !default;\n\n\n// The default x-angle for skewing\n$default-skew-x      : 5deg                  !default;\n// The default y-angle for skewing\n$default-skew-y      : 5deg                  !default;\n\n\n// **Transform-origin**\n// Transform-origin sent as a complete string\n//\n//     @include apply-origin( origin [, 3D-only ] )\n//\n// where 'origin' is a space separated list containing 1-3 (x/y/z) coordinates\n// in percentages, absolute (px, cm, in, em etc..) or relative\n// (left, top, right, bottom, center) units\n//\n// @param only3d Set this to true to only apply this\n// mixin where browsers have 3D support.\n@mixin apply-origin($origin, $only3d) {\n  $only3d: $only3d or -compass-list-size(-compass-list($origin)) > 2;\n  @if $only3d {\n    @include experimental(transform-origin, $origin,\n      -moz, -webkit, -o, -ms, not(-khtml), official\n    );\n  } @else {\n    @include experimental(transform-origin, $origin,\n      -moz, -webkit, -o, -ms, not(-khtml), official\n    );\n  }\n}\n\n// Transform-origin sent as individual arguments:\n//\n//     @include transform-origin( [ origin-x, origin-y, origin-z, 3D-only ] )\n//\n// where the 3 'origin-' arguments represent x/y/z coordinates.\n//\n// **NOTE:** setting z coordinates triggers 3D support list, leave false for 2D support\n@mixin transform-origin(\n  $origin-x: $default-origin-x,\n  $origin-y: $default-origin-y,\n  $origin-z: false,\n  $only3d:   if($origin-z, true, false)\n) {\n  $origin: unquote('');\n  @if $origin-x or $origin-y or $origin-z {\n    @if $origin-x { $origin: $origin-x; } @else { $origin: 50%; }\n    @if $origin-y { $origin: $origin $origin-y; } @else { @if $origin-z { $origin: $origin 50%; }}\n    @if $origin-z { $origin: $origin $origin-z; }\n    @include apply-origin($origin, $only3d);\n  }\n}\n\n\n// Transform sent as a complete string:\n//\n//     @include transform( transforms [, 3D-only ] )\n//\n// where 'transforms' is a space separated list of all the transforms to be applied.\n@mixin transform(\n  $transform,\n  $only3d: false\n) {\n  @if $only3d {\n    @include experimental(transform, $transform,\n      -moz, -webkit, -o, -ms, not(-khtml), official\n    );\n  } @else {\n    @include experimental(transform, $transform,\n      -moz, -webkit, -o, -ms, not(-khtml), official\n    );\n  }\n}\n\n// Shortcut to target all browsers with 2D transform support\n@mixin transform2d($trans) {\n  @include transform($trans, false);\n}\n\n// Shortcut to target only browsers with 3D transform support\n@mixin transform3d($trans) {\n  @include transform($trans, true);\n}\n\n// @doc off\n// 3D Parameters -------------------------------------------------------------\n// @doc on\n\n// Set the perspective of 3D transforms on the children of an element:\n//\n//      @include perspective( perspective )\n//\n// where 'perspective' is a unitless number representing the depth of the\n// z-axis. The higher the perspective, the more exaggerated the foreshortening.\n// values from 500 to 1000 are more-or-less \""normal\"" - a good starting-point.\n@mixin perspective($p) {\n  @include experimental(perspective, $p,\n    -moz, -webkit, -o, -ms, not(-khtml), official\n  );\n}\n\n// Set the origin position for the perspective\n//\n//      @include perspective-origin(origin-x [origin-y])\n//\n// where the two arguments represent x/y coordinates\n@mixin perspective-origin($origin: 50%) {\n  @include experimental(perspective-origin, $origin,\n    -moz, -webkit, -o, -ms, not(-khtml), official\n  );\n}\n\n// Determine whether a 3D objects children also live in the given 3D space\n//\n//      @include transform-style( [ style ] )\n//\n// where `style` can be either `flat` or `preserve-3d`.\n// Browsers default to `flat`, mixin defaults to `preserve-3d`.\n@mixin transform-style($style: preserve-3d) {\n  @include experimental(transform-style, $style,\n    -moz, -webkit, -o, -ms, not(-khtml), official\n  );\n}\n\n// Determine the visibility of an element when it's back is turned\n//\n//     @include backface-visibility( [ visibility ] )\n//\n// where `visibility` can be either `visible` or `hidden`.\n// Browsers default to visible, mixin defaults to hidden\n@mixin backface-visibility($visibility: hidden) {\n  @include experimental(backface-visibility, $visibility,\n    -moz, -webkit, -o, -ms, not(-khtml), official\n  );\n}\n\n// @doc off\n// Transform Partials --------------------------------------------------------\n// These work well on their own, but they don't add to each other, they override.\n// Use along with transform parameter mixins to adjust origin, perspective and style\n// ---------------------------------------------------------------------------\n\n\n// Scale ---------------------------------------------------------------------\n// @doc on\n\n// Scale an object along the x and y axis:\n//\n//      @include scale( [ scale-x, scale-y, perspective, 3D-only ] )\n//\n// where the 'scale-' arguments are unitless multipliers of the x and y dimensions\n// and perspective, which works the same as the stand-alone perspective property/mixin\n// but applies to the individual element (multiplied with any parent perspective)\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scale(\n  $scale-x:     $default-scale-x,\n  $scale-y:     $scale-x,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: scale($scale-x, $scale-y);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Scale an object along the x axis\n// @include scaleX( [ scale-x, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleX(\n  $scale:       $default-scale-x,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: scaleX($scale);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Scale an object along the y axis\n// @include scaleY( [ scale-y, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleY(\n  $scale:       $default-scale-y,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: scaleY($scale);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Scale an object along the z axis\n// @include scaleZ( [ scale-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleZ(\n  $scale: $default-scale-z,\n  $perspective: false\n) {\n  $trans: scaleZ($scale);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// Scale and object along all three axis\n// @include scale3d( [ scale-x, scale-y, scale-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scale3d(\n  $scale-x:     $default-scale-x,\n  $scale-y:     $default-scale-y,\n  $scale-z:     $default-scale-z,\n  $perspective: false\n) {\n  $trans: scale3d($scale-x, $scale-y, $scale-z);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// @doc off\n// Rotate --------------------------------------------------------------------\n// @doc on\n\n// Rotate an object around the z axis  (2D)\n// @include rotate( [ rotation, perspective, 3D-only ] )\n// where 'rotation' is an angle set in degrees (deg) or radian (rad) units\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotate(\n  $rotate:      $default-rotate,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: rotate($rotate);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// A longcut for 'rotate' in case you forget that 'z' is implied\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateZ(\n  $rotate:      $default-rotate,\n  $perspective: false,\n  $only3d:      false\n) {\n  @include rotate($rotate, $perspective, $only3d);\n}\n\n// Rotate an object around the x axis (3D)\n// @include rotateX( [ rotation, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateX(\n  $rotate: $default-rotate,\n  $perspective: false\n) {\n  $trans: rotateX($rotate);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// Rotate an object around the y axis (3D)\n// @include rotate( [ rotation, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateY(\n  $rotate: $default-rotate,\n  $perspective: false\n) {\n  $trans: rotateY($rotate);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// Rotate an object around an arbitrary axis (3D)\n// @include rotate( [ vector-x, vector-y, vector-z, rotation, perspective ] )\n// where the 'vector-' arguments accept unitless numbers.\n// These numbers are not important on their own, but in relation to one another\n// creating an axis from your transform-origin, along the axis of Xx = Yy = Zz.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotate3d(\n  $vector-x: $default-vector-x,\n  $vector-y: $default-vector-y,\n  $vector-z: $default-vector-z,\n  $rotate: $default-rotate,\n  $perspective: false\n) {\n  $trans: rotate3d($vector-x, $vector-y, $vector-z, $rotate);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// @doc off\n// Translate -----------------------------------------------------------------\n// @doc on\n\n// Move an object along the x or y axis (2D)\n// @include translate( [ translate-x, translate-y, perspective, 3D-only ] )\n// where the 'translate-' arguments accept any distance in percentages or absolute (px, cm, in, em etc..) units.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translate(\n  $translate-x: $default-translate-x,\n  $translate-y: $default-translate-y,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: translate($translate-x, $translate-y);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Move an object along the x axis (2D)\n// @include translate( [ translate-x, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateX(\n  $trans-x:     $default-translate-x,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: translateX($trans-x);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Move an object along the y axis (2D)\n// @include translate( [ translate-y, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateY(\n  $trans-y:     $default-translate-y,\n  $perspective: false,\n  $only3d:      false\n) {\n  $trans: translateY($trans-y);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform($trans, $only3d);\n}\n\n// Move an object along the z axis (3D)\n// @include translate( [ translate-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateZ(\n  $trans-z:     $default-translate-z,\n  $perspective: false\n) {\n  $trans: translateZ($trans-z);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// Move an object along the x, y and z axis (3D)\n// @include translate( [ translate-x, translate-y, translate-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translate3d(\n  $translate-x: $default-translate-x,\n  $translate-y: $default-translate-y,\n  $translate-z: $default-translate-z,\n  $perspective: false\n) {\n  $trans: translate3d($translate-x, $translate-y, $translate-z);\n  @if $perspective { $trans: perspective($perspective) $trans; }\n  @include transform3d($trans);\n}\n\n// @doc off\n// Skew ----------------------------------------------------------------------\n// @doc on\n\n// Skew an element:\n//\n//     @include skew( [ skew-x, skew-y, 3D-only ] )\n//\n// where the 'skew-' arguments accept css angles in degrees (deg) or radian (rad) units.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skew(\n  $skew-x: $default-skew-x,\n  $skew-y: $default-skew-y,\n  $only3d: false\n) {\n  $trans: skew($skew-x, $skew-y);\n  @include transform($trans, $only3d);\n}\n\n// Skew an element along the x axiz\n//\n//     @include skew( [ skew-x, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skewX(\n  $skew-x: $default-skew-x,\n  $only3d: false\n) {\n  $trans: skewX($skew-x);\n  @include transform($trans, $only3d);\n}\n\n// Skew an element along the y axis\n//\n//     @include skew( [ skew-y, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skewY(\n  $skew-y: $default-skew-y,\n  $only3d: false\n) {\n  $trans: skewY($skew-y);\n  @include transform($trans, $only3d);\n}\n\n\n// Full transform mixins\n// For settings any combination of transforms as arguments\n// These are complex and not highly recommended for daily use. They are mainly\n// here for backward-compatibility purposes.\n//\n// * they include origin adjustments\n// * scale takes a multiplier (unitless), rotate and skew take degrees (deg)\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin create-transform(\n  $perspective: false,\n  $scale-x:     false,\n  $scale-y:     false,\n  $scale-z:     false,\n  $rotate-x:    false,\n  $rotate-y:    false,\n  $rotate-z:    false,\n  $rotate3d:    false,\n  $trans-x:     false,\n  $trans-y:     false,\n  $trans-z:     false,\n  $skew-x:      false,\n  $skew-y:      false,\n  $origin-x:    false,\n  $origin-y:    false,\n  $origin-z:    false,\n  $only3d:      false\n) {\n  $trans: unquote(\""\"");\n\n  // perspective\n  @if $perspective { $trans: perspective($perspective) ; }\n\n  // scale\n  @if $scale-x and $scale-y {\n    @if $scale-z { $trans: $trans scale3d($scale-x, $scale-y, $scale-z); }\n    @else { $trans: $trans scale($scale-x, $scale-y); }\n  } @else {\n    @if $scale-x { $trans: $trans scaleX($scale-x); }\n    @if $scale-y { $trans: $trans scaleY($scale-y); }\n    @if $scale-z { $trans: $trans scaleZ($scale-z); }\n  }\n\n  // rotate\n  @if $rotate-x { $trans: $trans rotateX($rotate-x); }\n  @if $rotate-y { $trans: $trans rotateY($rotate-y); }\n  @if $rotate-z { $trans: $trans rotateZ($rotate-z); }\n  @if $rotate3d { $trans: $trans rotate3d($rotate3d); }\n\n  // translate\n  @if $trans-x and $trans-y {\n    @if $trans-z { $trans: $trans translate3d($trans-x, $trans-y, $trans-z); }\n    @else { $trans: $trans translate($trans-x, $trans-y); }\n  } @else {\n    @if $trans-x { $trans: $trans translateX($trans-x); }\n    @if $trans-y { $trans: $trans translateY($trans-y); }\n    @if $trans-z { $trans: $trans translateZ($trans-z); }\n  }\n\n  // skew\n  @if $skew-x and $skew-y { $trans: $trans skew($skew-x, $skew-y); }\n  @else {\n    @if $skew-x { $trans: $trans skewX($skew-x); }\n    @if $skew-y { $trans: $trans skewY($skew-y); }\n  }\n\n  // apply it!\n  @include transform($trans, $only3d);\n  @include transform-origin($origin-x, $origin-y, $origin-z, $only3d);\n}\n\n\n// A simplified set of options\n// backwards-compatible with the previous version of the 'transform' mixin\n@mixin simple-transform(\n  $scale:    false,\n  $rotate:   false,\n  $trans-x:  false,\n  $trans-y:  false,\n  $skew-x:   false,\n  $skew-y:   false,\n  $origin-x: false,\n  $origin-y: false\n) {\n  @include create-transform(\n    false,\n    $scale, $scale, false,\n    false, false, $rotate, false,\n    $trans-x, $trans-y, false,\n    $skew-x, $skew-y,\n    $origin-x, $origin-y, false,\n    false\n  );\n}\n"",""// ---------------------------------------------------------------------------\n@include keyframes(bounceOut) {\n  0% {\n    @include scale(1); }\n  25% {\n    @include scale(0.95); }\n  50% {\n    opacity: 1;\n    @include scale(1.1); }\n  100% {\n    opacity: 0;\n    @include scale(0.3); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutUp) {\n  0% {\n    @include translateY(0); }\n  20% {\n    opacity: 1;\n    @include translateY(20px); }\n  100% {\n    opacity: 0;\n    @include translateY(-2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutDown) {\n  0% {\n    @include translateY(0); }\n  20% {\n    opacity: 1;\n    @include translateY(-20px); }\n  100% {\n    opacity: 0;\n    @include translateY(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutLeft) {\n  0% {\n    @include translateX(0); }\n  20% {\n    opacity: 1;\n    @include translateX(20px); }\n  100% {\n    opacity: 0;\n    @include translateX(-2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutRight) {\n  0% {\n    @include translateX(0); }\n  20% {\n    opacity: 1;\n    @include translateX(-20px); }\n  100% {\n    opacity: 0;\n    @include translateX(2000px); } }\n"",""// ---------------------------------------------------------------------------\n@include keyframes(bounceIn) {\n  0% {\n    opacity: 0;\n    @include scale(0.3); }\n  50% {\n    opacity: 1;\n    @include scale(1.05); }\n  70% {\n    @include scale(0.9); }\n  100% {\n    @include scale(1); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInDown) {\n  0% {\n    opacity: 0;\n    @include translateY(-2000px); }\n  60% {\n    opacity: 1;\n    @include translateY(30px); }\n  80% {\n    @include translateY(-10px); }\n  100% {\n    @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInUp) {\n  0% {\n    opacity: 0;\n    @include translateY(2000px); }\n  60% {\n    opacity: 1;\n    @include translateY(-30px); }\n  80% {\n    @include translateY(10px); }\n  100% {\n    @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInRight) {\n  0% {\n    opacity: 0;\n    @include translateX(2000px); }\n  60% {\n    opacity: 1;\n    @include translateX(-30px); }\n  80% {\n    @include translateX(10px); }\n  100% {\n    @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInLeft) {\n  0% {\n    opacity: 0;\n    @include translateX(-2000px); }\n  60% {\n    opacity: 1;\n    @include translateX(30px); }\n  80% {\n    @include translateX(-10px); }\n  100% {\n    @include translateX(0); } }\n"",""// ---------------------------------------------------------------------------\n@include keyframes(fadeOut) {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutUp) {\n  0% {\n    @include translateY(0);\n    opacity: 1; }\n  100% {\n    @include translateY(-20px);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutDown) {\n  0% {\n    @include translateY(0);\n    opacity: 1; }\n  100% {\n    @include translateY(20px);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutRight) {\n  0% {\n    @include translateX(0);\n    opacity: 1; }\n  100% {\n    @include translateX(20px);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutLeft) {\n  0% {\n    @include translateX(0);\n    opacity: 1; }\n  100% {\n    @include translateX(-20px);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutUpBig) {\n  0% {\n    @include translateY(0);\n    opacity: 1; }\n  100% {\n    @include translateY(-2000px);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutDownBig) {\n  0% {\n    opacity: 1;\n    @include translateY(0); }\n  100% {\n    opacity: 0;\n    @include translateY(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutRightBig) {\n  0% {\n    opacity: 1;\n    @include translateX(0); }\n  100% {\n    opacity: 0;\n    @include translateX(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutLeftBig) {\n  0% {\n    opacity: 1;\n    @include translateX(0); }\n  100% {\n    opacity: 0;\n    @include translateX(-2000px); } }\n"",""// ---------------------------------------------------------------------------\n@include keyframes(fadeIn) {\n  0% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInUp) {\n  0% {\n    @include translateY(20px);\n    opacity: 0; }\n  100% {\n    @include translateY(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInDown) {\n  0% {\n    @include translateY(-20px);\n    opacity: 0; }\n  100% {\n    @include translateY(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInRight) {\n  0% {\n    @include translateX(20px);\n    opacity: 0; }\n  100% {\n    @include translateX(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInLeft) {\n  0% {\n    @include translateX(-20px);\n    opacity: 0; }\n  100% {\n    @include translateX(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInUpBig) {\n  0% {\n    @include translateY(2000px);\n    opacity: 0; }\n  100% {\n    @include translateY(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInDownBig) {\n  0% {\n    opacity: 0;\n    @include translateY(-2000px); }\n  100% {\n    opacity: 1;\n    @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInRightBig) {\n  0% {\n    opacity: 0;\n    @include translateX(2000px); }\n  100% {\n    opacity: 1;\n    @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInLeftBig) {\n  0% {\n    opacity: 0;\n    @include translateX(-2000px); }\n  100% {\n    opacity: 1;\n    @include translateX(0); } }\n"",""// ---------------------------------------------------------------------------\n@include keyframes(flip) {\n  0% {\n    @include transform(perspective(400px) rotateY(0));\n    @include animation-timing-function(ease-out);\n  }\n  40% {\n    @include transform(perspective(400px) translateZ(150px) rotateY(170deg));\n    @include animation-timing-function(ease-out);\n  }\n  50% {\n    @include transform(perspective(400px) translateZ(150px) rotateY(190deg) scale(1));\n    @include animation-timing-function(ease-in);\n  }\n  80% {\n    @include transform(perspective(400px) rotateY(360deg) scale(0.95));\n    @include animation-timing-function(ease-in);\n  }\n  100% {\n    @include transform(perspective(400px) scale(1));\n    @include animation-timing-function(ease-in);\n  }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipInX) {\n  0% {\n    @include transform(perspective(400px) rotateX(90deg));\n    @include opacity(0);\n  }\n  40% {\n    @include transform(perspective(400px) rotateX(-10deg));\n  }\n  70% {\n    @include transform(perspective(400px) rotateX(10deg));\n  }\n  100% {\n    @include transform(perspective(400px) rotateX(0deg));\n    @include opacity(1);\n  }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipOutX) {\n  0% {\n    @include transform(perspective(400px) rotateX(0deg));\n    @include opacity(1);\n  }\n  100% {\n    @include transform(perspective(400px) rotateX(90deg));\n    @include opacity(0);\n  }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipInY) {\n  0% {\n    @include transform(perspective(400px) rotateY(90deg));\n    @include opacity(0);\n  }\n  40% {\n    @include transform(perspective(400px) rotateY(-10deg));\n  }\n  70% {\n    @include transform(perspective(400px) rotateY(10deg));\n  }\n  100% {\n    @include transform(perspective(400px) rotateY(0deg));\n    @include opacity(1);\n  }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipOutY) {\n  0% {\n    @include transform(perspective(400px) rotateY(0deg));\n    @include opacity(1);\n  }\n  100% {\n    @include transform(perspective(400px) rotateY(90deg));\n    @include opacity(0);\n  }\n}\n"",""// ---------------------------------------------------------------------------\n@include keyframes(lightSpeedIn) {\n  0% {\n    @include transform(translateX(100%) skewX(-30deg));\n    @include opacity(0); }\n  60% {\n    @include transform(translateX(-20%) skewX(30deg));\n    @include opacity(1); }\n  80% {\n    @include transform(translateX(0%) skewX(-15deg));\n    @include opacity(1); }\n  100% {\n    @include transform(translateX(0%) skewX(0deg));\n    @include opacity(1); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(lightSpeedOut) {\n  0% {\n    @include transform(translateX(0%) skewX(0deg));\n    @include opacity(1); }\n  100% {\n    @include transform(translateX(100%) skewX(-30deg));\n    @include opacity(0); } }"",""// ---------------------------------------------------------------------------\n@include keyframes(rotateOut) {\n  0% {\n    @include transform-origin(center center);\n    @include rotate(0);\n    opacity: 1; }\n  100% {\n    @include transform-origin(center center);\n    @include rotate(200deg);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutDownLeft) {\n  0% {\n    @include transform-origin(left bottom);\n    @include rotate(0);\n    opacity: 1; }\n  100% {\n    @include transform-origin(left bottom);\n    @include rotate(90deg);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutUpLeft) {\n  0% {\n    @include transform-origin(left bottom);\n    @include rotate(0);\n    opacity: 1; }\n  100% {\n    @include transform-origin(left bottom);\n    @include rotate(-90deg);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutDownRight) {\n  0% {\n    @include transform-origin(right bottom);\n    @include rotate(0);\n    opacity: 1; }\n  100% {\n    @include transform-origin(right bottom);\n    @include rotate(-90deg);\n    opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutUpRight) {\n  0% {\n    @include transform-origin(right bottom);\n    @include rotate(0);\n    opacity: 1; }\n  100% {\n    @include transform-origin(right bottom);\n    @include rotate(90deg);\n    opacity: 0; } }\n"",""// ---------------------------------------------------------------------------\n@include keyframes(rotateIn) {\n  0% {\n    @include transform-origin(center center);\n    @include rotate(-200deg);\n    opacity: 0; }\n  100% {\n    @include transform-origin(center center);\n    @include rotate(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInDownLeft) {\n  0% {\n    @include transform-origin(left bottom);\n    @include rotate(-90deg);\n    opacity: 0; }\n  100% {\n    @include transform-origin(left bottom);\n    @include rotate(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInUpLeft) {\n  0% {\n    @include transform-origin(left bottom);\n    @include rotate(90deg);\n    opacity: 0; }\n  100% {\n    @include transform-origin(left bottom);\n    @include rotate(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInUpRight) {\n  0% {\n    @include transform-origin(right bottom);\n    @include rotate(-90deg);\n    opacity: 0; }\n  100% {\n    @include transform-origin(right bottom);\n    @include rotate(0);\n    opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInDownRight) {\n  0% {\n    @include transform-origin(right bottom);\n    @include rotate(90deg);\n    opacity: 0; }\n  100% {\n    @include transform-origin(right bottom);\n    @include rotate(0);\n    opacity: 1; } }\n"",""// ---------------------------------------------------------------------------\n@include keyframes(hinge) {\n  0% {\n    @include rotate(0);\n    @include transform-origin(top left);\n    @include animation-timing-function(ease-in-out); }\n  20%, 60% {\n    @include rotate(80deg);\n    @include transform-origin(top left);\n    @include animation-timing-function(ease-in-out); }\n  40% {\n    @include rotate(60deg);\n    @include transform-origin(top left);\n    @include animation-timing-function(ease-in-out); }\n  80% {\n    @include transform(rotate(60deg) translateY(0));\n    @include opacity(1);\n    @include transform-origin(top left);\n    @include animation-timing-function(ease-in-out); }\n  100% {\n    @include translateY(700px);\n    @include opacity(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rollIn) {\n  0% {\n    @include opacity(0);\n    @include transform(translateX(-100%) rotate(-120deg)); }\n  100% {\n    @include opacity(1);\n    @include transform(translateX(0px) rotate(0deg)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rollOut) {\n  0% {\n    @include opacity(1);\n    @include transform(translateX(0px) rotate(0deg)); }\n  100% {\n    @include opacity(0);\n    @include transform(translateX(-100%) rotate(-120deg)); } }\n"",""@import \""mixins\"";\n\n/*Customizations to jqGrid styles.  Should be applied after the default jqGrid style are loaded*/\n\n.ui-jqgrid {\n\n\n    .bb-check-wrapper {\n        -webkit-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n    }\n\n    background-color: $bb-color-white;\n    //////////////////////////////////////////////////////////////\n    ///Begin: Apply styles to make jqGrid look like our normal tables\n    //////////////////////////////////////////////////////////////\n    thead {\n        border: 0;\n        @include bb-border(dark);\n        white-space: nowrap;\n        background-color: $bb-color-white;\n    }\n\n    .ui-jqgrid-view {\n        font-size: $font-size-base;\n        button.bb-btn-link-inline {\n            font-size: inherit;\n        }\n    }\n\n    .ui-jqgrid-htable th, tr.jqgrow td {\n        padding: $table-cell-padding;\n    }\n\n    .ui-th-column, .ui-jqgrid-htable th.ui-th-column {\n        white-space: nowrap;\n        text-align: left;\n        @include bb-field-label();\n        background-color: $bb-color-white;\n        background-clip: padding-box; /* workaround for background-color with borders in cells for firefox */\n    }\n\n    tr.jqgrow:nth-child(even) {\n        background-color: lighten($body-bg, 2%);\n    }\n\n    tr.ui-state-hover {\n        background-color: #e4e5f8 !important;\n        .bb-check-checkbox, .bb-check-radio {\n            border-color: #fff;\n        }\n    }\n\n    .grid-multiselect {\n        tr.ui-state-highlight {\n            background-color: #eeeffb;\n            border: 1px solid #dadbf6;\n\n            &:nth-child(2) {\n              border-top: none;\n            }\n        }\n    }\n\n    tr.jqgrow {\n        vertical-align: top;\n        td {\n            white-space: normal;\n            border-top: 0;\n            border-left: 0;\n            border-right: 0;\n            @include bb-border(row);\n            @include ellipsis(false);\n            .bb-check-checkbox.checked:before {\n                padding-left: 0;\n            }\n        }\n    }\n\n    tr th {\n        font-weight: normal;\n        color: grey;\n        border: 0;\n        border-right: 1px solid $gray-lighter;\n    }\n\n    /* the important is necessary here because jqgrid puts a display: none;\n       style on the span element */\n    thead .sorting-desc > div > span, thead .sorting-asc > div > span {\n        display: inline-block !important;\n        font-size: 14px;\n        margin-left: 3px;\n        @extend .fa;\n    }\n\n    thead .sorting-desc > div > span {\n        @extend .fa-caret-down;\n    }\n\n    thead .sorting-asc > div > span {\n        @extend .fa-caret-up;\n    }\n\n    thead .sorting-desc, thead .sorting-asc {\n        > div:after {\n            display: none;\n        }\n    }\n\n    //////////////////////////////////////////////////////////////\n    ///End: Apply styles to make jqGrid look like our normal tables\n    //////////////////////////////////////////////////////////////\n    /*Drag drop placeholder styles*/\n    .ui-sortable-placeholder {\n        background-color: #FFFFDF;\n    }\n    /*Drag drop style for item being dragged*/\n    th.ui-sortable-helper {\n        background-color: $gray-lighter;\n    }\n    /* Column Resize Helper - The line that is shown when actively resizing a column*/\n    .ui-jqgrid-resize-mark {\n        width: 2px;\n        left: 0;\n        background-color: #777;\n        cursor: e-resize;\n        cursor: col-resize;\n        position: absolute;\n        top: 0;\n        height: 100px;\n        overflow: hidden;\n        display: none;\n        border: 0 none;\n        z-index: 99999;\n    }\n    /*Better position move handle to be centered on the border between table headers*/\n    .ui-jqgrid-resize-ltr {\n        position: absolute;\n        right: -14px;\n        width: 30px;\n        z-index: 50;\n        min-height: 20px;\n        height: 50% !important;\n        vertical-align: middle;\n    }\n    /*Prevent browser touch action from interrupting drag and drop*/\n    .ui-jqgrid-htable {\n        -ms-touch-action: none;\n        touch-action: none;\n    }\n\n\n    .ui-jqgrid-htable th.ui-th-column {\n        overflow: visible;\n        position: relative;\n    }\n\n    .ui-jqgrid-htable th {\n        cursor: pointer;\n\n        >div {\n            @include ellipsis(false);\n            height: auto !important;\n            max-height: 80px;\n            max-width: 100%;\n            vertical-align: middle;\n            white-space: pre-wrap;\n        }\n\n        .bb-check-checkbox {\n            height: 22px;\n        }\n\n        .bb-check-checkbox:before {\n            padding-left: 0;\n        }\n    }\n\n    /*jqgfirstrow is used by jqgrid to force the column widths from the headers\n      table to be respected in the body table.  Need to kill paddings there to prevent\n      this row from forcing a horizontal scrollbar on the table.\n    */\n    tr.jqgfirstrow td {\n        padding: 0;\n        border: none;\n    }\n\n    .ui-jqgrid-bdiv {\n        background-color: white;\n        overflow: hidden;\n    }\n\n    .loading {\n        display: none !important;\n    }\n\n    .dropdown-toggle {\n        color: $gray-light;\n        text-decoration: none!important;\n    }\n\n    tr.jqgrow td.bb-grid-dropdown-cell {\n        overflow: visible;\n    }\n}\n"",""@import \""variables\"";\n@import \""bootstrap-variable-defaults\"";\n@import \""Bootstrap/variables\"";\n@import \""compass\"";\n@import \""animation/core\"";\n@import \""Bootstrap/mixins\"";\n\n@mixin shadow ($h-shadow:0px, $v-shadow:0px, $blur:5px, $spread-radius:0, $color:$gray-dark-text) {\n    box-shadow: $h-shadow $v-shadow $blur $spread-radius $color;\n}\n\n@mixin rounded-corners ($tl-length:5px, $tr-length:5px, $br-length:5px, $bl-length:5px) {\n    border-radius: $tl-length $tr-length $br-length $bl-length;\n}\n\n@mixin text-shadow ($h-shadow:1px, $v-shadow:1px, $blur:0px, $color:$gray) {\n    text-shadow: $h-shadow $v-shadow $blur $color;\n}\n\n@mixin field-invalid {\n    box-shadow: 0 0 8px rgba(237, 85, 101, 0.6);\n    border: 1px solid #ed5565;\n    outline: none;\n}\n\n@mixin input-group-field {\n    margin-bottom: 21px;\n}\n\n@mixin input-group-field-invalid {\n    margin-bottom: 1px;\n}\n\n@mixin spin ($speed: 1s) {\n    -webkit-animation: bb-spin-frames $speed infinite linear;\n    -moz-animation: bb-spin-frames $speed infinite linear;\n    -o-animation: bb-spin-frames $speed infinite linear;\n    animation: bb-spin-frames $speed infinite linear;\n    /* Make the element inline-block so that it spins in place. */\n    display: inline-block;\n}\n\n@mixin bb-border($type, $sides...) {\n\n    @if(length($sides) == 0) {\n        @if($type != \""tile\"") {\n            $sides: \""bottom\"";\n        } @else {\n            $sides: \""top\"";\n        }\n    }\n\n    @each $side in $sides {\n      @if($type == \""light\"") {\n          border-#{$side}: 1px solid $sky-border-color-neutral-light;\n      }\n\n      @if($type == \""dark\"") {\n          border-#{$side}: 1px solid $sky-border-color-neutral-medium;\n      }\n\n      @if($type == \""nav\"") {\n          border-#{$side}: $bb-nav-selected-border-width solid #1c84c6;\n      }\n\n      @if($type == \""tab\"") {\n          border-#{$side}: 2px solid $sky-background-color-primary-dark;\n      }\n\n      @if($type == \""tile\"") {\n          border-top: 4px solid $sky-border-color-neutral-medium;\n      }\n\n      @if($type == \""row\"") {\n          border-#{$side}: 1px dotted $sky-border-color-neutral-medium;\n      }\n    }\n\n\n}\n\n@mixin bb-page-heading {\n    font: 300 34px $bb-font-family-narrow;\n    color: $text-color;\n    font-stretch: condensed;\n}\n\n@mixin bb-subsection-heading {\n    font: 300 19px $font-family-sans-serif;\n    color: $bb-text-deemphasized-color;\n}\n\n@mixin bb-section-heading {\n    font: 300 26px $bb-font-family-narrow;\n    color: $text-color;\n    font-stretch: condensed;\n}\n\n@mixin bb-headline {\n    font: 400 22px $bb-font-family-narrow;\n    color: $text-color;\n    font-stretch: condensed;\n}\n\n@mixin bb-emphasized {\n    font: 600 16px $font-family-sans-serif;\n    color: $text-color;\n}\n\n@mixin bb-field-label {\n    font: 400 $font-size-base $font-family-sans-serif;\n    color: $bb-text-deemphasized-color;\n}\n\n@mixin bb-deemphasized {\n    font: 400 italic $font-size-base $font-family-sans-serif;\n    color: $bb-text-deemphasized-color;\n}\n\n@mixin bb-focus-indication {\n    outline: thin dotted;\n\n    //webkit\n    outline: -webkit-focus-ring-color auto 5px;\n    outline-offset: -2px;\n}"",""@import \""../../css3/shared\"";\n\n// To get full firefox support, you must install the ellipsis pattern:\n//\n//     compass install compass/ellipsis\n$use-mozilla-ellipsis-binding: false !default;\n\n// This technique, by [Justin Maxwell](http://code404.com/), was originally\n// published [here](http://mattsnider.com/css/css-string-truncation-with-ellipsis/).\n// Firefox implementation by [Rikkert Koppes](http://www.rikkertkoppes.com/thoughts/2008/6/).\n@mixin ellipsis($no-wrap: true) {\n  @if $no-wrap { white-space: nowrap; }\n  overflow: hidden;\n  @include experimental(text-overflow, ellipsis,\n    not(-moz),\n    not(-webkit),\n    -o,\n    -ms,\n    not(-khtml),\n    official\n  );\n  @if $experimental-support-for-mozilla and $use-mozilla-ellipsis-binding {\n    -moz-binding: stylesheet-url(unquote(\""xml/ellipsis.xml#ellipsis\""));\n  }\n}\n"",""@import \""mixins\"";\n\n.bb-action-bar {\n    background-color: #f9f8f8;\n    padding: $padding;\n    border-top: 1px solid $border-color;\n    @include bb-border(light);\n\n    .bb-action-bar-group {\n        display: inline-block;\n        .dropdown-menu {\n            .bb-action-bar-item-button {\n                background-color: transparent;\n                display: block;\n                box-sizing: border-box;\n                padding: 3px 20px;\n                clear: both;\n                white-space: nowrap;\n                font-weight: normal;\n                font-size: 12px;\n                text-align: left;\n                margin: 4px;\n                line-height: 25px;\n                color: inherit;\n                border: none;\n                border-radius: 3px;\n                width: 95%;\n            }\n            .bb-action-bar-item-button:hover, .bb-action-bar-item-button:focus {\n                text-decoration: none;\n                color: $dropdown-link-hover-color;\n                background-color: $dropdown-link-hover-bg;\n            }\n            .bb-action-bar-item-button:focus {\n                @include bb-focus-indication();\n            }\n        }\n    }\n\n    .btn+.btn {\n        margin-left: 10px;\n    }\n\n    .dropdown {\n        display: inline-block;\n    }\n\n    .btn+.dropdown, .dropdown+.btn {\n        margin-left: 10px;\n    }\n\n    .bb-btn-secondary {\n        min-width: 0;\n    }\n\n    .caret {\n        margin-left: 5px;\n    }\n}\n"","".bb-label-list {\n  .label {\n      display: inline-block;\n      margin: $margin-half;\n      line-height: inherit;\n  }\n}\n\n\n.label {\n  background-color: $gray-lighter;\n  color: $bb-label-badge-color;\n  font-family: $font-family-base;\n  font-size: $font-size-base;\n  font-weight: 600;\n  text-shadow: none;\n  padding-left: .6em;\n  padding-right: .6em;\n  border-radius: 10rem;\n}\n\n.badge {\n  background-color: $gray-lighter;\n  color: $bb-label-badge-color;\n  font-family: $font-family-base;\n  font-size: 11px;\n  font-weight: 600;\n  padding-bottom: 4px;\n  padding-left: 6px;\n  padding-right: 6px;\n  text-shadow: none;\n}\n\n.label-primary,\n.bb-badge-primary {\n  background-color: $bb-color-green;\n  color: white;\n}\n\n.label-success,\n.bb-badge-success {\n  background-color: $bb-color-green;\n  color: white;\n}\n\n.label-warning,\n.bb-badge-warning {\n  background-color: $bb-color-yellow;\n  color: white;\n}\n\n.label-danger,\n.bb-badge-danger {\n  background-color: $bb-color-red;\n  color: white;\n}\n\n.label-info,\n.bb-badge-info {\n  background-color: $bb-color-aqua;\n  color: white;\n}\n"",""@import \""mixins\"";\n\n.btn {\n  border-radius: $bb-btn-border-radius;\n}\n\n.btn-success {\n  background-color: $bb-color-green;\n  border-color: $bb-color-green;\n}\n\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-color: darken($bb-color-green, 3%);\n  border-color: darken($bb-color-green, 3%);\n}\n\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\n\n.btn-success.disabled,\n.btn-success.disabled:hover,\n.btn-success.disabled:focus,\n.btn-success.disabled:active,\n.btn-success.disabled.active,\n.btn-success[disabled],\n.btn-success[disabled]:hover,\n.btn-success[disabled]:focus,\n.btn-success[disabled]:active,\n.btn-success.active[disabled],\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-success:hover,\nfieldset[disabled] .btn-success:focus,\nfieldset[disabled] .btn-success:active,\nfieldset[disabled] .btn-success.active {\n  background-color: lighten($bb-color-green, 4%);\n  border-color: lighten($bb-color-green, 4%);\n}\n\n.btn-info {\n  background-color: $bb-color-aqua;\n  border-color: $bb-color-aqua;\n}\n\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-color: darken($bb-color-aqua, 3%);\n  border-color: darken($bb-color-aqua, 3%);\n}\n\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\n\n.btn-info.disabled,\n.btn-info.disabled:hover,\n.btn-info.disabled:focus,\n.btn-info.disabled:active,\n.btn-info.disabled.active,\n.btn-info[disabled],\n.btn-info[disabled]:hover,\n.btn-info[disabled]:focus,\n.btn-info[disabled]:active,\n.btn-info.active[disabled],\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-info:hover,\nfieldset[disabled] .btn-info:focus,\nfieldset[disabled] .btn-info:active,\nfieldset[disabled] .btn-info.active {\n  background-color: lighten($bb-color-aqua, 4%);\n  border-color: lighten($bb-color-aqua, 4%);\n}\n\n.bb-btn-secondary {\n    color: $text-color;\n    background-color: $bb-color-white;\n    border: 1px solid $border-color;\n}\n\n.bb-btn-secondary:hover,\n.bb-btn-secondary:focus,\n.bb-btn-secondary:active,\n.bb-btn-secondary.active,\n.open .dropdown-toggle.bb-btn-secondary {\n    color: inherit;\n    border: 1px solid #d2d2d2;\n    background-color: $sky-background-color-neutral-light;\n}\n.bb-btn-secondary:active,\n.bb-btn-secondary.active {\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset;\n}\n\n.bb-btn-secondary:active,\n.bb-btn-secondary.active,\n.open .dropdown-toggle.bb-btn-secondary {\n  background-image: none;\n}\n\n.bb-btn-secondary.disabled,\n.bb-btn-secondary.disabled:hover,\n.bb-btn-secondary.disabled:focus,\n.bb-btn-secondary.disabled:active,\n.bb-btn-secondary.disabled.active,\n.bb-btn-secondary[disabled],\n.bb-btn-secondary[disabled]:hover,\n.bb-btn-secondary[disabled]:focus,\n.bb-btn-secondary[disabled]:active,\n.bb-btn-secondary.active[disabled],\nfieldset[disabled] .bb-btn-secondary,\nfieldset[disabled] .bb-btn-secondary:hover,\nfieldset[disabled] .bb-btn-secondary:focus,\nfieldset[disabled] .bb-btn-secondary:active,\nfieldset[disabled] .bb-btn-secondary.active {\n  color: #cacaca;\n}\n\n.btn-warning {\n  background-color: $bb-color-yellow;\n  border-color: $bb-color-yellow;\n}\n\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-color: darken($bb-color-yellow, 3%);\n  border-color: darken($bb-color-yellow, 3%);\n}\n\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n\n.btn-warning.disabled,\n.btn-warning.disabled:hover,\n.btn-warning.disabled:focus,\n.btn-warning.disabled:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled],\n.btn-warning[disabled]:hover,\n.btn-warning[disabled]:focus,\n.btn-warning[disabled]:active,\n.btn-warning.active[disabled],\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-warning:hover,\nfieldset[disabled] .btn-warning:focus,\nfieldset[disabled] .btn-warning:active,\nfieldset[disabled] .btn-warning.active {\n  background-color: lighten($bb-color-yellow, 4%);\n  border-color: lighten($bb-color-yellow, 4%);\n}\n\n.btn-danger {\n  background-color: $bb-color-red;\n  border-color: $bb-color-red;\n  color: white;\n}\n\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-color: darken($bb-color-red, 3%);\n  border-color: darken($bb-color-red, 3%);\n  color: white;\n}\n\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n\n.btn-danger.disabled,\n.btn-danger.disabled:hover,\n.btn-danger.disabled:focus,\n.btn-danger.disabled:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled],\n.btn-danger[disabled]:hover,\n.btn-danger[disabled]:focus,\n.btn-danger[disabled]:active,\n.btn-danger.active[disabled],\nfieldset[disabled] .btn-danger,\nfieldset[disabled] .btn-danger:hover,\nfieldset[disabled] .btn-danger:focus,\nfieldset[disabled] .btn-danger:active,\nfieldset[disabled] .btn-danger.active {\n  background-color: lighten($bb-color-red, 4%);\n  border-color: lighten($bb-color-red, 4%);\n}\n\n.btn-link {\n  color: $sky-text-color-action-primary;\n}\n\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active,\n.btn-link.active,\n.open .dropdown-toggle.btn-link {\n  color: darken($sky-text-color-action-primary, 10%);\n}\n\n.btn-link:active,\n.btn-link.active,\n.open .dropdown-toggle.btn-link {\n  background-image: none;\n}\n\n.btn-link.disabled,\n.btn-link.disabled:hover,\n.btn-link.disabled:focus,\n.btn-link.disabled:active,\n.btn-link.disabled.active,\n.btn-link[disabled],\n.btn-link[disabled]:hover,\n.btn-link[disabled]:focus,\n.btn-link[disabled]:active,\n.btn-link.active[disabled],\nfieldset[disabled] .btn-link,\nfieldset[disabled] .btn-link:hover,\nfieldset[disabled] .btn-link:focus,\nfieldset[disabled] .btn-link:active,\nfieldset[disabled] .btn-link.active {\n  color: #cacaca;\n}\n\n.btn-link {\n  color: $link-color;\n  padding: 0;\n  &:hover {\n    color: $link-hover-color;\n  }\n}\n\n.btn.bb-btn-link-inline {\n  @extend .btn-link;\n  font-size: inherit;\n  line-height: inherit;\n  display: inline;\n  width: auto;\n  height: auto;\n  border: none;\n  vertical-align: top;\n}\n\n.bb-show-more {\n  @extend .badge;\n  border: 0;\n  background-color: $gray-lightest;\n  color: $text-color;\n}\n"",""$sky-color-white: #ffffff !default;\n$sky-color-black: #000000 !default;\n$sky-color-gray-10: #e2e3e4 !default;\n$sky-color-gray-20: #cdcfd2 !default;\n$sky-color-gray-70: #686c73 !default;\n$sky-color-gray-80: #4d525a !default;\n$sky-color-gray-90: #393d44 !default;\n$sky-color-gray-100: #282b31 !default;\n$sky-color-gray-01: #fbfbfb !default;\n$sky-color-gray-05: #eeeeef !default;\n$sky-color-blue-10: #c1e8fb !default;\n$sky-color-blue-30: #81d4f7 !default;\n$sky-color-blue-50: #00b4f1 !default;\n$sky-color-blue-70: #007ca6 !default;\n$sky-color-green-30: #b7da9b !default;\n$sky-color-green-50: #71bf43 !default;\n$sky-color-yellow-30: #ffd597 !default;\n$sky-color-yellow-50: #fbb034 !default;\n$sky-color-red-30: #f7a08f !default;\n$sky-color-red-50: #ef4044 !default;\n$sky-color-red-70: #d93a3d !default;\n$sky-color-purple-10: #f1eef6 !default;\n$sky-color-purple-50: #936daf !default;\n$sky-color-teal-50: #00b795 !default;\n$sky-color-teal-70: #00866d !default;\n$sky-text-color-default: #282b31 !default;\n$sky-text-color-deemphasized: #686c73 !default;\n$sky-text-color-on-dark: #ffffff !default;\n$sky-text-color-action-primary: #007ca6 !default;\n$sky-background-color-neutral-light: #eeeeef !default;\n$sky-background-color-primary-dark: #007ca6 !default;\n$sky-background-color-selected: #f1eef6 !default;\n$sky-background-color-disabled: #cdcfd2 !default;\n$sky-background-color-info: #81d4f7 !default;\n$sky-background-color-success: #b7da9b !default;\n$sky-background-color-warning: #ffd597 !default;\n$sky-background-color-danger: #f7a08f !default;\n$sky-background-color-danger-dark: #d93a3d !default;\n$sky-highlight-color-info: #00b4f1 !default;\n$sky-highlight-color-success: #71bf43 !default;\n$sky-highlight-color-warning: #fbb034 !default;\n$sky-highlight-color-danger: #ef4044 !default;\n$sky-border-color-neutral-light: #e2e3e4 !default;\n$sky-border-color-neutral-medium: #cdcfd2 !default;\n"",""@import \""mixins\"";\n\n.bb-check-wrapper input {\n    opacity: 0;\n    position: absolute;\n    height: 22px;\n    width: 22px;\n    margin: 0;\n    padding: 0;\n}\n\n.bb-check-wrapper {\n  span.bb-check-label-text {\n    vertical-align: middle;\n    font-weight: 400;\n  }\n}\n\n.bb-check-checkbox,\n.bb-check-radio {\n    border: 1px solid $gray-lighter;\n    cursor: pointer;\n    display: inline-block;\n    height: 22px;\n    margin: 0;\n    padding: 0;\n    vertical-align: middle;\n    width: 22px;\n    text-align: center;\n    font-size: 14px;\n    background-color: $bb-color-white;\n    line-height: 23px;\n}\n\n.bb-check-radio {\n    border-radius: 50%;\n}\n\n.bb-check-wrapper input:hover + .bb-check-checkbox,\n.bb-check-wrapper input:hover + .bb-check-radio {\n    border: 2px solid $bb-color-blue;\n}\n\n.bb-check-wrapper input:checked + .bb-check-checkbox,\n.bb-check-wrapper input:checked  + .bb-check-radio {\n    background-color: $bb-color-blue;\n    border: none;\n\n    &:before {\n      color: $bb-color-white;\n      content: $bbsky-char-check-nostroke;\n      font-family: BBSKY;\n      font-size: $bb-font-size-sm;\n    }\n}\n\n\n.bb-check-wrapper input:disabled + .bb-check-checkbox,\n.bb-check-wrapper input:disabled + .bb-check-radio {\n    background-color: $input-bg-disabled;\n    border: 1px solid $gray-lighter;\n    cursor: default;\n}\n\n.bb-check-wrapper input:focus + .bb-check-checkbox,\n.bb-check-wrapper input:focus + .bb-check-radio {\n    @include bb-focus-indication();\n}\n\n@media (min-width: $screen-sm-min) {\n    .form-inline {\n        .bb-check-wrapper {\n            margin-bottom: 0;\n        }\n    }\n}"",""@import \""mixins\"";\n\n.bb-checklist-wrapper {\n    overflow-y: auto;\n    min-height: 75px;\n\n    table {\n        margin: 0;\n\n        thead {\n            th:first-child, th:last-child {\n                @include rounded-corners(0, 0, 0, 0);\n            }\n        }\n    }\n}\n\n.bb-checklist-table {\n    border-top: 1px solid $gray-lighter;\n}\n\n.bb-checklist-checkbox-column {\n    width: 30px;\n}\n\n.bb-checklist-row {\n    cursor: pointer;\n}\n\n.bb-checklist-filter-bar {\n    background-color: $sky-background-color-neutral-light;\n    border-bottom: 1px solid $gray-lighter;\n    padding: $padding;\n\n    &:last-child {\n        border: none;\n    }\n\n    .btn {\n        margin: 0 $margin-half;\n        min-width: 65px;\n\n        &.btn-link {\n            margin: 0 $margin-half 0 0;\n            min-width: 0;\n            outline: none;\n        }\n    }\n\n    .bb-checklist-clear {\n        margin-right: 15px;\n    }\n\n    .btn-primary {\n        font-size: 12px;\n        font-weight: normal;\n    }\n\n    input.bb-checklist-search-box {\n        background-color: #fff;\n        width: 100%;\n        outline: none;\n        border: none;\n        -webkit-appearance: none;\n        height: auto;\n        box-shadow: none;\n\n    }\n\n    .bb-search-disabled {\n      .bb-checklist-search-box, .bb-checklist-search-icon {\n          background-color: $input-bg-disabled;\n          cursor: not-allowed;\n      }\n    }\n}\n\n.bb-checklist-select-all-bar {\n    padding-bottom: $padding-half;\n    padding-top: $padding-half;\n}\n\n.bb-checklist-category-bar {\n    white-space: nowrap;\n    overflow: auto;\n    .form-control {\n        margin-right: $margin-plus-half;\n    }\n    .control-label {\n        margin-bottom: 0;\n    }\n    .form-group {\n        margin-bottom: 0;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .form-group + .form-group {\n          margin-bottom: 0;\n          margin-top: 5px;\n      }\n    }\n}\n\n.bb-checklist-search {\n    display: flex;\n    display: -ms-flex;\n    width: 100%;\n    height: 26px;\n}\n\n.bb-checklist-search-icon {\n    background-color: #fff;\n    width: 22px;\n}\n\n.bb-checklist-link {\n    margin-right: $margin;\n}\n\n.bb-checklist-no-items {\n    text-align: center;\n    margin-top: $margin;\n    margin-bottom: $margin;\n}\n\n.bb-checklist-list-row {\n    background-color: transparent;\n    border: none;\n    border-bottom: dotted 1px $gray-lighter;\n    cursor: pointer;\n    display: table;\n    margin-bottom: 0;\n    padding: $padding;\n    outline-offset: -5px;\n    table-layout: fixed;\n    text-align: left;\n    width: 100%;\n\n    &:last-child {\n        border: none;\n    }\n}\n\n.bb-checklist-list-col {\n    display: table-cell;\n    font-weight: normal;\n    padding-right: $padding;\n    vertical-align: middle;\n    word-wrap: break-word;\n}\n\n.bb-checklist-list-col-checkbox {\n    width: $padding + 22px;\n}\n\n.bb-checklist-list-title {\n    @include bb-emphasized();\n}\n\n.bb-checklist-single {\n    .bb-checklist-row-selected {\n        background-color:#eeeffb; //TODO: Figure out if this needs to go into a variable\n    }\n\n    .bb-checklist-list-col-checkbox {\n        //display: none;\n    }\n}\n"",""@import \""mixins\"";\n.modal-open {\n    ul.uib-datepicker-popup.dropdown-menu {\n        z-index: $bb-zindex-dropdown-append-to-body;\n    }\n}\n\nul.uib-datepicker-popup.dropdown-menu {\n    border: 1px solid #ddd;\n    border-radius: 5px;  \n}\n\n.bb-datefield.input-group, ul.uib-datepicker-popup.dropdown-menu {\n\n    .btn-default {\n        color: $text-color;\n        background-color: #fff;\n        border-color: #fff;\n        border-radius: 3px;\n    }\n\n    .btn-default:hover, .btn-default:focus, .btn-default:active, btn-default.active {\n        color: $text-color;\n        background-color: #ebebeb;\n        border-color: #adadad;\n    }\n\n    .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {\n        color: #fff;\n        background-color: $bb-color-blue;\n        border-color: #ccc;\n\n        .text-info {\n            color: #fff;\n        }\n    }\n\n    .btn-info {\n        color: #fff;\n        background-color: $bb-color-blue;\n        border-color: #ddd;\n\n        .text-info {\n            color: #fff;\n        }\n    }\n\n    ul.dropdown-menu {\n        border: 1px solid #ddd;\n        border-radius: 5px;\n        left: auto !important;\n        right: 0;\n    }\n\n    .bb-date-field-calendar-button {\n        color: #666;\n        background-color: #fff;\n        border-color: #ddd;\n        border-radius: 0;\n    }\n\n    .text-info {\n        color: #31708f;\n    }\n\n    .bb-date-field-calendar-button:hover, .bb-date-field-calendar-button:focus, .bb-date-field-calendar-button:active, .bb-date-field-calendar-button.active, .bb-datefield-open .bb-date-field-calendar-button {\n        background-color: #bababa;\n        color: #fff;\n    }\n}\n\n.ng-invalid-required > .bb-datefield > input.form-control.ng-untouched {\n    border: 1px solid #e5e6e7;\n    box-shadow: none;\n    outline: none;\n}\n"","".dropdown-menu {\n  border: medium none;\n  border-radius: 3px;\n  box-shadow: 0 0 3px rgba(86, 96, 117, 0.7);\n  display: none;\n  float: left;\n  font-size: $font-size-base;\n  left: 0;\n  list-style: none outside none;\n  margin-bottom: $margin-half;\n  padding: 0;\n  position: absolute;\n  text-shadow: none;\n  top: 100%;\n  z-index: 1000;\n  border-radius: 2px;\n}\n\n.dropdown-menu > li > a {\n  border-radius: 3px;\n  color: inherit;\n  line-height: 25px;\n  margin: 4px;\n  text-align: left;\n  font-weight: normal;\n}\n\n\n\n.caret {\n    border-top: none;\n    border-right: none;\n    border-left: none;\n    height: auto;\n    margin-left: 3px;\n    width: auto;\n    @extend .fa;\n    @extend .fa-caret-down;\n}\n\n.bb-context-menu-btn {\n    border-color: #c1c1c1;\n    border-radius: 50%;\n    padding: 0;\n    height: $bb-context-menu-size;\n    width: $bb-context-menu-size;\n\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n        border-color: #b0b0b0;\n    }\n\n    &:focus {\n      @include bb-focus-indication();\n    }\n}\n\n.open > .bb-context-menu-btn:focus {\n  outline: none;\n}\n\n.open .dropdown-toggle.bb-btn-secondary.bb-context-menu-btn {\n    border-color: #b0b0b0;\n}\n\n\n.bb-submenu {\n    .panel-body {\n        a {\n            border-radius: 3px;\n            clear: both;\n            color: inherit;\n            display: block;\n            font-weight: normal;\n            line-height: 25px;\n            margin: 4px;\n            padding: 3px 20px;\n            text-align: left;\n            white-space: nowrap;\n\n            &.font-bold {\n                font-weight: 600;\n            }\n\n            &:hover,\n            &:focus {\n                text-decoration: none;\n                color: $dropdown-link-hover-color;\n                background-color: $dropdown-link-hover-bg;\n            }\n        }\n    }\n\n    .disabled .panel-body a {\n        &,\n        &:hover,\n        &:focus {\n            color: $dropdown-link-disabled-color;\n        }\n\n        // Nuke hover/focus effects\n        &:hover,\n        &:focus {\n            text-decoration: none;\n            background-color: transparent;\n            background-image: none; // Remove CSS gradient\n            @include reset-filter;\n            cursor: $cursor-disabled;\n        }\n    }\n\n    .panel-title {\n        font-size: inherit;\n    }\n}\n\n.bb-context-menu .dropdown-menu, .dropdown-menu bb-context-menu-item, .bb-dropdown-menu.dropdown-menu {\n  \n    li.disabled, .bb-dropdown-item.disabled {\n        pointer-events:none;  \n    }\n\n    li > a, .bb-dropdown-item > a, .bb-dropdown-item > .bb-btn-secondary {\n        border-radius: 3px;\n        clear: both;\n        color: inherit;\n        display: block;\n        font-weight: normal;\n        line-height: 25px;\n        margin: 4px;\n        padding: 3px 20px;\n        text-align: left;\n        white-space: nowrap;\n    }\n\n    .bb-dropdown-item > .bb-btn-secondary {\n        background-color: transparent;\n        display: block;\n        box-sizing: border-box;\n        padding: 3px 20px;\n        clear: both;\n        white-space: nowrap;\n        font-weight: normal;\n        font-size: $font-size-base;\n        text-align: left;\n        margin: 4px;\n        line-height: 25px;\n        color: inherit;\n        border: none;\n        border-radius: 3px;\n        width: 95%;\n    }\n\n    li > a.font-bold, .bb-dropdown-item > a.font-bold {\n        font-weight: 600;\n    }\n\n    li > a, .bb-submenu .panel-body a, .bb-dropdown-item > a, .bb-dropdown-item > .bb-btn-secondary {\n        &:hover,\n        &:focus {\n            text-decoration: none;\n            color: $dropdown-link-hover-color;\n            background-color: $dropdown-link-hover-bg;\n        }\n    }\n\n    .active > a {\n        &,\n        &:hover,\n        &:focus {\n            color: $dropdown-link-active-color;\n            text-decoration: none;\n            outline: 0;\n            background-color: $dropdown-link-active-bg;\n        }\n    }\n\n    .disabled > a {\n        &,\n        &:hover,\n        &:focus {\n            color: $dropdown-link-disabled-color;\n        }\n\n        // Nuke hover/focus effects\n        &:hover,\n        &:focus {\n            text-decoration: none;\n            background-color: transparent;\n            background-image: none; // Remove CSS gradient\n            @include reset-filter;\n            cursor: $cursor-disabled;\n        }\n    }\n}\n\nbody.dropdown {\n    position: static;\n}\n\nbody.dropup {\n    position: static;\n}\n.bb-submenu {\n\n    border-bottom: 1px solid #ddd;\n    border-top: 1px solid #ddd;\n\n    .panel-group {\n        margin-bottom: 0;\n        .panel {\n            border: none;\n            .panel-body {\n                padding: 0;\n                a {\n                    padding-left: 30px;\n                }\n            }\n        }\n    }\n\n    .panel-title {\n        > .accordion-toggle {\n            outline: none;\n            font-weight: normal;\n        }\n        .bb-submenu-chevron {\n            color: #D1DADE;\n            float: right;\n            margin: 1px 0;\n            padding: 0;\n        }\n    }\n    .panel-heading {\n        background-color: #f8f8f9;\n        margin-left: 0;\n        padding-left: 20px;\n    }\n\n    ul {\n        list-style: none outside none;\n        padding: 0;\n    }\n}\n\n.modal-open.uib-dropdown-open {\n    .dropdown-menu {\n        z-index: $bb-zindex-dropdown-append-to-body;\n    }\n}\n"","".form-inline {\n    .form-group.bb-date-range-picker-form-group {\n        vertical-align: top;\n        label {\n            display: block;\n        }\n    }\n}\n"","".bb-error-description-container span {\n  white-space: pre-wrap;\n}\n\n.bb-error-title-container {\n  @include bb-emphasized();\n}\n\n.bb-error-image-container {\n  display: inline-block;\n}\n\n.bb-error-image {\n  margin-bottom: $margin-half;\n}\n\n.bb-error-action {\n  margin-top: $margin;\n}\n\n.bb-error {\n  padding-bottom: $padding;\n}\n\n.bb-error-image-broken {\n  background-image: url('images/broken.svg');\n  background-repeat: no-repeat;\n  width: 182px;\n  height: 189px;\n}\n\n.bb-error-image-construction {\n  background-image: url('images/construction.svg');\n  background-repeat: no-repeat;\n  width: 182px;\n  height: 189px;\n}\n\n.bb-error-image-notfound {\n  background-image: url('images/notFound.svg');\n  background-repeat: no-repeat;\n  background-size: contain;\n  width: 328px;\n  height: 303px;\n}\n"",""@import \""mixins\"";\n\n.bb-filters-inline {\n    background-color: $bb-inline-filter-color;\n    padding: $padding;\n}\n\n.toolbar.bb-table-toolbar .bb-filter-btn.bb-filters-inline-active, .bb-filter-btn-active, .bb-filter-btn-active:hover, .bb-filter-btn-active:focus {\n    color: $bb-color-green;\n    border: 2px solid $bb-color-green;\n    border-radius: 3px;\n    padding: 5px 11px; /* offset the thicker border to avoid button size change */\n}\n\n.toolbar.bb-table-toolbar .bb-filter-btn.bb-filters-inline-active:hover, .bb-filter-btn-active:hover, .bb-filter-btn-active:focus {\n    color: $text-color;\n}\n\n.bb-filter-summary {\n    background-color: $bb-color-white;\n    min-height: 39px;\n    overflow-x: auto; \n    display: flex;\n    align-items: center;\n    @include bb-border(dark, top, bottom);\n    padding: $padding-half $padding $padding-half $padding; \n}\n\n.bb-filter-summary-items {\n    white-space: nowrap;\n}\n\n.bb-filter-summary-item {\n    display: inline-block;\n    background-color: $sky-background-color-info;\n    border: 1px solid $sky-highlight-color-info;\n    border-radius: 4px;\n    padding: 3px;\n    color: $sky-text-color-default;\n    margin-right: $margin-half;\n\n    .close {\n        color: $sky-text-color-default;\n        padding-left: $padding-half;\n        float: none;\n        opacity: 0.8;\n        text-shadow: none;\n      \n      &:hover, &:focus {\n        opacity: 1.0;\n      }\n      \n    }\n}\n\n.bb-filter-summary-header {\n    margin-right: $margin;\n    font-weight: 600;\n}\n"",""@import \""mixins\"";\n\n$filterWidth: 240px;\n\n.bb-grid-container {\n    position: relative;\n}\n\n.bb-grid-pagination-container {\n    margin-top: 15px;\n}\n\n.bb-tile {\n    .bb-grid-top-scrollbar {\n        display: none;\n    }\n\n    .bb-table-backtotop {\n        display: none;\n    }\n}\n\n.bb-grid-table-wrapper {\n    overflow-x: hidden;\n    overflow-y: hidden;\n}\n\n.bb-grid-table-wrapper-overflow {\n    overflow-x: auto;\n    overflow-y: hidden;\n}\n\n.bb-grid-top-scrollbar {\n    background-color: #fff;\n    overflow-x: auto;\n    overflow-y: hidden;\n}\n\n.ui-jqgrid {\n    .ui-jqgrid-htable {\n        th.ui-th-column.bb-grid-th-right {\n            text-align: right;\n        }\n        th.ui-th-column.bb-grid-th-left {\n            text-align: left;\n        }\n        th.ui-th-column.bb-grid-th-center {\n            text-align: center;\n        }\n    }\n}\n\n.bb-grid-table .blockUI {\n    z-index: auto !important;\n}\n\n.bb-grid-filters {\n    position: absolute;\n    top: 0;\n    overflow: hidden;\n    z-index: $z-index-flyout;\n    right: 0;\n}\n\n.bb-grid-filters-fixed-top {\n    @extend .bb-grid-filters;\n    position: fixed;\n    right: 0;\n    bottom: auto;\n}\n\n.bb-grid-filters-fixed-bottom {\n    @extend .bb-grid-filters;\n    position: fixed;\n    right: 0;\n    top: auto;\n    bottom: 0;\n}\n\nbody:not(.bb-viewkeeper-ignore-fixed) {\n    .bb-grid-filters.bb-viewkeeper-fixed {\n        left: auto !important;\n        right: 0;\n        z-index: $z-index-flyout;\n    }\n}\n\n.bb-grid-filters-box {\n    position: relative;\n}\n\n.bb-grid-filters-icon {\n    @include border-left-radius(20px);\n    background: $bb-color-blue;\n    float: left;\n    padding: 10px 10px 10px 13px;\n    font-size: 16px;\n    width: 40px;\n    color: #fff;\n    cursor: pointer;\n    -moz-box-shadow: 0px 3px 2px 0 rgba(0, 0, 0, 0.2);\n    -webkit-box-shadow: 0px 3px 2px 0 rgba(0, 0, 0, 0.2);\n    box-shadow: 0px 3px 2px 0 rgba(0, 0, 0, 0.2);\n\n    &:before {\n        content: $bbsky-char-filter;\n        font-family: BBSKY;\n    }\n\n    @media (max-width: $screen-xs-max) {\n        display: none;\n    }\n}\n\n.bb-grid-filters-container {\n    width: $filterWidth;\n    margin-left: 40px;\n    margin-bottom: 5px;\n    background: #f3f3f4;\n    border: 1px solid $gray-lighter;\n    -moz-box-shadow: 2px 3px 2px 0 rgba(0, 0, 0, 0.2);\n    -webkit-box-shadow: 2px 3px 2px 0 rgba(0, 0, 0, 0.2);\n    box-shadow: 2px 3px 2px 0 rgba(0, 0, 0, 0.2);\n}\n\n.bb-grid-filters-header {\n    background: #efefef;\n    padding: $padding $padding-plus-half;\n    cursor: pointer;\n}\n\n.bb-grid-filters-header-title {\n    display: inline;\n    text-transform: uppercase;\n}\n\n.bb-grid-filters-header-hide {\n    float: right;\n    font-size: 12px;\n    color: $bb-brand-alternate-light;\n}\n\n.bb-grid-filters-body-group-header-icon {\n    font-size: 11px;\n}\n\n.bb-grid-filters-body-group-content {\n    margin-left: 5px;\n}\n\n.bb-grid-filters-body,\n.bb-grid-filters-footer {\n    padding: $padding;\n}\n\n.bb-grid-column-picker-wrapper {\n    height: 400px;\n\n    @media (max-width: $screen-xs-max) {\n        height: 320px;\n    }\n}\n\n.bb-grid-column-picker-table {\n    .bb-checklist-name-column {\n        width: 160px;\n    }\n\n    .bb-checklist-description-column {\n        width: 420px;\n    }\n}\n\n.bb-grid-filter-summary-item:not(:last-child):after {\n    content: \"" \\2022\"";\n}\n\n.bb-grid-empty-wait {\n    height: 100px;\n}\n\n.bb-grid-action-bar {\n    min-height: 50px;\n    background-color: $gray-lightest;\n    width: 100%;\n    z-index: 100;\n}\n\n.bb-grid-action-bar-buttons {\n    display: inline-block;\n    padding: $padding;\n}\n\n.bb-grid-action-bar-clear-selection {\n    background: none repeat scroll 0 0 transparent;\n    color: $bb-color-blue;\n    font-family: \""open sans\"", \""Helvetica Neue\"", Arial, Helvetica, sans-serif, Arial, sans-serif;\n    font-size: 13px;\n    line-height: 2;\n}\n\n.bb-grid-action-bar-and-back-to-top {\n    bottom: 0;\n    margin-top: 5px;\n    width: 100%;\n    .table-backtotop {\n        margin-top: 0;\n        .btn-link {\n            font-size: 13px;\n            vertical-align: baseline\n        }\n    }\n}\n\n.bb-grid-action-bar-mobile-buttons {\n    background-color: $bb-color-white;\n    -moz-box-shadow: 0 -1px 6px 0 $gray-lighter;\n    -webkit-box-shadow: 0 -1px 6px 0 $gray-lighter;\n    box-shadow: 0 -1px 6px 0 $gray-lighter;\n}\n\n.bb-grid-action-bar-mobile-btn {\n    margin-bottom: $margin;\n    padding-left: $padding;\n    text-align: left;\n}\n\n.bb-grid-action-bar-btn-container {\n    border-bottom: 1px solid $gray-lightest;\n    padding: 15px 15px;\n}\n\n.bb-grid-action-bar-mobile-cancel {\n    padding-left: 15px;\n}\n\n// Center the multiselect checkbox in the header since jqGrid doesn't do it for us.  This fixes an issue where\n// the header checkbox and the row checkboxes are misaligned when an explicit width is set on the checkbox column.\n.bb-grid-multiselect {\n    .ui-jqgrid-labels {\n        th:first-child {\n           text-align: center;\n        }\n    }\n}\n\n.bb-grid-no-search span.highlight {\n  background-color: transparent;\n}\n\n\n"",""@import \""mixins\"";\n\n.table {\n    thead {\n        background-color: $gray-lightest;\n        border: 0;\n        white-space: nowrap;\n\n        tr th {\n            font-weight: normal;\n            color: grey;\n            border: 0;\n            border-right: 1px solid $gray-lighter;\n        }\n\n        th {\n            &.sort-asc, .sort-asc {\n                &::after {\n                    content: \""\"";\n                    border-left: 4px solid transparent;\n                    border-right: 4px solid transparent;\n                    border-bottom: 6px solid $gray;\n                    margin-left: 3px;\n                    display: inline-block;\n                    position: relative;\n                    top: -1px;\n                }\n            }\n\n            &.sort-desc, .sort-desc {\n                &::after {\n                    content: \""\"";\n                    border-left: 4px solid transparent;\n                    border-right: 4px solid transparent;\n                    border-top: 6px solid $gray;\n                    margin-left: 3px;\n                    display: inline-block;\n                    position: relative;\n                    top: -1px;\n                }\n            }\n        }\n\n        th:first-child {\n            border-radius: 4px 0 0 4px;\n            border-left: none;\n        }\n    }\n\n    th:last-child {\n        border-radius: 0 4px 4px 0;\n        border-right: none;\n    }\n\n    tbody tr td {\n        border-top: 0;\n        border-bottom: 1px dotted $gray-lighter;\n    }\n\n    .table {\n      background-color: $bb-color-white;\n    }\n}\n\n.bb-table-loadmore,\n.bb-table-backtotop {\n    padding: $padding-half;\n    text-align: center;\n    border: 1px solid $gray-lighter;\n    margin-top: $margin-half;\n    cursor: pointer;\n    .btn-link {\n        font-size: 13px;\n        vertical-align: baseline;\n    }\n}\n\n.bb-table-loadmore {\n    background-color: $gray-lightest;\n    margin-bottom: $margin-half;\n}\n\n.bb-table-backtotop {\n    background-color: $toolbar-background-color;\n}\n\n.table-responsive {\n    border: none;\n}\n"",""@-moz-keyframes bb-spin-frames {\n    0% {\n        -moz-transform: rotate(0deg);\n    }\n\n    100% {\n        -moz-transform: rotate(359deg);\n    }\n}\n\n@-webkit-keyframes bb-spin-frames {\n    0% {\n        -webkit-transform: rotate(0deg);\n    }\n\n    100% {\n        -webkit-transform: rotate(359deg);\n    }\n}\n\n@-o-keyframes bb-spin-frames {\n    0% {\n        -o-transform: rotate(0deg);\n    }\n\n    100% {\n        -o-transform: rotate(359deg);\n    }\n}\n\n@-ms-keyframes bb-spin-frames {\n    0% {\n        -ms-transform: rotate(0deg);\n    }\n\n    100% {\n        -ms-transform: rotate(359deg);\n    }\n}\n\n@keyframes bb-spin-frames {\n    0% {\n        transform: rotate(0deg);\n    }\n\n    100% {\n        transform: rotate(359deg);\n    }\n}\n"",""@import \""mixins\"";\n\n/* NAVIGATION START */\n\n.nav > li > a i {\n  margin-right: 6px;\n}\n\n.navbar {\n    border: 0;\n    border-radius: 0;\n}\n\n.bb-navbar {\n    @include bb-border(dark);\n    background-color: $bb-nav-bg-color;\n    margin-bottom: 0;\n\n    @media (max-width: $screen-xs-max) {\n        &:not(.bb-navbar-showmobile) {\n            display: none;\n        }\n    }\n\n    .dropdown .dropdown-menu {\n      padding-top: 0;\n      padding-bottom: 0;\n    }\n\n    &.navbar {\n        border-radius: 0;\n    }\n\n    .nav.navbar-nav {\n        font-family: $bb-font-family-alternate;\n        padding: 0;\n        margin: 0;\n        font-size: 0;\n        color: $bb-nav-color;\n\n        > li {\n            cursor: pointer;\n            font-size: 14px;\n            white-space: nowrap;\n            margin-right: $margin-half;\n\n            .dropdown-menu {\n                li {\n                    margin: 0;\n\n                    a {\n                        background-color: $bb-nav-bg-color;\n                        border-bottom: none;\n                        font-size: 13px;\n                        font-weight: normal;\n                        color: $bb-nav-color;\n\n                        padding: $padding $bb-nav-item-padding *0.75;\n                        text-decoration: none;\n                        margin: 0;\n                        border-radius: 0;\n\n                        &:hover {\n                            background-color: $bb-nav-selected-bg-color;\n                            color: $bb-nav-selected-color;\n                        }\n                    }\n                }\n                li.bb-navbar-active a {\n                    background-color: $bb-nav-selected-bg-color;\n                    color: $bb-nav-selected-color;\n                }\n            }\n\n            > a {\n                padding: $bb-nav-item-padding $bb-nav-item-padding * 0.75;\n                text-decoration: none;\n                color: $bb-nav-color;\n                font-weight: 600;\n                margin: 0;\n                border-radius: 0;\n\n                &:hover {\n                    background-color: $bb-nav-selected-bg-color;\n                    color: $bb-nav-selected-color;\n                }\n            }\n\n\n            &:hover,\n            &.bb-navbar-active {\n                a {\n                    background-color: $bb-nav-selected-bg-color;\n                    @include bb-border(nav);\n                    color: $bb-nav-selected-color;\n                    padding-bottom: $bb-nav-item-padding - $bb-nav-selected-border-width;\n                }\n            }\n\n            &.disabled {\n                pointer-events: none;\n\n                a {\n                    background-color: transparent;\n                    border-bottom: none;\n                    cursor: default;\n                    color: darken($bb-nav-color, 20%);\n                    padding-bottom: 0;\n                }\n            }\n        }\n\n        &.navbar-right {\n            li {\n                margin-left: $margin-half;\n                margin-right: 0;\n            }\n        }\n    }\n}\n\n@media (min-width: $screen-sm-min) {\n    ul.nav-items {\n        li {\n            a {\n                padding: $bb-nav-item-padding;\n            }\n\n            &:after {\n                left: ($margin + $padding-half);\n            }\n        }\n    }\n}\n\n.bb-navbar-showmobile {\n    .bb-navbar {\n         @media (max-width: $screen-xs-max) {\n            display: block;\n         }\n    }\n}\n\n\n/* NAVIGATION END */\n"","".bb-page-content-multicolumn  {\n    .bb-page-content-tile-column-sortable {\n        margin-bottom: 50px;\n        padding-left: $padding;\n        padding-right: $padding;\n    }\n}\n\n.bb-page-content-multicolumn {\n    padding-left: $padding;\n    padding-right: $padding;\n}\n\n.bb-page-header {\n    background-color: #fff;\n    padding: $padding-double 0;\n}\n\n.bb-page-content,\n.bb-page-content-multicolumn {\n    margin-top: $margin-double;\n}\n\n.bb-page-noaccess-description {\n    white-space: pre-wrap;\n}\n\n.bb-page-tabs {\n    > .nav-tabs {\n        padding-left: $grid-gutter-width / 2;\n    }\n}"",""@import \""mixins\"";\n\n/* PAGINATION START */\n\n.icon-flipped {\n    @include scaleX(-1);\n}\n\n.pagination-container {\n    margin: 10px 0 0 0;\n}\n\n.pagination {\n    margin: 0;\n\n    .first,\n    .previous,\n    .next,\n    .last,\n    [ng-if='::directionLinks'] {\n        a {\n            @extend .fa;\n            padding-left: 8.5px;\n            padding-right: 8.5px;\n            line-height: $line-height-base;\n            top: 0;\n            transform: none;\n        }\n    }\n\n    .first a {\n        @extend .fa-backward;\n    }\n\n    .previous a,\n    [ng-if='::directionLinks']:first-child a {\n        @extend .fa-caret-left;\n        border-radius: 0;\n    }\n\n    .next a,\n    [ng-if='::directionLinks']:last-child a {\n        @extend .fa-caret-right;\n        border-radius: 0;\n    }\n\n    .last a {\n        @extend .fa-forward;\n    }\n\n    > .active {\n        a,\n        a:hover,\n        a:focus,\n        span,\n        span:hover,\n        span:focus {\n            color: inherit;\n            cursor: default;\n            z-index: 2;\n        }\n    }\n\n    > li {\n        > a,\n        > span {\n            background-color: white;\n            border: 1px solid #ddd;\n            color: inherit;\n            float: left;\n            line-height: $line-height-base;\n            margin-left: -1px;\n            padding: 4px 10px;\n            position: relative;\n            text-decoration: none;\n        }\n\n        > a {\n            &:hover, &:focus {\n                z-index: 1;\n            }\n        }\n\n        &.active {\n            a,\n            a:hover,\n            a:focus {\n                z-index: 2;\n                cursor: default;\n            }\n        }\n\n        &.disabled {\n            a,\n            a:hover,\n            a:focus {\n                cursor: default;\n            }\n        }\n    }\n}\n.bb-pagination-content {\n  margin-bottom: 15px;\n}\n.bb-pagination-content > table {\n  margin-bottom: 0;\n}\n.bb-pagination-content-calculating {\n  visibility: hidden;\n}\n\n/* PAGINATION END */\n"",""@import \""mixins\"";\n\n.bb-tile {\n    clear: both;\n    margin-bottom: $margin-double;\n    margin-top: 0;\n    padding: 0;\n\n    .bb-tile-title {\n        -moz-border-bottom-colors: none;\n        -moz-border-left-colors: none;\n        -moz-border-right-colors: none;\n        -moz-border-top-colors: none;\n        background-color: #fff;\n        @include bb-border(tile);\n        color: inherit;\n        margin-bottom: 0;\n        height: 48px;\n        cursor: pointer;\n        padding: 0;\n\n        .bb-tile-header {\n            @include bb-section-heading();\n            margin: 0;\n            padding: 9px $tile-header-tool-padding;\n            text-overflow: ellipsis;\n            display: inline-block;\n            white-space: nowrap;\n            overflow: hidden;\n            overflow: -moz-hidden-unscrollable;\n        }\n    }\n\n\n    .bb-tile-header-with-content {\n        float: left;\n        vertical-align: baseline;\n        @include ellipsis();\n        display: flex;\n        align-items: baseline;\n        width: 100%;\n        max-width: calc(100% - 90px);\n\n        .bb-tile-header {\n            float: none;\n            padding-right: $tile-header-tool-padding * (2 / 3);\n            max-width: calc(100% - 15px);\n        }\n    }\n\n    .bb-tile-tools {\n        -ms-touch-action: none;\n        touch-action: none;\n    }\n\n    .bb-no-records {\n        padding-top: $padding-triple;\n        padding-bottom: $padding-triple;\n    }\n\n    .row-header {\n        color: $gray-light;\n        padding-top: $padding-half;\n    }\n\n    .row-column {\n        padding-left: 0.8 * $padding;\n    }\n\n    .row-text {\n        overflow: hidden;\n        overflow-wrap: break-word;\n        padding: $padding-half 0;\n\n        p {\n            margin: 0;\n        }\n    }\n\n    .row-edit-button {\n        display: inline;\n        float: right;\n        padding-top: $padding-half;\n        font-size: $font-size-h4;\n        padding-bottom: $padding-half;\n        border: none;\n        background-color: transparent;\n    }\n}\n\n.bb-tile-header-content {\n    display: inline-block;\n    @include bb-headline();\n    color: $sky-text-color-action-primary;\n    opacity: 0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    overflow: -moz-hidden-unscrollable;\n    max-width: 50%;\n}\n\n.bb-tile.collapsed .bb-tile-header-content {\n     opacity: 1;\n}\n\n.bb-tile-header-content {\n    opacity: 0;\n    transition: 0.5s linear all;\n}\n\n.bb-tile-header-check {\n    font-size: 16px;\n}\n\n.bb-tile-content {\n    background-color: #fff;\n    color: inherit;\n    @include bb-border(light, top, bottom);\n    border-image: none;\n    border-style: solid solid none;\n    border-width: 1px 0;\n    clear: both;\n}\n\n.bb-tile-tools {\n    display: inline-block;\n    float: right;\n    margin-top: 0;\n    position: relative;\n    padding: 0;\n}\n\n/*NOTE -  This section is intentionally outside of the .tile wrapper above.  It defines how\ntiles behave on a modal form.*/\n.modal-body {\n    .bb-tile {\n        .bb-tile-title {\n            height: 32px;\n\n            .bb-tile-header {\n                font-family: $font-family-base;\n                font-size: 13px;\n                font-weight: 600;\n                margin: 0;\n                padding: 7px $tile-header-tool-padding;\n            }\n        }\n\n        .bb-tile-tools {\n            margin-top: 7px;\n        }\n    }\n}\n\n/*NOTE -  This section is intentionally outside of the .tile wrapper above.  It defines how\ntiles behave within a column of tiles.*/\n.bb-page-content-tile-column {\n    .bb-tile {\n        //When columns are stacked in a tile, there is special behavior on extra small devices\n        @media (max-width: $screen-xs-max) {\n            padding-bottom: 0;\n\n            > div {\n                @include shadow($blur: 0);\n            }\n            //Create line above the tile\n            &:before {\n                content: \""\"";\n                display: block;\n            }\n        }\n    }\n}\n\n.toolbar {\n    &.bb-tile-toolbar {\n       @include bb-border(light);\n       border-top: none;\n       border-left: none;\n       border-right: none;\n    }\n}\n\n.bb-tile-chevron,\n.bb-tile-settings {\n    color: #D1DADE;\n    float: left;\n    margin: 16px $tile-header-tool-padding 16px 0;\n    padding: 0;\n    background-color: transparent;\n    border: none;\n}\n\n.modal-body {\n    .bb-tile-chevron {\n        padding-top: 0;\n        padding-bottom: 0;\n        margin-top: 0;\n        margin-bottom: 0;\n    }\n}\n\n.bb-tile-content-section {\n    padding: 15px;\n}\n\n.bb-tile-content-section:not(:last-child) {\n  @include bb-border(light);\n}\n\n.bb-tile-grab-handle {\n    color: #E7EAEC;\n    cursor: move;\n    cursor: -webkit-grab;\n    cursor: -moz-grab;\n    display: none;\n    font-size: 15px;\n    padding: $tile-header-tool-padding $tile-header-tool-padding $tile-header-tool-padding 0;\n}\n\n// Hide the grab handle unless the tile's in a sortable column.\n\n.bb-page-content-tile-column-sortable {\n    min-height: 100px;\n\n    .bb-tile-grab-handle {\n        display: inline-block;\n    }\n}\n\n@media (max-width: $screen-xs-max) {\n    .bb-tile {\n        margin-bottom: 0;\n    }\n}\n"",""@import \""mixins\"";\n\n/* TOOLBARS START */\n\n.toolbar{\n    background-color: $toolbar-background-color;\n    border-color: $border-color;\n    height: 43px;\n\n    > .btn {\n        margin: 5px 0 0 5px;\n    }\n}\n\n.addbutton{\n    border: none;\n    background-color: transparent;\n    font-size: $toolbar-button-fontsize;\n    color: $toolbar-button-color;\n    padding: 8px 8px 8px $padding-plus-half - 1;\n}\n\n.addbutton-text{\n    font-family: $font-family-base;\n    font-size: $toolbar-button-fontsize;\n    color: $toolbar-button-color;\n}\n\n/* TOOLBARS END */"",""@import \""mixins\"";\n\n\n/* FORMS START */\n.has-error {\n  @include form-control-validation($state-danger-text, $bb-color-red, $state-danger-bg);\n}\n\n.tile-form {\n    background: $tile-form-background;\n    border-top: 1px solid $form-border-color;\n    padding: 15px 15px;\n\n    .form-horizontal {\n        .radio,\n        .checkbox {\n            min-height: 18px;\n        }\n    }\n\n    .control-label {\n        text-align: left;\n        font-family: $font-family-base;\n        font-size: $font-size-base;\n        font-weight: normal;\n        min-width: 150px;\n        vertical-align: middle;\n    }\n\n    .radio label, .checkbox label {\n        display: inline-block;\n        margin-top: 1px;\n        margin-bottom: 0;\n        font-weight: 400;\n    }\n\n    .date {\n        margin-top: 5px;\n    }\n\n    textarea {\n        width: 100%;\n        resize: none;\n        border: 1px solid $form-textarea-color;\n        font-size: $font-size-base;\n        height: 10em;\n        padding: 5px;\n    }\n\n    div.textarea-container {\n        margin-left: auto;\n        margin-right: auto;\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n    .control-label.required:after {\n        content: \""*\"";\n        color: $bb-error-color;\n        padding-left: 5px;\n    }\n}\n\n.form-header {\n    font-family: $font-family-base;\n    font-size: $font-size-base;\n    color: $form-header-color;\n    font-weight: bold;\n    padding-left: 15px;\n    margin-bottom: 5px;\n    margin-top: 10px;\n}\n\n.sky-form-header {\n    font-family: $font-family-base;\n    font-size: $font-size-base;\n    color: $gray-dark;\n    font-weight: bold;\n}\n\n.form-group {\n    margin-bottom: 5px;\n}\n\nselect.error,\ninput.error {\n    @include field-invalid;\n}\n\n/* styles for validation helpers */\n.field-validation-error {\n    color: $invalid-field-color;\n}\n\n.field-validation-valid {\n    display: none;\n}\n\ninput.input-validation-error {\n    border: 1px solid $invalid-field-color;\n}\n\ninput[type=\""checkbox\""].input-validation-error {\n    border: 0 none;\n}\n\ninput, select {\n    font-size: 12px;\n}\n\ninput[type=\""text\""] {\n    padding-left: 5px;\n}\n\nselect, select.form-control {\n    padding-left: 0;\n}\n\n.validation-summary-errors {\n    color: $invalid-field-color;\n}\n\n.validation-summary-valid {\n    display: none;\n}\n\ninput.ng-invalid.ng-touched,\nselect.ng-invalid.submitted,\n.date.ng-invalid input {\n    @include field-invalid;\n}\n\n.bb-date-field-calendar-button {\n    background-color: $bb-color-white;\n    color: $gray;\n}\n\n.input-group .btn {\n    border-color: #ddd;\n    border-radius: 0;\n    height: $input-height-base;\n}\n\n.form-control {\n  background-color: white;\n  background-image: none;\n  border: 1px solid #e5e6e7;\n  border-radius: 1px;\n  color: inherit;\n  display: block;\n  padding: 6px 12px;\n  transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;\n  width: 100%;\n}\n\n.form-control::-ms-expand {\n    border: none;\n    background-color: #fff;\n}\n\n.control-label.required:after {\n    content: \""*\"";\n    color: $bb-error-color;\n    padding-left: 5px;\n}\n\n/* FORMS END */\n"",""@import \""Bootstrap/variables\"";\n@import \""mixins\"";\n\n\n.modal-header {\n    min-height: 45px;\n    background: $form-background;\n    display: flex;\n    align-items: center;\n\n    .bb-dialog-header {\n        white-space: nowrap;\n        -ms-text-overflow: ellipsis;\n        -o-text-overflow: ellipsis;\n        text-overflow: ellipsis;\n        overflow: hidden;\n        width: 80%;\n        float: left;\n        line-height: 1.4; /* Keeps font descenders from being cut off */\n        @include bb-emphasized();\n        margin: 0;\n    }\n\n    .bb-helpbutton {\n        font-size: 16px;\n        margin-right: 20px;\n        margin-left: auto;\n    }\n\n    .close {\n        margin-left: auto;\n    }\n\n    .bb-helpbutton+.close {\n        margin-left: 0;\n    }\n\n}\n\n.modal-body {\n    padding: 15px;\n}\n\n.modal-body-tiled,\n.bb-modal-body-tiled {\n    background-color: $tile-form-background;\n}\n\n.modal {\n    -webkit-overflow-scrolling: auto;\n}\n\n.modal-footer {\n    padding: 19px;\n    margin: 0;\n    text-align: left;\n    background: $form-background;\n    @include bb-border(light, top);\n    \n    .btn+.btn {\n        margin-left: 10px;\n    }\n}\n\n.bb-modal {\n    overflow-y: hidden;\n\n    .modal-body {\n        overflow-y: auto;\n    }\n}\n\n.bb-modal-fullpage {\n    opacity: 0;\n    transition: opacity $bb-transition-time-short;\n\n    &.modal.in {\n        opacity: 1;\n        @include transform(none);\n\n        .modal-dialog {\n            @include transform(none);\n        }\n    }\n\n    &.modal {\n        position: absolute;\n        top: 0;\n        left: 0;\n    }\n\n    .modal-dialog {\n        margin: 0;\n        width: 100%;\n    }\n\n    .modal-content {\n        border: none;\n        box-shadow: none;\n        -webkit-box-shadow: none;\n    }\n\n    .modal-dialog,\n    .modal-content {\n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n    }\n\n    .modal-header,\n    .modal-footer {\n        position: fixed;\n        left: 0;\n        width: 100%;\n        z-index: 10000;\n    }\n\n    .modal-header {\n        top: 0;\n\n        .bb-dialog-header {\n            @include bb-section-heading;\n        }\n\n        .close,\n        .bb-helpbutton {\n            font-size: 20px;\n            margin-top: 6px;\n        }\n    }\n\n    .modal-footer {\n        bottom: 0;\n    }\n\n    .modal-body {\n        overflow: visible;\n        top: 0;\n        bottom: 0;\n    }\n}\n\n.bb-modal-fullpage+.bb-modal-fullpage {\n    display: none !important; /* important is necessary here because an inline style of display: block; is applied to this element. */\n}\n\n.bb-modal-open-fullpage {\n    &.modal-open {\n        overflow: auto;\n\n        .modal {\n            overflow: visible;\n        }\n        bb-page {\n            display: none;\n        }\n    }\n}\n\n.bb-modal-open-mobile {\n    height: 100%;\n    overflow: hidden;\n    width: 100%;\n    position: fixed;\n\n    .bb-modal {\n        position: absolute;\n    }\n}\n\n.bb-modal-content-wrapper {\n    background: $form-background;\n    border-top: 1px solid $form-border-color;\n\n    .radio label, .checkbox label {\n        display: inline-block;\n        margin-top: 1px;\n        margin-bottom: 0;\n    }\n\n    .form-horizontal {\n        .radio,\n        .checkbox {\n            min-height: 18px;\n        }\n    }\n\n    .control-label {\n        text-align: left;\n        font-family: $font-family-base;\n        font-size: $font-size-base;\n        font-weight: normal;\n        min-width: 150px;\n        vertical-align: middle;\n    }\n\n    .control-placeholder-label {\n        color: $gray-light;\n        font-style: italic;\n    }\n\n    textarea {\n        width: 100%;\n        resize: none;\n        border: 1px solid $form-textarea-color;\n        font-size: $font-size-base;\n        height: 10em;\n        padding: 5px;\n    }\n\n    div.textarea-container {\n        margin-left: auto;\n        margin-right: auto;\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n    .control-label.required:after {\n        content: \""*\"";\n        color: $bb-error-color;\n        padding-left: 5px;\n    }\n}\n\n.bb-modal-fullpage-backdrop {\n    background-color: $bb-color-white;\n    &.in {\n        opacity: 1;\n    }\n}\n"",""@import \""mixins\"";\n@import \""variables\"";\n\n$viewkeeper-margin-top: $omnibar-height !default;\n$viewkeeper-margin-top-small: $omnibar-height-small !default;\n\nbody:not(.bb-viewkeeper-ignore-fixed) {\n    .bb-viewkeeper-fixed {\n        position: fixed;\n        z-index: $bb-zindex-viewkeeper;\n        opacity: 0.95;\n        filter: alpha(opacity=95);\n        overflow: hidden;\n    }\n\n    &:not(.omnibar-not-fixed):not(.bb-viewkeeper-no-omnibar) {\n        .bb-viewkeeper-fixed,\n        .viewkeeper-fixed {\n            margin-top: $viewkeeper-margin-top;\n        }\n\n        @media(min-width:$screen-sm-min) {\n            .bb-viewkeeper-fixed,\n            .viewkeeper-fixed {\n                margin-top: $viewkeeper-margin-top-small;\n            }\n        }\n    }\n\n    /*Special handling for jqGrid since it already specifies the position attribute with a more specific selector */\n    .ui-jqgrid-hdiv {\n        &.bb-viewkeeper-fixed,\n        &.viewkeeper-fixed {\n            position: fixed;\n        }\n    }\n}"",""@import \""mixins\"";\n\n@for $i from 1 through length($bb-palette-multi) {\n  .bb-palette-multi-#{$i} {\n    background-color: nth($bb-palette-multi, $i);\n  }\n}\n\n@for $i from 1 through length($bb-palette-mono) {\n  .bb-palette-mono-#{$i} {\n    background-color: nth($bb-palette-mono, $i);\n  }\n}\n"",""[bb-uib-popover-popup].popover,\n[bb-uib-popover-html-popup].popover,\n[bb-uib-popover-template-popup].popover {\n  display: block !important;\n}\n\n.bb-popover-list {\n    z-index: $bb-zindex-popover-list;\n}\n"",""@import \""Bootstrap/variables\"";\n@import \""mixins\"";\n\n\n.bb-omnibar {\n    .search {\n        font-family: $font-family-base;\n\n        > .searchContainer > input.searchbox:focus {\n            box-shadow: none;\n        }\n        \n        > .searchContainer > input.searchbox:focus + .searchButton {\n            box-shadow: none;\n        }\n    }\n\n    .desktop, .mobile {\n        > div {\n            z-index: $omnibar-zindex;\n        }\n    }\n}\n\n/* Help widget */\n.bb-help-container {\n    z-index: $help-widget-zindex;\n}\n\n/* End help widget*/\n"",""﻿.bb-helpbutton {\n    float: inherit;\n}"",""@import \""mixins\"";\n\n#toast-container {\n    .bb-toast {\n        color: $sky-text-color-default;\n        background-image: none;\n        border-radius: $alert-border-radius;\n        box-shadow: none;\n        display: -webkit-flex; /* iOS 8 support */\n        display: flex;\n        align-items: center;\n        padding: 0;\n        background-color: $sky-background-color-info;\n        border: none;\n      \n        a {\n          color: change-color($sky-text-color-default, $alpha: 0.8);\n          text-decoration: underline;\n\n          &:hover {\n            color: $sky-text-color-default;\n            text-decoration: underline;\n          }\n        }\n        \n        .toast-message {\n            border-left: 30px solid $sky-highlight-color-info;\n            background-color: $sky-background-color-info;\n            padding: $padding;\n          \n          &::before {\n            content: \""\\f05a\"";\n            font-family: FontAwesome;\n            margin-left: -30px;\n            margin-right: 19px;\n            color: $sky-color-white;\n          }\n        }\n\n        .toast-close-button {\n            background-color: $sky-background-color-info;\n            color: change-color($sky-text-color-default, $alpha: 0.8);\n            opacity: 1;\n            order: 1;\n            position: static;\n            top: 0;\n            right: 0;\n            float: none;\n            font-size: 24px;\n            min-width: 40px;\n            text-shadow: none;\n            transition: background-color 250ms;\n          \n          &:hover {\n            color: $sky-text-color-default;\n          }\n        }\n\n        // This is the only thing that identifies the message container\n        div {\n            width: 100%;\n        }\n\n        &.ng-enter {\n            @include animation(bounceIn 500ms);\n        }\n\n        &.ng-leave {\n            @include animation(bounceOut 500ms);\n        }\n    }\n\n    .bb-toast-success {\n        background-color: $sky-background-color-success;\n      \n\n        .toast-message {\n            background-color: $sky-background-color-success;\n            border-color: $sky-highlight-color-success;\n          \n          &::before {\n            content: \""\\f00c\"";\n            font-family: FontAwesome;\n            margin-left: -31px;\n            margin-right: 18px;\n            color: $sky-color-white;\n          }\n        }\n\n        .toast-close-button {\n            background-color: $sky-background-color-success;\n        }\n    }\n\n    .bb-toast-warning {\n        background-color: $sky-background-color-warning;\n\n        .toast-message {\n            border-color: $sky-highlight-color-warning;\n            background-color: $sky-background-color-warning;\n          \n          &::before {\n            content: \""\\f071\"";\n            font-family: FontAwesome;\n            margin-left: -31px;\n            margin-right: 18px;\n            color: $sky-color-white;\n          }\n        }\n\n        .toast-close-button {\n            background-color: $sky-background-color-warning;\n        }\n    }\n\n    .bb-toast-error {\n            background-color: $sky-background-color-danger;\n\n        .toast-message {\n            border-color: $sky-highlight-color-danger;\n            background-color: $sky-background-color-danger;\n          \n          &::before {\n            content: \""\\f071\"";\n            font-family: FontAwesome;\n            margin-left: -31px;\n            margin-right: 18px;\n            color: $sky-color-white;\n          }\n        }\n\n        .toast-close-button {\n            background-color: $sky-background-color-danger;\n        }\n    }\n}\n"",""@import \""mixins\"";\n\n.bb-wait-wrap {\n    height: 35px;\n}\n\n.bb-wait-spinner {\n    @include spin(1s);\n\n    &::before {\n        content: $bbsky-char-loading;\n        font-family: BBSKY;\n        font-size: 35px;\n        line-height: 35px;\n        display: block;\n        clear: both;\n        width: 35px;\n        margin: auto;\n        color: black;\n    }\n}\n\n.bb-wait-nonblock {\n    width: 0;\n    height: 65px;\n    position: fixed;\n    bottom: 15px;\n    left: 15px;\n    opacity: 0.7;\n    z-index: 10;\n}\n\n/* BlockUI */\n.blockUI {\n    &.blockOverlay {\n        background-color: black;\n        cursor: wait;\n        opacity: 0.1;\n    }\n\n    &.blockMsg {\n        @include box-shadow(0 0 50px $gray-light);\n        background-color: $gray-lightest;\n        padding: $padding-plus-half;\n        cursor: wait;\n        -webkit-border-radius: 10px;\n        -moz-border-radius: 10px;\n        border-radius: 10px;\n\n        &.blockPage {\n            top: 40%;\n            left: calc(50% - 33px); // 33px is half the height and width of the block.  Variables can't be used in calc.\n        }\n    }\n}\n/* End BlockUI */\n"","".bb-scroll-into-view-highlighting {\n    @include animation(bb-scroll-into-view-highlight 1s ease-out 1);\n}\n\n@include keyframes(bb-scroll-into-view-highlight) {\n    0% {\n        box-shadow: 0 0 5px 0 transparent;\n    }\n    5% {\n        box-shadow: 0 0 20px 5px $bb-color-blue;\n    }\n    100% {\n        box-shadow: 0 0 100px 20px transparent;\n    }\n}\n"",""@import \""mixins\"";\n\n.tab-pane {\n    background-color: $bb-color-white;\n}\n\n.nav.nav-tabs {\n    padding-left: 15px;\n}\n\n.nav-tabs > li > a {\n    padding: 7px 15px;\n}\n\n.bb-tabset-dropdown {\n    @include bb-border(tab);\n    .bb-tab-dropdown-button {\n        border-bottom-right-radius: 0;\n        border-bottom-left-radius: 0;\n        margin-bottom: -1px;\n        .fa-caret-down {\n            margin-left: 5px;\n        }\n    }\n}\n\n.nav.nav-tabs, .nav-tabs.nav-justified {\n    @include bb-border(tab);\n\n    > li {\n        margin-top: 5px;\n    }\n\n    > li.bb-tab-close {\n        > a {\n            padding-right: 5px;\n        }\n    }\n\n    > li.bb-tab-button {\n        .bb-tab-button-wrap {\n            background-color: transparent;\n            border: none;\n            padding: 0px 0px;\n            width: 44px;\n            .bb-btn-secondary {\n                color: $bb-color-blue;\n                padding-top: 5px;\n                padding-bottom: 5px;\n            }\n\n        }\n        .bb-tab-button-wrap:active, .bb-tab-button-wrap:hover, .bb-tab-button-wrap:focus {\n            box-shadow: none;\n            outline: none;\n            .bb-btn-secondary {\n                @include bb-focus-indication();\n            }\n        }\n        .bb-tab-button-add {\n            .bb-btn-secondary {\n                padding-left: 7px;\n                padding-right: 7px;\n            }\n        }\n        .bb-tab-button-open {\n            .bb-btn-secondary {\n                padding-left: 5px;\n                padding-right: 5px;\n            }\n        }\n    }\n\n    .bb-tab-button-wrap {\n        background-color: transparent;\n        border: none;\n        padding: 0px 0px;\n        width: 44px;\n\n        .bb-btn-secondary {\n            color: $bb-color-blue;\n            padding-top: 5px;\n            padding-bottom: 5px;\n        }\n    }\n\n    .bb-tab-button-wrap:active, .bb-tab-button-wrap:hover, .bb-tab-button-wrap:focus {\n        box-shadow: none;\n        outline: none;\n    }\n\n    .bb-tab-button-add {\n        .bb-btn-secondary {\n            padding-left: 7px;\n            padding-right: 7px;\n        }\n    }\n\n    .bb-tab-button-open {\n        .bb-btn-secondary {\n            padding-left: 5px;\n            padding-right: 5px;\n        }\n    }\n\n    > li.bb-tab-button {\n        border-bottom: none;\n        margin-bottom: 0;\n        margin-left: 5px;\n    }\n\n\n    > li, ul.dropdown-menu > li {\n        > a {\n            color: $gray-light;\n            font-size: 14px;\n            font-weight: 600;\n            white-space: nowrap;\n            text-overflow: ellipsis;\n\n            .bb-tab-close-icon {\n                padding-left: 10px;\n                padding-top: 2px;\n                padding-bottom: 3px;\n                cursor: pointer;\n                -webkit-appearance: none;\n                background-color: transparent;\n                border: none;\n                outline: none;\n                @extend .fa;\n                @extend .fa-times;\n                position: absolute;\n                right: 0;\n            }\n\n            .bb-tab-close-icon:active,\n            .bb-tab-close-icon:hover,\n            .bb-tab-close-icon:focus {\n                box-shadow: none;\n                outline: none;\n            }\n\n            .bb-tab-close-icon:focus:before {\n                @include bb-focus-indication();\n            }\n\n        }\n\n        > a:hover {\n            background-color: $gray-lightest;\n            border-color: transparent;\n\n            border-bottom-color: $bb-color-blue;\n        }\n\n        .bb-tab-header-title {\n            margin-top: 0;\n        }\n\n        .bb-tab-header-count {\n            @include bb-emphasized();\n            color: $bb-color-blue;\n        }\n    }\n\n    .bb-tabset-dropdown > ul.dropdown-menu > li {\n        > a {\n            max-width: 300px;\n            padding-right: 5px;\n            .bb-tab-close-icon {\n                padding-top: 5px;\n                float: right;\n            }\n        }\n    }\n\n    > li.active, ul.dropdown-menu > li.active {\n        > a,\n        > a:hover,\n        > a:focus {\n            background-color: $bb-color-blue;\n            border-color: transparent;\n            color: $bb-color-white;\n        }\n\n        .bb-tab-header-title,\n        .bb-tab-header-count {\n            color: $bb-color-white;\n        }\n    }\n}\n\n.bb-tab-close {\n    > a {\n        tab-heading, uib-tab-heading {\n            position: relative;\n            padding-right: 30px;\n            display: block;\n            width: 100%;\n            text-overflow: ellipsis;\n            overflow: hidden;\n        }\n    }\n}\n\n.bb-tab-header-count {\n    @include bb-emphasized();\n    color: $bb-color-blue;\n    margin-left: 5px;\n}\n\n.bb-tab-header-title {\n    color: #808486;\n    font-size: 14px;\n    font-weight: 600;\n    margin-top: 5px;\n}\n\n.bb-tab-spacer {\n    width: 100px;\n    visibility: hidden;\n}\n\n.bb-tab-scroll > .nav-tabs {\n    overflow-x: auto;\n    overflow-y: hidden;\n    position: relative;\n    white-space: nowrap;\n    -webkit-overflow-scrolling: touch;\n    li {\n        display: inline-block;\n        float: none;\n    }\n}\n\n.bb-tab-header-text {\n    max-width: 200px;\n    display: inline;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    float: left;\n}\n\n@media (min-width: 768px) {\n    .nav-justified>li, .nav-tabs.nav-justified>li {\n        width: auto;\n        >a {\n            border: none;\n        }\n    }\n}\n\n@media (max-width: $screen-xs-max) {\n    .bb-vertical-tabset {\n        .bb-vertical-tabset-tabs {\n            @include animation(fadeInLeft 500ms);\n            @include make-xs-column(12);\n            border-right-style: none;\n\n            &.ng-hide.ng-animate {\n                display: none !important;\n            }\n        }\n\n        .tab-content {\n            @include animation(fadeInRight 500ms);\n            @include make-xs-column(12);\n        }\n    }\n}\n\n@media (min-width: $screen-sm-min) {\n    .bb-vertical-tabset {\n        display: flex;\n\n        .bb-vertical-tabset-tabs {\n            flex-basis: 25%;\n        }\n\n        .tab-content {\n            padding-left: $padding-plus-half;\n            padding-right: $padding-plus-half;\n        }\n    }\n}\n\n.bb-vertical-tabset {\n    .panel-group .panel {\n        box-shadow: none;\n        width: 100%;\n\n        &.panel-open {\n            @include bb-border('light', 'bottom');\n        }\n\n        > .panel-heading {\n            @include bb-subsection-heading();\n            @include bb-border('light', 'bottom');\n            color: $sky-text-color-default;\n            background-color: $bb-color-white;\n            padding: 0;\n        }\n        .panel-heading + .panel-collapse > .panel-body,\n        .panel-group .panel-heading+.panel-collapse > .list-group {\n            border-top-width: 0;\n        }\n    }\n\n    .panel-body {\n        padding: 0;\n    }\n\n    .panel-title {\n        font-family: inherit;\n        font-size: inherit;\n        font-weight: inherit;\n    }\n\n    .bb-vertical-tabset-tabs {\n        height: inherit;\n        overflow: auto;\n        padding-left: 0;\n        padding-right: 0;\n\n        .nav.nav-tabs {\n            border-bottom-style: none;\n            overflow: auto;\n            padding-right: 0;\n\n            li {\n                display: flex;\n                margin-bottom: 0;\n                width: 100%;\n\n                & > a {\n                    width: 100%;\n                }\n\n                .control-label {\n                    flex-basis: 100%;\n                    flex-grow: 1;\n                    min-width: 0;\n                    white-space: normal;\n                }\n\n                .nav-link {\n                    @extend .bb-field-label;\n                }\n\n                &.active .nav-link,\n                &:hover .nav-link,\n                & > a:focus .nav-link {\n                    color: $text-color !important;\n                }\n                &.active .nav-link {\n                    // Override uib-tab styling\n                    background-color: $gray-lightest !important;\n                    font-weight: 600;\n                    padding-left: $base-padding - 4px;\n                }\n\n                &.active:before {\n                    background-color: $bb-color-blue;\n                    content: ' ';\n                    width: 4px;\n                }\n\n                &:last-of-type {\n                    margin-bottom: 5px;\n                }\n            }\n\n            .nav-link {\n                border-radius: 0;\n                margin-right: 0;\n                padding-left: 10px;\n\n                &:focus:not(:hover) {\n                    background-color: transparent;\n                }\n\n                &:hover {\n                    border-bottom-color: transparent;\n                }\n            }\n        }\n    }\n\n    .tab-content {\n        flex-grow: 1;\n        height: inherit;\n        margin-top: 0;\n        overflow: auto;\n        padding-top: $padding;\n    }\n\n    .bb-vertical-tabset-group-heading {\n        padding: 10px 15px;\n    }\n\n    .bb-vertical-tabset-group {\n        border-width: 0;\n\n        .panel-heading:hover .panel-title,\n        .bb-vertical-tabset-group-active {\n            color: $text-color;\n        }\n        .panel-heading .panel-title > a:focus .bb-vertical-tabset-group-heading {\n            @include bb-focus-indication();\n            color: $text-color;\n        }\n        .bb-vertical-tabset-group-active {\n            font-weight: 600;\n        }\n    }\n\n    .bb-vertical-tabset-group-chevron {\n        @extend .fa;\n        @extend .fa-chevron-down;\n\n        position: absolute;\n        right: 15px;\n        transition: all 0.3s linear;\n\n        &.bb-vertical-tabset-group-chevron-open {\n            transform:rotate(180deg);\n        }\n    }\n}\n"",""﻿.bb-text-expand-ellipsis {\n    letter-spacing: 2px;\n    white-space: nowrap;\n    margin-right: 3px;\n}\n\n.bb-text-expand-space {\n    white-space: normal;\n}\n\n.bb-text-expand-see-more {\n    white-space: nowrap;\n}\n\n.bb-text-expand-text {\n  margin: 0;\n  white-space: pre-wrap;\n}\n\n.bb-text-expand-container {\n  word-break: break-word;\n  word-wrap: break-word;\n  max-width: 100%;\n}\n"","".bb-text-block {\n    font-size: $font-size-base;\n    line-height: 1.6em;\n}\n\n/*\nWe are overriding the default .text-success, .text-info, .text-warning, and .text-danger\nhere instead of through the $state-*-text variables because we want to keep the default\nBootstrap colors for alert text, panel text and others.\n*/\n@include text-emphasis-variant('.text-success', $bb-text-color-success);\n\n@include text-emphasis-variant('.text-info', $bb-text-color-info);\n\n@include text-emphasis-variant('.text-warning', $bb-text-color-warning);\n\n/*\nSemantic font class styles are based on existing styling of analogous components. We will be testing out a new typographic scheme, and will update these values once that is finalized. The proposed scheme will have 15px base font, so the body- classes and field labels will change the most. It's possible that the current larger fonts will not change.\n*/\n.bb-page-heading {\n    @include bb-page-heading();\n}\n\n.bb-section-heading {\n    @include bb-section-heading();\n}\n\n.bb-subsection-heading {\n    @include bb-subsection-heading();\n}\n\n.bb-headline {\n    @include bb-headline();\n}\n\n.bb-emphasized {\n    @include bb-emphasized();\n}\n\n.bb-deemphasized {\n    @include bb-deemphasized();\n}\n\n.bb-field-label {\n    @include bb-field-label();\n}\n\n// Status text\n.text-success {\n    color: $sky-text-color-default;\n}\n\n.text-success::before {\n    content: \""\\f00c\"";\n\tfont-family: FontAwesome;\n\tmargin-right: 5px;\n\tcolor: $sky-highlight-color-success;\n}\n\n.text-warning {\n    color: $sky-text-color-default;\n}\n\n.text-warning::before {\n    content: \""\\f071\"";\n\tfont-family: FontAwesome;\n\tmargin-right: 5px;\n\tcolor: $sky-highlight-color-warning;\n}\n\n.text-danger {\n    color: $sky-text-color-default;\n}\n\n.text-danger::before {\n    content: \""\\f071\"";\n\tfont-family: FontAwesome;\n\tmargin-right: 5px;\n\tcolor: $sky-highlight-color-danger;\n}"",""@import \""mixins\"";\n\n.bb-wizard {\n    .nav.nav-tabs {\n        border: none;\n        padding-left: 0;\n\n        li {\n            border-bottom: none;\n            margin-right: $margin-half;\n            margin-top: 0;\n            margin-bottom: $margin-half;\n            \n            a {\n                @include border-radius($border-radius-small);\n                background-color: $sky-color-white;\n                @include bb-border(light, top, bottom, left, right);\n                color: $sky-text-color-default;\n                padding-top: $padding-half;\n                padding-bottom: $padding-half;\n                max-width: 200px;\n                font-weight: 400;\n              \n              &:hover, &:focus {\n                text-decoration: none;\n                color: $sky-text-color-default;\n                background-color: $sky-background-color-neutral-light;\n              }\n            }\n\n            &.disabled {\n                a {\n                    background-color: $sky-background-color-neutral-light;\n                    color: $sky-text-color-deemphasized;\n                }\n            }\n\n            &.bb-wizard-step-complete {\n                a {\n                    background-color: change-color($sky-background-color-info, $alpha: 0.33);\n                    border-color: change-color($sky-background-color-info, $alpha: 0.33);\n                }\n            }\n\n            &.active,\n            &.active.bb-wizard-step-complete {\n                a {\n                    @include button-variant($sky-text-color-default, $sky-background-color-info, $sky-background-color-info);\n                }\n            }\n        }\n    }\n\n    .tab-content {\n        margin-top: $margin;\n    }\n}"","".bb-file-drop-row {\n    margin-left: -$margin-half;\n    margin-right: -$margin-half;\n}\n\n.bb-file-drop-col {\n    margin-bottom: $margin;\n    padding-left: $margin-half;\n    padding-right: $margin-half;\n}\n\n.bb-file-drop-contents,\n.bb-file-item {\n    border: solid 1px $gray-lighter;\n    background-color: $gray-lightest;\n    padding: $padding;\n}\n\n.bb-file-drop-contents {\n    color: $gray;\n    cursor: pointer;\n    display: table;\n    height: 120px;\n    width: 100%;\n    text-align: center;\n\n    h4,\n    h5 {\n        font-style: italic;\n    }\n\n    h4 {\n        font-size: $bb-font-size-xl;\n        margin: 0;\n    }\n\n    h5 {\n        font-size: $bb-font-size-lg;\n        margin-top: $margin-half;\n    }\n\n    .bb-file-drop-link-header {\n        margin-bottom: $margin-half;\n    }\n}\n\n.bb-file-drop-noclick {\n    .bb-file-drop-contents {\n        cursor: default;\n\n        h5 {\n            display: none;\n        }\n    }\n}\n\n.bb-file-drop-contents-not-over,\n.bb-file-drop-contents-accept,\n.bb-file-drop-contents-reject,\n.bb-file-drop-link {\n    display: table-cell;\n    vertical-align: middle;\n}\n\n.bb-file-drop-accept,\n.bb-file-drop-reject {\n    .bb-file-drop-contents {\n        border-style: dashed;\n        border-width: 1px;\n    }\n\n    .bb-file-drop-contents-not-over {\n        display: none;\n    }\n}\n\n.bb-file-drop-accept {\n    .bb-file-drop-contents {\n        border-color: $bb-color-green;\n        color: $bb-color-green;\n    }\n}\n\n.bb-file-drop-reject {\n    .bb-file-drop-contents {\n        border-color: $bb-color-red;\n        color: $bb-color-red;\n    }\n}\n\n.bb-file-drop-contents-accept,\n.bb-file-drop-contents-reject {\n    display: none;\n}\n\n.bb-file-drop-accept {\n    .bb-file-drop-contents-accept {\n        display: table-cell;\n    }\n}\n\n.bb-file-drop-reject {\n    .bb-file-drop-contents-reject {\n        display: table-cell;\n    }\n}\n\n.bb-file-upload-icon {\n    display: block;\n    font-size: 40px;\n    margin-top: $margin;\n}\n\n.bb-file-drop-link {\n    cursor: default;\n}\n\n.bb-file-item-name {\n    @include ellipsis();\n}\n\n.bb-file-item-title {\n    margin-bottom: $margin;\n}\n\n.bb-file-item-preview-img {\n    max-width: 100%;\n    height: auto;\n    @include box-shadow(0 0 5px #666);\n}\n\n.bb-file-item-preview-other {\n    color: $gray-light;\n    font-size: 100px;\n    line-height: 1;\n    text-align: center;\n    width: 100%;\n}\n\n.bb-file-drop {\n    background-color: transparent;\n    border: none;\n    display: block;\n    -webkit-appearance: none;\n    width: 100%;\n    padding: 0;\n}"",""// Legacy support for those using CSS classes instead of the directive.  All of this should be\n// removed once we require consumers to use the directive.\n.bb-repeater {\n    padding: $padding-plus-half;\n}\n\n.bb-tile-content-section > .bb-repeater {\n    padding: 0;\n}\n\n.bb-repeater-item {\n    padding: $padding;\n    @include bb-border(row);\n\n    &:first-child {\n        padding-top: 0;\n    }\n}\n\n.bb-repeater-item-title {\n    margin: 0 0 10px;\n}\n// End legacy support\n\n// When the above code is removed, also remove the bb-repeater-component class.\n.bb-repeater-component {\n    &.bb-repeater {\n        padding: 0;\n    }\n\n    .bb-repeater-item {\n        display: flex;\n        padding: $padding;\n        @include bb-border(row);\n    }\n\n    .bb-repeater-item-right {\n        flex-grow: 1;\n    }\n\n    .bb-repeater-item-left {\n        display: flex;\n        align-items: baseline;\n        padding-top: $padding-half;\n    }\n\n    .bb-repeater-item-header {\n        align-items: center;\n        display: flex;\n    }\n\n    .bb-repeater-item-content {\n        display: block;\n        margin-bottom: 0;\n        font-weight: normal;\n    }\n\n    .bb-repeater-item-context-menu {\n        padding: 0 $padding 0 0;\n        display: inline-block;\n    }\n\n    bb-repeater-item-title {\n        display: flex;\n    }\n\n    .bb-repeater-item-title {\n        @include bb-emphasized();\n        margin: $margin 0; \n        flex-grow: 1;\n    }\n\n    .bb-repeater-item-title-container {\n        flex-grow: 1;\n    }\n\n    .bb-repeater-item-collapsible {\n        .bb-repeater-item-header {\n            cursor: pointer;\n\n            .bb-chevron {\n                display: block;\n                margin-left: $margin;\n            }\n        }\n\n        .bb-repeater-item-content {\n            padding-right: $bb-context-menu-size + $padding;\n        }\n    }\n\n    .bb-repeater-item-collapsed {\n        .bb-repeater-item-content {\n            display: none;\n        }\n    }\n\n    .bb-repeater-item-selected {\n        background-color: $bb-selected-color;\n        transition: background-color $bb-transition-time-short;\n    }\n\n    .bb-repeater-item-selectable {\n        .bb-repeater-item-right {\n            cursor: pointer;\n        }\n    }\n\n    .bb-repeater-item-multiselect {\n        display: inline-block;\n        padding-right: $padding;\n    }\n\n}\n"",""@import 'mixins';\n\n.bb-key-info-item {\n    @include bb-headline();\n    margin-bottom: $margin-plus-half;\n}\n\n.bb-key-info {\n    display: inline-block;\n    margin-right: $margin-triple;\n}\n\n.bb-key-info-value {\n    @include bb-headline();\n}\n\n.bb-key-info-label {\n    @include bb-field-label();\n}\n\n.bb-key-info-horizontal {\n    .bb-key-info-value, \n    .bb-key-info-label {\n        display: inline-block;  \n    }\n    \n    .bb-key-info-label {\n        margin-left: $margin-half;    \n    }\n}"",""@import \""mixins\"";\n\n.bb-page-summary-alert .alert {\n    margin-top: 0;\n    margin-bottom: $margin-double;\n    line-height: initial; /*TODO: This needs to come out */\n}\n\n.bb-page-summary-title {\n    @include bb-page-heading();\n    margin-top: 0;\n    margin-bottom: $margin-half;\n}\n\n.bb-page-summary-subtitle {\n    @include bb-emphasized();\n    margin-top: 0;\n    margin-bottom: $margin;\n    line-height: $headings-line-height;\n}\n\n.bb-page-summary-status {\n    margin-top: $margin;\n\n    .label {\n        margin-right: $margin-half;\n    }\n}\n\n.bb-page-summary-content {\n    margin-top: $margin-double;\n}\n\n.bb-page-summary-image {\n  .bb-file-drop-col {\n      margin-bottom: 0;\n  }\n}\n\n@media (min-width: $screen-sm-min) {\n    .bb-page-summary-left {\n        display: flex;\n        align-items: stretch;\n    }\n\n    .bb-page-summary-image {\n        width: $bb-avatar-width + $margin-double;\n        flex: 0 0 $bb-avatar-width + $margin-double;\n    }\n}\n\n@media (max-width: $screen-xs-max) {\n    .bb-page-summary-image {\n        width: $bb-avatar-width;\n        margin-left: auto;\n        margin-right: auto;\n        margin-bottom: $margin;\n\n    }\n\n    .bb-page-summary-key-info {\n        margin-top: $margin-double;\n    }\n}\n"",""@import 'mixins';\n\n.bb-avatar {\n    .bb-file-drop-accept {\n        .bb-avatar-wrapper {\n            border: dashed $bb-avatar-border-width $bb-color-green;\n        }\n    }\n\n    .bb-file-drop-reject {\n        .bb-avatar-wrapper {\n            border: dashed $bb-avatar-border-width $bb-color-red;\n        }\n    }\n}\n\n.bb-avatar-wrapper {\n    height: $bb-avatar-height + ($bb-avatar-border-width * 2);\n    width: $bb-avatar-width + ($bb-avatar-border-width * 2);\n    border: solid $bb-avatar-border-width transparent;\n    border-radius: 50%;\n    overflow: hidden;\n    position: relative;\n    top: -$bb-avatar-border-width;\n    left: -$bb-avatar-border-width;\n}\n\n.bb-file-drop {\n    .bb-avatar-wrapper {\n        cursor: pointer;\n    }\n}\n\n.bb-avatar-image,\n.bb-avatar-initials {\n    height: $bb-avatar-height;\n    width: $bb-avatar-width;\n    background-position: 50%;\n    background-size: cover;\n\n    /* this removes the \""ghost margin\"" from the bottom of the canvas element that would otherwise be imposed by line height rules for inline elements */\n    display: block;\n}\n"",""@import \""mixins\"";\n\n.bb-select-field-single {\n    width: 100%;\n}\n\nbb-select-field.ng-invalid.ng-touched .bb-select-field-single {\n  @include field-invalid;\n}\n\n.bb-select-field-single-inner {\n    // The select field \""inner\"" class is needed because setting display: flex on a button element doesn't work\n    // as expected in Firefox.  Therefore we need a div inside the button that has this attribute.\n    // http://stackoverflow.com/questions/24289251/flexbox-not-working-in-buttons-in-firefox\n    width: 100%;\n    display: flex;\n    align-items: center;\n}\n\n.bb-select-field-single-title {\n    flex: 1;\n    text-align: left;\n    white-space: normal;\n}\n\n.bb-select-field-single-title-placeholder {\n  @include bb-deemphasized();\n}\n\n.bb-select-field-single-icon {\n    width: 18px;\n    flex: 0 0 18px;\n    text-align: right;\n}\n\n.bb-select-field-multiple {\n  display: block;\n    &:hover,\n    &:active,\n    &:focus {\n        text-decoration: none;\n    }\n}\n\n.bb-select-field-multiple-items {\n    margin-left: $margin-plus-half;\n}\n\n.bb-select-field-multiple-item {\n    background-color: $sky-background-color-info;\n    border: solid 1px $sky-background-color-info;\n    border-radius: 4px;\n    padding: 0 0 0 $padding;\n    margin-top: $margin;\n    display: inline-flex;\n    align-items: center;\n    margin-right: $margin;\n}\n\n.bb-select-field-multiple-item-title {\n    flex-shrink: 0;\n}\n\n.bb-select-field-multiple-item-delete {\n    color: change-color($sky-text-color-default, $alpha: 0.8);\n    text-shadow: none;\n    height: 34px;\n    width: 34px;\n    flex: 0 0 34px;\n    opacity: 1;\n}\n\n.bb-select-field-multiple-item-delete:hover {\n    opacity: 1;\n    color: $sky-text-color-default;\n}\n\n.bb-select-field-multiple-summary {\n    font-style: italic;\n}\n"",""\n@import \""mixins\"";\n\n.bb-reorder-container {\n  position:relative\n}\n\n.bb-reorder-list-col-icon {\n  font-size: 1em;\n  color: $gray;\n  cursor: move;\n  cursor: -webkit-grab;\n  cursor: -moz-grab;\n  padding: 16px;\n  height: 44px;\n  width: 44px;\n\n}\n\n.bb-reorder-list-col-content {\n  margin-left: $margin;\n  margin-right: $margin;\n  flex-basis: 100%;\n  min-width: 0;\n}\n\n.bb-reorder-list-col-top {\n  color: $bb-color-blue;\n  cursor:pointer;\n  white-space: normal;\n  word-wrap: break-word;\n  min-height: 44px;\n  width: 44px;\n  flex-basis: 30%;\n}\n\n.bb-reorder-list-row {\n    background-color: white;\n    border: none;\n    border-top: dotted 1px $gray-lighter;\n    padding: $padding;\n    outline-offset: -5px;\n    width: 100%;\n    min-height: 50px;\n\n    // we always want the sorting item to keep its border\n    &:not(.bb-reorder-list-sorting-item):first-child {\n      border: none;\n    }\n\n    // if we are sorting the first item, make sure the next sibling does not have a visible top border when it gets pushed up.\n    &:first-child.bb-reorder-list-sorting-item + .bb-reorder-list-row {\n      border-top:1px solid transparent; // need it to keep its height otherwise we are 1px smaller and the list shifts.\n    }\n}\n\n.bb-reorder-list-row-container {\n  display:flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.bb-reorder-list-row-placeholder {\n  background-color: $body-bg;\n\n  // when we are sorting the placeholder height is set directly on the element.\n  // if the item being sorted had a border, the placeholder is going to be 1 px larger than it should\n  // be when it is moved to the top since the top child in the reorder list should\n  // not have a border. Need to reduce size by 1 px so the list does not shift.\n  // Note: the placeholder can only ever be the first child if the first item in the list\n  // is not being sorted. The first item will not have a border so this rule is not\n  // necessary in that case as the placeholder will have the correct size.\n  &:first-child {\n    margin-bottom: -1px;\n  }\n}\n\n.bb-reorder-list-row-placeholder .bb-reorder-list-row-container {\n  visibility: hidden;\n}\n\n.bb-reorder-list-sorting-item {\n  @include shadow();\n  border: 1px solid $gray-light;\n}\n\n.bb-reorder-animate-element {\n  background-color: white;\n  position: absolute;\n}\n\n.bb-reorder-list-title {\n    @include bb-emphasized();\n    word-wrap: break-word;\n}\n\n.bb-reorder-list-description {\n    word-wrap: break-word;\n}\n\n.bb-reorder-list-row.ng-move {\n    transition:0.5s linear all;\n    opacity:0;\n}\n\n.bb-reorder-list-row.ng-move.ng-move-active {\n    opacity:1;\n}\n\n.bb-reorder-list-no-animate {\n   transition: none !important;\n}\n"",""@import \""mixins\"";\n\n.bb-card {\n    background-color: #fff;\n    @include bb-border(dark, top, bottom, left, right);\n    display: inline-flex;\n    flex-direction: column;\n    height: $bb-card-height;\n    margin: 0 $margin $margin 0;\n    transition: background-color $bb-transition-time-short;\n    // This keeps cards with varying contents (such as one card with a header and another with no header)\n    // vertically aligned with one another.  Otherwise because of the inline nature of the card the browser\n    // will attempt to vertically align the cards based on the baselines of the text in each card.\n    vertical-align: top;\n    width: $bb-card-width;\n    @include shadow();\n}\n\n.bb-card-small {\n    height: $bb-card-height-small;\n    width: $bb-card-width-small;\n}\n\n.bb-card-selectable {\n    .bb-card-header,\n    .bb-card-content {\n        cursor: pointer;\n    }\n}\n\n.bb-card-selected {\n    background-color: $bb-selected-color;\n    transition: background-color $bb-transition-time-short;\n}\n\n.bb-card-header {\n    align-items: center;\n    display: flex;\n    flex-shrink: 0;\n    margin: 0;\n    // Use padding so the area between the header and content is still clickable.\n    padding: $padding 0 0 0;\n}\n\n.bb-card-heading-left,\n.bb-card-heading-right {\n    @include ellipsis();\n    font-weight: normal;\n    max-width: 34px;\n}\n\n.bb-card-heading-left {\n    padding-left: $padding;\n}\n\n.bb-card-heading-right {\n    padding-right: $padding;\n}\n\n.bb-card-heading-middle {\n    flex-grow: 1;\n    padding: 0 $padding;\n}\n\n.bb-card-title {\n    @include bb-section-heading();\n    margin: 0;\n}\n\n.bb-card-check {\n    flex-shrink: 0;\n    padding-right: $padding;\n\n    .bb-check-wrapper {\n        margin-bottom: 2px;\n    }\n}\n\n.bb-card-content {\n    flex-grow: 1;\n    font-weight: normal;\n    margin: 0;\n    padding: $padding;\n    overflow: hidden;\n}\n\n.bb-card-actions {\n    @include bb-border(light, top);\n    bottom: 0;\n    flex-shrink: 0;\n    padding: $padding-3_4 0;\n    text-align: center;\n\n    .bb-context-menu-btn {\n        height: 32px;\n        width: 32px;\n    }\n}\n"",""@import \""mixins\"";\n\n.bb-chevron {\n    border: none;\n    background-color: transparent;\n    display: none;\n    flex-shrink: 0;\n    height: $bb-context-menu-size;\n    margin: 0;\n    overflow: hidden;\n    padding: $padding-half 0 0 0;\n    width: $bb-context-menu-size;\n}\n\n.bb-chevron-part {\n    border-color: #d1dade;\n    border-style: solid;\n    border-width: 3px 0 0 0;\n    display: inline-block;\n    height: 10px;\n    position: relative;\n    top: 3px;\n    transition: transform $bb-transition-time-medium, left $bb-transition-time-medium;\n    vertical-align: top;\n    width: 10px;\n}\n\n.bb-chevron-flip-up {\n    .bb-chevron-left {\n        left: 7px;\n        transform: rotate(-45deg);\n    }\n\n    .bb-chevron-right {\n        left: -6px;\n        transform: rotate(45deg);\n    }\n}\n\n.bb-chevron-flip-down {\n    .bb-chevron-left {\n        left: 2px;\n        transform: rotate(45deg);\n    }\n\n    .bb-chevron-right {\n        left: -1px;\n        transform: rotate(-45deg);\n    }\n}\n"",""@import \""mixins\"";\n\n.intl-tel-input {\n  font-family: $font-family-base;\n  font-size: $font-size-base;\n  width: 100%;\n}\n\n.intl-tel-input .country-list {\n  -webkit-overflow-scrolling: touch;\n}\n\n.intl-tel-input .country-list .country {\n  padding: 10px 10px;\n}\n\n.iti-arrow {\n  border-left: none !important;\n  border-top: none !important;\n  right: 10px !important;\n  top: 35% !important;\n  @extend .fa;\n  @extend .fa-caret-down;\n}\n\n.iti-flag {\n  background-image:url(\""images/flags.png\"");\n}\n\n@media\nonly screen and (min-resolution: 2dppx) {\n  .iti-flag {\n    background-image:url(\""images/flags@2x.png\"");\n  }\n}\n"",""@import \""mixins\"";\n\n.bb-carousel-wrapper {\n    overflow: hidden;\n    position: relative;\n}\n\n.bb-carousel {\n    margin: 0 auto;\n    padding: 0;\n    position: relative;\n    white-space: nowrap;\n}\n\n.bb-carousel-contents {\n    position: relative;\n}\n\n.bb-carousel-card {\n    .bb-carousel {\n        height: $bb-card-height;\n        width: $bb-card-width;\n    }\n}\n\n.bb-carousel-card-small {\n    .bb-carousel {\n        height: $bb-card-height-small;\n        width: $bb-card-width-small;\n    }\n}\n\n.bb-carousel-item {\n    display: inline-block;\n    list-style-type: none;\n    position: absolute;\n    white-space: normal;\n    transition: transform $bb-transition-time-short;\n    z-index: 0;\n}\n\n.bb-carousel-btn {\n    &:focus {\n        @include tab-focus;\n    }\n    background-color: #fff;\n    border: none;\n    font-size: 40px;\n    height: 60px;\n    margin-top: -30px;\n    opacity: 0.8;\n    position: absolute;\n    top: 50%;\n    transition: opacity $bb-transition-time-short;\n    z-index: 1;\n}\n\n@media (max-width: $screen-xs-max) {\n    .bb-carousel-btn {\n        display: none;\n    }\n}\n\n.bb-carousel-btn:hover {\n    opacity: 0.9;\n}\n\n.bb-carousel-btn-previous {\n    left: $margin-half;\n}\n\n.bb-carousel-btn-next {\n    right: $margin-half;\n}\n\n.bb-carousel-dots {\n    display: flex;\n    justify-content: center;\n    padding: $padding;\n    z-index: 1;\n}\n\n.bb-carousel-dot-btn {\n    &:focus {\n        @include tab-focus;\n    }\n    background-color: transparent;\n    border: none;\n    padding: 0;\n}\n\n.bb-carousel-dot-content {\n    background-color: $gray-lighter;\n    border-radius: 50%;\n    height: 10px;\n    width: 10px;\n    margin: 6px;\n    transition: background-color $bb-transition-time-short;\n}\n\n.bb-carousel-dot-btn-selected {\n    .bb-carousel-dot-content {\n        background-color: $gray;\n    }\n}"",""/* Toolbar */\n.bb-listbuilder-toolbar {\n    min-height: 39px;\n    background-color: $bb-color-white;\n    padding: $padding-half $padding $padding-half $padding;\n    @include bb-border(dark, top, bottom);\n    display: flex;\n    align-items: center;\n}\n\n.bb-listbuilder-filter-summary-container {\n    .bb-filter-summary {\n        border-top: none;\n        padding-left: $padding;\n        padding-right: $padding;\n        padding-top: $padding-half;\n        padding-bottom: $padding-half;\n    }\n}\n\n.bb-listbuilder-toolbar-item {\n    margin-right: $padding-half;\n}\n\n.bb-listbuilder-no-search span.highlight {\n  background-color: transparent;\n}\n\n/* Content */\n.bb-listbuilder-content {\n    margin-top: $margin;\n    &.bb-listbuilder-content-grid-view {\n        margin-top: 0;\n    }\n    .bb-card {\n        margin-right: 0;\n        width: 100%\n    }\n}\n\n.bb-listbuilder-add-label {\n    display: none;\n}\n\n@media (min-width: 992px) {\n    .bb-listbuilder-add-label {\n        display: inline-block;\n    }\n}\n\n.bb-listbuilder-toolbar-switcher-container {\n    margin-left: auto;\n}\n\n.dropdown-menu.bb-listbuilder-switcher-menu {\n    min-width: 0px;\n    left: 1px;\n        > li > a {\n            padding: 6px 12px;\n            margin: 0;\n            text-align: center;\n        } \n}\n\n.bb-listbuilder-multiselect {\n    padding: $padding-half $padding;\n    display: flex;\n    align-items: center;\n    background-color: $bb-color-white;\n    @include bb-border(dark, bottom);\n    .bb-listbuilder-show-selected {\n        margin-bottom: 0;\n        margin-left: auto;\n    }\n}\n\n.bb-listbuilder-clear-all {\n    margin-left: $padding;\n}\n\n.bb-listbuilder-toolbar-top-scrollbar {\n    background-color: $bb-color-white;\n    overflow-y: hidden;\n    overflow-x: auto;\n}\n\n.bb-listbuilder {\n    .ui-jqgrid-hbox {\n        .ui-jqgrid-htable th {\n            cursor: default;\n        }\n        .bb-check-wrapper {\n            display: none;\n        }\n    }\n}\n"","".bb-infinite-scroll {\n  position: relative;\n  bottom: 0;\n  height: 75px;\n  width: 75px;\n  margin-left: auto;\n  margin-right: auto;\n  margin-top: $margin-half;\n  text-align: center;\n\n  .blockUI.blockOverlay {\n    background-color: transparent;\n  }\n\n  .blockUI.blockMsg {\n    box-shadow: none;\n    -webkit-box-shadow: none;\n    background-color: transparent;\n  }\n}"",""@media (min-width: $screen-sm-min) {\n    .bb-search-input-container {\n        max-width: 300px;\n    }\n}\n\n/*  On iOS, the input will zoom when focused, \n    setting the font-size to 16px prevents this\n*/\n@media (max-width: $screen-xs-max) {\n    .bb-search-input {\n        font-size: 16px;\n    }\n}\n\n.bb-search-input {\n    @include bb-border(light, top, bottom, left);\n    border-right: none;\n    transition: none;\n    box-shadow: none;\n    border-radius: 6px;\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0;\n    -webkit-appearance: none;\n\n}\n\n/*  Prevents the IE clear icon from displaying in the input\n    because our search control already includes a clear icon\n*/\n.bb-search-input::-ms-clear {\n    display: none;\n}\n\n.input-group.bb-search-input-container .input-group-btn {\n    .btn.bb-search-btn-input-group {\n        background-color: $bb-color-white;\n        border: none;\n    }\n    .btn.bb-search-btn-apply {\n        border-top-right-radius: 6px;\n        border-bottom-right-radius: 6px;\n        border-left: none;\n        @include bb-border(light, top, bottom, right);\n    }\n    .btn.bb-search-btn-clear {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n        border-right: none;\n        border-left: none;\n        @include bb-border(light, top, bottom);\n    }\n}\n\n\n.bb-search-input:focus + .input-group-btn button:hover.bb-search-btn-input-group  {\n    z-index: auto;\n}\n\n.bb-search-btn-dismiss, .bb-search-btn-dismiss:hover {\n    border: 1px transparent solid;\n    background-color: transparent;\n}\n\n.bb-search-btn-dismiss-hidden {\n    display: none;\n}\n\n.bb-search-input-container-hidden {\n    display: none;\n}\n\n.bb-search-and-dismiss {\n    display: flex;\n}\n\n.bb-search-item-dismiss {\n    flex-shrink: 0;\n}\n\n.bb-search-item-input {\n    flex-grow: 1;\n}\n\n/*  This is needed or else the input will be tiny\n    on Safari\n*/\n@media (min-width: $screen-sm-min) {\n    .bb-search-item-input {\n        flex-shrink: 0;\n    }\n}\n\n.bb-search-input-container {\n    width: 100%;\n    border: 1px transparent solid;\n}\n\n.bb-search-btn-clear {\n    padding-right: 6px;\n    padding-left: 18px;\n}\n\n.bb-search-btn-apply {\n    padding-left: 6px;\n}\n\n.bb-search-and-dismiss-absolute {\n    position: absolute;\n    background-color: $bb-color-white;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    visibility: visible;\n    padding: $padding-half;\n}\n\n.input-group.bb-search-input-container.bb-search-input-focused {\n\n    border: 1px solid $bb-focus-border-color;\n    box-shadow: 0 0 8px $bb-focus-shadow-color;\n    border-radius: 6px;\n\n    .btn.bb-search-btn-apply {\n        border-right: 1px transparent solid;\n        border-top: 1px transparent solid;\n        border-bottom: 1px transparent solid;\n    }\n\n    .btn.bb-search-btn-clear {\n        border-top: 1px transparent solid;\n        border-bottom: 1px transparent solid;\n    }\n\n} \n\n.form-control.bb-search-input:focus {\n    border-top: 1px transparent solid;\n    border-bottom: 1px transparent solid;\n    border-left: 1px transparent solid;\n    border-right: none;\n    box-shadow: none; \n}\n\n.bb-search-open-wrapper {\n    border: 1px transparent solid;\n}\n\n.bb-search-open-applied {\n    border: none;\n    .bb-search-btn-open {\n        color: $bb-color-green;\n        border: 2px solid $bb-color-green;\n    }\n}\n\n.bb-search-open-applied {\n    .bb-search-btn-open:hover {\n        color: $text-color;\n        border: 2px solid $bb-color-green;\n    }\n}\n\n.bb-search-open-hidden {\n    visibility: hidden;\n}\n\n.bb-search-input-component-container {\n    position: relative;\n}\n\n.bb-search-input-component-container-hidden > * {\n    visibility: hidden;\n}\n\n.bb-search-input-inline {\n    display: inline-block;\n    vertical-align: middle;\n    margin-bottom: 0;\n}\n\n.bb-search-full-width {\n    .bb-search-input-container {\n        max-width: initial;\n    }\n\n    .bb-search-item-input {\n        flex-shrink: initial;\n    }\n}"","".bb-grid-toolbar-container {\n    .toolbar {\n        .bb-grid-toolbar-btn {\n            display: inline-block;\n            vertical-align: middle;\n            margin: 0 5px 0 0;\n        }\n\n        .bb-column-picker-btn, .bb-filter-btn {\n            margin-right: 0;\n            margin-left: 5px;\n            .btn {\n                margin: 0;\n            }\n        }\n    }\n}\n\n.bb-grid-toolbar-container {\n    .toolbar {\n        &.bb-table-toolbar {\n            height: auto;\n            min-height: 39px;\n        }\n    }\n}\n\n.bb-grid-toolbar-button-container {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.bb-grid-toolbar-sort-container {\n    display: inline-block;\n    margin-left: $margin-half;\n}\n\n.bb-grid-filter-summary-container {\n    .bb-filter-summary {\n        border-top: none;\n    }\n}\n\n/* legacy grid styles */\n.toolbar {\n    &.bb-table-toolbar {\n        height: 39px;\n        border: 1px solid $gray-lighter;\n        border-right: none;\n        border-left: none;\n        padding: $padding-half $padding $padding-half $padding;\n\n        &.bb-applied-filter-bar {\n            border-top: none;\n            display: flex;\n\n            .bb-applied-filter-header {\n                margin-right: 10px;\n                margin-top: 5px;\n                font-weight: 600;\n            }\n            .bb-applied-filter-content-container {\n              flex-basis: 95%;\n              min-width: 0;\n\n              .bb-applied-filter-content {\n                  background-color: $alert-warning-bg;\n                  border: 1px solid $alert-warning-border;\n                  border-radius: 4px;\n                  padding: 3px;\n                  height: 26px;\n                  display: inline-block;\n                  max-width: 100%;\n\n                  .bb-applied-filter-text {\n                      @include text-overflow();\n                      color: $alert-warning-text;\n                      display: inline-block;\n                      padding-right: $padding;\n                      cursor: pointer;\n                      max-width: 99%;\n\n                      @media (max-width: ($screen-md-max)) {\n                        max-width: 98%;\n                      }\n                      @media (max-width: ($screen-xs-max)) {\n                        max-width: 96%;\n                      }\n                  }\n\n                  .close {\n                      color: $alert-warning-text;\n                      padding-top: 3px;\n                      float: right;\n                  }\n              }\n              .bb-applied-filter-content.bb-applied-filter-content-no-dismiss {\n                 .bb-applied-filter-text {\n\n                      max-width: 100%;\n                      padding-right: 0;\n\n                      @media (max-width: ($screen-md-max)) {\n                        max-width: 100%;\n                      }\n                      @media (max-width: ($screen-xs-max)) {\n                        max-width: 100%;\n                      }\n                  }\n                 \n                  .close {\n                      display: none;\n                  }\n              }\n\n              \n            }\n\n        }\n\n        .bb-search-container {\n            background-color: white;\n            display: inline-block;\n            vertical-align: middle;\n\n            input {\n                float: left;\n                height: 32px;\n                width: 150px;\n                border-radius: 6px 0 0 6px;\n                outline: none;\n                border: 1px solid $gray-lighter;\n                border-right: none;\n                -webkit-appearance: none;\n\n                @media (min-width: ($screen-sm-min)) {\n                    width: 255px;\n                }\n            }\n\n            > .bb-search-icon {\n                float: left;\n                width: 23px;\n                height: 32px;\n                padding-top: 1px;\n                border-radius: 0 6px 6px 0;\n                border: 1px solid $gray-lighter;\n                border-left: none;\n                cursor: default;\n                background-color: #fff;\n                padding-top: 8px;\n            }\n\n            input:focus {\n                box-shadow: 3px 0 8px 0 $bb-focus-shadow-color;\n                border: 1px solid $bb-focus-border-color;\n                border-right: none;\n            }\n\n            input:focus + .bb-search-icon {\n                box-shadow: 4px 0 6px -1px $bb-focus-shadow-color;\n                border: 1px solid $bb-focus-border-color;\n                border-left: none;\n            }\n        }\n\n        .bb-toolbar-btn-label {\n            display: none;\n            margin-left: 5px;\n\n            @media (min-width: ($screen-md-min)) {\n                display: inline;\n            }\n        }\n\n        .btn-success, .btn-primary {\n            .bb-toolbar-btn-label {\n                font-family: \""Open Sans\"";\n                font-weight: 600;\n            }\n        }\n    }\n}\n"",""@import 'mixins';\n\n.bb-definition-list {\n    margin-right: 50px;\n    margin-bottom: 20px;\n}\n\n.bb-definition-list-heading {\n    margin-bottom: $margin-half;\n}\n\n.bb-definition-list-content-component {\n    display: flex;\n    flex-wrap: wrap;\n    margin-bottom: $margin-half;\n}\n\n.bb-definition-list-label {\n    margin-right: $margin;\n    width: 90px;\n    word-wrap: break-word;\n}\n\n.bb-definition-list-no-value, .bb-definition-list-value {\n    flex: 1;\n} "","".bb-dropdown-menu.dropdown-menu .bb-dropdown-item > .bb-subsection-heading.bb-sort-heading {\n    color: $bb-text-deemphasized-color;\n    pointer-events: none;\n}\n\n.bb-sort-selected {\n    background-color: $bb-selected-color;\n}\n\n.dropdown-menu .divider.bb-sort-heading-divider {\n    margin: 0;\n}\n\n.bb-sort > .dropdown-toggle:focus {\n    //default\n    @include bb-focus-indication();\n}"","".bb-summary-actionbar {\n    display: flex;\n    align-items: center;\n    width: 100%;\n    margin-top: $margin-double;\n    position: fixed;\n    bottom: 0;\n    left: 0;\n    z-index: $zindex-modal-background - 1;\n    background-color: $bb-color-white;\n    box-shadow: 0 -3px 3px 0 $gray-lighter;\n}\n\n.modal-footer {\n    .bb-summary-actionbar {\n        position: static;\n        margin-top: 0;\n    }\n}\n\n.bb-modal-footer-summary-actionbar-container.modal-footer {\n    padding: 0;\n}\n\n.bb-summary-actionbar-actions {\n    margin: $margin 0;\n    padding-left: $padding;\n    padding-right: $padding-triple;\n    flex-shrink: 0;\n    .btn {\n        margin-right: $margin;\n    }\n}\n\n.bb-summary-actionbar-secondary-actions {\n    display: inline-block;\n    .bb-summary-actionbar-secondary-buttons .bb-dropdown-item {\n        display: inline-block;\n    }\n}\n\n\n\n.bb-summary-actionbar-summary {\n    margin: $margin 0;\n    padding-left: $padding-triple;\n    display: flex;\n    @include bb-border(light, left);\n}\n\n.bb-summary-actionbar-summary-items {\n    display: flex;\n    flex-wrap: wrap;\n}\n\n.bb-summary-actionbar-details-expand {\n    margin-left: auto;\n    margin-right: $margin;\n}\n\n.bb-summary-actionbar-details-expand, .bb-summary-actionbar-details-collapse {\n    display: none;\n}\n\n.bb-summary-actionbar-summary-collapsed {\n    &.bb-summary-actionbar {\n        flex-wrap: wrap;\n    }\n\n    .bb-summary-actionbar-summary {\n        order: -1;\n        width: 100%;\n        @include bb-border(light, bottom);\n        margin: 0;\n        padding: $padding;\n    }\n\n    .bb-summary-actionbar-summary {\n        border-left: none;\n    }\n    \n    .bb-summary-actionbar-details-expand, .bb-summary-actionbar-details-collapse {\n        display: block;\n    }\n}"",""@import \""mixins\"";\n\n.bb-sectionedmodal {\n    .bb-sectionedform {\n        height: 100%\n    }\n\n    .modal-body {\n        height: 460px;\n        max-height:460px;\n        padding: 0;\n    }\n}\n\n@media (max-width: $screen-xs-max) {\n    .bb-sectionedform {\n        .nav-tabs {\n            @include animation(fadeInLeft 500ms);\n            @include make-xs-column(12);\n            border-right-style: none;\n        }\n\n        .tab-content {\n            @include animation(fadeInRight 500ms);\n            @include make-xs-column(12);\n        }\n    }\n}\n\n@media (min-width: $screen-sm-min) {\n    .bb-sectionedform {\n        .nav-tabs {\n            @include bb-border('light', 'right');\n            flex-basis: 30%;\n        }\n\n        .tab-content {\n            padding-left: $padding-plus-half;\n            padding-right: $padding-plus-half;\n        }\n    }\n}\n\n.bb-sectionedform {\n    li:not(.active) {\n        .control-label {\n            color: $bb-text-deemphasized-color;\n        }\n    } \n}\n\n.bb-sectionedform {\n    display: flex;\n    \n    .nav-tabs {\n        border-bottom-style: none;\n        height: inherit;\n        overflow: auto;\n        padding-left: $padding;\n        padding-right: 0;\n\n        uib-tab-heading {\n            display: flex;\n            .control-label {\n                white-space: normal;\n                min-width: 0;\n                flex-grow: 1;\n                \n                &.invalid:after {\n                    color: $bb-error-color;\n                    content: \"" \\f071\"";\n                    font-family: 'FontAwesome';\n                }\n            }\n        }\n\n        .nav-link {\n            border-left: 4px solid transparent;\n            border-radius: 0;\n            margin-right: 0;\n            padding-left: 10px;\n\n            &:focus:not(:hover) {\n                background-color: transparent;\n            }\n\n            &:hover {\n                border-bottom-color: transparent;\n            }\n        }\n\n        li {\n            margin-bottom: 0;\n        }\n\n        li.active {\n            .nav-link {\n                /* Marked important because the tab directive (who applies the styles we are trying to override) is closer to this element than the sectioned form. \n                Styling these in the controller may be possible but it is complicated by having to also manage the other state transfers (focus,hover)\n                as well as the digest cycle that the tabs use to mark the li as active. */\n                background-color: $gray-lightest !important;\n                border-left: 4px solid $bb-color-blue !important;\n                color: inherit !important;\n                .control-label {\n                    font-weight: 600;\n                }\n            }\n        }\n    }\n    \n    .tab-content {\n        flex-grow: 1;\n        height: inherit;\n        padding-top: $padding;\n        margin-top: 0;\n        overflow: auto;\n    }\n    \n    .bb-sectionedform-navigationicon {\n        &.fa-chevron-right {\n            padding-left: $padding-half;\n        }\n\n        padding-top: 3px;\n    }\n}"","".label {\n  color: $sky-text-color-default;\n  display: inline;\n  border-radius: 10rem;\n  font-weight: 400;\n  line-height: 2.2;\n  margin: 0 3px;\n  padding: .3em .6em .3em .6em;\n  white-space: nowrap;\n}\n\n.label-success {\n  background-color: $sky-background-color-success;\n}\n\n.label-info {\n  background-color: $sky-background-color-info;\n}\n\n.label-warning {\n  background-color: $sky-background-color-warning;\n}\n\n.label-danger {\n  background-color: $sky-background-color-danger;\n}\n"","".alert {\n    border: none;\n    border-left: solid 30px;\n    color: $sky-text-color-default;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n  \n    a {\n      color: change-color($sky-text-color-default, $alpha: 0.8);\n      text-decoration: underline;\n\n      &:hover {\n        color: $sky-text-color-default;\n        text-decoration: underline;\n      }\n    }\n}\n\n.alert button {\n    float: none;\n    margin-left: auto;\n    margin-right: $margin;\n    width: 32px;\n    height: 32px;\n}\n\n.alert-info {\n    background-color: $sky-background-color-info;\n    border-color: $sky-highlight-color-info;\n}\n\n.alert-info::before {\n    content: \""\\f05a\"";\n\tfont-family: FontAwesome;\n\tmargin-left: -30px;\n    margin-right: 19px;\n\tcolor: $sky-color-white;\n}\n\n.alert-success {\n    background-color: $sky-background-color-success;\n    border-color: $sky-highlight-color-success;\n}\n\n.alert-success::before {\n    content: \""\\f00c\"";\n\tfont-family: FontAwesome;\n\tmargin-left: -31px;\n    margin-right: 18px;\n\tcolor: $sky-color-white;\n}\n\n.alert-warning {\n    background-color: $sky-background-color-warning;\n    border-color: $sky-highlight-color-warning;\n}\n\n.alert-warning::before {\n    content: \""\\f071\"";\n\tfont-family: FontAwesome;\n\tmargin-left: -31px;\n    margin-right: 18px;\n\tcolor: $sky-color-white;\n}\n\n.alert-danger {\n    background-color: $sky-background-color-danger;\n    border-color: $sky-highlight-color-danger;\n}\n\n.alert-danger::before {\n    content: \""\\f071\"";\n\tfont-family: FontAwesome;\n\tmargin-left: -31px;\n    margin-right: 18px;\n\tcolor: $sky-color-white;\n}\n\n.alert-dismissible .close {\n    color: $sky-text-color-default;\n    opacity: 0.8;\n    text-shadow: none;\n  \n    &:hover {\n        opacity: 1.0;\n    }\n}"",""@import \""mixins\"";\n\nhtml, form, body {\n    font-size: $font-size-base;\n    font-family: $font-family-base;\n}\n\nbody {\n    background-color: $body-bg;\n    color: $text-color;\n}\n\n/*Headings*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n    font-weight: 100;\n    font-family: $font-family-base;\n}\n\nh2,\n.h2 {\n    font-size: 26px;\n}\n\nh3,\n.h3 {\n    font-size: 19px;\n}\n\nh4,\n.h4 {\n    font-size: 14px;\n}\n\nh5,\n.h5 {\n    font-size: 12px;\n}\n\nh6,\n.h6 {\n    font-size: 10px;\n}\n\nh3,\nh4,\nh5,\nh6,\n.h3,\n.h4,\n.h5,\n.h6 {\n    font-weight: 600;\n}\n\nh1,\n.h1 {\n    font-family: $bb-font-family-narrow;\n    font-size: 34px;\n}\n\nh6,\n.h6 {\n    font-size: 14px;\n}\n\n/* Bootstrap class */\n.page-header {\n    border-bottom: none;\n    margin: $margin-double 0;\n    padding-bottom: 0;\n}\n\n/*End Headings*/\n\n/* Links */\na {\n    &.no-pointer {\n        pointer-events: none;\n    }\n\n    &:hover,\n    &:focus {\n        text-decoration: none;\n    }\n}\n\na.alert-link:hover, a.alert-link:focus {\n  text-decoration: underline;\n}\n/* End Links */\n\n/* Placeholder Text */\n::-webkit-input-placeholder {\n    font-style: italic;\n}\n\n::-moz-placeholder { /* Firefox 19+ */\n    font-style: italic;\n    opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526\n}\n\ninput:-moz-placeholder { /* Firefox 18- */\n    font-style: italic;\n}\n\n:-ms-input-placeholder { /* IE */\n    font-style: italic;\n}\n/* End Placeholder Text */\n\n/* Form Elements */\n.control-label {\n    font-weight: normal;\n}\n\n.form-control:focus, .form-control:focus.ng-invalid {\n    box-shadow: 0 0 8px $bb-focus-shadow-color;\n    border: 1px solid $bb-focus-border-color;\n}\n\n.checkbox {\n    font-weight: normal;\n    line-height: 1.67;\n    margin-top: 0;\n}\n\n/* End Form Elements */\n\n/* Data Elements */\n.bb-no-records {\n    color: $gray-light;\n    font-style: italic;\n    text-align: center;\n    font-size: $font-size-h4;\n    white-space: pre-line;\n}\n\n/* End Data Elements */\n\n//$screen-xs-max\n@media (max-width: $screen-xs-max) {\n    .bb-page-content-column-container,\n    .bb-page-content-column,\n    .bb-page-content-tile-column {\n        margin-left: 0;\n        margin-right: 0;\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n    // Since we remove the gutters on the sides of tiles on small screens, we need to remove\n    // the right margin and padding from the header so it doesn't create a horizontal scroll.\n    .bb-tile .bb-tile-title > .row {\n        margin-right: 0;\n    }\n\n    .bb-tile-header-column-tools {\n        padding-right: 0;\n    }\n}\n\n.highlight {\n    background-color: $sky-highlight-color-warning;\n}\n\n.grid-no-search .highlight {\n    background-color: initial;\n}\n\n/* Labels */\n\nlabel.error {\n    margin-top: 0;\n    margin-bottom: 2px;\n    color: $bb-error-color;\n    font-weight: normal;\n}\n\n/* End Labels*/\n\n/* Info Alerts */\n\n.info-alert {\n    margin-left: 10px;\n    margin-right: 10px;\n}\n\n/* End Info Alerts*/\n\n/* Tooltip */\n\n/*overriding default tooltip styling for angular ui bootstrap */\n.tooltip-inner {\n    background-color: $bb-color-white;\n\n    text-align: left;\n    color: $gray-dark;\n    font-family: $font-family-base;\n    font-size: $font-size-base;\n    padding: 10px;\n    @include shadow($color:$gray-light);\n\n    .bb-tooltip-title {\n        font-weight: bold;\n    }\n\n    hr {\n        margin: 0;\n        padding-bottom: 5px;\n    }\n}\n\n.tooltip.in {\n    opacity: 1;\n}\n\n.tooltip.bottom .tooltip-arrow {\n    border-bottom-color: $gray-lighter;\n    border-width: 0 10px 5px 10px;\n}\n\n/* Tooltip End*/\n\ndt {\n    font-weight: 600;\n}\n\n#page-wrapper {\n    margin: 0;\n    padding: 0;\n    min-height: 0;\n}\n"",""﻿.bb-autonumeric-money {\n    text-align: right;\n}\n"",""﻿@font-face {\n  font-family: 'BBSKY';\n  src: url(\""#{$sky-icon-font-path}BBSKY.eot\"") format(\""embedded-opentype\""), url(\""#{$sky-icon-font-path}BBSKY.woff\"") format(\""woff\""), url(\""#{$sky-icon-font-path}BBSKY.ttf\"") format(\""truetype\""), url(\""#{$sky-icon-font-path}BBSKY.svg\"") format(\""svg\"");\n  font-weight: normal;\n  font-style: normal;\n}\n\n.sky-icon {\n  display: inline-block;\n  font-family: BBSKY;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.sky-icon-2x {\n  font-size: 2em;\n}\n\n.sky-icon-3x {\n  font-size: 3em;\n}\n\n.sky-icon-4x {\n  font-size: 4em;\n}\n\n.sky-icon-5x {\n  font-size: 5em;\n}\n\n.sky-icon-add:before {\n  content: \""\\e600\"";\n}\n\n.sky-icon-add-fill:before {\n  content: \""\\e601\"";\n}\n\n.sky-icon-add-nostroke:before {\n  content: \""\\e602\"";\n}\n\n.sky-icon-delete:before {\n  content: \""\\e603\"";\n}\n\n.sky-icon-close:before {\n  content: \""\\e604\"";\n}\n\n.sky-icon-check:before {\n  content: \""\\e605\"";\n}\n\n.sky-icon-check-nostroke:before {\n  content: \""\\e606\"";\n}\n\n.sky-icon-arrow:before {\n  content: \""\\e607\"";\n}\n\n.sky-icon-arrow-angle:before {\n  content: \""\\e608\"";\n}\n\n.sky-icon-arrow-bub:before {\n  content: \""\\e609\"";\n}\n\n.sky-icon-back:before {\n  content: \""\\e60a\"";\n}\n\n.sky-icon-search:before {\n  content: \""\\e60b\"";\n}\n\n.sky-icon-edit:before {\n  content: \""\\e60c\"";\n}\n\n.sky-icon-save:before {\n  content: \""\\e60d\"";\n}\n\n.sky-icon-print:before {\n  content: \""\\e60e\"";\n}\n\n.sky-icon-folder:before {\n  content: \""\\e60f\"";\n}\n\n.sky-icon-warning:before {\n  content: \""\\e610\"";\n}\n\n.sky-icon-gear:before {\n  content: \""\\e611\"";\n}\n\n.sky-icon-gear-fill:before {\n  content: \""\\e612\"";\n}\n\n.sky-icon-columns:before {\n  content: \""\\e613\"";\n}\n\n.sky-icon-filter:before {\n  content: \""\\e614\"";\n}\n\n.sky-icon-note:before {\n  content: \""\\e615\"";\n}\n\n.sky-icon-message-bubble:before {\n  content: \""\\e616\"";\n}\n\n.sky-icon-export:before {\n  content: \""\\e617\"";\n}\n\n.sky-icon-user:before {\n  content: \""\\e618\"";\n}\n\n.sky-icon-user-face:before {\n  content: \""\\e619\"";\n}\n\n.sky-icon-present:before {\n  content: \""\\e61a\"";\n}\n\n.sky-icon-phone:before {\n  content: \""\\e61b\"";\n}\n\n.sky-icon-calendar:before {\n  content: \""\\e61c\"";\n}\n\n.sky-icon-new-donor:before {\n  content: \""\\e61d\"";\n}\n\n.sky-icon-globe:before {\n  content: \""\\e61e\"";\n}\n\n.sky-icon-cloud:before {\n  content: \""\\e61f\"";\n}\n\n.sky-icon-key:before {\n  content: \""\\e620\"";\n}\n\n.sky-icon-key-angle:before {\n  content: \""\\e621\"";\n}\n\n.sky-icon-share:before {\n  content: \""\\e622\"";\n}\n\n.sky-icon-lock:before {\n  content: \""\\e623\"";\n}\n\n.sky-icon-unlock:before {\n  content: \""\\e624\"";\n}\n\n.sky-icon-copy:before {\n  content: \""\\e625\"";\n}\n\n.sky-icon-important-bubble:before {\n  content: \""\\e63d\"";\n}\n\n.sky-icon-multi-action:before {\n  content: \""\\e646\"";\n}\n\n.bb-icon {\n  @extend .fa;\n}\n\n.bb-icon-config {\n  @extend .fa-cog;\n}\n""],"
dc0b4de2280f956e49379a98912b7f76561c6cb0,11821801,			- http://stackoverflow.com/questions/11821801/why-use-a-reentrantlock-if-one-can-use-synchronizedthis
860ea8ed7320490a4cabd7894ca20cd8055f4c12,26603875,			// http://stackoverflow.com/a/26603875
ee530c369bd5c4f95adba9881cc2e72342ba40ad,263416,            // credit: http://stackoverflow.com/a/263416/677735
c1f7a1373599b5cfa0b6be2c157b297fecbd6067,15724300,	// https://stackoverflow.com/a/15724300
35498124fc28936c81e0c61bc106c9ee203335bb,152968,   # thanks spoulson: http://stackoverflow.com/questions/152968/how-can-i-convert-a-number-to-its-multiple-form-in-perl
fa3e003c3953e2f29acf48091c2bb605cbdfe0f4,3520977,"			shellScript = ""# Version 2.1 (added support for header files in subfolders)\n# Version 2.0 (updated for Xcode 4, with some fixes)\n# Changes:\n#    - Some libs (e.g. box2D) require their headers in sub-folders; Xcode DOES NOT SUPPORT THIS, but you can hack Xcode to force it to obey the standards. But then this script would fail; this has now been fixed - script works with both types of project\n#    - Works with xcode 4, even when running xcode 3 projects (Workarounds for apple bugs)\n#    - Faster / better: only runs lipo once, instead of once per recursion\n#    - Added some debugging statemetns that can be switched on/off by changing the DEBUG_THIS_SCRIPT variable to \""true\""\n#    - Fixed some typos\n#\n# Purpose:\n#   Create a static library for iPhone from within XCode\n#   Because Apple staff DELIBERATELY broke Xcode to make this impossible from the GUI (Xcode 3.2.3 specifically states this in the Release notes!)\n#   ...no, I don't understand why they did this!\n#\n# Author: Adam Martin - http://twitter.com/redglassesapps\n# Based on: original script from Eonil (main changes: Eonil's script WILL NOT WORK in Xcode GUI - it WILL CRASH YOUR COMPUTER)\n#\n# More info: see this Stack Overflow question: http://stackoverflow.com/questions/3520977/build-fat-static-library-device-simulator-using-xcode-and-sdk-4\n\n#################[ Tests: helps workaround any future bugs in Xcode ]########\n#\nDEBUG_THIS_SCRIPT=\""false\""\n\nif [ $DEBUG_THIS_SCRIPT = \""true\"" ]\nthen\necho \""########### TESTS #############\""\necho \""Use the following variables when debugging this script; note that they may change on recursions\""\necho \""BUILD_DIR = $BUILD_DIR\""\necho \""BUILD_ROOT = $BUILD_ROOT\""\necho \""CONFIGURATION_BUILD_DIR = $CONFIGURATION_BUILD_DIR\""\necho \""BUILT_PRODUCTS_DIR = $BUILT_PRODUCTS_DIR\""\necho \""CONFIGURATION_TEMP_DIR = $CONFIGURATION_TEMP_DIR\""\necho \""TARGET_BUILD_DIR = $TARGET_BUILD_DIR\""\nfi\n\n#####################[ part 1 ]##################\n# First, work out the BASESDK version number (NB: Apple ought to report this, but they hide it)\n#    (incidental: searching for substrings in sh is a nightmare! Sob)\n\nSDK_VERSION=$(echo ${SDK_NAME} | grep -o '.\\{3\\}$')\n\n# Next, work out if we're in SIM or DEVICE\n\nif [ ${PLATFORM_NAME} = \""iphonesimulator\"" ]\nthen\nOTHER_SDK_TO_BUILD=iphoneos${SDK_VERSION}\nelse\nOTHER_SDK_TO_BUILD=iphonesimulator${SDK_VERSION}\nfi\n\necho \""XCode has selected SDK: ${PLATFORM_NAME} with version: ${SDK_VERSION} (although back-targetting: ${IPHONEOS_DEPLOYMENT_TARGET})\""\necho \""...therefore, OTHER_SDK_TO_BUILD = ${OTHER_SDK_TO_BUILD}\""\n#\n#####################[ end of part 1 ]##################\n\n#####################[ part 2 ]##################\n#\n# IF this is the original invocation, invoke WHATEVER other builds are required\n#\n# Xcode is already building ONE target...\n#\n# ...but this is a LIBRARY, so Apple is wrong to set it to build just one.\n# ...we need to build ALL targets\n# ...we MUST NOT re-build the target that is ALREADY being built: Xcode WILL CRASH YOUR COMPUTER if you try this (infinite recursion!)\n#\n#\n# So: build ONLY the missing platforms/configurations.\n\nif [ \""true\"" == ${ALREADYINVOKED:-false} ]\nthen\necho \""RECURSION: I am NOT the root invocation, so I'm NOT going to recurse\""\nelse\n# CRITICAL:\n# Prevent infinite recursion (Xcode sucks)\nexport ALREADYINVOKED=\""true\""\n\necho \""RECURSION: I am the root ... recursing all missing build targets NOW...\""\necho \""RECURSION: ...about to invoke: xcodebuild -configuration \\\""${CONFIGURATION}\\\"" -target \\\""${TARGET_NAME}\\\"" -sdk \\\""${OTHER_SDK_TO_BUILD}\\\"" ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO\""\nxcodebuild -configuration \""${CONFIGURATION}\"" -target \""${TARGET_NAME}\"" -sdk \""${OTHER_SDK_TO_BUILD}\"" ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO BUILD_DIR=\""${BUILD_DIR}\"" BUILD_ROOT=\""${BUILD_ROOT}\""\n\nACTION=\""build\""\n\n#Merge all platform binaries as a fat binary for each configurations.\n\n# Calculate where the (multiple) built files are coming from:\nCURRENTCONFIG_DEVICE_DIR=${SYMROOT}/${CONFIGURATION}-iphoneos\nCURRENTCONFIG_SIMULATOR_DIR=${SYMROOT}/${CONFIGURATION}-iphonesimulator\n\necho \""Taking device build from: ${CURRENTCONFIG_DEVICE_DIR}\""\necho \""Taking simulator build from: ${CURRENTCONFIG_SIMULATOR_DIR}\""\n\nCREATING_UNIVERSAL_DIR=${SYMROOT}/${CONFIGURATION}-universal\necho \""...I will output a universal build to: ${CREATING_UNIVERSAL_DIR}\""\n\n# ... remove the products of previous runs of this script\n#      NB: this directory is ONLY created by this script - it should be safe to delete!\n\nrm -rf \""${CREATING_UNIVERSAL_DIR}\""\nmkdir \""${CREATING_UNIVERSAL_DIR}\""\n\n#\necho \""lipo: for current configuration (${CONFIGURATION}) creating output file: ${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}\""\nlipo -create -output \""${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}\"" \""${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}\"" \""${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}\""\n\n#########\n#\n# Added: StackOverflow suggestion to also copy \""include\"" files\n#    (untested, but should work OK)\n#\nif [ -d \""${CURRENTCONFIG_DEVICE_DIR}/usr/local/include\"" ]\nthen\nmkdir -p \""${CREATING_UNIVERSAL_DIR}/usr/local/include\""\n# * needs to be outside the double quotes?\ncp -r \""${CURRENTCONFIG_DEVICE_DIR}/usr/local/include/\""* \""${CREATING_UNIVERSAL_DIR}/usr/local/include\""\nfi\nfi"";"
46cb6d78061dd8962a0dbe4523a52e2e6a8822fd,4672271,    // http://stackoverflow.com/questions/4672271/reverse-opposing-colors
306b48945e68d3c756e0a964fb34639765abe5f6,6145390,     *  http://stackoverflow.com/questions/6145390/deserialize-function-byte-array-to-uint32
926f9abd2867a1a955ee2d9007b6dc976ab3165b,24646283,"[Next](https://groups.google.com/forum/#!searchin/shiny-discuss/insert$20javascript/shiny-discuss/F3GOgIJnRVs/iXfSqSCmCgAJ), shiny's google group had a tip on inserting Javascript into shiny, which didn't work for me but evidently did for others. Then, [back at StackOverflow](http://stackoverflow.com/questions/24526403/timing-events-when-session-ends/24646283#24646283), I found that **the javascript above has its drawbacks if a user refreshed their session midway.** "
ef70e29fab8c9a2f74fff52a2fdf21125b8283b2,9090128,  // see http://stackoverflow.com/a/9090128/640539
b107f913ff4f19136cdceeae1f5f5b0025df352f,20894133,上周遇到一个问题，推送服务器cpu异常，无法正常推送，查看日志发现是websocket链接到了上限， tornado报too many open files的错误，但是cpu，mem和带宽都没有问题（cpu异常是因为在不停的打log）。所以应该是进程句柄不够用的情况，stackoverflow上有一个[回答](http://stackoverflow.com/questions/20894133/tornado-errno-24-too-many-open-files)是这样
7c66866d847289bcf9e067fb1607158c4ff55d86,34615922,  //https://stackoverflow.com/questions/34615425/how-to-watch-for-form-changes-in-angular-2/34615922#34615922
c05d6afe21dba94cf4948533548e01285dad30b4,9267899,            //http://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string
4e737644ef846334ef81267611460c3630369113,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
f1d3aceeee8d7989719d5fe19c9408e1d94d74e6,987376,		 * http://stackoverflow.com/a/987376
a962dc1863e62c8e99c88da8e378d843a65b5165,5926986,      // visible overflow for firefox https://stackoverflow.com/questions/5926986/why-does-firefox-appear-to-truncate-embedded-svgs
1348b8a17410ce9ee7b68591553889fae4a1c9bc,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
f14eafc73cab8b928012d30a3b258180bc4f8447,3330919,        // http://stackoverflow.com/a/3330919)
a9cf3bce12f827de6112fd1b80f810f3f7521355,16209145,"<li><a href=""http://code.runnable.com/UTlPPF-f2W1TAAET/how-to-use-cookies-in-express-for-node-js"">Example</a> <a href=""http://stackoverflow.com/questions/16209145/how-to-set-cookie-in-node-js-using-express-framework"">[1]</a></li>"
c5ab32013bc2f43e87a63f3bf20f98cb3bb418b4,4300224,# http://stackoverflow.com/a/4300224/597069
e7040c82ede3460a806a9091e5fe1f3f3da1a0e7,1926796,        // Event-processing code adapted from http://stackoverflow.com/a/1926796/
c789877adeadf27767c384adcd87ff45a034e59a,32159233,##### *If you're in Windows you may have to add the npm install directory to the `PATH` environment variable. e.g. `C:\Users\username\AppData\Roaming\npm`. See also: [http://stackoverflow.com/a/32159233/291180](http://stackoverflow.com/a/32159233/291180).*
300a4f12d953f22e40242114afbb6c34d3d473d3,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
9cbaaaff1123be26f0dabd579f938861226f1df2,313970,// [How to convert std::string to lower case?](http://stackoverflow.com/questions/313970/how-to-convert-stdstring-to-lower-case)
3cfd9ddc6115b11c6abebb05ac136aea37fde309,202511,     * See http://stackoverflow.com/questions/147267/easy-way-to-use-variables-of-enum-types-as-string-in-c#202511
261e352ab66646ccca9ad07b59fdc37263375e3e,1444562,  // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object
0ec1f8329975021b8ab00a1116fe509ee066d667,25857126,"JacksonObjectMapperAutoConfiguration,org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperAutoConfiguration,http://stackoverflow.com/questions/25857126/spring-boot-requestmappinghandlermapping-java-lang-arraystoreexception"
44f31a8471bc4663d67b90e827db5020c047816e,41593649,		// See: https://stackoverflow.com/questions/41593649/why-wont-visual-studio-let-me-use-a-templatized-constexpr-function-in-enable-i/41597153
eb3da5cd5bc687f87e942ce1b958c719ec880ac0,232651,:: http://stackoverflow.com/questions/232651/why-the-system-cannot-find-the-batch-label-specified-is-thrown-even-if-label-e
447742c2b637a4e2327c0a71f1d6c5f6fa99e316,105034,    //from http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
dd5331658c10406eff786b42b797819e14be2e07,580706,            // http://stackoverflow.com/a/580706
3ad0e202962633985f119acbb8e9c165e4be2a00,18100097, * (from https://stackoverflow.com/questions/18100097/portable-way-to-check-if-directory-exists-windows-linux-c
d3f8ed754264ff3d17b3af83243846f51f8c1f3b,12911373,http://stackoverflow.com/questions/12911373/how-do-i-use-a-x509-certificate-with-pycrypto
a6d94a0968b63c490e2809ae07a6a60ed074185f,5568169,"           data?"", http://stackoverflow.com/a/5568169"
37b1318d1c5c421a9bf957af28413b2c78c6a613,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
9f96588c207b18c36e685a019b7ee963930bc40a,10133679,    // try to improve performance - http://stackoverflow.com/a/10133679
60f839e02bf28a40da50e4f461bd81d1aa56a10e,7195443,        # based on http://stackoverflow.com/a/7195443/54056
43d7144e2604c22d84104175d47548bef4f58cda,24236240,     * @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox
7126e0c7faf934bcbc0ff8a46db51ab92707f1a0,43216659,"{""version"":3,""file"":""infinitegrid.pkgd.js"",""sources"":[""../node_modules/@egjs/component/dist/component.esm.js"",""../src/browser.ts"",""../src/consts.ts"",""../src/utils.ts"",""../src/ItemManager.ts"",""../src/DOMRenderer.ts"",""../src/Watcher.ts"",""../src/Infinite.ts"",""../src/AutoSizer.ts"",""../src/ImageLoaded.ts"",""../src/LayoutManager.ts"",""../src/InfiniteGrid.ts"",""../src/layouts/GridLayout.ts"",""../src/layouts/FrameLayout.ts"",""../src/layouts/SquareLayout.ts"",""../src/layouts/lib/BoxModel.ts"",""../src/layouts/PackingLayout.ts"",""../src/layouts/lib/dijkstra.ts"",""../src/layouts/JustifiedLayout.ts"",""../src/index.umd.ts""],""sourcesContent"":[""/*\nCopyright (c) 2017 NAVER Corp.\n@egjs/component project is licensed under the MIT license\n\n@egjs/component JavaScript library\nhttps://naver.github.io/egjs-component\n\n@version 2.1.2\n*/\n/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nfunction isUndefined(value) {\n  return typeof value === \""undefined\"";\n}\n/**\n * A class used to manage events in a component\n * @ko 컴포넌트의 이벤트을 관리할 수 있게 하는 클래스\n * @alias eg.Component\n */\n\n\nvar Component =\n/*#__PURE__*/\nfunction () {\n  var Component =\n  /*#__PURE__*/\n  function () {\n    /**\n    * Version info string\n    * @ko 버전정보 문자열\n    * @name VERSION\n    * @static\n    * @type {String}\n    * @example\n    * eg.Component.VERSION;  // ex) 2.0.0\n    * @memberof eg.Component\n    */\n\n    /**\n     * @support {\""ie\"": \""7+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n     */\n    function Component() {\n      this._eventHandler = {};\n      this.options = {};\n    }\n    /**\n     * Triggers a custom event.\n     * @ko 커스텀 이벤트를 발생시킨다\n     * @param {String} eventName The name of the custom event to be triggered <ko>발생할 커스텀 이벤트의 이름</ko>\n     * @param {Object} customEvent Event data to be sent when triggering a custom event <ko>커스텀 이벤트가 발생할 때 전달할 데이터</ko>\n     * @return {Boolean} Indicates whether the event has occurred. If the stop() method is called by a custom event handler, it will return false and prevent the event from occurring. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">Ref</a> <ko>이벤트 발생 여부. 커스텀 이벤트 핸들러에서 stop() 메서드를 호출하면 'false'를 반환하고 이벤트 발생을 중단한다. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">참고</a></ko>\n     * @example\n    class Some extends eg.Component {\n     some(){\n     \tif(this.trigger(\""beforeHi\"")){ // When event call to stop return false.\n    \tthis.trigger(\""hi\"");// fire hi event.\n     \t}\n     }\n    }\n    const some = new Some();\n    some.on(\""beforeHi\"", (e) => {\n    if(condition){\n    \te.stop(); // When event call to stop, `hi` event not call.\n    }\n    });\n    some.on(\""hi\"", (e) => {\n    // `currentTarget` is component instance.\n    console.log(some === e.currentTarget); // true\n    });\n    // If you want to more know event design. You can see article.\n    // https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\n     */\n\n\n    var _proto = Component.prototype;\n\n    _proto.trigger = function trigger(eventName, customEvent) {\n      if (customEvent === void 0) {\n        customEvent = {};\n      }\n\n      var handlerList = this._eventHandler[eventName] || [];\n      var hasHandlerList = handlerList.length > 0;\n\n      if (!hasHandlerList) {\n        return true;\n      } // If detach method call in handler in first time then handler list calls.\n\n\n      handlerList = handlerList.concat();\n      customEvent.eventType = eventName;\n      var isCanceled = false;\n      var arg = [customEvent];\n      var i = 0;\n\n      customEvent.stop = function () {\n        isCanceled = true;\n      };\n\n      customEvent.currentTarget = this;\n\n      for (var _len = arguments.length, restParam = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        restParam[_key - 2] = arguments[_key];\n      }\n\n      if (restParam.length >= 1) {\n        arg = arg.concat(restParam);\n      }\n\n      for (i = 0; handlerList[i]; i++) {\n        handlerList[i].apply(this, arg);\n      }\n\n      return !isCanceled;\n    };\n    /**\n     * Executed event just one time.\n     * @ko 이벤트가 한번만 실행된다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       alert(\""hi\"");\n     }\n     thing() {\n       this.once(\""hi\"", this.hi);\n     }\n    }\n    var some = new Some();\n    some.thing();\n    some.trigger(\""hi\"");\n    // fire alert(\""hi\"");\n    some.trigger(\""hi\"");\n    // Nothing happens\n     */\n\n\n    _proto.once = function once(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var i;\n\n        for (i in eventHash) {\n          this.once(i, eventHash[i]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var self = this;\n        this.on(eventName, function listener() {\n          for (var _len2 = arguments.length, arg = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            arg[_key2] = arguments[_key2];\n          }\n\n          handlerToAttach.apply(self, arg);\n          self.off(eventName, listener);\n        });\n      }\n\n      return this;\n    };\n    /**\n     * Checks whether an event has been attached to a component.\n     * @ko 컴포넌트에 이벤트가 등록됐는지 확인한다.\n     * @param {String} eventName The name of the event to be attached <ko>등록 여부를 확인할 이벤트의 이름</ko>\n     * @return {Boolean} Indicates whether the event is attached. <ko>이벤트 등록 여부</ko>\n     * @example\n    class Some extends eg.Component {\n     some() {\n       this.hasOn(\""hi\"");// check hi event.\n     }\n    }\n     */\n\n\n    _proto.hasOn = function hasOn(eventName) {\n      return !!this._eventHandler[eventName];\n    };\n    /**\n     * Attaches an event to a component.\n     * @ko 컴포넌트에 이벤트를 등록한다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.on(\""hi\"",this.hi); //attach event\n     }\n    }\n    */\n\n\n    _proto.on = function on(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var name;\n\n        for (name in eventHash) {\n          this.on(name, eventHash[name]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var handlerList = this._eventHandler[eventName];\n\n        if (isUndefined(handlerList)) {\n          this._eventHandler[eventName] = [];\n          handlerList = this._eventHandler[eventName];\n        }\n\n        handlerList.push(handlerToAttach);\n      }\n\n      return this;\n    };\n    /**\n     * Detaches an event from the component.\n     * @ko 컴포넌트에 등록된 이벤트를 해제한다\n     * @param {eventName} eventName The name of the event to be detached <ko>해제할 이벤트의 이름</ko>\n     * @param {Function} handlerToDetach The handler function of the event to be detached <ko>해제할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself <ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.off(\""hi\"",this.hi); //detach event\n     }\n    }\n     */\n\n\n    _proto.off = function off(eventName, handlerToDetach) {\n      // All event detach.\n      if (isUndefined(eventName)) {\n        this._eventHandler = {};\n        return this;\n      } // All handler of specific event detach.\n\n\n      if (isUndefined(handlerToDetach)) {\n        if (typeof eventName === \""string\"") {\n          this._eventHandler[eventName] = undefined;\n          return this;\n        } else {\n          var eventHash = eventName;\n          var name;\n\n          for (name in eventHash) {\n            this.off(name, eventHash[name]);\n          }\n\n          return this;\n        }\n      } // The handler of specific event detach.\n\n\n      var handlerList = this._eventHandler[eventName];\n\n      if (handlerList) {\n        var k;\n        var handlerFunction;\n\n        for (k = 0; (handlerFunction = handlerList[k]) !== undefined; k++) {\n          if (handlerFunction === handlerToDetach) {\n            handlerList = handlerList.splice(k, 1);\n            break;\n          }\n        }\n      }\n\n      return this;\n    };\n\n    return Component;\n  }();\n\n  Component.VERSION = \""2.1.2\"";\n  return Component;\n}();\n\nexport default Component;\n//# sourceMappingURL=component.esm.js.map\n"",""import { WindowMockType } from \""./types\"";\n\nlet win: WindowMockType;\n\nif (typeof window === \""undefined\"") {\n\t// window is undefined in node.js\n\twin = {\n\t\tdocument: {},\n\t\tnavigator: {\n\t\t\tuserAgent: \""\"",\n\t\t},\n\t};\n} else {\n\twin = window;\n}\n\nexport { win as window };\nexport const document = win.document;\n"",""import { window, document } from \""./browser\"";\nimport { IAlign } from \""./types\"";\n\nconst ua = window.navigator.userAgent;\n\nexport const SUPPORT_COMPUTEDSTYLE = !!(\""getComputedStyle\"" in window);\nexport const SUPPORT_ADDEVENTLISTENER = !!(\""addEventListener\"" in document);\nexport const SUPPORT_PASSIVE = (() => {\n\tlet supportsPassiveOption = false;\n\n\ttry {\n\t\tif (SUPPORT_ADDEVENTLISTENER && Object.defineProperty) {\n\t\t\tdocument.addEventListener(\""test\"", null, Object.defineProperty({},\n\t\t\t\t\""passive\"", {\n\t\t\t\t\tget() {\n\t\t\t\t\t\tsupportsPassiveOption = true;\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t}\n\t} catch (e) {\n\t\t//\n\t}\n\treturn supportsPassiveOption;\n})();\n\nexport const IS_IE = /MSIE|Trident|Windows Phone|Edge/.test(ua);\nexport const IS_IOS = /iPhone|iPad/.test(ua);\nexport const IS_ANDROID2 = /Android 2\\./.test(ua);\nexport const CONTAINER_CLASSNAME = \""_eg-infinitegrid-container_\"";\nexport const IGNORE_CLASSNAME = \""_eg-infinitegrid-ignore_\"";\nexport const TRANSITION_NAME = \""_INFINITEGRID_TRANSITION\"";\n\nexport const APPEND = true;\nexport const PREPEND = false;\nexport const VERTICAL = \""vertical\"";\nexport const HORIZONTAL = \""horizontal\"";\nexport const CACHE = true;\nexport const NO_CACHE = false;\nexport const TRUSTED = true;\nexport const NO_TRUSTED = false;\nexport const MULTI = true;\nexport const SINGLE = false;\nexport const DUMMY_POSITION = -100000;\nexport const GROUPKEY_ATT = \""data-groupkey\"";\n\nexport const DEFAULT_OPTIONS = {\n\thorizontal: false,\n\tmargin: 0,\n};\n\nexport const agent = ua.toLowerCase();\nexport const isMobile = /mobi|ios|android/.test(agent);\n\nexport const ALIGN: IAlign = {\n\tSTART: \""start\"",\n\tCENTER: \""center\"",\n\tEND: \""end\"",\n\tJUSTIFY: \""justify\"",\n};\n\nexport const IDLE = 0;\nexport const LOADING_APPEND = 1;\nexport const LOADING_PREPEND = 2;\nexport const PROCESSING = 4;\n\nconst webkit = /applewebkit\\/([\\d|.]*)/g.exec(agent);\n\nexport const WEBKIT_VERSION = (webkit && parseInt(webkit[1], 10)) || 0;\nexport const DEFENSE_BROWSER = (WEBKIT_VERSION && WEBKIT_VERSION < 537);\n\ninterface ITransitionEnd {\n\ttransitionend: string;\n\twebkitTransitionEnd: string;\n\tMSTransitionEnd: string;\n\toTransitionEnd: string;\n\tmozTransitionEnd: string;\n}\n\nexport const [TRANSFORM, TRANSITION, TRANSITION_END] = (() => {\n\tconst properties: ITransitionEnd = {\n\t\ttransitionend: \""\"",\n\t\twebkitTransitionEnd: \""-webkit-\"",\n\t\tMSTransitionEnd: \""-ms-\"",\n\t\toTransitionEnd: \""-o-\"",\n\t\tmozTransitionEnd: \""-moz-\"",\n\t};\n\n\tfor (const property in properties) {\n\t\tconst prefix = properties[property as keyof ITransitionEnd];\n\n\t\tif (`on${property.toLowerCase()}` in window) {\n\t\t\treturn [`${prefix}transform`, `${prefix}transition`, property];\n\t\t}\n\t}\n\treturn [];\n})() as [\""transform\"", \""transition\"", \""transitionend\""];\n"",""\nimport { window, document } from \""./browser\"";\nimport {\n\tSUPPORT_COMPUTEDSTYLE,\n\tSUPPORT_ADDEVENTLISTENER,\n\tSUPPORT_PASSIVE,\n\tVERTICAL,\n\tHORIZONTAL,\n\tDEFAULT_OPTIONS,\n} from \""./consts\"";\nimport { IJQuery, IRectlProperties, InnerSizeType, ClientSizeType, ScrollSizeType, OffsetSizeType, WindowMockType } from \""./types\"";\n\nexport function toArray(nodes: HTMLCollection): HTMLElement[];\nexport function toArray<T extends Node>(nodes: T[] | NodeListOf<T>): T[];\nexport function toArray<T extends Node>(nodes: T[] | NodeListOf<T> | HTMLCollection) {\n\t// SCRIPT5014 in IE8\n\tconst array = [];\n\n\tif (nodes) {\n\t\tfor (let i = 0, len = nodes.length; i < len; i++) {\n\t\t\tarray.push(nodes[i]);\n\t\t}\n\t}\n\treturn array;\n}\nexport function matchHTML(html: string) {\n\treturn html.match(/^<([A-z]+)\\s*([^>]*)>/);\n}\n/**\n * Select or create element\n * @param {String|HTMLElement|jQuery} param\n *  when string given is as HTML tag, then create element\n *  otherwise it returns selected elements\n * @param {Boolean} multi\n * @returns {HTMLElement}\n */\nexport function $(param: WindowMockType, multi?: false): WindowMockType;\nexport function $(\n\tparam: string | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti: true,\n): HTMLElement[];\nexport function $(\n\tparam: string | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti?: false,\n): HTMLElement;\nexport function $(\n\tparam: string | HTMLElement | WindowMockType | IJQuery,\n\tmulti?: false,\n): HTMLElement | WindowMockType;\nexport function $(\n\tparam: string | WindowMockType | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti = false,\n): HTMLElement | WindowMockType | HTMLElement[] {\n\tlet el: WindowMockType | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>;\n\n\tif (typeof param === \""string\"") { // String (HTML, Selector)\n\t\t// check if string is HTML tag format\n\t\tconst match = matchHTML(param);\n\n\t\t// creating element\n\t\tif (match) { // HTML\n\t\t\tconst dummy = document.createElement(\""div\"");\n\n\t\t\tdummy.innerHTML = param;\n\t\t\tel = dummy.childNodes as NodeListOf<HTMLElement>;\n\t\t} else { // Selector\n\t\t\tel = document.querySelectorAll(param);\n\t\t}\n\t\tif (multi) {\n\t\t\treturn toArray(el as NodeListOf<HTMLElement>);\n\t\t} else {\n\t\t\treturn el && (el as NodeListOf<HTMLElement>)[0];\n\t\t}\n\t} else if (isWindow(param)) { // window\n\t\tel = param;\n\t} else if (isJQuery(param)) { // jQuery\n\t\tel = multi ? $(param.toArray(), true) :\n\t\t\t$(param.get(0), false);\n\t} else if (Array.isArray(param)) {\n\t\tel = param.map(v => $(v));\n\t\tif (!multi) {\n\t\t\tel = el.length >= 1 ? (el as HTMLElement[])[0] : undefined;\n\t\t}\n\t} else if (param.nodeName &&\n\t\t(param.nodeType === 1 || param.nodeType === 9)) { // HTMLElement, Document\n\t\tel = param;\n\t}\n\treturn el;\n}\nexport function addEvent(\n\telement: Element | WindowMockType,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n\teventListenerOptions?: boolean | { [key: string]: any },\n) {\n\tif (SUPPORT_ADDEVENTLISTENER) {\n\t\tlet options = eventListenerOptions || false;\n\n\t\tif (typeof eventListenerOptions === \""object\"") {\n\t\t\toptions = SUPPORT_PASSIVE ? eventListenerOptions : false;\n\t\t}\n\t\telement.addEventListener(type, handler, options);\n\t} else if ((element as any).attachEvent) {\n\t\t(element as any).attachEvent(`on${type}`, handler);\n\t} else {\n\t\t(element as any)[`on${type}`] = handler;\n\t}\n}\nexport function removeEvent(\n\telement: Element | WindowMockType,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n) {\n\tif (element.removeEventListener) {\n\t\telement.removeEventListener(type, handler, false);\n\t} else if ((element as any).detachEvent) {\n\t\t(element as any).detachEvent(`on${type}`, handler);\n\t} else {\n\t\t(element as any)[`on${type}`] = null;\n\t}\n}\nexport function addOnceEvent(\n\telement: Element,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n\teventListenerOptions?: boolean | { [key: string]: any },\n) {\n\tconst callback = (e: any) => {\n\t\tremoveEvent(element, type, callback);\n\t\thandler(e);\n\t};\n\n\taddEvent(element, type, callback, eventListenerOptions);\n}\nexport function scroll(el: HTMLElement | WindowMockType, horizontal = false) {\n\tconst prop = `scroll${horizontal ? \""Left\"" : \""Top\""}` as \""scrollLeft\"" | \""scrollTop\"";\n\n\tif (isWindow(el)) {\n\t\treturn window[horizontal ? \""pageXOffset\"" : \""pageYOffset\""] || document.body[prop] || document.documentElement[prop];\n\t} else {\n\t\treturn el[prop];\n\t}\n}\nexport function scrollTo(el: WindowMockType | Element, x: number, y: number) {\n\tif (isWindow(el)) {\n\t\tel.scroll(x, y);\n\t} else {\n\t\tel.scrollLeft = x;\n\t\tel.scrollTop = y;\n\t}\n}\nexport function scrollBy(el: WindowMockType | Element, x: number, y: number) {\n\tif (isWindow(el)) {\n\t\tel.scrollBy(x, y);\n\t} else {\n\t\tel.scrollLeft += x;\n\t\tel.scrollTop += y;\n\t}\n}\nexport function getStyles(el: Element) {\n\treturn (SUPPORT_COMPUTEDSTYLE ?\n\t\twindow.getComputedStyle(el) : (el as any).currentStyle) || {};\n}\nfunction _getSize(el: WindowMockType | Document | HTMLElement, name: \""Width\"" | \""Height\"", isOffset?: boolean) {\n\tif (isWindow(el)) { // WINDOW\n\t\treturn window[`inner${name}` as InnerSizeType] || document.body[`client${name}` as ClientSizeType];\n\t} else if (isDocument(el)) { // DOCUMENT_NODE\n\t\tconst doc = (el as Document).documentElement;\n\t\tconst body = (el as Document).body;\n\n\t\treturn Math.max(\n\t\t\tbody[`scroll${name}` as ScrollSizeType], doc[`scroll${name}` as ScrollSizeType],\n\t\t\tbody[`offset${name}` as OffsetSizeType], doc[`offset${name}` as OffsetSizeType],\n\t\t\tdoc[`client${name}` as ClientSizeType],\n\t\t);\n\t} else { // NODE\n\t\tlet size = 0;\n\n\t\tif (isOffset) {\n\t\t\tconst clientRect = el.getBoundingClientRect();\n\n\t\t\tsize = name === \""Width\"" ? clientRect.right - clientRect.left : clientRect.bottom - clientRect.top;\n\t\t} else {\n\t\t\tsize = el[`client${name}` as ClientSizeType] || el[`offset${name}` as OffsetSizeType];\n\t\t}\n\t\tif (size) {\n\t\t\treturn size;\n\t\t}\n\t\tconst cssSize = getStyles(el)[name.toLowerCase()];\n\n\t\treturn (~cssSize.indexOf(\""px\"") && parseFloat(cssSize)) || 0;\n\t}\n}\n\nexport function innerWidth(el: WindowMockType | Document | HTMLElement) {\n\treturn _getSize(el, \""Width\"", false);\n}\nexport function innerHeight(el: WindowMockType | Document | HTMLElement) {\n\treturn _getSize(el, \""Height\"", false);\n}\nexport function outerWidth(el: WindowMockType | Document | HTMLElement) {\n\treturn _getSize(el, \""Width\"", true);\n}\nexport function outerHeight(el: WindowMockType | Document | HTMLElement) {\n\treturn _getSize(el, \""Height\"", true);\n}\nexport function getSize(el: HTMLElement) {\n\treturn {\n\t\twidth: outerWidth(el),\n\t\theight: outerHeight(el),\n\t};\n}\nexport const STYLE: {\n\tvertical: IRectlProperties,\n\thorizontal: IRectlProperties,\n} = {\n\tvertical: {\n\t\tstartPos1: \""top\"",\n\t\tendPos1: \""bottom\"",\n\t\tsize1: \""height\"",\n\t\tstartPos2: \""left\"",\n\t\tendPos2: \""right\"",\n\t\tsize2: \""width\"",\n\t},\n\thorizontal: {\n\t\tstartPos1: \""left\"",\n\t\tendPos1: \""right\"",\n\t\tsize1: \""width\"",\n\t\tstartPos2: \""top\"",\n\t\tendPos2: \""bottom\"",\n\t\tsize2: \""height\"",\n\t},\n};\n\nexport function getStyleNames(isHorizontal: boolean): IRectlProperties {\n\treturn STYLE[isHorizontal ? HORIZONTAL : VERTICAL];\n}\nexport function assign<A, B>(target: A, source: B): A & B;\nexport function assign<A, B, C>(target: A, source1: B, source2: C): A & B & C;\nexport function assign<A, B, C, D>(target: A, source1: B, source2: C, source3: D): A & B & C & D;\nexport function assign(target: { [key: string]: any }, ...sources: Array<{ [key: string]: any }>): { [key: string]: any };\nexport function assign(target: { [key: string]: any }, ...sources: Array<{ [key: string]: any }>) {\n\tsources.forEach(source => {\n\t\tfor (const key in source) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t});\n\treturn target;\n}\nexport function assignOptions<A extends { [key: string]: any }, B extends { [key: string]: any }>(\n\tdefaultOptions: A, options: B): typeof DEFAULT_OPTIONS & A & B {\n\treturn assign({},\n\t\tDEFAULT_OPTIONS,\n\t\tdefaultOptions,\n\t\toptions);\n}\n\nexport function toZeroArray(outline?: number[]) {\n\tif (!outline || !outline.length) {\n\t\treturn [0];\n\t}\n\treturn outline;\n}\nexport function cloneItems<T extends { [key: string]: any }>(items: T[]) {\n\treturn items.map(item => assign({}, item));\n}\nexport function isJQuery(el: any): el is IJQuery {\n\treturn (typeof (window as any).jQuery === \""function\"" && el instanceof (window as any).jQuery) ||\n\t\tel.constructor.prototype.jquery && el.toArray;\n}\nexport function isWindow(el: any): el is WindowMockType {\n\treturn el === window;\n}\nexport function isDocument(el: Node): el is Document {\n\treturn el.nodeType === 9;\n}\n\nexport function fill<T>(arr: T[], value: T) {\n\tconst length = arr.length;\n\n\tfor (let i = length - 1; i >= 0; --i) {\n\t\tarr[i] = value;\n\t}\n\n\treturn arr;\n}\n\nexport function isUndefined(target: any): target is undefined {\n\treturn typeof target === \""undefined\"";\n}\n"",""import { MULTI, GROUPKEY_ATT, IGNORE_CLASSNAME, DUMMY_POSITION } from \""./consts\"";\nimport { $, toArray, isUndefined, assign } from \""./utils\"";\nimport { CursorType, IJQuery, IInfiniteGridGroup, IInfiniteGridItem, IItemManagerStatus } from \""./types\"";\n\nexport default class ItemManager {\n\tpublic static from(\n\t\telements: HTMLElement[] | string | string[] | IJQuery, selector: string,\n\t\t{ groupKey }: { groupKey: string | number }) {\n\t\tconst filted = ItemManager.selectItems($(elements, MULTI), selector);\n\n\t\t// Item Structure\n\t\treturn toArray(filted).map(el => ({\n\t\t\tel,\n\t\t\tgroupKey,\n\t\t\tcontent: el.outerHTML,\n\t\t\trect: {\n\t\t\t\ttop: DUMMY_POSITION,\n\t\t\t\tleft: DUMMY_POSITION,\n\t\t\t},\n\t\t}));\n\t}\n\tpublic static selectItems(elements: HTMLElement[], selector?: string) {\n\t\treturn elements.filter(v => {\n\t\t\tconst classNames = v.className.split(\"" \"");\n\n\t\t\tif (classNames.some(c => c === IGNORE_CLASSNAME)) {\n\t\t\t\treturn false;\n\t\t\t} else if (!selector || selector === \""*\"") {\n\t\t\t\treturn v;\n\t\t\t} else {\n\t\t\t\treturn classNames.some(c => c === selector);\n\t\t\t}\n\t\t});\n\t}\n\tpublic static pluck<A extends { [key: string]: any }, B extends keyof A>(data: A[], property: B):\n\t\tA[B] extends any[] ? A[B] : Array<A[B]> {\n\t\treturn data.reduce((acc, v) => acc.concat(v[property]), []) as any;\n\t}\n\tpublic _data: IInfiniteGridGroup[];\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\tpublic getStatus(startKey?: string | number, endKey?: string | number): IItemManagerStatus {\n\t\tconst datas = this._data;\n\t\tconst startIndex = Math.max(this.indexOf(startKey), 0);\n\t\tconst endIndex = this.indexOf(endKey) + 1 || datas.length;\n\n\t\treturn {\n\t\t\t_data: datas.slice(startIndex, endIndex).map(data => {\n\t\t\t\tconst items = data.items.map(item => {\n\t\t\t\t\tconst item2 = assign({}, item);\n\n\t\t\t\t\tdelete item2.el;\n\t\t\t\t\treturn item2;\n\t\t\t\t});\n\t\t\t\tconst data2 = assign({}, data);\n\n\t\t\t\tdata2.items = items;\n\t\t\t\treturn data2;\n\t\t\t}),\n\t\t};\n\t}\n\tpublic setStatus(status: IItemManagerStatus) {\n\t\tconst data = status._data;\n\n\t\tthis.set(data);\n\t}\n\tpublic size() {\n\t\treturn this._data.length;\n\t}\n\tpublic fit(base: number, horizontal: boolean) {\n\t\tif (!this._data.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst property = horizontal ? \""left\"" : \""top\"";\n\n\t\tif (base !== 0) {\n\t\t\tthis._data = this._data.map(v => {\n\t\t\t\tv.items = v.items.map(item => {\n\t\t\t\t\titem.rect[property] -= base;\n\t\t\t\t\treturn item;\n\t\t\t\t});\n\t\t\t\tv.outlines.start = v.outlines.start.map(start => start - base);\n\t\t\t\tv.outlines.end = v.outlines.end.map(end => end - base);\n\t\t\t\treturn v;\n\t\t\t});\n\t\t}\n\t}\n\tpublic pluck<T extends keyof IInfiniteGridGroup>(property: T, start?: number, end?: number) {\n\t\tconst data = isUndefined(start) ? this._data :\n\t\t\tthis._data.slice(start, (isUndefined(end) ? start : end) + 1);\n\n\t\treturn ItemManager.pluck(data, property);\n\t}\n\tpublic getOutline(index: number, property: keyof IInfiniteGridGroup[\""outlines\""]) {\n\t\tconst data = this._data[index];\n\n\t\treturn data ? data.outlines[property] : [];\n\t}\n\tpublic getEdgeIndex(cursor: CursorType, start: number, end: number) {\n\t\tconst prop = cursor === \""start\"" ? \""min\"" : \""max\"";\n\t\tlet index = -1;\n\t\tlet targetValue = cursor === \""start\"" ? Infinity : -Infinity;\n\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tconst value = Math[prop](...this.getOutline(i, cursor));\n\n\t\t\tif ((cursor === \""start\"" && targetValue > value) ||\n\t\t\t\t(cursor === \""end\"" && targetValue < value)) {\n\t\t\t\ttargetValue = value;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\tpublic getEdgeValue(cursor: CursorType, start: number, end: number) {\n\t\tconst outlines = this.pluck(\""outlines\"", this.getEdgeIndex(cursor, start, end))\n\t\t\t.reduce<number[]>((acc, v) => acc.concat(v[cursor]), []);\n\n\t\treturn outlines.length ? Math[cursor === \""start\"" ? \""min\"" : \""max\""](...outlines) : 0;\n\t}\n\tpublic clearOutlines(startCursor = -1, endCursor = -1) {\n\t\tconst datas = this.get();\n\n\t\tdatas.forEach((group, cursor) => {\n\t\t\tif (startCursor <= cursor && cursor <= endCursor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgroup.items.forEach(item => {\n\t\t\t\titem.rect.top = DUMMY_POSITION;\n\t\t\t\titem.rect.left = DUMMY_POSITION;\n\t\t\t});\n\t\t\tgroup.outlines.start = [];\n\t\t\tgroup.outlines.end = [];\n\t\t});\n\t}\n\tpublic getMaxEdgeValue() {\n\t\tconst groups = this.get();\n\t\tconst length = groups.length;\n\n\t\tfor (let i = length - 1; i >= 0; --i) {\n\t\t\tconst end = groups[i].outlines.end;\n\n\t\t\tif (end.length) {\n\t\t\t\tconst pos = Math.max(...end);\n\n\t\t\t\treturn pos;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\tpublic append(layouted: IInfiniteGridGroup) {\n\t\tthis._data.push(layouted);\n\t\treturn layouted.items;\n\t}\n\tpublic prepend(layouted: IInfiniteGridGroup) {\n\t\tthis._data.unshift(layouted);\n\t\treturn layouted.items;\n\t}\n\tpublic clear() {\n\t\tthis._data = [];\n\t}\n\tpublic remove(element: HTMLElement, start: number, end: number) {\n\t\tlet items: IInfiniteGridItem[] = [];\n\t\tlet groups: IInfiniteGridGroup[] = [];\n\t\tconst key = element.getAttribute(GROUPKEY_ATT);\n\t\tconst datas = this.get(start, end)\n\t\t\t.filter(v => String(v.groupKey) === key);\n\n\t\tif (!datas.length) {\n\t\t\treturn { items, groups };\n\t\t}\n\t\tconst data = datas[0];\n\n\t\tconst length = data.items.length;\n\t\tlet idx = -1;\n\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tif (data.items[i].el === element) {\n\t\t\t\tidx = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (idx >= 0) {\n\t\t\t// remove item information\n\t\t\titems = data.items.splice(idx, 1);\n\n\t\t\tif (!data.items.length) {\n\t\t\t\tthis._data.splice(this.indexOf(data), 1);\n\t\t\t\tgroups = [data];\n\t\t\t} else {\n\t\t\t\tthis.set(data, key);\n\t\t\t}\n\t\t}\n\t\treturn { items, groups };\n\t}\n\tpublic indexOf(data: IInfiniteGridGroup | string | number) {\n\t\tconst groupKey = typeof data === \""object\"" ? data.groupKey : data;\n\t\tconst datas = this._data;\n\t\tconst length = datas.length;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tif (groupKey === datas[i].groupKey) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tpublic get(start?: number, end?: number) {\n\t\treturn isUndefined(start) ? this._data :\n\t\t\tthis._data.slice(start, (isUndefined(end) ? start : end) + 1);\n\t}\n\tpublic set(data: IInfiniteGridGroup | IInfiniteGridGroup[], key?: string | number) {\n\t\tif (!Array.isArray(data)) {\n\t\t\tif (!isUndefined(key)) {\n\t\t\t\tconst len = this._data.length;\n\t\t\t\tlet idx = -1;\n\n\t\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\t\tif (this._data[i].groupKey === key) {\n\t\t\t\t\t\tidx = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tidx > 0 && (this._data[idx] = data);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._data = data.concat();\n\t\t}\n\t}\n\tpublic getData(index: number) {\n\t\treturn this._data[index];\n\t}\n}\n"",""import {\n\tAPPEND,\n\tPREPEND,\n\tDUMMY_POSITION,\n\tMULTI,\n\tGROUPKEY_ATT,\n\tCONTAINER_CLASSNAME,\n\tTRANSITION_NAME,\n\tTRANSITION,\n\tTRANSITION_END,\n\tTRANSFORM,\n} from \""./consts\"";\nimport { window, document } from \""./browser\"";\nimport {\n\t$,\n\tinnerHeight,\n\tinnerWidth,\n\tgetSize,\n\tgetStyles,\n\taddOnceEvent,\n\tassign,\n} from \""./utils\"";\nimport { RectType, IPosition, ISize, IJQuery, IInfiniteGridItem, WindowMockType, IDOMRendererStatus, IDOMRendererSize } from \""./types\"";\n\nexport function resetSize(item: IInfiniteGridItem) {\n\titem.orgSize = null;\n\titem.size = null;\n}\nexport interface IDOMRendererOptions {\n\tisEqualSize: boolean;\n\tisConstantSize: boolean;\n\thorizontal: boolean;\n\tcontainer: boolean | HTMLElement;\n}\n\nexport interface IDOMRendererOrgStyle {\n\tposition?: CSSStyleDeclaration[\""position\""];\n\toverflowX?: CSSStyleDeclaration[\""overflowX\""];\n\toverflowY?: CSSStyleDeclaration[\""overflowY\""];\n}\n\nfunction createContainer(element: HTMLElement) {\n\tconst container = document.createElement(\""div\"");\n\n\tcontainer.className = CONTAINER_CLASSNAME;\n\tcontainer.style.position = \""relative\"";\n\tcontainer.style.height = \""100%\"";\n\n\tconst children = element.children;\n\tconst length = children.length;\t// for IE8\n\n\tfor (let i = 0; i < length; i++) {\n\t\tcontainer.appendChild(children[0]);\n\t}\n\telement.appendChild(container);\n\treturn container;\n}\nfunction render(properties: RectType[], rect: IInfiniteGridItem[\""rect\""], styles: HTMLElement[\""style\""]) {\n\tproperties.forEach(p => {\n\t\t(p in rect) && (styles[p] = `${rect[p]}px`);\n\t});\n}\nfunction setTransition(styles: HTMLElement[\""style\""], transitionDuration?: number, pos1?: IPosition, pos2?: IPosition) {\n\tstyles[`${TRANSITION}-property`] = transitionDuration ? `${TRANSFORM},width,height` : \""\"";\n\tstyles[`${TRANSITION}-duration`] = transitionDuration ? `${transitionDuration}s` : \""\"";\n\tstyles[`${TRANSITION}-delay`] = transitionDuration ? `0s` : \""\"";\n\tstyles[TRANSFORM] = transitionDuration ? `translate(${pos1.left - pos2.left}px,${pos1.top - pos2.top}px)` : \""\"";\n}\n\nexport default class DOMRenderer {\n\tpublic static renderItem(item: IInfiniteGridItem, rect: IInfiniteGridItem[\""rect\""], transitionDuration?: number) {\n\t\tif (!item.el) {\n\t\t\treturn;\n\t\t}\n\t\tconst { el, prevRect } = item;\n\t\tconst styles = el.style;\n\n\t\t// for debugging\n\t\tel.setAttribute(GROUPKEY_ATT, `${item.groupKey}`);\n\t\tstyles.position = \""absolute\"";\n\t\trender([\""width\"", \""height\""], rect, styles);\n\t\tif (transitionDuration && TRANSITION && prevRect) {\n\t\t\tsetTransition(styles, transitionDuration, rect as IPosition, prevRect as IPosition);\n\t\t\tif ((el as any)[TRANSITION_NAME]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tel[TRANSITION_NAME] = true;\n\t\t\taddOnceEvent(el, TRANSITION_END, () => {\n\t\t\t\tconst itemRect = item.rect;\n\n\t\t\t\tsetTransition(styles);\n\t\t\t\trender([\""left\"", \""top\""], itemRect, styles);\n\t\t\t\titem.prevRect = itemRect;\n\t\t\t\tel[TRANSITION_NAME] = false;\n\t\t\t});\n\t\t} else {\n\t\t\trender([\""left\"", \""top\""], rect, styles);\n\t\t\titem.prevRect = rect;\n\t\t}\n\t}\n\tpublic static renderItems(items: IInfiniteGridItem[], transitionDuration?: number) {\n\t\titems.forEach(item => {\n\t\t\tDOMRenderer.renderItem(item, item.rect, transitionDuration);\n\t\t});\n\t}\n\tpublic static removeItems(items: IInfiniteGridItem[]) {\n\t\titems.forEach(item => {\n\t\t\tif (item.el) {\n\t\t\t\tDOMRenderer.removeElement(item.el);\n\t\t\t\titem.el = null;\n\t\t\t}\n\t\t});\n\t}\n\tpublic static removeElement(element: HTMLElement) {\n\t\tconst parentNode = element && element.parentNode;\n\n\t\tif (!parentNode) {\n\t\t\treturn;\n\t\t}\n\t\tparentNode.removeChild(element);\n\t}\n\tpublic static createElements(items: IInfiniteGridItem[]) {\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst noElementItems = items.filter(item => !item.el);\n\n\t\tif (!noElementItems.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst elements = $(noElementItems.map(({ content }) =>\n\t\t\tcontent.replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, \""\"")).join(\""\""), MULTI);\n\n\t\tnoElementItems.forEach((item, index) => {\n\t\t\titem.el = elements[index];\n\t\t});\n\t}\n\tpublic container: HTMLElement;\n\tpublic view: WindowMockType | HTMLElement;\n\tpublic options: IDOMRendererOptions = {\n\t\tisEqualSize: false,\n\t\tisConstantSize: false,\n\t\thorizontal: false,\n\t\tcontainer: false,\n\t};\n\tpublic _size: IDOMRendererSize = {\n\t\tcontainer: -1,\n\t\tview: -1,\n\t\tviewport: -1,\n\t\titem: null,\n\t};\n\tpublic _orgStyle: IDOMRendererOrgStyle = {};\n\tconstructor(element: string | HTMLElement | IJQuery, options: IDOMRendererOptions) {\n\t\tassign(this.options, options);\n\t\tthis._init(element);\n\t\tthis.resize();\n\t}\n\tpublic getStatus() {\n\t\treturn {\n\t\t\tcssText: this.container.style.cssText,\n\t\t\t_size: assign({}, this._size),\n\t\t};\n\t}\n\tpublic setStatus(status: IDOMRendererStatus) {\n\t\tthis.container.style.cssText = status.cssText;\n\t\tassign(this._size, status._size);\n\t}\n\tpublic updateSize(items: IInfiniteGridItem[]) {\n\t\tconst { isEqualSize, isConstantSize } = this.options;\n\t\tconst size = this._size;\n\n\t\treturn items.map(item => {\n\t\t\tif (!item.el) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t\tif (isEqualSize && !size.item) {\n\t\t\t\tsize.item = getSize(item.el);\n\t\t\t}\n\t\t\titem.size = (isEqualSize && assign({}, size.item)) ||\n\t\t\t\t(isConstantSize && item.orgSize && assign({}, item.orgSize)) ||\n\t\t\t\tgetSize(item.el);\n\t\t\tif (!item.orgSize) {\n\t\t\t\titem.orgSize = assign({}, item.size);\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t}\n\tpublic append(items: IInfiniteGridItem[]) {\n\t\tthis._insert(items, APPEND, {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t});\n\t}\n\tpublic prepend(items: IInfiniteGridItem[]) {\n\t\tthis._insert(items, PREPEND, {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t});\n\t}\n\tpublic createAndInsert(items: IInfiniteGridItem[], isAppend?: boolean) {\n\t\tDOMRenderer.createElements(items);\n\n\t\tDOMRenderer.renderItems(items);\n\t\tthis._insert(items, isAppend);\n\t}\n\tpublic getViewSize() {\n\t\treturn this._size.view;\n\t}\n\tpublic getViewportSize() {\n\t\treturn this._size.viewport;\n\t}\n\tpublic getContainerSize() {\n\t\treturn this._size.container;\n\t}\n\tpublic setContainerSize(size: number) {\n\t\tthis._size.container = size;\n\t\tthis.container.style[this.options.horizontal ? \""width\"" : \""height\""] = `${size}px`;\n\t}\n\tpublic resize() {\n\t\tconst horizontal = this.options.horizontal;\n\t\tconst view = this.view;\n\t\tconst size = this._calcSize();\n\n\t\tif (size === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst isResize = size !== this._size.viewport;\n\n\t\tif (isResize) {\n\t\t\tthis._size = {\n\t\t\t\tviewport: size,\n\t\t\t\titem: null,\n\t\t\t};\n\t\t}\n\t\tthis._size.view = horizontal ? innerWidth(view) : innerHeight(view);\n\t\treturn isResize;\n\t}\n\tpublic isNeededResize() {\n\t\treturn this._calcSize() !== this._size.viewport;\n\t}\n\tpublic clear() {\n\t\tthis.container.innerHTML = \""\"";\n\t\tthis.container.style[this.options.horizontal ? \""width\"" : \""height\""] = \""\"";\n\n\t\tthis._size = {\n\t\t\titem: null,\n\t\t\tviewport: -1,\n\t\t\tcontainer: -1,\n\t\t\tview: -1,\n\t\t};\n\t}\n\tpublic destroy() {\n\t\tthis.clear();\n\t\tconst container = this.options.container;\n\n\t\tfor (const p in this._orgStyle) {\n\t\t\t(this[container ? \""view\"" : \""container\""] as HTMLElement).style[p as keyof IDOMRendererOrgStyle] =\n\t\t\t\tthis._orgStyle[p as keyof IDOMRendererOrgStyle];\n\t\t}\n\t\tcontainer && this.container.parentNode.removeChild(this.container);\n\t}\n\tprivate _init(el: HTMLElement | IJQuery | string) {\n\t\tconst element = $(el);\n\t\tconst style = getStyles(element);\n\t\tconst { container, horizontal } = this.options;\n\n\t\tif (style.position === \""static\"") {\n\t\t\tthis._orgStyle.position = element.style.position;\n\t\t\telement.style.position = \""relative\"";\n\t\t}\n\t\tif (container) {\n\t\t\tconst target = horizontal ? [\""X\"", \""Y\""] : [\""Y\"", \""X\""];\n\n\t\t\tthis._orgStyle.overflowX = element.style.overflowX;\n\t\t\tthis._orgStyle.overflowY = element.style.overflowY;\n\t\t\telement.style[`overflow${target[0]}` as \""overflowX\"" | \""overflowY\""] = \""scroll\"";\n\t\t\telement.style[`overflow${target[1]}` as \""overflowX\"" | \""overflowY\""] = \""hidden\"";\n\t\t\tthis.view = element;\n\t\t\tthis.container = container === true ? createContainer(this.view as HTMLElement) : container;\n\t\t} else {\n\t\t\tthis.view = window;\n\t\t\tthis.container = element;\n\t\t}\n\t}\n\tprivate _insert(items: IInfiniteGridItem[], isAppend?: boolean, styles?: IInfiniteGridItem[\""rect\""]) {\n\t\tconst container = this.container;\n\t\tconst df = document.createDocumentFragment();\n\n\t\titems.forEach(item => {\n\t\t\tstyles && DOMRenderer.renderItem(item, styles);\n\t\t\tisAppend ? df.appendChild(item.el) : df.insertBefore(item.el, df.firstChild);\n\t\t});\n\t\tisAppend ?\n\t\t\tcontainer.appendChild(df) :\n\t\t\tcontainer.insertBefore(df, container.firstChild);\n\t}\n\tprivate _calcSize() {\n\t\treturn this.options.horizontal ?\n\t\t\tinnerHeight(this.container) : innerWidth(this.container);\n\t}\n}\n"",""import {\n\tIS_IOS,\n} from \""./consts\"";\nimport {\n\twindow,\n} from \""./browser\"";\nimport {\n\taddEvent,\n\tremoveEvent,\n\tscroll,\n\tscrollTo,\n\tscrollBy,\n\tassign,\n} from \""./utils\"";\nimport { WindowMockType, IWatchStatus } from \""./types\"";\n\nexport interface IWatcherOptions {\n\tcontainer: HTMLElement;\n\tisOverflowScroll: boolean;\n\thorizontal: boolean;\n\tresize: () => void;\n\tcheck: (e?: {\n\t\tisForward: boolean,\n\t\tscrollPos: number,\n\t\torgScrollPos: number,\n\t\thorizontal: boolean,\n\t}) => void;\n}\n\nexport default class Watcher {\n\tpublic options: IWatcherOptions;\n\tprivate _timer: {\n\t\tresize: any;\n\t};\n\tprivate _containerOffset: number;\n\tprivate _view: WindowMockType | HTMLElement;\n\tprivate _isScrollIssue: boolean;\n\tprivate _prevPos: number;\n\tconstructor(view: WindowMockType | HTMLElement, options: Partial<IWatcherOptions> = {}) {\n\t\tassign(this.options = {\n\t\t\tcontainer: view as HTMLElement,\n\t\t\tresize: () => void 0,\n\t\t\tcheck: () => void 0,\n\t\t\tisOverflowScroll: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\t\tthis._timer = {\n\t\t\tresize: null,\n\t\t};\n\t\tthis.reset();\n\t\tthis._containerOffset = 0;\n\t\tthis._view = view;\n\t\tthis._isScrollIssue = IS_IOS;\n\t\tthis._onCheck = this._onCheck.bind(this);\n\t\tthis._onResize = this._onResize.bind(this);\n\t\tthis.attachEvent();\n\t\tthis.resize();\n\t\tthis.setScrollPos();\n\t}\n\tpublic getStatus(): IWatchStatus {\n\t\treturn {\n\t\t\t_prevPos: this._prevPos,\n\t\t\tscrollPos: this.getOrgScrollPos(),\n\t\t};\n\t}\n\tpublic setStatus(status: IWatchStatus, applyScrollPos = true) {\n\t\tthis._prevPos = status._prevPos;\n\t\tapplyScrollPos && this.scrollTo(status.scrollPos);\n\t}\n\tpublic scrollBy(pos: number) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollBy(this._view, arrPos[0], arrPos[1]);\n\t\tthis.setScrollPos();\n\t}\n\tpublic scrollTo(pos: number) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollTo(this._view, arrPos[0], arrPos[1]);\n\t}\n\tpublic getScrollPos() {\n\t\treturn this._prevPos;\n\t}\n\tpublic setScrollPos(pos = this.getOrgScrollPos()) {\n\t\tlet rawPos = pos;\n\n\t\tif (typeof pos === \""undefined\"") {\n\t\t\trawPos = this.getOrgScrollPos();\n\t\t}\n\t\tthis._prevPos = rawPos - this.getContainerOffset();\n\t}\n\tpublic attachEvent() {\n\t\taddEvent(this._view, \""scroll\"", this._onCheck);\n\t\taddEvent(window, \""resize\"", this._onResize);\n\t}\n\tpublic getOrgScrollPos() {\n\t\treturn scroll(this._view, this.options.horizontal);\n\t}\n\tpublic reset() {\n\t\tthis._prevPos = null;\n\t}\n\tpublic getContainerOffset() {\n\t\treturn this._containerOffset;\n\t}\n\tpublic resize() {\n\t\tthis._containerOffset = this.options.isOverflowScroll ? 0 : this._getOffset();\n\t}\n\tpublic detachEvent() {\n\t\tremoveEvent(this._view, \""scroll\"", this._onCheck);\n\t\tremoveEvent(window, \""resize\"", this._onResize);\n\t}\n\tpublic destroy() {\n\t\tthis.detachEvent();\n\t\tthis.reset();\n\t}\n\tprivate _onCheck() {\n\t\tconst prevPos = this.getScrollPos();\n\t\tconst orgScrollPos = this.getOrgScrollPos();\n\n\t\tthis.setScrollPos(orgScrollPos);\n\t\tconst scrollPos = this.getScrollPos();\n\n\t\tif (prevPos === null || (this._isScrollIssue && orgScrollPos === 0) || prevPos === scrollPos) {\n\t\t\torgScrollPos && (this._isScrollIssue = false);\n\t\t\treturn;\n\t\t}\n\t\tthis._isScrollIssue = false;\n\t\tthis.options.check({\n\t\t\tisForward: prevPos < scrollPos,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t\thorizontal: this.options.horizontal,\n\t\t});\n\t}\n\tprivate _getOffset() {\n\t\tconst { container, horizontal } = this.options;\n\t\tconst rect = container.getBoundingClientRect();\n\n\t\treturn rect[horizontal ? \""left\"" : \""top\""] + this.getOrgScrollPos();\n\t}\n\tprivate _onResize() {\n\t\tif (this._timer.resize) {\n\t\t\tclearTimeout(this._timer.resize);\n\t\t}\n\t\tthis._timer.resize = setTimeout(() => {\n\t\t\tthis.resize();\n\t\t\tthis.options.resize();\n\t\t\tthis._timer.resize = null;\n\t\t\tthis.reset();\n\t\t}, 100);\n\t}\n\n}\n"",""import ItemManager from \""./ItemManager\"";\nimport { assign } from \""./utils\"";\nimport { CursorType, IInfiniteGridItem, IInfiniteGridGroup, IInfiniteStatus } from \""./types\"";\n\nfunction isVisible(group: IInfiniteGridGroup, threshold: number, scrollPos: number, endScrollPos: number) {\n\tconst { items, outlines } = group;\n\tconst start = outlines.start;\n\tconst end = outlines.end;\n\n\tif (start.length === 0 || end.length === 0 || !items.length || !items[0].el) {\n\t\treturn 2;\n\t}\n\tconst min = Math.min(...start);\n\tconst max = Math.max(...end);\n\n\tif ((endScrollPos + threshold < min)) {\n\t\treturn +1;\n\t} else if ((scrollPos - threshold > max)) {\n\t\treturn -1;\n\t}\n\treturn 0;\n}\n\nexport interface IInfiniteOptions {\n\tuseRecycle?: boolean;\n\tthreshold?: number;\n\tappend?: (e?: { cache: IInfiniteGridGroup[] }) => void;\n\tprepend?: (e?: { cache: IInfiniteGridGroup[] }) => void;\n\trecycle?: (e?: { start: number, end: number }) => void;\n}\nclass Infinite {\n\tpublic options: Required<IInfiniteOptions>;\n\tprivate _items: ItemManager;\n\tprivate _status: IInfiniteStatus;\n\tconstructor(itemManger: ItemManager, options: IInfiniteOptions) {\n\t\tthis.options = assign({\n\t\t\tuseRecycle: true,\n\t\t\tthreshold: 100,\n\t\t\tappend: () => void 0,\n\t\t\tprepend: () => void 0,\n\t\t\trecycle: () => void 0,\n\t\t}, options);\n\n\t\tthis._items = itemManger;\n\t\tthis.clear();\n\t}\n\tpublic setSize(size: number) {\n\t\tthis._status.size = size;\n\t}\n\tpublic recycle(scrollPos: number, isForward?: boolean) {\n\t\tif (!this.options.useRecycle) {\n\t\t\treturn;\n\t\t}\n\t\tconst { startCursor, endCursor, size } = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn;\n\t\t}\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst { threshold, recycle } = this.options;\n\t\tconst visibles = this._items.get(startCursor, endCursor)\n\t\t\t.map(group => isVisible(group, threshold, scrollPos, endScrollPos));\n\t\tconst length = visibles.length;\n\t\tlet start = isForward ? 0 : visibles.lastIndexOf(0);\n\t\tlet end = isForward ? visibles.indexOf(0) - 1 : visibles.length - 1;\n\n\t\tif (!isForward && start !== -1) {\n\t\t\tstart += 1;\n\t\t}\n\t\tif (start < 0 || end < 0 || start > end || end - start + 1 >= length) {\n\t\t\treturn;\n\t\t}\n\t\tstart = startCursor + start;\n\t\tend = startCursor + end;\n\n\t\trecycle({ start, end });\n\t\tif (isForward) {\n\t\t\tthis.setCursor(\""start\"", end + 1);\n\t\t} else {\n\t\t\tthis.setCursor(\""end\"", start - 1);\n\t\t}\n\t}\n\tpublic scroll(scrollPos: number) {\n\t\tconst startCursor = this.getCursor(\""start\"");\n\t\tconst endCursor = this.getCursor(\""end\"");\n\t\tconst items = this._items;\n\n\t\tif (typeof scrollPos !== \""number\"" || startCursor === -1 ||\n\t\t\tendCursor === -1 || !items.size()) {\n\t\t\treturn;\n\t\t}\n\t\tconst size = this._status.size;\n\t\tconst { threshold, append, prepend } = this.options;\n\t\tconst datas = items.get();\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst startEdgePos = Math.max(...datas[startCursor].outlines.start);\n\t\tconst endEdgePos = Math.min(...datas[endCursor].outlines.end);\n\t\tconst visibles = datas.map((group, i) => {\n\t\t\tconst { start, end } = group.outlines;\n\n\t\t\tif (!start.length || !end.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst startPos = Math.min(...start);\n\t\t\tconst endPos = Math.max(...end);\n\n\t\t\tif (startPos - threshold <= endScrollPos && scrollPos <= endPos + threshold) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tconst startIndex = visibles.indexOf(true);\n\t\tconst endIndex = visibles.lastIndexOf(true);\n\n\t\tif (~startIndex && startIndex < startCursor) {\n\t\t\tprepend({ cache: datas.slice(startIndex, Math.min(startCursor, endIndex + 1)) });\n\t\t} else if (endCursor < endIndex) {\n\t\t\tappend({ cache: datas.slice(Math.max(startIndex, endCursor + 1), endIndex + 1) });\n\t\t} else {\n\t\t\t// if you have data(no cachedAppendData, has cachedPrependData) to pepend, request it.\n\t\t\tconst cachedAppendData = datas.slice(endCursor + 1, endCursor + 2);\n\t\t\tconst cachedPrependData = datas.slice(startCursor - 1, startCursor);\n\t\t\tconst isPrepend = scrollPos <= startEdgePos + threshold;\n\n\t\t\tif (\n\t\t\t\tendScrollPos >= endEdgePos - threshold\n\t\t\t\t&& (!isPrepend || cachedAppendData.length || !cachedPrependData.length)\n\t\t\t) {\n\t\t\t\tappend({ cache: cachedAppendData });\n\t\t\t} else if (isPrepend) {\n\t\t\t\tprepend({ cache: cachedPrependData });\n\t\t\t}\n\t\t}\n\t}\n\tpublic setCursor(cursor: CursorType, index: number) {\n\t\tconst status = this._status;\n\t\tconst items = this._items;\n\t\tconst size = items.size();\n\n\t\tif (!this.options.useRecycle) {\n\t\t\tstatus.startCursor = 0;\n\t\t\tif (items.getOutline(size - 1, \""end\"").length) {\n\t\t\t\tstatus.endCursor = size - 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cursor !== \""end\"") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (cursor === \""start\"") {\n\t\t\tstatus.startCursor = index;\n\t\t} else {\n\t\t\tstatus.endCursor = Math.min(size - 1, index);\n\t\t}\n\t\tstatus.startCursor = Math.max(0, status.startCursor);\n\t}\n\tpublic setStatus(status: IInfiniteStatus) {\n\t\tthis._status = assign(this._status, status);\n\t}\n\tpublic getStatus(startKey: string | number, endKey: string | number): IInfiniteStatus {\n\t\tconst { startCursor, endCursor, size } = this._status;\n\t\tconst startIndex = Math.max(this._items.indexOf(startKey), 0);\n\t\tconst endIndex = (this._items.indexOf(endKey) + 1 || this._items.size()) - 1;\n\t\tconst start = Math.max(startCursor - startIndex, ~startCursor ? 0 : -1);\n\t\tconst end = Math.max(Math.min(endCursor - startIndex, endIndex - startIndex), start);\n\n\t\treturn {\n\t\t\tstartCursor: start,\n\t\t\tendCursor: end,\n\t\t\tsize,\n\t\t};\n\t}\n\tpublic getEdgeOutline(cursor: CursorType) {\n\t\tconst { startCursor, endCursor } = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._items.getOutline(cursor === \""start\"" ? startCursor : endCursor, cursor);\n\t}\n\tpublic getEdgeValue(cursor: CursorType) {\n\t\tconst outlines = this.getEdgeOutline(cursor);\n\n\t\treturn outlines.length ? Math[cursor === \""start\"" ? \""min\"" : \""max\""](...outlines) : 0;\n\t}\n\tpublic getVisibleItems() {\n\t\treturn this._items.pluck(\""items\"", this._status.startCursor, this._status.endCursor);\n\t}\n\tpublic getCursor(cursor: CursorType) {\n\t\treturn this._status[cursor === \""start\"" ? \""startCursor\"" : \""endCursor\""];\n\t}\n\tpublic getVisibleData() {\n\t\treturn this._items.get(this._status.startCursor, this._status.endCursor);\n\t}\n\tpublic remove(element: HTMLElement): {\n\t\titems: IInfiniteGridItem[],\n\t\tgroups: IInfiniteGridGroup[],\n\t} {\n\t\tconst { startCursor, endCursor } = this._status;\n\t\tconst result =\n\t\t\tthis._items.remove(element, startCursor, endCursor);\n\n\t\tif (result.groups.length) {\n\t\t\tthis.setCursor(\""end\"", endCursor - 1);\n\t\t}\n\t\tif (!this._items.size()) {\n\t\t\tthis._status.startCursor = -1;\n\t\t\tthis._status.endCursor = -1;\n\t\t}\n\t\treturn result;\n\t}\n\tpublic clear() {\n\t\tthis._status = {\n\t\t\tstartCursor: -1,\n\t\t\tendCursor: -1,\n\t\t\tsize: -1,\n\t\t};\n\t}\n}\n\nexport default Infinite;\n"",""import { window } from \""./browser\"";\nimport { addEvent, removeEvent, innerWidth, innerHeight } from \""./utils\"";\n\nconst elements: HTMLElement[] = [];\n\nfunction onResize() {\n\tAutoSizer.resizeAll();\n}\nexport interface IAutoSizierElemenet extends HTMLElement {\n\t__PREFIX__?: string;\n}\nexport default class AutoSizer {\n\tpublic static add(element: IAutoSizierElemenet, prefix = \""data-\"") {\n\t\tif (!elements.length) {\n\t\t\taddEvent(window, \""resize\"", onResize);\n\t\t}\n\t\telement.__PREFIX__ = prefix;\n\t\telements.push(element);\n\t\tAutoSizer.resize(element);\n\t}\n\tpublic static remove(element: IAutoSizierElemenet, isFixed = false) {\n\t\tconst fixed = element.getAttribute(`${element.__PREFIX__}fixed`) || \""width\"";\n\n\t\tif (!isFixed) {\n\t\t\telement.style[fixed === \""width\"" ? \""height\"" : \""width\""] = \""\"";\n\t\t}\n\t\tconst index = elements.indexOf(element);\n\n\t\tif (index < 0) {\n\t\t\treturn;\n\t\t}\n\t\telements.splice(index, 1);\n\t\tif (!elements.length) {\n\t\t\tremoveEvent(window, \""reisze\"", onResize);\n\t\t}\n\t}\n\tpublic static resize(element: IAutoSizierElemenet, prefix = \""data-\"") {\n\t\tconst elementPrefix = typeof element.__PREFIX__ === \""string\"" ? element.__PREFIX__ : prefix;\n\t\tconst dataWidth = parseInt(element.getAttribute(`${elementPrefix}width`), 10) || 0;\n\t\tconst dataHeight = parseInt(element.getAttribute(`${elementPrefix}height`), 10) || 0;\n\t\tconst fixed = element.getAttribute(`${elementPrefix}fixed`);\n\n\t\tif (fixed === \""height\"") {\n\t\t\tconst size = innerHeight(element) || dataHeight;\n\n\t\t\telement.style.width = `${dataWidth / dataHeight * size}px`;\n\t\t} else {\n\t\t\tconst size = innerWidth(element) || dataWidth;\n\n\t\t\telement.style.height = `${dataHeight / dataWidth * size}px`;\n\t\t}\n\t}\n\tpublic static resizeAll() {\n\t\telements.forEach(element => AutoSizer.resize(element));\n\t}\n}\n"",""import { IS_IE } from \""./consts\"";\nimport { addEvent, removeEvent, toArray } from \""./utils\"";\nimport AutoSizer from \""./AutoSizer\"";\n\nexport const CHECK_ALL: 1 = 1;\nexport const CHECK_ONLY_ERROR: 2 = 2;\n\nexport interface IImageLoadedOptions {\n\tprefix?: string;\n\tlength?: number;\n\ttype?: 1 | 2;\n\tcomplete?: () => void;\n\tend?: () => void;\n\terror?: (e: { target: LoadingImageElement, itemIndex: number }) => void;\n}\nexport interface LoadingImageElement extends HTMLImageElement {\n\t__ITEM_INDEX__?: number;\n}\n\nfunction isDataAttribute(target: HTMLElement, prefix: string) {\n\treturn !!target.getAttribute(`${prefix}width`);\n}\n\nclass ImageLoaded {\n\tpublic static CHECK_ALL = 1;\n\tpublic static CHECK_ONLY_ERROR = 2;\n\tpublic static waitImageLoaded(\n\t\tchecklist: LoadingImageElement[][],\n\t\t{ prefix = \""\"", length, type, complete, error, end }: IImageLoadedOptions,\n\t) {\n\t\tlet checkCount = 0;\n\t\tlet endCount = length;\n\n\t\tif (type !== CHECK_ONLY_ERROR) {\n\t\t\tcheckCount = endCount;\n\t\t}\n\t\tconst checkEnd = () => {\n\t\t\tif (--endCount !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tend && end();\n\t\t};\n\t\tconst checkImage = () => {\n\t\t\tcheckCount--;\n\t\t\tif (checkCount !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcomplete && complete();\n\t\t};\n\t\tconst onError = (target: LoadingImageElement, itemIndex = target.__ITEM_INDEX__) => {\n\t\t\terror && error({\n\t\t\t\ttarget,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t};\n\t\tconst onCheck = (e: Event) => {\n\t\t\tconst target = (e.target || e.srcElement) as LoadingImageElement;\n\n\t\t\tremoveEvent(target, \""error\"", onCheck);\n\t\t\tremoveEvent(target, \""load\"", onCheck);\n\n\t\t\tif (type === CHECK_ALL && isDataAttribute(target, prefix)) {\n\t\t\t\tAutoSizer.remove(target, e.type === \""error\"");\n\t\t\t} else {\n\t\t\t\tcheckImage();\n\t\t\t}\n\t\t\tif (e.type === \""error\"") {\n\t\t\t\tonError(target);\n\t\t\t}\n\t\t\tdelete target.__ITEM_INDEX__;\n\t\t\tcheckEnd();\n\t\t};\n\n\t\tchecklist.forEach((images, i) => {\n\t\t\timages.forEach(v => {\n\t\t\t\t// workaround for IE\n\t\t\t\tif (v.complete && (!IS_IE || (IS_IE && v.naturalWidth))) {\n\t\t\t\t\tif (!v.naturalWidth) {\n\t\t\t\t\t\tonError(v, i);\n\t\t\t\t\t}\n\t\t\t\t\tcheckImage();\n\t\t\t\t\tcheckEnd();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tv.__ITEM_INDEX__ = i;\n\t\t\t\tif (type === CHECK_ALL && isDataAttribute(v, prefix)) {\n\t\t\t\t\tAutoSizer.add(v, prefix);\n\t\t\t\t\tcheckImage();\n\t\t\t\t}\n\t\t\t\taddEvent(v, \""load\"", onCheck);\n\t\t\t\taddEvent(v, \""error\"", onCheck);\n\n\t\t\t\tIS_IE && v.setAttribute(\""src\"", v.getAttribute(\""src\""));\n\t\t\t});\n\t\t});\n\t}\n\tpublic static checkImageLoaded(el: HTMLElement) {\n\t\tif (el.tagName === \""IMG\"") {\n\t\t\treturn (el as HTMLImageElement).complete ? [] : [(el as HTMLImageElement)];\n\t\t} else {\n\t\t\treturn toArray(el.querySelectorAll(\""img\""));\n\t\t}\n\t}\n\tpublic static check(\n\t\telements: HTMLElement[],\n\t\t{ prefix, type = CHECK_ALL, complete, error, end }: IImageLoadedOptions,\n\t) {\n\t\tconst images = elements.map(element => this.checkImageLoaded(element));\n\t\tconst length = images.reduce((sum, element) => sum + element.length, 0);\n\n\t\tif (type === CHECK_ONLY_ERROR || length === 0) {\n\t\t\t// convert to async\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomplete && complete();\n\t\t\t\tif (length === 0) {\n\t\t\t\t\tend && end();\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t}\n\t\tif (length > 0) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.waitImageLoaded(images, { prefix, length, type, complete, error, end });\n\t\t\t}, 0);\n\t\t}\n\t}\n}\n\nexport default ImageLoaded;\n"",""import AutoSizer from \""./AutoSizer\"";\nimport ImageLoaded, { CHECK_ALL, CHECK_ONLY_ERROR } from \""./ImageLoaded\"";\nimport ItemManager from \""./ItemManager\"";\nimport { matchHTML, $, assign } from \""./utils\"";\nimport { DUMMY_POSITION } from \""./consts\"";\nimport DOMRenderer from \""./DOMRenderer\"";\nimport { ILayout, ILayoutResult, IInfiniteGridItem, IInfiniteGridGroup, IErrorCallbackOptions } from \""./types\"";\n\nfunction hasTarget<T>(target: T[], value: T) {\n\treturn ~target.indexOf(value);\n}\n\nexport interface ILayoutManagerOptions {\n\tattributePrefix?: string;\n\tisEqualSize?: boolean;\n\tisConstantSize?: boolean;\n\thorizontal?: boolean;\n}\n\nexport interface ICompleteCallbackOptions {\n\tgroups?: ILayoutResult[];\n\titems?: IInfiniteGridItem[];\n\tisAppend?: boolean;\n}\nexport interface IEndCallbackOptions {\n\tremove: HTMLElement[];\n\tlayout?: boolean;\n}\nexport interface ILayoutManagerCallbacks {\n\tcomplete: (e: ICompleteCallbackOptions) => void;\n\terror: (e: IErrorCallbackOptions) => void;\n\tend: (e: IEndCallbackOptions) => void;\n}\n\nexport default class LayoutMananger {\n\tpublic options: Required<ILayoutManagerOptions>;\n\tpublic _items: ItemManager;\n\tpublic _renderer: DOMRenderer;\n\tpublic _layout: ILayout;\n\tconstructor(items: ItemManager, renderer: DOMRenderer, options: ILayoutManagerOptions = {}) {\n\t\tassign(this.options = {\n\t\t\tattributePrefix: \""data-\"",\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\n\t\tthis._items = items;\n\t\tthis._renderer = renderer;\n\t\tthis._layout = null;\n\t}\n\tpublic setLayout(layout: ILayout) {\n\t\tthis._layout = layout;\n\t}\n\tpublic setSize(size: number) {\n\t\tthis._layout.setSize(size);\n\t}\n\tpublic append(\n\t\t{\n\t\t\tgroups,\n\t\t\titems,\n\t\t\tisUpdate,\n\t\t}: {\n\t\t\tgroups: IInfiniteGridGroup[],\n\t\t\titems: IInfiniteGridItem[],\n\t\t\tisUpdate?: boolean,\n\t\t},\n\t\tcallbacks: Partial<ILayoutManagerCallbacks>,\n\t) {\n\t\tthis._insert({ groups, items, isUpdate, isAppend: true }, callbacks);\n\t}\n\tpublic prepend(\n\t\t{\n\t\t\tgroups,\n\t\t\titems,\n\t\t\tisUpdate,\n\t\t}: {\n\t\t\tgroups: IInfiniteGridGroup[],\n\t\t\titems: IInfiniteGridItem[],\n\t\t\tisUpdate?: boolean,\n\t\t},\n\t\tcallbacks: Partial<ILayoutManagerCallbacks>,\n\t) {\n\t\tthis._insert({ groups, items, isUpdate, isAppend: false }, callbacks);\n\t}\n\tpublic layout(isRelayout: boolean, groups: IInfiniteGridGroup[], items: IInfiniteGridItem[]) {\n\t\tconst renderer = this._renderer;\n\t\tconst { isEqualSize, isConstantSize } = renderer.options;\n\t\tconst layoutGroups = groups.filter(group => {\n\t\t\tconst item = group.items[0];\n\n\t\t\treturn item.orgSize && item.rect.top > DUMMY_POSITION / 10;\n\t\t});\n\n\t\tif (!layoutGroups.length) {\n\t\t\treturn [];\n\t\t}\n\t\tlet outline = layoutGroups[0].outlines.start;\n\n\t\tif (isRelayout) {\n\t\t\toutline = [outline.length ? Math.min(...outline) : 0];\n\t\t\tif (!isConstantSize && items.length) {\n\t\t\t\trenderer.updateSize(items);\n\n\t\t\t\t// update invisible items' size\n\t\t\t\tif (isEqualSize && items[0].size) {\n\t\t\t\t\tItemManager.pluck(layoutGroups, \""items\"").forEach(item => {\n\t\t\t\t\t\titem.size = assign({}, items[0].size);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._layout.layout(layoutGroups, outline);\n\t\treturn layoutGroups;\n\t}\n\tpublic destroy() {\n\t\tthis._items = null;\n\t\tthis._renderer = null;\n\t}\n\tprivate _complete(\n\t\tgroups: IInfiniteGridGroup[],\n\t\titems: IInfiniteGridItem[],\n\t\tisAppend: boolean,\n\t\tisUpdate: boolean,\n\t\tcallback: ILayoutManagerCallbacks[\""complete\""],\n\t) {\n\t\tconst itemManager = this._items;\n\t\tconst cursor = isAppend ? \""end\"" : \""start\"";\n\t\tconst groupIndex = itemManager.indexOf(groups[0]);\n\t\tconst prevGroup = itemManager.getData(groupIndex + (isAppend ? -1 : 1));\n\t\tlet outline = prevGroup ? prevGroup.outlines[cursor] : [0];\n\n\t\tthis._renderer.updateSize(items);\n\n\t\tconst groupInfos = groups.map(group => {\n\t\t\tconst groupOutline = group.outlines[isAppend ? \""start\"" : \""end\""];\n\t\t\tconst isRelayout = isUpdate || !outline.length || (outline.length === groupOutline.length ?\n\t\t\t\t!outline.every((v, index) => v === groupOutline[index]) : true);\n\n\t\t\tif (!isRelayout) {\n\t\t\t\toutline = group.outlines[isAppend ? \""end\"" : \""start\""];\n\t\t\t\tDOMRenderer.renderItems(group.items);\n\t\t\t\treturn group;\n\t\t\t}\n\t\t\tconst groupItems = group.items;\n\t\t\tconst groupInfo = this._layout[isAppend ? \""append\"" : \""prepend\""](groupItems, outline, true);\n\n\t\t\tassign(group, groupInfo);\n\t\t\tDOMRenderer.renderItems(groupInfo.items);\n\t\t\toutline = groupInfo.outlines[isAppend ? \""end\"" : \""start\""];\n\n\t\t\treturn groupInfo;\n\t\t});\n\n\t\tcallback({\n\t\t\tgroups: groupInfos,\n\t\t\titems,\n\t\t\tisAppend,\n\t\t});\n\t}\n\tprivate _error(\n\t\tremoveTarget: HTMLElement[],\n\t\treplaceTarget: number[],\n\t\ttarget: HTMLImageElement,\n\t\titems: IInfiniteGridItem[],\n\t\terrorIndex: number,\n\t\tcallback: ILayoutManagerCallbacks[\""error\""],\n\t) {\n\t\tconst item = items[errorIndex];\n\t\tconst element = item.el;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\t// remove item\n\t\tconst removeItem = () => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tremoveTarget.push(element);\n\t\t\tconst index = replaceTarget.indexOf(errorIndex);\n\n\t\t\tindex !== -1 && replaceTarget.splice(index, 1);\n\t\t};\n\t\t// remove image\n\t\tconst remove = () => {\n\t\t\tif (target === element) {\n\t\t\t\tremoveItem();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttarget.parentNode.removeChild(target);\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace image\n\t\tconst replace = (src: string) => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (src) {\n\t\t\t\tif (matchHTML(src) || typeof src === \""object\"") {\n\t\t\t\t\tconst parentNode = target.parentNode;\n\n\t\t\t\t\tparentNode.insertBefore($(src), target);\n\t\t\t\t\tparentNode.removeChild(target);\n\t\t\t\t\titem.content = element.outerHTML;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.src = src;\n\t\t\t\t\tif (target.getAttribute(`${prefix}width`)) {\n\t\t\t\t\t\tAutoSizer.remove(target);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}width`);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}height`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace item\n\t\tconst replaceItem = (content: string) => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telement.innerHTML = content;\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\n\t\tcallback({\n\t\t\ttarget,\n\t\t\telement,\n\t\t\titems,\n\t\t\titem,\n\t\t\titemIndex: errorIndex,\n\t\t\treplace,\n\t\t\treplaceItem,\n\t\t\tremove,\n\t\t\tremoveItem,\n\t\t});\n\t}\n\tprivate _end(\n\t\tremoveTarget: HTMLElement[],\n\t\treplaceTarget: number[],\n\t\titems: IInfiniteGridItem[],\n\t\tcallback: ILayoutManagerCallbacks[\""end\""],\n\t) {\n\t\tconst { attributePrefix } = this.options;\n\n\t\tconst removeTargetLength = removeTarget.length;\n\t\tconst replaceTargetLength = replaceTarget.length;\n\n\t\tif (!removeTargetLength && !replaceTargetLength) {\n\t\t\tcallback({ remove: [] });\n\t\t\treturn;\n\t\t}\n\t\tconst layoutedItems = replaceTarget.map(itemIndex => items[itemIndex]);\n\n\t\tif (!replaceTargetLength) {\n\t\t\tcallback({ remove: removeTarget, layout: true });\n\t\t\treturn;\n\t\t}\n\t\t// wait layoutComplete beacause of error event.\n\t\tImageLoaded.check(layoutedItems.map(v => v.el), {\n\t\t\tprefix: attributePrefix,\n\t\t\tcomplete: () => {\n\t\t\t\tthis._renderer.updateSize(layoutedItems);\n\t\t\t\tcallback({ remove: removeTarget, layout: true });\n\t\t\t},\n\t\t});\n\t}\n\tprivate _insert(\n\t\t{\n\t\t\tgroups,\n\t\t\titems = ItemManager.pluck(groups, \""items\""),\n\t\t\tisAppend,\n\t\t\tisUpdate,\n\t\t}: {\n\t\t\tgroups: IInfiniteGridGroup[],\n\t\t\titems: IInfiniteGridItem[],\n\t\t\tisAppend: boolean,\n\t\t\tisUpdate: boolean,\n\t\t},\n\t\t{\n\t\t\terror = () => void 0,\n\t\t\tcomplete = () => void 0,\n\t\t\tend = () => void 0,\n\t\t}: Partial<ILayoutManagerCallbacks>,\n\t) {\n\t\tif (!groups.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst checkGroups = isAppend ? groups : groups.reverse();\n\t\tconst replaceTarget: number[] = [];\n\t\tconst removeTarget: HTMLElement[] = [];\n\t\tconst elements = items.map(item => item.el);\n\t\tconst type = this.options.isEqualSize && this._renderer._size.item ? CHECK_ONLY_ERROR : CHECK_ALL;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\tImageLoaded.check(elements, {\n\t\t\tprefix,\n\t\t\ttype,\n\t\t\tcomplete: () => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._complete(checkGroups, items, isAppend, isUpdate, complete);\n\t\t\t},\n\t\t\terror: ({ target, itemIndex }) => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._error(removeTarget, replaceTarget, target, items, itemIndex, error);\n\t\t\t},\n\t\t\tend: () => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._end(removeTarget, replaceTarget, items, end);\n\t\t\t},\n\t\t});\n\t}\n}\n"",""/**\n * Copyright (c) 2017 NAVER Corp.\n * egjs projects are licensed under the MIT license\n*/\nimport Component from \""@egjs/component\"";\nimport ItemManager from \""./ItemManager\"";\nimport DOMRenderer, { resetSize } from \""./DOMRenderer\"";\nimport Watcher from \""./Watcher\"";\nimport {\n\tAPPEND,\n\tPREPEND,\n\tCACHE,\n\tNO_CACHE,\n\tTRUSTED,\n\tNO_TRUSTED,\n\tIS_ANDROID2,\n\tIDLE,\n\tLOADING_APPEND,\n\tLOADING_PREPEND,\n\tPROCESSING,\n\tDEFENSE_BROWSER,\n\tIGNORE_CLASSNAME,\n\tDUMMY_POSITION,\n\tIS_IOS,\n} from \""./consts\"";\nimport Infinite from \""./Infinite\"";\nimport { toArray, $, outerHeight, outerWidth, assign } from \""./utils\"";\nimport LayoutMananger from \""./LayoutManager\"";\nimport {\n\tIJQuery, ILayout,\n\tCursorType, StyleType,\n\tIItemManagerStatus, IInfiniteGridItem,\n\tIInfiniteGridGroup, IErrorCallbackOptions, IDOMRendererStatus, IWatchStatus, IInfiniteStatus, IInfiniteGridStatus\n} from \""./types\"";\n\n// IE8\n// https://stackoverflow.com/questions/43216659/babel-ie8-inherit-issue-with-object-create\n/* eslint-disable */\n// if (typeof Object.create !== \""function\"") {\n//   // tslint:disable\n//   Object.create = (o: any, properties: any) => {\n//     if (typeof o !== \""object\"" && typeof o !== \""function\"") {\n//       throw new TypeError(\""Object prototype may only be an Object: \"" + o);\n//     } else if (o === null) {\n//       throw new Error(\""This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.\"");\n//     }\n//     function F() { }\n//     F.prototype = o;\n//     return new F();\n//   };\n//   // tslint:enable\n// }\n/* eslint-enable */\n\nexport interface IInfiniteGridOptions {\n\titemSelector: string;\n\tisOverflowScroll: boolean;\n\tthreshold: number;\n\tisEqualSize: boolean;\n\tisConstantSize: boolean;\n\tuseRecycle: boolean;\n\thorizontal: boolean;\n\ttransitionDuration: number;\n\tuseFit: boolean;\n\tattributePrefix: string;\n}\n\n/**\n * A module used to arrange card elements including content infinitely according to layout type. With this module, you can implement various layouts composed of different card elements whose sizes vary. It guarantees performance by maintaining the number of DOMs the module is handling under any circumstance\n * @ko 콘텐츠가 있는 카드 엘리먼트를 레이아웃 타입에 따라 무한으로 배치하는 모듈. 다양한 크기의 카드 엘리먼트를 다양한 레이아웃으로 배치할 수 있다. 카드 엘리먼트의 개수가 계속 늘어나도 모듈이 처리하는 DOM의 개수를 일정하게 유지해 최적의 성능을 보장한다\n * @alias eg.InfiniteGrid\n * @extends eg.Component\n *\n * @example\n```\n<ul id=\""grid\"">\n  <li class=\""card\"">\n    <div>test1</div>\n  </li>\n  <li class=\""card\"">\n    <div>test2</div>\n  </li>\n  <li class=\""card\"">\n    <div>test3</div>\n  </li>\n  <li class=\""card\"">\n    <div>test4</div>\n  </li>\n  <li class=\""card\"">\n    <div>test5</div>\n  </li>\n  <li class=\""card\"">\n    <div>test6</div>\n  </li>\n</ul>\n<script>\nvar some = new eg.InfiniteGrid(\""#grid\"").on(\""layoutComplete\"", function(e) {\n  // ...\n});\n\n// If you already have items in the container, call \""layout\"" method.\nsome.layout();\n</script>\n```\n *\n * @support {\""ie\"": \""8+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n **/\nclass InfiniteGrid extends Component {\n\t/**\n\t * Version info string\n\t * @ko 버전정보 문자열\n\t * @name VERSION\n\t * @static\n\t * @type {String}\n\t * @example\n\t * eg.InfiniteGrid.VERSION;  // ex) 3.3.3\n\t * @memberof eg.InfiniteGrid\n\t */\n\tpublic static VERSION = \""#__VERSION__#\"";\n\n\tpublic options: IInfiniteGridOptions;\n\tprivate _loadingBar: {\n\t\tappend?: HTMLElement,\n\t\tprepend?: HTMLElement,\n\t};\n\tprivate _items: ItemManager;\n\tprivate _renderer: DOMRenderer;\n\tprivate _manager: LayoutMananger;\n\tprivate _watcher: Watcher;\n\tprivate _infinite: Infinite;\n\tprivate _status: IInfiniteGridStatus[\""_status\""];\n\n\t/**\n\t * @param {HTMLElement|String|jQuery} element A base element for a module <ko>모듈을 적용할 기준 엘리먼트</ko>\n\t * @param {Object} [options] The option object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid 모듈의 옵션 객체</ko>\n\t * @param {String} [options.itemSelector] A selector to select card elements that make up the layout<ko>레이아웃을 구성하는 카드 엘리먼트를 선택할 선택자(selector)</ko>\n\t * @param {Boolean} [options.useRecycle=true] Indicates whether keep the number of DOMs is maintained. If the useRecycle value is 'true', keep the number of DOMs is maintained. If the useRecycle value is 'false', the number of DOMs will increase as card elements are added. <ko>DOM의 수를 유지할지 여부를 나타낸다. useRecycle 값이 'true'이면 DOM 개수를 일정하게 유지한다. useRecycle 값이 'false' 이면 카드 엘리먼트가 추가될수록 DOM 개수가 계속 증가한다.</ko>\n\t * @param {Boolean} [options.isOverflowScroll=false] Indicates whether overflow:scroll is applied<ko>overflow:scroll 적용여부를 결정한다.</ko>\n\t * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (true: horizontal, false: vertical) <ko>스크롤 이동 방향 (true 가로방향, false 세로방향)</ko>\n\t * @param {Boolean} [options.useFit=true] The useFit option scrolls upwards so that no space is visible until an item is added <ko>위로 스크롤할 시 아이템을 추가하는 동안 보이는 빈 공간을 안보이게 한다.</ko>\n\t * @param {Boolean} [options.isEqualSize=false] Indicates whether sizes of all card elements are equal to one another. If sizes of card elements to be arranged are all equal and this option is set to \""true\"", the performance of layout arrangement can be improved. <ko>카드 엘리먼트의 크기가 동일한지 여부. 배치될 카드 엘리먼트의 크기가 모두 동일할 때 이 옵션을 'true'로 설정하면 레이아웃 배치 성능을 높일 수 있다</ko>\n\t * @param {Boolean} [options.isConstantSize=false] Indicates whether sizes of all card elements does not change, the performance of layout arrangement can be improved. <ko>모든 카드 엘리먼트의 크기가 불변일 때 이 옵션을 'true'로 설정하면 레이아웃 배치 성능을 높일 수 있다</ko>\n\t * @param {Number} [options.transitionDruation=0] Indicates how many seconds a transition effect takes to complete. <ko>트랜지션 효과를 완료하는데 걸리는 시간을 나타낸다.</ko>\n\t * @param {Number} [options.threshold=100] The threshold size of an event area where card elements are added to a layout.<ko>레이아웃에 카드 엘리먼트를 추가하는 이벤트가 발생하는 기준 영역의 크기.</ko>\n\t * @param {String} [options.attributePrefix=\""data-\""] The prefix to use element's data attribute.<ko>엘리먼트의 데이타 속성에 사용할 접두사.</ko>\n\t */\n\tconstructor(element: HTMLElement | string | IJQuery, options?: Partial<IInfiniteGridOptions>) {\n\t\tsuper();\n\t\tassign(this.options = {\n\t\t\titemSelector: \""*\"",\n\t\t\tisOverflowScroll: false,\n\t\t\tthreshold: 100,\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\tuseRecycle: true,\n\t\t\thorizontal: false,\n\t\t\ttransitionDuration: 0,\n\t\t\tuseFit: true,\n\t\t\tattributePrefix: \""data-\"",\n\t\t}, options);\n\t\tDEFENSE_BROWSER && (this.options.useFit = false);\n\t\tIS_ANDROID2 && (this.options.isOverflowScroll = false);\n\t\tthis._reset();\n\t\tthis._loadingBar = {};\n\n\t\tconst {\n\t\t\tisOverflowScroll,\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tthreshold,\n\t\t\tuseRecycle,\n\t\t} = this.options;\n\n\t\tthis._items = new ItemManager();\n\t\tthis._renderer = new DOMRenderer(element, {\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tcontainer: isOverflowScroll,\n\t\t});\n\t\tthis._watcher = new Watcher(\n\t\t\tthis._renderer.view,\n\t\t\t{\n\t\t\t\tisOverflowScroll,\n\t\t\t\thorizontal,\n\t\t\t\tcontainer: this._renderer.container,\n\t\t\t\tresize: () => this._onResize(),\n\t\t\t\tcheck: param => this._onCheck(param),\n\t\t\t});\n\n\t\tthis._infinite = new Infinite(this._items, {\n\t\t\tuseRecycle,\n\t\t\tthreshold,\n\t\t\tappend: param => this._requestAppend(param),\n\t\t\tprepend: param => this._requestPrepend(param),\n\t\t\trecycle: param => this._recycle(param),\n\t\t});\n\t}\n\t/**\n\t * Adds a card element at the bottom of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko 카드 엘리먼트를 레이아웃 아래에 추가한다. isProcessing() 메서드의 반환값이 'false'일 때만 이 메서드를 사용할 수 있다\n\t * 이 메소드는 isProcessing()의 반환값이 false일 경우에만 사용 가능하다.\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>추가할 카드 엘리먼트의 배열</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>추가할 카드 엘리먼트에 설정할 그룹 키. 생략하면 값이 자동으로 생성된다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.append(\""&lt;div class='item'&gt;test1&lt;/div&gt;&lt;div class='item'&gt;test2&lt;/div&gt;\"");\n\t * infinitegrid.append([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]);\n\t * infinitegrid.append([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.append(jQuery([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]));\n\t */\n\tpublic append(elements: HTMLElement[] | IJQuery | string[] | string, groupKey?: string | number) {\n\t\tthis._manager && this._insert({\n\t\t\telements,\n\t\t\tisAppend: APPEND,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Adds a card element at the top of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko 카드 엘리먼트를 레이아웃의 위에 추가한다. isProcessing() 메서드의 반환값이 'false'일 때만 이 메서드를 사용할 수 있다\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>추가할 카드 엘리먼트 배열</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>추가할 카드 엘리먼트에 설정할 그룹 키. 생략하면 값이 자동으로 생성된다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.prepend(\""&lt;div class='item'&gt;test1&lt;/div&gt;&lt;div class='item'&gt;test2&lt;/div&gt;\"");\n\t * infinitegrid.prepend([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]);\n\t * infinitegrid.prepend([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.prepend(jQuery([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]));\n\t */\n\tpublic prepend(elements: HTMLElement[] | IJQuery | string[] | string, groupKey?: string | number) {\n\t\tthis._manager && this._insert({\n\t\t\telements,\n\t\t\tisAppend: PREPEND,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Layout class to use.\n\t * @ko 사용할 Layout 클래스를 지정한다.\n\t * @param {Class|Object} LayoutKlass The Layout class to use or an instance of a layout moudle<ko>사용할 Layout 클래스 또는 레이아웃 모듈의 인스턴스</ko>\n\t * @param {Object} options Options to apply to the Layout.<ko>Layout에 적용할 옵션</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.setLayout(eg.InfiniteGrid.GridLayout, {\n\t *  margin: 10,\n\t *  align: \""start\""\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.JustifiedLayout, {\n\t *  margin: 10,\n\t *  minSize: 100,\n\t *  maxSize: 200\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.SquareLayout, {\n\t *  margin: 10,\n\t *  column: 2\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.FrameLayout, {\n\t *  margin: 10,\n\t *  frame: [\n\t *   [1, 2],\n\t *   [4, 3],\n\t *  ]\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.PackingLayout, {\n\t *  margin: 10,\n\t *  aspectRatio: 1.5\n\t * });\n\t * var layout = new eg.InfiniteGrid.GridLayout({\n\t *   margin: 10,\n\t *  align: \""start\""\n\t * });\n\t * infinitegrid.setLayout(layout);\n\t */\n\tpublic setLayout(LayoutKlass: ILayout | (new (...args: any[]) => ILayout), options = {}) {\n\t\tconst { isEqualSize, isConstantSize, attributePrefix, horizontal } = this.options;\n\n\t\tif (!this._manager) {\n\t\t\tthis._manager = new LayoutMananger(this._items, this._renderer, {\n\t\t\t\tattributePrefix,\n\t\t\t\tisEqualSize,\n\t\t\t\tisConstantSize,\n\t\t\t});\n\t\t}\n\t\tif (typeof LayoutKlass === \""function\"") {\n\t\t\tthis._manager.setLayout(new LayoutKlass(assign(options, {\n\t\t\t\thorizontal,\n\t\t\t})));\n\t\t} else {\n\t\t\tLayoutKlass.options.horizontal = horizontal;\n\t\t\tthis._manager.setLayout(LayoutKlass);\n\t\t}\n\t\tthis._renderer.resize();\n\t\tthis._setSize(this._renderer.getViewportSize());\n\t\treturn this;\n\t}\n\t/**\n\t * Returns the layouted items.\n\t * @ko 레이아웃된 아이템들을 반환한다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached items. <ko>캐싱된 아이템을 포함할지 여부를 나타낸다.</ko>\n\t * @returns List of items <ko>아이템의 목록</ko>\n\t */\n\tpublic getItems(includeCached = false): IInfiniteGridItem[] {\n\t\treturn includeCached ? this._items.pluck(\""items\"") : this._infinite.getVisibleItems();\n\t}\n\t/**\n\t * Rearranges a layout.\n\t * @ko 레이아웃을 다시 배치한다.\n\t * @param {Boolean} [isRelayout=true] Indicates whether a card element is being relayouted <ko>카드 엘리먼트 재배치 여부</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic layout(isRelayout = true) {\n\t\tif (!this._manager) {\n\t\t\treturn this;\n\t\t}\n\t\tconst renderer = this._renderer;\n\t\tconst itemManager = this._items;\n\t\tconst infinite = this._infinite;\n\t\tconst isResize = renderer.resize();\n\t\tconst items = this.getItems();\n\t\tconst { isEqualSize, isConstantSize, transitionDuration } = this.options;\n\t\tconst isLayoutAll = isRelayout && (isEqualSize || isConstantSize);\n\t\tconst size = itemManager.size();\n\n\t\tif (isRelayout) {\n\t\t\tthis._watcher.resize();\n\t\t\tif (isResize) {\n\t\t\t\tthis._setSize(renderer.getViewportSize());\n\t\t\t}\n\t\t}\n\t\t// check childElement\n\t\tif (!size || !items.length) {\n\t\t\tconst children = toArray(renderer.container.children);\n\n\t\t\tif (children.length) {\n\t\t\t\tthis._insert({\n\t\t\t\t\telements: children,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisChildren: true,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (renderer.getContainerSize()) {\n\t\t\t\t\trenderer.setContainerSize(0);\n\t\t\t\t}\n\t\t\t\tthis._requestAppend({});\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\t// layout datas\n\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\tconst endCursor = infinite.getCursor(\""end\"");\n\t\tconst data = isLayoutAll || !(isRelayout && isResize) ? itemManager.get() :\n\t\t\titemManager.get(startCursor, endCursor);\n\n\t\t// LayoutManger interface\n\t\tthis._manager.layout(isRelayout, data, isResize ? items : []);\n\t\tif (isLayoutAll) {\n\t\t\tthis._fit();\n\t\t} else if (isRelayout && isResize) {\n\t\t\titemManager.clearOutlines(startCursor, endCursor);\n\t\t}\n\t\tDOMRenderer.renderItems(items, transitionDuration);\n\t\tisRelayout && this._watcher.setScrollPos();\n\t\tthis._onLayoutComplete({\n\t\t\titems,\n\t\t\tisAppend: APPEND,\n\t\t\tfromCache: CACHE,\n\t\t\tisTrusted: NO_TRUSTED,\n\t\t\tuseRecycle: false,\n\t\t\tisLayout: true,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Removes a item element on a grid layout.\n\t * @ko 그리드 레이아웃의 카드 엘리먼트를 삭제한다.\n\t * @param {HTMLElement} item element to be removed <ko>삭제될 아이템 엘리먼트</ko>\n\t * @return {Object}  Removed item element <ko>삭제된 아이템 엘리먼트 정보</ko>\n\t */\n\tpublic remove(element: HTMLElement, isLayout = true) {\n\t\tif (element) {\n\t\t\tconst {items, groups} = this._infinite.remove(element);\n\n\t\t\titems && DOMRenderer.removeElement(element);\n\t\t\tisLayout && this.layout(groups.length > 0);\n\t\t\treturn items;\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t * Returns the list of group keys which belongs to card elements currently being maintained. You can use the append() or prepend() method to configure group keys so that multiple card elements can be managed at once. If you do not use these methods to configure group keys, groupkey is automatically generated.\n\t * @ko 현재 유지하고 있는 카드 엘리먼트의 그룹 키 목록을 반환한다. 여러 개의 카드 엘리먼트를 묶어서 관리할 수 있도록 append() 메서드나 prepend() 메서드에서 그룹 키를 지정할 수 있다. append() 메서드나 prepend() 메서드에서 그룹 키를 지정하지 않았다면 자동으로 그룹키가 생성된다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached groups. <ko>캐싱된 그룹을 포함할지 여부를 나타낸다.</ko>\n\t * @return {Array} List of group keys <ko>그룹 키의 목록</ko>\n\t */\n\tpublic getGroupKeys(includeCached?: boolean) {\n\t\tconst data = includeCached ?\n\t\t\tthis._items.get() : this._infinite.getVisibleData();\n\n\t\treturn data.map(v => v.groupKey);\n\t}\n\t/**\n\t * Returns the current state of a module such as location information. You can use the setStatus() method to restore the information returned through a call to this method.\n\t * @ko 카드의 위치 정보 등 모듈의 현재 상태 정보를 반환한다. 이 메서드가 반환한 정보를 저장해 두었다가 setStatus() 메서드로 복원할 수 있다\n\t * @return {Object} State object of the eg.InfiniteGrid module<ko>eg.InfiniteGrid 모듈의 상태 객체</ko>\n\t */\n\tpublic getStatus(startKey?: string | number, endKey?: string | number): IInfiniteGridStatus {\n\t\treturn {\n\t\t\t_status: assign({}, this._status),\n\t\t\t_items: this._items.getStatus(startKey, endKey),\n\t\t\t_renderer: this._renderer.getStatus(),\n\t\t\t_watcher: this._watcher.getStatus(),\n\t\t\t_infinite: this._infinite.getStatus(startKey, endKey),\n\t\t};\n\t}\n\t/**\n\t * Sets the state of the eg.InfiniteGrid module with the information returned through a call to the getStatue() method.\n\t * @ko getStatue() 메서드가 저장한 정보로 eg.InfiniteGrid 모듈의 상태를 설정한다.\n\t * @param {Object} status State object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid 모듈의 상태 객체</ko>\n\t * @param {boolean} [applyScrollPos=true] Checks whether to scroll<ko>스크롤의 위치를 복원할지 결정한다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic setStatus(status: IInfiniteGridStatus, applyScrollPos = true) {\n\t\tif (!status) {\n\t\t\treturn this;\n\t\t}\n\t\tconst { _status, _renderer, _items, _watcher, _infinite } = status;\n\n\t\tif (!_status ||\n\t\t\t!_renderer || !_items || !_watcher || !_infinite) {\n\t\t\treturn this;\n\t\t}\n\t\tconst items = this._items;\n\t\tconst renderer = this._renderer;\n\t\tconst watcher = this._watcher;\n\t\tconst infinite = this._infinite;\n\n\t\twatcher.detachEvent();\n\t\tassign(this._status, _status);\n\t\tthis._status.processingStatus = IDLE;\n\t\titems.setStatus(_items);\n\t\trenderer.setStatus(_renderer);\n\t\tinfinite.setStatus(_infinite);\n\n\t\tconst visibleItems = this.getItems();\n\t\tconst length = visibleItems.length;\n\n\t\trenderer.createAndInsert(visibleItems, true);\n\n\t\tconst isReLayout = renderer.isNeededResize();\n\n\t\twatcher.setStatus(_watcher, applyScrollPos);\n\t\twatcher.attachEvent();\n\n\t\tconst { isConstantSize, isEqualSize } = this.options;\n\n\t\tif (!length) {\n\t\t\tthis._requestAppend({ cache: [] });\n\t\t} else if (isReLayout) {\n\t\t\trenderer.resize();\n\t\t\tthis._setSize(renderer.getViewportSize());\n\n\t\t\tif (isConstantSize) {\n\t\t\t\tthis.layout(true);\n\t\t\t} else {\n\t\t\t\tthis._items.clearOutlines();\n\t\t\t\tthis._postLayout({\n\t\t\t\t\tfromCache: true,\n\t\t\t\t\tgroups: isEqualSize ? items.get() : infinite.getVisibleData(),\n\t\t\t\t\titems: visibleItems,\n\t\t\t\t\tnewItems: visibleItems,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisTrusted: false,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis.layout(false);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Clears added card elements and data.\n\t * @ko 추가된 카드 엘리먼트와 데이터를 모두 지운다.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic clear() {\n\t\tthis._items.clear();\n\t\tthis._renderer.clear();\n\t\tthis._infinite.clear();\n\t\tthis._reset();\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Loading Bar to use for append or prepend items.\n\t * @ko 아이템을 append 또는 prepend 하기 위해 사용할 로딩 바를 지정한다.\n\t * @param {String|Object} [userLoadingBar={}] The loading bar HTML markup or element or element selector <ko> 로딩 바 HTML 또는 element 또는 selector </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic setLoadingBar(userLoadingBar: {\n\t\tappend?: string | HTMLElement,\n\t\tprepepnd?: string | HTMLElement,\n\t} | string = {}) {\n\t\tconst loadingBarObj: {\n\t\t\tappend?: string | HTMLElement,\n\t\t\tprepend?: string | HTMLElement,\n\t\t} = typeof userLoadingBar === \""object\"" ? userLoadingBar : {\n\t\t\tappend: userLoadingBar,\n\t\t\tprepend: userLoadingBar,\n\t\t};\n\n\t\tthis._status.loadingSize = 0;\n\t\tthis._status.loadingStyle = {};\n\t\tconst loadingBar = this._loadingBar;\n\n\t\tfor (const type in loadingBarObj) {\n\t\t\tloadingBar[type as \""append\"" | \""prepend\""] = $(loadingBarObj[type as \""append\"" | \""prepend\""]);\n\t\t\tloadingBar[type as \""append\"" | \""prepend\""].className += ` ${IGNORE_CLASSNAME}`;\n\t\t}\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t/**\n\t * Checks whether a card element or data is being added.\n\t * @ko 카드 엘리먼트 추가 또는 데이터 로딩이 진행 중인지 확인한다\n\t * @return {Boolean} Indicates whether a card element or data is being added <ko>카드 엘리먼트 추가 또는 데이터 로딩 진행 중 여부</ko>\n\t */\n\tpublic isProcessing() {\n\t\treturn this._isProcessing() || this._isLoading();\n\t}\n\t/**\n\t * Returns the element of loading bar.\n\t * @ko 로딩 바의 element를 반환한다.\n\t * @param {Boolean} [isAppend=currentLoadingBar|true] Checks whether the card element is added to the append () method. <ko>카드 엘리먼트가 append() 메서드로 추가 할 것인지 확인한다.</ko>\n\t * @return {Element} The element of loading bar. <ko>로딩 바의 element</ko>\n\t */\n\tpublic getLoadingBar(isAppend = this._getLoadingStatus() !== LOADING_PREPEND) {\n\t\treturn this._loadingBar[isAppend ? \""append\"" : \""prepend\""];\n\t}\n\t/**\n\t * Start loading for append/prepend during loading data.\n\t * @ko 데이터가 로딩되는 동안 append/prepend하길 위해 로딩을 시작한다.\n\t * @param {Boolean} [isAppend=true] Checks whether the card element is added to the append () method. <ko>카드 엘리먼트가 append() 메서드로 추가 할 것인지 확인한다.</ko>\n\t * @param {Object} [userStyle = {display: \""block\""}] custom style to apply to this loading bar for start. <ko> 로딩 시작을 위한 로딩 바에 적용할 커스텀 스타일 </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic startLoading(isAppend?: boolean, userStyle: StyleType = { display: \""block\"" }) {\n\t\tif (this._isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst type = isAppend ? \""append\"" : \""prepend\"";\n\n\t\tthis._process(isAppend ? LOADING_APPEND : LOADING_PREPEND);\n\t\tif (!this._loadingBar[type]) {\n\t\t\treturn this;\n\t\t}\n\t\tthis._renderLoading(userStyle);\n\t\tthis._status.loadingStyle = userStyle;\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis._setContainerSize(this._getEdgeValue(\""end\"") + this._status.loadingSize);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * End loading after startLoading() for append/prepend\n\t * @ko  append/prepend하길 위해 startLoading() 호출해선 걸었던 로딩을 끝낸다.\n\t * @param {Object} [userStyle = {display: \""none\""}] custom style to apply to this loading bar for end <ko> 로딩 시작을 위한 로딩 바에 적용할 커스텀 스타일 </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic endLoading(userStyle: StyleType = { display: \""none\"" }) {\n\t\tif (!this._isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst type = isAppend ? \""append\"" : \""prepend\"";\n\t\tconst el = this._loadingBar[type];\n\t\tconst status = this._status;\n\t\tconst size = status.loadingSize;\n\n\t\tthis._process(LOADING_APPEND | LOADING_PREPEND, false);\n\t\tstatus.loadingSize = 0;\n\t\tstatus.loadingStyle = {};\n\t\tif (el) {\n\t\t\tconst style: StyleType = assign({\n\t\t\t\t[this.options.horizontal ? \""left\"" : \""top\""]: `${-size}px`,\n\t\t\t}, userStyle);\n\n\t\t\tfor (const property in style) {\n\t\t\t\tel.style[property as keyof StyleType] = style[property as keyof StyleType];\n\t\t\t}\n\t\t\tif (!isAppend) {\n\t\t\t\tthis._fitItems(size);\n\t\t\t} else {\n\t\t\t\tthis._setContainerSize(this._getEdgeValue(\""end\""));\n\t\t\t}\n\t\t}\n\t\tif (this.options.useRecycle && !this.isProcessing()) {\n\t\t\tthis._infinite.recycle(this._watcher.getScrollPos(), isAppend);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Retrieves the item via index or the element.\n\t * @ko index 또는 element를 통해 아이템을 가져온다.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> item에 해당하는 element 또는 해당 item이 있는 group의 index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 사용할 경우 해당 group에 있는 Item의 index </ko>\n\t * @return The item containing the content, size and position,etc<ko>content, size, position 등이 담겨있는 item 정보</ko>\n\t * @example\n\n\t ig.getItem(0, 0);\n\t ig.getItem(element);\n\n\t {\n\t  el: HTMLElement,\n\t  content: \""<div>...</div>\"",\n\t  size: {width: ..., height: ...},\n\t  rect: {top: ..., left: ..., width: ..., height: ...},\n\t }\n\t */\n\tpublic getItem(groupIndex = 0, itemIndex?: number): IInfiniteGridItem {\n\t\tif (itemIndex == null && typeof groupIndex === \""object\"") {\n\t\t\tif (!groupIndex) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst items = this.getItems();\n\t\t\tconst length = items.length;\n\n\t\t\tfor (let i = 0; i < length; ++i) {\n\t\t\t\tif (items[i].el === groupIndex) {\n\t\t\t\t\treturn items[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tconst group = this._items.getData(groupIndex);\n\n\t\t\treturn group && group.items[itemIndex || 0];\n\t\t}\n\t}\n\t/**\n\t * Updates the item via index or the element.\n\t * @ko index 또는 element를 통해 아이템을 업데이트한다.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> item에 해당하는 element 또는 해당 item이 있는 group의 index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 사용할 경우 해당 group에 있는 Item의 index </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\telement.innerHTML = \""2\"";\n\telement.style.height = \""400px\"";\n\tig.updateItem(element);\n\tig.updateItem(0, 0);\n\t */\n\tpublic updateItem(groupIndex?: number, itemIndex?: number) {\n\t\tconst item = this.getItem(groupIndex, itemIndex);\n\n\t\tthis._updateItem(item) && this.layout(false);\n\n\t\treturn this;\n\t}\n\t/**\n\t * Update the currently displayed items.\n\t * @ko 현재보여주는 아이템들을 업데이트한다.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\telement.innerHTML = \""2\"";\n\telement.style.height = \""400px\"";\n\n\telement2.innerHTML = \""2\"";\n\telement2.style.height = \""400px\"";\n\n\tig.updateItems();\n\t */\n\tpublic updateItems() {\n\t\tthis.getItems().forEach(item => {\n\t\t\tthis._updateItem(item);\n\t\t});\n\t\tthis.layout(false);\n\t\treturn this;\n\t}\n\t/**\n\t * Move to some group or item position.\n\t * @ko 해당하는 그룹 또는 아이템의 위치로 이동한다.\n\t * @param {Number} [index] group's index <ko> 그룹의 index</ko>\n\t * @param {Number} [itemIndex=-1] item's index <ko> 그룹의 index</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic moveTo(index?: number, itemIndex = 0) {\n\t\tif (this.isProcessing()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst data = this._items.getData(index);\n\n\t\tif (!data) {\n\t\t\treturn this;\n\t\t}\n\t\tconst infinite = this._infinite;\n\t\tconst outlines = data.outlines;\n\t\tconst items = data.items;\n\t\tconst item = items[itemIndex];\n\t\tconst isResize = outlines.start && (outlines.start.length === 0);\n\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\tconst endCursor = infinite.getCursor(\""end\"");\n\t\tconst isInCursor = startCursor <= index && index <= endCursor;\n\t\tconst { useRecycle, horizontal } = this.options;\n\n\t\tif (isInCursor || !useRecycle || !isResize) {\n\t\t\tlet pos = item ? item.rect[horizontal ? \""left\"" : \""top\""] : Math.max(...outlines.start);\n\t\t\tconst fit = Math.min(...outlines.start);\n\n\t\t\tif (fit < 0) {\n\t\t\t\t// base < 0\n\t\t\t\tthis._fitItems(fit, 0);\n\t\t\t\tpos -= fit;\n\t\t\t}\n\t\t\tconst isAppend = index > startCursor;\n\n\t\t\tif (isInCursor || isAppend) {\n\t\t\t\tthis._scrollTo(pos);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis._postLayout({\n\t\t\t\tfromCache: true,\n\t\t\t\tgroups: [data],\n\t\t\t\titems,\n\t\t\t\tnewItems: [],\n\t\t\t\tisAppend,\n\t\t\t\tisTrusted: false,\n\t\t\t\tmoveCache: true,\n\t\t\t\tmoveItem: itemIndex,\n\t\t\t});\n\t\t\treturn this;\n\t\t} else {\n\t\t\tconst isAppend = index > endCursor || index < startCursor - 1;\n\n\t\t\tthis._postCache({\n\t\t\t\tisAppend,\n\t\t\t\tcache: [data],\n\t\t\t\tisTrusted: false,\n\t\t\t\tmoveItem: itemIndex,\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n   * Destroys elements, properties, and events used on a grid layout.\n   * @ko 그리드 레이아웃에 사용한 엘리먼트와 속성, 이벤트를 해제한다\n   */\n\tpublic destroy() {\n\t\tthis._infinite.clear();\n\t\tthis._watcher.destroy();\n\t\tthis._manager.destroy();\n\t\tthis._reset();\n\t\tthis._items.clear();\n\t\tthis._renderer.destroy();\n\t}\n\tprivate _setContainerSize(size: number) {\n\t\tthis._renderer.setContainerSize(Math.max(this._items.getMaxEdgeValue(), size));\n\t}\n\tprivate _appendLoadingBar() {\n\t\tconst loadingBar = this._loadingBar;\n\t\tconst container = this._renderer.container;\n\n\t\tfor (const type in loadingBar) {\n\t\t\tcontainer.appendChild(loadingBar[type as \""append\"" | \""prepend\""]);\n\t\t}\n\t}\n\tprivate _setSize(size: number) {\n\t\tthis._infinite.setSize(this._renderer.getViewSize());\n\t\tthis._manager.setSize(size);\n\t}\n\tprivate _fitItems(base: number, margin = 0) {\n\t\tbase > 0 && this._watcher.scrollBy(-base);\n\t\tthis._items.fit(base, this.options.horizontal);\n\t\tDOMRenderer.renderItems(this.getItems());\n\t\tthis._setContainerSize(this._getEdgeValue(\""end\"") || margin);\n\t\tbase < 0 && this._watcher.scrollBy(-base);\n\t}\n\t// called by visible\n\tprivate _fit(useFit = this.options.useFit) {\n\t\tlet base = this._getEdgeValue(\""start\"");\n\t\tconst margin = (this._getLoadingStatus() === LOADING_PREPEND && this._status.loadingSize) || 0;\n\t\tconst { isConstantSize, isEqualSize, useRecycle } = this.options;\n\n\t\tif (!useRecycle || !useFit || isConstantSize || isEqualSize) {\n\t\t\tif (base < margin) {\n\t\t\t\tthis._fitItems(base - margin, margin);\n\t\t\t}\n\t\t\tbase = 0;\n\t\t} else if (base !== 0 || margin) {\n\t\t\tthis._fitItems(base - margin, margin);\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t\tthis._isLoading() && this._renderLoading();\n\t\treturn base;\n\t}\n\tprivate _getEdgeValue(cursor: CursorType) {\n\t\treturn this._infinite.getEdgeValue(cursor);\n\t}\n\tprivate _isProcessing() {\n\t\treturn (this._status.processingStatus & PROCESSING) > 0;\n\t}\n\tprivate _isLoading() {\n\t\treturn this._getLoadingStatus() > 0;\n\t}\n\tprivate _getLoadingStatus() {\n\t\treturn this._status.processingStatus & (LOADING_APPEND | LOADING_PREPEND);\n\t}\n\tprivate _process(status: number, isAdd = true) {\n\t\tif (isAdd) {\n\t\t\tthis._status.processingStatus |= status;\n\t\t} else {\n\t\t\tthis._status.processingStatus -= this._status.processingStatus & status;\n\t\t}\n\t}\n\tprivate _insert({\n\t\telements,\n\t\tisAppend,\n\t\tisChildren,\n\t\tgroupKey = new Date().getTime() + Math.floor(Math.random() * 1000),\n\t}: {\n\t\telements: string | string[] | HTMLElement[] | IJQuery,\n\t\tisAppend?: boolean,\n\t\tisChildren?: boolean,\n\t\tgroupKey?: string | number,\n\t}) {\n\t\tif (this._isProcessing() || elements.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst items = ItemManager.from(elements, this.options.itemSelector, {\n\t\t\tgroupKey,\n\t\t});\n\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group: IInfiniteGridGroup = {\n\t\t\tgroupKey,\n\t\t\titems,\n\t\t\toutlines: { start: [], end: [] },\n\t\t};\n\t\tconst method = isAppend ? \""append\"" : \""prepend\"";\n\n\t\tthis._items[method](group);\n\n\t\tif (!isAppend) {\n\t\t\tconst infinite = this._infinite;\n\t\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\t\tconst endCursor = infinite.getCursor(\""end\"");\n\n\t\t\tinfinite.setCursor(\""start\"", startCursor + 1);\n\t\t\tinfinite.setCursor(\""end\"", endCursor + 1);\n\t\t}\n\t\tthis._postLayout({\n\t\t\tfromCache: NO_CACHE,\n\t\t\tgroups: [group],\n\t\t\titems,\n\t\t\tnewItems: items,\n\t\t\tisAppend,\n\t\t\tisChildren,\n\t\t\tisTrusted: NO_TRUSTED,\n\t\t});\n\t}\n\t// add items, and remove items for recycling\n\tprivate _recycle({ start, end }: { start: number, end: number }) {\n\t\tif (!this.options.useRecycle) {\n\t\t\treturn;\n\t\t}\n\t\tDOMRenderer.removeItems(this._items.pluck(\""items\"", start, end));\n\t}\n\tprivate _renderLoading(userStyle = this._status.loadingStyle) {\n\t\tif (!this._isLoading()) {\n\t\t\treturn;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst el = this._loadingBar[isAppend ? \""append\"" : \""prepend\""];\n\n\t\tif (!el) {\n\t\t\treturn;\n\t\t}\n\t\tconst style = assign({\n\t\t\tposition: \""absolute\"",\n\t\t}, userStyle);\n\n\t\tfor (const property in style) {\n\t\t\tel.style[property as keyof StyleType] = style[property as keyof StyleType];\n\t\t}\n\t\tthis._status.loadingSize = this.options.horizontal ? outerWidth(el) : outerHeight(el);\n\t\tconst posName = this.options.horizontal ? \""left\"" : \""top\"";\n\n\t\tif (!(posName in style)) {\n\t\t\tconst pos = isAppend ? this._getEdgeValue(\""end\"") : this._getEdgeValue(\""start\"") - this._status.loadingSize;\n\n\t\t\tel.style[posName] = `${pos}px`;\n\t\t}\n\t}\n\tprivate _updateItem(item: IInfiniteGridItem) {\n\t\tif (item && item.el) {\n\t\t\titem.content = item.el.outerHTML;\n\n\t\t\t!this.options.isEqualSize && resetSize(item);\n\t\t\tthis._renderer.updateSize([item]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate _setScrollPos(pos: number) {\n\t\tthis._watcher.setScrollPos(this._watcher.getContainerOffset() + pos);\n\t}\n\tprivate _scrollTo(pos: number) {\n\t\tthis._watcher.scrollTo(this._watcher.getContainerOffset() + pos);\n\t}\n\tprivate _onImageError(e: IErrorCallbackOptions) {\n\t\t/**\n\t\t * This event is fired when an error occurs in the image.\n\t\t * @ko 이미지 로드에 에러가 날 때 발생하는 이벤트.\n\t\t * @event eg.InfiniteGrid#imageError\n\t\t * @param {eg.InfiniteGrid.IErrorCallbackOptions} e The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @example\n\tig.on(\""imageError\"", e => {\n\t  e.remove();\n\t  e.removeItem();\n\t  e.replace(\""http://...jpg\"");\n\t  e.replace(imageElement);\n\t  e.replaceItem(\""item html\"");\n\t});\n\t\t */\n\t\tthis.trigger(\""imageError\"", assign(e, { element: e.item.el }));\n\t}\n\tprivate _postCache({\n\t\tcache,\n\t\tisAppend,\n\t\tisTrusted = true,\n\t\tmoveItem = -1,\n\t}: {\n\t\tcache: IInfiniteGridGroup[],\n\t\tisAppend?: boolean,\n\t\tisTrusted?: boolean,\n\t\tmoveItem?: number,\n\t}) {\n\t\tconst { isConstantSize } = this.options;\n\t\tconst items = ItemManager.pluck(cache, \""items\"");\n\t\tlet fromCache = true;\n\t\tconst newItems = items.filter(item => {\n\t\t\tif (!item.orgSize) {\n\t\t\t\tfromCache = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !isConstantSize && item.rect.top < DUMMY_POSITION / 10;\n\t\t});\n\n\t\tthis._postLayout({\n\t\t\tfromCache,\n\t\t\tgroups: cache,\n\t\t\titems,\n\t\t\tnewItems,\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t\tmoveItem,\n\t\t});\n\t}\n\tprivate _postLayout({\n\t\tfromCache,\n\t\tgroups,\n\t\titems = ItemManager.pluck(groups, \""items\""),\n\t\tnewItems,\n\t\tisAppend,\n\t\tisChildren,\n\t\tisTrusted,\n\t\tmoveCache,\n\t\tmoveItem = -2,\n\t}: {\n\t\tfromCache: boolean,\n\t\tgroups: IInfiniteGridGroup[],\n\t\titems: IInfiniteGridItem[],\n\t\tnewItems?: IInfiniteGridItem[],\n\t\tisAppend: boolean,\n\t\tisChildren?: boolean,\n\t\tisTrusted?: boolean,\n\t\tmoveCache?: boolean,\n\t\tmoveItem?: number,\n\t}) {\n\t\tthis._process(PROCESSING);\n\t\tconst method = isAppend ? \""append\"" : \""prepend\"";\n\t\tconst itemManager = this._items;\n\t\tconst horizontal = this.options.horizontal;\n\n\t\t// If container has children, it does not render first.\n\t\tif (!isChildren) {\n\t\t\tDOMRenderer.createElements(items);\n\t\t\tthis._renderer[method](items);\n\t\t}\n\t\tthis._manager[method]({\n\t\t\tgroups,\n\t\t\titems: newItems,\n\t\t}, {\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tconst infinite = this._infinite;\n\t\t\t\t\tconst startCursor = Math.max(infinite.getCursor(\""start\""), 0);\n\t\t\t\t\tconst endCursor = Math.max(infinite.getCursor(\""end\""), 0);\n\t\t\t\t\tlet requestStartCursor = itemManager.indexOf(groups[0].groupKey);\n\t\t\t\t\tlet requestEndCursor = itemManager.indexOf(groups[groups.length - 1].groupKey);\n\t\t\t\t\tlet isInCursor = true;\n\n\t\t\t\t\tif (requestStartCursor > endCursor + 1 || requestEndCursor < startCursor - 1) {\n\t\t\t\t\t\tisInCursor = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (isInCursor) {\n\t\t\t\t\t\tif (isAppend) {\n\t\t\t\t\t\t\trequestStartCursor = startCursor;\n\t\t\t\t\t\t\trequestEndCursor = Math.max(endCursor, requestEndCursor);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequestStartCursor = Math.max(Math.min(startCursor, requestStartCursor), 0);\n\t\t\t\t\t\t\trequestEndCursor = endCursor;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t!isInCursor && this._recycle({ start: startCursor, end: endCursor });\n\t\t\t\t\tinfinite.setCursor(\""start\"", requestStartCursor);\n\t\t\t\t\tinfinite.setCursor(\""end\"", requestEndCursor);\n\n\t\t\t\t\tif (moveItem > -1) {\n\t\t\t\t\t\tconst pos = items[moveItem].rect[horizontal ? \""left\"" : \""top\""];\n\n\t\t\t\t\t\tif (!isInCursor && !moveCache) {\n\t\t\t\t\t\t\titemManager.clearOutlines(requestStartCursor, requestEndCursor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._scrollTo(pos);\n\t\t\t\t\t\tthis._setScrollPos(pos);\n\t\t\t\t\t}\n\t\t\t\t\tthis._onLayoutComplete({\n\t\t\t\t\t\titems,\n\t\t\t\t\t\tisAppend,\n\t\t\t\t\t\tfromCache,\n\t\t\t\t\t\tisTrusted,\n\t\t\t\t\t\tuseRecycle: false,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\terror: e => this._onImageError(e),\n\t\t\t\tend: ({ remove, layout }) => {\n\t\t\t\t\tremove.forEach(el => this.remove(el, false));\n\t\t\t\t\tif (layout) {\n\t\t\t\t\t\tthis.layout(false);\n\t\t\t\t\t} else if (!this.isProcessing() && this.options.useRecycle) {\n\t\t\t\t\t\tconst watcher = this._watcher;\n\t\t\t\t\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t\t\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\treturn this;\n\t}\n\t// called by visible\n\tprivate _requestAppend({ cache }: { cache?: IInfiniteGridGroup[] }) {\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({ cache, isAppend: APPEND });\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the bottom or right of a layout because there is no card to be displayed on screen when a user scrolls near bottom or right.\n\t\t\t * @ko 카드 엘리먼트가 레이아웃의 아래나 오른쪽에 추가돼야 할 때 발생하는 이벤트. 사용자가 아래나 오른쪽으로 스크롤해서 화면에 표시될 카드가 없을 때 발생한다\n\t\t\t * @event eg.InfiniteGrid#append\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>화면에 보여지는 마지막 그룹의 그룹키</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for append loading data. <ko> 뒷쪽에 추가되는 데이터 로딩을 시작한다. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩을 시작할 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t */\n\t\t\tthis.trigger(\""append\"", {\n\t\t\t\tisTrusted: TRUSTED,\n\t\t\t\tgroupKey: this.getGroupKeys().pop() || \""\"",\n\t\t\t\tstartLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.startLoading(true, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\t// called by visible\n\tprivate _requestPrepend({ cache }: { cache?: IInfiniteGridGroup[] }) {\n\t\tthis._fit(this.options.useFit || !cache.length);\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({ cache, isAppend: PREPEND });\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the top or left of a layout because there is no card to be displayed on screen when a user scrolls near top or left.\n\t\t\t * @ko 카드가 레이아웃의 위나 왼쪽에 추가돼야 할 때 발생하는 이벤트. 사용자가 위나 왼쪽으로 스크롤해서 화면에 표시될 카드가 없을 때 발생한다.\n\t\t\t * @event eg.InfiniteGrid#prepend\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>화면에 보여지는 첫번째 그룹의 그룹키</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for prepend loading data. <ko> 앞쪽에 추가되는 데이터 로딩을 시작한다. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩을 시작할 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t */\n\t\t\tthis.trigger(\""prepend\"", {\n\t\t\t\tisTrusted: TRUSTED,\n\t\t\t\tgroupKey: this.getGroupKeys().shift(),\n\t\t\t\tstartLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.startLoading(false, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\tprivate _onResize() {\n\t\tthis.layout(true);\n\t}\n\tprivate _onCheck({\n\t\tisForward,\n\t\tscrollPos,\n\t\thorizontal,\n\t\torgScrollPos,\n\t}: {\n\t\tisForward: boolean,\n\t\tscrollPos: number,\n\t\thorizontal: boolean,\n\t\torgScrollPos: number,\n\t}) {\n\t\t/**\n\t\t * This event is fired when the user scrolls.\n\t\t * @ko 사용자가 스크롤 할 경우 발생하는 이벤트.\n\t\t * @event eg.InfiniteGrid#change\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Boolean} param.isForward Indicates whether the scroll progression direction is forward or backword. <ko>스크롤 진행방향이 앞쪽으로 진행하는 지, 뒤쪽으로 진행하는지를 나타낸다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테이너 엘리먼트 기준의 현재 스크롤 위치값</ko>\n\t\t * @param {Boolean} param.orgScrollPos Current position of the scroll <ko>현재 스크롤 위치값</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t * @param {Boolean} options.horizontal Direction of the scroll movement (true: horizontal, false: vertical) <ko>스크롤 이동 방향 (true 가로방향, false 세로방향</ko>\n\t\t */\n\t\tthis.trigger(\""change\"", {\n\t\t\tisForward,\n\t\t\thorizontal,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t});\n\t\tthis._infinite.scroll(scrollPos);\n\t}\n\tprivate _onLayoutComplete({\n\t\titems,\n\t\tisAppend,\n\t\tisTrusted = false,\n\t\tuseRecycle = this.options.useRecycle,\n\t\tfromCache = false,\n\t\tisLayout = false,\n\t}: {\n\t\titems: IInfiniteGridItem[],\n\t\tisAppend: boolean,\n\t\tisTrusted: boolean,\n\t\tuseRecycle: boolean,\n\t\tfromCache: boolean,\n\t\tisLayout?: boolean,\n\t}) {\n\t\tconst viewSize = this._renderer.getViewSize();\n\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis._isLoading() && this._renderLoading();\n\t\t}\n\n\t\tconst watcher = this._watcher;\n\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t// recycle after _fit beacause prepend and append are occured simultaneously by scroll.\n\t\tif (!isLayout && useRecycle && !this._isLoading()) {\n\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t}\n\n\t\tconst size = this._getEdgeValue(\""end\"");\n\n\t\tif (isAppend) {\n\t\t\tthis._setContainerSize(size + this._status.loadingSize || 0);\n\t\t\tif (scrollPos > 0) {\n\t\t\t\t!IS_IOS && this._scrollTo(scrollPos);\n\t\t\t}\n\t\t}\n\t\t!isLayout && this._process(PROCESSING, false);\n\n\t\t/**\n\t\t * This event is fired when layout is successfully arranged through a call to the append(), prepend(), or layout() method.\n\t\t * @ko 레이아웃 배치가 완료됐을 때 발생하는 이벤트. append() 메서드나 prepend() 메서드, layout() 메서드 호출 후 카드의 배치가 완료됐을 때 발생한다\n\t\t * @event eg.InfiniteGrid#layoutComplete\n\t\t *\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Array} param.target Rearranged card elements<ko>재배치된 카드 엘리먼트들</ko>\n\t\t * @param {Boolean} param.fromCache Check whether these items are cache or not <ko>해당 아이템들이 캐시인지 아닌지 확인한다.</ko>\n\t\t * @param {Boolean} param.isLayout Returns true if this is an event called by resize event or layout method. Returns false if this is an event called by adding an item. <ko>해당 이벤트가 리사이즈 이벤트 또는 layout() 메서드를 통해 호출됐으면 true, 아이템 추가로 호출됐으면 false를 반환한다.</ko>\n\t\t * @param {Boolean} param.isAppend Checks whether the append() method is used to add a card element. It returns true even though the layoutComplete event is fired after the layout() method is called. <ko>카드 엘리먼트가 append() 메서드로 추가됐는지 확인한다. layout() 메서드가 호출된 후 layoutComplete 이벤트가 발생해도 'true'를 반환한다.</ko>\n\t\t * @param {Boolean} param.isScroll Checks whether scrolling has occurred after the append(), prepend(), ..., etc method is called <ko>append, prend 등 호출 후 스크롤이 생겼는지 확인한다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테이너 엘리먼트 기준의 현재 스크롤 위치값</ko>\n\t\t * @param {Number} param.orgScrollPos Current position of the scroll <ko>현재 스크롤 위치값</ko>\n\t\t * @param {Number} param.size The size of container element <ko>컨테이너 엘리먼트의 크기</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t */\n\t\tthis.trigger(\""layoutComplete\"", {\n\t\t\ttarget: items.concat(),\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t\tfromCache,\n\t\t\tisLayout,\n\t\t\tisScroll: viewSize < watcher.getContainerOffset() + size,\n\t\t\tscrollPos,\n\t\t\torgScrollPos: watcher.getOrgScrollPos(),\n\t\t\tsize,\n\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\tthis.endLoading(userStyle);\n\t\t\t},\n\t\t});\n\t\tthis._infinite.scroll(scrollPos);\n\t}\n\tprivate _reset() {\n\t\tthis._status = {\n\t\t\tprocessingStatus: IDLE,\n\t\t\tloadingSize: 0,\n\t\t\tloadingStyle: {},\n\t\t};\n\t}\n}\n\nexport default InfiniteGrid;\n"",""import { ALIGN, APPEND, PREPEND } from \""../consts\"";\nimport { getStyleNames, assignOptions, fill, cloneItems } from \""../utils\"";\nimport { ILayout, IAlign, IRectlProperties, IInfiniteGridItem, IInfiniteGridGroup } from \""../types\"";\n\n// ALIGN\nconst { START, CENTER, END, JUSTIFY } = ALIGN;\n\n/**\n * @classdesc The GridLayout is a layout that stacks cards with the same width as a stack of bricks. Adjust the width of all images to the same size, find the lowest height column, and insert a new card.\n * @ko GridLayout는 벽돌을 쌓아 올린 모양처럼 동일한 너비를 가진 카드를 쌓는 레이아웃이다. 모든 이미지의 너비를 동일한 크기로 조정하고, 가장 높이가 낮은 열을 찾아 새로운 이미지를 삽입한다. 따라서 배치된 카드 사이에 빈 공간이 생기지는 않지만 배치된 레이아웃의 아래쪽은 울퉁불퉁해진다.\n * @class eg.InfiniteGrid.GridLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.GridLayout module <ko>eg.InfiniteGrid.GridLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.align=START] Align of the position of the items (START, CENTER, END, JUSTIFY) <ko>아이템들의 위치의 정렬 (START, CENTER, END, JUSTIFY)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n  horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.GridLayout, {\n  margin: 10,\n  align: \""start\"",\n  itemSize: 200\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.GridLayout({\n  margin: 10,\n  align: \""center\"",\n  itemSize: 200,\n  horizontal: true,\n});\n\n</script>\n```\n **/\nclass GridLayout implements ILayout {\n\tpublic options: {\n\t\thorizontal: boolean,\n\t\tmargin: number,\n\t\talign: IAlign[keyof IAlign],\n\t\titemSize: number,\n\t};\n\tprivate _size: number;\n\tprivate _columnSize: number;\n\tprivate _columnLength: number;\n\tprivate _style: IRectlProperties;\n\tconstructor(options: Partial<GridLayout[\""options\""]> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\talign: START,\n\t\t\titemSize: 0,\n\t\t}, options);\n\t\tthis._size = 0;\n\t\tthis._columnSize = 0;\n\t\tthis._columnLength = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100, 200, 300, 400]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100, 200, 300, 400]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.GridLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst firstItem = (groups.length && groups[0].items.length && groups[0].items[0]);\n\n\t\tthis.checkColumn(firstItem);\n\n\t\t// if outlines' length and columns' length are now same, re-caculate outlines.\n\t\tlet startOutline: number[];\n\n\t\tif (outline.length !== this._columnLength) {\n\t\t\tconst pos = outline.length === 0 ? 0 : Math.min(...outline);\n\n\t\t\t// re-layout items.\n\t\t\tstartOutline = fill(new Array(this._columnLength), pos);\n\t\t} else {\n\t\t\tstartOutline = outline.slice();\n\t\t}\n\t\tgroups.forEach(group => {\n\t\t\tconst items = group.items;\n\t\t\tconst result = this._layout(items, startOutline, APPEND);\n\n\t\t\tgroup.outlines = result;\n\t\t\tstartOutline = result.end;\n\t\t});\n\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.GridLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.GridLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\tprivate checkColumn(item: IInfiniteGridItem) {\n\t\tconst { itemSize, margin, horizontal } = this.options;\n\t\tconst sizeName = horizontal ? \""height\"" : \""width\"";\n\t\tconst columnSize = Math.floor(itemSize || (item && item.size[sizeName]) || 0) || 0;\n\n\t\tthis._columnSize = columnSize;\n\t\tif (!columnSize) {\n\t\t\tthis._columnLength = 1;\n\t\t\treturn;\n\t\t}\n\t\tthis._columnLength = Math.max(Math.floor((this._size + margin) / (columnSize + margin)), 1);\n\t}\n\tprivate _layout(items: IInfiniteGridItem[], outline: number[], isAppend?: boolean) {\n\t\tconst length = items.length;\n\t\tconst margin = this.options.margin;\n\t\tconst align = this.options.align;\n\t\tconst style = this._style;\n\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst pos2Name = style.startPos2;\n\t\tconst columnSize = this._columnSize;\n\t\tconst columnLength = this._columnLength;\n\n\t\tconst size = this._size;\n\t\tconst viewDist = (size - (columnSize + margin) * columnLength + margin);\n\n\t\tconst pointCaculateName = isAppend ? \""min\"" : \""max\"";\n\t\tconst startOutline = outline.slice();\n\t\tconst endOutline = outline.slice();\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst point = Math[pointCaculateName](...endOutline) || 0;\n\t\t\tlet index = endOutline.indexOf(point);\n\t\t\tconst item = items[isAppend ? i : length - 1 - i];\n\t\t\tconst size1 = item.size[size1Name];\n\t\t\tconst size2 = item.size[size2Name];\n\t\t\tconst pos1 = isAppend ? point : point - margin - size1;\n\t\t\tconst endPos1 = pos1 + size1 + margin;\n\n\t\t\tif (index === -1) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tlet pos2 = (columnSize + margin) * index;\n\n\t\t\t// ALIGN\n\t\t\tif (align === CENTER) {\n\t\t\t\tpos2 += viewDist / 2;\n\t\t\t} else if (align === END) {\n\t\t\t\tpos2 += viewDist + columnSize - size2;\n\t\t\t} else if (align === JUSTIFY) {\n\t\t\t\tif (columnLength <= 1) {\n\t\t\t\t\tpos2 += viewDist / 2;\n\t\t\t\t} else {\n\t\t\t\t\tpos2 = (size - columnSize) / (columnLength - 1) * index;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// tetris\n\t\t\titem.rect = {\n\t\t\t\t[pos1Name as \""top\""]: pos1,\n\t\t\t\t[pos2Name as \""left\""]: pos2,\n\t\t\t};\n\t\t\titem.column = index;\n\t\t\tendOutline[index] = isAppend ? endPos1 : pos1;\n\t\t}\n\t\tif (!isAppend) {\n\t\t\titems.sort((a, b) => {\n\t\t\t\tconst item1pos1 = a.rect[pos1Name];\n\t\t\t\tconst item1pos2 = a.rect[pos2Name];\n\t\t\t\tconst item2pos1 = b.rect[pos1Name];\n\t\t\t\tconst item2pos2 = b.rect[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t}\n\t\t// if append items, startOutline is low, endOutline is high\n\t\t// if prepend items, startOutline is high, endOutline is low\n\t\treturn {\n\t\t\tstart: isAppend ? startOutline : endOutline,\n\t\t\tend: isAppend ? endOutline : startOutline,\n\t\t};\n\t}\n\tprivate _insert(\n\t\titems: IInfiniteGridItem[] = [],\n\t\toutline: number[] = [],\n\t\tisAppend?: boolean,\n\t\tcache?: boolean,\n\t) {\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\tlet startOutline = outline;\n\n\t\tif (!this._columnLength) {\n\t\t\tthis.checkColumn(items[0]);\n\t\t}\n\t\tif (outline.length !== this._columnLength) {\n\t\t\tstartOutline = fill(new Array(this._columnLength), outline.length ? (Math[isAppend ? \""min\"" : \""max\""](...outline) || 0) : 0);\n\t\t}\n\n\t\tconst result = this._layout(clone, startOutline, isAppend);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: result,\n\t\t};\n\t}\n}\n\nexport default GridLayout;\n"",""import { APPEND, PREPEND, DUMMY_POSITION } from \""../consts\"";\nimport { getStyleNames, assignOptions, fill, cloneItems } from \""../utils\"";\nimport { ILayout, IRectlProperties, ISize, IInfiniteGridGroup, IInfiniteGridItem } from \""../types\"";\n\nexport type FrameType = number[][];\nexport interface IFrameShape {\n\tleft?: number;\n\ttop?: number;\n\ttype: any;\n\twidth: number;\n\theight: number;\n\tindex?: number;\n}\nexport interface IFrameLayoutInterface {\n\thorizontal: boolean;\n\tmargin: number;\n\tframe: FrameType;\n\tframeFill: boolean;\n\titemSize: number | ISize;\n\t[key: string]: any;\n}\n/*\nFrame\n[\n[1, 1, 1, 1, 1],\n[0, 0, 2, 2, 2],\n[0, 0, 2, 2, 2],\n[3, 4, 5, 5, 5],\n]\n*/\nfunction disableFrame(\n\tframe: FrameType,\n\ttype: number,\n\ttop: number,\n\tleft: number,\n\twidth: number,\n\theight: number,\n) {\n\tfor (let i = top; i < top + height; ++i) {\n\t\tfor (let j = left; j < left + width; ++j) {\n\t\t\tif (type !== frame[i][j]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tframe[i][j] = 0;\n\t\t}\n\t}\n}\nfunction searchShapeInFrame(\n\tframe: FrameType,\n\ttype: number,\n\ttop: number,\n\tleft: number,\n\twidth: number,\n\theight: number,\n) {\n\tconst size: IFrameShape = {\n\t\tleft,\n\t\ttop,\n\t\ttype,\n\t\twidth: 1,\n\t\theight: 1,\n\t};\n\n\tfor (let i = left; i < width; ++i) {\n\t\tif (frame[top][i] === type) {\n\t\t\tsize.width = i - left + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\tfor (let i = top; i < height; ++i) {\n\t\tif (frame[i][left] === type) {\n\t\t\tsize.height = i - top + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\t// After finding the shape, it will not find again.\n\tdisableFrame(frame, type, top, left, size.width, size.height);\n\treturn size;\n}\nfunction getShapes(frame: FrameType) {\n\tconst height = frame.length;\n\tconst width = height ? frame[0].length : 0;\n\tconst shapes: IFrameShape[] = [];\n\n\tfor (let i = 0; i < height; ++i) {\n\t\tfor (let j = 0; j < width; ++j) {\n\t\t\tconst type = frame[i][j];\n\n\t\t\tif (!type) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Separate shapes with other numbers.\n\t\t\tshapes.push(searchShapeInFrame(frame, type, i, j, width, height));\n\t\t}\n\t}\n\tshapes.sort((a, b) => (a.type < b.type ? -1 : 1));\n\treturn {\n\t\tshapes,\n\t\twidth,\n\t\theight,\n\t};\n}\n/**\n * @classdesc FrameLayout is a layout that allows you to place cards in a given frame. It is a layout that corresponds to a level intermediate between the placement of the image directly by the designer and the layout using the algorithm.\n * @ko FrameLayout은 주어진 프레임에 맞춰 카드를 배치하는 레이아웃입니다. 디자이너가 직접 이미지를 배치하는 것과 알고리즘을 사용한 배치의 중간 정도 수준에 해당하는 레이아웃이다.\n * @class eg.InfiniteGrid.FrameLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.FrameLayout module <ko>eg.InfiniteGrid.FrameLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @param {Boolean} [options.frame=[]] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @param {Boolean} [options.frameFill=true] Make sure that the frame can be attached after the previous frame. <ko> 다음 프레임이 전 프레임에 이어 붙일 수 있는지 있는지 확인한다. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n  horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.FrameLayout, {\n  margin: 10,\n  itemSize: 200,\n  frame: [\n    [1, 1, 1, 1, 1],\n    [0, 0, 2, 2, 2],\n    [0, 0, 2, 2, 2],\n    [3, 4, 5, 5, 5],\n  ],\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.FrameLayout({\n  margin: 10,\n  itemSize: 200,\n  horizontal: true,\n  frame: [\n    [1, 1, 1, 1, 1],\n    [0, 0, 2, 2, 2],\n    [0, 0, 2, 2, 2],\n    [3, 4, 5, 5, 5],\n  ],\n});\n\n</script>\n```\n **/\nclass FrameLayout implements ILayout {\n\tpublic options: IFrameLayoutInterface;\n\tprotected _itemSize: number | ISize;\n\tprotected _shapes: {\n\t\tshapes: IFrameShape[],\n\t\twidth?: number,\n\t\theight?: number,\n\t};\n\tprotected _size: number;\n\tprotected _style: IRectlProperties;\n\n\tconstructor(options: Partial<IFrameLayoutInterface> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\titemSize: 0,\n\t\t\tframe: [],\n\t\t\tframeFill: true,\n\t\t}, options);\n\t\tconst frame = this.options.frame.map(row => row.slice());\n\n\t\tthis._itemSize = this.options.itemSize || 0;\n\t\t// divide frame into shapes.\n\t\tthis._shapes = getShapes(frame);\n\t\tthis._size = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.FrameLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\t\t\tconst outlines = this._layout(group.items, point, APPEND);\n\n\t\t\tgroup.outlines = outlines;\n\t\t\tpoint = outlines.end;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.FrameLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.FrameLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n\tprotected _getItemSize() {\n\t\tthis._checkItemSize();\n\n\t\treturn this._itemSize;\n\t}\n\tprotected _checkItemSize() {\n\t\tif (this.options.itemSize) {\n\t\t\tthis._itemSize = this.options.itemSize;\n\t\t\treturn;\n\t\t}\n\t\tconst style = this._style;\n\t\tconst size = style.size2;\n\t\tconst margin = this.options.margin;\n\n\t\t// if itemSize is not in options, caculate itemSize from size.\n\t\tthis._itemSize = (this._size + margin) / this._shapes[size] - margin;\n\t}\n\tprotected _layout(items: IInfiniteGridItem[], outline: number[] = [], isAppend?: boolean) {\n\t\tconst length = items.length;\n\t\tconst style = this._style;\n\t\tconst { margin, frameFill } = this.options;\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst pos2Name = style.startPos2;\n\t\tconst itemSize = this._getItemSize();\n\t\tconst isItemObject = typeof itemSize === \""object\"";\n\t\tconst itemSize2 = isItemObject ? (itemSize as ISize)[size2Name] : itemSize as number;\n\t\tconst itemSize1 = isItemObject ? (itemSize as ISize)[size1Name] : itemSize as number;\n\t\tconst shapesSize = this._shapes[size2Name];\n\t\tconst shapes = this._shapes.shapes;\n\t\tconst shapesLength = shapes.length;\n\t\tconst startOutline = fill(new Array(shapesSize), DUMMY_POSITION);\n\t\tconst endOutline = fill(new Array(shapesSize), DUMMY_POSITION);\n\t\tlet dist = 0;\n\t\tlet end = 0;\n\n\t\tif (!shapesLength) {\n\t\t\treturn { start: outline, end: outline };\n\t\t}\n\t\tfor (let i = 0; i < length; i += shapesLength) {\n\t\t\tfor (let j = 0; j < shapesLength && i + j < length; ++j) {\n\t\t\t\tconst item = items[i + j];\n\t\t\t\tconst shape = shapes[j];\n\t\t\t\tconst shapePos1 = shape[pos1Name];\n\t\t\t\tconst shapePos2 = shape[pos2Name];\n\t\t\t\tconst shapeSize1 = shape[size1Name];\n\t\t\t\tconst shapeSize2 = shape[size2Name];\n\t\t\t\tconst pos1 = end - dist + shapePos1 * (itemSize1 + margin);\n\t\t\t\tconst pos2 = shapePos2 * (itemSize2 + margin);\n\t\t\t\tconst size1 = shapeSize1 * (itemSize1 + margin) - margin;\n\t\t\t\tconst size2 = shapeSize2 * (itemSize2 + margin) - margin;\n\n\t\t\t\tfor (let k = shapePos2; k < shapePos2 + shapeSize2 && k < shapesSize; ++k) {\n\t\t\t\t\tif (startOutline[k] === DUMMY_POSITION) {\n\t\t\t\t\t\tstartOutline[k] = pos1;\n\t\t\t\t\t}\n\t\t\t\t\tstartOutline[k] = Math.min(startOutline[k], pos1);\n\t\t\t\t\tendOutline[k] = Math.max(endOutline[k], pos1 + size1 + margin);\n\t\t\t\t}\n\t\t\t\titem.rect = {\n\t\t\t\t\t[pos1Name]: pos1,\n\t\t\t\t\t[pos2Name]: pos2,\n\t\t\t\t\t[size1Name]: size1,\n\t\t\t\t\t[size2Name]: size2,\n\t\t\t\t};\n\t\t\t}\n\t\t\tend = Math.max(...endOutline);\n\t\t\t// check dist once\n\t\t\tif (i !== 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// find & fill empty block\n\t\t\tif (!frameFill) {\n\t\t\t\tdist = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdist = end;\n\n\t\t\tfor (let j = 0; j < shapesSize; ++j) {\n\t\t\t\tif (startOutline[j] === DUMMY_POSITION) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// the dist between frame's end outline and next frame's start outline\n\t\t\t\t// expect that next frame's start outline is startOutline[j] + end\n\t\t\t\tdist = Math.min(startOutline[j] + end - endOutline[j], dist);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\tif (startOutline[i] !== DUMMY_POSITION) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstartOutline[i] = Math.max(...startOutline);\n\t\t\tendOutline[i] = startOutline[i];\n\t\t}\n\t\t// The target outline is start outline when type is APPENDING\n\t\tconst targetOutline = isAppend ? startOutline : endOutline;\n\t\tconst prevOutlineEnd = outline.length === 0 ? 0 : Math[isAppend ? \""max\"" : \""min\""](...outline);\n\t\tlet prevOutlineDist = isAppend ? 0 : end;\n\n\t\tif (frameFill && outline.length === shapesSize) {\n\t\t\tprevOutlineDist = -DUMMY_POSITION;\n\t\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\t\tif (startOutline[i] === endOutline[i]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// if appending type is PREPEND, subtract dist from appending group's height.\n\n\t\t\t\tprevOutlineDist = Math.min(targetOutline[i] + prevOutlineEnd - outline[i], prevOutlineDist);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\tstartOutline[i] += prevOutlineEnd - prevOutlineDist;\n\t\t\tendOutline[i] += prevOutlineEnd - prevOutlineDist;\n\t\t}\n\t\titems.forEach(item => {\n\t\t\titem.rect[pos1Name] += prevOutlineEnd - prevOutlineDist;\n\t\t});\n\t\treturn {\n\t\t\tstart: startOutline.map(point => parseInt(point, 10)),\n\t\t\tend: endOutline.map(point => parseInt(point, 10)),\n\t\t};\n\t}\n\tprivate _insert(items: IInfiniteGridItem[] = [], outline: number[] = [], isAppend?: boolean, cache?: boolean) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, isAppend),\n\t\t};\n\t}\n}\n\nexport default FrameLayout;\n"",""import FrameLayout, { IFrameLayoutInterface, IFrameShape } from \""./FrameLayout\"";\nimport { fill } from \""../utils\"";\nimport { IInfiniteGridItem } from \""../types\"";\n\nfunction makeShapeOutline(\n\toutline: number[],\n\titemSize: number,\n\tcolumnLength: number,\n\tisAppend: boolean,\n) {\n\tconst point = Math[isAppend ? \""min\"" : \""max\""](...outline) || 0;\n\n\tif (outline.length !== columnLength) {\n\t\treturn fill(new Array(columnLength), 0);\n\t}\n\treturn outline.map(l => Math.floor((l - point) / itemSize));\n}\nfunction getColumn(item: IInfiniteGridItem) {\n\tif (item.column) {\n\t\treturn item.column;\n\t}\n\tlet column = 0;\n\n\tif (item.el) {\n\t\tconst dataset = item.el.dataset;\n\n\t\tif (dataset) {\n\t\t\tcolumn = parseInt(dataset.column, 10) || 1;\n\t\t} else {\n\t\t\tcolumn = parseInt(item.el.getAttribute(\""column\""), 10) || 1;\n\t\t}\n\t} else {\n\t\tcolumn = 1;\n\t}\n\titem.column = column;\n\treturn column;\n}\nexport interface ISquareLayoutOptions extends IFrameLayoutInterface {\n\tcolumn: number;\n}\n/**\n * @classdesc SquareLayout is a layout that places all cards like squares on a checkerboard, and important cards are n times larger. The main card can be enlarged, and then a small card can be placed to naturally show the relationship of the card.\n * @ko SquareLayout은 바둑판처럼 모든 카드를 정사각형으로 배치하고 중요한 카드는 크기를 N배로 키워서 보여주는 레이아웃이다. 주요 카드를 크게 표시하고, 그 다음에 작은 카드를 배치해 자연스럽게 카드의 관계를 나타낼 수 있습니다.\n * @class eg.InfiniteGrid.SquareLayout\n * @extends eg.InfiniteGrid.FrameLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.SquareLayout module <ko>eg.InfiniteGrid.SquareLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n\thorizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.SquareLayout, {\n\tmargin: 10,\n\titemSize: 200,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.SquareLayout({\n\tmargin: 10,\n\titemSize: 200,\n\thorizontal: true,\n});\n\nvar item1 = '<div data-column=\""2\""></div>';\nvar item2 = \""<div></div>\""\nlayout.append([item1, item2]);\n</script>\n```\n **/\nexport default class SquareLayout extends FrameLayout {\n\tpublic options: ISquareLayoutOptions;\n\n\tconstructor(options: Partial<ISquareLayoutOptions> = {}) {\n\t\tsuper(options);\n\t}\n\tprotected _checkItemSize() {\n\t\tconst column = this.options.column;\n\n\t\tif (!column) {\n\t\t\tsuper._checkItemSize();\n\t\t\treturn;\n\t\t}\n\t\tconst margin = this.options.margin;\n\n\t\t// if itemSize is not in options, caculate itemSize from size.\n\t\tthis._itemSize = (this._size + margin) / column - margin;\n\t}\n\tprotected _layout(\n\t\titems: IInfiniteGridItem[],\n\t\toutline: number[] = [],\n\t\tisAppend?: boolean,\n\t) {\n\t\tconst itemSize = this._getItemSize() as number;\n\t\tconst margin = this.options.margin;\n\t\tconst columnLength = this.options.column ||\n\t\t\tMath.floor((this._size + margin) / (itemSize + margin)) || 1;\n\t\tconst length = items.length;\n\t\tconst endOutline = makeShapeOutline(outline, itemSize, columnLength, isAppend);\n\t\tconst pointCaculateName = isAppend ? \""min\"" : \""max\"";\n\t\tconst shapes: IFrameShape[] = [];\n\t\tconst sign = isAppend ? 1 : -1;\n\t\tconst style = this._style;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst pos2Name = style.startPos2;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst point = Math[pointCaculateName](...endOutline);\n\t\t\tlet index = endOutline[isAppend ? \""indexOf\"" : \""lastIndexOf\""](point);\n\t\t\tconst item = items[i];\n\t\t\tconst columnWidth = item.columnWidth;\n\t\t\tconst column = (columnWidth && columnWidth[0] === columnLength &&\n\t\t\t\tcolumnWidth[1]) || getColumn(item);\n\t\t\tlet columnCount = 1;\n\n\t\t\tif (column > 1) {\n\t\t\t\tfor (let j = 1; j < column &&\n\t\t\t\t\t((isAppend && index + j < columnLength) || (!isAppend && index - j >= 0)); ++j) {\n\t\t\t\t\tif ((isAppend && endOutline[index + sign * j] <= point) ||\n\t\t\t\t\t\t(!isAppend && endOutline[index + sign * j] >= point)) {\n\t\t\t\t\t\t++columnCount;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!isAppend) {\n\t\t\t\t\tindex -= columnCount - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.columnWidth = [columnLength, columnCount];\n\t\t\tshapes.push({\n\t\t\t\twidth: columnCount,\n\t\t\t\theight: columnCount,\n\t\t\t\t[pos1Name]: point - (!isAppend ? columnCount : 0),\n\t\t\t\t[pos2Name]: index,\n\t\t\t\ttype: i + 1,\n\t\t\t\tindex: i,\n\t\t\t});\n\t\t\tfor (let j = 0; j < columnCount; ++j) {\n\t\t\t\tendOutline[index + j] = point + sign * columnCount;\n\t\t\t}\n\t\t}\n\t\tthis._shapes = {\n\t\t\tshapes,\n\t\t\t[style.size2]: columnLength,\n\t\t};\n\n\t\tconst result = super._layout(items, outline, isAppend);\n\n\t\tif (!isAppend) {\n\t\t\tshapes.sort((shape1, shape2) => {\n\t\t\t\tconst item1pos1 = shape1[pos1Name];\n\t\t\t\tconst item1pos2 = shape1[pos2Name];\n\t\t\t\tconst item2pos1 = shape2[pos1Name];\n\t\t\t\tconst item2pos2 = shape2[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t\titems.sort((a, b) => {\n\t\t\t\tconst item1pos1 = a.rect[pos1Name];\n\t\t\t\tconst item1pos2 = a.rect[pos2Name];\n\t\t\t\tconst item2pos1 = b.rect[pos1Name];\n\t\t\t\tconst item2pos2 = b.rect[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n}\n"",""import { assign } from \""../../utils\"";\n\nexport interface IBoxModel {\n\toriginWidth: number;\n\toriginHeight: number;\n\twidth: number;\n\theight: number;\n\tleft: number;\n\ttop: number;\n\titems: BoxModel[];\n}\n\nexport default class BoxModel implements IBoxModel {\n\tpublic originWidth: number;\n\tpublic originHeight: number;\n\tpublic width: number;\n\tpublic height: number;\n\tpublic left: number;\n\tpublic top: number;\n\tpublic items: BoxModel[];\n\tconstructor(options: Partial<IBoxModel>) {\n\t\tassign(this, {\n\t\t\toriginWidth: 0,\n\t\t\toriginHeight: 0,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\titems: [],\n\t\t}, options);\n\t}\n\tpublic scaleTo(width: number, height: number) {\n\t\tconst scaleX = this.width ? width / this.width : 0;\n\t\tconst scaleY = this.height ? height / this.height : 0;\n\n\t\tthis.items.forEach(v => {\n\t\t\tif (scaleX !== 0) {\n\t\t\t\tv.left *= scaleX;\n\t\t\t\tv.width *= scaleX;\n\t\t\t}\n\t\t\tif (scaleY !== 0) {\n\t\t\t\tv.top *= scaleY;\n\t\t\t\tv.height *= scaleY;\n\t\t\t}\n\t\t});\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\tpublic push(item: BoxModel) {\n\t\tthis.items.push(item);\n\t}\n\tpublic getOriginSize() {\n\t\treturn this.originWidth * this.originHeight;\n\t}\n\tpublic getSize() {\n\t\treturn this.width * this.height;\n\t}\n\tpublic getOriginRatio() {\n\t\treturn (this.originHeight === 0) ? 0 : this.originWidth / this.originHeight;\n\t}\n\tpublic getRatio() {\n\t\treturn (this.height === 0) ? 0 : this.width / this.height;\n\t}\n}\n"",""import BoxModel from \""./lib/BoxModel\"";\nimport { APPEND, PREPEND } from \""../consts\"";\nimport { getStyleNames, assignOptions, toZeroArray, cloneItems } from \""../utils\"";\nimport { ILayout, IRectlProperties, ISize, IInfiniteGridItem, IInfiniteGridGroup } from \""../types\"";\n\nfunction getCost(originLength: number, length: number) {\n\tlet cost = originLength / length;\n\n\tif (cost < 1) {\n\t\tcost = 1 / cost;\n\t}\n\n\treturn cost - 1;\n}\nfunction fitArea(\n\titem: BoxModel,\n\tbestFitArea: BoxModel,\n\titemFitSize: ISize,\n\tcontainerFitSize: ISize,\n\tlayoutVertical: boolean,\n) {\n\titem.height = itemFitSize.height;\n\titem.width = itemFitSize.width;\n\tbestFitArea.height = containerFitSize.height;\n\tbestFitArea.width = containerFitSize.width;\n\n\tif (layoutVertical) {\n\t\titem.top = bestFitArea.top + bestFitArea.height;\n\t\titem.left = bestFitArea.left;\n\t} else {\n\t\titem.left = bestFitArea.left + bestFitArea.width;\n\t\titem.top = bestFitArea.top;\n\t}\n}\n\n/**\n * @classdesc The PackingLayout is a layout that shows the important cards bigger without sacrificing the weight of the cards. Rows and columns are separated so that cards are dynamically placed within the horizontal and vertical space rather than arranged in an orderly fashion.\n * @ko PackingLayout은 카드의 본래 크기에 따른 비중을 해치지 않으면서 중요한 카드는 더 크게 보여 주는 레이아웃이다. 행과 열이 구분돼 이미지를 정돈되게 배치하는 대신 가로세로 일정 공간 내에서 동적으로 카드를 배치한다.\n * @class eg.InfiniteGrid.PackingLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.PackingLayout module <ko>eg.InfiniteGrid.PackingLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.aspectRatio=1] The aspect ratio of the group <ko> 그룹의 가로 세로 비 </ko>\n * @param {Boolean} [options.sizeWeight=1] The size weight when placing an image <ko> 이미지를 배치할 때 사이즈 가중치 </ko>\n * @param {Boolean} [options.ratioWeight=1] The ratio weight when placing an image <ko> 이미지를 배치할 때 비율 가중치 </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n  horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.PackingLayout, {\n  margin: 10,\n  aspectRatio: 1,\n  sizeWeight: 1,\n  ratioWeight: 2,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.PackingLayout({\n  horizontal: true,\n  margin: 10,\n  aspectRatio: 1,\n  sizeWeight: 1,\n  ratioWeight: 2,\n});\n\n</script>\n```\n **/\nclass PackingLayout implements ILayout {\n\tpublic options: {\n\t\thorizontal: boolean,\n\t\tmargin: number,\n\t\taspectRatio: number,\n\t\tsizeWeight: number,\n\t\tratioWeight: number,\n\t};\n\tprivate _size: number;\n\tprivate _style: IRectlProperties;\n\tconstructor(options: Partial<PackingLayout[\""options\""]> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\taspectRatio: 1,\n\t\t\tsizeWeight: 1,\n\t\t\tratioWeight: 1,\n\t\t}, options);\n\t\tthis._size = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.PackingLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.PackingLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.PackingLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.PackingLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\t\t\tconst outlines = this._layout(group.items, point, APPEND);\n\n\t\t\tgroup.outlines = outlines;\n\t\t\tpoint = outlines.end;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.PackingLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.PackingLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\tprivate _findBestFitArea(container: BoxModel, item: BoxModel) {\n\t\tif (container.getRatio() === 0) { // 아이템 최초 삽입시 전체영역 지정\n\t\t\tcontainer.originWidth = item.width;\n\t\t\tcontainer.originHeight = item.height;\n\t\t\tcontainer.width = item.width;\n\t\t\tcontainer.height = item.height;\n\t\t\treturn;\n\t\t}\n\n\t\tlet bestFitArea = null;\n\t\tlet minCost = 10000000;\n\t\tlet layoutVertical = false;\n\t\tconst itemFitSize: ISize = {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t};\n\t\tconst containerFitSize: ISize = {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t};\n\t\tconst { sizeWeight, ratioWeight } = this.options;\n\n\t\tcontainer.items.forEach(v => {\n\t\t\tconst containerSizeCost = getCost(v.getOriginSize(), v.getSize()) * sizeWeight;\n\t\t\tconst containerRatioCost = getCost(v.getOriginRatio(), v.getRatio()) * ratioWeight;\n\t\t\tconst width = v.width;\n\t\t\tconst height = v.height;\n\t\t\tlet cost;\n\n\t\t\tfor (let i = 0; i < 2; ++i) {\n\t\t\t\tlet itemWidth;\n\t\t\t\tlet itemHeight;\n\t\t\t\tlet containerWidth;\n\t\t\t\tlet containerHeight;\n\n\t\t\t\tif (i === 0) {\n\t\t\t\t\t// 상하에 아이템 추가\n\t\t\t\t\titemWidth = width;\n\t\t\t\t\titemHeight = height * (item.height / (v.originHeight + item.height));\n\t\t\t\t\tcontainerWidth = width;\n\t\t\t\t\tcontainerHeight = height - itemHeight;\n\t\t\t\t} else {\n\t\t\t\t\t// 좌우에 아이템 추가\n\t\t\t\t\titemHeight = height;\n\t\t\t\t\titemWidth = width * (item.width / (v.originWidth + item.width));\n\t\t\t\t\tcontainerHeight = height;\n\t\t\t\t\tcontainerWidth = width - itemWidth;\n\t\t\t\t}\n\n\t\t\t\tconst itemSize = itemWidth * itemHeight;\n\t\t\t\tconst itemRatio = itemWidth / itemHeight;\n\t\t\t\tconst containerSize = containerWidth * containerHeight;\n\t\t\t\tconst containerRatio = containerHeight / containerHeight;\n\n\t\t\t\tcost = getCost(item.getSize(), itemSize) * sizeWeight;\n\t\t\t\tcost += getCost(item.getRatio(), itemRatio) * ratioWeight;\n\t\t\t\tcost += getCost(v.getOriginSize(), containerSize) * sizeWeight - containerSizeCost;\n\t\t\t\tcost += getCost(v.getOriginRatio(), containerRatio) * ratioWeight - containerRatioCost;\n\n\t\t\t\tif (cost === Math.min(cost, minCost)) {\n\t\t\t\t\tminCost = cost;\n\t\t\t\t\tbestFitArea = v;\n\t\t\t\t\tlayoutVertical = (i === 0);\n\t\t\t\t\titemFitSize.width = itemWidth;\n\t\t\t\t\titemFitSize.height = itemHeight;\n\t\t\t\t\tcontainerFitSize.width = containerWidth;\n\t\t\t\t\tcontainerFitSize.height = containerHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfitArea(item, bestFitArea, itemFitSize, containerFitSize, layoutVertical);\n\t}\n\tprivate _layout(items: IInfiniteGridItem[], outline: number[] = [], isAppend?: boolean) {\n\t\tconst style = this._style;\n\t\tconst { horizontal, aspectRatio, margin } = this.options;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst containerWidth = this._size * (horizontal ? aspectRatio : 1);\n\t\tconst containerHeight = this._size / (horizontal ? 1 : aspectRatio);\n\t\tconst containerSize1 = horizontal ? containerWidth : containerHeight;\n\t\tconst prevOutline = toZeroArray(outline);\n\t\tconst start = isAppend ? Math.max(...prevOutline) :\n\t\t\tMath.min(...prevOutline) - containerSize1 - margin;\n\t\tconst end = start + containerSize1 + margin;\n\t\tconst container = new BoxModel({});\n\n\t\titems.forEach(item => {\n\t\t\tconst { width, height } = item.orgSize;\n\t\t\tconst model = new BoxModel({\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\toriginWidth: width,\n\t\t\t\toriginHeight: height,\n\t\t\t});\n\n\t\t\tthis._findBestFitArea(container, model);\n\t\t\tcontainer.push(model);\n\t\t\tcontainer.scaleTo(containerWidth + margin, containerHeight + margin);\n\t\t});\n\t\titems.forEach((item, i) => {\n\t\t\tconst boxItem = container.items[i];\n\t\t\tconst width = boxItem.width;\n\t\t\tconst height = boxItem.height;\n\t\t\tconst top = boxItem.top;\n\t\t\tconst left = boxItem.left;\n\n\t\t\titem.rect = { top, left, width: width - margin, height: height - margin };\n\t\t\titem.rect[pos1Name] += start;\n\t\t});\n\n\t\treturn {\n\t\t\tstart: [start],\n\t\t\tend: [end],\n\t\t};\n\t}\n\tprivate _insert(items: IInfiniteGridItem[] = [], outline: number[] = [], isAppend?: boolean, cache?: boolean) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, isAppend),\n\t\t};\n\t}\n}\n\nexport default PackingLayout;\n"",""/* eslint-disable */\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nfunction single_source_shortest_paths(\n\tgraph: (x: string) => ({ [key: string]: number }),\n\ts: string,\n\td: string,\n) {\n\t// Predecessor map for each node that has been encountered.\n\t// node ID => predecessor node ID\n\tconst predecessors: { [key: string]: string } = {};\n\t// Costs of shortest paths from s to all nodes encountered.\n\t// node ID => cost\n\tconst costs: { [key: string]: number } = {};\n\tcosts[s] = 0;\n\n\t// Costs of shortest paths from s to all nodes encountered; differs from\n\t// `costs` in that it provides easy access to the node that currently has\n\t// the known shortest path from s.\n\t// XXX: Do we actually need both `costs` and `open`?\n\tconst open = new BinaryHeap<{ value: string, cost: number }>(x => x.cost);\n\topen.push({ value: s, cost: 0 });\n\n\tlet closest;\n\tlet u;\n\tlet cost_of_s_to_u;\n\tlet adjacent_nodes;\n\tlet cost_of_e;\n\tlet cost_of_s_to_u_plus_cost_of_e;\n\tlet cost_of_s_to_v;\n\tlet first_visit: boolean;\n\n\twhile (open.size()) {\n\t\t// In the nodes remaining in graph that have a known cost from s,\n\t\t// find the node, u, that currently has the shortest path from s.\n\t\tclosest = open.pop();\n\t\tu = closest.value;\n\t\tcost_of_s_to_u = closest.cost;\n\n\t\t// Get nodes adjacent to u...\n\t\tadjacent_nodes = graph(u) || {};\n\n\t\t// ...and explore the edges that connect u to those nodes, updating\n\t\t// the cost of the shortest paths to any or all of those nodes as\n\t\t// necessary. v is the node across the current edge from u.\n\t\tfor (const v in adjacent_nodes) {\n\t\t\t// Get the cost of the edge running from u to v.\n\t\t\tcost_of_e = adjacent_nodes[v];\n\n\t\t\t// Cost of s to u plus the cost of u to v across e--this is *a*\n\t\t\t// cost from s to v that may or may not be less than the current\n\t\t\t// known cost to v.\n\t\t\tcost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n\t\t\t// If we haven't visited v yet OR if the current known cost from s to\n\t\t\t// v is greater than the new cost we just found (cost of s to u plus\n\t\t\t// cost of u to v across e), update v's cost in the cost list and\n\t\t\t// update v's predecessor in the predecessor list (it's now u).\n\t\t\tcost_of_s_to_v = costs[v];\n\t\t\tfirst_visit = (typeof costs[v] === \""undefined\"");\n\t\t\tif (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n\t\t\t\tcosts[v] = cost_of_s_to_u_plus_cost_of_e;\n\t\t\t\topen.push({ value: v, cost: cost_of_s_to_u_plus_cost_of_e });\n\t\t\t\tpredecessors[v] = u;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof costs[d] === \""undefined\"") {\n\t\tconst msg = [\""Could not find a path from \"", s, \"" to \"", d, \"".\""].join(\""\"");\n\t\tthrow new Error(msg);\n\t}\n\n\treturn predecessors;\n}\nfunction extract_shortest_path_from_predecessor_list(\n\tpredecessors: { [key: string]: string },\n\td: string,\n) {\n\tconst nodes: string[] = [];\n\tlet u = d;\n\n\twhile (u) {\n\t\tnodes.push(u);\n\t\tu = predecessors[u];\n\t}\n\tnodes.reverse();\n\treturn nodes;\n}\nfunction find_path(\n\tgraph: (x: string) => ({ [key: string]: number }),\n\ts: string,\n\td: string,\n) {\n\tconst predecessors = single_source_shortest_paths(graph, s, d);\n\n\treturn extract_shortest_path_from_predecessor_list(predecessors, d);\n}\n\nclass BinaryHeap<T> {\n\tprivate content: T[];\n\tprivate scoreFunction: (x: T) => number;\n\n\tconstructor(scoreFunction: (x: T) => number) {\n\t\tthis.content = [];\n\t\tthis.scoreFunction = scoreFunction;\n\t}\n\tpublic push(element: T) {\n\t\t// Add the new element to the end of the array.\n\t\tthis.content.push(element);\n\t\t// Allow it to bubble up.\n\t\tthis.bubbleUp(this.content.length - 1);\n\t}\n\tpublic pop() {\n\t\t// Store the first element so we can return it later.\n\t\tconst result = this.content[0];\n\t\t// Get the element at the end of the array.\n\t\tconst end = this.content.pop();\n\t\t// If there are any elements left, put the end element at the\n\t\t// start, and let it sink down.\n\t\tif (this.content.length > 0) {\n\t\t\tthis.content[0] = end;\n\t\t\tthis.sinkDown(0);\n\t\t}\n\t\treturn result;\n\t}\n\tpublic size() {\n\t\treturn this.content.length;\n\t}\n\tpublic bubbleUp(_n: number) {\n\t\tlet n = _n;\n\t\t// Fetch the element that has to be moved.\n\t\tconst element = this.content[n];\n\t\t// When at 0, an element can not go up any further.\n\t\twhile (n > 0) {\n\t\t\t// Compute the parent element's index, and fetch it.\n\t\t\tconst parentN = Math.floor((n + 1) / 2) - 1;\n\t\t\tconst parent = this.content[parentN];\n\n\t\t\t// Swap the elements if the parent is greater.\n\t\t\tif (this.scoreFunction(element) < this.scoreFunction(parent)) {\n\t\t\t\tthis.content[parentN] = element;\n\t\t\t\tthis.content[n] = parent;\n\t\t\t\t// Update 'n' to continue at the new position.\n\t\t\t\tn = parentN;\n\t\t\t} else {\n\t\t\t\t// Found a parent that is less, no need to move it further.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tpublic sinkDown(n: number) {\n\t\t// Look up the target element and its score.\n\t\tconst length = this.content.length;\n\t\tconst element = this.content[n];\n\t\tconst elemScore = this.scoreFunction(element);\n\t\tlet child1Score;\n\n\t\twhile (true) {\n\t\t\t// Compute the indices of the child elements.\n\t\t\tconst child2N = (n + 1) * 2;\n\t\t\tconst child1N = child2N - 1;\n\t\t\t// This is used to store the new position of the element,\n\t\t\t// if any.\n\t\t\tlet swap = null;\n\t\t\t// If the first child exists (is inside the array)...\n\t\t\tif (child1N < length) {\n\t\t\t\t// Look it up and compute its score.\n\t\t\t\tconst child1 = this.content[child1N];\n\t\t\t\tchild1Score = this.scoreFunction(child1);\n\t\t\t\t// If the score is less than our element's, we need to swap.\n\t\t\t\tif (child1Score < elemScore) {\n\t\t\t\t\tswap = child1N;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Do the same checks for the other child.\n\t\t\tif (child2N < length) {\n\t\t\t\tconst child2 = this.content[child2N];\n\t\t\t\tconst child2Score = this.scoreFunction(child2);\n\n\t\t\t\tif (child2Score < (swap == null ? elemScore : child1Score)) {\n\t\t\t\t\tswap = child2N;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the element needs to be moved, swap it, and continue.\n\t\t\tif (swap !== null) {\n\t\t\t\tthis.content[n] = this.content[swap];\n\t\t\t\tthis.content[swap] = element;\n\t\t\t\tn = swap;\n\t\t\t} else {\n\t\t\t\t// Otherwise, we are done.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport { find_path };\n"",""import { find_path } from \""./lib/dijkstra\"";\nimport { APPEND, PREPEND } from \""../consts\"";\nimport { getStyleNames, assignOptions, cloneItems } from \""../utils\"";\nimport { ILayout, IRectlProperties, SizeType, IInfiniteGridItem, IInfiniteGridGroup } from \""../types\"";\n\n/**\n * @classdesc 'justified' is a printing term with the meaning that 'it fits in one row wide'. JustifiedLayout is a layout that the card is filled up on the basis of a line given a size.\n * @ko 'justified'는 '1행의 너비에 맞게 꼭 들어찬'이라는 의미를 가진 인쇄 용어다. 용어의 의미대로 너비가 주어진 사이즈를 기준으로 카드가 가득 차도록 배치하는 레이아웃이다.\n * @class eg.InfiniteGrid.JustifiedLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.JustifiedLayout module <ko>eg.InfiniteGrid.JustifiedLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Number} [options.minSize=0] Minimum size of item to be resized <ko> 아이템이 조정되는 최소 크기 </ko>\n * @param {Number} [options.maxSize=0] Maximum size of item to be resized <ko> 아이템이 조정되는 최대 크기 </ko>\n * @param {Array|Number} [options.column=[1, 8]] The number of items in a line <ko> 한 줄에 들어가는 아이템의 개수 </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n  horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.JustifiedLayout, {\n  margin: 10,\n  minSize: 100,\n  maxSize: 300,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.JustifiedLayout({\n  margin: 10,\n  minSize: 100,\n  maxSize: 300,\n  column: 5,\n  horizontal: true,\n});\n\n</script>\n```\n **/\nclass JustifiedLayout implements ILayout {\n\tpublic options: {\n\t\tmargin: number;\n\t\tminSize: number;\n\t\tmaxSize: number;\n\t\tcolumn: number | number[];\n\t\thorizontal: boolean;\n\t};\n\tprivate _style: IRectlProperties;\n\tprivate _size: number;\n\n\tconstructor(options: Partial<JustifiedLayout[\""options\""]> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\tminSize: 0,\n\t\t\tmaxSize: 0,\n\t\t\tcolumn: [1, 8],\n\t\t}, options);\n\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t\tthis._size = 0;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.JustifiedLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.JustifiedLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.JustifiedLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.JustifiedLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.JustifiedLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.JustifiedLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\t\t\tconst outlines = this._layout(group.items, point, APPEND);\n\n\t\t\tgroup.outlines = outlines;\n\t\t\tpoint = outlines.end;\n\t\t}\n\t\treturn this;\n\t}\n\tprivate _layout(items: IInfiniteGridItem[], outline: number[], isAppend?: boolean) {\n\t\tconst style = this._style;\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst startIndex = 0;\n\t\tconst endIndex = items.length;\n\t\tconst column = this.options.column;\n\t\tconst columns: number[] = (typeof column === \""object\"") ? column : [column, column];\n\n\t\tconst graph = (_start: string) => {\n\t\t\tconst results: { [key: string]: number } = {};\n\t\t\tconst start = +_start.replace(/[^0-9]/g, \""\"");\n\t\t\tconst length = endIndex + 1;\n\n\t\t\tfor (let i = Math.min(start + columns[0], length - 1); i < length; ++i) {\n\t\t\t\tif (i - start > columns[1]) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlet cost = this._getCost(items, start, i, size1Name, size2Name);\n\n\t\t\t\tif (cost === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (cost < 0 && i === length - 1) {\n\t\t\t\t\tcost = 0;\n\t\t\t\t}\n\t\t\t\tresults[`${i}`] = Math.pow(cost, 2);\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\t\t// shortest path for items' total height.\n\t\tconst path = find_path(graph, `${startIndex}`, `${endIndex}`);\n\n\t\treturn this._setStyle(items, path, outline, isAppend);\n\t}\n\tprivate _getSize(items: IInfiniteGridItem[], size1Name: SizeType, size2Name: SizeType) {\n\t\tconst margin = this.options.margin;\n\t\tconst size = items.reduce((sum, item) => sum +\n\t\t\t(item.orgSize[size2Name]) / item.orgSize[size1Name], 0);\n\n\t\treturn (this._size - margin * (items.length - 1)) / size;\n\t}\n\tprivate _getCost(\n\t\titems: IInfiniteGridItem[],\n\t\ti: number,\n\t\tj: number,\n\t\tsize1Name: SizeType,\n\t\tsize2Name: SizeType,\n\t) {\n\t\tconst size = this._getSize(items.slice(i, j), size1Name, size2Name);\n\t\tconst min = this.options.minSize || 0;\n\t\tconst max = this.options.maxSize || Infinity;\n\n\t\tif (isFinite(max)) {\n\t\t\t// if this size is not in range, the cost increases sharply.\n\t\t\tif (size < min) {\n\t\t\t\treturn Math.pow(size - min, 2) + Math.pow(max, 2);\n\t\t\t} else if (size > max) {\n\t\t\t\treturn Math.pow(size - max, 2) + Math.pow(max, 2);\n\t\t\t} else {\n\t\t\t\t// if this size in range, the cost is negative or low.\n\t\t\t\treturn Math.min(size - max, min - size);\n\t\t\t}\n\t\t}\n\t\t// if max is infinite type, caculate cost only with \""min\"".\n\t\tif (size < min) {\n\t\t\treturn Math.max(Math.pow(min, 2), Math.pow(size, 2));\n\t\t}\n\t\treturn size - min;\n\t}\n\tprivate _setStyle(\n\t\titems: IInfiniteGridItem[],\n\t\tpath: string[],\n\t\toutline: number[] = [],\n\t\tisAppend?: boolean,\n\t) {\n\t\tconst style = this._style;\n\t\t// if direction is vertical\n\t\t// startPos1 : top, endPos1 : bottom\n\t\t// size1 : height\n\t\t// startPos2 : left, endPos2 : right\n\t\t// size2 : width\n\n\t\t// if direction is horizontal\n\t\t// startPos1 : left, endPos1 : right\n\t\t// size1 : width\n\t\t// startPos2 : top, endPos2 : bottom\n\t\t// size2 : height\n\t\tconst pos1Name = style.startPos1;\n\t\tconst size1Name = style.size1;\n\t\tconst pos2Name = style.startPos2;\n\t\tconst size2Name = style.size2;\n\t\tconst length = path.length;\n\t\tconst margin = this.options.margin;\n\t\tconst startPoint = outline[0] || 0;\n\t\tlet endPoint = startPoint;\n\t\tlet height = 0;\n\n\t\tfor (let i = 0; i < length - 1; ++i) {\n\t\t\tconst path1 = parseInt(path[i], 10);\n\t\t\tconst path2 = parseInt(path[i + 1], 10);\n\t\t\t// pathItems(path1 to path2) are in 1 line.\n\t\t\tconst pathItems = items.slice(path1, path2);\n\t\t\tconst pathItemsLength = pathItems.length;\n\t\t\tconst size1 = this._getSize(pathItems, size1Name, size2Name);\n\t\t\tconst pos1 = endPoint;\n\n\t\t\tfor (let j = 0; j < pathItemsLength; ++j) {\n\t\t\t\tconst item = pathItems[j];\n\t\t\t\tconst size2 = item.orgSize[size2Name] / item.orgSize[size1Name] * size1;\n\t\t\t\t// item has margin bottom and right.\n\t\t\t\t// first item has not margin.\n\t\t\t\tconst prevItemRect = j === 0 ? 0 : pathItems[j - 1].rect;\n\t\t\t\tconst pos2 = (prevItemRect ? prevItemRect[pos2Name] + prevItemRect[size2Name] + margin : 0);\n\n\t\t\t\titem.rect = {\n\t\t\t\t\t[pos1Name]: pos1,\n\t\t\t\t\t[pos2Name]: pos2,\n\t\t\t\t\t[size1Name]: size1,\n\t\t\t\t\t[size2Name]: size2,\n\t\t\t\t};\n\t\t\t}\n\t\t\theight += margin + size1;\n\t\t\tendPoint = startPoint + height;\n\t\t}\n\t\tconst itemsLength = items.length;\n\n\t\tif (isAppend) {\n\t\t\t// previous group's end outline is current group's start outline\n\t\t\treturn {\n\t\t\t\tstart: [startPoint],\n\t\t\t\tend: [endPoint],\n\t\t\t};\n\t\t}\n\t\t// for prepend, only substract height from position.\n\t\t// always start is lower than end.\n\n\t\tfor (let i = 0; i < itemsLength; ++i) {\n\t\t\tconst item = items[i];\n\n\t\t\t// move items as long as height for prepend\n\t\t\titem.rect[pos1Name] -= height;\n\t\t}\n\t\treturn {\n\t\t\tstart: [startPoint - height],\n\t\t\tend: [startPoint], // endPoint - height = startPoint\n\t\t};\n\t}\n\tprivate _insert(items: IInfiniteGridItem[] = [], outline: number[] = [], isAppend?: boolean, cache?: boolean) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, isAppend),\n\t\t};\n\t}\n}\n\nexport default JustifiedLayout;\n"",""/**\n * Copyright (c) NAVER Corp.\n * egjs-infinitegrid projects are licensed under the MIT license\n */\nimport InfiniteGrid from \""./InfiniteGrid\"";\nimport GridLayout from \""./layouts/GridLayout\"";\nimport FrameLayout from \""./layouts/FrameLayout\"";\nimport SquareLayout from \""./layouts/SquareLayout\"";\nimport PackingLayout from \""./layouts/PackingLayout\"";\nimport JustifiedLayout from \""./layouts/JustifiedLayout\"";\nimport ImageLoaded from \""./ImageLoaded\"";\nimport AutoSizer from \""./AutoSizer\"";\nimport DOMRenderer from \""./DOMRenderer\"";\nimport Watcher from \""./Watcher\"";\nimport ItemManager from \""./ItemManager\"";\nimport Infinite from \""./Infinite\"";\nimport LayoutManager from \""./LayoutManager\"";\n\n// fix for IE8\n(InfiniteGrid as any).GridLayout = GridLayout;\n(InfiniteGrid as any).FrameLayout = FrameLayout;\n(InfiniteGrid as any).SquareLayout = SquareLayout;\n(InfiniteGrid as any).PackingLayout = PackingLayout;\n(InfiniteGrid as any).JustifiedLayout = JustifiedLayout;\n(InfiniteGrid as any).AutoSizer = AutoSizer;\n(InfiniteGrid as any).ImageLoaded = ImageLoaded;\n(InfiniteGrid as any).Watcher = Watcher;\n(InfiniteGrid as any).ItemManager = ItemManager;\n(InfiniteGrid as any).Infinite = Infinite;\n(InfiniteGrid as any).LayoutManager = LayoutManager;\n(InfiniteGrid as any).DOMRenderer = DOMRenderer;\n(InfiniteGrid as any).default = InfiniteGrid;\n\nexport default InfiniteGrid;\n""],""names"":[""isUndefined"",""value"",""Component"",""_eventHandler"",""options"",""_proto"",""prototype"",""trigger"",""eventName"",""customEvent"",""handlerList"",""hasHandlerList"",""length"",""concat"",""eventType"",""isCanceled"",""arg"",""i"",""stop"",""currentTarget"",""_len"",""arguments"",""restParam"",""Array"",""_key"",""apply"",""once"",""handlerToAttach"",""eventHash"",""self"",""on"",""listener"",""_len2"",""_key2"",""off"",""hasOn"",""name"",""push"",""handlerToDetach"",""undefined"",""k"",""handlerFunction"",""splice"",""VERSION"",""win"",""window"",""document"",""navigator"",""userAgent"",""ua"",""SUPPORT_COMPUTEDSTYLE"",""SUPPORT_ADDEVENTLISTENER"",""SUPPORT_PASSIVE"",""supportsPassiveOption"",""Object"",""defineProperty"",""addEventListener"",""get"",""e"",""IS_IE"",""test"",""IS_IOS"",""IS_ANDROID2"",""CONTAINER_CLASSNAME"",""IGNORE_CLASSNAME"",""TRANSITION_NAME"",""APPEND"",""PREPEND"",""VERTICAL"",""HORIZONTAL"",""CACHE"",""NO_CACHE"",""TRUSTED"",""NO_TRUSTED"",""MULTI"",""DUMMY_POSITION"",""GROUPKEY_ATT"",""DEFAULT_OPTIONS"",""horizontal"",""margin"",""agent"",""toLowerCase"",""isMobile"",""ALIGN"",""START"",""CENTER"",""END"",""JUSTIFY"",""IDLE"",""LOADING_APPEND"",""LOADING_PREPEND"",""PROCESSING"",""webkit"",""exec"",""WEBKIT_VERSION"",""parseInt"",""DEFENSE_BROWSER"",""TRANSFORM"",""TRANSITION"",""TRANSITION_END"",""nodes"",""array"",""len"",""html"",""match"",""param"",""multi"",""el"",""matchHTML"",""dummy"",""createElement"",""innerHTML"",""childNodes"",""querySelectorAll"",""toArray"",""isWindow"",""isJQuery"",""$"",""isArray"",""map"",""v"",""nodeName"",""nodeType"",""element"",""type"",""handler"",""eventListenerOptions"",""attachEvent"",""removeEventListener"",""detachEvent"",""callback"",""removeEvent"",""addEvent"",""prop"",""body"",""documentElement"",""x"",""y"",""scroll"",""scrollLeft"",""scrollTop"",""scrollBy"",""getComputedStyle"",""currentStyle"",""isOffset"",""isDocument"",""doc"",""Math"",""max"",""size"",""clientRect"",""getBoundingClientRect"",""right"",""left"",""bottom"",""top"",""cssSize"",""getStyles"",""indexOf"",""parseFloat"",""_getSize"",""width"",""outerWidth"",""height"",""outerHeight"",""STYLE"",""vertical"",""startPos1"",""endPos1"",""size1"",""startPos2"",""endPos2"",""size2"",""isHorizontal"",""target"",""_i"",""sources"",""forEach"",""source"",""key"",""defaultOptions"",""assign"",""outline"",""items"",""item"",""jQuery"",""constructor"",""jquery"",""arr"",""clear"",""ItemManager"",""elements"",""selector"",""_a"",""groupKey"",""filted"",""selectItems"",""content"",""outerHTML"",""rect"",""filter"",""classNames"",""className"",""split"",""some"",""c"",""data"",""property"",""reduce"",""acc"",""startKey"",""endKey"",""datas"",""_data"",""startIndex"",""endIndex"",""slice"",""item2"",""data2"",""status"",""set"",""base"",""outlines"",""start"",""end"",""pluck"",""index"",""cursor"",""targetValue"",""Infinity"",""getOutline"",""getEdgeIndex"",""startCursor"",""endCursor"",""group"",""groups"",""pos"",""layouted"",""unshift"",""getAttribute"",""String"",""idx"",""orgSize"",""container"",""style"",""position"",""children"",""appendChild"",""properties"",""styles"",""p"",""transitionDuration"",""pos1"",""pos2"",""isEqualSize"",""isConstantSize"",""view"",""viewport"",""_init"",""resize"",""DOMRenderer"",""prevRect"",""setAttribute"",""render"",""setTransition"",""addOnceEvent"",""itemRect"",""renderItem"",""removeElement"",""parentNode"",""removeChild"",""noElementItems"",""replace"",""join"",""cssText"",""_size"",""getSize"",""_insert"",""isAppend"",""createElements"",""renderItems"",""_calcSize"",""isResize"",""innerWidth"",""innerHeight"",""_orgStyle"",""overflowX"",""overflowY"",""createContainer"",""df"",""createDocumentFragment"",""insertBefore"",""firstChild"",""check"",""isOverflowScroll"",""_timer"",""reset"",""_containerOffset"",""_view"",""_isScrollIssue"",""_onCheck"",""bind"",""_onResize"",""setScrollPos"",""_prevPos"",""scrollPos"",""getOrgScrollPos"",""applyScrollPos"",""scrollTo"",""arrPos"",""rawPos"",""getContainerOffset"",""_getOffset"",""prevPos"",""getScrollPos"",""orgScrollPos"",""isForward"",""clearTimeout"",""setTimeout"",""_this"",""threshold"",""endScrollPos"",""min"",""itemManger"",""useRecycle"",""append"",""prepend"",""recycle"",""_items"",""_status"",""_b"",""visibles"",""isVisible"",""lastIndexOf"",""setCursor"",""getCursor"",""startEdgePos"",""endEdgePos"",""startPos"",""endPos"",""cache"",""cachedAppendData"",""cachedPrependData"",""isPrepend"",""getEdgeOutline"",""result"",""remove"",""AutoSizer"",""resizeAll"",""prefix"",""onResize"",""__PREFIX__"",""isFixed"",""fixed"",""elementPrefix"",""dataWidth"",""dataHeight"",""CHECK_ALL"",""CHECK_ONLY_ERROR"",""ImageLoaded"",""checklist"",""complete"",""error"",""checkCount"",""endCount"",""checkEnd"",""checkImage"",""onError"",""itemIndex"",""__ITEM_INDEX__"",""onCheck"",""srcElement"",""isDataAttribute"",""images"",""naturalWidth"",""add"",""tagName"",""checkImageLoaded"",""sum"",""waitImageLoaded"",""renderer"",""attributePrefix"",""_renderer"",""_layout"",""layout"",""setSize"",""callbacks"",""isUpdate"",""isRelayout"",""layoutGroups"",""updateSize"",""itemManager"",""groupIndex"",""prevGroup"",""getData"",""groupInfos"",""groupOutline"",""every"",""groupItems"",""groupInfo"",""removeTarget"",""replaceTarget"",""errorIndex"",""removeItem"",""hasTarget"",""src"",""removeAttribute"",""replaceItem"",""removeTargetLength"",""replaceTargetLength"",""layoutedItems"",""_c"",""_d"",""_e"",""_f"",""checkGroups"",""reverse"",""_complete"",""_error"",""_end"",""tslib_1"",""_super"",""itemSelector"",""useFit"",""_reset"",""_loadingBar"",""_watcher"",""Watcher"",""_infinite"",""Infinite"",""_requestAppend"",""_requestPrepend"",""_recycle"",""_manager"",""LayoutKlass"",""LayoutMananger"",""setLayout"",""_setSize"",""getViewportSize"",""includeCached"",""getVisibleItems"",""infinite"",""getItems"",""isLayoutAll"",""isChildren"",""getContainerSize"",""setContainerSize"",""_fit"",""clearOutlines"",""_onLayoutComplete"",""fromCache"",""isTrusted"",""isLayout"",""getVisibleData"",""getStatus"",""watcher"",""processingStatus"",""setStatus"",""visibleItems"",""createAndInsert"",""isReLayout"",""isNeededResize"",""_postLayout"",""newItems"",""_appendLoadingBar"",""userLoadingBar"",""loadingBarObj"",""loadingSize"",""loadingStyle"",""loadingBar"",""_isProcessing"",""_isLoading"",""_getLoadingStatus"",""userStyle"",""display"",""_process"",""_renderLoading"",""_setContainerSize"",""_getEdgeValue"",""_fitItems"",""isProcessing"",""getItem"",""_updateItem"",""isInCursor"",""fit"",""_scrollTo"",""moveCache"",""moveItem"",""_postCache"",""destroy"",""getMaxEdgeValue"",""getViewSize"",""getEdgeValue"",""isAdd"",""from"",""method"",""removeItems"",""posName"",""resetSize"",""requestStartCursor"",""requestEndCursor"",""_setScrollPos"",""_onImageError"",""getGroupKeys"",""pop"",""startLoading"",""endLoading"",""shift"",""viewSize"",""isScroll"",""InfiniteGrid"",""assignOptions"",""align"",""itemSize"",""_columnSize"",""_columnLength"",""_style"",""getStyleNames"",""firstItem"",""checkColumn"",""startOutline"",""fill"",""sizeName"",""columnSize"",""floor"",""size1Name"",""size2Name"",""pos1Name"",""pos2Name"",""columnLength"",""viewDist"",""pointCaculateName"",""endOutline"",""point"",""column"",""sort"",""a"",""b"",""item1pos1"",""item1pos2"",""item2pos1"",""item2pos2"",""clone"",""cloneItems"",""frame"",""j"",""disableFrame"",""shapes"",""searchShapeInFrame"",""frameFill"",""row"",""_itemSize"",""_shapes"",""getShapes"",""_checkItemSize"",""_getItemSize"",""isItemObject"",""itemSize2"",""itemSize1"",""shapesSize"",""shapesLength"",""dist"",""shape"",""shapePos1"",""shapePos2"",""shapeSize1"",""shapeSize2"",""targetOutline"",""prevOutlineEnd"",""prevOutlineDist"",""l"",""dataset"",""makeShapeOutline"",""sign"",""columnWidth"",""getColumn"",""columnCount"",""shape1"",""shape2"",""FrameLayout"",""originWidth"",""originHeight"",""scaleX"",""scaleY"",""originLength"",""cost"",""bestFitArea"",""itemFitSize"",""containerFitSize"",""layoutVertical"",""aspectRatio"",""sizeWeight"",""ratioWeight"",""getRatio"",""minCost"",""containerSizeCost"",""getCost"",""getOriginSize"",""containerRatioCost"",""getOriginRatio"",""itemWidth"",""itemHeight"",""containerWidth"",""containerHeight"",""itemRatio"",""containerSize"",""containerRatio"",""fitArea"",""containerSize1"",""prevOutline"",""toZeroArray"",""BoxModel"",""model"",""_findBestFitArea"",""scaleTo"",""boxItem"",""graph"",""s"",""d"",""predecessors"",""costs"",""open"",""BinaryHeap"",""closest"",""u"",""cost_of_s_to_u"",""adjacent_nodes"",""cost_of_e"",""cost_of_s_to_u_plus_cost_of_e"",""cost_of_s_to_v"",""first_visit"",""msg"",""Error"",""single_source_shortest_paths"",""extract_shortest_path_from_predecessor_list"",""scoreFunction"",""bubbleUp"",""sinkDown"",""_n"",""n"",""parentN"",""parent"",""elemScore"",""child1Score"",""child2N"",""child1N"",""swap"",""child1"",""child2"",""child2Score"",""minSize"",""maxSize"",""columns"",""_start"",""results"",""_getCost"",""pow"",""path"",""find_path"",""_setStyle"",""isFinite"",""startPoint"",""endPoint"",""path1"",""path2"",""pathItems"",""pathItemsLength"",""prevItemRect"",""itemsLength"",""GridLayout"",""SquareLayout"",""PackingLayout"",""JustifiedLayout"",""LayoutManager"",""default""],""mappings"":""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""}"
ccf0badc4264f9dafd28d0d862b0e94c9b6b7e51,33750235,#' @references http://stackoverflow.com/questions/33750235/plotting-a-raster-with-the-color-ramp-diverging-around-zero
20bcbd8492f21d4d809e71467f74c334939c90b6,201323,// reference: http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363
9320cf8c25b034652b07d409314b7a0ef4c04fe7,6976473,"[[https://magit.vc/][Magit]] is a [[http://stackoverflow.com/questions/6976473/what-does-the-term-porcelain-mean-in-git][porcelain]] for Git that runs inside of Emacs. Essentially, =magit= provides a human-accessible interface to Git within Emacs, making the [[https://www.masteringemacs.org/article/introduction-magit-emacs-mode-git][management of version control easy]] and very Emacs-like. For experienced Git users, =magit= is an excellent method for bringing version control into Emacs, mostly eliminating the need to pop out to a terminal to make a commit or push. However, while ultimately =magit= simplifies Git tasks, it may make learning the process confusing for those completely new to the process."
0adc7f834759e623a14a44666acb558a6f84b422,9489736,	 - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/
d77ef8273947c709872fe04e4bf5365c22ed0edf,4427542,# See http://stackoverflow.com/questions/4427542
6da22784bfd7b004a840f6364eb817b49ef59d4f,35190574,"  <td><a href=""https://stackoverflow.com/questions/35190574"">35190574</a> </td>"
8de97d6ba40d6fa6ef16e1b97a5594eff4eef09f,26603875,			// http://stackoverflow.com/a/26603875
4337c4fa64d6f75ba388406110e66ecedf25c41b,2486901,    // Also tried a method from stackoverflow that caused a security error in all browsers. http://stackoverflow.com/questions/2486901/how-to-set-document-domain-for-a-dynamically-generated-iframe
1f723fde32d499de006a93be868de3d193a11413,14824143,"        //bugfix, duplicate identifier.  see: http://stackoverflow.com/questions/14824143/duplicate-identifier-nodename-in-jquery-d-ts"
9a9cfc03d0d02020a4e30756a9720cf33e4d18f4,5613466,http://stackoverflow.com/questions/5613466/determine-true-north
5e5c98b8a4bce721839a8ca14a85c4074a0640e6,2439020,	// Borrowed from http://stackoverflow.com/questions/2439020/wheres-the-iphone-mime-type-database
a58fe584e6197c10a584917c34e2640567d6583f,17907445,        // http://stackoverflow.com/questions/17907445/how-to-detect-ie11#comment30165888_17907562
41a335baee30d08814de6710bc16d2f3dcfab0eb,8115106,    // based on http://stackoverflow.com/questions/8115106/how-to-create-a-custom-validator-in-play-framework-2-0
0314e0844feb26de35708bf2c8701c58eafedfab,9193293,"This is easy R code to write, but shiny won't let us add an id to the inline icon element so referencing the icon directly with jquery is impossible. Sure, we could locate it with a few extra portions of jquery selection, but for the beginner (I'm a jquery beginner) I think it is easier to just write raw HTML and include an id for the icon (I'm pretty sure there's [no damage done](https://stackoverflow.com/questions/9193293/does-too-many-ids-hurt-performace) doing this):  "
675a87f38ee6aa421d70d987f28b307cf3db1c78,3330919,        // http://stackoverflow.com/a/3330919)
ecd7ffc0bb9d4e3f4bfad9f77c7fdcd499c3b7fe,14777114,    # Use dBm: http://stackoverflow.com/questions/14777114/what-is-rssi-value-in-802-11-packet
2887bc7850939d8eaa7c20dda6b5ceb1f2958181,174670,            <!-- see http://stackoverflow.com/questions/174560/sharing-test-code-in-maven#174670 -->
9e05032d95726cd576978da6e8404601bb8bbe09,2645273,            // http://stackoverflow.com/questions/2645273/javascript-regular-expression-literal-persists-between-function-calls
cfc050dd8a47e7a415a2527ac798ff68bed1cc37,36901,#		http://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-parameters
ca3c28a4e16581eaa8b3a9439336c999f2817ed1,985431,   same time due to [the browser's limit of concurrent connections](http://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a-browser)
ba9aa660f45e22baf07618203a3f966687296bd9,11468536,- http://stackoverflow.com/questions/11468536/android-gallery-zoom-in-out
25b469fb680e05b46d68beed86e87df2a3ff2e05,38843970,`service-worker.js` [with HTTP caching disabled](http://stackoverflow.com/questions/38843970/service-worker-javascript-update-frequency-every-24-hours).
b838960b0705fd15896400c912dd5a165e991e85,45656760,        /// https://stackoverflow.com/questions/45656378/c-what-is-the-fastest-way-to-count-byte-in-a-file/45656760#45656760
1e2f51521a08eb9505d228b64fa9c830de1f5234,6481627,"If you are getting ""java.security.InvalidKeyException: Illegal key size"" error while compiling, see this - http://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters"
a9ba0a95af98dad94153b53bf460270b9a0444e5,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
05d0f3c136ef000c0dd9bfa55c21cc69fbd25545,12384064,            // Code from http://stackoverflow.com/questions/12384064/gson-convert-from-json-to-a-typed-arraylistt
928f93c8e2fba685de5f263ad09ae30585d65106,1349404,     * https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
373488915ce2ea3ca4d9da52c7680849bcbecb73,14819093,    `Best way to align center a paragraph with RestructuredText? <http://stackoverflow.com/questions/14819093/best-way-to-align-center-a-paragraph-with-restructuredtext>`_
d7036079dd18d55f95d0580ad271073f6f97243d,27637609,// https://stackoverflow.com/questions/27637609/understanding-passport-serialize-deserialize
835caeb446fb0df97f673d86ec329d103ad8151b,6080413,      font-size: inherit; /*https://stackoverflow.com/questions/6080413/why-doesnt-input-inherit-the-font-from-body*/
7a65f704b32273a6cc9d1ababb2009ceb7cb31d1,26766241,"48. Using react-router without JSX **votes: 7**, *views: 1814* [http://stackoverflow.com/questions/26766241/using-react-router-without-jsx](http://stackoverflow.com/questions/26766241/using-react-router-without-jsx)"
7179f7b86b706bc39f00e315db9c1e70349461cb,14897100,"<p><a class=""reference external"" href=""http://stackoverflow.com/questions/14897100/create-multiple-columns-in-pandas-aggregation-function"">Create multiple aggregated columns</a></p>"
dd37b7ea17a215ee46405e68dd27bfa263179cab,9489736, - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/
a7ba5b8c1d1b137100b3f39d773642e949aea362,7768006,    (!navigator.userAgent.includes('Safari') || navigator.userAgent.includes('Chrome')) && // Exclude genuine Safari: http://stackoverflow.com/a/7768006/271577
23d535058a5c178f35b0922803e6f8be3ddd0fb6,1653047,    # See: https://stackoverflow.com/questions/1653047/avoid-linking-to-libstdc
66b88aa3acbfeda867397a8ecf753af624e8fec7,18650828,# from http://stackoverflow.com/a/18650828/180718
fa2a0d4a31ea4dd4f138879a7b1b8113ffc228dd,20864995,	this.FXPT2DOT30 = ctypes.long; // http://stackoverflow.com/a/20864995/1828637 // https://github.com/wine-mirror/wine/blob/a7247df6ca54fd1209eff9f9199447643ebdaec5/include/wingdi.h#L150
e97931663df157dc71ba52b51e4ae45f51ffca8b,11515804,"4257943,story,,,2,0,nathancahill,""Do you use SharedDataMiddleware with Flask on Heroku?"",http://stackoverflow.com/questions/11515804/zombie-shareddatamiddleware-on-python-heroku,,1342559942"
24e70ccb5f23a1a408a5be2537f7ec5ab55e33dc,23880928,	 * http://stackoverflow.com/questions/23880928/use-oauth-refresh-token-to-obtain-new-access-token-google-api
e1636ae7ebbcf857ee2bd383a288a97d8ef5b665,5302302,             * @link http://stackoverflow.com/questions/5302302/php-if-internet-explorer-6-7-8-or-9
839aa85b0ccb80cf9db3560f6d91a4986c814c66,3966116,[your app's acknowledgments](http://stackoverflow.com/questions/3966116/where-to-put-open-source-credit-information-for-an-iphone-app).
4c09ba1a8b199c1da6255972c6ff27b5f5e00673,42013316,"  <td><a href=""http://stackoverflow.com/q/42013316"">42013316</a></td>"
226eacd3c51523465db1b72b4d4477394057fcba,18082,"{""version"":3,""file"":""ractive.js"",""sources"":[""../src/Ractive.js"",""../src/Ractive/static/findPlugin.js"",""../src/Ractive/static/keypaths.js"",""../src/extend/_macro.js"",""../src/extend/_extend.js"",""../src/Ractive/static/sharedGet.js"",""../src/Ractive/static/sharedSet.js"",""../src/Ractive/static/styleGet.js"",""../src/Ractive/static/isInstance.js"",""../src/Ractive/prototype.js"",""../src/Ractive/prototype/updateModel.js"",""../src/Ractive/prototype/unshift.js"",""../src/Ractive/prototype/unrender.js"",""../src/Ractive/prototype/unlink.js"",""../src/Ractive/prototype/transition.js"",""../src/Ractive/prototype/toText.js"",""../src/Ractive/prototype/toHTML.js"",""../src/Ractive/prototype/toCSS.js"",""../src/Ractive/prototype/toggle.js"",""../src/Ractive/prototype/subtract.js"",""../src/Ractive/prototype/splice.js"",""../src/Ractive/prototype/sort.js"",""../src/Ractive/prototype/shift.js"",""../src/Ractive/prototype/set.js"",""../src/Ractive/prototype/reverse.js"",""../src/Ractive/prototype/resetTemplate.js"",""../src/Ractive/prototype/resetPartial.js"",""../src/Ractive/prototype/reset.js"",""../src/Ractive/prototype/render.js"",""../src/Ractive/render.js"",""../src/Ractive/initialise.js"",""../src/events/HookQueue.js"",""../src/view/Fragment.js"",""../src/view/helpers/processItems.js"",""../src/view/items/createItem.js"",""../src/view/items/asyncProxy.js"",""../src/view/items/component/getComponentConstructor.js"",""../src/view/items/Triple.js"",""../src/view/items/triple/insertHtml.js"",""../src/view/items/element/Transition.js"",""../src/view/items/element/transitions/createTransitions.js"",""../src/view/items/element/transitions/hyphenate.js"",""../src/view/items/element/transitions/prefix.js"",""../src/config/visibility.js"",""../src/view/items/Text.js"",""../src/view/items/element/specials/Textarea.js"",""../src/view/items/element/specials/Select.js"",""../src/view/items/Section.js"",""../src/view/RepeatedFragment.js"",""../src/view/items/Partial.js"",""../src/view/items/partial/getPartialTemplate.js"",""../src/view/items/element/specials/Option.js"",""../src/view/items/component/Mapping.js"",""../src/utils/parseJSON.js"",""../src/view/items/element/specials/Input.js"",""../src/view/items/Interpolator.js"",""../src/view/items/shared/Mustache.js"",""../src/view/items/shared/progressiveText.js"",""../src/view/items/shared/EventDirective.js"",""../src/view/items/component/RactiveEvent.js"",""../src/view/items/element/ElementEvents.js"",""../src/view/items/element/specials/Form.js"",""../src/view/items/Element.js"",""../src/view/items/element/binding/selectBinding.js"",""../src/view/items/element/binding/SingleSelectBinding.js"",""../src/view/items/element/binding/RadioNameBinding.js"",""../src/view/items/element/binding/RadioBinding.js"",""../src/view/items/element/binding/NumericBinding.js"",""../src/view/items/element/binding/MultipleSelectBinding.js"",""../src/utils/getSelectedOptions.js"",""../src/view/items/element/binding/FileBinding.js"",""../src/view/items/element/binding/GenericBinding.js"",""../src/view/items/element/binding/ContentEditableBinding.js"",""../src/view/items/element/binding/CheckboxNameBinding.js"",""../src/view/items/element/binding/getBindingGroup.js"",""../src/view/items/element/binding/CheckboxBinding.js"",""../src/view/items/element/binding/handleDomEvent.js"",""../src/view/items/element/binding/Binding.js"",""../src/view/items/Doctype.js"",""../src/view/items/element/Decorator.js"",""../src/view/items/shared/directiveArgs.js"",""../src/view/items/Component.js"",""../src/Ractive/construct.js"",""../src/Ractive/helpers/subscribe.js"",""../src/Ractive/helpers/getComputationSignature.js"",""../src/model/RootModel.js"",""../src/model/specials/RactiveModel.js"",""../src/Ractive/prototype/teardown.js"",""../src/view/items/Comment.js"",""../src/view/items/element/BindingFlag.js"",""../src/view/items/element/Attribute.js"",""../src/view/items/element/ConditionalAttribute.js"",""../src/view/items/element/attribute/propertyNames.js"",""../src/view/items/element/attribute/getUpdateDelegate.js"",""../src/view/helpers/specialAttrs.js"",""../src/utils/hyphenateCamel.js"",""../src/view/items/Alias.js"",""../src/view/resolvers/resolve.js"",""../src/view/resolvers/ReferenceExpressionProxy.js"",""../src/view/resolvers/ExpressionProxy.js"",""../src/model/Computation.js"",""../src/model/ComputationChild.js"",""../src/view/items/shared/Item.js"",""../src/Ractive/config/config.js"",""../src/Ractive/config/deprecate.js"",""../src/Ractive/config/wrapPrototypeMethod.js"",""../src/Ractive/config/registries.js"",""../src/Ractive/config/custom/template.js"",""../src/shared/getFunction.js"",""../src/Ractive/config/runtime-parser.js"",""../src/parse/_parse.js"",""../src/Ractive/shared.js"",""../src/parse/utils/insertExpressions.js"",""../src/parse/converters/readTemplate.js"",""../src/parse/converters/readPartialDefinitionSection.js"",""../src/parse/converters/readText.js"",""../src/parse/converters/readElement.js"",""../src/parse/converters/element/readClosingTag.js"",""../src/parse/utils/cleanup.js"",""../src/parse/utils/trimWhitespace.js"",""../src/parse/utils/stripStandalones.js"",""../src/parse/converters/readHtmlComment.js"",""../src/parse/converters/mustache/readSection.js"",""../src/parse/converters/mustache/handlebarsBlockCodes.js"",""../src/parse/converters/mustache/section/readElseIf.js"",""../src/parse/converters/mustache/section/readElse.js"",""../src/parse/converters/mustache/section/readClosing.js"",""../src/parse/converters/mustache/readInterpolator.js"",""../src/parse/converters/mustache/readMustacheComment.js"",""../src/parse/converters/mustache/readPartial.js"",""../src/parse/converters/mustache/readAliases.js"",""../src/parse/converters/mustache/readUnescaped.js"",""../src/parse/converters/mustache/readTriple.js"",""../src/parse/converters/readMustache.js"",""../src/parse/converters/element/readAttribute.js"",""../src/parse/utils/refineExpression.js"",""../src/parse/utils/flattenExpression.js"",""../src/parse/converters/readExpressionOrReference.js"",""../src/parse/converters/expressions/shared/readExpressionList.js"",""../src/parse/converters/readExpression.js"",""../src/parse/converters/expressions/readConditional.js"",""../src/parse/converters/expressions/readLogicalOr.js"",""../src/parse/converters/expressions/readTypeof.js"",""../src/parse/converters/expressions/readMemberOrInvocation.js"",""../src/parse/converters/expressions/shared/readRefinement.js"",""../src/parse/converters/expressions/readPrimary.js"",""../src/parse/converters/expressions/primary/readBracketedExpression.js"",""../src/parse/converters/expressions/primary/readReference.js"",""../src/parse/converters/expressions/primary/readLiteral.js"",""../src/parse/converters/expressions/primary/literal/readArrayLiteral.js"",""../src/parse/converters/expressions/primary/literal/readObjectLiteral.js"",""../src/parse/converters/expressions/primary/literal/objectLiteral/keyValuePairs.js"",""../src/parse/converters/expressions/primary/literal/objectLiteral/keyValuePair.js"",""../src/parse/converters/expressions/shared/readKey.js"",""../src/parse/converters/expressions/shared/patterns.js"",""../src/parse/converters/expressions/primary/literal/readTemplateStringLiteral.js"",""../src/parse/converters/expressions/primary/literal/readStringLiteral.js"",""../src/parse/converters/expressions/primary/literal/stringLiteral/makeQuotedStringMatcher.js"",""../src/parse/converters/expressions/primary/literal/readBooleanLiteral.js"",""../src/parse/converters/expressions/primary/literal/readNumberLiteral.js"",""../src/parse/converters/expressions/shared/errors.js"",""../src/utils/html.js"",""../src/parse/converters/utils/getLowestIndex.js"",""../src/utils/escapeRegExp.js"",""../src/parse/converters/expressions/primary/literal/readRegexpLiteral.js"",""../src/parse/converters/mustache/readDelimiterChange.js"",""../src/parse/Parser.js"",""../src/parse/utils/createFunction.js"",""../src/config/template.js"",""../src/Ractive/config/custom/data.js"",""../src/Ractive/config/custom/css/css.js"",""../src/model/specials/CSSModel.js"",""../src/Ractive/static/styleSet.js"",""../src/utils/id.js"",""../src/Ractive/config/custom/css/transform.js"",""../src/utils/cleanCss.js"",""../src/Ractive/config/custom/adapt.js"",""../src/global/css.js"",""../src/Ractive/prototype/readLink.js"",""../src/Ractive/prototype/push.js"",""../src/Ractive/prototype/pop.js"",""../src/Ractive/prototype/once.js"",""../src/Ractive/prototype/on.js"",""../src/Ractive/prototype/off.js"",""../src/Ractive/prototype/shared/notEmptyString.js"",""../src/Ractive/prototype/shared/trim.js"",""../src/Ractive/prototype/observeOnce.js"",""../src/Ractive/prototype/observe.js"",""../src/Ractive/prototype/observe/Array.js"",""../src/Ractive/prototype/observe/Pattern.js"",""../src/Ractive/prototype/observe/Observer.js"",""../src/Ractive/prototype/link.js"",""../src/Ractive/prototype/insert.js"",""../src/utils/dom.js"",""../src/config/namespaces.js"",""../src/Ractive/prototype/getContext.js"",""../src/Ractive/static/getContext.js"",""../src/Ractive/prototype/get.js"",""../src/Ractive/prototype/fire.js"",""../src/shared/Context.js"",""../src/Ractive/prototype/update.js"",""../src/Ractive/prototype/shared/makeArrayMethod.js"",""../src/shared/getNewIndices.js"",""../src/view/items/shared/findElement.js"",""../src/config/types.js"",""../src/Ractive/prototype/findParent.js"",""../src/Ractive/prototype/findContainer.js"",""../src/Ractive/prototype/findComponent.js"",""../src/Ractive/prototype/findAllComponents.js"",""../src/Ractive/prototype/findAll.js"",""../src/Ractive/prototype/find.js"",""../src/Ractive/prototype/detachChild.js"",""../src/Ractive/prototype/detach.js"",""../src/Ractive/prototype/attachChild.js"",""../src/shared/anchors.js"",""../src/events/Hook.js"",""../src/events/fireEvent.js"",""../src/events/eventStack.js"",""../src/Ractive/prototype/animate.js"",""../src/Ractive/prototype/add.js"",""../src/Ractive/prototype/shared/add.js"",""../src/shared/set.js"",""../src/shared/getRactiveContext.js"",""../src/view/resolvers/resolveReference.js"",""../src/model/specials/SharedModel.js"",""../src/model/Model.js"",""../src/model/helpers/getPrefixer.js"",""../src/shared/Ticker.js"",""../src/global/runloop.js"",""../src/global/TransitionManager.js"",""../src/model/LinkModel.js"",""../src/shared/rebind.js"",""../src/model/ModelBase.js"",""../src/utils/bind.js"",""../src/model/specials/KeypathModel.js"",""../src/shared/methodCallers.js"",""../src/model/specials/KeyModel.js"",""../src/global/capture.js"",""../src/utils/array.js"",""../src/shared/keypaths.js"",""../src/Ractive/static/interpolators.js"",""../src/shared/interpolate.js"",""../src/shared/registry.js"",""../src/config/errors.js"",""../src/utils/log.js"",""../src/utils/noop.js"",""../src/config/environment.js"",""../src/Ractive/static/easing.js"",""../src/Ractive/config/defaults.js"",""../src/polyfills/requestAnimationFrame.js"",""../src/polyfills/Promise.js"",""../src/polyfills/performance.now.js"",""../src/polyfills/node.contains.js"",""../src/polyfills/array.find.js"",""../src/utils/is.js"",""../src/utils/object.js"",""../src/polyfills/Object.assign.js""],""sourcesContent"":[""import './polyfills/Object.assign';\nimport './polyfills/array.find';\nimport './polyfills/node.contains';\nimport './polyfills/performance.now';\nimport './polyfills/Promise';\nimport './polyfills/requestAnimationFrame';\n\nimport defaults from './Ractive/config/defaults';\nimport easing from './Ractive/static/easing';\nimport interpolators from './Ractive/static/interpolators';\nimport { svg, win } from './config/environment';\nimport proto from './Ractive/prototype';\nimport { extend, extendWith } from './extend/_extend';\nimport macro from './extend/_macro';\nimport parse from './parse/_parse';\nimport getContext, { getNodeInfo } from './Ractive/static/getContext';\nimport isInstance from './Ractive/static/isInstance';\nimport construct from './Ractive/construct';\nimport initialise from './Ractive/initialise';\nimport { getCSS } from './global/css';\nimport { escapeKey, unescapeKey, normalise } from './shared/keypaths';\nimport { joinKeys, splitKeypath } from './Ractive/static/keypaths';\nimport shared from './Ractive/shared';\nimport { findPlugin } from './Ractive/static/findPlugin';\nimport parseJSON from './utils/parseJSON';\nimport CSSModel from './model/specials/CSSModel';\nimport { data as sharedData } from './model/specials/SharedModel';\nimport { extern } from './shared/getRactiveContext';\nimport { warn } from 'utils/log';\n\nimport { assign, defineProperty, defineProperties } from 'utils/object';\n\nexport default function Ractive ( options ) {\n\tif ( !( this instanceof Ractive ) ) return new Ractive( options );\n\n\tconstruct( this, options || {} );\n\tinitialise( this, options || {}, {} );\n}\n\n// check to see if we're being asked to force Ractive as a global for some weird environments\nif ( win && !win.Ractive ) {\n\tlet opts = '';\n\tconst script = document.currentScript || /* istanbul ignore next */ document.querySelector( 'script[data-ractive-options]' );\n\n\tif ( script ) opts = script.getAttribute( 'data-ractive-options' ) || '';\n\n\t/* istanbul ignore next */\n\tif ( ~opts.indexOf( 'ForceGlobal' ) ) win.Ractive = Ractive;\n} else if ( win ) {\n\twarn( `Ractive already appears to be loaded while loading BUILD_PLACEHOLDER_VERSION.` );\n}\n\nassign( Ractive.prototype, proto, defaults );\nRactive.prototype.constructor = Ractive;\n\n// alias prototype as `defaults`\nRactive.defaults = Ractive.prototype;\n\n// share defaults with the parser\nshared.defaults = Ractive.defaults;\nshared.Ractive = Ractive;\n\n// static properties\ndefineProperties( Ractive, {\n\n\t// debug flag\n\tDEBUG:            { writable: true, value: true },\n\tDEBUG_PROMISES:   { writable: true, value: true },\n\n\t// static methods:\n\textend:           { value: extend },\n\textendWith:       { value: extendWith },\n\tescapeKey:        { value: escapeKey },\n\tevalObjectString: { value: parseJSON },\n\tfindPlugin:       { value: findPlugin },\n\tgetContext:       { value: getContext },\n\tgetCSS:           { value: getCSS },\n\tgetNodeInfo:      { value: getNodeInfo },\n\tisInstance:       { value: isInstance },\n\tjoinKeys:         { value: joinKeys },\n\tmacro:            { value: macro },\n\tnormaliseKeypath: { value: normalise },\n\tparse:            { value: parse },\n\tsplitKeypath:     { value: splitKeypath },\n\t// sharedSet and styleSet are in _extend because circular refs\n\tunescapeKey:      { value: unescapeKey },\n\n\t// support\n\tenhance:          { writable: true, value: false },\n\tsvg:              { value: svg },\n\n\t// version\n\tVERSION:          { value: 'BUILD_PLACEHOLDER_VERSION' },\n\n\t// plugins\n\tadaptors:         { writable: true, value: {} },\n\tcomponents:       { writable: true, value: {} },\n\tdecorators:       { writable: true, value: {} },\n\teasing:           { writable: true, value: easing },\n\tevents:           { writable: true, value: {} },\n\textensions:       { value: [] },\n\tinterpolators:    { writable: true, value: interpolators },\n\tpartials:         { writable: true, value: {} },\n\ttransitions:      { writable: true, value: {} },\n\n\t// CSS variables\n\tcssData:          { configurable: true, value: {} },\n\n\t// access to @shared without an instance\n\tsharedData:       { value: sharedData },\n\n\t// for getting the source Ractive lib from a constructor\n\tRactive:          { value: Ractive },\n\n\t// to allow extending contexts\n\tContext:          { value: extern.Context.prototype }\n});\n\ndefineProperty( Ractive, '_cssModel', { configurable: true, value: new CSSModel( Ractive ) } );\n"",""import { findInViewHierarchy } from 'shared/registry';\n\nexport function findPlugin(name, type, instance) {\n\treturn findInViewHierarchy(type, instance, name);\n}\n"",""import { escapeKey, splitKeypath as splitKeypathI, unescapeKey } from 'shared/keypaths';\n\nexport function joinKeys ( ...keys ) {\n\treturn keys.map( escapeKey ).join( '.' );\n}\n\nexport function splitKeypath ( keypath ) {\n\treturn splitKeypathI( keypath ).map( unescapeKey );\n}\n"",""import styleGet from '../Ractive/static/styleGet';\nimport styleSet from '../Ractive/static/styleSet';\nimport CSSModel from 'src/model/specials/CSSModel';\nimport { assign, create, defineProperties, defineProperty } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nimport { initCSS } from 'src/Ractive/config/custom/css/css';\n\nexport default function macro ( fn, opts ) {\n\tif ( !isFunction( fn ) ) throw new Error( `The macro must be a function` );\n\n\tassign( fn, opts );\n\n\tdefineProperties( fn, {\n\t\textensions: { value: [] },\n\t\t_cssIds: { value: [] },\n\t\tcssData: { value: assign( create( this.cssData ), fn.cssData || {} ) },\n\n\t\tstyleGet: { value: styleGet.bind( fn ) },\n\t\tstyleSet: { value: styleSet.bind( fn ) }\n\t});\n\n\tdefineProperty( fn, '_cssModel', { value: new CSSModel( fn ) } );\n\n\tif ( fn.css ) initCSS( fn, fn, fn );\n\n\tthis.extensions.push( fn );\n\n\treturn fn;\n}\n"",""import config from '../Ractive/config/config';\nimport dataConfigurator from '../Ractive/config/custom/data';\nimport construct from '../Ractive/construct';\nimport initialise from '../Ractive/initialise';\nimport Ractive from '../Ractive';\nimport isInstance from '../Ractive/static/isInstance';\nimport styleSet from '../Ractive/static/styleSet';\nimport styleGet from '../Ractive/static/styleGet';\nimport sharedSet from '../Ractive/static/sharedSet';\nimport sharedGet from '../Ractive/static/sharedGet';\nimport { assign, create, defineProperties, toPairs } from 'utils/object';\nimport { isArray, isFunction } from 'utils/is';\n\nconst callsSuper = /super\\s*\\(|\\.call\\s*\\(\\s*this/;\n\nexport function extend ( ...options ) {\n\tif( !options.length ) {\n\t\treturn extendOne( this );\n\t} else {\n\t\treturn options.reduce( extendOne, this );\n\t}\n}\n\nexport function extendWith ( Class, options = {} ) {\n\treturn extendOne( this, options, Class );\n}\n\nfunction extendOne ( Parent, options = {}, Target ) {\n\tlet proto;\n\tlet Child = isFunction( Target ) && Target;\n\n\tif ( options.prototype instanceof Ractive ) {\n\t\tthrow new Error( `Ractive no longer supports multiple inheritance.` );\n\t}\n\n\tif ( Child ) {\n\t\tif ( !( Child.prototype instanceof Parent ) ) {\n\t\t\tthrow new Error( `Only classes that inherit the appropriate prototype may be used with extend` );\n\t\t}\n\t\tif ( !callsSuper.test( Child.toString() ) ) {\n\t\t\tthrow new Error( `Only classes that call super in their constructor may be used with extend` );\n\t\t}\n\n\t\tproto = Child.prototype;\n\t} else {\n\t\tChild = function ( options ) {\n\t\t\tif ( !( this instanceof Child ) ) return new Child( options );\n\n\t\t\tconstruct( this, options || {} );\n\t\t\tinitialise( this, options || {}, {} );\n\t\t};\n\n\t\tproto = create( Parent.prototype );\n\t\tproto.constructor = Child;\n\n\t\tChild.prototype = proto;\n\t}\n\n\t// Static properties\n\tdefineProperties( Child, {\n\t\t// alias prototype as defaults\n\t\tdefaults: { value: proto },\n\n\t\textend: { value: extend, writable: true, configurable: true },\n\t\textendWith: { value: extendWith, writable: true, configurable: true },\n\t\textensions: { value: [] },\n\n\t\tisInstance: { value: isInstance },\n\n\t\tParent: { value: Parent },\n\t\tRactive: { value: Ractive },\n\n\t\tstyleGet: { value: styleGet.bind( Child ), configurable: true },\n\t\tstyleSet: { value: styleSet.bind( Child ), configurable: true }\n\t});\n\n\t// extend configuration\n\tconfig.extend( Parent, proto, options, Child );\n\n\t// store event and observer registries on the constructor when extending\n\tChild._on = ( Parent._on || [] ).concat( toPairs( options.on ) );\n\tChild._observe = ( Parent._observe || [] ).concat( toPairs( options.observe ) );\n\n\tParent.extensions.push( Child );\n\n\t// attribute defs are not inherited, but they need to be stored\n\tif ( options.attributes ) {\n\t\tlet attrs;\n\n\t\t// allow an array of optional props or an object with arrays for optional and required props\n\t\tif ( isArray( options.attributes ) ) {\n\t\t\tattrs = { optional: options.attributes, required: [] };\n\t\t} else {\n\t\t\tattrs = options.attributes;\n\t\t}\n\n\t\t// make sure the requisite keys actually store arrays\n\t\tif ( !isArray( attrs.required ) ) attrs.required = [];\n\t\tif ( !isArray( attrs.optional ) ) attrs.optional = [];\n\n\t\tChild.attributes = attrs;\n\t}\n\n\tdataConfigurator.extend( Parent, proto, options, Child );\n\n\tif ( options.computed ) {\n\t\tproto.computed = assign( create( Parent.prototype.computed ), options.computed );\n\t}\n\n\treturn Child;\n}\n\ndefineProperties( Ractive, {\n\tsharedGet: { value: sharedGet },\n\tsharedSet: { value: sharedSet },\n\tstyleGet: { configurable: true, value: styleGet.bind( Ractive ) },\n\tstyleSet: { configurable: true, value: styleSet.bind( Ractive ) }\n});\n"",""import SharedModel  from '../../model/specials/SharedModel';\nimport { splitKeypath } from 'shared/keypaths';\n\nexport default function sharedGet ( keypath ) {\n\treturn SharedModel.joinAll( splitKeypath( keypath ) ).get();\n}\n"",""import { build, set } from '../../shared/set';\nimport SharedModel  from '../../model/specials/SharedModel';\nimport { isObjectType } from 'utils/is';\n\nexport default function sharedSet ( keypath, value, options ) {\n\tconst opts = isObjectType( keypath ) ? value : options;\n\tconst model = SharedModel;\n\n\treturn set( build( { viewmodel: model }, keypath, value, true ), opts );\n}\n"",""import { splitKeypath } from 'shared/keypaths';\n\nexport default function styleGet ( keypath ) {\n\treturn this._cssModel.joinAll( splitKeypath( keypath ) ).get();\n}\n"",""export default function isInstance ( object ) {\n\treturn object && object instanceof this;\n}\n"",""import add from './prototype/add';\nimport animate from './prototype/animate';\nimport attachChild from './prototype/attachChild';\nimport detach from './prototype/detach';\nimport detachChild from './prototype/detachChild';\nimport find from './prototype/find';\nimport findAll from './prototype/findAll';\nimport findAllComponents from './prototype/findAllComponents';\nimport findComponent from './prototype/findComponent';\nimport findContainer from './prototype/findContainer';\nimport findParent from './prototype/findParent';\nimport fire from './prototype/fire';\nimport get from './prototype/get';\nimport getContext, { getNodeInfo } from './prototype/getContext';\nimport insert from './prototype/insert';\nimport link from './prototype/link';\nimport observe from './prototype/observe';\nimport observeOnce from './prototype/observeOnce';\nimport off from './prototype/off';\nimport on from './prototype/on';\nimport once from './prototype/once';\nimport pop from './prototype/pop';\nimport push from './prototype/push';\nimport readLink from './prototype/readLink';\nimport render from './prototype/render';\nimport reset from './prototype/reset';\nimport resetPartial from './prototype/resetPartial';\nimport resetTemplate from './prototype/resetTemplate';\nimport reverse from './prototype/reverse';\nimport set from './prototype/set';\nimport shift from './prototype/shift';\nimport sort from './prototype/sort';\nimport splice from './prototype/splice';\nimport subtract from './prototype/subtract';\nimport teardown from './prototype/teardown';\nimport toggle from './prototype/toggle';\nimport toCSS from './prototype/toCSS';\nimport toHTML from './prototype/toHTML';\nimport toText from './prototype/toText';\nimport transition from './prototype/transition';\nimport unlink from './prototype/unlink';\nimport unrender from './prototype/unrender';\nimport unshift from './prototype/unshift';\nimport update from './prototype/update';\nimport updateModel from './prototype/updateModel';\n\nimport { defineProperty } from 'utils/object';\n\nconst proto = {\n\tadd,\n\tanimate,\n\tattachChild,\n\tdetach,\n\tdetachChild,\n\tfind,\n\tfindAll,\n\tfindAllComponents,\n\tfindComponent,\n\tfindContainer,\n\tfindParent,\n\tfire,\n\tget,\n\tgetContext,\n\tgetNodeInfo,\n\tinsert,\n\tlink,\n\tobserve,\n\tobserveOnce,\n\toff,\n\ton,\n\tonce,\n\tpop,\n\tpush,\n\treadLink,\n\trender,\n\treset,\n\tresetPartial,\n\tresetTemplate,\n\treverse,\n\tset,\n\tshift,\n\tsort,\n\tsplice,\n\tsubtract,\n\tteardown,\n\ttoggle,\n\ttoCSS,\n\ttoCss: toCSS,\n\ttoHTML,\n\ttoHtml: toHTML,\n\ttoText,\n\ttransition,\n\tunlink,\n\tunrender,\n\tunshift,\n\tupdate,\n\tupdateModel\n};\n\ndefineProperty( proto, 'target', {\n\tget() { return this.el; }\n});\n\nexport default proto;\n"",""import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\n\nexport default function Ractive$updateModel ( keypath, cascade ) {\n\tconst promise = runloop.start();\n\n\tif ( !keypath ) {\n\t\tthis.viewmodel.updateFromBindings( true );\n\t} else {\n\t\tthis.viewmodel.joinAll( splitKeypath( keypath ) ).updateFromBindings( cascade !== false );\n\t}\n\n\trunloop.end();\n\n\treturn promise;\n}\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod( 'unshift' ).path;\n"",""import Hook from 'src/events/Hook';\nimport { warnIfDebug } from 'utils/log';\nimport { removeFromArray } from 'utils/array';\nimport runloop from 'src/global/runloop';\n\nconst unrenderHook = new Hook( 'unrender' );\n\nexport default function Ractive$unrender () {\n\tif ( !this.fragment.rendered ) {\n\t\twarnIfDebug( 'ractive.unrender() was called on a Ractive instance that was not rendered' );\n\t\treturn Promise.resolve();\n\t}\n\n\tthis.unrendering = true;\n\tconst promise = runloop.start();\n\n\t// If this is a component, and the component isn't marked for destruction,\n\t// don't detach nodes from the DOM unnecessarily\n\tconst shouldDestroy = !this.component || ( this.component.anchor || {} ).shouldDestroy || this.component.shouldDestroy || this.shouldDestroy;\n\tthis.fragment.unrender( shouldDestroy );\n\tif ( shouldDestroy ) this.destroyed = true;\n\n\tremoveFromArray( this.el.__ractive_instances__, this );\n\n\tunrenderHook.fire( this );\n\n\trunloop.end();\n\tthis.unrendering = false;\n\n\treturn promise;\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\n\nexport default function unlink( here ) {\n\tconst promise = runloop.start();\n\tthis.viewmodel.joinAll( splitKeypath( here ), { lastLink: false } ).unlink();\n\trunloop.end();\n\treturn promise;\n}\n"",""import runloop from 'src/global/runloop';\nimport Transition from '../../view/items/element/Transition';\nimport { fatal } from 'utils/log';\nimport { isObject } from 'utils/is';\n\nexport default function Ractive$transition ( name, node, params ) {\n\n\tif ( node instanceof HTMLElement ) {\n\t\t// good to go\n\t}\n\telse if ( isObject( node ) ) {\n\t\t// omitted, use event node\n\t\tparams = node;\n\t}\n\n\t// if we allow query selector, then it won't work\n\t// simple params like \""fast\""\n\n\t// else if ( typeof node === 'string' ) {\n\t// \t// query selector\n\t// \tnode = this.find( node )\n\t// }\n\n\tnode = node || this.event.node;\n\n\tif ( !node || !node._ractive ) {\n\t\tfatal( `No node was supplied for transition ${name}` );\n\t}\n\n\tparams = params || {};\n\tconst owner = node._ractive.proxy;\n\tconst transition = new Transition({ owner, up: owner.up, name, params });\n\ttransition.bind();\n\n\tconst promise = runloop.start();\n\trunloop.registerTransition( transition );\n\trunloop.end();\n\n\tpromise.then( () => transition.unbind() );\n\treturn promise;\n}\n"",""export default function toText () {\n\treturn this.fragment.toString( false );\n}\n"",""export default function Ractive$toHTML () {\n\treturn this.fragment.toString( true );\n}\n"",""import { getCSS } from 'src/global/css';\nimport { keys } from 'utils/object';\n\nexport default function Ractive$toCSS() {\n\tconst cssIds = [ this.cssId, ...this.findAllComponents().map( c => c.cssId ) ];\n\tconst uniqueCssIds = keys(cssIds.reduce( ( ids, id ) => (ids[id] = true, ids), {}));\n\treturn getCSS( uniqueCssIds );\n}\n"",""import { badArguments } from 'config/errors';\nimport { gather, set } from 'shared/set';\nimport { isString } from 'utils/is';\n\nexport default function Ractive$toggle ( keypath, options ) {\n\tif ( !isString( keypath ) ) {\n\t\tthrow new TypeError( badArguments );\n\t}\n\n\treturn set( gather( this, keypath, null, options && options.isolated ).map( m => [ m, !m.get() ] ), options );\n}\n"",""import add from './shared/add';\nimport { isNumber, isObjectType } from 'utils/is';\n\nexport default function Ractive$subtract ( keypath, d, options ) {\n\tconst num = isNumber( d ) ? -d : -1;\n\tconst opts = isObjectType( d ) ? d : options;\n\treturn add( this, keypath, num, opts );\n}\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod( 'splice' ).path;\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod( 'sort' ).path;\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod( 'shift' ).path;\n"",""import { build, set } from 'shared/set';\nimport { isObjectType } from 'utils/is';\n\nexport default function Ractive$set ( keypath, value, options ) {\n\tconst ractive = this;\n\n\tconst opts = isObjectType( keypath ) ? value : options;\n\n\treturn set( build( ractive, keypath, value, opts && opts.isolated ), opts );\n}\n\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod( 'reverse' ).path;\n"",""import { createDocumentFragment } from 'utils/dom';\nimport Fragment from 'src/view/Fragment';\nimport runloop from 'src/global/runloop';\nimport { default as templateConfigurator } from '../config/custom/template';\n\n// TODO should resetTemplate be asynchronous? i.e. should it be a case\n// of outro, update template, intro? I reckon probably not, since that\n// could be achieved with unrender-resetTemplate-render. Also, it should\n// conceptually be similar to resetPartial, which couldn't be async\n\nexport default function Ractive$resetTemplate ( template ) {\n\ttemplateConfigurator.init( null, this, { template });\n\n\tconst transitionsEnabled = this.transitionsEnabled;\n\tthis.transitionsEnabled = false;\n\n\t// Is this is a component, we need to set the `shouldDestroy`\n\t// flag, otherwise it will assume by default that a parent node\n\t// will be detached, and therefore it doesn't need to bother\n\t// detaching its own nodes\n\tconst component = this.component;\n\tif ( component ) component.shouldDestroy = true;\n\tthis.unrender();\n\tif ( component ) component.shouldDestroy = false;\n\n\tconst promise = runloop.start();\n\n\t// remove existing fragment and create new one\n\tthis.fragment.unbind().unrender( true );\n\n\tthis.fragment = new Fragment({\n\t\ttemplate: this.template,\n\t\troot: this,\n\t\towner: this\n\t});\n\n\tconst docFrag = createDocumentFragment();\n\tthis.fragment.bind( this.viewmodel ).render( docFrag );\n\n\t// if this is a component, its el may not be valid, so find a\n\t// target based on the component container\n\tif ( component && !component.external ) {\n\t\tthis.fragment.findParentNode().insertBefore( docFrag, component.findNextNode() );\n\t} else {\n\t\tthis.el.insertBefore( docFrag, this.anchor );\n\t}\n\n\trunloop.end();\n\n\tthis.transitionsEnabled = transitionsEnabled;\n\n\treturn promise;\n}\n"",""import runloop from 'src/global/runloop';\nimport { PARTIAL, COMPONENT, ELEMENT } from 'config/types';\nimport { isArray } from 'utils/is';\nimport { handleChange } from 'shared/methodCallers';\n\nfunction collect( source, name, attr, dest ) {\n\tsource.forEach( item => {\n\t\t// queue to rerender if the item is a partial and the current name matches\n\t\tif ( item.type === PARTIAL && ( item.refName ===  name || item.name === name ) ) {\n\t\t\titem.inAttribute = attr;\n\t\t\tdest.push( item );\n\t\t\treturn; // go no further\n\t\t}\n\n\t\t// if it has a fragment, process its items\n\t\tif ( item.fragment ) {\n\t\t\tcollect( item.fragment.iterations || item.fragment.items, name, attr, dest );\n\t\t}\n\n\t\t// or if it is itself a fragment, process its items\n\t\telse if ( isArray( item.items ) ) {\n\t\t\tcollect( item.items, name, attr, dest );\n\t\t}\n\n\t\t// or if it is a component, step in and process its items\n\t\telse if ( item.type === COMPONENT && item.instance ) {\n\t\t\t// ...unless the partial is shadowed\n\t\t\tif ( item.instance.partials[ name ] ) return;\n\t\t\tcollect( item.instance.fragment.items, name, attr, dest );\n\t\t}\n\n\t\t// if the item is an element, process its attributes too\n\t\tif ( item.type === ELEMENT ) {\n\t\t\tif ( isArray( item.attributes ) ) {\n\t\t\t\tcollect( item.attributes, name, true, dest );\n\t\t\t}\n\t\t}\n\t});\n}\n\nexport default function ( name, partial ) {\n\tconst collection = [];\n\tcollect( this.fragment.items, name, false, collection );\n\n\tconst promise = runloop.start();\n\n\tthis.partials[ name ] = partial;\n\tcollection.forEach( handleChange );\n\n\trunloop.end();\n\n\treturn promise;\n}\n"",""import runloop from 'src/global/runloop';\nimport config from '../config/config';\nimport Hook from '../../events/Hook';\nimport dataConfigurator from '../config/custom/data';\nimport { isObjectType } from 'utils/is';\n\nconst shouldRerender = [ 'template', 'partials', 'components', 'decorators', 'events' ];\n\nconst completeHook = new Hook( 'complete' );\nconst resetHook = new Hook( 'reset' );\nconst renderHook = new Hook( 'render' );\nconst unrenderHook = new Hook( 'unrender' );\n\nexport default function Ractive$reset ( data ) {\n\tdata = data || {};\n\n\tif ( !isObjectType( data ) ) {\n\t\tthrow new Error( 'The reset method takes either no arguments, or an object containing new data' );\n\t}\n\n\t// TEMP need to tidy this up\n\tdata = dataConfigurator.init( this.constructor, this, { data });\n\n\tconst promise = runloop.start();\n\n\t// If the root object is wrapped, try and use the wrapper's reset value\n\tconst wrapper = this.viewmodel.wrapper;\n\tif ( wrapper && wrapper.reset ) {\n\t\tif ( wrapper.reset( data ) === false ) {\n\t\t\t// reset was rejected, we need to replace the object\n\t\t\tthis.viewmodel.set( data );\n\t\t}\n\t} else {\n\t\tthis.viewmodel.set( data );\n\t}\n\n\t// reset config items and track if need to rerender\n\tconst changes = config.reset( this );\n\tlet rerender;\n\n\tlet i = changes.length;\n\twhile ( i-- ) {\n\t\tif ( shouldRerender.indexOf( changes[i] ) > -1 ) {\n\t\t\trerender = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( rerender ) {\n\t\tunrenderHook.fire( this );\n\t\tthis.fragment.resetTemplate( this.template );\n\t\trenderHook.fire( this );\n\t\tcompleteHook.fire( this );\n\t}\n\n\trunloop.end();\n\n\tresetHook.fire( this, data );\n\n\treturn promise;\n}\n"",""import { getElement } from 'utils/dom';\nimport { toArray } from 'utils/array';\nimport { warnIfDebug } from 'utils/log';\nimport render from '../render';\nimport { teardown } from 'shared/methodCallers';\n\nexport default function Ractive$render ( target, anchor ) {\n\tif ( this.torndown ) {\n\t\twarnIfDebug( 'ractive.render() was called on a Ractive instance that was already torn down' );\n\t\treturn Promise.resolve();\n\t}\n\n\ttarget = getElement( target ) || this.el;\n\n\tif ( !this.append && target ) {\n\t\t// Teardown any existing instances *before* trying to set up the new one -\n\t\t// avoids certain weird bugs\n\t\tconst others = target.__ractive_instances__;\n\t\tif ( others ) others.forEach( teardown );\n\n\t\t// make sure we are the only occupants\n\t\tif ( !this.enhance ) {\n\t\t\ttarget.innerHTML = ''; // TODO is this quicker than removeChild? Initial research inconclusive\n\t\t}\n\t}\n\n\tconst occupants = this.enhance ? toArray( target.childNodes ) : null;\n\tconst promise = render( this, target, anchor, occupants );\n\n\tif ( occupants ) {\n\t\twhile ( occupants.length ) target.removeChild( occupants.pop() );\n\t}\n\n\treturn promise;\n}\n"",""import { doc } from 'config/environment';\nimport { applyCSS } from 'src/global/css';\nimport Hook from 'src/events/Hook';\nimport { getElement } from 'utils/dom';\nimport runloop from 'src/global/runloop';\nimport { createFragment } from './initialise';\n\nconst renderHook = new Hook( 'render' );\nconst completeHook = new Hook( 'complete' );\n\nexport default function render ( ractive, target, anchor, occupants ) {\n\t// set a flag to let any transitions know that this instance is currently rendering\n\tractive.rendering = true;\n\n\tconst promise = runloop.start();\n\trunloop.scheduleTask( () => renderHook.fire( ractive ), true );\n\n\tif ( ractive.fragment.rendered ) {\n\t\tthrow new Error( 'You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first' );\n\t}\n\n\tif ( ractive.destroyed ) {\n\t\tractive.destroyed = false;\n\t\tractive.fragment = createFragment( ractive ).bind( ractive.viewmodel );\n\t}\n\n\tanchor = getElement( anchor ) || ractive.anchor;\n\n\tractive.el = ractive.target = target;\n\tractive.anchor = anchor;\n\n\t// ensure encapsulated CSS is up-to-date\n\tif ( ractive.cssId ) applyCSS();\n\n\tif ( target ) {\n\t\t( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( ractive );\n\n\t\tif ( anchor ) {\n\t\t\tconst docFrag = doc.createDocumentFragment();\n\t\t\tractive.fragment.render( docFrag );\n\t\t\ttarget.insertBefore( docFrag, anchor );\n\t\t} else {\n\t\t\tractive.fragment.render( target, occupants );\n\t\t}\n\t}\n\n\trunloop.end();\n\tractive.rendering = false;\n\n\treturn promise.then( () => {\n\t\tif (ractive.torndown) return;\n\n\t\tcompleteHook.fire( ractive );\n\t});\n}\n"",""import { logIfDebug, warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { getElement } from 'utils/dom';\nimport config from './config/config';\nimport Fragment from 'src/view/Fragment';\nimport Hook from 'src/events/Hook';\nimport HookQueue from 'src/events/HookQueue';\nimport Ractive from '../Ractive';\nimport subscribe from './helpers/subscribe';\nimport { hasOwn, keys } from 'utils/object';\n\nconst configHook = new Hook( 'config' );\nconst initHook = new HookQueue( 'init' );\n\nexport default function initialise ( ractive, userOptions, options ) {\n\tkeys( ractive.viewmodel.computations ).forEach( key => {\n\t\tconst computation = ractive.viewmodel.computations[ key ];\n\n\t\tif ( hasOwn( ractive.viewmodel.value, key ) ) {\n\t\t\tcomputation.set( ractive.viewmodel.value[ key ] );\n\t\t}\n\t});\n\n\t// init config from Parent and options\n\tconfig.init( ractive.constructor, ractive, userOptions );\n\n\tconfigHook.fire( ractive );\n\n\tinitHook.begin( ractive );\n\n\tconst fragment = ractive.fragment = createFragment( ractive, options );\n\tif ( fragment ) fragment.bind( ractive.viewmodel );\n\n\tinitHook.end( ractive );\n\n\t// general config done, set up observers\n\tsubscribe( ractive, userOptions, 'observe' );\n\n\tif ( fragment ) {\n\t\t// render automatically ( if `el` is specified )\n\t\tconst el = getElement( ractive.el || ractive.target );\n\t\tif ( el ) {\n\t\t\tconst promise = ractive.render( el, ractive.append );\n\n\t\t\tif ( Ractive.DEBUG_PROMISES ) {\n\t\t\t\tpromise.catch( err => {\n\t\t\t\t\twarnOnceIfDebug( 'Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\\n  Ractive.DEBUG_PROMISES = false;' );\n\t\t\t\t\twarnIfDebug( 'An error happened during rendering', { ractive });\n\t\t\t\t\tlogIfDebug( err );\n\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function createFragment ( ractive, options = {} ) {\n\tif ( ractive.template ) {\n\t\tconst cssIds = [].concat( ractive.constructor._cssIds || [], options.cssIds || [] );\n\n\t\treturn new Fragment({\n\t\t\towner: ractive,\n\t\t\ttemplate: ractive.template,\n\t\t\tcssIds\n\t\t});\n\t}\n}\n"",""import Hook from './Hook';\n\nfunction getChildQueue ( queue, ractive ) {\n\treturn queue[ ractive._guid ] || ( queue[ ractive._guid ] = [] );\n}\n\nfunction fire ( hookQueue, ractive ) {\n\tconst childQueue = getChildQueue( hookQueue.queue, ractive );\n\n\thookQueue.hook.fire( ractive );\n\n\t// queue is \""live\"" because components can end up being\n\t// added while hooks fire on parents that modify data values.\n\twhile ( childQueue.length ) {\n\t\tfire( hookQueue, childQueue.shift() );\n\t}\n\n\tdelete hookQueue.queue[ ractive._guid ];\n}\n\nexport default class HookQueue {\n\tconstructor ( event ) {\n\t\tthis.hook = new Hook( event );\n\t\tthis.inProcess = {};\n\t\tthis.queue = {};\n\t}\n\n\tbegin ( ractive ) {\n\t\tthis.inProcess[ ractive._guid ] = true;\n\t}\n\n\tend ( ractive ) {\n\t\tconst parent = ractive.parent;\n\n\t\t// If this is *isn't* a child of a component that's in process,\n\t\t// it should call methods or fire at this point\n\t\tif ( !parent || !this.inProcess[ parent._guid ] ) {\n\t\t\tfire( this, ractive );\n\t\t}\n\t\t// elsewise, handoff to parent to fire when ready\n\t\telse {\n\t\t\tgetChildQueue( this.queue, parent ).push( ractive );\n\t\t}\n\n\t\tdelete this.inProcess[ ractive._guid ];\n\t}\n}\n"",""import { ELEMENT, YIELDER } from 'config/types';\nimport runloop from 'src/global/runloop';\nimport { findMap } from 'utils/array';\nimport { getContext, findParentWithContext } from 'shared/getRactiveContext';\nimport { bind, destroyed, shuffled, toEscapedString, toString, unbind, unrender, update } from 'shared/methodCallers';\nimport createItem from './items/createItem';\nimport processItems from './helpers/processItems';\nimport parseJSON from 'utils/parseJSON';\nimport { createDocumentFragment } from 'utils/dom';\n\nfunction unrenderAndDestroy ( item ) {\n\titem.unrender( true );\n}\n\nexport default class Fragment {\n\tconstructor ( options ) {\n\t\tthis.owner = options.owner; // The item that owns this fragment - an element, section, partial, or attribute\n\n\t\tthis.isRoot = !options.owner.up;\n\t\tthis.parent = this.isRoot ? null : this.owner.up;\n\t\tthis.ractive = options.ractive || ( this.isRoot ? options.owner : this.parent.ractive );\n\n\t\tthis.componentParent = ( this.isRoot && this.ractive.component ) ? this.ractive.component.up : null;\n\t\tthis.delegate = ( this.parent ? this.parent.delegate : ( this.componentParent && this.componentParent.delegate ) ) ||\n\t\t\t( this.owner.containerFragment && this.owner.containerFragment.delegate );\n\n\t\tthis.context = null;\n\t\tthis.rendered = false;\n\n\t\t// encapsulated styles should be inherited until they get applied by an element\n\t\tif ( 'cssIds' in options ) {\n\t\t\tthis.cssIds = options.cssIds && options.cssIds.length && options.cssIds;\n\t\t} else {\n\t\t\tthis.cssIds = this.parent ? this.parent.cssIds : null;\n\t\t}\n\n\t\tthis.dirty = false;\n\t\tthis.dirtyValue = true; // used for attribute values\n\n\t\tthis.template = options.template || [];\n\t\tthis.createItems();\n\t}\n\n\tbind ( context ) {\n\t\tthis.context = context;\n\t\tthis.items.forEach( bind );\n\t\tthis.bound = true;\n\n\t\t// in rare cases, a forced resolution (or similar) will cause the\n\t\t// fragment to be dirty before it's even finished binding. In those\n\t\t// cases we update immediately\n\t\tif ( this.dirty ) this.update();\n\n\t\treturn this;\n\t}\n\n\tbubble () {\n\t\tthis.dirtyValue = true;\n\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\n\t\t\tif ( this.isRoot ) { // TODO encapsulate 'is component root, but not overall root' check?\n\t\t\t\tif ( this.ractive.component ) {\n\t\t\t\t\tthis.ractive.component.bubble();\n\t\t\t\t} else if ( this.bound ) {\n\t\t\t\t\trunloop.addFragment( this );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.owner.bubble( this.index );\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateItems () {\n\t\t// this is a hot code path\n\t\tconst max = this.template.length;\n\t\tthis.items = [];\n\t\tfor ( let i = 0; i < max; i++ ) {\n\t\t\tthis.items[i] = createItem({ up: this, template: this.template[i], index: i });\n\t\t}\n\t}\n\n\tdestroyed () {\n\t\tthis.items.forEach( destroyed );\n\t}\n\n\tdetach () {\n\t\tconst docFrag = createDocumentFragment();\n\t\tconst xs = this.items;\n\t\tconst len = xs.length;\n\t\tfor ( let i = 0; i < len; i++ ) {\n\t\t\tdocFrag.appendChild( xs[i].detach() );\n\t\t}\n\t\treturn docFrag;\n\t}\n\n\tfind ( selector, options ) {\n\t\treturn findMap( this.items, i => i.find( selector, options ) );\n\t}\n\n\tfindAll ( selector, options ) {\n\t\tif ( this.items ) {\n\t\t\tthis.items.forEach( i => i.findAll && i.findAll( selector, options ) );\n\t\t}\n\t}\n\n\tfindComponent ( name, options ) {\n\t\treturn findMap( this.items, i => i.findComponent( name, options ) );\n\t}\n\n\tfindAllComponents ( name, options ) {\n\t\tif ( this.items ) {\n\t\t\tthis.items.forEach( i => i.findAllComponents && i.findAllComponents( name, options ) );\n\t\t}\n\t}\n\n\tfindContext () {\n\t\tconst base = findParentWithContext( this );\n\t\tif ( !base || !base.context ) return this.ractive.viewmodel;\n\t\telse return base.context;\n\t}\n\n\tfindNextNode ( item ) {\n\t\t// search for the next node going forward\n\t\tif ( item ) {\n\t\t\tlet it;\n\t\t\tfor ( let i = item.index + 1; i < this.items.length; i++ ) {\n\t\t\t\tit = this.items[i];\n\t\t\t\tif ( !it || !it.firstNode ) continue;\n\n\t\t\t\tconst node = it.firstNode( true );\n\t\t\t\tif ( node ) return node;\n\t\t\t}\n\t\t}\n\n\t\t// if this is the root fragment, and there are no more items,\n\t\t// it means we're at the end...\n\t\tif ( this.isRoot ) {\n\t\t\tif ( this.ractive.component ) {\n\t\t\t\treturn this.ractive.component.up.findNextNode( this.ractive.component );\n\t\t\t}\n\n\t\t\t// TODO possible edge case with other content\n\t\t\t// appended to this.ractive.el?\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( this.parent ) return this.owner.findNextNode( this ); // the argument is in case the parent is a RepeatedFragment\n\t}\n\n\tfindParentNode () {\n\t\tlet fragment = this;\n\n\t\tdo {\n\t\t\tif ( fragment.owner.type === ELEMENT ) {\n\t\t\t\treturn fragment.owner.node;\n\t\t\t}\n\n\t\t\tif ( fragment.isRoot && !fragment.ractive.component ) { // TODO encapsulate check\n\t\t\t\treturn fragment.ractive.el;\n\t\t\t}\n\n\t\t\tif ( fragment.owner.type === YIELDER ) {\n\t\t\t\tfragment = fragment.owner.containerFragment;\n\t\t\t} else {\n\t\t\t\tfragment = fragment.componentParent || fragment.parent; // TODO ugh\n\t\t\t}\n\t\t} while ( fragment );\n\n\t\tthrow new Error( 'Could not find parent node' ); // TODO link to issue tracker\n\t}\n\n\tfindRepeatingFragment () {\n\t\tlet fragment = this;\n\t\t// TODO better check than fragment.parent.iterations\n\t\twhile ( ( fragment.parent || fragment.componentParent ) && !fragment.isIteration ) {\n\t\t\tfragment = fragment.parent || fragment.componentParent;\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\tfirstNode ( skipParent ) {\n\t\tconst node = findMap( this.items, i => i.firstNode( true ) );\n\t\tif ( node ) return node;\n\t\tif ( skipParent ) return null;\n\n\t\treturn this.parent.findNextNode( this.owner );\n\t}\n\n\trebind ( next ) {\n\t\tthis.context = next;\n\t}\n\n\trender ( target, occupants ) {\n\t\tif ( this.rendered ) throw new Error( 'Fragment is already rendered!' );\n\t\tthis.rendered = true;\n\n\t\tconst xs = this.items;\n\t\tconst len = xs.length;\n\t\tfor ( let i = 0; i < len; i++ ) {\n\t\t\txs[i].render( target, occupants );\n\t\t}\n\t}\n\n\tresetTemplate ( template ) {\n\t\tconst wasBound = this.bound;\n\t\tconst wasRendered = this.rendered;\n\n\t\t// TODO ensure transitions are disabled globally during reset\n\n\t\tif ( wasBound ) {\n\t\t\tif ( wasRendered ) this.unrender( true );\n\t\t\tthis.unbind();\n\t\t}\n\n\t\tthis.template = template;\n\t\tthis.createItems();\n\n\t\tif ( wasBound ) {\n\t\t\tthis.bind( this.context );\n\n\t\t\tif ( wasRendered ) {\n\t\t\t\tconst parentNode = this.findParentNode();\n\t\t\t\tconst anchor = this.findNextNode();\n\n\t\t\t\tif ( anchor ) {\n\t\t\t\t\tconst docFrag = createDocumentFragment();\n\t\t\t\t\tthis.render( docFrag );\n\t\t\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t\t\t} else {\n\t\t\t\t\tthis.render( parentNode );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tshuffled () {\n\t\tthis.items.forEach( shuffled );\n\t}\n\n\ttoString ( escape ) {\n\t\treturn this.items.map( escape ? toEscapedString : toString ).join( '' );\n\t}\n\n\tunbind () {\n\t\tthis.context = null;\n\t\tthis.items.forEach( unbind );\n\t\tthis.bound = false;\n\n\t\treturn this;\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tthis.items.forEach( shouldDestroy ? unrenderAndDestroy : unrender );\n\t\tthis.rendered = false;\n\t}\n\n\tupdate () {\n\t\tif ( this.dirty ) {\n\t\t\tif ( !this.updating ) {\n\t\t\t\tthis.dirty = false;\n\t\t\t\tthis.updating = true;\n\t\t\t\tthis.items.forEach( update );\n\t\t\t\tthis.updating = false;\n\t\t\t} else if ( this.isRoot ) {\n\t\t\t\trunloop.addFragmentToRoot( this );\n\t\t\t}\n\t\t}\n\t}\n\n\tvalueOf () {\n\t\tif ( this.items.length === 1 ) {\n\t\t\treturn this.items[0].valueOf();\n\t\t}\n\n\t\tif ( this.dirtyValue ) {\n\t\t\tconst values = {};\n\t\t\tconst source = processItems( this.items, values, this.ractive._guid );\n\t\t\tconst parsed = parseJSON( source, values );\n\n\t\t\tthis.value = parsed ?\n\t\t\t\tparsed.value :\n\t\t\t\tthis.toString();\n\n\t\t\tthis.dirtyValue = false;\n\t\t}\n\n\t\treturn this.value;\n\t}\n}\nFragment.prototype.getContext = getContext;\n"",""import { TEXT } from 'config/types';\n\n// TODO all this code needs to die\nexport default function processItems ( items, values, guid, counter = 0 ) {\n\treturn items.map( item => {\n\t\tif ( item.type === TEXT ) {\n\t\t\treturn item.template;\n\t\t}\n\n\t\tif ( item.fragment ) {\n\t\t\tif ( item.fragment.iterations ) {\n\t\t\t\treturn item.fragment.iterations.map( fragment => {\n\t\t\t\t\treturn processItems( fragment.items, values, guid, counter );\n\t\t\t\t}).join( '' );\n\t\t\t} else {\n\t\t\t\treturn processItems( item.fragment.items, values, guid, counter );\n\t\t\t}\n\t\t}\n\n\t\tconst placeholderId = `${guid}-${counter++}`;\n\t\tconst model = item.model || item.newModel;\n\n\t\tvalues[ placeholderId ] = model ?\n\t\t\tmodel.wrapper ?\n\t\t\t\tmodel.wrapperValue :\n\t\t\t\tmodel.get() :\n\t\t\tundefined;\n\n\t\treturn '${' + placeholderId + '}';\n\t}).join( '' );\n}\n"",""import { ALIAS, ANCHOR, COMMENT, COMPONENT, DOCTYPE, ELEMENT, INTERPOLATOR, PARTIAL, SECTION, TRIPLE, YIELDER } from 'config/types';\nimport { ATTRIBUTE, BINDING_FLAG, DECORATOR, EVENT, TRANSITION } from 'config/types';\nimport Alias from './Alias';\nimport Attribute from './element/Attribute';\nimport BindingFlag from './element/BindingFlag';\nimport Comment from './Comment';\nimport Component from './Component';\nimport Decorator from './element/Decorator';\nimport Doctype from './Doctype';\nimport Form from './element/specials/Form';\nimport Element from './Element';\nimport EventDirective from './shared/EventDirective';\nimport Interpolator from './Interpolator';\nimport Input from './element/specials/Input';\nimport Mapping from './component/Mapping';\nimport Option from './element/specials/Option';\nimport Partial from './Partial';\nimport Section from './Section';\nimport Select from './element/specials/Select';\nimport Textarea from './element/specials/Textarea';\nimport Text from './Text';\nimport Transition from './element/Transition';\nimport Triple from './Triple';\nimport getComponentConstructor from './component/getComponentConstructor';\nimport findElement from './shared/findElement';\nimport { findInstance } from 'shared/registry';\nimport asyncProxy from './asyncProxy';\nimport { isString, isFunction } from 'utils/is';\n\nconst constructors = {};\nconstructors[ ALIAS ] = Alias;\nconstructors[ ANCHOR ] = Component;\nconstructors[ DOCTYPE ] = Doctype;\nconstructors[ INTERPOLATOR ] = Interpolator;\nconstructors[ PARTIAL ] = Partial;\nconstructors[ SECTION ] = Section;\nconstructors[ TRIPLE ] = Triple;\nconstructors[ YIELDER ] = Partial;\n\nconstructors[ ATTRIBUTE ] = Attribute;\nconstructors[ BINDING_FLAG ] = BindingFlag;\nconstructors[ DECORATOR ] = Decorator;\nconstructors[ EVENT ] = EventDirective;\nconstructors[ TRANSITION ] = Transition;\nconstructors[ COMMENT ] = Comment;\n\nconst specialElements = {\n\tdoctype: Doctype,\n\tform: Form,\n\tinput: Input,\n\toption: Option,\n\tselect: Select,\n\ttextarea: Textarea\n};\n\nexport default function createItem ( options ) {\n\tif ( isString( options.template ) ) {\n\t\treturn new Text( options );\n\t}\n\n\tlet ctor;\n\tlet name;\n\tconst type = options.template.t;\n\n\tif ( type === ELEMENT ) {\n\t\tname = options.template.e;\n\n\t\t// could be a macro partial\n\t\tctor = findInstance( 'partials', options.up.ractive, name );\n\t\tif ( ctor ) {\n\t\t\tctor = ctor.partials[ name ];\n\t\t\tif ( ctor.styleSet ) {\n\t\t\t\toptions.macro = ctor;\n\t\t\t\treturn new Partial( options );\n\t\t\t}\n\t\t}\n\n\t\t// could be component or element\n\t\tctor = getComponentConstructor( options.up.ractive, name );\n\t\tif ( ctor ) {\n\t\t\tif ( isFunction( ctor.then ) ) {\n\t\t\t\treturn asyncProxy( ctor, options );\n\t\t\t} else {\n\t\t\t\treturn new Component( options, ctor );\n\t\t\t}\n\t\t}\n\n\t\tctor = specialElements[ name.toLowerCase() ] || Element;\n\t\treturn new ctor( options );\n\t}\n\n\tlet Item;\n\n\t// component mappings are a special case of attribute\n\tif ( type === ATTRIBUTE ) {\n\t\tlet el = options.owner;\n\t\tif ( !el || ( el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT ) ) {\n\t\t\tel = findElement( options.up );\n\t\t}\n\t\toptions.element = el;\n\n\t\tItem = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;\n\t} else {\n\t\tItem = constructors[ type ];\n\t}\n\n\tif ( !Item ) throw new Error( `Unrecognised item type ${type}` );\n\n\treturn new Item( options );\n}\n"",""import Partial from './Partial';\nimport { ELEMENT } from 'config/types';\nimport { assign } from 'utils/object';\n\nexport default function asyncProxy ( promise, options ) {\n\tconst partials = options.template.p || {};\n\tconst name = options.template.e;\n\n\tconst opts = assign( {}, options, {\n\t\ttemplate: { t: ELEMENT, e: name },\n\t\tmacro ( handle ) {\n\t\t\thandle.setTemplate( partials['async-loading'] || [] );\n\t\t\tpromise.then( cmp => {\n\t\t\t\toptions.up.ractive.components[ name ] = cmp;\n\t\t\t\tif ( partials['async-loaded'] ) {\n\t\t\t\t\thandle.partials.component = [ options.template ];\n\t\t\t\t\thandle.setTemplate( partials['async-loaded'] );\n\t\t\t\t} else {\n\t\t\t\t\thandle.setTemplate( [ options.template ] );\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tif ( partials['async-failed'] ) {\n\t\t\t\t\thandle.aliasLocal( 'error', 'error' );\n\t\t\t\t\thandle.set( '@local.error', err );\n\t\t\t\t\thandle.setTemplate( partials['async-failed'] );\n\t\t\t\t} else {\n\t\t\t\t\thandle.setTemplate( [] );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn new Partial( opts );\n}\n\n"",""import { noRegistryFunctionReturn } from 'config/errors';\nimport { warnIfDebug } from 'utils/log';\nimport { findInstance } from 'shared/registry';\nimport { hasOwn } from 'utils/object';\nimport { isString } from 'utils/is';\n\n// finds the component constructor in the registry or view hierarchy registries\nexport default function getComponentConstructor ( ractive, name ) {\n\tconst instance = findInstance( 'components', ractive, name );\n\tlet Component;\n\n\tif ( instance ) {\n\t\tComponent = instance.components[ name ];\n\n\t\t// if not from Ractive.extend or a Promise, it's a function that shold return a constructor\n\t\tif ( Component && !Component.isInstance && !Component.then ) {\n\t\t\t// function option, execute and store for reset\n\t\t\tconst fn = Component.bind( instance );\n\t\t\tfn.isOwner = hasOwn( instance.components, name );\n\t\t\tComponent = fn();\n\n\t\t\tif ( !Component ) {\n\t\t\t\twarnIfDebug( noRegistryFunctionReturn, name, 'component', 'component', { ractive });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isString( Component ) ) {\n\t\t\t\t// allow string lookup\n\t\t\t\tComponent = getComponentConstructor( ractive, Component );\n\t\t\t}\n\n\t\t\tComponent._fn = fn;\n\t\t\tinstance.components[ name ] = Component;\n\t\t}\n\t}\n\n\treturn Component;\n}\n"",""import { createDocumentFragment, matches } from 'utils/dom';\nimport { detachNode } from 'utils/dom';\nimport { decodeCharacterReferences } from 'utils/html';\nimport runloop from 'src/global/runloop';\nimport Mustache from './shared/Mustache';\nimport insertHtml from './triple/insertHtml';\nimport { inAttribute } from './element/Attribute';\n\nexport default class Triple extends Mustache {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\t}\n\n\tdetach () {\n\t\tconst docFrag = createDocumentFragment();\n\t\tif ( this.nodes ) this.nodes.forEach( node => docFrag.appendChild( node ) );\n\t\treturn docFrag;\n\t}\n\n\tfind ( selector ) {\n\t\tconst len = this.nodes.length;\n\t\tlet i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tconst node = this.nodes[i];\n\n\t\t\tif ( node.nodeType !== 1 ) continue;\n\n\t\t\tif ( matches( node, selector ) ) return node;\n\n\t\t\tconst queryResult = node.querySelector( selector );\n\t\t\tif ( queryResult ) return queryResult;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindAll ( selector, options ) {\n\t\tconst { result } = options;\n\t\tconst len = this.nodes.length;\n\t\tlet i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tconst node = this.nodes[i];\n\n\t\t\tif ( node.nodeType !== 1 ) continue;\n\n\t\t\tif ( matches( node, selector ) ) result.push( node );\n\n\t\t\tconst queryAllResult = node.querySelectorAll( selector );\n\t\t\tif ( queryAllResult ) {\n\t\t\t\tresult.push.apply( result, queryAllResult );\n\t\t\t}\n\t\t}\n\t}\n\n\tfindComponent () {\n\t\treturn null;\n\t}\n\n\tfirstNode () {\n\t\treturn this.rendered && this.nodes[0];\n\t}\n\n\trender ( target, occupants, anchor ) {\n\t\tif ( !this.nodes ) {\n\t\t\tconst html = this.model ? this.model.get() : '';\n\t\t\tthis.nodes = insertHtml( html, target );\n\t\t}\n\n\t\tlet nodes = this.nodes;\n\n\t\t// progressive enhancement\n\t\tif ( occupants ) {\n\t\t\tlet i = -1;\n\t\t\tlet next;\n\n\t\t\t// start with the first node that should be rendered\n\t\t\twhile ( occupants.length && ( next = this.nodes[ i + 1 ] ) ) {\n\t\t\t\tlet n;\n\t\t\t\t// look through the occupants until a matching node is found\n\t\t\t\twhile ( n = occupants.shift() ) {\n\t\t\t\t\tconst t = n.nodeType;\n\n\t\t\t\t\tif ( t === next.nodeType && ( ( t === 1 && n.outerHTML === next.outerHTML ) || ( ( t === 3 || t === 8 ) && n.nodeValue === next.nodeValue ) ) ) {\n\t\t\t\t\t\tthis.nodes.splice( ++i, 1, n ); // replace the generated node with the existing one\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.removeChild( n ); // remove the non-matching existing node\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( i >= 0 ) {\n\t\t\t\t// update the list of remaining nodes to attach, excluding any that were replaced by existing nodes\n\t\t\t\tnodes = this.nodes.slice( i );\n\t\t\t}\n\n\t\t\t// update the anchor to be the next occupant\n\t\t\tif ( occupants.length ) anchor = occupants[0];\n\t\t}\n\n\t\t// attach any remainging nodes to the parent\n\t\tif ( nodes.length ) {\n\t\t\tconst frag = createDocumentFragment();\n\t\t\tnodes.forEach( n => frag.appendChild( n ) );\n\n\t\t\tif ( anchor ) {\n\t\t\t\ttarget.insertBefore( frag, anchor );\n\t\t\t} else {\n\t\t\t\ttarget.appendChild( frag );\n\t\t\t}\n\t\t}\n\n\t\tthis.rendered = true;\n\t}\n\n\ttoString () {\n\t\tlet value = this.model && this.model.get();\n\t\tvalue = value != null ? '' + value : '';\n\n\t\treturn inAttribute() ? decodeCharacterReferences( value ) : value;\n\t}\n\n\tunrender () {\n\t\tif ( this.nodes ) this.nodes.forEach( node => {\n\t\t\t// defer detachment until all relevant outros are done\n\t\t\trunloop.detachWhenReady( { node, detach() { detachNode( node ); } } );\n\t\t});\n\t\tthis.rendered = false;\n\t\tthis.nodes = null;\n\t}\n\n\tupdate () {\n\t\tif ( this.rendered && this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tthis.unrender();\n\t\t\tthis.render( this.up.findParentNode(), null, this.up.findNextNode( this ) );\n\t\t} else {\n\t\t\t// make sure to reset the dirty flag even if not rendered\n\t\t\tthis.dirty = false;\n\t\t}\n\t}\n}\n"",""import { svg } from 'config/namespaces';\nimport { createElement } from 'utils/dom';\n\nconst elementCache = {};\n\nlet ieBug;\nlet ieBlacklist;\n\ntry {\n\tcreateElement( 'table' ).innerHTML = 'foo';\n} catch /* istanbul ignore next */ ( err ) {\n\tieBug = true;\n\n\tieBlacklist = {\n\t\tTABLE:  [ '<table class=\""x\"">', '</table>' ],\n\t\tTHEAD:  [ '<table><thead class=\""x\"">', '</thead></table>' ],\n\t\tTBODY:  [ '<table><tbody class=\""x\"">', '</tbody></table>' ],\n\t\tTR:     [ '<table><tr class=\""x\"">', '</tr></table>' ],\n\t\tSELECT: [ '<select class=\""x\"">', '</select>' ]\n\t};\n}\n\nexport default function ( html, node ) {\n\tconst nodes = [];\n\n\t// render 0 and false\n\tif ( html == null || html === '' ) return nodes;\n\n\tlet container;\n\tlet wrapper;\n\tlet selectedOption;\n\n\t/* istanbul ignore if */\n\tif ( ieBug && ( wrapper = ieBlacklist[ node.tagName ] ) ) {\n\t\tcontainer = element( 'DIV' );\n\t\tcontainer.innerHTML = wrapper[0] + html + wrapper[1];\n\t\tcontainer = container.querySelector( '.x' );\n\n\t\tif ( container.tagName === 'SELECT' ) {\n\t\t\tselectedOption = container.options[ container.selectedIndex ];\n\t\t}\n\t}\n\n\telse if ( node.namespaceURI === svg ) {\n\t\tcontainer = element( 'DIV' );\n\t\tcontainer.innerHTML = '<svg class=\""x\"">' + html + '</svg>';\n\t\tcontainer = container.querySelector( '.x' );\n\t}\n\n\telse if ( node.tagName === 'TEXTAREA' ) {\n\t\tcontainer = createElement( 'div' );\n\n\t\tif ( typeof container.textContent !== 'undefined' ) {\n\t\t\tcontainer.textContent = html;\n\t\t} else {\n\t\t\tcontainer.innerHTML = html;\n\t\t}\n\t}\n\n\telse {\n\t\tcontainer = element( node.tagName );\n\t\tcontainer.innerHTML = html;\n\n\t\tif ( container.tagName === 'SELECT' ) {\n\t\t\tselectedOption = container.options[ container.selectedIndex ];\n\t\t}\n\t}\n\n\tlet child;\n\twhile ( child = container.firstChild ) {\n\t\tnodes.push( child );\n\t\tcontainer.removeChild( child );\n\t}\n\n\t// This is really annoying. Extracting <option> nodes from the\n\t// temporary container <select> causes the remaining ones to\n\t// become selected. So now we have to deselect them. IE8, you\n\t// amaze me. You really do\n\t// ...and now Chrome too\n\tlet i;\n\tif ( node.tagName === 'SELECT' ) {\n\t\ti = nodes.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( nodes[i] !== selectedOption ) {\n\t\t\t\tnodes[i].selected = false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nodes;\n}\n\nfunction element ( tagName ) {\n\treturn elementCache[ tagName ] || ( elementCache[ tagName ] = createElement( tagName ) );\n}\n"",""import { win } from 'config/environment';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport { isArray, isObject, isFunction, isNumber, isString } from 'utils/is';\nimport noop from 'utils/noop';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport { findInViewHierarchy } from 'shared/registry';\nimport { visible } from 'config/visibility';\nimport findElement from '../shared/findElement';\nimport prefix from './transitions/prefix';\nimport createTransitions from './transitions/createTransitions';\nimport { resolveArgs, setupArgsFn } from '../shared/directiveArgs';\nimport { assign, hasOwn, keys } from 'utils/object';\n\nconst getComputedStyle = win && win.getComputedStyle;\nconst resolved = Promise.resolve();\n\nconst names = {\n\tt0: 'intro-outro',\n\tt1: 'intro',\n\tt2: 'outro'\n};\n\nexport default class Transition {\n\tconstructor ( options ) {\n\t\tthis.owner = options.owner || options.up.owner || findElement( options.up );\n\t\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.up );\n\t\tthis.ractive = this.owner.ractive;\n\t\tthis.template = options.template;\n\t\tthis.up = options.up;\n\t\tthis.options = options;\n\t\tthis.onComplete = [];\n\t}\n\n\tanimateStyle ( style, value, options ) {\n\t\tif ( arguments.length === 4 ) {\n\t\t\tthrow new Error( 't.animateStyle() returns a promise - use .then() instead of passing a callback' );\n\t\t}\n\n\t\t// Special case - page isn't visible. Don't animate anything, because\n\t\t// that way you'll never get CSS transitionend events\n\t\tif ( !visible ) {\n\t\t\tthis.setStyle( style, value );\n\t\t\treturn resolved;\n\t\t}\n\n\t\tlet to;\n\n\t\tif ( isString( style ) ) {\n\t\t\tto = {};\n\t\t\tto[ style ] = value;\n\t\t} else {\n\t\t\tto = style;\n\n\t\t\t// shuffle arguments\n\t\t\toptions = value;\n\t\t}\n\n\t\treturn new Promise( fulfil => {\n\t\t\t// Edge case - if duration is zero, set style synchronously and complete\n\t\t\tif ( !options.duration ) {\n\t\t\t\tthis.setStyle( to );\n\t\t\t\tfulfil();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get a list of the properties we're animating\n\t\t\tconst propertyNames = keys( to );\n\t\t\tconst changedProperties = [];\n\n\t\t\t// Store the current styles\n\t\t\tconst computedStyle = getComputedStyle( this.node );\n\n\t\t\tlet i = propertyNames.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tconst prop = propertyNames[i];\n\t\t\t\tconst name = prefix( prop );\n\n\t\t\t\tconst current = computedStyle[ prefix( prop ) ];\n\n\t\t\t\t// record the starting points\n\t\t\t\tconst init = this.node.style[name];\n\t\t\t\tif ( !( name in this.originals ) ) this.originals[ name ] = this.node.style[ name ];\n\t\t\t\tthis.node.style[ name ] = to[ prop ];\n\t\t\t\tthis.targets[ name ] = this.node.style[ name ];\n\t\t\t\tthis.node.style[ name ] = init;\n\n\t\t\t\t// we need to know if we're actually changing anything\n\t\t\t\tif ( current != to[ prop ] ) { // use != instead of !==, so we can compare strings with numbers\n\t\t\t\t\tchangedProperties.push( name );\n\n\t\t\t\t\t// if we happened to prefix, make sure there is a properly prefixed value\n\t\t\t\t\tto[ name ] = to[ prop ];\n\n\t\t\t\t\t// make the computed style explicit, so we can animate where\n\t\t\t\t\t// e.g. height='auto'\n\t\t\t\t\tthis.node.style[ name ] = current;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we're not actually changing anything, the transitionend event\n\t\t\t// will never fire! So we complete early\n\t\t\tif ( !changedProperties.length ) {\n\t\t\t\tfulfil();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcreateTransitions( this, to, options, changedProperties, fulfil );\n\t\t});\n\t}\n\n\tbind () {\n\t\tconst options = this.options;\n\t\tconst type = options.template && options.template.v;\n\t\tif ( type ) {\n\t\t\tif ( type === 't0' || type === 't1' ) this.element.intro = this;\n\t\t\tif ( type === 't0' || type === 't2' ) this.element.outro = this;\n\t\t\tthis.eventName = names[ type ];\n\t\t}\n\n\t\tconst ractive = this.owner.ractive;\n\n\t\tthis.name = options.name || options.template.n;\n\n\t\tif ( options.params ) {\n\t\t\tthis.params = options.params;\n\t\t}\n\n\t\tif ( isFunction( this.name ) ) {\n\t\t\tthis._fn = this.name;\n\t\t\tthis.name = this._fn.name;\n\t\t} else {\n\t\t\tthis._fn = findInViewHierarchy( 'transitions', ractive, this.name );\n\t\t}\n\n\t\tif ( !this._fn ) {\n\t\t\twarnOnceIfDebug( missingPlugin( this.name, 'transition' ), { ractive });\n\t\t}\n\n\t\tsetupArgsFn( this, options.template );\n\t}\n\n\tgetParams () {\n\t\tif ( this.params ) return this.params;\n\n\t\t// get expression args if supplied\n\t\tif ( this.fn ) {\n\t\t\tconst values = resolveArgs( this, this.template, this.up ).map( model => {\n\t\t\t\tif ( !model ) return undefined;\n\n\t\t\t\treturn model.get();\n\t\t\t});\n\t\t\treturn this.fn.apply( this.ractive, values );\n\t\t}\n\t}\n\n\tgetStyle ( props ) {\n\t\tconst computedStyle = getComputedStyle( this.node );\n\n\t\tif ( isString( props ) ) {\n\t\t\treturn computedStyle[ prefix( props ) ];\n\t\t}\n\n\t\tif ( !isArray( props ) ) {\n\t\t\tthrow new Error( 'Transition$getStyle must be passed a string, or an array of strings representing CSS properties' );\n\t\t}\n\n\t\tconst styles = {};\n\n\t\tlet i = props.length;\n\t\twhile ( i-- ) {\n\t\t\tconst prop = props[i];\n\t\t\tlet value = computedStyle[ prefix( prop ) ];\n\n\t\t\tif ( value === '0px' ) value = 0;\n\t\t\tstyles[ prop ] = value;\n\t\t}\n\n\t\treturn styles;\n\t}\n\n\tprocessParams ( params, defaults ) {\n\t\tif ( isNumber( params ) ) {\n\t\t\tparams = { duration: params };\n\t\t}\n\n\t\telse if ( isString( params ) ) {\n\t\t\tif ( params === 'slow' ) {\n\t\t\t\tparams = { duration: 600 };\n\t\t\t} else if ( params === 'fast' ) {\n\t\t\t\tparams = { duration: 200 };\n\t\t\t} else {\n\t\t\t\tparams = { duration: 400 };\n\t\t\t}\n\t\t} else if ( !params ) {\n\t\t\tparams = {};\n\t\t}\n\n\t\treturn assign( {}, defaults, params );\n\t}\n\n\tregisterCompleteHandler ( fn ) {\n\t\taddToArray( this.onComplete, fn );\n\t}\n\n\tsetStyle ( style, value ) {\n\t\tif ( isString( style ) ) {\n\t\t\tconst name = prefix(  style );\n\t\t\tif ( !hasOwn( this.originals, name ) ) this.originals[ name ] = this.node.style[ name ];\n\t\t\tthis.node.style[ name ] = value;\n\t\t\tthis.targets[ name ] = this.node.style[ name ];\n\t\t}\n\n\t\telse {\n\t\t\tlet prop;\n\t\t\tfor ( prop in style ) {\n\t\t\t\tif ( hasOwn( style, prop ) ) {\n\t\t\t\t\tthis.setStyle( prop, style[ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tshouldFire ( type ) {\n\t\tif ( !this.ractive.transitionsEnabled ) return false;\n\n\t\t// check for noIntro and noOutro cases, which only apply when the owner ractive is rendering and unrendering, respectively\n\t\tif ( type === 'intro' && this.ractive.rendering && nearestProp( 'noIntro', this.ractive, true ) ) return false;\n\t\tif ( type === 'outro' && this.ractive.unrendering && nearestProp( 'noOutro', this.ractive, false ) ) return false;\n\n\t\tconst params = this.getParams(); // this is an array, the params object should be the first member\n\t\t// if there's not a parent element, this can't be nested, so roll on\n\t\tif ( !this.element.parent ) return true;\n\n\t\t// if there is a local param, it takes precedent\n\t\tif ( params && params[0] && isObject(params[0]) && 'nested' in params[0] ) {\n\t\t\tif ( params[0].nested !== false ) return true;\n\t\t} else { // use the nearest instance setting\n\t\t\t// find the nearest instance that actually has a nested setting\n\t\t\tif ( nearestProp( 'nestedTransitions', this.ractive ) !== false ) return true;\n\t\t}\n\n\t\t// check to see if this is actually a nested transition\n\t\tlet el = this.element.parent;\n\t\twhile ( el ) {\n\t\t\tif ( el[type] && el[type].starting ) return false;\n\t\t\tel = el.parent;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tstart () {\n\t\tconst node = this.node = this.element.node;\n\t\tconst originals = this.originals = {};  //= node.getAttribute( 'style' );\n\t\tconst targets = this.targets = {};\n\n\t\tlet completed;\n\t\tconst args = this.getParams();\n\n\t\t// create t.complete() - we don't want this on the prototype,\n\t\t// because we don't want `this` silliness when passing it as\n\t\t// an argument\n\t\tthis.complete = noReset => {\n\t\t\tthis.starting = false;\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.onComplete.forEach( fn => fn() );\n\t\t\tif ( !noReset && this.isIntro ) {\n\t\t\t\tfor ( const k in targets ) {\n\t\t\t\t\tif ( node.style[ k ] === targets[ k ] ) node.style[ k ] = originals[ k ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._manager.remove( this );\n\n\t\t\tcompleted = true;\n\t\t};\n\n\t\t// If the transition function doesn't exist, abort\n\t\tif ( !this._fn ) {\n\t\t\tthis.complete();\n\t\t\treturn;\n\t\t}\n\n\t\tconst promise = this._fn.apply( this.ractive, [ this ].concat( args ) );\n\t\tif ( promise ) promise.then( this.complete );\n\t}\n\n\ttoString () { return ''; }\n\n\tunbind () {\n\t\tif ( !this.element.attributes.unbinding ) {\n\t\t\tconst type = this.options && this.options.template && this.options.template.v;\n\t\t\tif ( type === 't0' || type === 't1' ) this.element.intro = null;\n\t\t\tif ( type === 't0' || type === 't2' ) this.element.outro = null;\n\t\t}\n\t}\n\n\tunregisterCompleteHandler ( fn ) {\n\t\tremoveFromArray( this.onComplete, fn );\n\t}\n}\n\nconst proto = Transition.prototype;\nproto.destroyed = proto.render = proto.unrender = proto.update = noop;\n\nfunction nearestProp ( prop, ractive, rendering ) {\n\tlet instance = ractive;\n\twhile ( instance ) {\n\t\tif ( hasOwn( instance, prop ) && ( rendering === undefined || rendering ? instance.rendering : instance.unrendering ) ) return instance[ prop ];\n\t\tinstance = instance.component && instance.component.ractive;\n\t}\n\n\treturn ractive[ prop ];\n}\n"",""import { missingPlugin } from 'config/errors';\nimport { isClient } from 'config/environment';\nimport { warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { createElement } from 'utils/dom';\nimport interpolate from 'shared/interpolate';\nimport Ticker from 'shared/Ticker';\nimport hyphenate from './hyphenate';\nimport { isFunction, isString } from 'utils/is';\n\nlet createTransitions;\n\nif ( !isClient ) {\n\tcreateTransitions = null;\n} else {\n\tconst testStyle = createElement( 'div' ).style;\n\tconst linear = x => x;\n\n\tconst canUseCssTransitions = {};\n\tconst cannotUseCssTransitions = {};\n\n\t// determine some facts about our environment\n\tlet TRANSITION;\n\tlet TRANSITIONEND;\n\tlet CSS_TRANSITIONS_ENABLED;\n\tlet TRANSITION_DURATION;\n\tlet TRANSITION_PROPERTY;\n\tlet TRANSITION_TIMING_FUNCTION;\n\n\tif ( testStyle.transition !== undefined ) {\n\t\tTRANSITION = 'transition';\n\t\tTRANSITIONEND = 'transitionend';\n\t\tCSS_TRANSITIONS_ENABLED = true;\n\t} else if ( testStyle.webkitTransition !== undefined ) {\n\t\tTRANSITION = 'webkitTransition';\n\t\tTRANSITIONEND = 'webkitTransitionEnd';\n\t\tCSS_TRANSITIONS_ENABLED = true;\n\t} else {\n\t\tCSS_TRANSITIONS_ENABLED = false;\n\t}\n\n\tif ( TRANSITION ) {\n\t\tTRANSITION_DURATION = TRANSITION + 'Duration';\n\t\tTRANSITION_PROPERTY = TRANSITION + 'Property';\n\t\tTRANSITION_TIMING_FUNCTION = TRANSITION + 'TimingFunction';\n\t}\n\n\tcreateTransitions = function ( t, to, options, changedProperties, resolve ) {\n\n\t\t// Wait a beat (otherwise the target styles will be applied immediately)\n\t\t// TODO use a fastdom-style mechanism?\n\t\tsetTimeout( () => {\n\t\t\tlet jsTransitionsComplete;\n\t\t\tlet cssTransitionsComplete;\n\t\t\tlet cssTimeout; // eslint-disable-line prefer-const\n\n\t\t\tfunction transitionDone () { clearTimeout( cssTimeout ); }\n\n\t\t\tfunction checkComplete () {\n\t\t\t\tif ( jsTransitionsComplete && cssTransitionsComplete ) {\n\t\t\t\t\tt.unregisterCompleteHandler( transitionDone );\n\t\t\t\t\t// will changes to events and fire have an unexpected consequence here?\n\t\t\t\t\tt.ractive.fire( t.name + ':end', t.node, t.isIntro );\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// this is used to keep track of which elements can use CSS to animate\n\t\t\t// which properties\n\t\t\tconst hashPrefix = ( t.node.namespaceURI || '' ) + t.node.tagName;\n\n\t\t\t// need to reset transition properties\n\t\t\tconst style = t.node.style;\n\t\t\tconst previous = {\n\t\t\t\tproperty: style[ TRANSITION_PROPERTY ],\n\t\t\t\ttiming: style[ TRANSITION_TIMING_FUNCTION ],\n\t\t\t\tduration: style[ TRANSITION_DURATION ]\n\t\t\t};\n\n\t\t\tfunction transitionEndHandler ( event ) {\n\t\t\t\tconst index = changedProperties.indexOf( event.propertyName );\n\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\tchangedProperties.splice( index, 1 );\n\t\t\t\t}\n\n\t\t\t\tif ( changedProperties.length ) {\n\t\t\t\t\t// still transitioning...\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( cssTimeout );\n\t\t\t\tcssTransitionsDone();\n\t\t\t}\n\n\t\t\tfunction cssTransitionsDone () {\n\t\t\t\tstyle[ TRANSITION_PROPERTY ] = previous.property;\n\t\t\t\tstyle[ TRANSITION_TIMING_FUNCTION ] = previous.duration;\n\t\t\t\tstyle[ TRANSITION_DURATION ] = previous.timing;\n\n\t\t\t\tt.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );\n\n\t\t\t\tcssTransitionsComplete = true;\n\t\t\t\tcheckComplete();\n\t\t\t}\n\n\t\t\tt.node.addEventListener( TRANSITIONEND, transitionEndHandler, false );\n\n\t\t\t// safety net in case transitionend never fires\n\t\t\tcssTimeout = setTimeout( () => {\n\t\t\t\tchangedProperties = [];\n\t\t\t\tcssTransitionsDone();\n\t\t\t}, options.duration + ( options.delay || 0 ) + 50 );\n\t\t\tt.registerCompleteHandler( transitionDone );\n\n\t\t\tstyle[ TRANSITION_PROPERTY ] = changedProperties.join( ',' );\n\t\t\tconst easingName = hyphenate( options.easing || 'linear' );\n\t\t\tstyle[ TRANSITION_TIMING_FUNCTION ] = easingName;\n\t\t\tconst cssTiming = style[ TRANSITION_TIMING_FUNCTION ] === easingName;\n\t\t\tstyle[ TRANSITION_DURATION ] = ( options.duration / 1000 ) + 's';\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tlet i = changedProperties.length;\n\t\t\t\tlet hash;\n\t\t\t\tlet originalValue = null;\n\t\t\t\tlet index;\n\t\t\t\tconst propertiesToTransitionInJs = [];\n\t\t\t\tlet prop;\n\t\t\t\tlet suffix;\n\t\t\t\tlet interpolator;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tprop = changedProperties[i];\n\t\t\t\t\thash = hashPrefix + prop;\n\n\t\t\t\t\tif ( cssTiming && CSS_TRANSITIONS_ENABLED && !cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\tconst initial = style[ prop ];\n\t\t\t\t\t\tstyle[ prop ] = to[ prop ];\n\n\t\t\t\t\t\t// If we're not sure if CSS transitions are supported for\n\t\t\t\t\t\t// this tag/property combo, find out now\n\t\t\t\t\t\tif ( !( hash in canUseCssTransitions ) ) {\n\t\t\t\t\t\t\toriginalValue = t.getStyle( prop );\n\n\t\t\t\t\t\t\t// if this property is transitionable in this browser,\n\t\t\t\t\t\t\t// the current style will be different from the target style\n\t\t\t\t\t\t\tcanUseCssTransitions[ hash ] = ( t.getStyle( prop ) != to[ prop ] );\n\t\t\t\t\t\t\tcannotUseCssTransitions[ hash ] = !canUseCssTransitions[ hash ];\n\n\t\t\t\t\t\t\t// Reset, if we're going to use timers after all\n\t\t\t\t\t\t\tif ( cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t\t\tstyle[ prop ] = initial;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !cssTiming || !CSS_TRANSITIONS_ENABLED || cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t// we need to fall back to timer-based stuff\n\t\t\t\t\t\tif ( originalValue === null ) originalValue = t.getStyle( prop );\n\n\t\t\t\t\t\t// need to remove this from changedProperties, otherwise transitionEndHandler\n\t\t\t\t\t\t// will get confused\n\t\t\t\t\t\tindex = changedProperties.indexOf( prop );\n\t\t\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\t\t\twarnIfDebug( 'Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!', { node: t.node });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchangedProperties.splice( index, 1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// TODO Determine whether this property is animatable at all\n\n\t\t\t\t\t\tsuffix = /[^\\d]*$/.exec( originalValue )[0];\n\t\t\t\t\t\tinterpolator = interpolate( parseFloat( originalValue ), parseFloat( to[ prop ] ) );\n\n\t\t\t\t\t\t// ...then kick off a timer-based transition\n\t\t\t\t\t\tif ( interpolator ) {\n\t\t\t\t\t\t\tpropertiesToTransitionInJs.push({\n\t\t\t\t\t\t\t\tname: prop,\n\t\t\t\t\t\t\t\tinterpolator,\n\t\t\t\t\t\t\t\tsuffix\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstyle[ prop ] = to[ prop ];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\toriginalValue = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// javascript transitions\n\t\t\t\tif ( propertiesToTransitionInJs.length ) {\n\t\t\t\t\tlet easing;\n\n\t\t\t\t\tif ( isString( options.easing ) ) {\n\t\t\t\t\t\teasing = t.ractive.easing[ options.easing ];\n\n\t\t\t\t\t\tif ( !easing ) {\n\t\t\t\t\t\t\twarnOnceIfDebug( missingPlugin( options.easing, 'easing' ) );\n\t\t\t\t\t\t\teasing = linear;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( isFunction( options.easing ) ) {\n\t\t\t\t\t\teasing = options.easing;\n\t\t\t\t\t} else {\n\t\t\t\t\t\teasing = linear;\n\t\t\t\t\t}\n\n\t\t\t\t\tnew Ticker({\n\t\t\t\t\t\tduration: options.duration,\n\t\t\t\t\t\teasing,\n\t\t\t\t\t\tstep ( pos ) {\n\t\t\t\t\t\t\tlet i = propertiesToTransitionInJs.length;\n\t\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\t\tconst prop = propertiesToTransitionInJs[i];\n\t\t\t\t\t\t\t\tstyle[ prop.name ] = prop.interpolator( pos ) + prop.suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete () {\n\t\t\t\t\t\t\tjsTransitionsComplete = true;\n\t\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tjsTransitionsComplete = true;\n\t\t\t\t}\n\n\t\t\t\tif ( changedProperties.length ) {\n\t\t\t\t\tstyle[ TRANSITION_PROPERTY ] = changedProperties.join( ',' );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ TRANSITION_PROPERTY ] = 'none';\n\n\t\t\t\t\t// We need to cancel the transitionEndHandler, and deal with\n\t\t\t\t\t// the fact that it will never fire\n\t\t\t\t\tt.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );\n\t\t\t\t\tcssTransitionsComplete = true;\n\t\t\t\t\tcheckComplete();\n\t\t\t\t}\n\t\t\t}, 0 );\n\t\t}, options.delay || 0 );\n\t};\n}\n\nexport default createTransitions;\n"",""import { vendors } from 'config/environment';\n\nconst vendorPattern = new RegExp( '^(?:' + vendors.join( '|' ) + ')([A-Z])' );\n\nexport default function ( str ) {\n\t/* istanbul ignore next */\n\tif ( !str ) return ''; // edge case\n\n\t/* istanbul ignore next */\n\tif ( vendorPattern.test( str ) ) str = '-' + str;\n\n\treturn str.replace( /[A-Z]/g, match => '-' + match.toLowerCase() );\n}\n"",""import { isClient, vendors } from 'config/environment';\nimport { createElement } from 'utils/dom';\nimport hyphenateCamel from 'utils/hyphenateCamel';\n\nlet prefix;\n\n/* istanbul ignore next */\nif ( !isClient ) {\n\tprefix = null;\n} else {\n\tconst prefixCache = {};\n\tconst testStyle = createElement( 'div' ).style;\n\n\t// technically this also normalizes on hyphenated styles as well\n\tprefix = function ( prop ) {\n\t\tif ( !prefixCache[ prop ] ) {\n\t\t\tconst name = hyphenateCamel( prop );\n\n\t\t\tif ( testStyle[ prop ] !== undefined ) {\n\t\t\t\tprefixCache[ prop ] = name;\n\t\t\t}\n\n\t\t\t/* istanbul ignore next */\n\t\t\telse {\n\t\t\t\t// test vendors...\n\t\t\t\tlet i = vendors.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tconst vendor = `-${vendors[i]}-${name}`;\n\t\t\t\t\tif ( testStyle[ vendor ] !== undefined ) {\n\t\t\t\t\t\tprefixCache[ prop ] = vendor;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn prefixCache[ prop ];\n\t};\n}\n\nexport default prefix;\n"",""import { win, doc, vendors } from './environment';\n\nexport let visible;\nlet hidden = 'hidden';\n\nif ( doc ) {\n\tlet prefix;\n\n\t/* istanbul ignore next */\n\tif ( hidden in doc ) {\n\t\tprefix = '';\n\t} else {\n\t\tlet i = vendors.length;\n\t\twhile ( i-- ) {\n\t\t\tconst vendor = vendors[i];\n\t\t\thidden = vendor + 'Hidden';\n\n\t\t\tif ( hidden in doc ) {\n\t\t\t\tprefix = vendor;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* istanbul ignore else */\n\tif ( prefix !== undefined ) {\n\t\tdoc.addEventListener( prefix + 'visibilitychange', onChange );\n\t\tonChange();\n\t} else {\n\t\t// gah, we're in an old browser\n\t\tif ( 'onfocusout' in doc ) {\n\t\t\tdoc.addEventListener( 'focusout', onHide );\n\t\t\tdoc.addEventListener( 'focusin', onShow );\n\t\t}\n\n\t\telse {\n\t\t\twin.addEventListener( 'pagehide', onHide );\n\t\t\twin.addEventListener( 'blur', onHide );\n\n\t\t\twin.addEventListener( 'pageshow', onShow );\n\t\t\twin.addEventListener( 'focus', onShow );\n\t\t}\n\n\t\tvisible = true; // until proven otherwise. Not ideal but hey\n\t}\n}\n\nfunction onChange () {\n\tvisible = !doc[ hidden ];\n}\n\n/* istanbul ignore next */\nfunction onHide () {\n\tvisible = false;\n}\n\n/* istanbul ignore next */\nfunction onShow () {\n\tvisible = true;\n}\n"",""import { TEXT } from 'config/types';\nimport { escapeHtml } from 'utils/html';\nimport { detachNode } from 'utils/dom';\nimport noop from 'utils/noop';\nimport Item from './shared/Item';\nimport progressiveText from './shared/progressiveText';\nimport { inAttributes } from './element/ConditionalAttribute';\n\nexport default class Text extends Item {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\t\tthis.type = TEXT;\n\t}\n\n\tdetach () {\n\t\treturn detachNode( this.node );\n\t}\n\n\tfirstNode () {\n\t\treturn this.node;\n\t}\n\n\trender ( target, occupants ) {\n\t\tif ( inAttributes() ) return;\n\t\tthis.rendered = true;\n\n\t\tprogressiveText( this, target, occupants, this.template );\n\t}\n\n\ttoString ( escape ) {\n\t\treturn escape ? escapeHtml( this.template ) : this.template;\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tif ( this.rendered && shouldDestroy ) this.detach();\n\t\tthis.rendered = false;\n\t}\n\n\tvalueOf () {\n\t\treturn this.template;\n\t}\n}\n\nconst proto = Text.prototype;\nproto.bind = proto.unbind = proto.update = noop;\n"",""import { ATTRIBUTE } from 'config/types';\nimport runloop from 'src/global/runloop';\nimport Input from './Input';\nimport { isBindable } from '../binding/selectBinding';\nimport createItem from '../../createItem';\nimport Fragment from '../../../Fragment';\n\nexport default class Textarea extends Input {\n\tconstructor( options ) {\n\t\tconst template = options.template;\n\n\t\toptions.deferContent = true;\n\n\t\tsuper( options );\n\n\t\t// check for single interpolator binding\n\t\tif ( !this.attributeByName.value ) {\n\t\t\tif ( template.f && isBindable( { template } ) ) {\n\t\t\t\t( this.attributes || ( this.attributes = [] ) ).push( createItem( {\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: { t: ATTRIBUTE, f: template.f, n: 'value' },\n\t\t\t\t\tup: this.up\n\t\t\t\t} ) );\n\t\t\t} else {\n\t\t\t\tthis.fragment = new Fragment({ owner: this, cssIds: null, template: template.f });\n\t\t\t}\n\t\t}\n\t}\n\n\tbubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\n\t\t\tif ( this.rendered && !this.binding && this.fragment ) {\n\t\t\t\trunloop.scheduleTask( () => {\n\t\t\t\t\tthis.dirty = false;\n\t\t\t\t\tthis.node.value = this.fragment.toString();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.up.bubble(); // default behaviour\n\t\t}\n\t}\n}\n"",""import { toArray } from 'utils/array';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Element from '../../Element';\nimport { isArray, isFunction } from 'utils/is';\n\nexport default class Select extends Element {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\t\tthis.options = [];\n\t}\n\n\tfoundNode ( node ) {\n\t\tif ( this.binding ) {\n\t\t\tconst selectedOptions = getSelectedOptions( node );\n\n\t\t\tif ( selectedOptions.length > 0 ) {\n\t\t\t\tthis.selectedOptions = selectedOptions;\n\t\t\t}\n\t\t}\n\t}\n\n\trender ( target, occupants ) {\n\t\tsuper.render( target, occupants );\n\t\tthis.sync();\n\n\t\tconst node = this.node;\n\n\t\tlet i = node.options.length;\n\t\twhile ( i-- ) {\n\t\t\tnode.options[i].defaultSelected = node.options[i].selected;\n\t\t}\n\n\t\tthis.rendered = true;\n\t}\n\n\tsync () {\n\t\tconst selectNode = this.node;\n\n\t\tif ( !selectNode ) return;\n\n\t\tconst options = toArray( selectNode.options );\n\n\t\tif ( this.selectedOptions ) {\n\t\t\toptions.forEach( o => {\n\t\t\t\tif ( this.selectedOptions.indexOf( o ) >= 0 ) o.selected = true;\n\t\t\t\telse o.selected = false;\n\t\t\t});\n\t\t\tthis.binding.setFromNode( selectNode );\n\t\t\tdelete this.selectedOptions;\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectValue = this.getAttribute( 'value' );\n\t\tconst isMultiple = this.getAttribute( 'multiple' );\n\t\tconst array = isMultiple && isArray( selectValue );\n\n\t\t// If the <select> has a specified value, that should override\n\t\t// these options\n\t\tif ( selectValue !== undefined ) {\n\t\t\tlet optionWasSelected;\n\n\t\t\toptions.forEach( o => {\n\t\t\t\tconst optionValue = o._ractive ? o._ractive.value : o.value;\n\t\t\t\tconst shouldSelect = isMultiple ?\n\t\t\t\t\tarray && this.valueContains( selectValue, optionValue ) :\n\t\t\t\t\tthis.compare( selectValue, optionValue );\n\n\t\t\t\tif ( shouldSelect ) {\n\t\t\t\t\toptionWasSelected = true;\n\t\t\t\t}\n\n\t\t\t\to.selected = shouldSelect;\n\t\t\t});\n\n\t\t\tif ( !optionWasSelected && !isMultiple ) {\n\t\t\t\tif ( this.binding ) {\n\t\t\t\t\tthis.binding.forceUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Otherwise the value should be initialised according to which\n\t\t// <option> element is selected, if twoway binding is in effect\n\t\telse if ( this.binding ) {\n\t\t\tthis.binding.forceUpdate();\n\t\t}\n\t}\n\tvalueContains ( selectValue, optionValue ) {\n\t\tlet i = selectValue.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this.compare( optionValue, selectValue[i] ) ) return true;\n\t\t}\n\t}\n\tcompare (optionValue, selectValue) {\n\t\tconst comparator = this.getAttribute( 'value-comparator' );\n\t\tif ( comparator ) {\n\t\t\tif ( isFunction( comparator ) ) {\n\t\t\t\treturn comparator( selectValue, optionValue );\n\t\t\t}\n\t\t\tif ( selectValue && optionValue ) {\n\t\t\t\treturn selectValue[comparator] == optionValue[comparator];\n\t\t\t}\n\t\t}\n\t\treturn selectValue == optionValue;\n\t}\n\tupdate () {\n\t\tconst dirty = this.dirty;\n\t\tsuper.update();\n\t\tif ( dirty ) {\n\t\t\tthis.sync();\n\t\t}\n\t}\n}\n"",""import { SECTION_EACH, SECTION_IF, SECTION_IF_WITH, SECTION_UNLESS, SECTION_WITH } from 'config/types';\nimport { createDocumentFragment } from 'utils/dom';\nimport { isArray, isObject, isObjectLike } from 'utils/is';\nimport { keep } from 'shared/set';\nimport runloop from 'src/global/runloop';\nimport Fragment from '../Fragment';\nimport RepeatedFragment from '../RepeatedFragment';\nimport { MustacheContainer } from './shared/Mustache';\nimport { keys } from 'utils/object';\n\nfunction isEmpty ( value ) {\n\treturn !value ||\n\t       ( isArray( value ) && value.length === 0 ) ||\n\t\t   ( isObject( value ) && keys( value ).length === 0 );\n}\n\nfunction getType ( value, hasIndexRef ) {\n\tif ( hasIndexRef || isArray( value ) ) return SECTION_EACH;\n\tif ( isObjectLike( value ) ) return SECTION_IF_WITH;\n\tif ( value === undefined ) return null;\n\treturn SECTION_IF;\n}\n\nexport default class Section extends MustacheContainer {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\n\t\tthis.sectionType = options.template.n || null;\n\t\tthis.templateSectionType = this.sectionType;\n\t\tthis.subordinate = options.template.l === 1;\n\t\tthis.fragment = null;\n\t}\n\n\tbind () {\n\t\tsuper.bind();\n\n\t\tif ( this.subordinate ) {\n\t\t\tthis.sibling = this.up.items[ this.up.items.indexOf( this ) - 1 ];\n\t\t\tthis.sibling.nextSibling = this;\n\t\t}\n\n\t\t// if we managed to bind, we need to create children\n\t\tif ( this.model ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.update();\n\t\t} else if ( this.sectionType && this.sectionType === SECTION_UNLESS && ( !this.sibling || !this.sibling.isTruthy() ) ) {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\towner: this,\n\t\t\t\ttemplate: this.template.f\n\t\t\t}).bind();\n\t\t}\n\t}\n\n\tdetach () {\n\t\tconst frag = this.fragment || this.detached;\n\t\treturn frag ? frag.detach() : super.detach();\n\t}\n\n\tisTruthy () {\n\t\tif ( this.subordinate && this.sibling.isTruthy() ) return true;\n\t\tconst value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n\t\treturn !!value && ( this.templateSectionType === SECTION_IF_WITH || !isEmpty( value ) );\n\t}\n\n\trebind ( next, previous, safe ) {\n\t\tif ( super.rebind( next, previous, safe ) ) {\n\t\t\tif ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {\n\t\t\t\tthis.fragment.rebind( next );\n\t\t\t}\n\t\t}\n\t}\n\n\trender ( target, occupants ) {\n\t\tthis.rendered = true;\n\t\tif ( this.fragment ) this.fragment.render( target, occupants );\n\t}\n\n\tshuffle ( newIndices ) {\n\t\tif ( this.fragment && this.sectionType === SECTION_EACH ) {\n\t\t\tthis.fragment.shuffle( newIndices );\n\t\t}\n\t}\n\n\tunbind () {\n\t\tsuper.unbind();\n\t\tif ( this.fragment ) this.fragment.unbind();\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tif ( this.rendered && this.fragment ) this.fragment.unrender( shouldDestroy );\n\t\tthis.rendered = false;\n\t}\n\n\tupdate () {\n\t\tif ( !this.dirty ) return;\n\n\t\tif ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {\n\t\t\tthis.fragment.context = this.model;\n\t\t}\n\n\t\tif ( !this.model && this.sectionType !== SECTION_UNLESS ) return;\n\n\t\tthis.dirty = false;\n\n\t\tconst value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n\t\tconst siblingFalsey = !this.subordinate || !this.sibling.isTruthy();\n\t\tconst lastType = this.sectionType;\n\n\t\t// watch for switching section types\n\t\tif ( this.sectionType === null || this.templateSectionType === null ) this.sectionType = getType( value, this.template.i );\n\t\tif ( lastType && lastType !== this.sectionType && this.fragment ) {\n\t\t\tif ( this.rendered ) {\n\t\t\t\tthis.fragment.unbind().unrender( true );\n\t\t\t}\n\n\t\t\tthis.fragment = null;\n\t\t}\n\n\t\tlet newFragment;\n\n\t\tconst fragmentShouldExist = this.sectionType === SECTION_EACH || // each always gets a fragment, which may have no iterations\n\t\t                            this.sectionType === SECTION_WITH || // with (partial context) always gets a fragment\n\t\t                            ( siblingFalsey && ( this.sectionType === SECTION_UNLESS ? !this.isTruthy() : this.isTruthy() ) ); // if, unless, and if-with depend on siblings and the condition\n\n\t\tif ( fragmentShouldExist ) {\n\t\t\tif ( !this.fragment ) this.fragment = this.detached;\n\n\t\t\tif ( this.fragment ) {\n\t\t\t\t// check for detached fragment\n\t\t\t\tif ( this.detached ) {\n\t\t\t\t\tattach( this, this.fragment );\n\t\t\t\t\tthis.detached = false;\n\t\t\t\t\tthis.rendered = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.fragment.bound ) this.fragment.bind( this.model );\n\t\t\t\tthis.fragment.update();\n\t\t\t} else {\n\t\t\t\tif ( this.sectionType === SECTION_EACH ) {\n\t\t\t\t\tnewFragment = new RepeatedFragment({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\ttemplate: this.template.f,\n\t\t\t\t\t\tindexRef: this.template.i\n\t\t\t\t\t}).bind( this.model );\n\t\t\t\t} else {\n\t\t\t\t\t// only with and if-with provide context - if and unless do not\n\t\t\t\t\tconst context = this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ? this.model : null;\n\t\t\t\t\tnewFragment = new Fragment({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\ttemplate: this.template.f\n\t\t\t\t\t}).bind( context );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.fragment && this.rendered ) {\n\t\t\t\tif ( keep !== true ) {\n\t\t\t\t\tthis.fragment.unbind().unrender( true );\n\t\t\t\t} else {\n\t\t\t\t\tthis.unrender( false );\n\t\t\t\t\tthis.detached = this.fragment;\n\t\t\t\t\trunloop.promise().then( () => {\n\t\t\t\t\t\tif ( this.detached ) this.detach();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if ( this.fragment ) {\n\t\t\t\tthis.fragment.unbind();\n\t\t\t}\n\n\t\t\tthis.fragment = null;\n\t\t}\n\n\t\tif ( newFragment ) {\n\t\t\tif ( this.rendered ) {\n\t\t\t\tattach( this, newFragment );\n\t\t\t}\n\n\t\t\tthis.fragment = newFragment;\n\t\t}\n\n\t\tif ( this.nextSibling ) {\n\t\t\tthis.nextSibling.dirty = true;\n\t\t\tthis.nextSibling.update();\n\t\t}\n\t}\n}\n\nfunction attach ( section, fragment ) {\n\tconst anchor = section.up.findNextNode( section );\n\n\tif ( anchor ) {\n\t\tconst docFrag = createDocumentFragment();\n\t\tfragment.render( docFrag );\n\n\t\tanchor.parentNode.insertBefore( docFrag, anchor );\n\t} else {\n\t\tfragment.render( section.up.findParentNode() );\n\t}\n}\n"",""import { createDocumentFragment } from 'utils/dom';\nimport { isArray, isObject } from 'utils/is';\nimport { findMap } from 'utils/array';\nimport { toEscapedString, toString, destroyed, shuffled, unbind, unrender, unrenderAndDestroy, update } from 'shared/methodCallers';\nimport Fragment from './Fragment';\nimport findElement from './items/shared/findElement';\nimport { getContext } from 'shared/getRactiveContext';\nimport { keys } from 'utils/object';\n\nexport default class RepeatedFragment {\n\tconstructor ( options ) {\n\t\tthis.parent = options.owner.up;\n\n\t\t// bit of a hack, so reference resolution works without another\n\t\t// layer of indirection\n\t\tthis.up = this;\n\t\tthis.owner = options.owner;\n\t\tthis.ractive = this.parent.ractive;\n\t\tthis.delegate = this.ractive.delegate !== false && ( this.parent.delegate || findDelegate( findElement( options.owner ) ) );\n\t\t// delegation disabled by directive\n\t\tif ( this.delegate && this.delegate.delegate === false ) this.delegate = false;\n\t\t// let the element know it's a delegate handler\n\t\tif ( this.delegate ) this.delegate.delegate = this.delegate;\n\n\t\t// encapsulated styles should be inherited until they get applied by an element\n\t\tthis.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );\n\n\t\tthis.context = null;\n\t\tthis.rendered = false;\n\t\tthis.iterations = [];\n\n\t\tthis.template = options.template;\n\n\t\tthis.indexRef = options.indexRef;\n\t\tthis.keyRef = options.keyRef;\n\n\t\tthis.pendingNewIndices = null;\n\t\tthis.previousIterations = null;\n\n\t\t// track array versus object so updates of type rest\n\t\tthis.isArray = false;\n\t}\n\n\tbind ( context ) {\n\t\tthis.context = context;\n\t\tthis.bound = true;\n\t\tconst value = context.get();\n\n\t\t// {{#each array}}...\n\t\tif ( this.isArray = isArray( value ) ) {\n\t\t\t// we can't use map, because of sparse arrays\n\t\t\tthis.iterations = [];\n\t\t\tconst max = value.length;\n\t\t\tfor ( let i = 0; i < max; i += 1 ) {\n\t\t\t\tthis.iterations[i] = this.createIteration( i, i );\n\t\t\t}\n\t\t}\n\n\t\t// {{#each object}}...\n\t\telse if ( isObject( value ) ) {\n\t\t\tthis.isArray = false;\n\n\t\t\t// TODO this is a dreadful hack. There must be a neater way\n\t\t\tif ( this.indexRef ) {\n\t\t\t\tconst refs = this.indexRef.split( ',' );\n\t\t\t\tthis.keyRef = refs[0];\n\t\t\t\tthis.indexRef = refs[1];\n\t\t\t}\n\n\t\t\tthis.iterations = keys( value ).map( ( key, index ) => {\n\t\t\t\treturn this.createIteration( key, index );\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tbubble ( index ) {\n\t\tif  ( !this.bubbled ) this.bubbled = [];\n\t\tthis.bubbled.push( index );\n\n\t\tthis.owner.bubble();\n\t}\n\n\tcreateIteration ( key, index ) {\n\t\tconst fragment = new Fragment({\n\t\t\towner: this,\n\t\t\ttemplate: this.template\n\t\t});\n\n\t\tfragment.key = key;\n\t\tfragment.index = index;\n\t\tfragment.isIteration = true;\n\t\tfragment.delegate = this.delegate;\n\n\t\tconst model = this.context.joinKey( key );\n\n\t\t// set up an iteration alias if there is one\n\t\tif ( this.owner.template.z ) {\n\t\t\tfragment.aliases = {};\n\t\t\tfragment.aliases[ this.owner.template.z[0].n ] = model;\n\t\t}\n\n\t\treturn fragment.bind( model );\n\t}\n\n\tdestroyed () {\n\t\tthis.iterations.forEach( destroyed );\n\t}\n\n\tdetach () {\n\t\tconst docFrag = createDocumentFragment();\n\t\tthis.iterations.forEach( fragment => docFrag.appendChild( fragment.detach() ) );\n\t\treturn docFrag;\n\t}\n\n\tfind ( selector, options ) {\n\t\treturn findMap( this.iterations, i => i.find( selector, options ) );\n\t}\n\n\tfindAll ( selector, options ) {\n\t\treturn this.iterations.forEach( i => i.findAll( selector, options ) );\n\t}\n\n\tfindAllComponents ( name, options ) {\n\t\treturn this.iterations.forEach( i => i.findAllComponents( name, options ) );\n\t}\n\n\tfindComponent ( name, options ) {\n\t\treturn findMap( this.iterations, i => i.findComponent( name, options ) );\n\t}\n\n\tfindContext () {\n\t\treturn this.context;\n\t}\n\n\tfindNextNode ( iteration ) {\n\t\tif ( iteration.index < this.iterations.length - 1 ) {\n\t\t\tfor ( let i = iteration.index + 1; i < this.iterations.length; i++ ) {\n\t\t\t\tconst node = this.iterations[ i ].firstNode( true );\n\t\t\t\tif ( node ) return node;\n\t\t\t}\n\t\t}\n\n\t\treturn this.owner.findNextNode();\n\t}\n\n\tfirstNode ( skipParent ) {\n\t\treturn this.iterations[0] ? this.iterations[0].firstNode( skipParent ) : null;\n\t}\n\n\trebind ( next ) {\n\t\tthis.context = next;\n\t\tthis.iterations.forEach( fragment => {\n\t\t\tconst model = next ? next.joinKey( fragment.key ) : undefined;\n\t\t\tfragment.context = model;\n\t\t\tif ( this.owner.template.z ) {\n\t\t\t\tfragment.aliases = {};\n\t\t\t\tfragment.aliases[ this.owner.template.z[0].n ] = model;\n\t\t\t}\n\t\t});\n\t}\n\n\trender ( target, occupants ) {\n\t\t// TODO use docFrag.cloneNode...\n\n\t\tconst xs = this.iterations;\n\t\tif ( xs ) {\n\t\t\tconst len = xs.length;\n\t\t\tfor ( let i = 0; i < len; i++ ) {\n\t\t\t\txs[i].render( target, occupants );\n\t\t\t}\n\t\t}\n\n\t\tthis.rendered = true;\n\t}\n\n\tshuffle ( newIndices ) {\n\t\tif ( !this.pendingNewIndices ) this.previousIterations = this.iterations.slice();\n\n\t\tif ( !this.pendingNewIndices ) this.pendingNewIndices = [];\n\n\t\tthis.pendingNewIndices.push( newIndices );\n\n\t\tconst iterations = [];\n\n\t\tnewIndices.forEach( ( newIndex, oldIndex ) => {\n\t\t\tif ( newIndex === -1 ) return;\n\n\t\t\tconst fragment = this.iterations[ oldIndex ];\n\t\t\titerations[ newIndex ] = fragment;\n\n\t\t\tif ( newIndex !== oldIndex && fragment ) fragment.dirty = true;\n\t\t});\n\n\t\tthis.iterations = iterations;\n\n\t\tthis.bubble();\n\t}\n\n\tshuffled () {\n\t\tthis.iterations.forEach( shuffled );\n\t}\n\n\ttoString ( escape ) {\n\t\treturn this.iterations ?\n\t\t\tthis.iterations.map( escape ? toEscapedString : toString ).join( '' ) :\n\t\t\t'';\n\t}\n\n\tunbind () {\n\t\tthis.bound = false;\n\t\tthis.iterations.forEach( unbind );\n\t\treturn this;\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tthis.iterations.forEach( shouldDestroy ? unrenderAndDestroy : unrender );\n\t\tif ( this.pendingNewIndices && this.previousIterations ) {\n\t\t\tthis.previousIterations.forEach( fragment => {\n\t\t\t\tif ( fragment.rendered ) shouldDestroy ? unrenderAndDestroy( fragment ) : unrender( fragment );\n\t\t\t});\n\t\t}\n\t\tthis.rendered = false;\n\t}\n\n\t// TODO smart update\n\tupdate () {\n\t\t// skip dirty check, since this is basically just a facade\n\n\t\tif ( this.pendingNewIndices ) {\n\t\t\tthis.bubbled.length = 0;\n\t\t\tthis.updatePostShuffle();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.updating ) return;\n\t\tthis.updating = true;\n\n\t\tconst value = this.context.get();\n\t\tconst wasArray = this.isArray;\n\n\t\tlet toRemove;\n\t\tlet oldKeys;\n\t\tlet reset = true;\n\t\tlet i;\n\n\t\tif ( this.isArray = isArray( value ) ) {\n\t\t\tif ( wasArray ) {\n\t\t\t\treset = false;\n\t\t\t\tif ( this.iterations.length > value.length ) {\n\t\t\t\t\ttoRemove = this.iterations.splice( value.length );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( isObject( value ) && !wasArray ) {\n\t\t\treset = false;\n\t\t\ttoRemove = [];\n\t\t\toldKeys = {};\n\t\t\ti = this.iterations.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tconst fragment = this.iterations[i];\n\t\t\t\tif ( fragment.key in value ) {\n\t\t\t\t\toldKeys[ fragment.key ] = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.iterations.splice( i, 1 );\n\t\t\t\t\ttoRemove.push( fragment );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( reset ) {\n\t\t\ttoRemove = this.iterations;\n\t\t\tthis.iterations = [];\n\t\t}\n\n\t\tif ( toRemove ) {\n\t\t\ttoRemove.forEach( fragment => {\n\t\t\t\tfragment.unbind();\n\t\t\t\tfragment.unrender( true );\n\t\t\t});\n\t\t}\n\n\t\t// update the remaining ones\n\t\tif ( !reset && this.isArray && this.bubbled && this.bubbled.length ) {\n\t\t\tconst bubbled = this.bubbled;\n\t\t\tthis.bubbled = [];\n\t\t\tbubbled.forEach( i => this.iterations[i] && this.iterations[i].update() );\n\t\t} else {\n\t\t\tthis.iterations.forEach( update );\n\t\t}\n\n\t\t// add new iterations\n\t\tconst newLength = isArray( value ) ?\n\t\t\tvalue.length :\n\t\t\tisObject( value ) ?\n\t\t\t\tkeys( value ).length :\n\t\t\t\t0;\n\n\t\tlet docFrag;\n\t\tlet fragment;\n\n\t\tif ( newLength > this.iterations.length ) {\n\t\t\tdocFrag = this.rendered ? createDocumentFragment() : null;\n\t\t\ti = this.iterations.length;\n\n\t\t\tif ( isArray( value ) ) {\n\t\t\t\twhile ( i < value.length ) {\n\t\t\t\t\tfragment = this.createIteration( i, i );\n\n\t\t\t\t\tthis.iterations.push( fragment );\n\t\t\t\t\tif ( this.rendered ) fragment.render( docFrag );\n\n\t\t\t\t\ti += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if ( isObject( value ) ) {\n\t\t\t\t// TODO this is a dreadful hack. There must be a neater way\n\t\t\t\tif ( this.indexRef && !this.keyRef ) {\n\t\t\t\t\tconst refs = this.indexRef.split( ',' );\n\t\t\t\t\tthis.keyRef = refs[0];\n\t\t\t\t\tthis.indexRef = refs[1];\n\t\t\t\t}\n\n\t\t\t\tkeys( value ).forEach( key => {\n\t\t\t\t\tif ( !oldKeys || !( key in oldKeys ) ) {\n\t\t\t\t\t\tfragment = this.createIteration( key, i );\n\n\t\t\t\t\t\tthis.iterations.push( fragment );\n\t\t\t\t\t\tif ( this.rendered ) fragment.render( docFrag );\n\n\t\t\t\t\t\ti += 1;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( this.rendered ) {\n\t\t\t\tconst parentNode = this.parent.findParentNode();\n\t\t\t\tconst anchor = this.parent.findNextNode( this.owner );\n\n\t\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t\t}\n\t\t}\n\n\t\tthis.updating = false;\n\t}\n\n\tupdatePostShuffle () {\n\t\tconst newIndices = this.pendingNewIndices[ 0 ];\n\n\t\t// map first shuffle through\n\t\tthis.pendingNewIndices.slice( 1 ).forEach( indices => {\n\t\t\tnewIndices.forEach( ( newIndex, oldIndex ) => {\n\t\t\t\tnewIndices[ oldIndex ] = indices[ newIndex ];\n\t\t\t});\n\t\t});\n\n\t\t// This algorithm (for detaching incorrectly-ordered fragments from the DOM and\n\t\t// storing them in a document fragment for later reinsertion) seems a bit hokey,\n\t\t// but it seems to work for now\n\t\tconst len = this.context.get().length;\n\t\tconst oldLen = this.previousIterations.length;\n\t\tconst removed = {};\n\t\tlet i;\n\n\t\tnewIndices.forEach( ( newIndex, oldIndex ) => {\n\t\t\tconst fragment = this.previousIterations[ oldIndex ];\n\t\t\tthis.previousIterations[ oldIndex ] = null;\n\n\t\t\tif ( newIndex === -1 ) {\n\t\t\t\tremoved[ oldIndex ] = fragment;\n\t\t\t} else if ( fragment.index !== newIndex ) {\n\t\t\t\tconst model = this.context.joinKey( newIndex );\n\t\t\t\tfragment.index = fragment.key = newIndex;\n\t\t\t\tfragment.context = model;\n\t\t\t\tif ( this.owner.template.z ) {\n\t\t\t\t\tfragment.aliases = {};\n\t\t\t\t\tfragment.aliases[ this.owner.template.z[0].n ] = model;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// if the array was spliced outside of ractive, sometimes there are leftover fragments not in the newIndices\n\t\tthis.previousIterations.forEach( ( frag, i ) => {\n\t\t\tif ( frag ) removed[ i ] = frag;\n\t\t});\n\n\t\t// create new/move existing iterations\n\t\tconst docFrag = this.rendered ? createDocumentFragment() : null;\n\t\tconst parentNode = this.rendered ? this.parent.findParentNode() : null;\n\n\t\tconst contiguous = 'startIndex' in newIndices;\n\t\ti = contiguous ? newIndices.startIndex : 0;\n\n\t\tfor ( i; i < len; i++ ) {\n\t\t\tconst frag = this.iterations[i];\n\n\t\t\tif ( frag && contiguous ) {\n\t\t\t\t// attach any built-up iterations\n\t\t\t\tif ( this.rendered ) {\n\t\t\t\t\tif ( removed[i] ) docFrag.appendChild( removed[i].detach() );\n\t\t\t\t\tif ( docFrag.childNodes.length  ) parentNode.insertBefore( docFrag, frag.firstNode() );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( !frag ) this.iterations[i] = this.createIteration( i, i );\n\n\t\t\tif ( this.rendered ) {\n\t\t\t\tif ( removed[i] ) docFrag.appendChild( removed[i].detach() );\n\n\t\t\t\tif ( frag ) docFrag.appendChild( frag.detach() );\n\t\t\t\telse {\n\t\t\t\t\tthis.iterations[i].render( docFrag );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// append any leftovers\n\t\tif ( this.rendered ) {\n\t\t\tfor ( i = len; i < oldLen; i++ ) {\n\t\t\t\tif ( removed[i] ) docFrag.appendChild( removed[i].detach() );\n\t\t\t}\n\n\t\t\tif ( docFrag.childNodes.length ) {\n\t\t\t\tparentNode.insertBefore( docFrag, this.owner.findNextNode() );\n\t\t\t}\n\t\t}\n\n\t\t// trigger removal on old nodes\n\t\tkeys( removed ).forEach( k => removed[k].unbind().unrender( true ) );\n\n\t\tthis.iterations.forEach( update );\n\n\t\tthis.pendingNewIndices = null;\n\n\t\tthis.shuffled();\n\t}\n}\n\nRepeatedFragment.prototype.getContext = getContext;\n\n// find the topmost delegate\nfunction findDelegate ( start ) {\n\tlet el = start;\n\tlet delegate = start;\n\n\twhile ( el ) {\n\t\tif ( el.delegate ) delegate = el;\n\t\tel = el.parent;\n\t}\n\n\treturn delegate;\n}\n"",""import { ELEMENT, PARTIAL, SECTION, SECTION_WITH, YIELDER } from 'config/types';\nimport { assign, create, hasOwn, keys } from 'utils/object';\nimport { isArray, isFunction, isObjectType, isString } from 'utils/is';\nimport noop from 'utils/noop';\nimport { MustacheContainer } from './shared/Mustache';\nimport Fragment from '../Fragment';\nimport getPartialTemplate from './partial/getPartialTemplate';\nimport { resolveAliases } from './Alias';\nimport { warnOnceIfDebug, warnIfDebug } from 'utils/log';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport runloop from 'src/global/runloop';\nimport { applyCSS } from 'src/global/css';\nimport { splitKeypath } from 'shared/keypaths';\n\nexport default function Partial ( options ) {\n\tMustacheContainer.call( this, options );\n\n\tconst tpl = options.template;\n\n\t// yielder is a special form of partial that will later require special handling\n\tif ( tpl.t === YIELDER ) {\n\t\tthis.yielder = 1;\n\t}\n\n\t// this is a macro partial, complete with macro constructor\n\telse if ( tpl.t === ELEMENT ) {\n\t\t// leaving this as an element will confuse up-template searches\n\t\tthis.type = PARTIAL;\n\t\tthis.macro = options.macro;\n\t}\n}\n\nconst proto = Partial.prototype = create( MustacheContainer.prototype );\n\nassign( proto, {\n\tconstructor: Partial,\n\n\tbind () {\n\t\tconst template = this.template;\n\n\t\tif ( this.yielder ) {\n\t\t\t// the container is the instance that owns this node\n\t\t\tthis.container = this.up.ractive;\n\t\t\tthis.component = this.container.component;\n\t\t\tthis.containerFragment = this.up;\n\n\t\t\t// normal component\n\t\t\tif ( this.component ) {\n\t\t\t\t// yields skip the owning instance and go straight to the surrounding context\n\t\t\t\tthis.up = this.component.up;\n\n\t\t\t\t// {{yield}} is equivalent to {{yield content}}\n\t\t\t\tif ( !template.r && !template.x && !template.tx ) this.refName = 'content';\n\t\t\t}\n\n\t\t\t// plain-ish instance that may be attached to a parent later\n\t\t\telse {\n\t\t\t\tthis.fragment = new Fragment({\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: []\n\t\t\t\t});\n\t\t\t\tthis.fragment.bind();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// this is a macro/super partial\n\t\tif ( this.macro ) {\n\t\t\tthis.fn = this.macro;\n\t\t}\n\n\t\t// this is a plain partial or yielder\n\t\telse {\n\t\t\tif ( !this.refName ) this.refName = template.r;\n\n\t\t\t// if the refName exists as a partial, this is a plain old partial reference where no model binding will happen\n\t\t\tif ( this.refName ) {\n\t\t\t\tpartialFromValue( this, this.refName );\n\t\t\t}\n\n\t\t\t// this is a dynamic/inline partial\n\t\t\tif ( !this.partial && !this.fn ) {\n\t\t\t\tMustacheContainer.prototype.bind.call( this );\n\t\t\t\tif ( this.model ) partialFromValue( this, this.model.get() );\n\t\t\t}\n\t\t}\n\n\t\tif ( !this.partial && !this.fn ) {\n\t\t\twarnOnceIfDebug( `Could not find template for partial '${this.name}'` );\n\t\t}\n\n\t\tcreateFragment( this, this.partial || [] );\n\n\t\t// macro/super partial\n\t\tif ( this.fn ) initMacro( this );\n\n\t\tthis.fragment.bind();\n\t},\n\n\tbubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\n\t\t\tif ( this.yielder ) {\n\t\t\t\tthis.containerFragment.bubble();\n\t\t\t} else {\n\t\t\t\tthis.up.bubble();\n\t\t\t}\n\t\t}\n\t},\n\n\tfindNextNode () {\n\t\treturn ( this.containerFragment || this.up ).findNextNode( this );\n\t},\n\n\thandleChange () {\n\t\tthis.dirtyTemplate = true;\n\t\tthis.externalChange = true;\n\t\tthis.bubble();\n\t},\n\n\trefreshAttrs () {\n\t\tkeys( this._attrs ).forEach( k => {\n\t\t\tthis.handle.attributes[k] = this._attrs[k].valueOf();\n\t\t});\n\t},\n\n\tresetTemplate () {\n\t\tif ( this.fn && this.proxy ) {\n\t\t\tif ( this.externalChange ) {\n\t\t\t\tif ( isFunction( this.proxy.teardown ) ) this.proxy.teardown();\n\t\t\t\tthis.fn = this.proxy = null;\n\t\t\t} else {\n\t\t\t\tthis.partial = this.fnTemplate;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.partial = null;\n\n\t\tif ( this.refName ) {\n\t\t\tthis.partial = getPartialTemplate( this.ractive, this.refName, this.up );\n\t\t}\n\n\t\tif ( !this.partial && this.model ) {\n\t\t\tpartialFromValue( this, this.model.get() );\n\t\t}\n\n\t\tthis.unbindAttrs();\n\n\t\tif ( this.fn ) {\n\t\t\tinitMacro( this );\n\t\t\tif ( isFunction( this.proxy.render ) ) runloop.scheduleTask( () => this.proxy.render() );\n\t\t} else if ( !this.partial ) {\n\t\t\twarnOnceIfDebug( `Could not find template for partial '${this.name}'` );\n\t\t}\n\t},\n\n\trender ( target, occupants ) {\n\t\tif ( this.fn && this.fn._cssDef && !this.fn._cssDef.applied ) applyCSS();\n\n\t\tthis.fragment.render( target, occupants );\n\n\t\tif ( this.proxy && isFunction( this.proxy.render ) ) this.proxy.render();\n\t},\n\n\tunbind () {\n\t\tthis.fragment.unbind();\n\n\t\tthis.fragment.aliases = null;\n\n\t\tthis.unbindAttrs();\n\n\t\tMustacheContainer.prototype.unbind.call( this );\n\t},\n\n\tunbindAttrs () {\n\t\tif ( this._attrs ) {\n\t\t\tkeys( this._attrs ).forEach( k => {\n\t\t\t\tthis._attrs[k].unbind();\n\t\t\t});\n\t\t}\n\t},\n\n\tunrender ( shouldDestroy ) {\n\t\tif ( this.proxy && isFunction( this.proxy.teardown ) ) this.proxy.teardown();\n\n\t\tthis.fragment.unrender( shouldDestroy );\n\t},\n\n\tupdate () {\n\t\tconst proxy = this.proxy;\n\t\tthis.updating = 1;\n\n\t\tif ( this.dirtyAttrs ) {\n\t\t\tthis.dirtyAttrs = false;\n\t\t\tthis.refreshAttrs();\n\t\t\tif ( isFunction( proxy.update ) ) proxy.update( this.handle.attributes );\n\t\t}\n\n\t\tif ( this.dirtyTemplate ) {\n\t\t\tthis.dirtyTemplate = false;\n\t\t\tthis.resetTemplate();\n\n\t\t\tthis.fragment.resetTemplate( this.partial || [] );\n\t\t}\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( proxy && isFunction( proxy.invalidate ) ) proxy.invalidate();\n\t\t\tthis.fragment.update();\n\t\t}\n\n\t\tthis.externalChange = false;\n\t\tthis.updating = 0;\n\t}\n});\n\nfunction createFragment ( self, partial ) {\n\tself.partial = partial;\n\tcontextifyTemplate( self );\n\n\tconst options = {\n\t\towner: self,\n\t\ttemplate: self.partial\n\t};\n\n\tif ( self.yielder ) options.ractive = self.container.parent;\n\n\tif ( self.fn ) options.cssIds = self.fn._cssIds;\n\n\tconst fragment = self.fragment = new Fragment( options );\n\n\t// partials may have aliases that need to be in place before binding\n\tif ( self.template.z ) {\n\t\tfragment.aliases = resolveAliases( self.template.z, self.containerFragment || self.up );\n\t}\n}\n\nfunction contextifyTemplate ( self ) {\n\tif ( self.template.c ) {\n\t\tself.partial = [{ t: SECTION, n: SECTION_WITH, f: self.partial }];\n\t\tassign( self.partial[0], self.template.c );\n\t}\n}\n\nfunction partialFromValue ( self, value, okToParse ) {\n\tlet tpl = value;\n\n\tif ( isArray( tpl ) ) {\n\t\tself.partial = tpl;\n\t} else if ( isObjectType( tpl ) ) {\n\t\tif ( isArray( tpl.t ) ) self.partial = tpl.t;\n\t\telse if ( isString( tpl.template ) ) self.partial = parsePartial( tpl.template, tpl.template, self.ractive ).t;\n\t} else if ( isFunction( tpl ) && tpl.styleSet ) {\n\t\tself.fn = tpl;\n\t\tif ( self.fragment ) self.fragment.cssIds = tpl._cssIds;\n\t} else if ( tpl != null ) {\n\t\ttpl = getPartialTemplate( self.ractive, '' + tpl, self.containerFragment || self.up );\n\t\tif ( tpl ) {\n\t\t\tself.name = value;\n\t\t\tif ( tpl.styleSet ) {\n\t\t\t\tself.fn = tpl;\n\t\t\t\tif ( self.fragment ) self.fragment.cssIds = tpl._cssIds;\n\t\t\t} else self.partial = tpl;\n\t\t} else if ( okToParse ) {\n\t\t\tself.partial = parsePartial( '' + value, '' + value, self.ractive ).t;\n\t\t} else {\n\t\t\tself.name = value;\n\t\t}\n\t}\n\n\treturn self.partial;\n}\n\nfunction setTemplate ( template ) {\n\tpartialFromValue( this, template, true );\n\n\tif ( !this.initing ) {\n\t\tthis.dirtyTemplate = true;\n\t\tthis.fnTemplate = this.partial;\n\n\t\tif ( this.updating ) {\n\t\t\tthis.bubble();\n\t\t\trunloop.promise();\n\t\t} else {\n\t\t\tconst promise = runloop.start();\n\n\t\t\tthis.bubble();\n\t\t\trunloop.end();\n\n\t\t\treturn promise;\n\t\t}\n\t}\n}\n\nfunction aliasLocal ( ref, name ) {\n\tconst aliases = this.fragment.aliases || ( this.fragment.aliases = {} );\n\tif ( !name ) {\n\t\taliases[ ref ] = this._data;\n\t} else {\n\t\taliases[ name ] = this._data.joinAll( splitKeypath( ref ) );\n\t}\n}\n\nconst extras = 'extra-attributes';\n\nfunction initMacro ( self ) {\n\tconst fn = self.fn;\n\tconst fragment = self.fragment;\n\n\t// defensively copy the template in case it changes\n\tconst template = self.template = assign( {}, self.template );\n\tconst handle = self.handle = fragment.getContext({\n\t\tproxy: self,\n\t\taliasLocal,\n\t\tname: self.template.e || self.name,\n\t\tattributes: {},\n\t\tsetTemplate: setTemplate.bind( self ),\n\t\ttemplate\n\t});\n\n\tif ( !template.p ) template.p = {};\n\ttemplate.p = handle.partials = assign( {}, template.p );\n\tif ( !hasOwn( template.p, 'content' ) ) template.p.content = template.f || [];\n\n\tif ( isArray( fn.attributes ) ) {\n\t\tself._attrs = {};\n\n\t\tconst invalidate = function () {\n\t\t\tthis.dirty = true;\n\t\t\tself.dirtyAttrs = true;\n\t\t\tself.bubble();\n\t\t};\n\n\t\tif ( isArray( template.m ) ) {\n\t\t\tconst attrs = template.m;\n\t\t\ttemplate.p[ extras ] = template.m = attrs.filter( a => !~fn.attributes.indexOf( a.n ) );\n\t\t\tattrs.filter( a => ~fn.attributes.indexOf( a.n ) ).forEach( a => {\n\t\t\t\tconst fragment = new Fragment({\n\t\t\t\t\ttemplate: a.f,\n\t\t\t\t\towner: self\n\t\t\t\t});\n\t\t\t\tfragment.bubble = invalidate;\n\t\t\t\tfragment.findFirstNode = noop;\n\t\t\t\tself._attrs[ a.n ] = fragment;\n\t\t\t});\n\t\t} else {\n\t\t\ttemplate.p[ extras ] = [];\n\t\t}\n\t} else {\n\t\ttemplate.p[ extras ] = template.m;\n\t}\n\n\tif ( self._attrs ) {\n\t\tkeys( self._attrs ).forEach( k => {\n\t\t\tself._attrs[k].bind();\n\t\t});\n\t\tself.refreshAttrs();\n\t}\n\n\tself.initing = 1;\n\tself.proxy = fn( handle, handle.attributes ) || {};\n\tif ( !self.partial ) self.partial = [];\n\tself.fnTemplate = self.partial;\n\tself.initing = 0;\n\n\tcontextifyTemplate( self );\n\tfragment.resetTemplate( self.partial );\n}\n\nfunction parsePartial( name, partial, ractive ) {\n\tlet parsed;\n\n\ttry {\n\t\tparsed = parser.parse( partial, parser.getParseOptions( ractive ) );\n\t} catch (e) {\n\t\twarnIfDebug( `Could not parse partial from expression '${name}'\\n${e.message}` );\n\t}\n\n\treturn parsed || { t: [] };\n}\n"",""import { noRegistryFunctionReturn } from 'config/errors';\nimport { warnIfDebug } from 'utils/log';\nimport { fillGaps, hasOwn } from 'utils/object';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport { findInstance } from 'shared/registry';\nimport { isArray, isFunction } from 'utils/is';\n\nexport default function getPartialTemplate ( ractive, name, up ) {\n\t// If the partial in instance or view heirarchy instances, great\n\tlet partial = getPartialFromRegistry( ractive, name, up || {} );\n\tif ( partial ) return partial;\n\n\t// Does it exist on the page as a script tag?\n\tpartial = parser.fromId( name, { noThrow: true } );\n\tif ( partial ) {\n\t\t// parse and register to this ractive instance\n\t\tconst parsed = parser.parseFor( partial, ractive );\n\n\t\t// register extra partials on the ractive instance if they don't already exist\n\t\tif ( parsed.p ) fillGaps( ractive.partials, parsed.p );\n\n\t\t// register (and return main partial if there are others in the template)\n\t\treturn ractive.partials[ name ] = parsed.t;\n\t}\n}\n\nfunction getPartialFromRegistry ( ractive, name, up ) {\n\t// if there was an instance up-hierarchy, cool\n\tlet partial = findParentPartial( name, up.owner );\n\tif ( partial ) return partial;\n\n\t// find first instance in the ractive or view hierarchy that has this partial\n\tconst instance = findInstance( 'partials', ractive, name );\n\n\tif ( !instance ) { return; }\n\n\tpartial = instance.partials[ name ];\n\n\t// partial is a function?\n\tlet fn;\n\tif ( isFunction( partial ) ) {\n\t\tfn = partial;\n\t\t// super partial\n\t\tif ( fn.styleSet ) return fn;\n\n\t\tfn = partial.bind( instance );\n\t\tfn.isOwner = hasOwn( instance.partials, name );\n\t\tpartial = fn.call( ractive, parser );\n\t}\n\n\tif ( !partial && partial !== '' ) {\n\t\twarnIfDebug( noRegistryFunctionReturn, name, 'partial', 'partial', { ractive });\n\t\treturn;\n\t}\n\n\t// If this was added manually to the registry,\n\t// but hasn't been parsed, parse it now\n\tif ( !parser.isParsed( partial ) ) {\n\t\t// use the parseOptions of the ractive instance on which it was found\n\t\tconst parsed = parser.parseFor( partial, instance );\n\n\t\t// Partials cannot contain nested partials!\n\t\t// TODO add a test for this\n\t\tif ( parsed.p ) {\n\t\t\twarnIfDebug( 'Partials ({{>%s}}) cannot contain nested inline partials', name, { ractive });\n\t\t}\n\n\t\t// if fn, use instance to store result, otherwise needs to go\n\t\t// in the correct point in prototype chain on instance or constructor\n\t\tconst target = fn ? instance : findOwner( instance, name );\n\n\t\t// may be a template with partials, which need to be registered and main template extracted\n\t\ttarget.partials[ name ] = partial = parsed.t;\n\t}\n\n\t// store for reset\n\tif ( fn ) partial._fn = fn;\n\n\treturn partial.v ? partial.t : partial;\n}\n\nfunction findOwner ( ractive, key ) {\n\treturn hasOwn( ractive.partials, key )\n\t\t? ractive\n\t\t: findConstructor( ractive.constructor, key);\n}\n\nfunction findConstructor ( constructor, key ) {\n\tif ( !constructor ) { return; }\n\treturn hasOwn( constructor.partials, key )\n\t\t? constructor\n\t\t: findConstructor( constructor.Parent, key );\n}\n\nfunction findParentPartial( name, parent ) {\n\tif ( parent ) {\n\t\tif ( parent.template && parent.template.p && !isArray( parent.template.p ) && hasOwn( parent.template.p, name ) ) {\n\t\t\treturn parent.template.p[name];\n\t\t} else if ( parent.up && parent.up.owner ) {\n\t\t\treturn findParentPartial( name, parent.up.owner );\n\t\t}\n\t}\n}\n"",""import { removeFromArray } from 'utils/array';\nimport Element from '../../Element';\nimport findElement from '../../shared/findElement';\nimport { isArray } from 'utils/is';\n\nexport default class Option extends Element {\n\tconstructor ( options ) {\n\t\tconst template = options.template;\n\t\tif ( !template.a ) template.a = {};\n\n\t\t// If the value attribute is missing, use the element's content,\n\t\t// as long as it isn't disabled\n\t\tif ( template.a.value === undefined && !( 'disabled' in template.a ) ) {\n\t\t\ttemplate.a.value = template.f || '';\n\t\t}\n\n\t\tsuper( options );\n\n\t\tthis.select = findElement( this.parent || this.up, false, 'select' );\n\t}\n\n\tbind () {\n\t\tif ( !this.select ) {\n\t\t\tsuper.bind();\n\t\t\treturn;\n\t\t}\n\n\t\t// If the select has a value, it overrides the `selected` attribute on\n\t\t// this option - so we delete the attribute\n\t\tconst selectedAttribute = this.attributeByName.selected;\n\t\tif ( selectedAttribute && this.select.getAttribute( 'value' ) !== undefined ) {\n\t\t\tconst index = this.attributes.indexOf( selectedAttribute );\n\t\t\tthis.attributes.splice( index, 1 );\n\t\t\tdelete this.attributeByName.selected;\n\t\t}\n\n\t\tsuper.bind();\n\t\tthis.select.options.push( this );\n\t}\n\n\tbubble () {\n\t\t// if we're using content as value, may need to update here\n\t\tconst value = this.getAttribute( 'value' );\n\t\tif ( this.node && this.node.value !== value ) {\n\t\t\tthis.node._ractive.value = value;\n\t\t}\n\t\tsuper.bubble();\n\t}\n\n\tgetAttribute ( name ) {\n\t\tconst attribute = this.attributeByName[ name ];\n\t\treturn attribute ? attribute.getValue() : name === 'value' && this.fragment ? this.fragment.valueOf() : undefined;\n\t}\n\n\tisSelected () {\n\t\tconst optionValue = this.getAttribute( 'value' );\n\n\t\tif ( optionValue === undefined || !this.select ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst selectValue = this.select.getAttribute( 'value' );\n\n\t\tif ( this.select.compare( selectValue, optionValue ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( this.select.getAttribute( 'multiple' ) && isArray( selectValue ) ) {\n\t\t\tlet i = selectValue.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( this.select.compare( selectValue[i], optionValue ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\trender ( target, occupants ) {\n\t\tsuper.render( target, occupants );\n\n\t\tif ( !this.attributeByName.value ) {\n\t\t\tthis.node._ractive.value = this.getAttribute( 'value' );\n\t\t}\n\t}\n\n\tunbind () {\n\t\tsuper.unbind();\n\n\t\tif ( this.select ) {\n\t\t\tremoveFromArray( this.select.options, this );\n\t\t}\n\t}\n}\n"",""import { INTERPOLATOR } from '../../../config/types';\nimport Item from '../shared/Item';\nimport Fragment from '../../Fragment';\nimport findElement from '../shared/findElement';\nimport parseJSON from '../../../utils/parseJSON';\nimport resolve from '../../resolvers/resolve';\nimport runloop from '../../../global/runloop';\nimport { warnIfDebug } from 'utils/log';\nimport { splitKeypath } from 'shared/keypaths';\nimport { isArray, isObjectType, isString } from 'utils/is';\n\nexport default class Mapping extends Item {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\n\t\tthis.name = options.template.n;\n\n\t\tthis.owner = options.owner || options.up.owner || options.element || findElement( options.up );\n\t\tthis.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.up ) );\n\t\tthis.up = this.element.up; // shared\n\t\tthis.ractive = this.up.ractive;\n\n\t\tthis.element.attributeByName[ this.name ] = this;\n\n\t\tthis.value = options.template.f;\n\t}\n\n\tbind () {\n\t\tconst template = this.template.f;\n\t\tconst viewmodel = this.element.instance.viewmodel;\n\n\t\tif ( template === 0 ) {\n\t\t\t// empty attributes are `true`\n\t\t\tviewmodel.joinKey( this.name ).set( true );\n\t\t}\n\n\t\telse if ( isString( template ) ) {\n\t\t\tconst parsed = parseJSON( template );\n\t\t\tviewmodel.joinKey( this.name ).set( parsed ? parsed.value : template );\n\t\t}\n\n\t\telse if ( isArray( template ) ) {\n\t\t\tcreateMapping( this, true );\n\t\t}\n\t}\n\n\trender () {}\n\n\tunbind () {\n\t\tif ( this.model ) this.model.unregister( this );\n\t\tif ( this.boundFragment ) this.boundFragment.unbind();\n\n\t\tif ( this.element.bound ) {\n\t\t\tif ( this.link.target === this.model ) this.link.owner.unlink();\n\t\t}\n\t}\n\n\tunrender () {}\n\n\tupdate () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.boundFragment ) this.boundFragment.update();\n\t\t}\n\t}\n}\n\nfunction createMapping ( item ) {\n\tconst template = item.template.f;\n\tconst viewmodel = item.element.instance.viewmodel;\n\tconst childData = viewmodel.value;\n\n\tif ( template.length === 1 && template[0].t === INTERPOLATOR ) {\n\t\tconst model = resolve( item.up, template[0] );\n\t\tconst val = model.get( false );\n\n\t\t// if the interpolator is not static\n\t\tif ( !template[0].s ) {\n\t\t\titem.model = model;\n\t\t\titem.link = viewmodel.createLink( item.name, model, template[0].r, { mapping: true } );\n\n\t\t\t// initialize parent side of the mapping from child data\n\t\t\tif ( val === undefined && !model.isReadonly && item.name in childData ) {\n\t\t\t\tmodel.set( childData[ item.name ] );\n\t\t\t}\n\t\t}\n\n\t\t// copy non-object, non-computed vals through\n\t\telse if ( !isObjectType( val ) || template[0].x ) {\n\t\t\tviewmodel.joinKey( splitKeypath( item.name ) ).set( val );\n\t\t}\n\n\t\t// warn about trying to copy an object\n\t\telse {\n\t\t\twarnIfDebug( `Cannot copy non-computed object value from static mapping '${item.name}'` );\n\t\t}\n\t}\n\n\telse {\n\t\titem.boundFragment = new Fragment({\n\t\t\towner: item,\n\t\t\ttemplate\n\t\t}).bind();\n\n\t\titem.model = viewmodel.joinKey( splitKeypath( item.name ) );\n\t\titem.model.set( item.boundFragment.valueOf() );\n\n\t\t// item is a *bit* of a hack\n\t\titem.boundFragment.bubble = () => {\n\t\t\tFragment.prototype.bubble.call( item.boundFragment );\n\t\t\t// defer this to avoid mucking around model deps if there happens to be an expression involved\n\t\t\trunloop.scheduleTask(() => {\n\t\t\t\titem.boundFragment.update();\n\t\t\t\titem.model.set( item.boundFragment.valueOf() );\n\t\t\t});\n\t\t};\n\t}\n}\n"",""import Parser from 'parse/Parser';\nimport readStringLiteral from 'parse/converters/expressions/primary/literal/readStringLiteral';\nimport readKey from 'parse/converters/expressions/shared/readKey';\nimport { hasOwn, keys } from 'utils/object';\n\n// simple JSON parser, without the restrictions of JSON parse\n// (i.e. having to double-quote keys).\n//\n// If passed a hash of values as the second argument, ${placeholders}\n// will be replaced with those values\n\nconst specials = {\n\ttrue: true,\n\tfalse: false,\n\tnull: null,\n\tundefined\n};\n\nconst specialsPattern = new RegExp( '^(?:' + keys( specials ).join( '|' ) + ')' );\nconst numberPattern = /^(?:[+-]?)(?:(?:(?:0|[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\nconst placeholderPattern = /\\$\\{([^\\}]+)\\}/g;\nconst placeholderAtStartPattern = /^\\$\\{([^\\}]+)\\}/;\nconst onlyWhitespace = /^\\s*$/;\n\nconst JsonParser = Parser.extend({\n\tinit ( str, options ) {\n\t\tthis.values = options.values;\n\t\tthis.sp();\n\t},\n\n\tpostProcess ( result ) {\n\t\tif ( result.length !== 1 || !onlyWhitespace.test( this.leftover ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { value: result[0].v };\n\t},\n\n\tconverters: [\n\t\tfunction getPlaceholder ( parser ) {\n\t\t\tif ( !parser.values ) return null;\n\n\t\t\tconst placeholder = parser.matchPattern( placeholderAtStartPattern );\n\n\t\t\tif ( placeholder && ( hasOwn( parser.values, placeholder ) ) ) {\n\t\t\t\treturn { v: parser.values[ placeholder ] };\n\t\t\t}\n\t\t},\n\n\t\tfunction getSpecial ( parser ) {\n\t\t\tconst special = parser.matchPattern( specialsPattern );\n\t\t\tif ( special ) return { v: specials[ special ] };\n\t\t},\n\n\t\tfunction getNumber ( parser ) {\n\t\t\tconst number = parser.matchPattern( numberPattern );\n\t\t\tif ( number ) return { v: +number };\n\t\t},\n\n\t\tfunction getString ( parser ) {\n\t\t\tconst stringLiteral = readStringLiteral( parser );\n\t\t\tconst values = parser.values;\n\n\t\t\tif ( stringLiteral && values ) {\n\t\t\t\treturn {\n\t\t\t\t\tv: stringLiteral.v.replace( placeholderPattern, ( match, $1 ) => ( $1 in values ? values[ $1 ] : $1 ) )\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn stringLiteral;\n\t\t},\n\n\t\tfunction getObject ( parser ) {\n\t\t\tif ( !parser.matchString( '{' ) ) return null;\n\n\t\t\tconst result = {};\n\n\t\t\tparser.sp();\n\n\t\t\tif ( parser.matchString( '}' ) ) {\n\t\t\t\treturn { v: result };\n\t\t\t}\n\n\t\t\tlet pair;\n\t\t\twhile ( pair = getKeyValuePair( parser ) ) {\n\t\t\t\tresult[ pair.key ] = pair.value;\n\n\t\t\t\tparser.sp();\n\n\t\t\t\tif ( parser.matchString( '}' ) ) {\n\t\t\t\t\treturn { v: result };\n\t\t\t\t}\n\n\t\t\t\tif ( !parser.matchString( ',' ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\tfunction getArray ( parser ) {\n\t\t\tif ( !parser.matchString( '[' ) ) return null;\n\n\t\t\tconst result = [];\n\n\t\t\tparser.sp();\n\n\t\t\tif ( parser.matchString( ']' ) ) {\n\t\t\t\treturn { v: result };\n\t\t\t}\n\n\t\t\tlet valueToken;\n\t\t\twhile ( valueToken = parser.read() ) {\n\t\t\t\tresult.push( valueToken.v );\n\n\t\t\t\tparser.sp();\n\n\t\t\t\tif ( parser.matchString( ']' ) ) {\n\t\t\t\t\treturn { v: result };\n\t\t\t\t}\n\n\t\t\t\tif ( !parser.matchString( ',' ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tparser.sp();\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t]\n});\n\nfunction getKeyValuePair ( parser ) {\n\tparser.sp();\n\n\tconst key = readKey( parser );\n\n\tif ( !key ) return null;\n\n\tconst pair = { key };\n\n\tparser.sp();\n\tif ( !parser.matchString( ':' ) ) {\n\t\treturn null;\n\t}\n\tparser.sp();\n\n\tconst valueToken = parser.read();\n\n\tif ( !valueToken ) return null;\n\n\tpair.value = valueToken.v;\n\treturn pair;\n}\n\nexport default function ( str, values ) {\n\tconst parser = new JsonParser( str, { values });\n\treturn parser.result;\n}\n"",""import Element from '../../Element';\nimport { isFunction } from 'utils/is';\n\nexport default class Input extends Element {\n\trender ( target, occupants ) {\n\t\tsuper.render( target, occupants );\n\t\tthis.node.defaultValue = this.node.value;\n\t}\n\tcompare ( value, attrValue ) {\n\t\tconst comparator = this.getAttribute( 'value-comparator' );\n\t\tif ( comparator ) {\n\t\t\tif ( isFunction( comparator ) ) {\n\t\t\t\treturn comparator( value, attrValue );\n\t\t\t}\n\t\t\tif (value && attrValue) {\n\t\t\t\treturn value[comparator] == attrValue[comparator];\n\t\t\t}\n\t\t}\n\t\treturn value == attrValue;\n\t}\n}\n"",""import progressiveText from './shared/progressiveText';\nimport { escapeHtml } from 'utils/html';\nimport { safeToStringValue } from 'utils/dom';\nimport { detachNode } from 'utils/dom';\nimport Mustache from './shared/Mustache';\nimport { inAttributes } from './element/ConditionalAttribute';\n\nexport default class Interpolator extends Mustache {\n\tbubble () {\n\t\tif ( this.owner ) this.owner.bubble();\n\t\tsuper.bubble();\n\t}\n\n\tdetach () {\n\t\treturn detachNode( this.node );\n\t}\n\n\tfirstNode () {\n\t\treturn this.node;\n\t}\n\n\tgetString () {\n\t\treturn this.model ? safeToStringValue( this.model.get() ) : '';\n\t}\n\n\trender ( target, occupants ) {\n\t\tif ( inAttributes() ) return;\n\t\tconst value = this.getString();\n\n\t\tthis.rendered = true;\n\n\t\tprogressiveText( this, target, occupants, value );\n\t}\n\n\ttoString ( escape ) {\n\t\tconst string = this.getString();\n\t\treturn escape ? escapeHtml( string ) : string;\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tif ( shouldDestroy ) this.detach();\n\t\tthis.rendered = false;\n\t}\n\n\tupdate () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.rendered ) {\n\t\t\t\tthis.node.data = this.getString();\n\t\t\t}\n\t\t}\n\t}\n\n\tvalueOf () {\n\t\treturn this.model ? this.model.get() : undefined;\n\t}\n}\n"",""import { rebindMatch } from 'shared/rebind';\nimport Item, { ContainerItem } from './Item';\nimport resolve from '../../resolvers/resolve';\nimport { assign } from 'utils/object';\n\nexport default class Mustache extends Item {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\n\t\tif ( options.owner ) this.parent = options.owner;\n\n\t\tthis.isStatic = !!options.template.s;\n\n\t\tthis.model = null;\n\t\tthis.dirty = false;\n\t}\n\n\tbind () {\n\t\t// yield mustaches should resolve in container context\n\t\tconst start = this.containerFragment || this.up;\n\t\t// try to find a model for this view\n\t\tconst model = resolve( start, this.template );\n\n\t\tif ( model ) {\n\t\t\tconst value = model.get();\n\n\t\t\tif ( this.isStatic ) {\n\t\t\t\tthis.model = { get: () => value };\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmodel.register( this );\n\t\t\tthis.model = model;\n\t\t}\n\t}\n\n\thandleChange () {\n\t\tthis.bubble();\n\t}\n\n\trebind ( next, previous, safe ) {\n\t\tnext = rebindMatch( this.template, next, previous, this.up );\n\t\tif ( next === this.model ) return false;\n\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t}\n\t\tif ( next ) next.addShuffleRegister( this, 'mark' );\n\t\tthis.model = next;\n\t\tif ( !safe ) this.handleChange();\n\t\treturn true;\n\t}\n\n\tunbind () {\n\t\tif ( !this.isStatic ) {\n\t\t\tthis.model && this.model.unregister( this );\n\t\t\tthis.model = undefined;\n\t\t}\n\t}\n}\n\nexport function MustacheContainer ( options ) {\n\tMustache.call( this, options );\n}\n\nconst proto = MustacheContainer.prototype = Object.create( ContainerItem.prototype );\n\nassign( proto, Mustache.prototype, { constructor: MustacheContainer } );\n"",""import { doc } from 'config/environment';\n\nexport default function progressiveText ( item, target, occupants, text ) {\n\tif ( occupants ) {\n\t\tlet n = occupants[0];\n\t\tif ( n && n.nodeType === 3 ) {\n\t\t\tconst idx = n.nodeValue.indexOf( text );\n\t\t\toccupants.shift();\n\n\t\t\tif ( idx === 0 ) {\n\t\t\t\tif ( n.nodeValue.length !== text.length ) {\n\t\t\t\t\toccupants.unshift( n.splitText( text.length ) );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tn.nodeValue = text;\n\t\t\t}\n\t\t} else {\n\t\t\tn = item.node = doc.createTextNode( text );\n\t\t\tif ( occupants[0] ) {\n\t\t\t\ttarget.insertBefore( n, occupants[0] );\n\t\t\t} else {\n\t\t\t\ttarget.appendChild( n );\n\t\t\t}\n\t\t}\n\n\t\titem.node = n;\n\t} else {\n\t\tif ( !item.node ) item.node = doc.createTextNode( text );\n\t\ttarget.appendChild( item.node );\n\t}\n}\n"",""import { ANCHOR, COMPONENT } from 'config/types';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport fireEvent from 'src/events/fireEvent';\nimport { splitKeypath } from 'shared/keypaths';\nimport { findInViewHierarchy } from 'shared/registry';\nimport runloop from 'src/global/runloop';\nimport findElement from './findElement';\nimport { DOMEvent, CustomEvent } from '../element/ElementEvents';\nimport RactiveEvent from '../component/RactiveEvent';\nimport { resolveArgs, setupArgsFn } from '../shared/directiveArgs';\nimport Context from 'src/shared/Context';\nimport { isArray, isString } from 'utils/is';\n\nconst specialPattern = /^(event|arguments|@node|@event|@context)(\\..+)?$/;\nconst dollarArgsPattern = /^\\$(\\d+)(\\..+)?$/;\n\nexport default class EventDirective {\n\tconstructor ( options ) {\n\t\tthis.owner = options.owner || options.up.owner || findElement( options.up );\n\t\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.up, true );\n\t\tthis.template = options.template;\n\t\tthis.up = options.up;\n\t\tthis.ractive = options.up.ractive;\n\t\t//const delegate = this.delegate = this.ractive.delegate && options.up.delegate;\n\t\tthis.events = [];\n\n\t\tif ( this.element.type === COMPONENT || this.element.type === ANCHOR ) {\n\t\t\tthis.template.n.forEach( n => {\n\t\t\t\tthis.events.push( new RactiveEvent( this.element, n ) );\n\t\t\t});\n\t\t} else {\n\t\t\t// make sure the delegate element has a storag object\n\t\t\t//if ( delegate && !delegate.delegates ) delegate.delegates = {};\n\n\t\t\tthis.template.n.forEach( n => {\n\t\t\t\tconst fn = findInViewHierarchy( 'events', this.ractive, n );\n\t\t\t\tif ( fn ) {\n\t\t\t\t\tthis.events.push( new CustomEvent( fn, this.element, n ) );\n\t\t\t\t} else {\n\t\t\t\t\tthis.events.push( new DOMEvent( n, this.element ) );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// method calls\n\t\tthis.models = null;\n\t}\n\n\tbind () {\n\t\taddToArray( ( this.element.events || ( this.element.events = [] ) ), this );\n\n\t\tsetupArgsFn( this, this.template );\n\t\tif ( !this.fn ) this.action = this.template.f;\n\t}\n\n\tdestroyed () {\n\t\tthis.events.forEach( e => e.unlisten() );\n\t}\n\n\tfire ( event, args = [] ) {\n\t\tconst context = event instanceof Context && event.refire ? event : this.element.getContext( event );\n\n\t\tif ( this.fn ) {\n\t\t\tconst values = [];\n\n\t\t\tconst models = resolveArgs( this, this.template, this.up, {\n\t\t\t\tspecialRef ( ref ) {\n\t\t\t\t\tconst specialMatch = specialPattern.exec( ref );\n\t\t\t\t\tif ( specialMatch ) {\n\t\t\t\t\t\t// on-click=\""foo(event.node)\""\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tspecial: specialMatch[1],\n\t\t\t\t\t\t\tkeys: specialMatch[2] ? splitKeypath( specialMatch[2].substr(1) ) : []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst dollarMatch = dollarArgsPattern.exec( ref );\n\t\t\t\t\tif ( dollarMatch ) {\n\t\t\t\t\t\t// on-click=\""foo($1)\""\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tspecial: 'arguments',\n\t\t\t\t\t\t\tkeys: [ dollarMatch[1] - 1 ].concat( dollarMatch[2] ? splitKeypath( dollarMatch[2].substr( 1 ) ) : [] )\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif ( models ) {\n\t\t\t\tmodels.forEach( model => {\n\t\t\t\t\tif ( !model ) return values.push( undefined );\n\n\t\t\t\t\tif ( model.special ) {\n\t\t\t\t\t\tconst which = model.special;\n\t\t\t\t\t\tlet obj;\n\n\t\t\t\t\t\tif ( which === '@node' ) {\n\t\t\t\t\t\t\tobj = this.element.node;\n\t\t\t\t\t\t} else if ( which === '@event' ) {\n\t\t\t\t\t\t\tobj = event && event.event;\n\t\t\t\t\t\t} else if ( which === 'event' ) {\n\t\t\t\t\t\t\twarnOnceIfDebug( `The event reference available to event directives is deprecated and should be replaced with @context and @event` );\n\t\t\t\t\t\t\tobj = context;\n\t\t\t\t\t\t} else if ( which === '@context' ) {\n\t\t\t\t\t\t\tobj = context;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobj = args;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst keys = model.keys.slice();\n\n\t\t\t\t\t\twhile ( obj && keys.length ) obj = obj[ keys.shift() ];\n\t\t\t\t\t\treturn values.push( obj );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( model.wrapper ) {\n\t\t\t\t\t\treturn values.push( model.wrapperValue );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalues.push( model.get() );\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// make event available as `this.event`\n\t\t\tconst ractive = this.ractive;\n\t\t\tconst oldEvent = ractive.event;\n\n\t\t\tractive.event = context;\n\t\t\tconst returned = this.fn.apply( ractive, values );\n\t\t\tlet result = returned.pop();\n\n\t\t\t// Auto prevent and stop if return is explicitly false\n\t\t\tif ( result === false ) {\n\t\t\t\tconst original = event ? event.original : undefined;\n\t\t\t\tif ( original ) {\n\t\t\t\t\toriginal.preventDefault && original.preventDefault();\n\t\t\t\t\toriginal.stopPropagation && original.stopPropagation();\n\t\t\t\t} else {\n\t\t\t\t\twarnOnceIfDebug( `handler '${this.template.n.join( ' ' )}' returned false, but there is no event available to cancel` );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// watch for proxy events\n\t\t\telse if ( !returned.length && isArray( result ) && isString( result[0] ) ) {\n\t\t\t\tresult = fireEvent( this.ractive, result.shift(), context, result );\n\t\t\t}\n\n\t\t\tractive.event = oldEvent;\n\n\t\t\treturn result;\n\t\t}\n\n\t\telse {\n\t\t\treturn fireEvent( this.ractive, this.action, context, args);\n\t\t}\n\t}\n\n\thandleChange () {}\n\n\trender () {\n\t\t// render events after everything else, so they fire after bindings\n\t\trunloop.scheduleTask( () => this.events.forEach( e => e.listen( this ) ), true );\n\t}\n\n\ttoString() { return ''; }\n\n\tunbind () {\n\t\tremoveFromArray( this.element.events, this );\n\t}\n\n\tunrender () {\n\t\tthis.events.forEach( e => e.unlisten() );\n\t}\n}\n\nEventDirective.prototype.update = noop;\n"",""import Context from '../../../shared/Context';\n\nexport default class RactiveEvent {\n\tconstructor ( component, name ) {\n\t\tthis.component = component;\n\t\tthis.name = name;\n\t\tthis.handler = null;\n\t}\n\n\tlisten ( directive ) {\n\t\tconst ractive = this.component.instance;\n\n\t\tthis.handler = ractive.on( this.name, ( ...args ) => {\n\t\t\t// watch for reproxy\n\t\t\tif ( args[0] instanceof Context ) {\n\t\t\t\tconst ctx = args.shift();\n\t\t\t\tctx.component = ractive;\n\t\t\t\tdirective.fire( ctx, args );\n\t\t\t} else {\n\t\t\t\tdirective.fire( {}, args );\n\t\t\t}\n\n\t\t\t// cancel bubbling\n\t\t\treturn false;\n\t\t});\n\t}\n\n\tunlisten () {\n\t\tthis.handler.cancel();\n\t}\n}\n"",""import { fatal } from 'utils/log';\n\nclass DOMEvent {\n\tconstructor ( name, owner ) {\n\t\tif ( name.indexOf( '*' ) !== -1 ) {\n\t\t\tfatal( `Only component proxy-events may contain \""*\"" wildcards, <${owner.name} on-${name}=\""...\""/> is not valid` );\n\t\t}\n\n\t\tthis.name = name;\n\t\tthis.owner = owner;\n\t\tthis.handler = null;\n\t}\n\n\tlisten ( directive ) {\n\t\tconst node = this.owner.node;\n\t\tconst name = this.name;\n\n\t\t// this is probably a custom event fired from a decorator or manually\n\t\tif ( !( `on${name}` in node ) ) return;\n\n\t\tthis.owner.on( name, this.handler = ( event ) => {\n\t\t\treturn directive.fire({\n\t\t\t\tnode,\n\t\t\t\toriginal: event,\n\t\t\t\tevent,\n\t\t\t\tname\n\t\t\t});\n\t\t});\n\t}\n\n\tunlisten () {\n\t\tif ( this.handler ) this.owner.off( this.name, this.handler );\n\t}\n}\n\nclass CustomEvent {\n\tconstructor ( eventPlugin, owner, name ) {\n\t\tthis.eventPlugin = eventPlugin;\n\t\tthis.owner = owner;\n\t\tthis.name = name;\n\t\tthis.handler = null;\n\t}\n\n\tlisten ( directive ) {\n\t\tconst node = this.owner.node;\n\n\t\tthis.handler = this.eventPlugin( node, ( event = {} ) => {\n\t\t\tif ( event.original ) event.event = event.original;\n\t\t\telse event.original = event.event;\n\n\t\t\tevent.name = this.name;\n\t\t\tevent.node = event.node || node;\n\t\t\treturn directive.fire( event );\n\t\t});\n\t}\n\n\tunlisten () {\n\t\tthis.handler.teardown();\n\t}\n}\n\nexport { DOMEvent, CustomEvent };\n"",""import runloop from 'src/global/runloop';\nimport Element from '../../Element';\n\nexport default class Form extends Element {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\t\tthis.formBindings = [];\n\t}\n\n\trender ( target, occupants ) {\n\t\tsuper.render( target, occupants );\n\t\tthis.on( 'reset', handleReset );\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tthis.off( 'reset', handleReset );\n\t\tsuper.unrender( shouldDestroy );\n\t}\n}\n\nfunction handleReset () {\n\tconst element = this._ractive.proxy;\n\n\trunloop.start();\n\telement.formBindings.forEach( updateModel );\n\trunloop.end();\n}\n\nfunction updateModel ( binding ) {\n\tbinding.model.set( binding.resetValue );\n}\n"",""import { ATTRIBUTE, BINDING_FLAG, DECORATOR, DELEGATE_FLAG, EVENT, TRANSITION } from 'config/types';\nimport { win } from 'config/environment';\nimport { html, svg } from 'config/namespaces';\nimport { toArray, addToArray, removeFromArray } from 'utils/array';\nimport { escapeHtml, voidElementNames } from 'utils/html';\nimport { createElement, detachNode, matches, safeAttributeString } from 'utils/dom';\nimport runloop from 'src/global/runloop';\nimport Context from 'shared/Context';\nimport { bind, destroyed, render, unbind, update } from 'shared/methodCallers';\nimport { ContainerItem } from './shared/Item';\nimport Fragment from '../Fragment';\nimport ConditionalAttribute from './element/ConditionalAttribute';\nimport createItem from './createItem';\nimport findElement from './shared/findElement';\nimport selectBinding from './element/binding/selectBinding';\nimport { assign, create, defineProperty } from 'utils/object';\n\nconst endsWithSemi = /;\\s*$/;\n\nexport default class Element extends ContainerItem {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\n\t\tthis.name = options.template.e.toLowerCase();\n\n\t\t// find parent element\n\t\tthis.parent = findElement( this.up, false );\n\n\t\tif ( this.parent && this.parent.name === 'option' ) {\n\t\t\tthrow new Error( `An <option> element cannot contain other elements (encountered <${this.name}>)` );\n\t\t}\n\n\t\tthis.decorators = [];\n\n\t\t// create attributes\n\t\tthis.attributeByName = {};\n\n\t\tlet attrs;\n\t\tlet n, attr, val, cls, name, template, leftovers;\n\n\t\tconst m = this.template.m;\n\t\tconst len = ( m && m.length ) || 0;\n\n\t\tfor ( let i = 0; i < len; i++ ) {\n\t\t\ttemplate = m[i];\n\t\t\tswitch ( template.t ) {\n\t\t\t\tcase ATTRIBUTE:\n\t\t\t\tcase BINDING_FLAG:\n\t\t\t\tcase DECORATOR:\n\t\t\t\tcase EVENT:\n\t\t\t\tcase TRANSITION:\n\t\t\t\t\tattr = createItem({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\tup: this.up,\n\t\t\t\t\t\ttemplate\n\t\t\t\t\t});\n\n\t\t\t\t\tn = template.n;\n\n\t\t\t\t\tattrs = attrs || ( attrs = this.attributes = [] );\n\n\t\t\t\t\tif ( n === 'value' ) val = attr;\n\t\t\t\t\telse if ( n === 'name' ) name = attr;\n\t\t\t\t\telse if ( n === 'class' ) cls = attr;\n\t\t\t\t\telse attrs.push( attr );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase DELEGATE_FLAG:\n\t\t\t\t\tthis.delegate = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t( leftovers || ( leftovers = [] ) ).push( template );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ( val ) attrs.push( val );\n\t\tif ( name ) attrs.push( name );\n\t\tif ( cls ) attrs.unshift( cls );\n\n\t\tif ( leftovers ) {\n\t\t\t( attrs || ( this.attributes = [] ) ).push( new ConditionalAttribute({\n\t\t\t\towner: this,\n\t\t\t\tup: this.up,\n\t\t\t\ttemplate: leftovers\n\t\t\t}) );\n\n\t\t\t// empty leftovers array\n\t\t\tleftovers = [];\n\t\t}\n\n\t\t// create children\n\t\tif ( options.template.f && !options.deferContent ) {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\ttemplate: options.template.f,\n\t\t\t\towner: this,\n\t\t\t\tcssIds: null\n\t\t\t});\n\t\t}\n\n\t\tthis.binding = null; // filled in later\n\t}\n\n\tbind () {\n\t\tconst attrs = this.attributes;\n\t\tif ( attrs ) {\n\t\t\tattrs.binding = true;\n\t\t\tattrs.forEach( bind );\n\t\t\tattrs.binding = false;\n\t\t}\n\n\t\tif ( this.fragment ) this.fragment.bind();\n\n\t\t// create two-way binding if necessary\n\t\tif ( !this.binding ) this.recreateTwowayBinding();\n\t\telse this.binding.bind();\n\t}\n\n\tcreateTwowayBinding () {\n\t\tif ( 'twoway' in this ? this.twoway : this.ractive.twoway ) {\n\t\t\tconst Binding = selectBinding( this );\n\t\t\tif ( Binding ) {\n\t\t\t\tconst binding = new Binding( this );\n\t\t\t\tif ( binding && binding.model ) return binding;\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroyed () {\n\t\tif ( this.attributes ) this.attributes.forEach( destroyed );\n\n\t\tif ( !this.up.delegate && this.listeners ) {\n\t\t\tconst ls = this.listeners;\n\t\t\tfor ( const k in ls ) {\n\t\t\t\tif ( ls[k] && ls[k].length ) this.node.removeEventListener( k, handler );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.fragment ) this.fragment.destroyed();\n\t}\n\n\tdetach () {\n\t\t// if this element is no longer rendered, the transitions are complete and the attributes can be torn down\n\t\tif ( !this.rendered ) this.destroyed();\n\n\t\treturn detachNode( this.node );\n\t}\n\n\tfind ( selector, options ) {\n\t\tif ( this.node && matches( this.node, selector ) ) return this.node;\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.find( selector, options );\n\t\t}\n\t}\n\n\tfindAll ( selector, options ) {\n\t\tconst { result } = options;\n\n\t\tif ( matches( this.node, selector ) ) {\n\t\t\tresult.push( this.node );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAll( selector, options );\n\t\t}\n\t}\n\n\tfindNextNode () {\n\t\treturn null;\n\t}\n\n\tfirstNode () {\n\t\treturn this.node;\n\t}\n\n\tgetAttribute ( name ) {\n\t\tconst attribute = this.attributeByName[ name ];\n\t\treturn attribute ? attribute.getValue() : undefined;\n\t}\n\n\tgetContext ( ...assigns ) {\n\t\tif ( this.fragment ) return this.fragment.getContext( ...assigns );\n\n\t\tif ( !this.ctx ) this.ctx = new Context( this.up, this );\n\t\tassigns.unshift( create( this.ctx ) );\n\t\treturn assign.apply( null, assigns );\n\t}\n\n\toff ( event, callback, capture = false ) {\n\t\tconst delegate = this.up.delegate;\n\t\tconst ref = this.listeners && this.listeners[event];\n\n\t\tif ( !ref ) return;\n\t\tremoveFromArray( ref, callback );\n\n\t\tif ( delegate ) {\n\t\t\tconst listeners = ( delegate.listeners || ( delegate.listeners = [] ) ) && ( delegate.listeners[event] || ( delegate.listeners[event] = [] ) );\n\t\t\tif ( listeners.refs && !--listeners.refs ) delegate.off( event, delegateHandler, true );\n\t\t} else if ( this.rendered ) {\n\t\t\tconst n = this.node;\n\t\t\tconst add = n.addEventListener;\n\t\t\tconst rem = n.removeEventListener;\n\n\t\t\tif ( !ref.length ) {\n\t\t\t\trem.call( n, event, handler, capture );\n\t\t\t} else if ( ref.length && !ref.refs && capture ) {\n\t\t\t\trem.call( n, event, handler, true );\n\t\t\t\tadd.call( n, event, handler, false );\n\t\t\t}\n\t\t}\n\t}\n\n\ton ( event, callback, capture = false ) {\n\t\tconst delegate = this.up.delegate;\n\t\tconst ref = ( this.listeners || ( this.listeners = {} ) )[event] || ( this.listeners[event] = [] );\n\n\t\tif ( delegate ) {\n\t\t\tconst listeners = ( delegate.listeners || ( delegate.listeners = [] ) ) && delegate.listeners[event] || ( delegate.listeners[event] = [] );\n\t\t\tif ( !listeners.refs ) {\n\t\t\t\tlisteners.refs = 0;\n\t\t\t\tdelegate.on( event, delegateHandler, true );\n\t\t\t\tlisteners.refs++;\n\t\t\t} else {\n\t\t\t\tlisteners.refs++;\n\t\t\t}\n\t\t} else if ( this.rendered ) {\n\t\t\tconst n = this.node;\n\t\t\tconst add = n.addEventListener;\n\t\t\tconst rem = n.removeEventListener;\n\n\t\t\tif ( !ref.length ) {\n\t\t\t\tadd.call( n, event, handler, capture );\n\t\t\t} else if ( ref.length && !ref.refs && capture ) {\n\t\t\t\trem.call( n, event, handler, false );\n\t\t\t\tadd.call( n, event, handler, true );\n\t\t\t}\n\t\t}\n\n\t\taddToArray( this.listeners[event], callback );\n\t}\n\n\trecreateTwowayBinding () {\n\t\tif ( this.binding ) {\n\t\t\tthis.binding.unbind();\n\t\t\tthis.binding.unrender();\n\t\t}\n\n\t\tif ( this.binding = this.createTwowayBinding() ) {\n\t\t\tthis.binding.bind();\n\t\t\tif ( this.rendered ) this.binding.render();\n\t\t}\n\t}\n\n\trender ( target, occupants ) {\n\t\t// TODO determine correct namespace\n\t\tthis.namespace = getNamespace( this );\n\n\t\tlet node;\n\t\tlet existing = false;\n\n\t\tif ( occupants ) {\n\t\t\tlet n;\n\t\t\twhile ( ( n = occupants.shift() ) ) {\n\t\t\t\tif ( n.nodeName.toUpperCase() === this.template.e.toUpperCase() && n.namespaceURI === this.namespace ) {\n\t\t\t\t\tthis.node = node = n;\n\t\t\t\t\texisting = true;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tdetachNode( n );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !existing && this.node ) {\n\t\t\tnode = this.node;\n\t\t\ttarget.appendChild( node );\n\t\t\texisting = true;\n\t\t}\n\n\t\tif ( !node ) {\n\t\t\tconst name = this.template.e;\n\t\t\tnode = createElement( this.namespace === html ? name.toLowerCase() : name, this.namespace, this.getAttribute( 'is' ) );\n\t\t\tthis.node = node;\n\t\t}\n\n\t\t// tie the node to this vdom element\n\t\tdefineProperty( node, '_ractive', {\n\t\t\tvalue: {\n\t\t\t\tproxy: this\n\t\t\t},\n\t\t\tconfigurable: true\n\t\t});\n\n\t\tif ( existing && this.foundNode ) this.foundNode( node );\n\n\t\t// register intro before rendering content so children can find the intro\n\t\tconst intro = this.intro;\n\t\tif ( intro && intro.shouldFire( 'intro' ) ) {\n\t\t\tintro.isIntro = true;\n\t\t\tintro.isOutro = false;\n\t\t\trunloop.registerTransition( intro );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tconst children = existing ? toArray( node.childNodes ) : undefined;\n\n\t\t\tthis.fragment.render( node, children );\n\n\t\t\t// clean up leftover children\n\t\t\tif ( children ) {\n\t\t\t\tchildren.forEach( detachNode );\n\t\t\t}\n\t\t}\n\n\t\tif ( existing ) {\n\t\t\t// store initial values for two-way binding\n\t\t\tif ( this.binding && this.binding.wasUndefined ) this.binding.setFromNode( node );\n\t\t\t// remove unused attributes\n\t\t\tlet i = node.attributes.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tconst name = node.attributes[i].name;\n\t\t\t\tif ( !( name in this.attributeByName ) )node.removeAttribute( name );\n\t\t\t}\n\t\t}\n\n\t\t// Is this a top-level node of a component? If so, we may need to add\n\t\t// a data-ractive-css attribute, for CSS encapsulation\n\t\tif ( this.up.cssIds ) {\n\t\t\tnode.setAttribute( 'data-ractive-css', this.up.cssIds.map( x => `{${x}}` ).join( ' ' ) );\n\t\t}\n\n\t\tif ( this.attributes ) this.attributes.forEach( render );\n\t\tif ( this.binding ) this.binding.render();\n\n\t\tif ( !this.up.delegate && this.listeners ) {\n\t\t\tconst ls = this.listeners;\n\t\t\tfor ( const k in ls ) {\n\t\t\t\tif ( ls[k] && ls[k].length ) this.node.addEventListener( k, handler, !!ls[k].refs );\n\t\t\t}\n\t\t}\n\n\t\tif ( !existing ) {\n\t\t\ttarget.appendChild( node );\n\t\t}\n\n\t\tthis.rendered = true;\n\t}\n\n\ttoString () {\n\t\tconst tagName = this.template.e;\n\n\t\tlet attrs = ( this.attributes && this.attributes.map( stringifyAttribute ).join( '' ) ) || '';\n\n\t\t// Special case - selected options\n\t\tif ( this.name === 'option' && this.isSelected() ) {\n\t\t\tattrs += ' selected';\n\t\t}\n\n\t\t// Special case - two-way radio name bindings\n\t\tif ( this.name === 'input' && inputIsCheckedRadio( this ) ) {\n\t\t\tattrs += ' checked';\n\t\t}\n\n\t\t// Special case style and class attributes and directives\n\t\tlet style, cls;\n\t\tthis.attributes && this.attributes.forEach( attr => {\n\t\t\tif ( attr.name === 'class' ) {\n\t\t\t\tcls = ( cls || '' ) + ( cls ? ' ' : '' ) + safeAttributeString( attr.getString() );\n\t\t\t} else if ( attr.name === 'style' ) {\n\t\t\t\tstyle = ( style || '' ) + ( style ? ' ' : '' ) + safeAttributeString( attr.getString() );\n\t\t\t\tif ( style && !endsWithSemi.test( style ) ) style += ';';\n\t\t\t} else if ( attr.style ) {\n\t\t\t\tstyle = ( style || '' ) + ( style ? ' ' : '' ) +  `${attr.style}: ${safeAttributeString( attr.getString() )};`;\n\t\t\t} else if ( attr.inlineClass && attr.getValue() ) {\n\t\t\t\tcls = ( cls || '' ) + ( cls ? ' ' : '' ) + attr.inlineClass;\n\t\t\t}\n\t\t});\n\t\t// put classes first, then inline style\n\t\tif ( style !== undefined ) attrs = ' style' + ( style ? `=\""${style}\""` : '' ) + attrs;\n\t\tif ( cls !== undefined ) attrs = ' class' + (cls ? `=\""${cls}\""` : '') + attrs;\n\n\t\tif ( this.up.cssIds ) {\n\t\t\tattrs += ` data-ractive-css=\""${this.up.cssIds.map( x => `{${x}}` ).join( ' ' )}\""`;\n\t\t}\n\n\t\tlet str = `<${tagName}${attrs}>`;\n\n\t\tif ( voidElementNames.test( this.name ) ) return str;\n\n\t\t// Special case - textarea\n\t\tif ( this.name === 'textarea' && this.getAttribute( 'value' ) !== undefined ) {\n\t\t\tstr += escapeHtml( this.getAttribute( 'value' ) );\n\t\t}\n\n\t\t// Special case - contenteditable\n\t\telse if ( this.getAttribute( 'contenteditable' ) !== undefined ) {\n\t\t\tstr += ( this.getAttribute( 'value' ) || '' );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tstr += this.fragment.toString( !/^(?:script|style)$/i.test( this.template.e ) ); // escape text unless script/style\n\t\t}\n\n\t\tstr += `</${tagName}>`;\n\t\treturn str;\n\t}\n\n\tunbind () {\n\t\tconst attrs = this.attributes;\n\t\tif ( attrs ) {\n\t\t\tattrs.unbinding = true;\n\t\t\tattrs.forEach( unbind );\n\t\t\tattrs.unbinding = false;\n\t\t}\n\n\t\tif ( this.binding ) this.binding.unbind();\n\t\tif ( this.fragment ) this.fragment.unbind();\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tif ( !this.rendered ) return;\n\t\tthis.rendered = false;\n\n\t\t// unrendering before intro completed? complete it now\n\t\t// TODO should be an API for aborting transitions\n\t\tconst transition = this.intro;\n\t\tif ( transition && transition.complete ) transition.complete();\n\n\t\t// Detach as soon as we can\n\t\tif ( this.name === 'option' ) {\n\t\t\t// <option> elements detach immediately, so that\n\t\t\t// their parent <select> element syncs correctly, and\n\t\t\t// since option elements can't have transitions anyway\n\t\t\tthis.detach();\n\t\t} else if ( shouldDestroy ) {\n\t\t\trunloop.detachWhenReady( this );\n\t\t}\n\n\t\t// outro transition\n\t\tconst outro = this.outro;\n\t\tif ( outro && outro.shouldFire( 'outro' ) ) {\n\t\t\toutro.isIntro = false;\n\t\t\toutro.isOutro = true;\n\t\t\trunloop.registerTransition( outro );\n\t\t}\n\n\t\tif ( this.fragment ) this.fragment.unrender();\n\n\t\tif ( this.binding ) this.binding.unrender();\n\t}\n\n\tupdate () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tthis.attributes && this.attributes.forEach( update );\n\n\t\t\tif ( this.fragment ) this.fragment.update();\n\t\t}\n\t}\n}\n\nfunction inputIsCheckedRadio ( element ) {\n\tconst nameAttr = element.attributeByName.name;\n\treturn element.getAttribute( 'type' ) === 'radio' &&\n\t\t( nameAttr || {} ).interpolator &&\n\t\telement.getAttribute( 'value' ) === nameAttr.interpolator.model.get();\n}\n\nfunction stringifyAttribute ( attribute ) {\n\tconst str = attribute.toString();\n\treturn str ? ' ' + str : '';\n}\n\nfunction getNamespace ( element ) {\n\t// Use specified namespace...\n\tconst xmlns = element.getAttribute( 'xmlns' );\n\tif ( xmlns ) return xmlns;\n\n\t// ...or SVG namespace, if this is an <svg> element\n\tif ( element.name === 'svg' ) return svg;\n\n\tconst parent = element.parent;\n\n\tif ( parent ) {\n\t\t// ...or HTML, if the parent is a <foreignObject>\n\t\tif ( parent.name === 'foreignobject' ) return html;\n\n\t\t// ...or inherit from the parent node\n\t\treturn parent.node.namespaceURI;\n\t}\n\n\treturn element.ractive.el.namespaceURI;\n}\n\nfunction delegateHandler ( ev ) {\n\tconst name = ev.type;\n\tconst end = ev.currentTarget;\n\tconst endEl = end._ractive && end._ractive.proxy;\n\tlet node = ev.target;\n\tlet bubble = true;\n\tlet listeners;\n\n\t// starting with the origin node, walk up the DOM looking for ractive nodes with a matching event listener\n\twhile ( bubble && node && node !== end ) {\n\t\tconst proxy = node._ractive && node._ractive.proxy;\n\t\tif ( proxy && proxy.up.delegate === endEl && shouldFire( ev, node, end ) ) {\n\t\t\tlisteners = proxy.listeners && proxy.listeners[name];\n\n\t\t\tif ( listeners ) {\n\t\t\t\tlisteners.forEach( l => {\n\t\t\t\t\tbubble = l.call( node, ev ) !== false && bubble;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tnode = node.parentNode || node.correspondingUseElement; // SVG with a <use> element in certain environments\n\t}\n\n\treturn bubble;\n}\n\nconst UIEvent = win !== null ? win.UIEvent : null;\nfunction shouldFire ( event, start, end ) {\n\tif ( UIEvent && event instanceof UIEvent ) {\n\t\tlet node = start;\n\t\twhile ( node && node !== end ) {\n\t\t\tif ( node.disabled ) return false;\n\t\t\tnode = node.parentNode || node.correspondingUseElement;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction handler ( ev ) {\n\tconst el = this._ractive.proxy;\n\tif ( !el.listeners || !el.listeners[ ev.type ] ) return;\n\tel.listeners[ ev.type ].forEach( l => l.call( this, ev ) );\n}\n"",""import { INTERPOLATOR, TRIPLE } from 'config/types';\nimport { warnIfDebug } from 'utils/log';\nimport CheckboxBinding from './CheckboxBinding';\nimport CheckboxNameBinding from './CheckboxNameBinding';\nimport ContentEditableBinding from './ContentEditableBinding';\nimport FileBinding from './FileBinding';\nimport GenericBinding from './GenericBinding';\nimport MultipleSelectBinding from './MultipleSelectBinding';\nimport NumericBinding from './NumericBinding';\nimport RadioBinding from './RadioBinding';\nimport RadioNameBinding from './RadioNameBinding';\nimport SingleSelectBinding from './SingleSelectBinding';\n\nexport function isBindable ( attribute ) {\n\n\t// The fragment must be a single non-string fragment\n\tif ( !attribute || !attribute.template.f || attribute.template.f.length !== 1 || attribute.template.f[0].s ) return false;\n\n\t// A binding is an interpolator `{{ }}`, yey.\n\tif ( attribute.template.f[0].t === INTERPOLATOR ) return true;\n\n\t// The above is probably the only true case. For the rest, show an appropriate\n\t// warning before returning false.\n\n\t// You can't bind a triple curly. HTML values on an attribute makes no sense.\n\tif ( attribute.template.f[0].t === TRIPLE ) warnIfDebug( 'It is not possible create a binding using a triple mustache.' );\n\n\treturn false;\n}\n\nexport default function selectBinding ( element ) {\n\tconst name = element.name;\n\tconst attributes = element.attributeByName;\n\tconst isBindableByValue = isBindable( attributes.value );\n\tconst isBindableByContentEditable = isBindable( attributes.contenteditable );\n\tconst isContentEditable =  element.getAttribute( 'contenteditable' );\n\n\t// contenteditable\n\t// Bind if the contenteditable is true or a binding that may become true.\n\tif ( ( isContentEditable || isBindableByContentEditable ) && isBindableByValue ) return ContentEditableBinding;\n\n\t// <input>\n\tif ( name === 'input' ) {\n\t\tconst type = element.getAttribute( 'type' );\n\n\t\tif ( type === 'radio' ) {\n\t\t\tconst isBindableByName = isBindable( attributes.name );\n\t\t\tconst isBindableByChecked = isBindable( attributes.checked );\n\n\t\t\t// For radios we can either bind the name or checked, but not both.\n\t\t\t// Name binding is handed instead.\n\t\t\tif ( isBindableByName && isBindableByChecked ) {\n\t\t\t\twarnIfDebug( 'A radio input can have two-way binding on its name attribute, or its checked attribute - not both', { ractive: element.root });\n\t\t\t\treturn RadioNameBinding;\n\t\t\t}\n\n\t\t\tif ( isBindableByName ) return RadioNameBinding;\n\n\t\t\tif ( isBindableByChecked ) return RadioBinding;\n\n\t\t\t// Dead end. Unknown binding on radio input.\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type === 'checkbox' ) {\n\t\t\tconst isBindableByName = isBindable( attributes.name );\n\t\t\tconst isBindableByChecked = isBindable( attributes.checked );\n\n\t\t\t// A checkbox with bindings for both name and checked. Checked treated as\n\t\t\t// the checkbox value, name is treated as a regular binding.\n\t\t\t//\n\t\t\t// See https://github.com/ractivejs/ractive/issues/1749\n\t\t\tif ( isBindableByName && isBindableByChecked ) return CheckboxBinding;\n\n\t\t\tif ( isBindableByName ) return CheckboxNameBinding;\n\n\t\t\tif ( isBindableByChecked ) return CheckboxBinding;\n\n\t\t\t// Dead end. Unknown binding on checkbox input.\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type === 'file' && isBindableByValue ) return FileBinding;\n\n\t\tif ( type === 'number' && isBindableByValue ) return NumericBinding;\n\n\t\tif ( type === 'range' && isBindableByValue ) return NumericBinding;\n\n\t\t// Some input of unknown type (browser usually falls back to text).\n\t\tif ( isBindableByValue ) return GenericBinding;\n\n\t\t// Dead end. Some unknown input and an unbindable.\n\t\treturn null;\n\t}\n\n\t// <select>\n\tif ( name === 'select' && isBindableByValue ){\n\t\treturn element.getAttribute( 'multiple' ) ? MultipleSelectBinding : SingleSelectBinding;\n\t}\n\n\t// <textarea>\n\tif ( name === 'textarea' && isBindableByValue ) return GenericBinding;\n\n\t// Dead end. Some unbindable element.\n\treturn null;\n}\n"",""import runloop from 'src/global/runloop';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class SingleSelectBinding extends Binding {\n\tforceUpdate () {\n\t\tconst value = this.getValue();\n\n\t\tif ( value !== undefined ) {\n\t\t\tthis.attribute.locked = true;\n\t\t\trunloop.scheduleTask( () => this.attribute.locked = false );\n\t\t\tthis.model.set( value );\n\t\t}\n\t}\n\n\tgetInitialValue () {\n\t\tif ( this.element.getAttribute( 'value' ) !== undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst options = this.element.options;\n\t\tconst len = options.length;\n\n\t\tif ( !len ) return;\n\n\t\tlet value;\n\t\tlet optionWasSelected;\n\t\tlet i = len;\n\n\t\t// take the final selected option...\n\t\twhile ( i-- ) {\n\t\t\tconst option = options[i];\n\n\t\t\tif ( option.getAttribute( 'selected' ) ) {\n\t\t\t\tif ( !option.getAttribute( 'disabled' ) ) {\n\t\t\t\t\tvalue = option.getAttribute( 'value' );\n\t\t\t\t}\n\n\t\t\t\toptionWasSelected = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// or the first non-disabled option, if none are selected\n\t\tif ( !optionWasSelected ) {\n\t\t\twhile ( ++i < len ) {\n\t\t\t\tif ( !options[i].getAttribute( 'disabled' ) ) {\n\t\t\t\t\tvalue = options[i].getAttribute( 'value' );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This is an optimisation (aka hack) that allows us to forgo some\n\t\t// other more expensive work\n\t\t// TODO does it still work? seems at odds with new architecture\n\t\tif ( value !== undefined ) {\n\t\t\tthis.element.attributeByName.value.value = value;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tgetValue () {\n\t\tconst options = this.node.options;\n\t\tconst len = options.length;\n\n\t\tlet i;\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tconst option = options[i];\n\n\t\t\tif ( options[i].selected && !options[i].disabled ) {\n\t\t\t\treturn option._ractive ? option._ractive.value : option.value;\n\t\t\t}\n\t\t}\n\t}\n\n\trender () {\n\t\tsuper.render();\n\t\tthis.element.on( 'change', handleDomEvent );\n\t}\n\n\tsetFromNode ( node ) {\n\t\tconst option = getSelectedOptions( node )[0];\n\t\tthis.model.set( option._ractive ? option._ractive.value : option.value );\n\t}\n\n\tunrender () {\n\t\tthis.element.off( 'change', handleDomEvent );\n\t}\n}\n"",""import noop from 'utils/noop';\nimport Binding from './Binding';\nimport getBindingGroup from './getBindingGroup';\nimport handleDomEvent from './handleDomEvent';\n\nfunction getValue() {\n\tconst checked = this.bindings.filter( b => b.node.checked );\n\tif ( checked.length > 0 ) {\n\t\treturn checked[0].element.getAttribute( 'value' );\n\t}\n}\n\nexport default class RadioNameBinding extends Binding {\n\tconstructor ( element ) {\n\t\tsuper( element, 'name' );\n\n\t\tthis.group = getBindingGroup( 'radioname', this.model, getValue );\n\t\tthis.group.add( this );\n\n\t\tif ( element.checked ) {\n\t\t\tthis.group.value = this.getValue();\n\t\t}\n\t}\n\n\tbind () {\n\t\tif ( !this.group.bound ) {\n\t\t\tthis.group.bind();\n\t\t}\n\n\t\t// update name keypath when necessary\n\t\tthis.nameAttributeBinding = {\n\t\t\thandleChange: () => this.node.name = `{{${this.model.getKeypath()}}}`,\n\t\t\trebind: noop\n\t\t};\n\n\t\tthis.model.getKeypathModel().register( this.nameAttributeBinding );\n\t}\n\n\tgetInitialValue () {\n\t\tif ( this.element.getAttribute( 'checked' ) ) {\n\t\t\treturn this.element.getAttribute( 'value' );\n\t\t}\n\t}\n\n\tgetValue () {\n\t\treturn this.element.getAttribute( 'value' );\n\t}\n\n\thandleChange () {\n\t\t// If this <input> is the one that's checked, then the value of its\n\t\t// `name` model gets set to its value\n\t\tif ( this.node.checked ) {\n\t\t\tthis.group.value = this.getValue();\n\t\t\tsuper.handleChange();\n\t\t}\n\t}\n\n\tlastVal ( setting, value ) {\n\t\tif ( !this.group ) return;\n\t\tif ( setting ) this.group.lastValue = value;\n\t\telse return this.group.lastValue;\n\t}\n\n\trender () {\n\t\tsuper.render();\n\n\t\tconst node = this.node;\n\n\t\tnode.name = `{{${this.model.getKeypath()}}}`;\n\t\tnode.checked = this.element.compare ( this.model.get(), this.element.getAttribute( 'value' ) );\n\n\t\tthis.element.on( 'change', handleDomEvent );\n\n\t\tif ( node.attachEvent ) {\n\t\t\tthis.element.on( 'click', handleDomEvent );\n\t\t}\n\t}\n\n\tsetFromNode ( node ) {\n\t\tif ( node.checked ) {\n\t\t\tthis.group.model.set( this.element.getAttribute( 'value' ) );\n\t\t}\n\t}\n\n\tunbind () {\n\t\tthis.group.remove( this );\n\n\t\tthis.model.getKeypathModel().unregister( this.nameAttributeBinding );\n\t}\n\n\tunrender () {\n\t\tconst el = this.element;\n\n\t\tel.off( 'change', handleDomEvent );\n\t\tel.off( 'click', handleDomEvent );\n\t}\n}\n"",""import runloop from 'src/global/runloop';\nimport { removeFromArray } from 'utils/array';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nconst siblings = {};\n\nfunction getSiblings ( hash ) {\n\treturn siblings[ hash ] || ( siblings[ hash ] = [] );\n}\n\nexport default class RadioBinding extends Binding {\n\tconstructor ( element ) {\n\t\tsuper( element, 'checked' );\n\n\t\tthis.siblings = getSiblings( this.ractive._guid + this.element.getAttribute( 'name' ) );\n\t\tthis.siblings.push( this );\n\t}\n\n\tgetValue () {\n\t\treturn this.node.checked;\n\t}\n\n\thandleChange () {\n\t\trunloop.start();\n\n\t\tthis.siblings.forEach( binding => {\n\t\t\tbinding.model.set( binding.getValue() );\n\t\t});\n\n\t\trunloop.end();\n\t}\n\n\trender () {\n\t\tsuper.render();\n\n\t\tthis.element.on( 'change', handleDomEvent );\n\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.element.on( 'click', handleDomEvent );\n\t\t}\n\t}\n\n\tsetFromNode ( node ) {\n\t\tthis.model.set( node.checked );\n\t}\n\n\tunbind () {\n\t\tremoveFromArray( this.siblings, this );\n\t}\n\n\tunrender () {\n\t\tthis.element.off( 'change', handleDomEvent );\n\t\tthis.element.off( 'click', handleDomEvent );\n\t}\n}\n"",""import GenericBinding from './GenericBinding';\n\nexport default class NumericBinding extends GenericBinding {\n\tgetInitialValue () {\n\t\treturn undefined;\n\t}\n\n\tgetValue () {\n\t\tconst value = parseFloat( this.node.value );\n\t\treturn isNaN( value ) ? undefined : value;\n\t}\n\n\tsetFromNode( node ) {\n\t\tconst value = parseFloat( node.value );\n\t\tif ( !isNaN( value ) ) this.model.set( value );\n\t}\n}\n"",""import { arrayContentsMatch } from 'utils/array';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class MultipleSelectBinding extends Binding {\n\tgetInitialValue () {\n\t\treturn this.element.options\n\t\t\t.filter( option => option.getAttribute( 'selected' ) )\n\t\t\t.map( option => option.getAttribute( 'value' ) );\n\t}\n\n\tgetValue () {\n\t\tconst options = this.element.node.options;\n\t\tconst len = options.length;\n\n\t\tconst selectedValues = [];\n\n\t\tfor ( let i = 0; i < len; i += 1 ) {\n\t\t\tconst option = options[i];\n\n\t\t\tif ( option.selected ) {\n\t\t\t\tconst optionValue = option._ractive ? option._ractive.value : option.value;\n\t\t\t\tselectedValues.push( optionValue );\n\t\t\t}\n\t\t}\n\n\t\treturn selectedValues;\n\t}\n\n\thandleChange () {\n\t\tconst attribute = this.attribute;\n\t\tconst previousValue = attribute.getValue();\n\n\t\tconst value = this.getValue();\n\n\t\tif ( previousValue === undefined || !arrayContentsMatch( value, previousValue ) ) {\n\t\t\tsuper.handleChange();\n\t\t}\n\n\t\treturn this;\n\t}\n\n\trender () {\n\t\tsuper.render();\n\n\t\tthis.element.on( 'change', handleDomEvent );\n\n\t\tif ( this.model.get() === undefined ) {\n\t\t\t// get value from DOM, if possible\n\t\t\tthis.handleChange();\n\t\t}\n\t}\n\n\tsetFromNode ( node ) {\n\t\tconst selectedOptions = getSelectedOptions( node );\n\t\tlet i = selectedOptions.length;\n\t\tconst result = new Array( i );\n\n\t\twhile ( i-- ) {\n\t\t\tconst option = selectedOptions[i];\n\t\t\tresult[i] = option._ractive ? option._ractive.value : option.value;\n\t\t}\n\n\t\tthis.model.set( result );\n\t}\n\n\tunrender () {\n\t\tthis.element.off( 'change', handleDomEvent );\n\t}\n}\n"",""import { toArray } from './array';\n\nexport default function getSelectedOptions ( select ) {\n\t/* istanbul ignore next */\n\treturn select.selectedOptions\n\t\t? toArray( select.selectedOptions )\n\t\t: select.options\n\t\t\t? toArray( select.options ).filter( option => option.selected )\n\t\t\t: [];\n}\n"",""import GenericBinding from './GenericBinding';\n\nexport default class FileBinding extends GenericBinding {\n\tgetInitialValue () {\n\t\t/* istanbul ignore next */\n\t\treturn undefined;\n\t}\n\n\tgetValue () {\n\t\t/* istanbul ignore next */\n\t\treturn this.node.files;\n\t}\n\n\trender () {\n\t\t/* istanbul ignore next */\n\t\tthis.element.lazy = false;\n\t\t/* istanbul ignore next */\n\t\tsuper.render();\n\t}\n\n\tsetFromNode( node ) {\n\t\t/* istanbul ignore next */\n\t\tthis.model.set( node.files );\n\t}\n}\n\n"",""import { isNumeric } from 'utils/is';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nfunction handleBlur () {\n\thandleDomEvent.call( this );\n\n\tconst value = this._ractive.binding.model.get();\n\tthis.value = value == undefined ? '' : value;\n}\n\nfunction handleDelay ( delay ) {\n\tlet timeout;\n\n\treturn function () {\n\t\tif ( timeout ) clearTimeout( timeout );\n\n\t\ttimeout = setTimeout( () => {\n\t\t\tconst binding = this._ractive.binding;\n\t\t\tif ( binding.rendered ) handleDomEvent.call( this );\n\t\t\ttimeout = null;\n\t\t}, delay );\n\t};\n}\n\nexport default class GenericBinding extends Binding {\n\tgetInitialValue () {\n\t\treturn '';\n\t}\n\n\tgetValue () {\n\t\treturn this.node.value;\n\t}\n\n\trender () {\n\t\tsuper.render();\n\n\t\t// any lazy setting for this element overrides the root\n\t\t// if the value is a number, it's a timeout\n\t\tlet lazy = this.ractive.lazy;\n\t\tlet timeout = false;\n\t\tconst el = this.element;\n\n\t\tif ( 'lazy' in this.element ) {\n\t\t\tlazy = this.element.lazy;\n\t\t}\n\n\t\tif ( isNumeric( lazy ) ) {\n\t\t\ttimeout = +lazy;\n\t\t\tlazy = false;\n\t\t}\n\n\t\tthis.handler = timeout ? handleDelay( timeout ) : handleDomEvent;\n\n\t\tconst node = this.node;\n\n\t\tel.on( 'change', handleDomEvent );\n\n\t\tif ( node.type !== 'file' ) {\n\t\t\tif ( !lazy ) {\n\t\t\t\tel.on( 'input', this.handler );\n\n\t\t\t\t// IE is a special snowflake\n\t\t\t\tif ( node.attachEvent ) {\n\t\t\t\t\tel.on( 'keyup', this.handler );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tel.on( 'blur', handleBlur );\n\t\t}\n\t}\n\n\tunrender () {\n\t\tconst el = this.element;\n\t\tthis.rendered = false;\n\n\t\tel.off( 'change', handleDomEvent );\n\t\tel.off( 'input', this.handler );\n\t\tel.off( 'keyup', this.handler );\n\t\tel.off( 'blur', handleBlur );\n\t}\n}\n"",""import Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class ContentEditableBinding extends Binding {\n\tgetInitialValue () {\n\t\treturn this.element.fragment ? this.element.fragment.toString() : '';\n\t}\n\n\tgetValue () {\n\t\treturn this.element.node.innerHTML;\n\t}\n\n\trender () {\n\t\tsuper.render();\n\n\t\tconst el = this.element;\n\n\t\tel.on( 'change', handleDomEvent );\n\t\tel.on( 'blur', handleDomEvent );\n\n\t\tif ( !this.ractive.lazy ) {\n\t\t\tel.on( 'input', handleDomEvent );\n\n\t\t\tif ( this.node.attachEvent ) {\n\t\t\t\tel.on( 'keyup', handleDomEvent );\n\t\t\t}\n\t\t}\n\t}\n\n\tsetFromNode ( node ) {\n\t\tthis.model.set( node.innerHTML );\n\t}\n\n\tunrender () {\n\t\tconst el = this.element;\n\n\t\tel.off( 'blur', handleDomEvent );\n\t\tel.off( 'change', handleDomEvent );\n\t\tel.off( 'input', handleDomEvent );\n\t\tel.off( 'keyup', handleDomEvent );\n\t}\n}\n"",""import Binding from './Binding';\nimport getBindingGroup from './getBindingGroup';\nimport handleDomEvent from './handleDomEvent';\nimport { isArray } from 'utils/is';\n\nconst push = [].push;\n\nfunction getValue() {\n\tconst all = this.bindings.filter(b => b.node && b.node.checked).map(b => b.element.getAttribute( 'value' ));\n\tconst res = [];\n\tall.forEach(v => { if ( !this.bindings[0].arrayContains( res, v ) ) res.push( v ); });\n\treturn res;\n}\n\nexport default class CheckboxNameBinding extends Binding {\n\tconstructor ( element ) {\n\t\tsuper( element, 'name' );\n\n\t\tthis.checkboxName = true; // so that ractive.updateModel() knows what to do with this\n\n\t\t// Each input has a reference to an array containing it and its\n\t\t// group, as two-way binding depends on being able to ascertain\n\t\t// the status of all inputs within the group\n\t\tthis.group = getBindingGroup( 'checkboxes', this.model, getValue );\n\t\tthis.group.add( this );\n\n\t\tif ( this.noInitialValue ) {\n\t\t\tthis.group.noInitialValue = true;\n\t\t}\n\n\t\t// If no initial value was set, and this input is checked, we\n\t\t// update the model\n\t\tif ( this.group.noInitialValue && this.element.getAttribute( 'checked' ) ) {\n\t\t\tconst existingValue = this.model.get();\n\t\t\tconst bindingValue = this.element.getAttribute( 'value' );\n\n\t\t\tif ( !this.arrayContains( existingValue, bindingValue ) ) {\n\t\t\t\tpush.call( existingValue, bindingValue ); // to avoid triggering runloop with array adaptor\n\t\t\t}\n\t\t}\n\t}\n\n\tbind () {\n\t\tif ( !this.group.bound ) {\n\t\t\tthis.group.bind();\n\t\t}\n\t}\n\n\tgetInitialValue () {\n\t\t// This only gets called once per group (of inputs that\n\t\t// share a name), because it only gets called if there\n\t\t// isn't an initial value. By the same token, we can make\n\t\t// a note of that fact that there was no initial value,\n\t\t// and populate it using any `checked` attributes that\n\t\t// exist (which users should avoid, but which we should\n\t\t// support anyway to avoid breaking expectations)\n\t\tthis.noInitialValue = true; // TODO are noInitialValue and wasUndefined the same thing?\n\t\treturn [];\n\t}\n\n\tgetValue () {\n\t\treturn this.group.value;\n\t}\n\n\thandleChange () {\n\t\tthis.isChecked = this.element.node.checked;\n\t\tthis.group.value = this.model.get();\n\t\tconst value = this.element.getAttribute( 'value' );\n\t\tif ( this.isChecked && !this.arrayContains( this.group.value, value ) ) {\n\t\t\tthis.group.value.push( value );\n\t\t} else if ( !this.isChecked && this.arrayContains( this.group.value, value ) ) {\n\t\t\tthis.removeFromArray( this.group.value, value );\n\t\t}\n\t\t// make sure super knows there's a change\n\t\tthis.lastValue = null;\n\t\tsuper.handleChange();\n\t}\n\n\trender () {\n\t\tsuper.render();\n\n\t\tconst node = this.node;\n\n\t\tconst existingValue = this.model.get();\n\t\tconst bindingValue = this.element.getAttribute( 'value' );\n\n\t\tif ( isArray( existingValue ) ) {\n\t\t\tthis.isChecked = this.arrayContains( existingValue, bindingValue );\n\t\t} else {\n\t\t\tthis.isChecked = this.element.compare( existingValue, bindingValue );\n\t\t}\n\t\tnode.name = '{{' + this.model.getKeypath() + '}}';\n\t\tnode.checked = this.isChecked;\n\n\t\tthis.element.on( 'change', handleDomEvent );\n\n\t\t// in case of IE emergency, bind to click event as well\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.element.on( 'click', handleDomEvent );\n\t\t}\n\t}\n\n\tsetFromNode ( node ) {\n\t\tthis.group.bindings.forEach( binding => binding.wasUndefined = true );\n\n\t\tif ( node.checked ) {\n\t\t\tconst valueSoFar = this.group.getValue();\n\t\t\tvalueSoFar.push( this.element.getAttribute( 'value' ) );\n\n\t\t\tthis.group.model.set( valueSoFar );\n\t\t}\n\t}\n\n\tunbind () {\n\t\tthis.group.remove( this );\n\t}\n\n\tunrender () {\n\t\tconst el = this.element;\n\n\t\tel.off( 'change', handleDomEvent );\n\t\tel.off( 'click', handleDomEvent );\n\t}\n\n\tarrayContains ( selectValue, optionValue ) {\n\t\tlet i = selectValue.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this.element.compare( optionValue, selectValue[i] ) ) return true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tremoveFromArray ( array, item ) {\n\t\tif (!array) return;\n\t\tlet i = array.length;\n\t\twhile( i-- ) {\n\t\t\tif ( this.element.compare( item, array[i] ) ) {\n\t\t\t\tarray.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t}\n}\n"",""import { removeFromArray } from 'utils/array';\nimport Binding from './Binding';\n\nexport default function getBindingGroup ( group, model, getValue ) {\n\tconst hash = `${group}-bindingGroup`;\n\treturn model[hash] || ( model[ hash ] = new BindingGroup( hash, model, getValue ) );\n}\n\nclass BindingGroup {\n\tconstructor ( hash, model, getValue ) {\n\t\tthis.model = model;\n\t\tthis.hash = hash;\n\t\tthis.getValue = () => {\n\t\t\tthis.value = getValue.call(this);\n\t\t\treturn this.value;\n\t\t};\n\n\t\tthis.bindings = [];\n\t}\n\n\tadd ( binding ) {\n\t\tthis.bindings.push( binding );\n\t}\n\n\tbind () {\n\t\tthis.value = this.model.get();\n\t\tthis.model.registerTwowayBinding( this );\n\t\tthis.bound = true;\n\t}\n\n\tremove ( binding ) {\n\t\tremoveFromArray( this.bindings, binding );\n\t\tif ( !this.bindings.length ) {\n\t\t\tthis.unbind();\n\t\t}\n\t}\n\n\tunbind () {\n\t\tthis.model.unregisterTwowayBinding( this );\n\t\tthis.bound = false;\n\t\tdelete this.model[this.hash];\n\t}\n}\n\nBindingGroup.prototype.rebind = Binding.prototype.rebind;\n"",""import Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class CheckboxBinding extends Binding {\n\tconstructor ( element ) {\n\t\tsuper( element, 'checked' );\n\t}\n\n\trender () {\n\t\tsuper.render();\n\n\t\tthis.element.on( 'change', handleDomEvent );\n\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.element.on( 'click', handleDomEvent );\n\t\t}\n\t}\n\n\tunrender () {\n\t\tthis.element.off( 'change', handleDomEvent );\n\t\tthis.element.off( 'click', handleDomEvent );\n\t}\n\n\tgetInitialValue () {\n\t\treturn !!this.element.getAttribute( 'checked' );\n\t}\n\n\tgetValue () {\n\t\treturn this.node.checked;\n\t}\n\n\tsetFromNode ( node ) {\n\t\tthis.model.set( node.checked );\n\t}\n}\n"",""// This is the handler for DOM events that would lead to a change in the model\n// (i.e. change, sometimes, input, and occasionally click and keyup)\nexport default function handleDomEvent () {\n\tthis._ractive.binding.handleChange();\n}\n"",""import runloop from 'src/global/runloop';\nimport { warnOnceIfDebug } from 'utils/log';\nimport noop from 'utils/noop';\nimport findElement from '../../shared/findElement';\n\nexport default class Binding {\n\tconstructor ( element, name = 'value' ) {\n\t\tthis.element = element;\n\t\tthis.ractive = element.ractive;\n\t\tthis.attribute = element.attributeByName[ name ];\n\n\t\tconst interpolator = this.attribute.interpolator;\n\t\tinterpolator.twowayBinding = this;\n\n\t\tconst model = interpolator.model;\n\n\t\tif ( model.isReadonly && !model.setRoot ) {\n\t\t\tconst keypath = model.getKeypath().replace( /^@/, '' );\n\t\t\twarnOnceIfDebug( `Cannot use two-way binding on <${element.name}> element: ${keypath} is read-only. To suppress this warning use <${element.name} twoway='false'...>`, { ractive: this.ractive });\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.attribute.isTwoway = true;\n\t\tthis.model = model;\n\n\t\t// initialise value, if it's undefined\n\t\tlet value = model.get();\n\t\tthis.wasUndefined = value === undefined;\n\n\t\tif ( value === undefined && this.getInitialValue ) {\n\t\t\tvalue = this.getInitialValue();\n\t\t\tmodel.set( value );\n\t\t}\n\t\tthis.lastVal( true, value );\n\n\t\tconst parentForm = findElement( this.element, false, 'form' );\n\t\tif ( parentForm ) {\n\t\t\tthis.resetValue = value;\n\t\t\tparentForm.formBindings.push( this );\n\t\t}\n\t}\n\n\tbind () {\n\t\tthis.model.registerTwowayBinding( this );\n\t}\n\n\thandleChange () {\n\t\tconst value = this.getValue();\n\t\tif ( this.lastVal() === value ) return;\n\n\t\trunloop.start();\n\t\tthis.attribute.locked = true;\n\t\tthis.model.set( value );\n\t\tthis.lastVal( true, value );\n\n\t\t// if the value changes before observers fire, unlock to be updatable cause something weird and potentially freezy is up\n\t\tif ( this.model.get() !== value ) this.attribute.locked = false;\n\t\telse runloop.scheduleTask( () => this.attribute.locked = false );\n\n\t\trunloop.end();\n\t}\n\n\tlastVal ( setting, value ) {\n\t\tif ( setting ) this.lastValue = value;\n\t\telse return this.lastValue;\n\t}\n\n\trebind ( next, previous ) {\n\t\tif ( this.model && this.model === previous ) previous.unregisterTwowayBinding( this );\n\t\tif ( next ) {\n\t\t\tthis.model = next;\n\t\t\trunloop.scheduleTask( () => next.registerTwowayBinding( this ) );\n\t\t}\n\t}\n\n\trender () {\n\t\tthis.node = this.element.node;\n\t\tthis.node._ractive.binding = this;\n\t\tthis.rendered = true; // TODO is this used anywhere?\n\t}\n\n\tsetFromNode ( node ) {\n\t\tthis.model.set( node.value );\n\t}\n\n\tunbind () {\n\t\tthis.model.unregisterTwowayBinding( this );\n\t}\n}\n\nBinding.prototype.unrender = noop;\n"",""import noop from 'utils/noop';\nimport Item from './shared/Item';\n\nexport default class Doctype extends Item {\n\ttoString () {\n\t\treturn '<!DOCTYPE' + this.template.a + '>';\n\t}\n}\n\nconst proto = Doctype.prototype;\nproto.bind = proto.render = proto.teardown = proto.unbind = proto.unrender = proto.update = noop;\n"",""import { findInViewHierarchy } from 'shared/registry';\nimport { warnOnce } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport noop from 'utils/noop';\nimport runloop from 'src/global/runloop';\nimport { rebindMatch } from 'src/shared/rebind';\nimport findElement from '../shared/findElement';\nimport { setupArgsFn, teardownArgsFn } from '../shared/directiveArgs';\n\nconst missingDecorator = {\n\tupdate: noop,\n\tteardown: noop\n};\n\nexport default class Decorator {\n\tconstructor ( options ) {\n\t\tthis.owner = options.owner || options.up.owner || findElement( options.up );\n\t\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.up );\n\t\tthis.up = this.owner.up;\n\t\tthis.ractive = this.owner.ractive;\n\t\tconst template = this.template = options.template;\n\n\t\tthis.name = template.n;\n\n\t\tthis.node = null;\n\t\tthis.handle = null;\n\n\t\tthis.element.decorators.push( this );\n\t}\n\n\tbind () {\n\t\tsetupArgsFn( this, this.template, this.up, { register: true } );\n\t}\n\n\tbubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.owner.bubble();\n\t\t}\n\t}\n\n\tdestroyed () {\n\t\tif ( this.handle ) {\n\t\t\tthis.handle.teardown();\n\t\t\tthis.handle = null;\n\t\t}\n\t\tthis.shouldDestroy = true;\n\t}\n\n\thandleChange () { this.bubble(); }\n\n\trebind ( next, previous, safe ) {\n\t\tconst idx = this.models.indexOf( previous );\n\t\tif ( !~idx ) return;\n\n\t\tnext = rebindMatch( this.template.f.r[ idx ], next, previous );\n\t\tif ( next === previous ) return;\n\n\t\tprevious.unregister( this );\n\t\tthis.models.splice( idx, 1, next );\n\t\tif ( next ) next.addShuffleRegister( this, 'mark' );\n\n\t\tif ( !safe ) this.bubble();\n\t}\n\n\trender () {\n\t\tthis.shouldDestroy = false;\n\t\tif ( this.handle ) this.unrender();\n\t\trunloop.scheduleTask( () => {\n\t\t\tconst fn = findInViewHierarchy( 'decorators', this.ractive, this.name );\n\n\t\t\tif ( !fn ) {\n\t\t\t\twarnOnce( missingPlugin( this.name, 'decorator' ) );\n\t\t\t\tthis.handle = missingDecorator;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.node = this.element.node;\n\n\t\t\tlet args;\n\t\t\tif ( this.fn ) {\n\t\t\t\targs = this.models.map( model => {\n\t\t\t\t\tif ( !model ) return undefined;\n\n\t\t\t\t\treturn model.get();\n\t\t\t\t});\n\t\t\t\targs = this.fn.apply( this.ractive, args );\n\t\t\t}\n\n\t\t\tthis.handle = fn.apply( this.ractive, [ this.node ].concat( args ) );\n\n\t\t\tif ( !this.handle || !this.handle.teardown ) {\n\t\t\t\tthrow new Error( `The '${this.name}' decorator must return an object with a teardown method` );\n\t\t\t}\n\n\t\t\t// watch out for decorators that cause their host element to be unrendered\n\t\t\tif ( this.shouldDestroy ) this.destroyed();\n\t\t}, true );\n\t}\n\n\ttoString () { return ''; }\n\n\tunbind () {\n\t\tteardownArgsFn( this, this.template );\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tif ( ( !shouldDestroy || this.element.rendered ) && this.handle ) {\n\t\t\tthis.handle.teardown();\n\t\t\tthis.handle = null;\n\t\t}\n\t}\n\n\tupdate () {\n\t\tconst instance = this.handle;\n\n\t\tif ( !this.dirty ) {\n\t\t\tif ( instance && instance.invalidate ) {\n\t\t\t\trunloop.scheduleTask( () => instance.invalidate(), true );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.dirty = false;\n\n\t\tif ( instance ) {\n\t\t\tif ( !instance.update ) {\n\t\t\t\tthis.unrender();\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst args = this.models.map( model => model && model.get() );\n\t\t\t\tinstance.update.apply( this.ractive, this.fn.apply( this.ractive, args ) );\n\t\t\t}\n\t\t}\n\t}\n}\n"",""import getFunction from 'shared/getFunction';\nimport resolveReference from '../../resolvers/resolveReference';\n\nexport function setupArgsFn ( item, template, fragment, opts = {} ) {\n\tif ( template && template.f && template.f.s ) {\n\t\titem.fn = getFunction( template.f.s, template.f.r.length );\n\t\tif ( opts.register === true ) {\n\t\t\titem.models = resolveArgs( item, template, fragment, opts );\n\t\t}\n\t}\n}\n\nexport function resolveArgs ( item, template, fragment, opts = {} ) {\n\treturn template.f.r.map( ( ref, i ) => {\n\t\tlet model;\n\n\t\tif ( opts.specialRef && ( model = opts.specialRef( ref, i ) ) ) return model;\n\n\t\tmodel = resolveReference( fragment, ref );\n\t\tif ( opts.register === true ) {\n\t\t\tmodel.register( item );\n\t\t}\n\n\t\treturn model;\n\t});\n}\n\nexport function teardownArgsFn ( item, template ) {\n\tif ( template && template.f && template.f.s ) {\n\t\tif ( item.models ) item.models.forEach( m => {\n\t\t\tif ( m && m.unregister ) m.unregister( item );\n\t\t});\n\t\titem.models = null;\n\t}\n}\n"",""import runloop from 'src/global/runloop';\nimport { updateAnchors } from 'shared/anchors';\nimport { bind, render as callRender, unbind, unrender, update } from 'shared/methodCallers';\nimport { teardown } from 'src/Ractive/prototype/teardown';\nimport getRactiveContext from 'shared/getRactiveContext';\nimport { warnIfDebug } from 'utils/log';\nimport { createDocumentFragment } from 'utils/dom';\nimport { ANCHOR, ATTRIBUTE, BINDING_FLAG, COMPONENT, DECORATOR, EVENT, TRANSITION, YIELDER } from 'config/types';\nimport construct from 'src/Ractive/construct';\nimport initialise from 'src/Ractive/initialise';\nimport render from 'src/Ractive/render';\nimport Item from './shared/Item';\nimport ConditionalAttribute from './element/ConditionalAttribute';\nimport createItem from './createItem';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport { assign, create } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\n\nexport default class Component extends Item {\n\tconstructor ( options, ComponentConstructor ) {\n\t\tsuper( options );\n\t\tlet template = options.template;\n\t\tthis.isAnchor = template.t === ANCHOR;\n\t\tthis.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super\n\t\tlet attrs = template.m;\n\n\t\tconst partials = template.p || {};\n\t\tif ( !( 'content' in partials ) ) partials.content = template.f || [];\n\t\tthis._partials = partials; // TEMP\n\n\t\tif ( this.isAnchor ) {\n\t\t\tthis.name = template.n;\n\n\t\t\tthis.addChild = addChild;\n\t\t\tthis.removeChild = removeChild;\n\t\t} else {\n\t\t\tconst instance = create( ComponentConstructor.prototype );\n\n\t\t\tthis.instance = instance;\n\t\t\tthis.name = template.e;\n\n\t\t\tif ( instance.el ) {\n\t\t\t\twarnIfDebug( `The <${this.name}> component has a default 'el' property; it has been disregarded` );\n\t\t\t}\n\n\t\t\t// find container\n\t\t\tlet fragment = options.up;\n\t\t\tlet container;\n\t\t\twhile ( fragment ) {\n\t\t\t\tif ( fragment.owner.type === YIELDER ) {\n\t\t\t\t\tcontainer = fragment.owner.container;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tfragment = fragment.parent;\n\t\t\t}\n\n\t\t\t// add component-instance-specific properties\n\t\t\tinstance.parent = this.up.ractive;\n\t\t\tinstance.container = container || null;\n\t\t\tinstance.root = instance.parent.root;\n\t\t\tinstance.component = this;\n\n\t\t\tconstruct( this.instance, { partials });\n\n\t\t\t// these can be modified during construction\n\t\t\ttemplate = this.template;\n\t\t\tattrs = template.m;\n\n\t\t\t// allow components that are so inclined to add programmatic mappings\n\t\t\tif ( isArray( this.mappings ) ) {\n\t\t\t\tattrs = ( attrs || [] ).concat( this.mappings );\n\t\t\t} else if ( isString( this.mappings ) ) {\n\t\t\t\tattrs = ( attrs || [] ).concat( parser.parse( this.mappings, { attributes: true } ).t );\n\t\t\t}\n\n\t\t\t// for hackability, this could be an open option\n\t\t\t// for any ractive instance, but for now, just\n\t\t\t// for components and just for ractive...\n\t\t\tinstance._inlinePartials = partials;\n\t\t}\n\n\t\tthis.attributeByName = {};\n\t\tthis.attributes = [];\n\n\t\tif (attrs) {\n\t\t\tconst leftovers = [];\n\t\t\tattrs.forEach( template => {\n\t\t\t\tswitch ( template.t ) {\n\t\t\t\t\tcase ATTRIBUTE:\n\t\t\t\t\tcase EVENT:\n\t\t\t\t\t\tthis.attributes.push( createItem({\n\t\t\t\t\t\t\towner: this,\n\t\t\t\t\t\t\tup: this.up,\n\t\t\t\t\t\t\ttemplate\n\t\t\t\t\t\t}) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TRANSITION:\n\t\t\t\t\tcase BINDING_FLAG:\n\t\t\t\t\tcase DECORATOR:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tleftovers.push( template );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif ( leftovers.length ) {\n\t\t\t\tthis.attributes.push( new ConditionalAttribute({\n\t\t\t\t\towner: this,\n\t\t\t\t\tup: this.up,\n\t\t\t\t\ttemplate: leftovers\n\t\t\t\t}) );\n\t\t\t}\n\t\t}\n\n\t\tthis.eventHandlers = [];\n\t}\n\n\tbind () {\n\t\tif ( !this.isAnchor ) {\n\t\t\tthis.attributes.forEach( bind );\n\n\t\t\tinitialise( this.instance, {\n\t\t\t\tpartials: this._partials\n\t\t\t}, {\n\t\t\t\tcssIds: this.up.cssIds\n\t\t\t});\n\n\t\t\tthis.eventHandlers.forEach( bind );\n\n\t\t\tthis.bound = true;\n\t\t}\n\t}\n\n\tbubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.up.bubble();\n\t\t}\n\t}\n\n\tdestroyed () {\n\t\tif ( !this.isAnchor && this.instance.fragment ) this.instance.fragment.destroyed();\n\t}\n\n\tdetach () {\n\t\tif ( this.isAnchor ) {\n\t\t\tif ( this.instance ) return this.instance.fragment.detach();\n\t\t\treturn createDocumentFragment();\n\t\t}\n\n\t\treturn this.instance.fragment.detach();\n\t}\n\n\tfind ( selector, options ) {\n\t\tif ( this.instance ) return this.instance.fragment.find( selector, options );\n\t}\n\n\tfindAll ( selector, options ) {\n\t\tif ( this.instance ) this.instance.fragment.findAll( selector, options );\n\t}\n\n\tfindComponent ( name, options ) {\n\t\tif ( !name || this.name === name ) return this.instance;\n\n\t\tif ( this.instance.fragment ) {\n\t\t\treturn this.instance.fragment.findComponent( name, options );\n\t\t}\n\t}\n\n\tfindAllComponents ( name, options ) {\n\t\tconst { result } = options;\n\n\t\tif ( this.instance && ( !name || this.name === name ) ) {\n\t\t\tresult.push( this.instance );\n\t\t}\n\n\t\tif ( this.instance ) this.instance.findAllComponents( name, options );\n\t}\n\n\tfirstNode ( skipParent ) {\n\t\tif ( this.instance ) return this.instance.fragment.firstNode( skipParent );\n\t}\n\n\tgetContext ( ...assigns ) {\n\t\tassigns.unshift( this.instance );\n\t\treturn getRactiveContext.apply( null, assigns );\n\t}\n\n\trender ( target, occupants ) {\n\t\tif ( this.isAnchor ) {\n\t\t\tthis.rendered = true;\n\t\t\tthis.target = target;\n\n\t\t\tif ( !checking.length ) {\n\t\t\t\tchecking.push( this.ractive );\n\t\t\t\tif ( occupants ) {\n\t\t\t\t\tthis.occupants = occupants;\n\t\t\t\t\tcheckAnchors();\n\t\t\t\t\tthis.occupants = null;\n\t\t\t\t} else {\n\t\t\t\t\trunloop.scheduleTask( checkAnchors, true );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\trender( this.instance, target, null, occupants );\n\n\t\t\tthis.attributes.forEach( callRender );\n\t\t\tthis.eventHandlers.forEach( callRender );\n\n\t\t\tthis.rendered = true;\n\t\t}\n\t}\n\n\ttoString () {\n\t\tif ( this.instance ) return this.instance.toHTML();\n\t}\n\n\tunbind () {\n\t\tif ( !this.isAnchor ) {\n\t\t\tthis.bound = false;\n\n\t\t\tthis.attributes.forEach( unbind );\n\n\t\t\tteardown( this.instance, () => runloop.promise() );\n\t\t}\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tthis.shouldDestroy = shouldDestroy;\n\n\t\tif ( this.isAnchor ) {\n\t\t\tif ( this.item ) unrenderItem( this, this.item );\n\t\t\tthis.target = null;\n\t\t\tif ( !checking.length ) {\n\t\t\t\tchecking.push( this.ractive );\n\t\t\t\trunloop.scheduleTask( checkAnchors, true );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.instance.unrender();\n\t\t\tthis.instance.el = this.instance.target = null;\n\t\t\tthis.attributes.forEach( unrender );\n\t\t\tthis.eventHandlers.forEach( unrender );\n\t\t}\n\n\t\tthis.rendered = false;\n\t}\n\n\tupdate () {\n\t\tthis.dirty = false;\n\t\tif ( this.instance ) {\n\t\t\tthis.instance.fragment.update();\n\t\t\tthis.attributes.forEach( update );\n\t\t\tthis.eventHandlers.forEach( update );\n\t\t}\n\t}\n}\n\nfunction addChild ( meta ) {\n\tif ( this.item ) this.removeChild( this.item );\n\n\tconst child = meta.instance;\n\tmeta.anchor = this;\n\n\tmeta.up = this.up;\n\tmeta.name = meta.nameOption || this.name;\n\tthis.name = meta.name;\n\n\n\tif ( !child.isolated ) child.viewmodel.attached( this.up );\n\n\t// render as necessary\n\tif ( this.rendered ) {\n\t\trenderItem( this, meta );\n\t}\n}\n\nfunction removeChild ( meta ) {\n\t// unrender as necessary\n\tif ( this.item === meta ) {\n\t\tunrenderItem( this, meta );\n\t\tthis.name = this.template.n;\n\t}\n}\n\nfunction renderItem ( anchor, meta ) {\n\tif ( !anchor.rendered ) return;\n\n\tmeta.shouldDestroy = false;\n\tmeta.up = anchor.up;\n\n\tanchor.item = meta;\n\tanchor.instance = meta.instance;\n\tconst nextNode = anchor.up.findNextNode( anchor );\n\n\tif ( meta.instance.fragment.rendered ) {\n\t\tmeta.instance.unrender();\n\t}\n\n\tmeta.partials = meta.instance.partials;\n\tmeta.instance.partials = assign( create( meta.partials ), meta.partials, anchor._partials );\n\n\tmeta.instance.fragment.unbind();\n\tmeta.instance.fragment.componentParent = anchor.up;\n\tmeta.instance.fragment.bind( meta.instance.viewmodel );\n\n\tanchor.attributes.forEach( bind );\n\tanchor.eventHandlers.forEach( bind );\n\tanchor.attributes.forEach( callRender );\n\tanchor.eventHandlers.forEach( callRender );\n\n\tconst target = anchor.up.findParentNode();\n\trender( meta.instance, target, target.contains( nextNode ) ? nextNode : null, anchor.occupants );\n\n\tif ( meta.lastBound !== anchor ) {\n\t\tmeta.lastBound = anchor;\n\t}\n}\n\nfunction unrenderItem ( anchor, meta ) {\n\tif ( !anchor.rendered ) return;\n\n\tmeta.shouldDestroy = true;\n\tmeta.instance.unrender();\n\n\tanchor.eventHandlers.forEach( unrender );\n\tanchor.attributes.forEach( unrender );\n\tanchor.eventHandlers.forEach( unbind );\n\tanchor.attributes.forEach( unbind );\n\n\tmeta.instance.el = meta.instance.anchor = null;\n\tmeta.instance.fragment.componentParent = null;\n\tmeta.up = null;\n\tmeta.anchor = null;\n\tanchor.item = null;\n\tanchor.instance = null;\n}\n\nlet checking = [];\nexport function checkAnchors () {\n\tconst list = checking;\n\tchecking = [];\n\n\tlist.forEach( updateAnchors );\n}\n"",""import { fatal, warnIfDebug, welcome } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport { ensureArray, combine } from 'utils/array';\nimport { findInViewHierarchy } from 'shared/registry';\nimport dataConfigurator from './config/custom/data';\nimport RootModel from 'src/model/RootModel';\nimport Hook from 'src/events/Hook';\nimport getComputationSignature from './helpers/getComputationSignature';\nimport subscribe from './helpers/subscribe';\nimport Ractive from '../Ractive';\nimport { ATTRIBUTE, INTERPOLATOR } from 'config/types';\nimport { assign, create, hasOwn } from 'utils/object';\nimport { isString } from 'utils/is';\n\nconst constructHook = new Hook( 'construct' );\n\nconst registryNames = [\n\t'adaptors',\n\t'components',\n\t'decorators',\n\t'easing',\n\t'events',\n\t'interpolators',\n\t'partials',\n\t'transitions'\n];\n\nlet uid = 0;\n\nexport default function construct ( ractive, options ) {\n\tif ( Ractive.DEBUG ) welcome();\n\n\tinitialiseProperties( ractive );\n\thandleAttributes( ractive );\n\n\t// set up event subscribers\n\tsubscribe( ractive, options, 'on' );\n\n\t// if there's not a delegation setting, inherit from parent if it's not default\n\tif ( !hasOwn( options, 'delegate' ) && ractive.parent && ractive.parent.delegate !== ractive.delegate ) {\n\t\tractive.delegate = false;\n\t}\n\n\t// TODO don't allow `onconstruct` with `new Ractive()`, there's no need for it\n\tconstructHook.fire( ractive, options );\n\n\t// Add registries\n\tlet i = registryNames.length;\n\twhile ( i-- ) {\n\t\tconst name = registryNames[ i ];\n\t\tractive[ name ] = assign( create( ractive.constructor[ name ] || null ), options[ name ] );\n\t}\n\n\tif ( ractive._attributePartial ) {\n\t\tractive.partials['extra-attributes'] = ractive._attributePartial;\n\t\tdelete ractive._attributePartial;\n\t}\n\n\t// Create a viewmodel\n\tconst viewmodel = new RootModel({\n\t\tadapt: getAdaptors( ractive, ractive.adapt, options ),\n\t\tdata: dataConfigurator.init( ractive.constructor, ractive, options ),\n\t\tractive\n\t});\n\n\tractive.viewmodel = viewmodel;\n\n\t// Add computed properties\n\tconst computed = assign( create( ractive.constructor.prototype.computed ), options.computed );\n\n\tfor ( const key in computed ) {\n\t\tif ( key === '__proto__' ) continue;\n\t\tconst signature = getComputationSignature( ractive, key, computed[ key ] );\n\t\tviewmodel.compute( key, signature );\n\t}\n}\n\nfunction getAdaptors ( ractive, protoAdapt, options ) {\n\tprotoAdapt = protoAdapt.map( lookup );\n\tconst adapt = ensureArray( options.adapt ).map( lookup );\n\n\tconst srcs = [ protoAdapt, adapt ];\n\tif ( ractive.parent && !ractive.isolated ) {\n\t\tsrcs.push( ractive.parent.viewmodel.adaptors );\n\t}\n\n\treturn combine.apply( null, srcs );\n\n\tfunction lookup ( adaptor ) {\n\t\tif ( isString( adaptor ) ) {\n\t\t\tadaptor = findInViewHierarchy( 'adaptors', ractive, adaptor );\n\n\t\t\tif ( !adaptor ) {\n\t\t\t\tfatal( missingPlugin( adaptor, 'adaptor' ) );\n\t\t\t}\n\t\t}\n\n\t\treturn adaptor;\n\t}\n}\n\nfunction initialiseProperties ( ractive ) {\n\t// Generate a unique identifier, for places where you'd use a weak map if it\n\t// existed\n\tractive._guid = 'r-' + uid++;\n\n\t// events\n\tractive._subs = create( null );\n\tractive._nsSubs = 0;\n\n\t// storage for item configuration from instantiation to reset,\n\t// like dynamic functions or original values\n\tractive._config = {};\n\n\t// events\n\tractive.event = null;\n\tractive._eventQueue = [];\n\n\t// observers\n\tractive._observers = [];\n\n\t// external children\n\tractive._children = [];\n\tractive._children.byName = {};\n\tractive.children = ractive._children;\n\n\tif ( !ractive.component ) {\n\t\tractive.root = ractive;\n\t\tractive.parent = ractive.container = null; // TODO container still applicable?\n\t}\n}\n\nfunction handleAttributes ( ractive ) {\n\tconst component = ractive.component;\n\tconst attributes = ractive.constructor.attributes;\n\n\tif ( attributes && component ) {\n\t\tconst tpl = component.template;\n\t\tconst attrs = tpl.m ? tpl.m.slice() : [];\n\n\t\t// grab all of the passed attribute names\n\t\tconst props = attrs.filter( a => a.t === ATTRIBUTE ).map( a => a.n );\n\n\t\t// warn about missing requireds\n\t\tattributes.required.forEach( p => {\n\t\t\tif ( !~props.indexOf( p ) ) {\n\t\t\t\twarnIfDebug( `Component '${component.name}' requires attribute '${p}' to be provided` );\n\t\t\t}\n\t\t});\n\n\t\t// set up a partial containing non-property attributes\n\t\tconst all = attributes.optional.concat( attributes.required );\n\t\tconst partial = [];\n\t\tlet i = attrs.length;\n\t\twhile ( i-- ) {\n\t\t\tconst a = attrs[i];\n\t\t\tif ( a.t === ATTRIBUTE && !~all.indexOf( a.n ) ) {\n\t\t\t\tif ( attributes.mapAll ) {\n\t\t\t\t\t// map the attribute if requested and make the extra attribute in the partial refer to the mapping\n\t\t\t\t\tpartial.unshift({ t: ATTRIBUTE, n: a.n, f: [{ t: INTERPOLATOR, r: `~/${a.n}` }] });\n\t\t\t\t} else {\n\t\t\t\t\t// transfer the attribute to the extra attributes partal\n\t\t\t\t\tpartial.unshift( attrs.splice( i, 1 )[0] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( partial.length ) component.template = { t: tpl.t, e: tpl.e, f: tpl.f, m: attrs, p: tpl.p };\n\t\tractive._attributePartial = partial;\n\t}\n}\n"",""import { create, toPairs } from 'utils/object';\nimport { isFunction, isObjectType } from 'utils/is';\n\nexport default function subscribe ( instance, options, type ) {\n\tconst subs = ( instance.constructor[ `_${type}` ] || [] ).concat( toPairs( options[ type ] || [] ) );\n\tconst single = type === 'on' ? 'once' : `${type}Once`;\n\n\tsubs.forEach( ([ target, config ]) => {\n\t\tif ( isFunction( config ) ) {\n\t\t\tinstance[type]( target, config );\n\t\t} else if ( isObjectType( config ) && isFunction( config.handler ) ) {\n\t\t\tinstance[ config.once ? single : type ]( target, config.handler, create( config ) );\n\t\t}\n\t});\n}\n\n"",""import { fatal } from 'utils/log';\nimport bind from 'utils/bind';\nimport { createFunctionFromString } from '../config/runtime-parser';\nimport { isFunction, isString, isObjectType } from 'utils/is';\n\nexport default function getComputationSignature ( ractive, key, signature ) {\n\tlet getter;\n\tlet setter;\n\n\t// useful for debugging\n\tlet getterString;\n\tlet getterUseStack;\n\tlet setterString;\n\n\tif ( isFunction( signature ) ) {\n\t\tgetter = bind( signature, ractive );\n\t\tgetterString = signature.toString();\n\t\tgetterUseStack = true;\n\t}\n\n\tif ( isString( signature ) ) {\n\t\tgetter = createFunctionFromString( signature, ractive );\n\t\tgetterString = signature;\n\t}\n\n\tif ( isObjectType( signature ) ) {\n\t\tif ( isString( signature.get ) ) {\n\t\t\tgetter = createFunctionFromString( signature.get, ractive );\n\t\t\tgetterString = signature.get;\n\t\t} else if ( isFunction( signature.get ) ) {\n\t\t\tgetter = bind( signature.get, ractive );\n\t\t\tgetterString = signature.get.toString();\n\t\t\tgetterUseStack = true;\n\t\t} else {\n\t\t\tfatal( '`%s` computation must have a `get()` method', key );\n\t\t}\n\n\t\tif ( isFunction( signature.set ) ) {\n\t\t\tsetter = bind( signature.set, ractive );\n\t\t\tsetterString = signature.set.toString();\n\t\t}\n\t}\n\n\treturn {\n\t\tgetter,\n\t\tsetter,\n\t\tgetterString,\n\t\tsetterString,\n\t\tgetterUseStack\n\t};\n}\n"",""import { capture } from 'src/global/capture';\nimport Computation from './Computation';\nimport Model from './Model';\nimport { handleChange, mark } from 'shared/methodCallers';\nimport RactiveModel from './specials/RactiveModel';\nimport SharedModel, { GlobalModel } from './specials/SharedModel';\nimport { splitKeypath, escapeKey, unescapeKey } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport noop from 'utils/noop';\nimport { hasOwn, keys as objectKeys } from 'utils/object';\n\nexport default class RootModel extends Model {\n\tconstructor ( options ) {\n\t\tsuper( null, null );\n\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.ractive = options.ractive; // TODO sever this link\n\n\t\tthis.value = options.data;\n\t\tthis.adaptors = options.adapt;\n\t\tthis.adapt();\n\n\t\tthis.computationContext = options.ractive;\n\t\tthis.computations = {};\n\t}\n\n\tattached ( fragment ) {\n\t\tattachImplicits( this, fragment );\n\t}\n\n\tcompute ( key, signature ) {\n\t\tconst computation = new Computation( this, signature, key );\n\t\tthis.computations[ escapeKey( key ) ] = computation;\n\n\t\treturn computation;\n\t}\n\n\tcreateLink ( keypath, target, targetPath, options ) {\n\t\tconst keys = splitKeypath( keypath );\n\n\t\tlet model = this;\n\t\twhile ( keys.length ) {\n\t\t\tconst key = keys.shift();\n\t\t\tmodel = model.childByKey[ key ] || model.joinKey( key );\n\t\t}\n\n\t\treturn model.link( target, targetPath, options );\n\t}\n\n\tdetached () {\n\t\tdetachImplicits( this );\n\t}\n\n\tget ( shouldCapture, options ) {\n\t\tif ( shouldCapture ) capture( this );\n\n\t\tif ( !options || options.virtual !== false ) {\n\t\t\tconst result = this.getVirtual();\n\t\t\tconst keys = objectKeys( this.computations );\n\t\t\tlet i = keys.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tresult[ keys[i] ] = this.computations[ keys[i] ].get();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn this.value;\n\t\t}\n\t}\n\n\tgetKeypath () {\n\t\treturn '';\n\t}\n\n\tgetRactiveModel() {\n\t\treturn this.ractiveModel || ( this.ractiveModel = new RactiveModel( this.ractive ) );\n\t}\n\n\tgetValueChildren () {\n\t\tconst children = super.getValueChildren( this.value );\n\n\t\tthis.children.forEach( child => {\n\t\t\tif ( child._link ) {\n\t\t\t\tconst idx = children.indexOf( child );\n\t\t\t\tif ( ~idx ) children.splice( idx, 1, child._link );\n\t\t\t\telse children.push( child._link );\n\t\t\t}\n\t\t});\n\n\t\tfor ( const k in this.computations ) {\n\t\t\tchildren.push( this.computations[k] );\n\t\t}\n\n\t\treturn children;\n\t}\n\n\thas ( key ) {\n\t\tconst value = this.value;\n\t\tlet unescapedKey = unescapeKey( key );\n\n\t\tif ( unescapedKey === '@this' || unescapedKey === '@global' || unescapedKey === '@shared' || unescapedKey === '@style' ) return true;\n\t\tif ( unescapedKey[0] === '~' && unescapedKey[1] === '/' ) unescapedKey = unescapedKey.slice( 2 );\n\t\tif ( key === '' || hasOwn( value, unescapedKey ) ) return true;\n\n\t\t// mappings/links and computations\n\t\tif ( key in this.computations || this.childByKey[unescapedKey] && this.childByKey[unescapedKey]._link ) return true;\n\n\t\t// We climb up the constructor chain to find if one of them contains the unescapedKey\n\t\tlet constructor = value.constructor;\n\t\twhile ( constructor !== Function && constructor !== Array && constructor !== Object ) {\n\t\t\tif ( hasOwn( constructor.prototype, unescapedKey ) ) return true;\n\t\t\tconstructor = constructor.constructor;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tjoinKey ( key, opts ) {\n\t\tif ( key[0] === '@' ) {\n\t\t\tif ( key === '@this' || key === '@' ) return this.getRactiveModel();\n\t\t\tif ( key === '@global' ) return GlobalModel;\n\t\t\tif ( key === '@shared' ) return SharedModel;\n\t\t\tif ( key === '@style' ) return this.getRactiveModel().joinKey( 'cssData' );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key[0] === '~' && key[1] === '/' ) key = key.slice( 2 );\n\n\t\treturn hasOwn( this.computations, key ) ? this.computations[ key ] :\n\t\t       super.joinKey( key, opts );\n\t}\n\n\tset ( value ) {\n\t\t// TODO wrapping root node is a baaaad idea. We should prevent this\n\t\tconst wrapper = this.wrapper;\n\t\tif ( wrapper ) {\n\t\t\tconst shouldTeardown = !wrapper.reset || wrapper.reset( value ) === false;\n\n\t\t\tif ( shouldTeardown ) {\n\t\t\t\twrapper.teardown();\n\t\t\t\tthis.wrapper = null;\n\t\t\t\tthis.value = value;\n\t\t\t\tthis.adapt();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.value = value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\tthis.deps.forEach( handleChange );\n\t\tthis.children.forEach( mark );\n\t}\n\n\tretrieve () {\n\t\treturn this.wrapper ? this.wrapper.get() : this.value;\n\t}\n\n\tteardown () {\n\t\tsuper.teardown();\n\t\tfor ( const k in this.computations ) {\n\t\t\tthis.computations[ k ].teardown();\n\t\t}\n\t}\n}\nRootModel.prototype.update = noop;\n\nfunction attachImplicits ( model, fragment ) {\n\tif ( model._link && model._link.implicit && model._link.isDetached() ) {\n\t\tmodel.attach( fragment );\n\t}\n\n\t// look for virtual children to relink and cascade\n\tfor ( const k in model.childByKey ) {\n\t\tif ( k in model.value ) {\n\t\t\tattachImplicits( model.childByKey[k], fragment );\n\t\t} else if ( !model.childByKey[k]._link || model.childByKey[k]._link.isDetached() ) {\n\t\t\tconst mdl = resolveReference( fragment, k );\n\t\t\tif ( mdl ) {\n\t\t\t\tmodel.childByKey[k].link( mdl, k, { implicit: true } );\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction detachImplicits ( model ) {\n\tif ( model._link && model._link.implicit ) {\n\t\tmodel.unlink();\n\t}\n\n\tfor ( const k in model.childByKey ) {\n\t\tdetachImplicits( model.childByKey[k] );\n\t}\n}\n"",""import { SharedModel } from './SharedModel';\nimport { Missing } from '../LinkModel';\nimport { create } from 'utils/object';\n\nexport default class RactiveModel extends SharedModel {\n\tconstructor ( ractive ) {\n\t\tsuper( ractive, '@this' );\n\t\tthis.ractive = ractive;\n\t}\n\n\tjoinKey ( key ) {\n\t\tconst model = super.joinKey( key );\n\n\t\tif ( ( key === 'root' || key === 'parent' ) && !model.isLink ) return initLink( model, key );\n\t\telse if ( key === 'data' ) return this.ractive.viewmodel;\n\t\telse if ( key === 'cssData' ) return this.ractive.constructor._cssModel;\n\n\t\treturn model;\n\t}\n}\n\nfunction initLink ( model, key ) {\n\tmodel.applyValue = function ( value ) {\n\t\tthis.parent.value[ key ] = value;\n\t\tif ( value && value.viewmodel ) {\n\t\t\tthis.link( value.viewmodel.getRactiveModel(), key );\n\t\t\tthis._link.markedAll();\n\t\t} else {\n\t\t\tthis.link( create( Missing ), key );\n\t\t\tthis._link.markedAll();\n\t\t}\n\t};\n\n\tmodel.applyValue( model.parent.ractive[ key ], key );\n\tmodel._link.set = v => model.applyValue( v );\n\tmodel._link.applyValue = v => model.applyValue( v );\n\treturn model._link;\n}\n"",""import Hook from 'src/events/Hook';\nimport { removeFromArray } from 'utils/array';\nimport { cancel } from 'shared/methodCallers';\nimport { warnIfDebug } from 'utils/log';\n\nconst teardownHook = new Hook( 'teardown' );\nconst destructHook = new Hook( 'destruct' );\n\n// Teardown. This goes through the root fragment and all its children, removing observers\n// and generally cleaning up after itself\n\nexport default function Ractive$teardown () {\n\tif ( this.torndown ) {\n\t\twarnIfDebug( 'ractive.teardown() was called on a Ractive instance that was already torn down' );\n\t\treturn Promise.resolve();\n\t}\n\n\tthis.shouldDestroy = true;\n\treturn teardown( this, () => this.fragment.rendered ? this.unrender() : Promise.resolve() );\n}\n\nexport function teardown ( instance, getPromise ) {\n\tinstance.torndown = true;\n\tinstance.fragment.unbind();\n\tinstance._observers.slice().forEach( cancel );\n\n\tif ( instance.el && instance.el.__ractive_instances__ ) {\n\t\tremoveFromArray( instance.el.__ractive_instances__, instance );\n\t}\n\n\tconst promise = getPromise();\n\n\tteardownHook.fire( instance );\n\n\tpromise.then( () => {\n\t\tdestructHook.fire( instance );\n\t\tinstance.viewmodel.teardown();\n\t});\n\n\treturn promise;\n}\n"",""import Item from './shared/Item';\nimport noop from 'utils/noop';\nimport { detachNode } from 'utils/dom';\nimport { doc } from 'config/environment';\nimport { assign, create } from 'utils/object';\n\nexport default function Comment ( options ) {\n\tItem.call( this, options );\n}\n\nconst proto = create( Item.prototype );\n\nassign( proto, {\n\tbind: noop,\n\tunbind: noop,\n\tupdate: noop,\n\n\tdetach () {\n\t\treturn detachNode( this.node );\n\t},\n\n\tfirstNode () {\n\t\treturn this.node;\n\t},\n\n\trender ( target ) {\n\t\tthis.rendered = true;\n\n\t\tthis.node = doc.createComment( this.template.c );\n\t\ttarget.appendChild( this.node );\n\t},\n\n\ttoString () {\n\t\treturn `<!-- ${this.template.c} -->`;\n\t},\n\n\tunrender ( shouldDestroy ) {\n\t\tif ( this.rendered && shouldDestroy ) this.detach();\n\t\tthis.rendered = false;\n\t}\n});\n\nComment.prototype = proto;\n"",""import { INTERPOLATOR, ELEMENT } from 'config/types';\nimport Item from '../shared/Item';\nimport Fragment from '../../Fragment';\nimport findElement from '../shared/findElement';\nimport { isArray } from 'utils/is';\n\nexport default class BindingFlag extends Item {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\n\t\tthis.owner = options.owner || options.up.owner || findElement( options.up );\n\t\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.up );\n\t\tthis.flag = options.template.v === 'l' ? 'lazy' : 'twoway';\n\t\tthis.bubbler = this.owner === this.element ? this.element : this.up;\n\n\t\tif ( this.element.type === ELEMENT ) {\n\t\t\tif ( isArray( options.template.f ) ) {\n\t\t\t\tthis.fragment = new Fragment({\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: options.template.f\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.interpolator = this.fragment &&\n\t\t\t\t\t\t\t\tthis.fragment.items.length === 1 &&\n\t\t\t\t\t\t\t\tthis.fragment.items[0].type === INTERPOLATOR &&\n\t\t\t\t\t\t\t\tthis.fragment.items[0];\n\t\t}\n\t}\n\n\tbind () {\n\t\tif ( this.fragment ) this.fragment.bind();\n\t\tset( this, this.getValue(), true );\n\t}\n\n\tbubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.bubbler.bubble();\n\t\t\tthis.dirty = true;\n\t\t}\n\t}\n\n\tgetValue () {\n\t\tif ( this.fragment ) return this.fragment.valueOf();\n\t\telse if ( 'value' in this ) return this.value;\n\t\telse if ( 'f' in this.template ) return this.template.f;\n\t\telse return true;\n\t}\n\n\trender () {\n\t\tset( this, this.getValue(), true );\n\t}\n\n\ttoString () { return ''; }\n\n\tunbind () {\n\t\tif ( this.fragment ) this.fragment.unbind();\n\n\t\tdelete this.element[ this.flag ];\n\t}\n\n\tunrender () {\n\t\tif ( this.element.rendered ) this.element.recreateTwowayBinding();\n\t}\n\n\tupdate () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.fragment ) this.fragment.update();\n\t\t\tset( this, this.getValue(), true );\n\t\t}\n\t}\n}\n\nfunction set ( flag, value, update ) {\n\tif ( value === 0 ) {\n\t\tflag.value = true;\n\t} else if ( value === 'true' ) {\n\t\tflag.value = true;\n\t} else if ( value === 'false' || value === '0' ) {\n\t\tflag.value = false;\n\t} else {\n\t\tflag.value = value;\n\t}\n\n\tconst current = flag.element[ flag.flag ];\n\tflag.element[ flag.flag ] = flag.value;\n\tif ( update && !flag.element.attributes.binding && current !== flag.value ) {\n\t\tflag.element.recreateTwowayBinding();\n\t}\n\n\treturn flag.value;\n}\n"",""import { INTERPOLATOR } from 'config/types';\nimport namespaces from 'config/namespaces';\nimport { safeAttributeString } from 'utils/dom';\nimport { booleanAttributes } from 'utils/html';\nimport hyphenateCamel from 'utils/hyphenateCamel';\nimport Fragment from '../../Fragment';\nimport Item from '../shared/Item';\nimport findElement from '../shared/findElement';\nimport getUpdateDelegate from './attribute/getUpdateDelegate';\nimport propertyNames from './attribute/propertyNames';\nimport { inAttributes } from './ConditionalAttribute';\nimport { isArray, isString } from 'utils/is';\n\nfunction lookupNamespace ( node, prefix ) {\n\tconst qualified = `xmlns:${prefix}`;\n\n\twhile ( node ) {\n\t\tif ( node.hasAttribute && node.hasAttribute( qualified ) ) return node.getAttribute( qualified );\n\t\tnode = node.parentNode;\n\t}\n\n\treturn namespaces[ prefix ];\n}\n\nlet attribute = false;\nexport function inAttribute () { return attribute; }\n\nexport default class Attribute extends Item {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\n\t\tthis.name = options.template.n;\n\t\tthis.namespace = null;\n\n\t\tthis.owner = options.owner || options.up.owner || options.element || findElement( options.up );\n\t\tthis.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.up ) );\n\t\tthis.up = options.up; // shared\n\t\tthis.ractive = this.up.ractive;\n\n\t\tthis.rendered = false;\n\t\tthis.updateDelegate = null;\n\t\tthis.fragment = null;\n\n\t\tthis.element.attributeByName[ this.name ] = this;\n\n\t\tif ( !isArray( options.template.f ) ) {\n\t\t\tthis.value = options.template.f;\n\t\t\tif ( this.value === 0 ) {\n\t\t\t\tthis.value = '';\n\t\t\t} else if ( this.value === undefined ) {\n\t\t\t\tthis.value = true;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\towner: this,\n\t\t\t\ttemplate: options.template.f\n\t\t\t});\n\t\t}\n\n\t\tthis.interpolator = this.fragment &&\n\t\t\tthis.fragment.items.length === 1 &&\n\t\t\tthis.fragment.items[0].type === INTERPOLATOR &&\n\t\t\tthis.fragment.items[0];\n\n\t\tif ( this.interpolator ) this.interpolator.owner = this;\n\t}\n\n\tbind () {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.bind();\n\t\t}\n\t}\n\n\tbubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.up.bubble();\n\t\t\tthis.element.bubble();\n\t\t\tthis.dirty = true;\n\t\t}\n\t}\n\n\tfirstNode () {}\n\n\tgetString () {\n\t\tattribute = true;\n\t\tconst value = this.fragment ?\n\t\t\tthis.fragment.toString() :\n\t\t\tthis.value != null ? '' + this.value : '';\n\t\tattribute = false;\n\t\treturn value;\n\t}\n\n\t// TODO could getValue ever be called for a static attribute,\n\t// or can we assume that this.fragment exists?\n\tgetValue () {\n\t\tattribute = true;\n\t\tconst value = this.fragment ? this.fragment.valueOf() : booleanAttributes.test( this.name ) ? true : this.value;\n\t\tattribute = false;\n\t\treturn value;\n\t}\n\n\trender () {\n\t\tconst node = this.element.node;\n\t\tthis.node = node;\n\n\t\t// should we use direct property access, or setAttribute?\n\t\tif ( !node.namespaceURI || node.namespaceURI === namespaces.html ) {\n\t\t\tthis.propertyName = propertyNames[ this.name ] || this.name;\n\n\t\t\tif ( node[ this.propertyName ] !== undefined ) {\n\t\t\t\tthis.useProperty = true;\n\t\t\t}\n\n\t\t\t// is attribute a boolean attribute or 'value'? If so we're better off doing e.g.\n\t\t\t// node.selected = true rather than node.setAttribute( 'selected', '' )\n\t\t\tif ( booleanAttributes.test( this.name ) || this.isTwoway ) {\n\t\t\t\tthis.isBoolean = true;\n\t\t\t}\n\n\t\t\tif ( this.propertyName === 'value' ) {\n\t\t\t\tnode._ractive.value = this.value;\n\t\t\t}\n\t\t}\n\n\t\tif ( node.namespaceURI ) {\n\t\t\tconst index = this.name.indexOf( ':' );\n\t\t\tif ( index !== -1 ) {\n\t\t\t\tthis.namespace = lookupNamespace( node, this.name.slice( 0, index ) );\n\t\t\t} else {\n\t\t\t\tthis.namespace = node.namespaceURI;\n\t\t\t}\n\t\t}\n\n\t\tthis.rendered = true;\n\t\tthis.updateDelegate = getUpdateDelegate( this );\n\t\tthis.updateDelegate();\n\t}\n\n\ttoString () {\n\t\tif ( inAttributes() ) return '';\n\t\tattribute = true;\n\n\t\tconst value = this.getValue();\n\n\t\t// Special case - select and textarea values (should not be stringified)\n\t\tif ( this.name === 'value' && ( this.element.getAttribute( 'contenteditable' ) !== undefined || ( this.element.name === 'select' || this.element.name === 'textarea' ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Special case – bound radio `name` attributes\n\t\tif ( this.name === 'name' && this.element.name === 'input' && this.interpolator && this.element.getAttribute( 'type' ) === 'radio' ) {\n\t\t\treturn `name=\""{{${this.interpolator.model.getKeypath()}}}\""`;\n\t\t}\n\n\t\t// Special case - style and class attributes and directives\n\t\tif ( this.owner === this.element && ( this.name === 'style' || this.name === 'class' || this.style || this.inlineClass ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !this.rendered && this.owner === this.element && ( !this.name.indexOf( 'style-' ) || !this.name.indexOf( 'class-' ) ) ) {\n\t\t\tif ( !this.name.indexOf( 'style-' ) ) {\n\t\t\t\tthis.style = hyphenateCamel( this.name.substr( 6 ) );\n\t\t\t} else {\n\t\t\t\tthis.inlineClass = this.name.substr( 6 );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( booleanAttributes.test( this.name ) ) return value ? ( isString( value ) ? `${this.name}=\""${safeAttributeString(value)}\""` : this.name ) : '';\n\t\tif ( value == null ) return '';\n\n\t\tconst str = safeAttributeString( this.getString() );\n\t\tattribute = false;\n\n\t\treturn str ?\n\t\t\t`${this.name}=\""${str}\""` :\n\t\t\tthis.name;\n\t}\n\n\tunbind () {\n\t\tif ( this.fragment ) this.fragment.unbind();\n\t}\n\n\tunrender () {\n\t\tthis.updateDelegate( true );\n\n\t\tthis.rendered = false;\n\t}\n\n\tupdate () {\n\t\tif ( this.dirty ) {\n\t\t\tlet binding;\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.fragment ) this.fragment.update();\n\t\t\tif ( this.rendered ) this.updateDelegate();\n\t\t\tif ( this.isTwoway && !this.locked ) {\n\t\t\t\tthis.interpolator.twowayBinding.lastVal( true, this.interpolator.model.get() );\n\t\t\t} else if ( this.name === 'value' && ( binding = this.element.binding ) ) { // special case: name bound element with dynamic value\n\t\t\t\tconst attr = binding.attribute;\n\t\t\t\tif ( attr && !attr.dirty && attr.rendered ) {\n\t\t\t\t\tthis.element.binding.attribute.updateDelegate();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"",""import { doc } from 'config/environment';\nimport { svg } from 'config/namespaces';\nimport { createElement } from 'utils/dom';\nimport { toArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport Fragment from '../../Fragment';\nimport Item from '../shared/Item';\n\nconst div = doc ? createElement( 'div' ) : null;\n\nlet attributes = false;\nexport function inAttributes() { return attributes; }\n\nexport default class ConditionalAttribute extends Item {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\n\t\tthis.attributes = [];\n\n\t\tthis.owner = options.owner;\n\n\t\tthis.fragment = new Fragment({\n\t\t\tractive: this.ractive,\n\t\t\towner: this,\n\t\t\ttemplate: this.template\n\t\t});\n\n\t\t// this fragment can't participate in node-y things\n\t\tthis.fragment.findNextNode = noop;\n\n\t\tthis.dirty = false;\n\t}\n\n\tbind () {\n\t\tthis.fragment.bind();\n\t}\n\n\tbubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.owner.bubble();\n\t\t}\n\t}\n\n\tdestroyed () {\n\t\tthis.unrender();\n\t}\n\n\trender () {\n\t\tthis.node = this.owner.node;\n\t\tif ( this.node ) {\n\t\t\tthis.isSvg = this.node.namespaceURI === svg;\n\t\t}\n\n\t\tattributes = true;\n\t\tif ( !this.rendered ) this.fragment.render();\n\n\t\tthis.rendered = true;\n\t\tthis.dirty = true; // TODO this seems hacky, but necessary for tests to pass in browser AND node.js\n\t\tthis.update();\n\t\tattributes = false;\n\t}\n\n\ttoString () {\n\t\treturn this.fragment.toString();\n\t}\n\n\tunbind () {\n\t\tthis.fragment.unbind();\n\t}\n\n\tunrender () {\n\t\tthis.rendered = false;\n\t\tthis.fragment.unrender();\n\t}\n\n\tupdate () {\n\t\tlet str;\n\t\tlet attrs;\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tconst current = attributes;\n\t\t\tattributes = true;\n\t\t\tthis.fragment.update();\n\n\t\t\tif ( this.rendered && this.node ) {\n\t\t\t\tstr = this.fragment.toString();\n\n\t\t\t\tattrs = parseAttributes( str, this.isSvg );\n\n\t\t\t\t// any attributes that previously existed but no longer do\n\t\t\t\t// must be removed\n\t\t\t\tthis.attributes.filter( a => notIn( attrs, a ) ).forEach( a => {\n\t\t\t\t\tthis.node.removeAttribute( a.name );\n\t\t\t\t});\n\n\t\t\t\tattrs.forEach( a => {\n\t\t\t\t\tthis.node.setAttribute( a.name, a.value );\n\t\t\t\t});\n\n\t\t\t\tthis.attributes = attrs;\n\t\t\t}\n\n\t\t\tattributes = current || false;\n\t\t}\n\t}\n}\n\nconst onlyWhitespace = /^\\s*$/;\nfunction parseAttributes ( str, isSvg ) {\n\tif ( onlyWhitespace.test( str ) ) return [];\n\tconst tagName = isSvg ? 'svg' : 'div';\n\treturn str\n\t\t? (div.innerHTML = `<${tagName} ${str}></${tagName}>`) &&\n\t\t\ttoArray(div.childNodes[0].attributes)\n\t\t: [];\n}\n\nfunction notIn ( haystack, needle ) {\n\tlet i = haystack.length;\n\n\twhile ( i-- ) {\n\t\tif ( haystack[i].name === needle.name ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n"",""export default {\n\t'accept-charset': 'acceptCharset',\n\taccesskey: 'accessKey',\n\tbgcolor: 'bgColor',\n\tclass: 'className',\n\tcodebase: 'codeBase',\n\tcolspan: 'colSpan',\n\tcontenteditable: 'contentEditable',\n\tdatetime: 'dateTime',\n\tdirname: 'dirName',\n\tfor: 'htmlFor',\n\t'http-equiv': 'httpEquiv',\n\tismap: 'isMap',\n\tmaxlength: 'maxLength',\n\tnovalidate: 'noValidate',\n\tpubdate: 'pubDate',\n\treadonly: 'readOnly',\n\trowspan: 'rowSpan',\n\ttabindex: 'tabIndex',\n\tusemap: 'useMap'\n};\n"",""import { html } from 'config/namespaces';\nimport { safeToStringValue} from 'utils/dom';\nimport { arrayContains } from 'utils/array';\nimport noop from 'utils/noop';\nimport hyphenateCamel from 'utils/hyphenateCamel';\nimport { readStyle, readClass } from 'src/view/helpers/specialAttrs';\nimport { keys as objectKeys } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\n\nconst textTypes = [ undefined, 'text', 'search', 'url', 'email', 'hidden', 'password', 'search', 'reset', 'submit' ];\n\nexport default function getUpdateDelegate ( attribute ) {\n\tconst { element, name } = attribute;\n\n\tif ( name === 'value' ) {\n\t\tif ( attribute.interpolator ) attribute.interpolator.bound = true;\n\n\t\t// special case - selects\n\t\tif ( element.name === 'select' && name === 'value' ) {\n\t\t\treturn element.getAttribute( 'multiple' ) ? updateMultipleSelectValue : updateSelectValue;\n\t\t}\n\n\t\tif ( element.name === 'textarea' ) return updateStringValue;\n\n\t\t// special case - contenteditable\n\t\tif ( element.getAttribute( 'contenteditable' ) != null ) return updateContentEditableValue;\n\n\t\t// special case - <input>\n\t\tif ( element.name === 'input' ) {\n\t\t\tconst type = element.getAttribute( 'type' );\n\n\t\t\t// type='file' value='{{fileList}}'>\n\t\t\tif ( type === 'file' ) return noop; // read-only\n\n\t\t\t// type='radio' name='{{twoway}}'\n\t\t\tif ( type === 'radio' && element.binding && element.binding.attribute.name === 'name' ) return updateRadioValue;\n\n\t\t\tif ( ~textTypes.indexOf( type ) ) return updateStringValue;\n\t\t}\n\n\t\treturn updateValue;\n\t}\n\n\tconst node = element.node;\n\n\t// special case - <input type='radio' name='{{twoway}}' value='foo'>\n\tif ( attribute.isTwoway && name === 'name' ) {\n\t\tif ( node.type === 'radio' ) return updateRadioName;\n\t\tif ( node.type === 'checkbox' ) return updateCheckboxName;\n\t}\n\n\tif ( name === 'style' ) return updateStyleAttribute;\n\n\tif ( name.indexOf( 'style-' ) === 0 ) return updateInlineStyle;\n\n\t// special case - class names. IE fucks things up, again\n\tif ( name === 'class' && ( !node.namespaceURI || node.namespaceURI === html ) ) return updateClassName;\n\n\tif ( name.indexOf( 'class-' ) === 0 ) return updateInlineClass;\n\n\tif ( attribute.isBoolean ) {\n\t\tconst type = element.getAttribute( 'type' );\n\t\tif ( attribute.interpolator && name === 'checked' && ( type === 'checkbox' || type === 'radio' ) ) attribute.interpolator.bound = true;\n\t\treturn updateBoolean;\n\t}\n\n\tif ( attribute.namespace && attribute.namespace !== attribute.node.namespaceURI ) return updateNamespacedAttribute;\n\n\treturn updateAttribute;\n}\n\nfunction updateMultipleSelectValue ( reset ) {\n\tlet value = this.getValue();\n\n\tif ( !isArray( value ) ) value = [ value ];\n\n\tconst options = this.node.options;\n\tlet i = options.length;\n\n\tif ( reset ) {\n\t\twhile ( i-- ) options[i].selected = false;\n\t} else {\n\t\twhile ( i-- ) {\n\t\t\tconst option = options[i];\n\t\t\tconst optionValue = option._ractive ?\n\t\t\t\toption._ractive.value :\n\t\t\t\toption.value; // options inserted via a triple don't have _ractive\n\n\t\t\toption.selected = arrayContains( value, optionValue );\n\t\t}\n\t}\n}\n\nfunction updateSelectValue ( reset ) {\n\tconst value = this.getValue();\n\n\tif ( !this.locked ) { // TODO is locked still a thing?\n\t\tthis.node._ractive.value = value;\n\n\t\tconst options = this.node.options;\n\t\tlet i = options.length;\n\t\tlet wasSelected = false;\n\n\t\tif ( reset ) {\n\t\t\twhile ( i-- ) options[i].selected = false;\n\t\t} else {\n\t\t\twhile ( i-- ) {\n\t\t\t\tconst option = options[i];\n\t\t\t\tconst optionValue = option._ractive ?\n\t\t\t\t\toption._ractive.value :\n\t\t\t\t\toption.value; // options inserted via a triple don't have _ractive\n\t\t\t\tif ( option.disabled && option.selected ) wasSelected = true;\n\n\t\t\t\tif ( optionValue == value ) { // double equals as we may be comparing numbers with strings\n\t\t\t\t\toption.selected = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !wasSelected ) this.node.selectedIndex = -1;\n\t}\n}\n\n\nfunction updateContentEditableValue ( reset ) {\n\tconst value = this.getValue();\n\n\tif ( !this.locked ) {\n\t\tif ( reset ) this.node.innerHTML = '';\n\t\telse this.node.innerHTML = value === undefined ? '' : value;\n\t}\n}\n\nfunction updateRadioValue ( reset ) {\n\tconst node = this.node;\n\tconst wasChecked = node.checked;\n\n\tconst value = this.getValue();\n\n\tif ( reset ) return node.checked = false;\n\n\t//node.value = this.element.getAttribute( 'value' );\n\tnode.value = this.node._ractive.value = value;\n\tnode.checked = this.element.compare( value, this.element.getAttribute( 'name' ) );\n\n\t// This is a special case - if the input was checked, and the value\n\t// changed so that it's no longer checked, the twoway binding is\n\t// most likely out of date. To fix it we have to jump through some\n\t// hoops... this is a little kludgy but it works\n\tif ( wasChecked && !node.checked && this.element.binding && this.element.binding.rendered ) {\n\t\tthis.element.binding.group.model.set( this.element.binding.group.getValue() );\n\t}\n}\n\nfunction updateValue ( reset ) {\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tthis.node.removeAttribute( 'value' );\n\t\t\tthis.node.value = this.node._ractive.value = null;\n\t\t} else {\n\t\t\tconst value = this.getValue();\n\n\t\t\tthis.node.value = this.node._ractive.value = value;\n\t\t\tthis.node.setAttribute( 'value', safeToStringValue( value ) );\n\t\t}\n\t}\n}\n\nfunction updateStringValue ( reset ) {\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tthis.node._ractive.value = '';\n\t\t\tthis.node.removeAttribute( 'value' );\n\t\t} else {\n\t\t\tconst value = this.getValue();\n\n\t\t\tthis.node._ractive.value = value;\n\n\t\t\tthis.node.value = safeToStringValue( value );\n\t\t\tthis.node.setAttribute( 'value', safeToStringValue( value ) );\n\t\t}\n\t}\n}\n\nfunction updateRadioName ( reset ) {\n\tif ( reset ) this.node.checked = false;\n\telse this.node.checked = this.element.compare( this.getValue(), this.element.binding.getValue() );\n}\n\nfunction updateCheckboxName ( reset ) {\n\tconst { element, node } = this;\n\tconst binding = element.binding;\n\n\tconst value = this.getValue();\n\tconst valueAttribute = element.getAttribute( 'value' );\n\n\tif ( reset ) {\n\t\t// TODO: WAT?\n\t}\n\n\tif ( !isArray( value ) ) {\n\t\tbinding.isChecked = node.checked = element.compare( value, valueAttribute );\n\t} else {\n\t\tlet i = value.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( element.compare ( valueAttribute, value[i] ) ) {\n\t\t\t\tbinding.isChecked = node.checked = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tbinding.isChecked = node.checked = false;\n\t}\n}\n\nfunction updateStyleAttribute ( reset ) {\n\tconst props = reset ? {} : readStyle( this.getValue() || '' );\n\tconst style = this.node.style;\n\tconst keys = objectKeys( props );\n\tconst prev = this.previous || [];\n\n\tlet i = 0;\n\twhile ( i < keys.length ) {\n\t\tif ( keys[i] in style ) {\n\t\t\tconst safe = props[ keys[i] ].replace( '!important', '' );\n\t\t\tstyle.setProperty( keys[i], safe, safe.length !== props[ keys[i] ].length ? 'important' : '' );\n\t\t}\n\t\ti++;\n\t}\n\n\t// remove now-missing attrs\n\ti = prev.length;\n\twhile ( i-- ) {\n\t\tif ( !~keys.indexOf( prev[i] ) && prev[i] in style ) style.setProperty( prev[i], '', '' );\n\t}\n\n\tthis.previous = keys;\n}\n\nfunction updateInlineStyle ( reset ) {\n\tif ( !this.style ) {\n\t\tthis.style = hyphenateCamel( this.name.substr( 6 ) );\n\t}\n\n\tif ( reset && this.node.style.getPropertyValue( this.style ) !== this.last ) return;\n\n\tconst value = reset ? '' : safeToStringValue( this.getValue() );\n\tconst safe = value.replace( '!important', '' );\n\tthis.node.style.setProperty( this.style, safe, safe.length !== value.length ? 'important' : '' );\n\tthis.last = safe;\n}\n\nfunction updateClassName ( reset ) {\n\tconst value = reset ? [] : readClass( safeToStringValue( this.getValue() ) );\n\n\t// watch out for werdo svg elements\n\tlet cls = this.node.className;\n\tcls = cls.baseVal !== undefined ? cls.baseVal : cls;\n\n\tconst attr = readClass( cls );\n\tconst prev = this.previous || attr.slice( 0 );\n\n\tconst className = value.concat( attr.filter( c => !~prev.indexOf( c ) ) ).join( ' ' );\n\n\tif ( className !== cls ) {\n\t\tif ( !isString( this.node.className ) ) {\n\t\t\tthis.node.className.baseVal = className;\n\t\t} else {\n\t\t\tthis.node.className = className;\n\t\t}\n\t}\n\n\tthis.previous = value;\n}\n\nfunction updateInlineClass ( reset ) {\n\tconst name = this.name.substr( 6 );\n\n\t// watch out for werdo svg elements\n\tlet cls = this.node.className;\n\tcls = cls.baseVal !== undefined ? cls.baseVal : cls;\n\n\tconst attr = readClass( cls );\n\tconst value = reset ? false : this.getValue();\n\n\tif ( !this.inlineClass ) this.inlineClass = name;\n\n\tif ( value && !~attr.indexOf( name ) ) attr.push( name );\n\telse if ( !value && ~attr.indexOf( name ) ) attr.splice( attr.indexOf( name ), 1 );\n\n\tif ( !isString( this.node.className ) ) {\n\t\tthis.node.className.baseVal = attr.join( ' ' );\n\t} else {\n\t\tthis.node.className = attr.join( ' ' );\n\t}\n}\n\nfunction updateBoolean ( reset ) {\n\t// with two-way binding, only update if the change wasn't initiated by the user\n\t// otherwise the cursor will often be sent to the wrong place\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tif ( this.useProperty ) this.node[ this.propertyName ] = false;\n\t\t\tthis.node.removeAttribute( this.propertyName );\n\t\t} else {\n\t\t\tif ( this.useProperty ) {\n\t\t\t\tthis.node[ this.propertyName ] = this.getValue();\n\t\t\t} else {\n\t\t\t\tconst val = this.getValue();\n\t\t\t\tif ( val ) {\n\t\t\t\t\tthis.node.setAttribute( this.propertyName, isString( val ) ? val : '' );\n\t\t\t\t} else {\n\t\t\t\t\tthis.node.removeAttribute( this.propertyName );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction updateAttribute ( reset ) {\n\tif ( reset ) {\n\t\tif ( this.node.getAttribute( this.name ) === this.value ) {\n\t\t\tthis.node.removeAttribute( this.name );\n\t\t}\n\t} else {\n\t\tthis.value = safeToStringValue( this.getString() );\n\t\tthis.node.setAttribute( this.name, this.value );\n\t}\n}\n\nfunction updateNamespacedAttribute ( reset ) {\n\tif ( reset ) {\n\t\tif ( this.value === this.node.getAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ) ) ) {\n\t\t\tthis.node.removeAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ) );\n\t\t}\n\t} else {\n\t\tthis.value = safeToStringValue( this.getString() );\n\t\tthis.node.setAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ), this.value );\n\t}\n}\n"",""import cleanCss from 'utils/cleanCss';\nimport { isString } from 'utils/is';\n\nconst space = /\\s+/;\n\nexport function readStyle ( css ) {\n\tif ( !isString( css ) ) return {};\n\n\treturn cleanCss( css, ( css, reconstruct ) => {\n\t\treturn css.split( ';' )\n\t\t\t.filter( rule => !!rule.trim() )\n\t\t\t.map( reconstruct )\n\t\t\t.reduce(( rules, rule ) => {\n\t\t\t\tconst i = rule.indexOf(':');\n\t\t\t\tconst name = rule.substr( 0, i ).trim();\n\t\t\t\trules[ name ] = rule.substr( i + 1 ).trim();\n\t\t\t\treturn rules;\n\t\t\t}, {});\n\t});\n}\n\nexport function readClass ( str ) {\n\tconst list = str.split( space );\n\n\t// remove any empty entries\n\tlet i = list.length;\n\twhile ( i-- ) {\n\t\tif ( !list[i] ) list.splice( i, 1 );\n\t}\n\n\treturn list;\n}\n"",""export default function ( camelCaseStr ) {\n\treturn camelCaseStr.replace( /([A-Z])/g, ( match, $1 ) => {\n\t\treturn '-' + $1.toLowerCase();\n\t});\n}\n"",""import Fragment from '../Fragment';\nimport { ContainerItem } from './shared/Item';\nimport resolve from '../resolvers/resolve';\n\nexport function resolveAliases( aliases, fragment ) {\n\tconst resolved = {};\n\n\tfor ( let i = 0; i < aliases.length; i++ ) {\n\t\tresolved[ aliases[i].n ] = resolve( fragment, aliases[i].x );\n\t}\n\n\tfor ( const k in resolved ) {\n\t\tresolved[k].reference();\n\t}\n\n\treturn resolved;\n}\n\nexport default class Alias extends ContainerItem {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\n\t\tthis.fragment = null;\n\t}\n\n\tbind () {\n\t\tthis.fragment = new Fragment({\n\t\t\towner: this,\n\t\t\ttemplate: this.template.f\n\t\t});\n\n\t\tthis.fragment.aliases = resolveAliases( this.template.z, this.up );\n\t\tthis.fragment.bind();\n\t}\n\n\trender ( target ) {\n\t\tthis.rendered = true;\n\t\tif ( this.fragment ) this.fragment.render( target );\n\t}\n\n\tunbind () {\n\t\tfor ( const k in this.fragment.aliases ) {\n\t\t\tthis.fragment.aliases[k].unreference();\n\t\t}\n\n\t\tthis.fragment.aliases = {};\n\t\tif ( this.fragment ) this.fragment.unbind();\n\t}\n\n\tunrender ( shouldDestroy ) {\n\t\tif ( this.rendered && this.fragment ) this.fragment.unrender( shouldDestroy );\n\t\tthis.rendered = false;\n\t}\n\n\tupdate () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tthis.fragment.update();\n\t\t}\n\t}\n}\n"",""import resolveReference from './resolveReference';\nimport ExpressionProxy from './ExpressionProxy';\nimport ReferenceExpressionProxy from './ReferenceExpressionProxy';\n\nexport default function resolve ( fragment, template ) {\n\tif ( template.r ) {\n\t\treturn resolveReference( fragment, template.r );\n\t}\n\n\telse if ( template.x ) {\n\t\treturn new ExpressionProxy( fragment, template.x );\n\t}\n\n\telse if ( template.rx ) {\n\t\treturn new ReferenceExpressionProxy( fragment, template.rx );\n\t}\n}\n"",""import Model from 'src/model/Model';\nimport { findBoundValue } from 'src/model/ModelBase';\nimport { REFERENCE } from 'config/types';\nimport { rebindMatch } from 'shared/rebind';\nimport { handleChange, mark, marked } from 'shared/methodCallers';\nimport { isEqual, isString } from 'utils/is';\nimport { escapeKey } from 'shared/keypaths';\nimport ExpressionProxy from './ExpressionProxy';\nimport resolveReference from './resolveReference';\nimport resolve from './resolve';\nimport { hasOwn } from 'utils/object';\n\nclass ReferenceExpressionChild extends Model {\n\tconstructor ( parent, key ) {\n\t\tsuper ( parent, key );\n\t\tthis.dirty = true;\n\t}\n\n\tapplyValue ( value ) {\n\t\tif ( isEqual( value, this.value ) ) return;\n\n\t\tlet parent = this.parent;\n\t\tconst keys = [ this.key ];\n\t\twhile ( parent ) {\n\t\t\tif ( parent.base ) {\n\t\t\t\tconst target = parent.model.joinAll( keys );\n\t\t\t\ttarget.applyValue( value );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tkeys.unshift( parent.key );\n\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tget ( shouldCapture, opts ) {\n\t\tthis.retrieve();\n\t\treturn super.get( shouldCapture, opts );\n\t}\n\n\tjoinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) return this;\n\n\t\tif ( !hasOwn( this.childByKey, key ) ) {\n\t\t\tconst child = new ReferenceExpressionChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t}\n\n\tmark () {\n\t\tthis.dirty = true;\n\t\tsuper.mark();\n\t}\n\n\tretrieve () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tconst parent = this.parent.get();\n\t\t\tthis.value = parent && parent[ this.key ];\n\t\t}\n\n\t\treturn this.value;\n\t}\n}\n\nconst missing = { get() {} };\n\nexport default class ReferenceExpressionProxy extends Model {\n\tconstructor ( fragment, template ) {\n\t\tsuper( null, null );\n\t\tthis.dirty = true;\n\t\tthis.root = fragment.ractive.viewmodel;\n\t\tthis.template = template;\n\n\t\tthis.base = resolve( fragment, template );\n\n\t\tconst intermediary = this.intermediary = {\n\t\t\thandleChange: () => this.handleChange(),\n\t\t\trebind: ( next, previous ) => {\n\t\t\t\tif ( previous === this.base ) {\n\t\t\t\t\tnext = rebindMatch( template, next, previous );\n\t\t\t\t\tif ( next !== this.base ) {\n\t\t\t\t\t\tthis.base.unregister( intermediary );\n\t\t\t\t\t\tthis.base = next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst idx = this.members.indexOf( previous );\n\t\t\t\t\tif ( ~idx ) {\n\t\t\t\t\t\t// only direct references will rebind... expressions handle themselves\n\t\t\t\t\t\tnext = rebindMatch( template.m[idx].n, next, previous );\n\t\t\t\t\t\tif ( next !== this.members[idx] ) {\n\t\t\t\t\t\t\tthis.members.splice( idx, 1, next || missing );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( next !== previous ) previous.unregister( intermediary );\n\t\t\t\tif ( next ) next.addShuffleTask( () => next.register( intermediary ) );\n\n\t\t\t\tthis.bubble();\n\t\t\t}\n\t\t};\n\n\t\tthis.members = template.m.map( ( template ) => {\n\t\t\tif ( isString( template ) ) {\n\t\t\t\treturn { get: () => template };\n\t\t\t}\n\n\t\t\tlet model;\n\n\t\t\tif ( template.t === REFERENCE ) {\n\t\t\t\tmodel = resolveReference( fragment, template.n );\n\t\t\t\tmodel.register( intermediary );\n\n\t\t\t\treturn model;\n\t\t\t}\n\n\t\t\tmodel = new ExpressionProxy( fragment, template );\n\t\t\tmodel.register( intermediary );\n\t\t\treturn model;\n\t\t});\n\n\t\tthis.base.register( intermediary );\n\n\t\tthis.bubble();\n\t}\n\n\tbubble () {\n\t\tif ( !this.base ) return;\n\t\tif ( !this.dirty ) this.handleChange();\n\t}\n\n\tget ( shouldCapture ) {\n\t\tif ( this.dirty ) {\n\t\t\tthis.bubble();\n\n\t\t\tconst keys = this.members.map( m => escapeKey( String( m.get() ) ) );\n\t\t\tconst model = this.base.joinAll( keys );\n\n\t\t\tif ( model !== this.model ) {\n\t\t\t\tif ( this.model ) {\n\t\t\t\t\tthis.model.unregister( this );\n\t\t\t\t\tthis.model.unregisterTwowayBinding( this );\n\t\t\t\t}\n\n\t\t\t\tthis.model = model;\n\t\t\t\tthis.parent = model.parent;\n\t\t\t\tthis.model.register( this );\n\t\t\t\tthis.model.registerTwowayBinding( this );\n\n\t\t\t\tif ( this.keypathModel ) this.keypathModel.handleChange();\n\t\t\t}\n\n\t\t\tthis.value = this.model.get( shouldCapture );\n\t\t\tthis.dirty = false;\n\t\t\tthis.mark();\n\t\t\treturn this.value;\n\t\t} else {\n\t\t\treturn this.model ? this.model.get( shouldCapture ) : undefined;\n\t\t}\n\t}\n\n\t// indirect two-way bindings\n\tgetValue () {\n\t\tthis.value = this.model ? this.model.get() : undefined;\n\n\t\tlet i = this.bindings.length;\n\t\twhile ( i-- ) {\n\t\t\tconst value = this.bindings[i].getValue();\n\t\t\tif ( value !== this.value ) return value;\n\t\t}\n\n\t\t// check one-way bindings\n\t\tconst oneway = findBoundValue( this.deps );\n\t\tif ( oneway ) return oneway.value;\n\n\t\treturn this.value;\n\t}\n\n\tgetKeypath () {\n\t\treturn this.model ? this.model.getKeypath() : '@undefined';\n\t}\n\n\thandleChange () {\n\t\tthis.dirty = true;\n\t\tthis.mark();\n\t}\n\n\tjoinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) return this;\n\n\t\tif ( !hasOwn( this.childByKey, key ) ) {\n\t\t\tconst child = new ReferenceExpressionChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t}\n\n\tmark () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.deps.forEach( handleChange );\n\t\t}\n\n\t\tthis.links.forEach( marked );\n\t\tthis.children.forEach( mark );\n\t}\n\n\trebind () { this.handleChange(); }\n\n\tretrieve () {\n\t\treturn this.value;\n\t}\n\n\tset ( value ) {\n\t\tthis.model.set( value );\n\t}\n\n\tteardown () {\n\t\tif ( this.base ) {\n\t\t\tthis.base.unregister( this.intermediary );\n\t\t}\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t\tthis.model.unregisterTwowayBinding( this );\n\t\t}\n\t\tif ( this.members ) {\n\t\t\tthis.members.forEach( m => m && m.unregister && m.unregister( this.intermediary ) );\n\t\t}\n\t}\n\n\tunreference () {\n\t\tsuper.unreference();\n\t\tif ( !this.deps.length && !this.refs ) this.teardown();\n\t}\n\n\tunregister( dep ) {\n\t\tsuper.unregister( dep );\n\t\tif ( !this.deps.length && !this.refs ) this.teardown();\n\t}\n}\n"",""import { removeFromArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport { warnIfDebug } from 'utils/log';\nimport Model from 'src/model/Model';\nimport Computation from 'src/model/Computation';\nimport { startCapturing, stopCapturing } from 'src/global/capture';\nimport getFunction from 'shared/getFunction';\nimport { rebindMatch } from 'shared/rebind';\nimport resolveReference from './resolveReference';\n\nexport default class ExpressionProxy extends Model {\n\tconstructor ( fragment, template ) {\n\t\tsuper( fragment.ractive.viewmodel, null );\n\n\t\tthis.fragment = fragment;\n\t\tthis.template = template;\n\n\t\tthis.isReadonly = true;\n\t\tthis.dirty = true;\n\n\t\tthis.fn = fragment.ractive.allowExpressions === false ?\n\t\t\tnoop :\n\t\t\tgetFunction( template.s, template.r.length );\n\n\t\tthis.models = this.template.r.map( ref => {\n\t\t\treturn resolveReference( this.fragment, ref );\n\t\t});\n\t\tthis.dependencies = [];\n\n\t\tthis.shuffle = undefined;\n\n\t\tthis.bubble();\n\t}\n\n\tbubble ( actuallyChanged = true ) {\n\t\t// refresh the keypath\n\t\tthis.keypath = undefined;\n\n\t\tif ( actuallyChanged ) {\n\t\t\tthis.handleChange();\n\t\t}\n\t}\n\n\tgetKeypath () {\n\t\tif ( !this.template ) return '@undefined';\n\t\tif ( !this.keypath ) {\n\t\t\tthis.keypath = '@' + this.template.s.replace( /_(\\d+)/g, ( match, i ) => {\n\t\t\t\tif ( i >= this.models.length ) return match;\n\n\t\t\t\tconst model = this.models[i];\n\t\t\t\treturn model ? model.getKeypath() : '@undefined';\n\t\t\t});\n\t\t}\n\n\t\treturn this.keypath;\n\t}\n\n\tgetValue () {\n\t\tstartCapturing();\n\t\tlet result;\n\n\t\ttry {\n\t\t\tconst params = this.models.map( m => m ? m.get( true ) : undefined );\n\t\t\tresult = this.fn.apply( this.fragment.ractive, params );\n\t\t} catch ( err ) {\n\t\t\twarnIfDebug( `Failed to compute ${this.getKeypath()}: ${err.message || err}` );\n\t\t}\n\n\t\tconst dependencies = stopCapturing();\n\t\t// remove missing deps\n\t\tthis.dependencies.filter( d => !~dependencies.indexOf( d ) ).forEach( d => {\n\t\t\td.unregister( this );\n\t\t\tremoveFromArray( this.dependencies, d );\n\t\t});\n\t\t// register new deps\n\t\tdependencies.filter( d => !~this.dependencies.indexOf( d ) ).forEach( d => {\n\t\t\td.register( this );\n\t\t\tthis.dependencies.push( d );\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tnotifyUpstream () {}\n\n\trebind ( next, previous, safe ) {\n\t\tconst idx = this.models.indexOf( previous );\n\n\t\tif ( ~idx ) {\n\t\t\tnext = rebindMatch( this.template.r[idx], next, previous );\n\t\t\tif ( next !== previous ) {\n\t\t\t\tprevious.unregister( this );\n\t\t\t\tthis.models.splice( idx, 1, next );\n\t\t\t\tif ( next ) next.addShuffleRegister( this, 'mark' );\n\t\t\t}\n\t\t}\n\t\tthis.bubble( !safe );\n\t}\n\n\tretrieve () {\n\t\treturn this.get();\n\t}\n\n\tteardown () {\n\t\tthis.fragment = undefined;\n\t\tif ( this.dependencies ) this.dependencies.forEach( d => d.unregister( this ) );\n\t\tsuper.teardown();\n\t}\n\n\tunreference () {\n\t\tsuper.unreference();\n\t\tif ( !this.deps.length && !this.refs ) this.teardown();\n\t}\n\n\tunregister( dep ) {\n\t\tsuper.unregister( dep );\n\t\tif ( !this.deps.length && !this.refs ) this.teardown();\n\t}\n}\n\nconst prototype = ExpressionProxy.prototype;\nconst computation = Computation.prototype;\nprototype.get = computation.get;\nprototype.handleChange = computation.handleChange;\nprototype.joinKey = computation.joinKey;\nprototype.mark = computation.mark;\nprototype.unbind = noop;\n"",""/* global console */\n/* eslint no-console:\""off\"" */\n\nimport { capture, startCapturing, stopCapturing } from 'src/global/capture';\nimport { warnIfDebug } from 'utils/log';\nimport Model from './Model';\nimport { maybeBind } from './ModelBase';\nimport ComputationChild from './ComputationChild';\nimport { hasConsole } from 'config/environment';\nimport { isEqual } from 'utils/is';\n\nexport default class Computation extends Model {\n\tconstructor ( viewmodel, signature, key ) {\n\t\tsuper( null, null );\n\n\t\tthis.root = this.parent = viewmodel;\n\t\tthis.signature = signature;\n\n\t\tthis.key = key; // not actually used, but helps with debugging\n\t\tthis.isExpression = key && key[0] === '@';\n\n\t\tthis.isReadonly = !this.signature.setter;\n\n\t\tthis.context = viewmodel.computationContext;\n\n\t\tthis.dependencies = [];\n\n\t\tthis.children = [];\n\t\tthis.childByKey = {};\n\n\t\tthis.deps = [];\n\n\t\tthis.dirty = true;\n\n\t\t// TODO: is there a less hackish way to do this?\n\t\tthis.shuffle = undefined;\n\t}\n\n\tget setRoot () {\n\t\tif ( this.signature.setter ) return this;\n\t}\n\n\tget ( shouldCapture, opts ) {\n\t\tif ( shouldCapture ) capture( this );\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tconst old = this.value;\n\t\t\tthis.value = this.getValue();\n\t\t\tif ( !isEqual( old, this.value ) ) this.notifyUpstream();\n\t\t\tif ( this.wrapper ) this.newWrapperValue = this.value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\t// if capturing, this value needs to be unwrapped because it's for external use\n\t\treturn maybeBind(\n\t\t\tthis,\n\t\t\t// if unwrap is supplied, it overrides capture\n\t\t\tthis.wrapper && ( ( opts && 'unwrap' in opts ) ? opts.unwrap !== false : shouldCapture ) ? this.wrapperValue : this.value,\n\t\t\t!opts || opts.shouldBind !== false\n\t\t);\n\t}\n\n\tgetValue () {\n\t\tstartCapturing();\n\t\tlet result;\n\n\t\ttry {\n\t\t\tresult = this.signature.getter.call( this.context );\n\t\t} catch ( err ) {\n\t\t\twarnIfDebug( `Failed to compute ${this.getKeypath()}: ${err.message || err}` );\n\n\t\t\t// TODO this is all well and good in Chrome, but...\n\t\t\t// ...also, should encapsulate this stuff better, and only\n\t\t\t// show it if Ractive.DEBUG\n\t\t\tif ( hasConsole ) {\n\t\t\t\tif ( console.groupCollapsed ) console.groupCollapsed( '%cshow details', 'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;' );\n\t\t\t\tconst sig = this.signature;\n\t\t\t\tconsole.error( `${err.name}: ${err.message}\\n\\n${sig.getterString}${sig.getterUseStack ? '\\n\\n' + err.stack : ''}` );\n\t\t\t\tif ( console.groupCollapsed ) console.groupEnd();\n\t\t\t}\n\t\t}\n\n\t\tconst dependencies = stopCapturing();\n\t\tthis.setDependencies( dependencies );\n\n\t\treturn result;\n\t}\n\n\tmark () {\n\t\tthis.handleChange();\n\t}\n\n\trebind ( next, previous ) {\n\t\t// computations will grab all of their deps again automagically\n\t\tif ( next !== previous ) this.handleChange();\n\t}\n\n\tset ( value ) {\n\t\tif ( this.isReadonly ) {\n\t\t\tthrow new Error( `Cannot set read-only computed value '${this.key}'` );\n\t\t}\n\n\t\tthis.signature.setter( value );\n\t\tthis.mark();\n\t}\n\n\tsetDependencies ( dependencies ) {\n\t\t// unregister any soft dependencies we no longer have\n\t\tlet i = this.dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tconst model = this.dependencies[i];\n\t\t\tif ( !~dependencies.indexOf( model ) ) model.unregister( this );\n\t\t}\n\n\t\t// and add any new ones\n\t\ti = dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tconst model = dependencies[i];\n\t\t\tif ( !~this.dependencies.indexOf( model ) ) model.register( this );\n\t\t}\n\n\t\tthis.dependencies = dependencies;\n\t}\n\n\tteardown () {\n\t\tlet i = this.dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this.dependencies[i] ) this.dependencies[i].unregister( this );\n\t\t}\n\t\tif ( this.root.computations[this.key] === this ) delete this.root.computations[this.key];\n\t\tsuper.teardown();\n\t}\n}\n\nconst prototype = Computation.prototype;\nconst child = ComputationChild.prototype;\nprototype.handleChange = child.handleChange;\nprototype.joinKey = child.joinKey;\n"",""import { capture } from 'src/global/capture';\nimport Model from './Model';\nimport { handleChange, mark, marked } from 'shared/methodCallers';\nimport { hasOwn } from 'utils/object';\n\nexport default class ComputationChild extends Model {\n\tconstructor ( parent, key ) {\n\t\tsuper( parent, key );\n\n\t\tthis.isReadonly = !this.root.ractive.syncComputedChildren;\n\t\tthis.dirty = true;\n\t}\n\n\tget setRoot () { return this.parent.setRoot; }\n\n\tapplyValue ( value ) {\n\t\tsuper.applyValue( value );\n\n\t\tif ( !this.isReadonly ) {\n\t\t\tlet source = this.parent;\n\t\t\t// computed models don't have a shuffle method\n\t\t\twhile ( source && source.shuffle ) {\n\t\t\t\tsource = source.parent;\n\t\t\t}\n\n\t\t\tif ( source ) {\n\t\t\t\tsource.dependencies.forEach( mark );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.setRoot ) {\n\t\t\tthis.setRoot.set( this.setRoot.value );\n\t\t}\n\t}\n\n\tget ( shouldCapture, opts ) {\n\t\tif ( shouldCapture ) capture( this );\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tconst parentValue = this.parent.get();\n\t\t\tthis.value = parentValue ? parentValue[ this.key ] : undefined;\n\t\t\tif ( this.wrapper ) this.newWrapperValue = this.value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\treturn ( ( opts && 'unwrap' in opts ) ? opts.unwrap !== false : shouldCapture ) && this.wrapper ? this.wrapperValue : this.value;\n\t}\n\n\thandleChange () {\n\t\tthis.dirty = true;\n\n\t\tif ( this.boundValue ) this.boundValue = null;\n\n\t\tthis.links.forEach( marked );\n\t\tthis.deps.forEach( handleChange );\n\t\tthis.children.forEach( handleChange );\n\t}\n\n\tjoinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) return this;\n\n\t\tif ( !hasOwn( this.childByKey, key ) ) {\n\t\t\tconst child = new ComputationChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t}\n}\n"",""import { createDocumentFragment } from 'utils/dom';\nimport noop from 'utils/noop';\n\nexport default class Item {\n\tconstructor ( options ) {\n\t\tthis.up = options.up;\n\t\tthis.ractive = options.up.ractive;\n\n\t\tthis.template = options.template;\n\t\tthis.index = options.index;\n\t\tthis.type = options.template.t;\n\n\t\tthis.dirty = false;\n\t}\n\n\tbubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.up.bubble();\n\t\t}\n\t}\n\n\tdestroyed () {\n\t\tif ( this.fragment ) this.fragment.destroyed();\n\t}\n\n\tfind () {\n\t\treturn null;\n\t}\n\n\tfindComponent () {\n\t\treturn null;\n\t}\n\n\tfindNextNode () {\n\t\treturn this.up.findNextNode( this );\n\t}\n\n\tshuffled () {\n\t\tif ( this.fragment ) this.fragment.shuffled();\n\t}\n\n\tvalueOf () {\n\t\treturn this.toString();\n\t}\n}\n\nItem.prototype.findAll = noop;\nItem.prototype.findAllComponents = noop;\n\nexport class ContainerItem extends Item {\n\tconstructor ( options ) {\n\t\tsuper( options );\n\t}\n\n\tdetach () {\n\t\treturn this.fragment ? this.fragment.detach() : createDocumentFragment();\n\t}\n\n\tfind ( selector ) {\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.find( selector );\n\t\t}\n\t}\n\n\tfindAll ( selector, options ) {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAll( selector, options );\n\t\t}\n\t}\n\n\tfindComponent ( name ) {\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.findComponent( name );\n\t\t}\n\t}\n\n\tfindAllComponents ( name, options ) {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAllComponents( name, options );\n\t\t}\n\t}\n\n\tfirstNode ( skipParent ) {\n\t\treturn this.fragment && this.fragment.firstNode( skipParent );\n\t}\n\n\ttoString ( escape ) {\n\t\treturn this.fragment ? this.fragment.toString( escape ) : '';\n\t}\n}\n"",""import { warnIfDebug } from 'utils/log';\nimport adaptConfigurator from './custom/adapt';\nimport cssConfigurator from './custom/css/css';\nimport dataConfigurator from './custom/data';\nimport templateConfigurator from './custom/template';\nimport defaults from './defaults';\nimport registries from './registries';\nimport wrapPrototype from './wrapPrototypeMethod';\nimport deprecate from './deprecate';\nimport RactiveProto from '../prototype';\nimport { hasOwn, keys } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nconst custom = {\n\tadapt: adaptConfigurator,\n\tcss: cssConfigurator,\n\tdata: dataConfigurator,\n\ttemplate: templateConfigurator\n};\n\nconst defaultKeys = keys( defaults );\n\nconst isStandardKey = makeObj( defaultKeys.filter( key => !custom[ key ] ) );\n\n// blacklisted keys that we don't double extend\nconst isBlacklisted = makeObj( defaultKeys.concat( registries.map( r => r.name ), [ 'on', 'observe', 'attributes', 'cssData' ] ) );\n\nconst order = [].concat(\n\tdefaultKeys.filter( key => !registries[ key ] && !custom[ key ] ),\n\tregistries,\n\t//custom.data,\n\tcustom.template,\n\tcustom.css\n);\n\nconst config = {\n\textend: ( Parent, proto, options, Child ) => configure( 'extend', Parent, proto, options, Child ),\n\tinit: ( Parent, ractive, options ) => configure( 'init', Parent, ractive, options ),\n\treset: ractive => order.filter( c => c.reset && c.reset( ractive ) ).map( c => c.name )\n};\n\nfunction configure ( method, Parent, target, options, Child ) {\n\tdeprecate( options );\n\n\tfor ( const key in options ) {\n\t\tif ( hasOwn( isStandardKey, key ) ) {\n\t\t\tconst value = options[ key ];\n\n\t\t\t// warn the developer if they passed a function and ignore its value\n\n\t\t\t// NOTE: we allow some functions on \""el\"" because we duck type element lists\n\t\t\t// and some libraries or ef'ed-up virtual browsers (phantomJS) return a\n\t\t\t// function object as the result of querySelector methods\n\t\t\tif ( key !== 'el' && isFunction( value ) ) {\n\t\t\t\twarnIfDebug( `${ key } is a Ractive option that does not expect a function and will be ignored`,\n\t\t\t\t\tmethod === 'init' ? target : null );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttarget[ key ] = value;\n\t\t\t}\n\t\t}\n\t}\n\n\t// disallow combination of `append` and `enhance`\n\tif ( options.append && options.enhance ) {\n\t\tthrow new Error( 'Cannot use append and enhance at the same time' );\n\t}\n\n\tregistries.forEach( registry => {\n\t\tregistry[ method ]( Parent, target, options, Child );\n\t});\n\n\tadaptConfigurator[ method ]( Parent, target, options, Child );\n\ttemplateConfigurator[ method ]( Parent, target, options, Child );\n\tcssConfigurator[ method ]( Parent, target, options, Child );\n\n\textendOtherMethods( Parent.prototype, target, options );\n}\n\nconst _super = /\\b_super\\b/;\nfunction extendOtherMethods ( parent, target, options ) {\n\tfor ( const key in options ) {\n\t\tif ( !isBlacklisted[ key ] && hasOwn( options, key ) ) {\n\t\t\tlet member = options[ key ];\n\n\t\t\t// if this is a method that overwrites a method, wrap it:\n\t\t\tif ( isFunction( member ) ) {\n\t\t\t\tif ( key in RactiveProto && !_super.test( member.toString() ) ) {\n\t\t\t\t\twarnIfDebug( `Overriding Ractive prototype function '${key}' without calling the '${_super}' method can be very dangerous.` );\n\t\t\t\t}\n\t\t\t\tmember = wrapPrototype( parent, key, member );\n\t\t\t}\n\n\t\t\ttarget[ key ] = member;\n\t\t}\n\t}\n}\n\nfunction makeObj ( array ) {\n\tconst obj = {};\n\tarray.forEach( x => obj[x] = true );\n\treturn obj;\n}\n\nexport default config;\n"",""import { warnIfDebug } from 'utils/log';\nimport { isArray } from 'utils/is';\n\nfunction getMessage( deprecated, correct, isError ) {\n\treturn `options.${deprecated} has been deprecated in favour of options.${correct}.`\n\t\t+ ( isError ? ` You cannot specify both options, please use options.${correct}.` : '' );\n}\n\nfunction deprecateOption ( options, deprecatedOption, correct ) {\n\tif ( deprecatedOption in options ) {\n\t\tif( !( correct in options ) ) {\n\t\t\twarnIfDebug( getMessage( deprecatedOption, correct ) );\n\t\t\toptions[ correct ] = options[ deprecatedOption ];\n\t\t} else {\n\t\t\tthrow new Error( getMessage( deprecatedOption, correct, true ) );\n\t\t}\n\t}\n}\n\nexport default function deprecate ( options ) {\n\tdeprecateOption( options, 'beforeInit', 'onconstruct' );\n\tdeprecateOption( options, 'init', 'onrender' );\n\tdeprecateOption( options, 'complete', 'oncomplete' );\n\tdeprecateOption( options, 'eventDefinitions', 'events' );\n\n\t// Using extend with Component instead of options,\n\t// like Human.extend( Spider ) means adaptors as a registry\n\t// gets copied to options. So we have to check if actually an array\n\tif ( isArray( options.adaptors ) ) {\n\t\tdeprecateOption( options, 'adaptors', 'adapt' );\n\t}\n}\n"",""import noop from 'utils/noop';\nimport { isFunction } from 'utils/is';\n\nexport default function wrap ( parent, name, method ) {\n\tif ( !/_super/.test( method ) ) return method;\n\n\tfunction wrapper () {\n\t\tconst superMethod = getSuperMethod( wrapper._parent, name );\n\t\tconst hasSuper = '_super' in this;\n\t\tconst oldSuper = this._super;\n\n\t\tthis._super = superMethod;\n\n\t\tconst result = method.apply( this, arguments );\n\n\t\tif ( hasSuper ) {\n\t\t\tthis._super = oldSuper;\n\t\t} else {\n\t\t\tdelete this._super;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\twrapper._parent = parent;\n\twrapper._method = method;\n\n\treturn wrapper;\n}\n\nfunction getSuperMethod ( parent, name ) {\n\tif ( name in parent ) {\n\t\tconst value = parent[ name ];\n\n\t\treturn isFunction( value ) ?\n\t\t\tvalue :\n\t\t\t() => value;\n\t}\n\n\treturn noop;\n}\n"",""import { create, keys } from 'utils/object';\n\nconst registryNames = [\n\t'adaptors',\n\t'components',\n\t'computed',\n\t'decorators',\n\t'easing',\n\t'events',\n\t'interpolators',\n\t'partials',\n\t'transitions'\n];\n\nconst registriesOnDefaults = [\n\t'computed'\n];\n\nclass Registry {\n\tconstructor ( name, useDefaults ) {\n\t\tthis.name = name;\n\t\tthis.useDefaults = useDefaults;\n\t}\n\n\textend ( Parent, proto, options ) {\n\t\tconst parent = this.useDefaults ? Parent.defaults : Parent;\n\t\tconst target = this.useDefaults ? proto : proto.constructor;\n\t\tthis.configure( parent, target, options );\n\t}\n\n\tinit () {\n\t\t// noop\n\t}\n\n\tconfigure ( Parent, target, options ) {\n\t\tconst name = this.name;\n\t\tconst option = options[ name ];\n\n\t\tconst registry = create( Parent[name] );\n\n\t\tfor ( const key in option ) {\n\t\t\tregistry[ key ] = option[ key ];\n\t\t}\n\n\t\ttarget[ name ] = registry;\n\t}\n\n\treset ( ractive ) {\n\t\tconst registry = ractive[ this.name ];\n\t\tlet changed = false;\n\n\t\tkeys( registry ).forEach( key => {\n\t\t\tconst item = registry[ key ];\n\n\t\t\tif ( item._fn ) {\n\t\t\t\tif ( item._fn.isOwner ) {\n\t\t\t\t\tregistry[key] = item._fn;\n\t\t\t\t} else {\n\t\t\t\t\tdelete registry[key];\n\t\t\t\t}\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\n\t\treturn changed;\n\t}\n}\n\nconst registries = registryNames.map( name => {\n\tconst putInDefaults = registriesOnDefaults.indexOf(name) > -1;\n\treturn new Registry( name, putInDefaults );\n});\n\nexport default registries;\n"",""import { TEMPLATE_VERSION } from 'config/template';\nimport { addFunctions } from 'shared/getFunction';\nimport parser from '../runtime-parser';\nimport { hasOwn } from 'utils/object';\nimport { isFunction, isNumber, isString } from 'utils/is';\n\nexport default {\n\tname: 'template',\n\n\textend ( Parent, proto, options ) {\n\t\t// only assign if exists\n\t\tif ( 'template' in options ) {\n\t\t\tconst template = options.template;\n\n\t\t\tif ( isFunction ( template ) ) {\n\t\t\t\tproto.template = template;\n\t\t\t} else {\n\t\t\t\tproto.template = parseTemplate( template, proto );\n\t\t\t}\n\t\t}\n\t},\n\n\tinit ( Parent, ractive, options ) {\n\t\t// TODO because of prototypal inheritance, we might just be able to use\n\t\t// ractive.template, and not bother passing through the Parent object.\n\t\t// At present that breaks the test mocks' expectations\n\t\tlet template = 'template' in options ? options.template : Parent.prototype.template;\n\t\ttemplate = template || { v: TEMPLATE_VERSION, t: [] };\n\n\t\tif ( isFunction ( template ) ) {\n\t\t\tconst fn = template;\n\t\t\ttemplate = getDynamicTemplate( ractive, fn );\n\n\t\t\tractive._config.template = {\n\t\t\t\tfn,\n\t\t\t\tresult: template\n\t\t\t};\n\t\t}\n\n\t\ttemplate = parseTemplate( template, ractive );\n\n\t\t// TODO the naming of this is confusing - ractive.template refers to [...],\n\t\t// but Component.prototype.template refers to {v:1,t:[],p:[]}...\n\t\t// it's unnecessary, because the developer never needs to access\n\t\t// ractive.template\n\t\tractive.template = template.t;\n\n\t\tif ( template.p ) {\n\t\t\textendPartials( ractive.partials, template.p );\n\t\t}\n\t},\n\n\treset ( ractive ) {\n\t\tconst result = resetValue( ractive );\n\n\t\tif ( result ) {\n\t\t\tconst parsed = parseTemplate( result, ractive );\n\n\t\t\tractive.template = parsed.t;\n\t\t\textendPartials( ractive.partials, parsed.p, true );\n\n\t\t\treturn true;\n\t\t}\n\t}\n};\n\nfunction resetValue ( ractive ) {\n\tconst initial = ractive._config.template;\n\n\t// If this isn't a dynamic template, there's nothing to do\n\tif ( !initial || !initial.fn ) {\n\t\treturn;\n\t}\n\n\tconst result = getDynamicTemplate( ractive, initial.fn );\n\n\t// TODO deep equality check to prevent unnecessary re-rendering\n\t// in the case of already-parsed templates\n\tif ( result !== initial.result ) {\n\t\tinitial.result = result;\n\t\treturn result;\n\t}\n}\n\nfunction getDynamicTemplate ( ractive, fn ) {\n\treturn fn.call( ractive, {\n\t\tfromId: parser.fromId,\n\t\tisParsed: parser.isParsed,\n\t\tparse ( template, options = parser.getParseOptions( ractive ) ) {\n\t\t\treturn parser.parse( template, options );\n\t\t}\n\t});\n}\n\nfunction parseTemplate ( template, ractive ) {\n\tif ( isString ( template ) ) {\n\t\t// parse will validate and add expression functions\n\t\ttemplate = parseAsString( template, ractive );\n\t}\n\telse {\n\t\t// need to validate and add exp for already parsed template\n\t\tvalidate( template );\n\t\taddFunctions( template );\n\t}\n\n\treturn template;\n}\n\nfunction parseAsString ( template, ractive ) {\n\t// ID of an element containing the template?\n\tif ( template[0] === '#' ) {\n\t\ttemplate = parser.fromId( template );\n\t}\n\n\treturn parser.parseFor( template, ractive );\n}\n\nfunction validate( template ) {\n\n\t// Check that the template even exists\n\tif ( template == undefined ) {\n\t\tthrow new Error( `The template cannot be ${template}.` );\n\t}\n\n\t// Check the parsed template has a version at all\n\telse if ( !isNumber( template.v ) ) {\n\t\tthrow new Error( 'The template parser was passed a non-string template, but the template doesn\\'t have a version.  Make sure you\\'re passing in the template you think you are.' );\n\t}\n\n\t// Check we're using the correct version\n\telse if ( template.v !== TEMPLATE_VERSION ) {\n\t\tthrow new Error( `Mismatched template version (expected ${TEMPLATE_VERSION}, got ${template.v}) Please ensure you are using the latest version of Ractive.js in your build process as well as in your app` );\n\t}\n}\n\nfunction extendPartials ( existingPartials, newPartials, overwrite ) {\n\tif ( !newPartials ) return;\n\n\t// TODO there's an ambiguity here - we need to overwrite in the `reset()`\n\t// case, but not initially...\n\n\tfor ( const key in newPartials ) {\n\t\tif ( overwrite || !hasOwn( existingPartials, key ) ) {\n\t\t\texistingPartials[ key ] = newPartials[ key ];\n\t\t}\n\t}\n}\n"",""import { createFunction } from '../Ractive/config/runtime-parser';\nimport { create, keys } from 'utils/object';\n\nconst functions = create( null );\n\nexport default function getFunction ( str, i ) {\n\tif ( functions[ str ] ) return functions[ str ];\n\treturn functions[ str ] = createFunction( str, i );\n}\n\nexport function addFunctions( template ) {\n\tif ( !template ) return;\n\n\tconst exp = template.e;\n\n\tif ( !exp ) return;\n\n\tkeys( exp ).forEach( ( str ) => {\n\t\tif ( functions[ str ] ) return;\n\t\tfunctions[ str ] = exp[ str ];\n\t});\n}\n\n\n"",""import { fromExpression, fromComputationString } from 'parse/utils/createFunction';\nimport { doc } from 'config/environment';\nimport { fatal } from 'utils/log';\nimport { addFunctions } from 'shared/getFunction';\nimport parse from 'parse/_parse';\nimport { isString } from 'utils/is';\n\nconst parseOptions = [\n\t'delimiters',\n\t'tripleDelimiters',\n\t'staticDelimiters',\n\t'staticTripleDelimiters',\n\t'csp',\n\t'interpolate',\n\t'preserveWhitespace',\n\t'sanitize',\n\t'stripComments',\n\t'contextLines',\n\t'allowExpressions',\n\t'attributes'\n];\n\nconst TEMPLATE_INSTRUCTIONS = `Either preparse or use a ractive runtime source that includes the parser. `;\n\nconst COMPUTATION_INSTRUCTIONS = `Either include a version of Ractive that can parse or convert your computation strings to functions.`;\n\n\nfunction throwNoParse ( method, error, instructions ) {\n\tif ( !method ) {\n\t\tfatal( `Missing Ractive.parse - cannot parse ${error}. ${instructions}` );\n\t}\n}\n\nexport function createFunction ( body, length ) {\n\tthrowNoParse( fromExpression, 'new expression function', TEMPLATE_INSTRUCTIONS );\n\treturn fromExpression( body, length );\n}\n\nexport function createFunctionFromString ( str, bindTo ) {\n\tthrowNoParse( fromComputationString, 'compution string \""${str}\""', COMPUTATION_INSTRUCTIONS );\n\treturn fromComputationString( str, bindTo );\n}\n\nconst parser = {\n\n\tfromId ( id, options ) {\n\t\tif ( !doc ) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( `Cannot retrieve template #${id} as Ractive is not running in a browser.` );\n\t\t}\n\n\t\tif ( id ) id = id.replace( /^#/, '' );\n\n\t\tlet template;\n\n\t\tif ( !( template = doc.getElementById( id ) )) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( `Could not find template element with id #${id}` );\n\t\t}\n\n\t\tif ( template.tagName.toUpperCase() !== 'SCRIPT' ) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( `Template element with id #${id}, must be a <script> element` );\n\t\t}\n\n\t\treturn ( 'textContent' in template ? template.textContent : template.innerHTML );\n\n\t},\n\n\tisParsed ( template) {\n\t\treturn !isString( template );\n\t},\n\n\tgetParseOptions ( ractive ) {\n\t\t// Could be Ractive or a Component\n\t\tif ( ractive.defaults ) { ractive = ractive.defaults; }\n\n\t\treturn parseOptions.reduce( ( val, key ) => {\n\t\t\tval[ key ] = ractive[ key ];\n\t\t\treturn val;\n\t\t}, {});\n\t},\n\n\tparse ( template, options ) {\n\t\tthrowNoParse( parse, 'template', TEMPLATE_INSTRUCTIONS );\n\t\tconst parsed = parse( template, options );\n\t\taddFunctions( parsed );\n\t\treturn parsed;\n\t},\n\n\tparseFor( template, ractive ) {\n\t\treturn this.parse( template, this.getParseOptions( ractive ) );\n\t}\n};\n\nexport default parser;\n"",""import { TEMPLATE_VERSION } from 'config/template';\nimport Parser from './Parser';\nimport readMustache from './converters/readMustache';\nimport readTriple from './converters/mustache/readTriple';\nimport readUnescaped from './converters/mustache/readUnescaped';\nimport readPartial from './converters/mustache/readPartial';\nimport readMustacheComment from './converters/mustache/readMustacheComment';\nimport readInterpolator from './converters/mustache/readInterpolator';\nimport readSection from './converters/mustache/readSection';\nimport readHtmlComment from './converters/readHtmlComment';\nimport readElement from './converters/readElement';\nimport readText from './converters/readText';\nimport readPartialDefinitionSection from './converters/readPartialDefinitionSection';\nimport readTemplate from './converters/readTemplate';\nimport cleanup from './utils/cleanup';\nimport insertExpressions from './utils/insertExpressions';\nimport shared from '../Ractive/shared';\nimport { create, keys } from 'utils/object';\n\n// See https://github.com/ractivejs/template-spec for information\n// about the Ractive template specification\n\nconst STANDARD_READERS = [ readPartial, readUnescaped, readSection, readInterpolator, readMustacheComment ];\nconst TRIPLE_READERS = [ readTriple ];\n\nexport const READERS = [ readMustache, readHtmlComment, readElement, readText ];\nexport const PARTIAL_READERS = [ readPartialDefinitionSection ];\n\nconst defaultInterpolate = [ 'script', 'style', 'template' ];\n\nconst StandardParser = Parser.extend({\n\tinit ( str, options ) {\n\t\tconst tripleDelimiters = options.tripleDelimiters || shared.defaults.tripleDelimiters;\n\t\tconst staticDelimiters = options.staticDelimiters || shared.defaults.staticDelimiters;\n\t\tconst staticTripleDelimiters = options.staticTripleDelimiters || shared.defaults.staticTripleDelimiters;\n\n\t\tthis.standardDelimiters = options.delimiters || shared.defaults.delimiters;\n\n\t\tthis.tags = [\n\t\t\t{ isStatic: false, isTriple: false, open: this.standardDelimiters[0], close: this.standardDelimiters[1], readers: STANDARD_READERS },\n\t\t\t{ isStatic: false, isTriple: true,  open: tripleDelimiters[0],        close: tripleDelimiters[1],        readers: TRIPLE_READERS },\n\t\t\t{ isStatic: true,  isTriple: false, open: staticDelimiters[0],        close: staticDelimiters[1],        readers: STANDARD_READERS },\n\t\t\t{ isStatic: true,  isTriple: true,  open: staticTripleDelimiters[0],  close: staticTripleDelimiters[1],  readers: TRIPLE_READERS }\n\t\t];\n\n\t\tthis.contextLines = options.contextLines || shared.defaults.contextLines;\n\n\t\tthis.sortMustacheTags();\n\n\t\tthis.sectionDepth = 0;\n\t\tthis.elementStack = [];\n\n\t\tthis.interpolate = create( options.interpolate || shared.defaults.interpolate || {} );\n\t\tthis.interpolate.textarea = true;\n\t\tdefaultInterpolate.forEach( t => this.interpolate[ t ] = !options.interpolate || options.interpolate[ t ] !== false );\n\n\t\tif ( options.sanitize === true ) {\n\t\t\toptions.sanitize = {\n\t\t\t\t// blacklist from https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/lang/html/html4-elements-whitelist.json\n\t\t\t\telements: 'applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title'.split( ' ' ),\n\t\t\t\teventAttributes: true\n\t\t\t};\n\t\t}\n\n\t\tthis.stripComments = options.stripComments !== false;\n\t\tthis.preserveWhitespace = options.preserveWhitespace;\n\t\tthis.sanitizeElements = options.sanitize && options.sanitize.elements;\n\t\tthis.sanitizeEventAttributes = options.sanitize && options.sanitize.eventAttributes;\n\t\tthis.includeLinePositions = options.includeLinePositions;\n\t\tthis.textOnlyMode = options.textOnlyMode;\n\t\tthis.csp = options.csp;\n\t\tthis.allowExpressions = options.allowExpressions;\n\n\t\tif ( options.attributes ) this.inTag = true;\n\t},\n\n\tpostProcess ( result ) {\n\t\t// special case - empty string\n\t\tif ( !result.length ) {\n\t\t\treturn { t: [], v: TEMPLATE_VERSION };\n\t\t}\n\n\t\tif ( this.sectionDepth > 0 ) {\n\t\t\tthis.error( 'A section was left open' );\n\t\t}\n\n\t\tcleanup( result[0].t, this.stripComments, this.preserveWhitespace, !this.preserveWhitespace, !this.preserveWhitespace );\n\n\t\tif ( this.csp !== false ) {\n\t\t\tconst expr = {};\n\t\t\tinsertExpressions( result[0].t, expr );\n\t\t\tif ( keys( expr ).length ) result[0].e = expr;\n\t\t}\n\n\t\treturn result[0];\n\t},\n\n\tconverters: [\n\t\treadTemplate\n\t],\n\n\tsortMustacheTags () {\n\t\t// Sort in order of descending opening delimiter length (longer first),\n\t\t// to protect against opening delimiters being substrings of each other\n\t\tthis.tags.sort( ( a, b ) => {\n\t\t\treturn b.open.length - a.open.length;\n\t\t});\n\t}\n});\n\nexport default function parse ( template, options ) {\n\treturn new StandardParser( template, options || {} ).result;\n}\n"",""export default {};\n"",""import { fromExpression } from './createFunction';\nimport { isArray, isObject } from 'utils/is';\nimport { keys } from 'utils/object';\n\nexport default function insertExpressions ( obj, expr ) {\n\tkeys( obj ).forEach( key => {\n\t\tif  ( isExpression( key, obj ) ) return addTo( obj, expr );\n\n\t\tconst ref = obj[ key ];\n\t\tif ( hasChildren( ref ) ) insertExpressions( ref, expr );\n\t});\n}\n\nfunction isExpression( key, obj ) {\n\treturn key === 's' && isArray( obj.r );\n}\n\nfunction addTo( obj, expr ) {\n\tconst { s, r } = obj;\n\tif ( !expr[ s ] ) expr[ s ] = fromExpression( s, r.length );\n}\n\nfunction hasChildren( ref ) {\n\treturn isArray( ref ) || isObject( ref );\n}\n"",""import { TEMPLATE_VERSION } from 'config/template';\nimport { READERS, PARTIAL_READERS } from 'parse/_parse';\nimport cleanup from 'parse/utils/cleanup';\nimport { create } from 'utils/object';\n\nexport default function readTemplate ( parser ) {\n\tconst fragment = [];\n\tconst partials = create( null );\n\tlet hasPartials = false;\n\n\tconst preserveWhitespace = parser.preserveWhitespace;\n\n\twhile ( parser.pos < parser.str.length ) {\n\t\tconst pos = parser.pos;\n\t\tlet item, partial;\n\n\t\tif ( partial = parser.read( PARTIAL_READERS ) ) {\n\t\t\tif ( partials[ partial.n ] ) {\n\t\t\t\tparser.pos = pos;\n\t\t\t\tparser.error( 'Duplicated partial definition' );\n\t\t\t}\n\n\t\t\tcleanup( partial.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );\n\n\t\t\tpartials[ partial.n ] = partial.f;\n\t\t\thasPartials = true;\n\t\t} else if ( item = parser.read( READERS ) ) {\n\t\t\tfragment.push( item );\n\t\t} else  {\n\t\t\tparser.error( 'Unexpected template content' );\n\t\t}\n\t}\n\n\tconst result = {\n\t\tv: TEMPLATE_VERSION,\n\t\tt: fragment\n\t};\n\n\tif ( hasPartials ) {\n\t\tresult.p = partials;\n\t}\n\n\treturn result;\n}\n"",""import { INLINE_PARTIAL } from 'config/types';\nimport { READERS } from '../_parse';\nimport readClosing from './mustache/section/readClosing';\n\nconst partialDefinitionSectionPattern = /^\\s*#\\s*partial\\s+/;\n\nexport default function readPartialDefinitionSection ( parser ) {\n\tlet child, closed;\n\n\tconst start = parser.pos;\n\n\tconst delimiters = parser.standardDelimiters;\n\n\tif ( !parser.matchString( delimiters[0] ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( partialDefinitionSectionPattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tconst name = parser.matchPattern( /^[a-zA-Z_$][a-zA-Z_$0-9\\-\\/]*/ );\n\n\tif ( !name ) {\n\t\tparser.error( 'expected legal partial name' );\n\t}\n\n\tparser.sp();\n\tif ( !parser.matchString( delimiters[1] ) ) {\n\t\tparser.error( `Expected closing delimiter '${delimiters[1]}'` );\n\t}\n\n\tconst content = [];\n\n\tconst [ open, close ] = delimiters;\n\n\tdo {\n\t\tif ( child = readClosing( parser, { open, close }) ) {\n\t\t\tif ( child.r !== 'partial' ) {\n\t\t\t\tparser.error( `Expected ${open}/partial${close}` );\n\t\t\t}\n\n\t\t\tclosed = true;\n\t\t}\n\n\t\telse {\n\t\t\tchild = parser.read( READERS );\n\n\t\t\tif ( !child ) {\n\t\t\t\tparser.error( `Expected ${open}/partial${close}` );\n\t\t\t}\n\n\t\t\tcontent.push( child );\n\t\t}\n\t} while ( !closed );\n\n\treturn {\n\t\tt: INLINE_PARTIAL,\n\t\tn: name,\n\t\tf: content\n\t};\n}\n"",""import getLowestIndex from './utils/getLowestIndex';\nimport { decodeCharacterReferences } from 'utils/html';\n\nexport default function readText ( parser ) {\n\tlet index, disallowed, barrier;\n\n\tconst remaining = parser.remaining();\n\n\tif ( parser.textOnlyMode ) {\n\t\tdisallowed = parser.tags.map( t => t.open );\n\t\tdisallowed = disallowed.concat( parser.tags.map( t => '\\\\' + t.open ) );\n\n\t\tindex = getLowestIndex( remaining, disallowed );\n\t} else {\n\t\tbarrier = parser.inside ? '</' + parser.inside : '<';\n\n\t\tif ( parser.inside && !parser.interpolate[ parser.inside ] ) {\n\t\t\tindex = remaining.indexOf( barrier );\n\t\t} else {\n\t\t\tdisallowed = parser.tags.map( t => t.open );\n\t\t\tdisallowed = disallowed.concat( parser.tags.map( t => '\\\\' + t.open ) );\n\n\t\t\t// http://developers.whatwg.org/syntax.html#syntax-attributes\n\t\t\tif ( parser.inAttribute === true ) {\n\t\t\t\t// we're inside an unquoted attribute value\n\t\t\t\tdisallowed.push( `\""`, `'`, `=`, `<`, `>`, '`' );\n\t\t\t} else if ( parser.inAttribute ) {\n\t\t\t\t// quoted attribute value\n\t\t\t\tdisallowed.push( parser.inAttribute );\n\t\t\t} else {\n\t\t\t\tdisallowed.push( barrier );\n\t\t\t}\n\n\t\t\tindex = getLowestIndex( remaining, disallowed );\n\t\t}\n\t}\n\n\tif ( !index ) {\n\t\treturn null;\n\t}\n\n\tif ( index === -1 ) {\n\t\tindex = remaining.length;\n\t}\n\n\tparser.pos += index;\n\n\tif ( ( parser.inside && parser.inside !== 'textarea' ) || parser.textOnlyMode ) {\n\t\treturn remaining.substr( 0, index );\n\t} else {\n\t\treturn decodeCharacterReferences( remaining.substr( 0, index ) );\n\t}\n}\n"",""import { ANCHOR, DOCTYPE, ELEMENT } from 'config/types';\nimport { voidElementNames } from 'utils/html';\nimport { READERS, PARTIAL_READERS } from '../_parse';\nimport cleanup from 'parse/utils/cleanup';\nimport readMustache from './readMustache';\nimport readClosingTag from './element/readClosingTag';\nimport readClosing from './mustache/section/readClosing';\nimport readElse from './mustache/section/readElse';\nimport readElseIf from './mustache/section/readElseIf';\nimport { create } from 'utils/object';\n\nconst tagNamePattern = /^[a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*/;\nconst anchorPattern = /^[a-zA-Z_$][-a-zA-Z0-9_$]*/;\nconst validTagNameFollower = /^[\\s\\n\\/>]/;\nconst exclude = { exclude: true };\n\n// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission\nconst disallowedContents = {\n\tli: [ 'li' ],\n\tdt: [ 'dt', 'dd' ],\n\tdd: [ 'dt', 'dd' ],\n\tp: 'address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul'.split( ' ' ),\n\trt: [ 'rt', 'rp' ],\n\trp: [ 'rt', 'rp' ],\n\toptgroup: [ 'optgroup' ],\n\toption: [ 'option', 'optgroup' ],\n\tthead: [ 'tbody', 'tfoot' ],\n\ttbody: [ 'tbody', 'tfoot' ],\n\ttfoot: [ 'tbody' ],\n\ttr: [ 'tr', 'tbody' ],\n\ttd: [ 'td', 'th', 'tr' ],\n\tth: [ 'td', 'th', 'tr' ]\n};\n\nexport default readElement;\n\nfunction readElement ( parser ) {\n\tlet attribute, selfClosing, children, partials, hasPartials, child, closed, pos, remaining, closingTag, anchor;\n\n\tconst start = parser.pos;\n\n\tif ( parser.inside || parser.inAttribute || parser.textOnlyMode ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( '<' ) ) {\n\t\treturn null;\n\t}\n\n\t// if this is a closing tag, abort straight away\n\tif ( parser.nextChar() === '/' ) {\n\t\treturn null;\n\t}\n\n\tconst element = {};\n\tif ( parser.includeLinePositions ) {\n\t\telement.p = parser.getLinePos( start );\n\t}\n\n\t// check for doctype decl\n\tif ( parser.matchString( '!' ) ) {\n\t\telement.t = DOCTYPE;\n\t\tif ( !parser.matchPattern( /^doctype/i ) ) {\n\t\t\tparser.error( 'Expected DOCTYPE declaration' );\n\t\t}\n\n\t\telement.a = parser.matchPattern( /^(.+?)>/ );\n\t\treturn element;\n\t}\n\t// check for anchor\n\telse if ( anchor = parser.matchString( '#' ) ) {\n\t\tparser.sp();\n\t\telement.t = ANCHOR;\n\t\telement.n = parser.matchPattern( anchorPattern );\n\t}\n\t// otherwise, it's an element/component\n\telse {\n\t\telement.t = ELEMENT;\n\n\t\t// element name\n\t\telement.e = parser.matchPattern( tagNamePattern );\n\t\tif ( !element.e ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// next character must be whitespace, closing solidus or '>'\n\tif ( !validTagNameFollower.test( parser.nextChar() ) ) {\n\t\tparser.error( 'Illegal tag name' );\n\t}\n\n\tparser.sp();\n\n\tparser.inTag = true;\n\n\t// directives and attributes\n\twhile ( attribute = readMustache( parser ) ) {\n\t\tif ( attribute !== false ) {\n\t\t\tif ( !element.m ) element.m = [];\n\t\t\telement.m.push( attribute );\n\t\t}\n\n\t\tparser.sp();\n\t}\n\n\tparser.inTag = false;\n\n\t// allow whitespace before closing solidus\n\tparser.sp();\n\n\t// self-closing solidus?\n\tif ( parser.matchString( '/' ) ) {\n\t\tselfClosing = true;\n\t}\n\n\t// closing angle bracket\n\tif ( !parser.matchString( '>' ) ) {\n\t\treturn null;\n\t}\n\n\tconst lowerCaseName = ( element.e || element.n ).toLowerCase();\n\tconst preserveWhitespace = parser.preserveWhitespace;\n\n\tif ( !selfClosing && ( anchor || !voidElementNames.test( element.e ) ) ) {\n\t\tif ( !anchor ) {\n\t\t\tparser.elementStack.push( lowerCaseName );\n\n\t\t\t// Special case - if we open a script element, further tags should\n\t\t\t// be ignored unless they're a closing script element\n\t\t\tif ( lowerCaseName in parser.interpolate ) {\n\t\t\t\tparser.inside = lowerCaseName;\n\t\t\t}\n\t\t}\n\n\t\tchildren = [];\n\t\tpartials = create( null );\n\n\t\tdo {\n\t\t\tpos = parser.pos;\n\t\t\tremaining = parser.remaining();\n\n\t\t\tif ( !remaining ) {\n\t\t\t\t// if this happens to be a script tag and there's no content left, it's because\n\t\t\t\t// a closing script tag can't appear in a script\n\t\t\t\tif ( parser.inside === 'script' ) {\n\t\t\t\t\tclosed = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparser.error( `Missing end ${\n\t\t\t\t\tparser.elementStack.length > 1 ? 'tags' : 'tag'\n\t\t\t\t} (${\n\t\t\t\t\tparser.elementStack.reverse().map( x => `</${x}>` ).join( '' )\n\t\t\t\t})` );\n\t\t\t}\n\n\t\t\t// if for example we're in an <li> element, and we see another\n\t\t\t// <li> tag, close the first so they become siblings\n\t\t\tif ( !anchor && !canContain( lowerCaseName, remaining ) ) {\n\t\t\t\tclosed = true;\n\t\t\t}\n\n\t\t\t// closing tag\n\t\t\telse if ( !anchor && ( closingTag = readClosingTag( parser ) ) ) {\n\t\t\t\tclosed = true;\n\n\t\t\t\tconst closingTagName = closingTag.e.toLowerCase();\n\n\t\t\t\t// if this *isn't* the closing tag for the current element...\n\t\t\t\tif ( closingTagName !== lowerCaseName ) {\n\t\t\t\t\t// rewind parser\n\t\t\t\t\tparser.pos = pos;\n\n\t\t\t\t\t// if it doesn't close a parent tag, error\n\t\t\t\t\tif ( !~parser.elementStack.indexOf( closingTagName ) ) {\n\t\t\t\t\t\tlet errorMessage = 'Unexpected closing tag';\n\n\t\t\t\t\t\t// add additional help for void elements, since component names\n\t\t\t\t\t\t// might clash with them\n\t\t\t\t\t\tif ( voidElementNames.test( closingTagName ) ) {\n\t\t\t\t\t\t\terrorMessage += ` (<${closingTagName}> is a void element - it cannot contain children)`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparser.error( errorMessage );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if ( anchor && readAnchorClose( parser, element.n ) ) {\n\t\t\t\tclosed = true;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\t// implicit close by closing section tag. TODO clean this up\n\t\t\t\tconst tag = { open: parser.standardDelimiters[0], close: parser.standardDelimiters[1] };\n\t\t\t\tconst implicitCloseCase = [ readClosing, readElseIf, readElse ];\n\t\t\t\tif (  implicitCloseCase.some( r => r( parser, tag ) ) ) {\n\t\t\t\t\tclosed = true;\n\t\t\t\t\tparser.pos = pos;\n\t\t\t\t}\n\n\t\t\t\telse if ( child = parser.read( PARTIAL_READERS ) ) {\n\t\t\t\t\tif ( partials[ child.n ] ) {\n\t\t\t\t\t\tparser.pos = pos;\n\t\t\t\t\t\tparser.error( 'Duplicate partial definition' );\n\t\t\t\t\t}\n\n\t\t\t\t\tcleanup( child.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );\n\n\t\t\t\t\tpartials[ child.n ] = child.f;\n\t\t\t\t\thasPartials = true;\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tif ( child = parser.read( READERS ) ) {\n\t\t\t\t\t\tchildren.push( child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} while ( !closed );\n\n\t\tif ( children.length ) {\n\t\t\telement.f = children;\n\t\t}\n\n\t\tif ( hasPartials ) {\n\t\t\telement.p = partials;\n\t\t}\n\n\t\tparser.elementStack.pop();\n\t}\n\n\tparser.inside = null;\n\n\tif ( parser.sanitizeElements && parser.sanitizeElements.indexOf( lowerCaseName ) !== -1 ) {\n\t\treturn exclude;\n\t}\n\n\treturn element;\n}\n\nfunction canContain ( name, remaining ) {\n\tconst match = /^<([a-zA-Z][a-zA-Z0-9]*)/.exec( remaining );\n\tconst disallowed = disallowedContents[ name ];\n\n\tif ( !match || !disallowed ) {\n\t\treturn true;\n\t}\n\n\treturn !~disallowed.indexOf( match[1].toLowerCase() );\n}\n\nfunction readAnchorClose ( parser, name ) {\n\tconst pos = parser.pos;\n\tif ( !parser.matchString( '</' ) ) {\n\t\treturn null;\n\t}\n\n\tparser.matchString( '#' );\n\tparser.sp();\n\n\tif ( !parser.matchString( name ) ) {\n\t\tparser.pos = pos;\n\t\treturn null;\n\t}\n\n\tparser.sp();\n\n\tif ( !parser.matchString( '>' ) ) {\n\t\tparser.pos = pos;\n\t\treturn null;\n\t}\n\n\treturn true;\n}\n"",""import { CLOSING_TAG } from 'src/config/types';\n\nconst closingTagPattern = /^([a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*)\\s*\\>/;\n\nexport default function readClosingTag ( parser ) {\n\tlet tag;\n\n\tconst start = parser.pos;\n\n\t// are we looking at a closing tag?\n\tif ( !parser.matchString( '</' ) ) {\n\t\treturn null;\n\t}\n\n\tif ( tag = parser.matchPattern( closingTagPattern ) ) {\n\t\tif ( parser.inside && tag !== parser.inside ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: CLOSING_TAG,\n\t\t\te: tag\n\t\t};\n\t}\n\n\t// We have an illegal closing tag, report it\n\tparser.pos -= 2;\n\tparser.error( 'Illegal closing tag' );\n}\n"",""import { COMMENT, ELEMENT } from 'config/types';\nimport stripStandalones from './stripStandalones';\nimport trimWhitespace from './trimWhitespace';\nimport { isString } from 'utils/is';\n\nconst contiguousWhitespace = /[ \\t\\f\\r\\n]+/g;\nconst preserveWhitespaceElements = /^(?:pre|script|style|textarea)$/i;\nconst leadingWhitespace = /^[ \\t\\f\\r\\n]+/;\nconst trailingWhitespace = /[ \\t\\f\\r\\n]+$/;\nconst leadingNewLine = /^(?:\\r\\n|\\r|\\n)/;\nconst trailingNewLine = /(?:\\r\\n|\\r|\\n)$/;\n\nexport default function cleanup ( items, stripComments, preserveWhitespace, removeLeadingWhitespace, removeTrailingWhitespace ) {\n\tif ( isString( items ) ) return;\n\n\tlet i,\n\t\titem,\n\t\tpreviousItem,\n\t\tnextItem,\n\t\tpreserveWhitespaceInsideFragment,\n\t\tremoveLeadingWhitespaceInsideFragment,\n\t\tremoveTrailingWhitespaceInsideFragment;\n\n\t// First pass - remove standalones and comments etc\n\tstripStandalones( items );\n\n\ti = items.length;\n\twhile ( i-- ) {\n\t\titem = items[i];\n\n\t\t// Remove delimiter changes, unsafe elements etc\n\t\tif ( item.exclude ) {\n\t\t\titems.splice( i, 1 );\n\t\t}\n\n\t\t// Remove comments, unless we want to keep them\n\t\telse if ( stripComments && item.t === COMMENT ) {\n\t\t\titems.splice( i, 1 );\n\t\t}\n\t}\n\n\t// If necessary, remove leading and trailing whitespace\n\ttrimWhitespace( items, removeLeadingWhitespace ? leadingWhitespace : null, removeTrailingWhitespace ? trailingWhitespace : null );\n\n\ti = items.length;\n\twhile ( i-- ) {\n\t\titem = items[i];\n\n\t\t// Recurse\n\t\tif ( item.f ) {\n\t\t\tconst isPreserveWhitespaceElement = item.t === ELEMENT && preserveWhitespaceElements.test( item.e );\n\t\t\tpreserveWhitespaceInsideFragment = preserveWhitespace || isPreserveWhitespaceElement;\n\n\t\t\tif ( !preserveWhitespace && isPreserveWhitespaceElement ) {\n\t\t\t\ttrimWhitespace( item.f, leadingNewLine, trailingNewLine );\n\t\t\t}\n\n\t\t\tif ( !preserveWhitespaceInsideFragment ) {\n\t\t\t\tpreviousItem = items[ i - 1 ];\n\t\t\t\tnextItem = items[ i + 1 ];\n\n\t\t\t\t// if the previous item was a text item with trailing whitespace,\n\t\t\t\t// remove leading whitespace inside the fragment\n\t\t\t\tif ( !previousItem || ( isString( previousItem ) && trailingWhitespace.test( previousItem ) ) ) {\n\t\t\t\t\tremoveLeadingWhitespaceInsideFragment = true;\n\t\t\t\t}\n\n\t\t\t\t// and vice versa\n\t\t\t\tif ( !nextItem || ( isString( nextItem ) && leadingWhitespace.test( nextItem ) ) ) {\n\t\t\t\t\tremoveTrailingWhitespaceInsideFragment = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcleanup( item.f, stripComments, preserveWhitespaceInsideFragment, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\t\t}\n\n\t\t// Split if-else blocks into two (an if, and an unless)\n\t\tif ( item.l ) {\n\t\t\tcleanup( item.l, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\n\t\t\titem.l.forEach( s => s.l = 1 );\n\t\t\titem.l.unshift( i + 1, 0 );\n\t\t\titems.splice.apply( items, item.l );\n\t\t\tdelete item.l; // TODO would be nice if there was a way around this\n\t\t}\n\n\t\t// Clean up conditional attributes\n\t\tif ( item.m ) {\n\t\t\tcleanup( item.m, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\t\t\tif ( item.m.length < 1 ) delete item.m;\n\t\t}\n\t}\n\n\t// final pass - fuse text nodes together\n\ti = items.length;\n\twhile ( i-- ) {\n\t\tif ( isString( items[i] ) ) {\n\t\t\tif ( isString( items[i+1] ) ) {\n\t\t\t\titems[i] = items[i] + items[i+1];\n\t\t\t\titems.splice( i + 1, 1 );\n\t\t\t}\n\n\t\t\tif ( !preserveWhitespace ) {\n\t\t\t\titems[i] = items[i].replace( contiguousWhitespace, ' ' );\n\t\t\t}\n\n\t\t\tif ( items[i] === '' ) {\n\t\t\t\titems.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t}\n}\n"",""import { lastItem } from 'utils/array';\nimport { isString } from 'utils/is';\n\nexport default function ( items, leadingPattern, trailingPattern ) {\n\tlet item;\n\n\tif ( leadingPattern ) {\n\t\titem = items[0];\n\t\tif ( isString( item ) ) {\n\t\t\titem = item.replace( leadingPattern, '' );\n\n\t\t\tif ( !item ) {\n\t\t\t\titems.shift();\n\t\t\t} else {\n\t\t\t\titems[0] = item;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( trailingPattern ) {\n\t\titem = lastItem( items );\n\t\tif ( isString( item ) ) {\n\t\t\titem = item.replace( trailingPattern, '' );\n\n\t\t\tif ( !item ) {\n\t\t\t\titems.pop();\n\t\t\t} else {\n\t\t\t\titems[ items.length - 1 ] = item;\n\t\t\t}\n\t\t}\n\t}\n}\n"",""import { COMMENT, DELIMCHANGE, SECTION, INVERTED } from 'config/types';\nimport { lastItem } from 'utils/array';\nimport { isString } from 'utils/is';\n\nconst leadingLinebreak = /^[ \\t\\f\\r\\n]*\\r?\\n/;\nconst trailingLinebreak = /\\r?\\n[ \\t\\f\\r\\n]*$/;\n\nexport default function ( items ) {\n\tlet i, current, backOne, backTwo, lastSectionItem;\n\n\tfor ( i=1; i<items.length; i+=1 ) {\n\t\tcurrent = items[i];\n\t\tbackOne = items[i-1];\n\t\tbackTwo = items[i-2];\n\n\t\t// if we're at the end of a [text][comment][text] sequence...\n\t\tif ( isString( current ) && isComment( backOne ) && isString( backTwo ) ) {\n\n\t\t\t// ... and the comment is a standalone (i.e. line breaks either side)...\n\t\t\tif ( trailingLinebreak.test( backTwo ) && leadingLinebreak.test( current ) ) {\n\n\t\t\t\t// ... then we want to remove the whitespace after the first line break\n\t\t\t\titems[i-2] = backTwo.replace( trailingLinebreak, '\\n' );\n\n\t\t\t\t// and the leading line break of the second text token\n\t\t\t\titems[i] = current.replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\n\t\t// if the current item is a section, and it is preceded by a linebreak, and\n\t\t// its first item is a linebreak...\n\t\tif ( isSection( current ) && isString( backOne ) ) {\n\t\t\tif ( trailingLinebreak.test( backOne ) && isString( current.f[0] ) && leadingLinebreak.test( current.f[0] ) ) {\n\t\t\t\titems[i-1] = backOne.replace( trailingLinebreak, '\\n' );\n\t\t\t\tcurrent.f[0] = current.f[0].replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\n\t\t// if the last item was a section, and it is followed by a linebreak, and\n\t\t// its last item is a linebreak...\n\t\tif ( isString( current ) && isSection( backOne ) ) {\n\t\t\tlastSectionItem = lastItem( backOne.f );\n\n\t\t\tif ( isString( lastSectionItem ) && trailingLinebreak.test( lastSectionItem ) && leadingLinebreak.test( current ) ) {\n\t\t\t\tbackOne.f[ backOne.f.length - 1 ] = lastSectionItem.replace( trailingLinebreak, '\\n' );\n\t\t\t\titems[i] = current.replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn items;\n}\n\nfunction isComment ( item ) {\n\treturn item.t === COMMENT || item.t === DELIMCHANGE;\n}\n\nfunction isSection ( item ) {\n\treturn ( item.t === SECTION || item.t === INVERTED ) && item.f;\n}\n"",""import { COMMENT } from 'config/types';\n\nconst OPEN_COMMENT = '<!--';\nconst CLOSE_COMMENT = '-->';\n\nexport default function readHtmlComment ( parser ) {\n\tconst start = parser.pos;\n\n\tif ( parser.textOnlyMode || !parser.matchString( OPEN_COMMENT ) ) {\n\t\treturn null;\n\t}\n\n\tconst remaining = parser.remaining();\n\tconst endIndex = remaining.indexOf( CLOSE_COMMENT );\n\n\tif ( endIndex === -1 ) {\n\t\tparser.error( 'Illegal HTML - expected closing comment sequence (\\'-->\\')' );\n\t}\n\n\tconst content = remaining.substr( 0, endIndex );\n\tparser.pos += endIndex + 3;\n\n\tconst comment = {\n\t\tt: COMMENT,\n\t\tc: content\n\t};\n\n\tif ( parser.includeLinePositions ) {\n\t\tcomment.p = parser.getLinePos( start );\n\t}\n\n\treturn comment;\n}\n"",""import { ALIAS, SECTION, SECTION_IF, SECTION_UNLESS } from 'config/types';\nimport { READERS } from 'parse/_parse';\nimport readClosing from './section/readClosing';\nimport readElse from './section/readElse';\nimport readElseIf from './section/readElseIf';\nimport handlebarsBlockCodes from './handlebarsBlockCodes';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { readAlias, readAliases } from './readAliases';\nimport { keys } from 'utils/object';\n\nconst indexRefPattern = /^\\s*:\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nconst keyIndexRefPattern = /^\\s*,\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nconst handlebarsBlockPattern = new RegExp( '^(' + keys( handlebarsBlockCodes ).join( '|' ) + ')\\\\b' );\n\nexport default function readSection ( parser, tag ) {\n\tlet expression, section, child, children, hasElse, block, unlessBlock, closed, i, expectedClose;\n\tlet aliasOnly = false;\n\n\tconst start = parser.pos;\n\n\tif ( parser.matchString( '^' ) ) {\n\t\t// watch out for parent context refs - {{^^/^^/foo}}\n\t\tif ( parser.matchString( '^/' ) ){\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\t\tsection = { t: SECTION, f: [], n: SECTION_UNLESS };\n\t} else if ( parser.matchString( '#' ) ) {\n\t\tsection = { t: SECTION, f: [] };\n\n\t\tif ( parser.matchString( 'partial' ) ) {\n\t\t\tparser.pos = start - parser.standardDelimiters[0].length;\n\t\t\tparser.error( 'Partial definitions can only be at the top level of the template, or immediately inside components' );\n\t\t}\n\n\t\tif ( block = parser.matchPattern( handlebarsBlockPattern ) ) {\n\t\t\texpectedClose = block;\n\t\t\tsection.n = handlebarsBlockCodes[ block ];\n\t\t}\n\t} else {\n\t\treturn null;\n\t}\n\n\tparser.sp();\n\n\tif ( block === 'with' ) {\n\t\tconst aliases = readAliases( parser );\n\t\tif ( aliases ) {\n\t\t\taliasOnly = true;\n\t\t\tsection.z = aliases;\n\t\t\tsection.t = ALIAS;\n\t\t}\n\t} else if ( block === 'each' ) {\n\t\tconst alias = readAlias( parser );\n\t\tif ( alias ) {\n\t\t\tsection.z = [ { n: alias.n, x: { r: '.' } } ];\n\t\t\texpression = alias.x;\n\t\t}\n\t}\n\n\tif ( !aliasOnly ) {\n\t\tif ( !expression ) expression = readExpression( parser );\n\n\t\tif ( !expression ) {\n\t\t\tparser.error( 'Expected expression' );\n\t\t}\n\n\t\t// optional index and key references\n\t\tif ( i = parser.matchPattern( indexRefPattern ) ) {\n\t\t\tlet extra;\n\n\t\t\tif ( extra = parser.matchPattern( keyIndexRefPattern ) ) {\n\t\t\t\tsection.i = i + ',' + extra;\n\t\t\t} else {\n\t\t\t\tsection.i = i;\n\t\t\t}\n\t\t}\n\n\t\tif ( !block && expression.n ) {\n\t\t\texpectedClose = expression.n;\n\t\t}\n\t}\n\n\tparser.sp();\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( `Expected closing delimiter '${tag.close}'` );\n\t}\n\n\tparser.sectionDepth += 1;\n\tchildren = section.f;\n\n\tlet pos;\n\tdo {\n\t\tpos = parser.pos;\n\t\tif ( child = readClosing( parser, tag ) ) {\n\t\t\tif ( expectedClose && child.r !== expectedClose ) {\n\t\t\t\tif ( !block ) {\n\t\t\t\t\tif ( child.r ) parser.warn( `Expected ${tag.open}/${expectedClose}${tag.close} but found ${tag.open}/${child.r}${tag.close}` );\n\t\t\t\t} else {\n\t\t\t\t\tparser.pos = pos;\n\t\t\t\t\tparser.error( `Expected ${tag.open}/${expectedClose}${tag.close}` );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tparser.sectionDepth -= 1;\n\t\t\tclosed = true;\n\t\t}\n\n\t\telse if ( !aliasOnly && ( child = readElseIf( parser, tag ) ) ) {\n\t\t\tif ( section.n === SECTION_UNLESS ) {\n\t\t\t\tparser.error( '{{else}} not allowed in {{#unless}}' );\n\t\t\t}\n\n\t\t\tif ( hasElse ) {\n\t\t\t\tparser.error( 'illegal {{elseif...}} after {{else}}' );\n\t\t\t}\n\n\t\t\tif ( !unlessBlock ) {\n\t\t\t\tunlessBlock = [];\n\t\t\t}\n\n\t\t\tconst mustache = {\n\t\t\t\tt: SECTION,\n\t\t\t\tn: SECTION_IF,\n\t\t\t\tf: children = []\n\t\t\t};\n\t\t\trefineExpression( child.x, mustache );\n\n\t\t\tunlessBlock.push( mustache );\n\t\t}\n\n\t\telse if ( !aliasOnly && ( child = readElse( parser, tag ) ) ) {\n\t\t\tif ( section.n === SECTION_UNLESS ) {\n\t\t\t\tparser.error( '{{else}} not allowed in {{#unless}}' );\n\t\t\t}\n\n\t\t\tif ( hasElse ) {\n\t\t\t\tparser.error( 'there can only be one {{else}} block, at the end of a section' );\n\t\t\t}\n\n\t\t\thasElse = true;\n\n\t\t\t// use an unless block if there's no elseif\n\t\t\tif ( !unlessBlock ) {\n\t\t\t\tunlessBlock = [];\n\t\t\t}\n\n\t\t\tunlessBlock.push({\n\t\t\t\tt: SECTION,\n\t\t\t\tn: SECTION_UNLESS,\n\t\t\t\tf: children = []\n\t\t\t});\n\t\t}\n\n\t\telse {\n\t\t\tchild = parser.read( READERS );\n\n\t\t\tif ( !child ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchildren.push( child );\n\t\t}\n\t} while ( !closed );\n\n\tif ( unlessBlock ) {\n\t\tsection.l = unlessBlock;\n\t}\n\n\tif ( !aliasOnly ) {\n\t\trefineExpression( expression, section );\n\t}\n\n\t// TODO if a section is empty it should be discarded. Don't do\n\t// that here though - we need to clean everything up first, as\n\t// it may contain removeable whitespace. As a temporary measure,\n\t// to pass the existing tests, remove empty `f` arrays\n\tif ( !section.f.length ) {\n\t\tdelete section.f;\n\t}\n\n\treturn section;\n}\n"",""import { SECTION_EACH, SECTION_IF, SECTION_IF_WITH, SECTION_UNLESS } from 'config/types';\n\nexport default {\n\teach:    SECTION_EACH,\n\tif:      SECTION_IF,\n\twith:    SECTION_IF_WITH,\n\tunless:  SECTION_UNLESS\n};\n"",""import { ELSEIF } from 'config/types';\nimport readExpression from '../../readExpression';\n\nconst elsePattern = /^\\s*elseif\\s+/;\n\nexport default function readElseIf ( parser, tag ) {\n\tconst start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( elsePattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tconst expression = readExpression( parser );\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( `Expected closing delimiter '${tag.close}'` );\n\t}\n\n\treturn {\n\t\tt: ELSEIF,\n\t\tx: expression\n\t};\n}\n"",""import { ELSE } from 'config/types';\n\nconst elsePattern = /^\\s*else\\s*/;\n\nexport default function readElse ( parser, tag ) {\n\tconst start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( elsePattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( `Expected closing delimiter '${tag.close}'` );\n\t}\n\n\treturn {\n\t\tt: ELSE\n\t};\n}\n"",""import { CLOSING } from 'config/types';\n\nexport default function readClosing ( parser, tag ) {\n\tconst start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tparser.sp();\n\n\tif ( !parser.matchString( '/' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.sp();\n\n\tconst remaining = parser.remaining();\n\tconst index = remaining.indexOf( tag.close );\n\n\tif ( index !== -1 ) {\n\t\tconst closing = {\n\t\t\tt: CLOSING,\n\t\t\tr: remaining.substr( 0, index ).split( ' ' )[0]\n\t\t};\n\n\t\tparser.pos += index;\n\n\t\tif ( !parser.matchString( tag.close ) ) {\n\t\t\tparser.error( `Expected closing delimiter '${tag.close}'` );\n\t\t}\n\n\t\treturn closing;\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n"",""import { INTERPOLATOR } from 'config/types';\nimport readExpressionOrReference from '../readExpressionOrReference';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readInterpolator ( parser, tag ) {\n\tlet expression, err;\n\n\tconst start = parser.pos;\n\n\t// TODO would be good for perf if we could do away with the try-catch\n\ttry {\n\t\texpression = readExpressionOrReference( parser, [ tag.close ] );\n\t} catch ( e ) {\n\t\terr = e;\n\t}\n\n\tif ( !expression ) {\n\t\tif ( parser.str.charAt( start ) === '!' ) {\n\t\t\t// special case - comment\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( err ) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( `Expected closing delimiter '${tag.close}' after reference` );\n\n\t\tif ( !expression ) {\n\t\t\t// special case - comment\n\t\t\tif ( parser.nextChar() === '!' ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tparser.error( `Expected expression or legal reference` );\n\t\t}\n\t}\n\n\tconst interpolator = { t: INTERPOLATOR };\n\trefineExpression( expression, interpolator ); // TODO handle this differently - it's mysterious\n\n\treturn interpolator;\n}\n"",""import { COMMENT } from 'src/config/types';\n\nexport default function readComment ( parser, tag ) {\n\tif ( !parser.matchString( '!' ) ) {\n\t\treturn null;\n\t}\n\n\tconst index = parser.remaining().indexOf( tag.close );\n\n\tif ( index !== -1 ) {\n\t\tparser.pos += index + tag.close.length;\n\t\treturn { t: COMMENT };\n\t}\n}\n"",""import { PARTIAL, YIELDER } from 'src/config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { readAliases } from './readAliases';\n\nexport default function readPartial ( parser, tag ) {\n\tconst type = parser.matchString( '>' ) || parser.matchString( 'yield' );\n\tconst partial = { t: type === '>' ? PARTIAL : YIELDER };\n\tlet aliases;\n\n\tif ( !type ) return null;\n\n\tparser.sp();\n\n\tif ( type === '>' || !( aliases = parser.matchString( 'with' ) ) ) {\n\t\t// Partial names can include hyphens, so we can't use readExpression\n\t\t// blindly. Instead, we use the `relaxedNames` flag to indicate that\n\t\t// `foo-bar` should be read as a single name, rather than 'subtract\n\t\t// bar from foo'\n\t\tparser.relaxedNames = parser.strictRefinement = true;\n\t\tconst expression = readExpression( parser );\n\t\tparser.relaxedNames = parser.strictRefinement = false;\n\n\t\tif ( !expression && type === '>' ) return null;\n\n\t\tif ( expression ) {\n\t\t\trefineExpression( expression, partial ); // TODO...\n\t\t\tparser.sp();\n\t\t\tif ( type !== '>' ) aliases = parser.matchString( 'with' );\n\t\t}\n\t}\n\n\tparser.sp();\n\n\t// check for alias context e.g. `{{>foo bar as bat, bip as bop}}`\n\tif ( aliases || type === '>' ) {\n\t\taliases = readAliases( parser );\n\t\tif ( aliases && aliases.length ) {\n\t\t\tpartial.z = aliases;\n\t\t}\n\n\t\t// otherwise check for literal context e.g. `{{>foo bar}}` then\n\t\t// turn it into `{{#with bar}}{{>foo}}{{/with}}`\n\t\telse if ( type === '>' ) {\n\t\t\tconst context = readExpression( parser );\n\t\t\tif ( context) {\n\t\t\t\tpartial.c = {};\n\t\t\t\trefineExpression( context, partial.c );\n\t\t\t}\n\t\t}\n\n\t\telse {\n\t\t\t// {{yield with}} requires some aliases\n\t\t\tparser.error( `Expected one or more aliases` );\n\t\t}\n\t}\n\n\tparser.sp();\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( `Expected closing delimiter '${tag.close}'` );\n\t}\n\n\treturn partial;\n}\n"",""import readExpression from '../readExpression';\nimport refineExpression from '../../utils/refineExpression';\n\nconst legalAlias = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nconst asRE = /^as/i;\n\nexport function readAliases( parser ) {\n\tconst aliases = [];\n\tlet alias;\n\tconst start = parser.pos;\n\n\tparser.sp();\n\n\talias = readAlias( parser );\n\n\tif ( alias ) {\n\t\talias.x = refineExpression( alias.x, {} );\n\t\taliases.push( alias );\n\n\t\tparser.sp();\n\n\t\twhile ( parser.matchString(',') ) {\n\t\t\talias = readAlias( parser );\n\n\t\t\tif ( !alias ) {\n\t\t\t\tparser.error( 'Expected another alias.' );\n\t\t\t}\n\n\t\t\talias.x = refineExpression( alias.x, {} );\n\t\t\taliases.push( alias );\n\n\t\t\tparser.sp();\n\t\t}\n\n\t\treturn aliases;\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nexport function readAlias( parser ) {\n\tconst start = parser.pos;\n\n\tparser.sp();\n\n\tconst expr = readExpression( parser, [] );\n\n\tif ( !expr ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.sp();\n\n\tif ( !parser.matchPattern( asRE ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.sp();\n\n\tconst alias = parser.matchPattern( legalAlias );\n\n\tif ( !alias ) {\n\t\tparser.error( 'Expected a legal alias name.' );\n\t}\n\n\treturn { n: alias, x: expr };\n}\n"",""import { TRIPLE } from 'config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readUnescaped ( parser, tag ) {\n\tif ( !parser.matchString( '&' ) ) {\n\t\treturn null;\n\t}\n\n\tparser.sp();\n\n\tconst expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( `Expected closing delimiter '${tag.close}'` );\n\t}\n\n\tconst triple = { t: TRIPLE };\n\trefineExpression( expression, triple ); // TODO handle this differently - it's mysterious\n\n\treturn triple;\n}\n"",""import { TRIPLE } from 'config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readTriple ( parser, tag ) {\n\tconst expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( `Expected closing delimiter '${tag.close}'` );\n\t}\n\n\tconst triple = { t: TRIPLE };\n\trefineExpression( expression, triple ); // TODO handle this differently - it's mysterious\n\n\treturn triple;\n}\n"",""import { DELIMCHANGE } from 'config/types';\nimport readDelimiterChange from './mustache/readDelimiterChange';\nimport readRegexpLiteral from './expressions/primary/literal/readRegexpLiteral';\nimport { readAttributeOrDirective } from './element/readAttribute';\n\nconst delimiterChangeToken = { t: DELIMCHANGE, exclude: true };\n\nexport default function readMustache ( parser ) {\n\tlet mustache, i;\n\n\t// If we're inside a <script> or <style> tag, and we're not\n\t// interpolating, bug out\n\tif ( parser.interpolate[ parser.inside ] === false ) {\n\t\treturn null;\n\t}\n\n\tfor ( i = 0; i < parser.tags.length; i += 1 ) {\n\t\tif ( mustache = readMustacheOfType( parser, parser.tags[i] ) ) {\n\t\t\treturn mustache;\n\t\t}\n\t}\n\n\tif ( parser.inTag && !parser.inAttribute ) {\n\t\tmustache = readAttributeOrDirective( parser );\n\t\tif ( mustache ) {\n\t\t\tparser.sp();\n\t\t\treturn mustache;\n\t\t}\n\t}\n}\n\nfunction readMustacheOfType ( parser, tag ) {\n\tlet mustache, reader, i;\n\n\tconst start = parser.pos;\n\n\tif ( parser.matchString( '\\\\' + tag.open ) ) {\n\t\tif ( start === 0 || parser.str[ start - 1 ] !== '\\\\' ) {\n\t\t\treturn tag.open;\n\t\t}\n\t} else if ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\t// delimiter change?\n\tif ( mustache = readDelimiterChange( parser ) ) {\n\t\t// find closing delimiter or abort...\n\t\tif ( !parser.matchString( tag.close ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// ...then make the switch\n\t\ttag.open = mustache[0];\n\t\ttag.close = mustache[1];\n\t\tparser.sortMustacheTags();\n\n\t\treturn delimiterChangeToken;\n\t}\n\n\tparser.sp();\n\n\t// illegal section closer\n\tif ( parser.matchString( '/' ) ) {\n\t\tparser.pos -= 1;\n\t\tconst rewind = parser.pos;\n\t\tif ( !readRegexpLiteral( parser ) ) {\n\t\t\tparser.pos = rewind - ( tag.close.length );\n\t\t\tif ( parser.inAttribute ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tparser.error( 'Attempted to close a section that wasn\\'t open' );\n\t\t\t}\n\t\t} else {\n\t\t\tparser.pos = rewind;\n\t\t}\n\t}\n\n\tfor ( i = 0; i < tag.readers.length; i += 1 ) {\n\t\treader = tag.readers[i];\n\n\t\tif ( mustache = reader( parser, tag ) ) {\n\t\t\tif ( tag.isStatic ) {\n\t\t\t\tmustache.s = 1;\n\t\t\t}\n\n\t\t\tif ( parser.includeLinePositions ) {\n\t\t\t\tmustache.p = parser.getLinePos( start );\n\t\t\t}\n\n\t\t\treturn mustache;\n\t\t}\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n"",""import { ARRAY_LITERAL, ATTRIBUTE, DECORATOR, DELEGATE_FLAG, BINDING_FLAG, INTERPOLATOR, TRANSITION, EVENT } from '../../../config/types';\nimport getLowestIndex from '../utils/getLowestIndex';\nimport readMustache from '../readMustache';\nimport { decodeCharacterReferences } from 'src/utils/html';\nimport readExpressionList from '../expressions/shared/readExpressionList';\nimport readExpressionOrReference from '../readExpressionOrReference';\nimport flattenExpression from 'parse/utils/flattenExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { isString } from 'utils/is';\n\nconst attributeNamePattern = /^[^\\s\""'>\\/=]+/;\nconst onPattern = /^on/;\nconst eventPattern = /^on-([a-zA-Z\\*\\.$_]((?:[a-zA-Z\\*\\.$_0-9\\-]|\\\\-)+))$/;\nconst reservedEventNames = /^(?:change|reset|teardown|update|construct|config|init|render|complete|unrender|detach|insert|destruct|attachchild|detachchild)$/;\nconst decoratorPattern = /^as-([a-z-A-Z][-a-zA-Z_0-9]*)$/;\nconst transitionPattern = /^([a-zA-Z](?:(?!-in-out)[-a-zA-Z_0-9])*)-(in|out|in-out)$/;\nconst boundPattern = /^((bind|class)-(([-a-zA-Z0-9_])+))$/;\nconst directives = {\n\tlazy: { t: BINDING_FLAG, v: 'l' },\n\ttwoway: { t: BINDING_FLAG, v: 't' },\n\t'no-delegation': { t: DELEGATE_FLAG }\n};\nconst unquotedAttributeValueTextPattern = /^[^\\s\""'=<>\\/`]+/;\nconst proxyEvent = /^[^\\s\""'=<>@\\[\\]()]*/;\nconst whitespace = /^\\s+/;\n\nconst slashes = /\\\\/g;\nfunction splitEvent ( str ) {\n\tconst result = [];\n\tlet s = 0;\n\n\tfor ( let i = 0; i < str.length; i++ ) {\n\t\tif ( str[i] === '-' && str[ i - 1 ] !== '\\\\' ) {\n\t\t\tresult.push( str.substring( s, i ).replace( slashes, '' ) );\n\t\t\ts = i + 1;\n\t\t}\n\t}\n\n\tresult.push( str.substring( s ).replace( slashes, '' ) );\n\n\treturn result;\n}\n\nexport default function readAttribute ( parser ) {\n\tlet name, i, nearest, idx;\n\n\tparser.sp();\n\n\tname = parser.matchPattern( attributeNamePattern );\n\tif ( !name ) {\n\t\treturn null;\n\t}\n\n\t// check for accidental delimiter consumption e.g. <tag bool{{>attrs}} />\n\tnearest = name.length;\n\tfor ( i = 0; i < parser.tags.length; i++ ) {\n\t\tif ( ~( idx = name.indexOf( parser.tags[ i ].open ) ) ) {\n\t\t\tif ( idx < nearest ) nearest = idx;\n\t\t}\n\t}\n\tif ( nearest < name.length ) {\n\t\tparser.pos -= name.length - nearest;\n\t\tname = name.substr( 0, nearest );\n\t\tif ( !name ) return null;\n\t}\n\n\treturn { n: name };\n}\n\nfunction readAttributeValue ( parser ) {\n\tconst start = parser.pos;\n\n\t// next character must be `=`, `/`, `>` or whitespace\n\tif ( !/[=\\/>\\s]/.test( parser.nextChar() ) ) {\n\t\tparser.error( 'Expected `=`, `/`, `>` or whitespace' );\n\t}\n\n\tparser.sp();\n\n\tif ( !parser.matchString( '=' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.sp();\n\n\tconst valueStart = parser.pos;\n\tconst startDepth = parser.sectionDepth;\n\n\tconst value = readQuotedAttributeValue( parser, `'` ) ||\n\t\t\treadQuotedAttributeValue( parser, `\""` ) ||\n\t\t\treadUnquotedAttributeValue( parser );\n\n\tif ( value === null ) {\n\t\tparser.error( 'Expected valid attribute value' );\n\t}\n\n\tif ( parser.sectionDepth !== startDepth ) {\n\t\tparser.pos = valueStart;\n\t\tparser.error( 'An attribute value must contain as many opening section tags as closing section tags' );\n\t}\n\n\tif ( !value.length ) {\n\t\treturn '';\n\t}\n\n\tif ( value.length === 1 && isString( value[0] ) ) {\n\t\treturn decodeCharacterReferences( value[0] );\n\t}\n\n\treturn value;\n}\n\nfunction readUnquotedAttributeValueToken ( parser ) {\n\tlet text, index;\n\n\tconst start = parser.pos;\n\n\ttext = parser.matchPattern( unquotedAttributeValueTextPattern );\n\n\tif ( !text ) {\n\t\treturn null;\n\t}\n\n\tconst haystack = text;\n\tconst needles = parser.tags.map( t => t.open ); // TODO refactor... we do this in readText.js as well\n\n\tif ( ( index = getLowestIndex( haystack, needles ) ) !== -1 ) {\n\t\ttext = text.substr( 0, index );\n\t\tparser.pos = start + text.length;\n\t}\n\n\treturn text;\n}\n\nfunction readUnquotedAttributeValue ( parser ) {\n\tparser.inAttribute = true;\n\n\tconst tokens = [];\n\n\tlet token = readMustache( parser ) || readUnquotedAttributeValueToken( parser );\n\twhile ( token ) {\n\t\ttokens.push( token );\n\t\ttoken = readMustache( parser ) || readUnquotedAttributeValueToken( parser );\n\t}\n\n\tif ( !tokens.length ) {\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = false;\n\treturn tokens;\n}\n\nfunction readQuotedAttributeValue ( parser, quoteMark ) {\n\tconst start = parser.pos;\n\n\tif ( !parser.matchString( quoteMark ) ) {\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = quoteMark;\n\n\tconst tokens = [];\n\n\tlet token = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );\n\twhile ( token !== null ) {\n\t\ttokens.push( token );\n\t\ttoken = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );\n\t}\n\n\tif ( !parser.matchString( quoteMark ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = false;\n\n\treturn tokens;\n}\n\nfunction readQuotedStringToken ( parser, quoteMark ) {\n\tconst haystack = parser.remaining();\n\n\tconst needles = parser.tags.map( t => t.open ); // TODO refactor... we do this in readText.js as well\n\tneedles.push( quoteMark );\n\n\tconst index = getLowestIndex( haystack, needles );\n\n\tif ( index === -1 ) {\n\t\tparser.error( 'Quoted attribute value must have a closing quote' );\n\t}\n\n\tif ( !index ) {\n\t\treturn null;\n\t}\n\n\tparser.pos += index;\n\treturn haystack.substr( 0, index );\n}\n\nexport function readAttributeOrDirective ( parser ) {\n\tlet match, directive;\n\n\tconst attribute = readAttribute( parser, false );\n\n\tif ( !attribute ) return null;\n\n\t// lazy, twoway\n\tif ( directive = directives[ attribute.n ] ) {\n\t\tattribute.t = directive.t;\n\t\tif ( directive.v ) attribute.v = directive.v;\n\t\tdelete attribute.n; // no name necessary\n\t\tparser.sp();\n\t\tif ( parser.nextChar() === '=' ) attribute.f = readAttributeValue( parser );\n\t}\n\n\t// decorators\n\telse if ( match = decoratorPattern.exec( attribute.n ) ) {\n\t\tattribute.n = match[1];\n\t\tattribute.t = DECORATOR;\n\t\treadArguments( parser, attribute );\n\t}\n\n\t// transitions\n\telse if ( match = transitionPattern.exec( attribute.n ) ) {\n\t\tattribute.n = match[1];\n\t\tattribute.t = TRANSITION;\n\t\treadArguments( parser, attribute );\n\t\tattribute.v = match[2] === 'in-out' ? 't0' : match[2] === 'in' ? 't1' : 't2';\n\t}\n\n\t// on-click etc\n\telse if ( match = eventPattern.exec( attribute.n ) ) {\n\t\tattribute.n = splitEvent( match[1] );\n\t\tattribute.t = EVENT;\n\n\t\tparser.inEvent = true;\n\n\t\t// check for a proxy event\n\t\tif ( !readProxyEvent( parser, attribute ) ) {\n\t\t\t// otherwise, it's an expression\n\t\t\treadArguments( parser, attribute, true );\n\t\t} else if ( reservedEventNames.test( attribute.f ) ) {\n\t\t\tparser.pos -= attribute.f.length;\n\t\t\tparser.error( 'Cannot use reserved event names (change, reset, teardown, update, construct, config, init, render, unrender, complete, detach, insert, destruct, attachchild, detachchild)' );\n\t\t}\n\n\t\tparser.inEvent = false;\n\t}\n\n\t// bound directives\n\telse if ( match = boundPattern.exec( attribute.n ) ){\n\t\tconst bind = match[2] === 'bind';\n\t\tattribute.n = bind ? match[3] : match[1];\n\t\tattribute.t = ATTRIBUTE;\n\t\treadArguments( parser, attribute, false, true );\n\n\t\tif ( !attribute.f && bind ) {\n\t\t\tattribute.f = [{ t: INTERPOLATOR, r: match[3] }];\n\t\t}\n\t}\n\n\telse {\n\t\tparser.sp();\n\t\tconst value = parser.nextChar() === '=' ? readAttributeValue( parser ) : null;\n\t\tattribute.f = value != null ? value : attribute.f;\n\n\t\tif ( parser.sanitizeEventAttributes && onPattern.test( attribute.n ) ) {\n\t\t\treturn { exclude: true };\n\t\t} else {\n\t\t\tattribute.f = attribute.f || ( attribute.f === '' ? '' : 0 );\n\t\t\tattribute.t = ATTRIBUTE;\n\t\t}\n\t}\n\n\treturn attribute;\n}\n\nfunction readProxyEvent ( parser, attribute ) {\n\tconst start = parser.pos;\n\tif ( !parser.matchString( '=' ) ) parser.error( `Missing required directive arguments` );\n\n\tconst quote = parser.matchString( `'` ) || parser.matchString( `\""` );\n\tparser.sp();\n\tconst proxy = parser.matchPattern( proxyEvent );\n\n\tif ( proxy !== undefined ) {\n\t\tif ( quote ) {\n\t\t\tparser.sp();\n\t\t\tif ( !parser.matchString( quote ) ) parser.pos = start;\n\t\t\telse return ( attribute.f = proxy ) || true;\n\t\t} else if ( !parser.matchPattern( whitespace ) ) {\n\t\t\tparser.pos = start;\n\t\t} else {\n\t\t\treturn ( attribute.f = proxy ) || true;\n\t\t}\n\t} else {\n\t\tparser.pos = start;\n\t}\n}\n\nfunction readArguments ( parser, attribute, required = false, single = false ) {\n\tparser.sp();\n\tif ( !parser.matchString( '=' ) ) {\n\t\tif ( required ) parser.error( `Missing required directive arguments` );\n\t\treturn;\n\t}\n\tparser.sp();\n\n\tconst quote = parser.matchString( '\""' ) || parser.matchString( \""'\"" );\n\tconst spread = parser.spreadArgs;\n\tparser.spreadArgs = true;\n\tparser.inUnquotedAttribute = !quote;\n\tconst expr = single ? readExpressionOrReference( parser, [ quote || ' ', '/', '>' ] ) : { m: readExpressionList( parser ), t: ARRAY_LITERAL };\n\tparser.inUnquotedAttribute = false;\n\tparser.spreadArgs = spread;\n\n\tif ( quote ) {\n\t\tparser.sp();\n\t\tif ( parser.matchString( quote ) !== quote ) parser.error( `Expected matching quote '${quote}'` );\n\t}\n\n\tif ( single ) {\n\t\tconst interpolator = { t: INTERPOLATOR };\n\t\trefineExpression( expr, interpolator );\n\t\tattribute.f = [interpolator];\n\t} else {\n\t\tattribute.f = flattenExpression( expr );\n\t}\n}\n"",""import { REFERENCE, BRACKETED, MEMBER, REFINEMENT } from 'config/types';\nimport flattenExpression from './flattenExpression';\n\nexport default function refineExpression ( expression, mustache ) {\n\tlet referenceExpression;\n\n\tif ( expression ) {\n\t\twhile ( expression.t === BRACKETED && expression.x ) {\n\t\t\texpression = expression.x;\n\t\t}\n\n\t\tif ( expression.t === REFERENCE ) {\n\t\t\tconst n = expression.n;\n\t\t\tif ( !~n.indexOf( '@context' ) ) {\n\t\t\t\tmustache.r = expression.n;\n\t\t\t} else {\n\t\t\t\tmustache.x = flattenExpression( expression );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( referenceExpression = getReferenceExpression( expression ) ) {\n\t\t\t\tmustache.rx = referenceExpression;\n\t\t\t} else {\n\t\t\t\tmustache.x = flattenExpression( expression );\n\t\t\t}\n\t\t}\n\n\t\treturn mustache;\n\t}\n}\n\n// TODO refactor this! it's bewildering\nfunction getReferenceExpression ( expression ) {\n\tconst members = [];\n\tlet refinement;\n\n\twhile ( expression.t === MEMBER && expression.r.t === REFINEMENT ) {\n\t\trefinement = expression.r;\n\n\t\tif ( refinement.x ) {\n\t\t\tif ( refinement.x.t === REFERENCE ) {\n\t\t\t\tmembers.unshift( refinement.x );\n\t\t\t} else {\n\t\t\t\tmembers.unshift( flattenExpression( refinement.x ) );\n\t\t\t}\n\t\t} else {\n\t\t\tmembers.unshift( refinement.n );\n\t\t}\n\n\t\texpression = expression.x;\n\t}\n\n\tif ( expression.t !== REFERENCE ) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tr: expression.n,\n\t\tm: members\n\t};\n}\n"",""import { REFERENCE, BOOLEAN_LITERAL, GLOBAL, NUMBER_LITERAL, REGEXP_LITERAL, STRING_LITERAL, ARRAY_LITERAL, OBJECT_LITERAL, KEY_VALUE_PAIR, PREFIX_OPERATOR, INFIX_OPERATOR, INVOCATION, BRACKETED, MEMBER, REFINEMENT, CONDITIONAL } from 'config/types';\nimport { isObject, isString } from 'utils/is';\n\nexport default function flattenExpression ( expression ) {\n\tlet refs;\n\tlet count = 0;\n\n\textractRefs( expression, refs = [] );\n\tconst stringified = stringify( expression );\n\n\treturn {\n\t\tr: refs,\n\t\ts: getVars(stringified)\n\t};\n\n\tfunction getVars(expr) {\n\t\tconst vars = [];\n\t\tfor ( let i = count - 1; i >= 0; i-- ) {\n\t\t\tvars.push( `x$${i}` );\n\t\t}\n\t\treturn vars.length ? `(function(){var ${vars.join(',')};return(${expr});})()` : expr;\n\t}\n\n\tfunction stringify ( node ) {\n\t\tif ( isString( node ) ) {\n\t\t\treturn node;\n\t\t}\n\n\t\tswitch ( node.t ) {\n\t\t\tcase BOOLEAN_LITERAL:\n\t\t\tcase GLOBAL:\n\t\t\tcase NUMBER_LITERAL:\n\t\t\tcase REGEXP_LITERAL:\n\t\t\t\treturn node.v;\n\n\t\t\tcase STRING_LITERAL:\n\t\t\t\treturn JSON.stringify( String( node.v ) );\n\n\t\t\tcase ARRAY_LITERAL:\n\t\t\t\tif ( node.m && hasSpread( node.m )) {\n\t\t\t\t\treturn `[].concat(${ makeSpread( node.m, '[', ']', stringify ) })`;\n\t\t\t\t} else {\n\t\t\t\t\treturn '[' + ( node.m ? node.m.map( stringify ).join( ',' ) : '' ) + ']';\n\t\t\t\t}\n\n\t\t\tcase OBJECT_LITERAL:\n\t\t\t\tif ( node.m && hasSpread( node.m ) ) {\n\t\t\t\t\treturn `Object.assign({},${ makeSpread( node.m, '{', '}', stringifyPair) })`;\n\t\t\t\t} else {\n\t\t\t\t\treturn '{' + ( node.m ? node.m.map( n => `${ n.k }:${ stringify( n.v ) }` ).join( ',' ) : '' ) + '}';\n\t\t\t\t}\n\n\t\t\tcase PREFIX_OPERATOR:\n\t\t\t\treturn ( node.s === 'typeof' ? 'typeof ' : node.s ) + stringify( node.o );\n\n\t\t\tcase INFIX_OPERATOR:\n\t\t\t\treturn stringify( node.o[0] ) + ( node.s.substr( 0, 2 ) === 'in' ? ' ' + node.s + ' ' : node.s ) + stringify( node.o[1] );\n\n\t\t\tcase INVOCATION:\n\t\t\t\tif ( node.o && hasSpread( node.o ) ) {\n\t\t\t\t\tconst id = count++;\n\t\t\t\t\treturn `(x$${ id }=${ stringify(node.x) }).apply(x$${ id },${ stringify({ t: ARRAY_LITERAL, m: node.o }) })`;\n\t\t\t\t} else {\n\t\t\t\t\treturn stringify( node.x ) + '(' + ( node.o ? node.o.map( stringify ).join( ',' ) : '' ) + ')';\n\t\t\t\t}\n\n\t\t\tcase BRACKETED:\n\t\t\t\treturn '(' + stringify( node.x ) + ')';\n\n\t\t\tcase MEMBER:\n\t\t\t\treturn stringify( node.x ) + stringify( node.r );\n\n\t\t\tcase REFINEMENT:\n\t\t\t\treturn ( node.n ? '.' + node.n : '[' + stringify( node.x ) + ']' );\n\n\t\t\tcase CONDITIONAL:\n\t\t\t\treturn stringify( node.o[0] ) + '?' + stringify( node.o[1] ) + ':' + stringify( node.o[2] );\n\n\t\t\tcase REFERENCE:\n\t\t\t\treturn '_' + refs.indexOf( node.n );\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'Expected legal JavaScript' );\n\t\t}\n\t}\n\n\tfunction stringifyPair ( node ) { return node.p ? stringify( node.k ) : `${ node.k }:${ stringify( node.v ) }`; }\n\n\tfunction makeSpread ( list, open, close, fn ) {\n\t\tconst out = list.reduce( ( a, c ) => {\n\t\t\tif ( c.p ) {\n\t\t\t\ta.str += `${ a.open ? close + ',' : a.str.length ? ',' : '' }${ fn( c ) }`;\n\t\t\t} else {\n\t\t\t\ta.str += `${ !a.str.length ? open : !a.open ? ',' + open : ',' }${ fn( c ) }`;\n\t\t\t}\n\t\t\ta.open = !c.p;\n\t\t\treturn a;\n\t\t}, { open: false, str: '' } );\n\t\tif ( out.open ) out.str += close;\n\t\treturn out.str;\n\t}\n}\n\nfunction hasSpread ( list ) {\n\tfor ( let i = 0; i < list.length; i++ ) {\n\t\tif ( list[i].p ) return true;\n\t}\n\n\treturn false;\n}\n\n// TODO maybe refactor this?\nfunction extractRefs ( node, refs ) {\n\tif ( node.t === REFERENCE && isString( node.n ) ) {\n\t\tif ( !~refs.indexOf( node.n ) ) {\n\t\t\trefs.unshift( node.n );\n\t\t}\n\t}\n\n\tconst list = node.o || node.m;\n\tif ( list ) {\n\t\tif ( isObject( list ) ) {\n\t\t\textractRefs( list, refs );\n\t\t} else {\n\t\t\tlet i = list.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\textractRefs( list[i], refs );\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( node.k && node.t === KEY_VALUE_PAIR && !isString( node.k ) ) {\n\t\textractRefs( node.k, refs );\n\t}\n\n\tif ( node.x ) {\n\t\textractRefs( node.x, refs );\n\t}\n\n\tif ( node.r ) {\n\t\textractRefs( node.r, refs );\n\t}\n\n\tif ( node.v ) {\n\t\textractRefs( node.v, refs );\n\t}\n}\n"",""import { REFERENCE } from 'config/types';\nimport readExpression from './readExpression';\nimport readReference from './expressions/primary/readReference';\n\nexport default function readExpressionOrReference ( parser, expectedFollowers ) {\n\tconst start = parser.pos;\n\tconst expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\t// valid reference but invalid expression e.g. `{{new}}`?\n\t\tconst ref = parser.matchPattern( /^(\\w+)/ );\n\t\tif ( ref ) {\n\t\t\treturn {\n\t\t\t\tt: REFERENCE,\n\t\t\t\tn: ref\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfor ( let i = 0; i < expectedFollowers.length; i += 1 ) {\n\t\tif ( parser.remaining().substr( 0, expectedFollowers[i].length ) === expectedFollowers[i] ) {\n\t\t\treturn expression;\n\t\t}\n\t}\n\n\tparser.pos = start;\n\treturn readReference( parser );\n}\n"",""import { expectedExpression } from './errors';\nimport readExpression from '../../readExpression';\nimport { spreadPattern } from './patterns';\n\nexport default function readExpressionList ( parser, spread ) {\n\tlet isSpread;\n\tconst expressions = [];\n\n\tconst pos = parser.pos;\n\n\tdo {\n\t\tparser.sp();\n\n\t\tif ( spread ) {\n\t\t\tisSpread = parser.matchPattern( spreadPattern );\n\t\t}\n\n\t\tconst expr = readExpression( parser );\n\n\t\tif ( expr === null && expressions.length ) {\n\t\t\tparser.error( expectedExpression );\n\t\t} else if ( expr === null ) {\n\t\t\tparser.pos = pos;\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( isSpread ) {\n\t\t\texpr.p = true;\n\t\t}\n\n\t\texpressions.push( expr );\n\n\t\tparser.sp();\n\t} while ( parser.matchString( ',' ) );\n\n\treturn expressions;\n}\n"",""import readConditional from './expressions/readConditional';\nimport readReference from './expressions/primary/readReference';\n\nexport default function readExpression ( parser ) {\n\t// if eval is false, no expressions\n\tif ( parser.allowExpressions === false ) {\n\t\tconst ref = readReference( parser );\n\t\tparser.sp();\n\t\treturn ref;\n\t}\n\n\t// The conditional operator is the lowest precedence operator (except yield,\n\t// assignment operators, and commas, none of which are supported), so we\n\t// start there. If it doesn't match, it 'falls through' to progressively\n\t// higher precedence operators, until it eventually matches (or fails to\n\t// match) a 'primary' - a literal or a reference. This way, the abstract syntax\n\t// tree has everything in its proper place, i.e. 2 + 3 * 4 === 14, not 20.\n\treturn readConditional( parser );\n}\n"",""import { CONDITIONAL } from 'config/types';\nimport readLogicalOr from './readLogicalOr';\nimport { expectedExpression } from './shared/errors';\nimport readExpression from '../readExpression';\n\n// The conditional operator is the lowest precedence operator, so we start here\nexport default function getConditional ( parser ) {\n\tconst expression = readLogicalOr( parser );\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tconst start = parser.pos;\n\n\tparser.sp();\n\n\tif ( !parser.matchString( '?' ) ) {\n\t\tparser.pos = start;\n\t\treturn expression;\n\t}\n\n\tparser.sp();\n\n\tconst ifTrue = readExpression( parser );\n\tif ( !ifTrue ) {\n\t\tparser.error( expectedExpression );\n\t}\n\n\tparser.sp();\n\n\tif ( !parser.matchString( ':' ) ) {\n\t\tparser.error( 'Expected \"":\""' );\n\t}\n\n\tparser.sp();\n\n\tconst ifFalse = readExpression( parser );\n\tif ( !ifFalse ) {\n\t\tparser.error( expectedExpression );\n\t}\n\n\treturn {\n\t\tt: CONDITIONAL,\n\t\to: [ expression, ifTrue, ifFalse ]\n\t};\n}\n"",""import { INFIX_OPERATOR } from 'config/types';\nimport readTypeof from './readTypeof';\n\nlet readLogicalOr;\n\nconst makeInfixSequenceMatcher = function ( symbol, fallthrough ) {\n\treturn function ( parser ) {\n\t\t// > and / have to be quoted\n\t\tif ( parser.inUnquotedAttribute && ( symbol === '>' || symbol === '/' ) ) return fallthrough( parser );\n\n\t\tlet start, left, right;\n\n\t\tleft = fallthrough( parser );\n\t\tif ( !left ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Loop to handle left-recursion in a case like `a * b * c` and produce\n\t\t// left association, i.e. `(a * b) * c`.  The matcher can't call itself\n\t\t// to parse `left` because that would be infinite regress.\n\t\twhile ( true ) {\n\t\t\tstart = parser.pos;\n\n\t\t\tparser.sp();\n\n\t\t\tif ( !parser.matchString( symbol ) ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\t// special case - in operator must not be followed by [a-zA-Z_$0-9]\n\t\t\tif ( symbol === 'in' && /[a-zA-Z_$0-9]/.test( parser.remaining().charAt( 0 ) ) ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\tparser.sp();\n\n\t\t\t// right operand must also consist of only higher-precedence operators\n\t\t\tright = fallthrough( parser );\n\t\t\tif ( !right ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\tleft = {\n\t\t\t\tt: INFIX_OPERATOR,\n\t\t\t\ts: symbol,\n\t\t\t\to: [ left, right ]\n\t\t\t};\n\n\t\t\t// Loop back around.  If we don't see another occurrence of the symbol,\n\t\t\t// we'll return left.\n\t\t}\n\t};\n};\n\n// create all infix sequence matchers, and return readLogicalOr\n(function() {\n\tlet i, len, matcher, fallthrough;\n\n\t// All the infix operators on order of precedence (source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)\n\t// Each sequence matcher will initially fall through to its higher precedence\n\t// neighbour, and only attempt to match if one of the higher precedence operators\n\t// (or, ultimately, a literal, reference, or bracketed expression) already matched\n\tconst infixOperators = '* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||'.split( ' ' );\n\n\t// A typeof operator is higher precedence than multiplication\n\tfallthrough = readTypeof;\n\tfor ( i = 0, len = infixOperators.length; i < len; i += 1 ) {\n\t\tmatcher = makeInfixSequenceMatcher( infixOperators[i], fallthrough );\n\t\tfallthrough = matcher;\n\t}\n\n\t// Logical OR is the fallthrough for the conditional matcher\n\treadLogicalOr = fallthrough;\n}());\n\nexport default readLogicalOr;\n"",""import { PREFIX_OPERATOR } from 'config/types';\nimport { expectedExpression } from './shared/errors';\nimport readMemberOrInvocation from './readMemberOrInvocation';\nimport readExpression from '../readExpression';\n\nlet readTypeOf;\n\nconst makePrefixSequenceMatcher = function ( symbol, fallthrough ) {\n\treturn function ( parser ) {\n\t\tlet expression;\n\n\t\tif ( expression = fallthrough( parser ) ) {\n\t\t\treturn expression;\n\t\t}\n\n\t\tif ( !parser.matchString( symbol ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tparser.sp();\n\n\t\texpression = readExpression( parser );\n\t\tif ( !expression ) {\n\t\t\tparser.error( expectedExpression );\n\t\t}\n\n\t\treturn {\n\t\t\ts: symbol,\n\t\t\to: expression,\n\t\t\tt: PREFIX_OPERATOR\n\t\t};\n\t};\n};\n\n// create all prefix sequence matchers, return readTypeOf\n(function() {\n\tlet i, len, matcher, fallthrough;\n\n\tconst prefixOperators = '! ~ + - typeof'.split( ' ' );\n\n\tfallthrough = readMemberOrInvocation;\n\tfor ( i = 0, len = prefixOperators.length; i < len; i += 1 ) {\n\t\tmatcher = makePrefixSequenceMatcher( prefixOperators[i], fallthrough );\n\t\tfallthrough = matcher;\n\t}\n\n\t// typeof operator is higher precedence than multiplication, so provides the\n\t// fallthrough for the multiplication sequence matcher we're about to create\n\t// (we're skipping void and delete)\n\treadTypeOf = fallthrough;\n}());\n\nexport default readTypeOf;\n"",""import { MEMBER, INVOCATION } from 'config/types';\nimport readPrimary from './readPrimary';\nimport readExpressionList from './shared/readExpressionList';\nimport readRefinement from './shared/readRefinement';\nimport { expectedParen } from './shared/errors';\n\nexport default function ( parser ) {\n\tlet expression = readPrimary( parser );\n\n\tif ( !expression ) return null;\n\n\twhile ( expression ) {\n\t\tconst refinement = readRefinement( parser );\n\t\tif ( refinement ) {\n\t\t\texpression = {\n\t\t\t\tt: MEMBER,\n\t\t\t\tx: expression,\n\t\t\t\tr: refinement\n\t\t\t};\n\t\t}\n\n\t\telse if ( parser.matchString( '(' ) ) {\n\t\t\tparser.sp();\n\t\t\tconst expressionList = readExpressionList( parser, true );\n\n\t\t\tparser.sp();\n\n\t\t\tif ( !parser.matchString( ')' ) ) {\n\t\t\t\tparser.error( expectedParen );\n\t\t\t}\n\n\t\t\texpression = {\n\t\t\t\tt: INVOCATION,\n\t\t\t\tx: expression\n\t\t\t};\n\n\t\t\tif ( expressionList ) expression.o = expressionList;\n\t\t}\n\n\t\telse {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn expression;\n}\n"",""import { REFINEMENT } from 'config/types';\nimport { expectedExpression } from './errors';\nimport { name as namePattern } from './patterns';\nimport readExpression from '../../readExpression';\n\nexport default function readRefinement ( parser ) {\n\t// some things call for strict refinement (partial names), meaning no space between reference and refinement\n\tif ( !parser.strictRefinement ) {\n\t\tparser.sp();\n\t}\n\n\t// \"".\"" name\n\tif ( parser.matchString( '.' ) ) {\n\t\tparser.sp();\n\n\t\tconst name = parser.matchPattern( namePattern );\n\t\tif ( name ) {\n\t\t\treturn {\n\t\t\t\tt: REFINEMENT,\n\t\t\t\tn: name\n\t\t\t};\n\t\t}\n\n\t\tparser.error( 'Expected a property name' );\n\t}\n\n\t// \""[\"" expression \""]\""\n\tif ( parser.matchString( '[' ) ) {\n\t\tparser.sp();\n\n\t\tconst expr = readExpression( parser );\n\t\tif ( !expr ) parser.error( expectedExpression );\n\n\t\tparser.sp();\n\n\t\tif ( !parser.matchString( ']' ) ) parser.error( `Expected ']'` );\n\n\t\treturn {\n\t\t\tt: REFINEMENT,\n\t\t\tx: expr\n\t\t};\n\t}\n\n\treturn null;\n}\n"",""import readLiteral from './primary/readLiteral';\nimport readReference from './primary/readReference';\nimport readBracketedExpression from './primary/readBracketedExpression';\n\nexport default function ( parser ) {\n\treturn readLiteral( parser )\n\t\t|| readReference( parser )\n\t\t|| readBracketedExpression( parser );\n}\n"",""import { BRACKETED } from 'src/config/types';\nimport { expectedExpression, expectedParen } from '../shared/errors';\nimport readExpression from '../../readExpression';\n\nexport default function readBracketedExpression ( parser ) {\n\tif ( !parser.matchString( '(' ) ) return null;\n\n\tparser.sp();\n\n\tconst expr = readExpression( parser );\n\n\tif ( !expr ) parser.error( expectedExpression );\n\n\tparser.sp();\n\n\tif ( !parser.matchString( ')' ) ) parser.error( expectedParen );\n\n\treturn {\n\t\tt: BRACKETED,\n\t\tx: expr\n\t};\n}\n"",""import { BRACKETED, GLOBAL, REFERENCE } from 'src/config/types';\nimport { normalise } from 'src/shared/keypaths';\nimport { legalReference, relaxedName } from '../shared/patterns';\n\n// if a reference is a browser global, we don't deference it later, so it needs special treatment\nconst globals = /^(?:Array|console|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null|Object|Number|String|Boolean)\\b/;\n\n// keywords are not valid references, with the exception of `this`\nconst keywords = /^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/;\n\nconst prefixPattern = /^(?:\\@\\.|\\@|~\\/|(?:\\^\\^\\/(?:\\^\\^\\/)*(?:\\.\\.\\/)*)|(?:\\.\\.\\/)+|\\.\\/(?:\\.\\.\\/)*|\\.)/;\nconst specials = /^(key|index|keypath|rootpath|this|global|shared|context|event|node|local|style)/;\n\nexport default function readReference ( parser ) {\n\tlet prefix, name, global, reference, lastDotIndex;\n\n\tconst startPos = parser.pos;\n\n\tprefix = parser.matchPattern( prefixPattern ) || '';\n\tname = ( !prefix && parser.relaxedNames && parser.matchPattern( relaxedName ) ) ||\n\t\t\tparser.matchPattern( legalReference );\n\tconst actual = prefix.length + ( ( name && name.length ) || 0 );\n\n\tif ( prefix === '@.' ) {\n\t\tprefix = '@';\n\t\tif ( name ) name = 'this.' + name;\n\t\telse name = 'this';\n\t}\n\n\tif ( !name && prefix ) {\n\t\tname = prefix;\n\t\tprefix = '';\n\t}\n\n\tif ( !name ) {\n\t\treturn null;\n\t}\n\n\tif ( prefix === '@' ) {\n\t\tif ( !specials.test( name ) ) {\n\t\t\tparser.error( `Unrecognized special reference @${name}` );\n\t\t} else if ( ( ~name.indexOf( 'event' ) || ~name.indexOf( 'node' ) ) && !parser.inEvent ) {\n\t\t\tparser.error( `@event and @node are only valid references within an event directive` );\n\t\t} else if ( ~name.indexOf( 'context' ) ) {\n\t\t\tparser.pos = parser.pos - ( name.length - 7 );\n\t\t\treturn {\n\t\t\t\tt: BRACKETED,\n\t\t\t\tx: {\n\t\t\t\t\tt: REFERENCE,\n\t\t\t\t\tn: '@context'\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\n\t// bug out if it's a keyword (exception for ancestor/restricted refs - see https://github.com/ractivejs/ractive/issues/1497)\n\tif ( !prefix && !parser.relaxedNames && keywords.test( name ) ) {\n\t\tparser.pos = startPos;\n\t\treturn null;\n\t}\n\n\t// if this is a browser global, stop here\n\tif ( !prefix && globals.test( name ) ) {\n\t\tglobal = globals.exec( name )[0];\n\t\tparser.pos = startPos + global.length;\n\n\t\treturn {\n\t\t\tt: GLOBAL,\n\t\t\tv: global\n\t\t};\n\t}\n\n\treference = ( prefix || '' ) + normalise( name );\n\n\tif ( parser.matchString( '(' ) ) {\n\t\t// if this is a method invocation (as opposed to a function) we need\n\t\t// to strip the method name from the reference combo, else the context\n\t\t// will be wrong\n\t\t// but only if the reference was actually a member and not a refinement\n\t\tlastDotIndex = reference.lastIndexOf( '.' );\n\t\tif ( lastDotIndex !== -1 && name[ name.length - 1 ] !== ']' ) {\n\t\t\tif ( lastDotIndex === 0 ) {\n\t\t\t\treference = '.';\n\t\t\t\tparser.pos = startPos;\n\t\t\t} else {\n\t\t\t\tconst refLength = reference.length;\n\t\t\t\treference = reference.substr( 0, lastDotIndex );\n\t\t\t\tparser.pos = startPos + ( actual - ( refLength - lastDotIndex ) );\n\t\t\t}\n\t\t} else {\n\t\t\tparser.pos -= 1;\n\t\t}\n\t}\n\n\treturn {\n\t\tt: REFERENCE,\n\t\tn: reference.replace( /^this\\./, './' ).replace( /^this$/, '.' )\n\t};\n}\n"",""import readNumberLiteral from './literal/readNumberLiteral';\nimport readBooleanLiteral from './literal/readBooleanLiteral';\nimport readStringLiteral from './literal/readStringLiteral';\nimport readTemplateStringLiteral from './literal/readTemplateStringLiteral';\nimport readObjectLiteral from './literal/readObjectLiteral';\nimport readArrayLiteral from './literal/readArrayLiteral';\nimport readRegexpLiteral from './literal/readRegexpLiteral';\n\nexport default function readLiteral ( parser ) {\n\treturn readNumberLiteral( parser )         ||\n\t       readBooleanLiteral( parser )        ||\n\t       readStringLiteral( parser )         ||\n\t       readTemplateStringLiteral( parser ) ||\n\t       readObjectLiteral( parser )         ||\n\t       readArrayLiteral( parser )          ||\n\t       readRegexpLiteral( parser );\n}\n"",""import { ARRAY_LITERAL } from 'src/config/types';\nimport readExpressionList from '../../shared/readExpressionList';\n\nexport default function ( parser ) {\n\tconst start = parser.pos;\n\n\t// allow whitespace before '['\n\tparser.sp();\n\n\tif ( !parser.matchString( '[' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tconst expressionList = readExpressionList( parser, true );\n\n\tif ( !parser.matchString( ']' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: ARRAY_LITERAL,\n\t\tm: expressionList\n\t};\n}\n"",""import { OBJECT_LITERAL } from '../../../../../config/types';\nimport readKeyValuePairs from './objectLiteral/keyValuePairs';\n\nexport default function ( parser ) {\n\tconst start = parser.pos;\n\n\t// allow whitespace\n\tparser.sp();\n\n\tif ( !parser.matchString( '{' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tconst keyValuePairs = readKeyValuePairs( parser );\n\n\t// allow whitespace between final value and '}'\n\tparser.sp();\n\n\tif ( !parser.matchString( '}' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: OBJECT_LITERAL,\n\t\tm: keyValuePairs\n\t};\n}\n"",""import getKeyValuePair from './keyValuePair';\n\nexport default function readKeyValuePairs ( parser ) {\n\tconst start = parser.pos;\n\n\tconst pair = getKeyValuePair( parser );\n\tif ( pair === null ) {\n\t\treturn null;\n\t}\n\n\tconst pairs = [ pair ];\n\n\tif ( parser.matchString( ',' ) ) {\n\t\tconst keyValuePairs = readKeyValuePairs( parser );\n\n\t\tif ( !keyValuePairs ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn pairs.concat( keyValuePairs );\n\t}\n\n\treturn pairs;\n}\n"",""import { KEY_VALUE_PAIR, REFERENCE } from 'src/config/types';\nimport readKey from '../../../shared/readKey';\nimport readExpression from '../../../../readExpression';\nimport { name as namePattern, spreadPattern } from '../../../shared/patterns';\n\nexport default function readKeyValuePair ( parser ) {\n\tlet spread;\n\tconst start = parser.pos;\n\n\t// allow whitespace between '{' and key\n\tparser.sp();\n\n\tconst refKey = parser.nextChar() !== '\\'' && parser.nextChar() !== '\""';\n\tif ( refKey ) spread = parser.matchPattern( spreadPattern );\n\n\tconst key = spread ? readExpression( parser ) : readKey( parser );\n\tif ( key === null ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace between key and ':'\n\tparser.sp();\n\n\t// es2015 shorthand property\n\tif ( refKey && ( parser.nextChar() === ',' || parser.nextChar() === '}' ) ) {\n\t\tif ( !spread && !namePattern.test( key ) ) {\n\t\t\tparser.error( `Expected a valid reference, but found '${key}' instead.` );\n\t\t}\n\n\t\tconst pair = {\n\t\t\tt: KEY_VALUE_PAIR,\n\t\t\tk: key,\n\t\t\tv: {\n\t\t\t\tt: REFERENCE,\n\t\t\t\tn: key\n\t\t\t}\n\t\t};\n\n\t\tif ( spread ) {\n\t\t\tpair.p = true;\n\t\t}\n\n\t\treturn pair;\n\t}\n\n\n\t// next character must be ':'\n\tif ( !parser.matchString( ':' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace between ':' and value\n\tparser.sp();\n\n\t// next expression must be a, well... expression\n\tconst value = readExpression( parser );\n\tif ( value === null ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: KEY_VALUE_PAIR,\n\t\tk: key,\n\t\tv: value\n\t};\n}\n"",""import readStringLiteral from '../primary/literal/readStringLiteral';\nimport readNumberLiteral from '../primary/literal/readNumberLiteral';\nimport { name as namePattern } from './patterns';\n\nconst identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n// http://mathiasbynens.be/notes/javascript-properties\n// can be any name, string literal, or number literal\nexport default function readKey ( parser ) {\n\tlet token;\n\n\tif ( token = readStringLiteral( parser ) ) {\n\t\treturn identifier.test( token.v ) ? token.v : '\""' + token.v.replace( /\""/g, '\\\\\""' ) + '\""';\n\t}\n\n\tif ( token = readNumberLiteral( parser ) ) {\n\t\treturn token.v;\n\t}\n\n\tif ( token = parser.matchPattern( namePattern ) ) {\n\t\treturn token;\n\t}\n\n\treturn null;\n}\n"",""export const name = /^[a-zA-Z_$][a-zA-Z_$0-9]*/;\nexport const spreadPattern = /^\\s*\\.{3}/;\nexport const legalReference = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:\\.(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nexport const relaxedName = /^[a-zA-Z_$][-\\/a-zA-Z_$0-9]*(?:\\.(?:[a-zA-Z_$][-\\/a-zA-Z_$0-9]*))*/;\n"",""import readExpression from '../../../readExpression';\nimport { STRING_LITERAL, BRACKETED, INFIX_OPERATOR } from '../../../../../config/types';\nimport { escapeSequencePattern, lineContinuationPattern } from './stringLiteral/makeQuotedStringMatcher';\n\n// Match one or more characters until: \"", ', or \\\nconst stringMiddlePattern = /^[^`\""\\\\\\$]+?(?:(?=[`\""\\\\\\$]))/;\n\nconst escapes = /[\\r\\n\\t\\b\\f]/g;\nfunction getString ( literal ) {\n\treturn JSON.parse( `\""${literal.replace( escapes, escapeChar )}\""` );\n}\n\nfunction escapeChar ( c ) {\n\tswitch ( c ) {\n\t\tcase '\\n': return '\\\\n';\n\t\tcase '\\r': return '\\\\r';\n\t\tcase '\\t': return '\\\\t';\n\t\tcase '\\b': return '\\\\b';\n\t\tcase '\\f': return '\\\\f';\n\t}\n}\n\nexport default function readTemplateStringLiteral ( parser ) {\n\tif ( !parser.matchString( '`' ) ) return null;\n\n\tlet literal = '';\n\tlet done = false;\n\tlet next;\n\tconst parts = [];\n\n\twhile ( !done ) {\n\t\tnext = parser.matchPattern( stringMiddlePattern ) || parser.matchPattern( escapeSequencePattern ) ||\n\t\t\tparser.matchString( '$' ) || parser.matchString( '\""' );\n\t\tif ( next ) {\n\t\t\tif ( next === `\""` ) {\n\t\t\t\tliteral += `\\\\\""`;\n\t\t\t} else if ( next === '\\\\`' ) {\n\t\t\t\tliteral += '`';\n\t\t\t} else if ( next === '$' ) {\n\t\t\t\tif ( parser.matchString( '{' ) ) {\n\t\t\t\t\tparts.push({ t: STRING_LITERAL, v: getString( literal ) });\n\t\t\t\t\tliteral = '';\n\n\t\t\t\t\tparser.sp();\n\t\t\t\t\tconst expr = readExpression( parser );\n\n\t\t\t\t\tif ( !expr ) parser.error( 'Expected valid expression' );\n\n\t\t\t\t\tparts.push({ t: BRACKETED, x: expr });\n\n\t\t\t\t\tparser.sp();\n\t\t\t\t\tif ( !parser.matchString( '}' ) ) parser.error( `Expected closing '}' after interpolated expression` );\n\t\t\t\t} else {\n\t\t\t\t\tliteral += '$';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tliteral += next;\n\t\t\t}\n\t\t} else {\n\t\t\tnext = parser.matchPattern( lineContinuationPattern );\n\t\t\tif ( next ) {\n\t\t\t\t// convert \\(newline-like) into a \\u escape, which is allowed in JSON\n\t\t\t\tliteral += '\\\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );\n\t\t\t} else {\n\t\t\t\tdone = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( literal.length ) parts.push({ t: STRING_LITERAL, v: getString( literal ) });\n\n\tif ( !parser.matchString( '`' ) ) parser.error( \""Expected closing '`'\"" );\n\n\tif ( parts.length === 1 ) {\n\t\treturn parts[0];\n\t} else {\n\t\tlet result = parts.pop();\n\t\tlet part;\n\n\t\twhile ( part = parts.pop() ) {\n\t\t\tresult = {\n\t\t\t\tt: INFIX_OPERATOR,\n\t\t\t\ts: '+',\n\t\t\t\to: [ part, result ]\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tt: BRACKETED,\n\t\t\tx: result\n\t\t};\n\t}\n}\n"",""import { STRING_LITERAL } from '../../../../../config/types';\nimport makeQuotedStringMatcher from './stringLiteral/makeQuotedStringMatcher';\n\nconst singleMatcher = makeQuotedStringMatcher( `\""` );\nconst doubleMatcher = makeQuotedStringMatcher( `'` );\n\nexport default function ( parser ) {\n\tconst start = parser.pos;\n\tconst quote = parser.matchString( `'` ) || parser.matchString( `\""` );\n\n\tif ( quote ) {\n\t\tconst string = ( quote === `'` ? singleMatcher : doubleMatcher )( parser );\n\n\t\tif ( !parser.matchString( quote ) ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: STRING_LITERAL,\n\t\t\tv: string\n\t\t};\n\t}\n\n\treturn null;\n}\n"",""// Match one or more characters until: \"", ', \\, or EOL/EOF.\n// EOL/EOF is written as (?!.) (meaning there's no non-newline char next).\nconst stringMiddlePattern = /^(?=.)[^\""'\\\\]+?(?:(?!.)|(?=[\""'\\\\]))/;\n\n// Match one escape sequence, including the backslash.\nexport const escapeSequencePattern = /^\\\\(?:[`'\""\\\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/;\n\n// Match one ES5 line continuation (backslash + line terminator).\nexport const lineContinuationPattern = /^\\\\(?:\\r\\n|[\\u000A\\u000D\\u2028\\u2029])/;\n\n// Helper for defining getDoubleQuotedString and getSingleQuotedString.\nexport default function ( okQuote ) {\n\treturn function ( parser ) {\n\t\tlet literal = '\""';\n\t\tlet done = false;\n\t\tlet next;\n\n\t\twhile ( !done ) {\n\t\t\tnext = ( parser.matchPattern( stringMiddlePattern ) || parser.matchPattern( escapeSequencePattern ) ||\n\t\t\t\tparser.matchString( okQuote ) );\n\t\t\tif ( next ) {\n\t\t\t\tif ( next === `\""` ) {\n\t\t\t\t\tliteral += `\\\\\""`;\n\t\t\t\t} else if ( next === `\\\\'` ) {\n\t\t\t\t\tliteral += `'`;\n\t\t\t\t} else {\n\t\t\t\t\tliteral += next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnext = parser.matchPattern( lineContinuationPattern );\n\t\t\t\tif ( next ) {\n\t\t\t\t\t// convert \\(newline-like) into a \\u escape, which is allowed in JSON\n\t\t\t\t\tliteral += '\\\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );\n\t\t\t\t} else {\n\t\t\t\t\tdone = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tliteral += '\""';\n\n\t\t// use JSON.parse to interpret escapes\n\t\treturn JSON.parse( literal );\n\t};\n}\n"",""import { BOOLEAN_LITERAL } from '../../../../../config/types';\n\nexport default function readBooleanLiteral ( parser ) {\n\tconst remaining = parser.remaining();\n\n\tif ( remaining.substr( 0, 4 ) === 'true' ) {\n\t\tparser.pos += 4;\n\t\treturn {\n\t\t\tt: BOOLEAN_LITERAL,\n\t\t\tv: 'true'\n\t\t};\n\t}\n\n\tif ( remaining.substr( 0, 5 ) === 'false' ) {\n\t\tparser.pos += 5;\n\t\treturn {\n\t\t\tt: BOOLEAN_LITERAL,\n\t\t\tv: 'false'\n\t\t};\n\t}\n\n\treturn null;\n}\n"",""import { NUMBER_LITERAL } from '../../../../../config/types';\n\n// bulletproof number regex from https://gist.github.com/Rich-Harris/7544330\nconst numberPattern = /^(?:[+-]?)0*(?:(?:(?:[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\n\nexport default function readNumberLiteral ( parser ) {\n\tlet result;\n\n\tif ( result = parser.matchPattern( numberPattern ) ) {\n\t\treturn {\n\t\t\tt: NUMBER_LITERAL,\n\t\t\tv: result\n\t\t};\n\t}\n\n\treturn null;\n}\n"",""export const expectedExpression = 'Expected a JavaScript expression';\nexport const expectedParen = 'Expected closing paren';\n"",""import { keys } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\n// https://github.com/kangax/html-minifier/issues/63#issuecomment-37763316\nexport const booleanAttributes = /^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;\nexport const voidElementNames = /^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i;\n\nconst htmlEntities = { quot: 34, amp: 38, apos: 39, lt: 60, gt: 62, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190, iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221, THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252, yacute: 253, thorn: 254, yuml: 255, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, fnof: 402, circ: 710, tilde: 732, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949, zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, bull: 8226, hellip: 8230, permil: 8240, prime: 8242, Prime: 8243, lsaquo: 8249, rsaquo: 8250, oline: 8254, frasl: 8260, euro: 8364, image: 8465, weierp: 8472, real: 8476, trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744, cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830\t};\nconst controlCharacters = [ 8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376 ];\nconst entityPattern = new RegExp( '&(#?(?:x[\\\\w\\\\d]+|\\\\d+|' + keys( htmlEntities ).join( '|' ) + '));?', 'g' );\nconst codePointSupport = isFunction( String.fromCodePoint );\nconst codeToChar = codePointSupport ? String.fromCodePoint : String.fromCharCode;\n\nexport function decodeCharacterReferences ( html ) {\n\treturn html.replace( entityPattern, ( match, entity ) => {\n\t\tlet code;\n\n\t\t// Handle named entities\n\t\tif ( entity[0] !== '#' ) {\n\t\t\tcode = htmlEntities[ entity ];\n\t\t} else if ( entity[1] === 'x' ) {\n\t\t\tcode = parseInt( entity.substring( 2 ), 16 );\n\t\t} else {\n\t\t\tcode = parseInt( entity.substring( 1 ), 10 );\n\t\t}\n\n\t\tif ( !code ) {\n\t\t\treturn match;\n\t\t}\n\n\t\treturn codeToChar( validateCode( code ) );\n\t});\n}\n\nconst lessThan = /</g;\nconst greaterThan = />/g;\nconst amp = /&/g;\nconst invalid = 65533;\n\nexport function escapeHtml ( str ) {\n\treturn str\n\t\t.replace( amp, '&amp;' )\n\t\t.replace( lessThan, '&lt;' )\n\t\t.replace( greaterThan, '&gt;' );\n}\n\n// some code points are verboten. If we were inserting HTML, the browser would replace the illegal\n// code points with alternatives in some cases - since we're bypassing that mechanism, we need\n// to replace them ourselves\n//\n// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters\n/* istanbul ignore next */\nfunction validateCode ( code ) {\n\tif ( !code ) {\n\t\treturn invalid;\n\t}\n\n\t// line feed becomes generic whitespace\n\tif ( code === 10 ) {\n\t\treturn 32;\n\t}\n\n\t// ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)\n\tif ( code < 128 ) {\n\t\treturn code;\n\t}\n\n\t// code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need\n\t// to correct the mistake or we'll end up with missing € signs and so on\n\tif ( code <= 159 ) {\n\t\treturn controlCharacters[ code - 128 ];\n\t}\n\n\t// basic multilingual plane\n\tif ( code < 55296 ) {\n\t\treturn code;\n\t}\n\n\t// UTF-16 surrogate halves\n\tif ( code <= 57343 ) {\n\t\treturn invalid;\n\t}\n\n\t// rest of the basic multilingual plane\n\tif ( code <= 65535 ) {\n\t\treturn code;\n\t} else if ( !codePointSupport ) {\n\t\treturn invalid;\n\t}\n\n\t// supplementary multilingual plane 0x10000 - 0x1ffff\n\tif ( code >= 65536 && code <= 131071 ) {\n\t\treturn code;\n\t}\n\n\t// supplementary ideographic plane 0x20000 - 0x2ffff\n\tif ( code >= 131072 && code <= 196607 ) {\n\t\treturn code;\n\t}\n\n\treturn invalid;\n}\n"",""import escapeRegExp from 'utils/escapeRegExp';\n\nconst regExpCache = {};\n\nexport default function ( haystack, needles ) {\n\treturn haystack.search( regExpCache[needles.join()] || ( regExpCache[needles.join()] = new RegExp( needles.map( escapeRegExp ).join( '|' ) ) ) );\n}\n"",""const pattern = /[-/\\\\^$*+?.()|[\\]{}]/g;\n\nexport default function escapeRegExp ( str ) {\n\treturn str.replace( pattern, '\\\\$&' );\n}\n"",""import { REGEXP_LITERAL } from '../../../../../config/types';\n\nconst regexpPattern = /^(\\/(?:[^\\n\\r\\u2028\\u2029/\\\\[]|\\\\.|\\[(?:[^\\n\\r\\u2028\\u2029\\]\\\\]|\\\\.)*])+\\/(?:([gimuy])(?![a-z]*\\2))*(?![a-zA-Z_$0-9]))/;\n\nexport default function readNumberLiteral ( parser ) {\n\tlet result;\n\n\tif ( result = parser.matchPattern( regexpPattern ) ) {\n\t\treturn {\n\t\t\tt: REGEXP_LITERAL,\n\t\t\tv: result\n\t\t};\n\t}\n\n\treturn null;\n}\n"",""const delimiterChangePattern = /^[^\\s=]+/;\nconst whitespacePattern = /^\\s+/;\n\nexport default function readDelimiterChange ( parser ) {\n\tif ( !parser.matchString( '=' ) ) {\n\t\treturn null;\n\t}\n\n\tconst start = parser.pos;\n\n\t// allow whitespace before new opening delimiter\n\tparser.sp();\n\n\tconst opening = parser.matchPattern( delimiterChangePattern );\n\tif ( !opening ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace (in fact, it's necessary...)\n\tif ( !parser.matchPattern( whitespacePattern ) ) {\n\t\treturn null;\n\t}\n\n\tconst closing = parser.matchPattern( delimiterChangePattern );\n\tif ( !closing ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace before closing '='\n\tparser.sp();\n\n\tif ( !parser.matchString( '=' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn [ opening, closing ];\n}\n"",""import { warnIfDebug } from 'utils/log';\nimport { create, hasOwn } from 'utils/object';\n\nconst leadingWhitespace = /^\\s+/;\n\nconst ParseError = function ( message ) {\n\tthis.name = 'ParseError';\n\tthis.message = message;\n\ttry {\n\t\tthrow new Error(message);\n\t} catch (e) {\n\t\tthis.stack = e.stack;\n\t}\n};\n\nParseError.prototype = Error.prototype;\n\nconst Parser = function ( str, options ) {\n\tlet item;\n\tlet lineStart = 0;\n\n\tthis.str = str;\n\tthis.options = options || {};\n\tthis.pos = 0;\n\n\tthis.lines = this.str.split( '\\n' );\n\tthis.lineEnds = this.lines.map( line => {\n\t\tconst lineEnd = lineStart + line.length + 1; // +1 for the newline\n\n\t\tlineStart = lineEnd;\n\t\treturn lineEnd;\n\t}, 0 );\n\n\t// Custom init logic\n\tif ( this.init ) this.init( str, options );\n\n\tconst items = [];\n\n\twhile ( ( this.pos < this.str.length ) && ( item = this.read() ) ) {\n\t\titems.push( item );\n\t}\n\n\tthis.leftover = this.remaining();\n\tthis.result = this.postProcess ? this.postProcess( items, options ) : items;\n};\n\nParser.prototype = {\n\tread ( converters ) {\n\t\tlet i, item;\n\n\t\tif ( !converters ) converters = this.converters;\n\n\t\tconst pos = this.pos;\n\n\t\tconst len = converters.length;\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tthis.pos = pos; // reset for each attempt\n\n\t\t\tif ( item = converters[i]( this ) ) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\tgetContextMessage ( pos, message ) {\n\t\tconst [ lineNum, columnNum ] = this.getLinePos( pos );\n\t\tif ( this.options.contextLines === -1 ) {\n\t\t\treturn [ lineNum, columnNum, `${message} at line ${lineNum} character ${columnNum}` ];\n\t\t}\n\n\t\tconst line = this.lines[ lineNum - 1 ];\n\n\t\tlet contextUp = '';\n\t\tlet contextDown = '';\n\t\tif ( this.options.contextLines ) {\n\t\t\tconst start = lineNum - 1 - this.options.contextLines < 0 ? 0 : lineNum - 1 - this.options.contextLines;\n\t\t\tcontextUp = this.lines.slice( start, lineNum - 1 - start ).join( '\\n' ).replace( /\\t/g, '  ' );\n\t\t\tcontextDown = this.lines.slice( lineNum, lineNum + this.options.contextLines ).join( '\\n' ).replace( /\\t/g, '  ' );\n\t\t\tif ( contextUp ) {\n\t\t\t\tcontextUp += '\\n';\n\t\t\t}\n\t\t\tif ( contextDown ) {\n\t\t\t\tcontextDown = '\\n' + contextDown;\n\t\t\t}\n\t\t}\n\n\t\tlet numTabs = 0;\n\t\tconst annotation = contextUp + line.replace( /\\t/g, ( match, char ) => {\n\t\t\tif ( char < columnNum ) {\n\t\t\t\tnumTabs += 1;\n\t\t\t}\n\n\t\t\treturn '  ';\n\t\t}) + '\\n' + new Array( columnNum + numTabs ).join( ' ' ) + '^----' + contextDown;\n\n\t\treturn [ lineNum, columnNum, `${message} at line ${lineNum} character ${columnNum}:\\n${annotation}` ];\n\t},\n\n\tgetLinePos ( char ) {\n\t\tlet lineNum = 0;\n\t\tlet lineStart = 0;\n\n\t\twhile ( char >= this.lineEnds[ lineNum ] ) {\n\t\t\tlineStart = this.lineEnds[ lineNum ];\n\t\t\tlineNum += 1;\n\t\t}\n\n\t\tconst columnNum = char - lineStart;\n\t\treturn [ lineNum + 1, columnNum + 1, char ]; // line/col should be one-based, not zero-based!\n\t},\n\n\terror ( message ) {\n\t\tconst [ lineNum, columnNum, msg ] = this.getContextMessage( this.pos, message );\n\n\t\tconst error = new ParseError( msg );\n\n\t\terror.line = lineNum;\n\t\terror.character = columnNum;\n\t\terror.shortMessage = message;\n\n\t\tthrow error;\n\t},\n\n\tmatchString ( string ) {\n\t\tif ( this.str.substr( this.pos, string.length ) === string ) {\n\t\t\tthis.pos += string.length;\n\t\t\treturn string;\n\t\t}\n\t},\n\n\tmatchPattern ( pattern ) {\n\t\tlet match;\n\n\t\tif ( match = pattern.exec( this.remaining() ) ) {\n\t\t\tthis.pos += match[0].length;\n\t\t\treturn match[1] || match[0];\n\t\t}\n\t},\n\n\tsp () {\n\t\tthis.matchPattern( leadingWhitespace );\n\t},\n\n\tremaining () {\n\t\treturn this.str.substring( this.pos );\n\t},\n\n\tnextChar () {\n\t\treturn this.str.charAt( this.pos );\n\t},\n\n\twarn ( message ) {\n\t\tconst msg = this.getContextMessage( this.pos, message )[2];\n\n\t\twarnIfDebug( msg );\n\t}\n};\n\nParser.extend = function ( proto ) {\n\tconst Parent = this;\n\tconst Child = function ( str, options ) {\n\t\tParser.call( this, str, options );\n\t};\n\n\tChild.prototype = create( Parent.prototype );\n\n\tfor ( const key in proto ) {\n\t\tif ( hasOwn( proto, key ) ) {\n\t\t\tChild.prototype[ key ] = proto[ key ];\n\t\t}\n\t}\n\n\tChild.extend = Parser.extend;\n\treturn Child;\n};\n\nexport default Parser;\n"",""const pattern = /\\$\\{([^\\}]+)\\}/g;\n\nexport function fromExpression ( body, length = 0 ) {\n\tconst args = new Array( length );\n\n\twhile ( length-- ) {\n\t\targs[length] = `_${length}`;\n\t}\n\n\t// Functions created directly with new Function() look like this:\n\t//     function anonymous (_0 /**/) { return _0*2 }\n\t//\n\t// With this workaround, we get a little more compact:\n\t//     function (_0){return _0*2}\n\treturn new Function( [], `return function (${args.join(',')}){return(${body});};` )();\n}\n\nexport function fromComputationString ( str, bindTo ) {\n\tlet hasThis;\n\n\tlet functionBody = 'return (' + str.replace( pattern, ( match, keypath ) => {\n\t\thasThis = true;\n\t\treturn `__ractive.get(\""${keypath}\"")`;\n\t}) + ');';\n\n\tif ( hasThis ) functionBody = `var __ractive = this; ${functionBody}`;\n\tconst fn = new Function( functionBody );\n\treturn hasThis ? fn.bind( bindTo ) : fn;\n}\n"",""export const TEMPLATE_VERSION = 4;\n"",""import { fatal, warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { isArray, isObject, isFunction, isObjectType } from 'utils/is';\nimport bind from 'utils/bind';\n\nfunction validate ( data ) {\n\t// Warn if userOptions.data is a non-POJO\n\tif ( data && data.constructor !== Object ) {\n\t\tif ( isFunction( data ) ) {\n\t\t\t// TODO do we need to support this in the new Ractive() case?\n\t\t} else if ( !isObjectType( data ) ) {\n\t\t\tfatal( `data option must be an object or a function, \\`${data}\\` is not valid` );\n\t\t} else {\n\t\t\twarnIfDebug( 'If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged' );\n\t\t}\n\t}\n}\n\nexport default {\n\tname: 'data',\n\n\textend: ( Parent, proto, options ) => {\n\t\tlet key;\n\t\tlet value;\n\n\t\t// check for non-primitives, which could cause mutation-related bugs\n\t\tif ( options.data && isObject( options.data ) ) {\n\t\t\tfor ( key in options.data ) {\n\t\t\t\tvalue = options.data[ key ];\n\n\t\t\t\tif ( value && isObjectType( value ) ) {\n\t\t\t\t\tif ( isObject( value ) || isArray( value ) ) {\n\t\t\t\t\t\twarnIfDebug( `Passing a \\`data\\` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n  // this...\n  data: function () {\n    return {\n      myObject: {}\n    };\n  })\n\n  // instead of this:\n  data: {\n    myObject: {}\n  }` );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tproto.data = combine( proto.data, options.data );\n\t},\n\n\tinit: ( Parent, ractive, options ) => {\n\t\tlet result = combine( Parent.prototype.data, options.data );\n\n\t\tif ( isFunction( result ) ) result = result.call( ractive );\n\n\t\t// bind functions to the ractive instance at the top level,\n\t\t// unless it's a non-POJO (in which case alarm bells should ring)\n\t\tif ( result && result.constructor === Object ) {\n\t\t\tfor ( const prop in result ) {\n\t\t\t\tif ( isFunction( result[ prop ] ) ) {\n\t\t\t\t\tconst value = result[ prop ];\n\t\t\t\t\tresult[ prop ] = bind( value, ractive );\n\t\t\t\t\tresult[ prop ]._r_unbound = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result || {};\n\t},\n\n\treset ( ractive ) {\n\t\tconst result = this.init( ractive.constructor, ractive, ractive.viewmodel );\n\t\tractive.viewmodel.root.set( result );\n\t\treturn true;\n\t}\n};\n\nfunction emptyData () { return {}; }\n\nfunction combine ( parentValue, childValue ) {\n\tvalidate( childValue );\n\n\tconst parentIsFn = isFunction( parentValue );\n\n\t// Very important, otherwise child instance can become\n\t// the default data object on Ractive or a component.\n\t// then ractive.set() ends up setting on the prototype!\n\tif ( !childValue && !parentIsFn ) {\n\t\t// this needs to be a function so that it can still inherit parent defaults\n\t\tchildValue = emptyData;\n\t}\n\n\tconst childIsFn = isFunction( childValue );\n\n\t// Fast path, where we just need to copy properties from\n\t// parent to child\n\tif ( !parentIsFn && !childIsFn ) {\n\t\treturn fromProperties( childValue, parentValue );\n\t}\n\n\treturn function () {\n\t\tconst child = childIsFn ? callDataFunction( childValue, this ) : childValue;\n\t\tconst parent = parentIsFn ? callDataFunction( parentValue, this ) : parentValue;\n\n\t\treturn fromProperties( child, parent );\n\t};\n}\n\nfunction callDataFunction ( fn, context ) {\n\tconst data = fn.call( context );\n\n\tif ( !data ) return;\n\n\tif ( !isObjectType( data ) ) {\n\t\tfatal( 'Data function must return an object' );\n\t}\n\n\tif ( data.constructor !== Object ) {\n\t\twarnOnceIfDebug( 'Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged' );\n\t}\n\n\treturn data;\n}\n\nfunction fromProperties ( primary, secondary ) {\n\tif ( primary && secondary ) {\n\t\tfor ( const key in secondary ) {\n\t\t\tif ( !( key in primary ) ) {\n\t\t\t\tprimary[ key ] = secondary[ key ];\n\t\t\t}\n\t\t}\n\n\t\treturn primary;\n\t}\n\n\treturn primary || secondary;\n}\n"",""import { addCSS } from 'src/global/css';\nimport transformCss from './transform';\nimport { uuid } from 'utils/id';\nimport { warnIfDebug } from 'utils/log';\nimport { getElement } from 'utils/dom';\nimport { splitKeypath } from 'shared/keypaths';\nimport CSSModel from 'src/model/specials/CSSModel';\nimport { assign, create, defineProperty } from 'utils/object';\nimport { isString, isFunction, isObjectType } from 'utils/is';\n\nconst hasCurly = /\\{/;\nexport default {\n\tname: 'css',\n\n\t// Called when creating a new component definition\n\textend: ( Parent, proto, options, Child ) => {\n\t\tChild._cssIds = gatherIds( Parent );\n\n\t\tdefineProperty( Child, 'cssData', {\n\t\t\tconfigurable: true,\n\t\t\tvalue: assign( create( Parent.cssData ), options.cssData || {} )\n\t\t});\n\n\t\tdefineProperty( Child, '_cssModel', {\n\t\t\tconfigurable: true,\n\t\t\tvalue: new CSSModel( Child )\n\t\t});\n\n\t\tif ( options.css ) initCSS( options, Child, proto );\n\t},\n\n\t// Called when creating a new component instance\n\tinit: ( Parent, target, options ) => {\n\t\tif ( !options.css ) return;\n\n\t\twarnIfDebug( `\nThe css option is currently not supported on a per-instance basis and will be discarded. Instead, we recommend instantiating from a component definition with a css option.\n\nconst Component = Ractive.extend({\n\t...\n\tcss: '/* your css */',\n\t...\n});\n\nconst componentInstance = new Component({ ... })\n\t\t` );\n\t}\n};\n\nfunction gatherIds ( start ) {\n\tlet cmp = start;\n\tconst ids = [];\n\n\twhile ( cmp ) {\n\t\tif ( cmp.prototype.cssId ) ids.push( cmp.prototype.cssId );\n\t\tcmp = cmp.Parent;\n\t}\n\n\treturn ids;\n}\n\nexport function evalCSS ( component, css ) {\n\tconst cssData = component.cssData;\n\tconst model = component._cssModel;\n\tconst data = function data ( path ) {\n\t\treturn model.joinAll( splitKeypath( path ) ).get();\n\t};\n\tdata.__proto__ = cssData;\n\n\tconst result = css.call( component, data );\n\treturn isString( result ) ? result : '';\n}\n\nexport function initCSS ( options, target, proto ) {\n\tlet css = isString( options.css ) && !hasCurly.test( options.css ) ?\n\t\t( getElement( options.css ) || options.css ) :\n\t\toptions.css;\n\n\tconst id = options.cssId || uuid();\n\n\tif ( isObjectType( css ) ) {\n\t\tcss = 'textContent' in css ? css.textContent : css.innerHTML;\n\t} else if ( isFunction( css ) ) {\n\t\ttarget._css = options.css;\n\t\tcss = evalCSS( target, css );\n\t}\n\n\tconst def = target._cssDef = { transform: !options.noCssTransform };\n\n\tdef.styles = def.transform ? transformCss( css, id ) : css;\n\tdef.id = proto.cssId = id;\n\ttarget._cssIds.push( id );\n\n\taddCSS( target._cssDef );\n}\n"",""import { SharedModel } from './SharedModel';\nimport { applyChanges } from '../../Ractive/static/styleSet';\n\nexport default class CSSModel extends SharedModel {\n\tconstructor ( component ) {\n\t\tsuper( component.cssData, '@style' );\n\t\tthis.component = component;\n\t}\n\n\tdownstreamChanged ( path, depth ) {\n\t\tif ( this.locked ) return;\n\n\t\tconst component = this.component;\n\n\t\tcomponent.extensions.forEach( e => {\n\t\t\tconst model = e._cssModel;\n\t\t\tmodel.mark();\n\t\t\tmodel.downstreamChanged( path, depth || 1 );\n\t\t});\n\n\t\tif ( !depth ) {\n\t\t\tapplyChanges( component, true );\n\t\t}\n\t}\n}\n"",""import { applyCSS } from '../../global/css';\nimport transformCSS from '../config/custom/css/transform';\nimport { evalCSS } from '../config/custom/css/css';\nimport { build, set } from '../../shared/set';\nimport runloop from '../../global/runloop';\nimport { isObjectType, isFunction } from 'utils/is';\n\nexport default function setCSSData ( keypath, value, options ) {\n\tconst opts = isObjectType( keypath ) ? value : options;\n\tconst model = this._cssModel;\n\n\tmodel.locked = true;\n\tconst promise = set( build( { viewmodel: model }, keypath, value, true ), opts );\n\tmodel.locked = false;\n\n\tconst cascade = runloop.start();\n\tthis.extensions.forEach( e => {\n\t\tconst model = e._cssModel;\n\t\tmodel.mark();\n\t\tmodel.downstreamChanged( '', 1 );\n\t});\n\trunloop.end();\n\n\tapplyChanges( this, !opts || opts.apply !== false );\n\n\treturn promise.then( () => cascade );\n}\n\nexport function applyChanges ( component, apply ) {\n\tconst local = recomputeCSS( component );\n\tconst child = component.extensions.map( e => applyChanges( e, false ) ).\n\t  reduce( ( a, c ) => c || a, false );\n\n\tif ( apply && ( local || child ) ) {\n\t\tconst def = component._cssDef;\n\t\tif ( !def || ( def && def.applied ) ) applyCSS( true );\n\t}\n\n\treturn local || child;\n}\n\nfunction recomputeCSS ( component ) {\n\tconst css = component._css;\n\n\tif ( !isFunction( css ) ) return;\n\n\tconst def = component._cssDef;\n\tconst result = evalCSS( component, css );\n\tconst styles = def.transform ? transformCSS( result, def.id ) : result;\n\n\tif ( def.styles === styles ) return;\n\n\tdef.styles = styles;\n\n\treturn true;\n}\n"",""function s4() {\n\treturn Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n}\n\nexport function uuid() {\n\treturn s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n"",""import cleanCss from 'utils/cleanCss';\n\nconst selectorsPattern = /(?:^|\\}|\\{)\\s*([^\\{\\}\\0]+)\\s*(?=\\{)/g;\nconst keyframesDeclarationPattern = /@keyframes\\s+[^\\{\\}]+\\s*\\{(?:[^{}]+|\\{[^{}]+})*}/gi;\nconst selectorUnitPattern = /((?:(?:\\[[^\\]]+\\])|(?:[^\\s\\+\\>~:]))+)((?:::?[^\\s\\+\\>\\~\\(:]+(?:\\([^\\)]+\\))?)*\\s*[\\s\\+\\>\\~]?)\\s*/g;\nconst excludePattern = /^(?:@|\\d+%)/;\nconst dataRvcGuidPattern = /\\[data-ractive-css~=\""\\{[a-z0-9-]+\\}\""]/g;\n\nfunction trim ( str ) {\n\treturn str.trim();\n}\n\nfunction extractString ( unit ) {\n\treturn unit.str;\n}\n\nfunction transformSelector ( selector, parent ) {\n\tconst selectorUnits = [];\n\tlet match;\n\n\twhile ( match = selectorUnitPattern.exec( selector ) ) {\n\t\tselectorUnits.push({\n\t\t\tstr: match[0],\n\t\t\tbase: match[1],\n\t\t\tmodifiers: match[2]\n\t\t});\n\t}\n\n\t// For each simple selector within the selector, we need to create a version\n\t// that a) combines with the id, and b) is inside the id\n\tconst base = selectorUnits.map( extractString );\n\n\tconst transformed = [];\n\tlet i = selectorUnits.length;\n\n\twhile ( i-- ) {\n\t\tconst appended = base.slice();\n\n\t\t// Pseudo-selectors should go after the attribute selector\n\t\tconst unit = selectorUnits[i];\n\t\tappended[i] = unit.base + parent + unit.modifiers || '';\n\n\t\tconst prepended = base.slice();\n\t\tprepended[i] = parent + ' ' + prepended[i];\n\n\t\ttransformed.push( appended.join( ' ' ), prepended.join( ' ' ) );\n\t}\n\n\treturn transformed.join( ', ' );\n}\n\nexport default function transformCss ( css, id ) {\n\tconst dataAttr = `[data-ractive-css~=\""{${id}}\""]`;\n\n\tlet transformed;\n\n\tif ( dataRvcGuidPattern.test( css ) ) {\n\t\ttransformed = css.replace( dataRvcGuidPattern, dataAttr );\n\t} else {\n\t\ttransformed = cleanCss( css, ( css, reconstruct ) => {\n\t\t\tcss = css.replace( selectorsPattern, ( match, $1 ) => {\n\t\t\t\t// don't transform at-rules and keyframe declarations\n\t\t\t\tif ( excludePattern.test( $1 ) ) return match;\n\n\t\t\t\tconst selectors = $1.split( ',' ).map( trim );\n\t\t\t\tconst transformed = selectors\n\t\t\t\t\t.map( selector => transformSelector( selector, dataAttr ) )\n\t\t\t\t\t.join( ', ' ) + ' ';\n\n\t\t\t\treturn match.replace( $1, transformed );\n\t\t\t});\n\n\t\t\treturn reconstruct( css );\n\t\t}, [ keyframesDeclarationPattern ]);\n\t}\n\n\treturn transformed;\n}\n"",""const remove = /\\/\\*(?:[\\s\\S]*?)\\*\\//g;\nconst escape = /url\\(\\s*(['\""])(?:\\\\[\\s\\S]|(?!\\1).)*\\1\\s*\\)|url\\((?:\\\\[\\s\\S]|[^)])*\\)|(['\""])(?:\\\\[\\s\\S]|(?!\\2).)*\\2/gi;\nconst value = /\\0(\\d+)/g;\n\n// Removes comments and strings from the given CSS to make it easier to parse.\n// Callback receives the cleaned CSS and a function which can be used to put\n// the removed strings back in place after parsing is done.\nexport default function ( css, callback, additionalReplaceRules = [] ) {\n\tconst values = [];\n\tconst reconstruct = css => css.replace( value, ( match, n ) => values[ n ] );\n\tcss = css.replace( escape, match => `\\0${values.push( match ) - 1}`).replace( remove, '' );\n\n\tadditionalReplaceRules.forEach( ( pattern ) => {\n\t\tcss = css.replace( pattern, match => `\\0${values.push( match ) - 1}` );\n\t});\n\n\treturn callback( css, reconstruct );\n}\n"",""import { ensureArray, combine } from 'utils/array';\n\nexport default {\n\textend: ( Parent, proto, options ) => {\n\t\tproto.adapt = combine( proto.adapt, ensureArray( options.adapt ) );\n\t},\n\n\tinit () {}\n};\n"",""import { doc } from '../config/environment';\n\nconst PREFIX = '/* Ractive.js component styles */';\n\n// Holds current definitions of styles.\nconst styleDefinitions = [];\n\n// Flag to tell if we need to update the CSS\nlet isDirty = false;\n\n// These only make sense on the browser. See additional setup below.\nlet styleElement = null;\nlet useCssText = null;\n\nexport function addCSS ( styleDefinition ) {\n\tstyleDefinitions.push( styleDefinition );\n\tisDirty = true;\n}\n\nexport function applyCSS ( force ) {\n\tconst styleElement = style();\n\n\t// Apply only seems to make sense when we're in the DOM. Server-side renders\n\t// can call toCSS to get the updated CSS.\n\tif ( !styleElement || ( !force && !isDirty ) ) return;\n\n\tif ( useCssText ) {\n\t\tstyleElement.styleSheet.cssText = getCSS( null );\n\t} else {\n\t\tstyleElement.innerHTML = getCSS( null );\n\t}\n\n\tisDirty = false;\n}\n\nexport function getCSS ( cssIds ) {\n\tconst filteredStyleDefinitions = cssIds ? styleDefinitions.filter( style => ~cssIds.indexOf( style.id ) ) : styleDefinitions;\n\n\tfilteredStyleDefinitions.forEach( d => d.applied = true );\n\n\treturn filteredStyleDefinitions.reduce( ( styles, style ) => `${ styles ? `${styles}\\n\\n/* {${style.id}} */\\n${style.styles}` : '' }`, PREFIX );\n}\n\nfunction style () {\n\t// If we're on the browser, additional setup needed.\n\tif ( doc && !styleElement ) {\n\t\tstyleElement = doc.createElement( 'style' );\n\t\tstyleElement.type = 'text/css';\n\t\tstyleElement.setAttribute( 'data-ractive-css', '' );\n\n\t\tdoc.getElementsByTagName( 'head' )[0].appendChild( styleElement );\n\n\t\tuseCssText = !!styleElement.styleSheet;\n\t}\n\n\treturn styleElement;\n}\n"",""import { splitKeypath } from 'shared/keypaths';\n\nexport default function readLink ( keypath, options = {} ) {\n\tconst path = splitKeypath( keypath );\n\n\tif ( this.viewmodel.has( path[0] ) ) {\n\t\tlet model = this.viewmodel.joinAll( path );\n\n\t\tif ( !model.isLink ) return;\n\n\t\twhile ( ( model = model.target ) && options.canonical !== false ) {\n\t\t\tif ( !model.isLink ) break;\n\t\t}\n\n\t\tif ( model ) return { ractive: model.root.ractive, keypath: model.getKeypath() };\n\t}\n}\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod( 'push' ).path;\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod( 'pop' ).path;\n"",""export default function Ractive$once ( eventName, handler ) {\n\tconst listener = this.on( eventName, function () {\n\t\thandler.apply( this, arguments );\n\t\tlistener.cancel();\n\t});\n\n\t// so we can still do listener.cancel() manually\n\treturn listener;\n}\n"",""import trim from './shared/trim';\nimport notEmptyString from './shared/notEmptyString';\nimport { hasOwn } from 'utils/object';\nimport { isObjectType, isString } from 'utils/is';\n\nexport default function Ractive$on ( eventName, callback ) {\n\t// eventName may already be a map\n\tconst map = isObjectType( eventName ) ? eventName : {};\n\t// or it may be a string along with a callback\n\tif ( isString( eventName ) ) map[ eventName ] = callback;\n\n\tlet silent = false;\n\tconst events = [];\n\n\tfor ( const k in map ) {\n\t\tconst callback = map[k];\n\t\tconst caller = function ( ...args ) {\n\t\t\tif ( !silent ) return callback.apply( this, args );\n\t\t};\n\t\tconst entry = {\n\t\t\tcallback,\n\t\t\thandler: caller\n\t\t};\n\n\t\tif ( hasOwn( map, k ) ) {\n\t\t\tconst names = k.split( ' ' ).map( trim ).filter( notEmptyString );\n\t\t\tnames.forEach( n => {\n\t\t\t\t( this._subs[ n ] || ( this._subs[ n ] = [] ) ).push( entry );\n\t\t\t\tif ( n.indexOf( '.' ) ) this._nsSubs++;\n\t\t\t\tevents.push( [ n, entry ] );\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tcancel: () => events.forEach( e => this.off( e[0], e[1].callback ) ),\n\t\tisSilenced: () => silent,\n\t\tsilence: () => silent = true,\n\t\tresume: () => silent = false\n\t};\n}\n"",""import { removeFromArray } from 'utils/array';\nimport trim from './shared/trim';\nimport notEmptyString from './shared/notEmptyString';\n\nexport default function Ractive$off ( eventName, callback ) {\n\t// if no event is specified, remove _all_ event listeners\n\tif ( !eventName ) {\n\t\tthis._subs = {};\n\t} else {\n\t\t// Handle multiple space-separated event names\n\t\tconst eventNames = eventName.split( ' ' ).map( trim ).filter( notEmptyString );\n\n\t\teventNames.forEach( event => {\n\t\t\tconst subs = this._subs[ event ];\n\t\t\t// if given a specific callback to remove, remove only it\n\t\t\tif ( subs && callback ) {\n\t\t\t\tconst entry = subs.find( s => s.callback === callback );\n\t\t\t\tif ( entry ) {\n\t\t\t\t\tremoveFromArray( subs, entry );\n\t\t\t\t\tentry.off = true;\n\n\t\t\t\t\tif ( event.indexOf( '.' ) ) this._nsSubs--;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, remove all listeners for this event\n\t\t\telse if ( subs ) {\n\t\t\t\tif ( event.indexOf( '.' ) ) this._nsSubs -= subs.length;\n\t\t\t\tsubs.length = 0;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn this;\n}\n"",""export default str => str !== '';\n"",""export default str => str.trim();\n"",""import { isObject, isFunction } from 'utils/is';\nimport { assign } from 'utils/object';\n\nconst onceOptions = { init: false, once: true };\n\nexport default function observeOnce ( keypath, callback, options ) {\n\tif ( isObject( keypath ) || isFunction( keypath ) ) {\n\t\toptions = assign( callback || {}, onceOptions );\n\t\treturn this.observe( keypath, options );\n\t}\n\n\toptions = assign( options || {}, onceOptions );\n\treturn this.observe( keypath, callback, options );\n}\n"",""import { isObject, isFunction } from 'utils/is';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport Observer from './observe/Observer';\nimport PatternObserver from './observe/Pattern';\nimport ArrayObserver from './observe/Array';\nimport { keys } from 'utils/object';\n\nexport default function observe ( keypath, callback, options ) {\n\tconst observers = [];\n\tlet map;\n\tlet opts;\n\n\tif ( isObject( keypath ) ) {\n\t\tmap = keypath;\n\t\topts = callback || {};\n\t} else {\n\t\tif ( isFunction( keypath ) ) {\n\t\t\tmap = { '': keypath };\n\t\t\topts = callback || {};\n\t\t} else {\n\t\t\tmap = {};\n\t\t\tmap[ keypath ] = callback;\n\t\t\topts = options || {};\n\t\t}\n\t}\n\n\tlet silent = false;\n\tkeys( map ).forEach( keypath => {\n\t\tconst callback = map[ keypath ];\n\t\tconst caller = function ( ...args ) {\n\t\t\tif ( silent ) return;\n\t\t\treturn callback.apply( this, args );\n\t\t};\n\n\t\tlet keypaths = keypath.split( ' ' );\n\t\tif ( keypaths.length > 1 ) keypaths = keypaths.filter( k => k );\n\n\t\tkeypaths.forEach( keypath => {\n\t\t\topts.keypath = keypath;\n\t\t\tconst observer = createObserver( this, keypath, caller, opts );\n\t\t\tif ( observer ) observers.push( observer );\n\t\t});\n\t});\n\n\t// add observers to the Ractive instance, so they can be\n\t// cancelled on ractive.teardown()\n\tthis._observers.push.apply( this._observers, observers );\n\n\treturn {\n\t\tcancel: () => observers.forEach( o => o.cancel() ),\n\t\tisSilenced: () => silent,\n\t\tsilence: () => silent = true,\n\t\tresume: () => silent = false\n\t};\n}\n\nfunction createObserver ( ractive, keypath, callback, options ) {\n\tconst keys = splitKeypath( keypath );\n\tlet wildcardIndex = keys.indexOf( '*' );\n\tif ( !~wildcardIndex ) wildcardIndex = keys.indexOf( '**' );\n\n\toptions.fragment = options.fragment || ractive.fragment;\n\n\tlet model;\n\tif ( !options.fragment ) {\n\t\tmodel = ractive.viewmodel.joinKey( keys[0] );\n\t} else {\n\t\t// .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .\n\t\tif ( ~keys[0].indexOf( '.*' ) ) {\n\t\t\tmodel = options.fragment.findContext();\n\t\t\twildcardIndex = 0;\n\t\t\tkeys[0] = keys[0].slice( 1 );\n\t\t} else {\n\t\t\tmodel = wildcardIndex === 0 ? options.fragment.findContext() : resolveReference( options.fragment, keys[0] );\n\t\t}\n\t}\n\n\t// the model may not exist key\n\tif ( !model ) model = ractive.viewmodel.joinKey( keys[0] );\n\n\tif ( !~wildcardIndex ) {\n\t\tmodel = model.joinAll( keys.slice( 1 ) );\n\t\tif ( options.array ) {\n\t\t\treturn new ArrayObserver( ractive, model, callback, options );\n\t\t} else {\n\t\t\treturn new Observer( ractive, model, callback, options );\n\t\t}\n\t} else {\n\t\tconst double = keys.indexOf( '**' );\n\t\tif ( ~double ) {\n\t\t\tif ( double + 1 !== keys.length || ~keys.indexOf( '*' ) ) {\n\t\t\t\twarnOnceIfDebug( `Recursive observers may only specify a single '**' at the end of the path.` );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tmodel = model.joinAll( keys.slice( 1, wildcardIndex ) );\n\n\t\treturn new PatternObserver( ractive, model, keys.slice( wildcardIndex ), callback, options );\n\t}\n}\n"",""import { removeFromArray } from 'utils/array';\nimport { isArray } from 'utils/is';\nimport runloop from 'src/global/runloop';\n\nfunction negativeOne () {\n\treturn -1;\n}\n\nexport default class ArrayObserver {\n\tconstructor ( ractive, model, callback, options ) {\n\t\tthis.ractive = ractive;\n\t\tthis.model = model;\n\t\tthis.keypath = model.getKeypath();\n\t\tthis.callback = callback;\n\t\tthis.options = options;\n\n\t\tthis.pending = null;\n\n\t\tmodel.register( this );\n\n\t\tif ( options.init !== false ) {\n\t\t\tthis.sliced = [];\n\t\t\tthis.shuffle([]);\n\t\t\tthis.dispatch();\n\t\t} else {\n\t\t\tthis.sliced = this.slice();\n\t\t}\n\t}\n\n\tcancel () {\n\t\tthis.model.unregister( this );\n\t\tremoveFromArray( this.ractive._observers, this );\n\t}\n\n\tdispatch () {\n\t\tthis.callback( this.pending );\n\t\tthis.pending = null;\n\t\tif ( this.options.once ) this.cancel();\n\t}\n\n\thandleChange ( path ) {\n\t\tif ( this.pending ) {\n\t\t\t// post-shuffle\n\t\t\trunloop.addObserver( this, this.options.defer );\n\t\t} else if ( !path ) {\n\t\t\t// entire array changed\n\t\t\tthis.shuffle( this.sliced.map( negativeOne ) );\n\t\t\tthis.handleChange();\n\t\t}\n\t}\n\n\tshuffle ( newIndices ) {\n\t\tconst newValue = this.slice();\n\n\t\tconst inserted = [];\n\t\tconst deleted = [];\n\t\tlet start;\n\n\t\tconst hadIndex = {};\n\n\t\tnewIndices.forEach( ( newIndex, oldIndex ) => {\n\t\t\thadIndex[ newIndex ] = true;\n\n\t\t\tif ( newIndex !== oldIndex && start === undefined ) {\n\t\t\t\tstart = oldIndex;\n\t\t\t}\n\n\t\t\tif ( newIndex === -1 ) {\n\t\t\t\tdeleted.push( this.sliced[ oldIndex ] );\n\t\t\t}\n\t\t});\n\n\t\tif ( start === undefined ) start = newIndices.length;\n\n\t\tconst len = newValue.length;\n\t\tfor ( let i = 0; i < len; i += 1 ) {\n\t\t\tif ( !hadIndex[i] ) inserted.push( newValue[i] );\n\t\t}\n\n\t\tthis.pending = { inserted, deleted, start };\n\t\tthis.sliced = newValue;\n\t}\n\n\tslice () {\n\t\tconst value = this.model.get();\n\t\treturn isArray( value ) ? value.slice() : [];\n\t}\n}\n\n"",""import { escapeKey } from 'shared/keypaths';\nimport { removeFromArray } from 'utils/array';\nimport { isArray, isEqual } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport { create, keys } from 'utils/object';\n\nconst star = /\\*+/g;\n\nexport default class PatternObserver {\n\tconstructor ( ractive, baseModel, keys, callback, options ) {\n\t\tthis.context = options.context || ractive;\n\t\tthis.ractive = ractive;\n\t\tthis.baseModel = baseModel;\n\t\tthis.keys = keys;\n\t\tthis.callback = callback;\n\n\t\tconst pattern = keys.join( '\\\\.' ).replace( star, '(.+)' );\n\t\tconst baseKeypath = this.baseKeypath = baseModel.getKeypath( ractive );\n\t\tthis.pattern = new RegExp( `^${baseKeypath ? baseKeypath + '\\\\.' : ''}${pattern}$` );\n\t\tthis.recursive = keys.length === 1 && keys[0] === '**';\n\t\tif ( this.recursive ) this.keys = [ '*' ];\n\t\tif ( options.old ) {\n\t\t\tthis.oldContext = create( ractive );\n\t\t\tthis.oldFn = options.old;\n\t\t}\n\n\t\tthis.oldValues = {};\n\t\tthis.newValues = {};\n\n\t\tthis.defer = options.defer;\n\t\tthis.once = options.once;\n\t\tthis.strict = options.strict;\n\n\t\tthis.dirty = false;\n\t\tthis.changed = [];\n\t\tthis.partial = false;\n\t\tthis.links = options.links;\n\n\t\tconst models = baseModel.findMatches( this.keys );\n\n\t\tmodels.forEach( model => {\n\t\t\tthis.newValues[ model.getKeypath( this.ractive ) ] = model.get();\n\t\t});\n\n\t\tif ( options.init !== false ) {\n\t\t\tthis.dispatch();\n\t\t} else {\n\t\t\tupdateOld( this, this.newValues );\n\t\t}\n\n\t\tbaseModel.registerPatternObserver( this );\n\t}\n\n\tcancel () {\n\t\tthis.baseModel.unregisterPatternObserver( this );\n\t\tremoveFromArray( this.ractive._observers, this );\n\t}\n\n\tdispatch () {\n\t\tconst newValues = this.newValues;\n\t\tthis.newValues = {};\n\t\tkeys( newValues ).forEach( keypath => {\n\t\t\tconst newValue = newValues[ keypath ];\n\t\t\tconst oldValue = this.oldValues[ keypath ];\n\n\t\t\tif ( this.strict && newValue === oldValue ) return;\n\t\t\tif ( isEqual( newValue, oldValue ) ) return;\n\n\t\t\tlet args = [ newValue, oldValue, keypath ];\n\t\t\tif ( keypath ) {\n\t\t\t\tconst wildcards = this.pattern.exec( keypath );\n\t\t\t\tif ( wildcards ) {\n\t\t\t\t\targs = args.concat( wildcards.slice( 1 ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.callback.apply( this.context, args );\n\t\t});\n\n\t\tupdateOld( this, newValues, this.partial );\n\n\t\tthis.dirty = false;\n\t}\n\n\tnotify ( key ) {\n\t\tthis.changed.push( key );\n\t}\n\n\tshuffle ( newIndices ) {\n\t\tif ( !isArray( this.baseModel.value ) ) return;\n\n\t\tconst max = this.baseModel.value.length;\n\n\t\tfor ( let i = 0; i < newIndices.length; i++ ) {\n\t\t\tif ( newIndices[ i ] === -1 || newIndices[ i ] === i ) continue;\n\t\t\tthis.changed.push([ i ]);\n\t\t}\n\n\t\tfor ( let i = newIndices.touchedFrom; i < max; i++ ) {\n\t\t\tthis.changed.push([ i ]);\n\t\t}\n\t}\n\n\thandleChange () {\n\t\tif ( !this.dirty || this.changed.length ) {\n\t\t\tif ( !this.dirty ) this.newValues = {};\n\n\t\t\tif ( !this.changed.length ) {\n\t\t\t\tthis.baseModel.findMatches( this.keys ).forEach( model => {\n\t\t\t\t\tconst keypath = model.getKeypath( this.ractive );\n\t\t\t\t\tthis.newValues[ keypath ] = model.get();\n\t\t\t\t});\n\t\t\t\tthis.partial = false;\n\t\t\t} else {\n\t\t\t\tlet count = 0;\n\n\t\t\t\tif ( this.recursive ) {\n\t\t\t\t\tthis.changed.forEach( keys => {\n\t\t\t\t\t\tconst model = this.baseModel.joinAll( keys );\n\t\t\t\t\t\tif ( model.isLink && !this.links ) return;\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t\tthis.newValues[ model.getKeypath( this.ractive ) ] = model.get();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst ok = this.baseModel.isRoot ?\n\t\t\t\t\t\tthis.changed.map( keys => keys.map( escapeKey ).join( '.' ) ) :\n\t\t\t\t\t\tthis.changed.map( keys => this.baseKeypath + '.' + keys.map( escapeKey ).join( '.' ) );\n\n\t\t\t\t\tthis.baseModel.findMatches( this.keys ).forEach( model => {\n\t\t\t\t\t\tconst keypath = model.getKeypath( this.ractive );\n\t\t\t\t\t\tconst check = k => {\n\t\t\t\t\t\t\treturn ( k.indexOf( keypath ) === 0 && ( k.length === keypath.length || k[ keypath.length ] === '.' ) ) ||\n\t\t\t\t\t\t\t\t( keypath.indexOf( k ) === 0 && ( k.length === keypath.length || keypath[ k.length ] === '.' ) );\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// is this model on a changed keypath?\n\t\t\t\t\t\tif ( ok.filter( check ).length ) {\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\tthis.newValues[ keypath ] = model.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// no valid change triggered, so bail to avoid breakage\n\t\t\t\tif ( !count ) return;\n\n\t\t\t\tthis.partial = true;\n\t\t\t}\n\n\t\t\trunloop.addObserver( this, this.defer );\n\t\t\tthis.dirty = true;\n\t\t\tthis.changed.length = 0;\n\n\t\t\tif ( this.once ) this.cancel();\n\t\t}\n\t}\n}\n\nfunction updateOld( observer, vals, partial ) {\n\tconst olds = observer.oldValues;\n\n\tif ( observer.oldFn ) {\n\t\tif ( !partial ) observer.oldValues = {};\n\n\t\tkeys( vals ).forEach( k => {\n\t\t\tconst args = [ olds[k], vals[k], k ];\n\t\t\tconst parts = observer.pattern.exec( k );\n\t\t\tif ( parts ) {\n\t\t\t\targs.push.apply( args, parts.slice( 1 ) );\n\t\t\t}\n\t\t\tobserver.oldValues[k] = observer.oldFn.apply( observer.oldContext, args );\n\t\t});\n\t} else {\n\t\tif ( partial ) {\n\t\t\tkeys( vals ).forEach( k => olds[k] = vals[k] );\n\t\t} else {\n\t\t\tobserver.oldValues = vals;\n\t\t}\n\t}\n}\n"",""import { isEqual, isFunction } from 'utils/is';\nimport { removeFromArray } from 'utils/array';\nimport runloop from 'src/global/runloop';\nimport { rebindMatch } from 'shared/rebind';\nimport { create } from 'utils/object';\n\nexport default class Observer {\n\tconstructor ( ractive, model, callback, options ) {\n\t\tthis.context = options.context || ractive;\n\t\tthis.callback = callback;\n\t\tthis.ractive = ractive;\n\t\tthis.keypath = options.keypath;\n\t\tthis.options = options;\n\n\t\tif ( model ) this.resolved( model );\n\n\t\tif ( isFunction( options.old ) ) {\n\t\t\tthis.oldContext = create( ractive );\n\t\t\tthis.oldFn = options.old;\n\t\t}\n\n\t\tif ( options.init !== false ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.dispatch();\n\t\t} else {\n\t\t\tupdateOld( this );\n\t\t}\n\n\t\tthis.dirty = false;\n\t}\n\n\tcancel () {\n\t\tthis.cancelled = true;\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t} else {\n\t\t\tthis.resolver.unbind();\n\t\t}\n\t\tremoveFromArray( this.ractive._observers, this );\n\t}\n\n\tdispatch () {\n\t\tif ( !this.cancelled ) {\n\t\t\tthis.callback.call( this.context, this.newValue, this.oldValue, this.keypath );\n\t\t\tupdateOld( this, true );\n\t\t\tthis.dirty = false;\n\t\t}\n\t}\n\n\thandleChange () {\n\t\tif ( !this.dirty ) {\n\t\t\tconst newValue = this.model.get();\n\t\t\tif ( isEqual( newValue, this.oldValue ) ) return;\n\n\t\t\tthis.newValue = newValue;\n\n\t\t\tif ( this.options.strict && this.newValue === this.oldValue ) return;\n\n\t\t\trunloop.addObserver( this, this.options.defer );\n\t\t\tthis.dirty = true;\n\n\t\t\tif ( this.options.once ) runloop.scheduleTask( () => this.cancel() );\n\t\t}\n\t}\n\n\trebind ( next, previous ) {\n\t\tnext = rebindMatch( this.keypath, next, previous );\n\t\tif ( next === this.model ) return false;\n\n\t\tif ( this.model ) this.model.unregister( this );\n\t\tif ( next ) next.addShuffleTask( () => this.resolved( next ) );\n\t}\n\n\tresolved ( model ) {\n\t\tthis.model = model;\n\n\t\tthis.oldValue = undefined;\n\t\tthis.newValue = model.get();\n\n\t\tmodel.register( this );\n\t}\n}\n\nfunction updateOld( observer, fresh ) {\n\tconst next = fresh ? ( observer.model ? observer.model.get() : observer.newValue ) : observer.newValue;\n\tobserver.oldValue = observer.oldFn ? observer.oldFn.call( observer.oldContext, undefined, next, observer.keypath ) : next;\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport runloop from 'src/global/runloop';\n\nexport default function link ( there, here, options ) {\n\tlet model;\n\tconst target = ( options && ( options.ractive || options.instance ) ) || this;\n\n\t// may need to allow a mapping to resolve implicitly\n\tconst sourcePath = splitKeypath( there );\n\tif ( !target.viewmodel.has( sourcePath[0] ) && target.component ) {\n\t\tmodel = resolveReference( target.component.up, sourcePath[0] );\n\t\tmodel = model.joinAll( sourcePath.slice( 1 ) );\n\t}\n\n\tconst src = model || target.viewmodel.joinAll( sourcePath );\n\tconst dest = this.viewmodel.joinAll( splitKeypath( here ), { lastLink: false });\n\n\tif ( isUpstream( src, dest ) || isUpstream( dest, src ) ) {\n\t\tthrow new Error( 'A keypath cannot be linked to itself.' );\n\t}\n\n\tconst promise = runloop.start();\n\n\tdest.link( src, ( options && options.keypath ) || there );\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nfunction isUpstream ( check, start ) {\n\tlet model = start;\n\twhile ( model ) {\n\t\tif ( model === check || model.owner === check ) return true;\n\t\tmodel = model.target || model.parent;\n\t}\n}\n"",""import Hook from 'src/events/Hook';\nimport { getElement } from 'utils/dom';\n\nconst insertHook = new Hook( 'insert' );\n\nexport default function Ractive$insert ( target, anchor ) {\n\tif ( !this.fragment.rendered ) {\n\t\t// TODO create, and link to, documentation explaining this\n\t\tthrow new Error( 'The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.' );\n\t}\n\n\ttarget = getElement( target );\n\tanchor = getElement( anchor ) || null;\n\n\tif ( !target ) {\n\t\tthrow new Error( 'You must specify a valid target to insert into' );\n\t}\n\n\ttarget.insertBefore( this.detach(), anchor );\n\tthis.el = target;\n\n\t( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( this );\n\tthis.isDetached = false;\n\n\tfireInsertHook( this );\n}\n\nfunction fireInsertHook( ractive ) {\n\tinsertHook.fire( ractive );\n\n\tractive.findAllComponents('*').forEach( child => {\n\t\tfireInsertHook( child.instance );\n\t});\n}\n"",""import { isClient, svg, vendors, win, doc } from 'config/environment';\nimport { html } from 'config/namespaces';\nimport { isString, isNumber } from 'utils/is';\n\nlet createElement, matches, div, methodNames, unprefixed, prefixed, i, j, makeFunction;\n\n// Test for SVG support\nif ( !svg ) {\n\t/* istanbul ignore next */\n\tcreateElement = ( type, ns, extend ) => {\n\t\tif ( ns && ns !== html ) {\n\t\t\tthrow 'This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you\\'re trying to render SVG in an older browser. See http://ractive.js.org/support/#svgs for more information';\n\t\t}\n\n\t\treturn extend ?\n\t\t\tdoc.createElement( type, extend ) :\n\t\t\tdoc.createElement( type );\n\t};\n} else {\n\tcreateElement = ( type, ns, extend ) => {\n\t\tif ( !ns || ns === html ) {\n\t\t\treturn extend ?\n\t\t\t\tdoc.createElement( type, extend ) :\n\t\t\t\tdoc.createElement( type );\n\t\t}\n\n\t\treturn extend ?\n\t\t\tdoc.createElementNS( ns, type, extend ) :\n\t\t\tdoc.createElementNS( ns, type );\n\t};\n}\n\nexport function createDocumentFragment () {\n\treturn doc.createDocumentFragment();\n}\n\nfunction getElement ( input ) {\n\tlet output;\n\n\tif ( !input || typeof input === 'boolean' ) { return; }\n\n\t/* istanbul ignore next */\n\tif ( !win || !doc || !input ) {\n\t\treturn null;\n\t}\n\n\t// We already have a DOM node - no work to do. (Duck typing alert!)\n\tif ( input.nodeType ) {\n\t\treturn input;\n\t}\n\n\t// Get node from string\n\tif ( isString( input ) ) {\n\t\t// try ID first\n\t\toutput = doc.getElementById( input );\n\n\t\t// then as selector, if possible\n\t\tif ( !output && doc.querySelector ) {\n\t\t\ttry {\n\t\t\t\toutput = doc.querySelector( input );\n\t\t\t} catch (e) { /* this space intentionally left blank */ }\n\t\t}\n\n\t\t// did it work?\n\t\tif ( output && output.nodeType ) {\n\t\t\treturn output;\n\t\t}\n\t}\n\n\t// If we've been given a collection (jQuery, Zepto etc), extract the first item\n\tif ( input[0] && input[0].nodeType ) {\n\t\treturn input[0];\n\t}\n\n\treturn null;\n}\n\nif ( !isClient ) {\n\tmatches = null;\n} else {\n\tdiv = createElement( 'div' );\n\tmethodNames = [ 'matches', 'matchesSelector' ];\n\n\tmakeFunction = function ( methodName ) {\n\t\treturn function ( node, selector ) {\n\t\t\treturn node[ methodName ]( selector );\n\t\t};\n\t};\n\n\ti = methodNames.length;\n\n\twhile ( i-- && !matches ) {\n\t\tunprefixed = methodNames[i];\n\n\t\tif ( div[ unprefixed ] ) {\n\t\t\tmatches = makeFunction( unprefixed );\n\t\t} else {\n\t\t\tj = vendors.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\tprefixed = vendors[i] + unprefixed.substr( 0, 1 ).toUpperCase() + unprefixed.substring( 1 );\n\n\t\t\t\tif ( div[ prefixed ] ) {\n\t\t\t\t\tmatches = makeFunction( prefixed );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// IE8... and apparently phantom some?\n\t/* istanbul ignore next */\n\tif ( !matches ) {\n\t\tmatches = function ( node, selector ) {\n\t\t\tlet parentNode, i;\n\n\t\t\tparentNode = node.parentNode;\n\n\t\t\tif ( !parentNode ) {\n\t\t\t\t// empty dummy <div>\n\t\t\t\tdiv.innerHTML = '';\n\n\t\t\t\tparentNode = div;\n\t\t\t\tnode = node.cloneNode();\n\n\t\t\t\tdiv.appendChild( node );\n\t\t\t}\n\n\t\t\tconst nodes = parentNode.querySelectorAll( selector );\n\n\t\t\ti = nodes.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( nodes[i] === node ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nfunction detachNode ( node ) {\n\t// stupid ie\n\tif ( node && typeof node.parentNode !== 'unknown' && node.parentNode ) { // eslint-disable-line valid-typeof\n\t\tnode.parentNode.removeChild( node );\n\t}\n\n\treturn node;\n}\n\nfunction safeToStringValue ( value ) {\n\treturn ( value == null || ( isNumber( value ) && isNaN( value ) ) || !value.toString ) ? '' : '' + value;\n}\n\nfunction safeAttributeString ( string ) {\n\treturn safeToStringValue( string )\n\t\t.replace( /&/g, '&amp;' )\n\t\t.replace( /\""/g, '&quot;' )\n\t\t.replace( /'/g, '&#39;' );\n}\n\nexport { createElement, detachNode, getElement, matches, safeToStringValue, safeAttributeString };\n"",""export const html   = 'http://www.w3.org/1999/xhtml';\nexport const mathml = 'http://www.w3.org/1998/Math/MathML';\nexport const svg    = 'http://www.w3.org/2000/svg';\nexport const xlink  = 'http://www.w3.org/1999/xlink';\nexport const xml    = 'http://www.w3.org/XML/1998/namespace';\nexport const xmlns  = 'http://www.w3.org/2000/xmlns';\n\nexport default { html, mathml, svg, xlink, xml, xmlns };\n"",""import staticContext, { getNodeInfo as staticInfo } from '../static/getContext';\nimport { isString } from 'utils/is';\n\nexport default function getContext ( node, options ) {\n\tif ( isString( node ) ) {\n\t\tnode = this.find( node, options );\n\t}\n\n\treturn staticContext( node );\n}\n\nexport function getNodeInfo ( node, options ) {\n\tif ( isString( node ) ) {\n\t\tnode = this.find( node, options );\n\t}\n\n\treturn staticInfo( node );\n}\n"",""import { doc } from 'config/environment';\nimport getRactiveContext from 'shared/getRactiveContext';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { isString } from 'utils/is';\n\nconst query = doc && doc.querySelector;\n\nexport default function getContext ( node ) {\n\tif ( isString( node ) && query ) {\n\t\tnode = query.call( document, node );\n\t}\n\n\tlet instances;\n\tif ( node ) {\n\t\tif ( node._ractive ) {\n\t\t\treturn node._ractive.proxy.getContext();\n\t\t} else if ( ( instances = node.__ractive_instances__ ) && instances.length === 1 ) {\n\t\t\treturn getRactiveContext( instances[0] );\n\t\t}\n\t}\n}\n\nexport function getNodeInfo ( node ) {\n\twarnOnceIfDebug( `getNodeInfo has been renamed to getContext, and the getNodeInfo alias will be removed in a future release.` );\n\treturn getContext ( node );\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport { FakeFragment } from 'shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nexport default function Ractive$get ( keypath, opts ) {\n\tif ( !isString( keypath ) ) return this.viewmodel.get( true, keypath );\n\n\tconst keys = splitKeypath( keypath );\n\tconst key = keys[0];\n\n\tlet model;\n\n\tif ( !this.viewmodel.has( key ) ) {\n\t\t// if this is an inline component, we may need to create\n\t\t// an implicit mapping\n\t\tif ( this.component && !this.isolated ) {\n\t\t\tmodel = resolveReference( this.fragment || new FakeFragment( this ), key );\n\t\t}\n\t}\n\n\tmodel = this.viewmodel.joinAll( keys );\n\treturn model.get( true, opts );\n}\n"",""import fireEvent from 'src/events/fireEvent';\nimport Context from 'shared/Context';\nimport { assign, create } from 'utils/object';\nimport { isObjectType } from 'utils/is';\n\nexport default function Ractive$fire ( eventName, ...args ) {\n\tlet ctx;\n\n\t// watch for reproxy\n\tif ( args[0] instanceof Context  ) {\n\t\tconst proto = args.shift();\n\t\tctx = create( proto );\n\t\tassign( ctx, proto );\n\t} else if ( isObjectType( args[0] ) && ( args[0] === null || args[0].constructor === Object ) ) {\n\t\tctx = Context.forRactive( this, args.shift() );\n\t} else {\n\t\tctx = Context.forRactive( this );\n\t}\n\n\n\treturn fireEvent( this, eventName, ctx, args );\n}\n"",""import resolveReference from 'src/view/resolvers/resolveReference';\nimport Model from 'src/model/Model';\nimport { isNumeric, isObject, isNumber, isObjectType, isString } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport findElement from 'src/view/items/shared/findElement';\nimport { set as sharedSet } from './set';\nimport makeArrayMethod from '../Ractive/prototype/shared/makeArrayMethod';\nimport { animate as protoAnimate } from '../Ractive/prototype/animate';\nimport { update as protoUpdate } from '../Ractive/prototype/update';\nimport getRactiveContext, { extern, findParentWithContext } from './getRactiveContext';\nimport { hasOwn } from 'utils/object';\nimport { ELEMENT, EVENT } from 'config/types';\n\nconst modelPush = makeArrayMethod( 'push' ).model;\nconst modelPop = makeArrayMethod( 'pop' ).model;\nconst modelShift = makeArrayMethod( 'shift' ).model;\nconst modelUnshift = makeArrayMethod( 'unshift' ).model;\nconst modelSort = makeArrayMethod( 'sort' ).model;\nconst modelSplice = makeArrayMethod( 'splice' ).model;\nconst modelReverse = makeArrayMethod( 'reverse' ).model;\n\nclass ContextData extends Model {\n\tconstructor ( options ) {\n\t\tsuper( null, null );\n\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.value = {};\n\t\tthis.ractive = options.ractive;\n\t\tthis.adaptors = [];\n\t\tthis.context = options.context;\n\t}\n\n\tgetKeypath () {\n\t\treturn '@context.data';\n\t}\n}\n\nexport default class Context {\n\tconstructor ( fragment, element ) {\n\t\tthis.fragment = fragment;\n\t\tthis.element = element || findElement( fragment );\n\t\tthis.node = this.element && this.element.node;\n\t\tthis.ractive = fragment.ractive;\n\t\tthis.root = this;\n\t}\n\n\tget decorators () {\n\t\tconst items = {};\n\t\tif ( !this.element ) return items;\n\t\tthis.element.decorators.forEach( d => items[ d.name ] = d.handle );\n\t\treturn items;\n\t}\n\n\tget _data () {\n\t\treturn this.model || ( this.root.model = new ContextData({ ractive: this.ractive, context: this.root }) );\n\t}\n\n\t// the usual mutation suspects\n\tadd ( keypath, d, options ) {\n\t\tconst num = isNumber( d ) ? +d : 1;\n\t\tconst opts = isObjectType( d ) ? d : options;\n\t\treturn sharedSet( build( this, keypath, num ).map( pair => {\n\t\t\tconst [ model, val ] = pair;\n\t\t\tconst value = model.get();\n\t\t\tif ( !isNumeric( val ) || !isNumeric( value ) ) throw new Error( 'Cannot add non-numeric value' );\n\t\t\treturn [ model, value + val ];\n\t\t}), opts );\n\t}\n\n\tanimate ( keypath, value, options ) {\n\t\tconst model = findModel( this, keypath ).model;\n\t\treturn protoAnimate( this.ractive, model, value, options );\n\t}\n\n\t// get relative keypaths and values\n\tget ( keypath ) {\n\t\tif ( !keypath ) return this.fragment.findContext().get( true );\n\n\t\tconst { model } = findModel( this, keypath );\n\n\t\treturn model ? model.get( true ) : undefined;\n\t}\n\n\tgetParent ( component ) {\n\t\tlet fragment = this.fragment;\n\n\t\tif ( fragment.context ) fragment = findParentWithContext( fragment.parent || ( component && fragment.componentParent ) );\n\t\telse {\n\t\t\tfragment = findParentWithContext( fragment.parent || ( component && fragment.componentParent ) );\n\t\t\tif ( fragment ) fragment = findParentWithContext( fragment.parent || ( component && fragment.componentParent ) );\n\t\t}\n\n\t\tif ( !fragment || fragment === this.fragment ) return;\n\t\telse return fragment.getContext();\n\t}\n\n\thasListener ( name, bubble ) {\n\t\tlet el = this.element || this.fragment.owner;\n\n\t\tdo {\n\t\t\tif ( el.template.t === ELEMENT ) {\n\t\t\t\tif ( findEvent( el, name ) ) return true;\n\t\t\t}\n\t\t\tel = el.up && el.up.owner;\n\t\t\tif ( el && el.component ) el = el.component;\n\t\t} while ( el && bubble );\n\t}\n\n\tlink ( source, dest ) {\n\t\tconst there = findModel( this, source ).model;\n\t\tconst here = findModel( this, dest ).model;\n\t\tconst promise = runloop.start();\n\t\there.link( there, source );\n\t\trunloop.end();\n\t\treturn promise;\n\t}\n\n\tlisten ( event, handler ) {\n\t\tconst el = this.element;\n\t\tel.on( event, handler );\n\t\treturn {\n\t\t\tcancel () { el.off( event, handler ); }\n\t\t};\n\t}\n\n\tobserve ( keypath, callback, options = {} ) {\n\t\tif ( isObject( keypath ) ) options = callback || {};\n\t\toptions.fragment = this.fragment;\n\t\treturn this.ractive.observe( keypath, callback, options );\n\t}\n\n\tobserveOnce ( keypath, callback, options = {} ) {\n\t\tif ( isObject( keypath ) ) options = callback || {};\n\t\toptions.fragment = this.fragment;\n\t\treturn this.ractive.observeOnce( keypath, callback, options );\n\t}\n\n\tpop ( keypath ) {\n\t\treturn modelPop( findModel( this, keypath ).model, [] );\n\t}\n\n\tpush ( keypath, ...values ) {\n\t\treturn modelPush( findModel( this, keypath ).model, values );\n\t}\n\n\traise ( name, event, ...args ) {\n\t\tlet el = this.element;\n\t\tlet ev;\n\n\t\twhile ( el ) {\n\t\t\tif ( el.component ) el = el.component;\n\t\t\tev = findEvent( el, name );\n\t\t\tif ( ev ) {\n\t\t\t\treturn ev.fire(\n\t\t\t\t\tev.element.getContext(\n\t\t\t\t\t\tevent || {},\n\t\t\t\t\t\tevent && !( 'original' in event ) ? { original: {} } : {}\n\t\t\t\t\t),\n\t\t\t\t\targs\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tel = el.up && el.up.owner;\n\t\t}\n\t}\n\n\treadLink ( keypath, options ) {\n\t\treturn this.ractive.readLink( this.resolve( keypath ), options );\n\t}\n\n\tresolve ( path, ractive ) {\n\t\tconst { model, instance } = findModel( this, path );\n\t\treturn model ? model.getKeypath( ractive || instance ) : path;\n\t}\n\n\treverse ( keypath ) {\n\t\treturn modelReverse( findModel( this, keypath ).model, [] );\n\t}\n\n\tset ( keypath, value, options ) {\n\t\treturn sharedSet( build( this, keypath, value ), options );\n\t}\n\n\tshift ( keypath ) {\n\t\treturn modelShift( findModel( this, keypath ).model, [] );\n\t}\n\n\tsplice ( keypath, index, drop, ...add ) {\n\t\tadd.unshift( index, drop );\n\t\treturn modelSplice( findModel( this, keypath ).model, add );\n\t}\n\n\tsort ( keypath ) {\n\t\treturn modelSort( findModel( this, keypath ).model, [] );\n\t}\n\n\tsubtract ( keypath, d, options ) {\n\t\tconst num = isNumber( d ) ? d : 1;\n\t\tconst opts = isObjectType( d ) ? d : options;\n\t\treturn sharedSet( build( this, keypath, num ).map( pair => {\n\t\t\tconst [ model, val ] = pair;\n\t\t\tconst value = model.get();\n\t\t\tif ( !isNumeric( val ) || !isNumeric( value ) ) throw new Error( 'Cannot add non-numeric value' );\n\t\t\treturn [ model, value - val ];\n\t\t}), opts );\n\t}\n\n\ttoggle ( keypath, options ) {\n\t\tconst { model } = findModel( this, keypath );\n\t\treturn sharedSet( [ [ model, !model.get() ] ], options );\n\t}\n\n\tunlink ( dest ) {\n\t\tconst here = findModel( this, dest ).model;\n\t\tconst promise = runloop.start();\n\t\tif ( here.owner && here.owner._link ) here.owner.unlink();\n\t\trunloop.end();\n\t\treturn promise;\n\t}\n\n\tunlisten ( event, handler ) {\n\t\tthis.element.off( event, handler );\n\t}\n\n\tunshift ( keypath, ...add ) {\n\t\treturn modelUnshift( findModel( this, keypath ).model, add );\n\t}\n\n\tupdate ( keypath, options ) {\n\t\treturn protoUpdate( this.ractive, findModel( this, keypath ).model, options );\n\t}\n\n\tupdateModel ( keypath, cascade ) {\n\t\tconst { model } = findModel( this, keypath );\n\t\tconst promise = runloop.start();\n\t\tmodel.updateFromBindings( cascade );\n\t\trunloop.end();\n\t\treturn promise;\n\t}\n\n\t// two-way binding related helpers\n\tisBound () {\n\t\tconst { model } = this.getBindingModel( this );\n\t\treturn !!model;\n\t}\n\n\tgetBindingPath ( ractive ) {\n\t\tconst { model, instance } = this.getBindingModel( this );\n\t\tif ( model ) return model.getKeypath( ractive || instance );\n\t}\n\n\tgetBinding () {\n\t\tconst { model } = this.getBindingModel( this );\n\t\tif ( model ) return model.get( true );\n\t}\n\n\tgetBindingModel ( ctx ) {\n\t\tconst el = ctx.element;\n\t\treturn { model: el.binding && el.binding.model, instance: el.up.ractive };\n\t}\n\n\tsetBinding ( value ) {\n\t\tconst { model } = this.getBindingModel( this );\n\t\treturn sharedSet( [ [ model, value ] ] );\n\t}\n}\n\nContext.forRactive = getRactiveContext;\n// circular deps are fun\nextern.Context = Context;\n\n// TODO: at some point perhaps this could support relative * keypaths?\nfunction build ( ctx, keypath, value ) {\n\tconst sets = [];\n\n\t// set multiple keypaths in one go\n\tif ( isObject( keypath ) ) {\n\t\tfor ( const k in keypath ) {\n\t\t\tif ( hasOwn( keypath, k ) ) {\n\t\t\t\tsets.push( [ findModel( ctx, k ).model, keypath[k] ] );\n\t\t\t}\n\t\t}\n\n\t}\n\t// set a single keypath\n\telse {\n\t\tsets.push( [ findModel( ctx, keypath ).model, value ] );\n\t}\n\n\treturn sets;\n}\n\nfunction findModel ( ctx, path ) {\n\tconst frag = ctx.fragment;\n\n\tif ( !isString( path ) ) {\n\t\treturn { model: frag.findContext(), instance: path };\n\t}\n\n\treturn { model: resolveReference( frag, path ), instance: frag.ractive };\n}\n\nfunction findEvent( el, name ) {\n\treturn el.attributes && el.attributes.find( a => a.template.t === EVENT && ~a.template.n.indexOf( name ) );\n}\n"",""import Hook from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { splitKeypath } from 'shared/keypaths';\nimport { isString } from 'utils/is';\n\nconst updateHook = new Hook( 'update' );\n\nexport function update ( ractive, model, options ) {\n\t// if the parent is wrapped, the adaptor will need to be updated before\n\t// updating on this keypath\n\tif ( model.parent && model.parent.wrapper ) {\n\t\tmodel.parent.adapt();\n\t}\n\n\tconst promise = runloop.start();\n\n\tmodel.mark( options && options.force );\n\n\t// notify upstream of changes\n\tmodel.notifyUpstream();\n\n\trunloop.end();\n\n\tupdateHook.fire( ractive, model );\n\n\treturn promise;\n}\n\nexport default function Ractive$update ( keypath, options ) {\n\tlet opts, path;\n\n\tif ( isString( keypath ) ) {\n\t\tpath = splitKeypath( keypath );\n\t\topts = options;\n\t} else {\n\t\topts = keypath;\n\t}\n\n\treturn update( this, path ? this.viewmodel.joinAll( path ) : this.viewmodel, opts );\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\nimport getNewIndices from 'shared/getNewIndices';\nimport { isArray } from 'utils/is';\n\nconst arrayProto = Array.prototype;\n\nexport default function ( methodName ) {\n\tfunction path ( keypath, ...args ) {\n\t\treturn model( this.viewmodel.joinAll( splitKeypath( keypath ) ), args );\n\t}\n\n\tfunction model ( mdl, args ) {\n\t\tlet array = mdl.get();\n\n\t\tif ( !isArray( array ) ) {\n\t\t\tif ( array === undefined ) {\n\t\t\t\tarray = [];\n\t\t\t\tconst result = arrayProto[ methodName ].apply( array, args );\n\t\t\t\tconst promise = runloop.start().then( () => result );\n\t\t\t\tmdl.set( array );\n\t\t\t\trunloop.end();\n\t\t\t\treturn promise;\n\t\t\t} else {\n\t\t\t\tthrow new Error( `shuffle array method ${methodName} called on non-array at ${mdl.getKeypath()}` );\n\t\t\t}\n\t\t}\n\n\t\tconst newIndices = getNewIndices( array.length, methodName, args );\n\t\tconst result = arrayProto[ methodName ].apply( array, args );\n\n\t\tconst promise = runloop.start().then( () => result );\n\t\tpromise.result = result;\n\n\t\tif ( newIndices ) {\n\t\t\tif ( mdl.shuffle ) {\n\t\t\t\tmdl.shuffle( newIndices );\n\t\t\t} else { // it's a computation, which don't have a shuffle, so just invalidate\n\t\t\t\tmdl.mark();\n\t\t\t}\n\t\t} else {\n\t\t\tmdl.set( result );\n\t\t}\n\n\t\trunloop.end();\n\n\t\treturn promise;\n\t}\n\n\treturn { path, model };\n}\n"",""import { isNumber } from 'utils/is';\n\n// This function takes an array, the name of a mutator method, and the\n// arguments to call that mutator method with, and returns an array that\n// maps the old indices to their new indices.\n\n// So if you had something like this...\n//\n//     array = [ 'a', 'b', 'c', 'd' ];\n//     array.push( 'e' );\n//\n// ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices\n// have changed. If you then did this...\n//\n//     array.unshift( 'z' );\n//\n// ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved\n// one higher to make room for the 'z'. If you removed an item, the new index\n// would be -1...\n//\n//     array.splice( 2, 2 );\n//\n// ...this would result in [ 0, 1, -1, -1, 2, 3 ].\n//\n// This information is used to enable fast, non-destructive shuffling of list\n// sections when you do e.g. `ractive.splice( 'items', 2, 2 );\n\nexport default function getNewIndices ( length, methodName, args ) {\n\tconst newIndices = [];\n\n\tconst spliceArguments = getSpliceEquivalent( length, methodName, args );\n\n\tif ( !spliceArguments ) {\n\t\treturn null; // TODO support reverse and sort?\n\t}\n\n\tconst balance = ( spliceArguments.length - 2 ) - spliceArguments[1];\n\n\tconst removeStart = Math.min( length, spliceArguments[0] );\n\tconst removeEnd = removeStart + spliceArguments[1];\n\tnewIndices.startIndex = removeStart;\n\n\tlet i;\n\tfor ( i = 0; i < removeStart; i += 1 ) {\n\t\tnewIndices.push( i );\n\t}\n\n\tfor ( ; i < removeEnd; i += 1 ) {\n\t\tnewIndices.push( -1 );\n\t}\n\n\tfor ( ; i < length; i += 1 ) {\n\t\tnewIndices.push( i + balance );\n\t}\n\n\t// there is a net shift for the rest of the array starting with index + balance\n\tif ( balance !== 0 ) {\n\t\tnewIndices.touchedFrom = spliceArguments[0];\n\t} else {\n\t\tnewIndices.touchedFrom = length;\n\t}\n\n\treturn newIndices;\n}\n\n\n// The pop, push, shift an unshift methods can all be represented\n// as an equivalent splice\nfunction getSpliceEquivalent ( length, methodName, args ) {\n\tswitch ( methodName ) {\n\t\tcase 'splice':\n\t\t\tif ( args[0] !== undefined && args[0] < 0 ) {\n\t\t\t\targs[0] = length + Math.max( args[0], -length );\n\t\t\t}\n\n\t\t\tif ( args[0] === undefined ) args[0] = 0;\n\n\t\t\twhile ( args.length < 2 ) {\n\t\t\t\targs.push( length - args[0] );\n\t\t\t}\n\n\t\t\tif ( !isNumber( args[1] ) ) {\n\t\t\t\targs[1] = length - args[0];\n\t\t\t}\n\n\t\t\t// ensure we only remove elements that exist\n\t\t\targs[1] = Math.min( args[1], length - args[0] );\n\n\t\t\treturn args;\n\n\t\tcase 'sort':\n\t\tcase 'reverse':\n\t\t\treturn null;\n\n\t\tcase 'pop':\n\t\t\tif ( length ) {\n\t\t\t\treturn [ length - 1, 1 ];\n\t\t\t}\n\t\t\treturn [ 0, 0 ];\n\n\t\tcase 'push':\n\t\t\treturn [ length, 0 ].concat( args );\n\n\t\tcase 'shift':\n\t\t\treturn [ 0, length ? 1 : 0 ];\n\n\t\tcase 'unshift':\n\t\t\treturn [ 0, 0 ].concat( args );\n\t}\n}\n"",""import { ANCHOR, COMPONENT, ELEMENT } from 'config/types';\n\nexport default function findElement( start, orComponent = true, name ) {\n\twhile ( start && ( start.type !== ELEMENT || ( name && start.name !== name ) ) && ( !orComponent || ( start.type !== COMPONENT && start.type !== ANCHOR ) ) ) {\n\t\t// start is a fragment - look at the owner\n\t\tif ( start.owner ) start = start.owner;\n\t\t// start is a component or yielder - look at the container\n\t\telse if ( start.component ) start = start.containerFragment || start.component.up;\n\t\t// start is an item - look at the parent\n\t\telse if ( start.parent ) start = start.parent;\n\t\t// start is an item without a parent - look at the parent fragment\n\t\telse if ( start.up ) start = start.up;\n\n\t\telse start = undefined;\n\t}\n\n\treturn start;\n}\n"",""export const TEXT              = 1;\nexport const INTERPOLATOR      = 2;\nexport const TRIPLE            = 3;\nexport const SECTION           = 4;\nexport const INVERTED          = 5;\nexport const CLOSING           = 6;\nexport const ELEMENT           = 7;\nexport const PARTIAL           = 8;\nexport const COMMENT           = 9;\nexport const DELIMCHANGE       = 10;\nexport const ANCHOR            = 11;\nexport const ATTRIBUTE         = 13;\nexport const CLOSING_TAG       = 14;\nexport const COMPONENT         = 15;\nexport const YIELDER           = 16;\nexport const INLINE_PARTIAL    = 17;\nexport const DOCTYPE           = 18;\nexport const ALIAS             = 19;\n\nexport const NUMBER_LITERAL    = 20;\nexport const STRING_LITERAL    = 21;\nexport const ARRAY_LITERAL     = 22;\nexport const OBJECT_LITERAL    = 23;\nexport const BOOLEAN_LITERAL   = 24;\nexport const REGEXP_LITERAL    = 25;\n\nexport const GLOBAL            = 26;\nexport const KEY_VALUE_PAIR    = 27;\n\n\nexport const REFERENCE         = 30;\nexport const REFINEMENT        = 31;\nexport const MEMBER            = 32;\nexport const PREFIX_OPERATOR   = 33;\nexport const BRACKETED         = 34;\nexport const CONDITIONAL       = 35;\nexport const INFIX_OPERATOR    = 36;\n\nexport const INVOCATION        = 40;\n\nexport const SECTION_IF        = 50;\nexport const SECTION_UNLESS    = 51;\nexport const SECTION_EACH      = 52;\nexport const SECTION_WITH      = 53;\nexport const SECTION_IF_WITH   = 54;\n\nexport const ELSE              = 60;\nexport const ELSEIF            = 61;\n\nexport const EVENT             = 70;\nexport const DECORATOR         = 71;\nexport const TRANSITION        = 72;\nexport const BINDING_FLAG      = 73;\nexport const DELEGATE_FLAG     = 74;\n"",""export default function Ractive$findParent ( selector ) {\n\n\tif ( this.parent ) {\n\t\tif ( this.parent.component && this.parent.component.name === selector ) {\n\t\t\treturn this.parent;\n\t\t} else {\n\t\t\treturn this.parent.findParent ( selector );\n\t\t}\n\t}\n\n\treturn null;\n}\n"",""export default function Ractive$findContainer ( selector ) {\n\tif ( this.container ) {\n\t\tif ( this.container.component && this.container.component.name === selector ) {\n\t\t\treturn this.container;\n\t\t} else {\n\t\t\treturn this.container.findContainer( selector );\n\t\t}\n\t}\n\n\treturn null;\n}"",""import { isObjectType } from 'utils/is';\n\nexport default function Ractive$findComponent ( selector, options = {} ) {\n\tif ( isObjectType( selector ) ) {\n\t\toptions = selector;\n\t\tselector = '';\n\t}\n\n\tlet child = this.fragment.findComponent( selector, options );\n\tif ( child ) return child;\n\n\tif ( options.remote ) {\n\t\tif ( !selector && this._children.length ) return this._children[0].instance;\n\t\tfor ( let i = 0; i < this._children.length; i++ ) {\n\t\t\t// skip children that are or should be in an anchor\n\t\t\tif ( this._children[i].target ) continue;\n\t\t\tif ( this._children[i].name === selector ) return this._children[i].instance;\n\t\t\tchild = this._children[i].instance.findComponent( selector, options );\n\t\t\tif ( child ) return child;\n\t\t}\n\t}\n}\n\n"",""import { isArray, isObjectType } from 'utils/is';\n\nexport default function Ractive$findAllComponents ( selector, options ) {\n\tif ( !options && isObjectType( selector ) ) {\n\t\toptions = selector;\n\t\tselector = '';\n\t}\n\n\toptions = options || {};\n\n\tif ( !isArray( options.result ) ) options.result = [];\n\n\tthis.fragment.findAllComponents( selector, options );\n\n\tif ( options.remote ) {\n\t\t// search non-fragment children\n\t\tthis._children.forEach( c => {\n\t\t\tif ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {\n\t\t\t\tif ( !selector || c.name === selector ) {\n\t\t\t\t\toptions.result.push( c.instance );\n\t\t\t\t}\n\n\t\t\t\tc.instance.findAllComponents( selector, options );\n\t\t\t}\n\t\t});\n\t}\n\n\treturn options.result;\n}\n\n"",""import { isArray } from 'utils/is';\n\nexport default function Ractive$findAll ( selector, options = {} ) {\n\tif ( !this.el ) throw new Error( `Cannot call ractive.findAll('${selector}', ...) unless instance is rendered to the DOM` );\n\n\tif ( !isArray( options.result ) ) options.result = [];\n\n\tthis.fragment.findAll( selector, options );\n\n\tif ( options.remote ) {\n\t\t// seach non-fragment children\n\t\tthis._children.forEach( c => {\n\t\t\tif ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {\n\t\t\t\tc.instance.findAll( selector, options );\n\t\t\t}\n\t\t});\n\t}\n\n\treturn options.result;\n}\n"",""export default function Ractive$find ( selector, options = {} ) {\n\tif ( !this.el ) throw new Error( `Cannot call ractive.find('${selector}') unless instance is rendered to the DOM` );\n\n\tlet node = this.fragment.find( selector, options );\n\tif ( node ) return node;\n\n\tif ( options.remote ) {\n\t\tfor ( let i = 0; i < this._children.length; i++ ) {\n\t\t\tif ( !this._children[i].instance.fragment.rendered ) continue;\n\t\t\tnode = this._children[i].instance.find( selector, options );\n\t\t\tif ( node ) return node;\n\t\t}\n\t}\n}\n"",""import Hook from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { updateAnchors } from 'shared/anchors';\n\nconst detachHook = new Hook( 'detachchild' );\n\nexport default function detachChild ( child ) {\n\tconst children = this._children;\n\tlet meta, index;\n\n\tlet i = children.length;\n\twhile ( i-- ) {\n\t\tif ( children[i].instance === child ) {\n\t\t\tindex = i;\n\t\t\tmeta = children[i];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( !meta || child.parent !== this ) throw new Error( `Instance ${child._guid} is not attached to this instance.` );\n\n\tconst promise = runloop.start();\n\n\tif ( meta.anchor ) meta.anchor.removeChild( meta );\n\tif ( !child.isolated ) child.viewmodel.detached();\n\n\trunloop.end();\n\n\tchildren.splice( index, 1 );\n\tif ( meta.target ) {\n\t\tthis.splice( `@this.children.byName.${meta.target}`, children.byName[ meta.target ].indexOf(meta), 1 );\n\t\tupdateAnchors( this, meta.target );\n\t}\n\tchild.set({\n\t\t'@this.parent': undefined,\n\t\t'@this.root': child\n\t});\n\tchild.component = null;\n\n\tdetachHook.fire( child );\n\n\tpromise.ractive = child;\n\treturn promise.then( () => child );\n}\n"",""import Hook from 'src/events/Hook';\nimport { removeFromArray } from 'utils/array';\n\nconst detachHook = new Hook( 'detach' );\n\nexport default function Ractive$detach () {\n\tif ( this.isDetached ) {\n\t\treturn this.el;\n\t}\n\n\tif ( this.el ) {\n\t\tremoveFromArray( this.el.__ractive_instances__, this );\n\t}\n\n\tthis.el = this.fragment.detach();\n\tthis.isDetached = true;\n\n\tdetachHook.fire( this );\n\treturn this.el;\n}\n"",""import Hook from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { unrenderChild, updateAnchors } from 'shared/anchors';\n\nconst attachHook = new Hook( 'attachchild' );\n\nexport default function attachChild ( child, options = {} ) {\n\tconst children = this._children;\n\tlet idx;\n\n\tif ( child.parent && child.parent !== this ) throw new Error( `Instance ${child._guid} is already attached to a different instance ${child.parent._guid}. Please detach it from the other instance using detachChild first.` );\n\telse if ( child.parent ) throw new Error( `Instance ${child._guid} is already attached to this instance.` );\n\n\tconst meta = {\n\t\tinstance: child,\n\t\tractive: this,\n\t\tname: options.name || child.constructor.name || 'Ractive',\n\t\ttarget: options.target || false,\n\t\tbubble,\n\t\tfindNextNode\n\t};\n\tmeta.nameOption = options.name;\n\n\t// child is managing itself\n\tif ( !meta.target ) {\n\t\tmeta.up = this.fragment;\n\t\tmeta.external = true;\n\t} else {\n\t\tlet list;\n\t\tif ( !( list = children.byName[ meta.target ] ) ) {\n\t\t\tlist = [];\n\t\t\tthis.set( `@this.children.byName.${meta.target}`, list );\n\t\t}\n\t\tidx = options.prepend ? 0 : options.insertAt !== undefined ? options.insertAt : list.length;\n\t}\n\n\tchild.set({\n\t\t'@this.parent': this,\n\t\t'@this.root': this.root\n\t});\n\tchild.component = meta;\n\tchildren.push( meta );\n\n\tattachHook.fire( child );\n\n\tconst promise = runloop.start();\n\n\tif ( meta.target ) {\n\t\tunrenderChild( meta );\n\t\tthis.splice( `@this.children.byName.${meta.target}`, idx, 0, meta );\n\t\tupdateAnchors( this, meta.target );\n\t} else {\n\t\tif ( !child.isolated ) child.viewmodel.attached( this.fragment );\n\t}\n\n\trunloop.end();\n\n\tpromise.ractive = child;\n\treturn promise.then( () => child );\n}\n\nfunction bubble () { runloop.addFragment( this.instance.fragment ); }\n\nfunction findNextNode () {\n\tif ( this.anchor ) return this.anchor.findNextNode();\n}\n"",""export function findAnchors ( fragment, name = null ) {\n\tconst res = [];\n\n\tfindAnchorsIn( fragment, name, res );\n\n\treturn res;\n}\n\nfunction findAnchorsIn ( item, name, result ) {\n\tif ( item.isAnchor ) {\n\t\tif ( !name || item.name === name ) {\n\t\t\tresult.push( item );\n\t\t}\n\t} else if ( item.items ) {\n\t\titem.items.forEach( i => findAnchorsIn( i, name, result ) );\n\t} else if ( item.iterations ) {\n\t\titem.iterations.forEach( i => findAnchorsIn( i, name, result ) );\n\t} else if ( item.fragment && !item.component ) {\n\t\tfindAnchorsIn( item.fragment, name, result );\n\t}\n}\n\nexport function updateAnchors ( instance, name = null ) {\n\tconst anchors = findAnchors( instance.fragment, name );\n\tconst idxs = {};\n\tconst children = instance._children.byName;\n\n\tanchors.forEach( a => {\n\t\tconst name = a.name;\n\t\tif ( !( name in idxs ) ) idxs[name] = 0;\n\t\tconst idx = idxs[name];\n\t\tconst child = ( children[name] || [] )[idx];\n\n\t\tif ( child && child.lastBound !== a ) {\n\t\t\tif ( child.lastBound ) child.lastBound.removeChild( child );\n\t\t\ta.addChild( child );\n\t\t}\n\n\t\tidxs[name]++;\n\t});\n}\n\nexport function unrenderChild ( meta ) {\n\tif ( meta.instance.fragment.rendered ) {\n\t\tmeta.shouldDestroy = true;\n\t\tmeta.instance.unrender();\n\t}\n\tmeta.instance.el = null;\n}\n"",""import fireEvent from './fireEvent';\nimport getRactiveContext from '../shared/getRactiveContext';\n\nexport default class Hook {\n\tconstructor ( event ) {\n\t\tthis.event = event;\n\t\tthis.method = 'on' + event;\n\t}\n\n\tfire ( ractive, arg ) {\n\t\tconst context = getRactiveContext( ractive );\n\n\t\tif ( ractive[ this.method ] ) {\n\t\t\targ ? ractive[ this.method ]( context, arg ) : ractive[ this.method ]( context );\n\t\t}\n\n\t\tfireEvent( ractive, this.event, context, arg ? [ arg, ractive ] : [ ractive ] );\n\t}\n}\n"",""import { enqueue, dequeue } from './eventStack';\n\nconst initStars = {};\nconst bubbleStars = {};\n\n// cartesian product of name parts and stars\n// adjusted appropriately for special cases\nfunction variants ( name, initial ) {\n\tconst map = initial ? initStars : bubbleStars;\n\tif ( map[ name ] ) return map[ name ];\n\n\tconst parts = name.split( '.' );\n\tconst result = [];\n\tlet base = false;\n\n\t// initial events the implicit namespace of 'this'\n\tif ( initial ) {\n\t\tparts.unshift( 'this' );\n\t\tbase = true;\n\t}\n\n\t// use max - 1 bits as a bitmap to pick a part or a *\n\t// need to skip the full star case if the namespace is synthetic\n\tconst max = Math.pow( 2, parts.length ) - ( initial ? 1 : 0 );\n\tfor ( let i = 0; i < max; i++ ) {\n\t\tconst join = [];\n\t\tfor ( let j = 0; j < parts.length; j++ ) {\n\t\t\tjoin.push( 1 & ( i >> j ) ? '*' : parts[j] );\n\t\t}\n\t\tresult.unshift( join.join( '.' ) );\n\t}\n\n\tif ( base ) {\n\t\t// include non-this-namespaced versions\n\t\tif ( parts.length > 2 ) {\n\t\t\tresult.push.apply( result, variants( name, false ) );\n\t\t} else {\n\t\t\tresult.push( '*' );\n\t\t\tresult.push( name );\n\t\t}\n\t}\n\n\tmap[ name ] = result;\n\treturn result;\n}\n\nexport default function fireEvent ( ractive, eventName, context, args = [] ) {\n\tif ( !eventName ) { return; }\n\n\tcontext.name = eventName;\n\targs.unshift( context );\n\n\tconst eventNames = ractive._nsSubs ? variants( eventName, true ) : [ '*', eventName ];\n\n\treturn fireEventAs( ractive, eventNames, context, args, true );\n}\n\nfunction fireEventAs  ( ractive, eventNames, context, args, initialFire = false ) {\n\tlet bubble = true;\n\n\tif ( initialFire || ractive._nsSubs ) {\n\t\tenqueue( ractive, context );\n\n\t\tlet i = eventNames.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( eventNames[ i ] in ractive._subs ) {\n\t\t\t\tbubble = notifySubscribers( ractive, ractive._subs[ eventNames[ i ] ], context, args ) && bubble;\n\t\t\t}\n\t\t}\n\n\t\tdequeue( ractive );\n\t}\n\n\tif ( ractive.parent && bubble ) {\n\t\tif ( initialFire && ractive.component ) {\n\t\t\tconst fullName = ractive.component.name + '.' + eventNames[ eventNames.length - 1 ];\n\t\t\teventNames = variants( fullName, false );\n\n\t\t\tif ( context && !context.component ) {\n\t\t\t\tcontext.component = ractive;\n\t\t\t}\n\t\t}\n\n\t\tbubble = fireEventAs( ractive.parent, eventNames, context, args );\n\t}\n\n\treturn bubble;\n}\n\nfunction notifySubscribers ( ractive, subscribers, context, args ) {\n\tlet originalEvent = null;\n\tlet stopEvent = false;\n\n\t// subscribers can be modified inflight, e.g. \""once\"" functionality\n\t// so we need to copy to make sure everyone gets called\n\tsubscribers = subscribers.slice();\n\n\tfor ( let i = 0, len = subscribers.length; i < len; i += 1 ) {\n\t\tif ( !subscribers[ i ].off && subscribers[ i ].handler.apply( ractive, args ) === false ) {\n\t\t\tstopEvent = true;\n\t\t}\n\t}\n\n\tif ( context && stopEvent && ( originalEvent = context.event ) ) {\n\t\toriginalEvent.preventDefault && originalEvent.preventDefault();\n\t\toriginalEvent.stopPropagation && originalEvent.stopPropagation();\n\t}\n\n\treturn !stopEvent;\n}\n"",""export function enqueue ( ractive, event ) {\n\tif ( ractive.event ) {\n\t\tractive._eventQueue.push( ractive.event );\n\t}\n\n\tractive.event = event;\n}\n\nexport function dequeue ( ractive ) {\n\tif ( ractive._eventQueue.length ) {\n\t\tractive.event = ractive._eventQueue.pop();\n\t} else {\n\t\tractive.event = null;\n\t}\n}\n"",""import runloop from 'src/global/runloop';\nimport easing from 'src/Ractive/static/easing';\nimport interpolate from 'shared/interpolate';\nimport { isEqual, isFunction, isObjectType } from 'utils/is';\nimport noop from 'utils/noop';\nimport { splitKeypath } from 'shared/keypaths';\nimport { defineProperty, keys as objectKeys } from 'utils/object';\n\nfunction immediate ( value ) {\n\tconst result = Promise.resolve( value );\n\tdefineProperty( result, 'stop', { value: noop });\n\treturn result;\n}\n\nconst linear = easing.linear;\n\nfunction getOptions ( options, instance ) {\n\toptions = options || {};\n\n\tlet easing;\n\tif ( options.easing ) {\n\t\teasing = isFunction( options.easing ) ?\n\t\t\toptions.easing :\n\t\t\tinstance.easing[ options.easing ];\n\t}\n\n\treturn {\n\t\teasing: easing || linear,\n\t\tduration: 'duration' in options ? options.duration : 400,\n\t\tcomplete: options.complete || noop,\n\t\tstep: options.step || noop,\n\t\tinterpolator: options.interpolator\n\t};\n}\n\nexport function animate ( ractive, model, to, options ) {\n\toptions = getOptions( options, ractive );\n\tconst from = model.get();\n\n\t// don't bother animating values that stay the same\n\tif ( isEqual( from, to ) ) {\n\t\toptions.complete( options.to );\n\t\treturn immediate( to );\n\t}\n\n\tconst interpolator = interpolate( from, to, ractive, options.interpolator );\n\n\t// if we can't interpolate the value, set it immediately\n\tif ( !interpolator ) {\n\t\trunloop.start();\n\t\tmodel.set( to );\n\t\trunloop.end();\n\n\t\treturn immediate( to );\n\t}\n\n\treturn model.animate( from, to, options, interpolator );\n}\n\nexport default function Ractive$animate ( keypath, to, options ) {\n\tif ( isObjectType( keypath ) ) {\n\t\tconst keys = objectKeys( keypath );\n\n\t\tthrow new Error( `ractive.animate(...) no longer supports objects. Instead of ractive.animate({\n  ${keys.map( key => `'${key}': ${keypath[ key ]}` ).join( '\\n  ' )}\n}, {...}), do\n\n${keys.map( key => `ractive.animate('${key}', ${keypath[ key ]}, {...});` ).join( '\\n' )}\n` );\n\t}\n\n\n\treturn animate( this, this.viewmodel.joinAll( splitKeypath( keypath ) ), to, options );\n}\n"",""import add from './shared/add';\nimport { isNumber, isObjectType } from 'utils/is';\n\nexport default function Ractive$add ( keypath, d, options ) {\n\tconst num = isNumber( d ) ? d : 1;\n\tconst opts = isObjectType( d ) ? d : options;\n\treturn add( this, keypath, num, opts );\n}\n"",""import { isNumeric, isString } from 'utils/is';\nimport { build, set } from 'shared/set';\n\nconst errorMessage = 'Cannot add to a non-numeric value';\n\nexport default function add ( ractive, keypath, d, options ) {\n\tif ( !isString( keypath ) || !isNumeric( d ) ) {\n\t\tthrow new Error( 'Bad arguments' );\n\t}\n\n\tconst sets = build( ractive, keypath, d, options && options.isolated );\n\n\treturn set( sets.map( pair => {\n\t\tconst [ model, add ] = pair;\n\t\tconst value = model.get();\n\t\tif ( !isNumeric( add ) || !isNumeric( value ) ) throw new Error( errorMessage );\n\t\treturn [ model, value + add ];\n\t}));\n}\n"",""import { isArray, isObject, isObjectType, isFunction, isString } from 'utils/is';\nimport { warnIfDebug } from 'utils/log';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport runloop from '../global/runloop';\nimport { splitKeypath } from './keypaths';\nimport { FakeFragment } from './getRactiveContext';\nimport { hasOwn } from 'utils/object';\n\nexport let keep = false;\n\nexport function set ( pairs, options ) {\n\tconst k = keep;\n\n\tconst deep = options && options.deep;\n\tconst shuffle = options && options.shuffle;\n\tconst promise = runloop.start();\n\tif ( options && 'keep' in options ) keep = options.keep;\n\n\tlet i = pairs.length;\n\twhile ( i-- ) {\n\t\tconst model = pairs[i][0];\n\t\tconst value = pairs[i][1];\n\t\tconst keypath = pairs[i][2];\n\n\t\tif ( !model ) {\n\t\t\trunloop.end();\n\t\t\tthrow new Error( `Failed to set invalid keypath '${ keypath }'` );\n\t\t}\n\n\t\tif ( deep ) deepSet( model, value );\n\t\telse if ( shuffle ) {\n\t\t\tlet array = value;\n\t\t\tconst target = model.get();\n\t\t\t// shuffle target array with itself\n\t\t\tif ( !array ) array = target;\n\n\t\t\t// if there's not an array there yet, go ahead and set\n\t\t\tif ( target === undefined ) {\n\t\t\t\tmodel.set( array );\n\t\t\t} else {\n\t\t\t\tif ( !isArray( target ) || !isArray( array ) ) {\n\t\t\t\t\trunloop.end();\n\t\t\t\t\tthrow new Error( 'You cannot merge an array with a non-array' );\n\t\t\t\t}\n\n\t\t\t\tconst comparator = getComparator( shuffle );\n\t\t\t\tmodel.merge( array, comparator );\n\t\t\t}\n\t\t} else model.set( value );\n\t}\n\n\trunloop.end();\n\n\tkeep = k;\n\n\treturn promise;\n}\n\nconst star = /\\*/;\nexport function gather ( ractive, keypath, base, isolated ) {\n\tif ( !base && ( keypath[0] === '.' || keypath[1] === '^' ) ) {\n\t\twarnIfDebug( `Attempted to set a relative keypath from a non-relative context. You can use a context object to set relative keypaths.` );\n\t\treturn [];\n\t}\n\n\tconst keys = splitKeypath( keypath );\n\tconst model = base || ractive.viewmodel;\n\n\tif ( star.test( keypath ) ) {\n\t\treturn model.findMatches( keys );\n\t} else {\n\t\tif ( model === ractive.viewmodel ) {\n\t\t\t// allow implicit mappings\n\t\t\tif ( ractive.component && !ractive.isolated && !model.has( keys[0] ) && keypath[0] !== '@' && keypath[0] && !isolated ) {\n\t\t\t\treturn [ resolveReference( ractive.fragment || new FakeFragment( ractive ), keypath ) ];\n\t\t\t} else {\n\t\t\t\treturn [ model.joinAll( keys ) ];\n\t\t\t}\n\t\t} else {\n\t\t\treturn [ model.joinAll( keys ) ];\n\t\t}\n\t}\n}\n\nexport function build ( ractive, keypath, value, isolated ) {\n\tconst sets = [];\n\n\t// set multiple keypaths in one go\n\tif ( isObject( keypath ) ) {\n\t\tfor ( const k in keypath ) {\n\t\t\tif ( hasOwn( keypath, k ) ) {\n\t\t\t\tsets.push.apply( sets, gather( ractive, k, null, isolated ).map( m => [ m, keypath[k], k ] ) );\n\t\t\t}\n\t\t}\n\n\t}\n\t// set a single keypath\n\telse {\n\t\tsets.push.apply( sets, gather( ractive, keypath, null, isolated ).map( m => [ m, value, keypath ] ) );\n\t}\n\n\treturn sets;\n}\n\nconst deepOpts = { virtual: false };\nfunction deepSet( model, value ) {\n\tconst dest = model.get( false, deepOpts );\n\n\t// if dest doesn't exist, just set it\n\tif ( dest == null || !isObjectType( value ) ) return model.set( value );\n\tif ( !isObjectType( dest ) ) return model.set( value );\n\n\tfor ( const k in value ) {\n\t\tif ( hasOwn( value, k ) ) {\n\t\t\tdeepSet( model.joinKey( k ), value[k] );\n\t\t}\n\t}\n}\n\nconst comparators = {};\nfunction getComparator ( option ) {\n\tif ( option === true ) return null; // use existing arrays\n\tif ( isFunction( option ) ) return option;\n\n\tif ( isString( option ) ) {\n\t\treturn comparators[ option ] || ( comparators[ option ] = thing => thing[ option ] );\n\t}\n\n\tthrow new Error( 'If supplied, options.compare must be a string, function, or true' ); // TODO link to docs\n}\n"",""import noop from 'utils/noop';\nimport { assign, create } from 'utils/object';\n\nexport const extern = {};\n\nexport default function getRactiveContext ( ractive, ...assigns ) {\n\tconst fragment = ractive.fragment || ractive._fakeFragment || ( ractive._fakeFragment = new FakeFragment( ractive ) );\n\treturn fragment.getContext.apply( fragment, assigns );\n}\n\nexport function getContext ( ...assigns ) {\n\tif ( !this.ctx ) this.ctx = new extern.Context( this );\n\tassigns.unshift( create( this.ctx ) );\n\treturn assign.apply( null, assigns );\n}\n\nexport class FakeFragment {\n\tconstructor ( ractive ) {\n\t\tthis.ractive = ractive;\n\t}\n\n\tfindContext () { return this.ractive.viewmodel; }\n}\nconst proto = FakeFragment.prototype;\nproto.getContext = getContext;\nproto.find = proto.findComponent = proto.findAll = proto.findAllComponents = noop;\n\nexport function findParentWithContext ( fragment ) {\n\tlet frag = fragment;\n\twhile ( frag && !frag.context ) frag = frag.parent;\n\tif ( !frag ) return fragment && fragment.ractive.fragment;\n\telse return frag;\n}\n\n"",""import { splitKeypath } from 'shared/keypaths';\nimport SharedModel, { GlobalModel } from 'src/model/specials/SharedModel';\nimport { warnIfDebug } from 'utils/log';\nimport { hasOwn } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nexport default function resolveReference ( fragment, ref ) {\n\tconst initialFragment = fragment;\n\t// current context ref\n\tif ( ref === '.' ) return fragment.findContext();\n\n\t// ancestor references\n\tif ( ref[0] === '~' ) return fragment.ractive.viewmodel.joinAll( splitKeypath( ref.slice( 2 ) ) );\n\n\t// scoped references\n\tif ( ref[0] === '.' || ref[0] === '^' ) {\n\t\tlet frag = fragment;\n\t\tconst parts = ref.split( '/' );\n\t\tconst explicitContext = parts[0] === '^^';\n\t\tlet context = explicitContext ? null : fragment.findContext();\n\n\t\t// account for the first context hop\n\t\tif ( explicitContext ) parts.unshift( '^^' );\n\n\t\t// walk up the context chain\n\t\twhile ( parts[0] === '^^' ) {\n\t\t\tparts.shift();\n\t\t\tcontext = null;\n\t\t\twhile ( frag && !context ) {\n\t\t\t\tcontext = frag.context;\n\t\t\t\tfrag = frag.parent.component ? frag.parent.component.up : frag.parent;\n\t\t\t}\n\t\t}\n\n\t\tif ( !context && explicitContext ) {\n\t\t\tthrow new Error( `Invalid context parent reference ('${ref}'). There is not context at that level.` );\n\t\t}\n\n\t\t// walk up the context path\n\t\twhile ( parts[0] === '.' || parts[0] === '..' ) {\n\t\t\tconst part = parts.shift();\n\n\t\t\tif ( part === '..' ) {\n\t\t\t\tcontext = context.parent;\n\t\t\t}\n\t\t}\n\n\t\tref = parts.join( '/' );\n\n\t\t// special case - `{{.foo}}` means the same as `{{./foo}}`\n\t\tif ( ref[0] === '.' ) ref = ref.slice( 1 );\n\t\treturn context.joinAll( splitKeypath( ref ) );\n\t}\n\n\tconst keys = splitKeypath( ref );\n\tif ( !keys.length ) return;\n\tconst base = keys.shift();\n\n\t// special refs\n\tif ( base[0] === '@' ) {\n\t\t// shorthand from outside the template\n\t\t// @this referring to local ractive instance\n\t\tif ( base === '@this' || base === '@' ) {\n\t\t\treturn fragment.ractive.viewmodel.getRactiveModel().joinAll( keys );\n\t\t}\n\n\t\t// @index or @key referring to the nearest repeating index or key\n\t\telse if ( base === '@index' || base === '@key' ) {\n\t\t\tif ( keys.length ) badReference( base );\n\t\t\tconst repeater = fragment.findRepeatingFragment();\n\t\t\t// make sure the found fragment is actually an iteration\n\t\t\tif ( !repeater.isIteration ) return;\n\t\t\treturn repeater.context && repeater.context.getKeyModel( repeater[ ref[1] === 'i' ? 'index' : 'key' ] );\n\t\t}\n\n\t\t// @global referring to window or global\n\t\telse if ( base === '@global' ) {\n\t\t\treturn GlobalModel.joinAll( keys );\n\t\t}\n\n\t\t// @global referring to window or global\n\t\telse if ( base === '@shared' ) {\n\t\t\treturn SharedModel.joinAll( keys );\n\t\t}\n\n\t\t// @keypath or @rootpath, the current keypath string\n\t\telse if ( base === '@keypath' || base === '@rootpath' ) {\n\t\t\tconst root = ref[1] === 'r' ? fragment.ractive.root : null;\n\t\t\tlet context = fragment.findContext();\n\n\t\t\t// skip over component roots, which provide no context\n\t\t\twhile ( root && context.isRoot && context.ractive.component ) {\n\t\t\t\tcontext = context.ractive.component.up.findContext();\n\t\t\t}\n\n\t\t\treturn context.getKeypathModel( root );\n\t\t}\n\n\t\telse if ( base === '@context' ) {\n\t\t\treturn new ContextModel( fragment.getContext() );\n\t\t}\n\n\t\t// @context-local data\n\t\telse if ( base === '@local' ) {\n\t\t\treturn fragment.getContext()._data.joinAll( keys );\n\t\t}\n\n\t\t// @style shared model\n\t\telse if ( base === '@style' ) {\n\t\t\treturn fragment.ractive.constructor._cssModel.joinAll( keys );\n\t\t}\n\n\t\t// nope\n\t\telse {\n\t\t\tthrow new Error( `Invalid special reference '${base}'` );\n\t\t}\n\t}\n\n\tconst context = fragment.findContext();\n\n\t// check immediate context for a match\n\tif ( context.has( base ) ) {\n\t\treturn context.joinKey( base ).joinAll( keys );\n\t}\n\n\t// walk up the fragment hierarchy looking for a matching ref, alias, or key in a context\n\tlet createMapping = false;\n\tconst shouldWarn = fragment.ractive.warnAboutAmbiguity;\n\n\twhile ( fragment ) {\n\t\t// repeated fragments\n\t\tif ( fragment.isIteration ) {\n\t\t\tif ( base === fragment.parent.keyRef ) {\n\t\t\t\tif ( keys.length ) badReference( base );\n\t\t\t\treturn fragment.context.getKeyModel( fragment.key );\n\t\t\t}\n\n\t\t\tif ( base === fragment.parent.indexRef ) {\n\t\t\t\tif ( keys.length ) badReference( base );\n\t\t\t\treturn fragment.context.getKeyModel( fragment.index );\n\t\t\t}\n\t\t}\n\n\t\t// alias node or iteration\n\t\tif ( fragment.aliases && hasOwn( fragment.aliases, base ) ) {\n\t\t\tconst model = fragment.aliases[ base ];\n\n\t\t\tif ( keys.length === 0 ) return model;\n\t\t\telse if ( isFunction( model.joinAll ) ) {\n\t\t\t\treturn model.joinAll( keys );\n\t\t\t}\n\t\t}\n\n\t\t// check fragment context to see if it has the key we need\n\t\tif ( fragment.context && fragment.context.has( base ) ) {\n\t\t\t// this is an implicit mapping\n\t\t\tif ( createMapping ) {\n\t\t\t\tif ( shouldWarn ) warnIfDebug( `'${ref}' resolved but is ambiguous and will create a mapping to a parent component.` );\n\t\t\t\treturn context.root.createLink( base, fragment.context.joinKey( base ), base, { implicit: true }).joinAll( keys );\n\t\t\t}\n\n\t\t\tif ( shouldWarn ) warnIfDebug( `'${ref}' resolved but is ambiguous.` );\n\t\t\treturn fragment.context.joinKey( base ).joinAll( keys );\n\t\t}\n\n\t\tif ( ( fragment.componentParent || ( !fragment.parent && fragment.ractive.component ) ) && !fragment.ractive.isolated ) {\n\t\t\t// ascend through component boundary\n\t\t\tfragment = fragment.componentParent || fragment.ractive.component.up;\n\t\t\tcreateMapping = true;\n\t\t} else {\n\t\t\tfragment = fragment.parent;\n\t\t}\n\t}\n\n\t// if enabled, check the instance for a match\n\tconst instance = initialFragment.ractive;\n\tif ( instance.resolveInstanceMembers && base !== 'data' && base in instance ) {\n\t\treturn instance.viewmodel.getRactiveModel().joinKey( base ).joinAll( keys );\n\t}\n\n\tif ( shouldWarn ) {\n\t\twarnIfDebug( `'${ref}' is ambiguous and did not resolve.` );\n\t}\n\n\t// didn't find anything, so go ahead and create the key on the local model\n\treturn context.joinKey( base ).joinAll( keys );\n}\n\nfunction badReference ( key ) {\n\tthrow new Error( `An index or key reference (${key}) cannot have child properties` );\n}\n\nclass ContextModel {\n\tconstructor ( context ) {\n\t\tthis.context = context;\n\t}\n\n\tget () { return this.context; }\n}\n"",""/* global global */\nimport Model from '../Model';\n\nexport const data = {};\n\nexport class SharedModel extends Model {\n\tconstructor ( value, name ) {\n\t\tsuper( null, `@${name}` );\n\t\tthis.key = `@${name}`;\n\t\tthis.value = value;\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.adaptors = [];\n\t}\n\n\tgetKeypath() {\n\t\treturn this.key;\n\t}\n\n\tretrieve () { return this.value; }\n}\n\nexport default new SharedModel( data, 'shared' );\n\nexport const GlobalModel = new SharedModel( typeof global !== 'undefined' ? global : window, 'global' );\n"",""import ModelBase, { maybeBind, shuffle } from './ModelBase';\nimport LinkModel from './LinkModel'; // eslint-disable-line no-unused-vars\nimport KeypathModel from './specials/KeypathModel';\nimport { capture } from 'src/global/capture';\nimport { isArray, isEqual, isNumeric, isObjectLike } from 'utils/is';\nimport { handleChange, mark, markForce, marked, teardown } from 'shared/methodCallers';\nimport Ticker from 'shared/Ticker';\nimport getPrefixer from './helpers/getPrefixer';\nimport { unescapeKey } from 'shared/keypaths';\nimport { warnIfDebug } from 'utils/log';\nimport { hasOwn } from 'utils/object';\n\nexport default class Model extends ModelBase {\n\tconstructor ( parent, key ) {\n\t\tsuper( parent );\n\n\t\tthis.ticker = null;\n\n\t\tif ( parent ) {\n\t\t\tthis.key = unescapeKey( key );\n\t\t\tthis.isReadonly = parent.isReadonly;\n\n\t\t\tif ( parent.value ) {\n\t\t\t\tthis.value = parent.value[ this.key ];\n\t\t\t\tif ( isArray( this.value ) ) this.length = this.value.length;\n\t\t\t\tthis.adapt();\n\t\t\t}\n\t\t}\n\t}\n\n\tadapt () {\n\t\tconst adaptors = this.root.adaptors;\n\t\tconst len = adaptors.length;\n\n\t\tthis.rewrap = false;\n\n\t\t// Exit early if no adaptors\n\t\tif ( len === 0 ) return;\n\n\t\tconst value = this.wrapper ? ( 'newWrapperValue' in this ? this.newWrapperValue : this.wrapperValue ) : this.value;\n\n\t\t// TODO remove this legacy nonsense\n\t\tconst ractive = this.root.ractive;\n\t\tconst keypath = this.getKeypath();\n\n\t\t// tear previous adaptor down if present\n\t\tif ( this.wrapper ) {\n\t\t\tconst shouldTeardown = this.wrapperValue === value ? false : !this.wrapper.reset || this.wrapper.reset( value ) === false;\n\n\t\t\tif ( shouldTeardown ) {\n\t\t\t\tthis.wrapper.teardown();\n\t\t\t\tdelete this.wrapper;\n\t\t\t\tdelete this.wrapperValue;\n\n\t\t\t\t// don't branch for undefined values\n\t\t\t\tif ( this.value !== undefined ) {\n\t\t\t\t\tconst parentValue = this.parent.value || this.parent.createBranch( this.key );\n\t\t\t\t\tif ( parentValue[ this.key ] !== value ) parentValue[ this.key ] = value;\n\t\t\t\t\tthis.value = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete this.newWrapperValue;\n\t\t\t\tthis.value = this.wrapper.get();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tconst adaptor = adaptors[i];\n\t\t\tif ( adaptor.filter( value, keypath, ractive ) ) {\n\t\t\t\tthis.wrapper = adaptor.wrap( ractive, value, keypath, getPrefixer( keypath ) );\n\t\t\t\tthis.wrapperValue = value;\n\t\t\t\tthis.wrapper.__model = this; // massive temporary hack to enable array adaptor\n\n\t\t\t\tthis.value = this.wrapper.get();\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tanimate ( from, to, options, interpolator ) {\n\t\tif ( this.ticker ) this.ticker.stop();\n\n\t\tlet fulfilPromise;\n\t\tconst promise = new Promise( fulfil => fulfilPromise = fulfil );\n\n\t\tthis.ticker = new Ticker({\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tstep: t => {\n\t\t\t\tconst value = interpolator( t );\n\t\t\t\tthis.applyValue( value );\n\t\t\t\tif ( options.step ) options.step( t, value );\n\t\t\t},\n\t\t\tcomplete: () => {\n\t\t\t\tthis.applyValue( to );\n\t\t\t\tif ( options.complete ) options.complete( to );\n\n\t\t\t\tthis.ticker = null;\n\t\t\t\tfulfilPromise( to );\n\t\t\t}\n\t\t});\n\n\t\tpromise.stop = this.ticker.stop;\n\t\treturn promise;\n\t}\n\n\tapplyValue ( value, notify = true ) {\n\t\tif ( isEqual( value, this.value ) ) return;\n\t\tif ( this.boundValue ) this.boundValue = null;\n\n\t\tif ( this.parent.wrapper && this.parent.wrapper.set ) {\n\t\t\tthis.parent.wrapper.set( this.key, value );\n\t\t\tthis.parent.value = this.parent.wrapper.get();\n\n\t\t\tthis.value = this.parent.value[ this.key ];\n\t\t\tif ( this.wrapper ) this.newWrapperValue = this.value;\n\t\t\tthis.adapt();\n\t\t} else if ( this.wrapper ) {\n\t\t\tthis.newWrapperValue = value;\n\t\t\tthis.adapt();\n\t\t} else {\n\t\t\tconst parentValue = this.parent.value || this.parent.createBranch( this.key );\n\t\t\tif ( isObjectLike( parentValue ) ) {\n\t\t\t\tparentValue[ this.key ] = value;\n\t\t\t} else {\n\t\t\t\twarnIfDebug( `Attempted to set a property of a non-object '${this.getKeypath()}'` );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.value = value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\t// keep track of array stuff\n\t\tif ( isArray( value ) ) {\n\t\t\tthis.length = value.length;\n\t\t\tthis.isArray = true;\n\t\t} else {\n\t\t\tthis.isArray = false;\n\t\t}\n\n\t\t// notify dependants\n\t\tthis.links.forEach( handleChange );\n\t\tthis.children.forEach( mark );\n\t\tthis.deps.forEach( handleChange );\n\n\t\tif ( notify ) this.notifyUpstream();\n\n\t\tif ( this.parent.isArray ) {\n\t\t\tif ( this.key === 'length' ) this.parent.length = value;\n\t\t\telse this.parent.joinKey( 'length' ).mark();\n\t\t}\n\t}\n\n\tcreateBranch ( key ) {\n\t\tconst branch = isNumeric( key ) ? [] : {};\n\t\tthis.applyValue( branch, false );\n\n\t\treturn branch;\n\t}\n\n\tget ( shouldCapture, opts ) {\n\t\tif ( this._link ) return this._link.get( shouldCapture, opts );\n\t\tif ( shouldCapture ) capture( this );\n\t\t// if capturing, this value needs to be unwrapped because it's for external use\n\t\tif ( opts && opts.virtual ) return this.getVirtual( false );\n\t\treturn maybeBind( this, ( ( opts && 'unwrap' in opts ) ? opts.unwrap !== false : shouldCapture ) && this.wrapper ? this.wrapperValue : this.value, !opts || opts.shouldBind !== false );\n\t}\n\n\tgetKeypathModel () {\n\t\tif ( !this.keypathModel ) this.keypathModel = new KeypathModel( this );\n\t\treturn this.keypathModel;\n\t}\n\n\tjoinKey ( key, opts ) {\n\t\tif ( this._link ) {\n\t\t\tif ( opts && opts.lastLink !== false && ( key === undefined || key === '' ) ) return this;\n\t\t\treturn this._link.joinKey( key );\n\t\t}\n\n\t\tif ( key === undefined || key === '' ) return this;\n\n\n\t\tif ( !hasOwn( this.childByKey, key ) ) {\n\t\t\tconst child = new Model( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\tif ( this.childByKey[ key ]._link && ( !opts || opts.lastLink !== false ) ) return this.childByKey[ key ]._link;\n\t\treturn this.childByKey[ key ];\n\t}\n\n\tmark ( force ) {\n\t\tif ( this._link ) return this._link.mark( force );\n\n\t\tconst old = this.value;\n\t\tconst value = this.retrieve();\n\n\t\tif ( force || !isEqual( value, old ) ) {\n\t\t\tthis.value = value;\n\t\t\tif ( this.boundValue ) this.boundValue = null;\n\n\t\t\t// make sure the wrapper stays in sync\n\t\t\tif ( old !== value || this.rewrap ) {\n\t\t\t\tif ( this.wrapper ) this.newWrapperValue = value;\n\t\t\t\tthis.adapt();\n\t\t\t}\n\n\t\t\t// keep track of array stuff\n\t\t\tif ( isArray( value ) ) {\n\t\t\t\tthis.length = value.length;\n\t\t\t\tthis.isArray = true;\n\t\t\t} else {\n\t\t\t\tthis.isArray = false;\n\t\t\t}\n\n\t\t\tthis.children.forEach( force ? markForce : mark );\n\t\t\tthis.links.forEach( marked );\n\n\t\t\tthis.deps.forEach( handleChange );\n\t\t}\n\t}\n\n\tmerge ( array, comparator ) {\n\t\tlet oldArray = this.value;\n\t\tlet newArray = array;\n\t\tif ( oldArray === newArray ) oldArray = recreateArray( this );\n\t\tif ( comparator ) {\n\t\t\toldArray = oldArray.map( comparator );\n\t\t\tnewArray = newArray.map( comparator );\n\t\t}\n\n\t\tconst oldLength = oldArray.length;\n\n\t\tconst usedIndices = {};\n\t\tlet firstUnusedIndex = 0;\n\n\t\tconst newIndices = oldArray.map( item => {\n\t\t\tlet index;\n\t\t\tlet start = firstUnusedIndex;\n\n\t\t\tdo {\n\t\t\t\tindex = newArray.indexOf( item, start );\n\n\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\n\t\t\t\tstart = index + 1;\n\t\t\t} while ( ( usedIndices[ index ] === true ) && start < oldLength );\n\n\t\t\t// keep track of the first unused index, so we don't search\n\t\t\t// the whole of newArray for each item in oldArray unnecessarily\n\t\t\tif ( index === firstUnusedIndex ) {\n\t\t\t\tfirstUnusedIndex += 1;\n\t\t\t}\n\t\t\t// allow next instance of next \""equal\"" to be found item\n\t\t\tusedIndices[ index ] = true;\n\t\t\treturn index;\n\t\t});\n\n\t\tthis.parent.value[ this.key ] = array;\n\t\tthis.shuffle( newIndices, true );\n\t}\n\n\tretrieve () {\n\t\treturn this.parent.value ? this.parent.value[ this.key ] : undefined;\n\t}\n\n\tset ( value ) {\n\t\tif ( this.ticker ) this.ticker.stop();\n\t\tthis.applyValue( value );\n\t}\n\n\tshuffle ( newIndices, unsafe ) {\n\t\tshuffle( this, newIndices, false, unsafe );\n\t}\n\n\tsource () { return this; }\n\n\tteardown () {\n\t\tif ( this._link ) {\n\t\t\tthis._link.teardown();\n\t\t\tthis._link = null;\n\t\t}\n\t\tthis.children.forEach( teardown );\n\t\tif ( this.wrapper ) this.wrapper.teardown();\n\t\tif ( this.keypathModel ) this.keypathModel.teardown();\n\t}\n}\n\nfunction recreateArray( model ) {\n\tconst array = [];\n\n\tfor ( let i = 0; i < model.length; i++ ) {\n\t\tarray[ i ] = (model.childByKey[i] || {}).value;\n\t}\n\n\treturn array;\n}\n"",""import { hasOwn } from 'utils/object';\nimport { isString, isObjectType } from 'utils/is';\n\nconst prefixers = {};\n\n// TODO this is legacy. sooner we can replace the old adaptor API the better\n/* istanbul ignore next */\nfunction prefixKeypath ( obj, prefix ) {\n\tconst prefixed = {};\n\n\tif ( !prefix ) {\n\t\treturn obj;\n\t}\n\n\tprefix += '.';\n\n\tfor ( const key in obj ) {\n\t\tif ( hasOwn( obj, key ) ) {\n\t\t\tprefixed[ prefix + key ] = obj[ key ];\n\t\t}\n\t}\n\n\treturn prefixed;\n}\n\nexport default function getPrefixer ( rootKeypath ) {\n\tlet rootDot;\n\n\tif ( !prefixers[ rootKeypath ] ) {\n\t\trootDot = rootKeypath ? rootKeypath + '.' : '';\n\n\t\t/* istanbul ignore next */\n\t\tprefixers[ rootKeypath ] = function ( relativeKeypath, value ) {\n\t\t\tlet obj;\n\n\t\t\tif ( isString( relativeKeypath ) ) {\n\t\t\t\tobj = {};\n\t\t\t\tobj[ rootDot + relativeKeypath ] = value;\n\t\t\t\treturn obj;\n\t\t\t}\n\n\t\t\tif ( isObjectType( relativeKeypath ) ) {\n\t\t\t\t// 'relativeKeypath' is in fact a hash, not a keypath\n\t\t\t\treturn rootDot ? prefixKeypath( relativeKeypath, rootKeypath ) : relativeKeypath;\n\t\t\t}\n\t\t};\n\t}\n\n\treturn prefixers[ rootKeypath ];\n}\n"",""import runloop from 'src/global/runloop';\n\n// TODO what happens if a transition is aborted?\n\nconst tickers = [];\nlet running = false;\n\nfunction tick () {\n\trunloop.start();\n\n\tconst now = performance.now();\n\n\tlet i;\n\tlet ticker;\n\n\tfor ( i = 0; i < tickers.length; i += 1 ) {\n\t\tticker = tickers[i];\n\n\t\tif ( !ticker.tick( now ) ) {\n\t\t\t// ticker is complete, remove it from the stack, and decrement i so we don't miss one\n\t\t\ttickers.splice( i--, 1 );\n\t\t}\n\t}\n\n\trunloop.end();\n\n\tif ( tickers.length ) {\n\t\trequestAnimationFrame( tick );\n\t} else {\n\t\trunning = false;\n\t}\n}\n\nexport default class Ticker {\n\tconstructor ( options ) {\n\t\tthis.duration = options.duration;\n\t\tthis.step = options.step;\n\t\tthis.complete = options.complete;\n\t\tthis.easing = options.easing;\n\n\t\tthis.start = performance.now();\n\t\tthis.end = this.start + this.duration;\n\n\t\tthis.running = true;\n\n\t\ttickers.push( this );\n\t\tif ( !running ) requestAnimationFrame( tick );\n\t}\n\n\ttick ( now ) {\n\t\tif ( !this.running ) return false;\n\n\t\tif ( now > this.end ) {\n\t\t\tif ( this.step ) this.step( 1 );\n\t\t\tif ( this.complete ) this.complete( 1 );\n\n\t\t\treturn false;\n\t\t}\n\n\t\tconst elapsed = now - this.start;\n\t\tconst eased = this.easing( elapsed / this.duration );\n\n\t\tif ( this.step ) this.step( eased );\n\n\t\treturn true;\n\t}\n\n\tstop () {\n\t\tif ( this.abort ) this.abort();\n\t\tthis.running = false;\n\t}\n}\n"",""import { addToArray } from 'utils/array';\nimport TransitionManager from './TransitionManager';\n\nlet batch;\n\nconst runloop = {\n\tstart () {\n\t\tlet fulfilPromise;\n\t\tconst promise = new Promise( f => ( fulfilPromise = f ) );\n\n\t\tbatch = {\n\t\t\tpreviousBatch: batch,\n\t\t\ttransitionManager: new TransitionManager( fulfilPromise, batch && batch.transitionManager ),\n\t\t\tfragments: [],\n\t\t\ttasks: [],\n\t\t\timmediateObservers: [],\n\t\t\tdeferredObservers: [],\n\t\t\tpromise\n\t\t};\n\n\t\treturn promise;\n\t},\n\n\tend () {\n\t\tflushChanges();\n\n\t\tif ( !batch.previousBatch ) batch.transitionManager.start();\n\n\t\tbatch = batch.previousBatch;\n\t},\n\n\taddFragment ( fragment ) {\n\t\taddToArray( batch.fragments, fragment );\n\t},\n\n\t// TODO: come up with a better way to handle fragments that trigger their own update\n\taddFragmentToRoot ( fragment ) {\n\t\tif ( !batch ) return;\n\n\t\tlet b = batch;\n\t\twhile ( b.previousBatch ) {\n\t\t\tb = b.previousBatch;\n\t\t}\n\n\t\taddToArray( b.fragments, fragment );\n\t},\n\n\taddObserver ( observer, defer ) {\n\t\tif ( !batch ) {\n\t\t\tobserver.dispatch();\n\t\t} else {\n\t\t\taddToArray( defer ? batch.deferredObservers : batch.immediateObservers, observer );\n\t\t}\n\t},\n\n\tregisterTransition ( transition ) {\n\t\ttransition._manager = batch.transitionManager;\n\t\tbatch.transitionManager.add( transition );\n\t},\n\n\t// synchronise node detachments with transition ends\n\tdetachWhenReady ( thing ) {\n\t\tbatch.transitionManager.detachQueue.push( thing );\n\t},\n\n\tscheduleTask ( task, postRender ) {\n\t\tlet _batch;\n\n\t\tif ( !batch ) {\n\t\t\ttask();\n\t\t} else {\n\t\t\t_batch = batch;\n\t\t\twhile ( postRender && _batch.previousBatch ) {\n\t\t\t\t// this can't happen until the DOM has been fully updated\n\t\t\t\t// otherwise in some situations (with components inside elements)\n\t\t\t\t// transitions and decorators will initialise prematurely\n\t\t\t\t_batch = _batch.previousBatch;\n\t\t\t}\n\n\t\t\t_batch.tasks.push( task );\n\t\t}\n\t},\n\n\tpromise () {\n\t\tif ( !batch ) return Promise.resolve();\n\n\t\tlet target = batch;\n\t\twhile ( target.previousBatch ) {\n\t\t\ttarget = target.previousBatch;\n\t\t}\n\n\t\treturn target.promise || Promise.resolve();\n\t}\n};\n\nexport default runloop;\n\nfunction dispatch ( observer ) {\n\tobserver.dispatch();\n}\n\nfunction flushChanges () {\n\tlet which = batch.immediateObservers;\n\tbatch.immediateObservers = [];\n\twhich.forEach( dispatch );\n\n\t// Now that changes have been fully propagated, we can update the DOM\n\t// and complete other tasks\n\tlet i = batch.fragments.length;\n\tlet fragment;\n\n\twhich = batch.fragments;\n\tbatch.fragments = [];\n\n\twhile ( i-- ) {\n\t\tfragment = which[i];\n\t\tfragment.update();\n\t}\n\n\tbatch.transitionManager.ready();\n\n\twhich = batch.deferredObservers;\n\tbatch.deferredObservers = [];\n\twhich.forEach( dispatch );\n\n\tconst tasks = batch.tasks;\n\tbatch.tasks = [];\n\n\tfor ( i = 0; i < tasks.length; i += 1 ) {\n\t\ttasks[i]();\n\t}\n\n\t// If updating the view caused some model blowback - e.g. a triple\n\t// containing <option> elements caused the binding on the <select>\n\t// to update - then we start over\n\tif ( batch.fragments.length || batch.immediateObservers.length || batch.deferredObservers.length || batch.tasks.length ) return flushChanges();\n}\n"",""import { removeFromArray } from 'utils/array';\nimport { isFunction } from 'utils/is';\n\nexport default class TransitionManager {\n\tconstructor ( callback, parent ) {\n\t\tthis.callback = callback;\n\t\tthis.parent = parent;\n\n\t\tthis.intros = [];\n\t\tthis.outros = [];\n\n\t\tthis.children = [];\n\t\tthis.totalChildren = this.outroChildren = 0;\n\n\t\tthis.detachQueue = [];\n\t\tthis.outrosComplete = false;\n\n\t\tif ( parent ) {\n\t\t\tparent.addChild( this );\n\t\t}\n\t}\n\n\tadd ( transition ) {\n\t\tconst list = transition.isIntro ? this.intros : this.outros;\n\t\ttransition.starting = true;\n\t\tlist.push( transition );\n\t}\n\n\taddChild ( child ) {\n\t\tthis.children.push( child );\n\n\t\tthis.totalChildren += 1;\n\t\tthis.outroChildren += 1;\n\t}\n\n\tdecrementOutros () {\n\t\tthis.outroChildren -= 1;\n\t\tcheck( this );\n\t}\n\n\tdecrementTotal () {\n\t\tthis.totalChildren -= 1;\n\t\tcheck( this );\n\t}\n\n\tdetachNodes () {\n\t\tthis.detachQueue.forEach( detach );\n\t\tthis.children.forEach( _detachNodes );\n\t\tthis.detachQueue = [];\n\t}\n\n\tready () {\n\t\tif ( this.detachQueue.length ) detachImmediate( this );\n\t}\n\n\tremove ( transition ) {\n\t\tconst list = transition.isIntro ? this.intros : this.outros;\n\t\tremoveFromArray( list, transition );\n\t\tcheck( this );\n\t}\n\n\tstart () {\n\t\tthis.children.forEach( c => c.start() );\n\t\tthis.intros.concat( this.outros ).forEach( t => t.start() );\n\t\tthis.ready = true;\n\t\tcheck( this );\n\t}\n}\n\nfunction detach ( element ) {\n\telement.detach();\n}\n\nfunction _detachNodes ( tm ) { // _ to avoid transpiler quirk\n\ttm.detachNodes();\n}\n\nfunction check ( tm ) {\n\tif ( !tm.ready || tm.outros.length || tm.outroChildren ) return;\n\n\t// If all outros are complete, and we haven't already done this,\n\t// we notify the parent if there is one, otherwise\n\t// start detaching nodes\n\tif ( !tm.outrosComplete ) {\n\t\ttm.outrosComplete = true;\n\n\t\tif ( tm.parent && !tm.parent.outrosComplete ) {\n\t\t\ttm.parent.decrementOutros( tm );\n\t\t} else {\n\t\t\ttm.detachNodes();\n\t\t}\n\t}\n\n\t// Once everything is done, we can notify parent transition\n\t// manager and call the callback\n\tif ( !tm.intros.length && !tm.totalChildren ) {\n\t\tif ( isFunction( tm.callback ) ) {\n\t\t\ttm.callback();\n\t\t}\n\n\t\tif ( tm.parent && !tm.notifiedTotal ) {\n\t\t\ttm.notifiedTotal = true;\n\t\t\ttm.parent.decrementTotal();\n\t\t}\n\t}\n}\n\n// check through the detach queue to see if a node is up or downstream from a\n// transition and if not, go ahead and detach it\nfunction detachImmediate ( manager ) {\n\tconst queue = manager.detachQueue;\n\tconst outros = collectAllOutros( manager );\n\n\tlet i = queue.length;\n\tlet j = 0;\n\tlet node, trans;\n\tstart: while ( i-- ) {\n\t\tnode = queue[i].node;\n\t\tj = outros.length;\n\t\twhile ( j-- ) {\n\t\t\ttrans = outros[j].element.node;\n\t\t\t// check to see if the node is, contains, or is contained by the transitioning node\n\t\t\tif ( trans === node || trans.contains( node ) || node.contains( trans ) ) continue start;\n\t\t}\n\n\t\t// no match, we can drop it\n\t\tqueue[i].detach();\n\t\tqueue.splice( i, 1 );\n\t}\n}\n\nfunction collectAllOutros ( manager, _list ) {\n\tlet list = _list;\n\n\t// if there's no list, we're starting at the root to build one\n\tif ( !list ) {\n\t\tlist = [];\n\t\tlet parent = manager;\n\t\twhile ( parent.parent ) parent = parent.parent;\n\t\treturn collectAllOutros( parent, list );\n\t} else {\n\t\t// grab all outros from child managers\n\t\tlet i = manager.children.length;\n\t\twhile ( i-- ) {\n\t\t\tlist = collectAllOutros( manager.children[i], list );\n\t\t}\n\n\t\t// grab any from this manager if there are any\n\t\tif ( manager.outros.length ) list = list.concat( manager.outros );\n\n\t\treturn list;\n\t}\n}\n"",""import ModelBase, { fireShuffleTasks, maybeBind, shuffle } from './ModelBase';\nimport KeypathModel from './specials/KeypathModel';\nimport { capture } from '../global/capture';\nimport { handleChange, marked, markedAll, teardown } from 'shared/methodCallers';\nimport { rebindMatch } from 'shared/rebind';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport noop from 'utils/noop';\nimport { hasOwn } from 'utils/object';\n\n// temporary placeholder target for detached implicit links\nexport const Missing = {\n\tkey: '@missing',\n\tanimate: noop,\n\tapplyValue: noop,\n\tget: noop,\n\tgetKeypath () { return this.key; },\n\tjoinAll () { return this; },\n\tjoinKey () { return this; },\n\tmark: noop,\n\tregisterLink: noop,\n\tshufle: noop,\n\tset: noop,\n\tunregisterLink: noop\n};\nMissing.parent = Missing;\n\nexport default class LinkModel extends ModelBase {\n\tconstructor ( parent, owner, target, key ) {\n\t\tsuper( parent );\n\n\t\tthis.owner = owner;\n\t\tthis.target = target;\n\t\tthis.key = key === undefined ? owner.key : key;\n\t\tif ( owner.isLink ) this.sourcePath = `${owner.sourcePath}.${this.key}`;\n\n\t\ttarget.registerLink( this );\n\n\t\tif ( parent ) this.isReadonly = parent.isReadonly;\n\n\t\tthis.isLink = true;\n\t}\n\n\tanimate ( from, to, options, interpolator ) {\n\t\treturn this.target.animate( from, to, options, interpolator );\n\t}\n\n\tapplyValue ( value ) {\n\t\tif ( this.boundValue ) this.boundValue = null;\n\t\tthis.target.applyValue( value );\n\t}\n\n\tattach ( fragment ) {\n\t\tconst model = resolveReference( fragment, this.key );\n\t\tif ( model ) {\n\t\t\tthis.relinking( model, false );\n\t\t} else { // if there is no link available, move everything here to real models\n\t\t\tthis.owner.unlink();\n\t\t}\n\t}\n\n\tdetach () {\n\t\tthis.relinking( Missing, false );\n\t}\n\n\tget ( shouldCapture, opts = {} ) {\n\t\tif ( shouldCapture ) {\n\t\t\tcapture( this );\n\n\t\t\t// may need to tell the target to unwrap\n\t\t\topts.unwrap = 'unwrap' in opts ? opts.unwrap : true;\n\t\t}\n\n\t\tconst bind = 'shouldBind' in opts ? opts.shouldBind : true;\n\t\topts.shouldBind = this.mapping && this.target.parent && this.target.parent.isRoot;\n\n\t\treturn maybeBind( this, this.target.get( false, opts ), bind );\n\t}\n\n\tgetKeypath ( ractive ) {\n\t\tif ( ractive && ractive !== this.root.ractive ) return this.target.getKeypath( ractive );\n\n\t\treturn super.getKeypath( ractive );\n\t}\n\n\tgetKeypathModel ( ractive ) {\n\t\tif ( !this.keypathModel ) this.keypathModel = new KeypathModel( this );\n\t\tif ( ractive && ractive !== this.root.ractive ) return this.keypathModel.getChild( ractive );\n\t\treturn this.keypathModel;\n\t}\n\n\thandleChange () {\n\t\tthis.deps.forEach( handleChange );\n\t\tthis.links.forEach( handleChange );\n\t\tthis.notifyUpstream();\n\t}\n\n\tisDetached () { return this.virtual && this.target === Missing; }\n\n\tjoinKey ( key ) {\n\t\t// TODO: handle nested links\n\t\tif ( key === undefined || key === '' ) return this;\n\n\t\tif ( !hasOwn( this.childByKey, key ) ) {\n\t\t\tconst child = new LinkModel( this, this, this.target.joinKey( key ), key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t}\n\n\tmark ( force ) {\n\t\tthis.target.mark( force );\n\t}\n\n\tmarked () {\n\t\tif ( this.boundValue ) this.boundValue = null;\n\n\t\tthis.links.forEach( marked );\n\n\t\tthis.deps.forEach( handleChange );\n\t}\n\n\tmarkedAll () {\n\t\tthis.children.forEach( markedAll );\n\t\tthis.marked();\n\t}\n\n\tnotifiedUpstream ( startPath, root ) {\n\t\tthis.links.forEach( l => l.notifiedUpstream( startPath, this.root ) );\n\t\tthis.deps.forEach( handleChange );\n\t\tif ( startPath && this.rootLink && this.root !== root ) {\n\t\t\tconst path = startPath.slice( 1 );\n\t\t\tpath.unshift( this.key );\n\t\t\tthis.notifyUpstream( path );\n\t\t}\n\t}\n\n\trelinked () {\n\t\tthis.target.registerLink( this );\n\t\tthis.children.forEach( c => c.relinked() );\n\t}\n\n\trelinking ( target, safe ) {\n\t\tif ( this.rootLink && this.sourcePath ) target = rebindMatch( this.sourcePath, target, this.target );\n\t\tif ( !target || this.target === target ) return;\n\n\t\tthis.target.unregisterLink( this );\n\t\tif ( this.keypathModel ) this.keypathModel.rebindChildren( target );\n\n\t\tthis.target = target;\n\t\tthis.children.forEach( c => {\n\t\t\tc.relinking( target.joinKey( c.key ), safe );\n\t\t});\n\n\t\tif ( this.rootLink ) this.addShuffleTask( () => {\n\t\t\tthis.relinked();\n\t\t\tif ( !safe ) {\n\t\t\t\tthis.markedAll();\n\t\t\t\tthis.notifyUpstream();\n\t\t\t}\n\t\t});\n\t}\n\n\tset ( value ) {\n\t\tif ( this.boundValue ) this.boundValue = null;\n\t\tthis.target.set( value );\n\t}\n\n\tshuffle ( newIndices ) {\n\t\t// watch for extra shuffles caused by a shuffle in a downstream link\n\t\tif ( this.shuffling ) return;\n\n\t\t// let the real model handle firing off shuffles\n\t\tif ( !this.target.shuffling ) {\n\t\t\tif ( this.target.shuffle ) {\n\t\t\t\tthis.target.shuffle( newIndices );\n\t\t\t} else { // the target is a computation, which can't shuffle\n\t\t\t\tthis.target.mark();\n\t\t\t}\n\t\t} else {\n\t\t\tshuffle( this, newIndices, true );\n\t\t}\n\n\t}\n\n\tsource () {\n\t\tif ( this.target.source ) return this.target.source();\n\t\telse return this.target;\n\t}\n\n\tteardown () {\n\t\tif ( this._link ) this._link.teardown();\n\t\tthis.target.unregisterLink( this );\n\t\tthis.children.forEach( teardown );\n\t}\n}\n\nModelBase.prototype.link = function link ( model, keypath, options ) {\n\tconst lnk = this._link || new LinkModel( this.parent, this, model, this.key );\n\tlnk.implicit = options && options.implicit;\n\tlnk.mapping = options && options.mapping;\n\tlnk.sourcePath = keypath;\n\tlnk.rootLink = true;\n\tif ( this._link ) this._link.relinking( model, false );\n\tthis.rebind( lnk, this, false );\n\tfireShuffleTasks();\n\n\tthis._link = lnk;\n\tlnk.markedAll();\n\n\tthis.notifyUpstream();\n\treturn lnk;\n};\n\nModelBase.prototype.unlink = function unlink () {\n\tif ( this._link ) {\n\t\tconst ln = this._link;\n\t\tthis._link = undefined;\n\t\tln.rebind( this, ln, false );\n\t\tfireShuffleTasks();\n\t\tln.teardown();\n\t\tthis.notifyUpstream();\n\t}\n};\n"",""import { splitKeypath } from './keypaths';\nimport { isString } from 'utils/is';\n\n// this is the dry method of checking to see if a rebind applies to\n// a particular keypath because in some cases, a dep may be bound\n// directly to a particular keypath e.g. foo.bars.0.baz and need\n// to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted\nexport function rebindMatch ( template, next, previous, fragment ) {\n\tconst keypath = template.r || template;\n\n\t// no valid keypath, go with next\n\tif ( !keypath || !isString( keypath ) ) return next;\n\n\t// completely contextual ref, go with next\n\tif ( keypath === '.' || keypath[0] === '@' || ( next || previous ).isKey || ( next || previous ).isKeypath ) return next;\n\n\tconst parts = keypath.split( '/' );\n\tlet keys = splitKeypath( parts[ parts.length - 1 ] );\n\tconst last = keys[ keys.length - 1 ];\n\n\t// check the keypath against the model keypath to see if it matches\n\tlet model = next || previous;\n\n\t// check to see if this was an alias\n\tif ( model && keys.length === 1 && last !== model.key && fragment ) {\n\t\tkeys = findAlias( last, fragment ) || keys;\n\t}\n\n\tlet i = keys.length;\n\tlet match = true;\n\tlet shuffling = false;\n\n\twhile ( model && i-- ) {\n\t\tif ( model.shuffling ) shuffling = true;\n\t\t// non-strict comparison to account for indices in keypaths\n\t\tif ( keys[i] != model.key ) match = false;\n\t\tmodel = model.parent;\n\t}\n\n\t// next is undefined, but keypath is shuffling and previous matches\n\tif ( !next && match && shuffling ) return previous;\n\t// next is defined, but doesn't match the keypath\n\telse if ( next && !match && shuffling ) return previous;\n\telse return next;\n}\n\nfunction findAlias ( name, fragment ) {\n\twhile ( fragment ) {\n\t\tconst z = fragment.aliases;\n\t\tif ( z && z[ name ] ) {\n\t\t\tconst aliases = ( fragment.owner.iterations ? fragment.owner : fragment ).owner.template.z;\n\t\t\tfor ( let i = 0; i < aliases.length; i++ ) {\n\t\t\t\tif ( aliases[i].n === name ) {\n\t\t\t\t\tconst alias = aliases[i].x;\n\t\t\t\t\tif ( !alias.r ) return false;\n\t\t\t\t\tconst parts = alias.r.split( '/' );\n\t\t\t\t\treturn splitKeypath( parts[ parts.length - 1 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tfragment = fragment.componentParent || fragment.parent;\n\t}\n}\n"",""import KeyModel from './specials/KeyModel';\nimport KeypathModel from './specials/KeypathModel';\nimport { escapeKey, unescapeKey } from 'shared/keypaths';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport { isArray, isObject, isFunction } from 'utils/is';\nimport bind from 'utils/bind';\nimport { hasOwn, keys as objectKeys } from 'utils/object';\n\nconst shuffleTasks = { early: [], mark: [] };\nconst registerQueue = { early: [], mark: [] };\n\nexport default class ModelBase {\n\tconstructor ( parent ) {\n\t\tthis.deps = [];\n\n\t\tthis.children = [];\n\t\tthis.childByKey = {};\n\t\tthis.links = [];\n\n\t\tthis.keyModels = {};\n\n\t\tthis.bindings = [];\n\t\tthis.patternObservers = [];\n\n\t\tif ( parent ) {\n\t\t\tthis.parent = parent;\n\t\t\tthis.root = parent.root;\n\t\t}\n\t}\n\n\taddShuffleTask ( task, stage = 'early' ) { shuffleTasks[stage].push( task ); }\n\taddShuffleRegister ( item, stage = 'early' ) { registerQueue[stage].push({ model: this, item }); }\n\n\tdownstreamChanged () {}\n\n\tfindMatches ( keys ) {\n\t\tconst len = keys.length;\n\n\t\tlet existingMatches = [ this ];\n\t\tlet matches;\n\t\tlet i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tconst key = keys[i];\n\n\t\t\tif ( key === '*' ) {\n\t\t\t\tmatches = [];\n\t\t\t\texistingMatches.forEach( model => {\n\t\t\t\t\tmatches.push.apply( matches, model.getValueChildren( model.get() ) );\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tmatches = existingMatches.map( model => model.joinKey( key ) );\n\t\t\t}\n\n\t\t\texistingMatches = matches;\n\t\t}\n\n\t\treturn matches;\n\t}\n\n\tgetKeyModel ( key, skip ) {\n\t\tif ( key !== undefined && !skip ) return this.parent.getKeyModel( key, true );\n\n\t\tif ( !( key in this.keyModels ) ) this.keyModels[ key ] = new KeyModel( escapeKey( key ), this );\n\n\t\treturn this.keyModels[ key ];\n\t}\n\n\tgetKeypath ( ractive ) {\n\t\tif ( ractive !== this.ractive && this._link ) return this._link.target.getKeypath( ractive );\n\n\t\tif ( !this.keypath ) {\n\t\t\tconst parent = this.parent && this.parent.getKeypath( ractive );\n\t\t\tthis.keypath = parent ? `${this.parent.getKeypath( ractive )}.${escapeKey( this.key )}` : escapeKey( this.key );\n\t\t}\n\n\t\treturn this.keypath;\n\t}\n\n\tgetValueChildren ( value ) {\n\t\tlet children;\n\t\tif ( isArray( value ) ) {\n\t\t\tchildren = [];\n\t\t\tif ( 'length' in this && this.length !== value.length ) {\n\t\t\t\tchildren.push( this.joinKey( 'length' ) );\n\t\t\t}\n\t\t\tvalue.forEach( ( m, i ) => {\n\t\t\t\tchildren.push( this.joinKey( i ) );\n\t\t\t});\n\t\t}\n\n\t\telse if ( isObject( value ) || isFunction( value ) ) {\n\t\t\tchildren = objectKeys( value ).map( key => this.joinKey( key ) );\n\t\t}\n\n\t\telse if ( value != null ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn children;\n\t}\n\n\tgetVirtual ( shouldCapture ) {\n\t\tconst value = this.get( shouldCapture, { virtual: false } );\n\t\tif ( isObject( value ) ) {\n\t\t\tconst result = isArray( value ) ? [] : {};\n\n\t\t\tconst keys = objectKeys( value );\n\t\t\tlet i = keys.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tconst child = this.childByKey[ keys[i] ];\n\t\t\t\tif ( !child ) result[ keys[i] ] = value[ keys[i] ];\n\t\t\t\telse if ( child._link ) result[ keys[i] ] = child._link.getVirtual();\n\t\t\t\telse result[ keys[i] ] = child.getVirtual();\n\t\t\t}\n\n\t\t\ti = this.children.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tconst child = this.children[i];\n\t\t\t\tif ( !( child.key in result ) && child._link ) {\n\t\t\t\t\tresult[ child.key ] = child._link.getVirtual();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t} else return value;\n\t}\n\n\thas ( key ) {\n\t\tif ( this._link ) return this._link.has( key );\n\n\t\tconst value = this.get();\n\t\tif ( !value ) return false;\n\n\t\tkey = unescapeKey( key );\n\t\tif ( hasOwn( value, key ) ) return true;\n\n\t\t// We climb up the constructor chain to find if one of them contains the key\n\t\tlet constructor = value.constructor;\n\t\twhile ( constructor !== Function && constructor !== Array && constructor !== Object ) {\n\t\t\tif ( hasOwn( constructor.prototype, key ) ) return true;\n\t\t\tconstructor = constructor.constructor;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tjoinAll ( keys, opts ) {\n\t\tlet model = this;\n\t\tfor ( let i = 0; i < keys.length; i += 1 ) {\n\t\t\tif ( opts && opts.lastLink === false && i + 1 === keys.length && model.childByKey[keys[i]] && model.childByKey[keys[i]]._link ) return model.childByKey[keys[i]];\n\t\t\tmodel = model.joinKey( keys[i], opts );\n\t\t}\n\n\t\treturn model;\n\t}\n\n\tnotifyUpstream ( startPath ) {\n\t\tlet parent = this.parent;\n\t\tconst path = startPath || [ this.key ];\n\t\twhile ( parent ) {\n\t\t\tif ( parent.patternObservers.length ) parent.patternObservers.forEach( o => o.notify( path.slice() ) );\n\t\t\tpath.unshift( parent.key );\n\t\t\tparent.links.forEach( l => l.notifiedUpstream( path, this.root ) );\n\t\t\tparent.deps.forEach( d => d.handleChange( path ) );\n\t\t\tparent.downstreamChanged( startPath );\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\trebind ( next, previous, safe ) {\n\t\tif ( this._link ) {\n\t\t\tthis._link.rebind( next, previous, false );\n\t\t}\n\n\t\t// tell the deps to move to the new target\n\t\tlet i = this.deps.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this.deps[i].rebind ) this.deps[i].rebind( next, previous, safe );\n\t\t}\n\n\t\ti = this.links.length;\n\t\twhile ( i-- ) {\n\t\t\tconst link = this.links[i];\n\t\t\t// only relink the root of the link tree\n\t\t\tif ( link.owner._link ) link.relinking( next, safe );\n\t\t}\n\n\t\ti = this.children.length;\n\t\twhile ( i-- ) {\n\t\t\tconst child = this.children[i];\n\t\t\tchild.rebind( next ? next.joinKey( child.key ) : undefined, child, safe );\n\t\t}\n\n\t\tif ( this.keypathModel ) this.keypathModel.rebind( next, previous, false );\n\n\t\ti = this.bindings.length;\n\t\twhile ( i-- ) {\n\t\t\tthis.bindings[i].rebind( next, previous, safe );\n\t\t}\n\t}\n\n\treference () {\n\t\t'refs' in this ? this.refs++ : this.refs = 1;\n\t}\n\n\tregister ( dep ) {\n\t\tthis.deps.push( dep );\n\t}\n\n\tregisterLink ( link ) {\n\t\taddToArray( this.links, link );\n\t}\n\n\tregisterPatternObserver ( observer ) {\n\t\tthis.patternObservers.push( observer );\n\t\tthis.register( observer );\n\t}\n\n\tregisterTwowayBinding ( binding ) {\n\t\tthis.bindings.push( binding );\n\t}\n\n\tunreference () {\n\t\tif ( 'refs' in this ) this.refs--;\n\t}\n\n\tunregister ( dep ) {\n\t\tremoveFromArray( this.deps, dep );\n\t}\n\n\tunregisterLink ( link ) {\n\t\tremoveFromArray( this.links, link );\n\t}\n\n\tunregisterPatternObserver ( observer ) {\n\t\tremoveFromArray( this.patternObservers, observer );\n\t\tthis.unregister( observer );\n\t}\n\n\tunregisterTwowayBinding ( binding ) {\n\t\tremoveFromArray( this.bindings, binding );\n\t}\n\n\tupdateFromBindings ( cascade ) {\n\t\tlet i = this.bindings.length;\n\t\twhile ( i-- ) {\n\t\t\tconst value = this.bindings[i].getValue();\n\t\t\tif ( value !== this.value ) this.set( value );\n\t\t}\n\n\t\t// check for one-way bindings if there are no two-ways\n\t\tif ( !this.bindings.length ) {\n\t\t\tconst oneway = findBoundValue( this.deps );\n\t\t\tif ( oneway && oneway.value !== this.value ) this.set( oneway.value );\n\t\t}\n\n\t\tif ( cascade ) {\n\t\t\tthis.children.forEach( updateFromBindings );\n\t\t\tthis.links.forEach( updateFromBindings );\n\t\t\tif ( this._link ) this._link.updateFromBindings( cascade );\n\t\t}\n\t}\n}\n\n// TODO: this may be better handled by overreiding `get` on models with a parent that isRoot\nexport function maybeBind ( model, value, shouldBind ) {\n\tif ( shouldBind && isFunction( value ) && model.parent && model.parent.isRoot ) {\n\t\tif ( !model.boundValue ) {\n\t\t\tmodel.boundValue = bind( value._r_unbound || value, model.parent.ractive );\n\t\t}\n\n\t\treturn model.boundValue;\n\t}\n\n\treturn value;\n}\n\nfunction updateFromBindings ( model ) {\n\tmodel.updateFromBindings( true );\n}\n\nexport function findBoundValue( list ) {\n\tlet i = list.length;\n\twhile ( i-- ) {\n\t\tif ( list[i].bound ) {\n\t\t\tconst owner = list[i].owner;\n\t\t\tif ( owner ) {\n\t\t\t\tconst value = owner.name === 'checked' ?\n\t\t\t\t\towner.node.checked :\n\t\t\t\t\towner.node.value;\n\t\t\t\treturn { value };\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function fireShuffleTasks ( stage ) {\n\tif ( !stage ) {\n\t\tfireShuffleTasks( 'early' );\n\t\tfireShuffleTasks( 'mark' );\n\t} else {\n\t\tconst tasks = shuffleTasks[stage];\n\t\tshuffleTasks[stage] = [];\n\t\tlet i = tasks.length;\n\t\twhile ( i-- ) tasks[i]();\n\n\t\tconst register = registerQueue[stage];\n\t\tregisterQueue[stage] = [];\n\t\ti = register.length;\n\t\twhile ( i-- ) register[i].model.register( register[i].item );\n\t}\n}\n\nexport function shuffle ( model, newIndices, link, unsafe ) {\n\tmodel.shuffling = true;\n\n\tlet i = newIndices.length;\n\twhile ( i-- ) {\n\t\tconst idx = newIndices[ i ];\n\t\t// nothing is actually changing, so move in the index and roll on\n\t\tif ( i === idx ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// rebind the children on i to idx\n\t\tif ( i in model.childByKey ) model.childByKey[ i ].rebind( !~idx ? undefined : model.joinKey( idx ), model.childByKey[ i ], !unsafe );\n\n\t\tif ( !~idx && model.keyModels[ i ] ) {\n\t\t\tmodel.keyModels[i].rebind( undefined, model.keyModels[i], false );\n\t\t} else if ( ~idx && model.keyModels[ i ] ) {\n\t\t\tif ( !model.keyModels[ idx ] ) model.childByKey[ idx ].getKeyModel( idx );\n\t\t\tmodel.keyModels[i].rebind( model.keyModels[ idx ], model.keyModels[i], false );\n\t\t}\n\t}\n\n\tconst upstream = model.source().length !== model.source().value.length;\n\n\tmodel.links.forEach( l => l.shuffle( newIndices ) );\n\tif ( !link ) fireShuffleTasks( 'early' );\n\n\ti = model.deps.length;\n\twhile ( i-- ) {\n\t\tif ( model.deps[i].shuffle ) model.deps[i].shuffle( newIndices );\n\t}\n\n\tmodel[ link ? 'marked' : 'mark' ]();\n\tif ( !link ) fireShuffleTasks( 'mark' );\n\n\tif ( upstream ) model.notifyUpstream();\n\n\tmodel.shuffling = false;\n}\n\nKeyModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;\nKeyModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;\nKeypathModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;\nKeypathModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;\n"",""const fnBind = Function.prototype.bind;\n\nexport default function bind ( fn, context ) {\n\tif ( !/this/.test( fn.toString() ) ) return fn;\n\n\tconst bound = fnBind.call( fn, context );\n\tfor ( const prop in fn ) bound[ prop ] = fn[ prop ];\n\n\treturn bound;\n}\n"",""import { removeFromArray } from 'utils/array';\nimport { handleChange } from 'shared/methodCallers';\nimport { capture } from 'src/global/capture';\nimport noop from 'utils/noop';\nimport { keys as objectKeys } from 'utils/object';\n\nexport default class KeypathModel {\n\tconstructor ( parent, ractive ) {\n\t\tthis.parent = parent;\n\t\tthis.ractive = ractive;\n\t\tthis.value = ractive ? parent.getKeypath( ractive ) : parent.getKeypath();\n\t\tthis.deps = [];\n\t\tthis.children = {};\n\t\tthis.isReadonly = this.isKeypath = true;\n\t}\n\n\tget ( shouldCapture ) {\n\t\tif ( shouldCapture ) capture( this );\n\t\treturn this.value;\n\t}\n\n\tgetChild ( ractive ) {\n\t\tif ( !( ractive._guid in this.children ) ) {\n\t\t\tconst model = new KeypathModel( this.parent, ractive );\n\t\t\tthis.children[ ractive._guid ] = model;\n\t\t\tmodel.owner = this;\n\t\t}\n\t\treturn this.children[ ractive._guid ];\n\t}\n\n\tgetKeypath () {\n\t\treturn this.value;\n\t}\n\n\thandleChange () {\n\t\tconst keys = objectKeys( this.children );\n\t\tlet i = keys.length;\n\t\twhile ( i-- ) {\n\t\t\tthis.children[ keys[i] ].handleChange();\n\t\t}\n\n\t\tthis.deps.forEach( handleChange );\n\t}\n\n\trebindChildren ( next ) {\n\t\tconst keys = objectKeys( this.children );\n\t\tlet i = keys.length;\n\t\twhile ( i-- ) {\n\t\t\tconst child = this.children[keys[i]];\n\t\t\tchild.value = next.getKeypath( child.ractive );\n\t\t\tchild.handleChange();\n\t\t}\n\t}\n\n\trebind ( next, previous ) {\n\t\tconst model = next ? next.getKeypathModel( this.ractive ) : undefined;\n\n\t\tconst keys = objectKeys( this.children );\n\t\tlet i = keys.length;\n\t\twhile ( i-- ) {\n\t\t\tthis.children[ keys[i] ].rebind( next, previous, false );\n\t\t}\n\n\t\ti = this.deps.length;\n\t\twhile ( i-- ) {\n\t\t\tthis.deps[i].rebind( model, this, false );\n\t\t}\n\t}\n\n\tregister ( dep ) {\n\t\tthis.deps.push( dep );\n\t}\n\n\tremoveChild( model ) {\n\t\tif ( model.ractive ) delete this.children[ model.ractive._guid ];\n\t}\n\n\tteardown () {\n\t\tif ( this.owner ) this.owner.removeChild( this );\n\n\t\tconst keys = objectKeys( this.children );\n\t\tlet i = keys.length;\n\t\twhile ( i-- ) {\n\t\t\tthis.children[ keys[i] ].teardown();\n\t\t}\n\t}\n\n\tunregister ( dep ) {\n\t\tremoveFromArray( this.deps, dep );\n\t\tif ( !this.deps.length ) this.teardown();\n\t}\n}\n\nKeypathModel.prototype.reference = noop;\nKeypathModel.prototype.unreference = noop;\n"",""export function bind               ( x ) { x.bind(); }\nexport function cancel             ( x ) { x.cancel(); }\nexport function destroyed          ( x ) { x.destroyed(); }\nexport function handleChange       ( x ) { x.handleChange(); }\nexport function mark               ( x ) { x.mark(); }\nexport function markForce          ( x ) { x.mark( true ); }\nexport function marked             ( x ) { x.marked(); }\nexport function markedAll          ( x ) { x.markedAll(); }\nexport function render             ( x ) { x.render(); }\nexport function shuffled           ( x ) { x.shuffled(); }\nexport function teardown           ( x ) { x.teardown(); }\nexport function unbind             ( x ) { x.unbind(); }\nexport function unrender           ( x ) { x.unrender(); }\nexport function unrenderAndDestroy ( x ) { x.unrender( true ); }\nexport function update             ( x ) { x.update(); }\nexport function toString           ( x ) { return x.toString(); }\nexport function toEscapedString    ( x ) { return x.toString( true ); }\n"",""import { addToArray, removeFromArray } from 'utils/array';\nimport { unescapeKey } from 'shared/keypaths';\nimport { capture } from 'src/global/capture';\nimport noop from 'utils/noop';\n\nexport default class KeyModel {\n\tconstructor ( key, parent ) {\n\t\tthis.value = key;\n\t\tthis.isReadonly = this.isKey = true;\n\t\tthis.deps = [];\n\t\tthis.links = [];\n\t\tthis.parent = parent;\n\t}\n\n\tget ( shouldCapture ) {\n\t\tif ( shouldCapture ) capture( this );\n\t\treturn unescapeKey( this.value );\n\t}\n\n\tgetKeypath () {\n\t\treturn unescapeKey( this.value );\n\t}\n\n\trebind ( next, previous ) {\n\t\tlet i = this.deps.length;\n\t\twhile ( i-- ) this.deps[i].rebind( next, previous, false );\n\n\t\ti = this.links.length;\n\t\twhile ( i-- ) this.links[i].relinking( next, false );\n\t}\n\n\tregister ( dependant ) {\n\t\tthis.deps.push( dependant );\n\t}\n\n\tregisterLink ( link ) {\n\t\taddToArray( this.links, link );\n\t}\n\n\tunregister ( dependant ) {\n\t\tremoveFromArray( this.deps, dependant );\n\t}\n\n\tunregisterLink ( link ) {\n\t\tremoveFromArray( this.links, link );\n\t}\n}\n\nKeyModel.prototype.reference = noop;\nKeyModel.prototype.unreference = noop;\n"",""const stack = [];\nlet captureGroup;\n\nexport function startCapturing () {\n\tstack.push( captureGroup = [] );\n}\n\nexport function stopCapturing () {\n\tconst dependencies = stack.pop();\n\tcaptureGroup = stack[ stack.length - 1 ];\n\treturn dependencies;\n}\n\nexport function capture ( model ) {\n\tif ( captureGroup ) {\n\t\tcaptureGroup.push( model );\n\t}\n}\n"",""import { isArray, isString } from './is';\n\nexport function addToArray ( array, value ) {\n\tconst index = array.indexOf( value );\n\n\tif ( index === -1 ) {\n\t\tarray.push( value );\n\t}\n}\n\nexport function arrayContains ( array, value ) {\n\tfor ( let i = 0, c = array.length; i < c; i++ ) {\n\t\tif ( array[i] == value ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport function arrayContentsMatch ( a, b ) {\n\tlet i;\n\n\tif ( !isArray( a ) || !isArray( b ) ) {\n\t\treturn false;\n\t}\n\n\tif ( a.length !== b.length ) {\n\t\treturn false;\n\t}\n\n\ti = a.length;\n\twhile ( i-- ) {\n\t\tif ( a[i] !== b[i] ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport function ensureArray ( x ) {\n\tif ( isString( x ) ) {\n\t\treturn [ x ];\n\t}\n\n\tif ( x === undefined ) {\n\t\treturn [];\n\t}\n\n\treturn x;\n}\n\nexport function lastItem ( array ) {\n\treturn array[ array.length - 1 ];\n}\n\nexport function removeFromArray ( array, member ) {\n\tif ( !array ) {\n\t\treturn;\n\t}\n\n\tconst index = array.indexOf( member );\n\n\tif ( index !== -1 ) {\n\t\tarray.splice( index, 1 );\n\t}\n}\n\nexport function combine ( ...arrays ) {\n\tconst res = arrays.concat.apply( [], arrays );\n\tlet i = res.length;\n\twhile ( i-- ) {\n\t\tconst idx = res.indexOf( res[i] );\n\t\tif ( ~idx && idx < i ) res.splice( i, 1 );\n\t}\n\n\treturn res;\n}\n\nexport function toArray ( arrayLike ) {\n\tconst array = [];\n\tlet i = arrayLike.length;\n\twhile ( i-- ) {\n\t\tarray[i] = arrayLike[i];\n\t}\n\n\treturn array;\n}\n\nexport function findMap ( array, fn ) {\n\tconst len = array.length;\n\tfor ( let i = 0; i < len; i++ ) {\n\t\tconst result = fn( array[i] );\n\t\tif ( result ) return result;\n\t}\n}\n"",""import { isString } from 'utils/is';\n\nconst refPattern = /\\[\\s*(\\*|[0-9]|[1-9][0-9]+)\\s*\\]/g;\nconst splitPattern = /([^\\\\](?:\\\\\\\\)*)\\./;\nconst escapeKeyPattern = /\\\\|\\./g;\nconst unescapeKeyPattern = /((?:\\\\)+)\\1|\\\\(\\.)/g;\n\nexport function escapeKey ( key ) {\n\tif ( isString( key ) ) {\n\t\treturn key.replace( escapeKeyPattern, '\\\\$&' );\n\t}\n\n\treturn key;\n}\n\nexport function normalise ( ref ) {\n\treturn ref ? ref.replace( refPattern, '.$1' ) : '';\n}\n\nexport function splitKeypath ( keypath ) {\n\tconst result = [];\n\tlet match;\n\n\tkeypath = normalise( keypath );\n\n\twhile ( match = splitPattern.exec( keypath ) ) {\n\t\tconst index = match.index + match[1].length;\n\t\tresult.push( keypath.substr( 0, index ) );\n\t\tkeypath = keypath.substr( index + 1 );\n\t}\n\n\tresult.push( keypath );\n\n\treturn result;\n}\n\nexport function unescapeKey ( key ) {\n\tif ( isString( key ) ) {\n\t\treturn key.replace( unescapeKeyPattern, '$1$2' );\n\t}\n\n\treturn key;\n}\n"",""import { isArray, isObject, isNumeric } from 'utils/is';\nimport interpolate from 'shared/interpolate';\nimport { hasOwn } from 'utils/object';\n\nconst interpolators = {\n\tnumber ( from, to ) {\n\t\tif ( !isNumeric( from ) || !isNumeric( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfrom = +from;\n\t\tto = +to;\n\n\t\tconst delta = to - from;\n\n\t\tif ( !delta ) {\n\t\t\treturn function () { return from; };\n\t\t}\n\n\t\treturn function ( t ) {\n\t\t\treturn from + ( t * delta );\n\t\t};\n\t},\n\n\tarray ( from, to ) {\n\t\tlet len, i;\n\n\t\tif ( !isArray( from ) || !isArray( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst intermediate = [];\n\t\tconst interpolators = [];\n\n\t\ti = len = Math.min( from.length, to.length );\n\t\twhile ( i-- ) {\n\t\t\tinterpolators[i] = interpolate( from[i], to[i] );\n\t\t}\n\n\t\t// surplus values - don't interpolate, but don't exclude them either\n\t\tfor ( i=len; i<from.length; i+=1 ) {\n\t\t\tintermediate[i] = from[i];\n\t\t}\n\n\t\tfor ( i=len; i<to.length; i+=1 ) {\n\t\t\tintermediate[i] = to[i];\n\t\t}\n\n\t\treturn function ( t ) {\n\t\t\tlet i = len;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tintermediate[i] = interpolators[i]( t );\n\t\t\t}\n\n\t\t\treturn intermediate;\n\t\t};\n\t},\n\n\tobject ( from, to ) {\n\t\tif ( !isObject( from ) || !isObject( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst properties = [];\n\t\tconst intermediate = {};\n\t\tconst interpolators = {};\n\n\t\tfor ( const prop in from ) {\n\t\t\tif ( hasOwn( from, prop ) ) {\n\t\t\t\tif ( hasOwn( to, prop ) ) {\n\t\t\t\t\tproperties.push( prop );\n\t\t\t\t\tinterpolators[ prop ] = interpolate( from[ prop ], to[ prop ] ) || ( () => to[ prop ] );\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tintermediate[ prop ] = from[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( const prop in to ) {\n\t\t\tif ( hasOwn( to, prop ) && !hasOwn( from, prop ) ) {\n\t\t\t\tintermediate[ prop ] = to[ prop ];\n\t\t\t}\n\t\t}\n\n\t\tconst len = properties.length;\n\n\t\treturn function ( t ) {\n\t\t\tlet i = len;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tconst prop = properties[i];\n\n\t\t\t\tintermediate[ prop ] = interpolators[ prop ]( t );\n\t\t\t}\n\n\t\t\treturn intermediate;\n\t\t};\n\t}\n};\n\nexport default interpolators;\n"",""import { fatal } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport interpolators from '../Ractive/static/interpolators';\nimport { findInViewHierarchy } from './registry';\n\nexport default function interpolate ( from, to, ractive, type ) {\n\tif ( from === to ) return null;\n\n\tif ( type ) {\n\t\tconst interpol = findInViewHierarchy( 'interpolators', ractive, type );\n\t\tif ( interpol ) return interpol( from, to ) || null;\n\n\t\tfatal( missingPlugin( type, 'interpolator' ) );\n\t}\n\n\treturn interpolators.number( from, to ) ||\n\t       interpolators.array( from, to ) ||\n\t       interpolators.object( from, to ) ||\n\t       null;\n}\n"",""export function findInViewHierarchy ( registryName, ractive, name ) {\n\tconst instance = findInstance( registryName, ractive, name );\n\treturn instance ? instance[ registryName ][ name ] : null;\n}\n\nexport function findInstance ( registryName, ractive, name ) {\n\twhile ( ractive ) {\n\t\tif ( name in ractive[ registryName ] ) {\n\t\t\treturn ractive;\n\t\t}\n\n\t\tif ( ractive.isolated ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tractive = ractive.parent;\n\t}\n}"",""// Error messages that are used (or could be) in multiple places\nexport const badArguments = 'Bad arguments';\nexport const noRegistryFunctionReturn = 'A function was specified for \""%s\"" %s, but no %s was returned';\nexport const missingPlugin = ( name, type ) => `Missing \""${name}\"" ${type} plugin. You may need to download a plugin via http://ractive.js.org/integrations/#${type}s`;\n"",""/* global console */\n/* eslint no-console:\""off\"" */\n\nimport { hasConsole } from '../config/environment';\nimport Ractive from '../Ractive';\nimport noop from './noop';\nimport { isObjectType } from 'utils/is';\n\nconst alreadyWarned = {};\nlet log, printWarning, welcome;\n\nif ( hasConsole ) {\n\tconst welcomeIntro = [\n\t\t`%cRactive.js %cBUILD_PLACEHOLDER_VERSION %cin debug mode, %cmore...`,\n\t\t'color: rgb(114, 157, 52); font-weight: normal;',\n\t\t'color: rgb(85, 85, 85); font-weight: normal;',\n\t\t'color: rgb(85, 85, 85); font-weight: normal;',\n\t\t'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n\t];\n\tconst welcomeMessage = `You're running Ractive BUILD_PLACEHOLDER_VERSION in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\n\nTo disable debug mode, add this line at the start of your app:\n  Ractive.DEBUG = false;\n\nTo disable debug mode when your app is minified, add this snippet:\n  Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\n\nGet help and support:\n  http://ractive.js.org\n  http://stackoverflow.com/questions/tagged/ractivejs\n  http://groups.google.com/forum/#!forum/ractive-js\n  http://twitter.com/ractivejs\n\nFound a bug? Raise an issue:\n  https://github.com/ractivejs/ractive/issues\n\n`;\n\n\twelcome = () => {\n\t\tif ( Ractive.WELCOME_MESSAGE === false ) {\n\t\t\twelcome = noop;\n\t\t\treturn;\n\t\t}\n\t\tconst message = 'WELCOME_MESSAGE' in Ractive ? Ractive.WELCOME_MESSAGE : welcomeMessage;\n\t\tconst hasGroup = !!console.groupCollapsed;\n\t\tif ( hasGroup ) console.groupCollapsed.apply( console, welcomeIntro );\n\t\tconsole.log( message );\n\t\tif ( hasGroup ) {\n\t\t\tconsole.groupEnd( welcomeIntro );\n\t\t}\n\n\t\twelcome = noop;\n\t};\n\n\tprintWarning = ( message, args ) => {\n\t\twelcome();\n\n\t\t// extract information about the instance this message pertains to, if applicable\n\t\tif ( isObjectType( args[ args.length - 1 ] ) ) {\n\t\t\tconst options = args.pop();\n\t\t\tconst ractive = options ? options.ractive : null;\n\n\t\t\tif ( ractive ) {\n\t\t\t\t// if this is an instance of a component that we know the name of, add\n\t\t\t\t// it to the message\n\t\t\t\tlet name;\n\t\t\t\tif ( ractive.component && ( name = ractive.component.name ) ) {\n\t\t\t\t\tmessage = `<${name}> ${message}`;\n\t\t\t\t}\n\n\t\t\t\tlet node;\n\t\t\t\tif ( node = ( options.node || ( ractive.fragment && ractive.fragment.rendered && ractive.find( '*' ) ) ) ) {\n\t\t\t\t\targs.push( node );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn.apply( console, [ '%cRactive.js: %c' + message, 'color: rgb(114, 157, 52);', 'color: rgb(85, 85, 85);' ].concat( args ) );\n\t};\n\n\tlog = function () {\n\t\tconsole.log.apply( console, arguments );\n\t};\n} else {\n\tprintWarning = log = welcome = noop;\n}\n\nfunction format ( message, args ) {\n\treturn message.replace( /%s/g, () => args.shift() );\n}\n\nfunction fatal ( message, ...args ) {\n\tmessage = format( message, args );\n\tthrow new Error( message );\n}\n\nfunction logIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\tlog.apply( null, arguments );\n\t}\n}\n\nfunction warn ( message, ...args ) {\n\tmessage = format( message, args );\n\tprintWarning( message, args );\n}\n\nfunction warnOnce ( message, ...args ) {\n\tmessage = format( message, args );\n\n\tif ( alreadyWarned[ message ] ) {\n\t\treturn;\n\t}\n\n\talreadyWarned[ message ] = true;\n\tprintWarning( message, args );\n}\n\nfunction warnIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\twarn.apply( null, arguments );\n\t}\n}\n\nfunction warnOnceIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\twarnOnce.apply( null, arguments );\n\t}\n}\n\nexport { fatal, log, logIfDebug, warn, warnOnce, warnIfDebug, warnOnceIfDebug, welcome };\n"",""export default function () {}\n"",""/* eslint no-console:\""off\"" */\nimport { isFunction } from 'utils/is';\n\nconst win =  typeof window !== 'undefined' ? window : null;\nconst doc = win ? document : null;\nconst isClient = !!doc;\nconst hasConsole = ( typeof console !== 'undefined' && isFunction( console.warn ) && isFunction( console.warn.apply ) );\n\nconst svg = doc ?\n\tdoc.implementation.hasFeature( 'http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1' ) :\n\tfalse;\n\nconst vendors = [ 'o', 'ms', 'moz', 'webkit' ];\n\nexport { win, doc, isClient, hasConsole, svg, vendors };\n"",""// These are a subset of the easing equations found at\n// https://raw.github.com/danro/easing-js - license info\n// follows:\n\n// --------------------------------------------------\n// easing.js v0.5.4\n// Generic set of easing functions with AMD support\n// https://github.com/danro/easing-js\n// This code may be freely distributed under the MIT license\n// http://danro.mit-license.org/\n// --------------------------------------------------\n// All functions adapted from Thomas Fuchs & Jeremy Kahn\n// Easing Equations (c) 2003 Robert Penner, BSD license\n// https://raw.github.com/danro/easing-js/master/LICENSE\n// --------------------------------------------------\n\n// In that library, the functions named easeIn, easeOut, and\n// easeInOut below are named easeInCubic, easeOutCubic, and\n// (you guessed it) easeInOutCubic.\n//\n// You can add additional easing functions to this list, and they\n// will be globally available.\n\n\nexport default {\n\tlinear ( pos ) { return pos; },\n\teaseIn ( pos ) {\n\t\t/* istanbul ignore next */\n\t\treturn Math.pow( pos, 3 );\n\t},\n\teaseOut ( pos ) { return ( Math.pow( ( pos - 1 ), 3 ) + 1 ); },\n\teaseInOut ( pos ) {\n\t\t/* istanbul ignore next */\n\t\tif ( ( pos /= 0.5 ) < 1 ) { return ( 0.5 * Math.pow( pos, 3 ) ); }\n\t\t/* istanbul ignore next */\n\t\treturn ( 0.5 * ( Math.pow( ( pos - 2 ), 3 ) + 2 ) );\n\t}\n};\n"",""export default {\n\t// render placement:\n\tel:                     void 0,\n\tappend:                 false,\n\tdelegate:               true,\n\n\t// template:\n\ttemplate:               null,\n\n\t// parse:\n\tallowExpressions:       true,\n\tdelimiters:             [ '{{', '}}' ],\n\ttripleDelimiters:       [ '{{{', '}}}' ],\n\tstaticDelimiters:       [ '[[', ']]' ],\n\tstaticTripleDelimiters: [ '[[[', ']]]' ],\n\tcsp:                    true,\n\tinterpolate:            false,\n\tpreserveWhitespace:     false,\n\tsanitize:               false,\n\tstripComments:          true,\n\tcontextLines:           0,\n\n\t// data & binding:\n\tdata:                   {},\n\tcomputed:               {},\n\tsyncComputedChildren:   false,\n\tresolveInstanceMembers: true,\n\twarnAboutAmbiguity:     false,\n\tadapt:                  [],\n\tisolated:               true,\n\ttwoway:                 true,\n\tlazy:                   false,\n\n\t// transitions:\n\tnoIntro:                false,\n\tnoOutro:                false,\n\ttransitionsEnabled:     true,\n\tcomplete:               void 0,\n\tnestedTransitions:      true,\n\n\t// css:\n\tcss:                    null,\n\tnoCssTransform:         false\n};\n"",""/* istanbul ignore if */\nif (typeof window !== 'undefined' && !(window.requestAnimationFrame && window.cancelAnimationFrame)) {\n\tlet lastTime = 0;\n\twindow.requestAnimationFrame = function (callback) {\n\t\tconst currentTime = Date.now();\n\t\tconst timeToNextCall = Math.max(0, 16 - (currentTime - lastTime));\n\t\tconst id = window.setTimeout(() => { callback(currentTime + timeToNextCall); }, timeToNextCall);\n\t\tlastTime = currentTime + timeToNextCall;\n\t\treturn id;\n\t};\n\twindow.cancelAnimationFrame = function (id) {\n\t\tclearTimeout(id);\n\t};\n}\n"",""import { isFunction, isObjectType } from 'utils/is';\n\n/* istanbul ignore if */\nif (typeof window !== 'undefined' && !window.Promise) {\n\tconst PENDING = {};\n\tconst FULFILLED = {};\n\tconst REJECTED = {};\n\n\tconst Promise = window.Promise = function (callback) {\n\t\tconst fulfilledHandlers = [];\n\t\tconst rejectedHandlers = [];\n\t\tlet state = PENDING;\n\t\tlet result;\n\t\tlet dispatchHandlers;\n\n\t\tconst makeResolver = (newState) => {\n\t\t\treturn function (value) {\n\t\t\t\tif (state !== PENDING) return;\n\t\t\t\tresult = value;\n\t\t\t\tstate = newState;\n\t\t\t\tdispatchHandlers = makeDispatcher((state === FULFILLED ? fulfilledHandlers : rejectedHandlers), result);\n\t\t\t\twait(dispatchHandlers);\n\t\t\t};\n\t\t};\n\n\t\tconst fulfill = makeResolver(FULFILLED);\n\t\tconst reject = makeResolver(REJECTED);\n\n\t\ttry {\n\t\t\tcallback(fulfill, reject);\n\t\t} catch (err) {\n\t\t\treject(err);\n\t\t}\n\n\t\treturn {\n\t\t\t// `then()` returns a Promise - 2.2.7\n\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\tconst promise2 = new Promise((fulfill, reject) => {\n\n\t\t\t\t\tconst processResolutionHandler = (handler, handlers, forward) => {\n\t\t\t\t\t\tif (isFunction( handler )) {\n\t\t\t\t\t\t\thandlers.push(p1result => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tresolve(promise2, handler(p1result), fulfill, reject);\n\t\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thandlers.push(forward);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tprocessResolutionHandler(onFulfilled, fulfilledHandlers, fulfill);\n\t\t\t\t\tprocessResolutionHandler(onRejected, rejectedHandlers, reject);\n\n\t\t\t\t\tif (state !== PENDING) {\n\t\t\t\t\t\twait(dispatchHandlers);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t\treturn promise2;\n\t\t\t},\n\t\t\t'catch'(onRejected) {\n\t\t\t\treturn this.then(null, onRejected);\n\t\t\t}\n\t\t};\n\t};\n\n\tPromise.all = function (promises) {\n\t\treturn new Promise((fulfil, reject) => {\n\t\t\tconst result = [];\n\t\t\tlet pending;\n\t\t\tlet i;\n\n\t\t\tif (!promises.length) {\n\t\t\t\tfulfil(result);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst processPromise = (promise, i) => {\n\t\t\t\tif (promise && isFunction( promise.then )) {\n\t\t\t\t\tpromise.then(value => {\n\t\t\t\t\t\tresult[i] = value;\n\t\t\t\t\t\t--pending || fulfil(result);\n\t\t\t\t\t}, reject);\n\t\t\t\t} else {\n\t\t\t\t\tresult[i] = promise;\n\t\t\t\t\t--pending || fulfil(result);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tpending = i = promises.length;\n\n\t\t\twhile (i--) {\n\t\t\t\tprocessPromise(promises[i], i);\n\t\t\t}\n\t\t});\n\t};\n\n\tPromise.resolve = function (value) {\n\t\treturn new Promise(fulfill => {\n\t\t\tfulfill(value);\n\t\t});\n\t};\n\n\tPromise.reject = function (reason) {\n\t\treturn new Promise((fulfill, reject) => {\n\t\t\treject(reason);\n\t\t});\n\t};\n\n\t// TODO use MutationObservers or something to simulate setImmediate\n\tconst wait = function (callback) {\n\t\tsetTimeout(callback, 0);\n\t};\n\n\tconst makeDispatcher = function (handlers, result) {\n\t\treturn function () {\n\t\t\tfor (let handler; handler = handlers.shift();) {\n\t\t\t\thandler(result);\n\t\t\t}\n\t\t};\n\t};\n\n\tconst resolve = function (promise, x, fulfil, reject) {\n\t\tlet then;\n\t\tif (x === promise) {\n\t\t\tthrow new TypeError(`A promise's fulfillment handler cannot return the same promise`);\n\t\t}\n\t\tif (x instanceof Promise) {\n\t\t\tx.then(fulfil, reject);\n\t\t} else if (x && (isObjectType( x ) || isFunction( x ))) {\n\t\t\ttry {\n\t\t\t\tthen = x.then;\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isFunction( then )) {\n\t\t\t\tlet called;\n\n\t\t\t\tconst resolvePromise = function (y) {\n\t\t\t\t\tif (called) return;\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tresolve(promise, y, fulfil, reject);\n\t\t\t\t};\n\t\t\t\tconst rejectPromise = function (r) {\n\t\t\t\t\tif (called) return;\n\t\t\t\t\tcalled = true;\n\t\t\t\t\treject(r);\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tthen.call(x, resolvePromise, rejectPromise);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (!called) {\n\t\t\t\t\t\treject(e);\n\t\t\t\t\t\tcalled = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfulfil(x);\n\t\t\t}\n\t\t} else {\n\t\t\tfulfil(x);\n\t\t}\n\t};\n\n}\n"",""/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.performance && !window.performance.now) {\n\twindow.performance = window.performance || {};\n\n\tconst nowOffset = Date.now();\n\n\twindow.performance.now = function () {\n\t\treturn Date.now() - nowOffset;\n\t};\n}\n"",""// NOTE: Node doesn't exist in IE8. Nothing can be done.\n/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.Node && window.Node.prototype && !window.Node.prototype.contains) {\n\tNode.prototype.contains = function (node) {\n\t\tif (!node)\n\t\t\tthrow new TypeError('node required');\n\n\t\tdo {\n\t\t\tif (this === node) return true;\n\t\t} while (node = node && node.parentNode);\n\n\t\treturn false;\n\t};\n}\n"",""import { hasOwn, defineProperty } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\n/* istanbul ignore if */\nif (!Array.prototype.find) {\n\tdefineProperty( Array.prototype, 'find', {\n\t\tvalue (callback, thisArg) {\n\t\t\tif (this === null || this === undefined)\n\t\t\t\tthrow new TypeError('Array.prototype.find called on null or undefined');\n\n\t\t\tif (!isFunction( callback ))\n\t\t\t\tthrow new TypeError(`${callback} is not a function`);\n\n\t\t\tconst array = Object(this);\n\t\t\tconst arrayLength = array.length >>> 0;\n\n\t\t\tfor (let index = 0; index < arrayLength; index++) {\n\t\t\t\tif (!hasOwn(array, index)) continue;\n\t\t\t\tif (!callback.call(thisArg, array[index], index, array)) continue;\n\t\t\t\treturn array[index];\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t\tconfigurable: true,\n\t\twritable: true\n\t});\n}\n"",""const toString = Object.prototype.toString;\nconst arrayLikePattern = /^\\[object (?:Array|FileList)\\]$/;\n\nexport function isArrayLike ( obj ) {\n\treturn arrayLikePattern.test( toString.call( obj ) );\n}\n\nexport const isArray = Array.isArray;\n\nexport function isEqual ( a, b ) {\n\tif ( a === null && b === null ) {\n\t\treturn true;\n\t}\n\n\tif ( isObjectType( a ) || isObjectType( b ) ) {\n\t\treturn false;\n\t}\n\n\treturn a === b;\n}\n\n// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\nexport function isNumeric ( thing ) {\n\treturn !isNaN( parseFloat( thing ) ) && isFinite( thing );\n}\n\nexport function isObject ( thing ) {\n\treturn ( thing && toString.call( thing ) === '[object Object]' );\n}\n\nexport function isObjectLike ( thing ) {\n\treturn !!( thing && ( isObjectType( thing ) || isFunction( thing ) ) );\n}\n\nexport function isObjectType ( thing ) {\n\treturn typeof thing === 'object';\n}\n\nexport function isFunction ( thing ) {\n\treturn typeof thing === 'function';\n}\n\nexport function isString ( thing ) {\n\treturn typeof thing === 'string';\n}\n\nexport function isNumber ( thing ) {\n\treturn typeof thing === 'number';\n}\n"",""export function hasOwn ( obj, prop ) {\n\treturn Object.prototype.hasOwnProperty.call( obj, prop );\n}\n\nexport function fillGaps ( target, ...sources ) {\n\tfor (let i = 0; i < sources.length; i++){\n\t\tconst source = sources[i];\n\t\tfor ( const key in source ) {\n\t\t\t// Source can be a prototype-less object.\n\t\t\tif ( key in target || !hasOwn( source, key ) ) continue;\n\t\t\ttarget[ key ] = source[ key ];\n\t\t}\n\t}\n\n\treturn target;\n}\n\nexport function toPairs ( obj = {} ) {\n\tconst pairs = [];\n\tfor ( const key in obj ) {\n\t\t// Source can be a prototype-less object.\n\t\tif ( !hasOwn( obj, key ) ) continue;\n\t\tpairs.push( [ key, obj[ key ] ] );\n\t}\n\treturn pairs;\n}\n\nconst obj = Object;\n\nexport const assign = obj.assign;\n\nexport const create = obj.create;\n\nexport const defineProperty = obj.defineProperty;\n\nexport const defineProperties = obj.defineProperties;\n\nexport const keys = obj.keys;\n"",""/* istanbul ignore if */\nif (!Object.assign) {\n\tObject.assign = function (target, ...sources) {\n\t\tif (target == null)\n\t\t\tthrow new TypeError('Cannot convert undefined or null to object');\n\n\t\tconst to = Object(target);\n\t\tconst sourcesLength = sources.length;\n\n\t\tfor (let index = 0; index < sourcesLength; index++) {\n\t\t\tconst nextSource = sources[index];\n\t\t\tfor (const nextKey in nextSource) {\n\t\t\t\tif (!Object.prototype.hasOwnProperty.call(nextSource, nextKey)) continue;\n\t\t\t\tto[nextKey] = nextSource[nextKey];\n\t\t\t}\n\t\t}\n\n\t\treturn to;\n\t};\n}\n""],""names"":[""sharedData"",""splitKeypath"",""getNodeInfo"",""getContext"",""opts"",""const"",""let"",""splitKeypathI"",""styleSet"",""SharedModel"",""updateModel"",""update"",""unrender"",""transition"",""toHTML"",""toCSS"",""toggle"",""teardown"",""subtract"",""set"",""resetTemplate"",""reset"",""render"",""once"",""on"",""off"",""insert"",""get"",""fire"",""findParent"",""findContainer"",""findComponent"",""findAllComponents"",""findAll"",""find"",""detach"",""animate"",""add"",""unrenderHook"",""completeHook"",""renderHook"",""unrenderAndDestroy"",""toString"",""this"",""super"",""html"",""svg"",""proto"",""prefix"",""createTransitions"",""linear"",""TRANSITION"",""testStyle"",""i"",""fragment"",""createFragment"",""numberPattern"",""specials"",""onlyWhitespace"",""xmlns"",""name"",""isBindableByChecked"",""isBindableByName"",""getValue"",""push"",""callRender"",""registryNames"",""bind"",""keys"",""objectKeys"",""div"",""type"",""prototype"",""model"",""wrapPrototype"",""RactiveProto"",""validate"",""readElement"",""readMustacheComment"",""leadingWhitespace"",""elsePattern"",""readRegexpLiteral"",""readConditional"",""readLogicalOr"",""namePattern"",""readNumberLiteral"",""getKeyValuePair"",""stringMiddlePattern"",""pattern"",""combine"",""transformCSS"",""trim"",""callback"",""updateOld"",""star"",""staticInfo"",""staticContext"",""build"",""sharedSet"",""protoUpdate"",""protoAnimate"",""promise"",""result"",""detachHook"",""easing"",""context"",""child"",""prop"",""resolve"",""Promise""],""mappings"":""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AAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,M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""}"
cd162ad3b191d3b37f580edd4737ec7c291e4dcc,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
49f26f106134b72f16dc9bc11aeb72814d329545,10674054,    <!-- See http://stackoverflow.com/a/10674054 for getting the dependencies right -->
0d12384778d2f5e6978a54316e9dbab284b8d359,4406864,	// Code from http://stackoverflow.com/questions/4406864/html-canvas-unit-testing
b67af9df8ec29705b4c444ded9950999074b78f9,5782563,		// borrowed from http://stackoverflow.com/a/5782563/102476
8eabfc1e570200ed83c3f132737848055e75e7fd,34133809,// http://stackoverflow.com/questions/34133808/webpack-ots-parsing-error-loading-fonts/34133809#34133809
59bc65a3c2eb2dc536a70c64693f62e836ffaac2,785097, * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c
7ac2466b11de1eb50b0eedea8eb2a478c0d54984,13008597,        // cource; http://stackoverflow.com/a/13008597
0ed3dfd8309be802a72ef8277300313132e83f35,21440217,  // shim for IE courtesy of http://stackoverflow.com/a/21440217
7433384c94a9bcaf03e64cbe9db25ad1a38e2152,1197928,     * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
0ee179ffcfadca78b0090a42517680473986424f,5601931,http://stackoverflow.com/questions/5601931/best-and-safest-way-to-merge-a-git-branch-into-master
5bd6d625f6e982e2d9a0c55075c306a67fd87a9f,23229723,        // http://stackoverflow.com/questions/23229723/ie-10-11-cors-status-0
66adbda961ab799450bbbcf3a4b4dd52225a50e7,18082,"{""version"":3,""file"":""ractive.min.js"",""sources"":[""../src/Ractive/prototype.js"",""../src/Ractive/static/styles.js"",""../src/extend/_extend.js"",""../src/Ractive.js"",""../src/view/items/element/specials/Option.js"",""../src/view/items/Partial.js"",""../src/model/specials/KeyModel.js"",""../src/view/RepeatedFragment.js"",""../src/view/items/Section.js"",""../src/view/items/element/specials/Select.js"",""../src/view/items/element/specials/Textarea.js"",""../src/view/items/Text.js"",""../src/config/visibility.js"",""../src/view/items/element/transitions/prefix.js"",""../src/view/items/element/transitions/createTransitions.js"",""../src/view/items/element/transitions/hyphenate.js"",""../src/view/items/element/Transition.js"",""../src/view/items/triple/insertHtml.js"",""../src/view/items/Triple.js"",""../src/view/items/createItem.js"",""../src/view/Fragment.js"",""../src/Ractive/prototype/reset.js"",""../src/Ractive/prototype/reverse.js"",""../src/Ractive/prototype/shift.js"",""../src/Ractive/prototype/sort.js"",""../src/Ractive/prototype/splice.js"",""../src/Ractive/prototype/unshift.js"",""../src/view/items/Component.js"",""../src/view/items/element/Decorator.js"",""../src/view/items/Doctype.js"",""../src/view/items/element/binding/Binding.js"",""../src/view/items/element/binding/CheckboxBinding.js"",""../src/view/items/element/binding/getBindingGroup.js"",""../src/view/items/element/binding/CheckboxNameBinding.js"",""../src/view/items/element/binding/ContentEditableBinding.js"",""../src/view/items/element/binding/GenericBinding.js"",""../src/view/items/element/binding/FileBinding.js"",""../src/view/items/element/binding/MultipleSelectBinding.js"",""../src/view/items/element/binding/NumericBinding.js"",""../src/view/items/element/binding/RadioBinding.js"",""../src/view/items/element/binding/RadioNameBinding.js"",""../src/view/items/element/binding/SingleSelectBinding.js"",""../src/view/items/Element.js"",""../src/view/items/element/specials/Form.js"",""../src/view/items/element/ElementEvents.js"",""../src/view/items/component/RactiveEvent.js"",""../src/view/items/shared/EventDirective.js"",""../src/view/items/shared/Mustache.js"",""../src/view/items/Interpolator.js"",""../src/view/items/element/specials/Input.js"",""../src/utils/parseJSON.js"",""../src/view/items/component/Mapping.js"",""../src/shared/Context.js"",""../src/Ractive/static/getContext.js"",""../src/utils/dom.js"",""../src/config/namespaces.js"",""../src/Ractive/prototype/observe/Observer.js"",""../src/Ractive/prototype/observe/Pattern.js"",""../src/Ractive/prototype/observe/Array.js"",""../src/Ractive/prototype/observeOnce.js"",""../src/Ractive/prototype/shared/trim.js"",""../src/Ractive/prototype/shared/notEmptyString.js"",""../src/Ractive/prototype/pop.js"",""../src/Ractive/prototype/push.js"",""../src/global/css.js"",""../src/Ractive/config/custom/adapt.js"",""../src/utils/cleanCss.js"",""../src/Ractive/config/custom/css/transform.js"",""../src/model/specials/CSSModel.js"",""../src/Ractive/config/custom/css/css.js"",""../src/Ractive/config/custom/data.js"",""../src/Ractive/config/custom/template.js"",""../src/Ractive/config/registries.js"",""../src/Ractive/config/config.js"",""../src/view/items/shared/Item.js"",""../src/model/ComputationChild.js"",""../src/model/Computation.js"",""../src/view/resolvers/ExpressionProxy.js"",""../src/view/resolvers/ReferenceExpressionProxy.js"",""../src/view/items/Alias.js"",""../src/view/helpers/specialAttrs.js"",""../src/view/items/element/attribute/getUpdateDelegate.js"",""../src/view/items/element/attribute/propertyNames.js"",""../src/view/items/element/ConditionalAttribute.js"",""../src/view/items/element/Attribute.js"",""../src/view/items/element/BindingFlag.js"",""../src/view/items/Comment.js"",""../src/model/specials/RactiveModel.js"",""../src/model/RootModel.js"",""../src/Ractive/construct.js"",""../src/model/ModelBase.js"",""../src/global/capture.js"",""../src/model/LinkModel.js"",""../src/shared/getFunction.js"",""../src/config/template.js"",""../src/parse/Parser.js"",""../src/config/types.js"",""../src/parse/converters/expressions/readTypeof.js"",""../src/parse/converters/mustache/readDelimiterChange.js"",""../src/parse/converters/expressions/primary/literal/readRegexpLiteral.js"",""../src/utils/escapeRegExp.js"",""../src/parse/converters/utils/getLowestIndex.js"",""../src/utils/html.js"",""../src/parse/converters/expressions/shared/errors.js"",""../src/parse/converters/expressions/primary/literal/readNumberLiteral.js"",""../src/parse/converters/expressions/primary/literal/stringLiteral/makeQuotedStringMatcher.js"",""../src/parse/converters/expressions/primary/literal/readStringLiteral.js"",""../src/parse/converters/expressions/primary/literal/readTemplateStringLiteral.js"",""../src/parse/converters/expressions/shared/patterns.js"",""../src/parse/converters/expressions/shared/readKey.js"",""../src/parse/converters/expressions/primary/readReference.js"",""../src/parse/converters/expressions/readLogicalOr.js"",""../src/parse/converters/element/readAttribute.js"",""../src/parse/converters/readMustache.js"",""../src/parse/converters/mustache/readAliases.js"",""../src/parse/converters/mustache/section/readInlineBlock.js"",""../src/parse/converters/mustache/handlebarsBlockCodes.js"",""../src/parse/converters/mustache/readSection.js"",""../src/parse/converters/readHtmlComment.js"",""../src/parse/utils/stripStandalones.js"",""../src/parse/utils/cleanup.js"",""../src/parse/converters/element/readClosingTag.js"",""../src/parse/converters/readElement.js"",""../src/parse/converters/readPartialDefinitionSection.js"",""../src/Ractive/shared.js"",""../src/parse/_parse.js"",""../src/Ractive/config/runtime-parser.js"",""../src/global/TransitionManager.js"",""../src/global/runloop.js"",""../src/shared/Ticker.js"",""../src/model/helpers/getPrefixer.js"",""../src/model/Model.js"",""../src/model/specials/SharedModel.js"",""../src/shared/getRactiveContext.js"",""../src/shared/set.js"",""../src/Ractive/prototype/shared/add.js"",""../src/Ractive/prototype/animate.js"",""../src/events/fireEvent.js"",""../src/events/Hook.js"",""../src/Ractive/prototype/shared/makeArrayMethod.js"",""../src/Ractive/helpers/subscribe.js"",""../src/view/items/shared/directiveArgs.js"",""../src/view/items/element/binding/handleDomEvent.js"",""../src/utils/getSelectedOptions.js"",""../src/view/items/element/binding/selectBinding.js"",""../src/view/items/shared/progressiveText.js"",""../src/view/items/partial/getPartialTemplate.js"",""../src/view/items/component/getComponentConstructor.js"",""../src/view/items/asyncProxy.js"",""../src/view/items/Await.js"",""../src/view/helpers/processItems.js"",""../src/Ractive/initialise.js"",""../src/Ractive/render.js"",""../src/Ractive/prototype/render.js"",""../src/Ractive/prototype/resetPartial.js"",""../src/Ractive/prototype/resetTemplate.js"",""../src/Ractive/prototype/set.js"",""../src/Ractive/prototype/subtract.js"",""../src/Ractive/prototype/toggle.js"",""../src/Ractive/prototype/toCSS.js"",""../src/Ractive/prototype/toHTML.js"",""../src/Ractive/prototype/toText.js"",""../src/Ractive/prototype/transition.js"",""../src/Ractive/prototype/unlink.js"",""../src/Ractive/prototype/unrender.js"",""../src/Ractive/prototype/updateModel.js"",""../src/Ractive/prototype/use.js"",""../src/Ractive/static/isInstance.js"",""../src/Ractive/static/styleGet.js"",""../src/Ractive/static/sharedSet.js"",""../src/Ractive/static/sharedGet.js"",""../src/Ractive/static/use.js"",""../src/extend/_macro.js"",""../src/Ractive/static/keypaths.js"",""../src/Ractive/static/findPlugin.js"",""../src/polyfills/Object.assign.js"",""../src/utils/object.js"",""../src/utils/is.js"",""../src/polyfills/performance.now.js"",""../src/polyfills/array.find.js"",""../src/polyfills/node.contains.js"",""../src/config/environment.js"",""../src/polyfills/Promise.js"",""../src/polyfills/requestAnimationFrame.js"",""../src/Ractive/config/defaults.js"",""../src/utils/log.js"",""../src/Ractive/static/easing.js"",""../src/config/errors.js"",""../src/Ractive/static/interpolators.js"",""../src/shared/keypaths.js"",""../src/utils/bind.js"",""../src/view/resolvers/resolveReference.js"",""../src/Ractive/prototype/add.js"",""../src/events/eventStack.js"",""../src/shared/anchors.js"",""../src/Ractive/prototype/attachChild.js"",""../src/Ractive/prototype/compute.js"",""../src/Ractive/prototype/detach.js"",""../src/Ractive/prototype/detachChild.js"",""../src/Ractive/prototype/find.js"",""../src/Ractive/prototype/findAll.js"",""../src/Ractive/prototype/findAllComponents.js"",""../src/Ractive/prototype/findComponent.js"",""../src/Ractive/prototype/findContainer.js"",""../src/Ractive/prototype/findParent.js"",""../src/view/items/shared/findElement.js"",""../src/shared/getNewIndices.js"",""../src/Ractive/prototype/update.js"",""../src/Ractive/prototype/fire.js"",""../src/Ractive/prototype/get.js"",""../src/Ractive/prototype/getContext.js"",""../src/Ractive/prototype/insert.js"",""../src/Ractive/prototype/link.js"",""../src/Ractive/prototype/observe.js"",""../src/Ractive/prototype/off.js"",""../src/Ractive/prototype/on.js"",""../src/Ractive/prototype/once.js"",""../src/Ractive/prototype/readLink.js"",""../src/utils/id.js"",""../src/Ractive/static/styleSet.js"",""../src/Ractive/config/wrapPrototypeMethod.js"",""../src/Ractive/config/deprecate.js"",""../src/view/resolvers/resolve.js"",""../src/Ractive/prototype/teardown.js"",""../src/utils/noop.js"",""../src/shared/registry.js"",""../src/shared/interpolate.js"",""../src/utils/array.js"",""../src/shared/methodCallers.js"",""../src/shared/rebind.js"",""../src/parse/utils/createFunction.js"",""../src/parse/converters/expressions/primary/literal/readBooleanLiteral.js"",""../src/parse/converters/expressions/primary/literal/objectLiteral/keyValuePair.js"",""../src/parse/converters/expressions/primary/literal/objectLiteral/keyValuePairs.js"",""../src/parse/converters/expressions/primary/literal/readObjectLiteral.js"",""../src/parse/converters/expressions/primary/literal/readArrayLiteral.js"",""../src/parse/converters/expressions/primary/readLiteral.js"",""../src/parse/converters/expressions/primary/readBracketedExpression.js"",""../src/parse/converters/expressions/readPrimary.js"",""../src/parse/converters/expressions/shared/readRefinement.js"",""../src/parse/converters/expressions/readMemberOrInvocation.js"",""../src/parse/converters/expressions/readConditional.js"",""../src/parse/converters/readExpression.js"",""../src/parse/converters/expressions/shared/readExpressionList.js"",""../src/parse/converters/readExpressionOrReference.js"",""../src/parse/utils/flattenExpression.js"",""../src/parse/utils/refineExpression.js"",""../src/parse/converters/mustache/readTriple.js"",""../src/parse/converters/mustache/readUnescaped.js"",""../src/parse/converters/mustache/readPartial.js"",""../src/parse/converters/mustache/readMustacheComment.js"",""../src/parse/converters/mustache/readInterpolator.js"",""../src/parse/converters/mustache/section/readClosing.js"",""../src/parse/utils/trimWhitespace.js"",""../src/utils/hyphenateCamel.js"",""../src/parse/converters/readText.js"",""../src/parse/converters/readTemplate.js"",""../src/parse/utils/insertExpressions.js"",""../src/Ractive/helpers/getComputationSignature.js""],""sourcesContent"":[""import add from './prototype/add';\nimport animate from './prototype/animate';\nimport attachChild from './prototype/attachChild';\nimport compute from './prototype/compute';\nimport detach from './prototype/detach';\nimport detachChild from './prototype/detachChild';\nimport find from './prototype/find';\nimport findAll from './prototype/findAll';\nimport findAllComponents from './prototype/findAllComponents';\nimport findComponent from './prototype/findComponent';\nimport findContainer from './prototype/findContainer';\nimport findParent from './prototype/findParent';\nimport fire from './prototype/fire';\nimport get from './prototype/get';\nimport getContext from './prototype/getContext';\nimport insert from './prototype/insert';\nimport link from './prototype/link';\nimport observe from './prototype/observe';\nimport observeOnce from './prototype/observeOnce';\nimport off from './prototype/off';\nimport on from './prototype/on';\nimport once from './prototype/once';\nimport pop from './prototype/pop';\nimport push from './prototype/push';\nimport readLink from './prototype/readLink';\nimport render from './prototype/render';\nimport reset from './prototype/reset';\nimport resetPartial from './prototype/resetPartial';\nimport resetTemplate from './prototype/resetTemplate';\nimport reverse from './prototype/reverse';\nimport set from './prototype/set';\nimport shift from './prototype/shift';\nimport sort from './prototype/sort';\nimport splice from './prototype/splice';\nimport subtract from './prototype/subtract';\nimport teardown from './prototype/teardown';\nimport toggle from './prototype/toggle';\nimport toCSS from './prototype/toCSS';\nimport toHTML from './prototype/toHTML';\nimport toText from './prototype/toText';\nimport transition from './prototype/transition';\nimport unlink from './prototype/unlink';\nimport unrender from './prototype/unrender';\nimport unshift from './prototype/unshift';\nimport update from './prototype/update';\nimport updateModel from './prototype/updateModel';\nimport use from './prototype/use';\n\nconst proto = {\n  add,\n  animate,\n  attachChild,\n  compute,\n  detach,\n  detachChild,\n  find,\n  findAll,\n  findAllComponents,\n  findComponent,\n  findContainer,\n  findParent,\n  fire,\n  get,\n  getContext,\n  insert,\n  link,\n  observe,\n  observeOnce,\n  off,\n  on,\n  once,\n  pop,\n  push,\n  readLink,\n  render,\n  reset,\n  resetPartial,\n  resetTemplate,\n  reverse,\n  set,\n  shift,\n  sort,\n  splice,\n  subtract,\n  teardown,\n  toggle,\n  toCSS,\n  toCss: toCSS,\n  toHTML,\n  toHtml: toHTML,\n  toText,\n  transition,\n  unlink,\n  unrender,\n  unshift,\n  update,\n  updateModel,\n  use\n};\n\nexport default proto;\n"",""import { isFunction } from 'utils/is';\nimport { addCSS, applyCSS } from 'src/global/css';\nimport { recomputeCSS } from './styleSet';\n\nconst styles = [];\n\nexport function addStyle(id, css) {\n  if (styles.find(s => s.id === id))\n    throw new Error(`Extra styles with the id '${id}' have already been added.`);\n  styles.push({ id, css });\n\n  if (!this.css) {\n    Object.defineProperty(this, 'css', { configurable: false, writable: false, value: buildCSS });\n  }\n\n  if (!this._cssDef) {\n    Object.defineProperty(this, '_cssDef', {\n      configurable: true,\n      writable: false,\n      value: {\n        transform: false,\n        id: 'Ractive.addStyle'\n      }\n    });\n\n    addCSS(this._cssDef);\n  }\n\n  recomputeCSS(this);\n  applyCSS(true);\n}\n\nfunction buildCSS(data) {\n  return styles\n    .map(s => `\\n/* ---- extra style ${s.id} */\\n` + (isFunction(s.css) ? s.css(data) : s.css))\n    .join('');\n}\n\nexport function hasStyle(id) {\n  return !!styles.find(s => s.id === id);\n}\n"",""import config from '../Ractive/config/config';\nimport dataConfigurator from '../Ractive/config/custom/data';\nimport construct from '../Ractive/construct';\nimport initialise from '../Ractive/initialise';\nimport Ractive from '../Ractive';\nimport isInstance from '../Ractive/static/isInstance';\nimport styleSet from '../Ractive/static/styleSet';\nimport styleGet from '../Ractive/static/styleGet';\nimport { addStyle, hasStyle } from '../Ractive/static/styles';\nimport sharedSet from '../Ractive/static/sharedSet';\nimport sharedGet from '../Ractive/static/sharedGet';\nimport use from '../Ractive/static/use';\nimport { create, defineProperties, toPairs, defineProperty } from 'utils/object';\nimport { isArray, isFunction } from 'utils/is';\n\nconst callsSuper = /super\\s*\\(|\\.call\\s*\\(\\s*this/;\n\nexport function extend(...options) {\n  if (!options.length) {\n    return extendOne(this);\n  } else {\n    return options.reduce(extendOne, this);\n  }\n}\n\nexport function extendWith(Class, options = {}) {\n  return extendOne(this, options, Class);\n}\n\nfunction extendOne(Parent, options = {}, Target) {\n  let proto;\n  let Child = isFunction(Target) && Target;\n\n  if (options.prototype instanceof Ractive) {\n    throw new Error(`Ractive no longer supports multiple inheritance.`);\n  }\n\n  if (Child) {\n    if (!(Child.prototype instanceof Parent)) {\n      throw new Error(\n        `Only classes that inherit the appropriate prototype may be used with extend`\n      );\n    }\n    if (!callsSuper.test(Child.toString())) {\n      throw new Error(`Only classes that call super in their constructor may be used with extend`);\n    }\n\n    proto = Child.prototype;\n  } else {\n    Child = function(options) {\n      if (!(this instanceof Child)) return new Child(options);\n\n      construct(this, options || {});\n      initialise(this, options || {}, {});\n    };\n\n    proto = create(Parent.prototype);\n    proto.constructor = Child;\n\n    Child.prototype = proto;\n  }\n\n  // Static properties\n  defineProperties(Child, {\n    // alias prototype as defaults\n    defaults: { value: proto },\n\n    extend: { value: extend, writable: true, configurable: true },\n    extendWith: { value: extendWith, writable: true, configurable: true },\n    extensions: { value: [] },\n    use: { value: use },\n\n    isInstance: { value: isInstance },\n\n    Parent: { value: Parent },\n    Ractive: { value: Ractive },\n\n    styleGet: { value: styleGet.bind(Child), configurable: true },\n    styleSet: { value: styleSet.bind(Child), configurable: true }\n  });\n\n  // extend configuration\n  config.extend(Parent, proto, options, Child);\n\n  // store event and observer registries on the constructor when extending\n  Child._on = (Parent._on || []).concat(toPairs(options.on));\n  Child._observe = (Parent._observe || []).concat(toPairs(options.observe));\n\n  Parent.extensions.push(Child);\n\n  // attribute defs are not inherited, but they need to be stored\n  if (options.attributes) {\n    let attrs;\n\n    // allow an array of optional props or an object with arrays for optional and required props\n    if (isArray(options.attributes)) {\n      attrs = { optional: options.attributes, required: [] };\n    } else {\n      attrs = options.attributes;\n    }\n\n    // make sure the requisite keys actually store arrays\n    if (!isArray(attrs.required)) attrs.required = [];\n    if (!isArray(attrs.optional)) attrs.optional = [];\n\n    Child.attributes = attrs;\n  }\n\n  dataConfigurator.extend(Parent, proto, options, Child);\n\n  defineProperty(Child, 'helpers', { writable: true, value: proto.helpers });\n\n  if (isArray(options.use)) Child.use.apply(Child, options.use);\n\n  return Child;\n}\n\ndefineProperties(Ractive, {\n  sharedGet: { value: sharedGet },\n  sharedSet: { value: sharedSet },\n  styleGet: { configurable: true, value: styleGet.bind(Ractive) },\n  styleSet: { configurable: true, value: styleSet.bind(Ractive) },\n  addCSS: { configurable: false, value: addStyle.bind(Ractive) },\n  hasCSS: { configurable: false, value: hasStyle.bind(Ractive) }\n});\n"",""import './polyfills/Object.assign';\nimport './polyfills/array.find';\nimport './polyfills/node.contains';\nimport './polyfills/performance.now';\nimport './polyfills/Promise';\nimport './polyfills/requestAnimationFrame';\n\nimport defaults from './Ractive/config/defaults';\nimport easing from './Ractive/static/easing';\nimport interpolators from './Ractive/static/interpolators';\nimport { svg, win } from './config/environment';\nimport proto from './Ractive/prototype';\nimport { extend, extendWith } from './extend/_extend';\nimport macro from './extend/_macro';\nimport parse from './parse/_parse';\nimport getContext from './Ractive/static/getContext';\nimport isInstance from './Ractive/static/isInstance';\nimport use from './Ractive/static/use';\nimport construct from './Ractive/construct';\nimport initialise from './Ractive/initialise';\nimport { getCSS } from './global/css';\nimport { escapeKey, unescapeKey, normalise } from './shared/keypaths';\nimport { joinKeys, splitKeypath } from './Ractive/static/keypaths';\nimport shared from './Ractive/shared';\nimport { findPlugin } from './Ractive/static/findPlugin';\nimport parseJSON from './utils/parseJSON';\nimport CSSModel from './model/specials/CSSModel';\nimport { data as sharedData } from './model/specials/SharedModel';\nimport { extern } from './shared/getRactiveContext';\nimport { warn } from 'utils/log';\n\nimport { assign, defineProperty, defineProperties } from 'utils/object';\n\nexport default function Ractive(options) {\n  if (!(this instanceof Ractive)) return new Ractive(options);\n\n  construct(this, options || {});\n  initialise(this, options || {}, {});\n}\n\n// check to see if we're being asked to force Ractive as a global for some weird environments\nif (win && !win.Ractive) {\n  let opts = '';\n  const script =\n    document.currentScript ||\n    /* istanbul ignore next */ document.querySelector('script[data-ractive-options]');\n\n  if (script) opts = script.getAttribute('data-ractive-options') || '';\n\n  /* istanbul ignore next */\n  if (~opts.indexOf('ForceGlobal')) win.Ractive = Ractive;\n} else if (win) {\n  warn(`Ractive already appears to be loaded while loading BUILD_PLACEHOLDER_VERSION.`);\n}\n\nassign(Ractive.prototype, proto, defaults);\nRactive.prototype.constructor = Ractive;\n\n// alias prototype as `defaults`\nRactive.defaults = Ractive.prototype;\n\n// share defaults with the parser\nshared.defaults = Ractive.defaults;\nshared.Ractive = Ractive;\n\n// static properties\ndefineProperties(Ractive, {\n  // debug flag\n  DEBUG: { writable: true, value: true },\n  DEBUG_PROMISES: { writable: true, value: true },\n\n  // static methods:\n  extend: { value: extend },\n  extendWith: { value: extendWith },\n  escapeKey: { value: escapeKey },\n  evalObjectString: { value: parseJSON },\n  findPlugin: { value: findPlugin },\n  getContext: { value: getContext },\n  getCSS: { value: getCSS },\n  isInstance: { value: isInstance },\n  joinKeys: { value: joinKeys },\n  macro: { value: macro },\n  normaliseKeypath: { value: normalise },\n  parse: { value: parse },\n  splitKeypath: { value: splitKeypath },\n  // sharedSet and styleSet are in _extend because circular refs\n  unescapeKey: { value: unescapeKey },\n  use: { value: use },\n\n  // support\n  enhance: { writable: true, value: false },\n  svg: { value: svg },\n\n  // version\n  VERSION: { value: 'BUILD_PLACEHOLDER_VERSION' },\n\n  // plugins\n  adaptors: { writable: true, value: {} },\n  components: { writable: true, value: {} },\n  decorators: { writable: true, value: {} },\n  easing: { writable: true, value: easing },\n  events: { writable: true, value: {} },\n  extensions: { value: [] },\n  helpers: { writable: true, value: defaults.helpers },\n  interpolators: { writable: true, value: interpolators },\n  partials: { writable: true, value: {} },\n  transitions: { writable: true, value: {} },\n\n  // CSS variables\n  cssData: { configurable: true, value: {} },\n\n  // access to @shared without an instance\n  sharedData: { value: sharedData },\n\n  // for getting the source Ractive lib from a constructor\n  Ractive: { value: Ractive },\n\n  // to allow extending contexts\n  Context: { value: extern.Context.prototype }\n});\n\n// cssData must already be in place\ndefineProperty(Ractive, '_cssModel', {\n  configurable: true,\n  value: new CSSModel(Ractive)\n});\n\ndefineProperty(Ractive.prototype, 'rendered', {\n  get() {\n    return this.fragment && this.fragment.rendered;\n  }\n});\n"",""import { removeFromArray } from 'utils/array';\nimport Element from '../../Element';\nimport findElement from '../../shared/findElement';\nimport { isArray } from 'utils/is';\n\nexport default class Option extends Element {\n  constructor(options) {\n    const template = options.template;\n    if (!template.a) template.a = {};\n\n    // If the value attribute is missing, use the element's content,\n    // as long as it isn't disabled\n    if (template.a.value === undefined && !('disabled' in template.a)) {\n      template.a.value = template.f || '';\n    }\n\n    super(options);\n\n    this.select = findElement(this.parent || this.up, false, 'select');\n  }\n\n  bind() {\n    if (!this.select) {\n      super.bind();\n      return;\n    }\n\n    // If the select has a value, it overrides the `selected` attribute on\n    // this option - so we delete the attribute\n    const selectedAttribute = this.attributeByName.selected;\n    if (selectedAttribute && this.select.getAttribute('value') !== undefined) {\n      const index = this.attributes.indexOf(selectedAttribute);\n      this.attributes.splice(index, 1);\n      delete this.attributeByName.selected;\n    }\n\n    super.bind();\n    this.select.options.push(this);\n  }\n\n  bubble() {\n    // if we're using content as value, may need to update here\n    const value = this.getAttribute('value');\n    if (this.node && this.node.value !== value) {\n      this.node._ractive.value = value;\n    }\n    super.bubble();\n  }\n\n  getAttribute(name) {\n    const attribute = this.attributeByName[name];\n    return attribute\n      ? attribute.getValue()\n      : name === 'value' && this.fragment\n      ? this.fragment.valueOf()\n      : undefined;\n  }\n\n  isSelected() {\n    const optionValue = this.getAttribute('value');\n\n    if (optionValue === undefined || !this.select) {\n      return false;\n    }\n\n    const selectValue = this.select.getAttribute('value');\n\n    if (this.select.compare(selectValue, optionValue)) {\n      return true;\n    }\n\n    if (this.select.getAttribute('multiple') && isArray(selectValue)) {\n      let i = selectValue.length;\n      while (i--) {\n        if (this.select.compare(selectValue[i], optionValue)) {\n          return true;\n        }\n      }\n    }\n  }\n\n  render(target, occupants) {\n    super.render(target, occupants);\n\n    if (!this.attributeByName.value) {\n      this.node._ractive.value = this.getAttribute('value');\n    }\n  }\n\n  unbind(view) {\n    super.unbind(view);\n\n    if (this.select) {\n      removeFromArray(this.select.options, this);\n    }\n  }\n}\n"",""import { ELEMENT, PARTIAL, SECTION, SECTION_WITH, YIELDER } from 'config/types';\nimport { assign, create, hasOwn, keys } from 'utils/object';\nimport { isArray, isFunction, isObjectType, isString } from 'utils/is';\nimport noop from 'utils/noop';\nimport { MustacheContainer } from './shared/Mustache';\nimport Fragment from '../Fragment';\nimport getPartialTemplate from './partial/getPartialTemplate';\nimport { resolveAliases } from './Alias';\nimport { warnOnceIfDebug, warnIfDebug } from 'utils/log';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport runloop from 'src/global/runloop';\nimport { applyCSS } from 'src/global/css';\nimport { splitKeypath } from 'shared/keypaths';\n\nexport default function Partial(options) {\n  MustacheContainer.call(this, options);\n\n  const tpl = options.template;\n\n  // yielder is a special form of partial that will later require special handling\n  if (tpl.t === YIELDER) {\n    this.yielder = 1;\n  } else if (tpl.t === ELEMENT) {\n    // this is a macro partial, complete with macro constructor\n    // leaving this as an element will confuse up-template searches\n    this.type = PARTIAL;\n    this.macro = options.macro;\n  }\n}\n\nconst proto = (Partial.prototype = create(MustacheContainer.prototype));\n\nassign(proto, {\n  constructor: Partial,\n\n  bind() {\n    const template = this.template;\n\n    if (this.yielder) {\n      // the container is the instance that owns this node\n      this.container = this.up.ractive;\n      this.component = this.container.component;\n      this.containerFragment = this.up;\n\n      // normal component\n      if (this.component) {\n        // yields skip the owning instance and go straight to the surrounding context\n        this.up = this.component.up;\n\n        // {{yield}} is equivalent to {{yield content}}\n        if (!template.r && !template.x && !template.rx) this.refName = 'content';\n      } else {\n        // plain-ish instance that may be attached to a parent later\n        this.fragment = new Fragment({\n          owner: this,\n          template: []\n        });\n        this.fragment.bind();\n        return;\n      }\n    }\n\n    // this is a macro/super partial\n    if (this.macro) {\n      this.fn = this.macro;\n    } else {\n      // this is a plain partial or yielder\n      if (!this.refName) this.refName = template.r;\n\n      // if the refName exists as a partial, this is a plain old partial reference where no model binding will happen\n      if (this.refName) {\n        partialFromValue(this, this.refName);\n      }\n\n      // this is a dynamic/inline partial\n      if (!this.partial && !this.fn) {\n        MustacheContainer.prototype.bind.call(this);\n        if (this.model) partialFromValue(this, this.model.get());\n      }\n    }\n\n    if (!this.partial && !this.fn) {\n      warnOnceIfDebug(`Could not find template for partial '${this.name}'`);\n    }\n\n    createFragment(this, this.partial || []);\n\n    // macro/super partial\n    if (this.fn) initMacro(this);\n\n    this.fragment.bind();\n  },\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n\n      if (this.yielder) {\n        this.containerFragment.bubble();\n      } else {\n        this.up.bubble();\n      }\n    }\n  },\n\n  findNextNode() {\n    return (this.containerFragment || this.up).findNextNode(this);\n  },\n\n  handleChange() {\n    this.dirtyTemplate = true;\n    this.externalChange = true;\n    this.bubble();\n  },\n\n  rebound(update) {\n    const aliases = this.fragment && this.fragment.aliases;\n    if (aliases) {\n      for (const k in aliases) {\n        if (aliases[k].rebound) aliases[k].rebound(update);\n        else {\n          aliases[k].unreference();\n          aliases[k] = 0;\n        }\n      }\n      if (this.template.z) {\n        resolveAliases(this.template.z, this.containerFragment || this.up, aliases);\n      }\n    }\n    if (this._attrs) {\n      keys(this._attrs).forEach(k => this._attrs[k].rebound(update));\n    }\n    MustacheContainer.prototype.rebound.call(this, update);\n  },\n\n  refreshAttrs() {\n    keys(this._attrs).forEach(k => {\n      this.handle.attributes[k] = !this._attrs[k].items.length || this._attrs[k].valueOf();\n    });\n  },\n\n  resetTemplate() {\n    if (this.fn && this.proxy) {\n      if (this.externalChange) {\n        if (isFunction(this.proxy.teardown)) this.proxy.teardown();\n        this.fn = this.proxy = null;\n      } else {\n        this.partial = this.fnTemplate;\n        return true;\n      }\n    }\n\n    const partial = this.partial;\n    this.partial = null;\n\n    if (this.refName) {\n      this.partial = getPartialTemplate(this.ractive, this.refName, this.up);\n    }\n\n    if (!this.partial && this.model) {\n      partialFromValue(this, this.model.get());\n    }\n\n    if (!this.fn && partial === this.partial) return false;\n\n    this.unbindAttrs();\n\n    if (this.fn) {\n      initMacro(this);\n      if (isFunction(this.proxy.render)) runloop.scheduleTask(() => this.proxy.render());\n    } else if (!this.partial) {\n      warnOnceIfDebug(`Could not find template for partial '${this.name}'`);\n    }\n\n    return true;\n  },\n\n  render(target, occupants) {\n    if (this.fn && this.fn._cssDef && !this.fn._cssDef.applied) applyCSS();\n\n    this.fragment.render(target, occupants);\n\n    if (this.proxy && isFunction(this.proxy.render)) this.proxy.render();\n  },\n\n  unbind(view) {\n    this.fragment.unbind(view);\n\n    this.fragment.aliases = null;\n\n    this.unbindAttrs(view);\n\n    MustacheContainer.prototype.unbind.call(this, view);\n  },\n\n  unbindAttrs(view) {\n    if (this._attrs) {\n      keys(this._attrs).forEach(k => {\n        this._attrs[k].unbind(view);\n      });\n    }\n  },\n\n  unrender(shouldDestroy) {\n    if (this.proxy && isFunction(this.proxy.teardown)) this.proxy.teardown();\n\n    this.fragment.unrender(shouldDestroy);\n  },\n\n  update() {\n    const proxy = this.proxy;\n    this.updating = 1;\n\n    if (this.dirtyAttrs) {\n      this.dirtyAttrs = false;\n      keys(this._attrs).forEach(k => this._attrs[k].update());\n      this.refreshAttrs();\n      if (isFunction(proxy.update)) proxy.update(this.handle.attributes);\n    }\n\n    if (this.dirtyTemplate) {\n      this.dirtyTemplate = false;\n      this.resetTemplate() && this.fragment.resetTemplate(this.partial || []);\n    }\n\n    if (this.dirty) {\n      this.dirty = false;\n      if (proxy && isFunction(proxy.invalidate)) proxy.invalidate();\n      this.fragment.update();\n    }\n\n    this.externalChange = false;\n    this.updating = 0;\n  }\n});\n\nfunction createFragment(self, partial) {\n  self.partial = partial;\n  contextifyTemplate(self);\n\n  const options = {\n    owner: self,\n    template: self.partial\n  };\n\n  if (self.yielder) options.ractive = self.container.parent;\n\n  if (self.fn) options.cssIds = self.fn._cssIds;\n\n  const fragment = (self.fragment = new Fragment(options));\n\n  // partials may have aliases that need to be in place before binding\n  if (self.template.z) {\n    fragment.aliases = resolveAliases(self.template.z, self.containerFragment || self.up);\n  }\n}\n\nfunction contextifyTemplate(self) {\n  if (self.template.c) {\n    self.partial = [{ t: SECTION, n: SECTION_WITH, f: self.partial }];\n    assign(self.partial[0], self.template.c);\n    if (self.yielder) self.partial[0].y = self;\n  }\n}\n\nfunction partialFromValue(self, value, okToParse) {\n  let tpl = value;\n\n  if (isArray(tpl)) {\n    self.partial = tpl;\n  } else if (tpl && isObjectType(tpl)) {\n    if (isArray(tpl.t)) self.partial = tpl.t;\n    else if (isString(tpl.template))\n      self.partial = parsePartial(tpl.template, tpl.template, self.ractive).t;\n  } else if (isFunction(tpl) && tpl.styleSet) {\n    self.fn = tpl;\n    if (self.fragment) self.fragment.cssIds = tpl._cssIds;\n  } else if (tpl != null) {\n    tpl = getPartialTemplate(self.ractive, '' + tpl, self.containerFragment || self.up);\n    if (tpl) {\n      self.name = value;\n      if (tpl.styleSet) {\n        self.fn = tpl;\n        if (self.fragment) self.fragment.cssIds = tpl._cssIds;\n      } else self.partial = tpl;\n    } else if (okToParse) {\n      self.partial = parsePartial('' + value, '' + value, self.ractive).t;\n    } else {\n      self.name = value;\n    }\n  }\n\n  return self.partial;\n}\n\nfunction setTemplate(template) {\n  partialFromValue(this, template, true);\n\n  if (!this.initing) {\n    this.dirtyTemplate = true;\n    this.fnTemplate = this.partial;\n\n    if (this.updating) {\n      this.bubble();\n      runloop.promise();\n    } else {\n      const promise = runloop.start();\n\n      this.bubble();\n      runloop.end();\n\n      return promise;\n    }\n  }\n}\n\nfunction aliasLocal(ref, name) {\n  const aliases = this.fragment.aliases || (this.fragment.aliases = {});\n  if (!name) {\n    aliases[ref] = this._data;\n  } else {\n    aliases[name] = this._data.joinAll(splitKeypath(ref));\n  }\n}\n\nconst extras = 'extra-attributes';\n\nfunction initMacro(self) {\n  const fn = self.fn;\n  const fragment = self.fragment;\n\n  // defensively copy the template in case it changes\n  const template = (self.template = assign({}, self.template));\n  const handle = (self.handle = fragment.getContext({\n    proxy: self,\n    aliasLocal,\n    name: self.template.e || self.name,\n    attributes: {},\n    setTemplate: setTemplate.bind(self),\n    template,\n    macro: fn\n  }));\n\n  if (!template.p) template.p = {};\n  template.p = handle.partials = assign({}, template.p);\n  if (!hasOwn(template.p, 'content')) template.p.content = template.f || [];\n\n  if (isArray(fn.attributes)) {\n    self._attrs = {};\n\n    const invalidate = function() {\n      this.dirty = true;\n      self.dirtyAttrs = true;\n      self.bubble();\n    };\n\n    if (isArray(template.m)) {\n      const attrs = template.m;\n      template.p[extras] = template.m = attrs.filter(a => !~fn.attributes.indexOf(a.n));\n      attrs\n        .filter(a => ~fn.attributes.indexOf(a.n))\n        .forEach(a => {\n          const fragment = new Fragment({\n            template: a.f,\n            owner: self\n          });\n          fragment.bubble = invalidate;\n          fragment.findFirstNode = noop;\n          self._attrs[a.n] = fragment;\n        });\n    } else {\n      template.p[extras] = [];\n    }\n  } else {\n    template.p[extras] = template.m;\n  }\n\n  if (self._attrs) {\n    keys(self._attrs).forEach(k => {\n      self._attrs[k].bind();\n    });\n    self.refreshAttrs();\n  }\n\n  self.initing = 1;\n  self.proxy = fn.call(self.ractive, handle, handle.attributes) || {};\n  if (!self.partial) self.partial = [];\n  self.fnTemplate = self.partial;\n  self.initing = 0;\n\n  contextifyTemplate(self);\n  fragment.resetTemplate(self.partial);\n}\n\nfunction parsePartial(name, partial, ractive) {\n  let parsed;\n\n  try {\n    parsed = parser.parse(partial, parser.getParseOptions(ractive));\n  } catch (e) {\n    warnIfDebug(`Could not parse partial from expression '${name}'\\n${e.message}`);\n  }\n\n  return parsed || { t: [] };\n}\n"",""import { addToArray, removeFromArray } from 'utils/array';\nimport { unescapeKey } from 'shared/keypaths';\nimport { capture } from 'src/global/capture';\nimport { handleChange } from 'src/shared/methodCallers';\nimport noop from 'utils/noop';\n\nexport default class KeyModel {\n  constructor(value, context, instance) {\n    this.value = this.key = value;\n    this.context = context;\n    this.isReadonly = this.isKey = true;\n    this.deps = [];\n    this.links = [];\n    this.children = [];\n    this.instance = instance;\n  }\n\n  applyValue(value) {\n    if (value !== this.value) {\n      this.value = this.key = value;\n      this.deps.forEach(handleChange);\n      this.links.forEach(handleChange);\n      this.children.forEach(c => {\n        c.applyValue(c.context.getKeypath(c.instance));\n      });\n    }\n  }\n\n  destroyed() {\n    if (this.upstream) this.upstream.unregisterChild(this);\n  }\n\n  get(shouldCapture) {\n    if (shouldCapture) capture(this);\n    return unescapeKey(this.value);\n  }\n\n  getKeypath() {\n    return unescapeKey(this.value);\n  }\n\n  has() {\n    return false;\n  }\n\n  rebind(next, previous) {\n    let i = this.deps.length;\n    while (i--) this.deps[i].rebind(next, previous, false);\n\n    i = this.links.length;\n    while (i--) this.links[i].relinking(next, false);\n  }\n\n  register(dependant) {\n    this.deps.push(dependant);\n  }\n\n  registerChild(child) {\n    addToArray(this.children, child);\n    child.upstream = this;\n  }\n\n  registerLink(link) {\n    addToArray(this.links, link);\n  }\n\n  unregister(dependant) {\n    removeFromArray(this.deps, dependant);\n  }\n\n  unregisterChild(child) {\n    removeFromArray(this.children, child);\n  }\n\n  unregisterLink(link) {\n    removeFromArray(this.links, link);\n  }\n}\n\nKeyModel.prototype.reference = noop;\nKeyModel.prototype.unreference = noop;\n"",""import { createDocumentFragment } from 'utils/dom';\nimport { isArray, isObject, isObjectType } from 'utils/is';\nimport { findMap, buildNewIndices } from 'utils/array';\nimport { toEscapedString, toString, shuffled } from 'shared/methodCallers';\nimport Fragment, { getKeypath } from './Fragment';\nimport { ELEMENT } from 'config/types';\nimport { getContext } from 'shared/getRactiveContext';\nimport { keys } from 'utils/object';\nimport KeyModel from 'src/model/specials/KeyModel';\nimport { splitKeypath } from '../shared/keypaths';\nimport resolve from './resolvers/resolve';\n\nconst keypathString = /^\""(\\\\\""|[^\""])+\""$/;\n\nexport default class RepeatedFragment {\n  constructor(options) {\n    this.parent = options.owner.up;\n\n    // bit of a hack, so reference resolution works without another\n    // layer of indirection\n    this.up = this;\n    this.owner = options.owner;\n    this.ractive = this.parent.ractive;\n    this.delegate =\n      this.ractive.delegate !== false && (this.parent.delegate || findDelegate(this.parent));\n    // delegation disabled by directive\n    if (this.delegate && this.delegate.delegate === false) this.delegate = false;\n    // let the element know it's a delegate handler\n    if (this.delegate) this.delegate.delegate = this.delegate;\n\n    // encapsulated styles should be inherited until they get applied by an element\n    this.cssIds = 'cssIds' in options ? options.cssIds : this.parent ? this.parent.cssIds : null;\n\n    this.context = null;\n    this.rendered = false;\n    this.iterations = [];\n\n    this.template = options.template;\n\n    this.indexRef = options.indexRef;\n    this.keyRef = options.keyRef;\n\n    this.pendingNewIndices = null;\n    this.previousIterations = null;\n\n    // track array versus object so updates of type rest\n    this.isArray = false;\n  }\n\n  bind(context) {\n    this.context = context;\n    this.bound = true;\n    const value = context.get();\n\n    const aliases = (this.aliases = this.owner.template.z && this.owner.template.z.slice());\n\n    const shuffler = aliases && aliases.find(a => a.n === 'shuffle');\n    if (shuffler && shuffler.x && shuffler.x.x) {\n      if (shuffler.x.x.s === 'true') this.shuffler = true;\n      else if (keypathString.test(shuffler.x.x.s))\n        this.shuffler = splitKeypath(shuffler.x.x.s.slice(1, -1));\n    }\n\n    if (this.shuffler) this.values = shuffleValues(this, this.shuffler);\n\n    if (this.source) this.source.model.unbind(this.source);\n    const source = context.isComputed && aliases && aliases.find(a => a.n === 'source');\n    if (source && source.x && source.x.r) {\n      const model = resolve(this, source.x);\n      this.source = {\n        handleChange() {},\n        rebind(next) {\n          this.model.unregister(this);\n          this.model = next;\n          next.register(this);\n        }\n      };\n      this.source.model = model;\n      model.register(this.source);\n    }\n\n    // {{#each array}}...\n    if ((this.isArray = isArray(value))) {\n      // we can't use map, because of sparse arrays\n      this.iterations = [];\n      const max = (this.length = value.length);\n      for (let i = 0; i < max; i += 1) {\n        this.iterations[i] = this.createIteration(i, i);\n      }\n    } else if (isObject(value)) {\n      // {{#each object}}...\n      this.isArray = false;\n\n      // TODO this is a dreadful hack. There must be a neater way\n      if (this.indexRef) {\n        const refs = this.indexRef.split(',');\n        this.keyRef = refs[0];\n        this.indexRef = refs[1];\n      }\n\n      const ks = keys(value);\n      this.length = ks.length;\n\n      this.iterations = ks.map((key, index) => {\n        return this.createIteration(key, index);\n      });\n    }\n\n    return this;\n  }\n\n  bubble(index) {\n    if (!this.bubbled) this.bubbled = [];\n    this.bubbled.push(index);\n\n    if (!this.rebounding) this.owner.bubble();\n  }\n\n  createIteration(key, index) {\n    const fragment = new Fragment({\n      owner: this,\n      template: this.template\n    });\n\n    fragment.isIteration = true;\n    fragment.delegate = this.delegate;\n\n    if (this.aliases) fragment.aliases = {};\n    swizzleFragment(this, fragment, key, index);\n\n    return fragment.bind(fragment.context);\n  }\n\n  destroyed() {\n    const len = this.iterations.length;\n    for (let i = 0; i < len; i++) this.iterations[i].destroyed();\n    if (this.pathModel) this.pathModel.destroyed();\n    if (this.rootModel) this.rootModel.destroyed();\n  }\n\n  detach() {\n    const docFrag = createDocumentFragment();\n    this.iterations.forEach(fragment => docFrag.appendChild(fragment.detach()));\n    return docFrag;\n  }\n\n  find(selector, options) {\n    return findMap(this.iterations, i => i.find(selector, options));\n  }\n\n  findAll(selector, options) {\n    return this.iterations.forEach(i => i.findAll(selector, options));\n  }\n\n  findAllComponents(name, options) {\n    return this.iterations.forEach(i => i.findAllComponents(name, options));\n  }\n\n  findComponent(name, options) {\n    return findMap(this.iterations, i => i.findComponent(name, options));\n  }\n\n  findContext() {\n    return this.context;\n  }\n\n  findNextNode(iteration) {\n    if (iteration.index < this.iterations.length - 1) {\n      for (let i = iteration.index + 1; i < this.iterations.length; i++) {\n        const node = this.iterations[i].firstNode(true);\n        if (node) return node;\n      }\n    }\n\n    return this.owner.findNextNode();\n  }\n\n  firstNode(skipParent) {\n    return this.iterations[0] ? this.iterations[0].firstNode(skipParent) : null;\n  }\n\n  getLast() {\n    return this.lastModel || (this.lastModel = new KeyModel(this.length - 1));\n  }\n\n  rebind(next) {\n    this.context = next;\n    if (this.source) return;\n    this.iterations.forEach(fragment => {\n      swizzleFragment(this, fragment, fragment.key, fragment.index);\n    });\n  }\n\n  rebound(update) {\n    this.context = this.owner.model;\n    this.iterations.forEach((f, i) => {\n      f.context = contextFor(this, f, i);\n      f.rebound(update);\n    });\n  }\n\n  render(target, occupants) {\n    const xs = this.iterations;\n    if (xs) {\n      const len = xs.length;\n      for (let i = 0; i < len; i++) {\n        xs[i].render(target, occupants);\n      }\n    }\n\n    this.rendered = true;\n  }\n\n  shuffle(newIndices, merge) {\n    if (!this.pendingNewIndices) this.previousIterations = this.iterations.slice();\n\n    if (!this.pendingNewIndices) this.pendingNewIndices = [];\n\n    this.pendingNewIndices.push(newIndices);\n\n    const iterations = [];\n\n    newIndices.forEach((newIndex, oldIndex) => {\n      if (newIndex === -1) return;\n\n      const fragment = this.iterations[oldIndex];\n      iterations[newIndex] = fragment;\n\n      if (newIndex !== oldIndex && fragment) {\n        fragment.dirty = true;\n        if (merge) fragment.shouldRebind = 1;\n      }\n    });\n\n    this.iterations = iterations;\n\n    // if merging, we're in the midst of an update already\n    if (!merge) this.bubble();\n  }\n\n  shuffled() {\n    this.iterations.forEach(shuffled);\n  }\n\n  toString(escape) {\n    return this.iterations ? this.iterations.map(escape ? toEscapedString : toString).join('') : '';\n  }\n\n  unbind(view) {\n    this.bound = false;\n    if (this.source) this.source.model.unregister(this.source);\n    const iterations = this.pendingNewIndices ? this.previousIterations : this.iterations;\n    const len = iterations.length;\n    for (let i = 0; i < len; i++) iterations[i].unbind(view);\n    return this;\n  }\n\n  unrender(shouldDestroy) {\n    let len = this.iterations.length;\n    for (let i = 0; i < len; i++) this.iterations[i].unrender(shouldDestroy);\n    if (this.pendingNewIndices && this.previousIterations) {\n      len = this.previousIterations.length;\n      for (let i = 0; i < len; i++) this.previousIterations[i].unrender(shouldDestroy);\n    }\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.pendingNewIndices) {\n      this.bubbled.length = 0;\n      this.updatePostShuffle();\n      return;\n    }\n\n    if (this.updating) return;\n    this.updating = true;\n\n    if (this.shuffler) {\n      const values = shuffleValues(this, this.shuffler);\n      this.shuffle(buildNewIndices(this.values, values), true);\n      this.updatePostShuffle();\n    } else {\n      let len = this.iterations.length;\n      for (let i = 0; i < len; i++) {\n        const f = this.iterations[i];\n        f && f.idxModel && f.idxModel.applyValue(i);\n      }\n\n      const value = this.context.get();\n      const wasArray = this.isArray;\n\n      let toRemove;\n      let oldKeys;\n      let reset = true;\n      let i;\n\n      if ((this.isArray = isArray(value))) {\n        // if there's a source to map back to, make sure everything stays bound correctly\n        if (this.source) {\n          this.rebounding = 1;\n          const source = this.source.model.get();\n          this.iterations.forEach((f, c) => {\n            if (c < value.length && f.lastValue !== value[c] && ~(i = source.indexOf(value[c]))) {\n              swizzleFragment(this, f, c, c);\n              f.rebound(true);\n            }\n          });\n          this.rebounding = 0;\n        }\n\n        if (wasArray) {\n          reset = false;\n          if (this.iterations.length > value.length) {\n            toRemove = this.iterations.splice(value.length);\n          }\n        }\n      } else if (isObject(value) && !wasArray) {\n        reset = false;\n        toRemove = [];\n        oldKeys = {};\n        i = this.iterations.length;\n\n        while (i--) {\n          const fragment = this.iterations[i];\n          if (fragment.key in value) {\n            oldKeys[fragment.key] = true;\n          } else {\n            this.iterations.splice(i, 1);\n            toRemove.push(fragment);\n          }\n        }\n      }\n\n      const newLength = isArray(value) ? value.length : isObject(value) ? keys(value).length : 0;\n      this.length = newLength;\n      this.updateLast();\n\n      if (reset) {\n        toRemove = this.iterations;\n        this.iterations = [];\n      }\n\n      if (toRemove) {\n        len = toRemove.length;\n        for (let i = 0; i < len; i++) toRemove[i].unbind().unrender(true);\n      }\n\n      // update the remaining ones\n      if (!reset && this.isArray && this.bubbled && this.bubbled.length) {\n        const bubbled = this.bubbled;\n        this.bubbled = [];\n        len = bubbled.length;\n        for (let i = 0; i < len; i++)\n          this.iterations[bubbled[i]] && this.iterations[bubbled[i]].update();\n      } else {\n        len = this.iterations.length;\n        for (let i = 0; i < len; i++) this.iterations[i].update();\n      }\n\n      // add new iterations\n      let docFrag;\n      let fragment;\n\n      if (newLength > this.iterations.length) {\n        docFrag = this.rendered ? createDocumentFragment() : null;\n        i = this.iterations.length;\n\n        if (isArray(value)) {\n          while (i < value.length) {\n            fragment = this.createIteration(i, i);\n\n            this.iterations.push(fragment);\n            if (this.rendered) fragment.render(docFrag);\n\n            i += 1;\n          }\n        } else if (isObject(value)) {\n          // TODO this is a dreadful hack. There must be a neater way\n          if (this.indexRef && !this.keyRef) {\n            const refs = this.indexRef.split(',');\n            this.keyRef = refs[0];\n            this.indexRef = refs[1];\n          }\n\n          keys(value).forEach(key => {\n            if (!oldKeys || !(key in oldKeys)) {\n              fragment = this.createIteration(key, i);\n\n              this.iterations.push(fragment);\n              if (this.rendered) fragment.render(docFrag);\n\n              i += 1;\n            }\n          });\n        }\n\n        if (this.rendered) {\n          const parentNode = this.parent.findParentNode();\n          const anchor = this.parent.findNextNode(this.owner);\n\n          parentNode.insertBefore(docFrag, anchor);\n        }\n      }\n    }\n\n    this.updating = false;\n  }\n\n  updateLast() {\n    if (this.lastModel) this.lastModel.applyValue(this.length - 1);\n  }\n\n  updatePostShuffle() {\n    const newIndices = this.pendingNewIndices[0];\n    const parentNode = this.rendered ? this.parent.findParentNode() : null;\n    const nextNode = parentNode && this.owner.findNextNode();\n    const docFrag = parentNode ? createDocumentFragment() : null;\n\n    // map first shuffle through\n    this.pendingNewIndices.slice(1).forEach(indices => {\n      newIndices.forEach((newIndex, oldIndex) => {\n        newIndices[oldIndex] = indices[newIndex];\n      });\n    });\n\n    const len = (this.length = this.context.get().length);\n    const prev = this.previousIterations;\n    const iters = this.iterations;\n    const value = this.context.get();\n    const stash = {};\n    let idx, dest, pos, next, anchor, rebound;\n\n    const map = new Array(newIndices.length);\n    newIndices.forEach((e, i) => (map[e] = i));\n\n    this.updateLast();\n\n    idx = pos = 0;\n    while (idx < len) {\n      dest = newIndices[pos];\n      next = null;\n      rebound = false;\n\n      if (dest === -1) {\n        // drop it like it's hot\n        prev[pos].unbind().unrender(true);\n        prev[pos++] = 0;\n      } else if (dest > idx) {\n        // need to stash or pull one up\n        next = newIndices[pos + 1]; // TODO: maybe a shouldMove function that tracks multiple entries?\n        if (next <= dest) {\n          stash[dest] = prev[pos];\n          prev[pos++] = null;\n        } else {\n          next = stash[idx] || prev[map[idx]];\n          prev[map[idx]] = null;\n          anchor = prev[nextRendered(pos, newIndices, prev)];\n          anchor = (anchor && parentNode && anchor.firstNode()) || nextNode;\n\n          if (next) {\n            rebound = this.source && next.lastValue !== value[idx];\n            swizzleFragment(this, next, idx, idx);\n            if (parentNode) parentNode.insertBefore(next.detach(), anchor);\n          } else {\n            next = iters[idx] = this.createIteration(idx, idx);\n            if (parentNode) {\n              next.render(docFrag);\n              parentNode.insertBefore(docFrag, anchor);\n            }\n          }\n\n          idx++;\n        }\n      } else {\n        // all is well\n        next = iters[idx];\n        anchor = prev[nextRendered(pos, newIndices, prev)];\n        anchor = (anchor && parentNode && anchor.firstNode()) || nextNode;\n        if (!next) {\n          next = iters[idx] = this.createIteration(idx, idx);\n          if (parentNode) {\n            next.render(docFrag);\n            parentNode.insertBefore(docFrag, anchor);\n          }\n        } else if (pos !== idx || stash[idx]) {\n          rebound = this.source && next.lastValue !== value[idx];\n          swizzleFragment(this, next, idx, idx);\n          if (stash[idx] && parentNode) parentNode.insertBefore(next.detach(), anchor);\n        }\n\n        idx++;\n        prev[pos++] = null;\n      }\n\n      if (next && isObjectType(next)) {\n        if (next.shouldRebind || rebound) {\n          next.rebound(rebound);\n          next.shouldRebind = 0;\n        }\n        next.update();\n        next.shuffled();\n      }\n    }\n\n    // clean up any stragglers\n    const plen = prev.length;\n    for (let i = 0; i < plen; i++) prev[i] && prev[i].unbind().unrender(true);\n\n    if (this.shuffler) this.values = shuffleValues(this, this.shuffler);\n\n    this.pendingNewIndices = null;\n    this.previousIterations = null;\n  }\n}\n\nRepeatedFragment.prototype.getContext = getContext;\nRepeatedFragment.prototype.getKeypath = getKeypath;\n\n// find the topmost delegate\nfunction findDelegate(start) {\n  let frag = start;\n  let delegate, el;\n\n  out: while (frag) {\n    // find next element\n    el = 0;\n    while (!el && frag) {\n      if (frag.owner.type === ELEMENT) el = frag.owner;\n      if (frag.owner.ractive && frag.owner.ractive.delegate === false) break out;\n      frag = frag.parent || frag.componentParent;\n    }\n\n    if (el.delegate === false) break out;\n    delegate = el.delegate || el;\n\n    // find next repeated fragment\n    while (frag) {\n      if (frag.iterations) break;\n      if (frag.owner.ractive && frag.owner.ractive.delegate === false) break out;\n      frag = frag.parent || frag.componentParent;\n    }\n  }\n\n  return delegate;\n}\n\nfunction nextRendered(start, newIndices, frags) {\n  const len = newIndices.length;\n  for (let i = start; i < len; i++) {\n    if (~newIndices[i] && frags[i] && frags[i].rendered) return i;\n  }\n}\n\nfunction swizzleFragment(section, fragment, key, idx) {\n  const model = section.context ? contextFor(section, fragment, key) : undefined;\n\n  fragment.key = key;\n  fragment.index = idx;\n  fragment.context = model;\n  if (section.source) fragment.lastValue = model && model.get();\n\n  if (fragment.idxModel) fragment.idxModel.applyValue(idx);\n  if (fragment.keyModel) fragment.keyModel.applyValue(key);\n  if (fragment.pathModel) {\n    fragment.pathModel.context = model;\n    fragment.pathModel.applyValue(model.getKeypath());\n  }\n  if (fragment.rootModel) {\n    fragment.rootModel.context = model;\n    fragment.rootModel.applyValue(model.getKeypath(fragment.ractive.root));\n  }\n\n  // handle any aliases\n  const aliases = fragment.aliases;\n  section.aliases &&\n    section.aliases.forEach(a => {\n      if (a.x.r === '.') aliases[a.n] = model;\n      else if (a.x.r === '@index') aliases[a.n] = fragment.getIndex();\n      else if (a.x.r === '@key') aliases[a.n] = fragment.getKey();\n      else if (a.x.r === '@keypath') aliases[a.n] = fragment.getKeypath();\n      else if (a.x.r === '@rootpath') aliases[a.n] = fragment.getKeypath(true);\n    });\n}\n\nfunction shuffleValues(section, shuffler) {\n  if (shuffler === true) {\n    return section.context.get().slice();\n  } else {\n    return section.context.get().map(v => shuffler.reduce((a, c) => a && a[c], v));\n  }\n}\n\nfunction contextFor(section, fragment, key) {\n  if (section.source) {\n    let idx;\n    const source = section.source.model.get();\n    if (source.indexOf && ~(idx = source.indexOf(section.context.joinKey(key).get())))\n      return section.source.model.joinKey(idx);\n  }\n\n  return section.context.joinKey(key);\n}\n"",""import {\n  SECTION_EACH,\n  SECTION_IF,\n  SECTION_IF_WITH,\n  SECTION_UNLESS,\n  SECTION_WITH\n} from 'config/types';\nimport { createDocumentFragment } from 'utils/dom';\nimport { isArray, isObject, isObjectLike } from 'utils/is';\nimport { keep } from 'shared/set';\nimport runloop from 'src/global/runloop';\nimport Fragment from '../Fragment';\nimport RepeatedFragment from '../RepeatedFragment';\nimport { MustacheContainer } from './shared/Mustache';\nimport { keys } from 'utils/object';\nimport Context from 'src/shared/Context';\n\nfunction isEmpty(value) {\n  return (\n    !value ||\n    (isArray(value) && value.length === 0) ||\n    (isObject(value) && keys(value).length === 0)\n  );\n}\n\nfunction getType(value, hasIndexRef) {\n  if (hasIndexRef || isArray(value)) return SECTION_EACH;\n  if (isObjectLike(value)) return SECTION_IF_WITH;\n  if (value === undefined) return null;\n  return SECTION_IF;\n}\n\nexport default class Section extends MustacheContainer {\n  constructor(options) {\n    super(options);\n\n    this.sectionType = options.template.n || null;\n    this.templateSectionType = this.sectionType;\n    this.subordinate = options.template.l === 1;\n    this.fragment = null;\n  }\n\n  bind() {\n    super.bind();\n\n    if (this.subordinate) {\n      this.sibling = this.up.items[this.up.items.indexOf(this) - 1];\n      this.sibling.nextSibling = this;\n    }\n\n    // if we managed to bind, we need to create children\n    if (this.model) {\n      this.dirty = true;\n      this.update();\n    } else if (\n      this.sectionType &&\n      this.sectionType === SECTION_UNLESS &&\n      (!this.sibling || !this.sibling.isTruthy())\n    ) {\n      this.fragment = new Fragment({\n        owner: this,\n        template: this.template.f\n      }).bind();\n    }\n  }\n\n  bubble() {\n    if (!this.dirty && this.yield) {\n      this.dirty = true;\n      this.containerFragment.bubble();\n    } else super.bubble();\n  }\n\n  detach() {\n    const frag = this.fragment || this.detached;\n    return frag ? frag.detach() : super.detach();\n  }\n\n  isTruthy() {\n    if (this.subordinate && this.sibling.isTruthy()) return true;\n    const value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n    return !!value && (this.templateSectionType === SECTION_IF_WITH || !isEmpty(value));\n  }\n\n  rebind(next, previous, safe) {\n    if (super.rebind(next, previous, safe)) {\n      if (this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS) {\n        this.fragment.rebind(next);\n      }\n    }\n  }\n\n  rebound(update) {\n    if (this.model) {\n      if (this.model.rebound) this.model.rebound(update);\n      else {\n        super.unbind();\n        super.bind();\n        if (\n          this.sectionType === SECTION_WITH ||\n          this.sectionType === SECTION_IF_WITH ||\n          this.sectionType === SECTION_EACH\n        ) {\n          if (this.fragment) this.fragment.rebind(this.model);\n        }\n\n        if (update) this.bubble();\n      }\n    }\n    if (this.fragment) this.fragment.rebound(update);\n  }\n\n  render(target, occupants) {\n    this.rendered = true;\n    if (this.fragment) this.fragment.render(target, occupants);\n  }\n\n  shuffle(newIndices) {\n    if (this.fragment && this.sectionType === SECTION_EACH) {\n      this.fragment.shuffle(newIndices);\n    }\n  }\n\n  unbind(view) {\n    super.unbind(view);\n    if (this.fragment) this.fragment.unbind(view);\n  }\n\n  unrender(shouldDestroy) {\n    if (this.rendered && this.fragment) this.fragment.unrender(shouldDestroy);\n    this.rendered = false;\n  }\n\n  update() {\n    if (!this.dirty) return;\n\n    if (this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS) {\n      this.fragment.context = this.model;\n    }\n\n    if (!this.model && this.sectionType !== SECTION_UNLESS) return;\n\n    this.dirty = false;\n\n    const value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n    const siblingFalsey = !this.subordinate || !this.sibling.isTruthy();\n    const lastType = this.sectionType;\n\n    if (this.yield && this.yield !== value) {\n      this.up = this.containerFragment;\n      this.container = null;\n      this.yield = null;\n      if (this.rendered) this.fragment.unbind().unrender(true);\n      this.fragment = null;\n    } else if (this.rendered && !this.yield && value instanceof Context) {\n      if (this.rendered) this.fragment.unbind().unrender(true);\n      this.fragment = null;\n    }\n\n    // watch for switching section types\n    if (this.sectionType === null || this.templateSectionType === null)\n      this.sectionType = getType(value, this.template.i);\n    if (lastType && lastType !== this.sectionType && this.fragment) {\n      if (this.rendered) {\n        this.fragment.unbind().unrender(true);\n      }\n\n      this.fragment = null;\n    }\n\n    let newFragment;\n\n    const fragmentShouldExist =\n      this.sectionType === SECTION_EACH || // each always gets a fragment, which may have no iterations\n      this.sectionType === SECTION_WITH || // with (partial context) always gets a fragment\n      (siblingFalsey && (this.sectionType === SECTION_UNLESS ? !this.isTruthy() : this.isTruthy())); // if, unless, and if-with depend on siblings and the condition\n\n    if (fragmentShouldExist) {\n      if (!this.fragment) this.fragment = this.detached;\n\n      if (this.fragment) {\n        // check for detached fragment\n        if (this.detached) {\n          attach(this, this.fragment);\n          this.detached = false;\n          this.rendered = true;\n        }\n\n        if (!this.fragment.bound) this.fragment.bind(this.model);\n        this.fragment.update();\n      } else {\n        if (this.sectionType === SECTION_EACH) {\n          newFragment = new RepeatedFragment({\n            owner: this,\n            template: this.template.f,\n            indexRef: this.template.i\n          }).bind(this.model);\n        } else {\n          // only with and if-with provide context - if and unless do not\n          let context =\n            this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS\n              ? this.model\n              : null;\n\n          if (value instanceof Context) {\n            this.yield = value;\n            this.containerFragment = this.up;\n            this.up = value.fragment;\n            this.container = value.ractive;\n            context = undefined;\n          }\n\n          newFragment = new Fragment({\n            owner: this,\n            template: this.template.f\n          }).bind(context);\n        }\n      }\n    } else {\n      if (this.fragment && this.rendered) {\n        if (keep !== true) {\n          this.fragment.unbind().unrender(true);\n        } else {\n          this.unrender(false);\n          this.detached = this.fragment;\n          runloop.promise().then(() => {\n            if (this.detached) this.detach();\n          });\n        }\n      } else if (this.fragment) {\n        this.fragment.unbind();\n      }\n\n      this.fragment = null;\n    }\n\n    if (newFragment) {\n      if (this.rendered) {\n        attach(this, newFragment);\n      }\n\n      this.fragment = newFragment;\n    }\n\n    if (this.nextSibling) {\n      this.nextSibling.dirty = true;\n      this.nextSibling.update();\n    }\n  }\n}\n\nfunction attach(section, fragment) {\n  const anchor = (section.containerFragment || section.up).findNextNode(section);\n\n  if (anchor) {\n    const docFrag = createDocumentFragment();\n    fragment.render(docFrag);\n\n    anchor.parentNode.insertBefore(docFrag, anchor);\n  } else {\n    fragment.render(section.up.findParentNode());\n  }\n}\n"",""import { toArray } from 'utils/array';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Element from '../../Element';\nimport { isArray, isFunction } from 'utils/is';\n\nexport default class Select extends Element {\n  constructor(options) {\n    super(options);\n    this.options = [];\n  }\n\n  foundNode(node) {\n    if (this.binding) {\n      const selectedOptions = getSelectedOptions(node);\n\n      if (selectedOptions.length > 0) {\n        this.selectedOptions = selectedOptions;\n      }\n    }\n  }\n\n  render(target, occupants) {\n    super.render(target, occupants);\n    this.sync();\n\n    const node = this.node;\n\n    let i = node.options.length;\n    while (i--) {\n      node.options[i].defaultSelected = node.options[i].selected;\n    }\n\n    this.rendered = true;\n  }\n\n  sync() {\n    const selectNode = this.node;\n\n    if (!selectNode) return;\n\n    const options = toArray(selectNode.options);\n\n    if (this.selectedOptions) {\n      options.forEach(o => {\n        if (this.selectedOptions.indexOf(o) >= 0) o.selected = true;\n        else o.selected = false;\n      });\n      this.binding.setFromNode(selectNode);\n      delete this.selectedOptions;\n      return;\n    }\n\n    const selectValue = this.getAttribute('value');\n    const isMultiple = this.getAttribute('multiple');\n    const array = isMultiple && isArray(selectValue);\n\n    // If the <select> has a specified value, that should override\n    // these options\n    if (selectValue !== undefined) {\n      let optionWasSelected;\n\n      options.forEach(o => {\n        const optionValue = o._ractive ? o._ractive.value : o.value;\n        const shouldSelect = isMultiple\n          ? array && this.valueContains(selectValue, optionValue)\n          : this.compare(selectValue, optionValue);\n\n        if (shouldSelect) {\n          optionWasSelected = true;\n        }\n\n        o.selected = shouldSelect;\n      });\n\n      if (!optionWasSelected && !isMultiple) {\n        if (this.binding) {\n          this.binding.forceUpdate();\n        }\n      }\n    } else if (this.binding && this.binding.forceUpdate) {\n      // Otherwise the value should be initialised according to which\n      // <option> element is selected, if twoway binding is in effect\n      this.binding.forceUpdate();\n    }\n  }\n  valueContains(selectValue, optionValue) {\n    let i = selectValue.length;\n    while (i--) {\n      if (this.compare(optionValue, selectValue[i])) return true;\n    }\n  }\n  compare(optionValue, selectValue) {\n    const comparator = this.getAttribute('value-comparator');\n    if (comparator) {\n      if (isFunction(comparator)) {\n        return comparator(selectValue, optionValue);\n      }\n      if (selectValue && optionValue) {\n        return selectValue[comparator] == optionValue[comparator];\n      }\n    }\n    return selectValue == optionValue;\n  }\n  update() {\n    const dirty = this.dirty;\n    super.update();\n    if (dirty) {\n      this.sync();\n    }\n  }\n}\n"",""import { ATTRIBUTE } from 'config/types';\nimport runloop from 'src/global/runloop';\nimport Input from './Input';\nimport { isBindable } from '../binding/selectBinding';\nimport createItem from '../../createItem';\nimport Fragment from '../../../Fragment';\n\nexport default class Textarea extends Input {\n  constructor(options) {\n    const template = options.template;\n\n    options.deferContent = true;\n\n    super(options);\n\n    // check for single interpolator binding\n    if (!this.attributeByName.value) {\n      if (template.f && isBindable({ template })) {\n        (this.attributes || (this.attributes = [])).push(\n          createItem({\n            owner: this,\n            template: { t: ATTRIBUTE, f: template.f, n: 'value' },\n            up: this.up\n          })\n        );\n      } else {\n        this.fragment = new Fragment({\n          owner: this,\n          cssIds: null,\n          template: template.f\n        });\n      }\n    }\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n\n      if (this.rendered && !this.binding && this.fragment) {\n        runloop.scheduleTask(() => {\n          this.dirty = false;\n          this.node.value = this.fragment.toString();\n        });\n      }\n\n      this.up.bubble(); // default behaviour\n    }\n  }\n}\n"",""import { TEXT } from 'config/types';\nimport { escapeHtml } from 'utils/html';\nimport { detachNode } from 'utils/dom';\nimport noop from 'utils/noop';\nimport Item from './shared/Item';\nimport progressiveText from './shared/progressiveText';\nimport { inAttributes } from './element/ConditionalAttribute';\n\nexport default class Text extends Item {\n  constructor(options) {\n    super(options);\n    this.type = TEXT;\n  }\n\n  detach() {\n    return detachNode(this.node);\n  }\n\n  firstNode() {\n    return this.node;\n  }\n\n  render(target, occupants) {\n    if (inAttributes()) return;\n    this.rendered = true;\n\n    progressiveText(this, target, occupants, this.template);\n  }\n\n  toString(escape) {\n    return escape ? escapeHtml(this.template) : this.template;\n  }\n\n  unrender(shouldDestroy) {\n    if (this.rendered && shouldDestroy) this.detach();\n    this.rendered = false;\n  }\n\n  valueOf() {\n    return this.template;\n  }\n}\n\nconst proto = Text.prototype;\nproto.bind = proto.unbind = proto.update = noop;\n"",""import { win, doc, vendors } from './environment';\n\nexport let visible;\nlet hidden = 'hidden';\n\nif (doc) {\n  let prefix;\n\n  /* istanbul ignore next */\n  if (hidden in doc) {\n    prefix = '';\n  } else {\n    let i = vendors.length;\n    while (i--) {\n      const vendor = vendors[i];\n      hidden = vendor + 'Hidden';\n\n      if (hidden in doc) {\n        prefix = vendor;\n        break;\n      }\n    }\n  }\n\n  /* istanbul ignore else */\n  if (prefix !== undefined) {\n    doc.addEventListener(prefix + 'visibilitychange', onChange);\n    onChange();\n  } else {\n    // gah, we're in an old browser\n    if ('onfocusout' in doc) {\n      doc.addEventListener('focusout', onHide);\n      doc.addEventListener('focusin', onShow);\n    } else {\n      win.addEventListener('pagehide', onHide);\n      win.addEventListener('blur', onHide);\n\n      win.addEventListener('pageshow', onShow);\n      win.addEventListener('focus', onShow);\n    }\n\n    visible = true; // until proven otherwise. Not ideal but hey\n  }\n}\n\nfunction onChange() {\n  visible = !doc[hidden];\n}\n\n/* istanbul ignore next */\nfunction onHide() {\n  visible = false;\n}\n\n/* istanbul ignore next */\nfunction onShow() {\n  visible = true;\n}\n"",""import { isClient, vendors } from 'config/environment';\nimport { createElement } from 'utils/dom';\nimport hyphenateCamel from 'utils/hyphenateCamel';\n\nlet prefix;\n\n/* istanbul ignore next */\nif (!isClient) {\n  prefix = null;\n} else {\n  const prefixCache = {};\n  const testStyle = createElement('div').style;\n\n  // technically this also normalizes on hyphenated styles as well\n  prefix = function(prop) {\n    if (!prefixCache[prop]) {\n      const name = hyphenateCamel(prop);\n\n      if (testStyle[prop] !== undefined) {\n        prefixCache[prop] = name;\n      } else {\n        /* istanbul ignore next */\n        // test vendors...\n        let i = vendors.length;\n        while (i--) {\n          const vendor = `-${vendors[i]}-${name}`;\n          if (testStyle[vendor] !== undefined) {\n            prefixCache[prop] = vendor;\n            break;\n          }\n        }\n      }\n    }\n\n    return prefixCache[prop];\n  };\n}\n\nexport default prefix;\n"",""import { missingPlugin } from 'config/errors';\nimport { isClient } from 'config/environment';\nimport { warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { createElement } from 'utils/dom';\nimport interpolate from 'shared/interpolate';\nimport Ticker from 'shared/Ticker';\nimport hyphenate from './hyphenate';\nimport { isFunction, isString } from 'utils/is';\n\nlet createTransitions;\n\nif (!isClient) {\n  createTransitions = null;\n} else {\n  const testStyle = createElement('div').style;\n  const linear = x => x;\n\n  const canUseCssTransitions = {};\n  const cannotUseCssTransitions = {};\n\n  // determine some facts about our environment\n  let TRANSITION;\n  let TRANSITIONEND;\n  let CSS_TRANSITIONS_ENABLED;\n  let TRANSITION_DURATION;\n  let TRANSITION_PROPERTY;\n  let TRANSITION_TIMING_FUNCTION;\n\n  if (testStyle.transition !== undefined) {\n    TRANSITION = 'transition';\n    TRANSITIONEND = 'transitionend';\n    CSS_TRANSITIONS_ENABLED = true;\n  } else if (testStyle.webkitTransition !== undefined) {\n    TRANSITION = 'webkitTransition';\n    TRANSITIONEND = 'webkitTransitionEnd';\n    CSS_TRANSITIONS_ENABLED = true;\n  } else {\n    CSS_TRANSITIONS_ENABLED = false;\n  }\n\n  if (TRANSITION) {\n    TRANSITION_DURATION = TRANSITION + 'Duration';\n    TRANSITION_PROPERTY = TRANSITION + 'Property';\n    TRANSITION_TIMING_FUNCTION = TRANSITION + 'TimingFunction';\n  }\n\n  createTransitions = function(t, to, options, changedProperties, resolve) {\n    // Wait a beat (otherwise the target styles will be applied immediately)\n    // TODO use a fastdom-style mechanism?\n    setTimeout(() => {\n      let jsTransitionsComplete;\n      let cssTransitionsComplete;\n      let cssTimeout; // eslint-disable-line prefer-const\n\n      function transitionDone() {\n        clearTimeout(cssTimeout);\n      }\n\n      function checkComplete() {\n        if (jsTransitionsComplete && cssTransitionsComplete) {\n          t.unregisterCompleteHandler(transitionDone);\n          // will changes to events and fire have an unexpected consequence here?\n          t.ractive.fire(t.name + ':end', t.node, t.isIntro);\n          resolve();\n        }\n      }\n\n      // this is used to keep track of which elements can use CSS to animate\n      // which properties\n      const hashPrefix = (t.node.namespaceURI || '') + t.node.tagName;\n\n      // need to reset transition properties\n      const style = t.node.style;\n      const previous = {\n        property: style[TRANSITION_PROPERTY],\n        timing: style[TRANSITION_TIMING_FUNCTION],\n        duration: style[TRANSITION_DURATION]\n      };\n\n      function transitionEndHandler(event) {\n        const index = changedProperties.indexOf(event.propertyName);\n\n        if (index !== -1) {\n          changedProperties.splice(index, 1);\n        }\n\n        if (changedProperties.length) {\n          // still transitioning...\n          return;\n        }\n\n        clearTimeout(cssTimeout);\n        cssTransitionsDone();\n      }\n\n      function cssTransitionsDone() {\n        style[TRANSITION_PROPERTY] = previous.property;\n        style[TRANSITION_TIMING_FUNCTION] = previous.duration;\n        style[TRANSITION_DURATION] = previous.timing;\n\n        t.node.removeEventListener(TRANSITIONEND, transitionEndHandler, false);\n\n        cssTransitionsComplete = true;\n        checkComplete();\n      }\n\n      t.node.addEventListener(TRANSITIONEND, transitionEndHandler, false);\n\n      // safety net in case transitionend never fires\n      cssTimeout = setTimeout(() => {\n        changedProperties = [];\n        cssTransitionsDone();\n      }, options.duration + (options.delay || 0) + 50);\n      t.registerCompleteHandler(transitionDone);\n\n      style[TRANSITION_PROPERTY] = changedProperties.join(',');\n      const easingName = hyphenate(options.easing || 'linear');\n      style[TRANSITION_TIMING_FUNCTION] = easingName;\n      const cssTiming = style[TRANSITION_TIMING_FUNCTION] === easingName;\n      style[TRANSITION_DURATION] = options.duration / 1000 + 's';\n\n      setTimeout(() => {\n        let i = changedProperties.length;\n        let hash;\n        let originalValue = null;\n        let index;\n        const propertiesToTransitionInJs = [];\n        let prop;\n        let suffix;\n        let interpolator;\n\n        while (i--) {\n          prop = changedProperties[i];\n          hash = hashPrefix + prop;\n\n          if (cssTiming && CSS_TRANSITIONS_ENABLED && !cannotUseCssTransitions[hash]) {\n            const initial = style[prop];\n            style[prop] = to[prop];\n\n            // If we're not sure if CSS transitions are supported for\n            // this tag/property combo, find out now\n            if (!(hash in canUseCssTransitions)) {\n              originalValue = t.getStyle(prop);\n\n              // if this property is transitionable in this browser,\n              // the current style will be different from the target style\n              canUseCssTransitions[hash] = t.getStyle(prop) != to[prop];\n              cannotUseCssTransitions[hash] = !canUseCssTransitions[hash];\n\n              // Reset, if we're going to use timers after all\n              if (cannotUseCssTransitions[hash]) {\n                style[prop] = initial;\n              }\n            }\n          }\n\n          if (!cssTiming || !CSS_TRANSITIONS_ENABLED || cannotUseCssTransitions[hash]) {\n            // we need to fall back to timer-based stuff\n            if (originalValue === null) originalValue = t.getStyle(prop);\n\n            // need to remove this from changedProperties, otherwise transitionEndHandler\n            // will get confused\n            index = changedProperties.indexOf(prop);\n            if (index === -1) {\n              warnIfDebug(\n                'Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!',\n                { node: t.node }\n              );\n            } else {\n              changedProperties.splice(index, 1);\n            }\n\n            // TODO Determine whether this property is animatable at all\n\n            suffix = /[^\\d]*$/.exec(originalValue)[0];\n            interpolator = interpolate(parseFloat(originalValue), parseFloat(to[prop]));\n\n            // ...then kick off a timer-based transition\n            if (interpolator) {\n              propertiesToTransitionInJs.push({\n                name: prop,\n                interpolator,\n                suffix\n              });\n            } else {\n              style[prop] = to[prop];\n            }\n\n            originalValue = null;\n          }\n        }\n\n        // javascript transitions\n        if (propertiesToTransitionInJs.length) {\n          let easing;\n\n          if (isString(options.easing)) {\n            easing = t.ractive.easing[options.easing];\n\n            if (!easing) {\n              warnOnceIfDebug(missingPlugin(options.easing, 'easing'));\n              easing = linear;\n            }\n          } else if (isFunction(options.easing)) {\n            easing = options.easing;\n          } else {\n            easing = linear;\n          }\n\n          new Ticker({\n            duration: options.duration,\n            easing,\n            step(pos) {\n              let i = propertiesToTransitionInJs.length;\n              while (i--) {\n                const prop = propertiesToTransitionInJs[i];\n                style[prop.name] = prop.interpolator(pos) + prop.suffix;\n              }\n            },\n            complete() {\n              jsTransitionsComplete = true;\n              checkComplete();\n            }\n          });\n        } else {\n          jsTransitionsComplete = true;\n        }\n\n        if (changedProperties.length) {\n          style[TRANSITION_PROPERTY] = changedProperties.join(',');\n        } else {\n          style[TRANSITION_PROPERTY] = 'none';\n\n          // We need to cancel the transitionEndHandler, and deal with\n          // the fact that it will never fire\n          t.node.removeEventListener(TRANSITIONEND, transitionEndHandler, false);\n          cssTransitionsComplete = true;\n          checkComplete();\n        }\n      }, 0);\n    }, options.delay || 0);\n  };\n}\n\nexport default createTransitions;\n"",""import { vendors } from 'config/environment';\n\nconst vendorPattern = new RegExp('^(?:' + vendors.join('|') + ')([A-Z])');\n\nexport default function(str) {\n  /* istanbul ignore next */\n  if (!str) return ''; // edge case\n\n  /* istanbul ignore next */\n  if (vendorPattern.test(str)) str = '-' + str;\n\n  return str.replace(/[A-Z]/g, match => '-' + match.toLowerCase());\n}\n"",""import { win } from 'config/environment';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport { isArray, isObject, isFunction, isNumber, isString } from 'utils/is';\nimport noop from 'utils/noop';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport { findInViewHierarchy } from 'shared/registry';\nimport { visible } from 'config/visibility';\nimport findElement from '../shared/findElement';\nimport prefix from './transitions/prefix';\nimport createTransitions from './transitions/createTransitions';\nimport { resolveArgs, setupArgsFn } from '../shared/directiveArgs';\nimport { assign, hasOwn, keys } from 'utils/object';\n\nconst getComputedStyle = win && win.getComputedStyle;\nconst resolved = Promise.resolve();\n\nconst names = {\n  t0: 'intro-outro',\n  t1: 'intro',\n  t2: 'outro'\n};\n\nexport default class Transition {\n  constructor(options) {\n    this.owner = options.owner || options.up.owner || findElement(options.up);\n    this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n    this.ractive = this.owner.ractive;\n    this.template = options.template;\n    this.up = options.up;\n    this.options = options;\n    this.onComplete = [];\n  }\n\n  animateStyle(style, value, options) {\n    if (arguments.length === 4) {\n      throw new Error(\n        't.animateStyle() returns a promise - use .then() instead of passing a callback'\n      );\n    }\n\n    // Special case - page isn't visible. Don't animate anything, because\n    // that way you'll never get CSS transitionend events\n    if (!visible) {\n      this.setStyle(style, value);\n      return resolved;\n    }\n\n    let to;\n\n    if (isString(style)) {\n      to = {};\n      to[style] = value;\n    } else {\n      to = style;\n\n      // shuffle arguments\n      options = value;\n    }\n\n    return new Promise(fulfil => {\n      // Edge case - if duration is zero, set style synchronously and complete\n      if (!options.duration) {\n        this.setStyle(to);\n        fulfil();\n        return;\n      }\n\n      // Get a list of the properties we're animating\n      const propertyNames = keys(to);\n      const changedProperties = [];\n\n      // Store the current styles\n      const computedStyle = getComputedStyle(this.node);\n\n      let i = propertyNames.length;\n      while (i--) {\n        const prop = propertyNames[i];\n        const name = prefix(prop);\n\n        const current = computedStyle[prefix(prop)];\n\n        // record the starting points\n        const init = this.node.style[name];\n        if (!(name in this.originals)) this.originals[name] = this.node.style[name];\n        this.node.style[name] = to[prop];\n        this.targets[name] = this.node.style[name];\n        this.node.style[name] = init;\n\n        // we need to know if we're actually changing anything\n        if (current != to[prop]) {\n          // use != instead of !==, so we can compare strings with numbers\n          changedProperties.push(name);\n\n          // if we happened to prefix, make sure there is a properly prefixed value\n          to[name] = to[prop];\n\n          // make the computed style explicit, so we can animate where\n          // e.g. height='auto'\n          this.node.style[name] = current;\n        }\n      }\n\n      // If we're not actually changing anything, the transitionend event\n      // will never fire! So we complete early\n      if (!changedProperties.length) {\n        fulfil();\n        return;\n      }\n\n      createTransitions(this, to, options, changedProperties, fulfil);\n    });\n  }\n\n  bind() {\n    const options = this.options;\n    const type = options.template && options.template.v;\n    if (type) {\n      if (type === 't0' || type === 't1') this.element.intro = this;\n      if (type === 't0' || type === 't2') this.element.outro = this;\n      this.eventName = names[type];\n    }\n\n    const ractive = this.owner.ractive;\n\n    this.name = options.name || options.template.n;\n\n    if (options.params) {\n      this.params = options.params;\n    }\n\n    if (isFunction(this.name)) {\n      this._fn = this.name;\n      this.name = this._fn.name;\n    } else {\n      this._fn = findInViewHierarchy('transitions', ractive, this.name);\n    }\n\n    if (!this._fn) {\n      warnOnceIfDebug(missingPlugin(this.name, 'transition'), { ractive });\n    }\n\n    setupArgsFn(this, options.template);\n  }\n\n  getParams() {\n    if (this.params) return this.params;\n\n    // get expression args if supplied\n    if (this.fn) {\n      const values = resolveArgs(this, this.template, this.up).map(model => {\n        if (!model) return undefined;\n\n        return model.get();\n      });\n      return this.fn.apply(this.ractive, values);\n    }\n  }\n\n  getStyle(props) {\n    const computedStyle = getComputedStyle(this.node);\n\n    if (isString(props)) {\n      return computedStyle[prefix(props)];\n    }\n\n    if (!isArray(props)) {\n      throw new Error(\n        'Transition$getStyle must be passed a string, or an array of strings representing CSS properties'\n      );\n    }\n\n    const styles = {};\n\n    let i = props.length;\n    while (i--) {\n      const prop = props[i];\n      let value = computedStyle[prefix(prop)];\n\n      if (value === '0px') value = 0;\n      styles[prop] = value;\n    }\n\n    return styles;\n  }\n\n  processParams(params, defaults) {\n    if (isNumber(params)) {\n      params = { duration: params };\n    } else if (isString(params)) {\n      if (params === 'slow') {\n        params = { duration: 600 };\n      } else if (params === 'fast') {\n        params = { duration: 200 };\n      } else {\n        params = { duration: 400 };\n      }\n    } else if (!params) {\n      params = {};\n    }\n\n    return assign({}, defaults, params);\n  }\n\n  registerCompleteHandler(fn) {\n    addToArray(this.onComplete, fn);\n  }\n\n  setStyle(style, value) {\n    if (isString(style)) {\n      const name = prefix(style);\n      if (!hasOwn(this.originals, name)) this.originals[name] = this.node.style[name];\n      this.node.style[name] = value;\n      this.targets[name] = this.node.style[name];\n    } else {\n      let prop;\n      for (prop in style) {\n        if (hasOwn(style, prop)) {\n          this.setStyle(prop, style[prop]);\n        }\n      }\n    }\n\n    return this;\n  }\n\n  shouldFire(type) {\n    if (!this.ractive.transitionsEnabled) return false;\n\n    // check for noIntro and noOutro cases, which only apply when the owner ractive is rendering and unrendering, respectively\n    if (type === 'intro' && this.ractive.rendering && nearestProp('noIntro', this.ractive, true))\n      return false;\n    if (type === 'outro' && this.ractive.unrendering && nearestProp('noOutro', this.ractive, false))\n      return false;\n\n    const params = this.getParams(); // this is an array, the params object should be the first member\n    // if there's not a parent element, this can't be nested, so roll on\n    if (!this.element.parent) return true;\n\n    // if there is a local param, it takes precedent\n    if (params && params[0] && isObject(params[0]) && 'nested' in params[0]) {\n      if (params[0].nested !== false) return true;\n    } else {\n      // use the nearest instance setting\n      // find the nearest instance that actually has a nested setting\n      if (nearestProp('nestedTransitions', this.ractive) !== false) return true;\n    }\n\n    // check to see if this is actually a nested transition\n    let el = this.element.parent;\n    while (el) {\n      if (el[type] && el[type].starting) return false;\n      el = el.parent;\n    }\n\n    return true;\n  }\n\n  start() {\n    const node = (this.node = this.element.node);\n    const originals = (this.originals = {}); //= node.getAttribute( 'style' );\n    const targets = (this.targets = {});\n\n    let completed;\n    const args = this.getParams();\n\n    // create t.complete() - we don't want this on the prototype,\n    // because we don't want `this` silliness when passing it as\n    // an argument\n    this.complete = noReset => {\n      this.starting = false;\n      if (completed) {\n        return;\n      }\n\n      this.onComplete.forEach(fn => fn());\n      if (!noReset && this.isIntro) {\n        for (const k in targets) {\n          if (node.style[k] === targets[k]) node.style[k] = originals[k];\n        }\n      }\n\n      this._manager.remove(this);\n\n      completed = true;\n    };\n\n    // If the transition function doesn't exist, abort\n    if (!this._fn) {\n      this.complete();\n      return;\n    }\n\n    const promise = this._fn.apply(this.ractive, [this].concat(args));\n    if (promise) promise.then(this.complete);\n  }\n\n  toString() {\n    return '';\n  }\n\n  unbind() {\n    if (!this.element.attributes.unbinding) {\n      const type = this.options && this.options.template && this.options.template.v;\n      if (type === 't0' || type === 't1') this.element.intro = null;\n      if (type === 't0' || type === 't2') this.element.outro = null;\n    }\n  }\n\n  unregisterCompleteHandler(fn) {\n    removeFromArray(this.onComplete, fn);\n  }\n}\n\nconst proto = Transition.prototype;\nproto.destroyed = proto.firstNode = proto.rebound = proto.render = proto.unrender = proto.update = noop;\n\nfunction nearestProp(prop, ractive, rendering) {\n  let instance = ractive;\n  while (instance) {\n    if (\n      hasOwn(instance, prop) &&\n      (rendering === undefined || rendering ? instance.rendering : instance.unrendering)\n    )\n      return instance[prop];\n    instance = instance.component && instance.component.ractive;\n  }\n\n  return ractive[prop];\n}\n"",""import { svg } from 'config/namespaces';\nimport { createElement } from 'utils/dom';\n\nconst elementCache = {};\n\nlet ieBug;\nlet ieBlacklist;\n\ntry {\n  createElement('table').innerHTML = 'foo';\n} catch (/* istanbul ignore next */ err) {\n  ieBug = true;\n\n  ieBlacklist = {\n    TABLE: ['<table class=\""x\"">', '</table>'],\n    THEAD: ['<table><thead class=\""x\"">', '</thead></table>'],\n    TBODY: ['<table><tbody class=\""x\"">', '</tbody></table>'],\n    TR: ['<table><tr class=\""x\"">', '</tr></table>'],\n    SELECT: ['<select class=\""x\"">', '</select>']\n  };\n}\n\nexport default function(html, node) {\n  const nodes = [];\n\n  // render 0 and false\n  if (html == null || html === '') return nodes;\n\n  let container;\n  let wrapper;\n  let selectedOption;\n\n  /* istanbul ignore if */\n  if (ieBug && (wrapper = ieBlacklist[node.tagName])) {\n    container = element('DIV');\n    container.innerHTML = wrapper[0] + html + wrapper[1];\n    container = container.querySelector('.x');\n\n    if (container.tagName === 'SELECT') {\n      selectedOption = container.options[container.selectedIndex];\n    }\n  } else if (node.namespaceURI === svg) {\n    container = element('DIV');\n    container.innerHTML = '<svg class=\""x\"">' + html + '</svg>';\n    container = container.querySelector('.x');\n  } else if (node.tagName === 'TEXTAREA') {\n    container = createElement('div');\n\n    if (typeof container.textContent !== 'undefined') {\n      container.textContent = html;\n    } else {\n      container.innerHTML = html;\n    }\n  } else {\n    container = element(node.tagName);\n    container.innerHTML = html;\n\n    if (container.tagName === 'SELECT') {\n      selectedOption = container.options[container.selectedIndex];\n    }\n  }\n\n  let child;\n  while ((child = container.firstChild)) {\n    nodes.push(child);\n    container.removeChild(child);\n  }\n\n  // This is really annoying. Extracting <option> nodes from the\n  // temporary container <select> causes the remaining ones to\n  // become selected. So now we have to deselect them. IE8, you\n  // amaze me. You really do\n  // ...and now Chrome too\n  let i;\n  if (node.tagName === 'SELECT') {\n    i = nodes.length;\n    while (i--) {\n      if (nodes[i] !== selectedOption) {\n        nodes[i].selected = false;\n      }\n    }\n  }\n\n  return nodes;\n}\n\nfunction element(tagName) {\n  return elementCache[tagName] || (elementCache[tagName] = createElement(tagName));\n}\n"",""import { createDocumentFragment, matches } from 'utils/dom';\nimport { detachNode } from 'utils/dom';\nimport { decodeCharacterReferences } from 'utils/html';\nimport runloop from 'src/global/runloop';\nimport Mustache from './shared/Mustache';\nimport insertHtml from './triple/insertHtml';\nimport { inAttribute } from './element/Attribute';\n\nexport default class Triple extends Mustache {\n  constructor(options) {\n    super(options);\n  }\n\n  detach() {\n    const docFrag = createDocumentFragment();\n    if (this.nodes) this.nodes.forEach(node => docFrag.appendChild(node));\n    return docFrag;\n  }\n\n  find(selector) {\n    const len = this.nodes.length;\n    let i;\n\n    for (i = 0; i < len; i += 1) {\n      const node = this.nodes[i];\n\n      if (node.nodeType !== 1) continue;\n\n      if (matches(node, selector)) return node;\n\n      const queryResult = node.querySelector(selector);\n      if (queryResult) return queryResult;\n    }\n\n    return null;\n  }\n\n  findAll(selector, options) {\n    const { result } = options;\n    const len = this.nodes.length;\n    let i;\n\n    for (i = 0; i < len; i += 1) {\n      const node = this.nodes[i];\n\n      if (node.nodeType !== 1) continue;\n\n      if (matches(node, selector)) result.push(node);\n\n      const queryAllResult = node.querySelectorAll(selector);\n      if (queryAllResult) {\n        result.push.apply(result, queryAllResult);\n      }\n    }\n  }\n\n  findComponent() {\n    return null;\n  }\n\n  firstNode() {\n    return this.rendered && this.nodes[0];\n  }\n\n  render(target, occupants, anchor) {\n    if (!this.nodes) {\n      const html = this.model ? this.model.get() : '';\n      this.nodes = insertHtml(html, target);\n    }\n\n    let nodes = this.nodes;\n\n    // progressive enhancement\n    if (occupants) {\n      let i = -1;\n      let next;\n\n      // start with the first node that should be rendered\n      while (occupants.length && (next = this.nodes[i + 1])) {\n        let n;\n        // look through the occupants until a matching node is found\n        while ((n = occupants.shift())) {\n          const t = n.nodeType;\n\n          if (\n            t === next.nodeType &&\n            ((t === 1 && n.outerHTML === next.outerHTML) ||\n              ((t === 3 || t === 8) && n.nodeValue === next.nodeValue))\n          ) {\n            this.nodes.splice(++i, 1, n); // replace the generated node with the existing one\n            break;\n          } else {\n            target.removeChild(n); // remove the non-matching existing node\n          }\n        }\n      }\n\n      if (i >= 0) {\n        // update the list of remaining nodes to attach, excluding any that were replaced by existing nodes\n        nodes = this.nodes.slice(i);\n      }\n\n      // update the anchor to be the next occupant\n      if (occupants.length) anchor = occupants[0];\n    }\n\n    // attach any remainging nodes to the parent\n    if (nodes.length) {\n      const frag = createDocumentFragment();\n      nodes.forEach(n => frag.appendChild(n));\n\n      if (anchor) {\n        target.insertBefore(frag, anchor);\n      } else {\n        target.appendChild(frag);\n      }\n    }\n\n    this.rendered = true;\n  }\n\n  toString() {\n    let value = this.model && this.model.get();\n    value = value != null ? '' + value : '';\n\n    return inAttribute() ? decodeCharacterReferences(value) : value;\n  }\n\n  unrender() {\n    if (this.nodes)\n      this.nodes.forEach(node => {\n        // defer detachment until all relevant outros are done\n        runloop.detachWhenReady({\n          node,\n          detach() {\n            detachNode(node);\n          }\n        });\n      });\n    this.rendered = false;\n    this.nodes = null;\n  }\n\n  update() {\n    if (this.rendered && this.dirty) {\n      this.dirty = false;\n\n      this.unrender();\n      this.render(this.up.findParentNode(), null, this.up.findNextNode(this));\n    } else {\n      // make sure to reset the dirty flag even if not rendered\n      this.dirty = false;\n    }\n  }\n}\n"",""import {\n  ALIAS,\n  ANCHOR,\n  AWAIT,\n  COMMENT,\n  COMPONENT,\n  DOCTYPE,\n  ELEMENT,\n  INTERPOLATOR,\n  PARTIAL,\n  SECTION,\n  TRIPLE,\n  YIELDER\n} from 'config/types';\nimport { ATTRIBUTE, BINDING_FLAG, DECORATOR, EVENT, TRANSITION } from 'config/types';\nimport Alias from './Alias';\nimport Attribute from './element/Attribute';\nimport BindingFlag from './element/BindingFlag';\nimport Comment from './Comment';\nimport Component from './Component';\nimport Decorator from './element/Decorator';\nimport Doctype from './Doctype';\nimport Form from './element/specials/Form';\nimport Element from './Element';\nimport EventDirective from './shared/EventDirective';\nimport Interpolator from './Interpolator';\nimport Input from './element/specials/Input';\nimport Mapping from './component/Mapping';\nimport Option from './element/specials/Option';\nimport Partial from './Partial';\nimport Section from './Section';\nimport Select from './element/specials/Select';\nimport Textarea from './element/specials/Textarea';\nimport Text from './Text';\nimport Transition from './element/Transition';\nimport Triple from './Triple';\nimport getComponentConstructor from './component/getComponentConstructor';\nimport findElement from './shared/findElement';\nimport { findInstance } from 'shared/registry';\nimport asyncProxy from './asyncProxy';\nimport Await from './Await';\nimport { isString, isFunction } from 'utils/is';\n\nconst constructors = {};\nconstructors[ALIAS] = Alias;\nconstructors[ANCHOR] = Component;\nconstructors[AWAIT] = Await;\nconstructors[DOCTYPE] = Doctype;\nconstructors[INTERPOLATOR] = Interpolator;\nconstructors[PARTIAL] = Partial;\nconstructors[SECTION] = Section;\nconstructors[TRIPLE] = Triple;\nconstructors[YIELDER] = Partial;\n\nconstructors[ATTRIBUTE] = Attribute;\nconstructors[BINDING_FLAG] = BindingFlag;\nconstructors[DECORATOR] = Decorator;\nconstructors[EVENT] = EventDirective;\nconstructors[TRANSITION] = Transition;\nconstructors[COMMENT] = Comment;\n\nconst specialElements = {\n  doctype: Doctype,\n  form: Form,\n  input: Input,\n  option: Option,\n  select: Select,\n  textarea: Textarea\n};\n\nexport default function createItem(options) {\n  if (isString(options.template)) {\n    return new Text(options);\n  }\n\n  let ctor;\n  let name;\n  const type = options.template.t;\n\n  if (type === ELEMENT) {\n    name = options.template.e;\n\n    // could be a macro partial\n    ctor = findInstance('partials', options.up.ractive, name);\n    if (ctor) {\n      ctor = ctor.partials[name];\n      if (ctor.styleSet) {\n        options.macro = ctor;\n        return new Partial(options);\n      }\n    }\n\n    // could be component or element\n    ctor = getComponentConstructor(options.up.ractive, name);\n    if (ctor) {\n      if (isFunction(ctor.then)) {\n        return asyncProxy(ctor, options);\n      } else if (isFunction(ctor)) {\n        return new Component(options, ctor);\n      }\n    }\n\n    ctor = specialElements[name.toLowerCase()] || Element;\n    return new ctor(options);\n  }\n\n  let Item;\n\n  // component mappings are a special case of attribute\n  if (type === ATTRIBUTE) {\n    let el = options.owner;\n    if (!el || (el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT)) {\n      el = findElement(options.up);\n    }\n    options.element = el;\n\n    Item = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;\n  } else {\n    Item = constructors[type];\n  }\n\n  if (!Item) throw new Error(`Unrecognised item type ${type}`);\n\n  return new Item(options);\n}\n"",""import { ELEMENT, YIELDER } from 'config/types';\nimport runloop from 'src/global/runloop';\nimport { findMap } from 'utils/array';\nimport { getContext, findParentWithContext } from 'shared/getRactiveContext';\nimport { shuffled, toEscapedString, toString } from 'shared/methodCallers';\nimport createItem from './items/createItem';\nimport processItems from './helpers/processItems';\nimport parseJSON from 'utils/parseJSON';\nimport { createDocumentFragment } from 'utils/dom';\nimport KeyModel from 'src/model/specials/KeyModel';\n\nexport default class Fragment {\n  constructor(options) {\n    this.owner = options.owner; // The item that owns this fragment - an element, section, partial, or attribute\n\n    this.isRoot = !options.owner.up;\n    this.parent = this.isRoot ? null : this.owner.up;\n    this.ractive = options.ractive || (this.isRoot ? options.owner : this.parent.ractive);\n\n    this.componentParent = this.isRoot && this.ractive.component ? this.ractive.component.up : null;\n    if (!this.isRoot || this.ractive.delegate) {\n      this.delegate = this.owner.containerFragment\n        ? this.owner.containerFragment && this.owner.containerFragment.delegate\n        : (this.componentParent && this.componentParent.delegate) ||\n          (this.parent && this.parent.delegate);\n    } else {\n      this.delegate = false;\n    }\n\n    this.context = null;\n    this.rendered = false;\n\n    // encapsulated styles should be inherited until they get applied by an element\n    if ('cssIds' in options) {\n      this.cssIds = options.cssIds && options.cssIds.length && options.cssIds;\n    } else {\n      this.cssIds = this.parent ? this.parent.cssIds : null;\n    }\n\n    this.dirty = false;\n    this.dirtyValue = true; // used for attribute values\n\n    this.template = options.template || [];\n    this.createItems();\n  }\n\n  bind(context) {\n    this.context = context;\n    const len = this.items.length;\n    for (let i = 0; i < len; i++) this.items[i].bind();\n    this.bound = true;\n\n    // in rare cases, a forced resolution (or similar) will cause the\n    // fragment to be dirty before it's even finished binding. In those\n    // cases we update immediately\n    if (this.dirty) this.update();\n\n    return this;\n  }\n\n  bubble() {\n    this.dirtyValue = true;\n\n    if (!this.dirty) {\n      this.dirty = true;\n\n      if (this.isRoot) {\n        // TODO encapsulate 'is component root, but not overall root' check?\n        if (this.ractive.component) {\n          this.ractive.component.bubble();\n        } else if (this.bound) {\n          runloop.addFragment(this);\n        }\n      } else {\n        this.owner.bubble(this.index);\n      }\n    }\n  }\n\n  createItems() {\n    // this is a hot code path\n    const max = this.template.length;\n    this.items = [];\n    for (let i = 0; i < max; i++) {\n      this.items[i] = createItem({\n        up: this,\n        template: this.template[i],\n        index: i\n      });\n    }\n  }\n\n  destroyed() {\n    const len = this.items.length;\n    for (let i = 0; i < len; i++) this.items[i].destroyed();\n    if (this.pathModel) this.pathModel.destroyed();\n    if (this.rootModel) this.rootModel.destroyed();\n  }\n\n  detach() {\n    const docFrag = createDocumentFragment();\n    const xs = this.items;\n    const len = xs.length;\n    for (let i = 0; i < len; i++) {\n      docFrag.appendChild(xs[i].detach());\n    }\n    return docFrag;\n  }\n\n  find(selector, options) {\n    return findMap(this.items, i => i.find(selector, options));\n  }\n\n  findAll(selector, options) {\n    if (this.items) {\n      this.items.forEach(i => i.findAll && i.findAll(selector, options));\n    }\n  }\n\n  findComponent(name, options) {\n    return findMap(this.items, i => i.findComponent(name, options));\n  }\n\n  findAllComponents(name, options) {\n    if (this.items) {\n      this.items.forEach(i => i.findAllComponents && i.findAllComponents(name, options));\n    }\n  }\n\n  findContext() {\n    const base = findParentWithContext(this);\n    if (!base || !base.context) return this.ractive.viewmodel;\n    else return base.context;\n  }\n\n  findNextNode(item) {\n    // search for the next node going forward\n    if (item) {\n      let it;\n      for (let i = item.index + 1; i < this.items.length; i++) {\n        it = this.items[i];\n        if (!it || !it.firstNode) continue;\n\n        const node = it.firstNode(true);\n        if (node) return node;\n      }\n    }\n\n    // if this is the root fragment, and there are no more items,\n    // it means we're at the end...\n    if (this.isRoot) {\n      if (this.ractive.component) {\n        return this.ractive.component.up.findNextNode(this.ractive.component);\n      }\n\n      // TODO possible edge case with other content\n      // appended to this.ractive.el?\n      return null;\n    }\n\n    if (this.parent) return this.owner.findNextNode(this); // the argument is in case the parent is a RepeatedFragment\n  }\n\n  findParentNode() {\n    let fragment = this;\n\n    do {\n      if (fragment.owner.type === ELEMENT) {\n        return fragment.owner.node;\n      }\n\n      if (fragment.isRoot && !fragment.ractive.component) {\n        // TODO encapsulate check\n        return fragment.ractive.el;\n      }\n\n      if (fragment.owner.type === YIELDER) {\n        fragment = fragment.owner.containerFragment;\n      } else {\n        fragment = fragment.componentParent || fragment.parent; // TODO ugh\n      }\n    } while (fragment);\n\n    throw new Error('Could not find parent node'); // TODO link to issue tracker\n  }\n\n  firstNode(skipParent) {\n    const node = findMap(this.items, i => i.firstNode(true));\n    if (node) return node;\n    if (skipParent) return null;\n\n    return this.parent.findNextNode(this.owner);\n  }\n\n  getKey() {\n    return this.keyModel || (this.keyModel = new KeyModel(this.key));\n  }\n\n  getIndex() {\n    return this.idxModel || (this.idxModel = new KeyModel(this.index));\n  }\n\n  rebind(next) {\n    this.context = next;\n    if (this.rootModel) this.rootModel.context = this.context;\n    if (this.pathModel) this.pathModel.context = this.context;\n  }\n\n  rebound(update) {\n    this.items.forEach(x => x.rebound(update));\n    if (update) {\n      if (this.rootModel) this.rootModel.applyValue(this.context.getKeypath(this.ractive.root));\n      if (this.pathModel) this.pathModel.applyValue(this.context.getKeypath());\n    }\n  }\n\n  render(target, occupants) {\n    if (this.rendered) throw new Error('Fragment is already rendered!');\n    this.rendered = true;\n\n    const xs = this.items;\n    const len = xs.length;\n    for (let i = 0; i < len; i++) {\n      xs[i].render(target, occupants);\n    }\n  }\n\n  resetTemplate(template) {\n    const wasBound = this.bound;\n    const wasRendered = this.rendered;\n\n    // TODO ensure transitions are disabled globally during reset\n\n    if (wasBound) {\n      if (wasRendered) this.unrender(true);\n      this.unbind();\n    }\n\n    this.template = template;\n    this.createItems();\n\n    if (wasBound) {\n      this.bind(this.context);\n\n      if (wasRendered) {\n        const parentNode = this.findParentNode();\n        const anchor = this.findNextNode();\n\n        if (anchor) {\n          const docFrag = createDocumentFragment();\n          this.render(docFrag);\n          parentNode.insertBefore(docFrag, anchor);\n        } else {\n          this.render(parentNode);\n        }\n      }\n    }\n  }\n\n  shuffled() {\n    this.items.forEach(shuffled);\n    if (this.rootModel) this.rootModel.applyValue(this.context.getKeypath(this.ractive.root));\n    if (this.pathModel) this.pathModel.applyValue(this.context.getKeypath());\n  }\n\n  toString(escape) {\n    return this.items.map(escape ? toEscapedString : toString).join('');\n  }\n\n  unbind(view) {\n    this.context = null;\n    const len = this.items.length;\n    for (let i = 0; i < len; i++) this.items[i].unbind(view);\n    this.bound = false;\n\n    return this;\n  }\n\n  unrender(shouldDestroy) {\n    const len = this.items.length;\n    for (let i = 0; i < len; i++) this.items[i].unrender(shouldDestroy);\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.dirty) {\n      if (!this.updating) {\n        this.dirty = false;\n        this.updating = true;\n        const len = this.items.length;\n        for (let i = 0; i < len; i++) this.items[i].update();\n        this.updating = false;\n      } else if (this.isRoot) {\n        runloop.addFragmentToRoot(this);\n      }\n    }\n  }\n\n  valueOf() {\n    if (this.items.length === 1) {\n      return this.items[0].valueOf();\n    }\n\n    if (this.dirtyValue) {\n      const values = {};\n      const source = processItems(this.items, values, this.ractive._guid);\n      const parsed = parseJSON(source, values);\n\n      this.value = parsed ? parsed.value : this.toString();\n\n      this.dirtyValue = false;\n    }\n\n    return this.value;\n  }\n}\nFragment.prototype.getContext = getContext;\nFragment.prototype.getKeypath = getKeypath;\n\nexport function getKeypath(root) {\n  const base = findParentWithContext(this);\n  let model;\n  if (root) {\n    if (!this.rootModel) {\n      this.rootModel = new KeyModel(\n        this.context.getKeypath(this.ractive.root),\n        this.context,\n        this.ractive.root\n      );\n      model = this.rootModel;\n    } else return this.rootModel;\n  } else {\n    if (!this.pathModel) {\n      this.pathModel = new KeyModel(this.context.getKeypath(), this.context);\n      model = this.pathModel;\n    } else return this.pathModel;\n  }\n\n  if (base && base.context) base.getKeypath(root).registerChild(model);\n\n  return model;\n}\n"",""import runloop from 'src/global/runloop';\nimport config from '../config/config';\nimport hooks from '../../events/Hook';\nimport dataConfigurator from '../config/custom/data';\nimport { isObjectType } from 'utils/is';\n\nconst shouldRerender = ['template', 'partials', 'components', 'decorators', 'events'];\n\nexport default function Ractive$reset(data) {\n  data = data || {};\n\n  if (!isObjectType(data)) {\n    throw new Error('The reset method takes either no arguments, or an object containing new data');\n  }\n\n  // TEMP need to tidy this up\n  data = dataConfigurator.init(this.constructor, this, { data });\n\n  const promise = runloop.start();\n\n  // If the root object is wrapped, try and use the wrapper's reset value\n  const wrapper = this.viewmodel.wrapper;\n  if (wrapper && wrapper.reset) {\n    if (wrapper.reset(data) === false) {\n      // reset was rejected, we need to replace the object\n      this.viewmodel.set(data);\n    }\n  } else {\n    this.viewmodel.set(data);\n  }\n\n  // reset config items and track if need to rerender\n  const changes = config.reset(this);\n  let rerender;\n\n  let i = changes.length;\n  while (i--) {\n    if (shouldRerender.indexOf(changes[i]) > -1) {\n      rerender = true;\n      break;\n    }\n  }\n\n  if (rerender) {\n    hooks.unrender.fire(this);\n    this.fragment.resetTemplate(this.template);\n    hooks.render.fire(this);\n    hooks.complete.fire(this);\n  }\n\n  runloop.end();\n\n  hooks.reset.fire(this, data);\n\n  return promise;\n}\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('reverse').path;\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('shift').path;\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('sort').path;\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('splice').path;\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('unshift').path;\n"",""import runloop from 'src/global/runloop';\nimport { updateAnchors } from 'shared/anchors';\nimport { bind, render as callRender, unbind, unrender, update } from 'shared/methodCallers';\nimport { teardown } from 'src/Ractive/prototype/teardown';\nimport getRactiveContext from 'shared/getRactiveContext';\nimport { warnIfDebug } from 'utils/log';\nimport { createDocumentFragment } from 'utils/dom';\nimport {\n  ANCHOR,\n  ATTRIBUTE,\n  BINDING_FLAG,\n  COMPONENT,\n  DECORATOR,\n  EVENT,\n  TRANSITION,\n  YIELDER\n} from 'config/types';\nimport construct from 'src/Ractive/construct';\nimport initialise from 'src/Ractive/initialise';\nimport render from 'src/Ractive/render';\nimport Item from './shared/Item';\nimport ConditionalAttribute from './element/ConditionalAttribute';\nimport createItem from './createItem';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport { assign, create } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\n\nexport default class Component extends Item {\n  constructor(options, ComponentConstructor) {\n    super(options);\n    let template = options.template;\n    this.isAnchor = template.t === ANCHOR;\n    this.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super\n    let attrs = template.m;\n\n    const partials = template.p || {};\n    if (!('content' in partials)) partials.content = template.f || [];\n    this._partials = partials; // TEMP\n\n    if (this.isAnchor) {\n      this.name = template.n;\n\n      this.addChild = addChild;\n      this.removeChild = removeChild;\n    } else {\n      const instance = create(ComponentConstructor.prototype);\n\n      this.instance = instance;\n      this.name = template.e;\n\n      if (instance.el || instance.target) {\n        warnIfDebug(\n          `The <${this.name}> component has a default '${\n            instance.el ? 'el' : 'target'\n          }' property; it has been disregarded`\n        );\n        instance.el = instance.target = null;\n      }\n\n      // find container\n      let fragment = options.up;\n      let container;\n      while (fragment) {\n        if (fragment.owner.type === YIELDER) {\n          container = fragment.owner.container;\n          break;\n        }\n\n        fragment = fragment.parent;\n      }\n\n      // add component-instance-specific properties\n      instance.parent = this.up.ractive;\n      instance.container = container || null;\n      instance.root = instance.parent.root;\n      instance.component = this;\n\n      construct(this.instance, { partials });\n\n      // these can be modified during construction\n      template = this.template;\n      attrs = template.m;\n\n      // allow components that are so inclined to add programmatic mappings\n      if (isArray(this.mappings)) {\n        attrs = (attrs || []).concat(this.mappings);\n      } else if (isString(this.mappings)) {\n        attrs = (attrs || []).concat(parser.parse(this.mappings, { attributes: true }).t);\n      }\n\n      // for hackability, this could be an open option\n      // for any ractive instance, but for now, just\n      // for components and just for ractive...\n      instance._inlinePartials = partials;\n    }\n\n    this.attributeByName = {};\n    this.attributes = [];\n\n    if (attrs) {\n      const leftovers = [];\n      attrs.forEach(template => {\n        switch (template.t) {\n          case ATTRIBUTE:\n          case EVENT:\n            this.attributes.push(\n              createItem({\n                owner: this,\n                up: this.up,\n                template\n              })\n            );\n            break;\n\n          case TRANSITION:\n          case BINDING_FLAG:\n          case DECORATOR:\n            break;\n\n          default:\n            leftovers.push(template);\n            break;\n        }\n      });\n\n      if (leftovers.length) {\n        this.attributes.push(\n          new ConditionalAttribute({\n            owner: this,\n            up: this.up,\n            template: leftovers\n          })\n        );\n      }\n    }\n\n    this.eventHandlers = [];\n  }\n\n  bind() {\n    if (!this.isAnchor) {\n      this.attributes.forEach(bind);\n      this.eventHandlers.forEach(bind);\n\n      initialise(\n        this.instance,\n        {\n          partials: this._partials\n        },\n        {\n          cssIds: this.up.cssIds\n        }\n      );\n\n      if (this.instance.target || this.instance.el) this.extern = true;\n\n      this.bound = true;\n    }\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n      this.up.bubble();\n    }\n  }\n\n  destroyed() {\n    if (!this.isAnchor && this.instance.fragment) this.instance.fragment.destroyed();\n  }\n\n  detach() {\n    if (this.isAnchor) {\n      if (this.instance) return this.instance.fragment.detach();\n      return createDocumentFragment();\n    }\n\n    return this.instance.fragment.detach();\n  }\n\n  find(selector, options) {\n    if (this.instance) return this.instance.fragment.find(selector, options);\n  }\n\n  findAll(selector, options) {\n    if (this.instance) this.instance.fragment.findAll(selector, options);\n  }\n\n  findComponent(name, options) {\n    if (!name || this.name === name) return this.instance;\n\n    if (this.instance.fragment) {\n      return this.instance.fragment.findComponent(name, options);\n    }\n  }\n\n  findAllComponents(name, options) {\n    const { result } = options;\n\n    if (this.instance && (!name || this.name === name)) {\n      result.push(this.instance);\n    }\n\n    if (this.instance) this.instance.findAllComponents(name, options);\n  }\n\n  firstNode(skipParent) {\n    if (this.instance) return this.instance.fragment.firstNode(skipParent);\n  }\n\n  getContext(...assigns) {\n    assigns.unshift(this.instance);\n    return getRactiveContext.apply(null, assigns);\n  }\n\n  rebound(update) {\n    this.attributes.forEach(x => x.rebound(update));\n  }\n\n  render(target, occupants) {\n    if (this.isAnchor) {\n      this.rendered = true;\n      this.target = target;\n\n      if (!checking.length) {\n        checking.push(this.ractive);\n        if (occupants) {\n          this.occupants = occupants;\n          checkAnchors();\n          this.occupants = null;\n        } else {\n          runloop.scheduleTask(checkAnchors, true);\n        }\n      }\n    } else {\n      this.attributes.forEach(callRender);\n      this.eventHandlers.forEach(callRender);\n\n      if (this.extern) {\n        this.instance.delegate = false;\n        this.instance.render();\n      } else {\n        render(this.instance, target, null, occupants);\n      }\n\n      this.rendered = true;\n    }\n  }\n\n  shuffled() {\n    super.shuffled();\n    this.instance &&\n      !this.instance.isolated &&\n      this.instance.fragment &&\n      this.instance.fragment.shuffled();\n  }\n\n  toString() {\n    if (this.instance) return this.instance.toHTML();\n  }\n\n  unbind(view) {\n    if (!this.isAnchor) {\n      this.bound = false;\n\n      this.attributes.forEach(unbind);\n\n      if (view) this.instance.fragment.unbind();\n      else teardown(this.instance, () => runloop.promise());\n    }\n  }\n\n  unrender(shouldDestroy) {\n    this.shouldDestroy = shouldDestroy;\n\n    if (this.isAnchor) {\n      if (this.item) unrenderItem(this, this.item);\n      this.target = null;\n      if (!checking.length) {\n        checking.push(this.ractive);\n        runloop.scheduleTask(checkAnchors, true);\n      }\n    } else {\n      this.instance.unrender();\n      this.instance.el = this.instance.target = null;\n      this.attributes.forEach(unrender);\n      this.eventHandlers.forEach(unrender);\n    }\n\n    this.rendered = false;\n  }\n\n  update() {\n    this.dirty = false;\n    if (this.instance) {\n      this.instance.fragment.update();\n      this.attributes.forEach(update);\n      this.eventHandlers.forEach(update);\n    }\n  }\n}\n\nfunction addChild(meta) {\n  if (this.item) this.removeChild(this.item);\n\n  const child = meta.instance;\n  meta.anchor = this;\n\n  meta.up = this.up;\n  meta.name = meta.nameOption || this.name;\n  this.name = meta.name;\n\n  if (!child.isolated) child.viewmodel.attached(this.up);\n\n  // render as necessary\n  if (this.rendered) {\n    renderItem(this, meta);\n  }\n}\n\nfunction removeChild(meta) {\n  // unrender as necessary\n  if (this.item === meta) {\n    unrenderItem(this, meta);\n    this.name = this.template.n;\n  }\n}\n\nfunction renderItem(anchor, meta) {\n  if (!anchor.rendered) return;\n\n  meta.shouldDestroy = false;\n  meta.up = anchor.up;\n\n  anchor.item = meta;\n  anchor.instance = meta.instance;\n  const nextNode = anchor.up.findNextNode(anchor);\n\n  if (meta.instance.fragment.rendered) {\n    meta.instance.unrender();\n  }\n\n  meta.partials = meta.instance.partials;\n  meta.instance.partials = assign(create(meta.partials), meta.partials, anchor._partials);\n\n  meta.instance.fragment.unbind(true);\n  meta.instance.fragment.componentParent = anchor.up;\n  meta.instance.fragment.bind(meta.instance.viewmodel);\n\n  anchor.attributes.forEach(bind);\n  anchor.eventHandlers.forEach(bind);\n  anchor.attributes.forEach(callRender);\n  anchor.eventHandlers.forEach(callRender);\n\n  const target = anchor.up.findParentNode();\n  render(meta.instance, target, target.contains(nextNode) ? nextNode : null, anchor.occupants);\n\n  if (meta.lastBound !== anchor) {\n    meta.lastBound = anchor;\n  }\n}\n\nfunction unrenderItem(anchor, meta) {\n  if (!anchor.rendered) return;\n\n  meta.shouldDestroy = true;\n  meta.instance.unrender();\n\n  anchor.eventHandlers.forEach(unrender);\n  anchor.attributes.forEach(unrender);\n  anchor.eventHandlers.forEach(unbind);\n  anchor.attributes.forEach(unbind);\n\n  meta.instance.el = meta.instance.anchor = null;\n  meta.instance.fragment.componentParent = null;\n  meta.up = null;\n  meta.anchor = null;\n  anchor.item = null;\n  anchor.instance = null;\n}\n\nlet checking = [];\nexport function checkAnchors() {\n  const list = checking;\n  checking = [];\n\n  list.forEach(updateAnchors);\n}\n"",""import { findInViewHierarchy } from 'shared/registry';\nimport { warnOnce } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport noop from 'utils/noop';\nimport runloop from 'src/global/runloop';\nimport { rebindMatch } from 'src/shared/rebind';\nimport findElement from '../shared/findElement';\nimport { setupArgsFn, teardownArgsFn } from '../shared/directiveArgs';\nimport Fragment from '../../Fragment';\n\nconst missingDecorator = {\n  update: noop,\n  teardown: noop\n};\n\nexport default class Decorator {\n  constructor(options) {\n    this.owner = options.owner || options.up.owner || findElement(options.up);\n    this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n    this.up = options.up || this.owner.up;\n    this.ractive = this.owner.ractive;\n    const template = (this.template = options.template);\n\n    this.name = template.n;\n\n    this.node = null;\n    this.handle = null;\n\n    this.element.decorators.push(this);\n  }\n\n  bind() {\n    // if the owner is the elment, make sure the context includes the element\n    const frag = this.element === this.owner ? new Fragment({ owner: this.owner }) : this.up;\n    setupArgsFn(this, this.template, frag, { register: true });\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n      // decorators may be owned directly by an element or by a fragment if conditional\n      this.owner.bubble();\n      this.up.bubble();\n    }\n  }\n\n  destroyed() {\n    if (this.handle) {\n      this.handle.teardown();\n      this.handle = null;\n    }\n    this.shouldDestroy = true;\n  }\n\n  handleChange() {\n    this.bubble();\n  }\n\n  rebind(next, previous, safe) {\n    const idx = this.models.indexOf(previous);\n    if (!~idx) return;\n\n    next = rebindMatch(this.template.f.r[idx], next, previous);\n    if (next === previous) return;\n\n    previous.unregister(this);\n    this.models.splice(idx, 1, next);\n    if (next) next.addShuffleRegister(this, 'mark');\n\n    if (!safe) this.bubble();\n  }\n\n  rebound(update) {\n    teardownArgsFn(this, this.template);\n    setupArgsFn(this, this.template, this.up, { register: true });\n    if (update) this.bubble();\n  }\n\n  render() {\n    this.shouldDestroy = false;\n    if (this.handle) this.unrender();\n    runloop.scheduleTask(() => {\n      // bail if the host element has managed to become unrendered\n      if (!this.element.rendered) return;\n\n      const fn = findInViewHierarchy('decorators', this.ractive, this.name);\n\n      if (!fn) {\n        warnOnce(missingPlugin(this.name, 'decorator'));\n        this.handle = missingDecorator;\n        return;\n      }\n\n      this.node = this.element.node;\n\n      let args;\n      if (this.fn) {\n        args = this.models.map(model => {\n          if (!model) return undefined;\n\n          return model.get();\n        });\n        args = this.fn.apply(this.ractive, args);\n      }\n\n      this.handle = fn.apply(this.ractive, [this.node].concat(args));\n\n      if (!this.handle || !this.handle.teardown) {\n        throw new Error(\n          `The '${this.name}' decorator must return an object with a teardown method`\n        );\n      }\n\n      // watch out for decorators that cause their host element to be unrendered\n      if (this.shouldDestroy) this.destroyed();\n    }, true);\n  }\n\n  toString() {\n    return '';\n  }\n\n  unbind() {\n    teardownArgsFn(this, this.template);\n  }\n\n  unrender(shouldDestroy) {\n    if ((!shouldDestroy || this.element.rendered) && this.handle) {\n      this.handle.teardown();\n      this.handle = null;\n    }\n  }\n\n  update() {\n    const instance = this.handle;\n\n    if (!this.dirty) {\n      if (instance && instance.invalidate) {\n        runloop.scheduleTask(() => instance.invalidate(), true);\n      }\n      return;\n    }\n\n    this.dirty = false;\n\n    if (instance) {\n      if (!instance.update) {\n        this.unrender();\n        this.render();\n      } else {\n        const args = this.models.map(model => model && model.get());\n        instance.update.apply(this.ractive, this.fn.apply(this.ractive, args));\n      }\n    }\n  }\n}\n\nDecorator.prototype.firstNode = noop;\n"",""import noop from 'utils/noop';\nimport Item from './shared/Item';\n\nexport default class Doctype extends Item {\n  toString() {\n    return '<!DOCTYPE' + this.template.a + '>';\n  }\n}\n\nconst proto = Doctype.prototype;\nproto.bind = proto.render = proto.teardown = proto.unbind = proto.unrender = proto.update = noop;\n"",""import runloop from 'src/global/runloop';\nimport { warnOnceIfDebug } from 'utils/log';\nimport noop from 'utils/noop';\nimport findElement from '../../shared/findElement';\n\nexport default class Binding {\n  constructor(element, name = 'value') {\n    this.element = element;\n    this.ractive = element.ractive;\n    this.attribute = element.attributeByName[name];\n\n    const interpolator = this.attribute.interpolator;\n    interpolator.twowayBinding = this;\n\n    const model = interpolator.model;\n\n    if (model.isReadonly && !model.setRoot) {\n      const keypath = model.getKeypath().replace(/^@/, '');\n      warnOnceIfDebug(\n        `Cannot use two-way binding on <${\n          element.name\n        }> element: ${keypath} is read-only. To suppress this warning use <${\n          element.name\n        } twoway='false'...>`,\n        { ractive: this.ractive }\n      );\n      return false;\n    }\n\n    this.attribute.isTwoway = true;\n    this.model = model;\n\n    // initialise value, if it's undefined\n    let value = model.get();\n    this.wasUndefined = value === undefined;\n\n    if (value === undefined && this.getInitialValue) {\n      value = this.getInitialValue();\n      model.set(value);\n    }\n    this.lastVal(true, value);\n\n    const parentForm = findElement(this.element, false, 'form');\n    if (parentForm) {\n      this.resetValue = value;\n      parentForm.formBindings.push(this);\n    }\n  }\n\n  bind() {\n    this.model.registerTwowayBinding(this);\n  }\n\n  handleChange() {\n    const value = this.getValue();\n    if (this.lastVal() === value) return;\n\n    runloop.start();\n    this.attribute.locked = true;\n    this.model.set(value);\n    this.lastVal(true, value);\n\n    // if the value changes before observers fire, unlock to be updatable cause something weird and potentially freezy is up\n    if (this.model.get() !== value) this.attribute.locked = false;\n    else runloop.scheduleTask(() => (this.attribute.locked = false));\n\n    runloop.end();\n  }\n\n  lastVal(setting, value) {\n    if (setting) this.lastValue = value;\n    else return this.lastValue;\n  }\n\n  rebind(next, previous) {\n    if (this.model && this.model === previous) previous.unregisterTwowayBinding(this);\n    if (next) {\n      this.model = next;\n      runloop.scheduleTask(() => next.registerTwowayBinding(this));\n    }\n  }\n\n  rebound() {\n    if (this.model) this.model.unregisterTwowayBinding(this);\n    this.model = this.attribute.interpolator.model;\n    this.model.registerTwowayBinding(this);\n  }\n\n  render() {\n    this.node = this.element.node;\n    this.node._ractive.binding = this;\n    this.rendered = true; // TODO is this used anywhere?\n  }\n\n  setFromNode(node) {\n    this.model.set(node.value);\n  }\n\n  unbind() {\n    this.model.unregisterTwowayBinding(this);\n  }\n}\n\nBinding.prototype.unrender = noop;\n"",""import Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class CheckboxBinding extends Binding {\n  constructor(element) {\n    super(element, 'checked');\n  }\n\n  render() {\n    super.render();\n\n    this.element.on('change', handleDomEvent);\n\n    if (this.node.attachEvent) {\n      this.element.on('click', handleDomEvent);\n    }\n  }\n\n  unrender() {\n    this.element.off('change', handleDomEvent);\n    this.element.off('click', handleDomEvent);\n  }\n\n  getInitialValue() {\n    return !!this.element.getAttribute('checked');\n  }\n\n  getValue() {\n    return this.node.checked;\n  }\n\n  setFromNode(node) {\n    this.model.set(node.checked);\n  }\n}\n"",""import { removeFromArray } from 'utils/array';\nimport Binding from './Binding';\n\nexport default function getBindingGroup(group, model, getValue) {\n  const hash = `${group}-bindingGroup`;\n  return model[hash] || (model[hash] = new BindingGroup(hash, model, getValue));\n}\n\nclass BindingGroup {\n  constructor(hash, model, getValue) {\n    this.model = model;\n    this.hash = hash;\n    this.getValue = () => {\n      this.value = getValue.call(this);\n      return this.value;\n    };\n\n    this.bindings = [];\n  }\n\n  add(binding) {\n    this.bindings.push(binding);\n  }\n\n  bind() {\n    this.value = this.model.get();\n    this.model.registerTwowayBinding(this);\n    this.bound = true;\n  }\n\n  remove(binding) {\n    removeFromArray(this.bindings, binding);\n    if (!this.bindings.length) {\n      this.unbind();\n    }\n  }\n\n  unbind() {\n    this.model.unregisterTwowayBinding(this);\n    this.bound = false;\n    delete this.model[this.hash];\n  }\n}\n\nBindingGroup.prototype.rebind = Binding.prototype.rebind;\n"",""import Binding from './Binding';\nimport getBindingGroup from './getBindingGroup';\nimport handleDomEvent from './handleDomEvent';\nimport { isArray } from 'utils/is';\n\nconst push = [].push;\n\nfunction getValue() {\n  const all = this.bindings\n    .filter(b => b.node && b.node.checked)\n    .map(b => b.element.getAttribute('value'));\n  const res = [];\n  all.forEach(v => {\n    if (!this.bindings[0].arrayContains(res, v)) res.push(v);\n  });\n  return res;\n}\n\nexport default class CheckboxNameBinding extends Binding {\n  constructor(element) {\n    super(element, 'name');\n\n    this.checkboxName = true; // so that ractive.updateModel() knows what to do with this\n\n    // Each input has a reference to an array containing it and its\n    // group, as two-way binding depends on being able to ascertain\n    // the status of all inputs within the group\n    this.group = getBindingGroup('checkboxes', this.model, getValue);\n    this.group.add(this);\n\n    if (this.noInitialValue) {\n      this.group.noInitialValue = true;\n    }\n\n    // If no initial value was set, and this input is checked, we\n    // update the model\n    if (this.group.noInitialValue && this.element.getAttribute('checked')) {\n      const existingValue = this.model.get();\n      const bindingValue = this.element.getAttribute('value');\n\n      if (!this.arrayContains(existingValue, bindingValue)) {\n        push.call(existingValue, bindingValue); // to avoid triggering runloop with array adaptor\n      }\n    }\n  }\n\n  bind() {\n    if (!this.group.bound) {\n      this.group.bind();\n    }\n  }\n\n  getInitialValue() {\n    // This only gets called once per group (of inputs that\n    // share a name), because it only gets called if there\n    // isn't an initial value. By the same token, we can make\n    // a note of that fact that there was no initial value,\n    // and populate it using any `checked` attributes that\n    // exist (which users should avoid, but which we should\n    // support anyway to avoid breaking expectations)\n    this.noInitialValue = true; // TODO are noInitialValue and wasUndefined the same thing?\n    return [];\n  }\n\n  getValue() {\n    return this.group.value;\n  }\n\n  handleChange() {\n    this.isChecked = this.element.node.checked;\n    this.group.value = this.model.get().slice();\n    const value = this.element.getAttribute('value');\n    if (this.isChecked && !this.arrayContains(this.group.value, value)) {\n      this.group.value.push(value);\n    } else if (!this.isChecked && this.arrayContains(this.group.value, value)) {\n      this.removeFromArray(this.group.value, value);\n    }\n    // make sure super knows there's a change\n    this.lastValue = null;\n    super.handleChange();\n  }\n\n  render() {\n    super.render();\n\n    const node = this.node;\n\n    const existingValue = this.model.get();\n    const bindingValue = this.element.getAttribute('value');\n\n    if (isArray(existingValue)) {\n      this.isChecked = this.arrayContains(existingValue, bindingValue);\n    } else {\n      this.isChecked = this.element.compare(existingValue, bindingValue);\n    }\n    node.name = '{{' + this.model.getKeypath() + '}}';\n    node.checked = this.isChecked;\n\n    this.element.on('change', handleDomEvent);\n\n    // in case of IE emergency, bind to click event as well\n    if (this.node.attachEvent) {\n      this.element.on('click', handleDomEvent);\n    }\n  }\n\n  setFromNode(node) {\n    this.group.bindings.forEach(binding => (binding.wasUndefined = true));\n\n    if (node.checked) {\n      const valueSoFar = this.group.getValue();\n      valueSoFar.push(this.element.getAttribute('value'));\n\n      this.group.model.set(valueSoFar);\n    }\n  }\n\n  unbind() {\n    this.group.remove(this);\n  }\n\n  unrender() {\n    const el = this.element;\n\n    el.off('change', handleDomEvent);\n    el.off('click', handleDomEvent);\n  }\n\n  arrayContains(selectValue, optionValue) {\n    let i = selectValue.length;\n    while (i--) {\n      if (this.element.compare(optionValue, selectValue[i])) return true;\n    }\n    return false;\n  }\n\n  removeFromArray(array, item) {\n    if (!array) return;\n    let i = array.length;\n    while (i--) {\n      if (this.element.compare(item, array[i])) {\n        array.splice(i, 1);\n      }\n    }\n  }\n}\n"",""import Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class ContentEditableBinding extends Binding {\n  getInitialValue() {\n    return this.element.fragment ? this.element.fragment.toString() : '';\n  }\n\n  getValue() {\n    return this.element.node.innerHTML;\n  }\n\n  render() {\n    super.render();\n\n    const el = this.element;\n\n    el.on('change', handleDomEvent);\n    el.on('blur', handleDomEvent);\n\n    if (!this.ractive.lazy) {\n      el.on('input', handleDomEvent);\n\n      if (this.node.attachEvent) {\n        el.on('keyup', handleDomEvent);\n      }\n    }\n  }\n\n  setFromNode(node) {\n    this.model.set(node.innerHTML);\n  }\n\n  unrender() {\n    const el = this.element;\n\n    el.off('blur', handleDomEvent);\n    el.off('change', handleDomEvent);\n    el.off('input', handleDomEvent);\n    el.off('keyup', handleDomEvent);\n  }\n}\n"",""import { isNumeric } from 'utils/is';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nfunction handleBlur() {\n  handleDomEvent.call(this);\n\n  const value = this._ractive.binding.model.get();\n  this.value = value == undefined ? '' : value;\n}\n\nfunction handleDelay(delay) {\n  let timeout;\n\n  return function() {\n    if (timeout) clearTimeout(timeout);\n\n    timeout = setTimeout(() => {\n      const binding = this._ractive.binding;\n      if (binding.rendered) handleDomEvent.call(this);\n      timeout = null;\n    }, delay);\n  };\n}\n\nexport default class GenericBinding extends Binding {\n  getInitialValue() {\n    return '';\n  }\n\n  getValue() {\n    return this.node.value;\n  }\n\n  render() {\n    super.render();\n\n    // any lazy setting for this element overrides the root\n    // if the value is a number, it's a timeout\n    let lazy = this.ractive.lazy;\n    let timeout = false;\n    const el = this.element;\n\n    if ('lazy' in this.element) {\n      lazy = this.element.lazy;\n    }\n\n    if (isNumeric(lazy)) {\n      timeout = +lazy;\n      lazy = false;\n    }\n\n    this.handler = timeout ? handleDelay(timeout) : handleDomEvent;\n\n    const node = this.node;\n\n    el.on('change', handleDomEvent);\n\n    if (node.type !== 'file') {\n      if (!lazy) {\n        el.on('input', this.handler);\n\n        // IE is a special snowflake\n        if (node.attachEvent) {\n          el.on('keyup', this.handler);\n        }\n      }\n\n      el.on('blur', handleBlur);\n    }\n  }\n\n  unrender() {\n    const el = this.element;\n    this.rendered = false;\n\n    el.off('change', handleDomEvent);\n    el.off('input', this.handler);\n    el.off('keyup', this.handler);\n    el.off('blur', handleBlur);\n  }\n}\n"",""import GenericBinding from './GenericBinding';\n\nexport default class FileBinding extends GenericBinding {\n  getInitialValue() {\n    /* istanbul ignore next */\n    return undefined;\n  }\n\n  getValue() {\n    /* istanbul ignore next */\n    return this.node.files;\n  }\n\n  render() {\n    /* istanbul ignore next */\n    this.element.lazy = false;\n    /* istanbul ignore next */\n    super.render();\n  }\n\n  setFromNode(node) {\n    /* istanbul ignore next */\n    this.model.set(node.files);\n  }\n}\n"",""import { arrayContentsMatch } from 'utils/array';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class MultipleSelectBinding extends Binding {\n  getInitialValue() {\n    return this.element.options\n      .filter(option => option.getAttribute('selected'))\n      .map(option => option.getAttribute('value'));\n  }\n\n  getValue() {\n    const options = this.element.node.options;\n    const len = options.length;\n\n    const selectedValues = [];\n\n    for (let i = 0; i < len; i += 1) {\n      const option = options[i];\n\n      if (option.selected) {\n        const optionValue = option._ractive ? option._ractive.value : option.value;\n        selectedValues.push(optionValue);\n      }\n    }\n\n    return selectedValues;\n  }\n\n  handleChange() {\n    const attribute = this.attribute;\n    const previousValue = attribute.getValue();\n\n    const value = this.getValue();\n\n    if (previousValue === undefined || !arrayContentsMatch(value, previousValue)) {\n      super.handleChange();\n    }\n\n    return this;\n  }\n\n  render() {\n    super.render();\n\n    this.element.on('change', handleDomEvent);\n\n    if (this.model.get() === undefined) {\n      // get value from DOM, if possible\n      this.handleChange();\n    }\n  }\n\n  setFromNode(node) {\n    const selectedOptions = getSelectedOptions(node);\n    let i = selectedOptions.length;\n    const result = new Array(i);\n\n    while (i--) {\n      const option = selectedOptions[i];\n      result[i] = option._ractive ? option._ractive.value : option.value;\n    }\n\n    this.model.set(result);\n  }\n\n  unrender() {\n    this.element.off('change', handleDomEvent);\n  }\n}\n"",""import GenericBinding from './GenericBinding';\n\nexport default class NumericBinding extends GenericBinding {\n  getInitialValue() {\n    return undefined;\n  }\n\n  getValue() {\n    const value = parseFloat(this.node.value);\n    return isNaN(value) ? undefined : value;\n  }\n\n  setFromNode(node) {\n    const value = parseFloat(node.value);\n    if (!isNaN(value)) this.model.set(value);\n  }\n}\n"",""import runloop from 'src/global/runloop';\nimport { removeFromArray } from 'utils/array';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nconst siblings = {};\n\nfunction getSiblings(hash) {\n  return siblings[hash] || (siblings[hash] = []);\n}\n\nexport default class RadioBinding extends Binding {\n  constructor(element) {\n    super(element, 'checked');\n\n    this.siblings = getSiblings(this.ractive._guid + this.element.getAttribute('name'));\n    this.siblings.push(this);\n  }\n\n  getValue() {\n    return this.node.checked;\n  }\n\n  handleChange() {\n    runloop.start();\n\n    this.siblings.forEach(binding => {\n      binding.model.set(binding.getValue());\n    });\n\n    runloop.end();\n  }\n\n  render() {\n    super.render();\n\n    this.element.on('change', handleDomEvent);\n\n    if (this.node.attachEvent) {\n      this.element.on('click', handleDomEvent);\n    }\n  }\n\n  setFromNode(node) {\n    this.model.set(node.checked);\n  }\n\n  unbind() {\n    removeFromArray(this.siblings, this);\n  }\n\n  unrender() {\n    this.element.off('change', handleDomEvent);\n    this.element.off('click', handleDomEvent);\n  }\n}\n"",""import Binding from './Binding';\nimport getBindingGroup from './getBindingGroup';\nimport handleDomEvent from './handleDomEvent';\n\nfunction getValue() {\n  const checked = this.bindings.filter(b => b.node.checked);\n  if (checked.length > 0) {\n    return checked[0].element.getAttribute('value');\n  }\n}\n\nexport default class RadioNameBinding extends Binding {\n  constructor(element) {\n    super(element, 'name');\n\n    this.group = getBindingGroup('radioname', this.model, getValue);\n    this.group.add(this);\n\n    if (element.checked) {\n      this.group.value = this.getValue();\n    }\n\n    this.attribute.interpolator.pathChanged = () => this.updateName();\n  }\n\n  bind() {\n    if (!this.group.bound) {\n      this.group.bind();\n    }\n  }\n\n  getInitialValue() {\n    if (this.element.getAttribute('checked')) {\n      return this.element.getAttribute('value');\n    }\n  }\n\n  getValue() {\n    return this.element.getAttribute('value');\n  }\n\n  handleChange() {\n    // If this <input> is the one that's checked, then the value of its\n    // `name` model gets set to its value\n    if (this.node.checked) {\n      this.group.value = this.getValue();\n      super.handleChange();\n    }\n\n    this.updateName();\n  }\n\n  lastVal(setting, value) {\n    if (!this.group) return;\n    if (setting) this.group.lastValue = value;\n    else return this.group.lastValue;\n  }\n\n  rebind(next, previous) {\n    super.rebind(next, previous);\n    this.updateName();\n  }\n\n  rebound(update) {\n    super.rebound(update);\n    this.updateName();\n  }\n\n  render() {\n    super.render();\n\n    const node = this.node;\n\n    this.updateName();\n    node.checked = this.element.compare(this.model.get(), this.element.getAttribute('value'));\n\n    this.element.on('change', handleDomEvent);\n\n    if (node.attachEvent) {\n      this.element.on('click', handleDomEvent);\n    }\n  }\n\n  setFromNode(node) {\n    if (node.checked) {\n      this.group.model.set(this.element.getAttribute('value'));\n    }\n  }\n\n  unbind() {\n    this.group.remove(this);\n  }\n\n  unrender() {\n    const el = this.element;\n\n    el.off('change', handleDomEvent);\n    el.off('click', handleDomEvent);\n  }\n\n  updateName() {\n    if (this.node) this.node.name = `{{${this.model.getKeypath()}}}`;\n  }\n}\n"",""import runloop from 'src/global/runloop';\nimport getSelectedOptions from 'utils/getSelectedOptions';\nimport Binding from './Binding';\nimport handleDomEvent from './handleDomEvent';\n\nexport default class SingleSelectBinding extends Binding {\n  forceUpdate() {\n    const value = this.getValue();\n\n    if (value !== undefined) {\n      this.attribute.locked = true;\n      runloop.scheduleTask(() => (this.attribute.locked = false));\n      this.model.set(value);\n    }\n  }\n\n  getInitialValue() {\n    if (this.element.getAttribute('value') !== undefined) {\n      return;\n    }\n\n    const options = this.element.options;\n    const len = options.length;\n\n    if (!len) return;\n\n    let value;\n    let optionWasSelected;\n    let i = len;\n\n    // take the final selected option...\n    while (i--) {\n      const option = options[i];\n\n      if (option.getAttribute('selected')) {\n        if (!option.getAttribute('disabled')) {\n          value = option.getAttribute('value');\n        }\n\n        optionWasSelected = true;\n        break;\n      }\n    }\n\n    // or the first non-disabled option, if none are selected\n    if (!optionWasSelected) {\n      while (++i < len) {\n        if (!options[i].getAttribute('disabled')) {\n          value = options[i].getAttribute('value');\n          break;\n        }\n      }\n    }\n\n    // This is an optimisation (aka hack) that allows us to forgo some\n    // other more expensive work\n    // TODO does it still work? seems at odds with new architecture\n    if (value !== undefined) {\n      this.element.attributeByName.value.value = value;\n    }\n\n    return value;\n  }\n\n  getValue() {\n    const options = this.node.options;\n    const len = options.length;\n\n    let i;\n    for (i = 0; i < len; i += 1) {\n      const option = options[i];\n\n      if (options[i].selected && !options[i].disabled) {\n        return option._ractive ? option._ractive.value : option.value;\n      }\n    }\n  }\n\n  render() {\n    super.render();\n    this.element.on('change', handleDomEvent);\n  }\n\n  setFromNode(node) {\n    const option = getSelectedOptions(node)[0];\n    this.model.set(option._ractive ? option._ractive.value : option.value);\n  }\n\n  unrender() {\n    this.element.off('change', handleDomEvent);\n  }\n}\n"",""import { ATTRIBUTE, BINDING_FLAG, DECORATOR, DELEGATE_FLAG, EVENT, TRANSITION } from 'config/types';\nimport { win } from 'config/environment';\nimport { html, svg } from 'config/namespaces';\nimport { toArray, addToArray, removeFromArray } from 'utils/array';\nimport { escapeHtml, voidElements } from 'utils/html';\nimport { createElement, detachNode, matches, safeAttributeString } from 'utils/dom';\nimport runloop from 'src/global/runloop';\nimport Context from 'shared/Context';\nimport { destroyed } from 'shared/methodCallers';\nimport { ContainerItem } from './shared/Item';\nimport Fragment from '../Fragment';\nimport ConditionalAttribute from './element/ConditionalAttribute';\nimport createItem from './createItem';\nimport findElement from './shared/findElement';\nimport selectBinding from './element/binding/selectBinding';\nimport { assign, create, defineProperty, keys } from 'utils/object';\nimport { isString } from 'utils/is';\n\nconst endsWithSemi = /;\\s*$/;\n\nexport default class Element extends ContainerItem {\n  constructor(options) {\n    super(options);\n\n    this.name = options.template.e.toLowerCase();\n\n    // find parent element\n    this.parent = findElement(this.up, false);\n\n    if (this.parent && this.parent.name === 'option') {\n      throw new Error(\n        `An <option> element cannot contain other elements (encountered <${this.name}>)`\n      );\n    }\n\n    this.decorators = [];\n\n    // create attributes\n    this.attributeByName = {};\n\n    let attrs;\n    let n, attr, val, cls, name, template, leftovers;\n\n    const m = this.template.m;\n    const len = (m && m.length) || 0;\n\n    for (let i = 0; i < len; i++) {\n      template = m[i];\n      if (template.g) {\n        (this.statics || (this.statics = {}))[template.n] = isString(template.f)\n          ? template.f\n          : template.n;\n      } else {\n        switch (template.t) {\n          case ATTRIBUTE:\n          case BINDING_FLAG:\n          case DECORATOR:\n          case EVENT:\n          case TRANSITION:\n            attr = createItem({\n              owner: this,\n              up: this.up,\n              template\n            });\n\n            n = template.n;\n\n            attrs = attrs || (attrs = this.attributes = []);\n\n            if (n === 'value') val = attr;\n            else if (n === 'name') name = attr;\n            else if (n === 'class') cls = attr;\n            else attrs.push(attr);\n\n            break;\n\n          case DELEGATE_FLAG:\n            this.delegate = false;\n            break;\n\n          default:\n            (leftovers || (leftovers = [])).push(template);\n            break;\n        }\n      }\n    }\n\n    if (val) attrs.push(val);\n    if (name) attrs.push(name);\n    if (cls) attrs.unshift(cls);\n\n    if (leftovers) {\n      (attrs || (this.attributes = [])).push(\n        new ConditionalAttribute({\n          owner: this,\n          up: this.up,\n          template: leftovers\n        })\n      );\n\n      // empty leftovers array\n      leftovers = [];\n    }\n\n    // create children\n    if (options.template.f && !options.deferContent) {\n      this.fragment = new Fragment({\n        template: options.template.f,\n        owner: this,\n        cssIds: null\n      });\n    }\n\n    this.binding = null; // filled in later\n  }\n\n  bind() {\n    const attrs = this.attributes;\n    if (attrs) {\n      attrs.binding = true;\n      const len = attrs.length;\n      for (let i = 0; i < len; i++) attrs[i].bind();\n      attrs.binding = false;\n    }\n\n    if (this.fragment) this.fragment.bind();\n\n    // create two-way binding if necessary\n    if (!this.binding) this.recreateTwowayBinding();\n    else this.binding.bind();\n  }\n\n  createTwowayBinding() {\n    if ('twoway' in this ? this.twoway : this.ractive.twoway) {\n      const Binding = selectBinding(this);\n      if (Binding) {\n        const binding = new Binding(this);\n        if (binding && binding.model) return binding;\n      }\n    }\n  }\n\n  destroyed() {\n    if (this.attributes) this.attributes.forEach(destroyed);\n    if (this.fragment) this.fragment.destroyed();\n  }\n\n  detach() {\n    // if this element is no longer rendered, the transitions are complete and the attributes can be torn down\n    if (!this.rendered) this.destroyed();\n\n    return detachNode(this.node);\n  }\n\n  find(selector, options) {\n    if (this.node && matches(this.node, selector)) return this.node;\n    if (this.fragment) {\n      return this.fragment.find(selector, options);\n    }\n  }\n\n  findAll(selector, options) {\n    const { result } = options;\n\n    if (matches(this.node, selector)) {\n      result.push(this.node);\n    }\n\n    if (this.fragment) {\n      this.fragment.findAll(selector, options);\n    }\n  }\n\n  findNextNode() {\n    return null;\n  }\n\n  firstNode() {\n    return this.node;\n  }\n\n  getAttribute(name) {\n    if (this.statics && name in this.statics) return this.statics[name];\n    const attribute = this.attributeByName[name];\n    return attribute ? attribute.getValue() : undefined;\n  }\n\n  getContext(...assigns) {\n    if (this.fragment) return this.fragment.getContext(...assigns);\n\n    if (!this.ctx) this.ctx = new Context(this.up, this);\n    assigns.unshift(create(this.ctx));\n    return assign.apply(null, assigns);\n  }\n\n  off(event, callback, capture = false) {\n    const delegate = this.up.delegate;\n    const ref = this.listeners && this.listeners[event];\n\n    if (!ref) return;\n    removeFromArray(ref, callback);\n\n    if (delegate) {\n      const listeners =\n        (delegate.listeners || (delegate.listeners = [])) &&\n        (delegate.listeners[event] || (delegate.listeners[event] = []));\n      if (listeners.refs && !--listeners.refs) delegate.off(event, delegateHandler, true);\n    } else if (this.rendered) {\n      const n = this.node;\n      const add = n.addEventListener;\n      const rem = n.removeEventListener;\n\n      if (!ref.length) {\n        rem.call(n, event, handler, capture);\n      } else if (ref.length && !ref.refs && capture) {\n        rem.call(n, event, handler, true);\n        add.call(n, event, handler, false);\n      }\n    }\n  }\n\n  on(event, callback, capture = false) {\n    const delegate = this.up.delegate;\n    const ref = (this.listeners || (this.listeners = {}))[event] || (this.listeners[event] = []);\n\n    if (delegate) {\n      const listeners =\n        ((delegate.listeners || (delegate.listeners = [])) && delegate.listeners[event]) ||\n        (delegate.listeners[event] = []);\n      if (!listeners.refs) {\n        listeners.refs = 0;\n        delegate.on(event, delegateHandler, true);\n        listeners.refs++;\n      } else {\n        listeners.refs++;\n      }\n    } else if (this.rendered) {\n      const n = this.node;\n      const add = n.addEventListener;\n      const rem = n.removeEventListener;\n\n      if (!ref.length) {\n        add.call(n, event, handler, capture);\n      } else if (ref.length && !ref.refs && capture) {\n        rem.call(n, event, handler, false);\n        add.call(n, event, handler, true);\n      }\n    }\n\n    addToArray(this.listeners[event], callback);\n  }\n\n  recreateTwowayBinding() {\n    if (this.binding) {\n      this.binding.unbind();\n      this.binding.unrender();\n    }\n\n    if ((this.binding = this.createTwowayBinding())) {\n      this.binding.bind();\n      if (this.rendered) this.binding.render();\n    }\n  }\n\n  rebound(update) {\n    super.rebound(update);\n    if (this.attributes) this.attributes.forEach(x => x.rebound(update));\n    if (this.binding) this.binding.rebound(update);\n  }\n\n  render(target, occupants) {\n    // TODO determine correct namespace\n    this.namespace = getNamespace(this);\n\n    let node;\n    let existing = false;\n\n    if (occupants) {\n      let n;\n      while ((n = occupants.shift())) {\n        if (\n          n.nodeName.toUpperCase() === this.template.e.toUpperCase() &&\n          n.namespaceURI === this.namespace\n        ) {\n          this.node = node = n;\n          existing = true;\n          break;\n        } else {\n          detachNode(n);\n        }\n      }\n    }\n\n    if (!existing && this.node) {\n      node = this.node;\n      target.appendChild(node);\n      existing = true;\n    }\n\n    if (!node) {\n      const name = this.template.e;\n      node = createElement(\n        this.namespace === html ? name.toLowerCase() : name,\n        this.namespace,\n        this.getAttribute('is')\n      );\n      this.node = node;\n    }\n\n    // tie the node to this vdom element\n    defineProperty(node, '_ractive', {\n      value: {\n        proxy: this\n      },\n      configurable: true\n    });\n\n    if (this.statics) {\n      keys(this.statics).forEach(k => {\n        node.setAttribute(k, this.statics[k]);\n      });\n    }\n\n    if (existing && this.foundNode) this.foundNode(node);\n\n    // register intro before rendering content so children can find the intro\n    const intro = this.intro;\n    if (intro && intro.shouldFire('intro')) {\n      intro.isIntro = true;\n      intro.isOutro = false;\n      runloop.registerTransition(intro);\n    }\n\n    if (this.fragment) {\n      const children = existing ? toArray(node.childNodes) : undefined;\n\n      this.fragment.render(node, children);\n\n      // clean up leftover children\n      if (children) {\n        children.forEach(detachNode);\n      }\n    }\n\n    if (existing) {\n      // store initial values for two-way binding\n      if (this.binding && this.binding.wasUndefined) this.binding.setFromNode(node);\n      // remove unused attributes\n      let i = node.attributes.length;\n      while (i--) {\n        const name = node.attributes[i].name;\n        if (!(name in this.attributeByName) && (!this.statics || !(name in this.statics)))\n          node.removeAttribute(name);\n      }\n    }\n\n    // Is this a top-level node of a component? If so, we may need to add\n    // a data-ractive-css attribute, for CSS encapsulation\n    if (this.up.cssIds) {\n      node.setAttribute('data-ractive-css', this.up.cssIds.map(x => `{${x}}`).join(' '));\n    }\n\n    if (this.attributes) {\n      const len = this.attributes.length;\n      for (let i = 0; i < len; i++) this.attributes[i].render();\n    }\n    if (this.binding) this.binding.render();\n\n    if (!this.up.delegate && this.listeners) {\n      const ls = this.listeners;\n      for (const k in ls) {\n        if (ls[k] && ls[k].length) this.node.addEventListener(k, handler, !!ls[k].refs);\n      }\n    }\n\n    if (!existing) {\n      target.appendChild(node);\n    }\n\n    this.rendered = true;\n  }\n\n  toString() {\n    const tagName = this.template.e;\n\n    let attrs = (this.attributes && this.attributes.map(stringifyAttribute).join('')) || '';\n\n    if (this.statics)\n      keys(this.statics).forEach(\n        k => k !== 'class' && k !== 'style' && (attrs = ` ${k}=\""${this.statics[k]}\""` + attrs)\n      );\n\n    // Special case - selected options\n    if (this.name === 'option' && this.isSelected()) {\n      attrs += ' selected';\n    }\n\n    // Special case - two-way radio name bindings\n    if (this.name === 'input' && inputIsCheckedRadio(this)) {\n      attrs += ' checked';\n    }\n\n    // Special case style and class attributes and directives\n    let style = this.statics ? this.statics.style : undefined;\n    let cls = this.statics ? this.statics.class : undefined;\n    this.attributes &&\n      this.attributes.forEach(attr => {\n        if (attr.name === 'class') {\n          cls = (cls || '') + (cls ? ' ' : '') + safeAttributeString(attr.getString());\n        } else if (attr.name === 'style') {\n          style = (style || '') + (style ? ' ' : '') + safeAttributeString(attr.getString());\n          if (style && !endsWithSemi.test(style)) style += ';';\n        } else if (attr.style) {\n          style =\n            (style || '') +\n            (style ? ' ' : '') +\n            `${attr.style}: ${safeAttributeString(attr.getString())};`;\n        } else if (attr.inlineClass && attr.getValue()) {\n          cls = (cls || '') + (cls ? ' ' : '') + attr.inlineClass;\n        }\n      });\n    // put classes first, then inline style\n    if (style !== undefined) attrs = ' style' + (style ? `=\""${style}\""` : '') + attrs;\n    if (cls !== undefined) attrs = ' class' + (cls ? `=\""${cls}\""` : '') + attrs;\n\n    if (this.up.cssIds) {\n      attrs += ` data-ractive-css=\""${this.up.cssIds.map(x => `{${x}}`).join(' ')}\""`;\n    }\n\n    let str = `<${tagName}${attrs}>`;\n\n    if (voidElements[this.name.toLowerCase()]) return str;\n\n    // Special case - textarea\n    if (this.name === 'textarea' && this.getAttribute('value') !== undefined) {\n      str += escapeHtml(this.getAttribute('value'));\n    } else if (this.getAttribute('contenteditable') !== undefined) {\n      // Special case - contenteditable\n      str += this.getAttribute('value') || '';\n    }\n\n    if (this.fragment) {\n      str += this.fragment.toString(!/^(?:script|style)$/i.test(this.template.e)); // escape text unless script/style\n    }\n\n    str += `</${tagName}>`;\n    return str;\n  }\n\n  unbind(view) {\n    const attrs = this.attributes;\n    if (attrs) {\n      attrs.unbinding = true;\n      const len = attrs.length;\n      for (let i = 0; i < len; i++) attrs[i].unbind(view);\n      attrs.unbinding = false;\n    }\n\n    if (this.binding) this.binding.unbind(view);\n    if (this.fragment) this.fragment.unbind(view);\n  }\n\n  unrender(shouldDestroy) {\n    if (!this.rendered) return;\n    this.rendered = false;\n\n    // unrendering before intro completed? complete it now\n    // TODO should be an API for aborting transitions\n    const transition = this.intro;\n    if (transition && transition.complete) transition.complete();\n\n    // Detach as soon as we can\n    if (this.name === 'option') {\n      // <option> elements detach immediately, so that\n      // their parent <select> element syncs correctly, and\n      // since option elements can't have transitions anyway\n      this.detach();\n    } else if (shouldDestroy) {\n      runloop.detachWhenReady(this);\n    }\n\n    // outro transition\n    const outro = this.outro;\n    if (outro && outro.shouldFire('outro')) {\n      outro.isIntro = false;\n      outro.isOutro = true;\n      runloop.registerTransition(outro);\n    }\n\n    if (this.fragment) this.fragment.unrender();\n\n    if (this.binding) this.binding.unrender();\n  }\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n\n      const attrs = this.attributes;\n      if (attrs) {\n        const len = attrs.length;\n        for (let i = 0; i < len; i++) attrs[i].update();\n      }\n\n      if (this.fragment) this.fragment.update();\n    }\n  }\n}\n\nfunction inputIsCheckedRadio(element) {\n  const nameAttr = element.attributeByName.name;\n  return (\n    element.getAttribute('type') === 'radio' &&\n    (nameAttr || {}).interpolator &&\n    element.getAttribute('value') === nameAttr.interpolator.model.get()\n  );\n}\n\nfunction stringifyAttribute(attribute) {\n  const str = attribute.toString();\n  return str ? ' ' + str : '';\n}\n\nfunction getNamespace(element) {\n  // Use specified namespace...\n  const xmlns = element.getAttribute('xmlns');\n  if (xmlns) return xmlns;\n\n  // ...or SVG namespace, if this is an <svg> element\n  if (element.name === 'svg') return svg;\n\n  const parent = element.parent;\n\n  if (parent) {\n    // ...or HTML, if the parent is a <foreignObject>\n    if (parent.name === 'foreignobject') return html;\n\n    // ...or inherit from the parent node\n    return parent.node.namespaceURI;\n  }\n\n  return element.ractive.el.namespaceURI;\n}\n\nfunction delegateHandler(ev) {\n  const name = ev.type;\n  const end = ev.currentTarget;\n  const endEl = end._ractive && end._ractive.proxy;\n  let node = ev.target;\n  let bubble = true;\n  let listeners;\n\n  // starting with the origin node, walk up the DOM looking for ractive nodes with a matching event listener\n  while (bubble && node && node !== end) {\n    const proxy = node._ractive && node._ractive.proxy;\n    if (proxy && proxy.up.delegate === endEl && shouldFire(ev, node, end)) {\n      listeners = proxy.listeners && proxy.listeners[name];\n\n      if (listeners) {\n        const len = listeners.length;\n        for (let i = 0; i < len; i++) bubble = listeners[i].call(node, ev) !== false && bubble;\n      }\n    }\n\n    node = node.parentNode || node.correspondingUseElement; // SVG with a <use> element in certain environments\n  }\n\n  return bubble;\n}\n\nconst UIEvent = win !== null ? win.UIEvent : null;\nfunction shouldFire(event, start, end) {\n  if (UIEvent && event instanceof UIEvent) {\n    let node = start;\n    while (node && node !== end) {\n      if (node.disabled) return false;\n      node = node.parentNode || node.correspondingUseElement;\n    }\n  }\n\n  return true;\n}\n\nfunction handler(ev) {\n  const el = this._ractive.proxy;\n  let listeners;\n  if (el.listeners && (listeners = el.listeners[ev.type])) {\n    const len = listeners.length;\n    for (let i = 0; i < len; i++) listeners[i].call(this, ev);\n  }\n}\n"",""import runloop from 'src/global/runloop';\nimport Element from '../../Element';\n\nexport default class Form extends Element {\n  constructor(options) {\n    super(options);\n    this.formBindings = [];\n  }\n\n  render(target, occupants) {\n    super.render(target, occupants);\n    this.on('reset', handleReset);\n  }\n\n  unrender(shouldDestroy) {\n    this.off('reset', handleReset);\n    super.unrender(shouldDestroy);\n  }\n}\n\nfunction handleReset() {\n  const element = this._ractive.proxy;\n\n  runloop.start();\n  element.formBindings.forEach(updateModel);\n  runloop.end();\n}\n\nfunction updateModel(binding) {\n  binding.model.set(binding.resetValue);\n}\n"",""import { fatal } from 'utils/log';\nimport runloop from 'src/global/runloop';\n\nclass DOMEvent {\n  constructor(name, owner) {\n    if (name.indexOf('*') !== -1) {\n      fatal(\n        `Only component proxy-events may contain \""*\"" wildcards, <${\n          owner.name\n        } on-${name}=\""...\""/> is not valid`\n      );\n    }\n\n    this.name = name;\n    this.owner = owner;\n    this.handler = null;\n  }\n\n  bind() {}\n\n  render(directive) {\n    const name = this.name;\n\n    const register = () => {\n      const node = this.owner.node;\n\n      this.owner.on(\n        name,\n        (this.handler = event => {\n          return directive.fire({\n            node,\n            original: event,\n            event,\n            name\n          });\n        })\n      );\n    };\n\n    if (name !== 'load') {\n      // schedule events so that they take place after twoway binding\n      runloop.scheduleTask(register, true);\n    } else {\n      // unless its a load event\n      register();\n    }\n  }\n\n  unbind() {}\n\n  unrender() {\n    if (this.handler) this.owner.off(this.name, this.handler);\n  }\n}\n\nclass CustomEvent {\n  constructor(eventPlugin, owner, name, args) {\n    this.eventPlugin = eventPlugin;\n    this.owner = owner;\n    this.name = name;\n    this.handler = null;\n    this.args = args;\n  }\n\n  bind() {}\n\n  render(directive) {\n    runloop.scheduleTask(() => {\n      const node = this.owner.node;\n\n      this.handler = this.eventPlugin.apply(\n        this.owner.ractive,\n        [\n          node,\n          (event = {}) => {\n            if (event.original) event.event = event.original;\n            else event.original = event.event;\n\n            event.name = this.name;\n            event.node = event.node || node;\n            return directive.fire(event);\n          }\n        ].concat(this.args || [])\n      );\n    });\n  }\n\n  unbind() {}\n\n  unrender() {\n    this.handler.teardown();\n  }\n}\n\nexport { DOMEvent, CustomEvent };\n"",""import Context from '../../../shared/Context';\n\nexport default class RactiveEvent {\n  constructor(component, name) {\n    this.component = component;\n    this.name = name;\n    this.handler = null;\n  }\n\n  bind(directive) {\n    const ractive = this.component.instance;\n\n    this.handler = ractive.on(this.name, (...args) => {\n      // watch for reproxy\n      if (args[0] instanceof Context) {\n        const ctx = args.shift();\n        ctx.component = ractive;\n        directive.fire(ctx, args);\n      } else {\n        directive.fire({}, args);\n      }\n\n      // cancel bubbling\n      return false;\n    });\n  }\n\n  render() {}\n\n  unbind() {\n    this.handler.cancel();\n  }\n\n  unrender() {}\n}\n"",""import { ANCHOR, COMPONENT } from 'config/types';\nimport { warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport fireEvent from 'src/events/fireEvent';\nimport { splitKeypath } from 'shared/keypaths';\nimport { findInViewHierarchy } from 'shared/registry';\nimport findElement from './findElement';\nimport { DOMEvent, CustomEvent } from '../element/ElementEvents';\nimport RactiveEvent from '../component/RactiveEvent';\nimport { resolveArgs, setupArgsFn } from '../shared/directiveArgs';\nimport Context from 'src/shared/Context';\nimport { isArray, isString } from 'utils/is';\nimport getFunction from 'shared/getFunction';\nimport resolveReference from '../../resolvers/resolveReference';\n\nconst specialPattern = /^(event|arguments|@node|@event|@context)(\\..+)?$/;\nconst dollarArgsPattern = /^\\$(\\d+)(\\..+)?$/;\n\nexport default class EventDirective {\n  constructor(options) {\n    this.owner = options.owner || options.up.owner || findElement(options.up);\n    this.element = this.owner.attributeByName ? this.owner : findElement(options.up, true);\n    this.template = options.template;\n    this.up = options.up;\n    this.ractive = options.up.ractive;\n    this.events = [];\n  }\n\n  bind() {\n    // sometimes anchors will cause an unbind without unrender\n    if (this.events.length) {\n      this.events.forEach(e => e.unrender());\n      this.events = [];\n    }\n\n    if (this.element.type === COMPONENT || this.element.type === ANCHOR) {\n      this.template.n.forEach(n => {\n        this.events.push(new RactiveEvent(this.element, n));\n      });\n    } else {\n      let args;\n      if ((args = this.template.a)) {\n        const rs = args.r.map(r => {\n          const model = resolveReference(this.up, r);\n          return model ? model.get() : undefined;\n        });\n        try {\n          args = getFunction(args.s, rs.length).apply(null, rs);\n        } catch (err) {\n          args = null;\n          warnIfDebug(\n            `Failed to compute args for event on-${this.template.n.join('- ')}: ${err.message ||\n              err}`\n          );\n        }\n      }\n\n      this.template.n.forEach(n => {\n        const fn = findInViewHierarchy('events', this.ractive, n);\n        if (fn) {\n          this.events.push(new CustomEvent(fn, this.element, n, args));\n        } else {\n          this.events.push(new DOMEvent(n, this.element));\n        }\n      });\n    }\n\n    // method calls\n    this.models = null;\n\n    addToArray(this.element.events || (this.element.events = []), this);\n\n    setupArgsFn(this, this.template);\n    if (!this.fn) this.action = this.template.f;\n\n    this.events.forEach(e => e.bind(this));\n  }\n\n  destroyed() {\n    this.events.forEach(e => e.unrender());\n  }\n\n  fire(event, args = []) {\n    const context =\n      event instanceof Context && event.refire ? event : this.element.getContext(event);\n\n    if (this.fn) {\n      const values = [];\n\n      const models = resolveArgs(this, this.template, this.up, {\n        specialRef(ref) {\n          const specialMatch = specialPattern.exec(ref);\n          if (specialMatch) {\n            // on-click=\""foo(event.node)\""\n            return {\n              special: specialMatch[1],\n              keys: specialMatch[2] ? splitKeypath(specialMatch[2].substr(1)) : []\n            };\n          }\n\n          const dollarMatch = dollarArgsPattern.exec(ref);\n          if (dollarMatch) {\n            // on-click=\""foo($1)\""\n            return {\n              special: 'arguments',\n              keys: [dollarMatch[1] - 1].concat(\n                dollarMatch[2] ? splitKeypath(dollarMatch[2].substr(1)) : []\n              )\n            };\n          }\n        }\n      });\n\n      if (models) {\n        models.forEach(model => {\n          if (!model) return values.push(undefined);\n\n          if (model.special) {\n            const which = model.special;\n            let obj;\n\n            if (which === '@node') {\n              obj = this.element.node;\n            } else if (which === '@event') {\n              obj = event && event.event;\n            } else if (which === 'event') {\n              warnOnceIfDebug(\n                `The event reference available to event directives is deprecated and should be replaced with @context and @event`\n              );\n              obj = context;\n            } else if (which === '@context') {\n              obj = context;\n            } else {\n              obj = args;\n            }\n\n            const keys = model.keys.slice();\n\n            while (obj && keys.length) obj = obj[keys.shift()];\n            return values.push(obj);\n          }\n\n          if (model.wrapper) {\n            return values.push(model.wrapperValue);\n          }\n\n          values.push(model.get());\n        });\n      }\n\n      // make event available as `this.event`\n      const ractive = this.ractive;\n      const oldEvent = ractive.event;\n\n      ractive.event = context;\n      const returned = this.fn.apply(ractive, values);\n      let result = returned.pop();\n\n      // Auto prevent and stop if return is explicitly false\n      if (result === false) {\n        const original = event ? event.original : undefined;\n        if (original) {\n          original.preventDefault && original.preventDefault();\n          original.stopPropagation && original.stopPropagation();\n        } else {\n          warnOnceIfDebug(\n            `handler '${this.template.n.join(\n              ' '\n            )}' returned false, but there is no event available to cancel`\n          );\n        }\n      } else if (!returned.length && isArray(result) && isString(result[0])) {\n        // watch for proxy events\n        result = fireEvent(this.ractive, result.shift(), context, result);\n      }\n\n      ractive.event = oldEvent;\n\n      return result;\n    } else {\n      return fireEvent(this.ractive, this.action, context, args);\n    }\n  }\n\n  handleChange() {}\n\n  render() {\n    this.events.forEach(e => e.render(this));\n  }\n\n  toString() {\n    return '';\n  }\n\n  unbind(view) {\n    removeFromArray(this.element.events, this);\n    this.events.forEach(e => e.unbind(view));\n  }\n\n  unrender() {\n    this.events.forEach(e => e.unrender());\n  }\n}\n\nconst proto = EventDirective.prototype;\nproto.firstNode = proto.rebound = proto.update = noop;\n"",""import { rebindMatch } from 'shared/rebind';\nimport Item, { ContainerItem } from './Item';\nimport resolve from '../../resolvers/resolve';\nimport { assign } from 'utils/object';\n\nexport default class Mustache extends Item {\n  constructor(options) {\n    super(options);\n\n    if (options.owner) this.parent = options.owner;\n\n    this.isStatic = !!options.template.s;\n\n    this.model = null;\n    this.dirty = false;\n  }\n\n  bind(pre) {\n    // yield mustaches and inner contexts should resolve in container context\n    const start = this.template.y\n      ? this.template.y.containerFragment\n      : this.containerFragment || this.up;\n    // try to find a model for this view\n    const model = pre || resolve(start, this.template);\n\n    if (model) {\n      const value = model.get();\n\n      if (this.isStatic) {\n        this.model = { get: () => value };\n        model.unreference();\n        return;\n      }\n\n      model.register(this);\n      this.model = model;\n    }\n  }\n\n  handleChange() {\n    this.bubble();\n  }\n\n  rebind(next, previous, safe) {\n    if (this.isStatic) return;\n\n    next = rebindMatch(this.template, next, previous, this.up);\n    if (next === this.model) return false;\n\n    if (this.model) {\n      this.model.unregister(this);\n    }\n    if (next) next.addShuffleRegister(this, 'mark');\n    this.model = next;\n    if (!safe) this.handleChange();\n    return true;\n  }\n\n  rebound(update) {\n    if (this.model) {\n      if (this.model.rebound) this.model.rebound(update);\n      else {\n        // check to see if the model actually changed...\n        // yield mustaches and inner contexts should resolve in container context\n        const start = this.template.y\n          ? this.template.y.containerFragment\n          : this.containerFragment || this.up;\n        // try to find a model for this view\n        const model = resolve(start, this.template);\n        if (model !== this.model) {\n          this.model.unregister(this);\n          this.bind(model);\n        }\n      }\n\n      if (update) this.bubble();\n    }\n    if (this.fragment) this.fragment.rebound(update);\n  }\n\n  unbind() {\n    if (!this.isStatic) {\n      this.model && this.model.unregister(this);\n      this.model = undefined;\n    }\n  }\n}\n\nexport function MustacheContainer(options) {\n  Mustache.call(this, options);\n}\n\nconst proto = (MustacheContainer.prototype = Object.create(ContainerItem.prototype));\n\nassign(proto, Mustache.prototype, { constructor: MustacheContainer });\n"",""import progressiveText from './shared/progressiveText';\nimport { escapeHtml } from 'utils/html';\nimport { safeToStringValue } from 'utils/dom';\nimport { detachNode } from 'utils/dom';\nimport Mustache from './shared/Mustache';\nimport { inAttributes } from './element/ConditionalAttribute';\n\nexport default class Interpolator extends Mustache {\n  bubble() {\n    if (this.owner) this.owner.bubble();\n    super.bubble();\n  }\n\n  detach() {\n    return detachNode(this.node);\n  }\n\n  firstNode() {\n    return this.node;\n  }\n\n  getString() {\n    return this.model ? safeToStringValue(this.model.get()) : '';\n  }\n\n  render(target, occupants) {\n    if (inAttributes()) return;\n    const value = (this.value = this.getString());\n\n    this.rendered = true;\n\n    progressiveText(this, target, occupants, value);\n  }\n\n  toString(escape) {\n    const string = this.getString();\n    return escape ? escapeHtml(string) : string;\n  }\n\n  unrender(shouldDestroy) {\n    if (shouldDestroy) this.detach();\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n      if (this.rendered) {\n        const value = this.getString();\n        if (value !== this.value) this.node.data = this.value = value;\n      }\n    }\n  }\n\n  valueOf() {\n    return this.model ? this.model.get() : undefined;\n  }\n}\n"",""import Element from '../../Element';\nimport { isFunction } from 'utils/is';\n\nexport default class Input extends Element {\n  render(target, occupants) {\n    super.render(target, occupants);\n    this.node.defaultValue = this.node.value;\n  }\n  compare(value, attrValue) {\n    const comparator = this.getAttribute('value-comparator');\n    if (comparator) {\n      if (isFunction(comparator)) {\n        return comparator(value, attrValue);\n      }\n      if (value && attrValue) {\n        return value[comparator] == attrValue[comparator];\n      }\n    }\n    return value == attrValue;\n  }\n}\n"",""import Parser from 'parse/Parser';\nimport readStringLiteral from 'parse/converters/expressions/primary/literal/readStringLiteral';\nimport readKey from 'parse/converters/expressions/shared/readKey';\nimport { hasOwn, keys } from 'utils/object';\n\n// simple JSON parser, without the restrictions of JSON parse\n// (i.e. having to double-quote keys).\n//\n// If passed a hash of values as the second argument, ${placeholders}\n// will be replaced with those values\n\nconst specials = {\n  true: true,\n  false: false,\n  null: null,\n  undefined\n};\n\nconst specialsPattern = new RegExp('^(?:' + keys(specials).join('|') + ')');\nconst numberPattern = /^(?:[+-]?)(?:(?:(?:0|[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\nconst placeholderPattern = /\\$\\{([^\\}]+)\\}/g;\nconst placeholderAtStartPattern = /^\\$\\{([^\\}]+)\\}/;\nconst onlyWhitespace = /^\\s*$/;\n\nconst JsonParser = Parser.extend({\n  init(str, options) {\n    this.values = options.values;\n    this.sp();\n  },\n\n  postProcess(result) {\n    if (result.length !== 1 || !onlyWhitespace.test(this.leftover)) {\n      return null;\n    }\n\n    return { value: result[0].v };\n  },\n\n  converters: [\n    function getPlaceholder(parser) {\n      if (!parser.values) return null;\n\n      const placeholder = parser.matchPattern(placeholderAtStartPattern);\n\n      if (placeholder && hasOwn(parser.values, placeholder)) {\n        return { v: parser.values[placeholder] };\n      }\n    },\n\n    function getSpecial(parser) {\n      const special = parser.matchPattern(specialsPattern);\n      if (special) return { v: specials[special] };\n    },\n\n    function getNumber(parser) {\n      const number = parser.matchPattern(numberPattern);\n      if (number) return { v: +number };\n    },\n\n    function getString(parser) {\n      const stringLiteral = readStringLiteral(parser);\n      const values = parser.values;\n\n      if (stringLiteral && values) {\n        return {\n          v: stringLiteral.v.replace(placeholderPattern, (match, $1) =>\n            $1 in values ? values[$1] : $1\n          )\n        };\n      }\n\n      return stringLiteral;\n    },\n\n    function getObject(parser) {\n      if (!parser.matchString('{')) return null;\n\n      const result = {};\n\n      parser.sp();\n\n      if (parser.matchString('}')) {\n        return { v: result };\n      }\n\n      let pair;\n      while ((pair = getKeyValuePair(parser))) {\n        result[pair.key] = pair.value;\n\n        parser.sp();\n\n        if (parser.matchString('}')) {\n          return { v: result };\n        }\n\n        if (!parser.matchString(',')) {\n          return null;\n        }\n      }\n\n      return null;\n    },\n\n    function getArray(parser) {\n      if (!parser.matchString('[')) return null;\n\n      const result = [];\n\n      parser.sp();\n\n      if (parser.matchString(']')) {\n        return { v: result };\n      }\n\n      let valueToken;\n      while ((valueToken = parser.read())) {\n        result.push(valueToken.v);\n\n        parser.sp();\n\n        if (parser.matchString(']')) {\n          return { v: result };\n        }\n\n        if (!parser.matchString(',')) {\n          return null;\n        }\n\n        parser.sp();\n      }\n\n      return null;\n    }\n  ]\n});\n\nfunction getKeyValuePair(parser) {\n  parser.sp();\n\n  const key = readKey(parser);\n\n  if (!key) return null;\n\n  const pair = { key };\n\n  parser.sp();\n  if (!parser.matchString(':')) {\n    return null;\n  }\n  parser.sp();\n\n  const valueToken = parser.read();\n\n  if (!valueToken) return null;\n\n  pair.value = valueToken.v;\n  return pair;\n}\n\nexport default function(str, values) {\n  const parser = new JsonParser(str, { values });\n  return parser.result;\n}\n"",""import { INTERPOLATOR } from '../../../config/types';\nimport Item from '../shared/Item';\nimport Fragment from '../../Fragment';\nimport findElement from '../shared/findElement';\nimport parseJSON from '../../../utils/parseJSON';\nimport resolve from '../../resolvers/resolve';\nimport runloop from '../../../global/runloop';\nimport { warnIfDebug } from 'utils/log';\nimport { splitKeypath } from 'shared/keypaths';\nimport { isArray, isObjectType, isString } from 'utils/is';\n\nexport default class Mapping extends Item {\n  constructor(options) {\n    super(options);\n\n    this.name = options.template.n;\n\n    this.owner = options.owner || options.up.owner || options.element || findElement(options.up);\n    this.element =\n      options.element || (this.owner.attributeByName ? this.owner : findElement(options.up));\n    this.up = this.element.up; // shared\n    this.ractive = this.up.ractive;\n\n    this.element.attributeByName[this.name] = this;\n\n    this.value = options.template.f;\n  }\n\n  bind() {\n    const template = this.template.f;\n    const viewmodel = this.element.instance.viewmodel;\n\n    if (template === 0) {\n      // empty attributes are `true`\n      viewmodel.joinKey(this.name).set(true);\n    } else if (isString(template)) {\n      const parsed = parseJSON(template);\n      viewmodel.joinKey(this.name).set(parsed ? parsed.value : template);\n    } else if (isArray(template)) {\n      createMapping(this, true);\n    }\n  }\n\n  rebound(update) {\n    if (this.boundFragment) this.boundFragment.rebound(update);\n    if (this.link) {\n      this.model = resolve(this.up, this.template.f[0]);\n      const model = this.element.instance.viewmodel.joinAll(splitKeypath(this.name));\n      model.link(this.model, this.name, { mapping: true });\n    }\n  }\n\n  render() {}\n\n  unbind(view) {\n    if (this.model) this.model.unregister(this);\n    if (this.boundFragment) this.boundFragment.unbind(view);\n\n    if (this.element.bound) {\n      if (this.link.target === this.model) this.link.owner.unlink();\n    }\n  }\n\n  unrender() {}\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n      if (this.boundFragment) this.boundFragment.update();\n    }\n  }\n}\n\nfunction createMapping(item) {\n  const template = item.template.f;\n  const viewmodel = item.element.instance.viewmodel;\n  const childData = viewmodel.value;\n\n  if (template.length === 1 && template[0].t === INTERPOLATOR) {\n    const model = resolve(item.up, template[0]);\n    const val = model.get(false);\n\n    // if the interpolator is not static\n    if (!template[0].s) {\n      item.model = model;\n      item.link = viewmodel.createLink(item.name, model, template[0].r, {\n        mapping: true\n      });\n\n      // initialize parent side of the mapping from child data\n      if (val === undefined && !model.isReadonly && item.name in childData) {\n        model.set(childData[item.name]);\n      }\n    } else if (!isObjectType(val) || template[0].x) {\n      // copy non-object, non-computed vals through\n      viewmodel.joinKey(splitKeypath(item.name)).set(val);\n    } else {\n      // warn about trying to copy an object\n      warnIfDebug(`Cannot copy non-computed object value from static mapping '${item.name}'`);\n    }\n\n    // if the item isn't going to manage the model, give it a change to tear down if it's computed\n    if (model !== item.model) model.unregister();\n  } else {\n    item.boundFragment = new Fragment({\n      owner: item,\n      template\n    }).bind();\n\n    item.model = viewmodel.joinKey(splitKeypath(item.name));\n    item.model.set(item.boundFragment.valueOf());\n\n    // item is a *bit* of a hack\n    item.boundFragment.bubble = () => {\n      Fragment.prototype.bubble.call(item.boundFragment);\n      // defer this to avoid mucking around model deps if there happens to be an expression involved\n      runloop.scheduleTask(() => {\n        item.boundFragment.update();\n        item.model.set(item.boundFragment.valueOf());\n      });\n    };\n  }\n}\n"",""import resolveReference from 'src/view/resolvers/resolveReference';\nimport Model from 'src/model/Model';\nimport { isNumeric, isObject, isNumber, isObjectType, isString } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport findElement from 'src/view/items/shared/findElement';\nimport { set as sharedSet } from './set';\nimport makeArrayMethod from '../Ractive/prototype/shared/makeArrayMethod';\nimport { animate as protoAnimate } from '../Ractive/prototype/animate';\nimport { update as protoUpdate } from '../Ractive/prototype/update';\nimport getRactiveContext, { extern, findParentWithContext } from './getRactiveContext';\nimport { hasOwn } from 'utils/object';\nimport { ELEMENT } from 'config/types';\n\nconst modelPush = makeArrayMethod('push').model;\nconst modelPop = makeArrayMethod('pop').model;\nconst modelShift = makeArrayMethod('shift').model;\nconst modelUnshift = makeArrayMethod('unshift').model;\nconst modelSort = makeArrayMethod('sort').model;\nconst modelSplice = makeArrayMethod('splice').model;\nconst modelReverse = makeArrayMethod('reverse').model;\n\nclass ContextData extends Model {\n  constructor(options) {\n    super(null, null);\n\n    this.isRoot = true;\n    this.root = this;\n    this.value = {};\n    this.ractive = options.ractive;\n    this.adaptors = [];\n    this.context = options.context;\n  }\n\n  getKeypath() {\n    return '@context.data';\n  }\n\n  rebound() {}\n}\n\nexport default class Context {\n  constructor(fragment, element) {\n    this.fragment = fragment;\n    this.element = element || findElement(fragment);\n    this.node = this.element && this.element.node;\n    this.ractive = fragment.ractive;\n    this.root = this;\n  }\n\n  get decorators() {\n    const items = {};\n    if (!this.element) return items;\n    this.element.decorators.forEach(d => (items[d.name] = d.handle));\n    return items;\n  }\n\n  get _data() {\n    return (\n      this.model ||\n      (this.root.model = new ContextData({\n        ractive: this.ractive,\n        context: this.root\n      }))\n    );\n  }\n\n  // the usual mutation suspects\n  add(keypath, d, options) {\n    const num = isNumber(d) ? +d : 1;\n    const opts = isObjectType(d) ? d : options;\n    return sharedSet(\n      build(this, keypath, num).map(pair => {\n        const [model, val] = pair;\n        const value = model.get();\n        if (!isNumeric(val) || !isNumeric(value)) throw new Error('Cannot add non-numeric value');\n        return [model, value + val];\n      }),\n      opts\n    );\n  }\n\n  animate(keypath, value, options) {\n    const model = findModel(this, keypath).model;\n    return protoAnimate(this.ractive, model, value, options);\n  }\n\n  find(selector) {\n    return this.fragment.find(selector);\n  }\n\n  findAll(selector) {\n    const result = [];\n    this.fragment.findAll(selector, { result });\n    return result;\n  }\n\n  findAllComponents(selector) {\n    const result = [];\n    this.fragment.findAllComponents(selector, { result });\n    return result;\n  }\n\n  findComponent(selector) {\n    return this.fragment.findComponent(selector);\n  }\n\n  // get relative keypaths and values\n  get(keypath) {\n    if (!keypath) return this.fragment.findContext().get(true);\n\n    const { model } = findModel(this, keypath);\n\n    return model ? model.get(true) : undefined;\n  }\n\n  getParent(component) {\n    let fragment = this.fragment;\n\n    if (fragment.context)\n      fragment = findParentWithContext(fragment.parent || (component && fragment.componentParent));\n    else {\n      fragment = findParentWithContext(fragment.parent || (component && fragment.componentParent));\n      if (fragment)\n        fragment = findParentWithContext(\n          fragment.parent || (component && fragment.componentParent)\n        );\n    }\n\n    if (!fragment || fragment === this.fragment) return;\n    else return fragment.getContext();\n  }\n\n  hasListener(name, bubble) {\n    // if the owner is a component, start there because the nearest element\n    // may exist outside of the immediate context (yield)\n    let el = this.fragment.owner.component\n      ? this.fragment.owner\n      : this.element || this.fragment.owner;\n    let base;\n\n    do {\n      base = el.component || el;\n      if (base.template.t === ELEMENT) {\n        if (findEvent(base, name)) return true;\n      }\n      el = el.up && el.up.owner;\n      if (el && el.component) el = el.component;\n    } while (el && bubble);\n  }\n\n  link(source, dest) {\n    const there = findModel(this, source).model;\n    const here = findModel(this, dest).model;\n    const promise = runloop.start();\n    here.link(there, source);\n    runloop.end();\n    return promise;\n  }\n\n  listen(event, handler) {\n    const el = this.element;\n    el.on(event, handler);\n    return {\n      cancel() {\n        el.off(event, handler);\n      }\n    };\n  }\n\n  observe(keypath, callback, options = {}) {\n    if (isObject(keypath)) options = callback || {};\n    options.fragment = this.fragment;\n    return this.ractive.observe(keypath, callback, options);\n  }\n\n  observeOnce(keypath, callback, options = {}) {\n    if (isObject(keypath)) options = callback || {};\n    options.fragment = this.fragment;\n    return this.ractive.observeOnce(keypath, callback, options);\n  }\n\n  pop(keypath) {\n    return modelPop(findModel(this, keypath).model, []);\n  }\n\n  push(keypath, ...values) {\n    return modelPush(findModel(this, keypath).model, values);\n  }\n\n  raise(name, event, ...args) {\n    let el = this.element;\n    let ev;\n\n    while (el) {\n      if (el.component) el = el.component;\n      ev = findEvent(el, name);\n      if (ev) {\n        return ev.fire(\n          ev.element.getContext(\n            event || {},\n            event && !('original' in event) ? { original: {} } : {}\n          ),\n          args\n        );\n      }\n\n      el = el.up && el.up.owner;\n    }\n  }\n\n  readLink(keypath, options) {\n    return this.ractive.readLink(this.resolve(keypath), options);\n  }\n\n  resolve(path, ractive) {\n    const { model, instance } = findModel(this, path);\n    return model ? model.getKeypath(ractive || instance) : path;\n  }\n\n  reverse(keypath) {\n    return modelReverse(findModel(this, keypath).model, []);\n  }\n\n  set(keypath, value, options) {\n    return sharedSet(build(this, keypath, value), options);\n  }\n\n  shift(keypath) {\n    return modelShift(findModel(this, keypath).model, []);\n  }\n\n  splice(keypath, index, drop, ...add) {\n    add.unshift(index, drop);\n    return modelSplice(findModel(this, keypath).model, add);\n  }\n\n  sort(keypath) {\n    return modelSort(findModel(this, keypath).model, []);\n  }\n\n  subtract(keypath, d, options) {\n    const num = isNumber(d) ? d : 1;\n    const opts = isObjectType(d) ? d : options;\n    return sharedSet(\n      build(this, keypath, num).map(pair => {\n        const [model, val] = pair;\n        const value = model.get();\n        if (!isNumeric(val) || !isNumeric(value)) throw new Error('Cannot add non-numeric value');\n        return [model, value - val];\n      }),\n      opts\n    );\n  }\n\n  toggle(keypath, options) {\n    const { model } = findModel(this, keypath);\n    return sharedSet([[model, !model.get()]], options);\n  }\n\n  unlink(dest) {\n    const here = findModel(this, dest).model;\n    const promise = runloop.start();\n    if (here.owner && here.owner._link) here.owner.unlink();\n    runloop.end();\n    return promise;\n  }\n\n  unlisten(event, handler) {\n    this.element.off(event, handler);\n  }\n\n  unshift(keypath, ...add) {\n    return modelUnshift(findModel(this, keypath).model, add);\n  }\n\n  update(keypath, options) {\n    return protoUpdate(this.ractive, findModel(this, keypath).model, options);\n  }\n\n  updateModel(keypath, cascade) {\n    const { model } = findModel(this, keypath);\n    const promise = runloop.start();\n    model.updateFromBindings(cascade);\n    runloop.end();\n    return promise;\n  }\n\n  // two-way binding related helpers\n  isBound() {\n    const { model } = this.getBindingModel(this);\n    return !!model;\n  }\n\n  getBindingPath(ractive) {\n    const { model, instance } = this.getBindingModel(this);\n    if (model) return model.getKeypath(ractive || instance);\n  }\n\n  getBinding() {\n    const { model } = this.getBindingModel(this);\n    if (model) return model.get(true);\n  }\n\n  getBindingModel(ctx) {\n    const el = ctx.element;\n    return { model: el.binding && el.binding.model, instance: el.up.ractive };\n  }\n\n  setBinding(value) {\n    const { model } = this.getBindingModel(this);\n    return sharedSet([[model, value]]);\n  }\n}\n\nContext.forRactive = getRactiveContext;\n// circular deps are fun\nextern.Context = Context;\n\n// TODO: at some point perhaps this could support relative * keypaths?\nfunction build(ctx, keypath, value) {\n  const sets = [];\n\n  // set multiple keypaths in one go\n  if (isObject(keypath)) {\n    for (const k in keypath) {\n      if (hasOwn(keypath, k)) {\n        sets.push([findModel(ctx, k).model, keypath[k]]);\n      }\n    }\n  } else {\n    // set a single keypath\n    sets.push([findModel(ctx, keypath).model, value]);\n  }\n\n  return sets;\n}\n\nfunction findModel(ctx, path) {\n  const frag = ctx.fragment;\n\n  if (!isString(path)) {\n    return { model: frag.findContext(), instance: path };\n  }\n\n  return { model: resolveReference(frag, path), instance: frag.ractive };\n}\n\nfunction findEvent(el, name) {\n  return el.events && el.events.find && el.events.find(e => ~e.template.n.indexOf(name));\n}\n"",""import { doc } from 'config/environment';\nimport getRactiveContext from 'shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nconst query = doc && doc.querySelector;\n\nexport default function getContext(node) {\n  if (isString(node) && query) {\n    node = query.call(document, node);\n  }\n\n  let instances;\n  if (node) {\n    if (node._ractive) {\n      return node._ractive.proxy.getContext();\n    } else if ((instances = node.__ractive_instances__)) {\n      if (instances.length === 1) return getRactiveContext(instances[0]);\n    } else return getContext(node.parentNode);\n  }\n}\n"",""import { isClient, svg, vendors, win, doc } from 'config/environment';\nimport { html } from 'config/namespaces';\nimport { isString, isNumber } from 'utils/is';\n\nlet createElement, matches, div, methodNames, unprefixed, prefixed, i, j, makeFunction;\n\n// Test for SVG support\nif (!svg) {\n  /* istanbul ignore next */\n  createElement = (type, ns, extend) => {\n    if (ns && ns !== html) {\n      throw \""This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you're trying to render SVG in an older browser. See http://ractive.js.org/support/#svgs for more information\"";\n    }\n\n    return extend ? doc.createElement(type, extend) : doc.createElement(type);\n  };\n} else {\n  createElement = (type, ns, extend) => {\n    if (!ns || ns === html) {\n      return extend ? doc.createElement(type, extend) : doc.createElement(type);\n    }\n\n    return extend ? doc.createElementNS(ns, type, extend) : doc.createElementNS(ns, type);\n  };\n}\n\nexport function createDocumentFragment() {\n  return doc.createDocumentFragment();\n}\n\nfunction getElement(input) {\n  let output;\n\n  if (!input || typeof input === 'boolean') {\n    return;\n  }\n\n  /* istanbul ignore next */\n  if (!win || !doc || !input) {\n    return null;\n  }\n\n  // We already have a DOM node - no work to do. (Duck typing alert!)\n  if (input.nodeType) {\n    return input;\n  }\n\n  // Get node from string\n  if (isString(input)) {\n    // try ID first\n    output = doc.getElementById(input);\n\n    // then as selector, if possible\n    if (!output && doc.querySelector) {\n      try {\n        output = doc.querySelector(input);\n      } catch (e) {\n        /* this space intentionally left blank */\n      }\n    }\n\n    // did it work?\n    if (output && output.nodeType) {\n      return output;\n    }\n  }\n\n  // If we've been given a collection (jQuery, Zepto etc), extract the first item\n  if (input[0] && input[0].nodeType) {\n    return input[0];\n  }\n\n  return null;\n}\n\nif (!isClient) {\n  matches = null;\n} else {\n  div = createElement('div');\n  methodNames = ['matches', 'matchesSelector'];\n\n  makeFunction = function(methodName) {\n    return function(node, selector) {\n      return node[methodName](selector);\n    };\n  };\n\n  i = methodNames.length;\n\n  while (i-- && !matches) {\n    unprefixed = methodNames[i];\n\n    if (div[unprefixed]) {\n      matches = makeFunction(unprefixed);\n    } else {\n      j = vendors.length;\n      while (j--) {\n        prefixed = vendors[i] + unprefixed.substr(0, 1).toUpperCase() + unprefixed.substring(1);\n\n        if (div[prefixed]) {\n          matches = makeFunction(prefixed);\n          break;\n        }\n      }\n    }\n  }\n\n  // IE8... and apparently phantom some?\n  /* istanbul ignore next */\n  if (!matches) {\n    matches = function(node, selector) {\n      let parentNode, i;\n\n      parentNode = node.parentNode;\n\n      if (!parentNode) {\n        // empty dummy <div>\n        div.innerHTML = '';\n\n        parentNode = div;\n        node = node.cloneNode();\n\n        div.appendChild(node);\n      }\n\n      const nodes = parentNode.querySelectorAll(selector);\n\n      i = nodes.length;\n      while (i--) {\n        if (nodes[i] === node) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n  }\n}\n\nfunction detachNode(node) {\n  // stupid ie\n  // eslint-disable-next-line valid-typeof\n  if (node && typeof node.parentNode !== 'unknown' && node.parentNode) {\n    node.parentNode.removeChild(node);\n  }\n\n  return node;\n}\n\nfunction safeToStringValue(value) {\n  return value == null || (isNumber(value) && isNaN(value)) || !value.toString ? '' : '' + value;\n}\n\nfunction safeAttributeString(string) {\n  return safeToStringValue(string)\n    .replace(/&/g, '&amp;')\n    .replace(/\""/g, '&quot;')\n    .replace(/'/g, '&#39;');\n}\n\nexport { createElement, detachNode, getElement, matches, safeToStringValue, safeAttributeString };\n"",""export const html = 'http://www.w3.org/1999/xhtml';\nexport const mathml = 'http://www.w3.org/1998/Math/MathML';\nexport const svg = 'http://www.w3.org/2000/svg';\nexport const xlink = 'http://www.w3.org/1999/xlink';\nexport const xml = 'http://www.w3.org/XML/1998/namespace';\nexport const xmlns = 'http://www.w3.org/2000/xmlns';\n\nexport default { html, mathml, svg, xlink, xml, xmlns };\n"",""import { isEqual, isFunction } from 'utils/is';\nimport { removeFromArray } from 'utils/array';\nimport runloop from 'src/global/runloop';\nimport { rebindMatch } from 'shared/rebind';\nimport { create } from 'utils/object';\n\nexport default class Observer {\n  constructor(ractive, model, callback, options) {\n    this.context = options.context || ractive;\n    this.callback = callback;\n    this.ractive = ractive;\n    this.keypath = options.keypath;\n    this.options = options;\n\n    if (model) this.resolved(model);\n\n    if (isFunction(options.old)) {\n      this.oldContext = create(ractive);\n      this.oldFn = options.old;\n    }\n\n    if (options.init !== false) {\n      this.dirty = true;\n      this.dispatch();\n    } else {\n      updateOld(this);\n    }\n\n    this.dirty = false;\n  }\n\n  cancel() {\n    this.cancelled = true;\n    if (this.model) {\n      this.model.unregister(this);\n    } else {\n      this.resolver.unbind();\n    }\n    removeFromArray(this.ractive._observers, this);\n  }\n\n  dispatch() {\n    if (!this.cancelled) {\n      this.callback.call(this.context, this.newValue, this.oldValue, this.keypath);\n      updateOld(this, true);\n      this.dirty = false;\n    }\n  }\n\n  handleChange() {\n    if (!this.dirty) {\n      const newValue = this.model.get();\n      if (isEqual(newValue, this.oldValue)) return;\n\n      this.newValue = newValue;\n\n      if (this.options.strict && this.newValue === this.oldValue) return;\n\n      runloop.addObserver(this, this.options.defer);\n      this.dirty = true;\n\n      if (this.options.once) runloop.scheduleTask(() => this.cancel());\n    } else {\n      // make sure the newValue stays updated in case this observer gets touched multiple times in one loop\n      this.newValue = this.model.get();\n    }\n  }\n\n  rebind(next, previous) {\n    next = rebindMatch(this.keypath, next, previous);\n    if (next === this.model) return false;\n\n    if (this.model) this.model.unregister(this);\n    if (next) next.addShuffleTask(() => this.resolved(next));\n  }\n\n  resolved(model) {\n    this.model = model;\n\n    this.oldValue = undefined;\n    this.newValue = model.get();\n\n    model.register(this);\n  }\n}\n\nfunction updateOld(observer, fresh) {\n  const next = fresh\n    ? observer.model\n      ? observer.model.get()\n      : observer.newValue\n    : observer.newValue;\n  observer.oldValue = observer.oldFn\n    ? observer.oldFn.call(observer.oldContext, undefined, next, observer.keypath)\n    : next;\n}\n"",""import { escapeKey } from 'shared/keypaths';\nimport { removeFromArray } from 'utils/array';\nimport { isArray, isEqual } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport { create, keys } from 'utils/object';\n\nconst star = /\\*+/g;\n\nexport default class PatternObserver {\n  constructor(ractive, baseModel, keys, callback, options) {\n    this.context = options.context || ractive;\n    this.ractive = ractive;\n    this.baseModel = baseModel;\n    this.keys = keys;\n    this.callback = callback;\n\n    const pattern = keys.join('\\\\.').replace(star, '(.+)');\n    const baseKeypath = (this.baseKeypath = baseModel.getKeypath(ractive));\n    this.pattern = new RegExp(`^${baseKeypath ? baseKeypath + '\\\\.' : ''}${pattern}$`);\n    this.recursive = keys.length === 1 && keys[0] === '**';\n    if (this.recursive) this.keys = ['*'];\n    if (options.old) {\n      this.oldContext = create(ractive);\n      this.oldFn = options.old;\n    }\n\n    this.oldValues = {};\n    this.newValues = {};\n\n    this.defer = options.defer;\n    this.once = options.once;\n    this.strict = options.strict;\n\n    this.dirty = false;\n    this.changed = [];\n    this.partial = false;\n    this.links = options.links;\n\n    const models = baseModel.findMatches(this.keys);\n\n    models.forEach(model => {\n      this.newValues[model.getKeypath(this.ractive)] = model.get();\n    });\n\n    if (options.init !== false) {\n      this.dispatch();\n    } else {\n      updateOld(this, this.newValues);\n    }\n\n    baseModel.registerPatternObserver(this);\n  }\n\n  cancel() {\n    this.baseModel.unregisterPatternObserver(this);\n    removeFromArray(this.ractive._observers, this);\n  }\n\n  dispatch() {\n    const newValues = this.newValues;\n    this.newValues = {};\n    keys(newValues).forEach(keypath => {\n      const newValue = newValues[keypath];\n      const oldValue = this.oldValues[keypath];\n\n      if (this.strict && newValue === oldValue) return;\n      if (isEqual(newValue, oldValue)) return;\n\n      let args = [newValue, oldValue, keypath];\n      if (keypath) {\n        const wildcards = this.pattern.exec(keypath);\n        if (wildcards) {\n          args = args.concat(wildcards.slice(1));\n        }\n      }\n\n      this.callback.apply(this.context, args);\n    });\n\n    updateOld(this, newValues, this.partial);\n\n    this.dirty = false;\n  }\n\n  notify(key) {\n    this.changed.push(key);\n  }\n\n  shuffle(newIndices) {\n    if (!isArray(this.baseModel.value)) return;\n\n    const max = this.baseModel.value.length;\n\n    for (let i = 0; i < newIndices.length; i++) {\n      if (newIndices[i] === -1 || newIndices[i] === i) continue;\n      this.changed.push([i]);\n    }\n\n    for (let i = newIndices.touchedFrom; i < max; i++) {\n      this.changed.push([i]);\n    }\n  }\n\n  handleChange() {\n    if (!this.dirty || this.changed.length) {\n      if (!this.dirty) this.newValues = {};\n\n      if (!this.changed.length) {\n        this.baseModel.findMatches(this.keys).forEach(model => {\n          const keypath = model.getKeypath(this.ractive);\n          this.newValues[keypath] = model.get();\n        });\n        this.partial = false;\n      } else {\n        let count = 0;\n\n        if (this.recursive) {\n          this.changed.forEach(keys => {\n            const model = this.baseModel.joinAll(keys);\n            if (model.isLink && !this.links) return;\n            count++;\n            this.newValues[model.getKeypath(this.ractive)] = model.get();\n          });\n        } else {\n          const ok = this.baseModel.isRoot\n            ? this.changed.map(keys => keys.map(escapeKey).join('.'))\n            : this.changed.map(keys => this.baseKeypath + '.' + keys.map(escapeKey).join('.'));\n\n          this.baseModel.findMatches(this.keys).forEach(model => {\n            const keypath = model.getKeypath(this.ractive);\n            const check = k => {\n              return (\n                (k.indexOf(keypath) === 0 &&\n                  (k.length === keypath.length || k[keypath.length] === '.')) ||\n                (keypath.indexOf(k) === 0 &&\n                  (k.length === keypath.length || keypath[k.length] === '.'))\n              );\n            };\n\n            // is this model on a changed keypath?\n            if (ok.filter(check).length) {\n              count++;\n              this.newValues[keypath] = model.get();\n            }\n          });\n        }\n\n        // no valid change triggered, so bail to avoid breakage\n        if (!count) return;\n\n        this.partial = true;\n      }\n\n      runloop.addObserver(this, this.defer);\n      this.dirty = true;\n      this.changed.length = 0;\n\n      if (this.once) this.cancel();\n    }\n  }\n}\n\nfunction updateOld(observer, vals, partial) {\n  const olds = observer.oldValues;\n\n  if (observer.oldFn) {\n    if (!partial) observer.oldValues = {};\n\n    keys(vals).forEach(k => {\n      const args = [olds[k], vals[k], k];\n      const parts = observer.pattern.exec(k);\n      if (parts) {\n        args.push.apply(args, parts.slice(1));\n      }\n      observer.oldValues[k] = observer.oldFn.apply(observer.oldContext, args);\n    });\n  } else {\n    if (partial) {\n      keys(vals).forEach(k => (olds[k] = vals[k]));\n    } else {\n      observer.oldValues = vals;\n    }\n  }\n}\n"",""import { removeFromArray } from 'utils/array';\nimport { isArray } from 'utils/is';\nimport runloop from 'src/global/runloop';\n\nfunction negativeOne() {\n  return -1;\n}\n\nexport default class ArrayObserver {\n  constructor(ractive, model, callback, options) {\n    this.ractive = ractive;\n    this.model = model;\n    this.keypath = model.getKeypath();\n    this.callback = callback;\n    this.options = options;\n\n    this.pending = null;\n\n    model.register(this);\n\n    if (options.init !== false) {\n      this.sliced = [];\n      this.shuffle([]);\n      this.dispatch();\n    } else {\n      this.sliced = this.slice();\n    }\n  }\n\n  cancel() {\n    this.model.unregister(this);\n    removeFromArray(this.ractive._observers, this);\n  }\n\n  dispatch() {\n    this.callback(this.pending);\n    this.pending = null;\n    if (this.options.once) this.cancel();\n  }\n\n  handleChange(path) {\n    if (this.pending) {\n      // post-shuffle\n      runloop.addObserver(this, this.options.defer);\n    } else if (!path) {\n      // entire array changed\n      this.shuffle(this.sliced.map(negativeOne));\n      this.handleChange();\n    }\n  }\n\n  shuffle(newIndices) {\n    const newValue = this.slice();\n\n    const inserted = [];\n    const deleted = [];\n    let start;\n\n    const hadIndex = {};\n\n    newIndices.forEach((newIndex, oldIndex) => {\n      hadIndex[newIndex] = true;\n\n      if (newIndex !== oldIndex && start === undefined) {\n        start = oldIndex;\n      }\n\n      if (newIndex === -1) {\n        deleted.push(this.sliced[oldIndex]);\n      }\n    });\n\n    if (start === undefined) start = newIndices.length;\n\n    const len = newValue.length;\n    for (let i = 0; i < len; i += 1) {\n      if (!hadIndex[i]) inserted.push(newValue[i]);\n    }\n\n    this.pending = { inserted, deleted, start };\n    this.sliced = newValue;\n  }\n\n  slice() {\n    const value = this.model.get();\n    return isArray(value) ? value.slice() : [];\n  }\n}\n"",""import { isObject, isFunction } from 'utils/is';\nimport { assign } from 'utils/object';\n\nconst onceOptions = { init: false, once: true };\n\nexport default function observeOnce(keypath, callback, options) {\n  if (isObject(keypath) || isFunction(keypath)) {\n    options = assign(callback || {}, onceOptions);\n    return this.observe(keypath, options);\n  }\n\n  options = assign(options || {}, onceOptions);\n  return this.observe(keypath, callback, options);\n}\n"",""export default str => str.trim();\n"",""export default str => str !== '';\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('pop').path;\n"",""import makeArrayMethod from './shared/makeArrayMethod';\nexport default makeArrayMethod('push').path;\n"",""import { doc } from '../config/environment';\n\nconst PREFIX = '/* Ractive.js component styles */';\n\n// Holds current definitions of styles.\nconst styleDefinitions = [];\n\n// Flag to tell if we need to update the CSS\nlet isDirty = false;\n\n// These only make sense on the browser. See additional setup below.\nlet styleElement = null;\nlet useCssText = null;\n\nexport function addCSS(styleDefinition) {\n  styleDefinitions.push(styleDefinition);\n  isDirty = true;\n}\n\nexport function applyCSS(force) {\n  const styleElement = style();\n\n  // Apply only seems to make sense when we're in the DOM. Server-side renders\n  // can call toCSS to get the updated CSS.\n  if (!styleElement || (!force && !isDirty)) return;\n\n  if (useCssText) {\n    styleElement.styleSheet.cssText = getCSS(null);\n  } else {\n    styleElement.innerHTML = getCSS(null);\n  }\n\n  isDirty = false;\n}\n\nexport function getCSS(cssIds) {\n  const filteredStyleDefinitions = cssIds\n    ? styleDefinitions.filter(style => ~cssIds.indexOf(style.id))\n    : styleDefinitions;\n\n  filteredStyleDefinitions.forEach(d => (d.applied = true));\n\n  return filteredStyleDefinitions.reduce(\n    (styles, style) => `${styles ? `${styles}\\n\\n/* {${style.id}} */\\n${style.styles}` : ''}`,\n    PREFIX\n  );\n}\n\nfunction style() {\n  // If we're on the browser, additional setup needed.\n  if (doc && !styleElement) {\n    styleElement = doc.createElement('style');\n    styleElement.type = 'text/css';\n    styleElement.setAttribute('data-ractive-css', '');\n\n    doc.getElementsByTagName('head')[0].appendChild(styleElement);\n\n    useCssText = !!styleElement.styleSheet;\n  }\n\n  return styleElement;\n}\n"",""import { ensureArray, combine } from 'utils/array';\n\nexport default {\n  extend: (Parent, proto, options) => {\n    proto.adapt = combine(proto.adapt, ensureArray(options.adapt));\n  },\n\n  init() {}\n};\n"",""const remove = /\\/\\*(?:[\\s\\S]*?)\\*\\//g;\nconst escape = /url\\(\\s*(['\""])(?:\\\\[\\s\\S]|(?!\\1).)*\\1\\s*\\)|url\\((?:\\\\[\\s\\S]|[^)])*\\)|(['\""])(?:\\\\[\\s\\S]|(?!\\2).)*\\2/gi;\nconst value = /\\0(\\d+)/g;\n\n// Removes comments and strings from the given CSS to make it easier to parse.\n// Callback receives the cleaned CSS and a function which can be used to put\n// the removed strings back in place after parsing is done.\nexport default function(css, callback, additionalReplaceRules = []) {\n  const values = [];\n  const reconstruct = css => css.replace(value, (match, n) => values[n]);\n  css = css.replace(escape, match => `\\0${values.push(match) - 1}`).replace(remove, '');\n\n  additionalReplaceRules.forEach(pattern => {\n    css = css.replace(pattern, match => `\\0${values.push(match) - 1}`);\n  });\n\n  return callback(css, reconstruct);\n}\n"",""import cleanCss from 'utils/cleanCss';\n\nconst selectorsPattern = /(?:^|\\}|\\{|\\x01)\\s*([^\\{\\}\\0\\x01]+)\\s*(?=\\{)/g;\nconst importPattern = /@import\\s*\\([^)]*\\)\\s*;?/gi;\nconst importEndPattern = /\\x01/g;\nconst keyframesDeclarationPattern = /@keyframes\\s+[^\\{\\}]+\\s*\\{(?:[^{}]+|\\{[^{}]+})*}/gi;\nconst selectorUnitPattern = /((?:(?:\\[[^\\]]+\\])|(?:[^\\s\\+\\>~:]))+)((?:::?[^\\s\\+\\>\\~\\(:]+(?:\\([^\\)]+\\))?)*\\s*[\\s\\+\\>\\~]?)\\s*/g;\nconst excludePattern = /^(?:@|\\d+%)/;\nconst dataRvcGuidPattern = /\\[data-ractive-css~=\""\\{[a-z0-9-]+\\}\""]/g;\n\nfunction trim(str) {\n  return str.trim();\n}\n\nfunction extractString(unit) {\n  return unit.str;\n}\n\nfunction transformSelector(selector, parent) {\n  const selectorUnits = [];\n  let match;\n\n  while ((match = selectorUnitPattern.exec(selector))) {\n    selectorUnits.push({\n      str: match[0],\n      base: match[1],\n      modifiers: match[2]\n    });\n  }\n\n  // For each simple selector within the selector, we need to create a version\n  // that a) combines with the id, and b) is inside the id\n  const base = selectorUnits.map(extractString);\n\n  const transformed = [];\n  let i = selectorUnits.length;\n\n  while (i--) {\n    const appended = base.slice();\n\n    // Pseudo-selectors should go after the attribute selector\n    const unit = selectorUnits[i];\n    appended[i] = unit.base + parent + unit.modifiers || '';\n\n    const prepended = base.slice();\n    prepended[i] = parent + ' ' + prepended[i];\n\n    transformed.push(appended.join(' '), prepended.join(' '));\n  }\n\n  return transformed.join(', ');\n}\n\nexport default function transformCss(css, id) {\n  const dataAttr = `[data-ractive-css~=\""{${id}}\""]`;\n\n  let transformed;\n\n  if (dataRvcGuidPattern.test(css)) {\n    transformed = css.replace(dataRvcGuidPattern, dataAttr);\n  } else {\n    transformed = cleanCss(\n      css,\n      (css, reconstruct) => {\n        css = css\n          .replace(importPattern, '$&\\x01')\n          .replace(selectorsPattern, (match, $1) => {\n            // don't transform at-rules and keyframe declarations\n            if (excludePattern.test($1)) return match;\n\n            const selectors = $1.split(',').map(trim);\n            const transformed =\n              selectors.map(selector => transformSelector(selector, dataAttr)).join(', ') + ' ';\n\n            return match.replace($1, transformed);\n          })\n          .replace(importEndPattern, '');\n\n        return reconstruct(css);\n      },\n      [keyframesDeclarationPattern]\n    );\n  }\n\n  return transformed;\n}\n"",""import { SharedModel } from './SharedModel';\nimport { applyChanges } from '../../Ractive/static/styleSet';\n\nexport default class CSSModel extends SharedModel {\n  constructor(component) {\n    super(component.cssData, '@style');\n    this.component = component;\n  }\n\n  downstreamChanged(path, depth) {\n    if (this.locked) return;\n\n    const component = this.component;\n\n    component.extensions.forEach(e => {\n      const model = e._cssModel;\n      model.mark();\n      model.downstreamChanged(path, depth || 1);\n    });\n\n    if (!depth) {\n      applyChanges(component, true);\n    }\n  }\n}\n"",""import { addCSS, applyCSS } from 'src/global/css';\nimport transformCss from './transform';\nimport { uuid } from 'utils/id';\nimport { warnIfDebug } from 'utils/log';\nimport { getElement } from 'utils/dom';\nimport { splitKeypath } from 'shared/keypaths';\nimport CSSModel from 'src/model/specials/CSSModel';\nimport { assign, create, defineProperty } from 'utils/object';\nimport { isString, isFunction, isObjectType } from 'utils/is';\n\nconst hasCurly = /\\{/;\nexport default {\n  name: 'css',\n\n  // Called when creating a new component definition\n  extend: (Parent, proto, options, Child) => {\n    Child._cssIds = gatherIds(Parent);\n\n    defineProperty(Child, 'cssData', {\n      configurable: true,\n      value: assign(create(Parent.cssData), options.cssData || {})\n    });\n\n    defineProperty(Child, '_cssModel', {\n      configurable: true,\n      value: new CSSModel(Child)\n    });\n\n    if (options.css) initCSS(options, Child, proto);\n  },\n\n  // Called when creating a new component instance\n  init: (Parent, target, options) => {\n    if (!options.css) return;\n\n    warnIfDebug(`\nThe css option is currently not supported on a per-instance basis and will be discarded. Instead, we recommend instantiating from a component definition with a css option.\n\nconst Component = Ractive.extend({\n\t...\n\tcss: '/* your css */',\n\t...\n});\n\nconst componentInstance = new Component({ ... })\n\t\t`);\n  }\n};\n\nfunction gatherIds(start) {\n  let cmp = start;\n  const ids = [];\n\n  while (cmp) {\n    if (cmp.prototype.cssId) ids.push(cmp.prototype.cssId);\n    cmp = cmp.Parent;\n  }\n\n  return ids;\n}\n\nexport function evalCSS(component, css) {\n  if (isString(css)) return css;\n\n  const cssData = component.cssData;\n  const model = component._cssModel;\n  const data = function data(path) {\n    return model.joinAll(splitKeypath(path)).get();\n  };\n  data.__proto__ = cssData;\n\n  const result = css.call(component, data);\n  return isString(result) ? result : '';\n}\n\nexport function initCSS(options, target, proto) {\n  let css =\n    options.css === true\n      ? ''\n      : isString(options.css) && !hasCurly.test(options.css)\n      ? getElement(options.css) || options.css\n      : options.css;\n  let cssProp = css;\n\n  const id = options.cssId || uuid();\n\n  if (isObjectType(css)) {\n    css = 'textContent' in css ? css.textContent : css.innerHTML;\n    cssProp = css;\n  } else if (isFunction(css)) {\n    cssProp = css;\n    css = evalCSS(target, css);\n  }\n\n  const def = {\n    transform: 'noCSSTransform' in options ? !options.noCSSTransform : !options.noCssTransform\n  };\n\n  defineProperty(target, '_cssDef', { configurable: true, value: def });\n\n  defineProperty(target, 'css', {\n    get() {\n      return cssProp;\n    },\n    set(next) {\n      cssProp = next;\n      const css = evalCSS(target, cssProp);\n      const styles = def.styles;\n      def.styles = def.transform ? transformCss(css, id) : css;\n      if (def.applied && styles !== def.styles) applyCSS(true);\n    }\n  });\n\n  def.styles = def.transform ? transformCss(css, id) : css;\n  def.id = proto.cssId = id;\n  target._cssIds.push(id);\n\n  addCSS(target._cssDef);\n}\n"",""import { fatal, warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { isArray, isObject, isFunction, isObjectType } from 'utils/is';\nimport bind from 'utils/bind';\n\nfunction validate(data) {\n  // Warn if userOptions.data is a non-POJO\n  if (data && data.constructor !== Object) {\n    if (isFunction(data)) {\n      // TODO do we need to support this in the new Ractive() case?\n    } else if (!isObjectType(data)) {\n      fatal(`data option must be an object or a function, \\`${data}\\` is not valid`);\n    } else {\n      warnIfDebug(\n        'If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged'\n      );\n    }\n  }\n}\n\nexport default {\n  name: 'data',\n\n  extend: (Parent, proto, options) => {\n    let key;\n    let value;\n\n    // check for non-primitives, which could cause mutation-related bugs\n    if (options.data && isObject(options.data)) {\n      for (key in options.data) {\n        value = options.data[key];\n\n        if (value && isObjectType(value)) {\n          if (isObject(value) || isArray(value)) {\n            warnIfDebug(`Passing a \\`data\\` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n  // this...\n  data: function () {\n    return {\n      myObject: {}\n    };\n  })\n\n  // instead of this:\n  data: {\n    myObject: {}\n  }`);\n          }\n        }\n      }\n    }\n\n    proto.data = combine(proto.data, options.data);\n  },\n\n  init: (Parent, ractive, options) => {\n    let result = combine(Parent.prototype.data, options.data);\n\n    if (isFunction(result)) result = result.call(ractive);\n\n    // bind functions to the ractive instance at the top level,\n    // unless it's a non-POJO (in which case alarm bells should ring)\n    if (result && result.constructor === Object) {\n      for (const prop in result) {\n        if (isFunction(result[prop])) {\n          const value = result[prop];\n          result[prop] = bind(value, ractive);\n          result[prop]._r_unbound = value;\n        }\n      }\n    }\n\n    return result || {};\n  },\n\n  reset(ractive) {\n    const result = this.init(ractive.constructor, ractive, ractive.viewmodel);\n    ractive.viewmodel.root.set(result);\n    return true;\n  }\n};\n\nfunction emptyData() {\n  return {};\n}\n\nfunction combine(parentValue, childValue) {\n  validate(childValue);\n\n  const parentIsFn = isFunction(parentValue);\n\n  // Very important, otherwise child instance can become\n  // the default data object on Ractive or a component.\n  // then ractive.set() ends up setting on the prototype!\n  if (!childValue && !parentIsFn) {\n    // this needs to be a function so that it can still inherit parent defaults\n    childValue = emptyData;\n  }\n\n  const childIsFn = isFunction(childValue);\n\n  // Fast path, where we just need to copy properties from\n  // parent to child\n  if (!parentIsFn && !childIsFn) {\n    return fromProperties(childValue, parentValue);\n  }\n\n  return function() {\n    const child = childIsFn ? callDataFunction(childValue, this) : childValue;\n    const parent = parentIsFn ? callDataFunction(parentValue, this) : parentValue;\n\n    return fromProperties(child, parent);\n  };\n}\n\nfunction callDataFunction(fn, context) {\n  const data = fn.call(context);\n\n  if (!data) return;\n\n  if (!isObjectType(data)) {\n    fatal('Data function must return an object');\n  }\n\n  if (data.constructor !== Object) {\n    warnOnceIfDebug(\n      'Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged'\n    );\n  }\n\n  return data;\n}\n\nfunction fromProperties(primary, secondary) {\n  if (primary && secondary) {\n    for (const key in secondary) {\n      if (!(key in primary)) {\n        primary[key] = secondary[key];\n      }\n    }\n\n    return primary;\n  }\n\n  return primary || secondary;\n}\n"",""import { TEMPLATE_VERSION } from 'config/template';\nimport { addFunctions } from 'shared/getFunction';\nimport parser from '../runtime-parser';\nimport { hasOwn } from 'utils/object';\nimport { isFunction, isNumber, isString } from 'utils/is';\n\nexport default {\n  name: 'template',\n\n  extend(Parent, proto, options) {\n    // only assign if exists\n    if ('template' in options) {\n      const template = options.template;\n\n      if (isFunction(template)) {\n        proto.template = template;\n      } else {\n        proto.template = parseTemplate(template, proto);\n      }\n    }\n  },\n\n  init(Parent, ractive, options) {\n    // TODO because of prototypal inheritance, we might just be able to use\n    // ractive.template, and not bother passing through the Parent object.\n    // At present that breaks the test mocks' expectations\n    let template = 'template' in options ? options.template : Parent.prototype.template;\n    template = template || { v: TEMPLATE_VERSION, t: [] };\n\n    if (isFunction(template)) {\n      const fn = template;\n      template = getDynamicTemplate(ractive, fn);\n\n      ractive._config.template = {\n        fn,\n        result: template\n      };\n    }\n\n    template = parseTemplate(template, ractive);\n\n    // TODO the naming of this is confusing - ractive.template refers to [...],\n    // but Component.prototype.template refers to {v:1,t:[],p:[]}...\n    // it's unnecessary, because the developer never needs to access\n    // ractive.template\n    ractive.template = template.t;\n\n    if (template.p) {\n      extendPartials(ractive.partials, template.p);\n    }\n  },\n\n  reset(ractive) {\n    const result = resetValue(ractive);\n\n    if (result) {\n      const parsed = parseTemplate(result, ractive);\n\n      ractive.template = parsed.t;\n      extendPartials(ractive.partials, parsed.p, true);\n\n      return true;\n    }\n  }\n};\n\nfunction resetValue(ractive) {\n  const initial = ractive._config.template;\n\n  // If this isn't a dynamic template, there's nothing to do\n  if (!initial || !initial.fn) {\n    return;\n  }\n\n  const result = getDynamicTemplate(ractive, initial.fn);\n\n  // TODO deep equality check to prevent unnecessary re-rendering\n  // in the case of already-parsed templates\n  if (result !== initial.result) {\n    initial.result = result;\n    return result;\n  }\n}\n\nfunction getDynamicTemplate(ractive, fn) {\n  return fn.call(ractive, {\n    fromId: parser.fromId,\n    isParsed: parser.isParsed,\n    parse(template, options = parser.getParseOptions(ractive)) {\n      return parser.parse(template, options);\n    }\n  });\n}\n\nfunction parseTemplate(template, ractive) {\n  if (isString(template)) {\n    // parse will validate and add expression functions\n    template = parseAsString(template, ractive);\n  } else {\n    // need to validate and add exp for already parsed template\n    validate(template);\n    addFunctions(template);\n  }\n\n  return template;\n}\n\nfunction parseAsString(template, ractive) {\n  // ID of an element containing the template?\n  if (template[0] === '#') {\n    template = parser.fromId(template);\n  }\n\n  return parser.parseFor(template, ractive);\n}\n\nfunction validate(template) {\n  // Check that the template even exists\n  if (template == undefined) {\n    throw new Error(`The template cannot be ${template}.`);\n  } else if (!isNumber(template.v)) {\n    // Check the parsed template has a version at all\n    throw new Error(\n      \""The template parser was passed a non-string template, but the template doesn't have a version.  Make sure you're passing in the template you think you are.\""\n    );\n  } else if (template.v !== TEMPLATE_VERSION) {\n    // Check we're using the correct version\n    throw new Error(\n      `Mismatched template version (expected ${TEMPLATE_VERSION}, got ${\n        template.v\n      }) Please ensure you are using the latest version of Ractive.js in your build process as well as in your app`\n    );\n  }\n}\n\nfunction extendPartials(existingPartials, newPartials, overwrite) {\n  if (!newPartials) return;\n\n  // TODO there's an ambiguity here - we need to overwrite in the `reset()`\n  // case, but not initially...\n\n  for (const key in newPartials) {\n    if (overwrite || !hasOwn(existingPartials, key)) {\n      existingPartials[key] = newPartials[key];\n    }\n  }\n}\n"",""import { assign, create, keys } from 'utils/object';\nimport { addFunctions } from 'shared/getFunction';\n\nconst registryNames = [\n  'adaptors',\n  'components',\n  'computed',\n  'decorators',\n  'easing',\n  'events',\n  'helpers',\n  'interpolators',\n  'partials',\n  'transitions'\n];\n\nconst registriesOnDefaults = ['computed', 'helpers'];\n\nclass Registry {\n  constructor(name, useDefaults) {\n    this.name = name;\n    this.useDefaults = useDefaults;\n  }\n\n  extend(Parent, proto, options) {\n    const parent = this.useDefaults ? Parent.defaults : Parent;\n    const target = this.useDefaults ? proto : proto.constructor;\n    this.configure(parent, target, options);\n  }\n\n  init() {\n    // noop\n  }\n\n  configure(Parent, target, options) {\n    const name = this.name;\n    const option = options[name];\n\n    const registry = create(Parent[name]);\n\n    assign(registry, option);\n\n    target[name] = registry;\n\n    if (name === 'partials' && target[name]) {\n      keys(target[name]).forEach(key => {\n        addFunctions(target[name][key]);\n      });\n    }\n  }\n\n  reset(ractive) {\n    const registry = ractive[this.name];\n    let changed = false;\n\n    keys(registry).forEach(key => {\n      const item = registry[key];\n\n      if (item._fn) {\n        if (item._fn.isOwner) {\n          registry[key] = item._fn;\n        } else {\n          delete registry[key];\n        }\n        changed = true;\n      }\n    });\n\n    return changed;\n  }\n}\n\nconst registries = registryNames.map(name => {\n  const putInDefaults = registriesOnDefaults.indexOf(name) > -1;\n  return new Registry(name, putInDefaults);\n});\n\nexport default registries;\n"",""import { warnIfDebug } from 'utils/log';\nimport adaptConfigurator from './custom/adapt';\nimport cssConfigurator from './custom/css/css';\nimport dataConfigurator from './custom/data';\nimport templateConfigurator from './custom/template';\nimport defaults from './defaults';\nimport registries from './registries';\nimport wrapPrototype from './wrapPrototypeMethod';\nimport deprecate from './deprecate';\nimport RactiveProto from '../prototype';\nimport { hasOwn, keys } from 'utils/object';\nimport { isFunction } from 'utils/is';\nimport hooks from 'src/events/Hook';\n\nconst config = {\n  extend: (Parent, proto, options, Child) => configure('extend', Parent, proto, options, Child),\n  init: (Parent, ractive, options) => configure('init', Parent, ractive, options),\n  reset: ractive => order.filter(c => c.reset && c.reset(ractive)).map(c => c.name)\n};\n\nconst custom = {\n  adapt: adaptConfigurator,\n  computed: config,\n  css: cssConfigurator,\n  data: dataConfigurator,\n  helpers: config,\n  template: templateConfigurator\n};\n\nconst defaultKeys = keys(defaults);\n\nconst isStandardKey = makeObj(defaultKeys.filter(key => !custom[key]));\n\n// blacklisted keys that we don't double extend\nconst isBlacklisted = makeObj(\n  defaultKeys.concat(registries.map(r => r.name), ['on', 'observe', 'attributes', 'cssData', 'use'])\n);\n\nconst order = [].concat(\n  defaultKeys.filter(key => !registries[key] && !custom[key]),\n  registries,\n  //custom.data,\n  custom.template,\n  custom.css\n);\n\nfunction configure(method, Parent, target, options, Child) {\n  deprecate(options);\n\n  for (const key in options) {\n    if (hasOwn(isStandardKey, key)) {\n      const value = options[key];\n\n      // warn the developer if they passed a function and ignore its value\n\n      // NOTE: we allow some functions on \""el\"" because we duck type element lists\n      // and some libraries or ef'ed-up virtual browsers (phantomJS) return a\n      // function object as the result of querySelector methods\n      if (key !== 'el' && isFunction(value)) {\n        warnIfDebug(\n          `${key} is a Ractive option that does not expect a function and will be ignored`,\n          method === 'init' ? target : null\n        );\n      } else {\n        target[key] = value;\n      }\n    }\n  }\n\n  // disallow combination of `append` and `enhance`\n  if (target.append && target.enhance) {\n    throw new Error('Cannot use append and enhance at the same time');\n  }\n\n  registries.forEach(registry => {\n    registry[method](Parent, target, options, Child);\n  });\n\n  adaptConfigurator[method](Parent, target, options, Child);\n  templateConfigurator[method](Parent, target, options, Child);\n  cssConfigurator[method](Parent, target, options, Child);\n\n  extendOtherMethods(Parent.prototype, target, options);\n}\n\nconst _super = /\\b_super\\b/;\nfunction extendOtherMethods(parent, target, options) {\n  for (const key in options) {\n    if (!isBlacklisted[key] && hasOwn(options, key)) {\n      let member = options[key];\n\n      // if this is a method that overwrites a method, wrap it:\n      if (isFunction(member)) {\n        if (\n          (key in RactiveProto ||\n            (key.slice(0, 2) === 'on' && key.slice(2) in hooks && key in target)) &&\n          !_super.test(member.toString())\n        ) {\n          warnIfDebug(\n            `Overriding Ractive prototype function '${key}' without calling the '${_super}' method can be very dangerous.`\n          );\n        }\n        member = wrapPrototype(parent, key, member);\n      }\n\n      target[key] = member;\n    }\n  }\n}\n\nfunction makeObj(array) {\n  const obj = {};\n  array.forEach(x => (obj[x] = true));\n  return obj;\n}\n\nexport default config;\n"",""import { createDocumentFragment } from 'utils/dom';\nimport noop from 'utils/noop';\n\nexport default class Item {\n  constructor(options) {\n    this.up = options.up;\n    this.ractive = options.up.ractive;\n\n    this.template = options.template;\n    this.index = options.index;\n    this.type = options.template.t;\n\n    this.dirty = false;\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n      this.up.bubble();\n    }\n  }\n\n  destroyed() {\n    if (this.fragment) this.fragment.destroyed();\n  }\n\n  find() {\n    return null;\n  }\n\n  findComponent() {\n    return null;\n  }\n\n  findNextNode() {\n    return this.up.findNextNode(this);\n  }\n\n  rebound(update) {\n    if (this.fragment) this.fragment.rebound(update);\n  }\n\n  shuffled() {\n    if (this.fragment) this.fragment.shuffled();\n  }\n\n  valueOf() {\n    return this.toString();\n  }\n}\n\nItem.prototype.findAll = noop;\nItem.prototype.findAllComponents = noop;\n\nexport class ContainerItem extends Item {\n  constructor(options) {\n    super(options);\n  }\n\n  detach() {\n    return this.fragment ? this.fragment.detach() : createDocumentFragment();\n  }\n\n  find(selector) {\n    if (this.fragment) {\n      return this.fragment.find(selector);\n    }\n  }\n\n  findAll(selector, options) {\n    if (this.fragment) {\n      this.fragment.findAll(selector, options);\n    }\n  }\n\n  findComponent(name) {\n    if (this.fragment) {\n      return this.fragment.findComponent(name);\n    }\n  }\n\n  findAllComponents(name, options) {\n    if (this.fragment) {\n      this.fragment.findAllComponents(name, options);\n    }\n  }\n\n  firstNode(skipParent) {\n    return this.fragment && this.fragment.firstNode(skipParent);\n  }\n\n  toString(escape) {\n    return this.fragment ? this.fragment.toString(escape) : '';\n  }\n}\n"",""import { capture } from 'src/global/capture';\nimport Model from './Model';\nimport { handleChange, mark, marked } from 'shared/methodCallers';\nimport { hasOwn } from 'utils/object';\n\nexport default class ComputationChild extends Model {\n  constructor(parent, key) {\n    super(parent, key);\n\n    this.isReadonly = !this.root.ractive.syncComputedChildren;\n    this.dirty = true;\n    this.isComputed = true;\n  }\n\n  get setRoot() {\n    return this.parent.setRoot;\n  }\n\n  applyValue(value) {\n    super.applyValue(value);\n\n    if (!this.isReadonly) {\n      let source = this.parent;\n      // computed models don't have a shuffle method\n      while (source && source.shuffle) {\n        source = source.parent;\n      }\n\n      if (source) {\n        source.dependencies.forEach(mark);\n      }\n    }\n\n    if (this.setRoot) {\n      this.setRoot.set(this.setRoot.value);\n    }\n  }\n\n  get(shouldCapture, opts) {\n    if (shouldCapture) capture(this);\n\n    if (this.dirty) {\n      this.dirty = false;\n      const parentValue = this.parent.get();\n      this.value = parentValue ? parentValue[this.key] : undefined;\n      if (this.wrapper) this.newWrapperValue = this.value;\n      this.adapt();\n    }\n\n    return (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture) && this.wrapper\n      ? this.wrapperValue\n      : this.value;\n  }\n\n  handleChange() {\n    if (this.dirty) return;\n    this.dirty = true;\n\n    if (this.boundValue) this.boundValue = null;\n\n    this.links.forEach(marked);\n    this.deps.forEach(handleChange);\n    this.children.forEach(handleChange);\n  }\n\n  joinKey(key) {\n    if (key === undefined || key === '') return this;\n\n    if (!hasOwn(this.childByKey, key)) {\n      const child = new ComputationChild(this, key);\n      this.children.push(child);\n      this.childByKey[key] = child;\n    }\n\n    return this.childByKey[key];\n  }\n}\n"",""/* global console */\n/* eslint no-console:\""off\"" */\n\nimport { capture, startCapturing, stopCapturing } from 'src/global/capture';\nimport { warnIfDebug } from 'utils/log';\nimport Model, { shared } from './Model';\nimport { maybeBind, noVirtual } from './ModelBase';\nimport ComputationChild from './ComputationChild';\nimport { hasConsole } from 'config/environment';\nimport { isEqual } from 'utils/is';\nimport runloop from 'src/global/runloop';\n\nexport default class Computation extends Model {\n  constructor(parent, signature, key) {\n    super(parent, key);\n\n    this.signature = signature;\n\n    this.isReadonly = !this.signature.setter;\n    this.isComputed = true;\n\n    this.dependencies = [];\n\n    this.children = [];\n    this.childByKey = {};\n\n    this.deps = [];\n\n    this.dirty = true;\n\n    // TODO: is there a less hackish way to do this?\n    this.shuffle = undefined;\n  }\n\n  get setRoot() {\n    if (this.signature.setter) return this;\n  }\n\n  get(shouldCapture, opts) {\n    if (shouldCapture) capture(this);\n\n    if (this.dirty) {\n      this.dirty = false;\n      const old = this.value;\n      this.value = this.getValue();\n      // this may cause a view somewhere to update, so it must be in a runloop\n      if (!runloop.active()) {\n        runloop.start();\n        if (!isEqual(old, this.value)) this.notifyUpstream();\n        runloop.end();\n      } else {\n        if (!isEqual(old, this.value)) this.notifyUpstream();\n      }\n      if (this.wrapper) this.newWrapperValue = this.value;\n      this.adapt();\n    }\n\n    // if capturing, this value needs to be unwrapped because it's for external use\n    return maybeBind(\n      this,\n      // if unwrap is supplied, it overrides capture\n      this.wrapper && (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture)\n        ? this.wrapperValue\n        : this.value,\n      !opts || opts.shouldBind !== false\n    );\n  }\n\n  getContext() {\n    return this.parent.isRoot ? this.root.ractive : this.parent.get(false, noVirtual);\n  }\n\n  getValue() {\n    startCapturing();\n    let result;\n\n    try {\n      result = this.signature.getter.call(this.root.ractive, this.getContext());\n    } catch (err) {\n      warnIfDebug(`Failed to compute ${this.getKeypath()}: ${err.message || err}`);\n\n      // TODO this is all well and good in Chrome, but...\n      // ...also, should encapsulate this stuff better, and only\n      // show it if Ractive.DEBUG\n      if (hasConsole) {\n        if (console.groupCollapsed)\n          console.groupCollapsed(\n            '%cshow details',\n            'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n          );\n        const sig = this.signature;\n        console.error(\n          `${err.name}: ${err.message}\\n\\n${sig.getterString}${\n            sig.getterUseStack ? '\\n\\n' + err.stack : ''\n          }`\n        );\n        if (console.groupCollapsed) console.groupEnd();\n      }\n    }\n\n    const dependencies = stopCapturing();\n    this.setDependencies(dependencies);\n\n    return result;\n  }\n\n  mark() {\n    this.handleChange();\n  }\n\n  rebind(next, previous) {\n    // computations will grab all of their deps again automagically\n    if (next !== previous) this.handleChange();\n  }\n\n  set(value) {\n    if (this.isReadonly) {\n      throw new Error(`Cannot set read-only computed value '${this.key}'`);\n    }\n\n    this.signature.setter(value);\n    this.mark();\n  }\n\n  setDependencies(dependencies) {\n    // unregister any soft dependencies we no longer have\n    let i = this.dependencies.length;\n    while (i--) {\n      const model = this.dependencies[i];\n      if (!~dependencies.indexOf(model)) model.unregister(this);\n    }\n\n    // and add any new ones\n    i = dependencies.length;\n    while (i--) {\n      const model = dependencies[i];\n      if (!~this.dependencies.indexOf(model)) model.register(this);\n    }\n\n    this.dependencies = dependencies;\n  }\n\n  teardown() {\n    let i = this.dependencies.length;\n    while (i--) {\n      if (this.dependencies[i]) this.dependencies[i].unregister(this);\n    }\n    if (this.parent.computed[this.key] === this) delete this.parent.computed[this.key];\n    super.teardown();\n  }\n}\n\nconst prototype = Computation.prototype;\nconst child = ComputationChild.prototype;\nprototype.handleChange = child.handleChange;\nprototype.joinKey = child.joinKey;\n\nshared.Computation = Computation;\n"",""import { removeFromArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport { warnIfDebug } from 'utils/log';\nimport Model from 'src/model/Model';\nimport Computation from 'src/model/Computation';\nimport { startCapturing, stopCapturing } from 'src/global/capture';\nimport getFunction from 'shared/getFunction';\nimport { rebindMatch } from 'shared/rebind';\nimport resolveReference from './resolveReference';\n\nexport default class ExpressionProxy extends Model {\n  constructor(fragment, template) {\n    super(fragment.ractive.viewmodel, null);\n\n    this.fragment = fragment;\n    this.template = template;\n\n    this.isReadonly = true;\n    this.isComputed = true;\n    this.dirty = true;\n\n    this.fn =\n      fragment.ractive.allowExpressions === false\n        ? noop\n        : getFunction(template.s, template.r.length);\n\n    this.models = this.template.r.map(ref => {\n      return resolveReference(this.fragment, ref);\n    });\n    this.dependencies = [];\n\n    this.shuffle = undefined;\n\n    this.bubble();\n  }\n\n  bubble(actuallyChanged = true) {\n    // refresh the keypath\n    this.keypath = undefined;\n\n    if (actuallyChanged) {\n      this.handleChange();\n    }\n  }\n\n  getKeypath() {\n    if (!this.template) return '@undefined';\n    if (!this.keypath) {\n      this.keypath =\n        '@' +\n        this.template.s.replace(/_(\\d+)/g, (match, i) => {\n          if (i >= this.models.length) return match;\n\n          const model = this.models[i];\n          return model ? model.getKeypath() : '@undefined';\n        });\n    }\n\n    return this.keypath;\n  }\n\n  getValue() {\n    startCapturing();\n    let result;\n\n    try {\n      const params = this.models.map(m => (m ? m.get(true) : undefined));\n      result = this.fn.apply(this.fragment.ractive, params);\n    } catch (err) {\n      warnIfDebug(`Failed to compute ${this.getKeypath()}: ${err.message || err}`);\n    }\n\n    const dependencies = stopCapturing();\n    // remove missing deps\n    this.dependencies\n      .filter(d => !~dependencies.indexOf(d))\n      .forEach(d => {\n        d.unregister(this);\n        removeFromArray(this.dependencies, d);\n      });\n    // register new deps\n    dependencies\n      .filter(d => !~this.dependencies.indexOf(d))\n      .forEach(d => {\n        d.register(this);\n        this.dependencies.push(d);\n      });\n\n    return result;\n  }\n\n  notifyUpstream() {}\n\n  rebind(next, previous, safe) {\n    const idx = this.models.indexOf(previous);\n\n    if (~idx) {\n      next = rebindMatch(this.template.r[idx], next, previous);\n      if (next !== previous) {\n        previous.unregister(this);\n        this.models.splice(idx, 1, next);\n        if (next) next.addShuffleRegister(this, 'mark');\n      }\n    }\n    this.bubble(!safe);\n  }\n\n  rebound(update) {\n    this.models = this.template.r.map(ref => resolveReference(this.fragment, ref));\n    if (update) this.bubble(true);\n  }\n\n  retrieve() {\n    return this.get();\n  }\n\n  teardown() {\n    this.fragment = undefined;\n    if (this.dependencies) this.dependencies.forEach(d => d.unregister(this));\n    super.teardown();\n  }\n\n  unreference() {\n    super.unreference();\n    collect(this);\n  }\n\n  unregister(dep) {\n    super.unregister(dep);\n    collect(this);\n  }\n\n  unregisterLink(link) {\n    super.unregisterLink(link);\n    collect(this);\n  }\n}\n\nconst prototype = ExpressionProxy.prototype;\nconst computation = Computation.prototype;\nprototype.get = computation.get;\nprototype.handleChange = computation.handleChange;\nprototype.joinKey = computation.joinKey;\nprototype.mark = computation.mark;\nprototype.unbind = noop;\n\nfunction collect(model) {\n  if (!model.deps.length && !model.refs && !model.links.length) model.teardown();\n}\n"",""import { fireShuffleTasks } from 'src/model/ModelBase';\nimport { REFERENCE } from 'config/types';\nimport { rebindMatch } from 'shared/rebind';\nimport { isArray, isString } from 'utils/is';\nimport { escapeKey } from 'shared/keypaths';\nimport ExpressionProxy from './ExpressionProxy';\nimport resolveReference from './resolveReference';\nimport resolve from './resolve';\n\nimport LinkModel, { Missing } from 'src/model/LinkModel';\n\nexport default class ReferenceExpressionProxy extends LinkModel {\n  constructor(fragment, template) {\n    super(null, null, null, '@undefined');\n    this.root = fragment.ractive.viewmodel;\n    this.template = template;\n    this.rootLink = true;\n    this.template = template;\n    this.fragment = fragment;\n\n    this.rebound();\n  }\n\n  getKeypath() {\n    return this.model ? this.model.getKeypath() : '@undefined';\n  }\n\n  rebound() {\n    const fragment = this.fragment;\n    const template = this.template;\n\n    let base = (this.base = resolve(fragment, template));\n    let idx;\n\n    if (this.proxy) {\n      teardown(this);\n    }\n\n    const proxy = (this.proxy = {\n      rebind: (next, previous) => {\n        if (previous === base) {\n          next = rebindMatch(template, next, previous);\n          if (next !== base) {\n            this.base = base = next;\n          }\n        } else if (~(idx = members.indexOf(previous))) {\n          next = rebindMatch(template.m[idx].n, next, previous);\n          if (next !== members[idx]) {\n            members.splice(idx, 1, next || Missing);\n          }\n        }\n\n        if (next !== previous) {\n          previous.unregister(proxy);\n          if (next) next.addShuffleTask(() => next.register(proxy));\n        }\n      },\n      handleChange: () => {\n        pathChanged();\n      }\n    });\n\n    base.register(proxy);\n\n    const members = (this.members = template.m.map(tpl => {\n      if (isString(tpl)) {\n        return { get: () => tpl };\n      }\n\n      let model;\n\n      if (tpl.t === REFERENCE) {\n        model = resolveReference(fragment, tpl.n);\n        model.register(proxy);\n\n        return model;\n      }\n\n      model = new ExpressionProxy(fragment, tpl);\n      model.register(proxy);\n      return model;\n    }));\n\n    const pathChanged = () => {\n      const model = base.joinAll(\n        members.reduce((list, m) => {\n          const k = m.get();\n          if (isArray(k)) return list.concat(k);\n          else list.push(escapeKey(String(k)));\n          return list;\n        }, [])\n      );\n\n      if (model !== this.model) {\n        this.model = model;\n        this.relinking(model);\n        fireShuffleTasks();\n        refreshPathDeps(this);\n      }\n    };\n\n    pathChanged();\n  }\n\n  teardown() {\n    teardown(this);\n    super.teardown();\n  }\n\n  unreference() {\n    super.unreference();\n    if (!this.deps.length && !this.refs) this.teardown();\n  }\n\n  unregister(dep) {\n    super.unregister(dep);\n    if (!this.deps.length && !this.refs) this.teardown();\n  }\n}\n\nfunction teardown(proxy) {\n  if (proxy.base) proxy.base.unregister(proxy.proxy);\n  if (proxy.models) {\n    proxy.models.forEach(m => {\n      if (m.unregister) m.unregister(proxy);\n    });\n  }\n}\n\nfunction refreshPathDeps(proxy) {\n  let len = proxy.deps.length;\n  let i, v;\n\n  for (i = 0; i < len; i++) {\n    v = proxy.deps[i];\n    if (v.pathChanged) v.pathChanged();\n    if (v.fragment && v.fragment.pathModel) v.fragment.pathModel.applyValue(proxy.getKeypath());\n  }\n\n  len = proxy.children.length;\n  for (i = 0; i < len; i++) {\n    refreshPathDeps(proxy.children[i]);\n  }\n}\n\nconst eproto = ExpressionProxy.prototype;\nconst proto = ReferenceExpressionProxy.prototype;\n\nproto.unreference = eproto.unreference;\nproto.unregister = eproto.unregister;\nproto.unregisterLink = eproto.unregisterLink;\n"",""import Fragment from '../Fragment';\nimport { ContainerItem } from './shared/Item';\nimport resolve from '../resolvers/resolve';\n\nexport function resolveAliases(aliases, fragment, dest = {}) {\n  for (let i = 0; i < aliases.length; i++) {\n    if (!dest[aliases[i].n]) {\n      const m = resolve(fragment, aliases[i].x);\n      dest[aliases[i].n] = m;\n      m.reference();\n    }\n  }\n\n  return dest;\n}\n\nexport default class Alias extends ContainerItem {\n  constructor(options) {\n    super(options);\n\n    this.fragment = null;\n  }\n\n  bind() {\n    this.fragment = new Fragment({\n      owner: this,\n      template: this.template.f\n    });\n\n    this.fragment.aliases = resolveAliases(this.template.z, this.up);\n    this.fragment.bind();\n  }\n\n  rebound(update) {\n    const aliases = this.fragment.aliases;\n    for (const k in aliases) {\n      if (aliases[k].rebound) aliases[k].rebound(update);\n      else {\n        aliases[k].unreference();\n        aliases[k] = 0;\n      }\n    }\n\n    resolveAliases(this.template.z, this.up, aliases);\n\n    if (this.fragment) this.fragment.rebound(update);\n  }\n\n  render(target, occupants) {\n    this.rendered = true;\n    if (this.fragment) this.fragment.render(target, occupants);\n  }\n\n  unbind(view) {\n    for (const k in this.fragment.aliases) {\n      this.fragment.aliases[k].unreference();\n    }\n\n    this.fragment.aliases = {};\n    if (this.fragment) this.fragment.unbind(view);\n  }\n\n  unrender(shouldDestroy) {\n    if (this.rendered && this.fragment) this.fragment.unrender(shouldDestroy);\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n      this.fragment.update();\n    }\n  }\n}\n"",""import cleanCss from 'utils/cleanCss';\nimport { isString } from 'utils/is';\n\nconst space = /\\s+/;\n\nexport function readStyle(css) {\n  if (!isString(css)) return {};\n\n  return cleanCss(css, (css, reconstruct) => {\n    return css\n      .split(';')\n      .filter(rule => !!rule.trim())\n      .map(reconstruct)\n      .reduce((rules, rule) => {\n        const i = rule.indexOf(':');\n        const name = rule.substr(0, i).trim();\n        rules[name] = rule.substr(i + 1).trim();\n        return rules;\n      }, {});\n  });\n}\n\nexport function readClass(str) {\n  const list = str.split(space);\n\n  // remove any empty entries\n  let i = list.length;\n  while (i--) {\n    if (!list[i]) list.splice(i, 1);\n  }\n\n  return list;\n}\n"",""import { html } from 'config/namespaces';\nimport { safeToStringValue } from 'utils/dom';\nimport { arrayContains } from 'utils/array';\nimport noop from 'utils/noop';\nimport hyphenateCamel from 'utils/hyphenateCamel';\nimport { readStyle, readClass } from 'src/view/helpers/specialAttrs';\nimport { keys as objectKeys } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\n\nconst textTypes = [\n  undefined,\n  'text',\n  'search',\n  'url',\n  'email',\n  'hidden',\n  'password',\n  'search',\n  'reset',\n  'submit'\n];\n\nexport default function getUpdateDelegate(attribute) {\n  const { element, name } = attribute;\n\n  if (name === 'value') {\n    if (attribute.interpolator) attribute.interpolator.bound = true;\n\n    // special case - selects\n    if (element.name === 'select' && name === 'value') {\n      return element.getAttribute('multiple') ? updateMultipleSelectValue : updateSelectValue;\n    }\n\n    if (element.name === 'textarea') return updateStringValue;\n\n    // special case - contenteditable\n    if (element.getAttribute('contenteditable') != null) return updateContentEditableValue;\n\n    // special case - <input>\n    if (element.name === 'input') {\n      const type = element.getAttribute('type');\n\n      // type='file' value='{{fileList}}'>\n      if (type === 'file') return noop; // read-only\n\n      // type='radio' name='{{twoway}}'\n      if (type === 'radio' && element.binding && element.binding.attribute.name === 'name')\n        return updateRadioValue;\n\n      if (~textTypes.indexOf(type)) return updateStringValue;\n    }\n\n    return updateValue;\n  }\n\n  const node = element.node;\n\n  // special case - <input type='radio' name='{{twoway}}' value='foo'>\n  if (attribute.isTwoway && name === 'name') {\n    if (node.type === 'radio') return updateRadioName;\n    if (node.type === 'checkbox') return updateCheckboxName;\n  }\n\n  if (name === 'style') return updateStyleAttribute;\n\n  if (name.indexOf('style-') === 0) return updateInlineStyle;\n\n  // special case - class names. IE fucks things up, again\n  if (name === 'class' && (!node.namespaceURI || node.namespaceURI === html))\n    return updateClassName;\n\n  if (name.indexOf('class-') === 0) return updateInlineClass;\n\n  if (attribute.isBoolean) {\n    const type = element.getAttribute('type');\n    if (attribute.interpolator && name === 'checked' && (type === 'checkbox' || type === 'radio'))\n      attribute.interpolator.bound = true;\n    return updateBoolean;\n  }\n\n  if (attribute.namespace && attribute.namespace !== attribute.node.namespaceURI)\n    return updateNamespacedAttribute;\n\n  return updateAttribute;\n}\n\nfunction updateMultipleSelectValue(reset) {\n  let value = this.getValue();\n\n  if (!isArray(value)) value = [value];\n\n  const options = this.node.options;\n  let i = options.length;\n\n  if (reset) {\n    while (i--) options[i].selected = false;\n  } else {\n    while (i--) {\n      const option = options[i];\n      const optionValue = option._ractive ? option._ractive.value : option.value; // options inserted via a triple don't have _ractive\n\n      option.selected = arrayContains(value, optionValue);\n    }\n  }\n}\n\nfunction updateSelectValue(reset) {\n  const value = this.getValue();\n\n  if (!this.locked) {\n    // TODO is locked still a thing?\n    this.node._ractive.value = value;\n\n    const options = this.node.options;\n    let i = options.length;\n    let wasSelected = false;\n\n    if (reset) {\n      while (i--) options[i].selected = false;\n    } else {\n      while (i--) {\n        const option = options[i];\n        const optionValue = option._ractive ? option._ractive.value : option.value; // options inserted via a triple don't have _ractive\n        if (option.disabled && option.selected) wasSelected = true;\n\n        if (optionValue == value) {\n          // double equals as we may be comparing numbers with strings\n          option.selected = true;\n          return;\n        }\n      }\n    }\n\n    if (!wasSelected) this.node.selectedIndex = -1;\n  }\n}\n\nfunction updateContentEditableValue(reset) {\n  const value = this.getValue();\n\n  if (!this.locked) {\n    if (reset) this.node.innerHTML = '';\n    else this.node.innerHTML = value === undefined ? '' : value;\n  }\n}\n\nfunction updateRadioValue(reset) {\n  const node = this.node;\n  const wasChecked = node.checked;\n\n  const value = this.getValue();\n\n  if (reset) return (node.checked = false);\n\n  //node.value = this.element.getAttribute( 'value' );\n  node.value = this.node._ractive.value = value;\n  node.checked = this.element.compare(value, this.element.getAttribute('name'));\n\n  // This is a special case - if the input was checked, and the value\n  // changed so that it's no longer checked, the twoway binding is\n  // most likely out of date. To fix it we have to jump through some\n  // hoops... this is a little kludgy but it works\n  if (wasChecked && !node.checked && this.element.binding && this.element.binding.rendered) {\n    this.element.binding.group.model.set(this.element.binding.group.getValue());\n  }\n}\n\nfunction updateValue(reset) {\n  if (!this.locked) {\n    if (reset) {\n      this.node.removeAttribute('value');\n      this.node.value = this.node._ractive.value = null;\n    } else {\n      const value = this.getValue();\n\n      this.node.value = this.node._ractive.value = value;\n      this.node.setAttribute('value', safeToStringValue(value));\n    }\n  }\n}\n\nfunction updateStringValue(reset) {\n  if (!this.locked) {\n    if (reset) {\n      this.node._ractive.value = '';\n      this.node.removeAttribute('value');\n    } else {\n      const value = this.getValue();\n\n      this.node._ractive.value = value;\n\n      const safeValue = safeToStringValue(value);\n\n      // fixes #3281 – Safari moves caret position when setting an input value to the same value\n      if (this.node.value !== safeValue) {\n        this.node.value = safeValue;\n      }\n\n      this.node.setAttribute('value', safeValue);\n    }\n  }\n}\n\nfunction updateRadioName(reset) {\n  if (reset) this.node.checked = false;\n  else this.node.checked = this.element.compare(this.getValue(), this.element.binding.getValue());\n}\n\nfunction updateCheckboxName(reset) {\n  const { element, node } = this;\n  const binding = element.binding;\n\n  const value = this.getValue();\n  const valueAttribute = element.getAttribute('value');\n\n  if (reset) {\n    // TODO: WAT?\n  }\n\n  if (!isArray(value)) {\n    binding.isChecked = node.checked = element.compare(value, valueAttribute);\n  } else {\n    let i = value.length;\n    while (i--) {\n      if (element.compare(valueAttribute, value[i])) {\n        binding.isChecked = node.checked = true;\n        return;\n      }\n    }\n    binding.isChecked = node.checked = false;\n  }\n}\n\nfunction updateStyleAttribute(reset) {\n  const props = reset ? {} : readStyle(this.getValue() || '');\n  const style = this.node.style;\n  const keys = objectKeys(props);\n  const prev = this.previous || [];\n\n  let i = 0;\n  while (i < keys.length) {\n    if (keys[i] in style) {\n      const safe = props[keys[i]].replace('!important', '');\n      style.setProperty(keys[i], safe, safe.length !== props[keys[i]].length ? 'important' : '');\n    }\n    i++;\n  }\n\n  // remove now-missing attrs\n  i = prev.length;\n  while (i--) {\n    if (!~keys.indexOf(prev[i]) && prev[i] in style) style.setProperty(prev[i], '', '');\n  }\n\n  this.previous = keys;\n}\n\nfunction updateInlineStyle(reset) {\n  if (!this.style) {\n    this.style = hyphenateCamel(this.name.substr(6));\n  }\n\n  if (reset && this.node.style.getPropertyValue(this.style) !== this.last) return;\n\n  const value = reset ? '' : safeToStringValue(this.getValue());\n  const safe = value.replace('!important', '');\n  this.node.style.setProperty(this.style, safe, safe.length !== value.length ? 'important' : '');\n  this.last = this.node.style.getPropertyValue(this.style);\n}\n\nfunction updateClassName(reset) {\n  const value = reset ? [] : readClass(safeToStringValue(this.getValue()));\n\n  // watch out for werdo svg elements\n  let cls = this.node.className;\n  cls = cls.baseVal !== undefined ? cls.baseVal : cls;\n\n  const attr = readClass(cls);\n  const prev = this.previous || [];\n\n  const className = value.concat(attr.filter(c => !~prev.indexOf(c))).join(' ');\n\n  if (className !== cls) {\n    if (!isString(this.node.className)) {\n      this.node.className.baseVal = className;\n    } else {\n      this.node.className = className;\n    }\n  }\n\n  this.previous = value;\n}\n\nfunction updateInlineClass(reset) {\n  const name = this.name.substr(6);\n\n  // watch out for werdo svg elements\n  let cls = this.node.className;\n  cls = cls.baseVal !== undefined ? cls.baseVal : cls;\n\n  const attr = readClass(cls);\n  const value = reset ? false : this.getValue();\n\n  if (!this.inlineClass) this.inlineClass = name;\n\n  if (value && !~attr.indexOf(name)) attr.push(name);\n  else if (!value && ~attr.indexOf(name)) attr.splice(attr.indexOf(name), 1);\n\n  if (!isString(this.node.className)) {\n    this.node.className.baseVal = attr.join(' ');\n  } else {\n    this.node.className = attr.join(' ');\n  }\n}\n\nfunction updateBoolean(reset) {\n  // with two-way binding, only update if the change wasn't initiated by the user\n  // otherwise the cursor will often be sent to the wrong place\n  if (!this.locked) {\n    if (reset) {\n      if (this.useProperty) this.node[this.propertyName] = false;\n      this.node.removeAttribute(this.propertyName);\n    } else {\n      if (this.useProperty) {\n        this.node[this.propertyName] = this.getValue();\n      } else {\n        const val = this.getValue();\n        if (val) {\n          this.node.setAttribute(this.propertyName, isString(val) ? val : '');\n        } else {\n          this.node.removeAttribute(this.propertyName);\n        }\n      }\n    }\n  }\n}\n\nexport function updateAttribute(reset) {\n  if (reset) {\n    if (this.node.getAttribute(this.name) === this.value) {\n      this.node.removeAttribute(this.name);\n    }\n  } else {\n    this.value = safeToStringValue(this.getString());\n    this.node.setAttribute(this.name, this.value);\n  }\n}\n\nexport function updateNamespacedAttribute(reset) {\n  if (reset) {\n    if (\n      this.value ===\n      this.node.getAttributeNS(this.namespace, this.name.slice(this.name.indexOf(':') + 1))\n    ) {\n      this.node.removeAttributeNS(this.namespace, this.name.slice(this.name.indexOf(':') + 1));\n    }\n  } else {\n    this.value = safeToStringValue(this.getString());\n    this.node.setAttributeNS(\n      this.namespace,\n      this.name.slice(this.name.indexOf(':') + 1),\n      this.value\n    );\n  }\n}\n"",""export default {\n  'accept-charset': 'acceptCharset',\n  accesskey: 'accessKey',\n  bgcolor: 'bgColor',\n  class: 'className',\n  codebase: 'codeBase',\n  colspan: 'colSpan',\n  contenteditable: 'contentEditable',\n  datetime: 'dateTime',\n  dirname: 'dirName',\n  for: 'htmlFor',\n  'http-equiv': 'httpEquiv',\n  ismap: 'isMap',\n  maxlength: 'maxLength',\n  novalidate: 'noValidate',\n  pubdate: 'pubDate',\n  readonly: 'readOnly',\n  rowspan: 'rowSpan',\n  tabindex: 'tabIndex',\n  usemap: 'useMap'\n};\n"",""import { doc } from 'config/environment';\nimport { svg } from 'config/namespaces';\nimport { createElement } from 'utils/dom';\nimport { toArray } from 'utils/array';\nimport noop from 'utils/noop';\nimport Fragment from '../../Fragment';\nimport Item from '../shared/Item';\n\nconst div = doc ? createElement('div') : null;\n\nlet attributes = false;\nexport function inAttributes() {\n  return attributes;\n}\n\nexport default class ConditionalAttribute extends Item {\n  constructor(options) {\n    super(options);\n\n    this.attributes = [];\n\n    this.owner = options.owner;\n\n    this.fragment = new Fragment({\n      ractive: this.ractive,\n      owner: this,\n      template: this.template\n    });\n\n    // this fragment can't participate in node-y things\n    this.fragment.findNextNode = noop;\n\n    this.dirty = false;\n  }\n\n  bind() {\n    this.fragment.bind();\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.dirty = true;\n      this.owner.bubble();\n    }\n  }\n\n  destroyed() {\n    this.unrender();\n  }\n\n  render() {\n    this.node = this.owner.node;\n    if (this.node) {\n      this.isSvg = this.node.namespaceURI === svg;\n    }\n\n    attributes = true;\n    if (!this.rendered) this.fragment.render();\n\n    this.rendered = true;\n    this.dirty = true; // TODO this seems hacky, but necessary for tests to pass in browser AND node.js\n    this.update();\n    attributes = false;\n  }\n\n  toString() {\n    return this.fragment.toString();\n  }\n\n  unbind(view) {\n    this.fragment.unbind(view);\n  }\n\n  unrender() {\n    this.rendered = false;\n    this.fragment.unrender();\n  }\n\n  update() {\n    let str;\n    let attrs;\n\n    if (this.dirty) {\n      this.dirty = false;\n\n      const current = attributes;\n      attributes = true;\n      this.fragment.update();\n\n      if (this.rendered && this.node) {\n        str = this.fragment.toString();\n\n        attrs = parseAttributes(str, this.isSvg);\n\n        // any attributes that previously existed but no longer do\n        // must be removed\n        this.attributes\n          .filter(a => notIn(attrs, a))\n          .forEach(a => {\n            this.node.removeAttribute(a.name);\n          });\n\n        attrs.forEach(a => {\n          this.node.setAttribute(a.name, a.value);\n        });\n\n        this.attributes = attrs;\n      }\n\n      attributes = current || false;\n    }\n  }\n}\n\nconst onlyWhitespace = /^\\s*$/;\nfunction parseAttributes(str, isSvg) {\n  if (onlyWhitespace.test(str)) return [];\n  const tagName = isSvg ? 'svg' : 'div';\n  return str\n    ? (div.innerHTML = `<${tagName} ${str}></${tagName}>`) && toArray(div.childNodes[0].attributes)\n    : [];\n}\n\nfunction notIn(haystack, needle) {\n  let i = haystack.length;\n\n  while (i--) {\n    if (haystack[i].name === needle.name) {\n      return false;\n    }\n  }\n\n  return true;\n}\n"",""import { INTERPOLATOR } from 'config/types';\nimport namespaces from 'config/namespaces';\nimport { safeAttributeString } from 'utils/dom';\nimport { booleanAttributes } from 'utils/html';\nimport hyphenateCamel from 'utils/hyphenateCamel';\nimport Fragment from '../../Fragment';\nimport Item from '../shared/Item';\nimport findElement from '../shared/findElement';\nimport getUpdateDelegate from './attribute/getUpdateDelegate';\nimport propertyNames from './attribute/propertyNames';\nimport { inAttributes } from './ConditionalAttribute';\nimport { isArray, isString } from 'utils/is';\n\nfunction lookupNamespace(node, prefix) {\n  const qualified = `xmlns:${prefix}`;\n\n  while (node) {\n    if (node.hasAttribute && node.hasAttribute(qualified)) return node.getAttribute(qualified);\n    node = node.parentNode;\n  }\n\n  return namespaces[prefix];\n}\n\nlet attribute = false;\nexport function inAttribute() {\n  return attribute;\n}\n\nexport default class Attribute extends Item {\n  constructor(options) {\n    super(options);\n\n    this.name = options.template.n;\n    this.namespace = null;\n\n    this.owner = options.owner || options.up.owner || options.element || findElement(options.up);\n    this.element =\n      options.element || (this.owner.attributeByName ? this.owner : findElement(options.up));\n    this.up = options.up; // shared\n    this.ractive = this.up.ractive;\n\n    this.rendered = false;\n    this.updateDelegate = null;\n    this.fragment = null;\n\n    this.element.attributeByName[this.name] = this;\n\n    if (!isArray(options.template.f)) {\n      this.value = options.template.f;\n      if (this.value === 0) {\n        this.value = '';\n      } else if (this.value === undefined) {\n        this.value = true;\n      }\n      return;\n    } else {\n      this.fragment = new Fragment({\n        owner: this,\n        template: options.template.f\n      });\n    }\n\n    this.interpolator =\n      this.fragment &&\n      this.fragment.items.length === 1 &&\n      this.fragment.items[0].type === INTERPOLATOR &&\n      this.fragment.items[0];\n\n    if (this.interpolator) this.interpolator.owner = this;\n  }\n\n  bind() {\n    if (this.fragment) {\n      this.fragment.bind();\n    }\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.up.bubble();\n      this.element.bubble();\n      this.dirty = true;\n    }\n  }\n\n  firstNode() {}\n\n  getString() {\n    attribute = true;\n    const value = this.fragment\n      ? this.fragment.toString()\n      : this.value != null\n      ? '' + this.value\n      : '';\n    attribute = false;\n    return value;\n  }\n\n  // TODO could getValue ever be called for a static attribute,\n  // or can we assume that this.fragment exists?\n  getValue() {\n    attribute = true;\n    const value = this.fragment\n      ? this.fragment.valueOf()\n      : booleanAttributes[this.name.toLowerCase()]\n      ? true\n      : this.value;\n    attribute = false;\n    return value;\n  }\n\n  render() {\n    const node = this.element.node;\n    this.node = node;\n\n    // should we use direct property access, or setAttribute?\n    if (!node.namespaceURI || node.namespaceURI === namespaces.html) {\n      this.propertyName = propertyNames[this.name] || this.name;\n\n      if (node[this.propertyName] !== undefined) {\n        this.useProperty = true;\n      }\n\n      // is attribute a boolean attribute or 'value'? If so we're better off doing e.g.\n      // node.selected = true rather than node.setAttribute( 'selected', '' )\n      if (booleanAttributes[this.name.toLowerCase()] || this.isTwoway) {\n        this.isBoolean = true;\n      }\n\n      if (this.propertyName === 'value') {\n        node._ractive.value = this.value;\n      }\n    }\n\n    if (node.namespaceURI) {\n      const index = this.name.indexOf(':');\n      if (index !== -1) {\n        this.namespace = lookupNamespace(node, this.name.slice(0, index));\n      } else {\n        this.namespace = node.namespaceURI;\n      }\n    }\n\n    this.rendered = true;\n    this.updateDelegate = getUpdateDelegate(this);\n    this.updateDelegate();\n  }\n\n  toString() {\n    if (inAttributes()) return '';\n    attribute = true;\n\n    const value = this.getValue();\n\n    // Special case - select and textarea values (should not be stringified)\n    if (\n      this.name === 'value' &&\n      (this.element.getAttribute('contenteditable') !== undefined ||\n        (this.element.name === 'select' || this.element.name === 'textarea'))\n    ) {\n      return;\n    }\n\n    // Special case – bound radio `name` attributes\n    if (\n      this.name === 'name' &&\n      this.element.name === 'input' &&\n      this.interpolator &&\n      this.element.getAttribute('type') === 'radio'\n    ) {\n      return `name=\""{{${this.interpolator.model.getKeypath()}}}\""`;\n    }\n\n    // Special case - style and class attributes and directives\n    if (\n      this.owner === this.element &&\n      (this.name === 'style' || this.name === 'class' || this.style || this.inlineClass)\n    ) {\n      return;\n    }\n\n    if (\n      !this.rendered &&\n      this.owner === this.element &&\n      (!this.name.indexOf('style-') || !this.name.indexOf('class-'))\n    ) {\n      if (!this.name.indexOf('style-')) {\n        this.style = hyphenateCamel(this.name.substr(6));\n      } else {\n        this.inlineClass = this.name.substr(6);\n      }\n\n      return;\n    }\n\n    if (booleanAttributes[this.name.toLowerCase()])\n      return value\n        ? isString(value)\n          ? `${this.name}=\""${safeAttributeString(value)}\""`\n          : this.name\n        : '';\n    if (value == null) return '';\n\n    const str = safeAttributeString(this.getString());\n    attribute = false;\n\n    return str ? `${this.name}=\""${str}\""` : this.name;\n  }\n\n  unbind(view) {\n    if (this.fragment) this.fragment.unbind(view);\n  }\n\n  unrender() {\n    this.updateDelegate(true);\n\n    this.rendered = false;\n  }\n\n  update() {\n    if (this.dirty) {\n      let binding;\n      this.dirty = false;\n      if (this.fragment) this.fragment.update();\n      if (this.rendered) this.updateDelegate();\n      if (this.isTwoway && !this.locked) {\n        this.interpolator.twowayBinding.lastVal(true, this.interpolator.model.get());\n      } else if (this.name === 'value' && (binding = this.element.binding)) {\n        // special case: name bound element with dynamic value\n        const attr = binding.attribute;\n        if (attr && !attr.dirty && attr.rendered) {\n          this.element.binding.attribute.updateDelegate();\n        }\n      }\n    }\n  }\n}\n"",""import { INTERPOLATOR, ELEMENT } from 'config/types';\nimport Item from '../shared/Item';\nimport Fragment from '../../Fragment';\nimport findElement from '../shared/findElement';\nimport { isArray } from 'utils/is';\n\nexport default class BindingFlag extends Item {\n  constructor(options) {\n    super(options);\n\n    this.owner = options.owner || options.up.owner || findElement(options.up);\n    this.element = this.owner.attributeByName ? this.owner : findElement(options.up);\n    this.flag = options.template.v === 'l' ? 'lazy' : 'twoway';\n    this.bubbler = this.owner === this.element ? this.element : this.up;\n\n    if (this.element.type === ELEMENT) {\n      if (isArray(options.template.f)) {\n        this.fragment = new Fragment({\n          owner: this,\n          template: options.template.f\n        });\n      }\n\n      this.interpolator =\n        this.fragment &&\n        this.fragment.items.length === 1 &&\n        this.fragment.items[0].type === INTERPOLATOR &&\n        this.fragment.items[0];\n    }\n  }\n\n  bind() {\n    if (this.fragment) this.fragment.bind();\n    set(this, this.getValue(), true);\n  }\n\n  bubble() {\n    if (!this.dirty) {\n      this.bubbler.bubble();\n      this.dirty = true;\n    }\n  }\n\n  getValue() {\n    if (this.fragment) return this.fragment.valueOf();\n    else if ('value' in this) return this.value;\n    else if ('f' in this.template) return this.template.f;\n    else return true;\n  }\n\n  render() {\n    set(this, this.getValue(), true);\n  }\n\n  toString() {\n    return '';\n  }\n\n  unbind(view) {\n    if (this.fragment) this.fragment.unbind(view);\n\n    delete this.element[this.flag];\n  }\n\n  unrender() {\n    if (this.element.rendered) this.element.recreateTwowayBinding();\n  }\n\n  update() {\n    if (this.dirty) {\n      this.dirty = false;\n      if (this.fragment) this.fragment.update();\n      set(this, this.getValue(), true);\n    }\n  }\n}\n\nfunction set(flag, value, update) {\n  if (value === 0) {\n    flag.value = true;\n  } else if (value === 'true') {\n    flag.value = true;\n  } else if (value === 'false' || value === '0') {\n    flag.value = false;\n  } else {\n    flag.value = value;\n  }\n\n  const current = flag.element[flag.flag];\n  flag.element[flag.flag] = flag.value;\n  if (update && !flag.element.attributes.binding && current !== flag.value) {\n    flag.element.recreateTwowayBinding();\n  }\n\n  return flag.value;\n}\n"",""import Item from './shared/Item';\nimport noop from 'utils/noop';\nimport { detachNode } from 'utils/dom';\nimport { doc } from 'config/environment';\nimport { assign, create } from 'utils/object';\n\nexport default function Comment(options) {\n  Item.call(this, options);\n}\n\nconst proto = create(Item.prototype);\n\nassign(proto, {\n  bind: noop,\n  unbind: noop,\n  update: noop,\n\n  detach() {\n    return detachNode(this.node);\n  },\n\n  firstNode() {\n    return this.node;\n  },\n\n  render(target) {\n    this.rendered = true;\n\n    this.node = doc.createComment(this.template.c);\n    target.appendChild(this.node);\n  },\n\n  toString() {\n    return `<!-- ${this.template.c} -->`;\n  },\n\n  unrender(shouldDestroy) {\n    if (this.rendered && shouldDestroy) this.detach();\n    this.rendered = false;\n  }\n});\n\nComment.prototype = proto;\n"",""import { SharedModel } from './SharedModel';\nimport { Missing } from '../LinkModel';\nimport { create } from 'utils/object';\n\nexport default class RactiveModel extends SharedModel {\n  constructor(ractive) {\n    super(ractive, '@this');\n    this.ractive = ractive;\n  }\n\n  joinKey(key) {\n    const model = super.joinKey(key);\n\n    if ((key === 'root' || key === 'parent') && !model.isLink) return initLink(model, key);\n    else if (key === 'data') return this.ractive.viewmodel;\n    else if (key === 'cssData') return this.ractive.constructor._cssModel;\n\n    return model;\n  }\n}\n\nfunction initLink(model, key) {\n  model.applyValue = function(value) {\n    this.parent.value[key] = value;\n    if (value && value.viewmodel) {\n      this.link(value.viewmodel.getRactiveModel(), key);\n      this._link.markedAll();\n    } else {\n      this.link(create(Missing), key);\n      this._link.markedAll();\n    }\n  };\n\n  if (key === 'root') {\n    const mark = model.mark;\n    model.mark = function(force) {\n      if (this._marking) return;\n      this._marking = true;\n      mark.apply(this, force);\n      this._marking = false;\n    };\n  }\n\n  model.applyValue(model.parent.ractive[key], key);\n  model._link.set = v => model.applyValue(v);\n  model._link.applyValue = v => model.applyValue(v);\n\n  return model._link;\n}\n"",""import { capture } from 'src/global/capture';\nimport Model from './Model';\nimport { handleChange, mark } from 'shared/methodCallers';\nimport RactiveModel from './specials/RactiveModel';\nimport SharedModel, { GlobalModel, SharedModel as SharedBase } from './specials/SharedModel';\nimport { splitKeypath, unescapeKey } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport noop from 'utils/noop';\n\nconst specialModels = {\n  '@this'(root) {\n    return root.getRactiveModel();\n  },\n  '@global'() {\n    return GlobalModel;\n  },\n  '@shared'() {\n    return SharedModel;\n  },\n  '@style'(root) {\n    return root.getRactiveModel().joinKey('cssData');\n  },\n  '@helpers'(root) {\n    return root.getHelpers();\n  }\n};\nspecialModels['@'] = specialModels['@this'];\n\nexport default class RootModel extends Model {\n  constructor(options) {\n    super(null, null);\n\n    this.isRoot = true;\n    this.root = this;\n    this.ractive = options.ractive; // TODO sever this link\n\n    this.value = options.data;\n    this.adaptors = options.adapt;\n    this.adapt();\n  }\n\n  attached(fragment) {\n    attachImplicits(this, fragment);\n  }\n\n  createLink(keypath, target, targetPath, options) {\n    const keys = splitKeypath(keypath);\n\n    let model = this;\n    while (keys.length) {\n      const key = keys.shift();\n      model = model.childByKey[key] || model.joinKey(key);\n    }\n\n    return model.link(target, targetPath, options);\n  }\n\n  detached() {\n    detachImplicits(this);\n  }\n\n  get(shouldCapture, options) {\n    if (shouldCapture) capture(this);\n\n    if (!options || options.virtual !== false) {\n      return this.getVirtual();\n    } else {\n      return this.value;\n    }\n  }\n\n  getHelpers() {\n    if (!this.helpers) this.helpers = new SharedBase(this.ractive.helpers, 'helpers', this.ractive);\n    return this.helpers;\n  }\n\n  getKeypath() {\n    return '';\n  }\n\n  getRactiveModel() {\n    return this.ractiveModel || (this.ractiveModel = new RactiveModel(this.ractive));\n  }\n\n  getValueChildren() {\n    const children = super.getValueChildren(this.value);\n\n    this.children.forEach(child => {\n      if (child._link) {\n        const idx = children.indexOf(child);\n        if (~idx) children.splice(idx, 1, child._link);\n        else children.push(child._link);\n      }\n    });\n\n    return children;\n  }\n\n  has(key) {\n    if (key[0] === '~' && key[1] === '/') key = key.slice(2);\n    if (specialModels[key] || key === '') return true;\n\n    if (super.has(key)) {\n      return true;\n    } else {\n      const unescapedKey = unescapeKey(key);\n\n      // mappings/links and computations\n      if (this.childByKey[unescapedKey] && this.childByKey[unescapedKey]._link) return true;\n    }\n  }\n\n  joinKey(key, opts) {\n    if (key[0] === '~' && key[1] === '/') key = key.slice(2);\n\n    if (key[0] === '@') {\n      const fn = specialModels[key];\n      if (fn) return fn(this);\n    } else {\n      return super.joinKey(key, opts);\n    }\n  }\n\n  set(value) {\n    // TODO wrapping root node is a baaaad idea. We should prevent this\n    const wrapper = this.wrapper;\n    if (wrapper) {\n      const shouldTeardown = !wrapper.reset || wrapper.reset(value) === false;\n\n      if (shouldTeardown) {\n        wrapper.teardown();\n        this.wrapper = null;\n        this.value = value;\n        this.adapt();\n      }\n    } else {\n      this.value = value;\n      this.adapt();\n    }\n\n    this.deps.forEach(handleChange);\n    this.children.forEach(mark);\n  }\n\n  retrieve() {\n    return this.wrapper ? this.wrapper.get() : this.value;\n  }\n\n  teardown() {\n    super.teardown();\n    this.ractiveModel && this.ractiveModel.teardown();\n  }\n}\nRootModel.prototype.update = noop;\n\nfunction attachImplicits(model, fragment) {\n  if (model._link && model._link.implicit && model._link.isDetached()) {\n    model.attach(fragment);\n  }\n\n  // look for virtual children to relink and cascade\n  for (const k in model.childByKey) {\n    if (model.value) {\n      if (k in model.value) {\n        attachImplicits(model.childByKey[k], fragment);\n      } else if (!model.childByKey[k]._link || model.childByKey[k]._link.isDetached()) {\n        const mdl = resolveReference(fragment, k);\n        if (mdl) {\n          model.childByKey[k].link(mdl, k, { implicit: true });\n        }\n      }\n    }\n  }\n}\n\nfunction detachImplicits(model) {\n  if (model._link && model._link.implicit) {\n    model.unlink();\n  }\n\n  for (const k in model.childByKey) {\n    detachImplicits(model.childByKey[k]);\n  }\n}\n"",""import { fatal, warnIfDebug, welcome } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport { ensureArray, combine } from 'utils/array';\nimport { findInViewHierarchy } from 'shared/registry';\nimport dataConfigurator from './config/custom/data';\nimport RootModel from 'src/model/RootModel';\nimport hooks from 'src/events/Hook';\nimport subscribe from './helpers/subscribe';\nimport Ractive from '../Ractive';\nimport { ATTRIBUTE, BINDING_FLAG, DECORATOR, INTERPOLATOR, TRANSITION } from 'config/types';\nimport { assign, create, hasOwn } from 'utils/object';\nimport { isArray, isString } from 'utils/is';\nimport { compute } from 'src/Ractive/prototype/compute';\nimport getRactiveContext from '../shared/getRactiveContext';\n\nconst registryNames = [\n  'adaptors',\n  'components',\n  'decorators',\n  'easing',\n  'events',\n  'interpolators',\n  'partials',\n  'transitions'\n];\n\nconst protoRegistries = ['computed', 'helpers'];\n\nlet uid = 0;\n\nexport default function construct(ractive, options) {\n  if (Ractive.DEBUG) welcome();\n\n  initialiseProperties(ractive);\n  handleAttributes(ractive);\n\n  // set up event subscribers\n  subscribe(ractive, options, 'on');\n\n  // if there's not a delegation setting, inherit from parent if it's not default\n  if (\n    !hasOwn(options, 'delegate') &&\n    ractive.parent &&\n    ractive.parent.delegate !== ractive.delegate\n  ) {\n    ractive.delegate = false;\n  }\n\n  // plugins that need to run at construct\n  if (isArray(options.use)) {\n    ractive.use.apply(ractive, options.use.filter(p => p.construct));\n  }\n\n  hooks.construct.fire(ractive, options);\n  if (options.onconstruct) options.onconstruct.call(ractive, getRactiveContext(ractive), options);\n\n  // Add registries\n  let i = registryNames.length;\n  while (i--) {\n    const name = registryNames[i];\n    ractive[name] = assign(create(ractive.constructor[name] || null), options[name]);\n  }\n\n  i = protoRegistries.length;\n  while (i--) {\n    const name = protoRegistries[i];\n    ractive[name] = assign(create(ractive.constructor.prototype[name]), options[name]);\n  }\n\n  if (ractive._attributePartial) {\n    ractive.partials['extra-attributes'] = ractive._attributePartial;\n    delete ractive._attributePartial;\n  }\n\n  // Create a viewmodel\n  const viewmodel = new RootModel({\n    adapt: getAdaptors(ractive, ractive.adapt, options),\n    data: dataConfigurator.init(ractive.constructor, ractive, options),\n    ractive\n  });\n\n  // once resolved, share the adaptors array between the root model and instance\n  ractive.adapt = viewmodel.adaptors;\n\n  ractive.viewmodel = viewmodel;\n\n  for (const k in ractive.computed) {\n    compute.call(ractive, k, ractive.computed[k]);\n  }\n}\n\nfunction getAdaptors(ractive, protoAdapt, options) {\n  protoAdapt = protoAdapt.map(lookup);\n  const adapt = ensureArray(options.adapt).map(lookup);\n\n  const srcs = [protoAdapt, adapt];\n  if (ractive.parent && !ractive.isolated) {\n    srcs.push(ractive.parent.viewmodel.adaptors);\n  }\n\n  return combine.apply(null, srcs);\n\n  function lookup(adaptor) {\n    if (isString(adaptor)) {\n      adaptor = findInViewHierarchy('adaptors', ractive, adaptor);\n\n      if (!adaptor) {\n        fatal(missingPlugin(adaptor, 'adaptor'));\n      }\n    }\n\n    return adaptor;\n  }\n}\n\nfunction initialiseProperties(ractive) {\n  // Generate a unique identifier, for places where you'd use a weak map if it\n  // existed\n  ractive._guid = 'r-' + uid++;\n\n  // events\n  ractive._subs = create(null);\n  ractive._nsSubs = 0;\n\n  // storage for item configuration from instantiation to reset,\n  // like dynamic functions or original values\n  ractive._config = {};\n\n  // events\n  ractive.event = null;\n  ractive._eventQueue = [];\n\n  // observers\n  ractive._observers = [];\n\n  // external children\n  ractive._children = [];\n  ractive._children.byName = {};\n  ractive.children = ractive._children;\n\n  if (!ractive.component) {\n    ractive.root = ractive;\n    ractive.parent = ractive.container = null; // TODO container still applicable?\n  }\n}\n\nfunction handleAttributes(ractive) {\n  const component = ractive.component;\n  const attributes = ractive.constructor.attributes;\n\n  if (attributes && component) {\n    const tpl = component.template;\n    const attrs = tpl.m ? tpl.m.slice() : [];\n\n    // grab all of the passed attribute names\n    const props = attrs.filter(a => a.t === ATTRIBUTE).map(a => a.n);\n\n    // warn about missing requireds\n    attributes.required.forEach(p => {\n      if (!~props.indexOf(p)) {\n        warnIfDebug(`Component '${component.name}' requires attribute '${p}' to be provided`);\n      }\n    });\n\n    // set up a partial containing non-property attributes\n    const all = attributes.optional.concat(attributes.required);\n    const partial = [];\n    let i = attrs.length;\n    while (i--) {\n      const a = attrs[i];\n      if (a.t === ATTRIBUTE && !~all.indexOf(a.n)) {\n        if (attributes.mapAll) {\n          // map the attribute if requested and make the extra attribute in the partial refer to the mapping\n          partial.unshift({\n            t: ATTRIBUTE,\n            n: a.n,\n            f: [{ t: INTERPOLATOR, r: `~/${a.n}` }]\n          });\n        } else {\n          // transfer the attribute to the extra attributes partal\n          partial.unshift(attrs.splice(i, 1)[0]);\n        }\n      } else if (\n        !attributes.mapAll &&\n        (a.t === DECORATOR || a.t === TRANSITION || a.t === BINDING_FLAG)\n      ) {\n        partial.unshift(attrs.splice(i, 1)[0]);\n      }\n    }\n\n    if (partial.length) component.template = { t: tpl.t, e: tpl.e, f: tpl.f, m: attrs, p: tpl.p };\n    ractive._attributePartial = partial;\n  }\n}\n"",""import { escapeKey, unescapeKey } from 'shared/keypaths';\nimport { addToArray, removeFromArray } from 'utils/array';\nimport { isArray, isObject, isFunction } from 'utils/is';\nimport bind from 'utils/bind';\nimport { create, keys as objectKeys } from 'utils/object';\n\nconst shuffleTasks = { early: [], mark: [] };\nconst registerQueue = { early: [], mark: [] };\nexport const noVirtual = { virtual: false };\n\nexport default class ModelBase {\n  constructor(parent) {\n    this.deps = [];\n\n    this.children = [];\n    this.childByKey = {};\n    this.links = [];\n\n    this.bindings = [];\n\n    if (parent) {\n      this.parent = parent;\n      this.root = parent.root;\n    }\n  }\n\n  addShuffleTask(task, stage = 'early') {\n    shuffleTasks[stage].push(task);\n  }\n  addShuffleRegister(item, stage = 'early') {\n    registerQueue[stage].push({ model: this, item });\n  }\n\n  downstreamChanged() {}\n\n  findMatches(keys) {\n    const len = keys.length;\n\n    let existingMatches = [this];\n    let matches;\n    let i;\n\n    for (i = 0; i < len; i += 1) {\n      const key = keys[i];\n\n      if (key === '*') {\n        matches = [];\n        existingMatches.forEach(model => {\n          matches.push.apply(matches, model.getValueChildren(model.get()));\n        });\n      } else {\n        matches = existingMatches.map(model => model.joinKey(key));\n      }\n\n      existingMatches = matches;\n    }\n\n    return matches;\n  }\n\n  getKeypath(ractive) {\n    if (ractive !== this.ractive && this._link) return this._link.target.getKeypath(ractive);\n\n    if (!this.keypath) {\n      const parent = this.parent && this.parent.getKeypath(ractive);\n      this.keypath = parent\n        ? `${this.parent.getKeypath(ractive)}.${escapeKey(this.key)}`\n        : escapeKey(this.key);\n    }\n\n    return this.keypath;\n  }\n\n  getValueChildren(value) {\n    let children;\n    if (isArray(value)) {\n      children = [];\n      if ('length' in this && this.length !== value.length) {\n        children.push(this.joinKey('length'));\n      }\n      value.forEach((m, i) => {\n        children.push(this.joinKey(i));\n      });\n    } else if (isObject(value) || isFunction(value)) {\n      children = objectKeys(value).map(key => this.joinKey(key));\n    } else if (value != null) {\n      children = [];\n    }\n\n    const computed = this.computed;\n    if (computed) {\n      children.push.apply(children, objectKeys(computed).map(k => this.joinKey(k)));\n    }\n\n    return children;\n  }\n\n  getVirtual(shouldCapture) {\n    const value = this.get(shouldCapture, { virtual: false });\n    if (isObject(value)) {\n      const result = isArray(value) ? [] : create(null);\n\n      let keys = objectKeys(value);\n      let i = keys.length;\n      while (i--) {\n        const child = this.childByKey[keys[i]];\n        if (!child) result[keys[i]] = value[keys[i]];\n        else if (child._link) result[keys[i]] = child._link.getVirtual();\n        else result[keys[i]] = child.getVirtual();\n      }\n\n      i = this.children.length;\n      while (i--) {\n        const child = this.children[i];\n        if (!(child.key in result) && child._link) {\n          result[child.key] = child._link.getVirtual();\n        }\n      }\n\n      if (this.computed) {\n        keys = objectKeys(this.computed);\n        i = keys.length;\n        while (i--) {\n          result[keys[i]] = this.computed[keys[i]].get();\n        }\n      }\n\n      return result;\n    } else return value;\n  }\n\n  has(key) {\n    if (this._link) return this._link.has(key);\n\n    const value = this.get(false, noVirtual);\n    if (!value) return false;\n\n    key = unescapeKey(key);\n    if ((isFunction(value) || isObject(value)) && key in value) return true;\n\n    let computed = this.computed;\n    if (computed && key in this.computed) return true;\n\n    computed = this.root.ractive && this.root.ractive.computed;\n    if (computed) {\n      objectKeys(computed).forEach(k => {\n        if (computed[k].pattern && computed[k].pattern.test(this.getKeypath())) return true;\n      });\n    }\n\n    return false;\n  }\n\n  joinAll(keys, opts) {\n    let model = this;\n    for (let i = 0; i < keys.length; i += 1) {\n      if (\n        opts &&\n        opts.lastLink === false &&\n        i + 1 === keys.length &&\n        model.childByKey[keys[i]] &&\n        model.childByKey[keys[i]]._link\n      )\n        return model.childByKey[keys[i]];\n      model = model.joinKey(keys[i], opts);\n    }\n\n    return model;\n  }\n\n  notifyUpstream(startPath) {\n    let parent = this.parent;\n    const path = startPath || [this.key];\n    while (parent) {\n      if (parent.patterns) parent.patterns.forEach(o => o.notify(path.slice()));\n      path.unshift(parent.key);\n      parent.links.forEach(l => l.notifiedUpstream(path, this.root));\n      parent.deps.forEach(d => d.handleChange(path));\n      parent.downstreamChanged(startPath);\n      parent = parent.parent;\n    }\n  }\n\n  rebind(next, previous, safe) {\n    if (this._link) {\n      this._link.rebind(next, previous, false);\n    }\n\n    // tell the deps to move to the new target\n    let i = this.deps.length;\n    while (i--) {\n      if (this.deps[i].rebind) this.deps[i].rebind(next, previous, safe);\n    }\n\n    i = this.links.length;\n    while (i--) {\n      const link = this.links[i];\n      // only relink the root of the link tree\n      if (link.owner && link.owner._link) link.relinking(next, safe);\n    }\n\n    i = this.children.length;\n    while (i--) {\n      const child = this.children[i];\n      child.rebind(next ? next.joinKey(child.key) : undefined, child, safe);\n    }\n\n    i = this.bindings.length;\n    while (i--) {\n      this.bindings[i].rebind(next, previous, safe);\n    }\n  }\n\n  reference() {\n    'refs' in this ? this.refs++ : (this.refs = 1);\n  }\n\n  register(dep) {\n    this.deps.push(dep);\n  }\n\n  registerLink(link) {\n    addToArray(this.links, link);\n  }\n\n  registerPatternObserver(observer) {\n    (this.patterns || (this.patterns = [])).push(observer);\n    this.register(observer);\n  }\n\n  registerTwowayBinding(binding) {\n    this.bindings.push(binding);\n  }\n\n  unreference() {\n    if ('refs' in this) this.refs--;\n  }\n\n  unregister(dep) {\n    removeFromArray(this.deps, dep);\n  }\n\n  unregisterLink(link) {\n    removeFromArray(this.links, link);\n  }\n\n  unregisterPatternObserver(observer) {\n    removeFromArray(this.patterns, observer);\n    this.unregister(observer);\n  }\n\n  unregisterTwowayBinding(binding) {\n    removeFromArray(this.bindings, binding);\n  }\n\n  updateFromBindings(cascade) {\n    let i = this.bindings.length;\n    while (i--) {\n      const value = this.bindings[i].getValue();\n      if (value !== this.value) this.set(value);\n    }\n\n    // check for one-way bindings if there are no two-ways\n    if (!this.bindings.length) {\n      const oneway = findBoundValue(this.deps);\n      if (oneway && oneway.value !== this.value) this.set(oneway.value);\n    }\n\n    if (cascade) {\n      this.children.forEach(updateFromBindings);\n      this.links.forEach(updateFromBindings);\n      if (this._link) this._link.updateFromBindings(cascade);\n    }\n  }\n}\n\n// TODO: this may be better handled by overriding `get` on models with a parent that isRoot\nexport function maybeBind(model, value, shouldBind) {\n  if (shouldBind && isFunction(value) && model.parent && model.parent.isRoot) {\n    if (!model.boundValue) {\n      model.boundValue = bind(value._r_unbound || value, model.parent.ractive);\n    }\n\n    return model.boundValue;\n  }\n\n  return value;\n}\n\nfunction updateFromBindings(model) {\n  model.updateFromBindings(true);\n}\n\nexport function findBoundValue(list) {\n  let i = list.length;\n  while (i--) {\n    if (list[i].bound) {\n      const owner = list[i].owner;\n      if (owner) {\n        const value = owner.name === 'checked' ? owner.node.checked : owner.node.value;\n        return { value };\n      }\n    }\n  }\n}\n\nexport function fireShuffleTasks(stage) {\n  if (!stage) {\n    fireShuffleTasks('early');\n    fireShuffleTasks('mark');\n  } else {\n    const tasks = shuffleTasks[stage];\n    shuffleTasks[stage] = [];\n    let i = tasks.length;\n    while (i--) tasks[i]();\n\n    const register = registerQueue[stage];\n    registerQueue[stage] = [];\n    i = register.length;\n    while (i--) register[i].model.register(register[i].item);\n  }\n}\n\nexport function shuffle(model, newIndices, link, unsafe) {\n  model.shuffling = true;\n\n  let i = newIndices.length;\n  while (i--) {\n    const idx = newIndices[i];\n    // nothing is actually changing, so move in the index and roll on\n    if (i === idx) {\n      continue;\n    }\n\n    // rebind the children on i to idx\n    if (i in model.childByKey)\n      model.childByKey[i].rebind(\n        !~idx ? undefined : model.joinKey(idx),\n        model.childByKey[i],\n        !unsafe\n      );\n  }\n\n  const upstream = model.source().length !== model.source().value.length;\n\n  model.links.forEach(l => l.shuffle(newIndices));\n  if (!link) fireShuffleTasks('early');\n\n  i = model.deps.length;\n  while (i--) {\n    if (model.deps[i].shuffle) model.deps[i].shuffle(newIndices);\n  }\n\n  model[link ? 'marked' : 'mark']();\n  if (!link) fireShuffleTasks('mark');\n\n  if (upstream) model.notifyUpstream();\n\n  model.shuffling = false;\n}\n"",""const stack = [];\nlet captureGroup;\n\nexport function startCapturing() {\n  stack.push((captureGroup = []));\n}\n\nexport function stopCapturing() {\n  const dependencies = stack.pop();\n  captureGroup = stack[stack.length - 1];\n  return dependencies;\n}\n\nexport function capture(model) {\n  if (captureGroup) {\n    captureGroup.push(model);\n  }\n}\n"",""import ModelBase, { fireShuffleTasks, maybeBind, shuffle } from './ModelBase';\nimport { capture } from '../global/capture';\nimport { handleChange, marked, markedAll, teardown } from 'shared/methodCallers';\nimport { rebindMatch } from 'shared/rebind';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport noop from 'utils/noop';\nimport { hasOwn } from 'utils/object';\n\n// temporary placeholder target for detached implicit links\nexport const Missing = {\n  key: '@missing',\n  animate: noop,\n  applyValue: noop,\n  get: noop,\n  getKeypath() {\n    return this.key;\n  },\n  joinAll() {\n    return this;\n  },\n  joinKey() {\n    return this;\n  },\n  mark: noop,\n  registerLink: noop,\n  shufle: noop,\n  set: noop,\n  unregisterLink: noop\n};\nMissing.parent = Missing;\n\nexport default class LinkModel extends ModelBase {\n  constructor(parent, owner, target, key) {\n    super(parent);\n\n    this.owner = owner;\n    this.target = target;\n    this.key = key === undefined ? owner.key : key;\n    if (owner && owner.isLink) this.sourcePath = `${owner.sourcePath}.${this.key}`;\n\n    if (target) target.registerLink(this);\n\n    if (parent) this.isReadonly = parent.isReadonly;\n\n    this.isLink = true;\n  }\n\n  animate(from, to, options, interpolator) {\n    return this.target.animate(from, to, options, interpolator);\n  }\n\n  applyValue(value) {\n    if (this.boundValue) this.boundValue = null;\n    this.target.applyValue(value);\n  }\n\n  attach(fragment) {\n    const model = resolveReference(fragment, this.key);\n    if (model) {\n      this.relinking(model, false);\n    } else {\n      // if there is no link available, move everything here to real models\n      this.owner.unlink();\n    }\n  }\n\n  detach() {\n    this.relinking(Missing, false);\n  }\n\n  get(shouldCapture, opts = {}) {\n    if (shouldCapture) {\n      capture(this);\n\n      // may need to tell the target to unwrap\n      opts.unwrap = 'unwrap' in opts ? opts.unwrap : true;\n    }\n\n    const bind = 'shouldBind' in opts ? opts.shouldBind : true;\n    opts.shouldBind = this.mapping && this.target.parent && this.target.parent.isRoot;\n\n    return maybeBind(this, this.target.get(false, opts), bind);\n  }\n\n  getKeypath(ractive) {\n    if (ractive && ractive !== this.root.ractive) return this.target.getKeypath(ractive);\n\n    return super.getKeypath(ractive);\n  }\n\n  handleChange() {\n    this.deps.forEach(handleChange);\n    this.links.forEach(handleChange);\n    this.notifyUpstream();\n  }\n\n  isDetached() {\n    return this.virtual && this.target === Missing;\n  }\n\n  joinKey(key) {\n    // TODO: handle nested links\n    if (key === undefined || key === '') return this;\n\n    if (!hasOwn(this.childByKey, key)) {\n      const child = new LinkModel(this, this, this.target.joinKey(key), key);\n      this.children.push(child);\n      this.childByKey[key] = child;\n    }\n\n    return this.childByKey[key];\n  }\n\n  mark(force) {\n    this.target.mark(force);\n  }\n\n  marked() {\n    if (this.boundValue) this.boundValue = null;\n\n    this.links.forEach(marked);\n\n    this.deps.forEach(handleChange);\n  }\n\n  markedAll() {\n    this.children.forEach(markedAll);\n    this.marked();\n  }\n\n  notifiedUpstream(startPath, root) {\n    this.links.forEach(l => l.notifiedUpstream(startPath, this.root));\n    this.deps.forEach(handleChange);\n    if (startPath && this.rootLink && this.root !== root) {\n      const path = startPath.slice(1);\n      path.unshift(this.key);\n      this.notifyUpstream(path);\n    }\n  }\n\n  relinked() {\n    this.target.registerLink(this);\n    this.children.forEach(c => c.relinked());\n  }\n\n  relinking(target, safe) {\n    if (this.rootLink && this.sourcePath)\n      target = rebindMatch(this.sourcePath, target, this.target);\n    if (!target || this.target === target) return;\n\n    this.target && this.target.unregisterLink(this);\n\n    this.target = target;\n    this.children.forEach(c => {\n      c.relinking(target.joinKey(c.key), safe);\n    });\n\n    if (this.rootLink)\n      this.addShuffleTask(() => {\n        this.relinked();\n        if (!safe) {\n          this.markedAll();\n          this.notifyUpstream();\n        }\n      });\n  }\n\n  set(value) {\n    if (this.boundValue) this.boundValue = null;\n    this.target.set(value);\n  }\n\n  shuffle(newIndices) {\n    // watch for extra shuffles caused by a shuffle in a downstream link\n    if (this.shuffling) return;\n\n    // let the real model handle firing off shuffles\n    if (!this.target.shuffling) {\n      if (this.target.shuffle) {\n        this.target.shuffle(newIndices);\n      } else {\n        // the target is a computation, which can't shuffle\n        this.target.mark();\n      }\n    } else {\n      shuffle(this, newIndices, true);\n    }\n  }\n\n  source() {\n    if (this.target.source) return this.target.source();\n    else return this.target;\n  }\n\n  teardown() {\n    if (this._link) this._link.teardown();\n    this.target.unregisterLink(this);\n    this.children.forEach(teardown);\n  }\n}\n\nModelBase.prototype.link = function link(model, keypath, options) {\n  const lnk = this._link || new LinkModel(this.parent, this, model, this.key);\n  lnk.implicit = options && options.implicit;\n  lnk.mapping = options && options.mapping;\n  lnk.sourcePath = keypath;\n  lnk.rootLink = true;\n  if (this._link) this._link.relinking(model, false);\n  this.rebind(lnk, this, false);\n  fireShuffleTasks();\n\n  this._link = lnk;\n  lnk.markedAll();\n\n  this.notifyUpstream();\n  return lnk;\n};\n\nModelBase.prototype.unlink = function unlink() {\n  if (this._link) {\n    const ln = this._link;\n    this._link = undefined;\n    ln.rebind(this, ln, false);\n    fireShuffleTasks();\n    ln.teardown();\n    this.notifyUpstream();\n  }\n};\n"",""import { createFunction } from '../Ractive/config/runtime-parser';\nimport { create, keys } from 'utils/object';\n\nconst functions = create(null);\n\nexport default function getFunction(str, i) {\n  if (functions[str]) return functions[str];\n  return (functions[str] = createFunction(str, i));\n}\n\nexport function addFunctions(template) {\n  if (!template) return;\n\n  const exp = template.e;\n\n  if (!exp) return;\n\n  keys(exp).forEach(str => {\n    if (functions[str]) return;\n    functions[str] = exp[str];\n  });\n}\n"",""export const TEMPLATE_VERSION = 4;\n"",""import { warnIfDebug } from 'utils/log';\nimport { create, hasOwn } from 'utils/object';\n\nconst leadingWhitespace = /^\\s+/;\n\nconst ParseError = function(message) {\n  this.name = 'ParseError';\n  this.message = message;\n  try {\n    throw new Error(message);\n  } catch (e) {\n    this.stack = e.stack;\n  }\n};\n\nParseError.prototype = Error.prototype;\n\nconst Parser = function(str, options) {\n  let item;\n  let lineStart = 0;\n\n  this.str = str;\n  this.options = options || {};\n  this.pos = 0;\n\n  this.lines = this.str.split('\\n');\n  this.lineEnds = this.lines.map(line => {\n    const lineEnd = lineStart + line.length + 1; // +1 for the newline\n\n    lineStart = lineEnd;\n    return lineEnd;\n  }, 0);\n\n  // Custom init logic\n  if (this.init) this.init(str, options);\n\n  const items = [];\n\n  while (this.pos < this.str.length && (item = this.read())) {\n    items.push(item);\n  }\n\n  this.leftover = this.remaining();\n  this.result = this.postProcess ? this.postProcess(items, options) : items;\n};\n\nParser.prototype = {\n  read(converters) {\n    let i, item;\n\n    if (!converters) converters = this.converters;\n\n    const pos = this.pos;\n\n    const len = converters.length;\n    for (i = 0; i < len; i += 1) {\n      this.pos = pos; // reset for each attempt\n\n      if ((item = converters[i](this))) {\n        return item;\n      }\n    }\n\n    return null;\n  },\n\n  getContextMessage(pos, message) {\n    const [lineNum, columnNum] = this.getLinePos(pos);\n    if (this.options.contextLines === -1) {\n      return [lineNum, columnNum, `${message} at line ${lineNum} character ${columnNum}`];\n    }\n\n    const line = this.lines[lineNum - 1];\n\n    let contextUp = '';\n    let contextDown = '';\n    if (this.options.contextLines) {\n      const start =\n        lineNum - 1 - this.options.contextLines < 0 ? 0 : lineNum - 1 - this.options.contextLines;\n      contextUp = this.lines\n        .slice(start, lineNum - 1 - start)\n        .join('\\n')\n        .replace(/\\t/g, '  ');\n      contextDown = this.lines\n        .slice(lineNum, lineNum + this.options.contextLines)\n        .join('\\n')\n        .replace(/\\t/g, '  ');\n      if (contextUp) {\n        contextUp += '\\n';\n      }\n      if (contextDown) {\n        contextDown = '\\n' + contextDown;\n      }\n    }\n\n    let numTabs = 0;\n    const annotation =\n      contextUp +\n      line.replace(/\\t/g, (match, char) => {\n        if (char < columnNum) {\n          numTabs += 1;\n        }\n\n        return '  ';\n      }) +\n      '\\n' +\n      new Array(columnNum + numTabs).join(' ') +\n      '^----' +\n      contextDown;\n\n    return [\n      lineNum,\n      columnNum,\n      `${message} at line ${lineNum} character ${columnNum}:\\n${annotation}`\n    ];\n  },\n\n  getLinePos(char) {\n    let lineNum = 0;\n    let lineStart = 0;\n\n    while (char >= this.lineEnds[lineNum]) {\n      lineStart = this.lineEnds[lineNum];\n      lineNum += 1;\n    }\n\n    const columnNum = char - lineStart;\n    return [lineNum + 1, columnNum + 1, char]; // line/col should be one-based, not zero-based!\n  },\n\n  error(message) {\n    const [lineNum, columnNum, msg] = this.getContextMessage(this.pos, message);\n\n    const error = new ParseError(msg);\n\n    error.line = lineNum;\n    error.character = columnNum;\n    error.shortMessage = message;\n\n    throw error;\n  },\n\n  matchString(string) {\n    if (this.str.substr(this.pos, string.length) === string) {\n      this.pos += string.length;\n      return string;\n    }\n  },\n\n  matchPattern(pattern) {\n    let match;\n\n    if ((match = pattern.exec(this.remaining()))) {\n      this.pos += match[0].length;\n      return match[1] || match[0];\n    }\n  },\n\n  sp() {\n    this.matchPattern(leadingWhitespace);\n  },\n\n  remaining() {\n    return this.str.substring(this.pos);\n  },\n\n  nextChar() {\n    return this.str.charAt(this.pos);\n  },\n\n  warn(message) {\n    const msg = this.getContextMessage(this.pos, message)[2];\n\n    warnIfDebug(msg);\n  }\n};\n\nParser.extend = function(proto) {\n  const Parent = this;\n  const Child = function(str, options) {\n    Parser.call(this, str, options);\n  };\n\n  Child.prototype = create(Parent.prototype);\n\n  for (const key in proto) {\n    if (hasOwn(proto, key)) {\n      Child.prototype[key] = proto[key];\n    }\n  }\n\n  Child.extend = Parser.extend;\n  return Child;\n};\n\nexport default Parser;\n"",""export const TEXT = 1;\nexport const INTERPOLATOR = 2;\nexport const TRIPLE = 3;\nexport const SECTION = 4;\nexport const INVERTED = 5;\nexport const CLOSING = 6;\nexport const ELEMENT = 7;\nexport const PARTIAL = 8;\nexport const COMMENT = 9;\nexport const DELIMCHANGE = 10;\nexport const ANCHOR = 11;\nexport const ATTRIBUTE = 13;\nexport const CLOSING_TAG = 14;\nexport const COMPONENT = 15;\nexport const YIELDER = 16;\nexport const INLINE_PARTIAL = 17;\nexport const DOCTYPE = 18;\nexport const ALIAS = 19;\n\nexport const AWAIT = 55;\n\nexport const NUMBER_LITERAL = 20;\nexport const STRING_LITERAL = 21;\nexport const ARRAY_LITERAL = 22;\nexport const OBJECT_LITERAL = 23;\nexport const BOOLEAN_LITERAL = 24;\nexport const REGEXP_LITERAL = 25;\n\nexport const GLOBAL = 26;\nexport const KEY_VALUE_PAIR = 27;\n\nexport const REFERENCE = 30;\nexport const REFINEMENT = 31;\nexport const MEMBER = 32;\nexport const PREFIX_OPERATOR = 33;\nexport const BRACKETED = 34;\nexport const CONDITIONAL = 35;\nexport const INFIX_OPERATOR = 36;\n\nexport const INVOCATION = 40;\n\nexport const SECTION_IF = 50;\nexport const SECTION_UNLESS = 51;\nexport const SECTION_EACH = 52;\nexport const SECTION_WITH = 53;\nexport const SECTION_IF_WITH = 54;\n\nexport const ELSE = 60;\nexport const ELSEIF = 61;\nexport const THEN = 62;\nexport const CATCH = 63;\n\nexport const EVENT = 70;\nexport const DECORATOR = 71;\nexport const TRANSITION = 72;\nexport const BINDING_FLAG = 73;\nexport const DELEGATE_FLAG = 74;\n"",""import { PREFIX_OPERATOR } from 'config/types';\nimport { expectedExpression } from './shared/errors';\nimport readMemberOrInvocation from './readMemberOrInvocation';\nimport readExpression from '../readExpression';\n\nlet readTypeOf;\n\nconst makePrefixSequenceMatcher = function(symbol, fallthrough) {\n  return function(parser) {\n    let expression;\n\n    if ((expression = fallthrough(parser))) {\n      return expression;\n    }\n\n    if (!parser.matchString(symbol)) {\n      return null;\n    }\n\n    parser.sp();\n\n    expression = readExpression(parser);\n    if (!expression) {\n      parser.error(expectedExpression);\n    }\n\n    return {\n      s: symbol,\n      o: expression,\n      t: PREFIX_OPERATOR\n    };\n  };\n};\n\n// create all prefix sequence matchers, return readTypeOf\n(function() {\n  let i, len, matcher, fallthrough;\n\n  const prefixOperators = '! ~ + - typeof'.split(' ');\n\n  fallthrough = readMemberOrInvocation;\n  for (i = 0, len = prefixOperators.length; i < len; i += 1) {\n    matcher = makePrefixSequenceMatcher(prefixOperators[i], fallthrough);\n    fallthrough = matcher;\n  }\n\n  // typeof operator is higher precedence than multiplication, so provides the\n  // fallthrough for the multiplication sequence matcher we're about to create\n  // (we're skipping void and delete)\n  readTypeOf = fallthrough;\n})();\n\nexport default readTypeOf;\n"",""const delimiterChangePattern = /^[^\\s=]+/;\nconst whitespacePattern = /^\\s+/;\n\nexport default function readDelimiterChange(parser) {\n  if (!parser.matchString('=')) {\n    return null;\n  }\n\n  const start = parser.pos;\n\n  // allow whitespace before new opening delimiter\n  parser.sp();\n\n  const opening = parser.matchPattern(delimiterChangePattern);\n  if (!opening) {\n    parser.pos = start;\n    return null;\n  }\n\n  // allow whitespace (in fact, it's necessary...)\n  if (!parser.matchPattern(whitespacePattern)) {\n    return null;\n  }\n\n  const closing = parser.matchPattern(delimiterChangePattern);\n  if (!closing) {\n    parser.pos = start;\n    return null;\n  }\n\n  // allow whitespace before closing '='\n  parser.sp();\n\n  if (!parser.matchString('=')) {\n    parser.pos = start;\n    return null;\n  }\n\n  return [opening, closing];\n}\n"",""import { REGEXP_LITERAL } from '../../../../../config/types';\n\nconst regexpPattern = /^(\\/(?:[^\\n\\r\\u2028\\u2029/\\\\[]|\\\\.|\\[(?:[^\\n\\r\\u2028\\u2029\\]\\\\]|\\\\.)*])+\\/(?:([gimuy])(?![a-z]*\\2))*(?![a-zA-Z_$0-9]))/;\n\nexport default function readNumberLiteral(parser) {\n  let result;\n\n  if ((result = parser.matchPattern(regexpPattern))) {\n    return {\n      t: REGEXP_LITERAL,\n      v: result\n    };\n  }\n\n  return null;\n}\n"",""const pattern = /[-/\\\\^$*+?.()|[\\]{}]/g;\n\nexport default function escapeRegExp(str) {\n  return str.replace(pattern, '\\\\$&');\n}\n"",""import escapeRegExp from 'utils/escapeRegExp';\n\nconst regExpCache = {};\n\nexport default function(haystack, needles) {\n  return haystack.search(\n    regExpCache[needles.join()] ||\n      (regExpCache[needles.join()] = new RegExp(needles.map(escapeRegExp).join('|')))\n  );\n}\n"",""import { keys } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\n// https://github.com/kangax/html-minifier/issues/63#issuecomment-37763316\n//export const booleanAttributes = /^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;\nexport const booleanAttributes = {\n  allowfullscreen: 1,\n  async: 1,\n  autofocus: 1,\n  autoplay: 1,\n  checked: 1,\n  compact: 1,\n  controls: 1,\n  declare: 1,\n  default: 1,\n  defaultchecked: 1,\n  defaultmuted: 1,\n  defaultselected: 1,\n  defer: 1,\n  disabled: 1,\n  enabled: 1,\n  formnovalidate: 1,\n  hidden: 1,\n  indeterminate: 1,\n  inert: 1,\n  ismap: 1,\n  itemscope: 1,\n  loop: 1,\n  multiple: 1,\n  muted: 1,\n  nohref: 1,\n  noresize: 1,\n  noshade: 1,\n  novalidate: 1,\n  nowrap: 1,\n  open: 1,\n  pauseonexit: 1,\n  readonly: 1,\n  required: 1,\n  reversed: 1,\n  scoped: 1,\n  seamless: 1,\n  selected: 1,\n  sortable: 1,\n  translate: 1,\n  truespeed: 1,\n  typemustmatch: 1,\n  visible: 1\n};\nexport const voidElements = {\n  area: 1,\n  base: 1,\n  br: 1,\n  col: 1,\n  command: 1,\n  doctype: 1,\n  embed: 1,\n  hr: 1,\n  img: 1,\n  input: 1,\n  keygen: 1,\n  link: 1,\n  meta: 1,\n  param: 1,\n  source: 1,\n  track: 1,\n  wbr: 1\n};\n\nconst htmlEntities = {\n  quot: 34,\n  amp: 38,\n  apos: 39,\n  lt: 60,\n  gt: 62,\n  nbsp: 160,\n  iexcl: 161,\n  cent: 162,\n  pound: 163,\n  curren: 164,\n  yen: 165,\n  brvbar: 166,\n  sect: 167,\n  uml: 168,\n  copy: 169,\n  ordf: 170,\n  laquo: 171,\n  not: 172,\n  shy: 173,\n  reg: 174,\n  macr: 175,\n  deg: 176,\n  plusmn: 177,\n  sup2: 178,\n  sup3: 179,\n  acute: 180,\n  micro: 181,\n  para: 182,\n  middot: 183,\n  cedil: 184,\n  sup1: 185,\n  ordm: 186,\n  raquo: 187,\n  frac14: 188,\n  frac12: 189,\n  frac34: 190,\n  iquest: 191,\n  Agrave: 192,\n  Aacute: 193,\n  Acirc: 194,\n  Atilde: 195,\n  Auml: 196,\n  Aring: 197,\n  AElig: 198,\n  Ccedil: 199,\n  Egrave: 200,\n  Eacute: 201,\n  Ecirc: 202,\n  Euml: 203,\n  Igrave: 204,\n  Iacute: 205,\n  Icirc: 206,\n  Iuml: 207,\n  ETH: 208,\n  Ntilde: 209,\n  Ograve: 210,\n  Oacute: 211,\n  Ocirc: 212,\n  Otilde: 213,\n  Ouml: 214,\n  times: 215,\n  Oslash: 216,\n  Ugrave: 217,\n  Uacute: 218,\n  Ucirc: 219,\n  Uuml: 220,\n  Yacute: 221,\n  THORN: 222,\n  szlig: 223,\n  agrave: 224,\n  aacute: 225,\n  acirc: 226,\n  atilde: 227,\n  auml: 228,\n  aring: 229,\n  aelig: 230,\n  ccedil: 231,\n  egrave: 232,\n  eacute: 233,\n  ecirc: 234,\n  euml: 235,\n  igrave: 236,\n  iacute: 237,\n  icirc: 238,\n  iuml: 239,\n  eth: 240,\n  ntilde: 241,\n  ograve: 242,\n  oacute: 243,\n  ocirc: 244,\n  otilde: 245,\n  ouml: 246,\n  divide: 247,\n  oslash: 248,\n  ugrave: 249,\n  uacute: 250,\n  ucirc: 251,\n  uuml: 252,\n  yacute: 253,\n  thorn: 254,\n  yuml: 255,\n  OElig: 338,\n  oelig: 339,\n  Scaron: 352,\n  scaron: 353,\n  Yuml: 376,\n  fnof: 402,\n  circ: 710,\n  tilde: 732,\n  Alpha: 913,\n  Beta: 914,\n  Gamma: 915,\n  Delta: 916,\n  Epsilon: 917,\n  Zeta: 918,\n  Eta: 919,\n  Theta: 920,\n  Iota: 921,\n  Kappa: 922,\n  Lambda: 923,\n  Mu: 924,\n  Nu: 925,\n  Xi: 926,\n  Omicron: 927,\n  Pi: 928,\n  Rho: 929,\n  Sigma: 931,\n  Tau: 932,\n  Upsilon: 933,\n  Phi: 934,\n  Chi: 935,\n  Psi: 936,\n  Omega: 937,\n  alpha: 945,\n  beta: 946,\n  gamma: 947,\n  delta: 948,\n  epsilon: 949,\n  zeta: 950,\n  eta: 951,\n  theta: 952,\n  iota: 953,\n  kappa: 954,\n  lambda: 955,\n  mu: 956,\n  nu: 957,\n  xi: 958,\n  omicron: 959,\n  pi: 960,\n  rho: 961,\n  sigmaf: 962,\n  sigma: 963,\n  tau: 964,\n  upsilon: 965,\n  phi: 966,\n  chi: 967,\n  psi: 968,\n  omega: 969,\n  thetasym: 977,\n  upsih: 978,\n  piv: 982,\n  ensp: 8194,\n  emsp: 8195,\n  thinsp: 8201,\n  zwnj: 8204,\n  zwj: 8205,\n  lrm: 8206,\n  rlm: 8207,\n  ndash: 8211,\n  mdash: 8212,\n  lsquo: 8216,\n  rsquo: 8217,\n  sbquo: 8218,\n  ldquo: 8220,\n  rdquo: 8221,\n  bdquo: 8222,\n  dagger: 8224,\n  Dagger: 8225,\n  bull: 8226,\n  hellip: 8230,\n  permil: 8240,\n  prime: 8242,\n  Prime: 8243,\n  lsaquo: 8249,\n  rsaquo: 8250,\n  oline: 8254,\n  frasl: 8260,\n  euro: 8364,\n  image: 8465,\n  weierp: 8472,\n  real: 8476,\n  trade: 8482,\n  alefsym: 8501,\n  larr: 8592,\n  uarr: 8593,\n  rarr: 8594,\n  darr: 8595,\n  harr: 8596,\n  crarr: 8629,\n  lArr: 8656,\n  uArr: 8657,\n  rArr: 8658,\n  dArr: 8659,\n  hArr: 8660,\n  forall: 8704,\n  part: 8706,\n  exist: 8707,\n  empty: 8709,\n  nabla: 8711,\n  isin: 8712,\n  notin: 8713,\n  ni: 8715,\n  prod: 8719,\n  sum: 8721,\n  minus: 8722,\n  lowast: 8727,\n  radic: 8730,\n  prop: 8733,\n  infin: 8734,\n  ang: 8736,\n  and: 8743,\n  or: 8744,\n  cap: 8745,\n  cup: 8746,\n  int: 8747,\n  there4: 8756,\n  sim: 8764,\n  cong: 8773,\n  asymp: 8776,\n  ne: 8800,\n  equiv: 8801,\n  le: 8804,\n  ge: 8805,\n  sub: 8834,\n  sup: 8835,\n  nsub: 8836,\n  sube: 8838,\n  supe: 8839,\n  oplus: 8853,\n  otimes: 8855,\n  perp: 8869,\n  sdot: 8901,\n  lceil: 8968,\n  rceil: 8969,\n  lfloor: 8970,\n  rfloor: 8971,\n  lang: 9001,\n  rang: 9002,\n  loz: 9674,\n  spades: 9824,\n  clubs: 9827,\n  hearts: 9829,\n  diams: 9830\n};\nconst controlCharacters = [\n  8364,\n  129,\n  8218,\n  402,\n  8222,\n  8230,\n  8224,\n  8225,\n  710,\n  8240,\n  352,\n  8249,\n  338,\n  141,\n  381,\n  143,\n  144,\n  8216,\n  8217,\n  8220,\n  8221,\n  8226,\n  8211,\n  8212,\n  732,\n  8482,\n  353,\n  8250,\n  339,\n  157,\n  382,\n  376\n];\nconst entityPattern = new RegExp(\n  '&(#?(?:x[\\\\w\\\\d]+|\\\\d+|' + keys(htmlEntities).join('|') + '));?',\n  'g'\n);\nconst codePointSupport = isFunction(String.fromCodePoint);\nconst codeToChar = codePointSupport ? String.fromCodePoint : String.fromCharCode;\n\nexport function decodeCharacterReferences(html) {\n  return html.replace(entityPattern, (match, entity) => {\n    let code;\n\n    // Handle named entities\n    if (entity[0] !== '#') {\n      code = htmlEntities[entity];\n    } else if (entity[1] === 'x') {\n      code = parseInt(entity.substring(2), 16);\n    } else {\n      code = parseInt(entity.substring(1), 10);\n    }\n\n    if (!code) {\n      return match;\n    }\n\n    return codeToChar(validateCode(code));\n  });\n}\n\nconst lessThan = /</g;\nconst greaterThan = />/g;\nconst amp = /&/g;\nconst invalid = 65533;\n\nexport function escapeHtml(str) {\n  return str\n    .replace(amp, '&amp;')\n    .replace(lessThan, '&lt;')\n    .replace(greaterThan, '&gt;');\n}\n\n// some code points are verboten. If we were inserting HTML, the browser would replace the illegal\n// code points with alternatives in some cases - since we're bypassing that mechanism, we need\n// to replace them ourselves\n//\n// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters\n/* istanbul ignore next */\nfunction validateCode(code) {\n  if (!code) {\n    return invalid;\n  }\n\n  // line feed becomes generic whitespace\n  if (code === 10) {\n    return 32;\n  }\n\n  // ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)\n  if (code < 128) {\n    return code;\n  }\n\n  // code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need\n  // to correct the mistake or we'll end up with missing € signs and so on\n  if (code <= 159) {\n    return controlCharacters[code - 128];\n  }\n\n  // basic multilingual plane\n  if (code < 55296) {\n    return code;\n  }\n\n  // UTF-16 surrogate halves\n  if (code <= 57343) {\n    return invalid;\n  }\n\n  // rest of the basic multilingual plane\n  if (code <= 65535) {\n    return code;\n  } else if (!codePointSupport) {\n    return invalid;\n  }\n\n  // supplementary multilingual plane 0x10000 - 0x1ffff\n  if (code >= 65536 && code <= 131071) {\n    return code;\n  }\n\n  // supplementary ideographic plane 0x20000 - 0x2ffff\n  if (code >= 131072 && code <= 196607) {\n    return code;\n  }\n\n  return invalid;\n}\n"",""export const expectedExpression = 'Expected a JavaScript expression';\nexport const expectedParen = 'Expected closing paren';\n"",""import { NUMBER_LITERAL } from '../../../../../config/types';\n\n// bulletproof number regex from https://gist.github.com/Rich-Harris/7544330\nconst numberPattern = /^(?:[+-]?)0*(?:(?:(?:[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\n\nexport default function readNumberLiteral(parser) {\n  let result;\n\n  if ((result = parser.matchPattern(numberPattern))) {\n    return {\n      t: NUMBER_LITERAL,\n      v: result\n    };\n  }\n\n  return null;\n}\n"",""// Match one or more characters until: \"", ', \\, or EOL/EOF.\n// EOL/EOF is written as (?!.) (meaning there's no non-newline char next).\nconst stringMiddlePattern = /^(?=.)[^\""'\\\\]+?(?:(?!.)|(?=[\""'\\\\]))/;\n\n// Match one escape sequence, including the backslash.\nexport const escapeSequencePattern = /^\\\\(?:[`'\""\\\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/;\n\n// Match one ES5 line continuation (backslash + line terminator).\nexport const lineContinuationPattern = /^\\\\(?:\\r\\n|[\\u000A\\u000D\\u2028\\u2029])/;\n\n// Helper for defining getDoubleQuotedString and getSingleQuotedString.\nexport default function(okQuote) {\n  return function(parser) {\n    let literal = '\""';\n    let done = false;\n    let next;\n\n    while (!done) {\n      next =\n        parser.matchPattern(stringMiddlePattern) ||\n        parser.matchPattern(escapeSequencePattern) ||\n        parser.matchString(okQuote);\n      if (next) {\n        if (next === `\""`) {\n          literal += `\\\\\""`;\n        } else if (next === `\\\\'`) {\n          literal += `'`;\n        } else {\n          literal += next;\n        }\n      } else {\n        next = parser.matchPattern(lineContinuationPattern);\n        if (next) {\n          // convert \\(newline-like) into a \\u escape, which is allowed in JSON\n          literal += '\\\\u' + ('000' + next.charCodeAt(1).toString(16)).slice(-4);\n        } else {\n          done = true;\n        }\n      }\n    }\n\n    literal += '\""';\n\n    // use JSON.parse to interpret escapes\n    return JSON.parse(literal);\n  };\n}\n"",""import { STRING_LITERAL } from '../../../../../config/types';\nimport makeQuotedStringMatcher from './stringLiteral/makeQuotedStringMatcher';\n\nconst singleMatcher = makeQuotedStringMatcher(`\""`);\nconst doubleMatcher = makeQuotedStringMatcher(`'`);\n\nexport default function(parser) {\n  const start = parser.pos;\n  const quote = parser.matchString(`'`) || parser.matchString(`\""`);\n\n  if (quote) {\n    const string = (quote === `'` ? singleMatcher : doubleMatcher)(parser);\n\n    if (!parser.matchString(quote)) {\n      parser.pos = start;\n      return null;\n    }\n\n    return {\n      t: STRING_LITERAL,\n      v: string\n    };\n  }\n\n  return null;\n}\n"",""import readExpression from '../../../readExpression';\nimport { STRING_LITERAL, BRACKETED, INFIX_OPERATOR } from '../../../../../config/types';\nimport {\n  escapeSequencePattern,\n  lineContinuationPattern\n} from './stringLiteral/makeQuotedStringMatcher';\n\n// Match one or more characters until: \"", ', or \\\nconst stringMiddlePattern = /^[^`\""\\\\\\$]+?(?:(?=[`\""\\\\\\$]))/;\n\nconst escapes = /[\\r\\n\\t\\b\\f]/g;\nfunction getString(literal) {\n  return JSON.parse(`\""${literal.replace(escapes, escapeChar)}\""`);\n}\n\nfunction escapeChar(c) {\n  switch (c) {\n    case '\\n':\n      return '\\\\n';\n    case '\\r':\n      return '\\\\r';\n    case '\\t':\n      return '\\\\t';\n    case '\\b':\n      return '\\\\b';\n    case '\\f':\n      return '\\\\f';\n  }\n}\n\nexport default function readTemplateStringLiteral(parser) {\n  if (!parser.matchString('`')) return null;\n\n  let literal = '';\n  let done = false;\n  let next;\n  const parts = [];\n\n  while (!done) {\n    next =\n      parser.matchPattern(stringMiddlePattern) ||\n      parser.matchPattern(escapeSequencePattern) ||\n      parser.matchString('$') ||\n      parser.matchString('\""');\n    if (next) {\n      if (next === `\""`) {\n        literal += `\\\\\""`;\n      } else if (next === '\\\\`') {\n        literal += '`';\n      } else if (next === '$') {\n        if (parser.matchString('{')) {\n          parts.push({ t: STRING_LITERAL, v: getString(literal) });\n          literal = '';\n\n          parser.sp();\n          const expr = readExpression(parser);\n\n          if (!expr) parser.error('Expected valid expression');\n\n          parts.push({ t: BRACKETED, x: expr });\n\n          parser.sp();\n          if (!parser.matchString('}'))\n            parser.error(`Expected closing '}' after interpolated expression`);\n        } else {\n          literal += '$';\n        }\n      } else {\n        literal += next;\n      }\n    } else {\n      next = parser.matchPattern(lineContinuationPattern);\n      if (next) {\n        // convert \\(newline-like) into a \\u escape, which is allowed in JSON\n        literal += '\\\\u' + ('000' + next.charCodeAt(1).toString(16)).slice(-4);\n      } else {\n        done = true;\n      }\n    }\n  }\n\n  if (literal.length) parts.push({ t: STRING_LITERAL, v: getString(literal) });\n\n  if (!parser.matchString('`')) parser.error(\""Expected closing '`'\"");\n\n  if (parts.length === 1) {\n    return parts[0];\n  } else {\n    let result = parts.pop();\n    let part;\n\n    while ((part = parts.pop())) {\n      result = {\n        t: INFIX_OPERATOR,\n        s: '+',\n        o: [part, result]\n      };\n    }\n\n    return {\n      t: BRACKETED,\n      x: result\n    };\n  }\n}\n"",""export const name = /^[a-zA-Z_$][a-zA-Z_$0-9]*/;\nexport const spreadPattern = /^\\s*\\.{3}/;\nexport const legalReference = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:\\.(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nexport const relaxedName = /^[a-zA-Z_$][-\\/a-zA-Z_$0-9]*(?:\\.(?:[a-zA-Z_$][-\\/a-zA-Z_$0-9]*))*/;\n"",""import readStringLiteral from '../primary/literal/readStringLiteral';\nimport readNumberLiteral from '../primary/literal/readNumberLiteral';\nimport { name as namePattern } from './patterns';\n\nconst identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n// http://mathiasbynens.be/notes/javascript-properties\n// can be any name, string literal, or number literal\nexport default function readKey(parser) {\n  let token;\n\n  if ((token = readStringLiteral(parser))) {\n    return identifier.test(token.v) ? token.v : '\""' + token.v.replace(/\""/g, '\\\\\""') + '\""';\n  }\n\n  if ((token = readNumberLiteral(parser))) {\n    return token.v;\n  }\n\n  if ((token = parser.matchPattern(namePattern))) {\n    return token;\n  }\n\n  return null;\n}\n"",""import { BRACKETED, GLOBAL, REFERENCE } from 'src/config/types';\nimport { normalise } from 'src/shared/keypaths';\nimport { legalReference, relaxedName } from '../shared/patterns';\n\n// if a reference is a browser global, we don't deference it later, so it needs special treatment\nconst globals = /^(?:Array|console|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null|Object|Number|String|Boolean)\\b/;\n\n// keywords are not valid references, with the exception of `this`\nconst keywords = /^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/;\n\nconst prefixPattern = /^(?:\\@\\.|\\@|~\\/|(?:\\^\\^\\/(?:\\^\\^\\/)*(?:\\.\\.\\/)*)|(?:\\.\\.\\/)+|\\.\\/(?:\\.\\.\\/)*|\\.)/;\nconst specials = /^(key|index|keypath|rootpath|this|global|shared|context|event|node|local|style|helpers|last|macro)/;\n\nexport default function readReference(parser) {\n  let prefix, name, global, reference, lastDotIndex;\n\n  const startPos = parser.pos;\n\n  prefix = parser.matchPattern(prefixPattern) || '';\n  name =\n    (!prefix && parser.relaxedNames && parser.matchPattern(relaxedName)) ||\n    parser.matchPattern(legalReference);\n  const actual = prefix.length + ((name && name.length) || 0);\n\n  if (prefix === '@.') {\n    prefix = '@';\n    if (name) name = 'this.' + name;\n    else name = 'this';\n  }\n\n  if (!name && prefix) {\n    name = prefix;\n    prefix = '';\n  }\n\n  if (!name) {\n    return null;\n  }\n\n  if (prefix === '@') {\n    if (!specials.test(name)) {\n      parser.error(`Unrecognized special reference @${name}`);\n    } else if ((!name.indexOf('event') || !name.indexOf('node')) && !parser.inEvent) {\n      parser.error(`@event and @node are only valid references within an event directive`);\n    } else if (~name.indexOf('context')) {\n      parser.pos = parser.pos - (name.length - 7);\n      return {\n        t: BRACKETED,\n        x: {\n          t: REFERENCE,\n          n: '@context'\n        }\n      };\n    }\n  }\n\n  // bug out if it's a keyword (exception for ancestor/restricted refs - see https://github.com/ractivejs/ractive/issues/1497)\n  if (!prefix && !parser.relaxedNames && keywords.test(name)) {\n    parser.pos = startPos;\n    return null;\n  }\n\n  // if this is a browser global, stop here\n  if (!prefix && globals.test(name)) {\n    global = globals.exec(name)[0];\n    parser.pos = startPos + global.length;\n\n    return {\n      t: GLOBAL,\n      v: global\n    };\n  }\n\n  reference = (prefix || '') + normalise(name);\n\n  if (parser.matchString('(')) {\n    // if this is a method invocation (as opposed to a function) we need\n    // to strip the method name from the reference combo, else the context\n    // will be wrong\n    // but only if the reference was actually a member and not a refinement\n    lastDotIndex = reference.lastIndexOf('.');\n    if (lastDotIndex !== -1 && name[name.length - 1] !== ']') {\n      if (lastDotIndex === 0) {\n        reference = '.';\n        parser.pos = startPos;\n      } else {\n        const refLength = reference.length;\n        reference = reference.substr(0, lastDotIndex);\n        parser.pos = startPos + (actual - (refLength - lastDotIndex));\n      }\n    } else {\n      parser.pos -= 1;\n    }\n  }\n\n  return {\n    t: REFERENCE,\n    n: reference.replace(/^this\\./, './').replace(/^this$/, '.')\n  };\n}\n"",""import { INFIX_OPERATOR } from 'config/types';\nimport readTypeof from './readTypeof';\n\nlet readLogicalOr;\n\nconst makeInfixSequenceMatcher = function(symbol, fallthrough) {\n  return function(parser) {\n    // > and / have to be quoted\n    if (parser.inUnquotedAttribute && (symbol === '>' || symbol === '/'))\n      return fallthrough(parser);\n\n    let start, left, right;\n\n    left = fallthrough(parser);\n    if (!left) {\n      return null;\n    }\n\n    // Loop to handle left-recursion in a case like `a * b * c` and produce\n    // left association, i.e. `(a * b) * c`.  The matcher can't call itself\n    // to parse `left` because that would be infinite regress.\n    while (true) {\n      start = parser.pos;\n\n      parser.sp();\n\n      if (!parser.matchString(symbol)) {\n        parser.pos = start;\n        return left;\n      }\n\n      // special case - in operator must not be followed by [a-zA-Z_$0-9]\n      if (symbol === 'in' && /[a-zA-Z_$0-9]/.test(parser.remaining().charAt(0))) {\n        parser.pos = start;\n        return left;\n      }\n\n      parser.sp();\n\n      // right operand must also consist of only higher-precedence operators\n      right = fallthrough(parser);\n      if (!right) {\n        parser.pos = start;\n        return left;\n      }\n\n      left = {\n        t: INFIX_OPERATOR,\n        s: symbol,\n        o: [left, right]\n      };\n\n      // Loop back around.  If we don't see another occurrence of the symbol,\n      // we'll return left.\n    }\n  };\n};\n\n// create all infix sequence matchers, and return readLogicalOr\n(function() {\n  let i, len, matcher, fallthrough;\n\n  // All the infix operators on order of precedence (source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)\n  // Each sequence matcher will initially fall through to its higher precedence\n  // neighbour, and only attempt to match if one of the higher precedence operators\n  // (or, ultimately, a literal, reference, or bracketed expression) already matched\n  const infixOperators = '* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||'.split(\n    ' '\n  );\n\n  // A typeof operator is higher precedence than multiplication\n  fallthrough = readTypeof;\n  for (i = 0, len = infixOperators.length; i < len; i += 1) {\n    matcher = makeInfixSequenceMatcher(infixOperators[i], fallthrough);\n    fallthrough = matcher;\n  }\n\n  // Logical OR is the fallthrough for the conditional matcher\n  readLogicalOr = fallthrough;\n})();\n\nexport default readLogicalOr;\n"",""import {\n  ARRAY_LITERAL,\n  ATTRIBUTE,\n  DECORATOR,\n  DELEGATE_FLAG,\n  BINDING_FLAG,\n  INTERPOLATOR,\n  TRANSITION,\n  EVENT\n} from '../../../config/types';\nimport getLowestIndex from '../utils/getLowestIndex';\nimport readMustache from '../readMustache';\nimport { decodeCharacterReferences } from 'src/utils/html';\nimport readExpressionList from '../expressions/shared/readExpressionList';\nimport readExpressionOrReference from '../readExpressionOrReference';\nimport flattenExpression from 'parse/utils/flattenExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { isString } from 'utils/is';\n\nconst attributeNamePattern = /^[^\\s\""'>\\/=(]+/;\nconst onPattern = /^on/;\nconst eventPattern = /^on-([a-zA-Z\\*\\.$_]((?:[a-zA-Z\\*\\.$_0-9\\-]|\\\\-)+))$/;\nconst reservedEventNames = /^(?:change|reset|teardown|update|construct|config|init|render|complete|unrender|detach|insert|destruct|attachchild|detachchild)$/;\nconst decoratorPattern = /^as-([a-z-A-Z][-a-zA-Z_0-9]*)$/;\nconst transitionPattern = /^([a-zA-Z](?:(?!-in-out)[-a-zA-Z_0-9])*)-(in|out|in-out)$/;\nconst boundPattern = /^((bind|class)-(([-a-zA-Z0-9_])+))$/;\nconst directives = {\n  lazy: { t: BINDING_FLAG, v: 'l' },\n  twoway: { t: BINDING_FLAG, v: 't' },\n  'no-delegation': { t: DELEGATE_FLAG }\n};\nconst unquotedAttributeValueTextPattern = /^[^\\s\""'=<>\\/`]+/;\nconst proxyEvent = /^[^\\s\""'=<>@\\[\\]()]*/;\nconst whitespace = /^\\s+/;\n\nconst slashes = /\\\\/g;\nfunction splitEvent(str) {\n  const result = [];\n  let s = 0;\n\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === '-' && str[i - 1] !== '\\\\') {\n      result.push(str.substring(s, i).replace(slashes, ''));\n      s = i + 1;\n    }\n  }\n\n  result.push(str.substring(s).replace(slashes, ''));\n\n  return result;\n}\n\nexport default function readAttribute(parser) {\n  let name, i, nearest, idx;\n\n  parser.sp();\n\n  name = parser.matchPattern(attributeNamePattern);\n  if (!name) {\n    return null;\n  }\n\n  // check for accidental delimiter consumption e.g. <tag bool{{>attrs}} />\n  nearest = name.length;\n  for (i = 0; i < parser.tags.length; i++) {\n    if (~(idx = name.indexOf(parser.tags[i].open))) {\n      if (idx < nearest) nearest = idx;\n    }\n  }\n  if (nearest < name.length) {\n    parser.pos -= name.length - nearest;\n    name = name.substr(0, nearest);\n    if (!name) return null;\n  }\n\n  return { n: name };\n}\n\nfunction readAttributeValue(parser) {\n  const start = parser.pos;\n\n  // next character must be `=`, `/`, `>` or whitespace\n  if (!/[=\\/>\\s]/.test(parser.nextChar())) {\n    parser.error('Expected `=`, `/`, `>` or whitespace');\n  }\n\n  parser.sp();\n\n  if (!parser.matchString('=')) {\n    parser.pos = start;\n    return null;\n  }\n\n  parser.sp();\n\n  const valueStart = parser.pos;\n  const startDepth = parser.sectionDepth;\n\n  const value =\n    readQuotedAttributeValue(parser, `'`) ||\n    readQuotedAttributeValue(parser, `\""`) ||\n    readUnquotedAttributeValue(parser);\n\n  if (value === null) {\n    parser.error('Expected valid attribute value');\n  }\n\n  if (parser.sectionDepth !== startDepth) {\n    parser.pos = valueStart;\n    parser.error(\n      'An attribute value must contain as many opening section tags as closing section tags'\n    );\n  }\n\n  if (!value.length) {\n    return '';\n  }\n\n  if (value.length === 1 && isString(value[0])) {\n    return decodeCharacterReferences(value[0]);\n  }\n\n  return value;\n}\n\nfunction readUnquotedAttributeValueToken(parser) {\n  let text, index;\n\n  const start = parser.pos;\n\n  text = parser.matchPattern(unquotedAttributeValueTextPattern);\n\n  if (!text) {\n    return null;\n  }\n\n  const haystack = text;\n  const needles = parser.tags.map(t => t.open); // TODO refactor... we do this in readText.js as well\n\n  if ((index = getLowestIndex(haystack, needles)) !== -1) {\n    text = text.substr(0, index);\n    parser.pos = start + text.length;\n  }\n\n  return text;\n}\n\nfunction readUnquotedAttributeValue(parser) {\n  parser.inAttribute = true;\n\n  const tokens = [];\n\n  let token = readMustache(parser) || readUnquotedAttributeValueToken(parser);\n  while (token) {\n    tokens.push(token);\n    token = readMustache(parser) || readUnquotedAttributeValueToken(parser);\n  }\n\n  if (!tokens.length) {\n    return null;\n  }\n\n  parser.inAttribute = false;\n  return tokens;\n}\n\nfunction readQuotedAttributeValue(parser, quoteMark) {\n  const start = parser.pos;\n\n  if (!parser.matchString(quoteMark)) {\n    return null;\n  }\n\n  parser.inAttribute = quoteMark;\n\n  const tokens = [];\n\n  let token = readMustache(parser) || readQuotedStringToken(parser, quoteMark);\n  while (token !== null) {\n    tokens.push(token);\n    token = readMustache(parser) || readQuotedStringToken(parser, quoteMark);\n  }\n\n  if (!parser.matchString(quoteMark)) {\n    parser.pos = start;\n    return null;\n  }\n\n  parser.inAttribute = false;\n\n  return tokens;\n}\n\nfunction readQuotedStringToken(parser, quoteMark) {\n  const haystack = parser.remaining();\n\n  const needles = parser.tags.map(t => t.open); // TODO refactor... we do this in readText.js as well\n  needles.push(quoteMark);\n\n  const index = getLowestIndex(haystack, needles);\n\n  if (index === -1) {\n    parser.error('Quoted attribute value must have a closing quote');\n  }\n\n  if (!index) {\n    return null;\n  }\n\n  parser.pos += index;\n  return haystack.substr(0, index);\n}\n\nexport function readAttributeOrDirective(parser) {\n  let match, directive;\n\n  const attribute = readAttribute(parser, false);\n\n  if (!attribute) return null;\n\n  // lazy, twoway\n  if ((directive = directives[attribute.n])) {\n    attribute.t = directive.t;\n    if (directive.v) attribute.v = directive.v;\n    delete attribute.n; // no name necessary\n    parser.sp();\n    if (parser.nextChar() === '=') attribute.f = readAttributeValue(parser);\n  } else if ((match = decoratorPattern.exec(attribute.n))) {\n    // decorators\n    attribute.n = match[1];\n    attribute.t = DECORATOR;\n    readArguments(parser, attribute);\n  } else if ((match = transitionPattern.exec(attribute.n))) {\n    // transitions\n    attribute.n = match[1];\n    attribute.t = TRANSITION;\n    readArguments(parser, attribute);\n    attribute.v = match[2] === 'in-out' ? 't0' : match[2] === 'in' ? 't1' : 't2';\n  } else if ((match = eventPattern.exec(attribute.n))) {\n    // on-click etc\n    attribute.n = splitEvent(match[1]);\n    attribute.t = EVENT;\n\n    if (parser.matchString('(')) {\n      attribute.a = flattenExpression({\n        t: ARRAY_LITERAL,\n        m: readExpressionList(parser)\n      });\n      if (!parser.matchString(')')) parser.error(`Expected closing ')'`);\n    }\n\n    parser.inEvent = true;\n\n    // check for a proxy event\n    if (!readProxyEvent(parser, attribute)) {\n      // otherwise, it's an expression\n      readArguments(parser, attribute, true);\n    } else if (reservedEventNames.test(attribute.f)) {\n      parser.pos -= attribute.f.length;\n      parser.error(\n        'Cannot use reserved event names (change, reset, teardown, update, construct, config, init, render, unrender, complete, detach, insert, destruct, attachchild, detachchild)'\n      );\n    }\n\n    parser.inEvent = false;\n  } else if ((match = boundPattern.exec(attribute.n))) {\n    // bound directives\n    const bind = match[2] === 'bind';\n    attribute.n = bind ? match[3] : match[1];\n    attribute.t = ATTRIBUTE;\n    readArguments(parser, attribute, false, true);\n\n    if (!attribute.f && bind) {\n      attribute.f = [{ t: INTERPOLATOR, r: match[3] }];\n    }\n  } else {\n    parser.sp();\n    const value = parser.nextChar() === '=' ? readAttributeValue(parser) : null;\n    attribute.f = value != null ? value : attribute.f;\n\n    if (parser.sanitizeEventAttributes && onPattern.test(attribute.n)) {\n      return { exclude: true };\n    } else {\n      attribute.f = attribute.f || (attribute.f === '' ? '' : 0);\n      attribute.t = ATTRIBUTE;\n    }\n  }\n\n  return attribute;\n}\n\nfunction readProxyEvent(parser, attribute) {\n  const start = parser.pos;\n  if (!parser.matchString('=')) parser.error(`Missing required directive arguments`);\n\n  const quote = parser.matchString(`'`) || parser.matchString(`\""`);\n  parser.sp();\n  const proxy = parser.matchPattern(proxyEvent);\n\n  if (proxy !== undefined) {\n    if (quote) {\n      parser.sp();\n      if (!parser.matchString(quote)) parser.pos = start;\n      else return (attribute.f = proxy) || true;\n    } else if (!parser.matchPattern(whitespace)) {\n      parser.pos = start;\n    } else {\n      return (attribute.f = proxy) || true;\n    }\n  } else {\n    parser.pos = start;\n  }\n}\n\nfunction readArguments(parser, attribute, required = false, single = false) {\n  parser.sp();\n  if (!parser.matchString('=')) {\n    if (required) parser.error(`Missing required directive arguments`);\n    return;\n  }\n  parser.sp();\n\n  const quote = parser.matchString('\""') || parser.matchString(\""'\"");\n  const spread = parser.spreadArgs;\n  parser.spreadArgs = true;\n  parser.inUnquotedAttribute = !quote;\n  const expr = single\n    ? readExpressionOrReference(parser, [quote || ' ', '/', '>'])\n    : { m: readExpressionList(parser), t: ARRAY_LITERAL };\n  parser.inUnquotedAttribute = false;\n  parser.spreadArgs = spread;\n\n  if (quote) {\n    parser.sp();\n    if (parser.matchString(quote) !== quote) parser.error(`Expected matching quote '${quote}'`);\n  }\n\n  if (single) {\n    const interpolator = { t: INTERPOLATOR };\n    refineExpression(expr, interpolator);\n    attribute.f = [interpolator];\n  } else {\n    attribute.f = flattenExpression(expr);\n  }\n}\n"",""import { DELIMCHANGE } from 'config/types';\nimport readDelimiterChange from './mustache/readDelimiterChange';\nimport readRegexpLiteral from './expressions/primary/literal/readRegexpLiteral';\nimport { readAttributeOrDirective } from './element/readAttribute';\n\nconst delimiterChangeToken = { t: DELIMCHANGE, exclude: true };\n\nexport default function readMustache(parser) {\n  let mustache, i;\n\n  // If we're inside a <script> or <style> tag, and we're not\n  // interpolating, bug out\n  if (parser.interpolate[parser.inside] === false) {\n    return null;\n  }\n\n  for (i = 0; i < parser.tags.length; i += 1) {\n    if ((mustache = readMustacheOfType(parser, parser.tags[i]))) {\n      return mustache;\n    }\n  }\n\n  if (parser.inTag && !parser.inAttribute) {\n    mustache = readAttributeOrDirective(parser);\n    if (mustache) {\n      parser.sp();\n      return mustache;\n    }\n  }\n}\n\nfunction readMustacheOfType(parser, tag) {\n  let mustache, reader, i;\n\n  const start = parser.pos;\n\n  if (parser.matchString('\\\\' + tag.open)) {\n    if (start === 0 || parser.str[start - 1] !== '\\\\') {\n      return tag.open;\n    }\n  } else if (!parser.matchString(tag.open)) {\n    return null;\n  }\n\n  // delimiter change?\n  if ((mustache = readDelimiterChange(parser))) {\n    // find closing delimiter or abort...\n    if (!parser.matchString(tag.close)) {\n      return null;\n    }\n\n    // ...then make the switch\n    tag.open = mustache[0];\n    tag.close = mustache[1];\n    parser.sortMustacheTags();\n\n    return delimiterChangeToken;\n  }\n\n  parser.sp();\n\n  // illegal section closer\n  if (parser.matchString('/')) {\n    parser.pos -= 1;\n    const rewind = parser.pos;\n    if (!readRegexpLiteral(parser)) {\n      parser.pos = rewind - tag.close.length;\n      if (parser.inAttribute) {\n        parser.pos = start;\n        return null;\n      } else {\n        parser.error(\""Attempted to close a section that wasn't open\"");\n      }\n    } else {\n      parser.pos = rewind;\n    }\n  }\n\n  for (i = 0; i < tag.readers.length; i += 1) {\n    reader = tag.readers[i];\n\n    if ((mustache = reader(parser, tag))) {\n      if (tag.isStatic) {\n        mustache.s = 1;\n      }\n\n      if (parser.includeLinePositions) {\n        mustache.q = parser.getLinePos(start);\n      }\n\n      return mustache;\n    }\n  }\n\n  parser.pos = start;\n  return null;\n}\n"",""import readExpression from '../readExpression';\nimport refineExpression from '../../utils/refineExpression';\n\nconst legalAlias = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nconst asRE = /^as/i;\n\nexport function readAliases(parser) {\n  const aliases = [];\n  let alias;\n  const start = parser.pos;\n\n  parser.sp();\n\n  alias = readAlias(parser);\n\n  if (alias) {\n    alias.x = refineExpression(alias.x, {});\n    aliases.push(alias);\n\n    parser.sp();\n\n    while (parser.matchString(',')) {\n      alias = readAlias(parser);\n\n      if (!alias) {\n        parser.error('Expected another alias.');\n      }\n\n      alias.x = refineExpression(alias.x, {});\n      aliases.push(alias);\n\n      parser.sp();\n    }\n\n    return aliases;\n  }\n\n  parser.pos = start;\n  return null;\n}\n\nexport function readAlias(parser) {\n  const start = parser.pos;\n\n  parser.sp();\n\n  const expr = readExpression(parser, []);\n\n  if (!expr) {\n    parser.pos = start;\n    return null;\n  }\n\n  parser.sp();\n  parser.matchPattern(asRE);\n  parser.sp();\n\n  const alias = parser.matchPattern(legalAlias);\n\n  if (!alias) {\n    parser.pos = start;\n    return null;\n  }\n\n  return { n: alias, x: expr };\n}\n"",""import { CATCH, ELSE, ELSEIF, THEN } from 'config/types';\nimport readExpression from '../../readExpression';\nimport { name } from '../../expressions/shared/patterns';\n\nconst patterns = {\n  else: /^\\s*else\\s*/,\n  elseif: /^\\s*elseif\\s+/,\n  then: /^\\s*then\\s*/,\n  catch: /^\\s*catch\\s*/\n};\n\nconst types = {\n  else: ELSE,\n  elseif: ELSEIF,\n  then: THEN,\n  catch: CATCH\n};\n\nexport default function readInlineBlock(parser, tag, type) {\n  const start = parser.pos;\n\n  if (!parser.matchString(tag.open)) {\n    return null;\n  }\n\n  if (!parser.matchPattern(patterns[type])) {\n    parser.pos = start;\n    return null;\n  }\n\n  const res = { t: types[type] };\n\n  if (type === 'elseif') {\n    res.x = readExpression(parser);\n  } else if (type === 'catch' || type === 'then') {\n    const nm = parser.matchPattern(name);\n    if (nm) res.n = nm;\n  }\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  return res;\n}\n"",""import { SECTION_EACH, SECTION_IF, SECTION_IF_WITH, SECTION_UNLESS } from 'config/types';\n\nexport default {\n  each: SECTION_EACH,\n  if: SECTION_IF,\n  with: SECTION_IF_WITH,\n  unless: SECTION_UNLESS\n};\n"",""import {\n  ALIAS,\n  AWAIT,\n  CATCH,\n  ELSE,\n  ELSEIF,\n  SECTION,\n  SECTION_IF,\n  SECTION_UNLESS,\n  THEN\n} from 'config/types';\nimport { READERS } from 'parse/_parse';\nimport readClosing from './section/readClosing';\nimport readInlineBlock from './section/readInlineBlock';\nimport handlebarsBlockCodes from './handlebarsBlockCodes';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { readAlias, readAliases } from './readAliases';\nimport { keys } from 'utils/object';\nimport { name } from '../expressions/shared/patterns';\n\nconst indexRefPattern = /^\\s*:\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nconst keyIndexRefPattern = /^\\s*,\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nconst handlebarsBlockPattern = new RegExp('^(' + keys(handlebarsBlockCodes).join('|') + ')\\\\b');\n\nexport default function readSection(parser, tag) {\n  let expression,\n    section,\n    child,\n    children,\n    hasElse,\n    block,\n    unlessBlock,\n    closed,\n    i,\n    expectedClose,\n    hasThen,\n    hasCatch,\n    inlineThen;\n  let aliasOnly = false;\n\n  const start = parser.pos;\n\n  if (parser.matchString('^')) {\n    // watch out for parent context refs - {{^^/^^/foo}}\n    if (parser.matchString('^/')) {\n      parser.pos = start;\n      return null;\n    }\n    section = { t: SECTION, f: [], n: SECTION_UNLESS };\n  } else if (parser.matchString('#')) {\n    section = { t: SECTION, f: [] };\n\n    if (parser.matchString('partial')) {\n      parser.pos = start - parser.standardDelimiters[0].length;\n      parser.error(\n        'Partial definitions can only be at the top level of the template, or immediately inside components'\n      );\n    }\n\n    if ((block = parser.matchString('await'))) {\n      expectedClose = block;\n      section.t = AWAIT;\n    } else if ((block = parser.matchPattern(handlebarsBlockPattern))) {\n      expectedClose = block;\n      section.n = handlebarsBlockCodes[block];\n    }\n  } else {\n    return null;\n  }\n\n  parser.sp();\n\n  if (block === 'with') {\n    const aliases = readAliases(parser);\n    if (aliases) {\n      aliasOnly = true;\n      section.z = aliases;\n      section.t = ALIAS;\n    }\n  } else if (block === 'each') {\n    const alias = readAlias(parser);\n    if (alias) {\n      section.z = [{ n: alias.n, x: { r: '.' } }];\n      expression = alias.x;\n    }\n  }\n\n  if (!aliasOnly) {\n    if (!expression) expression = readExpression(parser);\n\n    if (!expression) {\n      parser.error('Expected expression');\n    }\n\n    // extra each aliases\n    if (block === 'each' && parser.matchString(',')) {\n      const aliases = readAliases(parser);\n      if (aliases) {\n        if (section.z) aliases.unshift(section.z[0]);\n        section.z = aliases;\n      }\n    }\n\n    // optional index and key references\n    if ((block === 'each' || !block) && (i = parser.matchPattern(indexRefPattern))) {\n      let extra;\n\n      if ((extra = parser.matchPattern(keyIndexRefPattern))) {\n        section.i = i + ',' + extra;\n      } else {\n        section.i = i;\n      }\n    } else if (block === 'await' && parser.matchString('then')) {\n      parser.sp();\n      hasThen = true;\n      inlineThen = parser.matchPattern(name);\n      if (!inlineThen) inlineThen = true;\n    }\n\n    if (!block && expression.n) {\n      expectedClose = expression.n;\n    }\n  }\n\n  parser.sp();\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  parser.sectionDepth += 1;\n  children = section.f;\n\n  let pos;\n  do {\n    pos = parser.pos;\n    if ((child = readClosing(parser, tag))) {\n      if (expectedClose && child.r !== expectedClose) {\n        if (!block) {\n          if (child.r)\n            parser.warn(\n              `Expected ${tag.open}/${expectedClose}${tag.close} but found ${tag.open}/${child.r}${\n                tag.close\n              }`\n            );\n        } else {\n          parser.pos = pos;\n          parser.error(`Expected ${tag.open}/${expectedClose}${tag.close}`);\n        }\n      }\n\n      parser.sectionDepth -= 1;\n      closed = true;\n    } else if (\n      !aliasOnly &&\n      ((child = readInlineBlock(parser, tag, 'elseif')) ||\n        (child = readInlineBlock(parser, tag, 'else')) ||\n        (block === 'await' &&\n          ((child = readInlineBlock(parser, tag, 'then')) ||\n            (child = readInlineBlock(parser, tag, 'catch')))))\n    ) {\n      if (section.n === SECTION_UNLESS) {\n        parser.error('{{else}} not allowed in {{#unless}}');\n      }\n\n      if (hasElse) {\n        if (child.t === ELSE) {\n          parser.error('there can only be one {{else}} block, at the end of a section');\n        } else if (child.t === ELSEIF) {\n          parser.error('illegal {{elseif...}} after {{else}}');\n        }\n      }\n\n      if (!unlessBlock && (inlineThen || !hasThen) && !hasCatch) {\n        if (block === 'await') {\n          const s = { f: children };\n          section.f = [s];\n          if (inlineThen) {\n            s.t = THEN;\n            inlineThen !== true && (s.n = inlineThen);\n          } else {\n            s.t = SECTION;\n          }\n        } else {\n          unlessBlock = [];\n        }\n      }\n\n      const mustache = {\n        t: SECTION,\n        f: (children = [])\n      };\n\n      if (child.t === ELSE) {\n        if (block === 'await') {\n          section.f.push(mustache);\n          mustache.t = ELSE;\n        } else {\n          mustache.n = SECTION_UNLESS;\n          unlessBlock.push(mustache);\n        }\n        hasElse = true;\n      } else if (child.t === ELSEIF) {\n        mustache.n = SECTION_IF;\n        refineExpression(child.x, mustache);\n        unlessBlock.push(mustache);\n      } else if (child.t === THEN) {\n        if (hasElse) parser.error('{{then}} block must appear before any {{else}} block');\n        if (hasCatch) parser.error('{{then}} block must appear before any {{catch}} block');\n        if (hasThen) parser.error('there can only be one {{then}} block per {{#await}}');\n        mustache.t = THEN;\n        hasThen = true;\n        child.n && (mustache.n = child.n);\n        section.f.push(mustache);\n      } else if (child.t === CATCH) {\n        if (hasElse) parser.error('{{catch}} block must appear before any {{else}} block');\n        if (hasCatch) parser.error('there can only be one {{catch}} block per {{#await}}');\n        mustache.t = CATCH;\n        hasCatch = true;\n        mustache.n = child.n;\n        section.f.push(mustache);\n      }\n    } else {\n      child = parser.read(READERS);\n\n      if (!child) {\n        break;\n      }\n\n      children.push(child);\n    }\n  } while (!closed);\n\n  if (unlessBlock) {\n    section.l = unlessBlock;\n  }\n\n  if (!aliasOnly) {\n    refineExpression(expression, section);\n  }\n\n  if (block === 'await' && (inlineThen || !hasThen) && !hasCatch && !hasElse) {\n    const s = { f: section.f };\n    section.f = [s];\n    if (inlineThen) {\n      s.t = THEN;\n      inlineThen !== true && (s.n = inlineThen);\n    } else {\n      s.t = SECTION;\n    }\n  }\n\n  // TODO if a section is empty it should be discarded. Don't do\n  // that here though - we need to clean everything up first, as\n  // it may contain removeable whitespace. As a temporary measure,\n  // to pass the existing tests, remove empty `f` arrays\n  if (!section.f.length) {\n    delete section.f;\n  }\n\n  return section;\n}\n"",""import { COMMENT } from 'config/types';\n\nconst OPEN_COMMENT = '<!--';\nconst CLOSE_COMMENT = '-->';\n\nexport default function readHtmlComment(parser) {\n  const start = parser.pos;\n\n  if (parser.textOnlyMode || !parser.matchString(OPEN_COMMENT)) {\n    return null;\n  }\n\n  const remaining = parser.remaining();\n  const endIndex = remaining.indexOf(CLOSE_COMMENT);\n\n  if (endIndex === -1) {\n    parser.error(\""Illegal HTML - expected closing comment sequence ('-->')\"");\n  }\n\n  const content = remaining.substr(0, endIndex);\n  parser.pos += endIndex + 3;\n\n  const comment = {\n    t: COMMENT,\n    c: content\n  };\n\n  if (parser.includeLinePositions) {\n    comment.q = parser.getLinePos(start);\n  }\n\n  return comment;\n}\n"",""import { COMMENT, DELIMCHANGE, SECTION, INVERTED } from 'config/types';\nimport { lastItem } from 'utils/array';\nimport { isString } from 'utils/is';\n\nconst leadingLinebreak = /^[ \\t\\f\\r\\n]*\\r?\\n/;\nconst trailingLinebreak = /\\r?\\n[ \\t\\f\\r\\n]*$/;\n\nexport default function(items) {\n  let i, current, backOne, backTwo, lastSectionItem;\n\n  for (i = 1; i < items.length; i += 1) {\n    current = items[i];\n    backOne = items[i - 1];\n    backTwo = items[i - 2];\n\n    // if we're at the end of a [text][comment][text] sequence...\n    if (isString(current) && isComment(backOne) && isString(backTwo)) {\n      // ... and the comment is a standalone (i.e. line breaks either side)...\n      if (trailingLinebreak.test(backTwo) && leadingLinebreak.test(current)) {\n        // ... then we want to remove the whitespace after the first line break\n        items[i - 2] = backTwo.replace(trailingLinebreak, '\\n');\n\n        // and the leading line break of the second text token\n        items[i] = current.replace(leadingLinebreak, '');\n      }\n    }\n\n    // if the current item is a section, and it is preceded by a linebreak, and\n    // its first item is a linebreak...\n    if (isSection(current) && isString(backOne)) {\n      if (\n        trailingLinebreak.test(backOne) &&\n        isString(current.f[0]) &&\n        leadingLinebreak.test(current.f[0])\n      ) {\n        items[i - 1] = backOne.replace(trailingLinebreak, '\\n');\n        current.f[0] = current.f[0].replace(leadingLinebreak, '');\n      }\n    }\n\n    // if the last item was a section, and it is followed by a linebreak, and\n    // its last item is a linebreak...\n    if (isString(current) && isSection(backOne)) {\n      lastSectionItem = lastItem(backOne.f);\n\n      if (\n        isString(lastSectionItem) &&\n        trailingLinebreak.test(lastSectionItem) &&\n        leadingLinebreak.test(current)\n      ) {\n        backOne.f[backOne.f.length - 1] = lastSectionItem.replace(trailingLinebreak, '\\n');\n        items[i] = current.replace(leadingLinebreak, '');\n      }\n    }\n  }\n\n  return items;\n}\n\nfunction isComment(item) {\n  return item.t === COMMENT || item.t === DELIMCHANGE;\n}\n\nfunction isSection(item) {\n  return (item.t === SECTION || item.t === INVERTED) && item.f;\n}\n"",""import { COMMENT, ELEMENT } from 'config/types';\nimport stripStandalones from './stripStandalones';\nimport trimWhitespace from './trimWhitespace';\nimport { isString } from 'utils/is';\n\nconst contiguousWhitespace = /[ \\t\\f\\r\\n]+/g;\nconst leadingWhitespace = /^[ \\t\\f\\r\\n]+/;\nconst trailingWhitespace = /[ \\t\\f\\r\\n]+$/;\nconst leadingNewLine = /^(?:\\r\\n|\\r|\\n)/;\nconst trailingNewLine = /(?:\\r\\n|\\r|\\n)$/;\n\nexport default function cleanup(\n  items,\n  stripComments,\n  preserveWhitespace,\n  removeLeadingWhitespace,\n  removeTrailingWhitespace,\n  whiteSpaceElements\n) {\n  if (isString(items)) return;\n\n  let i,\n    item,\n    previousItem,\n    nextItem,\n    preserveWhitespaceInsideFragment,\n    removeLeadingWhitespaceInsideFragment,\n    removeTrailingWhitespaceInsideFragment;\n\n  // First pass - remove standalones and comments etc\n  stripStandalones(items);\n\n  i = items.length;\n  while (i--) {\n    item = items[i];\n\n    // Remove delimiter changes, unsafe elements etc\n    if (item.exclude) {\n      items.splice(i, 1);\n    } else if (stripComments && item.t === COMMENT) {\n      // Remove comments, unless we want to keep them\n      items.splice(i, 1);\n    }\n  }\n\n  // If necessary, remove leading and trailing whitespace\n  trimWhitespace(\n    items,\n    removeLeadingWhitespace ? leadingWhitespace : null,\n    removeTrailingWhitespace ? trailingWhitespace : null\n  );\n\n  i = items.length;\n  while (i--) {\n    item = items[i];\n    removeLeadingWhitespaceInsideFragment = removeTrailingWhitespaceInsideFragment = false;\n\n    // Recurse\n    if (item.f) {\n      const isPreserveWhitespaceElement =\n        item.t === ELEMENT &&\n        (whiteSpaceElements[item.e.toLowerCase()] || whiteSpaceElements[item.e]);\n      preserveWhitespaceInsideFragment = preserveWhitespace || isPreserveWhitespaceElement;\n\n      if (!preserveWhitespace && isPreserveWhitespaceElement) {\n        trimWhitespace(item.f, leadingNewLine, trailingNewLine);\n      }\n\n      if (!preserveWhitespaceInsideFragment) {\n        previousItem = items[i - 1];\n        nextItem = items[i + 1];\n\n        // if the previous item was a text item with trailing whitespace,\n        // remove leading whitespace inside the fragment\n        if (!previousItem || (isString(previousItem) && trailingWhitespace.test(previousItem))) {\n          removeLeadingWhitespaceInsideFragment = true;\n        }\n\n        // and vice versa\n        if (!nextItem || (isString(nextItem) && leadingWhitespace.test(nextItem))) {\n          removeTrailingWhitespaceInsideFragment = true;\n        }\n      }\n\n      cleanup(\n        item.f,\n        stripComments,\n        preserveWhitespaceInsideFragment,\n        removeLeadingWhitespaceInsideFragment,\n        removeTrailingWhitespaceInsideFragment,\n        whiteSpaceElements\n      );\n    }\n\n    // Split if-else blocks into two (an if, and an unless)\n    if (item.l) {\n      cleanup(\n        item.l,\n        stripComments,\n        preserveWhitespace,\n        removeLeadingWhitespaceInsideFragment,\n        removeTrailingWhitespaceInsideFragment,\n        whiteSpaceElements\n      );\n\n      item.l.forEach(s => (s.l = 1));\n      item.l.unshift(i + 1, 0);\n      items.splice.apply(items, item.l);\n      delete item.l; // TODO would be nice if there was a way around this\n    }\n\n    // Clean up conditional attributes\n    if (item.m) {\n      cleanup(\n        item.m,\n        stripComments,\n        preserveWhitespace,\n        removeLeadingWhitespaceInsideFragment,\n        removeTrailingWhitespaceInsideFragment,\n        whiteSpaceElements\n      );\n      if (item.m.length < 1) delete item.m;\n    }\n  }\n\n  // final pass - fuse text nodes together\n  i = items.length;\n  while (i--) {\n    if (isString(items[i])) {\n      if (isString(items[i + 1])) {\n        items[i] = items[i] + items[i + 1];\n        items.splice(i + 1, 1);\n      }\n\n      if (!preserveWhitespace) {\n        items[i] = items[i].replace(contiguousWhitespace, ' ');\n      }\n\n      if (items[i] === '') {\n        items.splice(i, 1);\n      }\n    }\n  }\n}\n"",""import { CLOSING_TAG } from 'src/config/types';\n\nconst closingTagPattern = /^([a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*)\\s*\\>/;\n\nexport default function readClosingTag(parser) {\n  let tag;\n\n  const start = parser.pos;\n\n  // are we looking at a closing tag?\n  if (!parser.matchString('</')) {\n    return null;\n  }\n\n  if ((tag = parser.matchPattern(closingTagPattern))) {\n    if (parser.inside && tag !== parser.inside) {\n      parser.pos = start;\n      return null;\n    }\n\n    return {\n      t: CLOSING_TAG,\n      e: tag\n    };\n  }\n\n  // We have an illegal closing tag, report it\n  parser.pos -= 2;\n  parser.error('Illegal closing tag');\n}\n"",""import { ANCHOR, DOCTYPE, ELEMENT, ATTRIBUTE } from 'config/types';\nimport { voidElements } from 'utils/html';\nimport { READERS, PARTIAL_READERS } from '../_parse';\nimport cleanup from 'parse/utils/cleanup';\nimport readMustache from './readMustache';\nimport readClosingTag from './element/readClosingTag';\nimport readClosing from './mustache/section/readClosing';\nimport { create } from 'utils/object';\nimport { isString } from 'utils/is';\nimport hyphenateCamel from 'utils/hyphenateCamel';\n\nconst tagNamePattern = /^[a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*/;\nconst anchorPattern = /^[a-zA-Z_$][-a-zA-Z0-9_$]*/;\nconst validTagNameFollower = /^[\\s\\n\\/>]/;\nconst semiEnd = /;\\s*$/;\nconst exclude = { exclude: true };\n\n// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission\nconst disallowedContents = {\n  li: ['li'],\n  dt: ['dt', 'dd'],\n  dd: ['dt', 'dd'],\n  p: 'address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul'.split(\n    ' '\n  ),\n  rt: ['rt', 'rp'],\n  rp: ['rt', 'rp'],\n  optgroup: ['optgroup'],\n  option: ['option', 'optgroup'],\n  thead: ['tbody', 'tfoot'],\n  tbody: ['tbody', 'tfoot'],\n  tfoot: ['tbody'],\n  tr: ['tr', 'tbody'],\n  td: ['td', 'th', 'tr'],\n  th: ['td', 'th', 'tr']\n};\n\nexport default readElement;\n\nfunction readElement(parser) {\n  let attribute,\n    selfClosing,\n    children,\n    partials,\n    hasPartials,\n    child,\n    closed,\n    pos,\n    remaining,\n    closingTag,\n    anchor;\n\n  const start = parser.pos;\n\n  if (parser.inside || parser.inAttribute || parser.textOnlyMode) {\n    return null;\n  }\n\n  if (!parser.matchString('<')) {\n    return null;\n  }\n\n  // if this is a closing tag, abort straight away\n  if (parser.nextChar() === '/') {\n    return null;\n  }\n\n  const element = {};\n  if (parser.includeLinePositions) {\n    element.q = parser.getLinePos(start);\n  }\n\n  // check for doctype decl\n  if (parser.matchString('!')) {\n    element.t = DOCTYPE;\n    if (!parser.matchPattern(/^doctype/i)) {\n      parser.error('Expected DOCTYPE declaration');\n    }\n\n    element.a = parser.matchPattern(/^(.+?)>/);\n    return element;\n  } else if ((anchor = parser.matchString('#'))) {\n    // check for anchor\n    parser.sp();\n    element.t = ANCHOR;\n    element.n = parser.matchPattern(anchorPattern);\n  } else {\n    // otherwise, it's an element/component\n    element.t = ELEMENT;\n\n    // element name\n    element.e = parser.matchPattern(tagNamePattern);\n    if (!element.e) {\n      return null;\n    }\n  }\n\n  // next character must be whitespace, closing solidus or '>'\n  if (!validTagNameFollower.test(parser.nextChar())) {\n    parser.error('Illegal tag name');\n  }\n\n  parser.sp();\n\n  parser.inTag = true;\n\n  // directives and attributes\n  while ((attribute = readMustache(parser))) {\n    if (attribute !== false) {\n      if (!element.m) element.m = [];\n      element.m.push(attribute);\n    }\n\n    parser.sp();\n  }\n\n  parser.inTag = false;\n\n  // allow whitespace before closing solidus\n  parser.sp();\n\n  // self-closing solidus?\n  if (parser.matchString('/')) {\n    selfClosing = true;\n  }\n\n  // closing angle bracket\n  if (!parser.matchString('>')) {\n    return null;\n  }\n\n  const lowerCaseName = (element.e || element.n).toLowerCase();\n  const preserveWhitespace = parser.preserveWhitespace;\n\n  if (!selfClosing && (anchor || !voidElements[element.e.toLowerCase()])) {\n    if (!anchor) {\n      parser.elementStack.push(lowerCaseName);\n\n      // Special case - if we open a script element, further tags should\n      // be ignored unless they're a closing script element\n      if (lowerCaseName in parser.interpolate) {\n        parser.inside = lowerCaseName;\n      }\n    }\n\n    children = [];\n    partials = create(null);\n\n    do {\n      pos = parser.pos;\n      remaining = parser.remaining();\n\n      if (!remaining) {\n        // if this happens to be a script tag and there's no content left, it's because\n        // a closing script tag can't appear in a script\n        if (parser.inside === 'script') {\n          closed = true;\n          break;\n        }\n\n        parser.error(\n          `Missing end ${parser.elementStack.length > 1 ? 'tags' : 'tag'} (${parser.elementStack\n            .reverse()\n            .map(x => `</${x}>`)\n            .join('')})`\n        );\n      }\n\n      // if for example we're in an <li> element, and we see another\n      // <li> tag, close the first so they become siblings\n      if (!anchor && !canContain(lowerCaseName, remaining)) {\n        closed = true;\n      } else if (!anchor && (closingTag = readClosingTag(parser))) {\n        // closing tag\n        closed = true;\n\n        const closingTagName = closingTag.e.toLowerCase();\n\n        // if this *isn't* the closing tag for the current element...\n        if (closingTagName !== lowerCaseName) {\n          // rewind parser\n          parser.pos = pos;\n\n          // if it doesn't close a parent tag, error\n          if (!~parser.elementStack.indexOf(closingTagName)) {\n            let errorMessage = 'Unexpected closing tag';\n\n            // add additional help for void elements, since component names\n            // might clash with them\n            if (voidElements[closingTagName.toLowerCase()]) {\n              errorMessage += ` (<${closingTagName}> is a void element - it cannot contain children)`;\n            }\n\n            parser.error(errorMessage);\n          }\n        }\n      } else if (anchor && readAnchorClose(parser, element.n)) {\n        closed = true;\n      } else {\n        // implicit close by closing section tag. TODO clean this up\n        const tag = {\n          open: parser.standardDelimiters[0],\n          close: parser.standardDelimiters[1]\n        };\n        if (readClosing(parser, tag) || readInline(parser, tag)) {\n          closed = true;\n          parser.pos = pos;\n        } else if ((child = parser.read(PARTIAL_READERS))) {\n          if (partials[child.n]) {\n            parser.pos = pos;\n            parser.error('Duplicate partial definition');\n          }\n\n          cleanup(\n            child.f,\n            parser.stripComments,\n            preserveWhitespace,\n            !preserveWhitespace,\n            !preserveWhitespace,\n            parser.whiteSpaceElements\n          );\n\n          partials[child.n] = child.f;\n          hasPartials = true;\n        } else {\n          if ((child = parser.read(READERS))) {\n            children.push(child);\n          } else {\n            closed = true;\n          }\n        }\n      }\n    } while (!closed);\n\n    if (children.length) {\n      element.f = children;\n    }\n\n    if (hasPartials) {\n      element.p = partials;\n    }\n\n    parser.elementStack.pop();\n  }\n\n  parser.inside = null;\n\n  if (parser.sanitizeElements && parser.sanitizeElements.indexOf(lowerCaseName) !== -1) {\n    return exclude;\n  }\n\n  if (\n    element.m &&\n    lowerCaseName !== 'input' &&\n    lowerCaseName !== 'select' &&\n    lowerCaseName !== 'textarea' &&\n    lowerCaseName !== 'option'\n  ) {\n    const attrs = element.m;\n    let classes, styles, cls, style;\n    let i = 0;\n    let a;\n    while (i < attrs.length) {\n      a = attrs[i];\n\n      if (a.t !== ATTRIBUTE) {\n        i++;\n        continue;\n      }\n\n      if (a.n.indexOf('class-') === 0 && !a.f) {\n        // static class directives\n        (classes || (classes = [])).push(a.n.slice(6));\n        attrs.splice(i, 1);\n      } else if (a.n.indexOf('style-') === 0 && isString(a.f)) {\n        // static style directives\n        (styles || (styles = [])).push(`${hyphenateCamel(a.n.slice(6))}: ${a.f};`);\n        attrs.splice(i, 1);\n      } else if (a.n === 'class' && isString(a.f)) {\n        // static class attrs\n        (classes || (classes = [])).push(a.f);\n        attrs.splice(i, 1);\n      } else if (a.n === 'style' && isString(a.f)) {\n        // static style attrs\n        (styles || (styles = [])).push(a.f + (semiEnd.test(a.f) ? '' : ';'));\n        attrs.splice(i, 1);\n      } else if (a.n === 'class') {\n        cls = a;\n        i++;\n      } else if (a.n === 'style') {\n        style = a;\n        i++;\n      } else if (\n        !~a.n.indexOf(':') &&\n        a.n !== 'value' &&\n        a.n !== 'contenteditable' &&\n        isString(a.f)\n      ) {\n        a.g = 1;\n        i++;\n      } else {\n        i++;\n      }\n    }\n\n    if (classes) {\n      if (!cls || !isString(cls.f))\n        attrs.unshift({ t: ATTRIBUTE, n: 'class', f: classes.join(' '), g: 1 });\n      else cls.f += ' ' + classes.join(' ');\n    } else if (cls && isString(cls.f)) cls.g = 1;\n\n    if (styles) {\n      if (!style || !isString(style.f))\n        attrs.unshift({ t: ATTRIBUTE, n: 'style', f: styles.join(' '), g: 1 });\n      else style.f += '; ' + styles.join(' ');\n    } else if (style && isString(style.f)) style.g = 1;\n  }\n\n  return element;\n}\n\nfunction canContain(name, remaining) {\n  const match = /^<([a-zA-Z][a-zA-Z0-9]*)/.exec(remaining);\n  const disallowed = disallowedContents[name];\n\n  if (!match || !disallowed) {\n    return true;\n  }\n\n  return !~disallowed.indexOf(match[1].toLowerCase());\n}\n\nfunction readAnchorClose(parser, name) {\n  const pos = parser.pos;\n  if (!parser.matchString('</')) {\n    return null;\n  }\n\n  parser.matchString('#');\n  parser.sp();\n\n  if (!parser.matchString(name)) {\n    parser.pos = pos;\n    return null;\n  }\n\n  parser.sp();\n\n  if (!parser.matchString('>')) {\n    parser.pos = pos;\n    return null;\n  }\n\n  return true;\n}\n\nconst inlines = /^\\s*(elseif|else|then|catch)\\s*/;\nfunction readInline(parser, tag) {\n  const pos = parser.pos;\n  if (!parser.matchString(tag.open)) return;\n  if (parser.matchPattern(inlines)) {\n    return true;\n  } else {\n    parser.pos = pos;\n  }\n}\n"",""import { INLINE_PARTIAL } from 'config/types';\nimport { READERS } from '../_parse';\nimport readClosing from './mustache/section/readClosing';\n\nconst partialDefinitionSectionPattern = /^\\s*#\\s*partial\\s+/;\n\nexport default function readPartialDefinitionSection(parser) {\n  let child, closed;\n\n  const start = parser.pos;\n\n  const delimiters = parser.standardDelimiters;\n\n  if (!parser.matchString(delimiters[0])) {\n    return null;\n  }\n\n  if (!parser.matchPattern(partialDefinitionSectionPattern)) {\n    parser.pos = start;\n    return null;\n  }\n\n  const name = parser.matchPattern(/^[a-zA-Z_$][a-zA-Z_$0-9\\-\\/]*/);\n\n  if (!name) {\n    parser.error('expected legal partial name');\n  }\n\n  parser.sp();\n  if (!parser.matchString(delimiters[1])) {\n    parser.error(`Expected closing delimiter '${delimiters[1]}'`);\n  }\n\n  const content = [];\n\n  const [open, close] = delimiters;\n\n  do {\n    if ((child = readClosing(parser, { open, close }))) {\n      if (child.r !== 'partial') {\n        parser.error(`Expected ${open}/partial${close}`);\n      }\n\n      closed = true;\n    } else {\n      child = parser.read(READERS);\n\n      if (!child) {\n        parser.error(`Expected ${open}/partial${close}`);\n      }\n\n      content.push(child);\n    }\n  } while (!closed);\n\n  return {\n    t: INLINE_PARTIAL,\n    n: name,\n    f: content\n  };\n}\n"",""export default {};\n"",""import { TEMPLATE_VERSION } from 'config/template';\nimport Parser from './Parser';\nimport readMustache from './converters/readMustache';\nimport readTriple from './converters/mustache/readTriple';\nimport readUnescaped from './converters/mustache/readUnescaped';\nimport readPartial from './converters/mustache/readPartial';\nimport readMustacheComment from './converters/mustache/readMustacheComment';\nimport readInterpolator from './converters/mustache/readInterpolator';\nimport readSection from './converters/mustache/readSection';\nimport readHtmlComment from './converters/readHtmlComment';\nimport readElement from './converters/readElement';\nimport readText from './converters/readText';\nimport readPartialDefinitionSection from './converters/readPartialDefinitionSection';\nimport readTemplate from './converters/readTemplate';\nimport readExpression from './converters/readExpression';\nimport { fromExpression } from './utils/createFunction';\nimport cleanup from './utils/cleanup';\nimport insertExpressions from './utils/insertExpressions';\nimport flattenExpression from './utils/flattenExpression';\nimport shared from '../Ractive/shared';\nimport { assign, keys } from 'utils/object';\nimport { isObjectType } from 'utils/is';\n\n// See https://github.com/ractivejs/template-spec for information\n// about the Ractive template specification\n\nconst STANDARD_READERS = [\n  readPartial,\n  readUnescaped,\n  readSection,\n  readInterpolator,\n  readMustacheComment\n];\nconst TRIPLE_READERS = [readTriple];\n\nexport const READERS = [readMustache, readHtmlComment, readElement, readText];\nexport const PARTIAL_READERS = [readPartialDefinitionSection];\n\nconst preserveWhitespaceElements = { pre: 1, script: 1, style: 1, textarea: 1 };\n\nconst defaultInterpolate = { textarea: true, script: true, style: true, template: true };\n\nconst StandardParser = Parser.extend({\n  init(str, options) {\n    const tripleDelimiters = options.tripleDelimiters || shared.defaults.tripleDelimiters;\n    const staticDelimiters = options.staticDelimiters || shared.defaults.staticDelimiters;\n    const staticTripleDelimiters =\n      options.staticTripleDelimiters || shared.defaults.staticTripleDelimiters;\n\n    this.standardDelimiters = options.delimiters || shared.defaults.delimiters;\n\n    this.tags = [\n      {\n        isStatic: false,\n        isTriple: false,\n        open: this.standardDelimiters[0],\n        close: this.standardDelimiters[1],\n        readers: STANDARD_READERS\n      },\n      {\n        isStatic: false,\n        isTriple: true,\n        open: tripleDelimiters[0],\n        close: tripleDelimiters[1],\n        readers: TRIPLE_READERS\n      },\n      {\n        isStatic: true,\n        isTriple: false,\n        open: staticDelimiters[0],\n        close: staticDelimiters[1],\n        readers: STANDARD_READERS\n      },\n      {\n        isStatic: true,\n        isTriple: true,\n        open: staticTripleDelimiters[0],\n        close: staticTripleDelimiters[1],\n        readers: TRIPLE_READERS\n      }\n    ];\n\n    this.contextLines = options.contextLines || shared.defaults.contextLines;\n\n    this.sortMustacheTags();\n\n    this.sectionDepth = 0;\n    this.elementStack = [];\n\n    this.interpolate = assign(\n      {},\n      defaultInterpolate,\n      shared.defaults.interpolate,\n      options.interpolate\n    );\n\n    if (options.sanitize === true) {\n      options.sanitize = {\n        // blacklist from https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/lang/html/html4-elements-whitelist.json\n        elements: 'applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title'.split(\n          ' '\n        ),\n        eventAttributes: true\n      };\n    }\n\n    this.stripComments = options.stripComments !== false;\n    this.preserveWhitespace = isObjectType(options.preserveWhitespace)\n      ? false\n      : options.preserveWhitespace;\n    this.sanitizeElements = options.sanitize && options.sanitize.elements;\n    this.sanitizeEventAttributes = options.sanitize && options.sanitize.eventAttributes;\n    this.includeLinePositions = options.includeLinePositions;\n    this.textOnlyMode = options.textOnlyMode;\n    this.csp = options.csp;\n    this.allowExpressions = options.allowExpressions;\n\n    if (options.expression) this.converters = [readExpression];\n\n    if (options.attributes) this.inTag = true;\n\n    // special whitespace handling requested for certain elements\n    this.whiteSpaceElements = assign({}, options.preserveWhitespace, preserveWhitespaceElements);\n  },\n\n  postProcess(result, options) {\n    const [parserResult] = result;\n\n    if (options.expression) {\n      const expr = flattenExpression(parserResult);\n      expr.e = fromExpression(expr.s, expr.r.length);\n      return expr;\n    } else {\n      // special case - empty string\n      if (!result.length) {\n        return { t: [], v: TEMPLATE_VERSION };\n      }\n\n      if (this.sectionDepth > 0) {\n        this.error('A section was left open');\n      }\n\n      cleanup(\n        parserResult.t,\n        this.stripComments,\n        this.preserveWhitespace,\n        !this.preserveWhitespace,\n        !this.preserveWhitespace,\n        this.whiteSpaceElements\n      );\n\n      if (this.csp !== false) {\n        const expr = {};\n\n        insertExpressions(parserResult.t, expr);\n        insertExpressions(parserResult.p || {}, expr);\n\n        if (keys(expr).length) parserResult.e = expr;\n      }\n\n      return parserResult;\n    }\n  },\n\n  converters: [readTemplate],\n\n  sortMustacheTags() {\n    // Sort in order of descending opening delimiter length (longer first),\n    // to protect against opening delimiters being substrings of each other\n    this.tags.sort((a, b) => {\n      return b.open.length - a.open.length;\n    });\n  }\n});\n\nexport default function parse(template, options) {\n  return new StandardParser(template, options || {}).result;\n}\n"",""import { fromExpression } from 'parse/utils/createFunction';\nimport { doc } from 'config/environment';\nimport { fatal } from 'utils/log';\nimport { addFunctions } from 'shared/getFunction';\nimport parse from 'parse/_parse';\nimport { isString } from 'utils/is';\n\nconst parseOptions = [\n  'delimiters',\n  'tripleDelimiters',\n  'staticDelimiters',\n  'staticTripleDelimiters',\n  'csp',\n  'interpolate',\n  'preserveWhitespace',\n  'sanitize',\n  'stripComments',\n  'contextLines',\n  'allowExpressions',\n  'attributes'\n];\n\nconst TEMPLATE_INSTRUCTIONS = `Either preparse or use a ractive runtime source that includes the parser. `;\n\nconst COMPUTATION_INSTRUCTIONS = `Either include a version of Ractive that can parse or convert your computation strings to functions.`;\n\nfunction throwNoParse(method, error, instructions) {\n  if (!method) {\n    fatal(`Missing Ractive.parse - cannot parse ${error}. ${instructions}`);\n  }\n}\n\nexport function createFunction(body, length) {\n  throwNoParse(fromExpression, 'new expression function', TEMPLATE_INSTRUCTIONS);\n  return fromExpression(body, length);\n}\n\nexport function createFunctionFromString(str, bindTo) {\n  throwNoParse(parse, 'compution string \""${str}\""', COMPUTATION_INSTRUCTIONS);\n  const tpl = parse(str, { expression: true });\n  return function() {\n    return tpl.e.apply(bindTo, tpl.r.map(r => bindTo.get(r)));\n  };\n}\n\nconst parser = {\n  fromId(id, options) {\n    if (!doc) {\n      if (options && options.noThrow) {\n        return;\n      }\n      throw new Error(`Cannot retrieve template #${id} as Ractive is not running in a browser.`);\n    }\n\n    if (id) id = id.replace(/^#/, '');\n\n    let template;\n\n    if (!(template = doc.getElementById(id))) {\n      if (options && options.noThrow) {\n        return;\n      }\n      throw new Error(`Could not find template element with id #${id}`);\n    }\n\n    if (template.tagName.toUpperCase() !== 'SCRIPT') {\n      if (options && options.noThrow) {\n        return;\n      }\n      throw new Error(`Template element with id #${id}, must be a <script> element`);\n    }\n\n    return 'textContent' in template ? template.textContent : template.innerHTML;\n  },\n\n  isParsed(template) {\n    return !isString(template);\n  },\n\n  getParseOptions(ractive) {\n    // Could be Ractive or a Component\n    if (ractive.defaults) {\n      ractive = ractive.defaults;\n    }\n\n    return parseOptions.reduce((val, key) => {\n      val[key] = ractive[key];\n      return val;\n    }, {});\n  },\n\n  parse(template, options) {\n    throwNoParse(parse, 'template', TEMPLATE_INSTRUCTIONS);\n    const parsed = parse(template, options);\n    addFunctions(parsed);\n    return parsed;\n  },\n\n  parseFor(template, ractive) {\n    return this.parse(template, this.getParseOptions(ractive));\n  }\n};\n\nexport default parser;\n"",""import { removeFromArray } from 'utils/array';\nimport { isFunction } from 'utils/is';\n\nlet id = 0;\n\nexport default class TransitionManager {\n  constructor(callback, parent) {\n    this.callback = callback;\n    this.parent = parent;\n\n    this.intros = [];\n    this.outros = [];\n\n    this.children = [];\n    this.totalChildren = this.outroChildren = 0;\n\n    this.detachQueue = [];\n    this.outrosComplete = false;\n\n    this.id = id++;\n\n    if (parent) {\n      parent.addChild(this);\n    }\n  }\n\n  add(transition) {\n    const list = transition.isIntro ? this.intros : this.outros;\n    transition.starting = true;\n    list.push(transition);\n  }\n\n  addChild(child) {\n    this.children.push(child);\n\n    this.totalChildren += 1;\n    this.outroChildren += 1;\n  }\n\n  checkStart() {\n    if (this.parent && this.parent.started) this.start();\n  }\n\n  decrementOutros() {\n    this.outroChildren -= 1;\n    check(this);\n  }\n\n  decrementTotal() {\n    this.totalChildren -= 1;\n    check(this);\n  }\n\n  detachNodes() {\n    let len = this.detachQueue.length;\n    for (let i = 0; i < len; i++) this.detachQueue[i].detach();\n    len = this.children.length;\n    for (let i = 0; i < len; i++) this.children[i].detachNodes();\n    this.detachQueue = [];\n  }\n\n  ready() {\n    if (this.detachQueue.length) detachImmediate(this);\n  }\n\n  remove(transition) {\n    const list = transition.isIntro ? this.intros : this.outros;\n    removeFromArray(list, transition);\n    check(this);\n  }\n\n  start() {\n    this.started = true;\n    this.children.forEach(c => c.start());\n    this.intros.concat(this.outros).forEach(t => t.start());\n    check(this);\n  }\n}\n\nfunction check(tm) {\n  if (!tm.started || tm.outros.length || tm.outroChildren) return;\n\n  // If all outros are complete, and we haven't already done this,\n  // we notify the parent if there is one, otherwise\n  // start detaching nodes\n  if (!tm.outrosComplete) {\n    tm.outrosComplete = true;\n\n    if (tm.parent) tm.parent.decrementOutros(tm);\n\n    if (!tm.parent || tm.parent.outrosComplete) {\n      tm.detachNodes();\n    }\n  }\n\n  // Once everything is done, we can notify parent transition\n  // manager and call the callback\n  if (!tm.intros.length && !tm.totalChildren) {\n    if (isFunction(tm.callback)) {\n      tm.callback();\n    }\n\n    if (tm.parent && !tm.notifiedTotal) {\n      tm.notifiedTotal = true;\n      tm.parent.decrementTotal();\n    }\n  }\n}\n\n// check through the detach queue to see if a node is up or downstream from a\n// transition and if not, go ahead and detach it\nfunction detachImmediate(manager) {\n  const queue = manager.detachQueue;\n  const outros = collectAllOutros(manager);\n\n  if (!outros.length) {\n    manager.detachNodes();\n  } else {\n    let i = queue.length;\n    let j = 0;\n    let node, trans;\n    const nqueue = (manager.detachQueue = []);\n\n    start: while (i--) {\n      node = queue[i].node;\n      j = outros.length;\n      while (j--) {\n        trans = outros[j].element.node;\n        // check to see if the node is, contains, or is contained by the transitioning node\n        if (trans === node || trans.contains(node) || node.contains(trans)) {\n          nqueue.push(queue[i]);\n          continue start;\n        }\n      }\n\n      // no match, we can drop it\n      queue[i].detach();\n    }\n  }\n}\n\nfunction collectAllOutros(manager, _list) {\n  let list = _list;\n\n  // if there's no list, we're starting at the root to build one\n  if (!list) {\n    list = [];\n    let parent = manager;\n    while (parent.parent) parent = parent.parent;\n    return collectAllOutros(parent, list);\n  } else {\n    // grab all outros from child managers\n    let i = manager.children.length;\n    while (i--) {\n      list = collectAllOutros(manager.children[i], list);\n    }\n\n    // grab any from this manager if there are any\n    if (manager.outros.length) list = list.concat(manager.outros);\n\n    return list;\n  }\n}\n"",""import { addToArray } from 'utils/array';\nimport TransitionManager from './TransitionManager';\n\nlet batch;\n\nconst runloop = {\n  active() {\n    return !!batch;\n  },\n\n  start() {\n    let fulfilPromise;\n    const promise = new Promise(f => (fulfilPromise = f));\n\n    batch = {\n      previousBatch: batch,\n      transitionManager: new TransitionManager(fulfilPromise, batch && batch.transitionManager),\n      fragments: [],\n      tasks: [],\n      immediateObservers: [],\n      deferredObservers: [],\n      promise\n    };\n\n    return promise;\n  },\n\n  end() {\n    flushChanges();\n\n    if (!batch.previousBatch) batch.transitionManager.start();\n    else batch.transitionManager.checkStart();\n\n    batch = batch.previousBatch;\n  },\n\n  addFragment(fragment) {\n    addToArray(batch.fragments, fragment);\n  },\n\n  // TODO: come up with a better way to handle fragments that trigger their own update\n  addFragmentToRoot(fragment) {\n    if (!batch) return;\n\n    let b = batch;\n    while (b.previousBatch) {\n      b = b.previousBatch;\n    }\n\n    addToArray(b.fragments, fragment);\n  },\n\n  addObserver(observer, defer) {\n    if (!batch) {\n      observer.dispatch();\n    } else {\n      addToArray(defer ? batch.deferredObservers : batch.immediateObservers, observer);\n    }\n  },\n\n  registerTransition(transition) {\n    transition._manager = batch.transitionManager;\n    batch.transitionManager.add(transition);\n  },\n\n  // synchronise node detachments with transition ends\n  detachWhenReady(thing) {\n    batch.transitionManager.detachQueue.push(thing);\n  },\n\n  scheduleTask(task, postRender) {\n    let _batch;\n\n    if (!batch) {\n      task();\n    } else {\n      _batch = batch;\n      while (postRender && _batch.previousBatch) {\n        // this can't happen until the DOM has been fully updated\n        // otherwise in some situations (with components inside elements)\n        // transitions and decorators will initialise prematurely\n        _batch = _batch.previousBatch;\n      }\n\n      _batch.tasks.push(task);\n    }\n  },\n\n  promise() {\n    if (!batch) return Promise.resolve();\n\n    let target = batch;\n    while (target.previousBatch) {\n      target = target.previousBatch;\n    }\n\n    return target.promise || Promise.resolve();\n  }\n};\n\nexport default runloop;\n\nfunction dispatch(observer) {\n  observer.dispatch();\n}\n\nfunction flushChanges() {\n  let which = batch.immediateObservers;\n  batch.immediateObservers = [];\n  which.forEach(dispatch);\n\n  // Now that changes have been fully propagated, we can update the DOM\n  // and complete other tasks\n  let i = batch.fragments.length;\n  let fragment;\n\n  which = batch.fragments;\n  batch.fragments = [];\n\n  while (i--) {\n    fragment = which[i];\n    fragment.update();\n  }\n\n  batch.transitionManager.ready();\n\n  which = batch.deferredObservers;\n  batch.deferredObservers = [];\n  which.forEach(dispatch);\n\n  const tasks = batch.tasks;\n  batch.tasks = [];\n\n  for (i = 0; i < tasks.length; i += 1) {\n    tasks[i]();\n  }\n\n  // If updating the view caused some model blowback - e.g. a triple\n  // containing <option> elements caused the binding on the <select>\n  // to update - then we start over\n  if (\n    batch.fragments.length ||\n    batch.immediateObservers.length ||\n    batch.deferredObservers.length ||\n    batch.tasks.length\n  )\n    return flushChanges();\n}\n"",""import runloop from 'src/global/runloop';\n\n// TODO what happens if a transition is aborted?\n\nconst tickers = [];\nlet running = false;\n\nfunction tick() {\n  runloop.start();\n\n  const now = performance.now();\n\n  let i;\n  let ticker;\n\n  for (i = 0; i < tickers.length; i += 1) {\n    ticker = tickers[i];\n\n    if (!ticker.tick(now)) {\n      // ticker is complete, remove it from the stack, and decrement i so we don't miss one\n      tickers.splice(i--, 1);\n    }\n  }\n\n  runloop.end();\n\n  if (tickers.length) {\n    requestAnimationFrame(tick);\n  } else {\n    running = false;\n  }\n}\n\nexport default class Ticker {\n  constructor(options) {\n    this.duration = options.duration;\n    this.step = options.step;\n    this.complete = options.complete;\n    this.easing = options.easing;\n\n    this.start = performance.now();\n    this.end = this.start + this.duration;\n\n    this.running = true;\n\n    tickers.push(this);\n    if (!running) requestAnimationFrame(tick);\n  }\n\n  tick(now) {\n    if (!this.running) return false;\n\n    if (now > this.end) {\n      if (this.step) this.step(1);\n      if (this.complete) this.complete(1);\n\n      return false;\n    }\n\n    const elapsed = now - this.start;\n    const eased = this.easing(elapsed / this.duration);\n\n    if (this.step) this.step(eased);\n\n    return true;\n  }\n\n  stop() {\n    if (this.abort) this.abort();\n    this.running = false;\n  }\n}\n"",""import { hasOwn } from 'utils/object';\nimport { isString, isObjectType } from 'utils/is';\n\nconst prefixers = {};\n\n// TODO this is legacy. sooner we can replace the old adaptor API the better\n/* istanbul ignore next */\nfunction prefixKeypath(obj, prefix) {\n  const prefixed = {};\n\n  if (!prefix) {\n    return obj;\n  }\n\n  prefix += '.';\n\n  for (const key in obj) {\n    if (hasOwn(obj, key)) {\n      prefixed[prefix + key] = obj[key];\n    }\n  }\n\n  return prefixed;\n}\n\nexport default function getPrefixer(rootKeypath) {\n  let rootDot;\n\n  if (!prefixers[rootKeypath]) {\n    rootDot = rootKeypath ? rootKeypath + '.' : '';\n\n    /* istanbul ignore next */\n    prefixers[rootKeypath] = function(relativeKeypath, value) {\n      let obj;\n\n      if (isString(relativeKeypath)) {\n        obj = {};\n        obj[rootDot + relativeKeypath] = value;\n        return obj;\n      }\n\n      if (isObjectType(relativeKeypath)) {\n        // 'relativeKeypath' is in fact a hash, not a keypath\n        return rootDot ? prefixKeypath(relativeKeypath, rootKeypath) : relativeKeypath;\n      }\n    };\n  }\n\n  return prefixers[rootKeypath];\n}\n"",""import ModelBase, { maybeBind, shuffle } from './ModelBase';\nimport LinkModel from './LinkModel'; // eslint-disable-line no-unused-vars\nimport getComputationSignature from 'src/Ractive/helpers/getComputationSignature';\nimport { capture } from 'src/global/capture';\nimport { isArray, isEqual, isNumeric, isObjectLike } from 'utils/is';\nimport { handleChange, mark, markForce, marked, teardown } from 'shared/methodCallers';\nimport Ticker from 'shared/Ticker';\nimport getPrefixer from './helpers/getPrefixer';\nimport { unescapeKey } from 'shared/keypaths';\nimport { warnIfDebug } from 'utils/log';\nimport { hasOwn, keys } from 'utils/object';\nimport { buildNewIndices } from 'utils/array';\n\nexport const shared = {};\n\nexport default class Model extends ModelBase {\n  constructor(parent, key) {\n    super(parent);\n\n    this.ticker = null;\n\n    if (parent) {\n      this.key = unescapeKey(key);\n      this.isReadonly = parent.isReadonly;\n\n      if (parent.value) {\n        this.value = parent.value[this.key];\n        if (isArray(this.value)) this.length = this.value.length;\n        this.adapt();\n      }\n    }\n  }\n\n  adapt() {\n    const adaptors = this.root.adaptors;\n    const len = adaptors.length;\n\n    this.rewrap = false;\n\n    // Exit early if no adaptors\n    if (len === 0) return;\n\n    const value = this.wrapper\n      ? 'newWrapperValue' in this\n        ? this.newWrapperValue\n        : this.wrapperValue\n      : this.value;\n\n    // TODO remove this legacy nonsense\n    const ractive = this.root.ractive;\n    const keypath = this.getKeypath();\n\n    // tear previous adaptor down if present\n    if (this.wrapper) {\n      const shouldTeardown =\n        this.wrapperValue === value\n          ? false\n          : !this.wrapper.reset || this.wrapper.reset(value) === false;\n\n      if (shouldTeardown) {\n        this.wrapper.teardown();\n        delete this.wrapper;\n        delete this.wrapperValue;\n        delete this.newWrapperValue;\n\n        // don't branch for undefined values\n        if (this.value !== undefined) {\n          const parentValue = this.parent.value || this.parent.createBranch(this.key);\n          if (parentValue[this.key] !== value) parentValue[this.key] = value;\n          this.value = value;\n        }\n      } else {\n        delete this.newWrapperValue;\n        this.value = this.wrapper.get();\n        return;\n      }\n    }\n\n    let i;\n\n    for (i = 0; i < len; i += 1) {\n      const adaptor = adaptors[i];\n      if (adaptor.filter(value, keypath, ractive)) {\n        this.wrapper = adaptor.wrap(ractive, value, keypath, getPrefixer(keypath));\n        this.wrapperValue = value;\n        this.wrapper.__model = this; // massive temporary hack to enable array adaptor\n\n        this.value = this.wrapper.get();\n\n        break;\n      }\n    }\n  }\n\n  animate(from, to, options, interpolator) {\n    if (this.ticker) this.ticker.stop();\n\n    let fulfilPromise;\n    const promise = new Promise(fulfil => (fulfilPromise = fulfil));\n\n    this.ticker = new Ticker({\n      duration: options.duration,\n      easing: options.easing,\n      step: t => {\n        const value = interpolator(t);\n        this.applyValue(value);\n        if (options.step) options.step(t, value);\n      },\n      complete: () => {\n        this.applyValue(to);\n        if (options.complete) options.complete(to);\n\n        this.ticker = null;\n        fulfilPromise(to);\n      }\n    });\n\n    promise.stop = this.ticker.stop;\n    return promise;\n  }\n\n  applyValue(value, notify = true) {\n    if (isEqual(value, this.value)) return;\n    if (this.boundValue) this.boundValue = null;\n\n    if (this.parent.wrapper && this.parent.wrapper.set) {\n      this.parent.wrapper.set(this.key, value);\n      this.parent.value = this.parent.wrapper.get();\n\n      this.value = this.parent.value[this.key];\n      if (this.wrapper) this.newWrapperValue = this.value;\n      this.adapt();\n    } else if (this.wrapper) {\n      this.newWrapperValue = value;\n      this.adapt();\n    } else {\n      const parentValue = this.parent.value || this.parent.createBranch(this.key);\n      if (isObjectLike(parentValue)) {\n        parentValue[this.key] = value;\n      } else {\n        warnIfDebug(`Attempted to set a property of a non-object '${this.getKeypath()}'`);\n        return;\n      }\n\n      this.value = value;\n      this.adapt();\n    }\n\n    // keep track of array stuff\n    if (isArray(value)) {\n      this.length = value.length;\n      this.isArray = true;\n    } else {\n      this.isArray = false;\n    }\n\n    // notify dependants\n    this.links.forEach(handleChange);\n    this.children.forEach(mark);\n    this.deps.forEach(handleChange);\n\n    if (notify) this.notifyUpstream();\n\n    if (this.parent.isArray) {\n      if (this.key === 'length') this.parent.length = value;\n      else this.parent.joinKey('length').mark();\n    }\n  }\n\n  compute(key, computed) {\n    const registry = this.computed || (this.computed = {});\n\n    if (registry[key]) {\n      registry[key].signature = getComputationSignature(this.root.ractive, key, computed);\n      registry[key].mark();\n    } else {\n      registry[key] = new shared.Computation(\n        this,\n        getComputationSignature(this.root.ractive, key, computed),\n        key\n      );\n    }\n\n    return registry[key];\n  }\n\n  createBranch(key) {\n    const branch = isNumeric(key) ? [] : {};\n    this.applyValue(branch, false);\n\n    return branch;\n  }\n\n  get(shouldCapture, opts) {\n    if (this._link) return this._link.get(shouldCapture, opts);\n    if (shouldCapture) capture(this);\n    // if capturing, this value needs to be unwrapped because it's for external use\n    if (opts && opts.virtual) return this.getVirtual(false);\n    return maybeBind(\n      this,\n      (opts && 'unwrap' in opts ? opts.unwrap !== false : shouldCapture) && this.wrapper\n        ? this.wrapperValue\n        : this.value,\n      !opts || opts.shouldBind !== false\n    );\n  }\n\n  joinKey(key, opts) {\n    if (this._link) {\n      if (opts && opts.lastLink !== false && (key === undefined || key === '')) return this;\n      return this._link.joinKey(key);\n    }\n\n    if (key === undefined || key === '') return this;\n\n    let child;\n    if (hasOwn(this.childByKey, key)) child = this.childByKey[key];\n    else child = this.computed && this.computed[key];\n\n    if (!child) {\n      let computed;\n      if (this.isRoot && this.ractive && (computed = this.ractive.computed[key])) {\n        child = this.compute(key, computed);\n      } else if (!this.isRoot && this.root.ractive) {\n        const registry = this.root.ractive.computed;\n        for (const k in registry) {\n          computed = registry[k];\n          if (computed.pattern && computed.pattern.test(this.getKeypath() + '.' + key)) {\n            child = this.compute(key, computed);\n          }\n        }\n      }\n    }\n\n    if (!child) {\n      child = new Model(this, key);\n      this.children.push(child);\n      this.childByKey[key] = child;\n    }\n\n    if (child._link && (!opts || opts.lastLink !== false)) return child._link;\n\n    return child;\n  }\n\n  mark(force) {\n    if (this._link) return this._link.mark(force);\n\n    const old = this.value;\n    const value = this.retrieve();\n\n    if (force || !isEqual(value, old)) {\n      this.value = value;\n      if (this.boundValue) this.boundValue = null;\n\n      // make sure the wrapper stays in sync\n      if (old !== value || this.rewrap) {\n        if (this.wrapper) this.newWrapperValue = value;\n        this.adapt();\n      }\n\n      // keep track of array stuff\n      if (isArray(value)) {\n        this.length = value.length;\n        this.isArray = true;\n      } else {\n        this.isArray = false;\n      }\n\n      this.children.forEach(force ? markForce : mark);\n      this.links.forEach(marked);\n\n      this.deps.forEach(handleChange);\n    }\n  }\n\n  merge(array, comparator) {\n    const newIndices = buildNewIndices(\n      this.value === array ? recreateArray(this) : this.value,\n      array,\n      comparator\n    );\n    this.parent.value[this.key] = array;\n    this.shuffle(newIndices, true);\n  }\n\n  retrieve() {\n    return this.parent.value ? this.parent.value[this.key] : undefined;\n  }\n\n  set(value) {\n    if (this.ticker) this.ticker.stop();\n    this.applyValue(value);\n  }\n\n  shuffle(newIndices, unsafe) {\n    shuffle(this, newIndices, false, unsafe);\n  }\n\n  source() {\n    return this;\n  }\n\n  teardown() {\n    if (this._link) {\n      this._link.teardown();\n      this._link = null;\n    }\n    this.children.forEach(teardown);\n    if (this.wrapper) this.wrapper.teardown();\n    if (this.computed) keys(this.computed).forEach(k => this.computed[k].teardown());\n  }\n}\n\nfunction recreateArray(model) {\n  const array = [];\n\n  for (let i = 0; i < model.length; i++) {\n    array[i] = (model.childByKey[i] || {}).value;\n  }\n\n  return array;\n}\n"",""/* global global */\nimport Model from '../Model';\nimport { base } from 'config/environment';\n\nexport const data = {};\n\nexport class SharedModel extends Model {\n  constructor(value, name, ractive) {\n    super(null, `@${name}`);\n    this.key = `@${name}`;\n    this.value = value;\n    this.isRoot = true;\n    this.root = this;\n    this.adaptors = [];\n    this.ractive = ractive;\n  }\n\n  getKeypath() {\n    return this.key;\n  }\n\n  retrieve() {\n    return this.value;\n  }\n}\n\nexport default new SharedModel(data, 'shared');\n\nexport const GlobalModel = new SharedModel(base, 'global');\n"",""import noop from 'utils/noop';\nimport { assign, create } from 'utils/object';\n\nexport const extern = {};\n\nexport default function getRactiveContext(ractive, ...assigns) {\n  const fragment =\n    ractive.fragment ||\n    ractive._fakeFragment ||\n    (ractive._fakeFragment = new FakeFragment(ractive));\n  return fragment.getContext.apply(fragment, assigns);\n}\n\nexport function getContext(...assigns) {\n  if (!this.ctx) this.ctx = new extern.Context(this);\n  assigns.unshift(create(this.ctx));\n  return assign.apply(null, assigns);\n}\n\nexport class FakeFragment {\n  constructor(ractive) {\n    this.ractive = ractive;\n  }\n\n  findContext() {\n    return this.ractive.viewmodel;\n  }\n}\nconst proto = FakeFragment.prototype;\nproto.getContext = getContext;\nproto.find = proto.findComponent = proto.findAll = proto.findAllComponents = noop;\n\nexport function findParentWithContext(fragment) {\n  let frag = fragment;\n  while (frag && !frag.context) frag = frag.parent;\n  if (!frag) return fragment && fragment.ractive.fragment;\n  else return frag;\n}\n"",""import { isArray, isObject, isObjectType, isFunction, isString } from 'utils/is';\nimport { warnIfDebug } from 'utils/log';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport runloop from '../global/runloop';\nimport { splitKeypath } from './keypaths';\nimport { FakeFragment } from './getRactiveContext';\nimport { hasOwn } from 'utils/object';\n\nexport let keep = false;\n\nexport function set(pairs, options) {\n  const k = keep;\n\n  const deep = options && options.deep;\n  const shuffle = options && options.shuffle;\n  const promise = runloop.start();\n  if (options && 'keep' in options) keep = options.keep;\n\n  let i = pairs.length;\n  while (i--) {\n    const model = pairs[i][0];\n    const value = pairs[i][1];\n    const keypath = pairs[i][2];\n\n    if (!model) {\n      runloop.end();\n      throw new Error(`Failed to set invalid keypath '${keypath}'`);\n    }\n\n    if (deep) deepSet(model, value);\n    else if (shuffle) {\n      let array = value;\n      const target = model.get();\n      // shuffle target array with itself\n      if (!array) array = target;\n\n      // if there's not an array there yet, go ahead and set\n      if (target === undefined) {\n        model.set(array);\n      } else {\n        if (!isArray(target) || !isArray(array)) {\n          runloop.end();\n          throw new Error('You cannot merge an array with a non-array');\n        }\n\n        const comparator = getComparator(shuffle);\n        model.merge(array, comparator);\n      }\n    } else model.set(value);\n  }\n\n  runloop.end();\n\n  keep = k;\n\n  return promise;\n}\n\nconst star = /\\*/;\nexport function gather(ractive, keypath, base, isolated) {\n  if (!base && (keypath[0] === '.' || keypath[1] === '^')) {\n    warnIfDebug(\n      `Attempted to set a relative keypath from a non-relative context. You can use a context object to set relative keypaths.`\n    );\n    return [];\n  }\n\n  const keys = splitKeypath(keypath);\n  const model = base || ractive.viewmodel;\n\n  if (star.test(keypath)) {\n    return model.findMatches(keys);\n  } else {\n    if (model === ractive.viewmodel) {\n      // allow implicit mappings\n      if (\n        ractive.component &&\n        !ractive.isolated &&\n        !model.has(keys[0]) &&\n        keypath[0] !== '@' &&\n        keypath[0] &&\n        !isolated\n      ) {\n        return [resolveReference(ractive.fragment || new FakeFragment(ractive), keypath)];\n      } else {\n        return [model.joinAll(keys)];\n      }\n    } else {\n      return [model.joinAll(keys)];\n    }\n  }\n}\n\nexport function build(ractive, keypath, value, isolated) {\n  const sets = [];\n\n  // set multiple keypaths in one go\n  if (isObject(keypath)) {\n    for (const k in keypath) {\n      if (hasOwn(keypath, k)) {\n        sets.push.apply(sets, gather(ractive, k, null, isolated).map(m => [m, keypath[k], k]));\n      }\n    }\n  } else {\n    // set a single keypath\n    sets.push.apply(sets, gather(ractive, keypath, null, isolated).map(m => [m, value, keypath]));\n  }\n\n  return sets;\n}\n\nconst deepOpts = { virtual: false };\nfunction deepSet(model, value) {\n  const dest = model.get(false, deepOpts);\n\n  // if dest doesn't exist, just set it\n  if (dest == null || !isObjectType(value)) return model.set(value);\n  if (!isObjectType(dest)) return model.set(value);\n\n  for (const k in value) {\n    if (hasOwn(value, k)) {\n      deepSet(model.joinKey(k), value[k]);\n    }\n  }\n}\n\nconst comparators = {};\nfunction getComparator(option) {\n  if (option === true) return null; // use existing arrays\n  if (isFunction(option)) return option;\n\n  if (isString(option)) {\n    return comparators[option] || (comparators[option] = thing => thing[option]);\n  }\n\n  throw new Error('If supplied, options.compare must be a string, function, or true'); // TODO link to docs\n}\n"",""import { isNumeric, isString } from 'utils/is';\nimport { build, set } from 'shared/set';\n\nconst errorMessage = 'Cannot add to a non-numeric value';\n\nexport default function add(ractive, keypath, d, options) {\n  if (!isString(keypath) || !isNumeric(d)) {\n    throw new Error('Bad arguments');\n  }\n\n  const sets = build(ractive, keypath, d, options && options.isolated);\n\n  return set(\n    sets.map(pair => {\n      const [model, add] = pair;\n      const value = model.get();\n      if (!isNumeric(add) || !isNumeric(value)) throw new Error(errorMessage);\n      return [model, value + add];\n    })\n  );\n}\n"",""import runloop from 'src/global/runloop';\nimport easing from 'src/Ractive/static/easing';\nimport interpolate from 'shared/interpolate';\nimport { isEqual, isFunction, isObjectType } from 'utils/is';\nimport noop from 'utils/noop';\nimport { splitKeypath } from 'shared/keypaths';\nimport { defineProperty, keys as objectKeys } from 'utils/object';\n\nfunction immediate(value) {\n  const result = Promise.resolve(value);\n  defineProperty(result, 'stop', { value: noop });\n  return result;\n}\n\nconst linear = easing.linear;\n\nfunction getOptions(options, instance) {\n  options = options || {};\n\n  let easing;\n  if (options.easing) {\n    easing = isFunction(options.easing) ? options.easing : instance.easing[options.easing];\n  }\n\n  return {\n    easing: easing || linear,\n    duration: 'duration' in options ? options.duration : 400,\n    complete: options.complete || noop,\n    step: options.step || noop,\n    interpolator: options.interpolator\n  };\n}\n\nexport function animate(ractive, model, to, options) {\n  options = getOptions(options, ractive);\n  const from = model.get();\n\n  // don't bother animating values that stay the same\n  if (isEqual(from, to)) {\n    options.complete(options.to);\n    return immediate(to);\n  }\n\n  const interpolator = interpolate(from, to, ractive, options.interpolator);\n\n  // if we can't interpolate the value, set it immediately\n  if (!interpolator) {\n    runloop.start();\n    model.set(to);\n    runloop.end();\n\n    return immediate(to);\n  }\n\n  return model.animate(from, to, options, interpolator);\n}\n\nexport default function Ractive$animate(keypath, to, options) {\n  if (isObjectType(keypath)) {\n    const keys = objectKeys(keypath);\n\n    throw new Error(`ractive.animate(...) no longer supports objects. Instead of ractive.animate({\n  ${keys.map(key => `'${key}': ${keypath[key]}`).join('\\n  ')}\n}, {...}), do\n\n${keys.map(key => `ractive.animate('${key}', ${keypath[key]}, {...});`).join('\\n')}\n`);\n  }\n\n  return animate(this, this.viewmodel.joinAll(splitKeypath(keypath)), to, options);\n}\n"",""import { enqueue, dequeue } from './eventStack';\n\nconst initStars = {};\nconst bubbleStars = {};\n\n// cartesian product of name parts and stars\n// adjusted appropriately for special cases\nfunction variants(name, initial) {\n  const map = initial ? initStars : bubbleStars;\n  if (map[name]) return map[name];\n\n  const parts = name.split('.');\n  const result = [];\n  let base = false;\n\n  // initial events the implicit namespace of 'this'\n  if (initial) {\n    parts.unshift('this');\n    base = true;\n  }\n\n  // use max - 1 bits as a bitmap to pick a part or a *\n  // need to skip the full star case if the namespace is synthetic\n  const max = Math.pow(2, parts.length) - (initial ? 1 : 0);\n  for (let i = 0; i < max; i++) {\n    const join = [];\n    for (let j = 0; j < parts.length; j++) {\n      join.push(1 & (i >> j) ? '*' : parts[j]);\n    }\n    result.unshift(join.join('.'));\n  }\n\n  if (base) {\n    // include non-this-namespaced versions\n    if (parts.length > 2) {\n      result.push.apply(result, variants(name, false));\n    } else {\n      result.push('*');\n      result.push(name);\n    }\n  }\n\n  map[name] = result;\n  return result;\n}\n\nexport default function fireEvent(ractive, eventName, context, args = []) {\n  if (!eventName) {\n    return;\n  }\n\n  context.name = eventName;\n  args.unshift(context);\n\n  const eventNames = ractive._nsSubs ? variants(eventName, true) : ['*', eventName];\n\n  return fireEventAs(ractive, eventNames, context, args, true);\n}\n\nfunction fireEventAs(ractive, eventNames, context, args, initialFire = false) {\n  let bubble = true;\n\n  if (initialFire || ractive._nsSubs) {\n    enqueue(ractive, context);\n\n    let i = eventNames.length;\n    while (i--) {\n      if (eventNames[i] in ractive._subs) {\n        bubble = notifySubscribers(ractive, ractive._subs[eventNames[i]], context, args) && bubble;\n      }\n    }\n\n    dequeue(ractive);\n  }\n\n  if (ractive.parent && bubble) {\n    if (initialFire && ractive.component) {\n      const fullName = ractive.component.name + '.' + eventNames[eventNames.length - 1];\n      eventNames = variants(fullName, false);\n\n      if (context && !context.component) {\n        context.component = ractive;\n      }\n    }\n\n    bubble = fireEventAs(ractive.parent, eventNames, context, args);\n  }\n\n  return bubble;\n}\n\nfunction notifySubscribers(ractive, subscribers, context, args) {\n  let originalEvent = null;\n  let stopEvent = false;\n\n  // subscribers can be modified inflight, e.g. \""once\"" functionality\n  // so we need to copy to make sure everyone gets called\n  subscribers = subscribers.slice();\n\n  for (let i = 0, len = subscribers.length; i < len; i += 1) {\n    if (!subscribers[i].off && subscribers[i].handler.apply(ractive, args) === false) {\n      stopEvent = true;\n    }\n  }\n\n  if (context && stopEvent && (originalEvent = context.event)) {\n    originalEvent.preventDefault && originalEvent.preventDefault();\n    originalEvent.stopPropagation && originalEvent.stopPropagation();\n  }\n\n  return !stopEvent;\n}\n"",""import fireEvent from './fireEvent';\nimport getRactiveContext from '../shared/getRactiveContext';\n\nexport class Hook {\n  constructor(event) {\n    this.event = event;\n    this.method = 'on' + event;\n  }\n\n  fire(ractive, arg) {\n    const context = getRactiveContext(ractive);\n    const method = this.method;\n\n    if (ractive[method]) {\n      arg ? ractive[method](context, arg) : ractive[method](context);\n    }\n\n    fireEvent(ractive, this.event, context, arg ? [arg, ractive] : [ractive]);\n  }\n}\n\nfunction getChildQueue(queue, ractive) {\n  return queue[ractive._guid] || (queue[ractive._guid] = []);\n}\n\nfunction fire(hookQueue, ractive) {\n  const childQueue = getChildQueue(hookQueue.queue, ractive);\n\n  hookQueue.hook.fire(ractive);\n\n  // queue is \""live\"" because components can end up being\n  // added while hooks fire on parents that modify data values.\n  while (childQueue.length) {\n    fire(hookQueue, childQueue.shift());\n  }\n\n  delete hookQueue.queue[ractive._guid];\n}\n\nexport class HookQueue {\n  constructor(event) {\n    this.hook = new Hook(event);\n    this.inProcess = {};\n    this.queue = {};\n  }\n\n  begin(ractive) {\n    this.inProcess[ractive._guid] = true;\n  }\n\n  end(ractive) {\n    const parent = ractive.parent;\n\n    // If this is *isn't* a child of a component that's in process,\n    // it should call methods or fire at this point\n    if (!parent || !this.inProcess[parent._guid]) {\n      fire(this, ractive);\n    } else {\n      // elsewise, handoff to parent to fire when ready\n      getChildQueue(this.queue, parent).push(ractive);\n    }\n\n    delete this.inProcess[ractive._guid];\n  }\n}\n\nconst hooks = {};\n[\n  'construct',\n  'config',\n  'attachchild',\n  'detach',\n  'detachchild',\n  'insert',\n  'complete',\n  'reset',\n  'render',\n  'unrendering',\n  'unrender',\n  'teardown',\n  'destruct',\n  'update'\n].forEach(hook => {\n  hooks[hook] = new Hook(hook);\n});\nhooks.init = new HookQueue('init');\n\nexport default hooks;\n"",""import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\nimport getNewIndices from 'shared/getNewIndices';\nimport { isArray } from 'utils/is';\n\nconst arrayProto = Array.prototype;\n\nexport default function(methodName) {\n  function path(keypath, ...args) {\n    return model(this.viewmodel.joinAll(splitKeypath(keypath)), args);\n  }\n\n  function model(mdl, args) {\n    let array = mdl.get();\n\n    if (!isArray(array)) {\n      if (array === undefined) {\n        array = [];\n        const result = arrayProto[methodName].apply(array, args);\n        const promise = runloop.start().then(() => result);\n        mdl.set(array);\n        runloop.end();\n        return promise;\n      } else {\n        throw new Error(\n          `shuffle array method ${methodName} called on non-array at ${mdl.getKeypath()}`\n        );\n      }\n    }\n\n    const newIndices = getNewIndices(array.length, methodName, args);\n    const result = arrayProto[methodName].apply(array, args);\n\n    const promise = runloop.start().then(() => result);\n    promise.result = result;\n\n    if (newIndices) {\n      if (mdl.shuffle) {\n        mdl.shuffle(newIndices);\n      } else {\n        // it's a computation, which don't have a shuffle, so just invalidate\n        mdl.mark();\n      }\n    } else {\n      mdl.set(result);\n    }\n\n    runloop.end();\n\n    return promise;\n  }\n\n  return { path, model };\n}\n"",""import { create, toPairs } from 'utils/object';\nimport { isFunction, isObjectType } from 'utils/is';\n\nexport default function subscribe(instance, options, type) {\n  const subs = (instance.constructor[`_${type}`] || []).concat(toPairs(options[type] || []));\n  const single = type === 'on' ? 'once' : `${type}Once`;\n\n  subs.forEach(([target, config]) => {\n    if (isFunction(config)) {\n      instance[type](target, config);\n    } else if (isObjectType(config) && isFunction(config.handler)) {\n      instance[config.once ? single : type](target, config.handler, create(config));\n    }\n  });\n}\n"",""import getFunction from 'shared/getFunction';\nimport resolveReference from '../../resolvers/resolveReference';\n\nexport function setupArgsFn(item, template, fragment, opts = {}) {\n  if (template && template.f && template.f.s) {\n    item.fn = getFunction(template.f.s, template.f.r.length);\n    if (opts.register === true) {\n      item.models = resolveArgs(item, template, fragment, opts);\n    }\n  }\n}\n\nexport function resolveArgs(item, template, fragment, opts = {}) {\n  return template.f.r.map((ref, i) => {\n    let model;\n\n    if (opts.specialRef && (model = opts.specialRef(ref, i))) return model;\n\n    model = resolveReference(fragment, ref);\n    if (opts.register === true) {\n      model.register(item);\n    }\n\n    return model;\n  });\n}\n\nexport function teardownArgsFn(item, template) {\n  if (template && template.f && template.f.s) {\n    if (item.models)\n      item.models.forEach(m => {\n        if (m && m.unregister) m.unregister(item);\n      });\n    item.models = null;\n  }\n}\n"",""// This is the handler for DOM events that would lead to a change in the model\n// (i.e. change, sometimes, input, and occasionally click and keyup)\nexport default function handleDomEvent() {\n  this._ractive.binding.handleChange();\n}\n"",""import { toArray } from './array';\n\nexport default function getSelectedOptions(select) {\n  /* istanbul ignore next */\n  return select.selectedOptions\n    ? toArray(select.selectedOptions)\n    : select.options\n    ? toArray(select.options).filter(option => option.selected)\n    : [];\n}\n"",""import { INTERPOLATOR, TRIPLE } from 'config/types';\nimport { warnIfDebug } from 'utils/log';\nimport CheckboxBinding from './CheckboxBinding';\nimport CheckboxNameBinding from './CheckboxNameBinding';\nimport ContentEditableBinding from './ContentEditableBinding';\nimport FileBinding from './FileBinding';\nimport GenericBinding from './GenericBinding';\nimport MultipleSelectBinding from './MultipleSelectBinding';\nimport NumericBinding from './NumericBinding';\nimport RadioBinding from './RadioBinding';\nimport RadioNameBinding from './RadioNameBinding';\nimport SingleSelectBinding from './SingleSelectBinding';\n\nexport function isBindable(attribute) {\n  // The fragment must be a single non-string fragment\n  if (\n    !attribute ||\n    !attribute.template.f ||\n    attribute.template.f.length !== 1 ||\n    attribute.template.f[0].s\n  )\n    return false;\n\n  // A binding is an interpolator `{{ }}`, yey.\n  if (attribute.template.f[0].t === INTERPOLATOR) return true;\n\n  // The above is probably the only true case. For the rest, show an appropriate\n  // warning before returning false.\n\n  // You can't bind a triple curly. HTML values on an attribute makes no sense.\n  if (attribute.template.f[0].t === TRIPLE)\n    warnIfDebug('It is not possible create a binding using a triple mustache.');\n\n  return false;\n}\n\nexport default function selectBinding(element) {\n  const name = element.name;\n  const attributes = element.attributeByName;\n  if (name !== 'input' && name !== 'textarea' && name !== 'select' && !attributes.contenteditable)\n    return;\n  const isBindableByValue = isBindable(attributes.value);\n  const isBindableByContentEditable = isBindable(attributes.contenteditable);\n  const isContentEditable = element.getAttribute('contenteditable');\n\n  // contenteditable\n  // Bind if the contenteditable is true or a binding that may become true.\n  if ((isContentEditable || isBindableByContentEditable) && isBindableByValue)\n    return ContentEditableBinding;\n\n  // <input>\n  if (name === 'input') {\n    const type = element.getAttribute('type');\n\n    if (type === 'radio') {\n      const isBindableByName = isBindable(attributes.name);\n      const isBindableByChecked = isBindable(attributes.checked);\n\n      // For radios we can either bind the name or checked, but not both.\n      // Name binding is handed instead.\n      if (isBindableByName && isBindableByChecked) {\n        warnIfDebug(\n          'A radio input can have two-way binding on its name attribute, or its checked attribute - not both',\n          { ractive: element.root }\n        );\n        return RadioNameBinding;\n      }\n\n      if (isBindableByName) return RadioNameBinding;\n\n      if (isBindableByChecked) return RadioBinding;\n\n      // Dead end. Unknown binding on radio input.\n      return null;\n    }\n\n    if (type === 'checkbox') {\n      const isBindableByName = isBindable(attributes.name);\n      const isBindableByChecked = isBindable(attributes.checked);\n\n      // A checkbox with bindings for both name and checked. Checked treated as\n      // the checkbox value, name is treated as a regular binding.\n      //\n      // See https://github.com/ractivejs/ractive/issues/1749\n      if (isBindableByName && isBindableByChecked) return CheckboxBinding;\n\n      if (isBindableByName) return CheckboxNameBinding;\n\n      if (isBindableByChecked) return CheckboxBinding;\n\n      // Dead end. Unknown binding on checkbox input.\n      return null;\n    }\n\n    if (type === 'file' && isBindableByValue) return FileBinding;\n\n    if (type === 'number' && isBindableByValue) return NumericBinding;\n\n    if (type === 'range' && isBindableByValue) return NumericBinding;\n\n    // Some input of unknown type (browser usually falls back to text).\n    if (isBindableByValue) return GenericBinding;\n\n    // Dead end. Some unknown input and an unbindable.\n    return null;\n  }\n\n  // <select>\n  if (name === 'select' && isBindableByValue) {\n    return element.getAttribute('multiple') ? MultipleSelectBinding : SingleSelectBinding;\n  }\n\n  // <textarea>\n  if (name === 'textarea' && isBindableByValue) return GenericBinding;\n\n  // Dead end. Some unbindable element.\n  return null;\n}\n"",""import { doc } from 'config/environment';\n\nexport default function progressiveText(item, target, occupants, text) {\n  if (occupants) {\n    let n = occupants[0];\n    if (n && n.nodeType === 3) {\n      const idx = n.nodeValue.indexOf(text);\n      occupants.shift();\n\n      if (idx === 0) {\n        if (n.nodeValue.length !== text.length) {\n          occupants.unshift(n.splitText(text.length));\n        }\n      } else {\n        n.nodeValue = text;\n      }\n    } else {\n      n = item.node = doc.createTextNode(text);\n      if (occupants[0]) {\n        target.insertBefore(n, occupants[0]);\n      } else {\n        target.appendChild(n);\n      }\n    }\n\n    item.node = n;\n  } else {\n    if (!item.node) item.node = doc.createTextNode(text);\n    target.appendChild(item.node);\n  }\n}\n"",""import { noRegistryFunctionReturn } from 'config/errors';\nimport { warnIfDebug } from 'utils/log';\nimport { fillGaps, hasOwn } from 'utils/object';\nimport parser from 'src/Ractive/config/runtime-parser';\nimport { findInstance } from 'shared/registry';\nimport { isArray, isFunction } from 'utils/is';\n\nexport default function getPartialTemplate(ractive, name, up) {\n  // If the partial in instance or view heirarchy instances, great\n  let partial = getPartialFromRegistry(ractive, name, up || {});\n  if (partial) return partial;\n\n  // Does it exist on the page as a script tag?\n  partial = parser.fromId(name, { noThrow: true });\n  if (partial) {\n    // parse and register to this ractive instance\n    const parsed = parser.parseFor(partial, ractive);\n\n    // register extra partials on the ractive instance if they don't already exist\n    if (parsed.p) fillGaps(ractive.partials, parsed.p);\n\n    // register (and return main partial if there are others in the template)\n    return (ractive.partials[name] = parsed.t);\n  }\n}\n\nfunction getPartialFromRegistry(ractive, name, up) {\n  // if there was an instance up-hierarchy, cool\n  let partial = findParentPartial(name, up.owner);\n  if (partial) return partial;\n\n  // find first instance in the ractive or view hierarchy that has this partial\n  const instance = findInstance('partials', ractive, name);\n\n  if (!instance) {\n    return;\n  }\n\n  partial = instance.partials[name];\n\n  // partial is a function?\n  let fn;\n  if (isFunction(partial)) {\n    fn = partial;\n    // super partial\n    if (fn.styleSet) return fn;\n\n    fn = partial.bind(instance);\n    fn.isOwner = hasOwn(instance.partials, name);\n    partial = fn.call(ractive, parser);\n  }\n\n  if (!partial && partial !== '') {\n    warnIfDebug(noRegistryFunctionReturn, name, 'partial', 'partial', {\n      ractive\n    });\n    return;\n  }\n\n  // If this was added manually to the registry,\n  // but hasn't been parsed, parse it now\n  if (!parser.isParsed(partial)) {\n    // use the parseOptions of the ractive instance on which it was found\n    const parsed = parser.parseFor(partial, instance);\n\n    // Partials cannot contain nested partials!\n    // TODO add a test for this\n    if (parsed.p) {\n      warnIfDebug('Partials ({{>%s}}) cannot contain nested inline partials', name, { ractive });\n    }\n\n    // if fn, use instance to store result, otherwise needs to go\n    // in the correct point in prototype chain on instance or constructor\n    const target = fn ? instance : findOwner(instance, name);\n\n    // may be a template with partials, which need to be registered and main template extracted\n    target.partials[name] = partial = parsed.t;\n  }\n\n  // store for reset\n  if (fn) partial._fn = fn;\n\n  return partial.v ? partial.t : partial;\n}\n\nfunction findOwner(ractive, key) {\n  return hasOwn(ractive.partials, key) ? ractive : findConstructor(ractive.constructor, key);\n}\n\nfunction findConstructor(constructor, key) {\n  if (!constructor) {\n    return;\n  }\n  return hasOwn(constructor.partials, key) ? constructor : findConstructor(constructor.Parent, key);\n}\n\nfunction findParentPartial(name, parent) {\n  if (parent) {\n    if (\n      parent.template &&\n      parent.template.p &&\n      !isArray(parent.template.p) &&\n      hasOwn(parent.template.p, name)\n    ) {\n      return parent.template.p[name];\n    } else if (parent.up && parent.up.owner) {\n      return findParentPartial(name, parent.up.owner);\n    }\n  }\n}\n"",""import { noRegistryFunctionReturn } from 'config/errors';\nimport { warnIfDebug } from 'utils/log';\nimport { findInstance } from 'shared/registry';\nimport { hasOwn } from 'utils/object';\nimport { isFunction, isString } from 'utils/is';\n\n// finds the component constructor in the registry or view hierarchy registries\nexport default function getComponentConstructor(ractive, name) {\n  const instance = findInstance('components', ractive, name);\n  let Component;\n\n  if (instance) {\n    Component = instance.components[name];\n\n    if (Component && !Component.isInstance) {\n      if (Component.default && Component.default.isInstance) Component = Component.default;\n      else if (!Component.then && isFunction(Component)) {\n        // function option, execute and store for reset\n        const fn = Component.bind(instance);\n        fn.isOwner = hasOwn(instance.components, name);\n        Component = fn();\n\n        if (!Component) {\n          warnIfDebug(noRegistryFunctionReturn, name, 'component', 'component', {\n            ractive\n          });\n          return;\n        }\n\n        if (isString(Component)) {\n          // allow string lookup\n          Component = getComponentConstructor(ractive, Component);\n        }\n\n        Component._fn = fn;\n        instance.components[name] = Component;\n      }\n    }\n  }\n\n  return Component;\n}\n"",""import Partial from './Partial';\nimport { ELEMENT } from 'config/types';\nimport { assign } from 'utils/object';\n\nexport default function asyncProxy(promise, options) {\n  const partials = options.template.p || {};\n  const name = options.template.e;\n\n  const opts = assign({}, options, {\n    template: { t: ELEMENT, e: name },\n    macro(handle) {\n      handle.setTemplate(partials['async-loading'] || []);\n      promise.then(\n        cmp => {\n          options.up.ractive.components[name] = cmp;\n          if (partials['async-loaded']) {\n            handle.partials.component = [options.template];\n            handle.setTemplate(partials['async-loaded']);\n          } else {\n            handle.setTemplate([options.template]);\n          }\n        },\n        err => {\n          if (partials['async-failed']) {\n            handle.aliasLocal('error', 'error');\n            handle.set('@local.error', err);\n            handle.setTemplate(partials['async-failed']);\n          } else {\n            handle.setTemplate([]);\n          }\n        }\n      );\n    }\n  });\n  return new Partial(opts);\n}\n"",""import { ATTRIBUTE, CATCH, ELEMENT, ELSE, INTERPOLATOR, SECTION, THEN } from 'src/config/types';\nimport Partial from './Partial';\nimport { assign } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nfunction extract(tpl, type, name) {\n  const p = tpl.f.find(s => s.t === type);\n  if (p) {\n    if (p.n)\n      return [\n        {\n          t: 19,\n          n: 54,\n          f: p.f || [],\n          z: [{ n: p.n, x: { r: `__await.${name}` } }]\n        }\n      ];\n    else return p.f || [];\n  } else return [];\n}\n\nexport default function Await(options) {\n  const tpl = options.template;\n\n  const success = extract(tpl, THEN, 'value');\n  const error = extract(tpl, CATCH, 'error');\n  const pending = extract(tpl, SECTION);\n  const undef = extract(tpl, ELSE);\n\n  const opts = assign({}, options, {\n    template: {\n      t: ELEMENT,\n      m: [\n        {\n          t: ATTRIBUTE,\n          n: 'for',\n          f: [{ t: INTERPOLATOR, r: tpl.r, rx: tpl.rx, x: tpl.x }]\n        }\n      ]\n    },\n    macro(handle, attrs) {\n      handle.aliasLocal('__await');\n\n      function update(attrs) {\n        if (attrs.for && isFunction(attrs.for.then)) {\n          handle.setTemplate(pending);\n\n          attrs.for.then(\n            v => {\n              handle.set('@local.value', v);\n              handle.setTemplate(success);\n            },\n            e => {\n              handle.set('@local.error', e);\n              handle.setTemplate(error);\n            }\n          );\n        } else if (attrs.for === undefined) {\n          handle.setTemplate(undef);\n        } else {\n          handle.set('@local.value', attrs.for);\n          handle.setTemplate(success);\n        }\n      }\n\n      update(attrs);\n\n      return {\n        update\n      };\n    }\n  });\n\n  opts.macro.attributes = ['for'];\n\n  return new Partial(opts);\n}\n"",""import { TEXT } from 'config/types';\n\n// TODO all this code needs to die\nexport default function processItems(items, values, guid, counter = 0) {\n  return items\n    .map(item => {\n      if (item.type === TEXT) {\n        return item.template;\n      }\n\n      if (item.fragment) {\n        if (item.fragment.iterations) {\n          return item.fragment.iterations\n            .map(fragment => {\n              return processItems(fragment.items, values, guid, counter);\n            })\n            .join('');\n        } else {\n          return processItems(item.fragment.items, values, guid, counter);\n        }\n      }\n\n      const placeholderId = `${guid}-${counter++}`;\n      const model = item.model || item.newModel;\n\n      values[placeholderId] = model\n        ? model.wrapper\n          ? model.wrapperValue\n          : model.get()\n        : undefined;\n\n      return '${' + placeholderId + '}';\n    })\n    .join('');\n}\n"",""import { logIfDebug, warnIfDebug, warnOnceIfDebug } from 'utils/log';\nimport { getElement } from 'utils/dom';\nimport { isArray } from 'utils/is';\nimport config from './config/config';\nimport Fragment from 'src/view/Fragment';\nimport hooks from 'src/events/Hook';\nimport Ractive from '../Ractive';\nimport subscribe from './helpers/subscribe';\n\nexport default function initialise(ractive, userOptions, options) {\n  // initialize settable computeds\n  const computed = ractive.viewmodel.computed;\n  if (computed) {\n    for (const k in computed) {\n      if (k in ractive.viewmodel.value && computed[k] && !computed[k].isReadonly) {\n        computed[k].set(ractive.viewmodel.value[k]);\n      }\n    }\n  }\n\n  // init config from Parent and options\n  config.init(ractive.constructor, ractive, userOptions);\n\n  // call any passed in plugins\n  if (isArray(userOptions.use))\n    ractive.use.apply(ractive, userOptions.use.filter(p => !p.construct));\n\n  hooks.config.fire(ractive);\n\n  hooks.init.begin(ractive);\n\n  const fragment = (ractive.fragment = createFragment(ractive, options));\n  if (fragment) fragment.bind(ractive.viewmodel);\n\n  hooks.init.end(ractive);\n\n  // general config done, set up observers\n  subscribe(ractive, userOptions, 'observe');\n\n  if (fragment) {\n    // render automatically ( if `el` is specified )\n    const el = (ractive.el = ractive.target = getElement(ractive.el || ractive.target));\n    if (el && !ractive.component) {\n      const promise = ractive.render(el, ractive.append);\n\n      if (Ractive.DEBUG_PROMISES) {\n        promise.catch(err => {\n          warnOnceIfDebug(\n            'Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\\n  Ractive.DEBUG_PROMISES = false;'\n          );\n          warnIfDebug('An error happened during rendering', { ractive });\n          logIfDebug(err);\n\n          throw err;\n        });\n      }\n    }\n  }\n}\n\nexport function createFragment(ractive, options = {}) {\n  if (ractive.template) {\n    const cssIds = [].concat(ractive.constructor._cssIds || [], options.cssIds || []);\n\n    return new Fragment({\n      owner: ractive,\n      template: ractive.template,\n      cssIds\n    });\n  }\n}\n"",""import { doc } from 'config/environment';\nimport { applyCSS } from 'src/global/css';\nimport hooks from 'src/events/Hook';\nimport { getElement } from 'utils/dom';\nimport runloop from 'src/global/runloop';\nimport { createFragment } from './initialise';\n\nexport default function render(ractive, target, anchor, occupants) {\n  // set a flag to let any transitions know that this instance is currently rendering\n  ractive.rendering = true;\n\n  const promise = runloop.start();\n  runloop.scheduleTask(() => hooks.render.fire(ractive), true);\n\n  if (ractive.fragment.rendered) {\n    throw new Error(\n      'You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first'\n    );\n  }\n\n  if (ractive.destroyed) {\n    ractive.destroyed = false;\n    ractive.fragment = createFragment(ractive).bind(ractive.viewmodel);\n  }\n\n  anchor = getElement(anchor) || ractive.anchor;\n\n  ractive.el = ractive.target = target;\n  ractive.anchor = anchor;\n\n  // ensure encapsulated CSS is up-to-date\n  if (ractive.cssId) applyCSS();\n\n  if (target) {\n    (target.__ractive_instances__ || (target.__ractive_instances__ = [])).push(ractive);\n\n    if (anchor) {\n      const docFrag = doc.createDocumentFragment();\n      ractive.fragment.render(docFrag);\n      target.insertBefore(docFrag, anchor);\n    } else {\n      ractive.fragment.render(target, occupants);\n    }\n  }\n\n  runloop.end();\n  ractive.rendering = false;\n\n  return promise.then(() => {\n    if (ractive.torndown) return;\n\n    hooks.complete.fire(ractive);\n  });\n}\n"",""import { getElement } from 'utils/dom';\nimport { toArray } from 'utils/array';\nimport { warnIfDebug } from 'utils/log';\nimport render from '../render';\nimport { teardown } from 'shared/methodCallers';\n\nexport default function Ractive$render(target, anchor) {\n  if (this.torndown) {\n    warnIfDebug('ractive.render() was called on a Ractive instance that was already torn down');\n    return Promise.resolve();\n  }\n\n  target = getElement(target) || this.el;\n\n  if (!this.append && target) {\n    // Teardown any existing instances *before* trying to set up the new one -\n    // avoids certain weird bugs\n    const others = target.__ractive_instances__;\n    if (others) others.forEach(teardown);\n\n    // make sure we are the only occupants\n    if (!this.enhance) {\n      target.innerHTML = ''; // TODO is this quicker than removeChild? Initial research inconclusive\n    }\n  }\n\n  const occupants = this.enhance ? toArray(target.childNodes) : null;\n  const promise = render(this, target, anchor, occupants);\n\n  if (occupants) {\n    while (occupants.length) target.removeChild(occupants.pop());\n  }\n\n  return promise;\n}\n"",""import runloop from 'src/global/runloop';\nimport { PARTIAL, COMPONENT, ELEMENT } from 'config/types';\nimport { isArray } from 'utils/is';\nimport { handleChange } from 'shared/methodCallers';\n\nfunction collect(source, name, attr, dest) {\n  source.forEach(item => {\n    // queue to rerender if the item is a partial and the current name matches\n    if (item.type === PARTIAL && (item.refName === name || item.name === name)) {\n      item.inAttribute = attr;\n      dest.push(item);\n      return; // go no further\n    }\n\n    // if it has a fragment, process its items\n    if (item.fragment) {\n      collect(item.fragment.iterations || item.fragment.items, name, attr, dest);\n    } else if (isArray(item.items)) {\n      // or if it is itself a fragment, process its items\n      collect(item.items, name, attr, dest);\n    } else if (item.type === COMPONENT && item.instance) {\n      // or if it is a component, step in and process its items\n      // ...unless the partial is shadowed\n      if (item.instance.partials[name]) return;\n      collect(item.instance.fragment.items, name, attr, dest);\n    }\n\n    // if the item is an element, process its attributes too\n    if (item.type === ELEMENT) {\n      if (isArray(item.attributes)) {\n        collect(item.attributes, name, true, dest);\n      }\n    }\n  });\n}\n\nexport default function(name, partial) {\n  const collection = [];\n  collect(this.fragment.items, name, false, collection);\n\n  const promise = runloop.start();\n\n  this.partials[name] = partial;\n  collection.forEach(handleChange);\n\n  runloop.end();\n\n  return promise;\n}\n"",""import { createDocumentFragment } from 'utils/dom';\nimport Fragment from 'src/view/Fragment';\nimport runloop from 'src/global/runloop';\nimport { default as templateConfigurator } from '../config/custom/template';\n\n// TODO should resetTemplate be asynchronous? i.e. should it be a case\n// of outro, update template, intro? I reckon probably not, since that\n// could be achieved with unrender-resetTemplate-render. Also, it should\n// conceptually be similar to resetPartial, which couldn't be async\n\nexport default function Ractive$resetTemplate(template) {\n  templateConfigurator.init(null, this, { template });\n\n  const transitionsEnabled = this.transitionsEnabled;\n  this.transitionsEnabled = false;\n\n  // Is this is a component, we need to set the `shouldDestroy`\n  // flag, otherwise it will assume by default that a parent node\n  // will be detached, and therefore it doesn't need to bother\n  // detaching its own nodes\n  const component = this.component;\n  if (component) component.shouldDestroy = true;\n  this.unrender();\n  if (component) component.shouldDestroy = false;\n\n  const promise = runloop.start();\n\n  // remove existing fragment and create new one\n  this.fragment.unbind().unrender(true);\n\n  this.fragment = new Fragment({\n    template: this.template,\n    root: this,\n    owner: this\n  });\n\n  const docFrag = createDocumentFragment();\n  this.fragment.bind(this.viewmodel).render(docFrag);\n\n  // if this is a component, its el may not be valid, so find a\n  // target based on the component container\n  if (component && !component.external) {\n    this.fragment.findParentNode().insertBefore(docFrag, component.findNextNode());\n  } else {\n    this.el.insertBefore(docFrag, this.anchor);\n  }\n\n  runloop.end();\n\n  this.transitionsEnabled = transitionsEnabled;\n\n  return promise;\n}\n"",""import { build, set } from 'shared/set';\nimport { isObjectType } from 'utils/is';\n\nexport default function Ractive$set(keypath, value, options) {\n  const ractive = this;\n\n  const opts = isObjectType(keypath) ? value : options;\n\n  return set(build(ractive, keypath, value, opts && opts.isolated), opts);\n}\n"",""import add from './shared/add';\nimport { isNumber, isObjectType } from 'utils/is';\n\nexport default function Ractive$subtract(keypath, d, options) {\n  const num = isNumber(d) ? -d : -1;\n  const opts = isObjectType(d) ? d : options;\n  return add(this, keypath, num, opts);\n}\n"",""import { badArguments } from 'config/errors';\nimport { gather, set } from 'shared/set';\nimport { isString } from 'utils/is';\n\nexport default function Ractive$toggle(keypath, options) {\n  if (!isString(keypath)) {\n    throw new TypeError(badArguments);\n  }\n\n  return set(\n    gather(this, keypath, null, options && options.isolated).map(m => [m, !m.get()]),\n    options\n  );\n}\n"",""import { getCSS } from 'src/global/css';\nimport { keys } from 'utils/object';\n\nexport default function Ractive$toCSS() {\n  const cssIds = [this.cssId, ...this.findAllComponents().map(c => c.cssId)];\n  const uniqueCssIds = keys(cssIds.reduce((ids, id) => ((ids[id] = true), ids), {}));\n  return getCSS(uniqueCssIds);\n}\n"",""export default function Ractive$toHTML() {\n  return this.fragment.toString(true);\n}\n"",""export default function toText() {\n  return this.fragment.toString(false);\n}\n"",""import runloop from 'src/global/runloop';\nimport Transition from '../../view/items/element/Transition';\nimport { fatal } from 'utils/log';\nimport { isObject } from 'utils/is';\n\nexport default function Ractive$transition(name, node, params) {\n  if (node instanceof HTMLElement) {\n    // good to go\n  } else if (isObject(node)) {\n    // omitted, use event node\n    params = node;\n  }\n\n  // if we allow query selector, then it won't work\n  // simple params like \""fast\""\n\n  // else if ( typeof node === 'string' ) {\n  // \t// query selector\n  // \tnode = this.find( node )\n  // }\n\n  node = node || this.event.node;\n\n  if (!node || !node._ractive) {\n    fatal(`No node was supplied for transition ${name}`);\n  }\n\n  params = params || {};\n  const owner = node._ractive.proxy;\n  const transition = new Transition({ owner, up: owner.up, name, params });\n  transition.bind();\n\n  const promise = runloop.start();\n  runloop.registerTransition(transition);\n  runloop.end();\n\n  promise.then(() => transition.unbind());\n  return promise;\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\n\nexport default function unlink(here) {\n  const promise = runloop.start();\n  this.viewmodel.joinAll(splitKeypath(here), { lastLink: false }).unlink();\n  runloop.end();\n  return promise;\n}\n"",""import hooks from 'src/events/Hook';\nimport { warnIfDebug } from 'utils/log';\nimport { removeFromArray } from 'utils/array';\nimport runloop from 'src/global/runloop';\n\nexport default function Ractive$unrender() {\n  if (!this.fragment.rendered) {\n    warnIfDebug('ractive.unrender() was called on a Ractive instance that was not rendered');\n    return Promise.resolve();\n  }\n\n  this.unrendering = true;\n  const promise = runloop.start();\n\n  hooks.unrendering.fire(this);\n\n  // If this is a component, and the component isn't marked for destruction,\n  // don't detach nodes from the DOM unnecessarily\n  const shouldDestroy =\n    !this.component ||\n    (this.component.anchor || {}).shouldDestroy ||\n    this.component.shouldDestroy ||\n    this.shouldDestroy;\n  this.fragment.unrender(shouldDestroy);\n  if (shouldDestroy) this.destroyed = true;\n\n  removeFromArray(this.el.__ractive_instances__, this);\n\n  hooks.unrender.fire(this);\n\n  runloop.end();\n  this.unrendering = false;\n\n  return promise;\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport runloop from 'src/global/runloop';\n\nexport default function Ractive$updateModel(keypath, cascade) {\n  const promise = runloop.start();\n\n  if (!keypath) {\n    this.viewmodel.updateFromBindings(true);\n  } else {\n    this.viewmodel.joinAll(splitKeypath(keypath)).updateFromBindings(cascade !== false);\n  }\n\n  runloop.end();\n\n  return promise;\n}\n"",""export default function use(...plugins) {\n  plugins.forEach(p => {\n    p({\n      proto: this,\n      Ractive: this.constructor.Ractive,\n      instance: this\n    });\n  });\n  return this;\n}\n"",""export default function isInstance(object) {\n  return object && object instanceof this;\n}\n"",""import { splitKeypath } from 'shared/keypaths';\n\nexport default function styleGet(keypath, opts) {\n  return this._cssModel.joinAll(splitKeypath(keypath)).get(true, opts);\n}\n"",""import { build, set } from '../../shared/set';\nimport SharedModel from '../../model/specials/SharedModel';\nimport { isObjectType } from 'utils/is';\n\nexport default function sharedSet(keypath, value, options) {\n  const opts = isObjectType(keypath) ? value : options;\n  const model = SharedModel;\n\n  return set(build({ viewmodel: model }, keypath, value, true), opts);\n}\n"",""import SharedModel from '../../model/specials/SharedModel';\nimport { splitKeypath } from 'shared/keypaths';\n\nexport default function sharedGet(keypath, opts) {\n  return SharedModel.joinAll(splitKeypath(keypath)).get(true, opts);\n}\n"",""import { isFunction } from 'utils/is';\n\nexport default function use(...plugins) {\n  plugins.forEach(p => {\n    isFunction(p) &&\n      p({\n        proto: this.prototype,\n        Ractive: this.Ractive,\n        instance: this\n      });\n  });\n  return this;\n}\n"",""import styleGet from '../Ractive/static/styleGet';\nimport styleSet from '../Ractive/static/styleSet';\nimport CSSModel from 'src/model/specials/CSSModel';\nimport { assign, create, defineProperties, defineProperty } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nimport { initCSS } from 'src/Ractive/config/custom/css/css';\n\nexport default function macro(fn, opts) {\n  if (!isFunction(fn)) throw new Error(`The macro must be a function`);\n\n  assign(fn, opts);\n\n  defineProperties(fn, {\n    extensions: { value: [] },\n    _cssIds: { value: [] },\n    cssData: { value: assign(create(this.cssData), fn.cssData || {}) },\n\n    styleGet: { value: styleGet.bind(fn) },\n    styleSet: { value: styleSet.bind(fn) }\n  });\n\n  defineProperty(fn, '_cssModel', { value: new CSSModel(fn) });\n\n  if (fn.css) initCSS(fn, fn, fn);\n\n  this.extensions.push(fn);\n\n  return fn;\n}\n"",""import { escapeKey, splitKeypath as splitKeypathI, unescapeKey } from 'shared/keypaths';\n\nexport function joinKeys(...keys) {\n  return keys.map(escapeKey).join('.');\n}\n\nexport function splitKeypath(keypath) {\n  return splitKeypathI(keypath).map(unescapeKey);\n}\n"",""import { findInViewHierarchy } from 'shared/registry';\n\nexport function findPlugin(name, type, instance) {\n  return findInViewHierarchy(type, instance, name);\n}\n"",""/* istanbul ignore if */\nif (!Object.assign) {\n  Object.assign = function(target, ...sources) {\n    if (target == null) throw new TypeError('Cannot convert undefined or null to object');\n\n    const to = Object(target);\n    const sourcesLength = sources.length;\n\n    for (let index = 0; index < sourcesLength; index++) {\n      const nextSource = sources[index];\n      for (const nextKey in nextSource) {\n        if (!Object.prototype.hasOwnProperty.call(nextSource, nextKey)) continue;\n        to[nextKey] = nextSource[nextKey];\n      }\n    }\n\n    return to;\n  };\n}\n"",""export function hasOwn(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function fillGaps(target, ...sources) {\n  for (let i = 0; i < sources.length; i++) {\n    const source = sources[i];\n    for (const key in source) {\n      // Source can be a prototype-less object.\n      if (key in target || !hasOwn(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nexport function toPairs(obj = {}) {\n  const pairs = [];\n  for (const key in obj) {\n    // Source can be a prototype-less object.\n    if (!hasOwn(obj, key)) continue;\n    pairs.push([key, obj[key]]);\n  }\n  return pairs;\n}\n\nconst obj = Object;\n\nexport const assign = obj.assign;\n\nexport const create = obj.create;\n\nexport const defineProperty = obj.defineProperty;\n\nexport const defineProperties = obj.defineProperties;\n\nexport const keys = obj.keys;\n"",""const toString = Object.prototype.toString;\nconst arrayLikePattern = /^\\[object (?:Array|FileList)\\]$/;\n\nexport function isArrayLike(obj) {\n  return arrayLikePattern.test(toString.call(obj));\n}\n\nexport const isArray = Array.isArray;\n\nexport function isEqual(a, b) {\n  if (a === null && b === null) {\n    return true;\n  }\n\n  if (isObjectType(a) || isObjectType(b)) {\n    return false;\n  }\n\n  return a === b;\n}\n\n// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\nexport function isNumeric(thing) {\n  return !isNaN(parseFloat(thing)) && isFinite(thing);\n}\n\nexport function isObject(thing) {\n  return thing && toString.call(thing) === '[object Object]';\n}\n\nexport function isObjectLike(thing) {\n  return !!(thing && (isObjectType(thing) || isFunction(thing)));\n}\n\nexport function isObjectType(thing) {\n  return typeof thing === 'object';\n}\n\nexport function isFunction(thing) {\n  return typeof thing === 'function';\n}\n\nexport function isString(thing) {\n  return typeof thing === 'string';\n}\n\nexport function isNumber(thing) {\n  return typeof thing === 'number';\n}\n"",""/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.performance && !window.performance.now) {\n  window.performance = window.performance || {};\n\n  const nowOffset = Date.now();\n\n  window.performance.now = function() {\n    return Date.now() - nowOffset;\n  };\n}\n"",""import { hasOwn, defineProperty } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\n/* istanbul ignore if */\nif (!Array.prototype.find) {\n  defineProperty(Array.prototype, 'find', {\n    value(callback, thisArg) {\n      if (this === null || this === undefined)\n        throw new TypeError('Array.prototype.find called on null or undefined');\n\n      if (!isFunction(callback)) throw new TypeError(`${callback} is not a function`);\n\n      const array = Object(this);\n      const arrayLength = array.length >>> 0;\n\n      for (let index = 0; index < arrayLength; index++) {\n        if (!hasOwn(array, index)) continue;\n        if (!callback.call(thisArg, array[index], index, array)) continue;\n        return array[index];\n      }\n\n      return undefined;\n    },\n    configurable: true,\n    writable: true\n  });\n}\n"",""// NOTE: Node doesn't exist in IE8. Nothing can be done.\n/* istanbul ignore if */\nif (\n  typeof window !== 'undefined' &&\n  window.Node &&\n  window.Node.prototype &&\n  !window.Node.prototype.contains\n) {\n  Node.prototype.contains = function(node) {\n    if (!node) throw new TypeError('node required');\n\n    do {\n      if (this === node) return true;\n    } while ((node = node && node.parentNode));\n\n    return false;\n  };\n}\n"",""/* eslint no-console:\""off\"" */\nimport { isFunction } from 'utils/is';\n\nconst win = typeof window !== 'undefined' ? window : null;\nconst doc = win ? document : null;\nconst isClient = !!doc;\nconst base = typeof global !== 'undefined' ? global : win;\nconst hasConsole =\n  typeof console !== 'undefined' && isFunction(console.warn) && isFunction(console.warn.apply);\n\nconst svg = doc\n  ? doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')\n  : false;\n\nconst vendors = ['o', 'ms', 'moz', 'webkit'];\n\nexport { win, doc, isClient, hasConsole, svg, vendors, base };\n"",""import { isFunction, isObjectType } from 'utils/is';\nimport { base } from 'config/environment';\n\n/* istanbul ignore if */\nif (!base.Promise) {\n  const PENDING = {};\n  const FULFILLED = {};\n  const REJECTED = {};\n\n  const Promise = (base.Promise = function(callback) {\n    const fulfilledHandlers = [];\n    const rejectedHandlers = [];\n    let state = PENDING;\n    let result;\n    let dispatchHandlers;\n\n    const makeResolver = newState => {\n      return function(value) {\n        if (state !== PENDING) return;\n        result = value;\n        state = newState;\n        dispatchHandlers = makeDispatcher(\n          state === FULFILLED ? fulfilledHandlers : rejectedHandlers,\n          result\n        );\n        wait(dispatchHandlers);\n      };\n    };\n\n    const fulfill = makeResolver(FULFILLED);\n    const reject = makeResolver(REJECTED);\n\n    try {\n      callback(fulfill, reject);\n    } catch (err) {\n      reject(err);\n    }\n\n    return {\n      // `then()` returns a Promise - 2.2.7\n      then(onFulfilled, onRejected) {\n        const promise2 = new Promise((fulfill, reject) => {\n          const processResolutionHandler = (handler, handlers, forward) => {\n            if (isFunction(handler)) {\n              handlers.push(p1result => {\n                try {\n                  resolve(promise2, handler(p1result), fulfill, reject);\n                } catch (err) {\n                  reject(err);\n                }\n              });\n            } else {\n              handlers.push(forward);\n            }\n          };\n\n          processResolutionHandler(onFulfilled, fulfilledHandlers, fulfill);\n          processResolutionHandler(onRejected, rejectedHandlers, reject);\n\n          if (state !== PENDING) {\n            wait(dispatchHandlers);\n          }\n        });\n        return promise2;\n      },\n      catch(onRejected) {\n        return this.then(null, onRejected);\n      },\n      finally(callback) {\n        return this.then(\n          v => {\n            callback();\n            return v;\n          },\n          e => {\n            callback();\n            throw e;\n          }\n        );\n      }\n    };\n  });\n\n  Promise.all = function(promises) {\n    return new Promise((fulfill, reject) => {\n      const result = [];\n      let pending;\n      let i;\n\n      if (!promises.length) {\n        fulfill(result);\n        return;\n      }\n\n      const processPromise = (promise, i) => {\n        if (promise && isFunction(promise.then)) {\n          promise.then(value => {\n            result[i] = value;\n            --pending || fulfill(result);\n          }, reject);\n        } else {\n          result[i] = promise;\n          --pending || fulfill(result);\n        }\n      };\n\n      pending = i = promises.length;\n\n      while (i--) {\n        processPromise(promises[i], i);\n      }\n    });\n  };\n\n  Promise.race = function(promises) {\n    return new Promise((fulfill, reject) => {\n      let pending = true;\n      function ok(v) {\n        if (!pending) return;\n        pending = false;\n        fulfill(v);\n      }\n      function fail(e) {\n        if (!pending) return;\n        pending = false;\n        reject(e);\n      }\n      for (let i = 0; i < promises.length; i++) {\n        if (promises[i] && isFunction(promises[i].then)) {\n          promises[i].then(ok, fail);\n        }\n      }\n    });\n  };\n\n  Promise.resolve = function(value) {\n    if (value && isFunction(value.then)) return value;\n    return new Promise(fulfill => {\n      fulfill(value);\n    });\n  };\n\n  Promise.reject = function(reason) {\n    if (reason && isFunction(reason.then)) return reason;\n    return new Promise((fulfill, reject) => {\n      reject(reason);\n    });\n  };\n\n  // TODO use MutationObservers or something to simulate setImmediate\n  const wait = function(callback) {\n    setTimeout(callback, 0);\n  };\n\n  const makeDispatcher = function(handlers, result) {\n    return function() {\n      for (let handler; (handler = handlers.shift()); ) {\n        handler(result);\n      }\n    };\n  };\n\n  const resolve = function(promise, x, fulfil, reject) {\n    let then;\n    if (x === promise) {\n      throw new TypeError(`A promise's fulfillment handler cannot return the same promise`);\n    }\n    if (x instanceof Promise) {\n      x.then(fulfil, reject);\n    } else if (x && (isObjectType(x) || isFunction(x))) {\n      try {\n        then = x.then;\n      } catch (e) {\n        reject(e);\n        return;\n      }\n      if (isFunction(then)) {\n        let called;\n\n        const resolvePromise = function(y) {\n          if (called) return;\n          called = true;\n          resolve(promise, y, fulfil, reject);\n        };\n        const rejectPromise = function(r) {\n          if (called) return;\n          called = true;\n          reject(r);\n        };\n\n        try {\n          then.call(x, resolvePromise, rejectPromise);\n        } catch (e) {\n          if (!called) {\n            reject(e);\n            called = true;\n            return;\n          }\n        }\n      } else {\n        fulfil(x);\n      }\n    } else {\n      fulfil(x);\n    }\n  };\n}\n"",""/* istanbul ignore if */\nif (\n  typeof window !== 'undefined' &&\n  !(window.requestAnimationFrame && window.cancelAnimationFrame)\n) {\n  let lastTime = 0;\n  window.requestAnimationFrame = function(callback) {\n    const currentTime = Date.now();\n    const timeToNextCall = Math.max(0, 16 - (currentTime - lastTime));\n    const id = window.setTimeout(() => {\n      callback(currentTime + timeToNextCall);\n    }, timeToNextCall);\n    lastTime = currentTime + timeToNextCall;\n    return id;\n  };\n  window.cancelAnimationFrame = function(id) {\n    clearTimeout(id);\n  };\n}\n"",""import { create } from 'utils/object';\n\nexport default {\n  // render placement:\n  el: void 0,\n  append: false,\n  delegate: true,\n  enhance: false,\n\n  // template:\n  template: null,\n\n  // parse:\n  allowExpressions: true,\n  delimiters: ['{{', '}}'],\n  tripleDelimiters: ['{{{', '}}}'],\n  staticDelimiters: ['[[', ']]'],\n  staticTripleDelimiters: ['[[[', ']]]'],\n  csp: true,\n  interpolate: false,\n  preserveWhitespace: false,\n  sanitize: false,\n  stripComments: true,\n  contextLines: 0,\n\n  // data & binding:\n  data: create(null),\n  helpers: create(null),\n  computed: create(null),\n  syncComputedChildren: false,\n  resolveInstanceMembers: false,\n  warnAboutAmbiguity: false,\n  adapt: [],\n  isolated: true,\n  twoway: true,\n  lazy: false,\n\n  // transitions:\n  noIntro: false,\n  noOutro: false,\n  transitionsEnabled: true,\n  complete: void 0,\n  nestedTransitions: true,\n\n  // css:\n  css: null,\n  noCSSTransform: false\n};\n"",""/* global console */\n/* eslint no-console:\""off\"" */\n\nimport { hasConsole } from '../config/environment';\nimport Ractive from '../Ractive';\nimport noop from './noop';\nimport { isObjectType } from 'utils/is';\n\nconst alreadyWarned = {};\nlet log, printWarning, welcome;\n\nif (hasConsole) {\n  const welcomeIntro = [\n    `%cRactive.js %cBUILD_PLACEHOLDER_VERSION %cin debug mode, %cmore...`,\n    'color: rgb(114, 157, 52); font-weight: normal;',\n    'color: rgb(85, 85, 85); font-weight: normal;',\n    'color: rgb(85, 85, 85); font-weight: normal;',\n    'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n  ];\n  const welcomeMessage = `You're running Ractive BUILD_PLACEHOLDER_VERSION in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\n\nTo disable debug mode, add this line at the start of your app:\n  Ractive.DEBUG = false;\n\nTo disable debug mode when your app is minified, add this snippet:\n  Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\n\nGet help and support:\n  http://ractive.js.org\n  http://stackoverflow.com/questions/tagged/ractivejs\n  http://groups.google.com/forum/#!forum/ractive-js\n  http://twitter.com/ractivejs\n\nFound a bug? Raise an issue:\n  https://github.com/ractivejs/ractive/issues\n\n`;\n\n  welcome = () => {\n    if (Ractive.WELCOME_MESSAGE === false) {\n      welcome = noop;\n      return;\n    }\n    const message = 'WELCOME_MESSAGE' in Ractive ? Ractive.WELCOME_MESSAGE : welcomeMessage;\n    const hasGroup = !!console.groupCollapsed;\n    if (hasGroup) console.groupCollapsed.apply(console, welcomeIntro);\n    console.log(message);\n    if (hasGroup) {\n      console.groupEnd(welcomeIntro);\n    }\n\n    welcome = noop;\n  };\n\n  printWarning = (message, args) => {\n    welcome();\n\n    // extract information about the instance this message pertains to, if applicable\n    if (isObjectType(args[args.length - 1])) {\n      const options = args.pop();\n      const ractive = options ? options.ractive : null;\n\n      if (ractive) {\n        // if this is an instance of a component that we know the name of, add\n        // it to the message\n        let name;\n        if (ractive.component && (name = ractive.component.name)) {\n          message = `<${name}> ${message}`;\n        }\n\n        let node;\n        if (\n          (node =\n            options.node || (ractive.fragment && ractive.fragment.rendered && ractive.find('*')))\n        ) {\n          args.push(node);\n        }\n      }\n    }\n\n    console.warn.apply(\n      console,\n      ['%cRactive.js: %c' + message, 'color: rgb(114, 157, 52);', 'color: rgb(85, 85, 85);'].concat(\n        args\n      )\n    );\n  };\n\n  log = function() {\n    console.log.apply(console, arguments);\n  };\n} else {\n  printWarning = log = welcome = noop;\n}\n\nfunction format(message, args) {\n  return message.replace(/%s/g, () => args.shift());\n}\n\nfunction fatal(message, ...args) {\n  message = format(message, args);\n  throw new Error(message);\n}\n\nfunction logIfDebug() {\n  if (Ractive.DEBUG) {\n    log.apply(null, arguments);\n  }\n}\n\nfunction warn(message, ...args) {\n  message = format(message, args);\n  printWarning(message, args);\n}\n\nfunction warnOnce(message, ...args) {\n  message = format(message, args);\n\n  if (alreadyWarned[message]) {\n    return;\n  }\n\n  alreadyWarned[message] = true;\n  printWarning(message, args);\n}\n\nfunction warnIfDebug() {\n  if (Ractive.DEBUG) {\n    warn.apply(null, arguments);\n  }\n}\n\nfunction warnOnceIfDebug() {\n  if (Ractive.DEBUG) {\n    warnOnce.apply(null, arguments);\n  }\n}\n\nexport { fatal, log, logIfDebug, warn, warnOnce, warnIfDebug, warnOnceIfDebug, welcome };\n"",""// These are a subset of the easing equations found at\n// https://raw.github.com/danro/easing-js - license info\n// follows:\n\n// --------------------------------------------------\n// easing.js v0.5.4\n// Generic set of easing functions with AMD support\n// https://github.com/danro/easing-js\n// This code may be freely distributed under the MIT license\n// http://danro.mit-license.org/\n// --------------------------------------------------\n// All functions adapted from Thomas Fuchs & Jeremy Kahn\n// Easing Equations (c) 2003 Robert Penner, BSD license\n// https://raw.github.com/danro/easing-js/master/LICENSE\n// --------------------------------------------------\n\n// In that library, the functions named easeIn, easeOut, and\n// easeInOut below are named easeInCubic, easeOutCubic, and\n// (you guessed it) easeInOutCubic.\n//\n// You can add additional easing functions to this list, and they\n// will be globally available.\n\nexport default {\n  linear(pos) {\n    return pos;\n  },\n  easeIn(pos) {\n    /* istanbul ignore next */\n    return Math.pow(pos, 3);\n  },\n  easeOut(pos) {\n    return Math.pow(pos - 1, 3) + 1;\n  },\n  easeInOut(pos) {\n    /* istanbul ignore next */\n    if ((pos /= 0.5) < 1) {\n      return 0.5 * Math.pow(pos, 3);\n    }\n    /* istanbul ignore next */\n    return 0.5 * (Math.pow(pos - 2, 3) + 2);\n  }\n};\n"",""// Error messages that are used (or could be) in multiple places\nexport const badArguments = 'Bad arguments';\nexport const noRegistryFunctionReturn =\n  'A function was specified for \""%s\"" %s, but no %s was returned';\nexport const missingPlugin = (name, type) =>\n  `Missing \""${name}\"" ${type} plugin. You may need to download a plugin via http://ractive.js.org/integrations/#${type}s`;\n"",""import { isArray, isObject, isNumeric } from 'utils/is';\nimport interpolate from 'shared/interpolate';\nimport { hasOwn } from 'utils/object';\n\nconst interpolators = {\n  number(from, to) {\n    if (!isNumeric(from) || !isNumeric(to)) {\n      return null;\n    }\n\n    from = +from;\n    to = +to;\n\n    const delta = to - from;\n\n    if (!delta) {\n      return function() {\n        return from;\n      };\n    }\n\n    return function(t) {\n      return from + t * delta;\n    };\n  },\n\n  array(from, to) {\n    let len, i;\n\n    if (!isArray(from) || !isArray(to)) {\n      return null;\n    }\n\n    const intermediate = [];\n    const interpolators = [];\n\n    i = len = Math.min(from.length, to.length);\n    while (i--) {\n      interpolators[i] = interpolate(from[i], to[i]);\n    }\n\n    // surplus values - don't interpolate, but don't exclude them either\n    for (i = len; i < from.length; i += 1) {\n      intermediate[i] = from[i];\n    }\n\n    for (i = len; i < to.length; i += 1) {\n      intermediate[i] = to[i];\n    }\n\n    return function(t) {\n      let i = len;\n\n      while (i--) {\n        intermediate[i] = interpolators[i](t);\n      }\n\n      return intermediate;\n    };\n  },\n\n  object(from, to) {\n    if (!isObject(from) || !isObject(to)) {\n      return null;\n    }\n\n    const properties = [];\n    const intermediate = {};\n    const interpolators = {};\n\n    for (const prop in from) {\n      if (hasOwn(from, prop)) {\n        if (hasOwn(to, prop)) {\n          properties.push(prop);\n          interpolators[prop] = interpolate(from[prop], to[prop]) || (() => to[prop]);\n        } else {\n          intermediate[prop] = from[prop];\n        }\n      }\n    }\n\n    for (const prop in to) {\n      if (hasOwn(to, prop) && !hasOwn(from, prop)) {\n        intermediate[prop] = to[prop];\n      }\n    }\n\n    const len = properties.length;\n\n    return function(t) {\n      let i = len;\n\n      while (i--) {\n        const prop = properties[i];\n\n        intermediate[prop] = interpolators[prop](t);\n      }\n\n      return intermediate;\n    };\n  }\n};\n\nexport default interpolators;\n"",""import { isString } from 'utils/is';\n\nconst refPattern = /\\[\\s*(\\*|[0-9]|[1-9][0-9]+)\\s*\\]/g;\nconst splitPattern = /([^\\\\](?:\\\\\\\\)*)\\./;\nconst escapeKeyPattern = /\\\\|\\./g;\nconst unescapeKeyPattern = /((?:\\\\)+)\\1|\\\\(\\.)/g;\n\nexport function escapeKey(key) {\n  if (isString(key)) {\n    return key.replace(escapeKeyPattern, '\\\\$&');\n  }\n\n  return key;\n}\n\nexport function normalise(ref) {\n  return ref ? ref.replace(refPattern, '.$1') : '';\n}\n\nexport function splitKeypath(keypath) {\n  const result = [];\n  let match;\n\n  keypath = normalise(keypath);\n\n  while ((match = splitPattern.exec(keypath))) {\n    const index = match.index + match[1].length;\n    result.push(keypath.substr(0, index));\n    keypath = keypath.substr(index + 1);\n  }\n\n  result.push(keypath);\n\n  return result;\n}\n\nexport function unescapeKey(key) {\n  if (isString(key)) {\n    return key.replace(unescapeKeyPattern, '$1$2');\n  }\n\n  return key;\n}\n"",""const fnBind = Function.prototype.bind;\n\nexport default function bind(fn, context) {\n  if (!/this/.test(fn.toString())) return fn;\n\n  const bound = fnBind.call(fn, context);\n  for (const prop in fn) bound[prop] = fn[prop];\n\n  return bound;\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport SharedModel, {\n  GlobalModel,\n  SharedModel as ContextModel\n} from 'src/model/specials/SharedModel';\nimport { warnIfDebug } from 'utils/log';\nimport { hasOwn } from 'utils/object';\nimport { isFunction } from 'utils/is';\n\nfunction findContext(fragment) {\n  let frag = fragment;\n  while (frag && !frag.context && !frag.aliases) frag = frag.parent;\n  return frag;\n}\n\nexport default function resolveReference(fragment, ref) {\n  const initialFragment = fragment;\n  // current context ref\n  if (ref === '.') return fragment.findContext();\n\n  // ancestor references\n  if (ref[0] === '~') return fragment.ractive.viewmodel.joinAll(splitKeypath(ref.slice(2)));\n\n  // scoped references\n  if (ref[0] === '.' || ref[0] === '^') {\n    let frag = fragment;\n    const parts = ref.split('/');\n    const explicitContext = parts[0] === '^^';\n\n    // find nearest context node\n    while (frag && !frag.context) {\n      frag = up(frag);\n    }\n    let context = frag && frag.context;\n\n    // walk up the context chain\n    while (frag && parts[0] === '^^') {\n      parts.shift();\n\n      // the current fragment should always be a context,\n      // and if it happens to be an iteration, jump above the each block\n      if (frag.isIteration) {\n        frag = frag.parent.parent;\n      } else {\n        // otherwise jump above the current fragment\n        frag = up(frag);\n      }\n\n      // walk to the next contexted fragment\n      while (frag && !frag.context) {\n        frag = up(frag);\n      }\n      context = frag && frag.context;\n    }\n\n    if (!context && explicitContext) {\n      throw new Error(\n        `Invalid context parent reference ('${ref}'). There is not context at that level.`\n      );\n    }\n\n    // walk up the context path\n    while (parts[0] === '.' || parts[0] === '..') {\n      const part = parts.shift();\n\n      if (part === '..') {\n        context = context.parent;\n      }\n    }\n\n    ref = parts.join('/');\n\n    // special case - `{{.foo}}` means the same as `{{./foo}}`\n    if (ref[0] === '.') ref = ref.slice(1);\n    return context.joinAll(splitKeypath(ref));\n  }\n\n  const keys = splitKeypath(ref);\n  if (!keys.length) return;\n  const base = keys.shift();\n\n  // special refs\n  if (base[0] === '@') {\n    // shorthand from outside the template\n    // @this referring to local ractive instance\n    if (base === '@this' || base === '@') {\n      return fragment.ractive.viewmodel.getRactiveModel().joinAll(keys);\n    } else if (base === '@index' || base === '@key') {\n      // @index or @key referring to the nearest repeating index or key\n      if (keys.length) badReference(base);\n      const repeater = findIter(fragment);\n      return repeater && repeater[`get${base[1] === 'i' ? 'Index' : 'Key'}`]();\n    } else if (base === '@last') {\n      const repeater = findIter(fragment);\n      return repeater && repeater.parent.getLast();\n    } else if (base === '@global') {\n      // @global referring to window or global\n      return GlobalModel.joinAll(keys);\n    } else if (base === '@shared') {\n      // @global referring to window or global\n      return SharedModel.joinAll(keys);\n    } else if (base === '@keypath' || base === '@rootpath') {\n      // @keypath or @rootpath, the current keypath string\n      const root = ref[1] === 'r' ? fragment.ractive.root : null;\n      let f = fragment;\n\n      while (\n        f &&\n        (!f.context || (f.isRoot && f.ractive.component && (root || !f.ractive.isolated)))\n      ) {\n        f = f.isRoot ? f.componentParent : f.parent;\n      }\n\n      return f.getKeypath(root);\n    } else if (base === '@context') {\n      return new ContextModel(fragment.getContext(), 'context').joinAll(keys);\n    } else if (base === '@local') {\n      // @context-local data\n      return fragment.getContext()._data.joinAll(keys);\n    } else if (base === '@style') {\n      // @style shared model\n      return fragment.ractive.constructor._cssModel.joinAll(keys);\n    } else if (base === '@helpers') {\n      // @helpers instance model\n      return fragment.ractive.viewmodel.getHelpers().joinAll(keys);\n    } else if (base === '@macro') {\n      const handle = findMacro(fragment);\n      if (handle) return new ContextModel(handle, 'macro').joinAll(keys);\n      else return;\n    } else {\n      // nope\n      throw new Error(`Invalid special reference '${base}'`);\n    }\n  }\n\n  // helpers\n  if (base && !keys.length) {\n    const helpers = fragment.ractive.viewmodel.getHelpers();\n    if (helpers.has(base)) return helpers.joinKey(base);\n  }\n\n  let context = findContext(fragment);\n\n  // check immediate context for a match\n  if (context) {\n    if (context.context) {\n      context = context.context;\n      if (context.has(base)) return context.joinKey(base).joinAll(keys);\n    } else {\n      // alias block, so get next full context for later\n      context = fragment.findContext();\n    }\n  } else {\n    context = fragment.findContext();\n  }\n\n  // walk up the fragment hierarchy looking for a matching ref, alias, or key in a context\n  let createMapping = false;\n  const shouldWarn = fragment.ractive.warnAboutAmbiguity;\n  let crossed = 0;\n  let model;\n\n  while (fragment) {\n    // repeated fragments\n    if (fragment.isIteration) {\n      if (base === fragment.parent.keyRef) {\n        model = fragment.getKey();\n      } else if (base === fragment.parent.indexRef) {\n        model = fragment.getIndex();\n      }\n\n      if (model && keys.length) badReference(base);\n    }\n\n    // alias node or iteration\n    if (!model && fragment.aliases && hasOwn(fragment.aliases, base)) {\n      model = fragment.aliases[base];\n    }\n\n    // check fragment context to see if it has the key we need\n    if (!model && fragment.context && fragment.context.has(base)) {\n      model = fragment.context.joinKey(base);\n\n      // this is an implicit mapping\n      if (createMapping) {\n        if (shouldWarn)\n          warnIfDebug(\n            `'${ref}' resolved but is ambiguous and will create a mapping to a parent component.`\n          );\n      } else if (shouldWarn && crossed) warnIfDebug(`'${ref}' resolved but is ambiguous.`);\n    }\n\n    if (model) {\n      if (createMapping) {\n        model = initialFragment.ractive.viewmodel.createLink(base, model, base, { implicit: true });\n      }\n\n      if (keys.length > 0 && isFunction(model.joinAll)) {\n        model = model.joinAll(keys);\n      }\n\n      return model;\n    }\n\n    // don't consider alias blocks when checking for ambiguity\n    if (fragment.context && !fragment.aliases) crossed = 1;\n\n    if (\n      (fragment.componentParent || (!fragment.parent && fragment.ractive.component)) &&\n      !fragment.ractive.isolated\n    ) {\n      // ascend through component boundary\n      fragment = fragment.componentParent || fragment.ractive.component.up;\n      createMapping = true;\n    } else {\n      fragment = fragment.parent;\n    }\n  }\n\n  // if enabled, check the instance for a match\n  const instance = initialFragment.ractive;\n  if (instance.resolveInstanceMembers && base !== 'data' && base in instance) {\n    return instance.viewmodel\n      .getRactiveModel()\n      .joinKey(base)\n      .joinAll(keys);\n  }\n\n  if (shouldWarn) {\n    warnIfDebug(`'${ref}' is ambiguous and did not resolve.`);\n  }\n\n  // didn't find anything, so go ahead and create the key on the local model\n  return context.joinKey(base).joinAll(keys);\n}\n\nfunction up(fragment) {\n  return fragment && ((!fragment.ractive.isolated && fragment.componentParent) || fragment.parent);\n}\n\nfunction findIter(start) {\n  let fragment = start;\n  let next;\n  while (!fragment.isIteration && (next = up(fragment))) {\n    fragment = next;\n  }\n\n  return fragment.isIteration && fragment;\n}\n\nfunction findMacro(start) {\n  let fragment = start;\n  while (fragment) {\n    if (fragment.owner.handle) return fragment.owner.handle;\n    fragment = up(fragment);\n  }\n}\n\nfunction badReference(key) {\n  throw new Error(`An index or key reference (${key}) cannot have child properties`);\n}\n"",""import add from './shared/add';\nimport { isNumber, isObjectType } from 'utils/is';\n\nexport default function Ractive$add(keypath, d, options) {\n  const num = isNumber(d) ? d : 1;\n  const opts = isObjectType(d) ? d : options;\n  return add(this, keypath, num, opts);\n}\n"",""export function enqueue(ractive, event) {\n  if (ractive.event) {\n    ractive._eventQueue.push(ractive.event);\n  }\n\n  ractive.event = event;\n}\n\nexport function dequeue(ractive) {\n  if (ractive._eventQueue.length) {\n    ractive.event = ractive._eventQueue.pop();\n  } else {\n    ractive.event = null;\n  }\n}\n"",""export function findAnchors(fragment, name = null) {\n  const res = [];\n\n  findAnchorsIn(fragment, name, res);\n\n  return res;\n}\n\nfunction findAnchorsIn(item, name, result) {\n  if (item.isAnchor) {\n    if (!name || item.name === name) {\n      result.push(item);\n    }\n  } else if (item.items) {\n    item.items.forEach(i => findAnchorsIn(i, name, result));\n  } else if (item.iterations) {\n    item.iterations.forEach(i => findAnchorsIn(i, name, result));\n  } else if (item.fragment && !item.component) {\n    findAnchorsIn(item.fragment, name, result);\n  }\n}\n\nexport function updateAnchors(instance, name = null) {\n  const anchors = findAnchors(instance.fragment, name);\n  const idxs = {};\n  const children = instance._children.byName;\n\n  anchors.forEach(a => {\n    const name = a.name;\n    if (!(name in idxs)) idxs[name] = 0;\n    const idx = idxs[name];\n    const child = (children[name] || [])[idx];\n\n    if (child && child.lastBound !== a) {\n      if (child.lastBound) child.lastBound.removeChild(child);\n      a.addChild(child);\n    }\n\n    idxs[name]++;\n  });\n}\n\nexport function unrenderChild(meta) {\n  if (meta.instance.fragment.rendered) {\n    meta.shouldDestroy = true;\n    meta.instance.unrender();\n  }\n  meta.instance.el = null;\n}\n"",""import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { unrenderChild, updateAnchors } from 'shared/anchors';\n\nexport default function attachChild(child, options = {}) {\n  const children = this._children;\n  let idx;\n\n  if (child.parent && child.parent !== this)\n    throw new Error(\n      `Instance ${child._guid} is already attached to a different instance ${\n        child.parent._guid\n      }. Please detach it from the other instance using detachChild first.`\n    );\n  else if (child.parent)\n    throw new Error(`Instance ${child._guid} is already attached to this instance.`);\n\n  const meta = {\n    instance: child,\n    ractive: this,\n    name: options.name || child.constructor.name || 'Ractive',\n    target: options.target || false,\n    bubble,\n    findNextNode\n  };\n  meta.nameOption = options.name;\n\n  // child is managing itself\n  if (!meta.target) {\n    meta.up = this.fragment;\n    meta.external = true;\n  } else {\n    let list;\n    if (!(list = children.byName[meta.target])) {\n      list = [];\n      this.set(`@this.children.byName.${meta.target}`, list);\n    }\n    idx = options.prepend ? 0 : options.insertAt !== undefined ? options.insertAt : list.length;\n  }\n\n  child.parent = this;\n  child.root = this.root;\n  child.component = meta;\n  children.push(meta);\n\n  const promise = runloop.start();\n\n  const rm = child.viewmodel.getRactiveModel();\n  rm.joinKey('parent', { lastLink: false }).link(this.viewmodel.getRactiveModel());\n  rm.joinKey('root', { lastLink: false }).link(this.root.viewmodel.getRactiveModel());\n\n  hooks.attachchild.fire(child);\n\n  if (meta.target) {\n    unrenderChild(meta);\n    this.splice(`@this.children.byName.${meta.target}`, idx, 0, meta);\n    updateAnchors(this, meta.target);\n  } else {\n    if (!child.isolated) child.viewmodel.attached(this.fragment);\n  }\n\n  runloop.end();\n\n  promise.ractive = child;\n  return promise.then(() => child);\n}\n\nfunction bubble() {\n  runloop.addFragment(this.instance.fragment);\n}\n\nfunction findNextNode() {\n  if (this.anchor) return this.anchor.findNextNode();\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport { isString, isFunction } from 'utils/is';\nimport runloop from 'src/global/runloop';\nimport { fireShuffleTasks } from 'src/model/ModelBase';\n\nexport function compute(path, computed) {\n  this.computed[path] = computed;\n  if (isString(computed) || isFunction(computed))\n    computed = this.computed[path] = { get: computed };\n\n  const keys = splitKeypath(path);\n  if (!~path.indexOf('*')) {\n    const last = keys.pop();\n    return this.viewmodel.joinAll(keys).compute(last, computed);\n  } else {\n    computed.pattern = new RegExp(\n      '^' +\n        keys\n          .map(k => k.replace(/\\*\\*/g, '(.+)').replace(/\\*/g, '((?:\\\\\\\\.|[^\\\\.])+)'))\n          .join('\\\\.') +\n        '$'\n    );\n  }\n}\n\nexport default function Ractive$compute(path, computed) {\n  const promise = runloop.start();\n  const comp = compute.call(this, path, computed);\n\n  if (comp) {\n    const keys = splitKeypath(path);\n    if (keys.length === 1 && !comp.isReadonly) {\n      comp.set(this.viewmodel.value[keys[0]]);\n    }\n\n    const first = keys.reduce((a, c) => a && a.childByKey[c], this.viewmodel);\n    if (first) {\n      first.rebind(comp, first, false);\n      if (first.parent) delete first.parent.childByKey[first.key];\n      fireShuffleTasks();\n    }\n  }\n\n  runloop.end();\n\n  return promise;\n}\n"",""import hooks from 'src/events/Hook';\nimport { removeFromArray } from 'utils/array';\n\nexport default function Ractive$detach() {\n  if (this.isDetached) {\n    return this.el;\n  }\n\n  if (this.el) {\n    removeFromArray(this.el.__ractive_instances__, this);\n  }\n\n  this.el = this.fragment.detach();\n  this.isDetached = true;\n\n  hooks.detach.fire(this);\n  return this.el;\n}\n"",""import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { updateAnchors } from 'shared/anchors';\n\nexport default function detachChild(child) {\n  const children = this._children;\n  let meta, index;\n\n  let i = children.length;\n  while (i--) {\n    if (children[i].instance === child) {\n      index = i;\n      meta = children[i];\n      break;\n    }\n  }\n\n  if (!meta || child.parent !== this)\n    throw new Error(`Instance ${child._guid} is not attached to this instance.`);\n\n  const promise = runloop.start();\n\n  if (meta.anchor) meta.anchor.removeChild(meta);\n  if (!child.isolated) child.viewmodel.detached();\n\n  children.splice(index, 1);\n  if (meta.target) {\n    this.splice(\n      `@this.children.byName.${meta.target}`,\n      children.byName[meta.target].indexOf(meta),\n      1\n    );\n    updateAnchors(this, meta.target);\n  }\n  const rm = child.viewmodel.getRactiveModel();\n  rm.joinKey('parent', { lastLink: false }).unlink();\n  rm.joinKey('root', { lastLink: false }).link(rm);\n  child.root = child;\n  child.parent = null;\n  child.component = null;\n\n  hooks.detachchild.fire(child);\n\n  runloop.end();\n\n  promise.ractive = child;\n  return promise.then(() => child);\n}\n"",""export default function Ractive$find(selector, options = {}) {\n  if (!this.rendered)\n    throw new Error(\n      `Cannot call ractive.find('${selector}') unless instance is rendered to the DOM`\n    );\n\n  let node = this.fragment.find(selector, options);\n  if (node) return node;\n\n  if (options.remote) {\n    for (let i = 0; i < this._children.length; i++) {\n      if (!this._children[i].instance.fragment.rendered) continue;\n      node = this._children[i].instance.find(selector, options);\n      if (node) return node;\n    }\n  }\n}\n"",""import { isArray } from 'utils/is';\n\nexport default function Ractive$findAll(selector, options = {}) {\n  if (!this.rendered)\n    throw new Error(\n      `Cannot call ractive.findAll('${selector}', ...) unless instance is rendered to the DOM`\n    );\n\n  if (!isArray(options.result)) options.result = [];\n\n  this.fragment.findAll(selector, options);\n\n  if (options.remote) {\n    // seach non-fragment children\n    this._children.forEach(c => {\n      if (!c.target && c.instance.fragment && c.instance.fragment.rendered) {\n        c.instance.findAll(selector, options);\n      }\n    });\n  }\n\n  return options.result;\n}\n"",""import { isArray, isObjectType } from 'utils/is';\n\nexport default function Ractive$findAllComponents(selector, options) {\n  if (!options && isObjectType(selector)) {\n    options = selector;\n    selector = '';\n  }\n\n  options = options || {};\n\n  if (!isArray(options.result)) options.result = [];\n\n  this.fragment.findAllComponents(selector, options);\n\n  if (options.remote) {\n    // search non-fragment children\n    this._children.forEach(c => {\n      if (!c.target && c.instance.fragment && c.instance.fragment.rendered) {\n        if (!selector || c.name === selector) {\n          options.result.push(c.instance);\n        }\n\n        c.instance.findAllComponents(selector, options);\n      }\n    });\n  }\n\n  return options.result;\n}\n"",""import { isObjectType } from 'utils/is';\n\nexport default function Ractive$findComponent(selector, options = {}) {\n  if (isObjectType(selector)) {\n    options = selector;\n    selector = '';\n  }\n\n  let child = this.fragment.findComponent(selector, options);\n  if (child) return child;\n\n  if (options.remote) {\n    if (!selector && this._children.length) return this._children[0].instance;\n    for (let i = 0; i < this._children.length; i++) {\n      // skip children that are or should be in an anchor\n      if (this._children[i].target) continue;\n      if (this._children[i].name === selector) return this._children[i].instance;\n      child = this._children[i].instance.findComponent(selector, options);\n      if (child) return child;\n    }\n  }\n}\n"",""export default function Ractive$findContainer(selector) {\n  if (this.container) {\n    if (this.container.component && this.container.component.name === selector) {\n      return this.container;\n    } else {\n      return this.container.findContainer(selector);\n    }\n  }\n\n  return null;\n}\n"",""export default function Ractive$findParent(selector) {\n  if (this.parent) {\n    if (this.parent.component && this.parent.component.name === selector) {\n      return this.parent;\n    } else {\n      return this.parent.findParent(selector);\n    }\n  }\n\n  return null;\n}\n"",""import { ANCHOR, COMPONENT, ELEMENT } from 'config/types';\n\nexport default function findElement(start, orComponent = true, name) {\n  while (\n    start &&\n    (start.type !== ELEMENT || (name && start.name !== name)) &&\n    (!orComponent || (start.type !== COMPONENT && start.type !== ANCHOR))\n  ) {\n    // start is a fragment - look at the owner\n    if (start.owner) start = start.owner;\n    else if (start.component)\n      // start is a component or yielder - look at the container\n      start = start.containerFragment || start.component.up;\n    else if (start.parent)\n      // start is an item - look at the parent\n      start = start.parent;\n    else if (start.up)\n      // start is an item without a parent - look at the parent fragment\n      start = start.up;\n    else start = undefined;\n  }\n\n  return start;\n}\n"",""import { isNumber } from 'utils/is';\n\n// This function takes an array, the name of a mutator method, and the\n// arguments to call that mutator method with, and returns an array that\n// maps the old indices to their new indices.\n\n// So if you had something like this...\n//\n//     array = [ 'a', 'b', 'c', 'd' ];\n//     array.push( 'e' );\n//\n// ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices\n// have changed. If you then did this...\n//\n//     array.unshift( 'z' );\n//\n// ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved\n// one higher to make room for the 'z'. If you removed an item, the new index\n// would be -1...\n//\n//     array.splice( 2, 2 );\n//\n// ...this would result in [ 0, 1, -1, -1, 2, 3 ].\n//\n// This information is used to enable fast, non-destructive shuffling of list\n// sections when you do e.g. `ractive.splice( 'items', 2, 2 );\n\nexport default function getNewIndices(length, methodName, args) {\n  const newIndices = [];\n\n  const spliceArguments = getSpliceEquivalent(length, methodName, args);\n\n  if (!spliceArguments) {\n    return null; // TODO support reverse and sort?\n  }\n\n  const balance = spliceArguments.length - 2 - spliceArguments[1];\n\n  const removeStart = Math.min(length, spliceArguments[0]);\n  const removeEnd = removeStart + spliceArguments[1];\n  newIndices.startIndex = removeStart;\n\n  let i;\n  for (i = 0; i < removeStart; i += 1) {\n    newIndices.push(i);\n  }\n\n  for (; i < removeEnd; i += 1) {\n    newIndices.push(-1);\n  }\n\n  for (; i < length; i += 1) {\n    newIndices.push(i + balance);\n  }\n\n  // there is a net shift for the rest of the array starting with index + balance\n  if (balance !== 0) {\n    newIndices.touchedFrom = spliceArguments[0];\n  } else {\n    newIndices.touchedFrom = length;\n  }\n\n  return newIndices;\n}\n\n// The pop, push, shift an unshift methods can all be represented\n// as an equivalent splice\nfunction getSpliceEquivalent(length, methodName, args) {\n  switch (methodName) {\n    case 'splice':\n      if (args[0] !== undefined && args[0] < 0) {\n        args[0] = length + Math.max(args[0], -length);\n      }\n\n      if (args[0] === undefined) args[0] = 0;\n\n      while (args.length < 2) {\n        args.push(length - args[0]);\n      }\n\n      if (!isNumber(args[1])) {\n        args[1] = length - args[0];\n      }\n\n      // ensure we only remove elements that exist\n      args[1] = Math.min(args[1], length - args[0]);\n\n      return args;\n\n    case 'sort':\n    case 'reverse':\n      return null;\n\n    case 'pop':\n      if (length) {\n        return [length - 1, 1];\n      }\n      return [0, 0];\n\n    case 'push':\n      return [length, 0].concat(args);\n\n    case 'shift':\n      return [0, length ? 1 : 0];\n\n    case 'unshift':\n      return [0, 0].concat(args);\n  }\n}\n"",""import hooks from 'src/events/Hook';\nimport runloop from 'src/global/runloop';\nimport { splitKeypath } from 'shared/keypaths';\nimport { isString } from 'utils/is';\n\nexport function update(ractive, model, options) {\n  // if the parent is wrapped, the adaptor will need to be updated before\n  // updating on this keypath\n  if (model.parent && model.parent.wrapper) {\n    model.parent.adapt();\n  }\n\n  const promise = runloop.start();\n\n  model.mark(options && options.force);\n\n  // notify upstream of changes\n  model.notifyUpstream();\n\n  runloop.end();\n\n  hooks.update.fire(ractive, model);\n\n  return promise;\n}\n\nexport default function Ractive$update(keypath, options) {\n  let opts, path;\n\n  if (isString(keypath)) {\n    path = splitKeypath(keypath);\n    opts = options;\n  } else {\n    opts = keypath;\n  }\n\n  return update(this, path ? this.viewmodel.joinAll(path) : this.viewmodel, opts);\n}\n"",""import fireEvent from 'src/events/fireEvent';\nimport Context from 'shared/Context';\nimport { assign, create } from 'utils/object';\nimport { isObjectType } from 'utils/is';\n\nexport default function Ractive$fire(eventName, ...args) {\n  let ctx;\n\n  // watch for reproxy\n  if (args[0] instanceof Context) {\n    const proto = args.shift();\n    ctx = create(proto);\n    assign(ctx, proto);\n  } else if (isObjectType(args[0]) && (args[0] === null || args[0].constructor === Object)) {\n    ctx = Context.forRactive(this, args.shift());\n  } else {\n    ctx = Context.forRactive(this);\n  }\n\n  return fireEvent(this, eventName, ctx, args);\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport { FakeFragment } from 'shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nexport default function Ractive$get(keypath, opts) {\n  if (!isString(keypath)) return this.viewmodel.get(true, keypath);\n\n  const keys = splitKeypath(keypath);\n  const key = keys[0];\n\n  let model;\n\n  if (!this.viewmodel.has(key)) {\n    // if this is an inline component, we may need to create\n    // an implicit mapping\n    if (this.component && !this.isolated) {\n      model = resolveReference(this.fragment || new FakeFragment(this), key);\n    }\n  }\n\n  model = this.viewmodel.joinAll(keys);\n  return model.get(true, opts);\n}\n"",""import staticContext from '../static/getContext';\nimport getRactiveContext from 'src/shared/getRactiveContext';\nimport { isString } from 'utils/is';\n\nexport default function getContext(node, options) {\n  if (!node) return getRactiveContext(this);\n\n  if (isString(node)) {\n    node = this.find(node, options);\n  }\n\n  return staticContext(node);\n}\n"",""import hooks from 'src/events/Hook';\nimport { getElement } from 'utils/dom';\n\nexport default function Ractive$insert(target, anchor) {\n  if (!this.fragment.rendered) {\n    // TODO create, and link to, documentation explaining this\n    throw new Error(\n      'The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.'\n    );\n  }\n\n  target = getElement(target);\n  anchor = getElement(anchor) || null;\n\n  if (!target) {\n    throw new Error('You must specify a valid target to insert into');\n  }\n\n  target.insertBefore(this.detach(), anchor);\n  this.el = target;\n\n  (target.__ractive_instances__ || (target.__ractive_instances__ = [])).push(this);\n  this.isDetached = false;\n\n  fireInsertHook(this);\n}\n\nfunction fireInsertHook(ractive) {\n  hooks.insert.fire(ractive);\n\n  ractive.findAllComponents('*').forEach(child => {\n    fireInsertHook(child.instance);\n  });\n}\n"",""import { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport runloop from 'src/global/runloop';\n\nexport default function link(there, here, options) {\n  let model;\n  const target = (options && (options.ractive || options.instance)) || this;\n\n  // may need to allow a mapping to resolve implicitly\n  const sourcePath = splitKeypath(there);\n  if (!target.viewmodel.has(sourcePath[0]) && target.component) {\n    model = resolveReference(target.component.up, sourcePath[0]);\n    model = model.joinAll(sourcePath.slice(1));\n  }\n\n  const src = model || target.viewmodel.joinAll(sourcePath);\n  const dest = this.viewmodel.joinAll(splitKeypath(here), { lastLink: false });\n\n  if (isUpstream(src, dest) || isUpstream(dest, src)) {\n    throw new Error('A keypath cannot be linked to itself.');\n  }\n\n  const promise = runloop.start();\n\n  dest.link(src, (options && options.keypath) || there);\n\n  runloop.end();\n\n  return promise;\n}\n\nfunction isUpstream(check, start) {\n  let model = start;\n  while (model) {\n    if (model === check || model.owner === check) return true;\n    model = model.target || model.parent;\n  }\n}\n"",""import { isObject, isFunction } from 'utils/is';\nimport { warnOnceIfDebug } from 'utils/log';\nimport { splitKeypath } from 'shared/keypaths';\nimport resolveReference from 'src/view/resolvers/resolveReference';\nimport Observer from './observe/Observer';\nimport PatternObserver from './observe/Pattern';\nimport ArrayObserver from './observe/Array';\nimport { keys } from 'utils/object';\n\nexport default function observe(keypath, callback, options) {\n  const observers = [];\n  let map;\n  let opts;\n\n  if (isObject(keypath)) {\n    map = keypath;\n    opts = callback || {};\n  } else {\n    if (isFunction(keypath)) {\n      map = { '': keypath };\n      opts = callback || {};\n    } else {\n      map = {};\n      map[keypath] = callback;\n      opts = options || {};\n    }\n  }\n\n  let silent = false;\n  keys(map).forEach(keypath => {\n    const callback = map[keypath];\n    const caller = function(...args) {\n      if (silent) return;\n      return callback.apply(this, args);\n    };\n\n    let keypaths = keypath.split(' ');\n    if (keypaths.length > 1) keypaths = keypaths.filter(k => k);\n\n    keypaths.forEach(keypath => {\n      opts.keypath = keypath;\n      const observer = createObserver(this, keypath, caller, opts);\n      if (observer) observers.push(observer);\n    });\n  });\n\n  // add observers to the Ractive instance, so they can be\n  // cancelled on ractive.teardown()\n  this._observers.push.apply(this._observers, observers);\n\n  return {\n    cancel: () => observers.forEach(o => o.cancel()),\n    isSilenced: () => silent,\n    silence: () => (silent = true),\n    resume: () => (silent = false)\n  };\n}\n\nfunction createObserver(ractive, keypath, callback, options) {\n  const keys = splitKeypath(keypath);\n  let wildcardIndex = keys.indexOf('*');\n  if (!~wildcardIndex) wildcardIndex = keys.indexOf('**');\n\n  options.fragment = options.fragment || ractive.fragment;\n\n  let model;\n  if (!options.fragment) {\n    model = ractive.viewmodel.joinKey(keys[0]);\n  } else {\n    // .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .\n    if (~keys[0].indexOf('.*')) {\n      model = options.fragment.findContext();\n      wildcardIndex = 0;\n      keys[0] = keys[0].slice(1);\n    } else {\n      model =\n        wildcardIndex === 0\n          ? options.fragment.findContext()\n          : resolveReference(options.fragment, keys[0]);\n    }\n  }\n\n  // the model may not exist key\n  if (!model) model = ractive.viewmodel.joinKey(keys[0]);\n\n  if (!~wildcardIndex) {\n    model = model.joinAll(keys.slice(1));\n    if (options.array) {\n      return new ArrayObserver(ractive, model, callback, options);\n    } else {\n      return new Observer(ractive, model, callback, options);\n    }\n  } else {\n    const double = keys.indexOf('**');\n    if (~double) {\n      if (double + 1 !== keys.length || ~keys.indexOf('*')) {\n        warnOnceIfDebug(\n          `Recursive observers may only specify a single '**' at the end of the path.`\n        );\n        return;\n      }\n    }\n\n    model = model.joinAll(keys.slice(1, wildcardIndex));\n\n    return new PatternObserver(ractive, model, keys.slice(wildcardIndex), callback, options);\n  }\n}\n"",""import { removeFromArray } from 'utils/array';\nimport trim from './shared/trim';\nimport notEmptyString from './shared/notEmptyString';\n\nexport default function Ractive$off(eventName, callback) {\n  // if no event is specified, remove _all_ event listeners\n  if (!eventName) {\n    this._subs = {};\n  } else {\n    // Handle multiple space-separated event names\n    const eventNames = eventName\n      .split(' ')\n      .map(trim)\n      .filter(notEmptyString);\n\n    eventNames.forEach(event => {\n      const subs = this._subs[event];\n      // if given a specific callback to remove, remove only it\n      if (subs && callback) {\n        const entry = subs.find(s => s.callback === callback);\n        if (entry) {\n          removeFromArray(subs, entry);\n          entry.off = true;\n\n          if (event.indexOf('.')) this._nsSubs--;\n        }\n      } else if (subs) {\n        // otherwise, remove all listeners for this event\n        if (event.indexOf('.')) this._nsSubs -= subs.length;\n        subs.length = 0;\n      }\n    });\n  }\n\n  return this;\n}\n"",""import trim from './shared/trim';\nimport notEmptyString from './shared/notEmptyString';\nimport { hasOwn } from 'utils/object';\nimport { isObjectType, isString } from 'utils/is';\n\nexport default function Ractive$on(eventName, callback) {\n  // eventName may already be a map\n  const map = isObjectType(eventName) ? eventName : {};\n  // or it may be a string along with a callback\n  if (isString(eventName)) map[eventName] = callback;\n\n  let silent = false;\n  const events = [];\n\n  for (const k in map) {\n    const callback = map[k];\n    const caller = function(...args) {\n      if (!silent) return callback.apply(this, args);\n    };\n    const entry = {\n      callback,\n      handler: caller\n    };\n\n    if (hasOwn(map, k)) {\n      const names = k\n        .split(' ')\n        .map(trim)\n        .filter(notEmptyString);\n      names.forEach(n => {\n        (this._subs[n] || (this._subs[n] = [])).push(entry);\n        if (n.indexOf('.')) this._nsSubs++;\n        events.push([n, entry]);\n      });\n    }\n  }\n\n  return {\n    cancel: () => events.forEach(e => this.off(e[0], e[1].callback)),\n    isSilenced: () => silent,\n    silence: () => (silent = true),\n    resume: () => (silent = false)\n  };\n}\n"",""export default function Ractive$once(eventName, handler) {\n  const listener = this.on(eventName, function() {\n    handler.apply(this, arguments);\n    listener.cancel();\n  });\n\n  // so we can still do listener.cancel() manually\n  return listener;\n}\n"",""import { splitKeypath } from 'shared/keypaths';\n\nexport default function readLink(keypath, options = {}) {\n  const path = splitKeypath(keypath);\n\n  if (this.viewmodel.has(path[0])) {\n    let model = this.viewmodel.joinAll(path);\n\n    if (!model.isLink) return;\n\n    while ((model = model.target) && options.canonical !== false) {\n      if (!model.isLink) break;\n    }\n\n    if (model) return { ractive: model.root.ractive, keypath: model.getKeypath() };\n  }\n}\n"",""function s4() {\n  return Math.floor((1 + Math.random()) * 0x10000)\n    .toString(16)\n    .substring(1);\n}\n\nexport function uuid() {\n  return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n"",""import { applyCSS } from '../../global/css';\nimport transformCSS from '../config/custom/css/transform';\nimport { evalCSS } from '../config/custom/css/css';\nimport { build, set } from '../../shared/set';\nimport runloop from '../../global/runloop';\nimport { isObjectType, isFunction } from 'utils/is';\n\nexport default function setCSSData(keypath, value, options) {\n  const opts = isObjectType(keypath) ? value : options;\n  const model = this._cssModel;\n\n  model.locked = true;\n  const promise = set(build({ viewmodel: model }, keypath, value, true), opts);\n  model.locked = false;\n\n  const cascade = runloop.start();\n  this.extensions.forEach(e => {\n    const model = e._cssModel;\n    model.mark();\n    model.downstreamChanged('', 1);\n  });\n  runloop.end();\n\n  applyChanges(this, !opts || opts.apply !== false);\n\n  return promise.then(() => cascade);\n}\n\nexport function applyChanges(component, apply) {\n  const local = recomputeCSS(component);\n  const child = component.extensions\n    .map(e => applyChanges(e, false))\n    .reduce((a, c) => c || a, false);\n\n  if (apply && (local || child)) {\n    const def = component._cssDef;\n    if (!def || (def && def.applied)) applyCSS(true);\n  }\n\n  return local || child;\n}\n\nexport function recomputeCSS(component) {\n  const css = component.css;\n\n  if (!isFunction(css)) return;\n\n  const def = component._cssDef;\n  const result = evalCSS(component, css);\n  const styles = def.transform ? transformCSS(result, def.id) : result;\n\n  if (def.styles === styles) return;\n\n  def.styles = styles;\n\n  return true;\n}\n"",""import noop from 'utils/noop';\nimport { isFunction } from 'utils/is';\n\nexport default function wrap(parent, name, method) {\n  if (!/_super/.test(method)) return method;\n\n  function wrapper() {\n    const superMethod = getSuperMethod(wrapper._parent, name);\n    const hasSuper = '_super' in this;\n    const oldSuper = this._super;\n\n    this._super = superMethod;\n\n    const result = method.apply(this, arguments);\n\n    if (hasSuper) {\n      this._super = oldSuper;\n    } else {\n      delete this._super;\n    }\n\n    return result;\n  }\n\n  wrapper._parent = parent;\n  wrapper._method = method;\n\n  return wrapper;\n}\n\nfunction getSuperMethod(parent, name) {\n  if (name in parent) {\n    const value = parent[name];\n\n    return isFunction(value) ? value : () => value;\n  }\n\n  return noop;\n}\n"",""import { warnIfDebug } from 'utils/log';\nimport { isArray } from 'utils/is';\n\nfunction getMessage(deprecated, correct, isError) {\n  return (\n    `options.${deprecated} has been deprecated in favour of options.${correct}.` +\n    (isError ? ` You cannot specify both options, please use options.${correct}.` : '')\n  );\n}\n\nfunction deprecateOption(options, deprecatedOption, correct) {\n  if (deprecatedOption in options) {\n    if (!(correct in options)) {\n      warnIfDebug(getMessage(deprecatedOption, correct));\n      options[correct] = options[deprecatedOption];\n    } else {\n      throw new Error(getMessage(deprecatedOption, correct, true));\n    }\n  }\n}\n\nexport default function deprecate(options) {\n  deprecateOption(options, 'beforeInit', 'onconstruct');\n  deprecateOption(options, 'init', 'onrender');\n  deprecateOption(options, 'complete', 'oncomplete');\n  deprecateOption(options, 'eventDefinitions', 'events');\n\n  // Using extend with Component instead of options,\n  // like Human.extend( Spider ) means adaptors as a registry\n  // gets copied to options. So we have to check if actually an array\n  if (isArray(options.adaptors)) {\n    deprecateOption(options, 'adaptors', 'adapt');\n  }\n}\n"",""import resolveReference from './resolveReference';\nimport ExpressionProxy from './ExpressionProxy';\nimport ReferenceExpressionProxy from './ReferenceExpressionProxy';\n\nexport default function resolve(fragment, template) {\n  if (template.r) {\n    return resolveReference(fragment, template.r);\n  } else if (template.x) {\n    return new ExpressionProxy(fragment, template.x);\n  } else if (template.rx) {\n    return new ReferenceExpressionProxy(fragment, template.rx);\n  }\n}\n"",""import hooks from 'src/events/Hook';\nimport { removeFromArray } from 'utils/array';\nimport { cancel } from 'shared/methodCallers';\nimport { warnIfDebug } from 'utils/log';\n\n// Teardown. This goes through the root fragment and all its children, removing observers\n// and generally cleaning up after itself\n\nexport default function Ractive$teardown() {\n  if (this.torndown) {\n    warnIfDebug('ractive.teardown() was called on a Ractive instance that was already torn down');\n    return Promise.resolve();\n  }\n\n  this.shouldDestroy = true;\n  return teardown(this, () => (this.fragment.rendered ? this.unrender() : Promise.resolve()));\n}\n\nexport function teardown(instance, getPromise) {\n  instance.torndown = true;\n  instance.fragment.unbind();\n  instance._observers.slice().forEach(cancel);\n\n  if (instance.el && instance.el.__ractive_instances__) {\n    removeFromArray(instance.el.__ractive_instances__, instance);\n  }\n\n  const promise = getPromise();\n\n  hooks.teardown.fire(instance);\n\n  promise.then(() => {\n    hooks.destruct.fire(instance);\n    instance.viewmodel.teardown();\n  });\n\n  return promise;\n}\n"",""export default function() {}\n"",""export function findInViewHierarchy(registryName, ractive, name) {\n  const instance = findInstance(registryName, ractive, name);\n  return instance ? instance[registryName][name] : null;\n}\n\nexport function findInstance(registryName, ractive, name) {\n  while (ractive) {\n    if (name in ractive[registryName]) {\n      return ractive;\n    }\n\n    if (ractive.isolated) {\n      return null;\n    }\n\n    ractive = ractive.parent;\n  }\n}\n"",""import { fatal } from 'utils/log';\nimport { missingPlugin } from 'config/errors';\nimport interpolators from '../Ractive/static/interpolators';\nimport { findInViewHierarchy } from './registry';\n\nexport default function interpolate(from, to, ractive, type) {\n  if (from === to) return null;\n\n  if (type) {\n    const interpol = findInViewHierarchy('interpolators', ractive, type);\n    if (interpol) return interpol(from, to) || null;\n\n    fatal(missingPlugin(type, 'interpolator'));\n  }\n\n  return (\n    interpolators.number(from, to) ||\n    interpolators.array(from, to) ||\n    interpolators.object(from, to) ||\n    null\n  );\n}\n"",""import { isArray, isString } from './is';\n\nexport function addToArray(array, value) {\n  const index = array.indexOf(value);\n\n  if (index === -1) {\n    array.push(value);\n  }\n}\n\nexport function arrayContains(array, value) {\n  for (let i = 0, c = array.length; i < c; i++) {\n    if (array[i] == value) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function arrayContentsMatch(a, b) {\n  let i;\n\n  if (!isArray(a) || !isArray(b)) {\n    return false;\n  }\n\n  if (a.length !== b.length) {\n    return false;\n  }\n\n  i = a.length;\n  while (i--) {\n    if (a[i] !== b[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexport function ensureArray(x) {\n  if (isString(x)) {\n    return [x];\n  }\n\n  if (x === undefined) {\n    return [];\n  }\n\n  return x;\n}\n\nexport function lastItem(array) {\n  return array[array.length - 1];\n}\n\nexport function removeFromArray(array, member) {\n  if (!array) {\n    return;\n  }\n\n  const index = array.indexOf(member);\n\n  if (index !== -1) {\n    array.splice(index, 1);\n  }\n}\n\nexport function combine(...arrays) {\n  const res = arrays.concat.apply([], arrays);\n  let i = res.length;\n  while (i--) {\n    const idx = res.indexOf(res[i]);\n    if (~idx && idx < i) res.splice(i, 1);\n  }\n\n  return res;\n}\n\nexport function toArray(arrayLike) {\n  const array = [];\n  let i = arrayLike.length;\n  while (i--) {\n    array[i] = arrayLike[i];\n  }\n\n  return array;\n}\n\nexport function findMap(array, fn) {\n  const len = array.length;\n  for (let i = 0; i < len; i++) {\n    const result = fn(array[i]);\n    if (result) return result;\n  }\n}\n\nexport function buildNewIndices(one, two, comparator) {\n  let oldArray = one;\n  let newArray = two;\n  if (comparator) {\n    oldArray = oldArray.map(comparator);\n    newArray = newArray.map(comparator);\n  }\n\n  const oldLength = oldArray.length;\n\n  const usedIndices = {};\n  let firstUnusedIndex = 0;\n\n  return oldArray.map(item => {\n    let index;\n    let start = firstUnusedIndex;\n\n    do {\n      index = newArray.indexOf(item, start);\n\n      if (index === -1) {\n        return -1;\n      }\n\n      start = index + 1;\n    } while (usedIndices[index] === true && start < oldLength);\n\n    // keep track of the first unused index, so we don't search\n    // the whole of newArray for each item in oldArray unnecessarily\n    if (index === firstUnusedIndex) {\n      firstUnusedIndex += 1;\n    }\n    // allow next instance of next \""equal\"" to be found item\n    usedIndices[index] = true;\n    return index;\n  });\n}\n"",""export function bind(x) {\n  x.bind();\n}\nexport function cancel(x) {\n  x.cancel();\n}\nexport function destroyed(x) {\n  x.destroyed();\n}\nexport function handleChange(x) {\n  x.handleChange();\n}\nexport function mark(x) {\n  x.mark();\n}\nexport function markForce(x) {\n  x.mark(true);\n}\nexport function marked(x) {\n  x.marked();\n}\nexport function markedAll(x) {\n  x.markedAll();\n}\nexport function render(x) {\n  x.render();\n}\nexport function shuffled(x) {\n  x.shuffled();\n}\nexport function teardown(x) {\n  x.teardown();\n}\nexport function unbind(x) {\n  x.unbind();\n}\nexport function unrender(x) {\n  x.unrender();\n}\nexport function unrenderAndDestroy(x) {\n  x.unrender(true);\n}\nexport function update(x) {\n  x.update();\n}\nexport function toString(x) {\n  return x.toString();\n}\nexport function toEscapedString(x) {\n  return x.toString(true);\n}\n"",""import { splitKeypath } from './keypaths';\nimport { isString } from 'utils/is';\n\n// this is the dry method of checking to see if a rebind applies to\n// a particular keypath because in some cases, a dep may be bound\n// directly to a particular keypath e.g. foo.bars.0.baz and need\n// to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted\nexport function rebindMatch(template, next, previous, fragment) {\n  const keypath = template.r || template;\n\n  // no valid keypath, go with next\n  if (!keypath || !isString(keypath)) return next;\n\n  // completely contextual ref, go with next\n  if (\n    keypath === '.' ||\n    keypath[0] === '@' ||\n    (next || previous).isKey ||\n    (next || previous).isKeypath\n  )\n    return next;\n\n  const parts = keypath.split('/');\n  let keys = splitKeypath(parts[parts.length - 1]);\n  const last = keys[keys.length - 1];\n\n  // check the keypath against the model keypath to see if it matches\n  let model = next || previous;\n\n  // check to see if this was an alias\n  if (model && keys.length === 1 && last !== model.key && fragment) {\n    keys = findAlias(last, fragment) || keys;\n  }\n\n  let i = keys.length;\n  let match = true;\n  let shuffling = false;\n\n  while (model && i--) {\n    if (model.shuffling) shuffling = true;\n    // non-strict comparison to account for indices in keypaths\n    if (keys[i] != model.key) match = false;\n    model = model.parent;\n  }\n\n  // next is undefined, but keypath is shuffling and previous matches\n  if (!next && match && shuffling) return previous;\n  else if (next && !match && shuffling)\n    // next is defined, but doesn't match the keypath\n    return previous;\n  else return next;\n}\n\nfunction findAlias(name, fragment) {\n  while (fragment) {\n    const z = fragment.aliases;\n    if (z && z[name]) {\n      const aliases = (fragment.owner.iterations ? fragment.owner : fragment).owner.template.z;\n      for (let i = 0; i < aliases.length; i++) {\n        if (aliases[i].n === name) {\n          const alias = aliases[i].x;\n          if (!alias.r) return false;\n          const parts = alias.r.split('/');\n          return splitKeypath(parts[parts.length - 1]);\n        }\n      }\n      return;\n    }\n\n    fragment = fragment.componentParent || fragment.parent;\n  }\n}\n"",""export function fromExpression(body, length = 0) {\n  const args = new Array(length);\n\n  while (length--) {\n    args[length] = `_${length}`;\n  }\n\n  // Functions created directly with new Function() look like this:\n  //     function anonymous (_0 /**/) { return _0*2 }\n  //\n  // With this workaround, we get a little more compact:\n  //     function (_0){return _0*2}\n  return new Function([], `return function (${args.join(',')}){return(${body});};`)();\n}\n"",""import { BOOLEAN_LITERAL } from '../../../../../config/types';\n\nexport default function readBooleanLiteral(parser) {\n  const remaining = parser.remaining();\n\n  if (remaining.substr(0, 4) === 'true') {\n    parser.pos += 4;\n    return {\n      t: BOOLEAN_LITERAL,\n      v: 'true'\n    };\n  }\n\n  if (remaining.substr(0, 5) === 'false') {\n    parser.pos += 5;\n    return {\n      t: BOOLEAN_LITERAL,\n      v: 'false'\n    };\n  }\n\n  return null;\n}\n"",""import { KEY_VALUE_PAIR, REFERENCE } from 'src/config/types';\nimport readKey from '../../../shared/readKey';\nimport readExpression from '../../../../readExpression';\nimport { name as namePattern, spreadPattern } from '../../../shared/patterns';\n\nexport default function readKeyValuePair(parser) {\n  let spread;\n  const start = parser.pos;\n\n  // allow whitespace between '{' and key\n  parser.sp();\n\n  const refKey = parser.nextChar() !== \""'\"" && parser.nextChar() !== '\""';\n  if (refKey) spread = parser.matchPattern(spreadPattern);\n\n  const key = spread ? readExpression(parser) : readKey(parser);\n  if (key === null) {\n    parser.pos = start;\n    return null;\n  }\n\n  // allow whitespace between key and ':'\n  parser.sp();\n\n  // es2015 shorthand property\n  if (refKey && (parser.nextChar() === ',' || parser.nextChar() === '}')) {\n    if (!spread && !namePattern.test(key)) {\n      parser.error(`Expected a valid reference, but found '${key}' instead.`);\n    }\n\n    const pair = {\n      t: KEY_VALUE_PAIR,\n      k: key,\n      v: {\n        t: REFERENCE,\n        n: key\n      }\n    };\n\n    if (spread) {\n      pair.p = true;\n    }\n\n    return pair;\n  }\n\n  // next character must be ':'\n  if (!parser.matchString(':')) {\n    parser.pos = start;\n    return null;\n  }\n\n  // allow whitespace between ':' and value\n  parser.sp();\n\n  // next expression must be a, well... expression\n  const value = readExpression(parser);\n  if (value === null) {\n    parser.pos = start;\n    return null;\n  }\n\n  return {\n    t: KEY_VALUE_PAIR,\n    k: key,\n    v: value\n  };\n}\n"",""import getKeyValuePair from './keyValuePair';\n\nexport default function readKeyValuePairs(parser) {\n  const start = parser.pos;\n\n  const pair = getKeyValuePair(parser);\n  if (pair === null) {\n    return null;\n  }\n\n  const pairs = [pair];\n\n  if (parser.matchString(',')) {\n    const keyValuePairs = readKeyValuePairs(parser);\n\n    if (!keyValuePairs) {\n      parser.pos = start;\n      return null;\n    }\n\n    return pairs.concat(keyValuePairs);\n  }\n\n  return pairs;\n}\n"",""import { OBJECT_LITERAL } from '../../../../../config/types';\nimport readKeyValuePairs from './objectLiteral/keyValuePairs';\n\nexport default function(parser) {\n  const start = parser.pos;\n\n  // allow whitespace\n  parser.sp();\n\n  if (!parser.matchString('{')) {\n    parser.pos = start;\n    return null;\n  }\n\n  const keyValuePairs = readKeyValuePairs(parser);\n\n  // allow whitespace between final value and '}'\n  parser.sp();\n\n  if (!parser.matchString('}')) {\n    parser.pos = start;\n    return null;\n  }\n\n  return {\n    t: OBJECT_LITERAL,\n    m: keyValuePairs\n  };\n}\n"",""import { ARRAY_LITERAL } from 'src/config/types';\nimport readExpressionList from '../../shared/readExpressionList';\n\nexport default function(parser) {\n  const start = parser.pos;\n\n  // allow whitespace before '['\n  parser.sp();\n\n  if (!parser.matchString('[')) {\n    parser.pos = start;\n    return null;\n  }\n\n  const expressionList = readExpressionList(parser, true);\n\n  if (!parser.matchString(']')) {\n    parser.pos = start;\n    return null;\n  }\n\n  return {\n    t: ARRAY_LITERAL,\n    m: expressionList\n  };\n}\n"",""import readNumberLiteral from './literal/readNumberLiteral';\nimport readBooleanLiteral from './literal/readBooleanLiteral';\nimport readStringLiteral from './literal/readStringLiteral';\nimport readTemplateStringLiteral from './literal/readTemplateStringLiteral';\nimport readObjectLiteral from './literal/readObjectLiteral';\nimport readArrayLiteral from './literal/readArrayLiteral';\nimport readRegexpLiteral from './literal/readRegexpLiteral';\n\nexport default function readLiteral(parser) {\n  return (\n    readNumberLiteral(parser) ||\n    readBooleanLiteral(parser) ||\n    readStringLiteral(parser) ||\n    readTemplateStringLiteral(parser) ||\n    readObjectLiteral(parser) ||\n    readArrayLiteral(parser) ||\n    readRegexpLiteral(parser)\n  );\n}\n"",""import { BRACKETED } from 'src/config/types';\nimport { expectedExpression, expectedParen } from '../shared/errors';\nimport readExpression from '../../readExpression';\n\nexport default function readBracketedExpression(parser) {\n  if (!parser.matchString('(')) return null;\n\n  parser.sp();\n\n  const expr = readExpression(parser);\n\n  if (!expr) parser.error(expectedExpression);\n\n  parser.sp();\n\n  if (!parser.matchString(')')) parser.error(expectedParen);\n\n  return {\n    t: BRACKETED,\n    x: expr\n  };\n}\n"",""import readLiteral from './primary/readLiteral';\nimport readReference from './primary/readReference';\nimport readBracketedExpression from './primary/readBracketedExpression';\n\nexport default function(parser) {\n  return readLiteral(parser) || readReference(parser) || readBracketedExpression(parser);\n}\n"",""import { REFINEMENT } from 'config/types';\nimport { expectedExpression } from './errors';\nimport { name as namePattern } from './patterns';\nimport readExpression from '../../readExpression';\n\nexport default function readRefinement(parser) {\n  // some things call for strict refinement (partial names), meaning no space between reference and refinement\n  if (!parser.strictRefinement) {\n    parser.sp();\n  }\n\n  // \"".\"" name\n  if (parser.matchString('.')) {\n    parser.sp();\n\n    const name = parser.matchPattern(namePattern);\n    if (name) {\n      return {\n        t: REFINEMENT,\n        n: name\n      };\n    }\n\n    parser.error('Expected a property name');\n  }\n\n  // \""[\"" expression \""]\""\n  if (parser.matchString('[')) {\n    parser.sp();\n\n    const expr = readExpression(parser);\n    if (!expr) parser.error(expectedExpression);\n\n    parser.sp();\n\n    if (!parser.matchString(']')) parser.error(`Expected ']'`);\n\n    return {\n      t: REFINEMENT,\n      x: expr\n    };\n  }\n\n  return null;\n}\n"",""import { MEMBER, INVOCATION } from 'config/types';\nimport readPrimary from './readPrimary';\nimport readExpressionList from './shared/readExpressionList';\nimport readRefinement from './shared/readRefinement';\nimport { expectedParen } from './shared/errors';\n\nexport default function(parser) {\n  let expression = readPrimary(parser);\n\n  if (!expression) return null;\n\n  while (expression) {\n    const refinement = readRefinement(parser);\n    if (refinement) {\n      expression = {\n        t: MEMBER,\n        x: expression,\n        r: refinement\n      };\n    } else if (parser.matchString('(')) {\n      parser.sp();\n      const expressionList = readExpressionList(parser, true);\n\n      parser.sp();\n\n      if (!parser.matchString(')')) {\n        parser.error(expectedParen);\n      }\n\n      expression = {\n        t: INVOCATION,\n        x: expression\n      };\n\n      if (expressionList) expression.o = expressionList;\n    } else {\n      break;\n    }\n  }\n\n  return expression;\n}\n"",""import { CONDITIONAL } from 'config/types';\nimport readLogicalOr from './readLogicalOr';\nimport { expectedExpression } from './shared/errors';\nimport readExpression from '../readExpression';\n\n// The conditional operator is the lowest precedence operator, so we start here\nexport default function getConditional(parser) {\n  const expression = readLogicalOr(parser);\n  if (!expression) {\n    return null;\n  }\n\n  const start = parser.pos;\n\n  parser.sp();\n\n  if (!parser.matchString('?')) {\n    parser.pos = start;\n    return expression;\n  }\n\n  parser.sp();\n\n  const ifTrue = readExpression(parser);\n  if (!ifTrue) {\n    parser.error(expectedExpression);\n  }\n\n  parser.sp();\n\n  if (!parser.matchString(':')) {\n    parser.error('Expected \"":\""');\n  }\n\n  parser.sp();\n\n  const ifFalse = readExpression(parser);\n  if (!ifFalse) {\n    parser.error(expectedExpression);\n  }\n\n  return {\n    t: CONDITIONAL,\n    o: [expression, ifTrue, ifFalse]\n  };\n}\n"",""import readConditional from './expressions/readConditional';\nimport readReference from './expressions/primary/readReference';\n\nexport default function readExpression(parser) {\n  // if eval is false, no expressions\n  if (parser.allowExpressions === false) {\n    const ref = readReference(parser);\n    parser.sp();\n    return ref;\n  }\n\n  // The conditional operator is the lowest precedence operator (except yield,\n  // assignment operators, and commas, none of which are supported), so we\n  // start there. If it doesn't match, it 'falls through' to progressively\n  // higher precedence operators, until it eventually matches (or fails to\n  // match) a 'primary' - a literal or a reference. This way, the abstract syntax\n  // tree has everything in its proper place, i.e. 2 + 3 * 4 === 14, not 20.\n  return readConditional(parser);\n}\n"",""import { expectedExpression } from './errors';\nimport readExpression from '../../readExpression';\nimport { spreadPattern } from './patterns';\n\nexport default function readExpressionList(parser, spread) {\n  let isSpread;\n  const expressions = [];\n\n  const pos = parser.pos;\n\n  do {\n    parser.sp();\n\n    if (spread) {\n      isSpread = parser.matchPattern(spreadPattern);\n    }\n\n    const expr = readExpression(parser);\n\n    if (expr === null && expressions.length) {\n      parser.error(expectedExpression);\n    } else if (expr === null) {\n      parser.pos = pos;\n      return null;\n    }\n\n    if (isSpread) {\n      expr.p = true;\n    }\n\n    expressions.push(expr);\n\n    parser.sp();\n  } while (parser.matchString(','));\n\n  return expressions;\n}\n"",""import { REFERENCE } from 'config/types';\nimport readExpression from './readExpression';\nimport readReference from './expressions/primary/readReference';\n\nexport default function readExpressionOrReference(parser, expectedFollowers) {\n  const start = parser.pos;\n  const expression = readExpression(parser);\n\n  if (!expression) {\n    // valid reference but invalid expression e.g. `{{new}}`?\n    const ref = parser.matchPattern(/^(\\w+)/);\n    if (ref) {\n      return {\n        t: REFERENCE,\n        n: ref\n      };\n    }\n\n    return null;\n  }\n\n  for (let i = 0; i < expectedFollowers.length; i += 1) {\n    if (parser.remaining().substr(0, expectedFollowers[i].length) === expectedFollowers[i]) {\n      return expression;\n    }\n  }\n\n  parser.pos = start;\n  return readReference(parser);\n}\n"",""import {\n  REFERENCE,\n  BOOLEAN_LITERAL,\n  GLOBAL,\n  NUMBER_LITERAL,\n  REGEXP_LITERAL,\n  STRING_LITERAL,\n  ARRAY_LITERAL,\n  OBJECT_LITERAL,\n  KEY_VALUE_PAIR,\n  PREFIX_OPERATOR,\n  INFIX_OPERATOR,\n  INVOCATION,\n  BRACKETED,\n  MEMBER,\n  REFINEMENT,\n  CONDITIONAL\n} from 'config/types';\nimport { isObject, isString } from 'utils/is';\n\nexport default function flattenExpression(expression) {\n  let refs;\n  let count = 0;\n\n  extractRefs(expression, (refs = []));\n  const stringified = stringify(expression);\n\n  return {\n    r: refs,\n    s: getVars(stringified)\n  };\n\n  function getVars(expr) {\n    const vars = [];\n    for (let i = count - 1; i >= 0; i--) {\n      vars.push(`x$${i}`);\n    }\n    return vars.length ? `(function(){var ${vars.join(',')};return(${expr});})()` : expr;\n  }\n\n  function stringify(node) {\n    if (isString(node)) {\n      return node;\n    }\n\n    switch (node.t) {\n      case BOOLEAN_LITERAL:\n      case GLOBAL:\n      case NUMBER_LITERAL:\n      case REGEXP_LITERAL:\n        return node.v;\n\n      case STRING_LITERAL:\n        return JSON.stringify(String(node.v));\n\n      case ARRAY_LITERAL:\n        if (node.m && hasSpread(node.m)) {\n          return `[].concat(${makeSpread(node.m, '[', ']', stringify)})`;\n        } else {\n          return '[' + (node.m ? node.m.map(stringify).join(',') : '') + ']';\n        }\n\n      case OBJECT_LITERAL:\n        if (node.m && hasSpread(node.m)) {\n          return `Object.assign({},${makeSpread(node.m, '{', '}', stringifyPair)})`;\n        } else {\n          return '{' + (node.m ? node.m.map(n => `${n.k}:${stringify(n.v)}`).join(',') : '') + '}';\n        }\n\n      case PREFIX_OPERATOR:\n        return (node.s === 'typeof' ? 'typeof ' : node.s) + stringify(node.o);\n\n      case INFIX_OPERATOR:\n        return (\n          stringify(node.o[0]) +\n          (node.s.substr(0, 2) === 'in' ? ' ' + node.s + ' ' : node.s) +\n          stringify(node.o[1])\n        );\n\n      case INVOCATION:\n        if (node.o && hasSpread(node.o)) {\n          const id = count++;\n          return `(x$${id}=${stringify(node.x)}).apply(x$${id},${stringify({\n            t: ARRAY_LITERAL,\n            m: node.o\n          })})`;\n        } else {\n          return stringify(node.x) + '(' + (node.o ? node.o.map(stringify).join(',') : '') + ')';\n        }\n\n      case BRACKETED:\n        return '(' + stringify(node.x) + ')';\n\n      case MEMBER:\n        return stringify(node.x) + stringify(node.r);\n\n      case REFINEMENT:\n        return node.n ? '.' + node.n : '[' + stringify(node.x) + ']';\n\n      case CONDITIONAL:\n        return stringify(node.o[0]) + '?' + stringify(node.o[1]) + ':' + stringify(node.o[2]);\n\n      case REFERENCE:\n        return '_' + refs.indexOf(node.n);\n\n      default:\n        throw new Error('Expected legal JavaScript');\n    }\n  }\n\n  function stringifyPair(node) {\n    return node.p ? stringify(node.k) : `${node.k}:${stringify(node.v)}`;\n  }\n\n  function makeSpread(list, open, close, fn) {\n    const out = list.reduce(\n      (a, c) => {\n        if (c.p) {\n          a.str += `${a.open ? close + ',' : a.str.length ? ',' : ''}${fn(c)}`;\n        } else {\n          a.str += `${!a.str.length ? open : !a.open ? ',' + open : ','}${fn(c)}`;\n        }\n        a.open = !c.p;\n        return a;\n      },\n      { open: false, str: '' }\n    );\n    if (out.open) out.str += close;\n    return out.str;\n  }\n}\n\nfunction hasSpread(list) {\n  for (let i = 0; i < list.length; i++) {\n    if (list[i].p) return true;\n  }\n\n  return false;\n}\n\n// TODO maybe refactor this?\nfunction extractRefs(node, refs) {\n  if (node.t === REFERENCE && isString(node.n)) {\n    if (!~refs.indexOf(node.n)) {\n      refs.unshift(node.n);\n    }\n  }\n\n  const list = node.o || node.m;\n  if (list) {\n    if (isObject(list)) {\n      extractRefs(list, refs);\n    } else {\n      let i = list.length;\n      while (i--) {\n        extractRefs(list[i], refs);\n      }\n    }\n  }\n\n  if (node.k && node.t === KEY_VALUE_PAIR && !isString(node.k)) {\n    extractRefs(node.k, refs);\n  }\n\n  if (node.x) {\n    extractRefs(node.x, refs);\n  }\n\n  if (node.r) {\n    extractRefs(node.r, refs);\n  }\n\n  if (node.v) {\n    extractRefs(node.v, refs);\n  }\n}\n"",""import { REFERENCE, BRACKETED, MEMBER, REFINEMENT } from 'config/types';\nimport flattenExpression from './flattenExpression';\n\nexport default function refineExpression(expression, mustache) {\n  let referenceExpression;\n\n  if (expression) {\n    while (expression.t === BRACKETED && expression.x) {\n      expression = expression.x;\n    }\n\n    if (expression.t === REFERENCE) {\n      const n = expression.n;\n      if (!~n.indexOf('@context')) {\n        mustache.r = expression.n;\n      } else {\n        mustache.x = flattenExpression(expression);\n      }\n    } else {\n      if ((referenceExpression = getReferenceExpression(expression))) {\n        mustache.rx = referenceExpression;\n      } else {\n        mustache.x = flattenExpression(expression);\n      }\n    }\n\n    return mustache;\n  }\n}\n\n// TODO refactor this! it's bewildering\nfunction getReferenceExpression(expression) {\n  const members = [];\n  let refinement;\n\n  while (expression.t === MEMBER && expression.r.t === REFINEMENT) {\n    refinement = expression.r;\n\n    if (refinement.x) {\n      if (refinement.x.t === REFERENCE) {\n        members.unshift(refinement.x);\n      } else {\n        members.unshift(flattenExpression(refinement.x));\n      }\n    } else {\n      members.unshift(refinement.n);\n    }\n\n    expression = expression.x;\n  }\n\n  if (expression.t !== REFERENCE) {\n    return null;\n  }\n\n  return {\n    r: expression.n,\n    m: members\n  };\n}\n"",""import { TRIPLE } from 'config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readTriple(parser, tag) {\n  const expression = readExpression(parser);\n\n  if (!expression) {\n    return null;\n  }\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  const triple = { t: TRIPLE };\n  refineExpression(expression, triple); // TODO handle this differently - it's mysterious\n\n  return triple;\n}\n"",""import { TRIPLE } from 'config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readUnescaped(parser, tag) {\n  if (!parser.matchString('&')) {\n    return null;\n  }\n\n  parser.sp();\n\n  const expression = readExpression(parser);\n\n  if (!expression) {\n    return null;\n  }\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  const triple = { t: TRIPLE };\n  refineExpression(expression, triple); // TODO handle this differently - it's mysterious\n\n  return triple;\n}\n"",""import { PARTIAL, YIELDER } from 'src/config/types';\nimport readExpression from '../readExpression';\nimport refineExpression from 'parse/utils/refineExpression';\nimport { readAliases } from './readAliases';\n\nexport default function readPartial(parser, tag) {\n  const type = parser.matchString('>') || parser.matchString('yield');\n  const partial = { t: type === '>' ? PARTIAL : YIELDER };\n  let aliases;\n\n  if (!type) return null;\n\n  parser.sp();\n\n  if (type === '>' || !(aliases = parser.matchString('with'))) {\n    // Partial names can include hyphens, so we can't use readExpression\n    // blindly. Instead, we use the `relaxedNames` flag to indicate that\n    // `foo-bar` should be read as a single name, rather than 'subtract\n    // bar from foo'\n    parser.relaxedNames = parser.strictRefinement = true;\n    const expression = readExpression(parser);\n    parser.relaxedNames = parser.strictRefinement = false;\n\n    if (!expression && type === '>') return null;\n\n    if (expression) {\n      refineExpression(expression, partial); // TODO...\n      parser.sp();\n      if (type !== '>') aliases = parser.matchString('with');\n    }\n  }\n\n  parser.sp();\n\n  // check for alias context e.g. `{{>foo bar as bat, bip as bop}}`\n  if (aliases || type === '>') {\n    aliases = readAliases(parser);\n    if (aliases && aliases.length) {\n      partial.z = aliases;\n    } else {\n      // otherwise check for literal context e.g. `{{>foo bar}}` then\n      // turn it into `{{#with bar}}{{>foo}}{{/with}}`\n      const context = readExpression(parser);\n      if (context) {\n        partial.c = {};\n        refineExpression(context, partial.c);\n      }\n    }\n\n    if (type !== '>' && (!partial.c && !partial.z)) {\n      // {{yield with}} requires some aliases\n      parser.error(`Expected a context or one or more aliases`);\n    }\n  }\n\n  parser.sp();\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}'`);\n  }\n\n  return partial;\n}\n"",""import { COMMENT } from 'src/config/types';\n\nexport default function readComment(parser, tag) {\n  if (!parser.matchString('!')) {\n    return null;\n  }\n\n  const index = parser.remaining().indexOf(tag.close);\n\n  if (index !== -1) {\n    parser.pos += index + tag.close.length;\n    return { t: COMMENT };\n  }\n}\n"",""import { INTERPOLATOR } from 'config/types';\nimport readExpressionOrReference from '../readExpressionOrReference';\nimport refineExpression from 'parse/utils/refineExpression';\n\nexport default function readInterpolator(parser, tag) {\n  let expression, err;\n\n  const start = parser.pos;\n\n  // TODO would be good for perf if we could do away with the try-catch\n  try {\n    expression = readExpressionOrReference(parser, [tag.close]);\n  } catch (e) {\n    err = e;\n  }\n\n  if (!expression) {\n    if (parser.str.charAt(start) === '!') {\n      // special case - comment\n      parser.pos = start;\n      return null;\n    }\n\n    if (err) {\n      throw err;\n    }\n  }\n\n  if (!parser.matchString(tag.close)) {\n    parser.error(`Expected closing delimiter '${tag.close}' after reference`);\n\n    if (!expression) {\n      // special case - comment\n      if (parser.nextChar() === '!') {\n        return null;\n      }\n\n      parser.error(`Expected expression or legal reference`);\n    }\n  }\n\n  const interpolator = { t: INTERPOLATOR };\n  refineExpression(expression, interpolator); // TODO handle this differently - it's mysterious\n\n  return interpolator;\n}\n"",""import { CLOSING } from 'config/types';\n\nexport default function readClosing(parser, tag) {\n  const start = parser.pos;\n\n  if (!parser.matchString(tag.open)) {\n    return null;\n  }\n\n  parser.sp();\n\n  if (!parser.matchString('/')) {\n    parser.pos = start;\n    return null;\n  }\n\n  parser.sp();\n\n  const remaining = parser.remaining();\n  const index = remaining.indexOf(tag.close);\n\n  if (index !== -1) {\n    const closing = {\n      t: CLOSING,\n      r: remaining.substr(0, index).split(' ')[0]\n    };\n\n    parser.pos += index;\n\n    if (!parser.matchString(tag.close)) {\n      parser.error(`Expected closing delimiter '${tag.close}'`);\n    }\n\n    return closing;\n  }\n\n  parser.pos = start;\n  return null;\n}\n"",""import { lastItem } from 'utils/array';\nimport { isString } from 'utils/is';\n\nexport default function(items, leadingPattern, trailingPattern) {\n  let item;\n\n  if (leadingPattern) {\n    item = items[0];\n    if (isString(item)) {\n      item = item.replace(leadingPattern, '');\n\n      if (!item) {\n        items.shift();\n      } else {\n        items[0] = item;\n      }\n    }\n  }\n\n  if (trailingPattern) {\n    item = lastItem(items);\n    if (isString(item)) {\n      item = item.replace(trailingPattern, '');\n\n      if (!item) {\n        items.pop();\n      } else {\n        items[items.length - 1] = item;\n      }\n    }\n  }\n}\n"",""export default function(camelCaseStr) {\n  return camelCaseStr.replace(/([A-Z])/g, (match, $1) => {\n    return '-' + $1.toLowerCase();\n  });\n}\n"",""import getLowestIndex from './utils/getLowestIndex';\nimport { decodeCharacterReferences } from 'utils/html';\n\nexport default function readText(parser) {\n  let index, disallowed, barrier;\n\n  const remaining = parser.remaining();\n\n  if (parser.textOnlyMode) {\n    disallowed = parser.tags.map(t => t.open);\n    disallowed = disallowed.concat(parser.tags.map(t => '\\\\' + t.open));\n\n    index = getLowestIndex(remaining, disallowed);\n  } else {\n    barrier = parser.inside ? '</' + parser.inside : '<';\n\n    if (parser.inside && !parser.interpolate[parser.inside]) {\n      index = remaining.indexOf(barrier);\n    } else {\n      disallowed = parser.tags.map(t => t.open);\n      disallowed = disallowed.concat(parser.tags.map(t => '\\\\' + t.open));\n\n      // http://developers.whatwg.org/syntax.html#syntax-attributes\n      if (parser.inAttribute === true) {\n        // we're inside an unquoted attribute value\n        disallowed.push(`\""`, `'`, `=`, `<`, `>`, '`');\n      } else if (parser.inAttribute) {\n        // quoted attribute value\n        disallowed.push(parser.inAttribute);\n      } else {\n        disallowed.push(barrier);\n      }\n\n      index = getLowestIndex(remaining, disallowed);\n    }\n  }\n\n  if (!index) {\n    return null;\n  }\n\n  if (index === -1) {\n    index = remaining.length;\n  }\n\n  parser.pos += index;\n\n  if ((parser.inside && parser.inside !== 'textarea') || parser.textOnlyMode) {\n    return remaining.substr(0, index);\n  } else {\n    return decodeCharacterReferences(remaining.substr(0, index));\n  }\n}\n"",""import { TEMPLATE_VERSION } from 'config/template';\nimport { READERS, PARTIAL_READERS } from 'parse/_parse';\nimport cleanup from 'parse/utils/cleanup';\nimport { create } from 'utils/object';\n\nexport default function readTemplate(parser) {\n  const fragment = [];\n  const partials = create(null);\n  let hasPartials = false;\n\n  const preserveWhitespace = parser.preserveWhitespace;\n\n  while (parser.pos < parser.str.length) {\n    const pos = parser.pos;\n    let item, partial;\n\n    if ((partial = parser.read(PARTIAL_READERS))) {\n      if (partials[partial.n]) {\n        parser.pos = pos;\n        parser.error('Duplicated partial definition');\n      }\n\n      cleanup(\n        partial.f,\n        parser.stripComments,\n        preserveWhitespace,\n        !preserveWhitespace,\n        !preserveWhitespace,\n        parser.whiteSpaceElements\n      );\n\n      partials[partial.n] = partial.f;\n      hasPartials = true;\n    } else if ((item = parser.read(READERS))) {\n      fragment.push(item);\n    } else {\n      parser.error('Unexpected template content');\n    }\n  }\n\n  const result = {\n    v: TEMPLATE_VERSION,\n    t: fragment\n  };\n\n  if (hasPartials) {\n    result.p = partials;\n  }\n\n  return result;\n}\n"",""import { fromExpression } from './createFunction';\nimport { isArray, isObject } from 'utils/is';\nimport { keys } from 'utils/object';\n\nexport default function insertExpressions(obj, expr) {\n  keys(obj).forEach(key => {\n    if (isExpression(key, obj)) return addTo(obj, expr);\n\n    const ref = obj[key];\n    if (hasChildren(ref)) insertExpressions(ref, expr);\n  });\n}\n\nfunction isExpression(key, obj) {\n  return key === 's' && isArray(obj.r);\n}\n\nfunction addTo(obj, expr) {\n  const { s, r } = obj;\n  if (!expr[s]) expr[s] = fromExpression(s, r.length);\n}\n\nfunction hasChildren(ref) {\n  return isArray(ref) || isObject(ref);\n}\n"",""import { fatal } from 'utils/log';\nimport bind from 'utils/bind';\nimport { createFunctionFromString } from '../config/runtime-parser';\nimport { isFunction, isString, isObjectType } from 'utils/is';\n\nexport default function getComputationSignature(ractive, key, signature) {\n  let getter;\n  let setter;\n\n  // useful for debugging\n  let getterString;\n  let getterUseStack;\n  let setterString;\n\n  if (isFunction(signature)) {\n    getter = bind(signature, ractive);\n    getterString = signature.toString();\n    getterUseStack = true;\n  }\n\n  if (isString(signature)) {\n    getter = createFunctionFromString(signature, ractive);\n    getterString = signature;\n  }\n\n  if (isObjectType(signature)) {\n    if (isString(signature.get)) {\n      getter = createFunctionFromString(signature.get, ractive);\n      getterString = signature.get;\n    } else if (isFunction(signature.get)) {\n      getter = bind(signature.get, ractive);\n      getterString = signature.get.toString();\n      getterUseStack = true;\n    } else {\n      fatal('`%s` computation must have a `get()` method', key);\n    }\n\n    if (isFunction(signature.set)) {\n      setter = bind(signature.set, ractive);\n      setterString = signature.set.toString();\n    }\n  }\n\n  return {\n    getter,\n    setter,\n    getterString,\n    setterString,\n    getterUseStack\n  };\n}\n""],""names"":[""splice"",""subtract"",""teardown"",""toggle"",""toCSS"",""toCss"",""toHTML"",""toHtml"",""toText"",""transition"",""unlink"",""unrender"",""unshift"",""update"",""updateModel"",""use"",""styles"",""callsSuper"",""defineProperties"",""Ractive"",""sharedGet"",""value"",""sharedSet"",""styleGet"",""configurable"",""bind"",""styleSet"",""addCSS"",""addStyle"",""hasCSS"",""hasStyle"",""win"",""let"",""opts"",""script"",""document"",""currentScript"",""querySelector"",""getAttribute"",""indexOf"",""warn"",""assign"",""prototype"",""proto"",""defaults"",""constructor"",""shared"",""DEBUG"",""writable"",""DEBUG_PROMISES"",""extend"",""extendWith"",""escapeKey"",""evalObjectString"",""parseJSON"",""findPlugin"",""getContext"",""getCSS"",""isInstance"",""joinKeys"",""macro"",""normaliseKeypath"",""normalise"",""parse"",""splitKeypath"",""unescapeKey"",""enhance"",""svg"",""VERSION"",""adaptors"",""components"",""decorators"",""easing"",""events"",""extensions"",""helpers"",""interpolators"",""partials"",""transitions"",""cssData"",""sharedData"",""Context"",""extern"",""defineProperty"",""CSSModel"",""get"",""this"",""fragment"",""rendered"",""select"",""removeFromArray"",""options"",""Element"",""Partial"",""create"",""MustacheContainer"",""const"",""template"",""yielder"",""container"",""up"",""ractive"",""component"",""containerFragment"",""Fragment"",""owner"",""r"",""x"",""rx"",""refName"",""fn"",""partialFromValue"",""partial"",""call"",""model"",""warnOnceIfDebug"",""createFragment"",""initMacro"",""bubble"",""dirty"",""findNextNode"",""handleChange"",""dirtyTemplate"",""externalChange"",""rebound"",""aliases"",""k"",""unreference"",""z"",""resolveAliases"",""_attrs"",""keys"",""forEach"",""refreshAttrs"",""handle"",""attributes"",""items"",""length"",""valueOf"",""resetTemplate"",""proxy"",""fnTemplate"",""isFunction"",""getPartialTemplate"",""unbindAttrs"",""render"",""runloop"",""scheduleTask"",""target"",""occupants"",""_cssDef"",""applied"",""applyCSS"",""unbind"",""view"",""shouldDestroy"",""updating"",""dirtyAttrs"",""invalidate"",""extras"",""KeyModel"",""context"",""instance"",""key"",""isReadonly"",""isKey"",""deps"",""links"",""children"",""KeyModel__proto__"",""applyValue"",""c"",""getKeypath"",""destroyed"",""upstream"",""unregisterChild"",""shouldCapture"",""capture"",""has"",""rebind"",""next"",""previous"",""i"",""relinking"",""register"",""dependant"",""push"",""registerChild"",""child"",""addToArray"",""registerLink"",""link"",""unregister"",""unregisterLink"",""reference"",""noop"",""keypathString"",""RepeatedFragment"",""parent"",""delegate"",""findDelegate"",""cssIds"",""iterations"",""indexRef"",""keyRef"",""pendingNewIndices"",""previousIterations"",""isArray"",""RepeatedFragment__proto__"",""bound"",""slice"",""shuffler"",""find"",""a"",""n"",""s"",""test"",""values"",""shuffleValues"",""source"",""isComputed"",""resolve"",""max"",""this$1"",""createIteration"",""isObject"",""refs"",""split"",""ks"",""map"",""index"",""bubbled"",""rebounding"",""isIteration"",""swizzleFragment"",""len"",""pathModel"",""rootModel"",""detach"",""docFrag"",""createDocumentFragment"",""appendChild"",""selector"",""findMap"",""findAll"",""findAllComponents"",""name"",""findComponent"",""findContext"",""iteration"",""node"",""firstNode"",""skipParent"",""getLast"",""lastModel"",""f"",""contextFor"",""xs"",""shuffle"",""newIndices"",""merge"",""newIndex"",""oldIndex"",""shouldRebind"",""shuffled"",""toString"",""escape"",""toEscapedString"",""join"",""updatePostShuffle"",""buildNewIndices"",""idxModel"",""toRemove"",""oldKeys"",""wasArray"",""reset"",""lastValue"",""i$1"",""newLength"",""updateLast"",""fragment$1"",""parentNode"",""findParentNode"",""anchor"",""insertBefore"",""nextNode"",""indices"",""idx"",""dest"",""pos"",""prev"",""iters"",""stash"",""Array"",""e"",""nextRendered"",""isObjectType"",""plen"",""Section"",""super"",""sectionType"",""templateSectionType"",""subordinate"",""l"",""Section__proto__"",""sibling"",""nextSibling"",""SECTION_UNLESS"",""isTruthy"",""frag"",""detached"",""isRoot"",""undefined"",""SECTION_IF_WITH"",""isEmpty"",""safe"",""SECTION_IF"",""SECTION_WITH"",""SECTION_EACH"",""siblingFalsey"",""lastType"",""getType"",""newFragment"",""fragmentShouldExist"",""attach"",""keep"",""promise"",""then"",""Select"",""Select__proto__"",""foundNode"",""binding"",""selectedOptions"",""getSelectedOptions"",""sync"",""defaultSelected"",""selected"",""selectNode"",""toArray"",""o"",""setFromNode"",""selectValue"",""isMultiple"",""array"",""optionWasSelected"",""optionValue"",""_ractive"",""shouldSelect"",""valueContains"",""compare"",""forceUpdate"",""comparator"",""Textarea"",""Input"",""deferContent"",""attributeByName"",""isBindable"",""createItem"",""t"",""ATTRIBUTE"",""Textarea__proto__"",""Text"",""Item"",""type"",""TEXT"",""Text__proto__"",""detachNode"",""inAttributes"",""progressiveText"",""escapeHtml"",""visible"",""hidden"",""doc"",""prefix"",""vendors"",""vendor"",""addEventListener"",""onChange"",""onHide"",""onShow"",""isClient"",""prefixCache"",""testStyle"",""createElement"",""style"",""prop"",""hyphenateCamel"",""createTransitions"",""prefix$1"",""vendorPattern"",""RegExp"",""TRANSITION"",""TRANSITIONEND"",""CSS_TRANSITIONS_ENABLED"",""TRANSITION_DURATION"",""TRANSITION_PROPERTY"",""TRANSITION_TIMING_FUNCTION"",""linear"",""canUseCssTransitions"",""cannotUseCssTransitions"",""webkitTransition"",""to"",""changedProperties"",""setTimeout"",""transitionDone"",""clearTimeout"",""cssTimeout"",""checkComplete"",""jsTransitionsComplete"",""cssTransitionsComplete"",""unregisterCompleteHandler"",""fire"",""isIntro"",""transitionEndHandler"",""event"",""propertyName"",""cssTransitionsDone"",""property"",""duration"",""timing"",""removeEventListener"",""hashPrefix"",""namespaceURI"",""tagName"",""delay"",""registerCompleteHandler"",""easingName"",""hyphenate"",""cssTiming"",""hash"",""suffix"",""interpolator"",""originalValue"",""propertiesToTransitionInJs"",""initial"",""getStyle"",""warnIfDebug"",""exec"",""interpolate"",""parseFloat"",""isString"",""missingPlugin"",""Ticker"",""step"",""complete"",""createTransitions$1"",""getComputedStyle"",""resolved"",""Promise"",""names"",""t0"",""t1"",""t2"",""Transition"",""findElement"",""element"",""onComplete"",""Transition__proto__"",""animateStyle"",""arguments"",""Error"",""setStyle"",""fulfil"",""propertyNames"",""computedStyle"",""current"",""init"",""originals"",""targets"",""v"",""intro"",""outro"",""eventName"",""params"",""_fn"",""findInViewHierarchy"",""setupArgsFn"",""getParams"",""resolveArgs"",""apply"",""props"",""processParams"",""isNumber"",""hasOwn"",""shouldFire"",""transitionsEnabled"",""rendering"",""nearestProp"",""unrendering"",""nested"",""el"",""starting"",""start"",""completed"",""args"",""noReset"",""_manager"",""remove"",""concat"",""unbinding"",""ieBug"",""ieBlacklist"",""elementCache"",""innerHTML"",""err"",""TABLE"",""THEAD"",""TBODY"",""TR"",""SELECT"",""Triple"",""Mustache"",""Triple__proto__"",""nodes"",""nodeType"",""matches"",""queryResult"",""result"",""queryAllResult"",""querySelectorAll"",""html"",""insertHtml"",""shift"",""outerHTML"",""nodeValue"",""removeChild"",""inAttribute"",""decodeCharacterReferences"",""detachWhenReady"",""constructors"",""ALIAS"",""Alias"",""ANCHOR"",""Component"",""AWAIT"",""Await"",""DOCTYPE"",""Doctype"",""INTERPOLATOR"",""Interpolator"",""PARTIAL"",""SECTION"",""TRIPLE"",""YIELDER"",""Attribute"",""BINDING_FLAG"",""BindingFlag"",""DECORATOR"",""Decorator"",""EVENT"",""EventDirective"",""COMMENT"",""Comment"",""specialElements"",""doctype"",""form"",""Form"",""input"",""option"",""Option"",""textarea"",""componentParent"",""dirtyValue"",""createItems"",""Fragment__proto__"",""addFragment"",""base"",""findParentWithContext"",""viewmodel"",""item"",""it"",""ELEMENT"",""getKey"",""keyModel"",""getIndex"",""root"",""wasBound"",""wasRendered"",""addFragmentToRoot"",""processItems"",""_guid"",""parsed"",""shouldRerender"",""reverse"",""makeArrayMethod"",""path"",""sort"",""add"",""animate"",""attachChild"",""compute"",""detachChild"",""findContainer"",""findParent"",""insert"",""observe"",""observeOnce"",""off"",""on"",""once"",""pop"",""readLink"",""resetPartial"",""set"",""eventHandlers"",""callRender"",""Component__proto__"",""isolated"",""isAnchor"",""unrenderItem"",""checking"",""checkAnchors"",""missingDecorator"",""Decorator__proto__"",""models"",""rebindMatch"",""addShuffleRegister"",""teardownArgsFn"",""warnOnce"",""Doctype__proto__"",""Binding"",""attribute"",""twowayBinding"",""setRoot"",""keypath"",""replace"",""isTwoway"",""wasUndefined"",""getInitialValue"",""lastVal"",""parentForm"",""resetValue"",""formBindings"",""Binding__proto__"",""registerTwowayBinding"",""getValue"",""locked"",""end"",""setting"",""unregisterTwowayBinding"",""CheckboxBinding"",""CheckboxBinding__proto__"",""handleDomEvent"",""attachEvent"",""checked"",""BindingGroup"",""bindings"",""BindingGroup__proto__"",""CheckboxNameBinding"",""checkboxName"",""group"",""getBindingGroup"",""noInitialValue"",""existingValue"",""bindingValue"",""arrayContains"",""CheckboxNameBinding__proto__"",""isChecked"",""valueSoFar"",""ContentEditableBinding"",""ContentEditableBinding__proto__"",""lazy"",""GenericBinding"",""GenericBinding__proto__"",""timeout"",""isNumeric"",""handler"",""handleDelay"",""handleBlur"",""FileBinding"",""FileBinding__proto__"",""files"",""MultipleSelectBinding"",""MultipleSelectBinding__proto__"",""filter"",""selectedValues"",""previousValue"",""arrayContentsMatch"",""NumericBinding"",""NumericBinding__proto__"",""isNaN"",""siblings"",""RadioBinding"",""getSiblings"",""RadioBinding__proto__"",""RadioNameBinding"",""pathChanged"",""updateName"",""RadioNameBinding__proto__"",""SingleSelectBinding"",""SingleSelectBinding__proto__"",""disabled"",""endsWithSemi"",""ContainerItem"",""toLowerCase"",""attrs"",""attr"",""val"",""cls"",""leftovers"",""m"",""g"",""statics"",""DELEGATE_FLAG"",""ConditionalAttribute"",""Element__proto__"",""recreateTwowayBinding"",""createTwowayBinding"",""twoway"",""selectBinding"",""ref"",""assigns"",""ctx"",""callback"",""listeners"",""delegateHandler"",""rem"",""namespace"",""getNamespace"",""existing"",""nodeName"",""toUpperCase"",""setAttribute"",""isOutro"",""registerTransition"",""childNodes"",""removeAttribute"",""ls"",""stringifyAttribute"",""isSelected"",""inputIsCheckedRadio"",""safeAttributeString"",""getString"",""inlineClass"",""str"",""voidElements"",""UIEvent"",""Form__proto__"",""handleReset"",""DOMEvent"",""fatal"",""DOMEvent__proto__"",""directive"",""original"",""CustomEvent"",""eventPlugin"",""CustomEvent__proto__"",""RactiveEvent"",""RactiveEvent__proto__"",""cancel"",""specialPattern"",""dollarArgsPattern"",""EventDirective__proto__"",""COMPONENT"",""rs"",""resolveReference"",""getFunction"",""message"",""action"",""refire"",""specialRef"",""specialMatch"",""special"",""substr"",""dollarMatch"",""obj"",""which"",""wrapper"",""wrapperValue"",""oldEvent"",""returned"",""preventDefault"",""stopPropagation"",""fireEvent"",""isStatic"",""Mustache__proto__"",""pre"",""y"",""Object"",""Interpolator__proto__"",""safeToStringValue"",""string"",""data"",""Input__proto__"",""defaultValue"",""attrValue"",""specials"",""true"",""false"",""null"",""specialsPattern"",""numberPattern"",""placeholderPattern"",""placeholderAtStartPattern"",""onlyWhitespace"",""JsonParser"",""Parser"",""sp"",""postProcess"",""leftover"",""converters"",""parser"",""placeholder"",""matchPattern"",""number"",""stringLiteral"",""readStringLiteral"",""match"",""$1"",""matchString"",""pair"",""getKeyValuePair"",""valueToken"",""read"",""Mapping"",""Mapping__proto__"",""joinKey"",""createMapping"",""boundFragment"",""joinAll"",""mapping"",""Option__proto__"",""selectedAttribute"",""Context__proto__"",""findModel"",""here"",""_link"",""unlisten"",""modelUnshift"",""protoUpdate"",""cascade"",""updateFromBindings"",""isBound"",""getBindingModel"",""getBindingPath"",""getBinding"",""setBinding"",""prototypeAccessors"",""forRactive"",""getRactiveContext"",""div"",""methodNames"",""unprefixed"",""prefixed"",""j"",""makeFunction"",""query"",""mathml"",""xlink"",""xml"",""xmlns"",""namespaces"",""ns"",""createElementNS"",""methodName"",""substring"",""cloneNode"",""Observer"",""old"",""oldContext"",""oldFn"",""dispatch"",""updateOld"",""Observer__proto__"",""cancelled"",""resolver"",""_observers"",""newValue"",""oldValue"",""isEqual"",""strict"",""addObserver"",""defer"",""addShuffleTask"",""star"",""PatternObserver"",""baseModel"",""pattern"",""baseKeypath"",""recursive"",""oldValues"",""newValues"",""changed"",""findMatches"",""registerPatternObserver"",""PatternObserver__proto__"",""unregisterPatternObserver"",""wildcards"",""notify"",""touchedFrom"",""count"",""isLink"",""ok"",""check"",""ArrayObserver"",""pending"",""sliced"",""ArrayObserver__proto__"",""negativeOne"",""inserted"",""deleted"",""hadIndex"",""onceOptions"",""trim"",""notEmptyString"",""PREFIX"",""styleDefinitions"",""isDirty"",""styleElement"",""useCssText"",""adaptConfigurator"",""Parent"",""adapt"",""combine"",""ensureArray"",""selectorsPattern"",""importPattern"",""importEndPattern"",""keyframesDeclarationPattern"",""selectorUnitPattern"",""excludePattern"",""dataRvcGuidPattern"",""SharedModel"",""CSSModel__proto__"",""downstreamChanged"",""depth"",""_cssModel"",""mark"",""applyChanges"",""hasCurly"",""cssConfigurator"",""Child"",""_cssIds"",""gatherIds"",""css"",""initCSS"",""dataConfigurator"",""_r_unbound"",""templateConfigurator"",""parseTemplate"",""TEMPLATE_VERSION"",""getDynamicTemplate"",""_config"",""p"",""extendPartials"",""registryNames"",""registriesOnDefaults"",""Registry"",""useDefaults"",""Registry__proto__"",""configure"",""registry"",""addFunctions"",""isOwner"",""registries"",""putInDefaults"",""config"",""order"",""custom"",""computed"",""defaultKeys"",""isStandardKey"",""makeObj"",""isBlacklisted"",""_super"",""Item__proto__"",""ContainerItem__proto__"",""ComputationChild"",""Model"",""syncComputedChildren"",""prototypeAccessors$1"",""ComputationChild__proto__"",""dependencies"",""parentValue"",""newWrapperValue"",""unwrap"",""boundValue"",""marked"",""childByKey"",""Computation"",""signature"",""setter"",""prototypeAccessors$2"",""Computation__proto__"",""active"",""notifyUpstream"",""maybeBind"",""shouldBind"",""noVirtual"",""startCapturing"",""getter"",""hasConsole"",""console"",""groupCollapsed"",""sig"",""error"",""getterUseStack"",""stack"",""groupEnd"",""stopCapturing"",""setDependencies"",""ExpressionProxy"",""allowExpressions"",""ExpressionProxy__proto__"",""actuallyChanged"",""d"",""retrieve"",""collect"",""dep"",""computation"",""ReferenceExpressionProxy"",""LinkModel"",""rootLink"",""ReferenceExpressionProxy__proto__"",""members"",""Missing"",""tpl"",""REFERENCE"",""reduce"",""list"",""String"",""fireShuffleTasks"",""refreshPathDeps"",""eproto"",""Alias__proto__"",""space"",""textTypes"",""accept-charset"",""accesskey"",""bgcolor"",""class"",""codebase"",""colspan"",""contenteditable"",""datetime"",""dirname"",""for"",""http-equiv"",""ismap"",""maxlength"",""novalidate"",""pubdate"",""readonly"",""rowspan"",""tabindex"",""usemap"",""ConditionalAttribute__proto__"",""isSvg"",""parseAttributes"",""notIn"",""updateDelegate"",""Attribute__proto__"",""booleanAttributes"",""useProperty"",""isBoolean"",""lookupNamespace"",""getUpdateDelegate"",""flag"",""bubbler"",""BindingFlag__proto__"",""createComment"",""RactiveModel"",""RactiveModel__proto__"",""initLink"",""specialModels"",""@this"",""getRactiveModel"",""@global"",""GlobalModel"",""@shared"",""@style"",""@helpers"",""getHelpers"",""RootModel"",""RootModel__proto__"",""attached"",""attachImplicits"",""createLink"",""targetPath"",""detachImplicits"",""virtual"",""getVirtual"",""SharedBase"",""ractiveModel"",""getValueChildren"",""unescapedKey"",""shouldTeardown"",""protoRegistries"",""uid"",""ComponentConstructor"",""content"",""_partials"",""addChild"",""construct"",""mappings"",""_inlinePartials"",""initialise"",""early"",""registerQueue"",""ModelBase"",""ModelBase__proto__"",""task"",""stage"",""shuffleTasks"",""existingMatches"",""loop"",""objectKeys"",""lastLink"",""startPath"",""patterns"",""notifiedUpstream"",""observer"",""oneway"",""findBoundValue"",""captureGroup"",""shufle"",""sourcePath"",""LinkModel__proto__"",""from"",""isDetached"",""force"",""markedAll"",""relinked"",""shuffling"",""lnk"",""implicit"",""ln"",""functions"",""leadingWhitespace"",""ParseError"",""lineStart"",""lines"",""lineEnds"",""line"",""lineEnd"",""remaining"",""getContextMessage"",""getLinePos"",""lineNum"",""columnNum"",""contextLines"",""contextUp"",""contextDown"",""numTabs"",""annotation"",""char"",""msg"",""character"",""shortMessage"",""nextChar"",""charAt"",""readTypeOf"",""INVERTED"",""CLOSING"",""DELIMCHANGE"",""CLOSING_TAG"",""INLINE_PARTIAL"",""NUMBER_LITERAL"",""STRING_LITERAL"",""ARRAY_LITERAL"",""OBJECT_LITERAL"",""BOOLEAN_LITERAL"",""REGEXP_LITERAL"",""GLOBAL"",""KEY_VALUE_PAIR"",""REFINEMENT"",""MEMBER"",""PREFIX_OPERATOR"",""BRACKETED"",""CONDITIONAL"",""INFIX_OPERATOR"",""INVOCATION"",""ELSE"",""ELSEIF"",""THEN"",""CATCH"",""delimiterChangePattern"",""whitespacePattern"",""regexpPattern"",""regExpCache"",""allowfullscreen"",""async"",""autofocus"",""autoplay"",""compact"",""controls"",""declare"",""default"",""defaultchecked"",""defaultmuted"",""defaultselected"",""enabled"",""formnovalidate"",""indeterminate"",""inert"",""itemscope"",""multiple"",""muted"",""nohref"",""noresize"",""noshade"",""nowrap"",""open"",""pauseonexit"",""required"",""reversed"",""scoped"",""seamless"",""sortable"",""translate"",""truespeed"",""typemustmatch"",""area"",""br"",""col"",""command"",""embed"",""hr"",""img"",""keygen"",""meta"",""param"",""track"",""wbr"",""htmlEntities"",""quot"",""amp"",""apos"",""lt"",""gt"",""nbsp"",""iexcl"",""cent"",""pound"",""curren"",""yen"",""brvbar"",""sect"",""uml"",""copy"",""ordf"",""laquo"",""not"",""shy"",""reg"",""macr"",""deg"",""plusmn"",""sup2"",""sup3"",""acute"",""micro"",""para"",""middot"",""cedil"",""sup1"",""ordm"",""raquo"",""frac14"",""frac12"",""frac34"",""iquest"",""Agrave"",""Aacute"",""Acirc"",""Atilde"",""Auml"",""Aring"",""AElig"",""Ccedil"",""Egrave"",""Eacute"",""Ecirc"",""Euml"",""Igrave"",""Iacute"",""Icirc"",""Iuml"",""ETH"",""Ntilde"",""Ograve"",""Oacute"",""Ocirc"",""Otilde"",""Ouml"",""times"",""Oslash"",""Ugrave"",""Uacute"",""Ucirc"",""Uuml"",""Yacute"",""THORN"",""szlig"",""agrave"",""aacute"",""acirc"",""atilde"",""auml"",""aring"",""aelig"",""ccedil"",""egrave"",""eacute"",""ecirc"",""euml"",""igrave"",""iacute"",""icirc"",""iuml"",""eth"",""ntilde"",""ograve"",""oacute"",""ocirc"",""otilde"",""ouml"",""divide"",""oslash"",""ugrave"",""uacute"",""ucirc"",""uuml"",""yacute"",""thorn"",""yuml"",""OElig"",""oelig"",""Scaron"",""scaron"",""Yuml"",""fnof"",""circ"",""tilde"",""Alpha"",""Beta"",""Gamma"",""Delta"",""Epsilon"",""Zeta"",""Eta"",""Theta"",""Iota"",""Kappa"",""Lambda"",""Mu"",""Nu"",""Xi"",""Omicron"",""Pi"",""Rho"",""Sigma"",""Tau"",""Upsilon"",""Phi"",""Chi"",""Psi"",""Omega"",""alpha"",""beta"",""gamma"",""delta"",""epsilon"",""zeta"",""eta"",""theta"",""iota"",""kappa"",""lambda"",""mu"",""nu"",""xi"",""omicron"",""pi"",""rho"",""sigmaf"",""sigma"",""tau"",""upsilon"",""phi"",""chi"",""psi"",""omega"",""thetasym"",""upsih"",""piv"",""ensp"",""emsp"",""thinsp"",""zwnj"",""zwj"",""lrm"",""rlm"",""ndash"",""mdash"",""lsquo"",""rsquo"",""sbquo"",""ldquo"",""rdquo"",""bdquo"",""dagger"",""Dagger"",""bull"",""hellip"",""permil"",""prime"",""Prime"",""lsaquo"",""rsaquo"",""oline"",""frasl"",""euro"",""image"",""weierp"",""real"",""trade"",""alefsym"",""larr"",""uarr"",""rarr"",""darr"",""harr"",""crarr"",""lArr"",""uArr"",""rArr"",""dArr"",""hArr"",""forall"",""part"",""exist"",""empty"",""nabla"",""isin"",""notin"",""ni"",""prod"",""sum"",""minus"",""lowast"",""radic"",""infin"",""ang"",""and"",""or"",""cap"",""cup"",""int"",""there4"",""sim"",""cong"",""asymp"",""ne"",""equiv"",""le"",""ge"",""sub"",""sup"",""nsub"",""sube"",""supe"",""oplus"",""otimes"",""perp"",""sdot"",""lceil"",""rceil"",""lfloor"",""rfloor"",""lang"",""rang"",""loz"",""spades"",""clubs"",""hearts"",""diams"",""controlCharacters"",""entityPattern"",""codePointSupport"",""fromCodePoint"",""codeToChar"",""fromCharCode"",""lessThan"",""greaterThan"",""invalid"",""expectedExpression"",""expectedParen"",""stringMiddlePattern"",""escapeSequencePattern"",""lineContinuationPattern"",""singleMatcher"",""makeQuotedStringMatcher"",""doubleMatcher"",""escapes"",""spreadPattern"",""legalReference"",""relaxedName"",""identifier"",""globals"",""keywords"",""prefixPattern"",""makePrefixSequenceMatcher"",""symbol"",""fallthrough"",""expression"",""readExpression"",""matcher"",""prefixOperators"",""readMemberOrInvocation"",""readLogicalOr"",""readTypeof"",""makeInfixSequenceMatcher"",""inUnquotedAttribute"",""left"",""right"",""infixOperators"",""readLogicalOr$1"",""attributeNamePattern"",""onPattern"",""eventPattern"",""reservedEventNames"",""decoratorPattern"",""transitionPattern"",""boundPattern"",""directives"",""no-delegation"",""unquotedAttributeValueTextPattern"",""proxyEvent"",""whitespace"",""slashes"",""delimiterChangeToken"",""exclude"",""legalAlias"",""asRE"",""else"",""elseif"",""catch"",""types"",""handlebarsBlockCodes"",""each"",""if"",""with"",""unless"",""indexRefPattern"",""keyIndexRefPattern"",""handlebarsBlockPattern"",""OPEN_COMMENT"",""CLOSE_COMMENT"",""leadingLinebreak"",""trailingLinebreak"",""contiguousWhitespace"",""trailingWhitespace"",""leadingNewLine"",""trailingNewLine"",""closingTagPattern"",""tagNamePattern"",""anchorPattern"",""validTagNameFollower"",""semiEnd"",""disallowedContents"",""li"",""dt"",""dd"",""rt"",""rp"",""optgroup"",""thead"",""tbody"",""tfoot"",""tr"",""td"",""th"",""inlines"",""partialDefinitionSectionPattern"",""STANDARD_READERS"",""readPartial"",""readUnescaped"",""readSection"",""readInterpolator"",""readMustacheComment"",""TRIPLE_READERS"",""readTriple"",""READERS"",""readMustache"",""readHtmlComment"",""readElement"",""readText"",""PARTIAL_READERS"",""readPartialDefinitionSection"",""preserveWhitespaceElements"",""defaultInterpolate"",""StandardParser"",""tripleDelimiters"",""staticDelimiters"",""staticTripleDelimiters"",""standardDelimiters"",""delimiters"",""tags"",""isTriple"",""close"",""readers"",""sortMustacheTags"",""sectionDepth"",""elementStack"",""sanitize"",""elements"",""eventAttributes"",""stripComments"",""preserveWhitespace"",""sanitizeElements"",""sanitizeEventAttributes"",""includeLinePositions"",""textOnlyMode"",""csp"",""inTag"",""whiteSpaceElements"",""parserResult"",""expr"",""flattenExpression"",""fromExpression"",""cleanup"",""insertExpressions"",""readTemplate"",""b"",""parseOptions"",""TEMPLATE_INSTRUCTIONS"",""COMPUTATION_INSTRUCTIONS"",""fromId"",""id"",""noThrow"",""getElementById"",""textContent"",""isParsed"",""getParseOptions"",""throwNoParse"",""parseFor"",""TransitionManager"",""intros"",""outros"",""totalChildren"",""outroChildren"",""detachQueue"",""outrosComplete"",""TransitionManager__proto__"",""checkStart"",""started"",""decrementOutros"",""decrementTotal"",""detachNodes"",""ready"",""detachImmediate"",""batch"",""fulfilPromise"",""previousBatch"",""transitionManager"",""fragments"",""tasks"",""immediateObservers"",""deferredObservers"",""flushChanges"",""thing"",""postRender"",""_batch"",""tickers"",""running"",""performance"",""now"",""requestAnimationFrame"",""tick"",""Ticker__proto__"",""elapsed"",""eased"",""stop"",""abort"",""prefixers"",""ticker"",""Model__proto__"",""rewrap"",""createBranch"",""adaptor"",""wrap"",""getPrefixer"",""__model"",""isObjectLike"",""getComputationSignature"",""branch"",""markForce"",""recreateArray"",""unsafe"",""SharedModel__proto__"",""SharedModel$1"",""FakeFragment"",""deepOpts"",""comparators"",""errorMessage"",""initStars"",""bubbleStars"",""Hook"",""method"",""arg"",""HookQueue"",""hook"",""inProcess"",""queue"",""HookQueue__proto__"",""begin"",""getChildQueue"",""hooks"",""arrayProto"",""modelPush"",""modelPop"",""modelShift"",""modelSort"",""modelSplice"",""modelReverse"",""ContextData"",""ContextData__proto__"",""_data"",""num"",""build"",""protoAnimate"",""getParent"",""hasListener"",""findEvent"",""there"",""listen"",""raise"",""ev"",""drop"",""_marking"",""mdl"",""subscribe"",""subs"",""toPairs"",""single"",""welcome"",""initialiseProperties"",""handleAttributes"",""onconstruct"",""_attributePartial"",""getAdaptors"",""protoAdapt"",""lookup"",""srcs"",""_subs"",""_nsSubs"",""_eventQueue"",""_children"",""byName"",""all"",""optional"",""mapAll"",""nameOption"",""renderItem"",""contains"",""lastBound"",""updateAnchors"",""res"",""isBindableByValue"",""isBindableByContentEditable"",""isContentEditable"",""isBindableByName"",""isBindableByChecked"",""nameAttr"",""currentTarget"",""endEl"",""correspondingUseElement"",""text"",""splitText"",""createTextNode"",""readKey"",""childData"",""getPartialFromRegistry"",""fillGaps"",""findParentPartial"",""findInstance"",""noRegistryFunctionReturn"",""findOwner"",""findConstructor"",""self"",""contextifyTemplate"",""okToParse"",""parsePartial"",""setTemplate"",""initing"",""aliasLocal"",""findFirstNode"",""out"",""frags"",""section"",""hasIndexRef"",""selectedOption"",""selectedIndex"",""firstChild"",""getComponentConstructor"",""asyncProxy"",""cmp"",""extract"",""success"",""undef"",""ctor"",""guid"",""counter"",""placeholderId"",""newModel"",""userOptions"",""getElement"",""append"",""logIfDebug"",""cssId"",""__ractive_instances__"",""torndown"",""Ractive$render"",""others"",""Ractive$reset"",""rerender"",""changes"",""collection"",""Ractive$resetTemplate"",""external"",""Ractive$set"",""Ractive$subtract"",""Ractive$toggle"",""TypeError"",""badArguments"",""gather"",""Ractive$toCSS"",""uniqueCssIds"",""ids"",""Ractive$toHTML"",""Ractive$transition"",""HTMLElement"",""Ractive$unrender"",""Ractive$updateModel"",""plugins"",""object"",""buildCSS"",""transform"",""recomputeCSS"",""extendOne"",""Class"",""Target"",""_on"",""_observe"",""splitKeypathI"",""sourcesLength"",""sources"",""nextSource"",""nextKey"",""hasOwnProperty"",""thisArg"",""arrayLength"",""window"",""Node"",""nowOffset"",""Date"",""global"",""implementation"",""hasFeature"",""PENDING"",""FULFILLED"",""REJECTED"",""dispatchHandlers"",""fulfilledHandlers"",""rejectedHandlers"",""state"",""makeResolver"",""newState"",""makeDispatcher"",""wait"",""fulfill"",""reject"",""onFulfilled"",""onRejected"",""promise2"",""processResolutionHandler"",""handlers"",""forward"",""p1result"",""finally"",""promises"",""processPromise"",""race"",""fail"",""reason"",""called"",""resolvePromise"",""rejectPromise"",""cancelAnimationFrame"",""lastTime"",""currentTime"",""timeToNextCall"",""Math"",""log"",""printWarning"",""resolveInstanceMembers"",""warnAboutAmbiguity"",""noIntro"",""noOutro"",""nestedTransitions"",""noCSSTransform"",""easeIn"",""pow"",""easeOut"",""easeInOut"",""alreadyWarned"",""welcomeIntro"",""welcomeMessage"",""WELCOME_MESSAGE"",""hasGroup"",""intermediate"",""min"",""properties"",""refPattern"",""splitPattern"",""escapeKeyPattern"",""unescapeKeyPattern"",""fnBind"",""Function"",""repeater"",""findIter"",""ContextModel"",""findMacro"",""shouldWarn"",""crossed"",""badReference"",""initialFragment"",""_fakeFragment"",""pairs"",""deep"",""deepSet"",""getComparator"",""sets"",""Ractive$add"",""immediate"",""getOptions"",""Ractive$animate"",""enqueue"",""dequeue"",""variants"",""parts"",""eventNames"",""fireEventAs"",""initialFire"",""notifySubscribers"",""fullName"",""subscribers"",""originalEvent"",""stopEvent"",""hookQueue"",""childQueue"",""findAnchors"",""findAnchorsIn"",""anchors"",""idxs"",""unrenderChild"",""prepend"",""insertAt"",""rm"",""attachchild"",""last"",""Ractive$compute"",""comp"",""first"",""Ractive$detach"",""detachchild"",""Ractive$find"",""remote"",""Ractive$findAll"",""Ractive$findAllComponents"",""Ractive$findComponent"",""Ractive$findContainer"",""Ractive$findParent"",""orComponent"",""getNewIndices"",""spliceArguments"",""getSpliceEquivalent"",""balance"",""removeStart"",""removeEnd"",""startIndex"",""Ractive$update"",""Ractive$fire"",""Ractive$get"",""instances"",""staticContext"",""output"",""Ractive$insert"",""fireInsertHook"",""src"",""isUpstream"",""fresh"",""vals"",""olds"",""observers"",""silent"",""caller"",""keypaths"",""createObserver"",""isSilenced"",""silence"",""resume"",""wildcardIndex"",""double"",""Ractive$off"",""entry"",""Ractive$on"",""Ractive$once"",""listener"",""canonical"",""styleDefinition"",""styleSheet"",""cssText"",""filteredStyleDefinitions"",""getElementsByTagName"",""cleanCss"",""additionalReplaceRules"",""reconstruct"",""extractString"",""unit"",""transformSelector"",""selectorUnits"",""modifiers"",""transformed"",""appended"",""prepended"",""transformCss"",""dataAttr"",""selectors"",""s4"",""floor"",""random"",""uuid"",""setCSSData"",""local"",""def"",""evalCSS"",""transformCSS"",""__proto__"",""cssProp"",""noCssTransform"",""validate"",""emptyData"",""childValue"",""parentIsFn"",""childIsFn"",""callDataFunction"",""fromProperties"",""primary"",""secondary"",""parseAsString"",""existingPartials"",""newPartials"",""overwrite"",""superMethod"",""getSuperMethod"",""_parent"",""hasSuper"",""oldSuper"",""_method"",""getMessage"",""deprecated"",""correct"",""isError"",""deprecateOption"",""deprecatedOption"",""deprecate"",""extendOtherMethods"",""member"",""RactiveProto"",""wrapPrototype"",""readStyle"",""rule"",""rules"",""readClass"",""updateMultipleSelectValue"",""updateSelectValue"",""updateStringValue"",""updateContentEditableValue"",""updateRadioValue"",""updateValue"",""updateRadioName"",""updateCheckboxName"",""updateStyleAttribute"",""updateInlineStyle"",""updateClassName"",""updateInlineClass"",""updateBoolean"",""updateNamespacedAttribute"",""updateAttribute"",""wasSelected"",""wasChecked"",""safeValue"",""valueAttribute"",""setProperty"",""getPropertyValue"",""className"",""baseVal"",""getAttributeNS"",""removeAttributeNS"",""setAttributeNS"",""haystack"",""needle"",""qualified"",""hasAttribute"",""Ractive$teardown"",""getPromise"",""destruct"",""isFinite"",""format"",""registryName"",""interpol"",""lastItem"",""arrays"",""arrayLike"",""one"",""two"",""oldArray"",""newArray"",""oldLength"",""usedIndices"",""firstUnusedIndex"",""isKeypath"",""findAlias"",""alias"",""body"",""createFunction"",""exp"",""readDelimiterChange"",""opening"",""closing"",""readNumberLiteral"",""escapeRegExp"",""getLowestIndex"",""needles"",""search"",""entity"",""code"",""parseInt"",""validateCode"",""readBooleanLiteral"",""okQuote"",""literal"",""done"",""charCodeAt"",""JSON"",""quote"",""escapeChar"",""readTemplateStringLiteral"",""token"",""namePattern"",""readKeyValuePair"",""spread"",""refKey"",""readKeyValuePairs"",""keyValuePairs"",""readObjectLiteral"",""readArrayLiteral"",""expressionList"",""readExpressionList"",""readLiteral"",""readRegexpLiteral"",""readReference"",""lastDotIndex"",""startPos"",""relaxedNames"",""actual"",""inEvent"",""lastIndexOf"",""refLength"",""readBracketedExpression"",""readPrimary"",""readRefinement"",""strictRefinement"",""refinement"",""getConditional"",""ifTrue"",""ifFalse"",""readConditional"",""isSpread"",""expressions"",""readExpressionOrReference"",""expectedFollowers"",""getVars"",""vars"",""stringify"",""hasSpread"",""makeSpread"",""stringifyPair"",""extractRefs"",""stringified"",""refineExpression"",""mustache"",""referenceExpression"",""getReferenceExpression"",""splitEvent"",""readAttribute"",""nearest"",""readAttributeValue"",""valueStart"",""startDepth"",""readQuotedAttributeValue"",""readUnquotedAttributeValue"",""readUnquotedAttributeValueToken"",""tokens"",""quoteMark"",""readQuotedStringToken"",""readAttributeOrDirective"",""readArguments"",""readProxyEvent"",""spreadArgs"",""inside"",""readMustacheOfType"",""tag"",""reader"",""rewind"",""q"",""triple"",""readAliases"",""readAlias"",""readComment"",""readClosing"",""readInlineBlock"",""nm"",""hasElse"",""block"",""unlessBlock"",""closed"",""expectedClose"",""hasThen"",""hasCatch"",""inlineThen"",""aliasOnly"",""extra"",""endIndex"",""comment"",""stripStandalones"",""backOne"",""backTwo"",""lastSectionItem"",""isComment"",""isSection"",""trimWhitespace"",""leadingPattern"",""trailingPattern"",""removeLeadingWhitespace"",""removeTrailingWhitespace"",""previousItem"",""nextItem"",""preserveWhitespaceInsideFragment"",""removeLeadingWhitespaceInsideFragment"",""removeTrailingWhitespaceInsideFragment"",""isPreserveWhitespaceElement"",""readClosingTag"",""camelCaseStr"",""selfClosing"",""hasPartials"",""closingTag"",""lowerCaseName"",""canContain"",""closingTagName"",""readAnchorClose"",""readInline"",""classes"",""disallowed"",""barrier"",""isExpression"",""addTo"",""hasChildren"",""instructions"",""createFunctionFromString"",""bindTo"",""getterString"",""setterString"",""tm"",""notifiedTotal"",""manager"",""collectAllOutros"",""trans"",""nqueue"",""_list"",""prefixKeypath"",""rootKeypath"",""rootDot"",""relativeKeypath"",""explicitContext""],""mappings"":""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""}"
6251d9398ce35b2b36ea52d25c0b60591b1dfff2,72298,# http://stackoverflow.com/questions/72298/should-i-add-the-visual-studio-suo-and-user-files-to-source-control
9687f0dbbe8a8f0657bc462d4a6698ab783725f3,7264899,       //see http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
b0c49ca4f5cf5d720a7cc36d34cda2a8aff81c57,2490825,  // Taken from http://stackoverflow.com/questions/2490825/how-to-trigger-event-in-javascript
d63059e04fe4cc10281a1ba08486363c804cb2a3,46354989,  // From https://stackoverflow.com/a/46354989/9850227
adced035e00f98b21cb6f78576f054e5397a232b,832692,         * loaded (http://stackoverflow.com/questions/832692/how-to-check-if-google-maps-is-fully-loaded)
4c483b9c211f33fce5b71146c9546735cfe94b38,1878983,""" See https://stackoverflow.com/a/1878983"
78912aaf4232d3059bf3750297e00ff7e9748d86,111102,    - [Closures (aka Nested functions)](https://stackoverflow.com/questions/111102/how-do-javascript-closures-work)
164936e8ab96cbfa79c45b79f4885baff94f21ad,731233,"There are several renowned Message Queue brokers available, such as [ActiveMQ](http://activemq.apache.org/), [RabbitMQ](http://www.rabbitmq.com/) and [ZeroMQ](http://zeromq.org/). They all have their [merits](http://stackoverflow.com/questions/731233/activemq-or-rabbitmq-or-zeromq-or), so it is really up to you to make the best choice base on your circumstances. And just in case you are interested, I personally like RabbitMQ a lot, but since ActiveMQ comes for free in some ESB containers, why bother reinventing the wheel, right :)"
b059d43169622c9e247e56abc90c44fb9a0b284c,15036551,	# ref:http://stackoverflow.com/questions/15036551/best-way-to-split-a-hexadecimal-in-python
894f9d9c53cd8e9c2fbbeea380a74e7f423748f5,18432577, * @see http://stackoverflow.com/questions/18432577/stacked-tabs-in-bootstrap-3
303c20dd6a0c8dd20292568dc486f2ff87b28312,10679720,http://bl.ocks.org/1095795	http://stackoverflow.com/questions/10679720/writing-simple-force-layout-app-using-d3-js
9870ce60e78a467bba0b9564562eb7a512b4bed9,27581,		/* http://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java*/
ac541ecc16fb5581f23f1e535d43395ab9eff51e,217902,        //Found from user Danny Beckett at http://stackoverflow.com/questions/217902/reading-writing-an-ini-file
f9c7f055d65aee9754d3820f8655397ff7e52f85,16395220,"  ""readme"": ""# ws: a node.js websocket library\n\n[![Build Status](https://travis-ci.org/websockets/ws.svg?branch=master)](https://travis-ci.org/websockets/ws)\n\n`ws` is a simple to use WebSocket implementation, up-to-date against RFC-6455,\nand [probably the fastest WebSocket library for node.js][archive].\n\nPasses the quite extensive Autobahn test suite. See http://websockets.github.com/ws\nfor the full reports.\n\n## Protocol support\n\n* **Hixie draft 76** (Old and deprecated, but still in use by Safari and Opera.\n  Added to ws version 0.4.2, but server only. Can be disabled by setting the\n  `disableHixie` option to true.)\n* **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)\n* **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`)\n\n### Installing\n\n```\nnpm install --save ws\n```\n\n### Opt-in for performance\n\nThere are 2 optional modules that can be installed along side with the `ws`\nmodule. These modules are binary addons which improve certain operations, but as\nthey are binary addons they require compilation which can fail if no c++\ncompiler is installed on the host system.\n\n- `npm install --save bufferutil`: Improves internal buffer operations which\n  allows for faster processing of masked WebSocket frames and general buffer\n  operations.\n- `npm install --save utf-8-validate`: The specification requires validation of\n  invalid UTF-8 chars, some of these validations could not be done in JavaScript\n  hence the need for a binary addon. In most cases you will already be\n  validating the input that you receive for security purposes leading to double\n  validation. But if you want to be 100% spec-conforming and have fast\n  validation of UTF-8 then this module is a must.\n\n### Sending and receiving text data\n\n```js\nvar WebSocket = require('ws');\nvar ws = new WebSocket('ws://www.host.com/path');\n\nws.on('open', function open() {\n  ws.send('something');\n});\n\nws.on('message', function(data, flags) {\n  // flags.binary will be set if a binary data is received.\n  // flags.masked will be set if the data was masked.\n});\n```\n\n### Sending binary data\n\n```js\nvar WebSocket = require('ws');\nvar ws = new WebSocket('ws://www.host.com/path');\n\nws.on('open', function open() {\n  var array = new Float32Array(5);\n\n  for (var i = 0; i < array.length; ++i) {\n    array[i] = i / 2;\n  }\n\n  ws.send(array, { binary: true, mask: true });\n});\n```\n\nSetting `mask`, as done for the send options above, will cause the data to be\nmasked according to the WebSocket protocol. The same option applies for text\ndata.\n\n### Server example\n\n```js\nvar WebSocketServer = require('ws').Server\n  , wss = new WebSocketServer({ port: 8080 });\n\nwss.on('connection', function connection(ws) {\n  ws.on('message', function incoming(message) {\n    console.log('received: %s', message);\n  });\n\n  ws.send('something');\n});\n```\n\n### ExpressJS example\n\n```js\nvar server = require('http').createServer()\n  , url = require('url')\n  , WebSocketServer = require('ws').Server\n  , wss = new WebSocketServer({ server: server })\n  , express = require('express')\n  , app = express()\n  , port = 4080;\n\napp.use(function (req, res) {\n  res.send({ msg: \""hello\"" });\n});\n\nwss.on('connection', function connection(ws) {\n  var location = url.parse(ws.upgradeReq.url, true);\n  // you might use location.query.access_token to authenticate or share sessions\n  // or ws.upgradeReq.headers.cookie (see http://stackoverflow.com/a/16395220/151312)\n\n  ws.on('message', function incoming(message) {\n    console.log('received: %s', message);\n  });\n\n  ws.send('something');\n});\n\nserver.on('request', app);\nserver.listen(port, function () { console.log('Listening on ' + server.address().port) });\n```\n\n### Server sending broadcast data\n\n```js\nvar WebSocketServer = require('ws').Server\n  , wss = new WebSocketServer({ port: 8080 });\n\nwss.broadcast = function broadcast(data) {\n  wss.clients.forEach(function each(client) {\n    client.send(data);\n  });\n};\n```\n\n### Error handling best practices\n\n```js\n// If the WebSocket is closed before the following send is attempted\nws.send('something');\n\n// Errors (both immediate and async write errors) can be detected in an optional\n// callback. The callback is also the only way of being notified that data has\n// actually been sent.\nws.send('something', function ack(error) {\n  // if error is not defined, the send has been completed,\n  // otherwise the error object will indicate what failed.\n});\n\n// Immediate errors can also be handled with try/catch-blocks, but **note** that\n// since sends are inherently asynchronous, socket write failures will *not* be\n// captured when this technique is used.\ntry { ws.send('something'); }\ncatch (e) { /* handle error */ }\n```\n\n### echo.websocket.org demo\n\n```js\nvar WebSocket = require('ws');\nvar ws = new WebSocket('ws://echo.websocket.org/', {\n  protocolVersion: 8,\n  origin: 'http://websocket.org'\n});\n\nws.on('open', function open() {\n  console.log('connected');\n  ws.send(Date.now().toString(), {mask: true});\n});\n\nws.on('close', function close() {\n  console.log('disconnected');\n});\n\nws.on('message', function message(data, flags) {\n  console.log('Roundtrip time: ' + (Date.now() - parseInt(data)) + 'ms', flags);\n\n  setTimeout(function timeout() {\n    ws.send(Date.now().toString(), {mask: true});\n  }, 500);\n});\n```\n\n### Other examples\n\nFor a full example with a browser client communicating with a ws server, see the\nexamples folder.\n\nNote that the usage together with Express 3.0 is quite different from Express\n2.x. The difference is expressed in the two different serverstats-examples.\n\nOtherwise, see the test cases.\n\n### Running the tests\n\n```\nmake test\n```\n\n## API Docs\n\nSee [`/doc/ws.md`](https://github.com/websockets/ws/blob/master/doc/ws.md) for Node.js-like docs for the ws classes.\n\n## Changelog\n\nWe're using the GitHub [`releases`](https://github.com/websockets/ws/releases) for changelog entries.\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2011 Einar Otto Stangvik &lt;einaros@gmail.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n[archive]: http://web.archive.org/web/20130314230536/http://hobbycoding.posterous.com/the-fastest-websocket-module-for-nodejs\n"","
5752839d68e65a7c31947cf2ef9e69ab62d4ad1a,4842424,- [Stackoverflow - List of ANSI color escape sequences](https://stackoverflow.com/questions/4842424/list-of-ansi-color-escape-sequences)
14fe04a88f46a1bd0fe95aa752fe3e0c28ff1811,19226132,[full example here](http://stackoverflow.com/questions/19176289/sthttprequest-how-to-postdata-not-key-value/19226132#19226132)
14cff1169700c725b191ba7b04e5e564046e2a98,3451640,			// http://stackoverflow.com/a/3451640/145346
d5532afa1a13ed795df221be08f829de22748801,843716,	// code taken from https://stackoverflow.com/a/843716
32ae1d92e4062efe2c96cf1f68884e26a44048ac,26603875,    // http://stackoverflow.com/a/26603875
a01482d7bdc8ed117bee053ab3b473cd75f20f78,29626460,# see https://stackoverflow.com/a/29626460/1582182
0b88bc56de62ca675459a50f7d00974d6dcd8667,33971933,				 * http://stackoverflow.com/a/33971933
ca43f76f195b925053c81456e16ba6e94c273063,3252730,                    // http://stackoverflow.com/questions/3252730
ff0201edd3dc7488149365e625f71f47a74169d6,6760685,* [Creating a singleton in Python](https://stackoverflow.com/questions/6760685/creating-a-singleton-in-python)
6904004ecd474998b0daf0ce33df39778a0c26cb,3330919,        // http://stackoverflow.com/a/3330919)
c857105c358094b7865aac980fa36784b1937973,22984262,<http://stackoverflow.com/questions/22984262/cannot-update-paths-and-switch-to-branch-at-the-same-time>
a38c19a8f8a04a1a73c0109b101932a2817fd23a,2730851,            // http://stackoverflow.com/questions/2730851/how-to-update-jtree-elements
b76172e4dde9ef9d97580e187877cf52ec905d02,34015469,// http://stackoverflow.com/a/34015469/988941
8c91bd85ff867b71985edc520449cfaa5235e15f,25741399,"8289392,story,,,3,0,aug-riedinger,""How to restore specific data from previous backup on Postgres Heroku?"",http://stackoverflow.com/questions/25741399/how-to-restore-specific-data-from-previous-backup-on-postgres-heroku-eg-accid,,1410256732"
633b3c6a1b8f7230e91acae7e5b634858335414f,39063530,  * [Data structure alignment](http://stackoverflow.com/questions/39063530/optimising-datastructure-word-alignment-padding-in-golang)
ecb13d329341c68cefa62488d6478c2018a9af81,13079563,A good answer from [How does condensed distance matrix work? (pdist)](https://stackoverflow.com/questions/13079563/how-does-condensed-distance-matrix-work-pdist):
a2b0ec9da416c417b26d2f8931be634e9003e569,19042392,[Steve Smith](https://github.com/stevenpsmith)'s iOS 7 fix was influenced by [a stack overflow post](http://stackoverflow.com/questions/18837551/remove-keyboard-form-toolbar-on-ios7-leaves-a-blur-behind/19042392#19042392).
b5566d7d9aef34fa027e72e68a9f01357a5301cd,11021262,    // based on: http://stackoverflow.com/a/11021262/1483200
6e0027baae962f695e4773a92575efd8ef4c0357,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
5bc9bf176da7d51e5c8aa1b6f92f725fa14b5f1b,399880,      // (here: http://stackoverflow.com/questions/250037/gridview-sorting-sortdirection-always-ascending/399880#399880 )
c3f468a1a399bdfab7afbd7c99e05ba2c5f4f061,2851327,# http://stackoverflow.com/questions/2851327/converting-a-list-of-data-frames-into-one-data-frame-in-r
632a51782add6fb1acdcb991ac38fe2af45a856f,11295554,"  ""readme"": ""# Formidable\n\n[![Build Status](https://secure.travis-ci.org/felixge/node-formidable.png?branch=master)](http://travis-ci.org/felixge/node-formidable)\n\n## Purpose\n\nA node.js module for parsing form data, especially file uploads.\n\n## Current status\n\nThis module was developed for [Transloadit](http://transloadit.com/), a service focused on uploading\nand encoding images and videos. It has been battle-tested against hundreds of GB of file uploads from\na large variety of clients and is considered production-ready.\n\n## Features\n\n* Fast (~500mb/sec), non-buffering multipart parser\n* Automatically writing file uploads to disk\n* Low memory footprint\n* Graceful error handling\n* Very high test coverage\n\n## Installation\n\nThis is a low level package, and if you're using a high level framework such as Express, chances are it's already included in it. You can [read this discussion](http://stackoverflow.com/questions/11295554/how-to-disable-express-bodyparser-for-file-uploads-node-js) about how Formidable is integrated with Express.\n\nVia [npm](http://github.com/isaacs/npm):\n```\nnpm install formidable@latest\n```\nManually:\n```\ngit clone git://github.com/felixge/node-formidable.git formidable\nvim my.js\n# var formidable = require('./formidable');\n```\n\nNote: Formidable requires [gently](http://github.com/felixge/node-gently) to run the unit tests, but you won't need it for just using the library.\n\n## Example\n\nParse an incoming file upload.\n```javascript\nvar formidable = require('formidable'),\n    http = require('http'),\n    util = require('util');\n\nhttp.createServer(function(req, res) {\n  if (req.url == '/upload' && req.method.toLowerCase() == 'post') {\n    // parse a file upload\n    var form = new formidable.IncomingForm();\n\n    form.parse(req, function(err, fields, files) {\n      res.writeHead(200, {'content-type': 'text/plain'});\n      res.write('received upload:\\n\\n');\n      res.end(util.inspect({fields: fields, files: files}));\n    });\n\n    return;\n  }\n\n  // show a file upload form\n  res.writeHead(200, {'content-type': 'text/html'});\n  res.end(\n    '<form action=\""/upload\"" enctype=\""multipart/form-data\"" method=\""post\"">'+\n    '<input type=\""text\"" name=\""title\""><br>'+\n    '<input type=\""file\"" name=\""upload\"" multiple=\""multiple\""><br>'+\n    '<input type=\""submit\"" value=\""Upload\"">'+\n    '</form>'\n  );\n}).listen(8080);\n```\n## API\n\n### Formidable.IncomingForm\n```javascript\nvar form = new formidable.IncomingForm()\n```\nCreates a new incoming form.\n\n```javascript\nform.encoding = 'utf-8';\n```\nSets encoding for incoming form fields.\n\n```javascript\nform.uploadDir = \""/my/dir\"";\n```\nSets the directory for placing file uploads in. You can move them later on using\n`fs.rename()`. The default is `os.tmpDir()`.\n\n```javascript\nform.keepExtensions = false;\n```\nIf you want the files written to `form.uploadDir` to include the extensions of the original files, set this property to `true`.\n\n```javascript\nform.type\n```\nEither 'multipart' or 'urlencoded' depending on the incoming request.\n\n```javascript\nform.maxFieldsSize = 2 * 1024 * 1024;\n```\nLimits the amount of memory all fields together (except files) can allocate in bytes.\nIf this value is exceeded, an `'error'` event is emitted. The default\nsize is 2MB.\n\n```javascript\nform.maxFields = 1000;\n```\nLimits the number of fields that the querystring parser will decode. Defaults\nto 1000 (0 for unlimited).\n\n```javascript\nform.hash = false;\n```\nIf you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`.\n\n```javascript\nform.multiples = false;\n```\nIf this option is enabled, when you call `form.parse`, the `files` argument will contain arrays of files for inputs which submit multiple files using the HTML5 `multiple` attribute.\n\n```javascript\nform.bytesReceived\n```\nThe amount of bytes received for this form so far.\n\n```javascript\nform.bytesExpected\n```\nThe expected number of bytes in this form.\n\n```javascript\nform.parse(request, [cb]);\n```\nParses an incoming node.js `request` containing form data. If `cb` is provided, all fields and files are collected and passed to the callback:\n\n\n```javascript\nform.parse(req, function(err, fields, files) {\n  // ...\n});\n\nform.onPart(part);\n```\nYou may overwrite this method if you are interested in directly accessing the multipart stream. Doing so will disable any `'field'` / `'file'` events  processing which would occur otherwise, making you fully responsible for handling the processing.\n\n```javascript\nform.onPart = function(part) {\n  part.addListener('data', function() {\n    // ...\n  });\n}\n```\nIf you want to use formidable to only handle certain parts for you, you can do so:\n```javascript\nform.onPart = function(part) {\n  if (!part.filename) {\n    // let formidable handle all non-file parts\n    form.handlePart(part);\n  }\n}\n```\nCheck the code in this method for further inspiration.\n\n\n### Formidable.File\n```javascript\nfile.size = 0\n```\nThe size of the uploaded file in bytes. If the file is still being uploaded (see `'fileBegin'` event), this property says how many bytes of the file have been written to disk yet.\n```javascript\nfile.path = null\n```\nThe path this file is being written to. You can modify this in the `'fileBegin'` event in\ncase you are unhappy with the way formidable generates a temporary path for your files.\n```javascript\nfile.name = null\n```\nThe name this file had according to the uploading client.\n```javascript\nfile.type = null\n```\nThe mime type of this file, according to the uploading client.\n```javascript\nfile.lastModifiedDate = null\n```\nA date object (or `null`) containing the time this file was last written to. Mostly\nhere for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/).\n```javascript\nfile.hash = null\n```\nIf hash calculation was set, you can read the hex digest out of this var.\n\n#### Formidable.File#toJSON()\n\n  This method returns a JSON-representation of the file, allowing you to\n  `JSON.stringify()` the file which is useful for logging and responding\n  to requests.\n\n### Events\n\n\n#### 'progress'\n```javascript\nform.on('progress', function(bytesReceived, bytesExpected) {\n});\n```\nEmitted after each incoming chunk of data that has been parsed. Can be used to roll your own progress bar.\n\n\n\n#### 'field'\n```javascript\nform.on('field', function(name, value) {\n});\n```\n\n#### 'fileBegin'\n\nEmitted whenever a field / value pair has been received.\n```javascript\nform.on('fileBegin', function(name, file) {\n});\n```\n\n#### 'file'\n\nEmitted whenever a new file is detected in the upload stream. Use this even if\nyou want to stream the file to somewhere else while buffering the upload on\nthe file system.\n\nEmitted whenever a field / file pair has been received. `file` is an instance of `File`.\n```javascript\nform.on('file', function(name, file) {\n});\n```\n\n#### 'error'\n\nEmitted when there is an error processing the incoming form. A request that experiences an error is automatically paused, you will have to manually call `request.resume()` if you want the request to continue firing `'data'` events.\n```javascript\nform.on('error', function(err) {\n});\n```\n\n#### 'aborted'\n\n\nEmitted when the request was aborted by the user. Right now this can be due to a 'timeout' or 'close' event on the socket. After this event is emitted, an `error` event will follow. In the future there will be a separate 'timeout' event (needs a change in the node core).\n```javascript\nform.on('aborted', function() {\n});\n```\n\n##### 'end'\n```javascript\nform.on('end', function() {\n});\n```\nEmitted when the entire request has been received, and all contained files have finished flushing to disk. This is a great place for you to send your response.\n\n\n\n## Changelog\n\n### v1.0.14\n\n* Add failing hash tests. (Ben Trask)\n* Enable hash calculation again (Eugene Girshov)\n* Test for immediate data events (Tim Smart)\n* Re-arrange IncomingForm#parse (Tim Smart)\n\n### v1.0.13\n\n* Only update hash if update method exists (Sven Lito)\n* According to travis v0.10 needs to go quoted (Sven Lito)\n* Bumping build node versions (Sven Lito)\n* Additional fix for empty requests (Eugene Girshov)\n* Change the default to 1000, to match the new Node behaviour. (OrangeDog)\n* Add ability to control maxKeys in the querystring parser. (OrangeDog)\n* Adjust test case to work with node 0.9.x (Eugene Girshov)\n* Update package.json (Sven Lito)\n* Path adjustment according to eb4468b (Markus Ast)\n\n### v1.0.12\n\n* Emit error on aborted connections (Eugene Girshov)\n* Add support for empty requests (Eugene Girshov)\n* Fix name/filename handling in Content-Disposition (jesperp)\n* Tolerate malformed closing boundary in multipart (Eugene Girshov)\n* Ignore preamble in multipart messages (Eugene Girshov)\n* Add support for application/json (Mike Frey, Carlos Rodriguez)\n* Add support for Base64 encoding (Elmer Bulthuis)\n* Add File#toJSON (TJ Holowaychuk)\n* Remove support for Node.js 0.4 & 0.6 (Andrew Kelley)\n* Documentation improvements (Sven Lito, Andre Azevedo)\n* Add support for application/octet-stream (Ion Lupascu, Chris Scribner)\n* Use os.tmpDir() to get tmp directory (Andrew Kelley)\n* Improve package.json (Andrew Kelley, Sven Lito)\n* Fix benchmark script (Andrew Kelley)\n* Fix scope issue in incoming_forms (Sven Lito)\n* Fix file handle leak on error (OrangeDog)\n\n### v1.0.11\n\n* Calculate checksums for incoming files (sreuter)\n* Add definition parameters to \""IncomingForm\"" as an argument (Math-)\n\n### v1.0.10\n\n* Make parts to be proper Streams (Matt Robenolt)\n\n### v1.0.9\n\n* Emit progress when content length header parsed (Tim Koschützki)\n* Fix Readme syntax due to GitHub changes (goob)\n* Replace references to old 'sys' module in Readme with 'util' (Peter Sugihara)\n\n### v1.0.8\n\n* Strip potentially unsafe characters when using `keepExtensions: true`.\n* Switch to utest / urun for testing\n* Add travis build\n\n### v1.0.7\n\n* Remove file from package that was causing problems when installing on windows. (#102)\n* Fix typos in Readme (Jason Davies).\n\n### v1.0.6\n\n* Do not default to the default to the field name for file uploads where\n  filename=\""\"".\n\n### v1.0.5\n\n* Support filename=\""\"" in multipart parts\n* Explain unexpected end() errors in parser better\n\n**Note:** Starting with this version, formidable emits 'file' events for empty\nfile input fields. Previously those were incorrectly emitted as regular file\ninput fields with value = \""\"".\n\n### v1.0.4\n\n* Detect a good default tmp directory regardless of platform. (#88)\n\n### v1.0.3\n\n* Fix problems with utf8 characters (#84) / semicolons in filenames (#58)\n* Small performance improvements\n* New test suite and fixture system\n\n### v1.0.2\n\n* Exclude node\\_modules folder from git\n* Implement new `'aborted'` event\n* Fix files in example folder to work with recent node versions\n* Make gently a devDependency\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.1...v1.0.2)\n\n### v1.0.1\n\n* Fix package.json to refer to proper main directory. (#68, Dean Landolt)\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.0...v1.0.1)\n\n### v1.0.0\n\n* Add support for multipart boundaries that are quoted strings. (Jeff Craig)\n\nThis marks the beginning of development on version 2.0 which will include\nseveral architectural improvements.\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.11...v1.0.0)\n\n### v0.9.11\n\n* Emit `'progress'` event when receiving data, regardless of parsing it. (Tim Koschützki)\n* Use [W3C FileAPI Draft](http://dev.w3.org/2006/webapi/FileAPI/) properties for File class\n\n**Important:** The old property names of the File class will be removed in a\nfuture release.\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.10...v0.9.11)\n\n### Older releases\n\nThese releases were done before starting to maintain the above Changelog:\n\n* [v0.9.10](https://github.com/felixge/node-formidable/compare/v0.9.9...v0.9.10)\n* [v0.9.9](https://github.com/felixge/node-formidable/compare/v0.9.8...v0.9.9)\n* [v0.9.8](https://github.com/felixge/node-formidable/compare/v0.9.7...v0.9.8)\n* [v0.9.7](https://github.com/felixge/node-formidable/compare/v0.9.6...v0.9.7)\n* [v0.9.6](https://github.com/felixge/node-formidable/compare/v0.9.5...v0.9.6)\n* [v0.9.5](https://github.com/felixge/node-formidable/compare/v0.9.4...v0.9.5)\n* [v0.9.4](https://github.com/felixge/node-formidable/compare/v0.9.3...v0.9.4)\n* [v0.9.3](https://github.com/felixge/node-formidable/compare/v0.9.2...v0.9.3)\n* [v0.9.2](https://github.com/felixge/node-formidable/compare/v0.9.1...v0.9.2)\n* [v0.9.1](https://github.com/felixge/node-formidable/compare/v0.9.0...v0.9.1)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.1.0](https://github.com/felixge/node-formidable/commits/v0.1.0)\n\n## License\n\nFormidable is licensed under the MIT license.\n\n## Ports\n\n* [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++ parser based on formidable\n\n## Credits\n\n* [Ryan Dahl](http://twitter.com/ryah) for his work on [http-parser](http://github.com/ry/http-parser) which heavily inspired multipart_parser.js\n"","
a1375fc33a7e8d4252392fd6e790c975e0b08a08,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
eebbc6647f9286d6ee7de2bbbb0c43952ea85c86,3330919,        // http://stackoverflow.com/a/3330919)
8061fbbe7ac5f2fa8ec815c361e5fc51e98014cb,37825934,# http://stackoverflow.com/questions/37823283/powershell-copying-multiple-files/37825934#37825934
c955631b79806c44fe891c7c9a38bc27834282ff,12006724, * http://stackoverflow.com/questions/12006724/set-a-combination-of-vibration-lights-or-sound-for-a-notification-in-android
b7a51c42930128fc47ec4b2d8c8a5126d4e1e9c5,2117523,    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
a8ed034c2e34749222eeefc63a694bd74160d841,6965107,    * http://stackoverflow.com/questions/6965107/converting-between-strings-and-arraybuffers
620b38c2ce4ba69a53759963c918dd886cc09901,7422072,        // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
569b0e807550b88a4cf40bf8052e039e0eb075ff,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
5f89543f2e2e1bee2e27d984dc8113b423ed88a6,7682338,12:02 < LuckyBurger> http://stackoverflow.com/questions/7682338/node-js-socket-io-apache
0a45f3e03cc90be22debcf42a98d427c0434d83c,17202128,"      ""description"":""Safari does not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128"""
9213d5e87d30001e48922c12d3bd37ad5d1c516a,31794200, * http://stackoverflow.com/questions/31794200.
81324db74891196062cd30360ac3aa9294e40f67,4068373,// from http://stackoverflow.com/questions/4068373/center-a-popup-window-on-screen
4ff1ba471221becb855dd0ca3766e107495dcf23,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
ecdfb8208dc011da7654a45410fbaa2819832e6e,10417962,                                               and ensure that its first value is always 1. More info: http://stackoverflow.com/questions/10417890/css3-animations-with-transform-causes-blurred-elements-on-webkit/10417962#10417962 */
bceb97fbfba2202cedca69e4e90e3403dea7590d,2659048, * http://stackoverflow.com/questions/2659048/add-maven-build-classpath-to-plugin-execution-classpath
7cdffacad210ae90663ff2e45dc6bc662963e8e7,15499997,//  *  @see http://stackoverflow.com/questions/15499997/how-to-use-angular-scenario-with-requirejs
e30b13d2dda9418086dd06cb5bcf31d2e65a28cb,19086190,http://stackoverflow.com/questions/19086190/request-getparameter-does-not-display-properly-character-encoding-in-java-serv
75fcb35328c3131f6eb59971a62094abdc0f46d2,5634528,    // http://stackoverflow.com/a/5634528/2280888
ab837b35736fa49003b6c1649638411257b528e6,11929099 19526430,"eval(""/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\""value\"" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\""this hasn't been initialised - super() hasn't been called\""); } return call && (typeof call === \""object\"" || typeof call === \""function\"") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \""function\"" && superClass !== null) { throw new TypeError(\""Super expression must either be null or a function, not \"" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\""Cannot call a class as a function\""); } }\n\n/*\n *\n * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\n *\n * Copyright (c) 2012, Matias Meno\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \""Software\""), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n */\n\n// The Emitter class provides the ability to call `.on()` on Dropzone to listen\n// to events.\n// It is strongly based on component's emitter class, and I removed the\n// functionality because of the dependency hell with different frameworks.\nvar Emitter = function () {\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n  }\n\n  _createClass(Emitter, [{\n    key: \""on\"",\n\n    // Add an event listener for given event\n    value: function on(event, fn) {\n      this._callbacks = this._callbacks || {};\n      // Create namespace for this event\n      if (!this._callbacks[event]) {\n        this._callbacks[event] = [];\n      }\n      this._callbacks[event].push(fn);\n      return this;\n    }\n  }, {\n    key: \""emit\"",\n    value: function emit(event) {\n      this._callbacks = this._callbacks || {};\n      var callbacks = this._callbacks[event];\n\n      if (callbacks) {\n        for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        for (var _iterator = callbacks, _isArray = true, _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i >= _iterator.length) break;\n            _ref = _iterator[_i++];\n          } else {\n            _i = _iterator.next();\n            if (_i.done) break;\n            _ref = _i.value;\n          }\n\n          var callback = _ref;\n\n          callback.apply(this, args);\n        }\n      }\n\n      return this;\n    }\n\n    // Remove event listener for given event. If fn is not provided, all event\n    // listeners for that event will be removed. If neither is provided, all\n    // event listeners will be removed.\n\n  }, {\n    key: \""off\"",\n    value: function off(event, fn) {\n      if (!this._callbacks || arguments.length === 0) {\n        this._callbacks = {};\n        return this;\n      }\n\n      // specific event\n      var callbacks = this._callbacks[event];\n      if (!callbacks) {\n        return this;\n      }\n\n      // remove all handlers\n      if (arguments.length === 1) {\n        delete this._callbacks[event];\n        return this;\n      }\n\n      // remove specific handler\n      for (var i = 0; i < callbacks.length; i++) {\n        var callback = callbacks[i];\n        if (callback === fn) {\n          callbacks.splice(i, 1);\n          break;\n        }\n      }\n\n      return this;\n    }\n  }]);\n\n  return Emitter;\n}();\n\nvar Dropzone = function (_Emitter) {\n  _inherits(Dropzone, _Emitter);\n\n  _createClass(Dropzone, null, [{\n    key: \""initClass\"",\n    value: function initClass() {\n\n      // Exposing the emitter class, mainly for tests\n      this.prototype.Emitter = Emitter;\n\n      /*\n       This is a list of all available events you can register on a dropzone object.\n        You can register an event handler like this:\n        dropzone.on(\""dragEnter\"", function() { });\n        */\n      this.prototype.events = [\""drop\"", \""dragstart\"", \""dragend\"", \""dragenter\"", \""dragover\"", \""dragleave\"", \""addedfile\"", \""addedfiles\"", \""removedfile\"", \""thumbnail\"", \""error\"", \""errormultiple\"", \""processing\"", \""processingmultiple\"", \""uploadprogress\"", \""totaluploadprogress\"", \""sending\"", \""sendingmultiple\"", \""success\"", \""successmultiple\"", \""canceled\"", \""canceledmultiple\"", \""complete\"", \""completemultiple\"", \""reset\"", \""maxfilesexceeded\"", \""maxfilesreached\"", \""queuecomplete\""];\n\n      this.prototype.defaultOptions = {\n        /**\n         * Has to be specified on elements other than form (or when the form\n         * doesn't have an `action` attribute). You can also\n         * provide a function that will be called with `files` and\n         * must return the url (since `v3.12.0`)\n         */\n        url: null,\n\n        /**\n         * Can be changed to `\""put\""` if necessary. You can also provide a function\n         * that will be called with `files` and must return the method (since `v3.12.0`).\n         */\n        method: \""post\"",\n\n        /**\n         * Will be set on the XHRequest.\n         */\n        withCredentials: false,\n\n        /**\n         * The timeout for the XHR requests in milliseconds (since `v4.4.0`).\n         */\n        timeout: 30000,\n\n        /**\n         * How many file uploads to process in parallel (See the\n         * Enqueuing file uploads* documentation section for more info)\n         */\n        parallelUploads: 2,\n\n        /**\n         * Whether to send multiple files in one request. If\n         * this it set to true, then the fallback file input element will\n         * have the `multiple` attribute as well. This option will\n         * also trigger additional events (like `processingmultiple`). See the events\n         * documentation section for more information.\n         */\n        uploadMultiple: false,\n\n        /**\n         * Whether you want files to be uploaded in chunks to your server. This can't be\n         * used in combination with `uploadMultiple`.\n         *\n         * See [chunksUploaded](#config-chunksUploaded) for the callback to finalise an upload.\n         */\n        chunking: false,\n\n        /**\n         * If `chunking` is enabled, this defines whether **every** file should be chunked,\n         * even if the file size is below chunkSize. This means, that the additional chunk\n         * form data will be submitted and the `chunksUploaded` callback will be invoked.\n         */\n        forceChunking: false,\n\n        /**\n         * If `chunking` is `true`, then this defines the chunk size in bytes.\n         */\n        chunkSize: 2000000,\n\n        /**\n         * If `true`, the individual chunks of a file are being uploaded simultaneously.\n         */\n        parallelChunkUploads: false,\n\n        /**\n         * Whether a chunk should be retried if it fails.\n         */\n        retryChunks: false,\n\n        /**\n         * If `retryChunks` is true, how many times should it be retried.\n         */\n        retryChunksLimit: 3,\n\n        /**\n         * If not `null` defines how many files this Dropzone handles. If it exceeds,\n         * the event `maxfilesexceeded` will be called. The dropzone element gets the\n         * class `dz-max-files-reached` accordingly so you can provide visual feedback.\n         */\n        maxFilesize: 256,\n\n        /**\n         * The name of the file param that gets transferred.\n         * **NOTE**: If you have the option  `uploadMultiple` set to `true`, then\n         * Dropzone will append `[]` to the name.\n         */\n        paramName: \""file\"",\n\n        /**\n         * Whether thumbnails for images should be generated\n         */\n        createImageThumbnails: true,\n\n        /**\n         * In MB. When the filename exceeds this limit, the thumbnail will not be generated.\n         */\n        maxThumbnailFilesize: 10,\n\n        /**\n         * If `null`, the ratio of the image will be used to calculate it.\n         */\n        thumbnailWidth: 120,\n\n        /**\n         * The same as `thumbnailWidth`. If both are null, images will not be resized.\n         */\n        thumbnailHeight: 120,\n\n        /**\n         * How the images should be scaled down in case both, `thumbnailWidth` and `thumbnailHeight` are provided.\n         * Can be either `contain` or `crop`.\n         */\n        thumbnailMethod: 'crop',\n\n        /**\n         * If set, images will be resized to these dimensions before being **uploaded**.\n         * If only one, `resizeWidth` **or** `resizeHeight` is provided, the original aspect\n         * ratio of the file will be preserved.\n         *\n         * The `options.transformFile` function uses these options, so if the `transformFile` function\n         * is overridden, these options don't do anything.\n         */\n        resizeWidth: null,\n\n        /**\n         * See `resizeWidth`.\n         */\n        resizeHeight: null,\n\n        /**\n         * The mime type of the resized image (before it gets uploaded to the server).\n         * If `null` the original mime type will be used. To force jpeg, for example, use `image/jpeg`.\n         * See `resizeWidth` for more information.\n         */\n        resizeMimeType: null,\n\n        /**\n         * The quality of the resized images. See `resizeWidth`.\n         */\n        resizeQuality: 0.8,\n\n        /**\n         * How the images should be scaled down in case both, `resizeWidth` and `resizeHeight` are provided.\n         * Can be either `contain` or `crop`.\n         */\n        resizeMethod: 'contain',\n\n        /**\n         * The base that is used to calculate the filesize. You can change this to\n         * 1024 if you would rather display kibibytes, mebibytes, etc...\n         * 1024 is technically incorrect, because `1024 bytes` are `1 kibibyte` not `1 kilobyte`.\n         * You can change this to `1024` if you don't care about validity.\n         */\n        filesizeBase: 1000,\n\n        /**\n         * Can be used to limit the maximum number of files that will be handled by this Dropzone\n         */\n        maxFiles: null,\n\n        /**\n         * An optional object to send additional headers to the server. Eg:\n         * `{ \""My-Awesome-Header\"": \""header value\"" }`\n         */\n        headers: null,\n\n        /**\n         * If `true`, the dropzone element itself will be clickable, if `false`\n         * nothing will be clickable.\n         *\n         * You can also pass an HTML element, a CSS selector (for multiple elements)\n         * or an array of those. In that case, all of those elements will trigger an\n         * upload when clicked.\n         */\n        clickable: true,\n\n        /**\n         * Whether hidden files in directories should be ignored.\n         */\n        ignoreHiddenFiles: true,\n\n        /**\n         * The default implementation of `accept` checks the file's mime type or\n         * extension against this list. This is a comma separated list of mime\n         * types or file extensions.\n         *\n         * Eg.: `image/*,application/pdf,.psd`\n         *\n         * If the Dropzone is `clickable` this option will also be used as\n         * [`accept`](https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept)\n         * parameter on the hidden file input as well.\n         */\n        acceptedFiles: null,\n\n        /**\n         * **Deprecated!**\n         * Use acceptedFiles instead.\n         */\n        acceptedMimeTypes: null,\n\n        /**\n         * If false, files will be added to the queue but the queue will not be\n         * processed automatically.\n         * This can be useful if you need some additional user input before sending\n         * files (or if you want want all files sent at once).\n         * If you're ready to send the file simply call `myDropzone.processQueue()`.\n         *\n         * See the [enqueuing file uploads](#enqueuing-file-uploads) documentation\n         * section for more information.\n         */\n        autoProcessQueue: true,\n\n        /**\n         * If false, files added to the dropzone will not be queued by default.\n         * You'll have to call `enqueueFile(file)` manually.\n         */\n        autoQueue: true,\n\n        /**\n         * If `true`, this will add a link to every file preview to remove or cancel (if\n         * already uploading) the file. The `dictCancelUpload`, `dictCancelUploadConfirmation`\n         * and `dictRemoveFile` options are used for the wording.\n         */\n        addRemoveLinks: false,\n\n        /**\n         * Defines where to display the file previews – if `null` the\n         * Dropzone element itself is used. Can be a plain `HTMLElement` or a CSS\n         * selector. The element should have the `dropzone-previews` class so\n         * the previews are displayed properly.\n         */\n        previewsContainer: null,\n\n        /**\n         * This is the element the hidden input field (which is used when clicking on the\n         * dropzone to trigger file selection) will be appended to. This might\n         * be important in case you use frameworks to switch the content of your page.\n         *\n         * Can be a selector string, or an element directly.\n         */\n        hiddenInputContainer: \""body\"",\n\n        /**\n         * If null, no capture type will be specified\n         * If camera, mobile devices will skip the file selection and choose camera\n         * If microphone, mobile devices will skip the file selection and choose the microphone\n         * If camcorder, mobile devices will skip the file selection and choose the camera in video mode\n         * On apple devices multiple must be set to false.  AcceptedFiles may need to\n         * be set to an appropriate mime type (e.g. \""image/*\"", \""audio/*\"", or \""video/*\"").\n         */\n        capture: null,\n\n        /**\n         * **Deprecated**. Use `renameFile` instead.\n         */\n        renameFilename: null,\n\n        /**\n         * A function that is invoked before the file is uploaded to the server and renames the file.\n         * This function gets the `File` as argument and can use the `file.name`. The actual name of the\n         * file that gets used during the upload can be accessed through `file.upload.filename`.\n         */\n        renameFile: null,\n\n        /**\n         * If `true` the fallback will be forced. This is very useful to test your server\n         * implementations first and make sure that everything works as\n         * expected without dropzone if you experience problems, and to test\n         * how your fallbacks will look.\n         */\n        forceFallback: false,\n\n        /**\n         * The text used before any files are dropped.\n         */\n        dictDefaultMessage: \""Drop files here to upload\"",\n\n        /**\n         * The text that replaces the default message text it the browser is not supported.\n         */\n        dictFallbackMessage: \""Your browser does not support drag'n'drop file uploads.\"",\n\n        /**\n         * The text that will be added before the fallback form.\n         * If you provide a  fallback element yourself, or if this option is `null` this will\n         * be ignored.\n         */\n        dictFallbackText: \""Please use the fallback form below to upload your files like in the olden days.\"",\n\n        /**\n         * If the filesize is too big.\n         * `{{filesize}}` and `{{maxFilesize}}` will be replaced with the respective configuration values.\n         */\n        dictFileTooBig: \""File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\"",\n\n        /**\n         * If the file doesn't match the file type.\n         */\n        dictInvalidFileType: \""You can't upload files of this type.\"",\n\n        /**\n         * If the server response was invalid.\n         * `{{statusCode}}` will be replaced with the servers status code.\n         */\n        dictResponseError: \""Server responded with {{statusCode}} code.\"",\n\n        /**\n         * If `addRemoveLinks` is true, the text to be used for the cancel upload link.\n         */\n        dictCancelUpload: \""Cancel upload\"",\n\n        /**\n         * The text that is displayed if an upload was manually canceled\n         */\n        dictUploadCanceled: \""Upload canceled.\"",\n\n        /**\n         * If `addRemoveLinks` is true, the text to be used for confirmation when cancelling upload.\n         */\n        dictCancelUploadConfirmation: \""Are you sure you want to cancel this upload?\"",\n\n        /**\n         * If `addRemoveLinks` is true, the text to be used to remove a file.\n         */\n        dictRemoveFile: \""Remove file\"",\n\n        /**\n         * If this is not null, then the user will be prompted before removing a file.\n         */\n        dictRemoveFileConfirmation: null,\n\n        /**\n         * Displayed if `maxFiles` is st and exceeded.\n         * The string `{{maxFiles}}` will be replaced by the configuration value.\n         */\n        dictMaxFilesExceeded: \""You can not upload any more files.\"",\n\n        /**\n         * Allows you to translate the different units. Starting with `tb` for terabytes and going down to\n         * `b` for bytes.\n         */\n        dictFileSizeUnits: { tb: \""TB\"", gb: \""GB\"", mb: \""MB\"", kb: \""KB\"", b: \""b\"" },\n        /**\n         * Called when dropzone initialized\n         * You can add event listeners here\n         */\n        init: function init() {},\n\n\n        /**\n         * Can be an **object** of additional parameters to transfer to the server, **or** a `Function`\n         * that gets invoked with the `files`, `xhr` and, if it's a chunked upload, `chunk` arguments. In case\n         * of a function, this needs to return a map.\n         *\n         * The default implementation does nothing for normal uploads, but adds relevant information for\n         * chunked uploads.\n         *\n         * This is the same as adding hidden input fields in the form element.\n         */\n        params: function params(files, xhr, chunk) {\n          if (chunk) {\n            return {\n              dzuuid: chunk.file.upload.uuid,\n              dzchunkindex: chunk.index,\n              dztotalfilesize: chunk.file.size,\n              dzchunksize: this.options.chunkSize,\n              dztotalchunkcount: chunk.file.upload.totalChunkCount,\n              dzchunkbyteoffset: chunk.index * this.options.chunkSize\n            };\n          }\n        },\n\n\n        /**\n         * A function that gets a [file](https://developer.mozilla.org/en-US/docs/DOM/File)\n         * and a `done` function as parameters.\n         *\n         * If the done function is invoked without arguments, the file is \""accepted\"" and will\n         * be processed. If you pass an error message, the file is rejected, and the error\n         * message will be displayed.\n         * This function will not be called if the file is too big or doesn't match the mime types.\n         */\n        accept: function accept(file, done) {\n          return done();\n        },\n\n\n        /**\n         * The callback that will be invoked when all chunks have been uploaded for a file.\n         * It gets the file for which the chunks have been uploaded as the first parameter,\n         * and the `done` function as second. `done()` needs to be invoked when everything\n         * needed to finish the upload process is done.\n         */\n        chunksUploaded: function chunksUploaded(file, done) {\n          done();\n        },\n\n        /**\n         * Gets called when the browser is not supported.\n         * The default implementation shows the fallback input field and adds\n         * a text.\n         */\n        fallback: function fallback() {\n          // This code should pass in IE7... :(\n          var messageElement = void 0;\n          this.element.className = this.element.className + \"" dz-browser-not-supported\"";\n\n          for (var _iterator2 = this.element.getElementsByTagName(\""div\""), _isArray2 = true, _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n            var _ref2;\n\n            if (_isArray2) {\n              if (_i2 >= _iterator2.length) break;\n              _ref2 = _iterator2[_i2++];\n            } else {\n              _i2 = _iterator2.next();\n              if (_i2.done) break;\n              _ref2 = _i2.value;\n            }\n\n            var child = _ref2;\n\n            if (/(^| )dz-message($| )/.test(child.className)) {\n              messageElement = child;\n              child.className = \""dz-message\""; // Removes the 'dz-default' class\n              break;\n            }\n          }\n          if (!messageElement) {\n            messageElement = Dropzone.createElement(\""<div class=\\\""dz-message\\\""><span></span></div>\"");\n            this.element.appendChild(messageElement);\n          }\n\n          var span = messageElement.getElementsByTagName(\""span\"")[0];\n          if (span) {\n            if (span.textContent != null) {\n              span.textContent = this.options.dictFallbackMessage;\n            } else if (span.innerText != null) {\n              span.innerText = this.options.dictFallbackMessage;\n            }\n          }\n\n          return this.element.appendChild(this.getFallbackForm());\n        },\n\n\n        /**\n         * Gets called to calculate the thumbnail dimensions.\n         *\n         * It gets `file`, `width` and `height` (both may be `null`) as parameters and must return an object containing:\n         *\n         *  - `srcWidth` & `srcHeight` (required)\n         *  - `trgWidth` & `trgHeight` (required)\n         *  - `srcX` & `srcY` (optional, default `0`)\n         *  - `trgX` & `trgY` (optional, default `0`)\n         *\n         * Those values are going to be used by `ctx.drawImage()`.\n         */\n        resize: function resize(file, width, height, resizeMethod) {\n          var info = {\n            srcX: 0,\n            srcY: 0,\n            srcWidth: file.width,\n            srcHeight: file.height\n          };\n\n          var srcRatio = file.width / file.height;\n\n          // Automatically calculate dimensions if not specified\n          if (width == null && height == null) {\n            width = info.srcWidth;\n            height = info.srcHeight;\n          } else if (width == null) {\n            width = height * srcRatio;\n          } else if (height == null) {\n            height = width / srcRatio;\n          }\n\n          // Make sure images aren't upscaled\n          width = Math.min(width, info.srcWidth);\n          height = Math.min(height, info.srcHeight);\n\n          var trgRatio = width / height;\n\n          if (info.srcWidth > width || info.srcHeight > height) {\n            // Image is bigger and needs rescaling\n            if (resizeMethod === 'crop') {\n              if (srcRatio > trgRatio) {\n                info.srcHeight = file.height;\n                info.srcWidth = info.srcHeight * trgRatio;\n              } else {\n                info.srcWidth = file.width;\n                info.srcHeight = info.srcWidth / trgRatio;\n              }\n            } else if (resizeMethod === 'contain') {\n              // Method 'contain'\n              if (srcRatio > trgRatio) {\n                height = width / srcRatio;\n              } else {\n                width = height * srcRatio;\n              }\n            } else {\n              throw new Error(\""Unknown resizeMethod '\"" + resizeMethod + \""'\"");\n            }\n          }\n\n          info.srcX = (file.width - info.srcWidth) / 2;\n          info.srcY = (file.height - info.srcHeight) / 2;\n\n          info.trgWidth = width;\n          info.trgHeight = height;\n\n          return info;\n        },\n\n\n        /**\n         * Can be used to transform the file (for example, resize an image if necessary).\n         *\n         * The default implementation uses `resizeWidth` and `resizeHeight` (if provided) and resizes\n         * images according to those dimensions.\n         *\n         * Gets the `file` as the first parameter, and a `done()` function as the second, that needs\n         * to be invoked with the file when the transformation is done.\n         */\n        transformFile: function transformFile(file, done) {\n          if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {\n            return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);\n          } else {\n            return done(file);\n          }\n        },\n\n\n        /**\n         * A string that contains the template used for each dropped\n         * file. Change it to fulfill your needs but make sure to properly\n         * provide all elements.\n         *\n         * If you want to use an actual HTML element instead of providing a String\n         * as a config option, you could create a div with the id `tpl`,\n         * put the template inside it and provide the element like this:\n         *\n         *     document\n         *       .querySelector('#tpl')\n         *       .innerHTML\n         *\n         */\n        previewTemplate: \""<div class=\\\""dz-preview dz-file-preview\\\"">\\n  <div class=\\\""dz-image\\\""><img data-dz-thumbnail /></div>\\n  <div class=\\\""dz-details\\\"">\\n    <div class=\\\""dz-size\\\""><span data-dz-size></span></div>\\n    <div class=\\\""dz-filename\\\""><span data-dz-name></span></div>\\n  </div>\\n  <div class=\\\""dz-progress\\\""><span class=\\\""dz-upload\\\"" data-dz-uploadprogress></span></div>\\n  <div class=\\\""dz-error-message\\\""><span data-dz-errormessage></span></div>\\n  <div class=\\\""dz-success-mark\\\"">\\n    <svg width=\\\""54px\\\"" height=\\\""54px\\\"" viewBox=\\\""0 0 54 54\\\"" version=\\\""1.1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\"" xmlns:sketch=\\\""http://www.bohemiancoding.com/sketch/ns\\\"">\\n      <title>Check</title>\\n      <defs></defs>\\n      <g id=\\\""Page-1\\\"" stroke=\\\""none\\\"" stroke-width=\\\""1\\\"" fill=\\\""none\\\"" fill-rule=\\\""evenodd\\\"" sketch:type=\\\""MSPage\\\"">\\n        <path d=\\\""M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\"" id=\\\""Oval-2\\\"" stroke-opacity=\\\""0.198794158\\\"" stroke=\\\""#747474\\\"" fill-opacity=\\\""0.816519475\\\"" fill=\\\""#FFFFFF\\\"" sketch:type=\\\""MSShapeGroup\\\""></path>\\n      </g>\\n    </svg>\\n  </div>\\n  <div class=\\\""dz-error-mark\\\"">\\n    <svg width=\\\""54px\\\"" height=\\\""54px\\\"" viewBox=\\\""0 0 54 54\\\"" version=\\\""1.1\\\"" xmlns=\\\""http://www.w3.org/2000/svg\\\"" xmlns:xlink=\\\""http://www.w3.org/1999/xlink\\\"" xmlns:sketch=\\\""http://www.bohemiancoding.com/sketch/ns\\\"">\\n      <title>Error</title>\\n      <defs></defs>\\n      <g id=\\\""Page-1\\\"" stroke=\\\""none\\\"" stroke-width=\\\""1\\\"" fill=\\\""none\\\"" fill-rule=\\\""evenodd\\\"" sketch:type=\\\""MSPage\\\"">\\n        <g id=\\\""Check-+-Oval-2\\\"" sketch:type=\\\""MSLayerGroup\\\"" stroke=\\\""#747474\\\"" stroke-opacity=\\\""0.198794158\\\"" fill=\\\""#FFFFFF\\\"" fill-opacity=\\\""0.816519475\\\"">\\n          <path d=\\\""M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\"" id=\\\""Oval-2\\\"" sketch:type=\\\""MSShapeGroup\\\""></path>\\n        </g>\\n      </g>\\n    </svg>\\n  </div>\\n</div>\"",\n\n        // END OPTIONS\n        // (Required by the dropzone documentation parser)\n\n\n        /*\n         Those functions register themselves to the events on init and handle all\n         the user interface specific stuff. Overwriting them won't break the upload\n         but can break the way it's displayed.\n         You can overwrite them if you don't like the default behavior. If you just\n         want to add an additional event handler, register it on the dropzone object\n         and don't overwrite those options.\n         */\n\n        // Those are self explanatory and simply concern the DragnDrop.\n        drop: function drop(e) {\n          return this.element.classList.remove(\""dz-drag-hover\"");\n        },\n        dragstart: function dragstart(e) {},\n        dragend: function dragend(e) {\n          return this.element.classList.remove(\""dz-drag-hover\"");\n        },\n        dragenter: function dragenter(e) {\n          return this.element.classList.add(\""dz-drag-hover\"");\n        },\n        dragover: function dragover(e) {\n          return this.element.classList.add(\""dz-drag-hover\"");\n        },\n        dragleave: function dragleave(e) {\n          return this.element.classList.remove(\""dz-drag-hover\"");\n        },\n        paste: function paste(e) {},\n\n\n        // Called whenever there are no files left in the dropzone anymore, and the\n        // dropzone should be displayed as if in the initial state.\n        reset: function reset() {\n          return this.element.classList.remove(\""dz-started\"");\n        },\n\n\n        // Called when a file is added to the queue\n        // Receives `file`\n        addedfile: function addedfile(file) {\n          var _this2 = this;\n\n          if (this.element === this.previewsContainer) {\n            this.element.classList.add(\""dz-started\"");\n          }\n\n          if (this.previewsContainer) {\n            file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n            file.previewTemplate = file.previewElement; // Backwards compatibility\n\n            this.previewsContainer.appendChild(file.previewElement);\n            for (var _iterator3 = file.previewElement.querySelectorAll(\""[data-dz-name]\""), _isArray3 = true, _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n              var _ref3;\n\n              if (_isArray3) {\n                if (_i3 >= _iterator3.length) break;\n                _ref3 = _iterator3[_i3++];\n              } else {\n                _i3 = _iterator3.next();\n                if (_i3.done) break;\n                _ref3 = _i3.value;\n              }\n\n              var node = _ref3;\n\n              node.textContent = file.name;\n            }\n            for (var _iterator4 = file.previewElement.querySelectorAll(\""[data-dz-size]\""), _isArray4 = true, _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n              if (_isArray4) {\n                if (_i4 >= _iterator4.length) break;\n                node = _iterator4[_i4++];\n              } else {\n                _i4 = _iterator4.next();\n                if (_i4.done) break;\n                node = _i4.value;\n              }\n\n              node.innerHTML = this.filesize(file.size);\n            }\n\n            if (this.options.addRemoveLinks) {\n              file._removeLink = Dropzone.createElement(\""<a class=\\\""dz-remove\\\"" href=\\\""javascript:undefined;\\\"" data-dz-remove>\"" + this.options.dictRemoveFile + \""</a>\"");\n              file.previewElement.appendChild(file._removeLink);\n            }\n\n            var removeFileEvent = function removeFileEvent(e) {\n              e.preventDefault();\n              e.stopPropagation();\n              if (file.status === Dropzone.UPLOADING) {\n                return Dropzone.confirm(_this2.options.dictCancelUploadConfirmation, function () {\n                  return _this2.removeFile(file);\n                });\n              } else {\n                if (_this2.options.dictRemoveFileConfirmation) {\n                  return Dropzone.confirm(_this2.options.dictRemoveFileConfirmation, function () {\n                    return _this2.removeFile(file);\n                  });\n                } else {\n                  return _this2.removeFile(file);\n                }\n              }\n            };\n\n            for (var _iterator5 = file.previewElement.querySelectorAll(\""[data-dz-remove]\""), _isArray5 = true, _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n              var _ref4;\n\n              if (_isArray5) {\n                if (_i5 >= _iterator5.length) break;\n                _ref4 = _iterator5[_i5++];\n              } else {\n                _i5 = _iterator5.next();\n                if (_i5.done) break;\n                _ref4 = _i5.value;\n              }\n\n              var removeLink = _ref4;\n\n              removeLink.addEventListener(\""click\"", removeFileEvent);\n            }\n          }\n        },\n\n\n        // Called whenever a file is removed.\n        removedfile: function removedfile(file) {\n          if (file.previewElement != null && file.previewElement.parentNode != null) {\n            file.previewElement.parentNode.removeChild(file.previewElement);\n          }\n          return this._updateMaxFilesReachedClass();\n        },\n\n\n        // Called when a thumbnail has been generated\n        // Receives `file` and `dataUrl`\n        thumbnail: function thumbnail(file, dataUrl) {\n          if (file.previewElement) {\n            file.previewElement.classList.remove(\""dz-file-preview\"");\n            for (var _iterator6 = file.previewElement.querySelectorAll(\""[data-dz-thumbnail]\""), _isArray6 = true, _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n              var _ref5;\n\n              if (_isArray6) {\n                if (_i6 >= _iterator6.length) break;\n                _ref5 = _iterator6[_i6++];\n              } else {\n                _i6 = _iterator6.next();\n                if (_i6.done) break;\n                _ref5 = _i6.value;\n              }\n\n              var thumbnailElement = _ref5;\n\n              thumbnailElement.alt = file.name;\n              thumbnailElement.src = dataUrl;\n            }\n\n            return setTimeout(function () {\n              return file.previewElement.classList.add(\""dz-image-preview\"");\n            }, 1);\n          }\n        },\n\n\n        // Called whenever an error occurs\n        // Receives `file` and `message`\n        error: function error(file, message) {\n          if (file.previewElement) {\n            file.previewElement.classList.add(\""dz-error\"");\n            if (typeof message !== \""String\"" && message.error) {\n              message = message.error;\n            }\n            for (var _iterator7 = file.previewElement.querySelectorAll(\""[data-dz-errormessage]\""), _isArray7 = true, _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n              var _ref6;\n\n              if (_isArray7) {\n                if (_i7 >= _iterator7.length) break;\n                _ref6 = _iterator7[_i7++];\n              } else {\n                _i7 = _iterator7.next();\n                if (_i7.done) break;\n                _ref6 = _i7.value;\n              }\n\n              var node = _ref6;\n\n              node.textContent = message;\n            }\n          }\n        },\n        errormultiple: function errormultiple() {},\n\n\n        // Called when a file gets processed. Since there is a cue, not all added\n        // files are processed immediately.\n        // Receives `file`\n        processing: function processing(file) {\n          if (file.previewElement) {\n            file.previewElement.classList.add(\""dz-processing\"");\n            if (file._removeLink) {\n              return file._removeLink.innerHTML = this.options.dictCancelUpload;\n            }\n          }\n        },\n        processingmultiple: function processingmultiple() {},\n\n\n        // Called whenever the upload progress gets updated.\n        // Receives `file`, `progress` (percentage 0-100) and `bytesSent`.\n        // To get the total number of bytes of the file, use `file.size`\n        uploadprogress: function uploadprogress(file, progress, bytesSent) {\n          if (file.previewElement) {\n            for (var _iterator8 = file.previewElement.querySelectorAll(\""[data-dz-uploadprogress]\""), _isArray8 = true, _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {\n              var _ref7;\n\n              if (_isArray8) {\n                if (_i8 >= _iterator8.length) break;\n                _ref7 = _iterator8[_i8++];\n              } else {\n                _i8 = _iterator8.next();\n                if (_i8.done) break;\n                _ref7 = _i8.value;\n              }\n\n              var node = _ref7;\n\n              node.nodeName === 'PROGRESS' ? node.value = progress : node.style.width = progress + \""%\"";\n            }\n          }\n        },\n\n\n        // Called whenever the total upload progress gets updated.\n        // Called with totalUploadProgress (0-100), totalBytes and totalBytesSent\n        totaluploadprogress: function totaluploadprogress() {},\n\n\n        // Called just before the file is sent. Gets the `xhr` object as second\n        // parameter, so you can modify it (for example to add a CSRF token) and a\n        // `formData` object to add additional information.\n        sending: function sending() {},\n        sendingmultiple: function sendingmultiple() {},\n\n\n        // When the complete upload is finished and successful\n        // Receives `file`\n        success: function success(file) {\n          if (file.previewElement) {\n            return file.previewElement.classList.add(\""dz-success\"");\n          }\n        },\n        successmultiple: function successmultiple() {},\n\n\n        // When the upload is canceled.\n        canceled: function canceled(file) {\n          return this.emit(\""error\"", file, this.options.dictUploadCanceled);\n        },\n        canceledmultiple: function canceledmultiple() {},\n\n\n        // When the upload is finished, either with success or an error.\n        // Receives `file`\n        complete: function complete(file) {\n          if (file._removeLink) {\n            file._removeLink.innerHTML = this.options.dictRemoveFile;\n          }\n          if (file.previewElement) {\n            return file.previewElement.classList.add(\""dz-complete\"");\n          }\n        },\n        completemultiple: function completemultiple() {},\n        maxfilesexceeded: function maxfilesexceeded() {},\n        maxfilesreached: function maxfilesreached() {},\n        queuecomplete: function queuecomplete() {},\n        addedfiles: function addedfiles() {}\n      };\n\n      this.prototype._thumbnailQueue = [];\n      this.prototype._processingThumbnail = false;\n    }\n\n    // global utility\n\n  }, {\n    key: \""extend\"",\n    value: function extend(target) {\n      for (var _len2 = arguments.length, objects = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        objects[_key2 - 1] = arguments[_key2];\n      }\n\n      for (var _iterator9 = objects, _isArray9 = true, _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {\n        var _ref8;\n\n        if (_isArray9) {\n          if (_i9 >= _iterator9.length) break;\n          _ref8 = _iterator9[_i9++];\n        } else {\n          _i9 = _iterator9.next();\n          if (_i9.done) break;\n          _ref8 = _i9.value;\n        }\n\n        var object = _ref8;\n\n        for (var key in object) {\n          var val = object[key];\n          target[key] = val;\n        }\n      }\n      return target;\n    }\n  }]);\n\n  function Dropzone(el, options) {\n    _classCallCheck(this, Dropzone);\n\n    var _this = _possibleConstructorReturn(this, (Dropzone.__proto__ || Object.getPrototypeOf(Dropzone)).call(this));\n\n    var fallback = void 0,\n        left = void 0;\n    _this.element = el;\n    // For backwards compatibility since the version was in the prototype previously\n    _this.version = Dropzone.version;\n\n    _this.defaultOptions.previewTemplate = _this.defaultOptions.previewTemplate.replace(/\\n*/g, \""\"");\n\n    _this.clickableElements = [];\n    _this.listeners = [];\n    _this.files = []; // All files\n\n    if (typeof _this.element === \""string\"") {\n      _this.element = document.querySelector(_this.element);\n    }\n\n    // Not checking if instance of HTMLElement or Element since IE9 is extremely weird.\n    if (!_this.element || _this.element.nodeType == null) {\n      throw new Error(\""Invalid dropzone element.\"");\n    }\n\n    if (_this.element.dropzone) {\n      throw new Error(\""Dropzone already attached.\"");\n    }\n\n    // Now add this dropzone to the instances.\n    Dropzone.instances.push(_this);\n\n    // Put the dropzone inside the element itself.\n    _this.element.dropzone = _this;\n\n    var elementOptions = (left = Dropzone.optionsForElement(_this.element)) != null ? left : {};\n\n    _this.options = Dropzone.extend({}, _this.defaultOptions, elementOptions, options != null ? options : {});\n\n    // If the browser failed, just call the fallback and leave\n    if (_this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n      var _ret;\n\n      return _ret = _this.options.fallback.call(_this), _possibleConstructorReturn(_this, _ret);\n    }\n\n    // @options.url = @element.getAttribute \""action\"" unless @options.url?\n    if (_this.options.url == null) {\n      _this.options.url = _this.element.getAttribute(\""action\"");\n    }\n\n    if (!_this.options.url) {\n      throw new Error(\""No URL provided.\"");\n    }\n\n    if (_this.options.acceptedFiles && _this.options.acceptedMimeTypes) {\n      throw new Error(\""You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\"");\n    }\n\n    if (_this.options.uploadMultiple && _this.options.chunking) {\n      throw new Error('You cannot set both: uploadMultiple and chunking.');\n    }\n\n    // Backwards compatibility\n    if (_this.options.acceptedMimeTypes) {\n      _this.options.acceptedFiles = _this.options.acceptedMimeTypes;\n      delete _this.options.acceptedMimeTypes;\n    }\n\n    // Backwards compatibility\n    if (_this.options.renameFilename != null) {\n      _this.options.renameFile = function (file) {\n        return _this.options.renameFilename.call(_this, file.name, file);\n      };\n    }\n\n    _this.options.method = _this.options.method.toUpperCase();\n\n    if ((fallback = _this.getExistingFallback()) && fallback.parentNode) {\n      // Remove the fallback\n      fallback.parentNode.removeChild(fallback);\n    }\n\n    // Display previews in the previewsContainer element or the Dropzone element unless explicitly set to false\n    if (_this.options.previewsContainer !== false) {\n      if (_this.options.previewsContainer) {\n        _this.previewsContainer = Dropzone.getElement(_this.options.previewsContainer, \""previewsContainer\"");\n      } else {\n        _this.previewsContainer = _this.element;\n      }\n    }\n\n    if (_this.options.clickable) {\n      if (_this.options.clickable === true) {\n        _this.clickableElements = [_this.element];\n      } else {\n        _this.clickableElements = Dropzone.getElements(_this.options.clickable, \""clickable\"");\n      }\n    }\n\n    _this.init();\n    return _this;\n  }\n\n  // Returns all files that have been accepted\n\n\n  _createClass(Dropzone, [{\n    key: \""getAcceptedFiles\"",\n    value: function getAcceptedFiles() {\n      return this.files.filter(function (file) {\n        return file.accepted;\n      }).map(function (file) {\n        return file;\n      });\n    }\n\n    // Returns all files that have been rejected\n    // Not sure when that's going to be useful, but added for completeness.\n\n  }, {\n    key: \""getRejectedFiles\"",\n    value: function getRejectedFiles() {\n      return this.files.filter(function (file) {\n        return !file.accepted;\n      }).map(function (file) {\n        return file;\n      });\n    }\n  }, {\n    key: \""getFilesWithStatus\"",\n    value: function getFilesWithStatus(status) {\n      return this.files.filter(function (file) {\n        return file.status === status;\n      }).map(function (file) {\n        return file;\n      });\n    }\n\n    // Returns all files that are in the queue\n\n  }, {\n    key: \""getQueuedFiles\"",\n    value: function getQueuedFiles() {\n      return this.getFilesWithStatus(Dropzone.QUEUED);\n    }\n  }, {\n    key: \""getUploadingFiles\"",\n    value: function getUploadingFiles() {\n      return this.getFilesWithStatus(Dropzone.UPLOADING);\n    }\n  }, {\n    key: \""getAddedFiles\"",\n    value: function getAddedFiles() {\n      return this.getFilesWithStatus(Dropzone.ADDED);\n    }\n\n    // Files that are either queued or uploading\n\n  }, {\n    key: \""getActiveFiles\"",\n    value: function getActiveFiles() {\n      return this.files.filter(function (file) {\n        return file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED;\n      }).map(function (file) {\n        return file;\n      });\n    }\n\n    // The function that gets called when Dropzone is initialized. You\n    // can (and should) setup event listeners inside this function.\n\n  }, {\n    key: \""init\"",\n    value: function init() {\n      var _this3 = this;\n\n      // In case it isn't set already\n      if (this.element.tagName === \""form\"") {\n        this.element.setAttribute(\""enctype\"", \""multipart/form-data\"");\n      }\n\n      if (this.element.classList.contains(\""dropzone\"") && !this.element.querySelector(\"".dz-message\"")) {\n        this.element.appendChild(Dropzone.createElement(\""<div class=\\\""dz-default dz-message\\\""><span>\"" + this.options.dictDefaultMessage + \""</span></div>\""));\n      }\n\n      if (this.clickableElements.length) {\n        var setupHiddenFileInput = function setupHiddenFileInput() {\n          if (_this3.hiddenFileInput) {\n            _this3.hiddenFileInput.parentNode.removeChild(_this3.hiddenFileInput);\n          }\n          _this3.hiddenFileInput = document.createElement(\""input\"");\n          _this3.hiddenFileInput.setAttribute(\""type\"", \""file\"");\n          if (_this3.options.maxFiles === null || _this3.options.maxFiles > 1) {\n            _this3.hiddenFileInput.setAttribute(\""multiple\"", \""multiple\"");\n          }\n          _this3.hiddenFileInput.className = \""dz-hidden-input\"";\n\n          if (_this3.options.acceptedFiles !== null) {\n            _this3.hiddenFileInput.setAttribute(\""accept\"", _this3.options.acceptedFiles);\n          }\n          if (_this3.options.capture !== null) {\n            _this3.hiddenFileInput.setAttribute(\""capture\"", _this3.options.capture);\n          }\n\n          // Not setting `display=\""none\""` because some browsers don't accept clicks\n          // on elements that aren't displayed.\n          _this3.hiddenFileInput.style.visibility = \""hidden\"";\n          _this3.hiddenFileInput.style.position = \""absolute\"";\n          _this3.hiddenFileInput.style.top = \""0\"";\n          _this3.hiddenFileInput.style.left = \""0\"";\n          _this3.hiddenFileInput.style.height = \""0\"";\n          _this3.hiddenFileInput.style.width = \""0\"";\n          Dropzone.getElement(_this3.options.hiddenInputContainer, 'hiddenInputContainer').appendChild(_this3.hiddenFileInput);\n          return _this3.hiddenFileInput.addEventListener(\""change\"", function () {\n            var files = _this3.hiddenFileInput.files;\n\n            if (files.length) {\n              for (var _iterator10 = files, _isArray10 = true, _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {\n                var _ref9;\n\n                if (_isArray10) {\n                  if (_i10 >= _iterator10.length) break;\n                  _ref9 = _iterator10[_i10++];\n                } else {\n                  _i10 = _iterator10.next();\n                  if (_i10.done) break;\n                  _ref9 = _i10.value;\n                }\n\n                var file = _ref9;\n\n                _this3.addFile(file);\n              }\n            }\n            _this3.emit(\""addedfiles\"", files);\n            return setupHiddenFileInput();\n          });\n        };\n        setupHiddenFileInput();\n      }\n\n      this.URL = window.URL !== null ? window.URL : window.webkitURL;\n\n      // Setup all event listeners on the Dropzone object itself.\n      // They're not in @setupEventListeners() because they shouldn't be removed\n      // again when the dropzone gets disabled.\n      for (var _iterator11 = this.events, _isArray11 = true, _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {\n        var _ref10;\n\n        if (_isArray11) {\n          if (_i11 >= _iterator11.length) break;\n          _ref10 = _iterator11[_i11++];\n        } else {\n          _i11 = _iterator11.next();\n          if (_i11.done) break;\n          _ref10 = _i11.value;\n        }\n\n        var eventName = _ref10;\n\n        this.on(eventName, this.options[eventName]);\n      }\n\n      this.on(\""uploadprogress\"", function () {\n        return _this3.updateTotalUploadProgress();\n      });\n\n      this.on(\""removedfile\"", function () {\n        return _this3.updateTotalUploadProgress();\n      });\n\n      this.on(\""canceled\"", function (file) {\n        return _this3.emit(\""complete\"", file);\n      });\n\n      // Emit a `queuecomplete` event if all files finished uploading.\n      this.on(\""complete\"", function (file) {\n        if (_this3.getAddedFiles().length === 0 && _this3.getUploadingFiles().length === 0 && _this3.getQueuedFiles().length === 0) {\n          // This needs to be deferred so that `queuecomplete` really triggers after `complete`\n          return setTimeout(function () {\n            return _this3.emit(\""queuecomplete\"");\n          }, 0);\n        }\n      });\n\n      var noPropagation = function noPropagation(e) {\n        e.stopPropagation();\n        if (e.preventDefault) {\n          return e.preventDefault();\n        } else {\n          return e.returnValue = false;\n        }\n      };\n\n      // Create the listeners\n      this.listeners = [{\n        element: this.element,\n        events: {\n          \""dragstart\"": function dragstart(e) {\n            return _this3.emit(\""dragstart\"", e);\n          },\n          \""dragenter\"": function dragenter(e) {\n            noPropagation(e);\n            return _this3.emit(\""dragenter\"", e);\n          },\n          \""dragover\"": function dragover(e) {\n            // Makes it possible to drag files from chrome's download bar\n            // http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar\n            // Try is required to prevent bug in Internet Explorer 11 (SCRIPT65535 exception)\n            var efct = void 0;\n            try {\n              efct = e.dataTransfer.effectAllowed;\n            } catch (error) {}\n            e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\n\n            noPropagation(e);\n            return _this3.emit(\""dragover\"", e);\n          },\n          \""dragleave\"": function dragleave(e) {\n            return _this3.emit(\""dragleave\"", e);\n          },\n          \""drop\"": function drop(e) {\n            noPropagation(e);\n            return _this3.drop(e);\n          },\n          \""dragend\"": function dragend(e) {\n            return _this3.emit(\""dragend\"", e);\n          }\n\n          // This is disabled right now, because the browsers don't implement it properly.\n          // \""paste\"": (e) =>\n          //   noPropagation e\n          //   @paste e\n        } }];\n\n      this.clickableElements.forEach(function (clickableElement) {\n        return _this3.listeners.push({\n          element: clickableElement,\n          events: {\n            \""click\"": function click(evt) {\n              // Only the actual dropzone or the message element should trigger file selection\n              if (clickableElement !== _this3.element || evt.target === _this3.element || Dropzone.elementInside(evt.target, _this3.element.querySelector(\"".dz-message\""))) {\n                _this3.hiddenFileInput.click(); // Forward the click\n              }\n              return true;\n            }\n          }\n        });\n      });\n\n      this.enable();\n\n      return this.options.init.call(this);\n    }\n\n    // Not fully tested yet\n\n  }, {\n    key: \""destroy\"",\n    value: function destroy() {\n      this.disable();\n      this.removeAllFiles(true);\n      if (this.hiddenFileInput != null ? this.hiddenFileInput.parentNode : undefined) {\n        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n        this.hiddenFileInput = null;\n      }\n      delete this.element.dropzone;\n      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n    }\n  }, {\n    key: \""updateTotalUploadProgress\"",\n    value: function updateTotalUploadProgress() {\n      var totalUploadProgress = void 0;\n      var totalBytesSent = 0;\n      var totalBytes = 0;\n\n      var activeFiles = this.getActiveFiles();\n\n      if (activeFiles.length) {\n        for (var _iterator12 = this.getActiveFiles(), _isArray12 = true, _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) {\n          var _ref11;\n\n          if (_isArray12) {\n            if (_i12 >= _iterator12.length) break;\n            _ref11 = _iterator12[_i12++];\n          } else {\n            _i12 = _iterator12.next();\n            if (_i12.done) break;\n            _ref11 = _i12.value;\n          }\n\n          var file = _ref11;\n\n          totalBytesSent += file.upload.bytesSent;\n          totalBytes += file.upload.total;\n        }\n        totalUploadProgress = 100 * totalBytesSent / totalBytes;\n      } else {\n        totalUploadProgress = 100;\n      }\n\n      return this.emit(\""totaluploadprogress\"", totalUploadProgress, totalBytes, totalBytesSent);\n    }\n\n    // @options.paramName can be a function taking one parameter rather than a string.\n    // A parameter name for a file is obtained simply by calling this with an index number.\n\n  }, {\n    key: \""_getParamName\"",\n    value: function _getParamName(n) {\n      if (typeof this.options.paramName === \""function\"") {\n        return this.options.paramName(n);\n      } else {\n        return \""\"" + this.options.paramName + (this.options.uploadMultiple ? \""[\"" + n + \""]\"" : \""\"");\n      }\n    }\n\n    // If @options.renameFile is a function,\n    // the function will be used to rename the file.name before appending it to the formData\n\n  }, {\n    key: \""_renameFile\"",\n    value: function _renameFile(file) {\n      if (typeof this.options.renameFile !== \""function\"") {\n        return file.name;\n      }\n      return this.options.renameFile(file);\n    }\n\n    // Returns a form that can be used as fallback if the browser does not support DragnDrop\n    //\n    // If the dropzone is already a form, only the input field and button are returned. Otherwise a complete form element is provided.\n    // This code has to pass in IE7 :(\n\n  }, {\n    key: \""getFallbackForm\"",\n    value: function getFallbackForm() {\n      var existingFallback = void 0,\n          form = void 0;\n      if (existingFallback = this.getExistingFallback()) {\n        return existingFallback;\n      }\n\n      var fieldsString = \""<div class=\\\""dz-fallback\\\"">\"";\n      if (this.options.dictFallbackText) {\n        fieldsString += \""<p>\"" + this.options.dictFallbackText + \""</p>\"";\n      }\n      fieldsString += \""<input type=\\\""file\\\"" name=\\\""\"" + this._getParamName(0) + \""\\\"" \"" + (this.options.uploadMultiple ? 'multiple=\""multiple\""' : undefined) + \"" /><input type=\\\""submit\\\"" value=\\\""Upload!\\\""></div>\"";\n\n      var fields = Dropzone.createElement(fieldsString);\n      if (this.element.tagName !== \""FORM\"") {\n        form = Dropzone.createElement(\""<form action=\\\""\"" + this.options.url + \""\\\"" enctype=\\\""multipart/form-data\\\"" method=\\\""\"" + this.options.method + \""\\\""></form>\"");\n        form.appendChild(fields);\n      } else {\n        // Make sure that the enctype and method attributes are set properly\n        this.element.setAttribute(\""enctype\"", \""multipart/form-data\"");\n        this.element.setAttribute(\""method\"", this.options.method);\n      }\n      return form != null ? form : fields;\n    }\n\n    // Returns the fallback elements if they exist already\n    //\n    // This code has to pass in IE7 :(\n\n  }, {\n    key: \""getExistingFallback\"",\n    value: function getExistingFallback() {\n      var getFallback = function getFallback(elements) {\n        for (var _iterator13 = elements, _isArray13 = true, _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) {\n          var _ref12;\n\n          if (_isArray13) {\n            if (_i13 >= _iterator13.length) break;\n            _ref12 = _iterator13[_i13++];\n          } else {\n            _i13 = _iterator13.next();\n            if (_i13.done) break;\n            _ref12 = _i13.value;\n          }\n\n          var el = _ref12;\n\n          if (/(^| )fallback($| )/.test(el.className)) {\n            return el;\n          }\n        }\n      };\n\n      var _arr = [\""div\"", \""form\""];\n      for (var _i14 = 0; _i14 < _arr.length; _i14++) {\n        var tagName = _arr[_i14];\n        var fallback;\n        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n          return fallback;\n        }\n      }\n    }\n\n    // Activates all listeners stored in @listeners\n\n  }, {\n    key: \""setupEventListeners\"",\n    value: function setupEventListeners() {\n      return this.listeners.map(function (elementListeners) {\n        return function () {\n          var result = [];\n          for (var event in elementListeners.events) {\n            var listener = elementListeners.events[event];\n            result.push(elementListeners.element.addEventListener(event, listener, false));\n          }\n          return result;\n        }();\n      });\n    }\n\n    // Deactivates all listeners stored in @listeners\n\n  }, {\n    key: \""removeEventListeners\"",\n    value: function removeEventListeners() {\n      return this.listeners.map(function (elementListeners) {\n        return function () {\n          var result = [];\n          for (var event in elementListeners.events) {\n            var listener = elementListeners.events[event];\n            result.push(elementListeners.element.removeEventListener(event, listener, false));\n          }\n          return result;\n        }();\n      });\n    }\n\n    // Removes all event listeners and cancels all files in the queue or being processed.\n\n  }, {\n    key: \""disable\"",\n    value: function disable() {\n      var _this4 = this;\n\n      this.clickableElements.forEach(function (element) {\n        return element.classList.remove(\""dz-clickable\"");\n      });\n      this.removeEventListeners();\n      this.disabled = true;\n\n      return this.files.map(function (file) {\n        return _this4.cancelUpload(file);\n      });\n    }\n  }, {\n    key: \""enable\"",\n    value: function enable() {\n      delete this.disabled;\n      this.clickableElements.forEach(function (element) {\n        return element.classList.add(\""dz-clickable\"");\n      });\n      return this.setupEventListeners();\n    }\n\n    // Returns a nicely formatted filesize\n\n  }, {\n    key: \""filesize\"",\n    value: function filesize(size) {\n      var selectedSize = 0;\n      var selectedUnit = \""b\"";\n\n      if (size > 0) {\n        var units = ['tb', 'gb', 'mb', 'kb', 'b'];\n\n        for (var i = 0; i < units.length; i++) {\n          var unit = units[i];\n          var cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n\n          if (size >= cutoff) {\n            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n            selectedUnit = unit;\n            break;\n          }\n        }\n\n        selectedSize = Math.round(10 * selectedSize) / 10; // Cutting of digits\n      }\n\n      return \""<strong>\"" + selectedSize + \""</strong> \"" + this.options.dictFileSizeUnits[selectedUnit];\n    }\n\n    // Adds or removes the `dz-max-files-reached` class from the form.\n\n  }, {\n    key: \""_updateMaxFilesReachedClass\"",\n    value: function _updateMaxFilesReachedClass() {\n      if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        if (this.getAcceptedFiles().length === this.options.maxFiles) {\n          this.emit('maxfilesreached', this.files);\n        }\n        return this.element.classList.add(\""dz-max-files-reached\"");\n      } else {\n        return this.element.classList.remove(\""dz-max-files-reached\"");\n      }\n    }\n  }, {\n    key: \""drop\"",\n    value: function drop(e) {\n      if (!e.dataTransfer) {\n        return;\n      }\n      this.emit(\""drop\"", e);\n\n      // Convert the FileList to an Array\n      // This is necessary for IE11\n      var files = [];\n      for (var i = 0; i < e.dataTransfer.files.length; i++) {\n        files[i] = e.dataTransfer.files[i];\n      }\n\n      this.emit(\""addedfiles\"", files);\n\n      // Even if it's a folder, files.length will contain the folders.\n      if (files.length) {\n        var items = e.dataTransfer.items;\n\n        if (items && items.length && items[0].webkitGetAsEntry != null) {\n          // The browser supports dropping of folders, so handle items instead of files\n          this._addFilesFromItems(items);\n        } else {\n          this.handleFiles(files);\n        }\n      }\n    }\n  }, {\n    key: \""paste\"",\n    value: function paste(e) {\n      if (__guard__(e != null ? e.clipboardData : undefined, function (x) {\n        return x.items;\n      }) == null) {\n        return;\n      }\n\n      this.emit(\""paste\"", e);\n      var items = e.clipboardData.items;\n\n\n      if (items.length) {\n        return this._addFilesFromItems(items);\n      }\n    }\n  }, {\n    key: \""handleFiles\"",\n    value: function handleFiles(files) {\n      for (var _iterator14 = files, _isArray14 = true, _i15 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) {\n        var _ref13;\n\n        if (_isArray14) {\n          if (_i15 >= _iterator14.length) break;\n          _ref13 = _iterator14[_i15++];\n        } else {\n          _i15 = _iterator14.next();\n          if (_i15.done) break;\n          _ref13 = _i15.value;\n        }\n\n        var file = _ref13;\n\n        this.addFile(file);\n      }\n    }\n\n    // When a folder is dropped (or files are pasted), items must be handled\n    // instead of files.\n\n  }, {\n    key: \""_addFilesFromItems\"",\n    value: function _addFilesFromItems(items) {\n      var _this5 = this;\n\n      return function () {\n        var result = [];\n        for (var _iterator15 = items, _isArray15 = true, _i16 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) {\n          var _ref14;\n\n          if (_isArray15) {\n            if (_i16 >= _iterator15.length) break;\n            _ref14 = _iterator15[_i16++];\n          } else {\n            _i16 = _iterator15.next();\n            if (_i16.done) break;\n            _ref14 = _i16.value;\n          }\n\n          var item = _ref14;\n\n          var entry;\n          if (item.webkitGetAsEntry != null && (entry = item.webkitGetAsEntry())) {\n            if (entry.isFile) {\n              result.push(_this5.addFile(item.getAsFile()));\n            } else if (entry.isDirectory) {\n              // Append all files from that directory to files\n              result.push(_this5._addFilesFromDirectory(entry, entry.name));\n            } else {\n              result.push(undefined);\n            }\n          } else if (item.getAsFile != null) {\n            if (item.kind == null || item.kind === \""file\"") {\n              result.push(_this5.addFile(item.getAsFile()));\n            } else {\n              result.push(undefined);\n            }\n          } else {\n            result.push(undefined);\n          }\n        }\n        return result;\n      }();\n    }\n\n    // Goes through the directory, and adds each file it finds recursively\n\n  }, {\n    key: \""_addFilesFromDirectory\"",\n    value: function _addFilesFromDirectory(directory, path) {\n      var _this6 = this;\n\n      var dirReader = directory.createReader();\n\n      var errorHandler = function errorHandler(error) {\n        return __guardMethod__(console, 'log', function (o) {\n          return o.log(error);\n        });\n      };\n\n      var readEntries = function readEntries() {\n        return dirReader.readEntries(function (entries) {\n          if (entries.length > 0) {\n            for (var _iterator16 = entries, _isArray16 = true, _i17 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) {\n              var _ref15;\n\n              if (_isArray16) {\n                if (_i17 >= _iterator16.length) break;\n                _ref15 = _iterator16[_i17++];\n              } else {\n                _i17 = _iterator16.next();\n                if (_i17.done) break;\n                _ref15 = _i17.value;\n              }\n\n              var entry = _ref15;\n\n              if (entry.isFile) {\n                entry.file(function (file) {\n                  if (_this6.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\n                    return;\n                  }\n                  file.fullPath = path + \""/\"" + file.name;\n                  return _this6.addFile(file);\n                });\n              } else if (entry.isDirectory) {\n                _this6._addFilesFromDirectory(entry, path + \""/\"" + entry.name);\n              }\n            }\n\n            // Recursively call readEntries() again, since browser only handle\n            // the first 100 entries.\n            // See: https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#readEntries\n            readEntries();\n          }\n          return null;\n        }, errorHandler);\n      };\n\n      return readEntries();\n    }\n\n    // If `done()` is called without argument the file is accepted\n    // If you call it with an error message, the file is rejected\n    // (This allows for asynchronous validation)\n    //\n    // This function checks the filesize, and if the file.type passes the\n    // `acceptedFiles` check.\n\n  }, {\n    key: \""accept\"",\n    value: function accept(file, done) {\n      if (this.options.maxFilesize && file.size > this.options.maxFilesize * 1024 * 1024) {\n        return done(this.options.dictFileTooBig.replace(\""{{filesize}}\"", Math.round(file.size / 1024 / 10.24) / 100).replace(\""{{maxFilesize}}\"", this.options.maxFilesize));\n      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n        return done(this.options.dictInvalidFileType);\n      } else if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        done(this.options.dictMaxFilesExceeded.replace(\""{{maxFiles}}\"", this.options.maxFiles));\n        return this.emit(\""maxfilesexceeded\"", file);\n      } else {\n        return this.options.accept.call(this, file, done);\n      }\n    }\n  }, {\n    key: \""addFile\"",\n    value: function addFile(file) {\n      var _this7 = this;\n\n      file.upload = {\n        uuid: Dropzone.uuidv4(),\n        progress: 0,\n        // Setting the total upload size to file.size for the beginning\n        // It's actual different than the size to be transmitted.\n        total: file.size,\n        bytesSent: 0,\n        filename: this._renameFile(file),\n        chunked: this.options.chunking && (this.options.forceChunking || file.size > this.options.chunkSize),\n        totalChunkCount: Math.ceil(file.size / this.options.chunkSize)\n      };\n      this.files.push(file);\n\n      file.status = Dropzone.ADDED;\n\n      this.emit(\""addedfile\"", file);\n\n      this._enqueueThumbnail(file);\n\n      return this.accept(file, function (error) {\n        if (error) {\n          file.accepted = false;\n          _this7._errorProcessing([file], error); // Will set the file.status\n        } else {\n          file.accepted = true;\n          if (_this7.options.autoQueue) {\n            _this7.enqueueFile(file);\n          } // Will set .accepted = true\n        }\n        return _this7._updateMaxFilesReachedClass();\n      });\n    }\n\n    // Wrapper for enqueueFile\n\n  }, {\n    key: \""enqueueFiles\"",\n    value: function enqueueFiles(files) {\n      for (var _iterator17 = files, _isArray17 = true, _i18 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) {\n        var _ref16;\n\n        if (_isArray17) {\n          if (_i18 >= _iterator17.length) break;\n          _ref16 = _iterator17[_i18++];\n        } else {\n          _i18 = _iterator17.next();\n          if (_i18.done) break;\n          _ref16 = _i18.value;\n        }\n\n        var file = _ref16;\n\n        this.enqueueFile(file);\n      }\n      return null;\n    }\n  }, {\n    key: \""enqueueFile\"",\n    value: function enqueueFile(file) {\n      var _this8 = this;\n\n      if (file.status === Dropzone.ADDED && file.accepted === true) {\n        file.status = Dropzone.QUEUED;\n        if (this.options.autoProcessQueue) {\n          return setTimeout(function () {\n            return _this8.processQueue();\n          }, 0); // Deferring the call\n        }\n      } else {\n        throw new Error(\""This file can't be queued because it has already been processed or was rejected.\"");\n      }\n    }\n  }, {\n    key: \""_enqueueThumbnail\"",\n    value: function _enqueueThumbnail(file) {\n      var _this9 = this;\n\n      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n        this._thumbnailQueue.push(file);\n        return setTimeout(function () {\n          return _this9._processThumbnailQueue();\n        }, 0); // Deferring the call\n      }\n    }\n  }, {\n    key: \""_processThumbnailQueue\"",\n    value: function _processThumbnailQueue() {\n      var _this10 = this;\n\n      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n        return;\n      }\n\n      this._processingThumbnail = true;\n      var file = this._thumbnailQueue.shift();\n      return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, function (dataUrl) {\n        _this10.emit(\""thumbnail\"", file, dataUrl);\n        _this10._processingThumbnail = false;\n        return _this10._processThumbnailQueue();\n      });\n    }\n\n    // Can be called by the user to remove a file\n\n  }, {\n    key: \""removeFile\"",\n    value: function removeFile(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        this.cancelUpload(file);\n      }\n      this.files = without(this.files, file);\n\n      this.emit(\""removedfile\"", file);\n      if (this.files.length === 0) {\n        return this.emit(\""reset\"");\n      }\n    }\n\n    // Removes all files that aren't currently processed from the list\n\n  }, {\n    key: \""removeAllFiles\"",\n    value: function removeAllFiles(cancelIfNecessary) {\n      // Create a copy of files since removeFile() changes the @files array.\n      if (cancelIfNecessary == null) {\n        cancelIfNecessary = false;\n      }\n      for (var _iterator18 = this.files.slice(), _isArray18 = true, _i19 = 0, _iterator18 = _isArray18 ? _iterator18 : _iterator18[Symbol.iterator]();;) {\n        var _ref17;\n\n        if (_isArray18) {\n          if (_i19 >= _iterator18.length) break;\n          _ref17 = _iterator18[_i19++];\n        } else {\n          _i19 = _iterator18.next();\n          if (_i19.done) break;\n          _ref17 = _i19.value;\n        }\n\n        var file = _ref17;\n\n        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n          this.removeFile(file);\n        }\n      }\n      return null;\n    }\n\n    // Resizes an image before it gets sent to the server. This function is the default behavior of\n    // `options.transformFile` if `resizeWidth` or `resizeHeight` are set. The callback is invoked with\n    // the resized blob.\n\n  }, {\n    key: \""resizeImage\"",\n    value: function resizeImage(file, width, height, resizeMethod, callback) {\n      var _this11 = this;\n\n      return this.createThumbnail(file, width, height, resizeMethod, true, function (dataUrl, canvas) {\n        if (canvas == null) {\n          // The image has not been resized\n          return callback(file);\n        } else {\n          var resizeMimeType = _this11.options.resizeMimeType;\n\n          if (resizeMimeType == null) {\n            resizeMimeType = file.type;\n          }\n          var resizedDataURL = canvas.toDataURL(resizeMimeType, _this11.options.resizeQuality);\n          if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') {\n            // Now add the original EXIF information\n            resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);\n          }\n          return callback(Dropzone.dataURItoBlob(resizedDataURL));\n        }\n      });\n    }\n  }, {\n    key: \""createThumbnail\"",\n    value: function createThumbnail(file, width, height, resizeMethod, fixOrientation, callback) {\n      var _this12 = this;\n\n      var fileReader = new FileReader();\n\n      fileReader.onload = function () {\n\n        file.dataURL = fileReader.result;\n\n        // Don't bother creating a thumbnail for SVG images since they're vector\n        if (file.type === \""image/svg+xml\"") {\n          if (callback != null) {\n            callback(fileReader.result);\n          }\n          return;\n        }\n\n        return _this12.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);\n      };\n\n      return fileReader.readAsDataURL(file);\n    }\n  }, {\n    key: \""createThumbnailFromUrl\"",\n    value: function createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {\n      var _this13 = this;\n\n      // Not using `new Image` here because of a bug in latest Chrome versions.\n      // See https://github.com/enyo/dropzone/pull/226\n      var img = document.createElement(\""img\"");\n\n      if (crossOrigin) {\n        img.crossOrigin = crossOrigin;\n      }\n\n      img.onload = function () {\n        var loadExif = function loadExif(callback) {\n          return callback(1);\n        };\n        if (typeof EXIF !== 'undefined' && EXIF !== null && fixOrientation) {\n          loadExif = function loadExif(callback) {\n            return EXIF.getData(img, function () {\n              return callback(EXIF.getTag(this, 'Orientation'));\n            });\n          };\n        }\n\n        return loadExif(function (orientation) {\n          file.width = img.width;\n          file.height = img.height;\n\n          var resizeInfo = _this13.options.resize.call(_this13, file, width, height, resizeMethod);\n\n          var canvas = document.createElement(\""canvas\"");\n          var ctx = canvas.getContext(\""2d\"");\n\n          canvas.width = resizeInfo.trgWidth;\n          canvas.height = resizeInfo.trgHeight;\n\n          if (orientation > 4) {\n            canvas.width = resizeInfo.trgHeight;\n            canvas.height = resizeInfo.trgWidth;\n          }\n\n          switch (orientation) {\n            case 2:\n              // horizontal flip\n              ctx.translate(canvas.width, 0);\n              ctx.scale(-1, 1);\n              break;\n            case 3:\n              // 180° rotate left\n              ctx.translate(canvas.width, canvas.height);\n              ctx.rotate(Math.PI);\n              break;\n            case 4:\n              // vertical flip\n              ctx.translate(0, canvas.height);\n              ctx.scale(1, -1);\n              break;\n            case 5:\n              // vertical flip + 90 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.scale(1, -1);\n              break;\n            case 6:\n              // 90° rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.translate(0, -canvas.width);\n              break;\n            case 7:\n              // horizontal flip + 90 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.translate(canvas.height, -canvas.width);\n              ctx.scale(-1, 1);\n              break;\n            case 8:\n              // 90° rotate left\n              ctx.rotate(-0.5 * Math.PI);\n              ctx.translate(-canvas.height, 0);\n              break;\n          }\n\n          // This is a bugfix for iOS' scaling bug.\n          drawImageIOSFix(ctx, img, resizeInfo.srcX != null ? resizeInfo.srcX : 0, resizeInfo.srcY != null ? resizeInfo.srcY : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, resizeInfo.trgX != null ? resizeInfo.trgX : 0, resizeInfo.trgY != null ? resizeInfo.trgY : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n\n          var thumbnail = canvas.toDataURL(\""image/png\"");\n\n          if (callback != null) {\n            return callback(thumbnail, canvas);\n          }\n        });\n      };\n\n      if (callback != null) {\n        img.onerror = callback;\n      }\n\n      return img.src = file.dataURL;\n    }\n\n    // Goes through the queue and processes files if there aren't too many already.\n\n  }, {\n    key: \""processQueue\"",\n    value: function processQueue() {\n      var parallelUploads = this.options.parallelUploads;\n\n      var processingLength = this.getUploadingFiles().length;\n      var i = processingLength;\n\n      // There are already at least as many files uploading than should be\n      if (processingLength >= parallelUploads) {\n        return;\n      }\n\n      var queuedFiles = this.getQueuedFiles();\n\n      if (!(queuedFiles.length > 0)) {\n        return;\n      }\n\n      if (this.options.uploadMultiple) {\n        // The files should be uploaded in one request\n        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n      } else {\n        while (i < parallelUploads) {\n          if (!queuedFiles.length) {\n            return;\n          } // Nothing left to process\n          this.processFile(queuedFiles.shift());\n          i++;\n        }\n      }\n    }\n\n    // Wrapper for `processFiles`\n\n  }, {\n    key: \""processFile\"",\n    value: function processFile(file) {\n      return this.processFiles([file]);\n    }\n\n    // Loads the file, then calls finishedLoading()\n\n  }, {\n    key: \""processFiles\"",\n    value: function processFiles(files) {\n      for (var _iterator19 = files, _isArray19 = true, _i20 = 0, _iterator19 = _isArray19 ? _iterator19 : _iterator19[Symbol.iterator]();;) {\n        var _ref18;\n\n        if (_isArray19) {\n          if (_i20 >= _iterator19.length) break;\n          _ref18 = _iterator19[_i20++];\n        } else {\n          _i20 = _iterator19.next();\n          if (_i20.done) break;\n          _ref18 = _i20.value;\n        }\n\n        var file = _ref18;\n\n        file.processing = true; // Backwards compatibility\n        file.status = Dropzone.UPLOADING;\n\n        this.emit(\""processing\"", file);\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\""processingmultiple\"", files);\n      }\n\n      return this.uploadFiles(files);\n    }\n  }, {\n    key: \""_getFilesWithXhr\"",\n    value: function _getFilesWithXhr(xhr) {\n      var files = void 0;\n      return files = this.files.filter(function (file) {\n        return file.xhr === xhr;\n      }).map(function (file) {\n        return file;\n      });\n    }\n\n    // Cancels the file upload and sets the status to CANCELED\n    // **if** the file is actually being uploaded.\n    // If it's still in the queue, the file is being removed from it and the status\n    // set to CANCELED.\n\n  }, {\n    key: \""cancelUpload\"",\n    value: function cancelUpload(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        var groupedFiles = this._getFilesWithXhr(file.xhr);\n        for (var _iterator20 = groupedFiles, _isArray20 = true, _i21 = 0, _iterator20 = _isArray20 ? _iterator20 : _iterator20[Symbol.iterator]();;) {\n          var _ref19;\n\n          if (_isArray20) {\n            if (_i21 >= _iterator20.length) break;\n            _ref19 = _iterator20[_i21++];\n          } else {\n            _i21 = _iterator20.next();\n            if (_i21.done) break;\n            _ref19 = _i21.value;\n          }\n\n          var groupedFile = _ref19;\n\n          groupedFile.status = Dropzone.CANCELED;\n        }\n        if (typeof file.xhr !== 'undefined') {\n          file.xhr.abort();\n        }\n        for (var _iterator21 = groupedFiles, _isArray21 = true, _i22 = 0, _iterator21 = _isArray21 ? _iterator21 : _iterator21[Symbol.iterator]();;) {\n          var _ref20;\n\n          if (_isArray21) {\n            if (_i22 >= _iterator21.length) break;\n            _ref20 = _iterator21[_i22++];\n          } else {\n            _i22 = _iterator21.next();\n            if (_i22.done) break;\n            _ref20 = _i22.value;\n          }\n\n          var _groupedFile = _ref20;\n\n          this.emit(\""canceled\"", _groupedFile);\n        }\n        if (this.options.uploadMultiple) {\n          this.emit(\""canceledmultiple\"", groupedFiles);\n        }\n      } else if (file.status === Dropzone.ADDED || file.status === Dropzone.QUEUED) {\n        file.status = Dropzone.CANCELED;\n        this.emit(\""canceled\"", file);\n        if (this.options.uploadMultiple) {\n          this.emit(\""canceledmultiple\"", [file]);\n        }\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n  }, {\n    key: \""resolveOption\"",\n    value: function resolveOption(option) {\n      if (typeof option === 'function') {\n        for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n          args[_key3 - 1] = arguments[_key3];\n        }\n\n        return option.apply(this, args);\n      }\n      return option;\n    }\n  }, {\n    key: \""uploadFile\"",\n    value: function uploadFile(file) {\n      return this.uploadFiles([file]);\n    }\n  }, {\n    key: \""uploadFiles\"",\n    value: function uploadFiles(files) {\n      var _this14 = this;\n\n      this._transformFiles(files, function (transformedFiles) {\n        if (files[0].upload.chunked) {\n          // This file should be sent in chunks!\n\n          // If the chunking option is set, we **know** that there can only be **one** file, since\n          // uploadMultiple is not allowed with this option.\n          var file = files[0];\n          var transformedFile = transformedFiles[0];\n          var startedChunkCount = 0;\n\n          file.upload.chunks = [];\n\n          var handleNextChunk = function handleNextChunk() {\n            var chunkIndex = 0;\n\n            // Find the next item in file.upload.chunks that is not defined yet.\n            while (file.upload.chunks[chunkIndex] !== undefined) {\n              chunkIndex++;\n            }\n\n            // This means, that all chunks have already been started.\n            if (chunkIndex >= file.upload.totalChunkCount) return;\n\n            startedChunkCount++;\n\n            var start = chunkIndex * _this14.options.chunkSize;\n            var end = Math.min(start + _this14.options.chunkSize, file.size);\n\n            var dataBlock = {\n              name: _this14._getParamName(0),\n              data: transformedFile.webkitSlice ? transformedFile.webkitSlice(start, end) : transformedFile.slice(start, end),\n              filename: file.upload.filename,\n              chunkIndex: chunkIndex\n            };\n\n            file.upload.chunks[chunkIndex] = {\n              file: file,\n              index: chunkIndex,\n              dataBlock: dataBlock, // In case we want to retry.\n              status: Dropzone.UPLOADING,\n              progress: 0,\n              retries: 0 // The number of times this block has been retried.\n            };\n\n            _this14._uploadData(files, [dataBlock]);\n          };\n\n          file.upload.finishedChunkUpload = function (chunk) {\n            var allFinished = true;\n            chunk.status = Dropzone.SUCCESS;\n\n            // Clear the data from the chunk\n            chunk.dataBlock = null;\n            // Leaving this reference to xhr intact here will cause memory leaks in some browsers\n            chunk.xhr = null;\n\n            for (var i = 0; i < file.upload.totalChunkCount; i++) {\n              if (file.upload.chunks[i] === undefined) {\n                return handleNextChunk();\n              }\n              if (file.upload.chunks[i].status !== Dropzone.SUCCESS) {\n                allFinished = false;\n              }\n            }\n\n            if (allFinished) {\n              _this14.options.chunksUploaded(file, function () {\n                _this14._finished(files, '', null);\n              });\n            }\n          };\n\n          if (_this14.options.parallelChunkUploads) {\n            for (var i = 0; i < file.upload.totalChunkCount; i++) {\n              handleNextChunk();\n            }\n          } else {\n            handleNextChunk();\n          }\n        } else {\n          var dataBlocks = [];\n          for (var _i23 = 0; _i23 < files.length; _i23++) {\n            dataBlocks[_i23] = {\n              name: _this14._getParamName(_i23),\n              data: transformedFiles[_i23],\n              filename: files[_i23].upload.filename\n            };\n          }\n          _this14._uploadData(files, dataBlocks);\n        }\n      });\n    }\n\n    /// Returns the right chunk for given file and xhr\n\n  }, {\n    key: \""_getChunk\"",\n    value: function _getChunk(file, xhr) {\n      for (var i = 0; i < file.upload.totalChunkCount; i++) {\n        if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].xhr === xhr) {\n          return file.upload.chunks[i];\n        }\n      }\n    }\n\n    // This function actually uploads the file(s) to the server.\n    // If dataBlocks contains the actual data to upload (meaning, that this could either be transformed\n    // files, or individual chunks for chunked upload).\n\n  }, {\n    key: \""_uploadData\"",\n    value: function _uploadData(files, dataBlocks) {\n      var _this15 = this;\n\n      var xhr = new XMLHttpRequest();\n\n      // Put the xhr object in the file objects to be able to reference it later.\n      for (var _iterator22 = files, _isArray22 = true, _i24 = 0, _iterator22 = _isArray22 ? _iterator22 : _iterator22[Symbol.iterator]();;) {\n        var _ref21;\n\n        if (_isArray22) {\n          if (_i24 >= _iterator22.length) break;\n          _ref21 = _iterator22[_i24++];\n        } else {\n          _i24 = _iterator22.next();\n          if (_i24.done) break;\n          _ref21 = _i24.value;\n        }\n\n        var file = _ref21;\n\n        file.xhr = xhr;\n      }\n      if (files[0].upload.chunked) {\n        // Put the xhr object in the right chunk object, so it can be associated later, and found with _getChunk\n        files[0].upload.chunks[dataBlocks[0].chunkIndex].xhr = xhr;\n      }\n\n      var method = this.resolveOption(this.options.method, files);\n      var url = this.resolveOption(this.options.url, files);\n      xhr.open(method, url, true);\n\n      // Setting the timeout after open because of IE11 issue: https://gitlab.com/meno/dropzone/issues/8\n      xhr.timeout = this.resolveOption(this.options.timeout, files);\n\n      // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n      xhr.withCredentials = !!this.options.withCredentials;\n\n      xhr.onload = function (e) {\n        _this15._finishedUploading(files, xhr, e);\n      };\n\n      xhr.onerror = function () {\n        _this15._handleUploadError(files, xhr);\n      };\n\n      // Some browsers do not have the .upload property\n      var progressObj = xhr.upload != null ? xhr.upload : xhr;\n      progressObj.onprogress = function (e) {\n        return _this15._updateFilesUploadProgress(files, xhr, e);\n      };\n\n      var headers = {\n        \""Accept\"": \""application/json\"",\n        \""Cache-Control\"": \""no-cache\"",\n        \""X-Requested-With\"": \""XMLHttpRequest\""\n      };\n\n      if (this.options.headers) {\n        Dropzone.extend(headers, this.options.headers);\n      }\n\n      for (var headerName in headers) {\n        var headerValue = headers[headerName];\n        if (headerValue) {\n          xhr.setRequestHeader(headerName, headerValue);\n        }\n      }\n\n      var formData = new FormData();\n\n      // Adding all @options parameters\n      if (this.options.params) {\n        var additionalParams = this.options.params;\n        if (typeof additionalParams === 'function') {\n          additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null);\n        }\n\n        for (var key in additionalParams) {\n          var value = additionalParams[key];\n          formData.append(key, value);\n        }\n      }\n\n      // Let the user add additional data if necessary\n      for (var _iterator23 = files, _isArray23 = true, _i25 = 0, _iterator23 = _isArray23 ? _iterator23 : _iterator23[Symbol.iterator]();;) {\n        var _ref22;\n\n        if (_isArray23) {\n          if (_i25 >= _iterator23.length) break;\n          _ref22 = _iterator23[_i25++];\n        } else {\n          _i25 = _iterator23.next();\n          if (_i25.done) break;\n          _ref22 = _i25.value;\n        }\n\n        var _file = _ref22;\n\n        this.emit(\""sending\"", _file, xhr, formData);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\""sendingmultiple\"", files, xhr, formData);\n      }\n\n      this._addFormElementData(formData);\n\n      // Finally add the files\n      // Has to be last because some servers (eg: S3) expect the file to be the last parameter\n      for (var i = 0; i < dataBlocks.length; i++) {\n        var dataBlock = dataBlocks[i];\n        formData.append(dataBlock.name, dataBlock.data, dataBlock.filename);\n      }\n\n      this.submitRequest(xhr, formData, files);\n    }\n\n    // Transforms all files with this.options.transformFile and invokes done with the transformed files when done.\n\n  }, {\n    key: \""_transformFiles\"",\n    value: function _transformFiles(files, done) {\n      var _this16 = this;\n\n      var transformedFiles = [];\n      // Clumsy way of handling asynchronous calls, until I get to add a proper Future library.\n      var doneCounter = 0;\n\n      var _loop = function _loop(i) {\n        _this16.options.transformFile.call(_this16, files[i], function (transformedFile) {\n          transformedFiles[i] = transformedFile;\n          if (++doneCounter === files.length) {\n            done(transformedFiles);\n          }\n        });\n      };\n\n      for (var i = 0; i < files.length; i++) {\n        _loop(i);\n      }\n    }\n\n    // Takes care of adding other input elements of the form to the AJAX request\n\n  }, {\n    key: \""_addFormElementData\"",\n    value: function _addFormElementData(formData) {\n      // Take care of other input elements\n      if (this.element.tagName === \""FORM\"") {\n        for (var _iterator24 = this.element.querySelectorAll(\""input, textarea, select, button\""), _isArray24 = true, _i26 = 0, _iterator24 = _isArray24 ? _iterator24 : _iterator24[Symbol.iterator]();;) {\n          var _ref23;\n\n          if (_isArray24) {\n            if (_i26 >= _iterator24.length) break;\n            _ref23 = _iterator24[_i26++];\n          } else {\n            _i26 = _iterator24.next();\n            if (_i26.done) break;\n            _ref23 = _i26.value;\n          }\n\n          var input = _ref23;\n\n          var inputName = input.getAttribute(\""name\"");\n          var inputType = input.getAttribute(\""type\"");\n          if (inputType) inputType = inputType.toLowerCase();\n\n          // If the input doesn't have a name, we can't use it.\n          if (typeof inputName === 'undefined' || inputName === null) continue;\n\n          if (input.tagName === \""SELECT\"" && input.hasAttribute(\""multiple\"")) {\n            // Possibly multiple values\n            for (var _iterator25 = input.options, _isArray25 = true, _i27 = 0, _iterator25 = _isArray25 ? _iterator25 : _iterator25[Symbol.iterator]();;) {\n              var _ref24;\n\n              if (_isArray25) {\n                if (_i27 >= _iterator25.length) break;\n                _ref24 = _iterator25[_i27++];\n              } else {\n                _i27 = _iterator25.next();\n                if (_i27.done) break;\n                _ref24 = _i27.value;\n              }\n\n              var option = _ref24;\n\n              if (option.selected) {\n                formData.append(inputName, option.value);\n              }\n            }\n          } else if (!inputType || inputType !== \""checkbox\"" && inputType !== \""radio\"" || input.checked) {\n            formData.append(inputName, input.value);\n          }\n        }\n      }\n    }\n\n    // Invoked when there is new progress information about given files.\n    // If e is not provided, it is assumed that the upload is finished.\n\n  }, {\n    key: \""_updateFilesUploadProgress\"",\n    value: function _updateFilesUploadProgress(files, xhr, e) {\n      var progress = void 0;\n      if (typeof e !== 'undefined') {\n        progress = 100 * e.loaded / e.total;\n\n        if (files[0].upload.chunked) {\n          var file = files[0];\n          // Since this is a chunked upload, we need to update the appropriate chunk progress.\n          var chunk = this._getChunk(file, xhr);\n          chunk.progress = progress;\n          chunk.total = e.total;\n          chunk.bytesSent = e.loaded;\n          var fileProgress = 0,\n              fileTotal = void 0,\n              fileBytesSent = void 0;\n          file.upload.progress = 0;\n          file.upload.total = 0;\n          file.upload.bytesSent = 0;\n          for (var i = 0; i < file.upload.totalChunkCount; i++) {\n            if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].progress !== undefined) {\n              file.upload.progress += file.upload.chunks[i].progress;\n              file.upload.total += file.upload.chunks[i].total;\n              file.upload.bytesSent += file.upload.chunks[i].bytesSent;\n            }\n          }\n          file.upload.progress = file.upload.progress / file.upload.totalChunkCount;\n        } else {\n          for (var _iterator26 = files, _isArray26 = true, _i28 = 0, _iterator26 = _isArray26 ? _iterator26 : _iterator26[Symbol.iterator]();;) {\n            var _ref25;\n\n            if (_isArray26) {\n              if (_i28 >= _iterator26.length) break;\n              _ref25 = _iterator26[_i28++];\n            } else {\n              _i28 = _iterator26.next();\n              if (_i28.done) break;\n              _ref25 = _i28.value;\n            }\n\n            var _file2 = _ref25;\n\n            _file2.upload.progress = progress;\n            _file2.upload.total = e.total;\n            _file2.upload.bytesSent = e.loaded;\n          }\n        }\n        for (var _iterator27 = files, _isArray27 = true, _i29 = 0, _iterator27 = _isArray27 ? _iterator27 : _iterator27[Symbol.iterator]();;) {\n          var _ref26;\n\n          if (_isArray27) {\n            if (_i29 >= _iterator27.length) break;\n            _ref26 = _iterator27[_i29++];\n          } else {\n            _i29 = _iterator27.next();\n            if (_i29.done) break;\n            _ref26 = _i29.value;\n          }\n\n          var _file3 = _ref26;\n\n          this.emit(\""uploadprogress\"", _file3, _file3.upload.progress, _file3.upload.bytesSent);\n        }\n      } else {\n        // Called when the file finished uploading\n\n        var allFilesFinished = true;\n\n        progress = 100;\n\n        for (var _iterator28 = files, _isArray28 = true, _i30 = 0, _iterator28 = _isArray28 ? _iterator28 : _iterator28[Symbol.iterator]();;) {\n          var _ref27;\n\n          if (_isArray28) {\n            if (_i30 >= _iterator28.length) break;\n            _ref27 = _iterator28[_i30++];\n          } else {\n            _i30 = _iterator28.next();\n            if (_i30.done) break;\n            _ref27 = _i30.value;\n          }\n\n          var _file4 = _ref27;\n\n          if (_file4.upload.progress !== 100 || _file4.upload.bytesSent !== _file4.upload.total) {\n            allFilesFinished = false;\n          }\n          _file4.upload.progress = progress;\n          _file4.upload.bytesSent = _file4.upload.total;\n        }\n\n        // Nothing to do, all files already at 100%\n        if (allFilesFinished) {\n          return;\n        }\n\n        for (var _iterator29 = files, _isArray29 = true, _i31 = 0, _iterator29 = _isArray29 ? _iterator29 : _iterator29[Symbol.iterator]();;) {\n          var _ref28;\n\n          if (_isArray29) {\n            if (_i31 >= _iterator29.length) break;\n            _ref28 = _iterator29[_i31++];\n          } else {\n            _i31 = _iterator29.next();\n            if (_i31.done) break;\n            _ref28 = _i31.value;\n          }\n\n          var _file5 = _ref28;\n\n          this.emit(\""uploadprogress\"", _file5, progress, _file5.upload.bytesSent);\n        }\n      }\n    }\n  }, {\n    key: \""_finishedUploading\"",\n    value: function _finishedUploading(files, xhr, e) {\n      var response = void 0;\n\n      if (files[0].status === Dropzone.CANCELED) {\n        return;\n      }\n\n      if (xhr.readyState !== 4) {\n        return;\n      }\n\n      if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') {\n        response = xhr.responseText;\n\n        if (xhr.getResponseHeader(\""content-type\"") && ~xhr.getResponseHeader(\""content-type\"").indexOf(\""application/json\"")) {\n          try {\n            response = JSON.parse(response);\n          } catch (error) {\n            e = error;\n            response = \""Invalid JSON response from server.\"";\n          }\n        }\n      }\n\n      this._updateFilesUploadProgress(files);\n\n      if (!(200 <= xhr.status && xhr.status < 300)) {\n        this._handleUploadError(files, xhr, response);\n      } else {\n        if (files[0].upload.chunked) {\n          files[0].upload.finishedChunkUpload(this._getChunk(files[0], xhr));\n        } else {\n          this._finished(files, response, e);\n        }\n      }\n    }\n  }, {\n    key: \""_handleUploadError\"",\n    value: function _handleUploadError(files, xhr, response) {\n      if (files[0].status === Dropzone.CANCELED) {\n        return;\n      }\n\n      if (files[0].upload.chunked && this.options.retryChunks) {\n        var chunk = this._getChunk(files[0], xhr);\n        if (chunk.retries++ < this.options.retryChunksLimit) {\n          this._uploadData(files, [chunk.dataBlock]);\n          return;\n        } else {\n          console.warn('Retried this chunk too often. Giving up.');\n        }\n      }\n\n      for (var _iterator30 = files, _isArray30 = true, _i32 = 0, _iterator30 = _isArray30 ? _iterator30 : _iterator30[Symbol.iterator]();;) {\n        var _ref29;\n\n        if (_isArray30) {\n          if (_i32 >= _iterator30.length) break;\n          _ref29 = _iterator30[_i32++];\n        } else {\n          _i32 = _iterator30.next();\n          if (_i32.done) break;\n          _ref29 = _i32.value;\n        }\n\n        var file = _ref29;\n\n        this._errorProcessing(files, response || this.options.dictResponseError.replace(\""{{statusCode}}\"", xhr.status), xhr);\n      }\n    }\n  }, {\n    key: \""submitRequest\"",\n    value: function submitRequest(xhr, formData, files) {\n      xhr.send(formData);\n    }\n\n    // Called internally when processing is finished.\n    // Individual callbacks have to be called in the appropriate sections.\n\n  }, {\n    key: \""_finished\"",\n    value: function _finished(files, responseText, e) {\n      for (var _iterator31 = files, _isArray31 = true, _i33 = 0, _iterator31 = _isArray31 ? _iterator31 : _iterator31[Symbol.iterator]();;) {\n        var _ref30;\n\n        if (_isArray31) {\n          if (_i33 >= _iterator31.length) break;\n          _ref30 = _iterator31[_i33++];\n        } else {\n          _i33 = _iterator31.next();\n          if (_i33.done) break;\n          _ref30 = _i33.value;\n        }\n\n        var file = _ref30;\n\n        file.status = Dropzone.SUCCESS;\n        this.emit(\""success\"", file, responseText, e);\n        this.emit(\""complete\"", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\""successmultiple\"", files, responseText, e);\n        this.emit(\""completemultiple\"", files);\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n\n    // Called internally when processing is finished.\n    // Individual callbacks have to be called in the appropriate sections.\n\n  }, {\n    key: \""_errorProcessing\"",\n    value: function _errorProcessing(files, message, xhr) {\n      for (var _iterator32 = files, _isArray32 = true, _i34 = 0, _iterator32 = _isArray32 ? _iterator32 : _iterator32[Symbol.iterator]();;) {\n        var _ref31;\n\n        if (_isArray32) {\n          if (_i34 >= _iterator32.length) break;\n          _ref31 = _iterator32[_i34++];\n        } else {\n          _i34 = _iterator32.next();\n          if (_i34.done) break;\n          _ref31 = _i34.value;\n        }\n\n        var file = _ref31;\n\n        file.status = Dropzone.ERROR;\n        this.emit(\""error\"", file, message, xhr);\n        this.emit(\""complete\"", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\""errormultiple\"", files, message, xhr);\n        this.emit(\""completemultiple\"", files);\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n  }], [{\n    key: \""uuidv4\"",\n    value: function uuidv4() {\n      return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n        var r = Math.random() * 16 | 0,\n            v = c === 'x' ? r : r & 0x3 | 0x8;\n        return v.toString(16);\n      });\n    }\n  }]);\n\n  return Dropzone;\n}(Emitter);\n\nDropzone.initClass();\n\nDropzone.version = \""5.5.1\"";\n\n// This is a map of options for your different dropzones. Add configurations\n// to this object for your different dropzone elemens.\n//\n// Example:\n//\n//     Dropzone.options.myDropzoneElementId = { maxFilesize: 1 };\n//\n// To disable autoDiscover for a specific element, you can set `false` as an option:\n//\n//     Dropzone.options.myDisabledElementId = false;\n//\n// And in html:\n//\n//     <form action=\""/upload\"" id=\""my-dropzone-element-id\"" class=\""dropzone\""></form>\nDropzone.options = {};\n\n// Returns the options for an element or undefined if none available.\nDropzone.optionsForElement = function (element) {\n  // Get the `Dropzone.options.elementId` for this element if it exists\n  if (element.getAttribute(\""id\"")) {\n    return Dropzone.options[camelize(element.getAttribute(\""id\""))];\n  } else {\n    return undefined;\n  }\n};\n\n// Holds a list of all dropzone instances\nDropzone.instances = [];\n\n// Returns the dropzone for given element if any\nDropzone.forElement = function (element) {\n  if (typeof element === \""string\"") {\n    element = document.querySelector(element);\n  }\n  if ((element != null ? element.dropzone : undefined) == null) {\n    throw new Error(\""No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\"");\n  }\n  return element.dropzone;\n};\n\n// Set to false if you don't want Dropzone to automatically find and attach to .dropzone elements.\nDropzone.autoDiscover = true;\n\n// Looks for all .dropzone elements and creates a dropzone for them\nDropzone.discover = function () {\n  var dropzones = void 0;\n  if (document.querySelectorAll) {\n    dropzones = document.querySelectorAll(\"".dropzone\"");\n  } else {\n    dropzones = [];\n    // IE :(\n    var checkElements = function checkElements(elements) {\n      return function () {\n        var result = [];\n        for (var _iterator33 = elements, _isArray33 = true, _i35 = 0, _iterator33 = _isArray33 ? _iterator33 : _iterator33[Symbol.iterator]();;) {\n          var _ref32;\n\n          if (_isArray33) {\n            if (_i35 >= _iterator33.length) break;\n            _ref32 = _iterator33[_i35++];\n          } else {\n            _i35 = _iterator33.next();\n            if (_i35.done) break;\n            _ref32 = _i35.value;\n          }\n\n          var el = _ref32;\n\n          if (/(^| )dropzone($| )/.test(el.className)) {\n            result.push(dropzones.push(el));\n          } else {\n            result.push(undefined);\n          }\n        }\n        return result;\n      }();\n    };\n    checkElements(document.getElementsByTagName(\""div\""));\n    checkElements(document.getElementsByTagName(\""form\""));\n  }\n\n  return function () {\n    var result = [];\n    for (var _iterator34 = dropzones, _isArray34 = true, _i36 = 0, _iterator34 = _isArray34 ? _iterator34 : _iterator34[Symbol.iterator]();;) {\n      var _ref33;\n\n      if (_isArray34) {\n        if (_i36 >= _iterator34.length) break;\n        _ref33 = _iterator34[_i36++];\n      } else {\n        _i36 = _iterator34.next();\n        if (_i36.done) break;\n        _ref33 = _i36.value;\n      }\n\n      var dropzone = _ref33;\n\n      // Create a dropzone unless auto discover has been disabled for specific element\n      if (Dropzone.optionsForElement(dropzone) !== false) {\n        result.push(new Dropzone(dropzone));\n      } else {\n        result.push(undefined);\n      }\n    }\n    return result;\n  }();\n};\n\n// Since the whole Drag'n'Drop API is pretty new, some browsers implement it,\n// but not correctly.\n// So I created a blacklist of userAgents. Yes, yes. Browser sniffing, I know.\n// But what to do when browsers *theoretically* support an API, but crash\n// when using it.\n//\n// This is a list of regular expressions tested against navigator.userAgent\n//\n// ** It should only be used on browser that *do* support the API, but\n// incorrectly **\n//\nDropzone.blacklistedBrowsers = [\n// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.\n/opera.*(Macintosh|Windows Phone).*version\\/12/i];\n\n// Checks if the browser is supported\nDropzone.isBrowserSupported = function () {\n  var capableBrowser = true;\n\n  if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n    if (!(\""classList\"" in document.createElement(\""a\""))) {\n      capableBrowser = false;\n    } else {\n      // The browser supports the API, but may be blacklisted.\n      for (var _iterator35 = Dropzone.blacklistedBrowsers, _isArray35 = true, _i37 = 0, _iterator35 = _isArray35 ? _iterator35 : _iterator35[Symbol.iterator]();;) {\n        var _ref34;\n\n        if (_isArray35) {\n          if (_i37 >= _iterator35.length) break;\n          _ref34 = _iterator35[_i37++];\n        } else {\n          _i37 = _iterator35.next();\n          if (_i37.done) break;\n          _ref34 = _i37.value;\n        }\n\n        var regex = _ref34;\n\n        if (regex.test(navigator.userAgent)) {\n          capableBrowser = false;\n          continue;\n        }\n      }\n    }\n  } else {\n    capableBrowser = false;\n  }\n\n  return capableBrowser;\n};\n\nDropzone.dataURItoBlob = function (dataURI) {\n  // convert base64 to raw binary data held in a string\n  // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n  var byteString = atob(dataURI.split(',')[1]);\n\n  // separate out the mime component\n  var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n\n  // write the bytes of the string to an ArrayBuffer\n  var ab = new ArrayBuffer(byteString.length);\n  var ia = new Uint8Array(ab);\n  for (var i = 0, end = byteString.length, asc = 0 <= end; asc ? i <= end : i >= end; asc ? i++ : i--) {\n    ia[i] = byteString.charCodeAt(i);\n  }\n\n  // write the ArrayBuffer to a blob\n  return new Blob([ab], { type: mimeString });\n};\n\n// Returns an array without the rejected item\nvar without = function without(list, rejectedItem) {\n  return list.filter(function (item) {\n    return item !== rejectedItem;\n  }).map(function (item) {\n    return item;\n  });\n};\n\n// abc-def_ghi -> abcDefGhi\nvar camelize = function camelize(str) {\n  return str.replace(/[\\-_](\\w)/g, function (match) {\n    return match.charAt(1).toUpperCase();\n  });\n};\n\n// Creates an element from string\nDropzone.createElement = function (string) {\n  var div = document.createElement(\""div\"");\n  div.innerHTML = string;\n  return div.childNodes[0];\n};\n\n// Tests if given element is inside (or simply is) the container\nDropzone.elementInside = function (element, container) {\n  if (element === container) {\n    return true;\n  } // Coffeescript doesn't support do/while loops\n  while (element = element.parentNode) {\n    if (element === container) {\n      return true;\n    }\n  }\n  return false;\n};\n\nDropzone.getElement = function (el, name) {\n  var element = void 0;\n  if (typeof el === \""string\"") {\n    element = document.querySelector(el);\n  } else if (el.nodeType != null) {\n    element = el;\n  }\n  if (element == null) {\n    throw new Error(\""Invalid `\"" + name + \""` option provided. Please provide a CSS selector or a plain HTML element.\"");\n  }\n  return element;\n};\n\nDropzone.getElements = function (els, name) {\n  var el = void 0,\n      elements = void 0;\n  if (els instanceof Array) {\n    elements = [];\n    try {\n      for (var _iterator36 = els, _isArray36 = true, _i38 = 0, _iterator36 = _isArray36 ? _iterator36 : _iterator36[Symbol.iterator]();;) {\n        if (_isArray36) {\n          if (_i38 >= _iterator36.length) break;\n          el = _iterator36[_i38++];\n        } else {\n          _i38 = _iterator36.next();\n          if (_i38.done) break;\n          el = _i38.value;\n        }\n\n        elements.push(this.getElement(el, name));\n      }\n    } catch (e) {\n      elements = null;\n    }\n  } else if (typeof els === \""string\"") {\n    elements = [];\n    for (var _iterator37 = document.querySelectorAll(els), _isArray37 = true, _i39 = 0, _iterator37 = _isArray37 ? _iterator37 : _iterator37[Symbol.iterator]();;) {\n      if (_isArray37) {\n        if (_i39 >= _iterator37.length) break;\n        el = _iterator37[_i39++];\n      } else {\n        _i39 = _iterator37.next();\n        if (_i39.done) break;\n        el = _i39.value;\n      }\n\n      elements.push(el);\n    }\n  } else if (els.nodeType != null) {\n    elements = [els];\n  }\n\n  if (elements == null || !elements.length) {\n    throw new Error(\""Invalid `\"" + name + \""` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\"");\n  }\n\n  return elements;\n};\n\n// Asks the user the question and calls accepted or rejected accordingly\n//\n// The default implementation just uses `window.confirm` and then calls the\n// appropriate callback.\nDropzone.confirm = function (question, accepted, rejected) {\n  if (window.confirm(question)) {\n    return accepted();\n  } else if (rejected != null) {\n    return rejected();\n  }\n};\n\n// Validates the mime type like this:\n//\n// https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept\nDropzone.isValidFile = function (file, acceptedFiles) {\n  if (!acceptedFiles) {\n    return true;\n  } // If there are no accepted mime types, it's OK\n  acceptedFiles = acceptedFiles.split(\"",\"");\n\n  var mimeType = file.type;\n  var baseMimeType = mimeType.replace(/\\/.*$/, \""\"");\n\n  for (var _iterator38 = acceptedFiles, _isArray38 = true, _i40 = 0, _iterator38 = _isArray38 ? _iterator38 : _iterator38[Symbol.iterator]();;) {\n    var _ref35;\n\n    if (_isArray38) {\n      if (_i40 >= _iterator38.length) break;\n      _ref35 = _iterator38[_i40++];\n    } else {\n      _i40 = _iterator38.next();\n      if (_i40.done) break;\n      _ref35 = _i40.value;\n    }\n\n    var validType = _ref35;\n\n    validType = validType.trim();\n    if (validType.charAt(0) === \"".\"") {\n      if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n        return true;\n      }\n    } else if (/\\/\\*$/.test(validType)) {\n      // This is something like a image/* mime type\n      if (baseMimeType === validType.replace(/\\/.*$/, \""\"")) {\n        return true;\n      }\n    } else {\n      if (mimeType === validType) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\n// Augment jQuery\nif (typeof jQuery !== 'undefined' && jQuery !== null) {\n  jQuery.fn.dropzone = function (options) {\n    return this.each(function () {\n      return new Dropzone(this, options);\n    });\n  };\n}\n\nif (typeof module !== 'undefined' && module !== null) {\n  module.exports = Dropzone;\n} else {\n  window.Dropzone = Dropzone;\n}\n\n// Dropzone file status codes\nDropzone.ADDED = \""added\"";\n\nDropzone.QUEUED = \""queued\"";\n// For backwards compatibility. Now, if a file is accepted, it's either queued\n// or uploading.\nDropzone.ACCEPTED = Dropzone.QUEUED;\n\nDropzone.UPLOADING = \""uploading\"";\nDropzone.PROCESSING = Dropzone.UPLOADING; // alias\n\nDropzone.CANCELED = \""canceled\"";\nDropzone.ERROR = \""error\"";\nDropzone.SUCCESS = \""success\"";\n\n/*\n\n Bugfix for iOS 6 and 7\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\n\n */\n\n// Detecting vertical squash in loaded image.\n// Fixes a bug which squash image vertically while drawing into canvas for some images.\n// This is a bug in iOS6 devices. This function from https://github.com/stomita/ios-imagefile-megapixel\nvar detectVerticalSquash = function detectVerticalSquash(img) {\n  var iw = img.naturalWidth;\n  var ih = img.naturalHeight;\n  var canvas = document.createElement(\""canvas\"");\n  canvas.width = 1;\n  canvas.height = ih;\n  var ctx = canvas.getContext(\""2d\"");\n  ctx.drawImage(img, 0, 0);\n\n  var _ctx$getImageData = ctx.getImageData(1, 0, 1, ih),\n      data = _ctx$getImageData.data;\n\n  // search image edge pixel position in case it is squashed vertically.\n\n\n  var sy = 0;\n  var ey = ih;\n  var py = ih;\n  while (py > sy) {\n    var alpha = data[(py - 1) * 4 + 3];\n\n    if (alpha === 0) {\n      ey = py;\n    } else {\n      sy = py;\n    }\n\n    py = ey + sy >> 1;\n  }\n  var ratio = py / ih;\n\n  if (ratio === 0) {\n    return 1;\n  } else {\n    return ratio;\n  }\n};\n\n// A replacement for context.drawImage\n// (args are for source and destination).\nvar drawImageIOSFix = function drawImageIOSFix(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n  var vertSquashRatio = detectVerticalSquash(img);\n  return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n};\n\n// Based on MinifyJpeg\n// Source: http://www.perry.cz/files/ExifRestorer.js\n// http://elicon.blog57.fc2.com/blog-entry-206.html\n\nvar ExifRestore = function () {\n  function ExifRestore() {\n    _classCallCheck(this, ExifRestore);\n  }\n\n  _createClass(ExifRestore, null, [{\n    key: \""initClass\"",\n    value: function initClass() {\n      this.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    }\n  }, {\n    key: \""encode64\"",\n    value: function encode64(input) {\n      var output = '';\n      var chr1 = undefined;\n      var chr2 = undefined;\n      var chr3 = '';\n      var enc1 = undefined;\n      var enc2 = undefined;\n      var enc3 = undefined;\n      var enc4 = '';\n      var i = 0;\n      while (true) {\n        chr1 = input[i++];\n        chr2 = input[i++];\n        chr3 = input[i++];\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n        output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);\n        chr1 = chr2 = chr3 = '';\n        enc1 = enc2 = enc3 = enc4 = '';\n        if (!(i < input.length)) {\n          break;\n        }\n      }\n      return output;\n    }\n  }, {\n    key: \""restore\"",\n    value: function restore(origFileBase64, resizedFileBase64) {\n      if (!origFileBase64.match('data:image/jpeg;base64,')) {\n        return resizedFileBase64;\n      }\n      var rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', ''));\n      var segments = this.slice2Segments(rawImage);\n      var image = this.exifManipulation(resizedFileBase64, segments);\n      return \""data:image/jpeg;base64,\"" + this.encode64(image);\n    }\n  }, {\n    key: \""exifManipulation\"",\n    value: function exifManipulation(resizedFileBase64, segments) {\n      var exifArray = this.getExifArray(segments);\n      var newImageArray = this.insertExif(resizedFileBase64, exifArray);\n      var aBuffer = new Uint8Array(newImageArray);\n      return aBuffer;\n    }\n  }, {\n    key: \""getExifArray\"",\n    value: function getExifArray(segments) {\n      var seg = undefined;\n      var x = 0;\n      while (x < segments.length) {\n        seg = segments[x];\n        if (seg[0] === 255 & seg[1] === 225) {\n          return seg;\n        }\n        x++;\n      }\n      return [];\n    }\n  }, {\n    key: \""insertExif\"",\n    value: function insertExif(resizedFileBase64, exifArray) {\n      var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');\n      var buf = this.decode64(imageData);\n      var separatePoint = buf.indexOf(255, 3);\n      var mae = buf.slice(0, separatePoint);\n      var ato = buf.slice(separatePoint);\n      var array = mae;\n      array = array.concat(exifArray);\n      array = array.concat(ato);\n      return array;\n    }\n  }, {\n    key: \""slice2Segments\"",\n    value: function slice2Segments(rawImageArray) {\n      var head = 0;\n      var segments = [];\n      while (true) {\n        var length;\n        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {\n          break;\n        }\n        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {\n          head += 2;\n        } else {\n          length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];\n          var endPoint = head + length + 2;\n          var seg = rawImageArray.slice(head, endPoint);\n          segments.push(seg);\n          head = endPoint;\n        }\n        if (head > rawImageArray.length) {\n          break;\n        }\n      }\n      return segments;\n    }\n  }, {\n    key: \""decode64\"",\n    value: function decode64(input) {\n      var output = '';\n      var chr1 = undefined;\n      var chr2 = undefined;\n      var chr3 = '';\n      var enc1 = undefined;\n      var enc2 = undefined;\n      var enc3 = undefined;\n      var enc4 = '';\n      var i = 0;\n      var buf = [];\n      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (base64test.exec(input)) {\n        console.warn('There were invalid base64 characters in the input text.\\nValid base64 characters are A-Z, a-z, 0-9, \\'+\\', \\'/\\',and \\'=\\'\\nExpect errors in decoding.');\n      }\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n      while (true) {\n        enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n        buf.push(chr1);\n        if (enc3 !== 64) {\n          buf.push(chr2);\n        }\n        if (enc4 !== 64) {\n          buf.push(chr3);\n        }\n        chr1 = chr2 = chr3 = '';\n        enc1 = enc2 = enc3 = enc4 = '';\n        if (!(i < input.length)) {\n          break;\n        }\n      }\n      return buf;\n    }\n  }]);\n\n  return ExifRestore;\n}();\n\nExifRestore.initClass();\n\n/*\n * contentloaded.js\n *\n * Author: Diego Perini (diego.perini at gmail.com)\n * Summary: cross-browser wrapper for DOMContentLoaded\n * Updated: 20101020\n * License: MIT\n * Version: 1.2\n *\n * URL:\n * http://javascript.nwbox.com/ContentLoaded/\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n */\n\n// @win window reference\n// @fn function reference\nvar contentLoaded = function contentLoaded(win, fn) {\n  var done = false;\n  var top = true;\n  var doc = win.document;\n  var root = doc.documentElement;\n  var add = doc.addEventListener ? \""addEventListener\"" : \""attachEvent\"";\n  var rem = doc.addEventListener ? \""removeEventListener\"" : \""detachEvent\"";\n  var pre = doc.addEventListener ? \""\"" : \""on\"";\n  var init = function init(e) {\n    if (e.type === \""readystatechange\"" && doc.readyState !== \""complete\"") {\n      return;\n    }\n    (e.type === \""load\"" ? win : doc)[rem](pre + e.type, init, false);\n    if (!done && (done = true)) {\n      return fn.call(win, e.type || e);\n    }\n  };\n\n  var poll = function poll() {\n    try {\n      root.doScroll(\""left\"");\n    } catch (e) {\n      setTimeout(poll, 50);\n      return;\n    }\n    return init(\""poll\"");\n  };\n\n  if (doc.readyState !== \""complete\"") {\n    if (doc.createEventObject && root.doScroll) {\n      try {\n        top = !win.frameElement;\n      } catch (error) {}\n      if (top) {\n        poll();\n      }\n    }\n    doc[add](pre + \""DOMContentLoaded\"", init, false);\n    doc[add](pre + \""readystatechange\"", init, false);\n    return win[add](pre + \""load\"", init, false);\n  }\n};\n\n// As a single function to be able to write tests.\nDropzone._autoDiscoverFunction = function () {\n  if (Dropzone.autoDiscover) {\n    return Dropzone.discover();\n  }\n};\ncontentLoaded(window, Dropzone._autoDiscoverFunction);\n\nfunction __guard__(value, transform) {\n  return typeof value !== 'undefined' && value !== null ? transform(value) : undefined;\n}\nfunction __guardMethod__(obj, methodName, transform) {\n  if (typeof obj !== 'undefined' && obj !== null && typeof obj[methodName] === 'function') {\n    return transform(obj, methodName);\n  } else {\n    return undefined;\n  }\n}\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ \""./node_modules/webpack/buildin/module.js\"")(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64, \n//# sourceURL=webpack-internal:///./node_modules/dropzone/dist/dropzone.js\n"");"
40be3026edcbcce4a8bc894f6f68063f11abbbe9,7701569, * http://stackoverflow.com/questions/7701569/collecting-storing-and-retrieving-sensor-data
f7c43d11d073bb8aee846d533399df9f78a32a94,451486,        // http://stackoverflow.com/questions/451486/pre-tag-loses-line-breaks-when-setting-innerhtml-in-ie
1db680fd932f1aa91237e7ccfd5d1a5b534791bf,3330919,        // http://stackoverflow.com/a/3330919)
6a1644089e1d87d0748cb3e927778f31e2a84539,24156948,// https://stackoverflow.com/questions/24156948/javacc-quote-with-escape-character
9b13cec7472fad8ff54c4573f0979407a4f8c564,5163260,## https://stackoverflow.com/questions/5163144/what-are-the-special-dollar-sign-shell-variables#5163260
b78df79d1a015126931709c852892b530a6c1020,1918841,    // Code taken from https://stackoverflow.com/questions/1918841/how-to-convert-ascii-character-to-cgkeycode
d486c491a4b88e7d0a04d2a9395f0cea3237f473,4130045,  18. http://stackoverflow.com/questions/4130045/is-it-easier-faster-to-parse-css-selectors-ltr-or-rtl
f4502ff50f5287fea4541ea07099ef3d56347e93,1354064,	// http://stackoverflow.com/questions/1354064/how-to-convert-characters-to-html-entities-using-plain-javascript
bc08befe73aaf9a7e88a0f104f4cef62417058f9,1723182,  -- see http://stackoverflow.com/questions/1723182/a-regex-that-will-never-be-matched-by-anything
45f10f314a1981448fdacc1abf8176520adaa0ff,19984152,"  ""description"": ""Parallel and asynchronous computing in python is crippled by pickle's\npoor object serialization. However, a more robust serialization package\nwould drastically improve the situation. To leverage the cores found in\nmodern processors we need to communicate functions between different\nprocesses -- and that means callables must be serialized without pickle\nbarfing. Similarly, parallel and distributed computing with MPI, GPUs,\nsockets, and across other process boundaries all need serialized\nfunctions (or other callables). So why is pickling in python so broken?\nPython's ability to leverage these awesome communication technologies is\nlimited by python's own inability to be a fully serializable language.\nIn actuality, serialization in python is quite limited, and for really\nno good reason.\n\nMany raise security concerns for full object serialization, however it\ncan be argued that it is not pickle's responsibility to do proper\nauthentication. In fact, one could apply rather insecure serialization\nof all objects the objects were all sent across RSA-encrypted\nssh-tunnels, for example.\n\nDill is a serialization package that strives to serialize all of python.\nWe have forked python's multiprocessing to use dill. Dill can also be\nleveraged by mpi4py, ipython, and other parallel or distributed python\npackages. Dill serves as the backbone for a distributed parallel\ncomputing framework that is being used to design the next generation of\nlarge-scale heterogeneous computing platforms, and has been leveraged in\nlarge-scale calculations of risk and uncertainty. Dill has been used to\nenable state persistence and recovery, global caching, and the\ncoordination of distributed parallel calculations across a network of\nthe world's largest computers.\n\nhttp://pythonhosted.org/dill\n\nhttps://github.com/uqfoundation\n\nhttp://matthewrocklin.com/blog/work/2013/12/05/Parallelism-and-Serialization/\n\nhttp://stackoverflow.com/questions/19984152/what-can-multiprocessing-and-dill-do-together?rq=1\n\nhttps://groups.google.com/forum/#!topic/mpi4py/1fd4FwdgpWY\n\nhttp://nbviewer.ipython.org/gist/anonymous/5241793\n"","
cd20d9f4e489bc8f2c81aa7523e72321d3ac2da5,17253457,"{""version"":3,""sources"":[""webpack:///webpack:///components/style/index.less"",""webpack:///webpack:///components/style/core/normalize.less"",""webpack:///webpack:///components/style/core/base.less"",""webpack:///webpack:///components/style/mixins/size.less"",""webpack:///webpack:///components/style/mixins/clearfix.less"",""webpack:///webpack:///components/style/core/iconfont.less"",""webpack:///webpack:///components/style/mixins/iconfont.less"",""webpack:///webpack:///components/style/mixins/motion.less"",""webpack:///webpack:///components/style/core/motion/fade.less"",""webpack:///webpack:///components/style/core/motion/move.less"",""webpack:///webpack:///components/style/themes/default.less"",""webpack:///webpack:///components/style/core/motion/other.less"",""webpack:///webpack:///components/style/core/motion/slide.less"",""webpack:///webpack:///components/style/core/motion/swing.less"",""webpack:///webpack:///components/style/core/motion/zoom.less"",""webpack:///webpack:///components/style/core/motion.less"",""webpack:///webpack:///components/affix/style/index.less"",""webpack:///webpack:///components/alert/style/index.less"",""webpack:///webpack:///components/back-top/style/index.less"",""webpack:///webpack:///components/badge/style/index.less"",""webpack:///webpack:///components/breadcrumb/style/index.less"",""webpack:///webpack:///components/button/style/index.less"",""webpack:///webpack:///components/button/style/mixin.less"",""webpack:///webpack:///components/calendar/style/index.less"",""webpack:///webpack:///components/select/style/index.less"",""webpack:///webpack:///components/style/mixins/compatibility.less"",""webpack:///webpack:///components/input/style/mixin.less"",""webpack:///webpack:///components/input/style/search-input.less"",""webpack:///webpack:///components/input/style/index.less"",""webpack:///webpack:///components/radio/style/index.less"",""webpack:///webpack:///components/style/mixins/opacity.less"",""webpack:///webpack:///components/card/style/index.less"",""webpack:///webpack:///components/carousel/style/index.less"",""webpack:///webpack:///components/cascader/style/index.less"",""webpack:///webpack:///components/checkbox/style/mixin.less"",""webpack:///webpack:///components/layout/style/index.less"",""webpack:///webpack:///components/layout/style/mixin.less"",""webpack:///webpack:///components/collapse/style/index.less"",""webpack:///webpack:///components/date-picker/style/Picker.less"",""webpack:///webpack:///components/date-picker/style/Calendar.less"",""webpack:///webpack:///components/date-picker/style/RangePicker.less"",""webpack:///webpack:///components/date-picker/style/TimePicker.less"",""webpack:///webpack:///components/date-picker/style/MonthPanel.less"",""webpack:///webpack:///components/date-picker/style/YearPanel.less"",""webpack:///webpack:///components/date-picker/style/DecadePanel.less"",""webpack:///webpack:///components/date-picker/style/MonthPicker.less"",""webpack:///webpack:///components/time-picker/style/index.less"",""webpack:///webpack:///components/dropdown/style/index.less"",""webpack:///webpack:///components/form/style/mixin.less"",""webpack:///webpack:///components/form/style/index.less"",""webpack:///webpack:///components/input-number/style/index.less"",""webpack:///webpack:///components/menu/style/index.less"",""webpack:///webpack:///components/message/style/index.less"",""webpack:///webpack:///components/modal/style/modal.less"",""webpack:///webpack:///components/modal/style/confirm.less"",""webpack:///webpack:///components/notification/style/index.less"",""webpack:///webpack:///components/pagination/style/index.less"",""webpack:///webpack:///components/popover/style/index.less"",""webpack:///webpack:///components/progress/style/index.less"",""webpack:///webpack:///components/rate/style/index.less"",""webpack:///webpack:///components/slider/style/index.less"",""webpack:///webpack:///components/tooltip/style/index.less"",""webpack:///webpack:///components/spin/style/index.less"",""webpack:///webpack:///components/steps/style/index.less"",""webpack:///webpack:///~/normalize.css/normalize.css"",""webpack:///webpack:///components/switch/style/index.less"",""webpack:///webpack:///components/table/style/index.less"",""webpack:///webpack:///components/tabs/style/index.less"",""webpack:///webpack:///components/tag/style/index.less"",""webpack:///webpack:///components/timeline/style/index.less"",""webpack:///webpack:///components/transfer/style/index.less"",""webpack:///webpack:///components/tree-select/style/index.less"",""webpack:///webpack:///components/tree/style/mixin.less"",""webpack:///webpack:///components/tree/style/index.less"",""webpack:///webpack:///components/upload/style/index.less""],""names"":[],""mappings"":"";;;;;;AAAA,4ECOA,KACE,uBACA,0BACA,8BAOF,KACE,SAYF,oFAYE,cAOF,4BAIE,qBAOF,sBACE,aACA,SAOF,SACE,wBAQF,kBAEE,aAWF,EACE,6BACA,qCAQF,iBAEE,gBAWF,YACE,mBACA,0BACA,iCAOF,SAEE,oBASA,mBAOF,IACE,kBAQF,GACE,cACA,eAOF,KACE,sBACA,WAOF,MACE,cAQF,QAEE,cACA,cACA,kBACA,wBAGF,IACE,cAGF,IACE,UAUF,IACE,kBAOF,eACE,gBAWF,kBAIE,gCACA,cAOF,OACE,gBAQF,GACE,uBACA,SACA,iBAWF,6BAIE,aACA,SAOF,SACE,gBAQF,aAEE,iBAQF,cAEE,oBASF,qDAIE,0BAOF,wHAIE,kBACA,UAOF,4GAIE,8BAOF,SACE,wBACA,aACA,2BAUF,OACE,sBACA,cACA,cACA,eACA,UACA,mBAOF,SACE,cAQF,6BAEE,sBACA,UAOF,kFAEE,YAQF,cACE,6BACA,oBAOF,qFAEE,wBAOF,4BACE,cACA,YAQF,6BACE,0BACA,aC/ZF,EAEE,0CAGF,iBAJE,qBACA,CASF,UCVE,WACA,YDaF,KACE,yHACA,eACA,gBACA,WACA,sBAIF,qMACE,SACA,UAIF,6BACE,oBACA,kBACA,oBACA,cAGF,MAEE,gBAIF,mCACE,aAGF,iBACE,mBACA,WAFF,YACE,mBACA,WAIF,EACE,cACA,uBACA,qBACA,aACA,eACA,4DAEA,QACE,cAGF,SACE,cAGF,iBAEE,UACA,qBAGF,YACE,WACA,mBACA,oBAKJ,UElFE,OACA,iCAEE,YACA,cAEF,gBACE,WACA,kBACA,YACA,SF2EJ,WACE,WAEF,YACE,YAEF,MACE,uBAEF,MACE,wBAEF,WACE,kBAGF,aACE,aACA,WACA,qBACA,WACA,UACA,gBAGF,kBAIE,6CGnHF,WACE,oBACA,8DACA,wUAGuC,CAGzC,SCVE,qBACA,kBACA,wBACA,kBACA,oBACA,oBACA,cACA,kCACA,mCACA,kCACA,gBACE,cACA,8BDEJ,kCAAyD,eAAQ,CACjE,wBAAyD,eAAQ,CACjE,uBAAyD,eAAQ,CACjE,2BA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CA,mHCkCmB,CDhCrB,iBACE,qHCgCmB,CHxBrB,oDAVA,sDACA,0DAWE,gEAEF,kFAEE,kEACA,kEAEF,wCACE,oEACA,kEEzBF,mCAEE,UACA,mHCkCmB,CDhCrB,iBACE,qHCgCmB,CHxBrB,uDAVA,sDACA,0DAWE,gEAEF,sFAEE,oEACA,kEAEF,0CACE,sEACA,kEEzBF,qCAEE,UACA,mHCkCmB,CDhCrB,kBACE,qHCgCmB,CDvBvB,iCACE,GACE,kDACA,8DACA,UAEF,GACE,kDACA,wDACA,WATJ,yBACE,GACE,kDACA,8DACA,UAEF,GACE,kDACA,wDACA,WAIJ,kCACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,8DACA,WATJ,0BACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,8DACA,WAIJ,iCACE,GACE,kDACA,gEACA,UAEF,GACE,kDACA,wDACA,WATJ,yBACE,GACE,kDACA,gEACA,UAEF,GACE,kDACA,wDACA,WAIJ,kCACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,gEACA,WATJ,0BACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,gEACA,WAIJ,kCACE,GACE,UACA,kDACA,6DAAW,CAEb,GACE,UACA,kDACA,uDAAW,EATf,0BACE,GACE,UACA,kDACA,6DAAW,CAEb,GACE,UACA,kDACA,uDAAW,EAIf,mCACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,8DACA,WATJ,2BACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,8DACA,WAIJ,+BACE,GACE,kDACA,gEACA,UAEF,GACE,kDACA,wDACA,WATJ,uBACE,GACE,kDACA,gEACA,UAEF,GACE,kDACA,wDACA,WAIJ,gCACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,gEACA,WATJ,wBACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,gEACA,WErHJ,iCACE,GACE,0DACA,qDAAW,CAEb,GACE,0DACA,uDAAW,EJIb,yBIVA,GACE,0DACA,qDAAW,CAEb,GACE,0DACA,uDAAW,EJSb,iDAVA,sDACA,0DAWE,gEAEF,8EAEE,gEACA,kEAEF,sCACE,kEACA,kEKzBF,iCAEE,UACA,4DFqCmB,oDEnCrB,gBACE,kEFmCmB,0DH3BrB,uDAVA,sDACA,0DAWE,gEAEF,sFAEE,oEACA,kEAEF,0CACE,sEACA,kEKzBF,qCAEE,UACA,4DFqCmB,oDEnCrB,kBACE,kEFmCmB,0DH3BrB,uDAVA,sDACA,0DAWE,gEAEF,sFAEE,oEACA,kEAEF,0CACE,sEACA,kEKzBF,qCAEE,UACA,4DFqCmB,oDEnCrB,kBACE,kEFmCmB,0DH3BrB,0DAVA,sDACA,0DAWE,gEAEF,0FAEE,sEACA,kEAEF,4CACE,wEACA,kEKzBF,uCAEE,UACA,4DFqCmB,oDEnCrB,mBACE,kEFmCmB,0DE1BvB,gCACE,GACE,UACA,kDACA,iDAAW,CAEb,GACE,UACA,kDACA,+CAAW,EATf,wBACE,GACE,UACA,kDACA,iDAAW,CAEb,GACE,UACA,kDACA,+CAAW,EAIf,iCACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,iDAAW,EATf,yBACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,iDAAW,EAIf,kCACE,GACE,UACA,8DACA,iDAAW,CAEb,GACE,UACA,8DACA,+CAAW,EATf,0BACE,GACE,UACA,8DACA,iDAAW,CAEb,GACE,UACA,8DACA,+CAAW,EAIf,mCACE,GACE,UACA,8DACA,+CAAW,CAEb,GACE,UACA,8DACA,iDAAW,EATf,2BACE,GACE,UACA,8DACA,+CAAW,CAEb,GACE,UACA,8DACA,iDAAW,EAIf,kCACE,GACE,UACA,kDACA,iDAAW,CAEb,GACE,UACA,kDACA,+CAAW,EATf,0BACE,GACE,UACA,kDACA,iDAAW,CAEb,GACE,UACA,kDACA,+CAAW,EAIf,mCACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,iDAAW,EATf,2BACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,iDAAW,EAIf,mCACE,GACE,UACA,wDACA,iDAAW,CAEb,GACE,UACA,wDACA,+CAAW,EATf,2BACE,GACE,UACA,wDACA,iDAAW,CAEb,GACE,UACA,wDACA,+CAAW,EAIf,oCACE,GACE,UACA,wDACA,+CAAW,CAEb,GACE,UACA,wDACA,iDAAW,EATf,4BACE,GACE,UACA,wDACA,+CAAW,CAEb,GACE,UACA,wDACA,iDAAW,ECpHb,2BNAA,sDACA,0DMEE,gEAEF,kEAEE,4DACA,kEAMJ,8BACE,MAEE,uDAAW,CAEb,IACE,+DAAW,CAEb,IACE,6DAAW,CAEb,IACE,6DAAW,CAEb,IACE,2DAAW,ENnBb,sBMKA,MAEE,uDAAW,CAEb,IACE,+DAAW,CAEb,IACE,6DAAW,CAEb,IACE,6DAAW,CAEb,IACE,2DAAW,ENdb,qCAVA,sDACA,0DAWE,gEAEF,8DAEE,0DACA,kEAEF,8BACE,4DACA,kEOzBF,yBAEE,8CACA,8DJkCmB,sDIhCrB,YACE,gEJiCmB,wDHzBrB,iDAVA,sDACA,0DAWE,gEAEF,8EAEE,gEACA,kEAEF,sCACE,kEACA,kEOzBF,iCAEE,8CACA,8DJkCmB,sDIhCrB,gBACE,gEJiCmB,wDHzBrB,8CAVA,sDACA,0DAWE,gEAEF,0EAEE,8DACA,kEAEF,oCACE,gEACA,kEOzBF,+BAEE,8CACA,8DJkCmB,sDIhCrB,eACE,gEJiCmB,wDHzBrB,oDAVA,sDACA,0DAWE,gEAEF,kFAEE,kEACA,kEAEF,wCACE,oEACA,kEOzBF,mCAEE,8CACA,8DJkCmB,sDIhCrB,iBACE,gEJiCmB,wDHzBrB,oDAVA,sDACA,0DAWE,gEAEF,kFAEE,kEACA,kEAEF,wCACE,oEACA,kEOzBF,mCAEE,8CACA,8DJkCmB,sDIhCrB,iBACE,gEJiCmB,wDHzBrB,uDAVA,sDACA,0DAWE,gEAEF,sFAEE,oEACA,kEAEF,0CACE,sEACA,kEOzBF,qCAEE,8CACA,8DJkCmB,sDIhCrB,kBACE,gEJiCmB,wDItBvB,6BACE,GACE,UACA,6CAAW,CAEb,GACE,UACA,6CAAW,EAPf,qBACE,GACE,UACA,6CAAW,CAEb,GACE,UACA,6CAAW,EAIf,8BACE,GACE,6CAAW,CAEb,GACE,UACA,6CAAW,EANf,sBACE,GACE,6CAAW,CAEb,GACE,UACA,6CAAW,EAIf,gCACE,GACE,UACA,+CAAW,CAEb,GACE,6CAAW,EANf,wBACE,GACE,UACA,+CAAW,CAEb,GACE,6CAAW,EAIf,iCACE,GACE,6CAAW,CAEb,GACE,UACA,+CAAW,EANf,yBACE,GACE,6CAAW,CAEb,GACE,UACA,+CAAW,EAIf,+BACE,GACE,UACA,sDACA,+CAAW,CAEb,GACE,sDACA,6CAAW,EARf,uBACE,GACE,UACA,sDACA,+CAAW,CAEb,GACE,sDACA,6CAAW,EAIf,gCACE,GACE,sDACA,6CAAW,CAEb,GACE,UACA,sDACA,+CAAW,EARf,wBACE,GACE,sDACA,6CAAW,CAEb,GACE,UACA,sDACA,+CAAW,EAIf,iCACE,GACE,UACA,sDACA,+CAAW,CAEb,GACE,sDACA,6CAAW,EARf,yBACE,GACE,UACA,sDACA,+CAAW,CAEb,GACE,sDACA,6CAAW,EAIf,kCACE,GACE,sDACA,6CAAW,CAEb,GACE,UACA,sDACA,+CAAW,EARf,0BACE,GACE,sDACA,6CAAW,CAEb,GACE,UACA,sDACA,+CAAW,EAIf,kCACE,GACE,UACA,4DACA,+CAAW,CAEb,GACE,4DACA,6CAAW,EARf,0BACE,GACE,UACA,4DACA,+CAAW,CAEb,GACE,4DACA,6CAAW,EAIf,mCACE,GACE,4DACA,6CAAW,CAEb,GACE,UACA,4DACA,+CAAW,EARf,2BACE,GACE,4DACA,6CAAW,CAEb,GACE,UACA,4DACA,+CAAW,EAIf,iCACE,GACE,UACA,4DACA,+CAAW,CAEb,GACE,4DACA,6CAAW,EARf,yBACE,GACE,UACA,4DACA,+CAAW,CAEb,GACE,4DACA,6CAAW,EAIf,kCACE,GACE,4DACA,6CAAW,CAEb,GACE,UACA,4DACA,+CAAW,EARf,0BACE,GACE,4DACA,6CAAW,CAEb,GACE,UACA,4DACA,+CAAW,EC/If,qBACE,gBACA,4BACE,4DLqBmB,oDM/BvB,WACE,eACA,WCAF,WACE,kBACA,yBACA,kBACA,WACA,eACA,iBACA,mBAEA,gBACE,iBACA,eACA,QACA,kBAGF,uBACE,eACA,WACA,iBACA,aAGF,mBACE,yBACA,yBAFF,mCAII,cAIJ,gBACE,yBACA,yBAFF,gCAII,cAIJ,mBACE,sBACA,yBAFF,mCAII,WAIJ,iBACE,sBACA,yBAFF,iCAII,WAIJ,sBACE,eACA,kBACA,WACA,QACA,gBACA,YACA,iBACA,gBACA,eATF,qCAYI,WACA,4DACA,2CACE,WAKN,sBACE,kBACA,WAGF,4BACE,4BACA,kBACA,kBACA,mBACA,WACA,gBAGF,8CACE,aAGF,4CACE,kBACA,QACA,UACA,iBACA,eAGF,kDACE,kBACA,SACA,WACA,eACA,eAGF,+CACE,eACA,WACA,cAGF,mDACE,cAGF,iBACE,SACA,UACA,SACA,cACA,iBACA,4GACA,sDACA,8IC/HJ,cACE,WACA,eACA,YACA,YACA,YACA,WACA,eAEA,sBACE,YACA,WACA,mBACA,mCACA,WACA,iBACA,CAEA,kDAFA,2GRemB,CQPrB,4BALI,kCACA,CAIJ,mBACE,eACA,gBCzBJ,WACE,kBACA,qBACA,cACA,sBAEA,iBACE,kBACA,8DACA,UACA,YACA,mBACA,eACA,gBACA,6BACA,WACA,iBACA,kBACA,cACA,eACA,mBACA,kEACA,WACA,mBACA,0BAlBF,4CAqBI,WAIJ,eACE,kBACA,8DACA,4DACA,SACA,WACA,UACA,mBACA,gBACA,WACA,0BAGF,6CAEE,8HACA,0DAGF,sBACE,gIACA,0DAGF,0CACE,SACA,cACA,kBACA,uDAAW,CAKb,eACE,gBAEF,gBACE,mBAIJ,mBACE,gBACA,wBACE,qBACA,4ST9CmB,CSiDrB,uEAEI,aACA,+EACE,cAMR,kCACE,GACE,UACA,+EAAoB,CAEtB,GACE,+EAAoB,EANxB,0BACE,GACE,UACA,+EAAoB,CAEtB,GACE,+EAAoB,EAIxB,mCACE,GACE,+EAAoB,CAEtB,GACE,UACA,+EAAoB,EANxB,2BACE,GACE,+EAAoB,CAEtB,GACE,UACA,+EAAoB,EC1GxB,gBACE,WACA,eAFF,kBAKI,WAGF,gCACE,gBACA,WAGF,0DACE,aAGF,0BACE,aACA,cAnBJ,8BAuBI,gBCnBJ,SC4EE,qBACA,gBACA,gBACA,kBACA,sBACA,wDACA,eACA,sBACA,6BAEA,mBACA,gBA5FA,iBACA,eACA,kBA4FA,qFACA,4GACA,gCAjEA,mCACA,yBACA,qBD5BF,kBC8FI,cAGF,wCAGE,UAGF,+BACE,qBAGF,gCACE,UACA,wCAGF,qCAEE,mBAFF,yCAII,oBAIJ,YA7HA,qBACA,eACA,kBA+HA,YAjIA,gBACA,eACA,kBDGF,sBCgCI,mBACA,4BACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBArCJ,8BAuBA,cACA,yBACA,qBArBA,gCAmBA,cACA,yBACA,qBAbE,mZAWF,WACA,yBACA,qBAbE,slBAiBA,mBACA,grBACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAyGJ,8BAvHA,cACA,sBACA,qBAqHA,wDAjHE,mBACA,oEACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA6GJ,gCA3HA,cACA,sBACA,qBAyHA,0DArHE,mBACA,sEACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBDpCJ,iBCsBA,WACA,yBACA,qBDxBA,8BC4BE,mBACA,oCACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBArCJ,8CAuBA,WACA,yBACA,qBAzBA,wEA6BE,mBACA,oFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAjCJ,gDAmBA,cACA,yBACA,qBArBA,0EAyBE,mBACA,sFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzBF,2gBAWF,WACA,yBACA,qBAbE,8sBAiBA,mBACA,wyBACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA6FJ,8FAIE,WDlIA,mEACE,2BACA,0BAIA,6DACE,2BACA,uEACE,2BAKN,sGAEE,0BACA,0HACE,0BAKN,eCJA,WACA,6BACA,qBDEA,4BCEE,mBACA,kCACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBArCJ,0CAuBA,cACA,oCACA,qBArBA,4CAmBA,cACA,iCACA,6BAbE,6eAWF,WACA,yBACA,qBAbE,grBAiBA,mBACA,0wBACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAuHJ,0CArIA,cACA,6BACA,qBAmIA,oEA/HE,mBACA,gFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA2HJ,4CAzIA,cACA,6BACA,qBAuIA,sEAnIE,mBACA,kFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBDNJ,gBCRA,WACA,6BACA,qBAgJA,oBD1IA,6BCFE,mBACA,mCACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBArCJ,4CAuBA,cACA,oCACA,qBArBA,8CAmBA,cACA,iCACA,6BAbE,4fAWF,WACA,yBACA,qBAbE,+rBAiBA,mBACA,yxBACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAsIJ,4CApJA,cACA,6BACA,qBAkJA,sEA9IE,mBACA,kFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA0IJ,8CAxJA,cACA,6BACA,qBAsJA,wEAlJE,mBACA,oFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBDFJ,wClB3CA,WACA,YmBDA,UACA,eACA,kBAgMA,8DnBlMA,WACA,YmBDA,UACA,eACA,kBAqMA,8DnBvMA,WACA,YmBDA,UACA,eACA,kBD8CA,gBACE,kBACA,SACA,UACA,YACA,WACA,gBACA,YACA,WACA,sBACA,UACA,sDACA,oBACA,aAGF,yBACE,kBACA,oBACA,kBAHF,kCAKI,kBACA,2GXtCiB,CWwCnB,gCACE,cAIJ,4BACE,kBADF,qCAGI,kBAIJ,eCjCA,kBACA,qBACA,sBD+BA,wBC7BE,kBACA,WACA,0HAIE,UAKJ,2BAlEA,qBACA,eACA,kBAoEA,2BAtEA,gBACA,eACA,kBAoEA,oCAGI,eDWJ,+GCkIE,iBDlIF,2DCsIE,gBACA,iBACA,kBDxIF,oCC4IE,cACA,qDACE,6BACA,0BACA,kBDhJJ,qDCqJE,4BACA,yBACA,iBAGF,8BACE,WAGF,0EACE,gBAGF,+EAEI,6BACA,0BACA,kBAIJ,gFACE,4BACA,yBACA,iBDzKF,6EACE,iBACA,kBArFJ,8CA2FI,iBAGF,uBACC,WACA,kBACA,SACA,UACA,YACA,WACA,sBACC,uBACD,WACC,4FACA,cAIJ,gCACC,GACC,UACE,SACD,UACA,YACA,WACC,kBAPJ,wBACC,GACC,UACE,SACD,UACA,YACA,WACC,kBExHJ,kBACE,eACA,gBA0BA,aACA,6BAzBA,+BACE,gBAGF,yBACE,yBACA,iBAFF,qCAKI,gBALJ,0CASI,gBACA,gBAVJ,gDAcI,YACA,iBACA,eAMJ,6BACE,kBACA,aAGF,gCACE,qBApCJ,wBAwCI,yBACA,eACA,6BACA,WACA,aA5CJ,kEAkDI,SAlDJ,qBAsDI,kBAGF,iCACE,iBACA,gBAGF,gCACE,iBACA,UACA,WACA,kBAJF,sEAMI,cACA,gBAIJ,2EAEI,aAIJ,+CAEE,kBAGF,wBACE,cACA,cACA,WACA,kBACA,WACA,YACA,UACA,uBACA,iBAEA,8BACE,mBACA,eAIJ,2DACE,WAGF,mHAEE,mBACA,WAGF,wDACE,mBACA,cACA,mBACA,gBACA,WAEA,8DACE,mBAIJ,qEACE,2BACA,8BAGF,oEACE,4BACA,+BAGF,uHAEE,WAGF,oCACE,mBACA,WACA,yBAGF,0BACE,kBACA,WACA,OACA,YAGF,6BACE,aAGF,qDACE,mBAGF,uEAEI,iBAFJ,6EAKI,YACA,iBAIJ,yGAEE,gBACA,aACA,cACA,WACA,aACA,gBACA,0BACA,sEAEA,qHACE,mBACA,eAIJ,6DACE,iBACA,mBACA,mBAGF,qDACE,iBACA,uBACA,WAGF,6EACE,WAIF,4KAEE,yBACA,yBACA,cAEF,gGACE,cAEF,+KAEE,WAGF,uDACE,YACA,gBACA,gBACA,WACA,UACA,YC9LJ,YACE,sBACA,qBACA,kBACA,sBACA,WACA,eANF,oBASI,UACA,sBAIF,kBlBjDA,kBACA,wBACA,kBACA,oBACA,oBAEA,kCACA,mCACA,kCkB2CE,kBACA,QACA,UACA,cACA,gBCzBF,qBAEA,eACA,gBACA,gDArBA,sJACA,OnBLA,yBACE,cACA,8BmBKF,wBACE,gCAoBA,eADF,oBDuBI,aAGF,yBACE,gBACA,2KAIJ,sBACE,aACA,qFAEA,sBACA,cAEA,sBACA,kBACA,yBACA,2Gd7CmB,Cc+CnB,4BEzDF,qBF6DE,mGEpEF,qBACA,UACA,yCFwEE,6BArFF,qBACA,kBACA,wBACA,kBACA,oBACA,oBACA,UACA,kBACA,UACA,UACA,gBACA,QACA,eACA,WACA,WACA,YACA,gBACA,iBACA,eACA,gGACA,oCACE,cACA,8BACA,eAAS,CAEX,mCACE,WA+DA,yDACE,UAIJ,qBACE,WAGF,2CACE,mBACA,mBACA,oJAGE,qBACA,gBAGF,kDACE,aACA,kBACA,oBAIJ,mFACE,mBACA,WACA,mBACA,2FACE,aAIJ,8BACE,YACA,kBACA,eAHF,8DAMI,YACA,cACA,gBACA,uBACA,mBACA,iBACA,mBACA,iBAIJ,2GACE,kBACA,SACA,MAGF,6CAEI,YAFJ,6EAIM,iBAJN,+CASI,gBATJ,kFAYQ,YACA,iBAMR,qCAEI,kBAFJ,6CAKI,YALJ,6EAOM,iBAPN,+CAWI,gBAXJ,kFAcQ,YACA,iBAMR,2DACE,WACA,eACA,iEACE,WAIJ,gCACE,qBACA,kBAGF,0EAEE,kBACA,QACA,SACA,WACA,iBACA,YACA,iBACA,YAGF,2BACE,WACA,WAFF,2DAKI,WALJ,qDASI,SACA,eACA,uBACA,UACA,kBAbJ,6DAiBI,kBACA,MACA,YACA,gBACA,oBArBJ,6BAyBI,YAIJ,gCACE,gBACA,YAFF,2DAKI,WALJ,qFAOM,YAPN,gEAYI,gBACA,uBACA,iBACA,mBAfJ,4GAoBI,eACA,YACA,iBAtBJ,8DA0BI,yBACA,kBACA,eACA,WACA,eACA,iBACA,cACA,kBACA,gBACA,oHACA,sBACA,wEACE,eAtCN,uEA2CI,qBACA,mBACA,gBACA,uBACA,eACA,iHdrQiB,CcqNrB,sElBtPA,kBACA,wBACA,kBACA,oBACA,oBACA,cACA,kCACA,mCACA,kCkBmSI,WACA,oBACA,eAEA,gBACA,4GClRJ,qBAEA,eACA,gBACA,gDArBA,sJACA,ODoSI,kBACA,UACA,kBlB3SJ,6EACE,cACA,8BmBKF,4EACE,gCAoBA,eADF,4EDkRM,cAEF,6EACE,eAAS,CAKf,mCC5TA,sED+TI,4BAAe,CACf,0CACE,yDAAW,CALjB,uCE9SA,qBACA,UACA,yCFyTA,uCAEI,aAFJ,gDAKI,YACA,WANJ,qDASI,WACA,YAVJ,+CAaI,eACA,WACA,YACA,kBACA,UACA,4GACA,gBAnBJ,qDAsBI,UACA,YACA,iBAKN,qBAuBE,sBACA,yBACA,uCACA,kBACA,sBACA,aACA,aACA,YACA,kBACA,aACA,gBACA,eAjCA,wMAEE,gEAGF,kMAEE,oEAGF,mGACE,kEAGF,gGACE,sEAGF,4BACE,aAgBF,0BACE,aACA,gBACA,eACA,gBACA,iBACA,cAEA,0CACE,SACA,UAFF,yEAKI,kBAIJ,2CACE,WACA,gBACA,iBAGF,+BACE,kBACA,cACA,iBACA,gBACA,WAEA,eACA,mBACA,uBACA,gBACA,sEAEA,2EAEE,yBAGF,wCACE,WACA,mBAEA,8CACE,WACA,sBACA,mBAKF,sFAEE,yBACA,gBACA,WAIJ,uCACE,WACA,aACA,gBACA,yBACA,cAOF,wFACE,gBACA,oBACA,kBC1bN,qBAEA,eACA,iBACA,gDArBA,sJACA,OD4cM,wDACA,kBACA,WACA,gBACA,gDC9cN,8FACE,gCAoBA,eADF,8FD8bM,WAGF,iGACE,aAGF,wMAEE,cACA,qBAKN,wGAGI,cA5IN,iDAiJI,cACA,YAlJJ,iFAoJM,WApJN,2EAuJM,gBACA,WACA,sBACA,yBACA,kBACA,aAEF,yEACE,aGpgBN,0BACE,qBACA,sBAIA,mHAEE,kBACA,kBACA,SACA,WANJ,kCLwBE,WACA,yBACA,qBKfE,0BACA,UACA,kBACA,uBACA,UACA,iBACA,kBAjBJ,+CL8BI,mBACA,qDACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBArCJ,gFAuBA,cACA,yBACA,qBArBA,kFAmBA,cACA,yBACA,qBAbE,0wBAWF,WACA,yBACA,qBAbE,68BAiBA,mBACA,uiCACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAyGJ,gFAvHA,cACA,sBACA,qBAqHA,0GAjHE,mBACA,sHACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA6GJ,kFA3HA,cACA,sBACA,qBAyHA,4GArHE,mBACA,wHACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBKpBF,wCACE,qBAEF,uCACE,gBACA,mBAGJ,iHLFA,WACA,yBACA,qBKAA,2ILIE,mBACA,uJACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBArCJ,0PAuBA,WACA,yBACA,qBAzBA,8SA6BE,mBACA,sUACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAjCJ,8PAmBA,cACA,yBACA,qBArBA,kTAyBE,mBACA,0UACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzBF,urEAWF,WACA,yBACA,qBAbE,6jFAiBA,mBACA,ivFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA6FJ,wfAIE,WM3IJ,WFkCE,kBACA,qBACA,gBACA,WACA,YACA,YACA,eACA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,yShBnBqB,CeWrB,6BACE,WACA,UAGF,iCACE,WAGF,sCACE,WCIF,kCAnCA,qBAuCA,iBA7CA,UACA,yCA4CA,mDAnCA,yBACA,UACA,mBACA,WACA,+DARA,qBA6CA,mBACE,eACA,YACA,sBAIF,cAxEA,gBACA,YA2EA,cAvEA,gBACA,YACA,kBEDF,iBF8FE,kBACA,cACA,yBACA,WAGA,8BACE,WACA,eACA,gBEvGJ,+BF2GI,kBAGF,yEAGE,mBAEA,kLACE,gBAIJ,6CAEE,SACA,mBACA,sBAGF,wBACE,wBEhIJ,4BFoII,kBACA,UACA,WACA,WACA,gBAGF,uBACE,gBACA,eACA,gBACA,cACA,WACA,kBACA,sBACA,yBACA,kBATF,mCAaI,iBAbJ,yDAgBM,yBACA,SACA,YACA,6BAGF,+HAGI,qBEpKV,sVFmLM,6BACA,0BAIJ,mCACE,eAEF,kCACE,cE5LJ,sNFsMM,4BACA,yBAKJ,0EAlNA,gBACA,YAsNA,0EAlNA,gBACA,YACA,kBGJF,iBACE,qBACA,eAFF,uBAII,kBAKJ,WACE,eACA,mBACA,aACA,qBACA,kBACA,cACA,sBACA,eACA,gBACE,iBAEF,sEAGI,qBAGJ,iBAkBE,kBACA,MACA,OACA,qBACA,WACA,YAGA,mBACA,yBACA,qBACA,CA5BA,wCA4BA,yGnBvBmB,CmB0BrB,uBA9BI,kBACA,UACA,WACA,SACA,QACA,kBACA,cACA,aACA,cACA,YACA,yBACA,UACA,6CACA,CAiBJ,iBACE,kBACA,OACA,UACA,eACA,UACA,MACA,SACA,QAKJ,oCAEI,qBACA,0CACE,8CACA,UACA,yGnB7CiB,CmBmDrB,2CAEI,qBAHN,qCAOI,qBACA,yBACA,2CACE,sBAVN,2CAeI,eAfJ,6CAmBI,WACA,mBAIJ,iBACE,gBACA,iBAIA,uBACE,gBACA,eACA,SACA,YACA,iBACA,WACA,qBACA,wDACA,eACA,yBACA,cAXF,yBAcI,WAdJ,6CAkBI,cACA,cACA,QACA,SAGF,8CACE,YACA,iBAGF,8CACE,YACA,iBACA,eACA,0DACE,0BAEF,yDACE,0BAIJ,mCACE,0BACA,8BAGF,kCACE,0BAGF,8CACE,kBAGF,4DAEE,cACA,kBAzDJ,qECtHA,UAGA,wBDkLI,QACA,SAGF,+BACE,gBACA,qBACA,cACA,8BAEA,2CACE,qBACA,0BAGF,qCACE,qBACA,8BACA,cAGF,sCACE,qBACA,8BACA,cAIJ,gCAGE,kBACA,CAEA,kHALA,qBACA,yBAEA,WAQA,4CACE,0BAIJ,yDACE,WACA,yBACA,qBEpON,UACE,gBACA,kBACA,eACA,kBACA,gBACA,8CAEA,gBACE,uCACA,kBAGF,mBACE,yBACA,qBAGF,eACE,YACA,iBACA,gCACA,eAEA,qBACE,eACA,qBACA,uBACA,WACA,gBACA,mBAIJ,gBACE,kBACA,WACA,SAGF,eACE,aAGF,iCACE,oBACA,WACA,iBAGF,mCACE,qBACA,iBACA,eACA,YACA,kBACA,gBACA,qBACA,qFACA,cC5DJ,4BAEI,kBACA,cACA,sBACA,2BACA,2BACA,qFACA,uBACA,mBACA,wCAVJ,0BAaI,kBACA,gBACA,cACA,SACA,UAEA,gCACE,aAGF,mCACE,eACA,YAzBN,iFA8BI,uDAAW,CA9Bf,2BAkCI,kBACA,OACA,MACA,cAEA,mEAEE,WACA,cAGF,iCACE,WAGF,0CACE,kBAlDN,2BAsDI,WACA,YACA,eAWA,aAVA,qCACE,YA1DN,+BA6DM,cAEF,6CACE,aAKF,wCACE,oBAtEN,8CA2EI,cA3EJ,0CA+EI,kBA/EJ,2CAmFI,cACA,YACA,6BArFJ,wCAwFI,aAxFJ,oDA8FI,kBACA,cACA,YACA,WACA,cACA,YACA,eAGA,QACA,iBACA,UACA,QACA,CACA,oLAPA,uBACA,kBAKA,aAME,4JACE,UAGJ,gGACE,YAtHN,0BA2HI,WACA,iCACE,eAAS,CA7Hf,0BAkII,YACA,iCACE,eAAS,CApIf,4BA2II,oBA3IJ,0BA+II,kBACA,SACA,gBACA,cACA,kBACA,UACA,WArJJ,6BAuJM,kBACA,qBACA,YACA,WACA,aACA,UACA,eA7JN,oCA+JQ,SACA,uBACA,cACA,YACA,WACA,aACA,cACA,YACA,kBACA,YACA,eACA,oFAEE,aACA,kGACE,UAGJ,2CACE,kBACA,MACA,OACA,gBACA,WACA,YACA,eACA,6BACA,iBACA,kBACA,WACA,8CACA,YACA,mCACA,kCAGJ,wDACE,WACA,YAMR,qCAEI,iBAFJ,mCAKI,WACA,YACA,YACA,MCjNJ,cACE,eACA,oBACE,cACA,eACA,WAEF,qBACE,kBACA,qBACA,eACA,sBACA,eACA,gBAEA,8BACE,mBAGF,2BACE,kBACA,MACA,SACA,YACA,iBACA,QACA,iBACA,mBAGF,2BACE,UACA,kBACA,UACA,UACA,gBACA,QACA,eACA,WACA,WACA,YACA,gBACA,iBACA,eACA,gGACA,iCACE,WAIJ,sDACE,UAIF,2BACE,kBACA,QACA,UACA,WACA,YACA,gBACA,iBACA,WACA,gBRrCJ,qBAEA,eACA,gBACA,gDArBA,sJACA,OAEA,iCACE,gCAoBA,eADF,kCQkCM,2KAEF,4DRtEJ,qEAAY,CQwEN,mEACE,yDAAW,CAKnB,oBACE,eACA,gBACA,kBACA,aACA,yBACA,kBACA,uCACA,mBACA,qDAEE,aAEF,oMAEE,gEAGF,8LAEE,oEAGF,iGACE,kEAGF,8FACE,sEAGJ,mBACE,qBACA,mBACA,gBACA,aACA,gBACA,SACA,UACA,+BACA,cACA,+BACE,0BAEF,8BACE,+BACA,kBACA,0BAEF,8BACE,kBAGJ,wBACE,iBACA,eACA,mBACA,gBACA,uBACA,wDACA,8BACE,mBAEF,iCACE,mBACA,WACA,uCACE,uBAIF,gJAEE,yBACA,gBAGJ,+BACE,kBACA,qCACE,gBACA,oBRnIN,qBAEA,eACA,gBACA,gDArBA,sJACA,OQqJM,WACA,kBACA,WRrJN,2CACE,gCAoBA,eSlCF,cACE,mBACA,eACA,aACA,qBACA,cACA,kBACA,sBAEA,kFAGI,qBAIJ,oBAgBE,kBACA,MACA,OACA,qBACA,WACA,YAGA,kBACA,yBACA,sBACA,yOxBViB,CwBhBjB,0BACE,0EACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,yGxBGe,CwBcnB,oBACE,kBACA,OACA,UACA,eJpDJ,UAGA,wBImDI,MACA,SACA,QACA,WACA,YAKJ,gDAEI,qBACA,yBACA,sDACE,YACA,8CACA,kBACA,SACA,QACA,UACA,WAYJ,sGAEI,qBAJN,0CASI,qBACA,yBAEA,gDACE,0EACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,iHxB3Ee,CwBkFjB,sEAEI,qBAHN,gEAQI,yBACA,qBAEA,sEACE,gDACA,kBAKN,iDAEI,qBArBN,2CA0BI,qBACA,yBACA,iDACE,gDACA,qBA9BN,iDAmCI,eAGF,4BACE,WACA,mBAIJ,sBACE,eACA,eACA,qBACA,4CACE,gBAIJ,8CAEE,gBACA,iBAGF,2BACE,qBAGF,oBACE,eACA,yBACE,qBAqBN,gBAbI,iGAEE,oBACA,gBACA,gBACA,cACA,SACA,WACA,SACA,QACA,mBCnMN,SCAE,kBACA,cACA,eACA,YhCLA,O+BIA,c/BHA,+BAEE,YACA,cAEF,eACE,WACA,kBACA,YACA,S+BHJ,cAEE,qGACA,kCAEA,uDAJA,oDACA,CAUF,oBACE,sEAIF,qBACE,oEAIF,kBACE,gEAIF,4BACE,6EAIF,2BACE,sDAIF,kBACE,kGAIF,qBACE,4FAIF,qBACE,0FAGF,SACE,kBACA,cCzCE,mpDACE,kBAEA,eACA,eACA,gBAgBF,uRACE,WACA,mDAQJ,YACE,cACA,WAEF,iBACE,UAEF,iBACE,WAEF,mBACE,iBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,YAEF,iBACE,WAEF,iBACE,YAEF,mBACE,kBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,UAEF,iBACE,SAEF,iBACE,UAEF,mBACE,gBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,YAEF,iBACE,WAEF,iBACE,YAEF,mBACE,kBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,UAEF,iBACE,SAEF,iBACE,UAEF,mBACE,gBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,wDAdF,WACE,cACA,YAEF,gBACE,WAEF,gBACE,YAEF,kBACE,kBAEF,iBACE,sDAdF,WACE,cACA,mBAEF,gBACE,kBAEF,gBACE,mBAEF,kBACE,yBAEF,iBACE,qDAdF,WACE,cACA,mBAEF,gBACE,kBAEF,gBACE,mBAEF,kBACE,yBAEF,iBACE,qDAdF,WACE,cACA,UAEF,gBACE,SAEF,gBACE,UAEF,kBACE,gBAEF,iBACE,qDAdF,WACE,cACA,mBAEF,gBACE,kBAEF,gBACE,mBAEF,kBACE,yBAEF,iBACE,qDAdF,WACE,cACA,mBAEF,gBACE,kBAEF,gBACE,mBAEF,kBACE,yBAEF,iBACE,qDAdF,WACE,cACA,YAEF,gBACE,WAEF,gBACE,YAEF,kBACE,kBAEF,iBACE,qDAdF,WACE,cACA,kBAEF,gBACE,iBAEF,gBACE,kBAEF,kBACE,wBAEF,iBACE,qDAdF,WACE,cACA,kBAEF,gBACE,iBAEF,gBACE,kBAEF,kBACE,wBAEF,iBACE,qDAMF,WACE,aAEF,+VAhCI,WACA,mDAQJ,eACE,cACA,WAEF,oBACE,UAEF,oBACE,WAEF,sBACE,iBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,sDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,UAEF,mBACE,SAEF,mBACE,UAEF,qBACE,gBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,qDAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qDAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qDAMF,cACE,aAEF,gBACE,UAEF,gBACE,WDUJ,yBC/CI,+VACE,WACA,mDAQJ,eACE,cACA,WAEF,oBACE,UAEF,oBACE,WAEF,sBACE,iBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,sDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,UAEF,mBACE,SAEF,mBACE,UAEF,qBACE,gBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,qDAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qDAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qDAMF,cACE,aAEF,gBACE,UAEF,gBACE,YDmBJ,yBCxDI,+VACE,WACA,mDAQJ,eACE,cACA,WAEF,oBACE,UAEF,oBACE,WAEF,sBACE,iBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,sDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,UAEF,mBACE,SAEF,mBACE,UAEF,qBACE,gBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,qDAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qDAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qDAMF,cACE,aAEF,gBACE,UAEF,gBACE,YDuBJ,0BC5DI,+VACE,WACA,mDAQJ,eACE,cACA,WAEF,oBACE,UAEF,oBACE,WAEF,sBACE,iBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,wDAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,sDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,UAEF,mBACE,SAEF,mBACE,UAEF,qBACE,gBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qDAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,qDAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qDAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qDAMF,cACE,aAEF,gBACE,UAEF,gBACE,YCpEJ,cACE,yBACA,kBACA,yBAEA,iCACE,6BACA,6CACE,aAHJ,sDAOI,YACA,iBACA,kBACA,WACA,eACA,kBAZJ,6DZiBA,eACA,gBACA,kDArBA,mMACA,OnBdA,kBACA,wBACA,kBACA,oBACA,oBACA,cACA,kCACA,mCACA,kC+BwBM,kBACA,WACA,qBACA,iBACA,iBACA,gBACA,sBACA,gLACA,MACA,UACA,WACA,SZ3BN,mEACE,gCAoBA,enB5BF,oEACE,cACA,6C+BkCe,CAMjB,0BACE,+G3BrBmB,C2BwBrB,sBACE,gBACA,WACA,eACA,sBAEA,gDACE,iBACA,oBAGF,+BACE,aAIJ,oDAEI,0BAIJ,iFZ/CA,qBAEA,eACA,gBACA,iDArBA,kMACA,OAEA,uFACE,gCAoBA,eavCJ,+BACE,kBACA,aAEA,sdAIE,oEAGF,keAIE,gEAGF,yOAEE,sEAGF,+OAEE,kEAIJ,qBACE,kBACA,qBACA,aACA,eACA,gEALF,2BAQI,aAEF,2BACE,UACA,kBACA,UACA,UACA,gBACA,QACA,eACA,WACA,WACA,YACA,gBACA,iBACA,eACA,gGACA,iCACE,WAIJ,sDACE,UAEF,0BACE,kBACA,qFACA,4GACA,WACA,YACA,iBACA,UACA,WACA,QACA,gBACA,gCACE,gBACA,oBACA,eACA,WACA,qBACA,cACA,sBCZN,cACE,kBACA,aACA,YACA,yBACA,gBACA,eACA,gBACA,sBACA,kBACA,uCACA,4BACA,gBAEA,yBACE,YACA,YACA,gCAGF,oBACE,SACA,WACA,YACA,UACA,YAGF,0BACE,YAEA,+BACE,kBAIJ,qBAvGA,YACA,iBACA,kBACA,qFACA,gCAmGA,6BAhGE,cAgGF,kMAzFE,cACA,gBACA,qBACA,WACA,iBAqFF,0NA9EE,aA8EF,oZAnEE,kBACA,MACA,WACA,mFACA,cACA,eACA,qBACA,iBA4DF,wJAtDE,SAsDF,wJAhDE,UAgDF,kDA5CE,UA4CF,kDAxCE,WA4CF,4BACE,gBAzCJ,oBA6CI,yBACA,eACA,6BACA,WAhDJ,sDAsDI,SAGF,6BACE,iBACA,gBAGF,4BACE,iBACA,WACA,cACA,kBAJF,8DAMI,cACA,gBAIJ,mEAEI,aAIJ,mBACE,cAGF,mBACE,cACA,cACA,WACA,kBACA,WACA,YACA,iBACA,6BACA,UACA,uBACA,kBACA,sEAEA,yBACE,mBACA,eAGF,0BACE,WACA,mBAIJ,uCACE,qBACA,gBACA,cAGF,qGAEE,WAGF,8CACE,mBACA,WACA,6BAEA,oDACE,mBAIJ,+CACE,mBACA,cACA,mBACA,gBACA,WAEA,qDACE,mBAIJ,4DACE,2BACA,8BAGF,2DACE,4BACA,+BAGF,qBACE,eACA,YACA,iBACA,6BAGF,yBACE,kBACA,cACA,iBAGF,yBACE,qBArKJ,4EA0KI,qBACA,kBACA,iBACA,8FACE,WACA,mBA/KN,sCAoLI,aACA,kBACA,UACA,kBACA,gBACA,WACA,YACA,kBACA,iBACA,QACA,SA9LJ,4CAkMI,gBACA,oBACA,eACA,WACA,qBACA,cACA,WACA,iBACA,4DA1MJ,kDA8MI,WA9MJ,mCjBgBE,qBACA,gBACA,gBACA,kBACA,sBACA,wDACA,eACA,sBACA,6BAEA,mBACA,gBA5FA,iBAEA,kBA4FA,qFACA,4GACA,gCAjEA,mCACA,yBACA,qBAjCA,gBACA,eACA,kBiBoRE,kBACA,WACA,UAvNJ,4CjBkCI,cAGF,sHAGE,UAGF,yDACE,qBAGF,0DACE,UACA,wCAGF,yFAEE,mBAFF,6FAII,oBAIJ,sCA7HA,qBACA,eACA,kBA+HA,sCAjIA,gBACA,eACA,kBiB+DF,gDjB5BI,mBACA,sDACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBArCJ,kFAuBA,WACA,yBACA,qBAzBA,4GA6BE,mBACA,wHACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAjCJ,oFAmBA,cACA,yBACA,qBArBA,8GAyBE,mBACA,0HACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzBF,yxBAWF,WACA,yBACA,qBAbE,49BAiBA,mBACA,sjCACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA6FJ,sKAIE,WiB4IA,4CjB3PF,WACA,yBACA,qBiB2PI,mBAFF,yDjBrPA,mBACA,+DACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBkB9CN,qCACE,mBAGF,iCACE,6BACA,SACA,YACA,iBACA,UACA,UACA,kBAEA,2CACE,mBAIJ,qCACE,WAGF,oBACE,YACA,gBAEA,yBACE,UAGF,yBACE,WAGF,0BACE,YAGF,2BACE,kBACA,SACA,WACA,mBACA,kBACA,YACA,iBACA,WAGF,wDACE,mBAGF,iEACE,kBAGF,8FACE,kBApCJ,6CAwCI,kBACA,YAzCJ,wCA4CI,yBACA,kBA7CJ,mFdgBE,kBACA,qBACA,gBACA,WACA,YACA,YACA,eACA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,yJcoBE,mKACA,YACA,Wf9BF,uHACE,WACA,UAGF,+HACE,WAGF,yIACE,WCAF,+FA/BA,qBAmCA,+FA1CA,qBACA,UACA,yCA4CA,gOAnCA,yBACA,UACA,mBACA,WACA,wPARA,qBA6CA,mGACE,eACA,YACA,sBAIF,yFAxEA,gBACA,YA2EA,yFAvEA,gBACA,YACA,kBcYF,0CAuDI,aAvDJ,yMA8DI,gCAGF,6CACE,YADF,sEAII,YArEN,2FA2EI,SA3EJ,uEA8EI,MA9EJ,4JAmFI,aAnFJ,gDAuFI,gBACA,kBAxFJ,oDA0FM,kBACA,UAEF,uDACE,WACA,cACA,mBACA,gBACA,SACA,kBACA,QACA,WACA,OACA,QAIJ,2BACE,iBA5GJ,yCA+GI,gBACA,YACA,WAjHJ,4CAoHI,gBACA,YACA,iBC9IJ,4CAGI,cAHJ,qJAMM,cACA,qBAPN,uIAWM,cAXN,iFfwCE,kBACA,qBACA,gBACA,WACA,YACA,YACA,eACA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,0SerCE,kBACA,YACA,WACA,iBhB0BF,qHACE,WACA,UAGF,6HACE,WAGF,uIACE,WCAF,6FA/BA,qBAmCA,6FA1CA,qBACA,UACA,yCA4CA,4NAnCA,yBACA,UACA,mBACA,WACA,oPARA,qBA6CA,iGACE,eACA,YACA,sBAIF,uFAxEA,gBACA,YA2EA,uFAvEA,gBACA,YACA,kBeZF,uCAuBI,mBAvBJ,0CA0BI,gBA1BJ,yCA6BI,aC7BJ,0BACE,OACA,SACA,SACA,QACA,gBACA,WACA,kBACA,aACA,kBAGF,iCACE,aAGF,iCHfE,YACA,iBACA,kBACA,qFACA,gCGWF,yCHRI,cGQJ,kSHDI,cACA,gBACA,qBACA,WACA,iBGHJ,0THUI,aGVJ,olBHqBI,kBACA,MACA,WACA,mFACA,cACA,eACA,qBACA,iBG5BJ,gOHkCI,SGlCJ,gOHwCI,UGxCJ,0EH4CI,UG5CJ,0EHgDI,WG5CJ,gCACE,mBACA,WACA,aACA,yBAOA,sJACE,mBACA,WAIJ,+BACE,kBAGE,sJAEE,mBACA,cACA,mBAKN,gCACE,qBACA,cACA,WACA,uBACA,kBACA,YACA,iBACA,cACA,kBACA,sEAEA,sCACE,mBACA,eChEJ,yBACE,OACA,SACA,SACA,QACA,gBACA,WACA,kBACA,aACA,kBAGF,gCACE,aAGF,gCJfE,YACA,iBACA,kBACA,qFACA,gCIWF,wCJRI,cIQJ,0RJDI,cACA,gBACA,qBACA,WACA,iBIHJ,kTJUI,aIVJ,okBJqBI,kBACA,MACA,WACA,mFACA,cACA,eACA,qBACA,iBI5BJ,0NJkCI,SIlCJ,0NJwCI,UIxCJ,wEJ4CI,UI5CJ,wEJgDI,WI5CJ,+BACE,mBACA,WACA,aACA,yBAGF,8BACE,kBAGF,8BACE,qBACA,cACA,WACA,uBACA,kBACA,YACA,iBACA,cACA,kBACA,sEAEA,oCACE,mBACA,eAQF,gJACE,mBACA,WAIJ,gJAGI,qFAHJ,8JAMI,gBACA,8BAIJ,+EAEI,eAAS,CCxEb,2BACE,OACA,MACA,SACA,QACA,gBACA,WACA,kBACA,aACA,kBAGF,kCACE,aAGF,kCLfE,YACA,iBACA,kBACA,qFACA,gCKWF,0CLRI,cKQJ,0SLDI,cACA,gBACA,qBACA,WACA,iBKHJ,kULUI,aKVJ,omBLqBI,kBACA,MACA,WACA,mFACA,cACA,eACA,qBACA,iBK5BJ,sOLkCI,SKlCJ,sOLwCI,UKxCJ,4EL4CI,UK5CJ,4ELgDI,WK5CJ,iCACE,mBACA,WACA,aACA,yBAGF,gCACE,kBAGF,kCACE,qBACA,cACA,WACA,uBACA,kBACA,YACA,iBACA,cACA,kBACA,sEAEA,wCACE,mBACA,eAQF,4JACE,mBACA,WAIJ,8JAGI,qFAHJ,4KAMI,gBACA,8BAIJ,sFAEI,eAAS,CCxEb,2FAGI,MCGJ,uBACE,gBACA,aACA,kBAEA,6BACE,qBACA,kBACA,aACA,yBACA,gBACA,eACA,gBACA,sBACA,kBACA,uCACA,4BACA,sBACA,gBACA,gBAGF,6BACE,SACA,UACA,SACA,WACA,YACA,gBACA,UAEA,kCACE,sBACA,kBACA,YACA,gCAGF,qCACE,iBAIJ,iCACE,kBACA,UACA,eACA,gBACA,WACA,YACA,kBACA,iBACA,QACA,SAGF,uCACE,gBACA,oBACA,eACA,WACA,qBACA,cACA,WACA,4DAGF,6CACE,WAGF,gEACE,gBAGF,8BACE,WACA,eACA,yBACA,mBACA,iBACA,sBACA,WACA,gBACA,kBAEA,oCACE,gBAGF,0CACE,cACA,cAGF,yCACE,eArBJ,iCAyBI,gBACA,sBACA,SACA,UACA,WACA,iBA9BJ,iCAkCI,gBACA,uBACA,SACA,mBACA,WACA,YACA,iBACA,gBACA,eACA,qFACA,sEA5CJ,kDAgDI,WACA,aACA,cAlDJ,uCAsDI,mBAGF,gDACE,mBACA,gBAGF,gDACE,WACA,sDACE,uBACA,mBAKN,sZAIE,oEAGF,kaAIE,gEAGF,yMAEE,sEAGF,+MAEE,kEAIJ,iBAGE,aAEA,gEAEA,wCANA,kBACA,qBAEA,cACA,CrBxIA,uBCJA,gBACA,WACA,YACA,YAEA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,yJoBoIE,6JrB5IF,yCACE,WACA,UAGF,6CACE,WAGF,kDACE,WCAF,6BA/BA,qBAmCA,6BA1CA,qBACA,UACA,yCA4CA,2EAnCA,yBACA,UACA,mBACA,WACA,uFARA,qBA6CA,+BACE,eACA,YACA,sBAIF,0BAxEA,gBACA,YA2EA,0BAvEA,gBACA,YACA,kBoBiLA,8CpBxLA,gBACA,YoB2LA,8CpBvLA,gBACA,YACA,kBoByLA,sBACE,UAGF,sBACE,kBACA,qFACA,4GACA,WACA,YACA,iBACA,UACA,WACA,QACA,gBACA,4BACE,gBACA,oBACA,eACA,WACA,qBACA,cACA,sBCtNN,cACE,kBACA,aACA,YACA,aACA,cACA,eACA,gBACA,gBAEA,mBACE,kBADF,0CtBiBA,qBAEA,eACA,iBACA,gDArBA,sJACA,OAEA,gDACE,gCAoBA,eADF,wCsBfI,2KAIJ,6CAEI,yDAAW,CAIf,+CAEE,aAGF,mBACE,aACA,kBACA,qBACA,UACA,SACA,gBACA,sBACA,kBACA,uCACA,4BACA,yBAEA,yDAEE,iBACA,SACA,WACA,eACA,gBACA,WACA,mBACA,eACA,sEAVF,6DAaI,WACA,cACA,iBACA,kBAGF,qEACE,yBAGF,2EACE,WACA,mBACA,oBAEA,uFACE,WACA,sBACA,mBAIJ,iFACE,0BAGF,+EACE,0BAGF,+EACE,kBAGF,yEACE,WACA,gBACA,yBACA,cAIJ,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2EA,qBAvEA,gBACA,YACA,kBwBcA,0BACE,kBACA,cACA,YACA,gBACA,WACA,kBACA,4DACA,cACA,WACA,gCACE,mBAEF,wIAEE,cAIJ,wE5C3CA,kBACA,wBACA,kBACA,oBACA,oBACA,cACA,kCACA,mCACA,kC4CsCE,iBACA,qFACA,kBACA,WACA,YACA,4DzBrBF,qBAEA,eACA,gBACA,gDArBA,sJACA,OyBuCE,UACA,W5C7CF,sFACE,cACA,8BmBKF,oFACE,gCAoBA,eADF,wBCbA,qBwBsCA,0BxB7CA,qBACA,UACA,yCwB+CA,2BxBtCA,yBACA,UACA,mBACA,WACA,iCARA,qBwB8CA,6BACE,gBACA,YAGF,wBACE,WACA,gBACA,UACA,0BACA,iBACA,YACA,4DACA,WACA,SACA,kBACA,cAEA,kCxB5DF,yBACA,UACA,mBACA,WACA,wCARA,qBwBqEA,qBACE,UADF,sGAMI,YANJ,+CASI,YATJ,2BAaI,YACA,iBAdJ,wDAkBI,QAlBJ,0DAqBI,WArBJ,wDAwBI,YAIJ,qBACE,UADF,sGAMI,YANJ,+CASI,YATJ,2BAaI,YACA,iBACA,gBACA,mBAhBJ,wDAmBI,SAnBJ,0DAsBI,YAtBJ,wDAyBI,YAzBJ,+FA4BI,WAIJ,+BACE,8BACA,WACA,YACA,gBACA,kBACA,MACA,QACA,UACA,8EAGF,uDACE,UAGF,6BACE,eACA,mCACE,QACA,0CACE,kBACA,eAAS,CAGb,mCACE,YAEF,sEACE,eAIJ,+BACE,6BACA,SACA,eAEE,4CACE,kBACA,eAAS,CAGb,qCACE,YACA,gBAIJ,0aApMA,YACA,qBACA,mBA2MA,mDAEI,YACA,mBACA,yBAJJ,0DAOI,aAPJ,qDA7MA,YACA,qBACA,mBCHF,UACE,aACA,gBACA,eACA,gBACA,aACA,uCACA,WACA,gBACA,iBAEA,iBACE,aAGF,0BACE,SACA,UAGF,2BACE,WACA,eACA,gBACA,iBAGF,yDAGE,wDACA,eACA,wDAGF,gCACE,YAGF,iBACE,cACA,WACA,uBACE,WAEF,wBACE,kBACA,6BACA,WACA,YACA,MACA,OACA,SACA,QACA,UAAS,CAIb,kGAIE,yBAGF,2EAEE,gBAGF,0JAGE,6BAGF,wBACE,cAEA,uDAAW,CAHb,0DAMI,cAIJ,oCAEE,+BAFF,kEAII,+BACA,iBACA,SACA,kBACA,UAIJ,iFAGI,eAIJ,6EAGI,+BACA,uDAAW,CAIf,uCACE,SACA,OACA,kBACA,eACA,eACA,aAGF,2BACE,UAGF,qCACE,MACA,UACA,kBACA,gBACA,gBACA,aAGF,uCAEE,SACA,eACA,kBACA,cACA,mBAGA,gLAEE,qBACA,mBAHF,wLAKI,qBACA,oBAfN,yDAoBI,eACA,iBAIJ,iCACE,WACA,aACA,gBACA,UACA,cACA,yBAGF,kBACE,kBADF,4BAII,sBACA,kBAGF,yD1BnLF,sE0B+LI,+EAA0B,CAG5B,gHAdE,8BACA,kBACA,wBACA,kBACA,oBACA,oBACA,kBACA,2KACA,gBACA,U1B7LJ,CAcA,uD0B+LI,M1BjLJ,qBAEA,eACA,gBACA,gDArBA,sJACA,OAEA,6DACE,gCAoBA,eADF,6EAlCA,sE0BoNM,+EAA0B,CAKhC,qBACE,SACA,gCACA,gBACA,UAJF,2EAQI,kBACA,QACA,WACA,oCACA,UAEA,6QAGE,gCACA,cACA,uDAAW,CAnBjB,+EAuBM,cACA,WACA,2FACE,cAKN,2BACE,YACA,cACA,SACA,WAOF,uSAEE,sBACA,eACA,iBACA,YAIJ,gCACE,SACA,CACA,iIADA,kDAOF,gEAEE,gBAGF,8BACE,UACA,SACA,gBACA,gBACA,qHAEE,iBACA,YACA,qBACA,2BAGF,yDACE,kBAQJ,4CAEE,WACA,mBAGF,6CACE,gBAGF,mCACE,4BAGF,uGAEE,qBACA,gBACA,MAQA,8nBAEE,WACA,uDAAW,CAIf,gCACE,WACA,sCACE,WAIJ,gEAEE,eAGF,8FAEE,eACA,cACA,OAGF,uDACE,eACA,yBACA,WAHF,wHAMI,WAIJ,4HAGI,cAIJ,8JAIE,6BACA,cC1XJ,aACE,eACA,eACA,aACA,WACA,SACA,OAEA,oBACE,WACA,sBACA,kBACA,SAGF,4BACE,kBACA,UACA,iBACA,kBACA,yBACA,uCACA,gBACA,cAGF,8BACE,cAGF,4BACE,WAGF,8BACE,WAGF,yDAEE,cAxCJ,sBA4CI,iBACA,eACA,QACA,kBCjDJ,WACE,kBACA,WACA,cACA,UACA,oBAEA,gBACE,eACA,cACA,MACA,QACA,SACA,OACA,aACA,iCACA,UAGF,iBACE,SACA,eACA,iBACA,gBAGF,mBACE,kBACA,sBACA,SACA,kBACA,4BAGF,iBACE,eACA,SACA,uBACA,kBACA,WACA,SACA,WACA,gBACA,cACA,qBACA,4DACA,WACA,UAEA,mBACE,cACA,kBACA,wBACA,kBACA,oBACA,oBACA,WACA,YACA,eACA,cAEA,0BACE,gBACA,cACA,8BAIJ,8CAEE,WACA,qBAIJ,kBACE,kBACA,0BACA,gBACA,WACA,gCAGF,gBACE,aACA,eACA,gBAGF,kBACE,6BACA,4BACA,iBACA,0BAJF,gCAMI,gBACA,gBAIJ,6CAEE,sDACA,sCACA,UAGF,gBACE,eACA,MACA,QACA,OACA,SACA,yBACA,mCACA,YACA,aACA,yBAEA,uBACE,aAIJ,gBACE,gBC7HJ,+BAEI,aAFJ,6BAMI,kBAGF,qCAEI,WACA,gBACA,eAJJ,uCAQI,iBACA,eACA,WACA,eAXJ,2BAeI,eACA,kBACA,cACA,kBACA,QA5BN,+BAiCI,gBACA,YAlCJ,6CAqCM,iBACA,gBAIJ,8CACE,WAGF,gGAEE,WAGF,6CACE,cAGF,gDACE,cClDJ,kBACE,eACA,aACA,YACA,kBAEA,yBACE,aACA,kBACA,uCACA,yBACA,gBACA,gBACA,kBACA,mBACA,gBAEA,iCACE,eACA,WACA,kBAGF,qCACE,eACA,WAGF,oEACE,eACA,WACA,iBACA,kBAGF,wEACE,iBACA,eACA,WAGF,8BACE,kBACA,UACA,QACA,iBACA,eAEA,sCACE,cAEF,mCACE,cAEF,sCACE,WAEF,oCACE,WAIJ,uCACE,eACA,gBACA,oBACA,eAGF,+BACE,kBACA,WACA,SACA,WACA,aAGF,6BACE,YACA,gBA/EN,4CAoFI,wDACA,0DACA,yH7C3DmB,C6C8DrB,2DAEE,UAEA,gEAGF,wFAZE,wDACA,0DACA,yHAOA,CASF,6BAJE,sDACA,gEAGF,kIAEE,4EACA,kEAGF,gEACE,8EACA,kEAIJ,sCACE,GACE,UACA,WAEF,GACE,OACA,WAPJ,8BACE,GACE,UACA,WAEF,GACE,OACA,WAIJ,uCACE,GACE,UACA,mBACA,iBACA,oBACA,iBAEF,GACE,UACA,gBACA,cACA,iBACA,cAbJ,+BACE,GACE,UACA,mBACA,iBACA,oBACA,iBAEF,GACE,UACA,gBACA,cACA,iBACA,cC5IJ,gBACE,eAEA,sBACE,YACA,cACA,SACA,WACA,gBACA,kBAGF,2BACE,WACA,YACA,iBACA,kBAGF,qBACE,eACA,kBACA,qFACA,eACA,YACA,iBACA,kBACA,gBACA,WACA,yBACA,sBACA,iBACA,kBAbF,uBAgBI,qBACA,WACA,wCACA,aAGF,2BACE,wDACA,qBAFF,6BAII,cAIJ,4BACE,yBACA,qBAFF,kEAMI,WAOJ,gEACE,0BACA,cACA,mBACA,WACA,kBAIA,4EACE,c/B9CN,qBAEA,eACA,gBACA,gDArBA,sJACA,O+BgEM,oBACA,mBAAa,C/B/DnB,wFACE,gCAoBA,eADF,sC+BoDM,oBAAS,CAOX,sCACE,oBAAS,CAKf,yEAGE,iBAEF,8FAIE,kBACA,eACA,WACA,kBACA,gBACA,eACA,YACA,iBACA,WACA,kBACA,wDACA,qBAGF,0CAEE,yBACA,sBAHF,8CAMI,WAEA,0D/BtGJ,qBAEA,eACA,gBACA,gDArBA,sJACA,O+BwHM,cACA,YACA,iBACA,oBACA,kB/B1HN,sEACE,gCAoBA,eADF,sD+B4GI,qBADF,0DAII,cAOF,6BACE,iBACA,gBACA,cAOF,6BACE,gBACA,cAKN,yBAQE,mBAPA,+BACE,qBADF,iCAGI,WACA,mBALN,2BAUI,WAIJ,sBACE,oBAGF,wBACE,WACA,iBACA,qCACE,WACA,kBAGF,qCACE,WACA,YACA,iBAHF,2C9B/JF,kBACA,qBACA,gBACA,WACA,YACA,YACA,eACA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,yJ8BwJM,8JACA,W/BjKN,6DACE,WACA,UAGF,iEACE,WAGF,sEACE,WCAF,iDA/BA,qBAmCA,iDA1CA,qBACA,UACA,yCA4CA,mHAnCA,yBACA,UACA,mBACA,WACA,+HARA,qBA6CA,mDACE,eACA,YACA,sBAIF,8CAxEA,gBACA,YA2EA,8CAvEA,gBACA,YACA,kB8BwMA,wFAEE,SACA,YACA,iBACA,SACA,eAGF,oDACE,WACA,iBAFF,0DAKI,aACA,sBACA,sBACA,kBACA,yBACA,aACA,gBACA,WACA,YACA,kBACA,0EAEA,gEACE,qBAON,gDACI,YACA,iBAWJ,8HAPE,SACA,SACA,eACA,YACA,iBAmBF,kMAEE,YACA,iBAGF,6CACE,gBACA,0DACE,YACA,iBAFF,gE9BjRF,gBACA,YACA,kB8BqRM,WC1QR,aACE,kBACA,MACA,OACA,aACA,YACA,qFACA,mBACA,eACA,gBACA,gBACA,gBAEA,mBACE,WACA,kBACA,+BAGF,oBACE,aAIF,0FAGE,mBAGF,gGAGE,iBAGF,mGAGE,gBAGF,6FAGE,kBAGF,mBACE,gBACA,sBACA,4BACA,yBACA,kBACA,uCAGF,mBACE,SACA,eACA,iBACA,YACA,gCACA,WAGF,2BACE,iBACA,WAGF,qBACE,mBACA,eACA,WAHF,8BAKI,WACA,iBACA,kBAEF,2BACE,kBAIJ,qBACE,iBACA,kBAFF,4BAII,gBAQF,4CAEE,kBACA,cACA,QACA,SACA,yBACA,mBAIJ,mBACE,iBAEF,yBACE,iBACA,UAAS,CAGX,mJAGE,sBACA,yBACA,SACA,qKACE,YACA,WACA,iBACA,sBACA,sBAGJ,8CACE,SACA,iBAEF,kDACE,UAEF,mDACE,WAGF,yJAGE,OACA,oBACA,2BACA,2KACE,YACA,SACA,YACA,oBACA,wBAGJ,gDACE,QACA,gBAEF,mDACE,SAEF,sDACE,YAGF,4JAGE,mBACA,4BACA,MACA,8KACE,YACA,QACA,iBACA,mBACA,yBAGJ,iDACE,SACA,iBAEF,qDACE,UAEF,sDACE,WAGF,sJAGE,QACA,qBACA,0BACA,wKACE,YACA,UACA,qBACA,uBACA,YAGJ,+CACE,QACA,gBAEF,kDACE,SAEF,qDACE,YCvOJ,cACE,qBAEA,mBACE,WACA,eACA,kBAGF,oBACE,qBACA,WACA,eACA,gBACA,4CACE,mBACA,mBAIJ,oBACE,qBACA,WACA,yBACA,oBACA,sBAGF,iBACE,oBACA,yBACA,kEACA,kBAGF,mBACE,WACA,gBACA,cACA,iBACA,sBACA,qBACA,mBAPF,4BASI,eAIJ,oDAEI,WACA,UACA,kBACA,MACA,OACA,QACA,SACA,gBACA,mBACA,+IhDtBiB,CgD0BrB,gDAEI,sBAFJ,kDAKI,WAIJ,8CAEI,yBAFJ,gDAKI,cAIJ,yCACE,kBACA,cACA,6BAGF,wCACE,cACA,kBACA,WACA,kBACA,cACA,QACA,8DACA,OACA,mBACA,SAVF,iDAaI,uBAIJ,uEAEI,WAGJ,qEAEI,cAKN,uCACE,GACE,WACA,QAEF,GACE,UACA,YAPJ,+BACE,GACE,WACA,QAEF,GACE,UACA,YC1HJ,UACE,SACA,UACA,gBACA,eACA,qBACA,sBACA,oBACA,gBACA,kBAGE,0FAEE,eAEF,wCACE,6CAAW,CAIf,eACE,SACA,UACA,qBACA,iBACA,kBACA,wDAEA,qBACE,iDAAW,CAGb,oDAEE,cACA,eACA,gBACA,wDACA,cAGF,uBACE,kBACA,OACA,MACA,UACA,YACA,gBACA,8BACE,kBAIJ,6EAEE,cAGF,yFAEE,cAIJ,eACE,gBACA,sBACA,qBACA,eC9DJ,YACE,kBACA,gBACA,YACA,kBACA,yBACA,eACA,0BACA,4BACA,CAEA,8BAFA,kFAYA,kBATE,kBACA,OACA,WACA,kBACA,yBACA,SACA,CAGF,kBACE,yBADF,qCAGI,qBAIJ,oCACE,yBAGF,mBACE,kBACA,iBACA,gBACA,WACA,YACA,eACA,kBACA,yBACA,sBACA,UACA,0EAEA,yBACE,qBAGF,0BACE,yCAIJ,iBACE,kBACA,SACA,OACA,WACA,eACA,UAGF,sBACE,kBACA,qBACA,sBACA,kBACA,eACA,WAEA,6BACE,WAIJ,iBACE,kBACA,WACA,WACA,uBACA,UAGF,gBACE,kBACA,SAEA,UACA,WACA,yBACA,sBACA,eACA,kBACA,sBAIA,uEACE,iBAEF,uBACE,qBAIJ,qBACE,mCADF,uCAII,gCAJJ,6EASI,4BACA,sBACA,mBAXJ,gFAgBI,6BAKJ,oBACE,kBACA,aACA,YACA,UACA,mBAEA,2BACE,aAGF,2CACE,kBAGF,0BACE,YACA,eACA,YACA,eACA,cACA,WACA,kBACA,qBACA,yBACA,kBAGF,0BACE,kBACA,QACA,SACA,yBACA,mBAGF,qEACE,WACA,SACA,iBACA,uBACA,yBCjKN,aACE,kBACA,aACA,cACA,mBAIA,eACA,gBACA,WAEA,oBACE,aAGF,0FAGE,kBAEF,gGAGE,oBAEF,mGAGE,kBAEF,6FAGE,oBAKJ,mBACE,gBACA,iBACA,WACA,gBACA,qBACA,yBACA,kBACA,uCACA,gBAIF,mBACE,kBACA,QACA,SACA,yBACA,mBAIA,mJAGE,WACA,uBACA,yBAGF,8CACE,SACA,iBAGF,kDACE,UAGF,mDACE,WAGF,yJAGE,SACA,2BACA,2BAGF,gDACE,QACA,gBAGF,mDACE,QAGF,sDACE,WAGF,sJAGE,UACA,2BACA,0BAGF,+CACE,QACA,gBAGF,kDACE,QAGF,qDACE,WAGF,4JAGE,QACA,uBACA,4BAGF,iDACE,SACA,iBAGF,qDACE,UAGF,sDACE,WCzJJ,UACE,cACA,qBACA,sBACA,kBACA,UACA,kBACA,kBACA,wSACA,eAEA,mBACE,UACA,gBACA,mBAGF,yBACE,kBAGF,mCACE,kBACA,QACA,YACA,iBACA,iBACA,UACA,kBACA,WACA,uCACE,qBAIJ,oBACE,yGpDJmB,CoDOrB,6CACE,WACA,yBACA,iBACA,8KACA,kBACA,mDACE,WACA,kBACA,OACA,QACA,MACA,SACA,uBAMJ,cACE,WAMF,cACE,kBACA,c3DzEF,WACA,Y2D0EE,yCAEE,WACA,kBACA,yBACA,4GACA,cACA,kBACA,WACA,MACA,OACA,SACA,QAEF,oBACE,oDAOJ,2B3DjGA,WACA,Y2DqGA,2B3DtGA,WACA,Y2DyGA,0DAEE,aAGF,4CACE,cAIJ,iCACE,MAEE,6CAAW,CAEb,IACE,6CAAW,EANf,yBACE,MAEE,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,kDACE,kBACA,yBACA,uCApBN,4HAyBQ,cACA,gBACA,4BA3BR,mDAiCI,gBAjCJ,sMAsCI,gBAGF,gCACE,gBACA,iBACA,6BAGF,gCACE,cACA,sCACE,cAEF,uCACE,cAEF,wCACE,WAEF,sCACE,YAKN,0BACE,WAIA,2BACE,eACA,qBACA,WACA,YACA,kBACA,iBACA,yBACA,qFACA,gBACA,gCACE,WAIJ,8BACE,WAAS,CAGX,+BACE,WAAS,CAGX,sBACE,kBACA,4BACE,WAAS,CAIb,8EACE,qBAKF,0DAEE,mBAjXN,4DAsXI,iBAGF,kBACE,cADF,wBAGI,WACA,eAIJ,sBACE,YAGF,wCACE,kBACA,gBAGF,8CACE,gBAGF,4DACE,kBACA,kBACA,oBACA,oBAGF,6CAEE,kBACA,MACA,gBACA,UACA,sEACA,gBAPF,yDASI,WACA,gBAIJ,+EAEE,gBAGF,sBACE,OACA,uCAFF,wCAII,kBAJJ,4CAQI,mBACA,mBAEF,oEACE,gBAEF,kDAEE,wBAIJ,uBACE,QACA,wCACA,oDAEE,wBALJ,+CAUI,kBACA,oBAQJ,kIACE,gBAGF,yBACE,aAGF,6BACE,kBAGF,0DAEE,kBAGF,0DAEE,eACA,WACA,UACA,sEACE,cAEF,4EACE,mBACA,WACA,wFACE,WAKN,6BACE,kBACA,SACA,oCACE,gBzC3dJ,qBAEA,eACA,gBACA,0CArBA,gJACA,OyC6eI,gBACA,oBzC5eJ,0CACE,gCAoBA,eADF,6ByC6dE,YACA,gBACA,oCACE,gBzCteJ,qBAEA,eACA,gBACA,0CArBA,gJACA,OyCwfI,gBACA,oBzCvfJ,0CACE,gCAoBA,e0ClCJ,UACE,sBACA,kBACA,gB/DLA,O+DOA,W/DNA,iCAEE,YACA,cAEF,gBACE,WACA,kBACA,YACA,S+DDF,cACE,aAGF,kBACE,UACA,kBACA,OACA,WACA,sBACA,WACA,yBACA,6SACA,kDAGF,cACE,gCACA,mBAGF,wBACE,gBACA,eACA,gBACA,sBACA,kBACA,mBACA,mB/DrCF,OACA,6DAEE,YACA,cAEF,8BACE,WACA,kBACA,YACA,S+D+BF,kCACE,kBACA,mBAGF,sCAEE,qFACA,UACA,kBACA,eACA,WACA,YACA,iBACA,eACA,SACA,6BACA,kBACA,kBACA,WACA,4DAEA,kDACE,WAGF,gDACE,kBAEA,kBACA,gBACA,oBACA,oBACA,wBACA,kBACA,oBACA,uB1ChDJ,qBAEA,eACA,iBACA,gDArBA,sJACA,OAEA,4DACE,gCAoBA,eADF,8D0C8CM,cACA,8BAKN,2BACE,mBACA,4DAEE,WAIJ,mBACE,UAEA,+BACE,eAAS,CAIb,mBACE,OACA,+BACE,eAAS,CAEX,yBACE,gCAIJ,mBACE,gBACA,mBAGF,qBACE,gBACA,mBAGF,cACE,sBACA,eACA,6SACA,kBACA,SACA,gBACA,WAEA,yCAEE,cACA,WAAS,CAGX,oBACE,WAhBJ,qCAoBI,oBACA,eArBJ,yDAwBM,WAxBN,4BA6BI,qBACA,YACA,kBACA,sBACA,kBAEA,kCACE,iBACA,gHACA,cACA,eACA,qBAEA,wCACE,cAGF,yCACE,cAZJ,2CAgBI,WACA,YACA,iBArDR,uDA2DI,cAIJ,uCACE,eAGF,6BACE,eADF,iDAGI,iBAIJ,yBACE,aAGF,kBACE,kBACA,WAGF,0C5DhNA,sDACA,iC4DiNE,yFACA,gHACA,UACA,sDAGF,0FACE,kEACA,wDACA,kEAGF,0CACE,kBACA,MACA,OACA,QACA,S5DnOF,sDACA,iC4DoOE,yFACA,gHACA,sDAGF,0FACE,sEACA,wDACA,kEAGF,yC5DhPA,sDACA,iC4DiPE,yFACA,gHACA,UACA,sDAGF,wFACE,oEACA,kEACA,uDAAW,CAGb,yCACE,kBACA,MACA,QACA,OACA,S5DnQF,sDACA,iC4DoQE,+EACA,gEACA,+GzD5NmB,CyD+NrB,wFACE,wDACA,oEACA,kEAGF,iCAEI,gBAFJ,+CAKM,WACA,eACA,mBACA,cACA,0DACE,gBAVR,mEAaQ,iBAbR,sDAkBM,WAlBN,6GA0BM,gBA1BN,mDA8BM,UACA,UACA,YACA,MAjCN,qCAsCI,gBACA,WAIJ,+CAEI,WACA,+BACA,kBACA,gBALJ,iFAQQ,iBARR,yIAeM,kBAfN,iEAkBM,UAlBN,mDAsBI,kBACA,8BAIJ,gDAEI,YACA,8BACA,iBACA,gBALJ,2IAUM,iBAVN,kEAaM,SAbN,oDAiBI,mBACA,+BAIJ,+BACE,gBACA,gBAIF,8DACE,YAEF,wDACE,kBAEF,oDACE,SACA,yBACA,gBACA,0BACA,4GACA,mBACA,iBAEF,0DACE,qBACA,2GzDjWmB,CyDmWrB,2DACE,gBACA,wDACA,qBACA,cAEF,+EACE,mBACA,uDAAW,CAEb,yDACE,gBAEF,yEACE,eACA,WACA,4G1CtXF,qBAEA,eACA,gBACA,0CArBA,gJACA,O0CwYE,4DACA,QACA,iBACA,sBACA,gB1C1YF,+EACE,gCAoBA,eADF,+E0CwXI,cACA,gBAIJ,iHACE,iBACA,kBAGF,mJAEE,WACA,uDAAW,CAGb,wBACE,YACA,iBAFF,0CAKI,WACA,YACA,iBACA,kBACA,eACA,kBACA,yB1CzZJ,qBAEA,eACA,iBACA,gDArBA,sJACA,O0C4aI,WACA,4D1C3aJ,gDACE,gCAoBA,eADF,gD0CyZM,cC1bR,SACE,qBACA,iBACA,YACA,cACA,kBACA,yBACA,mBACA,eACA,0GACA,sBACA,UACA,gBACA,qBACA,eAEA,eACE,YAGF,qCAGE,WAGF,uCAEI,qBACA,cACA,cA9BN,wB3C2BE,qBAEA,eACA,iBACA,gDArBA,sJACA,O2CyBE,eACA,gBACA,gBACA,WACA,wDACA,Y3C5BF,8BACE,gCAoBA,eADF,8B2CWI,UAIJ,0DAIE,SACA,0dAKE,WAIJ,cACE,mBAGF,eACE,mBAGF,gBACE,gBAGF,aACE,gBAGF,eACE,kBACA,UACA,SAGF,yCAEE,oHACA,0DAGF,oBACE,sHACA,0DC3FJ,cACE,gBACA,SACA,UAEA,mBACE,kBACA,iBACA,gBACA,SAEA,wBACE,kBACA,SACA,MACA,YACA,8BAGF,mDACE,aAGF,wBACE,kBACA,WACA,YACA,sBACA,oBACA,6BACA,6BACE,qBACA,cAEF,4BACE,kBACA,WAEF,8BACE,qBACA,cAIJ,+BACE,kBACA,kBACA,WACA,WACA,cACA,eACA,SACA,YACA,gBACA,cACA,eACA,6DAAW,CAGb,2BACE,sBACA,eACA,kBACA,SAGF,gDAEI,+BACA,aAHJ,mDAMI,gBAKN,mFACE,cnC/EF,uBACE,mBACA,eACA,aACA,qBACA,cACA,kBACA,sBAEA,sHAGI,qBAIJ,6BAgBE,kBACA,MACA,OACA,qBACA,WACA,YAGA,kBACA,yBACA,sBACA,yOxBViB,CwBhBjB,mCACE,0EACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,yGxBGe,CwBcnB,6BACE,kBACA,OACA,UACA,eJpDJ,UAGA,wBImDI,MACA,SACA,QACA,WACA,YAKJ,kEAEI,qBACA,yBACA,wEACE,YACA,8CACA,kBACA,SACA,QACA,UACA,WAYJ,0IAEI,qBAJN,4DASI,qBACA,yBAEA,kEACE,0EACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,iHxB3Ee,CwBkFjB,iGAEI,qBAHN,2FAQI,yBACA,qBAEA,iGACE,gDACA,kBAKN,mEAEI,qBArBN,6DA0BI,qBACA,yBACA,mEACE,gDACA,qBA9BN,mEAmCI,eAGF,qCACE,WACA,mBAIJ,+BACE,eACA,eACA,qBACA,8DACE,gBAIJ,gEAEE,gBACA,iBAGF,oCACE,qBAGF,6BACE,eACA,kCACE,qBAqBN,gBAbI,qIAEE,oBACA,gBACA,gBACA,cACA,SACA,WACA,SACA,QACA,mBoCjMN,cACE,kBAEA,mBACE,eACA,yBACA,qBACA,kBACA,sBACA,kBACA,YACA,aACA,iBAEA,+BACE,oBAIA,iCACE,WACA,kBACA,QACA,UACA,WACA,YACA,iBACA,kBACA,eAIJ,0BACE,iBACA,0BACA,gBACA,WACA,gCACA,gBACA,kBACA,MACA,OACA,WAEA,gCACE,YAIJ,wBACE,eACA,gBACA,kBACA,YAEA,uCACE,kBACA,MACA,OACA,YACA,YACA,WAGF,kCACE,iBACA,WACA,kBACA,YAnBJ,2BAuBI,YACA,cAxBJ,8BA0BM,gBACA,mBACA,uBACA,iBACA,wDACA,oCACE,eACA,yBAMR,wCACE,oFACA,wCAGF,oCACE,iBAGF,0BACE,6BACA,0BACA,kBACA,SACA,OACA,WAIJ,wBACE,qBACA,gBACA,aACA,sBAJF,iCAOI,WACA,WAEA,6CACE,kBAXN,0C7ClFA,qBAEA,eACA,gBACA,gDArBA,sJACA,OAEA,gDACE,gCAoBA,eADF,uC6CkGA,GACE,mBAEF,GACE,wBALJ,+BACE,GACE,mBAEF,GACE,wBpCvIF,0BACE,mBACA,eACA,aACA,qBACA,cACA,kBACA,sBAEA,kIAGI,qBAIJ,gCAgBE,kBACA,MACA,OACA,qBACA,WACA,YAGA,kBACA,yBACA,sBACA,yOxBViB,CwBhBjB,sCACE,0EACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,yGxBGe,CwBcnB,gCACE,kBACA,OACA,UACA,eJpDJ,UAGA,wBImDI,MACA,SACA,QACA,WACA,YAKJ,wEAEI,qBACA,yBACA,8EACE,YACA,8CACA,kBACA,SACA,QACA,UACA,WAYJ,sJAEI,qBAJN,kEASI,qBACA,yBAEA,wEACE,0EACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,iHxB3Ee,CwBkFjB,0GAEI,qBAHN,oGAQI,yBACA,qBAEA,0GACE,gDACA,kBAKN,yEAEI,qBArBN,mEA0BI,qBACA,yBACA,yEACE,gDACA,qBA9BN,yEAmCI,eAGF,wCACE,WACA,mBAIJ,kCACE,eACA,eACA,qBACA,oEACE,gBAIJ,sEAEE,gBACA,iBAGF,uCACE,qBAGF,gCACE,eACA,qCACE,qBAqBN,gBAbI,iJAEE,oBACA,gBACA,gBACA,cACA,SACA,WACA,SACA,QACA,mBqC/LN,iBACE,SACA,YACA,eAHF,oBAKI,UACA,aACA,gBACA,mBACA,UACA,kCAEI,0BAZR,uBAgBM,SACA,mBAjBN,sBAoBM,qBACA,gBACA,kBACA,SACA,eACA,qBACA,mBACA,WACA,wDACA,4BACE,yBAEF,oDACE,yBAIF,kDACE,mBAEF,mGAEE,SACA,WACA,YACA,iBACA,qBACA,sBACA,cACA,eACA,aAGA,4DACE,gBACA,qBACA,oBACA,gBACA,8FACA,eAIF,uTCrEN,kBACA,+U/C8BA,eACA,gBACA,yCArBA,+IACA,O+CVE,gBACA,qBACA,oBACA,gBACA,kBACA,MACA,UACA,WACA,2K/CIF,uWACE,gCAoBA,eADF,2T+CnCA,kB/CCA,qEAAY,C+CAZ,mV/C8BA,eACA,gBACA,yCArBA,+IACA,O+CVE,gBACA,qBACA,oBACA,gBACA,kBACA,MACA,UACA,WACA,2K/CIF,2WACE,gCAoBA,eADF,mV8C+CU,6EAA0B,CAMpC,4BACE,aACA,iCACE,cAGJ,uHAII,WACA,mBAOJ,yDACE,iBACA,mBAIJ,2DACE,iBACA,WACA,mBACA,crClHA,mBACE,mBACA,eACA,aACA,qBACA,cACA,kBACA,sBAEA,sGAGI,qBAIJ,yBAgBE,kBACA,MACA,OACA,qBACA,WACA,YAGA,kBACA,yBACA,sBACA,yOxBViB,CwBhBjB,+BACE,0EACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,yGxBGe,CwBcnB,yBACE,kBACA,OACA,UACA,eJpDJ,UAGA,wBImDI,MACA,SACA,QACA,WACA,YAKJ,0DAEI,qBACA,yBACA,gEACE,YACA,8CACA,kBACA,SACA,QACA,UACA,WAYJ,0HAEI,qBAJN,oDASI,qBACA,yBAEA,0DACE,0EACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,iHxB3Ee,CwBkFjB,qFAEI,qBAHN,+EAQI,yBACA,qBAEA,qFACE,gDACA,kBAKN,2DAEI,qBArBN,qDA0BI,qBACA,yBACA,2DACE,gDACA,qBA9BN,2DAmCI,eAGF,iCACE,WACA,mBAIJ,2BACE,eACA,eACA,qBACA,sDACE,gBAIJ,wDAEE,gBACA,iBAGF,gCACE,qBAGF,yBACE,eACA,8BACE,qBAqBN,gBAbI,qHAEE,oBACA,gBACA,gBACA,cACA,SACA,WACA,SACA,QACA,mBuChMN,UACE,SACA,YACA,eAHF,aAKI,UACA,aACA,gBACA,mBACA,UATJ,yDAYM,sBACA,yBAEA,sCAEA,yBACA,0BAEF,oCAEI,yBACA,WACA,WAGJ,4CAEI,6BAGJ,+CAEI,gCAGJ,2BAEI,qBACA,0BAxCR,gBA4CM,SACA,mBA7CN,eAgDM,qBACA,gBACA,kBACA,SACA,eACA,qBACA,mBACA,WACA,wDACA,qBACE,yBAEF,sCACE,yBAIF,oCACE,mBAEF,uEAEE,SACA,WACA,YACA,iBACA,qBACA,sBACA,cACA,eACA,aAGA,8CACE,gBACA,qBACA,oBACA,gBACA,8FACA,eAIF,mODhGN,kBACA,2P/C8BA,eACA,gBACA,yCArBA,+IACA,O+CVE,gBACA,qBACA,oBACA,gBACA,kBACA,MACA,UACA,WACA,2K/CIF,mRACE,gCAoBA,eADF,uO+CnCA,kB/CCA,qEAAY,C+CAZ,+P/C8BA,eACA,gBACA,yCArBA,+IACA,O+CVE,gBACA,qBACA,oBACA,gBACA,kBACA,MACA,UACA,WACA,2K/CIF,uRACE,gCAoBA,eADF,+PgD0EU,6EAA0B,CAMpC,qBACE,aACA,0BACE,cAGJ,kGAII,WACA,mBAOJ,2CACE,iBACA,mBCnIJ,YACE,eADF,iBAII,cACA,WACA,aANJ,6BAUI,eAGF,8BACE,qBAGF,2CACE,0BACA,WACA,YACA,eACA,kBACA,yBACA,kBACA,eACA,0EACA,qBACA,mBACA,iBACA,kBAEA,iDACE,qBAIJ,4BACE,0BACA,0EACA,eACA,kBACA,kBACA,WACA,YACA,kBAEA,kDACE,0BAXJ,iCAeI,cACA,YAhBJ,uDAoBI,mBACA,sBAGF,kCACE,qBAzBJ,mDAkCI,YACA,mBAnCJ,4DA8BM,eACA,gBACA,cAhCN,8CAsCI,eAtCJ,8CAyCI,eACA,WA1CJ,0CA6CI,eACA,wDACA,WAKF,gGACE,WAKN,iBACE,gBACA,sBACE,gBACA,eACA,eAEA,2BACE,YACA,iBACA,cACA,kFAJF,+CAOI,iBACA,eACA,WATJ,0CjD7EF,qBAEA,eACA,iBACA,gDArBA,sJACA,OiD0GM,wDACA,UACA,eACA,YACA,WACA,iBjD7GN,gDACE,gCAoBA,eADF,gDiD2FQ,WAKN,uDACE,yBAGF,2CACE,UAGF,4EAEE,WAGF,2CACE,UAGF,+BACE,qBACA,gBACA,kBACA,eAJF,wDAMI,sBAKN,mGAGI,YACA,kBACA,yBACA,YACA,kBACA,+GACE,uBATN,6GAcI,UAdJ,qKAkBI,uBAlBJ,uHAsBI,oBAtBJ,uHA0BI,WACA,YACA,kBACA,QACA,SA9BJ,+HAkCI,WACA,YACA,cApCJ,qJAwCI,iBACA,eACA,WA1CJ,6GA8CI,gBACA,uBACA,mBACA,iBACA,iBACA,wDACA,kBACA,kBACA,eACA,qBACA,sBAxDJ,6KA4DI,iBA5DJ,qHAgEI,kBACA,aAjEJ,qFAqEI,kBACA,UACA,QACA,cAIJ,8BACE,qBADF,oDAII,qBACA,WACA,YACA,mBAPJ,yDAWI,YACA,kBAEA,gEACE,YACA,kBACA,UACA,sBACA,wDACA,UACA,WACA,YAtBN,iJA2BM,kBACA,SACA,QACA,WACA,gCACA,wBACA,eACA,eACA,WACA,cACA,WACA,UACA,gBACA,kBACA,6JACE,WA1CR,yEA+CM,SACA,gBAIA,sEACE,WAFJ,6JAOI,UA1DR,gIAiEI,cACA,WACA,YACA,gBApEJ,yDAwEI,aAIA,mFACE,yBAIA,iTAGE,aAIJ,mEACE,gBACA,WA1FN,6DA+FI,eAvON,0CA4OI,cACA,gBA7OJ,8CAiPI,mIhE9SmB,CgE6DvB,8CAqPI,qIhElTmB,CgEsTvB,qCACE,GACE,iBACA,WAHJ,6BACE,GACE,iBACA,WAIJ,sCACE,GACE,iBACA,WAHJ,8BACE,GACE,iBACA"",""file"":""antd.min.css"",""sourcesContent"":[""/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}template,[hidden]{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}button,input{overflow:visible}button,select{text-transform:none}button,html [type=\""button\""],[type=\""reset\""],[type=\""submit\""]{-webkit-appearance:button}button::-moz-focus-inner,[type=\""button\""]::-moz-focus-inner,[type=\""reset\""]::-moz-focus-inner,[type=\""submit\""]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=\""button\""]:-moz-focusring,[type=\""reset\""]:-moz-focusring,[type=\""submit\""]:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=\""checkbox\""],[type=\""radio\""]{box-sizing:border-box;padding:0}[type=\""number\""]::-webkit-inner-spin-button,[type=\""number\""]::-webkit-outer-spin-button{height:auto}[type=\""search\""]{-webkit-appearance:textfield;outline-offset:-2px}[type=\""search\""]::-webkit-search-cancel-button,[type=\""search\""]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}*{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}*:before,*:after{box-sizing:border-box}html,body{width:100%;height:100%}body{font-family:\""Helvetica Neue\"",Helvetica,\""PingFang SC\"",\""Hiragino Sans GB\"",\""Microsoft YaHei\"",\""微软雅黑\"",Arial,sans-serif;font-size:12px;line-height:1.5;color:#666;background-color:#fff}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{margin:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}ul,ol{list-style:none}input::-ms-clear,input::-ms-reveal{display:none}::selection{background:#2db7f5;color:#fff}a{color:#2db7f5;background:transparent;text-decoration:none;outline:none;cursor:pointer;transition:color .3s ease}a:hover{color:#57c5f7}a:active{color:#2baee9}a:active,a:hover{outline:0;text-decoration:none}a[disabled]{color:#ccc;cursor:not-allowed;pointer-events:none}.clearfix{zoom:1}.clearfix:before,.clearfix:after{content:\"" \"";display:table}.clearfix:after{clear:both;visibility:hidden;font-size:0;height:0}.pull-left{float:left}.pull-right{float:right}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.ant-divider{margin:0 4px;color:#999;display:inline-block;height:8px;width:1px;background:#ccc}code,kbd,pre,samp{font-family:Consolas,Menlo,Courier,monospace}@font-face{font-family:'anticon';src:url('https://at.alicdn.com/t/font_1463992151_360388.eot');src:url('https://at.alicdn.com/t/font_1463992151_360388.eot?#iefix') format('embedded-opentype'),url('https://at.alicdn.com/t/font_1463992151_360388.woff') format('woff'),url('https://at.alicdn.com/t/font_1463992151_360388.ttf') format('truetype'),url('https://at.alicdn.com/t/font_1463992151_360388.svg#iconfont') format('svg')}.anticon{display:inline-block;font-style:normal;vertical-align:baseline;text-align:center;text-transform:none;text-rendering:auto;line-height:1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon:before{display:block;font-family:\""anticon\"" !important}.anticon-caret-circle-o-up:before{content:\""\\e60c\""}.anticon-android:before{content:\""\\e64f\""}.anticon-chrome:before{content:\""\\e65c\""}.anticon-appstore-o:before{content:\""\\e6b2\""}.anticon-appstore:before{content:\""\\e64d\""}.anticon-apple:before{content:\""\\e64e\""}.anticon-github:before{content:\""\\e674\""}.anticon-inbox:before{content:\""\\e67b\""}.anticon-ie:before{content:\""\\e67c\""}.anticon-smile:before{content:\""\\e677\""}.anticon-smile-circle:before{content:\""\\e676\""}.anticon-meh-circle:before{content:\""\\e678\""}.anticon-frown:before{content:\""\\e673\""}.anticon-frown-circle:before{content:\""\\e672\""}.anticon-meh:before{content:\""\\e679\""}.anticon-pie-chart:before{content:\""\\e68a\""}.anticon-tags:before{content:\""\\e656\""}.anticon-tags-o:before{content:\""\\e657\""}.anticon-tag:before{content:\""\\e658\""}.anticon-tag-o:before{content:\""\\e659\""}.anticon-cloud:before{content:\""\\e65a\""}.anticon-cloud-upload-o:before{content:\""\\e697\""}.anticon-cloud-download-o:before{content:\""\\e698\""}.anticon-cloud-upload:before{content:\""\\e696\""}.anticon-cloud-o:before{content:\""\\e699\""}.anticon-cloud-download:before{content:\""\\e65b\""}.anticon-star-o:before{content:\""\\e693\""}.anticon-star:before{content:\""\\e694\""}.anticon-environment:before{content:\""\\e665\""}.anticon-environment-o:before{content:\""\\e666\""}.anticon-eye:before{content:\""\\e66e\""}.anticon-eye-o:before{content:\""\\e66d\""}.anticon-camera:before{content:\""\\e653\""}.anticon-camera-o:before{content:\""\\e652\""}.anticon-aliwangwang:before{content:\""\\e64b\""}.anticon-aliwangwang-o:before{content:\""\\e64a\""}.anticon-windows:before{content:\""\\e6a0\""}.anticon-shopping-cart:before{content:\""\\e692\""}.anticon-unlock:before{content:\""\\e69f\""}.anticon-lock:before{content:\""\\e69d\""}.anticon-save:before{content:\""\\e69e\""}.anticon-user:before{content:\""\\e69c\""}.anticon-video-camera:before{content:\""\\e69b\""}.anticon-to-top:before{content:\""\\e69a\""}.anticon-team:before{content:\""\\e680\""}.anticon-tablet:before{content:\""\\e695\""}.anticon-solution:before{content:\""\\e68f\""}.anticon-poweroff:before{content:\""\\e691\""}.anticon-search:before{content:\""\\e690\""}.anticon-share-alt:before{content:\""\\e68e\""}.anticon-setting:before{content:\""\\e68d\""}.anticon-poweroff:before{content:\""\\e68b\""}.anticon-picture:before{content:\""\\e689\""}.anticon-phone:before{content:\""\\e688\""}.anticon-paper-clip:before{content:\""\\e687\""}.anticon-notification:before{content:\""\\e686\""}.anticon-mobile:before{content:\""\\e685\""}.anticon-menu-fold:before{content:\""\\e684\""}.anticon-menu-unfold:before{content:\""\\e683\""}.anticon-mail:before{content:\""\\e682\""}.anticon-logout:before{content:\""\\e681\""}.anticon-link:before{content:\""\\e67e\""}.anticon-line-chart:before{content:\""\\e67f\""}.anticon-home:before{content:\""\\e67d\""}.anticon-laptop:before{content:\""\\e67a\""}.anticon-hdd:before{content:\""\\e675\""}.anticon-folder-open:before{content:\""\\e671\""}.anticon-folder:before{content:\""\\e670\""}.anticon-filter:before{content:\""\\e66f\""}.anticon-file-text:before{content:\""\\e66c\""}.anticon-file:before{content:\""\\e66b\""}.anticon-file-unknown:before{content:\""\\e6a6\""}.anticon-file-excel:before{content:\""\\e6ac\""}.anticon-file-pdf:before{content:\""\\e6ab\""}.anticon-file-jpg:before{content:\""\\e6aa\""}.anticon-file-ppt:before{content:\""\\e6a7\""}.anticon-exception:before{content:\""\\e66a\""}.anticon-export:before{content:\""\\e669\""}.anticon-desktop:before{content:\""\\e662\""}.anticon-edit:before{content:\""\\e668\""}.anticon-ellipsis:before{content:\""\\e667\""}.anticon-upload:before{content:\""\\e664\""}.anticon-download:before{content:\""\\e663\""}.anticon-delete:before{content:\""\\e661\""}.anticon-copy:before{content:\""\\e660\""}.anticon-customerservice:before{content:\""\\e65e\""}.anticon-credit-card:before{content:\""\\e65f\""}.anticon-code:before{content:\""\\e65d\""}.anticon-calendar:before{content:\""\\e654\""}.anticon-book:before{content:\""\\e655\""}.anticon-bars:before{content:\""\\e650\""}.anticon-bar-chart:before{content:\""\\e651\""}.anticon-area-chart:before{content:\""\\e64c\""}.anticon-question-circle-o:before{content:\""\\e648\""}.anticon-question:before{content:\""\\e649\""}.anticon-question-circle:before{content:\""\\e647\""}.anticon-pause-circle:before{content:\""\\e644\""}.anticon-pause:before{content:\""\\e646\""}.anticon-pause-circle-o:before{content:\""\\e645\""}.anticon-clock-circle:before{content:\""\\e642\""}.anticon-clock-circle-o:before{content:\""\\e643\""}.anticon-swap:before{content:\""\\e641\""}.anticon-swap-left:before{content:\""\\e63f\""}.anticon-swap-right:before{content:\""\\e640\""}.anticon-plus-circle:before{content:\""\\e63d\""}.anticon-plus:before{content:\""\\e63e\""}.anticon-plus-circle-o:before{content:\""\\e63c\""}.anticon-minus:before{content:\""\\e63b\""}.anticon-minus-circle-o:before{content:\""\\e63a\""}.anticon-minus-circle:before{content:\""\\e639\""}.anticon-plus-square:before{content:\""\\e6ae\""}.anticon-minus-square:before{content:\""\\e6ad\""}.anticon-info-circle-o:before{content:\""\\e638\""}.anticon-info-circle:before{content:\""\\e637\""}.anticon-info:before{content:\""\\e636\""}.anticon-exclamation-circle:before{content:\""\\e634\""}.anticon-exclamation-circle-o:before{content:\""\\e635\""}.anticon-exclamation:before{content:\""\\e633\""}.anticon-cross-circle:before{content:\""\\e631\""}.anticon-cross-circle-o:before{content:\""\\e632\""}.anticon-check-circle:before{content:\""\\e62f\""}.anticon-check-circle-o:before{content:\""\\e630\""}.anticon-cross:before{content:\""\\e62d\""}.anticon-check:before{content:\""\\e62e\""}.anticon-verticle-right:before{content:\""\\e62c\""}.anticon-verticle-left:before{content:\""\\e62b\""}.anticon-rollback:before{content:\""\\e62a\""}.anticon-enter:before{content:\""\\e6b6\""}.anticon-retweet:before{content:\""\\e627\""}.anticon-shrink:before{content:\""\\e628\""}.anticon-arrow-salt:before{content:\""\\e629\""}.anticon-reload:before{content:\""\\e626\""}.anticon-double-right:before{content:\""\\e625\""}.anticon-double-left:before{content:\""\\e624\""}.anticon-arrow-right:before{content:\""\\e621\""}.anticon-arrow-up:before{content:\""\\e622\""}.anticon-arrow-down:before{content:\""\\e623\""}.anticon-arrow-left:before{content:\""\\e620\""}.anticon-left:before{content:\""\\e601\""}.anticon-right:before{content:\""\\e600\""}.anticon-down:before{content:\""\\e603\""}.anticon-up:before{content:\""\\e602\""}.anticon-play-circle:before{content:\""\\e61e\""}.anticon-play-circle-o:before{content:\""\\e61f\""}.anticon-circle-left:before{content:\""\\e61b\""}.anticon-circle-up:before{content:\""\\e61c\""}.anticon-circle-down:before{content:\""\\e61d\""}.anticon-circle-right:before{content:\""\\e61a\""}.anticon-circle-o-right:before{content:\""\\e616\""}.anticon-circle-o-up:before{content:\""\\e618\""}.anticon-circle-o-down:before{content:\""\\e617\""}.anticon-circle-o-left:before{content:\""\\e619\""}.anticon-step-backward:before{content:\""\\e614\""}.anticon-step-forward:before{content:\""\\e615\""}.anticon-fast-backward:before{content:\""\\e613\""}.anticon-fast-forward:before{content:\""\\e612\""}.anticon-caret-left:before{content:\""\\e60f\""}.anticon-caret-right:before{content:\""\\e60a\""}.anticon-caret-down:before{content:\""\\e611\""}.anticon-caret-up:before{content:\""\\e610\""}.anticon-forward:before{content:\""\\e608\""}.anticon-backward:before{content:\""\\e609\""}.anticon-caret-circle-o-down:before{content:\""\\e60e\""}.anticon-caret-circle-o-right:before{content:\""\\e60d\""}.anticon-caret-circle-o-left:before{content:\""\\e60b\""}.anticon-caret-circle-left:before{content:\""\\e604\""}.anticon-caret-circle-right:before{content:\""\\e605\""}.anticon-caret-circle-up:before{content:\""\\e606\""}.anticon-caret-circle-down:before{content:\""\\e607\""}.anticon-qrcode:before{content:\""\\e6a5\""}.anticon-scan:before{content:\""\\e6af\""}.anticon-like:before{content:\""\\e6a3\""}.anticon-dislike:before{content:\""\\e6a2\""}.anticon-pay-circle:before{content:\""\\e6a8\""}.anticon-pay-circle-o:before{content:\""\\e6a9\""}.anticon-message:before{content:\""\\e6a4\""}.anticon-heart:before{content:\""\\e68c\""}.anticon-heart-o:before{content:\""\\e6b0\""}.anticon-calculator:before{content:\""\\e6b1\""}.anticon-pushpin:before{content:\""\\e6b5\""}.anticon-pushpin-o:before{content:\""\\e6b3\""}.anticon-loading:before{display:inline-block;animation:loadingCircle 1s infinite linear;content:\""\\e6a1\""}.fade-enter,.fade-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.fade-enter.fade-enter-active,.fade-appear.fade-appear-active{animation-name:antFadeIn;animation-play-state:running}.fade-leave.fade-leave-active{animation-name:antFadeOut;animation-play-state:running}.fade-enter,.fade-appear{opacity:0;animation-timing-function:linear}.fade-leave{animation-timing-function:linear}@keyframes antFadeIn{0%{opacity:0}100%{opacity:1}}@keyframes antFadeOut{0%{opacity:1}100%{opacity:0}}.move-up-enter,.move-up-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-up-enter.move-up-enter-active,.move-up-appear.move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running}.move-up-leave.move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running}.move-up-enter,.move-up-appear{opacity:0;animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.move-up-leave{animation-timing-function:cubic-bezier(.6, .04, .98, .34)}.move-down-enter,.move-down-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-down-enter.move-down-enter-active,.move-down-appear.move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running}.move-down-leave.move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running}.move-down-enter,.move-down-appear{opacity:0;animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.move-down-leave{animation-timing-function:cubic-bezier(.6, .04, .98, .34)}.move-left-enter,.move-left-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-left-enter.move-left-enter-active,.move-left-appear.move-left-appear-active{animation-name:antMoveLeftIn;animation-play-state:running}.move-left-leave.move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running}.move-left-enter,.move-left-appear{opacity:0;animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.move-left-leave{animation-timing-function:cubic-bezier(.6, .04, .98, .34)}.move-right-enter,.move-right-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-right-enter.move-right-enter-active,.move-right-appear.move-right-appear-active{animation-name:antMoveRightIn;animation-play-state:running}.move-right-leave.move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running}.move-right-enter,.move-right-appear{opacity:0;animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.move-right-leave{animation-timing-function:cubic-bezier(.6, .04, .98, .34)}@keyframes antMoveDownIn{0%{transform-origin:0 0;transform:translateY(100%);opacity:0}100%{transform-origin:0 0;transform:translateY(0);opacity:1}}@keyframes antMoveDownOut{0%{transform-origin:0 0;transform:translateY(0);opacity:1}100%{transform-origin:0 0;transform:translateY(100%);opacity:0}}@keyframes antMoveLeftIn{0%{transform-origin:0 0;transform:translateX(-100%);opacity:0}100%{transform-origin:0 0;transform:translateX(0);opacity:1}}@keyframes antMoveLeftOut{0%{transform-origin:0 0;transform:translateX(0);opacity:1}100%{transform-origin:0 0;transform:translateX(-100%);opacity:0}}@keyframes antMoveRightIn{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}100%{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes antMoveRightOut{0%{transform-origin:0 0;transform:translateX(0);opacity:1}100%{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes antMoveUpIn{0%{transform-origin:0 0;transform:translateY(-100%);opacity:0}100%{transform-origin:0 0;transform:translateY(0);opacity:1}}@keyframes antMoveUpOut{0%{transform-origin:0 0;transform:translateY(0);opacity:1}100%{transform-origin:0 0;transform:translateY(-100%);opacity:0}}@keyframes loadingCircle{0%{transform-origin:50% 50%;transform:rotate(0deg)}100%{transform-origin:50% 50%;transform:rotate(360deg)}}.slide-up-enter,.slide-up-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-up-enter.slide-up-enter-active,.slide-up-appear.slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running}.slide-up-leave.slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running}.slide-up-enter,.slide-up-appear{opacity:0;animation-timing-function:cubic-bezier(.23, 1, .32, 1)}.slide-up-leave{animation-timing-function:cubic-bezier(.755, .05, .855, .06)}.slide-down-enter,.slide-down-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-down-enter.slide-down-enter-active,.slide-down-appear.slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running}.slide-down-leave.slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running}.slide-down-enter,.slide-down-appear{opacity:0;animation-timing-function:cubic-bezier(.23, 1, .32, 1)}.slide-down-leave{animation-timing-function:cubic-bezier(.755, .05, .855, .06)}.slide-left-enter,.slide-left-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-left-enter.slide-left-enter-active,.slide-left-appear.slide-left-appear-active{animation-name:antSlideLeftIn;animation-play-state:running}.slide-left-leave.slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running}.slide-left-enter,.slide-left-appear{opacity:0;animation-timing-function:cubic-bezier(.23, 1, .32, 1)}.slide-left-leave{animation-timing-function:cubic-bezier(.755, .05, .855, .06)}.slide-right-enter,.slide-right-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-right-enter.slide-right-enter-active,.slide-right-appear.slide-right-appear-active{animation-name:antSlideRightIn;animation-play-state:running}.slide-right-leave.slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running}.slide-right-enter,.slide-right-appear{opacity:0;animation-timing-function:cubic-bezier(.23, 1, .32, 1)}.slide-right-leave{animation-timing-function:cubic-bezier(.755, .05, .855, .06)}@keyframes antSlideUpIn{0%{opacity:0;transform-origin:0 0;transform:scaleY(.8)}100%{opacity:1;transform-origin:0 0;transform:scaleY(1)}}@keyframes antSlideUpOut{0%{opacity:1;transform-origin:0 0;transform:scaleY(1)}100%{opacity:0;transform-origin:0 0;transform:scaleY(.8)}}@keyframes antSlideDownIn{0%{opacity:0;transform-origin:100% 100%;transform:scaleY(.8)}100%{opacity:1;transform-origin:100% 100%;transform:scaleY(1)}}@keyframes antSlideDownOut{0%{opacity:1;transform-origin:100% 100%;transform:scaleY(1)}100%{opacity:0;transform-origin:100% 100%;transform:scaleY(.8)}}@keyframes antSlideLeftIn{0%{opacity:0;transform-origin:0 0;transform:scaleX(.8)}100%{opacity:1;transform-origin:0 0;transform:scaleX(1)}}@keyframes antSlideLeftOut{0%{opacity:1;transform-origin:0 0;transform:scaleX(1)}100%{opacity:0;transform-origin:0 0;transform:scaleX(.8)}}@keyframes antSlideRightIn{0%{opacity:0;transform-origin:100% 0;transform:scaleX(.8)}100%{opacity:1;transform-origin:100% 0;transform:scaleX(1)}}@keyframes antSlideRightOut{0%{opacity:1;transform-origin:100% 0;transform:scaleX(1)}100%{opacity:0;transform-origin:100% 0;transform:scaleX(.8)}}.swing-enter,.swing-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.swing-enter.swing-enter-active,.swing-appear.swing-appear-active{animation-name:antSwingIn;animation-play-state:running}@keyframes antSwingIn{0%,100%{transform:translateX(0)}20%{transform:translateX(-10px)}40%{transform:translateX(10px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}.zoom-enter,.zoom-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-enter.zoom-enter-active,.zoom-appear.zoom-appear-active{animation-name:antZoomIn;animation-play-state:running}.zoom-leave.zoom-leave-active{animation-name:antZoomOut;animation-play-state:running}.zoom-enter,.zoom-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-big-enter,.zoom-big-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-enter.zoom-big-enter-active,.zoom-big-appear.zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running}.zoom-big-enter,.zoom-big-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-big-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-up-enter,.zoom-up-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-up-enter.zoom-up-enter-active,.zoom-up-appear.zoom-up-appear-active{animation-name:antZoomUpIn;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running}.zoom-up-enter,.zoom-up-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-up-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-down-enter,.zoom-down-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-down-enter.zoom-down-enter-active,.zoom-down-appear.zoom-down-appear-active{animation-name:antZoomDownIn;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running}.zoom-down-enter,.zoom-down-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-down-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-left-enter,.zoom-left-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-left-enter.zoom-left-enter-active,.zoom-left-appear.zoom-left-appear-active{animation-name:antZoomLeftIn;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running}.zoom-left-enter,.zoom-left-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-left-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-right-enter,.zoom-right-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-right-enter.zoom-right-enter-active,.zoom-right-appear.zoom-right-appear-active{animation-name:antZoomRightIn;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running}.zoom-right-enter,.zoom-right-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-right-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}@keyframes antZoomIn{0%{opacity:0;transform:scale(0)}100%{opacity:1;transform:scale(1)}}@keyframes antZoomOut{0%{transform:scale(1)}100%{opacity:0;transform:scale(0)}}@keyframes antZoomBigIn{0%{opacity:0;transform:scale(.8)}100%{transform:scale(1)}}@keyframes antZoomBigOut{0%{transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes antZoomUpIn{0%{opacity:0;transform-origin:50% 0;transform:scale(.8)}100%{transform-origin:50% 0;transform:scale(1)}}@keyframes antZoomUpOut{0%{transform-origin:50% 0;transform:scale(1)}100%{opacity:0;transform-origin:50% 0;transform:scale(.8)}}@keyframes antZoomLeftIn{0%{opacity:0;transform-origin:0 50%;transform:scale(.8)}100%{transform-origin:0 50%;transform:scale(1)}}@keyframes antZoomLeftOut{0%{transform-origin:0 50%;transform:scale(1)}100%{opacity:0;transform-origin:0 50%;transform:scale(.8)}}@keyframes antZoomRightIn{0%{opacity:0;transform-origin:100% 50%;transform:scale(.8)}100%{transform-origin:100% 50%;transform:scale(1)}}@keyframes antZoomRightOut{0%{transform-origin:100% 50%;transform:scale(1)}100%{opacity:0;transform-origin:100% 50%;transform:scale(.8)}}@keyframes antZoomDownIn{0%{opacity:0;transform-origin:50% 100%;transform:scale(.8)}100%{transform-origin:50% 100%;transform:scale(1)}}@keyframes antZoomDownOut{0%{transform-origin:50% 100%;transform:scale(1)}100%{opacity:0;transform-origin:50% 100%;transform:scale(.8)}}.ant-motion-collapse{overflow:hidden}.ant-motion-collapse-active{transition:height .2s cubic-bezier(.215, .61, .355, 1)}\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/index.less\n **/"",""/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Prevent adjustments of font size after orientation changes in IE and iOS.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n * 2. Add the correct display in IE.\n */\n\narticle,\naside,\ndetails, /* 1 */\nfigcaption,\nfigure,\nfooter,\nheader,\nmain, /* 2 */\nmenu,\nnav,\nsection,\nsummary { /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  vertical-align: baseline;\n}\n\n/**\n * Add the correct display in IE 10-.\n * 1. Add the correct display in IE.\n */\n\ntemplate, /* 1 */\n[hidden] {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent; /* 1 */\n  -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n  outline-width: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change font properties to `inherit` in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n  font: inherit; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Restore the font weight unset by the previous rule.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\""button\""], /* 1 */\n[type=\""reset\""],\n[type=\""submit\""] {\n  -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\""button\""]::-moz-focus-inner,\n[type=\""reset\""]::-moz-focus-inner,\n[type=\""submit\""]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\""button\""]:-moz-focusring,\n[type=\""reset\""]:-moz-focusring,\n[type=\""submit\""]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\""checkbox\""],\n[type=\""radio\""] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\""number\""]::-webkit-inner-spin-button,\n[type=\""number\""]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\""search\""] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.\n */\n\n[type=\""search\""]::-webkit-search-cancel-button,\n[type=\""search\""]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Correct the text style of placeholders in Chrome, Edge, and Safari.\n */\n\n::-webkit-input-placeholder {\n  color: inherit;\n  opacity: 0.54;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/normalize.less\n **/"",""@import \""./normalize.less\"";\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); //  remove tap highlight color for mobile safari\n}\n\n*:before,\n*:after {\n  box-sizing: border-box;\n}\n\n// HTML & Body reset\nhtml, body {\n  .square(100%);\n}\n\nbody {\n  font-family: @font-family;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-background;\n}\n\n// unify the setting of elements's margin and padding for browsers\nbody,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section {\n  margin: 0;\n  padding: 0;\n}\n\n// Reset fonts for relevant elements\nbutton,input,select,textarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n  color: inherit;\n}\n\nul,\nol {\n  list-style: none;\n}\n\n// Remove the clear button of a text input control in IE10+\ninput::-ms-clear, input::-ms-reveal {\n  display: none;\n}\n\n::selection {\n  background: @primary-color;\n  color: #fff;\n}\n\n// Links\na {\n  color: @link-color;\n  background: transparent;\n  text-decoration: none;\n  outline: none;\n  cursor: pointer;\n  transition: color .3s ease;\n\n  &:hover {\n    color: @link-hover-color;\n  }\n\n  &:active {\n    color: @link-active-color;\n  }\n\n  &:active,\n  &:hover {\n    outline: 0;\n    text-decoration: none;\n  }\n\n  &[disabled] {\n    color: #ccc;\n    cursor: not-allowed;\n    pointer-events: none;\n  }\n}\n\n// Utility classes\n.clearfix {\n  .clearfix();\n}\n.pull-left {\n  float: left;\n}\n.pull-right {\n  float: right;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n\n.ant-divider {\n  margin: 0 4px;\n  color: #999;\n  display: inline-block;\n  height: 8px;\n  width: 1px;\n  background: #ccc;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: @code-family;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/base.less\n **/"",""// Sizing shortcuts\n\n.size(@width; @height) {\n  width: @width;\n  height: @height;\n}\n\n.square(@size) {\n  .size(@size; @size);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/size.less\n **/"",""// mixins for clearfix\n// ------------------------\n.clearfix() {\n  zoom: 1;\n  &:before,\n  &:after {\n    content: \"" \"";\n    display: table;\n  }\n  &:after {\n    clear: both;\n    visibility: hidden;\n    font-size: 0;\n    height: 0;\n  }\n}\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/clearfix.less\n **/"",""// font-face\n// @icon-url： 字体源文件的地址\n@font-face {\n  font-family: 'anticon';\n  src: url('@{icon-url}.eot'); /* IE9*/\n  src: url('@{icon-url}.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n  url('@{icon-url}.woff') format('woff'), /* chrome、firefox */\n  url('@{icon-url}.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/\n  url('@{icon-url}.svg#iconfont') format('svg'); /* iOS 4.1- */\n}\n\n.@{iconfont-css-prefix} {\n .iconfont-mixin();\n}\n\n.@{iconfont-css-prefix}-caret-circle-o-up:before        {content:\""\\e60c\"";}\n.@{iconfont-css-prefix}-android:before                  {content:\""\\e64f\"";}\n.@{iconfont-css-prefix}-chrome:before                   {content:\""\\e65c\"";}\n.@{iconfont-css-prefix}-appstore-o:before               {content:\""\\e6b2\"";}\n.@{iconfont-css-prefix}-appstore:before                 {content:\""\\e64d\"";}\n.@{iconfont-css-prefix}-apple:before                    {content:\""\\e64e\"";}\n.@{iconfont-css-prefix}-github:before                   {content:\""\\e674\"";}\n.@{iconfont-css-prefix}-inbox:before                    {content:\""\\e67b\"";}\n.@{iconfont-css-prefix}-ie:before                       {content:\""\\e67c\"";}\n.@{iconfont-css-prefix}-smile:before                    {content:\""\\e677\"";}\n.@{iconfont-css-prefix}-smile-circle:before             {content:\""\\e676\"";}\n.@{iconfont-css-prefix}-meh-circle:before               {content:\""\\e678\"";}\n.@{iconfont-css-prefix}-frown:before                    {content:\""\\e673\"";}\n.@{iconfont-css-prefix}-frown-circle:before             {content:\""\\e672\"";}\n.@{iconfont-css-prefix}-meh:before                      {content:\""\\e679\"";}\n.@{iconfont-css-prefix}-pie-chart:before                {content:\""\\e68a\"";}\n.@{iconfont-css-prefix}-tags:before                     {content:\""\\e656\"";}\n.@{iconfont-css-prefix}-tags-o:before                   {content:\""\\e657\"";}\n.@{iconfont-css-prefix}-tag:before                      {content:\""\\e658\"";}\n.@{iconfont-css-prefix}-tag-o:before                    {content:\""\\e659\"";}\n.@{iconfont-css-prefix}-cloud:before                    {content:\""\\e65a\"";}\n.@{iconfont-css-prefix}-cloud-upload-o:before           {content:\""\\e697\"";}\n.@{iconfont-css-prefix}-cloud-download-o:before         {content:\""\\e698\"";}\n.@{iconfont-css-prefix}-cloud-upload:before             {content:\""\\e696\"";}\n.@{iconfont-css-prefix}-cloud-o:before                  {content:\""\\e699\"";}\n.@{iconfont-css-prefix}-cloud-download:before           {content:\""\\e65b\"";}\n.@{iconfont-css-prefix}-star-o:before                   {content:\""\\e693\"";}\n.@{iconfont-css-prefix}-star:before                     {content:\""\\e694\"";}\n.@{iconfont-css-prefix}-environment:before              {content:\""\\e665\"";}\n.@{iconfont-css-prefix}-environment-o:before            {content:\""\\e666\"";}\n.@{iconfont-css-prefix}-eye:before                      {content:\""\\e66e\"";}\n.@{iconfont-css-prefix}-eye-o:before                    {content:\""\\e66d\"";}\n.@{iconfont-css-prefix}-camera:before                   {content:\""\\e653\"";}\n.@{iconfont-css-prefix}-camera-o:before                 {content:\""\\e652\"";}\n.@{iconfont-css-prefix}-aliwangwang:before              {content:\""\\e64b\"";}\n.@{iconfont-css-prefix}-aliwangwang-o:before            {content:\""\\e64a\"";}\n.@{iconfont-css-prefix}-windows:before                  {content:\""\\e6a0\"";}\n.@{iconfont-css-prefix}-shopping-cart:before            {content:\""\\e692\"";}\n.@{iconfont-css-prefix}-unlock:before                   {content:\""\\e69f\"";}\n.@{iconfont-css-prefix}-lock:before                     {content:\""\\e69d\"";}\n.@{iconfont-css-prefix}-save:before                     {content:\""\\e69e\"";}\n.@{iconfont-css-prefix}-user:before                     {content:\""\\e69c\"";}\n.@{iconfont-css-prefix}-video-camera:before             {content:\""\\e69b\"";}\n.@{iconfont-css-prefix}-to-top:before                   {content:\""\\e69a\"";}\n.@{iconfont-css-prefix}-team:before                     {content:\""\\e680\"";}\n.@{iconfont-css-prefix}-tablet:before                   {content:\""\\e695\"";}\n.@{iconfont-css-prefix}-solution:before                 {content:\""\\e68f\"";}\n.@{iconfont-css-prefix}-poweroff:before                 {content:\""\\e691\"";}\n.@{iconfont-css-prefix}-search:before                   {content:\""\\e690\"";}\n.@{iconfont-css-prefix}-share-alt:before                {content:\""\\e68e\"";}\n.@{iconfont-css-prefix}-setting:before                  {content:\""\\e68d\"";}\n.@{iconfont-css-prefix}-poweroff:before                 {content:\""\\e68b\"";}\n.@{iconfont-css-prefix}-picture:before                  {content:\""\\e689\"";}\n.@{iconfont-css-prefix}-phone:before                    {content:\""\\e688\"";}\n.@{iconfont-css-prefix}-paper-clip:before               {content:\""\\e687\"";}\n.@{iconfont-css-prefix}-notification:before             {content:\""\\e686\"";}\n.@{iconfont-css-prefix}-mobile:before                   {content:\""\\e685\"";}\n.@{iconfont-css-prefix}-menu-fold:before                {content:\""\\e684\"";}\n.@{iconfont-css-prefix}-menu-unfold:before              {content:\""\\e683\"";}\n.@{iconfont-css-prefix}-mail:before                     {content:\""\\e682\"";}\n.@{iconfont-css-prefix}-logout:before                   {content:\""\\e681\"";}\n.@{iconfont-css-prefix}-link:before                     {content:\""\\e67e\"";}\n.@{iconfont-css-prefix}-line-chart:before               {content:\""\\e67f\"";}\n.@{iconfont-css-prefix}-home:before                     {content:\""\\e67d\"";}\n.@{iconfont-css-prefix}-laptop:before                   {content:\""\\e67a\"";}\n.@{iconfont-css-prefix}-hdd:before                      {content:\""\\e675\"";}\n.@{iconfont-css-prefix}-folder-open:before              {content:\""\\e671\"";}\n.@{iconfont-css-prefix}-folder:before                   {content:\""\\e670\"";}\n.@{iconfont-css-prefix}-filter:before                   {content:\""\\e66f\"";}\n.@{iconfont-css-prefix}-file-text:before                {content:\""\\e66c\"";}\n.@{iconfont-css-prefix}-file:before                     {content:\""\\e66b\"";}\n.@{iconfont-css-prefix}-file-unknown:before             {content:\""\\e6a6\"";}\n.@{iconfont-css-prefix}-file-excel:before               {content:\""\\e6ac\"";}\n.@{iconfont-css-prefix}-file-pdf:before                 {content:\""\\e6ab\"";}\n.@{iconfont-css-prefix}-file-jpg:before                 {content:\""\\e6aa\"";}\n.@{iconfont-css-prefix}-file-ppt:before                 {content:\""\\e6a7\"";}\n.@{iconfont-css-prefix}-exception:before                {content:\""\\e66a\"";}\n.@{iconfont-css-prefix}-export:before                   {content:\""\\e669\"";}\n.@{iconfont-css-prefix}-desktop:before                  {content:\""\\e662\"";}\n.@{iconfont-css-prefix}-edit:before                     {content:\""\\e668\"";}\n.@{iconfont-css-prefix}-ellipsis:before                 {content:\""\\e667\"";}\n.@{iconfont-css-prefix}-upload:before                   {content:\""\\e664\"";}\n.@{iconfont-css-prefix}-download:before                 {content:\""\\e663\"";}\n.@{iconfont-css-prefix}-delete:before                   {content:\""\\e661\"";}\n.@{iconfont-css-prefix}-copy:before                     {content:\""\\e660\"";}\n.@{iconfont-css-prefix}-customerservice:before          {content:\""\\e65e\"";}\n.@{iconfont-css-prefix}-credit-card:before              {content:\""\\e65f\"";}\n.@{iconfont-css-prefix}-code:before                     {content:\""\\e65d\"";}\n.@{iconfont-css-prefix}-calendar:before                 {content:\""\\e654\"";}\n.@{iconfont-css-prefix}-book:before                     {content:\""\\e655\"";}\n.@{iconfont-css-prefix}-bars:before                     {content:\""\\e650\"";}\n.@{iconfont-css-prefix}-bar-chart:before                {content:\""\\e651\"";}\n.@{iconfont-css-prefix}-area-chart:before               {content:\""\\e64c\"";}\n.@{iconfont-css-prefix}-question-circle-o:before        {content:\""\\e648\"";}\n.@{iconfont-css-prefix}-question:before                 {content:\""\\e649\"";}\n.@{iconfont-css-prefix}-question-circle:before          {content:\""\\e647\"";}\n.@{iconfont-css-prefix}-pause-circle:before             {content:\""\\e644\"";}\n.@{iconfont-css-prefix}-pause:before                    {content:\""\\e646\"";}\n.@{iconfont-css-prefix}-pause-circle-o:before           {content:\""\\e645\"";}\n.@{iconfont-css-prefix}-clock-circle:before             {content:\""\\e642\"";}\n.@{iconfont-css-prefix}-clock-circle-o:before           {content:\""\\e643\"";}\n.@{iconfont-css-prefix}-swap:before                     {content:\""\\e641\"";}\n.@{iconfont-css-prefix}-swap-left:before                {content:\""\\e63f\"";}\n.@{iconfont-css-prefix}-swap-right:before               {content:\""\\e640\"";}\n.@{iconfont-css-prefix}-plus-circle:before              {content:\""\\e63d\"";}\n.@{iconfont-css-prefix}-plus:before                     {content:\""\\e63e\"";}\n.@{iconfont-css-prefix}-plus-circle-o:before            {content:\""\\e63c\"";}\n.@{iconfont-css-prefix}-minus:before                    {content:\""\\e63b\"";}\n.@{iconfont-css-prefix}-minus-circle-o:before           {content:\""\\e63a\"";}\n.@{iconfont-css-prefix}-minus-circle:before             {content:\""\\e639\"";}\n.@{iconfont-css-prefix}-plus-square:before              {content:\""\\e6ae\"";}\n.@{iconfont-css-prefix}-minus-square:before             {content:\""\\e6ad\"";}\n.@{iconfont-css-prefix}-info-circle-o:before            {content:\""\\e638\"";}\n.@{iconfont-css-prefix}-info-circle:before              {content:\""\\e637\"";}\n.@{iconfont-css-prefix}-info:before                     {content:\""\\e636\"";}\n.@{iconfont-css-prefix}-exclamation-circle:before       {content:\""\\e634\"";}\n.@{iconfont-css-prefix}-exclamation-circle-o:before     {content:\""\\e635\"";}\n.@{iconfont-css-prefix}-exclamation:before              {content:\""\\e633\"";}\n.@{iconfont-css-prefix}-cross-circle:before             {content:\""\\e631\"";}\n.@{iconfont-css-prefix}-cross-circle-o:before           {content:\""\\e632\"";}\n.@{iconfont-css-prefix}-check-circle:before             {content:\""\\e62f\"";}\n.@{iconfont-css-prefix}-check-circle-o:before           {content:\""\\e630\"";}\n.@{iconfont-css-prefix}-cross:before                    {content:\""\\e62d\"";}\n.@{iconfont-css-prefix}-check:before                    {content:\""\\e62e\"";}\n.@{iconfont-css-prefix}-verticle-right:before           {content:\""\\e62c\"";}\n.@{iconfont-css-prefix}-verticle-left:before            {content:\""\\e62b\"";}\n.@{iconfont-css-prefix}-rollback:before                 {content:\""\\e62a\"";}\n.@{iconfont-css-prefix}-enter:before                    {content:\""\\e6b6\"";}\n.@{iconfont-css-prefix}-retweet:before                  {content:\""\\e627\"";}\n.@{iconfont-css-prefix}-shrink:before                   {content:\""\\e628\"";}\n.@{iconfont-css-prefix}-arrow-salt:before               {content:\""\\e629\"";}\n.@{iconfont-css-prefix}-reload:before                   {content:\""\\e626\"";}\n.@{iconfont-css-prefix}-double-right:before             {content:\""\\e625\"";}\n.@{iconfont-css-prefix}-double-left:before              {content:\""\\e624\"";}\n.@{iconfont-css-prefix}-arrow-right:before              {content:\""\\e621\"";}\n.@{iconfont-css-prefix}-arrow-up:before                 {content:\""\\e622\"";}\n.@{iconfont-css-prefix}-arrow-down:before               {content:\""\\e623\"";}\n.@{iconfont-css-prefix}-arrow-left:before               {content:\""\\e620\"";}\n.@{iconfont-css-prefix}-left:before                     {content:\""\\e601\"";}\n.@{iconfont-css-prefix}-right:before                    {content:\""\\e600\"";}\n.@{iconfont-css-prefix}-down:before                     {content:\""\\e603\"";}\n.@{iconfont-css-prefix}-up:before                       {content:\""\\e602\"";}\n.@{iconfont-css-prefix}-play-circle:before              {content:\""\\e61e\"";}\n.@{iconfont-css-prefix}-play-circle-o:before            {content:\""\\e61f\"";}\n.@{iconfont-css-prefix}-circle-left:before              {content:\""\\e61b\"";}\n.@{iconfont-css-prefix}-circle-up:before                {content:\""\\e61c\"";}\n.@{iconfont-css-prefix}-circle-down:before              {content:\""\\e61d\"";}\n.@{iconfont-css-prefix}-circle-right:before             {content:\""\\e61a\"";}\n.@{iconfont-css-prefix}-circle-o-right:before           {content:\""\\e616\"";}\n.@{iconfont-css-prefix}-circle-o-up:before              {content:\""\\e618\"";}\n.@{iconfont-css-prefix}-circle-o-down:before            {content:\""\\e617\"";}\n.@{iconfont-css-prefix}-circle-o-left:before            {content:\""\\e619\"";}\n.@{iconfont-css-prefix}-step-backward:before            {content:\""\\e614\"";}\n.@{iconfont-css-prefix}-step-forward:before             {content:\""\\e615\"";}\n.@{iconfont-css-prefix}-fast-backward:before            {content:\""\\e613\"";}\n.@{iconfont-css-prefix}-fast-forward:before             {content:\""\\e612\"";}\n.@{iconfont-css-prefix}-caret-left:before               {content:\""\\e60f\"";}\n.@{iconfont-css-prefix}-caret-right:before              {content:\""\\e60a\"";}\n.@{iconfont-css-prefix}-caret-down:before               {content:\""\\e611\"";}\n.@{iconfont-css-prefix}-caret-up:before                 {content:\""\\e610\"";}\n.@{iconfont-css-prefix}-forward:before                  {content:\""\\e608\"";}\n.@{iconfont-css-prefix}-backward:before                 {content:\""\\e609\"";}\n.@{iconfont-css-prefix}-caret-circle-o-down:before      {content:\""\\e60e\"";}\n.@{iconfont-css-prefix}-caret-circle-o-right:before     {content:\""\\e60d\"";}\n.@{iconfont-css-prefix}-caret-circle-o-left:before      {content:\""\\e60b\"";}\n.@{iconfont-css-prefix}-caret-circle-left:before        {content:\""\\e604\"";}\n.@{iconfont-css-prefix}-caret-circle-right:before       {content:\""\\e605\"";}\n.@{iconfont-css-prefix}-caret-circle-up:before          {content:\""\\e606\"";}\n.@{iconfont-css-prefix}-caret-circle-down:before        {content:\""\\e607\"";}\n.@{iconfont-css-prefix}-qrcode:before                   {content:\""\\e6a5\"";}\n.@{iconfont-css-prefix}-scan:before                     {content:\""\\e6af\"";}\n.@{iconfont-css-prefix}-like:before                     {content:\""\\e6a3\"";}\n.@{iconfont-css-prefix}-dislike:before                  {content:\""\\e6a2\"";}\n.@{iconfont-css-prefix}-pay-circle:before               {content:\""\\e6a8\"";}\n.@{iconfont-css-prefix}-pay-circle-o:before             {content:\""\\e6a9\"";}\n.@{iconfont-css-prefix}-message:before                  {content:\""\\e6a4\"";}\n.@{iconfont-css-prefix}-heart:before                    {content:\""\\e68c\"";}\n.@{iconfont-css-prefix}-heart-o:before                  {content:\""\\e6b0\"";}\n.@{iconfont-css-prefix}-calculator:before               {content:\""\\e6b1\"";}\n.@{iconfont-css-prefix}-pushpin:before                  {content:\""\\e6b5\"";}\n.@{iconfont-css-prefix}-pushpin-o:before                {content:\""\\e6b3\"";}\n.@{iconfont-css-prefix}-loading:before {\n  display: inline-block;\n  animation: loadingCircle 1s infinite linear;\n  content:\""\\e6a1\"";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/iconfont.less\n **/"","".iconfont-mixin() {\n  display: inline-block;\n  font-style: normal;\n  vertical-align: baseline;\n  text-align: center;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  &:before {\n    display: block;\n    font-family: \""anticon\"" !important;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/iconfont.less\n **/"","".motion-common() {\n  animation-duration: .2s;\n  animation-fill-mode: both;\n}\n\n.motion-common-leave() {\n  animation-duration: .2s;\n  animation-fill-mode: both;\n}\n\n.make-motion(@className, @keyframeName) {\n  .@{className}-enter,\n  .@{className}-appear {\n    .motion-common();\n    animation-play-state: paused;\n  }\n  .@{className}-leave {\n    .motion-common-leave();\n    animation-play-state: paused;\n  }\n  .@{className}-enter.@{className}-enter-active,\n  .@{className}-appear.@{className}-appear-active {\n    animation-name: ~\""@{keyframeName}In\"";\n    animation-play-state: running;\n  }\n  .@{className}-leave.@{className}-leave-active {\n    animation-name: ~\""@{keyframeName}Out\"";\n    animation-play-state: running;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/motion.less\n **/"","".fade-motion(@className, @keyframeName) {\n  .make-motion(@className, @keyframeName);\n  .@{className}-enter,\n  .@{className}-appear {\n    opacity: 0;\n    animation-timing-function: linear;\n  }\n  .@{className}-leave {\n    animation-timing-function: linear;\n  }\n}\n\n.fade-motion(fade, antFade);\n\n@keyframes antFadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes antFadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/fade.less\n **/"","".move-motion(@className, @keyframeName) {\n  .make-motion(@className, @keyframeName);\n  .@{className}-enter,\n  .@{className}-appear {\n    opacity: 0;\n    animation-timing-function: @ease-out-circ;\n  }\n  .@{className}-leave {\n    animation-timing-function: @ease-in-circ;\n  }\n}\n\n.move-motion(move-up, antMoveUp);\n.move-motion(move-down, antMoveDown);\n.move-motion(move-left, antMoveLeft);\n.move-motion(move-right, antMoveRight);\n\n@keyframes antMoveDownIn {\n  0% {\n    transform-origin: 0 0;\n    transform: translateY(100%);\n    opacity: 0;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n\n@keyframes antMoveDownOut {\n  0% {\n    transform-origin: 0 0;\n    transform: translateY(0%);\n    opacity: 1;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateY(100%);\n    opacity: 0;\n  }\n}\n\n@keyframes antMoveLeftIn {\n  0% {\n    transform-origin: 0 0;\n    transform: translateX(-100%);\n    opacity: 0;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateX(0%);\n    opacity: 1;\n  }\n}\n\n@keyframes antMoveLeftOut {\n  0% {\n    transform-origin: 0 0;\n    transform: translateX(0%);\n    opacity: 1;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateX(-100%);\n    opacity: 0;\n  }\n}\n\n@keyframes antMoveRightIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0 0;\n    transform: translateX(100%);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 0 0;\n    transform: translateX(0%);\n  }\n}\n\n@keyframes antMoveRightOut {\n  0% {\n    transform-origin: 0 0;\n    transform: translateX(0%);\n    opacity: 1;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateX(100%);\n    opacity: 0;\n  }\n}\n\n@keyframes antMoveUpIn {\n  0% {\n    transform-origin: 0 0;\n    transform: translateY(-100%);\n    opacity: 0;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n\n@keyframes antMoveUpOut {\n  0% {\n    transform-origin: 0 0;\n    transform: translateY(0%);\n    opacity: 1;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateY(-100%);\n    opacity: 0;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/move.less\n **/"",""// Color\n@primary-color          : #2db7f5;\n@info-color             : #2db7f5;\n@success-color          : #87d068;\n@error-color            : #f50;\n@warning-color          : #fa0;\n\n// ------ Base & Require ------\n@body-background        : #fff;\n\n@font-family            : \""Helvetica Neue\"",Helvetica,\""PingFang SC\"",\""Hiragino Sans GB\"",\""Microsoft YaHei\"",\""微软雅黑\"",Arial,sans-serif;\n@code-family            : Consolas,Menlo,Courier,monospace;\n@text-color             : #666;\n@font-size-base         : 12px;\n@line-height-base       : 1.5;\n@line-height-computed   : floor((@font-size-base * @line-height-base));\n@border-radius-base     : 6px;\n@border-radius-sm       : 4px;\n\n// ICONFONT\n@iconfont-css-prefix    : anticon;\n@icon-url               : \""https://at.alicdn.com/t/font_1463992151_360388\"";\n\n// LINK\n@link-color             : #2db7f5;\n@link-hover-color       : tint(@link-color, 20%);\n@link-active-color      : shade(@link-color, 5%);\n@link-hover-decoration  : none;\n\n// Disabled cursor for form controls and buttons.\n@cursor-disabled        : not-allowed;\n\n// Animation\n@ease-out            : cubic-bezier(0.215, 0.61, 0.355, 1);\n@ease-in             : cubic-bezier(0.55, 0.055, 0.675, 0.19);\n@ease-in-out         : cubic-bezier(0.645, 0.045, 0.355, 1);\n@ease-out-back       : cubic-bezier(0.12, 0.4, 0.29, 1.46);\n@ease-in-back        : cubic-bezier(0.71, -0.46, 0.88, 0.6);\n@ease-in-out-back    : cubic-bezier(0.71, -0.46, 0.29, 1.46);\n@ease-out-circ       : cubic-bezier(0.08, 0.82, 0.17, 1);\n@ease-in-circ        : cubic-bezier(0.6, 0.04, 0.98, 0.34);\n@ease-in-out-circ    : cubic-bezier(0.78, 0.14, 0.15, 0.86);\n@ease-out-quint      : cubic-bezier(0.23, 1, 0.32, 1);\n@ease-in-quint       : cubic-bezier(0.755, 0.05, 0.855, 0.06);\n@ease-in-out-quint   : cubic-bezier(0.86, 0, 0.07, 1);\n\n// Border color\n@border-color-base      : #d9d9d9;        // base border outline a component\n@border-color-split     : #e9e9e9;        // split border inside a component\n\n// Shadow\n@shadow-color           : rgba(100, 100, 100, .2);\n@box-shadow-base        : @shadow-1-down;\n@shadow-1-up            : 0 -1px 6px @shadow-color;\n@shadow-1-down          : 0 1px 6px @shadow-color;\n@shadow-1-left          : -1px 0 6px @shadow-color;\n@shadow-1-right         : 1px 0 6px @shadow-color;\n@shadow-2               : 0 1px 8px @shadow-color;\n\n// Buttons\n@btn-font-weight        : 500;\n\n@btn-primary-color      : #fff;\n@btn-primary-bg         : @primary-color;\n@btn-group-border       : shade(@primary-color, 5%);\n\n@btn-default-color      : @text-color;\n@btn-default-bg         : #f7f7f7;\n@btn-default-border     : @border-color-base;\n\n@btn-ghost-color        : @text-color;\n@btn-ghost-bg           : transparent;\n@btn-ghost-border       : @border-color-base;\n\n@btn-disable-color      : #ccc;\n@btn-disable-bg         : #f7f7f7;\n@btn-disable-border     : @border-color-base;\n\n@btn-padding-base       : 4px 15px;\n\n@btn-font-size-lg       : 14px;\n@btn-padding-lg         : 4px 15px 5px 15px;\n\n@btn-padding-sm         : 1px 7px;\n\n@btn-circle-size        : 28px;\n@btn-circle-size-lg     : 32px;\n@btn-circle-size-sm     : 22px;\n\n// Media queries breakpoints\n// Extra small screen / phone\n@screen-xs              : 480px;\n@screen-xs-min          : @screen-xs;\n@screen-xs-max          : (@screen-xs-min - 1);\n\n// Small screen / tablet\n@screen-sm              : 768px;\n@screen-sm-min          : @screen-sm;\n@screen-sm-max          : (@screen-sm-min - 1);\n\n// Medium screen / desktop\n@screen-md              : 992px;\n@screen-md-min          : @screen-md;\n@screen-md-max          : (@screen-md-min - 1);\n\n// Large screen / wide desktop\n@screen-lg              : 1200px;\n@screen-lg-min          : @screen-lg;\n@screen-lg-max          : (@screen-lg-min - 1);\n\n// Layout and Grid system\n@grid-columns           : 24;\n@grid-gutter-width      : 0;\n\n// Container sizes\n@container-sm           : (720px + @grid-gutter-width);\n@container-md           : (940px + @grid-gutter-width);\n@container-lg           : (1140px + @grid-gutter-width);\n\n// z-index list\n@zindex-affix           : 10;\n@zindex-back-top        : 10;\n@zindex-modal-mask      : 1000;\n@zindex-modal           : 1000;\n@zindex-notification    : 1010;\n@zindex-message         : 1010;\n@zindex-popover         : 1030;\n@zindex-picker          : 1050;\n@zindex-dropdown        : 1050;\n@zindex-tooltip         : 1060;\n\n// Form\n// --------------------------------\n// Legend\n@legend-color                : #999;\n@legend-border-color         : @border-color-base;\n// Label\n@label-required-color        : #f50;\n@label-color                 : @text-color;\n// Input\n@input-height-base: 28px;\n@input-height-lg: 32px;\n@input-height-sm: 22px;\n\n@input-padding-horizontal    : 7px;\n@input-padding-vertical-base : 4px;\n@input-padding-vertical-sm   : 1px;\n@input-padding-vertical-lg   : 6px;\n\n@input-placeholder-color     : #ccc;\n@input-color                 : @text-color;\n@input-border-color          : @border-color-base;\n@input-bg                    : #fff;\n\n@input-hover-border-color    : @primary-color;\n@input-focus-border-color    : @primary-color;\n@input-disabled-bg           : #f7f7f7;\n\n@form-item-margin-bottom     : 24px;\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/themes/default.less\n **/"",""@keyframes loadingCircle {\n  0% {\n    transform-origin: 50% 50%;\n    transform: rotate(0deg);\n  }\n  100% {\n    transform-origin: 50% 50%;\n    transform: rotate(360deg);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/other.less\n **/"","".slide-motion(@className, @keyframeName) {\n  .make-motion(@className, @keyframeName);\n  .@{className}-enter,\n  .@{className}-appear {\n    opacity: 0;\n    animation-timing-function: @ease-out-quint;\n  }\n  .@{className}-leave {\n    animation-timing-function: @ease-in-quint;\n  }\n}\n\n.slide-motion(slide-up, antSlideUp);\n.slide-motion(slide-down, antSlideDown);\n.slide-motion(slide-left, antSlideLeft);\n.slide-motion(slide-right, antSlideRight);\n\n@keyframes antSlideUpIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleY(.8);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleY(1);\n  }\n}\n\n@keyframes antSlideUpOut {\n  0% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleY(.8);\n  }\n}\n\n@keyframes antSlideDownIn {\n  0% {\n    opacity: 0;\n    transform-origin: 100% 100%;\n    transform: scaleY(.8);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 100% 100%;\n    transform: scaleY(1);\n  }\n}\n\n@keyframes antSlideDownOut {\n  0% {\n    opacity: 1;\n    transform-origin: 100% 100%;\n    transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 100% 100%;\n    transform: scaleY(.8);\n  }\n}\n\n@keyframes antSlideLeftIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleX(.8);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleX(1);\n  }\n}\n\n@keyframes antSlideLeftOut {\n  0% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleX(.8);\n  }\n}\n\n@keyframes antSlideRightIn {\n  0% {\n    opacity: 0;\n    transform-origin: 100% 0%;\n    transform: scaleX(.8);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 100% 0%;\n    transform: scaleX(1);\n  }\n}\n\n@keyframes antSlideRightOut {\n  0% {\n    opacity: 1;\n    transform-origin: 100% 0%;\n    transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 100% 0%;\n    transform: scaleX(.8);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/slide.less\n **/"","".swing-motion(@className, @keyframeName) {\n  .@{className}-enter,\n  .@{className}-appear {\n    .motion-common();\n    animation-play-state: paused;\n  }\n  .@{className}-enter.@{className}-enter-active,\n  .@{className}-appear.@{className}-appear-active {\n    animation-name: ~\""@{keyframeName}In\"";\n    animation-play-state: running;\n  }\n}\n\n.swing-motion(swing, antSwing);\n\n@keyframes antSwingIn {\n  0%,\n  100% {\n    transform: translateX(0px);\n  }\n  20% {\n    transform: translateX(-10px);\n  }\n  40% {\n    transform: translateX(10px);\n  }\n  60% {\n    transform: translateX(-5px);\n  }\n  80% {\n    transform: translateX(5px);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/swing.less\n **/"","".zoom-motion(@className, @keyframeName) {\n  .make-motion(@className, @keyframeName);\n  .@{className}-enter,\n  .@{className}-appear {\n    transform: scale(0); // need this by yiminghe\n    animation-timing-function: @ease-out-circ;\n  }\n  .@{className}-leave {\n    animation-timing-function: @ease-in-out-circ;\n  }\n}\n\n.zoom-motion(zoom, antZoom);\n.zoom-motion(zoom-big, antZoomBig);\n.zoom-motion(zoom-up, antZoomUp);\n.zoom-motion(zoom-down, antZoomDown);\n.zoom-motion(zoom-left, antZoomLeft);\n.zoom-motion(zoom-right, antZoomRight);\n\n@keyframes antZoomIn {\n  0% {\n    opacity: 0;\n    transform: scale(0);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomOut {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(0);\n  }\n}\n\n@keyframes antZoomBigIn {\n  0% {\n    opacity: 0;\n    transform: scale(.8);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomBigOut {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(.8);\n  }\n}\n\n@keyframes antZoomUpIn {\n  0% {\n    opacity: 0;\n    transform-origin: 50% 0%;\n    transform: scale(.8);\n  }\n  100% {\n    transform-origin: 50% 0%;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomUpOut {\n  0% {\n    transform-origin: 50% 0%;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 50% 0%;\n    transform: scale(.8);\n  }\n}\n\n@keyframes antZoomLeftIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0% 50%;\n    transform: scale(.8);\n  }\n  100% {\n    transform-origin: 0% 50%;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomLeftOut {\n  0% {\n    transform-origin: 0% 50%;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 0% 50%;\n    transform: scale(.8);\n  }\n}\n\n@keyframes antZoomRightIn {\n  0% {\n    opacity: 0;\n    transform-origin: 100% 50%;\n    transform: scale(.8);\n  }\n  100% {\n    transform-origin: 100% 50%;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomRightOut {\n  0% {\n    transform-origin: 100% 50%;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 100% 50%;\n    transform: scale(.8);\n  }\n}\n\n@keyframes antZoomDownIn {\n  0% {\n    opacity: 0;\n    transform-origin: 50% 100%;\n    transform: scale(.8);\n  }\n  100% {\n    transform-origin: 50% 100%;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomDownOut {\n  0% {\n    transform-origin: 50% 100%;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 50% 100%;\n    transform: scale(.8);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/zoom.less\n **/"",""@import \""../mixins/motion\"";\n@import \""motion/fade\"";\n@import \""motion/move\"";\n@import \""motion/other\"";\n@import \""motion/slide\"";\n@import \""motion/swing\"";\n@import \""motion/zoom\"";\n\n// For common/openAnimation\n.ant-motion-collapse {\n  overflow: hidden;\n  &-active {\n    transition: height .2s @ease-out;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion.less\n **/"",""@import \""../../style/themes/default\"";\n\n.ant-affix {\n  position: fixed;\n  z-index: @zindex-affix;\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/affix/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@alert-prefix-cls: ant-alert;\n\n.@{alert-prefix-cls} {\n  position: relative;\n  padding: 8px 8px 8px 16px;\n  border-radius: @border-radius-base;\n  color: @text-color;\n  font-size: 12px;\n  line-height: 16px;\n  margin-bottom: 10px;\n\n  &-icon {\n    margin-right: 8px;\n    font-size: 14px;\n    top: 1px;\n    position: relative;\n  }\n\n  &-description {\n    font-size: 12px;\n    color: @legend-color;\n    line-height: 21px;\n    display: none;\n  }\n\n  &-success {\n    border: 1px solid tint(@success-color, 80%);\n    background-color: tint(@success-color, 90%);\n    .@{alert-prefix-cls}-icon {\n      color: @success-color;\n    }\n  }\n\n  &-info {\n    border: 1px solid tint(@primary-color, 80%);\n    background-color: tint(@primary-color, 90%);\n    .@{alert-prefix-cls}-icon {\n      color: @primary-color;\n    }\n  }\n\n  &-warning {\n    border: 1px solid tint(@warning-color, 80%);\n    background-color: tint(@warning-color, 90%);\n    .@{alert-prefix-cls}-icon {\n      color: @warning-color;\n    }\n  }\n\n  &-error {\n    border: 1px solid tint(@error-color, 80%);\n    background-color: tint(@error-color, 90%);\n    .@{alert-prefix-cls}-icon {\n      color: @error-color;\n    }\n  }\n\n  &-close-icon {\n    font-size: 12px;\n    position: absolute;\n    right: 16px;\n    top: 50%;\n    margin-top: -6px;\n    height: 12px;\n    line-height: 12px;\n    overflow: hidden;\n    cursor: pointer;\n\n    .anticon-cross {\n      color: @legend-color;\n      transition: color .3s ease;\n      &:hover {\n        color: #444;\n      }\n    }\n  }\n\n  &-close-text {\n    position: absolute;\n    right: 16px;\n  }\n\n  &-with-description {\n    padding: 16px 16px 16px 69px;\n    position: relative;\n    border-radius: @border-radius-base;\n    margin-bottom: 10px;\n    color: @text-color;\n    line-height: 1.5;\n  }\n\n  &-with-description&-no-icon {\n    padding: 16px;\n  }\n\n  &-with-description &-icon {\n    position: absolute;\n    top: 50%;\n    left: 24px;\n    margin-top: -15px;\n    font-size: 29px;\n  }\n\n  &-with-description &-close-icon {\n    position: absolute;\n    top: 17px;\n    right: 16px;\n    cursor: pointer;\n    font-size: 12px;\n  }\n\n  &-with-description &-message {\n    font-size: 14px;\n    color: @text-color;\n    display: block;\n  }\n\n  &-with-description &-description {\n    display: block;\n  }\n\n  &-close {\n    height: 0;\n    opacity: 0;\n    margin: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    transition: all .3s @ease-in-out;\n    transform-origin: 50% 0;\n    animation-timing-function: @ease-in-out !important;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/alert/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@backtop-prefix-cls: ant-back-top;\n\n.@{backtop-prefix-cls} {\n  z-index: @zindex-back-top;\n  position: fixed;\n  right: 100px;\n  bottom: 50px;\n  height: 40px;\n  width: 40px;\n  cursor: pointer;\n\n  &-content {\n    height: 40px;\n    width: 40px;\n    border-radius: 20px;\n    background-color: rgba(64, 64, 64, 0.4);\n    color: #fff;\n    text-align: center;\n    transition: all .3s @ease-in-out;\n\n    &:hover {\n      background-color: rgba(64, 64, 64, 0.6);\n      transition: all .3s @ease-in-out;\n    }\n  }\n\n  &-icon {\n    font-size: 20px;\n    margin-top: 10px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/back-top/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@badge-prefix-cls: ant-badge;\n@number-prefix-cls: ant-scroll-number;\n\n.@{badge-prefix-cls} {\n  position: relative;\n  display: inline-block;\n  line-height: 1;\n  vertical-align: middle;\n\n  &-count {\n    position: absolute;\n    transform: translateX(-50%);\n    top: -10px;\n    height: 20px;\n    border-radius: 10px;\n    min-width: 20px;\n    background: @error-color;\n    border: 1px solid transparent;\n    color: #fff;\n    line-height: 18px;\n    text-align: center;\n    padding: 0 6px;\n    font-size: 12px;\n    white-space: nowrap;\n    transform-origin: -10% center;\n    z-index: 10;\n    font-family: tahoma;\n    box-shadow: 0 0 0 1px #fff;\n    a,\n    a:hover {\n      color: #fff;\n    }\n  }\n\n  &-dot {\n    position: absolute;\n    transform: translateX(-50%);\n    transform-origin: 0px center;\n    top: -4px;\n    height: 8px;\n    width: 8px;\n    border-radius: 100%;\n    background: @error-color;\n    z-index: 10;\n    box-shadow: 0 0 0 1px #fff;\n  }\n\n  &-zoom-appear,\n  &-zoom-enter {\n    animation: antZoomBadgeIn .3s @ease-out-back;\n    animation-fill-mode: both;\n  }\n\n  &-zoom-leave {\n    animation: antZoomBadgeOut .3s @ease-in-back;\n    animation-fill-mode: both;\n  }\n\n  &-not-a-wrapper &-count {\n    top: auto;\n    display: block;\n    position: relative;\n    transform: translateX(0);\n  }\n}\n\na & {\n  &-count:hover {\n    background: tint(@error-color, 20%);\n  }\n  &-count:active {\n    background: shade(@error-color, 5%);\n  }\n}\n\n.@{number-prefix-cls} {\n  overflow: hidden;\n  &-only {\n    display: inline-block;\n    transition: transform .3s @ease-in-out;\n  }\n  // for IE8/9 display\n  &.not-support-css-animation &-only {\n    > p {\n      display: none;\n      &.current {\n        display: block;\n      }\n    }\n  }\n}\n\n@keyframes antZoomBadgeIn {\n  0% {\n    opacity: 0;\n    transform: scale(0) translateX(-50%);\n  }\n  100% {\n    transform: scale(1) translateX(-50%);\n  }\n}\n\n@keyframes antZoomBadgeOut {\n  0% {\n    transform: scale(1) translateX(-50%);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(0) translateX(-50%);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/badge/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@breadcrumb-prefix-cls: ant-breadcrumb;\n\n.@{breadcrumb-prefix-cls} {\n  color: #999;\n  font-size: @font-size-base;\n\n  a {\n    color: @text-color;\n  }\n\n  & > span:last-child {\n    font-weight: bold;\n    color: @text-color;\n  }\n\n  & > span:last-child &-separator {\n    display: none;\n  }\n\n  &-separator {\n    margin: 0 8px;\n    color: @border-color-base;\n  }\n\n  .anticon + span {\n    margin-left: 4px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/breadcrumb/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""./mixin\"";\n\n@btn-prefix-cls: ant-btn;\n\n// Button styles\n// -----------------------------\n.@{btn-prefix-cls} {\n  .btn;\n  .btn-default;\n\n  &-primary {\n    .btn-primary;\n\n    .@{btn-prefix-cls}-group &:not(:first-child):not(:last-child) {\n      border-right-color: @btn-group-border;\n      border-left-color: @btn-group-border;\n    }\n\n    .@{btn-prefix-cls}-group &:first-child {\n      &:not(:last-child) {\n        border-right-color: @btn-group-border;\n        &[disabled] {\n          border-right-color: @btn-default-border;\n        }\n      }\n    }\n\n    .@{btn-prefix-cls}-group &:last-child:not(:first-child),\n    .@{btn-prefix-cls}-group & + .@{btn-prefix-cls} {\n      border-left-color: @btn-group-border;\n      &[disabled] {\n        border-left-color: @btn-default-border;\n      }\n    }\n  }\n\n  &-ghost {\n    .btn-ghost;\n  }\n\n  &-dashed {\n    .btn-dashed;\n  }\n\n  &-circle,\n  &-circle-outline {\n    .btn-circle(@btn-prefix-cls);\n  }\n\n  &:before {\n    position: absolute;\n    top: -1px;\n    left: -1px;\n    bottom: -1px;\n    right: -1px;\n    background: #fff;\n    opacity: 0.35;\n    content: '';\n    border-radius: inherit;\n    z-index: 1;\n    transition: opacity .2s;\n    pointer-events: none;\n    display: none;\n  }\n\n  &&-loading {\n    padding-left: 29px;\n    pointer-events: none;\n    position: relative;\n    .anticon {\n      margin-left: -14px;\n      transition: all .3s @ease-in-out;\n    }\n    &:before {\n      display: block;\n    }\n  }\n\n  &-sm&-loading {\n    padding-left: 24px;\n    .anticon {\n      margin-left: -17px;\n    }\n  }\n\n  &-group {\n    .btn-group(@btn-prefix-cls);\n  }\n\n  &:not(&-circle):not(&-circle-outline)&-icon-only {\n    padding-left: 8px;\n    padding-right: 8px;\n  }\n\n  // To ensure that a space will be placed between character and `Icon`.\n  > .@{iconfont-css-prefix} + span,\n  > span + .@{iconfont-css-prefix} {\n    margin-left: 0.5em;\n  }\n\n  &-clicked:after {\n  \tcontent: '';\n  \tposition: absolute;\n  \ttop: -1px;\n  \tleft: -1px;\n  \tbottom: -1px;\n  \tright: -1px;\n  \tborder-radius: inherit;\n    border: 0 solid @primary-color;\n  \topacity: 0.4;\n    animation: buttonEffect 0.32s ease forwards;\n    display: block;\n  }\n}\n\n@keyframes buttonEffect {\n\tto {\n\t\topacity: 0;\n    top: -5px;\n  \tleft: -5px;\n  \tbottom: -5px;\n  \tright: -5px;\n    border-width: 5px;\n\t}\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/button/style/index.less\n **/"",""// mixins for button\n// ------------------------\n.button-size(@padding; @font-size; @border-radius) {\n  padding: @padding;\n  font-size: @font-size;\n  border-radius: @border-radius;\n}\n\n.button-variant(@color; @background; @border) {\n  .button-color(@color; @background; @border);\n\n  &:hover,\n  &:focus {\n    .button-color(tint(@color, 20%); tint(@background, 20%); tint(@border, 20%));\n  }\n  &:active,\n  &.active {\n    .button-color(shade(@color, 5%); shade(@background, 5%); shade(@background, 5%));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      .button-color(@btn-disable-color; @btn-disable-bg; @btn-disable-border);\n    }\n  }\n}\n\n.button-color(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n  // a inside Button which only work in Chrome\n  // http://stackoverflow.com/a/17253457\n  > a:only-child {\n    color: currentColor;\n    &:after {\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n      background: transparent;\n    }\n  }\n}\n\n.button-group-base(@btnClassName) {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  > .@{btnClassName} {\n    position: relative;\n    float: left;\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n  }\n\n  // size\n  &-lg > .@{btnClassName} {\n    .button-size(@btn-padding-lg; @btn-font-size-lg; @border-radius-base);\n  }\n\n  &-sm > .@{btnClassName} {\n    .button-size(@btn-padding-sm; @font-size-base; @border-radius-sm);\n    > .@{iconfont-css-prefix} {\n      font-size: @font-size-base;\n    }\n  }\n}\n\n// Base styles of buttons\n// --------------------------------------------------\n.btn() {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  // outline: none;\n  white-space: nowrap;\n  line-height: @line-height-base;\n  .button-size(@btn-padding-base; @font-size-base; @border-radius-base);\n  user-select: none;\n  transition: all .3s @ease-in-out;\n  transform: translate3d(0, 0, 0);\n\n  > .@{iconfont-css-prefix} {\n    line-height: 1;\n  }\n\n  &,\n  &:active,\n  &:focus {\n    outline: 0;\n  }\n\n  &:not([disabled]):hover {\n    text-decoration: none;\n  }\n\n  &:not([disabled]):active {\n    outline: 0;\n    transition: none;\n  }\n\n  &.disabled,\n  &[disabled] {\n    cursor: @cursor-disabled;\n    > * {\n      pointer-events: none;\n    }\n  }\n\n  &-lg {\n    .button-size(@btn-padding-lg; @btn-font-size-lg; @border-radius-base);\n  }\n\n  &-sm {\n    .button-size(@btn-padding-sm; @font-size-base; @border-radius-sm);\n  }\n}\n\n// primary button style\n.btn-primary() {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @primary-color);\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active {\n    color: @btn-primary-color;\n  }\n}\n\n// default button style\n.btn-default() {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n\n  &:hover,\n  &:focus {\n    .button-color(tint(@primary-color, 20%); white; tint(@primary-color, 20%));\n  }\n  &:active,\n  &.active {\n    .button-color(shade(@primary-color, 5%); white; shade(@primary-color, 5%));\n  }\n}\n\n// ghost button style\n.btn-ghost() {\n  .button-variant(@btn-ghost-color, @btn-ghost-bg, @btn-ghost-border);\n\n  &:hover,\n  &:focus {\n    .button-color(tint(@primary-color, 20%); @btn-ghost-bg; tint(@primary-color, 20%));\n  }\n  &:active,\n  &.active {\n    .button-color(shade(@primary-color, 5%); @btn-ghost-bg; shade(@primary-color, 5%));\n  }\n}\n\n// ghost button style\n.btn-dashed() {\n  .button-variant(@btn-ghost-color, @btn-ghost-bg, @btn-ghost-border);\n  border-style: dashed;\n\n  &:hover,\n  &:focus {\n    .button-color(tint(@primary-color, 20%); @btn-ghost-bg; tint(@primary-color, 20%));\n  }\n  &:active,\n  &.active {\n    .button-color(shade(@primary-color, 5%); @btn-ghost-bg; shade(@primary-color, 5%));\n  }\n}\n\n// circle button: the content only contains icon\n.btn-circle(@btnClassName: btn) {\n  .square(@btn-circle-size);\n  .button-size(0; @font-size-base + 2; 50%);\n\n  &.@{btnClassName}-lg {\n    .square(@btn-circle-size-lg);\n    .button-size(0; @btn-font-size-lg + 2; 50%);\n  }\n\n  &.@{btnClassName}-sm {\n    .square(@btn-circle-size-sm);\n    .button-size(0; @font-size-base; 50%);\n  }\n}\n\n// Horizontal button groups styl\n// --------------------------------------------------\n.btn-group(@btnClassName: btn) {\n  .button-group-base(@btnClassName);\n\n  .@{btnClassName} + .@{btnClassName},\n  .@{btnClassName} + &,\n  & + .@{btnClassName},\n  & + & {\n    margin-left: -1px;\n  }\n\n  .@{btnClassName}:not(:first-child):not(:last-child) {\n    border-radius: 0;\n    padding-left: 8px;\n    padding-right: 8px;\n  }\n\n  > .@{btnClassName}:first-child {\n    margin-left: 0;\n    &:not(:last-child) {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0;\n      padding-right: 8px;\n    }\n  }\n\n  > .@{btnClassName}:last-child:not(:first-child) {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n    padding-left: 8px;\n  }\n\n  & > & {\n    float: left;\n  }\n\n  & > &:not(:first-child):not(:last-child) > .@{btnClassName} {\n    border-radius: 0;\n  }\n\n  & > &:first-child:not(:last-child) {\n    > .@{btnClassName}:last-child {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0;\n      padding-right: 8px;\n    }\n  }\n\n  & > &:last-child:not(:first-child) > .@{btnClassName}:first-child {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n    padding-left: 8px;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/button/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n\n@full-calendar-prefix-cls: ant-fullcalendar;\n\n.@{full-calendar-prefix-cls} {\n  font-size: @font-size-base;\n  line-height: 1.5;\n\n  &-month-select {\n    margin-left: 5px;\n  }\n\n  &-header {\n    padding: 11px 16px 11px 0;\n    text-align: right;\n\n    .ant-select {\n      text-align: left;\n    }\n\n    .ant-radio-group {\n      margin-left: 8px;\n      text-align: left;\n    }\n\n    label.ant-radio-button {\n      height: 22px;\n      line-height: 20px;\n      padding: 0 10px;\n    }\n  }\n\n  outline: none;\n  border-top: 1px solid @legend-border-color;\n  &-date-panel {\n    position: relative;\n    outline: none;\n  }\n\n  &-calendar-body {\n    padding: 8px 8px 14px;\n  }\n\n  table {\n    border-collapse: collapse;\n    max-width: 100%;\n    background-color: transparent;\n    width: 100%;\n    height: 246px;\n  }\n\n  table,\n  th,\n  td {\n    border: 0;\n  }\n\n  td {\n    position: relative;\n  }\n\n  &-calendar-table {\n    border-spacing: 0;\n    margin-bottom: 0;\n  }\n\n  &-column-header {\n    line-height: 18px;\n    padding: 0;\n    width: 33px;\n    text-align: center;\n    .@{full-calendar-prefix-cls}-column-header-inner {\n      display: block;\n      font-weight: normal;\n    }\n  }\n\n  &-week-number-header {\n    .@{full-calendar-prefix-cls}-column-header-inner {\n      display: none;\n    }\n  }\n\n  &-month,\n  &-date {\n    text-align: center;\n  }\n\n  &-value {\n    display: block;\n    margin: 0 auto;\n    color: @text-color;\n    border-radius: 4px;\n    width: 22px;\n    height: 22px;\n    padding: 0;\n    background: transparent;\n    line-height: 22px;\n\n    &:hover {\n      background: tint(@primary-color, 90%);\n      cursor: pointer;\n    }\n  }\n\n  &-month-panel-cell &-value {\n    width: 48px;\n  }\n\n  &-today &-value,\n  &-month-panel-current-cell &-value {\n    background: @primary-color;\n    color: #fff;\n  }\n\n  &-disabled-cell &-value {\n    cursor: not-allowed;\n    color: #bcbcbc;\n    background: #f3f3f3;\n    border-radius: 0;\n    width: auto;\n\n    &:hover {\n      background: #f3f3f3;\n    }\n  }\n\n  &-disabled-cell-first-of-row &-value {\n    border-top-left-radius: 4px;\n    border-bottom-left-radius: 4px;\n  }\n\n  &-disabled-cell-last-of-row &-value {\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n  }\n\n  &-last-month-cell &-value,\n  &-next-month-btn-day &-value {\n    color: #ccc;\n  }\n\n  &-month-panel-table {\n    table-layout: fixed;\n    width: 100%;\n    border-collapse: separate;\n  }\n\n  &-content {\n    position: absolute;\n    width: 100%;\n    left: 0;\n    bottom: -9px;\n  }\n\n  &-fullscreen {\n    border-top: 0;\n  }\n\n  &-fullscreen &-table {\n    table-layout: fixed;\n  }\n\n  &-fullscreen &-header {\n    .ant-radio-group {\n      margin-left: 16px;\n    }\n    label.ant-radio-button {\n      height: 28px;\n      line-height: 26px;\n    }\n  }\n\n  &-fullscreen &-month,\n  &-fullscreen &-date {\n    text-align: left;\n    margin: 0 4px;\n    display: block;\n    color: @text-color;\n    height: 116px;\n    padding: 4px 8px;\n    border-top: 2px solid #eee;\n    transition: background 0.3s ease;\n\n    &:hover {\n      background: tint(@primary-color, 90%);\n      cursor: pointer;\n    }\n  }\n\n  &-fullscreen &-column-header {\n    text-align: right;\n    padding-right: 12px;\n    padding-bottom: 5px;\n  }\n\n  &-fullscreen &-value {\n    text-align: right;\n    background: transparent;\n    width: auto;\n  }\n\n  &-fullscreen &-today &-value {\n    color: #666;\n  }\n\n\n  &-fullscreen &-month-panel-current-cell &-month,\n  &-fullscreen &-today &-date {\n    border-top-color: @primary-color;\n    background-color: tint(@primary-color, 90%);\n    color: @primary-color;\n  }\n  &-fullscreen &-month-panel-current-cell &-value {\n    color: @primary-color;\n  }\n  &-fullscreen &-last-month-cell &-date,\n  &-fullscreen &-next-month-btn-day &-date {\n    color: #ccc;\n  }\n\n  &-fullscreen &-content {\n    height: 90px;\n    overflow-y: auto;\n    position: static;\n    width: auto;\n    left: auto;\n    bottom: auto;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/calendar/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n\n@select-prefix-cls: ant-select;\n\n.selection__clear() {\n  display: inline-block;\n  font-style: normal;\n  vertical-align: baseline;\n  text-align: center;\n  text-transform: none;\n  text-rendering: auto;\n  opacity: 0;\n  position: absolute;\n  right: 8px;\n  z-index: 1;\n  background: #fff;\n  top: 50%;\n  font-size: 12px;\n  color: #ccc;\n  width: 12px;\n  height: 12px;\n  margin-top: -6px;\n  line-height: 12px;\n  cursor: pointer;\n  transition: color 0.3s ease, opacity 0.15s ease;\n  &:before {\n    display: block;\n    font-family: \""anticon\"" !important;\n    content: \""\\E631\"";\n  }\n  &:hover {\n    color: #999;\n  }\n}\n\n.@{select-prefix-cls} {\n  box-sizing: border-box;\n  display: inline-block;\n  position: relative;\n  vertical-align: middle;\n  color: #666;\n  font-size: @font-size-base;\n\n  > ul > li > a {\n    padding: 0;\n    background-color: #fff;\n  }\n\n  // arrow\n  &-arrow {\n    .iconfont-mixin();\n    position: absolute;\n    top: 50%;\n    right: 8px;\n    line-height: 1;\n    margin-top: -6px;\n    .iconfont-size-under-12px(8px);\n\n    * {\n      display: none;\n    }\n\n    &:before {\n      content: '\\e603';\n      transition: transform 0.2s ease;\n    }\n  }\n\n  &-selection {\n    outline: none;\n    user-select: none;\n\n    box-sizing: border-box;\n    display: block;\n\n    background-color: #fff;\n    border-radius: @border-radius-base;\n    border: 1px solid @border-color-base;\n    transition: all .3s @ease-in-out;\n\n    &:hover {\n      .hover;\n    }\n\n    .@{select-prefix-cls}-focused &,\n    &:focus,\n    &:active {\n      .active;\n    }\n\n    &__clear {\n      .selection__clear();\n    }\n\n    &:hover &__clear {\n      opacity: 1;\n    }\n  }\n\n  &-disabled {\n    color: #ccc;\n  }\n\n  &-disabled &-selection {\n    background: #f7f7f7;\n    cursor: not-allowed;\n    &:hover,\n    &:focus,\n    &:active {\n      border-color: @border-color-base;\n      box-shadow: none;\n    }\n\n    &__clear {\n      display: none;\n      visibility: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &-disabled &-selection--multiple &-selection__choice {\n    background: #e9e9e9;\n    color: #aaa;\n    padding-right: 10px;\n    &__remove {\n      display: none;\n    }\n  }\n\n  &-selection--single {\n    height: 28px;\n    position: relative;\n    cursor: pointer;\n\n    .@{select-prefix-cls}-selection__rendered {\n      height: 26px;\n      display: block;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      padding-left: 8px;\n      padding-right: 24px;\n      line-height: 26px;\n    }\n  }\n\n  &-open&-show-search &-selection--single &-selection-selected-value {\n    position: absolute;\n    left: 8px;\n    top: 0;\n  }\n\n  &-lg {\n    .ant-select-selection--single {\n      height: 32px;\n      .ant-select-selection__rendered {\n        line-height: 30px;\n      }\n    }\n\n    .ant-select-selection--multiple {\n      min-height: 32px;\n      .ant-select-selection__rendered {\n        li {\n          height: 24px;\n          line-height: 24px;\n        }\n      }\n    }\n  }\n\n  &-sm {\n    .ant-select-selection {\n      border-radius: @border-radius-sm;\n    }\n    .ant-select-selection--single {\n      height: 22px;\n      .ant-select-selection__rendered {\n        line-height: 20px;\n      }\n    }\n    .ant-select-selection--multiple {\n      min-height: 22px;\n      .ant-select-selection__rendered {\n        li {\n          height: 14px;\n          line-height: 14px;\n        }\n      }\n    }\n  }\n\n  &-disabled &-selection__choice__remove {\n    color: #ccc;\n    cursor: default;\n    &:hover {\n      color: #ccc;\n    }\n  }\n\n  &-search__field__wrap {\n    display: inline-block;\n    position: relative;\n  }\n\n  &-selection__placeholder,\n  &-search__field__placeholder { // for TreeSelect compatibility\n    position: absolute;\n    top: 50%;\n    left: 9px;\n    color: #ccc;\n    line-height: 20px;\n    height: 20px;\n    margin-top: -10px;\n    cursor: text;\n  }\n\n  &-search--inline {\n    float: left;\n    width: 100%;\n\n    .@{select-prefix-cls}-search__field__wrap {\n      width: 100%;\n    }\n\n    .@{select-prefix-cls}-search__field {\n      border: 0;\n      font-size: 100%;\n      background: transparent;\n      outline: 0;\n      border-radius: @border-radius-base;\n    }\n\n    .@{select-prefix-cls}-search__field__mirror {\n      position: absolute;\n      top: 0;\n      left: 9999px;\n      white-space: pre;\n      pointer-events: none;\n    }\n\n    > i {\n      float: right;\n    }\n  }\n\n  &-selection--multiple {\n    min-height: 28px;\n    cursor: text;\n\n    .@{select-prefix-cls}-search--inline {\n      width: auto;\n      .@{select-prefix-cls}-search__field {\n        width: 0.75em;\n      }\n    }\n\n    .@{select-prefix-cls}-selection__rendered {\n      overflow: hidden;\n      text-overflow: ellipsis;\n      padding-left: 6px;\n      padding-bottom: 4px;\n    }\n\n    > ul > li,\n    .@{select-prefix-cls}-selection__rendered > ul > li {  // for tree-select\n      margin-top: 4px;\n      height: 20px;\n      line-height: 20px;\n    }\n\n    .@{select-prefix-cls}-selection__choice {\n      background-color: #f3f3f3;\n      border-radius: 4px;\n      cursor: default;\n      float: left;\n      padding: 0 15px;\n      margin-right: 4px;\n      max-width: 99%;\n      position: relative;\n      overflow: hidden;\n      transition: padding .3s @ease-in-out;\n      padding: 0 20px 0 10px;\n      &__disabled {\n        padding: 0 10px;\n      }\n    }\n\n    .@{select-prefix-cls}-selection__choice__content {\n      display: inline-block;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      max-width: 100%;\n      transition: margin .3s @ease-in-out;\n    }\n\n    .@{select-prefix-cls}-selection__choice__remove {\n      .iconfont-mixin();\n      color: #999;\n      line-height: inherit;\n      cursor: pointer;\n      display: inline-block;\n      font-weight: bold;\n      transition: all 0.3s @ease-in-out;\n      .iconfont-size-under-12px(8px);\n      position: absolute;\n      right: 4px;\n      padding: 0 0 0 8px;\n      &:hover {\n        color: #404040;\n      }\n      &:before {\n        content: \""\\e62d\"";\n      }\n    }\n  }\n\n  &-open {\n    .@{select-prefix-cls}-arrow {\n      .ie-rotate(2);\n      -ms-transform: rotate(180deg);\n      &:before {\n        transform: rotate(180deg);\n      }\n    }\n    .@{select-prefix-cls}-selection {\n      .active();\n    }\n  }\n\n  &-combobox {\n    .@{select-prefix-cls}-arrow {\n      display: none;\n    }\n    .@{select-prefix-cls}-search--inline {\n      height: 100%;\n      float: none;\n    }\n    .@{select-prefix-cls}-search__field__wrap {\n      width: 100%;\n      height: 100%;\n    }\n    .@{select-prefix-cls}-search__field {\n      padding: 0 10px;\n      width: 100%;\n      height: 100%;\n      position: relative;\n      z-index: 1;\n      transition: all .3s @ease-in-out;\n      box-shadow: none;\n    }\n    .@{select-prefix-cls}-selection__rendered {\n      padding: 0;\n      height: 100%;\n      overflow: visible;\n    }\n  }\n}\n\n.@{select-prefix-cls}-dropdown {\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft {\n    animation-name: antSlideUpIn;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-topLeft {\n    animation-name: antSlideDownIn;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft {\n    animation-name: antSlideUpOut;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-topLeft {\n    animation-name: antSlideDownOut;\n  }\n\n  &-hidden {\n    display: none;\n  }\n\n  background-color: white;\n  border: 1px solid @border-color-base;\n  box-shadow: @box-shadow-base;\n  border-radius: @border-radius-base;\n  box-sizing: border-box;\n  z-index: @zindex-dropdown;\n  left: -9999px;\n  top: -9999px;\n  position: absolute;\n  outline: none;\n  overflow: hidden;\n  font-size: @font-size-base;\n\n  &-menu {\n    outline: none;\n    margin-bottom: 0;\n    padding-left: 0; // Override default ul/ol\n    list-style: none;\n    max-height: 250px;\n    overflow: auto;\n\n    &-item-group-list {\n      margin: 0;\n      padding: 0;\n\n      > .@{select-prefix-cls}-dropdown-menu-item {\n        padding-left: 24px;\n      }\n    }\n\n    &-item-group-title {\n      color: #999;\n      line-height: 1.5;\n      padding: 8px 15px;\n    }\n\n    &-item {\n      position: relative;\n      display: block;\n      padding: 7px 15px;\n      font-weight: normal;\n      color: #666;\n      white-space: nowrap;\n      cursor: pointer;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n      overflow: hidden;\n      transition: background 0.3s ease;\n\n      &:hover,\n      &-active {\n        background-color: tint(@primary-color, 90%);\n      }\n\n      &-disabled {\n        color: #ccc;\n        cursor: not-allowed;\n\n        &:hover {\n          color: #ccc;\n          background-color: #fff;\n          cursor: not-allowed;\n        }\n      }\n\n      &-selected {\n        &,\n        &:hover {\n          background-color: #f7f7f7;\n          font-weight: bold;\n          color: #666;\n        }\n      }\n\n      &-divider {\n        height: 1px;\n        margin: 1px 0;\n        overflow: hidden;\n        background-color: #e5e5e5;\n        line-height: 0;\n      }\n    }\n  }\n\n  &&--multiple {\n    .@{select-prefix-cls}-dropdown-menu-item {\n      &:after {\n        content: '\\e62e';\n        font-family: 'anticon';\n        color: transparent;\n        .iconfont-size-under-12px(10px);\n        transition: all 0.2s ease;\n        position: absolute;\n        right: 15px;\n        font-weight: bold;\n        text-shadow: 0 0.1px 0, 0.1px 0 0, 0 -0.1px 0, -0.1px 0;\n      }\n\n      &:hover:after {\n        color: #ddd;\n      }\n\n      &-disabled:after {\n        display: none;\n      }\n\n      &-selected:after,\n      &-selected:hover:after {\n        color: @primary-color;\n        display: inline-block;\n      }\n    }\n  }\n\n  &-container-open,\n  &-open {\n    .@{select-prefix-cls}-dropdown {\n      display: block;\n    }\n  }\n\n  .@{select-prefix-cls}-dropdown-search {\n    display: block;\n    padding: 4px;\n    .@{select-prefix-cls}-search__field__wrap {\n      width: 100%;\n    }\n    .@{select-prefix-cls}-search__field {\n      padding: 4px 7px;\n      width: 100%;\n      box-sizing: border-box;\n      border: 1px solid @border-color-base;\n      border-radius: 4px;\n      outline: none;\n    }\n    &.@{select-prefix-cls}-search--hide {\n      display: none;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/select/style/index.less\n **/"",""// Compatibility for browsers.\n\n// rotate for ie8 and blow\n.ie-rotate(@rotation) {\n  -ms-filter: \""progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})\"";\n}\n\n// rotate for ie8 and blow\n// degrees unit\n.ie-rotate-via-degrees(@degrees) {\n  /* IE6-IE8 */\n  @radians: ~`parseInt(\""@{degrees}\"") * Math.PI * 2 / 360`;\n  @costheta: ~`Math.cos(\""@{radians}\"")`;\n  @sintheta: ~`Math.sin(\""@{radians}\"")`;\n  @negsintheta: ~`\""@{sintheta}\"" * -1`;\n  -ms-filter: \""progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=@{costheta}, M12=@{negsintheta}, M21=@{sintheta}, M22=@{costheta})\"";\n  zoom: 1;\n\n  :root & {\n    filter: none;\n  }\n}\n\n// support rotate for all browsers\n.cross-rotate(@degrees) {\n  .rotate(@degrees);\n  .ie-rotate-via-degrees(@degrees);\n}\n\n// for iconfont font size\n// fix chrome 12px bug, support ie\n.iconfont-size-under-12px(@size, @rotate: 0deg) {\n  display: inline-block;\n  @font-scale: unit(@size/@font-size-base);\n  font-size: @font-size-base;\n  font-size: ~\""@{size} \\9\""; // ie8-9\n  transform: scale(@font-scale) rotate(@rotate);\n  .ie-rotate-via-degrees(@rotate);\n  :root & {\n    font-size: @font-size-base; // reset ie9 and above\n  }\n}\n\n// Placeholder text\n.placeholder(@color: @input-placeholder-color) {\n  // Firefox\n  &::-moz-placeholder {\n    color: @color;\n    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n  }\n  // Internet Explorer 10+\n  &:-ms-input-placeholder {\n    color: @color;\n  }\n  // Safari and Chrome\n  &::-webkit-input-placeholder {\n    color: @color;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/compatibility.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n// size mixins for input\n.input-lg() {\n  padding: @input-padding-vertical-lg @input-padding-horizontal;\n  height: @input-height-lg;\n}\n\n.input-sm() {\n  padding: @input-padding-vertical-sm @input-padding-horizontal;\n  height: @input-height-sm;\n  border-radius: @border-radius-sm;\n}\n\n// input status\n// == when focus or actived\n.active(@color: @input-hover-border-color) {\n  border-color: tint(@color, 20%);\n  outline: 0;\n  box-shadow: 0 0 0 2px fade(@color, 20%);\n}\n\n// == when hoverd\n.hover(@color: @input-hover-border-color) {\n  border-color: tint(@color, 20%);\n}\n\n.disabled() {\n  background-color: @input-disabled-bg;\n  opacity: 1;\n  cursor: @cursor-disabled;\n  color: #ccc;\n  &:hover {\n    .hover(@input-border-color);\n  }\n}\n\n// Basic style for input\n.input() {\n  position: relative;\n  display: inline-block;\n  padding: @input-padding-vertical-base @input-padding-horizontal;\n  width: 100%;\n  height: @input-height-base;\n  cursor: text;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none;\n  border: 1px solid @input-border-color;\n  border-radius: @border-radius-base;\n  .placeholder(); // Reset placeholder\n  transition: border .2s @ease-in-out, background .2s @ease-in-out, box-shadow .2s @ease-in-out;\n\n  &:hover {\n    .hover();\n  }\n\n  &:focus {\n    .active();\n  }\n\n  &[disabled],\n  fieldset[disabled] & {\n   .disabled();\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    max-width: 100%; // prevent textearea resize from coming out of its container\n    height: auto;\n    vertical-align: bottom;\n  }\n\n  // Size\n  &-lg {\n    .input-lg();\n  }\n\n  &-sm {\n    .input-sm();\n  }\n}\n\n// Input with icons, you can define @height if you wish to change the input size\n.input-with-icon(@height: @input-height-base) {\n  position: relative;\n\n  .@{iconfont-css-prefix} {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    z-index: 2;\n    .square(@height);\n    font-size: 14px;\n    line-height: @height;\n    text-align: center;\n    pointer-events: none;\n  }\n}\n\n// label input\n.input-group(@inputClass) {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n  width: 100%;\n\n  // Undo padding and float of grid classes\n  &[class*=\""col-\""] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  > [class*=\""col-\""] {\n    padding-right: 8px;\n  }\n\n  &-addon,\n  &-wrap,\n  > .@{inputClass} {\n    display: table-cell;\n\n    &:not(:first-child):not(:last-child) {\n      border-radius: 0;\n    }\n  }\n\n  &-addon,\n  &-wrap {\n    width: 1%;\n    white-space: nowrap;\n    vertical-align: middle;\n  }\n\n  &-wrap > * {\n    display: block !important;\n  }\n\n  .@{inputClass} {\n    position: relative;\n    z-index: 2;\n    float: left;\n    width: 100%;\n    margin-bottom: 0;\n  }\n\n  &-addon {\n    padding: @input-padding-vertical-base @input-padding-horizontal;\n    font-size: @font-size-base;\n    font-weight: normal;\n    line-height: 1;\n    color: @input-color;\n    text-align: center;\n    background-color: #eee;\n    border: 1px solid @input-border-color;\n    border-radius: @border-radius-base;\n\n    // Reset Select's style in addon\n    .ant-select {\n      margin: -(@input-padding-vertical-base + 1) (-@input-padding-horizontal);\n\n      .ant-select-selection {\n        background-color: inherit;\n        border: 0;\n        margin: -1px;\n        border: 1px solid transparent;\n      }\n\n      &-open,\n      &-focused {\n        .ant-select-selection {\n          border-color: tint(@primary-color, 20%);\n        }\n      }\n    }\n  }\n\n  // Reset rounded corners\n  > span > .@{inputClass}:first-child,\n  > .@{inputClass}:first-child,\n  &-addon:first-child {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0;\n\n    // Reset Select's style in addon\n    .ant-select .ant-select-selection {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0;\n    }\n  }\n\n  &-addon:first-child {\n    border-right: 0;\n  }\n  &-addon:last-child {\n    border-left: 0;\n  }\n\n  > .@{inputClass}:last-child,\n  &-addon:last-child {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n\n    // Reset Select's style in addon\n    .ant-select .ant-select-selection {\n      border-bottom-left-radius: 0;\n      border-top-left-radius: 0;\n    }\n  }\n\n  // Sizing options\n  &-lg .@{inputClass},\n  &-lg > &-addon {\n    .input-lg();\n  }\n\n  &-sm .@{inputClass},\n  &-sm > &-addon {\n    .input-sm();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/input/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../button/style/mixin\"";\n@import \""./mixin\"";\n\n.ant-search-input-wrapper {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.ant-search-input {\n  &.ant-input-group .ant-input:first-child,\n  &.ant-input-group .ant-select:first-child {\n    border-radius: @border-radius-base;\n    position: absolute;\n    top: -1px;\n    width: 100%;\n  }\n\n  .ant-search-btn {\n    .btn-default;\n    border-radius: 0 @border-radius-base - 1 @border-radius-base - 1 0;\n    left: -1px;\n    position: relative;\n    border-width: 0 0 0 1px;\n    z-index: 2;\n    padding-left: 8px;\n    padding-right: 8px;\n    &:hover {\n      border-color: @border-color-base;\n    }\n    form & {\n      padding-top: 6px;\n      padding-bottom: 6px;\n    }\n  }\n  &&-focus .ant-search-btn-noempty,\n  &:hover .ant-search-btn-noempty {\n    .btn-primary;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/input/style/search-input.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""./mixin\"";\n@import \""./search-input\"";\n\n// Input styles\n.ant-input {\n  .input;\n}\n\n//== Style for input-group: input with label, with button or dropdown...\n.ant-input-group {\n  .input-group(~\""ant-input\"");\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/input/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@radio-prefix-cls: ant-radio;\n@radio-group-prefix-cls: ~\""@{radio-prefix-cls}-group\"";\n@radio-inner-prefix-cls: ~\""@{radio-prefix-cls}-inner\"";\n@radio-duration: .2s;\n\n.@{radio-group-prefix-cls} {\n  display: inline-block;\n  font-size: @font-size-base;\n  label {\n    margin-right: 16px;\n  }\n}\n\n// 一般状态\n.@{radio-prefix-cls} {\n  font-size: @font-size-base;\n  white-space: nowrap;\n  outline: none;\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n  vertical-align: middle;\n  cursor: pointer;\n  label& {\n    margin-right: 8px;\n  }\n  &:hover,\n  &-focused {\n    .@{radio-inner-prefix-cls} {\n      border-color: #bcbcbc;\n    }\n  }\n  &-inner {\n    &:after {\n      position: absolute;\n      width: 6px;\n      height: 6px;\n      left: 3px;\n      top: 3px;\n      border-radius: @border-radius-base;\n      display: table;\n      border-top: 0;\n      border-left: 0;\n      content: ' ';\n      background-color: @primary-color;\n      opacity: 0;\n      transform: scale(0);\n      transition: all @radio-duration @ease-in-out-circ;\n    }\n\n    position: relative;\n    top: 0;\n    left: 0;\n    display: inline-block;\n    width: 14px;\n    height: 14px;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 14px;\n    border-color: @border-color-base;\n    background-color: #fff;\n    transition: all @radio-duration @ease-in-out-circ;\n  }\n\n  &-input {\n    position: absolute;\n    left: 0;\n    z-index: 1;\n    cursor: pointer;\n    opacity: 0;\n    top: 0;\n    bottom: 0;\n    right: 0;\n  }\n}\n\n// 选中状态\n.@{radio-prefix-cls}-checked {\n  .@{radio-inner-prefix-cls} {\n    border-color: @border-color-base;\n    &:after {\n      transform: scale(1);\n      opacity: 1;\n      transition: all @radio-duration @ease-in-out-circ;\n    }\n  }\n}\n\n.@{radio-prefix-cls}-disabled {\n  &:hover {\n    .@{radio-inner-prefix-cls} {\n      border-color: @border-color-base;\n    }\n  }\n  .@{radio-inner-prefix-cls} {\n    border-color: @border-color-base;\n    background-color: #f3f3f3;\n    &:after {\n      background-color: #cccccc;\n    }\n  }\n\n  .@{radio-inner-prefix-cls}-input {\n    cursor: default;\n  }\n\n  .@{radio-prefix-cls}-disabled + span {\n    color: #ccc;\n    cursor: @cursor-disabled;\n  }\n}\n\nspan.@{radio-prefix-cls} + * {\n  margin-left: 8px;\n  margin-right: 8px;\n}\n\n.@{radio-prefix-cls} {\n  label&-button {\n    background: #fff;\n    padding: 0 16px;\n    margin: 0;\n    height: 28px;\n    line-height: 26px;\n    color: #666;\n    display: inline-block;\n    transition: all 0.3s ease;\n    cursor: pointer;\n    border: 1px solid @border-color-base;\n    border-left: 0;\n\n    a {\n      color: #666;\n    }\n\n    > span.@{radio-prefix-cls}-button {\n      margin-left: 0;\n      display: block;\n      width: 0;\n      height: 0;\n    }\n\n    .@{radio-group-prefix-cls}-large & {\n      height: 32px;\n      line-height: 30px;\n    }\n\n    .@{radio-group-prefix-cls}-small & {\n      height: 22px;\n      line-height: 20px;\n      padding: 0 12px;\n      &:first-child {\n        border-radius: @border-radius-sm 0 0 @border-radius-sm;\n      }\n      &:last-child {\n        border-radius: 0 @border-radius-sm @border-radius-sm 0;\n      }\n    }\n\n    &:first-child {\n      border-radius: @border-radius-base 0 0 @border-radius-base;\n      border-left: 1px solid @border-color-base;\n    }\n\n    &:last-child {\n      border-radius: 0 @border-radius-base @border-radius-base 0;\n    }\n\n    &:first-child:last-child {\n      border-radius: @border-radius-base;\n    }\n\n    &:hover,\n    &-focused {\n      color: @primary-color;\n      position: relative;\n    }\n\n    .@{radio-prefix-cls}-inner,\n    input {\n      .opacity(0);\n      width: 0;\n      height: 0;\n    }\n\n    &-checked {\n      background: #fff;\n      border-color: @primary-color;\n      color: @primary-color;\n      box-shadow: -1px 0 0 0 @primary-color;\n\n      &:first-child {\n        border-color: @primary-color;\n        box-shadow: none!important;\n      }\n\n      &:hover {\n        border-color: tint(@primary-color, 20%);\n        box-shadow: -1px 0 0 0 tint(@primary-color, 20%);\n        color: tint(@primary-color, 20%);\n      }\n\n      &:active {\n        border-color: shade(@primary-color, 5%);\n        box-shadow: -1px 0 0 0 shade(@primary-color, 5%);\n        color: shade(@primary-color, 5%);\n      }\n    }\n\n    &-disabled {\n      border-color: @border-color-base;\n      background-color: #f7f7f7;\n      cursor: not-allowed;\n      color: #ccc;\n\n      &:first-child,\n      &:hover {\n        border-color: @border-color-base;\n        background-color: #f7f7f7;\n        color: #ccc;\n      }\n      &:first-child {\n        border-left-color: @border-color-base;\n      }\n    }\n\n    &-disabled.@{radio-prefix-cls}-button-checked {\n      color: #fff;\n      background-color: #e6e6e6;\n      border-color: @border-color-base;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/radio/style/index.less\n **/"",""// Opacity\n\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\""alpha(opacity=@{opacity-ie})\"";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/opacity.less\n **/"",""@import \""../../style/themes/default\"";\n\n@card-prefix-cls: ant-card;\n\n.@{card-prefix-cls} {\n  background: #fff;\n  border-radius: @border-radius-sm;\n  font-size: @font-size-base;\n  position: relative;\n  overflow: hidden;\n  transition: all .3s;\n\n  &:hover {\n    box-shadow: @box-shadow-base;\n    border-color: #eee;\n  }\n\n  &-bordered {\n    border: 1px solid @border-color-base;\n    border-color: @border-color-split;\n  }\n\n  &-head {\n    height: 48px;\n    line-height: 48px;\n    border-bottom: 1px solid @border-color-split;\n    padding: 0 24px;\n\n    &-title {\n      font-size: 14px;\n      display: inline-block;\n      text-overflow: ellipsis;\n      width: 100%;\n      overflow: hidden;\n      white-space: nowrap;\n    }\n  }\n\n  &-extra {\n    position: absolute;\n    right: 24px;\n    top: 14px;\n  }\n\n  &-body {\n    padding: 24px;\n  }\n\n  &-loading &-body {\n    letter-spacing: -2px;\n    color: #eee;\n    font-size: 0.75rem;\n  }\n\n  &-loading &-body p {\n    word-break: break-all;\n    line-height: 10px;\n    margin: 5px 0 0;\n    height: 10px;\n    border-radius: @border-radius-base;\n    overflow: hidden;\n    display: inline-block;\n    user-select: none;\n    color: #f3f5f8;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/card/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n.ant-carousel {\n  .slick-slider {\n    position: relative;\n    display: block;\n    box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    -webkit-touch-callout: none;\n    user-select: none;\n    -ms-touch-action: pan-y;\n    touch-action: pan-y;\n    -webkit-tap-highlight-color: transparent;\n  }\n  .slick-list {\n    position: relative;\n    overflow: hidden;\n    display: block;\n    margin: 0;\n    padding: 0;\n\n    &:focus {\n      outline: none;\n    }\n\n    &.dragging {\n      cursor: pointer;\n      cursor: hand;\n    }\n  }\n  .slick-slider .slick-track,\n  .slick-slider .slick-list {\n    transform: translate3d(0, 0, 0);\n  }\n\n  .slick-track {\n    position: relative;\n    left: 0;\n    top: 0;\n    display: block;\n\n    &:before,\n    &:after {\n      content: \""\"";\n      display: table;\n    }\n\n    &:after {\n      clear: both;\n    }\n\n    .slick-loading & {\n      visibility: hidden;\n    }\n  }\n  .slick-slide {\n    float: left;\n    height: 100%;\n    min-height: 1px;\n    [dir=\""rtl\""] & {\n      float: right;\n    }\n    img {\n      display: block;\n    }\n    &.slick-loading img {\n      display: none;\n    }\n\n    display: none;\n\n    &.dragging img {\n      pointer-events: none;\n    }\n  }\n\n  .slick-initialized .slick-slide {\n    display: block;\n  }\n\n  .slick-loading .slick-slide {\n    visibility: hidden;\n  }\n\n  .slick-vertical .slick-slide {\n    display: block;\n    height: auto;\n    border: 1px solid transparent;\n  }\n  .slick-arrow.slick-hidden {\n    display: none;\n  }\n\n  // Arrows\n  .slick-prev,\n  .slick-next {\n    position: absolute;\n    display: block;\n    height: 20px;\n    width: 20px;\n    line-height: 0;\n    font-size: 0;\n    cursor: pointer;\n    background: transparent;\n    color: transparent;\n    top: 50%;\n    margin-top: -10px;\n    padding: 0;\n    border: 0;\n    outline: none;\n    &:hover,\n    &:focus {\n      outline: none;\n      background: transparent;\n      color: transparent;\n      &:before {\n        opacity: 1;\n      }\n    }\n    &.slick-disabled:before {\n      opacity: 0.25;\n    }\n  }\n\n  .slick-prev {\n    left: -25px;\n    &:before {\n      content: \""←\"";\n    }\n  }\n\n  .slick-next {\n    right: -25px;\n    &:before {\n      content: \""→\"";\n    }\n  }\n\n  // Dots\n\n  .slick-slider {\n    padding-bottom: 45px;\n  }\n\n  .slick-dots {\n    position: absolute;\n    bottom: 0;\n    list-style: none;\n    display: block;\n    text-align: center;\n    padding: 0;\n    width: 100%;\n    li {\n      position: relative;\n      display: inline-block;\n      height: 20px;\n      width: 20px;\n      margin: 0 5px;\n      padding: 0;\n      cursor: pointer;\n      button {\n        border: 0;\n        background: transparent;\n        display: block;\n        height: 20px;\n        width: 20px;\n        outline: none;\n        line-height: 0;\n        font-size: 0;\n        color: transparent;\n        padding: 5px;\n        cursor: pointer;\n        &:hover,\n        &:focus {\n          outline: none;\n          &:before {\n            opacity: 1;\n          }\n        }\n        &:before {\n          position: absolute;\n          top: 0;\n          left: 0;\n          content: \""•\"";\n          width: 20px;\n          height: 20px;\n          font-size: 18px;\n          font-family: arial, sans-serif;\n          line-height: 20px;\n          text-align: center;\n          color: gray;\n          transition: all .3s;\n          opacity: 0.25;\n          -webkit-font-smoothing: antialiased;\n          -moz-osx-font-smoothing: grayscale;\n        }\n      }\n      &.slick-active button:before {\n        color: black;\n        opacity: 0.75;\n      }\n    }\n  }\n}\n\n.ant-carousel-vertical {\n  .slick-slider {\n    padding-bottom: 0;\n  }\n  .slick-dots {\n    width: 20px;\n    bottom: auto;\n    right: -35px;\n    top: 0;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/carousel/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@cascader-prefix-cls: ant-cascader;\n\n.@{cascader-prefix-cls} {\n  font-size: @font-size-base;\n  &-input {\n    display: block;\n    cursor: pointer;\n    width: 100%;\n  }\n  &-picker {\n    position: relative;\n    display: inline-block;\n    cursor: pointer;\n    vertical-align: middle;\n    font-size: @font-size-base;\n    overflow: hidden;\n\n    &-disabled {\n      cursor: not-allowed;\n    }\n\n    &-label {\n      position: absolute;\n      top: 0;\n      left: 8px;\n      height: 20px;\n      line-height: 20px;\n      top: 50%;\n      margin-top: -10px;\n      white-space: nowrap;\n    }\n\n    &-clear {\n      opacity: 0;\n      position: absolute;\n      right: 8px;\n      z-index: 1;\n      background: #fff;\n      top: 50%;\n      font-size: 12px;\n      color: #ccc;\n      width: 12px;\n      height: 12px;\n      margin-top: -6px;\n      line-height: 12px;\n      cursor: pointer;\n      transition: color 0.3s ease, opacity 0.15s ease;\n      &:hover {\n        color: #999;\n      }\n    }\n\n    &:hover &-clear {\n      opacity: 1;\n    }\n\n    // arrow\n    &-arrow {\n      position: absolute;\n      top: 50%;\n      right: 8px;\n      width: 12px;\n      height: 12px;\n      margin-top: -6px;\n      line-height: 12px;\n      color: #999;\n      background: #fff;\n      .iconfont-size-under-12px(8px);\n      &:before {\n        transition: transform 0.2s ease;\n      }\n      &&-expand {\n        .ie-rotate(2);\n        &:before {\n          transform: rotate(180deg);\n        }\n      }\n    }\n  }\n  &-menus {\n    font-size: 12px;\n    background: #fff;\n    position: absolute;\n    z-index: @zindex-dropdown;\n    border: 1px solid @border-color-base;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n    white-space: nowrap;\n    &-empty,\n    &-hidden {\n      display: none;\n    }\n    &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n    &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft {\n      animation-name: antSlideUpIn;\n    }\n\n    &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n    &.slide-up-appear.slide-up-appear-active&-placement-topLeft {\n      animation-name: antSlideDownIn;\n    }\n\n    &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft {\n      animation-name: antSlideUpOut;\n    }\n\n    &.slide-up-leave.slide-up-leave-active&-placement-topLeft {\n      animation-name: antSlideDownOut;\n    }\n  }\n  &-menu {\n    display: inline-block;\n    vertical-align: top;\n    min-width: 111px;\n    height: 180px;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    border-right: 1px solid @border-color-split;\n    overflow: auto;\n    &:first-child {\n      border-radius: @border-radius-base 0 0 @border-radius-base;\n    }\n    &:last-child {\n      border-right-color: transparent;\n      margin-right: -1px;\n      border-radius: 0 @border-radius-base @border-radius-base 0;\n    }\n    &:only-child {\n      border-radius: @border-radius-base;\n    }\n  }\n  &-menu-item {\n    padding: 7px 16px;\n    cursor: pointer;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    transition: all 0.3s ease;\n    &:hover {\n      background: tint(@primary-color, 90%);\n    }\n    &-disabled {\n      cursor: not-allowed;\n      color: #ccc;\n      &:hover {\n        background: transparent;\n      }\n    }\n    &-active:not(&-disabled) {\n      &,\n      &:hover {\n        background-color: #f7f7f7;\n        font-weight: bold;\n      }\n    }\n    &-expand {\n      position: relative;\n      &:after {\n        content: '\\e600';\n        font-family: 'anticon';\n        .iconfont-size-under-12px(8px);\n        color: #999;\n        position: absolute;\n        right: 15px;\n      }\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/cascader/style/index.less\n **/"",""@import \""../../style/mixins/index\"";\n\n.antCheckboxFn(@checkbox-prefix-cls: ant-checkbox) {\n  @checkbox-inner-prefix-cls: ~\""@{checkbox-prefix-cls}-inner\"";\n  // 一般状态\n  .@{checkbox-prefix-cls} {\n    white-space: nowrap;\n    cursor: pointer;\n    outline: none;\n    display: inline-block;\n    line-height: 1;\n    position: relative;\n    vertical-align: middle;\n\n    &:hover,\n    &-focused {\n      .@{checkbox-inner-prefix-cls} {\n        border-color: #bcbcbc;\n      }\n    }\n\n    &-inner {\n      &:after {\n        transform: rotate(45deg) scale(0);\n        position: absolute;\n        left: 4px;\n        top: 1px;\n        display: table;\n        width: 5px;\n        height: 8px;\n        border: 2px solid #fff;\n        border-top: 0;\n        border-left: 0;\n        content: ' ';\n        transition: all .1s @ease-in-back;\n      }\n\n      position: relative;\n      top: 0;\n      left: 0;\n      display: inline-block;\n      width: 14px;\n      height: 14px;\n      border-width: 1px;\n      border-style: solid;\n      border-radius: 3px;\n      border-color: @border-color-base;\n      background-color: #fff;\n      transition: border-color 0.1s @ease-in-out-back, background-color 0.1s @ease-in-out-back;\n    }\n\n    &-input {\n      position: absolute;\n      left: 0;\n      z-index: 1;\n      cursor: pointer;\n      .opacity(0);\n      top: 0;\n      bottom: 0;\n      right: 0;\n      width: 100%;\n      height: 100%;\n    }\n  }\n\n  // 半选状态\n  .@{checkbox-prefix-cls}-indeterminate {\n    .@{checkbox-inner-prefix-cls} {\n      border-color: @primary-color;\n      background-color: @primary-color;\n      &:after {\n        content: ' ';\n        transform: scale(1);\n        position: absolute;\n        left: 2px;\n        top: 5px;\n        width: 8px;\n        height: 1px;\n      }\n    }\n    &:hover {\n      .@{checkbox-inner-prefix-cls} {\n        border-color: @primary-color;\n      }\n    }\n  }\n  // 选中状态\n  .@{checkbox-prefix-cls}-checked {\n\n    &:hover {\n      .@{checkbox-inner-prefix-cls} {\n        border-color: @primary-color;\n      }\n    }\n\n    .@{checkbox-inner-prefix-cls} {\n      border-color: @primary-color;\n      background-color: @primary-color;\n\n      &:after {\n        transform: rotate(45deg) scale(1);\n        position: absolute;\n        left: 4px;\n        top: 1px;\n        display: table;\n        width: 5px;\n        height: 8px;\n        border: 2px solid #fff;\n        border-top: 0;\n        border-left: 0;\n        content: ' ';\n        transition: all .2s @ease-out-back .1s;\n      }\n    }\n  }\n\n  .@{checkbox-prefix-cls}-disabled {\n    &.@{checkbox-prefix-cls}-checked {\n      &:hover {\n        .@{checkbox-inner-prefix-cls} {\n          border-color: @border-color-base;\n        }\n      }\n\n      .@{checkbox-inner-prefix-cls} {\n        background-color: #f3f3f3;\n        border-color: @border-color-base;\n\n        &:after {\n          animation-name: none;\n          border-color: #ccc;\n        }\n      }\n    }\n\n    &:hover {\n      .@{checkbox-inner-prefix-cls} {\n        border-color: @border-color-base;\n      }\n    }\n\n    .@{checkbox-inner-prefix-cls} {\n      border-color: @border-color-base;\n      background-color: #f3f3f3;\n      &:after {\n        animation-name: none;\n        border-color: #f3f3f3;\n      }\n    }\n\n    .@{checkbox-inner-prefix-cls}-input {\n      cursor: default;\n    }\n\n    & + span {\n      color: #ccc;\n      cursor: @cursor-disabled;\n    }\n  }\n\n  .@{checkbox-prefix-cls}-wrapper {\n    cursor: pointer;\n    font-size: @font-size-base;\n    display: inline-block;\n    & + & {\n      margin-left: 8px;\n    }\n  }\n\n  .@{checkbox-prefix-cls}-wrapper + span,\n  .@{checkbox-prefix-cls} + span {\n    margin-left: 8px;\n    margin-right: 8px;\n  }\n\n  .@{checkbox-prefix-cls}-wrapper + span {\n    display: inline-block;\n  }\n\n  .@{checkbox-prefix-cls}-group {\n    font-size: @font-size-base;\n    &-item {\n      display: inline-block;\n    }\n  }\n\n  @ie8: \\0screen;\n\n  // IE8 hack for https://github.com/ant-design/ant-design/issues/2148\n  @media @ie8 {\n    .@{checkbox-prefix-cls}-checked .@{checkbox-prefix-cls}-inner:before,\n    .@{checkbox-prefix-cls}-checked .@{checkbox-prefix-cls}-inner:after {\n      font-family: 'anticon';\n      content: '\\E62E';\n      font-weight: bold;\n      font-size: 8px;\n      border: 0;\n      color: #fff;\n      left: 2px;\n      top: 3px;\n      position: absolute;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/checkbox/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""./mixin\"";\n\n// Grid system\n.ant-row {\n  .make-row();\n  display: block;\n}\n\n.ant-row-flex {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n\n  &:before,\n  &:after {\n    display: flex;\n  }\n}\n\n// x轴原点\n.ant-row-flex-start {\n  justify-content: flex-start;\n}\n\n// x轴居中\n.ant-row-flex-center {\n  justify-content: center;\n}\n\n// x轴反方向\n.ant-row-flex-end {\n  justify-content: flex-end;\n}\n\n// x轴平分\n.ant-row-flex-space-between {\n  justify-content: space-between;\n}\n\n// x轴有间隔地平分\n.ant-row-flex-space-around {\n  justify-content: space-around;\n}\n\n// 顶部对齐\n.ant-row-flex-top {\n  align-items: flex-start;\n}\n\n// 居中对齐\n.ant-row-flex-middle {\n  align-items: center;\n}\n\n// 底部对齐\n.ant-row-flex-bottom {\n  align-items: flex-end;\n}\n\n.ant-col {\n  position: relative;\n  display: block;\n}\n\n.make-grid-columns();\n.make-grid();\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(-xs);\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(-sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(-md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(-lg);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/layout/style/index.less\n **/"",""@import \""../../style/mixins/index\"";\n\n// mixins for grid system\n// ------------------------\n.make-row(@gutter: @grid-gutter-width) {\n  position: relative;\n  margin-left: (@gutter / -2);\n  margin-right: (@gutter / -2);\n  height: auto;\n  .clearfix;\n}\n\n.make-grid-columns() {\n  .col(@index) {\n    @item: ~\"".ant-col-@{index}, .ant-col-xs-@{index}, .ant-col-sm-@{index}, .ant-col-md-@{index}, .ant-col-lg-@{index}\"";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) {\n    @item: ~\"".ant-col-@{index}, .ant-col-xs-@{index}, .ant-col-sm-@{index}, .ant-col-md-@{index}, .ant-col-lg-@{index}\"";\n    .col((@index + 1), ~\""@{list}, @{item}\"");\n  }\n  .col(@index, @list) when (@index > @grid-columns) {\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      padding-left:  (@grid-gutter-width / 2);\n      padding-right: (@grid-gutter-width / 2);\n    }\n  }\n  .col(1);\n}\n\n.float-grid-columns(@class) {\n  .col(@index) { // initial\n    @item: ~\"".ant-col@{class}-@{index}\"";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\"".ant-col@{class}-@{index}\"";\n    .col((@index + 1), ~\""@{list}, @{item}\"");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n      flex: 0 0 auto;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n// lesshint false\n.loop-grid-columns(@index, @class) when (@index > 0) {\n  .ant-col@{class}-@{index} {\n    display: block;\n    width: percentage((@index / @grid-columns));\n  }\n  .ant-col@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n  .ant-col@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n  .ant-col@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n  .ant-col@{class}-order-@{index} {\n    order: @index;\n  }\n  .loop-grid-columns((@index - 1), @class);\n}\n\n.loop-grid-columns(@index, @class) when (@index = 0) {\n  .ant-col@{class}-@{index} {\n    display: none;\n  }\n  .ant-col-push-@{index} {\n    left: auto;\n  }\n  .ant-col-pull-@{index} {\n    right: auto;\n  }\n}\n\n.make-grid(@class: ~'') {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/layout/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@collapse-prefix-cls: ant-collapse;\n\n.collapse-close() {\n  .iconfont-size-under-12px(7px, 270deg);\n}\n.collapse-open() {\n  .iconfont-size-under-12px(7px, 360deg);\n}\n\n.@{collapse-prefix-cls} {\n  background-color: #f7f7f7;\n  border-radius: 3px;\n  border: 1px solid @border-color-base;\n\n  & > &-item {\n    border-top: 1px solid @border-color-base;\n    &:first-child {\n      border-top: 0;\n    }\n\n    > .@{collapse-prefix-cls}-header {\n      height: 38px;\n      line-height: 38px;\n      padding-left: 32px;\n      color: #666;\n      cursor: pointer;\n      position: relative;\n\n      .arrow {\n        .collapse-close();\n        .iconfont-mixin();\n        position: absolute;\n        color: #666;\n        display: inline-block;\n        margin-right: 8px;\n        line-height: 40px;\n        content: \""\\e611\"";\n        vertical-align: middle;\n        transition: transform 0.24s ease;\n        top: 0;\n        left: 16px;\n        top: ~\""16px \\9\"";\n        left: ~\""0 \\9\"";\n        &:before {\n          content: \""\\e611\"";\n        }\n      }\n    }\n  }\n\n  &-anim-active {\n    transition: height .2s @ease-out;\n  }\n\n  &-content {\n    overflow: hidden;\n    color: @text-color;\n    padding: 0 16px;\n    background-color: #fff;\n\n    & > &-box {\n      padding-top: 16px;\n      padding-bottom: 16px;\n    }\n\n    &-inactive {\n      display: none;\n    }\n  }\n\n  &-item:last-child {\n    > .@{collapse-prefix-cls}-content {\n      border-radius: 0 0 3px 3px;\n    }\n  }\n\n  & > &-item > &-header[aria-expanded=\""true\""] {\n    .arrow {\n      .collapse-open();\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/collapse/style/index.less\n **/"","".@{calendar-prefix-cls}-picker-container {\n  position: absolute;\n  z-index: @zindex-picker;\n\n  &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n  &.slide-up-enter.slide-up-enter-active&-placement-topRight,\n  &.slide-up-appear.slide-up-appear-active&-placement-topLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-topRight {\n    animation-name: antSlideDownIn;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomRight,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomRight {\n    animation-name: antSlideUpIn;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-topLeft,\n  &.slide-up-leave.slide-up-leave-active&-placement-topRight {\n    animation-name: antSlideDownOut;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft,\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomRight {\n    animation-name: antSlideUpOut;\n  }\n}\n\n.@{calendar-prefix-cls}-picker {\n  position: relative;\n  display: inline-block;\n  outline: none;\n  font-size: @font-size-base;\n  transition: opacity 0.3s ease;\n\n  > input {\n    outline: none;\n  }\n  &-clear {\n    opacity: 0;\n    position: absolute;\n    right: 7px;\n    z-index: 1;\n    background: #fff;\n    top: 50%;\n    font-size: 12px;\n    color: #ccc;\n    width: 14px;\n    height: 14px;\n    margin-top: -7px;\n    line-height: 14px;\n    cursor: pointer;\n    transition: color 0.3s ease, opacity 0.15s ease;\n    &:hover {\n      color: #999;\n    }\n  }\n\n  &:hover &-clear {\n    opacity: 1;\n  }\n  &-icon {\n    position: absolute;\n    user-select: none;\n    transition: all .3s @ease-in-out;\n    width: 12px;\n    height: 12px;\n    line-height: 12px;\n    right: 8px;\n    color: #999;\n    top: 50%;\n    margin-top: -6px;\n    &:after {\n      content: \""\\e654\"";\n      font-family: \""anticon\"";\n      font-size: 12px;\n      color: #999;\n      display: inline-block;\n      line-height: 1;\n      vertical-align: bottom;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/Picker.less\n **/"","".calendarPanelHeader(@calendar-prefix-cls) {\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  user-select: none;\n  border-bottom: 1px solid @border-color-split;\n\n  a:hover {\n    color: @link-hover-color;\n  }\n\n  .@{calendar-prefix-cls}-century-select,\n  .@{calendar-prefix-cls}-decade-select,\n  .@{calendar-prefix-cls}-year-select,\n  .@{calendar-prefix-cls}-month-select {\n    padding: 0 2px;\n    font-weight: bold;\n    display: inline-block;\n    color: #666;\n    line-height: 34px;\n  }\n\n  .@{calendar-prefix-cls}-century-select-arrow,\n  .@{calendar-prefix-cls}-decade-select-arrow,\n  .@{calendar-prefix-cls}-year-select-arrow,\n  .@{calendar-prefix-cls}-month-select-arrow {\n    display: none;\n  }\n\n  .@{calendar-prefix-cls}-prev-century-btn,\n  .@{calendar-prefix-cls}-next-century-btn,\n  .@{calendar-prefix-cls}-prev-decade-btn,\n  .@{calendar-prefix-cls}-next-decade-btn,\n  .@{calendar-prefix-cls}-prev-month-btn,\n  .@{calendar-prefix-cls}-next-month-btn,\n  .@{calendar-prefix-cls}-prev-year-btn,\n  .@{calendar-prefix-cls}-next-year-btn {\n    position: absolute;\n    top: 0;\n    color: #999;\n    font-family: Arial,\""Hiragino Sans GB\"",\""Microsoft Yahei\"",\""Microsoft Sans Serif\"",sans-serif;\n    padding: 0 5px;\n    font-size: 16px;\n    display: inline-block;\n    line-height: 34px;\n  }\n\n  .@{calendar-prefix-cls}-prev-century-btn,\n  .@{calendar-prefix-cls}-prev-decade-btn,\n  .@{calendar-prefix-cls}-prev-year-btn {\n    left: 7px;\n  }\n\n  .@{calendar-prefix-cls}-next-century-btn,\n  .@{calendar-prefix-cls}-next-decade-btn,\n  .@{calendar-prefix-cls}-next-year-btn {\n    right: 7px;\n  }\n\n  .@{calendar-prefix-cls}-prev-month-btn {\n    left: 29px;\n  }\n\n  .@{calendar-prefix-cls}-next-month-btn {\n    right: 29px;\n  }\n}\n\n.@{calendar-prefix-cls} {\n  position: relative;\n  outline: none;\n  width: 231px;\n  border: 1px solid @border-color-base;\n  list-style: none;\n  font-size: @font-size-base;\n  text-align: left;\n  background-color: #fff;\n  border-radius: @border-radius-base;\n  box-shadow: @box-shadow-base;\n  background-clip: padding-box;\n  line-height: @line-height-base;\n\n  &-input-wrap {\n    height: 34px;\n    padding: 6px;\n    border-bottom: 1px solid @border-color-split;\n  }\n\n  &-input {\n    border: 0;\n    width: 100%;\n    cursor: auto;\n    outline: 0;\n    height: 22px;\n  }\n\n  &-week-number {\n    width: 286px;\n\n    &-cell {\n      text-align: center;\n    }\n  }\n\n  &-header {\n    .calendarPanelHeader(@calendar-prefix-cls);\n  }\n\n  &-calendar-body {\n    padding: 4px 8px;\n  }\n\n  table {\n    border-collapse: collapse;\n    max-width: 100%;\n    background-color: transparent;\n    width: 100%;\n  }\n\n  table,\n  th,\n  td {\n    border: 0;\n  }\n\n  &-calendar-table {\n    border-spacing: 0;\n    margin-bottom: 0;\n  }\n\n  &-column-header {\n    line-height: 18px;\n    width: 33px;\n    padding: 6px 0;\n    text-align: center;\n    .@{calendar-prefix-cls}-column-header-inner {\n      display: block;\n      font-weight: normal;\n    }\n  }\n\n  &-week-number-header {\n    .@{calendar-prefix-cls}-column-header-inner {\n      display: none;\n    }\n  }\n\n  &-cell {\n    padding: 4px 0;\n  }\n\n  &-date {\n    display: block;\n    margin: 0 auto;\n    color: #666;\n    border-radius: @border-radius-sm;\n    width: 20px;\n    height: 20px;\n    line-height: 18px;\n    border: 1px solid transparent;\n    padding: 0;\n    background: transparent;\n    text-align: center;\n    transition: background 0.3s ease;\n\n    &:hover {\n      background: tint(@primary-color, 90%);\n      cursor: pointer;\n    }\n\n    &:active {\n      color: #fff;\n      background: tint(@primary-color, 20%);\n    }\n  }\n\n  &-today &-date {\n    border-color: @primary-color;\n    font-weight: bold;\n    color: @primary-color;\n  }\n\n  &-last-month-cell &-date,\n  &-next-month-btn-day &-date {\n    color: #ccc;\n  }\n\n  &-selected-day &-date {\n    background: @primary-color;\n    color: #fff;\n    border: 1px solid transparent;\n\n    &:hover {\n      background: @primary-color;\n    }\n  }\n\n  &-disabled-cell &-date {\n    cursor: not-allowed;\n    color: #bcbcbc;\n    background: #f3f3f3;\n    border-radius: 0;\n    width: auto;\n\n    &:hover {\n      background: #f3f3f3;\n    }\n  }\n\n  &-disabled-cell-first-of-row &-date {\n    border-top-left-radius: 4px;\n    border-bottom-left-radius: 4px;\n  }\n\n  &-disabled-cell-last-of-row &-date {\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n  }\n\n  &-footer {\n    padding: 0 15px;\n    height: 38px;\n    line-height: 38px;\n    border-top: 1px solid @border-color-split;\n  }\n\n  &-footer-btn {\n    text-align: center;\n    display: block;\n    line-height: 38px;\n  }\n\n  &-footer > div {\n    display: inline-block;\n  }\n\n  .@{calendar-prefix-cls}-today-btn,\n  .@{calendar-prefix-cls}-clear-btn {\n    display: inline-block;\n    text-align: center;\n    margin: 0 0 0 8px;\n    &-disabled {\n      color: #ccc;\n      cursor: not-allowed;\n    }\n  }\n\n  .@{calendar-prefix-cls}-clear-btn {\n    display: none;\n    position: absolute;\n    right: 5px;\n    text-indent: -76px;\n    overflow: hidden;\n    width: 20px;\n    height: 20px;\n    text-align: center;\n    line-height: 20px;\n    top: 7px;\n    margin: 0;\n  }\n\n  .@{calendar-prefix-cls}-clear-btn:after {\n    content: \""\\e631\"";\n    font-family: \""anticon\"";\n    font-size: 12px;\n    color: #ccc;\n    display: inline-block;\n    line-height: 1;\n    width: 20px;\n    text-indent: 43px;\n    transition: color 0.3s ease;\n  }\n\n  .@{calendar-prefix-cls}-clear-btn:hover:after {\n    color: #999;\n  }\n\n  .@{calendar-prefix-cls}-ok-btn {\n    .btn;\n    .btn-primary;\n    .button-size(@btn-padding-sm; @font-size-base; @border-radius-sm);\n    position: absolute;\n    bottom: 8px;\n    right: 9px;\n\n    &-disabled {\n      .button-color(@btn-disable-color; @btn-disable-bg; @btn-disable-border);\n      cursor: not-allowed;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/Calendar.less\n **/"",""@input-box-height: 34px;\n\n.@{calendar-prefix-cls}-range-picker.ant-input {\n  padding-right: 26px;\n}\n\n.@{calendar-prefix-cls}-range-picker-input {\n  background-color: transparent;\n  border: 0;\n  height: 18px;\n  line-height: 18px;\n  outline: 0;\n  width: 43%;\n  text-align: center;\n\n  &[disabled] {\n    cursor: not-allowed;\n  }\n}\n\n.@{calendar-prefix-cls}-range-picker-separator {\n  color: #999;\n}\n\n.@{calendar-prefix-cls}-range {\n  width: 470px;\n  overflow: hidden;\n\n  &-part {\n    width: 50%;\n  }\n\n  &-left {\n    float: left;\n  }\n\n  &-right {\n    float: right;\n  }\n\n  &-middle {\n    position: absolute;\n    left: 50%;\n    width: 20px;\n    margin-left: -132px;\n    text-align: center;\n    height: @input-box-height;\n    line-height: @input-box-height;\n    color: #999;\n  }\n\n  &-right .@{calendar-prefix-cls}-date-input-wrap {\n    margin-left: -118px;\n  }\n\n  &.@{calendar-prefix-cls}-time &-middle {\n    margin-left: -29px;\n  }\n\n  &.@{calendar-prefix-cls}-time &-right .@{calendar-prefix-cls}-date-input-wrap {\n    margin-left: -15px;\n  }\n\n  .@{calendar-prefix-cls}-input-wrap {\n    position: relative;\n    height: @input-box-height;\n  }\n  .@{calendar-prefix-cls}-input {\n    border: 1px solid @border-color-base;\n    border-radius: @border-radius-sm;\n  }\n  .@{calendar-prefix-cls}-input,\n  .@{timepicker-prefix-cls}-input {\n    .input;\n    border-radius: @border-radius-sm;\n    height: @input-height-sm;\n    width: 96px;\n  }\n  .@{timepicker-prefix-cls}-icon {\n    display: none;\n  }\n\n  .@{calendar-prefix-cls}-calendar-body,\n  .@{calendar-prefix-cls}-decade-panel-body,\n  .@{calendar-prefix-cls}-year-panel-body,\n  .@{calendar-prefix-cls}-month-panel-body {\n    border-bottom: 1px solid @border-color-split;\n  }\n\n  &.@{calendar-prefix-cls}-week-number {\n    width: 574px;\n\n    .@{calendar-prefix-cls}-range-part {\n      width: 286px;\n    }\n  }\n\n  .@{calendar-prefix-cls}-year-panel,\n  .@{calendar-prefix-cls}-month-panel {\n    top: @input-box-height;\n  }\n  .@{calendar-prefix-cls}-month-panel .@{calendar-prefix-cls}-year-panel {\n    top: 0;\n  }\n  .@{calendar-prefix-cls}-decade-panel-table,\n  .@{calendar-prefix-cls}-year-panel-table,\n  .@{calendar-prefix-cls}-month-panel-table {\n    height: 208px;\n  }\n\n  .@{calendar-prefix-cls}-in-range-cell {\n    border-radius: 0;\n    position: relative;\n    > div {\n      position: relative;\n      z-index: 1;\n    }\n    &:before {\n      content: '';\n      display: block;\n      background: tint(@primary-color, 90%);\n      border-radius: 0;\n      border: 0;\n      position: absolute;\n      top: 4px;\n      bottom: 4px;\n      left: 0;\n      right: 0;\n    }\n  }\n\n  &-bottom {\n    text-align: right;\n  }\n  .@{calendar-prefix-cls}-ok-btn {\n    position: static;\n    height: 22px;\n    margin: 8px;\n  }\n  .@{calendar-prefix-cls}-today-btn {\n    margin: 8px 12px;\n    height: 22px;\n    line-height: 22px;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/RangePicker.less\n **/"","".@{calendar-prefix-cls}-time {\n  // Change display order in DOM\n  .@{calendar-prefix-cls}-input-wrap {\n    direction: rtl;\n    .@{calendar-prefix-cls}-date-input-wrap,\n    .@{calendar-prefix-cls}-time-picker-wrap {\n      direction: ltr;\n      display: inline-block;\n    }\n    .@{timepicker-prefix-cls}-panel,\n    .@{calendar-prefix-cls}-clear-btn {\n      direction: ltr;\n    }\n  }\n  .@{calendar-prefix-cls}-input,\n  .@{timepicker-prefix-cls}-input {\n    .input;\n    border-radius: @border-radius-sm;\n    height: @input-height-sm;\n    width: 96px;\n    margin-right: 6px;\n  }\n  .@{calendar-prefix-cls}-input {\n    padding-right: 21px;\n  }\n  .@{timepicker-prefix-cls}-panel {\n    min-width: 168px;\n  }\n  .@{timepicker-prefix-cls}-icon {\n    display: none;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/TimePicker.less\n **/"","".@{calendar-prefix-cls}-month-panel {\n  left: 0;\n  top: 34px;\n  bottom: 0;\n  right: 0;\n  background: #fff;\n  z-index: 10;\n  position: absolute;\n  outline: none;\n  border-radius: @border-radius-base;\n}\n\n.@{calendar-prefix-cls}-month-panel-hidden {\n  display: none;\n}\n\n.@{calendar-prefix-cls}-month-panel-header {\n  .calendarPanelHeader(~\""@{calendar-prefix-cls}-month-panel\"");\n}\n\n.@{calendar-prefix-cls}-month-panel-table {\n  table-layout: fixed;\n  width: 100%;\n  height: 248px;\n  border-collapse: separate;\n}\n\n.@{calendar-prefix-cls}-month-panel-selected-cell .@{calendar-prefix-cls}-month-panel-month {\n  background: @primary-color;\n  color: #fff;\n\n  &:hover {\n    background: @primary-color;\n    color: #fff;\n  }\n}\n\n.@{calendar-prefix-cls}-month-panel-cell {\n  text-align: center;\n\n  &-disabled .@{calendar-prefix-cls}-month-panel-month {\n    &,\n    &:hover {\n      cursor: not-allowed;\n      color: #bcbcbc;\n      background: #f3f3f3;\n    }\n  }\n}\n\n.@{calendar-prefix-cls}-month-panel-month {\n  display: inline-block;\n  margin: 0 auto;\n  color: #666;\n  background: transparent;\n  text-align: center;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 6px;\n  border-radius: 4px;\n  transition: background 0.3s ease;\n\n  &:hover {\n    background: tint(@primary-color, 90%);\n    cursor: pointer;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/MonthPanel.less\n **/"","".@{calendar-prefix-cls}-year-panel {\n  left: 0;\n  top: 34px;\n  bottom: 0;\n  right: 0;\n  background: #fff;\n  z-index: 10;\n  position: absolute;\n  outline: none;\n  border-radius: @border-radius-base;\n}\n\n.@{calendar-prefix-cls}-year-panel-hidden {\n  display: none;\n}\n\n.@{calendar-prefix-cls}-year-panel-header {\n  .calendarPanelHeader(~\""@{calendar-prefix-cls}-year-panel\"");\n}\n\n.@{calendar-prefix-cls}-year-panel-table {\n  table-layout: fixed;\n  width: 100%;\n  height: 248px;\n  border-collapse: separate;\n}\n\n.@{calendar-prefix-cls}-year-panel-cell {\n  text-align: center;\n}\n\n.@{calendar-prefix-cls}-year-panel-year {\n  display: inline-block;\n  margin: 0 auto;\n  color: #666;\n  background: transparent;\n  text-align: center;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 6px;\n  border-radius: 4px;\n  transition: background 0.3s ease;\n\n  &:hover {\n    background: tint(@primary-color, 90%);\n    cursor: pointer;\n  }\n}\n\n.@{calendar-prefix-cls}-year-panel-selected-cell .@{calendar-prefix-cls}-year-panel-year {\n  background: @primary-color;\n  color: #fff;\n\n  &:hover {\n    background: @primary-color;\n    color: #fff;\n  }\n}\n\n.@{calendar-prefix-cls}-year-panel-last-decade-cell,\n.@{calendar-prefix-cls}-year-panel-next-decade-cell {\n  .@{calendar-prefix-cls}-year-panel-year {\n    user-select: none;\n  }\n  .@{calendar-prefix-cls}-year-panel-year:before {\n    content: \""\\e600\"";\n    font-family: \""anticon\"" !important;\n  }\n}\n\n.@{calendar-prefix-cls}-year-panel-last-decade-cell {\n  .@{calendar-prefix-cls}-year-panel-year:before {\n    content: \""\\e601\"";\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/YearPanel.less\n **/"","".@{calendar-prefix-cls}-decade-panel {\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  background: #fff;\n  z-index: 10;\n  position: absolute;\n  outline: none;\n  border-radius: @border-radius-base;\n}\n\n.@{calendar-prefix-cls}-decade-panel-hidden {\n  display: none;\n}\n\n.@{calendar-prefix-cls}-decade-panel-header {\n  .calendarPanelHeader(~\""@{calendar-prefix-cls}-decade-panel\"");\n}\n\n.@{calendar-prefix-cls}-decade-panel-table {\n  table-layout: fixed;\n  width: 100%;\n  height: 248px;\n  border-collapse: separate;\n}\n\n.@{calendar-prefix-cls}-decade-panel-cell {\n  text-align: center;\n}\n\n.@{calendar-prefix-cls}-decade-panel-decade {\n  display: inline-block;\n  margin: 0 auto;\n  color: #666;\n  background: transparent;\n  text-align: center;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 6px;\n  border-radius: 4px;\n  transition: background 0.3s ease;\n\n  &:hover {\n    background: tint(@primary-color, 90%);\n    cursor: pointer;\n  }\n}\n\n.@{calendar-prefix-cls}-decade-panel-selected-cell .@{calendar-prefix-cls}-decade-panel-decade {\n  background: @primary-color;\n  color: #fff;\n\n  &:hover {\n    background: @primary-color;\n    color: #fff;\n  }\n}\n\n.@{calendar-prefix-cls}-decade-panel-last-century-cell,\n.@{calendar-prefix-cls}-decade-panel-next-century-cell {\n  .@{calendar-prefix-cls}-decade-panel-decade {\n    user-select: none;\n  }\n  .@{calendar-prefix-cls}-decade-panel-decade:before {\n    content: \""\\e600\"";\n    font-family: \""anticon\"" !important;\n  }\n}\n\n.@{calendar-prefix-cls}-decade-panel-last-century-cell {\n  .@{calendar-prefix-cls}-decade-panel-decade:before {\n    content: \""\\e601\"";\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/DecadePanel.less\n **/"","".@{calendar-prefix-cls}-month {\n  .@{calendar-prefix-cls}-month-panel,\n  .@{calendar-prefix-cls}-year-panel {\n    top: 0;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/MonthPicker.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n\n@timepicker-prefix-cls: ant-time-picker;\n\n.@{timepicker-prefix-cls}-panel {\n  max-width: 168px;\n  z-index: @zindex-picker;\n  position: absolute;\n\n  &-inner {\n    display: inline-block;\n    position: relative;\n    outline: none;\n    border: 1px solid @border-color-base;\n    list-style: none;\n    font-size: 12px;\n    text-align: left;\n    background-color: #fff;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n    background-clip: padding-box;\n    border: 1px solid #ccc;\n    line-height: 1.5;\n    overflow: hidden;\n  }\n\n  &-input {\n    margin: 0;\n    padding: 0;\n    border: 0;\n    width: 100%;\n    cursor: auto;\n    line-height: 1.5;\n    outline: 0;\n\n    &-wrap {\n      box-sizing: border-box;\n      position: relative;\n      padding: 6px;\n      border-bottom: 1px solid @border-color-split;\n    }\n\n    &-invalid {\n      border-color: red;\n    }\n  }\n\n  &-clear-btn {\n    position: absolute;\n    right: 5px;\n    cursor: pointer;\n    overflow: hidden;\n    width: 20px;\n    height: 20px;\n    text-align: center;\n    line-height: 20px;\n    top: 5px;\n    margin: 0;\n  }\n\n  &-clear-btn:after {\n    content: \""\\e631\"";\n    font-family: \""anticon\"";\n    font-size: 12px;\n    color: #ccc;\n    display: inline-block;\n    line-height: 1;\n    width: 20px;\n    transition: color 0.3s ease;\n  }\n\n  &-clear-btn:hover:after {\n    color: #999;\n  }\n\n  &-narrow &-input-wrap {\n    max-width: 111px;\n  }\n\n  &-select {\n    float: left;\n    font-size: 12px;\n    border: 1px solid @border-color-split;\n    border-width: 0 1px;\n    margin-left: -1px;\n    box-sizing: border-box;\n    width: 56px;\n    overflow: hidden;\n    position: relative; // Fix chrome weird render bug\n\n    &:hover {\n      overflow-y: auto;\n    }\n\n    &:first-child {\n      border-left: 0;\n      margin-left: 0;\n    }\n\n    &:last-child {\n      border-right: 0;\n    }\n\n    ul {\n      list-style: none;\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0;\n      width: 100%;\n      max-height: 144px;\n    }\n\n    li {\n      list-style: none;\n      box-sizing: content-box;\n      margin: 0;\n      padding: 0 0 0 16px;\n      width: 100%;\n      height: 24px;\n      line-height: 24px;\n      text-align: left;\n      cursor: pointer;\n      user-select: none;\n      transition: background 0.3s ease;\n    }\n\n    li:last-child:after {\n      content: '';\n      height: 120px;\n      display: block;\n    }\n\n    li:hover {\n      background: tint(@primary-color, 90%);\n    }\n\n    li&-option-selected {\n      background: #f7f7f7;\n      font-weight: bold;\n    }\n\n    li&-option-disabled {\n      color: @btn-disable-color;\n      &:hover {\n        background: transparent;\n        cursor: @cursor-disabled;\n      }\n    }\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n  &.slide-up-enter.slide-up-enter-active&-placement-topRight,\n  &.slide-up-appear.slide-up-appear-active&-placement-topLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-topRight {\n    animation-name: antSlideDownIn;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomRight,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomRight {\n    animation-name: antSlideUpIn;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-topLeft,\n  &.slide-up-leave.slide-up-leave-active&-placement-topRight {\n    animation-name: antSlideDownOut;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft,\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomRight {\n    animation-name: antSlideUpOut;\n  }\n}\n\n.@{timepicker-prefix-cls} {\n  position: relative;\n  display: inline-block;\n  outline: none;\n  font-size: @font-size-base;\n  transition: opacity 0.3s ease;\n\n  &-input {\n    .input;\n    width: 100px;\n  }\n\n  &-large &-input {\n    .input-lg;\n  }\n\n  &-small &-input {\n    .input-sm;\n  }\n\n  &-open {\n    opacity: 0;\n  }\n\n  &-icon {\n    position: absolute;\n    user-select: none;\n    transition: all .3s @ease-in-out;\n    width: 12px;\n    height: 12px;\n    line-height: 12px;\n    right: 8px;\n    color: #999;\n    top: 50%;\n    margin-top: -6px;\n    &:after {\n      content: \""\\e643\"";\n      font-family: \""anticon\"";\n      font-size: 12px;\n      color: #999;\n      display: inline-block;\n      line-height: 1;\n      vertical-align: bottom;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/time-picker/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@dropdown-prefix-cls: ant-dropdown;\n\n.@{dropdown-prefix-cls} {\n  position: absolute;\n  left: -9999px;\n  top: -9999px;\n  z-index: @zindex-dropdown;\n  display: block;\n  font-size: 12px;\n  font-weight: normal;\n  line-height: 1.5;\n\n  &-wrap {\n    position: relative;\n\n    .ant-btn > .@{iconfont-css-prefix}-down {\n      .iconfont-size-under-12px(10px);\n    }\n\n    .anticon-down:before {\n      transition: transform 0.2s ease;\n    }\n  }\n\n  &-wrap-open {\n    .anticon-down:before {\n      transform: rotate(180deg);\n    }\n  }\n\n  &-hidden,\n  &-menu-hidden {\n    display: none;\n  }\n\n  &-menu {\n    outline: none;\n    position: relative;\n    list-style-type: none;\n    padding: 0;\n    margin: 0;\n    text-align: left;\n    background-color: #fff;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n    background-clip: padding-box;\n    border: 1px solid @border-color-base;\n\n    &-item,\n    &-submenu-title {\n      padding: 7px 15px;\n      margin: 0;\n      clear: both;\n      font-size: 12px;\n      font-weight: normal;\n      color: #666;\n      white-space: nowrap;\n      cursor: pointer;\n      transition: background 0.3s ease;\n\n      > a {\n        color: #666;\n        display: block;\n        padding: 7px 15px;\n        margin: -7px -15px;\n      }\n\n      &:hover {\n        background-color: tint(@primary-color, 90%);\n      }\n\n      &-disabled {\n        color: #ccc;\n        cursor: not-allowed;\n        pointer-events: none;\n\n        &:hover {\n          color: #ccc;\n          background-color: #fff;\n          cursor: not-allowed;\n        }\n      }\n\n      &:first-child {\n        border-radius: @border-radius-base @border-radius-base 0 0;\n      }\n\n      &:last-child {\n        border-radius: 0 0 @border-radius-base @border-radius-base;\n      }\n\n      &:only-child {\n        border-radius: @border-radius-base;\n      }\n\n      &-divider {\n        height: 1px;\n        overflow: hidden;\n        background-color: @border-color-split;\n        line-height: 0;\n      }\n    }\n\n    &-submenu-title:after {\n      font-family: \""anticon\"" !important;\n      position: absolute;\n      content: \""\\e600\"";\n      right: 15px;\n      color: #999;\n      .iconfont-size-under-12px(8px);\n    }\n\n    &-submenu-vertical {\n      position: relative;\n    }\n\n    &-submenu-vertical > & {\n      top: 0;\n      left: 100%;\n      position: absolute;\n      min-width: 100%;\n      margin-left: 4px;\n      transform-origin: 0 0;\n    }\n\n    &-submenu:first-child &-submenu-title {\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n\n    &-submenu:last-child &-submenu-title {\n      border-radius: 0 0 @border-radius-base @border-radius-base;\n    }\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft {\n    animation-name: antSlideUpIn;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-topLeft {\n    animation-name: antSlideDownIn;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft {\n    animation-name: antSlideUpOut;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-topLeft {\n    animation-name: antSlideDownOut;\n  }\n}\n\n.@{dropdown-prefix-cls}-link {\n  font-size: 12px;\n  .anticon-down {\n    .iconfont-size-under-12px(8px);\n    font-weight: bold;\n  }\n}\n\n.@{dropdown-prefix-cls}-button {\n  &.ant-btn-group > .ant-btn:last-child:not(:first-child) {\n    padding-right: 7px;\n  }\n  .anticon-down {\n    .iconfont-size-under-12px(10px);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/dropdown/style/index.less\n **/"","".form-control-validation(@text-color: @input-color; @border-color: @input-border-color; @background-color: @input-bg) {\n  .ant-form-explain,\n  .ant-form-split {\n    color: @text-color;\n  }\n  // 输入框的不同校验状态\n  .ant-input {\n    border-color: @border-color;\n    box-shadow: 0 0 0 2px fade(@border-color, 20%);\n\n    &:not([disabled]):hover {\n      border-color: @border-color;\n    }\n  }\n\n  .ant-calendar-picker-open .ant-calendar-picker-input {\n    box-shadow: 0 0 0 2px fade(@border-color, 20%);\n  }\n\n  .ant-input-group-addon {\n    color: @text-color;\n    border-color: @border-color;\n    background-color: @background-color;\n  }\n\n  .has-feedback {\n    color: @text-color;\n  }\n}\n\n// Reset form styles\n// -----------------------------\n// Based on Bootstrap framework\n.reset-form() {\n  fieldset {\n    padding: 0;\n    margin: 0;\n    border: 0;\n    min-width: 0;\n  }\n\n  legend {\n    display: block;\n    width: 100%;\n    padding: 0;\n    margin-bottom: 20px;\n    font-size: 14px;\n    line-height: inherit;\n    color: @legend-color;\n    border: 0;\n    border-bottom: 1px solid @legend-border-color;\n  }\n\n  label {\n    font-size: @font-size-base;\n  }\n\n  input[type=\""search\""] {\n    box-sizing: border-box;\n  }\n\n  // Position radios and checkboxes better\n  input[type=\""radio\""],\n  input[type=\""checkbox\""] {\n    line-height: normal;\n  }\n\n  input[type=\""file\""] {\n    display: block;\n  }\n\n  // Make range inputs behave like textual form controls\n  input[type=\""range\""] {\n    display: block;\n    width: 100%;\n  }\n\n  // Make multiple select elements height not fixed\n  select[multiple],\n  select[size] {\n    height: auto;\n  }\n\n  // Focus for file, radio, and checkbox\n  input[type=\""file\""]:focus,\n  input[type=\""radio\""]:focus,\n  input[type=\""checkbox\""]:focus {\n    outline: thin dotted;\n    outline: 5px auto -webkit-focus-ring-color;\n    outline-offset: -2px;\n  }\n\n  // Adjust output element\n  output {\n    display: block;\n    padding-top: 15px;\n    font-size: @font-size-base;\n    line-height: @line-height-base;\n    color: @input-color;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/form/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n@import \""../../button/style/mixin\"";\n@import \""../../layout/style/mixin\"";\n@import \""./mixin\"";\n\n@form-prefix-cls: ant-form;\n\n.reset-form();\n\nlabel {\n  position: relative;\n\n  > .@{iconfont-css-prefix} {\n    vertical-align: top;\n    font-size: @font-size-base;\n  }\n}\n\n.@{form-prefix-cls}-item-required:before {\n  display: inline-block;\n  margin-right: 4px;\n  content: \""*\"";\n  font-family: SimSun;\n  font-size: @font-size-base;\n  color: @label-required-color;\n}\n\n// Radio && Checkbox\ninput[type=\""radio\""],\ninput[type=\""checkbox\""] {\n  &[disabled],\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n  }\n}\n\n// These classes are used directly on <label>s\n.ant-radio-inline,\n.ant-radio-vertical,\n.ant-checkbox-inline,\n.ant-checkbox-vertical {\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: @cursor-disabled;\n  }\n}\n// These classes are used on elements with <label> descendants\n.ant-radio,\n.ant-checkbox {\n  &.disabled,\n  fieldset[disabled] & {\n    label {\n      cursor: @cursor-disabled;\n    }\n  }\n}\n\n// Form items\n// You should wrap labels and controls in .@{form-prefix-cls}-item for optimum spacing\n.@{form-prefix-cls}-item {\n  font-size: @font-size-base;\n  margin-bottom: @form-item-margin-bottom;\n  color: #666;\n\n  // nested FormItem\n  & & {\n    margin-bottom: -@form-item-margin-bottom;\n  }\n\n  &-control {\n    line-height: 32px;\n    position: relative;\n    .clearfix;\n  }\n\n  &-with-help {\n    margin-bottom: @form-item-margin-bottom - @font-size-base * @line-height-base - 3;\n  }\n\n  > label {\n    color: @label-color;\n    text-align: right;\n    vertical-align: middle;\n    padding: 7px 0;\n\n    &:after {\n      content: \"":\"";\n      margin: 0 8px 0 2px;\n      position: relative;\n      top: -0.5px;\n    }\n  }\n\n  .ant-switch {\n    margin: 4px 0;\n  }\n}\n\n.@{form-prefix-cls}-explain {\n  line-height: 1.5;\n  margin-top: 3px;\n}\n\n.@{form-prefix-cls}-explain,\n.@{form-prefix-cls}-extra {\n  color: #999;\n}\n\n.@{form-prefix-cls}-text {\n  display: inline-block;\n  padding-right: 8px;\n}\n\n.@{form-prefix-cls}-split {\n  display: block;\n  text-align: center;\n}\n\n// 表单下的输入框尺寸唯一: 大尺寸\nform {\n  .has-feedback {\n    .ant-input {\n      padding-right: 24px;\n    }\n  }\n\n  textarea.ant-input {\n    height: auto;\n  }\n\n  // input[type=file]\n  .ant-upload {\n    background: transparent;\n  }\n\n  input[type=\""radio\""],\n  input[type=\""checkbox\""] {\n    width: 14px;\n    height: 14px;\n  }\n\n  // Radios and checkboxes on same line\n  .ant-radio-inline,\n  .ant-checkbox-inline {\n    display: inline-block;\n    vertical-align: middle;\n    font-weight: normal;\n    cursor: pointer;\n    margin-left: 8px;\n\n    &:first-child {\n      margin-left: 0;\n    }\n  }\n\n  .ant-checkbox-vertical,\n  .ant-radio-vertical {\n    display: block;\n  }\n\n  .ant-input-number {\n    margin-top: -1px;\n    margin-right: 8px;\n  }\n\n  .ant-select,\n  .ant-cascader-picker {\n    width: 100%;\n  }\n}\n\n// Input combined with select\n.ant-input-group-wrap {\n  .ant-select-selection {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n    &:hover {\n      border-color: @border-color-base;\n    }\n  }\n\n  .ant-select-selection--single {\n    margin-left: -1px;\n    height: @input-height-lg;\n    background-color: #eee;\n    .ant-select-selection__rendered {\n      padding-left: 8px;\n      padding-right: 25px;\n      line-height: 30px;\n    }\n  }\n\n  .ant-select-open .ant-select-selection {\n    border-color: @border-color-base;\n    box-shadow: none;\n  }\n}\n\n// Form layout\n//== Horizontal Form\n.@{form-prefix-cls}-horizontal {\n  .@{form-prefix-cls}-item {\n    .make-row;\n  }\n\n  .ant-radio-inline,\n  .ant-checkbox-inline {\n    vertical-align: baseline;\n  }\n}\n\n//== Inline Form\n.@{form-prefix-cls}-inline {\n  .@{form-prefix-cls}-item {\n    display: inline-block;\n    margin-right: 10px;\n    margin-bottom: 0;\n\n    &-with-help {\n      margin-bottom: 24px;\n    }\n\n    > div {\n      display: inline-block;\n    }\n  }\n\n  .ant-input {\n    display: inline-block;\n    vertical-align: middle;\n  }\n\n  .@{form-prefix-cls}-text {\n    display: inline-block;\n  }\n\n  .has-feedback {\n    display: inline-block;\n  }\n\n  // Fix https://github.comdesigndesign/issues/1040\n  .@{form-prefix-cls}-explain {\n    position: absolute;\n  }\n}\n\n.@{form-prefix-cls}-horizontal,\n.@{form-prefix-cls}-inline {\n  label {\n    > input[type=\""radio\""],\n    > input[type=\""checkbox\""] {\n      margin-right: 4px;\n    }\n  }\n}\n\n// Validation state\n.has-success,\n.has-warning,\n.has-error,\n.is-validating {\n  &.has-feedback:after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    visibility: visible;\n    font-family: \""anticon\"" !important;\n    .square(@input-height-lg);\n    line-height: @input-height-lg + 2;\n    text-align: center;\n    font-size: 14px;\n    animation: zoomIn .3s @ease-out-back;\n  }\n}\n\n.has-success {\n  &.has-feedback:after {\n    animation-name: diffZoomIn1 !important;\n  }\n}\n\n.has-error {\n  &.has-feedback:after {\n    animation-name: diffZoomIn2 !important;\n  }\n}\n\n.has-warning {\n  &.has-feedback:after {\n    animation-name: diffZoomIn3 !important;\n  }\n}\n\n.has-success {\n  .ant-input {\n    border-color: @input-border-color;\n    box-shadow: none;\n  }\n\n  &.has-feedback:after {\n    content: '\\e62f';\n    color: @success-color;\n  }\n}\n\n.has-warning {\n  .form-control-validation(@warning-color; @warning-color;);\n\n  &.has-feedback:after {\n    content: '\\e634';\n    color: @warning-color;\n  }\n\n  //select\n  .ant-select {\n    &-selection {\n      border-color: @warning-color;\n      box-shadow: 0 0 0 2px fade(@warning-color, 20%);\n    }\n    &-arrow {\n      color: @warning-color;\n    }\n  }\n\n  //datepicker\n  .ant-calendar-picker-icon:after {\n    color: @warning-color;\n  }\n\n  //timepicker\n  .ant-time-picker-icon:after {\n    color: @warning-color;\n  }\n\n  //input-number\n  .ant-input-number {\n    border-color: @warning-color;\n    box-shadow: 0 0 0 2px fade(@warning-color, 20%);\n    &:not([disabled]):hover {\n      border-color: @warning-color;\n    }\n  }\n}\n\n.has-error {\n  .form-control-validation(@error-color; @error-color;);\n\n  &.has-feedback:after {\n    content: '\\e631';\n    color: @error-color;\n  }\n\n  //select\n  .ant-select {\n    &-selection {\n      border-color: @error-color;\n      box-shadow: 0 0 0 2px fade(@error-color, 20%);\n    }\n\n    &-arrow {\n      color: @error-color;\n    }\n  }\n\n  //datepicker\n  .ant-calendar-picker-icon:after {\n    color: @error-color;\n  }\n\n  //timepicker\n  .ant-time-picker-picker-icon:after {\n    color: @error-color;\n  }\n\n  //input-number\n  .ant-input-number {\n    border-color: @error-color;\n    box-shadow: 0 0 0 2px fade(@error-color, 20%);\n    &:not([disabled]):hover {\n      border-color: @error-color;\n    }\n  }\n}\n\n.is-validating {\n  &.has-feedback:after {\n    display: inline-block;\n    animation: loadingCircle 1s infinite linear;\n    content: \""\\e6a1\"";\n    color: #999;\n  }\n}\n\n.ant-advanced-search-form {\n  .@{form-prefix-cls}-item {\n    margin-bottom: 16px;\n  }\n  .ant-input,\n  .ant-input-group .ant-input,\n  .ant-input-group .ant-input-group-addon {\n    height: 28px;\n  }\n}\n\n// need there different zoom animation\n// otherwise won't trigger anim\n@keyframes diffZoomIn1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n@keyframes diffZoomIn2 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n@keyframes diffZoomIn3 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/form/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n\n@input-number-prefix-cls: ant-input-number;\n\n.handler-disabled() {\n  opacity: 0.72;\n  color: #ccc !important;\n  cursor: not-allowed;\n}\n\n.@{input-number-prefix-cls} {\n  .input();\n  margin: 0;\n  padding: 0;\n  line-height: 28px;\n  font-size: 12px;\n  height: 28px;\n  display: inline-block;\n  vertical-align: middle;\n  border: 1px solid @border-color-base;\n  border-radius: @border-radius-base;\n  overflow: hidden;\n  width: 80px;\n\n  &-handler {\n    text-align: center;\n    line-height: 0;\n    height: 14px;\n    overflow: hidden;\n    color: #999;\n    position: relative;\n    transition: all 0.1s linear;\n    display: block;\n    width: 100%;\n    &:hover {\n      background: #fefefe;\n    }\n    &:hover &-up-inner,\n    &:hover &-down-inner {\n      color: tint(@primary-color, 20%);\n    }\n  }\n\n  &-handler-up-inner,\n  &-handler-down-inner {\n    .iconfont-mixin();\n    line-height: 12px;\n    user-select: none;\n    position: absolute;\n    width: 12px;\n    height: 12px;\n    transition: all 0.1s linear;\n    .iconfont-size-under-12px(7px);\n    right: 4px;\n    color: #999;\n  }\n\n  &:hover {\n    .hover();\n  }\n\n  &-focused {\n    .active();\n  }\n\n  &-disabled {\n    .disabled();\n  }\n\n  &-input-wrap {\n    overflow: hidden;\n    height: 28px;\n  }\n\n  &-input {\n    width: 100%;\n    text-align: left;\n    outline: 0;\n    -moz-appearance: textfield;\n    line-height: 28px;\n    height: 28px;\n    transition: all 0.3s linear;\n    color: #666;\n    border: 0;\n    border-radius: @border-radius-base;\n    padding: 0 7px;\n\n    &[disabled] {\n      .disabled();\n    }\n  }\n\n  &-lg {\n    padding: 0;\n    .@{input-number-prefix-cls}-handler-wrap {\n      height: 32px;\n    }\n    .@{input-number-prefix-cls}-input-wrap {\n      height: 32px;\n    }\n    .@{input-number-prefix-cls}-handler {\n      height: 16px;\n    }\n\n    input {\n      height: 32px;\n      line-height: 32px;\n    }\n\n    .@{input-number-prefix-cls}-handler-up-inner {\n      top: 2px;\n    }\n    .@{input-number-prefix-cls}-handler-down-inner {\n      bottom: 2px;\n    }\n    .@{input-number-prefix-cls}-handler-up:hover {\n      height: 18px;\n    }\n  }\n\n  &-sm {\n    padding: 0;\n    .@{input-number-prefix-cls}-handler-wrap {\n      height: 22px;\n    }\n    .@{input-number-prefix-cls}-input-wrap {\n      height: 22px;\n    }\n    .@{input-number-prefix-cls}-handler {\n      height: 11px;\n    }\n\n    input {\n      height: 22px;\n      line-height: 22px;\n      margin-top: -1px;\n      vertical-align: top;\n    }\n    .@{input-number-prefix-cls}-handler-up-inner {\n      top: -1px;\n    }\n    .@{input-number-prefix-cls}-handler-down-inner {\n      bottom: -1px;\n    }\n    .@{input-number-prefix-cls}-handler-up:hover {\n      height: 13px;\n    }\n    .@{input-number-prefix-cls}-handler-down:hover .@{input-number-prefix-cls}-handler-down-inner {\n      bottom: 4px;\n    }\n  }\n\n  &-handler-wrap {\n    border-left: 1px solid @border-color-base;\n    width: 22px;\n    height: 28px;\n    background: #fff;\n    position: absolute;\n    top: 0;\n    right: 0;\n    opacity: 0;\n    transition: opacity 0.24s linear 0.1s;\n  }\n\n  &:hover &-handler-wrap {\n    opacity: 1;\n  }\n\n  &-handler-up {\n    cursor: pointer;\n    &-inner {\n      top: 1px;\n      &:before {\n        text-align: center;\n        content: \""\\e602\"";\n      }\n    }\n    &:hover {\n      height: 16px;\n    }\n    &:hover &-inner {\n      margin-top: 2px;\n    }\n  }\n\n  &-handler-down {\n    border-top: 1px solid @border-color-base;\n    top: -1px;\n    cursor: pointer;\n    &-inner {\n      &:before {\n        text-align: center;\n        content: \""\\e603\"";\n      }\n    }\n    &:hover {\n      height: 16px;\n      margin-top: -2px;\n    }\n  }\n\n  &-handler-down-disabled,\n  &-handler-up-disabled,\n  &-disabled {\n    .@{input-number-prefix-cls}-handler-down-inner,\n    .@{input-number-prefix-cls}-handler-up-inner {\n      .handler-disabled();\n    }\n  }\n\n  &-disabled {\n    .@{input-number-prefix-cls}-input {\n      opacity: 0.72;\n      cursor: not-allowed;\n      background-color: #f3f3f3;\n    }\n    .@{input-number-prefix-cls}-handler-wrap {\n      display: none;\n    }\n    .@{input-number-prefix-cls}-handler {\n      .handler-disabled();\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/input-number/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@menu-prefix-cls: ant-menu;\n\n// default theme\n.@{menu-prefix-cls} {\n  outline: none;\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  z-index: @zindex-dropdown;\n  box-shadow: @box-shadow-base;\n  color: @text-color;\n  background: #fff;\n  line-height: 46px;\n\n  &-hidden {\n    display: none;\n  }\n\n  &-item-group-list {\n    margin: 0;\n    padding: 0;\n  }\n\n  &-item-group-title {\n    color: #999;\n    font-size: 12px;\n    line-height: 1.5;\n    padding: 8px 16px;\n  }\n\n  &-item,\n  &-submenu,\n  &-submenu-title {\n    transform: translateZ(0);\n    cursor: pointer;\n    transition: all 0.3s ease;\n  }\n\n  &-submenu &-sub {\n    cursor: initial;\n  }\n\n  &-item > a {\n    display: block;\n    color: @text-color;\n    &:hover {\n      color: @text-color;\n    }\n    &:before {\n      position: absolute;\n      background-color: transparent;\n      width: 100%;\n      height: 100%;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n      content: '';\n    }\n  }\n\n  &-item:hover,\n  &-item-active,\n  &-submenu-active,\n  &-submenu-title:hover {\n    background-color: tint(@primary-color, 90%);\n  }\n\n  &-horizontal &-item,\n  &-horizontal &-submenu {\n    margin-top: -1px;\n  }\n\n  &-horizontal > &-item:hover,\n  &-horizontal > &-item-active,\n  &-horizontal > &-submenu &-submenu-title:hover {\n    background-color: transparent;\n  }\n\n  &-item-selected {\n    color: @primary-color;\n    // fix chrome render bug\n    transform: translateZ(0);\n    > a,\n    > a:hover {\n      color: @primary-color;\n    }\n  }\n\n  &-inline,\n  &-vertical {\n    border-right: 1px solid @border-color-split;\n    .@{menu-prefix-cls}-item {\n      border-right: 1px solid @border-color-split;\n      margin-left: -1px;\n      left: 1px;\n      position: relative;\n      z-index: 1;\n    }\n  }\n\n  &-vertical &-sub {\n    border-right: 0;\n    .@{menu-prefix-cls}-item {\n      border-right: 0;\n    }\n  }\n\n  &-inline {\n    .@{menu-prefix-cls}-selected,\n    .@{menu-prefix-cls}-item-selected {\n      border-right: 2px solid @primary-color;\n      transform: translateZ(0);\n    }\n  }\n\n  &-submenu-horizontal > & {\n    top: 100%;\n    left: 0;\n    position: absolute;\n    min-width: 100%;\n    margin-top: 7px;\n    z-index: @zindex-dropdown;\n  }\n\n  &-submenu-vertical {\n    z-index: 1;\n  }\n\n  &-submenu-vertical > & {\n    top: 0;\n    left: 100%;\n    position: absolute;\n    min-width: 160px;\n    margin-left: 4px;\n    z-index: @zindex-dropdown;\n  }\n\n  &-item,\n  &-submenu-title {\n    margin: 0;\n    padding: 0 20px;\n    position: relative;\n    display: block;\n    white-space: nowrap;\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.@{menu-prefix-cls}-item-disabled,\n    &.@{menu-prefix-cls}-submenu-disabled {\n      color: #999 !important;\n      cursor: not-allowed;\n      > a {\n        color: #999 !important;\n        pointer-events: none;\n      }\n    }\n\n    .anticon {\n      min-width: 14px;\n      margin-right: 8px;\n    }\n  }\n\n  & > &-item-divider {\n    height: 1px;\n    margin: 1px 0;\n    overflow: hidden;\n    padding: 0;\n    line-height: 0;\n    background-color: #e5e5e5;\n  }\n\n  &-submenu {\n    position: relative;\n\n    > .@{menu-prefix-cls} {\n      background-color: #fff;\n      border-radius: 4px;\n    }\n\n    &-vertical > .@{menu-prefix-cls}-submenu-title:after {\n      font-family: \""anticon\"" !important;\n      font-style: normal;\n      vertical-align: baseline;\n      text-align: center;\n      text-transform: none;\n      text-rendering: auto;\n      position: absolute;\n      transition: transform .3s ease;\n      content: \""\\e603\"";\n      right: 16px;\n      .ie-rotate(3);\n      transform: rotate(270deg) scale(0.75);\n    }\n\n    &-inline > .@{menu-prefix-cls}-submenu-title:after {\n      font-family: \""anticon\"" !important;\n      font-style: normal;\n      vertical-align: baseline;\n      text-align: center;\n      text-transform: none;\n      text-rendering: auto;\n      position: absolute;\n      transition: transform .3s ease;\n      content: \""\\e603\"";\n      right: 16px;\n      top: 0;\n      .iconfont-size-under-12px(8px);\n    }\n\n    &-open {\n      &.@{menu-prefix-cls}-submenu-inline > .@{menu-prefix-cls}-submenu-title:after {\n        .ie-rotate(1);\n        transform: rotate(180deg) scale(0.75);\n      }\n    }\n  }\n\n  &-horizontal {\n    border: 0;\n    border-bottom: 1px solid @border-color-split;\n    box-shadow: none;\n    z-index: 0;\n\n    > .@{menu-prefix-cls}-item,\n    > .@{menu-prefix-cls}-submenu {\n      position: relative;\n      top: 1px;\n      float: left;\n      border-bottom: 2px solid transparent;\n      z-index: 2;\n\n      &:hover,\n      &-active,\n      &-selected {\n        border-bottom: 2px solid @primary-color;\n        color: @primary-color;\n        transform: translateZ(0);\n      }\n\n      > a {\n        display: block;\n        color: @text-color;\n        &:hover {\n          color: @primary-color;\n        }\n      }\n    }\n\n    &:after {\n      content: \""\\20\"";\n      display: block;\n      height: 0;\n      clear: both;\n    }\n  }\n\n  &-vertical,\n  &-inline,\n  &-item-group-list {\n    & > .@{menu-prefix-cls}-item,\n    & > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n      padding: 0px 16px 0 28px;\n      font-size: 12px;\n      line-height: 42px;\n      height: 42px;\n    }\n  }\n\n  &-vertical&-sub {\n    padding: 0;\n    transform-origin: 0 0;\n    & > .@{menu-prefix-cls}-item,\n    & > .@{menu-prefix-cls}-submenu {\n      transform-origin: 0 0;\n    }\n  }\n\n  &-root&-vertical,\n  &-root&-inline {\n    box-shadow: none;\n  }\n\n  &-sub&-inline {\n    padding: 0;\n    border: 0;\n    box-shadow: none;\n    border-radius: 0;\n    & > .@{menu-prefix-cls}-item,\n    & > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n      line-height: 42px;\n      height: 42px;\n      list-style-type: disc;\n      list-style-position: inside;\n    }\n\n    & .@{menu-prefix-cls}-item-group-title {\n      padding-left: 32px;\n    }\n  }\n}\n\n\n// dark theme\n.@{menu-prefix-cls} {\n  &-dark,\n  &-dark &-sub {\n    color: #999;\n    background: #404040;\n  }\n\n  &-dark &-inline&-sub {\n    background: #333;\n  }\n\n  &-dark&-horizontal {\n    border-bottom-color: #404040;\n  }\n\n  &-dark&-horizontal > &-item,\n  &-dark&-horizontal > &-submenu {\n    border-color: #404040;\n    border-bottom: 0;\n    top: 0;\n  }\n\n  &-dark&-horizontal > &-item:hover,\n  &-dark&-horizontal > &-item-active,\n  &-dark&-horizontal > &-item-selected,\n  &-dark&-horizontal > &-submenu:hover,\n  &-dark&-horizontal > &-submenu &-submenu-title:hover {\n    &,\n    & > a {\n      color: #fff;\n      transform: translateZ(0);\n    }\n  }\n\n  &-dark &-item > a {\n    color: #999;\n    &:hover {\n      color: #fff;\n    }\n  }\n\n  &-dark&-inline,\n  &-dark&-vertical {\n    border-right: 0;\n  }\n\n  &-dark&-inline &-item,\n  &-dark&-vertical &-item {\n    border-right: 0;\n    margin-left: 0;\n    left: 0;\n  }\n\n  &-dark&-inline &-item-selected {\n    border-right: 0;\n    background-color: @primary-color;\n    color: #fff;\n    > a,\n    > a:hover {\n      color: #fff;\n    }\n  }\n\n  &-dark&-vertical &-item-selected {\n    > a,\n    > a:hover {\n      color: @primary-color;\n    }\n  }\n\n  &-dark &-item:hover,\n  &-dark &-item-active,\n  &-dark &-submenu-active,\n  &-dark &-submenu-title:hover {\n    background-color: transparent;\n    color: @primary-color;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/menu/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@message-prefix-cls: ant-message;\n\n.@{message-prefix-cls} {\n  font-size: 12px;\n  position: fixed;\n  z-index: @zindex-message;\n  width: 100%;\n  top: 16px;\n  left: 0;\n\n  &-notice {\n    width: auto;\n    vertical-align: middle;\n    position: absolute;\n    left: 50%;\n  }\n\n  &-notice-content {\n    position: relative;\n    right: 50%;\n    padding: 8px 16px;\n    border-radius: @border-radius-base;\n    border: 1px solid @border-color-base;\n    box-shadow: @shadow-2;\n    background: #fff;\n    display: block;\n  }\n\n  &-success .anticon {\n    color: @success-color;\n  }\n\n  &-error .anticon {\n    color: @error-color;\n  }\n\n  &-warning .anticon {\n    color: @warning-color;\n  }\n\n  &-info .anticon,\n  &-loading .anticon {\n    color: @primary-color;\n  }\n\n  .anticon {\n    margin-right: 8px;\n    font-size: 14px;\n    top: 1px;\n    position: relative;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/message/style/index.less\n **/"",""@dialog-prefix-cls: ant-modal;\n\n.@{dialog-prefix-cls} {\n  position: relative;\n  width: auto;\n  margin: 0 auto;\n  top: 100px;\n  padding-bottom: 24px;\n\n  &-wrap {\n    position: fixed;\n    overflow: auto;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: @zindex-modal;\n    -webkit-overflow-scrolling: touch;\n    outline: 0;\n  }\n\n  &-title {\n    margin: 0;\n    font-size: 14px;\n    line-height: 21px;\n    font-weight: bold;\n  }\n\n  &-content {\n    position: relative;\n    background-color: #fff;\n    border: 0;\n    border-radius: @border-radius-base;\n    background-clip: padding-box;\n  }\n\n  &-close {\n    cursor: pointer;\n    border: 0;\n    background: transparent;\n    position: absolute;\n    right: 18px;\n    top: 16px;\n    z-index: 10;\n    font-weight: 700;\n    line-height: 1;\n    text-decoration: none;\n    transition: color .3s ease;\n    color: #999;\n    outline: 0;\n\n    &-x {\n      display: block;\n      font-style: normal;\n      vertical-align: baseline;\n      text-align: center;\n      text-transform: none;\n      text-rendering: auto;\n      width: 14px;\n      height: 14px;\n      font-size: 14px;\n      line-height: 1;\n\n      &:before {\n        content: \""\\e62d\"";\n        display: block;\n        font-family: \""anticon\"" !important;\n      }\n    }\n\n    &:focus,\n    &:hover {\n      color: #444;\n      text-decoration: none;\n    }\n  }\n\n  &-header {\n    padding: 14px 16px;\n    border-radius: @border-radius-base @border-radius-base 0 0;\n    background: #fff;\n    color: #666;\n    border-bottom: 1px solid @border-color-split;\n  }\n\n  &-body {\n    padding: 16px;\n    font-size: 12px;\n    line-height: 1.5;\n  }\n\n  &-footer {\n    border-top: 1px solid @border-color-split;\n    padding: 10px 18px 10px 10px;\n    text-align: right;\n    border-radius: 0 0 @border-radius-base @border-radius-base;\n    button + button {\n      margin-left: 8px;\n      margin-bottom: 0;\n    }\n  }\n\n  &.zoom-enter,\n  &.zoom-appear {\n    animation-duration: .2s;\n    transform: none; // reset scale avoid mousePosition bug\n    opacity: 0;\n  }\n\n  &-mask {\n    position: fixed;\n    top: 0;\n    right: 0;\n    left: 0;\n    bottom: 0;\n    background-color: #373737;\n    background-color: rgba(55, 55, 55, 0.6);\n    height: 100%;\n    z-index: @zindex-modal-mask;\n    filter: ~\""alpha(opacity=50)\"";\n\n    &-hidden {\n      display: none;\n    }\n  }\n\n  &-open {\n    overflow: hidden;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/modal/style/modal.less\n **/"",""@confirm-prefix-cls: ant-confirm;\n\n.@{confirm-prefix-cls} {\n  .ant-modal-header {\n    display: none;\n  }\n\n  .ant-modal-body {\n    padding: 30px 40px;\n  }\n\n  &-body {\n    .@{confirm-prefix-cls}-title {\n      color: @text-color;\n      font-weight: bold;\n      font-size: 14px;\n    }\n\n    .@{confirm-prefix-cls}-content {\n      margin-left: 37px;\n      font-size: @font-size-base;\n      color: @text-color;\n      margin-top: 8px;\n    }\n\n    > .anticon {\n      font-size: 24px;\n      margin-right: 10px;\n      padding: 0 1px;\n      position: relative;\n      top: 5px;\n    }\n  }\n\n  .@{confirm-prefix-cls}-btns {\n    margin-top: 30px;\n    float: right;\n\n    button + button {\n      margin-left: 10px;\n      margin-bottom: 0;\n    }\n  }\n\n  &-error &-body > .anticon {\n    color: @error-color;\n  }\n\n  &-warning &-body > .anticon,\n  &-confirm &-body > .anticon {\n    color: @warning-color;\n  }\n\n  &-info &-body > .anticon {\n    color: @primary-color;\n  }\n\n  &-success &-body > .anticon {\n    color: @success-color;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/modal/style/confirm.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@notification-prefix-cls: ant-notification;\n@notification-width: 335px;\n@notification-padding: 16px;\n@notification-margin-bottom: 10px;\n\n.@{notification-prefix-cls} {\n  position: fixed;\n  z-index: @zindex-notification;\n  width: @notification-width;\n  margin-right: 24px;\n\n  &-notice {\n    padding: @notification-padding;\n    border-radius: @border-radius-base;\n    box-shadow: @shadow-2;\n    border: 1px solid @border-color-base;\n    background: @body-background;\n    line-height: 1.5;\n    position: relative;\n    margin-bottom: @notification-margin-bottom;\n    overflow: hidden;\n\n    &-message {\n      font-size: 14px;\n      color: @text-color;\n      margin-bottom: 4px;\n    }\n\n    &-description {\n      font-size: @font-size-base;\n      color: @legend-color;\n    }\n\n    &-with-icon  &-message {\n      font-size: 14px;\n      color: @text-color;\n      margin-left: 51px;\n      margin-bottom: 4px;\n    }\n\n    &-with-icon  &-description {\n      margin-left: 51px;\n      font-size: @font-size-base;\n      color: @legend-color;\n    }\n\n    &-icon {\n      position: absolute;\n      left: 16px;\n      top: 50%;\n      margin-top: -17px;\n      font-size: 34px;\n\n      &-success {\n        color: @success-color;\n      }\n      &-info {\n        color: @primary-color;\n      }\n      &-warning {\n        color: @warning-color;\n      }\n      &-error {\n        color: @error-color;\n      }\n    }\n\n    &-close-x:after {\n      font-size: 12px;\n      content: \""\\e62d\"";\n      font-family: \""anticon\"";\n      cursor: pointer;\n    }\n\n    &-close {\n      position: absolute;\n      right: 16px;\n      top: 10px;\n      color: #999;\n      outline: none;\n    }\n\n    &-btn {\n      float: right;\n      margin-top: 16px;\n    }\n  }\n\n  .notification-fade-effect {\n    animation-duration: 0.24s;\n    animation-fill-mode: both;\n    animation-timing-function: @ease-in-out;\n  }\n\n  &-fade-enter,\n  &-fade-appear {\n    opacity: 0;\n    .notification-fade-effect();\n    animation-play-state: paused;\n  }\n\n  &-fade-leave {\n    .notification-fade-effect();\n    animation-duration: 0.2s;\n    animation-play-state: paused;\n  }\n\n  &-fade-enter&-fade-enter-active,\n  &-fade-appear&-fade-appear-active {\n    animation-name: NotificationFadeIn;\n    animation-play-state: running;\n  }\n\n  &-fade-leave&-fade-leave-active {\n    animation-name: NotificationFadeOut;\n    animation-play-state: running;\n  }\n}\n\n@keyframes NotificationFadeIn {\n  0% {\n    opacity: 0;\n    left: @notification-width;\n  }\n  100% {\n    left: 0;\n    opacity: 1;\n  }\n}\n\n@keyframes NotificationFadeOut {\n  0% {\n    opacity: 1;\n    margin-bottom: @notification-margin-bottom;\n    padding-top: @notification-padding;\n    padding-bottom: @notification-padding;\n    max-height: 150px;\n  }\n  100% {\n    opacity: 0;\n    margin-bottom: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    max-height: 0;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/notification/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n\n@pagination-prefix-cls: ant-pagination;\n\n.@{pagination-prefix-cls} {\n  font-size: @font-size-base;\n\n  &:after {\n    content: \"" \"";\n    display: block;\n    height: 0;\n    clear: both;\n    overflow: hidden;\n    visibility: hidden;\n  }\n\n  &-total-text {\n    float: left;\n    height: 30px;\n    line-height: 30px;\n    margin-right: 10px;\n  }\n\n  &-item {\n    cursor: pointer;\n    border-radius: @border-radius-base;\n    user-select: none;\n    min-width: 28px;\n    height: 28px;\n    line-height: 28px;\n    text-align: center;\n    list-style: none;\n    float: left;\n    border: 1px solid @border-color-base;\n    background-color: #fff;\n    margin-right: 8px;\n    font-family: Arial;\n\n    a {\n      text-decoration: none;\n      color: #666;\n      transition: none;\n      margin: 0 6px;\n    }\n\n    &:hover {\n      transition: all 0.3s ease;\n      border-color: @primary-color;\n      a {\n        color: @primary-color;\n      }\n    }\n\n    &-active {\n      background-color: @primary-color;\n      border-color: @primary-color;\n\n      a,\n      &:hover a {\n        color: #fff;\n      }\n    }\n  }\n\n  &-jump-prev,\n  &-jump-next {\n    &:after {\n      content: \""•••\"";\n      display: block;\n      letter-spacing: 2px;\n      color: #ccc;\n      text-align: center;\n    }\n\n    &:hover {\n      &:after {\n        color: @primary-color;\n        .iconfont-size-under-12px(8px);\n        letter-spacing: -1px;\n        font-family: \""anticon\"";\n      }\n    }\n\n  }\n\n  &-jump-prev {\n    &:hover {\n      &:after {\n        content: \""\\e601\\e601\"";\n      }\n    }\n  }\n\n  &-jump-next {\n    &:hover {\n      &:after {\n        content: \""\\e600\\e600\"";\n      }\n    }\n  }\n\n  &-prev,\n  &-jump-prev,\n  &-jump-next {\n    margin-right: 8px;\n  }\n  &-prev,\n  &-next,\n  &-jump-prev,\n  &-jump-next {\n    font-family: Arial;\n    cursor: pointer;\n    color: #666;\n    border-radius: @border-radius-base;\n    list-style: none;\n    min-width: 28px;\n    height: 28px;\n    line-height: 28px;\n    float: left;\n    text-align: center;\n    transition: all 0.3s ease;\n    display: inline-block;\n  }\n\n  &-prev,\n  &-next {\n    border: 1px solid @border-color-base;\n    background-color: #fff;\n\n    a {\n      color: #666;\n\n      &:after {\n        .iconfont-size-under-12px(8px);\n        display: block;\n        height: 26px;\n        line-height: 26px;\n        font-family: \""anticon\"";\n        text-align: center;\n      }\n\n    }\n\n    &:hover {\n      border-color: @primary-color;\n\n      a {\n        color: @primary-color;\n      }\n    }\n  }\n\n  &-prev {\n    a {\n      &:after {\n        margin-top: -.5px;\n        content: \""\\e601\"";\n        display: block;\n      }\n    }\n  }\n\n  &-next {\n    a {\n      &:after {\n        content: \""\\e600\"";\n        display: block;\n      }\n    }\n  }\n\n  &-disabled {\n    &:hover {\n      border-color: @border-color-base;\n      a {\n        color: #ccc;\n        cursor: not-allowed;\n      }\n    }\n    cursor: not-allowed;\n    a {\n      color: #ccc;\n    }\n  }\n\n  &-slash {\n    margin: 0 10px 0 5px;\n  }\n\n  &-options {\n    float: left;\n    margin-left: 15px;\n    &-size-changer {\n      float: left;\n      margin-right: 10px;\n    }\n\n    &-quick-jumper {\n      float: left;\n      height: 28px;\n      line-height: 28px;\n\n      input {\n        .input;\n        margin: 0 8px;\n        width: 50px;\n      }\n    }\n  }\n\n  &-simple &-prev,\n  &-simple &-next {\n    border: 0;\n    height: 24px;\n    line-height: 24px;\n    margin: 0;\n    font-size: 18px;\n  }\n\n  &-simple &-simple-pager {\n    float: left;\n    margin-right: 8px;\n\n    input {\n      margin: 0 8px;\n      box-sizing: border-box;\n      background-color: #fff;\n      border-radius: @border-radius-base;\n      border: 1px solid @border-color-base;\n      outline: none;\n      padding: 5px 8px;\n      width: 30px;\n      height: 24px;\n      text-align: center;\n      transition: border-color 0.3s ease;\n\n      &:hover {\n        border-color: @primary-color;\n      }\n    }\n  }\n}\n\n.@{pagination-prefix-cls} {\n  &.mini &-total-text {\n      height: 20px;\n      line-height: 20px;\n  }\n\n  &.mini &-item {\n    border: 0;\n    margin: 0;\n    min-width: 20px;\n    height: 20px;\n    line-height: 20px;\n  }\n\n  &.mini &-prev,\n  &.mini &-next {\n    margin: 0;\n    min-width: 20px;\n    height: 20px;\n    line-height: 20px;\n    border: 0;\n\n    a {\n      &:after {\n        height: 20px;\n        line-height: 20px;\n      }\n    }\n  }\n\n  &.mini &-jump-prev,\n  &.mini &-jump-next {\n    height: 20px;\n    line-height: 20px;\n  }\n\n  &.mini &-options {\n    margin-left: 8px;\n    &-quick-jumper {\n      height: 20px;\n      line-height: 20px;\n\n      input {\n        .input-sm;\n        width: 44px;\n      }\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/pagination/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@popover-prefix-cls: ant-popover;\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-min-width:                   177px;\n//** Popover border color\n@popover-border-color:                @border-color-base;\n\n//** Popover arrow width\n@popover-arrow-width:                 4px;\n\n//** Popover arrow color\n@popover-arrow-color:                 @popover-bg;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n\n.@{popover-prefix-cls} {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: @zindex-popover;\n  cursor: auto;\n  user-select: text;\n  white-space: normal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  font-weight: normal;\n  text-align: left;\n\n  &:after {\n    content: \""\"";\n    position: absolute;\n    background: rgba(255, 255, 255, 0.01);\n  }\n\n  &-hidden {\n    display: none;\n  }\n\n  // Offset the popover to account for the popover arrow\n  &-placement-top,\n  &-placement-topLeft,\n  &-placement-topRight {\n    padding-bottom: @popover-arrow-width;\n  }\n\n  &-placement-right,\n  &-placement-rightTop,\n  &-placement-rightBottom {\n    padding-left: @popover-arrow-width;\n  }\n\n  &-placement-bottom,\n  &-placement-bottomLeft,\n  &-placement-bottomRight {\n    padding-top: @popover-arrow-width;\n  }\n\n  &-placement-left,\n  &-placement-leftTop,\n  &-placement-leftBottom {\n    padding-right: @popover-arrow-width;\n  }\n\n  &-inner {\n    min-width: @popover-min-width;\n    background-color: @popover-bg;\n    background-clip: padding-box;\n    border: 1px solid @popover-border-color;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n  }\n\n  &-title {\n    margin: 0; // reset heading margin\n    padding: 0 16px;\n    line-height: 32px;\n    height: 32px;\n    border-bottom: 1px solid @border-color-split;\n    color: #666;\n  }\n\n  &-inner-content {\n    padding: 8px 16px;\n    color: @text-color;\n  }\n\n  &-message {\n    padding: 8px 0 16px;\n    font-size: 12px;\n    color: @text-color;\n    > .anticon {\n      color: @warning-color;\n      line-height: 17px;\n      position: absolute;\n    }\n    &-title {\n      padding-left: 20px;\n    }\n  }\n\n  &-buttons {\n    text-align: right;\n    margin-bottom: 8px;\n    button {\n      margin-left: 8px;\n    }\n  }\n\n  // Arrows\n  // .popover-arrow is outer, .popover-arrow:after is inner\n\n  &-arrow {\n    &,\n    &:after {\n      position: absolute;\n      display: block;\n      width: 0;\n      height: 0;\n      border-color: transparent;\n      border-style: solid;\n    }\n  }\n\n  &-arrow {\n    border-width: @popover-arrow-outer-width;\n  }\n  &-arrow:after {\n    border-width: @popover-arrow-width;\n    content: \""\"";\n  }\n\n  &-placement-top &-arrow,\n  &-placement-topLeft &-arrow,\n  &-placement-topRight &-arrow {\n    border-bottom-width: 0;\n    border-top-color: @popover-arrow-outer-color;\n    bottom: 0;\n    &:after {\n      content: \"" \"";\n      bottom: 1px;\n      margin-left: -@popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: @popover-arrow-color;\n    }\n  }\n  &-placement-top &-arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n  }\n  &-placement-topLeft &-arrow {\n    left: 16px;\n  }\n  &-placement-topRight &-arrow {\n    right: 16px;\n  }\n\n  &-placement-right &-arrow,\n  &-placement-rightTop &-arrow,\n  &-placement-rightBottom &-arrow {\n    left: 0;\n    border-left-width: 0;\n    border-right-color: @popover-arrow-outer-color;\n    &:after {\n      content: \"" \"";\n      left: 1px;\n      bottom: -@popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: @popover-arrow-color;\n    }\n  }\n  &-placement-right &-arrow {\n    top: 50%;\n    margin-top: -@popover-arrow-outer-width;\n  }\n  &-placement-rightTop &-arrow {\n    top: 12px;\n  }\n  &-placement-rightBottom &-arrow {\n    bottom: 12px;\n  }\n\n  &-placement-bottom &-arrow,\n  &-placement-bottomLeft &-arrow,\n  &-placement-bottomRight &-arrow {\n    border-top-width: 0;\n    border-bottom-color: @popover-arrow-outer-color;\n    top: 0;\n    &:after {\n      content: \"" \"";\n      top: 1px;\n      margin-left: -@popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: @popover-arrow-color;\n    }\n  }\n  &-placement-bottom &-arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n  }\n  &-placement-bottomLeft &-arrow {\n    left: 16px;\n  }\n  &-placement-bottomRight &-arrow {\n    right: 16px;\n  }\n\n  &-placement-left &-arrow,\n  &-placement-leftTop &-arrow,\n  &-placement-leftBottom &-arrow {\n    right: 0;\n    border-right-width: 0;\n    border-left-color: @popover-arrow-outer-color;\n    &:after {\n      content: \"" \"";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: @popover-arrow-color;\n      bottom: -@popover-arrow-width;\n    }\n  }\n  &-placement-left &-arrow {\n    top: 50%;\n    margin-top: -@popover-arrow-outer-width;\n  }\n  &-placement-leftTop &-arrow {\n    top: 12px;\n  }\n  &-placement-leftBottom &-arrow {\n    bottom: 12px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/popover/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@progress-prefix-cls: ant-progress;\n\n.@{progress-prefix-cls} {\n  display: inline-block;\n\n  &-line {\n    width: 100%;\n    font-size: 12px;\n    position: relative;\n  }\n\n  &-outer {\n    display: inline-block;\n    width: 100%;\n    margin-right: 0;\n    padding-right: 0;\n    .@{progress-prefix-cls}-show-info & {\n      padding-right: 45px;\n      margin-right: -45px;\n    }\n  }\n\n  &-inner {\n    display: inline-block;\n    width: 100%;\n    background-color: #f3f3f3;\n    border-radius: 100px;\n    vertical-align: middle;\n  }\n\n  &-bg {\n    border-radius: 100px;\n    background-color: @info-color;\n    transition: all 0.3s linear 0s;\n    position: relative;\n  }\n\n  &-text {\n    width: 35px;\n    text-align: left;\n    font-size: 1em;\n    margin-left: 10px;\n    vertical-align: middle;\n    display: inline-block;\n    font-family: tahoma;\n    .anticon {\n      font-size: 12px;\n    }\n  }\n\n  &-status-active {\n    .@{progress-prefix-cls}-bg:before {\n      content: \""\"";\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      background: #fff;\n      border-radius: 10px;\n      animation: ant-progress-active 2s @ease-out-quint infinite;\n    }\n  }\n\n  &-status-exception {\n    .@{progress-prefix-cls}-bg {\n      background-color: @error-color;\n    }\n    .@{progress-prefix-cls}-text {\n      color: @error-color;\n    }\n  }\n\n  &-status-success {\n    .@{progress-prefix-cls}-bg {\n      background-color: @success-color;\n    }\n    .@{progress-prefix-cls}-text {\n      color: @success-color;\n    }\n  }\n\n  &-circle &-inner {\n    position: relative;\n    line-height: 1;\n    background-color: transparent;\n  }\n\n  &-circle &-text {\n    display: block;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    line-height: 1;\n    top: 50%;\n    transform: translateY(-50%);\n    left: 0;\n    font-family: tahoma;\n    margin: 0;\n\n    .anticon {\n      font-size: 14 / 12em;\n    }\n  }\n\n  &-circle &-status-exception {\n    .@{progress-prefix-cls}-text {\n      color: @error-color;\n    }\n  }\n  &-circle &-status-success {\n    .@{progress-prefix-cls}-text {\n      color: @success-color;\n    }\n  }\n}\n\n@keyframes ant-progress-active {\n  0% {\n    opacity: .3;\n    width: 0;\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/progress/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@rate-prefix-cls: ant-rate;\n@rate-star-color: #f5a623;\n\n.@{rate-prefix-cls} {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: 18px;\n  display: inline-block;\n  vertical-align: middle;\n  font-family: 'anticon';\n  font-weight: normal;\n  font-style: normal;\n\n  &-disabled &-star {\n    &:before,\n    &-content:before {\n      cursor: default;\n    }\n    &:hover {\n      transform: scale(1);\n    }\n  }\n\n  &-star {\n    margin: 0;\n    padding: 0;\n    display: inline-block;\n    margin-right: 8px;\n    position: relative;\n    transition: all 0.3s ease;\n\n    &:hover {\n      transform: scale(1.1);\n    }\n\n    &:before,\n    &-content:before {\n      color: #e9e9e9;\n      cursor: pointer;\n      content: \""\\E694\"";\n      transition: all 0.3s ease;\n      display: block;\n    }\n\n    &-content {\n      position: absolute;\n      left: 0;\n      top: 0;\n      width: 50%;\n      height: 100%;\n      overflow: hidden;\n      &:before {\n        color: transparent;\n      }\n    }\n\n    &-half &-content:before,\n    &-full:before {\n      color: @rate-star-color;\n    }\n\n    &-half:hover &-content:before,\n    &-full:hover:before {\n      color: tint(@rate-star-color, 20%);\n    }\n  }\n\n  &-text {\n    margin-left: 8px;\n    vertical-align: middle;\n    display: inline-block;\n    font-size: @font-size-base;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/rate/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@slider-prefix-cls: ant-slider;\n// slider color\n@slider-disabled-color: #ccc;\n// tooltip\n@slider-tooltip-color: #fff;\n@slider-tooltip-bg: tint(#666, 4%);\n@slider-tooltip-arrow-width: 4px;\n@slider-tooltip-distance: @slider-tooltip-arrow-width + 4;\n@slider-tooltip-arrow-color: @slider-tooltip-bg;\n\n.@{slider-prefix-cls} {\n  position: relative;\n  margin: 10px 8px;\n  height: 12px;\n  border-radius: 5px;\n  background-color: #e9e9e9;\n  cursor: pointer;\n  border-top: 4px solid #fff;\n  border-bottom: 4px solid #fff;\n  transition: background-color 0.3s ease;\n\n  &-track {\n    position: absolute;\n    left: 0;\n    height: 4px;\n    border-radius: @border-radius-base;\n    background-color: tint(@primary-color, 60%);\n    z-index: 1;\n    transition: background-color 0.3s ease;\n  }\n\n  &:hover {\n    background-color: #e1e1e1;\n    .@{slider-prefix-cls}-handle {\n      border-color: tint(@primary-color, 20%);\n    }\n  }\n\n  &:hover &-track {\n    background-color: tint(@primary-color, 40%);\n  }\n\n  &-handle {\n    position: absolute;\n    margin-left: -7px;\n    margin-top: -5px;\n    width: 14px;\n    height: 14px;\n    cursor: pointer;\n    border-radius: 50%;\n    border: solid 2px tint(@primary-color, 50%);\n    background-color: #fff;\n    z-index: 2;\n    transition: border-color 0.3s ease;\n\n    &:hover {\n      border-color: tint(@primary-color, 20%);\n    }\n\n    &:active {\n      box-shadow: 0 0 0 2px fadeout(@primary-color, 80%);\n    }\n  }\n\n  &-mark {\n    position: absolute;\n    top: 10px;\n    left: 0;\n    width: 100%;\n    font-size: 12px;\n    z-index: 3;\n  }\n\n  &-mark-text {\n    position: absolute;\n    display: inline-block;\n    vertical-align: middle;\n    text-align: center;\n    cursor: pointer;\n    color: #999;\n\n    &-active {\n      color: #666;\n    }\n  }\n\n  &-step {\n    position: absolute;\n    width: 100%;\n    height: 4px;\n    background: transparent;\n    z-index: 1;\n  }\n\n  &-dot {\n    position: absolute;\n    top: -2px;\n    margin-left: -4px;\n    width: 8px;\n    height: 8px;\n    border: 2px solid #e9e9e9;\n    background-color: #fff;\n    cursor: pointer;\n    border-radius: 50%;\n    vertical-align: middle;\n    &:first-child {\n      margin-left: -4px;\n    }\n    &:last-child {\n      margin-left: -4px;\n    }\n    &-active {\n      border-color: tint(@primary-color, 50%);\n    }\n  }\n\n  &-disabled {\n    background-color: #e9e9e9 !important;\n\n    .@{slider-prefix-cls}-track {\n      background-color: @slider-disabled-color !important;\n    }\n\n    .@{slider-prefix-cls}-handle,\n    .@{slider-prefix-cls}-dot {\n      border-color: @slider-disabled-color!important;\n      background-color: #fff;\n      cursor: not-allowed;\n    }\n\n    .@{slider-prefix-cls}-mark-text,\n    .@{slider-prefix-cls}-dot {\n      cursor: not-allowed!important;\n    }\n  }\n\n  // slider tooltip style\n  &-tooltip {\n    position: absolute;\n    left: -9999px;\n    top: -9999px;\n    z-index: 4;\n    visibility: visible;\n\n    &-hidden {\n      display: none;\n    }\n\n    &-placement-points-bc-tc {\n      padding: @slider-tooltip-arrow-width 0 @slider-tooltip-distance 0;\n    }\n\n    &-inner {\n      padding: 6px;\n      min-width: 24px;\n      height: 24px;\n      font-size: @font-size-base;\n      line-height: 1;\n      color: @slider-tooltip-color;\n      text-align: center;\n      text-decoration: none;\n      background-color: @slider-tooltip-bg;\n      border-radius: @border-radius-base;\n    }\n\n    &-arrow {\n      position: absolute;\n      width: 0;\n      height: 0;\n      border-color: transparent;\n      border-style: solid;\n    }\n\n    &-placement-points-bc-tc &-arrow {\n      bottom: @slider-tooltip-distance - @slider-tooltip-arrow-width;\n      left: 50%;\n      margin-left: -@slider-tooltip-arrow-width;\n      border-width: @slider-tooltip-arrow-width @slider-tooltip-arrow-width 0;\n      border-top-color: @slider-tooltip-arrow-color;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/slider/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@tooltip-prefix-cls: ant-tooltip;\n//** Tooltip max width\n@tooltip-max-width: 250px;\n//** Tooltip text color\n@tooltip-color: #fff;\n//** Tooltip background color\n@tooltip-bg: #373737;\n@tooltip-opacity: 0.9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width: 5px;\n//** Tooltip distance with trigger\n@tooltip-distance: @tooltip-arrow-width - 1 + 4;\n//** Tooltip arrow color\n@tooltip-arrow-color: @tooltip-bg;\n\n// Base class\n.@{tooltip-prefix-cls} {\n  position: absolute;\n  z-index: @zindex-tooltip;\n  display: block;\n  visibility: visible;\n  // remove left/top by yiminghe\n  // left: -9999px;\n  // top: -9999px;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  opacity: @tooltip-opacity;\n\n  &-hidden {\n    display: none;\n  }\n\n  &-placement-top,\n  &-placement-topLeft,\n  &-placement-topRight {\n    padding: @tooltip-arrow-width 0 @tooltip-distance 0;\n  }\n  &-placement-right,\n  &-placement-rightTop,\n  &-placement-rightBottom {\n    padding: 0 @tooltip-arrow-width 0 @tooltip-distance;\n  }\n  &-placement-bottom,\n  &-placement-bottomLeft,\n  &-placement-bottomRight {\n    padding: @tooltip-distance 0 @tooltip-arrow-width 0;\n  }\n  &-placement-left,\n  &-placement-leftTop,\n  &-placement-leftBottom {\n    padding: 0 @tooltip-distance 0 @tooltip-arrow-width;\n  }\n}\n\n// Wrapper for the tooltip content\n.@{tooltip-prefix-cls}-inner {\n  max-width: @tooltip-max-width;\n  padding: 8px 10px;\n  color: @tooltip-color;\n  text-align: left;\n  text-decoration: none;\n  background-color: @tooltip-bg;\n  border-radius: @border-radius-base;\n  box-shadow: @box-shadow-base;\n  min-height: 34px;\n}\n\n// Arrows\n.@{tooltip-prefix-cls}-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.@{tooltip-prefix-cls} {\n  &-placement-top &-arrow,\n  &-placement-topLeft &-arrow,\n  &-placement-topRight &-arrow {\n    bottom: @tooltip-distance - @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n\n  &-placement-top &-arrow {\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n  }\n\n  &-placement-topLeft &-arrow {\n    left: 16px;\n  }\n\n  &-placement-topRight &-arrow {\n    right: 16px;\n  }\n\n  &-placement-right &-arrow,\n  &-placement-rightTop &-arrow,\n  &-placement-rightBottom &-arrow {\n    left: @tooltip-distance - @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-right-color: @tooltip-arrow-color;\n  }\n\n  &-placement-right &-arrow {\n    top: 50%;\n    margin-top: -@tooltip-arrow-width;\n  }\n\n  &-placement-rightTop &-arrow {\n    top: 8px;\n  }\n\n  &-placement-rightBottom &-arrow {\n    bottom: 8px;\n  }\n\n  &-placement-left &-arrow,\n  &-placement-leftTop &-arrow,\n  &-placement-leftBottom &-arrow {\n    right: @tooltip-distance - @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-left-color: @tooltip-arrow-color;\n  }\n\n  &-placement-left &-arrow {\n    top: 50%;\n    margin-top: -@tooltip-arrow-width;\n  }\n\n  &-placement-leftTop &-arrow {\n    top: 8px;\n  }\n\n  &-placement-leftBottom &-arrow {\n    bottom: 8px;\n  }\n\n  &-placement-bottom &-arrow,\n  &-placement-bottomLeft &-arrow,\n  &-placement-bottomRight &-arrow {\n    top: @tooltip-distance - @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n\n  &-placement-bottom &-arrow {\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n  }\n\n  &-placement-bottomLeft &-arrow {\n    left: 16px;\n  }\n\n  &-placement-bottomRight &-arrow {\n    right: 16px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tooltip/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@spin-prefix-cls: ant-spin;\n@spin-dot-default: #999;\n@spin-dot-size-sm: 12px;\n@spin-dot-size: 20px;\n@spin-dot-size-lg: 32px;\n\n.@{spin-prefix-cls} {\n  color: @primary-color;\n  display: inline-block;\n  vertical-align: middle;\n  text-align: center;\n  opacity: 0;\n  position: absolute;\n  visibility: hidden;\n  transition: transform 0.3s @ease-in-out-circ;\n  font-size: @font-size-base;\n\n  &-spinning {\n    opacity: 1;\n    position: static;\n    visibility: visible;\n  }\n\n  &-nested-loading {\n    position: relative;\n  }\n\n  &-nested-loading & {\n    position: absolute;\n    top: 50%;\n    height: 20px;\n    line-height: 20px;\n    margin-top: -10px;\n    z-index: 4;\n    text-align: center;\n    width: 100%;\n    &-dot {\n      display: inline-block;\n    }\n  }\n\n  &-container {\n    transition: all 0.3s @ease-in-out-circ;\n  }\n\n  &-nested-loading > &-container {\n    opacity: 0.7;\n    -webkit-filter: blur(1px);\n    filter: blur(1px);\n    filter: ~\""progid\\:DXImageTransform\\.Microsoft\\.Blur(PixelRadius\\=1, MakeShadow\\=false)\""; /* IE6~IE9 */\n    position: relative;\n    &:after {\n      content: '';\n      position: absolute;\n      left: 0;\n      right: 0;\n      top: 0;\n      bottom: 0;\n      background: transparent;\n    }\n  }\n\n  // tip\n  // ------------------------------\n  &-tip {\n    color: @spin-dot-default;\n  }\n\n  // dots\n  // ------------------------------\n\n  &-dot {\n    position: relative;\n    display: block;\n    .square(@spin-dot-size);\n    &:before,\n    &:after {\n      content: '';\n      border-radius: 50%;\n      background-color: @primary-color;\n      animation: antSpinBounce 2.2s infinite ease-in-out;\n      display: block;\n      position: absolute;\n      opacity: 0.5;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n    }\n    &:after {\n      animation-delay: -1.1s;\n    }\n  }\n\n  // Sizes\n  // ------------------------------\n  // small\n  &-sm &-dot {\n    .square(@spin-dot-size-sm);\n  }\n\n  // large\n  &-lg &-dot {\n    .square(@spin-dot-size-lg);\n  }\n\n  &-text,\n  &&-show-text &-dot {\n    display: none;\n  }\n\n  &&-show-text &-text {\n    display: block;\n  }\n}\n\n@keyframes antSpinBounce {\n  0%,\n  100% {\n    transform: scale(0);\n  }\n  50% {\n    transform: scale(1);\n  }\n}\n\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  /* IE10+ */\n  .ant-spin-nested-loading > .ant-spin-container {\n    background: #fff;\n    opacity: 0.5;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/spin/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@steps-prefix-cls: ant-steps;\n@process-icon-color: @primary-color;\n@process-title-color: #666;\n@process-description-color: @process-title-color;\n@process-tail-color: @border-color-split;\n@wait-icon-color: #ccc;\n@wait-title-color: #999;\n@wait-description-color: @wait-title-color;\n@wait-tail-color: @process-tail-color;\n@finish-icon-color: @process-icon-color;\n@finish-title-color: @wait-title-color;\n@finish-description-color: @finish-title-color;\n@finish-tail-color: @process-icon-color;\n@error-icon-color: @error-color;\n@error-title-color: @error-color;\n@error-description-color: @error-color;\n@error-tail-color: @error-color;\n\n.@{steps-prefix-cls} {\n  font-size: 0;\n  width: 100%;\n  line-height: 1.5;\n  .@{steps-prefix-cls}-item {\n    position: relative;\n    display: inline-block;\n    vertical-align: top;\n\n    &.@{steps-prefix-cls}-status-wait {\n      .@{steps-prefix-cls}-head-inner {\n        border-color: @wait-icon-color;\n        background-color: #fff;\n        > .@{steps-prefix-cls}-icon {\n          color: @wait-icon-color;\n        }\n      }\n      .@{steps-prefix-cls}-title {\n        color: @wait-title-color;\n      }\n      .@{steps-prefix-cls}-description {\n        color: @wait-description-color;\n      }\n      .@{steps-prefix-cls}-tail > i {\n        background-color: @wait-tail-color;\n      }\n    }\n    &.@{steps-prefix-cls}-status-process {\n      .@{steps-prefix-cls}-head-inner {\n        border-color: @process-icon-color;\n        background-color: @process-icon-color;\n        > .@{steps-prefix-cls}-icon {\n          color: #fff;\n        }\n      }\n      .@{steps-prefix-cls}-title {\n        color: @process-title-color;\n      }\n      .@{steps-prefix-cls}-description {\n        color: @process-description-color;\n      }\n      .@{steps-prefix-cls}-tail > i {\n        background-color: @process-tail-color;\n      }\n    }\n    &.@{steps-prefix-cls}-status-finish {\n      .@{steps-prefix-cls}-head-inner {\n        border-color: @finish-icon-color;\n        background-color: #fff;\n        > .@{steps-prefix-cls}-icon {\n          color: @finish-icon-color;\n        }\n      }\n      .@{steps-prefix-cls}-tail > i:after {\n        width: 100%;\n        background: @finish-tail-color;\n        transition: all 0.4s ease;\n        opacity: 1;\n      }\n      .@{steps-prefix-cls}-title {\n        color: @finish-title-color;\n      }\n      .@{steps-prefix-cls}-description {\n        color: @finish-description-color;\n      }\n    }\n\n    &.@{steps-prefix-cls}-status-error {\n      .@{steps-prefix-cls}-head-inner {\n        border-color: @error-icon-color;\n        background-color: #fff;\n        > .@{steps-prefix-cls}-icon {\n          color: @error-icon-color;\n        }\n      }\n      .@{steps-prefix-cls}-title {\n        color: @error-title-color;\n      }\n      .@{steps-prefix-cls}-description {\n        color: @error-description-color;\n      }\n      .@{steps-prefix-cls}-tail > i {\n        background-color: @process-tail-color;\n      }\n    }\n\n    &.@{steps-prefix-cls}-next-error {\n      .@{steps-prefix-cls}-tail > i,\n      .@{steps-prefix-cls}-tail > i:after {\n        background-color: @error-tail-color;\n      }\n    }\n\n    &.@{steps-prefix-cls}-custom {\n      .@{steps-prefix-cls}-head-inner {\n        background: none;\n        border: 0;\n        width: auto;\n        height: auto;\n        > .@{steps-prefix-cls}-icon {\n          font-size: 20px;\n          top: 2px;\n          width: 20px;\n          height: 20px;\n        }\n      }\n      &.@{steps-prefix-cls}-status-process {\n        .@{steps-prefix-cls}-head-inner > .@{steps-prefix-cls}-icon {\n          color: @process-icon-color;\n        }\n      }\n    }\n  }\n\n  .@{steps-prefix-cls}-head,\n  .@{steps-prefix-cls}-main {\n    position: relative;\n    display: inline-block;\n    vertical-align: top;\n  }\n  .@{steps-prefix-cls}-head {\n    background: #fff;\n  }\n\n  .@{steps-prefix-cls}-head-inner {\n    display: block;\n    border: 1px solid @wait-icon-color;\n    width: 26px;\n    height: 26px;\n    line-height: 26px;\n    text-align: center;\n    border-radius: 26px;\n    font-size: 14px;\n    margin-right: 8px;\n    transition: background-color 0.3s ease, border-color 0.3s ease;\n\n    > .@{steps-prefix-cls}-icon {\n      line-height: 1;\n      top: -1.5px;\n      color: @primary-color;\n      position: relative;\n\n      &.anticon {\n        font-size: 12px;\n        &-cross,\n        &-check {\n          font-weight: bold;\n        }\n      }\n    }\n  }\n  .@{steps-prefix-cls}-main {\n    margin-top: 2.5px;\n  }\n  .@{steps-prefix-cls}-title {\n    font-size: 14px;\n    margin-bottom: 4px;\n    color: #666;\n    font-weight: bold;\n    background: #fff;\n    display: inline-block;\n    padding-right: 10px;\n    > a:first-child:last-child {\n      color: #666;\n    }\n  }\n  .@{steps-prefix-cls}-item-last {\n    .@{steps-prefix-cls}-title {\n      padding-right: 0;\n    }\n  }\n  .@{steps-prefix-cls}-description {\n    font-size: 12px;\n    color: #999;\n  }\n  .@{steps-prefix-cls}-tail {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 13px;\n    padding: 0 10px;\n    > i {\n      display: inline-block;\n      vertical-align: top;\n      background: @wait-tail-color;\n      height: 1px;\n      border-radius: 1px;\n      width: 100%;\n      position: relative;\n      &:after {\n        position: absolute;\n        content: '';\n        top: 0;\n        width: 0;\n        background: @border-color-split;\n        height: 100%;\n        opacity: 0;\n      }\n    }\n  }\n\n  &.@{steps-prefix-cls}-small {\n    .@{steps-prefix-cls}-head-inner {\n      border: 1px solid @wait-icon-color;\n      width: 18px;\n      height: 18px;\n      line-height: 18px;\n      text-align: center;\n      border-radius: 18px;\n      font-size: 12px;\n      margin-right: 10px;\n      > .@{steps-prefix-cls}-icon.anticon {\n        .iconfont-size-under-12px(9px);\n        top: 0;\n      }\n    }\n    .@{steps-prefix-cls}-main {\n      margin-top: 0;\n    }\n    .@{steps-prefix-cls}-title {\n      font-size: 12px;\n      margin-bottom: 4px;\n      color: #666;\n      font-weight: bold;\n    }\n    .@{steps-prefix-cls}-description {\n      font-size: 12px;\n      color: #999;\n    }\n    .@{steps-prefix-cls}-tail {\n      top: 8px;\n      padding: 0 8px;\n      > i {\n        height: 1px;\n        border-radius: 1px;\n        width: 100%;\n      }\n    }\n  }\n\n  &.@{steps-prefix-cls}-small .@{steps-prefix-cls}-item.@{steps-prefix-cls}-custom .@{steps-prefix-cls}-head-inner,\n  .@{steps-prefix-cls}-item.@{steps-prefix-cls}-custom .@{steps-prefix-cls}-head-inner {\n    width: inherit;\n    height: inherit;\n    line-height: inherit;\n    border-radius: 0;\n    border: 0;\n    background: none;\n  }\n}\n\n.@{steps-prefix-cls}-vertical {\n  .@{steps-prefix-cls}-item {\n    display: block;\n  }\n\n  .@{steps-prefix-cls}-tail {\n    position: absolute;\n    left: 13px;\n    top: 0;\n    height: 100%;\n    width: 1px;\n    padding: 30px 0 4px 0;\n    > i {\n      height: 100%;\n      width: 1px;\n      &:after {\n        height: 0;\n        width: 100%;\n      }\n    }\n  }\n\n  .@{steps-prefix-cls}-status-finish {\n    .@{steps-prefix-cls}-tail > i:after {\n      height: 100%;\n    }\n  }\n\n  .@{steps-prefix-cls}-head {\n    float: left;\n    &-inner {\n      margin-right: 16px;\n    }\n  }\n\n  .@{steps-prefix-cls}-main {\n    min-height: 47px;\n    overflow: hidden;\n    display: block;\n    .@{steps-prefix-cls}-title {\n      line-height: 26px;\n    }\n    .@{steps-prefix-cls}-description {\n      padding-bottom: 12px;\n    }\n  }\n}\n\n.@{steps-prefix-cls}-vertical.@{steps-prefix-cls}-small {\n  .@{steps-prefix-cls}-tail {\n    position: absolute;\n    left: 9px;\n    top: 0;\n    padding: 22px 0 4px 0;\n    > i {\n      height: 100%;\n    }\n  }\n\n  .@{steps-prefix-cls}-title {\n    line-height: 18px;\n  }\n}\n\n.@{steps-prefix-cls}-horizontal {\n   &.@{steps-prefix-cls}-hidden {\n     visibility: hidden;\n  }\n  .@{steps-prefix-cls}-description {\n    max-width: 100px;\n  }\n  .@{steps-prefix-cls}-item:not(:first-child) .@{steps-prefix-cls}-head {\n    padding-left: 10px;\n    margin-left: -10px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/steps/style/index.less\n **/"",""/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Prevent adjustments of font size after orientation changes in IE and iOS.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n * 2. Add the correct display in IE.\n */\n\narticle,\naside,\ndetails, /* 1 */\nfigcaption,\nfigure,\nfooter,\nheader,\nmain, /* 2 */\nmenu,\nnav,\nsection,\nsummary { /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  vertical-align: baseline;\n}\n\n/**\n * Add the correct display in IE 10-.\n * 1. Add the correct display in IE.\n */\n\ntemplate, /* 1 */\n[hidden] {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent; /* 1 */\n  -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n  outline-width: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change font properties to `inherit` in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n  font: inherit; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Restore the font weight unset by the previous rule.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\""button\""], /* 1 */\n[type=\""reset\""],\n[type=\""submit\""] {\n  -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\""button\""]::-moz-focus-inner,\n[type=\""reset\""]::-moz-focus-inner,\n[type=\""submit\""]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\""button\""]:-moz-focusring,\n[type=\""reset\""]:-moz-focusring,\n[type=\""submit\""]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\""checkbox\""],\n[type=\""radio\""] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\""number\""]::-webkit-inner-spin-button,\n[type=\""number\""]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\""search\""] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.\n */\n\n[type=\""search\""]::-webkit-search-cancel-button,\n[type=\""search\""]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Correct the text style of placeholders in Chrome, Edge, and Safari.\n */\n\n::-webkit-input-placeholder {\n  color: inherit;\n  opacity: 0.54;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///~/normalize.css/normalize.css\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@switch-prefix-cls: ant-switch;\n@switch-duration: .3s;\n\n.@{switch-prefix-cls} {\n  position: relative;\n  display: inline-block;\n  box-sizing: border-box;\n  width: 44px;\n  height: 22px;\n  line-height: 20px;\n  vertical-align: middle;\n  border-radius: 20px;\n  border: 1px solid #ccc;\n  background-color: #ccc;\n  cursor: pointer;\n  transition: all @switch-duration @ease-in-out-circ;\n  user-select: none;\n\n  &-inner {\n    color: #fff;\n    font-size: 12px;\n    position: absolute;\n    left: 24px;\n  }\n\n  &:after {\n    position: absolute;\n    width: 18px;\n    height: 18px;\n    left: 2px;\n    top: 1px;\n    border-radius: 100%;\n    background-color: #fff;\n    content: \"" \"";\n    cursor: pointer;\n    transition: left @switch-duration @ease-in-out-circ;\n  }\n\n  &:focus {\n    box-shadow: 0 0 0 2px fade(@primary-color, 20%);\n    outline: 0;\n  }\n\n  &:focus:hover {\n    box-shadow: none;\n  }\n\n  &-small {\n    height: 14px;\n    line-height: 12px;\n    width: 28px;\n    &:after {\n      width: 12px;\n      height: 12px;\n      top: 0;\n      left: 0;\n    }\n  }\n\n  &-small&-checked:after {\n    left: 14px;\n  }\n\n  &-checked {\n    border-color: @primary-color;\n    background-color: @primary-color;\n\n    .@{switch-prefix-cls}-inner {\n      left: 6px;\n    }\n\n    &:after {\n      left: 22px;\n    }\n  }\n\n  &-disabled {\n    cursor: not-allowed;\n    background: #f4f4f4;\n    border-color: #f4f4f4;\n\n    &:after {\n      background: #ccc;\n      cursor: not-allowed;\n    }\n\n    .@{switch-prefix-cls}-inner {\n      color: #ccc;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/switch/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@table-prefix-cls: ant-table;\n@table-head-background-color: #f7f7f7;\n\n.@{table-prefix-cls} {\n  font-size: @font-size-base;\n  color: @text-color;\n  overflow: hidden;\n  position: relative;\n  border-radius: @border-radius-base @border-radius-base 0 0;\n  overflow: hidden;\n\n  &-body {\n    transition: opacity 0.3s ease;\n  }\n\n  table {\n    width: 100%;\n    border-collapse: separate;\n    border-spacing: 0;\n    text-align: left;\n    border-radius: @border-radius-base @border-radius-base 0 0;\n    overflow: hidden;\n  }\n\n  th {\n    background: @table-head-background-color;\n    font-weight: bold;\n    transition: background .3s ease;\n    text-align: left;\n\n    .anticon-filter {\n      margin-left: 4px;\n      .iconfont-size-under-12px(10px);\n      cursor: pointer;\n      color: #aaa;\n      transition: all 0.3s ease;\n      &:hover {\n        color: #666;\n      }\n    }\n\n    .@{table-prefix-cls}-filter-selected.anticon-filter {\n      color: @primary-color;\n    }\n  }\n\n  td {\n    border-bottom: 1px solid @border-color-split;\n  }\n\n  tr {\n    transition: all .3s ease;\n    &.@{table-prefix-cls}-row-hover,\n    &:hover {\n      background: tint(@primary-color, 90%);\n    }\n  }\n\n  thead tr:hover {\n    background: none;\n  }\n\n  &-footer {\n    padding: 16px 8px;\n    background: @table-head-background-color;\n    position: relative;\n    top: -1px;\n    border-radius: 0 0 @border-radius-base @border-radius-base;\n  }\n\n  &.@{table-prefix-cls}-bordered &-footer {\n    border: 1px solid @border-color-split;\n  }\n\n  tr.@{table-prefix-cls}-row-selected {\n    background: #fafafa;\n  }\n\n  th.@{table-prefix-cls}-column-sort {\n    background: #eaeaea;\n  }\n\n  th,\n  td {\n    padding: 16px 8px;\n    word-break: break-all;\n  }\n\n  th.@{table-prefix-cls}-selection-column,\n  td.@{table-prefix-cls}-selection-column {\n    text-align: center;\n    width: 60px;\n  }\n\n  &-header {\n    background: @table-head-background-color;\n    overflow: hidden;\n    border-radius: @border-radius-base @border-radius-base 0 0;\n  }\n\n  &-header table {\n    border-radius: @border-radius-base @border-radius-base 0 0;\n  }\n\n  &-loading {\n    position: relative;\n    .@{table-prefix-cls}-body {\n      background: #fff;\n      opacity: 0.5;\n    }\n    .@{table-prefix-cls}-spin-holder {\n      height: 20px;\n      line-height: 20px;\n      left: 50%;\n      top: 50%;\n      margin-left: -30px;\n      position: absolute;\n    }\n    .@{table-prefix-cls}-with-pagination {\n      margin-top: -20px;\n    }\n    .@{table-prefix-cls}-without-pagination {\n      margin-top: 10px;\n    }\n  }\n\n  &-middle {\n    th,\n    td {\n      padding: 10px 8px;\n    }\n  }\n\n  &-small {\n    border: 1px solid @border-color-split;\n    border-radius: @border-radius-base;\n\n    table {\n      border: 0;\n      padding: 0 8px;\n    }\n\n    th {\n      padding: 10px 8px;\n      background: #fff;\n      border-bottom: 1px solid @border-color-split;\n    }\n\n    td {\n      padding: 6px 8px;\n    }\n\n    .@{table-prefix-cls}-header {\n      background: #fff;\n      table {\n        border-bottom: 1px solid @border-color-split;\n      }\n      th {\n        border-bottom: 0;\n      }\n    }\n\n    .@{table-prefix-cls}-row:last-child td {\n      border-bottom: 0;\n    }\n  }\n\n  &-column-sorter {\n    margin-left: 4px;\n    display: inline-block;\n    width: 12px;\n    height: 15px;\n    vertical-align: middle;\n    text-align: center;\n    &-up,\n    &-down {\n      line-height: 4px;\n      height: 6px;\n      display: block;\n      width: 12px;\n      cursor: pointer;\n      &:hover .anticon {\n        color: #666;\n      }\n      &.on {\n        .anticon-caret-up,\n        .anticon-caret-down {\n          color: @primary-color;\n        }\n      }\n    }\n    .anticon-caret-up,\n    .anticon-caret-down {\n      .iconfont-size-under-12px(6px);\n      line-height: 6px;\n      height: 6px;\n      color: #aaa;\n      &:before {\n        -moz-transform-origin: 53% 50%; /* fix firefox position */\n      }\n    }\n  }\n\n  &-bordered {\n    table {\n      border: 1px solid @border-color-split;\n    }\n\n    &.@{table-prefix-cls}-fixed-header {\n      border: 1px solid @border-color-split;\n      table {\n        border: 0;\n      }\n    }\n\n    th {\n      border-bottom: 1px solid @border-color-split;\n    }\n\n    tbody tr:last-child {\n      th,\n      td {\n        border-bottom: 0;\n      }\n    }\n\n    th,\n    td {\n      border-right: 1px solid @border-color-split;\n      &:last-child {\n        border-right: 0;\n      }\n    }\n  }\n\n  &-empty {\n    position: relative;\n    margin-bottom: 16px;\n  }\n\n  &-empty &-body {\n    height: 150px;\n  }\n\n  &-placeholder {\n    height: 100px;\n    line-height: 100px;\n    text-align: center;\n    font-size: 12px;\n    color: #999;\n    border-bottom: 1px solid @border-color-split;\n    position: absolute;\n    top: 50px;\n    left: 0;\n    width: 100%;\n    .anticon {\n      margin-right: 4px;\n    }\n  }\n\n  &-pagination {\n    margin: 16px 0;\n    float: right;\n  }\n\n  &-filter-dropdown {\n    min-width: 96px;\n    margin-left: -8px;\n    background: #fff;\n    border-radius: @border-radius-base;\n    border: 1px solid @border-color-base;\n    box-shadow: @box-shadow-base;\n\n    .ant-dropdown-menu {\n      border: 0;\n      box-shadow: none;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n\n      &-item > label + span {\n        margin-left: 8px;\n      }\n\n      &-sub {\n        border-radius: @border-radius-base;\n        border: 1px solid @border-color-base;\n        box-shadow: @box-shadow-base;\n      }\n\n      .ant-dropdown-submenu-contain-selected {\n        .ant-dropdown-menu-submenu-title:after {\n          color: @primary-color;\n          font-weight: bold;\n          text-shadow: 0 0 2px tint(@primary-color, 80%);\n        }\n      }\n    }\n\n    .ant-dropdown-menu-item {\n      overflow: hidden;\n    }\n\n    > .ant-dropdown-menu > .ant-dropdown-menu-item:last-child,\n    > .ant-dropdown-menu > .ant-dropdown-menu-submenu:last-child .ant-dropdown-menu-submenu-title {\n      border-radius: 0;\n    }\n\n    &-btns {\n      overflow: hidden;\n      padding: 7px 15px;\n      border-top: 1px solid @border-color-split;\n    }\n\n    &-link {\n      color: @link-color;\n      &:hover {\n        color: @link-hover-color;\n      }\n      &:active {\n        color: @link-active-color;\n      }\n      &.confirm {\n        float: left;\n      }\n      &.clear {\n        float: right;\n      }\n    }\n  }\n\n  &-expand-icon-th {\n    width: 34px;\n  }\n\n  &-row {\n    &-expand-icon {\n      cursor: pointer;\n      display: inline-block;\n      width: 17px;\n      height: 17px;\n      text-align: center;\n      line-height: 15px;\n      border: 1px solid @border-color-split;\n      user-select: none;\n      background: #fff;\n      &-cell {\n        width: 18px;\n      }\n    }\n\n    &-expanded:after {\n      content: '-';\n    }\n\n    &-collapsed:after {\n      content: '+';\n    }\n\n    &-spaced {\n      visibility: hidden;\n      &:after {\n        content: '.';\n      }\n    }\n\n    &[class*=\""@{table-prefix-cls}-row-level-0\""] .@{table-prefix-cls}-selection-column > span {\n      display: inline-block;\n    }\n  }\n\n  tr&-expanded-row {\n    &,\n    &:hover {\n      background: #fbfbfb;\n    }\n  }\n\n  .@{table-prefix-cls}-row-indent + .@{table-prefix-cls}-row-expand-icon {\n    margin-right: 8px;\n  }\n\n  &-scroll {\n    overflow: auto;\n    table {\n      width: auto;\n      min-width: 100%;\n    }\n  }\n\n  &-body-inner {\n    height: 100%;\n  }\n\n  &-fixed-header &-body {\n    position: relative;\n    background: #fff;\n  }\n\n  &-fixed-header &-body-inner {\n    overflow: scroll;\n  }\n\n  &-fixed-header &-scroll &-header {\n    overflow-x: scroll;\n    overflow-y: hidden;\n    padding-bottom: 20px;\n    margin-bottom: -20px;\n  }\n\n  &-fixed-left,\n  &-fixed-right {\n    position: absolute;\n    top: 0;\n    overflow: hidden;\n    z-index: 1;\n    transition: box-shadow .3s ease;\n    border-radius: 0;\n    table {\n      width: auto;\n      background: #fff;\n    }\n  }\n\n  &-fixed-left &-fixed,\n  &-fixed-right &-fixed {\n    border-radius: 0;\n  }\n\n  &-fixed-left {\n    left: 0;\n    box-shadow: @shadow-1-right;\n    .@{table-prefix-cls}-header {\n      overflow-y: hidden;\n    }\n    // hide scrollbar in left fixed columns\n    .@{table-prefix-cls}-body-inner {\n      margin-right: -20px;\n      padding-right: 20px;\n    }\n    .@{table-prefix-cls}-fixed-header & .@{table-prefix-cls}-body-inner {\n      padding-right: 0;\n    }\n    &,\n    table {\n      border-radius: @border-radius-base 0 0 0;\n    }\n  }\n\n  &-fixed-right {\n    right: 0;\n    box-shadow: @shadow-1-left;\n    &,\n    table {\n      border-radius: 0 @border-radius-base 0 0;\n    }\n    // hide expand row content in right-fixed Table\n    // https://github.com/ant-design/ant-design/issues/1898\n    .@{table-prefix-cls}-expanded-row {\n      color: transparent;\n      pointer-events: none;\n    }\n  }\n\n  &&-scroll-position-left &-fixed-left {\n    box-shadow: none;\n  }\n\n  &&-scroll-position-right &-fixed-right {\n    box-shadow: none;\n  }\n\n  &-column-hidden {\n    display: none;\n  }\n\n  th&-column-has-prev {\n    position: relative;\n  }\n\n  th&-column-has-prev,\n  td&-column-has-prev {\n    padding-left: 24px;\n  }\n\n  &-prev-columns-page,\n  &-next-columns-page {\n    cursor: pointer;\n    color: #666;\n    z-index: 1;\n    &:hover {\n      color: @primary-color;\n    }\n    &-disabled {\n      cursor: not-allowed;\n      color: #bbb;\n      &:hover {\n        color: #bbb;\n      }\n    }\n  }\n\n  &-prev-columns-page {\n    position: absolute;\n    left: 8px;\n    &:before {\n      content: '\\e601';\n      .iconfont-size-under-12px(9px);\n      font-weight: bold;\n      font-family: anticon;\n    }\n  }\n\n  &-next-columns-page {\n    float: right;\n    margin-left: 8px;\n    &:before {\n      content: '\\e600';\n      .iconfont-size-under-12px(9px);\n      font-weight: bold;\n      font-family: anticon;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/table/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@tab-prefix-cls: ant-tabs;\n\n.@{tab-prefix-cls} {\n  box-sizing: border-box;\n  position: relative;\n  overflow: hidden;\n  .clearfix;\n  color: @text-color;\n\n  &-bar {\n    outline: none;\n  }\n\n  &-ink-bar {\n    z-index: 1;\n    position: absolute;\n    left: 0;\n    bottom: 1px;\n    box-sizing: border-box;\n    height: 2px;\n    background-color: @primary-color;\n    transition: transform 0.3s @ease-in-out;\n    transform-origin: 0 0;\n  }\n\n  &-bar {\n    border-bottom: 1px solid @border-color-base;\n    margin-bottom: 16px;\n  }\n\n  &-nav-container {\n    overflow: hidden;\n    font-size: 14px;\n    line-height: @line-height-base;\n    box-sizing: border-box;\n    position: relative;\n    white-space: nowrap;\n    margin-bottom: -1px;\n    .clearfix;\n  }\n\n  &-nav-container-scrolling {\n    padding-left: 32px;\n    padding-right: 32px;\n  }\n\n  &-tab-prev,\n  &-tab-next {\n    user-select: none;\n    z-index: 2;\n    margin-right: -2px;\n    margin-top: 3px;\n    width: 32px;\n    height: 100%;\n    line-height: 32px;\n    cursor: pointer;\n    border: 0;\n    background-color: transparent;\n    position: absolute;\n    text-align: center;\n    color: #999;\n    transition: color 0.3s ease;\n\n    &:hover {\n      color: #666;\n    }\n\n    &-icon {\n      position: relative;\n      display: inline-block;\n      font-style: normal;\n      font-weight: bold;\n      font-variant: normal;\n      line-height: inherit;\n      vertical-align: baseline;\n      text-align: center;\n      text-transform: none;\n      font-family: sans-serif;\n      .iconfont-size-under-12px(10px);\n\n      &:before {\n        display: block;\n        font-family: \""anticon\"" !important;\n      }\n    }\n  }\n\n  &-tab-btn-disabled {\n    cursor: not-allowed;\n    &,\n    &:hover {\n      color: #ccc;\n    }\n  }\n\n  &-tab-next {\n    right: 2px;\n\n    &-icon:before {\n      content: \""\\e600\"";\n    }\n  }\n\n  &-tab-prev {\n    left: 0;\n    &-icon:before {\n      content: \""\\e601\"";\n    }\n    :root & {\n      filter: none;\n    }\n  }\n\n  &-nav-wrap {\n    overflow: hidden;\n    margin-bottom: -1px;\n  }\n\n  &-nav-scroll {\n    overflow: hidden;\n    white-space: nowrap;\n  }\n\n  &-nav {\n    box-sizing: border-box;\n    padding-left: 0;\n    transition: transform 0.5s @ease-in-out;\n    position: relative;\n    margin: 0;\n    list-style: none;\n    float: left;\n\n    &:before,\n    &:after {\n      display: table;\n      content: \"" \"";\n    }\n\n    &:after {\n      clear: both;\n    }\n\n    .@{tab-prefix-cls}-tab-disabled {\n      pointer-events: none;\n      cursor: default;\n\n      .@{tab-prefix-cls}-tab-inner {\n        color: #ccc;\n      }\n    }\n\n    .@{tab-prefix-cls}-tab {\n      display: inline-block;\n      height: 100%;\n      margin-right: 24px;\n      box-sizing: border-box;\n      position: relative;\n\n      &-inner {\n        padding: 8px 20px;\n        transition: color 0.3s @ease-in-out;\n        display: block;\n        cursor: pointer;\n        text-decoration: none;\n\n        &:hover {\n          color: tint(@primary-color, 20%);\n        }\n\n        &:active {\n          color: shade(@primary-color, 5%);\n        }\n\n        .anticon {\n          width: 14px;\n          height: 14px;\n          margin-right: 8px;\n        }\n      }\n    }\n\n    .@{tab-prefix-cls}-tab-active .@{tab-prefix-cls}-tab-inner {\n      color: @primary-color;\n    }\n  }\n\n  &-mini &-nav-container {\n    font-size: 12px;\n  }\n\n  &-mini &-tab {\n    margin-right: 0;\n    .@{tab-prefix-cls}-tab-inner {\n      padding: 8px 16px;\n    }\n  }\n\n  &-tabpane-hidden {\n    display: none;\n  }\n\n  &-content {\n    position: relative;\n    width: 100%;\n  }\n\n  &-slide-horizontal-backward-enter {\n    .motion-common();\n    animation-play-state: paused;\n    animation-timing-function: @ease-in-out-quint;\n    opacity: 0;\n    animation-duration: 0.4s;\n  }\n\n  &-slide-horizontal-backward-enter&-slide-horizontal-backward-enter-active {\n    animation-name: antMoveLeftIn;\n    transform: translateZ(0);\n    animation-play-state: running;\n  }\n\n  &-slide-horizontal-backward-leave {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    .motion-common();\n    animation-play-state: paused;\n    animation-timing-function: @ease-in-out-quint;\n    animation-duration: 0.4s;\n  }\n\n  &-slide-horizontal-backward-leave&-slide-horizontal-backward-leave-active {\n    animation-name: antMoveRightOut;\n    transform: translateZ(0);\n    animation-play-state: running;\n  }\n\n  &-slide-horizontal-forward-enter {\n    .motion-common();\n    animation-play-state: paused;\n    animation-timing-function: @ease-in-out-quint;\n    opacity: 0;\n    animation-duration: 0.4s;\n  }\n\n  &-slide-horizontal-forward-enter&-slide-horizontal-forward-enter-active {\n    animation-name: antMoveRightIn;\n    animation-play-state: running;\n    transform: translateZ(0);\n  }\n\n  &-slide-horizontal-forward-leave {\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n    bottom: 0;\n    .motion-common();\n    animation-duration: 0.4s;\n    animation-play-state: paused;\n    animation-timing-function: @ease-in-out-quint;\n  }\n\n  &-slide-horizontal-forward-leave&-slide-horizontal-forward-leave-active {\n    transform: translateZ(0);\n    animation-name: antMoveLeftOut;\n    animation-play-state: running;\n  }\n\n  &-vertical {\n    > .@{tab-prefix-cls}-bar {\n      border-bottom: 0;\n\n      .@{tab-prefix-cls}-tab {\n        float: none;\n        margin-right: 0;\n        margin-bottom: 16px;\n        display: block;\n        &:last-child {\n          margin-bottom: 0;\n        }\n        .@{tab-prefix-cls}-tab-inner {\n          padding: 8px 24px;\n        }\n      }\n\n      .@{tab-prefix-cls}-nav-scroll {\n        width: auto;\n      }\n\n      .@{tab-prefix-cls}-nav-container {\n        margin-bottom: 0;\n      }\n\n      .@{tab-prefix-cls}-nav-wrap {\n        margin-bottom: 0;\n      }\n\n      .@{tab-prefix-cls}-ink-bar {\n        width: 2px;\n        left: auto;\n        height: auto;\n        top: 0;\n      }\n    }\n\n    > .@{tab-prefix-cls}-content {\n      overflow: hidden;\n      width: auto;\n    }\n  }\n\n  &-vertical&-left {\n    > .@{tab-prefix-cls}-bar {\n      float: left;\n      border-right: 1px solid @border-color-split;\n      margin-right: -1px;\n      margin-bottom: 0;\n      .@{tab-prefix-cls}-tab {\n        .@{tab-prefix-cls}-tab-inner {\n          text-align: right;\n        }\n      }\n      .@{tab-prefix-cls}-nav-container {\n        margin-right: -1px;\n      }\n      .@{tab-prefix-cls}-nav-wrap {\n        margin-right: -1px;\n      }\n      .@{tab-prefix-cls}-ink-bar {\n        right: 1px;\n      }\n    }\n    > .@{tab-prefix-cls}-content {\n      padding-left: 24px;\n      border-left: 1px solid @border-color-split;\n    }\n  }\n\n  &-vertical&-right {\n    > .@{tab-prefix-cls}-bar {\n      float: right;\n      border-left: 1px solid @border-color-split;\n      margin-left: -1px;\n      margin-bottom: 0;\n      .@{tab-prefix-cls}-nav-container {\n        margin-left: -1px;\n      }\n      .@{tab-prefix-cls}-nav-wrap {\n        margin-left: -1px;\n      }\n      .@{tab-prefix-cls}-ink-bar {\n        left: 1px;\n      }\n    }\n    > .@{tab-prefix-cls}-content {\n      padding-right: 24px;\n      border-right: 1px solid @border-color-split;\n    }\n  }\n\n  &-bottom > &-bar {\n    margin-bottom: 0;\n    margin-top: 16px;\n  }\n\n  // card style\n  &&-card > &-bar &-nav-container {\n    height: 36px;\n  }\n  &&-card > &-bar &-ink-bar {\n    visibility: hidden;\n  }\n  &&-card > &-bar &-tab {\n    margin: 0;\n    border: 1px solid @border-color-base;\n    border-bottom: 0;\n    border-radius: 6px 6px 0 0;\n    transition: all 0.3s @ease-in-out;\n    background: #f9f9f9;\n    margin-right: 2px;\n  }\n  &&-card > &-bar &-tab-inner {\n    padding: 7px 16px 6px;\n    transition: all 0.3s @ease-in-out;\n  }\n  &&-card > &-bar &-tab-active {\n    background: #fff;\n    transform: translateZ(0);\n    border-color: @border-color-base;\n    color: @primary-color;\n  }\n  &&-card > &-bar &-tab-active &-tab-inner {\n    padding-bottom: 7px;\n    transform: translateZ(0);\n  }\n  &&-card > &-bar &-nav-wrap {\n    margin-bottom: 0;\n  }\n  &&-card > &-bar &-tab-inner .anticon-cross {\n    margin-right: 0;\n    color: #999;\n    transition: all 0.3s @ease-in-out;\n    .iconfont-size-under-12px(9px);\n    transform-origin: 100% 50%;\n    width: 0;\n    text-align: right;\n    vertical-align: middle;\n    overflow: hidden;\n    &:hover {\n      color: #404040;\n      font-weight: bold;\n    }\n  }\n\n  &&-editable-card > &-bar &-tab:not(&-tab-active):hover &-tab-inner {\n    padding-left: 8px;\n    padding-right: 8px;\n  }\n\n  &&-card > &-bar &-tab-active .anticon-cross,\n  &&-card > &-bar &-tab:hover .anticon-cross {\n    width: 16px;\n    transform: translateZ(0);\n  }\n\n  &-extra-content {\n    float: right;\n    line-height: 32px;\n\n    .@{tab-prefix-cls}-new-tab {\n      width: 20px;\n      height: 20px;\n      line-height: 20px;\n      text-align: center;\n      cursor: pointer;\n      border-radius: 3px;\n      border: 1px solid @border-color-base;\n      font-size: 12px;\n      .iconfont-size-under-12px(10px);\n      color: #999;\n      transition: color 0.3s ease;\n      &:hover {\n        color: #404040;\n      }\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tabs/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@tag-prefix-cls: ant-tag;\n\n.@{tag-prefix-cls} {\n  display: inline-block;\n  line-height: 22px;\n  height: 22px;\n  padding: 0 8px;\n  border-radius: @border-radius-base;\n  border: 1px solid @border-color-split;\n  background: #f7f7f7;\n  font-size: @font-size-base;\n  transition: all 0.3s @ease-in-out-circ;\n  vertical-align: middle;\n  opacity: 1;\n  overflow: hidden;\n  margin: 2px 4px 2px 0;\n  cursor: pointer;\n\n  &:hover {\n    opacity: 0.85;\n  }\n\n  &,\n  a,\n  a:hover {\n    color: @text-color;\n  }\n\n  &-text {\n    a:first-child:last-child {\n      display: inline-block;\n      margin: 0 -8px;\n      padding: 0 8px;\n    }\n  }\n\n  .anticon-cross {\n    .iconfont-size-under-12px(10px);\n    cursor: pointer;\n    font-weight: bold;\n    margin-left: 3px;\n    color: #666;\n    transition: all 0.3s ease;\n    opacity: 0.66;\n\n    &:hover {\n      opacity: 1;\n    }\n  }\n\n  &-blue,\n  &-green,\n  &-yellow,\n  &-red {\n    border: 0;\n    &,\n    a,\n    a:hover,\n    .anticon-cross,\n    .anticon-cross:hover {\n      color: #fff;\n    }\n  }\n\n  &-blue {\n    background: @link-color;\n  }\n\n  &-green {\n    background: @success-color;\n  }\n\n  &-yellow {\n    background: @warning-color;\n  }\n\n  &-red {\n    background: @error-color;\n  }\n\n  &-close {\n    width: 0 !important;\n    padding: 0;\n    margin: 0;\n  }\n\n  &-zoom-enter,\n  &-zoom-appear {\n    animation: antFadeIn .2s @ease-in-out-circ;\n    animation-fill-mode: both;\n  }\n\n  &-zoom-leave {\n    animation: antZoomOut .2s @ease-in-out-circ;\n    animation-fill-mode: both;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tag/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@timeline-prefix-cls: ant-timeline;\n@timeline-color: @border-color-split;\n\n.@{timeline-prefix-cls} {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n\n  &-item {\n    position: relative;\n    padding: 0 0 12px 0;\n    list-style: none;\n    margin: 0;\n\n    &-tail {\n      position: absolute;\n      left: 5px;\n      top: 0;\n      height: 100%;\n      border-left: 2px solid @timeline-color;\n    }\n\n    &-pending &-tail {\n      display: none;\n    }\n\n    &-head {\n      position: absolute;\n      width: 12px;\n      height: 12px;\n      background-color: #fff;\n      border-radius: 100px;\n      border: 2px solid transparent;\n      &-blue {\n        border-color: @primary-color;\n        color: @primary-color;\n      }\n      &-red {\n        border-color: @error-color;\n        color: @error-color;\n      }\n      &-green {\n        border-color: @success-color;\n        color: @success-color;\n      }\n    }\n\n    &-head-custom {\n      position: absolute;\n      text-align: center;\n      width: 40px;\n      left: -14px;\n      line-height: 1;\n      margin-top: 6px;\n      border: 0;\n      height: auto;\n      border-radius: 0;\n      padding: 3px 0;\n      font-size: 12px;\n      transform: translateY(-50%);\n    }\n\n    &-content {\n      padding: 0 0 10px 24px;\n      font-size: @font-size-base;\n      position: relative;\n      top: -3px;\n    }\n\n    &-last {\n      .@{timeline-prefix-cls}-item-tail {\n        border-left: 2px dotted @timeline-color;\n        display: none;\n      }\n      .@{timeline-prefix-cls}-item-content {\n        min-height: 48px;\n      }\n    }\n  }\n\n  &&-pending &-item-last &-item-tail {\n    display: block;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/timeline/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../checkbox/style/mixin\"";\n\n@transfer-prefix-cls: ant-transfer;\n.antCheckboxFn(@checkbox-prefix-cls: ant-transfer-checkbox);\n\n.@{transfer-prefix-cls} {\n  position: relative;\n\n  &-list {\n    font-size: 12px;\n    border: 1px solid @border-color-base;\n    display: inline-block;\n    border-radius: @border-radius-base;\n    vertical-align: middle;\n    position: relative;\n    width: 160px;\n    height: 200px;\n    padding-top: 33px;\n\n    &-with-footer {\n      padding-bottom: 33px;\n    }\n\n    &-search {\n      &-action {\n        color: #ccc;\n        position: absolute;\n        top: 2px;\n        right: 2px;\n        width: 32px;\n        height: 32px;\n        line-height: 32px;\n        text-align: center;\n        font-size: 14px;\n      }\n    }\n\n    &-header {\n      padding: 7px 16px;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      background: #fff;\n      color: #666;\n      border-bottom: 1px solid @border-color-split;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n\n      &-title {\n        float: right;\n      }\n    }\n\n    &-body {\n      font-size: 12px;\n      line-height: 1.5;\n      position: relative;\n      height: 100%;\n\n      &-search-wrapper {\n        position: absolute;\n        top: 0;\n        left: 0;\n        height: 28px;\n        padding: 4px;\n        width: 100%;\n      }\n\n      &-not-found {\n        padding-top: 24px;\n        color: #ccc;\n        text-align: center;\n        height: 100%;\n      }\n\n      ul {\n        height: 100%;\n        overflow: auto;\n        li {\n          overflow: hidden;\n          white-space: nowrap;\n          text-overflow: ellipsis;\n          padding: 7px 16px;\n          transition: all 0.3s ease;\n          &:hover {\n            cursor: pointer;\n            background-color: tint(@primary-color, 90%);\n          }\n        }\n      }\n    }\n\n    ul li&-highlight-enter {\n      animation: transferHighlightIn 1s ease;\n      transition: none;\n    }\n\n    &-body-with-search {\n      padding-top: 34px;\n    }\n\n    &-footer {\n      border-top: 1px solid @border-color-split;\n      border-radius: 0 0 @border-radius-base @border-radius-base;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      width: 100%;\n    }\n  }\n\n  &-operation {\n    display: inline-block;\n    overflow: hidden;\n    margin: 0 8px;\n    vertical-align: middle;\n\n    .ant-btn {\n      float: left;\n      clear: both;\n\n      &:first-child {\n        margin-bottom: 4px;\n      }\n\n      .anticon {\n        .iconfont-size-under-12px(8px);\n      }\n    }\n  }\n}\n\n@keyframes transferHighlightIn {\n  0% {\n    background: tint(@primary-color, 80%);\n  }\n  100% {\n    background: transparent;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/transfer/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../tree/style/mixin\"";\n@import \""../../checkbox/style/mixin\"";\n\n@select-tree-prefix-cls: ant-select-tree;\n\n.antCheckboxFn(@checkbox-prefix-cls: ant-select-tree-checkbox);\n\n.@{select-tree-prefix-cls} {\n  margin: 0;\n  padding: 8px;\n  font-size: 12px;\n  li {\n    padding: 0;\n    margin: 8px 0;\n    list-style: none;\n    white-space: nowrap;\n    outline: 0;\n    &.filter-node {\n      > a {\n        font-weight: bold !important;\n      }\n    }\n    ul {\n      margin: 0;\n      padding: 0 0 0 18px;\n    }\n    a {\n      display: inline-block;\n      padding: 1px 5px;\n      border-radius: 2px;\n      margin: 0;\n      cursor: pointer;\n      text-decoration: none;\n      vertical-align: top;\n      color: #666;\n      transition: all 0.3s ease;\n      &:hover {\n        background-color: tint(@primary-color, 90%);\n      }\n      &.@{select-tree-prefix-cls}-node-selected {\n        background-color: tint(@primary-color, 80%);\n      }\n    }\n    span {\n      &.@{select-tree-prefix-cls}-checkbox {\n        margin: 2px 4px 0 0;\n      }\n      &.@{select-tree-prefix-cls}-switcher,\n      &.@{select-tree-prefix-cls}-iconEle {\n        margin: 0;\n        width: 16px;\n        height: 16px;\n        line-height: 16px;\n        display: inline-block;\n        vertical-align: middle;\n        border: 0 none;\n        cursor: pointer;\n        outline: none;\n      }\n      &.@{select-tree-prefix-cls}-icon_loading {\n        &:after {\n          content: '\\e6a1';\n          display: inline-block;\n          font-family: 'anticon';\n          font-weight: bold;\n          animation: loadingCircle 1s infinite linear;\n          margin-top: 8px;\n        }\n      }\n      &.@{select-tree-prefix-cls}-switcher {\n        &.@{select-tree-prefix-cls}-roots_open,\n        &.@{select-tree-prefix-cls}-center_open,\n        &.@{select-tree-prefix-cls}-bottom_open,\n        &.@{select-tree-prefix-cls}-noline_open {\n          .antTreeSwitcherIcon();\n        }\n        &.@{select-tree-prefix-cls}-roots_close,\n        &.@{select-tree-prefix-cls}-center_close,\n        &.@{select-tree-prefix-cls}-bottom_close,\n        &.@{select-tree-prefix-cls}-noline_close {\n          .antTreeSwitcherIcon();\n          .ie-rotate(3);\n          &:after {\n            transform: rotate(270deg) scale(0.5);\n          }\n        }\n      }\n    }\n  }\n  &-child-tree {\n    display: none;\n    &-open {\n      display: block;\n    }\n  }\n  &-treenode-disabled {\n    > span,\n    > a,\n    > a span {\n      color: #ccc;\n      cursor: not-allowed;\n    }\n  }\n  &-icon__open {\n    margin-right: 2px;\n    vertical-align: top;\n  }\n  &-icon__close {\n    margin-right: 2px;\n    vertical-align: top;\n  }\n}\n\n.@{select-tree-prefix-cls}-dropdown .ant-select-dropdown-search + span {\n  padding: 7px 15px;\n  color: #ccc;\n  cursor: not-allowed;\n  display: block;\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tree-select/style/index.less\n **/"",""@import \""../../style/mixins/index\"";\n\n.antTreeSwitcherIcon() {\n  position: relative;\n  &:after {\n    .iconfont-size-under-12px(6px);\n    content: '\\e611';\n    display: inline-block;\n    font-family: 'anticon';\n    font-weight: bold;\n    position: absolute;\n    top: 0;\n    right: 4px;\n    color: #666;\n    transition: transform .3s ease;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tree/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../checkbox/style/mixin\"";\n@import \""./mixin\"";\n\n@tree-prefix-cls: ant-tree;\n.antCheckboxFn(@checkbox-prefix-cls: ant-tree-checkbox);\n\n.@{tree-prefix-cls} {\n  margin: 0;\n  padding: 5px;\n  font-size: 12px;\n  li {\n    padding: 0;\n    margin: 7px 0;\n    list-style: none;\n    white-space: nowrap;\n    outline: 0;\n    a[draggable],\n    a[draggable=\""true\""] {\n      -moz-user-select: none;\n      -khtml-user-select: none;\n      -webkit-user-select: none;\n      user-select: none;\n      /* Required to make elements draggable in old WebKit */\n      -khtml-user-drag: element;\n      -webkit-user-drag: element;\n    }\n    &.drag-over {\n      > a[draggable] {\n        background-color: @primary-color;\n        color: white;\n        opacity: 0.8;\n      }\n    }\n    &.drag-over-gap-top {\n      > a[draggable] {\n        border-top: 2px @primary-color solid;\n      }\n    }\n    &.drag-over-gap-bottom {\n      > a[draggable] {\n        border-bottom: 2px @primary-color solid;\n      }\n    }\n    &.filter-node {\n      > a {\n        color: @error-color!important;\n        font-weight: bold!important;\n      }\n    }\n    ul {\n      margin: 0;\n      padding: 0 0 0 18px;\n    }\n    a {\n      display: inline-block;\n      padding: 1px 5px;\n      border-radius: 2px;\n      margin: 0;\n      cursor: pointer;\n      text-decoration: none;\n      vertical-align: top;\n      color: #666;\n      transition: all 0.3s ease;\n      &:hover {\n        background-color: tint(@primary-color, 90%);\n      }\n      &.@{tree-prefix-cls}-node-selected {\n        background-color: tint(@primary-color, 80%);\n      }\n    }\n    span {\n      &.@{tree-prefix-cls}-checkbox {\n        margin: 2px 4px 0 0;\n      }\n      &.@{tree-prefix-cls}-switcher,\n      &.@{tree-prefix-cls}-iconEle {\n        margin: 0;\n        width: 16px;\n        height: 16px;\n        line-height: 16px;\n        display: inline-block;\n        vertical-align: middle;\n        border: 0 none;\n        cursor: pointer;\n        outline: none;\n      }\n      &.@{tree-prefix-cls}-icon_loading {\n        &:after {\n          content: '\\e6a1';\n          display: inline-block;\n          font-family: 'anticon';\n          font-weight: bold;\n          animation: loadingCircle 1s infinite linear;\n          margin-top: 8px;\n        }\n      }\n      &.@{tree-prefix-cls}-switcher {\n        &.@{tree-prefix-cls}-roots_open,\n        &.@{tree-prefix-cls}-center_open,\n        &.@{tree-prefix-cls}-bottom_open,\n        &.@{tree-prefix-cls}-noline_open {\n          .antTreeSwitcherIcon();\n        }\n        &.@{tree-prefix-cls}-roots_close,\n        &.@{tree-prefix-cls}-center_close,\n        &.@{tree-prefix-cls}-bottom_close,\n        &.@{tree-prefix-cls}-noline_close {\n          .antTreeSwitcherIcon();\n          .ie-rotate(3);\n          &:after {\n            transform: rotate(270deg) scale(0.5);\n          }\n        }\n      }\n    }\n  }\n  &-child-tree {\n    display: none;\n    &-open {\n      display: block;\n    }\n  }\n  &-treenode-disabled {\n    >span,\n    >a,\n    >a span {\n      color: #ccc;\n      cursor: not-allowed;\n    }\n  }\n  &-icon__open {\n    margin-right: 2px;\n    vertical-align: top;\n  }\n  &-icon__close {\n    margin-right: 2px;\n    vertical-align: top;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tree/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@upload-prefix-cls: ant-upload;\n@upload-item: ant-upload-list-item;\n@upload-pictrue-card-size: 96px;\n\n.@{upload-prefix-cls} {\n  font-size: @font-size-base;\n\n  > span {\n    display: block;\n    width: 100%;\n    outline: none;\n  }\n\n  input[type=\""file\""] {\n    cursor: pointer;\n  }\n\n  &&-select {\n    display: inline-block;\n  }\n\n  &&-select-picture-card {\n    border: 1px dashed @border-color-base;\n    width: @upload-pictrue-card-size;\n    height: @upload-pictrue-card-size;\n    padding: 24px 0;\n    border-radius: @border-radius-base;\n    background-color: #fbfbfb;\n    text-align: center;\n    cursor: pointer;\n    transition: border-color 0.3s ease;\n    display: inline-block;\n    vertical-align: top;\n    margin-right: 8px;\n    margin-bottom: 8px;\n\n    &:hover {\n      border-color: @primary-color;\n    }\n  }\n\n  &&-drag {\n    border: 1px dashed @border-color-base;\n    transition: border-color 0.3s ease;\n    cursor: pointer;\n    border-radius: @border-radius-base;\n    text-align: center;\n    width: 100%;\n    height: 100%;\n    position: relative;\n\n    &.@{upload-prefix-cls}-drag-hover {\n      border: 2px dashed tint(@primary-color, 20%);\n    }\n\n    > span {\n      display: table;\n      height: 100%;\n    }\n\n    .@{upload-prefix-cls}-drag-container {\n      display: table-cell;\n      vertical-align: middle;\n    }\n\n    &:hover {\n      border-color: tint(@primary-color, 20%);\n    }\n\n    p.@{upload-prefix-cls}-drag-icon {\n      .anticon {\n        font-size: 80px;\n        margin-top: -5px;\n        color: tint(@primary-color, 20%);\n      }\n      height: 60px;\n      margin-bottom: 24px;\n    }\n    p.@{upload-prefix-cls}-text {\n      font-size: 14px;\n    }\n    p.@{upload-prefix-cls}-hint {\n      font-size: 12px;\n      color: #999;\n    }\n    .anticon-plus {\n      font-size: 30px;\n      transition: all 0.3s ease;\n      color: #ccc;\n      &:hover {\n        color: #999;\n      }\n    }\n    &:hover .anticon-plus {\n      color: #999;\n    }\n  }\n}\n\n.@{upload-prefix-cls}-list {\n  overflow: hidden;\n  &-item {\n    overflow: hidden;\n    margin-top: 8px;\n    font-size: 12px;\n\n    &-info {\n      height: 22px;\n      line-height: 22px;\n      padding: 0 4px;\n      transition: background-color 0.3s ease;\n\n      .anticon-paper-clip {\n        margin-right: 4px;\n        font-size: 12px;\n        color: #999;\n      }\n      .anticon-cross {\n        .iconfont-size-under-12px(10px);\n        transition: all 0.3s ease;\n        opacity: 0;\n        cursor: pointer;\n        float: right;\n        color: #999;\n        line-height: 22px;\n        &:hover {\n          color: #666;\n        }\n      }\n    }\n\n    &:hover &-info {\n      background-color: tint(@primary-color, 90%);\n    }\n\n    &:hover .anticon-cross {\n      opacity: 1;\n    }\n\n    &-error,\n    &-error .anticon-paper-clip {\n      color: @error-color;\n    }\n\n    &-error .anticon-cross {\n      opacity: 1;\n    }\n\n    &-progress {\n      padding: 0 8px 0 20px;\n      margin-top: -2px;\n      margin-bottom: 1px;\n      font-size: 12px;\n      .ant-progress-line-inner {\n        vertical-align: middle;\n      }\n    }\n  }\n\n  &-picture,\n  &-picture-card {\n    .@{upload-item} {\n      padding: 8px;\n      border-radius: @border-radius-base;\n      border: 1px solid @border-color-base;\n      height: 66px;\n      position: relative;\n      &:hover {\n        background: transparent;\n      }\n    }\n\n    .@{upload-item}-info {\n      padding: 0;\n    }\n\n    .@{upload-item}:hover .@{upload-item}-info {\n      background: transparent;\n    }\n\n    .@{upload-item}-uploading {\n      border-style: dashed;\n    }\n\n    .@{upload-item}-thumbnail {\n      width: 48px;\n      height: 48px;\n      position: absolute;\n      top: 8px;\n      left: 8px;\n    }\n\n    .@{upload-item}-thumbnail img {\n      width: 48px;\n      height: 48px;\n      display: block;\n    }\n\n    .@{upload-item}-thumbnail.anticon:before {\n      line-height: 48px;\n      font-size: 24px;\n      color: #999;\n    }\n\n    .@{upload-item}-name {\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      margin: 0 0 0 8px;\n      line-height: 42px;\n      transition: all 0.3s ease;\n      padding-left: 48px;\n      padding-right: 8px;\n      max-width: 100%;\n      display: inline-block;\n      box-sizing: border-box;\n    }\n\n    .@{upload-item}-uploading .@{upload-item}-name {\n      line-height: 28px;\n    }\n\n    .@{upload-item}-progress {\n      padding-left: 56px;\n      margin-top: 0;\n    }\n\n    .anticon-cross {\n      position: absolute;\n      right: 8px;\n      top: 8px;\n      line-height: 1;\n    }\n  }\n\n  &-picture-card {\n    display: inline-block;\n\n    .@{upload-item} {\n      display: inline-block;\n      width: @upload-pictrue-card-size;\n      height: @upload-pictrue-card-size;\n      margin: 0 8px 8px 0;\n    }\n\n    .@{upload-item}-info {\n      height: 100%;\n      position: relative;\n\n      &:before {\n        content: ' ';\n        position: absolute;\n        z-index: 1;\n        background-color: #808080;\n        transition: all 0.3s ease;\n        opacity: 0;\n        width: 100%;\n        height: 100%;\n      }\n\n      .anticon-eye-o,\n      .anticon-delete {\n        position: absolute;\n        left: 50%;\n        top: 50%;\n        z-index: 10;\n        -webkit-transition: all 0.3s ease;\n        transition: all 0.3s ease;\n        cursor: pointer;\n        font-size: 16px;\n        width: 16px;\n        line-height: 1;\n        color: #eee;\n        opacity: 0;\n        margin-top: -8px;\n        margin-left: -22px;\n        &:hover {\n          color: #fff;\n        }\n      }\n\n      .anticon-delete {\n        left: 50%;\n        margin-left: 6px;\n      }\n\n      &:hover {\n        &:before {\n          opacity: .8;\n        }\n\n        .anticon-eye-o,\n        .anticon-delete {\n          opacity: 1;\n        }\n      }\n    }\n\n    .@{upload-item}-thumbnail,\n    .@{upload-item}-thumbnail img {\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: static;\n    }\n\n    .@{upload-item}-name {\n      display: none;\n    }\n\n    .@{upload-item}-uploading {\n      &.@{upload-item} {\n        background-color: #fbfbfb;\n      }\n\n      .@{upload-item}-info {\n        &:before,\n        .anticon-eye-o,\n        .anticon-delete {\n          display: none;\n        }\n      }\n\n      &-text {\n        margin-top: 18px;\n        color: #999;\n      }\n    }\n\n    .@{upload-item}-progress {\n      padding-left: 0;\n    }\n  }\n\n  .@{upload-prefix-cls}-success-icon {\n    color: @success-color;\n    font-weight: bold;\n  }\n\n  .@{upload-prefix-cls}-margin-top-enter {\n    animation: uploadMarginTopIn .3s @ease-in-out-circ;\n  }\n\n  .@{upload-prefix-cls}-margin-top-leave {\n    animation: uploadMarginTopOut .3s @ease-in-out-circ;\n  }\n}\n\n@keyframes uploadMarginTopIn {\n  from {\n    margin-top: -25px;\n    opacity: 0;\n  }\n}\n\n@keyframes uploadMarginTopOut {\n  to {\n    margin-top: -25px;\n    opacity: 0;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/upload/style/index.less\n **/""],""sourceRoot"":""""}"
577879b9f81dc5441fff7dc6a18a3b79192112eb,7527013,	// check if it is an array: http://stackoverflow.com/a/7527013/973380
b25e67a4d60de238bac3029109d91266025f0d82,37628,0;134;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;assembly;0.2;0.006429277942631058;1.0;1.206429277942631;0.0;0
63fd4f2d2700228847a4487246b36f64d39a5972,34,&lt;p&gt;Question: &lt;a href=&#34;http://stackoverflow.com/questions/1171252/whats-the-explanation-for-exercise-1-6-in-sicp&#34;&gt;What&amp;rsquo;s the explanation for Exercise 1.6 in SICP?&lt;/a&gt;&lt;/p&gt;
bb78faf4926e76e90b18a2ceb9865b570164ec2b,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
4e8e453b92fbda476b269e3b42ab3f1f7fcc868a,12317051, * From [stackoverflow](http://stackoverflow.com/a/12317051).
341c75b1f93bb0383a1d6a335878099fb6ae7d23,26603875,			// http://stackoverflow.com/a/26603875
755c9f75fd2edc88f855e5e08f6218d14bc13c6f,20955356,       * https://stackoverflow.com/questions/20955356
3c808e9b16a56b2d91be9694eb229019fb75ebac,21854516,"Conveniently, this avoids [CORS issues](http://stackoverflow.com/questions/21854516/understanding-ajax-cors-and-security-considerations) and error messages like this in development:"
c84f5d40aecbec0006525cfb3b0f40875a6fc2e0,37628,264;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;tour;1.0;0.001072961373390558;27.0;0
62b3fb6872a75cb4f91e8987742293f1a2805fec,2424770,# see http://stackoverflow.com/questions/2424770/floating-point-comparison-in-shell-script
e04ae5a1b72966fcd32a70322d4fbf77390c5f76,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
c1211e54d2f9e4b9860026c7da5da816f6215d25,1126915,		// http://stackoverflow.com/questions/1126915/how-do-i-split-a-string-by-a-multi-character-delimiter-in-c
7b02cb6a550da98cacb637ab84ab4aec4a2ec00d,1580644,:: http://stackoverflow.com/a/1580644
819ffa58d6b137d64a770f89c37c58670fd44e50,162579 162159,"2419044,comment,2418359,2418859,2,0,udoprog,,,""Except in most cases validation cannot be complete on the client side, anything related to server side logic has to be additionally checked.<p>Validation is also two different concerns if you compare serverside vs clientside.<p><a href=""""http://stackoverflow.com/questions/162159/javascript-client-side-vs-server-side-validation#162579"""" rel=""""nofollow"""">http://stackoverflow.com/questions/162159/javascript-client-...</a><p>Basically: Client side validation is about user experience, Server side is about security. I'm hard pressed to believe you can get both with the same code.<p>I also don't see how localStorage is relevant to code sharing between client and server."",1302175183"
fa48ed8b9787639d6ca68006ba837c72220bc22e,23084078,      &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/23084078/selenium-c-sharp-webdriver-unable-to-find-element#comment35284360_23084078&quot;&gt;Selenium - C# - Webdriver - Unable to find element&lt;/a&gt; (Arran)&lt;/li&gt;
80fe77d924dffe289ae83519c81302d3896eec51,11711339, *     - http://stackoverflow.com/questions/11711339/getting-webpage-title-img-metadata-info-from-linux-terminal
cbd56ed308fb94f25b93acfd0390b56261565563,27853830 330006,"(il faut préciser la taille de l'iframe en css, cf cet exemple [css](https://stackoverflow.com/a/27853830) ou en [js](https://stackoverflow.com/a/330006),"
96db1d433332d58756f7fbd0589dcff55f018e8f,216823,// From http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
10c95ff029c1e3e35c72e78bc7346dabb871d931,37628,0;22;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;object;1.0;0.01483679525222552;4.666666666666667;0.0;0
2878c67c70e288dd9c71a97f0ed477065701d33d,11173673,"    ""import kvfs = require('../generic/key_value_filesystem');\nimport {ApiError, ErrorCode} from '../core/api_error';\nimport global = require('../core/global');\n\n// Some versions of FF and all versions of IE do not support the full range of\n// 16-bit numbers encoded as characters, as they enforce UTF-16 restrictions.\n// http://stackoverflow.com/questions/11170716/are-there-any-characters-that-are-not-allowed-in-localstorage/11173673#11173673\nvar supportsBinaryString: boolean = false,\n  binaryEncoding: string;\ntry {\n  global.localStorage.setItem(\""__test__\"", String.fromCharCode(0xD800));\n  supportsBinaryString = global.localStorage.getItem(\""__test__\"") === String.fromCharCode(0xD800);\n} catch (e) {\n  // IE throws an exception.\n  supportsBinaryString = false;\n}\nbinaryEncoding = supportsBinaryString ? 'binary_string' : 'binary_string_ie';\nif (!Buffer.isEncoding(binaryEncoding)) {\n  // Fallback for non BrowserFS implementations of buffer that lack a\n  // binary_string format.\n  binaryEncoding = \""base64\"";\n}\n\n/**\n * A synchronous key-value store backed by localStorage.\n */\nexport class LocalStorageStore implements kvfs.SyncKeyValueStore, kvfs.SimpleSyncStore {\n  constructor() { }\n\n  public name(): string {\n    return 'LocalStorage';\n  }\n\n  public clear(): void {\n    global.localStorage.clear();\n  }\n\n  public beginTransaction(type: string): kvfs.SyncKeyValueRWTransaction {\n    // No need to differentiate.\n    return new kvfs.SimpleSyncRWTransaction(this);\n  }\n\n  public get(key: string): NodeBuffer {\n    try {\n      var data = global.localStorage.getItem(key);\n      if (data !== null) {\n        return new Buffer(data, binaryEncoding);\n      }\n    } catch (e) {\n\n    }\n    // Key doesn't exist, or a failure occurred.\n    return undefined;\n  }\n\n  public put(key: string, data: NodeBuffer, overwrite: boolean): boolean {\n    try {\n      if (!overwrite && global.localStorage.getItem(key) !== null) {\n        // Don't want to overwrite the key!\n        return false;\n      }\n      global.localStorage.setItem(key, data.toString(binaryEncoding));\n      return true;\n    } catch (e) {\n      throw new ApiError(ErrorCode.ENOSPC, \""LocalStorage is full.\"");\n    }\n  }\n\n  public del(key: string): void {\n    try {\n      global.localStorage.removeItem(key);\n    } catch (e) {\n      throw new ApiError(ErrorCode.EIO, \""Unable to delete key \"" + key + \"": \"" + e);\n    }\n  }\n}\n\n/**\n * A synchronous file system backed by localStorage. Connects our\n * LocalStorageStore to our SyncKeyValueFileSystem.\n */\nexport default class LocalStorageFileSystem extends kvfs.SyncKeyValueFileSystem {\n  constructor() { super({ store: new LocalStorageStore() }); }\n  public static isAvailable(): boolean {\n    return typeof global.localStorage !== 'undefined';\n  }\n}\n"","
444d912e76580a7fb77869479eff6da6c81361d0,28976144,"            <a class=""js-show-link comments-link dno"" title=""expand to show all comments on this post"" href=""http://stackoverflow.com/questions/28976144/wait-for-afnetworking-completion-block-before-continuing-i-e-synchronous#"" onclick=""""></a>"
8e2e6e612a1a3e77654d1c3237c70a5fff5963c6,17056560,        ## http://stackoverflow.com/q/17056560/1240268
23b6d1a9ab706be5a7d96921507770e33854c6b3,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
76e5a4b476da91c692f19864f7ec02251f00b463,7192563,  // see http://stackoverflow.com/questions/7192563/touchend-event-properties
1ec705dfc7c62aa2c285217e90fd6558b059af0c,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
70d4892eac90a841c0b0ec559351fa61e5766e69,18635619,"<DT><A HREF=""http://stackoverflow.com/questions/6677035/jquery-scroll-to-element/18635619#18635619"" ADD_DATE=""1428355062"" PRIVATE=""1"" TAGS=""scrolling,scroll,url,jquery,hash,scrollTo"">jQuery scroll To Element - Stack Overflow</A>"
1c3fbdc044b1d94456ea2faee11b802a2cd959b8,1575141,                    <!-- http://stackoverflow.com/questions/1575141/make-div-100-height-of-browser-window -->
b002a7631b1b596f55f9820174bc2e299e4bf587,5539378,"// Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913)"
0013c68a4de91819dd30fee9d80b5e14eaf8ffb8,3000649,//http://stackoverflow.com/questions/3000649/trim-spaces-from-start-and-end-of-string
1e2f164391a539735d6f78e9844a1508091219fa,5661671,"{""version"":3,""file"":""flicking.pkgd.js"",""sources"":[""../node_modules/@egjs/component/dist/component.esm.js"",""../node_modules/@egjs/hammerjs/dist/hammer.esm.js"",""../node_modules/@egjs/axes/dist/axes.esm.js"",""../src/consts.ts"",""../src/utils.ts"",""../src/components/Panel.ts"",""../src/components/PanelManager.ts"",""../src/states/State.ts"",""../src/states/IdleState.ts"",""../src/states/HoldingState.ts"",""../src/states/DraggingState.ts"",""../src/states/AnimatingState.ts"",""../src/states/DisabledState.ts"",""../src/components/StateMachine.ts"",""../src/moves/MoveType.ts"",""../src/moves/Snap.ts"",""../src/moves/FreeScroll.ts"",""../src/components/Viewport.ts"",""../src/ga/ga.ts"",""../src/Flicking.ts"",""../src/index.umd.ts""],""sourcesContent"":[""/*\nCopyright (c) 2017 NAVER Corp.\n@egjs/component project is licensed under the MIT license\n\n@egjs/component JavaScript library\nhttps://naver.github.io/egjs-component\n\n@version 2.1.2\n*/\n/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nfunction isUndefined(value) {\n  return typeof value === \""undefined\"";\n}\n/**\n * A class used to manage events in a component\n * @ko 컴포넌트의 이벤트을 관리할 수 있게 하는 클래스\n * @alias eg.Component\n */\n\n\nvar Component =\n/*#__PURE__*/\nfunction () {\n  var Component =\n  /*#__PURE__*/\n  function () {\n    /**\n    * Version info string\n    * @ko 버전정보 문자열\n    * @name VERSION\n    * @static\n    * @type {String}\n    * @example\n    * eg.Component.VERSION;  // ex) 2.0.0\n    * @memberof eg.Component\n    */\n\n    /**\n     * @support {\""ie\"": \""7+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n     */\n    function Component() {\n      this._eventHandler = {};\n      this.options = {};\n    }\n    /**\n     * Triggers a custom event.\n     * @ko 커스텀 이벤트를 발생시킨다\n     * @param {String} eventName The name of the custom event to be triggered <ko>발생할 커스텀 이벤트의 이름</ko>\n     * @param {Object} customEvent Event data to be sent when triggering a custom event <ko>커스텀 이벤트가 발생할 때 전달할 데이터</ko>\n     * @return {Boolean} Indicates whether the event has occurred. If the stop() method is called by a custom event handler, it will return false and prevent the event from occurring. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">Ref</a> <ko>이벤트 발생 여부. 커스텀 이벤트 핸들러에서 stop() 메서드를 호출하면 'false'를 반환하고 이벤트 발생을 중단한다. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">참고</a></ko>\n     * @example\n    class Some extends eg.Component {\n     some(){\n     \tif(this.trigger(\""beforeHi\"")){ // When event call to stop return false.\n    \tthis.trigger(\""hi\"");// fire hi event.\n     \t}\n     }\n    }\n    const some = new Some();\n    some.on(\""beforeHi\"", (e) => {\n    if(condition){\n    \te.stop(); // When event call to stop, `hi` event not call.\n    }\n    });\n    some.on(\""hi\"", (e) => {\n    // `currentTarget` is component instance.\n    console.log(some === e.currentTarget); // true\n    });\n    // If you want to more know event design. You can see article.\n    // https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\n     */\n\n\n    var _proto = Component.prototype;\n\n    _proto.trigger = function trigger(eventName, customEvent) {\n      if (customEvent === void 0) {\n        customEvent = {};\n      }\n\n      var handlerList = this._eventHandler[eventName] || [];\n      var hasHandlerList = handlerList.length > 0;\n\n      if (!hasHandlerList) {\n        return true;\n      } // If detach method call in handler in first time then handler list calls.\n\n\n      handlerList = handlerList.concat();\n      customEvent.eventType = eventName;\n      var isCanceled = false;\n      var arg = [customEvent];\n      var i = 0;\n\n      customEvent.stop = function () {\n        isCanceled = true;\n      };\n\n      customEvent.currentTarget = this;\n\n      for (var _len = arguments.length, restParam = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        restParam[_key - 2] = arguments[_key];\n      }\n\n      if (restParam.length >= 1) {\n        arg = arg.concat(restParam);\n      }\n\n      for (i = 0; handlerList[i]; i++) {\n        handlerList[i].apply(this, arg);\n      }\n\n      return !isCanceled;\n    };\n    /**\n     * Executed event just one time.\n     * @ko 이벤트가 한번만 실행된다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       alert(\""hi\"");\n     }\n     thing() {\n       this.once(\""hi\"", this.hi);\n     }\n    }\n    var some = new Some();\n    some.thing();\n    some.trigger(\""hi\"");\n    // fire alert(\""hi\"");\n    some.trigger(\""hi\"");\n    // Nothing happens\n     */\n\n\n    _proto.once = function once(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var i;\n\n        for (i in eventHash) {\n          this.once(i, eventHash[i]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var self = this;\n        this.on(eventName, function listener() {\n          for (var _len2 = arguments.length, arg = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            arg[_key2] = arguments[_key2];\n          }\n\n          handlerToAttach.apply(self, arg);\n          self.off(eventName, listener);\n        });\n      }\n\n      return this;\n    };\n    /**\n     * Checks whether an event has been attached to a component.\n     * @ko 컴포넌트에 이벤트가 등록됐는지 확인한다.\n     * @param {String} eventName The name of the event to be attached <ko>등록 여부를 확인할 이벤트의 이름</ko>\n     * @return {Boolean} Indicates whether the event is attached. <ko>이벤트 등록 여부</ko>\n     * @example\n    class Some extends eg.Component {\n     some() {\n       this.hasOn(\""hi\"");// check hi event.\n     }\n    }\n     */\n\n\n    _proto.hasOn = function hasOn(eventName) {\n      return !!this._eventHandler[eventName];\n    };\n    /**\n     * Attaches an event to a component.\n     * @ko 컴포넌트에 이벤트를 등록한다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.on(\""hi\"",this.hi); //attach event\n     }\n    }\n    */\n\n\n    _proto.on = function on(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var name;\n\n        for (name in eventHash) {\n          this.on(name, eventHash[name]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var handlerList = this._eventHandler[eventName];\n\n        if (isUndefined(handlerList)) {\n          this._eventHandler[eventName] = [];\n          handlerList = this._eventHandler[eventName];\n        }\n\n        handlerList.push(handlerToAttach);\n      }\n\n      return this;\n    };\n    /**\n     * Detaches an event from the component.\n     * @ko 컴포넌트에 등록된 이벤트를 해제한다\n     * @param {eventName} eventName The name of the event to be detached <ko>해제할 이벤트의 이름</ko>\n     * @param {Function} handlerToDetach The handler function of the event to be detached <ko>해제할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself <ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.off(\""hi\"",this.hi); //detach event\n     }\n    }\n     */\n\n\n    _proto.off = function off(eventName, handlerToDetach) {\n      // All event detach.\n      if (isUndefined(eventName)) {\n        this._eventHandler = {};\n        return this;\n      } // All handler of specific event detach.\n\n\n      if (isUndefined(handlerToDetach)) {\n        if (typeof eventName === \""string\"") {\n          this._eventHandler[eventName] = undefined;\n          return this;\n        } else {\n          var eventHash = eventName;\n          var name;\n\n          for (name in eventHash) {\n            this.off(name, eventHash[name]);\n          }\n\n          return this;\n        }\n      } // The handler of specific event detach.\n\n\n      var handlerList = this._eventHandler[eventName];\n\n      if (handlerList) {\n        var k;\n        var handlerFunction;\n\n        for (k = 0; (handlerFunction = handlerList[k]) !== undefined; k++) {\n          if (handlerFunction === handlerToDetach) {\n            handlerList = handlerList.splice(k, 1);\n            break;\n          }\n        }\n      }\n\n      return this;\n    };\n\n    return Component;\n  }();\n\n  Component.VERSION = \""2.1.2\"";\n  return Component;\n}();\n\nexport default Component;\n//# sourceMappingURL=component.esm.js.map\n"",""/*! Hammer.JS - v2.0.15 - 2019-04-04\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\""this hasn't been initialised - super() hasn't been called\"");\n  }\n\n  return self;\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n  assign = function assign(target) {\n    if (target === undefined || target === null) {\n      throw new TypeError('Cannot convert undefined or null to object');\n    }\n\n    var output = Object(target);\n\n    for (var index = 1; index < arguments.length; index++) {\n      var source = arguments[index];\n\n      if (source !== undefined && source !== null) {\n        for (var nextKey in source) {\n          if (source.hasOwnProperty(nextKey)) {\n            output[nextKey] = source[nextKey];\n          }\n        }\n      }\n    }\n\n    return output;\n  };\n} else {\n  assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \""undefined\"" ? {\n  style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n    abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n  var prefix;\n  var prop;\n  var camelProp = property[0].toUpperCase() + property.slice(1);\n  var i = 0;\n\n  while (i < VENDOR_PREFIXES.length) {\n    prefix = VENDOR_PREFIXES[i];\n    prop = prefix ? prefix + camelProp : property;\n\n    if (prop in obj) {\n      return prop;\n    }\n\n    i++;\n  }\n\n  return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \""undefined\"") {\n  // window is undefined in node.js\n  win = {};\n} else {\n  win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n  if (!NATIVE_TOUCH_ACTION) {\n    return false;\n  }\n\n  var touchMap = {};\n  var cssSupports = win.CSS && win.CSS.supports;\n  ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n    // If css.supports is not supported but there is native touch-action assume it supports\n    // all values. This is the case for IE 10 and 11.\n    return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n  });\n  return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n  var i;\n\n  if (!obj) {\n    return;\n  }\n\n  if (obj.forEach) {\n    obj.forEach(iterator, context);\n  } else if (obj.length !== undefined) {\n    i = 0;\n\n    while (i < obj.length) {\n      iterator.call(context, obj[i], i, obj);\n      i++;\n    }\n  } else {\n    for (i in obj) {\n      obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n    }\n  }\n}\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\nfunction boolOrFn(val, args) {\n  if (typeof val === TYPE_FUNCTION) {\n    return val.apply(args ? args[0] || undefined : undefined, args);\n  }\n\n  return val;\n}\n\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n  return str.indexOf(find) > -1;\n}\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\nfunction cleanTouchActions(actions) {\n  // none\n  if (inStr(actions, TOUCH_ACTION_NONE)) {\n    return TOUCH_ACTION_NONE;\n  }\n\n  var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n  var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n  // for different directions, e.g. horizontal pan but vertical swipe?)\n  // we need none (as otherwise with pan-x pan-y combined none of these\n  // recognizers will work, since the browser would handle all panning\n\n  if (hasPanX && hasPanY) {\n    return TOUCH_ACTION_NONE;\n  } // pan-x OR pan-y\n\n\n  if (hasPanX || hasPanY) {\n    return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n  } // manipulation\n\n\n  if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n    return TOUCH_ACTION_MANIPULATION;\n  }\n\n  return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n  function TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n  }\n  /**\n   * @private\n   * set the touchAction value on the element or enable the polyfill\n   * @param {String} value\n   */\n\n\n  var _proto = TouchAction.prototype;\n\n  _proto.set = function set(value) {\n    // find out the touch-action by the event handlers\n    if (value === TOUCH_ACTION_COMPUTE) {\n      value = this.compute();\n    }\n\n    if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n      this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n    }\n\n    this.actions = value.toLowerCase().trim();\n  };\n  /**\n   * @private\n   * just re-set the touchAction value\n   */\n\n\n  _proto.update = function update() {\n    this.set(this.manager.options.touchAction);\n  };\n  /**\n   * @private\n   * compute the value for the touchAction property based on the recognizer's settings\n   * @returns {String} value\n   */\n\n\n  _proto.compute = function compute() {\n    var actions = [];\n    each(this.manager.recognizers, function (recognizer) {\n      if (boolOrFn(recognizer.options.enable, [recognizer])) {\n        actions = actions.concat(recognizer.getTouchAction());\n      }\n    });\n    return cleanTouchActions(actions.join(' '));\n  };\n  /**\n   * @private\n   * this method is called on each input cycle and provides the preventing of the browser behavior\n   * @param {Object} input\n   */\n\n\n  _proto.preventDefaults = function preventDefaults(input) {\n    var srcEvent = input.srcEvent;\n    var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n    if (this.manager.session.prevented) {\n      srcEvent.preventDefault();\n      return;\n    }\n\n    var actions = this.actions;\n    var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n    if (hasNone) {\n      // do not prevent defaults if this is a tap gesture\n      var isTapPointer = input.pointers.length === 1;\n      var isTapMovement = input.distance < 2;\n      var isTapTouchTime = input.deltaTime < 250;\n\n      if (isTapPointer && isTapMovement && isTapTouchTime) {\n        return;\n      }\n    }\n\n    if (hasPanX && hasPanY) {\n      // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n      return;\n    }\n\n    if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n      return this.preventSrc(srcEvent);\n    }\n  };\n  /**\n   * @private\n   * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n   * @param {Object} srcEvent\n   */\n\n\n  _proto.preventSrc = function preventSrc(srcEvent) {\n    this.manager.session.prevented = true;\n    srcEvent.preventDefault();\n  };\n\n  return TouchAction;\n}();\n\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n  while (node) {\n    if (node === parent) {\n      return true;\n    }\n\n    node = node.parentNode;\n  }\n\n  return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n  var pointersLength = pointers.length; // no need to loop when only one touch\n\n  if (pointersLength === 1) {\n    return {\n      x: round(pointers[0].clientX),\n      y: round(pointers[0].clientY)\n    };\n  }\n\n  var x = 0;\n  var y = 0;\n  var i = 0;\n\n  while (i < pointersLength) {\n    x += pointers[i].clientX;\n    y += pointers[i].clientY;\n    i++;\n  }\n\n  return {\n    x: round(x / pointersLength),\n    y: round(y / pointersLength)\n  };\n}\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\nfunction simpleCloneInputData(input) {\n  // make a simple copy of the pointers because we will get a reference if we don't\n  // we only need clientXY for the calculations\n  var pointers = [];\n  var i = 0;\n\n  while (i < input.pointers.length) {\n    pointers[i] = {\n      clientX: round(input.pointers[i].clientX),\n      clientY: round(input.pointers[i].clientY)\n    };\n    i++;\n  }\n\n  return {\n    timeStamp: now(),\n    pointers: pointers,\n    center: getCenter(pointers),\n    deltaX: input.deltaX,\n    deltaY: input.deltaY\n  };\n}\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\nfunction getDistance(p1, p2, props) {\n  if (!props) {\n    props = PROPS_XY;\n  }\n\n  var x = p2[props[0]] - p1[props[0]];\n  var y = p2[props[1]] - p1[props[1]];\n  return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\nfunction getAngle(p1, p2, props) {\n  if (!props) {\n    props = PROPS_XY;\n  }\n\n  var x = p2[props[0]] - p1[props[0]];\n  var y = p2[props[1]] - p1[props[1]];\n  return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\nfunction getDirection(x, y) {\n  if (x === y) {\n    return DIRECTION_NONE;\n  }\n\n  if (abs(x) >= abs(y)) {\n    return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n  }\n\n  return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n  var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n  // jscs throwing error on defalut destructured values and without defaults tests fail\n\n  var offset = session.offsetDelta || {};\n  var prevDelta = session.prevDelta || {};\n  var prevInput = session.prevInput || {};\n\n  if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n    prevDelta = session.prevDelta = {\n      x: prevInput.deltaX || 0,\n      y: prevInput.deltaY || 0\n    };\n    offset = session.offsetDelta = {\n      x: center.x,\n      y: center.y\n    };\n  }\n\n  input.deltaX = prevDelta.x + (center.x - offset.x);\n  input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n  return {\n    x: x / deltaTime || 0,\n    y: y / deltaTime || 0\n  };\n}\n\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\nfunction getScale(start, end) {\n  return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\nfunction getRotation(start, end) {\n  return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n  var last = session.lastInterval || input;\n  var deltaTime = input.timeStamp - last.timeStamp;\n  var velocity;\n  var velocityX;\n  var velocityY;\n  var direction;\n\n  if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n    var deltaX = input.deltaX - last.deltaX;\n    var deltaY = input.deltaY - last.deltaY;\n    var v = getVelocity(deltaTime, deltaX, deltaY);\n    velocityX = v.x;\n    velocityY = v.y;\n    velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n    direction = getDirection(deltaX, deltaY);\n    session.lastInterval = input;\n  } else {\n    // use latest velocity info if it doesn't overtake a minimum period\n    velocity = last.velocity;\n    velocityX = last.velocityX;\n    velocityY = last.velocityY;\n    direction = last.direction;\n  }\n\n  input.velocity = velocity;\n  input.velocityX = velocityX;\n  input.velocityY = velocityY;\n  input.direction = direction;\n}\n\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n  var session = manager.session;\n  var pointers = input.pointers;\n  var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n  if (!session.firstInput) {\n    session.firstInput = simpleCloneInputData(input);\n  } // to compute scale and rotation we need to store the multiple touches\n\n\n  if (pointersLength > 1 && !session.firstMultiple) {\n    session.firstMultiple = simpleCloneInputData(input);\n  } else if (pointersLength === 1) {\n    session.firstMultiple = false;\n  }\n\n  var firstInput = session.firstInput,\n      firstMultiple = session.firstMultiple;\n  var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n  var center = input.center = getCenter(pointers);\n  input.timeStamp = now();\n  input.deltaTime = input.timeStamp - firstInput.timeStamp;\n  input.angle = getAngle(offsetCenter, center);\n  input.distance = getDistance(offsetCenter, center);\n  computeDeltaXY(session, input);\n  input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n  var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n  input.overallVelocityX = overallVelocity.x;\n  input.overallVelocityY = overallVelocity.y;\n  input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n  input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n  input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n  input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n  computeIntervalInputData(session, input); // find the correct target\n\n  var target = manager.element;\n\n  if (hasParent(input.srcEvent.target, target)) {\n    target = input.srcEvent.target;\n  }\n\n  input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\nfunction inputHandler(manager, eventType, input) {\n  var pointersLen = input.pointers.length;\n  var changedPointersLen = input.changedPointers.length;\n  var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n  var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n  input.isFirst = !!isFirst;\n  input.isFinal = !!isFinal;\n\n  if (isFirst) {\n    manager.session = {};\n  } // source event is the normalized value of the domEvents\n  // like 'touchstart, mouseup, pointerdown'\n\n\n  input.eventType = eventType; // compute scale, rotation etc\n\n  computeInputData(manager, input); // emit secret event\n\n  manager.emit('hammer.input', input);\n  manager.recognize(input);\n  manager.session.prevInput = input;\n}\n\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n  return str.trim().split(/\\s+/g);\n}\n\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n  each(splitStr(types), function (type) {\n    target.addEventListener(type, handler, false);\n  });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n  each(splitStr(types), function (type) {\n    target.removeEventListener(type, handler, false);\n  });\n}\n\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n  var doc = element.ownerDocument || element;\n  return doc.defaultView || doc.parentWindow || window;\n}\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n  function Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n\n    this.domHandler = function (ev) {\n      if (boolOrFn(manager.options.enable, [manager])) {\n        self.handler(ev);\n      }\n    };\n\n    this.init();\n  }\n  /**\n   * @private\n   * should handle the inputEvent data and trigger the callback\n   * @virtual\n   */\n\n\n  var _proto = Input.prototype;\n\n  _proto.handler = function handler() {};\n  /**\n   * @private\n   * bind the events\n   */\n\n\n  _proto.init = function init() {\n    this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n    this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n    this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n  };\n  /**\n   * @private\n   * unbind the events\n   */\n\n\n  _proto.destroy = function destroy() {\n    this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n    this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n    this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n  };\n\n  return Input;\n}();\n\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n  if (src.indexOf && !findByKey) {\n    return src.indexOf(find);\n  } else {\n    var i = 0;\n\n    while (i < src.length) {\n      if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n        // do not use === here, test fails\n        return i;\n      }\n\n      i++;\n    }\n\n    return -1;\n  }\n}\n\nvar POINTER_INPUT_MAP = {\n  pointerdown: INPUT_START,\n  pointermove: INPUT_MOVE,\n  pointerup: INPUT_END,\n  pointercancel: INPUT_CANCEL,\n  pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n  2: INPUT_TYPE_TOUCH,\n  3: INPUT_TYPE_PEN,\n  4: INPUT_TYPE_MOUSE,\n  5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n  POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n  POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(PointerEventInput, _Input);\n\n  function PointerEventInput() {\n    var _this;\n\n    var proto = PointerEventInput.prototype;\n    proto.evEl = POINTER_ELEMENT_EVENTS;\n    proto.evWin = POINTER_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.store = _this.manager.session.pointerEvents = [];\n    return _this;\n  }\n  /**\n   * @private\n   * handle mouse events\n   * @param {Object} ev\n   */\n\n\n  var _proto = PointerEventInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var store = this.store;\n    var removePointer = false;\n    var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n    var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n    var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n    var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n    var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n    if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n      if (storeIndex < 0) {\n        store.push(ev);\n        storeIndex = store.length - 1;\n      }\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n      removePointer = true;\n    } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n    if (storeIndex < 0) {\n      return;\n    } // update the event in the store\n\n\n    store[storeIndex] = ev;\n    this.callback(this.manager, eventType, {\n      pointers: store,\n      changedPointers: [ev],\n      pointerType: pointerType,\n      srcEvent: ev\n    });\n\n    if (removePointer) {\n      // remove from the store\n      store.splice(storeIndex, 1);\n    }\n  };\n\n  return PointerEventInput;\n}(Input);\n\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n  return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\nfunction uniqueArray(src, key, sort) {\n  var results = [];\n  var values = [];\n  var i = 0;\n\n  while (i < src.length) {\n    var val = key ? src[i][key] : src[i];\n\n    if (inArray(values, val) < 0) {\n      results.push(src[i]);\n    }\n\n    values[i] = val;\n    i++;\n  }\n\n  if (sort) {\n    if (!key) {\n      results = results.sort();\n    } else {\n      results = results.sort(function (a, b) {\n        return a[key] > b[key];\n      });\n    }\n  }\n\n  return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n  touchstart: INPUT_START,\n  touchmove: INPUT_MOVE,\n  touchend: INPUT_END,\n  touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(TouchInput, _Input);\n\n  function TouchInput() {\n    var _this;\n\n    TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n    return _this;\n  }\n\n  var _proto = TouchInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var type = TOUCH_INPUT_MAP[ev.type];\n    var touches = getTouches.call(this, ev, type);\n\n    if (!touches) {\n      return;\n    }\n\n    this.callback(this.manager, type, {\n      pointers: touches[0],\n      changedPointers: touches[1],\n      pointerType: INPUT_TYPE_TOUCH,\n      srcEvent: ev\n    });\n  };\n\n  return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n  var allTouches = toArray(ev.touches);\n  var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n  if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n    targetIds[allTouches[0].identifier] = true;\n    return [allTouches, allTouches];\n  }\n\n  var i;\n  var targetTouches;\n  var changedTouches = toArray(ev.changedTouches);\n  var changedTargetTouches = [];\n  var target = this.target; // get target touches from touches\n\n  targetTouches = allTouches.filter(function (touch) {\n    return hasParent(touch.target, target);\n  }); // collect touches\n\n  if (type === INPUT_START) {\n    i = 0;\n\n    while (i < targetTouches.length) {\n      targetIds[targetTouches[i].identifier] = true;\n      i++;\n    }\n  } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n  i = 0;\n\n  while (i < changedTouches.length) {\n    if (targetIds[changedTouches[i].identifier]) {\n      changedTargetTouches.push(changedTouches[i]);\n    } // cleanup removed touches\n\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n      delete targetIds[changedTouches[i].identifier];\n    }\n\n    i++;\n  }\n\n  if (!changedTargetTouches.length) {\n    return;\n  }\n\n  return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n  uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n  mousedown: INPUT_START,\n  mousemove: INPUT_MOVE,\n  mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(MouseInput, _Input);\n\n  function MouseInput() {\n    var _this;\n\n    var proto = MouseInput.prototype;\n    proto.evEl = MOUSE_ELEMENT_EVENTS;\n    proto.evWin = MOUSE_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.pressed = false; // mousedown state\n\n    return _this;\n  }\n  /**\n   * @private\n   * handle mouse events\n   * @param {Object} ev\n   */\n\n\n  var _proto = MouseInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n    if (eventType & INPUT_START && ev.button === 0) {\n      this.pressed = true;\n    }\n\n    if (eventType & INPUT_MOVE && ev.which !== 1) {\n      eventType = INPUT_END;\n    } // mouse must be down\n\n\n    if (!this.pressed) {\n      return;\n    }\n\n    if (eventType & INPUT_END) {\n      this.pressed = false;\n    }\n\n    this.callback(this.manager, eventType, {\n      pointers: [ev],\n      changedPointers: [ev],\n      pointerType: INPUT_TYPE_MOUSE,\n      srcEvent: ev\n    });\n  };\n\n  return MouseInput;\n}(Input);\n\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n  var _eventData$changedPoi = eventData.changedPointers,\n      touch = _eventData$changedPoi[0];\n\n  if (touch.identifier === this.primaryTouch) {\n    var lastTouch = {\n      x: touch.clientX,\n      y: touch.clientY\n    };\n    var lts = this.lastTouches;\n    this.lastTouches.push(lastTouch);\n\n    var removeLastTouch = function removeLastTouch() {\n      var i = lts.indexOf(lastTouch);\n\n      if (i > -1) {\n        lts.splice(i, 1);\n      }\n    };\n\n    setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n  }\n}\n\nfunction recordTouches(eventType, eventData) {\n  if (eventType & INPUT_START) {\n    this.primaryTouch = eventData.changedPointers[0].identifier;\n    setLastTouch.call(this, eventData);\n  } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n    setLastTouch.call(this, eventData);\n  }\n}\n\nfunction isSyntheticEvent(eventData) {\n  var x = eventData.srcEvent.clientX;\n  var y = eventData.srcEvent.clientY;\n\n  for (var i = 0; i < this.lastTouches.length; i++) {\n    var t = this.lastTouches[i];\n    var dx = Math.abs(x - t.x);\n    var dy = Math.abs(y - t.y);\n\n    if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n  var TouchMouseInput =\n  /*#__PURE__*/\n  function (_Input) {\n    _inheritsLoose(TouchMouseInput, _Input);\n\n    function TouchMouseInput(_manager, callback) {\n      var _this;\n\n      _this = _Input.call(this, _manager, callback) || this;\n\n      _this.handler = function (manager, inputEvent, inputData) {\n        var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n        var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n          return;\n        } // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n\n\n        if (isTouch) {\n          recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n          return;\n        }\n\n        _this.callback(manager, inputEvent, inputData);\n      };\n\n      _this.touch = new TouchInput(_this.manager, _this.handler);\n      _this.mouse = new MouseInput(_this.manager, _this.handler);\n      _this.primaryTouch = null;\n      _this.lastTouches = [];\n      return _this;\n    }\n    /**\n     * @private\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n\n\n    var _proto = TouchMouseInput.prototype;\n\n    /**\n     * @private\n     * remove the event listeners\n     */\n    _proto.destroy = function destroy() {\n      this.touch.destroy();\n      this.mouse.destroy();\n    };\n\n    return TouchMouseInput;\n  }(Input);\n\n  return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n  var Type; // let inputClass = manager.options.inputClass;\n\n  var inputClass = manager.options.inputClass;\n\n  if (inputClass) {\n    Type = inputClass;\n  } else if (SUPPORT_POINTER_EVENTS) {\n    Type = PointerEventInput;\n  } else if (SUPPORT_ONLY_TOUCH) {\n    Type = TouchInput;\n  } else if (!SUPPORT_TOUCH) {\n    Type = MouseInput;\n  } else {\n    Type = TouchMouseInput;\n  }\n\n  return new Type(manager, inputHandler);\n}\n\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\nfunction invokeArrayArg(arg, fn, context) {\n  if (Array.isArray(arg)) {\n    each(arg, context[fn], context);\n    return true;\n  }\n\n  return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n  return _uniqueId++;\n}\n\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n  var manager = recognizer.manager;\n\n  if (manager) {\n    return manager.get(otherRecognizer);\n  }\n\n  return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\nfunction stateStr(state) {\n  if (state & STATE_CANCELLED) {\n    return 'cancel';\n  } else if (state & STATE_ENDED) {\n    return 'end';\n  } else if (state & STATE_CHANGED) {\n    return 'move';\n  } else if (state & STATE_BEGAN) {\n    return 'start';\n  }\n\n  return '';\n}\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n  function Recognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    this.options = _extends({\n      enable: true\n    }, options);\n    this.id = uniqueId();\n    this.manager = null; // default is enable true\n\n    this.state = STATE_POSSIBLE;\n    this.simultaneous = {};\n    this.requireFail = [];\n  }\n  /**\n   * @private\n   * set options\n   * @param {Object} options\n   * @return {Recognizer}\n   */\n\n\n  var _proto = Recognizer.prototype;\n\n  _proto.set = function set(options) {\n    assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n    this.manager && this.manager.touchAction.update();\n    return this;\n  };\n  /**\n   * @private\n   * recognize simultaneous with an other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n      return this;\n    }\n\n    var simultaneous = this.simultaneous;\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n    if (!simultaneous[otherRecognizer.id]) {\n      simultaneous[otherRecognizer.id] = otherRecognizer;\n      otherRecognizer.recognizeWith(this);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n      return this;\n    }\n\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    delete this.simultaneous[otherRecognizer.id];\n    return this;\n  };\n  /**\n   * @private\n   * recognizer can only run when an other is failing\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.requireFailure = function requireFailure(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n      return this;\n    }\n\n    var requireFail = this.requireFail;\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n    if (inArray(requireFail, otherRecognizer) === -1) {\n      requireFail.push(otherRecognizer);\n      otherRecognizer.requireFailure(this);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * drop the requireFailure link. it does not remove the link on the other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n      return this;\n    }\n\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    var index = inArray(this.requireFail, otherRecognizer);\n\n    if (index > -1) {\n      this.requireFail.splice(index, 1);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * has require failures boolean\n   * @returns {boolean}\n   */\n\n\n  _proto.hasRequireFailures = function hasRequireFailures() {\n    return this.requireFail.length > 0;\n  };\n  /**\n   * @private\n   * if the recognizer can recognize simultaneous with an other recognizer\n   * @param {Recognizer} otherRecognizer\n   * @returns {Boolean}\n   */\n\n\n  _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n    return !!this.simultaneous[otherRecognizer.id];\n  };\n  /**\n   * @private\n   * You should use `tryEmit` instead of `emit` directly to check\n   * that all the needed recognizers has failed before emitting.\n   * @param {Object} input\n   */\n\n\n  _proto.emit = function emit(input) {\n    var self = this;\n    var state = this.state;\n\n    function emit(event) {\n      self.manager.emit(event, input);\n    } // 'panstart' and 'panmove'\n\n\n    if (state < STATE_ENDED) {\n      emit(self.options.event + stateStr(state));\n    }\n\n    emit(self.options.event); // simple 'eventName' events\n\n    if (input.additionalEvent) {\n      // additional event(panleft, panright, pinchin, pinchout...)\n      emit(input.additionalEvent);\n    } // panend and pancancel\n\n\n    if (state >= STATE_ENDED) {\n      emit(self.options.event + stateStr(state));\n    }\n  };\n  /**\n   * @private\n   * Check that all the require failure recognizers has failed,\n   * if true, it emits a gesture event,\n   * otherwise, setup the state to FAILED.\n   * @param {Object} input\n   */\n\n\n  _proto.tryEmit = function tryEmit(input) {\n    if (this.canEmit()) {\n      return this.emit(input);\n    } // it's failing anyway\n\n\n    this.state = STATE_FAILED;\n  };\n  /**\n   * @private\n   * can we emit?\n   * @returns {boolean}\n   */\n\n\n  _proto.canEmit = function canEmit() {\n    var i = 0;\n\n    while (i < this.requireFail.length) {\n      if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n        return false;\n      }\n\n      i++;\n    }\n\n    return true;\n  };\n  /**\n   * @private\n   * update the recognizer\n   * @param {Object} inputData\n   */\n\n\n  _proto.recognize = function recognize(inputData) {\n    // make a new copy of the inputData\n    // so we can change the inputData without messing up the other recognizers\n    var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n    if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n      this.reset();\n      this.state = STATE_FAILED;\n      return;\n    } // reset when we've reached the end\n\n\n    if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n      this.state = STATE_POSSIBLE;\n    }\n\n    this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n    // so trigger an event\n\n    if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n      this.tryEmit(inputDataClone);\n    }\n  };\n  /**\n   * @private\n   * return the state of the recognizer\n   * the actual recognizing happens in this method\n   * @virtual\n   * @param {Object} inputData\n   * @returns {constant} STATE\n   */\n\n  /* jshint ignore:start */\n\n\n  _proto.process = function process(inputData) {};\n  /* jshint ignore:end */\n\n  /**\n   * @private\n   * return the preferred touch-action\n   * @virtual\n   * @returns {Array}\n   */\n\n\n  _proto.getTouchAction = function getTouchAction() {};\n  /**\n   * @private\n   * called when the gesture isn't allowed to recognize\n   * like when another is being recognized or it is disabled\n   * @virtual\n   */\n\n\n  _proto.reset = function reset() {};\n\n  return Recognizer;\n}();\n\nvar defaults = {\n  /**\n   * @private\n   * set if DOM events are being triggered.\n   * But this is slower and unused by simple implementations, so disabled by default.\n   * @type {Boolean}\n   * @default false\n   */\n  domEvents: false,\n\n  /**\n   * @private\n   * The value for the touchAction property/fallback.\n   * When set to `compute` it will magically set the correct value based on the added recognizers.\n   * @type {String}\n   * @default compute\n   */\n  touchAction: TOUCH_ACTION_COMPUTE,\n\n  /**\n   * @private\n   * @type {Boolean}\n   * @default true\n   */\n  enable: true,\n\n  /**\n   * @private\n   * EXPERIMENTAL FEATURE -- can be removed/changed\n   * Change the parent input target element.\n   * If Null, then it is being set the to main element.\n   * @type {Null|EventTarget}\n   * @default null\n   */\n  inputTarget: null,\n\n  /**\n   * @private\n   * force an input class\n   * @type {Null|Function}\n   * @default null\n   */\n  inputClass: null,\n\n  /**\n   * @private\n   * Default recognizer setup when calling `Hammer()`\n   * When creating a new Manager these will be skipped.\n   * @type {Array}\n   */\n  preset: [],\n\n  /**\n   * @private\n   * Some CSS properties can be used to improve the working of Hammer.\n   * Add them to this method and they will be set when creating a new Manager.\n   * @namespace\n   */\n  cssProps: {\n    /**\n     * @private\n     * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n     * @type {String}\n     * @default 'none'\n     */\n    userSelect: \""none\"",\n\n    /**\n     * @private\n     * Disable the Windows Phone grippers when pressing an element.\n     * @type {String}\n     * @default 'none'\n     */\n    touchSelect: \""none\"",\n\n    /**\n     * @private\n     * Disables the default callout shown when you touch and hold a touch target.\n     * On iOS, when you touch and hold a touch target such as a link, Safari displays\n     * a callout containing information about the link. This property allows you to disable that callout.\n     * @type {String}\n     * @default 'none'\n     */\n    touchCallout: \""none\"",\n\n    /**\n     * @private\n     * Specifies whether zooming is enabled. Used by IE10>\n     * @type {String}\n     * @default 'none'\n     */\n    contentZooming: \""none\"",\n\n    /**\n     * @private\n     * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n     * @type {String}\n     * @default 'none'\n     */\n    userDrag: \""none\"",\n\n    /**\n     * @private\n     * Overrides the highlight color shown when the user taps a link or a JavaScript\n     * clickable element in iOS. This property obeys the alpha value, if specified.\n     * @type {String}\n     * @default 'rgba(0,0,0,0)'\n     */\n    tapHighlightColor: \""rgba(0,0,0,0)\""\n  }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n  var element = manager.element;\n\n  if (!element.style) {\n    return;\n  }\n\n  var prop;\n  each(manager.options.cssProps, function (value, name) {\n    prop = prefixed(element.style, name);\n\n    if (add) {\n      manager.oldCssProps[prop] = element.style[prop];\n      element.style[prop] = value;\n    } else {\n      element.style[prop] = manager.oldCssProps[prop] || \""\"";\n    }\n  });\n\n  if (!add) {\n    manager.oldCssProps = {};\n  }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n  var gestureEvent = document.createEvent(\""Event\"");\n  gestureEvent.initEvent(event, true, true);\n  gestureEvent.gesture = data;\n  data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n  function Manager(element, options) {\n    var _this = this;\n\n    this.options = assign$1({}, defaults, options || {});\n    this.options.inputTarget = this.options.inputTarget || element;\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n    toggleCssProps(this, true);\n    each(this.options.recognizers, function (item) {\n      var recognizer = _this.add(new item[0](item[1]));\n\n      item[2] && recognizer.recognizeWith(item[2]);\n      item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n  }\n  /**\n   * @private\n   * set options\n   * @param {Object} options\n   * @returns {Manager}\n   */\n\n\n  var _proto = Manager.prototype;\n\n  _proto.set = function set(options) {\n    assign$1(this.options, options); // Options that need a little more setup\n\n    if (options.touchAction) {\n      this.touchAction.update();\n    }\n\n    if (options.inputTarget) {\n      // Clean up existing event listeners and reinitialize\n      this.input.destroy();\n      this.input.target = options.inputTarget;\n      this.input.init();\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * stop recognizing for this session.\n   * This session will be discarded, when a new [input]start event is fired.\n   * When forced, the recognizer cycle is stopped immediately.\n   * @param {Boolean} [force]\n   */\n\n\n  _proto.stop = function stop(force) {\n    this.session.stopped = force ? FORCED_STOP : STOP;\n  };\n  /**\n   * @private\n   * run the recognizers!\n   * called by the inputHandler function on every movement of the pointers (touches)\n   * it walks through all the recognizers and tries to detect the gesture that is being made\n   * @param {Object} inputData\n   */\n\n\n  _proto.recognize = function recognize(inputData) {\n    var session = this.session;\n\n    if (session.stopped) {\n      return;\n    } // run the touch-action polyfill\n\n\n    this.touchAction.preventDefaults(inputData);\n    var recognizer;\n    var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n    // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n    // if no recognizer is detecting a thing, it is set to `null`\n\n    var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n    // or when we're in a new session\n\n    if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n      session.curRecognizer = null;\n      curRecognizer = null;\n    }\n\n    var i = 0;\n\n    while (i < recognizers.length) {\n      recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n      // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n      // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n      //      that is being recognized.\n      // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n      //      this can be setup with the `recognizeWith()` method on the recognizer.\n\n      if (session.stopped !== FORCED_STOP && ( // 1\n      !curRecognizer || recognizer === curRecognizer || // 2\n      recognizer.canRecognizeWith(curRecognizer))) {\n        // 3\n        recognizer.recognize(inputData);\n      } else {\n        recognizer.reset();\n      } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n      // current active recognizer. but only if we don't already have an active recognizer\n\n\n      if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n        session.curRecognizer = recognizer;\n        curRecognizer = recognizer;\n      }\n\n      i++;\n    }\n  };\n  /**\n   * @private\n   * get a recognizer by its event name.\n   * @param {Recognizer|String} recognizer\n   * @returns {Recognizer|Null}\n   */\n\n\n  _proto.get = function get(recognizer) {\n    if (recognizer instanceof Recognizer) {\n      return recognizer;\n    }\n\n    var recognizers = this.recognizers;\n\n    for (var i = 0; i < recognizers.length; i++) {\n      if (recognizers[i].options.event === recognizer) {\n        return recognizers[i];\n      }\n    }\n\n    return null;\n  };\n  /**\n   * @private add a recognizer to the manager\n   * existing recognizers with the same event name will be removed\n   * @param {Recognizer} recognizer\n   * @returns {Recognizer|Manager}\n   */\n\n\n  _proto.add = function add(recognizer) {\n    if (invokeArrayArg(recognizer, \""add\"", this)) {\n      return this;\n    } // remove existing\n\n\n    var existing = this.get(recognizer.options.event);\n\n    if (existing) {\n      this.remove(existing);\n    }\n\n    this.recognizers.push(recognizer);\n    recognizer.manager = this;\n    this.touchAction.update();\n    return recognizer;\n  };\n  /**\n   * @private\n   * remove a recognizer by name or instance\n   * @param {Recognizer|String} recognizer\n   * @returns {Manager}\n   */\n\n\n  _proto.remove = function remove(recognizer) {\n    if (invokeArrayArg(recognizer, \""remove\"", this)) {\n      return this;\n    }\n\n    var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n    if (recognizer) {\n      var recognizers = this.recognizers;\n      var index = inArray(recognizers, targetRecognizer);\n\n      if (index !== -1) {\n        recognizers.splice(index, 1);\n        this.touchAction.update();\n      }\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * bind event\n   * @param {String} events\n   * @param {Function} handler\n   * @returns {EventEmitter} this\n   */\n\n\n  _proto.on = function on(events, handler) {\n    if (events === undefined || handler === undefined) {\n      return this;\n    }\n\n    var handlers = this.handlers;\n    each(splitStr(events), function (event) {\n      handlers[event] = handlers[event] || [];\n      handlers[event].push(handler);\n    });\n    return this;\n  };\n  /**\n   * @private unbind event, leave emit blank to remove all handlers\n   * @param {String} events\n   * @param {Function} [handler]\n   * @returns {EventEmitter} this\n   */\n\n\n  _proto.off = function off(events, handler) {\n    if (events === undefined) {\n      return this;\n    }\n\n    var handlers = this.handlers;\n    each(splitStr(events), function (event) {\n      if (!handler) {\n        delete handlers[event];\n      } else {\n        handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n      }\n    });\n    return this;\n  };\n  /**\n   * @private emit event to the listeners\n   * @param {String} event\n   * @param {Object} data\n   */\n\n\n  _proto.emit = function emit(event, data) {\n    // we also want to trigger dom events\n    if (this.options.domEvents) {\n      triggerDomEvent(event, data);\n    } // no handlers, so skip it all\n\n\n    var handlers = this.handlers[event] && this.handlers[event].slice();\n\n    if (!handlers || !handlers.length) {\n      return;\n    }\n\n    data.type = event;\n\n    data.preventDefault = function () {\n      data.srcEvent.preventDefault();\n    };\n\n    var i = 0;\n\n    while (i < handlers.length) {\n      handlers[i](data);\n      i++;\n    }\n  };\n  /**\n   * @private\n   * destroy the manager and unbinds all events\n   * it doesn't unbind dom events, that is the user own responsibility\n   */\n\n\n  _proto.destroy = function destroy() {\n    this.element && toggleCssProps(this, false);\n    this.handlers = {};\n    this.session = {};\n    this.input.destroy();\n    this.element = null;\n  };\n\n  return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n  touchstart: INPUT_START,\n  touchmove: INPUT_MOVE,\n  touchend: INPUT_END,\n  touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(SingleTouchInput, _Input);\n\n  function SingleTouchInput() {\n    var _this;\n\n    var proto = SingleTouchInput.prototype;\n    proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.started = false;\n    return _this;\n  }\n\n  var _proto = SingleTouchInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n    if (type === INPUT_START) {\n      this.started = true;\n    }\n\n    if (!this.started) {\n      return;\n    }\n\n    var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n    if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n      this.started = false;\n    }\n\n    this.callback(this.manager, type, {\n      pointers: touches[0],\n      changedPointers: touches[1],\n      pointerType: INPUT_TYPE_TOUCH,\n      srcEvent: ev\n    });\n  };\n\n  return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n  var all = toArray(ev.touches);\n  var changed = toArray(ev.changedTouches);\n\n  if (type & (INPUT_END | INPUT_CANCEL)) {\n    all = uniqueArray(all.concat(changed), 'identifier', true);\n  }\n\n  return [all, changed];\n}\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(AttrRecognizer, _Recognizer);\n\n  function AttrRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _Recognizer.call(this, _extends({\n      pointers: 1\n    }, options)) || this;\n  }\n  /**\n   * @private\n   * Used to check if it the recognizer receives valid input, like input.distance > 10.\n   * @memberof AttrRecognizer\n   * @param {Object} input\n   * @returns {Boolean} recognized\n   */\n\n\n  var _proto = AttrRecognizer.prototype;\n\n  _proto.attrTest = function attrTest(input) {\n    var optionPointers = this.options.pointers;\n    return optionPointers === 0 || input.pointers.length === optionPointers;\n  };\n  /**\n   * @private\n   * Process the input and return the state for the recognizer\n   * @memberof AttrRecognizer\n   * @param {Object} input\n   * @returns {*} State\n   */\n\n\n  _proto.process = function process(input) {\n    var state = this.state;\n    var eventType = input.eventType;\n    var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n    var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n    if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n      return state | STATE_CANCELLED;\n    } else if (isRecognized || isValid) {\n      if (eventType & INPUT_END) {\n        return state | STATE_ENDED;\n      } else if (!(state & STATE_BEGAN)) {\n        return STATE_BEGAN;\n      }\n\n      return state | STATE_CHANGED;\n    }\n\n    return STATE_FAILED;\n  };\n\n  return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(TapRecognizer, _Recognizer);\n\n  function TapRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _Recognizer.call(this, _extends({\n      event: 'tap',\n      pointers: 1,\n      taps: 1,\n      interval: 300,\n      // max time between the multi-tap taps\n      time: 250,\n      // max time of the pointer to be down (like finger on the screen)\n      threshold: 9,\n      // a minimal movement is ok, but keep it low\n      posThreshold: 10\n    }, options)) || this; // previous time and center,\n    // used for tap counting\n\n    _this.pTime = false;\n    _this.pCenter = false;\n    _this._timer = null;\n    _this._input = null;\n    _this.count = 0;\n    return _this;\n  }\n\n  var _proto = TapRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_MANIPULATION];\n  };\n\n  _proto.process = function process(input) {\n    var _this2 = this;\n\n    var options = this.options;\n    var validPointers = input.pointers.length === options.pointers;\n    var validMovement = input.distance < options.threshold;\n    var validTouchTime = input.deltaTime < options.time;\n    this.reset();\n\n    if (input.eventType & INPUT_START && this.count === 0) {\n      return this.failTimeout();\n    } // we only allow little movement\n    // and we've reached an end event, so a tap is possible\n\n\n    if (validMovement && validTouchTime && validPointers) {\n      if (input.eventType !== INPUT_END) {\n        return this.failTimeout();\n      }\n\n      var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n      var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n      this.pTime = input.timeStamp;\n      this.pCenter = input.center;\n\n      if (!validMultiTap || !validInterval) {\n        this.count = 1;\n      } else {\n        this.count += 1;\n      }\n\n      this._input = input; // if tap count matches we have recognized it,\n      // else it has began recognizing...\n\n      var tapCount = this.count % options.taps;\n\n      if (tapCount === 0) {\n        // no failing requirements, immediately trigger the tap event\n        // or wait as long as the multitap interval to trigger\n        if (!this.hasRequireFailures()) {\n          return STATE_RECOGNIZED;\n        } else {\n          this._timer = setTimeout(function () {\n            _this2.state = STATE_RECOGNIZED;\n\n            _this2.tryEmit();\n          }, options.interval);\n          return STATE_BEGAN;\n        }\n      }\n    }\n\n    return STATE_FAILED;\n  };\n\n  _proto.failTimeout = function failTimeout() {\n    var _this3 = this;\n\n    this._timer = setTimeout(function () {\n      _this3.state = STATE_FAILED;\n    }, this.options.interval);\n    return STATE_FAILED;\n  };\n\n  _proto.reset = function reset() {\n    clearTimeout(this._timer);\n  };\n\n  _proto.emit = function emit() {\n    if (this.state === STATE_RECOGNIZED) {\n      this._input.tapCount = this.count;\n      this.manager.emit(this.options.event, this._input);\n    }\n  };\n\n  return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\nfunction directionStr(direction) {\n  if (direction === DIRECTION_DOWN) {\n    return 'down';\n  } else if (direction === DIRECTION_UP) {\n    return 'up';\n  } else if (direction === DIRECTION_LEFT) {\n    return 'left';\n  } else if (direction === DIRECTION_RIGHT) {\n    return 'right';\n  }\n\n  return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n  function PanRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _AttrRecognizer.call(this, _extends({\n      event: 'pan',\n      threshold: 10,\n      pointers: 1,\n      direction: DIRECTION_ALL\n    }, options)) || this;\n    _this.pX = null;\n    _this.pY = null;\n    return _this;\n  }\n\n  var _proto = PanRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    var direction = this.options.direction;\n    var actions = [];\n\n    if (direction & DIRECTION_HORIZONTAL) {\n      actions.push(TOUCH_ACTION_PAN_Y);\n    }\n\n    if (direction & DIRECTION_VERTICAL) {\n      actions.push(TOUCH_ACTION_PAN_X);\n    }\n\n    return actions;\n  };\n\n  _proto.directionTest = function directionTest(input) {\n    var options = this.options;\n    var hasMoved = true;\n    var distance = input.distance;\n    var direction = input.direction;\n    var x = input.deltaX;\n    var y = input.deltaY; // lock to axis?\n\n    if (!(direction & options.direction)) {\n      if (options.direction & DIRECTION_HORIZONTAL) {\n        direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n        hasMoved = x !== this.pX;\n        distance = Math.abs(input.deltaX);\n      } else {\n        direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n        hasMoved = y !== this.pY;\n        distance = Math.abs(input.deltaY);\n      }\n    }\n\n    input.direction = direction;\n    return hasMoved && distance > options.threshold && direction & options.direction;\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n    this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n  };\n\n  _proto.emit = function emit(input) {\n    this.pX = input.deltaX;\n    this.pY = input.deltaY;\n    var direction = directionStr(input.direction);\n\n    if (direction) {\n      input.additionalEvent = this.options.event + direction;\n    }\n\n    _AttrRecognizer.prototype.emit.call(this, input);\n  };\n\n  return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n  function SwipeRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'swipe',\n      threshold: 10,\n      velocity: 0.3,\n      direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n      pointers: 1\n    }, options)) || this;\n  }\n\n  var _proto = SwipeRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return PanRecognizer.prototype.getTouchAction.call(this);\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    var direction = this.options.direction;\n    var velocity;\n\n    if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n      velocity = input.overallVelocity;\n    } else if (direction & DIRECTION_HORIZONTAL) {\n      velocity = input.overallVelocityX;\n    } else if (direction & DIRECTION_VERTICAL) {\n      velocity = input.overallVelocityY;\n    }\n\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n  };\n\n  _proto.emit = function emit(input) {\n    var direction = directionStr(input.offsetDirection);\n\n    if (direction) {\n      this.manager.emit(this.options.event + direction, input);\n    }\n\n    this.manager.emit(this.options.event, input);\n  };\n\n  return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n  function PinchRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'pinch',\n      threshold: 0,\n      pointers: 2\n    }, options)) || this;\n  }\n\n  var _proto = PinchRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_NONE];\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n  };\n\n  _proto.emit = function emit(input) {\n    if (input.scale !== 1) {\n      var inOut = input.scale < 1 ? 'in' : 'out';\n      input.additionalEvent = this.options.event + inOut;\n    }\n\n    _AttrRecognizer.prototype.emit.call(this, input);\n  };\n\n  return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n  function RotateRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'rotate',\n      threshold: 0,\n      pointers: 2\n    }, options)) || this;\n  }\n\n  var _proto = RotateRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_NONE];\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n  };\n\n  return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(PressRecognizer, _Recognizer);\n\n  function PressRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _Recognizer.call(this, _extends({\n      event: 'press',\n      pointers: 1,\n      time: 251,\n      // minimal time of the pointer to be pressed\n      threshold: 9\n    }, options)) || this;\n    _this._timer = null;\n    _this._input = null;\n    return _this;\n  }\n\n  var _proto = PressRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_AUTO];\n  };\n\n  _proto.process = function process(input) {\n    var _this2 = this;\n\n    var options = this.options;\n    var validPointers = input.pointers.length === options.pointers;\n    var validMovement = input.distance < options.threshold;\n    var validTime = input.deltaTime > options.time;\n    this._input = input; // we only allow little movement\n    // and we've reached an end event, so a tap is possible\n\n    if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n      this.reset();\n    } else if (input.eventType & INPUT_START) {\n      this.reset();\n      this._timer = setTimeout(function () {\n        _this2.state = STATE_RECOGNIZED;\n\n        _this2.tryEmit();\n      }, options.time);\n    } else if (input.eventType & INPUT_END) {\n      return STATE_RECOGNIZED;\n    }\n\n    return STATE_FAILED;\n  };\n\n  _proto.reset = function reset() {\n    clearTimeout(this._timer);\n  };\n\n  _proto.emit = function emit(input) {\n    if (this.state !== STATE_RECOGNIZED) {\n      return;\n    }\n\n    if (input && input.eventType & INPUT_END) {\n      this.manager.emit(this.options.event + \""up\"", input);\n    } else {\n      this._input.timeStamp = now();\n      this.manager.emit(this.options.event, this._input);\n    }\n  };\n\n  return PressRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n  var deprecationMessage = \""DEPRECATED METHOD: \"" + name + \""\\n\"" + message + \"" AT \\n\"";\n  return function () {\n    var e = new Error('get-stack-trace');\n    var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n    var log = window.console && (window.console.warn || window.console.log);\n\n    if (log) {\n      log.call(window.console, deprecationMessage, stack);\n    }\n\n    return method.apply(this, arguments);\n  };\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\nvar extend = deprecate(function (dest, src, merge) {\n  var keys = Object.keys(src);\n  var i = 0;\n\n  while (i < keys.length) {\n    if (!merge || merge && dest[keys[i]] === undefined) {\n      dest[keys[i]] = src[keys[i]];\n    }\n\n    i++;\n  }\n\n  return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n  return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n  var baseP = base.prototype;\n  var childP;\n  childP = child.prototype = Object.create(baseP);\n  childP.constructor = child;\n  childP._super = baseP;\n\n  if (properties) {\n    assign$1(childP, properties);\n  }\n}\n\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n  return function boundFn() {\n    return fn.apply(context, arguments);\n  };\n}\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer =\n/*#__PURE__*/\nfunction () {\n  var Hammer =\n  /**\n    * @private\n    * @const {string}\n    */\n  function Hammer(element, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return new Manager(element, _extends({\n      recognizers: [// RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n      [RotateRecognizer, {\n        enable: false\n      }], [PinchRecognizer, {\n        enable: false\n      }, ['rotate']], [SwipeRecognizer, {\n        direction: DIRECTION_HORIZONTAL\n      }], [PanRecognizer, {\n        direction: DIRECTION_HORIZONTAL\n      }, ['swipe']], [TapRecognizer], [TapRecognizer, {\n        event: 'doubletap',\n        taps: 2\n      }, ['tap']], [PressRecognizer]]\n    }, options));\n  };\n\n  Hammer.VERSION = \""2.0.15\"";\n  Hammer.DIRECTION_ALL = DIRECTION_ALL;\n  Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n  Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n  Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n  Hammer.DIRECTION_UP = DIRECTION_UP;\n  Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n  Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n  Hammer.DIRECTION_NONE = DIRECTION_NONE;\n  Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n  Hammer.INPUT_START = INPUT_START;\n  Hammer.INPUT_MOVE = INPUT_MOVE;\n  Hammer.INPUT_END = INPUT_END;\n  Hammer.INPUT_CANCEL = INPUT_CANCEL;\n  Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n  Hammer.STATE_BEGAN = STATE_BEGAN;\n  Hammer.STATE_CHANGED = STATE_CHANGED;\n  Hammer.STATE_ENDED = STATE_ENDED;\n  Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n  Hammer.STATE_CANCELLED = STATE_CANCELLED;\n  Hammer.STATE_FAILED = STATE_FAILED;\n  Hammer.Manager = Manager;\n  Hammer.Input = Input;\n  Hammer.TouchAction = TouchAction;\n  Hammer.TouchInput = TouchInput;\n  Hammer.MouseInput = MouseInput;\n  Hammer.PointerEventInput = PointerEventInput;\n  Hammer.TouchMouseInput = TouchMouseInput;\n  Hammer.SingleTouchInput = SingleTouchInput;\n  Hammer.Recognizer = Recognizer;\n  Hammer.AttrRecognizer = AttrRecognizer;\n  Hammer.Tap = TapRecognizer;\n  Hammer.Pan = PanRecognizer;\n  Hammer.Swipe = SwipeRecognizer;\n  Hammer.Pinch = PinchRecognizer;\n  Hammer.Rotate = RotateRecognizer;\n  Hammer.Press = PressRecognizer;\n  Hammer.on = addEventListeners;\n  Hammer.off = removeEventListeners;\n  Hammer.each = each;\n  Hammer.merge = merge;\n  Hammer.extend = extend;\n  Hammer.bindFn = bindFn;\n  Hammer.assign = assign$1;\n  Hammer.inherit = inherit;\n  Hammer.bindFn = bindFn;\n  Hammer.prefixed = prefixed;\n  Hammer.toArray = toArray;\n  Hammer.inArray = inArray;\n  Hammer.uniqueArray = uniqueArray;\n  Hammer.splitStr = splitStr;\n  Hammer.boolOrFn = boolOrFn;\n  Hammer.hasParent = hasParent;\n  Hammer.addEventListeners = addEventListeners;\n  Hammer.removeEventListeners = removeEventListeners;\n  Hammer.defaults = defaults;\n  return Hammer;\n}();\n\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults };\n//# sourceMappingURL=hammer.esm.js.map\n"",""/*\nCopyright (c) 2017 NAVER Corp.\n@egjs/axes project is licensed under the MIT license\n\n@egjs/axes JavaScript library\nhttps://github.com/naver/egjs-axes\n\n@version 2.5.13\n*/\nimport { DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, PointerEventInput, TouchMouseInput, TouchInput, MouseInput, Pan, Pinch } from '@egjs/hammerjs';\nimport Component from '@egjs/component';\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \""License\""); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = Object.setPrototypeOf || {\n  __proto__: []\n} instanceof Array && function (d, b) {\n  d.__proto__ = b;\n} || function (d, b) {\n  for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n};\n\nfunction __extends(d, b) {\n  extendStatics(d, b);\n\n  function __() {\n    this.constructor = d;\n  }\n\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = Object.assign || function __assign(t) {\n  for (var s, i = 1, n = arguments.length; i < n; i++) {\n    s = arguments[i];\n\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n  }\n\n  return t;\n};\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \""undefined\"") {\n  // window is undefined in node.js\n  win = {};\n} else {\n  win = window;\n}\n\n// export const DIRECTION_NONE = 1;\nvar FIXED_DIGIT = 100000;\nvar TRANSFORM = function () {\n  if (typeof document === \""undefined\"") {\n    return \""\"";\n  }\n\n  var bodyStyle = (document.head || document.getElementsByTagName(\""head\"")[0]).style;\n  var target = [\""transform\"", \""webkitTransform\"", \""msTransform\"", \""mozTransform\""];\n\n  for (var i = 0, len = target.length; i < len; i++) {\n    if (target[i] in bodyStyle) {\n      return target[i];\n    }\n  }\n\n  return \""\"";\n}();\n\nfunction toArray(nodes) {\n  // const el = Array.prototype.slice.call(nodes);\n  // for IE8\n  var el = [];\n\n  for (var i = 0, len = nodes.length; i < len; i++) {\n    el.push(nodes[i]);\n  }\n\n  return el;\n}\nfunction $(param, multi) {\n  if (multi === void 0) {\n    multi = false;\n  }\n\n  var el;\n\n  if (typeof param === \""string\"") {\n    // String (HTML, Selector)\n    // check if string is HTML tag format\n    var match = param.match(/^<([a-z]+)\\s*([^>]*)>/); // creating element\n\n    if (match) {\n      // HTML\n      var dummy = document.createElement(\""div\"");\n      dummy.innerHTML = param;\n      el = toArray(dummy.childNodes);\n    } else {\n      // Selector\n      el = toArray(document.querySelectorAll(param));\n    }\n\n    if (!multi) {\n      el = el.length >= 1 ? el[0] : undefined;\n    }\n  } else if (param === win) {\n    // window\n    el = param;\n  } else if (param.nodeName && (param.nodeType === 1 || param.nodeType === 9)) {\n    // HTMLElement, Document\n    el = param;\n  } else if (\""jQuery\"" in win && param instanceof jQuery || param.constructor.prototype.jquery) {\n    // jQuery\n    el = multi ? param.toArray() : param.get(0);\n  } else if (Array.isArray(param)) {\n    el = param.map(function (v) {\n      return $(v);\n    });\n\n    if (!multi) {\n      el = el.length >= 1 ? el[0] : undefined;\n    }\n  }\n\n  return el;\n}\nvar raf = win.requestAnimationFrame || win.webkitRequestAnimationFrame;\nvar caf = win.cancelAnimationFrame || win.webkitCancelAnimationFrame;\n\nif (raf && !caf) {\n  var keyInfo_1 = {};\n  var oldraf_1 = raf;\n\n  raf = function (callback) {\n    function wrapCallback(timestamp) {\n      if (keyInfo_1[key]) {\n        callback(timestamp);\n      }\n    }\n\n    var key = oldraf_1(wrapCallback);\n    keyInfo_1[key] = true;\n    return key;\n  };\n\n  caf = function (key) {\n    delete keyInfo_1[key];\n  };\n} else if (!(raf && caf)) {\n  raf = function (callback) {\n    return win.setTimeout(function () {\n      callback(win.performance && win.performance.now && win.performance.now() || new Date().getTime());\n    }, 16);\n  };\n\n  caf = win.clearTimeout;\n}\n/**\n * A polyfill for the window.requestAnimationFrame() method.\n * @see  https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame\n * @private\n */\n\n\nfunction requestAnimationFrame(fp) {\n  return raf(fp);\n}\n/**\n* A polyfill for the window.cancelAnimationFrame() method. It cancels an animation executed through a call to the requestAnimationFrame() method.\n* @param {Number} key −\tThe ID value returned through a call to the requestAnimationFrame() method. <ko>requestAnimationFrame() 메서드가 반환한 아이디 값</ko>\n* @see  https://developer.mozilla.org/en-US/docs/Web/API/Window/cancelAnimationFrame\n* @private\n*/\n\nfunction cancelAnimationFrame(key) {\n  caf(key);\n}\nfunction mapToFixed(obj) {\n  return map(obj, function (value) {\n    return toFixed(value);\n  });\n}\nfunction map(obj, callback) {\n  var tranformed = {};\n\n  for (var k in obj) {\n    k && (tranformed[k] = callback(obj[k], k));\n  }\n\n  return tranformed;\n}\nfunction filter(obj, callback) {\n  var filtered = {};\n\n  for (var k in obj) {\n    k && callback(obj[k], k) && (filtered[k] = obj[k]);\n  }\n\n  return filtered;\n}\nfunction every(obj, callback) {\n  for (var k in obj) {\n    if (k && !callback(obj[k], k)) {\n      return false;\n    }\n  }\n\n  return true;\n}\nfunction equal(target, base) {\n  return every(target, function (v, k) {\n    return v === base[k];\n  });\n}\nfunction toFixed(num) {\n  return Math.round(num * FIXED_DIGIT) / FIXED_DIGIT;\n}\n\nfunction getInsidePosition(destPos, range, circular, bounce) {\n  var toDestPos = destPos;\n  var targetRange = [circular[0] ? range[0] : bounce ? range[0] - bounce[0] : range[0], circular[1] ? range[1] : bounce ? range[1] + bounce[1] : range[1]];\n  toDestPos = Math.max(targetRange[0], toDestPos);\n  toDestPos = Math.min(targetRange[1], toDestPos);\n  return +toFixed(toDestPos);\n} // determine outside\n\nfunction isOutside(pos, range) {\n  return pos < range[0] || pos > range[1];\n}\nfunction getDuration(distance, deceleration) {\n  var duration = Math.sqrt(distance / deceleration * 2); // when duration is under 100, then value is zero\n\n  return duration < 100 ? 0 : duration;\n}\nfunction isCircularable(destPos, range, circular) {\n  return circular[1] && destPos > range[1] || circular[0] && destPos < range[0];\n}\nfunction getCirculatedPos(pos, range, circular, isAccurate) {\n  var toPos = pos;\n  var min = range[0];\n  var max = range[1];\n  var length = max - min;\n\n  if (circular[1] && pos > max) {\n    // right\n    toPos = (toPos - max) % length + min;\n  }\n\n  if (circular[0] && pos < min) {\n    // left\n    toPos = (toPos - min) % length + max;\n  }\n\n  return isAccurate ? toPos : +toFixed(toPos);\n}\n\nfunction minMax(value, min, max) {\n  return Math.max(Math.min(value, max), min);\n}\n\nvar AnimationManager =\n/*#__PURE__*/\nfunction () {\n  function AnimationManager(_a) {\n    var options = _a.options,\n        itm = _a.itm,\n        em = _a.em,\n        axm = _a.axm;\n    this.options = options;\n    this.itm = itm;\n    this.em = em;\n    this.axm = axm;\n    this.animationEnd = this.animationEnd.bind(this);\n  }\n\n  var __proto = AnimationManager.prototype;\n\n  __proto.getDuration = function (depaPos, destPos, wishDuration) {\n    var _this = this;\n\n    var duration;\n\n    if (typeof wishDuration !== \""undefined\"") {\n      duration = wishDuration;\n    } else {\n      var durations_1 = map(destPos, function (v, k) {\n        return getDuration(Math.abs(v - depaPos[k]), _this.options.deceleration);\n      });\n      duration = Object.keys(durations_1).reduce(function (max, v) {\n        return Math.max(max, durations_1[v]);\n      }, -Infinity);\n    }\n\n    return minMax(duration, this.options.minimumDuration, this.options.maximumDuration);\n  };\n\n  __proto.createAnimationParam = function (pos, duration, option) {\n    var depaPos = this.axm.get();\n    var destPos = pos;\n    var inputEvent = option && option.event || null;\n    return {\n      depaPos: depaPos,\n      destPos: destPos,\n      duration: minMax(duration, this.options.minimumDuration, this.options.maximumDuration),\n      delta: this.axm.getDelta(depaPos, destPos),\n      inputEvent: inputEvent,\n      input: option && option.input || null,\n      isTrusted: !!inputEvent,\n      done: this.animationEnd\n    };\n  };\n\n  __proto.grab = function (axes, option) {\n    if (this._animateParam && axes.length) {\n      var orgPos_1 = this.axm.get(axes);\n      var pos = this.axm.map(orgPos_1, function (v, opt) {\n        return getCirculatedPos(v, opt.range, opt.circular, false);\n      });\n\n      if (!every(pos, function (v, k) {\n        return orgPos_1[k] === v;\n      })) {\n        this.em.triggerChange(pos, false, orgPos_1, option, !!option);\n      }\n\n      this._animateParam = null;\n      this._raf && cancelAnimationFrame(this._raf);\n      this._raf = null;\n      this.em.triggerAnimationEnd(!!(option && option.event));\n    }\n  };\n\n  __proto.getEventInfo = function () {\n    if (this._animateParam && this._animateParam.input && this._animateParam.inputEvent) {\n      return {\n        input: this._animateParam.input,\n        event: this._animateParam.inputEvent\n      };\n    } else {\n      return null;\n    }\n  };\n\n  __proto.restore = function (option) {\n    var pos = this.axm.get();\n    var destPos = this.axm.map(pos, function (v, opt) {\n      return Math.min(opt.range[1], Math.max(opt.range[0], v));\n    });\n    this.animateTo(destPos, this.getDuration(pos, destPos), option);\n  };\n\n  __proto.animationEnd = function () {\n    var beforeParam = this.getEventInfo();\n    this._animateParam = null; // for Circular\n\n    var circularTargets = this.axm.filter(this.axm.get(), function (v, opt) {\n      return isCircularable(v, opt.range, opt.circular);\n    });\n    Object.keys(circularTargets).length > 0 && this.setTo(this.axm.map(circularTargets, function (v, opt) {\n      return getCirculatedPos(v, opt.range, opt.circular, false);\n    }));\n    this.itm.setInterrupt(false);\n    this.em.triggerAnimationEnd(!!beforeParam);\n\n    if (this.axm.isOutside()) {\n      this.restore(beforeParam);\n    } else {\n      this.finish(!!beforeParam);\n    }\n  };\n\n  __proto.finish = function (isTrusted) {\n    this._animateParam = null;\n    this.itm.setInterrupt(false);\n    this.em.triggerFinish(isTrusted);\n  };\n\n  __proto.animateLoop = function (param, complete) {\n    if (param.duration) {\n      this._animateParam = __assign({}, param);\n      var info_1 = this._animateParam;\n      var self_1 = this;\n      var prevPos_1 = info_1.depaPos;\n      var prevEasingPer_1 = 0;\n      var directions_1 = map(prevPos_1, function (value, key) {\n        return value <= info_1.destPos[key] ? 1 : -1;\n      });\n      var prevTime_1 = new Date().getTime();\n      info_1.startTime = prevTime_1;\n\n      (function loop() {\n        self_1._raf = null;\n        var currentTime = new Date().getTime();\n        var easingPer = self_1.easing((currentTime - info_1.startTime) / param.duration);\n        var toPos = map(prevPos_1, function (pos, key) {\n          return pos + info_1.delta[key] * (easingPer - prevEasingPer_1);\n        });\n        toPos = self_1.axm.map(toPos, function (pos, options, key) {\n          // fix absolute position to relative position\n          // fix the bouncing phenomenon by changing the range.\n          var nextPos = getCirculatedPos(pos, options.range, options.circular, true);\n\n          if (pos !== nextPos) {\n            // circular\n            param.destPos[key] += -directions_1[key] * (options.range[1] - options.range[0]);\n            prevPos_1[key] += -directions_1[key] * (options.range[1] - options.range[0]);\n          }\n\n          return nextPos;\n        });\n        var isCanceled = !self_1.em.triggerChange(toPos, false, mapToFixed(prevPos_1));\n        prevPos_1 = toPos;\n        prevTime_1 = currentTime;\n        prevEasingPer_1 = easingPer;\n\n        if (easingPer >= 1) {\n          var destPos = param.destPos;\n\n          if (!equal(destPos, self_1.axm.get(Object.keys(destPos)))) {\n            self_1.em.triggerChange(destPos, true, mapToFixed(prevPos_1));\n          }\n\n          complete();\n          return;\n        } else if (isCanceled) {\n          self_1.finish(false);\n        } else {\n          // animationEnd\n          self_1._raf = requestAnimationFrame(loop);\n        }\n      })();\n    } else {\n      this.em.triggerChange(param.destPos, true);\n      complete();\n    }\n  };\n\n  __proto.getUserControll = function (param) {\n    var userWish = param.setTo();\n    userWish.destPos = this.axm.get(userWish.destPos);\n    userWish.duration = minMax(userWish.duration, this.options.minimumDuration, this.options.maximumDuration);\n    return userWish;\n  };\n\n  __proto.animateTo = function (destPos, duration, option) {\n    var _this = this;\n\n    var param = this.createAnimationParam(destPos, duration, option);\n\n    var depaPos = __assign({}, param.depaPos);\n\n    var retTrigger = this.em.triggerAnimationStart(param); // to control\n\n    var userWish = this.getUserControll(param); // You can't stop the 'animationStart' event when 'circular' is true.\n\n    if (!retTrigger && this.axm.every(userWish.destPos, function (v, opt) {\n      return isCircularable(v, opt.range, opt.circular);\n    })) {\n      console.warn(\""You can't stop the 'animation' event when 'circular' is true.\"");\n    }\n\n    if (retTrigger && !equal(userWish.destPos, depaPos)) {\n      var inputEvent = option && option.event || null;\n      this.animateLoop({\n        depaPos: depaPos,\n        destPos: userWish.destPos,\n        duration: userWish.duration,\n        delta: this.axm.getDelta(depaPos, userWish.destPos),\n        isTrusted: !!inputEvent,\n        inputEvent: inputEvent,\n        input: option && option.input || null\n      }, function () {\n        return _this.animationEnd();\n      });\n    }\n  };\n\n  __proto.easing = function (p) {\n    return p > 1 ? 1 : this.options.easing(p);\n  };\n\n  __proto.setTo = function (pos, duration) {\n    if (duration === void 0) {\n      duration = 0;\n    }\n\n    var axes = Object.keys(pos);\n    this.grab(axes);\n    var orgPos = this.axm.get(axes);\n\n    if (equal(pos, orgPos)) {\n      return this;\n    }\n\n    this.itm.setInterrupt(true);\n    var movedPos = filter(pos, function (v, k) {\n      return orgPos[k] !== v;\n    });\n\n    if (!Object.keys(movedPos).length) {\n      return this;\n    }\n\n    movedPos = this.axm.map(movedPos, function (v, opt) {\n      var range = opt.range,\n          circular = opt.circular;\n\n      if (circular && (circular[0] || circular[1])) {\n        return v;\n      } else {\n        return getInsidePosition(v, range, circular);\n      }\n    });\n\n    if (equal(movedPos, orgPos)) {\n      return this;\n    }\n\n    if (duration > 0) {\n      this.animateTo(movedPos, duration);\n    } else {\n      this.em.triggerChange(movedPos);\n      this.finish(false);\n    }\n\n    return this;\n  };\n\n  __proto.setBy = function (pos, duration) {\n    if (duration === void 0) {\n      duration = 0;\n    }\n\n    return this.setTo(map(this.axm.get(Object.keys(pos)), function (v, k) {\n      return v + pos[k];\n    }), duration);\n  };\n\n  return AnimationManager;\n}();\n\nvar EventManager =\n/*#__PURE__*/\nfunction () {\n  function EventManager(axes) {\n    this.axes = axes;\n  }\n  /**\n   * This event is fired when a user holds an element on the screen of the device.\n   * @ko 사용자가 기기의 화면에 손을 대고 있을 때 발생하는 이벤트\n   * @name eg.Axes#hold\n   * @event\n   * @type {object} The object of data to be sent when the event is fired<ko>이벤트가 발생할 때 전달되는 데이터 객체</ko>\n   * @property {Object.<string, number>} pos coordinate <ko>좌표 정보</ko>\n   * @property {Object} input The instance of inputType where the event occurred<ko>이벤트가 발생한 inputType 인스턴스</ko>\n   * @property {Object} inputEvent The event object received from inputType <ko>inputType으로 부터 받은 이벤트 객체</ko>\n   * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n   *\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * }).on(\""hold\"", function(event) {\n   *   // event.pos\n   *   // event.input\n   *   // event.inputEvent\n   *   // isTrusted\n   * });\n   */\n\n\n  var __proto = EventManager.prototype;\n\n  __proto.triggerHold = function (pos, option) {\n    this.axes.trigger(\""hold\"", {\n      pos: pos,\n      input: option.input || null,\n      inputEvent: option.event || null,\n      isTrusted: true\n    });\n  };\n  /**\n   * Specifies the coordinates to move after the 'change' event. It works when the holding value of the change event is true.\n   * @ko 'change' 이벤트 이후 이동할 좌표를 지정한다. change이벤트의 holding 값이 true일 경우에 동작한다\n   * @name set\n  * @function\n   * @param {Object.<string, number>} pos The coordinate to move to <ko>이동할 좌표</ko>\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * }).on(\""change\"", function(event) {\n   *   event.holding && event.set({x: 10});\n   * });\n   */\n\n  /** Specifies the animation coordinates to move after the 'release' or 'animationStart' events.\n   * @ko 'release' 또는 'animationStart' 이벤트 이후 이동할 좌표를 지정한다.\n   * @name setTo\n  * @function\n   * @param {Object.<string, number>} pos The coordinate to move to <ko>이동할 좌표</ko>\n   * @param {Number} [duration] Duration of the animation (unit: ms) <ko>애니메이션 진행 시간(단위: ms)</ko>\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * }).on(\""animationStart\"", function(event) {\n   *   event.setTo({x: 10}, 2000);\n   * });\n   */\n\n  /**\n   * This event is fired when a user release an element on the screen of the device.\n   * @ko 사용자가 기기의 화면에서 손을 뗐을 때 발생하는 이벤트\n   * @name eg.Axes#release\n   * @event\n   * @type {object} The object of data to be sent when the event is fired<ko>이벤트가 발생할 때 전달되는 데이터 객체</ko>\n   * @property {Object.<string, number>} depaPos The coordinates when releasing an element<ko>손을 뗐을 때의 좌표 </ko>\n   * @property {Object.<string, number>} destPos The coordinates to move to after releasing an element<ko>손을 뗀 뒤에 이동할 좌표</ko>\n   * @property {Object.<string, number>} delta  The movement variation of coordinate <ko>좌표의 변화량</ko>\n   * @property {Object} inputEvent The event object received from inputType <ko>inputType으로 부터 받은 이벤트 객체</ko>\n   * @property {Object} input The instance of inputType where the event occurred<ko>이벤트가 발생한 inputType 인스턴스</ko>\n   * @property {setTo} setTo Specifies the animation coordinates to move after the event <ko>이벤트 이후 이동할 애니메이션 좌표를 지정한다</ko>\n   * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n   *\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * }).on(\""release\"", function(event) {\n   *   // event.depaPos\n   *   // event.destPos\n   *   // event.delta\n   *   // event.input\n   *   // event.inputEvent\n   *   // event.setTo\n   *   // event.isTrusted\n   *\n   *   // if you want to change the animation coordinates to move after the 'release' event.\n   *   event.setTo({x: 10}, 2000);\n   * });\n   */\n\n\n  __proto.triggerRelease = function (param) {\n    param.setTo = this.createUserControll(param.destPos, param.duration);\n    this.axes.trigger(\""release\"", param);\n  };\n  /**\n   * This event is fired when coordinate changes.\n   * @ko 좌표가 변경됐을 때 발생하는 이벤트\n   * @name eg.Axes#change\n   * @event\n   * @type {object} The object of data to be sent when the event is fired <ko>이벤트가 발생할 때 전달되는 데이터 객체</ko>\n   * @property {Object.<string, number>} pos  The coordinate <ko>좌표</ko>\n   * @property {Object.<string, number>} delta  The movement variation of coordinate <ko>좌표의 변화량</ko>\n   * @property {Boolean} holding Indicates whether a user holds an element on the screen of the device.<ko>사용자가 기기의 화면을 누르고 있는지 여부</ko>\n   * @property {Object} input The instance of inputType where the event occurred. If the value is changed by animation, it returns 'null'.<ko>이벤트가 발생한 inputType 인스턴스. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.</ko>\n   * @property {Object} inputEvent The event object received from inputType. If the value is changed by animation, it returns 'null'.<ko>inputType으로 부터 받은 이벤트 객체. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.</ko>\n   * @property {set} set Specifies the coordinates to move after the event. It works when the holding value is true <ko>이벤트 이후 이동할 좌표를 지정한다. holding 값이 true일 경우에 동작한다.</ko>\n   * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n   *\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * }).on(\""change\"", function(event) {\n   *   // event.pos\n   *   // event.delta\n   *   // event.input\n   *   // event.inputEvent\n   *   // event.holding\n   *   // event.set\n   *   // event.isTrusted\n   *\n   *   // if you want to change the coordinates to move after the 'change' event.\n   *   // it works when the holding value of the change event is true.\n   *   event.holding && event.set({x: 10});\n   * });\n   */\n\n\n  __proto.triggerChange = function (pos, isAccurate, depaPos, option, holding) {\n    if (holding === void 0) {\n      holding = false;\n    }\n\n    var am = this.am;\n    var axm = am.axm;\n    var eventInfo = am.getEventInfo();\n    var moveTo = axm.moveTo(pos, isAccurate, depaPos);\n    var inputEvent = option && option.event || eventInfo && eventInfo.event || null;\n    var param = {\n      pos: moveTo.pos,\n      delta: moveTo.delta,\n      holding: holding,\n      inputEvent: inputEvent,\n      isTrusted: !!inputEvent,\n      input: option && option.input || eventInfo && eventInfo.input || null,\n      set: inputEvent ? this.createUserControll(moveTo.pos) : function () {}\n    };\n    var result = this.axes.trigger(\""change\"", param);\n    inputEvent && axm.set(param.set()[\""destPos\""]);\n    return result;\n  };\n  /**\n   * This event is fired when animation starts.\n   * @ko 에니메이션이 시작할 때 발생한다.\n   * @name eg.Axes#animationStart\n   * @event\n   * @type {object} The object of data to be sent when the event is fired<ko>이벤트가 발생할 때 전달되는 데이터 객체</ko>\n   * @property {Object.<string, number>} depaPos The coordinates when animation starts<ko>애니메이션이 시작 되었을 때의 좌표 </ko>\n   * @property {Object.<string, number>} destPos The coordinates to move to. If you change this value, you can run the animation<ko>이동할 좌표. 이값을 변경하여 애니메이션을 동작시킬수 있다</ko>\n   * @property {Object.<string, number>} delta  The movement variation of coordinate <ko>좌표의 변화량</ko>\n   * @property {Number} duration Duration of the animation (unit: ms). If you change this value, you can control the animation duration time.<ko>애니메이션 진행 시간(단위: ms). 이값을 변경하여 애니메이션의 이동시간을 조절할 수 있다.</ko>\n   * @property {Object} input The instance of inputType where the event occurred. If the value is changed by animation, it returns 'null'.<ko>이벤트가 발생한 inputType 인스턴스. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.</ko>\n   * @property {Object} inputEvent The event object received from inputType <ko>inputType으로 부터 받은 이벤트 객체</ko>\n   * @property {setTo} setTo Specifies the animation coordinates to move after the event <ko>이벤트 이후 이동할 애니메이션 좌표를 지정한다</ko>\n   * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n   *\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * }).on(\""release\"", function(event) {\n   *   // event.depaPos\n   *   // event.destPos\n   *   // event.delta\n   *   // event.input\n   *   // event.inputEvent\n   *   // event.setTo\n   *   // event.isTrusted\n   *\n   *   // if you want to change the animation coordinates to move after the 'animationStart' event.\n   *   event.setTo({x: 10}, 2000);\n   * });\n   */\n\n\n  __proto.triggerAnimationStart = function (param) {\n    param.setTo = this.createUserControll(param.destPos, param.duration);\n    return this.axes.trigger(\""animationStart\"", param);\n  };\n  /**\n   * This event is fired when animation ends.\n   * @ko 에니메이션이 끝났을 때 발생한다.\n   * @name eg.Axes#animationEnd\n   * @event\n   * @type {object} The object of data to be sent when the event is fired<ko>이벤트가 발생할 때 전달되는 데이터 객체</ko>\n   * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n   *\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * }).on(\""animationEnd\"", function(event) {\n   *   // event.isTrusted\n   * });\n   */\n\n\n  __proto.triggerAnimationEnd = function (isTrusted) {\n    if (isTrusted === void 0) {\n      isTrusted = false;\n    }\n\n    this.axes.trigger(\""animationEnd\"", {\n      isTrusted: isTrusted\n    });\n  };\n  /**\n   * This event is fired when all actions have been completed.\n   * @ko 에니메이션이 끝났을 때 발생한다.\n   * @name eg.Axes#finish\n   * @event\n   * @type {object} The object of data to be sent when the event is fired<ko>이벤트가 발생할 때 전달되는 데이터 객체</ko>\n   * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n   *\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * }).on(\""finish\"", function(event) {\n   *   // event.isTrusted\n   * });\n   */\n\n\n  __proto.triggerFinish = function (isTrusted) {\n    if (isTrusted === void 0) {\n      isTrusted = false;\n    }\n\n    this.axes.trigger(\""finish\"", {\n      isTrusted: isTrusted\n    });\n  };\n\n  __proto.createUserControll = function (pos, duration) {\n    if (duration === void 0) {\n      duration = 0;\n    } // to controll\n\n\n    var userControl = {\n      destPos: __assign({}, pos),\n      duration: duration\n    };\n    return function (toPos, userDuration) {\n      toPos && (userControl.destPos = __assign({}, toPos));\n      userDuration !== undefined && (userControl.duration = userDuration);\n      return userControl;\n    };\n  };\n\n  __proto.setAnimationManager = function (am) {\n    this.am = am;\n  };\n\n  __proto.destroy = function () {\n    this.axes.off();\n  };\n\n  return EventManager;\n}();\n\nvar InterruptManager =\n/*#__PURE__*/\nfunction () {\n  function InterruptManager(options) {\n    this.options = options;\n    this._prevented = false; //  check whether the animation event was prevented\n  }\n\n  var __proto = InterruptManager.prototype;\n\n  __proto.isInterrupting = function () {\n    // when interruptable is 'true', return value is always 'true'.\n    return this.options.interruptable || this._prevented;\n  };\n\n  __proto.isInterrupted = function () {\n    return !this.options.interruptable && this._prevented;\n  };\n\n  __proto.setInterrupt = function (prevented) {\n    !this.options.interruptable && (this._prevented = prevented);\n  };\n\n  return InterruptManager;\n}();\n\nvar AxisManager =\n/*#__PURE__*/\nfunction () {\n  function AxisManager(axis, options) {\n    var _this = this;\n\n    this.axis = axis;\n    this.options = options;\n\n    this._complementOptions();\n\n    this._pos = Object.keys(this.axis).reduce(function (acc, v) {\n      acc[v] = _this.axis[v].range[0];\n      return acc;\n    }, {});\n  }\n  /**\n     * set up 'css' expression\n     * @private\n     */\n\n\n  var __proto = AxisManager.prototype;\n\n  __proto._complementOptions = function () {\n    var _this = this;\n\n    Object.keys(this.axis).forEach(function (axis) {\n      _this.axis[axis] = __assign({\n        range: [0, 100],\n        bounce: [0, 0],\n        circular: [false, false]\n      }, _this.axis[axis]);\n      [\""bounce\"", \""circular\""].forEach(function (v) {\n        var axisOption = _this.axis;\n        var key = axisOption[axis][v];\n\n        if (/string|number|boolean/.test(typeof key)) {\n          axisOption[axis][v] = [key, key];\n        }\n      });\n    });\n  };\n\n  __proto.getDelta = function (depaPos, destPos) {\n    var fullDepaPos = this.get(depaPos);\n    return map(this.get(destPos), function (v, k) {\n      return v - fullDepaPos[k];\n    });\n  };\n\n  __proto.get = function (axes) {\n    var _this = this;\n\n    if (axes && Array.isArray(axes)) {\n      return axes.reduce(function (acc, v) {\n        if (v && v in _this._pos) {\n          acc[v] = _this._pos[v];\n        }\n\n        return acc;\n      }, {});\n    } else {\n      return __assign({}, this._pos, axes || {});\n    }\n  };\n\n  __proto.moveTo = function (pos, isAccurate, depaPos) {\n    if (depaPos === void 0) {\n      depaPos = this._pos;\n    }\n\n    var delta = map(this._pos, function (v, key) {\n      return key in pos && key in depaPos ? pos[key] - depaPos[key] : 0;\n    });\n    this.set(this.map(pos, function (v, opt) {\n      return opt ? getCirculatedPos(v, opt.range, opt.circular, isAccurate) : 0;\n    }));\n    return {\n      pos: __assign({}, this._pos),\n      delta: delta\n    };\n  };\n\n  __proto.set = function (pos) {\n    for (var k in pos) {\n      if (k && k in this._pos) {\n        this._pos[k] = pos[k];\n      }\n    }\n  };\n\n  __proto.every = function (pos, callback) {\n    var axisOptions = this.axis;\n    return every(pos, function (value, key) {\n      return callback(value, axisOptions[key], key);\n    });\n  };\n\n  __proto.filter = function (pos, callback) {\n    var axisOptions = this.axis;\n    return filter(pos, function (value, key) {\n      return callback(value, axisOptions[key], key);\n    });\n  };\n\n  __proto.map = function (pos, callback) {\n    var axisOptions = this.axis;\n    return map(pos, function (value, key) {\n      return callback(value, axisOptions[key], key);\n    });\n  };\n\n  __proto.isOutside = function (axes) {\n    return !this.every(axes ? this.get(axes) : this._pos, function (v, opt) {\n      return !isOutside(v, opt.range);\n    });\n  };\n\n  return AxisManager;\n}();\n\nvar InputObserver =\n/*#__PURE__*/\nfunction () {\n  function InputObserver(_a) {\n    var options = _a.options,\n        itm = _a.itm,\n        em = _a.em,\n        axm = _a.axm,\n        am = _a.am;\n    this.isOutside = false;\n    this.moveDistance = null;\n    this.isStopped = false;\n    this.options = options;\n    this.itm = itm;\n    this.em = em;\n    this.axm = axm;\n    this.am = am;\n  } // when move pointer is held in outside\n\n\n  var __proto = InputObserver.prototype;\n\n  __proto.atOutside = function (pos) {\n    var _this = this;\n\n    if (this.isOutside) {\n      return this.axm.map(pos, function (v, opt) {\n        var tn = opt.range[0] - opt.bounce[0];\n        var tx = opt.range[1] + opt.bounce[1];\n        return v > tx ? tx : v < tn ? tn : v;\n      });\n    } else {\n      // when start pointer is held in inside\n      // get a initialization slope value to prevent smooth animation.\n      var initSlope_1 = this.am.easing(0.00001) / 0.00001;\n      return this.axm.map(pos, function (v, opt) {\n        var min = opt.range[0];\n        var max = opt.range[1];\n        var out = opt.bounce;\n        var circular = opt.circular;\n\n        if (circular && (circular[0] || circular[1])) {\n          return v;\n        } else if (v < min) {\n          // left\n          return min - _this.am.easing((min - v) / (out[0] * initSlope_1)) * out[0];\n        } else if (v > max) {\n          // right\n          return max + _this.am.easing((v - max) / (out[1] * initSlope_1)) * out[1];\n        }\n\n        return v;\n      });\n    }\n  };\n\n  __proto.get = function (input) {\n    return this.axm.get(input.axes);\n  };\n\n  __proto.hold = function (input, event) {\n    if (this.itm.isInterrupted() || !input.axes.length) {\n      return;\n    }\n\n    var changeOption = {\n      input: input,\n      event: event\n    };\n    this.isStopped = false;\n    this.itm.setInterrupt(true);\n    this.am.grab(input.axes, changeOption);\n    !this.moveDistance && this.em.triggerHold(this.axm.get(), changeOption);\n    this.isOutside = this.axm.isOutside(input.axes);\n    this.moveDistance = this.axm.get(input.axes);\n  };\n\n  __proto.change = function (input, event, offset) {\n    if (this.isStopped || !this.itm.isInterrupting() || this.axm.every(offset, function (v) {\n      return v === 0;\n    })) {\n      return;\n    }\n\n    var depaPos = this.moveDistance || this.axm.get(input.axes);\n    var destPos; // for outside logic\n\n    destPos = map(depaPos, function (v, k) {\n      return v + (offset[k] || 0);\n    });\n    this.moveDistance && (this.moveDistance = destPos); // from outside to inside\n\n    if (this.isOutside && this.axm.every(depaPos, function (v, opt) {\n      return !isOutside(v, opt.range);\n    })) {\n      this.isOutside = false;\n    }\n\n    depaPos = this.atOutside(depaPos);\n    destPos = this.atOutside(destPos);\n    var isCanceled = !this.em.triggerChange(destPos, false, depaPos, {\n      input: input,\n      event: event\n    }, true);\n\n    if (isCanceled) {\n      this.isStopped = true;\n      this.moveDistance = null;\n      this.am.finish(false);\n    }\n  };\n\n  __proto.release = function (input, event, offset, inputDuration) {\n    if (this.isStopped || !this.itm.isInterrupting() || !this.moveDistance) {\n      return;\n    }\n\n    var pos = this.axm.get(input.axes);\n    var depaPos = this.axm.get();\n    var destPos = this.axm.get(this.axm.map(offset, function (v, opt, k) {\n      if (opt.circular && (opt.circular[0] || opt.circular[1])) {\n        return pos[k] + v;\n      } else {\n        return getInsidePosition(pos[k] + v, opt.range, opt.circular, opt.bounce);\n      }\n    }));\n    var duration = this.am.getDuration(destPos, pos, inputDuration);\n\n    if (duration === 0) {\n      destPos = __assign({}, depaPos);\n    } // prepare params\n\n\n    var param = {\n      depaPos: depaPos,\n      destPos: destPos,\n      duration: duration,\n      delta: this.axm.getDelta(depaPos, destPos),\n      inputEvent: event,\n      input: input,\n      isTrusted: true\n    };\n    this.em.triggerRelease(param);\n    this.moveDistance = null; // to contol\n\n    var userWish = this.am.getUserControll(param);\n    var isEqual = equal(userWish.destPos, depaPos);\n    var changeOption = {\n      input: input,\n      event: event\n    };\n\n    if (isEqual || userWish.duration === 0) {\n      !isEqual && this.em.triggerChange(userWish.destPos, false, depaPos, changeOption, true);\n      this.itm.setInterrupt(false);\n\n      if (this.axm.isOutside()) {\n        this.am.restore(changeOption);\n      } else {\n        this.em.triggerFinish(true);\n      }\n    } else {\n      this.am.animateTo(userWish.destPos, userWish.duration, changeOption);\n    }\n  };\n\n  return InputObserver;\n}();\n\n/**\n * @typedef {Object} AxisOption The Axis information. The key of the axis specifies the name to use as the logical virtual coordinate system.\n * @ko 축 정보. 축의 키는 논리적인 가상 좌표계로 사용할 이름을 지정한다.\n * @property {Number[]} [range] The coordinate of range <ko>좌표 범위</ko>\n * @property {Number} [range.0=0] The coordinate of the minimum <ko>최소 좌표</ko>\n * @property {Number} [range.1=0] The coordinate of the maximum <ko>최대 좌표</ko>\n * @property {Number[]} [bounce] The size of bouncing area. The coordinates can exceed the coordinate area as much as the bouncing area based on user action. If the coordinates does not exceed the bouncing area when an element is dragged, the coordinates where bouncing effects are applied are retuned back into the coordinate area<ko>바운스 영역의 크기. 사용자의 동작에 따라 좌표가 좌표 영역을 넘어 바운스 영역의 크기만큼 더 이동할 수 있다. 사용자가 끌어다 놓는 동작을 했을 때 좌표가 바운스 영역에 있으면, 바운스 효과가 적용된 좌표가 다시 좌표 영역 안으로 들어온다</ko>\n * @property {Number} [bounce.0=0] The size of coordinate of the minimum area <ko>최소 좌표 바운스 영역의 크기</ko>\n * @property {Number} [bounce.1=0] The size of coordinate of the maximum area <ko>최대 좌표 바운스 영역의 크기</ko>\n * @property {Boolean[]} [circular] Indicates whether a circular element is available. If it is set to \""true\"" and an element is dragged outside the coordinate area, the element will appear on the other side.<ko>순환 여부. 'true'로 설정한 방향의 좌표 영역 밖으로 엘리먼트가 이동하면 반대 방향에서 엘리먼트가 나타난다</ko>\n * @property {Boolean} [circular.0=false] Indicates whether to circulate to the coordinate of the minimum <ko>최소 좌표 방향의 순환 여부</ko>\n * @property {Boolean} [circular.1=false] Indicates whether to circulate to the coordinate of the maximum <ko>최대 좌표 방향의 순환 여부</ko>\n**/\n\n/**\n * @typedef {Object} AxesOption The option object of the eg.Axes module\n * @ko eg.Axes 모듈의 옵션 객체\n * @property {Function} [easing=easing.easeOutCubic] The easing function to apply to an animation <ko>애니메이션에 적용할 easing 함수</ko>\n * @property {Number} [maximumDuration=Infinity] Maximum duration of the animation <ko>가속도에 의해 애니메이션이 동작할 때의 최대 좌표 이동 시간</ko>\n * @property {Number} [minimumDuration=0] Minimum duration of the animation <ko>가속도에 의해 애니메이션이 동작할 때의 최소 좌표 이동 시간</ko>\n * @property {Number} [deceleration=0.0006] Deceleration of the animation where acceleration is manually enabled by user. A higher value indicates shorter running time. <ko>사용자의 동작으로 가속도가 적용된 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아진다</ko>\n * @property {Boolean} [interruptable=true] Indicates whether an animation is interruptible.<br>- true: It can be paused or stopped by user action or the API.<br>- false: It cannot be paused or stopped by user action or the API while it is running.<ko>진행 중인 애니메이션 중지 가능 여부.<br>- true: 사용자의 동작이나 API로 애니메이션을 중지할 수 있다.<br>- false: 애니메이션이 진행 중일 때는 사용자의 동작이나 API가 적용되지 않는다</ko>\n**/\n\n/**\n * @class eg.Axes\n * @classdesc A module used to change the information of user action entered by various input devices such as touch screen or mouse into the logical virtual coordinates. You can easily create a UI that responds to user actions.\n * @ko 터치 입력 장치나 마우스와 같은 다양한 입력 장치를 통해 전달 받은 사용자의 동작을 논리적인 가상 좌표로 변경하는 모듈이다. 사용자 동작에 반응하는 UI를 손쉽게 만들수 있다.\n * @extends eg.Component\n *\n * @param {Object.<string, AxisOption>} axis Axis information managed by eg.Axes. The key of the axis specifies the name to use as the logical virtual coordinate system.  <ko>eg.Axes가 관리하는 축 정보. 축의 키는 논리적인 가상 좌표계로 사용할 이름을 지정한다.</ko>\n * @param {AxesOption} [options] The option object of the eg.Axes module<ko>eg.Axes 모듈의 옵션 객체</ko>\n * @param {Object.<string, number>} [startPos] The coordinates to be moved when creating an instance. not triggering change event.<ko>인스턴스 생성시 이동할 좌표, change 이벤트는 발생하지 않음.</ko>\n *\n * @support {\""ie\"": \""10+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.3+ (except 3.x)\""}\n * @example\n *\n * // 1. Initialize eg.Axes\n * const axes = new eg.Axes({\n *\tsomething1: {\n *\t\trange: [0, 150],\n *\t\tbounce: 50\n *\t},\n *\tsomething2: {\n *\t\trange: [0, 200],\n *\t\tbounce: 100\n *\t},\n *\tsomethingN: {\n *\t\trange: [1, 10],\n *\t}\n * }, {\n *  deceleration : 0.0024\n * });\n *\n * // 2. attach event handler\n * axes.on({\n *\t\""hold\"" : function(evt) {\n *\t},\n *\t\""release\"" : function(evt) {\n *\t},\n *\t\""animationStart\"" : function(evt) {\n *\t},\n *\t\""animationEnd\"" : function(evt) {\n *\t},\n *\t\""change\"" : function(evt) {\n *\t}\n * });\n *\n * // 3. Initialize inputTypes\n * const panInputArea = new eg.Axes.PanInput(\""#area\"", {\n *\tscale: [0.5, 1]\n * });\n * const panInputHmove = new eg.Axes.PanInput(\""#hmove\"");\n * const panInputVmove = new eg.Axes.PanInput(\""#vmove\"");\n * const pinchInputArea = new eg.Axes.PinchInput(\""#area\"", {\n *\tscale: 1.5\n * });\n *\n * // 4. Connect eg.Axes and InputTypes\n * // [PanInput] When the mouse or touchscreen is down and moved.\n * // Connect the 'something2' axis to the mouse or touchscreen x position and\n * // connect the 'somethingN' axis to the mouse or touchscreen y position.\n * axes.connect([\""something2\"", \""somethingN\""], panInputArea); // or axes.connect(\""something2 somethingN\"", panInputArea);\n *\n * // Connect only one 'something1' axis to the mouse or touchscreen x position.\n * axes.connect([\""something1\""], panInputHmove); // or axes.connect(\""something1\"", panInputHmove);\n *\n * // Connect only one 'something2' axis to the mouse or touchscreen y position.\n * axes.connect([\""\"", \""something2\""], panInputVmove); // or axes.connect(\"" something2\"", panInputVmove);\n *\n * // [PinchInput] Connect 'something2' axis when two pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * axes.connect(\""something2\"", pinchInputArea);\n */\n\nvar Axes =\n/*#__PURE__*/\nfunction (_super) {\n  __extends(Axes, _super);\n\n  function Axes(axis, options, startPos) {\n    if (axis === void 0) {\n      axis = {};\n    }\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _this = _super.call(this) || this;\n\n    _this.axis = axis;\n    _this._inputs = [];\n    _this.options = __assign({\n      easing: function easeOutCubic(x) {\n        return 1 - Math.pow(1 - x, 3);\n      },\n      interruptable: true,\n      maximumDuration: Infinity,\n      minimumDuration: 0,\n      deceleration: 0.0006\n    }, options);\n    _this.itm = new InterruptManager(_this.options);\n    _this.axm = new AxisManager(_this.axis, _this.options);\n    _this.em = new EventManager(_this);\n    _this.am = new AnimationManager(_this);\n    _this.io = new InputObserver(_this);\n\n    _this.em.setAnimationManager(_this.am);\n\n    startPos && _this.em.triggerChange(startPos);\n    return _this;\n  }\n  /**\n   * Connect the axis of eg.Axes to the inputType.\n   * @ko eg.Axes의 축과 inputType을 연결한다\n   * @method eg.Axes#connect\n   * @param {(String[]|String)} axes The name of the axis to associate with inputType <ko>inputType과 연결할 축의 이름</ko>\n   * @param {Object} inputType The inputType instance to associate with the axis of eg.Axes <ko>eg.Axes의 축과 연결할 inputType 인스턴스<ko>\n   * @return {eg.Axes} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""xOther\"": {\n   *      range: [-100, 100]\n   *   }\n   * });\n   *\n   * axes.connect(\""x\"", new eg.Axes.PanInput(\""#area1\""))\n   *    .connect(\""x xOther\"", new eg.Axes.PanInput(\""#area2\""))\n   *    .connect(\"" xOther\"", new eg.Axes.PanInput(\""#area3\""))\n   *    .connect([\""x\""], new eg.Axes.PanInput(\""#area4\""))\n   *    .connect([\""xOther\"", \""x\""], new eg.Axes.PanInput(\""#area5\""))\n   *    .connect([\""\"", \""xOther\""], new eg.Axes.PanInput(\""#area6\""));\n   */\n\n\n  var __proto = Axes.prototype;\n\n  __proto.connect = function (axes, inputType) {\n    var mapped;\n\n    if (typeof axes === \""string\"") {\n      mapped = axes.split(\"" \"");\n    } else {\n      mapped = axes.concat();\n    } // check same instance\n\n\n    if (~this._inputs.indexOf(inputType)) {\n      this.disconnect(inputType);\n    } // check same element in hammer type for share\n\n\n    if (\""hammer\"" in inputType) {\n      var targets = this._inputs.filter(function (v) {\n        return v.hammer && v.element === inputType.element;\n      });\n\n      if (targets.length) {\n        inputType.hammer = targets[0].hammer;\n      }\n    }\n\n    inputType.mapAxes(mapped);\n    inputType.connect(this.io);\n\n    this._inputs.push(inputType);\n\n    return this;\n  };\n  /**\n   * Disconnect the axis of eg.Axes from the inputType.\n   * @ko eg.Axes의 축과 inputType의 연결을 끊는다.\n   * @method eg.Axes#disconnect\n   * @param {Object} [inputType] An inputType instance associated with the axis of eg.Axes <ko>eg.Axes의 축과 연결한 inputType 인스턴스<ko>\n   * @return {eg.Axes} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""xOther\"": {\n   *      range: [-100, 100]\n   *   }\n   * });\n   *\n   * const input1 = new eg.Axes.PanInput(\""#area1\"");\n   * const input2 = new eg.Axes.PanInput(\""#area2\"");\n   * const input3 = new eg.Axes.PanInput(\""#area3\"");\n   *\n   * axes.connect(\""x\"", input1);\n   *    .connect(\""x xOther\"", input2)\n   *    .connect([\""xOther\"", \""x\""], input3);\n   *\n   * axes.disconnect(input1); // disconnects input1\n   * axes.disconnect(); // disconnects all of them\n   */\n\n\n  __proto.disconnect = function (inputType) {\n    if (inputType) {\n      var index = this._inputs.indexOf(inputType);\n\n      if (index >= 0) {\n        this._inputs[index].disconnect();\n\n        this._inputs.splice(index, 1);\n      }\n    } else {\n      this._inputs.forEach(function (v) {\n        return v.disconnect();\n      });\n\n      this._inputs = [];\n    }\n\n    return this;\n  };\n  /**\n   * Returns the current position of the coordinates.\n   * @ko 좌표의 현재 위치를 반환한다\n   * @method eg.Axes#get\n   * @param {Object} [axes] The names of the axis <ko>축 이름들</ko>\n   * @return {Object.<string, number>} Axis coordinate information <ko>축 좌표 정보</ko>\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""xOther\"": {\n   *      range: [-100, 100]\n   *   },\n   * \t \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * });\n   *\n   * axes.get(); // {\""x\"": 0, \""xOther\"": -100, \""zoom\"": 50}\n   * axes.get([\""x\"", \""zoom\""]); // {\""x\"": 0, \""zoom\"": 50}\n   */\n\n\n  __proto.get = function (axes) {\n    return this.axm.get(axes);\n  };\n  /**\n   * Moves an axis to specific coordinates.\n   * @ko 좌표를 이동한다.\n   * @method eg.Axes#setTo\n   * @param {Object.<string, number>} pos The coordinate to move to <ko>이동할 좌표</ko>\n   * @param {Number} [duration=0] Duration of the animation (unit: ms) <ko>애니메이션 진행 시간(단위: ms)</ko>\n   * @return {eg.Axes} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""xOther\"": {\n   *      range: [-100, 100]\n   *   },\n   * \t \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * });\n   *\n   * axes.setTo({\""x\"": 30, \""zoom\"": 60});\n   * axes.get(); // {\""x\"": 30, \""xOther\"": -100, \""zoom\"": 60}\n   *\n   * axes.setTo({\""x\"": 100, \""xOther\"": 60}, 1000); // animatation\n   *\n   * // after 1000 ms\n   * axes.get(); // {\""x\"": 100, \""xOther\"": 60, \""zoom\"": 60}\n   */\n\n\n  __proto.setTo = function (pos, duration) {\n    if (duration === void 0) {\n      duration = 0;\n    }\n\n    this.am.setTo(pos, duration);\n    return this;\n  };\n  /**\n   * Moves an axis from the current coordinates to specific coordinates.\n   * @ko 현재 좌표를 기준으로 좌표를 이동한다.\n   * @method eg.Axes#setBy\n   * @param {Object.<string, number>} pos The coordinate to move to <ko>이동할 좌표</ko>\n   * @param {Number} [duration=0] Duration of the animation (unit: ms) <ko>애니메이션 진행 시간(단위: ms)</ko>\n   * @return {eg.Axes} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""xOther\"": {\n   *      range: [-100, 100]\n   *   },\n   * \t \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * });\n   *\n   * axes.setBy({\""x\"": 30, \""zoom\"": 10});\n   * axes.get(); // {\""x\"": 30, \""xOther\"": -100, \""zoom\"": 60}\n   *\n   * axes.setBy({\""x\"": 70, \""xOther\"": 60}, 1000); // animatation\n   *\n   * // after 1000 ms\n   * axes.get(); // {\""x\"": 100, \""xOther\"": -40, \""zoom\"": 60}\n   */\n\n\n  __proto.setBy = function (pos, duration) {\n    if (duration === void 0) {\n      duration = 0;\n    }\n\n    this.am.setBy(pos, duration);\n    return this;\n  };\n  /**\n   * Returns whether there is a coordinate in the bounce area of ​​the target axis.\n   * @ko 대상 축 중 bounce영역에 좌표가 존재하는지를 반환한다\n   * @method eg.Axes#isBounceArea\n   * @param {Object} [axes] The names of the axis <ko>축 이름들</ko>\n   * @return {Boolen} Whether the bounce area exists. <ko>bounce 영역 존재 여부</ko>\n   * @example\n   * const axes = new eg.Axes({\n   *   \""x\"": {\n   *      range: [0, 100]\n   *   },\n   *   \""xOther\"": {\n   *      range: [-100, 100]\n   *   },\n   * \t \""zoom\"": {\n   *      range: [50, 30]\n   *   }\n   * });\n   *\n   * axes.isBounceArea([\""x\""]);\n   * axes.isBounceArea([\""x\"", \""zoom\""]);\n   * axes.isBounceArea();\n   */\n\n\n  __proto.isBounceArea = function (axes) {\n    return this.axm.isOutside(axes);\n  };\n  /**\n  * Destroys properties, and events used in a module and disconnect all connections to inputTypes.\n  * @ko 모듈에 사용한 속성, 이벤트를 해제한다. 모든 inputType과의 연결을 끊는다.\n  * @method eg.Axes#destroy\n  */\n\n\n  __proto.destroy = function () {\n    this.disconnect();\n    this.em.destroy();\n  };\n  /**\n   * Version info string\n   * @ko 버전정보 문자열\n   * @name VERSION\n   * @static\n   * @type {String}\n   * @example\n   * eg.Axes.VERSION;  // ex) 3.3.3\n   * @memberof eg.Axes\n   */\n\n\n  Axes.VERSION = \""2.5.13\"";\n  /**\n   * @name eg.Axes.TRANSFORM\n   * @desc Returns the transform attribute with CSS vendor prefixes.\n   * @ko CSS vendor prefixes를 붙인 transform 속성을 반환한다.\n   *\n   * @constant\n   * @type {String}\n   * @example\n   * eg.Axes.TRANSFORM; // \""transform\"" or \""webkitTransform\""\n   */\n\n  Axes.TRANSFORM = TRANSFORM;\n  /**\n   * @name eg.Axes.DIRECTION_NONE\n   * @constant\n   * @type {Number}\n   */\n\n  Axes.DIRECTION_NONE = DIRECTION_NONE;\n  /**\n   * @name eg.Axes.DIRECTION_LEFT\n   * @constant\n   * @type {Number}\n  */\n\n  Axes.DIRECTION_LEFT = DIRECTION_LEFT;\n  /**\n   * @name eg.Axes.DIRECTION_RIGHT\n   * @constant\n   * @type {Number}\n  */\n\n  Axes.DIRECTION_RIGHT = DIRECTION_RIGHT;\n  /**\n   * @name eg.Axes.DIRECTION_UP\n   * @constant\n   * @type {Number}\n  */\n\n  Axes.DIRECTION_UP = DIRECTION_UP;\n  /**\n   * @name eg.Axes.DIRECTION_DOWN\n   * @constant\n   * @type {Number}\n  */\n\n  Axes.DIRECTION_DOWN = DIRECTION_DOWN;\n  /**\n   * @name eg.Axes.DIRECTION_HORIZONTAL\n   * @constant\n   * @type {Number}\n  */\n\n  Axes.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n  /**\n   * @name eg.Axes.DIRECTION_VERTICAL\n   * @constant\n   * @type {Number}\n  */\n\n  Axes.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n  /**\n   * @name eg.Axes.DIRECTION_ALL\n   * @constant\n   * @type {Number}\n  */\n\n  Axes.DIRECTION_ALL = DIRECTION_ALL;\n  return Axes;\n}(Component);\n\nvar SUPPORT_POINTER_EVENTS = \""PointerEvent\"" in win || \""MSPointerEvent\"" in win;\nvar SUPPORT_TOUCH = \""ontouchstart\"" in win;\nvar UNIQUEKEY = \""_EGJS_AXES_INPUTTYPE_\"";\nfunction toAxis(source, offset) {\n  return offset.reduce(function (acc, v, i) {\n    if (source[i]) {\n      acc[source[i]] = v;\n    }\n\n    return acc;\n  }, {});\n}\nfunction createHammer(element, options) {\n  try {\n    // create Hammer\n    return new Manager(element, __assign({}, options));\n  } catch (e) {\n    return null;\n  }\n}\nfunction convertInputType(inputType) {\n  if (inputType === void 0) {\n    inputType = [];\n  }\n\n  var hasTouch = false;\n  var hasMouse = false;\n  var hasPointer = false;\n  inputType.forEach(function (v) {\n    switch (v) {\n      case \""mouse\"":\n        hasMouse = true;\n        break;\n\n      case \""touch\"":\n        hasTouch = SUPPORT_TOUCH;\n        break;\n\n      case \""pointer\"":\n        hasPointer = SUPPORT_POINTER_EVENTS;\n      // no default\n    }\n  });\n\n  if (hasPointer) {\n    return PointerEventInput;\n  } else if (hasTouch && hasMouse) {\n    return TouchMouseInput;\n  } else if (hasTouch) {\n    return TouchInput;\n  } else if (hasMouse) {\n    return MouseInput;\n  }\n\n  return null;\n}\n\nfunction getDirectionByAngle(angle, thresholdAngle) {\n  if (thresholdAngle < 0 || thresholdAngle > 90) {\n    return DIRECTION_NONE;\n  }\n\n  var toAngle = Math.abs(angle);\n  return toAngle > thresholdAngle && toAngle < 180 - thresholdAngle ? DIRECTION_VERTICAL : DIRECTION_HORIZONTAL;\n}\nfunction getNextOffset(speeds, deceleration) {\n  var normalSpeed = Math.sqrt(speeds[0] * speeds[0] + speeds[1] * speeds[1]);\n  var duration = Math.abs(normalSpeed / -deceleration);\n  return [speeds[0] / 2 * duration, speeds[1] / 2 * duration];\n}\nfunction useDirection(checkType, direction, userDirection) {\n  if (userDirection) {\n    return !!(direction === DIRECTION_ALL || direction & checkType && userDirection & checkType);\n  } else {\n    return !!(direction & checkType);\n  }\n}\n/**\n * @typedef {Object} PanInputOption The option object of the eg.Axes.PanInput module.\n * @ko eg.Axes.PanInput 모듈의 옵션 객체\n * @property {String[]} [inputType=[\""touch\"",\""mouse\"", \""pointer\""]] Types of input devices.<br>- touch: Touch screen<br>- mouse: Mouse <ko>입력 장치 종류.<br>- touch: 터치 입력 장치<br>- mouse: 마우스</ko>\n * @property {Number[]} [scale] Coordinate scale that a user can move<ko>사용자의 동작으로 이동하는 좌표의 배율</ko>\n * @property {Number} [scale.0=1] horizontal axis scale <ko>수평축 배율</ko>\n * @property {Number} [scale.1=1] vertical axis scale <ko>수직축 배율</ko>\n * @property {Number} [thresholdAngle=45] The threshold value that determines whether user action is horizontal or vertical (0~90) <ko>사용자의 동작이 가로 방향인지 세로 방향인지 판단하는 기준 각도(0~90)</ko>\n * @property {Number} [threshold=0] Minimal pan distance required before recognizing <ko>사용자의 Pan 동작을 인식하기 위해산 최소한의 거리</ko>\n * @property {Object} [hammerManagerOptions={cssProps: {userSelect: \""none\"",touchSelect: \""none\"",touchCallout: \""none\"",userDrag: \""none\""}] Options of Hammer.Manager <ko>Hammer.Manager의 옵션</ko>\n**/\n\n/**\n * @class eg.Axes.PanInput\n * @classdesc A module that passes the amount of change to eg.Axes when the mouse or touchscreen is down and moved. use less than two axes.\n * @ko 마우스나 터치 스크린을 누르고 움직일때의 변화량을 eg.Axes에 전달하는 모듈. 두개 이하의 축을 사용한다.\n *\n * @example\n * const pan = new eg.Axes.PanInput(\""#area\"", {\n * \t\tinputType: [\""touch\""],\n * \t\tscale: [1, 1.3],\n * });\n *\n * // Connect the 'something2' axis to the mouse or touchscreen x position when the mouse or touchscreen is down and moved.\n * // Connect the 'somethingN' axis to the mouse or touchscreen y position when the mouse or touchscreen is down and moved.\n * axes.connect([\""something2\"", \""somethingN\""], pan); // or axes.connect(\""something2 somethingN\"", pan);\n *\n * // Connect only one 'something1' axis to the mouse or touchscreen x position when the mouse or touchscreen is down and moved.\n * axes.connect([\""something1\""], pan); // or axes.connect(\""something1\"", pan);\n *\n * // Connect only one 'something2' axis to the mouse or touchscreen y position when the mouse or touchscreen is down and moved.\n * axes.connect([\""\"", \""something2\""], pan); // or axes.connect(\"" something2\"", pan);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.PanInput module <ko>eg.Axes.PanInput 모듈을 사용할 엘리먼트</ko>\n * @param {PanInputOption} [options] The option object of the eg.Axes.PanInput module<ko>eg.Axes.PanInput 모듈의 옵션 객체</ko>\n */\n\nvar PanInput =\n/*#__PURE__*/\nfunction () {\n  function PanInput(el, options) {\n    this.axes = [];\n    this.hammer = null;\n    this.element = null;\n    this.panRecognizer = null;\n    /**\n     * Hammer helps you add support for touch gestures to your page\n     *\n     * @external Hammer\n     * @see {@link http://hammerjs.github.io|Hammer.JS}\n     * @see {@link http://hammerjs.github.io/jsdoc/Hammer.html|Hammer.JS API documents}\n     * @see Hammer.JS applies specific CSS properties by {@link http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html|default} when creating an instance. The eg.Axes module removes all default CSS properties provided by Hammer.JS\n     */\n\n    if (typeof Manager === \""undefined\"") {\n      throw new Error(\""The Hammerjs must be loaded before eg.Axes.PanInput.\\nhttp://hammerjs.github.io/\"");\n    }\n\n    this.element = $(el);\n    this.options = __assign({\n      inputType: [\""touch\"", \""mouse\"", \""pointer\""],\n      scale: [1, 1],\n      thresholdAngle: 45,\n      threshold: 0,\n      hammerManagerOptions: {\n        // css properties were removed due to usablility issue\n        // http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html\n        cssProps: {\n          userSelect: \""none\"",\n          touchSelect: \""none\"",\n          touchCallout: \""none\"",\n          userDrag: \""none\""\n        }\n      }\n    }, options);\n    this.onHammerInput = this.onHammerInput.bind(this);\n    this.onPanmove = this.onPanmove.bind(this);\n    this.onPanend = this.onPanend.bind(this);\n  }\n\n  var __proto = PanInput.prototype;\n\n  __proto.mapAxes = function (axes) {\n    var useHorizontal = !!axes[0];\n    var useVertical = !!axes[1];\n\n    if (useHorizontal && useVertical) {\n      this._direction = DIRECTION_ALL;\n    } else if (useHorizontal) {\n      this._direction = DIRECTION_HORIZONTAL;\n    } else if (useVertical) {\n      this._direction = DIRECTION_VERTICAL;\n    } else {\n      this._direction = DIRECTION_NONE;\n    }\n\n    this.axes = axes;\n  };\n\n  __proto.connect = function (observer) {\n    var hammerOption = {\n      direction: this._direction,\n      threshold: this.options.threshold\n    };\n\n    if (this.hammer) {\n      // for sharing hammer instance.\n      // hammer remove previous PanRecognizer.\n      this.removeRecognizer();\n      this.dettachEvent();\n    } else {\n      var keyValue = this.element[UNIQUEKEY];\n\n      if (!keyValue) {\n        keyValue = String(Math.round(Math.random() * new Date().getTime()));\n      }\n\n      var inputClass = convertInputType(this.options.inputType);\n\n      if (!inputClass) {\n        throw new Error(\""Wrong inputType parameter!\"");\n      }\n\n      this.hammer = createHammer(this.element, __assign({\n        inputClass: inputClass\n      }, this.options.hammerManagerOptions));\n      this.element[UNIQUEKEY] = keyValue;\n    }\n\n    this.panRecognizer = new Pan(hammerOption);\n    this.hammer.add(this.panRecognizer);\n    this.attachEvent(observer);\n    return this;\n  };\n\n  __proto.disconnect = function () {\n    this.removeRecognizer();\n\n    if (this.hammer) {\n      this.dettachEvent();\n    }\n\n    this._direction = DIRECTION_NONE;\n    return this;\n  };\n  /**\n  * Destroys elements, properties, and events used in a module.\n  * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n  * @method eg.Axes.PanInput#destroy\n  */\n\n\n  __proto.destroy = function () {\n    this.disconnect();\n\n    if (this.hammer && this.hammer.recognizers.length === 0) {\n      this.hammer.destroy();\n    }\n\n    delete this.element[UNIQUEKEY];\n    this.element = null;\n    this.hammer = null;\n  };\n  /**\n   * Enables input devices\n   * @ko 입력 장치를 사용할 수 있게 한다\n   * @method eg.Axes.PanInput#enable\n   * @return {eg.Axes.PanInput} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   */\n\n\n  __proto.enable = function () {\n    this.hammer && (this.hammer.get(\""pan\"").options.enable = true);\n    return this;\n  };\n  /**\n   * Disables input devices\n   * @ko 입력 장치를 사용할 수 없게 한다.\n   * @method eg.Axes.PanInput#disable\n   * @return {eg.Axes.PanInput} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   */\n\n\n  __proto.disable = function () {\n    this.hammer && (this.hammer.get(\""pan\"").options.enable = false);\n    return this;\n  };\n  /**\n   * Returns whether to use an input device\n   * @ko 입력 장치를 사용 여부를 반환한다.\n   * @method eg.Axes.PanInput#isEnable\n   * @return {Boolean} Whether to use an input device <ko>입력장치 사용여부</ko>\n   */\n\n\n  __proto.isEnable = function () {\n    return !!(this.hammer && this.hammer.get(\""pan\"").options.enable);\n  };\n\n  __proto.removeRecognizer = function () {\n    if (this.hammer && this.panRecognizer) {\n      this.hammer.remove(this.panRecognizer);\n      this.panRecognizer = null;\n    }\n  };\n\n  __proto.onHammerInput = function (event) {\n    if (this.isEnable()) {\n      if (event.isFirst) {\n        this.observer.hold(this, event);\n      } else if (event.isFinal) {\n        this.onPanend(event);\n      }\n    }\n  };\n\n  __proto.onPanmove = function (event) {\n    var userDirection = getDirectionByAngle(event.angle, this.options.thresholdAngle); // not support offset properties in Hammerjs - start\n\n    var prevInput = this.hammer.session.prevInput;\n    /* eslint-disable no-param-reassign */\n\n    if (prevInput) {\n      event.offsetX = event.deltaX - prevInput.deltaX;\n      event.offsetY = event.deltaY - prevInput.deltaY;\n    } else {\n      event.offsetX = 0;\n      event.offsetY = 0;\n    }\n\n    var offset = this.getOffset([event.offsetX, event.offsetY], [useDirection(DIRECTION_HORIZONTAL, this._direction, userDirection), useDirection(DIRECTION_VERTICAL, this._direction, userDirection)]);\n    var prevent = offset.some(function (v) {\n      return v !== 0;\n    });\n\n    if (prevent) {\n      event.srcEvent.preventDefault();\n      event.srcEvent.stopPropagation();\n    }\n\n    event.preventSystemEvent = prevent;\n    prevent && this.observer.change(this, event, toAxis(this.axes, offset));\n  };\n\n  __proto.onPanend = function (event) {\n    var offset = this.getOffset([Math.abs(event.velocityX) * (event.deltaX < 0 ? -1 : 1), Math.abs(event.velocityY) * (event.deltaY < 0 ? -1 : 1)], [useDirection(DIRECTION_HORIZONTAL, this._direction), useDirection(DIRECTION_VERTICAL, this._direction)]);\n    offset = getNextOffset(offset, this.observer.options.deceleration);\n    this.observer.release(this, event, toAxis(this.axes, offset));\n  };\n\n  __proto.attachEvent = function (observer) {\n    this.observer = observer;\n    this.hammer.on(\""hammer.input\"", this.onHammerInput).on(\""panstart panmove\"", this.onPanmove);\n  };\n\n  __proto.dettachEvent = function () {\n    this.hammer.off(\""hammer.input\"", this.onHammerInput).off(\""panstart panmove\"", this.onPanmove);\n    this.observer = null;\n  };\n\n  __proto.getOffset = function (properties, direction) {\n    var offset = [0, 0];\n    var scale = this.options.scale;\n\n    if (direction[0]) {\n      offset[0] = properties[0] * scale[0];\n    }\n\n    if (direction[1]) {\n      offset[1] = properties[1] * scale[1];\n    }\n\n    return offset;\n  };\n\n  return PanInput;\n}();\n\nvar RotatePanInput =\n/*#__PURE__*/\nfunction (_super) {\n  __extends(RotatePanInput, _super);\n\n  function RotatePanInput(el, options) {\n    var _this = _super.call(this, el, options) || this;\n\n    _this.prevQuadrant = null;\n    _this.lastDiff = 0;\n    return _this;\n  }\n\n  var __proto = RotatePanInput.prototype;\n\n  __proto.mapAxes = function (axes) {\n    this._direction = Axes.DIRECTION_ALL;\n    this.axes = axes;\n  };\n\n  __proto.onHammerInput = function (event) {\n    if (this.isEnable()) {\n      if (event.isFirst) {\n        this.observer.hold(this, event);\n        this.onPanstart(event);\n      } else if (event.isFinal) {\n        this.onPanend(event);\n      }\n    }\n  };\n\n  __proto.onPanstart = function (event) {\n    var rect = this.element.getBoundingClientRect();\n    /**\n     * Responsive\n     */\n    // TODO: how to do if element is ellipse not circle.\n\n    this.coefficientForDistanceToAngle = 360 / (rect.width * Math.PI); // from 2*pi*r * x / 360\n    // TODO: provide a way to set origin like https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin\n\n    this.rotateOrigin = [rect.left + (rect.width - 1) / 2, rect.top + (rect.height - 1) / 2]; // init angle.\n\n    this.prevAngle = null;\n    this.triggerChange(event);\n  };\n\n  __proto.onPanmove = function (event) {\n    this.triggerChange(event);\n  };\n\n  __proto.onPanend = function (event) {\n    this.triggerChange(event);\n    this.triggerAnimation(event);\n  };\n\n  __proto.triggerChange = function (event) {\n    var angle = this.getAngle(event.center.x, event.center.y);\n    var quadrant = this.getQuadrant(event.center.x, event.center.y);\n    var diff = this.getDifference(this.prevAngle, angle, this.prevQuadrant, quadrant);\n    this.prevAngle = angle;\n    this.prevQuadrant = quadrant;\n\n    if (diff === 0) {\n      return;\n    }\n\n    this.lastDiff = diff;\n    this.observer.change(this, event, toAxis(this.axes, [-diff])); // minus for clockwise\n  };\n\n  __proto.triggerAnimation = function (event) {\n    var vx = event.velocityX;\n    var vy = event.velocityY;\n    var velocity = Math.sqrt(vx * vx + vy * vy) * (this.lastDiff > 0 ? -1 : 1); // clockwise\n\n    var duration = Math.abs(velocity / -this.observer.options.deceleration);\n    var distance = velocity / 2 * duration;\n    this.observer.release(this, event, toAxis(this.axes, [distance * this.coefficientForDistanceToAngle]));\n  };\n\n  __proto.getDifference = function (prevAngle, angle, prevQuadrant, quadrant) {\n    var diff;\n\n    if (prevAngle === null) {\n      diff = 0;\n    } else if (prevQuadrant === 1 && quadrant === 4) {\n      diff = -prevAngle - (360 - angle);\n    } else if (prevQuadrant === 4 && quadrant === 1) {\n      diff = 360 - prevAngle + angle;\n    } else {\n      diff = angle - prevAngle;\n    }\n\n    return diff;\n  };\n\n  __proto.getPosFromOrigin = function (posX, posY) {\n    return {\n      x: posX - this.rotateOrigin[0],\n      y: this.rotateOrigin[1] - posY\n    };\n  };\n\n  __proto.getAngle = function (posX, posY) {\n    var _a = this.getPosFromOrigin(posX, posY),\n        x = _a.x,\n        y = _a.y;\n\n    var angle = Math.atan2(y, x) * 180 / Math.PI; // console.log(angle, x, y);\n\n    return angle < 0 ? 360 + angle : angle;\n  };\n  /**\n   * Quadrant\n   *       y(+)\n   *       |\n   *   2   |    1\n   * --------------->x(+)\n   *   3   |    4\n   *       |\n   */\n\n\n  __proto.getQuadrant = function (posX, posY) {\n    var _a = this.getPosFromOrigin(posX, posY),\n        x = _a.x,\n        y = _a.y;\n\n    var q = 0;\n\n    if (x >= 0 && y >= 0) {\n      q = 1;\n    } else if (x < 0 && y >= 0) {\n      q = 2;\n    } else if (x < 0 && y < 0) {\n      q = 3;\n    } else if (x >= 0 && y < 0) {\n      q = 4;\n    }\n\n    return q;\n  };\n\n  return RotatePanInput;\n}(PanInput);\n\n/**\n * @typedef {Object} PinchInputOption The option object of the eg.Axes.PinchInput module\n * @ko eg.Axes.PinchInput 모듈의 옵션 객체\n * @property {Number} [scale=1] Coordinate scale that a user can move<ko>사용자의 동작으로 이동하는 좌표의 배율</ko>\n * @property {Number} [threshold=0] Minimal scale before recognizing <ko>사용자의 Pinch 동작을 인식하기 위해산 최소한의 배율</ko>\n * @property {Object} [hammerManagerOptions={cssProps: {userSelect: \""none\"",touchSelect: \""none\"",touchCallout: \""none\"",userDrag: \""none\""}] Options of Hammer.Manager <ko>Hammer.Manager의 옵션</ko>\n**/\n\n/**\n * @class eg.Axes.PinchInput\n * @classdesc A module that passes the amount of change to eg.Axes when two pointers are moving toward (zoom-in) or away from each other (zoom-out). use one axis.\n * @ko 2개의 pointer를 이용하여 zoom-in하거나 zoom-out 하는 동작의 변화량을 eg.Axes에 전달하는 모듈. 한 개 의 축을 사용한다.\n * @example\n * const pinch = new eg.Axes.PinchInput(\""#area\"", {\n * \t\tscale: 1\n * });\n *\n * // Connect 'something' axis when two pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * axes.connect(\""something\"", pinch);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.PinchInput module <ko>eg.Axes.PinchInput 모듈을 사용할 엘리먼트</ko>\n * @param {PinchInputOption} [options] The option object of the eg.Axes.PinchInput module<ko>eg.Axes.PinchInput 모듈의 옵션 객체</ko>\n */\n\nvar PinchInput =\n/*#__PURE__*/\nfunction () {\n  function PinchInput(el, options) {\n    this.axes = [];\n    this.hammer = null;\n    this.element = null;\n    this._base = null;\n    this._prev = null;\n    this.pinchRecognizer = null;\n    /**\n     * Hammer helps you add support for touch gestures to your page\n     *\n     * @external Hammer\n     * @see {@link http://hammerjs.github.io|Hammer.JS}\n     * @see {@link http://hammerjs.github.io/jsdoc/Hammer.html|Hammer.JS API documents}\n     * @see Hammer.JS applies specific CSS properties by {@link http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html|default} when creating an instance. The eg.Axes module removes all default CSS properties provided by Hammer.JS\n     */\n\n    if (typeof Manager === \""undefined\"") {\n      throw new Error(\""The Hammerjs must be loaded before eg.Axes.PinchInput.\\nhttp://hammerjs.github.io/\"");\n    }\n\n    this.element = $(el);\n    this.options = __assign({\n      scale: 1,\n      threshold: 0,\n      inputType: [\""touch\"", \""pointer\""],\n      hammerManagerOptions: {\n        // css properties were removed due to usablility issue\n        // http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html\n        cssProps: {\n          userSelect: \""none\"",\n          touchSelect: \""none\"",\n          touchCallout: \""none\"",\n          userDrag: \""none\""\n        }\n      }\n    }, options);\n    this.onPinchStart = this.onPinchStart.bind(this);\n    this.onPinchMove = this.onPinchMove.bind(this);\n    this.onPinchEnd = this.onPinchEnd.bind(this);\n  }\n\n  var __proto = PinchInput.prototype;\n\n  __proto.mapAxes = function (axes) {\n    this.axes = axes;\n  };\n\n  __proto.connect = function (observer) {\n    var hammerOption = {\n      threshold: this.options.threshold\n    };\n\n    if (this.hammer) {\n      // for sharing hammer instance.\n      // hammer remove previous PinchRecognizer.\n      this.removeRecognizer();\n      this.dettachEvent();\n    } else {\n      var keyValue = this.element[UNIQUEKEY];\n\n      if (!keyValue) {\n        keyValue = String(Math.round(Math.random() * new Date().getTime()));\n      }\n\n      var inputClass = convertInputType(this.options.inputType);\n\n      if (!inputClass) {\n        throw new Error(\""Wrong inputType parameter!\"");\n      }\n\n      this.hammer = createHammer(this.element, __assign({\n        inputClass: inputClass\n      }, this.options.hammerManagerOptions));\n      this.element[UNIQUEKEY] = keyValue;\n    }\n\n    this.pinchRecognizer = new Pinch(hammerOption);\n    this.hammer.add(this.pinchRecognizer);\n    this.attachEvent(observer);\n    return this;\n  };\n\n  __proto.disconnect = function () {\n    this.removeRecognizer();\n\n    if (this.hammer) {\n      this.hammer.remove(this.pinchRecognizer);\n      this.pinchRecognizer = null;\n      this.dettachEvent();\n    }\n\n    return this;\n  };\n  /**\n  * Destroys elements, properties, and events used in a module.\n  * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n  * @method eg.Axes.PinchInput#destroy\n  */\n\n\n  __proto.destroy = function () {\n    this.disconnect();\n\n    if (this.hammer && this.hammer.recognizers.length === 0) {\n      this.hammer.destroy();\n    }\n\n    delete this.element[UNIQUEKEY];\n    this.element = null;\n    this.hammer = null;\n  };\n\n  __proto.removeRecognizer = function () {\n    if (this.hammer && this.pinchRecognizer) {\n      this.hammer.remove(this.pinchRecognizer);\n      this.pinchRecognizer = null;\n    }\n  };\n\n  __proto.onPinchStart = function (event) {\n    this._base = this.observer.get(this)[this.axes[0]];\n    var offset = this.getOffset(event.scale);\n    this.observer.hold(this, event);\n    this.observer.change(this, event, toAxis(this.axes, [offset]));\n    this._prev = event.scale;\n  };\n\n  __proto.onPinchMove = function (event) {\n    var offset = this.getOffset(event.scale, this._prev);\n    this.observer.change(this, event, toAxis(this.axes, [offset]));\n    this._prev = event.scale;\n  };\n\n  __proto.onPinchEnd = function (event) {\n    var offset = this.getOffset(event.scale, this._prev);\n    this.observer.change(this, event, toAxis(this.axes, [offset]));\n    this.observer.release(this, event, toAxis(this.axes, [0]), 0);\n    this._base = null;\n    this._prev = null;\n  };\n\n  __proto.getOffset = function (pinchScale, prev) {\n    if (prev === void 0) {\n      prev = 1;\n    }\n\n    return this._base * (pinchScale - prev) * this.options.scale;\n  };\n\n  __proto.attachEvent = function (observer) {\n    this.observer = observer;\n    this.hammer.on(\""pinchstart\"", this.onPinchStart).on(\""pinchmove\"", this.onPinchMove).on(\""pinchend\"", this.onPinchEnd);\n  };\n\n  __proto.dettachEvent = function () {\n    this.hammer.off(\""pinchstart\"", this.onPinchStart).off(\""pinchmove\"", this.onPinchMove).off(\""pinchend\"", this.onPinchEnd);\n    this.observer = null;\n    this._prev = null;\n  };\n  /**\n   * Enables input devices\n   * @ko 입력 장치를 사용할 수 있게 한다\n   * @method eg.Axes.PinchInput#enable\n   * @return {eg.Axes.PinchInput} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   */\n\n\n  __proto.enable = function () {\n    this.hammer && (this.hammer.get(\""pinch\"").options.enable = true);\n    return this;\n  };\n  /**\n   * Disables input devices\n   * @ko 입력 장치를 사용할 수 없게 한다.\n   * @method eg.Axes.PinchInput#disable\n   * @return {eg.Axes.PinchInput} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   */\n\n\n  __proto.disable = function () {\n    this.hammer && (this.hammer.get(\""pinch\"").options.enable = false);\n    return this;\n  };\n  /**\n   * Returns whether to use an input device\n   * @ko 입력 장치를 사용 여부를 반환한다.\n   * @method eg.Axes.PinchInput#isEnable\n   * @return {Boolean} Whether to use an input device <ko>입력장치 사용여부</ko>\n   */\n\n\n  __proto.isEnable = function () {\n    return !!(this.hammer && this.hammer.get(\""pinch\"").options.enable);\n  };\n\n  return PinchInput;\n}();\n\n/**\n * @typedef {Object} WheelInputOption The option object of the eg.Axes.WheelInput module\n * @ko eg.Axes.WheelInput 모듈의 옵션 객체\n * @property {Number} [scale=1] Coordinate scale that a user can move<ko>사용자의 동작으로 이동하는 좌표의 배율</ko>\n**/\n\n/**\n * @class eg.Axes.WheelInput\n * @classdesc A module that passes the amount of change to eg.Axes when the mouse wheel is moved. use one axis.\n * @ko 마우스 휠이 움직일때의 변화량을 eg.Axes에 전달하는 모듈. 한 개 의 축을 사용한다.\n *\n * @example\n * const wheel = new eg.Axes.WheelInput(\""#area\"", {\n * \t\tscale: 1\n * });\n *\n * // Connect 'something' axis when the mousewheel is moved.\n * axes.connect(\""something\"", wheel);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.WheelInput module <ko>eg.Axes.WheelInput 모듈을 사용할 엘리먼트</ko>\n * @param {WheelInputOption} [options] The option object of the eg.Axes.WheelInput module<ko>eg.Axes.WheelInput 모듈의 옵션 객체</ko>\n */\n\nvar WheelInput =\n/*#__PURE__*/\nfunction () {\n  function WheelInput(el, options) {\n    this.axes = [];\n    this.element = null;\n    this._isEnabled = false;\n    this._isHolded = false;\n    this._timer = null;\n    this.element = $(el);\n    this.options = __assign({\n      scale: 1,\n      useNormalized: true\n    }, options);\n    this.onWheel = this.onWheel.bind(this);\n  }\n\n  var __proto = WheelInput.prototype;\n\n  __proto.mapAxes = function (axes) {\n    this.axes = axes;\n  };\n\n  __proto.connect = function (observer) {\n    this.dettachEvent();\n    this.attachEvent(observer);\n    return this;\n  };\n\n  __proto.disconnect = function () {\n    this.dettachEvent();\n    return this;\n  };\n  /**\n  * Destroys elements, properties, and events used in a module.\n  * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n  * @method eg.Axes.WheelInput#destroy\n  */\n\n\n  __proto.destroy = function () {\n    this.disconnect();\n    this.element = null;\n  };\n\n  __proto.onWheel = function (event) {\n    var _this = this;\n\n    if (!this._isEnabled) {\n      return;\n    }\n\n    event.preventDefault();\n\n    if (event.deltaY === 0) {\n      return;\n    }\n\n    if (!this._isHolded) {\n      this.observer.hold(this, event);\n      this._isHolded = true;\n    }\n\n    var offset = (event.deltaY > 0 ? -1 : 1) * this.options.scale * (this.options.useNormalized ? 1 : Math.abs(event.deltaY));\n    this.observer.change(this, event, toAxis(this.axes, [offset]));\n    clearTimeout(this._timer);\n    this._timer = setTimeout(function () {\n      if (_this._isHolded) {\n        _this._isHolded = false;\n\n        _this.observer.release(_this, event, toAxis(_this.axes, [0]));\n      }\n    }, 50);\n  };\n\n  __proto.attachEvent = function (observer) {\n    this.observer = observer;\n    this.element.addEventListener(\""wheel\"", this.onWheel);\n    this._isEnabled = true;\n  };\n\n  __proto.dettachEvent = function () {\n    this.element.removeEventListener(\""wheel\"", this.onWheel);\n    this._isEnabled = false;\n    this.observer = null;\n\n    if (this._timer) {\n      clearTimeout(this._timer);\n      this._timer = null;\n    }\n  };\n  /**\n   * Enables input devices\n   * @ko 입력 장치를 사용할 수 있게 한다\n   * @method eg.Axes.WheelInput#enable\n   * @return {eg.Axes.WheelInput} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   */\n\n\n  __proto.enable = function () {\n    this._isEnabled = true;\n    return this;\n  };\n  /**\n   * Disables input devices\n   * @ko 입력 장치를 사용할 수 없게 한다.\n   * @method eg.Axes.WheelInput#disable\n   * @return {eg.Axes.WheelInput} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   */\n\n\n  __proto.disable = function () {\n    this._isEnabled = false;\n    return this;\n  };\n  /**\n   * Returns whether to use an input device\n   * @ko 입력 장치를 사용 여부를 반환한다.\n   * @method eg.Axes.WheelInput#isEnable\n   * @return {Boolean} Whether to use an input device <ko>입력장치 사용여부</ko>\n   */\n\n\n  __proto.isEnable = function () {\n    return this._isEnabled;\n  };\n\n  return WheelInput;\n}();\n\nvar KEY_LEFT_ARROW = 37;\nvar KEY_A = 65;\nvar KEY_UP_ARROW = 38;\nvar KEY_W = 87;\nvar KEY_RIGHT_ARROW = 39;\nvar KEY_D = 68;\nvar KEY_DOWN_ARROW = 40;\nvar KEY_S = 83;\nvar DIRECTION_REVERSE = -1;\nvar DIRECTION_FORWARD = 1;\nvar DIRECTION_HORIZONTAL$1 = -1;\nvar DIRECTION_VERTICAL$1 = 1;\nvar DELAY = 80;\n/**\n * @typedef {Object} MoveKeyInputOption The option object of the eg.Axes.MoveKeyInput module\n * @ko eg.Axes.MoveKeyInput 모듈의 옵션 객체\n * @property {Array<Number>} [scale] Coordinate scale that a user can move<ko>사용자의 동작으로 이동하는 좌표의 배율</ko>\n * @property {Number} [scale[0]=1] Coordinate scale for the first axis<ko>첫번째 축의 배율</ko>\n * @property {Number} [scale[1]=1] Coordinate scale for the decond axis<ko>두번째 축의 배율</ko>\n**/\n\n/**\n * @class eg.Axes.MoveKeyInput\n * @classdesc A module that passes the amount of change to eg.Axes when the move key stroke is occured. use two axis.\n * @ko 이동키 입력이 발생했을 때의 변화량을 eg.Axes에 전달하는 모듈. 두 개 의 축을 사용한다.\n *\n * @example\n * const moveKey = new eg.Axes.MoveKeyInput(\""#area\"", {\n * \t\tscale: [1, 1]\n * });\n *\n * // Connect 'x', 'y' axes when the moveKey is pressed.\n * axes.connect([\""x\"", \""y\""], moveKey);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.MoveKeyInput module <ko>eg.Axes.MoveKeyInput 모듈을 사용할 엘리먼트</ko>\n * @param {MoveKeyInputOption} [options] The option object of the eg.Axes.MoveKeyInput module<ko>eg.Axes.MoveKeyInput 모듈의 옵션 객체</ko>\n */\n\nvar MoveKeyInput =\n/*#__PURE__*/\nfunction () {\n  function MoveKeyInput(el, options) {\n    this.axes = [];\n    this.element = null;\n    this._isEnabled = false;\n    this._isHolded = false;\n    this._timer = null;\n    this.element = $(el);\n    this.options = __assign({\n      scale: [1, 1]\n    }, options);\n    this.onKeydown = this.onKeydown.bind(this);\n    this.onKeyup = this.onKeyup.bind(this);\n  }\n\n  var __proto = MoveKeyInput.prototype;\n\n  __proto.mapAxes = function (axes) {\n    this.axes = axes;\n  };\n\n  __proto.connect = function (observer) {\n    this.dettachEvent(); // add tabindex=\""0\"" to the container for making it focusable\n\n    if (this.element.getAttribute(\""tabindex\"") !== \""0\"") {\n      this.element.setAttribute(\""tabindex\"", \""0\"");\n    }\n\n    this.attachEvent(observer);\n    return this;\n  };\n\n  __proto.disconnect = function () {\n    this.dettachEvent();\n    return this;\n  };\n  /**\n  * Destroys elements, properties, and events used in a module.\n  * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n  * @method eg.Axes.MoveKeyInput#destroy\n  */\n\n\n  __proto.destroy = function () {\n    this.disconnect();\n    this.element = null;\n  };\n\n  __proto.onKeydown = function (e) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    var isMoveKey = true;\n    var direction = DIRECTION_FORWARD;\n    var move = DIRECTION_HORIZONTAL$1;\n\n    switch (e.keyCode) {\n      case KEY_LEFT_ARROW:\n      case KEY_A:\n        direction = DIRECTION_REVERSE;\n        break;\n\n      case KEY_RIGHT_ARROW:\n      case KEY_D:\n        break;\n\n      case KEY_DOWN_ARROW:\n      case KEY_S:\n        direction = DIRECTION_REVERSE;\n        move = DIRECTION_VERTICAL$1;\n        break;\n\n      case KEY_UP_ARROW:\n      case KEY_W:\n        move = DIRECTION_VERTICAL$1;\n        break;\n\n      default:\n        isMoveKey = false;\n    }\n\n    if (move === DIRECTION_HORIZONTAL$1 && !this.axes[0] || move === DIRECTION_VERTICAL$1 && !this.axes[1]) {\n      isMoveKey = false;\n    }\n\n    if (!isMoveKey) {\n      return;\n    }\n\n    var offsets = move === DIRECTION_HORIZONTAL$1 ? [+this.options.scale[0] * direction, 0] : [0, +this.options.scale[1] * direction];\n\n    if (!this._isHolded) {\n      this.observer.hold(this, event);\n      this._isHolded = true;\n    }\n\n    clearTimeout(this._timer);\n    this.observer.change(this, event, toAxis(this.axes, offsets));\n  };\n\n  __proto.onKeyup = function (e) {\n    var _this = this;\n\n    if (!this._isHolded) {\n      return;\n    }\n\n    clearTimeout(this._timer);\n    this._timer = setTimeout(function () {\n      _this.observer.release(_this, e, toAxis(_this.axes, [0, 0]));\n\n      _this._isHolded = false;\n    }, DELAY);\n  };\n\n  __proto.attachEvent = function (observer) {\n    this.observer = observer;\n    this.element.addEventListener(\""keydown\"", this.onKeydown, false);\n    this.element.addEventListener(\""keypress\"", this.onKeydown, false);\n    this.element.addEventListener(\""keyup\"", this.onKeyup, false);\n    this._isEnabled = true;\n  };\n\n  __proto.dettachEvent = function () {\n    this.element.removeEventListener(\""keydown\"", this.onKeydown, false);\n    this.element.removeEventListener(\""keypress\"", this.onKeydown, false);\n    this.element.removeEventListener(\""keyup\"", this.onKeyup, false);\n    this._isEnabled = false;\n    this.observer = null;\n  };\n  /**\n   * Enables input devices\n   * @ko 입력 장치를 사용할 수 있게 한다\n   * @method eg.Axes.MoveKeyInput#enable\n   * @return {eg.Axes.MoveKeyInput} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   */\n\n\n  __proto.enable = function () {\n    this._isEnabled = true;\n    return this;\n  };\n  /**\n   * Disables input devices\n   * @ko 입력 장치를 사용할 수 없게 한다.\n   * @method eg.Axes.MoveKeyInput#disable\n   * @return {eg.Axes.MoveKeyInput} An instance of a module itself <ko>모듈 자신의 인스턴스</ko>\n   */\n\n\n  __proto.disable = function () {\n    this._isEnabled = false;\n    return this;\n  };\n  /**\n   * Returns whether to use an input device\n   * @ko 입력 장치를 사용 여부를 반환한다.\n   * @method eg.Axes.MoveKeyInput#isEnable\n   * @return {Boolean} Whether to use an input device <ko>입력장치 사용여부</ko>\n   */\n\n\n  __proto.isEnable = function () {\n    return this._isEnabled;\n  };\n\n  return MoveKeyInput;\n}();\n\nexport default Axes;\nexport { PanInput, RotatePanInput, PinchInput, WheelInput, MoveKeyInput };\n//# sourceMappingURL=axes.esm.js.map\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { FlickingOptions, EventType, Direction, AxesEventType, StateType, MoveTypeSnapOption, MoveTypeFreeScrollOption, FlickingMethodsKeys } from \""./types\"";\n\nexport const MOVE_TYPE: {\n  SNAP: \""snap\"";\n  FREE_SCROLL: \""freeScroll\"";\n} = {\n  SNAP: \""snap\"",\n  FREE_SCROLL: \""freeScroll\"",\n};\n\nexport const DEFAULT_MOVE_TYPE_OPTIONS: {\n  snap: MoveTypeSnapOption,\n  freeScroll: MoveTypeFreeScrollOption,\n} = {\n  snap: {\n    type: \""snap\"",\n    count: 1,\n  },\n  freeScroll: {\n    type: \""freeScroll\"",\n  },\n};\nexport const isBrowser = typeof document !== \""undefined\"";\n\n/**\n * Default options for creating Flicking.\n * @ko 플리킹을 만들 때 사용하는 기본 옵션들\n * @private\n * @memberof eg.Flicking\n */\nexport const DEFAULT_OPTIONS: Readonly<FlickingOptions> = {\n  classPrefix: \""eg-flick\"",\n  deceleration: 0.0075,\n  horizontal: true,\n  circular: false,\n  infinite: false,\n  infiniteThreshold: 0,\n  lastIndex: Infinity,\n  threshold: 40,\n  duration: 100,\n  panelEffect: x => 1 - Math.pow(1 - x, 3),\n  defaultIndex: 0,\n  inputType: [\""touch\"", \""mouse\""],\n  thresholdAngle: 45,\n  bounce: 10,\n  autoResize: false,\n  adaptive: false,\n  zIndex: 2000,\n  bound: false,\n  overflow: false,\n  hanger: \""50%\"",\n  anchor: \""50%\"",\n  gap: 0,\n  moveType: DEFAULT_MOVE_TYPE_OPTIONS.snap,\n  useOffset: false,\n  isEqualSize: false,\n  isConstantSize: false,\n  renderOnlyVisible: false,\n  renderExternal: false,\n  collectStatistics: true,\n};\n\nexport const DEFAULT_VIEWPORT_CSS = {\n  position: \""relative\"",\n  zIndex: DEFAULT_OPTIONS.zIndex,\n  overflow: \""hidden\"",\n};\n\nexport const DEFAULT_CAMERA_CSS = {\n  width: \""100%\"",\n  height: \""100%\"",\n  willChange: \""transform\"",\n};\n\nexport const DEFAULT_PANEL_CSS = {\n  position: \""absolute\"",\n};\n\nexport const EVENTS: EventType = {\n  HOLD_START: \""holdStart\"",\n  HOLD_END: \""holdEnd\"",\n  MOVE_START: \""moveStart\"",\n  MOVE: \""move\"",\n  MOVE_END: \""moveEnd\"",\n  CHANGE: \""change\"",\n  RESTORE: \""restore\"",\n  SELECT: \""select\"",\n  NEED_PANEL: \""needPanel\"",\n  VISIBLE_CHANGE: \""visibleChange\"",\n};\n\nexport const AXES_EVENTS: AxesEventType = {\n  HOLD: \""hold\"",\n  CHANGE: \""change\"",\n  RELEASE: \""release\"",\n  ANIMATION_END: \""animationEnd\"",\n  FINISH: \""finish\"",\n};\n\nexport const STATE_TYPE: StateType = {\n  IDLE: 0,\n  HOLDING: 1,\n  DRAGGING: 2,\n  ANIMATING: 3,\n  DISABLED: 4,\n};\n\nexport const DIRECTION: Direction = {\n  PREV: \""PREV\"",\n  NEXT: \""NEXT\"",\n};\nexport const FLICKING_METHODS: {[key in FlickingMethodsKeys]: true} = {\n  prev: true,\n  next: true,\n  moveTo: true,\n  getIndex: true,\n  getAllPanels: true,\n  getCurrentPanel: true,\n  getElement: true,\n  getPanel: true,\n  getPanelCount: true,\n  getStatus: true,\n  getVisiblePanels: true,\n  enableInput: true,\n  disableInput: true,\n  destroy: true,\n  resize: true,\n  setStatus: true,\n  isPlaying: true,\n};\n\n// Check whether browser supports transform: translate3d\n// https://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support\nexport let checkTranslateSupport = () => {\n  const transforms = {\n    webkitTransform: \""-webkit-transform\"",\n    msTransform: \""-ms-transform\"",\n    MozTransform: \""-moz-transform\"",\n    OTransform: \""-o-transform\"",\n    transform: \""transform\"",\n  };\n\n  if (!isBrowser) {\n    return {\n      name: transforms.transform,\n      has3d: true,\n    };\n  }\n  const supportedStyle = document.documentElement.style;\n  let transformName = \""\"";\n  for (const prefixedTransform in transforms) {\n    if (prefixedTransform in supportedStyle) {\n      transformName = prefixedTransform;\n    }\n  }\n\n  if (!transformName) {\n    throw new Error(\""Browser doesn't support CSS3 2D Transforms.\"");\n  }\n\n  const el = document.createElement(\""div\"");\n\n  document.documentElement.insertBefore(el, null);\n\n  el.style[transformName] = \""translate3d(1px, 1px, 1px)\"";\n  const styleVal = window.getComputedStyle(el).getPropertyValue(transforms[transformName]);\n\n  el.parentElement!.removeChild(el);\n\n  const transformInfo = {\n    name: transformName,\n    has3d: styleVal.length > 0 && styleVal !== \""none\"",\n  };\n\n  checkTranslateSupport = () => transformInfo;\n\n  return transformInfo;\n};\n\nexport const TRANSFORM = checkTranslateSupport();\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { ElementLike, OriginalStyle, BoundingBox } from \""./types\"";\nimport Flicking from \""./Flicking\"";\nimport { FLICKING_METHODS } from \""./consts\"";\n\nexport function merge(target: object, ...srcs: object[]): object {\n  srcs.forEach(source => {\n    Object.keys(source).forEach(key => {\n      const value = source[key];\n      target[key] = value;\n    });\n  });\n\n  return target;\n}\n\nexport function parseElement(element: ElementLike | ElementLike[]): HTMLElement[] {\n  if (!Array.isArray(element)) {\n    element = [element];\n  }\n\n  const elements: HTMLElement[] = [];\n  element.forEach(el => {\n    if (isString(el)) {\n      const tempDiv = document.createElement(\""div\"");\n      tempDiv.innerHTML = el;\n\n      elements.push(...toArray(tempDiv.children) as HTMLElement[]);\n      while (tempDiv.firstChild) {\n        tempDiv.removeChild(tempDiv.firstChild);\n      }\n    } else {\n      elements.push(el as HTMLElement);\n    }\n  });\n\n  return elements;\n}\n\nexport function isString(value: any): value is string {\n  return typeof value === \""string\"";\n}\n\n// Get class list of element as string array\nexport function classList(element: HTMLElement): string[] {\n  return element.classList\n    ? toArray(element.classList)\n    : element.className.split(\"" \"");\n}\n\n// Add class to specified element\nexport function addClass(element: HTMLElement, className: string): void {\n  if (element.classList) {\n    element.classList.add(className);\n  } else {\n    if (!hasClass(element, className)) {\n      element.className = (`${element.className} ${className}`).replace(/\\s{2,}/g, \"" \"");\n    }\n  }\n}\n\nexport function hasClass(element: HTMLElement, className: string): boolean {\n  if (element.classList) {\n    return element.classList.contains(className);\n  } else {\n    return (element.className.split(\"" \"").indexOf(className) >= 0);\n  }\n}\n\nexport function applyCSS(element: HTMLElement, cssObj: object): void {\n  Object.keys(cssObj).forEach(property => {\n    element.style[property] = cssObj[property];\n  });\n}\n\nexport function clamp(val: number, min: number, max: number) {\n  return Math.max(Math.min(val, max), min);\n}\n\n// Min: inclusive, Max: exclusive\nexport function isBetween(val: number, min: number, max: number) {\n  return val >= min && val <= max;\n}\n\nexport interface ArrayLike<T> {\n  length: number;\n  [index: number]: T;\n}\n\nexport function toArray<T>(iterable: ArrayLike<T>): T[] {\n  return [].slice.call(iterable);\n}\n\nexport function isArray(arr: any): boolean {\n  return arr && arr.constructor === Array;\n}\n\nexport function parseArithmeticExpression(cssValue: number | string, base: number, defaultVal?: number): number {\n  // Set base / 2 to default value, if it's undefined\n  const defaultValue = defaultVal != null ? defaultVal : base / 2;\n  const cssRegex = /(?:(\\+|\\-)\\s*)?(\\d+(?:\\.\\d+)?(%|px)?)/g;\n\n  if (typeof cssValue === \""number\"") {\n    return clamp(cssValue, 0, base);\n  }\n\n  let idx = 0;\n  let calculatedValue = 0;\n  let matchResult = cssRegex.exec(cssValue);\n  while (matchResult != null) {\n    let sign = matchResult[1];\n    const value = matchResult[2];\n    const unit = matchResult[3];\n\n    let parsedValue = parseFloat(value);\n\n    if (idx <= 0) {\n      sign = sign || \""+\"";\n    }\n\n    // Return default value for values not in good form\n    if (!sign) {\n      return defaultValue;\n    }\n\n    if (unit === \""%\"") {\n      parsedValue = (parsedValue / 100) * base;\n    }\n\n    calculatedValue += sign === \""+\""\n      ? parsedValue\n      : -parsedValue;\n\n    // Match next occurrence\n    ++idx;\n    matchResult = cssRegex.exec(cssValue);\n  }\n\n  // None-matched\n  if (idx === 0) {\n    return defaultValue;\n  }\n\n  // Clamp between 0 ~ base\n  return clamp(calculatedValue, 0, base);\n}\n\nexport function getProgress(pos: number, range: number[]) {\n  // start, anchor, end\n  // -1 , 0 , 1\n  const [min, center, max] = range;\n\n  if (pos > center && (max - center)) {\n    // 0 ~ 1\n    return (pos - center) / (max - center);\n  } else if (pos < center && (center - min)) {\n    // -1 ~ 0\n    return (pos - center) / (center - min);\n  } else if (pos !== center && max - min) {\n    return (pos - min) / (max - min);\n  }\n  return 0;\n}\n\nexport function findIndex<T>(iterable: T[], callback: (el: T) => boolean): number {\n  for (let i = 0; i < iterable.length; i += 1) {\n    const element = iterable[i];\n    if (element && callback(element)) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\n// return [0, 1, ...., max - 1]\nexport function counter(max: number): number[] {\n  const counterArray: number[] = [];\n  for (let i = 0; i < max; i += 1) {\n    counterArray[i] = i;\n  }\n  return counterArray;\n}\n\n// Circulate number between range [min, max]\n/*\n * \""indexed\"" means min and max is not same, so if it's true \""min - 1\"" should be max\n * While if it's false, \""min - 1\"" should be \""max - 1\""\n * use `indexed: true` when it should be used for circulating integers like index\n * or `indexed: false` when it should be used for something like positions.\n */\nexport function circulate(value: number, min: number, max: number, indexed: boolean): number {\n  const size = indexed\n    ? max - min + 1\n    : max - min;\n  if (value < min) {\n    const offset = indexed\n      ? (min - value - 1) % size\n      : (min - value) % size;\n    value = max - offset;\n  } else if (value > max) {\n    const offset = indexed\n      ? (value - max - 1) % size\n      : (value - max) % size;\n    value = min + offset;\n  }\n\n  return value;\n}\n\nexport function restoreStyle(element: HTMLElement, originalStyle: OriginalStyle): void {\n  originalStyle.className\n    ? element.setAttribute(\""class\"", originalStyle.className)\n    : element.removeAttribute(\""class\"");\n  originalStyle.style\n    ? element.setAttribute(\""style\"", originalStyle.style)\n    : element.removeAttribute(\""style\"");\n}\n\n/**\n * Decorator that makes the method of flicking available in the framework.\n * @ko 프레임워크에서 플리킹의 메소드를 사용할 수 있게 하는 데코레이터.\n * @memberof eg.Flicking\n * @private\n * @example\n * ```js\n * import Flicking, { withFlickingMethods } from \""@egjs/flicking\"";\n *\n * class Flicking extends React.Component<Partial<FlickingProps & FlickingOptions>> {\n *   &#64;withFlickingMethods\n *   private flicking: Flicking;\n * }\n * ```\n */\nexport function withFlickingMethods(prototype: any, flickingName: string) {\n  Object.keys(FLICKING_METHODS).forEach((name: keyof Flicking) => {\n    if (prototype[name]) {\n      return;\n    }\n    prototype[name] = function(...args) {\n      const result = this[flickingName][name](...args);\n\n      // fix `this` type to return your own `flicking` instance to the instance using the decorator.\n      if (result === this[flickingName]) {\n        return this;\n      } else {\n        return result;\n      }\n    };\n  });\n}\n\nexport function getBbox(element: HTMLElement, useOffset: boolean) {\n  let bbox: BoundingBox;\n  if (useOffset) {\n    bbox = {\n      x: 0,\n      y: 0,\n      width: element.offsetWidth,\n      height: element.offsetHeight,\n    };\n  } else {\n    const clientRect = element.getBoundingClientRect();\n    bbox = {\n      x: clientRect.left,\n      y: clientRect.top,\n      width: clientRect.width,\n      height: clientRect.height,\n    };\n  }\n  return bbox;\n}\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Viewport from \""./Viewport\"";\nimport { OriginalStyle, FlickingPanel, ElementLike, DestroyOption, BoundingBox } from \""../types\"";\nimport { DEFAULT_PANEL_CSS, EVENTS } from \""../consts\"";\nimport { addClass, applyCSS, parseArithmeticExpression, parseElement, getProgress, restoreStyle, hasClass, getBbox } from \""../utils\"";\n\nclass Panel implements FlickingPanel {\n  public viewport: Viewport;\n  public prevSibling: Panel | null;\n  public nextSibling: Panel | null;\n\n  protected state: {\n    index: number;\n    position: number;\n    relativeAnchorPosition: number;\n    size: number;\n    isClone: boolean;\n    isVirtual: boolean;\n    // Index of cloned panel, zero-based integer(original: -1, cloned: [0, 1, 2, ...])\n    // if cloneIndex is 0, that means it's first cloned panel of original panel\n    cloneIndex: number;\n    originalStyle: OriginalStyle;\n    cachedBbox: BoundingBox | null;\n  };\n  private element: HTMLElement;\n  private original?: Panel;\n  private clonedPanels: Panel[];\n\n  public constructor(\n    element?: HTMLElement | null,\n    index?: number,\n    viewport?: Viewport,\n  ) {\n    this.viewport = viewport!;\n    this.prevSibling = null;\n    this.nextSibling = null;\n    this.clonedPanels = [];\n\n    this.state = {\n      index: index!,\n      position: 0,\n      relativeAnchorPosition: 0,\n      size: 0,\n      isClone: false,\n      isVirtual: false,\n      cloneIndex: -1,\n      originalStyle: {\n        className: \""\"",\n        style: \""\"",\n      },\n      cachedBbox: null,\n    };\n    this.setElement(element);\n  }\n\n  public resize(givenBbox?: BoundingBox): void {\n    const state = this.state;\n    const options = this.viewport.options;\n    const bbox = givenBbox\n      ? givenBbox\n      : this.getBbox();\n    this.state.cachedBbox = bbox;\n    const prevSize = state.size;\n\n    state.size = options.horizontal\n      ? bbox.width\n      : bbox.height;\n\n    if (prevSize !== state.size) {\n      state.relativeAnchorPosition = parseArithmeticExpression(options.anchor, state.size);\n    }\n\n    if (!state.isClone) {\n      this.clonedPanels.forEach(panel => {\n        const cloneState = panel.state;\n\n        cloneState.size = state.size;\n        cloneState.cachedBbox = state.cachedBbox;\n        cloneState.relativeAnchorPosition = state.relativeAnchorPosition;\n      });\n    }\n  }\n\n  public unCacheBbox(): void {\n    this.state.cachedBbox = null;\n  }\n\n  public getProgress() {\n    const viewport = this.viewport;\n    const options = viewport.options;\n    const panelCount = viewport.panelManager.getPanelCount();\n    const scrollAreaSize = viewport.getScrollAreaSize();\n\n    const relativeIndex = (options.circular ? Math.floor(this.getPosition() / scrollAreaSize) * panelCount : 0) + this.getIndex();\n    const progress = relativeIndex - viewport.getCurrentProgress();\n\n    return progress;\n  }\n\n  public getOutsetProgress() {\n    const viewport = this.viewport;\n    const outsetRange = [\n      -this.getSize(),\n      viewport.getRelativeHangerPosition() - this.getRelativeAnchorPosition(),\n      viewport.getSize(),\n    ];\n    const relativePanelPosition = this.getPosition() - viewport.getCameraPosition();\n    const outsetProgress = getProgress(relativePanelPosition, outsetRange);\n\n    return outsetProgress;\n  }\n\n  public getVisibleRatio() {\n    const viewport = this.viewport;\n    const panelSize = this.getSize();\n    const relativePanelPosition = this.getPosition() - viewport.getCameraPosition();\n    const rightRelativePanelPosition = relativePanelPosition + panelSize;\n\n    const visibleSize = Math.min(viewport.getSize(), rightRelativePanelPosition) - Math.max(relativePanelPosition, 0);\n    const visibleRatio = visibleSize >= 0\n      ? visibleSize / panelSize\n      : 0;\n\n    return visibleRatio;\n  }\n\n  public focus(duration?: number): void {\n    const viewport = this.viewport;\n    const currentPanel = viewport.getCurrentPanel();\n    const hangerPosition = viewport.getHangerPosition();\n    const anchorPosition = this.getAnchorPosition();\n    if (hangerPosition === anchorPosition || !currentPanel) {\n      return;\n    }\n\n    const currentPosition = currentPanel.getPosition();\n    const eventType = currentPosition === this.getPosition()\n      ? \""\""\n      : EVENTS.CHANGE;\n\n    viewport.moveTo(this, viewport.findEstimatedPosition(this), eventType, null, duration);\n  }\n\n  public update(updateFunction: ((element: HTMLElement) => any) | null = null, shouldResize: boolean = true): void {\n    const identicalPanels = this.getIdenticalPanels();\n\n    if (updateFunction) {\n      identicalPanels.forEach(eachPanel => {\n        updateFunction(eachPanel.getElement());\n      });\n    }\n\n    if (shouldResize) {\n      identicalPanels.forEach(eachPanel => {\n        eachPanel.unCacheBbox();\n      });\n      this.viewport.addVisiblePanel(this);\n      this.viewport.resize();\n    }\n  }\n\n  public prev(): FlickingPanel | null {\n    const viewport = this.viewport;\n    const options = viewport.options;\n    const prevSibling = this.prevSibling;\n\n    if (!prevSibling) {\n      return null;\n    }\n\n    const currentIndex = this.getIndex();\n    const currentPosition = this.getPosition();\n    const prevPanelIndex = prevSibling.getIndex();\n    const prevPanelPosition = prevSibling.getPosition();\n    const prevPanelSize = prevSibling.getSize();\n\n    const hasEmptyPanelBetween = currentIndex - prevPanelIndex > 1;\n    const notYetMinPanel = options.infinite\n      && currentIndex > 0\n      && prevPanelIndex > currentIndex;\n\n    if (hasEmptyPanelBetween || notYetMinPanel) {\n      // Empty panel exists between\n      return null;\n    }\n\n    const newPosition = currentPosition - prevPanelSize - options.gap;\n\n    let prevPanel = prevSibling;\n    if (prevPanelPosition !== newPosition) {\n      prevPanel = prevSibling.clone(prevSibling.getCloneIndex(), true);\n      prevPanel.setPosition(newPosition);\n    }\n\n    return prevPanel;\n  }\n\n  public next(): FlickingPanel | null {\n    const viewport = this.viewport;\n    const options = viewport.options;\n    const nextSibling = this.nextSibling;\n    const lastIndex = viewport.panelManager.getLastIndex();\n\n    if (!nextSibling) {\n      return null;\n    }\n\n    const currentIndex = this.getIndex();\n    const currentPosition = this.getPosition();\n    const nextPanelIndex = nextSibling.getIndex();\n    const nextPanelPosition = nextSibling.getPosition();\n\n    const hasEmptyPanelBetween = nextPanelIndex - currentIndex > 1;\n    const notYetMaxPanel = options.infinite\n      && currentIndex < lastIndex\n      && nextPanelIndex < currentIndex;\n\n    if (hasEmptyPanelBetween || notYetMaxPanel) {\n      return null;\n    }\n\n    const newPosition = currentPosition + this.getSize() + options.gap;\n\n    let nextPanel = nextSibling;\n    if (nextPanelPosition !== newPosition) {\n      nextPanel = nextSibling.clone(nextSibling.getCloneIndex(), true);\n      nextPanel.setPosition(newPosition);\n    }\n\n    return nextPanel;\n  }\n\n  public insertBefore(element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const viewport = this.viewport;\n    const parsedElements = parseElement(element);\n    const firstPanel = viewport.panelManager.firstPanel()!;\n    const prevSibling = this.prevSibling;\n    // Finding correct inserting index\n    // While it should insert removing empty spaces,\n    // It also should have to be bigger than prevSibling' s index\n    const targetIndex = prevSibling && firstPanel.getIndex() !== this.getIndex()\n      ? Math.max(prevSibling.getIndex() + 1, this.getIndex() - parsedElements.length)\n      : Math.max(this.getIndex() - parsedElements.length, 0);\n\n    return viewport.insert(targetIndex, parsedElements);\n  }\n\n  public insertAfter(element: ElementLike | ElementLike[]): FlickingPanel[] {\n    return this.viewport.insert(this.getIndex() + 1, element);\n  }\n\n  public remove(): FlickingPanel {\n    this.viewport.remove(this.getIndex());\n\n    return this;\n  }\n\n  public destroy(option: Partial<DestroyOption>): void {\n    if (!option.preserveUI) {\n      const originalStyle = this.state.originalStyle;\n\n      restoreStyle(this.element, originalStyle);\n    }\n\n    // release resources\n    for (const x in this) {\n      (this as any)[x] = null;\n    }\n  }\n\n  public getElement(): HTMLElement {\n    return this.element;\n  }\n\n  public getAnchorPosition(): number {\n    return this.state.position + this.state.relativeAnchorPosition;\n  }\n\n  public getRelativeAnchorPosition(): number {\n    return this.state.relativeAnchorPosition;\n  }\n\n  public getIndex(): number {\n    return this.state.index;\n  }\n\n  public getPosition(): number {\n    return this.state.position;\n  }\n\n  public getSize(): number {\n    return this.state.size;\n  }\n\n  public getBbox(): BoundingBox {\n    const state = this.state;\n    const viewport = this.viewport;\n    const element = this.element;\n    const options = viewport.options;\n\n    if (!element) {\n      state.cachedBbox = {\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0,\n      };\n    } else if (!state.cachedBbox) {\n      const wasVisible = Boolean(element.parentNode);\n      const cameraElement = viewport.getCameraElement();\n      if (!wasVisible) {\n        cameraElement.appendChild(element);\n        viewport.addVisiblePanel(this);\n      }\n      state.cachedBbox = getBbox(element, options.useOffset);\n\n      if (!wasVisible && viewport.options.renderExternal) {\n        cameraElement.removeChild(element);\n      }\n    }\n    return state.cachedBbox!;\n  }\n\n  public isClone(): boolean {\n    return this.state.isClone;\n  }\n\n  public getOverlappedClass(classes: string[]): string | undefined {\n    const element = this.element;\n\n    for (const className of classes) {\n      if (hasClass(element, className)) {\n        return className;\n      }\n    }\n  }\n\n  public getCloneIndex(): number {\n    return this.state.cloneIndex;\n  }\n\n  public getClonedPanels(): Panel[] {\n    const state = this.state;\n\n    return state.isClone\n      ? this.original!.getClonedPanels()\n      : this.clonedPanels;\n  }\n\n  public getIdenticalPanels(): Panel[] {\n    const state = this.state;\n\n    return state.isClone\n      ? this.original!.getIdenticalPanels()\n      : [this, ...this.clonedPanels];\n  }\n\n  public getOriginalPanel(): Panel {\n    return this.state.isClone\n      ? this.original!\n      : this;\n  }\n\n  public setIndex(index: number): void {\n    const state = this.state;\n\n    state.index = index;\n    this.clonedPanels.forEach(panel => panel.state.index = index);\n  }\n\n  public setPosition(pos: number): this {\n    this.state.position = pos;\n\n    return this;\n  }\n\n  public setPositionCSS(offset: number = 0): void {\n    if (!this.element) {\n      return;\n    }\n    const state = this.state;\n    const pos = state.position;\n    const options = this.viewport.options;\n    const elementStyle = this.element.style;\n    const currentElementStyle = options.horizontal\n      ? elementStyle.left\n      : elementStyle.top;\n    const styleToApply = `${pos - offset}px`;\n\n    if (!state.isVirtual && currentElementStyle !== styleToApply) {\n      options.horizontal\n        ? elementStyle.left = styleToApply\n        : elementStyle.top = styleToApply;\n    }\n  }\n\n  public clone(cloneIndex: number, isVirtual: boolean = false, element?: HTMLElement | null): Panel {\n    const state = this.state;\n    const viewport = this.viewport;\n    let cloneElement = element;\n\n    if (!cloneElement && this.element) {\n      cloneElement = isVirtual ? this.element : this.element.cloneNode(true) as HTMLElement;\n    }\n    const clonedPanel = new Panel(cloneElement, state.index, viewport);\n    const clonedState = clonedPanel.state;\n\n    clonedPanel.original = state.isClone\n      ? this.original\n      : this;\n    clonedState.isClone = true;\n    clonedState.isVirtual = isVirtual;\n    clonedState.cloneIndex = cloneIndex;\n    // Inherit some state values\n    clonedState.size = state.size;\n    clonedState.relativeAnchorPosition = state.relativeAnchorPosition;\n    clonedState.originalStyle = state.originalStyle;\n    clonedState.cachedBbox = state.cachedBbox;\n\n    if (!isVirtual) {\n      this.clonedPanels.push(clonedPanel);\n    } else {\n      clonedPanel.prevSibling = this.prevSibling;\n      clonedPanel.nextSibling = this.nextSibling;\n    }\n\n    return clonedPanel;\n  }\n\n  public removeElement(): void {\n    if (!this.viewport.options.renderExternal) {\n      const element = this.element;\n      element.parentNode!.removeChild(element);\n    }\n\n    // Do the same thing for clones\n    if (!this.state.isClone) {\n      this.removeClonedPanelsAfter(0);\n    }\n  }\n\n  public removeClonedPanelsAfter(start: number): void {\n    const options = this.viewport.options;\n    const removingPanels = this.clonedPanels.splice(start);\n\n    if (!options.renderExternal && !options.renderOnlyVisible) {\n      removingPanels.forEach(panel => {\n        panel.removeElement();\n      });\n    }\n  }\n\n  public setElement(element?: HTMLElement | null): void {\n    if (!element) {\n      return;\n    }\n    const currentElement = this.element;\n    if (element !== currentElement) {\n      const options = this.viewport.options;\n\n      if (currentElement) {\n        if (options.horizontal) {\n          element.style.left = currentElement.style.left;\n        } else {\n          element.style.top = currentElement.style.top;\n        }\n      } else {\n        const originalStyle = this.state.originalStyle;\n\n        originalStyle.className = element.getAttribute(\""class\"");\n        originalStyle.style = element.getAttribute(\""style\"");\n      }\n\n      this.element = element;\n\n      if (options.classPrefix) {\n        addClass(element, `${options.classPrefix}-panel`);\n      }\n\n      // Update size info after applying panel css\n      applyCSS(this.element, DEFAULT_PANEL_CSS);\n    }\n  }\n}\n\nexport default Panel;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Panel from \""./Panel\"";\nimport { FlickingOptions } from \""../types\"";\nimport { findIndex, counter } from \""../utils\"";\n\nclass PanelManager {\n  private cameraElement: HTMLElement;\n  private options: FlickingOptions;\n  private panels: Panel[];\n  private clones: Panel[][];\n  // index range of existing panels\n  private range: {\n    min: number;\n    max: number;\n  };\n  private length: number;\n  private lastIndex: number;\n  private cloneCount: number;\n\n  constructor(\n    cameraElement: HTMLElement,\n    options: FlickingOptions,\n  ) {\n    this.cameraElement = cameraElement;\n    this.panels = [];\n    this.clones = [];\n    this.range = {\n      min: -1,\n      max: -1,\n    };\n    this.length = 0;\n    this.cloneCount = 0;\n    this.options = options;\n    this.lastIndex = options.lastIndex;\n  }\n\n  public firstPanel(): Panel | undefined {\n    return this.panels[this.range.min];\n  }\n\n  public lastPanel(): Panel | undefined {\n    return this.panels[this.range.max];\n  }\n\n  public allPanels(): ReadonlyArray<Panel> {\n    return [\n      ...this.panels,\n      ...this.clones.reduce((allClones, clones) => [...allClones, ...clones], []),\n    ];\n  }\n\n  public originalPanels(): ReadonlyArray<Panel> {\n    return this.panels;\n  }\n\n  public clonedPanels(): ReadonlyArray<Panel[]> {\n    return this.clones;\n  }\n\n  public replacePanels(newPanels: Panel[], newClones: Panel[][]): void {\n    this.panels = newPanels;\n    this.clones = newClones;\n\n    this.range = {\n      min: findIndex(newPanels, panel => Boolean(panel)),\n      max: newPanels.length - 1,\n    };\n    this.length = newPanels.filter(panel => Boolean(panel)).length;\n  }\n\n  public has(index: number): boolean {\n    return !!this.panels[index];\n  }\n\n  public get(index: number): Panel | undefined {\n    return this.panels[index];\n  }\n\n  public getPanelCount(): number {\n    return this.length;\n  }\n\n  public getLastIndex(): number {\n    return this.lastIndex;\n  }\n\n  public getRange(): Readonly<{ min: number, max: number }> {\n    return this.range;\n  }\n\n  public getCloneCount(): number {\n    return this.cloneCount;\n  }\n\n  public setLastIndex(lastIndex: number): void {\n    this.lastIndex = lastIndex;\n\n    const firstPanel = this.firstPanel();\n    const lastPanel = this.lastPanel();\n\n    if (!firstPanel || !lastPanel) {\n      return; // no meaning of updating range & length\n    }\n\n    // Remove panels above new last index\n    const range = this.range;\n    if (lastPanel.getIndex() > lastIndex) {\n      const removingPanels = this.panels.splice(lastIndex + 1);\n      this.length -= removingPanels.length;\n\n      const firstRemovedPanel = removingPanels.filter(panel => !!panel)[0];\n      const possibleLastPanel = firstRemovedPanel.prevSibling;\n      if (possibleLastPanel) {\n        range.max = possibleLastPanel.getIndex();\n      } else {\n        range.min = -1;\n        range.max = -1;\n      }\n\n      if (this.shouldRender()) {\n        removingPanels.forEach(panel => panel.removeElement());\n      }\n    }\n  }\n\n  public setCloneCount(cloneCount: number): void {\n    this.cloneCount = cloneCount;\n  }\n\n  // Insert at index\n  // Returns pushed elements from index, inserting at 'empty' position doesn't push elements behind it\n  public insert(index: number, newPanels: Panel[]): number {\n    const panels = this.panels;\n    const range = this.range;\n    const isCircular = this.options.circular;\n    const lastIndex = this.lastIndex;\n\n    // Find first panel that index is greater than inserting index\n    const nextSibling = this.findFirstPanelFrom(index);\n\n    // if it's null, element will be inserted at last position\n    // https://developer.mozilla.org/ko/docs/Web/API/Node/insertBefore#Syntax\n    const firstPanel = this.firstPanel();\n    const siblingElement = nextSibling\n      ? nextSibling.getElement()\n      : isCircular && firstPanel\n        ? firstPanel.getClonedPanels()[0].getElement()\n        : null;\n\n    // Insert panels before sibling element\n    this.insertNewPanels(newPanels, siblingElement);\n\n    let pushedIndex = newPanels.length;\n    // Like when setting index 50 while visible panels are 0, 1, 2\n    if (index > range.max) {\n      newPanels.forEach((panel, offset) => {\n        panels[index + offset] = panel;\n      });\n    } else {\n      const panelsAfterIndex = panels.slice(index, index + newPanels.length);\n      // Find empty from beginning\n      let emptyPanelCount = findIndex(panelsAfterIndex, panel => !!panel);\n      if (emptyPanelCount < 0) {\n        // All empty\n        emptyPanelCount = panelsAfterIndex.length;\n      }\n      pushedIndex = newPanels.length - emptyPanelCount;\n\n      // Insert removing empty panels\n      panels.splice(index, emptyPanelCount, ...newPanels);\n\n      // Remove panels after last index\n      if (panels.length > lastIndex + 1) {\n        const removedPanels = panels.splice(lastIndex + 1)\n          .filter(panel => Boolean(panel));\n        this.length -= removedPanels.length;\n\n        // Find first\n        const newLastIndex = lastIndex - findIndex(this.panels.concat().reverse(), panel => !!panel);\n\n        // Can be filled with empty after newLastIndex\n        this.panels.splice(newLastIndex + 1);\n        this.range.max = newLastIndex;\n\n        if (this.shouldRender()) {\n          removedPanels.forEach(panel => panel.removeElement());\n        }\n      }\n    }\n\n    // Update index of previous panels\n    if (pushedIndex > 0) {\n      panels.slice(index + newPanels.length).forEach(panel => {\n        panel.setIndex(panel.getIndex() + pushedIndex);\n      });\n    }\n\n    // Update state\n    this.length += newPanels.length;\n    this.updateIndex(index);\n\n    if (isCircular) {\n      this.addNewClones(index, newPanels, newPanels.length - pushedIndex, nextSibling);\n      const clones = this.clones;\n      const panelCount = this.panels.length;\n      if (clones[0] && clones[0].length > lastIndex + 1) {\n        clones.forEach(cloneSet => {\n          cloneSet.splice(panelCount);\n        });\n      }\n    }\n\n    return pushedIndex;\n  }\n\n  public replace(index: number, newPanels: Panel[]): Panel[] {\n    const panels = this.panels;\n    const range = this.range;\n    const options = this.options;\n    const isCircular = options.circular;\n\n    // Find first panel that index is greater than inserting index\n    const nextSibling = this.findFirstPanelFrom(index + newPanels.length);\n\n    // if it's null, element will be inserted at last position\n    // https://developer.mozilla.org/ko/docs/Web/API/Node/insertBefore#Syntax\n    const firstPanel = this.firstPanel();\n    const siblingElement = nextSibling\n      ? nextSibling.getElement()\n      : isCircular && firstPanel\n        ? firstPanel.getClonedPanels()[0].getElement()\n        : null;\n\n    // Insert panels before sibling element\n    this.insertNewPanels(newPanels, siblingElement);\n\n    if (index > range.max) {\n      // Temporarily insert null at index to use splice()\n      (panels[index] as any) = null;\n    }\n\n    const replacedPanels = panels.splice(index, newPanels.length, ...newPanels);\n    const wasNonEmptyCount = replacedPanels.filter(panel => Boolean(panel)).length;\n\n    // Suppose inserting [1, 2, 3] at 0 position when there were [empty, 1]\n    // So length should be increased by 3(inserting panels) - 1(non-empty panels)\n    this.length += newPanels.length - wasNonEmptyCount;\n    this.updateIndex(index);\n\n    if (isCircular) {\n      this.addNewClones(index, newPanels, newPanels.length, nextSibling);\n    }\n\n    if (this.shouldRender()) {\n      replacedPanels.forEach(panel => panel && panel.removeElement());\n    }\n\n    return replacedPanels;\n  }\n\n  public remove(index: number, deleteCount: number = 1): Panel[] {\n    const isCircular = this.options.circular;\n    const panels = this.panels;\n    const clones = this.clones;\n    // Delete count should be equal or larger than 0\n    deleteCount = Math.max(deleteCount, 0);\n\n    const deletedPanels = panels\n      .splice(index, deleteCount)\n      .filter(panel => !!panel);\n\n    if (this.shouldRender()) {\n      deletedPanels.forEach(panel => panel.removeElement());\n    }\n\n    if (isCircular) {\n      clones.forEach(cloneSet => {\n        cloneSet.splice(index, deleteCount);\n      });\n    }\n\n    // Update indexes\n    panels\n      .slice(index)\n      .forEach(panel => {\n        panel.setIndex(panel.getIndex() - deleteCount);\n      });\n\n    // Check last panel is empty\n    let lastIndex = panels.length - 1;\n    if (!panels[lastIndex]) {\n      const reversedPanels = panels.concat().reverse();\n      const nonEmptyIndexFromLast = findIndex(reversedPanels, panel => !!panel);\n      lastIndex = nonEmptyIndexFromLast < 0\n        ? -1 // All empty\n        : lastIndex - nonEmptyIndexFromLast;\n\n      // Remove all empty panels from last\n      panels.splice(lastIndex + 1);\n      if (isCircular) {\n        clones.forEach(cloneSet => {\n          cloneSet.splice(lastIndex + 1);\n        });\n      }\n    }\n\n    // Update range & length\n    this.range = {\n      min: findIndex(panels, panel => !!panel),\n      max: lastIndex,\n    };\n    this.length -= deletedPanels.length;\n\n    if (this.length <= 0) {\n      // Reset clones\n      this.clones = [];\n      this.cloneCount = 0;\n    }\n\n    return deletedPanels;\n  }\n\n  public chainAllPanels() {\n    const allPanels = this.allPanels().filter(panel => !!panel);\n    const allPanelsCount = allPanels.length;\n\n    if (allPanelsCount <= 1) {\n      return;\n    }\n\n    allPanels.slice(1, allPanels.length - 1).forEach((panel, idx) => {\n      const prevPanel = allPanels[idx];\n      const nextPanel = allPanels[idx + 2];\n\n      panel.prevSibling = prevPanel;\n      panel.nextSibling = nextPanel;\n    });\n\n    const firstPanel = allPanels[0];\n    const lastPanel = allPanels[allPanelsCount - 1];\n\n    firstPanel.prevSibling = null;\n    firstPanel.nextSibling = allPanels[1];\n    lastPanel.prevSibling = allPanels[allPanelsCount - 2];\n    lastPanel.nextSibling = null;\n\n    if (this.options.circular) {\n      firstPanel.prevSibling = lastPanel;\n      lastPanel.nextSibling = firstPanel;\n    }\n  }\n\n  public insertClones(cloneIndex: number, index: number, clonedPanels: Panel[], deleteCount: number = 0): void {\n    const clones = this.clones;\n    const lastIndex = this.lastIndex;\n\n    if (!clones[cloneIndex]) {\n      const newClones: Panel[] = [];\n      clonedPanels.forEach((panel, offset) => {\n        newClones[index + offset] = panel;\n      });\n\n      clones[cloneIndex] = newClones;\n    } else {\n      const insertTarget = clones[cloneIndex];\n\n      if (index >= insertTarget.length) {\n        clonedPanels.forEach((panel, offset) => {\n          insertTarget[index + offset] = panel;\n        });\n      } else {\n        insertTarget.splice(index, deleteCount, ...clonedPanels);\n        // Remove panels after last index\n        if (clonedPanels.length > lastIndex + 1) {\n          clonedPanels.splice(lastIndex + 1);\n        }\n      }\n    }\n  }\n\n  // clones are operating in set\n  public removeClonesAfter(cloneIndex: number): void {\n    const panels = this.panels;\n\n    panels.forEach(panel => {\n      panel.removeClonedPanelsAfter(cloneIndex);\n    });\n    this.clones.splice(cloneIndex);\n  }\n\n  public findPanelOf(element: HTMLElement): Panel | undefined {\n    const allPanels = this.allPanels();\n    for (const panel of allPanels) {\n      if (!panel) {\n        continue;\n      }\n      const panelElement = panel.getElement();\n      if (panelElement.contains(element)) {\n        return panel;\n      }\n    }\n  }\n\n  public findFirstPanelFrom(index: number): Panel | undefined {\n    for (const panel of this.panels.slice(index)) {\n      if (panel && panel.getIndex() >= index && panel.getElement().parentNode) {\n        return panel;\n      }\n    }\n  }\n\n  private addNewClones(index: number, originalPanels: Panel[], deleteCount: number, nextSibling: Panel | undefined) {\n    const cameraElement = this.cameraElement;\n    const cloneCount = this.getCloneCount();\n    const lastPanel = this.lastPanel();\n    const lastPanelClones: Panel[] = lastPanel\n      ? lastPanel.getClonedPanels()\n      : [];\n    const nextSiblingClones: Panel[] = nextSibling\n      ? nextSibling.getClonedPanels()\n      : [];\n\n    for (const cloneIndex of counter(cloneCount)) {\n      const cloneNextSibling = nextSiblingClones[cloneIndex];\n      const lastPanelSibling = lastPanelClones[cloneIndex];\n\n      const cloneSiblingElement = cloneNextSibling\n        ? cloneNextSibling.getElement()\n        : lastPanelSibling\n          ? lastPanelSibling.getElement().nextElementSibling\n          : null;\n\n      const newClones = originalPanels.map(panel => {\n        const clone = panel.clone(cloneIndex);\n\n        if (this.shouldRender()) {\n          cameraElement.insertBefore(clone.getElement(), cloneSiblingElement);\n        }\n\n        return clone;\n      });\n\n      this.insertClones(cloneIndex, index, newClones, deleteCount);\n    }\n  }\n\n  private updateIndex(insertingIndex: number) {\n    const panels = this.panels;\n    const range = this.range;\n\n    const newLastIndex = panels.length - 1;\n    if (newLastIndex > range.max) {\n      range.max = newLastIndex;\n    }\n    if (insertingIndex < range.min || range.min < 0) {\n      range.min = insertingIndex;\n    }\n  }\n\n  private insertNewPanels(newPanels: Panel[], siblingElement: HTMLElement | null) {\n    if (this.shouldRender()) {\n      const fragment = document.createDocumentFragment();\n      newPanels.forEach(panel => fragment.appendChild(panel.getElement()));\n      this.cameraElement.insertBefore(fragment, siblingElement);\n    }\n  }\n\n  private shouldRender(): boolean {\n    const options = this.options;\n\n    return !options.renderExternal && !options.renderOnlyVisible;\n  }\n}\n\nexport default PanelManager;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Panel from \""../components/Panel\"";\nimport { ValueOf, Direction, StateType, FlickingContext } from \""../types\"";\n\nabstract class State {\n  public delta: number = 0;\n  public direction: ValueOf<Direction> | null = null;\n  public targetPanel: Panel | null = null;\n  public lastPosition: number = 0;\n  public abstract readonly type: ValueOf<StateType>;\n  public abstract readonly holding: boolean;\n  public abstract readonly playing: boolean;\n\n  public onEnter(prevState: State): void {\n    this.delta = prevState.delta;\n    this.direction = prevState.direction;\n    this.targetPanel = prevState.targetPanel;\n    this.lastPosition = prevState.lastPosition;\n  }\n\n  public onExit(nextState: State): void {\n    // DO NOTHING\n  }\n\n  public onHold(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n\n  public onChange(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n\n  public onRelease(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n\n  public onAnimationEnd(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n\n  public onFinish(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n}\n\nexport default State;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { EVENTS, STATE_TYPE } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\n\nclass IdleState extends State {\n  public readonly type = STATE_TYPE.IDLE;\n  public readonly holding = false;\n  public readonly playing = false;\n\n  public onEnter() {\n    this.direction = null;\n    this.targetPanel = null;\n    this.delta = 0;\n    this.lastPosition = 0;\n  }\n\n  public onHold(e: any, { flicking, viewport, triggerEvent, transitTo }: FlickingContext): void {\n    // Shouldn't do any action until any panels on flicking area\n    if (flicking.getPanelCount() <= 0) {\n      if (viewport.options.infinite) {\n        viewport.moveCamera(viewport.getCameraPosition(), e);\n      }\n      transitTo(STATE_TYPE.DISABLED);\n      return;\n    }\n\n    this.lastPosition = viewport.getCameraPosition();\n    triggerEvent(EVENTS.HOLD_START, e, true)\n      .onSuccess(() => {\n        transitTo(STATE_TYPE.HOLDING);\n      })\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  // By methods call\n  public onChange(e: any, context: FlickingContext): void {\n    const { triggerEvent, transitTo } = context;\n\n    triggerEvent(EVENTS.MOVE_START, e, false)\n      .onSuccess(() => {\n        // Trigger AnimatingState's onChange, to trigger \""move\"" event immediately\n        transitTo(STATE_TYPE.ANIMATING)\n          .onChange(e, context);\n      })\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n}\n\nexport default IdleState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { STATE_TYPE, EVENTS, DIRECTION } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\n\nclass HoldingState extends State {\n  public readonly type = STATE_TYPE.HOLDING;\n  public readonly holding = true;\n  public readonly playing = true;\n\n  private releaseEvent: any = null;\n\n  public onChange(e: any, context: FlickingContext): void {\n    const { flicking, triggerEvent, transitTo } = context;\n\n    const offset = flicking.options.horizontal\n      ? e.inputEvent.offsetX\n      : e.inputEvent.offsetY;\n    this.direction = offset < 0\n      ? DIRECTION.NEXT\n      : DIRECTION.PREV;\n\n    triggerEvent(EVENTS.MOVE_START, e, true)\n      .onSuccess(() => {\n        // Trigger DraggingState's onChange, to trigger \""move\"" event immediately\n        transitTo(STATE_TYPE.DRAGGING)\n          .onChange(e, context);\n      })\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  public onRelease(e: any, context: FlickingContext): void {\n    const { viewport, triggerEvent, transitTo } = context;\n\n    triggerEvent(EVENTS.HOLD_END, e, true);\n\n    if (e.delta.flick !== 0) {\n      // Sometimes \""release\"" event on axes triggered before \""change\"" event\n      // Especially if user flicked panel fast in really short amount of time\n      // if delta is not zero, that means above case happened.\n\n      // Event flow should be HOLD_START -> MOVE_START -> MOVE -> HOLD_END\n      // At least one move event should be included between holdStart and holdEnd\n      e.setTo({ flick: viewport.getCameraPosition() }, 0);\n      transitTo(STATE_TYPE.IDLE);\n      return;\n    }\n\n    // Can't handle select event here,\n    // As \""finish\"" axes event happens\n    this.releaseEvent = e;\n  }\n\n  public onFinish(e: any, { viewport, triggerEvent, transitTo }: FlickingContext): void {\n    // Should transite to IDLE state before select event\n    // As user expects hold is already finished\n    transitTo(STATE_TYPE.IDLE);\n\n    if (!this.releaseEvent) {\n      return;\n    }\n\n    // Handle release event here\n    // To prevent finish event called twice\n    const releaseEvent = this.releaseEvent;\n\n    // Static click\n    const srcEvent = releaseEvent.inputEvent.srcEvent;\n\n    let clickedElement: HTMLElement;\n    if (srcEvent.type === \""touchend\"") {\n      const touchEvent = srcEvent as TouchEvent;\n      const touch = touchEvent.changedTouches[0];\n      clickedElement = document.elementFromPoint(touch.clientX, touch.clientY) as HTMLElement;\n    } else {\n      clickedElement = srcEvent.target;\n    }\n    const clickedPanel = viewport.panelManager.findPanelOf(clickedElement);\n    const cameraPosition = viewport.getCameraPosition();\n\n    if (clickedPanel) {\n      const clickedPanelPosition = clickedPanel.getPosition();\n      const direction = clickedPanelPosition > cameraPosition\n        ? DIRECTION.NEXT\n        : clickedPanelPosition < cameraPosition\n          ? DIRECTION.PREV\n          : null;\n\n      // Don't provide axes event, to use axes instance instead\n      triggerEvent(EVENTS.SELECT, null, true, {\n        direction, // Direction to the clicked panel\n        index: clickedPanel.getIndex(),\n        panel: clickedPanel,\n      });\n    }\n  }\n}\n\nexport default HoldingState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { STATE_TYPE, EVENTS } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\n\nclass DraggingState extends State {\n  public readonly type = STATE_TYPE.DRAGGING;\n  public readonly holding = true;\n  public readonly playing = true;\n\n  public onChange(e: any, { moveCamera, transitTo }: FlickingContext): void {\n    if (!e.delta.flick) {\n      return;\n    }\n\n    moveCamera(e)\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  public onRelease(e: any, context: FlickingContext): void {\n    const { flicking, viewport, triggerEvent, transitTo, stopCamera } = context;\n\n    const delta = this.delta;\n    const absDelta = Math.abs(delta);\n    const options = flicking.options;\n    const horizontal = options.horizontal;\n    const moveType = viewport.moveType;\n    const inputEvent = e.inputEvent;\n\n    const velocity = horizontal\n      ? inputEvent.velocityX\n      : inputEvent.velocityY;\n    const inputDelta = horizontal\n      ? inputEvent.deltaX\n      : inputEvent.deltaY;\n    const isNextDirection = Math.abs(velocity) > 1\n      ? velocity < 0\n      : absDelta > 0\n        ? delta > 0\n        : inputDelta < 0;\n\n    const swipeDistance = viewport.options.bound\n      ? Math.max(absDelta, Math.abs(inputDelta))\n      : absDelta;\n    const swipeAngle = inputEvent.deltaX\n      ? Math.abs(180 * Math.atan(inputEvent.deltaY / inputEvent.deltaX) / Math.PI)\n      : 90;\n    const belowAngleThreshold = horizontal\n      ? swipeAngle <= options.thresholdAngle\n      : swipeAngle > options.thresholdAngle;\n    const overThreshold = swipeDistance >= options.threshold\n      && belowAngleThreshold;\n\n    const moveTypeContext = {\n      viewport,\n      axesEvent: e,\n      state: this,\n      swipeDistance,\n      isNextDirection,\n    };\n\n    // Update last position to cope with Axes's animating behavior\n    // Axes uses start position when animation start\n    triggerEvent(EVENTS.HOLD_END, e, true);\n\n    const targetPanel = this.targetPanel;\n    if (!overThreshold && targetPanel) {\n      // Interrupted while animating\n      const interruptDestInfo = moveType.findPanelWhenInterrupted(moveTypeContext);\n\n      viewport.moveTo(\n        interruptDestInfo.panel,\n        interruptDestInfo.destPos,\n        interruptDestInfo.eventType,\n        e,\n        interruptDestInfo.duration,\n      );\n      transitTo(STATE_TYPE.ANIMATING);\n      return;\n    }\n\n    const currentPanel = viewport.getCurrentPanel();\n    const nearestPanel = viewport.getNearestPanel();\n\n    if (!currentPanel || !nearestPanel) {\n      // There're no panels\n      e.stop();\n      transitTo(STATE_TYPE.IDLE);\n      return;\n    }\n\n    const destInfo = overThreshold\n      ? moveType.findTargetPanel(moveTypeContext)\n      : moveType.findRestorePanel(moveTypeContext);\n\n    viewport.moveTo(\n      destInfo.panel,\n      destInfo.destPos,\n      destInfo.eventType,\n      e,\n      destInfo.duration,\n    ).onSuccess(() => {\n      transitTo(STATE_TYPE.ANIMATING);\n    }).onStopped(() => {\n      transitTo(STATE_TYPE.DISABLED);\n      stopCamera(e);\n    });\n  }\n}\n\nexport default DraggingState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { STATE_TYPE, EVENTS } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\nimport { circulate } from \""../utils\"";\n\nclass AnimatingState extends State {\n  public readonly type = STATE_TYPE.ANIMATING;\n  public readonly holding = false;\n  public readonly playing = true;\n\n  public onHold(e: any, { viewport, triggerEvent, transitTo }: FlickingContext): void {\n    const options = viewport.options;\n    const scrollArea = viewport.getScrollArea();\n    const scrollAreaSize = viewport.getScrollAreaSize();\n    const loopCount = Math.floor((this.lastPosition + this.delta - scrollArea.prev) / scrollAreaSize);\n\n    const targetPanel = this.targetPanel;\n    if (options.circular && loopCount !== 0 && targetPanel) {\n      const cloneCount = viewport.panelManager.getCloneCount();\n      const originalTargetPosition = targetPanel.getPosition();\n\n      // cloneIndex is from -1 to cloneCount - 1\n      const newCloneIndex = circulate(targetPanel.getCloneIndex() - loopCount, -1, cloneCount - 1, true);\n      const newTargetPosition = originalTargetPosition - loopCount * scrollAreaSize;\n      const newTargetPanel = targetPanel.getIdenticalPanels()[newCloneIndex + 1].clone(newCloneIndex, true);\n\n      // Set new target panel considering looped count\n      newTargetPanel.setPosition(newTargetPosition);\n      this.targetPanel = newTargetPanel;\n    }\n\n    // Reset last position and delta\n    this.delta = 0;\n    this.lastPosition = viewport.getCameraPosition();\n\n    // Update current panel as current nearest panel\n    viewport.setCurrentPanel(viewport.getNearestPanel()!);\n    triggerEvent(EVENTS.HOLD_START, e, true)\n      .onSuccess(() => {\n        transitTo(STATE_TYPE.DRAGGING);\n      })\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  public onChange(e: any, { moveCamera, transitTo }: FlickingContext): void {\n    if (!e.delta.flick) {\n      return;\n    }\n\n    moveCamera(e)\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  public onFinish(e: any, { flicking, viewport, triggerEvent, transitTo }: FlickingContext) {\n    const isTrusted = e && e.isTrusted;\n\n    viewport.options.bound\n      ? viewport.setCurrentPanel(this.targetPanel!)\n      : viewport.setCurrentPanel(viewport.getNearestPanel()!);\n\n    if (flicking.options.adaptive) {\n      viewport.updateAdaptiveSize();\n    }\n\n    transitTo(STATE_TYPE.IDLE);\n    triggerEvent(EVENTS.MOVE_END, e, isTrusted, {\n      direction: this.direction,\n    });\n  }\n}\n\nexport default AnimatingState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { STATE_TYPE } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\n\nclass DisabledState extends State {\n  public readonly type = STATE_TYPE.DISABLED;\n  public readonly holding = false;\n  public readonly playing = true;\n\n  public onAnimationEnd(e: any, { transitTo }: FlickingContext): void {\n    transitTo(STATE_TYPE.IDLE);\n  }\n\n  public onChange(e: any, { viewport, transitTo }: FlickingContext): void {\n    // Can stop Axes's change event\n    e.stop();\n\n    // Should update axes position as it's already changed at this moment\n    viewport.updateAxesPosition(viewport.getCameraPosition());\n    transitTo(STATE_TYPE.IDLE);\n  }\n\n  public onRelease(e: any, { transitTo }: FlickingContext): void {\n    // This is needed when stopped hold start event\n    if (e.delta.flick === 0) {\n      transitTo(STATE_TYPE.IDLE);\n    }\n  }\n}\n\nexport default DisabledState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""../states/State\"";\nimport { AxesEventType, ValueOf, FlickingContext, StateType } from \""../types\"";\nimport { AXES_EVENTS, STATE_TYPE } from \""../consts\"";\nimport IdleState from \""../states/IdleState\"";\nimport HoldingState from \""../states/HoldingState\"";\nimport DraggingState from \""../states/DraggingState\"";\nimport AnimatingState from \""../states/AnimatingState\"";\nimport DisabledState from \""../states/DisabledState\"";\n\nclass StateMachine {\n  private state: State = new IdleState();\n\n  public fire(eventType: ValueOf<AxesEventType>, e: any, context: FlickingContext) {\n    const currentState = this.state;\n    switch (eventType) {\n      case AXES_EVENTS.HOLD:\n        currentState.onHold(e, context);\n        break;\n      case AXES_EVENTS.CHANGE:\n        currentState.onChange(e, context);\n        break;\n      case AXES_EVENTS.RELEASE:\n        currentState.onRelease(e, context);\n        break;\n      case AXES_EVENTS.ANIMATION_END:\n        currentState.onAnimationEnd(e, context);\n        break;\n      case AXES_EVENTS.FINISH:\n        currentState.onFinish(e, context);\n        break;\n    }\n  }\n\n  public getState(): State {\n    return this.state;\n  }\n\n  public transitTo = (nextStateType: ValueOf<StateType>): State => {\n    const currentState = this.state;\n\n    if (currentState.type !== nextStateType) {\n      let nextState: State;\n\n      switch (nextStateType) {\n        case STATE_TYPE.IDLE:\n          nextState = new IdleState();\n          break;\n        case STATE_TYPE.HOLDING:\n          nextState = new HoldingState();\n          break;\n        case STATE_TYPE.DRAGGING:\n          nextState = new DraggingState();\n          break;\n        case STATE_TYPE.ANIMATING:\n          nextState = new AnimatingState();\n          break;\n        case STATE_TYPE.DISABLED:\n          nextState = new DisabledState();\n          break;\n      }\n\n      currentState.onExit(nextState!);\n      nextState!.onEnter(currentState);\n\n      this.state = nextState!;\n    }\n    return this.state;\n  }\n}\n\nexport default StateMachine;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { MoveTypeStringOption, MoveTypeContext, DestinationInfo } from \""../types\"";\nimport Panel from \""../components/Panel\"";\nimport { EVENTS } from \""../consts\"";\n\nabstract class MoveType {\n  protected readonly abstract type: string;\n\n  public abstract findTargetPanel(ctx: MoveTypeContext): DestinationInfo;\n\n  public is(type: MoveTypeStringOption): boolean {\n    return type === this.type;\n  }\n\n  public findRestorePanel(ctx: MoveTypeContext): DestinationInfo {\n    const viewport = ctx.viewport;\n    const options = viewport.options;\n\n    const panel = options.circular\n      ? this.findRestorePanelInCircularMode(ctx)\n      : viewport.getCurrentPanel()!;\n\n    return {\n      panel,\n      destPos: viewport.findEstimatedPosition(panel),\n      duration: options.duration,\n      eventType: EVENTS.RESTORE,\n    };\n  }\n\n  public findPanelWhenInterrupted(ctx: MoveTypeContext): DestinationInfo {\n    const { state, viewport } = ctx;\n    const targetPanel = state.targetPanel!;\n\n    return {\n      panel: targetPanel,\n      destPos: viewport.findEstimatedPosition(targetPanel),\n      duration: viewport.options.duration,\n      eventType: \""\"",\n    };\n  }\n\n  // Calculate minimum distance to \""change\"" panel\n  protected calcBrinkOfChange(ctx: MoveTypeContext): number {\n    const { viewport, isNextDirection } = ctx;\n\n    const options = viewport.options;\n    const currentPanel = viewport.getCurrentPanel()!;\n    const halfGap = options.gap / 2;\n\n    const relativeAnchorPosition = currentPanel.getRelativeAnchorPosition();\n\n    // Minimum distance needed to decide prev/next panel as nearest\n    /*\n     * |  Prev  |     Next     |\n     * |--------|--------------|\n     * [][      |<-Anchor    ][] <- Panel + Half-Gap\n     */\n    let minimumDistanceToChange = isNextDirection\n      ? currentPanel.getSize() - relativeAnchorPosition + halfGap\n      : relativeAnchorPosition + halfGap;\n\n    minimumDistanceToChange = Math.max(minimumDistanceToChange, options.threshold);\n\n    return minimumDistanceToChange;\n  }\n\n  private findRestorePanelInCircularMode(ctx: MoveTypeContext): Panel {\n    const viewport = ctx.viewport;\n    const originalPanel = viewport.getCurrentPanel()!.getOriginalPanel();\n    const hangerPosition = viewport.getHangerPosition();\n\n    const firstClonedPanel = originalPanel.getIdenticalPanels()[1];\n    const lapped = Math.abs(originalPanel.getAnchorPosition() - hangerPosition)\n      > Math.abs(firstClonedPanel.getAnchorPosition() - hangerPosition);\n\n    return (!ctx.isNextDirection && lapped)\n      ? firstClonedPanel\n      : originalPanel;\n  }\n}\n\nexport default MoveType;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport MoveType from \""./MoveType\"";\nimport { MOVE_TYPE, EVENTS } from \""../consts\"";\nimport { MoveTypeContext, DestinationInfo } from \""../types\"";\nimport { clamp } from \""../utils\"";\n\nclass Snap extends MoveType {\n  protected readonly type: string = MOVE_TYPE.SNAP;\n  protected count: number;\n\n  constructor(count: number) {\n    super();\n    this.count = count;\n  }\n\n  public findTargetPanel(ctx: MoveTypeContext): DestinationInfo {\n    const { viewport, axesEvent, swipeDistance } = ctx;\n    const snapCount = this.count;\n    const eventDelta = Math.abs(axesEvent.delta.flick);\n    const currentPanel = viewport.getCurrentPanel()!;\n    const nearestPanel = viewport.getNearestPanel()!;\n    const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n    const nearestIsCurrent = nearestPanel.getIndex() === currentPanel.getIndex();\n\n    // This can happen when bounce is 0\n    const shouldMoveWhenBounceIs0 = viewport.canSetBoundMode() && nearestIsCurrent;\n    const shouldMoveToAdjacent = !viewport.isOutOfBound()\n      && (swipeDistance <= minimumDistanceToChange || shouldMoveWhenBounceIs0);\n\n    if (snapCount > 1 && eventDelta > minimumDistanceToChange) {\n      return this.findSnappedPanel(ctx);\n    } else if (shouldMoveToAdjacent) {\n      return this.findAdjacentPanel(ctx);\n    } else {\n      return {\n        panel: nearestPanel,\n        duration: viewport.options.duration,\n        destPos: viewport.findEstimatedPosition(nearestPanel),\n        // As swipeDistance holds mouse/touch position change regardless of bounce option value\n        // swipDistance > minimumDistanceToChange can happen in bounce area\n        // Second condition is for handling that.\n        eventType: (swipeDistance <= minimumDistanceToChange)\n          || (viewport.isOutOfBound() && nearestIsCurrent)\n          ? EVENTS.RESTORE\n          : EVENTS.CHANGE,\n      };\n    }\n  }\n\n  protected findSnappedPanel(ctx: MoveTypeContext): DestinationInfo {\n    const { axesEvent, viewport, state, isNextDirection } = ctx;\n\n    const eventDelta = Math.abs(axesEvent.delta.flick);\n    const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n    const snapCount = this.count;\n    const options = viewport.options;\n    const scrollAreaSize = viewport.getScrollAreaSize();\n    const halfGap = options.gap / 2;\n    const estimatedHangerPos = axesEvent.destPos.flick + viewport.getRelativeHangerPosition();\n\n    let panelToMove = viewport.getNearestPanel()!;\n    let cycleIndex = panelToMove.getCloneIndex() + 1; // 0(original) or 1(clone)\n    let passedPanelCount = 0;\n\n    while (passedPanelCount < snapCount) {\n      // Since panelToMove holds also cloned panels, we should use original panel's position\n      const originalPanel = panelToMove.getOriginalPanel();\n      const panelPosition = originalPanel.getPosition() + cycleIndex * scrollAreaSize;\n      const panelSize = originalPanel.getSize();\n\n      const panelNextPosition = panelPosition + panelSize + halfGap;\n      const panelPrevPosition = panelPosition - halfGap;\n\n      // Current panelToMove contains destPos\n      if (\n        (isNextDirection && panelNextPosition > estimatedHangerPos)\n        || (!isNextDirection && panelPrevPosition < estimatedHangerPos)\n      ) {\n        break;\n      }\n\n      const siblingPanel = isNextDirection\n        ? panelToMove.nextSibling\n        : panelToMove.prevSibling;\n      if (!siblingPanel) {\n        break;\n      }\n\n      const panelIndex = panelToMove.getIndex();\n      const siblingIndex = siblingPanel.getIndex();\n      if ((isNextDirection && siblingIndex <= panelIndex)\n        || (!isNextDirection && siblingIndex >= panelIndex)\n      ) {\n        cycleIndex = isNextDirection\n          ? cycleIndex + 1\n          : cycleIndex - 1;\n      }\n      panelToMove = siblingPanel;\n      passedPanelCount += 1;\n    }\n\n    const originalPosition = panelToMove.getOriginalPanel().getPosition();\n\n    if (cycleIndex !== 0) {\n      panelToMove = panelToMove.clone(panelToMove.getCloneIndex(), true);\n      panelToMove.setPosition(originalPosition + cycleIndex * scrollAreaSize);\n    }\n\n    const defaultDuration = viewport.options.duration;\n    const duration = clamp(axesEvent.duration, defaultDuration, defaultDuration * passedPanelCount);\n\n    return {\n      panel: panelToMove,\n      destPos: viewport.findEstimatedPosition(panelToMove),\n      duration,\n      eventType: Math.max(eventDelta, state.delta) > minimumDistanceToChange\n        ? EVENTS.CHANGE\n        : EVENTS.RESTORE,\n    };\n  }\n\n  private findAdjacentPanel(ctx: MoveTypeContext): DestinationInfo {\n    const { viewport, isNextDirection } = ctx;\n\n    const options = viewport.options;\n    const currentIndex = viewport.getCurrentIndex();\n    const currentPanel = viewport.panelManager.get(currentIndex)!;\n    const hangerPosition = viewport.getHangerPosition();\n    const scrollArea = viewport.getScrollArea();\n\n    const firstClonedPanel = currentPanel.getIdenticalPanels()[1];\n    const lapped = options.circular\n      && (Math.abs(currentPanel.getAnchorPosition() - hangerPosition)\n        > Math.abs(firstClonedPanel.getAnchorPosition() - hangerPosition));\n\n    // If lapped in circular mode, use first cloned panel as base panel\n    const basePanel = lapped\n      ? firstClonedPanel\n      : currentPanel;\n    const basePosition = basePanel.getPosition();\n\n    const adjacentPanel = isNextDirection\n      ? basePanel.nextSibling\n      : basePanel.prevSibling;\n\n    const eventType = adjacentPanel\n      ? EVENTS.CHANGE\n      : EVENTS.RESTORE;\n    const panelToMove = adjacentPanel\n      ? adjacentPanel\n      : basePanel;\n    const targetRelativeAnchorPosition = panelToMove.getRelativeAnchorPosition();\n\n    const estimatedPanelPosition = options.circular\n      ? isNextDirection\n        ? basePosition + basePanel.getSize() + targetRelativeAnchorPosition + options.gap\n        : basePosition - (panelToMove.getSize() - targetRelativeAnchorPosition) - options.gap\n      : panelToMove.getAnchorPosition();\n    const estimatedPosition = estimatedPanelPosition - viewport.getRelativeHangerPosition();\n    const destPos = viewport.canSetBoundMode()\n      ? clamp(estimatedPosition, scrollArea.prev, scrollArea.next)\n      : estimatedPosition;\n\n    return {\n      panel: panelToMove,\n      destPos,\n      duration: options.duration,\n      eventType,\n    };\n  }\n}\n\nexport default Snap;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Snap from \""./Snap\"";\nimport { MOVE_TYPE, EVENTS } from \""../consts\"";\nimport { MoveTypeContext, DestinationInfo } from \""../types\"";\nimport { circulate, clamp } from \""../utils\"";\n\nclass FreeScroll extends Snap {\n  protected readonly type: string = MOVE_TYPE.FREE_SCROLL;\n\n  constructor() {\n    // Set snap count to Infinity\n    super(Infinity);\n  }\n\n  public findTargetPanel(ctx: MoveTypeContext): DestinationInfo {\n    const { axesEvent, state, viewport } = ctx;\n    const destPos = axesEvent.destPos.flick;\n    const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n    const scrollArea = viewport.getScrollArea();\n    const currentPanel = viewport.getCurrentPanel()!;\n    const options = viewport.options;\n\n    const delta = Math.abs(axesEvent.delta.flick + state.delta);\n    if (delta > minimumDistanceToChange) {\n      const destInfo = super.findSnappedPanel(ctx);\n\n      destInfo.duration = axesEvent.duration;\n      destInfo.destPos = destPos;\n      destInfo.eventType = !options.circular && destInfo.panel === currentPanel\n        ? \""\""\n        : EVENTS.CHANGE;\n\n      return destInfo;\n    } else {\n      let estimatedPosition = options.circular\n        ? circulate(destPos, scrollArea.prev, scrollArea.next, false)\n        : destPos;\n      estimatedPosition = clamp(estimatedPosition, scrollArea.prev, scrollArea.next);\n      estimatedPosition += viewport.getRelativeHangerPosition();\n\n      const estimatedPanel = viewport.findNearestPanelAt(estimatedPosition)!;\n\n      return {\n        panel: estimatedPanel,\n        destPos,\n        duration: axesEvent.duration,\n        eventType: \""\"",\n      };\n    }\n  }\n\n  public findRestorePanel(ctx: MoveTypeContext): DestinationInfo {\n    return this.findTargetPanel(ctx);\n  }\n\n  public findPanelWhenInterrupted(ctx: MoveTypeContext): DestinationInfo {\n    const { viewport } = ctx;\n\n    return {\n      panel: viewport.getNearestPanel()!,\n      destPos: viewport.getCameraPosition(),\n      duration: 0,\n      eventType: \""\"",\n    };\n  }\n\n  protected calcBrinkOfChange(ctx: MoveTypeContext): number {\n    const { viewport, isNextDirection } = ctx;\n\n    const options = viewport.options;\n    const currentPanel = viewport.getCurrentPanel()!;\n    const halfGap = options.gap / 2;\n\n    const lastPosition = viewport.stateMachine.getState().lastPosition;\n    const currentPanelPosition = currentPanel.getPosition();\n\n    // As camera can stop anywhere in free scroll mode,\n    // minimumDistanceToChange should be calculated differently.\n    // Ref #191(https://github.com/naver/egjs-flicking/issues/191)\n    const lastHangerPosition = lastPosition + viewport.getRelativeHangerPosition();\n\n    const scrollAreaSize = viewport.getScrollAreaSize();\n    let minimumDistanceToChange = isNextDirection\n      ? currentPanelPosition + currentPanel.getSize() - lastHangerPosition + halfGap\n      : lastHangerPosition - currentPanelPosition + halfGap;\n    minimumDistanceToChange = Math.abs(minimumDistanceToChange % scrollAreaSize);\n\n    return Math.min(minimumDistanceToChange, scrollAreaSize - minimumDistanceToChange);\n  }\n}\n\nexport default FreeScroll;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Axes, { PanInput } from \""@egjs/axes\"";\n\nimport Flicking from \""../Flicking\"";\nimport Panel from \""./Panel\"";\nimport PanelManager from \""./PanelManager\"";\nimport StateMachine from \""./StateMachine\"";\nimport MoveType from \""../moves/MoveType\"";\nimport { FlickingOptions, FlickingPanel, FlickingStatus, ElementLike, EventType, TriggerCallback, NeedPanelEvent, FlickingEvent, MoveTypeObjectOption, OriginalStyle, Plugin, DestroyOption, BoundingBox } from \""../types\"";\nimport { DEFAULT_VIEWPORT_CSS, DEFAULT_CAMERA_CSS, TRANSFORM, DEFAULT_OPTIONS, EVENTS, DIRECTION, STATE_TYPE, MOVE_TYPE } from \""../consts\"";\nimport { clamp, applyCSS, toArray, parseArithmeticExpression, isBetween, isArray, parseElement, hasClass, restoreStyle, circulate, findIndex, getBbox } from \""../utils\"";\nimport Snap from \""../moves/Snap\"";\nimport FreeScroll from \""../moves/FreeScroll\"";\n\nexport default class Viewport {\n  public options: FlickingOptions;\n  public stateMachine: StateMachine;\n  public panelManager: PanelManager;\n  public moveType: MoveType;\n\n  private flicking: Flicking;\n  private axes: Axes;\n  private panInput: PanInput;\n\n  private viewportElement: HTMLElement;\n  private cameraElement: HTMLElement;\n\n  private triggerEvent: Flicking[\""triggerEvent\""];\n  private axesHandlers: { [key: string]: any };\n\n  private currentPanel: Panel | undefined;\n  private nearestPanel: Panel | undefined;\n  private visiblePanels: Panel[];\n\n  private plugins: Plugin[] = [];\n  private panelBboxes: { [className: string]: BoundingBox };\n  private state: {\n    size: number;\n    position: number;\n    panelMaintainRatio: number;\n    relativeHangerPosition: number;\n    positionOffset: number;\n    scrollArea: {\n      prev: number;\n      next: number;\n    };\n    translate: {\n      name: string,\n      has3d: boolean,\n    };\n    infiniteThreshold: number;\n    checkedIndexes: Array<[number, number]>;\n    visibleIndex: {\n      min: number;\n      max: number;\n    };\n    isAdaptiveCached: boolean;\n    isViewportGiven: boolean;\n    isCameraGiven: boolean;\n    originalViewportStyle: OriginalStyle;\n    originalCameraStyle: OriginalStyle;\n    cachedBbox: BoundingBox | null;\n  };\n\n  constructor(\n    flicking: Flicking,\n    options: FlickingOptions,\n    triggerEvent: Flicking[\""triggerEvent\""],\n  ) {\n    this.flicking = flicking;\n    this.triggerEvent = triggerEvent;\n\n    this.state = {\n      size: 0,\n      position: 0,\n      panelMaintainRatio: 0,\n      relativeHangerPosition: 0,\n      positionOffset: 0,\n      scrollArea: {\n        prev: 0,\n        next: 0,\n      },\n      visibleIndex: {\n        min: NaN,\n        max: NaN,\n      },\n      translate: TRANSFORM,\n      infiniteThreshold: 0,\n      checkedIndexes: [],\n      isAdaptiveCached: false,\n      isViewportGiven: false,\n      isCameraGiven: false,\n      originalViewportStyle: {\n        className: null,\n        style: null,\n      },\n      originalCameraStyle: {\n        className: null,\n        style: null,\n      },\n      cachedBbox: null,\n    };\n    this.options = options;\n    this.stateMachine = new StateMachine();\n    this.visiblePanels = [];\n    this.panelBboxes = {};\n\n    this.build();\n  }\n\n  public moveTo(\n    panel: Panel,\n    destPos: number,\n    eventType: EventType[\""CHANGE\""] | EventType[\""RESTORE\""] | \""\"",\n    axesEvent: any,\n    duration: number = this.options.duration,\n  ): TriggerCallback {\n    const state = this.state;\n    const currentState = this.stateMachine.getState();\n    const currentPosition = state.position;\n\n    const isTrusted = axesEvent\n      ? axesEvent.isTrusted\n      : false;\n    const direction = destPos === currentPosition\n      ? null\n      : destPos > currentPosition\n        ? DIRECTION.NEXT\n        : DIRECTION.PREV;\n\n    let eventResult: TriggerCallback;\n    if (eventType === EVENTS.CHANGE) {\n      eventResult = this.triggerEvent(EVENTS.CHANGE, axesEvent, isTrusted, {\n        index: panel.getIndex(),\n        panel,\n        direction,\n      });\n    } else if (eventType === EVENTS.RESTORE) {\n      eventResult = this.triggerEvent(EVENTS.RESTORE, axesEvent, isTrusted);\n    } else {\n      eventResult = {\n        onSuccess(callback: () => void): TriggerCallback {\n          callback();\n          return this;\n        },\n        onStopped(): TriggerCallback {\n          return this;\n        },\n      };\n    }\n\n    eventResult.onSuccess(() => {\n      currentState.delta = 0;\n      currentState.lastPosition = this.getCameraPosition();\n      currentState.targetPanel = panel;\n      currentState.direction = destPos === currentPosition\n        ? null\n        : destPos > currentPosition\n          ? DIRECTION.NEXT\n          : DIRECTION.PREV;\n\n      if (destPos === currentPosition) {\n        // no move\n        this.nearestPanel = panel;\n        this.currentPanel = panel;\n      }\n\n      if (axesEvent && axesEvent.setTo) {\n        // freeScroll only occurs in release events\n        axesEvent.setTo({ flick: destPos }, duration);\n      } else {\n        this.axes.setTo({ flick: destPos }, duration);\n      }\n    });\n\n    return eventResult;\n  }\n\n  public moveCamera(pos: number, axesEvent?: any): void {\n    const state = this.state;\n    const options = this.options;\n    const transform = state.translate.name;\n    const scrollArea = state.scrollArea;\n\n    // Update position & nearestPanel\n    if (options.circular && !isBetween(pos, scrollArea.prev, scrollArea.next)) {\n      pos = circulate(pos, scrollArea.prev, scrollArea.next, false);\n    }\n    state.position = pos;\n    this.nearestPanel = this.findNearestPanel();\n    const nearestPanel = this.nearestPanel;\n    const originalNearestPosition = nearestPanel\n      ? nearestPanel.getPosition()\n      : 0;\n\n    // From 0(panel position) to 1(panel position + panel size)\n    // When it's on gap area value will be (val > 1 || val < 0)\n    if (nearestPanel) {\n      const hangerPosition = this.getHangerPosition();\n      const panelPosition = nearestPanel.getPosition();\n      const panelSize = nearestPanel.getSize();\n      const halfGap = options.gap / 2;\n\n      // As panel's range is from panel position - half gap ~ panel pos + panel size + half gap\n      state.panelMaintainRatio = (hangerPosition - panelPosition + halfGap) / (panelSize + 2 * halfGap);\n    } else {\n      state.panelMaintainRatio = 0;\n    }\n\n    this.checkNeedPanel(axesEvent);\n\n    // Possibly modified after need panel, if it's looped\n    const modifiedNearestPosition = nearestPanel\n      ? nearestPanel.getPosition()\n      : 0;\n\n    pos += (modifiedNearestPosition - originalNearestPosition);\n    state.position = pos;\n\n    this.updateVisiblePanels();\n\n    // Offset is needed to fix camera layer size in visible-only rendering mode\n    const posOffset = options.renderOnlyVisible\n      ? state.positionOffset\n      : 0;\n    const moveVector = options.horizontal\n      ? [-(pos - posOffset), 0] : [0, -(pos - posOffset)];\n    const moveCoord = moveVector.map(coord => `${Math.round(coord)}px`).join(\"", \"");\n\n    this.cameraElement.style[transform] = state.translate.has3d\n      ? `translate3d(${moveCoord}, 0px)`\n      : `translate(${moveCoord})`;\n  }\n\n  public stopCamera = (axesEvent: any): void => {\n    if (axesEvent && axesEvent.setTo) {\n      axesEvent.setTo({ flick: this.state.position }, 0);\n    }\n\n    this.stateMachine.transitTo(STATE_TYPE.IDLE);\n  }\n\n  public unCacheBbox(): void {\n    const state = this.state;\n    const options = this.options;\n\n    state.cachedBbox = null;\n    state.visibleIndex = { min: NaN, max: NaN };\n\n    const viewportElement = this.viewportElement;\n    if (!options.horizontal) {\n      // Don't preserve previous width for adaptive resizing\n      viewportElement.style.width = \""\"";\n    } else {\n      viewportElement.style.height = \""\"";\n    }\n    state.isAdaptiveCached = false;\n    this.panelBboxes = {};\n  }\n\n  public resize(): void {\n    this.updateSize();\n    this.updateOriginalPanelPositions();\n    this.updateAdaptiveSize();\n    this.updateScrollArea();\n    this.updateClonePanels();\n    this.updateCameraPosition();\n    this.updatePlugins();\n  }\n\n  // Find nearest anchor from current hanger position\n  public findNearestPanel(): Panel | undefined {\n    const state = this.state;\n    const panelManager = this.panelManager;\n    const hangerPosition = this.getHangerPosition();\n\n    if (this.isOutOfBound()) {\n      const position = state.position;\n\n      return position <= state.scrollArea.prev\n        ? panelManager.firstPanel()\n        : panelManager.lastPanel();\n    }\n\n    return this.findNearestPanelAt(hangerPosition);\n  }\n\n  public findNearestPanelAt(position: number): Panel | undefined {\n    const panelManager = this.panelManager;\n\n    const allPanels = panelManager.allPanels();\n    let minimumDistance = Infinity;\n    let nearestPanel: Panel | undefined;\n\n    for (const panel of allPanels) {\n      if (!panel) {\n        continue;\n      }\n      const prevPosition = panel.getPosition();\n      const nextPosition = prevPosition + panel.getSize();\n\n      // Use shortest distance from panel's range\n      const distance = isBetween(position, prevPosition, nextPosition)\n        ? 0\n        : Math.min(\n          Math.abs(prevPosition - position),\n          Math.abs(nextPosition - position),\n        );\n\n      if (distance > minimumDistance) {\n        break;\n      } else if (distance === minimumDistance) {\n        const minimumAnchorDistance = Math.abs(position - nearestPanel!.getAnchorPosition());\n        const anchorDistance = Math.abs(position - panel.getAnchorPosition());\n\n        if (anchorDistance > minimumAnchorDistance) {\n          break;\n        }\n      }\n\n      minimumDistance = distance;\n      nearestPanel = panel;\n    }\n\n    return nearestPanel;\n  }\n\n  public findNearestIdenticalPanel(panel: Panel): Panel {\n    let nearest = panel;\n    let shortestDistance = Infinity;\n    const hangerPosition = this.getHangerPosition();\n\n    const identicals = panel.getIdenticalPanels();\n    identicals.forEach(identical => {\n      const anchorPosition = identical.getAnchorPosition();\n      const distance = Math.abs(anchorPosition - hangerPosition);\n\n      if (distance < shortestDistance) {\n        nearest = identical;\n        shortestDistance = distance;\n      }\n    });\n\n    return nearest;\n  }\n\n  // Find shortest camera position that distance is minimum\n  public findShortestPositionToPanel(panel: Panel): number {\n    const state = this.state;\n    const options = this.options;\n    const anchorPosition = panel.getAnchorPosition();\n    const hangerPosition = this.getHangerPosition();\n    const distance = Math.abs(hangerPosition - anchorPosition);\n    const scrollAreaSize = state.scrollArea.next - state.scrollArea.prev;\n\n    if (!options.circular) {\n      const position = anchorPosition - state.relativeHangerPosition;\n      return this.canSetBoundMode()\n        ? clamp(position, state.scrollArea.prev, state.scrollArea.next)\n        : position;\n    } else {\n      // If going out of viewport border is more efficient way of moving, choose that position\n      return distance <= scrollAreaSize - distance\n        ? anchorPosition - state.relativeHangerPosition\n        : anchorPosition > hangerPosition\n          // PREV TO NEXT\n          ? anchorPosition - state.relativeHangerPosition - scrollAreaSize\n          // NEXT TO PREV\n          : anchorPosition - state.relativeHangerPosition + scrollAreaSize;\n    }\n  }\n\n  public findEstimatedPosition(panel: Panel): number {\n    const scrollArea = this.getScrollArea();\n\n    let estimatedPosition = panel.getAnchorPosition() - this.getRelativeHangerPosition();\n    estimatedPosition = this.canSetBoundMode()\n      ? clamp(estimatedPosition, scrollArea.prev, scrollArea.next)\n      : estimatedPosition;\n\n    return estimatedPosition;\n  }\n\n  public addVisiblePanel(panel: Panel): void {\n    if (this.getVisibleIndexOf(panel) < 0) {\n      this.visiblePanels.push(panel);\n    }\n  }\n\n  public enable(): void {\n    this.panInput.enable();\n  }\n\n  public disable(): void {\n    this.panInput.disable();\n  }\n\n  public insert(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const lastIndex = this.panelManager.getLastIndex();\n\n    // Index should not below 0\n    if (index < 0 || index > lastIndex) {\n      return [];\n    }\n\n    const state = this.state;\n    const options = this.options;\n    const parsedElements = parseElement(element);\n\n    const panels = parsedElements\n      .map((el, idx) => new Panel(el, index + idx, this))\n      .slice(0, lastIndex - index + 1);\n\n    if (panels.length <= 0) {\n      return [];\n    }\n\n    const pushedIndex = this.panelManager.insert(index, panels);\n\n    // ...then calc bbox for all panels\n    this.resizePanels(panels);\n\n    if (!this.currentPanel) {\n      this.currentPanel = panels[0];\n      this.nearestPanel = panels[0];\n\n      const newCenterPanel = panels[0];\n      const newPanelPosition = this.findEstimatedPosition(newCenterPanel);\n      state.position = newPanelPosition;\n      this.updateAxesPosition(newPanelPosition);\n      state.panelMaintainRatio = (newCenterPanel.getRelativeAnchorPosition() + options.gap / 2) / (newCenterPanel.getSize() + options.gap);\n    }\n\n    // Update checked indexes in infinite mode\n    this.updateCheckedIndexes({ min: index, max: index });\n    state.checkedIndexes.forEach((indexes, idx) => {\n      const [min, max] = indexes;\n      if (index < min) {\n        // Push checked index\n        state.checkedIndexes.splice(idx, 1, [min + pushedIndex, max + pushedIndex]);\n      }\n    });\n\n    // Uncache visible index to refresh panels\n    state.visibleIndex = {\n      min: NaN,\n      max: NaN,\n    };\n\n    this.resize();\n\n    return panels;\n  }\n\n  public replace(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const state = this.state;\n    const options = this.options;\n    const panelManager = this.panelManager;\n    const lastIndex = panelManager.getLastIndex();\n\n    // Index should not below 0\n    if (index < 0 || index > lastIndex) {\n      return [];\n    }\n\n    const parsedElements = parseElement(element);\n    const panels = parsedElements\n      .map((el, idx) => new Panel(el, index + idx, this))\n      .slice(0, lastIndex - index + 1);\n\n    if (panels.length <= 0) {\n      return [];\n    }\n\n    const replacedPanels = panelManager.replace(index, panels);\n\n    replacedPanels.forEach(panel => {\n      const visibleIndex = this.getVisibleIndexOf(panel);\n      if (visibleIndex > -1) {\n        this.visiblePanels.splice(visibleIndex, 1);\n      }\n    });\n\n    // ...then calc bbox for all panels\n    this.resizePanels(panels);\n\n    const currentPanel = this.currentPanel;\n    const wasEmpty = !currentPanel;\n    if (wasEmpty) {\n      this.currentPanel = panels[0];\n      this.nearestPanel = panels[0];\n\n      const newCenterPanel = panels[0];\n      const newPanelPosition = this.findEstimatedPosition(newCenterPanel);\n      state.position = newPanelPosition;\n      this.updateAxesPosition(newPanelPosition);\n      state.panelMaintainRatio = (newCenterPanel.getRelativeAnchorPosition() + options.gap / 2) / (newCenterPanel.getSize() + options.gap);\n    } else if (isBetween(currentPanel!.getIndex(), index, index + panels.length - 1)) {\n      // Current panel is replaced\n      this.currentPanel = panelManager.get(currentPanel!.getIndex());\n    }\n\n    // Update checked indexes in infinite mode\n    this.updateCheckedIndexes({ min: index, max: index + panels.length - 1 });\n\n    // Uncache visible index to refresh panels\n    state.visibleIndex = {\n      min: NaN,\n      max: NaN,\n    };\n\n    this.resize();\n\n    return panels;\n  }\n\n  public remove(index: number, deleteCount: number = 1): FlickingPanel[] {\n    const state = this.state;\n    // Index should not below 0\n    index = Math.max(index, 0);\n\n    const panelManager = this.panelManager;\n    const currentIndex = this.getCurrentIndex();\n\n    const removedPanels = panelManager.remove(index, deleteCount);\n    if (isBetween(currentIndex, index, index + deleteCount - 1)) {\n      // Current panel is removed\n      // Use panel at removing index - 1 as new current panel if it exists\n      const newCurrentIndex = Math.max(index - 1, panelManager.getRange().min);\n      this.currentPanel = panelManager.get(newCurrentIndex);\n    }\n\n    // Update checked indexes in infinite mode\n    if (deleteCount > 0) {\n      // Check whether removing index will affect checked indexes\n      // Suppose index 0 is empty and removed index 1, then checked index 0 should be deleted and vice versa.\n      this.updateCheckedIndexes({ min: index - 1, max: index + deleteCount });\n      // Uncache visible index to refresh panels\n      state.visibleIndex = {\n        min: NaN,\n        max: NaN,\n      };\n    }\n\n    if (panelManager.getPanelCount() <= 0) {\n      this.currentPanel = undefined;\n      this.nearestPanel = undefined;\n    }\n\n    this.resize();\n\n    const scrollArea = state.scrollArea;\n    if (state.position < scrollArea.prev || state.position > scrollArea.next) {\n      const newPosition = circulate(state.position, scrollArea.prev, scrollArea.next, false);\n      this.moveCamera(newPosition);\n      this.updateAxesPosition(newPosition);\n    }\n\n    return removedPanels;\n  }\n\n  public updateAdaptiveSize(): void {\n    const state = this.state;\n    const options = this.options;\n    const horizontal = options.horizontal;\n    const currentPanel = this.getCurrentPanel();\n\n    if (!currentPanel) {\n      return;\n    }\n\n    const shouldApplyAdaptive = options.adaptive || !state.isAdaptiveCached;\n    const viewportStyle = this.viewportElement.style;\n    if (shouldApplyAdaptive) {\n      let sizeToApply: number;\n      if (options.adaptive) {\n        const panelBbox = currentPanel.getBbox();\n\n        sizeToApply = horizontal ? panelBbox.height : panelBbox.width;\n      } else {\n        // Find minimum height of panels to maximum panel size\n        const maximumPanelSize = this.panelManager.originalPanels().reduce((maximum, panel) => {\n          const panelBbox = panel.getBbox();\n          return Math.max(maximum, horizontal ? panelBbox.height : panelBbox.width);\n        }, 0);\n\n        sizeToApply = maximumPanelSize;\n      }\n\n      const viewportBbox = this.updateBbox();\n      sizeToApply = Math.max(sizeToApply, horizontal ? viewportBbox.height : viewportBbox.width);\n\n      state.isAdaptiveCached = true;\n      const viewportSize = `${sizeToApply}px`;\n      if (horizontal) {\n        viewportStyle.height = viewportSize;\n      } else if (!horizontal) {\n        viewportStyle.width = viewportSize;\n      }\n    }\n  }\n\n  public updateBbox(): BoundingBox {\n    const state = this.state;\n    const options = this.options;\n    const viewportElement = this.viewportElement;\n\n    if (!state.cachedBbox) {\n      state.cachedBbox = getBbox(viewportElement, options.useOffset);\n    }\n\n    return state.cachedBbox!;\n  }\n\n  public updatePlugins(): void {\n    // update for resize\n    this.plugins.forEach(plugin => {\n      plugin.update && plugin.update(this.flicking);\n    });\n  }\n\n  public destroy(option: Partial<DestroyOption>): void {\n    const state = this.state;\n    const wrapper = this.flicking.getElement();\n    const viewportElement = this.viewportElement;\n    const cameraElement = this.cameraElement;\n    const originalPanels = this.panelManager.originalPanels();\n\n    this.removePlugins(this.plugins);\n    if (!option.preserveUI) {\n      restoreStyle(viewportElement, state.originalViewportStyle);\n      restoreStyle(cameraElement, state.originalCameraStyle);\n\n      if (!state.isCameraGiven && !this.options.renderExternal) {\n        const topmostElement = state.isViewportGiven\n          ? viewportElement\n          : wrapper;\n        const deletingElement = state.isViewportGiven\n          ? cameraElement\n          : viewportElement;\n\n        originalPanels.forEach(panel => {\n          topmostElement.appendChild(panel.getElement());\n        });\n\n        topmostElement.removeChild(deletingElement);\n      }\n    }\n\n    this.axes.destroy();\n    this.panInput.destroy();\n\n    originalPanels.forEach(panel => { panel.destroy(option); });\n\n    // release resources\n    for (const x in this) {\n      (this as any)[x] = null;\n    }\n  }\n\n  public restore(status: FlickingStatus): void {\n    const panels = status.panels;\n    const defaultIndex = this.options.defaultIndex;\n    const cameraElement = this.cameraElement;\n    const panelManager = this.panelManager;\n\n    // Restore index\n    cameraElement.innerHTML = panels.map(panel => panel.html).join(\""\"");\n\n    // Create panels first\n    this.refreshPanels();\n    const createdPanels = panelManager.originalPanels();\n\n    // ...then order it by its index\n    const orderedPanels: Panel[] = [];\n    panels.forEach((panel, idx) => {\n      const createdPanel = createdPanels[idx];\n      createdPanel.setIndex(panel.index);\n      orderedPanels[panel.index] = createdPanel;\n    });\n    panelManager.replacePanels(orderedPanels, []);\n    panelManager.setCloneCount(0); // No clones at this point\n\n    const panelCount = panelManager.getPanelCount();\n    if (panelCount > 0) {\n      this.currentPanel = panelManager.get(status.index)\n        || panelManager.get(defaultIndex)\n        || panelManager.firstPanel();\n      this.nearestPanel = this.currentPanel;\n    } else {\n      this.currentPanel = undefined;\n      this.nearestPanel = undefined;\n    }\n    this.visiblePanels = orderedPanels.filter(panel => Boolean(panel));\n\n    this.resize();\n\n    this.axes.setTo({ flick: status.position }, 0);\n    this.moveCamera(status.position);\n  }\n\n  public calcVisiblePanels(): Panel[] {\n    const allPanels = this.panelManager.allPanels();\n    if (this.options.renderOnlyVisible) {\n      const { min, max } = this.state.visibleIndex;\n      const visiblePanels = min >= 0\n        ? allPanels.slice(min, max + 1)\n        : allPanels.slice(0, max + 1).concat(allPanels.slice(min));\n\n      return visiblePanels.filter(panel => panel);\n    } else {\n      return allPanels.filter(panel => {\n        const outsetProgress = panel.getOutsetProgress();\n\n        return outsetProgress > -1 && outsetProgress < 1;\n      });\n    }\n  }\n\n  public getCurrentPanel(): Panel | undefined {\n    return this.currentPanel;\n  }\n\n  public getCurrentIndex(): number {\n    const currentPanel = this.currentPanel;\n\n    return currentPanel\n      ? currentPanel.getIndex()\n      : -1;\n  }\n\n  public getNearestPanel(): Panel | undefined {\n    return this.nearestPanel;\n  }\n\n  // Get progress from nearest panel\n  public getCurrentProgress(): number {\n    const currentState = this.stateMachine.getState();\n    let nearestPanel = currentState.playing || currentState.holding\n      ? this.nearestPanel\n      : this.currentPanel;\n\n    const panelManager = this.panelManager;\n    if (!nearestPanel) {\n      // There're no panels\n      return NaN;\n    }\n    const { prev: prevRange, next: nextRange } = this.getScrollArea();\n    const cameraPosition = this.getCameraPosition();\n    const isOutOfBound = this.isOutOfBound();\n    let prevPanel = nearestPanel.prevSibling;\n    let nextPanel = nearestPanel.nextSibling;\n    let hangerPosition = this.getHangerPosition();\n    let nearestAnchorPos = nearestPanel.getAnchorPosition();\n\n    if (\n      isOutOfBound\n      && prevPanel\n      && nextPanel\n      && cameraPosition < nextRange\n      // On the basis of anchor, prevPanel is nearestPanel.\n      && (hangerPosition - prevPanel.getAnchorPosition() < nearestAnchorPos - hangerPosition)\n    ) {\n      nearestPanel = prevPanel;\n      nextPanel = nearestPanel.nextSibling;\n      prevPanel = nearestPanel.prevSibling;\n      nearestAnchorPos = nearestPanel.getAnchorPosition();\n    }\n    const nearestIndex = nearestPanel.getIndex() + (nearestPanel.getCloneIndex() + 1) * panelManager.getPanelCount();\n    const nearestSize = nearestPanel.getSize();\n\n    if (isOutOfBound) {\n      const relativeHangerPosition = this.getRelativeHangerPosition();\n\n      if (nearestAnchorPos > nextRange + relativeHangerPosition) {\n        // next bounce area: hangerPosition - relativeHangerPosition - nextRange\n        hangerPosition = nearestAnchorPos + hangerPosition - relativeHangerPosition - nextRange;\n      } else if (nearestAnchorPos < prevRange + relativeHangerPosition) {\n        // prev bounce area: hangerPosition - relativeHangerPosition - prevRange\n        hangerPosition = nearestAnchorPos + hangerPosition - relativeHangerPosition - prevRange;\n      }\n    }\n    const hangerIsNextToNearestPanel = hangerPosition >= nearestAnchorPos;\n    const gap = this.options.gap;\n\n    let basePosition = nearestAnchorPos;\n    let targetPosition = nearestAnchorPos;\n    if (hangerIsNextToNearestPanel) {\n      targetPosition = nextPanel\n        ? nextPanel.getAnchorPosition()\n        : nearestAnchorPos + nearestSize + gap;\n    } else {\n      basePosition = prevPanel\n        ? prevPanel.getAnchorPosition()\n        : nearestAnchorPos - nearestSize - gap;\n    }\n\n    const progressBetween = (hangerPosition - basePosition) / (targetPosition - basePosition);\n    const startIndex = hangerIsNextToNearestPanel\n      ? nearestIndex\n      : prevPanel\n        ? prevPanel.getIndex()\n        : nearestIndex - 1;\n\n    return startIndex + progressBetween;\n  }\n\n  // Update axes flick position without triggering event\n  public updateAxesPosition(position: number) {\n    const axes = this.axes;\n    axes.off();\n    axes.setTo({\n      flick: position,\n    }, 0);\n    axes.on(this.axesHandlers);\n  }\n\n  public getSize(): number {\n    return this.state.size;\n  }\n\n  public getScrollArea(): { prev: number, next: number } {\n    return this.state.scrollArea;\n  }\n\n  public isOutOfBound(): boolean {\n    const state = this.state;\n    const options = this.options;\n    const scrollArea = state.scrollArea;\n\n    return !options.circular\n      && options.bound\n      && (state.position <= scrollArea.prev || state.position >= scrollArea.next);\n  }\n\n  public canSetBoundMode(): boolean {\n    const options = this.options;\n\n    return options.bound && !options.circular;\n  }\n\n  public getViewportElement(): HTMLElement {\n    return this.viewportElement;\n  }\n\n  public getCameraElement(): HTMLElement {\n    return this.cameraElement;\n  }\n\n  public getScrollAreaSize(): number {\n    const scrollArea = this.state.scrollArea;\n\n    return scrollArea.next - scrollArea.prev;\n  }\n\n  public getRelativeHangerPosition(): number {\n    return this.state.relativeHangerPosition;\n  }\n\n  public getHangerPosition(): number {\n    return this.state.position + this.state.relativeHangerPosition;\n  }\n\n  public getCameraPosition(): number {\n    return this.state.position;\n  }\n\n  public getPositionOffset(): number {\n    return this.state.positionOffset;\n  }\n\n  public getCheckedIndexes(): Array<[number, number]> {\n    return this.state.checkedIndexes;\n  }\n\n  public getVisibleIndex(): { min: number; max: number } {\n    return this.state.visibleIndex;\n  }\n\n  public getVisiblePanels(): Panel[] {\n    return this.visiblePanels;\n  }\n\n  public setCurrentPanel(panel: Panel): void {\n    this.currentPanel = panel;\n  }\n\n  public setLastIndex(index: number): void {\n    const currentPanel = this.currentPanel;\n    const panelManager = this.panelManager;\n\n    panelManager.setLastIndex(index);\n    if (currentPanel && currentPanel.getIndex() > index) {\n      this.currentPanel = panelManager.lastPanel();\n    }\n\n    this.resize();\n  }\n\n  public setVisiblePanels(panels: Panel[]): void {\n    this.visiblePanels = panels;\n  }\n\n  public connectAxesHandler(handlers: { [key: string]: (event: { [key: string]: any; }) => any }): void {\n    const axes = this.axes;\n\n    this.axesHandlers = handlers;\n    axes.on(handlers);\n  }\n\n  public addPlugins(plugins: Plugin | Plugin[]) {\n    const newPlugins = ([] as Plugin[]).concat(plugins);\n\n    newPlugins.forEach(plugin => {\n      plugin.init(this.flicking);\n    });\n\n    this.plugins = this.plugins.concat(newPlugins);\n    return this;\n  }\n\n  public removePlugins(plugins: Plugin | Plugin[]) {\n    const currentPlugins = this.plugins;\n    const removedPlugins = ([] as Plugin[]).concat(plugins);\n\n    removedPlugins.forEach(plugin => {\n      const index = currentPlugins.indexOf(plugin);\n\n      if (index > -1) {\n        currentPlugins.splice(index, 1);\n      }\n\n      plugin.destroy(this.flicking);\n    });\n    return this;\n  }\n\n  public updateCheckedIndexes(changedRange: { min: number, max: number }): void {\n    const state = this.state;\n\n    let removed = 0;\n    state.checkedIndexes.concat().forEach((indexes, idx) => {\n      const [min, max] = indexes;\n      // Can fill part of indexes in range\n      if (changedRange.min <= max && changedRange.max >= min) {\n        // Remove checked index from list\n        state.checkedIndexes.splice(idx - removed, 1);\n        removed++;\n      }\n    });\n  }\n\n  public resetVisibleIndex(): void {\n    const visibleIndex = this.state.visibleIndex;\n    visibleIndex.min = NaN;\n    visibleIndex.max = NaN;\n  }\n\n  public appendUncachedPanelElements(panels: Panel[]): void {\n    const options = this.options;\n    const fragment = document.createDocumentFragment();\n\n    if (options.isEqualSize) {\n      const prevVisiblePanels = this.visiblePanels;\n      const equalSizeClasses = options.isEqualSize as string[]; // for readability\n      const cached: { [className: string]: boolean } = {};\n\n      this.visiblePanels = [];\n\n      Object.keys(this.panelBboxes).forEach(className => {\n        cached[className] = true;\n      });\n\n      panels.forEach(panel => {\n        const overlappedClass = panel.getOverlappedClass(equalSizeClasses);\n        if (overlappedClass && !cached[overlappedClass]) {\n          if (!options.renderExternal) {\n            fragment.appendChild(panel.getElement());\n          }\n          this.visiblePanels.push(panel);\n          cached[overlappedClass] = true;\n        } else if (!overlappedClass) {\n          if (!options.renderExternal) {\n            fragment.appendChild(panel.getElement());\n          }\n          this.visiblePanels.push(panel);\n        }\n      });\n      prevVisiblePanels.forEach(panel => {\n        this.addVisiblePanel(panel);\n      });\n    } else {\n      if (!options.renderExternal) {\n        panels.forEach(panel => fragment.appendChild(panel.getElement()));\n      }\n      this.visiblePanels = panels.filter(panel => Boolean(panel));\n    }\n\n    if (!options.renderExternal) {\n      this.cameraElement.appendChild(fragment);\n    }\n  }\n\n  private updateClonePanels() {\n    const panelManager = this.panelManager;\n\n    // Clone panels in circular mode\n    if (this.options.circular && panelManager.getPanelCount() > 0) {\n      this.clonePanels();\n      this.updateClonedPanelPositions();\n    }\n    panelManager.chainAllPanels();\n  }\n\n  private getVisibleIndexOf(panel: Panel): number {\n    return findIndex(this.visiblePanels, visiblePanel => visiblePanel === panel);\n  }\n\n  private build(): void {\n    this.setElements();\n    this.applyCSSValue();\n    this.setMoveType();\n    this.setAxesInstance();\n    this.refreshPanels();\n    this.setDefaultPanel();\n    this.resize();\n    this.moveToDefaultPanel();\n  }\n\n  private setElements(): void {\n    const state = this.state;\n    const options = this.options;\n    const wrapper = this.flicking.getElement();\n    const classPrefix = options.classPrefix;\n\n    const viewportCandidate = wrapper.children[0] as HTMLElement;\n    const hasViewportElement = viewportCandidate && hasClass(viewportCandidate, `${classPrefix}-viewport`);\n\n    const viewportElement = hasViewportElement\n      ? viewportCandidate\n      : document.createElement(\""div\"");\n\n    const cameraCandidate = hasViewportElement\n      ? viewportElement.children[0] as HTMLElement\n      : wrapper.children[0] as HTMLElement;\n    const hasCameraElement = cameraCandidate && hasClass(cameraCandidate, `${classPrefix}-camera`);\n\n    const cameraElement = hasCameraElement\n      ? cameraCandidate\n      : document.createElement(\""div\"");\n\n    if (!hasCameraElement) {\n      cameraElement.className = `${classPrefix}-camera`;\n\n      const panelElements = hasViewportElement\n        ? viewportElement.children\n        : wrapper.children;\n\n      // Make all panels to be a child of camera element\n      // wrapper <- viewport <- camera <- panels[1...n]\n      toArray(panelElements).forEach(child => {\n        cameraElement.appendChild(child);\n      });\n    } else {\n      state.originalCameraStyle = {\n        className: cameraElement.getAttribute(\""class\""),\n        style: cameraElement.getAttribute(\""style\""),\n      };\n    }\n\n    if (!hasViewportElement) {\n      viewportElement.className = `${classPrefix}-viewport`;\n\n      // Add viewport element to wrapper\n      wrapper.appendChild(viewportElement);\n    } else {\n      state.originalViewportStyle = {\n        className: viewportElement.getAttribute(\""class\""),\n        style: viewportElement.getAttribute(\""style\""),\n      };\n    }\n\n    if (!hasCameraElement || !hasViewportElement) {\n      viewportElement.appendChild(cameraElement);\n    }\n\n    this.viewportElement = viewportElement;\n    this.cameraElement = cameraElement;\n    state.isViewportGiven = hasViewportElement;\n    state.isCameraGiven = hasCameraElement;\n  }\n\n  private applyCSSValue(): void {\n    const options = this.options;\n    const viewportElement = this.viewportElement;\n    const cameraElement = this.cameraElement;\n    const viewportStyle = this.viewportElement.style;\n\n    // Set default css values for each element\n    applyCSS(viewportElement, DEFAULT_VIEWPORT_CSS);\n    applyCSS(cameraElement, DEFAULT_CAMERA_CSS);\n\n    viewportElement.style.zIndex = `${options.zIndex}`;\n    if (options.horizontal) {\n      viewportStyle.minHeight = \""100%\"";\n      viewportStyle.width = \""100%\"";\n    } else {\n      viewportStyle.minWidth = \""100%\"";\n      viewportStyle.height = \""100%\"";\n    }\n    if (options.overflow) {\n      viewportStyle.overflow = \""visible\"";\n    }\n\n    this.panelManager = new PanelManager(this.cameraElement, options);\n  }\n\n  private setMoveType(): void {\n    const moveType = this.options.moveType as MoveTypeObjectOption;\n\n    switch (moveType.type) {\n      case MOVE_TYPE.SNAP:\n        this.moveType = new Snap(moveType.count);\n        break;\n      case MOVE_TYPE.FREE_SCROLL:\n        this.moveType = new FreeScroll();\n        break;\n      default:\n        throw new Error(\""moveType is not correct!\"");\n    }\n  }\n\n  private setAxesInstance(): void {\n    const state = this.state;\n    const options = this.options;\n\n    const scrollArea = state.scrollArea;\n    const horizontal = options.horizontal;\n\n    this.axes = new Axes({\n      flick: {\n        range: [scrollArea.prev, scrollArea.next],\n        circular: options.circular,\n        bounce: [0, 0], // will be updated in resize()\n      },\n    }, {\n      easing: options.panelEffect,\n      deceleration: options.deceleration,\n      interruptable: true,\n    });\n\n    this.panInput = new PanInput(this.viewportElement, {\n      inputType: options.inputType,\n      thresholdAngle: options.thresholdAngle,\n      scale: options.horizontal ? [-1, 0] : [0, -1],\n    });\n\n    this.axes.connect(horizontal ? [\""flick\"", \""\""] : [\""\"", \""flick\""], this.panInput);\n  }\n\n  private refreshPanels(): void {\n    const panelManager = this.panelManager;\n    // Panel elements were attached to camera element by Flicking class\n    const panelElements = this.cameraElement.children;\n\n    // Initialize panels\n    const panels = toArray(panelElements).map(\n      (el: HTMLElement, idx: number) => new Panel(el, idx, this),\n    );\n\n    panelManager.replacePanels(panels, []);\n    this.visiblePanels = panels.filter(panel => Boolean(panel));\n  }\n\n  private setDefaultPanel(): void {\n    const options = this.options;\n    const panelManager = this.panelManager;\n    const indexRange = this.panelManager.getRange();\n    const index = clamp(options.defaultIndex, indexRange.min, indexRange.max);\n\n    this.currentPanel = panelManager.get(index);\n  }\n\n  private clonePanels() {\n    const state = this.state;\n    const options = this.options;\n    const panelManager = this.panelManager;\n\n    const gap = options.gap;\n    const viewportSize = state.size;\n    const firstPanel = panelManager.firstPanel();\n    const lastPanel = panelManager.lastPanel()!;\n\n    // There're no panels exist\n    if (!firstPanel) {\n      return;\n    }\n\n    // For each panels, clone itself while last panel's position + size is below viewport size\n    const panels = panelManager.originalPanels();\n    const reversedPanels = panels.concat().reverse();\n\n    const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + gap;\n    const relativeAnchorPosition = firstPanel.getRelativeAnchorPosition();\n    const relativeHangerPosition = this.getRelativeHangerPosition();\n\n    const areaPrev = (relativeHangerPosition - relativeAnchorPosition) % sumOriginalPanelSize;\n    let sizeSum = 0;\n    let panelAtLeftBoundary!: Panel;\n    for (const panel of reversedPanels) {\n      if (!panel) {\n        continue;\n      }\n      sizeSum += panel.getSize() + gap;\n      if (sizeSum >= areaPrev) {\n        panelAtLeftBoundary = panel;\n        break;\n      }\n    }\n\n    const areaNext = (viewportSize - relativeHangerPosition + relativeAnchorPosition) % sumOriginalPanelSize;\n    sizeSum = 0;\n    let panelAtRightBoundary!: Panel;\n    for (const panel of panels) {\n      if (!panel) {\n        continue;\n      }\n      sizeSum += panel.getSize() + gap;\n      if (sizeSum >= areaNext) {\n        panelAtRightBoundary = panel;\n        break;\n      }\n    }\n\n    // Need one more set of clones on prev area of original panel 0\n    const needCloneOnPrev = panelAtLeftBoundary.getIndex() !== 0\n      && panelAtLeftBoundary.getIndex() <= panelAtRightBoundary.getIndex();\n\n    // Visible count of panel 0 on first screen\n    const panel0OnFirstscreen = Math.ceil((relativeHangerPosition + firstPanel.getSize() - relativeAnchorPosition) / sumOriginalPanelSize)\n      + Math.ceil((viewportSize - relativeHangerPosition + relativeAnchorPosition) / sumOriginalPanelSize)\n      - 1; // duplication\n\n    const cloneCount = panel0OnFirstscreen\n      + (needCloneOnPrev ? 1 : 0);\n    const prevCloneCount = panelManager.getCloneCount();\n\n    panelManager.setCloneCount(cloneCount);\n    if (options.renderExternal) {\n      return;\n    }\n\n    if (cloneCount > prevCloneCount) {\n      // should clone more\n      for (let cloneIndex = prevCloneCount; cloneIndex < cloneCount; cloneIndex++) {\n        const clones = panels.map(origPanel => origPanel.clone(cloneIndex));\n        const fragment = document.createDocumentFragment();\n        clones.forEach(panel => fragment.appendChild(panel.getElement()));\n\n        this.cameraElement.appendChild(fragment);\n        this.visiblePanels.push(...clones.filter(clone => Boolean(clone)));\n        panelManager.insertClones(cloneIndex, 0, clones);\n      }\n    } else if (cloneCount < prevCloneCount) {\n      // should remove some\n      panelManager.removeClonesAfter(cloneCount);\n    }\n  }\n\n  private moveToDefaultPanel(): void {\n    const state = this.state;\n    const panelManager = this.panelManager;\n    const options = this.options;\n    const indexRange = this.panelManager.getRange();\n\n    const defaultIndex = clamp(options.defaultIndex, indexRange.min, indexRange.max);\n    const defaultPanel = panelManager.get(defaultIndex);\n\n    let defaultPosition = 0;\n    if (defaultPanel) {\n      defaultPosition = defaultPanel.getAnchorPosition() - state.relativeHangerPosition;\n      defaultPosition = this.canSetBoundMode()\n        ? clamp(defaultPosition, state.scrollArea.prev, state.scrollArea.next)\n        : defaultPosition;\n    }\n\n    this.moveCamera(defaultPosition);\n    this.axes.setTo({ flick: defaultPosition }, 0);\n  }\n\n  private updateSize(): void {\n    const state = this.state;\n    const options = this.options;\n    const panels = this.panelManager.originalPanels()\n      .filter(panel => Boolean(panel));\n    const bbox = this.updateBbox();\n\n    const prevSize = state.size;\n    // Update size & hanger position\n    state.size = options.horizontal\n      ? bbox.width\n      : bbox.height;\n\n    if (prevSize !== state.size) {\n      state.relativeHangerPosition = parseArithmeticExpression(options.hanger, state.size);\n      state.infiniteThreshold = parseArithmeticExpression(options.infiniteThreshold, state.size);\n    }\n\n    if (panels.length <= 0) {\n      return;\n    }\n\n    this.resizePanels(panels);\n  }\n\n  private updateOriginalPanelPositions(): void {\n    const gap = this.options.gap;\n    const panelManager = this.panelManager;\n\n    const firstPanel = panelManager.firstPanel();\n    const panels = panelManager.originalPanels();\n\n    if (!firstPanel) {\n      return;\n    }\n\n    const currentPanel = this.currentPanel!;\n    const nearestPanel = this.nearestPanel;\n    const currentState = this.stateMachine.getState();\n    const scrollArea = this.state.scrollArea;\n\n    // Update panel position && fit to wrapper\n    let nextPanelPos = firstPanel.getPosition();\n    let maintainingPanel: Panel = firstPanel;\n    if (nearestPanel) {\n      // We should maintain nearestPanel's position\n      const looped = !isBetween(currentState.lastPosition + currentState.delta, scrollArea.prev, scrollArea.next);\n\n      maintainingPanel = looped\n        ? currentPanel\n        : nearestPanel;\n    } else if (firstPanel.getIndex() > 0) {\n      maintainingPanel = currentPanel;\n    }\n\n    const panelsBeforeMaintainPanel = panels.slice(0, maintainingPanel.getIndex() + (maintainingPanel.getCloneIndex() + 1) * panels.length);\n    const accumulatedSize = panelsBeforeMaintainPanel.reduce((total, panel) => {\n      return total + panel.getSize() + gap;\n    }, 0);\n\n    nextPanelPos = maintainingPanel.getPosition() - accumulatedSize;\n\n    panels.forEach(panel => {\n      const newPosition = nextPanelPos;\n      const panelSize = panel.getSize();\n\n      panel.setPosition(newPosition);\n      nextPanelPos += panelSize + gap;\n    });\n\n    if (!this.options.renderOnlyVisible) {\n      panels.forEach(panel => panel.setPositionCSS());\n    }\n  }\n\n  private updateClonedPanelPositions(): void {\n    const state = this.state;\n    const options = this.options;\n    const panelManager = this.panelManager;\n    const clonedPanels = panelManager.clonedPanels()\n      .reduce((allClones, clones) => [...allClones, ...clones], [])\n      .filter(panel => Boolean(panel));\n\n    const scrollArea = state.scrollArea;\n\n    const firstPanel = panelManager.firstPanel();\n    const lastPanel = panelManager.lastPanel()!;\n\n    if (!firstPanel) {\n      return;\n    }\n\n    const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + options.gap;\n\n    // Locate all cloned panels linearly first\n    for (const panel of clonedPanels) {\n      const origPanel = panel.getOriginalPanel();\n      const cloneIndex = panel.getCloneIndex();\n      const cloneBasePos = sumOriginalPanelSize * (cloneIndex + 1);\n      const clonedPanelPos = cloneBasePos + origPanel.getPosition();\n\n      panel.setPosition(clonedPanelPos);\n    }\n\n    let lastReplacePosition = firstPanel.getPosition();\n    // reverse() pollutes original array, so copy it with concat()\n    for (const panel of clonedPanels.concat().reverse()) {\n      const panelSize = panel.getSize();\n      const replacePosition = lastReplacePosition - panelSize - options.gap;\n\n      if (replacePosition + panelSize <= scrollArea.prev) {\n        // Replace is not meaningful, as it won't be seen in current scroll area\n        break;\n      }\n\n      panel.setPosition(replacePosition);\n      lastReplacePosition = replacePosition;\n    }\n\n    if (!this.options.renderOnlyVisible) {\n      clonedPanels.forEach(panel => {\n        panel.setPositionCSS();\n      });\n    }\n  }\n\n  private updateScrollArea(): void {\n    const state = this.state;\n    const panelManager = this.panelManager;\n    const options = this.options;\n    const axes = this.axes;\n\n    // Set viewport scrollable area\n    const firstPanel = panelManager.firstPanel();\n    const lastPanel = panelManager.lastPanel() as Panel;\n    const relativeHangerPosition = state.relativeHangerPosition;\n\n    if (!firstPanel) {\n      state.scrollArea = {\n        prev: 0,\n        next: 0,\n      };\n    } else if (this.canSetBoundMode()) {\n      const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition();\n\n      if (sumOriginalPanelSize >= state.size) {\n        state.scrollArea = {\n          prev: firstPanel.getPosition(),\n          next: lastPanel.getPosition() + lastPanel.getSize() - state.size,\n        };\n      } else {\n        // Find anchor position of set of the combined panels\n        const relAnchorPosOfCombined = parseArithmeticExpression(options.anchor, sumOriginalPanelSize);\n        const anchorPos = firstPanel.getPosition() + clamp(\n          relAnchorPosOfCombined,\n          sumOriginalPanelSize - (state.size - relativeHangerPosition),\n          relativeHangerPosition,\n        );\n\n        state.scrollArea = {\n          prev: anchorPos - relativeHangerPosition,\n          next: anchorPos - relativeHangerPosition,\n        };\n      }\n    } else if (options.circular) {\n      const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + options.gap;\n\n      // Maximum scroll extends to first clone sequence's first panel\n      state.scrollArea = {\n        prev: firstPanel.getAnchorPosition() - relativeHangerPosition,\n        next: sumOriginalPanelSize + firstPanel.getAnchorPosition() - relativeHangerPosition,\n      };\n    } else {\n      state.scrollArea = {\n        prev: firstPanel.getAnchorPosition() - relativeHangerPosition,\n        next: lastPanel.getAnchorPosition() - relativeHangerPosition,\n      };\n    }\n\n    const viewportSize = state.size;\n    const bounce = options.bounce;\n\n    let parsedBounce: number[];\n    if (isArray(bounce)) {\n      parsedBounce = (bounce as string[]).map(val => parseArithmeticExpression(val, viewportSize, DEFAULT_OPTIONS.bounce as number));\n    } else {\n      const parsedVal = parseArithmeticExpression(bounce as number | string, viewportSize, DEFAULT_OPTIONS.bounce as number);\n      parsedBounce = [parsedVal, parsedVal];\n    }\n\n    // Update axes range and bounce\n    const flick = axes.axis.flick;\n    flick.range = [state.scrollArea.prev, state.scrollArea.next];\n    flick.bounce = parsedBounce;\n  }\n\n  // Update camera position after resizing\n  private updateCameraPosition(): void {\n    const state = this.state;\n    const currentPanel = this.getCurrentPanel();\n    const currentState = this.stateMachine.getState();\n    const isFreeScroll = this.moveType.is(MOVE_TYPE.FREE_SCROLL);\n    const relativeHangerPosition = this.getRelativeHangerPosition();\n    const halfGap = this.options.gap / 2;\n\n    if (currentState.holding || currentState.playing) {\n      this.updateVisiblePanels();\n      return;\n    }\n\n    let newPosition: number;\n    if (isFreeScroll) {\n      const nearestPanel = this.getNearestPanel();\n\n      newPosition = nearestPanel\n        ? nearestPanel.getPosition() - halfGap + (nearestPanel.getSize() + 2 * halfGap) * state.panelMaintainRatio - relativeHangerPosition\n        : this.getCameraPosition();\n    } else {\n      newPosition = currentPanel\n        ? currentPanel.getAnchorPosition() - relativeHangerPosition\n        : this.getCameraPosition();\n    }\n\n    if (this.canSetBoundMode()) {\n      newPosition = clamp(newPosition, state.scrollArea.prev, state.scrollArea.next);\n    }\n\n    // Pause & resume axes to prevent axes's \""change\"" event triggered\n    // This should be done before moveCamera, as moveCamera can trigger needPanel\n    this.updateAxesPosition(newPosition);\n\n    this.moveCamera(newPosition);\n  }\n\n  private checkNeedPanel(axesEvent?: any): void {\n    const state = this.state;\n    const options = this.options;\n    const panelManager = this.panelManager;\n    const currentPanel = this.currentPanel;\n    const nearestPanel = this.nearestPanel;\n    const currentState = this.stateMachine.getState();\n\n    if (!options.infinite) {\n      return;\n    }\n\n    const gap = options.gap;\n    const infiniteThreshold = state.infiniteThreshold;\n    const maxLastIndex = panelManager.getLastIndex();\n\n    if (maxLastIndex < 0) {\n      return;\n    }\n\n    if (!currentPanel || !nearestPanel) {\n      // There're no panels\n      this.triggerNeedPanel({\n        axesEvent,\n        siblingPanel: null,\n        direction: null,\n        indexRange: {\n          min: 0,\n          max: maxLastIndex,\n          length: maxLastIndex + 1,\n        },\n      });\n      return;\n    }\n\n    const originalNearestPosition = nearestPanel.getPosition();\n\n    // Check next direction\n    let checkingPanel: Panel | null = !currentState.holding && !currentState.playing\n      ? currentPanel\n      : nearestPanel;\n\n    while (checkingPanel) {\n      const currentIndex = checkingPanel.getIndex();\n      const nextSibling = checkingPanel.nextSibling;\n      const lastPanel = panelManager.lastPanel()!;\n      const atLastPanel = currentIndex === lastPanel.getIndex();\n      const nextIndex = !atLastPanel && nextSibling\n        ? nextSibling.getIndex()\n        : maxLastIndex + 1;\n      const currentNearestPosition = nearestPanel.getPosition();\n      const panelRight = checkingPanel.getPosition() + checkingPanel.getSize() - (currentNearestPosition - originalNearestPosition);\n      const cameraNext = state.position + state.size;\n\n      // There're empty panels between\n      const emptyPanelExistsBetween = (nextIndex - currentIndex > 1);\n      // Expected prev panel's left position is smaller than camera position\n      const overThreshold = panelRight + gap - infiniteThreshold <= cameraNext;\n\n      if (emptyPanelExistsBetween && overThreshold) {\n        this.triggerNeedPanel({\n          axesEvent,\n          siblingPanel: checkingPanel,\n          direction: DIRECTION.NEXT,\n          indexRange: {\n            min: currentIndex + 1,\n            max: nextIndex - 1,\n            length: nextIndex - currentIndex - 1,\n          },\n        });\n      }\n\n      // Trigger needPanel in circular & at max panel index\n      if (options.circular && currentIndex === maxLastIndex && overThreshold) {\n        const firstPanel = panelManager.firstPanel();\n        const firstIndex = firstPanel\n          ? firstPanel.getIndex()\n          : -1;\n\n        if (firstIndex > 0) {\n          this.triggerNeedPanel({\n            axesEvent,\n            siblingPanel: checkingPanel,\n            direction: DIRECTION.NEXT,\n            indexRange: {\n              min: 0,\n              max: firstIndex - 1,\n              length: firstIndex,\n            },\n          });\n        }\n      }\n\n      // Check whether panels are changed\n      const lastPanelAfterNeed = panelManager.lastPanel()!;\n      const atLastPanelAfterNeed = lastPanelAfterNeed && currentIndex === lastPanelAfterNeed.getIndex();\n\n      if (atLastPanelAfterNeed || !overThreshold) {\n        break;\n      }\n\n      checkingPanel = checkingPanel.nextSibling;\n    }\n\n    // Check prev direction\n    checkingPanel = nearestPanel;\n    while (checkingPanel) {\n      const cameraPrev = state.position;\n      const checkingIndex = checkingPanel.getIndex();\n      const prevSibling = checkingPanel.prevSibling;\n      const firstPanel = panelManager.firstPanel()!;\n      const atFirstPanel = checkingIndex === firstPanel.getIndex();\n      const prevIndex = !atFirstPanel && prevSibling\n        ? prevSibling.getIndex()\n        : -1;\n      const currentNearestPosition = nearestPanel.getPosition();\n      const panelLeft = checkingPanel.getPosition() - (currentNearestPosition - originalNearestPosition);\n\n      // There're empty panels between\n      const emptyPanelExistsBetween = checkingIndex - prevIndex > 1;\n      // Expected prev panel's right position is smaller than camera position\n      const overThreshold = panelLeft - gap + infiniteThreshold >= cameraPrev;\n      if (emptyPanelExistsBetween && overThreshold) {\n        this.triggerNeedPanel({\n          axesEvent,\n          siblingPanel: checkingPanel,\n          direction: DIRECTION.PREV,\n          indexRange: {\n            min: prevIndex + 1,\n            max: checkingIndex - 1,\n            length: checkingIndex - prevIndex - 1,\n          },\n        });\n      }\n\n      // Trigger needPanel in circular & at panel 0\n      if (options.circular && checkingIndex === 0 && overThreshold) {\n        const lastPanel = panelManager.lastPanel();\n\n        if (lastPanel && lastPanel.getIndex() < maxLastIndex) {\n          const lastIndex = lastPanel.getIndex();\n\n          this.triggerNeedPanel({\n            axesEvent,\n            siblingPanel: checkingPanel,\n            direction: DIRECTION.PREV,\n            indexRange: {\n              min: lastIndex + 1,\n              max: maxLastIndex,\n              length: maxLastIndex - lastIndex,\n            },\n          });\n        }\n      }\n\n      // Check whether panels were changed\n      const firstPanelAfterNeed = panelManager.firstPanel();\n      const atFirstPanelAfterNeed = firstPanelAfterNeed && checkingIndex === firstPanelAfterNeed.getIndex();\n\n      // Looped in circular mode\n      if (atFirstPanelAfterNeed || !overThreshold) {\n        break;\n      }\n\n      checkingPanel = checkingPanel.prevSibling;\n    }\n  }\n\n  private triggerNeedPanel(params: {\n    axesEvent: any;\n    siblingPanel: Panel | null,\n    direction: FlickingEvent[\""direction\""];\n    indexRange: NeedPanelEvent[\""range\""];\n  }): void {\n    const { axesEvent, siblingPanel, direction, indexRange } = params;\n    const options = this.options;\n    const checkedIndexes = this.state.checkedIndexes;\n    const alreadyTriggered = checkedIndexes.some(([min, max]) => min === indexRange.min || max === indexRange.max);\n    const hasHandler = this.flicking.hasOn(EVENTS.NEED_PANEL);\n\n    if (alreadyTriggered || !hasHandler) {\n      return;\n    }\n\n    // Should done before triggering event, as we can directly add panels by event callback\n    checkedIndexes.push([indexRange.min, indexRange.max]);\n\n    const index = siblingPanel\n      ? siblingPanel.getIndex()\n      : 0;\n    const isTrusted = axesEvent\n      ? axesEvent.isTrusted\n      : false;\n\n    this.triggerEvent(\n      EVENTS.NEED_PANEL,\n      axesEvent,\n      isTrusted,\n      {\n        index,\n        panel: siblingPanel,\n        direction,\n        range: indexRange,\n        fill: (element: ElementLike | ElementLike[]) => {\n          const panelManager = this.panelManager;\n          if (!siblingPanel) {\n            return this.insert(panelManager.getRange().max + 1, element);\n          }\n\n          const parsedElements = parseElement(element);\n          // Slice elements to fit size equal to empty spaces\n          const elements = direction === DIRECTION.NEXT\n            ? parsedElements.slice(0, indexRange.length)\n            : parsedElements.slice(-indexRange.length);\n\n          if (direction === DIRECTION.NEXT) {\n            if (options.circular && index === panelManager.getLastIndex()) {\n              // needPanel event is triggered on last index, insert at index 0\n              return this.insert(0, elements);\n            } else {\n              return siblingPanel.insertAfter(elements);\n            }\n          } else if (direction === DIRECTION.PREV) {\n            if (options.circular && index === 0) {\n              // needPanel event is triggered on first index(0), insert at the last index\n              return this.insert(indexRange.max - elements.length + 1, elements);\n            } else {\n              return siblingPanel.insertBefore(elements);\n            }\n          } else {\n            // direction is null when there're no panels exist\n            return this.insert(0, elements);\n          }\n        },\n      } as Partial<NeedPanelEvent>,\n    );\n  }\n\n  private updateVisiblePanels() {\n    const state = this.state;\n    const options = this.options;\n    const cameraElement = this.cameraElement;\n    const visibleIndex = state.visibleIndex;\n    const { renderExternal, renderOnlyVisible } = options;\n    if (!renderOnlyVisible) {\n      return;\n    }\n\n    if (!this.nearestPanel) {\n      this.resetVisibleIndex();\n      while (cameraElement.firstChild) {\n        cameraElement.removeChild(cameraElement.firstChild);\n      }\n      return;\n    }\n\n    const newVisibleIndex = this.calcNewVisiblePanelIndex();\n\n    if (newVisibleIndex.min !== visibleIndex.min || newVisibleIndex.max !== visibleIndex.max) {\n      state.visibleIndex = newVisibleIndex;\n      if (isNaN(newVisibleIndex.min) || isNaN(newVisibleIndex.max)) {\n        return;\n      }\n\n      const prevVisiblePanels = this.visiblePanels;\n      const newVisiblePanels = this.calcVisiblePanels();\n\n      const { addedPanels, removedPanels } = this.checkVisiblePanelChange(prevVisiblePanels, newVisiblePanels);\n\n      if (newVisiblePanels.length > 0) {\n        const firstVisiblePanelPos = newVisiblePanels[0].getPosition();\n        state.positionOffset = firstVisiblePanelPos;\n      }\n\n      newVisiblePanels.forEach(panel => {\n        panel.setPositionCSS(state.positionOffset);\n      });\n\n      if (!renderExternal) {\n        removedPanels.forEach(panel => {\n          const panelElement = panel.getElement();\n          panelElement.parentNode && cameraElement.removeChild(panelElement);\n        });\n\n        const fragment = document.createDocumentFragment();\n        addedPanels.forEach(panel => {\n          fragment.appendChild(panel.getElement());\n        });\n\n        cameraElement.appendChild(fragment);\n      }\n      this.visiblePanels = newVisiblePanels;\n\n      this.flicking.trigger(EVENTS.VISIBLE_CHANGE, {\n        type: EVENTS.VISIBLE_CHANGE,\n        range: {\n          min: newVisibleIndex.min,\n          max: newVisibleIndex.max,\n        },\n      });\n    } else {\n      this.visiblePanels.forEach(panel => panel.setPositionCSS(state.positionOffset));\n    }\n  }\n\n  private calcNewVisiblePanelIndex() {\n    const cameraPos = this.getCameraPosition();\n    const viewportSize = this.getSize();\n    const basePanel = this.nearestPanel!;\n    const panelManager = this.panelManager;\n    const allPanelCount = panelManager.getRange().max + 1;\n    const cloneCount = panelManager.getCloneCount();\n\n    const checkLastPanel = (\n      panel: Panel,\n      getNextPanel: (panel: Panel) => Panel | null,\n      isOutOfViewport: (panel: Panel) => boolean,\n    ): Panel => {\n      let lastPanel = panel;\n      while (true) {\n        const nextPanel = getNextPanel(lastPanel);\n        if (!nextPanel || isOutOfViewport(nextPanel)) {\n          break;\n        }\n        lastPanel = nextPanel;\n      }\n      return lastPanel;\n    };\n\n    const lastPanelOfNextDir = checkLastPanel(basePanel, panel => {\n      const nextPanel = panel.nextSibling;\n\n      if (nextPanel && nextPanel.getPosition() >= panel.getPosition()) {\n        return nextPanel;\n      } else {\n        return null;\n      }\n    }, panel => panel.getPosition() >= cameraPos + viewportSize);\n\n    const lastPanelOfPrevDir = checkLastPanel(basePanel, panel => {\n      const prevPanel = panel.prevSibling;\n\n      if (prevPanel && prevPanel.getPosition() <= panel.getPosition()) {\n        return prevPanel;\n      } else {\n        return null;\n      }\n    }, panel => panel.getPosition() + panel.getSize() <= cameraPos);\n\n    const minPanelCloneIndex = lastPanelOfPrevDir.getCloneIndex();\n    const maxPanelCloneOffset = allPanelCount * (lastPanelOfNextDir.getCloneIndex() + 1);\n    const minPanelCloneOffset = minPanelCloneIndex > -1\n      ? allPanelCount * (cloneCount - minPanelCloneIndex)\n      : 0;\n\n    const newVisibleIndex = {\n      // Relative index including clone, can be negative number\n      min: basePanel.getCloneIndex() > -1\n        ? lastPanelOfPrevDir.getIndex() + minPanelCloneOffset\n        : lastPanelOfPrevDir.getIndex() - minPanelCloneOffset,\n      // Relative index including clone\n      max: lastPanelOfNextDir.getIndex() + maxPanelCloneOffset,\n    };\n\n    // Stopped on first cloned first panel\n    if (lastPanelOfPrevDir.getIndex() === 0 && lastPanelOfPrevDir.getCloneIndex() === 0) {\n      newVisibleIndex.min = allPanelCount;\n    }\n\n    return newVisibleIndex;\n  }\n\n  private checkVisiblePanelChange(prevVisiblePanels: Panel[], newVisiblePanels: Panel[]) {\n    const prevRefCount = prevVisiblePanels.map(() => 0);\n    const newRefCount = newVisiblePanels.map(() => 0);\n\n    prevVisiblePanels.forEach((prevPanel, prevIndex) => {\n      newVisiblePanels.forEach((newPanel, newIndex) => {\n        if (prevPanel === newPanel) {\n          prevRefCount[prevIndex]++;\n          newRefCount[newIndex]++;\n        }\n      });\n    });\n\n    const removedPanels = prevRefCount.reduce((removed: Panel[], count, index) => {\n      return count === 0\n        ? [...removed, prevVisiblePanels[index]]\n        : removed;\n    }, []);\n    const addedPanels = newRefCount.reduce((added: Panel[], count, index) => {\n      return count === 0\n        ? [...added, newVisiblePanels[index]]\n        : added;\n    }, []);\n\n    return { removedPanels, addedPanels };\n  }\n\n  private resizePanels(panels: Panel[]): void {\n    const options = this.options;\n    const panelBboxes = this.panelBboxes;\n\n    if (options.isEqualSize === true) {\n      if (!panelBboxes.default) {\n        const defaultPanel = panels[0];\n        panelBboxes.default = defaultPanel.getBbox();\n      }\n\n      const defaultBbox = panelBboxes.default;\n\n      panels.forEach(panel => {\n        panel.resize(defaultBbox);\n      });\n      return;\n    } else if (options.isEqualSize) {\n      const equalSizeClasses = options.isEqualSize;\n\n      panels.forEach(panel => {\n        const overlappedClass = panel.getOverlappedClass(equalSizeClasses);\n        if (overlappedClass) {\n          panel.resize(panelBboxes[overlappedClass]);\n          panelBboxes[overlappedClass] = panel.getBbox();\n        } else {\n          panel.resize();\n        }\n      });\n      return;\n    }\n    panels.forEach(panel => {\n      panel.resize();\n    });\n  }\n}\n"",""import { isBrowser } from \""../consts\"";\n\nconst tid = \""UA-70842526-24\"";\nconst cid = (Math.random() * Math.pow(10, 20)) / Math.pow(10, 10);\n\nexport function sendEvent(category: string, action: string, label: any) {\n  if (!isBrowser) {\n    return;\n  }\n\n  try {\n    const innerWidth = window.innerWidth;\n    const innerHeight = window.innerHeight;\n    const screen = window.screen || { width: innerWidth, height: innerHeight };\n    const collectInfos = [\n      \""v=1\"",\n      \""t=event\"",\n      `dl=${location.href}`,\n      `ul=${(navigator.language || \""en-us\"").toLowerCase()}`,\n      `de=${document.charset || document.inputEncoding || document.characterSet || \""utf-8\""}`,\n      `dr=${document.referrer}`,\n      `dt=${document.title}`,\n      `sr=${screen.width}x${screen.height}`,\n      `vp=${innerWidth}x${innerHeight}`,\n      `ec=${category}`,\n      `ea=${action}`,\n      `el=${JSON.stringify(label)}`,\n      `cid=${cid}`,\n      `tid=${tid}`,\n      \""cd1=#__VERSION__#\"",\n      `z=${Math.floor(Math.random() * 10000000)}`,\n    ];\n    const req = new XMLHttpRequest();\n    req.open(\""GET\"", `https://www.google-analytics.com/collect?${collectInfos.join(\""&\"")}`);\n    req.send();\n  } catch (e) {}\n}\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Component from \""@egjs/component\"";\nimport Viewport from \""./components/Viewport\"";\nimport Panel from \""./components/Panel\"";\n\nimport { merge, getProgress, parseElement, isString, counter, findIndex } from \""./utils\"";\nimport { DEFAULT_OPTIONS, EVENTS, DIRECTION, AXES_EVENTS, STATE_TYPE, DEFAULT_MOVE_TYPE_OPTIONS } from \""./consts\"";\nimport {\n  FlickingOptions,\n  FlickingEvent,\n  Direction,\n  EventType,\n  FlickingPanel,\n  TriggerCallback,\n  FlickingContext,\n  FlickingStatus,\n  Plugin,\n  ElementLike,\n  DestroyOption,\n  BeforeSyncResult,\n  SyncResult,\n} from \""./types\"";\nimport { sendEvent } from \""./ga/ga\"";\nimport { DiffResult } from \""@egjs/list-differ\"";\n\n/**\n * @memberof eg\n * @extends eg.Component\n * @support {\""ie\"": \""10+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"" , \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""4.X+\""}\n * @requires {@link https://github.com/naver/egjs-component|eg.Component}\n * @requires {@link https://github.com/naver/egjs-axes|eg.Axes}\n * @see Easing Functions Cheat Sheet {@link http://easings.net/} <ko>이징 함수 Cheat Sheet {@link http://easings.net/}</ko>\n */\nclass Flicking extends Component {\n  /**\n   * Version info string\n   * @ko 버전정보 문자열\n   * @example\n   * eg.Flicking.VERSION;  // ex) 3.0.0\n   * @memberof eg.Flicking\n   */\n  public static VERSION: string = \""#__VERSION__#\"";\n  /**\n   * Direction constant - \""PREV\"" or \""NEXT\""\n   * @ko 방향 상수 - \""PREV\"" 또는 \""NEXT\""\n   * @type {object}\n   * @property {\""PREV\""} PREV - Prev direction from current hanger position.<br/>It's `left(←️)` direction when `horizontal: true`.<br/>Or, `up(↑️)` direction when `horizontal: false`.<ko>현재 행어를 기준으로 이전 방향.<br/>`horizontal: true`일 경우 `왼쪽(←️)` 방향.<br/>`horizontal: false`일 경우 `위쪽(↑️)`방향이다.</ko>\n   * @property {\""NEXT\""} NEXT - Next direction from current hanger position.<br/>It's `right(→)` direction when `horizontal: true`.<br/>Or, `down(↓️)` direction when `horizontal: false`.<ko>현재 행어를 기준으로 다음 방향.<br/>`horizontal: true`일 경우 `오른쪽(→)` 방향.<br/>`horizontal: false`일 경우 `아래쪽(↓️)`방향이다.</ko>\n   * @example\n   * eg.Flicking.DIRECTION.PREV; // \""PREV\""\n   * eg.Flicking.DIRECTION.NEXT; // \""NEXT\""\n   */\n  public static DIRECTION: Direction = DIRECTION;\n\n  /**\n   * Event type object with event name strings.\n   * @ko 이벤트 이름 문자열들을 담은 객체\n   * @type {object}\n   * @property {\""holdStart\""} HOLD_START - holdStart event<ko>holdStart 이벤트</ko>\n   * @property {\""holdEnd\""} HOLD_END - holdEnd event<ko>holdEnd 이벤트</ko>\n   * @property {\""moveStart\""} MOVE_START - moveStart event<ko>moveStart 이벤트</ko>\n   * @property {\""move\""} MOVE - move event<ko>move 이벤트</ko>\n   * @property {\""moveEnd\""} MOVE_END - moveEnd event<ko>moveEnd 이벤트</ko>\n   * @property {\""change\""} CHANGE - change event<ko>change 이벤트</ko>\n   * @property {\""restore\""} RESTORE - restore event<ko>restore 이벤트</ko>\n   * @property {\""select\""} SELECT - select event<ko>select 이벤트</ko>\n   * @property {\""needPanel\""} NEED_PANEL - needPanel event<ko>needPanel 이벤트</ko>\n   * @example\n   * eg.Flicking.EVENTS.MOVE_START; // \""MOVE_START\""\n   */\n  public static EVENTS: EventType = EVENTS;\n\n  public options: FlickingOptions;\n\n  private wrapper: HTMLElement;\n  private viewport: Viewport;\n  private eventContext: FlickingContext;\n  private isPanelChangedAtBeforeSync: boolean = false;\n\n  /**\n   * @param element A base element for the eg.Flicking module. When specifying a value as a `string` type, you must specify a css selector string to select the element.<ko>eg.Flicking 모듈을 사용할 기준 요소. `string`타입으로 값 지정시 요소를 선택하기 위한 css 선택자 문자열을 지정해야 한다.</ko>\n   * @param options An option object of the eg.Flicking module<ko>eg.Flicking 모듈의 옵션 객체</ko>\n   * @param {string} [options.classPrefix=\""eg-flick\""] A prefix of class names will be added for the panels, viewport, and camera.<ko>패널들과 뷰포트, 카메라에 추가될 클래스 이름의 접두사.</ko>\n   * @param {number} [options.deceleration=0.0075] Deceleration value for panel movement animation for animation triggered by manual user input. A higher value means a shorter running time.<ko>사용자의 동작으로 가속도가 적용된 패널 이동 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아진다.</ko>\n   * @param {boolean} [options.horizontal=true] The direction of panel movement. (true: horizontal, false: vertical)<ko>패널 이동 방향. (true: 가로방향, false: 세로방향)</ko>\n   * @param {boolean} [options.circular=false] Enables circular mode, which connects first/last panel for continuous scrolling.<ko>순환 모드를 활성화한다. 순환 모드에서는 양 끝의 패널이 서로 연결되어 끊김없는 스크롤이 가능하다.</ko>\n   * @param {boolean} [options.infinite=false] Enables infinite mode, which can automatically trigger needPanel until reaching the last panel's index reaches the lastIndex.<ko>무한 모드를 활성화한다. 무한 모드에서는 needPanel 이벤트를 자동으로 트리거한다. 해당 동작은 마지막 패널의 인덱스가 lastIndex와 일치할때까지 일어난다.</ko>\n   * @param {number} [options.infiniteThreshold=0] A Threshold from viewport edge before triggering `needPanel` event in infinite mode.<ko>무한 모드에서 `needPanel`이벤트가 발생하기 위한 뷰포트 끝으로부터의 최대 거리.</ko>\n   * @param {number} [options.lastIndex=Infinity] Maximum panel index that Flicking can set. Flicking won't trigger `needPanel` when the event's panel index is greater than it.<br/>Also, if the last panel's index reached a given index, you can't add more panels.<ko>Flicking이 설정 가능한 패널의 최대 인덱스. `needPanel` 이벤트에 지정된 인덱스가 최대 패널의 개수보다 같거나 커야 하는 경우에 이벤트를 트리거하지 않게 한다.<br>또한, 마지막 패널의 인덱스가 주어진 인덱스와 동일할 경우, 새로운 패널을 더 이상 추가할 수 없다.</ko>\n   * @param {number} [options.threshold=40] Movement threshold to change panel(unit: pixel). It should be dragged above the threshold to change the current panel.<ko>패널 변경을 위한 이동 임계값 (단위: 픽셀). 주어진 값 이상으로 스크롤해야만 패널 변경이 가능하다.</ko>\n   * @param {number} [options.duration=100] Duration of the panel movement animation. (unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n   * @param {function} [options.panelEffect=x => 1 - Math.pow(1 - x, 3)] An easing function applied to the panel movement animation. Default value is `easeOutCubic`.<ko>패널 이동 애니메이션에 적용할 easing함수. 기본값은 `easeOutCubic`이다.</ko>\n   * @param {number} [options.defaultIndex=0] Index of the panel to set as default when initializing. A zero-based integer.<ko>초기화시 지정할 디폴트 패널의 인덱스로, 0부터 시작하는 정수.</ko>\n   * @param {string[]} [options.inputType=[\""touch,\""mouse\""]] Types of input devices to enable.({@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption Reference})<ko>활성화할 입력 장치 종류. ({@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption 참고})</ko>\n   * @param {number} [options.thresholdAngle=45] The threshold angle value(0 ~ 90).<br>If the input angle from click/touched position is above or below this value in horizontal and vertical mode each, scrolling won't happen.<ko>스크롤 동작을 막기 위한 임계각(0 ~ 90).<br>클릭/터치한 지점으로부터 계산된 사용자 입력의 각도가 horizontal/vertical 모드에서 각각 크거나 작으면, 스크롤 동작이 이루어지지 않는다.</ko>\n   * @param {number|string|number[]|string[]} [options.bounce=[10,10]] The size value of the bounce area. Only can be enabled when `circular=false`.<br>You can set different bounce value for prev/next direction by using array.<br>`number` for px value, and `string` for px, and % value relative to viewport size.(ex - 0, \""10px\"", \""20%\"")<ko>바운스 영역의 크기값. `circular=false`인 경우에만 사용할 수 있다.<br>배열을 통해 prev/next 방향에 대해 서로 다른 바운스 값을 지정 가능하다.<br>`number`를 통해 px값을, `stirng`을 통해 px 혹은 뷰포트 크기 대비 %값을 사용할 수 있다.(ex - 0, \""10px\"", \""20%\"")</ko>\n   * @param {boolean} [options.autoResize=false] Whether the `resize` method should be called automatically after a window resize event.<ko>window의 `resize` 이벤트 이후 자동으로 resize()메소드를 호출할지의 여부.</ko>\n   * @param {boolean} [options.adaptive=false] Whether the height(horizontal)/width(vertical) of the viewport element reflects the height/width value of the panel after completing the movement.<ko>목적 패널로 이동한 후 그 패널의 높이(horizontal)/너비(vertical)값을 뷰포트 요소의 높이/너비값에 반영할지 여부.</ko>\n   * @param {number|\""\""} [options.zIndex=2000] z-index value for viewport element.<ko>뷰포트 엘리먼트의 z-index 값.</ko>\n   * @param {boolean} [options.bound=false] Prevent the view from going out of the first/last panel. Only can be enabled when `circular=false`.<ko>뷰가 첫번째와 마지막 패널 밖으로 나가는 것을 막아준다. `circular=false`인 경우에만 사용할 수 있다.</ko>\n   * @param {boolean} [options.overflow=false] Disables CSS property `overflow: hidden` in viewport if `true`.<ko>`true`로 설정시 뷰포트에 `overflow: hidden` 속성을 해제한다.</ko>\n   * @param {string} [options.hanger=\""50%\""] The reference position of the hanger in the viewport, which hangs panel anchors should be stopped at.<br>It should be provided in px or % value of viewport size.<br>You can combinate those values with plus/minus sign.<br>ex) \""50\"", \""100px\"", \""0%\"", \""25% + 100px\""<ko>뷰포트 내부의 행어의 위치. 패널의 앵커들이 뷰포트 내에서 멈추는 지점에 해당한다.<br>px값이나, 뷰포트의 크기 대비 %값을 사용할 수 있고, 이를 + 혹은 - 기호로 연계하여 사용할 수도 있다.<br>예) \""50\"", \""100px\"", \""0%\"", \""25% + 100px\""</ko>\n   * @param {string} [options.anchor=\""50%\""] The reference position of the anchor in panels, which can be hanged by viewport hanger.<br>It should be provided in px or % value of panel size.<br>You can combinate those values with plus/minus sign.<br>ex) \""50\"", \""100px\"", \""0%\"", \""25% + 100px\""<ko>패널 내부의 앵커의 위치. 뷰포트의 행어와 연계하여 패널이 화면 내에서 멈추는 지점을 설정할 수 있다.<br>px값이나, 패널의 크기 대비 %값을 사용할 수 있고, 이를 + 혹은 - 기호로 연계하여 사용할 수도 있다.<br>예) \""50\"", \""100px\"", \""0%\"", \""25% + 100px\""</ko>\n   * @param {number} [options.gap=0] Space value between panels. Should be given in number.(px)<ko>패널간에 부여할 간격의 크기를 나타내는 숫자.(px)</ko>\n   * @param {eg.Flicking.MoveTypeOption} [options.moveType=\""snap\""] Movement style by user input. (ex: snap, freeScroll)<ko>사용자 입력에 의한 이동 방식.(ex: snap, freeScroll)</ko>\n   * @param {boolean} [options.useOffset=false] Whether to use `offsetWidth`/`offsetHeight` instead of `getBoundingClientRect` for panel/viewport size calculation.<br/>You can use this option to calculate the original panel size when CSS transform is applied to viewport or panel.<br/>⚠️ If panel size is not fixed integer value, there can be a 1px gap between panels.<ko>패널과 뷰포트의 크기를 계산할 때 `offsetWidth`/`offsetHeight`를 `getBoundingClientRect` 대신 사용할지 여부.<br/>패널이나 뷰포트에 CSS transform이 설정되어 있을 때 원래 패널 크기를 계산하려면 옵션을 활성화한다.<br/>⚠️ 패널의 크기가 정수로 고정되어있지 않다면 패널 사이에 1px의 공간이 생길 수 있다.</ko>\n   * @param {boolean} [options.renderOnlyVisible] Whether to render visible panels only. This can dramatically increase performance when there're many panels.<ko>보이는 패널만 렌더링할지 여부를 설정한다. 패널이 많을 경우에 퍼포먼스를 크게 향상시킬 수 있다.</ko>\n   * @param {boolean|string[]} [options.isEqualSize] This option indicates whether all panels have the same size(true) of first panel, or it can hold a list of class names that determines panel size.<br/>Enabling this option can increase performance while recalculating panel size.<ko>모든 패널의 크기가 동일한지(true), 혹은 패널 크기를 결정하는 패널 클래스들의 리스트.<br/>이 옵션을 설정하면 패널 크기 재설정시에 성능을 높일 수 있다.</ko>\n   * @param {boolean} [options.isConstantSize] Whether all panels have a constant size that won't be changed after resize. Enabling this option can increase performance while recalculating panel size.<ko>모든 패널의 크기가 불변인지의 여부. 이 옵션을 'true'로 설정하면 패널 크기 재설정시에 성능을 높일 수 있다.</ko>\n   * @param {boolean} [options.renderExternal] Whether to use external rendering. It will delegate DOM manipulation and can synchronize the rendered state by calling `sync()` method. You can use this option to use in frameworks like React, Vue, Angular, which has its states and rendering methods.<ko>외부 렌더링을 사용할 지의 여부. 이 옵션을 사용시 렌더링을 외부에 위임할 수 있고, `sync()`를 호출하여 그 상태를 동기화할 수 있다. 이 옵션을 사용하여, React, Vue, Angular 등 자체적인 상태와 렌더링 방법을 갖는 프레임워크에 대응할 수 있다.</ko>\n   * @param {boolean} [options.collectStatistics=true] Whether to collect statistics on how you are using `Flicking`. These statistical data do not contain any personal information and are used only as a basis for the development of a user-friendly product.<ko>어떻게 `Flicking`을 사용하고 있는지에 대한 통계 수집 여부를 나타낸다. 이 통계자료는 개인정보를 포함하고 있지 않으며 오직 사용자 친화적인 제품으로 발전시키기 위한 근거자료로서 활용한다.</ko>\n   */\n  constructor(\n    element: string | HTMLElement,\n    options: Partial<FlickingOptions> = {},\n  ) {\n    super();\n\n    // Set flicking wrapper user provided\n    let wrapper: HTMLElement | null;\n    if (isString(element)) {\n      wrapper = document.querySelector(element);\n      if (!wrapper) {\n        throw new Error(\""Base element doesn't exist.\"");\n      }\n    } else if (element.nodeName && element.nodeType === 1) {\n      wrapper = element;\n    } else {\n      throw new Error(\""Element should be provided in string or HTMLElement.\"");\n    }\n\n    this.wrapper = wrapper;\n    // Override default options\n    this.options = merge({}, DEFAULT_OPTIONS, options) as FlickingOptions;\n    // Override moveType option\n    const currentOptions = this.options;\n    const moveType = currentOptions.moveType;\n\n    if (moveType in DEFAULT_MOVE_TYPE_OPTIONS) {\n      currentOptions.moveType = DEFAULT_MOVE_TYPE_OPTIONS[moveType as keyof typeof DEFAULT_MOVE_TYPE_OPTIONS];\n    }\n\n    // Make viewport instance with panel container element\n    this.viewport = new Viewport(this, this.options, this.triggerEvent);\n    this.listenInput();\n    this.listenResize();\n\n    if (this.options.collectStatistics) {\n      sendEvent(\n        \""usage\"",\n        \""options\"",\n        options,\n      );\n    }\n  }\n\n  /**\n   * Move to the previous panel if it exists.\n   * @ko 이전 패널이 존재시 해당 패널로 이동한다.\n   * @param [duration=options.duration] Duration of the panel movement animation.(unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public prev(duration?: number): this {\n    const currentPanel = this.getCurrentPanel();\n    const currentState = this.viewport.stateMachine.getState();\n\n    if (currentPanel && currentState.type === STATE_TYPE.IDLE) {\n      const prevPanel = currentPanel.prev();\n      if (prevPanel) {\n        prevPanel.focus(duration);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Move to the next panel if it exists.\n   * @ko 다음 패널이 존재시 해당 패널로 이동한다.\n   * @param [duration=options.duration] Duration of the panel movement animation(unit: ms).<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public next(duration?: number): this {\n    const currentPanel = this.getCurrentPanel();\n    const currentState = this.viewport.stateMachine.getState();\n\n    if (currentPanel && currentState.type === STATE_TYPE.IDLE) {\n      const nextPanel = currentPanel.next();\n      if (nextPanel) {\n        nextPanel.focus(duration);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Move to the panel of given index.\n   * @ko 주어진 인덱스에 해당하는 패널로 이동한다.\n   * @param index The index number of the panel to move.<ko>이동할 패널의 인덱스 번호.</ko>\n   * @param duration [duration=options.duration] Duration of the panel movement.(unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public moveTo(index: number, duration?: number): this {\n    const viewport = this.viewport;\n    const panel = viewport.panelManager.get(index);\n    const state = viewport.stateMachine.getState();\n\n    if (!panel || state.type !== STATE_TYPE.IDLE) {\n      return this;\n    }\n\n    const anchorPosition = panel.getAnchorPosition();\n    const hangerPosition = viewport.getHangerPosition();\n\n    let targetPanel = panel;\n    if (this.options.circular) {\n      const scrollAreaSize = viewport.getScrollAreaSize();\n      // Check all three possible locations, find the nearest position among them.\n      const possiblePositions = [\n        anchorPosition - scrollAreaSize,\n        anchorPosition,\n        anchorPosition + scrollAreaSize,\n      ];\n      const nearestPosition = possiblePositions.reduce((nearest, current) => {\n        return (Math.abs(current - hangerPosition) < Math.abs(nearest - hangerPosition))\n          ? current\n          : nearest;\n      }, Infinity) - panel.getRelativeAnchorPosition();\n\n      const identicals = panel.getIdenticalPanels();\n      const offset = nearestPosition - anchorPosition;\n      if (offset > 0) {\n        // First cloned panel is nearest\n        targetPanel = identicals[1];\n      } else if (offset < 0) {\n        // Last cloned panel is nearest\n        targetPanel = identicals[identicals.length - 1];\n      }\n\n      targetPanel = targetPanel.clone(targetPanel.getCloneIndex(), true);\n      targetPanel.setPosition(nearestPosition);\n    }\n    const currentIndex = this.getIndex();\n\n    if (hangerPosition === targetPanel.getAnchorPosition() && currentIndex === index) {\n      return this;\n    }\n\n    const eventType = panel.getIndex() === viewport.getCurrentIndex()\n      ? \""\""\n      : EVENTS.CHANGE;\n\n    viewport.moveTo(\n      targetPanel,\n      viewport.findEstimatedPosition(targetPanel),\n      eventType,\n      null,\n      duration,\n    );\n    return this;\n  }\n\n  /**\n   * Return index of the current panel. `-1` if no panel exists.\n   * @ko 현재 패널의 인덱스 번호를 반환한다. 패널이 하나도 없을 경우 `-1`을 반환한다.\n   * @return Current panel's index, zero-based integer.<ko>현재 패널의 인덱스 번호. 0부터 시작하는 정수.</ko>\n   */\n  public getIndex(): number {\n    return this.viewport.getCurrentIndex();\n  }\n\n  /**\n   * Return the wrapper element user provided in constructor.\n   * @ko 사용자가 생성자에서 제공한 래퍼 엘리먼트를 반환한다.\n   * @return Wrapper element user provided.<ko>사용자가 제공한 래퍼 엘리먼트.</ko>\n   */\n  public getElement(): HTMLElement {\n    return this.wrapper;\n  }\n\n  /**\n   * Return current panel. `null` if no panel exists.\n   * @ko 현재 패널을 반환한다. 패널이 하나도 없을 경우 `null`을 반환한다.\n   * @return Current panel.<ko>현재 패널.</ko>\n   */\n  public getCurrentPanel(): FlickingPanel | null {\n    const viewport = this.viewport;\n    const panel = viewport.getCurrentPanel();\n    return panel\n      ? panel\n      : null;\n  }\n\n  /**\n   * Return the panel of given index. `null` if it doesn't exists.\n   * @ko 주어진 인덱스에 해당하는 패널을 반환한다. 해당 패널이 존재하지 않을 시 `null`이다.\n   * @return Panel of given index.<ko>주어진 인덱스에 해당하는 패널.</ko>\n   */\n  public getPanel(index: number): FlickingPanel | null {\n    const viewport = this.viewport;\n    const panel = viewport.panelManager.get(index);\n    return panel\n      ? panel\n      : null;\n  }\n\n  /**\n   * Return all panels.\n   * @ko 모든 패널들을 반환한다.\n   * @param - Should include cloned panels or not.<ko>복사된 패널들을 포함할지의 여부.</ko>\n   * @return All panels.<ko>모든 패널들.</ko>\n   */\n  public getAllPanels(includeClone?: boolean): FlickingPanel[] {\n    const viewport = this.viewport;\n    const panelManager = viewport.panelManager;\n    const panels = includeClone\n      ? panelManager.allPanels()\n      : panelManager.originalPanels();\n\n    return panels\n      .filter(panel => !!panel);\n  }\n\n  /**\n   * Return the panels currently shown in viewport area.\n   * @ko 현재 뷰포트 영역에서 보여지고 있는 패널들을 반환한다.\n   * @return Panels currently shown in viewport area.<ko>현재 뷰포트 영역에 보여지는 패널들</ko>\n   */\n  public getVisiblePanels(): FlickingPanel[] {\n    return this.viewport.calcVisiblePanels();\n  }\n\n  /**\n   * Return length of original panels.\n   * @ko 원본 패널의 개수를 반환한다.\n   * @return Length of original panels.<ko>원본 패널의 개수</ko>\n   */\n  public getPanelCount(): number {\n    return this.viewport.panelManager.getPanelCount();\n  }\n\n  /**\n   * Return how many groups of clones are created.\n   * @ko 몇 개의 클론 그룹이 생성되었는지를 반환한다.\n   * @return Length of cloned panel groups.<ko>클론된 패널 그룹의 개수</ko>\n   */\n  public getCloneCount(): number {\n    return this.viewport.panelManager.getCloneCount();\n  }\n\n  /**\n   * Get maximum panel index for `infinite` mode.\n   * @ko `infinite` 모드에서 적용되는 추가 가능한 패널의 최대 인덱스 값을 반환한다.\n   * @see {@link eg.Flicking.FlickingOptions}\n   * @return Maximum index of panel that can be added.<ko>최대 추가 가능한 패널의 인덱스.</ko>\n   */\n  public getLastIndex(): number {\n    return this.viewport.panelManager.getLastIndex();\n  }\n\n  /**\n   * Set maximum panel index for `infinite' mode.<br>[needPanel]{@link eg.Flicking#events:needPanel} won't be triggered anymore when last panel's index reaches it.<br>Also, you can't add more panels after it.\n   * @ko `infinite` 모드에서 적용되는 패널의 최대 인덱스를 설정한다.<br>마지막 패널의 인덱스가 설정한 값에 도달할 경우 더 이상 [needPanel]{@link eg.Flicking#events:needPanel} 이벤트가 발생되지 않는다.<br>또한, 설정한 인덱스 이후로 새로운 패널을 추가할 수 없다.\n   * @param - Maximum panel index.\n   * @see {@link eg.Flicking.FlickingOptions}\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public setLastIndex(index: number): this {\n    this.viewport.setLastIndex(index);\n\n    return this;\n  }\n\n  /**\n   * Return panel movement animation.\n   * @ko 현재 패널 이동 애니메이션이 진행 중인지를 반환한다.\n   * @return Is animating or not.<ko>애니메이션 진행 여부.</ko>\n   */\n  public isPlaying(): boolean {\n    return this.viewport.stateMachine.getState().playing;\n  }\n\n  /**\n   * Unblock input devices.\n   * @ko 막았던 입력 장치로부터의 입력을 푼다.\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public enableInput(): this {\n    this.viewport.enable();\n\n    return this;\n  }\n\n  /**\n   * Block input devices.\n   * @ko 입력 장치로부터의 입력을 막는다.\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public disableInput(): this {\n    this.viewport.disable();\n\n    return this;\n  }\n\n  /**\n   * Get current flicking status. You can restore current state by giving returned value to [setStatus()]{@link eg.Flicking#setStatus}.\n   * @ko 현재 상태 값을 반환한다. 반환받은 값을 [setStatus()]{@link eg.Flicking#setStatus} 메소드의 인자로 지정하면 현재 상태를 복원할 수 있다.\n   * @return An object with current status value information.<ko>현재 상태값 정보를 가진 객체.</ko>\n   */\n  public getStatus(): FlickingStatus {\n    const viewport = this.viewport;\n\n    const panels = viewport.panelManager.originalPanels()\n      .filter(panel => !!panel)\n      .map(panel => {\n        return {\n          html: panel.getElement().outerHTML,\n          index: panel.getIndex(),\n        };\n      });\n\n    return {\n      index: viewport.getCurrentIndex(),\n      panels,\n      position: viewport.getCameraPosition(),\n    };\n  }\n\n  /**\n   * Restore to the state of the `status`.\n   * @ko `status`의 상태로 복원한다.\n   * @param status Status value to be restored. You can specify the return value of the [getStatus()]{@link eg.Flicking#getStatus} method.<ko>복원할 상태 값. [getStatus()]{@link eg.Flicking#getStatus}메서드의 반환값을 지정하면 된다.</ko>\n   */\n  public setStatus(status: FlickingStatus): void {\n    this.viewport.restore(status);\n  }\n\n  /**\n   * Add plugins that can have different effects on Flicking.\n   * @ko 플리킹에 다양한 효과를 부여할 수 있는 플러그인을 추가한다.\n   * @param - The plugin(s) to add.<ko>추가할 플러그인(들).</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public addPlugins(plugins: Plugin | Plugin[]) {\n    this.viewport.addPlugins(plugins);\n    return this;\n  }\n\n  /**\n   * Remove plugins from Flicking.\n   * @ko 플리킹으로부터 플러그인들을 제거한다.\n   * @param - The plugin(s) to remove.<ko>제거 플러그인(들).</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public removePlugins(plugins: Plugin | Plugin[]) {\n    this.viewport.removePlugins(plugins);\n    return this;\n  }\n\n  /**\n   * Return the reference element and all its children to the state they were in before the instance was created. Remove all attached event handlers. Specify `null` for all attributes of the instance (including inherited attributes).\n   * @ko 기준 요소와 그 하위 패널들을 인스턴스 생성전의 상태로 되돌린다. 부착된 모든 이벤트 핸들러를 탈거한다. 인스턴스의 모든 속성(상속받은 속성포함)에 `null`을 지정한다.\n   * @example\n   * const flick = new eg.Flicking(\""#flick\"");\n   * flick.destroy();\n   * console.log(flick.moveTo); // null\n   */\n  public destroy(option: Partial<DestroyOption> = {}): void {\n    this.off();\n\n    if (this.options.autoResize) {\n      window.removeEventListener(\""resize\"", this.resize);\n    }\n\n    this.viewport.destroy(option);\n\n    // release resources\n    for (const x in this) {\n      (this as any)[x] = null;\n    }\n  }\n\n  /**\n   * Update panels to current state.\n   * @ko 패널들을 현재 상태에 맞춰 갱신한다.\n   * @method\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public resize = (): this => {\n    const viewport = this.viewport;\n    const options = this.options;\n\n    const allPanels = viewport.panelManager.allPanels();\n    if (!options.isConstantSize) {\n      allPanels.forEach(panel => panel.unCacheBbox());\n    }\n\n    const shouldResetElements = options.renderOnlyVisible\n      && !options.isConstantSize\n      && options.isEqualSize !== true;\n\n    viewport.unCacheBbox();\n    // This should be done before adding panels, to lower performance issue\n    viewport.updateBbox();\n\n    if (shouldResetElements) {\n      viewport.appendUncachedPanelElements(allPanels as Panel[]);\n    }\n\n    viewport.resize();\n\n    return this;\n  }\n\n  /**\n   * Add new panels at the beginning of panels.\n   * @ko 제일 앞에 새로운 패널을 추가한다.\n   * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n   * @return Array of appended panels.<ko>추가된 패널들의 배열</ko>\n   * @example\n   * // Suppose there were no panels at initialization\n   * const flicking = new eg.Flicking(\""#flick\"");\n   * flicking.replace(3, document.createElement(\""div\"")); // Add new panel at index 3\n   * flicking.prepend(\""\\<div\\>Panel\\</div\\>\""); // Prepended at index 2\n   * flicking.prepend([\""\\<div\\>Panel\\</div\\>\"", document.createElement(\""div\"")]); // Prepended at index 0, 1\n   * flicking.prepend(\""\\<div\\>Panel\\</div\\>\""); // Prepended at index 0, pushing every panels behind it.\n   */\n  public prepend(element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const viewport = this.viewport;\n    const parsedElements = parseElement(element);\n\n    const insertingIndex = Math.max(viewport.panelManager.getRange().min - parsedElements.length, 0);\n    return viewport.insert(insertingIndex, parsedElements);\n  }\n\n  /**\n   * Add new panels at the end of panels.\n   * @ko 제일 끝에 새로운 패널을 추가한다.\n   * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n   * @return Array of appended panels.<ko>추가된 패널들의 배열</ko>\n   * @example\n   * // Suppose there were no panels at initialization\n   * const flicking = new eg.Flicking(\""#flick\"");\n   * flicking.append(document.createElement(\""div\"")); // Appended at index 0\n   * flicking.append(\""\\<div\\>Panel\\</div\\>\""); // Appended at index 1\n   * flicking.append([\""\\<div\\>Panel\\</div\\>\"", document.createElement(\""div\"")]); // Appended at index 2, 3\n   * // Even this is possible\n   * flicking.append(\""\\<div\\>Panel 1\\</div\\>\\<div\\>Panel 2\\</div\\>\""); // Appended at index 4, 5\n   */\n  public append(element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const viewport = this.viewport;\n\n    return viewport.insert(viewport.panelManager.getRange().max + 1, element);\n  }\n\n  /**\n   * Replace existing panels with new panels from given index. If target index is empty, add new panel at target index.\n   * @ko 주어진 인덱스로부터의 패널들을 새로운 패널들로 교체한다. 인덱스에 해당하는 자리가 비어있다면, 새로운 패널을 해당 자리에 집어넣는다.\n   * @param index - Start index to replace new panels.<ko>새로운 패널들로 교체할 시작 인덱스</ko>\n   * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n   * @return Array of created panels by replace.<ko>교체되어 새롭게 추가된 패널들의 배열</ko>\n   * @example\n   * // Suppose there were no panels at initialization\n   * const flicking = new eg.Flicking(\""#flick\"");\n   *\n   * // This will add new panel at index 3,\n   * // Index 0, 1, 2 is empty at this moment.\n   * // [empty, empty, empty, PANEL]\n   * flicking.replace(3, document.createElement(\""div\""));\n   *\n   * // As index 2 was empty, this will also add new panel at index 2.\n   * // [empty, empty, PANEL, PANEL]\n   * flicking.replace(2, \""\\<div\\>Panel\\</div\\>\"");\n   *\n   * // Index 3 was not empty, so it will replace previous one.\n   * // It will also add new panels at index 4 and 5.\n   * // before - [empty, empty, PANEL, PANEL]\n   * // after - [empty, empty, PANEL, NEW_PANEL, NEW_PANEL, NEW_PANEL]\n   * flicking.replace(3, [\""\\<div\\>Panel\\</div\\>\"", \""\\<div\\>Panel\\</div\\>\"", \""\\<div\\>Panel\\</div\\>\""])\n   */\n  public replace(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n    return this.viewport.replace(index, element);\n  }\n\n  /**\n   * Remove panel at target index. This will decrease index of panels behind it.\n   * @ko `index`에 해당하는 자리의 패널을 제거한다. 수행시 `index` 이후의 패널들의 인덱스가 감소된다.\n   * @param index - Index of panel to remove.<ko>제거할 패널의 인덱스</ko>\n   * @param {number} [deleteCount=1] - Number of panels to remove from index.<ko>`index` 이후로 제거할 패널의 개수.</ko>\n   * @return Array of removed panels<ko>제거된 패널들의 배열</ko>\n   */\n  public remove(index: number, deleteCount: number = 1): FlickingPanel[] {\n    return this.viewport.remove(index, deleteCount);\n  }\n\n  /**\n   * Get indexes to render. Should be used with `renderOnlyVisible` option.\n   * @private\n   * @ko 렌더링이 필요한 인덱스들을 반환한다. `renderOnlyVisible` 옵션과 함께 사용해야 한다.\n   * @param - Info object of how panel infos are changed.<ko>패널 정보들의 변경 정보를 담는 오브젝트.</ko>\n   * @return Array of indexes to render.<ko>렌더링할 인덱스의 배열</ko>\n   */\n  public getRenderingIndexes(diffResult: DiffResult<any>): number[] {\n    const viewport = this.viewport;\n    const { min, max } = viewport.getVisibleIndex();\n    const maintained = diffResult.maintained.reduce((values: {[key: number]: number}, [before, after]) => {\n      values[before] = after;\n      return values;\n    }, {});\n\n    const prevPanelCount = diffResult.prevList.length;\n    const panelCount = diffResult.list.length;\n    const added = diffResult.added;\n    const list = counter(prevPanelCount * (this.getCloneCount() + 1));\n\n    let visibles = min >= 0\n      ? list.slice(min, max + 1)\n      : list.slice(0, max + 1).concat(list.slice(min));\n    visibles = visibles\n      .filter(val => maintained[val % prevPanelCount] != null)\n      .map(val => {\n        const cloneIndex = Math.floor(val / prevPanelCount);\n        const changedIndex = maintained[val % prevPanelCount];\n\n        return changedIndex + panelCount * cloneIndex;\n      });\n\n    const renderingPanels = [...visibles, ...added];\n    const allPanels = viewport.panelManager.allPanels();\n\n    viewport.setVisiblePanels(renderingPanels.map(index => allPanels[index]));\n\n    return renderingPanels;\n  }\n\n  /**\n   * Synchronize info of panels instance with info given by external rendering.\n   * @ko 외부 렌더링 방식에 의해 입력받은 패널의 정보와 현재 플리킹이 갖는 패널 정보를 동기화한다.\n   * @private\n   * @param - Info object of how panel infos are changed.<ko>패널 정보들의 변경 정보를 담는 오브젝트.</ko>\n   * @param - Whether called from sync method <ko> sync 메소드로부터 호출됐는지 여부 </ko>\n   */\n  public beforeSync(diffInfo: BeforeSyncResult) {\n    const { maintained, added, changed, removed } = diffInfo;\n    const viewport = this.viewport;\n    const panelManager = viewport.panelManager;\n    const isCircular = this.options.circular;\n    const cloneCount = panelManager.getCloneCount();\n    const prevClonedPanels = panelManager.clonedPanels();\n\n    // Update visible panels\n    const newVisiblePanels = viewport.getVisiblePanels()\n      .filter(panel => findIndex(removed, index => {\n        return index === panel.getIndex();\n      }) < 0);\n    viewport.setVisiblePanels(newVisiblePanels);\n\n    // Did not changed at all\n    if (\n      added.length <= 0\n      && removed.length <= 0\n      && changed.length <= 0\n      && cloneCount === prevClonedPanels.length\n    ) {\n      return this;\n    }\n    const prevOriginalPanels = panelManager.originalPanels();\n    const newPanels: Panel[] = [];\n    const newClones: Panel[][] = counter(cloneCount).map(() => []);\n\n    maintained.forEach(([beforeIdx, afterIdx]) => {\n      newPanels[afterIdx] = prevOriginalPanels[beforeIdx];\n      newPanels[afterIdx].setIndex(afterIdx);\n    });\n\n    added.forEach(addIndex => {\n      newPanels[addIndex] = new Panel(null, addIndex, this.viewport);\n    });\n\n    if (isCircular) {\n      counter(cloneCount).forEach(groupIndex => {\n        const prevCloneGroup = prevClonedPanels[groupIndex];\n        const newCloneGroup = newClones[groupIndex];\n\n        maintained.forEach(([beforeIdx, afterIdx]) => {\n          newCloneGroup[afterIdx] = prevCloneGroup\n            ? prevCloneGroup[beforeIdx]\n            : newPanels[afterIdx].clone(groupIndex, false);\n\n          newCloneGroup[afterIdx].setIndex(afterIdx);\n        });\n\n        added.forEach(addIndex => {\n          const newPanel = newPanels[addIndex];\n\n          newCloneGroup[addIndex] = newPanel.clone(groupIndex, false);\n        });\n      });\n    }\n\n    added.forEach(index => { viewport.updateCheckedIndexes({ min: index, max: index }); });\n    removed.forEach(index => { viewport.updateCheckedIndexes({ min: index - 1, max: index + 1 }); });\n\n    const checkedIndexes = viewport.getCheckedIndexes();\n    checkedIndexes.forEach(([min, max], idx) => {\n      // Push checked indexes backward\n      const pushedIndex = added.filter(index => index < min && panelManager.has(index)).length\n        - removed.filter(index => index < min).length;\n      checkedIndexes.splice(idx, 1, [min + pushedIndex, max + pushedIndex]);\n    });\n\n    // Only effective only when there are least one panel which have changed its index\n    if (changed.length > 0) {\n      // Removed checked index by changed ones after pushing\n      maintained.forEach(([, next]) => { viewport.updateCheckedIndexes({ min: next, max: next }); });\n    }\n    panelManager.replacePanels(newPanels, newClones);\n    this.isPanelChangedAtBeforeSync = true;\n  }\n\n  /**\n   * Synchronize info of panels with DOM info given by external rendering.\n   * @ko 외부 렌더링 방식에 의해 입력받은 DOM의 정보와 현재 플리킹이 갖는 패널 정보를 동기화 한다.\n   * @private\n   * @param - Info object of how panel elements are changed.<ko>패널의 DOM 요소들의 변경 정보를 담는 오브젝트.</ko>\n   */\n  public sync(diffInfo: SyncResult): this {\n    const { list, maintained, added, changed, removed } = diffInfo;\n\n    // Did not changed at all\n    if (added.length <= 0 && removed.length <= 0 && changed.length <= 0) {\n      return this;\n    }\n    const viewport = this.viewport;\n    const { renderOnlyVisible, circular } = this.options;\n    const panelManager = viewport.panelManager;\n\n    if (!renderOnlyVisible) {\n      const indexRange = panelManager.getRange();\n      let beforeDiffInfo: BeforeSyncResult = diffInfo;\n\n      if (circular) {\n        const prevOriginalPanelCount = indexRange.max;\n        const originalPanelCount = (list.length / (panelManager.getCloneCount() + 1)) >> 0;\n        const originalAdded = added.filter(index => index < originalPanelCount);\n        const originalRemoved = removed.filter(index => index <= prevOriginalPanelCount);\n        const originalMaintained = maintained.filter(([beforeIdx]) => beforeIdx <= prevOriginalPanelCount);\n        const originalChanged = changed.filter(([beforeIdx]) => beforeIdx <= prevOriginalPanelCount);\n\n        beforeDiffInfo = {\n          added: originalAdded,\n          maintained: originalMaintained,\n          removed: originalRemoved,\n          changed: originalChanged,\n        };\n      }\n      this.beforeSync(beforeDiffInfo);\n    }\n\n    const visiblePanels = renderOnlyVisible\n      ? viewport.getVisiblePanels()\n      : this.getAllPanels(true);\n\n    added.forEach(addedIndex => {\n      const addedElement = list[addedIndex];\n      const beforePanel = visiblePanels[addedIndex] as Panel;\n\n      beforePanel.setElement(addedElement);\n      // As it can be 0\n      beforePanel.unCacheBbox();\n    });\n    if (this.isPanelChangedAtBeforeSync) {\n      viewport.resetVisibleIndex();\n      this.isPanelChangedAtBeforeSync = false;\n    }\n    viewport.resize();\n\n    return this;\n  }\n\n  private listenInput(): void {\n    const flicking = this;\n    const viewport = flicking.viewport;\n    const stateMachine = viewport.stateMachine;\n\n    // Set event context\n    flicking.eventContext = {\n      flicking,\n      viewport: flicking.viewport,\n      transitTo: stateMachine.transitTo,\n      triggerEvent: flicking.triggerEvent,\n      moveCamera: flicking.moveCamera,\n      stopCamera: viewport.stopCamera,\n    };\n\n    const handlers = {};\n    for (const key in AXES_EVENTS) {\n      const eventType = AXES_EVENTS[key];\n\n      handlers[eventType] = (e: any) => stateMachine.fire(eventType, e, flicking.eventContext);\n    }\n\n    // Connect Axes instance with PanInput\n    flicking.viewport.connectAxesHandler(handlers);\n  }\n\n  private listenResize(): void {\n    if (this.options.autoResize) {\n      window.addEventListener(\""resize\"", this.resize);\n    }\n  }\n\n  private triggerEvent = <T extends FlickingEvent>(\n    eventName: string,\n    axesEvent: any,\n    isTrusted: boolean,\n    params: Partial<T> = {},\n  ): TriggerCallback => {\n    const viewport = this.viewport;\n\n    let canceled: boolean = true;\n\n    // Ignore events before viewport is initialized\n    if (viewport) {\n      const state = viewport.stateMachine.getState();\n      const { prev, next } = viewport.getScrollArea();\n      const pos = viewport.getCameraPosition();\n      let progress = getProgress(pos, [prev, prev, next]);\n\n      if (this.options.circular) {\n        progress %= 1;\n      }\n      canceled = !super.trigger(eventName, merge({\n        type: eventName,\n        index: this.getIndex(),\n        panel: this.getCurrentPanel(),\n        direction: state.direction,\n        holding: state.holding,\n        progress,\n        axesEvent,\n        isTrusted,\n      }, params));\n    }\n\n    return {\n      onSuccess(callback: () => void): TriggerCallback {\n        if (!canceled) {\n          callback();\n        }\n        return this;\n      },\n      onStopped(callback: () => void): TriggerCallback {\n        if (canceled) {\n          callback();\n        }\n        return this;\n      },\n    } as TriggerCallback;\n  }\n\n  // Return result of \""move\"" event triggered\n  private moveCamera = (axesEvent: any): TriggerCallback => {\n    const viewport = this.viewport;\n    const state = viewport.stateMachine.getState();\n    const options = this.options;\n\n    const pos = axesEvent.pos.flick;\n    const previousPosition = viewport.getCameraPosition();\n\n    if (axesEvent.isTrusted && state.holding) {\n      const inputOffset = options.horizontal\n        ? axesEvent.inputEvent.offsetX\n        : axesEvent.inputEvent.offsetY;\n\n      const isNextDirection = inputOffset < 0;\n\n      let cameraChange = pos - previousPosition;\n      const looped = isNextDirection === (pos < previousPosition);\n      if (options.circular && looped) {\n        // Reached at max/min range of axes\n        const scrollAreaSize = viewport.getScrollAreaSize();\n        cameraChange = (cameraChange > 0 ? -1 : 1) * (scrollAreaSize - Math.abs(cameraChange));\n      }\n\n      const currentDirection = cameraChange === 0\n        ? state.direction\n        : cameraChange > 0\n          ? DIRECTION.NEXT\n          : DIRECTION.PREV;\n\n      state.direction = currentDirection;\n    }\n    state.delta += axesEvent.delta.flick;\n\n    viewport.moveCamera(pos, axesEvent);\n    return this.triggerEvent(EVENTS.MOVE, axesEvent, axesEvent.isTrusted)\n      .onStopped(() => {\n        // Undo camera movement\n        viewport.moveCamera(previousPosition, axesEvent);\n      });\n  }\n}\n\nexport default Flicking;\n"",""import Flicking from \""./Flicking\"";\nimport { withFlickingMethods } from \""./utils\"";\nimport { DEFAULT_OPTIONS, MOVE_TYPE } from \""./consts\"";\n\n(Flicking as any).withFlickingMethods = withFlickingMethods;\n(Flicking as any).DEFAULT_OPTIONS = DEFAULT_OPTIONS;\n(Flicking as any).MOVE_TYPE = MOVE_TYPE;\nexport default Flicking;\n""],""names"":[""isUndefined"",""value"",""Component"",""_eventHandler"",""options"",""_proto"",""prototype"",""trigger"",""eventName"",""customEvent"",""handlerList"",""hasHandlerList"",""length"",""concat"",""eventType"",""isCanceled"",""arg"",""i"",""stop"",""currentTarget"",""_len"",""arguments"",""restParam"",""Array"",""_key"",""apply"",""once"",""handlerToAttach"",""eventHash"",""self"",""on"",""listener"",""_len2"",""_key2"",""off"",""hasOn"",""name"",""push"",""handlerToDetach"",""undefined"",""k"",""handlerFunction"",""splice"",""VERSION"",""_extends"",""Object"",""assign"",""target"",""source"",""key"",""hasOwnProperty"",""call"",""_inheritsLoose"",""subClass"",""superClass"",""create"",""constructor"",""__proto__"",""_assertThisInitialized"",""ReferenceError"",""TypeError"",""output"",""index"",""nextKey"",""assign$1"",""VENDOR_PREFIXES"",""TEST_ELEMENT"",""document"",""style"",""createElement"",""TYPE_FUNCTION"",""round"",""Math"",""abs"",""now"",""Date"",""prefixed"",""obj"",""property"",""prefix"",""prop"",""camelProp"",""toUpperCase"",""slice"",""win"",""window"",""PREFIXED_TOUCH_ACTION"",""NATIVE_TOUCH_ACTION"",""getTouchActionProps"",""touchMap"",""cssSupports"",""CSS"",""supports"",""forEach"",""val"",""TOUCH_ACTION_COMPUTE"",""TOUCH_ACTION_AUTO"",""TOUCH_ACTION_MANIPULATION"",""TOUCH_ACTION_NONE"",""TOUCH_ACTION_PAN_X"",""TOUCH_ACTION_PAN_Y"",""TOUCH_ACTION_MAP"",""MOBILE_REGEX"",""SUPPORT_TOUCH"",""SUPPORT_POINTER_EVENTS"",""SUPPORT_ONLY_TOUCH"",""test"",""navigator"",""userAgent"",""INPUT_TYPE_TOUCH"",""INPUT_TYPE_PEN"",""INPUT_TYPE_MOUSE"",""INPUT_TYPE_KINECT"",""COMPUTE_INTERVAL"",""INPUT_START"",""INPUT_MOVE"",""INPUT_END"",""INPUT_CANCEL"",""DIRECTION_NONE"",""DIRECTION_LEFT"",""DIRECTION_RIGHT"",""DIRECTION_UP"",""DIRECTION_DOWN"",""DIRECTION_HORIZONTAL"",""DIRECTION_VERTICAL"",""DIRECTION_ALL"",""PROPS_XY"",""PROPS_CLIENT_XY"",""each"",""iterator"",""context"",""boolOrFn"",""args"",""inStr"",""str"",""find"",""indexOf"",""cleanTouchActions"",""actions"",""hasPanX"",""hasPanY"",""TouchAction"",""manager"",""set"",""compute"",""element"",""toLowerCase"",""trim"",""update"",""touchAction"",""recognizers"",""recognizer"",""enable"",""getTouchAction"",""join"",""preventDefaults"",""input"",""srcEvent"",""direction"",""offsetDirection"",""session"",""prevented"",""preventDefault"",""hasNone"",""isTapPointer"",""pointers"",""isTapMovement"",""distance"",""isTapTouchTime"",""deltaTime"",""preventSrc"",""hasParent"",""node"",""parent"",""parentNode"",""getCenter"",""pointersLength"",""x"",""clientX"",""y"",""clientY"",""simpleCloneInputData"",""timeStamp"",""center"",""deltaX"",""deltaY"",""getDistance"",""p1"",""p2"",""props"",""sqrt"",""getAngle"",""atan2"",""PI"",""getDirection"",""computeDeltaXY"",""offset"",""offsetDelta"",""prevDelta"",""prevInput"",""getVelocity"",""getScale"",""start"",""end"",""getRotation"",""computeIntervalInputData"",""last"",""lastInterval"",""velocity"",""velocityX"",""velocityY"",""v"",""computeInputData"",""firstInput"",""firstMultiple"",""offsetCenter"",""angle"",""overallVelocity"",""overallVelocityX"",""overallVelocityY"",""scale"",""rotation"",""maxPointers"",""inputHandler"",""pointersLen"",""changedPointersLen"",""changedPointers"",""isFirst"",""isFinal"",""emit"",""recognize"",""splitStr"",""split"",""addEventListeners"",""types"",""handler"",""type"",""addEventListener"",""removeEventListeners"",""removeEventListener"",""getWindowForElement"",""doc"",""ownerDocument"",""defaultView"",""parentWindow"",""Input"",""callback"",""inputTarget"",""domHandler"",""ev"",""init"",""evEl"",""evTarget"",""evWin"",""destroy"",""inArray"",""src"",""findByKey"",""POINTER_INPUT_MAP"",""pointerdown"",""pointermove"",""pointerup"",""pointercancel"",""pointerout"",""IE10_POINTER_TYPE_ENUM"",""POINTER_ELEMENT_EVENTS"",""POINTER_WINDOW_EVENTS"",""MSPointerEvent"",""PointerEvent"",""PointerEventInput"",""_Input"",""_this"",""proto"",""store"",""pointerEvents"",""removePointer"",""eventTypeNormalized"",""replace"",""pointerType"",""isTouch"",""storeIndex"",""pointerId"",""button"",""toArray"",""uniqueArray"",""sort"",""results"",""values"",""a"",""b"",""TOUCH_INPUT_MAP"",""touchstart"",""touchmove"",""touchend"",""touchcancel"",""TOUCH_TARGET_EVENTS"",""TouchInput"",""targetIds"",""touches"",""getTouches"",""allTouches"",""identifier"",""targetTouches"",""changedTouches"",""changedTargetTouches"",""filter"",""touch"",""MOUSE_INPUT_MAP"",""mousedown"",""mousemove"",""mouseup"",""MOUSE_ELEMENT_EVENTS"",""MOUSE_WINDOW_EVENTS"",""MouseInput"",""pressed"",""which"",""DEDUP_TIMEOUT"",""DEDUP_DISTANCE"",""setLastTouch"",""eventData"",""_eventData$changedPoi"",""primaryTouch"",""lastTouch"",""lts"",""lastTouches"",""removeLastTouch"",""setTimeout"",""recordTouches"",""isSyntheticEvent"",""t"",""dx"",""dy"",""TouchMouseInput"",""_manager"",""inputEvent"",""inputData"",""isMouse"",""sourceCapabilities"",""firesTouchEvents"",""mouse"",""createInputInstance"",""Type"",""inputClass"",""invokeArrayArg"",""fn"",""isArray"",""STATE_POSSIBLE"",""STATE_BEGAN"",""STATE_CHANGED"",""STATE_ENDED"",""STATE_RECOGNIZED"",""STATE_CANCELLED"",""STATE_FAILED"",""_uniqueId"",""uniqueId"",""getRecognizerByNameIfManager"",""otherRecognizer"",""get"",""stateStr"",""state"",""Recognizer"",""id"",""simultaneous"",""requireFail"",""recognizeWith"",""dropRecognizeWith"",""requireFailure"",""dropRequireFailure"",""hasRequireFailures"",""canRecognizeWith"",""event"",""additionalEvent"",""tryEmit"",""canEmit"",""inputDataClone"",""reset"",""process"",""defaults"",""domEvents"",""preset"",""cssProps"",""userSelect"",""touchSelect"",""touchCallout"",""contentZooming"",""userDrag"",""tapHighlightColor"",""STOP"",""FORCED_STOP"",""toggleCssProps"",""add"",""oldCssProps"",""triggerDomEvent"",""data"",""gestureEvent"",""createEvent"",""initEvent"",""gesture"",""dispatchEvent"",""Manager"",""handlers"",""item"",""force"",""stopped"",""curRecognizer"",""existing"",""remove"",""targetRecognizer"",""events"",""AttrRecognizer"",""_Recognizer"",""attrTest"",""optionPointers"",""isRecognized"",""isValid"",""directionStr"",""PanRecognizer"",""_AttrRecognizer"",""threshold"",""pX"",""pY"",""directionTest"",""hasMoved"",""extendStatics"",""setPrototypeOf"",""d"",""p"",""__extends"",""__"",""__assign"",""s"",""n"",""FIXED_DIGIT"",""TRANSFORM"",""bodyStyle"",""head"",""getElementsByTagName"",""len"",""nodes"",""el"",""$"",""param"",""multi"",""match"",""dummy"",""innerHTML"",""childNodes"",""querySelectorAll"",""nodeName"",""nodeType"",""jQuery"",""jquery"",""map"",""raf"",""requestAnimationFrame"",""webkitRequestAnimationFrame"",""caf"",""cancelAnimationFrame"",""webkitCancelAnimationFrame"",""keyInfo_1"",""oldraf_1"",""wrapCallback"",""timestamp"",""performance"",""getTime"",""clearTimeout"",""fp"",""mapToFixed"",""toFixed"",""tranformed"",""filtered"",""every"",""equal"",""base"",""num"",""getInsidePosition"",""destPos"",""range"",""circular"",""bounce"",""toDestPos"",""targetRange"",""max"",""min"",""isOutside"",""pos"",""getDuration"",""deceleration"",""duration"",""isCircularable"",""getCirculatedPos"",""isAccurate"",""toPos"",""minMax"",""AnimationManager"",""_a"",""itm"",""em"",""axm"",""animationEnd"",""bind"",""__proto"",""depaPos"",""wishDuration"",""durations_1"",""keys"",""reduce"",""Infinity"",""minimumDuration"",""maximumDuration"",""createAnimationParam"",""option"",""delta"",""getDelta"",""isTrusted"",""done"",""grab"",""axes"",""_animateParam"",""orgPos_1"",""opt"",""triggerChange"",""_raf"",""triggerAnimationEnd"",""getEventInfo"",""restore"",""animateTo"",""beforeParam"",""circularTargets"",""setTo"",""setInterrupt"",""finish"",""triggerFinish"",""animateLoop"",""complete"",""info_1"",""self_1"",""prevPos_1"",""prevEasingPer_1"",""directions_1"",""prevTime_1"",""startTime"",""loop"",""currentTime"",""easingPer"",""easing"",""nextPos"",""getUserControll"",""userWish"",""retTrigger"",""triggerAnimationStart"",""console"",""warn"",""orgPos"",""movedPos"",""setBy"",""EventManager"",""triggerHold"",""triggerRelease"",""createUserControll"",""holding"",""am"",""eventInfo"",""moveTo"",""result"",""userControl"",""userDuration"",""setAnimationManager"",""InterruptManager"",""_prevented"",""isInterrupting"",""interruptable"",""isInterrupted"",""AxisManager"",""axis"",""_complementOptions"",""_pos"",""acc"",""axisOption"",""fullDepaPos"",""axisOptions"",""InputObserver"",""moveDistance"",""isStopped"",""atOutside"",""tn"",""tx"",""initSlope_1"",""out"",""hold"",""changeOption"",""change"",""release"",""inputDuration"",""isEqual"",""Axes"",""_super"",""startPos"",""_inputs"",""easeOutCubic"",""pow"",""io"",""connect"",""inputType"",""mapped"",""disconnect"",""targets"",""hammer"",""mapAxes"",""isBounceArea"",""UNIQUEKEY"",""toAxis"",""createHammer"",""e"",""convertInputType"",""hasTouch"",""hasMouse"",""hasPointer"",""getDirectionByAngle"",""thresholdAngle"",""toAngle"",""getNextOffset"",""speeds"",""normalSpeed"",""useDirection"",""checkType"",""userDirection"",""PanInput"",""panRecognizer"",""Error"",""hammerManagerOptions"",""onHammerInput"",""onPanmove"",""onPanend"",""useHorizontal"",""useVertical"",""_direction"",""observer"",""hammerOption"",""removeRecognizer"",""dettachEvent"",""keyValue"",""String"",""random"",""Pan"",""attachEvent"",""disable"",""isEnable"",""offsetX"",""offsetY"",""getOffset"",""prevent"",""some"",""stopPropagation"",""preventSystemEvent"",""properties"",""MOVE_TYPE"",""SNAP"",""FREE_SCROLL"",""DEFAULT_MOVE_TYPE_OPTIONS"",""snap"",""count"",""freeScroll"",""isBrowser"",""DEFAULT_OPTIONS"",""classPrefix"",""horizontal"",""infinite"",""infiniteThreshold"",""lastIndex"",""panelEffect"",""defaultIndex"",""autoResize"",""adaptive"",""zIndex"",""bound"",""overflow"",""hanger"",""anchor"",""gap"",""moveType"",""useOffset"",""isEqualSize"",""isConstantSize"",""renderOnlyVisible"",""renderExternal"",""collectStatistics"",""DEFAULT_VIEWPORT_CSS"",""position"",""DEFAULT_CAMERA_CSS"",""width"",""height"",""willChange"",""DEFAULT_PANEL_CSS"",""EVENTS"",""HOLD_START"",""HOLD_END"",""MOVE_START"",""MOVE"",""MOVE_END"",""CHANGE"",""RESTORE"",""SELECT"",""NEED_PANEL"",""VISIBLE_CHANGE"",""AXES_EVENTS"",""HOLD"",""RELEASE"",""ANIMATION_END"",""FINISH"",""STATE_TYPE"",""IDLE"",""HOLDING"",""DRAGGING"",""ANIMATING"",""DISABLED"",""DIRECTION"",""PREV"",""NEXT"",""FLICKING_METHODS"",""prev"",""next"",""getIndex"",""getAllPanels"",""getCurrentPanel"",""getElement"",""getPanel"",""getPanelCount"",""getStatus"",""getVisiblePanels"",""enableInput"",""disableInput"",""resize"",""setStatus"",""isPlaying"",""checkTranslateSupport"",""transforms"",""webkitTransform"",""msTransform"",""MozTransform"",""OTransform"",""transform"",""has3d"",""supportedStyle"",""documentElement"",""transformName"",""prefixedTransform"",""insertBefore"",""styleVal"",""getComputedStyle"",""getPropertyValue"",""parentElement"",""removeChild"",""transformInfo"",""_i"",""srcs"",""elements"",""isString"",""tempDiv"",""children"",""firstChild"",""className"",""classList"",""hasClass"",""contains"",""cssObj"",""iterable"",""arr"",""cssValue"",""defaultVal"",""defaultValue"",""cssRegex"",""clamp"",""idx"",""calculatedValue"",""matchResult"",""exec"",""sign"",""unit"",""parsedValue"",""parseFloat"",""counterArray"",""indexed"",""size"",""originalStyle"",""setAttribute"",""removeAttribute"",""flickingName"",""bbox"",""offsetWidth"",""offsetHeight"",""clientRect"",""getBoundingClientRect"",""left"",""top"",""viewport"",""prevSibling"",""nextSibling"",""clonedPanels"",""relativeAnchorPosition"",""isClone"",""isVirtual"",""cloneIndex"",""cachedBbox"",""setElement"",""givenBbox"",""getBbox"",""prevSize"",""parseArithmeticExpression"",""panel"",""cloneState"",""panelCount"",""panelManager"",""scrollAreaSize"",""getScrollAreaSize"",""relativeIndex"",""floor"",""getPosition"",""progress"",""getCurrentProgress"",""outsetRange"",""getSize"",""getRelativeHangerPosition"",""getRelativeAnchorPosition"",""relativePanelPosition"",""getCameraPosition"",""outsetProgress"",""getProgress"",""panelSize"",""rightRelativePanelPosition"",""visibleSize"",""visibleRatio"",""currentPanel"",""hangerPosition"",""getHangerPosition"",""anchorPosition"",""getAnchorPosition"",""currentPosition"",""findEstimatedPosition"",""updateFunction"",""shouldResize"",""identicalPanels"",""getIdenticalPanels"",""eachPanel"",""unCacheBbox"",""addVisiblePanel"",""currentIndex"",""prevPanelIndex"",""prevPanelPosition"",""prevPanelSize"",""hasEmptyPanelBetween"",""notYetMinPanel"",""newPosition"",""prevPanel"",""clone"",""getCloneIndex"",""setPosition"",""getLastIndex"",""nextPanelIndex"",""nextPanelPosition"",""notYetMaxPanel"",""nextPanel"",""parsedElements"",""parseElement"",""firstPanel"",""targetIndex"",""insert"",""preserveUI"",""restoreStyle"",""wasVisible"",""Boolean"",""cameraElement"",""getCameraElement"",""appendChild"",""classes"",""classes_1"",""original"",""getClonedPanels"",""elementStyle"",""currentElementStyle"",""styleToApply"",""cloneElement"",""cloneNode"",""clonedPanel"",""Panel"",""clonedState"",""removeClonedPanelsAfter"",""removingPanels"",""removeElement"",""currentElement"",""getAttribute"",""addClass"",""applyCSS"",""panels"",""clones"",""cloneCount"",""allClones"",""newPanels"",""newClones"",""findIndex"",""lastPanel"",""firstRemovedPanel"",""possibleLastPanel"",""shouldRender"",""isCircular"",""findFirstPanelFrom"",""siblingElement"",""insertNewPanels"",""pushedIndex"",""panelsAfterIndex"",""emptyPanelCount"",""removedPanels"",""newLastIndex"",""reverse"",""setIndex"",""updateIndex"",""addNewClones"",""panelCount_1"",""cloneSet"",""replacedPanels"",""wasNonEmptyCount"",""deleteCount"",""deletedPanels"",""reversedPanels"",""nonEmptyIndexFromLast"",""allPanels"",""allPanelsCount"",""newClones_1"",""insertTarget_1"",""allPanels_1"",""panelElement"",""originalPanels"",""getCloneCount"",""lastPanelClones"",""nextSiblingClones"",""cloneNextSibling"",""lastPanelSibling"",""cloneSiblingElement"",""nextElementSibling"",""this_1"",""insertClones"",""counter"",""insertingIndex"",""fragment_1"",""createDocumentFragment"",""prevState"",""targetPanel"",""lastPosition"",""nextState"",""tslib_1"",""flicking"",""triggerEvent"",""transitTo"",""moveCamera"",""onSuccess"",""onStopped"",""onChange"",""State"",""flick"",""releaseEvent"",""clickedElement"",""touchEvent"",""elementFromPoint"",""clickedPanel"",""findPanelOf"",""cameraPosition"",""clickedPanelPosition"",""stopCamera"",""absDelta"",""inputDelta"",""isNextDirection"",""swipeDistance"",""swipeAngle"",""atan"",""belowAngleThreshold"",""overThreshold"",""moveTypeContext"",""axesEvent"",""interruptDestInfo"",""findPanelWhenInterrupted"",""nearestPanel"",""getNearestPanel"",""destInfo"",""findTargetPanel"",""findRestorePanel"",""scrollArea"",""getScrollArea"",""loopCount"",""originalTargetPosition"",""newCloneIndex"",""circulate"",""newTargetPosition"",""newTargetPanel"",""setCurrentPanel"",""updateAdaptiveSize"",""updateAxesPosition"",""IdleState"",""nextStateType"",""currentState"",""HoldingState"",""DraggingState"",""AnimatingState"",""DisabledState"",""onExit"",""onEnter"",""onHold"",""onRelease"",""onAnimationEnd"",""onFinish"",""ctx"",""findRestorePanelInCircularMode"",""halfGap"",""minimumDistanceToChange"",""originalPanel"",""getOriginalPanel"",""firstClonedPanel"",""lapped"",""snapCount"",""eventDelta"",""calcBrinkOfChange"",""nearestIsCurrent"",""shouldMoveWhenBounceIs0"",""canSetBoundMode"",""shouldMoveToAdjacent"",""isOutOfBound"",""findSnappedPanel"",""findAdjacentPanel"",""estimatedHangerPos"",""panelToMove"",""cycleIndex"",""passedPanelCount"",""panelPosition"",""panelNextPosition"",""panelPrevPosition"",""siblingPanel"",""panelIndex"",""siblingIndex"",""originalPosition"",""defaultDuration"",""getCurrentIndex"",""basePanel"",""basePosition"",""adjacentPanel"",""targetRelativeAnchorPosition"",""estimatedPanelPosition"",""estimatedPosition"",""MoveType"",""estimatedPanel"",""findNearestPanelAt"",""stateMachine"",""getState"",""currentPanelPosition"",""lastHangerPosition"",""Snap"",""panelMaintainRatio"",""relativeHangerPosition"",""positionOffset"",""visibleIndex"",""NaN"",""translate"",""checkedIndexes"",""isAdaptiveCached"",""isViewportGiven"",""isCameraGiven"",""originalViewportStyle"",""originalCameraStyle"",""StateMachine"",""visiblePanels"",""panelBboxes"",""build"",""eventResult"",""isBetween"",""findNearestPanel"",""originalNearestPosition"",""checkNeedPanel"",""modifiedNearestPosition"",""updateVisiblePanels"",""posOffset"",""moveVector"",""moveCoord"",""coord"",""viewportElement"",""updateSize"",""updateOriginalPanelPositions"",""updateScrollArea"",""updateClonePanels"",""updateCameraPosition"",""updatePlugins"",""minimumDistance"",""prevPosition"",""nextPosition"",""minimumAnchorDistance"",""anchorDistance"",""nearest"",""shortestDistance"",""identicals"",""identical"",""getVisibleIndexOf"",""panInput"",""resizePanels"",""newCenterPanel"",""newPanelPosition"",""updateCheckedIndexes"",""indexes"",""wasEmpty"",""newCurrentIndex"",""getRange"",""shouldApplyAdaptive"",""viewportStyle"",""sizeToApply"",""panelBbox"",""maximumPanelSize"",""maximum"",""viewportBbox"",""updateBbox"",""viewportSize"",""plugins"",""plugin"",""wrapper"",""removePlugins"",""topmostElement_1"",""deletingElement"",""status"",""html"",""refreshPanels"",""createdPanels"",""orderedPanels"",""createdPanel"",""replacePanels"",""setCloneCount"",""getOutsetProgress"",""playing"",""prevRange"",""nextRange"",""nearestAnchorPos"",""nearestIndex"",""nearestSize"",""hangerIsNextToNearestPanel"",""targetPosition"",""progressBetween"",""startIndex"",""axesHandlers"",""setLastIndex"",""newPlugins"",""currentPlugins"",""removedPlugins"",""changedRange"",""removed"",""fragment"",""prevVisiblePanels"",""equalSizeClasses_1"",""cached_1"",""overlappedClass"",""getOverlappedClass"",""clonePanels"",""updateClonedPanelPositions"",""chainAllPanels"",""visiblePanel"",""setElements"",""applyCSSValue"",""setMoveType"",""setAxesInstance"",""setDefaultPanel"",""moveToDefaultPanel"",""viewportCandidate"",""hasViewportElement"",""cameraCandidate"",""hasCameraElement"",""panelElements"",""child"",""minHeight"",""minWidth"",""PanelManager"",""FreeScroll"",""indexRange"",""sumOriginalPanelSize"",""areaPrev"",""sizeSum"",""panelAtLeftBoundary"",""reversedPanels_1"",""areaNext"",""panelAtRightBoundary"",""panels_1"",""needCloneOnPrev"",""panel0OnFirstscreen"",""ceil"",""prevCloneCount"",""origPanel"",""removeClonesAfter"",""defaultPanel"",""defaultPosition"",""nextPanelPos"",""maintainingPanel"",""looped"",""panelsBeforeMaintainPanel"",""accumulatedSize"",""total"",""setPositionCSS"",""clonedPanels_1"",""cloneBasePos"",""clonedPanelPos"",""lastReplacePosition"",""_b"",""replacePosition"",""relAnchorPosOfCombined"",""anchorPos"",""parsedBounce"",""parsedVal"",""isFreeScroll"",""is"",""maxLastIndex"",""triggerNeedPanel"",""checkingPanel"",""atLastPanel"",""nextIndex"",""currentNearestPosition"",""panelRight"",""cameraNext"",""emptyPanelExistsBetween"",""firstIndex"",""lastPanelAfterNeed"",""atLastPanelAfterNeed"",""cameraPrev"",""checkingIndex"",""atFirstPanel"",""prevIndex"",""panelLeft"",""firstPanelAfterNeed"",""atFirstPanelAfterNeed"",""params"",""alreadyTriggered"",""hasHandler"",""fill"",""insertAfter"",""resetVisibleIndex"",""newVisibleIndex"",""calcNewVisiblePanelIndex"",""isNaN"",""newVisiblePanels"",""calcVisiblePanels"",""addedPanels"",""firstVisiblePanelPos"",""cameraPos"",""allPanelCount"",""checkLastPanel"",""getNextPanel"",""isOutOfViewport"",""lastPanelOfNextDir"",""lastPanelOfPrevDir"",""minPanelCloneIndex"",""maxPanelCloneOffset"",""minPanelCloneOffset"",""prevRefCount"",""newRefCount"",""newPanel"",""newIndex"",""added"",""default"",""defaultBbox_1"",""equalSizeClasses_2"",""tid"",""cid"",""category"",""action"",""label"",""innerWidth"",""innerHeight"",""screen"",""collectInfos"",""location"",""href"",""language"",""charset"",""inputEncoding"",""characterSet"",""referrer"",""title"",""JSON"",""stringify"",""req"",""XMLHttpRequest"",""open"",""send"",""shouldResetElements"",""appendUncachedPanelElements"",""canceled"",""merge"",""previousPosition"",""inputOffset"",""cameraChange"",""currentDirection"",""querySelector"",""currentOptions"",""Viewport"",""listenInput"",""listenResize"",""sendEvent"",""focus"",""possiblePositions"",""nearestPosition"",""current"",""includeClone"",""outerHTML"",""addPlugins"",""diffResult"",""maintained"",""before"",""after"",""prevPanelCount"",""prevList"",""list"",""visibles"",""changedIndex"",""renderingPanels"",""setVisiblePanels"",""diffInfo"",""changed"",""prevClonedPanels"",""prevOriginalPanels"",""beforeIdx"",""afterIdx"",""addIndex"",""groupIndex"",""prevCloneGroup"",""newCloneGroup"",""getCheckedIndexes"",""has"",""isPanelChangedAtBeforeSync"",""beforeDiffInfo"",""prevOriginalPanelCount_1"",""originalPanelCount_1"",""originalAdded"",""originalRemoved"",""originalMaintained"",""originalChanged"",""beforeSync"",""addedIndex"",""addedElement"",""beforePanel"",""eventContext"",""fire"",""connectAxesHandler"",""Flicking"",""withFlickingMethods""],""mappings"":""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""}"
5a48273a8e0381a3a493e1aefa0e6906a46cba27,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
bb9a13bf2c46e00ec0492425f5ff77feef528201,2437617,        (https://stackoverflow.com/questions/2437617/limiting-the-size-of-a-python-dictionary)
dc30a6684d702eb5977e4cd9d98cea0b5fc12622,32238884,// see http://stackoverflow.com/questions/32238884/storing-json-jsonb-hstore-xml-enum-ipaddr-etc-fails-with-column-x-is-of
dfc47d7ae1a8a05fcf0d18eb1ebd61d21214f5f9,44456952,    // newly required in iOS 11: https://stackoverflow.com/a/44456952
3c45a0a8adff0735a6b4244925278c2357ae9f62,217605,    // http://stackoverflow.com/a/217605/22459
a11f994e73505161d62f97f22d8bce7f62e64134,2809447,   You need to [set the new JDK as default](http://stackoverflow.com/questions/2809366/changing-java-platform-on-which-netbeans-runs/2809447#2809447) editing the configuration file.
1f7b02991867f3b5202ac5449b50fbaef9074109,3143070,// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
3424c0ce1499743527bfdde88988be7823ec4c87,3665561,        //http://stackoverflow.com/questions/3665561/document-readystate-of-interactive-vs-ondomcontentloaded
5eb5e33184e77a9b2a813084ba5e04a4145d865e,279237,# From http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder
6959ace65d7176e1b267376aa55a73d00158378d,30520293,* [My stackoverflow answer regarding data binding](http://stackoverflow.com/questions/6007941/android-data-binding-similar-to-wpf/30520293#30520293)
d3fa5182f37aaeb7066250e1f780af38763a3185,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
5adec11fa090f364b6b534b1956616b527d5665e,37142394,  /* Not implemented in RC1: http://stackoverflow.com/a/37142394/65681
0059948e1c19c8b6b886dce79d0faa2b59923dd9,105034,// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
164b5785ac9711b2e161609320bbf6c534ef0a9d,11158224,#source: http://stackoverflow.com/a/11158224/5343977
4c6b7204c8c381f8232aa1421d0d6fa1861617ed,236106,    // why \x3c? http://stackoverflow.com/a/236106/147079
6ddfd4d065a5063406d2e0196f45dfaf22a4a27c,11280379,		//make div focusable. see: http://stackoverflow.com/questions/11280379/is-it-possible-to-write-onfocus-lostfocus-handler-for-a-div-using-js-or-jquery
147d344c68ae631e99c5c87afa38bc03684c479c,9655181,- http://stackoverflow.com/questions/9655181/convert-from-byte-array-to-hex-string-in-java
0b6f1284c077d1251a943f0fcfd698ddfb11ef58,179355,         * see http://stackoverflow.com/questions/179355/clearing-all-cookies-with-javascript
8258120f14b18820080b46f30653943f091d5acd,19227496,/* See Scrollable Menu with Bootstrap 3 http://stackoverflow.com/questions/19227496 */
7a5461a7430271be19bcebc174632da39570994e,1356741,  // See http://stackoverflow.com/questions/1356741/strcmp-and-signed-unsigned-chars
ec3ad8705f29a1b669fce53ad513b86cca5b805b,38355228,    // see http://stackoverflow.com/a/38355228/769384
b615586127f0adaab95ba15bd5606d559f3eadc7,136443,    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
a9a7f64223c337d5bef8831e8387623d932b6bb9,4073037,#    http://stackoverflow.com/a/4073037
f0649280dee5bb4375254be74c1159c69c3b7499,21103724,     * (http://stackoverflow.com/questions/21103724/angular-directive-templateurl-relative-to-js-file)
6a9e6c31eb8a52ec547986e0d38ae28b9cdb802e,3653444,      // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7
2e144158e4d1b0f6636afc2f35fcc3ecbbb2db0d,19989481,		// http://stackoverflow.com/questions/19989481/how-to-determine-if-a-string-is-a-valid-v4-uuid
358c376810b2fe4f5174c468aaad4284e252ec7a,22073516,Snoopy requires the python package paramiko which in turn requires cryptography. According to `this stackoverflow question <http://stackoverflow.com/questions/22073516/failed-to-install-python-cryptography-package-with-pip-and-setup-py>`_ in order to install cryptography on Debian and Ubuntu you must first::
61461270d0a5d8396292d8ea2fd53b2fe1fa1919,785097,        * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c
2a1eac18254ef3023d0b4fd5d2c610c0115ec56e,3330919,        // http://stackoverflow.com/a/3330919)
120c63e21cb9db8bbed49f9fb0dd5248b4c5ac51,2353818,"      <p><a target=""_blank"" href=""http://nodejs.org/"">Node.js</a> is a JavaScript run-time, popular for being a web server platform. Node's website and this <a target=""_blank"" href=""http://stackoverflow.com/questions/2353818/how-do-i-get-started-with-node-js"">stackOverflow thread</a> offer excellent starting points to get to grasps with node.</p>"
89d16bcec066469b246d5b465d97cfb1c500d059,2321904,; https://stackoverflow.com/questions/2321904/elisp-how-to-save-data-in-a-file
c0cd09dea4273642aa780756985e9c90dbe164d3,1606797,    // http://stackoverflow.com/questions/1606797/use-of-apply-with-new-operator-is-this-possible
832b459a6c7777291c0a7a763aac6b965af98625,3222375,11;http://stackoverflow.com/questions/3222375/what-is-message-passing;receive;1.0;0.05970149253731343;1.0;0
c807c93f419845cd810ea8447c66fca06d906cdc,2353818,"			<p><a target=""_blank"" href=""http://nodejs.org/"">Node.js</a> is a web server. Node's website and this <a target=""_blank"" href=""http://stackoverflow.com/questions/2353818/how-do-i-get-started-with-node-js"">stackOverflow thread</a> offer excellent starting points to get to grasps with node.</p>"
7181c569dd0f6d186d8f4d4494af10d7edede4fa,14707227,# from http://stackoverflow.com/a/14707227/2077242
b94a4626b4a76c08fa7d25c29c25b9f4c414e060,25884806,* 该设置在 iOS6 和 iOS7 表现还可以，但到了 iOS8 后会出现各种问题，而且在 iOS9 中并没有生效。参阅：[iOS 8: web app status bar position and resizing problems](http://stackoverflow.com/questions/25884806/ios-8-web-app-status-bar-position-and-resizing-problems)*
080c0452a140a10d43d48f20c10a6b85fee60ce7,14800384, * http://stackoverflow.com/questions/3605495/generate-a-list-of-localized-language-names-with-links-to-google-translate/14800384#14800384
3aea2bce4b9459700b5642af0caffc61dc7a0827,3330919,        // http://stackoverflow.com/a/3330919)
59e9d8cab9457838c6c513bb6846f38a835ac750,36391027,http://stackoverflow.com/questions/36391027/mapping-a-sequence-of-results-from-slick-monadic-join-to-json
742903b4ebf1d8b9115141812055a04f47724076,37492800,"As one [StackOverflow user discovered](http://stackoverflow.com/questions/37492800/extract-elements-from-a-matrix-based-on-the-row-and-column-indices-with-armadill),"
93502f2965ac67e93171abbeff8712e04a0f4409,1669,"760648,story,,,6,1,profquail,""Learning to write a compiler"",http://stackoverflow.com/questions/1669/learning-to-write-a-compiler,,1250168226"
dac3214af3157ab76123470057b397cc7e115f2e,1197928 105034,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///webpack/bootstrap 7ecc2178b2871e1f52ac"",""webpack:///./lib/utils/util.js"",""webpack:///./lib/sharepoint/queryable.js"",""webpack:///./lib/sharepoint/odata.js"",""webpack:///./lib/utils/exceptions.js"",""webpack:///./lib/configuration/pnplibconfig.js"",""webpack:///./lib/utils/logging.js"",""webpack:///./lib/collections/collections.js"",""webpack:///./lib/sharepoint/webs.js"",""webpack:///./lib/sharepoint/files.js"",""webpack:///./lib/sharepoint/folders.js"",""webpack:///./lib/sharepoint/items.js"",""webpack:///./lib/sharepoint/lists.js"",""webpack:///./lib/sharepoint/queryableshareable.js"",""webpack:///./lib/sharepoint/types.js"",""webpack:///./lib/utils/storage.js"",""webpack:///./lib/net/httpclient.js"",""webpack:///./lib/sharepoint/contenttypes.js"",""webpack:///./lib/sharepoint/roles.js"",""webpack:///./lib/sharepoint/sitegroups.js"",""webpack:///./lib/sharepoint/usercustomactions.js"",""webpack:///./lib/configuration/providers/cachingConfigurationProvider.js"",""webpack:///./lib/net/fetchclient.js"",""webpack:///./lib/sharepoint/caching.js"",""webpack:///./lib/sharepoint/features.js"",""webpack:///./lib/sharepoint/fields.js"",""webpack:///./lib/sharepoint/navigation.js"",""webpack:///./lib/sharepoint/queryablesecurable.js"",""webpack:///./lib/sharepoint/search.js"",""webpack:///./lib/sharepoint/searchsuggest.js"",""webpack:///./lib/sharepoint/site.js"",""webpack:///./lib/sharepoint/siteusers.js"",""webpack:///./lib/utils/decorators.js"",""webpack:///(webpack)/buildin/global.js"",""webpack:///./lib/configuration/configuration.js"",""webpack:///./lib/sharepoint/rest.js"",""webpack:///./lib/types/index.js"",""webpack:///./lib/configuration/providers/index.js"",""webpack:///./lib/configuration/providers/spListConfigurationProvider.js"",""webpack:///./lib/net/digestcache.js"",""webpack:///./lib/net/nodefetchclientbrowser.js"",""webpack:///./lib/net/sprequestexecutorclient.js"",""webpack:///./lib/pnp.js"",""webpack:///./lib/sharepoint/attachmentfiles.js"",""webpack:///./lib/sharepoint/forms.js"",""webpack:///./lib/sharepoint/index.js"",""webpack:///./lib/sharepoint/pipeline.js"",""webpack:///./lib/sharepoint/relateditems.js"",""webpack:///./lib/sharepoint/subscriptions.js"",""webpack:///./lib/sharepoint/userprofiles.js"",""webpack:///./lib/sharepoint/views.js"",""webpack:///./lib/sharepoint/webparts.js"",""webpack:///./lib/utils/files.js""],""names"":[],""mappings"":"";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;8CChEA;AACA;AACA;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,qCAAqC,qDAAqD,EAAE;AAC5F,kCAAkC,6DAA6D,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA,mDAAmD,kBAAkB,EAAE,gBAAgB,aAAa;AACpG;AACA,kCAAkC,yBAAyB,EAAE;AAC7D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;;;;;;;;ACzSA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qEAAqE,2CAA2C,EAAE;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2CAA2C;AAC3E,oCAAoC,iBAAiB;AACrD,yFAAyF,iCAAiC,EAAE;AAC5H;AACA;AACA,gCAAgC,2CAA2C;AAC3E,oCAAoC,iBAAiB;AACrD,yFAAyF,iCAAiC,EAAE;AAC5H;AACA;AACA,qCAAqC,kBAAkB;AACvD,gCAAgC,2CAA2C;AAC3E,2FAA2F,iCAAiC,EAAE;AAC9H;AACA;AACA,qCAAqC,kBAAkB;AACvD,gCAAgC,2CAA2C;AAC3E,2FAA2F,iCAAiC,EAAE;AAC9H;AACA;AACA,sCAAsC,mBAAmB;AACzD,gCAAgC,2CAA2C;AAC3E,6FAA6F,iCAAiC,EAAE;AAChI;AACA;AACA,uCAAuC,oBAAoB;AAC3D,gCAAgC,2CAA2C;AAC3E,+FAA+F,iCAAiC,EAAE;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,kCAAkC,+CAA+C;AACjF,yFAAyF,QAAQ;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpbA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,mDAAmD,4CAA4C,EAAE,sBAAsB,kBAAkB,EAAE;AAC3I;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,UAAU,EAAE;AACnF;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kCAAkC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,yCAAyC,EAAE,oBAAoB,4BAA4B,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,mCAAmC,cAAc,gBAAgB;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mFAAmF,EAAE;AACzI,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F,yCAAyC;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpcA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA,0BAA0B,SAAS,sFAAsF;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4EAA4E;AAC1G;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,6BAA6B,sFAAsF;AACnH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,6BAA6B,sCAAsC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,6BAA6B,2EAA2E;AACxG;AACA;AACA,8BAA8B,sEAAsE;AACpG;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,6BAA6B,gEAAgE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,6BAA6B,wDAAwD;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,mCAAmC,8BAA8B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,6BAA6B,0GAA0G;AACvI;AACA;AACA,8BAA8B,sEAAsE;AACpG;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,6BAA6B,gDAAgD;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,6BAA6B,gDAAgD;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACnLA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAwC;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7FA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,uDAAuD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,2CAA2C,4CAA4C,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0BAA0B;AACzD,6BAA6B,iCAAiC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0BAA0B;AACzD,6BAA6B,8CAA8C;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,+BAA+B,0BAA0B;AACzD,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA;AACA;AACA,oDAAoD,8BAA8B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACtNA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW;AACzC,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC3GA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kBAAkB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,kBAAkB;AACpD,kCAAkC,iBAAiB;AACnD,4CAA4C,2BAA2B;AACvE,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,+BAA+B,sCAAsC;AACrE,aAAa;AACb,SAAS;AACT,mDAAmD,iBAAiB;AACpE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,iCAAiC,sBAAsB;AACvD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB;AAC9C,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,yDAAyD,iBAAiB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,yDAAyD,iBAAiB;AAC1E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA,kCAAkC,iBAAiB;AACnD,8CAA8C,6BAA6B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B,gBAAgB,2BAA2B,EAAE,UAAU;AAC5H,yDAAyD,iBAAiB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;;;;;;;ACreA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,mCAAmC,sBAAsB;AACzD;AACA,8CAA8C,6BAA6B,EAAE,wBAAwB,6DAA6D,EAAE;AACpK;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAA6C;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2CAA2C;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,WAAW,qCAAqC,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,WAAW,qCAAqC,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA,+EAA+E,WAAW,qCAAqC,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA,6EAA6E,WAAW,qCAAqC,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,qBAAqB,wBAAwB,EAAE;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA,oCAAoC,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0HAA0H;AAC5I;AACA;AACA;AACA,0BAA0B,gIAAgI;AAC1J;AACA,aAAa;AACb;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA,sBAAsB,0IAA0I;AAChK;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,iBAAiB,qBAAqB,sBAAsB,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,iBAAiB,qBAAqB,sBAAsB,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AACjE;AACA;AACA;AACA;AACA,CAAC,mHAAmH;AACpH;AACA;AACA;AACA;AACA,CAAC,yEAAyE;AAC1E;AACA;AACA;AACA;AACA;AACA,CAAC,+EAA+E;;;;;;;;AC7gBhF;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,2BAA2B,sBAAsB;AACjD,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;;ACjNA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD,oDAAoD,mCAAmC;AACvF;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D,aAAa;AACb,iEAAiE,iBAAiB;AAClF;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mCAAmC,uCAAuC;AAC1E,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB,aAAa,sBAAsB,kBAAkB,EAAE;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,YAAY;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,+FAA+F;AAC/F;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA,kCAAkC,kEAAkE;AACpG,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gBAAgB,EAAE;AAC3D;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC;;;;;;;;AClWD;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,gBAAgB;AAClD,4CAA4C,4BAA4B;AACxE,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C,SAAS;AACT,0BAA0B,oCAAoC;AAC9D,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,gBAAgB;AAClD,4CAA4C,4BAA4B;AACxE,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA,8EAA8E,kFAAkF;AAChK;AACA;AACA;AACA,6BAA6B,6EAA6E;AAC1G,iBAAiB,sBAAsB,kBAAkB,EAAE;AAC3D,aAAa;AACb;AACA,6BAA6B,iFAAiF;AAC9G,iBAAiB,sBAAsB,kBAAkB,EAAE;AAC3D,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA,2BAA2B,oBAAoB;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8BAA8B,gBAAgB,2BAA2B,EAAE,UAAU;AACvH,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,kCAAkC,8BAA8B,gBAAgB,yBAAyB,EAAE,UAAU;AACrH,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8BAA8B,gBAAgB,kCAAkC,EAAE,UAAU;AAC9H,SAAS,GAAG,sBAAsB,iBAAiB,EAAE,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,qCAAqC,EAAE;AAC7I;AACA;AACA,CAAC;AACD;;;;;;;;ACncA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,sBAAsB;AAC7D,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA,sEAAsE,SAAS,cAAc,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gBAAgB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kFAAkF,SAAS,cAAc,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kDAAkD;AACnF;AACA,kCAAkC,mCAAmC;AACrE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0HAA0H,yBAAyB,EAAE;AACrJ;AACA;AACA,2HAA2H,yBAAyB,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D,qDAAqD,qCAAqC;AAC1F,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAiD;AAC/E,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iCAAiC;AAC/D,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAiD;AAC/E,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iCAAiC;AAC/D,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iCAAiC;AAC/D,uCAAuC,sBAAsB;AAC7D,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;;ACnjBA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,6DAA6D;AAC9D;AACA;AACA;AACA;AACA,CAAC,oGAAoG;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4EAA4E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,mEAAmE;AACpE;AACA;AACA;AACA;AACA,CAAC,qFAAqF;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,yEAAyE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sEAAsE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,uDAAuD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,uDAAuD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4EAA4E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,6GAA6G;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,qFAAqF;AACtF;AACA;AACA;AACA;AACA;AACA,CAAC,mHAAmH;AACpH;;;;;;;;AC/ZA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yCAAyC;AACzE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACxKA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gDAAgD,gDAAgD;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,cAAc;AAC3E;AACA;AACA;AACA;AACA,yCAAyC,mBAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA,+CAA+C,sBAAsB;AACrE;AACA,sEAAsE,8BAA8B,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,MAAM;AACpD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC,cAAc;AAC/C,gDAAgD,gBAAgB;AAChE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gDAAgD,iBAAiB;AACjE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gDAAgD,kBAAkB;AAClE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gDAAgD,mBAAmB;AACnE;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AACD;AACA;;;;;;;;ACpHA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uBAAuB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iFAAiF,iBAAiB;AAClG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,+BAA+B,gCAAgC;AAC/D,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA,2BAA2B,2BAA2B;AACtD,SAAS;AACT,0BAA0B,iBAAiB;AAC3C,oBAAoB;AACpB,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACtLA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0BAA0B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0BAA0B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,cAAc,6BAA6B,EAAE;AAC9F;AACA;AACA;AACA,yBAAyB,8BAA8B;AACvD,SAAS;AACT,0BAA0B,iBAAiB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,cAAc,6BAA6B,EAAE;AAC7G;AACA;AACA,2BAA2B,8BAA8B;AACzD,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,8BAA8B,iCAAiC;AAC/D;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACnOA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sEAAsE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB,qBAAqB,EAAE;AACjG,0BAA0B,iBAAiB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gBAAgB,qBAAqB,EAAE;AAClF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;;AC9IA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA,8BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,gCAAgC,EAAE;AAC1G,0BAA0B,iBAAiB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,gCAAgC;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACvFA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC,eAAe,OAAO;AACtB,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2BAA2B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;8CClEA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;ACbA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;;AC5CA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;;ACrGA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,oEAAoE,iBAAiB;AACrF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA,2BAA2B,oBAAoB;AAC/C,SAAS;AACT,sDAAsD,iBAAiB;AACvE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,sCAAsC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,0DAA0D;AACjG,sCAAsC,+CAA+C;AACrF,+CAA+C,2BAA2B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,wCAAwC,yBAAyB;AACjE;AACA;AACA,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA,wCAAwC,yBAAyB;AACjE;AACA;AACA,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D,kCAAkC,iBAAiB;AACnD,wCAAwC,wBAAwB;AAChE,oCAAoC,oBAAoB;AACxD,wCAAwC,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,sDAAsD;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wBAAwB;AAC3D;AACA,2BAA2B,oBAAoB;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AClTA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD,SAAS;AACT,6DAA6D,iBAAiB;AAC9E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,oEAAoE,iBAAiB;AACrF;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;;;;;;;;AC7JA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6BAA6B;AAC1E,wCAAwC,wBAAwB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpIA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gCAAgC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,sCAAsC;AACtC;AACA;AACA,sDAAsD;AACtD;AACA;AACA,6CAA6C;AAC7C;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA,+BAA+B,8DAA8D;AAC7F,aAAa;AACb,SAAS;AACT,0BAA0B,iBAAiB,wBAAwB,gCAAgC,EAAE;AACrG;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,2BAA2B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sEAAsE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oGAAoG;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,iGAAiG;;;;;;;;AC5JlG;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA,8BAA8B,8BAA8B;AAC5D;AACA;AACA;AACA;AACA,oDAAoD,0CAA0C,EAAE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC3EA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oBAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC5HA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oBAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,oBAAoB,wBAAwB;AAC9F,SAAS,oBAAoB,wCAAwC,EAAE;AACvE;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gBAAgB,oBAAoB,EAAE;AACjF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sBAAsB;AACpD;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC3JA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;;;;;;ACxBA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACpBA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,IAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC3FA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC7HA;AACA;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;;;;;;;;ACLA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA;AACA,yCAAyC,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,gBAAgB,2BAA2B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,IAAI;AACjB,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACxEA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,kDAAkD,cAAc;AAChE,aAAa;AACb;AACA,SAAS;AACT;AACA,6DAA6D,mCAAmC,EAAE;AAClG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACxDA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AClBA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,qEAAqE,qBAAqB;AAC1F;AACA;AACA,qEAAqE,gCAAgC;AACrG;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;;ACxEA;AACA;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACxEA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0BAA0B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,gCAAgC;AACpF;AACA,SAAS,EAAE,EAAE,EAAE,EAAE;AACjB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,qBAAqB,kCAAkC,EAAE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;;ACxIA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpDA;AACA;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACxDA;AACA;AACA;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0BAA0B,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kBAAkB,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG;AAClG;AACA;AACA,yBAAyB;AACzB;AACA,6EAA6E,qBAAqB,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,GAAG,uBAAuB;AAC7F;AACA,+CAA+C,uCAAuC,EAAE;AACxF,6CAA6C,mCAAmC,EAAE;AAClF,0CAA0C,qBAAqB,EAAE;AACjE,yCAAyC,kBAAkB,EAAE;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5NA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA,8BAA8B,qCAAqC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,8CAA8C,8BAA8B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;;AC7HA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,wBAAwB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,0BAA0B,2BAA2B,qCAAqC,EAAE;AAC5F,oBAAoB;AACpB,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,2BAA2B,qCAAqC,EAAE;AAC7F,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACvFA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6CAA6C;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB,kBAAkB,EAAE;AAC1D,aAAa,sBAAsB,kBAAkB,EAAE;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,8BAA8B,8DAA8D;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AC5SD;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C,SAAS;AACT,qDAAqD,iBAAiB;AACtE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAA6C;AAC/E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpLA;AACA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB;AAClD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC1GA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL"",""file"":""pnp.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""$pnp\""] = factory();\n\telse\n\t\troot[\""$pnp\""] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""/assets/\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 41);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7ecc2178b2871e1f52ac"",""\""use strict\"";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \""object\"" && typeof Reflect.decorate === \""function\"") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar decorators_1 = require(\""./decorators\"");\nvar pnplibconfig_1 = require(\""../configuration/pnplibconfig\"");\nvar Util = (function () {\n    function Util() {\n    }\n    /**\n     * Gets a callback function which will maintain context across async calls.\n     * Allows for the calling pattern getCtxCallback(thisobj, method, methodarg1, methodarg2, ...)\n     *\n     * @param context The object that will be the 'this' value in the callback\n     * @param method The method to which we will apply the context and parameters\n     * @param params Optional, additional arguments to supply to the wrapped method when it is invoked\n     */\n    Util.getCtxCallback = function (context, method) {\n        var params = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            params[_i - 2] = arguments[_i];\n        }\n        return function () {\n            method.apply(context, params);\n        };\n    };\n    /**\n     * Tests if a url param exists\n     *\n     * @param name The name of the url paramter to check\n     */\n    Util.urlParamExists = function (name) {\n        name = name.replace(/[\\[]/, \""\\\\[\"").replace(/[\\]]/, \""\\\\]\"");\n        var regex = new RegExp(\""[\\\\?&]\"" + name + \""=([^&#]*)\"");\n        return regex.test(location.search);\n    };\n    /**\n     * Gets a url param value by name\n     *\n     * @param name The name of the paramter for which we want the value\n     */\n    Util.getUrlParamByName = function (name) {\n        name = name.replace(/[\\[]/, \""\\\\[\"").replace(/[\\]]/, \""\\\\]\"");\n        var regex = new RegExp(\""[\\\\?&]\"" + name + \""=([^&#]*)\"");\n        var results = regex.exec(location.search);\n        return results == null ? \""\"" : decodeURIComponent(results[1].replace(/\\+/g, \"" \""));\n    };\n    /**\n     * Gets a url param by name and attempts to parse a bool value\n     *\n     * @param name The name of the paramter for which we want the boolean value\n     */\n    Util.getUrlParamBoolByName = function (name) {\n        var p = this.getUrlParamByName(name);\n        var isFalse = (p === \""\"" || /false|0/i.test(p));\n        return !isFalse;\n    };\n    /**\n     * Inserts the string s into the string target as the index specified by index\n     *\n     * @param target The string into which we will insert s\n     * @param index The location in target to insert s (zero based)\n     * @param s The string to insert into target at position index\n     */\n    Util.stringInsert = function (target, index, s) {\n        if (index > 0) {\n            return target.substring(0, index) + s + target.substring(index, target.length);\n        }\n        return s + target;\n    };\n    /**\n     * Adds a value to a date\n     *\n     * @param date The date to which we will add units, done in local time\n     * @param interval The name of the interval to add, one of: ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second']\n     * @param units The amount to add to date of the given interval\n     *\n     * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object\n     */\n    Util.dateAdd = function (date, interval, units) {\n        var ret = new Date(date.toLocaleString()); // don't change original date\n        switch (interval.toLowerCase()) {\n            case \""year\"":\n                ret.setFullYear(ret.getFullYear() + units);\n                break;\n            case \""quarter\"":\n                ret.setMonth(ret.getMonth() + 3 * units);\n                break;\n            case \""month\"":\n                ret.setMonth(ret.getMonth() + units);\n                break;\n            case \""week\"":\n                ret.setDate(ret.getDate() + 7 * units);\n                break;\n            case \""day\"":\n                ret.setDate(ret.getDate() + units);\n                break;\n            case \""hour\"":\n                ret.setTime(ret.getTime() + units * 3600000);\n                break;\n            case \""minute\"":\n                ret.setTime(ret.getTime() + units * 60000);\n                break;\n            case \""second\"":\n                ret.setTime(ret.getTime() + units * 1000);\n                break;\n            default:\n                ret = undefined;\n                break;\n        }\n        return ret;\n    };\n    /**\n     * Loads a stylesheet into the current page\n     *\n     * @param path The url to the stylesheet\n     * @param avoidCache If true a value will be appended as a query string to avoid browser caching issues\n     */\n    Util.loadStylesheet = function (path, avoidCache) {\n        if (avoidCache) {\n            path += \""?\"" + encodeURIComponent((new Date()).getTime().toString());\n        }\n        var head = document.getElementsByTagName(\""head\"");\n        if (head.length > 0) {\n            var e = document.createElement(\""link\"");\n            head[0].appendChild(e);\n            e.setAttribute(\""type\"", \""text/css\"");\n            e.setAttribute(\""rel\"", \""stylesheet\"");\n            e.setAttribute(\""href\"", path);\n        }\n    };\n    /**\n     * Combines an arbitrary set of paths ensuring that the slashes are normalized\n     *\n     * @param paths 0 to n path parts to combine\n     */\n    Util.combinePaths = function () {\n        var paths = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            paths[_i] = arguments[_i];\n        }\n        return paths\n            .filter(function (path) { return typeof path !== \""undefined\"" && path !== null; })\n            .map(function (path) { return path.replace(/^[\\\\|\\/]/, \""\"").replace(/[\\\\|\\/]$/, \""\""); })\n            .join(\""/\"")\n            .replace(/\\\\/g, \""/\"");\n    };\n    /**\n     * Gets a random string of chars length\n     *\n     * @param chars The length of the random string to generate\n     */\n    Util.getRandomString = function (chars) {\n        var text = new Array(chars);\n        var possible = \""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"";\n        for (var i = 0; i < chars; i++) {\n            text[i] = possible.charAt(Math.floor(Math.random() * possible.length));\n        }\n        return text.join(\""\"");\n    };\n    /**\n     * Gets a random GUID value\n     *\n     * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n     */\n    /* tslint:disable no-bitwise */\n    Util.getGUID = function () {\n        var d = new Date().getTime();\n        var guid = \""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"".replace(/[xy]/g, function (c) {\n            var r = (d + Math.random() * 16) % 16 | 0;\n            d = Math.floor(d / 16);\n            return (c === \""x\"" ? r : (r & 0x3 | 0x8)).toString(16);\n        });\n        return guid;\n    };\n    /* tslint:enable */\n    /**\n     * Determines if a given value is a function\n     *\n     * @param candidateFunction The thing to test for being a function\n     */\n    Util.isFunction = function (candidateFunction) {\n        return typeof candidateFunction === \""function\"";\n    };\n    /**\n     * @returns whether the provided parameter is a JavaScript Array or not.\n    */\n    Util.isArray = function (array) {\n        if (Array.isArray) {\n            return Array.isArray(array);\n        }\n        return array && typeof array.length === \""number\"" && array.constructor === Array;\n    };\n    /**\n     * Determines if a string is null or empty or undefined\n     *\n     * @param s The string to test\n     */\n    Util.stringIsNullOrEmpty = function (s) {\n        return typeof s === \""undefined\"" || s === null || s === \""\"";\n    };\n    /**\n     * Provides functionality to extend the given object by doing a shallow copy\n     *\n     * @param target The object to which properties will be copied\n     * @param source The source object from which properties will be copied\n     * @param noOverwrite If true existing properties on the target are not overwritten from the source\n     *\n     */\n    Util.extend = function (target, source, noOverwrite) {\n        if (noOverwrite === void 0) { noOverwrite = false; }\n        if (source === null || typeof source === \""undefined\"") {\n            return target;\n        }\n        // ensure we don't overwrite things we don't want overwritten\n        var check = noOverwrite ? function (o, i) { return !(i in o); } : function () { return true; };\n        return Object.getOwnPropertyNames(source)\n            .filter(function (v) { return check(target, v); })\n            .reduce(function (t, v) {\n            t[v] = source[v];\n            return t;\n        }, target);\n    };\n    /**\n     * Determines if a given url is absolute\n     *\n     * @param url The url to check to see if it is absolute\n     */\n    Util.isUrlAbsolute = function (url) {\n        return /^https?:\\/\\/|^\\/\\//i.test(url);\n    };\n    /**\n     * Attempts to make the supplied relative url absolute based on the _spPageContextInfo object, if available\n     *\n     * @param url The relative url to make absolute\n     */\n    Util.makeUrlAbsolute = function (url) {\n        if (Util.isUrlAbsolute(url)) {\n            return url;\n        }\n        if (typeof global._spPageContextInfo !== \""undefined\"") {\n            if (global._spPageContextInfo.hasOwnProperty(\""webAbsoluteUrl\"")) {\n                return Util.combinePaths(global._spPageContextInfo.webAbsoluteUrl, url);\n            }\n            else if (global._spPageContextInfo.hasOwnProperty(\""webServerRelativeUrl\"")) {\n                return Util.combinePaths(global._spPageContextInfo.webServerRelativeUrl, url);\n            }\n        }\n        else {\n            return url;\n        }\n    };\n    /**\n     * Ensures that a given url is absolute for the current web based on context\n     *\n     * @param candidateUrl The url to make absolute\n     *\n     */\n    Util.toAbsoluteUrl = function (candidateUrl) {\n        return new Promise(function (resolve) {\n            if (Util.isUrlAbsolute(candidateUrl)) {\n                // if we are already absolute, then just return the url\n                return resolve(candidateUrl);\n            }\n            if (pnplibconfig_1.RuntimeConfig.baseUrl !== null) {\n                // base url specified either with baseUrl of spfxContext config property\n                return resolve(Util.combinePaths(pnplibconfig_1.RuntimeConfig.baseUrl, candidateUrl));\n            }\n            if (typeof global._spPageContextInfo !== \""undefined\"") {\n                // operating in classic pages\n                if (global._spPageContextInfo.hasOwnProperty(\""webAbsoluteUrl\"")) {\n                    return resolve(Util.combinePaths(global._spPageContextInfo.webAbsoluteUrl, candidateUrl));\n                }\n                else if (global._spPageContextInfo.hasOwnProperty(\""webServerRelativeUrl\"")) {\n                    return resolve(Util.combinePaths(global._spPageContextInfo.webServerRelativeUrl, candidateUrl));\n                }\n            }\n            // does window.location exist and have _layouts in it?\n            if (typeof global.location !== \""undefined\"") {\n                var index = global.location.toString().toLowerCase().indexOf(\""/_layouts/\"");\n                if (index > 0) {\n                    // we are likely in the workbench in /_layouts/\n                    return resolve(Util.combinePaths(global.location.toString().substr(0, index), candidateUrl));\n                }\n            }\n            return resolve(candidateUrl);\n        });\n    };\n    return Util;\n}());\n__decorate([\n    decorators_1.deprecated(\""The Util.makeUrlAbsolute method is deprecated and will be removed from future releases. Use Util.toAbsoluteUrl instead\"")\n], Util, \""makeUrlAbsolute\"", null);\nexports.Util = Util;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils/util.js\n// module id = 0\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar util_1 = require(\""../utils/util\"");\nvar collections_1 = require(\""../collections/collections\"");\nvar odata_1 = require(\""./odata\"");\nvar pnplibconfig_1 = require(\""../configuration/pnplibconfig\"");\nvar exceptions_1 = require(\""../utils/exceptions\"");\nvar logging_1 = require(\""../utils/logging\"");\nvar pipeline_1 = require(\""./pipeline\"");\n/**\n * Queryable Base Class\n *\n */\nvar Queryable = (function () {\n    /**\n     * Creates a new instance of the Queryable class\n     *\n     * @constructor\n     * @param baseUrl A string or Queryable that should form the base part of the url\n     *\n     */\n    function Queryable(baseUrl, path) {\n        this._query = new collections_1.Dictionary();\n        this._batch = null;\n        if (typeof baseUrl === \""string\"") {\n            // we need to do some extra parsing to get the parent url correct if we are\n            // being created from just a string.\n            var urlStr = baseUrl;\n            if (util_1.Util.isUrlAbsolute(urlStr) || urlStr.lastIndexOf(\""/\"") < 0) {\n                this._parentUrl = urlStr;\n                this._url = util_1.Util.combinePaths(urlStr, path);\n            }\n            else if (urlStr.lastIndexOf(\""/\"") > urlStr.lastIndexOf(\""(\"")) {\n                // .../items(19)/fields\n                var index = urlStr.lastIndexOf(\""/\"");\n                this._parentUrl = urlStr.slice(0, index);\n                path = util_1.Util.combinePaths(urlStr.slice(index), path);\n                this._url = util_1.Util.combinePaths(this._parentUrl, path);\n            }\n            else {\n                // .../items(19)\n                var index = urlStr.lastIndexOf(\""(\"");\n                this._parentUrl = urlStr.slice(0, index);\n                this._url = util_1.Util.combinePaths(urlStr, path);\n            }\n        }\n        else {\n            var q = baseUrl;\n            this._parentUrl = q._url;\n            var target = q._query.get(\""@target\"");\n            if (target !== null) {\n                this._query.add(\""@target\"", target);\n            }\n            this._url = util_1.Util.combinePaths(this._parentUrl, path);\n        }\n    }\n    /**\n     * Directly concatonates the supplied string to the current url, not normalizing \""/\"" chars\n     *\n     * @param pathPart The string to concatonate to the url\n     */\n    Queryable.prototype.concat = function (pathPart) {\n        this._url += pathPart;\n        return this;\n    };\n    /**\n     * Appends the given string and normalizes \""/\"" chars\n     *\n     * @param pathPart The string to append\n     */\n    Queryable.prototype.append = function (pathPart) {\n        this._url = util_1.Util.combinePaths(this._url, pathPart);\n    };\n    /**\n     * Blocks a batch call from occuring, MUST be cleared by calling the returned function\n     */\n    Queryable.prototype.addBatchDependency = function () {\n        if (this.hasBatch) {\n            return this._batch.addDependency();\n        }\n        return function () { return null; };\n    };\n    Object.defineProperty(Queryable.prototype, \""hasBatch\"", {\n        /**\n         * Indicates if the current query has a batch associated\n         *\n         */\n        get: function () {\n            return this._batch !== null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Queryable.prototype, \""batch\"", {\n        /**\n         * The batch currently associated with this query or null\n         *\n         */\n        get: function () {\n            return this.hasBatch ? this._batch : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Queryable.prototype, \""parentUrl\"", {\n        /**\n         * Gets the parent url used when creating this instance\n         *\n         */\n        get: function () {\n            return this._parentUrl;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Queryable.prototype, \""query\"", {\n        /**\n         * Provides access to the query builder for this url\n         *\n         */\n        get: function () {\n            return this._query;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Creates a new instance of the supplied factory and extends this into that new instance\n     *\n     * @param factory constructor for the new queryable\n     */\n    Queryable.prototype.as = function (factory) {\n        var o = new factory(this._url, null);\n        return util_1.Util.extend(o, this, true);\n    };\n    /**\n     * Adds this query to the supplied batch\n     *\n     * @example\n     * ```\n     *\n     * let b = pnp.sp.createBatch();\n     * pnp.sp.web.inBatch(b).get().then(...);\n     * b.execute().then(...)\n     * ```\n     */\n    Queryable.prototype.inBatch = function (batch) {\n        if (this._batch !== null) {\n            throw new exceptions_1.AlreadyInBatchException();\n        }\n        this._batch = batch;\n        return this;\n    };\n    /**\n     * Enables caching for this request\n     *\n     * @param options Defines the options used when caching this request\n     */\n    Queryable.prototype.usingCaching = function (options) {\n        if (!pnplibconfig_1.RuntimeConfig.globalCacheDisable) {\n            this._useCaching = true;\n            this._cachingOptions = options;\n        }\n        return this;\n    };\n    /**\n     * Gets the currentl url, made absolute based on the availability of the _spPageContextInfo object\n     *\n     */\n    Queryable.prototype.toUrl = function () {\n        return this._url;\n    };\n    /**\n     * Gets the full url with query information\n     *\n     */\n    Queryable.prototype.toUrlAndQuery = function () {\n        var aliasedParams = new collections_1.Dictionary();\n        var url = this.toUrl().replace(/'!(@.*?)::(.*?)'/ig, function (match, labelName, value) {\n            logging_1.Logger.write(\""Rewriting aliased parameter from match \"" + match + \"" to label: \"" + labelName + \"" value: \"" + value, logging_1.LogLevel.Verbose);\n            aliasedParams.add(labelName, \""'\"" + value + \""'\"");\n            return labelName;\n        });\n        // inlude our explicitly set query string params\n        aliasedParams.merge(this._query);\n        if (aliasedParams.count() > 0) {\n            url += \""?\"" + aliasedParams.getKeys().map(function (key) { return key + \""=\"" + aliasedParams.get(key); }).join(\""&\"");\n        }\n        return url;\n    };\n    /**\n     * Gets a parent for this instance as specified\n     *\n     * @param factory The contructor for the class to create\n     */\n    Queryable.prototype.getParent = function (factory, baseUrl, path, batch) {\n        if (baseUrl === void 0) { baseUrl = this.parentUrl; }\n        var parent = new factory(baseUrl, path);\n        var target = this.query.get(\""@target\"");\n        if (target !== null) {\n            parent.query.add(\""@target\"", target);\n        }\n        if (typeof batch !== \""undefined\"") {\n            parent = parent.inBatch(batch);\n        }\n        return parent;\n    };\n    /**\n     * Clones this queryable into a new queryable instance of T\n     * @param factory Constructor used to create the new instance\n     * @param additionalPath Any additional path to include in the clone\n     * @param includeBatch If true this instance's batch will be added to the cloned instance\n     */\n    Queryable.prototype.clone = function (factory, additionalPath, includeBatch) {\n        if (includeBatch === void 0) { includeBatch = false; }\n        var clone = new factory(this, additionalPath);\n        var target = this.query.get(\""@target\"");\n        if (target !== null) {\n            clone.query.add(\""@target\"", target);\n        }\n        if (includeBatch && this.hasBatch) {\n            clone = clone.inBatch(this.batch);\n        }\n        return clone;\n    };\n    /**\n     * Executes the currently built request\n     *\n     * @param parser Allows you to specify a parser to handle the result\n     * @param getOptions The options used for this request\n     */\n    Queryable.prototype.get = function (parser, getOptions) {\n        if (parser === void 0) { parser = new odata_1.ODataDefaultParser(); }\n        if (getOptions === void 0) { getOptions = {}; }\n        return this.toRequestContext(\""GET\"", getOptions, parser).then(function (context) { return pipeline_1.pipe(context); });\n    };\n    Queryable.prototype.getAs = function (parser, getOptions) {\n        if (parser === void 0) { parser = new odata_1.ODataDefaultParser(); }\n        if (getOptions === void 0) { getOptions = {}; }\n        return this.toRequestContext(\""GET\"", getOptions, parser).then(function (context) { return pipeline_1.pipe(context); });\n    };\n    Queryable.prototype.post = function (postOptions, parser) {\n        if (postOptions === void 0) { postOptions = {}; }\n        if (parser === void 0) { parser = new odata_1.ODataDefaultParser(); }\n        return this.toRequestContext(\""POST\"", postOptions, parser).then(function (context) { return pipeline_1.pipe(context); });\n    };\n    Queryable.prototype.postAs = function (postOptions, parser) {\n        if (postOptions === void 0) { postOptions = {}; }\n        if (parser === void 0) { parser = new odata_1.ODataDefaultParser(); }\n        return this.toRequestContext(\""POST\"", postOptions, parser).then(function (context) { return pipeline_1.pipe(context); });\n    };\n    Queryable.prototype.patch = function (patchOptions, parser) {\n        if (patchOptions === void 0) { patchOptions = {}; }\n        if (parser === void 0) { parser = new odata_1.ODataDefaultParser(); }\n        return this.toRequestContext(\""PATCH\"", patchOptions, parser).then(function (context) { return pipeline_1.pipe(context); });\n    };\n    Queryable.prototype.delete = function (deleteOptions, parser) {\n        if (deleteOptions === void 0) { deleteOptions = {}; }\n        if (parser === void 0) { parser = new odata_1.ODataDefaultParser(); }\n        return this.toRequestContext(\""DELETE\"", deleteOptions, parser).then(function (context) { return pipeline_1.pipe(context); });\n    };\n    /**\n     * Converts the current instance to a request context\n     *\n     * @param verb The request verb\n     * @param options The set of supplied request options\n     * @param parser The supplied ODataParser instance\n     * @param pipeline Optional request processing pipeline\n     */\n    Queryable.prototype.toRequestContext = function (verb, options, parser, pipeline) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        if (pipeline === void 0) { pipeline = pipeline_1.PipelineMethods.default; }\n        var dependencyDispose = this.hasBatch ? this.addBatchDependency() : function () { return; };\n        return util_1.Util.toAbsoluteUrl(this.toUrlAndQuery()).then(function (url) {\n            // build our request context\n            var context = {\n                batch: _this._batch,\n                batchDependency: dependencyDispose,\n                cachingOptions: _this._cachingOptions,\n                isBatched: _this.hasBatch,\n                isCached: _this._useCaching,\n                options: options,\n                parser: parser,\n                pipeline: pipeline,\n                requestAbsoluteUrl: url,\n                requestId: util_1.Util.getGUID(),\n                verb: verb,\n            };\n            return context;\n        });\n    };\n    return Queryable;\n}());\nexports.Queryable = Queryable;\n/**\n * Represents a REST collection which can be filtered, paged, and selected\n *\n */\nvar QueryableCollection = (function (_super) {\n    __extends(QueryableCollection, _super);\n    function QueryableCollection() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Filters the returned collection (https://msdn.microsoft.com/en-us/library/office/fp142385.aspx#bk_supported)\n     *\n     * @param filter The string representing the filter query\n     */\n    QueryableCollection.prototype.filter = function (filter) {\n        this._query.add(\""$filter\"", filter);\n        return this;\n    };\n    /**\n     * Choose which fields to return\n     *\n     * @param selects One or more fields to return\n     */\n    QueryableCollection.prototype.select = function () {\n        var selects = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            selects[_i] = arguments[_i];\n        }\n        if (selects.length > 0) {\n            this._query.add(\""$select\"", selects.join(\"",\""));\n        }\n        return this;\n    };\n    /**\n     * Expands fields such as lookups to get additional data\n     *\n     * @param expands The Fields for which to expand the values\n     */\n    QueryableCollection.prototype.expand = function () {\n        var expands = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            expands[_i] = arguments[_i];\n        }\n        if (expands.length > 0) {\n            this._query.add(\""$expand\"", expands.join(\"",\""));\n        }\n        return this;\n    };\n    /**\n     * Orders based on the supplied fields ascending\n     *\n     * @param orderby The name of the field to sort on\n     * @param ascending If false DESC is appended, otherwise ASC (default)\n     */\n    QueryableCollection.prototype.orderBy = function (orderBy, ascending) {\n        if (ascending === void 0) { ascending = true; }\n        var keys = this._query.getKeys();\n        var query = [];\n        var asc = ascending ? \"" asc\"" : \"" desc\"";\n        for (var i = 0; i < keys.length; i++) {\n            if (keys[i] === \""$orderby\"") {\n                query.push(this._query.get(\""$orderby\""));\n                break;\n            }\n        }\n        query.push(\""\"" + orderBy + asc);\n        this._query.add(\""$orderby\"", query.join(\"",\""));\n        return this;\n    };\n    /**\n     * Skips the specified number of items\n     *\n     * @param skip The number of items to skip\n     */\n    QueryableCollection.prototype.skip = function (skip) {\n        this._query.add(\""$skip\"", skip.toString());\n        return this;\n    };\n    /**\n     * Limits the query to only return the specified number of items\n     *\n     * @param top The query row limit\n     */\n    QueryableCollection.prototype.top = function (top) {\n        this._query.add(\""$top\"", top.toString());\n        return this;\n    };\n    return QueryableCollection;\n}(Queryable));\nexports.QueryableCollection = QueryableCollection;\n/**\n * Represents an instance that can be selected\n *\n */\nvar QueryableInstance = (function (_super) {\n    __extends(QueryableInstance, _super);\n    function QueryableInstance() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Choose which fields to return\n     *\n     * @param selects One or more fields to return\n     */\n    QueryableInstance.prototype.select = function () {\n        var selects = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            selects[_i] = arguments[_i];\n        }\n        if (selects.length > 0) {\n            this._query.add(\""$select\"", selects.join(\"",\""));\n        }\n        return this;\n    };\n    /**\n     * Expands fields such as lookups to get additional data\n     *\n     * @param expands The Fields for which to expand the values\n     */\n    QueryableInstance.prototype.expand = function () {\n        var expands = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            expands[_i] = arguments[_i];\n        }\n        if (expands.length > 0) {\n            this._query.add(\""$expand\"", expands.join(\"",\""));\n        }\n        return this;\n    };\n    return QueryableInstance;\n}(Queryable));\nexports.QueryableInstance = QueryableInstance;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/queryable.js\n// module id = 1\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar util_1 = require(\""../utils/util\"");\nvar logging_1 = require(\""../utils/logging\"");\nvar httpclient_1 = require(\""../net/httpclient\"");\nvar pnplibconfig_1 = require(\""../configuration/pnplibconfig\"");\nvar exceptions_1 = require(\""../utils/exceptions\"");\nvar exceptions_2 = require(\""../utils/exceptions\"");\nfunction extractOdataId(candidate) {\n    if (candidate.hasOwnProperty(\""odata.id\"")) {\n        return candidate[\""odata.id\""];\n    }\n    else if (candidate.hasOwnProperty(\""__metadata\"") && candidate.__metadata.hasOwnProperty(\""id\"")) {\n        return candidate.__metadata.id;\n    }\n    else {\n        throw new exceptions_1.ODataIdException(candidate);\n    }\n}\nexports.extractOdataId = extractOdataId;\nvar ODataParserBase = (function () {\n    function ODataParserBase() {\n    }\n    ODataParserBase.prototype.parse = function (r) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            if (_this.handleError(r, reject)) {\n                if ((r.headers.has(\""Content-Length\"") && parseFloat(r.headers.get(\""Content-Length\"")) === 0) || r.status === 204) {\n                    resolve({});\n                }\n                else {\n                    r.json().then(function (json) { return resolve(_this.parseODataJSON(json)); }).catch(function (e) { return reject(e); });\n                }\n            }\n        });\n    };\n    ODataParserBase.prototype.handleError = function (r, reject) {\n        if (!r.ok) {\n            r.json().then(function (json) {\n                // include the headers as they contain diagnostic information\n                var data = {\n                    responseBody: json,\n                    responseHeaders: r.headers,\n                };\n                reject(new exceptions_2.ProcessHttpClientResponseException(r.status, r.statusText, data));\n            }).catch(function (e) {\n                // we failed to read the body - possibly it is empty. Let's report the original status that caused\n                // the request to fail and log the error with parsing the body if anyone needs it for debugging\n                logging_1.Logger.log({\n                    data: e,\n                    level: logging_1.LogLevel.Warning,\n                    message: \""There was an error parsing the error response body. See data for details.\"",\n                });\n                // include the headers as they contain diagnostic information\n                var data = {\n                    responseBody: \""[[body not available]]\"",\n                    responseHeaders: r.headers,\n                };\n                reject(new exceptions_2.ProcessHttpClientResponseException(r.status, r.statusText, data));\n            });\n        }\n        return r.ok;\n    };\n    ODataParserBase.prototype.parseODataJSON = function (json) {\n        var result = json;\n        if (json.hasOwnProperty(\""d\"")) {\n            if (json.d.hasOwnProperty(\""results\"")) {\n                result = json.d.results;\n            }\n            else {\n                result = json.d;\n            }\n        }\n        else if (json.hasOwnProperty(\""value\"")) {\n            result = json.value;\n        }\n        return result;\n    };\n    return ODataParserBase;\n}());\nexports.ODataParserBase = ODataParserBase;\nvar ODataDefaultParser = (function (_super) {\n    __extends(ODataDefaultParser, _super);\n    function ODataDefaultParser() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return ODataDefaultParser;\n}(ODataParserBase));\nexports.ODataDefaultParser = ODataDefaultParser;\nvar ODataRawParserImpl = (function () {\n    function ODataRawParserImpl() {\n    }\n    ODataRawParserImpl.prototype.parse = function (r) {\n        return r.json();\n    };\n    return ODataRawParserImpl;\n}());\nexports.ODataRawParserImpl = ODataRawParserImpl;\nvar ODataValueParserImpl = (function (_super) {\n    __extends(ODataValueParserImpl, _super);\n    function ODataValueParserImpl() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ODataValueParserImpl.prototype.parse = function (r) {\n        return _super.prototype.parse.call(this, r).then(function (d) { return d; });\n    };\n    return ODataValueParserImpl;\n}(ODataParserBase));\nvar ODataEntityParserImpl = (function (_super) {\n    __extends(ODataEntityParserImpl, _super);\n    function ODataEntityParserImpl(factory) {\n        var _this = _super.call(this) || this;\n        _this.factory = factory;\n        return _this;\n    }\n    ODataEntityParserImpl.prototype.parse = function (r) {\n        var _this = this;\n        return _super.prototype.parse.call(this, r).then(function (d) {\n            var o = new _this.factory(getEntityUrl(d), null);\n            return util_1.Util.extend(o, d);\n        });\n    };\n    return ODataEntityParserImpl;\n}(ODataParserBase));\nvar ODataEntityArrayParserImpl = (function (_super) {\n    __extends(ODataEntityArrayParserImpl, _super);\n    function ODataEntityArrayParserImpl(factory) {\n        var _this = _super.call(this) || this;\n        _this.factory = factory;\n        return _this;\n    }\n    ODataEntityArrayParserImpl.prototype.parse = function (r) {\n        var _this = this;\n        return _super.prototype.parse.call(this, r).then(function (d) {\n            return d.map(function (v) {\n                var o = new _this.factory(getEntityUrl(v), null);\n                return util_1.Util.extend(o, v);\n            });\n        });\n    };\n    return ODataEntityArrayParserImpl;\n}(ODataParserBase));\nfunction getEntityUrl(entity) {\n    if (entity.hasOwnProperty(\""odata.editLink\"")) {\n        // we are dealign with minimal metadata (default)\n        return util_1.Util.combinePaths(\""_api\"", entity[\""odata.editLink\""]);\n    }\n    else if (entity.hasOwnProperty(\""__metadata\"")) {\n        // we are dealing with verbose, which has an absolute uri\n        return entity.__metadata.uri;\n    }\n    else {\n        // we are likely dealing with nometadata, so don't error but we won't be able to\n        // chain off these objects\n        logging_1.Logger.write(\""No uri information found in ODataEntity parsing, chaining will fail for this object.\"", logging_1.LogLevel.Warning);\n        return \""\"";\n    }\n}\nexports.getEntityUrl = getEntityUrl;\nexports.ODataRaw = new ODataRawParserImpl();\nfunction ODataValue() {\n    return new ODataValueParserImpl();\n}\nexports.ODataValue = ODataValue;\nfunction ODataEntity(factory) {\n    return new ODataEntityParserImpl(factory);\n}\nexports.ODataEntity = ODataEntity;\nfunction ODataEntityArray(factory) {\n    return new ODataEntityArrayParserImpl(factory);\n}\nexports.ODataEntityArray = ODataEntityArray;\n/**\n * Manages a batch of OData operations\n */\nvar ODataBatch = (function () {\n    function ODataBatch(baseUrl, _batchId) {\n        if (_batchId === void 0) { _batchId = util_1.Util.getGUID(); }\n        this.baseUrl = baseUrl;\n        this._batchId = _batchId;\n        this._requests = [];\n        this._dependencies = [];\n    }\n    Object.defineProperty(ODataBatch.prototype, \""batchId\"", {\n        get: function () {\n            return this._batchId;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Adds a request to a batch (not designed for public use)\n     *\n     * @param url The full url of the request\n     * @param method The http method GET, POST, etc\n     * @param options Any options to include in the request\n     * @param parser The parser that will hadle the results of the request\n     */\n    ODataBatch.prototype.add = function (url, method, options, parser) {\n        var info = {\n            method: method.toUpperCase(),\n            options: options,\n            parser: parser,\n            reject: null,\n            resolve: null,\n            url: url,\n        };\n        var p = new Promise(function (resolve, reject) {\n            info.resolve = resolve;\n            info.reject = reject;\n        });\n        this._requests.push(info);\n        return p;\n    };\n    /**\n     * Adds a dependency insuring that some set of actions will occur before a batch is processed.\n     * MUST be cleared using the returned resolve delegate to allow batches to run\n     */\n    ODataBatch.prototype.addDependency = function () {\n        var resolver;\n        var promise = new Promise(function (resolve) {\n            resolver = resolve;\n        });\n        this._dependencies.push(promise);\n        return resolver;\n    };\n    /**\n     * Execute the current batch and resolve the associated promises\n     *\n     * @returns A promise which will be resolved once all of the batch's child promises have resolved\n     */\n    ODataBatch.prototype.execute = function () {\n        var _this = this;\n        // we need to check the dependencies twice due to how different engines handle things.\n        // We can get a second set of promises added after the first set resolve\n        return Promise.all(this._dependencies).then(function () { return Promise.all(_this._dependencies); }).then(function () { return _this.executeImpl(); });\n    };\n    ODataBatch.prototype.executeImpl = function () {\n        var _this = this;\n        logging_1.Logger.write(\""[\"" + this.batchId + \""] (\"" + (new Date()).getTime() + \"") Executing batch with \"" + this._requests.length + \"" requests.\"", logging_1.LogLevel.Info);\n        // if we don't have any requests, don't bother sending anything\n        // this could be due to caching further upstream, or just an empty batch\n        if (this._requests.length < 1) {\n            logging_1.Logger.write(\""Resolving empty batch.\"", logging_1.LogLevel.Info);\n            return Promise.resolve();\n        }\n        // creating the client here allows the url to be populated for nodejs client as well as potentially\n        // any other hacks needed for other types of clients. Essentially allows the absoluteRequestUrl\n        // below to be correct\n        var client = new httpclient_1.HttpClient();\n        // due to timing we need to get the absolute url here so we can use it for all the individual requests\n        // and for sending the entire batch\n        return util_1.Util.toAbsoluteUrl(this.baseUrl).then(function (absoluteRequestUrl) {\n            // build all the requests, send them, pipe results in order to parsers\n            var batchBody = [];\n            var currentChangeSetId = \""\"";\n            for (var i = 0; i < _this._requests.length; i++) {\n                var reqInfo = _this._requests[i];\n                if (reqInfo.method === \""GET\"") {\n                    if (currentChangeSetId.length > 0) {\n                        // end an existing change set\n                        batchBody.push(\""--changeset_\"" + currentChangeSetId + \""--\\n\\n\"");\n                        currentChangeSetId = \""\"";\n                    }\n                    batchBody.push(\""--batch_\"" + _this._batchId + \""\\n\"");\n                }\n                else {\n                    if (currentChangeSetId.length < 1) {\n                        // start new change set\n                        currentChangeSetId = util_1.Util.getGUID();\n                        batchBody.push(\""--batch_\"" + _this._batchId + \""\\n\"");\n                        batchBody.push(\""Content-Type: multipart/mixed; boundary=\\\""changeset_\"" + currentChangeSetId + \""\\\""\\n\\n\"");\n                    }\n                    batchBody.push(\""--changeset_\"" + currentChangeSetId + \""\\n\"");\n                }\n                // common batch part prefix\n                batchBody.push(\""Content-Type: application/http\\n\"");\n                batchBody.push(\""Content-Transfer-Encoding: binary\\n\\n\"");\n                var headers = {\n                    \""Accept\"": \""application/json;\"",\n                };\n                // this is the url of the individual request within the batch\n                var url = util_1.Util.isUrlAbsolute(reqInfo.url) ? reqInfo.url : util_1.Util.combinePaths(absoluteRequestUrl, reqInfo.url);\n                logging_1.Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Adding request \"" + reqInfo.method + \"" \"" + url + \"" to batch.\"", logging_1.LogLevel.Verbose);\n                if (reqInfo.method !== \""GET\"") {\n                    var method = reqInfo.method;\n                    if (reqInfo.hasOwnProperty(\""options\"") && reqInfo.options.hasOwnProperty(\""headers\"") && typeof reqInfo.options.headers[\""X-HTTP-Method\""] !== \""undefined\"") {\n                        method = reqInfo.options.headers[\""X-HTTP-Method\""];\n                        delete reqInfo.options.headers[\""X-HTTP-Method\""];\n                    }\n                    batchBody.push(method + \"" \"" + url + \"" HTTP/1.1\\n\"");\n                    headers = util_1.Util.extend(headers, { \""Content-Type\"": \""application/json;odata=verbose;charset=utf-8\"" });\n                }\n                else {\n                    batchBody.push(reqInfo.method + \"" \"" + url + \"" HTTP/1.1\\n\"");\n                }\n                if (typeof pnplibconfig_1.RuntimeConfig.headers !== \""undefined\"") {\n                    headers = util_1.Util.extend(headers, pnplibconfig_1.RuntimeConfig.headers);\n                }\n                if (reqInfo.options && reqInfo.options.headers) {\n                    headers = util_1.Util.extend(headers, reqInfo.options.headers);\n                }\n                for (var name_1 in headers) {\n                    if (headers.hasOwnProperty(name_1)) {\n                        batchBody.push(name_1 + \"": \"" + headers[name_1] + \""\\n\"");\n                    }\n                }\n                batchBody.push(\""\\n\"");\n                if (reqInfo.options.body) {\n                    batchBody.push(reqInfo.options.body + \""\\n\\n\"");\n                }\n            }\n            if (currentChangeSetId.length > 0) {\n                // Close the changeset\n                batchBody.push(\""--changeset_\"" + currentChangeSetId + \""--\\n\\n\"");\n                currentChangeSetId = \""\"";\n            }\n            batchBody.push(\""--batch_\"" + _this._batchId + \""--\\n\"");\n            var batchHeaders = {\n                \""Content-Type\"": \""multipart/mixed; boundary=batch_\"" + _this._batchId,\n            };\n            var batchOptions = {\n                \""body\"": batchBody.join(\""\""),\n                \""headers\"": batchHeaders,\n            };\n            logging_1.Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Sending batch request.\"", logging_1.LogLevel.Info);\n            return client.post(util_1.Util.combinePaths(absoluteRequestUrl, \""/_api/$batch\""), batchOptions)\n                .then(function (r) { return r.text(); })\n                .then(_this._parseResponse)\n                .then(function (responses) {\n                if (responses.length !== _this._requests.length) {\n                    throw new exceptions_1.BatchParseException(\""Could not properly parse responses to match requests in batch.\"");\n                }\n                logging_1.Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Resolving batched requests.\"", logging_1.LogLevel.Info);\n                return responses.reduce(function (chain, response, index) {\n                    var request = _this._requests[index];\n                    logging_1.Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Resolving batched request \"" + request.method + \"" \"" + request.url + \"".\"", logging_1.LogLevel.Verbose);\n                    return chain.then(function (_) { return request.parser.parse(response).then(request.resolve).catch(request.reject); });\n                }, Promise.resolve());\n            });\n        });\n    };\n    /**\n     * Parses the response from a batch request into an array of Response instances\n     *\n     * @param body Text body of the response from the batch request\n     */\n    ODataBatch.prototype._parseResponse = function (body) {\n        return new Promise(function (resolve, reject) {\n            var responses = [];\n            var header = \""--batchresponse_\"";\n            // Ex. \""HTTP/1.1 500 Internal Server Error\""\n            var statusRegExp = new RegExp(\""^HTTP/[0-9.]+ +([0-9]+) +(.*)\"", \""i\"");\n            var lines = body.split(\""\\n\"");\n            var state = \""batch\"";\n            var status;\n            var statusText;\n            for (var i = 0; i < lines.length; ++i) {\n                var line = lines[i];\n                switch (state) {\n                    case \""batch\"":\n                        if (line.substr(0, header.length) === header) {\n                            state = \""batchHeaders\"";\n                        }\n                        else {\n                            if (line.trim() !== \""\"") {\n                                throw new exceptions_1.BatchParseException(\""Invalid response, line \"" + i);\n                            }\n                        }\n                        break;\n                    case \""batchHeaders\"":\n                        if (line.trim() === \""\"") {\n                            state = \""status\"";\n                        }\n                        break;\n                    case \""status\"":\n                        var parts = statusRegExp.exec(line);\n                        if (parts.length !== 3) {\n                            throw new exceptions_1.BatchParseException(\""Invalid status, line \"" + i);\n                        }\n                        status = parseInt(parts[1], 10);\n                        statusText = parts[2];\n                        state = \""statusHeaders\"";\n                        break;\n                    case \""statusHeaders\"":\n                        if (line.trim() === \""\"") {\n                            state = \""body\"";\n                        }\n                        break;\n                    case \""body\"":\n                        responses.push((status === 204) ? new Response() : new Response(line, { status: status, statusText: statusText }));\n                        state = \""batch\"";\n                        break;\n                }\n            }\n            if (state !== \""status\"") {\n                reject(new exceptions_1.BatchParseException(\""Unexpected end of input\""));\n            }\n            resolve(responses);\n        });\n    };\n    return ODataBatch;\n}());\nexports.ODataBatch = ODataBatch;\nvar TextFileParser = (function () {\n    function TextFileParser() {\n    }\n    TextFileParser.prototype.parse = function (r) {\n        return r.text();\n    };\n    return TextFileParser;\n}());\nexports.TextFileParser = TextFileParser;\nvar BlobFileParser = (function () {\n    function BlobFileParser() {\n    }\n    BlobFileParser.prototype.parse = function (r) {\n        return r.blob();\n    };\n    return BlobFileParser;\n}());\nexports.BlobFileParser = BlobFileParser;\nvar JSONFileParser = (function () {\n    function JSONFileParser() {\n    }\n    JSONFileParser.prototype.parse = function (r) {\n        return r.json();\n    };\n    return JSONFileParser;\n}());\nexports.JSONFileParser = JSONFileParser;\nvar BufferFileParser = (function () {\n    function BufferFileParser() {\n    }\n    BufferFileParser.prototype.parse = function (r) {\n        if (util_1.Util.isFunction(r.arrayBuffer)) {\n            return r.arrayBuffer();\n        }\n        return r.buffer();\n    };\n    return BufferFileParser;\n}());\nexports.BufferFileParser = BufferFileParser;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/odata.js\n// module id = 2\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar logging_1 = require(\""../utils/logging\"");\nfunction defaultLog(error) {\n    logging_1.Logger.log({ data: {}, level: logging_1.LogLevel.Error, message: \""[\"" + error.name + \""]::\"" + error.message });\n}\n/**\n * Represents an exception with an HttpClient request\n *\n */\nvar ProcessHttpClientResponseException = (function (_super) {\n    __extends(ProcessHttpClientResponseException, _super);\n    function ProcessHttpClientResponseException(status, statusText, data) {\n        var _this = _super.call(this, \""Error making HttpClient request in queryable: [\"" + status + \""] \"" + statusText) || this;\n        _this.status = status;\n        _this.statusText = statusText;\n        _this.data = data;\n        _this.name = \""ProcessHttpClientResponseException\"";\n        logging_1.Logger.log({ data: _this.data, level: logging_1.LogLevel.Error, message: _this.message });\n        return _this;\n    }\n    return ProcessHttpClientResponseException;\n}(Error));\nexports.ProcessHttpClientResponseException = ProcessHttpClientResponseException;\nvar NoCacheAvailableException = (function (_super) {\n    __extends(NoCacheAvailableException, _super);\n    function NoCacheAvailableException(msg) {\n        if (msg === void 0) { msg = \""Cannot create a caching configuration provider since cache is not available.\""; }\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""NoCacheAvailableException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return NoCacheAvailableException;\n}(Error));\nexports.NoCacheAvailableException = NoCacheAvailableException;\nvar APIUrlException = (function (_super) {\n    __extends(APIUrlException, _super);\n    function APIUrlException(msg) {\n        if (msg === void 0) { msg = \""Unable to determine API url.\""; }\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""APIUrlException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return APIUrlException;\n}(Error));\nexports.APIUrlException = APIUrlException;\nvar AuthUrlException = (function (_super) {\n    __extends(AuthUrlException, _super);\n    function AuthUrlException(data, msg) {\n        if (msg === void 0) { msg = \""Auth URL Endpoint could not be determined from data. Data logged.\""; }\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""APIUrlException\"";\n        logging_1.Logger.log({ data: data, level: logging_1.LogLevel.Error, message: _this.message });\n        return _this;\n    }\n    return AuthUrlException;\n}(Error));\nexports.AuthUrlException = AuthUrlException;\nvar NodeFetchClientUnsupportedException = (function (_super) {\n    __extends(NodeFetchClientUnsupportedException, _super);\n    function NodeFetchClientUnsupportedException(msg) {\n        if (msg === void 0) { msg = \""Using NodeFetchClient in the browser is not supported.\""; }\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""NodeFetchClientUnsupportedException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return NodeFetchClientUnsupportedException;\n}(Error));\nexports.NodeFetchClientUnsupportedException = NodeFetchClientUnsupportedException;\nvar SPRequestExecutorUndefinedException = (function (_super) {\n    __extends(SPRequestExecutorUndefinedException, _super);\n    function SPRequestExecutorUndefinedException() {\n        var _this = this;\n        var msg = [\n            \""SP.RequestExecutor is undefined. \"",\n            \""Load the SP.RequestExecutor.js library (/_layouts/15/SP.RequestExecutor.js) before loading the PnP JS Core library.\"",\n        ].join(\"" \"");\n        _this = _super.call(this, msg) || this;\n        _this.name = \""SPRequestExecutorUndefinedException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return SPRequestExecutorUndefinedException;\n}(Error));\nexports.SPRequestExecutorUndefinedException = SPRequestExecutorUndefinedException;\nvar MaxCommentLengthException = (function (_super) {\n    __extends(MaxCommentLengthException, _super);\n    function MaxCommentLengthException(msg) {\n        if (msg === void 0) { msg = \""The maximum comment length is 1023 characters.\""; }\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""MaxCommentLengthException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return MaxCommentLengthException;\n}(Error));\nexports.MaxCommentLengthException = MaxCommentLengthException;\nvar NotSupportedInBatchException = (function (_super) {\n    __extends(NotSupportedInBatchException, _super);\n    function NotSupportedInBatchException(operation) {\n        if (operation === void 0) { operation = \""This operation\""; }\n        var _this = _super.call(this, operation + \"" is not supported as part of a batch.\"") || this;\n        _this.name = \""NotSupportedInBatchException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return NotSupportedInBatchException;\n}(Error));\nexports.NotSupportedInBatchException = NotSupportedInBatchException;\nvar ODataIdException = (function (_super) {\n    __extends(ODataIdException, _super);\n    function ODataIdException(data, msg) {\n        if (msg === void 0) { msg = \""Could not extract odata id in object, you may be using nometadata. Object data logged to logger.\""; }\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""ODataIdException\"";\n        logging_1.Logger.log({ data: data, level: logging_1.LogLevel.Error, message: _this.message });\n        return _this;\n    }\n    return ODataIdException;\n}(Error));\nexports.ODataIdException = ODataIdException;\nvar BatchParseException = (function (_super) {\n    __extends(BatchParseException, _super);\n    function BatchParseException(msg) {\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""BatchParseException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return BatchParseException;\n}(Error));\nexports.BatchParseException = BatchParseException;\nvar AlreadyInBatchException = (function (_super) {\n    __extends(AlreadyInBatchException, _super);\n    function AlreadyInBatchException(msg) {\n        if (msg === void 0) { msg = \""This query is already part of a batch.\""; }\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""AlreadyInBatchException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return AlreadyInBatchException;\n}(Error));\nexports.AlreadyInBatchException = AlreadyInBatchException;\nvar FunctionExpectedException = (function (_super) {\n    __extends(FunctionExpectedException, _super);\n    function FunctionExpectedException(msg) {\n        if (msg === void 0) { msg = \""This query is already part of a batch.\""; }\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""FunctionExpectedException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return FunctionExpectedException;\n}(Error));\nexports.FunctionExpectedException = FunctionExpectedException;\nvar UrlException = (function (_super) {\n    __extends(UrlException, _super);\n    function UrlException(msg) {\n        var _this = _super.call(this, msg) || this;\n        _this.name = \""UrlException\"";\n        defaultLog(_this);\n        return _this;\n    }\n    return UrlException;\n}(Error));\nexports.UrlException = UrlException;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils/exceptions.js\n// module id = 3\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar fetchclient_1 = require(\""../net/fetchclient\"");\nvar RuntimeConfigImpl = (function () {\n    function RuntimeConfigImpl() {\n        // these are our default values for the library\n        this._headers = null;\n        this._defaultCachingStore = \""session\"";\n        this._defaultCachingTimeoutSeconds = 60;\n        this._globalCacheDisable = false;\n        this._fetchClientFactory = function () { return new fetchclient_1.FetchClient(); };\n        this._baseUrl = null;\n        this._spfxContext = null;\n    }\n    RuntimeConfigImpl.prototype.set = function (config) {\n        if (config.hasOwnProperty(\""headers\"")) {\n            this._headers = config.headers;\n        }\n        if (config.hasOwnProperty(\""globalCacheDisable\"")) {\n            this._globalCacheDisable = config.globalCacheDisable;\n        }\n        if (config.hasOwnProperty(\""defaultCachingStore\"")) {\n            this._defaultCachingStore = config.defaultCachingStore;\n        }\n        if (config.hasOwnProperty(\""defaultCachingTimeoutSeconds\"")) {\n            this._defaultCachingTimeoutSeconds = config.defaultCachingTimeoutSeconds;\n        }\n        if (config.hasOwnProperty(\""fetchClientFactory\"")) {\n            this._fetchClientFactory = config.fetchClientFactory;\n        }\n        if (config.hasOwnProperty(\""baseUrl\"")) {\n            this._baseUrl = config.baseUrl;\n        }\n        if (config.hasOwnProperty(\""spfxContext\"")) {\n            this._spfxContext = config.spfxContext;\n        }\n    };\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""headers\"", {\n        get: function () {\n            return this._headers;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingStore\"", {\n        get: function () {\n            return this._defaultCachingStore;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingTimeoutSeconds\"", {\n        get: function () {\n            return this._defaultCachingTimeoutSeconds;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""globalCacheDisable\"", {\n        get: function () {\n            return this._globalCacheDisable;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""fetchClientFactory\"", {\n        get: function () {\n            return this._fetchClientFactory;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""baseUrl\"", {\n        get: function () {\n            if (this._baseUrl !== null) {\n                return this._baseUrl;\n            }\n            else if (this._spfxContext !== null) {\n                return this._spfxContext.pageContext.web.absoluteUrl;\n            }\n            return null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    return RuntimeConfigImpl;\n}());\nexports.RuntimeConfigImpl = RuntimeConfigImpl;\nvar _runtimeConfig = new RuntimeConfigImpl();\nexports.RuntimeConfig = _runtimeConfig;\nfunction setRuntimeConfig(config) {\n    _runtimeConfig.set(config);\n}\nexports.setRuntimeConfig = setRuntimeConfig;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/configuration/pnplibconfig.js\n// module id = 4\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\n/**\n * A set of logging levels\n *\n */\nvar LogLevel;\n(function (LogLevel) {\n    LogLevel[LogLevel[\""Verbose\""] = 0] = \""Verbose\"";\n    LogLevel[LogLevel[\""Info\""] = 1] = \""Info\"";\n    LogLevel[LogLevel[\""Warning\""] = 2] = \""Warning\"";\n    LogLevel[LogLevel[\""Error\""] = 3] = \""Error\"";\n    LogLevel[LogLevel[\""Off\""] = 99] = \""Off\"";\n})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));\n/**\n * Class used to subscribe ILogListener and log messages throughout an application\n *\n */\nvar Logger = (function () {\n    function Logger() {\n    }\n    Object.defineProperty(Logger, \""activeLogLevel\"", {\n        get: function () {\n            return Logger.instance.activeLogLevel;\n        },\n        set: function (value) {\n            Logger.instance.activeLogLevel = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Logger, \""instance\"", {\n        get: function () {\n            if (typeof Logger._instance === \""undefined\"" || Logger._instance === null) {\n                Logger._instance = new LoggerImpl();\n            }\n            return Logger._instance;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Adds ILogListener instances to the set of subscribed listeners\n     *\n     * @param listeners One or more listeners to subscribe to this log\n     */\n    Logger.subscribe = function () {\n        var listeners = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            listeners[_i] = arguments[_i];\n        }\n        listeners.map(function (listener) { return Logger.instance.subscribe(listener); });\n    };\n    /**\n     * Clears the subscribers collection, returning the collection before modifiction\n     */\n    Logger.clearSubscribers = function () {\n        return Logger.instance.clearSubscribers();\n    };\n    Object.defineProperty(Logger, \""count\"", {\n        /**\n         * Gets the current subscriber count\n         */\n        get: function () {\n            return Logger.instance.count;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Writes the supplied string to the subscribed listeners\n     *\n     * @param message The message to write\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Verbose)\n     */\n    Logger.write = function (message, level) {\n        if (level === void 0) { level = LogLevel.Verbose; }\n        Logger.instance.log({ level: level, message: message });\n    };\n    /**\n     * Writes the supplied string to the subscribed listeners\n     *\n     * @param json The json object to stringify and write\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Verbose)\n     */\n    Logger.writeJSON = function (json, level) {\n        if (level === void 0) { level = LogLevel.Verbose; }\n        Logger.instance.log({ level: level, message: JSON.stringify(json) });\n    };\n    /**\n     * Logs the supplied entry to the subscribed listeners\n     *\n     * @param entry The message to log\n     */\n    Logger.log = function (entry) {\n        Logger.instance.log(entry);\n    };\n    /**\n     * Logs performance tracking data for the the execution duration of the supplied function using console.profile\n     *\n     * @param name The name of this profile boundary\n     * @param f The function to execute and track within this performance boundary\n     */\n    Logger.measure = function (name, f) {\n        return Logger.instance.measure(name, f);\n    };\n    return Logger;\n}());\nexports.Logger = Logger;\nvar LoggerImpl = (function () {\n    function LoggerImpl(activeLogLevel, subscribers) {\n        if (activeLogLevel === void 0) { activeLogLevel = LogLevel.Warning; }\n        if (subscribers === void 0) { subscribers = []; }\n        this.activeLogLevel = activeLogLevel;\n        this.subscribers = subscribers;\n    }\n    LoggerImpl.prototype.subscribe = function (listener) {\n        this.subscribers.push(listener);\n    };\n    LoggerImpl.prototype.clearSubscribers = function () {\n        var s = this.subscribers.slice(0);\n        this.subscribers.length = 0;\n        return s;\n    };\n    Object.defineProperty(LoggerImpl.prototype, \""count\"", {\n        get: function () {\n            return this.subscribers.length;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    LoggerImpl.prototype.write = function (message, level) {\n        if (level === void 0) { level = LogLevel.Verbose; }\n        this.log({ level: level, message: message });\n    };\n    LoggerImpl.prototype.log = function (entry) {\n        if (typeof entry === \""undefined\"" || entry.level < this.activeLogLevel) {\n            return;\n        }\n        this.subscribers.map(function (subscriber) { return subscriber.log(entry); });\n    };\n    LoggerImpl.prototype.measure = function (name, f) {\n        console.profile(name);\n        try {\n            return f();\n        }\n        finally {\n            console.profileEnd();\n        }\n    };\n    return LoggerImpl;\n}());\n/**\n * Implementation of ILogListener which logs to the browser console\n *\n */\nvar ConsoleListener = (function () {\n    function ConsoleListener() {\n    }\n    /**\n     * Any associated data that a given logging listener may choose to log or ignore\n     *\n     * @param entry The information to be logged\n     */\n    ConsoleListener.prototype.log = function (entry) {\n        var msg = this.format(entry);\n        switch (entry.level) {\n            case LogLevel.Verbose:\n            case LogLevel.Info:\n                console.log(msg);\n                break;\n            case LogLevel.Warning:\n                console.warn(msg);\n                break;\n            case LogLevel.Error:\n                console.error(msg);\n                break;\n        }\n    };\n    /**\n     * Formats the message\n     *\n     * @param entry The information to format into a string\n     */\n    ConsoleListener.prototype.format = function (entry) {\n        return \""Message: \"" + entry.message + \"" Data: \"" + JSON.stringify(entry.data);\n    };\n    return ConsoleListener;\n}());\nexports.ConsoleListener = ConsoleListener;\n/**\n * Implementation of ILogListener which logs to the supplied function\n *\n */\nvar FunctionListener = (function () {\n    /**\n     * Creates a new instance of the FunctionListener class\n     *\n     * @constructor\n     * @param  method The method to which any logging data will be passed\n     */\n    function FunctionListener(method) {\n        this.method = method;\n    }\n    /**\n     * Any associated data that a given logging listener may choose to log or ignore\n     *\n     * @param entry The information to be logged\n     */\n    FunctionListener.prototype.log = function (entry) {\n        this.method(entry);\n    };\n    return FunctionListener;\n}());\nexports.FunctionListener = FunctionListener;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils/logging.js\n// module id = 5\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\n/**\n * Generic dictionary\n */\nvar Dictionary = (function () {\n    /**\n     * Creates a new instance of the Dictionary<T> class\n     *\n     * @constructor\n     */\n    function Dictionary(keys, values) {\n        if (keys === void 0) { keys = []; }\n        if (values === void 0) { values = []; }\n        this.keys = keys;\n        this.values = values;\n    }\n    /**\n     * Gets a value from the collection using the specified key\n     *\n     * @param key The key whose value we want to return, returns null if the key does not exist\n     */\n    Dictionary.prototype.get = function (key) {\n        var index = this.keys.indexOf(key);\n        if (index < 0) {\n            return null;\n        }\n        return this.values[index];\n    };\n    /**\n     * Adds the supplied key and value to the dictionary\n     *\n     * @param key The key to add\n     * @param o The value to add\n     */\n    Dictionary.prototype.add = function (key, o) {\n        var index = this.keys.indexOf(key);\n        if (index > -1) {\n            this.values[index] = o;\n        }\n        else {\n            this.keys.push(key);\n            this.values.push(o);\n        }\n    };\n    /**\n     * Merges the supplied typed hash into this dictionary instance. Existing values are updated and new ones are created as appropriate.\n     */\n    Dictionary.prototype.merge = function (source) {\n        var _this = this;\n        if (\""getKeys\"" in source) {\n            var sourceAsDictionary_1 = source;\n            sourceAsDictionary_1.getKeys().map(function (key) {\n                _this.add(key, sourceAsDictionary_1.get(key));\n            });\n        }\n        else {\n            var sourceAsHash = source;\n            for (var key in sourceAsHash) {\n                if (sourceAsHash.hasOwnProperty(key)) {\n                    this.add(key, sourceAsHash[key]);\n                }\n            }\n        }\n    };\n    /**\n     * Removes a value from the dictionary\n     *\n     * @param key The key of the key/value pair to remove. Returns null if the key was not found.\n     */\n    Dictionary.prototype.remove = function (key) {\n        var index = this.keys.indexOf(key);\n        if (index < 0) {\n            return null;\n        }\n        var val = this.values[index];\n        this.keys.splice(index, 1);\n        this.values.splice(index, 1);\n        return val;\n    };\n    /**\n     * Returns all the keys currently in the dictionary as an array\n     */\n    Dictionary.prototype.getKeys = function () {\n        return this.keys;\n    };\n    /**\n     * Returns all the values currently in the dictionary as an array\n     */\n    Dictionary.prototype.getValues = function () {\n        return this.values;\n    };\n    /**\n     * Clears the current dictionary\n     */\n    Dictionary.prototype.clear = function () {\n        this.keys = [];\n        this.values = [];\n    };\n    /**\n     * Gets a count of the items currently in the dictionary\n     */\n    Dictionary.prototype.count = function () {\n        return this.keys.length;\n    };\n    return Dictionary;\n}());\nexports.Dictionary = Dictionary;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/collections/collections.js\n// module id = 6\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \""object\"" && typeof Reflect.decorate === \""function\"") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar lists_1 = require(\""./lists\"");\nvar fields_1 = require(\""./fields\"");\nvar navigation_1 = require(\""./navigation\"");\nvar sitegroups_1 = require(\""./sitegroups\"");\nvar contenttypes_1 = require(\""./contenttypes\"");\nvar folders_1 = require(\""./folders\"");\nvar roles_1 = require(\""./roles\"");\nvar files_1 = require(\""./files\"");\nvar util_1 = require(\""../utils/util\"");\nvar lists_2 = require(\""./lists\"");\nvar siteusers_1 = require(\""./siteusers\"");\nvar usercustomactions_1 = require(\""./usercustomactions\"");\nvar odata_1 = require(\""./odata\"");\nvar features_1 = require(\""./features\"");\nvar decorators_1 = require(\""../utils/decorators\"");\nvar queryableshareable_1 = require(\""./queryableshareable\"");\nvar relateditems_1 = require(\""./relateditems\"");\nvar Webs = (function (_super) {\n    __extends(Webs, _super);\n    function Webs(baseUrl, webPath) {\n        if (webPath === void 0) { webPath = \""webs\""; }\n        return _super.call(this, baseUrl, webPath) || this;\n    }\n    /**\n     * Adds a new web to the collection\n     *\n     * @param title The new web's title\n     * @param url The new web's relative url\n     * @param description The web web's description\n     * @param template The web's template\n     * @param language The language code to use for this web\n     * @param inheritPermissions If true permissions will be inherited from the partent web\n     * @param additionalSettings Will be passed as part of the web creation body\n     */\n    Webs.prototype.add = function (title, url, description, template, language, inheritPermissions, additionalSettings) {\n        if (description === void 0) { description = \""\""; }\n        if (template === void 0) { template = \""STS\""; }\n        if (language === void 0) { language = 1033; }\n        if (inheritPermissions === void 0) { inheritPermissions = true; }\n        if (additionalSettings === void 0) { additionalSettings = {}; }\n        var props = util_1.Util.extend({\n            Description: description,\n            Language: language,\n            Title: title,\n            Url: url,\n            UseSamePermissionsAsParentSite: inheritPermissions,\n            WebTemplate: template,\n        }, additionalSettings);\n        var postBody = JSON.stringify({\n            \""parameters\"": util_1.Util.extend({\n                \""__metadata\"": { \""type\"": \""SP.WebCreationInformation\"" },\n            }, props),\n        });\n        return this.clone(Webs, \""add\"", true).post({ body: postBody }).then(function (data) {\n            return {\n                data: data,\n                web: new Web(odata_1.extractOdataId(data).replace(/_api\\/web\\/?/i, \""\"")),\n            };\n        });\n    };\n    return Webs;\n}(queryable_1.QueryableCollection));\nexports.Webs = Webs;\nvar WebInfos = (function (_super) {\n    __extends(WebInfos, _super);\n    function WebInfos(baseUrl, webPath) {\n        if (webPath === void 0) { webPath = \""webinfos\""; }\n        return _super.call(this, baseUrl, webPath) || this;\n    }\n    return WebInfos;\n}(queryable_1.QueryableCollection));\nexports.WebInfos = WebInfos;\n/**\n * Describes a web\n *\n */\nvar Web = (function (_super) {\n    __extends(Web, _super);\n    function Web(baseUrl, path) {\n        if (path === void 0) { path = \""_api/web\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Creates a new web instance from the given url by indexing the location of the /_api/\n     * segment. If this is not found the method creates a new web with the entire string as\n     * supplied.\n     *\n     * @param url\n     */\n    Web.fromUrl = function (url, path) {\n        if (url === null) {\n            return new Web(\""\"");\n        }\n        var index = url.indexOf(\""_api/\"");\n        if (index > -1) {\n            return new Web(url.substr(0, index), path);\n        }\n        return new Web(url, path);\n    };\n    Object.defineProperty(Web.prototype, \""webs\"", {\n        get: function () {\n            return new Webs(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""webinfos\"", {\n        get: function () {\n            return new WebInfos(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""contentTypes\"", {\n        /**\n         * Get the content types available in this web\n         *\n         */\n        get: function () {\n            return new contenttypes_1.ContentTypes(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""lists\"", {\n        /**\n         * Get the lists in this web\n         *\n         */\n        get: function () {\n            return new lists_1.Lists(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""fields\"", {\n        /**\n         * Gets the fields in this web\n         *\n         */\n        get: function () {\n            return new fields_1.Fields(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""features\"", {\n        /**\n         * Gets the active features for this web\n         *\n         */\n        get: function () {\n            return new features_1.Features(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""availablefields\"", {\n        /**\n         * Gets the available fields in this web\n         *\n         */\n        get: function () {\n            return new fields_1.Fields(this, \""availablefields\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""navigation\"", {\n        /**\n         * Get the navigation options in this web\n         *\n         */\n        get: function () {\n            return new navigation_1.Navigation(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""siteUsers\"", {\n        /**\n         * Gets the site users\n         *\n         */\n        get: function () {\n            return new siteusers_1.SiteUsers(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""siteGroups\"", {\n        /**\n         * Gets the site groups\n         *\n         */\n        get: function () {\n            return new sitegroups_1.SiteGroups(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""currentUser\"", {\n        /**\n         * Gets the current user\n         */\n        get: function () {\n            return new siteusers_1.CurrentUser(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""folders\"", {\n        /**\n         * Get the folders in this web\n         *\n         */\n        get: function () {\n            return new folders_1.Folders(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""userCustomActions\"", {\n        /**\n         * Get all custom actions on a site\n         *\n         */\n        get: function () {\n            return new usercustomactions_1.UserCustomActions(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""roleDefinitions\"", {\n        /**\n         * Gets the collection of RoleDefinition resources.\n         *\n         */\n        get: function () {\n            return new roles_1.RoleDefinitions(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""relatedItems\"", {\n        /**\n         * Provides an interface to manage related items\n         *\n         */\n        get: function () {\n            return relateditems_1.RelatedItemManagerImpl.FromUrl(this.toUrl());\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Creates a new batch for requests within the context of context this web\n     *\n     */\n    Web.prototype.createBatch = function () {\n        return new odata_1.ODataBatch(this.parentUrl);\n    };\n    Object.defineProperty(Web.prototype, \""rootFolder\"", {\n        /**\n         * The root folder of the web\n         */\n        get: function () {\n            return new folders_1.Folder(this, \""rootFolder\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""associatedOwnerGroup\"", {\n        get: function () {\n            return new sitegroups_1.SiteGroup(this, \""associatedownergroup\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""associatedMemberGroup\"", {\n        get: function () {\n            return new sitegroups_1.SiteGroup(this, \""associatedmembergroup\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Web.prototype, \""associatedVisitorGroup\"", {\n        get: function () {\n            return new sitegroups_1.SiteGroup(this, \""associatedvisitorgroup\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Get a folder by server relative url\n     *\n     * @param folderRelativeUrl the server relative path to the folder (including /sites/ if applicable)\n     */\n    Web.prototype.getFolderByServerRelativeUrl = function (folderRelativeUrl) {\n        return new folders_1.Folder(this, \""getFolderByServerRelativeUrl('\"" + folderRelativeUrl + \""')\"");\n    };\n    /**\n     * Get a file by server relative url\n     *\n     * @param fileRelativeUrl the server relative path to the file (including /sites/ if applicable)\n     */\n    Web.prototype.getFileByServerRelativeUrl = function (fileRelativeUrl) {\n        return new files_1.File(this, \""getFileByServerRelativeUrl('\"" + fileRelativeUrl + \""')\"");\n    };\n    /**\n     * Get a list by server relative url (list's root folder)\n     *\n     * @param listRelativeUrl the server relative path to the list's root folder (including /sites/ if applicable)\n     */\n    Web.prototype.getList = function (listRelativeUrl) {\n        return new lists_2.List(this, \""getList('\"" + listRelativeUrl + \""')\"");\n    };\n    /**\n     * Updates this web intance with the supplied properties\n     *\n     * @param properties A plain object hash of values to update for the web\n     */\n    Web.prototype.update = function (properties) {\n        var _this = this;\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""__metadata\"": { \""type\"": \""SP.Web\"" },\n        }, properties));\n        return this.post({\n            body: postBody,\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            return {\n                data: data,\n                web: _this,\n            };\n        });\n    };\n    /**\n     * Delete this web\n     *\n     */\n    Web.prototype.delete = function () {\n        return _super.prototype.delete.call(this);\n    };\n    /**\n     * Applies the theme specified by the contents of each of the files specified in the arguments to the site.\n     *\n     * @param colorPaletteUrl Server-relative URL of the color palette file.\n     * @param fontSchemeUrl Server-relative URL of the font scheme.\n     * @param backgroundImageUrl Server-relative URL of the background image.\n     * @param shareGenerated true to store the generated theme files in the root site, or false to store them in this site.\n     */\n    Web.prototype.applyTheme = function (colorPaletteUrl, fontSchemeUrl, backgroundImageUrl, shareGenerated) {\n        var postBody = JSON.stringify({\n            backgroundImageUrl: backgroundImageUrl,\n            colorPaletteUrl: colorPaletteUrl,\n            fontSchemeUrl: fontSchemeUrl,\n            shareGenerated: shareGenerated,\n        });\n        return this.clone(Web, \""applytheme\"", true).post({ body: postBody });\n    };\n    /**\n     * Applies the specified site definition or site template to the Web site that has no template applied to it.\n     *\n     * @param template Name of the site definition or the name of the site template\n     */\n    Web.prototype.applyWebTemplate = function (template) {\n        var q = this.clone(Web, \""applywebtemplate\"", true);\n        q.concat(\""(@t)\"");\n        q.query.add(\""@t\"", template);\n        return q.post();\n    };\n    /**\n     * Returns whether the current user has the given set of permissions.\n     *\n     * @param perms The high and low permission range.\n     */\n    Web.prototype.doesUserHavePermissions = function (perms) {\n        var q = this.clone(Web, \""doesuserhavepermissions\"", true);\n        q.concat(\""(@p)\"");\n        q.query.add(\""@p\"", JSON.stringify(perms));\n        return q.get();\n    };\n    /**\n     * Checks whether the specified login name belongs to a valid user in the site. If the user doesn't exist, adds the user to the site.\n     *\n     * @param loginName The login name of the user (ex: i:0#.f|membership|user@domain.onmicrosoft.com)\n     */\n    Web.prototype.ensureUser = function (loginName) {\n        var postBody = JSON.stringify({\n            logonName: loginName,\n        });\n        return this.clone(Web, \""ensureuser\"", true).post({ body: postBody }).then(function (data) {\n            return {\n                data: data,\n                user: new siteusers_1.SiteUser(odata_1.extractOdataId(data)),\n            };\n        });\n    };\n    /**\n     * Returns a collection of site templates available for the site.\n     *\n     * @param language The LCID of the site templates to get.\n     * @param true to include language-neutral site templates; otherwise false\n     */\n    Web.prototype.availableWebTemplates = function (language, includeCrossLanugage) {\n        if (language === void 0) { language = 1033; }\n        if (includeCrossLanugage === void 0) { includeCrossLanugage = true; }\n        return new queryable_1.QueryableCollection(this, \""getavailablewebtemplates(lcid=\"" + language + \"", doincludecrosslanguage=\"" + includeCrossLanugage + \"")\"");\n    };\n    /**\n     * Returns the list gallery on the site.\n     *\n     * @param type The gallery type - WebTemplateCatalog = 111, WebPartCatalog = 113 ListTemplateCatalog = 114,\n     * MasterPageCatalog = 116, SolutionCatalog = 121, ThemeCatalog = 123, DesignCatalog = 124, AppDataCatalog = 125\n     */\n    Web.prototype.getCatalog = function (type) {\n        return this.clone(Web, \""getcatalog(\"" + type + \"")\"", true).select(\""Id\"").get().then(function (data) {\n            return new lists_2.List(odata_1.extractOdataId(data));\n        });\n    };\n    /**\n     * Returns the collection of changes from the change log that have occurred within the list, based on the specified query.\n     */\n    Web.prototype.getChanges = function (query) {\n        var postBody = JSON.stringify({ \""query\"": util_1.Util.extend({ \""__metadata\"": { \""type\"": \""SP.ChangeQuery\"" } }, query) });\n        return this.clone(Web, \""getchanges\"", true).post({ body: postBody });\n    };\n    Object.defineProperty(Web.prototype, \""customListTemplate\"", {\n        /**\n         * Gets the custom list templates for the site.\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""getcustomlisttemplates\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Returns the user corresponding to the specified member identifier for the current site.\n     *\n     * @param id The ID of the user.\n     */\n    Web.prototype.getUserById = function (id) {\n        return new siteusers_1.SiteUser(this, \""getUserById(\"" + id + \"")\"");\n    };\n    /**\n     * Returns the name of the image file for the icon that is used to represent the specified file.\n     *\n     * @param filename The file name. If this parameter is empty, the server returns an empty string.\n     * @param size The size of the icon: 16x16 pixels = 0, 32x32 pixels = 1.\n     * @param progId The ProgID of the application that was used to create the file, in the form OLEServerName.ObjectName\n     */\n    Web.prototype.mapToIcon = function (filename, size, progId) {\n        if (size === void 0) { size = 0; }\n        if (progId === void 0) { progId = \""\""; }\n        return this.clone(Web, \""maptoicon(filename='\"" + filename + \""', progid='\"" + progId + \""', size=\"" + size + \"")\"", true).get();\n    };\n    return Web;\n}(queryableshareable_1.QueryableShareableWeb));\n__decorate([\n    decorators_1.deprecated(\""This method will be removed in future releases. Please use the methods found in queryable securable.\"")\n], Web.prototype, \""doesUserHavePermissions\"", null);\nexports.Web = Web;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/webs.js\n// module id = 7\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar odata_1 = require(\""./odata\"");\nvar util_1 = require(\""../utils/util\"");\nvar exceptions_1 = require(\""../utils/exceptions\"");\nvar webparts_1 = require(\""./webparts\"");\nvar items_1 = require(\""./items\"");\nvar queryableshareable_1 = require(\""./queryableshareable\"");\nvar odata_2 = require(\""./odata\"");\n/**\n * Describes a collection of File objects\n *\n */\nvar Files = (function (_super) {\n    __extends(Files, _super);\n    /**\n     * Creates a new instance of the Files class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Files(baseUrl, path) {\n        if (path === void 0) { path = \""files\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a File by filename\n     *\n     * @param name The name of the file, including extension.\n     */\n    Files.prototype.getByName = function (name) {\n        var f = new File(this);\n        f.concat(\""('\"" + name + \""')\"");\n        return f;\n    };\n    /**\n     * Uploads a file. Not supported for batching\n     *\n     * @param url The folder-relative url of the file.\n     * @param content The file contents blob.\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true)\n     * @returns The new File and the raw response.\n     */\n    Files.prototype.add = function (url, content, shouldOverWrite) {\n        var _this = this;\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\n        return new Files(this, \""add(overwrite=\"" + shouldOverWrite + \"",url='\"" + url + \""')\"")\n            .post({\n            body: content,\n        }).then(function (response) {\n            return {\n                data: response,\n                file: _this.getByName(url),\n            };\n        });\n    };\n    /**\n     * Uploads a file. Not supported for batching\n     *\n     * @param url The folder-relative url of the file.\n     * @param content The Blob file content to add\n     * @param progress A callback function which can be used to track the progress of the upload\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true)\n     * @param chunkSize The size of each file slice, in bytes (default: 10485760)\n     * @returns The new File and the raw response.\n     */\n    Files.prototype.addChunked = function (url, content, progress, shouldOverWrite, chunkSize) {\n        var _this = this;\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\n        if (chunkSize === void 0) { chunkSize = 10485760; }\n        var adder = this.clone(Files, \""add(overwrite=\"" + shouldOverWrite + \"",url='\"" + url + \""')\"");\n        return adder.post().then(function () { return _this.getByName(url); }).then(function (file) { return file.setContentChunked(content, progress, chunkSize); }).then(function (response) {\n            return {\n                data: response,\n                file: _this.getByName(url),\n            };\n        });\n    };\n    /**\n     * Adds a ghosted file to an existing list or document library. Not supported for batching.\n     *\n     * @param fileUrl The server-relative url where you want to save the file.\n     * @param templateFileType The type of use to create the file.\n     * @returns The template file that was added and the raw response.\n     */\n    Files.prototype.addTemplateFile = function (fileUrl, templateFileType) {\n        var _this = this;\n        return this.clone(Files, \""addTemplateFile(urloffile='\"" + fileUrl + \""',templatefiletype=\"" + templateFileType + \"")\"")\n            .post().then(function (response) {\n            return {\n                data: response,\n                file: _this.getByName(fileUrl),\n            };\n        });\n    };\n    return Files;\n}(queryable_1.QueryableCollection));\nexports.Files = Files;\n/**\n * Describes a single File instance\n *\n */\nvar File = (function (_super) {\n    __extends(File, _super);\n    function File() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(File.prototype, \""listItemAllFields\"", {\n        /**\n         * Gets a value that specifies the list item field values for the list item corresponding to the file.\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""listItemAllFields\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(File.prototype, \""versions\"", {\n        /**\n         * Gets a collection of versions\n         *\n         */\n        get: function () {\n            return new Versions(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Approves the file submitted for content approval with the specified comment.\n     * Only documents in lists that are enabled for content approval can be approved.\n     *\n     * @param comment The comment for the approval.\n     */\n    File.prototype.approve = function (comment) {\n        return this.clone(File, \""approve(comment='\"" + comment + \""')\"", true).post();\n    };\n    /**\n     * Stops the chunk upload session without saving the uploaded data. Does not support batching.\n     * If the file doesn’t already exist in the library, the partially uploaded file will be deleted.\n     * Use this in response to user action (as in a request to cancel an upload) or an error or exception.\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\n     * This method is currently available only on Office 365.\n     *\n     * @param uploadId The unique identifier of the upload session.\n     */\n    File.prototype.cancelUpload = function (uploadId) {\n        return this.clone(File, \""cancelUpload(uploadId=guid'\"" + uploadId + \""')\"", false).post();\n    };\n    /**\n     * Checks the file in to a document library based on the check-in type.\n     *\n     * @param comment A comment for the check-in. Its length must be <= 1023.\n     * @param checkinType The check-in type for the file.\n     */\n    File.prototype.checkin = function (comment, checkinType) {\n        if (comment === void 0) { comment = \""\""; }\n        if (checkinType === void 0) { checkinType = CheckinType.Major; }\n        if (comment.length > 1023) {\n            throw new exceptions_1.MaxCommentLengthException();\n        }\n        return this.clone(File, \""checkin(comment='\"" + comment + \""',checkintype=\"" + checkinType + \"")\"", true).post();\n    };\n    /**\n     * Checks out the file from a document library.\n     */\n    File.prototype.checkout = function () {\n        return this.clone(File, \""checkout\"", true).post();\n    };\n    /**\n     * Copies the file to the destination url.\n     *\n     * @param url The absolute url or server relative url of the destination file path to copy to.\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten?\n     */\n    File.prototype.copyTo = function (url, shouldOverWrite) {\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\n        return this.clone(File, \""copyTo(strnewurl='\"" + url + \""',boverwrite=\"" + shouldOverWrite + \"")\"", true).post();\n    };\n    /**\n     * Delete this file.\n     *\n     * @param eTag Value used in the IF-Match header, by default \""*\""\n     */\n    File.prototype.delete = function (eTag) {\n        if (eTag === void 0) { eTag = \""*\""; }\n        return this.clone(File, null, true).post({\n            headers: {\n                \""IF-Match\"": eTag,\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    /**\n     * Denies approval for a file that was submitted for content approval.\n     * Only documents in lists that are enabled for content approval can be denied.\n     *\n     * @param comment The comment for the denial.\n     */\n    File.prototype.deny = function (comment) {\n        if (comment === void 0) { comment = \""\""; }\n        if (comment.length > 1023) {\n            throw new exceptions_1.MaxCommentLengthException();\n        }\n        return this.clone(File, \""deny(comment='\"" + comment + \""')\"", true).post();\n    };\n    /**\n     * Specifies the control set used to access, modify, or add Web Parts associated with this Web Part Page and view.\n     * An exception is thrown if the file is not an ASPX page.\n     *\n     * @param scope The WebPartsPersonalizationScope view on the Web Parts page.\n     */\n    File.prototype.getLimitedWebPartManager = function (scope) {\n        if (scope === void 0) { scope = WebPartsPersonalizationScope.Shared; }\n        return new webparts_1.LimitedWebPartManager(this, \""getLimitedWebPartManager(scope=\"" + scope + \"")\"");\n    };\n    /**\n     * Moves the file to the specified destination url.\n     *\n     * @param url The absolute url or server relative url of the destination file path to move to.\n     * @param moveOperations The bitwise MoveOperations value for how to move the file.\n     */\n    File.prototype.moveTo = function (url, moveOperations) {\n        if (moveOperations === void 0) { moveOperations = MoveOperations.Overwrite; }\n        return this.clone(File, \""moveTo(newurl='\"" + url + \""',flags=\"" + moveOperations + \"")\"", true).post();\n    };\n    /**\n     * Submits the file for content approval with the specified comment.\n     *\n     * @param comment The comment for the published file. Its length must be <= 1023.\n     */\n    File.prototype.publish = function (comment) {\n        if (comment === void 0) { comment = \""\""; }\n        if (comment.length > 1023) {\n            throw new exceptions_1.MaxCommentLengthException();\n        }\n        return this.clone(File, \""publish(comment='\"" + comment + \""')\"", true).post();\n    };\n    /**\n     * Moves the file to the Recycle Bin and returns the identifier of the new Recycle Bin item.\n     *\n     * @returns The GUID of the recycled file.\n     */\n    File.prototype.recycle = function () {\n        return this.clone(File, \""recycle\"", true).post();\n    };\n    /**\n     * Reverts an existing checkout for the file.\n     *\n     */\n    File.prototype.undoCheckout = function () {\n        return this.clone(File, \""undoCheckout\"", true).post();\n    };\n    /**\n     * Removes the file from content approval or unpublish a major version.\n     *\n     * @param comment The comment for the unpublish operation. Its length must be <= 1023.\n     */\n    File.prototype.unpublish = function (comment) {\n        if (comment === void 0) { comment = \""\""; }\n        if (comment.length > 1023) {\n            throw new exceptions_1.MaxCommentLengthException();\n        }\n        return this.clone(File, \""unpublish(comment='\"" + comment + \""')\"", true).post();\n    };\n    /**\n     * Gets the contents of the file as text. Not supported in batching.\n     *\n     */\n    File.prototype.getText = function () {\n        return this.clone(File, \""$value\"").get(new odata_1.TextFileParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\n    };\n    /**\n     * Gets the contents of the file as a blob, does not work in Node.js. Not supported in batching.\n     *\n     */\n    File.prototype.getBlob = function () {\n        return this.clone(File, \""$value\"").get(new odata_1.BlobFileParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\n    };\n    /**\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js. Not supported in batching.\n     */\n    File.prototype.getBuffer = function () {\n        return this.clone(File, \""$value\"").get(new odata_1.BufferFileParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\n    };\n    /**\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js. Not supported in batching.\n     */\n    File.prototype.getJSON = function () {\n        return this.clone(File, \""$value\"").get(new odata_1.JSONFileParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\n    };\n    /**\n     * Sets the content of a file, for large files use setContentChunked. Not supported in batching.\n     *\n     * @param content The file content\n     *\n     */\n    File.prototype.setContent = function (content) {\n        var _this = this;\n        return this.clone(File, \""$value\"").post({\n            body: content,\n            headers: {\n                \""X-HTTP-Method\"": \""PUT\"",\n            },\n        }).then(function (_) { return new File(_this); });\n    };\n    /**\n     * Gets the associated list item for this folder, loading the default properties\n     */\n    File.prototype.getItem = function () {\n        var selects = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            selects[_i] = arguments[_i];\n        }\n        var q = this.listItemAllFields;\n        return q.select.apply(q, selects).get().then(function (d) {\n            return util_1.Util.extend(new items_1.Item(odata_2.getEntityUrl(d)), d);\n        });\n    };\n    /**\n     * Sets the contents of a file using a chunked upload approach. Not supported in batching.\n     *\n     * @param file The file to upload\n     * @param progress A callback function which can be used to track the progress of the upload\n     * @param chunkSize The size of each file slice, in bytes (default: 10485760)\n     */\n    File.prototype.setContentChunked = function (file, progress, chunkSize) {\n        if (chunkSize === void 0) { chunkSize = 10485760; }\n        if (typeof progress === \""undefined\"") {\n            progress = function () { return null; };\n        }\n        var self = this;\n        var fileSize = file.size;\n        var blockCount = parseInt((file.size / chunkSize).toString(), 10) + ((file.size % chunkSize === 0) ? 1 : 0);\n        var uploadId = util_1.Util.getGUID();\n        // start the chain with the first fragment\n        progress({ blockNumber: 1, chunkSize: chunkSize, currentPointer: 0, fileSize: fileSize, stage: \""starting\"", totalBlocks: blockCount });\n        var chain = self.startUpload(uploadId, file.slice(0, chunkSize));\n        var _loop_1 = function (i) {\n            chain = chain.then(function (pointer) {\n                progress({ blockNumber: i, chunkSize: chunkSize, currentPointer: pointer, fileSize: fileSize, stage: \""continue\"", totalBlocks: blockCount });\n                return self.continueUpload(uploadId, pointer, file.slice(pointer, pointer + chunkSize));\n            });\n        };\n        // skip the first and last blocks\n        for (var i = 2; i < blockCount; i++) {\n            _loop_1(i);\n        }\n        return chain.then(function (pointer) {\n            progress({ blockNumber: blockCount, chunkSize: chunkSize, currentPointer: pointer, fileSize: fileSize, stage: \""finishing\"", totalBlocks: blockCount });\n            return self.finishUpload(uploadId, pointer, file.slice(pointer));\n        }).then(function (_) {\n            return self;\n        });\n    };\n    /**\n     * Starts a new chunk upload session and uploads the first fragment.\n     * The current file content is not changed when this method completes.\n     * The method is idempotent (and therefore does not change the result) as long as you use the same values for uploadId and stream.\n     * The upload session ends either when you use the CancelUpload method or when you successfully\n     * complete the upload session by passing the rest of the file contents through the ContinueUpload and FinishUpload methods.\n     * The StartUpload and ContinueUpload methods return the size of the running total of uploaded data in bytes,\n     * so you can pass those return values to subsequent uses of ContinueUpload and FinishUpload.\n     * This method is currently available only on Office 365.\n     *\n     * @param uploadId The unique identifier of the upload session.\n     * @param fragment The file contents.\n     * @returns The size of the total uploaded data in bytes.\n     */\n    File.prototype.startUpload = function (uploadId, fragment) {\n        return this.clone(File, \""startUpload(uploadId=guid'\"" + uploadId + \""')\"").postAs({ body: fragment }).then(function (n) { return parseFloat(n); });\n    };\n    /**\n     * Continues the chunk upload session with an additional fragment.\n     * The current file content is not changed.\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\n     * This method is currently available only on Office 365.\n     *\n     * @param uploadId The unique identifier of the upload session.\n     * @param fileOffset The size of the offset into the file where the fragment starts.\n     * @param fragment The file contents.\n     * @returns The size of the total uploaded data in bytes.\n     */\n    File.prototype.continueUpload = function (uploadId, fileOffset, fragment) {\n        return this.clone(File, \""continueUpload(uploadId=guid'\"" + uploadId + \""',fileOffset=\"" + fileOffset + \"")\"").postAs({ body: fragment }).then(function (n) { return parseFloat(n); });\n    };\n    /**\n     * Uploads the last file fragment and commits the file. The current file content is changed when this method completes.\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\n     * This method is currently available only on Office 365.\n     *\n     * @param uploadId The unique identifier of the upload session.\n     * @param fileOffset The size of the offset into the file where the fragment starts.\n     * @param fragment The file contents.\n     * @returns The newly uploaded file.\n     */\n    File.prototype.finishUpload = function (uploadId, fileOffset, fragment) {\n        return this.clone(File, \""finishUpload(uploadId=guid'\"" + uploadId + \""',fileOffset=\"" + fileOffset + \"")\"")\n            .postAs({ body: fragment }).then(function (response) {\n            return {\n                data: response,\n                file: new File(response.ServerRelativeUrl),\n            };\n        });\n    };\n    return File;\n}(queryableshareable_1.QueryableShareableFile));\nexports.File = File;\n/**\n * Describes a collection of Version objects\n *\n */\nvar Versions = (function (_super) {\n    __extends(Versions, _super);\n    /**\n     * Creates a new instance of the File class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Versions(baseUrl, path) {\n        if (path === void 0) { path = \""versions\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a version by id\n     *\n     * @param versionId The id of the version to retrieve\n     */\n    Versions.prototype.getById = function (versionId) {\n        var v = new Version(this);\n        v.concat(\""(\"" + versionId + \"")\"");\n        return v;\n    };\n    /**\n     * Deletes all the file version objects in the collection.\n     *\n     */\n    Versions.prototype.deleteAll = function () {\n        return new Versions(this, \""deleteAll\"").post();\n    };\n    /**\n     * Deletes the specified version of the file.\n     *\n     * @param versionId The ID of the file version to delete.\n     */\n    Versions.prototype.deleteById = function (versionId) {\n        return this.clone(Versions, \""deleteById(vid=\"" + versionId + \"")\"", true).post();\n    };\n    /**\n     * Deletes the file version object with the specified version label.\n     *\n     * @param label The version label of the file version to delete, for example: 1.2\n     */\n    Versions.prototype.deleteByLabel = function (label) {\n        return this.clone(Versions, \""deleteByLabel(versionlabel='\"" + label + \""')\"", true).post();\n    };\n    /**\n     * Creates a new file version from the file specified by the version label.\n     *\n     * @param label The version label of the file version to restore, for example: 1.2\n     */\n    Versions.prototype.restoreByLabel = function (label) {\n        return this.clone(Versions, \""restoreByLabel(versionlabel='\"" + label + \""')\"", true).post();\n    };\n    return Versions;\n}(queryable_1.QueryableCollection));\nexports.Versions = Versions;\n/**\n * Describes a single Version instance\n *\n */\nvar Version = (function (_super) {\n    __extends(Version, _super);\n    function Version() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n    * Delete a specific version of a file.\n    *\n    * @param eTag Value used in the IF-Match header, by default \""*\""\n    */\n    Version.prototype.delete = function (eTag) {\n        if (eTag === void 0) { eTag = \""*\""; }\n        return this.post({\n            headers: {\n                \""IF-Match\"": eTag,\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    return Version;\n}(queryable_1.QueryableInstance));\nexports.Version = Version;\nvar CheckinType;\n(function (CheckinType) {\n    CheckinType[CheckinType[\""Minor\""] = 0] = \""Minor\"";\n    CheckinType[CheckinType[\""Major\""] = 1] = \""Major\"";\n    CheckinType[CheckinType[\""Overwrite\""] = 2] = \""Overwrite\"";\n})(CheckinType = exports.CheckinType || (exports.CheckinType = {}));\nvar WebPartsPersonalizationScope;\n(function (WebPartsPersonalizationScope) {\n    WebPartsPersonalizationScope[WebPartsPersonalizationScope[\""User\""] = 0] = \""User\"";\n    WebPartsPersonalizationScope[WebPartsPersonalizationScope[\""Shared\""] = 1] = \""Shared\"";\n})(WebPartsPersonalizationScope = exports.WebPartsPersonalizationScope || (exports.WebPartsPersonalizationScope = {}));\nvar MoveOperations;\n(function (MoveOperations) {\n    MoveOperations[MoveOperations[\""Overwrite\""] = 1] = \""Overwrite\"";\n    MoveOperations[MoveOperations[\""AllowBrokenThickets\""] = 8] = \""AllowBrokenThickets\"";\n})(MoveOperations = exports.MoveOperations || (exports.MoveOperations = {}));\nvar TemplateFileType;\n(function (TemplateFileType) {\n    TemplateFileType[TemplateFileType[\""StandardPage\""] = 0] = \""StandardPage\"";\n    TemplateFileType[TemplateFileType[\""WikiPage\""] = 1] = \""WikiPage\"";\n    TemplateFileType[TemplateFileType[\""FormPage\""] = 2] = \""FormPage\"";\n})(TemplateFileType = exports.TemplateFileType || (exports.TemplateFileType = {}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/files.js\n// module id = 8\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar queryableshareable_1 = require(\""./queryableshareable\"");\nvar files_1 = require(\""./files\"");\nvar util_1 = require(\""../utils/util\"");\nvar odata_1 = require(\""./odata\"");\nvar items_1 = require(\""./items\"");\n/**\n * Describes a collection of Folder objects\n *\n */\nvar Folders = (function (_super) {\n    __extends(Folders, _super);\n    /**\n     * Creates a new instance of the Folders class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Folders(baseUrl, path) {\n        if (path === void 0) { path = \""folders\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a folder by folder name\n     *\n     */\n    Folders.prototype.getByName = function (name) {\n        var f = new Folder(this);\n        f.concat(\""('\"" + name + \""')\"");\n        return f;\n    };\n    /**\n     * Adds a new folder to the current folder (relative) or any folder (absolute)\n     *\n     * @param url The relative or absolute url where the new folder will be created. Urls starting with a forward slash are absolute.\n     * @returns The new Folder and the raw response.\n     */\n    Folders.prototype.add = function (url) {\n        var _this = this;\n        return this.clone(Folders, \""add('\"" + url + \""')\"", true).post().then(function (response) {\n            return {\n                data: response,\n                folder: _this.getByName(url),\n            };\n        });\n    };\n    return Folders;\n}(queryable_1.QueryableCollection));\nexports.Folders = Folders;\n/**\n * Describes a single Folder instance\n *\n */\nvar Folder = (function (_super) {\n    __extends(Folder, _super);\n    function Folder() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(Folder.prototype, \""contentTypeOrder\"", {\n        /**\n         * Specifies the sequence in which content types are displayed.\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""contentTypeOrder\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Folder.prototype, \""files\"", {\n        /**\n         * Gets this folder's files\n         *\n         */\n        get: function () {\n            return new files_1.Files(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Folder.prototype, \""folders\"", {\n        /**\n         * Gets this folder's sub folders\n         *\n         */\n        get: function () {\n            return new Folders(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Folder.prototype, \""listItemAllFields\"", {\n        /**\n         * Gets this folder's list item field values\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""listItemAllFields\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Folder.prototype, \""parentFolder\"", {\n        /**\n         * Gets the parent folder, if available\n         *\n         */\n        get: function () {\n            return new Folder(this, \""parentFolder\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Folder.prototype, \""properties\"", {\n        /**\n         * Gets this folder's properties\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableInstance(this, \""properties\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Folder.prototype, \""serverRelativeUrl\"", {\n        /**\n         * Gets this folder's server relative url\n         *\n         */\n        get: function () {\n            return new queryable_1.Queryable(this, \""serverRelativeUrl\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Folder.prototype, \""uniqueContentTypeOrder\"", {\n        /**\n         * Gets a value that specifies the content type order.\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""uniqueContentTypeOrder\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Folder.prototype.update = function (properties) {\n        var _this = this;\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""__metadata\"": { \""type\"": \""SP.Folder\"" },\n        }, properties));\n        return this.post({\n            body: postBody,\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            return {\n                data: data,\n                folder: _this,\n            };\n        });\n    };\n    /**\n    * Delete this folder\n    *\n    * @param eTag Value used in the IF-Match header, by default \""*\""\n    */\n    Folder.prototype.delete = function (eTag) {\n        if (eTag === void 0) { eTag = \""*\""; }\n        return this.clone(Folder, null, true).post({\n            headers: {\n                \""IF-Match\"": eTag,\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    /**\n     * Moves the folder to the Recycle Bin and returns the identifier of the new Recycle Bin item.\n     */\n    Folder.prototype.recycle = function () {\n        return this.clone(Folder, \""recycle\"", true).post();\n    };\n    /**\n     * Gets the associated list item for this folder, loading the default properties\n     */\n    Folder.prototype.getItem = function () {\n        var selects = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            selects[_i] = arguments[_i];\n        }\n        var q = this.listItemAllFields;\n        return q.select.apply(q, selects).get().then(function (d) {\n            return util_1.Util.extend(new items_1.Item(odata_1.getEntityUrl(d)), d);\n        });\n    };\n    return Folder;\n}(queryableshareable_1.QueryableShareableFolder));\nexports.Folder = Folder;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/folders.js\n// module id = 9\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar queryableshareable_1 = require(\""./queryableshareable\"");\nvar folders_1 = require(\""./folders\"");\nvar files_1 = require(\""./files\"");\nvar contenttypes_1 = require(\""./contenttypes\"");\nvar util_1 = require(\""../utils/util\"");\nvar odata_1 = require(\""./odata\"");\nvar attachmentfiles_1 = require(\""./attachmentfiles\"");\nvar lists_1 = require(\""./lists\"");\n/**\n * Describes a collection of Item objects\n *\n */\nvar Items = (function (_super) {\n    __extends(Items, _super);\n    /**\n     * Creates a new instance of the Items class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Items(baseUrl, path) {\n        if (path === void 0) { path = \""items\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets an Item by id\n     *\n     * @param id The integer id of the item to retrieve\n     */\n    Items.prototype.getById = function (id) {\n        var i = new Item(this);\n        i.concat(\""(\"" + id + \"")\"");\n        return i;\n    };\n    /**\n     * Skips the specified number of items (https://msdn.microsoft.com/en-us/library/office/fp142385.aspx#sectionSection6)\n     *\n     * @param skip The starting id where the page should start, use with top to specify pages\n     */\n    Items.prototype.skip = function (skip) {\n        this._query.add(\""$skiptoken\"", encodeURIComponent(\""Paged=TRUE&p_ID=\"" + skip));\n        return this;\n    };\n    /**\n     * Gets a collection designed to aid in paging through data\n     *\n     */\n    Items.prototype.getPaged = function () {\n        return this.getAs(new PagedItemCollectionParser());\n    };\n    //\n    /**\n     * Adds a new item to the collection\n     *\n     * @param properties The new items's properties\n     */\n    Items.prototype.add = function (properties, listItemEntityTypeFullName) {\n        var _this = this;\n        if (properties === void 0) { properties = {}; }\n        if (listItemEntityTypeFullName === void 0) { listItemEntityTypeFullName = null; }\n        var removeDependency = this.addBatchDependency();\n        return this.ensureListItemEntityTypeName(listItemEntityTypeFullName).then(function (listItemEntityType) {\n            var postBody = JSON.stringify(util_1.Util.extend({\n                \""__metadata\"": { \""type\"": listItemEntityType },\n            }, properties));\n            var promise = _this.clone(Items, null, true).postAs({ body: postBody }).then(function (data) {\n                return {\n                    data: data,\n                    item: _this.getById(data.Id),\n                };\n            });\n            removeDependency();\n            return promise;\n        });\n    };\n    /**\n     * Ensures we have the proper list item entity type name, either from the value provided or from the list\n     *\n     * @param candidatelistItemEntityTypeFullName The potential type name\n     */\n    Items.prototype.ensureListItemEntityTypeName = function (candidatelistItemEntityTypeFullName) {\n        return candidatelistItemEntityTypeFullName ?\n            Promise.resolve(candidatelistItemEntityTypeFullName) :\n            this.getParent(lists_1.List).getListItemEntityTypeFullName();\n    };\n    return Items;\n}(queryable_1.QueryableCollection));\nexports.Items = Items;\n/**\n * Descrines a single Item instance\n *\n */\nvar Item = (function (_super) {\n    __extends(Item, _super);\n    function Item() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(Item.prototype, \""attachmentFiles\"", {\n        /**\n         * Gets the set of attachments for this item\n         *\n         */\n        get: function () {\n            return new attachmentfiles_1.AttachmentFiles(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Item.prototype, \""contentType\"", {\n        /**\n         * Gets the content type for this item\n         *\n         */\n        get: function () {\n            return new contenttypes_1.ContentType(this, \""ContentType\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Item.prototype, \""effectiveBasePermissions\"", {\n        /**\n         * Gets the effective base permissions for the item\n         *\n         */\n        get: function () {\n            return new queryable_1.Queryable(this, \""EffectiveBasePermissions\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Item.prototype, \""effectiveBasePermissionsForUI\"", {\n        /**\n         * Gets the effective base permissions for the item in a UI context\n         *\n         */\n        get: function () {\n            return new queryable_1.Queryable(this, \""EffectiveBasePermissionsForUI\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Item.prototype, \""fieldValuesAsHTML\"", {\n        /**\n         * Gets the field values for this list item in their HTML representation\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableInstance(this, \""FieldValuesAsHTML\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Item.prototype, \""fieldValuesAsText\"", {\n        /**\n         * Gets the field values for this list item in their text representation\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableInstance(this, \""FieldValuesAsText\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Item.prototype, \""fieldValuesForEdit\"", {\n        /**\n         * Gets the field values for this list item for use in editing controls\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableInstance(this, \""FieldValuesForEdit\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Item.prototype, \""folder\"", {\n        /**\n         * Gets the folder associated with this list item (if this item represents a folder)\n         *\n         */\n        get: function () {\n            return new folders_1.Folder(this, \""folder\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Item.prototype, \""file\"", {\n        /**\n         * Gets the folder associated with this list item (if this item represents a folder)\n         *\n         */\n        get: function () {\n            return new files_1.File(this, \""file\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Updates this list intance with the supplied properties\n     *\n     * @param properties A plain object hash of values to update for the list\n     * @param eTag Value used in the IF-Match header, by default \""*\""\n     */\n    Item.prototype.update = function (properties, eTag) {\n        var _this = this;\n        if (eTag === void 0) { eTag = \""*\""; }\n        return new Promise(function (resolve, reject) {\n            var removeDependency = _this.addBatchDependency();\n            var parentList = _this.getParent(queryable_1.QueryableInstance, _this.parentUrl.substr(0, _this.parentUrl.lastIndexOf(\""/\"")));\n            parentList.select(\""ListItemEntityTypeFullName\"").getAs().then(function (d) {\n                var postBody = JSON.stringify(util_1.Util.extend({\n                    \""__metadata\"": { \""type\"": d.ListItemEntityTypeFullName },\n                }, properties));\n                removeDependency();\n                return _this.post({\n                    body: postBody,\n                    headers: {\n                        \""IF-Match\"": eTag,\n                        \""X-HTTP-Method\"": \""MERGE\"",\n                    },\n                }, new ItemUpdatedParser()).then(function (data) {\n                    resolve({\n                        data: data,\n                        item: _this,\n                    });\n                });\n            }).catch(function (e) { return reject(e); });\n        });\n    };\n    /**\n     * Delete this item\n     *\n     * @param eTag Value used in the IF-Match header, by default \""*\""\n     */\n    Item.prototype.delete = function (eTag) {\n        if (eTag === void 0) { eTag = \""*\""; }\n        return this.post({\n            headers: {\n                \""IF-Match\"": eTag,\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    /**\n     * Moves the list item to the Recycle Bin and returns the identifier of the new Recycle Bin item.\n     */\n    Item.prototype.recycle = function () {\n        return this.clone(Item, \""recycle\"", true).post();\n    };\n    /**\n     * Gets a string representation of the full URL to the WOPI frame.\n     * If there is no associated WOPI application, or no associated action, an empty string is returned.\n     *\n     * @param action Display mode: 0: view, 1: edit, 2: mobileView, 3: interactivePreview\n     */\n    Item.prototype.getWopiFrameUrl = function (action) {\n        if (action === void 0) { action = 0; }\n        var i = this.clone(Item, \""getWOPIFrameUrl(@action)\"", true);\n        i._query.add(\""@action\"", action);\n        return i.post().then(function (data) {\n            return data.GetWOPIFrameUrl;\n        });\n    };\n    /**\n     * Validates and sets the values of the specified collection of fields for the list item.\n     *\n     * @param formValues The fields to change and their new values.\n     * @param newDocumentUpdate true if the list item is a document being updated after upload; otherwise false.\n     */\n    Item.prototype.validateUpdateListItem = function (formValues, newDocumentUpdate) {\n        if (newDocumentUpdate === void 0) { newDocumentUpdate = false; }\n        return this.clone(Item, \""validateupdatelistitem\"", true).post({\n            body: JSON.stringify({ \""formValues\"": formValues, bNewDocumentUpdate: newDocumentUpdate }),\n        });\n    };\n    return Item;\n}(queryableshareable_1.QueryableShareableItem));\nexports.Item = Item;\n/**\n * Provides paging functionality for list items\n */\nvar PagedItemCollection = (function () {\n    function PagedItemCollection(nextUrl, results) {\n        this.nextUrl = nextUrl;\n        this.results = results;\n    }\n    Object.defineProperty(PagedItemCollection.prototype, \""hasNext\"", {\n        /**\n         * If true there are more results available in the set, otherwise there are not\n         */\n        get: function () {\n            return typeof this.nextUrl === \""string\"" && this.nextUrl.length > 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Gets the next set of results, or resolves to null if no results are available\n     */\n    PagedItemCollection.prototype.getNext = function () {\n        if (this.hasNext) {\n            var items = new Items(this.nextUrl, null);\n            return items.getPaged();\n        }\n        return new Promise(function (r) { return r(null); });\n    };\n    return PagedItemCollection;\n}());\nexports.PagedItemCollection = PagedItemCollection;\nvar PagedItemCollectionParser = (function (_super) {\n    __extends(PagedItemCollectionParser, _super);\n    function PagedItemCollectionParser() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PagedItemCollectionParser.prototype.parse = function (r) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            if (_this.handleError(r, reject)) {\n                r.json().then(function (json) {\n                    var nextUrl = json.hasOwnProperty(\""d\"") && json.d.hasOwnProperty(\""__next\"") ? json.d.__next : json[\""odata.nextLink\""];\n                    resolve(new PagedItemCollection(nextUrl, _this.parseODataJSON(json)));\n                });\n            }\n        });\n    };\n    return PagedItemCollectionParser;\n}(odata_1.ODataParserBase));\nvar ItemUpdatedParser = (function (_super) {\n    __extends(ItemUpdatedParser, _super);\n    function ItemUpdatedParser() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ItemUpdatedParser.prototype.parse = function (r) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            if (_this.handleError(r, reject)) {\n                resolve({\n                    \""odata.etag\"": r.headers.get(\""etag\""),\n                });\n            }\n        });\n    };\n    return ItemUpdatedParser;\n}(odata_1.ODataParserBase));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/items.js\n// module id = 10\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar items_1 = require(\""./items\"");\nvar views_1 = require(\""./views\"");\nvar contenttypes_1 = require(\""./contenttypes\"");\nvar fields_1 = require(\""./fields\"");\nvar forms_1 = require(\""./forms\"");\nvar subscriptions_1 = require(\""./subscriptions\"");\nvar queryable_1 = require(\""./queryable\"");\nvar queryablesecurable_1 = require(\""./queryablesecurable\"");\nvar util_1 = require(\""../utils/util\"");\nvar usercustomactions_1 = require(\""./usercustomactions\"");\nvar odata_1 = require(\""./odata\"");\nvar exceptions_1 = require(\""../utils/exceptions\"");\nvar folders_1 = require(\""./folders\"");\n/**\n * Describes a collection of List objects\n *\n */\nvar Lists = (function (_super) {\n    __extends(Lists, _super);\n    /**\n     * Creates a new instance of the Lists class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Lists(baseUrl, path) {\n        if (path === void 0) { path = \""lists\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a list from the collection by title\n     *\n     * @param title The title of the list\n     */\n    Lists.prototype.getByTitle = function (title) {\n        return new List(this, \""getByTitle('\"" + title + \""')\"");\n    };\n    /**\n     * Gets a list from the collection by guid id\n     *\n     * @param id The Id of the list (GUID)\n     */\n    Lists.prototype.getById = function (id) {\n        var list = new List(this);\n        list.concat(\""('\"" + id + \""')\"");\n        return list;\n    };\n    /**\n     * Adds a new list to the collection\n     *\n     * @param title The new list's title\n     * @param description The new list's description\n     * @param template The list template value\n     * @param enableContentTypes If true content types will be allowed and enabled, otherwise they will be disallowed and not enabled\n     * @param additionalSettings Will be passed as part of the list creation body\n     */\n    Lists.prototype.add = function (title, description, template, enableContentTypes, additionalSettings) {\n        var _this = this;\n        if (description === void 0) { description = \""\""; }\n        if (template === void 0) { template = 100; }\n        if (enableContentTypes === void 0) { enableContentTypes = false; }\n        if (additionalSettings === void 0) { additionalSettings = {}; }\n        var addSettings = util_1.Util.extend({\n            \""AllowContentTypes\"": enableContentTypes,\n            \""BaseTemplate\"": template,\n            \""ContentTypesEnabled\"": enableContentTypes,\n            \""Description\"": description,\n            \""Title\"": title,\n            \""__metadata\"": { \""type\"": \""SP.List\"" },\n        }, additionalSettings);\n        return this.post({ body: JSON.stringify(addSettings) }).then(function (data) {\n            return { data: data, list: _this.getByTitle(addSettings.Title) };\n        });\n    };\n    /**\n     * Ensures that the specified list exists in the collection (note: this method not supported for batching)\n     *\n     * @param title The new list's title\n     * @param description The new list's description\n     * @param template The list template value\n     * @param enableContentTypes If true content types will be allowed and enabled, otherwise they will be disallowed and not enabled\n     * @param additionalSettings Will be passed as part of the list creation body or used to update an existing list\n     */\n    Lists.prototype.ensure = function (title, description, template, enableContentTypes, additionalSettings) {\n        var _this = this;\n        if (description === void 0) { description = \""\""; }\n        if (template === void 0) { template = 100; }\n        if (enableContentTypes === void 0) { enableContentTypes = false; }\n        if (additionalSettings === void 0) { additionalSettings = {}; }\n        if (this.hasBatch) {\n            throw new exceptions_1.NotSupportedInBatchException(\""The ensure list method\"");\n        }\n        return new Promise(function (resolve, reject) {\n            var addOrUpdateSettings = util_1.Util.extend(additionalSettings, { Title: title, Description: description, ContentTypesEnabled: enableContentTypes }, true);\n            var list = _this.getByTitle(addOrUpdateSettings.Title);\n            list.get().then(function (_) {\n                list.update(addOrUpdateSettings).then(function (d) {\n                    resolve({ created: false, data: d, list: _this.getByTitle(addOrUpdateSettings.Title) });\n                }).catch(function (e) { return reject(e); });\n            }).catch(function (_) {\n                _this.add(title, description, template, enableContentTypes, addOrUpdateSettings).then(function (r) {\n                    resolve({ created: true, data: r.data, list: _this.getByTitle(addOrUpdateSettings.Title) });\n                }).catch(function (e) { return reject(e); });\n            });\n        });\n    };\n    /**\n     * Gets a list that is the default asset location for images or other files, which the users upload to their wiki pages.\n     */\n    Lists.prototype.ensureSiteAssetsLibrary = function () {\n        return this.clone(Lists, \""ensuresiteassetslibrary\"", true).post().then(function (json) {\n            return new List(odata_1.extractOdataId(json));\n        });\n    };\n    /**\n     * Gets a list that is the default location for wiki pages.\n     */\n    Lists.prototype.ensureSitePagesLibrary = function () {\n        return this.clone(Lists, \""ensuresitepageslibrary\"", true).post().then(function (json) {\n            return new List(odata_1.extractOdataId(json));\n        });\n    };\n    return Lists;\n}(queryable_1.QueryableCollection));\nexports.Lists = Lists;\n/**\n * Describes a single List instance\n *\n */\nvar List = (function (_super) {\n    __extends(List, _super);\n    function List() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(List.prototype, \""contentTypes\"", {\n        /**\n         * Gets the content types in this list\n         *\n         */\n        get: function () {\n            return new contenttypes_1.ContentTypes(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""items\"", {\n        /**\n         * Gets the items in this list\n         *\n         */\n        get: function () {\n            return new items_1.Items(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""views\"", {\n        /**\n         * Gets the views in this list\n         *\n         */\n        get: function () {\n            return new views_1.Views(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""fields\"", {\n        /**\n         * Gets the fields in this list\n         *\n         */\n        get: function () {\n            return new fields_1.Fields(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""forms\"", {\n        /**\n         * Gets the forms in this list\n         *\n         */\n        get: function () {\n            return new forms_1.Forms(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""defaultView\"", {\n        /**\n         * Gets the default view of this list\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableInstance(this, \""DefaultView\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""userCustomActions\"", {\n        /**\n         * Get all custom actions on a site collection\n         *\n         */\n        get: function () {\n            return new usercustomactions_1.UserCustomActions(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""effectiveBasePermissions\"", {\n        /**\n         * Gets the effective base permissions of this list\n         *\n         */\n        get: function () {\n            return new queryable_1.Queryable(this, \""EffectiveBasePermissions\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""eventReceivers\"", {\n        /**\n         * Gets the event receivers attached to this list\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""EventReceivers\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""relatedFields\"", {\n        /**\n         * Gets the related fields of this list\n         *\n         */\n        get: function () {\n            return new queryable_1.Queryable(this, \""getRelatedFields\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""informationRightsManagementSettings\"", {\n        /**\n         * Gets the IRM settings for this list\n         *\n         */\n        get: function () {\n            return new queryable_1.Queryable(this, \""InformationRightsManagementSettings\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""subscriptions\"", {\n        /**\n         * Gets the webhook subscriptions of this list\n         *\n         */\n        get: function () {\n            return new subscriptions_1.Subscriptions(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \""rootFolder\"", {\n        /**\n         * The root folder of the list\n         */\n        get: function () {\n            return new folders_1.Folder(this, \""rootFolder\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Gets a view by view guid id\n     *\n     */\n    List.prototype.getView = function (viewId) {\n        return new views_1.View(this, \""getView('\"" + viewId + \""')\"");\n    };\n    /**\n     * Updates this list intance with the supplied properties\n     *\n     * @param properties A plain object hash of values to update for the list\n     * @param eTag Value used in the IF-Match header, by default \""*\""\n     */\n    /* tslint:disable no-string-literal */\n    List.prototype.update = function (properties, eTag) {\n        var _this = this;\n        if (eTag === void 0) { eTag = \""*\""; }\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""__metadata\"": { \""type\"": \""SP.List\"" },\n        }, properties));\n        return this.post({\n            body: postBody,\n            headers: {\n                \""IF-Match\"": eTag,\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            var retList = _this;\n            if (properties.hasOwnProperty(\""Title\"")) {\n                retList = _this.getParent(List, _this.parentUrl, \""getByTitle('\"" + properties[\""Title\""] + \""')\"");\n            }\n            return {\n                data: data,\n                list: retList,\n            };\n        });\n    };\n    /* tslint:enable */\n    /**\n     * Delete this list\n     *\n     * @param eTag Value used in the IF-Match header, by default \""*\""\n     */\n    List.prototype.delete = function (eTag) {\n        if (eTag === void 0) { eTag = \""*\""; }\n        return this.post({\n            headers: {\n                \""IF-Match\"": eTag,\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    /**\n     * Returns the collection of changes from the change log that have occurred within the list, based on the specified query.\n     */\n    List.prototype.getChanges = function (query) {\n        return this.clone(List, \""getchanges\"", true).post({\n            body: JSON.stringify({ \""query\"": util_1.Util.extend({ \""__metadata\"": { \""type\"": \""SP.ChangeQuery\"" } }, query) }),\n        });\n    };\n    /**\n     * Returns a collection of items from the list based on the specified query.\n     *\n     * @param CamlQuery The Query schema of Collaborative Application Markup\n     * Language (CAML) is used in various ways within the context of Microsoft SharePoint Foundation\n     * to define queries against list data.\n     * see:\n     *\n     * https://msdn.microsoft.com/en-us/library/office/ms467521.aspx\n     *\n     * @param expands A URI with a $expand System Query Option indicates that Entries associated with\n     * the Entry or Collection of Entries identified by the Resource Path\n     * section of the URI must be represented inline (i.e. eagerly loaded).\n     * see:\n     *\n     * https://msdn.microsoft.com/en-us/library/office/fp142385.aspx\n     *\n     * http://www.odata.org/documentation/odata-version-2-0/uri-conventions/#ExpandSystemQueryOption\n     */\n    List.prototype.getItemsByCAMLQuery = function (query) {\n        var expands = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            expands[_i - 1] = arguments[_i];\n        }\n        var q = this.clone(List, \""getitems\"", true);\n        return q.expand.apply(q, expands).post({\n            body: JSON.stringify({ \""query\"": util_1.Util.extend({ \""__metadata\"": { \""type\"": \""SP.CamlQuery\"" } }, query) }),\n        });\n    };\n    /**\n     * See: https://msdn.microsoft.com/en-us/library/office/dn292554.aspx\n     */\n    List.prototype.getListItemChangesSinceToken = function (query) {\n        return this.clone(List, \""getlistitemchangessincetoken\"", true).post({\n            body: JSON.stringify({ \""query\"": util_1.Util.extend({ \""__metadata\"": { \""type\"": \""SP.ChangeLogItemQuery\"" } }, query) }),\n        }, { parse: function (r) { return r.text(); } });\n    };\n    /**\n     * Moves the list to the Recycle Bin and returns the identifier of the new Recycle Bin item.\n     */\n    List.prototype.recycle = function () {\n        return this.clone(List, \""recycle\"", true).post().then(function (data) {\n            if (data.hasOwnProperty(\""Recycle\"")) {\n                return data.Recycle;\n            }\n            else {\n                return data;\n            }\n        });\n    };\n    /**\n     * Renders list data based on the view xml provided\n     */\n    List.prototype.renderListData = function (viewXml) {\n        var q = this.clone(List, \""renderlistdata(@viewXml)\"");\n        q.query.add(\""@viewXml\"", \""'\"" + viewXml + \""'\"");\n        return q.post().then(function (data) {\n            // data will be a string, so we parse it again\n            data = JSON.parse(data);\n            if (data.hasOwnProperty(\""RenderListData\"")) {\n                return data.RenderListData;\n            }\n            else {\n                return data;\n            }\n        });\n    };\n    /**\n     * Gets the field values and field schema attributes for a list item.\n     */\n    List.prototype.renderListFormData = function (itemId, formId, mode) {\n        return this.clone(List, \""renderlistformdata(itemid=\"" + itemId + \"", formid='\"" + formId + \""', mode='\"" + mode + \""')\"", true).post().then(function (data) {\n            // data will be a string, so we parse it again\n            data = JSON.parse(data);\n            if (data.hasOwnProperty(\""ListData\"")) {\n                return data.ListData;\n            }\n            else {\n                return data;\n            }\n        });\n    };\n    /**\n     * Reserves a list item ID for idempotent list item creation.\n     */\n    List.prototype.reserveListItemId = function () {\n        return this.clone(List, \""reservelistitemid\"", true).post().then(function (data) {\n            if (data.hasOwnProperty(\""ReserveListItemId\"")) {\n                return data.ReserveListItemId;\n            }\n            else {\n                return data;\n            }\n        });\n    };\n    /**\n     * Returns the ListItemEntityTypeFullName for this list, used when adding/updating list items. Does not support batching.\n     *\n     */\n    List.prototype.getListItemEntityTypeFullName = function () {\n        return this.clone(List, null).select(\""ListItemEntityTypeFullName\"").getAs().then(function (o) { return o.ListItemEntityTypeFullName; });\n    };\n    return List;\n}(queryablesecurable_1.QueryableSecurable));\nexports.List = List;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/lists.js\n// module id = 11\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar util_1 = require(\""../utils/util\"");\nvar webs_1 = require(\""./webs\"");\nvar odata_1 = require(\""./odata\"");\nvar queryable_1 = require(\""./queryable\"");\nvar queryablesecurable_1 = require(\""./queryablesecurable\"");\nvar types_1 = require(\""./types\"");\n/**\n * Internal helper class used to augment classes to include sharing functionality\n */\nvar QueryableShareable = (function (_super) {\n    __extends(QueryableShareable, _super);\n    function QueryableShareable() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Gets a sharing link for the supplied\n     *\n     * @param kind The kind of link to share\n     * @param expiration The optional expiration for this link\n     */\n    QueryableShareable.prototype.getShareLink = function (kind, expiration) {\n        if (expiration === void 0) { expiration = null; }\n        // date needs to be an ISO string or null\n        var expString = expiration !== null ? expiration.toISOString() : null;\n        // clone using the factory and send the request\n        return this.clone(QueryableShareable, \""shareLink\"", true).postAs({\n            body: JSON.stringify({\n                request: {\n                    createLink: true,\n                    emailData: null,\n                    settings: {\n                        expiration: expString,\n                        linkKind: kind,\n                    },\n                },\n            }),\n        });\n    };\n    /**\n     * Shares this instance with the supplied users\n     *\n     * @param loginNames Resolved login names to share\n     * @param role The role\n     * @param requireSignin True to require the user is authenticated, otherwise false\n     * @param propagateAcl True to apply this share to all children\n     * @param emailData If supplied an email will be sent with the indicated properties\n     */\n    QueryableShareable.prototype.shareWith = function (loginNames, role, requireSignin, propagateAcl, emailData) {\n        var _this = this;\n        if (requireSignin === void 0) { requireSignin = true; }\n        if (propagateAcl === void 0) { propagateAcl = false; }\n        // handle the multiple input types\n        if (!Array.isArray(loginNames)) {\n            loginNames = [loginNames];\n        }\n        var userStr = JSON.stringify(loginNames.map(function (login) { return { Key: login }; }));\n        var roleFilter = role === types_1.SharingRole.Edit ? types_1.RoleType.Contributor : types_1.RoleType.Reader;\n        // start by looking up the role definition id we need to set the roleValue\n        return webs_1.Web.fromUrl(this.toUrl()).roleDefinitions.select(\""Id\"").filter(\""RoleTypeKind eq \"" + roleFilter).get().then(function (def) {\n            if (!Array.isArray(def) || def.length < 1) {\n                throw new Error(\""Could not locate a role defintion with RoleTypeKind \"" + roleFilter);\n            }\n            var postBody = {\n                includeAnonymousLinkInEmail: requireSignin,\n                peoplePickerInput: userStr,\n                propagateAcl: propagateAcl,\n                roleValue: \""role:\"" + def[0].Id,\n                useSimplifiedRoles: true,\n            };\n            if (typeof emailData !== \""undefined\"") {\n                postBody = util_1.Util.extend(postBody, {\n                    emailBody: emailData.body,\n                    emailSubject: typeof emailData.subject !== \""undefined\"" ? \""\"" : emailData.subject,\n                    sendEmail: true,\n                });\n            }\n            return _this.clone(QueryableShareable, \""shareObject\"", true).postAs({\n                body: JSON.stringify(postBody),\n            });\n        });\n    };\n    /**\n     * Shares an object based on the supplied options\n     *\n     * @param options The set of options to send to the ShareObject method\n     * @param bypass If true any processing is skipped and the options are sent directly to the ShareObject method\n     */\n    QueryableShareable.prototype.shareObject = function (options, bypass) {\n        var _this = this;\n        if (bypass === void 0) { bypass = false; }\n        if (bypass) {\n            // if the bypass flag is set send the supplied parameters directly to the service\n            return this.sendShareObjectRequest(options);\n        }\n        // extend our options with some defaults\n        options = util_1.Util.extend(options, {\n            group: null,\n            includeAnonymousLinkInEmail: false,\n            propagateAcl: false,\n            useSimplifiedRoles: true,\n        }, true);\n        return this.getRoleValue(options.role, options.group).then(function (roleValue) {\n            // handle the multiple input types\n            if (!Array.isArray(options.loginNames)) {\n                options.loginNames = [options.loginNames];\n            }\n            var userStr = JSON.stringify(options.loginNames.map(function (login) { return { Key: login }; }));\n            var postBody = {\n                peoplePickerInput: userStr,\n                roleValue: roleValue,\n                url: options.url,\n            };\n            if (typeof options.emailData !== \""undefined\"" && options.emailData !== null) {\n                postBody = util_1.Util.extend(postBody, {\n                    emailBody: options.emailData.body,\n                    emailSubject: typeof options.emailData.subject !== \""undefined\"" ? \""Shared for you.\"" : options.emailData.subject,\n                    sendEmail: true,\n                });\n            }\n            return _this.sendShareObjectRequest(postBody);\n        });\n    };\n    /**\n     * Calls the web's UnshareObject method\n     *\n     * @param url The url of the object to unshare\n     */\n    QueryableShareable.prototype.unshareObjectWeb = function (url) {\n        return this.clone(QueryableShareable, \""unshareObject\"", true).postAs({\n            body: JSON.stringify({\n                url: url,\n            }),\n        });\n    };\n    /**\n     * Checks Permissions on the list of Users and returns back role the users have on the Item.\n     *\n     * @param recipients The array of Entities for which Permissions need to be checked.\n     */\n    QueryableShareable.prototype.checkPermissions = function (recipients) {\n        return this.clone(QueryableShareable, \""checkPermissions\"", true).postAs({\n            body: JSON.stringify({\n                recipients: recipients,\n            }),\n        });\n    };\n    /**\n     * Get Sharing Information.\n     *\n     * @param request The SharingInformationRequest Object.\n     */\n    QueryableShareable.prototype.getSharingInformation = function (request) {\n        if (request === void 0) { request = null; }\n        return this.clone(QueryableShareable, \""getSharingInformation\"", true).postAs({\n            body: JSON.stringify({\n                request: request,\n            }),\n        });\n    };\n    /**\n     * Gets the sharing settings of an item.\n     *\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\n     */\n    QueryableShareable.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\n        return this.clone(QueryableShareable, \""getObjectSharingSettings\"", true).postAs({\n            body: JSON.stringify({\n                useSimplifiedRoles: useSimplifiedRoles,\n            }),\n        });\n    };\n    /**\n     * Unshares this object\n     */\n    QueryableShareable.prototype.unshareObject = function () {\n        return this.clone(QueryableShareable, \""unshareObject\"", true).postAs();\n    };\n    /**\n     * Deletes a link by type\n     *\n     * @param kind Deletes a sharing link by the kind of link\n     */\n    QueryableShareable.prototype.deleteLinkByKind = function (kind) {\n        return this.clone(QueryableShareable, \""deleteLinkByKind\"", true).post({\n            body: JSON.stringify({ linkKind: kind }),\n        });\n    };\n    /**\n     * Removes the specified link to the item.\n     *\n     * @param kind The kind of link to be deleted.\n     * @param shareId\n     */\n    QueryableShareable.prototype.unshareLink = function (kind, shareId) {\n        if (shareId === void 0) { shareId = \""00000000-0000-0000-0000-000000000000\""; }\n        return this.clone(QueryableShareable, \""unshareLink\"", true).post({\n            body: JSON.stringify({ linkKind: kind, shareId: shareId }),\n        });\n    };\n    /**\n     * Calculates the roleValue string used in the sharing query\n     *\n     * @param role The Sharing Role\n     * @param group The Group type\n     */\n    QueryableShareable.prototype.getRoleValue = function (role, group) {\n        // we will give group precedence, because we had to make a choice\n        if (typeof group !== \""undefined\"" && group !== null) {\n            switch (group) {\n                case types_1.RoleType.Contributor:\n                    return webs_1.Web.fromUrl(this.toUrl()).associatedMemberGroup.select(\""Id\"").getAs().then(function (g) { return \""group: \"" + g.Id; });\n                case types_1.RoleType.Reader:\n                case types_1.RoleType.Guest:\n                    return webs_1.Web.fromUrl(this.toUrl()).associatedVisitorGroup.select(\""Id\"").getAs().then(function (g) { return \""group: \"" + g.Id; });\n                default:\n                    throw new Error(\""Could not determine role value for supplied value. Contributor, Reader, and Guest are supported\"");\n            }\n        }\n        else {\n            var roleFilter = role === types_1.SharingRole.Edit ? types_1.RoleType.Contributor : types_1.RoleType.Reader;\n            return webs_1.Web.fromUrl(this.toUrl()).roleDefinitions.select(\""Id\"").top(1).filter(\""RoleTypeKind eq \"" + roleFilter).getAs().then(function (def) {\n                if (def.length < 1) {\n                    throw new Error(\""Could not locate associated role definition for supplied role. Edit and View are supported\"");\n                }\n                return \""role: \"" + def[0].Id;\n            });\n        }\n    };\n    QueryableShareable.prototype.getShareObjectWeb = function (candidate) {\n        return Promise.resolve(webs_1.Web.fromUrl(candidate, \""/_api/SP.Web.ShareObject\""));\n    };\n    QueryableShareable.prototype.sendShareObjectRequest = function (options) {\n        return this.getShareObjectWeb(this.toUrl()).then(function (web) {\n            return web.expand(\""UsersWithAccessRequests\"", \""GroupsSharedWith\"").as(QueryableShareable).post({\n                body: JSON.stringify(options),\n            });\n        });\n    };\n    return QueryableShareable;\n}(queryable_1.Queryable));\nexports.QueryableShareable = QueryableShareable;\nvar QueryableShareableWeb = (function (_super) {\n    __extends(QueryableShareableWeb, _super);\n    function QueryableShareableWeb() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Shares this web with the supplied users\n     * @param loginNames The resolved login names to share\n     * @param role The role to share this web\n     * @param emailData Optional email data\n     */\n    QueryableShareableWeb.prototype.shareWith = function (loginNames, role, emailData) {\n        var _this = this;\n        if (role === void 0) { role = types_1.SharingRole.View; }\n        var dependency = this.addBatchDependency();\n        return webs_1.Web.fromUrl(this.toUrl(), \""/_api/web/url\"").get().then(function (url) {\n            dependency();\n            return _this.shareObject(util_1.Util.combinePaths(url, \""/_layouts/15/aclinv.aspx?forSharing=1&mbypass=1\""), loginNames, role, emailData);\n        });\n    };\n    /**\n     * Provides direct access to the static web.ShareObject method\n     *\n     * @param url The url to share\n     * @param loginNames Resolved loginnames string[] of a single login name string\n     * @param roleValue Role value\n     * @param emailData Optional email data\n     * @param groupId Optional group id\n     * @param propagateAcl\n     * @param includeAnonymousLinkInEmail\n     * @param useSimplifiedRoles\n     */\n    QueryableShareableWeb.prototype.shareObject = function (url, loginNames, role, emailData, group, propagateAcl, includeAnonymousLinkInEmail, useSimplifiedRoles) {\n        if (propagateAcl === void 0) { propagateAcl = false; }\n        if (includeAnonymousLinkInEmail === void 0) { includeAnonymousLinkInEmail = false; }\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\n        return this.clone(QueryableShareable, null, true).shareObject({\n            emailData: emailData,\n            group: group,\n            includeAnonymousLinkInEmail: includeAnonymousLinkInEmail,\n            loginNames: loginNames,\n            propagateAcl: propagateAcl,\n            role: role,\n            url: url,\n            useSimplifiedRoles: useSimplifiedRoles,\n        });\n    };\n    /**\n     * Supplies a method to pass any set of arguments to ShareObject\n     *\n     * @param options The set of options to send to ShareObject\n     */\n    QueryableShareableWeb.prototype.shareObjectRaw = function (options) {\n        return this.clone(QueryableShareable, null, true).shareObject(options, true);\n    };\n    /**\n     * Unshares the object\n     *\n     * @param url The url of the object to stop sharing\n     */\n    QueryableShareableWeb.prototype.unshareObject = function (url) {\n        return this.clone(QueryableShareable, null, true).unshareObjectWeb(url);\n    };\n    return QueryableShareableWeb;\n}(queryablesecurable_1.QueryableSecurable));\nexports.QueryableShareableWeb = QueryableShareableWeb;\nvar QueryableShareableItem = (function (_super) {\n    __extends(QueryableShareableItem, _super);\n    function QueryableShareableItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Gets a link suitable for sharing for this item\n     *\n     * @param kind The type of link to share\n     * @param expiration The optional expiration date\n     */\n    QueryableShareableItem.prototype.getShareLink = function (kind, expiration) {\n        if (kind === void 0) { kind = types_1.SharingLinkKind.OrganizationView; }\n        if (expiration === void 0) { expiration = null; }\n        return this.clone(QueryableShareable, null, true).getShareLink(kind, expiration);\n    };\n    /**\n     * Shares this item with one or more users\n     *\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\n     * @param role The role (View | Edit) applied to the share\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\n     */\n    QueryableShareableItem.prototype.shareWith = function (loginNames, role, requireSignin, emailData) {\n        if (role === void 0) { role = types_1.SharingRole.View; }\n        if (requireSignin === void 0) { requireSignin = true; }\n        return this.clone(QueryableShareable, null, true).shareWith(loginNames, role, requireSignin, false, emailData);\n    };\n    /**\n     * Checks Permissions on the list of Users and returns back role the users have on the Item.\n     *\n     * @param recipients The array of Entities for which Permissions need to be checked.\n     */\n    QueryableShareableItem.prototype.checkSharingPermissions = function (recipients) {\n        return this.clone(QueryableShareable, null, true).checkPermissions(recipients);\n    };\n    /**\n     * Get Sharing Information.\n     *\n     * @param request The SharingInformationRequest Object.\n     */\n    QueryableShareableItem.prototype.getSharingInformation = function (request) {\n        if (request === void 0) { request = null; }\n        return this.clone(QueryableShareable, null, true).getSharingInformation(request);\n    };\n    /**\n     * Gets the sharing settings of an item.\n     *\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\n     */\n    QueryableShareableItem.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\n        return this.clone(QueryableShareable, null, true).getObjectSharingSettings(useSimplifiedRoles);\n    };\n    /**\n     * Unshare this item\n     */\n    QueryableShareableItem.prototype.unshare = function () {\n        return this.clone(QueryableShareable, null, true).unshareObject();\n    };\n    /**\n     * Deletes a sharing link by kind\n     *\n     * @param kind Deletes a sharing link by the kind of link\n     */\n    QueryableShareableItem.prototype.deleteSharingLinkByKind = function (kind) {\n        return this.clone(QueryableShareable, null, true).deleteLinkByKind(kind);\n    };\n    /**\n     * Removes the specified link to the item.\n     *\n     * @param kind The kind of link to be deleted.\n     * @param shareId\n     */\n    QueryableShareableItem.prototype.unshareLink = function (kind, shareId) {\n        return this.clone(QueryableShareable, null, true).unshareLink(kind, shareId);\n    };\n    return QueryableShareableItem;\n}(queryablesecurable_1.QueryableSecurable));\nexports.QueryableShareableItem = QueryableShareableItem;\nvar FileFolderShared = (function (_super) {\n    __extends(FileFolderShared, _super);\n    function FileFolderShared() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Gets a link suitable for sharing\n     *\n     * @param kind The kind of link to get\n     * @param expiration Optional, an expiration for this link\n     */\n    FileFolderShared.prototype.getShareLink = function (kind, expiration) {\n        if (kind === void 0) { kind = types_1.SharingLinkKind.OrganizationView; }\n        if (expiration === void 0) { expiration = null; }\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.getShareLink(kind, expiration);\n        });\n    };\n    /**\n         * Checks Permissions on the list of Users and returns back role the users have on the Item.\n         *\n         * @param recipients The array of Entities for which Permissions need to be checked.\n         */\n    FileFolderShared.prototype.checkSharingPermissions = function (recipients) {\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.checkPermissions(recipients);\n        });\n    };\n    /**\n     * Get Sharing Information.\n     *\n     * @param request The SharingInformationRequest Object.\n     */\n    FileFolderShared.prototype.getSharingInformation = function (request) {\n        if (request === void 0) { request = null; }\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.getSharingInformation(request);\n        });\n    };\n    /**\n     * Gets the sharing settings of an item.\n     *\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\n     */\n    FileFolderShared.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.getObjectSharingSettings(useSimplifiedRoles);\n        });\n    };\n    /**\n     * Unshare this item\n     */\n    FileFolderShared.prototype.unshare = function () {\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.unshareObject();\n        });\n    };\n    /**\n     * Deletes a sharing link by the kind of link\n     *\n     * @param kind The kind of link to be deleted.\n     */\n    FileFolderShared.prototype.deleteSharingLinkByKind = function (kind) {\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.deleteLinkByKind(kind);\n        });\n    };\n    /**\n     * Removes the specified link to the item.\n     *\n     * @param kind The kind of link to be deleted.\n     * @param shareId The share id to delete\n     */\n    FileFolderShared.prototype.unshareLink = function (kind, shareId) {\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.unshareLink(kind, shareId);\n        });\n    };\n    /**\n     * For files and folders we need to use the associated item end point\n     */\n    FileFolderShared.prototype.getShareable = function () {\n        var _this = this;\n        // sharing only works on the item end point, not the file one - so we create a folder instance with the item url internally\n        return this.clone(QueryableShareableFile, \""listItemAllFields\"", false).select(\""odata.editlink\"").get().then(function (d) {\n            var shareable = new QueryableShareable(odata_1.getEntityUrl(d));\n            // we need to handle batching\n            if (_this.hasBatch) {\n                shareable = shareable.inBatch(_this.batch);\n            }\n            return shareable;\n        });\n    };\n    return FileFolderShared;\n}(queryable_1.QueryableInstance));\nexports.FileFolderShared = FileFolderShared;\nvar QueryableShareableFile = (function (_super) {\n    __extends(QueryableShareableFile, _super);\n    function QueryableShareableFile() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Shares this item with one or more users\n     *\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\n     * @param role The role (View | Edit) applied to the share\n     * @param shareEverything Share everything in this folder, even items with unique permissions.\n     * @param requireSignin If true the user must signin to view link, otherwise anyone with the link can access the resource\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\n     */\n    QueryableShareableFile.prototype.shareWith = function (loginNames, role, requireSignin, emailData) {\n        if (role === void 0) { role = types_1.SharingRole.View; }\n        if (requireSignin === void 0) { requireSignin = true; }\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.shareWith(loginNames, role, requireSignin, false, emailData);\n        });\n    };\n    return QueryableShareableFile;\n}(FileFolderShared));\nexports.QueryableShareableFile = QueryableShareableFile;\nvar QueryableShareableFolder = (function (_super) {\n    __extends(QueryableShareableFolder, _super);\n    function QueryableShareableFolder() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Shares this item with one or more users\n     *\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\n     * @param role The role (View | Edit) applied to the share\n     * @param shareEverything Share everything in this folder, even items with unique permissions.\n     * @param requireSignin If true the user must signin to view link, otherwise anyone with the link can access the resource\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\n     */\n    QueryableShareableFolder.prototype.shareWith = function (loginNames, role, requireSignin, shareEverything, emailData) {\n        if (role === void 0) { role = types_1.SharingRole.View; }\n        if (requireSignin === void 0) { requireSignin = true; }\n        if (shareEverything === void 0) { shareEverything = false; }\n        var dependency = this.addBatchDependency();\n        return this.getShareable().then(function (shareable) {\n            dependency();\n            return shareable.shareWith(loginNames, role, requireSignin, shareEverything, emailData);\n        });\n    };\n    return QueryableShareableFolder;\n}(FileFolderShared));\nexports.QueryableShareableFolder = QueryableShareableFolder;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/queryableshareable.js\n// module id = 12\n// module chunks = 0"",""// reference: https://msdn.microsoft.com/en-us/library/office/dn600183.aspx\n\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\n/**\n * Determines the display mode of the given control or view\n */\nvar ControlMode;\n(function (ControlMode) {\n    ControlMode[ControlMode[\""Display\""] = 1] = \""Display\"";\n    ControlMode[ControlMode[\""Edit\""] = 2] = \""Edit\"";\n    ControlMode[ControlMode[\""New\""] = 3] = \""New\"";\n})(ControlMode = exports.ControlMode || (exports.ControlMode = {}));\n/**\n * Specifies the type of the field.\n */\nvar FieldTypes;\n(function (FieldTypes) {\n    FieldTypes[FieldTypes[\""Invalid\""] = 0] = \""Invalid\"";\n    FieldTypes[FieldTypes[\""Integer\""] = 1] = \""Integer\"";\n    FieldTypes[FieldTypes[\""Text\""] = 2] = \""Text\"";\n    FieldTypes[FieldTypes[\""Note\""] = 3] = \""Note\"";\n    FieldTypes[FieldTypes[\""DateTime\""] = 4] = \""DateTime\"";\n    FieldTypes[FieldTypes[\""Counter\""] = 5] = \""Counter\"";\n    FieldTypes[FieldTypes[\""Choice\""] = 6] = \""Choice\"";\n    FieldTypes[FieldTypes[\""Lookup\""] = 7] = \""Lookup\"";\n    FieldTypes[FieldTypes[\""Boolean\""] = 8] = \""Boolean\"";\n    FieldTypes[FieldTypes[\""Number\""] = 9] = \""Number\"";\n    FieldTypes[FieldTypes[\""Currency\""] = 10] = \""Currency\"";\n    FieldTypes[FieldTypes[\""URL\""] = 11] = \""URL\"";\n    FieldTypes[FieldTypes[\""Computed\""] = 12] = \""Computed\"";\n    FieldTypes[FieldTypes[\""Threading\""] = 13] = \""Threading\"";\n    FieldTypes[FieldTypes[\""Guid\""] = 14] = \""Guid\"";\n    FieldTypes[FieldTypes[\""MultiChoice\""] = 15] = \""MultiChoice\"";\n    FieldTypes[FieldTypes[\""GridChoice\""] = 16] = \""GridChoice\"";\n    FieldTypes[FieldTypes[\""Calculated\""] = 17] = \""Calculated\"";\n    FieldTypes[FieldTypes[\""File\""] = 18] = \""File\"";\n    FieldTypes[FieldTypes[\""Attachments\""] = 19] = \""Attachments\"";\n    FieldTypes[FieldTypes[\""User\""] = 20] = \""User\"";\n    FieldTypes[FieldTypes[\""Recurrence\""] = 21] = \""Recurrence\"";\n    FieldTypes[FieldTypes[\""CrossProjectLink\""] = 22] = \""CrossProjectLink\"";\n    FieldTypes[FieldTypes[\""ModStat\""] = 23] = \""ModStat\"";\n    FieldTypes[FieldTypes[\""Error\""] = 24] = \""Error\"";\n    FieldTypes[FieldTypes[\""ContentTypeId\""] = 25] = \""ContentTypeId\"";\n    FieldTypes[FieldTypes[\""PageSeparator\""] = 26] = \""PageSeparator\"";\n    FieldTypes[FieldTypes[\""ThreadIndex\""] = 27] = \""ThreadIndex\"";\n    FieldTypes[FieldTypes[\""WorkflowStatus\""] = 28] = \""WorkflowStatus\"";\n    FieldTypes[FieldTypes[\""AllDayEvent\""] = 29] = \""AllDayEvent\"";\n    FieldTypes[FieldTypes[\""WorkflowEventType\""] = 30] = \""WorkflowEventType\"";\n})(FieldTypes = exports.FieldTypes || (exports.FieldTypes = {}));\nvar DateTimeFieldFormatType;\n(function (DateTimeFieldFormatType) {\n    DateTimeFieldFormatType[DateTimeFieldFormatType[\""DateOnly\""] = 0] = \""DateOnly\"";\n    DateTimeFieldFormatType[DateTimeFieldFormatType[\""DateTime\""] = 1] = \""DateTime\"";\n})(DateTimeFieldFormatType = exports.DateTimeFieldFormatType || (exports.DateTimeFieldFormatType = {}));\n/**\n * Specifies the control settings while adding a field.\n */\nvar AddFieldOptions;\n(function (AddFieldOptions) {\n    /**\n     *  Specify that a new field added to the list must also be added to the default content type in the site collection\n     */\n    AddFieldOptions[AddFieldOptions[\""DefaultValue\""] = 0] = \""DefaultValue\"";\n    /**\n     * Specify that a new field added to the list must also be added to the default content type in the site collection.\n     */\n    AddFieldOptions[AddFieldOptions[\""AddToDefaultContentType\""] = 1] = \""AddToDefaultContentType\"";\n    /**\n     * Specify that a new field must not be added to any other content type\n     */\n    AddFieldOptions[AddFieldOptions[\""AddToNoContentType\""] = 2] = \""AddToNoContentType\"";\n    /**\n     *  Specify that a new field that is added to the specified list must also be added to all content types in the site collection\n     */\n    AddFieldOptions[AddFieldOptions[\""AddToAllContentTypes\""] = 4] = \""AddToAllContentTypes\"";\n    /**\n     * Specify adding an internal field name hint for the purpose of avoiding possible database locking or field renaming operations\n     */\n    AddFieldOptions[AddFieldOptions[\""AddFieldInternalNameHint\""] = 8] = \""AddFieldInternalNameHint\"";\n    /**\n     * Specify that a new field that is added to the specified list must also be added to the default list view\n     */\n    AddFieldOptions[AddFieldOptions[\""AddFieldToDefaultView\""] = 16] = \""AddFieldToDefaultView\"";\n    /**\n     * Specify to confirm that no other field has the same display name\n     */\n    AddFieldOptions[AddFieldOptions[\""AddFieldCheckDisplayName\""] = 32] = \""AddFieldCheckDisplayName\"";\n})(AddFieldOptions = exports.AddFieldOptions || (exports.AddFieldOptions = {}));\nvar CalendarType;\n(function (CalendarType) {\n    CalendarType[CalendarType[\""Gregorian\""] = 1] = \""Gregorian\"";\n    CalendarType[CalendarType[\""Japan\""] = 3] = \""Japan\"";\n    CalendarType[CalendarType[\""Taiwan\""] = 4] = \""Taiwan\"";\n    CalendarType[CalendarType[\""Korea\""] = 5] = \""Korea\"";\n    CalendarType[CalendarType[\""Hijri\""] = 6] = \""Hijri\"";\n    CalendarType[CalendarType[\""Thai\""] = 7] = \""Thai\"";\n    CalendarType[CalendarType[\""Hebrew\""] = 8] = \""Hebrew\"";\n    CalendarType[CalendarType[\""GregorianMEFrench\""] = 9] = \""GregorianMEFrench\"";\n    CalendarType[CalendarType[\""GregorianArabic\""] = 10] = \""GregorianArabic\"";\n    CalendarType[CalendarType[\""GregorianXLITEnglish\""] = 11] = \""GregorianXLITEnglish\"";\n    CalendarType[CalendarType[\""GregorianXLITFrench\""] = 12] = \""GregorianXLITFrench\"";\n    CalendarType[CalendarType[\""KoreaJapanLunar\""] = 14] = \""KoreaJapanLunar\"";\n    CalendarType[CalendarType[\""ChineseLunar\""] = 15] = \""ChineseLunar\"";\n    CalendarType[CalendarType[\""SakaEra\""] = 16] = \""SakaEra\"";\n    CalendarType[CalendarType[\""UmAlQura\""] = 23] = \""UmAlQura\"";\n})(CalendarType = exports.CalendarType || (exports.CalendarType = {}));\nvar UrlFieldFormatType;\n(function (UrlFieldFormatType) {\n    UrlFieldFormatType[UrlFieldFormatType[\""Hyperlink\""] = 0] = \""Hyperlink\"";\n    UrlFieldFormatType[UrlFieldFormatType[\""Image\""] = 1] = \""Image\"";\n})(UrlFieldFormatType = exports.UrlFieldFormatType || (exports.UrlFieldFormatType = {}));\nvar PermissionKind;\n(function (PermissionKind) {\n    /**\n     * Has no permissions on the Site. Not available through the user interface.\n     */\n    PermissionKind[PermissionKind[\""EmptyMask\""] = 0] = \""EmptyMask\"";\n    /**\n     * View items in lists, documents in document libraries, and Web discussion comments.\n     */\n    PermissionKind[PermissionKind[\""ViewListItems\""] = 1] = \""ViewListItems\"";\n    /**\n     * Add items to lists, documents to document libraries, and Web discussion comments.\n     */\n    PermissionKind[PermissionKind[\""AddListItems\""] = 2] = \""AddListItems\"";\n    /**\n     * Edit items in lists, edit documents in document libraries, edit Web discussion comments\n     * in documents, and customize Web Part Pages in document libraries.\n     */\n    PermissionKind[PermissionKind[\""EditListItems\""] = 3] = \""EditListItems\"";\n    /**\n     * Delete items from a list, documents from a document library, and Web discussion\n     * comments in documents.\n     */\n    PermissionKind[PermissionKind[\""DeleteListItems\""] = 4] = \""DeleteListItems\"";\n    /**\n     * Approve a minor version of a list item or document.\n     */\n    PermissionKind[PermissionKind[\""ApproveItems\""] = 5] = \""ApproveItems\"";\n    /**\n     * View the source of documents with server-side file handlers.\n     */\n    PermissionKind[PermissionKind[\""OpenItems\""] = 6] = \""OpenItems\"";\n    /**\n     * View past versions of a list item or document.\n     */\n    PermissionKind[PermissionKind[\""ViewVersions\""] = 7] = \""ViewVersions\"";\n    /**\n     * Delete past versions of a list item or document.\n     */\n    PermissionKind[PermissionKind[\""DeleteVersions\""] = 8] = \""DeleteVersions\"";\n    /**\n     * Discard or check in a document which is checked out to another user.\n     */\n    PermissionKind[PermissionKind[\""CancelCheckout\""] = 9] = \""CancelCheckout\"";\n    /**\n     * Create, change, and delete personal views of lists.\n     */\n    PermissionKind[PermissionKind[\""ManagePersonalViews\""] = 10] = \""ManagePersonalViews\"";\n    /**\n     * Create and delete lists, add or remove columns in a list, and add or remove public views of a list.\n     */\n    PermissionKind[PermissionKind[\""ManageLists\""] = 12] = \""ManageLists\"";\n    /**\n     * View forms, views, and application pages, and enumerate lists.\n     */\n    PermissionKind[PermissionKind[\""ViewFormPages\""] = 13] = \""ViewFormPages\"";\n    /**\n     * Make content of a list or document library retrieveable for anonymous users through SharePoint search.\n     * The list permissions in the site do not change.\n     */\n    PermissionKind[PermissionKind[\""AnonymousSearchAccessList\""] = 14] = \""AnonymousSearchAccessList\"";\n    /**\n     * Allow users to open a Site, list, or folder to access items inside that container.\n     */\n    PermissionKind[PermissionKind[\""Open\""] = 17] = \""Open\"";\n    /**\n     * View pages in a Site.\n     */\n    PermissionKind[PermissionKind[\""ViewPages\""] = 18] = \""ViewPages\"";\n    /**\n     * Add, change, or delete HTML pages or Web Part Pages, and edit the Site using\n     * a Windows SharePoint Services compatible editor.\n     */\n    PermissionKind[PermissionKind[\""AddAndCustomizePages\""] = 19] = \""AddAndCustomizePages\"";\n    /**\n     * Apply a theme or borders to the entire Site.\n     */\n    PermissionKind[PermissionKind[\""ApplyThemeAndBorder\""] = 20] = \""ApplyThemeAndBorder\"";\n    /**\n     * Apply a style sheet (.css file) to the Site.\n     */\n    PermissionKind[PermissionKind[\""ApplyStyleSheets\""] = 21] = \""ApplyStyleSheets\"";\n    /**\n     * View reports on Site usage.\n     */\n    PermissionKind[PermissionKind[\""ViewUsageData\""] = 22] = \""ViewUsageData\"";\n    /**\n     * Create a Site using Self-Service Site Creation.\n     */\n    PermissionKind[PermissionKind[\""CreateSSCSite\""] = 23] = \""CreateSSCSite\"";\n    /**\n     * Create subsites such as team sites, Meeting Workspace sites, and Document Workspace sites.\n     */\n    PermissionKind[PermissionKind[\""ManageSubwebs\""] = 24] = \""ManageSubwebs\"";\n    /**\n     * Create a group of users that can be used anywhere within the site collection.\n     */\n    PermissionKind[PermissionKind[\""CreateGroups\""] = 25] = \""CreateGroups\"";\n    /**\n     * Create and change permission levels on the Site and assign permissions to users\n     * and groups.\n     */\n    PermissionKind[PermissionKind[\""ManagePermissions\""] = 26] = \""ManagePermissions\"";\n    /**\n     * Enumerate files and folders in a Site using Microsoft Office SharePoint Designer\n     * and WebDAV interfaces.\n     */\n    PermissionKind[PermissionKind[\""BrowseDirectories\""] = 27] = \""BrowseDirectories\"";\n    /**\n     * View information about users of the Site.\n     */\n    PermissionKind[PermissionKind[\""BrowseUserInfo\""] = 28] = \""BrowseUserInfo\"";\n    /**\n     * Add or remove personal Web Parts on a Web Part Page.\n     */\n    PermissionKind[PermissionKind[\""AddDelPrivateWebParts\""] = 29] = \""AddDelPrivateWebParts\"";\n    /**\n     * Update Web Parts to display personalized information.\n     */\n    PermissionKind[PermissionKind[\""UpdatePersonalWebParts\""] = 30] = \""UpdatePersonalWebParts\"";\n    /**\n     * Grant the ability to perform all administration tasks for the Site as well as\n     * manage content, activate, deactivate, or edit properties of Site scoped Features\n     * through the object model or through the user interface (UI). When granted on the\n     * root Site of a Site Collection, activate, deactivate, or edit properties of\n     * site collection scoped Features through the object model. To browse to the Site\n     * Collection Features page and activate or deactivate Site Collection scoped Features\n     * through the UI, you must be a Site Collection administrator.\n     */\n    PermissionKind[PermissionKind[\""ManageWeb\""] = 31] = \""ManageWeb\"";\n    /**\n     * Content of lists and document libraries in the Web site will be retrieveable for anonymous users through\n     * SharePoint search if the list or document library has AnonymousSearchAccessList set.\n     */\n    PermissionKind[PermissionKind[\""AnonymousSearchAccessWebLists\""] = 32] = \""AnonymousSearchAccessWebLists\"";\n    /**\n     * Use features that launch client applications. Otherwise, users must work on documents\n     * locally and upload changes.\n     */\n    PermissionKind[PermissionKind[\""UseClientIntegration\""] = 37] = \""UseClientIntegration\"";\n    /**\n     * Use SOAP, WebDAV, or Microsoft Office SharePoint Designer interfaces to access the Site.\n     */\n    PermissionKind[PermissionKind[\""UseRemoteAPIs\""] = 38] = \""UseRemoteAPIs\"";\n    /**\n     * Manage alerts for all users of the Site.\n     */\n    PermissionKind[PermissionKind[\""ManageAlerts\""] = 39] = \""ManageAlerts\"";\n    /**\n     * Create e-mail alerts.\n     */\n    PermissionKind[PermissionKind[\""CreateAlerts\""] = 40] = \""CreateAlerts\"";\n    /**\n     * Allows a user to change his or her user information, such as adding a picture.\n     */\n    PermissionKind[PermissionKind[\""EditMyUserInfo\""] = 41] = \""EditMyUserInfo\"";\n    /**\n     * Enumerate permissions on Site, list, folder, document, or list item.\n     */\n    PermissionKind[PermissionKind[\""EnumeratePermissions\""] = 63] = \""EnumeratePermissions\"";\n    /**\n     * Has all permissions on the Site. Not available through the user interface.\n     */\n    PermissionKind[PermissionKind[\""FullMask\""] = 65] = \""FullMask\"";\n})(PermissionKind = exports.PermissionKind || (exports.PermissionKind = {}));\nvar PrincipalType;\n(function (PrincipalType) {\n    PrincipalType[PrincipalType[\""None\""] = 0] = \""None\"";\n    PrincipalType[PrincipalType[\""User\""] = 1] = \""User\"";\n    PrincipalType[PrincipalType[\""DistributionList\""] = 2] = \""DistributionList\"";\n    PrincipalType[PrincipalType[\""SecurityGroup\""] = 4] = \""SecurityGroup\"";\n    PrincipalType[PrincipalType[\""SharePointGroup\""] = 8] = \""SharePointGroup\"";\n    PrincipalType[PrincipalType[\""All\""] = 15] = \""All\"";\n})(PrincipalType = exports.PrincipalType || (exports.PrincipalType = {}));\nvar RoleType;\n(function (RoleType) {\n    RoleType[RoleType[\""None\""] = 0] = \""None\"";\n    RoleType[RoleType[\""Guest\""] = 1] = \""Guest\"";\n    RoleType[RoleType[\""Reader\""] = 2] = \""Reader\"";\n    RoleType[RoleType[\""Contributor\""] = 3] = \""Contributor\"";\n    RoleType[RoleType[\""WebDesigner\""] = 4] = \""WebDesigner\"";\n    RoleType[RoleType[\""Administrator\""] = 5] = \""Administrator\"";\n})(RoleType = exports.RoleType || (exports.RoleType = {}));\nvar PageType;\n(function (PageType) {\n    PageType[PageType[\""Invalid\""] = -1] = \""Invalid\"";\n    PageType[PageType[\""DefaultView\""] = 0] = \""DefaultView\"";\n    PageType[PageType[\""NormalView\""] = 1] = \""NormalView\"";\n    PageType[PageType[\""DialogView\""] = 2] = \""DialogView\"";\n    PageType[PageType[\""View\""] = 3] = \""View\"";\n    PageType[PageType[\""DisplayForm\""] = 4] = \""DisplayForm\"";\n    PageType[PageType[\""DisplayFormDialog\""] = 5] = \""DisplayFormDialog\"";\n    PageType[PageType[\""EditForm\""] = 6] = \""EditForm\"";\n    PageType[PageType[\""EditFormDialog\""] = 7] = \""EditFormDialog\"";\n    PageType[PageType[\""NewForm\""] = 8] = \""NewForm\"";\n    PageType[PageType[\""NewFormDialog\""] = 9] = \""NewFormDialog\"";\n    PageType[PageType[\""SolutionForm\""] = 10] = \""SolutionForm\"";\n    PageType[PageType[\""PAGE_MAXITEMS\""] = 11] = \""PAGE_MAXITEMS\"";\n})(PageType = exports.PageType || (exports.PageType = {}));\nvar SharingLinkKind;\n(function (SharingLinkKind) {\n    /**\n     * Uninitialized link\n     */\n    SharingLinkKind[SharingLinkKind[\""Uninitialized\""] = 0] = \""Uninitialized\"";\n    /**\n     * Direct link to the object being shared\n     */\n    SharingLinkKind[SharingLinkKind[\""Direct\""] = 1] = \""Direct\"";\n    /**\n     * Organization-shareable link to the object being shared with view permissions\n     */\n    SharingLinkKind[SharingLinkKind[\""OrganizationView\""] = 2] = \""OrganizationView\"";\n    /**\n     * Organization-shareable link to the object being shared with edit permissions\n     */\n    SharingLinkKind[SharingLinkKind[\""OrganizationEdit\""] = 3] = \""OrganizationEdit\"";\n    /**\n     * View only anonymous link\n     */\n    SharingLinkKind[SharingLinkKind[\""AnonymousView\""] = 4] = \""AnonymousView\"";\n    /**\n     * Read/Write anonymous link\n     */\n    SharingLinkKind[SharingLinkKind[\""AnonymousEdit\""] = 5] = \""AnonymousEdit\"";\n    /**\n     * Flexible sharing Link where properties can change without affecting link URL\n     */\n    SharingLinkKind[SharingLinkKind[\""Flexible\""] = 6] = \""Flexible\"";\n})(SharingLinkKind = exports.SharingLinkKind || (exports.SharingLinkKind = {}));\n;\n/**\n * Indicates the role of the sharing link\n */\nvar SharingRole;\n(function (SharingRole) {\n    SharingRole[SharingRole[\""None\""] = 0] = \""None\"";\n    SharingRole[SharingRole[\""View\""] = 1] = \""View\"";\n    SharingRole[SharingRole[\""Edit\""] = 2] = \""Edit\"";\n    SharingRole[SharingRole[\""Owner\""] = 3] = \""Owner\"";\n})(SharingRole = exports.SharingRole || (exports.SharingRole = {}));\nvar SharingOperationStatusCode;\n(function (SharingOperationStatusCode) {\n    /**\n     * The share operation completed without errors.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CompletedSuccessfully\""] = 0] = \""CompletedSuccessfully\"";\n    /**\n     * The share operation completed and generated requests for access.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""AccessRequestsQueued\""] = 1] = \""AccessRequestsQueued\"";\n    /**\n     * The share operation failed as there were no resolved users.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""NoResolvedUsers\""] = -1] = \""NoResolvedUsers\"";\n    /**\n     * The share operation failed due to insufficient permissions.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""AccessDenied\""] = -2] = \""AccessDenied\"";\n    /**\n     * The share operation failed when attempting a cross site share, which is not supported.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CrossSiteRequestNotSupported\""] = -3] = \""CrossSiteRequestNotSupported\"";\n    /**\n     * The sharing operation failed due to an unknown error.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""UnknowError\""] = -4] = \""UnknowError\"";\n    /**\n     * The text you typed is too long. Please shorten it.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""EmailBodyTooLong\""] = -5] = \""EmailBodyTooLong\"";\n    /**\n     * The maximum number of unique scopes in the list has been exceeded.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""ListUniqueScopesExceeded\""] = -6] = \""ListUniqueScopesExceeded\"";\n    /**\n     * The share operation failed because a sharing capability is disabled in the site.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CapabilityDisabled\""] = -7] = \""CapabilityDisabled\"";\n    /**\n     * The specified object for the share operation is not supported.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""ObjectNotSupported\""] = -8] = \""ObjectNotSupported\"";\n    /**\n     * A SharePoint group cannot contain another SharePoint group.\n     */\n    SharingOperationStatusCode[SharingOperationStatusCode[\""NestedGroupsNotSupported\""] = -9] = \""NestedGroupsNotSupported\"";\n})(SharingOperationStatusCode = exports.SharingOperationStatusCode || (exports.SharingOperationStatusCode = {}));\nvar SPSharedObjectType;\n(function (SPSharedObjectType) {\n    SPSharedObjectType[SPSharedObjectType[\""Unknown\""] = 0] = \""Unknown\"";\n    SPSharedObjectType[SPSharedObjectType[\""File\""] = 1] = \""File\"";\n    SPSharedObjectType[SPSharedObjectType[\""Folder\""] = 2] = \""Folder\"";\n    SPSharedObjectType[SPSharedObjectType[\""Item\""] = 3] = \""Item\"";\n    SPSharedObjectType[SPSharedObjectType[\""List\""] = 4] = \""List\"";\n    SPSharedObjectType[SPSharedObjectType[\""Web\""] = 5] = \""Web\"";\n    SPSharedObjectType[SPSharedObjectType[\""Max\""] = 6] = \""Max\"";\n})(SPSharedObjectType = exports.SPSharedObjectType || (exports.SPSharedObjectType = {}));\nvar SharingDomainRestrictionMode;\n(function (SharingDomainRestrictionMode) {\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""None\""] = 0] = \""None\"";\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""AllowList\""] = 1] = \""AllowList\"";\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""BlockList\""] = 2] = \""BlockList\"";\n})(SharingDomainRestrictionMode = exports.SharingDomainRestrictionMode || (exports.SharingDomainRestrictionMode = {}));\n;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/types.js\n// module id = 13\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar util_1 = require(\""./util\"");\nvar collections_1 = require(\""../collections/collections\"");\nvar pnplibconfig_1 = require(\""../configuration/pnplibconfig\"");\n/**\n * A wrapper class to provide a consistent interface to browser based storage\n *\n */\nvar PnPClientStorageWrapper = (function () {\n    /**\n     * Creates a new instance of the PnPClientStorageWrapper class\n     *\n     * @constructor\n     */\n    function PnPClientStorageWrapper(store, defaultTimeoutMinutes) {\n        this.store = store;\n        this.defaultTimeoutMinutes = defaultTimeoutMinutes;\n        this.defaultTimeoutMinutes = (defaultTimeoutMinutes === void 0) ? -1 : defaultTimeoutMinutes;\n        this.enabled = this.test();\n    }\n    /**\n     * Get a value from storage, or null if that value does not exist\n     *\n     * @param key The key whose value we want to retrieve\n     */\n    PnPClientStorageWrapper.prototype.get = function (key) {\n        if (!this.enabled) {\n            return null;\n        }\n        var o = this.store.getItem(key);\n        if (o == null) {\n            return null;\n        }\n        var persistable = JSON.parse(o);\n        if (new Date(persistable.expiration) <= new Date()) {\n            this.delete(key);\n            return null;\n        }\n        else {\n            return persistable.value;\n        }\n    };\n    /**\n     * Adds a value to the underlying storage\n     *\n     * @param key The key to use when storing the provided value\n     * @param o The value to store\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\n     */\n    PnPClientStorageWrapper.prototype.put = function (key, o, expire) {\n        if (this.enabled) {\n            this.store.setItem(key, this.createPersistable(o, expire));\n        }\n    };\n    /**\n     * Deletes a value from the underlying storage\n     *\n     * @param key The key of the pair we want to remove from storage\n     */\n    PnPClientStorageWrapper.prototype.delete = function (key) {\n        if (this.enabled) {\n            this.store.removeItem(key);\n        }\n    };\n    /**\n     * Gets an item from the underlying storage, or adds it if it does not exist using the supplied getter function\n     *\n     * @param key The key to use when storing the provided value\n     * @param getter A function which will upon execution provide the desired value\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\n     */\n    PnPClientStorageWrapper.prototype.getOrPut = function (key, getter, expire) {\n        var _this = this;\n        if (!this.enabled) {\n            return getter();\n        }\n        return new Promise(function (resolve) {\n            var o = _this.get(key);\n            if (o == null) {\n                getter().then(function (d) {\n                    _this.put(key, d, expire);\n                    resolve(d);\n                });\n            }\n            else {\n                resolve(o);\n            }\n        });\n    };\n    /**\n     * Used to determine if the wrapped storage is available currently\n     */\n    PnPClientStorageWrapper.prototype.test = function () {\n        var str = \""test\"";\n        try {\n            this.store.setItem(str, str);\n            this.store.removeItem(str);\n            return true;\n        }\n        catch (e) {\n            return false;\n        }\n    };\n    /**\n     * Creates the persistable to store\n     */\n    PnPClientStorageWrapper.prototype.createPersistable = function (o, expire) {\n        if (typeof expire === \""undefined\"") {\n            // ensure we are by default inline with the global library setting\n            var defaultTimeout = pnplibconfig_1.RuntimeConfig.defaultCachingTimeoutSeconds;\n            if (this.defaultTimeoutMinutes > 0) {\n                defaultTimeout = this.defaultTimeoutMinutes * 60;\n            }\n            expire = util_1.Util.dateAdd(new Date(), \""second\"", defaultTimeout);\n        }\n        return JSON.stringify({ expiration: expire, value: o });\n    };\n    return PnPClientStorageWrapper;\n}());\nexports.PnPClientStorageWrapper = PnPClientStorageWrapper;\n/**\n * A thin implementation of in-memory storage for use in nodejs\n */\nvar MemoryStorage = (function () {\n    function MemoryStorage(_store) {\n        if (_store === void 0) { _store = new collections_1.Dictionary(); }\n        this._store = _store;\n    }\n    Object.defineProperty(MemoryStorage.prototype, \""length\"", {\n        get: function () {\n            return this._store.count();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MemoryStorage.prototype.clear = function () {\n        this._store.clear();\n    };\n    MemoryStorage.prototype.getItem = function (key) {\n        return this._store.get(key);\n    };\n    MemoryStorage.prototype.key = function (index) {\n        return this._store.getKeys()[index];\n    };\n    MemoryStorage.prototype.removeItem = function (key) {\n        this._store.remove(key);\n    };\n    MemoryStorage.prototype.setItem = function (key, data) {\n        this._store.add(key, data);\n    };\n    return MemoryStorage;\n}());\n/**\n * A class that will establish wrappers for both local and session storage\n */\nvar PnPClientStorage = (function () {\n    /**\n     * Creates a new instance of the PnPClientStorage class\n     *\n     * @constructor\n     */\n    function PnPClientStorage() {\n        this.local = typeof localStorage !== \""undefined\"" ? new PnPClientStorageWrapper(localStorage) : new PnPClientStorageWrapper(new MemoryStorage());\n        this.session = typeof sessionStorage !== \""undefined\"" ? new PnPClientStorageWrapper(sessionStorage) : new PnPClientStorageWrapper(new MemoryStorage());\n    }\n    return PnPClientStorage;\n}());\nexports.PnPClientStorage = PnPClientStorage;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils/storage.js\n// module id = 14\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar digestcache_1 = require(\""./digestcache\"");\nvar util_1 = require(\""../utils/util\"");\nvar pnplibconfig_1 = require(\""../configuration/pnplibconfig\"");\nvar exceptions_1 = require(\""../utils/exceptions\"");\nvar HttpClient = (function () {\n    function HttpClient() {\n        this._impl = pnplibconfig_1.RuntimeConfig.fetchClientFactory();\n        this._digestCache = new digestcache_1.DigestCache(this);\n    }\n    HttpClient.prototype.fetch = function (url, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var opts = util_1.Util.extend(options, { cache: \""no-cache\"", credentials: \""same-origin\"" }, true);\n        var headers = new Headers();\n        // first we add the global headers so they can be overwritten by any passed in locally to this call\n        this.mergeHeaders(headers, pnplibconfig_1.RuntimeConfig.headers);\n        // second we add the local options so we can overwrite the globals\n        this.mergeHeaders(headers, options.headers);\n        // lastly we apply any default headers we need that may not exist\n        if (!headers.has(\""Accept\"")) {\n            headers.append(\""Accept\"", \""application/json\"");\n        }\n        if (!headers.has(\""Content-Type\"")) {\n            headers.append(\""Content-Type\"", \""application/json;odata=verbose;charset=utf-8\"");\n        }\n        if (!headers.has(\""X-ClientService-ClientTag\"")) {\n            headers.append(\""X-ClientService-ClientTag\"", \""PnPCoreJS:2.0.4-beta.5\"");\n        }\n        opts = util_1.Util.extend(opts, { headers: headers });\n        if (opts.method && opts.method.toUpperCase() !== \""GET\"") {\n            if (!headers.has(\""X-RequestDigest\"")) {\n                var index = url.indexOf(\""_api/\"");\n                if (index < 0) {\n                    throw new exceptions_1.APIUrlException();\n                }\n                var webUrl = url.substr(0, index);\n                return this._digestCache.getDigest(webUrl)\n                    .then(function (digest) {\n                    headers.append(\""X-RequestDigest\"", digest);\n                    return _this.fetchRaw(url, opts);\n                });\n            }\n        }\n        return this.fetchRaw(url, opts);\n    };\n    HttpClient.prototype.fetchRaw = function (url, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        // here we need to normalize the headers\n        var rawHeaders = new Headers();\n        this.mergeHeaders(rawHeaders, options.headers);\n        options = util_1.Util.extend(options, { headers: rawHeaders });\n        var retry = function (ctx) {\n            _this._impl.fetch(url, options).then(function (response) { return ctx.resolve(response); }).catch(function (response) {\n                // grab our current delay\n                var delay = ctx.delay;\n                // Check if request was throttled - http status code 429\n                // Check is request failed due to server unavailable - http status code 503\n                if (response.status !== 429 && response.status !== 503) {\n                    ctx.reject(response);\n                }\n                // Increment our counters.\n                ctx.delay *= 2;\n                ctx.attempts++;\n                // If we have exceeded the retry count, reject.\n                if (ctx.retryCount <= ctx.attempts) {\n                    ctx.reject(response);\n                }\n                // Set our retry timeout for {delay} milliseconds.\n                setTimeout(util_1.Util.getCtxCallback(_this, retry, ctx), delay);\n            });\n        };\n        return new Promise(function (resolve, reject) {\n            var retryContext = {\n                attempts: 0,\n                delay: 100,\n                reject: reject,\n                resolve: resolve,\n                retryCount: 7,\n            };\n            retry.call(_this, retryContext);\n        });\n    };\n    HttpClient.prototype.get = function (url, options) {\n        if (options === void 0) { options = {}; }\n        var opts = util_1.Util.extend(options, { method: \""GET\"" });\n        return this.fetch(url, opts);\n    };\n    HttpClient.prototype.post = function (url, options) {\n        if (options === void 0) { options = {}; }\n        var opts = util_1.Util.extend(options, { method: \""POST\"" });\n        return this.fetch(url, opts);\n    };\n    HttpClient.prototype.patch = function (url, options) {\n        if (options === void 0) { options = {}; }\n        var opts = util_1.Util.extend(options, { method: \""PATCH\"" });\n        return this.fetch(url, opts);\n    };\n    HttpClient.prototype.delete = function (url, options) {\n        if (options === void 0) { options = {}; }\n        var opts = util_1.Util.extend(options, { method: \""DELETE\"" });\n        return this.fetch(url, opts);\n    };\n    HttpClient.prototype.mergeHeaders = function (target, source) {\n        if (typeof source !== \""undefined\"" && source !== null) {\n            var temp = new Request(\""\"", { headers: source });\n            temp.headers.forEach(function (value, name) {\n                target.append(name, value);\n            });\n        }\n    };\n    return HttpClient;\n}());\nexports.HttpClient = HttpClient;\n;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/net/httpclient.js\n// module id = 15\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar util_1 = require(\""../utils/util\"");\nvar queryable_1 = require(\""./queryable\"");\n/**\n * Describes a collection of content types\n *\n */\nvar ContentTypes = (function (_super) {\n    __extends(ContentTypes, _super);\n    /**\n     * Creates a new instance of the ContentTypes class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this content types collection\n     */\n    function ContentTypes(baseUrl, path) {\n        if (path === void 0) { path = \""contenttypes\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a ContentType by content type id\n     */\n    ContentTypes.prototype.getById = function (id) {\n        var ct = new ContentType(this);\n        ct.concat(\""('\"" + id + \""')\"");\n        return ct;\n    };\n    /**\n     * Adds an existing contenttype to a content type collection\n     *\n     * @param contentTypeId in the following format, for example: 0x010102\n     */\n    ContentTypes.prototype.addAvailableContentType = function (contentTypeId) {\n        var _this = this;\n        var postBody = JSON.stringify({\n            \""contentTypeId\"": contentTypeId,\n        });\n        return this.clone(ContentTypes, \""addAvailableContentType\"", true).postAs({ body: postBody }).then(function (data) {\n            return {\n                contentType: _this.getById(data.id),\n                data: data,\n            };\n        });\n    };\n    /**\n     * Adds a new content type to the collection\n     *\n     * @param id The desired content type id for the new content type (also determines the parent content type)\n     * @param name The name of the content type\n     * @param description The description of the content type\n     * @param group The group in which to add the content type\n     * @param additionalSettings Any additional settings to provide when creating the content type\n     *\n     */\n    ContentTypes.prototype.add = function (id, name, description, group, additionalSettings) {\n        var _this = this;\n        if (description === void 0) { description = \""\""; }\n        if (group === void 0) { group = \""Custom Content Types\""; }\n        if (additionalSettings === void 0) { additionalSettings = {}; }\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""Description\"": description,\n            \""Group\"": group,\n            \""Id\"": { \""StringValue\"": id },\n            \""Name\"": name,\n            \""__metadata\"": { \""type\"": \""SP.ContentType\"" },\n        }, additionalSettings));\n        return this.post({ body: postBody }).then(function (data) {\n            return { contentType: _this.getById(data.id), data: data };\n        });\n    };\n    return ContentTypes;\n}(queryable_1.QueryableCollection));\nexports.ContentTypes = ContentTypes;\n/**\n * Describes a single ContentType instance\n *\n */\nvar ContentType = (function (_super) {\n    __extends(ContentType, _super);\n    function ContentType() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(ContentType.prototype, \""fieldLinks\"", {\n        /**\n         * Gets the column (also known as field) references in the content type.\n        */\n        get: function () {\n            return new FieldLinks(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ContentType.prototype, \""fields\"", {\n        /**\n         * Gets a value that specifies the collection of fields for the content type.\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""fields\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ContentType.prototype, \""parent\"", {\n        /**\n         * Gets the parent content type of the content type.\n         */\n        get: function () {\n            return new ContentType(this, \""parent\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ContentType.prototype, \""workflowAssociations\"", {\n        /**\n         * Gets a value that specifies the collection of workflow associations for the content type.\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""workflowAssociations\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Delete this content type\n     */\n    ContentType.prototype.delete = function () {\n        return this.post({\n            headers: {\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    return ContentType;\n}(queryable_1.QueryableInstance));\nexports.ContentType = ContentType;\n/**\n * Represents a collection of field link instances\n */\nvar FieldLinks = (function (_super) {\n    __extends(FieldLinks, _super);\n    /**\n     * Creates a new instance of the ContentType class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this content type instance\n     */\n    function FieldLinks(baseUrl, path) {\n        if (path === void 0) { path = \""fieldlinks\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a FieldLink by GUID id\n     *\n     * @param id The GUID id of the field link\n     */\n    FieldLinks.prototype.getById = function (id) {\n        var fl = new FieldLink(this);\n        fl.concat(\""(guid'\"" + id + \""')\"");\n        return fl;\n    };\n    return FieldLinks;\n}(queryable_1.QueryableCollection));\nexports.FieldLinks = FieldLinks;\n/**\n * Represents a field link instance\n */\nvar FieldLink = (function (_super) {\n    __extends(FieldLink, _super);\n    function FieldLink() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return FieldLink;\n}(queryable_1.QueryableInstance));\nexports.FieldLink = FieldLink;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/contenttypes.js\n// module id = 16\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar sitegroups_1 = require(\""./sitegroups\"");\nvar util_1 = require(\""../utils/util\"");\n/**\n * Describes a set of role assignments for the current scope\n *\n */\nvar RoleAssignments = (function (_super) {\n    __extends(RoleAssignments, _super);\n    /**\n     * Creates a new instance of the RoleAssignments class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function RoleAssignments(baseUrl, path) {\n        if (path === void 0) { path = \""roleassignments\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Adds a new role assignment with the specified principal and role definitions to the collection.\n     *\n     * @param principalId The ID of the user or group to assign permissions to\n     * @param roleDefId The ID of the role definition that defines the permissions to assign\n     *\n     */\n    RoleAssignments.prototype.add = function (principalId, roleDefId) {\n        return this.clone(RoleAssignments, \""addroleassignment(principalid=\"" + principalId + \"", roledefid=\"" + roleDefId + \"")\"", true).post();\n    };\n    /**\n     * Removes the role assignment with the specified principal and role definition from the collection\n     *\n     * @param principalId The ID of the user or group in the role assignment.\n     * @param roleDefId The ID of the role definition in the role assignment\n     *\n     */\n    RoleAssignments.prototype.remove = function (principalId, roleDefId) {\n        return this.clone(RoleAssignments, \""removeroleassignment(principalid=\"" + principalId + \"", roledefid=\"" + roleDefId + \"")\"", true).post();\n    };\n    /**\n     * Gets the role assignment associated with the specified principal ID from the collection.\n     *\n     * @param id The id of the role assignment\n     */\n    RoleAssignments.prototype.getById = function (id) {\n        var ra = new RoleAssignment(this);\n        ra.concat(\""(\"" + id + \"")\"");\n        return ra;\n    };\n    return RoleAssignments;\n}(queryable_1.QueryableCollection));\nexports.RoleAssignments = RoleAssignments;\nvar RoleAssignment = (function (_super) {\n    __extends(RoleAssignment, _super);\n    function RoleAssignment() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(RoleAssignment.prototype, \""groups\"", {\n        get: function () {\n            return new sitegroups_1.SiteGroups(this, \""groups\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(RoleAssignment.prototype, \""bindings\"", {\n        /**\n         * Get the role definition bindings for this role assignment\n         *\n         */\n        get: function () {\n            return new RoleDefinitionBindings(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Delete this role assignment\n     *\n     */\n    RoleAssignment.prototype.delete = function () {\n        return this.post({\n            headers: {\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    return RoleAssignment;\n}(queryable_1.QueryableInstance));\nexports.RoleAssignment = RoleAssignment;\nvar RoleDefinitions = (function (_super) {\n    __extends(RoleDefinitions, _super);\n    /**\n     * Creates a new instance of the RoleDefinitions class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     * @param path\n     *\n     */\n    function RoleDefinitions(baseUrl, path) {\n        if (path === void 0) { path = \""roledefinitions\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets the role definition with the specified ID from the collection.\n     *\n     * @param id The ID of the role definition.\n     *\n     */\n    RoleDefinitions.prototype.getById = function (id) {\n        return new RoleDefinition(this, \""getById(\"" + id + \"")\"");\n    };\n    /**\n     * Gets the role definition with the specified name.\n     *\n     * @param name The name of the role definition.\n     *\n     */\n    RoleDefinitions.prototype.getByName = function (name) {\n        return new RoleDefinition(this, \""getbyname('\"" + name + \""')\"");\n    };\n    /**\n     * Gets the role definition with the specified type.\n     *\n     * @param name The name of the role definition.\n     *\n     */\n    RoleDefinitions.prototype.getByType = function (roleTypeKind) {\n        return new RoleDefinition(this, \""getbytype(\"" + roleTypeKind + \"")\"");\n    };\n    /**\n     * Create a role definition\n     *\n     * @param name The new role definition's name\n     * @param description The new role definition's description\n     * @param order The order in which the role definition appears\n     * @param basePermissions The permissions mask for this role definition\n     *\n     */\n    RoleDefinitions.prototype.add = function (name, description, order, basePermissions) {\n        var _this = this;\n        var postBody = JSON.stringify({\n            BasePermissions: util_1.Util.extend({ __metadata: { type: \""SP.BasePermissions\"" } }, basePermissions),\n            Description: description,\n            Name: name,\n            Order: order,\n            __metadata: { \""type\"": \""SP.RoleDefinition\"" },\n        });\n        return this.post({ body: postBody }).then(function (data) {\n            return {\n                data: data,\n                definition: _this.getById(data.Id),\n            };\n        });\n    };\n    return RoleDefinitions;\n}(queryable_1.QueryableCollection));\nexports.RoleDefinitions = RoleDefinitions;\nvar RoleDefinition = (function (_super) {\n    __extends(RoleDefinition, _super);\n    function RoleDefinition() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Updates this web intance with the supplied properties\n     *\n     * @param properties A plain object hash of values to update for the web\n     */\n    /* tslint:disable no-string-literal */\n    RoleDefinition.prototype.update = function (properties) {\n        var _this = this;\n        if (typeof properties.hasOwnProperty(\""BasePermissions\"") !== \""undefined\"") {\n            properties[\""BasePermissions\""] = util_1.Util.extend({ __metadata: { type: \""SP.BasePermissions\"" } }, properties[\""BasePermissions\""]);\n        }\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""__metadata\"": { \""type\"": \""SP.RoleDefinition\"" },\n        }, properties));\n        return this.post({\n            body: postBody,\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            var retDef = _this;\n            if (properties.hasOwnProperty(\""Name\"")) {\n                var parent_1 = _this.getParent(RoleDefinitions, _this.parentUrl, \""\"");\n                retDef = parent_1.getByName(properties[\""Name\""]);\n            }\n            return {\n                data: data,\n                definition: retDef,\n            };\n        });\n    };\n    /* tslint:enable */\n    /**\n     * Delete this role definition\n     *\n     */\n    RoleDefinition.prototype.delete = function () {\n        return this.post({\n            headers: {\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    return RoleDefinition;\n}(queryable_1.QueryableInstance));\nexports.RoleDefinition = RoleDefinition;\nvar RoleDefinitionBindings = (function (_super) {\n    __extends(RoleDefinitionBindings, _super);\n    function RoleDefinitionBindings(baseUrl, path) {\n        if (path === void 0) { path = \""roledefinitionbindings\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    return RoleDefinitionBindings;\n}(queryable_1.QueryableCollection));\nexports.RoleDefinitionBindings = RoleDefinitionBindings;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/roles.js\n// module id = 17\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar siteusers_1 = require(\""./siteusers\"");\nvar util_1 = require(\""../utils/util\"");\n/**\n * Principal Type enum\n *\n */\nvar PrincipalType;\n(function (PrincipalType) {\n    PrincipalType[PrincipalType[\""None\""] = 0] = \""None\"";\n    PrincipalType[PrincipalType[\""User\""] = 1] = \""User\"";\n    PrincipalType[PrincipalType[\""DistributionList\""] = 2] = \""DistributionList\"";\n    PrincipalType[PrincipalType[\""SecurityGroup\""] = 4] = \""SecurityGroup\"";\n    PrincipalType[PrincipalType[\""SharePointGroup\""] = 8] = \""SharePointGroup\"";\n    PrincipalType[PrincipalType[\""All\""] = 15] = \""All\"";\n})(PrincipalType = exports.PrincipalType || (exports.PrincipalType = {}));\n/**\n * Describes a collection of site users\n *\n */\nvar SiteGroups = (function (_super) {\n    __extends(SiteGroups, _super);\n    /**\n     * Creates a new instance of the SiteUsers class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this user collection\n     */\n    function SiteGroups(baseUrl, path) {\n        if (path === void 0) { path = \""sitegroups\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Adds a new group to the site collection\n     *\n     * @param props The properties to be updated\n     */\n    SiteGroups.prototype.add = function (properties) {\n        var _this = this;\n        var postBody = JSON.stringify(util_1.Util.extend({ \""__metadata\"": { \""type\"": \""SP.Group\"" } }, properties));\n        return this.post({ body: postBody }).then(function (data) {\n            return {\n                data: data,\n                group: _this.getById(data.Id),\n            };\n        });\n    };\n    /**\n     * Gets a group from the collection by name\n     *\n     * @param email The name of the group\n     */\n    SiteGroups.prototype.getByName = function (groupName) {\n        return new SiteGroup(this, \""getByName('\"" + groupName + \""')\"");\n    };\n    /**\n     * Gets a group from the collection by id\n     *\n     * @param id The id of the group\n     */\n    SiteGroups.prototype.getById = function (id) {\n        var sg = new SiteGroup(this);\n        sg.concat(\""(\"" + id + \"")\"");\n        return sg;\n    };\n    /**\n     * Removes the group with the specified member ID from the collection.\n     *\n     * @param id The id of the group to remove\n     */\n    SiteGroups.prototype.removeById = function (id) {\n        return this.clone(SiteGroups, \""removeById('\"" + id + \""')\"", true).post();\n    };\n    /**\n     * Removes a user from the collection by login name\n     *\n     * @param loginName The login name of the user\n     */\n    SiteGroups.prototype.removeByLoginName = function (loginName) {\n        return this.clone(SiteGroups, \""removeByLoginName('\"" + loginName + \""')\"", true).post();\n    };\n    return SiteGroups;\n}(queryable_1.QueryableCollection));\nexports.SiteGroups = SiteGroups;\n/**\n * Describes a single group\n *\n */\nvar SiteGroup = (function (_super) {\n    __extends(SiteGroup, _super);\n    function SiteGroup() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(SiteGroup.prototype, \""users\"", {\n        /**\n         * Get's the users for this group\n         *\n         */\n        get: function () {\n            return new siteusers_1.SiteUsers(this, \""users\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n    * Updates this group instance with the supplied properties\n    *\n    * @param properties A GroupWriteableProperties object of property names and values to update for the user\n    */\n    /* tslint:disable no-string-literal */\n    SiteGroup.prototype.update = function (properties) {\n        var _this = this;\n        var postBody = util_1.Util.extend({ \""__metadata\"": { \""type\"": \""SP.Group\"" } }, properties);\n        return this.post({\n            body: JSON.stringify(postBody),\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            var retGroup = _this;\n            if (properties.hasOwnProperty(\""Title\"")) {\n                retGroup = _this.getParent(SiteGroup, _this.parentUrl, \""getByName('\"" + properties[\""Title\""] + \""')\"");\n            }\n            return {\n                data: data,\n                group: retGroup,\n            };\n        });\n    };\n    return SiteGroup;\n}(queryable_1.QueryableInstance));\nexports.SiteGroup = SiteGroup;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/sitegroups.js\n// module id = 18\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar util_1 = require(\""../utils/util\"");\nvar UserCustomActions = (function (_super) {\n    __extends(UserCustomActions, _super);\n    function UserCustomActions(baseUrl, path) {\n        if (path === void 0) { path = \""usercustomactions\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Returns the custom action with the specified identifier.\n     *\n     * @param id The GUID ID of the user custom action to get.\n     */\n    UserCustomActions.prototype.getById = function (id) {\n        var uca = new UserCustomAction(this);\n        uca.concat(\""('\"" + id + \""')\"");\n        return uca;\n    };\n    /**\n     * Create a custom action\n     *\n     * @param creationInfo The information which defines the new custom action\n     *\n     */\n    UserCustomActions.prototype.add = function (properties) {\n        var _this = this;\n        var postBody = JSON.stringify(util_1.Util.extend({ __metadata: { \""type\"": \""SP.UserCustomAction\"" } }, properties));\n        return this.post({ body: postBody }).then(function (data) {\n            return {\n                action: _this.getById(data.Id),\n                data: data,\n            };\n        });\n    };\n    /**\n     * Deletes all custom actions in the collection.\n     *\n     */\n    UserCustomActions.prototype.clear = function () {\n        return this.clone(UserCustomActions, \""clear\"", true).post();\n    };\n    return UserCustomActions;\n}(queryable_1.QueryableCollection));\nexports.UserCustomActions = UserCustomActions;\nvar UserCustomAction = (function (_super) {\n    __extends(UserCustomAction, _super);\n    function UserCustomAction() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    UserCustomAction.prototype.update = function (properties) {\n        var _this = this;\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""__metadata\"": { \""type\"": \""SP.UserCustomAction\"" },\n        }, properties));\n        return this.post({\n            body: postBody,\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            return {\n                action: _this,\n                data: data,\n            };\n        });\n    };\n    /**\n    * Remove a custom action\n    *\n    */\n    UserCustomAction.prototype.delete = function () {\n        return _super.prototype.delete.call(this);\n    };\n    return UserCustomAction;\n}(queryable_1.QueryableInstance));\nexports.UserCustomAction = UserCustomAction;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/usercustomactions.js\n// module id = 19\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar storage = require(\""../../utils/storage\"");\nvar exceptions_1 = require(\""../../utils/exceptions\"");\n/**\n * A caching provider which can wrap other non-caching providers\n *\n */\nvar CachingConfigurationProvider = (function () {\n    /**\n     * Creates a new caching configuration provider\n     * @constructor\n     * @param {IConfigurationProvider} wrappedProvider Provider which will be used to fetch the configuration\n     * @param {string} cacheKey Key that will be used to store cached items to the cache\n     * @param {IPnPClientStore} cacheStore OPTIONAL storage, which will be used to store cached settings.\n     */\n    function CachingConfigurationProvider(wrappedProvider, cacheKey, cacheStore) {\n        this.wrappedProvider = wrappedProvider;\n        this.store = (cacheStore) ? cacheStore : this.selectPnPCache();\n        this.cacheKey = \""_configcache_\"" + cacheKey;\n    }\n    /**\n     * Gets the wrapped configuration providers\n     *\n     * @return {IConfigurationProvider} Wrapped configuration provider\n     */\n    CachingConfigurationProvider.prototype.getWrappedProvider = function () {\n        return this.wrappedProvider;\n    };\n    /**\n     * Loads the configuration values either from the cache or from the wrapped provider\n     *\n     * @return {Promise<TypedHash<string>>} Promise of loaded configuration values\n     */\n    CachingConfigurationProvider.prototype.getConfiguration = function () {\n        var _this = this;\n        // Cache not available, pass control to  the wrapped provider\n        if ((!this.store) || (!this.store.enabled)) {\n            return this.wrappedProvider.getConfiguration();\n        }\n        // Value is found in cache, return it directly\n        var cachedConfig = this.store.get(this.cacheKey);\n        if (cachedConfig) {\n            return new Promise(function (resolve) {\n                resolve(cachedConfig);\n            });\n        }\n        // Get and cache value from the wrapped provider\n        var providerPromise = this.wrappedProvider.getConfiguration();\n        providerPromise.then(function (providedConfig) {\n            _this.store.put(_this.cacheKey, providedConfig);\n        });\n        return providerPromise;\n    };\n    CachingConfigurationProvider.prototype.selectPnPCache = function () {\n        var pnpCache = new storage.PnPClientStorage();\n        if ((pnpCache.local) && (pnpCache.local.enabled)) {\n            return pnpCache.local;\n        }\n        if ((pnpCache.session) && (pnpCache.session.enabled)) {\n            return pnpCache.session;\n        }\n        throw new exceptions_1.NoCacheAvailableException();\n    };\n    return CachingConfigurationProvider;\n}());\nexports.default = CachingConfigurationProvider;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/configuration/providers/cachingConfigurationProvider.js\n// module id = 20\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\n/**\n * Makes requests using the fetch API\n */\nvar FetchClient = (function () {\n    function FetchClient() {\n    }\n    FetchClient.prototype.fetch = function (url, options) {\n        return global.fetch(url, options);\n    };\n    return FetchClient;\n}());\nexports.FetchClient = FetchClient;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/net/fetchclient.js\n// module id = 21\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar storage_1 = require(\""../utils/storage\"");\nvar util_1 = require(\""../utils/util\"");\nvar pnplibconfig_1 = require(\""../configuration/pnplibconfig\"");\nvar CachingOptions = (function () {\n    function CachingOptions(key) {\n        this.key = key;\n        this.expiration = util_1.Util.dateAdd(new Date(), \""second\"", pnplibconfig_1.RuntimeConfig.defaultCachingTimeoutSeconds);\n        this.storeName = pnplibconfig_1.RuntimeConfig.defaultCachingStore;\n    }\n    Object.defineProperty(CachingOptions.prototype, \""store\"", {\n        get: function () {\n            if (this.storeName === \""local\"") {\n                return CachingOptions.storage.local;\n            }\n            else {\n                return CachingOptions.storage.session;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    return CachingOptions;\n}());\nCachingOptions.storage = new storage_1.PnPClientStorage();\nexports.CachingOptions = CachingOptions;\nvar CachingParserWrapper = (function () {\n    function CachingParserWrapper(_parser, _cacheOptions) {\n        this._parser = _parser;\n        this._cacheOptions = _cacheOptions;\n    }\n    CachingParserWrapper.prototype.parse = function (response) {\n        var _this = this;\n        // add this to the cache based on the options\n        return this._parser.parse(response).then(function (data) {\n            if (_this._cacheOptions.store !== null) {\n                _this._cacheOptions.store.put(_this._cacheOptions.key, data, _this._cacheOptions.expiration);\n            }\n            return data;\n        });\n    };\n    return CachingParserWrapper;\n}());\nexports.CachingParserWrapper = CachingParserWrapper;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/caching.js\n// module id = 22\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\n/**\n * Describes a collection of List objects\n *\n */\nvar Features = (function (_super) {\n    __extends(Features, _super);\n    /**\n     * Creates a new instance of the Lists class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Features(baseUrl, path) {\n        if (path === void 0) { path = \""features\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a list from the collection by guid id\n     *\n     * @param id The Id of the feature (GUID)\n     */\n    Features.prototype.getById = function (id) {\n        var feature = new Feature(this);\n        feature.concat(\""('\"" + id + \""')\"");\n        return feature;\n    };\n    /**\n     * Adds a new list to the collection\n     *\n     * @param id The Id of the feature (GUID)\n     * @param force If true the feature activation will be forced\n     */\n    Features.prototype.add = function (id, force) {\n        var _this = this;\n        if (force === void 0) { force = false; }\n        return this.clone(Features, \""add\"", true).post({\n            body: JSON.stringify({\n                featdefScope: 0,\n                featureId: id,\n                force: force,\n            }),\n        }).then(function (data) {\n            return {\n                data: data,\n                feature: _this.getById(id),\n            };\n        });\n    };\n    /**\n     * Removes (deactivates) a feature from the collection\n     *\n     * @param id The Id of the feature (GUID)\n     * @param force If true the feature deactivation will be forced\n     */\n    Features.prototype.remove = function (id, force) {\n        if (force === void 0) { force = false; }\n        return this.clone(Features, \""remove\"", true).post({\n            body: JSON.stringify({\n                featureId: id,\n                force: force,\n            }),\n        });\n    };\n    return Features;\n}(queryable_1.QueryableCollection));\nexports.Features = Features;\nvar Feature = (function (_super) {\n    __extends(Feature, _super);\n    function Feature() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Removes (deactivates) a feature from the collection\n     *\n     * @param force If true the feature deactivation will be forced\n     */\n    Feature.prototype.deactivate = function (force) {\n        var _this = this;\n        if (force === void 0) { force = false; }\n        var removeDependency = this.addBatchDependency();\n        var idGet = new Feature(this).select(\""DefinitionId\"");\n        return idGet.getAs().then(function (feature) {\n            var promise = _this.getParent(Features, _this.parentUrl, \""\"", _this.batch).remove(feature.DefinitionId, force);\n            removeDependency();\n            return promise;\n        });\n    };\n    return Feature;\n}(queryable_1.QueryableInstance));\nexports.Feature = Feature;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/features.js\n// module id = 23\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar util_1 = require(\""../utils/util\"");\nvar types_1 = require(\""./types\"");\n/**\n * Describes a collection of Field objects\n *\n */\nvar Fields = (function (_super) {\n    __extends(Fields, _super);\n    /**\n     * Creates a new instance of the Fields class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Fields(baseUrl, path) {\n        if (path === void 0) { path = \""fields\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a field from the collection by title\n     *\n     * @param title The case-sensitive title of the field\n     */\n    Fields.prototype.getByTitle = function (title) {\n        return new Field(this, \""getByTitle('\"" + title + \""')\"");\n    };\n    /**\n     * Gets a field from the collection by using internal name or title\n     *\n     * @param name The case-sensitive internal name or title of the field\n     */\n    Fields.prototype.getByInternalNameOrTitle = function (name) {\n        return new Field(this, \""getByInternalNameOrTitle('\"" + name + \""')\"");\n    };\n    /**\n     * Gets a list from the collection by guid id\n     *\n     * @param title The Id of the list\n     */\n    Fields.prototype.getById = function (id) {\n        var f = new Field(this);\n        f.concat(\""('\"" + id + \""')\"");\n        return f;\n    };\n    /**\n     * Creates a field based on the specified schema\n     */\n    Fields.prototype.createFieldAsXml = function (xml) {\n        var _this = this;\n        var info;\n        if (typeof xml === \""string\"") {\n            info = { SchemaXml: xml };\n        }\n        else {\n            info = xml;\n        }\n        var postBody = JSON.stringify({\n            \""parameters\"": util_1.Util.extend({\n                \""__metadata\"": {\n                    \""type\"": \""SP.XmlSchemaFieldCreationInformation\"",\n                },\n            }, info),\n        });\n        return this.clone(Fields, \""createfieldasxml\"", true).postAs({ body: postBody }).then(function (data) {\n            return {\n                data: data,\n                field: _this.getById(data.Id),\n            };\n        });\n    };\n    /**\n     * Adds a new list to the collection\n     *\n     * @param title The new field's title\n     * @param fieldType The new field's type (ex: SP.FieldText)\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\n     */\n    Fields.prototype.add = function (title, fieldType, properties) {\n        var _this = this;\n        if (properties === void 0) { properties = {}; }\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""Title\"": title,\n            \""__metadata\"": { \""type\"": fieldType },\n        }, properties));\n        return this.clone(Fields, null, true).postAs({ body: postBody }).then(function (data) {\n            return {\n                data: data,\n                field: _this.getById(data.Id),\n            };\n        });\n    };\n    /**\n     * Adds a new SP.FieldText to the collection\n     *\n     * @param title The field title\n     * @param maxLength The maximum number of characters allowed in the value of the field.\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\n     */\n    Fields.prototype.addText = function (title, maxLength, properties) {\n        if (maxLength === void 0) { maxLength = 255; }\n        var props = {\n            FieldTypeKind: 2,\n            MaxLength: maxLength,\n        };\n        return this.add(title, \""SP.FieldText\"", util_1.Util.extend(props, properties));\n    };\n    /**\n     * Adds a new SP.FieldCalculated to the collection\n     *\n     * @param title The field title.\n     * @param formula The formula for the field.\n     * @param dateFormat The date and time format that is displayed in the field.\n     * @param outputType Specifies the output format for the field. Represents a FieldType value.\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\n     */\n    Fields.prototype.addCalculated = function (title, formula, dateFormat, outputType, properties) {\n        if (outputType === void 0) { outputType = types_1.FieldTypes.Text; }\n        var props = {\n            DateFormat: dateFormat,\n            FieldTypeKind: 17,\n            Formula: formula,\n            OutputType: outputType,\n        };\n        return this.add(title, \""SP.FieldCalculated\"", util_1.Util.extend(props, properties));\n    };\n    /**\n     * Adds a new SP.FieldDateTime to the collection\n     *\n     * @param title The field title\n     * @param displayFormat The format of the date and time that is displayed in the field.\n     * @param calendarType Specifies the calendar type of the field.\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\n     */\n    Fields.prototype.addDateTime = function (title, displayFormat, calendarType, friendlyDisplayFormat, properties) {\n        if (displayFormat === void 0) { displayFormat = types_1.DateTimeFieldFormatType.DateOnly; }\n        if (calendarType === void 0) { calendarType = types_1.CalendarType.Gregorian; }\n        if (friendlyDisplayFormat === void 0) { friendlyDisplayFormat = 0; }\n        var props = {\n            DateTimeCalendarType: calendarType,\n            DisplayFormat: displayFormat,\n            FieldTypeKind: 4,\n            FriendlyDisplayFormat: friendlyDisplayFormat,\n        };\n        return this.add(title, \""SP.FieldDateTime\"", util_1.Util.extend(props, properties));\n    };\n    /**\n     * Adds a new SP.FieldNumber to the collection\n     *\n     * @param title The field title\n     * @param minValue The field's minimum value\n     * @param maxValue The field's maximum value\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\n     */\n    Fields.prototype.addNumber = function (title, minValue, maxValue, properties) {\n        var props = { FieldTypeKind: 9 };\n        if (typeof minValue !== \""undefined\"") {\n            props = util_1.Util.extend({ MinimumValue: minValue }, props);\n        }\n        if (typeof maxValue !== \""undefined\"") {\n            props = util_1.Util.extend({ MaximumValue: maxValue }, props);\n        }\n        return this.add(title, \""SP.FieldNumber\"", util_1.Util.extend(props, properties));\n    };\n    /**\n     * Adds a new SP.FieldCurrency to the collection\n     *\n     * @param title The field title\n     * @param minValue The field's minimum value\n     * @param maxValue The field's maximum value\n     * @param currencyLocalId Specifies the language code identifier (LCID) used to format the value of the field\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\n     */\n    Fields.prototype.addCurrency = function (title, minValue, maxValue, currencyLocalId, properties) {\n        if (currencyLocalId === void 0) { currencyLocalId = 1033; }\n        var props = {\n            CurrencyLocaleId: currencyLocalId,\n            FieldTypeKind: 10,\n        };\n        if (typeof minValue !== \""undefined\"") {\n            props = util_1.Util.extend({ MinimumValue: minValue }, props);\n        }\n        if (typeof maxValue !== \""undefined\"") {\n            props = util_1.Util.extend({ MaximumValue: maxValue }, props);\n        }\n        return this.add(title, \""SP.FieldCurrency\"", util_1.Util.extend(props, properties));\n    };\n    /**\n     * Adds a new SP.FieldMultiLineText to the collection\n     *\n     * @param title The field title\n     * @param numberOfLines Specifies the number of lines of text to display for the field.\n     * @param richText Specifies whether the field supports rich formatting.\n     * @param restrictedMode Specifies whether the field supports a subset of rich formatting.\n     * @param appendOnly Specifies whether all changes to the value of the field are displayed in list forms.\n     * @param allowHyperlink Specifies whether a hyperlink is allowed as a value of the field.\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\n     *\n     */\n    Fields.prototype.addMultilineText = function (title, numberOfLines, richText, restrictedMode, appendOnly, allowHyperlink, properties) {\n        if (numberOfLines === void 0) { numberOfLines = 6; }\n        if (richText === void 0) { richText = true; }\n        if (restrictedMode === void 0) { restrictedMode = false; }\n        if (appendOnly === void 0) { appendOnly = false; }\n        if (allowHyperlink === void 0) { allowHyperlink = true; }\n        var props = {\n            AllowHyperlink: allowHyperlink,\n            AppendOnly: appendOnly,\n            FieldTypeKind: 3,\n            NumberOfLines: numberOfLines,\n            RestrictedMode: restrictedMode,\n            RichText: richText,\n        };\n        return this.add(title, \""SP.FieldMultiLineText\"", util_1.Util.extend(props, properties));\n    };\n    /**\n     * Adds a new SP.FieldUrl to the collection\n     *\n     * @param title The field title\n     */\n    Fields.prototype.addUrl = function (title, displayFormat, properties) {\n        if (displayFormat === void 0) { displayFormat = types_1.UrlFieldFormatType.Hyperlink; }\n        var props = {\n            DisplayFormat: displayFormat,\n            FieldTypeKind: 11,\n        };\n        return this.add(title, \""SP.FieldUrl\"", util_1.Util.extend(props, properties));\n    };\n    return Fields;\n}(queryable_1.QueryableCollection));\nexports.Fields = Fields;\n/**\n * Describes a single of Field instance\n *\n */\nvar Field = (function (_super) {\n    __extends(Field, _super);\n    function Field() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Updates this field intance with the supplied properties\n     *\n     * @param properties A plain object hash of values to update for the list\n     * @param fieldType The type value, required to update child field type properties\n     */\n    Field.prototype.update = function (properties, fieldType) {\n        var _this = this;\n        if (fieldType === void 0) { fieldType = \""SP.Field\""; }\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""__metadata\"": { \""type\"": fieldType },\n        }, properties));\n        return this.post({\n            body: postBody,\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            return {\n                data: data,\n                field: _this,\n            };\n        });\n    };\n    /**\n     * Delete this fields\n     *\n     */\n    Field.prototype.delete = function () {\n        return this.post({\n            headers: {\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    /**\n     * Sets the value of the ShowInDisplayForm property for this field.\n     */\n    Field.prototype.setShowInDisplayForm = function (show) {\n        return this.clone(Field, \""setshowindisplayform(\"" + show + \"")\"", true).post();\n    };\n    /**\n     * Sets the value of the ShowInEditForm property for this field.\n     */\n    Field.prototype.setShowInEditForm = function (show) {\n        return this.clone(Field, \""setshowineditform(\"" + show + \"")\"", true).post();\n    };\n    /**\n     * Sets the value of the ShowInNewForm property for this field.\n     */\n    Field.prototype.setShowInNewForm = function (show) {\n        return this.clone(Field, \""setshowinnewform(\"" + show + \"")\"", true).post();\n    };\n    return Field;\n}(queryable_1.QueryableInstance));\nexports.Field = Field;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/fields.js\n// module id = 24\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar util_1 = require(\""../utils/util\"");\nvar queryable_1 = require(\""./queryable\"");\n/**\n * Represents a collection of navigation nodes\n *\n */\nvar NavigationNodes = (function (_super) {\n    __extends(NavigationNodes, _super);\n    function NavigationNodes() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Gets a navigation node by id\n     *\n     * @param id The id of the node\n     */\n    NavigationNodes.prototype.getById = function (id) {\n        var node = new NavigationNode(this);\n        node.concat(\""(\"" + id + \"")\"");\n        return node;\n    };\n    /**\n     * Adds a new node to the collection\n     *\n     * @param title Display name of the node\n     * @param url The url of the node\n     * @param visible If true the node is visible, otherwise it is hidden (default: true)\n     */\n    NavigationNodes.prototype.add = function (title, url, visible) {\n        var _this = this;\n        if (visible === void 0) { visible = true; }\n        var postBody = JSON.stringify({\n            IsVisible: visible,\n            Title: title,\n            Url: url,\n            \""__metadata\"": { \""type\"": \""SP.NavigationNode\"" },\n        });\n        return this.clone(NavigationNodes, null, true).post({ body: postBody }).then(function (data) {\n            return {\n                data: data,\n                node: _this.getById(data.Id),\n            };\n        });\n    };\n    /**\n     * Moves a node to be after another node in the navigation\n     *\n     * @param nodeId Id of the node to move\n     * @param previousNodeId Id of the node after which we move the node specified by nodeId\n     */\n    NavigationNodes.prototype.moveAfter = function (nodeId, previousNodeId) {\n        var postBody = JSON.stringify({\n            nodeId: nodeId,\n            previousNodeId: previousNodeId,\n        });\n        return this.clone(NavigationNodes, \""MoveAfter\"", true).post({ body: postBody });\n    };\n    return NavigationNodes;\n}(queryable_1.QueryableCollection));\nexports.NavigationNodes = NavigationNodes;\nvar NavigationNode = (function (_super) {\n    __extends(NavigationNode, _super);\n    function NavigationNode() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(NavigationNode.prototype, \""children\"", {\n        /**\n         * Represents the child nodes of this node\n         */\n        get: function () {\n            return new NavigationNodes(this, \""Children\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Updates this node based on the supplied properties\n     *\n     * @param properties The hash of key/value pairs to update\n     */\n    NavigationNode.prototype.update = function (properties) {\n        var _this = this;\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""__metadata\"": { \""type\"": \""SP.NavigationNode\"" },\n        }, properties));\n        return this.post({\n            body: postBody,\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            return {\n                data: data,\n                node: _this,\n            };\n        });\n    };\n    /**\n     * Deletes this node and any child nodes\n     */\n    NavigationNode.prototype.delete = function () {\n        return _super.prototype.delete.call(this);\n    };\n    return NavigationNode;\n}(queryable_1.QueryableInstance));\nexports.NavigationNode = NavigationNode;\n/**\n * Exposes the navigation components\n *\n */\nvar Navigation = (function (_super) {\n    __extends(Navigation, _super);\n    /**\n     * Creates a new instance of the Lists class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Navigation(baseUrl, path) {\n        if (path === void 0) { path = \""navigation\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    Object.defineProperty(Navigation.prototype, \""quicklaunch\"", {\n        /**\n         * Gets the quicklaunch navigation for the current context\n         *\n         */\n        get: function () {\n            return new NavigationNodes(this, \""quicklaunch\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Navigation.prototype, \""topNavigationBar\"", {\n        /**\n         * Gets the top bar navigation navigation for the current context\n         *\n         */\n        get: function () {\n            return new NavigationNodes(this, \""topnavigationbar\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    return Navigation;\n}(queryable_1.Queryable));\nexports.Navigation = Navigation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/navigation.js\n// module id = 25\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar webs_1 = require(\""./webs\"");\nvar roles_1 = require(\""./roles\"");\nvar types_1 = require(\""./types\"");\nvar queryable_1 = require(\""./queryable\"");\nvar QueryableSecurable = (function (_super) {\n    __extends(QueryableSecurable, _super);\n    function QueryableSecurable() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(QueryableSecurable.prototype, \""roleAssignments\"", {\n        /**\n         * Gets the set of role assignments for this item\n         *\n         */\n        get: function () {\n            return new roles_1.RoleAssignments(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(QueryableSecurable.prototype, \""firstUniqueAncestorSecurableObject\"", {\n        /**\n         * Gets the closest securable up the security hierarchy whose permissions are applied to this list item\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableInstance(this, \""FirstUniqueAncestorSecurableObject\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Gets the effective permissions for the user supplied\n     *\n     * @param loginName The claims username for the user (ex: i:0#.f|membership|user@domain.com)\n     */\n    QueryableSecurable.prototype.getUserEffectivePermissions = function (loginName) {\n        var q = this.clone(queryable_1.Queryable, \""getUserEffectivePermissions(@user)\"", true);\n        q.query.add(\""@user\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return q.getAs();\n    };\n    /**\n     * Gets the effective permissions for the current user\n     */\n    QueryableSecurable.prototype.getCurrentUserEffectivePermissions = function () {\n        var _this = this;\n        var w = webs_1.Web.fromUrl(this.toUrl());\n        return w.currentUser.select(\""LoginName\"").getAs().then(function (user) {\n            return _this.getUserEffectivePermissions(user.LoginName);\n        });\n    };\n    /**\n     * Breaks the security inheritance at this level optinally copying permissions and clearing subscopes\n     *\n     * @param copyRoleAssignments If true the permissions are copied from the current parent scope\n     * @param clearSubscopes Optional. true to make all child securable objects inherit role assignments from the current object\n     */\n    QueryableSecurable.prototype.breakRoleInheritance = function (copyRoleAssignments, clearSubscopes) {\n        if (copyRoleAssignments === void 0) { copyRoleAssignments = false; }\n        if (clearSubscopes === void 0) { clearSubscopes = false; }\n        return this.clone(QueryableSecurable, \""breakroleinheritance(copyroleassignments=\"" + copyRoleAssignments + \"", clearsubscopes=\"" + clearSubscopes + \"")\"", true).post();\n    };\n    /**\n     * Removes the local role assignments so that it re-inherit role assignments from the parent object.\n     *\n     */\n    QueryableSecurable.prototype.resetRoleInheritance = function () {\n        return this.clone(QueryableSecurable, \""resetroleinheritance\"", true).post();\n    };\n    /**\n     * Determines if a given user has the appropriate permissions\n     *\n     * @param loginName The user to check\n     * @param permission The permission being checked\n     */\n    QueryableSecurable.prototype.userHasPermissions = function (loginName, permission) {\n        var _this = this;\n        return this.getUserEffectivePermissions(loginName).then(function (perms) {\n            return _this.hasPermissions(perms, permission);\n        });\n    };\n    /**\n     * Determines if the current user has the requested permissions\n     *\n     * @param permission The permission we wish to check\n     */\n    QueryableSecurable.prototype.currentUserHasPermissions = function (permission) {\n        var _this = this;\n        return this.getCurrentUserEffectivePermissions().then(function (perms) {\n            return _this.hasPermissions(perms, permission);\n        });\n    };\n    /**\n     * Taken from sp.js, checks the supplied permissions against the mask\n     *\n     * @param value The security principal's permissions on the given object\n     * @param perm The permission checked against the value\n     */\n    /* tslint:disable:no-bitwise */\n    QueryableSecurable.prototype.hasPermissions = function (value, perm) {\n        if (!perm) {\n            return true;\n        }\n        if (perm === types_1.PermissionKind.FullMask) {\n            return (value.High & 32767) === 32767 && value.Low === 65535;\n        }\n        perm = perm - 1;\n        var num = 1;\n        if (perm >= 0 && perm < 32) {\n            num = num << perm;\n            return 0 !== (value.Low & num);\n        }\n        else if (perm >= 32 && perm < 64) {\n            num = num << perm - 32;\n            return 0 !== (value.High & num);\n        }\n        return false;\n    };\n    return QueryableSecurable;\n}(queryable_1.QueryableInstance));\nexports.QueryableSecurable = QueryableSecurable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/queryablesecurable.js\n// module id = 26\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar util_1 = require(\""../utils/util\"");\n/**\n * Describes the search API\n *\n */\nvar Search = (function (_super) {\n    __extends(Search, _super);\n    /**\n     * Creates a new instance of the Search class\n     *\n     * @param baseUrl The url for the search context\n     * @param query The SearchQuery object to execute\n     */\n    function Search(baseUrl, path) {\n        if (path === void 0) { path = \""_api/search/postquery\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * .......\n     * @returns Promise\n     */\n    Search.prototype.execute = function (query) {\n        var formattedBody;\n        formattedBody = query;\n        if (formattedBody.SelectProperties) {\n            formattedBody.SelectProperties = { results: query.SelectProperties };\n        }\n        if (formattedBody.RefinementFilters) {\n            formattedBody.RefinementFilters = { results: query.RefinementFilters };\n        }\n        if (formattedBody.SortList) {\n            formattedBody.SortList = { results: query.SortList };\n        }\n        if (formattedBody.HithighlightedProperties) {\n            formattedBody.HithighlightedProperties = { results: query.HithighlightedProperties };\n        }\n        if (formattedBody.ReorderingRules) {\n            formattedBody.ReorderingRules = { results: query.ReorderingRules };\n        }\n        if (formattedBody.Properties) {\n            formattedBody.Properties = { results: query.Properties };\n        }\n        var postBody = JSON.stringify({\n            request: util_1.Util.extend({\n                \""__metadata\"": { \""type\"": \""Microsoft.Office.Server.Search.REST.SearchRequest\"" },\n            }, formattedBody),\n        });\n        return this.post({ body: postBody }).then(function (data) { return new SearchResults(data); });\n    };\n    return Search;\n}(queryable_1.QueryableInstance));\nexports.Search = Search;\n/**\n * Describes the SearchResults class, which returns the formatted and raw version of the query response\n */\nvar SearchResults = (function () {\n    /**\n     * Creates a new instance of the SearchResult class\n     *\n     */\n    function SearchResults(rawResponse) {\n        var response = rawResponse.postquery ? rawResponse.postquery : rawResponse;\n        this.PrimarySearchResults = this.formatSearchResults(response.PrimaryQueryResult.RelevantResults.Table.Rows);\n        this.RawSearchResults = response;\n        this.ElapsedTime = response.ElapsedTime;\n        this.RowCount = response.PrimaryQueryResult.RelevantResults.RowCount;\n        this.TotalRows = response.PrimaryQueryResult.RelevantResults.TotalRows;\n        this.TotalRowsIncludingDuplicates = response.PrimaryQueryResult.RelevantResults.TotalRowsIncludingDuplicates;\n    }\n    /**\n     * Formats a search results array\n     *\n     * @param rawResults The array to process\n     */\n    SearchResults.prototype.formatSearchResults = function (rawResults) {\n        var results = new Array(), tempResults = rawResults.results ? rawResults.results : rawResults;\n        for (var _i = 0, tempResults_1 = tempResults; _i < tempResults_1.length; _i++) {\n            var i = tempResults_1[_i];\n            results.push(new SearchResult(i.Cells));\n        }\n        return results;\n    };\n    return SearchResults;\n}());\nexports.SearchResults = SearchResults;\n/**\n * Describes the SearchResult class\n */\nvar SearchResult = (function () {\n    /**\n     * Creates a new instance of the SearchResult class\n     *\n     */\n    function SearchResult(rawItem) {\n        var item = rawItem.results ? rawItem.results : rawItem;\n        for (var _i = 0, item_1 = item; _i < item_1.length; _i++) {\n            var i = item_1[_i];\n            Object.defineProperty(this, i.Key, {\n                configurable: false,\n                enumerable: false,\n                value: i.Value,\n                writable: false,\n            });\n        }\n    }\n    return SearchResult;\n}());\nexports.SearchResult = SearchResult;\n/**\n * defines the SortDirection enum\n */\nvar SortDirection;\n(function (SortDirection) {\n    SortDirection[SortDirection[\""Ascending\""] = 0] = \""Ascending\"";\n    SortDirection[SortDirection[\""Descending\""] = 1] = \""Descending\"";\n    SortDirection[SortDirection[\""FQLFormula\""] = 2] = \""FQLFormula\"";\n})(SortDirection = exports.SortDirection || (exports.SortDirection = {}));\n/**\n * defines the ReorderingRuleMatchType  enum\n */\nvar ReorderingRuleMatchType;\n(function (ReorderingRuleMatchType) {\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ResultContainsKeyword\""] = 0] = \""ResultContainsKeyword\"";\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""TitleContainsKeyword\""] = 1] = \""TitleContainsKeyword\"";\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""TitleMatchesKeyword\""] = 2] = \""TitleMatchesKeyword\"";\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""UrlStartsWith\""] = 3] = \""UrlStartsWith\"";\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""UrlExactlyMatches\""] = 4] = \""UrlExactlyMatches\"";\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ContentTypeIs\""] = 5] = \""ContentTypeIs\"";\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""FileExtensionMatches\""] = 6] = \""FileExtensionMatches\"";\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ResultHasTag\""] = 7] = \""ResultHasTag\"";\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ManualCondition\""] = 8] = \""ManualCondition\"";\n})(ReorderingRuleMatchType = exports.ReorderingRuleMatchType || (exports.ReorderingRuleMatchType = {}));\n/**\n * Specifies the type value for the property\n */\nvar QueryPropertyValueType;\n(function (QueryPropertyValueType) {\n    QueryPropertyValueType[QueryPropertyValueType[\""None\""] = 0] = \""None\"";\n    QueryPropertyValueType[QueryPropertyValueType[\""StringType\""] = 1] = \""StringType\"";\n    QueryPropertyValueType[QueryPropertyValueType[\""Int32TYpe\""] = 2] = \""Int32TYpe\"";\n    QueryPropertyValueType[QueryPropertyValueType[\""BooleanType\""] = 3] = \""BooleanType\"";\n    QueryPropertyValueType[QueryPropertyValueType[\""StringArrayType\""] = 4] = \""StringArrayType\"";\n    QueryPropertyValueType[QueryPropertyValueType[\""UnSupportedType\""] = 5] = \""UnSupportedType\"";\n})(QueryPropertyValueType = exports.QueryPropertyValueType || (exports.QueryPropertyValueType = {}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/search.js\n// module id = 27\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar SearchSuggest = (function (_super) {\n    __extends(SearchSuggest, _super);\n    function SearchSuggest(baseUrl, path) {\n        if (path === void 0) { path = \""_api/search/suggest\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    SearchSuggest.prototype.execute = function (query) {\n        this.mapQueryToQueryString(query);\n        return this.get().then(function (response) { return new SearchSuggestResult(response); });\n    };\n    SearchSuggest.prototype.mapQueryToQueryString = function (query) {\n        this.query.add(\""querytext\"", \""'\"" + query.querytext + \""'\"");\n        if (query.hasOwnProperty(\""count\"")) {\n            this.query.add(\""inumberofquerysuggestions\"", query.count.toString());\n        }\n        if (query.hasOwnProperty(\""personalCount\"")) {\n            this.query.add(\""inumberofresultsuggestions\"", query.personalCount.toString());\n        }\n        if (query.hasOwnProperty(\""preQuery\"")) {\n            this.query.add(\""fprequerysuggestions\"", query.preQuery.toString());\n        }\n        if (query.hasOwnProperty(\""hitHighlighting\"")) {\n            this.query.add(\""fhithighlighting\"", query.hitHighlighting.toString());\n        }\n        if (query.hasOwnProperty(\""capitalize\"")) {\n            this.query.add(\""fcapitalizefirstletters\"", query.capitalize.toString());\n        }\n        if (query.hasOwnProperty(\""culture\"")) {\n            this.query.add(\""culture\"", query.culture.toString());\n        }\n        if (query.hasOwnProperty(\""stemming\"")) {\n            this.query.add(\""enablestemming\"", query.stemming.toString());\n        }\n        if (query.hasOwnProperty(\""includePeople\"")) {\n            this.query.add(\""showpeoplenamesuggestions\"", query.includePeople.toString());\n        }\n        if (query.hasOwnProperty(\""queryRules\"")) {\n            this.query.add(\""enablequeryrules\"", query.queryRules.toString());\n        }\n        if (query.hasOwnProperty(\""prefixMatch\"")) {\n            this.query.add(\""fprefixmatchallterms\"", query.prefixMatch.toString());\n        }\n    };\n    return SearchSuggest;\n}(queryable_1.QueryableInstance));\nexports.SearchSuggest = SearchSuggest;\nvar SearchSuggestResult = (function () {\n    function SearchSuggestResult(json) {\n        if (json.hasOwnProperty(\""suggest\"")) {\n            // verbose\n            this.PeopleNames = json.suggest.PeopleNames.results;\n            this.PersonalResults = json.suggest.PersonalResults.results;\n            this.Queries = json.suggest.Queries.results;\n        }\n        else {\n            this.PeopleNames = json.PeopleNames;\n            this.PersonalResults = json.PersonalResults;\n            this.Queries = json.Queries;\n        }\n    }\n    return SearchSuggestResult;\n}());\nexports.SearchSuggestResult = SearchSuggestResult;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/searchsuggest.js\n// module id = 28\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar webs_1 = require(\""./webs\"");\nvar usercustomactions_1 = require(\""./usercustomactions\"");\nvar odata_1 = require(\""./odata\"");\nvar features_1 = require(\""./features\"");\n/**\n * Describes a site collection\n *\n */\nvar Site = (function (_super) {\n    __extends(Site, _super);\n    /**\n     * Creates a new instance of the RoleAssignments class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Site(baseUrl, path) {\n        if (path === void 0) { path = \""_api/site\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    Object.defineProperty(Site.prototype, \""rootWeb\"", {\n        /**\n         * Gets the root web of the site collection\n         *\n         */\n        get: function () {\n            return new webs_1.Web(this, \""rootweb\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Site.prototype, \""features\"", {\n        /**\n         * Gets the active features for this site\n         *\n         */\n        get: function () {\n            return new features_1.Features(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Site.prototype, \""userCustomActions\"", {\n        /**\n         * Get all custom actions on a site collection\n         *\n         */\n        get: function () {\n            return new usercustomactions_1.UserCustomActions(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Gets the context information for the site.\n     */\n    Site.prototype.getContextInfo = function () {\n        var q = new Site(this.parentUrl, \""_api/contextinfo\"");\n        return q.post().then(function (data) {\n            if (data.hasOwnProperty(\""GetContextWebInformation\"")) {\n                var info = data.GetContextWebInformation;\n                info.SupportedSchemaVersions = info.SupportedSchemaVersions.results;\n                return info;\n            }\n            else {\n                return data;\n            }\n        });\n    };\n    /**\n     * Gets the document libraries on a site. Static method. (SharePoint Online only)\n     *\n     * @param absoluteWebUrl The absolute url of the web whose document libraries should be returned\n     */\n    Site.prototype.getDocumentLibraries = function (absoluteWebUrl) {\n        var q = new queryable_1.Queryable(\""\"", \""_api/sp.web.getdocumentlibraries(@v)\"");\n        q.query.add(\""@v\"", \""'\"" + absoluteWebUrl + \""'\"");\n        return q.get().then(function (data) {\n            if (data.hasOwnProperty(\""GetDocumentLibraries\"")) {\n                return data.GetDocumentLibraries;\n            }\n            else {\n                return data;\n            }\n        });\n    };\n    /**\n     * Gets the site URL from a page URL.\n     *\n     * @param absolutePageUrl The absolute url of the page\n     */\n    Site.prototype.getWebUrlFromPageUrl = function (absolutePageUrl) {\n        var q = new queryable_1.Queryable(\""\"", \""_api/sp.web.getweburlfrompageurl(@v)\"");\n        q.query.add(\""@v\"", \""'\"" + absolutePageUrl + \""'\"");\n        return q.get().then(function (data) {\n            if (data.hasOwnProperty(\""GetWebUrlFromPageUrl\"")) {\n                return data.GetWebUrlFromPageUrl;\n            }\n            else {\n                return data;\n            }\n        });\n    };\n    /**\n     * Creates a new batch for requests within the context of context this site\n     *\n     */\n    Site.prototype.createBatch = function () {\n        return new odata_1.ODataBatch(this.parentUrl);\n    };\n    return Site;\n}(queryable_1.QueryableInstance));\nexports.Site = Site;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/site.js\n// module id = 29\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar sitegroups_1 = require(\""./sitegroups\"");\nvar util_1 = require(\""../utils/util\"");\n/**\n * Describes a collection of all site collection users\n *\n */\nvar SiteUsers = (function (_super) {\n    __extends(SiteUsers, _super);\n    /**\n     * Creates a new instance of the Users class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this user collection\n     */\n    function SiteUsers(baseUrl, path) {\n        if (path === void 0) { path = \""siteusers\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a user from the collection by email\n     *\n     * @param email The email of the user\n     */\n    SiteUsers.prototype.getByEmail = function (email) {\n        return new SiteUser(this, \""getByEmail('\"" + email + \""')\"");\n    };\n    /**\n     * Gets a user from the collection by id\n     *\n     * @param id The id of the user\n     */\n    SiteUsers.prototype.getById = function (id) {\n        return new SiteUser(this, \""getById(\"" + id + \"")\"");\n    };\n    /**\n     * Gets a user from the collection by login name\n     *\n     * @param loginName The email address of the user\n     */\n    SiteUsers.prototype.getByLoginName = function (loginName) {\n        var su = new SiteUser(this);\n        su.concat(\""(@v)\"");\n        su.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return su;\n    };\n    /**\n     * Removes a user from the collection by id\n     *\n     * @param id The id of the user\n     */\n    SiteUsers.prototype.removeById = function (id) {\n        return this.clone(SiteUsers, \""removeById(\"" + id + \"")\"", true).post();\n    };\n    /**\n     * Removes a user from the collection by login name\n     *\n     * @param loginName The login name of the user\n     */\n    SiteUsers.prototype.removeByLoginName = function (loginName) {\n        var o = this.clone(SiteUsers, \""removeByLoginName(@v)\"", true);\n        o.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return o.post();\n    };\n    /**\n     * Add a user to a group\n     *\n     * @param loginName The login name of the user to add to the group\n     *\n     */\n    SiteUsers.prototype.add = function (loginName) {\n        var _this = this;\n        return this.clone(SiteUsers, null, true).post({\n            body: JSON.stringify({ \""__metadata\"": { \""type\"": \""SP.User\"" }, LoginName: loginName }),\n        }).then(function () { return _this.getByLoginName(loginName); });\n    };\n    return SiteUsers;\n}(queryable_1.QueryableCollection));\nexports.SiteUsers = SiteUsers;\n/**\n * Describes a single user\n *\n */\nvar SiteUser = (function (_super) {\n    __extends(SiteUser, _super);\n    function SiteUser() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(SiteUser.prototype, \""groups\"", {\n        /**\n         * Get's the groups for this user.\n         *\n         */\n        get: function () {\n            return new sitegroups_1.SiteGroups(this, \""groups\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n    * Updates this user instance with the supplied properties\n    *\n    * @param properties A plain object of property names and values to update for the user\n    */\n    SiteUser.prototype.update = function (properties) {\n        var _this = this;\n        var postBody = util_1.Util.extend({ \""__metadata\"": { \""type\"": \""SP.User\"" } }, properties);\n        return this.post({\n            body: JSON.stringify(postBody),\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            return {\n                data: data,\n                user: _this,\n            };\n        });\n    };\n    /**\n     * Delete this user\n     *\n     */\n    SiteUser.prototype.delete = function () {\n        return this.post({\n            headers: {\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    return SiteUser;\n}(queryable_1.QueryableInstance));\nexports.SiteUser = SiteUser;\n/**\n * Represents the current user\n */\nvar CurrentUser = (function (_super) {\n    __extends(CurrentUser, _super);\n    function CurrentUser(baseUrl, path) {\n        if (path === void 0) { path = \""currentuser\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    return CurrentUser;\n}(queryable_1.QueryableInstance));\nexports.CurrentUser = CurrentUser;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/siteusers.js\n// module id = 30\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar logging_1 = require(\""./logging\"");\nfunction deprecated(message) {\n    return function (target, propertyKey, descriptor) {\n        var method = descriptor.value;\n        descriptor.value = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            logging_1.Logger.log({\n                data: {\n                    descriptor: descriptor,\n                    propertyKey: propertyKey,\n                    target: target,\n                },\n                level: logging_1.LogLevel.Warning,\n                message: message,\n            });\n            return method.apply(this, args);\n        };\n    };\n}\nexports.deprecated = deprecated;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils/decorators.js\n// module id = 31\n// module chunks = 0"",""var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\""return this\"")() || (1,eval)(\""this\"");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \""object\"")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 32\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar collections_1 = require(\""../collections/collections\"");\n/**\n * Class used to manage the current application settings\n *\n */\nvar Settings = (function () {\n    /**\n     * Creates a new instance of the settings class\n     *\n     * @constructor\n     */\n    function Settings() {\n        this._settings = new collections_1.Dictionary();\n    }\n    /**\n     * Adds a new single setting, or overwrites a previous setting with the same key\n     *\n     * @param {string} key The key used to store this setting\n     * @param {string} value The setting value to store\n     */\n    Settings.prototype.add = function (key, value) {\n        this._settings.add(key, value);\n    };\n    /**\n     * Adds a JSON value to the collection as a string, you must use getJSON to rehydrate the object when read\n     *\n     * @param {string} key The key used to store this setting\n     * @param {any} value The setting value to store\n     */\n    Settings.prototype.addJSON = function (key, value) {\n        this._settings.add(key, JSON.stringify(value));\n    };\n    /**\n     * Applies the supplied hash to the setting collection overwriting any existing value, or created new values\n     *\n     * @param {TypedHash<any>} hash The set of values to add\n     */\n    Settings.prototype.apply = function (hash) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            try {\n                _this._settings.merge(hash);\n                resolve();\n            }\n            catch (e) {\n                reject(e);\n            }\n        });\n    };\n    /**\n     * Loads configuration settings into the collection from the supplied provider and returns a Promise\n     *\n     * @param {IConfigurationProvider} provider The provider from which we will load the settings\n     */\n    Settings.prototype.load = function (provider) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            provider.getConfiguration().then(function (value) {\n                _this._settings.merge(value);\n                resolve();\n            }).catch(function (reason) {\n                reject(reason);\n            });\n        });\n    };\n    /**\n     * Gets a value from the configuration\n     *\n     * @param {string} key The key whose value we want to return. Returns null if the key does not exist\n     * @return {string} string value from the configuration\n     */\n    Settings.prototype.get = function (key) {\n        return this._settings.get(key);\n    };\n    /**\n     * Gets a JSON value, rehydrating the stored string to the original object\n     *\n     * @param {string} key The key whose value we want to return. Returns null if the key does not exist\n     * @return {any} object from the configuration\n     */\n    Settings.prototype.getJSON = function (key) {\n        var o = this.get(key);\n        if (typeof o === \""undefined\"" || o === null) {\n            return o;\n        }\n        return JSON.parse(o);\n    };\n    return Settings;\n}());\nexports.Settings = Settings;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/configuration/configuration.js\n// module id = 33\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar search_1 = require(\""./search\"");\nvar searchsuggest_1 = require(\""./searchsuggest\"");\nvar site_1 = require(\""./site\"");\nvar webs_1 = require(\""./webs\"");\nvar util_1 = require(\""../utils/util\"");\nvar userprofiles_1 = require(\""./userprofiles\"");\nvar exceptions_1 = require(\""../utils/exceptions\"");\n/**\n * Root of the SharePoint REST module\n */\nvar Rest = (function () {\n    function Rest() {\n    }\n    /**\n     * Executes a search against this web context\n     *\n     * @param query The SearchQuery definition\n     */\n    Rest.prototype.searchSuggest = function (query) {\n        var finalQuery;\n        if (typeof query === \""string\"") {\n            finalQuery = { querytext: query };\n        }\n        else {\n            finalQuery = query;\n        }\n        return new searchsuggest_1.SearchSuggest(\""\"").execute(finalQuery);\n    };\n    /**\n     * Executes a search against this web context\n     *\n     * @param query The SearchQuery definition\n     */\n    Rest.prototype.search = function (query) {\n        var finalQuery;\n        if (typeof query === \""string\"") {\n            finalQuery = { Querytext: query };\n        }\n        else {\n            finalQuery = query;\n        }\n        return new search_1.Search(\""\"").execute(finalQuery);\n    };\n    Object.defineProperty(Rest.prototype, \""site\"", {\n        /**\n         * Begins a site collection scoped REST request\n         *\n         */\n        get: function () {\n            return new site_1.Site(\""\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Rest.prototype, \""web\"", {\n        /**\n         * Begins a web scoped REST request\n         *\n         */\n        get: function () {\n            return new webs_1.Web(\""\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Rest.prototype, \""profiles\"", {\n        /**\n         * Access to user profile methods\n         *\n         */\n        get: function () {\n            return new userprofiles_1.UserProfileQuery(\""\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Creates a new batch object for use with the Queryable.addToBatch method\n     *\n     */\n    Rest.prototype.createBatch = function () {\n        return this.web.createBatch();\n    };\n    /**\n     * Begins a cross-domain, host site scoped REST request, for use in add-in webs\n     *\n     * @param addInWebUrl The absolute url of the add-in web\n     * @param hostWebUrl The absolute url of the host web\n     */\n    Rest.prototype.crossDomainSite = function (addInWebUrl, hostWebUrl) {\n        return this._cdImpl(site_1.Site, addInWebUrl, hostWebUrl, \""site\"");\n    };\n    /**\n     * Begins a cross-domain, host web scoped REST request, for use in add-in webs\n     *\n     * @param addInWebUrl The absolute url of the add-in web\n     * @param hostWebUrl The absolute url of the host web\n     */\n    Rest.prototype.crossDomainWeb = function (addInWebUrl, hostWebUrl) {\n        return this._cdImpl(webs_1.Web, addInWebUrl, hostWebUrl, \""web\"");\n    };\n    /**\n     * Implements the creation of cross domain REST urls\n     *\n     * @param factory The constructor of the object to create Site | Web\n     * @param addInWebUrl The absolute url of the add-in web\n     * @param hostWebUrl The absolute url of the host web\n     * @param urlPart String part to append to the url \""site\"" | \""web\""\n     */\n    Rest.prototype._cdImpl = function (factory, addInWebUrl, hostWebUrl, urlPart) {\n        if (!util_1.Util.isUrlAbsolute(addInWebUrl)) {\n            throw new exceptions_1.UrlException(\""The addInWebUrl parameter must be an absolute url.\"");\n        }\n        if (!util_1.Util.isUrlAbsolute(hostWebUrl)) {\n            throw new exceptions_1.UrlException(\""The hostWebUrl parameter must be an absolute url.\"");\n        }\n        var url = util_1.Util.combinePaths(addInWebUrl, \""_api/SP.AppContextSite(@target)\"");\n        var instance = new factory(url, urlPart);\n        instance.query.add(\""@target\"", \""'\"" + encodeURIComponent(hostWebUrl) + \""'\"");\n        return instance;\n    };\n    return Rest;\n}());\nexports.Rest = Rest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/rest.js\n// module id = 34\n// module chunks = 0"",""\""use strict\"";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \""__esModule\"", { value: true });\n__export(require(\""../sharepoint/index\""));\nvar httpclient_1 = require(\""../net/httpclient\"");\nexports.HttpClient = httpclient_1.HttpClient;\nvar sprequestexecutorclient_1 = require(\""../net/sprequestexecutorclient\"");\nexports.SPRequestExecutorClient = sprequestexecutorclient_1.SPRequestExecutorClient;\nvar nodefetchclient_1 = require(\""../net/nodefetchclient\"");\nexports.NodeFetchClient = nodefetchclient_1.NodeFetchClient;\nvar fetchclient_1 = require(\""../net/fetchclient\"");\nexports.FetchClient = fetchclient_1.FetchClient;\n__export(require(\""../configuration/providers/index\""));\nvar collections_1 = require(\""../collections/collections\"");\nexports.Dictionary = collections_1.Dictionary;\nvar util_1 = require(\""../utils/util\"");\nexports.Util = util_1.Util;\n__export(require(\""../utils/logging\""));\n__export(require(\""../utils/exceptions\""));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/types/index.js\n// module id = 35\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar cachingConfigurationProvider_1 = require(\""./cachingConfigurationProvider\"");\nexports.CachingConfigurationProvider = cachingConfigurationProvider_1.default;\nvar spListConfigurationProvider_1 = require(\""./spListConfigurationProvider\"");\nexports.SPListConfigurationProvider = spListConfigurationProvider_1.default;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/configuration/providers/index.js\n// module id = 36\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar cachingConfigurationProvider_1 = require(\""./cachingConfigurationProvider\"");\n/**\n * A configuration provider which loads configuration values from a SharePoint list\n *\n */\nvar SPListConfigurationProvider = (function () {\n    /**\n     * Creates a new SharePoint list based configuration provider\n     * @constructor\n     * @param {string} webUrl Url of the SharePoint site, where the configuration list is located\n     * @param {string} listTitle Title of the SharePoint list, which contains the configuration settings (optional, default = \""config\"")\n     */\n    function SPListConfigurationProvider(sourceWeb, sourceListTitle) {\n        if (sourceListTitle === void 0) { sourceListTitle = \""config\""; }\n        this.sourceWeb = sourceWeb;\n        this.sourceListTitle = sourceListTitle;\n    }\n    Object.defineProperty(SPListConfigurationProvider.prototype, \""web\"", {\n        /**\n         * Gets the url of the SharePoint site, where the configuration list is located\n         *\n         * @return {string} Url address of the site\n         */\n        get: function () {\n            return this.sourceWeb;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(SPListConfigurationProvider.prototype, \""listTitle\"", {\n        /**\n         * Gets the title of the SharePoint list, which contains the configuration settings\n         *\n         * @return {string} List title\n         */\n        get: function () {\n            return this.sourceListTitle;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Loads the configuration values from the SharePoint list\n     *\n     * @return {Promise<TypedHash<string>>} Promise of loaded configuration values\n     */\n    SPListConfigurationProvider.prototype.getConfiguration = function () {\n        return this.web.lists.getByTitle(this.listTitle).items.select(\""Title\"", \""Value\"")\n            .getAs().then(function (data) {\n            return data.reduce(function (configuration, item) {\n                return Object.defineProperty(configuration, item.Title, {\n                    configurable: false,\n                    enumerable: false,\n                    value: item.Value,\n                    writable: false,\n                });\n            }, {});\n        });\n    };\n    /**\n     * Wraps the current provider in a cache enabled provider\n     *\n     * @return {CachingConfigurationProvider} Caching providers which wraps the current provider\n     */\n    SPListConfigurationProvider.prototype.asCaching = function () {\n        var cacheKey = \""splist_\"" + this.web.toUrl() + \""+\"" + this.listTitle;\n        return new cachingConfigurationProvider_1.default(this, cacheKey);\n    };\n    return SPListConfigurationProvider;\n}());\nexports.default = SPListConfigurationProvider;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/configuration/providers/spListConfigurationProvider.js\n// module id = 37\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar collections_1 = require(\""../collections/collections\"");\nvar util_1 = require(\""../utils/util\"");\nvar odata_1 = require(\""../sharepoint/odata\"");\nvar CachedDigest = (function () {\n    function CachedDigest() {\n    }\n    return CachedDigest;\n}());\nexports.CachedDigest = CachedDigest;\n// allows for the caching of digests across all HttpClient's which each have their own DigestCache wrapper.\nvar digests = new collections_1.Dictionary();\nvar DigestCache = (function () {\n    function DigestCache(_httpClient, _digests) {\n        if (_digests === void 0) { _digests = digests; }\n        this._httpClient = _httpClient;\n        this._digests = _digests;\n    }\n    DigestCache.prototype.getDigest = function (webUrl) {\n        var _this = this;\n        var cachedDigest = this._digests.get(webUrl);\n        if (cachedDigest !== null) {\n            var now = new Date();\n            if (now < cachedDigest.expiration) {\n                return Promise.resolve(cachedDigest.value);\n            }\n        }\n        var url = util_1.Util.combinePaths(webUrl, \""/_api/contextinfo\"");\n        return this._httpClient.fetchRaw(url, {\n            cache: \""no-cache\"",\n            credentials: \""same-origin\"",\n            headers: {\n                \""Accept\"": \""application/json;odata=verbose\"",\n                \""Content-type\"": \""application/json;odata=verbose;charset=utf-8\"",\n            },\n            method: \""POST\"",\n        }).then(function (response) {\n            var parser = new odata_1.ODataDefaultParser();\n            return parser.parse(response).then(function (d) { return d.GetContextWebInformation; });\n        }).then(function (data) {\n            var newCachedDigest = new CachedDigest();\n            newCachedDigest.value = data.FormDigestValue;\n            var seconds = data.FormDigestTimeoutSeconds;\n            var expiration = new Date();\n            expiration.setTime(expiration.getTime() + 1000 * seconds);\n            newCachedDigest.expiration = expiration;\n            _this._digests.add(webUrl, newCachedDigest);\n            return newCachedDigest.value;\n        });\n    };\n    DigestCache.prototype.clear = function () {\n        this._digests.clear();\n    };\n    return DigestCache;\n}());\nexports.DigestCache = DigestCache;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/net/digestcache.js\n// module id = 38\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar exceptions_1 = require(\""../utils/exceptions\"");\n/**\n * This module is substituted for the NodeFetchClient.ts during the packaging process. This helps to reduce the pnp.js file size by\n * not including all of the node dependencies\n */\nvar NodeFetchClient = (function () {\n    function NodeFetchClient() {\n    }\n    /**\n     * Always throws an error that NodeFetchClient is not supported for use in the browser\n     */\n    NodeFetchClient.prototype.fetch = function () {\n        throw new exceptions_1.NodeFetchClientUnsupportedException();\n    };\n    return NodeFetchClient;\n}());\nexports.NodeFetchClient = NodeFetchClient;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/net/nodefetchclientbrowser.js\n// module id = 39\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar util_1 = require(\""../utils/util\"");\nvar exceptions_1 = require(\""../utils/exceptions\"");\n/**\n * Makes requests using the SP.RequestExecutor library.\n */\nvar SPRequestExecutorClient = (function () {\n    function SPRequestExecutorClient() {\n        /**\n         * Converts a SharePoint REST API response to a fetch API response.\n         */\n        this.convertToResponse = function (spResponse) {\n            var responseHeaders = new Headers();\n            for (var h in spResponse.headers) {\n                if (spResponse.headers[h]) {\n                    responseHeaders.append(h, spResponse.headers[h]);\n                }\n            }\n            // issue #256, Cannot have an empty string body when creating a Response with status 204\n            var body = spResponse.statusCode === 204 ? null : spResponse.body;\n            return new Response(body, {\n                headers: responseHeaders,\n                status: spResponse.statusCode,\n                statusText: spResponse.statusText,\n            });\n        };\n    }\n    /**\n     * Fetches a URL using the SP.RequestExecutor library.\n     */\n    SPRequestExecutorClient.prototype.fetch = function (url, options) {\n        var _this = this;\n        if (typeof SP === \""undefined\"" || typeof SP.RequestExecutor === \""undefined\"") {\n            throw new exceptions_1.SPRequestExecutorUndefinedException();\n        }\n        var addinWebUrl = url.substring(0, url.indexOf(\""/_api\"")), executor = new SP.RequestExecutor(addinWebUrl);\n        var headers = {}, iterator, temp;\n        if (options.headers && options.headers instanceof Headers) {\n            iterator = options.headers.entries();\n            temp = iterator.next();\n            while (!temp.done) {\n                headers[temp.value[0]] = temp.value[1];\n                temp = iterator.next();\n            }\n        }\n        else {\n            headers = options.headers;\n        }\n        return new Promise(function (resolve, reject) {\n            var requestOptions = {\n                error: function (error) {\n                    reject(_this.convertToResponse(error));\n                },\n                headers: headers,\n                method: options.method,\n                success: function (response) {\n                    resolve(_this.convertToResponse(response));\n                },\n                url: url,\n            };\n            if (options.body) {\n                requestOptions = util_1.Util.extend(requestOptions, { body: options.body });\n            }\n            else {\n                requestOptions = util_1.Util.extend(requestOptions, { binaryStringRequestBody: true });\n            }\n            executor.executeAsync(requestOptions);\n        });\n    };\n    return SPRequestExecutorClient;\n}());\nexports.SPRequestExecutorClient = SPRequestExecutorClient;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/net/sprequestexecutorclient.js\n// module id = 40\n// module chunks = 0"",""\""use strict\"";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar util_1 = require(\""./utils/util\"");\nvar storage_1 = require(\""./utils/storage\"");\nvar configuration_1 = require(\""./configuration/configuration\"");\nvar logging_1 = require(\""./utils/logging\"");\nvar rest_1 = require(\""./sharepoint/rest\"");\nvar pnplibconfig_1 = require(\""./configuration/pnplibconfig\"");\n/**\n * Root class of the Patterns and Practices namespace, provides an entry point to the library\n */\n/**\n * Utility methods\n */\nexports.util = util_1.Util;\n/**\n * Provides access to the REST interface\n */\nexports.sp = new rest_1.Rest();\n/**\n * Provides access to local and session storage\n */\nexports.storage = new storage_1.PnPClientStorage();\n/**\n * Global configuration instance to which providers can be added\n */\nexports.config = new configuration_1.Settings();\n/**\n * Global logging instance to which subscribers can be registered and messages written\n */\nexports.log = logging_1.Logger;\n/**\n * Allows for the configuration of the library\n */\nexports.setup = pnplibconfig_1.setRuntimeConfig;\n/**\n * Expose a subset of classes from the library for public consumption\n */\n__export(require(\""./types/index\""));\n// creating this class instead of directly assigning to default fixes issue #116\nvar Def = {\n    /**\n     * Global configuration instance to which providers can be added\n     */\n    config: exports.config,\n    /**\n     * Global logging instance to which subscribers can be registered and messages written\n     */\n    log: exports.log,\n    /**\n     * Provides access to local and session storage\n     */\n    setup: exports.setup,\n    /**\n     * Provides access to the REST interface\n     */\n    sp: exports.sp,\n    /**\n     * Provides access to local and session storage\n     */\n    storage: exports.storage,\n    /**\n     * Utility methods\n     */\n    util: exports.util,\n};\n/**\n * Enables use of the import pnp from syntax\n */\nexports.default = Def;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/pnp.js\n// module id = 41\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar odata_1 = require(\""./odata\"");\n/**\n * Describes a collection of Item objects\n *\n */\nvar AttachmentFiles = (function (_super) {\n    __extends(AttachmentFiles, _super);\n    /**\n     * Creates a new instance of the AttachmentFiles class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this attachments collection\n     */\n    function AttachmentFiles(baseUrl, path) {\n        if (path === void 0) { path = \""AttachmentFiles\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a Attachment File by filename\n     *\n     * @param name The name of the file, including extension.\n     */\n    AttachmentFiles.prototype.getByName = function (name) {\n        var f = new AttachmentFile(this);\n        f.concat(\""('\"" + name + \""')\"");\n        return f;\n    };\n    /**\n     * Adds a new attachment to the collection. Not supported for batching.\n     *\n     * @param name The name of the file, including extension.\n     * @param content The Base64 file content.\n     */\n    AttachmentFiles.prototype.add = function (name, content) {\n        var _this = this;\n        return this.clone(AttachmentFiles, \""add(FileName='\"" + name + \""')\"").post({\n            body: content,\n        }).then(function (response) {\n            return {\n                data: response,\n                file: _this.getByName(name),\n            };\n        });\n    };\n    /**\n     * Adds mjultiple new attachment to the collection. Not supported for batching.\n     *\n     * @files name The collection of files to add\n     */\n    AttachmentFiles.prototype.addMultiple = function (files) {\n        var _this = this;\n        // add the files in series so we don't get update conflicts\n        return files.reduce(function (chain, file) { return chain.then(function () { return _this.clone(AttachmentFiles, \""add(FileName='\"" + file.name + \""')\"").post({\n            body: file.content,\n        }); }); }, Promise.resolve());\n    };\n    return AttachmentFiles;\n}(queryable_1.QueryableCollection));\nexports.AttachmentFiles = AttachmentFiles;\n/**\n * Describes a single attachment file instance\n *\n */\nvar AttachmentFile = (function (_super) {\n    __extends(AttachmentFile, _super);\n    function AttachmentFile() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Gets the contents of the file as text\n     *\n     */\n    AttachmentFile.prototype.getText = function () {\n        return this.clone(AttachmentFile, \""$value\"").get(new odata_1.TextFileParser());\n    };\n    /**\n     * Gets the contents of the file as a blob, does not work in Node.js\n     *\n     */\n    AttachmentFile.prototype.getBlob = function () {\n        return this.clone(AttachmentFile, \""$value\"").get(new odata_1.BlobFileParser());\n    };\n    /**\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js\n     */\n    AttachmentFile.prototype.getBuffer = function () {\n        return this.clone(AttachmentFile, \""$value\"").get(new odata_1.BufferFileParser());\n    };\n    /**\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js\n     */\n    AttachmentFile.prototype.getJSON = function () {\n        return this.clone(AttachmentFile, \""$value\"").get(new odata_1.JSONFileParser());\n    };\n    /**\n     * Sets the content of a file. Not supported for batching\n     *\n     * @param content The value to set for the file contents\n     */\n    AttachmentFile.prototype.setContent = function (content) {\n        var _this = this;\n        return this.clone(AttachmentFile, \""$value\"").post({\n            body: content,\n            headers: {\n                \""X-HTTP-Method\"": \""PUT\"",\n            },\n        }).then(function (_) { return new AttachmentFile(_this); });\n    };\n    /**\n     * Delete this attachment file\n     *\n     * @param eTag Value used in the IF-Match header, by default \""*\""\n     */\n    AttachmentFile.prototype.delete = function (eTag) {\n        if (eTag === void 0) { eTag = \""*\""; }\n        return this.post({\n            headers: {\n                \""IF-Match\"": eTag,\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    return AttachmentFile;\n}(queryable_1.QueryableInstance));\nexports.AttachmentFile = AttachmentFile;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/attachmentfiles.js\n// module id = 42\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\n/**\n * Describes a collection of Field objects\n *\n */\nvar Forms = (function (_super) {\n    __extends(Forms, _super);\n    /**\n     * Creates a new instance of the Fields class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Forms(baseUrl, path) {\n        if (path === void 0) { path = \""forms\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a form by id\n     *\n     * @param id The guid id of the item to retrieve\n     */\n    Forms.prototype.getById = function (id) {\n        var i = new Form(this);\n        i.concat(\""('\"" + id + \""')\"");\n        return i;\n    };\n    return Forms;\n}(queryable_1.QueryableCollection));\nexports.Forms = Forms;\n/**\n * Describes a single of Form instance\n *\n */\nvar Form = (function (_super) {\n    __extends(Form, _super);\n    function Form() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return Form;\n}(queryable_1.QueryableInstance));\nexports.Form = Form;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/forms.js\n// module id = 43\n// module chunks = 0"",""\""use strict\"";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \""__esModule\"", { value: true });\n__export(require(\""./caching\""));\nvar files_1 = require(\""./files\"");\nexports.CheckinType = files_1.CheckinType;\nexports.WebPartsPersonalizationScope = files_1.WebPartsPersonalizationScope;\nexports.MoveOperations = files_1.MoveOperations;\nexports.TemplateFileType = files_1.TemplateFileType;\nvar folders_1 = require(\""./folders\"");\nexports.Folder = folders_1.Folder;\nexports.Folders = folders_1.Folders;\nvar items_1 = require(\""./items\"");\nexports.Item = items_1.Item;\nexports.Items = items_1.Items;\nexports.PagedItemCollection = items_1.PagedItemCollection;\nvar navigation_1 = require(\""./navigation\"");\nexports.NavigationNodes = navigation_1.NavigationNodes;\nexports.NavigationNode = navigation_1.NavigationNode;\nvar lists_1 = require(\""./lists\"");\nexports.List = lists_1.List;\nexports.Lists = lists_1.Lists;\nvar odata_1 = require(\""./odata\"");\nexports.extractOdataId = odata_1.extractOdataId;\nexports.ODataParserBase = odata_1.ODataParserBase;\nexports.ODataDefaultParser = odata_1.ODataDefaultParser;\nexports.ODataRaw = odata_1.ODataRaw;\nexports.ODataValue = odata_1.ODataValue;\nexports.ODataEntity = odata_1.ODataEntity;\nexports.ODataEntityArray = odata_1.ODataEntityArray;\nexports.TextFileParser = odata_1.TextFileParser;\nexports.BlobFileParser = odata_1.BlobFileParser;\nexports.BufferFileParser = odata_1.BufferFileParser;\nexports.JSONFileParser = odata_1.JSONFileParser;\nvar queryable_1 = require(\""./queryable\"");\nexports.Queryable = queryable_1.Queryable;\nexports.QueryableInstance = queryable_1.QueryableInstance;\nexports.QueryableCollection = queryable_1.QueryableCollection;\nvar roles_1 = require(\""./roles\"");\nexports.RoleDefinitionBindings = roles_1.RoleDefinitionBindings;\nvar search_1 = require(\""./search\"");\nexports.Search = search_1.Search;\nexports.SearchResult = search_1.SearchResult;\nexports.SearchResults = search_1.SearchResults;\nexports.SortDirection = search_1.SortDirection;\nexports.ReorderingRuleMatchType = search_1.ReorderingRuleMatchType;\nexports.QueryPropertyValueType = search_1.QueryPropertyValueType;\nvar searchsuggest_1 = require(\""./searchsuggest\"");\nexports.SearchSuggest = searchsuggest_1.SearchSuggest;\nexports.SearchSuggestResult = searchsuggest_1.SearchSuggestResult;\nvar site_1 = require(\""./site\"");\nexports.Site = site_1.Site;\n__export(require(\""./types\""));\nvar webs_1 = require(\""./webs\"");\nexports.Web = webs_1.Web;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/index.js\n// module id = 44\n// module chunks = 0"",""\""use strict\"";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \""object\"" && typeof Reflect.decorate === \""function\"") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar caching_1 = require(\""./caching\"");\nvar httpclient_1 = require(\""../net/httpclient\"");\nvar logging_1 = require(\""../utils/logging\"");\nvar util_1 = require(\""../utils/util\"");\n/**\n * Resolves the context's result value\n *\n * @param context The current context\n */\nfunction returnResult(context) {\n    logging_1.Logger.log({\n        data: context.result,\n        level: logging_1.LogLevel.Verbose,\n        message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Returning result, see data property for value.\"",\n    });\n    return Promise.resolve(context.result);\n}\n/**\n * Sets the result on the context\n */\nfunction setResult(context, value) {\n    return new Promise(function (resolve) {\n        context.result = value;\n        context.hasResult = true;\n        resolve(context);\n    });\n}\nexports.setResult = setResult;\n/**\n * Invokes the next method in the provided context's pipeline\n *\n * @param c The current request context\n */\nfunction next(c) {\n    if (c.pipeline.length < 1) {\n        return Promise.resolve(c);\n    }\n    return c.pipeline.shift()(c);\n}\n/**\n * Executes the current request context's pipeline\n *\n * @param context Current context\n */\nfunction pipe(context) {\n    return next(context)\n        .then(function (ctx) { return returnResult(ctx); })\n        .catch(function (e) {\n        logging_1.Logger.log({\n            data: e,\n            level: logging_1.LogLevel.Error,\n            message: \""Error in request pipeline: \"" + e.message,\n        });\n        throw e;\n    });\n}\nexports.pipe = pipe;\n/**\n * decorator factory applied to methods in the pipeline to control behavior\n */\nfunction requestPipelineMethod(alwaysRun) {\n    if (alwaysRun === void 0) { alwaysRun = false; }\n    return function (target, propertyKey, descriptor) {\n        var method = descriptor.value;\n        descriptor.value = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            // if we have a result already in the pipeline, pass it along and don't call the tagged method\n            if (!alwaysRun && args.length > 0 && args[0].hasOwnProperty(\""hasResult\"") && args[0].hasResult) {\n                logging_1.Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Skipping request pipeline method \"" + propertyKey + \"", existing result in pipeline.\"", logging_1.LogLevel.Verbose);\n                return Promise.resolve(args[0]);\n            }\n            // apply the tagged method\n            logging_1.Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Calling request pipeline method \"" + propertyKey + \"".\"", logging_1.LogLevel.Verbose);\n            // then chain the next method in the context's pipeline - allows for dynamic pipeline\n            return method.apply(target, args).then(function (ctx) { return next(ctx); });\n        };\n    };\n}\nexports.requestPipelineMethod = requestPipelineMethod;\n/**\n * Contains the methods used within the request pipeline\n */\nvar PipelineMethods = (function () {\n    function PipelineMethods() {\n    }\n    /**\n     * Logs the start of the request\n     */\n    PipelineMethods.logStart = function (context) {\n        return new Promise(function (resolve) {\n            logging_1.Logger.log({\n                data: logging_1.Logger.activeLogLevel === logging_1.LogLevel.Info ? {} : context,\n                level: logging_1.LogLevel.Info,\n                message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Beginning \"" + context.verb + \"" request (\"" + context.requestAbsoluteUrl + \"")\"",\n            });\n            resolve(context);\n        });\n    };\n    /**\n     * Handles caching of the request\n     */\n    PipelineMethods.caching = function (context) {\n        return new Promise(function (resolve) {\n            // handle caching, if applicable\n            if (context.verb === \""GET\"" && context.isCached) {\n                logging_1.Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Caching is enabled for request, checking cache...\"", logging_1.LogLevel.Info);\n                var cacheOptions = new caching_1.CachingOptions(context.requestAbsoluteUrl.toLowerCase());\n                if (typeof context.cachingOptions !== \""undefined\"") {\n                    cacheOptions = util_1.Util.extend(cacheOptions, context.cachingOptions);\n                }\n                // we may not have a valid store\n                if (cacheOptions.store !== null) {\n                    // check if we have the data in cache and if so resolve the promise and return\n                    var data = cacheOptions.store.get(cacheOptions.key);\n                    if (data !== null) {\n                        // ensure we clear any help batch dependency we are resolving from the cache\n                        logging_1.Logger.log({\n                            data: logging_1.Logger.activeLogLevel === logging_1.LogLevel.Info ? {} : data,\n                            level: logging_1.LogLevel.Info,\n                            message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value returned from cache.\"",\n                        });\n                        context.batchDependency();\n                        return setResult(context, data).then(function (ctx) { return resolve(ctx); });\n                    }\n                }\n                logging_1.Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value not found in cache.\"", logging_1.LogLevel.Info);\n                // if we don't then wrap the supplied parser in the caching parser wrapper\n                // and send things on their way\n                context.parser = new caching_1.CachingParserWrapper(context.parser, cacheOptions);\n            }\n            return resolve(context);\n        });\n    };\n    /**\n     * Sends the request\n     */\n    PipelineMethods.send = function (context) {\n        return new Promise(function (resolve, reject) {\n            // send or batch the request\n            if (context.isBatched) {\n                // we are in a batch, so add to batch, remove dependency, and resolve with the batch's promise\n                var p = context.batch.add(context.requestAbsoluteUrl, context.verb, context.options, context.parser);\n                // we release the dependency here to ensure the batch does not execute until the request is added to the batch\n                context.batchDependency();\n                logging_1.Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Batching request in batch \"" + context.batch.batchId + \"".\"", logging_1.LogLevel.Info);\n                // we set the result as the promise which will be resolved by the batch's execution\n                resolve(setResult(context, p));\n            }\n            else {\n                logging_1.Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Sending request.\"", logging_1.LogLevel.Info);\n                // we are not part of a batch, so proceed as normal\n                var client = new httpclient_1.HttpClient();\n                var opts = util_1.Util.extend(context.options || {}, { method: context.verb });\n                client.fetch(context.requestAbsoluteUrl, opts)\n                    .then(function (response) { return context.parser.parse(response); })\n                    .then(function (result) { return setResult(context, result); })\n                    .then(function (ctx) { return resolve(ctx); })\n                    .catch(function (e) { return reject(e); });\n            }\n        });\n    };\n    /**\n     * Logs the end of the request\n     */\n    PipelineMethods.logEnd = function (context) {\n        return new Promise(function (resolve) {\n            if (context.isBatched) {\n                logging_1.Logger.log({\n                    data: logging_1.Logger.activeLogLevel === logging_1.LogLevel.Info ? {} : context,\n                    level: logging_1.LogLevel.Info,\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") \"" + context.verb + \"" request will complete in batch \"" + context.batch.batchId + \"".\"",\n                });\n            }\n            else {\n                logging_1.Logger.log({\n                    data: logging_1.Logger.activeLogLevel === logging_1.LogLevel.Info ? {} : context,\n                    level: logging_1.LogLevel.Info,\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Completing \"" + context.verb + \"" request.\"",\n                });\n            }\n            resolve(context);\n        });\n    };\n    Object.defineProperty(PipelineMethods, \""default\"", {\n        get: function () {\n            return [\n                PipelineMethods.logStart,\n                PipelineMethods.caching,\n                PipelineMethods.send,\n                PipelineMethods.logEnd,\n            ];\n        },\n        enumerable: true,\n        configurable: true\n    });\n    return PipelineMethods;\n}());\n__decorate([\n    requestPipelineMethod(true)\n], PipelineMethods, \""logStart\"", null);\n__decorate([\n    requestPipelineMethod()\n], PipelineMethods, \""caching\"", null);\n__decorate([\n    requestPipelineMethod()\n], PipelineMethods, \""send\"", null);\n__decorate([\n    requestPipelineMethod(true)\n], PipelineMethods, \""logEnd\"", null);\nexports.PipelineMethods = PipelineMethods;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/pipeline.js\n// module id = 45\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar RelatedItemManagerImpl = (function (_super) {\n    __extends(RelatedItemManagerImpl, _super);\n    function RelatedItemManagerImpl(baseUrl, path) {\n        if (path === void 0) { path = \""_api/SP.RelatedItemManager\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    RelatedItemManagerImpl.FromUrl = function (url) {\n        if (url === null) {\n            return new RelatedItemManagerImpl(\""\"");\n        }\n        var index = url.indexOf(\""_api/\"");\n        if (index > -1) {\n            return new RelatedItemManagerImpl(url.substr(0, index));\n        }\n        return new RelatedItemManagerImpl(url);\n    };\n    RelatedItemManagerImpl.prototype.getRelatedItems = function (sourceListName, sourceItemId) {\n        var query = this.clone(RelatedItemManagerImpl, null, true);\n        query.concat(\"".GetRelatedItems\"");\n        return query.post({\n            body: JSON.stringify({\n                SourceItemID: sourceItemId,\n                SourceListName: sourceListName,\n            }),\n        });\n    };\n    RelatedItemManagerImpl.prototype.getPageOneRelatedItems = function (sourceListName, sourceItemId) {\n        var query = this.clone(RelatedItemManagerImpl, null, true);\n        query.concat(\"".GetPageOneRelatedItems\"");\n        return query.post({\n            body: JSON.stringify({\n                SourceItemID: sourceItemId,\n                SourceListName: sourceListName,\n            }),\n        });\n    };\n    RelatedItemManagerImpl.prototype.addSingleLink = function (sourceListName, sourceItemId, sourceWebUrl, targetListName, targetItemID, targetWebUrl, tryAddReverseLink) {\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\n        var query = this.clone(RelatedItemManagerImpl, null, true);\n        query.concat(\"".AddSingleLink\"");\n        return query.post({\n            body: JSON.stringify({\n                SourceItemID: sourceItemId,\n                SourceListName: sourceListName,\n                SourceWebUrl: sourceWebUrl,\n                TargetItemID: targetItemID,\n                TargetListName: targetListName,\n                TargetWebUrl: targetWebUrl,\n                TryAddReverseLink: tryAddReverseLink,\n            }),\n        });\n    };\n    /**\n     * Adds a related item link from an item specified by list name and item id, to an item specified by url\n     *\n     * @param sourceListName The source list name or list id\n     * @param sourceItemId The source item id\n     * @param targetItemUrl The target item url\n     * @param tryAddReverseLink If set to true try to add the reverse link (will not return error if it fails)\n     */\n    RelatedItemManagerImpl.prototype.addSingleLinkToUrl = function (sourceListName, sourceItemId, targetItemUrl, tryAddReverseLink) {\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\n        var query = this.clone(RelatedItemManagerImpl, null, true);\n        query.concat(\"".AddSingleLinkToUrl\"");\n        return query.post({\n            body: JSON.stringify({\n                SourceItemID: sourceItemId,\n                SourceListName: sourceListName,\n                TargetItemUrl: targetItemUrl,\n                TryAddReverseLink: tryAddReverseLink,\n            }),\n        });\n    };\n    /**\n     * Adds a related item link from an item specified by url, to an item specified by list name and item id\n     *\n     * @param sourceItemUrl The source item url\n     * @param targetListName The target list name or list id\n     * @param targetItemId The target item id\n     * @param tryAddReverseLink If set to true try to add the reverse link (will not return error if it fails)\n     */\n    RelatedItemManagerImpl.prototype.addSingleLinkFromUrl = function (sourceItemUrl, targetListName, targetItemId, tryAddReverseLink) {\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\n        var query = this.clone(RelatedItemManagerImpl, null, true);\n        query.concat(\"".AddSingleLinkFromUrl\"");\n        return query.post({\n            body: JSON.stringify({\n                SourceItemUrl: sourceItemUrl,\n                TargetItemID: targetItemId,\n                TargetListName: targetListName,\n                TryAddReverseLink: tryAddReverseLink,\n            }),\n        });\n    };\n    RelatedItemManagerImpl.prototype.deleteSingleLink = function (sourceListName, sourceItemId, sourceWebUrl, targetListName, targetItemId, targetWebUrl, tryDeleteReverseLink) {\n        if (tryDeleteReverseLink === void 0) { tryDeleteReverseLink = false; }\n        var query = this.clone(RelatedItemManagerImpl, null, true);\n        query.concat(\"".DeleteSingleLink\"");\n        return query.post({\n            body: JSON.stringify({\n                SourceItemID: sourceItemId,\n                SourceListName: sourceListName,\n                SourceWebUrl: sourceWebUrl,\n                TargetItemID: targetItemId,\n                TargetListName: targetListName,\n                TargetWebUrl: targetWebUrl,\n                TryDeleteReverseLink: tryDeleteReverseLink,\n            }),\n        });\n    };\n    return RelatedItemManagerImpl;\n}(queryable_1.Queryable));\nexports.RelatedItemManagerImpl = RelatedItemManagerImpl;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/relateditems.js\n// module id = 46\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\n/**\n * Describes a collection of webhook subscriptions\n *\n */\nvar Subscriptions = (function (_super) {\n    __extends(Subscriptions, _super);\n    /**\n     * Creates a new instance of the Subscriptions class\n     *\n     * @param baseUrl - The url or Queryable which forms the parent of this webhook subscriptions collection\n     */\n    function Subscriptions(baseUrl, path) {\n        if (path === void 0) { path = \""subscriptions\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Returns all the webhook subscriptions or the specified webhook subscription\n     *\n     */\n    Subscriptions.prototype.getById = function (subscriptionId) {\n        var subscription = new Subscription(this);\n        subscription.concat(\""('\"" + subscriptionId + \""')\"");\n        return subscription;\n    };\n    /**\n     * Create a new webhook subscription\n     *\n     */\n    Subscriptions.prototype.add = function (notificationUrl, expirationDate, clientState) {\n        var _this = this;\n        var postBody = JSON.stringify({\n            \""clientState\"": clientState || \""pnp-js-core-subscription\"",\n            \""expirationDateTime\"": expirationDate,\n            \""notificationUrl\"": notificationUrl,\n            \""resource\"": this.toUrl(),\n        });\n        return this.post({ body: postBody, headers: { \""Content-Type\"": \""application/json\"" } }).then(function (result) {\n            return { data: result, subscription: _this.getById(result.id) };\n        });\n    };\n    return Subscriptions;\n}(queryable_1.QueryableCollection));\nexports.Subscriptions = Subscriptions;\n/**\n * Describes a single webhook subscription instance\n *\n */\nvar Subscription = (function (_super) {\n    __extends(Subscription, _super);\n    function Subscription() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Update a webhook subscription\n     *\n     */\n    Subscription.prototype.update = function (expirationDate) {\n        var _this = this;\n        var postBody = JSON.stringify({\n            \""expirationDateTime\"": expirationDate,\n        });\n        return this.patch({ body: postBody, headers: { \""Content-Type\"": \""application/json\"" } }).then(function (data) {\n            return { data: data, subscription: _this };\n        });\n    };\n    /**\n     * Remove a webhook subscription\n     *\n     */\n    Subscription.prototype.delete = function () {\n        return _super.prototype.delete.call(this);\n    };\n    return Subscription;\n}(queryable_1.QueryableInstance));\nexports.Subscription = Subscription;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/subscriptions.js\n// module id = 47\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar files_1 = require(\""../utils/files\"");\nvar odata_1 = require(\""./odata\"");\nvar UserProfileQuery = (function (_super) {\n    __extends(UserProfileQuery, _super);\n    function UserProfileQuery(baseUrl, path) {\n        if (path === void 0) { path = \""_api/sp.userprofiles.peoplemanager\""; }\n        var _this = _super.call(this, baseUrl, path) || this;\n        _this.profileLoader = new ProfileLoader(baseUrl);\n        return _this;\n    }\n    Object.defineProperty(UserProfileQuery.prototype, \""editProfileLink\"", {\n        /**\n         * The URL of the edit profile page for the current user.\n         */\n        get: function () {\n            return this.clone(UserProfileQuery, \""EditProfileLink\"").getAs(odata_1.ODataValue());\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(UserProfileQuery.prototype, \""isMyPeopleListPublic\"", {\n        /**\n         * A Boolean value that indicates whether the current user's People I'm Following list is public.\n         */\n        get: function () {\n            return this.clone(UserProfileQuery, \""IsMyPeopleListPublic\"").getAs(odata_1.ODataValue());\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * A Boolean value that indicates whether the current user's People I'm Following list is public.\n     *\n     * @param loginName The account name of the user\n     */\n    UserProfileQuery.prototype.amIFollowedBy = function (loginName) {\n        var q = this.clone(UserProfileQuery, \""amifollowedby(@v)\"", true);\n        q.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return q.get();\n    };\n    /**\n     * Checks whether the current user is following the specified user.\n     *\n     * @param loginName The account name of the user\n     */\n    UserProfileQuery.prototype.amIFollowing = function (loginName) {\n        var q = this.clone(UserProfileQuery, \""amifollowing(@v)\"", true);\n        q.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return q.get();\n    };\n    /**\n     * Gets tags that the user is following.\n     *\n     * @param maxCount The maximum number of tags to get.\n     */\n    UserProfileQuery.prototype.getFollowedTags = function (maxCount) {\n        if (maxCount === void 0) { maxCount = 20; }\n        return this.clone(UserProfileQuery, \""getfollowedtags(\"" + maxCount + \"")\"", true).get();\n    };\n    /**\n     * Gets the people who are following the specified user.\n     *\n     * @param loginName The account name of the user.\n     */\n    UserProfileQuery.prototype.getFollowersFor = function (loginName) {\n        var q = this.clone(UserProfileQuery, \""getfollowersfor(@v)\"", true);\n        q.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return q.get();\n    };\n    Object.defineProperty(UserProfileQuery.prototype, \""myFollowers\"", {\n        /**\n         * Gets the people who are following the current user.\n         *\n         */\n        get: function () {\n            return new queryable_1.QueryableCollection(this, \""getmyfollowers\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(UserProfileQuery.prototype, \""myProperties\"", {\n        /**\n         * Gets user properties for the current user.\n         *\n         */\n        get: function () {\n            return new UserProfileQuery(this, \""getmyproperties\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Gets the people who the specified user is following.\n     *\n     * @param loginName The account name of the user.\n     */\n    UserProfileQuery.prototype.getPeopleFollowedBy = function (loginName) {\n        var q = this.clone(UserProfileQuery, \""getpeoplefollowedby(@v)\"", true);\n        q.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return q.get();\n    };\n    /**\n     * Gets user properties for the specified user.\n     *\n     * @param loginName The account name of the user.\n     */\n    UserProfileQuery.prototype.getPropertiesFor = function (loginName) {\n        var q = this.clone(UserProfileQuery, \""getpropertiesfor(@v)\"", true);\n        q.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return q.get();\n    };\n    Object.defineProperty(UserProfileQuery.prototype, \""trendingTags\"", {\n        /**\n         * Gets the most popular tags.\n         *\n         */\n        get: function () {\n            var q = this.clone(UserProfileQuery, null, true);\n            q.concat(\"".gettrendingtags\"");\n            return q.get();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Gets the specified user profile property for the specified user.\n     *\n     * @param loginName The account name of the user.\n     * @param propertyName The case-sensitive name of the property to get.\n     */\n    UserProfileQuery.prototype.getUserProfilePropertyFor = function (loginName, propertyName) {\n        var q = this.clone(UserProfileQuery, \""getuserprofilepropertyfor(accountname=@v, propertyname='\"" + propertyName + \""')\"", true);\n        q.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return q.get();\n    };\n    /**\n     * Removes the specified user from the user's list of suggested people to follow.\n     *\n     * @param loginName The account name of the user.\n     */\n    UserProfileQuery.prototype.hideSuggestion = function (loginName) {\n        var q = this.clone(UserProfileQuery, \""hidesuggestion(@v)\"", true);\n        q.query.add(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\n        return q.post();\n    };\n    /**\n     * Checks whether the first user is following the second user.\n     *\n     * @param follower The account name of the user who might be following followee.\n     * @param followee The account name of the user who might be followed.\n     */\n    UserProfileQuery.prototype.isFollowing = function (follower, followee) {\n        var q = this.clone(UserProfileQuery, null, true);\n        q.concat(\"".isfollowing(possiblefolloweraccountname=@v, possiblefolloweeaccountname=@y)\"");\n        q.query.add(\""@v\"", \""'\"" + encodeURIComponent(follower) + \""'\"");\n        q.query.add(\""@y\"", \""'\"" + encodeURIComponent(followee) + \""'\"");\n        return q.get();\n    };\n    /**\n     * Uploads and sets the user profile picture. Not supported for batching.\n     *\n     * @param profilePicSource Blob data representing the user's picture\n     */\n    UserProfileQuery.prototype.setMyProfilePic = function (profilePicSource) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            files_1.readBlobAsArrayBuffer(profilePicSource).then(function (buffer) {\n                var request = new UserProfileQuery(_this, \""setmyprofilepicture\"");\n                request.post({\n                    body: String.fromCharCode.apply(null, new Uint16Array(buffer)),\n                }).then(function (_) { return resolve(); });\n            }).catch(function (e) { return reject(e); });\n        });\n    };\n    /**\n     * Provisions one or more users' personal sites. (My Site administrator on SharePoint Online only)\n     *\n     * @param emails The email addresses of the users to provision sites for\n     */\n    UserProfileQuery.prototype.createPersonalSiteEnqueueBulk = function () {\n        var emails = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            emails[_i] = arguments[_i];\n        }\n        return this.profileLoader.createPersonalSiteEnqueueBulk(emails);\n    };\n    Object.defineProperty(UserProfileQuery.prototype, \""ownerUserProfile\"", {\n        /**\n         * Gets the user profile of the site owner.\n         *\n         */\n        get: function () {\n            return this.profileLoader.ownerUserProfile;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(UserProfileQuery.prototype, \""userProfile\"", {\n        /**\n         * Gets the user profile that corresponds to the current user.\n         */\n        get: function () {\n            return this.profileLoader.userProfile;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Enqueues creating a personal site for this user, which can be used to share documents, web pages, and other files.\n     *\n     * @param interactiveRequest true if interactively (web) initiated request, or false if non-interactively (client) initiated request\n     */\n    UserProfileQuery.prototype.createPersonalSite = function (interactiveRequest) {\n        if (interactiveRequest === void 0) { interactiveRequest = false; }\n        return this.profileLoader.createPersonalSite(interactiveRequest);\n    };\n    /**\n     * Sets the privacy settings for this profile.\n     *\n     * @param share true to make all social data public; false to make all social data private.\n     */\n    UserProfileQuery.prototype.shareAllSocialData = function (share) {\n        return this.profileLoader.shareAllSocialData(share);\n    };\n    return UserProfileQuery;\n}(queryable_1.QueryableInstance));\nexports.UserProfileQuery = UserProfileQuery;\nvar ProfileLoader = (function (_super) {\n    __extends(ProfileLoader, _super);\n    function ProfileLoader(baseUrl, path) {\n        if (path === void 0) { path = \""_api/sp.userprofiles.profileloader.getprofileloader\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Provisions one or more users' personal sites. (My Site administrator on SharePoint Online only)\n     *\n     * @param emails The email addresses of the users to provision sites for\n     */\n    ProfileLoader.prototype.createPersonalSiteEnqueueBulk = function (emails) {\n        return this.clone(ProfileLoader, \""createpersonalsiteenqueuebulk\"").post({\n            body: JSON.stringify({ \""emailIDs\"": emails }),\n        });\n    };\n    Object.defineProperty(ProfileLoader.prototype, \""ownerUserProfile\"", {\n        /**\n         * Gets the user profile of the site owner.\n         *\n         */\n        get: function () {\n            var q = this.getParent(ProfileLoader, this.parentUrl, \""_api/sp.userprofiles.profileloader.getowneruserprofile\"");\n            if (this.hasBatch) {\n                q = q.inBatch(this.batch);\n            }\n            return q.postAs();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ProfileLoader.prototype, \""userProfile\"", {\n        /**\n         * Gets the user profile that corresponds to the current user.\n         *\n         */\n        get: function () {\n            return this.clone(ProfileLoader, \""getuserprofile\"", true).postAs();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Enqueues creating a personal site for this user, which can be used to share documents, web pages, and other files.\n     *\n     * @param interactiveRequest true if interactively (web) initiated request, or false if non-interactively (client) initiated request\n     */\n    ProfileLoader.prototype.createPersonalSite = function (interactiveRequest) {\n        if (interactiveRequest === void 0) { interactiveRequest = false; }\n        return this.clone(ProfileLoader, \""getuserprofile/createpersonalsiteenque(\"" + interactiveRequest + \"")\"", true).post();\n    };\n    /**\n     * Sets the privacy settings for this profile.\n     *\n     * @param share true to make all social data public; false to make all social data private.\n     */\n    ProfileLoader.prototype.shareAllSocialData = function (share) {\n        return this.clone(ProfileLoader, \""getuserprofile/shareallsocialdata(\"" + share + \"")\"", true).post();\n    };\n    return ProfileLoader;\n}(queryable_1.Queryable));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/userprofiles.js\n// module id = 48\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar util_1 = require(\""../utils/util\"");\n/**\n * Describes the views available in the current context\n *\n */\nvar Views = (function (_super) {\n    __extends(Views, _super);\n    /**\n     * Creates a new instance of the Views class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     */\n    function Views(baseUrl, path) {\n        if (path === void 0) { path = \""views\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a view by guid id\n     *\n     * @param id The GUID id of the view\n     */\n    Views.prototype.getById = function (id) {\n        var v = new View(this);\n        v.concat(\""('\"" + id + \""')\"");\n        return v;\n    };\n    /**\n     * Gets a view by title (case-sensitive)\n     *\n     * @param title The case-sensitive title of the view\n     */\n    Views.prototype.getByTitle = function (title) {\n        return new View(this, \""getByTitle('\"" + title + \""')\"");\n    };\n    /**\n     * Adds a new view to the collection\n     *\n     * @param title The new views's title\n     * @param personalView True if this is a personal view, otherwise false, default = false\n     * @param additionalSettings Will be passed as part of the view creation body\n     */\n    /*tslint:disable max-line-length */\n    Views.prototype.add = function (title, personalView, additionalSettings) {\n        var _this = this;\n        if (personalView === void 0) { personalView = false; }\n        if (additionalSettings === void 0) { additionalSettings = {}; }\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""PersonalView\"": personalView,\n            \""Title\"": title,\n            \""__metadata\"": { \""type\"": \""SP.View\"" },\n        }, additionalSettings));\n        return this.clone(Views, null, true).postAs({ body: postBody }).then(function (data) {\n            return {\n                data: data,\n                view: _this.getById(data.Id),\n            };\n        });\n    };\n    return Views;\n}(queryable_1.QueryableCollection));\nexports.Views = Views;\n/**\n * Describes a single View instance\n *\n */\nvar View = (function (_super) {\n    __extends(View, _super);\n    function View() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(View.prototype, \""fields\"", {\n        get: function () {\n            return new ViewFields(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Updates this view intance with the supplied properties\n     *\n     * @param properties A plain object hash of values to update for the view\n     */\n    View.prototype.update = function (properties) {\n        var _this = this;\n        var postBody = JSON.stringify(util_1.Util.extend({\n            \""__metadata\"": { \""type\"": \""SP.View\"" },\n        }, properties));\n        return this.post({\n            body: postBody,\n            headers: {\n                \""X-HTTP-Method\"": \""MERGE\"",\n            },\n        }).then(function (data) {\n            return {\n                data: data,\n                view: _this,\n            };\n        });\n    };\n    /**\n     * Delete this view\n     *\n     */\n    View.prototype.delete = function () {\n        return this.post({\n            headers: {\n                \""X-HTTP-Method\"": \""DELETE\"",\n            },\n        });\n    };\n    /**\n     * Returns the list view as HTML.\n     *\n     */\n    View.prototype.renderAsHtml = function () {\n        return this.clone(queryable_1.Queryable, \""renderashtml\"", true).get();\n    };\n    return View;\n}(queryable_1.QueryableInstance));\nexports.View = View;\nvar ViewFields = (function (_super) {\n    __extends(ViewFields, _super);\n    function ViewFields(baseUrl, path) {\n        if (path === void 0) { path = \""viewfields\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    /**\n     * Gets a value that specifies the XML schema that represents the collection.\n     */\n    ViewFields.prototype.getSchemaXml = function () {\n        return this.clone(queryable_1.Queryable, \""schemaxml\"", true).get();\n    };\n    /**\n     * Adds the field with the specified field internal name or display name to the collection.\n     *\n     * @param fieldTitleOrInternalName The case-sensitive internal name or display name of the field to add.\n     */\n    ViewFields.prototype.add = function (fieldTitleOrInternalName) {\n        return this.clone(ViewFields, \""addviewfield('\"" + fieldTitleOrInternalName + \""')\"", true).post();\n    };\n    /**\n     * Moves the field with the specified field internal name to the specified position in the collection.\n     *\n     * @param fieldInternalName The case-sensitive internal name of the field to move.\n     * @param index The zero-based index of the new position for the field.\n     */\n    ViewFields.prototype.move = function (fieldInternalName, index) {\n        return this.clone(ViewFields, \""moveviewfieldto\"", true).post({\n            body: JSON.stringify({ \""field\"": fieldInternalName, \""index\"": index }),\n        });\n    };\n    /**\n     * Removes all the fields from the collection.\n     */\n    ViewFields.prototype.removeAll = function () {\n        return this.clone(ViewFields, \""removeallviewfields\"", true).post();\n    };\n    /**\n     * Removes the field with the specified field internal name from the collection.\n     *\n     * @param fieldInternalName The case-sensitive internal name of the field to remove from the view.\n     */\n    ViewFields.prototype.remove = function (fieldInternalName) {\n        return this.clone(ViewFields, \""removeviewfield('\"" + fieldInternalName + \""')\"", true).post();\n    };\n    return ViewFields;\n}(queryable_1.QueryableCollection));\nexports.ViewFields = ViewFields;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/views.js\n// module id = 49\n// module chunks = 0"",""\""use strict\"";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \""__esModule\"", { value: true });\nvar queryable_1 = require(\""./queryable\"");\nvar LimitedWebPartManager = (function (_super) {\n    __extends(LimitedWebPartManager, _super);\n    function LimitedWebPartManager() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(LimitedWebPartManager.prototype, \""webparts\"", {\n        /**\n         * Gets the set of web part definitions contained by this web part manager\n         *\n         */\n        get: function () {\n            return new WebPartDefinitions(this, \""webparts\"");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Exports a webpart definition\n     *\n     * @param id the GUID id of the definition to export\n     */\n    LimitedWebPartManager.prototype.export = function (id) {\n        return this.clone(LimitedWebPartManager, \""ExportWebPart\"", true).post({\n            body: JSON.stringify({ webPartId: id }),\n        });\n    };\n    /**\n     * Imports a webpart\n     *\n     * @param xml webpart definition which must be valid XML in the .dwp or .webpart format\n     */\n    LimitedWebPartManager.prototype.import = function (xml) {\n        return this.clone(LimitedWebPartManager, \""ImportWebPart\"", true).post({\n            body: JSON.stringify({ webPartXml: xml }),\n        });\n    };\n    return LimitedWebPartManager;\n}(queryable_1.Queryable));\nexports.LimitedWebPartManager = LimitedWebPartManager;\nvar WebPartDefinitions = (function (_super) {\n    __extends(WebPartDefinitions, _super);\n    function WebPartDefinitions() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Gets a web part definition from the collection by id\n     *\n     * @param id GUID id of the web part definition to get\n     */\n    WebPartDefinitions.prototype.getById = function (id) {\n        return new WebPartDefinition(this, \""getbyid('\"" + id + \""')\"");\n    };\n    return WebPartDefinitions;\n}(queryable_1.QueryableCollection));\nexports.WebPartDefinitions = WebPartDefinitions;\nvar WebPartDefinition = (function (_super) {\n    __extends(WebPartDefinition, _super);\n    function WebPartDefinition() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(WebPartDefinition.prototype, \""webpart\"", {\n        /**\n         * Gets the webpart information associated with this definition\n         */\n        get: function () {\n            return new WebPart(this);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Removes a webpart from a page, all settings will be lost\n     */\n    WebPartDefinition.prototype.delete = function () {\n        return this.clone(WebPartDefinition, \""DeleteWebPart\"", true).post();\n    };\n    return WebPartDefinition;\n}(queryable_1.QueryableInstance));\nexports.WebPartDefinition = WebPartDefinition;\nvar WebPart = (function (_super) {\n    __extends(WebPart, _super);\n    /**\n     * Creates a new instance of the WebPart class\n     *\n     * @param baseUrl The url or Queryable which forms the parent of this fields collection\n     * @param path Optional, if supplied will be appended to the supplied baseUrl\n     */\n    function WebPart(baseUrl, path) {\n        if (path === void 0) { path = \""webpart\""; }\n        return _super.call(this, baseUrl, path) || this;\n    }\n    return WebPart;\n}(queryable_1.QueryableInstance));\nexports.WebPart = WebPart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/sharepoint/webparts.js\n// module id = 50\n// module chunks = 0"",""\""use strict\"";\nObject.defineProperty(exports, \""__esModule\"", { value: true });\n/**\n * Reads a blob as text\n *\n * @param blob The data to read\n */\nfunction readBlobAsText(blob) {\n    return readBlobAs(blob, \""string\"");\n}\nexports.readBlobAsText = readBlobAsText;\n/**\n * Reads a blob into an array buffer\n *\n * @param blob The data to read\n */\nfunction readBlobAsArrayBuffer(blob) {\n    return readBlobAs(blob, \""buffer\"");\n}\nexports.readBlobAsArrayBuffer = readBlobAsArrayBuffer;\n/**\n * Generic method to read blob's content\n *\n * @param blob The data to read\n * @param mode The read mode\n */\nfunction readBlobAs(blob, mode) {\n    return new Promise(function (resolve, reject) {\n        try {\n            var reader = new FileReader();\n            reader.onload = function (e) {\n                resolve(e.target.result);\n            };\n            switch (mode) {\n                case \""string\"":\n                    reader.readAsText(blob);\n                    break;\n                case \""buffer\"":\n                    reader.readAsArrayBuffer(blob);\n                    break;\n            }\n        }\n        catch (e) {\n            reject(e);\n        }\n    });\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/utils/files.js\n// module id = 51\n// module chunks = 0""],""sourceRoot"":""""}"
9c84c668262cd86c97d14608724fd23c691781de,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
092738b9494252c167f7331ba67dd9f23502aa7b,18197783,// https://stackoverflow.com/questions/18197783/android-aidl-interface-parcelables-and-backwards-compatibility
90cb62644e09d1b16690e500590e17d216dc4f5d,448573,# findFiles (http://stackoverflow.com/a/448573)
81a1eea8d1d6054d577d3dbd7db9c536cd0345d9,166132,   http://stackoverflow.com/questions/166132/maximum-length-of-the-textual-representation-of-an-ipv6-address
0b0266e34e12030bbb50fa76f5d588aa0277e412,13187798,"7848816,comment,7847350,7848697,3,0,stormbrew,,,""Yeah that div check works I guess, but as you say is horribly expensive.<p>For the latter it looks like at least on recent versions of gcc, you can do something like (WARNING: Just a vague proof of concept, please don&#x27;t use it. It might kill kittens):<p><pre><code>    uint64_t func(uint64_t a, uint64_t b)\n    {\n        unsigned __int128 res = (unsigned __int128)a * (unsigned __int128)b;\n        if (res >> 64) {\n            asm volatile (&quot;nop;&quot; ::); /* handle here */\n        }\n        return (uint64_t)res;\n    }\n\n</code></pre>\nWhich compiles to this in gcc -Os and -O3:<p><pre><code>    0:\t48 89 f8             \tmov    %rdi,%rax\n    3:\t48 f7 e6             \tmul    %rsi\n    6:\t48 85 d2             \ttest   %rdx,%rdx\n    9:\t74 01                \tje     c <func+0xc>\n    b:\t90                   \tnop\n    c:\tf3 c3                \trepz retq \n</code></pre>\nWhich I&#x27;m pretty sure could be optimized further by using the overflow flag, but the compiler doesn&#x27;t seem to want to ignore the upper word.<p>edit: and it probably suffers the same problem as described here: <a href=""""https://news.ycombinator.com/item?id=7848771"""" rel=""""nofollow"""">https://news.ycombinator.com/item?id=7848771</a> -- and also probably has general issues with signedness that would need to be further checked.<p>edit2: changed it to uints to simplify and avoid a whole class of problem. I still don&#x27;t think you should go use this, though.<p>(inspiration from SO: <a href=""""http://stackoverflow.com/a/13187798"""" rel=""""nofollow"""">http://stackoverflow.com/a/13187798</a>)"",1401920828"
062bde6d31db0f6cf819cb077a4787bc90a8452f,1197928, * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
57ba1cf924b88a724ec02fc349e681412e0cd138,2854230,        http://stackoverflow.com/questions/2854230/
8ee2e8118c304a7ec33e3d23b757a278390037ec,2901102,/** Format numbers with commas - From: http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript */
b88dd5baad361de1dfc1cfa8dcd0d1c9031b5d96,10454552,            // credit: http://stackoverflow.com/a/10454552/677735
5c6e1bd56bbff68e2925963fbdb4ebc82c17c611,5312849,			// http://stackoverflow.com/questions/5312849/jquery-find-self;
320af2edae40d290c35333dc4875e61a9a51e623,26032513,"      ""description"":""iOS 8 Safari has [issues with nth-child](http://stackoverflow.com/questions/26032513/ios8-safari-after-a-pushstate-the-nth-child-selectors-not-works).\r\n"""
06f5302b29048b3d541c8afadd74b168a9fb5c43,14990971,						// see http://stackoverflow.com/q/14990971/145346
f5a30f251098c77b18df42d59a52b60a6dbd2254,5507194,"      url = ""http://stackoverflow.com/questions/5507098/controlling-jtree-expansion-delay-on-drag-drop/5507194#5507194"","
78bf8282bfc60edd11223bde90584320ac9bf726,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
25442f14e9cb4fe3571dc7936b6eed67ae846586,19228302,        // http://stackoverflow.com/a/19228302/1458162
4377a55fc720b0bf10e39501a96ce129f3c5891c,11295554,"  ""readme"": ""# Formidable\n\n[![Build Status](https://travis-ci.org/felixge/node-formidable.svg?branch=master)](https://travis-ci.org/felixge/node-formidable)\n\n## Purpose\n\nA Node.js module for parsing form data, especially file uploads.\n\n## Current status\n\n**Maintainers Wanted:** Please see https://github.com/felixge/node-formidable/issues/412\n\nThis module was developed for [Transloadit](http://transloadit.com/), a service focused on uploading\nand encoding images and videos. It has been battle-tested against hundreds of GB of file uploads from\na large variety of clients and is considered production-ready.\n\n## Features\n\n* Fast (~500mb/sec), non-buffering multipart parser\n* Automatically writing file uploads to disk\n* Low memory footprint\n* Graceful error handling\n* Very high test coverage\n\n## Installation\n\n```sh\nnpm i -S formidable\n```\n\nThis is a low level package, and if you're using a high level framework such as Express, chances are it's already included in it. You can [read this discussion](http://stackoverflow.com/questions/11295554/how-to-disable-express-bodyparser-for-file-uploads-node-js) about how Formidable is integrated with Express.\n\nNote: Formidable requires [gently](http://github.com/felixge/node-gently) to run the unit tests, but you won't need it for just using the library.\n\n## Example\n\nParse an incoming file upload.\n```javascript\nvar formidable = require('formidable'),\n    http = require('http'),\n    util = require('util');\n\nhttp.createServer(function(req, res) {\n  if (req.url == '/upload' && req.method.toLowerCase() == 'post') {\n    // parse a file upload\n    var form = new formidable.IncomingForm();\n\n    form.parse(req, function(err, fields, files) {\n      res.writeHead(200, {'content-type': 'text/plain'});\n      res.write('received upload:\\n\\n');\n      res.end(util.inspect({fields: fields, files: files}));\n    });\n\n    return;\n  }\n\n  // show a file upload form\n  res.writeHead(200, {'content-type': 'text/html'});\n  res.end(\n    '<form action=\""/upload\"" enctype=\""multipart/form-data\"" method=\""post\"">'+\n    '<input type=\""text\"" name=\""title\""><br>'+\n    '<input type=\""file\"" name=\""upload\"" multiple=\""multiple\""><br>'+\n    '<input type=\""submit\"" value=\""Upload\"">'+\n    '</form>'\n  );\n}).listen(8080);\n```\n## API\n\n### Formidable.IncomingForm\n```javascript\nvar form = new formidable.IncomingForm()\n```\nCreates a new incoming form.\n\n```javascript\nform.encoding = 'utf-8';\n```\nSets encoding for incoming form fields.\n\n```javascript\nform.uploadDir = \""/my/dir\"";\n```\nSets the directory for placing file uploads in. You can move them later on using\n`fs.rename()`. The default is `os.tmpdir()`.\n\n```javascript\nform.keepExtensions = false;\n```\nIf you want the files written to `form.uploadDir` to include the extensions of the original files, set this property to `true`.\n\n```javascript\nform.type\n```\nEither 'multipart' or 'urlencoded' depending on the incoming request.\n\n```javascript\nform.maxFieldsSize = 2 * 1024 * 1024;\n```\nLimits the amount of memory all fields together (except files) can allocate in bytes.\nIf this value is exceeded, an `'error'` event is emitted. The default\nsize is 2MB.\n\n```javascript\nform.maxFields = 1000;\n```\nLimits the number of fields that the querystring parser will decode. Defaults\nto 1000 (0 for unlimited).\n\n```javascript\nform.hash = false;\n```\nIf you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`.\n\n```javascript\nform.multiples = false;\n```\nIf this option is enabled, when you call `form.parse`, the `files` argument will contain arrays of files for inputs which submit multiple files using the HTML5 `multiple` attribute.\n\n```javascript\nform.bytesReceived\n```\nThe amount of bytes received for this form so far.\n\n```javascript\nform.bytesExpected\n```\nThe expected number of bytes in this form.\n\n```javascript\nform.parse(request, [cb]);\n```\nParses an incoming node.js `request` containing form data. If `cb` is provided, all fields and files are collected and passed to the callback:\n\n\n```javascript\nform.parse(req, function(err, fields, files) {\n  // ...\n});\n\nform.onPart(part);\n```\nYou may overwrite this method if you are interested in directly accessing the multipart stream. Doing so will disable any `'field'` / `'file'` events  processing which would occur otherwise, making you fully responsible for handling the processing.\n\n```javascript\nform.onPart = function(part) {\n  part.addListener('data', function() {\n    // ...\n  });\n}\n```\nIf you want to use formidable to only handle certain parts for you, you can do so:\n```javascript\nform.onPart = function(part) {\n  if (!part.filename) {\n    // let formidable handle all non-file parts\n    form.handlePart(part);\n  }\n}\n```\nCheck the code in this method for further inspiration.\n\n\n### Formidable.File\n```javascript\nfile.size = 0\n```\nThe size of the uploaded file in bytes. If the file is still being uploaded (see `'fileBegin'` event), this property says how many bytes of the file have been written to disk yet.\n```javascript\nfile.path = null\n```\nThe path this file is being written to. You can modify this in the `'fileBegin'` event in\ncase you are unhappy with the way formidable generates a temporary path for your files.\n```javascript\nfile.name = null\n```\nThe name this file had according to the uploading client.\n```javascript\nfile.type = null\n```\nThe mime type of this file, according to the uploading client.\n```javascript\nfile.lastModifiedDate = null\n```\nA date object (or `null`) containing the time this file was last written to. Mostly\nhere for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/).\n```javascript\nfile.hash = null\n```\nIf hash calculation was set, you can read the hex digest out of this var.\n\n#### Formidable.File#toJSON()\n\n  This method returns a JSON-representation of the file, allowing you to\n  `JSON.stringify()` the file which is useful for logging and responding\n  to requests.\n\n### Events\n\n\n#### 'progress'\n\nEmitted after each incoming chunk of data that has been parsed. Can be used to roll your own progress bar.\n\n```javascript\nform.on('progress', function(bytesReceived, bytesExpected) {\n});\n```\n\n\n\n#### 'field'\n\nEmitted whenever a field / value pair has been received.\n\n```javascript\nform.on('field', function(name, value) {\n});\n```\n\n#### 'fileBegin'\n\nEmitted whenever a new file is detected in the upload stream. Use this event if\nyou want to stream the file to somewhere else while buffering the upload on\nthe file system.\n\n```javascript\nform.on('fileBegin', function(name, file) {\n});\n```\n\n#### 'file'\n\nEmitted whenever a field / file pair has been received. `file` is an instance of `File`.\n\n```javascript\nform.on('file', function(name, file) {\n});\n```\n\n#### 'error'\n\nEmitted when there is an error processing the incoming form. A request that experiences an error is automatically paused, you will have to manually call `request.resume()` if you want the request to continue firing `'data'` events.\n\n```javascript\nform.on('error', function(err) {\n});\n```\n\n#### 'aborted'\n\n\nEmitted when the request was aborted by the user. Right now this can be due to a 'timeout' or 'close' event on the socket. After this event is emitted, an `error` event will follow. In the future there will be a separate 'timeout' event (needs a change in the node core).\n```javascript\nform.on('aborted', function() {\n});\n```\n\n##### 'end'\n```javascript\nform.on('end', function() {\n});\n```\nEmitted when the entire request has been received, and all contained files have finished flushing to disk. This is a great place for you to send your response.\n\n\n\n## Changelog\n\n### v1.1.1 (2017-01-15)\n\n * Fix DeprecationWarning about os.tmpDir() (Christian)\n * Update `buffer.write` order of arguments for Node 7 (Kornel Lesiński)\n * JSON Parser emits error events to the IncomingForm (alessio.montagnani)\n * Improved Content-Disposition parsing (Sebastien)\n * Access WriteStream of fs during runtime instead of include time (Jonas Amundsen)\n * Use built-in toString to convert buffer to hex (Charmander)\n * Add hash to json if present (Nick Stamas)\n * Add license to package.json (Simen Bekkhus)\n\n### v1.0.14 (2013-05-03)\n\n* Add failing hash tests. (Ben Trask)\n* Enable hash calculation again (Eugene Girshov)\n* Test for immediate data events (Tim Smart)\n* Re-arrange IncomingForm#parse (Tim Smart)\n\n### v1.0.13\n\n* Only update hash if update method exists (Sven Lito)\n* According to travis v0.10 needs to go quoted (Sven Lito)\n* Bumping build node versions (Sven Lito)\n* Additional fix for empty requests (Eugene Girshov)\n* Change the default to 1000, to match the new Node behaviour. (OrangeDog)\n* Add ability to control maxKeys in the querystring parser. (OrangeDog)\n* Adjust test case to work with node 0.9.x (Eugene Girshov)\n* Update package.json (Sven Lito)\n* Path adjustment according to eb4468b (Markus Ast)\n\n### v1.0.12\n\n* Emit error on aborted connections (Eugene Girshov)\n* Add support for empty requests (Eugene Girshov)\n* Fix name/filename handling in Content-Disposition (jesperp)\n* Tolerate malformed closing boundary in multipart (Eugene Girshov)\n* Ignore preamble in multipart messages (Eugene Girshov)\n* Add support for application/json (Mike Frey, Carlos Rodriguez)\n* Add support for Base64 encoding (Elmer Bulthuis)\n* Add File#toJSON (TJ Holowaychuk)\n* Remove support for Node.js 0.4 & 0.6 (Andrew Kelley)\n* Documentation improvements (Sven Lito, Andre Azevedo)\n* Add support for application/octet-stream (Ion Lupascu, Chris Scribner)\n* Use os.tmpdir() to get tmp directory (Andrew Kelley)\n* Improve package.json (Andrew Kelley, Sven Lito)\n* Fix benchmark script (Andrew Kelley)\n* Fix scope issue in incoming_forms (Sven Lito)\n* Fix file handle leak on error (OrangeDog)\n\n## License\n\nFormidable is licensed under the MIT license.\n\n## Ports\n\n* [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++ parser based on formidable\n\n## Credits\n\n* [Ryan Dahl](http://twitter.com/ryah) for his work on [http-parser](http://github.com/ry/http-parser) which heavily inspired multipart_parser.js\n"","
7349e03ec51f1f3a210b98ebe29bb38d69f9f2da,16657946,        // detect if IE : from http://stackoverflow.com/a/16657946
df7f3cba106351d2e7bba9599c32b7242a9ba50a,4994201,// http://stackoverflow.com/questions/4994201/is-object-empty
8c6c4e579e88e8c03aba091c6e7eca79d6e6673e,17215533,        # sort of a brilliant way of late-binding/double-formatting given here: http://stackoverflow.com/a/17215533/659298
9ac5446d87cf9ceb438ae50fecfcfd5b8a4e0a87,8358141,  formatPhoneNumber (s) { // http://stackoverflow.com/a/8358141/6037036
359390faf6e4a6f7edb4337131315e05d084ed82,766809,            // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
bee1f0b4befd661862208bf75f834fb1b4394bcd,6918057,# http://stackoverflow.com/questions/6918057
6957bc8091b296296c7f089952b84163a10d1add,28872450,// Thanks to http://stackoverflow.com/questions/28872450/conversion-from-nstimeinterval-to-hour-minutes-seconds-milliseconds-in-swift
bfe3e82460de4de81692e6f5a48de3be48b569ae,2208933,From this [Stackoverflow Post](http://stackoverflow.com/questions/2208933/how-do-i-force-a-favicon-refresh): 
1ee6946a1310e69332aa76aa1aa548f34a9f808c,5188320,  #via http://stackoverflow.com/questions/5188320/how-can-i-get-a-list-of-git-branches-ordered-by-most-recent-commit
52ab12b2d6d3f98f657956e7f8af75f08faccf91,1599201,"* Use ANSI-92 joins, not SQL-86 joins (see [this Stack Overflow comment](http://stackoverflow.com/a/1599201/3827849))"
b415ad2e2db32885007a161bc06ad2cfc377d646,32234329,- http://stackoverflow.com/questions/32234329/what-is-the-loader-order-for-webpack
b252089c430edf2a5f6fd35f7be326d54f1b7a83,37628,109;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;works;1.0;9.891196834817012E-4;28.0;0
7890c7b2dec1fda747f5221ba1d59ad04a2f5423,174890,# inspired by http://stackoverflow.com/questions/174890/#answer-8915039
d5f9c03c159b513bc2fb364a97900037c88fdcad,5943630,*   [Ajax e JSONP](http://stackoverflow.com/questions/5943630/basic-example-of-using-ajax-with-jsonp)
e8e231a51f7b57c9a2524d70c91d295833e4f630,17762764,# http://stackoverflow.com/questions/17762764/generate-all-possible-combinations-of-a-function-call-using-bash-script
f74939b3b08e5ba0e9a6efcee448716d33cd55c8,510225,"**First**, understand [there are permission differences between Local System, Local service, Network service](http://stackoverflow.com/a/510225/19020), and a user account.  I recommend you run under 'Local service' because it's a minimal set of permissions. "
845e8043a001d53cb7d73e514db269a3c603f7b0,9556393,;; http://stackoverflow.com/questions/9556393/clojure-tail-recursion-with-prime-factors
243f46cfadeaacaee91d94b62f6646ec9dc5e0c5,1873630,    // From http://stackoverflow.com/questions/1873630/reserved-keywords-in-objective-c
fa9a980eaf4b430407cedcfc17ec6b0a6898179c,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
4e0c6c7b449938f3740bdc3767cb33da123f6ff5,14967647,    // From http://stackoverflow.com/questions/14967647/ (continues on next line)
f5baab056824ba88795db1f19c375db654a79f97,1801499,		//Thanks to CMS on http://stackoverflow.com/questions/1801499/how-to-change-options-of-select-with-jquery
2ce3c8c3befc887b6a9f3592cb21e2e777497924,12467240,	  // taken from http://stackoverflow.com/questions/12467240/determine-if-javascript-e-keycode-is-a-printable-non-control-character
9d200cc13789ee41e254dc7c74307230b77bdff8,3653444,// http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7
e4460edb70d345ddc7643e025aca7078f9f5b32e,19295725,http://stackoverflow.com/questions/19295725/angle-less-than-180-between-two-segments-lines
971ee88a3813629304adbff34593ac962db1559f,1911109,- https://stackoverflow.com/questions/1911109/how-to-clone-a-specific-git-branch
9712d1d0150b4025c673f16367793cc55088a114,2490876,// Function to triger an event. Cross-browser compliant. See http://stackoverflow.com/a/2490876/135494
3b507a63af532392e68a53ae9489f6c3cfb54973,15708411,// https://stackoverflow.com/questions/15708411/how-to-deal-with-global-constructor-warning-in-clang
1e080de01ba135dfebe53d68ac45749c1c27a1cb,15861759,#removed 30 aug 2016: -fPIC  (if you re-add then add this: -flto -mtune=native src: https://stackoverflow.com/questions/15861759/how-much-overhead-can-the-fpic-flag-add )
ec7a320383193df4c80663934365b855f82ef1b0,37315709,- Your local machine is OS/X or Linux (Cygwin *should* work on Windows - see [here](http://stackoverflow.com/questions/37315709/bluemix-spark-as-a-service-how-to-run-spark-submit-sh-with-cygwin))
7187e9e8f6d2127c85bf0291a67f0984e9cab997,39415661,    See more explanation [here](https://stackoverflow.com/questions/39415661/why-cant-i-import-a-class-or-function-with-import-as-x-from-y).
77f8febab0bc84bc5f4f94b6cda73bb686efefe7,7405932,			# (see http://stackoverflow.com/questions/7405932/how-to-know-whether-any-process-is-bound-to-a-unix-domain-socket)
b252089c430edf2a5f6fd35f7be326d54f1b7a83,37628,100;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;implement;1.0;0.002967359050445104;28.0;0
5b90ab181974ed56cd213b9cbc71a29b2fd60b01,11482470,// http://stackoverflow.com/questions/11482470/ios-5-data-encryption-aes-256-encryptwithkey-not-found
218afa585a3127d38b8e10c6efbe2152dd3c6dcc,11236090,      //derived from http://stackoverflow.com/questions/11236090/
f386dfa944166de47ba546b99b44b6c5a1eb74a6,6760685,    http://stackoverflow.com/q/6760685/3648361
5ea34fdf77498fb4621749485cbd2880fee46f74,24161582,"       "" * http://stackoverflow.com/a/24161582/3208463\n"","
d7a834328e57ee73898e4b593d53a679e3bdd725,6857468,    // http://stackoverflow.com/questions/6857468/a-better-way-to-convert-js-object-to-array
90f28f2d5d725b7fae3743ebf58980f30c36be38,38843970,`service-worker.js` [with HTTP caching disabled](http://stackoverflow.com/questions/38843970/service-worker-javascript-update-frequency-every-24-hours).
0cec85d6957d24e6e658f3dbddc0c1b7f91fcb74,1349404 1197928 274094 105034 6122571,"{""version"":3,""sources"":[""webpack://pnp.sp-taxonomy/webpack/universalModuleDefinition"",""webpack://pnp.sp-taxonomy/webpack/bootstrap"",""webpack://pnp.sp-taxonomy/./build/packages-es5/common/index.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/common/src/adalclient.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/common/src/collections.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/common/src/common.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/common/src/libconfig.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/common/src/netutil.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/common/src/storage.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/common/src/util.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/logging/index.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/logging/src/listeners.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/logging/src/logger.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/logging/src/logging.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/logging/src/loglevel.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/odata/index.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/odata/src/caching.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/odata/src/odata.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/odata/src/odatabatch.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/odata/src/parsers.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/odata/src/pipeline.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/odata/src/queryable.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/index.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/src/batch.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/src/clientsvc.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/src/clintsvcqueryable.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/src/objectpath.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/src/opactionbuilders.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/src/opbuilders.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/src/parsers.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-clientsvc/src/utils.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/index.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/src/labels.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/src/session.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/src/taxonomy.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/src/termgroup.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/src/terms.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/src/termsets.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/src/termstores.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp-taxonomy/src/types.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/index.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/appcatalog.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/attachmentfiles.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/batch.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/clientsidepages.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/comments.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/config/splibconfig.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/contenttypes.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/features.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/fields.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/files.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/folders.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/forms.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/items.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/lists.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/navigation.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/net/digestcache.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/net/sphttpclient.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/odata.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/regionalsettings.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/relateditems.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/rest.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/roles.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/search.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/searchsuggest.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/sharepointqueryable.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/sharepointqueryablesecurable.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/sharepointqueryableshareable.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/site.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/sitedesigns.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/sitegroups.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/sitescripts.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/siteusers.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/social.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/sp.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/subscriptions.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/types.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/usercustomactions.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/userprofiles.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/utilities.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/utils/extractweburl.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/utils/metadata.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/utils/toabsoluteurl.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/views.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/webparts.js"",""webpack://pnp.sp-taxonomy/./build/packages-es5/sp/src/webs.js"",""webpack://pnp.sp-taxonomy/./node_modules/adal-angular/dist/adal.min.js"",""webpack://pnp.sp-taxonomy/./node_modules/tslib/tslib.es6.js"",""webpack://pnp.sp-taxonomy/(webpack)/buildin/global.js""],""names"":[],""mappings"":"";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6B;AAC7B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACkB;AACZ;AACvC;AACsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2DAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,EAAE;AACjF;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,oEAAW;AACrD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,+DAAsB;AACF;AACtB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,+DAAsB;AACE;AAC1B,sC;;;;;;;;;;;;ACpMA;AAAA;AAAA;AAAA;AAAgC;AAChC;AACA;AACA;AACA,oBAAoB,oDAAM,kDAAkD,yCAAyC,kBAAkB,EAAE,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uC;;;;;;;;;;;;AClCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6B;AACC;AACF;AACF;AACA;AACH;AACvB,kC;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AAAA;AAAuD;AAChD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8DAAS,UAAU,gEAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC4B;AAC7B;AACO;AACP,qC;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACqB;AAC/C;AACP;AACA,oCAAoC,kBAAkB;AACtD;AACA;AACA,SAAS;AACT;AACA;AACO;AACP,QAAQ,kEAAoB;AAC5B,sBAAsB,oDAAM,qBAAqB;AACjD,iBAAiB,oDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;AAClC,mC;;;;;;;;;;;;;AC5DA;AAAA;AAAA;AAAA;AAAA;AAA4E;AAChC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4BAA4B;AAC3E;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,kEAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAa;AAC9C;AACA;AACA;AACA,qBAAqB,qDAAO;AAC5B;AACA,eAAe,iDAAG,EAAE,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAc,uCAAuC,wDAAa;AACzF,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,CAAC;AACkC;AACnC;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,mC;;;;;;;;;;;;ACpPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA,iCAAiC,mCAAmC,EAAE;AACtE,8BAA8B,6DAA6D,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iCAAiC,qBAAqB;AACtD,4BAA4B,uBAAuB,aAAa,GAAG;AACnE;AACA;AACA;AACA;AACA,+CAA+C,kBAAkB,EAAE,gBAAgB,aAAa;AAChG;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,6BAA6B,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,gC;;;;;;;;;;;;AC1OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8B;AAC9B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,qC;;;;;;;;;;;;ACpEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,2CAA2C,4CAA4C,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD,6BAA6B,iCAAiC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAwD;AACrF;AACA;AACA,CAAC;AACiB;AAClB;AACA;AACA,wCAAwC,kCAAkC;AAC1E,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,+BAA+B,sBAAsB;AACrD,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA,wDAAwD,8BAA8B,EAAE;AACxF;AACA;AACA;AACA,CAAC;AACD,kC;;;;;;;;;;;;AClIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACI;AAC0B;AAChE,mC;;;;;;;;;;;;ACHA;AAAA;AAAA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B,oC;;;;;;;;;;;;ACXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AAC5B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAuE;AACvE;AACA;AACA;AACA,0BAA0B,2DAAO,uBAAuB,yDAAa;AACrE,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,iCAAiC,4DAAgB;AACjD;AACA,CAAC;AACyB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,2BAA2B,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;AAChC,mC;;;;;;;;;;;;ACzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AACA;AACC;AACC;AACC;AAC7B,iC;;;;;;;;;;;;ACLA;AAAA;AAAA;AAAsC;AACtC;AACA;AACA,kCAAkC,YAAY,2DAAO,GAAG;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iCAAiC,EAAE;AAClE,+BAA+B,4BAA4B,EAAE;AAC7D,+BAA+B,kCAAkC,EAAE;AACnE,+BAA+B,iBAAiB,EAAE;AAClD;AACA;AACA,CAAC;AACqB;AACtB,sC;;;;;;;;;;;;ACxFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AAC1C;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,0BAA0B;AAC1D,oCAAoC,kCAAkC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,sCAAsC,kEAAkE,EAAE;AAC1G,uCAAuC,4CAA4C,EAAE;AACrF,qCAAqC,kBAAkB,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAG;AACf,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,YAAY,0DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB,mC;;;;;;;;;;;;ACnJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiB;AACZ;AAC2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mDAAM;AACV,cAAc,mDAAM,yDAAyD;AAC7E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,mDAAM;AACd;AACA,qDAAqD,0BAA0B,EAAE;AACjF,QAAQ,mDAAM;AACd;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA,iDAAiD,uDAAG;AACpD,gBAAgB,mDAAM;AACtB;AACA;AACA;AACA,YAAY,mDAAM;AAClB;AACA,mEAAmE,kBAAkB,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mDAAM;AAClB,sBAAsB,mDAAM,qCAAqC;AACjE;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB,uCAAuC,uDAAc;AACrD;AACA,mCAAmC,0DAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAM;AAC9B,kCAAkC,mDAAM,qCAAqC;AAC7E;AACA;AACA,yBAAyB;AACzB,4BAA4B,0DAAM;AAClC;AACA;AACA;AACA,4BAA4B,uDAAG;AAC/B;AACA;AACA,6EAA6E,qBAAqB,EAAE;AACpG;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA,qCAAqC,6DAAoB;AACzD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAM;AAC1B;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA,2BAA2B,0DAAM,sBAAsB,GAAG,uBAAuB;AACjF;AACA,+CAA+C,uCAAuC,EAAE;AACxF,6CAA6C,mCAAmC,EAAE;AAClF,0CAA0C,qBAAqB,EAAE;AACjE,yCAAyC,kBAAkB,EAAE;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB,0BAA0B,mDAAM,qCAAqC;AACrE;AACA;AACA,iBAAiB;AACjB;AACA;AACA,gBAAgB,mDAAM;AACtB,0BAA0B,mDAAM,qCAAqC;AACrE;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA;AACA,CAAC;AAC0B;AACpB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;;;;;;;;;;;AC1NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACyD;AAC/B;AACJ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAY;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAY;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACpI;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,8DAA8D,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACrI;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,+DAA+D,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACtI;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,gEAAgE,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACvI;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,6DAA6D,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2DAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2DAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc,2DAAkB,GAAG;AACnE,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA,gCAAgC,cAAc,2DAAkB,GAAG;AACnE,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,2DAAkB,GAAG;AACnE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,2DAAkB,GAAG;AACnE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,2DAAkB,GAAG;AACnE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,2DAAkB,GAAG;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wEAAoB;AACvC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B,qC;;;;;;;;;;;;AC3QA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AAChC,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACK;AACwB;AACL;AACwC;AACjD;AACJ;AACG;AACD;AAC9C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mDAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,qDAAU;AACe;AAC3B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gEAAY,yBAAyB,qCAAqC;AAC/F,sBAAsB,2DAAO;AAC7B,4BAA4B,2DAAO,MAAM,+DAAW,MAAM,oEAAU;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,UAAU;AAC/D;AACA;AACA;AACA;AACA,gCAAgC,iEAAa;AAC7C,qDAAqD,cAAc;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oEAAgB,aAAa,2DAAO;AAC/D;AACA,2BAA2B,iEAAa;AACxC;AACA;AACA;AACA;AACA,2BAA2B,2DAAO,sBAAsB,+DAAW;AACnE,iBAAiB;AACjB;AACA;AACA,4EAA4E,cAAc,EAAE;AAC5F;AACA,2CAA2C,iEAAa;AACxD,iBAAiB;AACjB;AACA;AACA;AACA,2BAA2B,sDAAU;AACrC,aAAa,yBAAyB,mCAAmC,EAAE;AAC3E;AACA;AACA;AACA,6BAA6B,2DAAkB;AAC/C,0CAA0C,+DAAoB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ,mDAAM;AACd;AACA;AACA,kBAAkB,kEAAmB;AACrC;AACA,QAAQ,mDAAM;AACd;AACA;AACA,YAAY,mDAAM;AAClB;AACA,gBAAgB,mDAAM;AACtB,gDAAgD,2FAA2F,EAAE;AAC7I,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,qEAAkB;AACpB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,2DAAkB;AACpB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA,+DAA+D,2BAA2B,EAAE;AAC5F;AACA;AACA,CAAC,CAAC,+DAAoB;AACtB,iC;;;;;;;;;;;;AC5JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AACN;AACP;AACM;AACN;AACH;AACF;AACxB,qC;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC0F;AACpE;AACD;AACP;AAC0C;AACzC;AACD;AAC/C;AACA;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,aAAa;AAC7C,sCAAsC,qBAAqB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2DAAO;AAChC,iBAAiB,wEAAoB;AACrC,yCAAyC,2DAAe;AACxD;AACA;AACA;AACA;AACA,yBAAyB,2DAAO;AAChC,iBAAiB,wEAAoB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG,0BAA0B,EAAE;AAC9H;AACA;AACA,eAAe,wEAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0DAAM;AAC9B;AACA,QAAQ,oEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,eAAe;AAC/C,aAAa,wEAAoB;AACjC;AACA,yBAAyB,2DAAkB;AAC3C;AACA;AACA;AACA,sBAAsB,0DAAM;AAC5B;AACA,aAAa;AACb;AACA;AACA,iBAAiB,uDAAG;AACpB,0BAA0B,0DAAM;AAChC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iEAAO;AACtE,iDAAiD,QAAQ,0DAAM,wBAAwB,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA,+DAA+D,iEAAO;AACtE,iDAAiD,4BAA4B,QAAQ,0DAAM,gBAAgB,EAAE,EAAE,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,kEAAkE,iEAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,kEAAkE,iEAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0EAAgB,+BAA+B,kCAAkC,EAAE;AAC3F,+BAA+B,iEAAO;AACtC,iDAAiD,QAAQ,0DAAM,wBAAwB,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,6DAAa;AAC5B,YAAY,gEAAY;AACxB;AACA,YAAY,gEAAY;AACxB,YAAY,gEAAY;AACxB;AACA;AACA,aAAa;AACb,sBAAsB,0DAAM,WAAW,mBAAmB;AAC1D;AACA;AACA;AACA,6DAA6D,+DAAW;AACxE,oBAAoB,wEAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,yDAAc;AAC9D;AACA;AACA,+FAA+F,QAAQ;AACvG;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY,oDAAY,GAAG,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2DAAO;AAClC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wEAAoB;AACvC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA,mCAAmC,sEAAY;AAC/C;AACA;AACA,oBAAoB,kDAAM,4CAA4C,oEAAU;AAChF;AACA;AACA;AACA;AACA,CAAC,CAAC,oDAAS;AACmB;AAC9B,6C;;;;;;;;;;;;ACrUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2D;AACX;AACQ;AACV;AAC9C;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,4BAA4B,SAAS;AACrC,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iCAAiC,6BAA6B,UAAU,GAAG;AAC3E;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C,wCAAwC,qBAAqB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wEAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wEAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,0DAAM,GAAG;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4DAAQ;AACnD;AACA,gBAAgB,oEAAU;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,4DAAQ;AAClD;AACA,gBAAgB,oEAAU;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,kEAAc,cAAc,qCAAqC;AAC/G;AACA,gBAAgB,oEAAU;AAC1B;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,YAAY,wEAAoB;AAChC;AACA;AACA;AACA,oBAAoB,kEAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B,sC;;;;;;;;;;;;AChRA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D,2CAA2C,8BAA8B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,6DAA6D,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,6DAA6D,EAAE;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,yEAAyE,EAAE;AAC1I;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,4C;;;;;;;;;;;;ACrFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AACnC;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA,eAAe,sDAAU;AACzB;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA,eAAe,sDAAU;AACzB;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA,eAAe,sDAAU;AACzB;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA,eAAe,sDAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA,CAAC;AACuB;AACjB;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,eAAe,sDAAU;AACzB;AACA,sC;;;;;;;;;;;;AC3FA;AAAA;AAAA;AAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qCAAqC,uDAAG;AACxC,4BAA4B,uDAAG;AAC/B;AACA;AACA,SAAS;AACT;AACA;AACA,uBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;AACA,qEAAqE,0EAAsB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,0EAAsB;AAC3F,8BAA8B,uDAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,0EAAsB;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B,mC;;;;;;;;;;;;ACtFA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iC;;;;;;;;;;;;ACxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+B;AAC/B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+C;AAC9B;AAClD;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,aAAa;AAC7C,sCAAsC,qBAAqB;AAC3D;AACA,+BAA+B,kEAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAAmB;AACpC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,oEAAkB;AACF;AAClB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,oEAAkB;AACH;AACjB,kC;;;;;;;;;;;;ACpEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACJ;AACqE;AAC7C;AACrD;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA,+BAA+B,sEAAY,yBAAyB,qCAAqC;AACzG;AACA,QAAQ,oEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAE;AACV;AACA;AACA;AACA;AACA;AACA,mBAAmB,iEAAe;AAClC;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAS;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAS;AACtC;AACA;AACA,CAAC,CAAC,oEAAkB;AACD;AACnB,mC;;;;;;;;;;;;ACzDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoC;AACpC;AACO,mBAAmB,gDAAO;AACR;AACC;AACE;AACJ;AACG;AACE;AACL;AACxB,oC;;;;;;;;;;;;ACVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC2B;AACS;AAC/B;AACG;AACzC;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA,wCAAwC,qDAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAQ;AACjD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,2DAAO,GAAG;AAC5C,qBAAqB,8DAAY;AACjC;AACA,oBAAoB,gEAAY;AAChC;AACA;AACA;AACA,gCAAgC,QAAQ,0DAAM,sCAAsC,EAAE;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,oEAAkB;AACC;AACrB,qC;;;;;;;;;;;;AChFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACuC;AACF;AACpC;AACa;AAC/C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAAmB;AACpC;AACA;AACA,sBAAsB,uEAAmB;AACzC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC,oBAAoB,gEAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA,CAAC,CAAC,oEAAkB;AACH;AACjB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yCAAyC,iDAAO;AAChD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yCAAyC,iDAAO;AAChD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yCAAyC,kDAAQ;AACjD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ,0DAAM,mCAAmC,EAAE;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,oEAAkB;AACJ;AAChB,iC;;;;;;;;;;;;AClLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgD;AACC;AAC1C;AACF;AACtC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAAmB;AACpC;AACA;AACA,sBAAsB,uEAAmB;AACzC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC,oBAAoB,gEAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA,CAAC,CAAC,oEAAkB;AACA;AACpB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oDAAS;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iCAAiC,4CAAK;AACtC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC,oBAAoB,gEAAY;AAChC,6BAA6B,2CAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,8BAA8B;AAC7E,4BAA4B,MAAM,2DAAO,GAAG;AAC5C,qBAAqB,8DAAY;AACjC;AACA;AACA,oBAAoB,gEAAY;AAChC;AACA,uDAAuD,qEAAW;AAClE,gCAAgC,QAAQ,0DAAM,6BAA6B,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,oEAAkB;AACD;AACnB,oC;;;;;;;;;;;;AClJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgD;AAC6D;AACtG;AACF;AACS;AAC/C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,aAAa;AAC7C;AACA,+BAA+B,kEAAQ;AACvC;AACA,QAAQ,oEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAAmB;AACpC;AACA;AACA,sBAAsB,uEAAmB;AACzC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,8DAAY;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8DAAY,gBAAgB,gEAAY;AAC3F;AACA;AACA,CAAC,CAAC,oEAAkB;AACE;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,aAAa;AAC7C,sCAAsC,qBAAqB;AAC3D;AACA;AACA;AACA;AACA,yCAAyC,iDAAO;AAChD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yCAAyC,iDAAO;AAChD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yCAAyC,iDAAO;AAChD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yCAAyC,oDAAS;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA,6BAA6B,kDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY,gBAAgB,gEAAY;AAC7D,6BAA6B,iDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY,gBAAgB,gEAAY;AAC7D,6BAA6B,2CAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY,gBAAgB,gEAAY,iBAAiB,gEAAY;AAC1F,6BAA6B,2CAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC,oBAAoB,gEAAY;AAChC,6BAA6B,oDAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gEAAc,kBAAkB,qCAAqC;AACzF;AACA,YAAY,oEAAU,WAAW,0EAAgB;AACjD;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA,0CAA0C,gEAAM;AAChD;AACA,QAAQ,oEAAU;AAClB;AACA;AACA,mBAAmB,4CAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC,0CAA0C,gEAAM;AAChD;AACA,QAAQ,oEAAU;AAClB;AACA;AACA,mBAAmB,oDAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM,2DAAO,GAAG;AAC5C,qBAAqB,8DAAY;AACjC;AACA,oBAAoB,gEAAY;AAChC;AACA;AACA,gCAA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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACd;AACf,sC;;;;;;;;;;;;AClGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAClC;AAC9E;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,gCAAgC;AACpF;AACA,SAAS,EAAE,EAAE,EAAE,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,oDAAoD,gCAAgC,uCAAuC,EAAE,EAAE,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,oDAAoD,gCAAgC,wCAAwC,EAAE,EAAE,EAAE;AAClI;AACA;AACA,0CAA0C,gDAAkB;AAC5D,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACJ;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAU;AAC5C;AACA;AACA;AACA;AACA;AACA,kCAAkC,uDAAY;AAC9C;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,qBAAqB,kCAAkC,EAAE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACH;AAC1B,2C;;;;;;;;;;;;ACzKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACO;AACyC;AAC3C;AACY;AACK;AACD;AACtD;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F,yCAAyC;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ,mDAAM;AACd;AACA;AACA;AACA,YAAY,mDAAM;AAClB;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAY;AACrC;AACA;AACA,eAAe,0EAAa;AAC5B;AACA;AACA;AACA,2BAA2B,2BAA2B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAAO;AACpD;AACA,sEAAsE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iEAAa,8BAA8B,2DAAO;AAC5E,gBAAgB,mDAAM;AACtB;AACA;AACA;AACA,wBAAwB,uDAAG,wBAAwB,uDAAG;AACtD;AACA;AACA;AACA;AACA,kEAAkE,cAAc;AAChF;AACA;AACA;AACA;AACA;AACA,gBAAgB,gEAAY,UAAU,mEAAe;AACrD;AACA;AACA,oBAAoB,gEAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,cAAc;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,iBAAiB;AACjB;AACA;AACA,YAAY,mDAAM;AAClB,gCAAgC,2DAAO;AACvC,oCAAoC,iBAAiB,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA,oBAAoB,mDAAM;AAC1B,oDAAoD,mFAAmF,EAAE;AACzI,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,qDAAU;AACO;AACnB,iC;;;;;;;;;;;;AChMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgB;AAClB;AAC0D;AACzF;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,gBAAgB,EAAE;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,cAAc;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA,YAAY,uDAAG;AACf;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,0CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4BAA4B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAAO;AAC/C;AACA,mFAAmF,uDAAgB;AACnG;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB,qEAAqE,EAAE;AACvH,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,aAAa,EAAE;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uDAAG;AAClB,kCAAkC;AAClC,iCAAiC;AACjC,uBAAuB,WAAW;AAClC,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB,kBAAkB,MAAM,YAAY,MAAM;AACpF;AACA;AACA;AACA,mDAAmD,8BAA8B,EAAE;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,KAAK;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,oBAAoB,EAAE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA,2BAA2B,qCAAqC;AAChE;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,2CAAI;AAClC,oCAAoC;AACpC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,2DAA2D,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,8DAA8D,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,0DAA0D,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,iDAAiD,mCAAmC,EAAE;AACtF;AACA;AACA,CAAC,CAAC,2CAAI;AACoB;AAC1B;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA,sBAAsB,2DAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yBAAyB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,wCAAwC,EAAE;AACrH;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA,gCAAgC,eAAe;AAC/C,+BAA+B,WAAW;AAC1C,4BAA4B,MAAM,2DAAO,GAAG;AAC5C,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,8DAA8D,0EAAsB;AACpF,2BAA2B,0EAAsB;AACjD;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,aAAa;AAC7C,kCAAkC,eAAe;AACjD,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0EAAsB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,+BAA+B,EAAE;AAC/G;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,gCAAgC,EAAE;AACjH;AACA;AACA;AACA,CAAC;AACyB;AAC1B;AACA,IAAI,+CAAiB;AACrB;AACA,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACyB;AAC1B;AACA,IAAI,+CAAiB;AACrB;AACA,qCAAqC,kBAAkB;AACvD,uCAAuC,oBAAoB;AAC3D,mCAAmC,gBAAgB;AACnD,wCAAwC,qBAAqB;AAC7D,gDAAgD,+BAA+B;AAC/E,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,GAAG;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0DAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,0EAAsB;AACnF;AACA;AACA;AACA,iCAAiC,0EAAsB;AACvD,2BAA2B,0EAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;AAC7B,2C;;;;;;;;;;;;AC3zBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AACH;AACK;AAC5C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C,sDAAsD,iBAAiB;AACvE,mBAAmB,0DAAM;AACzB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAkB;AAC9C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACnB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C,qDAAqD,iBAAiB;AACtE,mBAAmB,0DAAM,aAAa,2DAAY;AAClD,SAAS;AACT;AACA;AACA,0BAA0B,gDAAkB;AAC5C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACZ;AACnB,oC;;;;;;;;;;;;ACtHA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACnD;AACP,IAAI,yDAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA,gBAAgB,yDAAa,8BAA8B,yDAAa;AACxE,uBAAuB,yDAAa;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA,oCAAoC,YAAY,uDAAW,GAAG;AAC9D;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC8B;AACxB;AACP,uC;;;;;;;;;;;;ACjDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACC;AAC8E;AACpE;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA,SAAS;AACT,+EAA+E,iBAAiB;AAChG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,+BAA+B,gCAAgC;AAC/D,4CAA4C,yBAAyB;AACrE,uBAAuB,uDAAG,eAAe,gEAAQ;AACjD;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA,SAAS;AACT,8BAA8B,iBAAiB;AAC/C,oBAAoB;AACpB,SAAS;AACT;AACA;AACA,oCAAoC,gDAAkB;AACtD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACP;AACxB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC,CAAC,gFAA2B;AACN;AACvB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gDAAkB;AACnC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACT;AACtB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACR;AACrB,wC;;;;;;;;;;;;ACnKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAC9E;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,4BAA4B,gDAAkB;AAC9C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACnB,oC;;;;;;;;;;;;AC3FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AAC8E;AAC5E;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B,0BAA0B,0DAAM,CAAC,gEAAQ;AACzC,SAAS;AACT,kEAAkE,iBAAiB;AACnF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,eAAe,gEAAQ;AACjD;AACA,SAAS;AACT,oDAAoD,iBAAiB;AACrE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD;AACA;AACA;AACA;AACA,+CAA+C,0DAAM;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,cAAc,iDAAU,MAAM;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,0DAAM;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB,8DAAuB,UAAU;AACzF,sCAAsC,gBAAgB,mDAAY,WAAW;AAC7E,+CAA+C,2BAA2B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,0DAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,oBAAoB,0DAAM,EAAE,yBAAyB;AACrD;AACA;AACA,oBAAoB,0DAAM,EAAE,yBAAyB;AACrD;AACA,iDAAiD,0DAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAM,EAAE,yBAAyB;AACrD;AACA;AACA,oBAAoB,0DAAM,EAAE,yBAAyB;AACrD;AACA,mDAAmD,0DAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D,kCAAkC,iBAAiB;AACnD,wCAAwC,wBAAwB;AAChE,oCAAoC,oBAAoB;AACxD,wCAAwC,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,0DAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB,yDAAkB,WAAW;AACrF;AACA;AACA;AACA;AACA,8CAA8C,0DAAM;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0DAAM;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAM;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB,uDAAG;AAC1B,0BAA0B,0DAAM,CAAC,gEAAQ;AACzC,SAAS;AACT,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,UAAU,4DAAqB,UAAU;AACzE;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iDAAiD,0DAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sDAAsD,0DAAM;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0DAAM;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,wBAAwB,gDAAkB;AAC1C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACb;AAClB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wBAAwB;AAC3D,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACZ;AACjB,kC;;;;;;;;;;;;ACxYA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAClC;AAChC;AACK;AACpB;AACmD;AAC3C;AACvC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,mCAAmC,sBAAsB;AACzD;AACA;AACA,+BAA+B,6BAA6B,EAAE;AAC9D,mCAAmC,6DAA6D,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAA6C;AAC5E,mBAAmB,+DAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2CAA2C;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,qDAAU,KAAK,WAAW,qCAAqC,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,qDAAU,KAAK,WAAW,qCAAqC,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA,yDAAyD,uDAAY,KAAK,WAAW,qCAAqC,EAAE;AAC5H;AACA;AACA;AACA;AACA;AACA,yDAAyD,qDAAU,KAAK,WAAW,qCAAqC,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,qBAAqB,wBAAwB,EAAE;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,mBAAmB,0DAAM,KAAK,2CAAI,CAAC,2DAAY;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA,oCAAoC,aAAa;AACjD;AACA;AACA;AACA,uBAAuB,2DAAO;AAC9B;AACA,kBAAkB,8IAA8I;AAChK;AACA;AACA;AACA,0BAA0B,oJAAoJ;AAC9K;AACA,aAAa;AACb;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA,sBAAsB,8JAA8J;AACpL;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA,+BAA+B,2DAAY;AAC3C;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,8FAAgC;AAClB;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAkB;AAC9C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,gBAAgB;AAChB;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACZ;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA,CAAC,wCAAwC;AAClC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C,iC;;;;;;;;;;;;ACtiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AAC2F;AACjD;AACpD;AACO;AACR;AACmB;AAClD;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,0BAA0B,gDAAkB;AAC5C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACZ;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA,mEAAmE,UAAU,4BAA4B,EAAE,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,mBAAmB,0DAAM,KAAK,2CAAI,CAAC,2DAAY;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8DAAY;AACzC;AACA;AACA;AACA;AACA,sBAAsB,uDAAG;AACzB;AACA;AACA,iBAAiB;AACjB,aAAa,qBAAqB,iBAAiB,EAAE;AACrD,SAAS;AACT;AACA;AACA,CAAC,CAAC,gGAAkC;AAClB;AAClB,mC;;;;;;;;;;;;AC7MA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAChH;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gDAAkB;AAC9B,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACb;AAChB,iC;;;;;;;;;;;;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AACnD;AAC/C;AACJ;AACc;AACE;AACF;AACO;AACrB;AACO;AACA;AACM;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD,sCAAsC,kCAAkC,kBAAkB;AAC1F,QAAQ,oDAAM;AACd;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD,oDAAoD,mCAAmC;AACvF;AACA;AACA,2BAA2B,uDAAG,CAAC,0DAAM,CAAC,iEAAQ;AAC9C,6DAA6D,iBAAiB;AAC9E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2CAAI;AAC/B;AACA;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gEAAe;AACtC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yDAAW;AAClC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI;AAC3B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,oDAAoD,mCAAmC;AACvF;AACA;AACA;AACA,+BAA+B,uDAAG,CAAC,0DAAM,CAAC,iEAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB,aAAa,sBAAsB,kBAAkB,EAAE;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,YAAY;AAC5C;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,+FAA+F;AAC/F;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA,kBAAkB,uDAAG,EAAE,kEAAkE;AACzF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2CAAI;AAC/B;AACA;AACA,CAAC,CAAC,8FAAgC;AAClB;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gDAAkB;AACrC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACP;AACxB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACN;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gBAAgB,EAAE;AAC3D;AACA;AACA,CAAC;AAC8B;AAC/B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uDAAG,eAAe,uDAAG;AACvD;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,0DAAe;AACjB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,0DAAe;AACjB,iC;;;;;;;;;;;;ACvfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACD;AACM;AACQ;AACZ;AACF;AACgB;AACwD;AAC1B;AAC/B;AACS;AACjB;AACJ;AACS;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,gBAAgB;AAClD,4CAA4C,4BAA4B;AACxE,4CAA4C,yBAAyB;AACrE,0BAA0B,0DAAM;AAChC;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C,SAAS;AACT,8BAA8B,OAAO,uDAAG,eAAe;AACvD,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,gBAAgB;AAClD,4CAA4C,4BAA4B;AACxE,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA,sCAAsC,0DAAM,sBAAsB,kFAAkF;AACpJ;AACA;AACA;AACA,6BAA6B,6EAA6E;AAC1G,iBAAiB,sBAAsB,kBAAkB,EAAE;AAC3D,aAAa;AACb;AACA,6BAA6B,iFAAiF;AAC9G,iBAAiB,sBAAsB,kBAAkB,EAAE;AAC3D,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAY;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAY;AACxC,SAAS;AACT;AACA;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAY;AACnC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI;AAC3B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qEAAiB;AACxC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAa;AACpC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,gDAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,uBAAuB,uDAAG,CAAC,0DAAM;AACjC,2BAA2B,oBAAoB;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,UAAU,0DAAM,EAAE,gBAAgB,2BAA2B,EAAE,UAAU;AAChG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,UAAU,0DAAM,EAAE,gBAAgB,yBAAyB,EAAE,UAAU;AAC9F,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,UAAU,0DAAM,EAAE,gBAAgB,kCAAkC,EAAE,UAAU;AACvG,SAAS,GAAG,sBAAsB,iBAAiB,EAAE,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAG;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA,gCAAgC,0DAAM,CAAC,iEAAQ;AAC/C,wBAAwB,0DAAM,CAAC,iEAAQ;AACvC;AACA;AACA,kBAAkB,uDAAG;AACrB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAG;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,qCAAqC,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,gGAAgG;AAChG;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,0BAA0B;AAC/D,qBAAqB;AACrB,iCAAiC,kDAAkD;AACnF,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,0FAA4B;AACd;AAChB,iC;;;;;;;;;;;;AC1dA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AAC3F;AACE;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C;AACA;AACA;AACA,SAAS;AACT,2DAA2D,iBAAiB;AAC5E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA,SAAS;AACT,kEAAkE,iBAAiB;AACnF;AACA;AACA,CAAC,CAAC,kFAA6B;AACJ;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACH;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,iBAAiB,gDAAkB;AACnC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,wEAAmB;AACC;AACtB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD,+BAA+B,YAAY;AAC3C,yCAAyC,wBAAwB;AACjE,0CAA0C,yBAAyB;AACnE;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACQ;AAC7B,sC;;;;;;;;;;;;AC/KA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACE;AACQ;AACxD;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2DAAO;AACzB;AACA,wCAAwC;AACxC,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA,qBAAqB,0DAAM,UAAU,mEAAe;AACpD;AACA,SAAS;AACT,6BAA6B,6DAAkB;AAC/C,6DAA6D,mCAAmC,EAAE;AAClG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,uC;;;;;;;;;;;;ACxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACwB;AACZ;AACD;AACvD;AACA;AACA,+BAA+B,SAAS,mEAAe,sBAAsB;AAC7E;AACA,gCAAgC,wDAAW;AAC3C;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,gDAAgD;AACpF;AACA;AACA,QAAQ,gEAAY,UAAU,mEAAe;AAC7C;AACA,QAAQ,gEAAY;AACpB;AACA;AACA;AACA;AACA;AACA,6DAA6D,cAAc;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0DAAM,QAAQ,mBAAmB;AAChD;AACA;AACA;AACA,mDAAmD,0EAAa;AAChE;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA,QAAQ,gEAAY;AACpB,kBAAkB,0DAAM,WAAW,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,MAAM;AACxD,+BAA+B,kEAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,gBAAgB;AACpD;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,iBAAiB;AACrD;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,kBAAkB;AACtD;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,mBAAmB;AACvD;AACA;AACA;AACA,CAAC;AACuB;AACxB,wC;;;;;;;;;;;;AClIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACkB;AACb;AACO;AACS;AAC/C;AACP;AACA;AACA,QAAQ,uDAAG;AACX;AACA,YAAY,uDAAG;AACf;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAG,qBAAqB,uDAAG;AACvC;AACA,uBAAuB,0EAAa;AACpC;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA,QAAQ,mDAAM;AACd;AACA;AACA,WAAW,mDAAO;AAClB;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA,mBAAmB,0DAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0DAAM;AACzB,SAAS;AACT;AACA;AACA,CAAC,CAAC,0DAAe;AACjB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAM;AAC7B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAM;AAC7B,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,0DAAe;AACV;AACP;AACA;AACO;AACP;AACA;AACA,iC;;;;;;;;;;;;ACvFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgF;AACxE;AACG;AAC5C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,uBAAuB,gDAAkB;AACzC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACD;AAC5B;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,yBAAyB,gDAAkB;AAC3C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACD;AAC9B;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ,uDAAG,mDAAmD,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2DAAO;AACnC;AACA;AACA;AACA,kCAAkC,QAAQ,uDAAG,mDAAmD,EAAE;AAClG;AACA;AACA,4BAA4B,gDAAkB;AAC9C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACT;AACpB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,EAAE,4DAAa;AACxF;AACA;AACA,8BAA8B,gDAAkB;AAChD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACV;AACrB,4C;;;;;;;;;;;;ACpJA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACwC;AACvC;AAClC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,8CAA8C,8BAA8B;AAC5E;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,wDAAwD,gDAAkB;AAC1E,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,wEAAmB;AACa;AAClC,wC;;;;;;;;;;;;ACxHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACc;AAClB;AACD;AACqB;AACD;AACV;AACK;AACA;AACA;AACY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,kCAAkC,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kEAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,2BAA2B,4DAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0CAAI;AACnC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yCAAG;AAClC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,8DAAgB;AAC/C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,mDAAW;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,6DAAiB;AACxC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAa;AAC5C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAW;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAW;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiB;AACX;AACP,gC;;;;;;;;;;;;ACrLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AACK;AACH;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gDAAkB;AAC5D,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACJ;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC,CAAC,gFAA2B;AACH;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B,6BAA6B,0DAAM,EAAE,cAAc,6BAA6B,EAAE;AAClF;AACA;AACA;AACA,yBAAyB,8BAA8B;AACvD,SAAS;AACT,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACJ;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAG;AACf,+BAA+B,0DAAM,EAAE,cAAc,qBAAqB,EAAE;AAC5E;AACA,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,gFAA2B;AACH;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,6BAA6B,gDAAkB;AAC/C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACG;AAClC,iC;;;;;;;;;;;;AC/NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgD;AACU;AAC/C;AACA;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yBAAyB,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,+BAA+B,gBAAgB;AAC/C,4BAA4B,aAAa;AACzC;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA,oCAAoC,uBAAuB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B,qBAAqB,0DAAM,CAAC,gEAAQ,uEAAuE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wDAAwD,+DAAW;AACnE,gBAAgB,wEAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,yDAAc;AACzD;AACA;AACA,8BAA8B,iBAAiB,wBAAwB,sDAAsD,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA,eAAe,2DAAO;AACtB,eAAe,uDAAG,4BAA4B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gDAAkB;AAC/B,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACX;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,uDAAG;AAC1D,oBAAoB,0DAAM;AAC1B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,2BAA2B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa,IAAI;AACjB;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0DAA0D;AAC3D;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;AACjC,kC;;;;;;;;;;;;ACvUA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgD;AAC/C;AAClC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uDAAG,sCAAsC,oCAAoC,EAAE,iBAAiB,oBAAoB;AAC7I;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,oCAAoC,8BAA8B;AAClE,gBAAgB,uDAAG;AACnB;AACA;AACA,UAAU,GAAG;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gDAAkB;AACtC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACJ;AACzB,yC;;;;;;;;;;;;AC7CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACyD;AAC7C;AACP;AACY;AACI;AACV;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iEAAa;AAC7B;AACA,6BAA6B,2DAAO;AACpC;AACA;AACA;AACA;AACA;AACA,uBAAuB,2DAAO;AAC9B,6BAA6B,2DAAO;AACpC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0DAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mDAAM;AAClB;AACA;AACA,SAAS;AACT;AACA;AACA,2EAA2E,0BAA0B,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D,2FAA2F,6BAA6B;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,yFAAyF,QAAQ;AACjG,eAAe,0EAAa;AAC5B,YAAY,gEAAY;AACxB;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY,8DAAY,GAAG,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2DAAO;AAClC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,yDAAc;AACe;AAC/B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;AACzC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,kBAAkB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AACrC;AACA;AACA,aAAa;AACb,SAAS,qBAAqB,yBAAyB,EAAE,EAAE;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACsC;AACvC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,YAAY,+CAAiB;AAC7B;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,+C;;;;;;;;;;;;AC9SA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AACD;AACgD;AACvD;AAClC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAe;AACtC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wEAAmB;AAC9C;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gFAA2B;AAC/C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6BAA6B;AAC1E,wCAAwC,wBAAwB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAc;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACW;AACxC,wD;;;;;;;;;;;;AC9HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACkB;AACZ;AACkF;AAC3C;AACZ;AACZ;AACtD;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA,sBAAsB,uDAAG,kCAAkC,SAAS,cAAc,EAAE;AACpF,kCAAkC,kDAAW,QAAQ,+CAAQ,eAAe,+CAAQ;AACpF;AACA;AACA,oBAAoB,kFAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAM;AACjC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,sBAAsB,uDAAG;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gBAAgB;AAChD;AACA;AACA;AACA;AACA;AACA,kBAAkB,0DAAM;AACxB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAG,0CAA0C,SAAS,cAAc,EAAE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAM;AACjC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,iBAAiB;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kDAAkD;AACnF;AACA,kBAAkB,uDAAG,EAAE,mCAAmC;AAC1D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA,0CAA0C,gFAA2B;AACrE,6EAA6E,yBAAyB,EAAE;AACxG,qBAAqB,+CAAQ;AAC7B,qBAAqB,+CAAQ;AAC7B;AACA,2CAA2C,gFAA2B;AACtE,8EAA8E,yBAAyB,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAW,QAAQ,+CAAQ,eAAe,+CAAQ;AACxF;AACA,+BAA+B,kFAA6B;AAC5D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,mCAAmC,gFAA2B,CAAC,0EAAa;AAC5E;AACA;AACA;AACA;AACA,sBAAsB,uDAAG;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACmB;AACxC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,kDAAW,MAAM;AACvD;AACA;AACA,sBAAsB,gFAA2B,CAAC,0EAAa;AAC/D;AACA;AACA,qCAAqC,2DAAO;AAC5C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D,qDAAqD,qCAAqC;AAC1F,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,0FAA4B;AACa;AAC3C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,sDAAe,kBAAkB;AACvE,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,kDAAW,MAAM;AACvD,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,0FAA4B;AACc;AAC5C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,sDAAe,kBAAkB;AACvE,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,2DAAY;AACzE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,gFAA2B;AACD;AAC5B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,kDAAW,MAAM;AACvD,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC2C;AAC5C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,kDAAW,MAAM;AACvD,uCAAuC,uBAAuB;AAC9D,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC6C;AAC9C,wD;;;;;;;;;;;;AC1jBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACqE;AACzE;AAC2B;AACtB;AACI;AACJ;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yCAAG;AAC1B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAQ;AAC/B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oEAAiB;AACxC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qEAAqE,YAAY,yCAAG,UAAU,EAAE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAmB;AACvC;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAmB;AACvC;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8CAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG;AACA,iBAAiB,yCAAG;AACpB,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gDAAkB;AACtC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACb;AAChB,gC;;;;;;;;;;;;AC1JA;AAAA;AAAA;AAAA;AAAiC;AAC2B;AAC5D;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,sGAAsG,qBAAqB;AAC3H;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,qGAAqG,+CAA+C;AACpJ;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,qGAAqG;AACrG;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,2GAA2G,SAAS;AACpH;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,sGAAsG,yBAAyB;AAC/H;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,sGAAsG,SAAS;AAC/G;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,yGAAyG,SAAS;AAClH;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACE;AACvB,uC;;;;;;;;;;;;ACxLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACxE;AACO;AACH;AAC5C;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gDAAkB;AAClD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACT;AACtB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC,CAAC,gFAA2B;AACR;AACrB,sC;;;;;;;;;;;;ACvHA;AAAA;AAAA;AAAA;AAAiC;AAC2B;AAC5D;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,2GAA2G,SAAS;AACpH;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,sGAAsG,SAAS;AAC/G;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA,kGAAkG,mCAAmC;AACrI;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACE;AACvB,uC;;;;;;;;;;;;ACjHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AACA;AACE;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ,cAAc,uBAAuB;AAC1E,SAAS,oBAAoB,wCAAwC,EAAE;AACvE;AACA;AACA,8BAA8B,gDAAkB;AAChD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACV;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC,CAAC,gFAA2B;AACT;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,UAAU,0BAA0B,EAAE,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,kBAAkB,gDAAkB;AACpC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC;AACsB;AACvB,qC;;;;;;;;;;;;AC3IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiD;AAC3C;AACK;AAC5C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,yDAAyD;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,yDAAyD;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,yDAAyD;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uDAAG;AAClB,mCAAmC,gEAAQ;AAC3C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,kCAAkC,gDAAkB;AACpD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACN;AACvB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA,sCAAsC,gDAAkB;AACxD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACJ;AACzB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;AACjD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C,kC;;;;;;;;;;;;AClQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2E;AAC8C;AAC1C;AAC2J;AAC1L;AACb;AACD;AACP;AACwD;AACzC;AAC0E;AACvE;AACM;AACoC;AACJ;AAC5C;AACyD;AAC3D;AACa;AAC2G;AAC5G;AAClB;AACN;AACD;AAC2B;AACI;AACA;AACV;AACM;AAC0B;AAC/C;AACe;AACA;AAC7C,8B;;;;;;;;;;;;ACjCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAC9E;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT,8BAA8B,2BAA2B,qCAAqC,EAAE;AAChG,oBAAoB;AACpB,SAAS;AACT;AACA,oBAAoB,gDAAkB;AACtC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACN;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA,SAAS;AACT,+BAA+B,2BAA2B,qCAAqC,EAAE;AACjG,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACL;AACxB,yC;;;;;;;;;;;;AChFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AAC1B;AACP;AACA;AACA;AACA,CAAC,0DAA0D;AAC3D;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AACpC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AAC9B;AACP;AACA;AACA;AACA,CAAC,gDAAgD;AAC1C;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AACtB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AACtB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AAC1D;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;AAC1C;AACP;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AAChD;AACP;AACA;AACA;AACA,CAAC,wDAAwD;AAClD;AACP;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B,iC;;;;;;;;;;;;AC1gBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AAC1C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,CAAC,0DAAM,EAAE,cAAc,gCAAgC,EAAE;AACnF,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gDAAkB;AAChE,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACF;AAC7B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,4BAA4B,EAAE,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACD;AAC5B,6C;;;;;;;;;;;;AC/EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AAC3F;AACE;AAC5C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6CAA6C;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iCAAiC;AAC3E;AACA;AACA;AACA;AACA,aAAa,qBAAqB,kBAAkB,EAAE,sBAAsB,kBAAkB,EAAE;AAChG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACD;AAC5B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,qBAAqB;AAC5C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,sCAAsC,gDAAkB;AACxD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,wEAAmB;AACrB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uDAAG;AAClB,2BAA2B,0DAAM,CAAC,gEAAQ;AAC1C,SAAS;AACT;AACA;AACA,0DAA0D,gDAAkB;AAC5E,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,wEAAmB;AACrB,wC;;;;;;;;;;;;AC1ZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC2B;AAClB;AACX;AACQ;AACK;AAC5C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0DAAM,CAAC,gEAAQ;AACvC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,gCAAgC,0DAAM;AACtC,qBAAqB,oBAAoB;AACzC,aAAa;AACb;AACA;AACA,gCAAgC,0DAAM;AACtC,qBAAqB,oBAAoB;AACzC,aAAa;AACb;AACA;AACA,gCAAgC,0DAAM;AACtC,sBAAsB,qBAAqB;AAC3C,aAAa;AACb;AACA;AACA,gCAAgC,0DAAM;AACtC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,wFAAwF;AACxF;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,0BAA0B,2CAAI,CAAC,2DAAY;AAC3C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,wEAAmB;AACI;AACzB,qC;;;;;;;;;;;;AChKA;AAAA;AAAA;AAAkD;AAC3C;AACP,QAAQ,uEAAmB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yC;;;;;;;;;;;;ACfA;AAAA;AAAO;AACP;AACA,uBAAuB,eAAe;AACtC;AACA;AACA,oC;;;;;;;;;;;;ACLA;AAAA;AAAA;AAAA;AAA0D;AACF;AACxD;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,iEAAa;AACzB;AACA;AACA;AACA,YAAY,mEAAe;AAC3B;AACA,2BAA2B,2DAAO,CAAC,mEAAe;AAClD;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB,+BAA+B,2DAAO;AACtC;AACA,qBAAqB,uDAAG;AACxB,+BAA+B,2DAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2DAAO;AAC1C;AACA,aAAa;AACb;AACA;AACA,KAAK;AACL;AACA,yC;;;;;;;;;;;;;ACxCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AACnG;AACU;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D,4CAA4C,yBAAyB;AACrE,uBAAuB,uDAAG,eAAe,gEAAQ;AACjD;AACA;AACA,SAAS;AACT,mDAAmD,iBAAiB;AACpE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,UAAU,0BAA0B,EAAE,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,0BAA0B,wEAAmB;AAC7C;AACA;AACA,CAAC,CAAC,gFAA2B;AACb;AAChB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wEAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,6CAA6C;AACpE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gDAAkB;AAClD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACT;AACtB,iC;;;;;;;;;;;;ACvJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AACnG;AAClC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,gBAAgB;AACvC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,kBAAkB;AACzC,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACY;AACjC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,kFAA6B;AACD;AAC9B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACA;AAC7B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,cAAc,gDAAkB;AAChC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACnB,oC;;;;;;;;;;;;AChIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AACyC;AACF;AACrC;AACN;AACJ;AACJ;AACY;AACW;AACP;AACJ;AACX;AACuB;AACS;AACP;AACjB;AACL;AACI;AACkB;AACd;AACY;AACH;AACnD;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,kBAAkB;AACpD,kCAAkC,iBAAiB;AACnD,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B,0BAA0B,0DAAM;AAChC,+BAA+B,sCAAsC;AACrE,aAAa;AACb,SAAS;AACT,mDAAmD,iBAAiB;AACpE;AACA;AACA,6BAA6B,4DAAY;AACzC;AACA,SAAS;AACT;AACA;AACA,oBAAoB,gDAAkB;AACtC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACf;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,eAAe,gDAAkB;AACjC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2EAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0CAAI;AAC3B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,yBAAyB;AACrE,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kFAA6B;AAC3D,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2DAAY;AACnC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI;AAC3B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mEAAgB;AACvC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAW;AAClC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gDAAO;AAC9B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qEAAiB;AACxC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAe;AACtC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qEAAsB;AACzC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI;AAC3B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,CAAC,0DAAM;AACjC,2BAA2B,mBAAmB;AAC9C,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT,yDAAyD,iBAAiB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA,SAAS;AACT,yDAAyD,iBAAiB;AAC1E;AACA;AACA,0BAA0B,oDAAQ,CAAC,4DAAY;AAC/C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA,kCAAkC,iBAAiB;AACnD,8CAA8C,6BAA6B;AAC3E,mBAAmB,kFAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI,CAAC,4DAAY;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,EAAE,UAAU,0DAAM,EAAE,gBAAgB,2BAA2B,EAAE,UAAU;AACrG,yDAAyD,iBAAiB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,eAAe;AACjD;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAU;AAC7B;AACA;AACA;AACA;AACA;AACA,0BAA0B,kFAA6B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,2CAA2C;AAC1E,sCAAsC,6BAA6B;AACnE,eAAe,gEAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,2CAA2C;AAC1E,eAAe,gEAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gDAAkB;AACpC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,6FAA+B;AAClB;AACf,gC;;;;;;;;;;;AC3qBA;AACA,qCAAqC,aAAa,yCAAyC,sBAAsB,0DAA0D,qBAAqB,8CAA8C,iBAAiB,mKAAmK,yfAAyf,+MAA+M,gCAAgC,mBAAmB,+CAA+C,kCAAkC,8GAA8G,4HAA4H,2FAA2F,mHAAmH,sCAAsC,6LAA6L,uDAAuD,s0BAAs0B,8CAA8C,+CAA+C,mDAAmD,oEAAoE,yBAAyB,mBAAmB,oDAAoD,kEAAkE,gfAAgf,6FAA6F,mPAAmP,8DAA8D,IAAI,oXAAoX,4BAA4B,SAAS,mHAAmH,uEAAuE,+SAA+S,6DAA6D,2GAA2G,YAAY,kEAAkE,kEAAkE,oHAAoH,mCAAmC,2CAA2C,oCAAoC,wIAAwI,oJAAoJ,IAAI,iBAAiB,2RAA2R,WAAW,IAAI,0DAA0D,YAAY,gBAAgB,MAAM,wCAAwC,0CAA0C,8DAA8D,kDAAkD,wDAAwD,GAAG,yBAAyB,SAAS,EAAE,wBAAwB,4DAA4D,6BAA6B,0DAA0D,uDAAuD,+EAA+E,4DAA4D,qCAAqC,+JAA+J,0JAA0J,0DAA0D,gCAAgC,oDAAoD,iDAAiD,kEAAkE,4GAA4G,WAAW,4IAA4I,0BAA0B,YAAY,4CAA4C,QAAQ,+CAA+C,SAAS,UAAU,+EAA+E,EAAE,6DAA6D,kDAAkD,kEAAkE,0GAA0G,8EAA8E,yXAAyX,6DAA6D,oCAAoC,qFAAqF,0MAA0M,+IAA+I,2QAA2Q,gFAAgF,0CAA0C,8EAA8E,qCAAqC,0HAA0H,mEAAmE,8KAA8K,WAAW,sBAAsB,gGAAgG,8GAA8G,2BAA2B,8OAA8O,gCAAgC,0DAA0D,WAAW,wBAAwB,QAAQ,sBAAsB,yBAAyB,+DAA+D,MAAM,4DAA4D,wHAAwH,6BAA6B,4xBAA4xB,qEAAqE,wHAAwH,iHAAiH,wNAAwN,yBAAyB,6IAA6I,oFAAoF,0GAA0G,0GAA0G,sLAAsL,sEAAsE,wHAAwH,oBAAoB,iHAAiH,wNAAwN,yBAAyB,mEAAmE,oFAAoF,0GAA0G,0GAA0G,sRAAsR,wDAAwD,iGAAiG,uDAAuD,mnBAAmnB,uDAAuD,sBAAsB,6CAA6C,YAAY,sBAAsB,iIAAiI,qDAAqD,mEAAmE,iTAAiT,mDAAmD,kCAAkC,MAAM,iDAAiD,KAAK,oBAAoB,0MAA0M,0DAA0D,sDAAsD,oCAAoC,qDAAqD,sEAAsE,6CAA6C,oDAAoD,sMAAsM,gEAAgE,oMAAoM,yPAAyP,wCAAwC,qDAAqD,SAAS,yDAAyD,qCAAqC,iGAAiG,sBAAsB,yIAAyI,sDAAsD,mGAAmG,wDAAwD,mBAAmB,2BAA2B,oJAAoJ,0DAA0D,yDAAyD,4DAA4D,mBAAmB,8BAA8B,sBAAsB,uEAAuE,qKAAqK,WAAW,SAAS,sEAAsE,4FAA4F,iCAAiC,gCAAgC,gCAAgC,WAAW,+BAA+B,gBAAgB,QAAQ,SAAS,yDAAyD,0DAA0D,MAAM,0CAA0C,YAAY,WAAW,uCAAuC,SAAS,yDAAyD,wDAAwD,MAAM,0CAA0C,YAAY,WAAW,8FAA8F,wDAAwD,MAAM,0CAA0C,YAAY,WAAW,oGAAoG,SAAS,mEAAmE,MAAM,qBAAqB,8CAA8C,SAAS,+DAA+D,yCAAyC,2IAA2I,kDAAkD,6GAA6G,mYAAmY,sBAAsB,uLAAuL,MAAM,utDAAutD,+QAA+Q,kGAAkG,oEAAoE,2DAA2D,wCAAwC,mEAAmE,4HAA4H,0LAA0L,6DAA6D,6CAA6C,yBAAyB,kEAAkE,yDAAyD,gBAAgB,2TAA2T,qCAAqC,wiBAAwiB,oFAAoF,IAAI,cAAc,SAAS,gEAAgE,4JAA4J,+DAA+D,eAAe,2CAA2C,kGAAkG,sCAAsC,6DAA6D,yBAAyB,kBAAkB,IAAI,wDAAwD,uGAAuG,SAAS,2DAA2D,YAAY,wEAAwE,kJAAkJ,qDAAqD,0EAA0E,8BAA8B,eAAe,+EAA+E,iCAAiC,IAAI,MAAM,wHAAwH,sEAAsE,MAAM,cAAc,oDAAoD,MAAM,kFAAkF,SAAS,wDAAwD,gCAAgC,yDAAyD,kFAAkF,yCAAyC,yFAAyF,2CAA2C,4DAA4D,SAAS,aAAa,mXAAmX,mDAAmD,mDAAmD,mBAAmB,0DAA0D,kDAAkD,4CAA4C,MAAM,gBAAgB,EAAE,gCAAgC,SAAS,2DAA2D,yBAAyB,WAAW,SAAS,SAAS,kDAAkD,qCAAqC,yBAAyB,yBAAyB,weAAwe,mFAAmF,KAAK,6GAA6G,SAAS,wDAAwD,8CAA8C,iDAAiD,4CAA4C,2DAA2D,eAAe,2CAA2C,iCAAiC,OAAO,0HAA0H,uCAAuC,+NAA+N,qKAAqK,sDAAsD,UAAU,2DAA2D,uFAAuF,uFAAuF,MAAM,2BAA2B,2DAA2D,+BAA+B,SAAS,0HAA0H,sDAAsD,gTAAgT,kEAAkE,IAAI,2NAA2N,SAAS,UAAU,oEAAoE,IAAI,qOAAqO,SAAS,UAAU,0DAA0D,yCAAyC,SAAS,gDAAgD,SAAS,4DAA4D,0DAA0D,uDAAuD,qBAAqB,wCAAwC,oCAAoC,mPAAmP,qDAAqD,iDAAiD,kDAAkD,mDAAmD;AAC5q+B,mDAAmD,qDAAqD,sDAAsD,wDAAwD,oDAAoD,qDAAqD,sDAAsD,qDAAqD,sDAAsD,wDAAwD,yDAAyD,wDAAwD,eAAe,CAAC,IAA0B,0FAA0F,oCAAoC,wBAAwB,G;;;;;;;;;;;;ACFz0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA,+DAA+D;AAC/D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,uDAAuD;AAChF;AACA;;AAEO;AACP;AACA,mBAAmB,sBAAsB;AACzC;AACA;;AAEO;AACP;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,4DAA4D,cAAc;AAC1E;AACA;AACA;;AAEO;AACP;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;;AAEO;AACP,mCAAmC,oCAAoC;AACvE;;AAEO;AACP;AACA;;AAEO;AACP;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,iEAAiE,uBAAuB,EAAE,4BAA4B;AACrJ;AACA,KAAK;AACL;;AAEO;AACP,aAAa,6BAA6B,0BAA0B,aAAa,EAAE,qBAAqB;AACxG,gBAAgB,qDAAqD,oEAAoE,aAAa,EAAE;AACxJ,sBAAsB,sBAAsB,qBAAqB,GAAG;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,kCAAkC,SAAS;AAC3C,kCAAkC,WAAW,UAAU;AACvD,yCAAyC,cAAc;AACvD;AACA,6GAA6G,OAAO,UAAU;AAC9H,gFAAgF,iBAAiB,OAAO;AACxG,wDAAwD,gBAAgB,QAAQ,OAAO;AACvF,8CAA8C,gBAAgB,gBAAgB,OAAO;AACrF;AACA,iCAAiC;AACjC;AACA;AACA,SAAS,YAAY,aAAa,OAAO,EAAE,UAAU,WAAW;AAChE,mCAAmC,SAAS;AAC5C;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;;AAEO;AACP,4BAA4B,sBAAsB;AAClD;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA,iBAAiB,sFAAsF,aAAa,EAAE;AACtH,sBAAsB,gCAAgC,qCAAqC,0CAA0C,EAAE,EAAE,GAAG;AAC5I,2BAA2B,MAAM,eAAe,EAAE,YAAY,oBAAoB,EAAE;AACpF,sBAAsB,oGAAoG;AAC1H,6BAA6B,uBAAuB;AACpD,4BAA4B,wBAAwB;AACpD,2BAA2B,yDAAyD;AACpF;;AAEO;AACP;AACA,iBAAiB,4CAA4C,SAAS,EAAE,qDAAqD,aAAa,EAAE;AAC5I,yBAAyB,6BAA6B,oBAAoB,gDAAgD,gBAAgB,EAAE,KAAK;AACjJ;;AAEO;AACP;AACA;AACA,2GAA2G,sFAAsF,aAAa,EAAE;AAChN,sBAAsB,8BAA8B,gDAAgD,uDAAuD,EAAE,EAAE,GAAG;AAClK,4CAA4C,sCAAsC,UAAU,oBAAoB,EAAE,EAAE,UAAU;AAC9H;;AAEO;AACP,gCAAgC,uCAAuC,aAAa,EAAE,EAAE,OAAO,kBAAkB;AACjH;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,4CAA4C;AAC5C;;;;;;;;;;;;ACzLA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C"",""file"":""sp-taxonomy.es5.umd.bundle.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""pnp.sp-taxonomy\""] = factory();\n\telse\n\t\troot[\""pnp.sp-taxonomy\""] = factory();\n})(window, function() {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \""./build/packages-es5/sp-taxonomy/index.js\"");\n"",""export * from \""./src/common\"";\r\n//# sourceMappingURL=index.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { BearerTokenFetchClient } from \""./netutil\"";\r\nimport { isUrlAbsolute } from \""./util\"";\r\n// @ts-ignore\r\nimport * as adal from \""adal-angular/dist/adal.min.js\"";\r\n/**\r\n * Parses out the root of the request url to use as the resource when getting the token\r\n *\r\n * After: https://gist.github.com/jlong/2428561\r\n * @param url The url to parse\r\n */\r\nfunction getResource(url) {\r\n    var parser = document.createElement(\""a\"");\r\n    parser.href = url;\r\n    return parser.protocol + \""//\"" + parser.hostname;\r\n}\r\n/**\r\n * Azure AD Client for use in the browser\r\n */\r\nvar AdalClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AdalClient, _super);\r\n    /**\r\n     * Creates a new instance of AdalClient\r\n     * @param clientId Azure App Id\r\n     * @param tenant Office 365 tenant (Ex: {tenant}.onmicrosoft.com)\r\n     * @param redirectUri The redirect url used to authenticate the\r\n     */\r\n    function AdalClient(clientId, tenant, redirectUri) {\r\n        var _this = _super.call(this, null) || this;\r\n        _this.clientId = clientId;\r\n        _this.tenant = tenant;\r\n        _this.redirectUri = redirectUri;\r\n        _this._displayCallback = null;\r\n        _this._loginPromise = null;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Creates a new AdalClient using the values of the supplied SPFx context (requires SPFx >= 1.6)\r\n     *\r\n     * @param spfxContext Current SPFx context\r\n     * @description Using this method requires that the features described in this article\r\n     * https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-aadhttpclient are activated in the tenant.\r\n     */\r\n    AdalClient.fromSPFxContext = function (spfxContext) {\r\n        return new SPFxAdalClient(spfxContext);\r\n    };\r\n    /**\r\n     * Conducts the fetch opertation against the AAD secured resource\r\n     *\r\n     * @param url Absolute URL for the request\r\n     * @param options Any fetch options passed to the underlying fetch implementation\r\n     */\r\n    AdalClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        if (!isUrlAbsolute(url)) {\r\n            throw Error(\""You must supply absolute urls to AdalClient.fetch.\"");\r\n        }\r\n        // the url we are calling is the resource\r\n        return this.getToken(getResource(url)).then(function (token) {\r\n            _this.token = token;\r\n            return _super.prototype.fetch.call(_this, url, options);\r\n        });\r\n    };\r\n    /**\r\n     * Gets a token based on the current user\r\n     *\r\n     * @param resource The resource for which we are requesting a token\r\n     */\r\n    AdalClient.prototype.getToken = function (resource) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            _this.ensureAuthContext().then(function (_) { return _this.login(); }).then(function (_) {\r\n                AdalClient._authContext.acquireToken(resource, function (message, token) {\r\n                    if (message) {\r\n                        return reject(Error(message));\r\n                    }\r\n                    resolve(token);\r\n                });\r\n            }).catch(reject);\r\n        });\r\n    };\r\n    /**\r\n     * Ensures we have created and setup the adal AuthenticationContext instance\r\n     */\r\n    AdalClient.prototype.ensureAuthContext = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            if (AdalClient._authContext === null) {\r\n                AdalClient._authContext = adal.inject({\r\n                    clientId: _this.clientId,\r\n                    displayCall: function (url) {\r\n                        if (_this._displayCallback) {\r\n                            _this._displayCallback(url);\r\n                        }\r\n                    },\r\n                    navigateToLoginRequestUrl: false,\r\n                    redirectUri: _this.redirectUri,\r\n                    tenant: _this.tenant,\r\n                });\r\n            }\r\n            resolve();\r\n        });\r\n    };\r\n    /**\r\n     * Ensures the current user is logged in\r\n     */\r\n    AdalClient.prototype.login = function () {\r\n        var _this = this;\r\n        if (this._loginPromise) {\r\n            return this._loginPromise;\r\n        }\r\n        this._loginPromise = new Promise(function (resolve, reject) {\r\n            if (AdalClient._authContext.getCachedUser()) {\r\n                return resolve();\r\n            }\r\n            _this._displayCallback = function (url) {\r\n                var popupWindow = window.open(url, \""login\"", \""width=483, height=600\"");\r\n                if (!popupWindow) {\r\n                    return reject(Error(\""Could not open pop-up window for auth. Likely pop-ups are blocked by the browser.\""));\r\n                }\r\n                if (popupWindow && popupWindow.focus) {\r\n                    popupWindow.focus();\r\n                }\r\n                var pollTimer = window.setInterval(function () {\r\n                    if (!popupWindow || popupWindow.closed || popupWindow.closed === undefined) {\r\n                        window.clearInterval(pollTimer);\r\n                    }\r\n                    try {\r\n                        if (popupWindow.document.URL.indexOf(_this.redirectUri) !== -1) {\r\n                            window.clearInterval(pollTimer);\r\n                            AdalClient._authContext.handleWindowCallback(popupWindow.location.hash);\r\n                            popupWindow.close();\r\n                            resolve();\r\n                        }\r\n                    }\r\n                    catch (e) {\r\n                        reject(e);\r\n                    }\r\n                }, 30);\r\n            };\r\n            // this triggers the login process\r\n            _this.ensureAuthContext().then(function (_) {\r\n                AdalClient._authContext._loginInProgress = false;\r\n                AdalClient._authContext.login();\r\n                _this._displayCallback = null;\r\n            });\r\n        });\r\n        return this._loginPromise;\r\n    };\r\n    /**\r\n     * Our auth context\r\n     */\r\n    AdalClient._authContext = null;\r\n    return AdalClient;\r\n}(BearerTokenFetchClient));\r\nexport { AdalClient };\r\n/**\r\n * Client wrapping the aadTokenProvider available from SPFx >= 1.6\r\n */\r\nvar SPFxAdalClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPFxAdalClient, _super);\r\n    /**\r\n     *\r\n     * @param context provide the appropriate SPFx Context object\r\n     */\r\n    function SPFxAdalClient(context) {\r\n        var _this = _super.call(this, null) || this;\r\n        _this.context = context;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Executes a fetch request using the supplied url and options\r\n     *\r\n     * @param url Absolute url of the request\r\n     * @param options Any options\r\n     */\r\n    SPFxAdalClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        return this.getToken(getResource(url)).then(function (token) {\r\n            _this.token = token;\r\n            return _super.prototype.fetch.call(_this, url, options);\r\n        });\r\n    };\r\n    /**\r\n     * Gets an AAD token for the provided resource using the SPFx AADTokenProvider\r\n     *\r\n     * @param resource Resource for which a token is to be requested (ex: https://graph.microsoft.com)\r\n     */\r\n    SPFxAdalClient.prototype.getToken = function (resource) {\r\n        return this.context.aadTokenProviderFactory.getTokenProvider().then(function (provider) {\r\n            return provider.getToken(resource);\r\n        });\r\n    };\r\n    return SPFxAdalClient;\r\n}(BearerTokenFetchClient));\r\nexport { SPFxAdalClient };\r\n//# sourceMappingURL=adalclient.js.map"",""import { isFunc } from \""./util\"";\r\n/**\r\n * Used to calculate the object properties, with polyfill if needed\r\n */\r\nvar objectEntries = isFunc(Object.entries) ? Object.entries : function (o) { return Object.keys(o).map(function (k) { return [k, o[k]]; }); };\r\n/**\r\n * Converts the supplied object to a map\r\n *\r\n * @param o The object to map\r\n */\r\nexport function objectToMap(o) {\r\n    if (o !== undefined && o !== null) {\r\n        return new Map(objectEntries(o));\r\n    }\r\n    return new Map();\r\n}\r\n/**\r\n * Merges to Map instances together, overwriting values in target with matching keys, last in wins\r\n *\r\n * @param target map into which the other maps are merged\r\n * @param maps One or more maps to merge into the target\r\n */\r\nexport function mergeMaps(target) {\r\n    var maps = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        maps[_i - 1] = arguments[_i];\r\n    }\r\n    for (var i = 0; i < maps.length; i++) {\r\n        maps[i].forEach(function (v, k) {\r\n            target.set(k, v);\r\n        });\r\n    }\r\n    return target;\r\n}\r\n//# sourceMappingURL=collections.js.map"",""export * from \""./adalclient\"";\r\nexport * from \""./collections\"";\r\nexport * from \""./libconfig\"";\r\nexport * from \""./netutil\"";\r\nexport * from \""./storage\"";\r\nexport * from \""./util\"";\r\n//# sourceMappingURL=common.js.map"",""import { mergeMaps, objectToMap } from \""./collections\"";\r\nexport function setup(config) {\r\n    RuntimeConfig.extend(config);\r\n}\r\n// lable mapping for known config values\r\nvar s = [\r\n    \""defaultCachingStore\"",\r\n    \""defaultCachingTimeoutSeconds\"",\r\n    \""globalCacheDisable\"",\r\n    \""enableCacheExpiration\"",\r\n    \""cacheExpirationIntervalMilliseconds\"",\r\n    \""spfxContext\"",\r\n];\r\nvar RuntimeConfigImpl = /** @class */ (function () {\r\n    function RuntimeConfigImpl(_v) {\r\n        if (_v === void 0) { _v = new Map(); }\r\n        this._v = _v;\r\n        // setup defaults\r\n        this._v.set(s[0], \""session\"");\r\n        this._v.set(s[1], 60);\r\n        this._v.set(s[2], false);\r\n        this._v.set(s[3], false);\r\n        this._v.set(s[4], 750);\r\n        this._v.set(s[5], null);\r\n    }\r\n    /**\r\n     *\r\n     * @param config The set of properties to add to the globa configuration instance\r\n     */\r\n    RuntimeConfigImpl.prototype.extend = function (config) {\r\n        this._v = mergeMaps(this._v, objectToMap(config));\r\n    };\r\n    RuntimeConfigImpl.prototype.get = function (key) {\r\n        return this._v.get(key);\r\n    };\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingStore\"", {\r\n        get: function () {\r\n            return this.get(s[0]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingTimeoutSeconds\"", {\r\n        get: function () {\r\n            return this.get(s[1]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""globalCacheDisable\"", {\r\n        get: function () {\r\n            return this.get(s[2]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""enableCacheExpiration\"", {\r\n        get: function () {\r\n            return this.get(s[3]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""cacheExpirationIntervalMilliseconds\"", {\r\n        get: function () {\r\n            return this.get(s[4]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""spfxContext\"", {\r\n        get: function () {\r\n            return this.get(s[5]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return RuntimeConfigImpl;\r\n}());\r\nexport { RuntimeConfigImpl };\r\nvar _runtimeConfig = new RuntimeConfigImpl();\r\nexport var RuntimeConfig = _runtimeConfig;\r\n//# sourceMappingURL=libconfig.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, objectDefinedNotNull } from \""./util\"";\r\nexport function mergeHeaders(target, source) {\r\n    if (source !== undefined && source !== null) {\r\n        var temp = new Request(\""\"", { headers: source });\r\n        temp.headers.forEach(function (value, name) {\r\n            target.append(name, value);\r\n        });\r\n    }\r\n}\r\nexport function mergeOptions(target, source) {\r\n    if (objectDefinedNotNull(source)) {\r\n        var headers = extend(target.headers || {}, source.headers);\r\n        target = extend(target, source);\r\n        target.headers = headers;\r\n    }\r\n}\r\n/**\r\n * Makes requests using the global/window fetch API\r\n */\r\nvar FetchClient = /** @class */ (function () {\r\n    function FetchClient() {\r\n    }\r\n    FetchClient.prototype.fetch = function (url, options) {\r\n        return global.fetch(url, options);\r\n    };\r\n    return FetchClient;\r\n}());\r\nexport { FetchClient };\r\n/**\r\n * Makes requests using the fetch API adding the supplied token to the Authorization header\r\n */\r\nvar BearerTokenFetchClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BearerTokenFetchClient, _super);\r\n    function BearerTokenFetchClient(_token) {\r\n        var _this = _super.call(this) || this;\r\n        _this._token = _token;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(BearerTokenFetchClient.prototype, \""token\"", {\r\n        get: function () {\r\n            return this._token || \""\"";\r\n        },\r\n        set: function (token) {\r\n            this._token = token;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    BearerTokenFetchClient.prototype.fetch = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var headers = new Headers();\r\n        mergeHeaders(headers, options.headers);\r\n        headers.set(\""Authorization\"", \""Bearer \"" + this._token);\r\n        options.headers = headers;\r\n        return _super.prototype.fetch.call(this, url, options);\r\n    };\r\n    return BearerTokenFetchClient;\r\n}(FetchClient));\r\nexport { BearerTokenFetchClient };\r\n//# sourceMappingURL=netutil.js.map"",""import { dateAdd, getCtxCallback, jsS, objectDefinedNotNull } from \""./util\"";\r\nimport { RuntimeConfig } from \""./libconfig\"";\r\n/**\r\n * A wrapper class to provide a consistent interface to browser based storage\r\n *\r\n */\r\nvar PnPClientStorageWrapper = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the PnPClientStorageWrapper class\r\n     *\r\n     * @constructor\r\n     */\r\n    function PnPClientStorageWrapper(store, defaultTimeoutMinutes) {\r\n        if (defaultTimeoutMinutes === void 0) { defaultTimeoutMinutes = -1; }\r\n        this.store = store;\r\n        this.defaultTimeoutMinutes = defaultTimeoutMinutes;\r\n        this.enabled = this.test();\r\n        // if the cache timeout is enabled call the handler\r\n        // this will clear any expired items and set the timeout function\r\n        if (RuntimeConfig.enableCacheExpiration) {\r\n            this.cacheExpirationHandler();\r\n        }\r\n    }\r\n    /**\r\n     * Get a value from storage, or null if that value does not exist\r\n     *\r\n     * @param key The key whose value we want to retrieve\r\n     */\r\n    PnPClientStorageWrapper.prototype.get = function (key) {\r\n        if (!this.enabled) {\r\n            return null;\r\n        }\r\n        var o = this.store.getItem(key);\r\n        if (!objectDefinedNotNull(o)) {\r\n            return null;\r\n        }\r\n        var persistable = JSON.parse(o);\r\n        if (new Date(persistable.expiration) <= new Date()) {\r\n            this.delete(key);\r\n            return null;\r\n        }\r\n        else {\r\n            return persistable.value;\r\n        }\r\n    };\r\n    /**\r\n     * Adds a value to the underlying storage\r\n     *\r\n     * @param key The key to use when storing the provided value\r\n     * @param o The value to store\r\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\r\n     */\r\n    PnPClientStorageWrapper.prototype.put = function (key, o, expire) {\r\n        if (this.enabled) {\r\n            this.store.setItem(key, this.createPersistable(o, expire));\r\n        }\r\n    };\r\n    /**\r\n     * Deletes a value from the underlying storage\r\n     *\r\n     * @param key The key of the pair we want to remove from storage\r\n     */\r\n    PnPClientStorageWrapper.prototype.delete = function (key) {\r\n        if (this.enabled) {\r\n            this.store.removeItem(key);\r\n        }\r\n    };\r\n    /**\r\n     * Gets an item from the underlying storage, or adds it if it does not exist using the supplied getter function\r\n     *\r\n     * @param key The key to use when storing the provided value\r\n     * @param getter A function which will upon execution provide the desired value\r\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\r\n     */\r\n    PnPClientStorageWrapper.prototype.getOrPut = function (key, getter, expire) {\r\n        var _this = this;\r\n        if (!this.enabled) {\r\n            return getter();\r\n        }\r\n        return new Promise(function (resolve) {\r\n            var o = _this.get(key);\r\n            if (o == null) {\r\n                getter().then(function (d) {\r\n                    _this.put(key, d, expire);\r\n                    resolve(d);\r\n                });\r\n            }\r\n            else {\r\n                resolve(o);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Deletes any expired items placed in the store by the pnp library, leaves other items untouched\r\n     */\r\n    PnPClientStorageWrapper.prototype.deleteExpired = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (!_this.enabled) {\r\n                resolve();\r\n            }\r\n            try {\r\n                for (var i = 0; i < _this.store.length; i++) {\r\n                    var key = _this.store.key(i);\r\n                    if (key !== null) {\r\n                        // test the stored item to see if we stored it\r\n                        if (/[\""|']?pnp[\""|']? ?: ?1/i.test(_this.store.getItem(key))) {\r\n                            // get those items as get will delete from cache if they are expired\r\n                            _this.get(key);\r\n                        }\r\n                    }\r\n                }\r\n                resolve();\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Used to determine if the wrapped storage is available currently\r\n     */\r\n    PnPClientStorageWrapper.prototype.test = function () {\r\n        var str = \""t\"";\r\n        try {\r\n            this.store.setItem(str, str);\r\n            this.store.removeItem(str);\r\n            return true;\r\n        }\r\n        catch (e) {\r\n            return false;\r\n        }\r\n    };\r\n    /**\r\n     * Creates the persistable to store\r\n     */\r\n    PnPClientStorageWrapper.prototype.createPersistable = function (o, expire) {\r\n        if (expire === undefined) {\r\n            // ensure we are by default inline with the global library setting\r\n            var defaultTimeout = RuntimeConfig.defaultCachingTimeoutSeconds;\r\n            if (this.defaultTimeoutMinutes > 0) {\r\n                defaultTimeout = this.defaultTimeoutMinutes * 60;\r\n            }\r\n            expire = dateAdd(new Date(), \""second\"", defaultTimeout);\r\n        }\r\n        return jsS({ pnp: 1, expiration: expire, value: o });\r\n    };\r\n    /**\r\n     * Deletes expired items added by this library in this.store and sets a timeout to call itself\r\n     */\r\n    PnPClientStorageWrapper.prototype.cacheExpirationHandler = function () {\r\n        var _this = this;\r\n        this.deleteExpired().then(function (_) {\r\n            // call ourself in the future\r\n            setTimeout(getCtxCallback(_this, _this.cacheExpirationHandler), RuntimeConfig.cacheExpirationIntervalMilliseconds);\r\n        }).catch(function (e) {\r\n            console.error(e);\r\n        });\r\n    };\r\n    return PnPClientStorageWrapper;\r\n}());\r\nexport { PnPClientStorageWrapper };\r\n/**\r\n * A thin implementation of in-memory storage for use in nodejs\r\n */\r\nvar MemoryStorage = /** @class */ (function () {\r\n    function MemoryStorage(_store) {\r\n        if (_store === void 0) { _store = new Map(); }\r\n        this._store = _store;\r\n    }\r\n    Object.defineProperty(MemoryStorage.prototype, \""length\"", {\r\n        get: function () {\r\n            return this._store.size;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    MemoryStorage.prototype.clear = function () {\r\n        this._store.clear();\r\n    };\r\n    MemoryStorage.prototype.getItem = function (key) {\r\n        return this._store.get(key);\r\n    };\r\n    MemoryStorage.prototype.key = function (index) {\r\n        return Array.from(this._store)[index][0];\r\n    };\r\n    MemoryStorage.prototype.removeItem = function (key) {\r\n        this._store.delete(key);\r\n    };\r\n    MemoryStorage.prototype.setItem = function (key, data) {\r\n        this._store.set(key, data);\r\n    };\r\n    return MemoryStorage;\r\n}());\r\n/**\r\n * A class that will establish wrappers for both local and session storage\r\n */\r\nvar PnPClientStorage = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the PnPClientStorage class\r\n     *\r\n     * @constructor\r\n     */\r\n    function PnPClientStorage(_local, _session) {\r\n        if (_local === void 0) { _local = null; }\r\n        if (_session === void 0) { _session = null; }\r\n        this._local = _local;\r\n        this._session = _session;\r\n    }\r\n    Object.defineProperty(PnPClientStorage.prototype, \""local\"", {\r\n        /**\r\n         * Provides access to the local storage of the browser\r\n         */\r\n        get: function () {\r\n            if (this._local === null) {\r\n                this._local = this.getStore(\""local\"");\r\n            }\r\n            return this._local;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(PnPClientStorage.prototype, \""session\"", {\r\n        /**\r\n         * Provides access to the session storage of the browser\r\n         */\r\n        get: function () {\r\n            if (this._session === null) {\r\n                this._session = this.getStore(\""session\"");\r\n            }\r\n            return this._session;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    PnPClientStorage.prototype.getStore = function (name) {\r\n        if (name === \""local\"") {\r\n            return new PnPClientStorageWrapper(typeof (localStorage) === \""undefined\"" ? new MemoryStorage() : localStorage);\r\n        }\r\n        return new PnPClientStorageWrapper(typeof (sessionStorage) === \""undefined\"" ? new MemoryStorage() : sessionStorage);\r\n    };\r\n    return PnPClientStorage;\r\n}());\r\nexport { PnPClientStorage };\r\n//# sourceMappingURL=storage.js.map"",""/**\r\n * Gets a callback function which will maintain context across async calls.\r\n * Allows for the calling pattern getCtxCallback(thisobj, method, methodarg1, methodarg2, ...)\r\n *\r\n * @param context The object that will be the 'this' value in the callback\r\n * @param method The method to which we will apply the context and parameters\r\n * @param params Optional, additional arguments to supply to the wrapped method when it is invoked\r\n */\r\nexport function getCtxCallback(context, method) {\r\n    var params = [];\r\n    for (var _i = 2; _i < arguments.length; _i++) {\r\n        params[_i - 2] = arguments[_i];\r\n    }\r\n    return function () {\r\n        method.apply(context, params);\r\n    };\r\n}\r\n/**\r\n * Adds a value to a date\r\n *\r\n * @param date The date to which we will add units, done in local time\r\n * @param interval The name of the interval to add, one of: ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second']\r\n * @param units The amount to add to date of the given interval\r\n *\r\n * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object\r\n */\r\nexport function dateAdd(date, interval, units) {\r\n    var ret = new Date(date); // don't change original date\r\n    switch (interval.toLowerCase()) {\r\n        case \""year\"":\r\n            ret.setFullYear(ret.getFullYear() + units);\r\n            break;\r\n        case \""quarter\"":\r\n            ret.setMonth(ret.getMonth() + 3 * units);\r\n            break;\r\n        case \""month\"":\r\n            ret.setMonth(ret.getMonth() + units);\r\n            break;\r\n        case \""week\"":\r\n            ret.setDate(ret.getDate() + 7 * units);\r\n            break;\r\n        case \""day\"":\r\n            ret.setDate(ret.getDate() + units);\r\n            break;\r\n        case \""hour\"":\r\n            ret.setTime(ret.getTime() + units * 3600000);\r\n            break;\r\n        case \""minute\"":\r\n            ret.setTime(ret.getTime() + units * 60000);\r\n            break;\r\n        case \""second\"":\r\n            ret.setTime(ret.getTime() + units * 1000);\r\n            break;\r\n        default:\r\n            ret = undefined;\r\n            break;\r\n    }\r\n    return ret;\r\n}\r\n/**\r\n * Combines an arbitrary set of paths ensuring and normalizes the slashes\r\n *\r\n * @param paths 0 to n path parts to combine\r\n */\r\nexport function combine() {\r\n    var paths = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        paths[_i] = arguments[_i];\r\n    }\r\n    return paths\r\n        .filter(function (path) { return !stringIsNullOrEmpty(path); })\r\n        .map(function (path) { return path.replace(/^[\\\\|\\/]/, \""\"").replace(/[\\\\|\\/]$/, \""\""); })\r\n        .join(\""/\"")\r\n        .replace(/\\\\/g, \""/\"");\r\n}\r\n/**\r\n * Gets a random string of chars length\r\n *\r\n * https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\r\n *\r\n * @param chars The length of the random string to generate\r\n */\r\nexport function getRandomString(chars) {\r\n    var text = new Array(chars);\r\n    var possible = \""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"";\r\n    for (var i = 0; i < chars; i++) {\r\n        text[i] = possible.charAt(Math.floor(Math.random() * possible.length));\r\n    }\r\n    return text.join(\""\"");\r\n}\r\n/**\r\n * Gets a random GUID value\r\n *\r\n * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\r\n */\r\n/* tslint:disable no-bitwise */\r\nexport function getGUID() {\r\n    var d = new Date().getTime();\r\n    var guid = \""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"".replace(/[xy]/g, function (c) {\r\n        var r = (d + Math.random() * 16) % 16 | 0;\r\n        d = Math.floor(d / 16);\r\n        return (c === \""x\"" ? r : (r & 0x3 | 0x8)).toString(16);\r\n    });\r\n    return guid;\r\n}\r\n/* tslint:enable */\r\n/**\r\n * Determines if a given value is a function\r\n *\r\n * @param cf The thing to test for functionness\r\n */\r\nexport function isFunc(cf) {\r\n    return typeof cf === \""function\"";\r\n}\r\n/**\r\n * Determines if an object is both defined and not null\r\n * @param obj Object to test\r\n */\r\nexport function objectDefinedNotNull(obj) {\r\n    return typeof obj !== \""undefined\"" && obj !== null;\r\n}\r\n/**\r\n * @returns whether the provided parameter is a JavaScript Array or not.\r\n*/\r\nexport function isArray(array) {\r\n    if (Array.isArray) {\r\n        return Array.isArray(array);\r\n    }\r\n    return array && typeof array.length === \""number\"" && array.constructor === Array;\r\n}\r\n/**\r\n * Provides functionality to extend the given object by doing a shallow copy\r\n *\r\n * @param target The object to which properties will be copied\r\n * @param source The source object from which properties will be copied\r\n * @param noOverwrite If true existing properties on the target are not overwritten from the source\r\n * @param filter If provided allows additional filtering on what properties are copied (propName: string) => boolean\r\n *\r\n */\r\nexport function extend(target, source, noOverwrite, filter) {\r\n    if (noOverwrite === void 0) { noOverwrite = false; }\r\n    if (filter === void 0) { filter = function () { return true; }; }\r\n    if (!objectDefinedNotNull(source)) {\r\n        return target;\r\n    }\r\n    // ensure we don't overwrite things we don't want overwritten\r\n    var check = noOverwrite ? function (o, i) { return !(i in o); } : function () { return true; };\r\n    // final filter we will use\r\n    var f = function (v) { return check(target, v) && filter(v); };\r\n    return Object.getOwnPropertyNames(source)\r\n        .filter(f)\r\n        .reduce(function (t, v) {\r\n        t[v] = source[v];\r\n        return t;\r\n    }, target);\r\n}\r\n/**\r\n * Determines if a given url is absolute\r\n *\r\n * @param url The url to check to see if it is absolute\r\n */\r\nexport function isUrlAbsolute(url) {\r\n    return /^https?:\\/\\/|^\\/\\//i.test(url);\r\n}\r\n/**\r\n * Determines if a string is null or empty or undefined\r\n *\r\n * @param s The string to test\r\n */\r\nexport function stringIsNullOrEmpty(s) {\r\n    return s === undefined || s === null || s.length < 1;\r\n}\r\n/**\r\n * Gets an attribute value from an html/xml string block. NOTE: if the input attribute value has\r\n * RegEx special characters they will be escaped in the returned string\r\n *\r\n * @param html HTML to search\r\n * @param attrName The name of the attribute to find\r\n */\r\nexport function getAttrValueFromString(html, attrName) {\r\n    // make the input safe for regex\r\n    html = html.replace(/[.*+?^${}()|[\\]\\\\]/g, \""\\\\$&\"");\r\n    var reg = new RegExp(attrName + \""\\\\s*?=\\\\s*?(\\\""|')([^\\\\1]*?)\\\\1\"", \""i\"");\r\n    var match = reg.exec(html);\r\n    return match !== null && match.length > 0 ? match[2] : null;\r\n}\r\n/**\r\n * Ensures guid values are represented consistently as \""ea123463-137d-4ae3-89b8-cf3fc578ca05\""\r\n *\r\n * @param guid The candidate guid\r\n */\r\nexport function sanitizeGuid(guid) {\r\n    if (stringIsNullOrEmpty(guid)) {\r\n        return guid;\r\n    }\r\n    var matches = /([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})/i.exec(guid);\r\n    return matches === null ? guid : matches[1];\r\n}\r\n/**\r\n * Shorthand for JSON.stringify\r\n *\r\n * @param o Any type of object\r\n */\r\nexport function jsS(o) {\r\n    return JSON.stringify(o);\r\n}\r\n/**\r\n * Shorthand for Object.hasOwnProperty\r\n *\r\n * @param o Object to check for\r\n * @param p Name of the property\r\n */\r\nexport function hOP(o, p) {\r\n    return Object.hasOwnProperty.call(o, p);\r\n}\r\n/**\r\n * Generates a ~unique hash code\r\n *\r\n * From: https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript\r\n */\r\n// tslint:disable:no-bitwise\r\nexport function getHashCode(s) {\r\n    var hash = 0;\r\n    if (s.length === 0) {\r\n        return hash;\r\n    }\r\n    for (var i = 0; i < s.length; i++) {\r\n        var chr = s.charCodeAt(i);\r\n        hash = ((hash << 5) - hash) + chr;\r\n        hash |= 0; // Convert to 32bit integer\r\n    }\r\n    return hash;\r\n}\r\n// tslint:enable:no-bitwise\r\n//# sourceMappingURL=util.js.map"",""export * from \""./src/logging\"";\r\n//# sourceMappingURL=index.js.map"",""/**\r\n * Implementation of LogListener which logs to the console\r\n *\r\n */\r\nvar ConsoleListener = /** @class */ (function () {\r\n    function ConsoleListener() {\r\n    }\r\n    /**\r\n     * Any associated data that a given logging listener may choose to log or ignore\r\n     *\r\n     * @param entry The information to be logged\r\n     */\r\n    ConsoleListener.prototype.log = function (entry) {\r\n        var msg = this.format(entry);\r\n        switch (entry.level) {\r\n            case 0 /* Verbose */:\r\n            case 1 /* Info */:\r\n                console.log(msg);\r\n                break;\r\n            case 2 /* Warning */:\r\n                console.warn(msg);\r\n                break;\r\n            case 3 /* Error */:\r\n                console.error(msg);\r\n                break;\r\n        }\r\n    };\r\n    /**\r\n     * Formats the message\r\n     *\r\n     * @param entry The information to format into a string\r\n     */\r\n    ConsoleListener.prototype.format = function (entry) {\r\n        var msg = [];\r\n        msg.push(\""Message: \"" + entry.message);\r\n        if (entry.data !== undefined) {\r\n            msg.push(\"" Data: \"" + JSON.stringify(entry.data));\r\n        }\r\n        return msg.join(\""\"");\r\n    };\r\n    return ConsoleListener;\r\n}());\r\nexport { ConsoleListener };\r\n/**\r\n * Implementation of LogListener which logs to the supplied function\r\n *\r\n */\r\nvar FunctionListener = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the FunctionListener class\r\n     *\r\n     * @constructor\r\n     * @param  method The method to which any logging data will be passed\r\n     */\r\n    function FunctionListener(method) {\r\n        this.method = method;\r\n    }\r\n    /**\r\n     * Any associated data that a given logging listener may choose to log or ignore\r\n     *\r\n     * @param entry The information to be logged\r\n     */\r\n    FunctionListener.prototype.log = function (entry) {\r\n        this.method(entry);\r\n    };\r\n    return FunctionListener;\r\n}());\r\nexport { FunctionListener };\r\n//# sourceMappingURL=listeners.js.map"",""/**\r\n * Class used to subscribe ILogListener and log messages throughout an application\r\n *\r\n */\r\nvar Logger = /** @class */ (function () {\r\n    function Logger() {\r\n    }\r\n    Object.defineProperty(Logger, \""activeLogLevel\"", {\r\n        /**\r\n         * Gets or sets the active log level to apply for log filtering\r\n         */\r\n        get: function () {\r\n            return Logger.instance.activeLogLevel;\r\n        },\r\n        set: function (value) {\r\n            Logger.instance.activeLogLevel = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Logger, \""instance\"", {\r\n        get: function () {\r\n            if (Logger._instance === undefined || Logger._instance === null) {\r\n                Logger._instance = new LoggerImpl();\r\n            }\r\n            return Logger._instance;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds ILogListener instances to the set of subscribed listeners\r\n     *\r\n     * @param listeners One or more listeners to subscribe to this log\r\n     */\r\n    Logger.subscribe = function () {\r\n        var listeners = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            listeners[_i] = arguments[_i];\r\n        }\r\n        listeners.map(function (listener) { return Logger.instance.subscribe(listener); });\r\n    };\r\n    /**\r\n     * Clears the subscribers collection, returning the collection before modifiction\r\n     */\r\n    Logger.clearSubscribers = function () {\r\n        return Logger.instance.clearSubscribers();\r\n    };\r\n    Object.defineProperty(Logger, \""count\"", {\r\n        /**\r\n         * Gets the current subscriber count\r\n         */\r\n        get: function () {\r\n            return Logger.instance.count;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Writes the supplied string to the subscribed listeners\r\n     *\r\n     * @param message The message to write\r\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info)\r\n     */\r\n    Logger.write = function (message, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        Logger.instance.log({ level: level, message: message });\r\n    };\r\n    /**\r\n     * Writes the supplied string to the subscribed listeners\r\n     *\r\n     * @param json The json object to stringify and write\r\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info)\r\n     */\r\n    Logger.writeJSON = function (json, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        this.write(JSON.stringify(json), level);\r\n    };\r\n    /**\r\n     * Logs the supplied entry to the subscribed listeners\r\n     *\r\n     * @param entry The message to log\r\n     */\r\n    Logger.log = function (entry) {\r\n        Logger.instance.log(entry);\r\n    };\r\n    /**\r\n     * Logs an error object to the subscribed listeners\r\n     *\r\n     * @param err The error object\r\n     */\r\n    Logger.error = function (err) {\r\n        Logger.instance.log({ data: err, level: 3 /* Error */, message: err.message });\r\n    };\r\n    return Logger;\r\n}());\r\nexport { Logger };\r\nvar LoggerImpl = /** @class */ (function () {\r\n    function LoggerImpl(activeLogLevel, subscribers) {\r\n        if (activeLogLevel === void 0) { activeLogLevel = 2 /* Warning */; }\r\n        if (subscribers === void 0) { subscribers = []; }\r\n        this.activeLogLevel = activeLogLevel;\r\n        this.subscribers = subscribers;\r\n    }\r\n    LoggerImpl.prototype.subscribe = function (listener) {\r\n        this.subscribers.push(listener);\r\n    };\r\n    LoggerImpl.prototype.clearSubscribers = function () {\r\n        var s = this.subscribers.slice(0);\r\n        this.subscribers.length = 0;\r\n        return s;\r\n    };\r\n    Object.defineProperty(LoggerImpl.prototype, \""count\"", {\r\n        get: function () {\r\n            return this.subscribers.length;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LoggerImpl.prototype.write = function (message, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        this.log({ level: level, message: message });\r\n    };\r\n    LoggerImpl.prototype.log = function (entry) {\r\n        if (entry !== undefined && this.activeLogLevel <= entry.level) {\r\n            this.subscribers.map(function (subscriber) { return subscriber.log(entry); });\r\n        }\r\n    };\r\n    return LoggerImpl;\r\n}());\r\n//# sourceMappingURL=logger.js.map"",""export { Logger } from \""./logger\"";\r\nexport { LogLevel } from \""./loglevel\"";\r\nexport { ConsoleListener, FunctionListener } from \""./listeners\"";\r\n//# sourceMappingURL=logging.js.map"",""/**\r\n * A set of logging levels\r\n */\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n    LogLevel[LogLevel[\""Verbose\""] = 0] = \""Verbose\"";\r\n    LogLevel[LogLevel[\""Info\""] = 1] = \""Info\"";\r\n    LogLevel[LogLevel[\""Warning\""] = 2] = \""Warning\"";\r\n    LogLevel[LogLevel[\""Error\""] = 3] = \""Error\"";\r\n    LogLevel[LogLevel[\""Off\""] = 99] = \""Off\"";\r\n})(LogLevel || (LogLevel = {}));\r\n//# sourceMappingURL=loglevel.js.map"",""export * from \""./src/odata\"";\r\n//# sourceMappingURL=index.js.map"",""import { RuntimeConfig, dateAdd, PnPClientStorage } from \""@pnp/common\"";\r\nvar CachingOptions = /** @class */ (function () {\r\n    function CachingOptions(key) {\r\n        this.key = key;\r\n        this.expiration = dateAdd(new Date(), \""second\"", RuntimeConfig.defaultCachingTimeoutSeconds);\r\n        this.storeName = RuntimeConfig.defaultCachingStore;\r\n    }\r\n    Object.defineProperty(CachingOptions.prototype, \""store\"", {\r\n        get: function () {\r\n            if (this.storeName === \""local\"") {\r\n                return CachingOptions.storage.local;\r\n            }\r\n            else {\r\n                return CachingOptions.storage.session;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    CachingOptions.storage = new PnPClientStorage();\r\n    return CachingOptions;\r\n}());\r\nexport { CachingOptions };\r\nvar CachingParserWrapper = /** @class */ (function () {\r\n    function CachingParserWrapper(parser, cacheOptions) {\r\n        this.parser = parser;\r\n        this.cacheOptions = cacheOptions;\r\n    }\r\n    CachingParserWrapper.prototype.parse = function (response) {\r\n        var _this = this;\r\n        return this.parser.parse(response).then(function (r) { return _this.cacheData(r); });\r\n    };\r\n    CachingParserWrapper.prototype.cacheData = function (data) {\r\n        if (this.cacheOptions.store !== null) {\r\n            this.cacheOptions.store.put(this.cacheOptions.key, data, this.cacheOptions.expiration);\r\n        }\r\n        return data;\r\n    };\r\n    return CachingParserWrapper;\r\n}());\r\nexport { CachingParserWrapper };\r\n//# sourceMappingURL=caching.js.map"",""export * from \""./caching\"";\r\nexport * from \""./parsers\"";\r\nexport * from \""./pipeline\"";\r\nexport * from \""./queryable\"";\r\nexport * from \""./odatabatch\"";\r\n//# sourceMappingURL=odata.js.map"",""import { getGUID } from \""@pnp/common\"";\r\nvar ODataBatch = /** @class */ (function () {\r\n    function ODataBatch(_batchId) {\r\n        if (_batchId === void 0) { _batchId = getGUID(); }\r\n        this._batchId = _batchId;\r\n        this._reqs = [];\r\n        this._deps = [];\r\n        this._rDeps = [];\r\n    }\r\n    Object.defineProperty(ODataBatch.prototype, \""batchId\"", {\r\n        get: function () {\r\n            return this._batchId;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ODataBatch.prototype, \""requests\"", {\r\n        /**\r\n         * The requests contained in this batch\r\n         */\r\n        get: function () {\r\n            return this._reqs;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     *\r\n     * @param url Request url\r\n     * @param method Request method (GET, POST, etc)\r\n     * @param options Any request options\r\n     * @param parser The parser used to handle the eventual return from the query\r\n     * @param id An identifier used to track a request within a batch\r\n     */\r\n    ODataBatch.prototype.add = function (url, method, options, parser, id) {\r\n        var info = {\r\n            id: id,\r\n            method: method.toUpperCase(),\r\n            options: options,\r\n            parser: parser,\r\n            reject: null,\r\n            resolve: null,\r\n            url: url,\r\n        };\r\n        var p = new Promise(function (resolve, reject) {\r\n            info.resolve = resolve;\r\n            info.reject = reject;\r\n        });\r\n        this._reqs.push(info);\r\n        return p;\r\n    };\r\n    /**\r\n     * Adds a dependency insuring that some set of actions will occur before a batch is processed.\r\n     * MUST be cleared using the returned resolve delegate to allow batches to run\r\n     */\r\n    ODataBatch.prototype.addDependency = function () {\r\n        var resolver = function () { return void (0); };\r\n        this._deps.push(new Promise(function (resolve) {\r\n            resolver = resolve;\r\n        }));\r\n        return resolver;\r\n    };\r\n    /**\r\n     * The batch's execute method will not resolve util any promises added here resolve\r\n     *\r\n     * @param p The dependent promise\r\n     */\r\n    ODataBatch.prototype.addResolveBatchDependency = function (p) {\r\n        this._rDeps.push(p);\r\n    };\r\n    /**\r\n     * Execute the current batch and resolve the associated promises\r\n     *\r\n     * @returns A promise which will be resolved once all of the batch's child promises have resolved\r\n     */\r\n    ODataBatch.prototype.execute = function () {\r\n        var _this = this;\r\n        // we need to check the dependencies twice due to how different engines handle things.\r\n        // We can get a second set of promises added during the first set resolving\r\n        return Promise.all(this._deps)\r\n            .then(function () { return Promise.all(_this._deps); })\r\n            .then(function () { return _this.executeImpl(); })\r\n            .then(function () { return Promise.all(_this._rDeps); })\r\n            .then(function () { return void (0); });\r\n    };\r\n    return ODataBatch;\r\n}());\r\nexport { ODataBatch };\r\n//# sourceMappingURL=odatabatch.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { isFunc, hOP } from \""@pnp/common\"";\r\nvar HttpRequestError = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HttpRequestError, _super);\r\n    function HttpRequestError(message, response, status, statusText) {\r\n        if (status === void 0) { status = response.status; }\r\n        if (statusText === void 0) { statusText = response.statusText; }\r\n        var _this = _super.call(this, message) || this;\r\n        _this.response = response;\r\n        _this.status = status;\r\n        _this.statusText = statusText;\r\n        _this.isHttpRequestError = true;\r\n        return _this;\r\n    }\r\n    return HttpRequestError;\r\n}(Error));\r\nexport { HttpRequestError };\r\nvar ODataParserBase = /** @class */ (function () {\r\n    function ODataParserBase() {\r\n    }\r\n    ODataParserBase.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (_this.handleError(r, reject)) {\r\n                _this.parseImpl(r, resolve, reject);\r\n            }\r\n        });\r\n    };\r\n    ODataParserBase.prototype.parseImpl = function (r, resolve, reject) {\r\n        var _this = this;\r\n        if ((r.headers.has(\""Content-Length\"") && parseFloat(r.headers.get(\""Content-Length\"")) === 0) || r.status === 204) {\r\n            resolve({});\r\n        }\r\n        else {\r\n            // patch to handle cases of 200 response with no or whitespace only bodies (#487 & #545)\r\n            r.text()\r\n                .then(function (txt) { return txt.replace(/\\s/ig, \""\"").length > 0 ? JSON.parse(txt) : {}; })\r\n                .then(function (json) { return resolve(_this.parseODataJSON(json)); })\r\n                .catch(function (e) { return reject(e); });\r\n        }\r\n    };\r\n    /**\r\n     * Handles a response with ok === false by parsing the body and creating a ProcessHttpClientResponseException\r\n     * which is passed to the reject delegate. This method returns true if there is no error, otherwise false\r\n     *\r\n     * @param r Current response object\r\n     * @param reject reject delegate for the surrounding promise\r\n     */\r\n    ODataParserBase.prototype.handleError = function (r, reject) {\r\n        if (!r.ok) {\r\n            reject(new HttpRequestError(\""Error making HttpClient request in queryable: [\"" + r.status + \""] \"" + r.statusText, r.clone()));\r\n        }\r\n        return r.ok;\r\n    };\r\n    /**\r\n     * Normalizes the json response by removing the various nested levels\r\n     *\r\n     * @param json json object to parse\r\n     */\r\n    ODataParserBase.prototype.parseODataJSON = function (json) {\r\n        var result = json;\r\n        if (hOP(json, \""d\"")) {\r\n            if (hOP(json.d, \""results\"")) {\r\n                result = json.d.results;\r\n            }\r\n            else {\r\n                result = json.d;\r\n            }\r\n        }\r\n        else if (hOP(json, \""value\"")) {\r\n            result = json.value;\r\n        }\r\n        return result;\r\n    };\r\n    return ODataParserBase;\r\n}());\r\nexport { ODataParserBase };\r\nvar ODataDefaultParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ODataDefaultParser, _super);\r\n    function ODataDefaultParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return ODataDefaultParser;\r\n}(ODataParserBase));\r\nexport { ODataDefaultParser };\r\nvar TextParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TextParser, _super);\r\n    function TextParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TextParser.prototype.parseImpl = function (r, resolve) {\r\n        r.text().then(resolve);\r\n    };\r\n    return TextParser;\r\n}(ODataParserBase));\r\nexport { TextParser };\r\nvar BlobParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BlobParser, _super);\r\n    function BlobParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BlobParser.prototype.parseImpl = function (r, resolve) {\r\n        r.blob().then(resolve);\r\n    };\r\n    return BlobParser;\r\n}(ODataParserBase));\r\nexport { BlobParser };\r\nvar JSONParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JSONParser, _super);\r\n    function JSONParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    JSONParser.prototype.parseImpl = function (r, resolve) {\r\n        r.json().then(resolve);\r\n    };\r\n    return JSONParser;\r\n}(ODataParserBase));\r\nexport { JSONParser };\r\nvar BufferParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BufferParser, _super);\r\n    function BufferParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BufferParser.prototype.parseImpl = function (r, resolve) {\r\n        if (isFunc(r.arrayBuffer)) {\r\n            r.arrayBuffer().then(resolve);\r\n        }\r\n        else {\r\n            r.buffer().then(resolve);\r\n        }\r\n    };\r\n    return BufferParser;\r\n}(ODataParserBase));\r\nexport { BufferParser };\r\nvar LambdaParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(LambdaParser, _super);\r\n    function LambdaParser(parser) {\r\n        var _this = _super.call(this) || this;\r\n        _this.parser = parser;\r\n        return _this;\r\n    }\r\n    LambdaParser.prototype.parseImpl = function (r, resolve) {\r\n        this.parser(r).then(resolve);\r\n    };\r\n    return LambdaParser;\r\n}(ODataParserBase));\r\nexport { LambdaParser };\r\n//# sourceMappingURL=parsers.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, isFunc, hOP } from \""@pnp/common\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { CachingOptions, CachingParserWrapper } from \""./caching\"";\r\n/**\r\n * Resolves the context's result value\r\n *\r\n * @param context The current context\r\n */\r\nfunction returnResult(context) {\r\n    Logger.log({\r\n        data: Logger.activeLogLevel === 0 /* Verbose */ ? context.result : {},\r\n        level: 1 /* Info */,\r\n        message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Returning result from pipeline. Set logging to verbose to see data.\"",\r\n    });\r\n    return Promise.resolve(context.result);\r\n}\r\n/**\r\n * Sets the result on the context\r\n */\r\nexport function setResult(context, value) {\r\n    return new Promise(function (resolve) {\r\n        context.result = value;\r\n        context.hasResult = true;\r\n        resolve(context);\r\n    });\r\n}\r\n/**\r\n * Invokes the next method in the provided context's pipeline\r\n *\r\n * @param c The current request context\r\n */\r\nfunction next(c) {\r\n    if (c.pipeline.length > 0) {\r\n        return c.pipeline.shift()(c);\r\n    }\r\n    else {\r\n        return Promise.resolve(c);\r\n    }\r\n}\r\n/**\r\n * Executes the current request context's pipeline\r\n *\r\n * @param context Current context\r\n */\r\nexport function pipe(context) {\r\n    if (context.pipeline.length < 1) {\r\n        Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Request pipeline contains no methods!\"", 2 /* Warning */);\r\n    }\r\n    var promise = next(context).then(function (ctx) { return returnResult(ctx); }).catch(function (e) {\r\n        Logger.error(e);\r\n        throw e;\r\n    });\r\n    if (context.isBatched) {\r\n        // this will block the batch's execute method from returning until the child requets have been resolved\r\n        context.batch.addResolveBatchDependency(promise);\r\n    }\r\n    return promise;\r\n}\r\n/**\r\n * decorator factory applied to methods in the pipeline to control behavior\r\n */\r\nexport function requestPipelineMethod(alwaysRun) {\r\n    if (alwaysRun === void 0) { alwaysRun = false; }\r\n    return function (target, propertyKey, descriptor) {\r\n        var method = descriptor.value;\r\n        descriptor.value = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            // if we have a result already in the pipeline, pass it along and don't call the tagged method\r\n            if (!alwaysRun && args.length > 0 && hOP(args[0], \""hasResult\"") && args[0].hasResult) {\r\n                Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Skipping request pipeline method \"" + propertyKey + \"", existing result in pipeline.\"", 0 /* Verbose */);\r\n                return Promise.resolve(args[0]);\r\n            }\r\n            // apply the tagged method\r\n            Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Calling request pipeline method \"" + propertyKey + \"".\"", 0 /* Verbose */);\r\n            // then chain the next method in the context's pipeline - allows for dynamic pipeline\r\n            return method.apply(target, args).then(function (ctx) { return next(ctx); });\r\n        };\r\n    };\r\n}\r\n/**\r\n * Contains the methods used within the request pipeline\r\n */\r\nvar PipelineMethods = /** @class */ (function () {\r\n    function PipelineMethods() {\r\n    }\r\n    /**\r\n     * Logs the start of the request\r\n     */\r\n    PipelineMethods.logStart = function (context) {\r\n        return new Promise(function (resolve) {\r\n            Logger.log({\r\n                data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                level: 1 /* Info */,\r\n                message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Beginning \"" + context.verb + \"" request (\"" + context.requestAbsoluteUrl + \"")\"",\r\n            });\r\n            resolve(context);\r\n        });\r\n    };\r\n    /**\r\n     * Handles caching of the request\r\n     */\r\n    PipelineMethods.caching = function (context) {\r\n        return new Promise(function (resolve) {\r\n            // handle caching, if applicable\r\n            if (context.isCached) {\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Caching is enabled for request, checking cache...\"", 1 /* Info */);\r\n                var cacheOptions = new CachingOptions(context.requestAbsoluteUrl.toLowerCase());\r\n                if (context.cachingOptions !== undefined) {\r\n                    cacheOptions = extend(cacheOptions, context.cachingOptions);\r\n                }\r\n                // we may not have a valid store\r\n                if (cacheOptions.store !== null) {\r\n                    // check if we have the data in cache and if so resolve the promise and return\r\n                    var data = cacheOptions.store.get(cacheOptions.key);\r\n                    if (data !== null) {\r\n                        // ensure we clear any held batch dependency we are resolving from the cache\r\n                        Logger.log({\r\n                            data: Logger.activeLogLevel === 1 /* Info */ ? {} : data,\r\n                            level: 1 /* Info */,\r\n                            message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value returned from cache.\"",\r\n                        });\r\n                        if (isFunc(context.batchDependency)) {\r\n                            context.batchDependency();\r\n                        }\r\n                        // handle the case where a parser needs to take special actions with a cached result\r\n                        if (hOP(context.parser, \""hydrate\"")) {\r\n                            data = context.parser.hydrate(data);\r\n                        }\r\n                        return setResult(context, data).then(function (ctx) { return resolve(ctx); });\r\n                    }\r\n                }\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value not found in cache.\"", 1 /* Info */);\r\n                // if we don't then wrap the supplied parser in the caching parser wrapper\r\n                // and send things on their way\r\n                context.parser = new CachingParserWrapper(context.parser, cacheOptions);\r\n            }\r\n            return resolve(context);\r\n        });\r\n    };\r\n    /**\r\n     * Sends the request\r\n     */\r\n    PipelineMethods.send = function (context) {\r\n        return new Promise(function (resolve, reject) {\r\n            // send or batch the request\r\n            if (context.isBatched) {\r\n                // we are in a batch, so add to batch, remove dependency, and resolve with the batch's promise\r\n                var p = context.batch.add(context.requestAbsoluteUrl, context.verb, context.options, context.parser, context.requestId);\r\n                // we release the dependency here to ensure the batch does not execute until the request is added to the batch\r\n                if (isFunc(context.batchDependency)) {\r\n                    context.batchDependency();\r\n                }\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Batching request in batch \"" + context.batch.batchId + \"".\"", 1 /* Info */);\r\n                // we set the result as the promise which will be resolved by the batch's execution\r\n                resolve(setResult(context, p));\r\n            }\r\n            else {\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Sending request.\"", 1 /* Info */);\r\n                // we are not part of a batch, so proceed as normal\r\n                var client = context.clientFactory();\r\n                var opts = extend(context.options || {}, { method: context.verb });\r\n                client.fetch(context.requestAbsoluteUrl, opts)\r\n                    .then(function (response) { return context.parser.parse(response); })\r\n                    .then(function (result) { return setResult(context, result); })\r\n                    .then(function (ctx) { return resolve(ctx); })\r\n                    .catch(function (e) { return reject(e); });\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Logs the end of the request\r\n     */\r\n    PipelineMethods.logEnd = function (context) {\r\n        return new Promise(function (resolve) {\r\n            if (context.isBatched) {\r\n                Logger.log({\r\n                    data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                    level: 1 /* Info */,\r\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") \"" + context.verb + \"" request will complete in batch \"" + context.batch.batchId + \"".\"",\r\n                });\r\n            }\r\n            else {\r\n                Logger.log({\r\n                    data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                    level: 1 /* Info */,\r\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Completing \"" + context.verb + \"" request.\"",\r\n                });\r\n            }\r\n            resolve(context);\r\n        });\r\n    };\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod(true)\r\n    ], PipelineMethods, \""logStart\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod()\r\n    ], PipelineMethods, \""caching\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod()\r\n    ], PipelineMethods, \""send\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod(true)\r\n    ], PipelineMethods, \""logEnd\"", null);\r\n    return PipelineMethods;\r\n}());\r\nexport { PipelineMethods };\r\nexport function getDefaultPipeline() {\r\n    return [\r\n        PipelineMethods.logStart,\r\n        PipelineMethods.caching,\r\n        PipelineMethods.send,\r\n        PipelineMethods.logEnd,\r\n    ].slice(0);\r\n}\r\n//# sourceMappingURL=pipeline.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { combine, RuntimeConfig, mergeOptions, objectDefinedNotNull, } from \""@pnp/common\"";\r\nimport { ODataDefaultParser, JSONParser } from \""./parsers\"";\r\nimport { getDefaultPipeline, pipe, } from \""./pipeline\"";\r\nvar Queryable = /** @class */ (function () {\r\n    function Queryable() {\r\n        this._query = new Map();\r\n        this._options = {};\r\n        this._url = \""\"";\r\n        this._parentUrl = \""\"";\r\n        this._useCaching = false;\r\n        this._cachingOptions = null;\r\n        this._cloneParentWasCaching = false;\r\n        this._cloneParentCacheOptions = null;\r\n    }\r\n    /**\r\n    * Gets the currentl url\r\n    *\r\n    */\r\n    Queryable.prototype.toUrl = function () {\r\n        return this._url;\r\n    };\r\n    /**\r\n     * Directly concatonates the supplied string to the current url, not normalizing \""/\"" chars\r\n     *\r\n     * @param pathPart The string to concatonate to the url\r\n     */\r\n    Queryable.prototype.concat = function (pathPart) {\r\n        this._url += pathPart;\r\n        return this;\r\n    };\r\n    Object.defineProperty(Queryable.prototype, \""query\"", {\r\n        /**\r\n         * Provides access to the query builder for this url\r\n         *\r\n         */\r\n        get: function () {\r\n            return this._query;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Sets custom options for current object and all derived objects accessible via chaining\r\n     *\r\n     * @param options custom options\r\n     */\r\n    Queryable.prototype.configure = function (options) {\r\n        mergeOptions(this._options, options);\r\n        return this;\r\n    };\r\n    /**\r\n     * Configures this instance from the configure options of the supplied instance\r\n     *\r\n     * @param o Instance from which options should be taken\r\n     */\r\n    Queryable.prototype.configureFrom = function (o) {\r\n        mergeOptions(this._options, o._options);\r\n        return this;\r\n    };\r\n    /**\r\n     * Enables caching for this request\r\n     *\r\n     * @param options Defines the options used when caching this request\r\n     */\r\n    Queryable.prototype.usingCaching = function (options) {\r\n        if (!RuntimeConfig.globalCacheDisable) {\r\n            this._useCaching = true;\r\n            if (options !== undefined) {\r\n                this._cachingOptions = options;\r\n            }\r\n        }\r\n        return this;\r\n    };\r\n    Queryable.prototype.getCore = function (parser, options) {\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        // Fix for #304 - when we clone objects we in some cases then execute a get request\r\n        // in these cases the caching settings were getting dropped from the request\r\n        // this tracks if the object from which this was clones was caching and applies that to an immediate get request\r\n        // does not affect objects cloned from this as we are using different fields to track the settings so it won't\r\n        // be triggered\r\n        if (this._cloneParentWasCaching) {\r\n            this.usingCaching(this._cloneParentCacheOptions);\r\n        }\r\n        return this.toRequestContext(\""GET\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    Queryable.prototype.postCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.toRequestContext(\""POST\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    Queryable.prototype.patchCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.toRequestContext(\""PATCH\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    Queryable.prototype.deleteCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.toRequestContext(\""DELETE\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    Queryable.prototype.putCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.toRequestContext(\""PUT\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    /**\r\n     * Appends the given string and normalizes \""/\"" chars\r\n     *\r\n     * @param pathPart The string to append\r\n     */\r\n    Queryable.prototype.append = function (pathPart) {\r\n        this._url = combine(this._url, pathPart);\r\n    };\r\n    Object.defineProperty(Queryable.prototype, \""parentUrl\"", {\r\n        /**\r\n         * Gets the parent url used when creating this instance\r\n         *\r\n         */\r\n        get: function () {\r\n            return this._parentUrl;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Extends this queryable from the provided parent\r\n     *\r\n     * @param parent Parent queryable from which we will derive a base url\r\n     * @param path Additional path\r\n     */\r\n    Queryable.prototype.extend = function (parent, path) {\r\n        this._parentUrl = parent._url;\r\n        this._url = combine(this._parentUrl, path || \""\"");\r\n        this.configureFrom(parent);\r\n    };\r\n    /**\r\n     * Configures a cloned object from this instance\r\n     *\r\n     * @param clone\r\n     */\r\n    Queryable.prototype._clone = function (clone, _0) {\r\n        clone.configureFrom(this);\r\n        if (this._useCaching) {\r\n            clone._cloneParentWasCaching = true;\r\n            clone._cloneParentCacheOptions = this._cachingOptions;\r\n        }\r\n        return clone;\r\n    };\r\n    return Queryable;\r\n}());\r\nexport { Queryable };\r\nvar ODataQueryable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ODataQueryable, _super);\r\n    function ODataQueryable() {\r\n        var _this = _super.call(this) || this;\r\n        _this._batch = null;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Adds this query to the supplied batch\r\n     *\r\n     * @example\r\n     * ```\r\n     *\r\n     * let b = pnp.sp.createBatch();\r\n     * pnp.sp.web.inBatch(b).get().then(...);\r\n     * b.execute().then(...)\r\n     * ```\r\n     */\r\n    ODataQueryable.prototype.inBatch = function (batch) {\r\n        if (this.batch !== null) {\r\n            throw Error(\""This query is already part of a batch.\"");\r\n        }\r\n        this._batch = batch;\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets the currentl url\r\n     *\r\n     */\r\n    ODataQueryable.prototype.toUrl = function () {\r\n        return this._url;\r\n    };\r\n    /**\r\n     * Executes the currently built request\r\n     *\r\n     * @param parser Allows you to specify a parser to handle the result\r\n     * @param getOptions The options used for this request\r\n     */\r\n    ODataQueryable.prototype.get = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return this.getCore(parser, options);\r\n    };\r\n    ODataQueryable.prototype.getCore = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return _super.prototype.getCore.call(this, parser, options);\r\n    };\r\n    ODataQueryable.prototype.postCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.postCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.patchCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.patchCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.deleteCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.deleteCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.putCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.putCore.call(this, options, parser);\r\n    };\r\n    /**\r\n     * Blocks a batch call from occuring, MUST be cleared by calling the returned function\r\n    */\r\n    ODataQueryable.prototype.addBatchDependency = function () {\r\n        if (this._batch !== null) {\r\n            return this._batch.addDependency();\r\n        }\r\n        return function () { return null; };\r\n    };\r\n    Object.defineProperty(ODataQueryable.prototype, \""hasBatch\"", {\r\n        /**\r\n         * Indicates if the current query has a batch associated\r\n         *\r\n         */\r\n        get: function () {\r\n            return objectDefinedNotNull(this._batch);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ODataQueryable.prototype, \""batch\"", {\r\n        /**\r\n         * The batch currently associated with this query or null\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.hasBatch ? this._batch : null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Configures a cloned object from this instance\r\n     *\r\n     * @param clone\r\n     */\r\n    ODataQueryable.prototype._clone = function (clone, cloneSettings) {\r\n        clone = _super.prototype._clone.call(this, clone, cloneSettings);\r\n        if (cloneSettings.includeBatch) {\r\n            clone = clone.inBatch(this._batch);\r\n        }\r\n        return clone;\r\n    };\r\n    return ODataQueryable;\r\n}(Queryable));\r\nexport { ODataQueryable };\r\n//# sourceMappingURL=queryable.js.map"",""export * from \""./src/clientsvc\"";\r\n//# sourceMappingURL=index.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { CachingParserWrapper, ODataBatch } from \""@pnp/odata\"";\r\nimport { ClientSvcQueryable } from \""./clintsvcqueryable\"";\r\nimport { ObjectPath, opSetId, opSetParentId, opSetPathId, opSetPathParamId } from \""./objectpath\"";\r\nimport { objectPath } from \""./opactionbuilders\"";\r\nimport { staticMethod } from \""./opbuilders\"";\r\nimport { ProcessQueryParser } from \""./parsers\"";\r\nimport { writeObjectPathBody } from \""./utils\"";\r\n/**\r\n * Implements ODataBatch for use with the ObjectPath framework\r\n */\r\nvar ObjectPathBatch = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ObjectPathBatch, _super);\r\n    function ObjectPathBatch(parentUrl, _batchId) {\r\n        var _this = _super.call(this, _batchId) || this;\r\n        _this.parentUrl = parentUrl;\r\n        return _this;\r\n    }\r\n    ObjectPathBatch.prototype.executeImpl = function () {\r\n        // if we don't have any requests, don't bother sending anything\r\n        // this could be due to caching further upstream, or just an empty batch\r\n        if (this.requests.length < 1) {\r\n            Logger.write(\""Resolving empty batch.\"", 1 /* Info */);\r\n            return Promise.resolve();\r\n        }\r\n        var executor = new BatchExecutor(this.parentUrl, this.batchId);\r\n        executor.appendRequests(this.requests);\r\n        return executor.execute();\r\n    };\r\n    return ObjectPathBatch;\r\n}(ODataBatch));\r\nexport { ObjectPathBatch };\r\nvar BatchExecutor = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BatchExecutor, _super);\r\n    function BatchExecutor(parentUrl, batchId) {\r\n        var _this = _super.call(this, parentUrl) || this;\r\n        _this.batchId = batchId;\r\n        _this._requests = [];\r\n        _this._builderIndex = 1;\r\n        // we add our session object path and hard code in the IDs so we can reference it\r\n        var method = staticMethod(\""GetTaxonomySession\"", \""{981cbc68-9edc-4f8d-872f-71146fcbb84f}\"");\r\n        method.path = opSetId(\""0\"", method.path);\r\n        method.actions.push(opSetId(\""1\"", opSetPathId(\""0\"", objectPath())));\r\n        _this._objectPaths.add(method);\r\n        return _this;\r\n    }\r\n    BatchExecutor.prototype.appendRequests = function (requests) {\r\n        var _this = this;\r\n        requests.forEach(function (request) {\r\n            // grab the special property we added to options when we created the batch info\r\n            var pathQueue = request.options.clientsvc_ObjectPaths;\r\n            var paths = pathQueue.toArray();\r\n            // getChildRelationships\r\n            if (paths.length < 0) {\r\n                return;\r\n            }\r\n            var indexMappingFunction = function (n) { return n; };\r\n            if (/GetTaxonomySession/i.test(paths[0].path)) {\r\n                // drop the first thing as it is a get session object path, which we add once for the entire batch\r\n                paths = paths.slice(1);\r\n                // replace the next item's parent id with 0, which will be the id of the session call at the root of this request\r\n                paths[0].path = opSetParentId(\""0\"", paths[0].path);\r\n                indexMappingFunction = function (n) { return n - 1; };\r\n            }\r\n            var lastOpId = -1;\r\n            var idIndexMap = [];\r\n            paths.map(function (op, index, arr) {\r\n                // rewrite the path string\r\n                var opId = ++_this._builderIndex;\r\n                // track the array index => opId relationship\r\n                idIndexMap.push(opId);\r\n                var path = opSetPathParamId(idIndexMap, opSetId(opId.toString(), op.path), indexMappingFunction);\r\n                if (lastOpId >= 0) {\r\n                    path = opSetParentId(lastOpId.toString(), path);\r\n                }\r\n                // rewrite actions with placeholders replaced\r\n                var opActions = op.actions.map(function (a) {\r\n                    var actionId = ++_this._builderIndex;\r\n                    return opSetId(actionId.toString(), opSetPathId(opId.toString(), a));\r\n                });\r\n                // handle any specific child relationships\r\n                // the childIndex is reduced by 1 because we are removing the Session Path\r\n                pathQueue.getChildRelationship(index + 1).map(function (i) { return i - 1; }).forEach(function (childIndex) {\r\n                    // set the parent id for our non-immediate children\r\n                    arr[childIndex].path = opSetParentId(opId.toString(), arr[childIndex].path);\r\n                });\r\n                // and remember our last object path id for the parent replace above\r\n                lastOpId = opId;\r\n                // return our now substituted path and actions as a new object path instance\r\n                return new ObjectPath(path, opActions);\r\n            }).forEach(function (op) { return _this._objectPaths.add(op); });\r\n            // get this once\r\n            var obPaths = _this._objectPaths.toArray();\r\n            // create a new parser to handle finding the result based on the path\r\n            var parser = new ProcessQueryParser(obPaths[obPaths.length - 1]);\r\n            if (request.parser instanceof CachingParserWrapper) {\r\n                // handle special case of caching\r\n                request.parser = new ProcessQueryCachingParserWrapper(parser, request.parser);\r\n            }\r\n            else {\r\n                request.parser = parser;\r\n            }\r\n            // add the request to our batch requests\r\n            _this._requests.push(request);\r\n            // remove the temp property\r\n            delete request.options.clientsvc_ObjectPaths;\r\n        });\r\n    };\r\n    BatchExecutor.prototype.execute = function () {\r\n        var _this = this;\r\n        Logger.write(\""[\"" + this.batchId + \""] (\"" + (new Date()).getTime() + \"") Executing batch with \"" + this._requests.length + \"" requests.\"", 1 /* Info */);\r\n        // create our request body from all the merged object paths\r\n        var options = {\r\n            body: writeObjectPathBody(this._objectPaths.toArray()),\r\n        };\r\n        Logger.write(\""[\"" + this.batchId + \""] (\"" + (new Date()).getTime() + \"") Sending batch request.\"", 1 /* Info */);\r\n        // send the batch\r\n        return _super.prototype.postCore.call(this, options, new BatchParser()).then(function (rawResponse) {\r\n            Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Resolving batched requests.\"", 1 /* Info */);\r\n            return _this._requests.reduce(function (chain, request) {\r\n                Logger.write(\""[\"" + request.id + \""] (\"" + (new Date()).getTime() + \"") Resolving request in batch \"" + _this.batchId + \"".\"", 1 /* Info */);\r\n                return chain.then(function (_) { return request.parser.findResult(rawResponse).then(request.resolve).catch(request.reject); });\r\n            }, Promise.resolve());\r\n        });\r\n    };\r\n    return BatchExecutor;\r\n}(ClientSvcQueryable));\r\n/**\r\n * Used to return the raw results from parsing the batch\r\n */\r\nvar BatchParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BatchParser, _super);\r\n    function BatchParser() {\r\n        return _super.call(this, null) || this;\r\n    }\r\n    BatchParser.prototype.findResult = function (json) {\r\n        // we leave it to the individual request parsers to find their results in the raw json body\r\n        return json;\r\n    };\r\n    return BatchParser;\r\n}(ProcessQueryParser));\r\n/**\r\n * Handles processing batched results that are also cached\r\n */\r\nvar ProcessQueryCachingParserWrapper = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ProcessQueryCachingParserWrapper, _super);\r\n    function ProcessQueryCachingParserWrapper(parser, wrapper) {\r\n        return _super.call(this, parser, wrapper.cacheOptions) || this;\r\n    }\r\n    ProcessQueryCachingParserWrapper.prototype.findResult = function (json) {\r\n        var _this = this;\r\n        return this.parser.findResult(json).then(function (d) { return _this.cacheData(d); });\r\n    };\r\n    return ProcessQueryCachingParserWrapper;\r\n}(CachingParserWrapper));\r\n//# sourceMappingURL=batch.js.map"",""export { ObjectPathBatch } from \""./batch\"";\r\nexport * from \""./clintsvcqueryable\"";\r\nexport * from \""./objectpath\"";\r\nexport * from \""./opactionbuilders\"";\r\nexport * from \""./opbuilders\"";\r\nexport * from \""./parsers\"";\r\nexport * from \""./utils\"";\r\n//# sourceMappingURL=clientsvc.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { combine, extend, getGUID, mergeHeaders, mergeOptions, objectDefinedNotNull, hOP, getHashCode } from \""@pnp/common\"";\r\nimport { CachingOptions, Queryable } from \""@pnp/odata\"";\r\nimport { SPHttpClient, toAbsoluteUrl } from \""@pnp/sp\"";\r\nimport { ObjectPathQueue } from \""./objectpath\"";\r\nimport { methodAction, objectPath, objectProperties, opQuery } from \""./opactionbuilders\"";\r\nimport { method, property } from \""./opbuilders\"";\r\nimport { ProcessQueryParser } from \""./parsers\"";\r\nvar ProcessQueryPath = \""_vti_bin/client.svc/ProcessQuery\"";\r\nvar ClientSvcQueryable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientSvcQueryable, _super);\r\n    function ClientSvcQueryable(parent, _objectPaths) {\r\n        if (parent === void 0) { parent = \""\""; }\r\n        if (_objectPaths === void 0) { _objectPaths = null; }\r\n        var _this = _super.call(this) || this;\r\n        _this._objectPaths = _objectPaths;\r\n        _this._selects = [];\r\n        if (typeof parent === \""string\"") {\r\n            // we assume the parent here is an absolute url to a web\r\n            _this._parentUrl = parent;\r\n            _this._url = combine(parent.replace(ProcessQueryPath, \""\""), ProcessQueryPath);\r\n            if (!objectDefinedNotNull(_this._objectPaths)) {\r\n                _this._objectPaths = new ObjectPathQueue();\r\n            }\r\n        }\r\n        else {\r\n            _this._parentUrl = parent._parentUrl;\r\n            _this._url = combine(parent._parentUrl, ProcessQueryPath);\r\n            if (!objectDefinedNotNull(_objectPaths)) {\r\n                _this._objectPaths = parent._objectPaths.clone();\r\n            }\r\n            _this.configureFrom(parent);\r\n        }\r\n        return _this;\r\n    }\r\n    /**\r\n     * Choose which fields to return\r\n     *\r\n     * @param selects One or more fields to return\r\n     */\r\n    ClientSvcQueryable.prototype.select = function () {\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        [].push.apply(this._selects, selects);\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds this query to the supplied batch\r\n     *\r\n     * @example\r\n     * ```\r\n     *\r\n     * let b = pnp.sp.createBatch();\r\n     * pnp.sp.web.inBatch(b).get().then(...);\r\n     * b.execute().then(...)\r\n     * ```\r\n     */\r\n    ClientSvcQueryable.prototype.inBatch = function (batch) {\r\n        if (this.batch !== null) {\r\n            throw Error(\""This query is already part of a batch.\"");\r\n        }\r\n        this._batch = batch;\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets the full url with query information\r\n     *\r\n     */\r\n    ClientSvcQueryable.prototype.toUrlAndQuery = function () {\r\n        return _super.prototype.toUrl.call(this) + \""?\"" + Array.from(this.query).map(function (v) { return v[0] + \""=\"" + v[1]; }).join(\""&\"");\r\n    };\r\n    ClientSvcQueryable.prototype.getSelects = function () {\r\n        return objectDefinedNotNull(this._selects) ? this._selects : [];\r\n    };\r\n    /**\r\n     * Gets a child object based on this instance's paths and the supplied paramters\r\n     *\r\n     * @param factory Instance factory of the child type\r\n     * @param methodName Name of the method used to load the child\r\n     * @param params Parameters required by the method to load the child\r\n     */\r\n    ClientSvcQueryable.prototype.getChild = function (factory, methodName, params) {\r\n        var objectPaths = this._objectPaths.clone();\r\n        objectPaths.add(method(methodName, params, \r\n        // actions\r\n        objectPath()));\r\n        return new factory(this, objectPaths);\r\n    };\r\n    /**\r\n     * Gets a property of the current instance\r\n     *\r\n     * @param factory Instance factory of the child type\r\n     * @param propertyName Name of the property to load\r\n     */\r\n    ClientSvcQueryable.prototype.getChildProperty = function (factory, propertyName) {\r\n        var objectPaths = this._objectPaths.clone();\r\n        objectPaths.add(property(propertyName));\r\n        return new factory(this, objectPaths);\r\n    };\r\n    /**\r\n     * Sends a request\r\n     *\r\n     * @param op\r\n     * @param options\r\n     * @param parser\r\n     */\r\n    ClientSvcQueryable.prototype.send = function (objectPaths, options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = null; }\r\n        if (!objectDefinedNotNull(parser)) {\r\n            // we assume here that we want to return for this index path\r\n            parser = new ProcessQueryParser(objectPaths.last);\r\n        }\r\n        if (this.hasBatch) {\r\n            // this is using the options variable to pass some extra information downstream to the batch\r\n            options = extend(options, {\r\n                clientsvc_ObjectPaths: objectPaths.clone(),\r\n            });\r\n        }\r\n        else {\r\n            if (!hOP(options, \""body\"")) {\r\n                options = extend(options, {\r\n                    body: objectPaths.toBody(),\r\n                });\r\n            }\r\n        }\r\n        return _super.prototype.postCore.call(this, options, parser);\r\n    };\r\n    /**\r\n     * Sends the request, merging the result data with a new instance of factory\r\n     */\r\n    ClientSvcQueryable.prototype.sendGet = function (factory) {\r\n        var _this = this;\r\n        var ops = this._objectPaths.clone().appendActionToLast(opQuery(this.getSelects()));\r\n        return this.send(ops).then(function (r) { return extend(new factory(_this), r); });\r\n    };\r\n    /**\r\n     * Sends the request, merging the result data array with a new instances of factory\r\n     */\r\n    ClientSvcQueryable.prototype.sendGetCollection = function (factory) {\r\n        var ops = this._objectPaths.clone().appendActionToLast(opQuery([], this.getSelects()));\r\n        return this.send(ops).then(function (r) { return r.map(function (d) { return extend(factory(d), d); }); });\r\n    };\r\n    /**\r\n     * Invokes the specified method on the server and returns the result\r\n     *\r\n     * @param methodName Name of the method to invoke\r\n     * @param params Method parameters\r\n     * @param actions Any additional actions to execute in addition to the method invocation (set property for example)\r\n     */\r\n    ClientSvcQueryable.prototype.invokeMethod = function (methodName, params) {\r\n        if (params === void 0) { params = null; }\r\n        var actions = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            actions[_i - 2] = arguments[_i];\r\n        }\r\n        return this.invokeMethodImpl(methodName, params, actions, opQuery([], null));\r\n    };\r\n    /**\r\n     * Invokes a method action that returns a single result and does not have an associated query (ex: GetDescription on Term)\r\n     *\r\n     * @param methodName Name of the method to invoke\r\n     * @param params Method parameters\r\n     * @param actions Any additional actions to execute in addition to the method invocation (set property for example)\r\n     */\r\n    ClientSvcQueryable.prototype.invokeMethodAction = function (methodName, params) {\r\n        if (params === void 0) { params = null; }\r\n        var actions = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            actions[_i - 2] = arguments[_i];\r\n        }\r\n        return this.invokeMethodImpl(methodName, params, actions, null, true);\r\n    };\r\n    /**\r\n     * Invokes the specified non-query method on the server\r\n     *\r\n     * @param methodName Name of the method to invoke\r\n     * @param params Method parameters\r\n     * @param actions Any additional actions to execute in addition to the method invocation (set property for example)\r\n     */\r\n    ClientSvcQueryable.prototype.invokeNonQuery = function (methodName, params) {\r\n        if (params === void 0) { params = null; }\r\n        var actions = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            actions[_i - 2] = arguments[_i];\r\n        }\r\n        // by definition we are not returning anything from these calls so we should not be caching the results\r\n        this._useCaching = false;\r\n        return this.invokeMethodImpl(methodName, params, actions, null, true);\r\n    };\r\n    /**\r\n     * Invokes the specified method on the server and returns the resulting collection\r\n     *\r\n     * @param methodName Name of the method to invoke\r\n     * @param params Method parameters\r\n     * @param actions Any additional actions to execute in addition to the method invocation (set property for example)\r\n     */\r\n    ClientSvcQueryable.prototype.invokeMethodCollection = function (methodName, params) {\r\n        if (params === void 0) { params = null; }\r\n        var actions = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            actions[_i - 2] = arguments[_i];\r\n        }\r\n        return this.invokeMethodImpl(methodName, params, actions, opQuery([], []));\r\n    };\r\n    /**\r\n     * Updates this instance, returning a copy merged with the updated data after the update\r\n     *\r\n     * @param properties Plain object of the properties and values to update\r\n     * @param factory Factory method use to create a new instance of FactoryType\r\n     */\r\n    ClientSvcQueryable.prototype.invokeUpdate = function (properties, factory) {\r\n        var _this = this;\r\n        var ops = this._objectPaths.clone();\r\n        // append setting all the properties to this instance\r\n        objectProperties(properties).map(function (a) { return ops.appendActionToLast(a); });\r\n        ops.appendActionToLast(opQuery([], null));\r\n        return this.send(ops).then(function (r) { return extend(new factory(_this), r); });\r\n    };\r\n    /**\r\n     * Converts the current instance to a request context\r\n     *\r\n     * @param verb The request verb\r\n     * @param options The set of supplied request options\r\n     * @param parser The supplied ODataParser instance\r\n     * @param pipeline Optional request processing pipeline\r\n     */\r\n    ClientSvcQueryable.prototype.toRequestContext = function (verb, options, parser, pipeline) {\r\n        var _this = this;\r\n        return toAbsoluteUrl(this.toUrlAndQuery()).then(function (url) {\r\n            mergeOptions(options, _this._options);\r\n            var headers = new Headers();\r\n            mergeHeaders(headers, options.headers);\r\n            mergeHeaders(headers, {\r\n                \""accept\"": \""*/*\"",\r\n                \""content-type\"": \""text/xml\"",\r\n            });\r\n            options = extend(options, { headers: headers });\r\n            // we need to do some special cache handling to ensure we have a good key\r\n            if (_this._useCaching) {\r\n                // because all the requests use the same url they would collide in the cache we use a special key\r\n                var cacheKey = \""PnPjs.ProcessQueryClient(\"" + getHashCode(_this._objectPaths.toBody()) + \"")\"";\r\n                if (objectDefinedNotNull(_this._cachingOptions)) {\r\n                    // if our key ends in the ProcessQuery url we overwrite it\r\n                    if (/\\/client\\.svc\\/ProcessQuery\\?$/i.test(_this._cachingOptions.key)) {\r\n                        _this._cachingOptions.key = cacheKey;\r\n                    }\r\n                }\r\n                else {\r\n                    _this._cachingOptions = new CachingOptions(cacheKey);\r\n                }\r\n            }\r\n            var dependencyDispose = _this.hasBatch ? _this.addBatchDependency() : function () { return; };\r\n            // build our request context\r\n            var context = {\r\n                batch: _this.batch,\r\n                batchDependency: dependencyDispose,\r\n                cachingOptions: _this._cachingOptions,\r\n                clientFactory: function () { return new SPHttpClient(); },\r\n                isBatched: _this.hasBatch,\r\n                isCached: _this._useCaching,\r\n                options: options,\r\n                parser: parser,\r\n                pipeline: pipeline,\r\n                requestAbsoluteUrl: url,\r\n                requestId: getGUID(),\r\n                verb: verb,\r\n            };\r\n            return context;\r\n        });\r\n    };\r\n    /**\r\n     * Blocks a batch call from occuring, MUST be cleared by calling the returned function\r\n    */\r\n    ClientSvcQueryable.prototype.addBatchDependency = function () {\r\n        if (this._batch !== null) {\r\n            return this._batch.addDependency();\r\n        }\r\n        return function () { return null; };\r\n    };\r\n    Object.defineProperty(ClientSvcQueryable.prototype, \""hasBatch\"", {\r\n        /**\r\n         * Indicates if the current query has a batch associated\r\n         *\r\n         */\r\n        get: function () {\r\n            return objectDefinedNotNull(this._batch);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSvcQueryable.prototype, \""batch\"", {\r\n        /**\r\n         * The batch currently associated with this query or null\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.hasBatch ? this._batch : null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Executes the actual invoke method call\r\n     *\r\n     * @param methodName Name of the method to invoke\r\n     * @param params Method parameters\r\n     * @param queryAction Specifies the query action to take\r\n     */\r\n    ClientSvcQueryable.prototype.invokeMethodImpl = function (methodName, params, actions, queryAction, isAction) {\r\n        if (isAction === void 0) { isAction = false; }\r\n        var ops = this._objectPaths.clone();\r\n        if (isAction) {\r\n            ops.appendActionToLast(methodAction(methodName, params));\r\n        }\r\n        else {\r\n            ops.add(method.apply(void 0, [methodName, params].concat([objectPath()].concat(actions, [queryAction]))));\r\n        }\r\n        return this.send(ops);\r\n    };\r\n    return ClientSvcQueryable;\r\n}(Queryable));\r\nexport { ClientSvcQueryable };\r\n//# sourceMappingURL=clintsvcqueryable.js.map"",""import { extend, objectDefinedNotNull } from \""@pnp/common\"";\r\nimport { objectPath } from \""./opactionbuilders\"";\r\nimport { property, staticProperty } from \""./opbuilders\"";\r\nimport { writeObjectPathBody } from \""./utils\"";\r\n/**\r\n * Represents an ObjectPath used when querying ProcessQuery\r\n */\r\nvar ObjectPath = /** @class */ (function () {\r\n    function ObjectPath(path, actions, id, replaceAfter) {\r\n        if (actions === void 0) { actions = []; }\r\n        if (id === void 0) { id = -1; }\r\n        if (replaceAfter === void 0) { replaceAfter = []; }\r\n        this.path = path;\r\n        this.actions = actions;\r\n        this.id = id;\r\n        this.replaceAfter = replaceAfter;\r\n    }\r\n    return ObjectPath;\r\n}());\r\nexport { ObjectPath };\r\n/**\r\n * Replaces all found instance of the $$ID$$ placeholder in the supplied xml string\r\n *\r\n * @param id New value to be insterted\r\n * @param xml The existing xml fragment in which the replace should occur\r\n */\r\nexport function opSetId(id, xml) {\r\n    return xml.replace(/\\$\\$ID\\$\\$/g, id);\r\n}\r\n/**\r\n * Replaces all found instance of the $$PATH_ID$$ placeholder in the supplied xml string\r\n *\r\n * @param id New value to be insterted\r\n * @param xml The existing xml fragment in which the replace should occur\r\n */\r\nexport function opSetPathId(id, xml) {\r\n    return xml.replace(/\\$\\$PATH_ID\\$\\$/g, id);\r\n}\r\n/**\r\n * Replaces all found instance of the $$PARENT_ID$$ placeholder in the supplied xml string\r\n *\r\n * @param id New value to be insterted\r\n * @param xml The existing xml fragment in which the replace should occur\r\n */\r\nexport function opSetParentId(id, xml) {\r\n    return xml.replace(/\\$\\$PARENT_ID\\$\\$/g, id);\r\n}\r\n/**\r\n * Replaces all found instance of the $$OP_PARAM_ID$$ placeholder in the supplied xml string\r\n *\r\n * @param map A mapping where [index] = replaced_object_path_id\r\n * @param xml The existing xml fragment in which the replace should occur\r\n * @param indexMapper Used when creating batches, not meant for direct use external to this library\r\n */\r\nexport function opSetPathParamId(map, xml, indexMapper) {\r\n    if (indexMapper === void 0) { indexMapper = function (n) { return n; }; }\r\n    // this approach works because input params must come before the things that need them\r\n    // meaning the right id will always be in the map\r\n    var matches = /\\$\\$OP_PARAM_ID_(\\d+)\\$\\$/ig.exec(xml);\r\n    if (matches !== null) {\r\n        for (var i = 1; i < matches.length; i++) {\r\n            var index = parseInt(matches[i], 10);\r\n            var regex = new RegExp(\""\\\\$\\\\$OP_PARAM_ID_\"" + index + \""\\\\$\\\\$\"", \""ig\"");\r\n            xml = xml.replace(regex, map[indexMapper(index)].toString());\r\n        }\r\n    }\r\n    return xml;\r\n}\r\n/**\r\n * Represents a collection of IObjectPaths\r\n */\r\nvar ObjectPathQueue = /** @class */ (function () {\r\n    function ObjectPathQueue(_paths, _relationships) {\r\n        if (_paths === void 0) { _paths = []; }\r\n        if (_relationships === void 0) { _relationships = {}; }\r\n        this._paths = _paths;\r\n        this._relationships = _relationships;\r\n        this._contextIndex = -1;\r\n        this._siteIndex = -1;\r\n        this._webIndex = -1;\r\n    }\r\n    /**\r\n     * Adds an object path to the queue\r\n     *\r\n     * @param op The action to add\r\n     * @returns The index of the added object path\r\n     */\r\n    ObjectPathQueue.prototype.add = function (op) {\r\n        this.dirty();\r\n        this._paths.push(op);\r\n        return this.lastIndex;\r\n    };\r\n    ObjectPathQueue.prototype.addChildRelationship = function (parentIndex, childIndex) {\r\n        if (objectDefinedNotNull(this._relationships[\""_\"" + parentIndex])) {\r\n            this._relationships[\""_\"" + parentIndex].push(childIndex);\r\n        }\r\n        else {\r\n            this._relationships[\""_\"" + parentIndex] = [childIndex];\r\n        }\r\n    };\r\n    ObjectPathQueue.prototype.getChildRelationship = function (parentIndex) {\r\n        if (objectDefinedNotNull(this._relationships[\""_\"" + parentIndex])) {\r\n            return this._relationships[\""_\"" + parentIndex];\r\n        }\r\n        else {\r\n            return [];\r\n        }\r\n    };\r\n    ObjectPathQueue.prototype.getChildRelationships = function () {\r\n        return this._relationships;\r\n    };\r\n    /**\r\n     * Appends an action to the supplied IObjectPath, replacing placeholders\r\n     *\r\n     * @param op IObjectPath to which the action will be appended\r\n     * @param action The action to append\r\n     */\r\n    ObjectPathQueue.prototype.appendAction = function (op, action) {\r\n        this.dirty();\r\n        op.actions.push(action);\r\n        return this;\r\n    };\r\n    /**\r\n     * Appends an action to the last IObjectPath in the collection\r\n     *\r\n     * @param action\r\n     */\r\n    ObjectPathQueue.prototype.appendActionToLast = function (action) {\r\n        return this.appendAction(this.last, action);\r\n    };\r\n    /**\r\n     * Creates a copy of this ObjectPathQueue\r\n     */\r\n    ObjectPathQueue.prototype.clone = function () {\r\n        var clone = new ObjectPathQueue(this.toArray(), extend({}, this._relationships));\r\n        clone._contextIndex = this._contextIndex;\r\n        clone._siteIndex = this._siteIndex;\r\n        clone._webIndex = this._webIndex;\r\n        return clone;\r\n    };\r\n    /**\r\n     * Gets a copy of this instance's paths\r\n     */\r\n    ObjectPathQueue.prototype.toArray = function () {\r\n        return this._paths.slice(0);\r\n    };\r\n    Object.defineProperty(ObjectPathQueue.prototype, \""last\"", {\r\n        /**\r\n         * The last IObjectPath instance added to this collection\r\n         */\r\n        get: function () {\r\n            if (this._paths.length < 1) {\r\n                return null;\r\n            }\r\n            return this._paths[this.lastIndex];\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ObjectPathQueue.prototype, \""lastIndex\"", {\r\n        /**\r\n         * Index of the last IObjectPath added to the queue\r\n         */\r\n        get: function () {\r\n            return this._paths.length - 1;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ObjectPathQueue.prototype, \""siteIndex\"", {\r\n        /**\r\n         * Gets the index of the current site in the queue\r\n         */\r\n        get: function () {\r\n            if (this._siteIndex < 0) {\r\n                // this needs to be here in case we create it\r\n                var contextIndex = this.contextIndex;\r\n                this._siteIndex = this.add(property(\""Site\"", \r\n                // actions\r\n                objectPath()));\r\n                this.addChildRelationship(contextIndex, this._siteIndex);\r\n            }\r\n            return this._siteIndex;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ObjectPathQueue.prototype, \""webIndex\"", {\r\n        /**\r\n         * Gets the index of the current web in the queue\r\n         */\r\n        get: function () {\r\n            if (this._webIndex < 0) {\r\n                // this needs to be here in case we create it\r\n                var contextIndex = this.contextIndex;\r\n                this._webIndex = this.add(property(\""Web\"", \r\n                // actions\r\n                objectPath()));\r\n                this.addChildRelationship(contextIndex, this._webIndex);\r\n            }\r\n            return this._webIndex;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ObjectPathQueue.prototype, \""contextIndex\"", {\r\n        /**\r\n         * Gets the index of the Current context in the queue, can be used to establish parent -> child rels\r\n         */\r\n        get: function () {\r\n            if (this._contextIndex < 0) {\r\n                this._contextIndex = this.add(staticProperty(\""Current\"", \""{3747adcd-a3c3-41b9-bfab-4a64dd2f1e0a}\"", \r\n                // actions\r\n                objectPath()));\r\n            }\r\n            return this._contextIndex;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    ObjectPathQueue.prototype.toBody = function () {\r\n        if (objectDefinedNotNull(this._xml)) {\r\n            return this._xml;\r\n        }\r\n        // create our xml payload\r\n        this._xml = writeObjectPathBody(this.toIndexedTree());\r\n        return this._xml;\r\n    };\r\n    /**\r\n     * Conducts the string replacements for id, parent id, and path id\r\n     *\r\n     * @returns The tree with all string replacements made\r\n     */\r\n    ObjectPathQueue.prototype.toIndexedTree = function () {\r\n        var _this = this;\r\n        var builderIndex = -1;\r\n        var lastOpId = -1;\r\n        var idIndexMap = [];\r\n        return this.toArray().map(function (op, index, arr) {\r\n            var opId = ++builderIndex;\r\n            // track the array index => opId relationship\r\n            idIndexMap.push(opId);\r\n            // do path replacements\r\n            op.path = opSetPathParamId(idIndexMap, opSetId(opId.toString(), op.path));\r\n            if (lastOpId >= 0) {\r\n                // if we have a parent do the replace\r\n                op.path = opSetParentId(lastOpId.toString(), op.path);\r\n            }\r\n            // rewrite actions with placeholders replaced\r\n            op.actions = op.actions.map(function (a) {\r\n                var actionId = ++builderIndex;\r\n                return opSetId(actionId.toString(), opSetPathId(opId.toString(), a));\r\n            });\r\n            // handle any specific child relationships\r\n            _this.getChildRelationship(index).forEach(function (childIndex) {\r\n                // set the parent id for our non-immediate children, thus removing the token so it isn't overwritten\r\n                arr[childIndex].path = opSetParentId(opId.toString(), arr[childIndex].path);\r\n            });\r\n            // and remember our last object path id for the parent replace above\r\n            lastOpId = opId;\r\n            return op;\r\n        });\r\n    };\r\n    /**\r\n     * Dirties this queue clearing any cached data\r\n     */\r\n    ObjectPathQueue.prototype.dirty = function () {\r\n        this._xml = null;\r\n    };\r\n    return ObjectPathQueue;\r\n}());\r\nexport { ObjectPathQueue };\r\n//# sourceMappingURL=objectpath.js.map"",""export function objectPath() {\r\n    return \""<ObjectPath Id=\\\""$$ID$$\\\"" ObjectPathId=\\\""$$PATH_ID$$\\\"" />\"";\r\n}\r\nexport function identityQuery() {\r\n    return \""<ObjectIdentityQuery Id=\\\""$$ID$$\\\"" ObjectPathId=\\\""$$PATH_ID$$\\\"" />\"";\r\n}\r\nexport function opQuery(selectProperties, childSelectProperties) {\r\n    // this is fairly opaque behavior, but is the simplest way to convey the required information.\r\n    // if selectProperties.length === 0 or null then select all\r\n    // else select indicated properties\r\n    if (selectProperties === void 0) { selectProperties = null; }\r\n    if (childSelectProperties === void 0) { childSelectProperties = null; }\r\n    // if childSelectProperties === null do not include that block\r\n    // if childSelectProperties.length === 0 then select all\r\n    // else select indicated properties\r\n    var builder = [];\r\n    builder.push(\""<Query Id=\\\""$$ID$$\\\"" ObjectPathId=\\\""$$PATH_ID$$\\\"">\"");\r\n    if (selectProperties === null || selectProperties.length < 1) {\r\n        builder.push(\""<Query SelectAllProperties=\\\""true\\\"" >\"");\r\n        builder.push(\""<Properties />\"");\r\n        builder.push(\""</Query >\"");\r\n    }\r\n    else {\r\n        builder.push(\""<Query SelectAllProperties=\\\""false\\\"" >\"");\r\n        builder.push(\""<Properties>\"");\r\n        [].push.apply(builder, selectProperties.map(function (p) { return \""<Property Name=\\\""\"" + p + \""\\\"" SelectAll=\\\""true\\\"" />\""; }));\r\n        builder.push(\""</Properties>\"");\r\n        builder.push(\""</Query >\"");\r\n    }\r\n    if (childSelectProperties !== null) {\r\n        if (childSelectProperties.length < 1) {\r\n            builder.push(\""<ChildItemQuery SelectAllProperties=\\\""true\\\"" >\"");\r\n            builder.push(\""<Properties />\"");\r\n            builder.push(\""</ChildItemQuery >\"");\r\n        }\r\n        else {\r\n            builder.push(\""<ChildItemQuery SelectAllProperties=\\\""false\\\"" >\"");\r\n            builder.push(\""<Properties>\"");\r\n            [].push.apply(builder, childSelectProperties.map(function (p) { return \""<Property Name=\\\""\"" + p + \""\\\"" SelectAll=\\\""true\\\"" />\""; }));\r\n            builder.push(\""</Properties>\"");\r\n            builder.push(\""</ChildItemQuery >\"");\r\n        }\r\n    }\r\n    builder.push(\""</Query >\"");\r\n    return builder.join(\""\"");\r\n}\r\nexport function setProperty(name, type, value) {\r\n    var builder = [];\r\n    builder.push(\""<SetProperty Id=\\\""$$ID$$\\\"" ObjectPathId=\\\""$$PATH_ID$$\\\"" Name=\\\""\"" + name + \""\\\"">\"");\r\n    builder.push(\""<Parameter Type=\\\""\"" + type + \""\\\"">\"" + value + \""</Parameter>\"");\r\n    builder.push(\""</SetProperty>\"");\r\n    return builder.join(\""\"");\r\n}\r\nexport function methodAction(name, params) {\r\n    var builder = [];\r\n    builder.push(\""<Method Id=\\\""$$ID$$\\\"" ObjectPathId=\\\""$$PATH_ID$$\\\"" Name=\\\""\"" + name + \""\\\"">\"");\r\n    if (params !== null) {\r\n        var arrParams = params.toArray();\r\n        if (arrParams.length < 1) {\r\n            builder.push(\""<Parameters />\"");\r\n        }\r\n        else {\r\n            builder.push(\""<Parameters>\"");\r\n            [].push.apply(builder, arrParams.map(function (p) { return \""<Parameter Type=\\\""\"" + p.type + \""\\\"">\"" + p.value + \""</Parameter>\""; }));\r\n            builder.push(\""</Parameters>\"");\r\n        }\r\n    }\r\n    builder.push(\""</Method>\"");\r\n    return builder.join(\""\"");\r\n}\r\nexport function objectProperties(o) {\r\n    return Object.getOwnPropertyNames(o).map(function (name) {\r\n        var value = o[name];\r\n        if (typeof value === \""boolean\"") {\r\n            return setProperty(name, \""Boolean\"", \""\"" + value);\r\n        }\r\n        else if (typeof value === \""number\"") {\r\n            return setProperty(name, \""Number\"", \""\"" + value);\r\n        }\r\n        else if (typeof value === \""string\"") {\r\n            return setProperty(name, \""String\"", \""\"" + value);\r\n        }\r\n        return \""\"";\r\n    }, []);\r\n}\r\n//# sourceMappingURL=opactionbuilders.js.map"",""import { ObjectPath } from \""./objectpath\"";\r\nexport function property(name) {\r\n    var actions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        actions[_i - 1] = arguments[_i];\r\n    }\r\n    return new ObjectPath(\""<Property Id=\\\""$$ID$$\\\"" ParentId=\\\""$$PARENT_ID$$\\\"" Name=\\\""\"" + name + \""\\\"" />\"", actions);\r\n}\r\nexport function staticMethod(name, typeId) {\r\n    var actions = [];\r\n    for (var _i = 2; _i < arguments.length; _i++) {\r\n        actions[_i - 2] = arguments[_i];\r\n    }\r\n    return new ObjectPath(\""<StaticMethod Id=\\\""$$ID$$\\\"" Name=\\\""\"" + name + \""\\\"" TypeId=\\\""\"" + typeId + \""\\\"" />\"", actions);\r\n}\r\nexport function staticProperty(name, typeId) {\r\n    var actions = [];\r\n    for (var _i = 2; _i < arguments.length; _i++) {\r\n        actions[_i - 2] = arguments[_i];\r\n    }\r\n    return new ObjectPath(\""<StaticProperty Id=\\\""$$ID$$\\\"" Name=\\\""\"" + name + \""\\\"" TypeId=\\\""\"" + typeId + \""\\\"" />\"", actions);\r\n}\r\nexport function objConstructor(typeId) {\r\n    var actions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        actions[_i - 1] = arguments[_i];\r\n    }\r\n    return new ObjectPath(\""<Constructor Id=\\\""$$ID$$\\\"" TypeId=\\\""\"" + typeId + \""\\\"" />\"", actions);\r\n}\r\n/**\r\n * Used to build parameters when calling methods\r\n */\r\nvar MethodParams = /** @class */ (function () {\r\n    function MethodParams(_p) {\r\n        if (_p === void 0) { _p = []; }\r\n        this._p = _p;\r\n    }\r\n    MethodParams.build = function (initValues) {\r\n        if (initValues === void 0) { initValues = []; }\r\n        var params = new MethodParams();\r\n        [].push.apply(params._p, initValues);\r\n        return params;\r\n    };\r\n    MethodParams.prototype.string = function (value) {\r\n        return this.a(\""String\"", value);\r\n    };\r\n    MethodParams.prototype.number = function (value) {\r\n        return this.a(\""Number\"", value.toString());\r\n    };\r\n    MethodParams.prototype.boolean = function (value) {\r\n        return this.a(\""Boolean\"", value.toString());\r\n    };\r\n    MethodParams.prototype.objectPath = function (inputIndex) {\r\n        return this.a(\""ObjectPath\"", inputIndex.toString());\r\n    };\r\n    MethodParams.prototype.toArray = function () {\r\n        return this._p;\r\n    };\r\n    MethodParams.prototype.a = function (type, value) {\r\n        this._p.push({ type: type, value: value });\r\n        return this;\r\n    };\r\n    return MethodParams;\r\n}());\r\nexport { MethodParams };\r\nexport function method(name, params) {\r\n    var actions = [];\r\n    for (var _i = 2; _i < arguments.length; _i++) {\r\n        actions[_i - 2] = arguments[_i];\r\n    }\r\n    var builder = [];\r\n    builder.push(\""<Method Id=\\\""$$ID$$\\\"" ParentId=\\\""$$PARENT_ID$$\\\"" Name=\\\""\"" + name + \""\\\"">\"");\r\n    if (params !== null) {\r\n        var arrParams = params.toArray();\r\n        if (arrParams.length < 1) {\r\n            builder.push(\""<Parameters />\"");\r\n        }\r\n        else {\r\n            builder.push(\""<Parameters>\"");\r\n            [].push.apply(builder, arrParams.map(function (p) {\r\n                if (p.type === \""ObjectPath\"") {\r\n                    return \""<Parameter ObjectPathId=\\\""$$OP_PARAM_ID_\"" + p.value + \""$$\\\"" />\"";\r\n                }\r\n                return \""<Parameter Type=\\\""\"" + p.type + \""\\\"">\"" + p.value + \""</Parameter>\"";\r\n            }));\r\n            builder.push(\""</Parameters>\"");\r\n        }\r\n    }\r\n    builder.push(\""</Method>\"");\r\n    return new ObjectPath(builder.join(\""\""), actions);\r\n}\r\n//# sourceMappingURL=opbuilders.js.map"",""import { getAttrValueFromString, jsS, hOP } from \""@pnp/common\"";\r\n/**\r\n * Used within the request pipeline to parse ProcessQuery results\r\n */\r\nvar ProcessQueryParser = /** @class */ (function () {\r\n    function ProcessQueryParser(op) {\r\n        this.op = op;\r\n    }\r\n    /**\r\n     * Parses the response checking for errors\r\n     *\r\n     * @param r Response object\r\n     */\r\n    ProcessQueryParser.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return r.text().then(function (t) {\r\n            if (!r.ok) {\r\n                throw Error(t);\r\n            }\r\n            try {\r\n                return JSON.parse(t);\r\n            }\r\n            catch (e) {\r\n                // special case in ProcessQuery where we got an error back, but it is not in json format\r\n                throw Error(t);\r\n            }\r\n        }).then(function (parsed) {\r\n            // here we need to check for an error body\r\n            if (parsed.length > 0 && hOP(parsed[0], \""ErrorInfo\"") && parsed[0].ErrorInfo !== null) {\r\n                throw Error(jsS(parsed[0].ErrorInfo));\r\n            }\r\n            return _this.findResult(parsed);\r\n        });\r\n    };\r\n    ProcessQueryParser.prototype.findResult = function (json) {\r\n        for (var i = 0; i < this.op.actions.length; i++) {\r\n            var a = this.op.actions[i];\r\n            // let's see if the result is null based on the ObjectPath action, if it exists\r\n            // <ObjectPath Id=\""8\"" ObjectPathId=\""7\"" />\r\n            if (/^<ObjectPath /i.test(a)) {\r\n                var result = this.getParsedResultById(json, parseInt(getAttrValueFromString(a, \""Id\""), 10));\r\n                if (!result || (result && result.IsNull)) {\r\n                    return Promise.resolve(null);\r\n                }\r\n            }\r\n            // let's see if we have a query result\r\n            // <Query Id=\""5\"" ObjectPathId = \""3\"" >\r\n            if (/^<Query /i.test(a)) {\r\n                var result = this.getParsedResultById(json, parseInt(getAttrValueFromString(a, \""Id\""), 10));\r\n                if (result && hOP(result, \""_Child_Items_\"")) {\r\n                    // this is a collection result\r\n                    /* tslint:disable:no-string-literal */\r\n                    return Promise.resolve(result[\""_Child_Items_\""]);\r\n                    /* tslint:enable:no-string-literal */\r\n                }\r\n                else {\r\n                    // this is an instance result\r\n                    return Promise.resolve(result);\r\n                }\r\n            }\r\n            // this is an invokeMethodAction so the last method action corresponds to our result\r\n            if (i === (this.op.actions.length - 1) && /^<Method /i.test(a)) {\r\n                return Promise.resolve(this.getParsedResultById(json, parseInt(getAttrValueFromString(a, \""Id\""), 10)));\r\n            }\r\n        }\r\n        // no result could be found so we are effectively returning void\r\n        // issue is we really don't know if we should be returning void (a method invocation with a void return) or\r\n        // if we just didn't find something above. We will let downstream things worry about that\r\n    };\r\n    /**\r\n     * Locates a result by ObjectPath id\r\n     *\r\n     * @param parsed the parsed JSON body from the response\r\n     * @param id The ObjectPath id whose result we want\r\n     */\r\n    ProcessQueryParser.prototype.getParsedResultById = function (parsed, id) {\r\n        for (var i = 0; i < parsed.length; i++) {\r\n            if (parsed[i] === id) {\r\n                return parsed[i + 1];\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    return ProcessQueryParser;\r\n}());\r\nexport { ProcessQueryParser };\r\n//# sourceMappingURL=parsers.js.map"",""/**\r\n * Transforms an array of object paths into a request xml body. Does not do placeholder substitutions.\r\n *\r\n * @param objectPaths The object paths for which we want to generate a body\r\n */\r\nexport function writeObjectPathBody(objectPaths) {\r\n    var actions = [];\r\n    var paths = [];\r\n    objectPaths.forEach(function (op) {\r\n        paths.push(op.path);\r\n        actions.push.apply(actions, op.actions);\r\n    });\r\n    // create our xml payload\r\n    return [\r\n        \""<Request xmlns=\\\""http://schemas.microsoft.com/sharepoint/clientquery/2009\\\"" SchemaVersion=\\\""15.0.0.0\\\"" LibraryVersion=\\\""16.0.0.0\\\"" ApplicationName=\\\""PnPjs\\\"">\"",\r\n        \""<Actions>\"",\r\n        actions.join(\""\""),\r\n        \""</Actions>\"",\r\n        \""<ObjectPaths>\"",\r\n        paths.join(\""\""),\r\n        \""</ObjectPaths>\"",\r\n        \""</Request>\"",\r\n    ].join(\""\"");\r\n}\r\n//# sourceMappingURL=utils.js.map"",""export * from \""./src/taxonomy\"";\r\n//# sourceMappingURL=index.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { ClientSvcQueryable, MethodParams, property, } from \""@pnp/sp-clientsvc\"";\r\nimport { stringIsNullOrEmpty } from \""@pnp/common\"";\r\n/**\r\n * Represents a collection of labels\r\n */\r\nvar Labels = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Labels, _super);\r\n    function Labels(parent, _objectPaths) {\r\n        if (parent === void 0) { parent = \""\""; }\r\n        if (_objectPaths === void 0) { _objectPaths = null; }\r\n        var _this = _super.call(this, parent, _objectPaths) || this;\r\n        _this._objectPaths.add(property(\""Labels\""));\r\n        return _this;\r\n    }\r\n    /**\r\n     * Gets a label from the collection by its value\r\n     *\r\n     * @param value The value to retrieve\r\n     */\r\n    Labels.prototype.getByValue = function (value) {\r\n        var params = MethodParams.build().string(value);\r\n        return this.getChild(Label, \""GetByValue\"", params);\r\n    };\r\n    /**\r\n     * Loads the data and merges with with the ILabel instances\r\n     */\r\n    Labels.prototype.get = function () {\r\n        var _this = this;\r\n        return this.sendGetCollection(function (d) {\r\n            if (!stringIsNullOrEmpty(d.Value)) {\r\n                return _this.getByValue(d.Value);\r\n            }\r\n            throw Error(\""Could not find Value in Labels.get(). You must include at least one of these in your select fields.\"");\r\n        });\r\n    };\r\n    return Labels;\r\n}(ClientSvcQueryable));\r\nexport { Labels };\r\n/**\r\n * Represents a label instance\r\n */\r\nvar Label = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Label, _super);\r\n    function Label() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets the data for this Label\r\n     */\r\n    Label.prototype.get = function () {\r\n        return this.sendGet(Label);\r\n    };\r\n    /**\r\n     * Sets this label as the default\r\n     */\r\n    Label.prototype.setAsDefaultForLanguage = function () {\r\n        return this.invokeNonQuery(\""SetAsDefaultForLanguage\"");\r\n    };\r\n    /**\r\n     * Deletes this label\r\n     */\r\n    Label.prototype.delete = function () {\r\n        return this.invokeNonQuery(\""DeleteObject\"");\r\n    };\r\n    return Label;\r\n}(ClientSvcQueryable));\r\nexport { Label };\r\n//# sourceMappingURL=labels.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { sp } from \""@pnp/sp\"";\r\nimport { ClientSvcQueryable, ObjectPathBatch, objectPath, staticMethod } from \""@pnp/sp-clientsvc\"";\r\nimport { TermStore, TermStores } from \""./termstores\"";\r\n/**\r\n * The root taxonomy object\r\n */\r\nvar Session = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Session, _super);\r\n    function Session(webUrl) {\r\n        if (webUrl === void 0) { webUrl = \""\""; }\r\n        var _this = _super.call(this, webUrl) || this;\r\n        // everything starts with the session\r\n        _this._objectPaths.add(staticMethod(\""GetTaxonomySession\"", \""{981cbc68-9edc-4f8d-872f-71146fcbb84f}\"", \r\n        // actions\r\n        objectPath()));\r\n        return _this;\r\n    }\r\n    Object.defineProperty(Session.prototype, \""termStores\"", {\r\n        /**\r\n         * The collection of term stores\r\n         */\r\n        get: function () {\r\n            return new TermStores(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Provides access to sp.setup from @pnp/sp\r\n     *\r\n     * @param config Configuration\r\n     */\r\n    Session.prototype.setup = function (config) {\r\n        sp.setup(config);\r\n    };\r\n    /**\r\n     * Creates a new batch\r\n     */\r\n    Session.prototype.createBatch = function () {\r\n        return new ObjectPathBatch(this.toUrl());\r\n    };\r\n    /**\r\n     * Gets the default keyword termstore for this session\r\n     */\r\n    Session.prototype.getDefaultKeywordTermStore = function () {\r\n        return this.getChild(TermStore, \""GetDefaultKeywordsTermStore\"", null);\r\n    };\r\n    /**\r\n     * Gets the default site collection termstore for this session\r\n     */\r\n    Session.prototype.getDefaultSiteCollectionTermStore = function () {\r\n        return this.getChild(TermStore, \""GetDefaultSiteCollectionTermStore\"", null);\r\n    };\r\n    return Session;\r\n}(ClientSvcQueryable));\r\nexport { Session };\r\n//# sourceMappingURL=session.js.map"",""import { Session } from \""./session\"";\r\n// export an existing session instance\r\nexport var taxonomy = new Session();\r\nexport * from \""./labels\"";\r\nexport * from \""./session\"";\r\nexport * from \""./termgroup\"";\r\nexport * from \""./terms\"";\r\nexport * from \""./termsets\"";\r\nexport * from \""./termstores\"";\r\nexport * from \""./types\"";\r\n//# sourceMappingURL=taxonomy.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, getGUID, sanitizeGuid } from \""@pnp/common\"";\r\nimport { ClientSvcQueryable, MethodParams } from \""@pnp/sp-clientsvc\"";\r\nimport { TermSets } from \""./termsets\"";\r\nimport { TermStore } from \""./termstores\"";\r\n/**\r\n * Represents a group in the taxonomy heirarchy\r\n */\r\nvar TermGroup = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TermGroup, _super);\r\n    function TermGroup(parent, _objectPaths) {\r\n        if (parent === void 0) { parent = \""\""; }\r\n        var _this = _super.call(this, parent, _objectPaths) || this;\r\n        // this should mostly be true\r\n        _this.store = parent instanceof TermStore ? parent : null;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(TermGroup.prototype, \""termSets\"", {\r\n        /**\r\n         * Gets the collection of term sets in this group\r\n         */\r\n        get: function () {\r\n            return this.getChildProperty(TermSets, \""TermSets\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds a contributor to the Group\r\n     *\r\n     * @param principalName The login name of the user to be added as a contributor\r\n     */\r\n    TermGroup.prototype.addContributor = function (principalName) {\r\n        var params = MethodParams.build().string(principalName);\r\n        return this.invokeNonQuery(\""AddContributor\"", params);\r\n    };\r\n    /**\r\n     * Adds a group manager to the Group\r\n     *\r\n     * @param principalName The login name of the user to be added as a group manager\r\n     */\r\n    TermGroup.prototype.addGroupManager = function (principalName) {\r\n        var params = MethodParams.build().string(principalName);\r\n        return this.invokeNonQuery(\""AddGroupManager\"", params);\r\n    };\r\n    /**\r\n     * Creates a new TermSet in this Group using the provided language and unique identifier\r\n     *\r\n     * @param name The name of the new TermSet being created\r\n     * @param lcid The language that the new TermSet name is in\r\n     * @param id The unique identifier of the new TermSet being created (optional)\r\n     */\r\n    TermGroup.prototype.createTermSet = function (name, lcid, id) {\r\n        var _this = this;\r\n        if (id === void 0) { id = getGUID(); }\r\n        var params = MethodParams.build()\r\n            .string(name)\r\n            .string(sanitizeGuid(id))\r\n            .number(lcid);\r\n        this._useCaching = false;\r\n        return this.invokeMethod(\""CreateTermSet\"", params)\r\n            .then(function (r) { return extend(_this.store.getTermSetById(r.Id), r); });\r\n    };\r\n    /**\r\n     * Gets this term store's data\r\n     */\r\n    TermGroup.prototype.get = function () {\r\n        return this.sendGet(TermGroup);\r\n    };\r\n    /**\r\n     * Updates the specified properties of this term set, not all properties can be updated\r\n     *\r\n     * @param properties Plain object representing the properties and new values to update\r\n     */\r\n    TermGroup.prototype.update = function (properties) {\r\n        return this.invokeUpdate(properties, TermGroup);\r\n    };\r\n    return TermGroup;\r\n}(ClientSvcQueryable));\r\nexport { TermGroup };\r\n//# sourceMappingURL=termgroup.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, sanitizeGuid, stringIsNullOrEmpty } from \""@pnp/common\"";\r\nimport { ClientSvcQueryable, MethodParams, } from \""@pnp/sp-clientsvc\"";\r\nimport { Labels } from \""./labels\"";\r\nimport { TermSet, TermSets } from \""./termsets\"";\r\nvar Terms = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Terms, _super);\r\n    function Terms() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets the terms in this collection\r\n     */\r\n    Terms.prototype.get = function () {\r\n        var _this = this;\r\n        return this.sendGetCollection(function (d) {\r\n            if (!stringIsNullOrEmpty(d.Name)) {\r\n                return _this.getByName(d.Name);\r\n            }\r\n            else if (!stringIsNullOrEmpty(d.Id)) {\r\n                return _this.getById(d.Id);\r\n            }\r\n            throw Error(\""Could not find Name or Id in Terms.get(). You must include at least one of these in your select fields.\"");\r\n        });\r\n    };\r\n    /**\r\n     * Gets a term by id\r\n     *\r\n     * @param id The id of the term\r\n     */\r\n    Terms.prototype.getById = function (id) {\r\n        var params = MethodParams.build()\r\n            .string(sanitizeGuid(id));\r\n        return this.getChild(Term, \""GetById\"", params);\r\n    };\r\n    /**\r\n     * Gets a term by name\r\n     *\r\n     * @param name Term name\r\n     */\r\n    Terms.prototype.getByName = function (name) {\r\n        var params = MethodParams.build()\r\n            .string(name);\r\n        return this.getChild(Term, \""GetByName\"", params);\r\n    };\r\n    return Terms;\r\n}(ClientSvcQueryable));\r\nexport { Terms };\r\n/**\r\n * Represents the operations available on a given term\r\n */\r\nvar Term = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Term, _super);\r\n    function Term() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Term.prototype, \""labels\"", {\r\n        get: function () {\r\n            return new Labels(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Term.prototype, \""parent\"", {\r\n        get: function () {\r\n            return this.getChildProperty(Term, \""Parent\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Term.prototype, \""pinSourceTermSet\"", {\r\n        get: function () {\r\n            return this.getChildProperty(TermSet, \""PinSourceTermSet\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Term.prototype, \""reusedTerms\"", {\r\n        get: function () {\r\n            return this.getChildProperty(Terms, \""ReusedTerms\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Term.prototype, \""sourceTerm\"", {\r\n        get: function () {\r\n            return this.getChildProperty(Term, \""SourceTerm\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Term.prototype, \""termSet\"", {\r\n        get: function () {\r\n            return this.getChildProperty(TermSet, \""TermSet\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Term.prototype, \""termSets\"", {\r\n        get: function () {\r\n            return this.getChildProperty(TermSets, \""TermSets\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Creates a new label for this Term\r\n     *\r\n     * @param name label value\r\n     * @param lcid language code\r\n     * @param isDefault Is the default label\r\n     */\r\n    Term.prototype.createLabel = function (name, lcid, isDefault) {\r\n        var _this = this;\r\n        if (isDefault === void 0) { isDefault = false; }\r\n        var params = MethodParams.build()\r\n            .string(name)\r\n            .number(lcid)\r\n            .boolean(isDefault);\r\n        this._useCaching = false;\r\n        return this.invokeMethod(\""CreateLabel\"", params)\r\n            .then(function (r) { return extend(_this.labels.getByValue(name), r); });\r\n    };\r\n    /**\r\n     * Sets the deprecation flag on a term\r\n     *\r\n     * @param doDeprecate New value for the deprecation flag\r\n     */\r\n    Term.prototype.deprecate = function (doDeprecate) {\r\n        var params = MethodParams.build().boolean(doDeprecate);\r\n        return this.invokeNonQuery(\""Deprecate\"", params);\r\n    };\r\n    /**\r\n     * Loads the term data\r\n     */\r\n    Term.prototype.get = function () {\r\n        return this.sendGet(Term);\r\n    };\r\n    /**\r\n     * Gets the appropriate description for a term\r\n     *\r\n     * @param lcid Language code\r\n     */\r\n    Term.prototype.getDescription = function (lcid) {\r\n        var params = MethodParams.build().number(lcid);\r\n        return this.invokeMethodAction(\""GetDescription\"", params);\r\n    };\r\n    /**\r\n     * Sets the description\r\n     *\r\n     * @param description Term description\r\n     * @param lcid Language code\r\n     */\r\n    Term.prototype.setDescription = function (description, lcid) {\r\n        var params = MethodParams.build().string(description).number(lcid);\r\n        return this.invokeNonQuery(\""SetDescription\"", params);\r\n    };\r\n    /**\r\n     * Sets a custom property on this term\r\n     *\r\n     * @param name Property name\r\n     * @param value Property value\r\n     */\r\n    Term.prototype.setLocalCustomProperty = function (name, value) {\r\n        var params = MethodParams.build().string(name).string(value);\r\n        return this.invokeNonQuery(\""SetLocalCustomProperty\"", params);\r\n    };\r\n    /**\r\n     * Updates the specified properties of this term, not all properties can be updated\r\n     *\r\n     * @param properties Plain object representing the properties and new values to update\r\n     */\r\n    Term.prototype.update = function (properties) {\r\n        return this.invokeUpdate(properties, Term);\r\n    };\r\n    return Term;\r\n}(ClientSvcQueryable));\r\nexport { Term };\r\n//# sourceMappingURL=terms.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, getGUID, sanitizeGuid, stringIsNullOrEmpty } from \""@pnp/common\"";\r\nimport { ClientSvcQueryable, MethodParams, setProperty } from \""@pnp/sp-clientsvc\"";\r\nimport { TermGroup } from \""./termgroup\"";\r\nimport { Term, Terms } from \""./terms\"";\r\nvar TermSets = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TermSets, _super);\r\n    function TermSets() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets the termsets in this collection\r\n     */\r\n    TermSets.prototype.get = function () {\r\n        var _this = this;\r\n        return this.sendGetCollection(function (d) {\r\n            if (!stringIsNullOrEmpty(d.Name)) {\r\n                return _this.getByName(d.Name);\r\n            }\r\n            else if (!stringIsNullOrEmpty(d.Id)) {\r\n                return _this.getById(d.Id);\r\n            }\r\n            throw Error(\""Could not find Value in Labels.get(). You must include at least one of these in your select fields.\"");\r\n        });\r\n    };\r\n    /**\r\n     * Gets a TermSet from this collection by id\r\n     *\r\n     * @param id TermSet id\r\n     */\r\n    TermSets.prototype.getById = function (id) {\r\n        var params = MethodParams.build()\r\n            .string(sanitizeGuid(id));\r\n        return this.getChild(TermSet, \""GetById\"", params);\r\n    };\r\n    /**\r\n     * Gets a TermSet from this collection by name\r\n     *\r\n     * @param name TermSet name\r\n     */\r\n    TermSets.prototype.getByName = function (name) {\r\n        var params = MethodParams.build()\r\n            .string(name);\r\n        return this.getChild(TermSet, \""GetByName\"", params);\r\n    };\r\n    return TermSets;\r\n}(ClientSvcQueryable));\r\nexport { TermSets };\r\nvar TermSet = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TermSet, _super);\r\n    function TermSet() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(TermSet.prototype, \""group\"", {\r\n        /**\r\n         * Gets the group containing this Term set\r\n         */\r\n        get: function () {\r\n            return this.getChildProperty(TermGroup, \""Group\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(TermSet.prototype, \""terms\"", {\r\n        /**\r\n         * Access all the terms in this termset\r\n         */\r\n        get: function () {\r\n            return this.getChild(Terms, \""GetAllTerms\"", null);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds a stakeholder to the TermSet\r\n     *\r\n     * @param stakeholderName The login name of the user to be added as a stakeholder\r\n     */\r\n    TermSet.prototype.addStakeholder = function (stakeholderName) {\r\n        var params = MethodParams.build()\r\n            .string(stakeholderName);\r\n        return this.invokeNonQuery(\""DeleteStakeholder\"", params);\r\n    };\r\n    /**\r\n     * Deletes a stakeholder to the TermSet\r\n     *\r\n     * @param stakeholderName The login name of the user to be added as a stakeholder\r\n     */\r\n    TermSet.prototype.deleteStakeholder = function (stakeholderName) {\r\n        var params = MethodParams.build()\r\n            .string(stakeholderName);\r\n        return this.invokeNonQuery(\""AddStakeholder\"", params);\r\n    };\r\n    /**\r\n     * Gets the data for this TermSet\r\n     */\r\n    TermSet.prototype.get = function () {\r\n        return this.sendGet(TermSet);\r\n    };\r\n    /**\r\n     * Get a term by id\r\n     *\r\n     * @param id Term id\r\n     */\r\n    TermSet.prototype.getTermById = function (id) {\r\n        var params = MethodParams.build()\r\n            .string(sanitizeGuid(id));\r\n        return this.getChild(Term, \""GetTerm\"", params);\r\n    };\r\n    /**\r\n     * Adds a term to this term set\r\n     *\r\n     * @param name Name for the term\r\n     * @param lcid Language code\r\n     * @param isAvailableForTagging set tagging availability (default: true)\r\n     * @param id GUID id for the term (optional)\r\n     */\r\n    TermSet.prototype.addTerm = function (name, lcid, isAvailableForTagging, id) {\r\n        var _this = this;\r\n        if (isAvailableForTagging === void 0) { isAvailableForTagging = true; }\r\n        if (id === void 0) { id = getGUID(); }\r\n        var params = MethodParams.build()\r\n            .string(name)\r\n            .number(lcid)\r\n            .string(sanitizeGuid(id));\r\n        this._useCaching = false;\r\n        return this.invokeMethod(\""CreateTerm\"", params, setProperty(\""IsAvailableForTagging\"", \""Boolean\"", \""\"" + isAvailableForTagging))\r\n            .then(function (r) { return extend(_this.getTermById(r.Id), r); });\r\n    };\r\n    /**\r\n     * Copies this term set immediately\r\n     */\r\n    TermSet.prototype.copy = function () {\r\n        return this.invokeMethod(\""Copy\"", null);\r\n    };\r\n    /**\r\n     * Updates the specified properties of this term set, not all properties can be updated\r\n     *\r\n     * @param properties Plain object representing the properties and new values to update\r\n     */\r\n    TermSet.prototype.update = function (properties) {\r\n        return this.invokeUpdate(properties, TermSet);\r\n    };\r\n    return TermSet;\r\n}(ClientSvcQueryable));\r\nexport { TermSet };\r\n//# sourceMappingURL=termsets.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, getGUID, sanitizeGuid, stringIsNullOrEmpty } from \""@pnp/common\"";\r\nimport { ClientSvcQueryable, MethodParams, method, objConstructor, objectPath, objectProperties, opQuery, property } from \""@pnp/sp-clientsvc\"";\r\nimport { TermGroup } from \""./termgroup\"";\r\nimport { Term, Terms } from \""./terms\"";\r\nimport { TermSet, TermSets } from \""./termsets\"";\r\n/**\r\n * Represents the set of available term stores and the collection methods\r\n */\r\nvar TermStores = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TermStores, _super);\r\n    function TermStores(parent) {\r\n        if (parent === void 0) { parent = \""\""; }\r\n        var _this = _super.call(this, parent) || this;\r\n        _this._objectPaths.add(property(\""TermStores\"", \r\n        // actions\r\n        objectPath()));\r\n        return _this;\r\n    }\r\n    /**\r\n     * Gets the term stores\r\n     */\r\n    TermStores.prototype.get = function () {\r\n        var _this = this;\r\n        return this.sendGetCollection(function (d) {\r\n            if (!stringIsNullOrEmpty(d.Name)) {\r\n                return _this.getByName(d.Name);\r\n            }\r\n            else if (!stringIsNullOrEmpty(d.Id)) {\r\n                return _this.getById(d.Id);\r\n            }\r\n            throw Error(\""Could not find Name or Id in TermStores.get(). You must include at least one of these in your select fields.\"");\r\n        });\r\n    };\r\n    /**\r\n     * Returns the TermStore specified by its index name\r\n     *\r\n     * @param name The index name of the TermStore to be returned\r\n     */\r\n    TermStores.prototype.getByName = function (name) {\r\n        return this.getChild(TermStore, \""GetByName\"", MethodParams.build().string(name));\r\n    };\r\n    /**\r\n     * Returns the TermStore specified by its GUID index\r\n     *\r\n     * @param id The GUID index of the TermStore to be returned\r\n     */\r\n    TermStores.prototype.getById = function (id) {\r\n        return this.getChild(TermStore, \""GetById\"", MethodParams.build().string(sanitizeGuid(id)));\r\n    };\r\n    return TermStores;\r\n}(ClientSvcQueryable));\r\nexport { TermStores };\r\nvar TermStore = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TermStore, _super);\r\n    function TermStore(parent, _objectPaths) {\r\n        if (parent === void 0) { parent = \""\""; }\r\n        if (_objectPaths === void 0) { _objectPaths = null; }\r\n        return _super.call(this, parent, _objectPaths) || this;\r\n    }\r\n    Object.defineProperty(TermStore.prototype, \""hashTagsTermSet\"", {\r\n        get: function () {\r\n            return this.getChildProperty(TermSet, \""HashTagsTermSet\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(TermStore.prototype, \""keywordsTermSet\"", {\r\n        get: function () {\r\n            return this.getChildProperty(TermSet, \""KeywordsTermSet\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(TermStore.prototype, \""orphanedTermsTermSet\"", {\r\n        get: function () {\r\n            return this.getChildProperty(TermSet, \""OrphanedTermsTermSet\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(TermStore.prototype, \""systemGroup\"", {\r\n        get: function () {\r\n            return this.getChildProperty(TermGroup, \""SystemGroup\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the term store data\r\n     */\r\n    TermStore.prototype.get = function () {\r\n        return this.sendGet(TermStore);\r\n    };\r\n    /**\r\n     * Gets term sets\r\n     *\r\n     * @param name\r\n     * @param lcid\r\n     */\r\n    TermStore.prototype.getTermSetsByName = function (name, lcid) {\r\n        var params = MethodParams.build()\r\n            .string(name)\r\n            .number(lcid);\r\n        return this.getChild(TermSets, \""GetTermSetsByName\"", params);\r\n    };\r\n    /**\r\n     * Provides access to an ITermSet by id\r\n     *\r\n     * @param id\r\n     */\r\n    TermStore.prototype.getTermSetById = function (id) {\r\n        var params = MethodParams.build().string(sanitizeGuid(id));\r\n        return this.getChild(TermSet, \""GetTermSet\"", params);\r\n    };\r\n    /**\r\n     * Provides access to an ITermSet by id\r\n     *\r\n     * @param id\r\n     */\r\n    TermStore.prototype.getTermById = function (id) {\r\n        var params = MethodParams.build().string(sanitizeGuid(id));\r\n        return this.getChild(Term, \""GetTerm\"", params);\r\n    };\r\n    /**\r\n     * Gets a term from a term set based on the supplied ids\r\n     *\r\n     * @param termId Term Id\r\n     * @param termSetId Termset Id\r\n     */\r\n    TermStore.prototype.getTermInTermSet = function (termId, termSetId) {\r\n        var params = MethodParams.build().string(sanitizeGuid(termId)).string(sanitizeGuid(termSetId));\r\n        return this.getChild(Term, \""GetTermInTermSet\"", params);\r\n    };\r\n    /**\r\n     * This method provides access to a ITermGroup by id\r\n     *\r\n     * @param id The group id\r\n     */\r\n    TermStore.prototype.getTermGroupById = function (id) {\r\n        var params = MethodParams.build()\r\n            .string(sanitizeGuid(id));\r\n        return this.getChild(TermGroup, \""GetGroup\"", params);\r\n    };\r\n    /**\r\n     * Gets the terms by the supplied information (see: https://msdn.microsoft.com/en-us/library/hh626704%28v=office.12%29.aspx)\r\n     *\r\n     * @param info\r\n     */\r\n    TermStore.prototype.getTerms = function (info) {\r\n        var objectPaths = this._objectPaths.clone();\r\n        // this will be the parent of the GetTerms call, but we need to create the input param first\r\n        var parentIndex = objectPaths.lastIndex;\r\n        // this is our input object\r\n        var input = objConstructor.apply(void 0, [\""{61a1d689-2744-4ea3-a88b-c95bee9803aa}\"",\r\n            // actions\r\n            objectPath()].concat(objectProperties(info)));\r\n        // add the input object path\r\n        var inputIndex = objectPaths.add(input);\r\n        // this sets up the GetTerms call\r\n        var params = MethodParams.build().objectPath(inputIndex);\r\n        // call the method\r\n        var methodIndex = objectPaths.add(method(\""GetTerms\"", params, \r\n        // actions\r\n        objectPath()));\r\n        // setup the parent relationship even though they are seperated in the collection\r\n        objectPaths.addChildRelationship(parentIndex, methodIndex);\r\n        return new Terms(this, objectPaths);\r\n    };\r\n    /**\r\n     * Gets the site collection group associated with the current site\r\n     *\r\n     * @param createIfMissing If true the group will be created, otherwise null (default: false)\r\n     */\r\n    TermStore.prototype.getSiteCollectionGroup = function (createIfMissing) {\r\n        if (createIfMissing === void 0) { createIfMissing = false; }\r\n        var objectPaths = this._objectPaths.clone();\r\n        var methodParent = objectPaths.lastIndex;\r\n        var siteIndex = objectPaths.siteIndex;\r\n        var params = MethodParams.build().objectPath(siteIndex).boolean(createIfMissing);\r\n        var methodIndex = objectPaths.add(method(\""GetSiteCollectionGroup\"", params, \r\n        // actions\r\n        objectPath()));\r\n        // the parent of this method call is this instance, not the current/site\r\n        objectPaths.addChildRelationship(methodParent, methodIndex);\r\n        return new TermGroup(this, objectPaths);\r\n    };\r\n    /**\r\n     * Adds a working language to the TermStore\r\n     *\r\n     * @param lcid The locale identifier of the working language to add\r\n     */\r\n    TermStore.prototype.addLanguage = function (lcid) {\r\n        var params = MethodParams.build().number(lcid);\r\n        return this.invokeNonQuery(\""AddLanguage\"", params);\r\n    };\r\n    /**\r\n     * Creates a new Group in this TermStore\r\n     *\r\n     * @param name The name of the new Group being created\r\n     * @param id The ID (Guid) that the new group should have\r\n     */\r\n    TermStore.prototype.addGroup = function (name, id) {\r\n        var _this = this;\r\n        if (id === void 0) { id = getGUID(); }\r\n        var params = MethodParams.build()\r\n            .string(name)\r\n            .string(sanitizeGuid(id));\r\n        this._useCaching = false;\r\n        return this.invokeMethod(\""CreateGroup\"", params)\r\n            .then(function (r) { return extend(_this.getTermGroupById(r.Id), r); });\r\n    };\r\n    /**\r\n     * Commits all updates to the database that have occurred since the last commit or rollback\r\n     */\r\n    TermStore.prototype.commitAll = function () {\r\n        return this.invokeNonQuery(\""CommitAll\"");\r\n    };\r\n    /**\r\n     * Delete a working language from the TermStore\r\n     *\r\n     * @param lcid locale ID for the language to be deleted\r\n     */\r\n    TermStore.prototype.deleteLanguage = function (lcid) {\r\n        var params = MethodParams.build().number(lcid);\r\n        return this.invokeNonQuery(\""DeleteLanguage\"", params);\r\n    };\r\n    /**\r\n     * Discards all updates that have occurred since the last commit or rollback\r\n     */\r\n    TermStore.prototype.rollbackAll = function () {\r\n        return this.invokeNonQuery(\""RollbackAll\"");\r\n    };\r\n    /**\r\n     * Updates the cache\r\n     */\r\n    TermStore.prototype.updateCache = function () {\r\n        return this.invokeNonQuery(\""UpdateCache\"");\r\n    };\r\n    /**\r\n     * Updates the specified properties of this term set, not all properties can be updated\r\n     *\r\n     * @param properties Plain object representing the properties and new values to update\r\n     */\r\n    TermStore.prototype.update = function (properties) {\r\n        return this.invokeUpdate(properties, TermStore);\r\n    };\r\n    /**\r\n     * This method makes sure that this instance is aware of all child terms that are used in the current site collection\r\n     */\r\n    TermStore.prototype.updateUsedTermsOnSite = function () {\r\n        var objectPaths = this._objectPaths.clone();\r\n        var methodParent = objectPaths.lastIndex;\r\n        var siteIndex = objectPaths.siteIndex;\r\n        var params = MethodParams.build().objectPath(siteIndex);\r\n        var methodIndex = objectPaths.add(method(\""UpdateUsedTermsOnSite\"", params));\r\n        // the parent of this method call is this instance, not the current context/site\r\n        objectPaths.addChildRelationship(methodParent, methodIndex);\r\n        return this.send(objectPaths);\r\n    };\r\n    /**\r\n     * Gets a list of changes\r\n     *\r\n     * @param info Lookup information\r\n     */\r\n    TermStore.prototype.getChanges = function (info) {\r\n        var objectPaths = this._objectPaths.clone();\r\n        var methodParent = objectPaths.lastIndex;\r\n        var inputIndex = objectPaths.add(objConstructor.apply(void 0, [\""{1f849fb0-4fcb-4a54-9b01-9152b9e482d3}\"",\r\n            // actions\r\n            objectPath()].concat(objectProperties(info))));\r\n        var params = MethodParams.build().objectPath(inputIndex);\r\n        var methodIndex = objectPaths.add(method(\""GetChanges\"", params, \r\n        // actions\r\n        objectPath(), opQuery([], this.getSelects())));\r\n        objectPaths.addChildRelationship(methodParent, methodIndex);\r\n        return this.send(objectPaths);\r\n    };\r\n    return TermStore;\r\n}(ClientSvcQueryable));\r\nexport { TermStore };\r\n//# sourceMappingURL=termstores.js.map"",""export var StringMatchOption;\r\n(function (StringMatchOption) {\r\n    StringMatchOption[StringMatchOption[\""StartsWith\""] = 0] = \""StartsWith\"";\r\n    StringMatchOption[StringMatchOption[\""ExactMatch\""] = 1] = \""ExactMatch\"";\r\n})(StringMatchOption || (StringMatchOption = {}));\r\nexport var ChangedItemType;\r\n(function (ChangedItemType) {\r\n    ChangedItemType[ChangedItemType[\""Unknown\""] = 0] = \""Unknown\"";\r\n    ChangedItemType[ChangedItemType[\""Term\""] = 1] = \""Term\"";\r\n    ChangedItemType[ChangedItemType[\""TermSet\""] = 2] = \""TermSet\"";\r\n    ChangedItemType[ChangedItemType[\""Group\""] = 3] = \""Group\"";\r\n    ChangedItemType[ChangedItemType[\""TermStore\""] = 4] = \""TermStore\"";\r\n    ChangedItemType[ChangedItemType[\""Site\""] = 5] = \""Site\"";\r\n})(ChangedItemType || (ChangedItemType = {}));\r\nexport var ChangedOperationType;\r\n(function (ChangedOperationType) {\r\n    ChangedOperationType[ChangedOperationType[\""Unknown\""] = 0] = \""Unknown\"";\r\n    ChangedOperationType[ChangedOperationType[\""Add\""] = 1] = \""Add\"";\r\n    ChangedOperationType[ChangedOperationType[\""Edit\""] = 2] = \""Edit\"";\r\n    ChangedOperationType[ChangedOperationType[\""DeleteObject\""] = 3] = \""DeleteObject\"";\r\n    ChangedOperationType[ChangedOperationType[\""Move\""] = 4] = \""Move\"";\r\n    ChangedOperationType[ChangedOperationType[\""Copy\""] = 5] = \""Copy\"";\r\n    ChangedOperationType[ChangedOperationType[\""PathChange\""] = 6] = \""PathChange\"";\r\n    ChangedOperationType[ChangedOperationType[\""Merge\""] = 7] = \""Merge\"";\r\n    ChangedOperationType[ChangedOperationType[\""ImportObject\""] = 8] = \""ImportObject\"";\r\n    ChangedOperationType[ChangedOperationType[\""Restore\""] = 9] = \""Restore\"";\r\n})(ChangedOperationType || (ChangedOperationType = {}));\r\n//# sourceMappingURL=types.js.map"",""export * from \""./src/sp\"";\r\n//# sourceMappingURL=index.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection } from \""./sharepointqueryable\"";\r\nimport { File } from \""./files\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\n/**\r\n * Represents an app catalog\r\n */\r\nvar AppCatalog = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AppCatalog, _super);\r\n    function AppCatalog(baseUrl, path) {\r\n        if (path === void 0) { path = \""_api/web/tenantappcatalog/AvailableApps\""; }\r\n        return _super.call(this, extractWebUrl(typeof baseUrl === \""string\"" ? baseUrl : baseUrl.toUrl()), path) || this;\r\n    }\r\n    /**\r\n     * Get details of specific app from the app catalog\r\n     * @param id - Specify the guid of the app\r\n     */\r\n    AppCatalog.prototype.getAppById = function (id) {\r\n        return new App(this, \""getById('\"" + id + \""')\"");\r\n    };\r\n    /**\r\n     * Uploads an app package. Not supported for batching\r\n     *\r\n     * @param filename Filename to create.\r\n     * @param content app package data (eg: the .app or .sppkg file).\r\n     * @param shouldOverWrite Should an app with the same name in the same location be overwritten? (default: true)\r\n     * @returns Promise<AppAddResult>\r\n     */\r\n    AppCatalog.prototype.add = function (filename, content, shouldOverWrite) {\r\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\r\n        // you don't add to the availableapps collection\r\n        var adder = new AppCatalog(extractWebUrl(this.toUrl()), \""_api/web/tenantappcatalog/add(overwrite=\"" + shouldOverWrite + \"",url='\"" + filename + \""')\"");\r\n        return adder.postCore({\r\n            body: content,\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                file: new File(odataUrlFrom(r)),\r\n            };\r\n        });\r\n    };\r\n    return AppCatalog;\r\n}(SharePointQueryableCollection));\r\nexport { AppCatalog };\r\n/**\r\n * Represents the actions you can preform on a given app within the catalog\r\n */\r\nvar App = /** @class */ (function (_super) {\r\n    tslib_1.__extends(App, _super);\r\n    function App() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * This method deploys an app on the app catalog.  It must be called in the context\r\n     * of the tenant app catalog web or it will fail.\r\n     *\r\n     * @param skipFeatureDeployment Deploy the app to the entire tenant\r\n     */\r\n    App.prototype.deploy = function (skipFeatureDeployment) {\r\n        if (skipFeatureDeployment === void 0) { skipFeatureDeployment = false; }\r\n        return this.clone(App, \""Deploy(\"" + skipFeatureDeployment + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * This method retracts a deployed app on the app catalog.  It must be called in the context\r\n     * of the tenant app catalog web or it will fail.\r\n     */\r\n    App.prototype.retract = function () {\r\n        return this.clone(App, \""Retract\"").postCore();\r\n    };\r\n    /**\r\n     * This method allows an app which is already deployed to be installed on a web\r\n     */\r\n    App.prototype.install = function () {\r\n        return this.clone(App, \""Install\"").postCore();\r\n    };\r\n    /**\r\n     * This method allows an app which is already insatlled to be uninstalled on a web\r\n     */\r\n    App.prototype.uninstall = function () {\r\n        return this.clone(App, \""Uninstall\"").postCore();\r\n    };\r\n    /**\r\n     * This method allows an app which is already insatlled to be upgraded on a web\r\n     */\r\n    App.prototype.upgrade = function () {\r\n        return this.clone(App, \""Upgrade\"").postCore();\r\n    };\r\n    /**\r\n     * This method removes an app from the app catalog.  It must be called in the context\r\n     * of the tenant app catalog web or it will fail.\r\n     */\r\n    App.prototype.remove = function () {\r\n        return this.clone(App, \""Remove\"").postCore();\r\n    };\r\n    return App;\r\n}(SharePointQueryableInstance));\r\nexport { App };\r\n//# sourceMappingURL=appcatalog.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { TextParser, BlobParser, JSONParser, BufferParser } from \""@pnp/odata\"";\r\n/**\r\n * Describes a collection of Item objects\r\n *\r\n */\r\nvar AttachmentFiles = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AttachmentFiles, _super);\r\n    function AttachmentFiles() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    AttachmentFiles_1 = AttachmentFiles;\r\n    /**\r\n     * Gets a Attachment File by filename\r\n     *\r\n     * @param name The name of the file, including extension.\r\n     */\r\n    AttachmentFiles.prototype.getByName = function (name) {\r\n        var f = new AttachmentFile(this);\r\n        f.concat(\""('\"" + name + \""')\"");\r\n        return f;\r\n    };\r\n    /**\r\n     * Adds a new attachment to the collection. Not supported for batching.\r\n     *\r\n     * @param name The name of the file, including extension.\r\n     * @param content The Base64 file content.\r\n     */\r\n    AttachmentFiles.prototype.add = function (name, content) {\r\n        var _this = this;\r\n        return this.clone(AttachmentFiles_1, \""add(FileName='\"" + name + \""')\"", false).postCore({\r\n            body: content,\r\n        }).then(function (response) {\r\n            return {\r\n                data: response,\r\n                file: _this.getByName(name),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds multiple new attachment to the collection. Not supported for batching.\r\n     *\r\n     * @param files The collection of files to add\r\n     */\r\n    AttachmentFiles.prototype.addMultiple = function (files) {\r\n        var _this = this;\r\n        // add the files in series so we don't get update conflicts\r\n        return files.reduce(function (chain, file) { return chain.then(function () { return _this.clone(AttachmentFiles_1, \""add(FileName='\"" + file.name + \""')\"", false).postCore({\r\n            body: file.content,\r\n        }); }); }, Promise.resolve());\r\n    };\r\n    /**\r\n     * Delete multiple attachments from the collection. Not supported for batching.\r\n     *\r\n     * @param files The collection of files to delete\r\n     */\r\n    AttachmentFiles.prototype.deleteMultiple = function () {\r\n        var _this = this;\r\n        var files = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            files[_i] = arguments[_i];\r\n        }\r\n        return files.reduce(function (chain, file) { return chain.then(function () { return _this.getByName(file).delete(); }); }, Promise.resolve());\r\n    };\r\n    /**\r\n     * Delete multiple attachments from the collection and send to recycle bin. Not supported for batching.\r\n     *\r\n     * @param files The collection of files to be deleted and sent to recycle bin\r\n     */\r\n    AttachmentFiles.prototype.recycleMultiple = function () {\r\n        var _this = this;\r\n        var files = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            files[_i] = arguments[_i];\r\n        }\r\n        return files.reduce(function (chain, file) { return chain.then(function () { return _this.getByName(file).recycle(); }); }, Promise.resolve());\r\n    };\r\n    var AttachmentFiles_1;\r\n    AttachmentFiles = AttachmentFiles_1 = tslib_1.__decorate([\r\n        defaultPath(\""AttachmentFiles\"")\r\n    ], AttachmentFiles);\r\n    return AttachmentFiles;\r\n}(SharePointQueryableCollection));\r\nexport { AttachmentFiles };\r\n/**\r\n * Describes a single attachment file instance\r\n *\r\n */\r\nvar AttachmentFile = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AttachmentFile, _super);\r\n    function AttachmentFile() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.delete = _this._deleteWithETag;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Gets the contents of the file as text\r\n     *\r\n     */\r\n    AttachmentFile.prototype.getText = function () {\r\n        return this.getParsed(new TextParser());\r\n    };\r\n    /**\r\n     * Gets the contents of the file as a blob, does not work in Node.js\r\n     *\r\n     */\r\n    AttachmentFile.prototype.getBlob = function () {\r\n        return this.getParsed(new BlobParser());\r\n    };\r\n    /**\r\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js\r\n     */\r\n    AttachmentFile.prototype.getBuffer = function () {\r\n        return this.getParsed(new BufferParser());\r\n    };\r\n    /**\r\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js\r\n     */\r\n    AttachmentFile.prototype.getJSON = function () {\r\n        return this.getParsed(new JSONParser());\r\n    };\r\n    /**\r\n     * Sets the content of a file. Not supported for batching\r\n     *\r\n     * @param content The value to set for the file contents\r\n     */\r\n    AttachmentFile.prototype.setContent = function (content) {\r\n        var _this = this;\r\n        return this.clone(AttachmentFile, \""$value\"", false).postCore({\r\n            body: content,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""PUT\"",\r\n            },\r\n        }).then(function (_) { return new AttachmentFile(_this); });\r\n    };\r\n    /**\r\n     * Delete this attachment file and send it to recycle bin\r\n     *\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    AttachmentFile.prototype.recycle = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.clone(AttachmentFile, \""recycleObject\"").postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    // /**\r\n    //  * Delete this attachment file\r\n    //  *\r\n    //  * @param eTag Value used in the IF-Match header, by default \""*\""\r\n    //  */\r\n    // public delete(eTag = \""*\""): Promise<void> {\r\n    //     return this.postCore({\r\n    //         headers: {\r\n    //             \""IF-Match\"": eTag,\r\n    //             \""X-HTTP-Method\"": \""DELETE\"",\r\n    //         },\r\n    //     });\r\n    // }\r\n    AttachmentFile.prototype.getParsed = function (parser) {\r\n        return this.clone(AttachmentFile, \""$value\"", false).get(parser);\r\n    };\r\n    return AttachmentFile;\r\n}(SharePointQueryableInstance));\r\nexport { AttachmentFile };\r\n//# sourceMappingURL=attachmentfiles.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { ODataBatch } from \""@pnp/odata\"";\r\nimport { getGUID, isUrlAbsolute, combine, mergeHeaders, hOP } from \""@pnp/common\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { SPHttpClient } from \""./net/sphttpclient\"";\r\nimport { SPRuntimeConfig } from \""./config/splibconfig\"";\r\nimport { toAbsoluteUrl } from \""./utils/toabsoluteurl\"";\r\n/**\r\n * Manages a batch of OData operations\r\n */\r\nvar SPBatch = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPBatch, _super);\r\n    function SPBatch(baseUrl) {\r\n        var _this = _super.call(this) || this;\r\n        _this.baseUrl = baseUrl;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Parses the response from a batch request into an array of Response instances\r\n     *\r\n     * @param body Text body of the response from the batch request\r\n     */\r\n    SPBatch.ParseResponse = function (body) {\r\n        return new Promise(function (resolve, reject) {\r\n            var responses = [];\r\n            var header = \""--batchresponse_\"";\r\n            // Ex. \""HTTP/1.1 500 Internal Server Error\""\r\n            var statusRegExp = new RegExp(\""^HTTP/[0-9.]+ +([0-9]+) +(.*)\"", \""i\"");\r\n            var lines = body.split(\""\\n\"");\r\n            var state = \""batch\"";\r\n            var status;\r\n            var statusText;\r\n            for (var i = 0; i < lines.length; ++i) {\r\n                var line = lines[i];\r\n                switch (state) {\r\n                    case \""batch\"":\r\n                        if (line.substr(0, header.length) === header) {\r\n                            state = \""batchHeaders\"";\r\n                        }\r\n                        else {\r\n                            if (line.trim() !== \""\"") {\r\n                                throw Error(\""Invalid response, line \"" + i);\r\n                            }\r\n                        }\r\n                        break;\r\n                    case \""batchHeaders\"":\r\n                        if (line.trim() === \""\"") {\r\n                            state = \""status\"";\r\n                        }\r\n                        break;\r\n                    case \""status\"":\r\n                        var parts = statusRegExp.exec(line);\r\n                        if (parts.length !== 3) {\r\n                            throw Error(\""Invalid status, line \"" + i);\r\n                        }\r\n                        status = parseInt(parts[1], 10);\r\n                        statusText = parts[2];\r\n                        state = \""statusHeaders\"";\r\n                        break;\r\n                    case \""statusHeaders\"":\r\n                        if (line.trim() === \""\"") {\r\n                            state = \""body\"";\r\n                        }\r\n                        break;\r\n                    case \""body\"":\r\n                        responses.push((status === 204) ? new Response() : new Response(line, { status: status, statusText: statusText }));\r\n                        state = \""batch\"";\r\n                        break;\r\n                }\r\n            }\r\n            if (state !== \""status\"") {\r\n                reject(Error(\""Unexpected end of input\""));\r\n            }\r\n            resolve(responses);\r\n        });\r\n    };\r\n    SPBatch.prototype.executeImpl = function () {\r\n        var _this = this;\r\n        Logger.write(\""[\"" + this.batchId + \""] (\"" + (new Date()).getTime() + \"") Executing batch with \"" + this.requests.length + \"" requests.\"", 1 /* Info */);\r\n        // if we don't have any requests, don't bother sending anything\r\n        // this could be due to caching further upstream, or just an empty batch\r\n        if (this.requests.length < 1) {\r\n            Logger.write(\""Resolving empty batch.\"", 1 /* Info */);\r\n            return Promise.resolve();\r\n        }\r\n        // creating the client here allows the url to be populated for nodejs client as well as potentially\r\n        // any other hacks needed for other types of clients. Essentially allows the absoluteRequestUrl\r\n        // below to be correct\r\n        var client = new SPHttpClient();\r\n        // due to timing we need to get the absolute url here so we can use it for all the individual requests\r\n        // and for sending the entire batch\r\n        return toAbsoluteUrl(this.baseUrl).then(function (absoluteRequestUrl) {\r\n            // build all the requests, send them, pipe results in order to parsers\r\n            var batchBody = [];\r\n            var currentChangeSetId = \""\"";\r\n            for (var i = 0; i < _this.requests.length; i++) {\r\n                var reqInfo = _this.requests[i];\r\n                if (reqInfo.method === \""GET\"") {\r\n                    if (currentChangeSetId.length > 0) {\r\n                        // end an existing change set\r\n                        batchBody.push(\""--changeset_\"" + currentChangeSetId + \""--\\n\\n\"");\r\n                        currentChangeSetId = \""\"";\r\n                    }\r\n                    batchBody.push(\""--batch_\"" + _this.batchId + \""\\n\"");\r\n                }\r\n                else {\r\n                    if (currentChangeSetId.length < 1) {\r\n                        // start new change set\r\n                        currentChangeSetId = getGUID();\r\n                        batchBody.push(\""--batch_\"" + _this.batchId + \""\\n\"");\r\n                        batchBody.push(\""Content-Type: multipart/mixed; boundary=\\\""changeset_\"" + currentChangeSetId + \""\\\""\\n\\n\"");\r\n                    }\r\n                    batchBody.push(\""--changeset_\"" + currentChangeSetId + \""\\n\"");\r\n                }\r\n                // common batch part prefix\r\n                batchBody.push(\""Content-Type: application/http\\n\"");\r\n                batchBody.push(\""Content-Transfer-Encoding: binary\\n\\n\"");\r\n                var headers = new Headers();\r\n                // this is the url of the individual request within the batch\r\n                var url = isUrlAbsolute(reqInfo.url) ? reqInfo.url : combine(absoluteRequestUrl, reqInfo.url);\r\n                Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Adding request \"" + reqInfo.method + \"" \"" + url + \"" to batch.\"", 0 /* Verbose */);\r\n                if (reqInfo.method !== \""GET\"") {\r\n                    var method = reqInfo.method;\r\n                    var castHeaders = reqInfo.options.headers;\r\n                    if (hOP(reqInfo, \""options\"") && hOP(reqInfo.options, \""headers\"") && castHeaders[\""X-HTTP-Method\""] !== undefined) {\r\n                        method = castHeaders[\""X-HTTP-Method\""];\r\n                        delete castHeaders[\""X-HTTP-Method\""];\r\n                    }\r\n                    batchBody.push(method + \"" \"" + url + \"" HTTP/1.1\\n\"");\r\n                    headers.set(\""Content-Type\"", \""application/json;odata=verbose;charset=utf-8\"");\r\n                }\r\n                else {\r\n                    batchBody.push(reqInfo.method + \"" \"" + url + \"" HTTP/1.1\\n\"");\r\n                }\r\n                // merge global config headers\r\n                mergeHeaders(headers, SPRuntimeConfig.headers);\r\n                // merge per-request headers\r\n                if (reqInfo.options) {\r\n                    mergeHeaders(headers, reqInfo.options.headers);\r\n                }\r\n                // lastly we apply any default headers we need that may not exist\r\n                if (!headers.has(\""Accept\"")) {\r\n                    headers.append(\""Accept\"", \""application/json\"");\r\n                }\r\n                if (!headers.has(\""Content-Type\"")) {\r\n                    headers.append(\""Content-Type\"", \""application/json;odata=verbose;charset=utf-8\"");\r\n                }\r\n                if (!headers.has(\""X-ClientService-ClientTag\"")) {\r\n                    headers.append(\""X-ClientService-ClientTag\"", \""PnPCoreJS:@pnp-1.2.4\"");\r\n                }\r\n                // write headers into batch body\r\n                headers.forEach(function (value, name) {\r\n                    batchBody.push(name + \"": \"" + value + \""\\n\"");\r\n                });\r\n                batchBody.push(\""\\n\"");\r\n                if (reqInfo.options.body) {\r\n                    batchBody.push(reqInfo.options.body + \""\\n\\n\"");\r\n                }\r\n            }\r\n            if (currentChangeSetId.length > 0) {\r\n                // Close the changeset\r\n                batchBody.push(\""--changeset_\"" + currentChangeSetId + \""--\\n\\n\"");\r\n                currentChangeSetId = \""\"";\r\n            }\r\n            batchBody.push(\""--batch_\"" + _this.batchId + \""--\\n\"");\r\n            var batchOptions = {\r\n                \""body\"": batchBody.join(\""\""),\r\n                \""headers\"": {\r\n                    \""Content-Type\"": \""multipart/mixed; boundary=batch_\"" + _this.batchId,\r\n                },\r\n                \""method\"": \""POST\"",\r\n            };\r\n            Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Sending batch request.\"", 1 /* Info */);\r\n            return client.fetch(combine(absoluteRequestUrl, \""/_api/$batch\""), batchOptions)\r\n                .then(function (r) { return r.text(); })\r\n                .then(SPBatch.ParseResponse)\r\n                .then(function (responses) {\r\n                if (responses.length !== _this.requests.length) {\r\n                    throw Error(\""Could not properly parse responses to match requests in batch.\"");\r\n                }\r\n                Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Resolving batched requests.\"", 1 /* Info */);\r\n                return responses.reduce(function (chain, response, index) {\r\n                    var request = _this.requests[index];\r\n                    Logger.write(\""[\"" + request.id + \""] (\"" + (new Date()).getTime() + \"") Resolving request in batch \"" + _this.batchId + \"".\"", 1 /* Info */);\r\n                    return chain.then(function (_) { return request.parser.parse(response).then(request.resolve).catch(request.reject); });\r\n                }, Promise.resolve());\r\n            });\r\n        });\r\n    };\r\n    return SPBatch;\r\n}(ODataBatch));\r\nexport { SPBatch };\r\n//# sourceMappingURL=batch.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { TemplateFileType, File } from \""./files\"";\r\nimport { Item } from \""./items\"";\r\nimport { extend, combine, getGUID, getAttrValueFromString, jsS, hOP } from \""@pnp/common\"";\r\n/**\r\n * Page promotion state\r\n */\r\nexport var PromotedState;\r\n(function (PromotedState) {\r\n    /**\r\n     * Regular client side page\r\n     */\r\n    PromotedState[PromotedState[\""NotPromoted\""] = 0] = \""NotPromoted\"";\r\n    /**\r\n     * Page that will be promoted as news article after publishing\r\n     */\r\n    PromotedState[PromotedState[\""PromoteOnPublish\""] = 1] = \""PromoteOnPublish\"";\r\n    /**\r\n     * Page that is promoted as news article\r\n     */\r\n    PromotedState[PromotedState[\""Promoted\""] = 2] = \""Promoted\"";\r\n})(PromotedState || (PromotedState = {}));\r\n/**\r\n * Gets the next order value 1 based for the provided collection\r\n *\r\n * @param collection Collection of orderable things\r\n */\r\nfunction getNextOrder(collection) {\r\n    if (collection.length < 1) {\r\n        return 1;\r\n    }\r\n    return Math.max.apply(null, collection.map(function (i) { return i.order; })) + 1;\r\n}\r\n/**\r\n * After https://stackoverflow.com/questions/273789/is-there-a-version-of-javascripts-string-indexof-that-allows-for-regular-expr/274094#274094\r\n *\r\n * @param this Types the called context this to a string in which the search will be conducted\r\n * @param regex A regex or string to match\r\n * @param startpos A starting position from which the search will begin\r\n */\r\nfunction regexIndexOf(regex, startpos) {\r\n    if (startpos === void 0) { startpos = 0; }\r\n    var indexOf = this.substring(startpos).search(regex);\r\n    return (indexOf >= 0) ? (indexOf + (startpos)) : indexOf;\r\n}\r\n/**\r\n * Finds bounded blocks of markup bounded by divs, ensuring to match the ending div even with nested divs in the interstitial markup\r\n *\r\n * @param html HTML to search\r\n * @param boundaryStartPattern The starting pattern to find, typically a div with attribute\r\n * @param collector A func to take the found block and provide a way to form it into a useful return that is added into the return array\r\n */\r\nfunction getBoundedDivMarkup(html, boundaryStartPattern, collector) {\r\n    var blocks = [];\r\n    if (html === undefined || html === null) {\r\n        return blocks;\r\n    }\r\n    // remove some extra whitespace if present\r\n    var cleanedHtml = html.replace(/[\\t\\r\\n]/g, \""\"");\r\n    // find the first div\r\n    var startIndex = regexIndexOf.call(cleanedHtml, boundaryStartPattern);\r\n    if (startIndex < 0) {\r\n        // we found no blocks in the supplied html\r\n        return blocks;\r\n    }\r\n    // this loop finds each of the blocks\r\n    while (startIndex > -1) {\r\n        // we have one open div counting from the one found above using boundaryStartPattern so we need to ensure we find it's close\r\n        var openCounter = 1;\r\n        var searchIndex = startIndex + 1;\r\n        var nextDivOpen = -1;\r\n        var nextCloseDiv = -1;\r\n        // this loop finds the </div> tag that matches the opening of the control\r\n        while (true) {\r\n            // find both the next opening and closing div tags from our current searching index\r\n            nextDivOpen = regexIndexOf.call(cleanedHtml, /<div[^>]*>/i, searchIndex);\r\n            nextCloseDiv = regexIndexOf.call(cleanedHtml, /<\\/div>/i, searchIndex);\r\n            if (nextDivOpen < 0) {\r\n                // we have no more opening divs, just set this to simplify checks below\r\n                nextDivOpen = cleanedHtml.length + 1;\r\n            }\r\n            // determine which we found first, then increment or decrement our counter\r\n            // and set the location to begin searching again\r\n            if (nextDivOpen < nextCloseDiv) {\r\n                openCounter++;\r\n                searchIndex = nextDivOpen + 1;\r\n            }\r\n            else if (nextCloseDiv < nextDivOpen) {\r\n                openCounter--;\r\n                searchIndex = nextCloseDiv + 1;\r\n            }\r\n            // once we have no open divs back to the level of the opening control div\r\n            // meaning we have all of the markup we intended to find\r\n            if (openCounter === 0) {\r\n                // get the bounded markup, +6 is the size of the ending </div> tag\r\n                var markup = cleanedHtml.substring(startIndex, nextCloseDiv + 6).trim();\r\n                // save the control data we found to the array\r\n                blocks.push(collector(markup));\r\n                // get out of our while loop\r\n                break;\r\n            }\r\n            if (openCounter > 1000 || openCounter < 0) {\r\n                // this is an arbitrary cut-off but likely we will not have 1000 nested divs\r\n                // something has gone wrong above and we are probably stuck in our while loop\r\n                // let's get out of our while loop and not hang everything\r\n                throw Error(\""getBoundedDivMarkup exceeded depth parameters.\"");\r\n            }\r\n        }\r\n        // get the start of the next control\r\n        startIndex = regexIndexOf.call(cleanedHtml, boundaryStartPattern, nextCloseDiv);\r\n    }\r\n    return blocks;\r\n}\r\n/**\r\n * Normalizes the order value for all the sections, columns, and controls to be 1 based and stepped (1, 2, 3...)\r\n *\r\n * @param collection The collection to normalize\r\n */\r\nfunction reindex(collection) {\r\n    for (var i = 0; i < collection.length; i++) {\r\n        collection[i].order = i + 1;\r\n        if (hOP(collection[i], \""columns\"")) {\r\n            reindex(collection[i].columns);\r\n        }\r\n        else if (hOP(collection[i], \""controls\"")) {\r\n            reindex(collection[i].controls);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Represents the data and methods associated with client side \""modern\"" pages\r\n */\r\nvar ClientSidePage = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientSidePage, _super);\r\n    /**\r\n     * Creates a new instance of the ClientSidePage class\r\n     *\r\n     * @param baseUrl The url or SharePointQueryable which forms the parent of this web collection\r\n     * @param commentsDisabled Indicates if comments are disabled, not valid until load is called\r\n     */\r\n    function ClientSidePage(file, sections, commentsDisabled) {\r\n        if (sections === void 0) { sections = []; }\r\n        if (commentsDisabled === void 0) { commentsDisabled = false; }\r\n        var _this = _super.call(this, file) || this;\r\n        _this.sections = sections;\r\n        _this.commentsDisabled = commentsDisabled;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Creates a new blank page within the supplied library\r\n     *\r\n     * @param library The library in which to create the page\r\n     * @param pageName Filename of the page, such as \""page.aspx\""\r\n     * @param title The display title of the page\r\n     * @param pageLayoutType Layout type of the page to use\r\n     */\r\n    ClientSidePage.create = function (library, pageName, title, pageLayoutType) {\r\n        if (pageLayoutType === void 0) { pageLayoutType = \""Article\""; }\r\n        // see if file exists, if not create it\r\n        return library.rootFolder.files.select(\""Name\"").filter(\""Name eq '\"" + pageName + \""'\"").get().then(function (fs) {\r\n            if (fs.length > 0) {\r\n                throw Error(\""A file with the name '\"" + pageName + \""' already exists in the library '\"" + library.toUrl() + \""'.\"");\r\n            }\r\n            // get our server relative path\r\n            return library.rootFolder.select(\""ServerRelativePath\"").get().then(function (path) {\r\n                var pageServerRelPath = combine(\""/\"", path.ServerRelativePath.DecodedUrl, pageName);\r\n                // add the template file\r\n                return library.rootFolder.files.addTemplateFile(pageServerRelPath, TemplateFileType.ClientSidePage).then(function (far) {\r\n                    // get the item associated with the file\r\n                    return far.file.getItem().then(function (i) {\r\n                        // update the item to have the correct values to create the client side page\r\n                        return i.update({\r\n                            BannerImageUrl: {\r\n                                Url: \""/_layouts/15/images/sitepagethumbnail.png\"",\r\n                            },\r\n                            CanvasContent1: \""\"",\r\n                            ClientSideApplicationId: \""b6917cb1-93a0-4b97-a84d-7cf49975d4ec\"",\r\n                            ContentTypeId: \""0x0101009D1CB255DA76424F860D91F20E6C4118\"",\r\n                            PageLayoutType: pageLayoutType,\r\n                            PromotedState: 0 /* NotPromoted */,\r\n                            Title: title,\r\n                        }).then(function (iar) { return new ClientSidePage(iar.item.file, iar.item.CommentsDisabled); });\r\n                    });\r\n                });\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Creates a new ClientSidePage instance from the provided html content string\r\n     *\r\n     * @param html HTML markup representing the page\r\n     */\r\n    ClientSidePage.fromFile = function (file) {\r\n        var page = new ClientSidePage(file);\r\n        return page.load().then(function (_) { return page; });\r\n    };\r\n    /**\r\n     * Converts a json object to an escaped string appropriate for use in attributes when storing client-side controls\r\n     *\r\n     * @param json The json object to encode into a string\r\n     */\r\n    ClientSidePage.jsonToEscapedString = function (json) {\r\n        return jsS(json)\r\n            .replace(/\""/g, \""&quot;\"")\r\n            .replace(/:/g, \""&#58;\"")\r\n            .replace(/{/g, \""&#123;\"")\r\n            .replace(/}/g, \""&#125;\"")\r\n            .replace(/\\[/g, \""\\[\"")\r\n            .replace(/\\]/g, \""\\]\"")\r\n            .replace(/\\./g, \""\\.\"");\r\n    };\r\n    /**\r\n     * Converts an escaped string from a client-side control attribute to a json object\r\n     *\r\n     * @param escapedString\r\n     */\r\n    ClientSidePage.escapedStringToJson = function (escapedString) {\r\n        var unespace = function (escaped) {\r\n            var mapDict = [\r\n                [/&quot;/g, \""\\\""\""], [/&#58;/g, \"":\""], [/&#123;/g, \""{\""], [/&#125;/g, \""}\""],\r\n                [/\\\\\\\\/g, \""\\\\\""], [/\\\\\\?/g, \""?\""], [/\\\\\\./g, \"".\""], [/\\\\\\[/g, \""[\""], [/\\\\\\]/g, \""]\""],\r\n                [/\\\\\\(/g, \""(\""], [/\\\\\\)/g, \"")\""], [/\\\\\\|/g, \""|\""], [/\\\\\\+/g, \""+\""],\r\n            ];\r\n            return mapDict.reduce(function (r, m) { return r.replace(m[0], m[1]); }, escaped);\r\n        };\r\n        return JSON.parse(unespace(escapedString));\r\n    };\r\n    /**\r\n     * Add a section to this page\r\n     */\r\n    ClientSidePage.prototype.addSection = function () {\r\n        var section = new CanvasSection(this, getNextOrder(this.sections));\r\n        this.sections.push(section);\r\n        return section;\r\n    };\r\n    /**\r\n     * Converts this page's content to html markup\r\n     */\r\n    ClientSidePage.prototype.toHtml = function () {\r\n        // trigger reindex of the entire tree\r\n        reindex(this.sections);\r\n        var html = [];\r\n        html.push(\""<div>\"");\r\n        for (var i = 0; i < this.sections.length; i++) {\r\n            html.push(this.sections[i].toHtml());\r\n        }\r\n        html.push(\""</div>\"");\r\n        return html.join(\""\"");\r\n    };\r\n    /**\r\n     * Loads this page instance's content from the supplied html\r\n     *\r\n     * @param html html string representing the page's content\r\n     */\r\n    ClientSidePage.prototype.fromHtml = function (html) {\r\n        var _this = this;\r\n        // reset sections\r\n        this.sections = [];\r\n        // gather our controls from the supplied html\r\n        getBoundedDivMarkup(html, /<div\\b[^>]*data-sp-canvascontrol[^>]*?>/i, function (markup) {\r\n            // get the control type\r\n            var ct = /controlType&quot;&#58;(\\d*?),/i.exec(markup);\r\n            // if no control type is present this is a column which we give type 0 to let us process it\r\n            var controlType = ct == null || ct.length < 2 ? 0 : parseInt(ct[1], 10);\r\n            var control = null;\r\n            switch (controlType) {\r\n                case 0:\r\n                    // empty canvas column\r\n                    control = new CanvasColumn(null, 0);\r\n                    control.fromHtml(markup);\r\n                    _this.mergeColumnToTree(control);\r\n                    break;\r\n                case 3:\r\n                    // client side webpart\r\n                    control = new ClientSideWebpart(\""\"");\r\n                    control.fromHtml(markup);\r\n                    _this.mergePartToTree(control);\r\n                    break;\r\n                case 4:\r\n                    // client side text\r\n                    control = new ClientSideText();\r\n                    control.fromHtml(markup);\r\n                    _this.mergePartToTree(control);\r\n                    break;\r\n            }\r\n        });\r\n        // refresh all the orders within the tree\r\n        reindex(this.sections);\r\n        return this;\r\n    };\r\n    /**\r\n     * Loads this page's content from the server\r\n     */\r\n    ClientSidePage.prototype.load = function () {\r\n        var _this = this;\r\n        return this.getItem(\""CanvasContent1\"", \""CommentsDisabled\"").then(function (item) {\r\n            _this.fromHtml(item.CanvasContent1);\r\n            _this.commentsDisabled = item.CommentsDisabled;\r\n        });\r\n    };\r\n    /**\r\n     * Persists the content changes (sections, columns, and controls)\r\n     */\r\n    ClientSidePage.prototype.save = function () {\r\n        return this.updateProperties({ CanvasContent1: this.toHtml() });\r\n    };\r\n    /**\r\n     * Enables comments on this page\r\n     */\r\n    ClientSidePage.prototype.enableComments = function () {\r\n        var _this = this;\r\n        return this.setCommentsOn(true).then(function (r) {\r\n            _this.commentsDisabled = false;\r\n            return r;\r\n        });\r\n    };\r\n    /**\r\n     * Disables comments on this page\r\n     */\r\n    ClientSidePage.prototype.disableComments = function () {\r\n        var _this = this;\r\n        return this.setCommentsOn(false).then(function (r) {\r\n            _this.commentsDisabled = true;\r\n            return r;\r\n        });\r\n    };\r\n    /**\r\n     * Finds a control by the specified instance id\r\n     *\r\n     * @param id Instance id of the control to find\r\n     */\r\n    ClientSidePage.prototype.findControlById = function (id) {\r\n        return this.findControl(function (c) { return c.id === id; });\r\n    };\r\n    /**\r\n     * Finds a control within this page's control tree using the supplied predicate\r\n     *\r\n     * @param predicate Takes a control and returns true or false, if true that control is returned by findControl\r\n     */\r\n    ClientSidePage.prototype.findControl = function (predicate) {\r\n        // check all sections\r\n        for (var i = 0; i < this.sections.length; i++) {\r\n            // check all columns\r\n            for (var j = 0; j < this.sections[i].columns.length; j++) {\r\n                // check all controls\r\n                for (var k = 0; k < this.sections[i].columns[j].controls.length; k++) {\r\n                    // check to see if the predicate likes this control\r\n                    if (predicate(this.sections[i].columns[j].controls[k])) {\r\n                        return this.sections[i].columns[j].controls[k];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        // we found nothing so give nothing back\r\n        return null;\r\n    };\r\n    /**\r\n     * Like the modern site page\r\n     */\r\n    ClientSidePage.prototype.like = function () {\r\n        return this.getItem().then(function (i) {\r\n            return i.like();\r\n        });\r\n    };\r\n    /**\r\n     * Unlike the modern site page\r\n     */\r\n    ClientSidePage.prototype.unlike = function () {\r\n        return this.getItem().then(function (i) {\r\n            return i.unlike();\r\n        });\r\n    };\r\n    /**\r\n     * Get the liked by information for a modern site page\r\n     */\r\n    ClientSidePage.prototype.getLikedByInformation = function () {\r\n        return this.getItem().then(function (i) {\r\n            return i.getLikedByInformation();\r\n        });\r\n    };\r\n    /**\r\n     * Sets the comments flag for a page\r\n     *\r\n     * @param on If true comments are enabled, false they are disabled\r\n     */\r\n    ClientSidePage.prototype.setCommentsOn = function (on) {\r\n        return this.getItem().then(function (i) {\r\n            var updater = new Item(i, \""SetCommentsDisabled(\"" + !on + \"")\"");\r\n            return updater.update({});\r\n        });\r\n    };\r\n    /**\r\n     * Merges the control into the tree of sections and columns for this page\r\n     *\r\n     * @param control The control to merge\r\n     */\r\n    ClientSidePage.prototype.mergePartToTree = function (control) {\r\n        var section = null;\r\n        var column = null;\r\n        var sections = this.sections.filter(function (s) { return s.order === control.controlData.position.zoneIndex; });\r\n        if (sections.length < 1) {\r\n            section = new CanvasSection(this, control.controlData.position.zoneIndex);\r\n            this.sections.push(section);\r\n        }\r\n        else {\r\n            section = sections[0];\r\n        }\r\n        var columns = section.columns.filter(function (c) { return c.order === control.controlData.position.sectionIndex; });\r\n        if (columns.length < 1) {\r\n            column = new CanvasColumn(section, control.controlData.position.sectionIndex, control.controlData.position.sectionFactor);\r\n            section.columns.push(column);\r\n        }\r\n        else {\r\n            column = columns[0];\r\n        }\r\n        control.column = column;\r\n        column.addControl(control);\r\n    };\r\n    /**\r\n     * Merges the supplied column into the tree\r\n     *\r\n     * @param column Column to merge\r\n     * @param position The position data for the column\r\n     */\r\n    ClientSidePage.prototype.mergeColumnToTree = function (column) {\r\n        var section = null;\r\n        var sections = this.sections.filter(function (s) { return s.order === column.controlData.position.zoneIndex; });\r\n        if (sections.length < 1) {\r\n            section = new CanvasSection(this, column.controlData.position.zoneIndex);\r\n            this.sections.push(section);\r\n        }\r\n        else {\r\n            section = sections[0];\r\n        }\r\n        column.section = section;\r\n        section.columns.push(column);\r\n    };\r\n    /**\r\n     * Updates the properties of the underlying ListItem associated with this ClientSidePage\r\n     *\r\n     * @param properties Set of properties to update\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    ClientSidePage.prototype.updateProperties = function (properties, eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.getItem().then(function (i) { return i.update(properties, eTag); });\r\n    };\r\n    return ClientSidePage;\r\n}(File));\r\nexport { ClientSidePage };\r\nvar CanvasSection = /** @class */ (function () {\r\n    function CanvasSection(page, order, columns) {\r\n        if (columns === void 0) { columns = []; }\r\n        this.page = page;\r\n        this.order = order;\r\n        this.columns = columns;\r\n        this._memId = getGUID();\r\n    }\r\n    Object.defineProperty(CanvasSection.prototype, \""defaultColumn\"", {\r\n        /**\r\n         * Default column (this.columns[0]) for this section\r\n         */\r\n        get: function () {\r\n            if (this.columns.length < 1) {\r\n                this.addColumn(12);\r\n            }\r\n            return this.columns[0];\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds a new column to this section\r\n     */\r\n    CanvasSection.prototype.addColumn = function (factor) {\r\n        var column = new CanvasColumn(this, getNextOrder(this.columns), factor);\r\n        this.columns.push(column);\r\n        return column;\r\n    };\r\n    /**\r\n     * Adds a control to the default column for this section\r\n     *\r\n     * @param control Control to add to the default column\r\n     */\r\n    CanvasSection.prototype.addControl = function (control) {\r\n        this.defaultColumn.addControl(control);\r\n        return this;\r\n    };\r\n    CanvasSection.prototype.toHtml = function () {\r\n        var html = [];\r\n        for (var i = 0; i < this.columns.length; i++) {\r\n            html.push(this.columns[i].toHtml());\r\n        }\r\n        return html.join(\""\"");\r\n    };\r\n    /**\r\n     * Removes this section and all contained columns and controls from the collection\r\n     */\r\n    CanvasSection.prototype.remove = function () {\r\n        var _this = this;\r\n        this.page.sections = this.page.sections.filter(function (section) { return section._memId !== _this._memId; });\r\n        reindex(this.page.sections);\r\n    };\r\n    return CanvasSection;\r\n}());\r\nexport { CanvasSection };\r\nvar CanvasControl = /** @class */ (function () {\r\n    function CanvasControl(controlType, dataVersion, column, order, id, controlData) {\r\n        if (column === void 0) { column = null; }\r\n        if (order === void 0) { order = 1; }\r\n        if (id === void 0) { id = getGUID(); }\r\n        if (controlData === void 0) { controlData = null; }\r\n        this.controlType = controlType;\r\n        this.dataVersion = dataVersion;\r\n        this.column = column;\r\n        this.order = order;\r\n        this.id = id;\r\n        this.controlData = controlData;\r\n    }\r\n    Object.defineProperty(CanvasControl.prototype, \""jsonData\"", {\r\n        /**\r\n         * Value of the control's \""data-sp-controldata\"" attribute\r\n         */\r\n        get: function () {\r\n            return ClientSidePage.jsonToEscapedString(this.getControlData());\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    CanvasControl.prototype.fromHtml = function (html) {\r\n        this.controlData = ClientSidePage.escapedStringToJson(getAttrValueFromString(html, \""data-sp-controldata\""));\r\n        this.dataVersion = getAttrValueFromString(html, \""data-sp-canvasdataversion\"");\r\n        this.controlType = this.controlData.controlType;\r\n        this.id = this.controlData.id;\r\n    };\r\n    return CanvasControl;\r\n}());\r\nexport { CanvasControl };\r\nvar CanvasColumn = /** @class */ (function (_super) {\r\n    tslib_1.__extends(CanvasColumn, _super);\r\n    function CanvasColumn(section, order, factor, controls, dataVersion) {\r\n        if (factor === void 0) { factor = 12; }\r\n        if (controls === void 0) { controls = []; }\r\n        if (dataVersion === void 0) { dataVersion = \""1.0\""; }\r\n        var _this = _super.call(this, 0, dataVersion) || this;\r\n        _this.section = section;\r\n        _this.order = order;\r\n        _this.factor = factor;\r\n        _this.controls = controls;\r\n        return _this;\r\n    }\r\n    CanvasColumn.prototype.addControl = function (control) {\r\n        control.column = this;\r\n        this.controls.push(control);\r\n        return this;\r\n    };\r\n    CanvasColumn.prototype.getControl = function (index) {\r\n        return this.controls[index];\r\n    };\r\n    CanvasColumn.prototype.toHtml = function () {\r\n        var html = [];\r\n        if (this.controls.length < 1) {\r\n            html.push(\""<div data-sp-canvascontrol=\\\""\\\"" data-sp-canvasdataversion=\\\""\"" + this.dataVersion + \""\\\"" data-sp-controldata=\\\""\"" + this.jsonData + \""\\\""></div>\"");\r\n        }\r\n        else {\r\n            for (var i = 0; i < this.controls.length; i++) {\r\n                html.push(this.controls[i].toHtml(i + 1));\r\n            }\r\n        }\r\n        return html.join(\""\"");\r\n    };\r\n    CanvasColumn.prototype.fromHtml = function (html) {\r\n        _super.prototype.fromHtml.call(this, html);\r\n        this.controlData = ClientSidePage.escapedStringToJson(getAttrValueFromString(html, \""data-sp-controldata\""));\r\n        this.factor = this.controlData.position.sectionFactor;\r\n        this.order = this.controlData.position.sectionIndex;\r\n    };\r\n    CanvasColumn.prototype.getControlData = function () {\r\n        return {\r\n            displayMode: 2,\r\n            position: {\r\n                sectionFactor: this.factor,\r\n                sectionIndex: this.order,\r\n                zoneIndex: this.section.order,\r\n            },\r\n        };\r\n    };\r\n    /**\r\n     * Removes this column and all contained controls from the collection\r\n     */\r\n    CanvasColumn.prototype.remove = function () {\r\n        var _this = this;\r\n        this.section.columns = this.section.columns.filter(function (column) { return column.id !== _this.id; });\r\n        reindex(this.column.controls);\r\n    };\r\n    return CanvasColumn;\r\n}(CanvasControl));\r\nexport { CanvasColumn };\r\n/**\r\n * Abstract class with shared functionality for parts\r\n */\r\nvar ClientSidePart = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientSidePart, _super);\r\n    function ClientSidePart() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Removes this column and all contained controls from the collection\r\n     */\r\n    ClientSidePart.prototype.remove = function () {\r\n        var _this = this;\r\n        this.column.controls = this.column.controls.filter(function (control) { return control.id !== _this.id; });\r\n        reindex(this.column.controls);\r\n    };\r\n    return ClientSidePart;\r\n}(CanvasControl));\r\nexport { ClientSidePart };\r\nvar ClientSideText = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientSideText, _super);\r\n    function ClientSideText(text) {\r\n        if (text === void 0) { text = \""\""; }\r\n        var _this = _super.call(this, 4, \""1.0\"") || this;\r\n        _this.text = text;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(ClientSideText.prototype, \""text\"", {\r\n        /**\r\n         * The text markup of this control\r\n         */\r\n        get: function () {\r\n            return this._text;\r\n        },\r\n        set: function (text) {\r\n            if (!text.startsWith(\""<p>\"")) {\r\n                text = \""<p>\"" + text + \""</p>\"";\r\n            }\r\n            this._text = text;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    ClientSideText.prototype.getControlData = function () {\r\n        return {\r\n            controlType: this.controlType,\r\n            editorType: \""CKEditor\"",\r\n            id: this.id,\r\n            position: {\r\n                controlIndex: this.order,\r\n                sectionFactor: this.column.factor,\r\n                sectionIndex: this.column.order,\r\n                zoneIndex: this.column.section.order,\r\n            },\r\n        };\r\n    };\r\n    ClientSideText.prototype.toHtml = function (index) {\r\n        // set our order to the value passed in\r\n        this.order = index;\r\n        var html = [];\r\n        html.push(\""<div data-sp-canvascontrol=\\\""\\\"" data-sp-canvasdataversion=\\\""\"" + this.dataVersion + \""\\\"" data-sp-controldata=\\\""\"" + this.jsonData + \""\\\"">\"");\r\n        html.push(\""<div data-sp-rte=\\\""\\\"">\"");\r\n        html.push(\""\"" + this.text);\r\n        html.push(\""</div>\"");\r\n        html.push(\""</div>\"");\r\n        return html.join(\""\"");\r\n    };\r\n    ClientSideText.prototype.fromHtml = function (html) {\r\n        var _this = this;\r\n        _super.prototype.fromHtml.call(this, html);\r\n        this.text = \""\"";\r\n        getBoundedDivMarkup(html, /<div[^>]*data-sp-rte[^>]*>/i, function (s) {\r\n            // now we need to grab the inner text between the divs\r\n            var match = /<div[^>]*data-sp-rte[^>]*>(.*?)<\\/div>$/i.exec(s);\r\n            _this.text = match.length > 1 ? match[1] : \""\"";\r\n        });\r\n    };\r\n    return ClientSideText;\r\n}(ClientSidePart));\r\nexport { ClientSideText };\r\nvar ClientSideWebpart = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientSideWebpart, _super);\r\n    function ClientSideWebpart(title, description, propertieJson, webPartId, htmlProperties, serverProcessedContent, canvasDataVersion) {\r\n        if (description === void 0) { description = \""\""; }\r\n        if (propertieJson === void 0) { propertieJson = {}; }\r\n        if (webPartId === void 0) { webPartId = \""\""; }\r\n        if (htmlProperties === void 0) { htmlProperties = \""\""; }\r\n        if (serverProcessedContent === void 0) { serverProcessedContent = null; }\r\n        if (canvasDataVersion === void 0) { canvasDataVersion = \""1.0\""; }\r\n        var _this = _super.call(this, 3, \""1.0\"") || this;\r\n        _this.title = title;\r\n        _this.description = description;\r\n        _this.propertieJson = propertieJson;\r\n        _this.webPartId = webPartId;\r\n        _this.htmlProperties = htmlProperties;\r\n        _this.serverProcessedContent = serverProcessedContent;\r\n        _this.canvasDataVersion = canvasDataVersion;\r\n        return _this;\r\n    }\r\n    ClientSideWebpart.fromComponentDef = function (definition) {\r\n        var part = new ClientSideWebpart(\""\"");\r\n        part.import(definition);\r\n        return part;\r\n    };\r\n    ClientSideWebpart.prototype.import = function (component) {\r\n        this.webPartId = component.Id.replace(/^\\{|\\}$/g, \""\"").toLowerCase();\r\n        var manifest = JSON.parse(component.Manifest);\r\n        this.title = manifest.preconfiguredEntries[0].title.default;\r\n        this.description = manifest.preconfiguredEntries[0].description.default;\r\n        this.dataVersion = \""1.0\"";\r\n        this.propertieJson = this.parseJsonProperties(manifest.preconfiguredEntries[0].properties);\r\n    };\r\n    ClientSideWebpart.prototype.setProperties = function (properties) {\r\n        this.propertieJson = extend(this.propertieJson, properties);\r\n        return this;\r\n    };\r\n    ClientSideWebpart.prototype.getProperties = function () {\r\n        return this.propertieJson;\r\n    };\r\n    ClientSideWebpart.prototype.toHtml = function (index) {\r\n        // set our order to the value passed in\r\n        this.order = index;\r\n        // will form the value of the data-sp-webpartdata attribute\r\n        var data = {\r\n            dataVersion: this.dataVersion,\r\n            description: this.description,\r\n            id: this.webPartId,\r\n            instanceId: this.id,\r\n            properties: this.propertieJson,\r\n            serverProcessedContent: this.serverProcessedContent,\r\n            title: this.title,\r\n        };\r\n        var html = [];\r\n        html.push(\""<div data-sp-canvascontrol=\\\""\\\"" data-sp-canvasdataversion=\\\""\"" + this.canvasDataVersion + \""\\\"" data-sp-controldata=\\\""\"" + this.jsonData + \""\\\"">\"");\r\n        html.push(\""<div data-sp-webpart=\\\""\\\"" data-sp-webpartdataversion=\\\""\"" + this.dataVersion + \""\\\"" data-sp-webpartdata=\\\""\"" + ClientSidePage.jsonToEscapedString(data) + \""\\\"">\"");\r\n        html.push(\""<div data-sp-componentid>\"");\r\n        html.push(this.webPartId);\r\n        html.push(\""</div>\"");\r\n        html.push(\""<div data-sp-htmlproperties=\\\""\\\"">\"");\r\n        html.push(this.renderHtmlProperties());\r\n        html.push(\""</div>\"");\r\n        html.push(\""</div>\"");\r\n        html.push(\""</div>\"");\r\n        return html.join(\""\"");\r\n    };\r\n    ClientSideWebpart.prototype.fromHtml = function (html) {\r\n        _super.prototype.fromHtml.call(this, html);\r\n        var webPartData = ClientSidePage.escapedStringToJson(getAttrValueFromString(html, \""data-sp-webpartdata\""));\r\n        this.title = webPartData.title;\r\n        this.description = webPartData.description;\r\n        this.webPartId = webPartData.id;\r\n        this.canvasDataVersion = getAttrValueFromString(html, \""data-sp-canvasdataversion\"").replace(/\\\\\\./, \"".\"");\r\n        this.dataVersion = getAttrValueFromString(html, \""data-sp-webpartdataversion\"").replace(/\\\\\\./, \"".\"");\r\n        this.setProperties(webPartData.properties);\r\n        if (webPartData.serverProcessedContent !== undefined) {\r\n            this.serverProcessedContent = webPartData.serverProcessedContent;\r\n        }\r\n        // get our html properties\r\n        var htmlProps = getBoundedDivMarkup(html, /<div\\b[^>]*data-sp-htmlproperties[^>]*?>/i, function (markup) {\r\n            return markup.replace(/^<div\\b[^>]*data-sp-htmlproperties[^>]*?>/i, \""\"").replace(/<\\/div>$/i, \""\"");\r\n        });\r\n        this.htmlProperties = htmlProps.length > 0 ? htmlProps[0] : \""\"";\r\n    };\r\n    ClientSideWebpart.prototype.getControlData = function () {\r\n        return {\r\n            controlType: this.controlType,\r\n            id: this.id,\r\n            position: {\r\n                controlIndex: this.order,\r\n                sectionFactor: this.column.factor,\r\n                sectionIndex: this.column.order,\r\n                zoneIndex: this.column.section.order,\r\n            },\r\n            webPartId: this.webPartId,\r\n        };\r\n    };\r\n    ClientSideWebpart.prototype.renderHtmlProperties = function () {\r\n        var html = [];\r\n        if (this.serverProcessedContent === undefined || this.serverProcessedContent === null) {\r\n            html.push(this.htmlProperties);\r\n        }\r\n        else if (this.serverProcessedContent !== undefined) {\r\n            if (this.serverProcessedContent.searchablePlainTexts !== undefined) {\r\n                var keys = Object.keys(this.serverProcessedContent.searchablePlainTexts);\r\n                for (var i = 0; i < keys.length; i++) {\r\n                    html.push(\""<div data-sp-prop-name=\\\""\"" + keys[i] + \""\\\"" data-sp-searchableplaintext=\\\""true\\\"">\"");\r\n                    html.push(this.serverProcessedContent.searchablePlainTexts[keys[i]]);\r\n                    html.push(\""</div>\"");\r\n                }\r\n            }\r\n            if (this.serverProcessedContent.imageSources !== undefined) {\r\n                var keys = Object.keys(this.serverProcessedContent.imageSources);\r\n                for (var i = 0; i < keys.length; i++) {\r\n                    html.push(\""<img data-sp-prop-name=\\\""\"" + keys[i] + \""\\\"" src=\\\""\"" + this.serverProcessedContent.imageSources[keys[i]] + \""\\\"" />\"");\r\n                }\r\n            }\r\n            if (this.serverProcessedContent.links !== undefined) {\r\n                var keys = Object.keys(this.serverProcessedContent.links);\r\n                for (var i = 0; i < keys.length; i++) {\r\n                    html.push(\""<a data-sp-prop-name=\\\""\"" + keys[i] + \""\\\"" href=\\\""\"" + this.serverProcessedContent.links[keys[i]] + \""\\\""></a>\"");\r\n                }\r\n            }\r\n        }\r\n        return html.join(\""\"");\r\n    };\r\n    ClientSideWebpart.prototype.parseJsonProperties = function (props) {\r\n        // If the web part has the serverProcessedContent property then keep this one as it might be needed as input to render the web part HTML later on\r\n        if (props.webPartData !== undefined && props.webPartData.serverProcessedContent !== undefined) {\r\n            this.serverProcessedContent = props.webPartData.serverProcessedContent;\r\n        }\r\n        else if (props.serverProcessedContent !== undefined) {\r\n            this.serverProcessedContent = props.serverProcessedContent;\r\n        }\r\n        else {\r\n            this.serverProcessedContent = null;\r\n        }\r\n        if (props.webPartData !== undefined && props.webPartData.properties !== undefined) {\r\n            return props.webPartData.properties;\r\n        }\r\n        else if (props.properties !== undefined) {\r\n            return props.properties;\r\n        }\r\n        else {\r\n            return props;\r\n        }\r\n    };\r\n    return ClientSideWebpart;\r\n}(ClientSidePart));\r\nexport { ClientSideWebpart };\r\n//# sourceMappingURL=clientsidepages.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Represents a Collection of comments\r\n */\r\nvar Comments = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Comments, _super);\r\n    function Comments() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Comments_1 = Comments;\r\n    /**\r\n     * Adds a new comment to this collection\r\n     *\r\n     * @param info Comment information to add\r\n     */\r\n    Comments.prototype.add = function (info) {\r\n        var _this = this;\r\n        if (typeof info === \""string\"") {\r\n            info = { text: info };\r\n        }\r\n        var postBody = jsS(extend(metadata(\""Microsoft.SharePoint.Comments.comment\""), info));\r\n        return this.clone(Comments_1, null).postCore({ body: postBody }).then(function (d) {\r\n            return extend(_this.getById(d.id), d);\r\n        });\r\n    };\r\n    /**\r\n     * Gets a comment by id\r\n     *\r\n     * @param id Id of the comment to load\r\n     */\r\n    Comments.prototype.getById = function (id) {\r\n        var c = new Comment(this);\r\n        c.concat(\""(\"" + id + \"")\"");\r\n        return c;\r\n    };\r\n    /**\r\n     * Deletes all the comments in this collection\r\n     */\r\n    Comments.prototype.clear = function () {\r\n        return this.clone(Comments_1, \""DeleteAll\"").postCore();\r\n    };\r\n    var Comments_1;\r\n    Comments = Comments_1 = tslib_1.__decorate([\r\n        defaultPath(\""comments\"")\r\n    ], Comments);\r\n    return Comments;\r\n}(SharePointQueryableCollection));\r\nexport { Comments };\r\n/**\r\n * Represents a comment\r\n */\r\nvar Comment = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Comment, _super);\r\n    function Comment() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Comment.prototype, \""replies\"", {\r\n        get: function () {\r\n            return new Replies(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Likes the comment as the current user\r\n     */\r\n    Comment.prototype.like = function () {\r\n        return this.clone(Comment, \""Like\"").postCore();\r\n    };\r\n    /**\r\n     * Unlikes the comment as the current user\r\n     */\r\n    Comment.prototype.unlike = function () {\r\n        return this.clone(Comment, \""Unlike\"").postCore();\r\n    };\r\n    /**\r\n     * Deletes this comment\r\n     */\r\n    Comment.prototype.delete = function () {\r\n        return this.clone(Comment, \""DeleteComment\"").postCore();\r\n    };\r\n    return Comment;\r\n}(SharePointQueryableInstance));\r\nexport { Comment };\r\n/**\r\n * Represents a Collection of comments\r\n */\r\nvar Replies = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Replies, _super);\r\n    function Replies() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Replies_1 = Replies;\r\n    /**\r\n     * Adds a new reply to this collection\r\n     *\r\n     * @param info Comment information to add\r\n     */\r\n    Replies.prototype.add = function (info) {\r\n        if (typeof info === \""string\"") {\r\n            info = { text: info };\r\n        }\r\n        var postBody = jsS(extend(metadata(\""Microsoft.SharePoint.Comments.comment\""), info));\r\n        return this.clone(Replies_1, null).postCore({ body: postBody }).then(function (d) {\r\n            return extend(new Comment(odataUrlFrom(d)), d);\r\n        });\r\n    };\r\n    var Replies_1;\r\n    Replies = Replies_1 = tslib_1.__decorate([\r\n        defaultPath(\""replies\"")\r\n    ], Replies);\r\n    return Replies;\r\n}(SharePointQueryableCollection));\r\nexport { Replies };\r\n//# sourceMappingURL=comments.js.map"",""import { RuntimeConfig, FetchClient, } from \""@pnp/common\"";\r\nexport function setup(config) {\r\n    RuntimeConfig.extend(config);\r\n}\r\nvar SPRuntimeConfigImpl = /** @class */ (function () {\r\n    function SPRuntimeConfigImpl() {\r\n    }\r\n    Object.defineProperty(SPRuntimeConfigImpl.prototype, \""headers\"", {\r\n        get: function () {\r\n            var spPart = RuntimeConfig.get(\""sp\"");\r\n            if (spPart !== undefined && spPart.headers !== undefined) {\r\n                return spPart.headers;\r\n            }\r\n            return {};\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRuntimeConfigImpl.prototype, \""baseUrl\"", {\r\n        get: function () {\r\n            var spPart = RuntimeConfig.get(\""sp\"");\r\n            if (spPart !== undefined && spPart.baseUrl !== undefined) {\r\n                return spPart.baseUrl;\r\n            }\r\n            if (RuntimeConfig.spfxContext !== undefined && RuntimeConfig.spfxContext !== null) {\r\n                return RuntimeConfig.spfxContext.pageContext.web.absoluteUrl;\r\n            }\r\n            return null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRuntimeConfigImpl.prototype, \""fetchClientFactory\"", {\r\n        get: function () {\r\n            var spPart = RuntimeConfig.get(\""sp\"");\r\n            if (spPart !== undefined && spPart.fetchClientFactory !== undefined) {\r\n                return spPart.fetchClientFactory;\r\n            }\r\n            else {\r\n                return function () { return new FetchClient(); };\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return SPRuntimeConfigImpl;\r\n}());\r\nexport { SPRuntimeConfigImpl };\r\nexport var SPRuntimeConfig = new SPRuntimeConfigImpl();\r\n//# sourceMappingURL=splibconfig.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of content types\r\n *\r\n */\r\nvar ContentTypes = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ContentTypes, _super);\r\n    function ContentTypes() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ContentTypes_1 = ContentTypes;\r\n    /**\r\n     * Adds an existing contenttype to a content type collection\r\n     *\r\n     * @param contentTypeId in the following format, for example: 0x010102\r\n     */\r\n    ContentTypes.prototype.addAvailableContentType = function (contentTypeId) {\r\n        var _this = this;\r\n        var postBody = jsS({\r\n            \""contentTypeId\"": contentTypeId,\r\n        });\r\n        return this.clone(ContentTypes_1, \""addAvailableContentType\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                contentType: _this.getById(data.id),\r\n                data: data,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Gets a ContentType by content type id\r\n     */\r\n    ContentTypes.prototype.getById = function (id) {\r\n        var ct = new ContentType(this);\r\n        ct.concat(\""('\"" + id + \""')\"");\r\n        return ct;\r\n    };\r\n    /**\r\n     * Adds a new content type to the collection\r\n     *\r\n     * @param id The desired content type id for the new content type (also determines the parent content type)\r\n     * @param name The name of the content type\r\n     * @param description The description of the content type\r\n     * @param group The group in which to add the content type\r\n     * @param additionalSettings Any additional settings to provide when creating the content type\r\n     *\r\n     */\r\n    ContentTypes.prototype.add = function (id, name, description, group, additionalSettings) {\r\n        var _this = this;\r\n        if (description === void 0) { description = \""\""; }\r\n        if (group === void 0) { group = \""Custom Content Types\""; }\r\n        if (additionalSettings === void 0) { additionalSettings = {}; }\r\n        var postBody = jsS(Object.assign(metadata(\""SP.ContentType\""), {\r\n            \""Description\"": description,\r\n            \""Group\"": group,\r\n            \""Id\"": { \""StringValue\"": id },\r\n            \""Name\"": name,\r\n        }, additionalSettings));\r\n        return this.postCore({ body: postBody }).then(function (data) {\r\n            return { contentType: _this.getById(data.id), data: data };\r\n        });\r\n    };\r\n    var ContentTypes_1;\r\n    ContentTypes = ContentTypes_1 = tslib_1.__decorate([\r\n        defaultPath(\""contenttypes\"")\r\n    ], ContentTypes);\r\n    return ContentTypes;\r\n}(SharePointQueryableCollection));\r\nexport { ContentTypes };\r\n/**\r\n * Describes a single ContentType instance\r\n *\r\n */\r\nvar ContentType = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ContentType, _super);\r\n    function ContentType() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Delete this content type\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(ContentType.prototype, \""fieldLinks\"", {\r\n        /**\r\n         * Gets the column (also known as field) references in the content type.\r\n        */\r\n        get: function () {\r\n            return new FieldLinks(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ContentType.prototype, \""fields\"", {\r\n        /**\r\n         * Gets a value that specifies the collection of fields for the content type.\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""fields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ContentType.prototype, \""parent\"", {\r\n        /**\r\n         * Gets the parent content type of the content type.\r\n         */\r\n        get: function () {\r\n            return new ContentType(this, \""parent\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ContentType.prototype, \""workflowAssociations\"", {\r\n        /**\r\n         * Gets a value that specifies the collection of workflow associations for the content type.\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""workflowAssociations\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return ContentType;\r\n}(SharePointQueryableInstance));\r\nexport { ContentType };\r\n/**\r\n * Represents a collection of field link instances\r\n */\r\nvar FieldLinks = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FieldLinks, _super);\r\n    function FieldLinks() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a FieldLink by GUID id\r\n     *\r\n     * @param id The GUID id of the field link\r\n     */\r\n    FieldLinks.prototype.getById = function (id) {\r\n        var fl = new FieldLink(this);\r\n        fl.concat(\""(guid'\"" + id + \""')\"");\r\n        return fl;\r\n    };\r\n    FieldLinks = tslib_1.__decorate([\r\n        defaultPath(\""fieldlinks\"")\r\n    ], FieldLinks);\r\n    return FieldLinks;\r\n}(SharePointQueryableCollection));\r\nexport { FieldLinks };\r\n/**\r\n * Represents a field link instance\r\n */\r\nvar FieldLink = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FieldLink, _super);\r\n    function FieldLink() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return FieldLink;\r\n}(SharePointQueryableInstance));\r\nexport { FieldLink };\r\n//# sourceMappingURL=contenttypes.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\n/**\r\n * Describes a collection of List objects\r\n *\r\n */\r\nvar Features = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Features, _super);\r\n    function Features() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Features_1 = Features;\r\n    /**\r\n     * Adds a new list to the collection\r\n     *\r\n     * @param id The Id of the feature (GUID)\r\n     * @param force If true the feature activation will be forced\r\n     */\r\n    Features.prototype.add = function (id, force) {\r\n        var _this = this;\r\n        if (force === void 0) { force = false; }\r\n        return this.clone(Features_1, \""add\"").postCore({\r\n            body: jsS({\r\n                featdefScope: 0,\r\n                featureId: id,\r\n                force: force,\r\n            }),\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                feature: _this.getById(id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list from the collection by guid id\r\n     *\r\n     * @param id The Id of the feature (GUID)\r\n     */\r\n    Features.prototype.getById = function (id) {\r\n        var feature = new Feature(this);\r\n        feature.concat(\""('\"" + id + \""')\"");\r\n        return feature;\r\n    };\r\n    /**\r\n     * Removes (deactivates) a feature from the collection\r\n     *\r\n     * @param id The Id of the feature (GUID)\r\n     * @param force If true the feature deactivation will be forced\r\n     */\r\n    Features.prototype.remove = function (id, force) {\r\n        if (force === void 0) { force = false; }\r\n        return this.clone(Features_1, \""remove\"").postCore({\r\n            body: jsS({\r\n                featureId: id,\r\n                force: force,\r\n            }),\r\n        });\r\n    };\r\n    var Features_1;\r\n    Features = Features_1 = tslib_1.__decorate([\r\n        defaultPath(\""features\"")\r\n    ], Features);\r\n    return Features;\r\n}(SharePointQueryableCollection));\r\nexport { Features };\r\nvar Feature = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Feature, _super);\r\n    function Feature() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Removes (deactivates) a feature from the collection\r\n     *\r\n     * @param force If true the feature deactivation will be forced\r\n     */\r\n    Feature.prototype.deactivate = function (force) {\r\n        var _this = this;\r\n        if (force === void 0) { force = false; }\r\n        var removeDependency = this.addBatchDependency();\r\n        var idGet = new Feature(this).select(\""DefinitionId\"");\r\n        return idGet.get().then(function (feature) {\r\n            var promise = _this.getParent(Features, _this.parentUrl, \""\"", _this.batch).remove(feature.DefinitionId, force);\r\n            removeDependency();\r\n            return promise;\r\n        });\r\n    };\r\n    return Feature;\r\n}(SharePointQueryableInstance));\r\nexport { Feature };\r\n//# sourceMappingURL=features.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { DateTimeFieldFormatType, FieldTypes, CalendarType, UrlFieldFormatType, ChoiceFieldFormatType, } from \""./types\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of Field objects\r\n *\r\n */\r\nvar Fields = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Fields, _super);\r\n    function Fields() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Fields_1 = Fields;\r\n    /**\r\n     * Gets a field from the collection by id\r\n     *\r\n     * @param id The Id of the list\r\n     */\r\n    Fields.prototype.getById = function (id) {\r\n        var f = new Field(this);\r\n        f.concat(\""('\"" + id + \""')\"");\r\n        return f;\r\n    };\r\n    /**\r\n     * Gets a field from the collection by title\r\n     *\r\n     * @param title The case-sensitive title of the field\r\n     */\r\n    Fields.prototype.getByTitle = function (title) {\r\n        return new Field(this, \""getByTitle('\"" + title + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a field from the collection by using internal name or title\r\n     *\r\n     * @param name The case-sensitive internal name or title of the field\r\n     */\r\n    Fields.prototype.getByInternalNameOrTitle = function (name) {\r\n        return new Field(this, \""getByInternalNameOrTitle('\"" + name + \""')\"");\r\n    };\r\n    /**\r\n     * Creates a field based on the specified schema\r\n     */\r\n    Fields.prototype.createFieldAsXml = function (xml) {\r\n        var _this = this;\r\n        var info;\r\n        if (typeof xml === \""string\"") {\r\n            info = { SchemaXml: xml };\r\n        }\r\n        else {\r\n            info = xml;\r\n        }\r\n        var postBody = jsS({\r\n            \""parameters\"": extend(metadata(\""SP.XmlSchemaFieldCreationInformation\""), info),\r\n        });\r\n        return this.clone(Fields_1, \""createfieldasxml\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new field to the collection\r\n     *\r\n     * @param title The new field's title\r\n     * @param fieldType The new field's type (ex: SP.FieldText)\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.add = function (title, fieldType, properties) {\r\n        var _this = this;\r\n        var postBody = jsS(Object.assign(metadata(fieldType), {\r\n            \""Title\"": title,\r\n        }, properties));\r\n        return this.clone(Fields_1, null).postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldText to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param maxLength The maximum number of characters allowed in the value of the field.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addText = function (title, maxLength, properties) {\r\n        if (maxLength === void 0) { maxLength = 255; }\r\n        var props = {\r\n            FieldTypeKind: 2,\r\n            MaxLength: maxLength,\r\n        };\r\n        return this.add(title, \""SP.FieldText\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldCalculated to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param formula The formula for the field.\r\n     * @param dateFormat The date and time format that is displayed in the field.\r\n     * @param outputType Specifies the output format for the field. Represents a FieldType value.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addCalculated = function (title, formula, dateFormat, outputType, properties) {\r\n        if (outputType === void 0) { outputType = FieldTypes.Text; }\r\n        var props = {\r\n            DateFormat: dateFormat,\r\n            FieldTypeKind: 17,\r\n            Formula: formula,\r\n            OutputType: outputType,\r\n        };\r\n        return this.add(title, \""SP.FieldCalculated\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldDateTime to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param displayFormat The format of the date and time that is displayed in the field.\r\n     * @param calendarType Specifies the calendar type of the field.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addDateTime = function (title, displayFormat, calendarType, friendlyDisplayFormat, properties) {\r\n        if (displayFormat === void 0) { displayFormat = DateTimeFieldFormatType.DateOnly; }\r\n        if (calendarType === void 0) { calendarType = CalendarType.Gregorian; }\r\n        if (friendlyDisplayFormat === void 0) { friendlyDisplayFormat = 0; }\r\n        var props = {\r\n            DateTimeCalendarType: calendarType,\r\n            DisplayFormat: displayFormat,\r\n            FieldTypeKind: 4,\r\n            FriendlyDisplayFormat: friendlyDisplayFormat,\r\n        };\r\n        return this.add(title, \""SP.FieldDateTime\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldNumber to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param minValue The field's minimum value\r\n     * @param maxValue The field's maximum value\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addNumber = function (title, minValue, maxValue, properties) {\r\n        var props = { FieldTypeKind: 9 };\r\n        if (minValue !== undefined) {\r\n            props = extend({ MinimumValue: minValue }, props);\r\n        }\r\n        if (maxValue !== undefined) {\r\n            props = extend({ MaximumValue: maxValue }, props);\r\n        }\r\n        return this.add(title, \""SP.FieldNumber\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldCurrency to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param minValue The field's minimum value\r\n     * @param maxValue The field's maximum value\r\n     * @param currencyLocalId Specifies the language code identifier (LCID) used to format the value of the field\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addCurrency = function (title, minValue, maxValue, currencyLocalId, properties) {\r\n        if (currencyLocalId === void 0) { currencyLocalId = 1033; }\r\n        var props = {\r\n            CurrencyLocaleId: currencyLocalId,\r\n            FieldTypeKind: 10,\r\n        };\r\n        if (minValue !== undefined) {\r\n            props = extend({ MinimumValue: minValue }, props);\r\n        }\r\n        if (maxValue !== undefined) {\r\n            props = extend({ MaximumValue: maxValue }, props);\r\n        }\r\n        return this.add(title, \""SP.FieldCurrency\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldMultiLineText to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param numberOfLines Specifies the number of lines of text to display for the field.\r\n     * @param richText Specifies whether the field supports rich formatting.\r\n     * @param restrictedMode Specifies whether the field supports a subset of rich formatting.\r\n     * @param appendOnly Specifies whether all changes to the value of the field are displayed in list forms.\r\n     * @param allowHyperlink Specifies whether a hyperlink is allowed as a value of the field.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     *\r\n     */\r\n    Fields.prototype.addMultilineText = function (title, numberOfLines, richText, restrictedMode, appendOnly, allowHyperlink, properties) {\r\n        if (numberOfLines === void 0) { numberOfLines = 6; }\r\n        if (richText === void 0) { richText = true; }\r\n        if (restrictedMode === void 0) { restrictedMode = false; }\r\n        if (appendOnly === void 0) { appendOnly = false; }\r\n        if (allowHyperlink === void 0) { allowHyperlink = true; }\r\n        var props = {\r\n            AllowHyperlink: allowHyperlink,\r\n            AppendOnly: appendOnly,\r\n            FieldTypeKind: 3,\r\n            NumberOfLines: numberOfLines,\r\n            RestrictedMode: restrictedMode,\r\n            RichText: richText,\r\n        };\r\n        return this.add(title, \""SP.FieldMultiLineText\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldUrl to the collection\r\n     *\r\n     * @param title The field title\r\n     */\r\n    Fields.prototype.addUrl = function (title, displayFormat, properties) {\r\n        if (displayFormat === void 0) { displayFormat = UrlFieldFormatType.Hyperlink; }\r\n        var props = {\r\n            DisplayFormat: displayFormat,\r\n            FieldTypeKind: 11,\r\n        };\r\n        return this.add(title, \""SP.FieldUrl\"", extend(props, properties));\r\n    };\r\n    /** Adds a user field to the colleciton\r\n    *\r\n    * @param title The new field's title\r\n    * @param selectionMode The selection mode of the field\r\n    * @param selectionGroup Value that specifies the identifier of the SharePoint group whose members can be selected as values of the field\r\n    * @param properties\r\n    */\r\n    Fields.prototype.addUser = function (title, selectionMode, properties) {\r\n        var props = {\r\n            FieldTypeKind: 20,\r\n            SelectionMode: selectionMode,\r\n        };\r\n        return this.add(title, \""SP.FieldUser\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a SP.FieldLookup to the collection\r\n     *\r\n     * @param title The new field's title\r\n     * @param lookupListId The guid id of the list where the source of the lookup is found\r\n     * @param lookupFieldName The internal name of the field in the source list\r\n     * @param properties Set of additional properties to set on the new field\r\n     */\r\n    Fields.prototype.addLookup = function (title, lookupListId, lookupFieldName, properties) {\r\n        var _this = this;\r\n        var props = extend({\r\n            FieldTypeKind: 7,\r\n            LookupFieldName: lookupFieldName,\r\n            LookupListId: lookupListId,\r\n            Title: title,\r\n        }, properties);\r\n        var postBody = jsS({\r\n            \""parameters\"": extend(metadata(\""SP.FieldCreationInformation\""), props),\r\n        });\r\n        return this.clone(Fields_1, \""addfield\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldChoice to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param choices The choices for the field.\r\n     * @param format The display format of the available options for the field.\r\n     * @param fillIn Specifies whether the field allows fill-in values.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addChoice = function (title, choices, format, fillIn, properties) {\r\n        if (format === void 0) { format = ChoiceFieldFormatType.Dropdown; }\r\n        var props = {\r\n            Choices: {\r\n                results: choices,\r\n            },\r\n            EditFormat: format,\r\n            FieldTypeKind: 6,\r\n            FillInChoice: fillIn,\r\n        };\r\n        return this.add(title, \""SP.FieldChoice\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldMultiChoice to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param choices The choices for the field.\r\n     * @param fillIn Specifies whether the field allows fill-in values.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addMultiChoice = function (title, choices, fillIn, properties) {\r\n        var props = {\r\n            Choices: {\r\n                results: choices,\r\n            },\r\n            FieldTypeKind: 15,\r\n            FillInChoice: fillIn,\r\n        };\r\n        return this.add(title, \""SP.FieldMultiChoice\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldBoolean to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addBoolean = function (title, properties) {\r\n        var props = {\r\n            FieldTypeKind: 8,\r\n        };\r\n        return this.add(title, \""SP.Field\"", extend(props, properties));\r\n    };\r\n    /**\r\n    * Creates a secondary (dependent) lookup field, based on the Id of the primary lookup field.\r\n    *\r\n    * @param displayName The display name of the new field.\r\n    * @param primaryLookupFieldId The guid of the primary Lookup Field.\r\n    * @param showField Which field to show from the lookup list.\r\n    */\r\n    Fields.prototype.addDependentLookupField = function (displayName, primaryLookupFieldId, showField) {\r\n        var _this = this;\r\n        return this.clone(Fields_1, \""adddependentlookupfield(displayName='\"" + displayName + \""', primarylookupfieldid='\"" + primaryLookupFieldId + \""', showfield='\"" + showField + \""')\"")\r\n            .postCore()\r\n            .then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    var Fields_1;\r\n    Fields = Fields_1 = tslib_1.__decorate([\r\n        defaultPath(\""fields\"")\r\n    ], Fields);\r\n    return Fields;\r\n}(SharePointQueryableCollection));\r\nexport { Fields };\r\n/**\r\n * Describes a single of Field instance\r\n *\r\n */\r\nvar Field = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Field, _super);\r\n    function Field() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Delete this fields\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Updates this field intance with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the list\r\n     * @param fieldType The type value, required to update child field type properties\r\n     */\r\n    Field.prototype.update = function (properties, fieldType) {\r\n        var _this = this;\r\n        if (fieldType === void 0) { fieldType = \""SP.Field\""; }\r\n        var postBody = jsS(extend(metadata(fieldType), properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Sets the value of the ShowInDisplayForm property for this field.\r\n     */\r\n    Field.prototype.setShowInDisplayForm = function (show) {\r\n        return this.clone(Field, \""setshowindisplayform(\"" + show + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Sets the value of the ShowInEditForm property for this field.\r\n     */\r\n    Field.prototype.setShowInEditForm = function (show) {\r\n        return this.clone(Field, \""setshowineditform(\"" + show + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Sets the value of the ShowInNewForm property for this field.\r\n     */\r\n    Field.prototype.setShowInNewForm = function (show) {\r\n        return this.clone(Field, \""setshowinnewform(\"" + show + \"")\"").postCore();\r\n    };\r\n    return Field;\r\n}(SharePointQueryableInstance));\r\nexport { Field };\r\n//# sourceMappingURL=fields.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { TextParser, BlobParser, JSONParser, BufferParser } from \""@pnp/odata\"";\r\nimport { extend, getGUID } from \""@pnp/common\"";\r\nimport { LimitedWebPartManager } from \""./webparts\"";\r\nimport { Item } from \""./items\"";\r\nimport { SharePointQueryableShareableFile } from \""./sharepointqueryableshareable\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\n/**\r\n * Describes a collection of File objects\r\n *\r\n */\r\nvar Files = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Files, _super);\r\n    function Files() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Files_1 = Files;\r\n    /**\r\n     * Gets a File by filename\r\n     *\r\n     * @param name The name of the file, including extension.\r\n     */\r\n    Files.prototype.getByName = function (name) {\r\n        var f = new File(this);\r\n        f.concat(\""('\"" + name + \""')\"");\r\n        return f;\r\n    };\r\n    /**\r\n     * Uploads a file. Not supported for batching\r\n     *\r\n     * @param url The folder-relative url of the file.\r\n     * @param content The file contents blob.\r\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true)\r\n     * @returns The new File and the raw response.\r\n     */\r\n    Files.prototype.add = function (url, content, shouldOverWrite) {\r\n        var _this = this;\r\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\r\n        return new Files_1(this, \""add(overwrite=\"" + shouldOverWrite + \"",url='\"" + url + \""')\"")\r\n            .postCore({\r\n            body: content,\r\n        }).then(function (response) {\r\n            return {\r\n                data: response,\r\n                file: _this.getByName(url),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Uploads a file. Not supported for batching\r\n     *\r\n     * @param url The folder-relative url of the file.\r\n     * @param content The Blob file content to add\r\n     * @param progress A callback function which can be used to track the progress of the upload\r\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true)\r\n     * @param chunkSize The size of each file slice, in bytes (default: 10485760)\r\n     * @returns The new File and the raw response.\r\n     */\r\n    Files.prototype.addChunked = function (url, content, progress, shouldOverWrite, chunkSize) {\r\n        var _this = this;\r\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\r\n        if (chunkSize === void 0) { chunkSize = 10485760; }\r\n        var adder = this.clone(Files_1, \""add(overwrite=\"" + shouldOverWrite + \"",url='\"" + url + \""')\"", false);\r\n        return adder.postCore()\r\n            .then(function () { return _this.getByName(url); })\r\n            .then(function (file) { return file.setContentChunked(content, progress, chunkSize); });\r\n    };\r\n    /**\r\n     * Adds a ghosted file to an existing list or document library. Not supported for batching.\r\n     *\r\n     * @param fileUrl The server-relative url where you want to save the file.\r\n     * @param templateFileType The type of use to create the file.\r\n     * @returns The template file that was added and the raw response.\r\n     */\r\n    Files.prototype.addTemplateFile = function (fileUrl, templateFileType) {\r\n        var _this = this;\r\n        return this.clone(Files_1, \""addTemplateFile(urloffile='\"" + fileUrl + \""',templatefiletype=\"" + templateFileType + \"")\"", false)\r\n            .postCore().then(function (response) {\r\n            return {\r\n                data: response,\r\n                file: _this.getByName(fileUrl),\r\n            };\r\n        });\r\n    };\r\n    var Files_1;\r\n    Files = Files_1 = tslib_1.__decorate([\r\n        defaultPath(\""files\"")\r\n    ], Files);\r\n    return Files;\r\n}(SharePointQueryableCollection));\r\nexport { Files };\r\n/**\r\n * Describes a single File instance\r\n *\r\n */\r\nvar File = /** @class */ (function (_super) {\r\n    tslib_1.__extends(File, _super);\r\n    function File() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(File.prototype, \""listItemAllFields\"", {\r\n        /**\r\n         * Gets a value that specifies the list item field values for the list item corresponding to the file.\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""listItemAllFields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(File.prototype, \""versions\"", {\r\n        /**\r\n         * Gets a collection of versions\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Versions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Approves the file submitted for content approval with the specified comment.\r\n     * Only documents in lists that are enabled for content approval can be approved.\r\n     *\r\n     * @param comment The comment for the approval.\r\n     */\r\n    File.prototype.approve = function (comment) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        return this.clone(File, \""approve(comment='\"" + comment + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Stops the chunk upload session without saving the uploaded data. Does not support batching.\r\n     * If the file doesn’t already exist in the library, the partially uploaded file will be deleted.\r\n     * Use this in response to user action (as in a request to cancel an upload) or an error or exception.\r\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\r\n     * This method is currently available only on Office 365.\r\n     *\r\n     * @param uploadId The unique identifier of the upload session.\r\n     */\r\n    File.prototype.cancelUpload = function (uploadId) {\r\n        return this.clone(File, \""cancelUpload(uploadId=guid'\"" + uploadId + \""')\"", false).postCore();\r\n    };\r\n    /**\r\n     * Checks the file in to a document library based on the check-in type.\r\n     *\r\n     * @param comment A comment for the check-in. Its length must be <= 1023.\r\n     * @param checkinType The check-in type for the file.\r\n     */\r\n    File.prototype.checkin = function (comment, checkinType) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        if (checkinType === void 0) { checkinType = CheckinType.Major; }\r\n        if (comment.length > 1023) {\r\n            throw Error(\""The maximum comment length is 1023 characters.\"");\r\n        }\r\n        return this.clone(File, \""checkin(comment='\"" + comment + \""',checkintype=\"" + checkinType + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Checks out the file from a document library.\r\n     */\r\n    File.prototype.checkout = function () {\r\n        return this.clone(File, \""checkout\"").postCore();\r\n    };\r\n    /**\r\n     * Copies the file to the destination url.\r\n     *\r\n     * @param url The absolute url or server relative url of the destination file path to copy to.\r\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten?\r\n     */\r\n    File.prototype.copyTo = function (url, shouldOverWrite) {\r\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\r\n        return this.clone(File, \""copyTo(strnewurl='\"" + url + \""',boverwrite=\"" + shouldOverWrite + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Delete this file.\r\n     *\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    File.prototype.delete = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.clone(File, null).postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Denies approval for a file that was submitted for content approval.\r\n     * Only documents in lists that are enabled for content approval can be denied.\r\n     *\r\n     * @param comment The comment for the denial.\r\n     */\r\n    File.prototype.deny = function (comment) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        if (comment.length > 1023) {\r\n            throw Error(\""The maximum comment length is 1023 characters.\"");\r\n        }\r\n        return this.clone(File, \""deny(comment='\"" + comment + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Specifies the control set used to access, modify, or add Web Parts associated with this Web Part Page and view.\r\n     * An exception is thrown if the file is not an ASPX page.\r\n     *\r\n     * @param scope The WebPartsPersonalizationScope view on the Web Parts page.\r\n     */\r\n    File.prototype.getLimitedWebPartManager = function (scope) {\r\n        if (scope === void 0) { scope = WebPartsPersonalizationScope.Shared; }\r\n        return new LimitedWebPartManager(this, \""getLimitedWebPartManager(scope=\"" + scope + \"")\"");\r\n    };\r\n    /**\r\n     * Moves the file to the specified destination url.\r\n     *\r\n     * @param url The absolute url or server relative url of the destination file path to move to.\r\n     * @param moveOperations The bitwise MoveOperations value for how to move the file.\r\n     */\r\n    File.prototype.moveTo = function (url, moveOperations) {\r\n        if (moveOperations === void 0) { moveOperations = MoveOperations.Overwrite; }\r\n        return this.clone(File, \""moveTo(newurl='\"" + url + \""',flags=\"" + moveOperations + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Submits the file for content approval with the specified comment.\r\n     *\r\n     * @param comment The comment for the published file. Its length must be <= 1023.\r\n     */\r\n    File.prototype.publish = function (comment) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        if (comment.length > 1023) {\r\n            throw Error(\""The maximum comment length is 1023 characters.\"");\r\n        }\r\n        return this.clone(File, \""publish(comment='\"" + comment + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Moves the file to the Recycle Bin and returns the identifier of the new Recycle Bin item.\r\n     *\r\n     * @returns The GUID of the recycled file.\r\n     */\r\n    File.prototype.recycle = function () {\r\n        return this.clone(File, \""recycle\"").postCore();\r\n    };\r\n    /**\r\n     * Reverts an existing checkout for the file.\r\n     *\r\n     */\r\n    File.prototype.undoCheckout = function () {\r\n        return this.clone(File, \""undoCheckout\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the file from content approval or unpublish a major version.\r\n     *\r\n     * @param comment The comment for the unpublish operation. Its length must be <= 1023.\r\n     */\r\n    File.prototype.unpublish = function (comment) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        if (comment.length > 1023) {\r\n            throw Error(\""The maximum comment length is 1023 characters.\"");\r\n        }\r\n        return this.clone(File, \""unpublish(comment='\"" + comment + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Gets the contents of the file as text. Not supported in batching.\r\n     *\r\n     */\r\n    File.prototype.getText = function () {\r\n        return this.clone(File, \""$value\"", false).get(new TextParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\r\n    };\r\n    /**\r\n     * Gets the contents of the file as a blob, does not work in Node.js. Not supported in batching.\r\n     *\r\n     */\r\n    File.prototype.getBlob = function () {\r\n        return this.clone(File, \""$value\"", false).get(new BlobParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\r\n    };\r\n    /**\r\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js. Not supported in batching.\r\n     */\r\n    File.prototype.getBuffer = function () {\r\n        return this.clone(File, \""$value\"", false).get(new BufferParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\r\n    };\r\n    /**\r\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js. Not supported in batching.\r\n     */\r\n    File.prototype.getJSON = function () {\r\n        return this.clone(File, \""$value\"", false).get(new JSONParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\r\n    };\r\n    /**\r\n     * Sets the content of a file, for large files use setContentChunked. Not supported in batching.\r\n     *\r\n     * @param content The file content\r\n     *\r\n     */\r\n    File.prototype.setContent = function (content) {\r\n        var _this = this;\r\n        return this.clone(File, \""$value\"", false).postCore({\r\n            body: content,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""PUT\"",\r\n            },\r\n        }).then(function (_) { return new File(_this); });\r\n    };\r\n    /**\r\n     * Gets the associated list item for this folder, loading the default properties\r\n     */\r\n    File.prototype.getItem = function () {\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        var q = this.listItemAllFields;\r\n        return q.select.apply(q, selects).get().then(function (d) {\r\n            return extend(new Item(odataUrlFrom(d)), d);\r\n        });\r\n    };\r\n    /**\r\n     * Sets the contents of a file using a chunked upload approach. Not supported in batching.\r\n     *\r\n     * @param file The file to upload\r\n     * @param progress A callback function which can be used to track the progress of the upload\r\n     * @param chunkSize The size of each file slice, in bytes (default: 10485760)\r\n     */\r\n    File.prototype.setContentChunked = function (file, progress, chunkSize) {\r\n        var _this = this;\r\n        if (chunkSize === void 0) { chunkSize = 10485760; }\r\n        if (progress === undefined) {\r\n            progress = function () { return null; };\r\n        }\r\n        var fileSize = file.size;\r\n        var blockCount = parseInt((file.size / chunkSize).toString(), 10) + ((file.size % chunkSize === 0) ? 1 : 0);\r\n        var uploadId = getGUID();\r\n        // start the chain with the first fragment\r\n        progress({ uploadId: uploadId, blockNumber: 1, chunkSize: chunkSize, currentPointer: 0, fileSize: fileSize, stage: \""starting\"", totalBlocks: blockCount });\r\n        var chain = this.startUpload(uploadId, file.slice(0, chunkSize));\r\n        var _loop_1 = function (i) {\r\n            chain = chain.then(function (pointer) {\r\n                progress({ uploadId: uploadId, blockNumber: i, chunkSize: chunkSize, currentPointer: pointer, fileSize: fileSize, stage: \""continue\"", totalBlocks: blockCount });\r\n                return _this.continueUpload(uploadId, pointer, file.slice(pointer, pointer + chunkSize));\r\n            });\r\n        };\r\n        // skip the first and last blocks\r\n        for (var i = 2; i < blockCount; i++) {\r\n            _loop_1(i);\r\n        }\r\n        return chain.then(function (pointer) {\r\n            progress({ uploadId: uploadId, blockNumber: blockCount, chunkSize: chunkSize, currentPointer: pointer, fileSize: fileSize, stage: \""finishing\"", totalBlocks: blockCount });\r\n            return _this.finishUpload(uploadId, pointer, file.slice(pointer));\r\n        });\r\n    };\r\n    /**\r\n     * Starts a new chunk upload session and uploads the first fragment.\r\n     * The current file content is not changed when this method completes.\r\n     * The method is idempotent (and therefore does not change the result) as long as you use the same values for uploadId and stream.\r\n     * The upload session ends either when you use the CancelUpload method or when you successfully\r\n     * complete the upload session by passing the rest of the file contents through the ContinueUpload and FinishUpload methods.\r\n     * The StartUpload and ContinueUpload methods return the size of the running total of uploaded data in bytes,\r\n     * so you can pass those return values to subsequent uses of ContinueUpload and FinishUpload.\r\n     * This method is currently available only on Office 365.\r\n     *\r\n     * @param uploadId The unique identifier of the upload session.\r\n     * @param fragment The file contents.\r\n     * @returns The size of the total uploaded data in bytes.\r\n     */\r\n    File.prototype.startUpload = function (uploadId, fragment) {\r\n        return this.clone(File, \""startUpload(uploadId=guid'\"" + uploadId + \""')\"", false)\r\n            .postCore({ body: fragment })\r\n            .then(function (n) {\r\n            // When OData=verbose the payload has the following shape:\r\n            // { StartUpload: \""10485760\"" }\r\n            if (typeof n === \""object\"") {\r\n                n = n.StartUpload;\r\n            }\r\n            return parseFloat(n);\r\n        });\r\n    };\r\n    /**\r\n     * Continues the chunk upload session with an additional fragment.\r\n     * The current file content is not changed.\r\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\r\n     * This method is currently available only on Office 365.\r\n     *\r\n     * @param uploadId The unique identifier of the upload session.\r\n     * @param fileOffset The size of the offset into the file where the fragment starts.\r\n     * @param fragment The file contents.\r\n     * @returns The size of the total uploaded data in bytes.\r\n     */\r\n    File.prototype.continueUpload = function (uploadId, fileOffset, fragment) {\r\n        return this.clone(File, \""continueUpload(uploadId=guid'\"" + uploadId + \""',fileOffset=\"" + fileOffset + \"")\"", false)\r\n            .postCore({ body: fragment })\r\n            .then(function (n) {\r\n            // When OData=verbose the payload has the following shape:\r\n            // { ContinueUpload: \""20971520\"" }\r\n            if (typeof n === \""object\"") {\r\n                n = n.ContinueUpload;\r\n            }\r\n            return parseFloat(n);\r\n        });\r\n    };\r\n    /**\r\n     * Uploads the last file fragment and commits the file. The current file content is changed when this method completes.\r\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\r\n     * This method is currently available only on Office 365.\r\n     *\r\n     * @param uploadId The unique identifier of the upload session.\r\n     * @param fileOffset The size of the offset into the file where the fragment starts.\r\n     * @param fragment The file contents.\r\n     * @returns The newly uploaded file.\r\n     */\r\n    File.prototype.finishUpload = function (uploadId, fileOffset, fragment) {\r\n        return this.clone(File, \""finishUpload(uploadId=guid'\"" + uploadId + \""',fileOffset=\"" + fileOffset + \"")\"", false)\r\n            .postCore({ body: fragment })\r\n            .then(function (response) {\r\n            return {\r\n                data: response,\r\n                file: new File(odataUrlFrom(response)),\r\n            };\r\n        });\r\n    };\r\n    return File;\r\n}(SharePointQueryableShareableFile));\r\nexport { File };\r\n/**\r\n * Describes a collection of Version objects\r\n *\r\n */\r\nvar Versions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Versions, _super);\r\n    function Versions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Versions_1 = Versions;\r\n    /**\r\n     * Gets a version by id\r\n     *\r\n     * @param versionId The id of the version to retrieve\r\n     */\r\n    Versions.prototype.getById = function (versionId) {\r\n        var v = new Version(this);\r\n        v.concat(\""(\"" + versionId + \"")\"");\r\n        return v;\r\n    };\r\n    /**\r\n     * Deletes all the file version objects in the collection.\r\n     *\r\n     */\r\n    Versions.prototype.deleteAll = function () {\r\n        return new Versions_1(this, \""deleteAll\"").postCore();\r\n    };\r\n    /**\r\n     * Deletes the specified version of the file.\r\n     *\r\n     * @param versionId The ID of the file version to delete.\r\n     */\r\n    Versions.prototype.deleteById = function (versionId) {\r\n        return this.clone(Versions_1, \""deleteById(vid=\"" + versionId + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Recycles the specified version of the file.\r\n     *\r\n     * @param versionId The ID of the file version to delete.\r\n     */\r\n    Versions.prototype.recycleByID = function (versionId) {\r\n        return this.clone(Versions_1, \""recycleByID(vid=\"" + versionId + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Deletes the file version object with the specified version label.\r\n     *\r\n     * @param label The version label of the file version to delete, for example: 1.2\r\n     */\r\n    Versions.prototype.deleteByLabel = function (label) {\r\n        return this.clone(Versions_1, \""deleteByLabel(versionlabel='\"" + label + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Recycles the file version object with the specified version label.\r\n     *\r\n     * @param label The version label of the file version to delete, for example: 1.2\r\n     */\r\n    Versions.prototype.recycleByLabel = function (label) {\r\n        return this.clone(Versions_1, \""recycleByLabel(versionlabel='\"" + label + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Creates a new file version from the file specified by the version label.\r\n     *\r\n     * @param label The version label of the file version to restore, for example: 1.2\r\n     */\r\n    Versions.prototype.restoreByLabel = function (label) {\r\n        return this.clone(Versions_1, \""restoreByLabel(versionlabel='\"" + label + \""')\"").postCore();\r\n    };\r\n    var Versions_1;\r\n    Versions = Versions_1 = tslib_1.__decorate([\r\n        defaultPath(\""versions\"")\r\n    ], Versions);\r\n    return Versions;\r\n}(SharePointQueryableCollection));\r\nexport { Versions };\r\n/**\r\n * Describes a single Version instance\r\n *\r\n */\r\nvar Version = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Version, _super);\r\n    function Version() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n        * Delete a specific version of a file.\r\n        *\r\n        * @param eTag Value used in the IF-Match header, by default \""*\""\r\n        */\r\n        _this.delete = _this._deleteWithETag;\r\n        return _this;\r\n        // /**\r\n        // * Delete a specific version of a file.\r\n        // *\r\n        // * @param eTag Value used in the IF-Match header, by default \""*\""\r\n        // */\r\n        // public delete(eTag = \""*\""): Promise<void> {\r\n        //     return this.postCore({\r\n        //         headers: {\r\n        //             \""IF-Match\"": eTag,\r\n        //             \""X-HTTP-Method\"": \""DELETE\"",\r\n        //         },\r\n        //     });\r\n        // }\r\n    }\r\n    return Version;\r\n}(SharePointQueryableInstance));\r\nexport { Version };\r\nexport var CheckinType;\r\n(function (CheckinType) {\r\n    CheckinType[CheckinType[\""Minor\""] = 0] = \""Minor\"";\r\n    CheckinType[CheckinType[\""Major\""] = 1] = \""Major\"";\r\n    CheckinType[CheckinType[\""Overwrite\""] = 2] = \""Overwrite\"";\r\n})(CheckinType || (CheckinType = {}));\r\nexport var WebPartsPersonalizationScope;\r\n(function (WebPartsPersonalizationScope) {\r\n    WebPartsPersonalizationScope[WebPartsPersonalizationScope[\""User\""] = 0] = \""User\"";\r\n    WebPartsPersonalizationScope[WebPartsPersonalizationScope[\""Shared\""] = 1] = \""Shared\"";\r\n})(WebPartsPersonalizationScope || (WebPartsPersonalizationScope = {}));\r\nexport var MoveOperations;\r\n(function (MoveOperations) {\r\n    MoveOperations[MoveOperations[\""Overwrite\""] = 1] = \""Overwrite\"";\r\n    MoveOperations[MoveOperations[\""AllowBrokenThickets\""] = 8] = \""AllowBrokenThickets\"";\r\n})(MoveOperations || (MoveOperations = {}));\r\nexport var TemplateFileType;\r\n(function (TemplateFileType) {\r\n    TemplateFileType[TemplateFileType[\""StandardPage\""] = 0] = \""StandardPage\"";\r\n    TemplateFileType[TemplateFileType[\""WikiPage\""] = 1] = \""WikiPage\"";\r\n    TemplateFileType[TemplateFileType[\""FormPage\""] = 2] = \""FormPage\"";\r\n    TemplateFileType[TemplateFileType[\""ClientSidePage\""] = 3] = \""ClientSidePage\"";\r\n})(TemplateFileType || (TemplateFileType = {}));\r\n//# sourceMappingURL=files.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { SharePointQueryable, SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableShareableFolder } from \""./sharepointqueryableshareable\"";\r\nimport { Files } from \""./files\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { Item } from \""./items\"";\r\nimport { SPHttpClient } from \""./net/sphttpclient\"";\r\n/**\r\n * Describes a collection of Folder objects\r\n *\r\n */\r\nvar Folders = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Folders, _super);\r\n    function Folders() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Folders_1 = Folders;\r\n    /**\r\n     * Gets a folder by folder name\r\n     *\r\n     */\r\n    Folders.prototype.getByName = function (name) {\r\n        var f = new Folder(this);\r\n        f.concat(\""('\"" + name + \""')\"");\r\n        return f;\r\n    };\r\n    /**\r\n     * Adds a new folder to the current folder (relative) or any folder (absolute)\r\n     *\r\n     * @param url The relative or absolute url where the new folder will be created. Urls starting with a forward slash are absolute.\r\n     * @returns The new Folder and the raw response.\r\n     */\r\n    Folders.prototype.add = function (url) {\r\n        var _this = this;\r\n        return this.clone(Folders_1, \""add('\"" + url + \""')\"").postCore().then(function (response) {\r\n            return {\r\n                data: response,\r\n                folder: _this.getByName(url),\r\n            };\r\n        });\r\n    };\r\n    var Folders_1;\r\n    Folders = Folders_1 = tslib_1.__decorate([\r\n        defaultPath(\""folders\"")\r\n    ], Folders);\r\n    return Folders;\r\n}(SharePointQueryableCollection));\r\nexport { Folders };\r\n/**\r\n * Describes a single Folder instance\r\n *\r\n */\r\nvar Folder = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Folder, _super);\r\n    function Folder() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.update = _this._update(\""SP.Folder\"", function (data) { return ({ data: data, folder: _this }); });\r\n        return _this;\r\n    }\r\n    Object.defineProperty(Folder.prototype, \""contentTypeOrder\"", {\r\n        /**\r\n         * Specifies the sequence in which content types are displayed.\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""contentTypeOrder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""files\"", {\r\n        /**\r\n         * Gets this folder's files\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Files(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""folders\"", {\r\n        /**\r\n         * Gets this folder's sub folders\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folders(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""listItemAllFields\"", {\r\n        /**\r\n         * Gets this folder's list item field values\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""listItemAllFields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""parentFolder\"", {\r\n        /**\r\n         * Gets the parent folder, if available\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folder(this, \""parentFolder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""properties\"", {\r\n        /**\r\n         * Gets this folder's properties\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""properties\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""serverRelativeUrl\"", {\r\n        /**\r\n         * Gets this folder's server relative url\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""serverRelativeUrl\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""uniqueContentTypeOrder\"", {\r\n        /**\r\n         * Gets a value that specifies the content type order.\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""uniqueContentTypeOrder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n    * Delete this folder\r\n    *\r\n    * @param eTag Value used in the IF-Match header, by default \""*\""\r\n    */\r\n    Folder.prototype.delete = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.clone(Folder, null).postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Moves the folder to the Recycle Bin and returns the identifier of the new Recycle Bin item.\r\n     */\r\n    Folder.prototype.recycle = function () {\r\n        return this.clone(Folder, \""recycle\"").postCore();\r\n    };\r\n    /**\r\n     * Gets the associated list item for this folder, loading the default properties\r\n     */\r\n    Folder.prototype.getItem = function () {\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        var q = this.listItemAllFields;\r\n        return q.select.apply(q, selects).get().then(function (d) {\r\n            return extend(new Item(odataUrlFrom(d)), d);\r\n        });\r\n    };\r\n    /**\r\n     * Moves a folder to destination path\r\n     *\r\n     * @param destUrl Absolute or relative URL of the destination path\r\n     */\r\n    Folder.prototype.moveTo = function (destUrl) {\r\n        var _this = this;\r\n        return this.select(\""ServerRelativeUrl\"").get().then(function (_a) {\r\n            var srcUrl = _a.ServerRelativeUrl;\r\n            var client = new SPHttpClient();\r\n            var webBaseUrl = _this.toUrl().split(\""/_api\"")[0];\r\n            var hostUrl = webBaseUrl.replace(\""://\"", \""___\"").split(\""/\"")[0].replace(\""___\"", \""://\"");\r\n            var methodUrl = webBaseUrl + \""/_api/SP.MoveCopyUtil.MoveFolder()\"";\r\n            return client.post(methodUrl, {\r\n                body: jsS({\r\n                    destUrl: destUrl.indexOf(\""http\"") === 0 ? destUrl : \""\"" + hostUrl + destUrl,\r\n                    srcUrl: \""\"" + hostUrl + srcUrl,\r\n                }),\r\n            }).then(function (r) { return r.json(); });\r\n        });\r\n    };\r\n    return Folder;\r\n}(SharePointQueryableShareableFolder));\r\nexport { Folder };\r\n//# sourceMappingURL=folders.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\n/**\r\n * Describes a collection of Field objects\r\n *\r\n */\r\nvar Forms = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Forms, _super);\r\n    function Forms() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a form by id\r\n     *\r\n     * @param id The guid id of the item to retrieve\r\n     */\r\n    Forms.prototype.getById = function (id) {\r\n        var i = new Form(this);\r\n        i.concat(\""('\"" + id + \""')\"");\r\n        return i;\r\n    };\r\n    Forms = tslib_1.__decorate([\r\n        defaultPath(\""forms\"")\r\n    ], Forms);\r\n    return Forms;\r\n}(SharePointQueryableCollection));\r\nexport { Forms };\r\n/**\r\n * Describes a single of Form instance\r\n *\r\n */\r\nvar Form = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Form, _super);\r\n    function Form() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Form;\r\n}(SharePointQueryableInstance));\r\nexport { Form };\r\n//# sourceMappingURL=forms.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableShareableItem } from \""./sharepointqueryableshareable\"";\r\nimport { Folder } from \""./folders\"";\r\nimport { File } from \""./files\"";\r\nimport { ContentType } from \""./contenttypes\"";\r\nimport { extend, jsS, hOP } from \""@pnp/common\"";\r\nimport { ODataParserBase } from \""@pnp/odata\"";\r\nimport { AttachmentFiles } from \""./attachmentfiles\"";\r\nimport { List } from \""./lists\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { Comments } from \""./comments\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of Item objects\r\n *\r\n */\r\nvar Items = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Items, _super);\r\n    function Items() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Items_1 = Items;\r\n    /**\r\n    * Gets an Item by id\r\n    *\r\n    * @param id The integer id of the item to retrieve\r\n    */\r\n    Items.prototype.getById = function (id) {\r\n        var i = new Item(this);\r\n        i.concat(\""(\"" + id + \"")\"");\r\n        return i;\r\n    };\r\n    /**\r\n     * Gets BCS Item by string id\r\n     *\r\n     * @param stringId The string id of the BCS item to retrieve\r\n     */\r\n    Items.prototype.getItemByStringId = function (stringId) {\r\n        // creates an item with the parent list path and append out method call\r\n        return new Item(this.parentUrl, \""getItemByStringId('\"" + stringId + \""')\"");\r\n    };\r\n    /**\r\n     * Skips the specified number of items (https://msdn.microsoft.com/en-us/library/office/fp142385.aspx#sectionSection6)\r\n     *\r\n     * @param skip The starting id where the page should start, use with top to specify pages\r\n     * @param reverse It true the PagedPrev=true parameter is added allowing backwards navigation in the collection\r\n     */\r\n    Items.prototype.skip = function (skip, reverse) {\r\n        if (reverse === void 0) { reverse = false; }\r\n        if (reverse) {\r\n            this.query.set(\""$skiptoken\"", encodeURIComponent(\""Paged=TRUE&PagedPrev=TRUE&p_ID=\"" + skip));\r\n        }\r\n        else {\r\n            this.query.set(\""$skiptoken\"", encodeURIComponent(\""Paged=TRUE&p_ID=\"" + skip));\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets a collection designed to aid in paging through data\r\n     *\r\n     */\r\n    Items.prototype.getPaged = function () {\r\n        return this.get(new PagedItemCollectionParser(this));\r\n    };\r\n    /**\r\n     * Gets all the items in a list, regardless of count. Does not support batching or caching\r\n     *\r\n     *  @param requestSize Number of items to return in each request (Default: 2000)\r\n     *  @param acceptHeader Allows for setting the value of the Accept header for SP 2013 support\r\n     */\r\n    Items.prototype.getAll = function (requestSize, acceptHeader) {\r\n        if (requestSize === void 0) { requestSize = 2000; }\r\n        if (acceptHeader === void 0) { acceptHeader = \""application/json;odata=nometadata\""; }\r\n        Logger.write(\""Calling items.getAll should be done sparingly. Ensure this is the correct choice. If you are unsure, it is not.\"", 2 /* Warning */);\r\n        // this will be used for the actual query\r\n        // and we set no metadata here to try and reduce traffic\r\n        var items = new Items_1(this, \""\"").top(requestSize).configure({\r\n            headers: {\r\n                \""Accept\"": acceptHeader,\r\n            },\r\n        });\r\n        // let's copy over the odata query params that can be applied\r\n        // $top - allow setting the page size this way (override what we did above)\r\n        // $select - allow picking the return fields (good behavior)\r\n        // $filter - allow setting a filter, though this may fail due for large lists\r\n        this.query.forEach(function (v, k) {\r\n            if (/^\\$select|filter|top|expand$/i.test(k)) {\r\n                items.query.set(k, v);\r\n            }\r\n        });\r\n        // give back the promise\r\n        return new Promise(function (resolve, reject) {\r\n            // this will eventually hold the items we return\r\n            var itemsCollector = [];\r\n            // action that will gather up our results recursively\r\n            var gatherer = function (last) {\r\n                // collect that set of results\r\n                [].push.apply(itemsCollector, last.results);\r\n                // if we have more, repeat - otherwise resolve with the collected items\r\n                if (last.hasNext) {\r\n                    last.getNext().then(gatherer).catch(reject);\r\n                }\r\n                else {\r\n                    resolve(itemsCollector);\r\n                }\r\n            };\r\n            // start the cycle\r\n            items.getPaged().then(gatherer).catch(reject);\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new item to the collection\r\n     *\r\n     * @param properties The new items's properties\r\n     * @param listItemEntityTypeFullName The type name of the list's entities\r\n     */\r\n    Items.prototype.add = function (properties, listItemEntityTypeFullName) {\r\n        var _this = this;\r\n        if (properties === void 0) { properties = {}; }\r\n        if (listItemEntityTypeFullName === void 0) { listItemEntityTypeFullName = null; }\r\n        var removeDependency = this.addBatchDependency();\r\n        return this.ensureListItemEntityTypeName(listItemEntityTypeFullName).then(function (listItemEntityType) {\r\n            var postBody = jsS(extend(metadata(listItemEntityType), properties));\r\n            var promise = _this.clone(Items_1, \""\"").postCore({ body: postBody }).then(function (data) {\r\n                return {\r\n                    data: data,\r\n                    item: _this.getById(data.Id),\r\n                };\r\n            });\r\n            removeDependency();\r\n            return promise;\r\n        });\r\n    };\r\n    /**\r\n     * Ensures we have the proper list item entity type name, either from the value provided or from the list\r\n     *\r\n     * @param candidatelistItemEntityTypeFullName The potential type name\r\n     */\r\n    Items.prototype.ensureListItemEntityTypeName = function (candidatelistItemEntityTypeFullName) {\r\n        return candidatelistItemEntityTypeFullName ?\r\n            Promise.resolve(candidatelistItemEntityTypeFullName) :\r\n            this.getParent(List).getListItemEntityTypeFullName();\r\n    };\r\n    var Items_1;\r\n    Items = Items_1 = tslib_1.__decorate([\r\n        defaultPath(\""items\"")\r\n    ], Items);\r\n    return Items;\r\n}(SharePointQueryableCollection));\r\nexport { Items };\r\n/**\r\n * Descrines a single Item instance\r\n *\r\n */\r\nvar Item = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Item, _super);\r\n    function Item() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Delete this item\r\n         *\r\n         * @param eTag Value used in the IF-Match header, by default \""*\""\r\n         */\r\n        _this.delete = _this._deleteWithETag;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(Item.prototype, \""attachmentFiles\"", {\r\n        /**\r\n         * Gets the set of attachments for this item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new AttachmentFiles(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""contentType\"", {\r\n        /**\r\n         * Gets the content type for this item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new ContentType(this, \""ContentType\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""comments\"", {\r\n        /**\r\n         * Gets the collection of comments associated with this list item\r\n         */\r\n        get: function () {\r\n            return new Comments(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""effectiveBasePermissions\"", {\r\n        /**\r\n         * Gets the effective base permissions for the item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""EffectiveBasePermissions\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""effectiveBasePermissionsForUI\"", {\r\n        /**\r\n         * Gets the effective base permissions for the item in a UI context\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""EffectiveBasePermissionsForUI\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""fieldValuesAsHTML\"", {\r\n        /**\r\n         * Gets the field values for this list item in their HTML representation\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""FieldValuesAsHTML\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""fieldValuesAsText\"", {\r\n        /**\r\n         * Gets the field values for this list item in their text representation\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""FieldValuesAsText\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""fieldValuesForEdit\"", {\r\n        /**\r\n         * Gets the field values for this list item for use in editing controls\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""FieldValuesForEdit\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""folder\"", {\r\n        /**\r\n         * Gets the folder associated with this list item (if this item represents a folder)\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folder(this, \""folder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""file\"", {\r\n        /**\r\n         * Gets the folder associated with this list item (if this item represents a folder)\r\n         *\r\n         */\r\n        get: function () {\r\n            return new File(this, \""file\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""versions\"", {\r\n        /**\r\n         * Gets the collection of versions associated with this item\r\n         */\r\n        get: function () {\r\n            return new ItemVersions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Updates this list intance with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the list\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     * @param listItemEntityTypeFullName The type name of the list's entities\r\n     */\r\n    Item.prototype.update = function (properties, eTag, listItemEntityTypeFullName) {\r\n        var _this = this;\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        if (listItemEntityTypeFullName === void 0) { listItemEntityTypeFullName = null; }\r\n        return new Promise(function (resolve, reject) {\r\n            var removeDependency = _this.addBatchDependency();\r\n            return _this.ensureListItemEntityTypeName(listItemEntityTypeFullName).then(function (listItemEntityType) {\r\n                var postBody = jsS(extend(metadata(listItemEntityType), properties));\r\n                removeDependency();\r\n                return _this.postCore({\r\n                    body: postBody,\r\n                    headers: {\r\n                        \""IF-Match\"": eTag,\r\n                        \""X-HTTP-Method\"": \""MERGE\"",\r\n                    },\r\n                }, new ItemUpdatedParser()).then(function (data) {\r\n                    resolve({\r\n                        data: data,\r\n                        item: _this,\r\n                    });\r\n                });\r\n            }).catch(function (e) { return reject(e); });\r\n        });\r\n    };\r\n    /**\r\n     * Gets the collection of people who have liked this item\r\n     */\r\n    Item.prototype.getLikedBy = function () {\r\n        return this.clone(Item, \""likedBy\"").postCore();\r\n    };\r\n    /**\r\n     * Likes this item as the current user\r\n     */\r\n    Item.prototype.like = function () {\r\n        return this.clone(Item, \""like\"").postCore();\r\n    };\r\n    /**\r\n     * Unlikes this item as the current user\r\n     */\r\n    Item.prototype.unlike = function () {\r\n        return this.clone(Item, \""unlike\"").postCore();\r\n    };\r\n    /**\r\n     * Moves the list item to the Recycle Bin and returns the identifier of the new Recycle Bin item.\r\n     */\r\n    Item.prototype.recycle = function () {\r\n        return this.clone(Item, \""recycle\"").postCore();\r\n    };\r\n    /**\r\n     * Gets a string representation of the full URL to the WOPI frame.\r\n     * If there is no associated WOPI application, or no associated action, an empty string is returned.\r\n     *\r\n     * @param action Display mode: 0: view, 1: edit, 2: mobileView, 3: interactivePreview\r\n     */\r\n    Item.prototype.getWopiFrameUrl = function (action) {\r\n        if (action === void 0) { action = 0; }\r\n        var i = this.clone(Item, \""getWOPIFrameUrl(@action)\"");\r\n        i.query.set(\""@action\"", action);\r\n        return i.postCore().then(function (data) {\r\n            // handle verbose mode\r\n            if (hOP(data, \""GetWOPIFrameUrl\"")) {\r\n                return data.GetWOPIFrameUrl;\r\n            }\r\n            return data;\r\n        });\r\n    };\r\n    /**\r\n     * Validates and sets the values of the specified collection of fields for the list item.\r\n     *\r\n     * @param formValues The fields to change and their new values.\r\n     * @param newDocumentUpdate true if the list item is a document being updated after upload; otherwise false.\r\n     */\r\n    Item.prototype.validateUpdateListItem = function (formValues, newDocumentUpdate) {\r\n        if (newDocumentUpdate === void 0) { newDocumentUpdate = false; }\r\n        return this.clone(Item, \""validateupdatelistitem\"").postCore({\r\n            body: jsS({ \""formValues\"": formValues, bNewDocumentUpdate: newDocumentUpdate }),\r\n        });\r\n    };\r\n    /**\r\n     * Get the like by information for a modern site page\r\n     */\r\n    Item.prototype.getLikedByInformation = function () {\r\n        return this.clone(Item, \""likedByInformation\"").expand(\""likedby\"").getCore();\r\n    };\r\n    /**\r\n     * Ensures we have the proper list item entity type name, either from the value provided or from the list\r\n     *\r\n     * @param candidatelistItemEntityTypeFullName The potential type name\r\n     */\r\n    Item.prototype.ensureListItemEntityTypeName = function (candidatelistItemEntityTypeFullName) {\r\n        return candidatelistItemEntityTypeFullName ?\r\n            Promise.resolve(candidatelistItemEntityTypeFullName) :\r\n            this.getParent(List, this.parentUrl.substr(0, this.parentUrl.lastIndexOf(\""/\""))).getListItemEntityTypeFullName();\r\n    };\r\n    return Item;\r\n}(SharePointQueryableShareableItem));\r\nexport { Item };\r\n/**\r\n * Describes a collection of Version objects\r\n *\r\n */\r\nvar ItemVersions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ItemVersions, _super);\r\n    function ItemVersions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a version by id\r\n     *\r\n     * @param versionId The id of the version to retrieve\r\n     */\r\n    ItemVersions.prototype.getById = function (versionId) {\r\n        var v = new ItemVersion(this);\r\n        v.concat(\""(\"" + versionId + \"")\"");\r\n        return v;\r\n    };\r\n    ItemVersions = tslib_1.__decorate([\r\n        defaultPath(\""versions\"")\r\n    ], ItemVersions);\r\n    return ItemVersions;\r\n}(SharePointQueryableCollection));\r\nexport { ItemVersions };\r\n/**\r\n * Describes a single Version instance\r\n *\r\n */\r\nvar ItemVersion = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ItemVersion, _super);\r\n    function ItemVersion() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n        * Delete a specific version of a file.\r\n        *\r\n        * @param eTag Value used in the IF-Match header, by default \""*\""\r\n        */\r\n        _this.delete = _this._deleteWithETag;\r\n        return _this;\r\n    }\r\n    return ItemVersion;\r\n}(SharePointQueryableInstance));\r\nexport { ItemVersion };\r\n/**\r\n * Provides paging functionality for list items\r\n */\r\nvar PagedItemCollection = /** @class */ (function () {\r\n    function PagedItemCollection(parent, nextUrl, results) {\r\n        this.parent = parent;\r\n        this.nextUrl = nextUrl;\r\n        this.results = results;\r\n    }\r\n    Object.defineProperty(PagedItemCollection.prototype, \""hasNext\"", {\r\n        /**\r\n         * If true there are more results available in the set, otherwise there are not\r\n         */\r\n        get: function () {\r\n            return typeof this.nextUrl === \""string\"" && this.nextUrl.length > 0;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the next set of results, or resolves to null if no results are available\r\n     */\r\n    PagedItemCollection.prototype.getNext = function () {\r\n        if (this.hasNext) {\r\n            var items = new Items(this.nextUrl, null).configureFrom(this.parent);\r\n            return items.getPaged();\r\n        }\r\n        return new Promise(function (r) { return r(null); });\r\n    };\r\n    return PagedItemCollection;\r\n}());\r\nexport { PagedItemCollection };\r\nvar PagedItemCollectionParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(PagedItemCollectionParser, _super);\r\n    function PagedItemCollectionParser(_parent) {\r\n        var _this = _super.call(this) || this;\r\n        _this._parent = _parent;\r\n        return _this;\r\n    }\r\n    PagedItemCollectionParser.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (_this.handleError(r, reject)) {\r\n                r.json().then(function (json) {\r\n                    var nextUrl = hOP(json, \""d\"") && hOP(json.d, \""__next\"") ? json.d.__next : json[\""odata.nextLink\""];\r\n                    resolve(new PagedItemCollection(_this._parent, nextUrl, _this.parseODataJSON(json)));\r\n                });\r\n            }\r\n        });\r\n    };\r\n    return PagedItemCollectionParser;\r\n}(ODataParserBase));\r\nvar ItemUpdatedParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ItemUpdatedParser, _super);\r\n    function ItemUpdatedParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ItemUpdatedParser.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (_this.handleError(r, reject)) {\r\n                resolve({\r\n                    \""odata.etag\"": r.headers.get(\""etag\""),\r\n                });\r\n            }\r\n        });\r\n    };\r\n    return ItemUpdatedParser;\r\n}(ODataParserBase));\r\n//# sourceMappingURL=items.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { Items } from \""./items\"";\r\nimport { Views, View } from \""./views\"";\r\nimport { ContentTypes } from \""./contenttypes\"";\r\nimport { Fields } from \""./fields\"";\r\nimport { Forms } from \""./forms\"";\r\nimport { Subscriptions } from \""./subscriptions\"";\r\nimport { SharePointQueryable, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableSecurable } from \""./sharepointqueryablesecurable\"";\r\nimport { extend, hOP, jsS } from \""@pnp/common\"";\r\nimport { UserCustomActions } from \""./usercustomactions\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { Folder } from \""./folders\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of List objects\r\n *\r\n */\r\nvar Lists = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Lists, _super);\r\n    function Lists() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Lists_1 = Lists;\r\n    /**\r\n     * Gets a list from the collection by guid id\r\n     *\r\n     * @param id The Id of the list (GUID)\r\n     */\r\n    Lists.prototype.getById = function (id) {\r\n        var list = new List(this);\r\n        list.concat(\""('\"" + id + \""')\"");\r\n        return list;\r\n    };\r\n    /**\r\n     * Gets a list from the collection by title\r\n     *\r\n     * @param title The title of the list\r\n     */\r\n    Lists.prototype.getByTitle = function (title) {\r\n        return new List(this, \""getByTitle('\"" + title + \""')\"");\r\n    };\r\n    /**\r\n     * Adds a new list to the collection\r\n     *\r\n     * @param title The new list's title\r\n     * @param description The new list's description\r\n     * @param template The list template value\r\n     * @param enableContentTypes If true content types will be allowed and enabled, otherwise they will be disallowed and not enabled\r\n     * @param additionalSettings Will be passed as part of the list creation body\r\n     */\r\n    Lists.prototype.add = function (title, description, template, enableContentTypes, additionalSettings) {\r\n        var _this = this;\r\n        if (description === void 0) { description = \""\""; }\r\n        if (template === void 0) { template = 100; }\r\n        if (enableContentTypes === void 0) { enableContentTypes = false; }\r\n        if (additionalSettings === void 0) { additionalSettings = {}; }\r\n        var addSettings = extend({\r\n            \""AllowContentTypes\"": enableContentTypes,\r\n            \""BaseTemplate\"": template,\r\n            \""ContentTypesEnabled\"": enableContentTypes,\r\n            \""Description\"": description,\r\n            \""Title\"": title,\r\n            \""__metadata\"": { \""type\"": \""SP.List\"" },\r\n        }, additionalSettings);\r\n        return this.postCore({ body: jsS(addSettings) }).then(function (data) {\r\n            return { data: data, list: _this.getByTitle(addSettings.Title) };\r\n        });\r\n    };\r\n    /**\r\n     * Ensures that the specified list exists in the collection (note: this method not supported for batching)\r\n     *\r\n     * @param title The new list's title\r\n     * @param description The new list's description\r\n     * @param template The list template value\r\n     * @param enableContentTypes If true content types will be allowed and enabled, otherwise they will be disallowed and not enabled\r\n     * @param additionalSettings Will be passed as part of the list creation body or used to update an existing list\r\n     */\r\n    Lists.prototype.ensure = function (title, description, template, enableContentTypes, additionalSettings) {\r\n        var _this = this;\r\n        if (description === void 0) { description = \""\""; }\r\n        if (template === void 0) { template = 100; }\r\n        if (enableContentTypes === void 0) { enableContentTypes = false; }\r\n        if (additionalSettings === void 0) { additionalSettings = {}; }\r\n        if (this.hasBatch) {\r\n            throw Error(\""The ensure list method is not supported for use in a batch.\"");\r\n        }\r\n        return new Promise(function (resolve, reject) {\r\n            var addOrUpdateSettings = extend(additionalSettings, { Title: title, Description: description, ContentTypesEnabled: enableContentTypes }, true);\r\n            var list = _this.getByTitle(addOrUpdateSettings.Title);\r\n            list.get().then(function (_) {\r\n                list.update(addOrUpdateSettings).then(function (d) {\r\n                    resolve({ created: false, data: d, list: _this.getByTitle(addOrUpdateSettings.Title) });\r\n                }).catch(function (e) { return reject(e); });\r\n            }).catch(function (_) {\r\n                _this.add(title, description, template, enableContentTypes, addOrUpdateSettings).then(function (r) {\r\n                    resolve({ created: true, data: r.data, list: _this.getByTitle(addOrUpdateSettings.Title) });\r\n                }).catch(function (e) { return reject(e); });\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list that is the default asset location for images or other files, which the users upload to their wiki pages.\r\n     */\r\n    Lists.prototype.ensureSiteAssetsLibrary = function () {\r\n        return this.clone(Lists_1, \""ensuresiteassetslibrary\"").postCore().then(function (json) {\r\n            return new List(odataUrlFrom(json));\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list that is the default location for wiki pages.\r\n     */\r\n    Lists.prototype.ensureSitePagesLibrary = function () {\r\n        return this.clone(Lists_1, \""ensuresitepageslibrary\"").postCore().then(function (json) {\r\n            return new List(odataUrlFrom(json));\r\n        });\r\n    };\r\n    var Lists_1;\r\n    Lists = Lists_1 = tslib_1.__decorate([\r\n        defaultPath(\""lists\"")\r\n    ], Lists);\r\n    return Lists;\r\n}(SharePointQueryableCollection));\r\nexport { Lists };\r\n/**\r\n * Describes a single List instance\r\n *\r\n */\r\nvar List = /** @class */ (function (_super) {\r\n    tslib_1.__extends(List, _super);\r\n    function List() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(List.prototype, \""contentTypes\"", {\r\n        /**\r\n         * Gets the content types in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new ContentTypes(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""items\"", {\r\n        /**\r\n         * Gets the items in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Items(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""views\"", {\r\n        /**\r\n         * Gets the views in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Views(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""fields\"", {\r\n        /**\r\n         * Gets the fields in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Fields(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""forms\"", {\r\n        /**\r\n         * Gets the forms in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Forms(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""defaultView\"", {\r\n        /**\r\n         * Gets the default view of this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new View(this, \""DefaultView\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""userCustomActions\"", {\r\n        /**\r\n         * Get all custom actions on a site collection\r\n         *\r\n         */\r\n        get: function () {\r\n            return new UserCustomActions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""effectiveBasePermissions\"", {\r\n        /**\r\n         * Gets the effective base permissions of this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""EffectiveBasePermissions\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""eventReceivers\"", {\r\n        /**\r\n         * Gets the event receivers attached to this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""EventReceivers\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""relatedFields\"", {\r\n        /**\r\n         * Gets the related fields of this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""getRelatedFields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""informationRightsManagementSettings\"", {\r\n        /**\r\n         * Gets the IRM settings for this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""InformationRightsManagementSettings\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""subscriptions\"", {\r\n        /**\r\n         * Gets the webhook subscriptions of this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Subscriptions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""rootFolder\"", {\r\n        /**\r\n         * The root folder of the list\r\n         */\r\n        get: function () {\r\n            return new Folder(this, \""rootFolder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a view by view guid id\r\n     *\r\n     */\r\n    List.prototype.getView = function (viewId) {\r\n        return new View(this, \""getView('\"" + viewId + \""')\"");\r\n    };\r\n    /**\r\n     * Updates this list intance with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the list\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    /* tslint:disable no-string-literal */\r\n    List.prototype.update = function (properties, eTag) {\r\n        var _this = this;\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        var postBody = jsS(extend({\r\n            \""__metadata\"": { \""type\"": \""SP.List\"" },\r\n        }, properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            var retList = _this;\r\n            if (hOP(properties, \""Title\"")) {\r\n                retList = _this.getParent(List, _this.parentUrl, \""getByTitle('\"" + properties[\""Title\""] + \""')\"");\r\n            }\r\n            return {\r\n                data: data,\r\n                list: retList,\r\n            };\r\n        });\r\n    };\r\n    /* tslint:enable */\r\n    /**\r\n     * Delete this list\r\n     *\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    List.prototype.delete = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Returns the collection of changes from the change log that have occurred within the list, based on the specified query.\r\n     */\r\n    List.prototype.getChanges = function (query) {\r\n        return this.clone(List, \""getchanges\"").postCore({\r\n            body: jsS({ \""query\"": extend({ \""__metadata\"": { \""type\"": \""SP.ChangeQuery\"" } }, query) }),\r\n        });\r\n    };\r\n    /**\r\n     * Returns a collection of items from the list based on the specified query.\r\n     *\r\n     * @param CamlQuery The Query schema of Collaborative Application Markup\r\n     * Language (CAML) is used in various ways within the context of Microsoft SharePoint Foundation\r\n     * to define queries against list data.\r\n     * see:\r\n     *\r\n     * https://msdn.microsoft.com/en-us/library/office/ms467521.aspx\r\n     *\r\n     * @param expands A URI with a $expand System Query Option indicates that Entries associated with\r\n     * the Entry or Collection of Entries identified by the Resource Path\r\n     * section of the URI must be represented inline (i.e. eagerly loaded).\r\n     * see:\r\n     *\r\n     * https://msdn.microsoft.com/en-us/library/office/fp142385.aspx\r\n     *\r\n     * http://www.odata.org/documentation/odata-version-2-0/uri-conventions/#ExpandSystemQueryOption\r\n     */\r\n    List.prototype.getItemsByCAMLQuery = function (query) {\r\n        var expands = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            expands[_i - 1] = arguments[_i];\r\n        }\r\n        var q = this.clone(List, \""getitems\"");\r\n        return q.expand.apply(q, expands).postCore({\r\n            body: jsS({ \""query\"": extend({ \""__metadata\"": { \""type\"": \""SP.CamlQuery\"" } }, query) }),\r\n        });\r\n    };\r\n    /**\r\n     * See: https://msdn.microsoft.com/en-us/library/office/dn292554.aspx\r\n     */\r\n    List.prototype.getListItemChangesSinceToken = function (query) {\r\n        return this.clone(List, \""getlistitemchangessincetoken\"").postCore({\r\n            body: jsS({ \""query\"": extend({ \""__metadata\"": { \""type\"": \""SP.ChangeLogItemQuery\"" } }, query) }),\r\n        }, { parse: function (r) { return r.text(); } });\r\n    };\r\n    /**\r\n     * Moves the list to the Recycle Bin and returns the identifier of the new Recycle Bin item.\r\n     */\r\n    List.prototype.recycle = function () {\r\n        return this.clone(List, \""recycle\"").postCore().then(function (data) {\r\n            if (hOP(data, \""Recycle\"")) {\r\n                return data.Recycle;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Renders list data based on the view xml provided\r\n     */\r\n    List.prototype.renderListData = function (viewXml) {\r\n        var q = this.clone(List, \""renderlistdata(@viewXml)\"");\r\n        q.query.set(\""@viewXml\"", \""'\"" + viewXml + \""'\"");\r\n        return q.postCore().then(function (data) {\r\n            // data will be a string, so we parse it again\r\n            return JSON.parse(hOP(data, \""RenderListData\"") ? data.RenderListData : data);\r\n        });\r\n    };\r\n    /**\r\n     * Returns the data for the specified query view\r\n     *\r\n     * @param parameters The parameters to be used to render list data as JSON string.\r\n     * @param overrideParameters The parameters that are used to override and extend the regular SPRenderListDataParameters.\r\n     */\r\n    List.prototype.renderListDataAsStream = function (parameters, overrideParameters) {\r\n        if (overrideParameters === void 0) { overrideParameters = null; }\r\n        var postBody = {\r\n            overrideParameters: extend(metadata(\""SP.RenderListDataOverrideParameters\""), overrideParameters),\r\n            parameters: extend(metadata(\""SP.RenderListDataParameters\""), parameters),\r\n        };\r\n        return this.clone(List, \""RenderListDataAsStream\"", true).postCore({\r\n            body: jsS(postBody),\r\n        });\r\n    };\r\n    /**\r\n     * Gets the field values and field schema attributes for a list item.\r\n     */\r\n    List.prototype.renderListFormData = function (itemId, formId, mode) {\r\n        return this.clone(List, \""renderlistformdata(itemid=\"" + itemId + \"", formid='\"" + formId + \""', mode='\"" + mode + \""')\"").postCore().then(function (data) {\r\n            // data will be a string, so we parse it again\r\n            return JSON.parse(hOP(data, \""RenderListFormData\"") ? data.RenderListFormData : data);\r\n        });\r\n    };\r\n    /**\r\n     * Reserves a list item ID for idempotent list item creation.\r\n     */\r\n    List.prototype.reserveListItemId = function () {\r\n        return this.clone(List, \""reservelistitemid\"").postCore().then(function (data) {\r\n            if (hOP(data, \""ReserveListItemId\"")) {\r\n                return data.ReserveListItemId;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Returns the ListItemEntityTypeFullName for this list, used when adding/updating list items. Does not support batching.\r\n     *\r\n     */\r\n    List.prototype.getListItemEntityTypeFullName = function () {\r\n        return this.clone(List, null, false).select(\""ListItemEntityTypeFullName\"").get().then(function (o) { return o.ListItemEntityTypeFullName; });\r\n    };\r\n    /**\r\n     * Creates an item using path (in a folder), validates and sets its field values.\r\n     *\r\n     * @param formValues The fields to change and their new values.\r\n     * @param decodedUrl Path decoded url; folder's server relative path.\r\n     * @param bNewDocumentUpdate true if the list item is a document being updated after upload; otherwise false.\r\n     * @param checkInComment Optional check in comment.\r\n     */\r\n    List.prototype.addValidateUpdateItemUsingPath = function (formValues, decodedUrl, bNewDocumentUpdate, checkInComment) {\r\n        if (bNewDocumentUpdate === void 0) { bNewDocumentUpdate = false; }\r\n        return this.clone(List, \""AddValidateUpdateItemUsingPath()\"").postCore({\r\n            body: jsS({\r\n                bNewDocumentUpdate: bNewDocumentUpdate,\r\n                checkInComment: checkInComment,\r\n                formValues: formValues,\r\n                listItemCreateInfo: {\r\n                    FolderPath: {\r\n                        DecodedUrl: decodedUrl,\r\n                        __metadata: { type: \""SP.ResourcePath\"" },\r\n                    },\r\n                    __metadata: { type: \""SP.ListItemCreationInformationUsingPath\"" },\r\n                },\r\n            }),\r\n        }).then(function (res) {\r\n            if (typeof res.AddValidateUpdateItemUsingPath !== \""undefined\"") {\r\n                return res.AddValidateUpdateItemUsingPath.results;\r\n            }\r\n            return res;\r\n        });\r\n    };\r\n    return List;\r\n}(SharePointQueryableSecurable));\r\nexport { List };\r\n//# sourceMappingURL=lists.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Represents a collection of navigation nodes\r\n *\r\n */\r\nvar NavigationNodes = /** @class */ (function (_super) {\r\n    tslib_1.__extends(NavigationNodes, _super);\r\n    function NavigationNodes() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a navigation node by id\r\n     *\r\n     * @param id The id of the node\r\n     */\r\n    NavigationNodes.prototype.getById = function (id) {\r\n        var node = new NavigationNode(this);\r\n        node.concat(\""(\"" + id + \"")\"");\r\n        return node;\r\n    };\r\n    /**\r\n     * Adds a new node to the collection\r\n     *\r\n     * @param title Display name of the node\r\n     * @param url The url of the node\r\n     * @param visible If true the node is visible, otherwise it is hidden (default: true)\r\n     */\r\n    NavigationNodes.prototype.add = function (title, url, visible) {\r\n        var _this = this;\r\n        if (visible === void 0) { visible = true; }\r\n        var postBody = jsS(extend(metadata(\""SP.NavigationNode\""), {\r\n            IsVisible: visible,\r\n            Title: title,\r\n            Url: url,\r\n        }));\r\n        return this.clone(NavigationNodes, null).postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                node: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Moves a node to be after another node in the navigation\r\n     *\r\n     * @param nodeId Id of the node to move\r\n     * @param previousNodeId Id of the node after which we move the node specified by nodeId\r\n     */\r\n    NavigationNodes.prototype.moveAfter = function (nodeId, previousNodeId) {\r\n        var postBody = jsS({\r\n            nodeId: nodeId,\r\n            previousNodeId: previousNodeId,\r\n        });\r\n        return this.clone(NavigationNodes, \""MoveAfter\"").postCore({ body: postBody });\r\n    };\r\n    return NavigationNodes;\r\n}(SharePointQueryableCollection));\r\nexport { NavigationNodes };\r\n/**\r\n * Represents an instance of a navigation node\r\n *\r\n */\r\nvar NavigationNode = /** @class */ (function (_super) {\r\n    tslib_1.__extends(NavigationNode, _super);\r\n    function NavigationNode() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(NavigationNode.prototype, \""children\"", {\r\n        /**\r\n         * Represents the child nodes of this node\r\n         */\r\n        get: function () {\r\n            return new NavigationNodes(this, \""Children\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Deletes this node and any child nodes\r\n     */\r\n    NavigationNode.prototype.delete = function () {\r\n        return _super.prototype.deleteCore.call(this);\r\n    };\r\n    return NavigationNode;\r\n}(SharePointQueryableInstance));\r\nexport { NavigationNode };\r\n/**\r\n * Exposes the navigation components\r\n *\r\n */\r\nvar Navigation = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Navigation, _super);\r\n    function Navigation() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Navigation.prototype, \""quicklaunch\"", {\r\n        /**\r\n         * Gets the quicklaunch navigation nodes for the current context\r\n         *\r\n         */\r\n        get: function () {\r\n            return new NavigationNodes(this, \""quicklaunch\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Navigation.prototype, \""topNavigationBar\"", {\r\n        /**\r\n         * Gets the top bar navigation nodes for the current context\r\n         *\r\n         */\r\n        get: function () {\r\n            return new NavigationNodes(this, \""topnavigationbar\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Navigation = tslib_1.__decorate([\r\n        defaultPath(\""navigation\"")\r\n    ], Navigation);\r\n    return Navigation;\r\n}(SharePointQueryable));\r\nexport { Navigation };\r\n/**\r\n * Represents the top level navigation service\r\n */\r\nvar NavigationService = /** @class */ (function (_super) {\r\n    tslib_1.__extends(NavigationService, _super);\r\n    function NavigationService(path) {\r\n        if (path === void 0) { path = null; }\r\n        return _super.call(this, \""_api/navigation\"", path) || this;\r\n    }\r\n    /**\r\n     * The MenuState service operation returns a Menu-State (dump) of a SiteMapProvider on a site.\r\n     *\r\n     * @param menuNodeKey MenuNode.Key of the start node within the SiteMapProvider If no key is provided the SiteMapProvider.RootNode will be the root of the menu state.\r\n     * @param depth Depth of the dump. If no value is provided a dump with the depth of 10 is returned\r\n     * @param mapProviderName The name identifying the SiteMapProvider to be used\r\n     * @param customProperties comma seperated list of custom properties to be returned.\r\n     */\r\n    NavigationService.prototype.getMenuState = function (menuNodeKey, depth, mapProviderName, customProperties) {\r\n        if (menuNodeKey === void 0) { menuNodeKey = null; }\r\n        if (depth === void 0) { depth = 10; }\r\n        if (mapProviderName === void 0) { mapProviderName = null; }\r\n        if (customProperties === void 0) { customProperties = null; }\r\n        return (new NavigationService(\""MenuState\"")).postCore({\r\n            body: jsS({\r\n                customProperties: customProperties,\r\n                depth: depth,\r\n                mapProviderName: mapProviderName,\r\n                menuNodeKey: menuNodeKey,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Tries to get a SiteMapNode.Key for a given URL within a site collection.\r\n     *\r\n     * @param currentUrl A url representing the SiteMapNode\r\n     * @param mapProviderName The name identifying the SiteMapProvider to be used\r\n     */\r\n    NavigationService.prototype.getMenuNodeKey = function (currentUrl, mapProviderName) {\r\n        if (mapProviderName === void 0) { mapProviderName = null; }\r\n        return (new NavigationService(\""MenuNodeKey\"")).postCore({\r\n            body: jsS({\r\n                currentUrl: currentUrl,\r\n                mapProviderName: mapProviderName,\r\n            }),\r\n        });\r\n    };\r\n    return NavigationService;\r\n}(SharePointQueryable));\r\nexport { NavigationService };\r\n//# sourceMappingURL=navigation.js.map"",""import { combine, extend } from \""@pnp/common\"";\r\nimport { ODataDefaultParser } from \""@pnp/odata\"";\r\nimport { SPRuntimeConfig } from \""../config/splibconfig\"";\r\nvar CachedDigest = /** @class */ (function () {\r\n    function CachedDigest() {\r\n    }\r\n    return CachedDigest;\r\n}());\r\nexport { CachedDigest };\r\n// allows for the caching of digests across all HttpClient's which each have their own DigestCache wrapper.\r\nvar digests = new Map();\r\nvar DigestCache = /** @class */ (function () {\r\n    function DigestCache(_httpClient, _digests) {\r\n        if (_digests === void 0) { _digests = digests; }\r\n        this._httpClient = _httpClient;\r\n        this._digests = _digests;\r\n    }\r\n    DigestCache.prototype.getDigest = function (webUrl) {\r\n        var _this = this;\r\n        var cachedDigest = this._digests.get(webUrl);\r\n        if (cachedDigest !== undefined) {\r\n            var now = new Date();\r\n            if (now < cachedDigest.expiration) {\r\n                return Promise.resolve(cachedDigest.value);\r\n            }\r\n        }\r\n        var url = combine(webUrl, \""/_api/contextinfo\"");\r\n        var headers = {\r\n            \""Accept\"": \""application/json;odata=verbose\"",\r\n            \""Content-Type\"": \""application/json;odata=verbose;charset=utf-8\"",\r\n        };\r\n        return this._httpClient.fetchRaw(url, {\r\n            cache: \""no-cache\"",\r\n            credentials: \""same-origin\"",\r\n            headers: extend(headers, SPRuntimeConfig.headers, true),\r\n            method: \""POST\"",\r\n        }).then(function (response) {\r\n            var parser = new ODataDefaultParser();\r\n            return parser.parse(response).then(function (d) { return d.GetContextWebInformation; });\r\n        }).then(function (data) {\r\n            var newCachedDigest = new CachedDigest();\r\n            newCachedDigest.value = data.FormDigestValue;\r\n            var seconds = data.FormDigestTimeoutSeconds;\r\n            var expiration = new Date();\r\n            expiration.setTime(expiration.getTime() + 1000 * seconds);\r\n            newCachedDigest.expiration = expiration;\r\n            _this._digests.set(webUrl, newCachedDigest);\r\n            return newCachedDigest.value;\r\n        });\r\n    };\r\n    DigestCache.prototype.clear = function () {\r\n        this._digests.clear();\r\n    };\r\n    return DigestCache;\r\n}());\r\nexport { DigestCache };\r\n//# sourceMappingURL=digestcache.js.map"",""import { DigestCache } from \""./digestcache\"";\r\nimport { extend, mergeHeaders, getCtxCallback, } from \""@pnp/common\"";\r\nimport { SPRuntimeConfig } from \""../config/splibconfig\"";\r\nimport { extractWebUrl } from \""../utils/extractweburl\"";\r\nvar SPHttpClient = /** @class */ (function () {\r\n    function SPHttpClient(_impl) {\r\n        if (_impl === void 0) { _impl = SPRuntimeConfig.fetchClientFactory(); }\r\n        this._impl = _impl;\r\n        this._digestCache = new DigestCache(this);\r\n    }\r\n    SPHttpClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { cache: \""no-cache\"", credentials: \""same-origin\"" }, true);\r\n        var headers = new Headers();\r\n        // first we add the global headers so they can be overwritten by any passed in locally to this call\r\n        mergeHeaders(headers, SPRuntimeConfig.headers);\r\n        // second we add the local options so we can overwrite the globals\r\n        mergeHeaders(headers, options.headers);\r\n        // lastly we apply any default headers we need that may not exist\r\n        if (!headers.has(\""Accept\"")) {\r\n            headers.append(\""Accept\"", \""application/json\"");\r\n        }\r\n        if (!headers.has(\""Content-Type\"")) {\r\n            headers.append(\""Content-Type\"", \""application/json;odata=verbose;charset=utf-8\"");\r\n        }\r\n        if (!headers.has(\""X-ClientService-ClientTag\"")) {\r\n            headers.append(\""X-ClientService-ClientTag\"", \""PnPCoreJS:@pnp-1.2.4\"");\r\n        }\r\n        if (!headers.has(\""User-Agent\"")) {\r\n            // this marks the requests for understanding by the service\r\n            headers.append(\""User-Agent\"", \""NONISV|SharePointPnP|PnPCoreJS/1.2.4\"");\r\n        }\r\n        opts = extend(opts, { headers: headers });\r\n        if (opts.method && opts.method.toUpperCase() !== \""GET\"") {\r\n            // if we have either a request digest or an authorization header we don't need a digest\r\n            if (!headers.has(\""X-RequestDigest\"") && !headers.has(\""Authorization\"")) {\r\n                return this._digestCache.getDigest(extractWebUrl(url))\r\n                    .then(function (digest) {\r\n                    headers.append(\""X-RequestDigest\"", digest);\r\n                    return _this.fetchRaw(url, opts);\r\n                });\r\n            }\r\n        }\r\n        return this.fetchRaw(url, opts);\r\n    };\r\n    SPHttpClient.prototype.fetchRaw = function (url, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        // here we need to normalize the headers\r\n        var rawHeaders = new Headers();\r\n        mergeHeaders(rawHeaders, options.headers);\r\n        options = extend(options, { headers: rawHeaders });\r\n        var retry = function (ctx) {\r\n            // handles setting the proper timeout for a retry\r\n            var setRetry = function (response) {\r\n                var delay;\r\n                if (response.headers.has(\""Retry-After\"")) {\r\n                    // if we have gotten a header, use that value as the delay value\r\n                    delay = parseInt(response.headers.get(\""Retry-After\""), 10);\r\n                }\r\n                else {\r\n                    // grab our current delay\r\n                    delay = ctx.delay;\r\n                    // Increment our counters.\r\n                    ctx.delay *= 2;\r\n                }\r\n                ctx.attempts++;\r\n                // If we have exceeded the retry count, reject.\r\n                if (ctx.retryCount <= ctx.attempts) {\r\n                    ctx.reject(Error(\""Retry count exceeded (\"" + ctx.retryCount + \"") for request. Response status: [\"" + response.status + \""] \"" + response.statusText));\r\n                }\r\n                else {\r\n                    // Set our retry timeout for {delay} milliseconds.\r\n                    setTimeout(getCtxCallback(_this, retry, ctx), delay);\r\n                }\r\n            };\r\n            // send the actual request\r\n            _this._impl.fetch(url, options).then(function (response) {\r\n                if (response.status === 429) {\r\n                    // we have been throttled\r\n                    setRetry(response);\r\n                }\r\n                else {\r\n                    ctx.resolve(response);\r\n                }\r\n            }).catch(function (response) {\r\n                if (response.status === 503) {\r\n                    // http status code 503, we can retry this\r\n                    setRetry(response);\r\n                }\r\n                else {\r\n                    ctx.reject(response);\r\n                }\r\n            });\r\n        };\r\n        return new Promise(function (resolve, reject) {\r\n            var retryContext = {\r\n                attempts: 0,\r\n                delay: 100,\r\n                reject: reject,\r\n                resolve: resolve,\r\n                retryCount: 7,\r\n            };\r\n            retry.call(_this, retryContext);\r\n        });\r\n    };\r\n    SPHttpClient.prototype.get = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""GET\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    SPHttpClient.prototype.post = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""POST\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    SPHttpClient.prototype.patch = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""PATCH\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    SPHttpClient.prototype.delete = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""DELETE\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    return SPHttpClient;\r\n}());\r\nexport { SPHttpClient };\r\n//# sourceMappingURL=sphttpclient.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, combine, hOP } from \""@pnp/common\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { ODataParserBase } from \""@pnp/odata\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\nexport function odataUrlFrom(candidate) {\r\n    var parts = [];\r\n    var s = [\""odata.type\"", \""odata.editLink\"", \""__metadata\"", \""odata.metadata\""];\r\n    if (hOP(candidate, s[0]) && candidate[s[0]] === \""SP.Web\"") {\r\n        // webs return an absolute url in the editLink\r\n        if (hOP(candidate, s[1])) {\r\n            parts.push(candidate[s[1]]);\r\n        }\r\n        else if (hOP(candidate, s[2])) {\r\n            // we are dealing with verbose, which has an absolute uri\r\n            parts.push(candidate.__metadata.uri);\r\n        }\r\n    }\r\n    else {\r\n        if (hOP(candidate, s[3]) && hOP(candidate, s[1])) {\r\n            // we are dealign with minimal metadata (default)\r\n            parts.push(extractWebUrl(candidate[s[3]]), \""_api\"", candidate[s[1]]);\r\n        }\r\n        else if (hOP(candidate, s[1])) {\r\n            parts.push(\""_api\"", candidate[s[1]]);\r\n        }\r\n        else if (hOP(candidate, s[2])) {\r\n            // we are dealing with verbose, which has an absolute uri\r\n            parts.push(candidate.__metadata.uri);\r\n        }\r\n    }\r\n    if (parts.length < 1) {\r\n        Logger.write(\""No uri information found in ODataEntity parsing, chaining will fail for this object.\"", 2 /* Warning */);\r\n        return \""\"";\r\n    }\r\n    return combine.apply(void 0, parts);\r\n}\r\nvar SPODataEntityParserImpl = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPODataEntityParserImpl, _super);\r\n    function SPODataEntityParserImpl(factory) {\r\n        var _this = _super.call(this) || this;\r\n        _this.factory = factory;\r\n        _this.hydrate = function (d) {\r\n            var o = new _this.factory(odataUrlFrom(d), null);\r\n            return extend(o, d);\r\n        };\r\n        return _this;\r\n    }\r\n    SPODataEntityParserImpl.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return _super.prototype.parse.call(this, r).then(function (d) {\r\n            var o = new _this.factory(odataUrlFrom(d), null);\r\n            return extend(o, d);\r\n        });\r\n    };\r\n    return SPODataEntityParserImpl;\r\n}(ODataParserBase));\r\nvar SPODataEntityArrayParserImpl = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPODataEntityArrayParserImpl, _super);\r\n    function SPODataEntityArrayParserImpl(factory) {\r\n        var _this = _super.call(this) || this;\r\n        _this.factory = factory;\r\n        _this.hydrate = function (d) {\r\n            return d.map(function (v) {\r\n                var o = new _this.factory(odataUrlFrom(v), null);\r\n                return extend(o, v);\r\n            });\r\n        };\r\n        return _this;\r\n    }\r\n    SPODataEntityArrayParserImpl.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return _super.prototype.parse.call(this, r).then(function (d) {\r\n            return d.map(function (v) {\r\n                var o = new _this.factory(odataUrlFrom(v), null);\r\n                return extend(o, v);\r\n            });\r\n        });\r\n    };\r\n    return SPODataEntityArrayParserImpl;\r\n}(ODataParserBase));\r\nexport function spODataEntity(factory) {\r\n    return new SPODataEntityParserImpl(factory);\r\n}\r\nexport function spODataEntityArray(factory) {\r\n    return new SPODataEntityArrayParserImpl(factory);\r\n}\r\n//# sourceMappingURL=odata.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath, } from \""./sharepointqueryable\"";\r\nimport { spODataEntity, } from \""./odata\"";\r\nimport { dateAdd, hOP, } from \""@pnp/common\"";\r\n/**\r\n * Describes regional settings ODada object\r\n */\r\nvar RegionalSettings = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RegionalSettings, _super);\r\n    function RegionalSettings() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(RegionalSettings.prototype, \""installedLanguages\"", {\r\n        /**\r\n         * Gets the collection of languages used in a server farm.\r\n         */\r\n        get: function () {\r\n            return new InstalledLanguages(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RegionalSettings.prototype, \""globalInstalledLanguages\"", {\r\n        /**\r\n         * Gets the collection of language packs that are installed on the server.\r\n         */\r\n        get: function () {\r\n            return new InstalledLanguages(this, \""globalinstalledlanguages\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RegionalSettings.prototype, \""timeZone\"", {\r\n        /**\r\n         * Gets time zone\r\n         */\r\n        get: function () {\r\n            return new TimeZone(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RegionalSettings.prototype, \""timeZones\"", {\r\n        /**\r\n         * Gets time zones\r\n         */\r\n        get: function () {\r\n            return new TimeZones(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    RegionalSettings = tslib_1.__decorate([\r\n        defaultPath(\""regionalsettings\"")\r\n    ], RegionalSettings);\r\n    return RegionalSettings;\r\n}(SharePointQueryableInstance));\r\nexport { RegionalSettings };\r\n/**\r\n * Describes installed languages ODada queriable collection\r\n */\r\nvar InstalledLanguages = /** @class */ (function (_super) {\r\n    tslib_1.__extends(InstalledLanguages, _super);\r\n    function InstalledLanguages() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    InstalledLanguages = tslib_1.__decorate([\r\n        defaultPath(\""installedlanguages\"")\r\n    ], InstalledLanguages);\r\n    return InstalledLanguages;\r\n}(SharePointQueryableCollection));\r\nexport { InstalledLanguages };\r\n/**\r\n * Describes TimeZone ODada object\r\n */\r\nvar TimeZone = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeZone, _super);\r\n    function TimeZone() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeZone_1 = TimeZone;\r\n    /**\r\n     * Gets an Local Time by UTC Time\r\n     *\r\n     * @param utcTime UTC Time as Date or ISO String\r\n     */\r\n    TimeZone.prototype.utcToLocalTime = function (utcTime) {\r\n        var dateIsoString;\r\n        if (typeof utcTime === \""string\"") {\r\n            dateIsoString = utcTime;\r\n        }\r\n        else {\r\n            dateIsoString = utcTime.toISOString();\r\n        }\r\n        return this.clone(TimeZone_1, \""utctolocaltime('\"" + dateIsoString + \""')\"")\r\n            .postCore()\r\n            .then(function (res) { return hOP(res, \""UTCToLocalTime\"") ? res.UTCToLocalTime : res; });\r\n    };\r\n    /**\r\n     * Gets an UTC Time by Local Time\r\n     *\r\n     * @param localTime Local Time as Date or ISO String\r\n     */\r\n    TimeZone.prototype.localTimeToUTC = function (localTime) {\r\n        var dateIsoString;\r\n        if (typeof localTime === \""string\"") {\r\n            dateIsoString = localTime;\r\n        }\r\n        else {\r\n            dateIsoString = dateAdd(localTime, \""minute\"", localTime.getTimezoneOffset() * -1).toISOString();\r\n        }\r\n        return this.clone(TimeZone_1, \""localtimetoutc('\"" + dateIsoString + \""')\"")\r\n            .postCore()\r\n            .then(function (res) { return hOP(res, \""LocalTimeToUTC\"") ? res.LocalTimeToUTC : res; });\r\n    };\r\n    var TimeZone_1;\r\n    TimeZone = TimeZone_1 = tslib_1.__decorate([\r\n        defaultPath(\""timezone\"")\r\n    ], TimeZone);\r\n    return TimeZone;\r\n}(SharePointQueryableInstance));\r\nexport { TimeZone };\r\n/**\r\n * Describes time zones queriable collection\r\n */\r\nvar TimeZones = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeZones, _super);\r\n    function TimeZones() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeZones_1 = TimeZones;\r\n    // https://msdn.microsoft.com/en-us/library/office/jj247008.aspx - timezones ids\r\n    /**\r\n     * Gets an TimeZone by id\r\n     *\r\n     * @param id The integer id of the timezone to retrieve\r\n     */\r\n    TimeZones.prototype.getById = function (id) {\r\n        // do the post and merge the result into a TimeZone instance so the data and methods are available\r\n        return this.clone(TimeZones_1, \""GetById(\"" + id + \"")\"").postCore({}, spODataEntity(TimeZone));\r\n    };\r\n    var TimeZones_1;\r\n    TimeZones = TimeZones_1 = tslib_1.__decorate([\r\n        defaultPath(\""timezones\"")\r\n    ], TimeZones);\r\n    return TimeZones;\r\n}(SharePointQueryableCollection));\r\nexport { TimeZones };\r\n//# sourceMappingURL=regionalsettings.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nvar RelatedItemManagerImpl = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RelatedItemManagerImpl, _super);\r\n    function RelatedItemManagerImpl() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RelatedItemManagerImpl_1 = RelatedItemManagerImpl;\r\n    RelatedItemManagerImpl.FromUrl = function (url) {\r\n        if (url === null) {\r\n            return new RelatedItemManagerImpl_1(\""\"");\r\n        }\r\n        var index = url.indexOf(\""_api/\"");\r\n        if (index > -1) {\r\n            return new RelatedItemManagerImpl_1(url.substr(0, index));\r\n        }\r\n        return new RelatedItemManagerImpl_1(url);\r\n    };\r\n    RelatedItemManagerImpl.prototype.getRelatedItems = function (sourceListName, sourceItemId) {\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".GetRelatedItems\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n            }),\r\n        });\r\n    };\r\n    RelatedItemManagerImpl.prototype.getPageOneRelatedItems = function (sourceListName, sourceItemId) {\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".GetPageOneRelatedItems\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n            }),\r\n        });\r\n    };\r\n    RelatedItemManagerImpl.prototype.addSingleLink = function (sourceListName, sourceItemId, sourceWebUrl, targetListName, targetItemID, targetWebUrl, tryAddReverseLink) {\r\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".AddSingleLink\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n                SourceWebUrl: sourceWebUrl,\r\n                TargetItemID: targetItemID,\r\n                TargetListName: targetListName,\r\n                TargetWebUrl: targetWebUrl,\r\n                TryAddReverseLink: tryAddReverseLink,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Adds a related item link from an item specified by list name and item id, to an item specified by url\r\n     *\r\n     * @param sourceListName The source list name or list id\r\n     * @param sourceItemId The source item id\r\n     * @param targetItemUrl The target item url\r\n     * @param tryAddReverseLink If set to true try to add the reverse link (will not return error if it fails)\r\n     */\r\n    RelatedItemManagerImpl.prototype.addSingleLinkToUrl = function (sourceListName, sourceItemId, targetItemUrl, tryAddReverseLink) {\r\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".AddSingleLinkToUrl\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n                TargetItemUrl: targetItemUrl,\r\n                TryAddReverseLink: tryAddReverseLink,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Adds a related item link from an item specified by url, to an item specified by list name and item id\r\n     *\r\n     * @param sourceItemUrl The source item url\r\n     * @param targetListName The target list name or list id\r\n     * @param targetItemId The target item id\r\n     * @param tryAddReverseLink If set to true try to add the reverse link (will not return error if it fails)\r\n     */\r\n    RelatedItemManagerImpl.prototype.addSingleLinkFromUrl = function (sourceItemUrl, targetListName, targetItemId, tryAddReverseLink) {\r\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".AddSingleLinkFromUrl\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemUrl: sourceItemUrl,\r\n                TargetItemID: targetItemId,\r\n                TargetListName: targetListName,\r\n                TryAddReverseLink: tryAddReverseLink,\r\n            }),\r\n        });\r\n    };\r\n    RelatedItemManagerImpl.prototype.deleteSingleLink = function (sourceListName, sourceItemId, sourceWebUrl, targetListName, targetItemId, targetWebUrl, tryDeleteReverseLink) {\r\n        if (tryDeleteReverseLink === void 0) { tryDeleteReverseLink = false; }\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".DeleteSingleLink\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n                SourceWebUrl: sourceWebUrl,\r\n                TargetItemID: targetItemId,\r\n                TargetListName: targetListName,\r\n                TargetWebUrl: targetWebUrl,\r\n                TryDeleteReverseLink: tryDeleteReverseLink,\r\n            }),\r\n        });\r\n    };\r\n    var RelatedItemManagerImpl_1;\r\n    RelatedItemManagerImpl = RelatedItemManagerImpl_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/SP.RelatedItemManager\"")\r\n    ], RelatedItemManagerImpl);\r\n    return RelatedItemManagerImpl;\r\n}(SharePointQueryable));\r\nexport { RelatedItemManagerImpl };\r\n//# sourceMappingURL=relateditems.js.map"",""import { Search } from \""./search\"";\r\nimport { SearchSuggest } from \""./searchsuggest\"";\r\nimport { Site } from \""./site\"";\r\nimport { Web } from \""./webs\"";\r\nimport { UserProfileQuery } from \""./userprofiles\"";\r\nimport { NavigationService } from \""./navigation\"";\r\nimport { SocialQuery } from \""./social\"";\r\nimport { SiteScripts } from \""./sitescripts\"";\r\nimport { SiteDesigns } from \""./sitedesigns\"";\r\nimport { UtilityMethod } from \""./utilities\"";\r\nimport { setup as _setup, } from \""./config/splibconfig\"";\r\n/**\r\n * Root of the SharePoint REST module\r\n */\r\nvar SPRest = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the SPRest class\r\n     *\r\n     * @param options Additional options\r\n     * @param baseUrl A string that should form the base part of the url\r\n     */\r\n    function SPRest(_options, _baseUrl) {\r\n        if (_options === void 0) { _options = {}; }\r\n        if (_baseUrl === void 0) { _baseUrl = \""\""; }\r\n        this._options = _options;\r\n        this._baseUrl = _baseUrl;\r\n    }\r\n    /**\r\n     * Configures instance with additional options and baseUrl.\r\n     * Provided configuration used by other objects in a chain\r\n     *\r\n     * @param options Additional options\r\n     * @param baseUrl A string that should form the base part of the url\r\n     */\r\n    SPRest.prototype.configure = function (options, baseUrl) {\r\n        if (baseUrl === void 0) { baseUrl = \""\""; }\r\n        return new SPRest(options, baseUrl);\r\n    };\r\n    /**\r\n     * Global SharePoint configuration options\r\n     *\r\n     * @param config The SharePoint configuration to apply\r\n     */\r\n    SPRest.prototype.setup = function (config) {\r\n        _setup(config);\r\n    };\r\n    /**\r\n     * Executes a search against this web context\r\n     *\r\n     * @param query The SearchQuery definition\r\n     */\r\n    SPRest.prototype.searchSuggest = function (query) {\r\n        var finalQuery;\r\n        if (typeof query === \""string\"") {\r\n            finalQuery = { querytext: query };\r\n        }\r\n        else {\r\n            finalQuery = query;\r\n        }\r\n        return this.create(SearchSuggest).execute(finalQuery);\r\n    };\r\n    /**\r\n     * Executes a search against this web context\r\n     *\r\n     * @param query The SearchQuery definition\r\n     */\r\n    SPRest.prototype.search = function (query) {\r\n        return this.create(Search).execute(query);\r\n    };\r\n    /**\r\n     * Executes the provided search query, caching the results\r\n     *\r\n     * @param query The SearchQuery definition\r\n     * @param options The set of caching options used to store the results\r\n     */\r\n    SPRest.prototype.searchWithCaching = function (query, options) {\r\n        return this.create(Search).usingCaching(options).execute(query);\r\n    };\r\n    Object.defineProperty(SPRest.prototype, \""site\"", {\r\n        /**\r\n         * Begins a site collection scoped REST request\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.create(Site);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""web\"", {\r\n        /**\r\n         * Begins a web scoped REST request\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.create(Web);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""profiles\"", {\r\n        /**\r\n         * Access to user profile methods\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.create(UserProfileQuery);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""social\"", {\r\n        /**\r\n         * Access to social methods\r\n         */\r\n        get: function () {\r\n            return this.create(SocialQuery);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""navigation\"", {\r\n        /**\r\n         * Access to the site collection level navigation service\r\n         */\r\n        get: function () {\r\n            return new NavigationService();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Creates a new batch object for use with the SharePointQueryable.addToBatch method\r\n     *\r\n     */\r\n    SPRest.prototype.createBatch = function () {\r\n        return this.web.createBatch();\r\n    };\r\n    Object.defineProperty(SPRest.prototype, \""utility\"", {\r\n        /**\r\n         * Static utilities methods from SP.Utilities.Utility\r\n         */\r\n        get: function () {\r\n            return this.create(UtilityMethod, \""\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""siteScripts\"", {\r\n        /**\r\n         * Access to sitescripts methods\r\n         */\r\n        get: function () {\r\n            return this.create(SiteScripts, \""\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""siteDesigns\"", {\r\n        /**\r\n         * Access to sitedesigns methods\r\n         */\r\n        get: function () {\r\n            return this.create(SiteDesigns, \""\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Handles creating and configuring the objects returned from this class\r\n     *\r\n     * @param fm The factory method used to create the instance\r\n     * @param path Optional additional path information to pass to the factory method\r\n     */\r\n    SPRest.prototype.create = function (fm, path) {\r\n        return new fm(this._baseUrl, path).configure(this._options);\r\n    };\r\n    return SPRest;\r\n}());\r\nexport { SPRest };\r\nexport var sp = new SPRest();\r\n//# sourceMappingURL=rest.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SiteGroups } from \""./sitegroups\"";\r\nimport { extend, jsS, hOP } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a set of role assignments for the current scope\r\n *\r\n */\r\nvar RoleAssignments = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleAssignments, _super);\r\n    function RoleAssignments() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RoleAssignments_1 = RoleAssignments;\r\n    /**\r\n     * Gets the role assignment associated with the specified principal id from the collection.\r\n     *\r\n     * @param id The id of the role assignment\r\n     */\r\n    RoleAssignments.prototype.getById = function (id) {\r\n        var ra = new RoleAssignment(this);\r\n        ra.concat(\""(\"" + id + \"")\"");\r\n        return ra;\r\n    };\r\n    /**\r\n     * Adds a new role assignment with the specified principal and role definitions to the collection\r\n     *\r\n     * @param principalId The id of the user or group to assign permissions to\r\n     * @param roleDefId The id of the role definition that defines the permissions to assign\r\n     *\r\n     */\r\n    RoleAssignments.prototype.add = function (principalId, roleDefId) {\r\n        return this.clone(RoleAssignments_1, \""addroleassignment(principalid=\"" + principalId + \"", roledefid=\"" + roleDefId + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the role assignment with the specified principal and role definition from the collection\r\n     *\r\n     * @param principalId The id of the user or group in the role assignment\r\n     * @param roleDefId The id of the role definition in the role assignment\r\n     *\r\n     */\r\n    RoleAssignments.prototype.remove = function (principalId, roleDefId) {\r\n        return this.clone(RoleAssignments_1, \""removeroleassignment(principalid=\"" + principalId + \"", roledefid=\"" + roleDefId + \"")\"").postCore();\r\n    };\r\n    var RoleAssignments_1;\r\n    RoleAssignments = RoleAssignments_1 = tslib_1.__decorate([\r\n        defaultPath(\""roleassignments\"")\r\n    ], RoleAssignments);\r\n    return RoleAssignments;\r\n}(SharePointQueryableCollection));\r\nexport { RoleAssignments };\r\n/**\r\n * Describes a role assignment\r\n *\r\n */\r\nvar RoleAssignment = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleAssignment, _super);\r\n    function RoleAssignment() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Deletes this role assignment\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(RoleAssignment.prototype, \""groups\"", {\r\n        /**\r\n         * Gets the groups that directly belong to the access control list (ACL) for this securable object\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroups(this, \""groups\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RoleAssignment.prototype, \""bindings\"", {\r\n        /**\r\n         * Gets the role definition bindings for this role assignment\r\n         *\r\n         */\r\n        get: function () {\r\n            return new RoleDefinitionBindings(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return RoleAssignment;\r\n}(SharePointQueryableInstance));\r\nexport { RoleAssignment };\r\n/**\r\n * Describes a collection of role definitions\r\n *\r\n */\r\nvar RoleDefinitions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleDefinitions, _super);\r\n    function RoleDefinitions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets the role definition with the specified id from the collection\r\n     *\r\n     * @param id The id of the role definition\r\n     *\r\n     */\r\n    RoleDefinitions.prototype.getById = function (id) {\r\n        return new RoleDefinition(this, \""getById(\"" + id + \"")\"");\r\n    };\r\n    /**\r\n     * Gets the role definition with the specified name\r\n     *\r\n     * @param name The name of the role definition\r\n     *\r\n     */\r\n    RoleDefinitions.prototype.getByName = function (name) {\r\n        return new RoleDefinition(this, \""getbyname('\"" + name + \""')\"");\r\n    };\r\n    /**\r\n     * Gets the role definition with the specified role type\r\n     *\r\n     * @param roleTypeKind The roletypekind of the role definition (None=0, Guest=1, Reader=2, Contributor=3, WebDesigner=4, Administrator=5, Editor=6, System=7)\r\n     *\r\n     */\r\n    RoleDefinitions.prototype.getByType = function (roleTypeKind) {\r\n        return new RoleDefinition(this, \""getbytype(\"" + roleTypeKind + \"")\"");\r\n    };\r\n    /**\r\n     * Creates a role definition\r\n     *\r\n     * @param name The new role definition's name\r\n     * @param description The new role definition's description\r\n     * @param order The order in which the role definition appears\r\n     * @param basePermissions The permissions mask for this role definition\r\n     *\r\n     */\r\n    RoleDefinitions.prototype.add = function (name, description, order, basePermissions) {\r\n        var _this = this;\r\n        var postBody = jsS({\r\n            BasePermissions: extend({ __metadata: { type: \""SP.BasePermissions\"" } }, basePermissions),\r\n            Description: description,\r\n            Name: name,\r\n            Order: order,\r\n            __metadata: { \""type\"": \""SP.RoleDefinition\"" },\r\n        });\r\n        return this.postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                definition: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    RoleDefinitions = tslib_1.__decorate([\r\n        defaultPath(\""roledefinitions\"")\r\n    ], RoleDefinitions);\r\n    return RoleDefinitions;\r\n}(SharePointQueryableCollection));\r\nexport { RoleDefinitions };\r\n/**\r\n * Describes a role definition\r\n *\r\n */\r\nvar RoleDefinition = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleDefinition, _super);\r\n    function RoleDefinition() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Deletes this role definition\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n        /* tslint:enable */\r\n    }\r\n    /**\r\n     * Updates this role definition with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the role definition\r\n     */\r\n    /* tslint:disable no-string-literal */\r\n    RoleDefinition.prototype.update = function (properties) {\r\n        var _this = this;\r\n        var s = [\""BasePermissions\""];\r\n        if (hOP(properties, s[0]) !== undefined) {\r\n            properties[s[0]] = extend({ __metadata: { type: \""SP.\"" + s[0] } }, properties[s[0]]);\r\n        }\r\n        var postBody = jsS(extend(metadata(\""SP.RoleDefinition\""), properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            var retDef = _this;\r\n            if (hOP(properties, \""Name\"")) {\r\n                var parent_1 = _this.getParent(RoleDefinitions, _this.parentUrl, \""\"");\r\n                retDef = parent_1.getByName(properties[\""Name\""]);\r\n            }\r\n            return {\r\n                data: data,\r\n                definition: retDef,\r\n            };\r\n        });\r\n    };\r\n    return RoleDefinition;\r\n}(SharePointQueryableInstance));\r\nexport { RoleDefinition };\r\n/**\r\n * Describes the role definitons bound to a role assignment object\r\n *\r\n */\r\nvar RoleDefinitionBindings = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleDefinitionBindings, _super);\r\n    function RoleDefinitionBindings() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RoleDefinitionBindings = tslib_1.__decorate([\r\n        defaultPath(\""roledefinitionbindings\"")\r\n    ], RoleDefinitionBindings);\r\n    return RoleDefinitionBindings;\r\n}(SharePointQueryableCollection));\r\nexport { RoleDefinitionBindings };\r\n//# sourceMappingURL=roles.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS, hOP, getHashCode, objectDefinedNotNull, isArray } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\nimport { CachingOptions } from \""@pnp/odata\"";\r\nvar funcs = new Map([\r\n    [\""text\"", \""Querytext\""],\r\n    [\""template\"", \""QueryTemplate\""],\r\n    [\""sourceId\"", \""SourceId\""],\r\n    [\""trimDuplicatesIncludeId\"", \""\""],\r\n    [\""startRow\"", \""\""],\r\n    [\""rowLimit\"", \""\""],\r\n    [\""rankingModelId\"", \""\""],\r\n    [\""rowsPerPage\"", \""\""],\r\n    [\""selectProperties\"", \""\""],\r\n    [\""culture\"", \""\""],\r\n    [\""timeZoneId\"", \""\""],\r\n    [\""refinementFilters\"", \""\""],\r\n    [\""refiners\"", \""\""],\r\n    [\""hiddenConstraints\"", \""\""],\r\n    [\""sortList\"", \""\""],\r\n    [\""timeout\"", \""\""],\r\n    [\""hithighlightedProperties\"", \""\""],\r\n    [\""clientType\"", \""\""],\r\n    [\""personalizationData\"", \""\""],\r\n    [\""resultsURL\"", \""\""],\r\n    [\""queryTag\"", \""\""],\r\n    [\""properties\"", \""\""],\r\n    [\""queryTemplatePropertiesUrl\"", \""\""],\r\n    [\""reorderingRules\"", \""\""],\r\n    [\""hitHighlightedMultivaluePropertyLimit\"", \""\""],\r\n    [\""collapseSpecification\"", \""\""],\r\n    [\""uiLanguage\"", \""\""],\r\n    [\""desiredSnippetLength\"", \""\""],\r\n    [\""maxSnippetLength\"", \""\""],\r\n    [\""summaryLength\"", \""\""],\r\n]);\r\nvar props = new Map([]);\r\nfunction toPropCase(str) {\r\n    return str.replace(/^(.)/, function ($1) { return $1.toUpperCase(); });\r\n}\r\n/**\r\n * Creates a new instance of the SearchQueryBuilder\r\n *\r\n * @param queryText Initial query text\r\n * @param _query Any initial query configuration\r\n */\r\nexport function SearchQueryBuilder(queryText, _query) {\r\n    if (queryText === void 0) { queryText = \""\""; }\r\n    if (_query === void 0) { _query = {}; }\r\n    return new Proxy({\r\n        query: Object.assign({\r\n            Querytext: queryText,\r\n        }, _query),\r\n    }, {\r\n        get: function (self, propertyKey, proxy) {\r\n            var pk = propertyKey.toString();\r\n            if (pk === \""toSearchQuery\"") {\r\n                return function () { return self.query; };\r\n            }\r\n            if (funcs.has(pk)) {\r\n                return function () {\r\n                    var value = [];\r\n                    for (var _i = 0; _i < arguments.length; _i++) {\r\n                        value[_i] = arguments[_i];\r\n                    }\r\n                    var mappedPk = funcs.get(pk);\r\n                    self.query[mappedPk.length > 0 ? mappedPk : toPropCase(pk)] = value.length > 1 ? value : value[0];\r\n                    return proxy;\r\n                };\r\n            }\r\n            var propKey = props.has(pk) ? props.get(pk) : toPropCase(pk);\r\n            self.query[propKey] = true;\r\n            return proxy;\r\n        },\r\n    });\r\n}\r\n/**\r\n * Describes the search API\r\n *\r\n */\r\nvar Search = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Search, _super);\r\n    function Search() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * @returns Promise\r\n     */\r\n    Search.prototype.execute = function (queryInit) {\r\n        var _this = this;\r\n        var query = this.parseQuery(queryInit);\r\n        var postBody = jsS({\r\n            request: extend(metadata(\""Microsoft.Office.Server.Search.REST.SearchRequest\""), Object.assign({}, query, {\r\n                HitHighlightedProperties: this.fixArrProp(query.HitHighlightedProperties),\r\n                Properties: this.fixArrProp(query.Properties),\r\n                QueryTag: this.fixArrProp(query.QueryTag),\r\n                RefinementFilters: this.fixArrProp(query.RefinementFilters),\r\n                ReorderingRules: this.fixArrProp(query.ReorderingRules),\r\n                SelectProperties: this.fixArrProp(query.SelectProperties),\r\n                SortList: this.fixArrProp(query.SortList),\r\n            })),\r\n        });\r\n        // if we are using caching with this search request, then we need to handle some work upfront to enable that\r\n        if (this._useCaching) {\r\n            // force use of the cache for this request if .usingCaching was called\r\n            this._forceCaching = true;\r\n            // because all the requests use the same url they would collide in the cache we use a special key\r\n            var cacheKey = \""PnPjs.SearchWithCaching(\"" + getHashCode(postBody) + \"")\"";\r\n            if (objectDefinedNotNull(this._cachingOptions)) {\r\n                // if our key ends in the postquery url we overwrite it\r\n                if (/\\/_api\\/search\\/postquery$/i.test(this._cachingOptions.key)) {\r\n                    this._cachingOptions.key = cacheKey;\r\n                }\r\n            }\r\n            else {\r\n                this._cachingOptions = new CachingOptions(cacheKey);\r\n            }\r\n        }\r\n        return this.postCore({ body: postBody }).then(function (data) { return new SearchResults(data, _this.toUrl(), query); });\r\n    };\r\n    /**\r\n     * Fix array property\r\n     *\r\n     * @param prop property to fix for container struct\r\n     */\r\n    Search.prototype.fixArrProp = function (prop) {\r\n        if (typeof prop === \""undefined\"") {\r\n            return ({ results: [] });\r\n        }\r\n        prop = isArray(prop) ? prop : [prop];\r\n        return hOP(prop, \""results\"") ? prop : { results: prop };\r\n    };\r\n    /**\r\n     * Translates one of the query initializers into a SearchQuery instance\r\n     *\r\n     * @param query\r\n     */\r\n    Search.prototype.parseQuery = function (query) {\r\n        var finalQuery;\r\n        if (typeof query === \""string\"") {\r\n            finalQuery = { Querytext: query };\r\n        }\r\n        else if (query.toSearchQuery) {\r\n            finalQuery = query.toSearchQuery();\r\n        }\r\n        else {\r\n            finalQuery = query;\r\n        }\r\n        return finalQuery;\r\n    };\r\n    Search = tslib_1.__decorate([\r\n        defaultPath(\""_api/search/postquery\"")\r\n    ], Search);\r\n    return Search;\r\n}(SharePointQueryableInstance));\r\nexport { Search };\r\n/**\r\n * Describes the SearchResults class, which returns the formatted and raw version of the query response\r\n */\r\nvar SearchResults = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the SearchResult class\r\n     *\r\n     */\r\n    function SearchResults(rawResponse, _url, _query, _raw, _primary) {\r\n        if (_raw === void 0) { _raw = null; }\r\n        if (_primary === void 0) { _primary = null; }\r\n        this._url = _url;\r\n        this._query = _query;\r\n        this._raw = _raw;\r\n        this._primary = _primary;\r\n        this._raw = rawResponse.postquery ? rawResponse.postquery : rawResponse;\r\n    }\r\n    Object.defineProperty(SearchResults.prototype, \""ElapsedTime\"", {\r\n        get: function () {\r\n            return this.RawSearchResults.ElapsedTime;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""RowCount\"", {\r\n        get: function () {\r\n            return this.RawSearchResults.PrimaryQueryResult.RelevantResults.RowCount;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""TotalRows\"", {\r\n        get: function () {\r\n            return this.RawSearchResults.PrimaryQueryResult.RelevantResults.TotalRows;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""TotalRowsIncludingDuplicates\"", {\r\n        get: function () {\r\n            return this.RawSearchResults.PrimaryQueryResult.RelevantResults.TotalRowsIncludingDuplicates;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""RawSearchResults\"", {\r\n        get: function () {\r\n            return this._raw;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""PrimarySearchResults\"", {\r\n        get: function () {\r\n            if (this._primary === null) {\r\n                this._primary = this.formatSearchResults(this._raw.PrimaryQueryResult.RelevantResults.Table.Rows);\r\n            }\r\n            return this._primary;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a page of results\r\n     *\r\n     * @param pageNumber Index of the page to return. Used to determine StartRow\r\n     * @param pageSize Optional, items per page (default = 10)\r\n     */\r\n    SearchResults.prototype.getPage = function (pageNumber, pageSize) {\r\n        // if we got all the available rows we don't have another page\r\n        if (this.TotalRows < this.RowCount) {\r\n            return Promise.resolve(null);\r\n        }\r\n        // if pageSize is supplied, then we use that regardless of any previous values\r\n        // otherwise get the previous RowLimit or default to 10\r\n        var rows = pageSize !== undefined ? pageSize : hOP(this._query, \""RowLimit\"") ? this._query.RowLimit : 10;\r\n        var query = extend(this._query, {\r\n            RowLimit: rows,\r\n            StartRow: rows * (pageNumber - 1),\r\n        });\r\n        // we have reached the end\r\n        if (query.StartRow > this.TotalRows) {\r\n            return Promise.resolve(null);\r\n        }\r\n        var search = new Search(this._url, null);\r\n        return search.execute(query);\r\n    };\r\n    /**\r\n     * Formats a search results array\r\n     *\r\n     * @param rawResults The array to process\r\n     */\r\n    SearchResults.prototype.formatSearchResults = function (rawResults) {\r\n        var results = new Array();\r\n        var tempResults = rawResults.results ? rawResults.results : rawResults;\r\n        for (var _i = 0, tempResults_1 = tempResults; _i < tempResults_1.length; _i++) {\r\n            var tempResult = tempResults_1[_i];\r\n            var cells = tempResult.Cells.results ? tempResult.Cells.results : tempResult.Cells;\r\n            results.push(cells.reduce(function (res, cell) {\r\n                Object.defineProperty(res, cell.Key, {\r\n                    configurable: false,\r\n                    enumerable: true,\r\n                    value: cell.Value,\r\n                    writable: false,\r\n                });\r\n                return res;\r\n            }, {}));\r\n        }\r\n        return results;\r\n    };\r\n    return SearchResults;\r\n}());\r\nexport { SearchResults };\r\n/**\r\n * defines the SortDirection enum\r\n */\r\nexport var SortDirection;\r\n(function (SortDirection) {\r\n    SortDirection[SortDirection[\""Ascending\""] = 0] = \""Ascending\"";\r\n    SortDirection[SortDirection[\""Descending\""] = 1] = \""Descending\"";\r\n    SortDirection[SortDirection[\""FQLFormula\""] = 2] = \""FQLFormula\"";\r\n})(SortDirection || (SortDirection = {}));\r\n/**\r\n * defines the ReorderingRuleMatchType  enum\r\n */\r\nexport var ReorderingRuleMatchType;\r\n(function (ReorderingRuleMatchType) {\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ResultContainsKeyword\""] = 0] = \""ResultContainsKeyword\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""TitleContainsKeyword\""] = 1] = \""TitleContainsKeyword\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""TitleMatchesKeyword\""] = 2] = \""TitleMatchesKeyword\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""UrlStartsWith\""] = 3] = \""UrlStartsWith\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""UrlExactlyMatches\""] = 4] = \""UrlExactlyMatches\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ContentTypeIs\""] = 5] = \""ContentTypeIs\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""FileExtensionMatches\""] = 6] = \""FileExtensionMatches\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ResultHasTag\""] = 7] = \""ResultHasTag\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ManualCondition\""] = 8] = \""ManualCondition\"";\r\n})(ReorderingRuleMatchType || (ReorderingRuleMatchType = {}));\r\n/**\r\n * Specifies the type value for the property\r\n */\r\nexport var QueryPropertyValueType;\r\n(function (QueryPropertyValueType) {\r\n    QueryPropertyValueType[QueryPropertyValueType[\""None\""] = 0] = \""None\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""StringType\""] = 1] = \""StringType\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""Int32Type\""] = 2] = \""Int32Type\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""BooleanType\""] = 3] = \""BooleanType\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""StringArrayType\""] = 4] = \""StringArrayType\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""UnSupportedType\""] = 5] = \""UnSupportedType\"";\r\n})(QueryPropertyValueType || (QueryPropertyValueType = {}));\r\nvar SearchBuiltInSourceId = /** @class */ (function () {\r\n    function SearchBuiltInSourceId() {\r\n    }\r\n    SearchBuiltInSourceId.Documents = \""e7ec8cee-ded8-43c9-beb5-436b54b31e84\"";\r\n    SearchBuiltInSourceId.ItemsMatchingContentType = \""5dc9f503-801e-4ced-8a2c-5d1237132419\"";\r\n    SearchBuiltInSourceId.ItemsMatchingTag = \""e1327b9c-2b8c-4b23-99c9-3730cb29c3f7\"";\r\n    SearchBuiltInSourceId.ItemsRelatedToCurrentUser = \""48fec42e-4a92-48ce-8363-c2703a40e67d\"";\r\n    SearchBuiltInSourceId.ItemsWithSameKeywordAsThisItem = \""5c069288-1d17-454a-8ac6-9c642a065f48\"";\r\n    SearchBuiltInSourceId.LocalPeopleResults = \""b09a7990-05ea-4af9-81ef-edfab16c4e31\"";\r\n    SearchBuiltInSourceId.LocalReportsAndDataResults = \""203fba36-2763-4060-9931-911ac8c0583b\"";\r\n    SearchBuiltInSourceId.LocalSharePointResults = \""8413cd39-2156-4e00-b54d-11efd9abdb89\"";\r\n    SearchBuiltInSourceId.LocalVideoResults = \""78b793ce-7956-4669-aa3b-451fc5defebf\"";\r\n    SearchBuiltInSourceId.Pages = \""5e34578e-4d08-4edc-8bf3-002acf3cdbcc\"";\r\n    SearchBuiltInSourceId.Pictures = \""38403c8c-3975-41a8-826e-717f2d41568a\"";\r\n    SearchBuiltInSourceId.Popular = \""97c71db1-58ce-4891-8b64-585bc2326c12\"";\r\n    SearchBuiltInSourceId.RecentlyChangedItems = \""ba63bbae-fa9c-42c0-b027-9a878f16557c\"";\r\n    SearchBuiltInSourceId.RecommendedItems = \""ec675252-14fa-4fbe-84dd-8d098ed74181\"";\r\n    SearchBuiltInSourceId.Wiki = \""9479bf85-e257-4318-b5a8-81a180f5faa1\"";\r\n    return SearchBuiltInSourceId;\r\n}());\r\nexport { SearchBuiltInSourceId };\r\n//# sourceMappingURL=search.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { hOP } from \""@pnp/common\"";\r\nvar SearchSuggest = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SearchSuggest, _super);\r\n    function SearchSuggest() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SearchSuggest.prototype.execute = function (query) {\r\n        this.mapQueryToQueryString(query);\r\n        return this.get().then(function (response) {\r\n            var mapper = hOP(response, \""suggest\"") ? function (s) { return response.suggest[s].results; } : function (s) { return response[s]; };\r\n            return {\r\n                PeopleNames: mapper(\""PeopleNames\""),\r\n                PersonalResults: mapper(\""PersonalResults\""),\r\n                Queries: mapper(\""Queries\""),\r\n            };\r\n        });\r\n    };\r\n    SearchSuggest.prototype.mapQueryToQueryString = function (query) {\r\n        var _this = this;\r\n        var setProp = function (q) { return function (checkProp) { return function (sp) {\r\n            if (hOP(q, checkProp)) {\r\n                _this.query.set(sp, q[checkProp].toString());\r\n            }\r\n        }; }; };\r\n        this.query.set(\""querytext\"", \""'\"" + query.querytext + \""'\"");\r\n        var querySetter = setProp(query);\r\n        querySetter(\""count\"")(\""inumberofquerysuggestions\"");\r\n        querySetter(\""personalCount\"")(\""inumberofresultsuggestions\"");\r\n        querySetter(\""preQuery\"")(\""fprequerysuggestions\"");\r\n        querySetter(\""hitHighlighting\"")(\""fhithighlighting\"");\r\n        querySetter(\""capitalize\"")(\""fcapitalizefirstletters\"");\r\n        querySetter(\""culture\"")(\""culture\"");\r\n        querySetter(\""stemming\"")(\""enablestemming\"");\r\n        querySetter(\""includePeople\"")(\""showpeoplenamesuggestions\"");\r\n        querySetter(\""queryRules\"")(\""enablequeryrules\"");\r\n        querySetter(\""prefixMatch\"")(\""fprefixmatchallterms\"");\r\n    };\r\n    SearchSuggest = tslib_1.__decorate([\r\n        defaultPath(\""_api/search/suggest\"")\r\n    ], SearchSuggest);\r\n    return SearchSuggest;\r\n}(SharePointQueryableInstance));\r\nexport { SearchSuggest };\r\n//# sourceMappingURL=searchsuggest.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { combine, isUrlAbsolute, mergeOptions, extend, getGUID, jsS, } from \""@pnp/common\"";\r\nimport { ODataQueryable, } from \""@pnp/odata\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { SPHttpClient } from \""./net/sphttpclient\"";\r\nimport { toAbsoluteUrl } from \""./utils/toabsoluteurl\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * SharePointQueryable Base Class\r\n *\r\n */\r\nvar SharePointQueryable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryable, _super);\r\n    /**\r\n     * Creates a new instance of the SharePointQueryable class\r\n     *\r\n     * @constructor\r\n     * @param baseUrl A string or SharePointQueryable that should form the base part of the url\r\n     *\r\n     */\r\n    function SharePointQueryable(baseUrl, path) {\r\n        var _this = _super.call(this) || this;\r\n        _this._forceCaching = false;\r\n        if (typeof baseUrl === \""string\"") {\r\n            // we need to do some extra parsing to get the parent url correct if we are\r\n            // being created from just a string.\r\n            if (isUrlAbsolute(baseUrl) || baseUrl.lastIndexOf(\""/\"") < 0) {\r\n                _this._parentUrl = baseUrl;\r\n                _this._url = combine(baseUrl, path);\r\n            }\r\n            else if (baseUrl.lastIndexOf(\""/\"") > baseUrl.lastIndexOf(\""(\"")) {\r\n                // .../items(19)/fields\r\n                var index = baseUrl.lastIndexOf(\""/\"");\r\n                _this._parentUrl = baseUrl.slice(0, index);\r\n                path = combine(baseUrl.slice(index), path);\r\n                _this._url = combine(_this._parentUrl, path);\r\n            }\r\n            else {\r\n                // .../items(19)\r\n                var index = baseUrl.lastIndexOf(\""(\"");\r\n                _this._parentUrl = baseUrl.slice(0, index);\r\n                _this._url = combine(baseUrl, path);\r\n            }\r\n        }\r\n        else {\r\n            _this.extend(baseUrl, path);\r\n            var target = baseUrl.query.get(\""@target\"");\r\n            if (target !== undefined) {\r\n                _this.query.set(\""@target\"", target);\r\n            }\r\n        }\r\n        return _this;\r\n    }\r\n    /**\r\n     * Creates a new instance of the supplied factory and extends this into that new instance\r\n     *\r\n     * @param factory constructor for the new SharePointQueryable\r\n     */\r\n    SharePointQueryable.prototype.as = function (factory) {\r\n        var o = new factory(this._url, null);\r\n        return extend(o, this, true);\r\n    };\r\n    /**\r\n     * Gets the full url with query information\r\n     *\r\n     */\r\n    SharePointQueryable.prototype.toUrlAndQuery = function () {\r\n        var aliasedParams = new Map(this.query);\r\n        var url = this.toUrl().replace(/'!(@.*?)::(.*?)'/ig, function (match, labelName, value) {\r\n            Logger.write(\""Rewriting aliased parameter from match \"" + match + \"" to label: \"" + labelName + \"" value: \"" + value, 0 /* Verbose */);\r\n            aliasedParams.set(labelName, \""'\"" + value + \""'\"");\r\n            return labelName;\r\n        });\r\n        if (aliasedParams.size > 0) {\r\n            var char = url.indexOf(\""?\"") > -1 ? \""&\"" : \""?\"";\r\n            url += \""\"" + char + Array.from(aliasedParams).map(function (v) { return v[0] + \""=\"" + v[1]; }).join(\""&\"");\r\n        }\r\n        return url;\r\n    };\r\n    /**\r\n     * Choose which fields to return\r\n     *\r\n     * @param selects One or more fields to return\r\n     */\r\n    SharePointQueryable.prototype.select = function () {\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        if (selects.length > 0) {\r\n            this.query.set(\""$select\"", selects.join(\"",\""));\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Expands fields such as lookups to get additional data\r\n     *\r\n     * @param expands The Fields for which to expand the values\r\n     */\r\n    SharePointQueryable.prototype.expand = function () {\r\n        var expands = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            expands[_i] = arguments[_i];\r\n        }\r\n        if (expands.length > 0) {\r\n            this.query.set(\""$expand\"", expands.join(\"",\""));\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets a parent for this instance as specified\r\n     *\r\n     * @param factory The contructor for the class to create\r\n     */\r\n    SharePointQueryable.prototype.getParent = function (factory, baseUrl, path, batch) {\r\n        if (baseUrl === void 0) { baseUrl = this.parentUrl; }\r\n        var parent = new factory(baseUrl, path).configureFrom(this);\r\n        var t = \""@target\"";\r\n        if (this.query.has(t)) {\r\n            parent.query.set(t, this.query.get(t));\r\n        }\r\n        if (batch !== undefined) {\r\n            parent = parent.inBatch(batch);\r\n        }\r\n        return parent;\r\n    };\r\n    /**\r\n     * Clones this SharePointQueryable into a new SharePointQueryable instance of T\r\n     * @param factory Constructor used to create the new instance\r\n     * @param additionalPath Any additional path to include in the clone\r\n     * @param includeBatch If true this instance's batch will be added to the cloned instance\r\n     */\r\n    SharePointQueryable.prototype.clone = function (factory, additionalPath, includeBatch) {\r\n        if (includeBatch === void 0) { includeBatch = true; }\r\n        var clone = _super.prototype._clone.call(this, new factory(this, additionalPath), { includeBatch: includeBatch });\r\n        // handle sp specific clone actions\r\n        var t = \""@target\"";\r\n        if (this.query.has(t)) {\r\n            clone.query.set(t, this.query.get(t));\r\n        }\r\n        return clone;\r\n    };\r\n    /**\r\n     * Converts the current instance to a request context\r\n     *\r\n     * @param verb The request verb\r\n     * @param options The set of supplied request options\r\n     * @param parser The supplied ODataParser instance\r\n     * @param pipeline Optional request processing pipeline\r\n     */\r\n    SharePointQueryable.prototype.toRequestContext = function (verb, options, parser, pipeline) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        var dependencyDispose = this.hasBatch ? this.addBatchDependency() : function () { return; };\r\n        return toAbsoluteUrl(this.toUrlAndQuery()).then(function (url) {\r\n            mergeOptions(options, _this._options);\r\n            // build our request context\r\n            var context = {\r\n                batch: _this.batch,\r\n                batchDependency: dependencyDispose,\r\n                cachingOptions: _this._cachingOptions,\r\n                clientFactory: function () { return new SPHttpClient(); },\r\n                isBatched: _this.hasBatch,\r\n                isCached: _this._forceCaching || (_this._useCaching && /^get$/i.test(verb)),\r\n                options: options,\r\n                parser: parser,\r\n                pipeline: pipeline,\r\n                requestAbsoluteUrl: url,\r\n                requestId: getGUID(),\r\n                verb: verb,\r\n            };\r\n            return context;\r\n        });\r\n    };\r\n    return SharePointQueryable;\r\n}(ODataQueryable));\r\nexport { SharePointQueryable };\r\n/**\r\n * Represents a REST collection which can be filtered, paged, and selected\r\n *\r\n */\r\nvar SharePointQueryableCollection = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableCollection, _super);\r\n    function SharePointQueryableCollection() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Filters the returned collection (https://msdn.microsoft.com/en-us/library/office/fp142385.aspx#bk_supported)\r\n     *\r\n     * @param filter The string representing the filter query\r\n     */\r\n    SharePointQueryableCollection.prototype.filter = function (filter) {\r\n        this.query.set(\""$filter\"", filter);\r\n        return this;\r\n    };\r\n    /**\r\n     * Orders based on the supplied fields\r\n     *\r\n     * @param orderby The name of the field on which to sort\r\n     * @param ascending If false DESC is appended, otherwise ASC (default)\r\n     */\r\n    SharePointQueryableCollection.prototype.orderBy = function (orderBy, ascending) {\r\n        if (ascending === void 0) { ascending = true; }\r\n        var o = \""$orderby\"";\r\n        var query = this.query.has(o) ? this.query.get(o).split(\"",\"") : [];\r\n        query.push(orderBy + \"" \"" + (ascending ? \""asc\"" : \""desc\""));\r\n        this.query.set(o, query.join(\"",\""));\r\n        return this;\r\n    };\r\n    /**\r\n     * Skips the specified number of items\r\n     *\r\n     * @param skip The number of items to skip\r\n     */\r\n    SharePointQueryableCollection.prototype.skip = function (skip) {\r\n        this.query.set(\""$skip\"", skip.toString());\r\n        return this;\r\n    };\r\n    /**\r\n     * Limits the query to only return the specified number of items\r\n     *\r\n     * @param top The query row limit\r\n     */\r\n    SharePointQueryableCollection.prototype.top = function (top) {\r\n        this.query.set(\""$top\"", top.toString());\r\n        return this;\r\n    };\r\n    return SharePointQueryableCollection;\r\n}(SharePointQueryable));\r\nexport { SharePointQueryableCollection };\r\n/**\r\n * Represents an instance that can be selected\r\n *\r\n */\r\nvar SharePointQueryableInstance = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableInstance, _super);\r\n    function SharePointQueryableInstance() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Curries the update function into the common pieces\r\n     *\r\n     * @param type\r\n     * @param mapper\r\n     */\r\n    SharePointQueryableInstance.prototype._update = function (type, mapper) {\r\n        var _this = this;\r\n        return function (props) { return _this.postCore({\r\n            body: jsS(extend(metadata(type), props)),\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (d) { return mapper(d, props); }); };\r\n    };\r\n    /**\r\n    * Deletes this instance\r\n    *\r\n    */\r\n    SharePointQueryableInstance.prototype._delete = function () {\r\n        return this.postCore({\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this instance with an etag value in the headers\r\n     *\r\n     * @param eTag eTag to delete\r\n     */\r\n    SharePointQueryableInstance.prototype._deleteWithETag = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    return SharePointQueryableInstance;\r\n}(SharePointQueryable));\r\nexport { SharePointQueryableInstance };\r\n/**\r\n * Decorator used to specify the default path for SharePointQueryable objects\r\n *\r\n * @param path\r\n */\r\nexport function defaultPath(path) {\r\n    return function (target) {\r\n        return /** @class */ (function (_super) {\r\n            tslib_1.__extends(class_1, _super);\r\n            function class_1() {\r\n                var args = [];\r\n                for (var _i = 0; _i < arguments.length; _i++) {\r\n                    args[_i] = arguments[_i];\r\n                }\r\n                return _super.call(this, args[0], args.length > 1 && args[1] !== undefined ? args[1] : path) || this;\r\n            }\r\n            return class_1;\r\n        }(target));\r\n    };\r\n}\r\n//# sourceMappingURL=sharepointqueryable.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { RoleAssignments } from \""./roles\"";\r\nimport { PermissionKind } from \""./types\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance } from \""./sharepointqueryable\"";\r\nimport { hOP } from \""@pnp/common\"";\r\nvar SharePointQueryableSecurable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableSecurable, _super);\r\n    function SharePointQueryableSecurable() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(SharePointQueryableSecurable.prototype, \""roleAssignments\"", {\r\n        /**\r\n         * Gets the set of role assignments for this item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new RoleAssignments(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SharePointQueryableSecurable.prototype, \""firstUniqueAncestorSecurableObject\"", {\r\n        /**\r\n         * Gets the closest securable up the security hierarchy whose permissions are applied to this list item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""FirstUniqueAncestorSecurableObject\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the effective permissions for the user supplied\r\n     *\r\n     * @param loginName The claims username for the user (ex: i:0#.f|membership|user@domain.com)\r\n     */\r\n    SharePointQueryableSecurable.prototype.getUserEffectivePermissions = function (loginName) {\r\n        var q = this.clone(SharePointQueryable, \""getUserEffectivePermissions(@user)\"");\r\n        q.query.set(\""@user\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get().then(function (r) {\r\n            // handle verbose mode\r\n            return hOP(r, \""GetUserEffectivePermissions\"") ? r.GetUserEffectivePermissions : r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets the effective permissions for the current user\r\n     */\r\n    SharePointQueryableSecurable.prototype.getCurrentUserEffectivePermissions = function () {\r\n        var _this = this;\r\n        // remove need to reference Web here, which created a circular build issue\r\n        var w = new SharePointQueryableInstance(\""_api/web\"", \""currentuser\"");\r\n        return w.configureFrom(this).select(\""LoginName\"").get().then(function (user) {\r\n            return _this.getUserEffectivePermissions(user.LoginName);\r\n        });\r\n    };\r\n    /**\r\n     * Breaks the security inheritance at this level optinally copying permissions and clearing subscopes\r\n     *\r\n     * @param copyRoleAssignments If true the permissions are copied from the current parent scope\r\n     * @param clearSubscopes Optional. true to make all child securable objects inherit role assignments from the current object\r\n     */\r\n    SharePointQueryableSecurable.prototype.breakRoleInheritance = function (copyRoleAssignments, clearSubscopes) {\r\n        if (copyRoleAssignments === void 0) { copyRoleAssignments = false; }\r\n        if (clearSubscopes === void 0) { clearSubscopes = false; }\r\n        return this.clone(SharePointQueryableSecurable, \""breakroleinheritance(copyroleassignments=\"" + copyRoleAssignments + \"", clearsubscopes=\"" + clearSubscopes + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the local role assignments so that it re-inherit role assignments from the parent object.\r\n     *\r\n     */\r\n    SharePointQueryableSecurable.prototype.resetRoleInheritance = function () {\r\n        return this.clone(SharePointQueryableSecurable, \""resetroleinheritance\"").postCore();\r\n    };\r\n    /**\r\n     * Determines if a given user has the appropriate permissions\r\n     *\r\n     * @param loginName The user to check\r\n     * @param permission The permission being checked\r\n     */\r\n    SharePointQueryableSecurable.prototype.userHasPermissions = function (loginName, permission) {\r\n        var _this = this;\r\n        return this.getUserEffectivePermissions(loginName).then(function (perms) {\r\n            return _this.hasPermissions(perms, permission);\r\n        });\r\n    };\r\n    /**\r\n     * Determines if the current user has the requested permissions\r\n     *\r\n     * @param permission The permission we wish to check\r\n     */\r\n    SharePointQueryableSecurable.prototype.currentUserHasPermissions = function (permission) {\r\n        var _this = this;\r\n        return this.getCurrentUserEffectivePermissions().then(function (perms) {\r\n            return _this.hasPermissions(perms, permission);\r\n        });\r\n    };\r\n    /**\r\n     * Taken from sp.js, checks the supplied permissions against the mask\r\n     *\r\n     * @param value The security principal's permissions on the given object\r\n     * @param perm The permission checked against the value\r\n     */\r\n    /* tslint:disable:no-bitwise */\r\n    SharePointQueryableSecurable.prototype.hasPermissions = function (value, perm) {\r\n        if (!perm) {\r\n            return true;\r\n        }\r\n        if (perm === PermissionKind.FullMask) {\r\n            return (value.High & 32767) === 32767 && value.Low === 65535;\r\n        }\r\n        perm = perm - 1;\r\n        var num = 1;\r\n        if (perm >= 0 && perm < 32) {\r\n            num = num << perm;\r\n            return 0 !== (value.Low & num);\r\n        }\r\n        else if (perm >= 32 && perm < 64) {\r\n            num = num << perm - 32;\r\n            return 0 !== (value.High & num);\r\n        }\r\n        return false;\r\n    };\r\n    return SharePointQueryableSecurable;\r\n}(SharePointQueryableInstance));\r\nexport { SharePointQueryableSecurable };\r\n//# sourceMappingURL=sharepointqueryablesecurable.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, combine, jsS } from \""@pnp/common\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableSecurable } from \""./sharepointqueryablesecurable\"";\r\nimport { RoleType, SharingLinkKind, SharingRole, } from \""./types\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\n/**\r\n * Internal helper class used to augment classes to include sharing functionality\r\n */\r\nvar SharePointQueryableShareable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareable, _super);\r\n    function SharePointQueryableShareable() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a sharing link for the supplied\r\n     *\r\n     * @param kind The kind of link to share\r\n     * @param expiration The optional expiration for this link\r\n     */\r\n    SharePointQueryableShareable.prototype.getShareLink = function (kind, expiration) {\r\n        if (expiration === void 0) { expiration = null; }\r\n        // date needs to be an ISO string or null\r\n        var expString = expiration !== null ? expiration.toISOString() : null;\r\n        // clone using the factory and send the request\r\n        return this.clone(SharePointQueryableShareable, \""shareLink\"").postCore({\r\n            body: jsS({\r\n                request: {\r\n                    createLink: true,\r\n                    emailData: null,\r\n                    settings: {\r\n                        expiration: expString,\r\n                        linkKind: kind,\r\n                    },\r\n                },\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Shares this instance with the supplied users\r\n     *\r\n     * @param loginNames Resolved login names to share\r\n     * @param role The role\r\n     * @param requireSignin True to require the user is authenticated, otherwise false\r\n     * @param propagateAcl True to apply this share to all children\r\n     * @param emailData If supplied an email will be sent with the indicated properties\r\n     */\r\n    SharePointQueryableShareable.prototype.shareWith = function (loginNames, role, requireSignin, propagateAcl, emailData) {\r\n        var _this = this;\r\n        if (requireSignin === void 0) { requireSignin = false; }\r\n        if (propagateAcl === void 0) { propagateAcl = false; }\r\n        // handle the multiple input types\r\n        if (!Array.isArray(loginNames)) {\r\n            loginNames = [loginNames];\r\n        }\r\n        var userStr = jsS(loginNames.map(function (login) { return { Key: login }; }));\r\n        var roleFilter = role === SharingRole.Edit ? RoleType.Contributor : RoleType.Reader;\r\n        // start by looking up the role definition id we need to set the roleValue\r\n        // remove need to reference Web here, which created a circular build issue\r\n        var w = new SharePointQueryableCollection(\""_api/web\"", \""roledefinitions\"");\r\n        return w.select(\""Id\"").filter(\""RoleTypeKind eq \"" + roleFilter).get().then(function (def) {\r\n            if (!Array.isArray(def) || def.length < 1) {\r\n                throw Error(\""Could not locate a role defintion with RoleTypeKind \"" + roleFilter);\r\n            }\r\n            var postBody = {\r\n                includeAnonymousLinkInEmail: requireSignin,\r\n                peoplePickerInput: userStr,\r\n                propagateAcl: propagateAcl,\r\n                roleValue: \""role:\"" + def[0].Id,\r\n                useSimplifiedRoles: true,\r\n            };\r\n            if (emailData !== undefined) {\r\n                postBody = extend(postBody, {\r\n                    emailBody: emailData.body,\r\n                    emailSubject: emailData.subject !== undefined ? emailData.subject : \""\"",\r\n                    sendEmail: true,\r\n                });\r\n            }\r\n            return _this.clone(SharePointQueryableShareable, \""shareObject\"").postCore({\r\n                body: jsS(postBody),\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Shares an object based on the supplied options\r\n     *\r\n     * @param options The set of options to send to the ShareObject method\r\n     * @param bypass If true any processing is skipped and the options are sent directly to the ShareObject method\r\n     */\r\n    SharePointQueryableShareable.prototype.shareObject = function (options, bypass) {\r\n        var _this = this;\r\n        if (bypass === void 0) { bypass = false; }\r\n        if (bypass) {\r\n            // if the bypass flag is set send the supplied parameters directly to the service\r\n            return this.sendShareObjectRequest(options);\r\n        }\r\n        // extend our options with some defaults\r\n        options = extend(options, {\r\n            group: null,\r\n            includeAnonymousLinkInEmail: false,\r\n            propagateAcl: false,\r\n            useSimplifiedRoles: true,\r\n        }, true);\r\n        return this.getRoleValue(options.role, options.group).then(function (roleValue) {\r\n            // handle the multiple input types\r\n            if (!Array.isArray(options.loginNames)) {\r\n                options.loginNames = [options.loginNames];\r\n            }\r\n            var userStr = jsS(options.loginNames.map(function (login) { return { Key: login }; }));\r\n            var postBody = {\r\n                peoplePickerInput: userStr,\r\n                roleValue: roleValue,\r\n                url: options.url,\r\n            };\r\n            if (options.emailData !== undefined && options.emailData !== null) {\r\n                postBody = extend(postBody, {\r\n                    emailBody: options.emailData.body,\r\n                    emailSubject: options.emailData.subject !== undefined ? options.emailData.subject : \""Shared with you.\"",\r\n                    sendEmail: true,\r\n                });\r\n            }\r\n            return _this.sendShareObjectRequest(postBody);\r\n        });\r\n    };\r\n    /**\r\n     * Calls the web's UnshareObject method\r\n     *\r\n     * @param url The url of the object to unshare\r\n     */\r\n    SharePointQueryableShareable.prototype.unshareObjectWeb = function (url) {\r\n        return this.clone(SharePointQueryableShareable, \""unshareObject\"").postCore({\r\n            body: jsS({\r\n                url: url,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Checks Permissions on the list of Users and returns back role the users have on the Item.\r\n     *\r\n     * @param recipients The array of Entities for which Permissions need to be checked.\r\n     */\r\n    SharePointQueryableShareable.prototype.checkPermissions = function (recipients) {\r\n        return this.clone(SharePointQueryableShareable, \""checkPermissions\"").postCore({\r\n            body: jsS({\r\n                recipients: recipients,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Get Sharing Information.\r\n     *\r\n     * @param request The SharingInformationRequest Object.\r\n     * @param expands Expand more fields.\r\n     *\r\n     */\r\n    SharePointQueryableShareable.prototype.getSharingInformation = function (request, expands) {\r\n        if (request === void 0) { request = null; }\r\n        var q = this.clone(SharePointQueryableShareable, \""getSharingInformation\"");\r\n        return q.expand.apply(q, expands).postCore({\r\n            body: jsS({\r\n                request: request,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Gets the sharing settings of an item.\r\n     *\r\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\r\n     */\r\n    SharePointQueryableShareable.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\r\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\r\n        return this.clone(SharePointQueryableShareable, \""getObjectSharingSettings\"").postCore({\r\n            body: jsS({\r\n                useSimplifiedRoles: useSimplifiedRoles,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Unshares this object\r\n     */\r\n    SharePointQueryableShareable.prototype.unshareObject = function () {\r\n        return this.clone(SharePointQueryableShareable, \""unshareObject\"").postCore();\r\n    };\r\n    /**\r\n     * Deletes a link by type\r\n     *\r\n     * @param kind Deletes a sharing link by the kind of link\r\n     */\r\n    SharePointQueryableShareable.prototype.deleteLinkByKind = function (kind) {\r\n        return this.clone(SharePointQueryableShareable, \""deleteLinkByKind\"").postCore({\r\n            body: jsS({ linkKind: kind }),\r\n        });\r\n    };\r\n    /**\r\n     * Removes the specified link to the item.\r\n     *\r\n     * @param kind The kind of link to be deleted.\r\n     * @param shareId\r\n     */\r\n    SharePointQueryableShareable.prototype.unshareLink = function (kind, shareId) {\r\n        if (shareId === void 0) { shareId = \""00000000-0000-0000-0000-000000000000\""; }\r\n        return this.clone(SharePointQueryableShareable, \""unshareLink\"").postCore({\r\n            body: jsS({ linkKind: kind, shareId: shareId }),\r\n        });\r\n    };\r\n    /**\r\n     * Calculates the roleValue string used in the sharing query\r\n     *\r\n     * @param role The Sharing Role\r\n     * @param group The Group type\r\n     */\r\n    SharePointQueryableShareable.prototype.getRoleValue = function (role, group) {\r\n        // we will give group precedence, because we had to make a choice\r\n        if (group !== undefined && group !== null) {\r\n            switch (group) {\r\n                case RoleType.Contributor:\r\n                    // remove need to reference Web here, which created a circular build issue\r\n                    var memberGroup = new SharePointQueryableInstance(\""_api/web\"", \""associatedmembergroup\"");\r\n                    return memberGroup.select(\""Id\"").get().then(function (g) { return \""group: \"" + g.Id; });\r\n                case RoleType.Reader:\r\n                case RoleType.Guest:\r\n                    // remove need to reference Web here, which created a circular build issue\r\n                    var visitorGroup = new SharePointQueryableInstance(\""_api/web\"", \""associatedvisitorgroup\"");\r\n                    return visitorGroup.select(\""Id\"").get().then(function (g) { return \""group: \"" + g.Id; });\r\n                default:\r\n                    throw Error(\""Could not determine role value for supplied value. Contributor, Reader, and Guest are supported\"");\r\n            }\r\n        }\r\n        else {\r\n            var roleFilter = role === SharingRole.Edit ? RoleType.Contributor : RoleType.Reader;\r\n            // remove need to reference Web here, which created a circular build issue\r\n            var roleDefs = new SharePointQueryableCollection(\""_api/web\"", \""roledefinitions\"");\r\n            return roleDefs.select(\""Id\"").top(1).filter(\""RoleTypeKind eq \"" + roleFilter).get().then(function (def) {\r\n                if (def.length < 1) {\r\n                    throw Error(\""Could not locate associated role definition for supplied role. Edit and View are supported\"");\r\n                }\r\n                return \""role: \"" + def[0].Id;\r\n            });\r\n        }\r\n    };\r\n    SharePointQueryableShareable.prototype.getShareObjectWeb = function (candidate) {\r\n        return Promise.resolve(new SharePointQueryableInstance(extractWebUrl(candidate), \""/_api/SP.Web.ShareObject\""));\r\n    };\r\n    SharePointQueryableShareable.prototype.sendShareObjectRequest = function (options) {\r\n        return this.getShareObjectWeb(this.toUrl()).then(function (web) {\r\n            return web.expand(\""UsersWithAccessRequests\"", \""GroupsSharedWith\"").as(SharePointQueryableShareable).postCore({\r\n                body: jsS(options),\r\n            });\r\n        });\r\n    };\r\n    return SharePointQueryableShareable;\r\n}(SharePointQueryable));\r\nexport { SharePointQueryableShareable };\r\nvar SharePointQueryableShareableWeb = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareableWeb, _super);\r\n    function SharePointQueryableShareableWeb() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Shares this web with the supplied users\r\n     * @param loginNames The resolved login names to share\r\n     * @param role The role to share this web\r\n     * @param emailData Optional email data\r\n     */\r\n    SharePointQueryableShareableWeb.prototype.shareWith = function (loginNames, role, emailData) {\r\n        var _this = this;\r\n        if (role === void 0) { role = SharingRole.View; }\r\n        var dependency = this.addBatchDependency();\r\n        // remove need to reference Web here, which created a circular build issue\r\n        var web = new SharePointQueryableInstance(extractWebUrl(this.toUrl()), \""/_api/web/url\"");\r\n        return web.get().then(function (url) {\r\n            dependency();\r\n            return _this.shareObject(combine(url, \""/_layouts/15/aclinv.aspx?forSharing=1&mbypass=1\""), loginNames, role, emailData);\r\n        });\r\n    };\r\n    /**\r\n     * Provides direct access to the static web.ShareObject method\r\n     *\r\n     * @param url The url to share\r\n     * @param loginNames Resolved loginnames string[] of a single login name string\r\n     * @param roleValue Role value\r\n     * @param emailData Optional email data\r\n     * @param groupId Optional group id\r\n     * @param propagateAcl\r\n     * @param includeAnonymousLinkInEmail\r\n     * @param useSimplifiedRoles\r\n     */\r\n    SharePointQueryableShareableWeb.prototype.shareObject = function (url, loginNames, role, emailData, group, propagateAcl, includeAnonymousLinkInEmail, useSimplifiedRoles) {\r\n        if (propagateAcl === void 0) { propagateAcl = false; }\r\n        if (includeAnonymousLinkInEmail === void 0) { includeAnonymousLinkInEmail = false; }\r\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\r\n        return this.clone(SharePointQueryableShareable, null).shareObject({\r\n            emailData: emailData,\r\n            group: group,\r\n            includeAnonymousLinkInEmail: includeAnonymousLinkInEmail,\r\n            loginNames: loginNames,\r\n            propagateAcl: propagateAcl,\r\n            role: role,\r\n            url: url,\r\n            useSimplifiedRoles: useSimplifiedRoles,\r\n        });\r\n    };\r\n    /**\r\n     * Supplies a method to pass any set of arguments to ShareObject\r\n     *\r\n     * @param options The set of options to send to ShareObject\r\n     */\r\n    SharePointQueryableShareableWeb.prototype.shareObjectRaw = function (options) {\r\n        return this.clone(SharePointQueryableShareable, null).shareObject(options, true);\r\n    };\r\n    /**\r\n     * Unshares the object\r\n     *\r\n     * @param url The url of the object to stop sharing\r\n     */\r\n    SharePointQueryableShareableWeb.prototype.unshareObject = function (url) {\r\n        return this.clone(SharePointQueryableShareable, null).unshareObjectWeb(url);\r\n    };\r\n    return SharePointQueryableShareableWeb;\r\n}(SharePointQueryableSecurable));\r\nexport { SharePointQueryableShareableWeb };\r\nvar SharePointQueryableShareableItem = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareableItem, _super);\r\n    function SharePointQueryableShareableItem() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a link suitable for sharing for this item\r\n     *\r\n     * @param kind The type of link to share\r\n     * @param expiration The optional expiration date\r\n     */\r\n    SharePointQueryableShareableItem.prototype.getShareLink = function (kind, expiration) {\r\n        if (kind === void 0) { kind = SharingLinkKind.OrganizationView; }\r\n        if (expiration === void 0) { expiration = null; }\r\n        return this.clone(SharePointQueryableShareable, null).getShareLink(kind, expiration);\r\n    };\r\n    /**\r\n     * Shares this item with one or more users\r\n     *\r\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\r\n     * @param role The role (View | Edit) applied to the share\r\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\r\n     */\r\n    SharePointQueryableShareableItem.prototype.shareWith = function (loginNames, role, requireSignin, emailData) {\r\n        if (role === void 0) { role = SharingRole.View; }\r\n        if (requireSignin === void 0) { requireSignin = false; }\r\n        return this.clone(SharePointQueryableShareable, null).shareWith(loginNames, role, requireSignin, false, emailData);\r\n    };\r\n    /**\r\n     * Checks Permissions on the list of Users and returns back role the users have on the Item.\r\n     *\r\n     * @param recipients The array of Entities for which Permissions need to be checked.\r\n     */\r\n    SharePointQueryableShareableItem.prototype.checkSharingPermissions = function (recipients) {\r\n        return this.clone(SharePointQueryableShareable, null).checkPermissions(recipients);\r\n    };\r\n    /**\r\n     * Get Sharing Information.\r\n     *\r\n     * @param request The SharingInformationRequest Object.\r\n     * @param expands Expand more fields.\r\n     *\r\n     */\r\n    SharePointQueryableShareableItem.prototype.getSharingInformation = function (request, expands) {\r\n        if (request === void 0) { request = null; }\r\n        return this.clone(SharePointQueryableShareable, null).getSharingInformation(request, expands);\r\n    };\r\n    /**\r\n     * Gets the sharing settings of an item.\r\n     *\r\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\r\n     */\r\n    SharePointQueryableShareableItem.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\r\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\r\n        return this.clone(SharePointQueryableShareable, null).getObjectSharingSettings(useSimplifiedRoles);\r\n    };\r\n    /**\r\n     * Unshare this item\r\n     */\r\n    SharePointQueryableShareableItem.prototype.unshare = function () {\r\n        return this.clone(SharePointQueryableShareable, null).unshareObject();\r\n    };\r\n    /**\r\n     * Deletes a sharing link by kind\r\n     *\r\n     * @param kind Deletes a sharing link by the kind of link\r\n     */\r\n    SharePointQueryableShareableItem.prototype.deleteSharingLinkByKind = function (kind) {\r\n        return this.clone(SharePointQueryableShareable, null).deleteLinkByKind(kind);\r\n    };\r\n    /**\r\n     * Removes the specified link to the item.\r\n     *\r\n     * @param kind The kind of link to be deleted.\r\n     * @param shareId\r\n     */\r\n    SharePointQueryableShareableItem.prototype.unshareLink = function (kind, shareId) {\r\n        return this.clone(SharePointQueryableShareable, null).unshareLink(kind, shareId);\r\n    };\r\n    return SharePointQueryableShareableItem;\r\n}(SharePointQueryableSecurable));\r\nexport { SharePointQueryableShareableItem };\r\nvar FileFolderShared = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FileFolderShared, _super);\r\n    function FileFolderShared() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a link suitable for sharing\r\n     *\r\n     * @param kind The kind of link to get\r\n     * @param expiration Optional, an expiration for this link\r\n     */\r\n    FileFolderShared.prototype.getShareLink = function (kind, expiration) {\r\n        if (kind === void 0) { kind = SharingLinkKind.OrganizationView; }\r\n        if (expiration === void 0) { expiration = null; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.getShareLink(kind, expiration);\r\n        });\r\n    };\r\n    /**\r\n         * Checks Permissions on the list of Users and returns back role the users have on the Item.\r\n         *\r\n         * @param recipients The array of Entities for which Permissions need to be checked.\r\n         */\r\n    FileFolderShared.prototype.checkSharingPermissions = function (recipients) {\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.checkPermissions(recipients);\r\n        });\r\n    };\r\n    /**\r\n     * Get Sharing Information.\r\n     *\r\n     * @param request The SharingInformationRequest Object.\r\n     * @param expands Expand more fields.\r\n     *\r\n     */\r\n    FileFolderShared.prototype.getSharingInformation = function (request, expands) {\r\n        if (request === void 0) { request = null; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.getSharingInformation(request, expands);\r\n        });\r\n    };\r\n    /**\r\n     * Gets the sharing settings of an item.\r\n     *\r\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\r\n     */\r\n    FileFolderShared.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\r\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.getObjectSharingSettings(useSimplifiedRoles);\r\n        });\r\n    };\r\n    /**\r\n     * Unshare this item\r\n     */\r\n    FileFolderShared.prototype.unshare = function () {\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.unshareObject();\r\n        });\r\n    };\r\n    /**\r\n     * Deletes a sharing link by the kind of link\r\n     *\r\n     * @param kind The kind of link to be deleted.\r\n     */\r\n    FileFolderShared.prototype.deleteSharingLinkByKind = function (kind) {\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.deleteLinkByKind(kind);\r\n        });\r\n    };\r\n    /**\r\n     * Removes the specified link to the item.\r\n     *\r\n     * @param kind The kind of link to be deleted.\r\n     * @param shareId The share id to delete\r\n     */\r\n    FileFolderShared.prototype.unshareLink = function (kind, shareId) {\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.unshareLink(kind, shareId);\r\n        });\r\n    };\r\n    /**\r\n     * For files and folders we need to use the associated item end point\r\n     */\r\n    FileFolderShared.prototype.getShareable = function () {\r\n        var _this = this;\r\n        // sharing only works on the item end point, not the file one - so we create a folder instance with the item url internally\r\n        return this.clone(SharePointQueryableShareableFile, \""listItemAllFields\"", false).select(\""odata.id\"").get().then(function (d) {\r\n            var shareable = new SharePointQueryableShareable(odataUrlFrom(d));\r\n            // we need to handle batching\r\n            if (_this.hasBatch) {\r\n                shareable = shareable.inBatch(_this.batch);\r\n            }\r\n            return shareable;\r\n        });\r\n    };\r\n    return FileFolderShared;\r\n}(SharePointQueryableInstance));\r\nexport { FileFolderShared };\r\nvar SharePointQueryableShareableFile = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareableFile, _super);\r\n    function SharePointQueryableShareableFile() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Shares this item with one or more users\r\n     *\r\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\r\n     * @param role The role (View | Edit) applied to the share\r\n     * @param shareEverything Share everything in this folder, even items with unique permissions.\r\n     * @param requireSignin If true the user must signin to view link, otherwise anyone with the link can access the resource\r\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\r\n     */\r\n    SharePointQueryableShareableFile.prototype.shareWith = function (loginNames, role, requireSignin, emailData) {\r\n        if (role === void 0) { role = SharingRole.View; }\r\n        if (requireSignin === void 0) { requireSignin = false; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.shareWith(loginNames, role, requireSignin, false, emailData);\r\n        });\r\n    };\r\n    return SharePointQueryableShareableFile;\r\n}(FileFolderShared));\r\nexport { SharePointQueryableShareableFile };\r\nvar SharePointQueryableShareableFolder = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareableFolder, _super);\r\n    function SharePointQueryableShareableFolder() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Shares this item with one or more users\r\n     *\r\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\r\n     * @param role The role (View | Edit) applied to the share\r\n     * @param shareEverything Share everything in this folder, even items with unique permissions.\r\n     * @param requireSignin If true the user must signin to view link, otherwise anyone with the link can access the resource\r\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\r\n     */\r\n    SharePointQueryableShareableFolder.prototype.shareWith = function (loginNames, role, requireSignin, shareEverything, emailData) {\r\n        if (role === void 0) { role = SharingRole.View; }\r\n        if (requireSignin === void 0) { requireSignin = false; }\r\n        if (shareEverything === void 0) { shareEverything = false; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.shareWith(loginNames, role, requireSignin, shareEverything, emailData);\r\n        });\r\n    };\r\n    return SharePointQueryableShareableFolder;\r\n}(FileFolderShared));\r\nexport { SharePointQueryableShareableFolder };\r\n//# sourceMappingURL=sharepointqueryableshareable.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { Web } from \""./webs\"";\r\nimport { UserCustomActions } from \""./usercustomactions\"";\r\nimport { SPBatch } from \""./batch\"";\r\nimport { Features } from \""./features\"";\r\nimport { hOP } from \""@pnp/common\"";\r\n/**\r\n * Describes a site collection\r\n *\r\n */\r\nvar Site = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Site, _super);\r\n    function Site() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Site_1 = Site;\r\n    Object.defineProperty(Site.prototype, \""rootWeb\"", {\r\n        /**\r\n         * Gets the root web of the site collection\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Web(this, \""rootweb\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Site.prototype, \""features\"", {\r\n        /**\r\n         * Gets the active features for this site collection\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Features(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Site.prototype, \""userCustomActions\"", {\r\n        /**\r\n         * Gets all custom actions for this site collection\r\n         *\r\n         */\r\n        get: function () {\r\n            return new UserCustomActions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a Web instance representing the root web of the site collection\r\n     * correctly setup for chaining within the library\r\n     */\r\n    Site.prototype.getRootWeb = function () {\r\n        return this.rootWeb.select(\""Url\"").get().then(function (web) { return new Web(web.Url); });\r\n    };\r\n    /**\r\n     * Gets the context information for this site collection\r\n     */\r\n    Site.prototype.getContextInfo = function () {\r\n        var q = new Site_1(this.parentUrl, \""_api/contextinfo\"");\r\n        return q.postCore().then(function (data) {\r\n            if (hOP(data, \""GetContextWebInformation\"")) {\r\n                var info = data.GetContextWebInformation;\r\n                info.SupportedSchemaVersions = info.SupportedSchemaVersions.results;\r\n                return info;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Gets the document libraries on a site. Static method. (SharePoint Online only)\r\n     *\r\n     * @param absoluteWebUrl The absolute url of the web whose document libraries should be returned\r\n     */\r\n    Site.prototype.getDocumentLibraries = function (absoluteWebUrl) {\r\n        var q = new SharePointQueryable(\""\"", \""_api/sp.web.getdocumentlibraries(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + absoluteWebUrl + \""'\"");\r\n        return q.get().then(function (data) {\r\n            if (hOP(data, \""GetDocumentLibraries\"")) {\r\n                return data.GetDocumentLibraries;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Gets the site url from a page url\r\n     *\r\n     * @param absolutePageUrl The absolute url of the page\r\n     */\r\n    Site.prototype.getWebUrlFromPageUrl = function (absolutePageUrl) {\r\n        var q = new SharePointQueryable(\""\"", \""_api/sp.web.getweburlfrompageurl(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + absolutePageUrl + \""'\"");\r\n        return q.get().then(function (data) {\r\n            if (hOP(data, \""GetWebUrlFromPageUrl\"")) {\r\n                return data.GetWebUrlFromPageUrl;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Creates a new batch for requests within the context of this site collection\r\n     *\r\n     */\r\n    Site.prototype.createBatch = function () {\r\n        return new SPBatch(this.parentUrl);\r\n    };\r\n    /**\r\n     * Opens a web by id (using POST)\r\n     *\r\n     * @param webId The GUID id of the web to open\r\n     */\r\n    Site.prototype.openWebById = function (webId) {\r\n        return this.clone(Site_1, \""openWebById('\"" + webId + \""')\"").postCore().then(function (d) { return ({\r\n            data: d,\r\n            web: Web.fromUrl(d[\""odata.id\""] || d.__metadata.uri),\r\n        }); });\r\n    };\r\n    /**\r\n     * Associates a site collection to a hub site.\r\n     *\r\n     * @param siteId Id of the hub site collection you want to join.\r\n     * If you want to disassociate the site collection from hub site, then\r\n     * pass the siteId as 00000000-0000-0000-0000-000000000000\r\n     */\r\n    Site.prototype.joinHubSite = function (siteId) {\r\n        return this.clone(Site_1, \""joinHubSite('\"" + siteId + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Registers the current site collection as hub site collection\r\n     */\r\n    Site.prototype.registerHubSite = function () {\r\n        return this.clone(Site_1, \""registerHubSite\"").postCore();\r\n    };\r\n    /**\r\n     * Unregisters the current site collection as hub site collection.\r\n     */\r\n    Site.prototype.unRegisterHubSite = function () {\r\n        return this.clone(Site_1, \""unRegisterHubSite\"").postCore();\r\n    };\r\n    var Site_1;\r\n    Site = Site_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/site\"")\r\n    ], Site);\r\n    return Site;\r\n}(SharePointQueryableInstance));\r\nexport { Site };\r\n//# sourceMappingURL=site.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable } from \""./sharepointqueryable\"";\r\n/**\r\n * Implements the site designs API REST methods\r\n *\r\n */\r\nvar SiteDesigns = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteDesigns, _super);\r\n    /**\r\n     * Creates a new instance of the SiteDesigns method class\r\n     *\r\n     * @param baseUrl The parent url provider\r\n     * @param methodName The static method name to call on the utility class\r\n     */\r\n    function SiteDesigns(baseUrl, methodName) {\r\n        return _super.call(this, SiteDesigns.getBaseUrl(baseUrl), \""_api/Microsoft.Sharepoint.Utilities.WebTemplateExtensions.SiteScriptUtility.\"" + methodName) || this;\r\n    }\r\n    SiteDesigns.getBaseUrl = function (candidate) {\r\n        if (typeof candidate === \""string\"") {\r\n            return candidate;\r\n        }\r\n        var c = candidate;\r\n        var url = c.toUrl();\r\n        var index = url.indexOf(\""_api/\"");\r\n        if (index < 0) {\r\n            return url;\r\n        }\r\n        return url.substr(0, index);\r\n    };\r\n    SiteDesigns.prototype.execute = function (props) {\r\n        return this.postCore({\r\n            body: JSON.stringify(props),\r\n            headers: {\r\n                \""Content-Type\"": \""application/json;charset=utf-8\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Creates a new site design available to users when they create a new site from the SharePoint home page.\r\n     *\r\n     * @param creationInfo A sitedesign creation information object\r\n     */\r\n    SiteDesigns.prototype.createSiteDesign = function (creationInfo) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""CreateSiteDesign\"").execute({ info: creationInfo })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Applies a site design to an existing site collection.\r\n     *\r\n     * @param siteDesignId The ID of the site design to apply.\r\n     * @param webUrl The URL of the site collection where you want to apply the site design.\r\n     */\r\n    SiteDesigns.prototype.applySiteDesign = function (siteDesignId, webUrl) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""ApplySiteDesign\"").execute({ siteDesignId: siteDesignId, \""webUrl\"": webUrl })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list of information about existing site designs.\r\n     */\r\n    SiteDesigns.prototype.getSiteDesigns = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesigns\"").execute({})];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets information about a specific site design.\r\n     * @param id The ID of the site design to get information about.\r\n     */\r\n    SiteDesigns.prototype.getSiteDesignMetadata = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesignMetadata\"").execute({ id: id })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Updates a site design with new values. In the REST call, all parameters are optional except the site script Id.\r\n     * If you had previously set the IsDefault parameter to TRUE and wish it to remain true, you must pass in this parameter again (otherwise it will be reset to FALSE).\r\n     * @param updateInfo A sitedesign update information object\r\n     */\r\n    SiteDesigns.prototype.updateSiteDesign = function (updateInfo) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""UpdateSiteDesign\"").execute({ updateInfo: updateInfo })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Deletes a site design.\r\n     * @param id The ID of the site design to delete.\r\n     */\r\n    SiteDesigns.prototype.deleteSiteDesign = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""DeleteSiteDesign\"").execute({ id: id })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list of principals that have access to a site design.\r\n     * @param id The ID of the site design to get rights information from.\r\n     */\r\n    SiteDesigns.prototype.getSiteDesignRights = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesignRights\"").execute({ id: id })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Grants access to a site design for one or more principals.\r\n     * @param id The ID of the site design to grant rights on.\r\n     * @param principalNames An array of one or more principals to grant view rights.\r\n     *                       Principals can be users or mail-enabled security groups in the form of \""alias\"" or \""alias@<domain name>.com\""\r\n     * @param grantedRights Always set to 1. This represents the View right.\r\n     */\r\n    SiteDesigns.prototype.grantSiteDesignRights = function (id, principalNames, grantedRights) {\r\n        if (grantedRights === void 0) { grantedRights = 1; }\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GrantSiteDesignRights\"")\r\n                            .execute({\r\n                            \""grantedRights\"": grantedRights.toString(),\r\n                            \""id\"": id,\r\n                            \""principalNames\"": principalNames,\r\n                        })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Revokes access from a site design for one or more principals.\r\n     * @param id The ID of the site design to revoke rights from.\r\n     * @param principalNames An array of one or more principals to revoke view rights from.\r\n     *                       If all principals have rights revoked on the site design, the site design becomes viewable to everyone.\r\n     */\r\n    SiteDesigns.prototype.revokeSiteDesignRights = function (id, principalNames) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""RevokeSiteDesignRights\"")\r\n                            .execute({\r\n                            \""id\"": id,\r\n                            \""principalNames\"": principalNames,\r\n                        })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return SiteDesigns;\r\n}(SharePointQueryable));\r\nexport { SiteDesigns };\r\n//# sourceMappingURL=sitedesigns.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SiteUsers } from \""./siteusers\"";\r\nimport { extend, jsS, hOP } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Principal Type enum\r\n *\r\n */\r\nexport var PrincipalType;\r\n(function (PrincipalType) {\r\n    PrincipalType[PrincipalType[\""None\""] = 0] = \""None\"";\r\n    PrincipalType[PrincipalType[\""User\""] = 1] = \""User\"";\r\n    PrincipalType[PrincipalType[\""DistributionList\""] = 2] = \""DistributionList\"";\r\n    PrincipalType[PrincipalType[\""SecurityGroup\""] = 4] = \""SecurityGroup\"";\r\n    PrincipalType[PrincipalType[\""SharePointGroup\""] = 8] = \""SharePointGroup\"";\r\n    PrincipalType[PrincipalType[\""All\""] = 15] = \""All\"";\r\n})(PrincipalType || (PrincipalType = {}));\r\n/**\r\n * Describes a collection of site groups\r\n *\r\n */\r\nvar SiteGroups = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteGroups, _super);\r\n    function SiteGroups() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SiteGroups_1 = SiteGroups;\r\n    /**\r\n     * Gets a group from the collection by id\r\n     *\r\n     * @param id The id of the group to retrieve\r\n     */\r\n    SiteGroups.prototype.getById = function (id) {\r\n        var sg = new SiteGroup(this);\r\n        sg.concat(\""(\"" + id + \"")\"");\r\n        return sg;\r\n    };\r\n    /**\r\n     * Adds a new group to the site collection\r\n     *\r\n     * @param props The group properties object of property names and values to be set for the group\r\n     */\r\n    SiteGroups.prototype.add = function (properties) {\r\n        var _this = this;\r\n        var postBody = jsS(extend(metadata(\""SP.Group\""), properties));\r\n        return this.postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                group: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Gets a group from the collection by name\r\n     *\r\n     * @param groupName The name of the group to retrieve\r\n     */\r\n    SiteGroups.prototype.getByName = function (groupName) {\r\n        return new SiteGroup(this, \""getByName('\"" + groupName + \""')\"");\r\n    };\r\n    /**\r\n     * Removes the group with the specified member id from the collection\r\n     *\r\n     * @param id The id of the group to remove\r\n     */\r\n    SiteGroups.prototype.removeById = function (id) {\r\n        return this.clone(SiteGroups_1, \""removeById('\"" + id + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the cross-site group with the specified name from the collection\r\n     *\r\n     * @param loginName The name of the group to remove\r\n     */\r\n    SiteGroups.prototype.removeByLoginName = function (loginName) {\r\n        return this.clone(SiteGroups_1, \""removeByLoginName('\"" + loginName + \""')\"").postCore();\r\n    };\r\n    var SiteGroups_1;\r\n    SiteGroups = SiteGroups_1 = tslib_1.__decorate([\r\n        defaultPath(\""sitegroups\"")\r\n    ], SiteGroups);\r\n    return SiteGroups;\r\n}(SharePointQueryableCollection));\r\nexport { SiteGroups };\r\n/**\r\n * Describes a single group\r\n *\r\n */\r\nvar SiteGroup = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteGroup, _super);\r\n    function SiteGroup() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.update = _this._update(\""SP.Group\"", function (d, p) {\r\n            var retGroup = _this;\r\n            if (hOP(p, \""Title\"")) {\r\n                /* tslint:disable-next-line no-string-literal */\r\n                retGroup = _this.getParent(SiteGroup, _this.parentUrl, \""getByName('\"" + p[\""Title\""] + \""')\"");\r\n            }\r\n            return {\r\n                data: d,\r\n                group: retGroup,\r\n            };\r\n        });\r\n        return _this;\r\n    }\r\n    Object.defineProperty(SiteGroup.prototype, \""users\"", {\r\n        /**\r\n         * Gets the users for this group\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteUsers(this, \""users\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return SiteGroup;\r\n}(SharePointQueryableInstance));\r\nexport { SiteGroup };\r\n//# sourceMappingURL=sitegroups.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable } from \""./sharepointqueryable\"";\r\n/**\r\n * Implements the site script API REST methods\r\n *\r\n */\r\nvar SiteScripts = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteScripts, _super);\r\n    /**\r\n     * Creates a new instance of the SiteScripts method class\r\n     *\r\n     * @param baseUrl The parent url provider\r\n     * @param methodName The static method name to call on the utility class\r\n     */\r\n    function SiteScripts(baseUrl, methodName) {\r\n        return _super.call(this, SiteScripts.getBaseUrl(baseUrl), \""_api/Microsoft.Sharepoint.Utilities.WebTemplateExtensions.SiteScriptUtility.\"" + methodName) || this;\r\n    }\r\n    SiteScripts.getBaseUrl = function (candidate) {\r\n        if (typeof candidate === \""string\"") {\r\n            return candidate;\r\n        }\r\n        var c = candidate;\r\n        var url = c.toUrl();\r\n        var index = url.indexOf(\""_api/\"");\r\n        if (index < 0) {\r\n            return url;\r\n        }\r\n        return url.substr(0, index);\r\n    };\r\n    SiteScripts.prototype.execute = function (props) {\r\n        return this.postCore({\r\n            body: JSON.stringify(props),\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list of information on all existing site scripts.\r\n     */\r\n    SiteScripts.prototype.getSiteScripts = function () {\r\n        return this.clone(SiteScripts, \""GetSiteScripts\"", true).execute({});\r\n    };\r\n    /**\r\n     * Creates a new site script.\r\n     *\r\n     * @param title The display name of the site design.\r\n     * @param content JSON value that describes the script. For more information, see JSON reference.\r\n     */\r\n    SiteScripts.prototype.createSiteScript = function (title, description, content) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteScripts, \""CreateSiteScript(Title=@title,Description=@desc)?@title='\"" + encodeURIComponent(title) + \""'&@desc='\"" + encodeURIComponent(description) + \""'\"")\r\n                            .execute(content)];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets information about a specific site script. It also returns the JSON of the script.\r\n     *\r\n     * @param id The ID of the site script to get information about.\r\n     */\r\n    SiteScripts.prototype.getSiteScriptMetadata = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteScripts, \""GetSiteScriptMetadata\"").execute({ id: id })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Deletes a site script.\r\n     *\r\n     * @param id The ID of the site script to delete.\r\n     */\r\n    SiteScripts.prototype.deleteSiteScript = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteScripts, \""DeleteSiteScript\"").execute({ id: id })];\r\n                    case 1:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Updates a site script with new values. In the REST call, all parameters are optional except the site script Id.\r\n     *\r\n     * @param siteScriptUpdateInfo Object that contains the information to update a site script.\r\n     *                             Make sure you stringify the content object or pass it in the second 'content' parameter\r\n     * @param content (Optional) A new JSON script defining the script actions. For more information, see Site design JSON schema.\r\n     */\r\n    SiteScripts.prototype.updateSiteScript = function (siteScriptUpdateInfo, content) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (content) {\r\n                            siteScriptUpdateInfo.Content = JSON.stringify(content);\r\n                        }\r\n                        return [4 /*yield*/, this.clone(SiteScripts, \""UpdateSiteScript\"").execute({ updateInfo: siteScriptUpdateInfo })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return SiteScripts;\r\n}(SharePointQueryable));\r\nexport { SiteScripts };\r\n//# sourceMappingURL=sitescripts.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SiteGroups } from \""./sitegroups\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of all site collection users\r\n *\r\n */\r\nvar SiteUsers = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteUsers, _super);\r\n    function SiteUsers() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SiteUsers_1 = SiteUsers;\r\n    /**\r\n     * Gets a user from the collection by id\r\n     *\r\n     * @param id The id of the user to retrieve\r\n     */\r\n    SiteUsers.prototype.getById = function (id) {\r\n        return new SiteUser(this, \""getById(\"" + id + \"")\"");\r\n    };\r\n    /**\r\n     * Gets a user from the collection by email\r\n     *\r\n     * @param email The email address of the user to retrieve\r\n     */\r\n    SiteUsers.prototype.getByEmail = function (email) {\r\n        return new SiteUser(this, \""getByEmail('\"" + email + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a user from the collection by login name\r\n     *\r\n     * @param loginName The login name of the user to retrieve\r\n     */\r\n    SiteUsers.prototype.getByLoginName = function (loginName) {\r\n        var su = new SiteUser(this);\r\n        su.concat(\""('!@v::\"" + encodeURIComponent(loginName) + \""')\"");\r\n        return su;\r\n    };\r\n    /**\r\n     * Removes a user from the collection by id\r\n     *\r\n     * @param id The id of the user to remove\r\n     */\r\n    SiteUsers.prototype.removeById = function (id) {\r\n        return this.clone(SiteUsers_1, \""removeById(\"" + id + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Removes a user from the collection by login name\r\n     *\r\n     * @param loginName The login name of the user to remove\r\n     */\r\n    SiteUsers.prototype.removeByLoginName = function (loginName) {\r\n        var o = this.clone(SiteUsers_1, \""removeByLoginName(@v)\"");\r\n        o.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return o.postCore();\r\n    };\r\n    /**\r\n     * Adds a user to a group\r\n     *\r\n     * @param loginName The login name of the user to add to the group\r\n     *\r\n     */\r\n    SiteUsers.prototype.add = function (loginName) {\r\n        var _this = this;\r\n        return this.clone(SiteUsers_1, null).postCore({\r\n            body: jsS(extend(metadata(\""SP.User\""), { LoginName: loginName })),\r\n        }).then(function () { return _this.getByLoginName(loginName); });\r\n    };\r\n    var SiteUsers_1;\r\n    SiteUsers = SiteUsers_1 = tslib_1.__decorate([\r\n        defaultPath(\""siteusers\"")\r\n    ], SiteUsers);\r\n    return SiteUsers;\r\n}(SharePointQueryableCollection));\r\nexport { SiteUsers };\r\n/**\r\n * Base class for a user\r\n *\r\n */\r\nvar UserBase = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UserBase, _super);\r\n    function UserBase() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(UserBase.prototype, \""groups\"", {\r\n        /**\r\n         * Gets the groups for this user\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroups(this, \""groups\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return UserBase;\r\n}(SharePointQueryableInstance));\r\nexport { UserBase };\r\n/**\r\n * Describes a single user\r\n *\r\n */\r\nvar SiteUser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteUser, _super);\r\n    function SiteUser() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n        * Updates this user instance with the supplied properties\r\n        *\r\n        * @param properties A plain object of property names and values to update for the user\r\n        */\r\n        _this.update = _this._update(\""SP.User\"", function (data) { return ({ data: data, user: _this }); });\r\n        /**\r\n         * Delete this user\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    return SiteUser;\r\n}(UserBase));\r\nexport { SiteUser };\r\n/**\r\n * Represents the current user\r\n */\r\nvar CurrentUser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(CurrentUser, _super);\r\n    function CurrentUser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    CurrentUser = tslib_1.__decorate([\r\n        defaultPath(\""currentuser\"")\r\n    ], CurrentUser);\r\n    return CurrentUser;\r\n}(UserBase));\r\nexport { CurrentUser };\r\n//# sourceMappingURL=siteusers.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, defaultPath, } from \""./sharepointqueryable\"";\r\nimport { jsS, hOP } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Exposes social following methods\r\n */\r\nvar SocialQuery = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SocialQuery, _super);\r\n    function SocialQuery() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SocialQuery_1 = SocialQuery;\r\n    Object.defineProperty(SocialQuery.prototype, \""my\"", {\r\n        get: function () {\r\n            return new MySocialQuery(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a URI to a site that lists the current user's followed sites.\r\n     */\r\n    SocialQuery.prototype.getFollowedSitesUri = function () {\r\n        return this.clone(SocialQuery_1, \""FollowedSitesUri\"").get().then(function (r) {\r\n            return r.FollowedSitesUri || r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets a URI to a site that lists the current user's followed documents.\r\n     */\r\n    SocialQuery.prototype.getFollowedDocumentsUri = function () {\r\n        return this.clone(SocialQuery_1, \""FollowedDocumentsUri\"").get().then(function (r) {\r\n            return r.FollowedDocumentsUri || r;\r\n        });\r\n    };\r\n    /**\r\n     * Makes the current user start following a user, document, site, or tag\r\n     *\r\n     * @param actorInfo The actor to start following\r\n     */\r\n    SocialQuery.prototype.follow = function (actorInfo) {\r\n        return this.clone(SocialQuery_1, \""follow\"").postCore({ body: this.createSocialActorInfoRequestBody(actorInfo) });\r\n    };\r\n    /**\r\n     * Indicates whether the current user is following a specified user, document, site, or tag\r\n     *\r\n     * @param actorInfo The actor to find the following status for\r\n     */\r\n    SocialQuery.prototype.isFollowed = function (actorInfo) {\r\n        return this.clone(SocialQuery_1, \""isfollowed\"").postCore({ body: this.createSocialActorInfoRequestBody(actorInfo) });\r\n    };\r\n    /**\r\n     * Makes the current user stop following a user, document, site, or tag\r\n     *\r\n     * @param actorInfo The actor to stop following\r\n     */\r\n    SocialQuery.prototype.stopFollowing = function (actorInfo) {\r\n        return this.clone(SocialQuery_1, \""stopfollowing\"").postCore({ body: this.createSocialActorInfoRequestBody(actorInfo) });\r\n    };\r\n    /**\r\n     * Creates SocialActorInfo request body\r\n     *\r\n     * @param actorInfo The actor to create request body\r\n     */\r\n    SocialQuery.prototype.createSocialActorInfoRequestBody = function (actorInfo) {\r\n        return jsS({\r\n            \""actor\"": Object.assign(metadata(\""SP.Social.SocialActorInfo\""), {\r\n                Id: null,\r\n            }, actorInfo),\r\n        });\r\n    };\r\n    var SocialQuery_1;\r\n    SocialQuery = SocialQuery_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/social.following\"")\r\n    ], SocialQuery);\r\n    return SocialQuery;\r\n}(SharePointQueryableInstance));\r\nexport { SocialQuery };\r\nvar MySocialQuery = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MySocialQuery, _super);\r\n    function MySocialQuery() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    MySocialQuery_1 = MySocialQuery;\r\n    /**\r\n     * Gets users, documents, sites, and tags that the current user is following.\r\n     *\r\n     * @param types Bitwise set of SocialActorTypes to retrieve\r\n     */\r\n    MySocialQuery.prototype.followed = function (types) {\r\n        return this.clone(MySocialQuery_1, \""followed(types=\"" + types + \"")\"").get().then(function (r) {\r\n            return hOP(r, \""Followed\"") ? r.Followed.results : r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets the count of users, documents, sites, and tags that the current user is following.\r\n     *\r\n     * @param types Bitwise set of SocialActorTypes to retrieve\r\n     */\r\n    MySocialQuery.prototype.followedCount = function (types) {\r\n        return this.clone(MySocialQuery_1, \""followedcount(types=\"" + types + \"")\"").get().then(function (r) {\r\n            return r.FollowedCount || r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets the users who are following the current user.\r\n     */\r\n    MySocialQuery.prototype.followers = function () {\r\n        return this.clone(MySocialQuery_1, \""followers\"").get().then(function (r) {\r\n            return hOP(r, \""Followers\"") ? r.Followers.results : r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets users who the current user might want to follow.\r\n     */\r\n    MySocialQuery.prototype.suggestions = function () {\r\n        return this.clone(MySocialQuery_1, \""suggestions\"").get().then(function (r) {\r\n            return hOP(r, \""Suggestions\"") ? r.Suggestions.results : r;\r\n        });\r\n    };\r\n    var MySocialQuery_1;\r\n    MySocialQuery = MySocialQuery_1 = tslib_1.__decorate([\r\n        defaultPath(\""my\"")\r\n    ], MySocialQuery);\r\n    return MySocialQuery;\r\n}(SharePointQueryableInstance));\r\nexport { MySocialQuery };\r\n/**\r\n * Social actor type\r\n *\r\n */\r\nexport var SocialActorType;\r\n(function (SocialActorType) {\r\n    SocialActorType[SocialActorType[\""User\""] = 0] = \""User\"";\r\n    SocialActorType[SocialActorType[\""Document\""] = 1] = \""Document\"";\r\n    SocialActorType[SocialActorType[\""Site\""] = 2] = \""Site\"";\r\n    SocialActorType[SocialActorType[\""Tag\""] = 3] = \""Tag\"";\r\n})(SocialActorType || (SocialActorType = {}));\r\n/**\r\n * Social actor type\r\n *\r\n */\r\n/* tslint:disable:no-bitwise */\r\nexport var SocialActorTypes;\r\n(function (SocialActorTypes) {\r\n    SocialActorTypes[SocialActorTypes[\""None\""] = 0] = \""None\"";\r\n    SocialActorTypes[SocialActorTypes[\""User\""] = 1] = \""User\"";\r\n    SocialActorTypes[SocialActorTypes[\""Document\""] = 2] = \""Document\"";\r\n    SocialActorTypes[SocialActorTypes[\""Site\""] = 4] = \""Site\"";\r\n    SocialActorTypes[SocialActorTypes[\""Tag\""] = 8] = \""Tag\"";\r\n    /**\r\n     * The set excludes documents and sites that do not have feeds.\r\n     */\r\n    SocialActorTypes[SocialActorTypes[\""ExcludeContentWithoutFeeds\""] = 268435456] = \""ExcludeContentWithoutFeeds\"";\r\n    /**\r\n     * The set includes group sites\r\n     */\r\n    SocialActorTypes[SocialActorTypes[\""IncludeGroupsSites\""] = 536870912] = \""IncludeGroupsSites\"";\r\n    /**\r\n     * The set includes only items created within the last 24 hours\r\n     */\r\n    SocialActorTypes[SocialActorTypes[\""WithinLast24Hours\""] = 1073741824] = \""WithinLast24Hours\"";\r\n})(SocialActorTypes || (SocialActorTypes = {}));\r\n/* tslint:enable */\r\n/**\r\n * Result from following\r\n *\r\n */\r\nexport var SocialFollowResult;\r\n(function (SocialFollowResult) {\r\n    SocialFollowResult[SocialFollowResult[\""Ok\""] = 0] = \""Ok\"";\r\n    SocialFollowResult[SocialFollowResult[\""AlreadyFollowing\""] = 1] = \""AlreadyFollowing\"";\r\n    SocialFollowResult[SocialFollowResult[\""LimitReached\""] = 2] = \""LimitReached\"";\r\n    SocialFollowResult[SocialFollowResult[\""InternalError\""] = 3] = \""InternalError\"";\r\n})(SocialFollowResult || (SocialFollowResult = {}));\r\n/**\r\n * Specifies an exception or status code.\r\n */\r\nexport var SocialStatusCode;\r\n(function (SocialStatusCode) {\r\n    /**\r\n     * The operation completed successfully\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""OK\""] = 0] = \""OK\"";\r\n    /**\r\n     * The request is invalid.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""InvalidRequest\""] = 1] = \""InvalidRequest\"";\r\n    /**\r\n     *  The current user is not authorized to perform the operation.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""AccessDenied\""] = 2] = \""AccessDenied\"";\r\n    /**\r\n     * The target of the operation was not found.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""ItemNotFound\""] = 3] = \""ItemNotFound\"";\r\n    /**\r\n     * The operation is invalid for the target's current state.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""InvalidOperation\""] = 4] = \""InvalidOperation\"";\r\n    /**\r\n     * The operation completed without modifying the target.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""ItemNotModified\""] = 5] = \""ItemNotModified\"";\r\n    /**\r\n     * The operation failed because an internal error occurred.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""InternalError\""] = 6] = \""InternalError\"";\r\n    /**\r\n     * The operation failed because the server could not access the distributed cache.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""CacheReadError\""] = 7] = \""CacheReadError\"";\r\n    /**\r\n     * The operation succeeded but the server could not update the distributed cache.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""CacheUpdateError\""] = 8] = \""CacheUpdateError\"";\r\n    /**\r\n     * No personal site exists for the current user, and no further information is available.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""PersonalSiteNotFound\""] = 9] = \""PersonalSiteNotFound\"";\r\n    /**\r\n     * No personal site exists for the current user, and a previous attempt to create one failed.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""FailedToCreatePersonalSite\""] = 10] = \""FailedToCreatePersonalSite\"";\r\n    /**\r\n     * No personal site exists for the current user, and a previous attempt to create one was not authorized.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""NotAuthorizedToCreatePersonalSite\""] = 11] = \""NotAuthorizedToCreatePersonalSite\"";\r\n    /**\r\n     * No personal site exists for the current user, and no attempt should be made to create one.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""CannotCreatePersonalSite\""] = 12] = \""CannotCreatePersonalSite\"";\r\n    /**\r\n     * The operation was rejected because an internal limit had been reached.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""LimitReached\""] = 13] = \""LimitReached\"";\r\n    /**\r\n     * The operation failed because an error occurred during the processing of the specified attachment.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""AttachmentError\""] = 14] = \""AttachmentError\"";\r\n    /**\r\n     * The operation succeeded with recoverable errors; the returned data is incomplete.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""PartialData\""] = 15] = \""PartialData\"";\r\n    /**\r\n     * A required SharePoint feature is not enabled.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""FeatureDisabled\""] = 16] = \""FeatureDisabled\"";\r\n    /**\r\n     * The site's storage quota has been exceeded.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""StorageQuotaExceeded\""] = 17] = \""StorageQuotaExceeded\"";\r\n    /**\r\n     * The operation failed because the server could not access the database.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""DatabaseError\""] = 18] = \""DatabaseError\"";\r\n})(SocialStatusCode || (SocialStatusCode = {}));\r\n//# sourceMappingURL=social.js.map"",""export { odataUrlFrom, spODataEntity, spODataEntityArray, } from \""./odata\"";\r\nexport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, } from \""./sharepointqueryable\"";\r\nexport { SharePointQueryableSecurable, } from \""./sharepointqueryablesecurable\"";\r\nexport { FileFolderShared, SharePointQueryableShareable, SharePointQueryableShareableFile, SharePointQueryableShareableFolder, SharePointQueryableShareableItem, SharePointQueryableShareableWeb, } from \""./sharepointqueryableshareable\"";\r\nexport { AppCatalog, App, } from \""./appcatalog\"";\r\nexport { SPBatch, } from \""./batch\"";\r\nexport * from \""./clientsidepages\"";\r\nexport * from \""./comments\"";\r\nexport { ContentType, ContentTypes, FieldLink, FieldLinks, } from \""./contenttypes\"";\r\nexport { Field, Fields, } from \""./fields\"";\r\nexport { CheckinType, WebPartsPersonalizationScope, MoveOperations, TemplateFileType, File, Files, } from \""./files\"";\r\nexport { Folder, Folders, } from \""./folders\"";\r\nexport { SPHttpClient, } from \""./net/sphttpclient\"";\r\nexport { Item, Items, ItemVersion, ItemVersions, PagedItemCollection, } from \""./items\"";\r\nexport { NavigationNodes, NavigationNode, NavigationService, } from \""./navigation\"";\r\nexport { List, Lists, } from \""./lists\"";\r\nexport { RegionalSettings, InstalledLanguages, TimeZone, TimeZones, } from \""./regionalsettings\"";\r\nexport { sp, SPRest, } from \""./rest\"";\r\nexport { RoleDefinitionBindings, } from \""./roles\"";\r\nexport { Search, SearchQueryBuilder, SearchResults, SortDirection, ReorderingRuleMatchType, QueryPropertyValueType, SearchBuiltInSourceId, } from \""./search\"";\r\nexport { SearchSuggest, } from \""./searchsuggest\"";\r\nexport { Site, } from \""./site\"";\r\nexport * from \""./social\"";\r\nexport * from \""./types\"";\r\nexport { UserProfileQuery, } from \""./userprofiles\"";\r\nexport { toAbsoluteUrl, } from \""./utils/toabsoluteurl\"";\r\nexport { extractWebUrl, } from \""./utils/extractweburl\"";\r\nexport { UtilityMethod, } from \""./utilities\"";\r\nexport { View, Views, ViewFields, } from \""./views\"";\r\nexport { WebPartDefinitions, WebPartDefinition, WebPart, } from \""./webparts\"";\r\nexport { Web, } from \""./webs\"";\r\nexport { SiteScripts, } from \""./sitescripts\"";\r\nexport { SiteDesigns, } from \""./sitedesigns\"";\r\n//# sourceMappingURL=sp.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\n/**\r\n * Describes a collection of webhook subscriptions\r\n *\r\n */\r\nvar Subscriptions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Subscriptions, _super);\r\n    function Subscriptions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Returns all the webhook subscriptions or the specified webhook subscription\r\n     *\r\n     * @param subscriptionId The id of a specific webhook subscription to retrieve, omit to retrieve all the webhook subscriptions\r\n     */\r\n    Subscriptions.prototype.getById = function (subscriptionId) {\r\n        var s = new Subscription(this);\r\n        s.concat(\""('\"" + subscriptionId + \""')\"");\r\n        return s;\r\n    };\r\n    /**\r\n     * Creates a new webhook subscription\r\n     *\r\n     * @param notificationUrl The url to receive the notifications\r\n     * @param expirationDate The date and time to expire the subscription in the form YYYY-MM-ddTHH:mm:ss+00:00 (maximum of 6 months)\r\n     * @param clientState A client specific string (defaults to pnp-js-core-subscription when omitted)\r\n     */\r\n    Subscriptions.prototype.add = function (notificationUrl, expirationDate, clientState) {\r\n        var _this = this;\r\n        var postBody = jsS({\r\n            \""clientState\"": clientState || \""pnp-js-core-subscription\"",\r\n            \""expirationDateTime\"": expirationDate,\r\n            \""notificationUrl\"": notificationUrl,\r\n            \""resource\"": this.toUrl(),\r\n        });\r\n        return this.postCore({ body: postBody, headers: { \""Content-Type\"": \""application/json\"" } }).then(function (result) {\r\n            return { data: result, subscription: _this.getById(result.id) };\r\n        });\r\n    };\r\n    Subscriptions = tslib_1.__decorate([\r\n        defaultPath(\""subscriptions\"")\r\n    ], Subscriptions);\r\n    return Subscriptions;\r\n}(SharePointQueryableCollection));\r\nexport { Subscriptions };\r\n/**\r\n * Describes a single webhook subscription instance\r\n *\r\n */\r\nvar Subscription = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Subscription, _super);\r\n    function Subscription() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Renews this webhook subscription\r\n     *\r\n     * @param expirationDate The date and time to expire the subscription in the form YYYY-MM-ddTHH:mm:ss+00:00 (maximum of 6 months)\r\n     */\r\n    Subscription.prototype.update = function (expirationDate) {\r\n        var _this = this;\r\n        var postBody = jsS({\r\n            \""expirationDateTime\"": expirationDate,\r\n        });\r\n        return this.patchCore({ body: postBody, headers: { \""Content-Type\"": \""application/json\"" } }).then(function (data) {\r\n            return { data: data, subscription: _this };\r\n        });\r\n    };\r\n    /**\r\n     * Removes this webhook subscription\r\n     *\r\n     */\r\n    Subscription.prototype.delete = function () {\r\n        return _super.prototype.deleteCore.call(this);\r\n    };\r\n    return Subscription;\r\n}(SharePointQueryableInstance));\r\nexport { Subscription };\r\n//# sourceMappingURL=subscriptions.js.map"",""/**\r\n * Determines the display mode of the given control or view\r\n */\r\nexport var ControlMode;\r\n(function (ControlMode) {\r\n    ControlMode[ControlMode[\""Display\""] = 1] = \""Display\"";\r\n    ControlMode[ControlMode[\""Edit\""] = 2] = \""Edit\"";\r\n    ControlMode[ControlMode[\""New\""] = 3] = \""New\"";\r\n})(ControlMode || (ControlMode = {}));\r\n/**\r\n * Specifies the type of the field.\r\n */\r\nexport var FieldTypes;\r\n(function (FieldTypes) {\r\n    FieldTypes[FieldTypes[\""Invalid\""] = 0] = \""Invalid\"";\r\n    FieldTypes[FieldTypes[\""Integer\""] = 1] = \""Integer\"";\r\n    FieldTypes[FieldTypes[\""Text\""] = 2] = \""Text\"";\r\n    FieldTypes[FieldTypes[\""Note\""] = 3] = \""Note\"";\r\n    FieldTypes[FieldTypes[\""DateTime\""] = 4] = \""DateTime\"";\r\n    FieldTypes[FieldTypes[\""Counter\""] = 5] = \""Counter\"";\r\n    FieldTypes[FieldTypes[\""Choice\""] = 6] = \""Choice\"";\r\n    FieldTypes[FieldTypes[\""Lookup\""] = 7] = \""Lookup\"";\r\n    FieldTypes[FieldTypes[\""Boolean\""] = 8] = \""Boolean\"";\r\n    FieldTypes[FieldTypes[\""Number\""] = 9] = \""Number\"";\r\n    FieldTypes[FieldTypes[\""Currency\""] = 10] = \""Currency\"";\r\n    FieldTypes[FieldTypes[\""URL\""] = 11] = \""URL\"";\r\n    FieldTypes[FieldTypes[\""Computed\""] = 12] = \""Computed\"";\r\n    FieldTypes[FieldTypes[\""Threading\""] = 13] = \""Threading\"";\r\n    FieldTypes[FieldTypes[\""Guid\""] = 14] = \""Guid\"";\r\n    FieldTypes[FieldTypes[\""MultiChoice\""] = 15] = \""MultiChoice\"";\r\n    FieldTypes[FieldTypes[\""GridChoice\""] = 16] = \""GridChoice\"";\r\n    FieldTypes[FieldTypes[\""Calculated\""] = 17] = \""Calculated\"";\r\n    FieldTypes[FieldTypes[\""File\""] = 18] = \""File\"";\r\n    FieldTypes[FieldTypes[\""Attachments\""] = 19] = \""Attachments\"";\r\n    FieldTypes[FieldTypes[\""User\""] = 20] = \""User\"";\r\n    FieldTypes[FieldTypes[\""Recurrence\""] = 21] = \""Recurrence\"";\r\n    FieldTypes[FieldTypes[\""CrossProjectLink\""] = 22] = \""CrossProjectLink\"";\r\n    FieldTypes[FieldTypes[\""ModStat\""] = 23] = \""ModStat\"";\r\n    FieldTypes[FieldTypes[\""Error\""] = 24] = \""Error\"";\r\n    FieldTypes[FieldTypes[\""ContentTypeId\""] = 25] = \""ContentTypeId\"";\r\n    FieldTypes[FieldTypes[\""PageSeparator\""] = 26] = \""PageSeparator\"";\r\n    FieldTypes[FieldTypes[\""ThreadIndex\""] = 27] = \""ThreadIndex\"";\r\n    FieldTypes[FieldTypes[\""WorkflowStatus\""] = 28] = \""WorkflowStatus\"";\r\n    FieldTypes[FieldTypes[\""AllDayEvent\""] = 29] = \""AllDayEvent\"";\r\n    FieldTypes[FieldTypes[\""WorkflowEventType\""] = 30] = \""WorkflowEventType\"";\r\n})(FieldTypes || (FieldTypes = {}));\r\nexport var DateTimeFieldFormatType;\r\n(function (DateTimeFieldFormatType) {\r\n    DateTimeFieldFormatType[DateTimeFieldFormatType[\""DateOnly\""] = 0] = \""DateOnly\"";\r\n    DateTimeFieldFormatType[DateTimeFieldFormatType[\""DateTime\""] = 1] = \""DateTime\"";\r\n})(DateTimeFieldFormatType || (DateTimeFieldFormatType = {}));\r\n/**\r\n * Specifies the control settings while adding a field.\r\n */\r\nexport var AddFieldOptions;\r\n(function (AddFieldOptions) {\r\n    /**\r\n     *  Specify that a new field added to the list must also be added to the default content type in the site collection\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""DefaultValue\""] = 0] = \""DefaultValue\"";\r\n    /**\r\n     * Specify that a new field added to the list must also be added to the default content type in the site collection.\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddToDefaultContentType\""] = 1] = \""AddToDefaultContentType\"";\r\n    /**\r\n     * Specify that a new field must not be added to any other content type\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddToNoContentType\""] = 2] = \""AddToNoContentType\"";\r\n    /**\r\n     *  Specify that a new field that is added to the specified list must also be added to all content types in the site collection\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddToAllContentTypes\""] = 4] = \""AddToAllContentTypes\"";\r\n    /**\r\n     * Specify adding an internal field name hint for the purpose of avoiding possible database locking or field renaming operations\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddFieldInternalNameHint\""] = 8] = \""AddFieldInternalNameHint\"";\r\n    /**\r\n     * Specify that a new field that is added to the specified list must also be added to the default list view\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddFieldToDefaultView\""] = 16] = \""AddFieldToDefaultView\"";\r\n    /**\r\n     * Specify to confirm that no other field has the same display name\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddFieldCheckDisplayName\""] = 32] = \""AddFieldCheckDisplayName\"";\r\n})(AddFieldOptions || (AddFieldOptions = {}));\r\nexport var CalendarType;\r\n(function (CalendarType) {\r\n    CalendarType[CalendarType[\""Gregorian\""] = 1] = \""Gregorian\"";\r\n    CalendarType[CalendarType[\""Japan\""] = 3] = \""Japan\"";\r\n    CalendarType[CalendarType[\""Taiwan\""] = 4] = \""Taiwan\"";\r\n    CalendarType[CalendarType[\""Korea\""] = 5] = \""Korea\"";\r\n    CalendarType[CalendarType[\""Hijri\""] = 6] = \""Hijri\"";\r\n    CalendarType[CalendarType[\""Thai\""] = 7] = \""Thai\"";\r\n    CalendarType[CalendarType[\""Hebrew\""] = 8] = \""Hebrew\"";\r\n    CalendarType[CalendarType[\""GregorianMEFrench\""] = 9] = \""GregorianMEFrench\"";\r\n    CalendarType[CalendarType[\""GregorianArabic\""] = 10] = \""GregorianArabic\"";\r\n    CalendarType[CalendarType[\""GregorianXLITEnglish\""] = 11] = \""GregorianXLITEnglish\"";\r\n    CalendarType[CalendarType[\""GregorianXLITFrench\""] = 12] = \""GregorianXLITFrench\"";\r\n    CalendarType[CalendarType[\""KoreaJapanLunar\""] = 14] = \""KoreaJapanLunar\"";\r\n    CalendarType[CalendarType[\""ChineseLunar\""] = 15] = \""ChineseLunar\"";\r\n    CalendarType[CalendarType[\""SakaEra\""] = 16] = \""SakaEra\"";\r\n    CalendarType[CalendarType[\""UmAlQura\""] = 23] = \""UmAlQura\"";\r\n})(CalendarType || (CalendarType = {}));\r\nexport var UrlFieldFormatType;\r\n(function (UrlFieldFormatType) {\r\n    UrlFieldFormatType[UrlFieldFormatType[\""Hyperlink\""] = 0] = \""Hyperlink\"";\r\n    UrlFieldFormatType[UrlFieldFormatType[\""Image\""] = 1] = \""Image\"";\r\n})(UrlFieldFormatType || (UrlFieldFormatType = {}));\r\nexport var PermissionKind;\r\n(function (PermissionKind) {\r\n    /**\r\n     * Has no permissions on the Site. Not available through the user interface.\r\n     */\r\n    PermissionKind[PermissionKind[\""EmptyMask\""] = 0] = \""EmptyMask\"";\r\n    /**\r\n     * View items in lists, documents in document libraries, and Web discussion comments.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewListItems\""] = 1] = \""ViewListItems\"";\r\n    /**\r\n     * Add items to lists, documents to document libraries, and Web discussion comments.\r\n     */\r\n    PermissionKind[PermissionKind[\""AddListItems\""] = 2] = \""AddListItems\"";\r\n    /**\r\n     * Edit items in lists, edit documents in document libraries, edit Web discussion comments\r\n     * in documents, and customize Web Part Pages in document libraries.\r\n     */\r\n    PermissionKind[PermissionKind[\""EditListItems\""] = 3] = \""EditListItems\"";\r\n    /**\r\n     * Delete items from a list, documents from a document library, and Web discussion\r\n     * comments in documents.\r\n     */\r\n    PermissionKind[PermissionKind[\""DeleteListItems\""] = 4] = \""DeleteListItems\"";\r\n    /**\r\n     * Approve a minor version of a list item or document.\r\n     */\r\n    PermissionKind[PermissionKind[\""ApproveItems\""] = 5] = \""ApproveItems\"";\r\n    /**\r\n     * View the source of documents with server-side file handlers.\r\n     */\r\n    PermissionKind[PermissionKind[\""OpenItems\""] = 6] = \""OpenItems\"";\r\n    /**\r\n     * View past versions of a list item or document.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewVersions\""] = 7] = \""ViewVersions\"";\r\n    /**\r\n     * Delete past versions of a list item or document.\r\n     */\r\n    PermissionKind[PermissionKind[\""DeleteVersions\""] = 8] = \""DeleteVersions\"";\r\n    /**\r\n     * Discard or check in a document which is checked out to another user.\r\n     */\r\n    PermissionKind[PermissionKind[\""CancelCheckout\""] = 9] = \""CancelCheckout\"";\r\n    /**\r\n     * Create, change, and delete personal views of lists.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManagePersonalViews\""] = 10] = \""ManagePersonalViews\"";\r\n    /**\r\n     * Create and delete lists, add or remove columns in a list, and add or remove public views of a list.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManageLists\""] = 12] = \""ManageLists\"";\r\n    /**\r\n     * View forms, views, and application pages, and enumerate lists.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewFormPages\""] = 13] = \""ViewFormPages\"";\r\n    /**\r\n     * Make content of a list or document library retrieveable for anonymous users through SharePoint search.\r\n     * The list permissions in the site do not change.\r\n     */\r\n    PermissionKind[PermissionKind[\""AnonymousSearchAccessList\""] = 14] = \""AnonymousSearchAccessList\"";\r\n    /**\r\n     * Allow users to open a Site, list, or folder to access items inside that container.\r\n     */\r\n    PermissionKind[PermissionKind[\""Open\""] = 17] = \""Open\"";\r\n    /**\r\n     * View pages in a Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewPages\""] = 18] = \""ViewPages\"";\r\n    /**\r\n     * Add, change, or delete HTML pages or Web Part Pages, and edit the Site using\r\n     * a Windows SharePoint Services compatible editor.\r\n     */\r\n    PermissionKind[PermissionKind[\""AddAndCustomizePages\""] = 19] = \""AddAndCustomizePages\"";\r\n    /**\r\n     * Apply a theme or borders to the entire Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""ApplyThemeAndBorder\""] = 20] = \""ApplyThemeAndBorder\"";\r\n    /**\r\n     * Apply a style sheet (.css file) to the Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""ApplyStyleSheets\""] = 21] = \""ApplyStyleSheets\"";\r\n    /**\r\n     * View reports on Site usage.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewUsageData\""] = 22] = \""ViewUsageData\"";\r\n    /**\r\n     * Create a Site using Self-Service Site Creation.\r\n     */\r\n    PermissionKind[PermissionKind[\""CreateSSCSite\""] = 23] = \""CreateSSCSite\"";\r\n    /**\r\n     * Create subsites such as team sites, Meeting Workspace sites, and Document Workspace sites.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManageSubwebs\""] = 24] = \""ManageSubwebs\"";\r\n    /**\r\n     * Create a group of users that can be used anywhere within the site collection.\r\n     */\r\n    PermissionKind[PermissionKind[\""CreateGroups\""] = 25] = \""CreateGroups\"";\r\n    /**\r\n     * Create and change permission levels on the Site and assign permissions to users\r\n     * and groups.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManagePermissions\""] = 26] = \""ManagePermissions\"";\r\n    /**\r\n     * Enumerate files and folders in a Site using Microsoft Office SharePoint Designer\r\n     * and WebDAV interfaces.\r\n     */\r\n    PermissionKind[PermissionKind[\""BrowseDirectories\""] = 27] = \""BrowseDirectories\"";\r\n    /**\r\n     * View information about users of the Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""BrowseUserInfo\""] = 28] = \""BrowseUserInfo\"";\r\n    /**\r\n     * Add or remove personal Web Parts on a Web Part Page.\r\n     */\r\n    PermissionKind[PermissionKind[\""AddDelPrivateWebParts\""] = 29] = \""AddDelPrivateWebParts\"";\r\n    /**\r\n     * Update Web Parts to display personalized information.\r\n     */\r\n    PermissionKind[PermissionKind[\""UpdatePersonalWebParts\""] = 30] = \""UpdatePersonalWebParts\"";\r\n    /**\r\n     * Grant the ability to perform all administration tasks for the Site as well as\r\n     * manage content, activate, deactivate, or edit properties of Site scoped Features\r\n     * through the object model or through the user interface (UI). When granted on the\r\n     * root Site of a Site Collection, activate, deactivate, or edit properties of\r\n     * site collection scoped Features through the object model. To browse to the Site\r\n     * Collection Features page and activate or deactivate Site Collection scoped Features\r\n     * through the UI, you must be a Site Collection administrator.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManageWeb\""] = 31] = \""ManageWeb\"";\r\n    /**\r\n     * Content of lists and document libraries in the Web site will be retrieveable for anonymous users through\r\n     * SharePoint search if the list or document library has AnonymousSearchAccessList set.\r\n     */\r\n    PermissionKind[PermissionKind[\""AnonymousSearchAccessWebLists\""] = 32] = \""AnonymousSearchAccessWebLists\"";\r\n    /**\r\n     * Use features that launch client applications. Otherwise, users must work on documents\r\n     * locally and upload changes.\r\n     */\r\n    PermissionKind[PermissionKind[\""UseClientIntegration\""] = 37] = \""UseClientIntegration\"";\r\n    /**\r\n     * Use SOAP, WebDAV, or Microsoft Office SharePoint Designer interfaces to access the Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""UseRemoteAPIs\""] = 38] = \""UseRemoteAPIs\"";\r\n    /**\r\n     * Manage alerts for all users of the Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManageAlerts\""] = 39] = \""ManageAlerts\"";\r\n    /**\r\n     * Create e-mail alerts.\r\n     */\r\n    PermissionKind[PermissionKind[\""CreateAlerts\""] = 40] = \""CreateAlerts\"";\r\n    /**\r\n     * Allows a user to change his or her user information, such as adding a picture.\r\n     */\r\n    PermissionKind[PermissionKind[\""EditMyUserInfo\""] = 41] = \""EditMyUserInfo\"";\r\n    /**\r\n     * Enumerate permissions on Site, list, folder, document, or list item.\r\n     */\r\n    PermissionKind[PermissionKind[\""EnumeratePermissions\""] = 63] = \""EnumeratePermissions\"";\r\n    /**\r\n     * Has all permissions on the Site. Not available through the user interface.\r\n     */\r\n    PermissionKind[PermissionKind[\""FullMask\""] = 65] = \""FullMask\"";\r\n})(PermissionKind || (PermissionKind = {}));\r\n/**\r\n * Specifies the type of a principal.\r\n */\r\n/* tslint:disable:no-bitwise */\r\nexport var PrincipalType;\r\n(function (PrincipalType) {\r\n    /**\r\n     * Enumeration whose value specifies no principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""None\""] = 0] = \""None\"";\r\n    /**\r\n     * Enumeration whose value specifies a user as the principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""User\""] = 1] = \""User\"";\r\n    /**\r\n     * Enumeration whose value specifies a distribution list as the principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""DistributionList\""] = 2] = \""DistributionList\"";\r\n    /**\r\n     * Enumeration whose value specifies a security group as the principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""SecurityGroup\""] = 4] = \""SecurityGroup\"";\r\n    /**\r\n     * Enumeration whose value specifies a group as the principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""SharePointGroup\""] = 8] = \""SharePointGroup\"";\r\n    /**\r\n     * Enumeration whose value specifies all principal types.\r\n     */\r\n    PrincipalType[PrincipalType[\""All\""] = 15] = \""All\"";\r\n})(PrincipalType || (PrincipalType = {}));\r\n/* tslint:enable:no-bitwise */\r\n/**\r\n * Specifies the source of a principal.\r\n */\r\n/* tslint:disable:no-bitwise */\r\nexport var PrincipalSource;\r\n(function (PrincipalSource) {\r\n    /**\r\n     * Enumeration whose value specifies no principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""None\""] = 0] = \""None\"";\r\n    /**\r\n     * Enumeration whose value specifies user information list as the principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""UserInfoList\""] = 1] = \""UserInfoList\"";\r\n    /**\r\n     * Enumeration whose value specifies Active Directory as the principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""Windows\""] = 2] = \""Windows\"";\r\n    /**\r\n     * Enumeration whose value specifies the current membership provider as the principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""MembershipProvider\""] = 4] = \""MembershipProvider\"";\r\n    /**\r\n     * Enumeration whose value specifies the current role provider as the principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""RoleProvider\""] = 8] = \""RoleProvider\"";\r\n    /**\r\n     * Enumeration whose value specifies all principal sources.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""All\""] = 15] = \""All\"";\r\n})(PrincipalSource || (PrincipalSource = {}));\r\n/* tslint:enable:no-bitwise */\r\nexport var RoleType;\r\n(function (RoleType) {\r\n    RoleType[RoleType[\""None\""] = 0] = \""None\"";\r\n    RoleType[RoleType[\""Guest\""] = 1] = \""Guest\"";\r\n    RoleType[RoleType[\""Reader\""] = 2] = \""Reader\"";\r\n    RoleType[RoleType[\""Contributor\""] = 3] = \""Contributor\"";\r\n    RoleType[RoleType[\""WebDesigner\""] = 4] = \""WebDesigner\"";\r\n    RoleType[RoleType[\""Administrator\""] = 5] = \""Administrator\"";\r\n})(RoleType || (RoleType = {}));\r\nexport var PageType;\r\n(function (PageType) {\r\n    PageType[PageType[\""Invalid\""] = -1] = \""Invalid\"";\r\n    PageType[PageType[\""DefaultView\""] = 0] = \""DefaultView\"";\r\n    PageType[PageType[\""NormalView\""] = 1] = \""NormalView\"";\r\n    PageType[PageType[\""DialogView\""] = 2] = \""DialogView\"";\r\n    PageType[PageType[\""View\""] = 3] = \""View\"";\r\n    PageType[PageType[\""DisplayForm\""] = 4] = \""DisplayForm\"";\r\n    PageType[PageType[\""DisplayFormDialog\""] = 5] = \""DisplayFormDialog\"";\r\n    PageType[PageType[\""EditForm\""] = 6] = \""EditForm\"";\r\n    PageType[PageType[\""EditFormDialog\""] = 7] = \""EditFormDialog\"";\r\n    PageType[PageType[\""NewForm\""] = 8] = \""NewForm\"";\r\n    PageType[PageType[\""NewFormDialog\""] = 9] = \""NewFormDialog\"";\r\n    PageType[PageType[\""SolutionForm\""] = 10] = \""SolutionForm\"";\r\n    PageType[PageType[\""PAGE_MAXITEMS\""] = 11] = \""PAGE_MAXITEMS\"";\r\n})(PageType || (PageType = {}));\r\nexport var SharingLinkKind;\r\n(function (SharingLinkKind) {\r\n    /**\r\n     * Uninitialized link\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""Uninitialized\""] = 0] = \""Uninitialized\"";\r\n    /**\r\n     * Direct link to the object being shared\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""Direct\""] = 1] = \""Direct\"";\r\n    /**\r\n     * Organization-shareable link to the object being shared with view permissions\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""OrganizationView\""] = 2] = \""OrganizationView\"";\r\n    /**\r\n     * Organization-shareable link to the object being shared with edit permissions\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""OrganizationEdit\""] = 3] = \""OrganizationEdit\"";\r\n    /**\r\n     * View only anonymous link\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""AnonymousView\""] = 4] = \""AnonymousView\"";\r\n    /**\r\n     * Read/Write anonymous link\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""AnonymousEdit\""] = 5] = \""AnonymousEdit\"";\r\n    /**\r\n     * Flexible sharing Link where properties can change without affecting link URL\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""Flexible\""] = 6] = \""Flexible\"";\r\n})(SharingLinkKind || (SharingLinkKind = {}));\r\n/**\r\n * Indicates the role of the sharing link\r\n */\r\nexport var SharingRole;\r\n(function (SharingRole) {\r\n    SharingRole[SharingRole[\""None\""] = 0] = \""None\"";\r\n    SharingRole[SharingRole[\""View\""] = 1] = \""View\"";\r\n    SharingRole[SharingRole[\""Edit\""] = 2] = \""Edit\"";\r\n    SharingRole[SharingRole[\""Owner\""] = 3] = \""Owner\"";\r\n})(SharingRole || (SharingRole = {}));\r\nexport var SharingOperationStatusCode;\r\n(function (SharingOperationStatusCode) {\r\n    /**\r\n     * The share operation completed without errors.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CompletedSuccessfully\""] = 0] = \""CompletedSuccessfully\"";\r\n    /**\r\n     * The share operation completed and generated requests for access.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""AccessRequestsQueued\""] = 1] = \""AccessRequestsQueued\"";\r\n    /**\r\n     * The share operation failed as there were no resolved users.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""NoResolvedUsers\""] = -1] = \""NoResolvedUsers\"";\r\n    /**\r\n     * The share operation failed due to insufficient permissions.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""AccessDenied\""] = -2] = \""AccessDenied\"";\r\n    /**\r\n     * The share operation failed when attempting a cross site share, which is not supported.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CrossSiteRequestNotSupported\""] = -3] = \""CrossSiteRequestNotSupported\"";\r\n    /**\r\n     * The sharing operation failed due to an unknown error.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""UnknowError\""] = -4] = \""UnknowError\"";\r\n    /**\r\n     * The text you typed is too long. Please shorten it.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""EmailBodyTooLong\""] = -5] = \""EmailBodyTooLong\"";\r\n    /**\r\n     * The maximum number of unique scopes in the list has been exceeded.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""ListUniqueScopesExceeded\""] = -6] = \""ListUniqueScopesExceeded\"";\r\n    /**\r\n     * The share operation failed because a sharing capability is disabled in the site.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CapabilityDisabled\""] = -7] = \""CapabilityDisabled\"";\r\n    /**\r\n     * The specified object for the share operation is not supported.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""ObjectNotSupported\""] = -8] = \""ObjectNotSupported\"";\r\n    /**\r\n     * A SharePoint group cannot contain another SharePoint group.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""NestedGroupsNotSupported\""] = -9] = \""NestedGroupsNotSupported\"";\r\n})(SharingOperationStatusCode || (SharingOperationStatusCode = {}));\r\nexport var SPSharedObjectType;\r\n(function (SPSharedObjectType) {\r\n    SPSharedObjectType[SPSharedObjectType[\""Unknown\""] = 0] = \""Unknown\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""File\""] = 1] = \""File\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""Folder\""] = 2] = \""Folder\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""Item\""] = 3] = \""Item\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""List\""] = 4] = \""List\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""Web\""] = 5] = \""Web\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""Max\""] = 6] = \""Max\"";\r\n})(SPSharedObjectType || (SPSharedObjectType = {}));\r\nexport var SharingDomainRestrictionMode;\r\n(function (SharingDomainRestrictionMode) {\r\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""None\""] = 0] = \""None\"";\r\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""AllowList\""] = 1] = \""AllowList\"";\r\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""BlockList\""] = 2] = \""BlockList\"";\r\n})(SharingDomainRestrictionMode || (SharingDomainRestrictionMode = {}));\r\nexport var RenderListDataOptions;\r\n(function (RenderListDataOptions) {\r\n    RenderListDataOptions[RenderListDataOptions[\""None\""] = 0] = \""None\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ContextInfo\""] = 1] = \""ContextInfo\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ListData\""] = 2] = \""ListData\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ListSchema\""] = 4] = \""ListSchema\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""MenuView\""] = 8] = \""MenuView\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ListContentType\""] = 16] = \""ListContentType\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""FileSystemItemId\""] = 32] = \""FileSystemItemId\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ClientFormSchema\""] = 64] = \""ClientFormSchema\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""QuickLaunch\""] = 128] = \""QuickLaunch\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""Spotlight\""] = 256] = \""Spotlight\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""Visualization\""] = 512] = \""Visualization\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ViewMetadata\""] = 1024] = \""ViewMetadata\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""DisableAutoHyperlink\""] = 2048] = \""DisableAutoHyperlink\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""EnableMediaTAUrls\""] = 4096] = \""EnableMediaTAUrls\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ParentInfo\""] = 8192] = \""ParentInfo\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""PageContextInfo\""] = 16384] = \""PageContextInfo\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ClientSideComponentManifest\""] = 32768] = \""ClientSideComponentManifest\"";\r\n})(RenderListDataOptions || (RenderListDataOptions = {}));\r\nexport var FieldUserSelectionMode;\r\n(function (FieldUserSelectionMode) {\r\n    FieldUserSelectionMode[FieldUserSelectionMode[\""PeopleAndGroups\""] = 1] = \""PeopleAndGroups\"";\r\n    FieldUserSelectionMode[FieldUserSelectionMode[\""PeopleOnly\""] = 0] = \""PeopleOnly\"";\r\n})(FieldUserSelectionMode || (FieldUserSelectionMode = {}));\r\nexport var ChoiceFieldFormatType;\r\n(function (ChoiceFieldFormatType) {\r\n    ChoiceFieldFormatType[ChoiceFieldFormatType[\""Dropdown\""] = 0] = \""Dropdown\"";\r\n    ChoiceFieldFormatType[ChoiceFieldFormatType[\""RadioButtons\""] = 1] = \""RadioButtons\"";\r\n})(ChoiceFieldFormatType || (ChoiceFieldFormatType = {}));\r\n/**\r\n * Specifies the originating zone of a request received.\r\n */\r\nexport var UrlZone;\r\n(function (UrlZone) {\r\n    /**\r\n     * Specifies the default zone used for requests unless another zone is specified.\r\n     */\r\n    UrlZone[UrlZone[\""DefaultZone\""] = 0] = \""DefaultZone\"";\r\n    /**\r\n     * Specifies an intranet zone.\r\n     */\r\n    UrlZone[UrlZone[\""Intranet\""] = 1] = \""Intranet\"";\r\n    /**\r\n     * Specifies an Internet zone.\r\n     */\r\n    UrlZone[UrlZone[\""Internet\""] = 2] = \""Internet\"";\r\n    /**\r\n     * Specifies a custom zone.\r\n     */\r\n    UrlZone[UrlZone[\""Custom\""] = 3] = \""Custom\"";\r\n    /**\r\n     * Specifies an extranet zone.\r\n     */\r\n    UrlZone[UrlZone[\""Extranet\""] = 4] = \""Extranet\"";\r\n})(UrlZone || (UrlZone = {}));\r\n//# sourceMappingURL=types.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\n/**\r\n * Describes a collection of user custom actions\r\n *\r\n */\r\nvar UserCustomActions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UserCustomActions, _super);\r\n    function UserCustomActions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    UserCustomActions_1 = UserCustomActions;\r\n    /**\r\n     * Returns the user custom action with the specified id\r\n     *\r\n     * @param id The GUID id of the user custom action to retrieve\r\n     */\r\n    UserCustomActions.prototype.getById = function (id) {\r\n        var uca = new UserCustomAction(this);\r\n        uca.concat(\""('\"" + id + \""')\"");\r\n        return uca;\r\n    };\r\n    /**\r\n     * Creates a user custom action\r\n     *\r\n     * @param properties The information object of property names and values which define the new user custom action\r\n     *\r\n     */\r\n    UserCustomActions.prototype.add = function (properties) {\r\n        var _this = this;\r\n        var postBody = jsS(extend({ __metadata: { \""type\"": \""SP.UserCustomAction\"" } }, properties));\r\n        return this.postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                action: _this.getById(data.Id),\r\n                data: data,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Deletes all user custom actions in the collection\r\n     *\r\n     */\r\n    UserCustomActions.prototype.clear = function () {\r\n        return this.clone(UserCustomActions_1, \""clear\"").postCore();\r\n    };\r\n    var UserCustomActions_1;\r\n    UserCustomActions = UserCustomActions_1 = tslib_1.__decorate([\r\n        defaultPath(\""usercustomactions\"")\r\n    ], UserCustomActions);\r\n    return UserCustomActions;\r\n}(SharePointQueryableCollection));\r\nexport { UserCustomActions };\r\n/**\r\n * Describes a single user custom action\r\n *\r\n */\r\nvar UserCustomAction = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UserCustomAction, _super);\r\n    function UserCustomAction() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n        * Updates this user custom action with the supplied properties\r\n        *\r\n        * @param properties An information object of property names and values to update for this user custom action\r\n        */\r\n        _this.update = _this._update(\""SP.UserCustomAction\"", function (data) { return ({ data: data, action: _this }); });\r\n        return _this;\r\n    }\r\n    /**\r\n    * Removes this user custom action\r\n    *\r\n    */\r\n    UserCustomAction.prototype.delete = function () {\r\n        return _super.prototype.deleteCore.call(this);\r\n    };\r\n    return UserCustomAction;\r\n}(SharePointQueryableInstance));\r\nexport { UserCustomAction };\r\n//# sourceMappingURL=usercustomactions.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\nvar UserProfileQuery = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UserProfileQuery, _super);\r\n    /**\r\n     * Creates a new instance of the UserProfileQuery class\r\n     *\r\n     * @param baseUrl The url or SharePointQueryable which forms the parent of this user profile query\r\n     */\r\n    function UserProfileQuery(baseUrl, path) {\r\n        if (path === void 0) { path = \""_api/sp.userprofiles.peoplemanager\""; }\r\n        var _this = _super.call(this, baseUrl, path) || this;\r\n        _this.clientPeoplePickerQuery = (new ClientPeoplePickerQuery(baseUrl)).configureFrom(_this);\r\n        _this.profileLoader = (new ProfileLoader(baseUrl)).configureFrom(_this);\r\n        return _this;\r\n    }\r\n    Object.defineProperty(UserProfileQuery.prototype, \""editProfileLink\"", {\r\n        /**\r\n         * The url of the edit profile page for the current user\r\n         */\r\n        get: function () {\r\n            return this.clone(UserProfileQuery, \""EditProfileLink\"").get();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(UserProfileQuery.prototype, \""isMyPeopleListPublic\"", {\r\n        /**\r\n         * A boolean value that indicates whether the current user's \""People I'm Following\"" list is public\r\n         */\r\n        get: function () {\r\n            return this.clone(UserProfileQuery, \""IsMyPeopleListPublic\"").get();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * A boolean value that indicates whether the current user is being followed by the specified user\r\n     *\r\n     * @param loginName The account name of the user\r\n     */\r\n    UserProfileQuery.prototype.amIFollowedBy = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""amifollowedby(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * A boolean value that indicates whether the current user is following the specified user\r\n     *\r\n     * @param loginName The account name of the user\r\n     */\r\n    UserProfileQuery.prototype.amIFollowing = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""amifollowing(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * Gets tags that the current user is following\r\n     *\r\n     * @param maxCount The maximum number of tags to retrieve (default is 20)\r\n     */\r\n    UserProfileQuery.prototype.getFollowedTags = function (maxCount) {\r\n        if (maxCount === void 0) { maxCount = 20; }\r\n        return this.clone(UserProfileQuery, \""getfollowedtags(\"" + maxCount + \"")\"").get();\r\n    };\r\n    /**\r\n     * Gets the people who are following the specified user\r\n     *\r\n     * @param loginName The account name of the user\r\n     */\r\n    UserProfileQuery.prototype.getFollowersFor = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""getfollowersfor(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    Object.defineProperty(UserProfileQuery.prototype, \""myFollowers\"", {\r\n        /**\r\n         * Gets the people who are following the current user\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""getmyfollowers\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(UserProfileQuery.prototype, \""myProperties\"", {\r\n        /**\r\n         * Gets user properties for the current user\r\n         *\r\n         */\r\n        get: function () {\r\n            return new UserProfileQuery(this, \""getmyproperties\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the people who the specified user is following\r\n     *\r\n     * @param loginName The account name of the user.\r\n     */\r\n    UserProfileQuery.prototype.getPeopleFollowedBy = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""getpeoplefollowedby(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * Gets user properties for the specified user.\r\n     *\r\n     * @param loginName The account name of the user.\r\n     */\r\n    UserProfileQuery.prototype.getPropertiesFor = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""getpropertiesfor(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    Object.defineProperty(UserProfileQuery.prototype, \""trendingTags\"", {\r\n        /**\r\n         * Gets the 20 most popular hash tags over the past week, sorted so that the most popular tag appears first\r\n         *\r\n         */\r\n        get: function () {\r\n            var q = this.clone(UserProfileQuery, null);\r\n            q.concat(\"".gettrendingtags\"");\r\n            return q.get();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the specified user profile property for the specified user\r\n     *\r\n     * @param loginName The account name of the user\r\n     * @param propertyName The case-sensitive name of the property to get\r\n     */\r\n    UserProfileQuery.prototype.getUserProfilePropertyFor = function (loginName, propertyName) {\r\n        var q = this.clone(UserProfileQuery, \""getuserprofilepropertyfor(accountname=@v, propertyname='\"" + propertyName + \""')\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * Removes the specified user from the user's list of suggested people to follow\r\n     *\r\n     * @param loginName The account name of the user\r\n     */\r\n    UserProfileQuery.prototype.hideSuggestion = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""hidesuggestion(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.postCore();\r\n    };\r\n    /**\r\n     * A boolean values that indicates whether the first user is following the second user\r\n     *\r\n     * @param follower The account name of the user who might be following the followee\r\n     * @param followee The account name of the user who might be followed by the follower\r\n     */\r\n    UserProfileQuery.prototype.isFollowing = function (follower, followee) {\r\n        var q = this.clone(UserProfileQuery, null);\r\n        q.concat(\"".isfollowing(possiblefolloweraccountname=@v, possiblefolloweeaccountname=@y)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(follower) + \""'\"");\r\n        q.query.set(\""@y\"", \""'\"" + encodeURIComponent(followee) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * Uploads and sets the user profile picture (Users can upload a picture to their own profile only). Not supported for batching.\r\n     *\r\n     * @param profilePicSource Blob data representing the user's picture in BMP, JPEG, or PNG format of up to 4.76MB\r\n     */\r\n    UserProfileQuery.prototype.setMyProfilePic = function (profilePicSource) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            var buffer = null;\r\n            var reader = new FileReader();\r\n            reader.onload = function (e) { return buffer = e.target.result; };\r\n            reader.readAsArrayBuffer(profilePicSource);\r\n            var request = new UserProfileQuery(_this, \""setmyprofilepicture\"");\r\n            request.postCore({\r\n                body: String.fromCharCode.apply(null, new Uint16Array(buffer)),\r\n            }).then(function (_) { return resolve(); }).catch(function (e) { return reject(e); });\r\n        });\r\n    };\r\n    /**\r\n     * Sets single value User Profile property\r\n     *\r\n     * @param accountName The account name of the user\r\n     * @param propertyName Property name\r\n     * @param propertyValue Property value\r\n     */\r\n    UserProfileQuery.prototype.setSingleValueProfileProperty = function (accountName, propertyName, propertyValue) {\r\n        var postBody = jsS({\r\n            accountName: accountName,\r\n            propertyName: propertyName,\r\n            propertyValue: propertyValue,\r\n        });\r\n        return this.clone(UserProfileQuery, \""SetSingleValueProfileProperty\"")\r\n            .postCore({ body: postBody });\r\n    };\r\n    /**\r\n     * Sets multi valued User Profile property\r\n     *\r\n     * @param accountName The account name of the user\r\n     * @param propertyName Property name\r\n     * @param propertyValues Property values\r\n     */\r\n    UserProfileQuery.prototype.setMultiValuedProfileProperty = function (accountName, propertyName, propertyValues) {\r\n        var postBody = jsS({\r\n            accountName: accountName,\r\n            propertyName: propertyName,\r\n            propertyValues: propertyValues,\r\n        });\r\n        return this.clone(UserProfileQuery, \""SetMultiValuedProfileProperty\"")\r\n            .postCore({ body: postBody });\r\n    };\r\n    /**\r\n     * Provisions one or more users' personal sites. (My Site administrator on SharePoint Online only)\r\n     *\r\n     * @param emails The email addresses of the users to provision sites for\r\n     */\r\n    UserProfileQuery.prototype.createPersonalSiteEnqueueBulk = function () {\r\n        var emails = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            emails[_i] = arguments[_i];\r\n        }\r\n        return this.profileLoader.createPersonalSiteEnqueueBulk(emails);\r\n    };\r\n    Object.defineProperty(UserProfileQuery.prototype, \""ownerUserProfile\"", {\r\n        /**\r\n         * Gets the user profile of the site owner\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.profileLoader.ownerUserProfile;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(UserProfileQuery.prototype, \""userProfile\"", {\r\n        /**\r\n         * Gets the user profile for the current user\r\n         */\r\n        get: function () {\r\n            return this.profileLoader.userProfile;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Enqueues creating a personal site for this user, which can be used to share documents, web pages, and other files\r\n     *\r\n     * @param interactiveRequest true if interactively (web) initiated request, or false (default) if non-interactively (client) initiated request\r\n     */\r\n    UserProfileQuery.prototype.createPersonalSite = function (interactiveRequest) {\r\n        if (interactiveRequest === void 0) { interactiveRequest = false; }\r\n        return this.profileLoader.createPersonalSite(interactiveRequest);\r\n    };\r\n    /**\r\n     * Sets the privacy settings for this profile\r\n     *\r\n     * @param share true to make all social data public; false to make all social data private\r\n     */\r\n    UserProfileQuery.prototype.shareAllSocialData = function (share) {\r\n        return this.profileLoader.shareAllSocialData(share);\r\n    };\r\n    /**\r\n     * Resolves user or group using specified query parameters\r\n     *\r\n     * @param queryParams The query parameters used to perform resolve\r\n     */\r\n    UserProfileQuery.prototype.clientPeoplePickerResolveUser = function (queryParams) {\r\n        return this.clientPeoplePickerQuery.clientPeoplePickerResolveUser(queryParams);\r\n    };\r\n    /**\r\n     * Searches for users or groups using specified query parameters\r\n     *\r\n     * @param queryParams The query parameters used to perform search\r\n     */\r\n    UserProfileQuery.prototype.clientPeoplePickerSearchUser = function (queryParams) {\r\n        return this.clientPeoplePickerQuery.clientPeoplePickerSearchUser(queryParams);\r\n    };\r\n    return UserProfileQuery;\r\n}(SharePointQueryableInstance));\r\nexport { UserProfileQuery };\r\nvar ProfileLoader = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ProfileLoader, _super);\r\n    function ProfileLoader() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ProfileLoader_1 = ProfileLoader;\r\n    /**\r\n     * Provisions one or more users' personal sites. (My Site administrator on SharePoint Online only) Doesn't support batching\r\n     *\r\n     * @param emails The email addresses of the users to provision sites for\r\n     */\r\n    ProfileLoader.prototype.createPersonalSiteEnqueueBulk = function (emails) {\r\n        return this.clone(ProfileLoader_1, \""createpersonalsiteenqueuebulk\"", false).postCore({\r\n            body: jsS({ \""emailIDs\"": emails }),\r\n        });\r\n    };\r\n    Object.defineProperty(ProfileLoader.prototype, \""ownerUserProfile\"", {\r\n        /**\r\n         * Gets the user profile of the site owner.\r\n         *\r\n         */\r\n        get: function () {\r\n            var q = this.getParent(ProfileLoader_1, this.parentUrl, \""_api/sp.userprofiles.profileloader.getowneruserprofile\"");\r\n            if (this.hasBatch) {\r\n                q = q.inBatch(this.batch);\r\n            }\r\n            return q.postCore();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ProfileLoader.prototype, \""userProfile\"", {\r\n        /**\r\n         * Gets the user profile of the current user.\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.clone(ProfileLoader_1, \""getuserprofile\"").postCore();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Enqueues creating a personal site for this user, which can be used to share documents, web pages, and other files.\r\n     *\r\n     * @param interactiveRequest true if interactively (web) initiated request, or false (default) if non-interactively (client) initiated request\r\n     */\r\n    ProfileLoader.prototype.createPersonalSite = function (interactiveRequest) {\r\n        if (interactiveRequest === void 0) { interactiveRequest = false; }\r\n        return this.clone(ProfileLoader_1, \""getuserprofile/createpersonalsiteenque(\"" + interactiveRequest + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Sets the privacy settings for this profile\r\n     *\r\n     * @param share true to make all social data public; false to make all social data private.\r\n     */\r\n    ProfileLoader.prototype.shareAllSocialData = function (share) {\r\n        return this.clone(ProfileLoader_1, \""getuserprofile/shareallsocialdata(\"" + share + \"")\"").postCore();\r\n    };\r\n    var ProfileLoader_1;\r\n    ProfileLoader = ProfileLoader_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/sp.userprofiles.profileloader.getprofileloader\"")\r\n    ], ProfileLoader);\r\n    return ProfileLoader;\r\n}(SharePointQueryable));\r\nvar ClientPeoplePickerQuery = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientPeoplePickerQuery, _super);\r\n    function ClientPeoplePickerQuery() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ClientPeoplePickerQuery_1 = ClientPeoplePickerQuery;\r\n    /**\r\n     * Resolves user or group using specified query parameters\r\n     *\r\n     * @param queryParams The query parameters used to perform resolve\r\n     */\r\n    ClientPeoplePickerQuery.prototype.clientPeoplePickerResolveUser = function (queryParams) {\r\n        var q = this.clone(ClientPeoplePickerQuery_1, null);\r\n        q.concat(\"".clientpeoplepickerresolveuser\"");\r\n        return q.postCore({\r\n            body: this.createClientPeoplePickerQueryParametersRequestBody(queryParams),\r\n        })\r\n            .then(function (res) {\r\n            if (typeof res === \""object\"") {\r\n                return res.ClientPeoplePickerResolveUser;\r\n            }\r\n            return res;\r\n        })\r\n            .then(JSON.parse);\r\n    };\r\n    /**\r\n     * Searches for users or groups using specified query parameters\r\n     *\r\n     * @param queryParams The query parameters used to perform search\r\n     */\r\n    ClientPeoplePickerQuery.prototype.clientPeoplePickerSearchUser = function (queryParams) {\r\n        var q = this.clone(ClientPeoplePickerQuery_1, null);\r\n        q.concat(\"".clientpeoplepickersearchuser\"");\r\n        return q.postCore({\r\n            body: this.createClientPeoplePickerQueryParametersRequestBody(queryParams),\r\n        })\r\n            .then(function (res) {\r\n            if (typeof res === \""object\"") {\r\n                return res.ClientPeoplePickerSearchUser;\r\n            }\r\n            return res;\r\n        })\r\n            .then(JSON.parse);\r\n    };\r\n    /**\r\n     * Creates ClientPeoplePickerQueryParameters request body\r\n     *\r\n     * @param queryParams The query parameters to create request body\r\n     */\r\n    ClientPeoplePickerQuery.prototype.createClientPeoplePickerQueryParametersRequestBody = function (queryParams) {\r\n        return jsS({\r\n            \""queryParams\"": extend(metadata(\""SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters\""), queryParams),\r\n        });\r\n    };\r\n    var ClientPeoplePickerQuery_1;\r\n    ClientPeoplePickerQuery = ClientPeoplePickerQuery_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/sp.ui.applicationpages.clientpeoplepickerwebserviceinterface\"")\r\n    ], ClientPeoplePickerQuery);\r\n    return ClientPeoplePickerQuery;\r\n}(SharePointQueryable));\r\n//# sourceMappingURL=userprofiles.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { File } from \""./files\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Allows for calling of the static SP.Utilities.Utility methods by supplying the method name\r\n */\r\nvar UtilityMethod = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UtilityMethod, _super);\r\n    /**\r\n     * Creates a new instance of the Utility method class\r\n     *\r\n     * @param baseUrl The parent url provider\r\n     * @param methodName The static method name to call on the utility class\r\n     */\r\n    function UtilityMethod(baseUrl, methodName) {\r\n        return _super.call(this, UtilityMethod.getBaseUrl(baseUrl), \""_api/SP.Utilities.Utility.\"" + methodName) || this;\r\n    }\r\n    UtilityMethod.getBaseUrl = function (candidate) {\r\n        if (typeof candidate === \""string\"") {\r\n            return candidate;\r\n        }\r\n        var c = candidate;\r\n        var url = c.toUrl();\r\n        var index = url.indexOf(\""_api/\"");\r\n        if (index < 0) {\r\n            return url;\r\n        }\r\n        return url.substr(0, index);\r\n    };\r\n    UtilityMethod.prototype.excute = function (props) {\r\n        return this.postCore({\r\n            body: jsS(props),\r\n        });\r\n    };\r\n    /**\r\n     * Sends an email based on the supplied properties\r\n     *\r\n     * @param props The properties of the email to send\r\n     */\r\n    UtilityMethod.prototype.sendEmail = function (props) {\r\n        var params = {\r\n            properties: extend(metadata(\""SP.Utilities.EmailProperties\""), {\r\n                Body: props.Body,\r\n                From: props.From,\r\n                Subject: props.Subject,\r\n            }),\r\n        };\r\n        if (props.To && props.To.length > 0) {\r\n            params.properties = extend(params.properties, {\r\n                To: { results: props.To },\r\n            });\r\n        }\r\n        if (props.CC && props.CC.length > 0) {\r\n            params.properties = extend(params.properties, {\r\n                CC: { results: props.CC },\r\n            });\r\n        }\r\n        if (props.BCC && props.BCC.length > 0) {\r\n            params.properties = extend(params.properties, {\r\n                BCC: { results: props.BCC },\r\n            });\r\n        }\r\n        if (props.AdditionalHeaders) {\r\n            params.properties = extend(params.properties, {\r\n                AdditionalHeaders: props.AdditionalHeaders,\r\n            });\r\n        }\r\n        return this.clone(UtilityMethod, \""SendEmail\"", true).excute(params);\r\n    };\r\n    UtilityMethod.prototype.getCurrentUserEmailAddresses = function () {\r\n        return this.clone(UtilityMethod, \""GetCurrentUserEmailAddresses\"", true).excute({});\r\n    };\r\n    UtilityMethod.prototype.resolvePrincipal = function (input, scopes, sources, inputIsEmailOnly, addToUserInfoList, matchUserInfoList) {\r\n        if (matchUserInfoList === void 0) { matchUserInfoList = false; }\r\n        var params = {\r\n            addToUserInfoList: addToUserInfoList,\r\n            input: input,\r\n            inputIsEmailOnly: inputIsEmailOnly,\r\n            matchUserInfoList: matchUserInfoList,\r\n            scopes: scopes,\r\n            sources: sources,\r\n        };\r\n        return this.clone(UtilityMethod, \""ResolvePrincipalInCurrentContext\"", true).excute(params);\r\n    };\r\n    UtilityMethod.prototype.searchPrincipals = function (input, scopes, sources, groupName, maxCount) {\r\n        var params = {\r\n            groupName: groupName,\r\n            input: input,\r\n            maxCount: maxCount,\r\n            scopes: scopes,\r\n            sources: sources,\r\n        };\r\n        return this.clone(UtilityMethod, \""SearchPrincipalsUsingContextWeb\"", true).excute(params);\r\n    };\r\n    UtilityMethod.prototype.createEmailBodyForInvitation = function (pageAddress) {\r\n        var params = {\r\n            pageAddress: pageAddress,\r\n        };\r\n        return this.clone(UtilityMethod, \""CreateEmailBodyForInvitation\"", true).excute(params);\r\n    };\r\n    UtilityMethod.prototype.expandGroupsToPrincipals = function (inputs, maxCount) {\r\n        if (maxCount === void 0) { maxCount = 30; }\r\n        var params = {\r\n            inputs: inputs,\r\n            maxCount: maxCount,\r\n        };\r\n        return this.clone(UtilityMethod, \""ExpandGroupsToPrincipals\"", true).excute(params);\r\n    };\r\n    UtilityMethod.prototype.createWikiPage = function (info) {\r\n        return this.clone(UtilityMethod, \""CreateWikiPageInContextWeb\"", true).excute({\r\n            parameters: info,\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                file: new File(odataUrlFrom(r)),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Checks if file or folder name contains invalid characters\r\n     *\r\n     * @param input File or folder name to check\r\n     * @param onPremise Set to true for SharePoint On-Premise\r\n     * @returns True if contains invalid chars, false otherwise\r\n     */\r\n    UtilityMethod.prototype.containsInvalidFileFolderChars = function (input, onPremise) {\r\n        if (onPremise === void 0) { onPremise = false; }\r\n        if (onPremise) {\r\n            return UtilityMethod.InvalidFileFolderNameCharsOnPremiseRegex.test(input);\r\n        }\r\n        else {\r\n            return UtilityMethod.InvalidFileFolderNameCharsOnlineRegex.test(input);\r\n        }\r\n    };\r\n    /**\r\n     * Removes invalid characters from file or folder name\r\n     *\r\n     * @param input File or folder name\r\n     * @param replacer Value that will replace invalid characters\r\n     * @param onPremise Set to true for SharePoint On-Premise\r\n     * @returns File or folder name with replaced invalid characters\r\n     */\r\n    UtilityMethod.prototype.stripInvalidFileFolderChars = function (input, replacer, onPremise) {\r\n        if (replacer === void 0) { replacer = \""\""; }\r\n        if (onPremise === void 0) { onPremise = false; }\r\n        if (onPremise) {\r\n            return input.replace(UtilityMethod.InvalidFileFolderNameCharsOnPremiseRegex, replacer);\r\n        }\r\n        else {\r\n            return input.replace(UtilityMethod.InvalidFileFolderNameCharsOnlineRegex, replacer);\r\n        }\r\n    };\r\n    UtilityMethod.InvalidFileFolderNameCharsOnlineRegex = /[\""*:<>?/\\\\|\\x00-\\x1f\\x7f-\\x9f]/g;\r\n    UtilityMethod.InvalidFileFolderNameCharsOnPremiseRegex = /[\""#%*:<>?/\\\\|\\x00-\\x1f\\x7f-\\x9f]/g;\r\n    return UtilityMethod;\r\n}(SharePointQueryable));\r\nexport { UtilityMethod };\r\n//# sourceMappingURL=utilities.js.map"",""import { stringIsNullOrEmpty } from \""@pnp/common\"";\r\nexport function extractWebUrl(candidateUrl) {\r\n    if (stringIsNullOrEmpty(candidateUrl)) {\r\n        return \""\"";\r\n    }\r\n    var index = candidateUrl.indexOf(\""_api/\"");\r\n    if (index < 0) {\r\n        index = candidateUrl.indexOf(\""_vti_bin/\"");\r\n    }\r\n    if (index > -1) {\r\n        return candidateUrl.substr(0, index);\r\n    }\r\n    // if all else fails just give them what they gave us back\r\n    return candidateUrl;\r\n}\r\n//# sourceMappingURL=extractweburl.js.map"",""export function metadata(type) {\r\n    return {\r\n        \""__metadata\"": { \""type\"": type },\r\n    };\r\n}\r\n//# sourceMappingURL=metadata.js.map"",""import { combine, isUrlAbsolute, hOP } from \""@pnp/common\"";\r\nimport { SPRuntimeConfig } from \""../config/splibconfig\"";\r\n/**\r\n * Ensures that a given url is absolute for the current web based on context\r\n *\r\n * @param candidateUrl The url to make absolute\r\n *\r\n */\r\nexport function toAbsoluteUrl(candidateUrl) {\r\n    return new Promise(function (resolve) {\r\n        if (isUrlAbsolute(candidateUrl)) {\r\n            // if we are already absolute, then just return the url\r\n            return resolve(candidateUrl);\r\n        }\r\n        if (SPRuntimeConfig.baseUrl !== null) {\r\n            // base url specified either with baseUrl of spfxContext config property\r\n            return resolve(combine(SPRuntimeConfig.baseUrl, candidateUrl));\r\n        }\r\n        if (global._spPageContextInfo !== undefined) {\r\n            // operating in classic pages\r\n            if (hOP(global._spPageContextInfo, \""webAbsoluteUrl\"")) {\r\n                return resolve(combine(global._spPageContextInfo.webAbsoluteUrl, candidateUrl));\r\n            }\r\n            else if (hOP(global._spPageContextInfo, \""webServerRelativeUrl\"")) {\r\n                return resolve(combine(global._spPageContextInfo.webServerRelativeUrl, candidateUrl));\r\n            }\r\n        }\r\n        // does window.location exist and have a certain path part in it?\r\n        if (global.location !== undefined) {\r\n            var baseUrl_1 = global.location.toString().toLowerCase();\r\n            [\""/_layouts/\"", \""/siteassets/\""].forEach(function (s) {\r\n                var index = baseUrl_1.indexOf(s);\r\n                if (index > 0) {\r\n                    return resolve(combine(baseUrl_1.substr(0, index), candidateUrl));\r\n                }\r\n            });\r\n        }\r\n        return resolve(candidateUrl);\r\n    });\r\n}\r\n//# sourceMappingURL=toabsoluteurl.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes the views available in the current context\r\n *\r\n */\r\nvar Views = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Views, _super);\r\n    function Views() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Views_1 = Views;\r\n    /**\r\n     * Gets a view by guid id\r\n     *\r\n     * @param id The GUID id of the view\r\n     */\r\n    Views.prototype.getById = function (id) {\r\n        var v = new View(this);\r\n        v.concat(\""('\"" + id + \""')\"");\r\n        return v;\r\n    };\r\n    /**\r\n     * Gets a view by title (case-sensitive)\r\n     *\r\n     * @param title The case-sensitive title of the view\r\n     */\r\n    Views.prototype.getByTitle = function (title) {\r\n        return new View(this, \""getByTitle('\"" + title + \""')\"");\r\n    };\r\n    /**\r\n     * Adds a new view to the collection\r\n     *\r\n     * @param title The new views's title\r\n     * @param personalView True if this is a personal view, otherwise false, default = false\r\n     * @param additionalSettings Will be passed as part of the view creation body\r\n     */\r\n    Views.prototype.add = function (title, personalView, additionalSettings) {\r\n        var _this = this;\r\n        if (personalView === void 0) { personalView = false; }\r\n        if (additionalSettings === void 0) { additionalSettings = {}; }\r\n        var postBody = jsS(Object.assign(metadata(\""SP.View\""), {\r\n            \""PersonalView\"": personalView,\r\n            \""Title\"": title,\r\n        }, additionalSettings));\r\n        return this.clone(Views_1, null).postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                view: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    var Views_1;\r\n    Views = Views_1 = tslib_1.__decorate([\r\n        defaultPath(\""views\"")\r\n    ], Views);\r\n    return Views;\r\n}(SharePointQueryableCollection));\r\nexport { Views };\r\n/**\r\n * Describes a single View instance\r\n *\r\n */\r\nvar View = /** @class */ (function (_super) {\r\n    tslib_1.__extends(View, _super);\r\n    function View() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Updates this view intance with the supplied properties\r\n         *\r\n         * @param properties A plain object hash of values to update for the view\r\n         */\r\n        _this.update = _this._update(\""SP.View\"", function (data) { return ({ data: data, view: _this }); });\r\n        /**\r\n         * Delete this view\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(View.prototype, \""fields\"", {\r\n        get: function () {\r\n            return new ViewFields(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Returns the list view as HTML.\r\n     *\r\n     */\r\n    View.prototype.renderAsHtml = function () {\r\n        return this.clone(SharePointQueryable, \""renderashtml\"").get();\r\n    };\r\n    return View;\r\n}(SharePointQueryableInstance));\r\nexport { View };\r\nvar ViewFields = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ViewFields, _super);\r\n    function ViewFields() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ViewFields_1 = ViewFields;\r\n    /**\r\n     * Gets a value that specifies the XML schema that represents the collection.\r\n     */\r\n    ViewFields.prototype.getSchemaXml = function () {\r\n        return this.clone(SharePointQueryable, \""schemaxml\"").get();\r\n    };\r\n    /**\r\n     * Adds the field with the specified field internal name or display name to the collection.\r\n     *\r\n     * @param fieldTitleOrInternalName The case-sensitive internal name or display name of the field to add.\r\n     */\r\n    ViewFields.prototype.add = function (fieldTitleOrInternalName) {\r\n        return this.clone(ViewFields_1, \""addviewfield('\"" + fieldTitleOrInternalName + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Moves the field with the specified field internal name to the specified position in the collection.\r\n     *\r\n     * @param fieldInternalName The case-sensitive internal name of the field to move.\r\n     * @param index The zero-based index of the new position for the field.\r\n     */\r\n    ViewFields.prototype.move = function (fieldInternalName, index) {\r\n        return this.clone(ViewFields_1, \""moveviewfieldto\"").postCore({\r\n            body: jsS({ \""field\"": fieldInternalName, \""index\"": index }),\r\n        });\r\n    };\r\n    /**\r\n     * Removes all the fields from the collection.\r\n     */\r\n    ViewFields.prototype.removeAll = function () {\r\n        return this.clone(ViewFields_1, \""removeallviewfields\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the field with the specified field internal name from the collection.\r\n     *\r\n     * @param fieldInternalName The case-sensitive internal name of the field to remove from the view.\r\n     */\r\n    ViewFields.prototype.remove = function (fieldInternalName) {\r\n        return this.clone(ViewFields_1, \""removeviewfield('\"" + fieldInternalName + \""')\"").postCore();\r\n    };\r\n    var ViewFields_1;\r\n    ViewFields = ViewFields_1 = tslib_1.__decorate([\r\n        defaultPath(\""viewfields\"")\r\n    ], ViewFields);\r\n    return ViewFields;\r\n}(SharePointQueryableCollection));\r\nexport { ViewFields };\r\n//# sourceMappingURL=views.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nvar LimitedWebPartManager = /** @class */ (function (_super) {\r\n    tslib_1.__extends(LimitedWebPartManager, _super);\r\n    function LimitedWebPartManager() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(LimitedWebPartManager.prototype, \""webparts\"", {\r\n        /**\r\n         * Gets the set of web part definitions contained by this web part manager\r\n         *\r\n         */\r\n        get: function () {\r\n            return new WebPartDefinitions(this, \""webparts\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Exports a webpart definition\r\n     *\r\n     * @param id the GUID id of the definition to export\r\n     */\r\n    LimitedWebPartManager.prototype.export = function (id) {\r\n        return this.clone(LimitedWebPartManager, \""ExportWebPart\"").postCore({\r\n            body: jsS({ webPartId: id }),\r\n        });\r\n    };\r\n    /**\r\n     * Imports a webpart\r\n     *\r\n     * @param xml webpart definition which must be valid XML in the .dwp or .webpart format\r\n     */\r\n    LimitedWebPartManager.prototype.import = function (xml) {\r\n        return this.clone(LimitedWebPartManager, \""ImportWebPart\"").postCore({\r\n            body: jsS({ webPartXml: xml }),\r\n        });\r\n    };\r\n    return LimitedWebPartManager;\r\n}(SharePointQueryable));\r\nexport { LimitedWebPartManager };\r\nvar WebPartDefinitions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(WebPartDefinitions, _super);\r\n    function WebPartDefinitions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a web part definition from the collection by id\r\n     *\r\n     * @param id The storage ID of the SPWebPartDefinition to retrieve\r\n     */\r\n    WebPartDefinitions.prototype.getById = function (id) {\r\n        return new WebPartDefinition(this, \""getbyid('\"" + id + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a web part definition from the collection by storage id\r\n     *\r\n     * @param id The WebPart.ID of the SPWebPartDefinition to retrieve\r\n     */\r\n    WebPartDefinitions.prototype.getByControlId = function (id) {\r\n        return new WebPartDefinition(this, \""getByControlId('\"" + id + \""')\"");\r\n    };\r\n    return WebPartDefinitions;\r\n}(SharePointQueryableCollection));\r\nexport { WebPartDefinitions };\r\nvar WebPartDefinition = /** @class */ (function (_super) {\r\n    tslib_1.__extends(WebPartDefinition, _super);\r\n    function WebPartDefinition() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(WebPartDefinition.prototype, \""webpart\"", {\r\n        /**\r\n         * Gets the webpart information associated with this definition\r\n         */\r\n        get: function () {\r\n            return new WebPart(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Saves changes to the Web Part made using other properties and methods on the SPWebPartDefinition object\r\n     */\r\n    WebPartDefinition.prototype.saveChanges = function () {\r\n        return this.clone(WebPartDefinition, \""SaveWebPartChanges\"").postCore();\r\n    };\r\n    /**\r\n     * Moves the Web Part to a different location on a Web Part Page\r\n     *\r\n     * @param zoneId The ID of the Web Part Zone to which to move the Web Part\r\n     * @param zoneIndex A Web Part zone index that specifies the position at which the Web Part is to be moved within the destination Web Part zone\r\n     */\r\n    WebPartDefinition.prototype.moveTo = function (zoneId, zoneIndex) {\r\n        return this.clone(WebPartDefinition, \""MoveWebPartTo(zoneID='\"" + zoneId + \""', zoneIndex=\"" + zoneIndex + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Closes the Web Part. If the Web Part is already closed, this method does nothing\r\n     */\r\n    WebPartDefinition.prototype.close = function () {\r\n        return this.clone(WebPartDefinition, \""CloseWebPart\"").postCore();\r\n    };\r\n    /**\r\n     * Opens the Web Part. If the Web Part is already closed, this method does nothing\r\n     */\r\n    WebPartDefinition.prototype.open = function () {\r\n        return this.clone(WebPartDefinition, \""OpenWebPart\"").postCore();\r\n    };\r\n    /**\r\n     * Removes a webpart from a page, all settings will be lost\r\n     */\r\n    WebPartDefinition.prototype.delete = function () {\r\n        return this.clone(WebPartDefinition, \""DeleteWebPart\"").postCore();\r\n    };\r\n    return WebPartDefinition;\r\n}(SharePointQueryableInstance));\r\nexport { WebPartDefinition };\r\nvar WebPart = /** @class */ (function (_super) {\r\n    tslib_1.__extends(WebPart, _super);\r\n    function WebPart() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    WebPart = tslib_1.__decorate([\r\n        defaultPath(\""webpart\"")\r\n    ], WebPart);\r\n    return WebPart;\r\n}(SharePointQueryableInstance));\r\nexport { WebPart };\r\n//# sourceMappingURL=webparts.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableShareableWeb } from \""./sharepointqueryableshareable\"";\r\nimport { Folders, Folder } from \""./folders\"";\r\nimport { Lists, List } from \""./lists\"";\r\nimport { Fields } from \""./fields\"";\r\nimport { Site } from \""./site\"";\r\nimport { Navigation } from \""./navigation\"";\r\nimport { SiteGroups, SiteGroup } from \""./sitegroups\"";\r\nimport { ContentTypes } from \""./contenttypes\"";\r\nimport { RoleDefinitions } from \""./roles\"";\r\nimport { File } from \""./files\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\nimport { SiteUsers, SiteUser, CurrentUser } from \""./siteusers\"";\r\nimport { UserCustomActions } from \""./usercustomactions\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { SPBatch } from \""./batch\"";\r\nimport { Features } from \""./features\"";\r\nimport { RelatedItemManagerImpl } from \""./relateditems\"";\r\nimport { AppCatalog } from \""./appcatalog\"";\r\nimport { RegionalSettings } from \""./regionalsettings\"";\r\nimport { ClientSidePage } from \""./clientsidepages\"";\r\n/**\r\n * Describes a collection of webs\r\n *\r\n */\r\nvar Webs = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Webs, _super);\r\n    function Webs() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Webs_1 = Webs;\r\n    /**\r\n     * Adds a new web to the collection\r\n     *\r\n     * @param title The new web's title\r\n     * @param url The new web's relative url\r\n     * @param description The new web's description\r\n     * @param template The new web's template internal name (default = STS)\r\n     * @param language The locale id that specifies the new web's language (default = 1033 [English, US])\r\n     * @param inheritPermissions When true, permissions will be inherited from the new web's parent (default = true)\r\n     */\r\n    Webs.prototype.add = function (title, url, description, template, language, inheritPermissions) {\r\n        if (description === void 0) { description = \""\""; }\r\n        if (template === void 0) { template = \""STS\""; }\r\n        if (language === void 0) { language = 1033; }\r\n        if (inheritPermissions === void 0) { inheritPermissions = true; }\r\n        var props = {\r\n            Description: description,\r\n            Language: language,\r\n            Title: title,\r\n            Url: url,\r\n            UseSamePermissionsAsParentSite: inheritPermissions,\r\n            WebTemplate: template,\r\n        };\r\n        var postBody = jsS({\r\n            \""parameters\"": extend({\r\n                \""__metadata\"": { \""type\"": \""SP.WebCreationInformation\"" },\r\n            }, props),\r\n        });\r\n        return this.clone(Webs_1, \""add\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                web: new Web(odataUrlFrom(data).replace(/_api\\/web\\/?/i, \""\"")),\r\n            };\r\n        });\r\n    };\r\n    var Webs_1;\r\n    Webs = Webs_1 = tslib_1.__decorate([\r\n        defaultPath(\""webs\"")\r\n    ], Webs);\r\n    return Webs;\r\n}(SharePointQueryableCollection));\r\nexport { Webs };\r\n/**\r\n * Describes a collection of web infos\r\n *\r\n */\r\nvar WebInfos = /** @class */ (function (_super) {\r\n    tslib_1.__extends(WebInfos, _super);\r\n    function WebInfos() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    WebInfos = tslib_1.__decorate([\r\n        defaultPath(\""webinfos\"")\r\n    ], WebInfos);\r\n    return WebInfos;\r\n}(SharePointQueryableCollection));\r\nexport { WebInfos };\r\n/**\r\n * Describes a web\r\n *\r\n */\r\nvar Web = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Web, _super);\r\n    function Web() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Web_1 = Web;\r\n    /**\r\n     * Creates a new web instance from the given url by indexing the location of the /_api/\r\n     * segment. If this is not found the method creates a new web with the entire string as\r\n     * supplied.\r\n     *\r\n     * @param url\r\n     */\r\n    Web.fromUrl = function (url, path) {\r\n        return new Web_1(extractWebUrl(url), path);\r\n    };\r\n    Object.defineProperty(Web.prototype, \""webs\"", {\r\n        /**\r\n         * Gets this web's subwebs\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Webs(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets this web's parent web and data\r\n     *\r\n     */\r\n    Web.prototype.getParentWeb = function () {\r\n        var _this = this;\r\n        return this.select(\""ParentWeb/Id\"").expand(\""ParentWeb\"").get()\r\n            .then(function (_a) {\r\n            var ParentWeb = _a.ParentWeb;\r\n            return new Site(_this.toUrlAndQuery().split(\""/_api\"")[0]).openWebById(ParentWeb.Id);\r\n        });\r\n    };\r\n    /**\r\n    * Returns a collection of objects that contain metadata about subsites of the current site in which the current user is a member.\r\n    *\r\n    * @param nWebTemplateFilter Specifies the site definition (default = -1)\r\n    * @param nConfigurationFilter A 16-bit integer that specifies the identifier of a configuration (default = -1)\r\n    */\r\n    Web.prototype.getSubwebsFilteredForCurrentUser = function (nWebTemplateFilter, nConfigurationFilter) {\r\n        if (nWebTemplateFilter === void 0) { nWebTemplateFilter = -1; }\r\n        if (nConfigurationFilter === void 0) { nConfigurationFilter = -1; }\r\n        return this.clone(Webs, \""getSubwebsFilteredForCurrentUser(nWebTemplateFilter=\"" + nWebTemplateFilter + \"",nConfigurationFilter=\"" + nConfigurationFilter + \"")\"");\r\n    };\r\n    Object.defineProperty(Web.prototype, \""allProperties\"", {\r\n        /**\r\n         * Allows access to the web's all properties collection\r\n         */\r\n        get: function () {\r\n            return this.clone(SharePointQueryableCollection, \""allproperties\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""webinfos\"", {\r\n        /**\r\n         * Gets a collection of WebInfos for this web's subwebs\r\n         *\r\n         */\r\n        get: function () {\r\n            return new WebInfos(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""contentTypes\"", {\r\n        /**\r\n         * Gets the content types available in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new ContentTypes(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""lists\"", {\r\n        /**\r\n         * Gets the lists in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Lists(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""fields\"", {\r\n        /**\r\n         * Gets the fields in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Fields(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""features\"", {\r\n        /**\r\n         * Gets the active features for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Features(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""availablefields\"", {\r\n        /**\r\n         * Gets the available fields in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Fields(this, \""availablefields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""navigation\"", {\r\n        /**\r\n         * Gets the navigation options in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Navigation(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""siteUsers\"", {\r\n        /**\r\n         * Gets the site users\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteUsers(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""siteGroups\"", {\r\n        /**\r\n         * Gets the site groups\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroups(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""siteUserInfoList\"", {\r\n        /**\r\n         * Gets site user info list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new List(this, \""siteuserinfolist\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""regionalSettings\"", {\r\n        /**\r\n         * Gets regional settings\r\n         *\r\n         */\r\n        get: function () {\r\n            return new RegionalSettings(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""currentUser\"", {\r\n        /**\r\n         * Gets the current user\r\n         */\r\n        get: function () {\r\n            return new CurrentUser(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""folders\"", {\r\n        /**\r\n         * Gets the top-level folders in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folders(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""userCustomActions\"", {\r\n        /**\r\n         * Gets all user custom actions for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new UserCustomActions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""roleDefinitions\"", {\r\n        /**\r\n         * Gets the collection of RoleDefinition resources\r\n         *\r\n         */\r\n        get: function () {\r\n            return new RoleDefinitions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""relatedItems\"", {\r\n        /**\r\n         * Provides an interface to manage related items\r\n         *\r\n         */\r\n        get: function () {\r\n            return RelatedItemManagerImpl.FromUrl(this.toUrl());\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Creates a new batch for requests within the context of this web\r\n     *\r\n     */\r\n    Web.prototype.createBatch = function () {\r\n        return new SPBatch(this.parentUrl);\r\n    };\r\n    Object.defineProperty(Web.prototype, \""rootFolder\"", {\r\n        /**\r\n         * Gets the root folder of this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folder(this, \""rootFolder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""associatedOwnerGroup\"", {\r\n        /**\r\n         * Gets the associated owner group for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroup(this, \""associatedownergroup\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""associatedMemberGroup\"", {\r\n        /**\r\n         * Gets the associated member group for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroup(this, \""associatedmembergroup\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""associatedVisitorGroup\"", {\r\n        /**\r\n         * Gets the associated visitor group for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroup(this, \""associatedvisitorgroup\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""defaultDocumentLibrary\"", {\r\n        /**\r\n         * Gets the default document library for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new List(this, \""DefaultDocumentLibrary\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a folder by server relative url\r\n     *\r\n     * @param folderRelativeUrl The server relative path to the folder (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getFolderByServerRelativeUrl = function (folderRelativeUrl) {\r\n        return new Folder(this, \""getFolderByServerRelativeUrl('\"" + folderRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a folder by server relative relative path if your folder name contains # and % characters\r\n     * you need to first encode the file name using encodeURIComponent() and then pass the url\r\n     * let url = \""/sites/test/Shared Documents/\"" + encodeURIComponent(\""%123\"");\r\n     * This works only in SharePoint online.\r\n     *\r\n     * @param folderRelativeUrl The server relative path to the folder (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getFolderByServerRelativePath = function (folderRelativeUrl) {\r\n        return new Folder(this, \""getFolderByServerRelativePath(decodedUrl='\"" + folderRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a file by server relative url\r\n     *\r\n     * @param fileRelativeUrl The server relative path to the file (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getFileByServerRelativeUrl = function (fileRelativeUrl) {\r\n        return new File(this, \""getFileByServerRelativeUrl('\"" + fileRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a file by server relative url if your file name contains # and % characters\r\n     * you need to first encode the file name using encodeURIComponent() and then pass the url\r\n     * let url = \""/sites/test/Shared Documents/\"" + encodeURIComponent(\""%123.docx\"");\r\n     *\r\n     * @param fileRelativeUrl The server relative path to the file (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getFileByServerRelativePath = function (fileRelativeUrl) {\r\n        return new File(this, \""getFileByServerRelativePath(decodedUrl='\"" + fileRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a list by server relative url (list's root folder)\r\n     *\r\n     * @param listRelativeUrl The server relative path to the list's root folder (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getList = function (listRelativeUrl) {\r\n        return new List(this, \""getList('\"" + listRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Updates this web instance with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the web\r\n     */\r\n    Web.prototype.update = function (properties) {\r\n        var _this = this;\r\n        var postBody = jsS(extend({\r\n            \""__metadata\"": { \""type\"": \""SP.Web\"" },\r\n        }, properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                web: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this web\r\n     *\r\n     */\r\n    Web.prototype.delete = function () {\r\n        return _super.prototype.deleteCore.call(this);\r\n    };\r\n    /**\r\n     * Applies the theme specified by the contents of each of the files specified in the arguments to the site\r\n     *\r\n     * @param colorPaletteUrl The server-relative URL of the color palette file\r\n     * @param fontSchemeUrl The server-relative URL of the font scheme\r\n     * @param backgroundImageUrl The server-relative URL of the background image\r\n     * @param shareGenerated When true, the generated theme files are stored in the root site. When false, they are stored in this web\r\n     */\r\n    Web.prototype.applyTheme = function (colorPaletteUrl, fontSchemeUrl, backgroundImageUrl, shareGenerated) {\r\n        var postBody = jsS({\r\n            backgroundImageUrl: backgroundImageUrl,\r\n            colorPaletteUrl: colorPaletteUrl,\r\n            fontSchemeUrl: fontSchemeUrl,\r\n            shareGenerated: shareGenerated,\r\n        });\r\n        return this.clone(Web_1, \""applytheme\"").postCore({ body: postBody });\r\n    };\r\n    /**\r\n     * Applies the specified site definition or site template to the Web site that has no template applied to it\r\n     *\r\n     * @param template Name of the site definition or the name of the site template\r\n     */\r\n    Web.prototype.applyWebTemplate = function (template) {\r\n        var q = this.clone(Web_1, \""applywebtemplate\"");\r\n        q.concat(\""(@t)\"");\r\n        q.query.set(\""@t\"", template);\r\n        return q.postCore();\r\n    };\r\n    /**\r\n     * Checks whether the specified login name belongs to a valid user in the web. If the user doesn't exist, adds the user to the web.\r\n     *\r\n     * @param loginName The login name of the user (ex: i:0#.f|membership|user@domain.onmicrosoft.com)\r\n     */\r\n    Web.prototype.ensureUser = function (loginName) {\r\n        var postBody = jsS({\r\n            logonName: loginName,\r\n        });\r\n        return this.clone(Web_1, \""ensureuser\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                user: new SiteUser(odataUrlFrom(data)),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Returns a collection of site templates available for the site\r\n     *\r\n     * @param language The locale id of the site templates to retrieve (default = 1033 [English, US])\r\n     * @param includeCrossLanguage When true, includes language-neutral site templates; otherwise false (default = true)\r\n     */\r\n    Web.prototype.availableWebTemplates = function (language, includeCrossLanugage) {\r\n        if (language === void 0) { language = 1033; }\r\n        if (includeCrossLanugage === void 0) { includeCrossLanugage = true; }\r\n        return new SharePointQueryableCollection(this, \""getavailablewebtemplates(lcid=\"" + language + \"", doincludecrosslanguage=\"" + includeCrossLanugage + \"")\"");\r\n    };\r\n    /**\r\n     * Returns the list gallery on the site\r\n     *\r\n     * @param type The gallery type - WebTemplateCatalog = 111, WebPartCatalog = 113 ListTemplateCatalog = 114,\r\n     * MasterPageCatalog = 116, SolutionCatalog = 121, ThemeCatalog = 123, DesignCatalog = 124, AppDataCatalog = 125\r\n     */\r\n    Web.prototype.getCatalog = function (type) {\r\n        return this.clone(Web_1, \""getcatalog(\"" + type + \"")\"").select(\""Id\"").get().then(function (data) {\r\n            return new List(odataUrlFrom(data));\r\n        });\r\n    };\r\n    /**\r\n     * Returns the collection of changes from the change log that have occurred within the list, based on the specified query\r\n     *\r\n     * @param query The change query\r\n     */\r\n    Web.prototype.getChanges = function (query) {\r\n        var postBody = jsS({ \""query\"": extend({ \""__metadata\"": { \""type\"": \""SP.ChangeQuery\"" } }, query) });\r\n        return this.clone(Web_1, \""getchanges\"").postCore({ body: postBody });\r\n    };\r\n    Object.defineProperty(Web.prototype, \""customListTemplate\"", {\r\n        /**\r\n         * Gets the custom list templates for the site\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""getcustomlisttemplates\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Returns the user corresponding to the specified member identifier for the current site\r\n     *\r\n     * @param id The id of the user\r\n     */\r\n    Web.prototype.getUserById = function (id) {\r\n        return new SiteUser(this, \""getUserById(\"" + id + \"")\"");\r\n    };\r\n    /**\r\n     * Returns the name of the image file for the icon that is used to represent the specified file\r\n     *\r\n     * @param filename The file name. If this parameter is empty, the server returns an empty string\r\n     * @param size The size of the icon: 16x16 pixels = 0, 32x32 pixels = 1 (default = 0)\r\n     * @param progId The ProgID of the application that was used to create the file, in the form OLEServerName.ObjectName\r\n     */\r\n    Web.prototype.mapToIcon = function (filename, size, progId) {\r\n        if (size === void 0) { size = 0; }\r\n        if (progId === void 0) { progId = \""\""; }\r\n        return this.clone(Web_1, \""maptoicon(filename='\"" + filename + \""', progid='\"" + progId + \""', size=\"" + size + \"")\"").get();\r\n    };\r\n    /**\r\n     * Returns the tenant property corresponding to the specified key in the app catalog site\r\n     *\r\n     * @param key Id of storage entity to be set\r\n     */\r\n    Web.prototype.getStorageEntity = function (key) {\r\n        return this.clone(Web_1, \""getStorageEntity('\"" + key + \""')\"").get();\r\n    };\r\n    /**\r\n     * This will set the storage entity identified by the given key (MUST be called in the context of the app catalog)\r\n     *\r\n     * @param key Id of storage entity to be set\r\n     * @param value Value of storage entity to be set\r\n     * @param description Description of storage entity to be set\r\n     * @param comments Comments of storage entity to be set\r\n     */\r\n    Web.prototype.setStorageEntity = function (key, value, description, comments) {\r\n        if (description === void 0) { description = \""\""; }\r\n        if (comments === void 0) { comments = \""\""; }\r\n        return this.clone(Web_1, \""setStorageEntity\"").postCore({\r\n            body: jsS({\r\n                comments: comments,\r\n                description: description,\r\n                key: key,\r\n                value: value,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * This will remove the storage entity identified by the given key\r\n     *\r\n     * @param key Id of storage entity to be removed\r\n     */\r\n    Web.prototype.removeStorageEntity = function (key) {\r\n        return this.clone(Web_1, \""removeStorageEntity('\"" + key + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Gets the app catalog for this web\r\n     *\r\n     * @param url Optional url or web containing the app catalog (default: current web)\r\n     */\r\n    Web.prototype.getAppCatalog = function (url) {\r\n        return new AppCatalog(url || this);\r\n    };\r\n    /**\r\n     * Gets the collection of available client side web parts for this web instance\r\n     */\r\n    Web.prototype.getClientSideWebParts = function () {\r\n        return this.clone(SharePointQueryableCollection, \""GetClientSideWebParts\"").get();\r\n    };\r\n    /**\r\n     * Creates a new client side page\r\n     *\r\n     * @param pageName Name of the new page\r\n     * @param title Display title of the new page\r\n     * @param libraryTitle Title of the library in which to create the new page. Default: \""Site Pages\""\r\n     */\r\n    Web.prototype.addClientSidePage = function (pageName, title, libraryTitle) {\r\n        if (title === void 0) { title = pageName.replace(/\\.[^/.]+$/, \""\""); }\r\n        if (libraryTitle === void 0) { libraryTitle = \""Site Pages\""; }\r\n        return ClientSidePage.create(this.lists.getByTitle(libraryTitle), pageName, title);\r\n    };\r\n    /**\r\n     * Creates a new client side page using the library path\r\n     *\r\n     * @param pageName Name of the new page\r\n     * @param listRelativePath The server relative path to the list's root folder (including /sites/ if applicable)\r\n     * @param title Display title of the new page\r\n     */\r\n    Web.prototype.addClientSidePageByPath = function (pageName, listRelativePath, title) {\r\n        if (title === void 0) { title = pageName.replace(/\\.[^/.]+$/, \""\""); }\r\n        return ClientSidePage.create(this.getList(listRelativePath), pageName, title);\r\n    };\r\n    /**\r\n     * Creates the default associated groups (Members, Owners, Visitors) and gives them the default permissions on the site.\r\n     * The target site must have unique permissions and no associated members / owners / visitors groups\r\n     *\r\n     * @param siteOwner The user login name to be added to the site Owners group. Default is the current user\r\n     * @param siteOwner2 The second user login name to be added to the site Owners group. Default is empty\r\n     * @param groupNameSeed The base group name. E.g. 'TestSite' would produce 'TestSite Members' etc.\r\n     */\r\n    Web.prototype.createDefaultAssociatedGroups = function (siteOwner, siteOwner2, groupNameSeed) {\r\n        var q = this.clone(Web_1, \""createDefaultAssociatedGroups(userLogin=@u,userLogin2=@v,groupNameSeed=@s)\"");\r\n        q.query.set(\""@u\"", \""'\"" + encodeURIComponent(siteOwner || \""\"") + \""'\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(siteOwner2 || \""\"") + \""'\"");\r\n        q.query.set(\""@s\"", \""'\"" + encodeURIComponent(groupNameSeed || \""\"") + \""'\"");\r\n        return q.postCore();\r\n    };\r\n    /**\r\n     * Gets hub site data for the current web.\r\n     *\r\n     * @param forceRefresh Default value is false. When false, the data is returned from the server's cache.\r\n     * When true, the cache is refreshed with the latest updates and then returned.\r\n     * Use this if you just made changes and need to see those changes right away.\r\n     */\r\n    Web.prototype.hubSiteData = function (forceRefresh) {\r\n        if (forceRefresh === void 0) { forceRefresh = false; }\r\n        return this.clone(Web_1, \""hubSiteData(\"" + forceRefresh + \"")\"").get();\r\n    };\r\n    /**\r\n     * Applies theme updates from the parent hub site collection.\r\n     */\r\n    Web.prototype.syncHubSiteTheme = function () {\r\n        return this.clone(Web_1, \""syncHubSiteTheme\"").postCore();\r\n    };\r\n    var Web_1;\r\n    Web = Web_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/web\"")\r\n    ], Web);\r\n    return Web;\r\n}(SharePointQueryableShareableWeb));\r\nexport { Web };\r\n//# sourceMappingURL=webs.js.map"",""/*! adal-angular v1.0.17 2018-02-27 */\r\nvar AuthenticationContext=function(){\""use strict\"";return AuthenticationContext=function(a){if(this.REQUEST_TYPE={LOGIN:\""LOGIN\"",RENEW_TOKEN:\""RENEW_TOKEN\"",UNKNOWN:\""UNKNOWN\""},this.RESPONSE_TYPE={ID_TOKEN_TOKEN:\""id_token token\"",TOKEN:\""token\""},this.CONSTANTS={ACCESS_TOKEN:\""access_token\"",EXPIRES_IN:\""expires_in\"",ID_TOKEN:\""id_token\"",ERROR_DESCRIPTION:\""error_description\"",SESSION_STATE:\""session_state\"",ERROR:\""error\"",STORAGE:{TOKEN_KEYS:\""adal.token.keys\"",ACCESS_TOKEN_KEY:\""adal.access.token.key\"",EXPIRATION_KEY:\""adal.expiration.key\"",STATE_LOGIN:\""adal.state.login\"",STATE_RENEW:\""adal.state.renew\"",NONCE_IDTOKEN:\""adal.nonce.idtoken\"",SESSION_STATE:\""adal.session.state\"",USERNAME:\""adal.username\"",IDTOKEN:\""adal.idtoken\"",ERROR:\""adal.error\"",ERROR_DESCRIPTION:\""adal.error.description\"",LOGIN_REQUEST:\""adal.login.request\"",LOGIN_ERROR:\""adal.login.error\"",RENEW_STATUS:\""adal.token.renew.status\"",ANGULAR_LOGIN_REQUEST:\""adal.angular.login.request\""},RESOURCE_DELIMETER:\""|\"",CACHE_DELIMETER:\""||\"",LOADFRAME_TIMEOUT:6e3,TOKEN_RENEW_STATUS_CANCELED:\""Canceled\"",TOKEN_RENEW_STATUS_COMPLETED:\""Completed\"",TOKEN_RENEW_STATUS_IN_PROGRESS:\""In Progress\"",LOGGING_LEVEL:{ERROR:0,WARN:1,INFO:2,VERBOSE:3},LEVEL_STRING_MAP:{0:\""ERROR:\"",1:\""WARNING:\"",2:\""INFO:\"",3:\""VERBOSE:\""},POPUP_WIDTH:483,POPUP_HEIGHT:600},AuthenticationContext.prototype._singletonInstance)return AuthenticationContext.prototype._singletonInstance;if(AuthenticationContext.prototype._singletonInstance=this,this.instance=\""https://login.microsoftonline.com/\"",this.config={},this.callback=null,this.popUp=!1,this.isAngular=!1,this._user=null,this._activeRenewals={},this._loginInProgress=!1,this._acquireTokenInProgress=!1,this._renewStates=[],this._callBackMappedToRenewStates={},this._callBacksMappedToRenewStates={},this._openedWindows=[],this._requestType=this.REQUEST_TYPE.LOGIN,window._adalInstance=this,a.displayCall&&\""function\""!=typeof a.displayCall)throw new Error(\""displayCall is not a function\"");if(!a.clientId)throw new Error(\""clientId is required\"");this.config=this._cloneConfig(a),void 0===this.config.navigateToLoginRequestUrl&&(this.config.navigateToLoginRequestUrl=!0),this.config.popUp&&(this.popUp=!0),this.config.callback&&\""function\""==typeof this.config.callback&&(this.callback=this.config.callback),this.config.instance&&(this.instance=this.config.instance),this.config.loginResource||(this.config.loginResource=this.config.clientId),this.config.redirectUri||(this.config.redirectUri=window.location.href.split(\""?\"")[0].split(\""#\"")[0]),this.config.postLogoutRedirectUri||(this.config.postLogoutRedirectUri=window.location.href.split(\""?\"")[0].split(\""#\"")[0]),this.config.anonymousEndpoints||(this.config.anonymousEndpoints=[]),this.config.isAngular&&(this.isAngular=this.config.isAngular),this.config.loadFrameTimeout&&(this.CONSTANTS.LOADFRAME_TIMEOUT=this.config.loadFrameTimeout)},\""undefined\""!=typeof window&&(window.Logging={piiLoggingEnabled:!1,level:0,log:function(a){}}),AuthenticationContext.prototype.login=function(){if(this._loginInProgress)return void this.info(\""Login in progress\"");this._loginInProgress=!0;var a=this._guid();this.config.state=a,this._idTokenNonce=this._guid();var b=this._getItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST);b&&\""\""!==b?this._saveItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,\""\""):b=window.location.href,this.verbose(\""Expected state: \""+a+\"" startPage:\""+b),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,b),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,a,!0),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\"");var c=this._getNavigateUrl(\""id_token\"",null)+\""&nonce=\""+encodeURIComponent(this._idTokenNonce);this.config.displayCall?this.config.displayCall(c):this.popUp?(this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,\""\""),this._renewStates.push(a),this.registerCallback(a,this.config.clientId,this.callback),this._loginPopup(c)):this.promptUser(c)},AuthenticationContext.prototype._openPopup=function(a,b,c,d){try{var e=window.screenLeft?window.screenLeft:window.screenX,f=window.screenTop?window.screenTop:window.screenY,g=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,h=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,i=g/2-c/2+e,j=h/2-d/2+f,k=window.open(a,b,\""width=\""+c+\"", height=\""+d+\"", top=\""+j+\"", left=\""+i);return k.focus&&k.focus(),k}catch(a){return this.warn(\""Error opening popup, \""+a.message),this._loginInProgress=!1,this._acquireTokenInProgress=!1,null}},AuthenticationContext.prototype._handlePopupError=function(a,b,c,d,e){this.warn(d),this._saveItem(this.CONSTANTS.STORAGE.ERROR,c),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,d),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,e),b&&this._activeRenewals[b]&&(this._activeRenewals[b]=null),this._loginInProgress=!1,this._acquireTokenInProgress=!1,a&&a(d,null,c)},AuthenticationContext.prototype._loginPopup=function(a,b,c){var d=this._openPopup(a,\""login\"",this.CONSTANTS.POPUP_WIDTH,this.CONSTANTS.POPUP_HEIGHT),e=c||this.callback;if(null==d){var f=\""Popup Window is null. This can happen if you are using IE\"";return void this._handlePopupError(e,b,\""Error opening popup\"",f,f)}if(this._openedWindows.push(d),-1!=this.config.redirectUri.indexOf(\""#\""))var g=this.config.redirectUri.split(\""#\"")[0];else var g=this.config.redirectUri;var h=this,i=window.setInterval(function(){if(!d||d.closed||void 0===d.closed){var a=\""Popup Window closed\"",c=\""Popup Window closed by UI action/ Popup Window handle destroyed due to cross zone navigation in IE/Edge\"";return h.isAngular&&h._broadcast(\""adal:popUpClosed\"",c+h.CONSTANTS.RESOURCE_DELIMETER+a),h._handlePopupError(e,b,a,c,c),void window.clearInterval(i)}try{var f=d.location;if(-1!=encodeURI(f.href).indexOf(encodeURI(g)))return h.isAngular?h._broadcast(\""adal:popUpHashChanged\"",f.hash):h.handleWindowCallback(f.hash),window.clearInterval(i),h._loginInProgress=!1,h._acquireTokenInProgress=!1,h.info(\""Closing popup window\""),h._openedWindows=[],void d.close()}catch(a){}},1)},AuthenticationContext.prototype._broadcast=function(a,b){!function(){function a(a,b){b=b||{bubbles:!1,cancelable:!1,detail:void 0};var c=document.createEvent(\""CustomEvent\"");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}if(\""function\""==typeof window.CustomEvent)return!1;a.prototype=window.Event.prototype,window.CustomEvent=a}();var c=new CustomEvent(a,{detail:b});window.dispatchEvent(c)},AuthenticationContext.prototype.loginInProgress=function(){return this._loginInProgress},AuthenticationContext.prototype._hasResource=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);return b&&!this._isEmpty(b)&&b.indexOf(a+this.CONSTANTS.RESOURCE_DELIMETER)>-1},AuthenticationContext.prototype.getCachedToken=function(a){if(!this._hasResource(a))return null;var b=this._getItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a),c=this._getItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a),d=this.config.expireOffsetSeconds||300;return c&&c>this._now()+d?b:(this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a,\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a,0),null)},AuthenticationContext.prototype.getCachedUser=function(){if(this._user)return this._user;var a=this._getItem(this.CONSTANTS.STORAGE.IDTOKEN);return this._user=this._createUser(a),this._user},AuthenticationContext.prototype.registerCallback=function(a,b,c){this._activeRenewals[b]=a,this._callBacksMappedToRenewStates[a]||(this._callBacksMappedToRenewStates[a]=[]);var d=this;this._callBacksMappedToRenewStates[a].push(c),this._callBackMappedToRenewStates[a]||(this._callBackMappedToRenewStates[a]=function(c,e,f,g){d._activeRenewals[b]=null;for(var h=0;h<d._callBacksMappedToRenewStates[a].length;++h)try{d._callBacksMappedToRenewStates[a][h](c,e,f,g)}catch(f){d.warn(f)}d._callBacksMappedToRenewStates[a]=null,d._callBackMappedToRenewStates[a]=null})},AuthenticationContext.prototype._renewToken=function(a,b,c){this.info(\""renewToken is called for resource:\""+a);var d=this._addAdalFrame(\""adalRenewFrame\""+a),e=this._guid()+\""|\""+a;this.config.state=e,this._renewStates.push(e),this.verbose(\""Renew token Expected state: \""+e),c=c||\""token\"";var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(c,a),\""prompt\"");c===this.RESPONSE_TYPE.ID_TOKEN_TOKEN&&(this._idTokenNonce=this._guid(),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),f+=\""&nonce=\""+encodeURIComponent(this._idTokenNonce)),f+=\""&prompt=none\"",f=this._addHintParameters(f),this.registerCallback(e,a,b),this.verbosePii(\""Navigate to:\""+f),d.src=\""about:blank\"",this._loadFrameTimeout(f,\""adalRenewFrame\""+a,a)},AuthenticationContext.prototype._renewIdToken=function(a,b){this.info(\""renewIdToken is called\"");var c=this._addAdalFrame(\""adalIdTokenFrame\""),d=this._guid()+\""|\""+this.config.clientId;this._idTokenNonce=this._guid(),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),this.config.state=d,this._renewStates.push(d),this.verbose(\""Renew Idtoken Expected state: \""+d);var e=null===b||void 0===b?null:this.config.clientId,b=b||\""id_token\"",f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(b,e),\""prompt\"");f+=\""&prompt=none\"",f=this._addHintParameters(f),f+=\""&nonce=\""+encodeURIComponent(this._idTokenNonce),this.registerCallback(d,this.config.clientId,a),this.verbosePii(\""Navigate to:\""+f),c.src=\""about:blank\"",this._loadFrameTimeout(f,\""adalIdTokenFrame\"",this.config.clientId)},AuthenticationContext.prototype._urlContainsQueryStringParameter=function(a,b){return new RegExp(\""[\\\\?&]\""+a+\""=\"").test(b)},AuthenticationContext.prototype._urlRemoveQueryStringParameter=function(a,b){var c=new RegExp(\""(\\\\&\""+b+\""=)[^&]+\"");return a=a.replace(c,\""\""),c=new RegExp(\""(\""+b+\""=)[^&]+&\""),a=a.replace(c,\""\""),c=new RegExp(\""(\""+b+\""=)[^&]+\""),a=a.replace(c,\""\"")},AuthenticationContext.prototype._loadFrameTimeout=function(a,b,c){this.verbose(\""Set loading state to pending for: \""+c),this._saveItem(this.CONSTANTS.STORAGE.RENEW_STATUS+c,this.CONSTANTS.TOKEN_RENEW_STATUS_IN_PROGRESS),this._loadFrame(a,b);var d=this;setTimeout(function(){if(d._getItem(d.CONSTANTS.STORAGE.RENEW_STATUS+c)===d.CONSTANTS.TOKEN_RENEW_STATUS_IN_PROGRESS){d.verbose(\""Loading frame has timed out after: \""+d.CONSTANTS.LOADFRAME_TIMEOUT/1e3+\"" seconds for resource \""+c);var a=d._activeRenewals[c];a&&d._callBackMappedToRenewStates[a]&&d._callBackMappedToRenewStates[a](\""Token renewal operation failed due to timeout\"",null,\""Token Renewal Failed\""),d._saveItem(d.CONSTANTS.STORAGE.RENEW_STATUS+c,d.CONSTANTS.TOKEN_RENEW_STATUS_CANCELED)}},d.CONSTANTS.LOADFRAME_TIMEOUT)},AuthenticationContext.prototype._loadFrame=function(a,b){var c=this;c.info(\""LoadFrame: \""+b);var d=b;setTimeout(function(){var b=c._addAdalFrame(d);\""\""!==b.src&&\""about:blank\""!==b.src||(b.src=a,c._loadFrame(a,d))},500)},AuthenticationContext.prototype.acquireToken=function(a,b){if(this._isEmpty(a))return this.warn(\""resource is required\""),void b(\""resource is required\"",null,\""resource is required\"");var c=this.getCachedToken(a);return c?(this.info(\""Token is already in cache for resource:\""+a),void b(null,c,null)):this._user||this.config.extraQueryParameter&&-1!==this.config.extraQueryParameter.indexOf(\""login_hint\"")?void(this._activeRenewals[a]?this.registerCallback(this._activeRenewals[a],a,b):(this._requestType=this.REQUEST_TYPE.RENEW_TOKEN,a===this.config.clientId?this._user?(this.verbose(\""renewing idtoken\""),this._renewIdToken(b)):(this.verbose(\""renewing idtoken and access_token\""),this._renewIdToken(b,this.RESPONSE_TYPE.ID_TOKEN_TOKEN)):this._user?(this.verbose(\""renewing access_token\""),this._renewToken(a,b)):(this.verbose(\""renewing idtoken and access_token\""),this._renewToken(a,b,this.RESPONSE_TYPE.ID_TOKEN_TOKEN)))):(this.warn(\""User login is required\""),void b(\""User login is required\"",null,\""login required\""))},AuthenticationContext.prototype.acquireTokenPopup=function(a,b,c,d){if(this._isEmpty(a))return this.warn(\""resource is required\""),void d(\""resource is required\"",null,\""resource is required\"");if(!this._user)return this.warn(\""User login is required\""),void d(\""User login is required\"",null,\""login required\"");if(this._acquireTokenInProgress)return this.warn(\""Acquire token interactive is already in progress\""),void d(\""Acquire token interactive is already in progress\"",null,\""Acquire token interactive is already in progress\"");var e=this._guid()+\""|\""+a;this.config.state=e,this._renewStates.push(e),this._requestType=this.REQUEST_TYPE.RENEW_TOKEN,this.verbose(\""Renew token Expected state: \""+e);var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(\""token\"",a),\""prompt\"");if(f+=\""&prompt=select_account\"",b&&(f+=b),c&&-1===f.indexOf(\""&claims\""))f+=\""&claims=\""+encodeURIComponent(c);else if(c&&-1!==f.indexOf(\""&claims\""))throw new Error(\""Claims cannot be passed as an extraQueryParameter\"");f=this._addHintParameters(f),this._acquireTokenInProgress=!0,this.info(\""acquireToken interactive is called for the resource \""+a),this.registerCallback(e,a,d),this._loginPopup(f,a,d)},AuthenticationContext.prototype.acquireTokenRedirect=function(a,b,c){if(this._isEmpty(a))return this.warn(\""resource is required\""),void d(\""resource is required\"",null,\""resource is required\"");var d=this.callback;if(!this._user)return this.warn(\""User login is required\""),void d(\""User login is required\"",null,\""login required\"");if(this._acquireTokenInProgress)return this.warn(\""Acquire token interactive is already in progress\""),void d(\""Acquire token interactive is already in progress\"",null,\""Acquire token interactive is already in progress\"");var e=this._guid()+\""|\""+a;this.config.state=e,this.verbose(\""Renew token Expected state: \""+e);var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(\""token\"",a),\""prompt\"");if(f+=\""&prompt=select_account\"",b&&(f+=b),c&&-1===f.indexOf(\""&claims\""))f+=\""&claims=\""+encodeURIComponent(c);else if(c&&-1!==f.indexOf(\""&claims\""))throw new Error(\""Claims cannot be passed as an extraQueryParameter\"");f=this._addHintParameters(f),this._acquireTokenInProgress=!0,this.info(\""acquireToken interactive is called for the resource \""+a),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,window.location.href),this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,e,!0),this.promptUser(f)},AuthenticationContext.prototype.promptUser=function(a){a?(this.infoPii(\""Navigate to:\""+a),window.location.replace(a)):this.info(\""Navigate url is empty\"")},AuthenticationContext.prototype.clearCache=function(){this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,\""\""),this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,\""\""),this._renewStates=[],this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\""),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\"");var a=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);if(!this._isEmpty(a)){a=a.split(this.CONSTANTS.RESOURCE_DELIMETER);for(var b=0;b<a.length&&\""\""!==a[b];b++)this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a[b],\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a[b],0)}this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,\""\"")},AuthenticationContext.prototype.clearCacheForResource=function(a){this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\""),this._hasResource(a)&&(this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a,\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a,0))},AuthenticationContext.prototype.logOut=function(){this.clearCache(),this._user=null;var a;if(this.config.logOutUri)a=this.config.logOutUri;else{var b=\""common\"",c=\""\"";this.config.tenant&&(b=this.config.tenant),this.config.postLogoutRedirectUri&&(c=\""post_logout_redirect_uri=\""+encodeURIComponent(this.config.postLogoutRedirectUri)),a=this.instance+b+\""/oauth2/logout?\""+c}this.infoPii(\""Logout navigate to: \""+a),this.promptUser(a)},AuthenticationContext.prototype._isEmpty=function(a){return void 0===a||!a||0===a.length},AuthenticationContext.prototype.getUser=function(a){if(\""function\""!=typeof a)throw new Error(\""callback is not a function\"");if(this._user)return void a(null,this._user);var b=this._getItem(this.CONSTANTS.STORAGE.IDTOKEN);this._isEmpty(b)?(this.warn(\""User information is not available\""),a(\""User information is not available\"",null)):(this.info(\""User exists in cache: \""),this._user=this._createUser(b),a(null,this._user))},AuthenticationContext.prototype._addHintParameters=function(a){if(this._user&&this._user.profile)if(this._user.profile.sid&&-1!==a.indexOf(\""&prompt=none\""))this._urlContainsQueryStringParameter(\""sid\"",a)||(a+=\""&sid=\""+encodeURIComponent(this._user.profile.sid));else if(this._user.profile.upn&&(this._urlContainsQueryStringParameter(\""login_hint\"",a)||(a+=\""&login_hint=\""+encodeURIComponent(this._user.profile.upn)),!this._urlContainsQueryStringParameter(\""domain_hint\"",a)&&this._user.profile.upn.indexOf(\""@\"")>-1)){var b=this._user.profile.upn.split(\""@\"");a+=\""&domain_hint=\""+encodeURIComponent(b[b.length-1])}return a},AuthenticationContext.prototype._createUser=function(a){var b=null,c=this._extractIdToken(a);return c&&c.hasOwnProperty(\""aud\"")&&(c.aud.toLowerCase()===this.config.clientId.toLowerCase()?(b={userName:\""\"",profile:c},c.hasOwnProperty(\""upn\"")?b.userName=c.upn:c.hasOwnProperty(\""email\"")&&(b.userName=c.email)):this.warn(\""IdToken has invalid aud field\"")),b},AuthenticationContext.prototype._getHash=function(a){return a.indexOf(\""#/\"")>-1?a=a.substring(a.indexOf(\""#/\"")+2):a.indexOf(\""#\"")>-1&&(a=a.substring(1)),a},AuthenticationContext.prototype.isCallback=function(a){a=this._getHash(a);var b=this._deserialize(a);return b.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION)||b.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)||b.hasOwnProperty(this.CONSTANTS.ID_TOKEN)},AuthenticationContext.prototype.getLoginError=function(){return this._getItem(this.CONSTANTS.STORAGE.LOGIN_ERROR)},AuthenticationContext.prototype.getRequestInfo=function(a){a=this._getHash(a);var b=this._deserialize(a),c={valid:!1,parameters:{},stateMatch:!1,stateResponse:\""\"",requestType:this.REQUEST_TYPE.UNKNOWN};if(b&&(c.parameters=b,b.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION)||b.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)||b.hasOwnProperty(this.CONSTANTS.ID_TOKEN))){c.valid=!0;var d=\""\"";if(!b.hasOwnProperty(\""state\""))return this.warn(\""No state returned\""),c;if(this.verbose(\""State: \""+b.state),d=b.state,c.stateResponse=d,this._matchState(c))return c;if(!c.stateMatch&&window.parent){c.requestType=this._requestType;for(var e=this._renewStates,f=0;f<e.length;f++)if(e[f]===c.stateResponse){c.stateMatch=!0;break}}}return c},AuthenticationContext.prototype._matchNonce=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN);if(b){b=b.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<b.length;c++)if(b[c]===a.profile.nonce)return!0}return!1},AuthenticationContext.prototype._matchState=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.STATE_LOGIN);if(b){b=b.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<b.length;c++)if(b[c]===a.stateResponse)return a.requestType=this.REQUEST_TYPE.LOGIN,a.stateMatch=!0,!0}var d=this._getItem(this.CONSTANTS.STORAGE.STATE_RENEW);if(d){d=d.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<d.length;c++)if(d[c]===a.stateResponse)return a.requestType=this.REQUEST_TYPE.RENEW_TOKEN,a.stateMatch=!0,!0}return!1},AuthenticationContext.prototype._getResourceFromState=function(a){if(a){var b=a.indexOf(\""|\"");if(b>-1&&b+1<a.length)return a.substring(b+1)}return\""\""},AuthenticationContext.prototype.saveTokenFromHash=function(a){this.info(\""State status:\""+a.stateMatch+\""; Request type:\""+a.requestType),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\"");var b=this._getResourceFromState(a.stateResponse);if(a.parameters.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION))this.infoPii(\""Error :\""+a.parameters.error+\""; Error description:\""+a.parameters[this.CONSTANTS.ERROR_DESCRIPTION]),this._saveItem(this.CONSTANTS.STORAGE.ERROR,a.parameters.error),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,a.parameters[this.CONSTANTS.ERROR_DESCRIPTION]),a.requestType===this.REQUEST_TYPE.LOGIN&&(this._loginInProgress=!1,this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,a.parameters.error_description));else if(a.stateMatch){this.info(\""State is right\""),a.parameters.hasOwnProperty(this.CONSTANTS.SESSION_STATE)&&this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE,a.parameters[this.CONSTANTS.SESSION_STATE]);var c;a.parameters.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)&&(this.info(\""Fragment has access token\""),this._hasResource(b)||(c=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS)||\""\"",this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,c+b+this.CONSTANTS.RESOURCE_DELIMETER)),this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+b,a.parameters[this.CONSTANTS.ACCESS_TOKEN]),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+b,this._expiresIn(a.parameters[this.CONSTANTS.EXPIRES_IN]))),a.parameters.hasOwnProperty(this.CONSTANTS.ID_TOKEN)&&(this.info(\""Fragment has id token\""),this._loginInProgress=!1,this._user=this._createUser(a.parameters[this.CONSTANTS.ID_TOKEN]),this._user&&this._user.profile?this._matchNonce(this._user)?(this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN,a.parameters[this.CONSTANTS.ID_TOKEN]),b=this.config.loginResource?this.config.loginResource:this.config.clientId,this._hasResource(b)||(c=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS)||\""\"",this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,c+b+this.CONSTANTS.RESOURCE_DELIMETER)),this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+b,a.parameters[this.CONSTANTS.ID_TOKEN]),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+b,this._user.profile.exp)):(this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""Nonce received: \""+this._user.profile.nonce+\"" is not same as requested: \""+this._getItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN)),this._user=null):(a.parameters.error=\""invalid id_token\"",a.parameters.error_description=\""Invalid id_token. id_token: \""+a.parameters[this.CONSTANTS.ID_TOKEN],this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""invalid id_token\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""Invalid id_token. id_token: \""+a.parameters[this.CONSTANTS.ID_TOKEN])))}else a.parameters.error=\""Invalid_state\"",a.parameters.error_description=\""Invalid_state. state: \""+a.stateResponse,this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""Invalid_state\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""Invalid_state. state: \""+a.stateResponse);this._saveItem(this.CONSTANTS.STORAGE.RENEW_STATUS+b,this.CONSTANTS.TOKEN_RENEW_STATUS_COMPLETED)},AuthenticationContext.prototype.getResourceForEndpoint=function(a){if(this.config&&this.config.anonymousEndpoints)for(var b=0;b<this.config.anonymousEndpoints.length;b++)if(a.indexOf(this.config.anonymousEndpoints[b])>-1)return null;if(this.config&&this.config.endpoints)for(var c in this.config.endpoints)if(a.indexOf(c)>-1)return this.config.endpoints[c];return a.indexOf(\""http://\"")>-1||a.indexOf(\""https://\"")>-1?this._getHostFromUri(a)===this._getHostFromUri(this.config.redirectUri)?this.config.loginResource:null:this.config.loginResource},AuthenticationContext.prototype._getHostFromUri=function(a){var b=String(a).replace(/^(https?:)\\/\\//,\""\"");return b=b.split(\""/\"")[0]},AuthenticationContext.prototype.handleWindowCallback=function(a){if(null==a&&(a=window.location.hash),this.isCallback(a)){var b=null,c=!1;this._openedWindows.length>0&&this._openedWindows[this._openedWindows.length-1].opener&&this._openedWindows[this._openedWindows.length-1].opener._adalInstance?(b=this._openedWindows[this._openedWindows.length-1].opener._adalInstance,c=!0):window.parent&&window.parent._adalInstance&&(b=window.parent._adalInstance);var d,e,f=b.getRequestInfo(a),g=null;e=c||window.parent!==window?b._callBackMappedToRenewStates[f.stateResponse]:b.callback,b.info(\""Returned from redirect url\""),b.saveTokenFromHash(f),f.requestType===this.REQUEST_TYPE.RENEW_TOKEN&&window.parent?(window.parent!==window?b.verbose(\""Window is in iframe, acquiring token silently\""):b.verbose(\""acquiring token interactive in progress\""),d=f.parameters[b.CONSTANTS.ACCESS_TOKEN]||f.parameters[b.CONSTANTS.ID_TOKEN],g=b.CONSTANTS.ACCESS_TOKEN):f.requestType===this.REQUEST_TYPE.LOGIN&&(d=f.parameters[b.CONSTANTS.ID_TOKEN],g=b.CONSTANTS.ID_TOKEN);var h=f.parameters[b.CONSTANTS.ERROR_DESCRIPTION],i=f.parameters[b.CONSTANTS.ERROR];try{e&&e(h,d,i,g)}catch(a){b.error(\""Error occurred in user defined callback function: \""+a)}window.parent!==window||c||(b.config.navigateToLoginRequestUrl?window.location.href=b._getItem(b.CONSTANTS.STORAGE.LOGIN_REQUEST):window.location.hash=\""\"")}},AuthenticationContext.prototype._getNavigateUrl=function(a,b){var c=\""common\"";this.config.tenant&&(c=this.config.tenant);var d=this.instance+c+\""/oauth2/authorize\""+this._serialize(a,this.config,b)+this._addLibMetadata();return this.info(\""Navigate url:\""+d),d},AuthenticationContext.prototype._extractIdToken=function(a){var b=this._decodeJwt(a);if(!b)return null;try{var c=b.JWSPayload,d=this._base64DecodeStringUrlSafe(c);return d?JSON.parse(d):(this.info(\""The returned id_token could not be base64 url safe decoded.\""),null)}catch(a){this.error(\""The returned id_token could not be decoded\"",a)}return null},AuthenticationContext.prototype._base64DecodeStringUrlSafe=function(a){return a=a.replace(/-/g,\""+\"").replace(/_/g,\""/\""),window.atob?decodeURIComponent(escape(window.atob(a))):decodeURIComponent(escape(this._decode(a)))},AuthenticationContext.prototype._decode=function(a){var b=\""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"";a=String(a).replace(/=+$/,\""\"");var c=a.length;if(c%4==1)throw new Error(\""The token to be decoded is not correctly encoded.\"");for(var d,e,f,g,h,i,j,k,l=\""\"",m=0;m<c;m+=4){if(d=b.indexOf(a.charAt(m)),e=b.indexOf(a.charAt(m+1)),f=b.indexOf(a.charAt(m+2)),g=b.indexOf(a.charAt(m+3)),m+2===c-1){h=d<<18|e<<12|f<<6,i=h>>16&255,j=h>>8&255,l+=String.fromCharCode(i,j);break}if(m+1===c-1){h=d<<18|e<<12,i=h>>16&255,l+=String.fromCharCode(i);break}h=d<<18|e<<12|f<<6|g,i=h>>16&255,j=h>>8&255,k=255&h,l+=String.fromCharCode(i,j,k)}return l},AuthenticationContext.prototype._decodeJwt=function(a){if(this._isEmpty(a))return null;var b=/^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/,c=b.exec(a);return!c||c.length<4?(this.warn(\""The returned id_token is not parseable.\""),null):{header:c[1],JWSPayload:c[2],JWSSig:c[3]}},AuthenticationContext.prototype._convertUrlSafeToRegularBase64EncodedString=function(a){return a.replace(\""-\"",\""+\"").replace(\""_\"",\""/\"")},AuthenticationContext.prototype._serialize=function(a,b,c){var d=[];if(null!==b){d.push(\""?response_type=\""+a),d.push(\""client_id=\""+encodeURIComponent(b.clientId)),c&&d.push(\""resource=\""+encodeURIComponent(c)),d.push(\""redirect_uri=\""+encodeURIComponent(b.redirectUri)),d.push(\""state=\""+encodeURIComponent(b.state)),b.hasOwnProperty(\""slice\"")&&d.push(\""slice=\""+encodeURIComponent(b.slice)),b.hasOwnProperty(\""extraQueryParameter\"")&&d.push(b.extraQueryParameter);var e=b.correlationId?b.correlationId:this._guid();d.push(\""client-request-id=\""+encodeURIComponent(e))}return d.join(\""&\"")},AuthenticationContext.prototype._deserialize=function(a){var b,c=/\\+/g,d=/([^&=]+)=([^&]*)/g,e=function(a){return decodeURIComponent(a.replace(c,\"" \""))},f={};for(b=d.exec(a);b;)f[e(b[1])]=e(b[2]),b=d.exec(a);return f},AuthenticationContext.prototype._decimalToHex=function(a){for(var b=a.toString(16);b.length<2;)b=\""0\""+b;return b},AuthenticationContext.prototype._guid=function(){var a=window.crypto||window.msCrypto;if(a&&a.getRandomValues){var b=new Uint8Array(16);return a.getRandomValues(b),b[6]|=64,b[6]&=79,b[8]|=128,b[8]&=191,this._decimalToHex(b[0])+this._decimalToHex(b[1])+this._decimalToHex(b[2])+this._decimalToHex(b[3])+\""-\""+this._decimalToHex(b[4])+this._decimalToHex(b[5])+\""-\""+this._decimalToHex(b[6])+this._decimalToHex(b[7])+\""-\""+this._decimalToHex(b[8])+this._decimalToHex(b[9])+\""-\""+this._decimalToHex(b[10])+this._decimalToHex(b[11])+this._decimalToHex(b[12])+this._decimalToHex(b[13])+this._decimalToHex(b[14])+this._decimalToHex(b[15])}for(var c=\""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"",d=\""0123456789abcdef\"",e=0,f=\""\"",g=0;g<36;g++)\""-\""!==c[g]&&\""4\""!==c[g]&&(e=16*Math.random()|0),\""x\""===c[g]?f+=d[e]:\""y\""===c[g]?(e&=3,e|=8,f+=d[e]):f+=c[g];return f},AuthenticationContext.prototype._expiresIn=function(a){return a||(a=3599),this._now()+parseInt(a,10)},AuthenticationContext.prototype._now=function(){return Math.round((new Date).getTime()/1e3)},AuthenticationContext.prototype._addAdalFrame=function(a){if(void 0!==a){this.info(\""Add adal frame to document:\""+a);var b=document.getElementById(a);if(!b){if(document.createElement&&document.documentElement&&(window.opera||-1===window.navigator.userAgent.indexOf(\""MSIE 5.0\""))){var c=document.createElement(\""iframe\"");c.setAttribute(\""id\"",a),c.setAttribute(\""aria-hidden\"",\""true\""),c.style.visibility=\""hidden\"",c.style.position=\""absolute\"",c.style.width=c.style.height=c.borderWidth=\""0px\"",b=document.getElementsByTagName(\""body\"")[0].appendChild(c)}else document.body&&document.body.insertAdjacentHTML&&document.body.insertAdjacentHTML(\""beforeEnd\"",'<iframe name=\""'+a+'\"" id=\""'+a+'\"" style=\""display:none\""></iframe>');window.frames&&window.frames[a]&&(b=window.frames[a])}return b}},AuthenticationContext.prototype._saveItem=function(a,b,c){if(this.config&&this.config.cacheLocation&&\""localStorage\""===this.config.cacheLocation){if(!this._supportsLocalStorage())return this.info(\""Local storage is not supported\""),!1;if(c){var d=this._getItem(a)||\""\"";localStorage.setItem(a,d+b+this.CONSTANTS.CACHE_DELIMETER)}else localStorage.setItem(a,b);return!0}return this._supportsSessionStorage()?(sessionStorage.setItem(a,b),!0):(this.info(\""Session storage is not supported\""),!1)},AuthenticationContext.prototype._getItem=function(a){return this.config&&this.config.cacheLocation&&\""localStorage\""===this.config.cacheLocation?this._supportsLocalStorage()?localStorage.getItem(a):(this.info(\""Local storage is not supported\""),null):this._supportsSessionStorage()?sessionStorage.getItem(a):(this.info(\""Session storage is not supported\""),null)},AuthenticationContext.prototype._supportsLocalStorage=function(){try{return!!window.localStorage&&(window.localStorage.setItem(\""storageTest\"",\""A\""),\""A\""==window.localStorage.getItem(\""storageTest\"")&&(window.localStorage.removeItem(\""storageTest\""),!window.localStorage.getItem(\""storageTest\"")))}catch(a){return!1}},AuthenticationContext.prototype._supportsSessionStorage=function(){try{return!!window.sessionStorage&&(window.sessionStorage.setItem(\""storageTest\"",\""A\""),\""A\""==window.sessionStorage.getItem(\""storageTest\"")&&(window.sessionStorage.removeItem(\""storageTest\""),!window.sessionStorage.getItem(\""storageTest\"")))}catch(a){return!1}},AuthenticationContext.prototype._cloneConfig=function(a){if(null===a||\""object\""!=typeof a)return a;var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b},AuthenticationContext.prototype._addLibMetadata=function(){return\""&x-client-SKU=Js&x-client-Ver=\""+this._libVersion()},AuthenticationContext.prototype.log=function(a,b,c,d){if(a<=Logging.level){if(!Logging.piiLoggingEnabled&&d)return;var e=(new Date).toUTCString(),f=\""\"";f=this.config.correlationId?e+\"":\""+this.config.correlationId+\""-\""+this._libVersion()+\""-\""+this.CONSTANTS.LEVEL_STRING_MAP[a]+\"" \""+b:e+\"":\""+this._libVersion()+\""-\""+this.CONSTANTS.LEVEL_STRING_MAP[a]+\"" \""+b,c&&(f+=\""\\nstack:\\n\""+c.stack),Logging.log(f)}},AuthenticationContext.prototype.error=function(a,b){this.log(this.CONSTANTS.LOGGING_LEVEL.ERROR,a,b)},AuthenticationContext.prototype.warn=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.WARN,a,null)},AuthenticationContext.prototype.info=function(a){\r\nthis.log(this.CONSTANTS.LOGGING_LEVEL.INFO,a,null)},AuthenticationContext.prototype.verbose=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.VERBOSE,a,null)},AuthenticationContext.prototype.errorPii=function(a,b){this.log(this.CONSTANTS.LOGGING_LEVEL.ERROR,a,b,!0)},AuthenticationContext.prototype.warnPii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.WARN,a,null,!0)},AuthenticationContext.prototype.infoPii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.INFO,a,null,!0)},AuthenticationContext.prototype.verbosePii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.VERBOSE,a,null,!0)},AuthenticationContext.prototype._libVersion=function(){return\""1.0.17\""},\""undefined\""!=typeof module&&module.exports&&(module.exports=AuthenticationContext,module.exports.inject=function(a){return new AuthenticationContext(a)}),AuthenticationContext}();"",""/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \""License\""); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \""function\"")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \""object\"" && typeof Reflect.decorate === \""function\"") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \""object\"" && typeof Reflect.metadata === \""function\"") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\""throw\""](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \""throw\"": verb(1), \""return\"": verb(2) }, typeof Symbol === \""function\"" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\""Generator is already executing.\"");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\""return\""] : op[0] ? y[\""throw\""] || ((t = y[\""return\""]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \""function\"" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \""function\"" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\""return\""])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\""Symbol.asyncIterator is not defined.\"");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\""next\""), verb(\""throw\""), verb(\""return\""), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\""next\"", value); }\r\n    function reject(value) { resume(\""throw\"", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\""next\""), verb(\""throw\"", function (e) { throw e; }), verb(\""return\""), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \""return\"" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\""Symbol.asyncIterator is not defined.\"");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \""function\"" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\""next\""), verb(\""throw\""), verb(\""return\""), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \""raw\"", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"",""var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\""return this\"")() || (1, eval)(\""this\"");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \""object\"") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n""],""sourceRoot"":""""}"
a39e63ed9b41f10c3db45650d2c44b24fdf47652,14489016,"      <p>Take the <b>img</b> here and move them in the <b>equipment.html</b>. The file paths will need to be changed, learn more about referencing files <a target=""_blank"" href=""http://stackoverflow.com/questions/14489016/how-to-properly-reference-local-resources-in-html"">here</a>.</p>"
b099a6ec40ffb42e02a072c3ce1ac5ff4f77d5db,4042452,        http://stackoverflow.com/questions/4042452/display-help-message-with-python-argparse-when-script-is-called-without-any-argu.'''  # noqa
50f57840dafaae047db34e58babc456b363a20bf,13586108,      # Stack Overflow answer: http://stackoverflow.com/a/13586108/457812. As
12a91da983a8163bd5b49481da95d7cda770560e,12179752,* [Meaning of @classmethod and @staticmethod for beginner?](https://stackoverflow.com/a/12179752)
ee69333a6f6a47a96de9675cfb71ad8844e521d4,36897877, * @see {@link https://stackoverflow.com/questions/36897877/gulp-error-the-following-tasks-did-not-complete-did-you-forget-to-signal-async}
42d81618877a4c067dbce7eef428c0d8410ab2f7,22352793,@REM http://stackoverflow.com/questions/22352793/reading-a-registry-value-to-a-batch-variable-handling-spaces-in-value
74b0c2669905e22024bb72c5468ba5646d386079,2345915,    // http://stackoverflow.com/a/2345915/1331425
314a9ae0f062554fb3247576c2d61f453c2c83c7,25904582,    // See http://stackoverflow.com/a/25904582/1607849
b24e59d2d83ff74dadb688aedeaad9de184d56b0,44009707,    // - https://stackoverflow.com/questions/44009707/customdismissaction-not-working-for-remote-notifications
8db3482a1ace3c0b42333b6cf298a00c98f78fd0,2593661 8936984,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///webpack/bootstrap bdc5b8d2049762e0ba6b"",""webpack:///./src/utils/logger.js"",""webpack:///./src/events.js"",""webpack:///./src/errors.js"",""webpack:///./src/empty.js"",""webpack:///./src/demux/id3.js"",""webpack:///./node_modules/events/events.js"",""webpack:///./node_modules/url-toolkit/src/url-toolkit.js"",""webpack:///./src/crypt/aes-crypto.js"",""webpack:///./src/crypt/fast-aes-key.js"",""webpack:///./src/crypt/aes-decryptor.js"",""webpack:///./src/crypt/decrypter.js"",""webpack:///./src/demux/adts.js"",""webpack:///./src/demux/aacdemuxer.js"",""webpack:///./src/demux/mp4demuxer.js"",""webpack:///./src/demux/mpegaudio.js"",""webpack:///./src/demux/exp-golomb.js"",""webpack:///./src/demux/sample-aes.js"",""webpack:///./src/demux/tsdemuxer.js"",""webpack:///./src/demux/mp3demuxer.js"",""webpack:///./src/helper/aac.js"",""webpack:///./src/remux/mp4-generator.js"",""webpack:///./src/remux/mp4-remuxer.js"",""webpack:///./src/remux/passthrough-remuxer.js"",""webpack:///./src/demux/demuxer-inline.js"",""webpack:///./src/event-handler.js"",""webpack:///./src/utils/attr-list.js"",""webpack:///./src/utils/codecs.js"",""webpack:///./src/loader/playlist-loader.js"",""webpack:///./src/loader/fragment-loader.js"",""webpack:///./src/loader/key-loader.js"",""webpack:///./src/utils/binary-search.js"",""webpack:///./src/helper/buffer-helper.js"",""webpack:///./src/demux/demuxer.js"",""webpack:///./src/helper/level-helper.js"",""webpack:///./src/utils/timeRanges.js"",""webpack:///./src/utils/discontinuities.js"",""webpack:///./src/controller/stream-controller.js"",""webpack:///./src/controller/level-controller.js"",""webpack:///./src/controller/id3-track-controller.js"",""webpack:///./src/utils/ewma.js"",""webpack:///./src/utils/ewma-bandwidth-estimator.js"",""webpack:///./src/controller/abr-controller.js"",""webpack:///./src/controller/buffer-controller.js"",""webpack:///./src/controller/cap-level-controller.js"",""webpack:///./src/controller/fps-controller.js"",""webpack:///./src/utils/xhr-loader.js"",""webpack:///./src/config.js"",""webpack:///./src/hls.js"",""webpack:///./node_modules/webworkify-webpack/index.js"",""webpack:///./src/demux/demuxer-worker.js""],""names"":[""noop"",""fakeLogger"",""trace"",""debug"",""log"",""warn"",""info"",""error"",""exportedLogger"",""formatMsg"",""type"",""msg"",""consolePrintFn"",""func"",""self"",""console"",""args"",""apply"",""exportLoggerFunctions"",""debugConfig"",""functions"",""forEach"",""bind"",""enableLogs"",""e"",""logger"",""MEDIA_ATTACHING"",""MEDIA_ATTACHED"",""MEDIA_DETACHING"",""MEDIA_DETACHED"",""BUFFER_RESET"",""BUFFER_CODECS"",""BUFFER_CREATED"",""BUFFER_APPENDING"",""BUFFER_APPENDED"",""BUFFER_EOS"",""BUFFER_FLUSHING"",""BUFFER_FLUSHED"",""MANIFEST_LOADING"",""MANIFEST_LOADED"",""MANIFEST_PARSED"",""LEVEL_SWITCH"",""LEVEL_SWITCHING"",""LEVEL_SWITCHED"",""LEVEL_LOADING"",""LEVEL_LOADED"",""LEVEL_UPDATED"",""LEVEL_PTS_UPDATED"",""AUDIO_TRACKS_UPDATED"",""AUDIO_TRACK_SWITCH"",""AUDIO_TRACK_SWITCHING"",""AUDIO_TRACK_SWITCHED"",""AUDIO_TRACK_LOADING"",""AUDIO_TRACK_LOADED"",""SUBTITLE_TRACKS_UPDATED"",""SUBTITLE_TRACK_SWITCH"",""SUBTITLE_TRACK_LOADING"",""SUBTITLE_TRACK_LOADED"",""SUBTITLE_FRAG_PROCESSED"",""INIT_PTS_FOUND"",""FRAG_LOADING"",""FRAG_LOAD_PROGRESS"",""FRAG_LOAD_EMERGENCY_ABORTED"",""FRAG_LOADED"",""FRAG_DECRYPTED"",""FRAG_PARSING_INIT_SEGMENT"",""FRAG_PARSING_USERDATA"",""FRAG_PARSING_METADATA"",""FRAG_PARSING_DATA"",""FRAG_PARSED"",""FRAG_BUFFERED"",""FRAG_CHANGED"",""FPS_DROP"",""FPS_DROP_LEVEL_CAPPING"",""ERROR"",""DESTROYING"",""KEY_LOADING"",""KEY_LOADED"",""STREAM_STATE_TRANSITION"",""ErrorTypes"",""NETWORK_ERROR"",""MEDIA_ERROR"",""MUX_ERROR"",""OTHER_ERROR"",""ErrorDetails"",""MANIFEST_LOAD_ERROR"",""MANIFEST_LOAD_TIMEOUT"",""MANIFEST_PARSING_ERROR"",""MANIFEST_INCOMPATIBLE_CODECS_ERROR"",""LEVEL_LOAD_ERROR"",""LEVEL_LOAD_TIMEOUT"",""LEVEL_SWITCH_ERROR"",""AUDIO_TRACK_LOAD_ERROR"",""AUDIO_TRACK_LOAD_TIMEOUT"",""FRAG_LOAD_ERROR"",""FRAG_LOOP_LOADING_ERROR"",""FRAG_LOAD_TIMEOUT"",""FRAG_DECRYPT_ERROR"",""FRAG_PARSING_ERROR"",""REMUX_ALLOC_ERROR"",""KEY_LOAD_ERROR"",""KEY_LOAD_TIMEOUT"",""BUFFER_ADD_CODEC_ERROR"",""BUFFER_APPEND_ERROR"",""BUFFER_APPENDING_ERROR"",""BUFFER_STALLED_ERROR"",""BUFFER_FULL_ERROR"",""BUFFER_SEEK_OVER_HOLE"",""BUFFER_NUDGE_ON_STALL"",""INTERNAL_EXCEPTION"",""ID3"",""isHeader"",""data"",""offset"",""length"",""isFooter"",""getID3Data"",""front"",""size"",""_readSize"",""subarray"",""undefined"",""getTimeStamp"",""frames"",""getID3Frames"",""i"",""frame"",""isTimeStampFrame"",""_readTimeStamp"",""key"",""_getFrameData"",""String"",""fromCharCode"",""id3Data"",""end"",""frameData"",""_decodeFrame"",""push"",""_decodePrivFrame"",""_decodeTextFrame"",""_decodeURLFrame"",""timeStampFrame"",""byteLength"",""Uint8Array"",""pts33Bit"",""timestamp"",""Math"",""round"",""owner"",""_utf8ArrayToStr"",""privateData"",""buffer"",""index"",""description"",""value"",""text"",""url"",""array"",""char2"",""char3"",""out"",""c"",""AESCrypto"",""subtle"",""iv"",""aesIV"",""decrypt"",""name"",""FastAESKey"",""expandKey"",""importKey"",""AESDecryptor"",""rcon"",""subMix"",""Uint32Array"",""invSubMix"",""sBox"",""invSBox"",""initTable"",""uint8ArrayToUint32Array_"",""arrayBuffer"",""view"",""DataView"",""newArray"",""getUint32"",""subMix0"",""subMix1"",""subMix2"",""subMix3"",""invSubMix0"",""invSubMix1"",""invSubMix2"",""invSubMix3"",""d"",""x"",""xi"",""sx"",""x2"",""x4"",""x8"",""t"",""keyBuffer"",""sameKey"",""keySize"",""Error"",""ksRows"",""ksRow"",""invKsRow"",""keySchedule"",""invKeySchedule"",""sbox"",""prev"",""networkToHostOrderSwap"",""word"",""inputArrayBuffer"",""nRounds"",""invSBOX"",""initVector"",""initVector0"",""initVector1"",""initVector2"",""initVector3"",""inputInt32"",""Int32Array"",""outputInt32"",""t0"",""t1"",""t2"",""t3"",""s0"",""s1"",""s2"",""s3"",""inputWords0"",""inputWords1"",""inputWords2"",""inputWords3"",""swapWord"",""destroy"",""observer"",""config"",""logEnabled"",""browserCrypto"",""crypto"",""webkitSubtle"",""disableWebCrypto"",""isSync"",""enableSoftwareAES"",""callback"",""decryptor"",""fastAesKey"",""then"",""aesKey"",""catch"",""err"",""onWebCryptoError"",""result"",""message"",""trigger"",""Event"",""details"",""fatal"",""reason"",""getAudioConfig"",""audioCodec"",""adtsObjectType"",""adtsSampleingIndex"",""adtsExtensionSampleingIndex"",""adtsChanelConfig"",""userAgent"",""navigator"",""toLowerCase"",""manifestCodec"",""adtsSampleingRates"",""test"",""Array"",""indexOf"",""samplerate"",""channelCount"",""codec"",""isHeaderPattern"",""getHeaderLength"",""getFullFrameLength"",""headerLength"",""frameLength"",""newOffset"",""initTrackConfig"",""track"",""getFrameDuration"",""parseFrameHeader"",""pts"",""frameIndex"",""frameDuration"",""stamp"",""appendFrame"",""header"",""aacSample"",""unit"",""dts"",""samples"",""len"",""sample"",""remuxer"",""resetInitSegment"",""initSegment"",""videoCodec"",""duration"",""_audioTrack"",""container"",""id"",""sequenceNumber"",""isAAC"",""inputTimeScale"",""resetTimeStamp"",""probe"",""min"",""append"",""timeOffset"",""contiguous"",""accurateTimeOffset"",""id3Samples"",""ADTS"",""remux"",""UINT32_MAX"",""pow"",""initPTS"",""initData"",""MP4Demuxer"",""parseInitSegment"",""tracks"",""audio"",""video"",""audiovideo"",""dataType"",""bin2str"",""readUint32"",""start"",""val"",""writeUint32"",""findBox"",""path"",""results"",""subresults"",""endbox"",""slice"",""concat"",""traks"",""tkhd"",""trak"",""version"",""trackId"",""mdhd"",""timescale"",""hdlr"",""hdlrType"",""getStartDTS"",""fragment"",""trafs"",""baseTimes"",""map"",""traf"",""tfhd"",""scale"",""baseTime"",""tfdt"",""isFinite"",""offsetStartDTS"",""baseMediaDecodeTime"",""max"",""upper"",""floor"",""lower"",""startDTS"",""MpegAudio"",""BitratesMap"",""SamplingRateMap"",""parseHeader"",""sampleRate"",""headerB"",""headerC"",""headerE"",""headerF"",""headerG"",""columnInBitrates"",""bitRate"",""columnInSampleRates"",""padding"",""bytesAvailable"",""bitsAvailable"",""loadWord"",""position"",""workingBytes"",""availableBytes"",""set"",""skipBits"",""count"",""skipBytes"",""readBits"",""bits"",""valu"",""skipLZ"",""leadingZeroCount"",""skipUEG"",""skipEG"",""readUEG"",""clz"",""readEG"",""readBoolean"",""readUByte"",""readUShort"",""readUInt"",""skipScalingList"",""lastScale"",""nextScale"",""j"",""deltaScale"",""readSPS"",""frameCropLeftOffset"",""frameCropRightOffset"",""frameCropTopOffset"",""frameCropBottomOffset"",""profileIdc"",""profileCompat"",""levelIdc"",""numRefFramesInPicOrderCntCycle"",""picWidthInMbsMinus1"",""picHeightInMapUnitsMinus1"",""frameMbsOnlyFlag"",""scalingListCount"",""chromaFormatIdc"",""picOrderCntType"",""pixelRatio"",""aspectRatioIdc"",""width"",""ceil"",""height"",""readSliceType"",""decryptdata"",""discardEPB"",""decrypter"",""decryptBuffer"",""encryptedData"",""decryptAacSample"",""sampleIndex"",""sync"",""curUnit"",""encryptedBuffer"",""byteOffset"",""localthis"",""decryptedData"",""decryptAacSamples"",""getAvcEncryptedData"",""decodedData"",""encryptedDataLen"",""Int8Array"",""outputPos"",""inputPos"",""getAvcDecryptedUnit"",""decryptAvcSample"",""unitIndex"",""decryptAvcSamples"",""curUnits"",""units"",""typeSupported"",""sampleAes"",""setDecryptData"",""method"",""pmtParsed"",""_pmtId"",""_avcTrack"",""dropped"",""_id3Track"",""_txtTrack"",""aacOverFlow"",""aacLastPTS"",""avcSample"",""_duration"",""stt"",""pid"",""atf"",""pes"",""unknownPIDs"",""avcTrack"",""audioTrack"",""id3Track"",""avcId"",""audioId"",""id3Id"",""pmtId"",""avcData"",""pesData"",""audioData"",""parsePAT"",""_parsePAT"",""parsePMT"",""_parsePMT"",""parsePES"",""_parsePES"",""parseAVCPES"",""_parseAVCPES"",""parseAACPES"",""_parseAACPES"",""parseMPEGPES"",""_parseMPEGPES"",""parseID3PES"",""_parseID3PES"",""parsedPIDs"",""mpeg"",""mp3"",""avc"",""id3"",""decryptAndRemux"",""videoTrack"",""textTrack"",""decryptAndRemuxAvc"",""_initPTS"",""_initDTS"",""mpegSupported"",""isSampleAes"",""sectionLength"",""tableEnd"",""programInfoLength"",""stream"",""frag"",""pesFlags"",""pesPrefix"",""pesLen"",""pesHdrLen"",""pesPts"",""pesDts"",""payloadStartOffset"",""newData"",""splice"",""dataLen"",""pushAccesUnit"",""nbSamples"",""forceKeyFrameOnDiscontinuity"",""sps"",""last"",""_parseAVCNALu"",""expGolombDecoder"",""spsfound"",""createAVCSample"",""audFound"",""sliceType"",""payloadType"",""payloadSize"",""endOfCaptions"",""b"",""countryCode"",""providerCode"",""userStructure"",""userDataType"",""firstByte"",""secondByte"",""totalCCs"",""byteArray"",""_insertSampleInOrder"",""bytes"",""codecarray"",""codecstring"",""h"",""toString"",""pps"",""arr"",""pos"",""_getLastNalUnit"",""lastUnit"",""overflow"",""state"",""naluState"",""lastState"",""unitType"",""lastUnitStart"",""lastUnitType"",""tmp"",""EPBPositions"",""newLength"",""sourceIndex"",""shift"",""startOffset"",""newPTS"",""abs"",""AAC"",""getSilentFrame"",""MP4"",""init"",""types"",""avc1"",""avcC"",""btrt"",""dinf"",""dref"",""esds"",""ftyp"",""mdat"",""mdia"",""mfhd"",""minf"",""moof"",""moov"",""mp4a"",""mvex"",""mvhd"",""pasp"",""sdtp"",""stbl"",""stco"",""stsc"",""stsd"",""stsz"",""stts"",""trun"",""trex"",""vmhd"",""smhd"",""hasOwnProperty"",""charCodeAt"",""videoHdlr"",""audioHdlr"",""HDLR_TYPES"",""STTS"",""STSC"",""STCO"",""STSZ"",""VMHD"",""SMHD"",""STSD"",""majorBrand"",""avc1Brand"",""minorVersion"",""FTYP"",""box"",""DINF"",""payload"",""prototype"",""call"",""arguments"",""upperWordDuration"",""lowerWordDuration"",""sn"",""boxes"",""flags"",""dependsOn"",""isDependedOn"",""hasRedundancy"",""avcc"",""hSpacing"",""vSpacing"",""configlen"",""sampleDependencyTable"",""upperWordBaseMediaDecodeTime"",""lowerWordBaseMediaDecodeTime"",""arraylen"",""cts"",""isLeading"",""paddingValue"",""isNonSync"",""degradPrio"",""movie"",""MAX_SILENT_FRAME_DURATION"",""vendor"",""isSafari"",""match"",""ISGenerated"",""defaultTimeStamp"",""generateIS"",""nbAudioSamples"",""nbVideoSamples"",""audioTimeOffset"",""videoTimeOffset"",""audiovideoDeltaDts"",""remuxAudio"",""audioTrackLength"",""endPTS"",""startPTS"",""remuxVideo"",""videoData"",""remuxEmptyAudio"",""remuxID3"",""remuxText"",""audioSamples"",""videoSamples"",""computePTSDTS"",""initDTS"",""Infinity"",""metadata"",""Object"",""keys"",""timeScale"",""mp4SampleDuration"",""firstPTS"",""firstDTS"",""nextDTS"",""lastPTS"",""lastDTS"",""inputSamples"",""outputSamples"",""ptsNormalize"",""_PTSNormalize"",""nextAvcDts"",""sort"",""a"",""deltadts"",""deltapts"",""PTSDTSshift"",""reduce"",""curr"",""delta"",""nbNalu"",""naluLen"",""nbUnits"",""sampleLen"",""mdatSize"",""setUint32"",""avcSampleUnits"",""mp4SampleLength"",""compositionTimeOffset"",""unitData"",""unitDataLen"",""lastFrameDuration"",""stretchShortVideoTrack"",""maxBufferHole"",""maxSeekHole"",""gapTolerance"",""deltaToFrameEnd"",""nextAudioPts"",""data1"",""data2"",""endDTS"",""nb"",""mp4timeScale"",""scaleFactor"",""inputSampleDuration"",""rawMPEG"",""mp4Sample"",""fillFrame"",""maxAudioFramesDrift"",""nextPts"",""toFixed"",""missing"",""newStamp"",""audioSample"",""numMissingFrames"",""unitLen"",""lastSampleDuration"",""sampleDuration"",""silentFrame"",""reference"",""rawData"",""streamType"",""demuxer"",""discontinuity"",""trackSwitch"",""defaultInitPTS"",""startTime"",""performance"",""now"",""Date"",""endTime"",""stats"",""tstart"",""tdecrypt"",""pushDecrypted"",""muxConfig"",""demux"",""mux"",""hls"",""onEvent"",""events"",""handledEvents"",""useGenericHandler"",""registerListeners"",""unregisterListeners"",""isEventHandler"",""event"",""on"",""off"",""onEventGeneric"",""eventToFunction"",""funcName"",""replace"",""constructor"",""DECIMAL_RESOLUTION_REGEX"",""ATTR_LIST_REGEX"",""AttrList"",""attrs"",""parseAttrList"",""attr"",""decimalInteger"",""attrName"",""intValue"",""parseInt"",""Number"",""MAX_SAFE_INTEGER"",""hexadecimalInteger"",""stringValue"",""hexadecimalIntegerAsNumber"",""decimalFloatingPoint"",""parseFloat"",""enumeratedString"",""decimalResolution"",""res"",""exec"",""input"",""lastIndex"",""quote"",""lastIndexOf"",""sampleEntryCodesISO"",""isCodecType"",""typeCodes"",""isCodecSupportedInMp4"",""MediaSource"",""isTypeSupported"",""MASTER_PLAYLIST_REGEX"",""MASTER_PLAYLIST_MEDIA_REGEX"",""LEVEL_PLAYLIST_REGEX_FAST"",""RegExp"",""source"",""join"",""LEVEL_PLAYLIST_REGEX_SLOW"",""_uri"",""reluri"",""URLToolkit"",""buildAbsoluteURL"",""baseuri"",""alwaysNormalize"",""_url"",""_byteRange"",""_decryptdata"",""tagList"",""createInitializationVector"",""segmentNumber"",""uint8View"",""fragmentDecryptdataFromLevelkey"",""levelkey"",""uri"",""cloneObj"",""obj"",""JSON"",""parse"",""stringify"",""relurl"",""baseurl"",""_programDateTime"",""rawProgramDateTime"",""byteRange"",""rawByteRange"",""params"",""split"",""lastByteRangeEndOffset"",""loaders"",""loaderName"",""loader"",""EventHandler"",""onManifestLoading"",""load"",""onLevelLoading"",""level"",""onAudioTrackLoading"",""onSubtitleTrackLoading"",""context"",""loaderContext"",""abort"",""retry"",""timeout"",""retryDelay"",""maxRetryDelay"",""manifestLoadingMaxRetry"",""manifestLoadingTimeOut"",""manifestLoadingRetryDelay"",""manifestLoadingMaxRetryTimeout"",""levelLoadingMaxRetry"",""levelLoadingTimeOut"",""levelLoadingRetryDelay"",""levelLoadingMaxRetryTimeout"",""pLoader"",""responseType"",""loaderConfig"",""loaderCallbacks"",""maxRetry"",""onSuccess"",""loadsuccess"",""onError"",""loaderror"",""onTimeout"",""loadtimeout"",""resolve"",""baseUrl"",""parseMasterPlaylist"",""string"",""levels"",""setCodecs"",""codecs"",""filtered"",""filter"",""preferred"",""unknownCodecs"",""resolution"",""bitrate"",""NAME"",""CODECS"",""avc1toavcoti"",""parseMasterPlaylistMedia"",""medias"",""media"",""TYPE"",""groupId"",""default"",""DEFAULT"",""autoselect"",""AUTOSELECT"",""forced"",""FORCED"",""URI"",""lang"",""LANGUAGE"",""avcdata"",""substr"",""parseLevelPlaylist"",""currentSN"",""totalduration"",""fragments"",""live"",""startSN"",""cc"",""prevFrag"",""title"",""isNaN"",""byteRangeEndOffset"",""programDateTime"",""value1"",""value2"",""toUpperCase"",""targetduration"",""decryptparams"",""keyAttrs"",""decryptmethod"",""decrypturi"",""decryptiv"",""startParams"",""startAttrs"",""startTimeOffset"",""mapAttrs"",""BYTERANGE"",""pop"",""averagetargetduration"",""endSN"",""startCC"",""endCC"",""response"",""networkDetails"",""tload"",""isLevel"",""levelId"",""levelDetails"",""audioTracks"",""tparsed"",""subtitles"",""embeddedAudioFound"",""AUDIO"",""unshift"",""onFragLoading"",""loaded"",""fLoader"",""progressData"",""byteRangeStartOffset"",""rangeStart"",""rangeEnd"",""fragLoadingTimeOut"",""fragLoadingMaxRetryTimeout"",""onProgress"",""loadprogress"",""decryptkey"",""decrypturl"",""onKeyLoading"",""fragLoadingMaxRetry"",""fragLoadingRetryDelay"",""BinarySearch"",""search"",""list"",""comparisonFunction"",""minIndex"",""maxIndex"",""currentIndex"",""currentElement"",""comparisonResult"",""BufferHelper"",""isBuffered"",""buffered"",""bufferInfo"",""maxHoleDuration"",""vbuffered"",""bufferedInfo"",""nextStart"",""buffered2"",""bufferLen"",""bufferStart"",""bufferEnd"",""bufferStartNext"",""diff"",""buf2len"",""buf2end"",""emit"",""removeListener"",""forwardMessage"",""ev"",""mp4"",""enableWorker"",""Worker"",""w"",""work"",""onwmsg"",""onWorkerMessage"",""addEventListener"",""onerror"",""filename"",""lineno"",""postMessage"",""cmd"",""URL"",""revokeObjectURL"",""objectURL"",""removeEventListener"",""terminate"",""removeAllListeners"",""lastFrag"",""nextSN"",""updatePTS"",""fromIdx"",""toIdx"",""fragFrom"",""fragTo"",""fragToPTS"",""updateFragPTSDTS"",""maxStartPTS"",""deltaPTS"",""drift"",""fragIdx"",""PTSKnown"",""mergeDetails"",""oldDetails"",""newDetails"",""oldfragments"",""newfragments"",""ccOffset"",""PTSFrag"",""oldFrag"",""newFrag"",""backtracked"",""sliding"",""TimeRanges"",""r"",""findFirstFragWithCC"",""firstFrag"",""currentFrag"",""findFragWithCC"",""CC"",""candidate"",""shouldAlignOnDiscontinuities"",""lastLevel"",""shouldAlign"",""findDiscontinuousReferenceFrag"",""prevDetails"",""curDetails"",""prevFrags"",""curFrags"",""prevStartFrag"",""adjustPts"",""alignDiscontinuities"",""referenceFrag"",""lastPDT"",""newPDT"",""State"",""STOPPED"",""IDLE"",""FRAG_LOADING_WAITING_RETRY"",""WAITING_LEVEL"",""PARSING"",""PARSED"",""ENDED"",""audioCodecSwap"",""ticks"",""_state"",""ontick"",""tick"",""stopLoad"",""timer"",""clearInterval"",""startLoad"",""startPosition"",""lastCurrentTime"",""setInterval"",""fragLoadError"",""startFragRequested"",""startLevel"",""bitrateTest"",""nextLoadLevel"",""loadedmetadata"",""nextLoadPosition"",""forceStartLoad"",""fragCurrent"",""fragPrevious"",""doTick"",""setTimeout"",""_doTickIdle"",""retryDate"",""seeking"",""_checkBuffer"",""_checkFragmentChanged"",""levelLastLoaded"",""startFragPrefetch"",""currentTime"",""levelInfo"",""levelBitrate"",""maxBufLen"",""maxBufferSize"",""maxBufferLength"",""maxMaxBufferLength"",""mediaBuffer"",""altAudio"",""_fetchPayloadOrEos"",""fragLen"",""initialLiveManifestSize"",""_ensureFragmentAtLivePoint"",""_findFragment"",""_loadFragmentOrKey"",""maxLatency"",""liveMaxLatencyDuration"",""liveMaxLatencyDurationCount"",""maxFragLookUpTolerance"",""liveSyncPosition"",""computeLivePosition"",""readyState"",""targetSN"",""fragNext"",""foundFrag"",""fragmentWithinToleranceTest"",""candidateLookupTolerance"",""curSNIdx"",""sameLevel"",""nextFrag"",""loadCounter"",""fragLoadIdx"",""maxThreshold"",""fragLoadingLoopThreshold"",""loadIdx"",""autoLevel"",""autoLevelEnabled"",""getBufferedFrag"",""_bufferedFrags"",""followingBufferedFrag"",""fragPlayingCurrent"",""playbackRate"",""fragPlaying"",""fragPlayingLevel"",""immediateLevelSwitch"",""immediateSwitch"",""previouslyPaused"",""paused"",""pause"",""flushMainBuffer"",""POSITIVE_INFINITY"",""immediateLevelSwitchEnd"",""play"",""nextLevelSwitch"",""fetchdelay"",""nextBufferedFrag"",""nextLevelId"",""nextLevel"",""fragLastKbps"",""endOffset"",""flushScope"",""onMediaAttached"",""onvseeking"",""onMediaSeeking"",""onvseeked"",""onMediaSeeked"",""onvended"",""onMediaEnded"",""autoStartLoad"",""onMediaDetaching"",""ended"",""tolerance"",""fragStartOffset"",""fragEndOffset"",""stalled"",""onManifestParsed"",""aac"",""heaac"",""audioCodecSwitch"",""onLevelLoaded"",""newLevelId"",""curLevel"",""LevelHelper"",""onKeyLoaded"",""onFragLoaded"",""fragLoaded"",""currentLevel"",""tbuffered"",""defaultAudioCodec"",""lastAudioCodec"",""pendingBuffering"",""appended"",""mediaSeeking"",""initSegmentData"",""onFragParsingInitSegment"",""fragNew"",""trackName"",""ua"",""levelCodec"",""parent"",""content"",""onFragParsingData"",""onFragParsed"",""_checkAppendedParsed"",""onAudioTrackSwitching"",""onAudioTrackSwitched"",""videoBuffer"",""onBufferCreated"",""mediaTrack"",""alternate"",""onBufferAppended"",""pending"",""bufferedFrags"",""total"",""tfirst"",""mediaBuffered"",""delay"",""_reduceMaxBufferLength"",""levelRetry"",""minLength"",""startPositionBuffered"",""firstbufferedPosition"",""startNotBufferedButClose"",""expectedPlaying"",""jumpThreshold"",""playheadMoving"",""stallReported"",""nudgeRetry"",""tnow"",""stalledDuration"",""lowBufferWatchdogPeriod"",""nextBufferStart"",""nudgeOffset"",""hole"",""highBufferWatchdogPeriod"",""nudgeMaxRetry"",""targetTime"",""onFragLoadEmergencyAborted"",""onBufferFlushed"",""swapAudioCodec"",""targetLatency"",""liveSyncDuration"",""liveSyncDurationCount"",""nextState"",""previousState"",""_liveSyncPosition"",""_manualLevel"",""cleanTimer"",""clearTimeout"",""canload"",""_levels"",""loadError"",""onManifestLoaded"",""bitrateStart"",""levelSet"",""levelFromSet"",""videoCodecFound"",""audioCodecFound"",""chromeOrFirefox"",""fragmentError"",""urlId"",""_firstLevel"",""firstLevel"",""setLevelInternal"",""newLevel"",""_level"",""levelProperties"",""levelError"",""levelIndex"",""redundantLevels"",""nextAutoLevel"",""reloadInterval"",""trequest"",""_startLevel"",""configStartLevel"",""onFragParsingMetadata"",""addTextTrack"",""mode"",""Cue"",""window"",""WebKitDataCue"",""VTTCue"",""TextTrackCue"",""cue"",""addCue"",""EWMA"",""halfLife"",""alpha_"",""exp"",""estimate_"",""totalWeight_"",""weight"",""adjAlpha"",""getTotalWeight"",""getEstimate"",""zeroFactor"",""slow"",""fast"",""defaultEstimate"",""defaultEstimate_"",""minWeight_"",""minDelayMs_"",""slow_"",""fast_"",""durationMs"",""numBytes"",""bandwidth"",""canEstimate"",""lastLoadedFragLevel"",""_nextAutoLevel"",""_bwEstimator"",""onCheck"",""_abandonRulesCheck"",""clearTimer"",""isLive"",""ewmaFast"",""ewmaSlow"",""abrEwmaFastLive"",""abrEwmaSlowLive"",""abrEwmaFastVoD"",""abrEwmaSlowVoD"",""abrEwmaDefaultEstimate"",""v"",""minAutoLevel"",""aborted"",""requestDelay"",""loadRate"",""bw"",""realBitrate"",""expectedLen"",""fragLoadedDelay"",""bufferStarvationDelay"",""fragLevelNextLoadedDelay"",""levelNextBitrate"",""abrMaxWithRealBitrate"",""loadedBytes"",""loadedDuration"",""onFragBuffered"",""fragLoadingProcessingMs"",""bwEstimate"",""bitrateTestDelay"",""_findBestLevel"",""currentFragDuration"",""currentBw"",""maxAutoLevel"",""maxFetchDuration"",""bwFactor"",""bwUpFactor"",""avgDuration"",""adjustedbw"",""fetchDuration"",""forcedAutoLevel"",""bwEstimator"",""nextABRAutoLevel"",""_nextABRAutoLevel"",""avgbw"",""bestLevel"",""abrBandWidthFactor"",""abrBandWidthUpFactor"",""maxStarvationDelay"",""maxLoadingDelay"",""_msDuration"",""_levelDuration"",""onsbue"",""onSBUpdateEnd"",""onsbe"",""onSBUpdateError"",""pendingTracks"",""onLevelPtsUpdated"",""audioBuffer"",""sourceBuffer"",""timestampOffset"",""updating"",""audioTimestampOffset"",""audioExpected"",""videoExpected"",""sourceBufferNb"",""onMediaAttaching"",""ms"",""mediaSource"",""onmso"",""onMediaSourceOpen"",""onmse"",""onMediaSourceEnded"",""onmsc"",""onMediaSourceClose"",""src"",""createObjectURL"",""endOfStream"",""removeAttribute"",""flushRange"",""segments"",""checkPendingTracks"",""pendingTracksNb"",""createSourceBuffers"",""doAppending"",""_needsFlush"",""doFlush"",""_needsEos"",""checkEos"",""appending"",""counter"",""segment"",""updateMediaElementDuration"",""onBufferReset"",""sb"",""removeSourceBuffer"",""onBufferCodecs"",""mimeType"",""addSourceBuffer"",""onBufferAppending"",""onBufferAppendFail"",""onBufferEos"",""sbobj"",""onBufferFlushing"",""flushBufferCounter"",""onLevelUpdated"",""levelDuration"",""range"",""flushBuffer"",""appendBuffer"",""appendError"",""code"",""appendErrorMaxRetry"",""typeIn"",""bufStart"",""bufEnd"",""flushStart"",""flushEnd"",""remove"",""capLevelToPlayerSize"",""restrictedLevels"",""autoLevelCapping"",""onFpsDropLevelCapping"",""CapLevelController"",""isLevelAllowed"",""droppedLevel"",""HTMLVideoElement"",""getMaxLevel"",""detectPlayerSize"",""levelsLength"",""streamController"",""capLevelIndex"",""validLevels"",""getMaxLevelByMediaSize"",""mediaWidth"",""mediaHeight"",""atGreatestBandiwdth"",""maxLevelIndex"",""clientWidth"",""offsetWidth"",""contentScaleFactor"",""clientHeight"",""offsetHeight"",""devicePixelRatio"",""isVideoPlaybackQualityAvailable"",""capLevelOnFPSDrop"",""getVideoPlaybackQuality"",""checkFPSInterval"",""fpsDroppedMonitoringPeriod"",""checkFPS"",""decodedFrames"",""droppedFrames"",""lastTime"",""currentPeriod"",""currentDropped"",""lastDroppedFrames"",""currentDecoded"",""lastDecodedFrames"",""droppedFPS"",""totalDroppedFrames"",""fpsDroppedMonitoringThreshold"",""videoPlaybackQuality"",""totalVideoFrames"",""droppedVideoFrames"",""webkitDecodedFrameCount"",""webkitDroppedFrameCount"",""xhrSetup"",""requestTimeout"",""retryTimeout"",""callbacks"",""loadInternal"",""xhr"",""XMLHttpRequest"",""open"",""status"",""setRequestHeader"",""onreadystatechange"",""readystatechange"",""onprogress"",""send"",""currentTarget"",""responseText"",""responseURL"",""statusText"",""lengthComputable"",""hlsDefaultConfig"",""fetchSetup"",""abrController"",""bufferController"",""capLevelController"",""fpsController"",""minAutoBitrate"",""subtitleStreamController"",""SubtitleStreamController"",""subtitleTrackController"",""SubtitleTrackController"",""timelineController"",""TimelineController"",""cueHandler"",""Cues"",""enableCEA708Captions"",""enableWebVTT"",""captionsTextTrack1Label"",""captionsTextTrack1LanguageCode"",""captionsTextTrack2Label"",""captionsTextTrack2LanguageCode"",""audioStreamController"",""AudioStreamController"",""audioTrackController"",""AudioTrackController"",""isSupported"",""WebKitMediaSource"",""SourceBuffer"",""WebKitSourceBuffer"",""sourceBufferValidAPI"",""Hls"",""defaultConfig"",""DefaultConfig"",""prop"",""_autoLevelCapping"",""playListLoader"",""fragmentLoader"",""keyLoader"",""id3TrackController"",""levelController"",""networkControllers"",""Controller"",""coreComponents"",""detachMedia"",""component"",""attachMedia"",""loadSource"",""location"",""href"",""controller"",""recoverMediaError"",""loadLevel"",""manualLevel"",""audioTrackId"",""subtitleTracks"",""subtitleTrack"",""subtitleTrackId"",""DemuxerWorker"",""transferable""],""mappings"":""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;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AC7SA;;AAEA;AACA,iB;AACA;;AAEA,6BAA6B,mBAAmB,eAAe;AAC/D,oCAAoC;AACpC;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB,EAAE;AAChD;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;;;;;;;;;;IClKqBoD,S;AACnB,qBAAYC,MAAZ,EAAmBC,EAAnB,EAAuB;AAAA;;AACrB,SAAKD,MAAL,GAAcA,MAAd;AACA,SAAKE,KAAL,GAAaD,EAAb;AACD;;sBAEDE,O,oBAAQtD,I,EAAMiB,G,EAAK;AACjB,WAAO,KAAKkC,MAAL,CAAYG,OAAZ,CAAoB,EAACC,MAAM,SAAP,EAAkBH,IAAI,KAAKC,KAA3B,EAApB,EAAuDpC,GAAvD,EAA4DjB,IAA5D,CAAP;AACD,G;;;;;+CARkBkD,S;;;;ICAfM,U;AACJ,sBAAYL,MAAZ,EAAmBlC,GAAnB,EAAwB;AAAA;;AACtB,SAAKkC,MAAL,GAAcA,MAAd;AACA,SAAKlC,GAAL,GAAWA,GAAX;AACD;;uBAEDwC,S,wBAAY;AACV,WAAO,KAAKN,MAAL,CAAYO,SAAZ,CAAsB,KAAtB,EAA6B,KAAKzC,GAAlC,EAAuC,EAACsC,MAAM,SAAP,EAAvC,EAA0D,KAA1D,EAAiE,CAAC,SAAD,EAAY,SAAZ,CAAjE,CAAP;AACD,G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"",""file"":""hls.light.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""Hls\""] = factory();\n\telse\n\t\troot[\""Hls\""] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""/dist/\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bdc5b8d2049762e0ba6b"",""function noop() {}\n\nconst fakeLogger = {\n  trace: noop,\n  debug: noop,\n  log: noop,\n  warn: noop,\n  info: noop,\n  error: noop\n};\n\nlet exportedLogger = fakeLogger;\n\n/*globals self: false */\n\n//let lastCallTime;\n// function formatMsgWithTimeInfo(type, msg) {\n//   const now = Date.now();\n//   const diff = lastCallTime ? '+' + (now - lastCallTime) : '0';\n//   lastCallTime = now;\n//   msg = (new Date(now)).toISOString() + ' | [' +  type + '] > ' + msg + ' ( ' + diff + ' ms )';\n//   return msg;\n// }\n\nfunction formatMsg(type, msg) {\n  msg = '[' +  type + '] > ' + msg;\n  return msg;\n}\n\nfunction consolePrintFn(type) {\n  const func = self.console[type];\n  if (func) {\n    return function(...args) {\n      if(args[0]) {\n        args[0] = formatMsg(type, args[0]);\n      }\n      func.apply(self.console, args);\n    };\n  }\n  return noop;\n}\n\nfunction exportLoggerFunctions(debugConfig, ...functions) {\n  functions.forEach(function(type) {\n    exportedLogger[type] = debugConfig[type] ? debugConfig[type].bind(debugConfig) : consolePrintFn(type);\n  });\n}\n\nexport var enableLogs = function(debugConfig) {\n  if (debugConfig === true || typeof debugConfig === 'object') {\n    exportLoggerFunctions(debugConfig,\n      // Remove out from list here to hard-disable a log-level\n      //'trace',\n      'debug',\n      'log',\n      'info',\n      'warn',\n      'error'\n    );\n    // Some browsers don't allow to use bind on console object anyway\n    // fallback to default if needed\n    try {\n     exportedLogger.log();\n    } catch (e) {\n      exportedLogger = fakeLogger;\n    }\n  }\n  else {\n    exportedLogger = fakeLogger;\n  }\n};\n\nexport var logger = exportedLogger;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/logger.js"",""export default {\n  // fired before MediaSource is attaching to media element - data: { media }\n  MEDIA_ATTACHING: 'hlsMediaAttaching',\n  // fired when MediaSource has been succesfully attached to media element - data: { }\n  MEDIA_ATTACHED: 'hlsMediaAttached',\n  // fired before detaching MediaSource from media element - data: { }\n  MEDIA_DETACHING: 'hlsMediaDetaching',\n  // fired when MediaSource has been detached from media element - data: { }\n  MEDIA_DETACHED: 'hlsMediaDetached',\n  // fired when we buffer is going to be reset - data: { }\n  BUFFER_RESET: 'hlsBufferReset',\n  // fired when we know about the codecs that we need buffers for to push into - data: {tracks : { container, codec, levelCodec, initSegment, metadata }}\n  BUFFER_CODECS: 'hlsBufferCodecs',\n  // fired when sourcebuffers have been created - data: { tracks : tracks }\n  BUFFER_CREATED: 'hlsBufferCreated',\n  // fired when we append a segment to the buffer - data: { segment: segment object }\n  BUFFER_APPENDING: 'hlsBufferAppending',\n  // fired when we are done with appending a media segment to the buffer - data : { parent : segment parent that triggered BUFFER_APPENDING, pending : nb of segments waiting for appending for this segment parent}\n  BUFFER_APPENDED: 'hlsBufferAppended',\n  // fired when the stream is finished and we want to notify the media buffer that there will be no more data - data: { }\n  BUFFER_EOS: 'hlsBufferEos',\n  // fired when the media buffer should be flushed - data { startOffset, endOffset }\n  BUFFER_FLUSHING: 'hlsBufferFlushing',\n  // fired when the media buffer has been flushed - data: { }\n  BUFFER_FLUSHED: 'hlsBufferFlushed',\n  // fired to signal that a manifest loading starts - data: { url : manifestURL}\n  MANIFEST_LOADING: 'hlsManifestLoading',\n  // fired after manifest has been loaded - data: { levels : [available quality levels], audioTracks : [ available audio tracks], url : manifestURL, stats : { trequest, tfirst, tload, mtime}}\n  MANIFEST_LOADED: 'hlsManifestLoaded',\n  // fired after manifest has been parsed - data: { levels : [available quality levels], firstLevel : index of first quality level appearing in Manifest}\n  MANIFEST_PARSED: 'hlsManifestParsed',\n  // fired when a level switch is requested - data: { level : id of new level } // deprecated in favor LEVEL_SWITCHING\n  LEVEL_SWITCH: 'hlsLevelSwitch',\n  // fired when a level switch is requested - data: { level : id of new level }\n  LEVEL_SWITCHING: 'hlsLevelSwitching',\n  // fired when a level switch is effective - data: { level : id of new level }\n  LEVEL_SWITCHED: 'hlsLevelSwitched',\n  // fired when a level playlist loading starts - data: { url : level URL, level : id of level being loaded}\n  LEVEL_LOADING: 'hlsLevelLoading',\n  // fired when a level playlist loading finishes - data: { details : levelDetails object, level : id of loaded level, stats : { trequest, tfirst, tload, mtime} }\n  LEVEL_LOADED: 'hlsLevelLoaded',\n  // fired when a level's details have been updated based on previous details, after it has been loaded - data: { details : levelDetails object, level : id of updated level }\n  LEVEL_UPDATED: 'hlsLevelUpdated',\n  // fired when a level's PTS information has been updated after parsing a fragment - data: { details : levelDetails object, level : id of updated level, drift: PTS drift observed when parsing last fragment }\n  LEVEL_PTS_UPDATED: 'hlsLevelPtsUpdated',\n  // fired to notify that audio track lists has been updated - data: { audioTracks : audioTracks }\n  AUDIO_TRACKS_UPDATED: 'hlsAudioTracksUpdated',\n  // fired when an audio track switch occurs - data: { id : audio track id } // deprecated in favor AUDIO_TRACK_SWITCHING\n  AUDIO_TRACK_SWITCH: 'hlsAudioTrackSwitch',\n  // fired when an audio track switching is requested - data: { id : audio track id }\n  AUDIO_TRACK_SWITCHING: 'hlsAudioTrackSwitching',\n  // fired when an audio track switch actually occurs - data: { id : audio track id }\n  AUDIO_TRACK_SWITCHED: 'hlsAudioTrackSwitched',\n  // fired when an audio track loading starts - data: { url : audio track URL, id : audio track id }\n  AUDIO_TRACK_LOADING: 'hlsAudioTrackLoading',\n  // fired when an audio track loading finishes - data: { details : levelDetails object, id : audio track id, stats : { trequest, tfirst, tload, mtime } }\n  AUDIO_TRACK_LOADED: 'hlsAudioTrackLoaded',\n  // fired to notify that subtitle track lists has been updated - data: { subtitleTracks : subtitleTracks }\n  SUBTITLE_TRACKS_UPDATED: 'hlsSubtitleTracksUpdated',\n  // fired when an subtitle track switch occurs - data: { id : subtitle track id }\n  SUBTITLE_TRACK_SWITCH: 'hlsSubtitleTrackSwitch',\n  // fired when a subtitle track loading starts - data: { url : subtitle track URL, id : subtitle track id }\n  SUBTITLE_TRACK_LOADING: 'hlsSubtitleTrackLoading',\n  // fired when a subtitle track loading finishes - data: { details : levelDetails object, id : subtitle track id, stats : { trequest, tfirst, tload, mtime } }\n  SUBTITLE_TRACK_LOADED: 'hlsSubtitleTrackLoaded',\n  // fired when a subtitle fragment has been processed - data: { success : boolean, frag : the processed frag }\n  SUBTITLE_FRAG_PROCESSED: 'hlsSubtitleFragProcessed',\n  // fired when the first timestamp is found - data: { id : demuxer id, initPTS: initPTS, frag : fragment object }\n  INIT_PTS_FOUND: 'hlsInitPtsFound',\n  // fired when a fragment loading starts - data: { frag : fragment object }\n  FRAG_LOADING: 'hlsFragLoading',\n  // fired when a fragment loading is progressing - data: { frag : fragment object, { trequest, tfirst, loaded } }\n  FRAG_LOAD_PROGRESS: 'hlsFragLoadProgress',\n  // Identifier for fragment load aborting for emergency switch down - data: { frag : fragment object }\n  FRAG_LOAD_EMERGENCY_ABORTED: 'hlsFragLoadEmergencyAborted',\n  // fired when a fragment loading is completed - data: { frag : fragment object, payload : fragment payload, stats : { trequest, tfirst, tload, length } }\n  FRAG_LOADED: 'hlsFragLoaded',\n  // fired when a fragment has finished decrypting - data: { id : demuxer id, frag: fragment object, stats : { tstart, tdecrypt } }\n  FRAG_DECRYPTED: 'hlsFragDecrypted',\n  // fired when Init Segment has been extracted from fragment - data: { id : demuxer id, frag: fragment object, moov : moov MP4 box, codecs : codecs found while parsing fragment }\n  FRAG_PARSING_INIT_SEGMENT: 'hlsFragParsingInitSegment',\n  // fired when parsing sei text is completed - data: { id : demuxer id, frag: fragment object, samples : [ sei samples pes ] }\n  FRAG_PARSING_USERDATA: 'hlsFragParsingUserdata',\n  // fired when parsing id3 is completed - data: { id : demuxer id, frag: fragment object, samples : [ id3 samples pes ] }\n  FRAG_PARSING_METADATA: 'hlsFragParsingMetadata',\n  // fired when data have been extracted from fragment - data: { id : demuxer id, frag: fragment object, data1 : moof MP4 box or TS fragments, data2 : mdat MP4 box or null}\n  FRAG_PARSING_DATA: 'hlsFragParsingData',\n  // fired when fragment parsing is completed - data: { id : demuxer id, frag: fragment object }\n  FRAG_PARSED: 'hlsFragParsed',\n  // fired when fragment remuxed MP4 boxes have all been appended into SourceBuffer - data: { id : demuxer id, frag : fragment object, stats : { trequest, tfirst, tload, tparsed, tbuffered, length, bwEstimate } }\n  FRAG_BUFFERED: 'hlsFragBuffered',\n  // fired when fragment matching with current media position is changing - data : { id : demuxer id, frag : fragment object }\n  FRAG_CHANGED: 'hlsFragChanged',\n  // Identifier for a FPS drop event - data: { curentDropped, currentDecoded, totalDroppedFrames }\n  FPS_DROP: 'hlsFpsDrop',\n  //triggered when FPS drop triggers auto level capping - data: { level, droppedlevel }\n  FPS_DROP_LEVEL_CAPPING: 'hlsFpsDropLevelCapping',\n  // Identifier for an error event - data: { type : error type, details : error details, fatal : if true, hls.js cannot/will not try to recover, if false, hls.js will try to recover,other error specific data }\n  ERROR: 'hlsError',\n  // fired when hls.js instance starts destroying. Different from MEDIA_DETACHED as one could want to detach and reattach a media to the instance of hls.js to handle mid-rolls for example - data: { }\n  DESTROYING: 'hlsDestroying',\n  // fired when a decrypt key loading starts - data: { frag : fragment object }\n  KEY_LOADING: 'hlsKeyLoading',\n  // fired when a decrypt key loading is completed - data: { frag : fragment object, payload : key payload, stats : { trequest, tfirst, tload, length } }\n  KEY_LOADED: 'hlsKeyLoaded',\n  // fired upon stream controller state transitions - data: { previousState, nextState }\n  STREAM_STATE_TRANSITION: 'hlsStreamStateTransition'\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/events.js"",""export const ErrorTypes = {\n  // Identifier for a network error (loading error / timeout ...)\n  NETWORK_ERROR: 'networkError',\n  // Identifier for a media Error (video/parsing/mediasource error)\n  MEDIA_ERROR: 'mediaError',\n  // Identifier for a mux Error (demuxing/remuxing)\n  MUX_ERROR: 'muxError',\n  // Identifier for all other errors\n  OTHER_ERROR: 'otherError'\n};\n\nexport const ErrorDetails = {\n  // Identifier for a manifest load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n  MANIFEST_LOAD_ERROR: 'manifestLoadError',\n  // Identifier for a manifest load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n  MANIFEST_LOAD_TIMEOUT: 'manifestLoadTimeOut',\n  // Identifier for a manifest parsing error - data: { url : faulty URL, reason : error reason}\n  MANIFEST_PARSING_ERROR: 'manifestParsingError',\n  // Identifier for a manifest with only incompatible codecs error - data: { url : faulty URL, reason : error reason}\n  MANIFEST_INCOMPATIBLE_CODECS_ERROR: 'manifestIncompatibleCodecsError',\n  // Identifier for a level load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n  LEVEL_LOAD_ERROR: 'levelLoadError',\n  // Identifier for a level load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n  LEVEL_LOAD_TIMEOUT: 'levelLoadTimeOut',\n  // Identifier for a level switch error - data: { level : faulty level Id, event : error description}\n  LEVEL_SWITCH_ERROR: 'levelSwitchError',\n  // Identifier for an audio track load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n  AUDIO_TRACK_LOAD_ERROR: 'audioTrackLoadError',\n  // Identifier for an audio track load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n  AUDIO_TRACK_LOAD_TIMEOUT: 'audioTrackLoadTimeOut',\n  // Identifier for fragment load error - data: { frag : fragment object, response : { code: error code, text: error text }}\n  FRAG_LOAD_ERROR: 'fragLoadError',\n  // Identifier for fragment loop loading error - data: { frag : fragment object}\n  FRAG_LOOP_LOADING_ERROR: 'fragLoopLoadingError',\n  // Identifier for fragment load timeout error - data: { frag : fragment object}\n  FRAG_LOAD_TIMEOUT: 'fragLoadTimeOut',\n  // Identifier for a fragment decryption error event - data: {id : demuxer Id,frag: fragment object, reason : parsing error description }\n  FRAG_DECRYPT_ERROR: 'fragDecryptError',\n  // Identifier for a fragment parsing error event - data: { id : demuxer Id, reason : parsing error description }\n  // will be renamed DEMUX_PARSING_ERROR and switched to MUX_ERROR in the next major release\n  FRAG_PARSING_ERROR: 'fragParsingError',\n  // Identifier for a remux alloc error event - data: { id : demuxer Id, frag : fragment object, bytes : nb of bytes on which allocation failed , reason : error text }\n  REMUX_ALLOC_ERROR : 'remuxAllocError',\n  // Identifier for decrypt key load error - data: { frag : fragment object, response : { code: error code, text: error text }}\n  KEY_LOAD_ERROR: 'keyLoadError',\n  // Identifier for decrypt key load timeout error - data: { frag : fragment object}\n  KEY_LOAD_TIMEOUT: 'keyLoadTimeOut',\n  // Triggered when an exception occurs while adding a sourceBuffer to MediaSource - data : {  err : exception , mimeType : mimeType }\n  BUFFER_ADD_CODEC_ERROR: 'bufferAddCodecError',\n  // Identifier for a buffer append error - data: append error description\n  BUFFER_APPEND_ERROR: 'bufferAppendError',\n  // Identifier for a buffer appending error event - data: appending error description\n  BUFFER_APPENDING_ERROR: 'bufferAppendingError',\n  // Identifier for a buffer stalled error event\n  BUFFER_STALLED_ERROR: 'bufferStalledError',\n  // Identifier for a buffer full event\n  BUFFER_FULL_ERROR: 'bufferFullError',\n  // Identifier for a buffer seek over hole event\n  BUFFER_SEEK_OVER_HOLE: 'bufferSeekOverHole',\n  // Identifier for a buffer nudge on stall (playback is stuck although currentTime is in a buffered area)\n  BUFFER_NUDGE_ON_STALL : 'bufferNudgeOnStall',\n  // Identifier for an internal exception happening inside hls.js while handling an event\n  INTERNAL_EXCEPTION: 'internalException'\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/errors.js"",""// A blank file used to build the \""light\"" configurations\n// This file replaces modules which we do not want to build\n// This replacement is done in the \""resolve\"" section of the webpack config\n\n\n\n// WEBPACK FOOTER //\n// ./src/empty.js"",""/**\n * ID3 parser\n */\n class ID3 {\n  /**\n   * Returns true if an ID3 header can be found at offset in data\n   * @param {Uint8Array} data - The data to search in\n   * @param {number} offset - The offset at which to start searching\n   * @return {boolean} - True if an ID3 header is found\n   */\n  static isHeader(data, offset) {\n    /*\n    * http://id3.org/id3v2.3.0\n    * [0]     = 'I'\n    * [1]     = 'D'\n    * [2]     = '3'\n    * [3,4]   = {Version}\n    * [5]     = {Flags}\n    * [6-9]   = {ID3 Size}\n    *\n    * An ID3v2 tag can be detected with the following pattern:\n    *  $49 44 33 yy yy xx zz zz zz zz\n    * Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80\n    */\n    if (offset + 10 <= data.length) {\n      //look for 'ID3' identifier\n      if (data[offset] === 0x49 && data[offset+1] === 0x44 && data[offset+2] === 0x33) {\n        //check version is within range\n        if (data[offset+3] < 0xFF && data[offset+4] < 0xFF) {\n          //check size is within range\n          if (data[offset+6] < 0x80 && data[offset+7] < 0x80 && data[offset+8] < 0x80 && data[offset+9] < 0x80) {\n            return true;\n          }\n        }\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Returns true if an ID3 footer can be found at offset in data\n   * @param {Uint8Array} data - The data to search in\n   * @param {number} offset - The offset at which to start searching\n   * @return {boolean} - True if an ID3 footer is found\n   */\n  static isFooter(data, offset) {\n    /*\n    * The footer is a copy of the header, but with a different identifier\n    */\n    if (offset + 10 <= data.length) {\n      //look for '3DI' identifier\n      if (data[offset] === 0x33 && data[offset+1] === 0x44 && data[offset+2] === 0x49) {\n        //check version is within range\n        if (data[offset+3] < 0xFF && data[offset+4] < 0xFF) {\n          //check size is within range\n          if (data[offset+6] < 0x80 && data[offset+7] < 0x80 && data[offset+8] < 0x80 && data[offset+9] < 0x80) {\n            return true;\n          }\n        }\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Returns any adjacent ID3 tags found in data starting at offset, as one block of data\n   * @param {Uint8Array} data - The data to search in\n   * @param {number} offset - The offset at which to start searching\n   * @return {Uint8Array} - The block of data containing any ID3 tags found\n   */\n  static getID3Data(data, offset) {\n    const front = offset;\n    let length = 0;\n\n    while (ID3.isHeader(data, offset)) {\n      //ID3 header is 10 bytes\n      length += 10;\n\n      const size = ID3._readSize(data, offset + 6);\n      length += size;\n\n      if (ID3.isFooter(data, offset + 10)) {\n        //ID3 footer is 10 bytes\n        length += 10;\n      }\n\n      offset += length;\n    }\n\n    if (length > 0) {\n      return data.subarray(front, front + length);\n    }\n\n    return undefined;\n  }\n\n  static _readSize(data, offset) {\n    let size = 0;\n    size  = ((data[offset]   & 0x7f) << 21);\n    size |= ((data[offset+1] & 0x7f) << 14);\n    size |= ((data[offset+2] & 0x7f) << 7);\n    size |=  (data[offset+3] & 0x7f);\n    return size;\n  }\n\n  /**\n   * Searches for the Elementary Stream timestamp found in the ID3 data chunk\n   * @param {Uint8Array} data - Block of data containing one or more ID3 tags\n   * @return {number} - The timestamp\n   */\n  static getTimeStamp(data) {\n    const frames = ID3.getID3Frames(data);\n    for(let i = 0; i < frames.length; i++) {\n      const frame = frames[i];\n      if (ID3.isTimeStampFrame(frame)) {\n        return ID3._readTimeStamp(frame);\n      }\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Returns true if the ID3 frame is an Elementary Stream timestamp frame\n   * @param {ID3 frame} frame\n   */\n  static isTimeStampFrame(frame) {\n    return (frame && frame.key === 'PRIV' && frame.info === 'com.apple.streaming.transportStreamTimestamp');\n  }\n\n  static _getFrameData(data) {\n    /*\n    Frame ID       $xx xx xx xx (four characters)\n    Size           $xx xx xx xx\n    Flags          $xx xx\n    */\n    const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n    const size = ID3._readSize(data, 4);\n\n    //skip frame id, size, and flags\n    let offset = 10;\n\n    return { type, size, data: data.subarray(offset, offset + size) };\n  }\n\n  /**\n   * Returns an array of ID3 frames found in all the ID3 tags in the id3Data\n   * @param {Uint8Array} id3Data - The ID3 data containing one or more ID3 tags\n   * @return {ID3 frame[]} - Array of ID3 frame objects\n   */\n  static getID3Frames(id3Data) {\n    let offset = 0;\n    const frames = [];\n\n    while (ID3.isHeader(id3Data, offset)) {\n      const size = ID3._readSize(id3Data, offset + 6);\n      //skip past ID3 header\n      offset += 10;\n      const end = offset + size;\n      //loop through frames in the ID3 tag\n      while (offset + 8 < end) {\n        const frameData = ID3._getFrameData(id3Data.subarray(offset));\n        const frame = ID3._decodeFrame(frameData);\n        if (frame) {\n          frames.push(frame);\n        }\n        //skip frame header and frame data\n        offset += frameData.size + 10;\n      }\n\n      if (ID3.isFooter(id3Data, offset)) {\n        offset += 10;\n      }\n    }\n\n    return frames;\n  }\n\n  static _decodeFrame(frame) {\n    if (frame.type === 'PRIV') {\n      return ID3._decodePrivFrame(frame);\n    } else if (frame.type[0] === 'T') {\n      return ID3._decodeTextFrame(frame);\n    } else if (frame.type[0] === 'W') {\n      return ID3._decodeURLFrame(frame);\n    }\n\n    return undefined;\n  }\n\n  static _readTimeStamp(timeStampFrame) {\n    if (timeStampFrame.data.byteLength === 8) {\n      const data = new Uint8Array(timeStampFrame.data);\n      // timestamp is 33 bit expressed as a big-endian eight-octet number,\n      // with the upper 31 bits set to zero.\n      const pts33Bit = data[3] & 0x1;\n      let timestamp = (data[4] << 23) +\n                      (data[5] << 15) +\n                      (data[6] <<  7) +\n                       data[7];\n      timestamp /= 45;\n\n      if (pts33Bit) {\n        timestamp += 47721858.84; // 2^32 / 90\n      }\n\n      return Math.round(timestamp);\n    }\n\n    return undefined;\n  }\n\n  static _decodePrivFrame(frame) {\n    /*\n    Format: <text string>\\0<binary data>\n    */\n    if (frame.size < 2) {\n      return undefined;\n    }\n\n    const owner = ID3._utf8ArrayToStr(frame.data);\n    const privateData = new Uint8Array(frame.data.subarray(owner.length + 1));\n\n    return { key: frame.type, info: owner, data: privateData.buffer };\n  }\n\n  static _decodeTextFrame(frame) {\n    if (frame.size < 2) {\n      return undefined;\n    }\n\n    if (frame.type === 'TXXX') {\n      /*\n      Format:\n      [0]   = {Text Encoding}\n      [1-?] = {Description}\\0{Value}\n      */\n      let index = 1;\n      const description = ID3._utf8ArrayToStr(frame.data.subarray(index));\n\n      index += description.length + 1;\n      const value = ID3._utf8ArrayToStr(frame.data.subarray(index));\n\n      return { key: frame.type, info: description, data: value };\n    } else {\n      /*\n      Format:\n      [0]   = {Text Encoding}\n      [1-?] = {Value}\n      */\n      const text = ID3._utf8ArrayToStr(frame.data.subarray(1));\n      return { key: frame.type, data: text };\n    }\n  }\n\n  static _decodeURLFrame(frame) {\n    if (frame.type === 'WXXX') {\n      /*\n      Format:\n      [0]   = {Text Encoding}\n      [1-?] = {Description}\\0{URL}\n      */\n      if (frame.size < 2) {\n        return undefined;\n      }\n\n      let index = 1;\n      const description = ID3._utf8ArrayToStr(frame.data.subarray(index));\n\n      index += description.length + 1;\n      const value = ID3._utf8ArrayToStr(frame.data.subarray(index));\n\n      return { key: frame.type, info: description, data: value };\n    } else {\n      /*\n      Format:\n      [0-?] = {URL}\n      */\n      const url = ID3._utf8ArrayToStr(frame.data);\n      return { key: frame.type, data: url };\n    }\n  }\n\n  // http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197\n  // http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n  /* utf.js - UTF-8 <=> UTF-16 convertion\n   *\n   * Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>\n   * Version: 1.0\n   * LastModified: Dec 25 1999\n   * This library is free.  You can redistribute it and/or modify it.\n   */\n  static _utf8ArrayToStr(array) {\n\n    let char2;\n    let char3;\n    let out = '';\n    let i = 0;\n    let length = array.length;\n\n    while (i < length) {\n      let c = array[i++];\n      switch (c >> 4) {\n        case 0:\n          return out;\n        case 1: case 2: case 3: case 4: case 5: case 6: case 7:\n          // 0xxxxxxx\n          out += String.fromCharCode(c);\n          break;\n        case 12: case 13:\n          // 110x xxxx   10xx xxxx\n          char2 = array[i++];\n          out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));\n          break;\n        case 14:\n          // 1110 xxxx  10xx xxxx  10xx xxxx\n          char2 = array[i++];\n          char3 = array[i++];\n          out += String.fromCharCode(((c & 0x0F) << 12) |\n            ((char2 & 0x3F) << 6) |\n            ((char3 & 0x3F) << 0));\n          break;\n      }\n    }\n\n    return out;\n  }\n}\n\nexport default ID3;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/id3.js"",""// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \""error\"" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \""newListener\""! Before\n  // adding it to the listeners, first emit \""newListener\"".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/events/events.js\n// module id = 5\n// module chunks = 0"",""// see https://tools.ietf.org/html/rfc1808\r\n\r\n/* jshint ignore:start */\r\n(function(root) { \r\n/* jshint ignore:end */\r\n\r\n  var URL_REGEX = /^((?:[^\\/;?#]+:)?)(\\/\\/[^\\/\\;?#]*)?(.*?)??(;.*?)?(\\?.*?)?(#.*?)?$/;\r\n  var FIRST_SEGMENT_REGEX = /^([^\\/;?#]*)(.*)$/;\r\n  var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\r\n  var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/).*?(?=\\/)/g;\r\n\r\n  var URLToolkit = { // jshint ignore:line\r\n    // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\r\n    // E.g\r\n    // With opts.alwaysNormalize = false (default, spec compliant)\r\n    // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\r\n    // With opts.alwaysNormalize = true (default, not spec compliant)\r\n    // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\r\n    buildAbsoluteURL: function(baseURL, relativeURL, opts) {\r\n      opts = opts || {};\r\n      // remove any remaining space and CRLF\r\n      baseURL = baseURL.trim();\r\n      relativeURL = relativeURL.trim();\r\n      if (!relativeURL) {\r\n        // 2a) If the embedded URL is entirely empty, it inherits the\r\n        // entire base URL (i.e., is set equal to the base URL)\r\n        // and we are done.\r\n        if (!opts.alwaysNormalize) {\r\n          return baseURL;\r\n        }\r\n        var basePartsForNormalise = this.parseURL(baseURL);\r\n        if (!baseParts) {\r\n          throw new Error('Error trying to parse base URL.');\r\n        }\r\n        basePartsForNormalise.path = URLToolkit.normalizePath(basePartsForNormalise.path);\r\n        return URLToolkit.buildURLFromParts(basePartsForNormalise);\r\n      }\r\n      var relativeParts = this.parseURL(relativeURL);\r\n      if (!relativeParts) {\r\n        throw new Error('Error trying to parse relative URL.');\r\n      }\r\n      if (relativeParts.scheme) {\r\n        // 2b) If the embedded URL starts with a scheme name, it is\r\n        // interpreted as an absolute URL and we are done.\r\n        if (!opts.alwaysNormalize) {\r\n          return relativeURL;\r\n        }\r\n        relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\r\n        return URLToolkit.buildURLFromParts(relativeParts);\r\n      }\r\n      var baseParts = this.parseURL(baseURL);\r\n      if (!baseParts) {\r\n        throw new Error('Error trying to parse base URL.');\r\n      }\r\n      if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') {\r\n        // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc\r\n        // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a'\r\n        var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\r\n        baseParts.netLoc = pathParts[1];\r\n        baseParts.path = pathParts[2];\r\n      }\r\n      if (baseParts.netLoc && !baseParts.path) {\r\n        baseParts.path = '/';\r\n      }\r\n      var builtParts = {\r\n        // 2c) Otherwise, the embedded URL inherits the scheme of\r\n        // the base URL.\r\n        scheme: baseParts.scheme,\r\n        netLoc: relativeParts.netLoc,\r\n        path: null,\r\n        params: relativeParts.params,\r\n        query: relativeParts.query,\r\n        fragment: relativeParts.fragment\r\n      };\r\n      if (!relativeParts.netLoc) {\r\n        // 3) If the embedded URL's <net_loc> is non-empty, we skip to\r\n        // Step 7.  Otherwise, the embedded URL inherits the <net_loc>\r\n        // (if any) of the base URL.\r\n        builtParts.netLoc = baseParts.netLoc;\r\n        // 4) If the embedded URL path is preceded by a slash \""/\"", the\r\n        // path is not relative and we skip to Step 7.\r\n        if (relativeParts.path[0] !== '/') {\r\n          if (!relativeParts.path) {\r\n            // 5) If the embedded URL path is empty (and not preceded by a\r\n            // slash), then the embedded URL inherits the base URL path\r\n            builtParts.path = baseParts.path;\r\n            // 5a) if the embedded URL's <params> is non-empty, we skip to\r\n            // step 7; otherwise, it inherits the <params> of the base\r\n            // URL (if any) and\r\n            if (!relativeParts.params) {\r\n              builtParts.params = baseParts.params;\r\n              // 5b) if the embedded URL's <query> is non-empty, we skip to\r\n              // step 7; otherwise, it inherits the <query> of the base\r\n              // URL (if any) and we skip to step 7.\r\n              if (!relativeParts.query) {\r\n                builtParts.query = baseParts.query;\r\n              }\r\n            }\r\n          } else {\r\n            // 6) The last segment of the base URL's path (anything\r\n            // following the rightmost slash \""/\"", or the entire path if no\r\n            // slash is present) is removed and the embedded URL's path is\r\n            // appended in its place.\r\n            var baseURLPath = baseParts.path;\r\n            var newPath = baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) + relativeParts.path;\r\n            builtParts.path = URLToolkit.normalizePath(newPath);\r\n          }\r\n        }\r\n      }\r\n      if (builtParts.path === null) {\r\n        builtParts.path = opts.alwaysNormalize ? URLToolkit.normalizePath(relativeParts.path) : relativeParts.path;\r\n      }\r\n      return URLToolkit.buildURLFromParts(builtParts);\r\n    },\r\n    parseURL: function(url) {\r\n      var parts = URL_REGEX.exec(url);\r\n      if (!parts) {\r\n        return null;\r\n      }\r\n      return {\r\n        scheme: parts[1] || '',\r\n        netLoc: parts[2] || '',\r\n        path: parts[3] || '',\r\n        params: parts[4] || '',\r\n        query: parts[5] || '',\r\n        fragment: parts[6] || ''\r\n      };\r\n    },\r\n    normalizePath: function(path) {\r\n      // The following operations are\r\n      // then applied, in order, to the new path:\r\n      // 6a) All occurrences of \""./\"", where \"".\"" is a complete path\r\n      // segment, are removed.\r\n      // 6b) If the path ends with \"".\"" as a complete path segment,\r\n      // that \"".\"" is removed.\r\n      path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, '');\r\n      // 6c) All occurrences of \""<segment>/../\"", where <segment> is a\r\n      // complete path segment not equal to \""..\"", are removed.\r\n      // Removal of these path segments is performed iteratively,\r\n      // removing the leftmost matching pattern on each iteration,\r\n      // until no matching pattern remains.\r\n      // 6d) If the path ends with \""<segment>/..\"", where <segment> is a\r\n      // complete path segment not equal to \""..\"", that\r\n      // \""<segment>/..\"" is removed.\r\n      while (path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length) {} // jshint ignore:line\r\n      return path.split('').reverse().join('');\r\n    },\r\n    buildURLFromParts: function(parts) {\r\n      return parts.scheme + parts.netLoc + parts.path + parts.params + parts.query + parts.fragment;\r\n    }\r\n  };\r\n\r\n/* jshint ignore:start */\r\n  if(typeof exports === 'object' && typeof module === 'object')\r\n    module.exports = URLToolkit;\r\n  else if(typeof define === 'function' && define.amd)\r\n    define([], function() { return URLToolkit; });\r\n  else if(typeof exports === 'object')\r\n    exports[\""URLToolkit\""] = URLToolkit;\r\n  else\r\n    root[\""URLToolkit\""] = URLToolkit;\r\n})(this);\r\n/* jshint ignore:end */\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/url-toolkit/src/url-toolkit.js\n// module id = 6\n// module chunks = 0"",""export default class AESCrypto {\n  constructor(subtle,iv) {\n    this.subtle = subtle;\n    this.aesIV = iv;\n  }\n\n  decrypt(data, key) {\n    return this.subtle.decrypt({name: 'AES-CBC', iv: this.aesIV}, key, data);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/crypt/aes-crypto.js"",""class FastAESKey {\n  constructor(subtle,key) {\n    this.subtle = subtle;\n    this.key = key;\n  }\n\n  expandKey() {\n    return this.subtle.importKey('raw', this.key, {name: 'AES-CBC'}, false, ['encrypt', 'decrypt']);\n  }\n}\n\nexport default FastAESKey;\n\n\n\n// WEBPACK FOOTER //\n// ./src/crypt/fast-aes-key.js"",""class AESDecryptor {\n  constructor() {\n    // Static after running initTable\n    this.rcon = [0x0, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n    this.subMix = [new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)];\n    this.invSubMix = [new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)];\n    this.sBox = new Uint32Array(256);\n    this.invSBox = new Uint32Array(256);\n\n    // Changes during runtime\n    this.key = new Uint32Array(0);\n\n    this.initTable();\n  }\n\n  // Using view.getUint32() also swaps the byte order.\n  uint8ArrayToUint32Array_(arrayBuffer) {\n    let view = new DataView(arrayBuffer);\n    let newArray = new Uint32Array(4);\n    for (let i = 0; i < 4; i++) {\n      newArray[i] = view.getUint32(i * 4);\n    }\n    return newArray;\n  }\n\n  initTable() {\n    let sBox = this.sBox;\n    let invSBox = this.invSBox;\n    let subMix = this.subMix;\n    let subMix0 = subMix[0];\n    let subMix1 = subMix[1];\n    let subMix2 = subMix[2];\n    let subMix3 = subMix[3];\n    let invSubMix  = this.invSubMix;\n    let invSubMix0 = invSubMix[0];\n    let invSubMix1 = invSubMix[1];\n    let invSubMix2 = invSubMix[2];\n    let invSubMix3 = invSubMix[3];\n\n    let d = new Uint32Array(256);\n    let x = 0;\n    let xi = 0;\n    let i = 0;\n    for (i = 0; i < 256; i++) {\n      if (i < 128) {\n        d[i] = i << 1;\n      } else {\n        d[i] = (i << 1) ^ 0x11b;\n      }\n    }\n\n    for (i = 0; i < 256; i++) {\n      let sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n      sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n      sBox[x] = sx;\n      invSBox[sx] = x;\n\n      // Compute multiplication\n      let x2 = d[x];\n      let x4 = d[x2];\n      let x8 = d[x4];\n\n      // Compute sub/invSub bytes, mix columns tables\n      let t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n      subMix0[x] = (t << 24) | (t >>> 8);\n      subMix1[x] = (t << 16) | (t >>> 16);\n      subMix2[x] = (t << 8) | (t >>> 24);\n      subMix3[x] = t;\n\n      // Compute inv sub bytes, inv mix columns tables\n      t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n      invSubMix0[sx] = (t << 24) | (t >>> 8);\n      invSubMix1[sx] = (t << 16) | (t >>> 16);\n      invSubMix2[sx] = (t << 8) | (t >>> 24);\n      invSubMix3[sx] = t;\n\n      // Compute next counter\n      if (!x) {\n        x = xi = 1;\n      } else {\n        x = x2 ^ d[d[d[x8 ^ x2]]];\n        xi ^= d[d[xi]];\n      }\n    }\n  }\n\n  expandKey(keyBuffer) {\n    // convert keyBuffer to Uint32Array\n    let key = this.uint8ArrayToUint32Array_(keyBuffer);\n    let sameKey = true;\n    let offset = 0;\n\n    while (offset < key.length && sameKey) {\n      sameKey = (key[offset] === this.key[offset]);\n      offset++;\n    }\n\n    if (sameKey) {\n      return;\n    }\n\n    this.key = key;\n    let keySize = this.keySize = key.length;\n\n    if (keySize !== 4 && keySize !== 6 && keySize !== 8) {\n      throw new Error('Invalid aes key size=' + keySize);\n    }\n\n    let ksRows = this.ksRows = (keySize + 6 + 1) * 4;\n    let ksRow;\n    let invKsRow;\n\n    let keySchedule = this.keySchedule = new Uint32Array(ksRows);\n    let invKeySchedule = this.invKeySchedule = new Uint32Array(ksRows);\n    let sbox = this.sBox;\n    let rcon = this.rcon;\n\n    let invSubMix  = this.invSubMix;\n    let invSubMix0 = invSubMix[0];\n    let invSubMix1 = invSubMix[1];\n    let invSubMix2 = invSubMix[2];\n    let invSubMix3 = invSubMix[3];\n\n    let prev;\n    let t;\n\n    for (ksRow = 0; ksRow < ksRows; ksRow++) {\n      if (ksRow < keySize) {\n        prev = keySchedule[ksRow] = key[ksRow];\n        continue;\n      }\n      t = prev;\n\n      if (ksRow % keySize === 0) {\n        // Rot word\n        t = (t << 8) | (t >>> 24);\n\n        // Sub word\n        t = (sbox[t >>> 24] << 24) | (sbox[(t >>> 16) & 0xff] << 16) | (sbox[(t >>> 8) & 0xff] << 8) | sbox[t & 0xff];\n\n        // Mix Rcon\n        t ^= rcon[(ksRow / keySize) | 0] << 24;\n      } else if (keySize > 6 && ksRow % keySize === 4)  {\n        // Sub word\n        t = (sbox[t >>> 24] << 24) | (sbox[(t >>> 16) & 0xff] << 16) | (sbox[(t >>> 8) & 0xff] << 8) | sbox[t & 0xff];\n      }\n\n      keySchedule[ksRow] = prev = (keySchedule[ksRow - keySize] ^ t) >>> 0;\n    }\n\n    for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n      ksRow = ksRows - invKsRow;\n      if (invKsRow & 3) {\n        t = keySchedule[ksRow];\n      } else {\n        t = keySchedule[ksRow - 4];\n      }\n\n      if (invKsRow < 4 || ksRow <= 4) {\n        invKeySchedule[invKsRow] = t;\n      } else {\n        invKeySchedule[invKsRow] = invSubMix0[sbox[t >>> 24]] ^ invSubMix1[sbox[(t >>> 16) & 0xff]] ^ invSubMix2[sbox[(t >>> 8) & 0xff]] ^ invSubMix3[sbox[t & 0xff]];\n      }\n\n      invKeySchedule[invKsRow] = invKeySchedule[invKsRow] >>> 0;\n    }\n  }\n\n  // Adding this as a method greatly improves performance.\n  networkToHostOrderSwap(word) {\n    return (word << 24) | ((word & 0xff00) << 8) | ((word & 0xff0000) >> 8) | (word >>> 24);\n  }\n\n  decrypt(inputArrayBuffer, offset, aesIV) {\n    let nRounds = this.keySize + 6;\n    let invKeySchedule = this.invKeySchedule;\n    let invSBOX = this.invSBox;\n\n    let invSubMix  = this.invSubMix;\n    let invSubMix0 = invSubMix[0];\n    let invSubMix1 = invSubMix[1];\n    let invSubMix2 = invSubMix[2];\n    let invSubMix3 = invSubMix[3];\n\n    let initVector = this.uint8ArrayToUint32Array_(aesIV);\n    let initVector0 = initVector[0];\n    let initVector1 = initVector[1];\n    let initVector2 = initVector[2];\n    let initVector3 = initVector[3];\n\n    let inputInt32 = new Int32Array(inputArrayBuffer);\n    let outputInt32 = new Int32Array(inputInt32.length);\n\n    let t0, t1, t2, t3;\n    let s0, s1, s2, s3;\n    let inputWords0, inputWords1, inputWords2, inputWords3;\n\n    var ksRow, i;\n    let swapWord = this.networkToHostOrderSwap;\n\n    while (offset < inputInt32.length) {\n      inputWords0 = swapWord(inputInt32[offset]);\n      inputWords1 = swapWord(inputInt32[offset + 1]);\n      inputWords2 = swapWord(inputInt32[offset + 2]);\n      inputWords3 = swapWord(inputInt32[offset + 3]);\n\n      s0 = inputWords0 ^ invKeySchedule[0];\n      s1 = inputWords3 ^ invKeySchedule[1];\n      s2 = inputWords2 ^ invKeySchedule[2];\n      s3 = inputWords1 ^ invKeySchedule[3];\n\n      ksRow = 4;\n\n      // Iterate through the rounds of decryption\n      for (i = 1; i < nRounds; i++) {\n        t0 = invSubMix0[s0 >>> 24] ^ invSubMix1[(s1 >> 16) & 0xff] ^ invSubMix2[(s2 >> 8) & 0xff] ^ invSubMix3[s3 & 0xff] ^ invKeySchedule[ksRow];\n        t1 = invSubMix0[s1 >>> 24] ^ invSubMix1[(s2 >> 16) & 0xff] ^ invSubMix2[(s3 >> 8) & 0xff] ^ invSubMix3[s0 & 0xff] ^ invKeySchedule[ksRow + 1];\n        t2 = invSubMix0[s2 >>> 24] ^ invSubMix1[(s3 >> 16) & 0xff] ^ invSubMix2[(s0 >> 8) & 0xff] ^ invSubMix3[s1 & 0xff] ^ invKeySchedule[ksRow + 2];\n        t3 = invSubMix0[s3 >>> 24] ^ invSubMix1[(s0 >> 16) & 0xff] ^ invSubMix2[(s1 >> 8) & 0xff] ^ invSubMix3[s2 & 0xff] ^ invKeySchedule[ksRow + 3];\n        // Update state\n        s0 = t0;\n        s1 = t1;\n        s2 = t2;\n        s3 = t3;\n\n        ksRow = ksRow + 4;\n      }\n\n      // Shift rows, sub bytes, add round key\n      t0 = ((invSBOX[s0 >>> 24] << 24) ^ (invSBOX[(s1 >> 16) & 0xff] << 16) ^ (invSBOX[(s2 >> 8) & 0xff] << 8) ^ invSBOX[s3 & 0xff]) ^ invKeySchedule[ksRow];\n      t1 = ((invSBOX[s1 >>> 24] << 24) ^ (invSBOX[(s2 >> 16) & 0xff] << 16) ^ (invSBOX[(s3 >> 8) & 0xff] << 8) ^ invSBOX[s0 & 0xff]) ^ invKeySchedule[ksRow + 1];\n      t2 = ((invSBOX[s2 >>> 24] << 24) ^ (invSBOX[(s3 >> 16) & 0xff] << 16) ^ (invSBOX[(s0 >> 8) & 0xff] << 8) ^ invSBOX[s1 & 0xff]) ^ invKeySchedule[ksRow + 2];\n      t3 = ((invSBOX[s3 >>> 24] << 24) ^ (invSBOX[(s0 >> 16) & 0xff] << 16) ^ (invSBOX[(s1 >> 8) & 0xff] << 8) ^ invSBOX[s2 & 0xff]) ^ invKeySchedule[ksRow + 3];\n      ksRow = ksRow + 3;\n\n      // Write\n      outputInt32[offset] = swapWord(t0 ^ initVector0);\n      outputInt32[offset + 1] = swapWord(t3 ^ initVector1);\n      outputInt32[offset + 2] = swapWord(t2 ^ initVector2);\n      outputInt32[offset + 3] = swapWord(t1 ^ initVector3);\n\n      // reset initVector to last 4 unsigned int\n      initVector0 = inputWords0;\n      initVector1 = inputWords1;\n      initVector2 = inputWords2;\n      initVector3 = inputWords3;\n\n      offset = offset + 4;\n    }\n\n    return outputInt32.buffer;\n  }\n\n  destroy() {\n    this.key = undefined;\n    this.keySize = undefined;\n    this.ksRows = undefined;\n\n    this.sBox = undefined;\n    this.invSBox = undefined;\n    this.subMix = undefined;\n    this.invSubMix = undefined;\n    this.keySchedule = undefined;\n    this.invKeySchedule = undefined;\n\n    this.rcon = undefined;\n  }\n}\n\nexport default AESDecryptor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/crypt/aes-decryptor.js"",""import AESCrypto from './aes-crypto';\nimport FastAESKey from './fast-aes-key';\nimport AESDecryptor from './aes-decryptor';\n\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport {logger} from '../utils/logger';\n\n/*globals self: false */\n\nclass Decrypter {\n  constructor(observer,config) {\n    this.observer = observer;\n    this.config = config;\n    this.logEnabled = true;\n    try {\n      const browserCrypto = crypto ? crypto : self.crypto;\n      this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n    } catch (e) {}\n    this.disableWebCrypto = !this.subtle;\n  }\n\n  isSync() {\n    return (this.disableWebCrypto && this.config.enableSoftwareAES);\n  }\n\n  decrypt(data, key, iv, callback) {\n    if (this.disableWebCrypto && this.config.enableSoftwareAES) {\n      if (this.logEnabled) {\n        logger.log('JS AES decrypt');\n        this.logEnabled = false;\n      }\n      let decryptor = this.decryptor;\n      if (!decryptor) {\n        this.decryptor = decryptor = new AESDecryptor();\n      }\n      decryptor.expandKey(key);\n      callback(decryptor.decrypt(data, 0, iv));\n    }\n    else {\n      if (this.logEnabled) {\n        logger.log('WebCrypto AES decrypt');\n        this.logEnabled = false;\n      }\n      const subtle = this.subtle;\n      if (this.key !== key) {\n        this.key = key;\n        this.fastAesKey = new FastAESKey(subtle,key);\n      }\n\n      this.fastAesKey.expandKey().\n        then((aesKey) => {\n          // decrypt using web crypto\n          let crypto = new AESCrypto(subtle,iv);\n          crypto.decrypt(data, aesKey).\n          catch ((err) => {\n            this.onWebCryptoError(err, data, key, iv, callback);\n          }).\n          then((result) => {\n            callback(result);\n          });\n        }).\n        catch ((err) => {\n          this.onWebCryptoError(err, data, key, iv, callback);\n        });\n    }\n  }\n\n  onWebCryptoError(err, data, key, iv, callback) {\n    if (this.config.enableSoftwareAES) {\n      logger.log('WebCrypto Error, disable WebCrypto API');\n      this.disableWebCrypto = true;\n      this.logEnabled = true;\n      this.decrypt(data, key, iv, callback);\n    }\n    else {\n      logger.error(`decrypting error : ${err.message}`);\n      this.observer.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details : ErrorDetails.FRAG_DECRYPT_ERROR, fatal : true, reason : err.message});\n    }\n  }\n\n  destroy() {\n    let decryptor = this.decryptor;\n    if (decryptor) {\n      decryptor.destroy();\n      this.decryptor = undefined;\n    }\n  }\n}\n\nexport default Decrypter;\n\n\n\n// WEBPACK FOOTER //\n// ./src/crypt/decrypter.js"",""/**\n *  ADTS parser helper\n */\nimport { logger } from '../utils/logger';\nimport { ErrorTypes, ErrorDetails } from '../errors';\n\nexport function getAudioConfig(observer, data, offset, audioCodec) {\n  var adtsObjectType, // :int\n    adtsSampleingIndex, // :int\n    adtsExtensionSampleingIndex, // :int\n    adtsChanelConfig, // :int\n    config,\n    userAgent = navigator.userAgent.toLowerCase(),\n    manifestCodec = audioCodec,\n    adtsSampleingRates = [\n      96000, 88200,\n      64000, 48000,\n      44100, 32000,\n      24000, 22050,\n      16000, 12000,\n      11025, 8000,\n      7350];\n  // byte 2\n  adtsObjectType = ((data[offset + 2] & 0xC0) >>> 6) + 1;\n  adtsSampleingIndex = ((data[offset + 2] & 0x3C) >>> 2);\n  if (adtsSampleingIndex > adtsSampleingRates.length - 1) {\n    observer.trigger(Event.ERROR, { type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: true, reason: `invalid ADTS sampling index:${adtsSampleingIndex}` });\n    return;\n  }\n  adtsChanelConfig = ((data[offset + 2] & 0x01) << 2);\n  // byte 3\n  adtsChanelConfig |= ((data[offset + 3] & 0xC0) >>> 6);\n  logger.log(`manifest codec:${audioCodec},ADTS data:type:${adtsObjectType},sampleingIndex:${adtsSampleingIndex}[${adtsSampleingRates[adtsSampleingIndex]}Hz],channelConfig:${adtsChanelConfig}`);\n  // firefox: freq less than 24kHz = AAC SBR (HE-AAC)\n  if (/firefox/i.test(userAgent)) {\n    if (adtsSampleingIndex >= 6) {\n      adtsObjectType = 5;\n      config = new Array(4);\n      // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n      // there is a factor 2 between frame sample rate and output sample rate\n      // multiply frequency by 2 (see table below, equivalent to substract 3)\n      adtsExtensionSampleingIndex = adtsSampleingIndex - 3;\n    } else {\n      adtsObjectType = 2;\n      config = new Array(2);\n      adtsExtensionSampleingIndex = adtsSampleingIndex;\n    }\n    // Android : always use AAC\n  } else if (userAgent.indexOf('android') !== -1) {\n    adtsObjectType = 2;\n    config = new Array(2);\n    adtsExtensionSampleingIndex = adtsSampleingIndex;\n  } else {\n    /*  for other browsers (Chrome/Vivaldi/Opera ...)\n        always force audio type to be HE-AAC SBR, as some browsers do not support audio codec switch properly (like Chrome ...)\n    */\n    adtsObjectType = 5;\n    config = new Array(4);\n    // if (manifest codec is HE-AAC or HE-AACv2) OR (manifest codec not specified AND frequency less than 24kHz)\n    if ((audioCodec && ((audioCodec.indexOf('mp4a.40.29') !== -1) ||\n      (audioCodec.indexOf('mp4a.40.5') !== -1))) ||\n      (!audioCodec && adtsSampleingIndex >= 6)) {\n      // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n      // there is a factor 2 between frame sample rate and output sample rate\n      // multiply frequency by 2 (see table below, equivalent to substract 3)\n      adtsExtensionSampleingIndex = adtsSampleingIndex - 3;\n    } else {\n      // if (manifest codec is AAC) AND (frequency less than 24kHz AND nb channel is 1) OR (manifest codec not specified and mono audio)\n      // Chrome fails to play back with low frequency AAC LC mono when initialized with HE-AAC.  This is not a problem with stereo.\n      if (audioCodec && audioCodec.indexOf('mp4a.40.2') !== -1 && ((adtsSampleingIndex >= 6 && adtsChanelConfig === 1) ||\n            /vivaldi/i.test(userAgent)) ||\n        (!audioCodec && adtsChanelConfig === 1)) {\n        adtsObjectType = 2;\n        config = new Array(2);\n      }\n      adtsExtensionSampleingIndex = adtsSampleingIndex;\n    }\n  }\n  /* refer to http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config\n      ISO 14496-3 (AAC).pdf - Table 1.13 — Syntax of AudioSpecificConfig()\n    Audio Profile / Audio Object Type\n    0: Null\n    1: AAC Main\n    2: AAC LC (Low Complexity)\n    3: AAC SSR (Scalable Sample Rate)\n    4: AAC LTP (Long Term Prediction)\n    5: SBR (Spectral Band Replication)\n    6: AAC Scalable\n   sampling freq\n    0: 96000 Hz\n    1: 88200 Hz\n    2: 64000 Hz\n    3: 48000 Hz\n    4: 44100 Hz\n    5: 32000 Hz\n    6: 24000 Hz\n    7: 22050 Hz\n    8: 16000 Hz\n    9: 12000 Hz\n    10: 11025 Hz\n    11: 8000 Hz\n    12: 7350 Hz\n    13: Reserved\n    14: Reserved\n    15: frequency is written explictly\n    Channel Configurations\n    These are the channel configurations:\n    0: Defined in AOT Specifc Config\n    1: 1 channel: front-center\n    2: 2 channels: front-left, front-right\n  */\n  // audioObjectType = profile => profile, the MPEG-4 Audio Object Type minus 1\n  config[0] = adtsObjectType << 3;\n  // samplingFrequencyIndex\n  config[0] |= (adtsSampleingIndex & 0x0E) >> 1;\n  config[1] |= (adtsSampleingIndex & 0x01) << 7;\n  // channelConfiguration\n  config[1] |= adtsChanelConfig << 3;\n  if (adtsObjectType === 5) {\n    // adtsExtensionSampleingIndex\n    config[1] |= (adtsExtensionSampleingIndex & 0x0E) >> 1;\n    config[2] = (adtsExtensionSampleingIndex & 0x01) << 7;\n    // adtsObjectType (force to 2, chrome is checking that object type is less than 5 ???\n    //    https://chromium.googlesource.com/chromium/src.git/+/master/media/formats/mp4/aac.cc\n    config[2] |= 2 << 2;\n    config[3] = 0;\n  }\n  return { config: config, samplerate: adtsSampleingRates[adtsSampleingIndex], channelCount: adtsChanelConfig, codec: ('mp4a.40.' + adtsObjectType), manifestCodec: manifestCodec };\n}\n\nexport function isHeaderPattern(data, offset) {\n  return data[offset] === 0xff && (data[offset + 1] & 0xf6) === 0xf0;\n}\n\nexport function getHeaderLength(data, offset) {\n  return (!!(data[offset + 1] & 0x01) ? 7 : 9);\n}\n\nexport function getFullFrameLength(data, offset) {\n  return ((data[offset + 3] & 0x03) << 11) |\n    (data[offset + 4] << 3) |\n    ((data[offset + 5] & 0xE0) >>> 5);\n}\n\nexport function isHeader(data, offset) {\n  // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n  // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n  // More info https://wiki.multimedia.cx/index.php?title=ADTS\n  if (offset + 1 < data.length && isHeaderPattern(data, offset)) {\n    return true;\n  }\n  return false;\n}\n\nexport function probe(data, offset) {\n  // same as isHeader but we also check that ADTS frame follows last ADTS frame\n  // or end of data is reached\n  if (offset + 1 < data.length && isHeaderPattern(data, offset)) {\n    // ADTS header Length\n    let headerLength = getHeaderLength(data, offset);\n    // ADTS frame Length\n    let frameLength = headerLength;\n    if (offset + 5 < data.length) {\n      frameLength = getFullFrameLength(data, offset);\n    }\n    let newOffset = offset + frameLength;\n    if (newOffset === data.length || (newOffset + 1 < data.length && isHeaderPattern(data, newOffset))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function initTrackConfig(track, observer, data, offset, audioCodec) {\n  if (!track.samplerate) {\n    var config = getAudioConfig(observer, data, offset, audioCodec);\n    track.config = config.config;\n    track.samplerate = config.samplerate;\n    track.channelCount = config.channelCount;\n    track.codec = config.codec;\n    track.manifestCodec = config.manifestCodec;\n    logger.log(`parsed codec:${track.codec},rate:${config.samplerate},nb channel:${config.channelCount}`);\n  }\n}\n\nexport function getFrameDuration(samplerate) {\n  return 1024 * 90000 / samplerate;\n}\n\nexport function parseFrameHeader(data, offset, pts, frameIndex, frameDuration) {\n  var headerLength, frameLength, stamp;\n  var length = data.length;\n\n  // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n  headerLength = getHeaderLength(data, offset);\n  // retrieve frame size\n  frameLength = getFullFrameLength(data, offset);\n  frameLength -= headerLength;\n\n  if ((frameLength > 0) && ((offset + headerLength + frameLength) <= length)) {\n    stamp = pts + frameIndex * frameDuration;\n    //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n    return { headerLength, frameLength, stamp };\n  }\n\n  return undefined;\n}\n\nexport function appendFrame(track, data, offset, pts, frameIndex) {\n  var frameDuration = getFrameDuration(track.samplerate);\n  var header = parseFrameHeader(data, offset, pts, frameIndex, frameDuration);\n  if (header) {\n    var stamp = header.stamp;\n    var headerLength = header.headerLength;\n    var frameLength = header.frameLength;\n\n    //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n    var aacSample = {\n      unit: data.subarray(offset + headerLength, offset + headerLength + frameLength),\n      pts: stamp,\n      dts: stamp\n    };\n\n    track.samples.push(aacSample);\n    track.len += frameLength;\n\n    return {sample: aacSample, length: frameLength + headerLength};\n  }\n\n  return undefined;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/adts.js"",""/**\n * AAC demuxer\n */\nimport * as ADTS from './adts';\nimport { logger } from '../utils/logger';\nimport ID3 from '../demux/id3';\n\nclass AACDemuxer {\n\n  constructor(observer, remuxer, config) {\n    this.observer = observer;\n    this.config = config;\n    this.remuxer = remuxer;\n  }\n\n  resetInitSegment(initSegment, audioCodec, videoCodec, duration) {\n    this._audioTrack = { container: 'audio/adts', type: 'audio', id: 0, sequenceNumber: 0, isAAC: true, samples: [], len: 0, manifestCodec: audioCodec, duration: duration, inputTimeScale: 90000 };\n  }\n\n  resetTimeStamp() {\n  }\n\n  static probe(data) {\n    // check if data contains ID3 timestamp and ADTS sync word\n    var offset, length;\n    let id3Data = ID3.getID3Data(data, 0);\n    if (id3Data && ID3.getTimeStamp(id3Data) !== undefined) {\n      // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n      // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n      // More info https://wiki.multimedia.cx/index.php?title=ADTS\n      for (offset = id3Data.length, length = Math.min(data.length - 1, offset + 100); offset < length; offset++) {\n        if (ADTS.probe(data, offset)) {\n          logger.log('ADTS sync word found !');\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  // feed incoming data to the front of the parsing pipeline\n  append(data, timeOffset, contiguous, accurateTimeOffset) {\n    var track = this._audioTrack,\n      id3Data = ID3.getID3Data(data, 0),\n      pts = 90 * ID3.getTimeStamp(id3Data),\n      frameIndex = 0,\n      stamp = pts,\n      length = data.length,\n      offset = id3Data.length;\n\n    let id3Samples = [{ pts: stamp, dts: stamp, data: id3Data }];\n\n    while (offset < length - 1) {\n      if (ADTS.isHeader(data, offset) && (offset + 5) < length) {\n        ADTS.initTrackConfig(track, this.observer, data, offset, track.manifestCodec);\n        var frame = ADTS.appendFrame(track, data, offset, pts, frameIndex);\n        if (frame) {\n          offset += frame.length;\n          stamp = frame.sample.pts;\n          frameIndex++;\n        } else {\n          logger.log('Unable to parse AAC frame');\n          break;\n        }\n      } else if (ID3.isHeader(data, offset)) {\n        id3Data = ID3.getID3Data(data, offset);\n        id3Samples.push({ pts: stamp, dts: stamp, data: id3Data });\n        offset += id3Data.length;\n      } else {\n        //nothing found, keep looking\n        offset++;\n      }\n    }\n\n    this.remuxer.remux(track,\n      { samples: [] },\n      { samples: id3Samples, inputTimeScale: 90000 },\n      { samples: [] },\n      timeOffset,\n      contiguous,\n      accurateTimeOffset);\n  }\n\n  destroy() {\n  }\n\n}\n\nexport default AACDemuxer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/aacdemuxer.js"",""/**\n * MP4 demuxer\n */\n//import {logger} from '../utils/logger';\nimport Event from '../events';\n\nconst UINT32_MAX = Math.pow(2, 32) - 1;\n\n class MP4Demuxer {\n\n  constructor(observer, remuxer) {\n    this.observer = observer;\n    this.remuxer = remuxer;\n  }\n\n  resetTimeStamp(initPTS) {\n    this.initPTS = initPTS;\n  }\n\n  resetInitSegment(initSegment,audioCodec,videoCodec, duration) {\n    //jshint unused:false\n    if (initSegment && initSegment.byteLength) {\n      const initData = this.initData = MP4Demuxer.parseInitSegment(initSegment);\n      var tracks = {};\n      if(initData.audio && initData.video) {\n        tracks.audiovideo = { container : 'video/mp4', codec : audioCodec + ',' + videoCodec, initSegment : duration ? initSegment : null };\n      } else {\n        if (initData.audio) {\n          tracks.audio = { container : 'audio/mp4', codec : audioCodec, initSegment : duration ? initSegment : null };\n        }\n        if (initData.video) {\n          tracks.video = { container : 'video/mp4', codec : videoCodec, initSegment : duration ? initSegment : null };\n        }\n      }\n      this.observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT,{ tracks : tracks });\n    } else {\n      if (audioCodec) {\n        this.audioCodec = audioCodec;\n      }\n      if (videoCodec) {\n        this.videoCodec = videoCodec;\n      }\n    }\n  }\n\n  static probe(data) {\n    if (data.length >= 8) {\n      const dataType = MP4Demuxer.bin2str(data.subarray(4,8));\n      return (['moof','ftyp','styp'].indexOf(dataType) >= 0);\n    }\n    return false;\n  }\n\n\n  static bin2str(buffer) {\n    return String.fromCharCode.apply(null, buffer);\n  }\n\n  static readUint32(buffer, offset) {\n    if (buffer.data) {\n      offset += buffer.start;\n      buffer = buffer.data;\n    }\n\n    const val = buffer[offset] << 24 |\n                buffer[offset + 1] << 16 |\n                buffer[offset + 2] << 8 |\n                buffer[offset + 3];\n    return val < 0 ? 4294967296 + val : val;\n  }\n\n  static writeUint32(buffer, offset, value) {\n    if (buffer.data) {\n      offset += buffer.start;\n      buffer = buffer.data;\n    }\n    buffer[offset] = value >> 24;\n    buffer[offset+1] = (value >> 16) & 0xff;\n    buffer[offset+2] = (value >> 8) & 0xff;\n    buffer[offset+3] = value & 0xff;\n  }\n\n\n  // Find the data for a box specified by its path\n  static findBox(data,path) {\n    var results = [],\n        i, size, type, end, subresults, start, endbox;\n\n    if (data.data) {\n      start = data.start;\n      end = data.end;\n      data = data.data;\n    } else {\n      start = 0;\n      end = data.byteLength;\n    }\n\n    if (!path.length) {\n      // short-circuit the search for empty paths\n      return null;\n    }\n\n    for (i = start; i < end;) {\n      size = MP4Demuxer.readUint32(data, i);\n      type = MP4Demuxer.bin2str(data.subarray(i + 4, i + 8));\n      endbox = size > 1 ? i + size : end;\n\n      if (type === path[0]) {\n\n        if (path.length === 1) {\n          // this is the end of the path and we've found the box we were\n          // looking for\n          results.push({ data : data, start : i + 8, end : endbox});\n        } else {\n          // recursively search for the next box along the path\n          subresults = MP4Demuxer.findBox({ data : data, start : i +8, end : endbox }, path.slice(1));\n          if (subresults.length) {\n            results = results.concat(subresults);\n          }\n        }\n      }\n      i = endbox;\n    }\n\n    // we've finished searching all of data\n    return results;\n  }\n\n\n\n/**\n * Parses an MP4 initialization segment and extracts stream type and\n * timescale values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * moov > trak > mdia > hdlr\n * ```\n * @param init {Uint8Array} the bytes of the init segment\n * @return {object} a hash of track type to timescale values or null if\n * the init segment is malformed.\n */\n  static parseInitSegment(initSegment) {\n    var result = [];\n    var traks = MP4Demuxer.findBox(initSegment, ['moov', 'trak']);\n\n    traks.forEach(trak => {\n      const tkhd = MP4Demuxer.findBox(trak, ['tkhd'])[0];\n      if (tkhd) {\n        let version = tkhd.data[tkhd.start];\n        let index = version === 0 ? 12 : 20;\n        let trackId = MP4Demuxer.readUint32(tkhd, index);\n\n        const mdhd = MP4Demuxer.findBox(trak, ['mdia', 'mdhd'])[0];\n        if (mdhd) {\n          version = mdhd.data[mdhd.start];\n          index = version === 0 ? 12 : 20;\n          const timescale = MP4Demuxer.readUint32(mdhd, index);\n\n          const hdlr = MP4Demuxer.findBox(trak, ['mdia', 'hdlr'])[0];\n          if (hdlr) {\n            const hdlrType = MP4Demuxer.bin2str(hdlr.data.subarray(hdlr.start+8, hdlr.start+12));\n            let type = { 'soun' : 'audio', 'vide' : 'video'}[hdlrType];\n            if (type) {\n              result[trackId] = { timescale : timescale , type : type};\n              result[type] = { timescale : timescale , id : trackId};\n            }\n          }\n        }\n      }\n    });\n    return result;\n  }\n\n\n/**\n * Determine the base media decode start time, in seconds, for an MP4\n * fragment. If multiple fragments are specified, the earliest time is\n * returned.\n *\n * The base media decode time can be parsed from track fragment\n * metadata:\n * ```\n * moof > traf > tfdt.baseMediaDecodeTime\n * ```\n * It requires the timescale value from the mdhd to interpret.\n *\n * @param timescale {object} a hash of track ids to timescale values.\n * @return {number} the earliest base media decode start time for the\n * fragment, in seconds\n */\nstatic getStartDTS(initData, fragment) {\n  var trafs, baseTimes, result;\n\n  // we need info from two childrend of each track fragment box\n  trafs = MP4Demuxer.findBox(fragment, ['moof', 'traf']);\n\n  // determine the start times for each track\n  baseTimes = [].concat.apply([], trafs.map(function(traf) {\n    return MP4Demuxer.findBox(traf, ['tfhd']).map(function(tfhd) {\n      var id, scale, baseTime;\n\n      // get the track id from the tfhd\n      id = MP4Demuxer.readUint32(tfhd, 4);\n      // assume a 90kHz clock if no timescale was specified\n      scale = initData[id].timescale || 90e3;\n\n      // get the base media decode time from the tfdt\n      baseTime = MP4Demuxer.findBox(traf, ['tfdt']).map(function(tfdt) {\n        var version, result;\n\n        version = tfdt.data[tfdt.start];\n        result = MP4Demuxer.readUint32(tfdt, 4);\n        if (version ===  1) {\n          result *= Math.pow(2, 32);\n\n          result += MP4Demuxer.readUint32(tfdt, 8);\n        }\n        return result;\n      })[0];\n      // convert base time to seconds\n      return baseTime / scale;\n    });\n  }));\n\n  // return the minimum\n  result = Math.min.apply(null, baseTimes);\n  return isFinite(result) ? result : 0;\n}\n\n\n\n\nstatic offsetStartDTS(initData,fragment,timeOffset) {\n  MP4Demuxer.findBox(fragment, ['moof', 'traf']).map(function(traf) {\n    return MP4Demuxer.findBox(traf, ['tfhd']).map(function(tfhd) {\n      // get the track id from the tfhd\n      var id = MP4Demuxer.readUint32(tfhd, 4);\n      // assume a 90kHz clock if no timescale was specified\n      var timescale = initData[id].timescale || 90e3;\n\n      // get the base media decode time from the tfdt\n      MP4Demuxer.findBox(traf, ['tfdt']).map(function(tfdt) {\n        var version = tfdt.data[tfdt.start];\n        var baseMediaDecodeTime = MP4Demuxer.readUint32(tfdt, 4);\n        if (version === 0) {\n          MP4Demuxer.writeUint32(tfdt, 4, baseMediaDecodeTime - timeOffset*timescale);\n        } else {\n          baseMediaDecodeTime *= Math.pow(2, 32);\n          baseMediaDecodeTime += MP4Demuxer.readUint32(tfdt, 8);\n          baseMediaDecodeTime -= timeOffset*timescale;\n          baseMediaDecodeTime = Math.max(baseMediaDecodeTime,0);\n          const upper = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1));\n          const lower = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n          MP4Demuxer.writeUint32(tfdt, 4, upper);\n          MP4Demuxer.writeUint32(tfdt, 8, lower);\n        }\n      });\n    });\n  });\n}\n\n  // feed incoming data to the front of the parsing pipeline\n  append(data, timeOffset,contiguous,accurateTimeOffset) {\n    let initData = this.initData;\n    if(!initData) {\n      this.resetInitSegment(data,this.audioCodec,this.videoCodec);\n      initData = this.initData;\n    }\n    let startDTS, initPTS = this.initPTS;\n    if (initPTS === undefined) {\n      let startDTS = MP4Demuxer.getStartDTS(initData,data);\n      this.initPTS = initPTS = startDTS - timeOffset;\n      this.observer.trigger(Event.INIT_PTS_FOUND, { initPTS: initPTS});\n    }\n    MP4Demuxer.offsetStartDTS(initData,data,initPTS);\n    startDTS = MP4Demuxer.getStartDTS(initData,data);\n    this.remuxer.remux(initData.audio, initData.video, null, null, startDTS, contiguous,accurateTimeOffset,data);\n  }\n\n  destroy() {\n  }\n\n}\n\nexport default MP4Demuxer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/mp4demuxer.js"",""/**\n *  MPEG parser helper\n */\n\nconst MpegAudio = {\n\n    BitratesMap: [\n        32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,\n        32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,\n        32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,\n        32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,\n        8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],\n\n    SamplingRateMap: [44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000],\n\n    appendFrame: function (track, data, offset, pts, frameIndex) {\n        // Using http://www.datavoyage.com/mpgscript/mpeghdr.htm as a reference\n        if (offset + 24 > data.length) {\n            return undefined;\n        }\n\n        var header = this.parseHeader(data, offset);\n        if (header && offset + header.frameLength <= data.length) {\n            var frameDuration = 1152 * 90000 / header.sampleRate;\n            var stamp = pts + frameIndex * frameDuration;\n            var sample = { unit: data.subarray(offset, offset + header.frameLength), pts: stamp, dts: stamp };\n\n            track.config = [];\n            track.channelCount = header.channelCount;\n            track.samplerate = header.sampleRate;\n            track.samples.push(sample);\n            track.len += header.frameLength;\n\n            return { sample, length: header.frameLength };\n        }\n\n        return undefined;\n    },\n\n    parseHeader: function (data, offset) {\n        var headerB = (data[offset + 1] >> 3) & 3;\n        var headerC = (data[offset + 1] >> 1) & 3;\n        var headerE = (data[offset + 2] >> 4) & 15;\n        var headerF = (data[offset + 2] >> 2) & 3;\n        var headerG = !!(data[offset + 2] & 2);\n        if (headerB !== 1 && headerE !== 0 && headerE !== 15 && headerF !== 3) {\n            var columnInBitrates = headerB === 3 ? (3 - headerC) : (headerC === 3 ? 3 : 4);\n            var bitRate = MpegAudio.BitratesMap[columnInBitrates * 14 + headerE - 1] * 1000;\n            var columnInSampleRates = headerB === 3 ? 0 : headerB === 2 ? 1 : 2;\n            var sampleRate = MpegAudio.SamplingRateMap[columnInSampleRates * 3 + headerF];\n            var padding = headerG ? 1 : 0;\n            var channelCount = data[offset + 3] >> 6 === 3 ? 1 : 2; // If bits of channel mode are `11` then it is a single channel (Mono)\n            var frameLength = headerC === 3 ?\n                ((headerB === 3 ? 12 : 6) * bitRate / sampleRate + padding) << 2 :\n                ((headerB === 3 ? 144 : 72) * bitRate / sampleRate + padding) | 0;\n\n            return { sampleRate, channelCount, frameLength };\n        }\n\n        return undefined;\n    },\n\n    isHeaderPattern: function (data, offset) {\n        return data[offset] === 0xff && (data[offset + 1] & 0xe0) === 0xe0 && (data[offset + 1] & 0x06) !== 0x00;\n    },\n\n    isHeader: function (data, offset) {\n        // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n        // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n        // More info http://www.mp3-tech.org/programmer/frame_header.html\n        if (offset + 1 < data.length && this.isHeaderPattern(data, offset)) {\n            return true;\n        }\n        return false;\n    },\n\n    probe: function (data, offset) {\n        // same as isHeader but we also check that MPEG frame follows last MPEG frame\n        // or end of data is reached\n        if (offset + 1 < data.length && this.isHeaderPattern(data, offset)) {\n            // MPEG header Length\n            let headerLength = 4;\n            // MPEG frame Length\n            let header = this.parseHeader(data, offset);\n            let frameLength = headerLength;\n            if (header && header.frameLength) {\n                frameLength = header.frameLength;\n            }\n            let newOffset = offset + frameLength;\n            if (newOffset === data.length || (newOffset + 1 < data.length && this.isHeaderPattern(data, newOffset))) {\n                return true;\n            }\n        }\n        return false;\n    }\n};\n\nexport default MpegAudio;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/mpegaudio.js"",""/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.\n*/\n\nimport {logger} from '../utils/logger';\n\nclass ExpGolomb {\n\n  constructor(data) {\n    this.data = data;\n    // the number of bytes left to examine in this.data\n    this.bytesAvailable = data.byteLength;\n    // the current word being examined\n    this.word = 0; // :uint\n    // the number of bits left to examine in the current word\n    this.bitsAvailable = 0; // :uint\n  }\n\n  // ():void\n  loadWord() {\n    var\n      data = this.data,\n      bytesAvailable = this.bytesAvailable,\n      position = data.byteLength - bytesAvailable,\n      workingBytes = new Uint8Array(4),\n      availableBytes = Math.min(4, bytesAvailable);\n    if (availableBytes === 0) {\n      throw new Error('no bytes available');\n    }\n    workingBytes.set(data.subarray(position, position + availableBytes));\n    this.word = new DataView(workingBytes.buffer).getUint32(0);\n    // track the amount of this.data that has been processed\n    this.bitsAvailable = availableBytes * 8;\n    this.bytesAvailable -= availableBytes;\n  }\n\n  // (count:int):void\n  skipBits(count) {\n    var skipBytes; // :int\n    if (this.bitsAvailable > count) {\n      this.word <<= count;\n      this.bitsAvailable -= count;\n    } else {\n      count -= this.bitsAvailable;\n      skipBytes = count >> 3;\n      count -= (skipBytes >> 3);\n      this.bytesAvailable -= skipBytes;\n      this.loadWord();\n      this.word <<= count;\n      this.bitsAvailable -= count;\n    }\n  }\n\n  // (size:int):uint\n  readBits(size) {\n    var\n      bits = Math.min(this.bitsAvailable, size), // :uint\n      valu = this.word >>> (32 - bits); // :uint\n    if (size > 32) {\n      logger.error('Cannot read more than 32 bits at a time');\n    }\n    this.bitsAvailable -= bits;\n    if (this.bitsAvailable > 0) {\n      this.word <<= bits;\n    } else if (this.bytesAvailable > 0) {\n      this.loadWord();\n    }\n    bits = size - bits;\n    if (bits > 0 && this.bitsAvailable) {\n      return valu << bits | this.readBits(bits);\n    } else {\n      return valu;\n    }\n  }\n\n  // ():uint\n  skipLZ() {\n    var leadingZeroCount; // :uint\n    for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n      if (0 !== (this.word & (0x80000000 >>> leadingZeroCount))) {\n        // the first bit of working word is 1\n        this.word <<= leadingZeroCount;\n        this.bitsAvailable -= leadingZeroCount;\n        return leadingZeroCount;\n      }\n    }\n    // we exhausted word and still have not found a 1\n    this.loadWord();\n    return leadingZeroCount + this.skipLZ();\n  }\n\n  // ():void\n  skipUEG() {\n    this.skipBits(1 + this.skipLZ());\n  }\n\n  // ():void\n  skipEG() {\n    this.skipBits(1 + this.skipLZ());\n  }\n\n  // ():uint\n  readUEG() {\n    var clz = this.skipLZ(); // :uint\n    return this.readBits(clz + 1) - 1;\n  }\n\n  // ():int\n  readEG() {\n    var valu = this.readUEG(); // :int\n    if (0x01 & valu) {\n      // the number is odd if the low order bit is set\n      return (1 + valu) >>> 1; // add 1 to make it even, and divide by 2\n    } else {\n      return -1 * (valu >>> 1); // divide by two then make it negative\n    }\n  }\n\n  // Some convenience functions\n  // :Boolean\n  readBoolean() {\n    return 1 === this.readBits(1);\n  }\n\n  // ():int\n  readUByte() {\n    return this.readBits(8);\n  }\n\n  // ():int\n  readUShort() {\n    return this.readBits(16);\n  }\n    // ():int\n  readUInt() {\n    return this.readBits(32);\n  }\n\n  /**\n   * Advance the ExpGolomb decoder past a scaling list. The scaling\n   * list is optionally transmitted as part of a sequence parameter\n   * set and is not relevant to transmuxing.\n   * @param count {number} the number of entries in this scaling list\n   * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n   */\n  skipScalingList(count) {\n    var\n      lastScale = 8,\n      nextScale = 8,\n      j,\n      deltaScale;\n    for (j = 0; j < count; j++) {\n      if (nextScale !== 0) {\n        deltaScale = this.readEG();\n        nextScale = (lastScale + deltaScale + 256) % 256;\n      }\n      lastScale = (nextScale === 0) ? lastScale : nextScale;\n    }\n  }\n\n  /**\n   * Read a sequence parameter set and return some interesting video\n   * properties. A sequence parameter set is the H264 metadata that\n   * describes the properties of upcoming video frames.\n   * @param data {Uint8Array} the bytes of a sequence parameter set\n   * @return {object} an object with configuration parsed from the\n   * sequence parameter set, including the dimensions of the\n   * associated video frames.\n   */\n  readSPS() {\n    var\n      frameCropLeftOffset = 0,\n      frameCropRightOffset = 0,\n      frameCropTopOffset = 0,\n      frameCropBottomOffset = 0,\n      profileIdc,profileCompat,levelIdc,\n      numRefFramesInPicOrderCntCycle, picWidthInMbsMinus1,\n      picHeightInMapUnitsMinus1,\n      frameMbsOnlyFlag,\n      scalingListCount,\n      i,\n      readUByte = this.readUByte.bind(this),\n      readBits = this.readBits.bind(this),\n      readUEG = this.readUEG.bind(this),\n      readBoolean = this.readBoolean.bind(this),\n      skipBits = this.skipBits.bind(this),\n      skipEG = this.skipEG.bind(this),\n      skipUEG = this.skipUEG.bind(this),\n      skipScalingList = this.skipScalingList.bind(this);\n\n    readUByte();\n    profileIdc = readUByte(); // profile_idc\n    profileCompat = readBits(5); // constraint_set[0-4]_flag, u(5)\n    skipBits(3); // reserved_zero_3bits u(3),\n    levelIdc = readUByte(); //level_idc u(8)\n    skipUEG(); // seq_parameter_set_id\n    // some profiles have more optional data we don't need\n    if (profileIdc === 100 ||\n        profileIdc === 110 ||\n        profileIdc === 122 ||\n        profileIdc === 244 ||\n        profileIdc === 44  ||\n        profileIdc === 83  ||\n        profileIdc === 86  ||\n        profileIdc === 118 ||\n        profileIdc === 128) {\n      var chromaFormatIdc = readUEG();\n      if (chromaFormatIdc === 3) {\n        skipBits(1); // separate_colour_plane_flag\n      }\n      skipUEG(); // bit_depth_luma_minus8\n      skipUEG(); // bit_depth_chroma_minus8\n      skipBits(1); // qpprime_y_zero_transform_bypass_flag\n      if (readBoolean()) { // seq_scaling_matrix_present_flag\n        scalingListCount = (chromaFormatIdc !== 3) ? 8 : 12;\n        for (i = 0; i < scalingListCount; i++) {\n          if (readBoolean()) { // seq_scaling_list_present_flag[ i ]\n            if (i < 6) {\n              skipScalingList(16);\n            } else {\n              skipScalingList(64);\n            }\n          }\n        }\n      }\n    }\n    skipUEG(); // log2_max_frame_num_minus4\n    var picOrderCntType = readUEG();\n    if (picOrderCntType === 0) {\n      readUEG(); //log2_max_pic_order_cnt_lsb_minus4\n    } else if (picOrderCntType === 1) {\n      skipBits(1); // delta_pic_order_always_zero_flag\n      skipEG(); // offset_for_non_ref_pic\n      skipEG(); // offset_for_top_to_bottom_field\n      numRefFramesInPicOrderCntCycle = readUEG();\n      for(i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n        skipEG(); // offset_for_ref_frame[ i ]\n      }\n    }\n    skipUEG(); // max_num_ref_frames\n    skipBits(1); // gaps_in_frame_num_value_allowed_flag\n    picWidthInMbsMinus1 = readUEG();\n    picHeightInMapUnitsMinus1 = readUEG();\n    frameMbsOnlyFlag = readBits(1);\n    if (frameMbsOnlyFlag === 0) {\n      skipBits(1); // mb_adaptive_frame_field_flag\n    }\n    skipBits(1); // direct_8x8_inference_flag\n    if (readBoolean()) { // frame_cropping_flag\n      frameCropLeftOffset = readUEG();\n      frameCropRightOffset = readUEG();\n      frameCropTopOffset = readUEG();\n      frameCropBottomOffset = readUEG();\n    }\n    let pixelRatio = [1,1];\n    if (readBoolean()) {\n      // vui_parameters_present_flag\n      if (readBoolean()) {\n        // aspect_ratio_info_present_flag\n        const aspectRatioIdc = readUByte();\n        switch (aspectRatioIdc) {\n          case 1: pixelRatio = [1,1]; break;\n          case 2: pixelRatio = [12,11]; break;\n          case 3: pixelRatio = [10,11]; break;\n          case 4: pixelRatio = [16,11]; break;\n          case 5: pixelRatio = [40,33]; break;\n          case 6: pixelRatio = [24,11]; break;\n          case 7: pixelRatio = [20,11]; break;\n          case 8: pixelRatio = [32,11]; break;\n          case 9: pixelRatio = [80,33]; break;\n          case 10: pixelRatio = [18,11]; break;\n          case 11: pixelRatio = [15,11]; break;\n          case 12: pixelRatio = [64,33]; break;\n          case 13: pixelRatio = [160,99]; break;\n          case 14: pixelRatio = [4,3]; break;\n          case 15: pixelRatio = [3,2]; break;\n          case 16: pixelRatio = [2,1]; break;\n          case 255: {\n            pixelRatio = [readUByte() << 8 | readUByte(), readUByte() << 8 | readUByte()];\n            break;\n          }\n        }\n      }\n    }\n    return {\n      width: Math.ceil((((picWidthInMbsMinus1 + 1) * 16) - frameCropLeftOffset * 2 - frameCropRightOffset * 2)),\n      height: ((2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16) - ((frameMbsOnlyFlag? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset)),\n      pixelRatio : pixelRatio\n    };\n  }\n\n  readSliceType() {\n    // skip NALu type\n    this.readUByte();\n    // discard first_mb_in_slice\n    this.readUEG();\n    // return slice_type\n    return this.readUEG();\n  }\n}\n\nexport default ExpGolomb;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/exp-golomb.js"",""/**\n * SAMPLE-AES decrypter\n*/\n\n import Decrypter from '../crypt/decrypter';\n\n class SampleAesDecrypter {\n\n  constructor(observer, config, decryptdata, discardEPB) {\n    this.decryptdata = decryptdata;\n    this.discardEPB = discardEPB;\n    this.decrypter = new Decrypter(observer, config);\n  }\n\n  decryptBuffer(encryptedData, callback) {\n    this.decrypter.decrypt(encryptedData, this.decryptdata.key.buffer, this.decryptdata.iv.buffer, callback);\n  }\n\n  // AAC - encrypt all full 16 bytes blocks starting from offset 16\n  decryptAacSample(samples, sampleIndex, callback, sync) {\n    let curUnit = samples[sampleIndex].unit;\n    let encryptedData = curUnit.subarray(16, curUnit.length - curUnit.length % 16);\n    let encryptedBuffer = encryptedData.buffer.slice(\n       encryptedData.byteOffset,\n       encryptedData.byteOffset + encryptedData.length);\n\n    let localthis = this;\n    this.decryptBuffer(encryptedBuffer, function (decryptedData) {\n      decryptedData = new Uint8Array(decryptedData);\n      curUnit.set(decryptedData, 16);\n\n      if (!sync) {\n        localthis.decryptAacSamples(samples, sampleIndex + 1, callback);\n      }\n    });\n  }\n\n  decryptAacSamples(samples, sampleIndex, callback) {\n    for (;; sampleIndex++) {\n      if (sampleIndex >= samples.length) {\n        callback();\n        return;\n      }\n\n      if (samples[sampleIndex].unit.length < 32) {\n        continue;\n      }\n\n      let sync = this.decrypter.isSync();\n\n      this.decryptAacSample(samples, sampleIndex, callback, sync);\n\n      if (!sync) {\n        return;\n      }\n    }\n  }\n\n  // AVC - encrypt one 16 bytes block out of ten, starting from offset 32\n  getAvcEncryptedData(decodedData) {\n    let encryptedDataLen = Math.floor((decodedData.length - 48) / 160) * 16 + 16;\n    let encryptedData = new Int8Array(encryptedDataLen);\n    let outputPos = 0;\n    for (let inputPos = 32; inputPos <= decodedData.length - 16; inputPos += 160, outputPos += 16) {\n      encryptedData.set(decodedData.subarray(inputPos, inputPos + 16), outputPos);\n    }\n    return encryptedData;\n  }\n\n  getAvcDecryptedUnit(decodedData, decryptedData) {\n    decryptedData = new Uint8Array(decryptedData);\n    let inputPos = 0;\n    for (let outputPos = 32; outputPos <= decodedData.length - 16; outputPos += 160, inputPos += 16) {\n      decodedData.set(decryptedData.subarray(inputPos, inputPos + 16), outputPos);\n    }\n    return decodedData;\n  }\n\n  decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit, sync) {\n    let decodedData = this.discardEPB(curUnit.data);\n    let encryptedData = this.getAvcEncryptedData(decodedData);\n    let localthis = this;\n\n    this.decryptBuffer(encryptedData.buffer, function (decryptedData) {\n      curUnit.data = localthis.getAvcDecryptedUnit(decodedData, decryptedData);\n\n      if (!sync) {\n        localthis.decryptAvcSamples(samples, sampleIndex, unitIndex + 1, callback);\n      }\n    });\n  }\n\n  decryptAvcSamples(samples, sampleIndex, unitIndex, callback) {\n    for (;; sampleIndex++, unitIndex = 0) {\n      if (sampleIndex >= samples.length) {\n        callback();\n        return;\n      }\n\n      let curUnits = samples[sampleIndex].units;\n      for (;; unitIndex++) {\n        if (unitIndex >= curUnits.length) {\n          break;\n        }\n\n        let curUnit = curUnits[unitIndex];\n        if (curUnit.length <= 48 || (curUnit.type !== 1 && curUnit.type !== 5)) {\n          continue;\n        }\n\n        let sync = this.decrypter.isSync();\n\n        this.decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit, sync);\n\n        if (!sync) {\n          return;\n        }\n      }\n    }\n  }\n }\n\n export default SampleAesDecrypter;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/sample-aes.js"",""/**\n * highly optimized TS demuxer:\n * parse PAT, PMT\n * extract PES packet from audio and video PIDs\n * extract AVC/H264 NAL units and AAC/ADTS samples from PES packet\n * trigger the remuxer upon parsing completion\n * it also tries to workaround as best as it can audio codec switch (HE-AAC to AAC and vice versa), without having to restart the MediaSource.\n * it also controls the remuxing process :\n * upon discontinuity or level switch detection, it will also notifies the remuxer so that it can reset its state.\n*/\n\n import * as ADTS from './adts';\n import MpegAudio from './mpegaudio';\n import Event from '../events';\n import ExpGolomb from './exp-golomb';\n import SampleAesDecrypter from './sample-aes';\n// import Hex from '../utils/hex';\n import {logger} from '../utils/logger';\n import {ErrorTypes, ErrorDetails} from '../errors';\n\n class TSDemuxer {\n\n  constructor(observer, remuxer, config, typeSupported) {\n    this.observer = observer;\n    this.config = config;\n    this.typeSupported = typeSupported;\n    this.remuxer = remuxer;\n    this.sampleAes = null;\n  }\n\n  setDecryptData(decryptdata) {\n    if ((decryptdata != null) && (decryptdata.key != null) && (decryptdata.method === 'SAMPLE-AES')) {\n      this.sampleAes = new SampleAesDecrypter(this.observer, this.config, decryptdata, this.discardEPB);\n    } else {\n      this.sampleAes = null;\n    }\n  }\n\n  static probe(data) {\n    // a TS fragment should contain at least 3 TS packets, a PAT, a PMT, and one PID, each starting with 0x47\n    if (data.length >= 3*188 && data[0] === 0x47 && data[188] === 0x47 && data[2*188] === 0x47) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  resetInitSegment(initSegment,audioCodec,videoCodec, duration) {\n    this.pmtParsed = false;\n    this._pmtId = -1;\n    this._avcTrack = {container : 'video/mp2t', type: 'video', id :-1, inputTimeScale : 90000, sequenceNumber: 0, samples : [], len : 0, dropped : 0};\n    this._audioTrack = {container : 'video/mp2t', type: 'audio', id :-1, inputTimeScale : 90000, duration: duration, sequenceNumber: 0, samples : [], len : 0, isAAC: true};\n    this._id3Track = {type: 'id3', id :-1, inputTimeScale : 90000, sequenceNumber: 0, samples : [], len : 0};\n    this._txtTrack = {type: 'text', id: -1, inputTimeScale : 90000, sequenceNumber: 0, samples : [], len : 0};\n    // flush any partial content\n    this.aacOverFlow = null;\n    this.aacLastPTS = null;\n    this.avcSample = null;\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this._duration = duration;\n  }\n\n  resetTimeStamp() {\n  }\n\n  // feed incoming data to the front of the parsing pipeline\n  append(data, timeOffset, contiguous,accurateTimeOffset) {\n    var start, len = data.length, stt, pid, atf, offset,pes,\n        unknownPIDs = false;\n    this.contiguous = contiguous;\n    var pmtParsed = this.pmtParsed,\n        avcTrack = this._avcTrack,\n        audioTrack = this._audioTrack,\n        id3Track = this._id3Track,\n        avcId = avcTrack.id,\n        audioId = audioTrack.id,\n        id3Id = id3Track.id,\n        pmtId = this._pmtId,\n        avcData = avcTrack.pesData,\n        audioData = audioTrack.pesData,\n        id3Data = id3Track.pesData,\n        parsePAT = this._parsePAT,\n        parsePMT = this._parsePMT,\n        parsePES = this._parsePES,\n        parseAVCPES = this._parseAVCPES.bind(this),\n        parseAACPES = this._parseAACPES.bind(this),\n        parseMPEGPES = this._parseMPEGPES.bind(this),\n        parseID3PES  = this._parseID3PES.bind(this);\n\n    // don't parse last TS packet if incomplete\n    len -= len % 188;\n    // loop through TS packets\n    for (start = 0; start < len; start += 188) {\n      if (data[start] === 0x47) {\n        stt = !!(data[start + 1] & 0x40);\n        // pid is a 13-bit field starting at the last bit of TS[1]\n        pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2];\n        atf = (data[start + 3] & 0x30) >> 4;\n        // if an adaption field is present, its length is specified by the fifth byte of the TS packet header.\n        if (atf > 1) {\n          offset = start + 5 + data[start + 4];\n          // continue if there is only adaptation field\n          if (offset === (start + 188)) {\n            continue;\n          }\n        } else {\n          offset = start + 4;\n        }\n        switch(pid) {\n          case avcId:\n            if (stt) {\n              if (avcData && (pes = parsePES(avcData))) {\n                parseAVCPES(pes,false);\n              }\n              avcData = {data: [], size: 0};\n            }\n            if (avcData) {\n              avcData.data.push(data.subarray(offset, start + 188));\n              avcData.size += start + 188 - offset;\n            }\n            break;\n          case audioId:\n            if (stt) {\n              if (audioData && (pes = parsePES(audioData))) {\n                if (audioTrack.isAAC) {\n                  parseAACPES(pes);\n                } else {\n                  parseMPEGPES(pes);\n                }\n              }\n              audioData = {data: [], size: 0};\n            }\n            if (audioData) {\n              audioData.data.push(data.subarray(offset, start + 188));\n              audioData.size += start + 188 - offset;\n            }\n            break;\n          case id3Id:\n            if (stt) {\n              if (id3Data && (pes = parsePES(id3Data))) {\n                parseID3PES(pes);\n              }\n              id3Data = {data: [], size: 0};\n            }\n            if (id3Data) {\n              id3Data.data.push(data.subarray(offset, start + 188));\n              id3Data.size += start + 188 - offset;\n            }\n            break;\n          case 0:\n            if (stt) {\n              offset += data[offset] + 1;\n            }\n            pmtId = this._pmtId = parsePAT(data, offset);\n            break;\n          case pmtId:\n            if (stt) {\n              offset += data[offset] + 1;\n            }\n            let parsedPIDs = parsePMT(data, offset, this.typeSupported.mpeg === true || this.typeSupported.mp3 === true, this.sampleAes != null);\n\n            // only update track id if track PID found while parsing PMT\n            // this is to avoid resetting the PID to -1 in case\n            // track PID transiently disappears from the stream\n            // this could happen in case of transient missing audio samples for example\n            avcId = parsedPIDs.avc;\n            if (avcId > 0) {\n              avcTrack.id = avcId;\n            }\n            audioId = parsedPIDs.audio;\n            if (audioId > 0) {\n              audioTrack.id = audioId;\n              audioTrack.isAAC = parsedPIDs.isAAC;\n            }\n            id3Id = parsedPIDs.id3;\n            if (id3Id > 0) {\n              id3Track.id = id3Id;\n            }\n            if (unknownPIDs && !pmtParsed) {\n              logger.log('reparse from beginning');\n              unknownPIDs = false;\n              // we set it to -188, the += 188 in the for loop will reset start to 0\n              start = -188;\n            }\n            pmtParsed = this.pmtParsed = true;\n            break;\n          case 17:\n          case 0x1fff:\n            break;\n          default:\n            unknownPIDs = true;\n            break;\n        }\n      } else {\n        this.observer.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'TS packet did not start with 0x47'});\n      }\n    }\n    // try to parse last PES packets\n    if (avcData && (pes = parsePES(avcData))) {\n      parseAVCPES(pes,true);\n      avcTrack.pesData = null;\n    } else {\n      // either avcData null or PES truncated, keep it for next frag parsing\n      avcTrack.pesData = avcData;\n    }\n\n    if (audioData && (pes = parsePES(audioData))) {\n      if (audioTrack.isAAC) {\n        parseAACPES(pes);\n      } else {\n        parseMPEGPES(pes);\n      }\n      audioTrack.pesData = null;\n    } else {\n      if (audioData && audioData.size) {\n        logger.log('last AAC PES packet truncated,might overlap between fragments');\n      }\n     // either audioData null or PES truncated, keep it for next frag parsing\n      audioTrack.pesData = audioData;\n    }\n\n    if (id3Data && (pes = parsePES(id3Data))) {\n      parseID3PES(pes);\n      id3Track.pesData = null;\n    } else {\n      // either id3Data null or PES truncated, keep it for next frag parsing\n      id3Track.pesData = id3Data;\n    }\n\n    if (this.sampleAes == null) {\n      this.remuxer.remux(audioTrack, avcTrack, id3Track, this._txtTrack, timeOffset, contiguous, accurateTimeOffset);\n    } else {\n      this.decryptAndRemux(audioTrack, avcTrack, id3Track, this._txtTrack, timeOffset, contiguous, accurateTimeOffset);\n    }\n  }\n\n  decryptAndRemux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset) {\n    if (audioTrack.samples && audioTrack.isAAC) {\n      let localthis = this;\n      this.sampleAes.decryptAacSamples(audioTrack.samples, 0, function() {\n        localthis.decryptAndRemuxAvc(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset);\n      });\n    } else {\n      this.decryptAndRemuxAvc(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset);\n    }\n  }\n\n  decryptAndRemuxAvc(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset) {\n    if (videoTrack.samples) {\n      let localthis = this;\n      this.sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, function () {\n        localthis.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset);\n      });\n    } else {\n      this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset);\n    }\n  }\n\n  destroy() {\n    this._initPTS = this._initDTS = undefined;\n    this._duration = 0;\n  }\n\n  _parsePAT(data, offset) {\n    // skip the PSI header and parse the first PMT entry\n    return (data[offset + 10] & 0x1F) << 8 | data[offset + 11];\n    //logger.log('PMT PID:'  + this._pmtId);\n  }\n\n  _parsePMT(data, offset, mpegSupported, isSampleAes) {\n    var sectionLength, tableEnd, programInfoLength, pid, result = { audio : -1, avc : -1, id3 : -1, isAAC : true};\n    sectionLength = (data[offset + 1] & 0x0f) << 8 | data[offset + 2];\n    tableEnd = offset + 3 + sectionLength - 4;\n    // to determine where the table is, we have to figure out how\n    // long the program info descriptors are\n    programInfoLength = (data[offset + 10] & 0x0f) << 8 | data[offset + 11];\n    // advance the offset to the first entry in the mapping table\n    offset += 12 + programInfoLength;\n    while (offset < tableEnd) {\n      pid = (data[offset + 1] & 0x1F) << 8 | data[offset + 2];\n      switch(data[offset]) {\n        case 0xcf:     // SAMPLE-AES AAC\n          if (!isSampleAes) {\n            logger.log('unkown stream type:'  + data[offset]);\n            break;\n          }\n          /* falls through */\n\n        // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n        case 0x0f:\n          //logger.log('AAC PID:'  + pid);\n          if (result.audio === -1) {\n            result.audio = pid;\n          }\n          break;\n\n        // Packetized metadata (ID3)\n        case 0x15:\n          //logger.log('ID3 PID:'  + pid);\n          if (result.id3 === -1) {\n            result.id3 = pid;\n          }\n          break;\n\n        case 0xdb:     // SAMPLE-AES AVC\n          if (!isSampleAes) {\n            logger.log('unkown stream type:'  + data[offset]);\n            break;\n          }\n          /* falls through */\n\n        // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n        case 0x1b:\n          //logger.log('AVC PID:'  + pid);\n          if (result.avc === -1) {\n            result.avc = pid;\n          }\n          break;\n\n        // ISO/IEC 11172-3 (MPEG-1 audio)\n        // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n        case 0x03:\n        case 0x04:\n          //logger.log('MPEG PID:'  + pid);\n          if (!mpegSupported) {\n            logger.log('MPEG audio found, not supported in this browser for now');\n          } else if (result.audio === -1) {\n            result.audio = pid;\n            result.isAAC = false;\n          }\n          break;\n\n        case 0x24:\n          logger.warn('HEVC stream type found, not supported for now');\n          break;\n\n        default:\n          logger.log('unkown stream type:'  + data[offset]);\n          break;\n      }\n      // move to the next table entry\n      // skip past the elementary stream descriptors, if present\n      offset += ((data[offset + 3] & 0x0F) << 8 | data[offset + 4]) + 5;\n    }\n    return result;\n  }\n\n  _parsePES(stream) {\n    var i = 0, frag, pesFlags, pesPrefix, pesLen, pesHdrLen, pesData, pesPts, pesDts, payloadStartOffset, data = stream.data;\n    // safety check\n    if (!stream || stream.size === 0) {\n      return null;\n    }\n\n    // we might need up to 19 bytes to read PES header\n    // if first chunk of data is less than 19 bytes, let's merge it with following ones until we get 19 bytes\n    // usually only one merge is needed (and this is rare ...)\n    while(data[0].length < 19 && data.length > 1) {\n      let newData = new Uint8Array(data[0].length + data[1].length);\n      newData.set(data[0]);\n      newData.set(data[1], data[0].length);\n      data[0] = newData;\n      data.splice(1,1);\n    }\n    //retrieve PTS/DTS from first fragment\n    frag = data[0];\n    pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n    if (pesPrefix === 1) {\n      pesLen = (frag[4] << 8) + frag[5];\n      // if PES parsed length is not zero and greater than total received length, stop parsing. PES might be truncated\n      // minus 6 : PES header size\n      if (pesLen && pesLen > stream.size - 6) {\n        return null;\n      }\n      pesFlags = frag[7];\n      if (pesFlags & 0xC0) {\n        /* PES header described here : http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n            as PTS / DTS is 33 bit we cannot use bitwise operator in JS,\n            as Bitwise operators treat their operands as a sequence of 32 bits */\n        pesPts = (frag[9] & 0x0E) * 536870912 +// 1 << 29\n          (frag[10] & 0xFF) * 4194304 +// 1 << 22\n          (frag[11] & 0xFE) * 16384 +// 1 << 14\n          (frag[12] & 0xFF) * 128 +// 1 << 7\n          (frag[13] & 0xFE) / 2;\n          // check if greater than 2^32 -1\n          if (pesPts > 4294967295) {\n            // decrement 2^33\n            pesPts -= 8589934592;\n          }\n        if (pesFlags & 0x40) {\n          pesDts = (frag[14] & 0x0E ) * 536870912 +// 1 << 29\n            (frag[15] & 0xFF ) * 4194304 +// 1 << 22\n            (frag[16] & 0xFE ) * 16384 +// 1 << 14\n            (frag[17] & 0xFF ) * 128 +// 1 << 7\n            (frag[18] & 0xFE ) / 2;\n          // check if greater than 2^32 -1\n          if (pesDts > 4294967295) {\n            // decrement 2^33\n            pesDts -= 8589934592;\n          }\n          if (pesPts - pesDts > 60*90000) {\n            logger.warn(`${Math.round((pesPts - pesDts)/90000)}s delta between PTS and DTS, align them`);\n            pesPts = pesDts;\n          }\n        } else {\n          pesDts = pesPts;\n        }\n      }\n      pesHdrLen = frag[8];\n      // 9 bytes : 6 bytes for PES header + 3 bytes for PES extension\n      payloadStartOffset = pesHdrLen + 9;\n\n      stream.size -= payloadStartOffset;\n      //reassemble PES packet\n      pesData = new Uint8Array(stream.size);\n      for( let j = 0, dataLen = data.length; j < dataLen ; j++) {\n        frag = data[j];\n        let len = frag.byteLength;\n        if (payloadStartOffset) {\n          if (payloadStartOffset > len) {\n            // trim full frag if PES header bigger than frag\n            payloadStartOffset-=len;\n            continue;\n          } else {\n            // trim partial frag if PES header smaller than frag\n            frag = frag.subarray(payloadStartOffset);\n            len-=payloadStartOffset;\n            payloadStartOffset = 0;\n          }\n        }\n        pesData.set(frag, i);\n        i+=len;\n      }\n      if (pesLen) {\n        // payload size : remove PES header + PES extension\n        pesLen -= pesHdrLen+3;\n      }\n      return {data: pesData, pts: pesPts, dts: pesDts, len: pesLen};\n    } else {\n      return null;\n    }\n  }\n\n  pushAccesUnit(avcSample,avcTrack) {\n    if (avcSample.units.length && avcSample.frame) {\n      const samples = avcTrack.samples;\n      const nbSamples = samples.length;\n      // only push AVC sample if starting with a keyframe is not mandatory OR\n      //    if keyframe already found in this fragment OR\n      //       keyframe found in last fragment (track.sps) AND\n      //          samples already appended (we already found a keyframe in this fragment) OR fragment is contiguous\n      if (!this.config.forceKeyFrameOnDiscontinuity ||\n          avcSample.key === true ||\n          (avcTrack.sps && (nbSamples || this.contiguous))) {\n        avcSample.id = nbSamples;\n        samples.push(avcSample);\n      } else {\n        // dropped samples, track it\n        avcTrack.dropped++;\n      }\n    }\n    if(avcSample.debug.length) {\n      logger.log(avcSample.pts + '/' + avcSample.dts + ':' + avcSample.debug);\n    }\n  }\n\n  _parseAVCPES(pes,last) {\n    //logger.log('parse new PES');\n    var track = this._avcTrack,\n        units = this._parseAVCNALu(pes.data),\n        debug = false,\n        expGolombDecoder,\n        avcSample = this.avcSample,\n        push,\n        spsfound = false,\n        i,\n        pushAccesUnit = this.pushAccesUnit.bind(this),\n        createAVCSample = function(key,pts,dts,debug) {\n          return { key : key, pts : pts, dts : dts, units : [], debug : debug};\n        };\n    //free pes.data to save up some memory\n    pes.data = null;\n\n    // if new NAL units found and last sample still there, let's push ...\n    // this helps parsing streams with missing AUD (only do this if AUD never found)\n    if (avcSample && units.length && !track.audFound) {\n      pushAccesUnit(avcSample,track);\n      avcSample = this.avcSample = createAVCSample(false,pes.pts,pes.dts,'');\n    }\n\n    units.forEach(unit => {\n      switch(unit.type) {\n        //NDR\n         case 1:\n           push = true;\n           if (!avcSample) {\n            avcSample = this.avcSample = createAVCSample(true,pes.pts,pes.dts,'');\n           }\n           if(debug) {\n            avcSample.debug += 'NDR ';\n           }\n           avcSample.frame = true;\n           let data = unit.data;\n           // only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)\n           if (spsfound && data.length > 4) {\n             // retrieve slice type by parsing beginning of NAL unit (follow H264 spec, slice_header definition) to detect keyframe embedded in NDR\n             let sliceType = new ExpGolomb(data).readSliceType();\n             // 2 : I slice, 4 : SI slice, 7 : I slice, 9: SI slice\n             // SI slice : A slice that is coded using intra prediction only and using quantisation of the prediction samples.\n             // An SI slice can be coded such that its decoded samples can be constructed identically to an SP slice.\n             // I slice: A slice that is not an SI slice that is decoded using intra prediction only.\n             //if (sliceType === 2 || sliceType === 7) {\n             if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {\n                avcSample.key = true;\n             }\n           }\n           break;\n        //IDR\n        case 5:\n          push = true;\n          // handle PES not starting with AUD\n          if (!avcSample) {\n            avcSample = this.avcSample = createAVCSample(true,pes.pts,pes.dts,'');\n          }\n          if(debug) {\n            avcSample.debug += 'IDR ';\n          }\n          avcSample.key = true;\n          avcSample.frame = true;\n          break;\n        //SEI\n        case 6:\n          push = true;\n          if(debug && avcSample) {\n            avcSample.debug += 'SEI ';\n          }\n          expGolombDecoder = new ExpGolomb(this.discardEPB(unit.data));\n\n          // skip frameType\n          expGolombDecoder.readUByte();\n\n          var payloadType = 0;\n          var payloadSize = 0;\n          var endOfCaptions = false;\n          var b = 0;\n\n          while (!endOfCaptions && expGolombDecoder.bytesAvailable > 1) {\n            payloadType = 0;\n            do {\n                b = expGolombDecoder.readUByte();\n                payloadType += b;\n            } while (b === 0xFF);\n\n            // Parse payload size.\n            payloadSize = 0;\n            do {\n                b = expGolombDecoder.readUByte();\n                payloadSize += b;\n            } while (b === 0xFF);\n\n            // TODO: there can be more than one payload in an SEI packet...\n            // TODO: need to read type and size in a while loop to get them all\n            if (payloadType === 4 && expGolombDecoder.bytesAvailable !== 0) {\n\n              endOfCaptions = true;\n\n              var countryCode = expGolombDecoder.readUByte();\n\n              if (countryCode === 181) {\n                var providerCode = expGolombDecoder.readUShort();\n\n                if (providerCode === 49) {\n                  var userStructure = expGolombDecoder.readUInt();\n\n                  if (userStructure === 0x47413934) {\n                    var userDataType = expGolombDecoder.readUByte();\n\n                    // Raw CEA-608 bytes wrapped in CEA-708 packet\n                    if (userDataType === 3) {\n                      var firstByte = expGolombDecoder.readUByte();\n                      var secondByte = expGolombDecoder.readUByte();\n\n                      var totalCCs = 31 & firstByte;\n                      var byteArray = [firstByte, secondByte];\n\n                      for (i = 0; i < totalCCs; i++) {\n                        // 3 bytes per CC\n                        byteArray.push(expGolombDecoder.readUByte());\n                        byteArray.push(expGolombDecoder.readUByte());\n                        byteArray.push(expGolombDecoder.readUByte());\n                      }\n\n                      this._insertSampleInOrder(this._txtTrack.samples, { type: 3, pts: pes.pts, bytes: byteArray });\n                    }\n                  }\n                }\n              }\n            }\n            else if (payloadSize < expGolombDecoder.bytesAvailable)\n            {\n              for (i = 0; i<payloadSize; i++)\n              {\n                expGolombDecoder.readUByte();\n              }\n            }\n          }\n          break;\n        //SPS\n        case 7:\n          push = true;\n          spsfound = true;\n          if(debug && avcSample) {\n            avcSample.debug += 'SPS ';\n          }\n          if(!track.sps) {\n            expGolombDecoder = new ExpGolomb(unit.data);\n            var config = expGolombDecoder.readSPS();\n            track.width = config.width;\n            track.height = config.height;\n            track.pixelRatio = config.pixelRatio;\n            track.sps = [unit.data];\n            track.duration = this._duration;\n            var codecarray = unit.data.subarray(1, 4);\n            var codecstring = 'avc1.';\n            for (i = 0; i < 3; i++) {\n              var h = codecarray[i].toString(16);\n              if (h.length < 2) {\n                h = '0' + h;\n              }\n              codecstring += h;\n            }\n            track.codec = codecstring;\n          }\n          break;\n        //PPS\n        case 8:\n          push = true;\n          if(debug && avcSample) {\n            avcSample.debug += 'PPS ';\n          }\n          if (!track.pps) {\n            track.pps = [unit.data];\n          }\n          break;\n        // AUD\n        case 9:\n          push = false;\n          track.audFound = true;\n          if (avcSample) {\n            pushAccesUnit(avcSample,track);\n          }\n          avcSample = this.avcSample = createAVCSample(false,pes.pts,pes.dts,debug ? 'AUD ': '');\n          break;\n        // Filler Data\n        case 12:\n          push = false;\n          break;\n        default:\n          push = false;\n          if (avcSample) {\n            avcSample.debug += 'unknown NAL ' + unit.type + ' ';\n          }\n          break;\n      }\n      if(avcSample && push) {\n        let units = avcSample.units;\n        units.push(unit);\n      }\n    });\n    // if last PES packet, push samples\n    if (last && avcSample) {\n      pushAccesUnit(avcSample,track);\n      this.avcSample = null;\n    }\n  }\n\n  _insertSampleInOrder(arr, data) {\n    var len = arr.length;\n    if (len > 0) {\n      if (data.pts >= arr[len-1].pts)\n      {\n        arr.push(data);\n      }\n      else {\n        for (var pos = len - 1; pos >= 0; pos--) {\n          if (data.pts < arr[pos].pts) {\n            arr.splice(pos, 0, data);\n            break;\n          }\n        }\n      }\n    }\n    else {\n      arr.push(data);\n    }\n  }\n\n  _getLastNalUnit() {\n    let avcSample = this.avcSample, lastUnit;\n    // try to fallback to previous sample if current one is empty\n    if (!avcSample || avcSample.units.length === 0) {\n      let track = this._avcTrack, samples = track.samples;\n      avcSample = samples[samples.length-1];\n    }\n    if (avcSample) {\n      let units = avcSample.units;\n      lastUnit = units[units.length - 1];\n    }\n    return lastUnit;\n  }\n\n  _parseAVCNALu(array) {\n    var i = 0, len = array.byteLength, value, overflow, track = this._avcTrack, state = track.naluState || 0, lastState = state;\n    var units = [], unit, unitType, lastUnitStart = -1, lastUnitType;\n    //logger.log('PES:' + Hex.hexDump(array));\n\n    if (state === -1) {\n    // special use case where we found 3 or 4-byte start codes exactly at the end of previous PES packet\n      lastUnitStart = 0;\n      // NALu type is value read from offset 0\n      lastUnitType = array[0] & 0x1f;\n      state = 0;\n      i = 1;\n    }\n\n    while (i < len) {\n      value = array[i++];\n      // optimization. state 0 and 1 are the predominant case. let's handle them outside of the switch/case\n      if (!state) {\n        state = value ? 0 : 1;\n        continue;\n      }\n      if (state === 1) {\n        state = value ? 0 : 2;\n        continue;\n      }\n      // here we have state either equal to 2 or 3\n      if(!value) {\n        state = 3;\n      } else if (value === 1) {\n        if (lastUnitStart >=0) {\n          unit = {data: array.subarray(lastUnitStart, i - state - 1), type: lastUnitType};\n          //logger.log('pushing NALU, type/size:' + unit.type + '/' + unit.data.byteLength);\n          units.push(unit);\n        } else {\n          // lastUnitStart is undefined => this is the first start code found in this PES packet\n          // first check if start code delimiter is overlapping between 2 PES packets,\n          // ie it started in last packet (lastState not zero)\n          // and ended at the beginning of this PES packet (i <= 4 - lastState)\n          let lastUnit = this._getLastNalUnit();\n          if (lastUnit) {\n            if(lastState &&  (i <= 4 - lastState)) {\n              // start delimiter overlapping between PES packets\n              // strip start delimiter bytes from the end of last NAL unit\n                // check if lastUnit had a state different from zero\n              if (lastUnit.state) {\n                // strip last bytes\n                lastUnit.data = lastUnit.data.subarray(0,lastUnit.data.byteLength - lastState);\n              }\n            }\n            // If NAL units are not starting right at the beginning of the PES packet, push preceding data into previous NAL unit.\n            overflow  = i - state - 1;\n            if (overflow > 0) {\n              //logger.log('first NALU found with overflow:' + overflow);\n              let tmp = new Uint8Array(lastUnit.data.byteLength + overflow);\n              tmp.set(lastUnit.data, 0);\n              tmp.set(array.subarray(0, overflow), lastUnit.data.byteLength);\n              lastUnit.data = tmp;\n            }\n          }\n        }\n        // check if we can read unit type\n        if (i < len) {\n          unitType = array[i] & 0x1f;\n          //logger.log('find NALU @ offset:' + i + ',type:' + unitType);\n          lastUnitStart = i;\n          lastUnitType = unitType;\n          state = 0;\n        } else {\n          // not enough byte to read unit type. let's read it on next PES parsing\n          state = -1;\n        }\n      } else {\n        state = 0;\n      }\n    }\n    if (lastUnitStart >=0 && state >=0) {\n      unit = {data: array.subarray(lastUnitStart, len), type: lastUnitType, state : state};\n      units.push(unit);\n      //logger.log('pushing NALU, type/size/state:' + unit.type + '/' + unit.data.byteLength + '/' + state);\n    }\n    // no NALu found\n    if (units.length === 0) {\n      // append pes.data to previous NAL unit\n      let  lastUnit = this._getLastNalUnit();\n      if (lastUnit) {\n        let tmp = new Uint8Array(lastUnit.data.byteLength + array.byteLength);\n        tmp.set(lastUnit.data, 0);\n        tmp.set(array, lastUnit.data.byteLength);\n        lastUnit.data = tmp;\n      }\n    }\n    track.naluState = state;\n    return units;\n  }\n\n  /**\n   * remove Emulation Prevention bytes from a RBSP\n   */\n  discardEPB(data) {\n    var length = data.byteLength,\n        EPBPositions = [],\n        i = 1,\n        newLength, newData;\n\n    // Find all `Emulation Prevention Bytes`\n    while (i < length - 2) {\n      if (data[i] === 0 &&\n          data[i + 1] === 0 &&\n          data[i + 2] === 0x03) {\n        EPBPositions.push(i + 2);\n        i += 2;\n      } else {\n        i++;\n      }\n    }\n\n    // If no Emulation Prevention Bytes were found just return the original\n    // array\n    if (EPBPositions.length === 0) {\n      return data;\n    }\n\n    // Create a new array to hold the NAL unit data\n    newLength = length - EPBPositions.length;\n    newData = new Uint8Array(newLength);\n    var sourceIndex = 0;\n\n    for (i = 0; i < newLength; sourceIndex++, i++) {\n      if (sourceIndex === EPBPositions[0]) {\n        // Skip this byte\n        sourceIndex++;\n        // Remove this position index\n        EPBPositions.shift();\n      }\n      newData[i] = data[sourceIndex];\n    }\n    return newData;\n  }\n\n  _parseAACPES(pes) {\n    var track = this._audioTrack,\n        data = pes.data,\n        pts = pes.pts,\n        startOffset = 0,\n        aacOverFlow = this.aacOverFlow,\n        aacLastPTS = this.aacLastPTS,\n        frameDuration, frameIndex, offset, stamp, len;\n    if (aacOverFlow) {\n      var tmp = new Uint8Array(aacOverFlow.byteLength + data.byteLength);\n      tmp.set(aacOverFlow, 0);\n      tmp.set(data, aacOverFlow.byteLength);\n      //logger.log(`AAC: append overflowing ${aacOverFlow.byteLength} bytes to beginning of new PES`);\n      data = tmp;\n    }\n    // look for ADTS header (0xFFFx)\n    for (offset = startOffset, len = data.length; offset < len - 1; offset++) {\n      if (ADTS.isHeader(data, offset)) {\n        break;\n      }\n    }\n    // if ADTS header does not start straight from the beginning of the PES payload, raise an error\n    if (offset) {\n      var reason, fatal;\n      if (offset < len - 1) {\n        reason = `AAC PES did not start with ADTS header,offset:${offset}`;\n        fatal = false;\n      } else {\n        reason = 'no ADTS header found in AAC PES';\n        fatal = true;\n      }\n      logger.warn(`parsing error:${reason}`);\n      this.observer.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: fatal, reason: reason});\n      if (fatal) {\n        return;\n      }\n    }\n\n    ADTS.initTrackConfig(track, this.observer, data, offset, this.audioCodec);\n    frameIndex = 0;\n    frameDuration = ADTS.getFrameDuration(track.samplerate);\n\n    // if last AAC frame is overflowing, we should ensure timestamps are contiguous:\n    // first sample PTS should be equal to last sample PTS + frameDuration\n    if(aacOverFlow && aacLastPTS) {\n      var newPTS = aacLastPTS+frameDuration;\n      if(Math.abs(newPTS-pts) > 1) {\n        logger.log(`AAC: align PTS for overlapping frames by ${Math.round((newPTS-pts)/90)}`);\n        pts=newPTS;\n      }\n    }\n\n    //scan for aac samples\n    while (offset < len) {\n      if (ADTS.isHeader(data, offset) && (offset + 5) < len) {\n        var frame = ADTS.appendFrame(track, data, offset, pts, frameIndex);\n        if (frame) {\n          //logger.log(`${Math.round(frame.sample.pts)} : AAC`);\n          offset += frame.length;\n          stamp = frame.sample.pts;\n          frameIndex++;\n        } else {\n          //logger.log('Unable to parse AAC frame');\n          break;\n        }\n      } else {\n        //nothing found, keep looking\n        offset++;\n      }\n    }\n\n    if (offset < len) {\n      aacOverFlow = data.subarray(offset, len);\n      //logger.log(`AAC: overflow detected:${len-offset}`);\n    } else {\n      aacOverFlow = null;\n    }\n    this.aacOverFlow = aacOverFlow;\n    this.aacLastPTS = stamp;\n  }\n\n  _parseMPEGPES(pes) {\n    var data = pes.data;\n    var length = data.length;\n    var frameIndex = 0;\n    var offset = 0;\n    var pts = pes.pts;\n\n    while (offset < length) {\n      if (MpegAudio.isHeader(data, offset)) {\n        var frame = MpegAudio.appendFrame(this._audioTrack, data, offset, pts, frameIndex);\n        if (frame) {\n          offset += frame.length;\n          frameIndex++;\n        } else {\n          //logger.log('Unable to parse Mpeg audio frame');\n          break;\n        }\n      } else {\n        //nothing found, keep looking\n        offset++;\n      }\n    }\n  }\n\n  _parseID3PES(pes) {\n    this._id3Track.samples.push(pes);\n  }\n}\n\nexport default TSDemuxer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/tsdemuxer.js"",""/**\n * MP3 demuxer\n */\nimport ID3 from '../demux/id3';\nimport { logger } from '../utils/logger';\nimport MpegAudio from './mpegaudio';\n\nclass MP3Demuxer {\n\n  constructor(observer, remuxer, config) {\n    this.observer = observer;\n    this.config = config;\n    this.remuxer = remuxer;\n  }\n\n  resetInitSegment(initSegment, audioCodec, videoCodec, duration) {\n    this._audioTrack = { container: 'audio/mpeg', type: 'audio', id: -1, sequenceNumber: 0, isAAC: false, samples: [], len: 0, manifestCodec: audioCodec, duration: duration, inputTimeScale: 90000 };\n  }\n\n  resetTimeStamp() {\n  }\n\n  static probe(data) {\n    // check if data contains ID3 timestamp and MPEG sync word\n    var offset, length;\n    let id3Data = ID3.getID3Data(data, 0);\n    if (id3Data && ID3.getTimeStamp(id3Data) !== undefined) {\n      // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n      // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n      // More info http://www.mp3-tech.org/programmer/frame_header.html\n      for (offset = id3Data.length, length = Math.min(data.length - 1, offset + 100); offset < length; offset++) {\n        if (MpegAudio.probe(data, offset)) {\n          logger.log('MPEG Audio sync word found !');\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  // feed incoming data to the front of the parsing pipeline\n  append(data, timeOffset, contiguous, accurateTimeOffset) {\n    let id3Data = ID3.getID3Data(data, 0);\n    let pts = 90 * ID3.getTimeStamp(id3Data);\n    var offset = id3Data.length;\n    var length = data.length;\n    var frameIndex = 0, stamp = 0;\n    var track = this._audioTrack;\n\n    let id3Samples = [{ pts: pts, dts: pts, data: id3Data }];\n\n    while (offset < length) {\n      if (MpegAudio.isHeader(data, offset)) {\n        var frame = MpegAudio.appendFrame(track, data, offset, pts, frameIndex);\n        if (frame) {\n          offset += frame.length;\n          stamp = frame.sample.pts;\n          frameIndex++;\n        } else {\n          //logger.log('Unable to parse Mpeg audio frame');\n          break;\n        }\n      } else if (ID3.isHeader(data, offset)) {\n        id3Data = ID3.getID3Data(data, offset);\n        id3Samples.push({ pts: stamp, dts: stamp, data: id3Data });\n        offset += id3Data.length;\n      } else {\n        //nothing found, keep looking\n        offset++;\n      }\n    }\n\n    this.remuxer.remux(track,\n      { samples: [] },\n      { samples: id3Samples, inputTimeScale: 90000 },\n      { samples: [] },\n      timeOffset,\n      contiguous,\n      accurateTimeOffset);\n  }\n\n  destroy() {\n  }\n}\n\nexport default MP3Demuxer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/mp3demuxer.js"",""/**\n *  AAC helper\n */\n\nclass AAC {\n  static getSilentFrame(codec,channelCount) {\n    switch(codec) {\n      case 'mp4a.40.2':\n        if (channelCount === 1) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);\n        } else if (channelCount === 2) {\n          return new Uint8Array([0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80]);\n        } else if (channelCount === 3) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x8e]);\n        } else if (channelCount === 4) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38]);\n        } else if (channelCount === 5) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38]);\n        } else if (channelCount === 6) {\n          return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2, 0x00, 0x20, 0x08, 0xe0]);\n        }\n        break;\n    // handle HE-AAC below (mp4a.40.5 / mp4a.40.29)\n      default:\n        if (channelCount === 1) {\n          // ffmpeg -y -f lavfi -i \""aevalsrc=0:d=0.05\"" -c:a libfdk_aac -profile:a aac_he -b:a 4k output.aac && hexdump -v -e '16/1 \""0x%x,\"" \""\\n\""' -v output.aac\n          return new Uint8Array([0x1,0x40,0x22,0x80,0xa3,0x4e,0xe6,0x80,0xba,0x8,0x0,0x0,0x0,0x1c,0x6,0xf1,0xc1,0xa,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5e]);\n        } else if (channelCount === 2) {\n          // ffmpeg -y -f lavfi -i \""aevalsrc=0|0:d=0.05\"" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \""0x%x,\"" \""\\n\""' -v output.aac\n          return new Uint8Array([0x1,0x40,0x22,0x80,0xa3,0x5e,0xe6,0x80,0xba,0x8,0x0,0x0,0x0,0x0,0x95,0x0,0x6,0xf1,0xa1,0xa,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5e]);\n        } else if (channelCount === 3) {\n          // ffmpeg -y -f lavfi -i \""aevalsrc=0|0|0:d=0.05\"" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \""0x%x,\"" \""\\n\""' -v output.aac\n          return new Uint8Array([0x1,0x40,0x22,0x80,0xa3,0x5e,0xe6,0x80,0xba,0x8,0x0,0x0,0x0,0x0,0x95,0x0,0x6,0xf1,0xa1,0xa,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5e]);\n        }\n        break;\n    }\n    return null;\n  }\n}\n\nexport default AAC;\n\n\n\n// WEBPACK FOOTER //\n// ./src/helper/aac.js"",""/**\n * Generate MP4 Box\n*/\n\n//import Hex from '../utils/hex';\n\nconst UINT32_MAX = Math.pow(2, 32) - 1;\n\nclass MP4 {\n  static init() {\n    MP4.types = {\n      avc1: [], // codingname\n      avcC: [],\n      btrt: [],\n      dinf: [],\n      dref: [],\n      esds: [],\n      ftyp: [],\n      hdlr: [],\n      mdat: [],\n      mdhd: [],\n      mdia: [],\n      mfhd: [],\n      minf: [],\n      moof: [],\n      moov: [],\n      mp4a: [],\n      '.mp3': [],\n      mvex: [],\n      mvhd: [],\n      pasp: [],\n      sdtp: [],\n      stbl: [],\n      stco: [],\n      stsc: [],\n      stsd: [],\n      stsz: [],\n      stts: [],\n      tfdt: [],\n      tfhd: [],\n      traf: [],\n      trak: [],\n      trun: [],\n      trex: [],\n      tkhd: [],\n      vmhd: [],\n      smhd: []\n    };\n\n    var i;\n    for (i in MP4.types) {\n      if (MP4.types.hasOwnProperty(i)) {\n        MP4.types[i] = [\n          i.charCodeAt(0),\n          i.charCodeAt(1),\n          i.charCodeAt(2),\n          i.charCodeAt(3)\n        ];\n      }\n    }\n\n    var videoHdlr = new Uint8Array([\n      0x00, // version 0\n      0x00, 0x00, 0x00, // flags\n      0x00, 0x00, 0x00, 0x00, // pre_defined\n      0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x56, 0x69, 0x64, 0x65,\n      0x6f, 0x48, 0x61, 0x6e,\n      0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n    ]);\n\n    var audioHdlr = new Uint8Array([\n      0x00, // version 0\n      0x00, 0x00, 0x00, // flags\n      0x00, 0x00, 0x00, 0x00, // pre_defined\n      0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x53, 0x6f, 0x75, 0x6e,\n      0x64, 0x48, 0x61, 0x6e,\n      0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n    ]);\n\n    MP4.HDLR_TYPES = {\n      'video': videoHdlr,\n      'audio': audioHdlr\n    };\n\n    var dref = new Uint8Array([\n      0x00, // version 0\n      0x00, 0x00, 0x00, // flags\n      0x00, 0x00, 0x00, 0x01, // entry_count\n      0x00, 0x00, 0x00, 0x0c, // entry_size\n      0x75, 0x72, 0x6c, 0x20, // 'url' type\n      0x00, // version 0\n      0x00, 0x00, 0x01 // entry_flags\n    ]);\n\n    var stco = new Uint8Array([\n      0x00, // version\n      0x00, 0x00, 0x00, // flags\n      0x00, 0x00, 0x00, 0x00 // entry_count\n    ]);\n\n    MP4.STTS = MP4.STSC = MP4.STCO = stco;\n\n    MP4.STSZ = new Uint8Array([\n      0x00, // version\n      0x00, 0x00, 0x00, // flags\n      0x00, 0x00, 0x00, 0x00, // sample_size\n      0x00, 0x00, 0x00, 0x00, // sample_count\n    ]);\n    MP4.VMHD = new Uint8Array([\n      0x00, // version\n      0x00, 0x00, 0x01, // flags\n      0x00, 0x00, // graphicsmode\n      0x00, 0x00,\n      0x00, 0x00,\n      0x00, 0x00 // opcolor\n    ]);\n    MP4.SMHD = new Uint8Array([\n      0x00, // version\n      0x00, 0x00, 0x00, // flags\n      0x00, 0x00, // balance\n      0x00, 0x00 // reserved\n    ]);\n\n    MP4.STSD = new Uint8Array([\n      0x00, // version 0\n      0x00, 0x00, 0x00, // flags\n      0x00, 0x00, 0x00, 0x01]);// entry_count\n\n    var majorBrand = new Uint8Array([105,115,111,109]); // isom\n    var avc1Brand = new Uint8Array([97,118,99,49]); // avc1\n    var minorVersion = new Uint8Array([0, 0, 0, 1]);\n\n    MP4.FTYP = MP4.box(MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n    MP4.DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, dref));\n  }\n\n  static box(type) {\n  var\n    payload = Array.prototype.slice.call(arguments, 1),\n    size = 8,\n    i = payload.length,\n    len = i,\n    result;\n    // calculate the total size we need to allocate\n    while (i--) {\n      size += payload[i].byteLength;\n    }\n    result = new Uint8Array(size);\n    result[0] = (size >> 24) & 0xff;\n    result[1] = (size >> 16) & 0xff;\n    result[2] = (size >> 8) & 0xff;\n    result[3] = size  & 0xff;\n    result.set(type, 4);\n    // copy the payload into the result\n    for (i = 0, size = 8; i < len; i++) {\n      // copy payload[i] array @ offset size\n      result.set(payload[i], size);\n      size += payload[i].byteLength;\n    }\n    return result;\n  }\n\n  static hdlr(type) {\n    return MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type]);\n  }\n\n  static mdat(data) {\n    return MP4.box(MP4.types.mdat, data);\n  }\n\n  static mdhd(timescale, duration) {\n    duration *= timescale;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    return MP4.box(MP4.types.mdhd, new Uint8Array([\n      0x01, // version 1\n      0x00, 0x00, 0x00, // flags\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // creation_time\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // modification_time\n      (timescale >> 24) & 0xFF,\n      (timescale >> 16) & 0xFF,\n      (timescale >>  8) & 0xFF,\n      timescale & 0xFF, // timescale\n      (upperWordDuration >> 24),\n      (upperWordDuration >> 16) & 0xFF,\n      (upperWordDuration >>  8) & 0xFF,\n      upperWordDuration & 0xFF,\n      (lowerWordDuration >> 24),\n      (lowerWordDuration >> 16) & 0xFF,\n      (lowerWordDuration >>  8) & 0xFF,\n      lowerWordDuration & 0xFF,\n      0x55, 0xc4, // 'und' language (undetermined)\n      0x00, 0x00\n    ]));\n  }\n\n  static mdia(track) {\n    return MP4.box(MP4.types.mdia, MP4.mdhd(track.timescale, track.duration), MP4.hdlr(track.type), MP4.minf(track));\n  }\n\n  static mfhd(sequenceNumber) {\n    return MP4.box(MP4.types.mfhd, new Uint8Array([\n      0x00,\n      0x00, 0x00, 0x00, // flags\n      (sequenceNumber >> 24),\n      (sequenceNumber >> 16) & 0xFF,\n      (sequenceNumber >>  8) & 0xFF,\n      sequenceNumber & 0xFF, // sequence_number\n    ]));\n  }\n\n  static minf(track) {\n    if (track.type === 'audio') {\n      return MP4.box(MP4.types.minf, MP4.box(MP4.types.smhd, MP4.SMHD), MP4.DINF, MP4.stbl(track));\n    } else {\n      return MP4.box(MP4.types.minf, MP4.box(MP4.types.vmhd, MP4.VMHD), MP4.DINF, MP4.stbl(track));\n    }\n  }\n\n  static moof(sn, baseMediaDecodeTime, track) {\n    return MP4.box(MP4.types.moof, MP4.mfhd(sn), MP4.traf(track,baseMediaDecodeTime));\n  }\n/**\n * @param tracks... (optional) {array} the tracks associated with this movie\n */\n  static moov(tracks) {\n    var\n      i = tracks.length,\n      boxes = [];\n\n    while (i--) {\n      boxes[i] = MP4.trak(tracks[i]);\n    }\n\n    return MP4.box.apply(null, [MP4.types.moov, MP4.mvhd(tracks[0].timescale, tracks[0].duration)].concat(boxes).concat(MP4.mvex(tracks)));\n  }\n\n  static mvex(tracks) {\n    var\n      i = tracks.length,\n      boxes = [];\n\n    while (i--) {\n      boxes[i] = MP4.trex(tracks[i]);\n    }\n    return MP4.box.apply(null, [MP4.types.mvex].concat(boxes));\n  }\n\n  static mvhd(timescale,duration) {\n    duration*=timescale;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    var\n      bytes = new Uint8Array([\n        0x01, // version 1\n        0x00, 0x00, 0x00, // flags\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // creation_time\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // modification_time\n        (timescale >> 24) & 0xFF,\n        (timescale >> 16) & 0xFF,\n        (timescale >>  8) & 0xFF,\n        timescale & 0xFF, // timescale\n        (upperWordDuration >> 24),\n        (upperWordDuration >> 16) & 0xFF,\n        (upperWordDuration >>  8) & 0xFF,\n        upperWordDuration & 0xFF,\n        (lowerWordDuration >> 24),\n        (lowerWordDuration >> 16) & 0xFF,\n        (lowerWordDuration >>  8) & 0xFF,\n        lowerWordDuration & 0xFF,\n        0x00, 0x01, 0x00, 0x00, // 1.0 rate\n        0x01, 0x00, // 1.0 volume\n        0x00, 0x00, // reserved\n        0x00, 0x00, 0x00, 0x00, // reserved\n        0x00, 0x00, 0x00, 0x00, // reserved\n        0x00, 0x01, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x01, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, // pre_defined\n        0xff, 0xff, 0xff, 0xff // next_track_ID\n      ]);\n    return MP4.box(MP4.types.mvhd, bytes);\n  }\n\n  static sdtp(track) {\n    var\n      samples = track.samples || [],\n      bytes = new Uint8Array(4 + samples.length),\n      flags,\n      i;\n    // leave the full box header (4 bytes) all zero\n    // write the sample table\n    for (i = 0; i < samples.length; i++) {\n      flags = samples[i].flags;\n      bytes[i + 4] = (flags.dependsOn << 4) |\n        (flags.isDependedOn << 2) |\n        (flags.hasRedundancy);\n    }\n\n    return MP4.box(MP4.types.sdtp, bytes);\n  }\n\n  static stbl(track) {\n    return MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.box(MP4.types.stts, MP4.STTS), MP4.box(MP4.types.stsc, MP4.STSC), MP4.box(MP4.types.stsz, MP4.STSZ), MP4.box(MP4.types.stco, MP4.STCO));\n  }\n\n  static avc1(track) {\n    var sps = [], pps = [], i, data, len;\n    // assemble the SPSs\n\n    for (i = 0; i < track.sps.length; i++) {\n      data = track.sps[i];\n      len = data.byteLength;\n      sps.push((len >>> 8) & 0xFF);\n      sps.push((len & 0xFF));\n      sps = sps.concat(Array.prototype.slice.call(data)); // SPS\n    }\n\n    // assemble the PPSs\n    for (i = 0; i < track.pps.length; i++) {\n      data = track.pps[i];\n      len = data.byteLength;\n      pps.push((len >>> 8) & 0xFF);\n      pps.push((len & 0xFF));\n      pps = pps.concat(Array.prototype.slice.call(data));\n    }\n\n    var avcc = MP4.box(MP4.types.avcC, new Uint8Array([\n            0x01,   // version\n            sps[3], // profile\n            sps[4], // profile compat\n            sps[5], // level\n            0xfc | 3, // lengthSizeMinusOne, hard-coded to 4 bytes\n            0xE0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n          ].concat(sps).concat([\n            track.pps.length // numOfPictureParameterSets\n          ]).concat(pps))), // \""PPS\""\n        width = track.width,\n        height = track.height,\n        hSpacing = track.pixelRatio[0],\n        vSpacing = track.pixelRatio[1];\n    //console.log('avcc:' + Hex.hexDump(avcc));\n    return MP4.box(MP4.types.avc1, new Uint8Array([\n        0x00, 0x00, 0x00, // reserved\n        0x00, 0x00, 0x00, // reserved\n        0x00, 0x01, // data_reference_index\n        0x00, 0x00, // pre_defined\n        0x00, 0x00, // reserved\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, // pre_defined\n        (width >> 8) & 0xFF,\n        width & 0xff, // width\n        (height >> 8) & 0xFF,\n        height & 0xff, // height\n        0x00, 0x48, 0x00, 0x00, // horizresolution\n        0x00, 0x48, 0x00, 0x00, // vertresolution\n        0x00, 0x00, 0x00, 0x00, // reserved\n        0x00, 0x01, // frame_count\n        0x12,\n        0x64, 0x61, 0x69, 0x6C, //dailymotion/hls.js\n        0x79, 0x6D, 0x6F, 0x74,\n        0x69, 0x6F, 0x6E, 0x2F,\n        0x68, 0x6C, 0x73, 0x2E,\n        0x6A, 0x73, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, // compressorname\n        0x00, 0x18,   // depth = 24\n        0x11, 0x11]), // pre_defined = -1\n          avcc,\n          MP4.box(MP4.types.btrt, new Uint8Array([\n            0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n            0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n            0x00, 0x2d, 0xc6, 0xc0])), // avgBitrate\n          MP4.box(MP4.types.pasp, new Uint8Array([\n            (hSpacing >> 24),         // hSpacing\n            (hSpacing >> 16) & 0xFF,\n            (hSpacing >>  8) & 0xFF,\n            hSpacing & 0xFF,\n            (vSpacing >> 24),         // vSpacing\n            (vSpacing >> 16) & 0xFF,\n            (vSpacing >>  8) & 0xFF,\n            vSpacing & 0xFF]))\n          );\n  }\n\n  static esds(track) {\n    var configlen = track.config.length;\n    return new Uint8Array([\n      0x00, // version 0\n      0x00, 0x00, 0x00, // flags\n\n      0x03, // descriptor_type\n      0x17+configlen, // length\n      0x00, 0x01, //es_id\n      0x00, // stream_priority\n\n      0x04, // descriptor_type\n      0x0f+configlen, // length\n      0x40, //codec : mpeg4_audio\n      0x15, // stream_type\n      0x00, 0x00, 0x00, // buffer_size\n      0x00, 0x00, 0x00, 0x00, // maxBitrate\n      0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n      0x05 // descriptor_type\n      ].concat([configlen]).concat(track.config).concat([0x06, 0x01, 0x02])); // GASpecificConfig)); // length + audio config descriptor\n  }\n\n  static mp4a(track) {\n    var samplerate = track.samplerate;\n      return MP4.box(MP4.types.mp4a, new Uint8Array([\n      0x00, 0x00, 0x00, // reserved\n      0x00, 0x00, 0x00, // reserved\n      0x00, 0x01, // data_reference_index\n      0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x00, track.channelCount, // channelcount\n      0x00, 0x10, // sampleSize:16bits\n      0x00, 0x00, 0x00, 0x00, // reserved2\n      (samplerate >> 8) & 0xFF,\n      samplerate & 0xff, //\n      0x00, 0x00]),\n      MP4.box(MP4.types.esds, MP4.esds(track)));\n  }\n\n  static mp3(track) {\n    var samplerate = track.samplerate;\n      return MP4.box(MP4.types['.mp3'], new Uint8Array([\n      0x00, 0x00, 0x00, // reserved\n      0x00, 0x00, 0x00, // reserved\n      0x00, 0x01, // data_reference_index\n      0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x00, track.channelCount, // channelcount\n      0x00, 0x10, // sampleSize:16bits\n      0x00, 0x00, 0x00, 0x00, // reserved2\n      (samplerate >> 8) & 0xFF,\n      samplerate & 0xff, //\n      0x00, 0x00]));\n  }\n\n  static stsd(track) {\n    if (track.type === 'audio') {\n      if (!track.isAAC && track.codec === 'mp3') {\n        return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp3(track));\n      }\n      return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp4a(track));\n    } else {\n      return MP4.box(MP4.types.stsd, MP4.STSD, MP4.avc1(track));\n    }\n  }\n\n  static tkhd(track) {\n    var id = track.id,\n        duration = track.duration*track.timescale,\n        width = track.width,\n        height = track.height,\n        upperWordDuration = Math.floor(duration / (UINT32_MAX + 1)),\n        lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    return MP4.box(MP4.types.tkhd, new Uint8Array([\n      0x01, // version 1\n      0x00, 0x00, 0x07, // flags\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // creation_time\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // modification_time\n      (id >> 24) & 0xFF,\n      (id >> 16) & 0xFF,\n      (id >> 8) & 0xFF,\n      id & 0xFF, // track_ID\n      0x00, 0x00, 0x00, 0x00, // reserved\n      (upperWordDuration >> 24),\n      (upperWordDuration >> 16) & 0xFF,\n      (upperWordDuration >>  8) & 0xFF,\n      upperWordDuration & 0xFF,\n      (lowerWordDuration >> 24),\n      (lowerWordDuration >> 16) & 0xFF,\n      (lowerWordDuration >>  8) & 0xFF,\n      lowerWordDuration & 0xFF,\n      0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, // reserved\n      0x00, 0x00, // layer\n      0x00, 0x00, // alternate_group\n      0x00, 0x00, // non-audio track volume\n      0x00, 0x00, // reserved\n      0x00, 0x01, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00,\n      0x00, 0x01, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00,\n      0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n      (width >> 8) & 0xFF,\n      width & 0xFF,\n      0x00, 0x00, // width\n      (height >> 8) & 0xFF,\n      height & 0xFF,\n      0x00, 0x00 // height\n    ]));\n  }\n\n  static traf(track,baseMediaDecodeTime) {\n    var sampleDependencyTable = MP4.sdtp(track),\n        id = track.id,\n        upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1)),\n        lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n    return MP4.box(MP4.types.traf,\n               MP4.box(MP4.types.tfhd, new Uint8Array([\n                 0x00, // version 0\n                 0x00, 0x00, 0x00, // flags\n                 (id >> 24),\n                 (id >> 16) & 0XFF,\n                 (id >> 8) & 0XFF,\n                 (id & 0xFF) // track_ID\n               ])),\n               MP4.box(MP4.types.tfdt, new Uint8Array([\n                 0x01, // version 1\n                 0x00, 0x00, 0x00, // flags\n                 (upperWordBaseMediaDecodeTime >>24),\n                 (upperWordBaseMediaDecodeTime >> 16) & 0XFF,\n                 (upperWordBaseMediaDecodeTime >> 8) & 0XFF,\n                 (upperWordBaseMediaDecodeTime & 0xFF),\n                 (lowerWordBaseMediaDecodeTime >>24),\n                 (lowerWordBaseMediaDecodeTime >> 16) & 0XFF,\n                 (lowerWordBaseMediaDecodeTime >> 8) & 0XFF,\n                 (lowerWordBaseMediaDecodeTime & 0xFF)\n               ])),\n               MP4.trun(track,\n                    sampleDependencyTable.length +\n                    16 + // tfhd\n                    20 + // tfdt\n                    8 +  // traf header\n                    16 + // mfhd\n                    8 +  // moof header\n                    8),  // mdat header\n               sampleDependencyTable);\n  }\n\n  /**\n   * Generate a track box.\n   * @param track {object} a track definition\n   * @return {Uint8Array} the track box\n   */\n  static trak(track) {\n    track.duration = track.duration || 0xffffffff;\n    return MP4.box(MP4.types.trak, MP4.tkhd(track), MP4.mdia(track));\n  }\n\n  static trex(track) {\n    var id = track.id;\n    return MP4.box(MP4.types.trex, new Uint8Array([\n      0x00, // version 0\n      0x00, 0x00, 0x00, // flags\n     (id >> 24),\n     (id >> 16) & 0XFF,\n     (id >> 8) & 0XFF,\n     (id & 0xFF), // track_ID\n      0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n      0x00, 0x00, 0x00, 0x00, // default_sample_duration\n      0x00, 0x00, 0x00, 0x00, // default_sample_size\n      0x00, 0x01, 0x00, 0x01 // default_sample_flags\n    ]));\n  }\n\n  static trun(track, offset) {\n    var samples= track.samples || [],\n        len = samples.length,\n        arraylen = 12 + (16 * len),\n        array = new Uint8Array(arraylen),\n        i,sample,duration,size,flags,cts;\n    offset += 8 + arraylen;\n    array.set([\n      0x00, // version 0\n      0x00, 0x0f, 0x01, // flags\n      (len >>> 24) & 0xFF,\n      (len >>> 16) & 0xFF,\n      (len >>> 8) & 0xFF,\n      len & 0xFF, // sample_count\n      (offset >>> 24) & 0xFF,\n      (offset >>> 16) & 0xFF,\n      (offset >>> 8) & 0xFF,\n      offset & 0xFF // data_offset\n    ],0);\n    for (i = 0; i < len; i++) {\n      sample = samples[i];\n      duration = sample.duration;\n      size = sample.size;\n      flags = sample.flags;\n      cts = sample.cts;\n      array.set([\n        (duration >>> 24) & 0xFF,\n        (duration >>> 16) & 0xFF,\n        (duration >>> 8) & 0xFF,\n        duration & 0xFF, // sample_duration\n        (size >>> 24) & 0xFF,\n        (size >>> 16) & 0xFF,\n        (size >>> 8) & 0xFF,\n        size & 0xFF, // sample_size\n        (flags.isLeading << 2) | flags.dependsOn,\n        (flags.isDependedOn << 6) |\n          (flags.hasRedundancy << 4) |\n          (flags.paddingValue << 1) |\n          flags.isNonSync,\n        flags.degradPrio & 0xF0 << 8,\n        flags.degradPrio & 0x0F, // sample_flags\n        (cts >>> 24) & 0xFF,\n        (cts >>> 16) & 0xFF,\n        (cts >>> 8) & 0xFF,\n        cts & 0xFF // sample_composition_time_offset\n      ],12+16*i);\n    }\n    return MP4.box(MP4.types.trun, array);\n  }\n\n  static initSegment(tracks) {\n    if (!MP4.types) {\n      MP4.init();\n    }\n    var movie = MP4.moov(tracks), result;\n    result = new Uint8Array(MP4.FTYP.byteLength + movie.byteLength);\n    result.set(MP4.FTYP);\n    result.set(movie, MP4.FTYP.byteLength);\n    return result;\n  }\n}\n\nexport default MP4;\n\n\n\n// WEBPACK FOOTER //\n// ./src/remux/mp4-generator.js"","" /**\n * fMP4 remuxer\n*/\n\n\nimport AAC from '../helper/aac';\nimport Event from '../events';\nimport {logger} from '../utils/logger';\nimport MP4 from '../remux/mp4-generator';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\n// 10 seconds\nconst MAX_SILENT_FRAME_DURATION = 10 * 1000;\n\nclass MP4Remuxer {\n  constructor(observer, config, typeSupported, vendor) {\n    this.observer = observer;\n    this.config = config;\n    this.typeSupported = typeSupported;\n    const userAgent = navigator.userAgent;\n    this.isSafari = vendor && vendor.indexOf('Apple') > -1 && userAgent && !userAgent.match('CriOS');\n    this.ISGenerated = false;\n  }\n\n  destroy() {\n  }\n\n  resetTimeStamp(defaultTimeStamp) {\n    this._initPTS = this._initDTS = defaultTimeStamp;\n  }\n\n  resetInitSegment() {\n    this.ISGenerated = false;\n  }\n\n  remux(audioTrack,videoTrack,id3Track,textTrack,timeOffset, contiguous,accurateTimeOffset) {\n    // generate Init Segment if needed\n    if (!this.ISGenerated) {\n      this.generateIS(audioTrack,videoTrack,timeOffset);\n    }\n\n    if (this.ISGenerated) {\n      const nbAudioSamples = audioTrack.samples.length;\n      const nbVideoSamples = videoTrack.samples.length;\n      let audioTimeOffset = timeOffset;\n      let videoTimeOffset = timeOffset;\n      if (nbAudioSamples && nbVideoSamples) {\n        // timeOffset is expected to be the offset of the first timestamp of this fragment (first DTS)\n        // if first audio DTS is not aligned with first video DTS then we need to take that into account\n        // when providing timeOffset to remuxAudio / remuxVideo. if we don't do that, there might be a permanent / small\n        // drift between audio and video streams\n        let audiovideoDeltaDts = (audioTrack.samples[0].dts - videoTrack.samples[0].dts)/videoTrack.inputTimeScale;\n        audioTimeOffset += Math.max(0,audiovideoDeltaDts);\n        videoTimeOffset += Math.max(0,-audiovideoDeltaDts);\n      }\n      // Purposefully remuxing audio before video, so that remuxVideo can use nextAudioPts, which is\n      // calculated in remuxAudio.\n      //logger.log('nb AAC samples:' + audioTrack.samples.length);\n      if (nbAudioSamples) {\n        // if initSegment was generated without video samples, regenerate it again\n        if (!audioTrack.timescale) {\n          logger.warn('regenerate InitSegment as audio detected');\n          this.generateIS(audioTrack,videoTrack,timeOffset);\n        }\n        let audioData = this.remuxAudio(audioTrack,audioTimeOffset,contiguous,accurateTimeOffset);\n        //logger.log('nb AVC samples:' + videoTrack.samples.length);\n        if (nbVideoSamples) {\n          let audioTrackLength;\n          if (audioData) {\n            audioTrackLength = audioData.endPTS - audioData.startPTS;\n          }\n          // if initSegment was generated without video samples, regenerate it again\n          if (!videoTrack.timescale) {\n            logger.warn('regenerate InitSegment as video detected');\n            this.generateIS(audioTrack,videoTrack,timeOffset);\n          }\n          this.remuxVideo(videoTrack,videoTimeOffset,contiguous,audioTrackLength, accurateTimeOffset);\n        }\n      } else {\n        let videoData;\n        //logger.log('nb AVC samples:' + videoTrack.samples.length);\n        if (nbVideoSamples) {\n          videoData = this.remuxVideo(videoTrack,videoTimeOffset,contiguous, accurateTimeOffset);\n        }\n        if (videoData && audioTrack.codec) {\n          this.remuxEmptyAudio(audioTrack, audioTimeOffset, contiguous, videoData);\n        }\n      }\n    }\n    //logger.log('nb ID3 samples:' + audioTrack.samples.length);\n    if (id3Track.samples.length) {\n      this.remuxID3(id3Track,timeOffset);\n    }\n    //logger.log('nb ID3 samples:' + audioTrack.samples.length);\n    if (textTrack.samples.length) {\n      this.remuxText(textTrack,timeOffset);\n    }\n    //notify end of parsing\n    this.observer.trigger(Event.FRAG_PARSED);\n  }\n\n  generateIS(audioTrack,videoTrack,timeOffset) {\n    var observer = this.observer,\n        audioSamples = audioTrack.samples,\n        videoSamples = videoTrack.samples,\n        typeSupported = this.typeSupported,\n        container = 'audio/mp4',\n        tracks = {},\n        data = { tracks : tracks },\n        computePTSDTS = (this._initPTS === undefined),\n        initPTS, initDTS;\n\n    if (computePTSDTS) {\n      initPTS = initDTS = Infinity;\n    }\n    if (audioTrack.config && audioSamples.length) {\n      // let's use audio sampling rate as MP4 time scale.\n      // rationale is that there is a integer nb of audio frames per audio sample (1024 for AAC)\n      // using audio sampling rate here helps having an integer MP4 frame duration\n      // this avoids potential rounding issue and AV sync issue\n      audioTrack.timescale = audioTrack.samplerate;\n      logger.log (`audio sampling rate : ${audioTrack.samplerate}`);\n      if (!audioTrack.isAAC) {\n        if (typeSupported.mpeg) { // Chrome and Safari\n          container = 'audio/mpeg';\n          audioTrack.codec = '';\n        } else if (typeSupported.mp3) { // Firefox\n          audioTrack.codec = 'mp3';\n        }\n      }\n      tracks.audio = {\n        container : container,\n        codec :  audioTrack.codec,\n        initSegment : !audioTrack.isAAC && typeSupported.mpeg ? new Uint8Array() : MP4.initSegment([audioTrack]),\n        metadata : {\n          channelCount : audioTrack.channelCount\n        }\n      };\n      if (computePTSDTS) {\n        // remember first PTS of this demuxing context. for audio, PTS = DTS\n        initPTS = initDTS = audioSamples[0].pts - audioTrack.inputTimeScale * timeOffset;\n      }\n    }\n\n    if (videoTrack.sps && videoTrack.pps && videoSamples.length) {\n      // let's use input time scale as MP4 video timescale\n      // we use input time scale straight away to avoid rounding issues on frame duration / cts computation\n      const inputTimeScale = videoTrack.inputTimeScale;\n      videoTrack.timescale = inputTimeScale;\n      tracks.video = {\n        container : 'video/mp4',\n        codec :  videoTrack.codec,\n        initSegment : MP4.initSegment([videoTrack]),\n        metadata : {\n          width : videoTrack.width,\n          height : videoTrack.height\n        }\n      };\n      if (computePTSDTS) {\n        initPTS = Math.min(initPTS,videoSamples[0].pts - inputTimeScale * timeOffset);\n        initDTS = Math.min(initDTS,videoSamples[0].dts - inputTimeScale * timeOffset);\n        this.observer.trigger(Event.INIT_PTS_FOUND, { initPTS: initPTS});\n      }\n    }\n\n    if(Object.keys(tracks).length) {\n      observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT,data);\n      this.ISGenerated = true;\n      if (computePTSDTS) {\n        this._initPTS = initPTS;\n        this._initDTS = initDTS;\n      }\n    } else {\n      observer.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'no audio/video samples found'});\n    }\n  }\n\n  remuxVideo(track, timeOffset, contiguous, audioTrackLength, accurateTimeOffset) {\n    var offset = 8,\n        timeScale = track.timescale,\n        mp4SampleDuration,\n        mdat, moof,\n        firstPTS, firstDTS,\n        nextDTS,\n        lastPTS, lastDTS,\n        inputSamples = track.samples,\n        outputSamples = [],\n        nbSamples = inputSamples.length,\n        ptsNormalize = this._PTSNormalize,\n        initDTS = this._initDTS;\n\n  // for (let i = 0; i < track.samples.length; i++) {\n  //   let avcSample = track.samples[i];\n  //   let units = avcSample.units;\n  //   let unitsString = '';\n  //   for (let j = 0; j < units.length ; j++) {\n  //     unitsString += units[j].type + ',';\n  //     if (units[j].data.length < 500) {\n  //       unitsString += Hex.hexDump(units[j].data);\n  //     }\n  //   }\n  //   logger.log(avcSample.pts + '/' + avcSample.dts + ',' + unitsString + avcSample.units.length);\n  // }\n\n    // if parsed fragment is contiguous with last one, let's use last DTS value as reference\n    let nextAvcDts = this.nextAvcDts;\n\n    const isSafari = this.isSafari;\n\n    // Safari does not like overlapping DTS on consecutive fragments. let's use nextAvcDts to overcome this if fragments are consecutive\n    if (isSafari) {\n      // also consider consecutive fragments as being contiguous (even if a level switch occurs),\n      // for sake of clarity:\n      // consecutive fragments are frags with\n      //  - less than 100ms gaps between new time offset (if accurate) and next expected PTS OR\n      //  - less than 200 ms PTS gaps (timeScale/5)\n      contiguous |= (inputSamples.length && nextAvcDts &&\n                     ((accurateTimeOffset && Math.abs(timeOffset-nextAvcDts/timeScale) < 0.1) ||\n                      Math.abs((inputSamples[0].pts-nextAvcDts-initDTS)) < timeScale/5)\n                      );\n    }\n\n    if (!contiguous) {\n      // if not contiguous, let's use target timeOffset\n      nextAvcDts = timeOffset*timeScale;\n    }\n\n  // PTS is coded on 33bits, and can loop from -2^32 to 2^32\n  // ptsNormalize will make PTS/DTS value monotonic, we use last known DTS value as reference value\n    inputSamples.forEach(function(sample) {\n      sample.pts = ptsNormalize(sample.pts-initDTS, nextAvcDts);\n      sample.dts = ptsNormalize(sample.dts-initDTS, nextAvcDts);\n    });\n\n    // sort video samples by DTS then PTS then demux id order\n    inputSamples.sort(function(a, b) {\n      const deltadts = a.dts - b.dts;\n      const deltapts = a.pts - b.pts;\n      return deltadts ? deltadts : deltapts ? deltapts : (a.id - b.id);\n    });\n\n    // handle broken streams with PTS < DTS, tolerance up 200ms (18000 in 90kHz timescale)\n    let PTSDTSshift = inputSamples.reduce( (prev, curr) => Math.max(Math.min(prev,curr.pts-curr.dts),-18000),0);\n    if (PTSDTSshift < 0) {\n      logger.warn(`PTS < DTS detected in video samples, shifting DTS by ${Math.round(PTSDTSshift/90)} ms to overcome this issue`);\n      for (let i = 0; i < inputSamples.length; i++) {\n        inputSamples[i].dts += PTSDTSshift;\n      }\n    }\n\n    // compute first DTS and last DTS, normalize them against reference value\n    let sample = inputSamples[0];\n    firstDTS =  Math.max(sample.dts,0);\n    firstPTS =  Math.max(sample.pts,0);\n\n    // check timestamp continuity accross consecutive fragments (this is to remove inter-fragment gap/hole)\n    let delta = Math.round((firstDTS - nextAvcDts) / 90);\n    // if fragment are contiguous, detect hole/overlapping between fragments\n    if (contiguous) {\n      if (delta) {\n        if (delta > 1) {\n          logger.log(`AVC:${delta} ms hole between fragments detected,filling it`);\n        } else if (delta < -1) {\n          logger.log(`AVC:${(-delta)} ms overlapping between fragments detected`);\n        }\n        // remove hole/gap : set DTS to next expected DTS\n        firstDTS = nextAvcDts;\n        inputSamples[0].dts = firstDTS;\n        // offset PTS as well, ensure that PTS is smaller or equal than new DTS\n        firstPTS = Math.max(firstPTS - delta, nextAvcDts);\n        inputSamples[0].pts = firstPTS;\n        logger.log(`Video/PTS/DTS adjusted: ${Math.round(firstPTS/90)}/${Math.round(firstDTS/90)},delta:${delta} ms`);\n      }\n    }\n    nextDTS = firstDTS;\n\n    // compute lastPTS/lastDTS\n    sample = inputSamples[inputSamples.length-1];\n    lastDTS =  Math.max(sample.dts,0);\n    lastPTS =  Math.max(sample.pts,0,lastDTS);\n\n      // on Safari let's signal the same sample duration for all samples\n      // sample duration (as expected by trun MP4 boxes), should be the delta between sample DTS\n      // set this constant duration as being the avg delta between consecutive DTS.\n    if (isSafari) {\n      mp4SampleDuration = Math.round((lastDTS-firstDTS)/(inputSamples.length-1));\n    }\n\n    let nbNalu = 0, naluLen = 0;\n    for (let i = 0 ; i < nbSamples; i++) {\n      // compute total/avc sample length and nb of NAL units\n      let sample = inputSamples[i], units = sample.units, nbUnits = units.length, sampleLen = 0;\n      for (let j = 0; j < nbUnits; j++) {\n        sampleLen += units[j].data.length;\n      }\n      naluLen += sampleLen;\n      nbNalu += nbUnits;\n      sample.length = sampleLen;\n\n      // normalize PTS/DTS\n      if (isSafari) {\n        // sample DTS is computed using a constant decoding offset (mp4SampleDuration) between samples\n        sample.dts = firstDTS + i*mp4SampleDuration;\n      } else {\n        // ensure sample monotonic DTS\n        sample.dts = Math.max(sample.dts,firstDTS);\n      }\n      // ensure that computed value is greater or equal than sample DTS\n      sample.pts = Math.max(sample.pts , sample.dts);\n    }\n\n    /* concatenate the video data and construct the mdat in place\n      (need 8 more bytes to fill length and mpdat type) */\n    let mdatSize = naluLen + (4 * nbNalu) + 8;\n    try {\n      mdat = new Uint8Array(mdatSize);\n    } catch(err) {\n      this.observer.trigger(Event.ERROR, {type : ErrorTypes.MUX_ERROR, details: ErrorDetails.REMUX_ALLOC_ERROR, fatal: false, bytes : mdatSize, reason: `fail allocating video mdat ${mdatSize}`});\n      return;\n    }\n    let view = new DataView(mdat.buffer);\n    view.setUint32(0, mdatSize);\n    mdat.set(MP4.types.mdat, 4);\n\n    for (let i = 0 ; i < nbSamples; i++) {\n      let avcSample = inputSamples[i],\n          avcSampleUnits = avcSample.units,\n          mp4SampleLength = 0,\n          compositionTimeOffset;\n      // convert NALU bitstream to MP4 format (prepend NALU with size field)\n      for(let j = 0, nbUnits = avcSampleUnits.length; j < nbUnits ; j++) {\n        let unit = avcSampleUnits[j],\n            unitData = unit.data,\n            unitDataLen = unit.data.byteLength;\n        view.setUint32(offset, unitDataLen);\n        offset += 4;\n        mdat.set(unitData, offset);\n        offset += unitDataLen;\n        mp4SampleLength += 4 + unitDataLen;\n      }\n\n      if(!isSafari) {\n        // expected sample duration is the Decoding Timestamp diff of consecutive samples\n        if (i < nbSamples - 1) {\n          mp4SampleDuration = inputSamples[i+1].dts - avcSample.dts;\n        } else {\n          let config = this.config,\n              lastFrameDuration = avcSample.dts - inputSamples[i > 0 ? i-1 : i].dts;\n          if (config.stretchShortVideoTrack) {\n            // In some cases, a segment's audio track duration may exceed the video track duration.\n            // Since we've already remuxed audio, and we know how long the audio track is, we look to\n            // see if the delta to the next segment is longer than the minimum of maxBufferHole and\n            // maxSeekHole. If so, playback would potentially get stuck, so we artificially inflate\n            // the duration of the last frame to minimize any potential gap between segments.\n            let maxBufferHole = config.maxBufferHole,\n                maxSeekHole = config.maxSeekHole,\n                gapTolerance = Math.floor(Math.min(maxBufferHole, maxSeekHole) * timeScale),\n                deltaToFrameEnd = (audioTrackLength ? firstPTS + audioTrackLength * timeScale : this.nextAudioPts) - avcSample.pts;\n            if (deltaToFrameEnd > gapTolerance) {\n              // We subtract lastFrameDuration from deltaToFrameEnd to try to prevent any video\n              // frame overlap. maxBufferHole/maxSeekHole should be >> lastFrameDuration anyway.\n              mp4SampleDuration = deltaToFrameEnd - lastFrameDuration;\n              if (mp4SampleDuration < 0) {\n                mp4SampleDuration = lastFrameDuration;\n              }\n              logger.log(`It is approximately ${deltaToFrameEnd/90} ms to the next segment; using duration ${mp4SampleDuration/90} ms for the last video frame.`);\n            } else {\n              mp4SampleDuration = lastFrameDuration;\n            }\n          } else {\n            mp4SampleDuration = lastFrameDuration;\n          }\n        }\n        compositionTimeOffset = Math.round(avcSample.pts - avcSample.dts);\n      } else {\n        compositionTimeOffset = Math.max(0,mp4SampleDuration*Math.round((avcSample.pts - avcSample.dts)/mp4SampleDuration));\n      }\n\n\n      //console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${avcSample.pts}/${avcSample.dts}/${initDTS}/${ptsnorm}/${dtsnorm}/${(avcSample.pts/4294967296).toFixed(3)}');\n      outputSamples.push({\n        size: mp4SampleLength,\n         // constant duration\n        duration: mp4SampleDuration,\n        cts: compositionTimeOffset,\n        flags: {\n          isLeading: 0,\n          isDependedOn: 0,\n          hasRedundancy: 0,\n          degradPrio: 0,\n          dependsOn : avcSample.key ? 2 : 1,\n          isNonSync : avcSample.key ? 0 : 1\n        }\n      });\n    }\n    // next AVC sample DTS should be equal to last sample DTS + last sample duration (in PES timescale)\n    this.nextAvcDts = lastDTS + mp4SampleDuration;\n    let dropped = track.dropped;\n    track.len = 0;\n    track.nbNalu = 0;\n    track.dropped = 0;\n    if(outputSamples.length && navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {\n      let flags = outputSamples[0].flags;\n    // chrome workaround, mark first sample as being a Random Access Point to avoid sourcebuffer append issue\n    // https://code.google.com/p/chromium/issues/detail?id=229412\n      flags.dependsOn = 2;\n      flags.isNonSync = 0;\n    }\n    track.samples = outputSamples;\n    moof = MP4.moof(track.sequenceNumber++, firstDTS , track);\n    track.samples = [];\n\n    let data = {\n      data1: moof,\n      data2: mdat,\n      startPTS: firstPTS / timeScale,\n      endPTS: (lastPTS +  mp4SampleDuration) / timeScale,\n      startDTS: firstDTS / timeScale,\n      endDTS: this.nextAvcDts / timeScale,\n      type: 'video',\n      nb: outputSamples.length,\n      dropped : dropped\n    };\n    this.observer.trigger(Event.FRAG_PARSING_DATA, data);\n    return data;\n  }\n\n  remuxAudio(track, timeOffset, contiguous,accurateTimeOffset) {\n    const inputTimeScale = track.inputTimeScale,\n          mp4timeScale = track.timescale,\n          scaleFactor = inputTimeScale/mp4timeScale,\n          mp4SampleDuration = track.isAAC ? 1024 : 1152,\n          inputSampleDuration = mp4SampleDuration * scaleFactor,\n          ptsNormalize = this._PTSNormalize,\n          initDTS = this._initDTS,\n          rawMPEG = !track.isAAC && this.typeSupported.mpeg;\n\n    var offset,\n        mp4Sample,\n        fillFrame,\n        mdat, moof,\n        firstPTS, lastPTS,\n        inputSamples = track.samples,\n        outputSamples = [],\n        nextAudioPts = this.nextAudioPts;\n\n    // for audio samples, also consider consecutive fragments as being contiguous (even if a level switch occurs),\n    // for sake of clarity:\n    // consecutive fragments are frags with\n    //  - less than 100ms gaps between new time offset (if accurate) and next expected PTS OR\n    //  - less than 20 audio frames distance\n    // contiguous fragments are consecutive fragments from same quality level (same level, new SN = old SN + 1)\n    // this helps ensuring audio continuity\n    // and this also avoids audio glitches/cut when switching quality, or reporting wrong duration on first audio frame\n    contiguous |= (inputSamples.length && nextAudioPts &&\n                   ((accurateTimeOffset && Math.abs(timeOffset-nextAudioPts/inputTimeScale) < 0.1) ||\n                    Math.abs((inputSamples[0].pts-nextAudioPts-initDTS)) < 20*inputSampleDuration)\n                    );\n\n    if (!contiguous) {\n      // if fragments are not contiguous, let's use timeOffset to compute next Audio PTS\n      nextAudioPts = timeOffset*inputTimeScale;\n    }\n\n    // compute normalized PTS\n    inputSamples.forEach(function(sample) {\n      sample.pts = sample.dts = ptsNormalize(sample.pts - initDTS, nextAudioPts);\n    });\n\n    // sort based on normalized PTS (this is to avoid sorting issues in case timestamp\n    // reloop in the middle of our samples array)\n    inputSamples.sort(function(a, b) {\n      return a.pts - b.pts;\n    });\n\n    // If the audio track is missing samples, the frames seem to get \""left-shifted\"" within the\n    // resulting mp4 segment, causing sync issues and leaving gaps at the end of the audio segment.\n    // In an effort to prevent this from happening, we inject frames here where there are gaps.\n    // When possible, we inject a silent frame; when that's not possible, we duplicate the last\n    // frame.\n\n    // only inject/drop audio frames in case time offset is accurate\n    if (accurateTimeOffset && track.isAAC) {\n      const maxAudioFramesDrift = this.config.maxAudioFramesDrift;\n      for (let i = 0, nextPts = nextAudioPts; i < inputSamples.length; ) {\n        // First, let's see how far off this frame is from where we expect it to be\n        var sample = inputSamples[i], delta;\n        let pts = sample.pts;\n        delta = pts - nextPts;\n\n        //console.log(Math.round(pts) + '/' + Math.round(nextPts) + '/' + Math.round(delta));\n        const duration = Math.abs(1000*delta/inputTimeScale);\n\n        // If we're overlapping by more than a duration, drop this sample\n        if (delta <= -maxAudioFramesDrift*inputSampleDuration) {\n          logger.warn(`Dropping 1 audio frame @ ${(nextPts/inputTimeScale).toFixed(3)}s due to ${Math.round(duration)} ms overlap.`);\n          inputSamples.splice(i, 1);\n          track.len -= sample.unit.length;\n          // Don't touch nextPtsNorm or i\n        }\n\n        // Insert missing frames if:\n        // 1: We're more than maxAudioFramesDrift frame away\n        // 2: Not more than MAX_SILENT_FRAME_DURATION away\n        // 3: currentTime (aka nextPtsNorm) is not 0\n        else if (delta >= maxAudioFramesDrift*inputSampleDuration && duration < MAX_SILENT_FRAME_DURATION && nextPts) {\n          var missing = Math.round(delta / inputSampleDuration);\n          logger.warn(`Injecting ${missing} audio frame @ ${(nextPts/inputTimeScale).toFixed(3)}s due to ${Math.round(1000*delta/inputTimeScale)} ms gap.`);\n          for (var j = 0; j < missing; j++) {\n            let newStamp = Math.max(nextPts,0);\n            fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec,track.channelCount);\n            if (!fillFrame) {\n              logger.log('Unable to get silent frame for given audio codec; duplicating last frame instead.');\n              fillFrame = sample.unit.subarray();\n            }\n            inputSamples.splice(i, 0, {unit: fillFrame, pts: newStamp, dts: newStamp});\n            track.len += fillFrame.length;\n            nextPts += inputSampleDuration;\n            i++;\n          }\n\n          // Adjust sample to next expected pts\n          sample.pts = sample.dts = nextPts;\n          nextPts += inputSampleDuration;\n          i++;\n        } else {\n        // Otherwise, just adjust pts\n          if (Math.abs(delta) > (0.1 * inputSampleDuration)) {\n            //logger.log(`Invalid frame delta ${Math.round(delta + inputSampleDuration)} at PTS ${Math.round(pts / 90)} (should be ${Math.round(inputSampleDuration)}).`);\n          }\n          sample.pts = sample.dts = nextPts;\n          nextPts += inputSampleDuration;\n          i++;\n        }\n      }\n    }\n\n\n    for (let j =0 , nbSamples = inputSamples.length; j < nbSamples ; j++) {\n      let audioSample = inputSamples[j];\n      let unit = audioSample.unit;\n      let pts = audioSample.pts;\n      //logger.log(`Audio/PTS:${Math.round(pts/90)}`);\n      // if not first sample\n      if (lastPTS !== undefined) {\n        mp4Sample.duration = Math.round((pts - lastPTS) / scaleFactor);\n      } else {\n        let delta = Math.round(1000 * (pts - nextAudioPts) / inputTimeScale),\n            numMissingFrames = 0;\n        // if fragment are contiguous, detect hole/overlapping between fragments\n        // contiguous fragments are consecutive fragments from same quality level (same level, new SN = old SN + 1)\n        if (contiguous && track.isAAC) {\n          // log delta\n          if (delta) {\n            if (delta > 0 && delta < MAX_SILENT_FRAME_DURATION) {\n              numMissingFrames = Math.round((pts - nextAudioPts) / inputSampleDuration);\n              logger.log(`${delta} ms hole between AAC samples detected,filling it`);\n              if (numMissingFrames > 0) {\n                fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec,track.channelCount);\n                if (!fillFrame) {\n                  fillFrame = unit.subarray();\n                }\n                track.len += numMissingFrames * fillFrame.length;\n              }\n              // if we have frame overlap, overlapping for more than half a frame duraion\n            } else if (delta < -12) {\n              // drop overlapping audio frames... browser will deal with it\n              logger.log(`drop overlapping AAC sample, expected/parsed/delta:${(nextAudioPts/inputTimeScale).toFixed(3)}s/${(pts/inputTimeScale).toFixed(3)}s/${(-delta)}ms`);\n              track.len -= unit.byteLength;\n              continue;\n            }\n            // set PTS/DTS to expected PTS/DTS\n            pts = nextAudioPts;\n          }\n        }\n        // remember first PTS of our audioSamples, ensure value is positive\n        firstPTS = Math.max(0, pts);\n        if(track.len > 0) {\n          /* concatenate the audio data and construct the mdat in place\n            (need 8 more bytes to fill length and mdat type) */\n          let mdatSize = rawMPEG ? track.len : track.len + 8;\n          offset = rawMPEG ? 0 : 8;\n          try {\n            mdat = new Uint8Array(mdatSize);\n          } catch(err) {\n            this.observer.trigger(Event.ERROR, {type : ErrorTypes.MUX_ERROR, details: ErrorDetails.REMUX_ALLOC_ERROR, fatal: false, bytes : mdatSize, reason: `fail allocating audio mdat ${mdatSize}`});\n            return;\n          }\n          if (!rawMPEG) {\n            const view = new DataView(mdat.buffer);\n            view.setUint32(0, mdatSize);\n            mdat.set(MP4.types.mdat, 4);\n          }\n        } else {\n          // no audio samples\n          return;\n        }\n        for (let i = 0; i < numMissingFrames; i++) {\n          fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec,track.channelCount);\n          if (!fillFrame) {\n            logger.log('Unable to get silent frame for given audio codec; duplicating this frame instead.');\n            fillFrame = unit.subarray();\n          }\n          mdat.set(fillFrame, offset);\n          offset += fillFrame.byteLength;\n          mp4Sample = {\n            size: fillFrame.byteLength,\n            cts: 0,\n            duration: 1024,\n            flags: {\n              isLeading: 0,\n              isDependedOn: 0,\n              hasRedundancy: 0,\n              degradPrio: 0,\n              dependsOn: 1,\n            }\n          };\n          outputSamples.push(mp4Sample);\n        }\n      }\n      mdat.set(unit, offset);\n      let unitLen = unit.byteLength;\n      offset += unitLen;\n      //console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${audioSample.pts}/${audioSample.dts}/${initDTS}/${ptsnorm}/${dtsnorm}/${(audioSample.pts/4294967296).toFixed(3)}');\n      mp4Sample = {\n        size: unitLen,\n        cts: 0,\n        duration: 0,\n        flags: {\n          isLeading: 0,\n          isDependedOn: 0,\n          hasRedundancy: 0,\n          degradPrio: 0,\n          dependsOn: 1,\n        }\n      };\n      outputSamples.push(mp4Sample);\n      lastPTS = pts;\n    }\n    var lastSampleDuration = 0;\n    var nbSamples = outputSamples.length;\n    //set last sample duration as being identical to previous sample\n    if (nbSamples >= 2) {\n      lastSampleDuration = outputSamples[nbSamples - 2].duration;\n      mp4Sample.duration = lastSampleDuration;\n    }\n    if (nbSamples) {\n      // next audio sample PTS should be equal to last sample PTS + duration\n      this.nextAudioPts = nextAudioPts = lastPTS + scaleFactor * lastSampleDuration;\n      //logger.log('Audio/PTS/PTSend:' + audioSample.pts.toFixed(0) + '/' + this.nextAacDts.toFixed(0));\n      track.len = 0;\n      track.samples = outputSamples;\n      if (rawMPEG) {\n        moof = new Uint8Array();\n      } else {\n        moof = MP4.moof(track.sequenceNumber++, firstPTS / scaleFactor, track);\n      }\n      track.samples = [];\n      const start = firstPTS / inputTimeScale;\n      const end = nextAudioPts / inputTimeScale;\n      const audioData = {\n        data1: moof,\n        data2: mdat,\n        startPTS: start,\n        endPTS: end,\n        startDTS: start,\n        endDTS: end,\n        type: 'audio',\n        nb: nbSamples\n      };\n      this.observer.trigger(Event.FRAG_PARSING_DATA, audioData);\n      return audioData;\n    }\n    return null;\n  }\n\n  remuxEmptyAudio(track, timeOffset, contiguous, videoData) {\n    let inputTimeScale = track.inputTimeScale,\n        mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale,\n        scaleFactor = inputTimeScale/mp4timeScale,\n        nextAudioPts = this.nextAudioPts,\n\n        // sync with video's timestamp\n        startDTS = (nextAudioPts !== undefined ? nextAudioPts : videoData.startDTS * inputTimeScale) + this._initDTS,\n        endDTS = videoData.endDTS * inputTimeScale + this._initDTS,\n        // one sample's duration value\n        sampleDuration = 1024,\n        frameDuration = scaleFactor * sampleDuration,\n\n        // samples count of this segment's duration\n        nbSamples = Math.ceil((endDTS - startDTS) / frameDuration),\n\n        // silent frame\n        silentFrame = AAC.getSilentFrame(track.manifestCodec || track.codec,track.channelCount);\n\n        logger.warn('remux empty Audio');\n    // Can't remux if we can't generate a silent frame...\n    if (!silentFrame) {\n      logger.trace('Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!');\n      return;\n    }\n\n    let samples = [];\n    for(var i = 0; i < nbSamples; i++) {\n      var stamp = startDTS + i * frameDuration;\n      samples.push({unit: silentFrame, pts: stamp, dts: stamp});\n      track.len += silentFrame.length;\n    }\n    track.samples = samples;\n\n    this.remuxAudio(track, timeOffset, contiguous);\n  }\n\n  remuxID3(track,timeOffset) {\n    var length = track.samples.length, sample;\n    const inputTimeScale = track.inputTimeScale;\n    const initPTS = this._initPTS;\n    const initDTS = this._initDTS;\n    // consume samples\n    if(length) {\n      for(var index = 0; index < length; index++) {\n        sample = track.samples[index];\n        // setting id3 pts, dts to relative time\n        // using this._initPTS and this._initDTS to calculate relative time\n        sample.pts = ((sample.pts - initPTS) / inputTimeScale);\n        sample.dts = ((sample.dts - initDTS) / inputTimeScale);\n      }\n      this.observer.trigger(Event.FRAG_PARSING_METADATA, {\n        samples:track.samples\n      });\n    }\n\n    track.samples = [];\n    timeOffset = timeOffset;\n  }\n\n  remuxText(track,timeOffset) {\n    track.samples.sort(function(a, b) {\n      return (a.pts-b.pts);\n    });\n\n    var length = track.samples.length, sample;\n    const inputTimeScale = track.inputTimeScale;\n    const initPTS = this._initPTS;\n    // consume samples\n    if(length) {\n      for(var index = 0; index < length; index++) {\n        sample = track.samples[index];\n        // setting text pts, dts to relative time\n        // using this._initPTS and this._initDTS to calculate relative time\n        sample.pts = ((sample.pts - initPTS) / inputTimeScale);\n      }\n      this.observer.trigger(Event.FRAG_PARSING_USERDATA, {\n        samples:track.samples\n      });\n    }\n\n    track.samples = [];\n    timeOffset = timeOffset;\n  }\n\n  _PTSNormalize(value, reference) {\n    var offset;\n    if (reference === undefined) {\n      return value;\n    }\n    if (reference < value) {\n      // - 2^33\n      offset = -8589934592;\n    } else {\n      // + 2^33\n      offset = 8589934592;\n    }\n    /* PTS is 33bit (from 0 to 2^33 -1)\n      if diff between value and reference is bigger than half of the amplitude (2^32) then it means that\n      PTS looping occured. fill the gap */\n    while (Math.abs(value - reference) > 4294967296) {\n        value += offset;\n    }\n    return value;\n  }\n\n}\n\nexport default MP4Remuxer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/remux/mp4-remuxer.js"",""/**\n * passthrough remuxer\n*/\nimport Event from '../events';\n\nclass PassThroughRemuxer {\n  constructor(observer) {\n    this.observer = observer;\n  }\n\n  destroy() {\n  }\n\n  resetTimeStamp() {\n  }\n\n  resetInitSegment() {\n  }\n\n  remux(audioTrack,videoTrack,id3Track,textTrack,timeOffset, contiguous,accurateTimeOffset,rawData) {\n    var observer = this.observer;\n    var streamType = '';\n    if (audioTrack) {\n      streamType += 'audio';\n    }\n    if (videoTrack) {\n      streamType += 'video';\n    }\n    observer.trigger(Event.FRAG_PARSING_DATA, {\n      data1: rawData,\n      startPTS: timeOffset,\n      startDTS: timeOffset,\n      type: streamType,\n      nb: 1,\n      dropped : 0\n    });\n    //notify end of parsing\n    observer.trigger(Event.FRAG_PARSED);\n  }\n}\n\nexport default PassThroughRemuxer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/remux/passthrough-remuxer.js"",""/*  inline demuxer.\n *   probe fragments and instantiate appropriate demuxer depending on content type (TSDemuxer, AACDemuxer, ...)\n */\n\nimport Event from '../events';\nimport { ErrorTypes, ErrorDetails } from '../errors';\nimport Decrypter from '../crypt/decrypter';\nimport AACDemuxer from '../demux/aacdemuxer';\nimport MP4Demuxer from '../demux/mp4demuxer';\nimport TSDemuxer from '../demux/tsdemuxer';\nimport MP3Demuxer from '../demux/mp3demuxer';\nimport MP4Remuxer from '../remux/mp4-remuxer';\nimport PassThroughRemuxer from '../remux/passthrough-remuxer';\n\nclass DemuxerInline {\n\n  constructor(observer, typeSupported, config, vendor) {\n    this.observer = observer;\n    this.typeSupported = typeSupported;\n    this.config = config;\n    this.vendor = vendor;\n  }\n\n  destroy() {\n    var demuxer = this.demuxer;\n    if (demuxer) {\n      demuxer.destroy();\n    }\n  }\n\n  push(data, decryptdata, initSegment, audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset, defaultInitPTS) {\n    if ((data.byteLength > 0) && (decryptdata != null) && (decryptdata.key != null) && (decryptdata.method === 'AES-128')) {\n      let decrypter = this.decrypter;\n      if (decrypter == null) {\n        decrypter = this.decrypter = new Decrypter(this.observer, this.config);\n      }\n      var localthis = this;\n      // performance.now() not available on WebWorker, at least on Safari Desktop\n      var startTime;\n      try {\n        startTime = performance.now();\n      } catch (error) {\n        startTime = Date.now();\n      }\n      decrypter.decrypt(data, decryptdata.key.buffer, decryptdata.iv.buffer, function (decryptedData) {\n        var endTime;\n        try {\n          endTime = performance.now();\n        } catch (error) {\n          endTime = Date.now();\n        }\n        localthis.observer.trigger(Event.FRAG_DECRYPTED, { stats: { tstart: startTime, tdecrypt: endTime } });\n        localthis.pushDecrypted(new Uint8Array(decryptedData), decryptdata, new Uint8Array(initSegment), audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset, defaultInitPTS);\n      });\n    } else {\n      this.pushDecrypted(new Uint8Array(data), decryptdata, new Uint8Array(initSegment), audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset, defaultInitPTS);\n    }\n  }\n\n  pushDecrypted(data, decryptdata, initSegment, audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset, defaultInitPTS) {\n    var demuxer = this.demuxer;\n    if (!demuxer ||\n      // in case of continuity change, we might switch from content type (AAC container to TS container for example)\n      // so let's check that current demuxer is still valid\n      (discontinuity && !this.probe(data))) {\n      const observer = this.observer;\n      const typeSupported = this.typeSupported;\n      const config = this.config;\n      // probing order is AAC/MP3/TS/MP4\n      const muxConfig = [{ demux: AACDemuxer, remux: MP4Remuxer },\n      { demux: MP3Demuxer, remux: MP4Remuxer },\n      { demux: TSDemuxer, remux: MP4Remuxer },\n      { demux: MP4Demuxer, remux: PassThroughRemuxer }];\n\n      // probe for content type\n      for (let i = 0, len = muxConfig.length; i < len; i++) {\n        const mux = muxConfig[i];\n        const probe = mux.demux.probe;\n        if (probe(data)) {\n          const remuxer = this.remuxer = new mux.remux(observer, config, typeSupported, this.vendor);\n          demuxer = new mux.demux(observer, remuxer, config, typeSupported);\n          this.probe = probe;\n          break;\n        }\n      }\n      if (!demuxer) {\n        observer.trigger(Event.ERROR, { type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: true, reason: 'no demux matching with content found' });\n        return;\n      }\n      this.demuxer = demuxer;\n    }\n    const remuxer = this.remuxer;\n\n    if (discontinuity || trackSwitch) {\n      demuxer.resetInitSegment(initSegment, audioCodec, videoCodec, duration);\n      remuxer.resetInitSegment();\n    }\n    if (discontinuity) {\n      demuxer.resetTimeStamp(defaultInitPTS);\n      remuxer.resetTimeStamp(defaultInitPTS);\n    }\n    if (typeof demuxer.setDecryptData === 'function') {\n      demuxer.setDecryptData(decryptdata);\n    }\n    demuxer.append(data, timeOffset, contiguous, accurateTimeOffset);\n  }\n}\n\nexport default DemuxerInline;\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/demuxer-inline.js"",""/*\n*\n* All objects in the event handling chain should inherit from this class\n*\n*/\n\nimport {logger} from './utils/logger';\nimport {ErrorTypes, ErrorDetails} from './errors';\nimport Event from './events';\n\nclass EventHandler {\n\n  constructor(hls, ...events) {\n    this.hls = hls;\n    this.onEvent = this.onEvent.bind(this);\n    this.handledEvents = events;\n    this.useGenericHandler = true;\n\n    this.registerListeners();\n  }\n\n  destroy() {\n    this.unregisterListeners();\n  }\n\n  isEventHandler() {\n    return typeof this.handledEvents === 'object' && this.handledEvents.length && typeof this.onEvent === 'function';\n  }\n\n  registerListeners() {\n    if (this.isEventHandler()) {\n      this.handledEvents.forEach(function(event) {\n        if (event === 'hlsEventGeneric') {\n          throw new Error('Forbidden event name: ' + event);\n        }\n        this.hls.on(event, this.onEvent);\n      }, this);\n    }\n  }\n\n  unregisterListeners() {\n    if (this.isEventHandler()) {\n      this.handledEvents.forEach(function(event) {\n        this.hls.off(event, this.onEvent);\n      }, this);\n    }\n  }\n\n  /**\n   * arguments: event (string), data (any)\n   */\n  onEvent(event, data) {\n    this.onEventGeneric(event, data);\n  }\n\n  onEventGeneric(event, data) {\n    var eventToFunction = function(event, data) {\n      var funcName = 'on' + event.replace('hls', '');\n      if (typeof this[funcName] !== 'function') {\n        throw new Error(`Event ${event} has no generic handler in this ${this.constructor.name} class (tried ${funcName})`);\n      }\n      return this[funcName].bind(this, data);\n    };\n    try {\n      eventToFunction.call(this, event, data).call();\n    } catch (err) {\n      logger.error(`internal error happened while processing ${event}:${err.message}`);\n      this.hls.trigger(Event.ERROR, {type: ErrorTypes.OTHER_ERROR, details: ErrorDetails.INTERNAL_EXCEPTION, fatal: false, event : event, err : err});\n    }\n  }\n}\n\nexport default EventHandler;\n\n\n\n// WEBPACK FOOTER //\n// ./src/event-handler.js"",""const DECIMAL_RESOLUTION_REGEX = /^(\\d+)x(\\d+)$/;\nconst ATTR_LIST_REGEX = /\\s*(.+?)\\s*=((?:\\\"".*?\\\"")|.*?)(?:,|$)/g;\n\n// adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js\nclass AttrList {\n\n  constructor(attrs) {\n    if (typeof attrs === 'string') {\n      attrs = AttrList.parseAttrList(attrs);\n    }\n    for(var attr in attrs){\n      if(attrs.hasOwnProperty(attr)) {\n        this[attr] = attrs[attr];\n      }\n    }\n  }\n\n  decimalInteger(attrName) {\n    const intValue = parseInt(this[attrName], 10);\n    if (intValue > Number.MAX_SAFE_INTEGER) {\n      return Infinity;\n    }\n    return intValue;\n  }\n\n  hexadecimalInteger(attrName) {\n    if(this[attrName]) {\n      let stringValue = (this[attrName] || '0x').slice(2);\n      stringValue = ((stringValue.length & 1) ? '0' : '') + stringValue;\n\n      const value = new Uint8Array(stringValue.length / 2);\n      for (let i = 0; i < stringValue.length / 2; i++) {\n        value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);\n      }\n      return value;\n    } else {\n      return null;\n    }\n  }\n\n  hexadecimalIntegerAsNumber(attrName) {\n    const intValue = parseInt(this[attrName], 16);\n    if (intValue > Number.MAX_SAFE_INTEGER) {\n      return Infinity;\n    }\n    return intValue;\n  }\n\n  decimalFloatingPoint(attrName) {\n    return parseFloat(this[attrName]);\n  }\n\n  enumeratedString(attrName) {\n    return this[attrName];\n  }\n\n  decimalResolution(attrName) {\n    const res = DECIMAL_RESOLUTION_REGEX.exec(this[attrName]);\n    if (res === null) {\n      return undefined;\n    }\n    return {\n      width: parseInt(res[1], 10),\n      height: parseInt(res[2], 10)\n    };\n  }\n\n  static parseAttrList(input) {\n    var match, attrs = {};\n    ATTR_LIST_REGEX.lastIndex = 0;\n    while ((match = ATTR_LIST_REGEX.exec(input)) !== null) {\n      var value = match[2], quote = '\""';\n\n      if (value.indexOf(quote) === 0 &&\n          value.lastIndexOf(quote) === (value.length-1)) {\n        value = value.slice(1, -1);\n      }\n      attrs[match[1]] = value;\n    }\n    return attrs;\n  }\n\n}\n\nexport default AttrList;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/attr-list.js"",""// from http://mp4ra.org/codecs.html\nconst sampleEntryCodesISO = {\n    audio: {\n        'a3ds': true,\n        'ac-3': true,\n        'ac-4': true,\n        'alac': true,\n        'alaw': true,\n        'dra1': true,\n        'dts+': true,\n        'dts-': true,\n        'dtsc': true,\n        'dtse': true,\n        'dtsh': true,\n        'ec-3': true,\n        'enca': true,\n        'g719': true,\n        'g726': true,\n        'm4ae': true,\n        'mha1': true,\n        'mha2': true,\n        'mhm1': true,\n        'mhm2': true,\n        'mlpa': true,\n        'mp4a': true,\n        'raw ': true,\n        'Opus': true,\n        'samr': true,\n        'sawb': true,\n        'sawp': true,\n        'sevc': true,\n        'sqcp': true,\n        'ssmv': true,\n        'twos': true,\n        'ulaw': true\n    },\n    video: {\n        'avc1': true,\n        'avc2': true,\n        'avc3': true,\n        'avc4': true,\n        'avcp': true,\n        'drac': true,\n        'dvav': true,\n        'dvhe': true,\n        'encv': true,\n        'hev1': true,\n        'hvc1': true,\n        'mjp2': true,\n        'mp4v': true,\n        'mvc1': true,\n        'mvc2': true,\n        'mvc3': true,\n        'mvc4': true,\n        'resv': true,\n        'rv60': true,\n        's263': true,\n        'svc1': true,\n        'svc2': true,\n        'vc-1': true,\n        'vp08': true,\n        'vp09': true\n    }\n};\n\nfunction isCodecType(codec, type) {\n    const typeCodes = sampleEntryCodesISO[type];\n    return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;\n}\n\nfunction isCodecSupportedInMp4(codec) {\n    return MediaSource.isTypeSupported(`video/mp4;codecs=\""${codec}\""`);\n}\n\nexport { isCodecType, isCodecSupportedInMp4 };\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/codecs.js"",""/**\n * Playlist Loader\n*/\n\nimport URLToolkit from 'url-toolkit';\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport AttrList from '../utils/attr-list';\nimport {logger} from '../utils/logger';\nimport {isCodecType} from '../utils/codecs';\n\n// https://regex101.com is your friend\nconst MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\\n\\r]*)[\\r\\n]+([^\\r\\n]+)/g;\nconst MASTER_PLAYLIST_MEDIA_REGEX = /#EXT-X-MEDIA:(.*)/g;\n\nconst LEVEL_PLAYLIST_REGEX_FAST = new RegExp([\n  /#EXTINF:(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?/.source, // duration (#EXTINF:<duration>,<title>), group 1 => duration, group 2 => title\n  /|(?!#)(\\S+)/.source,                          // segment URI, group 3 => the URI (note newline is not eaten)\n  /|#EXT-X-BYTERANGE:*(.+)/.source,              // next segment's byterange, group 4 => range spec (x@y)\n  /|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,       // next segment's program date/time group 5 => the datetime spec\n  /|#.*/.source                                  // All other non-segment oriented tags will match with all groups empty\n].join(''), 'g');\n\nconst LEVEL_PLAYLIST_REGEX_SLOW = /(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\\d+))|(?:#EXT-X-(TARGETDURATION): *(\\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\\r?\\n?/;\n\nclass LevelKey {\n\n  constructor() {\n    this.method = null;\n    this.key = null;\n    this.iv = null;\n    this._uri = null;\n  }\n\n  get uri() {\n    if (!this._uri && this.reluri) {\n      this._uri = URLToolkit.buildAbsoluteURL(this.baseuri, this.reluri, { alwaysNormalize: true });\n    }\n    return this._uri;\n  }\n\n}\n\nclass Fragment {\n\n  constructor() {\n    this._url = null;\n    this._byteRange = null;\n    this._decryptdata = null;\n    this.tagList = [];\n  }\n\n  get url() {\n    if (!this._url && this.relurl) {\n      this._url = URLToolkit.buildAbsoluteURL(this.baseurl, this.relurl, { alwaysNormalize: true });\n    }\n    return this._url;\n  }\n\n  set url(value) {\n    this._url = value;\n  }\n\n  get programDateTime() {\n    if (!this._programDateTime && this.rawProgramDateTime) {\n      this._programDateTime = new Date(Date.parse(this.rawProgramDateTime));\n    }\n    return this._programDateTime;\n  }\n\n  get byteRange() {\n    if (!this._byteRange) {\n      let byteRange = this._byteRange = [];\n      if (this.rawByteRange) {\n        const params = this.rawByteRange.split('@', 2);\n        if (params.length === 1) {\n          const lastByteRangeEndOffset = this.lastByteRangeEndOffset;\n          byteRange[0] = lastByteRangeEndOffset ? lastByteRangeEndOffset : 0;\n        } else {\n          byteRange[0] = parseInt(params[1]);\n        }\n        byteRange[1] = parseInt(params[0]) + byteRange[0];\n      }\n    }\n    return this._byteRange;\n  }\n\n  get byteRangeStartOffset() {\n    return this.byteRange[0];\n  }\n\n  get byteRangeEndOffset() {\n    return this.byteRange[1];\n  }\n\n  get decryptdata() {\n    if (!this._decryptdata) {\n      this._decryptdata = this.fragmentDecryptdataFromLevelkey(this.levelkey, this.sn);\n    }\n    return this._decryptdata;\n  }\n\n  /**\n   * Utility method for parseLevelPlaylist to create an initialization vector for a given segment\n   * @returns {Uint8Array}\n   */\n  createInitializationVector(segmentNumber) {\n    var uint8View = new Uint8Array(16);\n\n    for (var i = 12; i < 16; i++) {\n      uint8View[i] = (segmentNumber >> 8 * (15 - i)) & 0xff;\n    }\n\n    return uint8View;\n  }\n\n  /**\n   * Utility method for parseLevelPlaylist to get a fragment's decryption data from the currently parsed encryption key data\n   * @param levelkey - a playlist's encryption info\n   * @param segmentNumber - the fragment's segment number\n   * @returns {*} - an object to be applied as a fragment's decryptdata\n   */\n  fragmentDecryptdataFromLevelkey(levelkey, segmentNumber) {\n    var decryptdata = levelkey;\n\n    if (levelkey && levelkey.method && levelkey.uri && !levelkey.iv) {\n      decryptdata = new LevelKey();\n      decryptdata.method = levelkey.method;\n      decryptdata.baseuri = levelkey.baseuri;\n      decryptdata.reluri = levelkey.reluri;\n      decryptdata.iv = this.createInitializationVector(segmentNumber);\n    }\n\n    return decryptdata;\n  }\n\n  cloneObj(obj) {\n    return JSON.parse(JSON.stringify(obj));\n  }\n}\n\nclass PlaylistLoader extends EventHandler {\n\n  constructor(hls) {\n    super(hls,\n      Event.MANIFEST_LOADING,\n      Event.LEVEL_LOADING,\n      Event.AUDIO_TRACK_LOADING,\n      Event.SUBTITLE_TRACK_LOADING);\n    this.loaders = {};\n  }\n\n  destroy() {\n    for (let loaderName in this.loaders) {\n      let loader = this.loaders[loaderName];\n      if (loader) {\n        loader.destroy();\n      }\n    }\n    this.loaders = {};\n    EventHandler.prototype.destroy.call(this);\n  }\n\n  onManifestLoading(data) {\n    this.load(data.url, { type : 'manifest'});\n  }\n\n  onLevelLoading(data) {\n    this.load(data.url, { type : 'level', level : data.level, id : data.id});\n  }\n\n  onAudioTrackLoading(data) {\n    this.load(data.url, { type : 'audioTrack', id : data.id});\n  }\n\n  onSubtitleTrackLoading(data) {\n    this.load(data.url, { type : 'subtitleTrack', id : data.id});\n  }\n\n  load(url, context) {\n    let loader = this.loaders[context.type];\n    if (loader) {\n      let loaderContext = loader.context;\n      if (loaderContext && loaderContext.url === url) {\n        logger.trace(`playlist request ongoing`);\n        return;\n      } else {\n        logger.warn(`abort previous loader for type:${context.type}`);\n        loader.abort();\n      }\n    }\n    let config = this.hls.config,\n        retry,\n        timeout,\n        retryDelay,\n        maxRetryDelay;\n    if(context.type === 'manifest') {\n      retry = config.manifestLoadingMaxRetry;\n      timeout = config.manifestLoadingTimeOut;\n      retryDelay = config.manifestLoadingRetryDelay;\n      maxRetryDelay = config.manifestLoadingMaxRetryTimeout;\n    } else {\n      retry = config.levelLoadingMaxRetry;\n      timeout = config.levelLoadingTimeOut;\n      retryDelay = config.levelLoadingRetryDelay;\n      maxRetryDelay = config.levelLoadingMaxRetryTimeout;\n      logger.log(`loading playlist for ${context.type} ${context.level || context.id}`);\n    }\n    loader  = this.loaders[context.type] = context.loader = typeof(config.pLoader) !== 'undefined' ? new config.pLoader(config) : new config.loader(config);\n    context.url = url;\n    context.responseType = '';\n\n    let loaderConfig, loaderCallbacks;\n    loaderConfig = { timeout : timeout, maxRetry : retry , retryDelay : retryDelay, maxRetryDelay : maxRetryDelay};\n    loaderCallbacks = { onSuccess : this.loadsuccess.bind(this), onError :this.loaderror.bind(this), onTimeout : this.loadtimeout.bind(this)};\n    loader.load(context,loaderConfig,loaderCallbacks);\n  }\n\n  resolve(url, baseUrl) {\n    return URLToolkit.buildAbsoluteURL(baseUrl, url, { alwaysNormalize: true });\n  }\n\n  parseMasterPlaylist(string, baseurl) {\n    let levels = [], result;\n    MASTER_PLAYLIST_REGEX.lastIndex = 0;\n\n    function setCodecs(codecs, level) {\n      ['video', 'audio'].forEach((type) => {\n        const filtered = codecs.filter((codec) => isCodecType(codec, type));\n        if (filtered.length) {\n          const preferred = filtered.filter((codec) => {\n            return codec.lastIndexOf('avc1', 0) === 0 || codec.lastIndexOf('mp4a', 0) === 0;\n          });\n          level[`${type}Codec`] = preferred.length > 0 ? preferred[0] : filtered[0];\n\n          // remove from list\n          codecs = codecs.filter((codec) => filtered.indexOf(codec) === -1);\n        }\n      });\n\n      level.unknownCodecs = codecs;\n    }\n\n    while ((result = MASTER_PLAYLIST_REGEX.exec(string)) != null){\n      const level = {};\n\n      var attrs = level.attrs = new AttrList(result[1]);\n      level.url = this.resolve(result[2], baseurl);\n\n      var resolution = attrs.decimalResolution('RESOLUTION');\n      if(resolution) {\n        level.width = resolution.width;\n        level.height = resolution.height;\n      }\n      level.bitrate = attrs.decimalInteger('AVERAGE-BANDWIDTH') || attrs.decimalInteger('BANDWIDTH');\n      level.name = attrs.NAME;\n\n      setCodecs([].concat((attrs.CODECS || '').split(/[ ,]+/)), level);\n\n      if (level.videoCodec && level.videoCodec.indexOf('avc1') !== -1) {\n        level.videoCodec = this.avc1toavcoti(level.videoCodec);\n      }\n\n      levels.push(level);\n    }\n    return levels;\n  }\n\n  parseMasterPlaylistMedia(string, baseurl, type, audioCodec=null) {\n    let result, medias = [], id = 0;\n    MASTER_PLAYLIST_MEDIA_REGEX.lastIndex = 0;\n    while ((result = MASTER_PLAYLIST_MEDIA_REGEX.exec(string)) != null){\n      const media = {};\n      var attrs = new AttrList(result[1]);\n      if(attrs.TYPE === type) {\n        media.groupId = attrs['GROUP-ID'];\n        media.name = attrs.NAME;\n        media.type = type;\n        media.default = (attrs.DEFAULT === 'YES');\n        media.autoselect = (attrs.AUTOSELECT === 'YES');\n        media.forced = (attrs.FORCED === 'YES');\n        if (attrs.URI) {\n          media.url = this.resolve(attrs.URI, baseurl);\n        }\n        media.lang = attrs.LANGUAGE;\n        if(!media.name) {\n            media.name = media.lang;\n        }\n        if (audioCodec) {\n          media.audioCodec = audioCodec;\n        }\n        media.id = id++;\n        medias.push(media);\n      }\n    }\n    return medias;\n  }\n\n  avc1toavcoti(codec) {\n    var result, avcdata = codec.split('.');\n    if (avcdata.length > 2) {\n      result = avcdata.shift() + '.';\n      result += parseInt(avcdata.shift()).toString(16);\n      result += ('000' + parseInt(avcdata.shift()).toString(16)).substr(-4);\n    } else {\n      result = codec;\n    }\n    return result;\n  }\n\n  parseLevelPlaylist(string, baseurl, id, type) {\n    var currentSN = 0,\n        totalduration = 0,\n        level = {type: null, version: null, url: baseurl, fragments: [], live: true, startSN: 0},\n        levelkey = new LevelKey(),\n        cc = 0,\n        prevFrag = null,\n        frag = new Fragment(),\n        result,\n        i;\n\n    LEVEL_PLAYLIST_REGEX_FAST.lastIndex = 0;\n\n    while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {\n      const duration = result[1];\n      if (duration) { // INF\n        frag.duration = parseFloat(duration);\n        // avoid sliced strings    https://github.com/video-dev/hls.js/issues/939\n        const title = (' ' + result[2]).slice(1);\n        frag.title = title ? title : null;\n        frag.tagList.push(title ? [ 'INF',duration,title ] : [ 'INF',duration ]);\n      } else if (result[3]) { // url\n        if (!isNaN(frag.duration)) {\n          const sn = currentSN++;\n          frag.type = type;\n          frag.start = totalduration;\n          frag.levelkey = levelkey;\n          frag.sn = sn;\n          frag.level = id;\n          frag.cc = cc;\n          frag.baseurl = baseurl;\n          // avoid sliced strings    https://github.com/video-dev/hls.js/issues/939\n          frag.relurl = (' ' + result[3]).slice(1);\n\n          level.fragments.push(frag);\n          prevFrag = frag;\n          totalduration += frag.duration;\n\n          frag = new Fragment();\n        }\n      } else if (result[4]) { // X-BYTERANGE\n        frag.rawByteRange = (' ' + result[4]).slice(1);\n        if (prevFrag) {\n          const lastByteRangeEndOffset = prevFrag.byteRangeEndOffset;\n          if (lastByteRangeEndOffset) {\n            frag.lastByteRangeEndOffset = lastByteRangeEndOffset;\n          }\n        }\n      } else if (result[5]) { // PROGRAM-DATE-TIME\n        // avoid sliced strings    https://github.com/video-dev/hls.js/issues/939\n        frag.rawProgramDateTime = (' ' + result[5]).slice(1);\n        frag.tagList.push(['PROGRAM-DATE-TIME', frag.rawProgramDateTime]);\n        if (level.programDateTime === undefined) {\n          level.programDateTime = new Date(new Date(Date.parse(result[5])) - 1000 * totalduration);\n        }\n      } else {\n        result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);\n        for (i = 1; i < result.length; i++) {\n          if (result[i] !== undefined) {\n            break;\n          }\n        }\n\n        // avoid sliced strings    https://github.com/video-dev/hls.js/issues/939\n        const value1 = (' ' + result[i+1]).slice(1);\n        const value2 = (' ' + result[i+2]).slice(1);\n\n        switch (result[i]) {\n          case '#':\n            frag.tagList.push(value2 ? [ value1,value2 ] : [ value1 ]);\n            break;\n          case 'PLAYLIST-TYPE':\n            level.type = value1.toUpperCase();\n            break;\n          case 'MEDIA-SEQUENCE':\n            currentSN = level.startSN = parseInt(value1);\n            break;\n          case 'TARGETDURATION':\n            level.targetduration = parseFloat(value1);\n            break;\n          case 'VERSION':\n            level.version = parseInt(value1);\n            break;\n          case 'EXTM3U':\n            break;\n          case 'ENDLIST':\n            level.live = false;\n            break;\n          case 'DIS':\n            cc++;\n            frag.tagList.push(['DIS']);\n            break;\n          case 'DISCONTINUITY-SEQ':\n            cc = parseInt(value1);\n            break;\n          case 'KEY':\n            // https://tools.ietf.org/html/draft-pantos-http-live-streaming-08#section-3.4.4\n            var decryptparams = value1;\n            var keyAttrs = new AttrList(decryptparams);\n            var decryptmethod = keyAttrs.enumeratedString('METHOD'),\n                decrypturi = keyAttrs.URI,\n                decryptiv = keyAttrs.hexadecimalInteger('IV');\n            if (decryptmethod) {\n              levelkey = new LevelKey();\n              if ((decrypturi) && (['AES-128', 'SAMPLE-AES'].indexOf(decryptmethod) >= 0)) {\n                levelkey.method = decryptmethod;\n                // URI to get the key\n                levelkey.baseuri = baseurl;\n                levelkey.reluri = decrypturi;\n                levelkey.key = null;\n                // Initialization Vector (IV)\n                levelkey.iv = decryptiv;\n              }\n            }\n            break;\n          case 'START':\n            let startParams = value1;\n            let startAttrs = new AttrList(startParams);\n            let startTimeOffset = startAttrs.decimalFloatingPoint('TIME-OFFSET');\n            //TIME-OFFSET can be 0\n            if ( !isNaN(startTimeOffset) ) {\n              level.startTimeOffset = startTimeOffset;\n            }\n            break;\n          case 'MAP':\n            let mapAttrs = new AttrList(value1);\n            frag.relurl = mapAttrs.URI;\n            frag.rawByteRange = mapAttrs.BYTERANGE;\n            frag.baseurl = baseurl;\n            frag.level = id;\n            frag.type = type;\n            frag.sn = 'initSegment';\n            level.initSegment = frag;\n            frag = new Fragment();\n            break;\n          default:\n            logger.warn(`line parsed but not handled: ${result}`);\n            break;\n        }\n      }\n    }\n    frag = prevFrag;\n    //logger.log('found ' + level.fragments.length + ' fragments');\n    if(frag && !frag.relurl) {\n      level.fragments.pop();\n      totalduration-=frag.duration;\n    }\n    level.totalduration = totalduration;\n    level.averagetargetduration = totalduration / level.fragments.length;\n    level.endSN = currentSN - 1;\n    level.startCC = level.fragments[0] ? level.fragments[0].cc : 0;\n    level.endCC = cc;\n    return level;\n  }\n\n  loadsuccess(response, stats, context, networkDetails=null) {\n    var string = response.data,\n        url = response.url,\n        type = context.type,\n        id = context.id,\n        level = context.level,\n        hls = this.hls;\n\n    this.loaders[type] = undefined;\n    // responseURL not supported on some browsers (it is used to detect URL redirection)\n    // data-uri mode also not supported (but no need to detect redirection)\n    if (url === undefined || url.indexOf('data:') === 0) {\n      // fallback to initial URL\n      url = context.url;\n    }\n    stats.tload = performance.now();\n    //stats.mtime = new Date(target.getResponseHeader('Last-Modified'));\n    if (string.indexOf('#EXTM3U') === 0) {\n      if (string.indexOf('#EXTINF:') > 0) {\n        let isLevel = (type !== 'audioTrack' && type !== 'subtitleTrack'),\n            levelId = !isNaN(level) ? level : !isNaN(id) ? id : 0,\n            levelDetails = this.parseLevelPlaylist(string, url, levelId, (type === 'audioTrack' ? 'audio' : (type === 'subtitleTrack' ? 'subtitle' : 'main') ));\n            levelDetails.tload = stats.tload;\n        if (type === 'manifest') {\n        // first request, stream manifest (no master playlist), fire manifest loaded event with level details\n          hls.trigger(Event.MANIFEST_LOADED, {levels: [{url: url, details : levelDetails}], audioTracks : [], url: url, stats: stats, networkDetails: networkDetails});\n        }\n        stats.tparsed = performance.now();\n        if (levelDetails.targetduration) {\n          if (isLevel) {\n            hls.trigger(Event.LEVEL_LOADED, {details: levelDetails, level: level || 0, id: id || 0, stats: stats, networkDetails: networkDetails});\n          } else {\n            if (type === 'audioTrack') {\n              hls.trigger(Event.AUDIO_TRACK_LOADED, {details: levelDetails, id: id, stats: stats, networkDetails: networkDetails});\n            }\n            else if (type === 'subtitleTrack') {\n              hls.trigger(Event.SUBTITLE_TRACK_LOADED, {details: levelDetails, id: id, stats: stats, networkDetails: networkDetails});\n            }\n          }\n        } else {\n          hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: url, reason: 'invalid targetduration', networkDetails: networkDetails});\n        }\n      } else {\n        let levels = this.parseMasterPlaylist(string, url);\n        // multi level playlist, parse level info\n        if (levels.length) {\n          let audioTracks = this.parseMasterPlaylistMedia(string, url, 'AUDIO', levels[0].audioCodec);\n          let subtitles = this.parseMasterPlaylistMedia(string, url, 'SUBTITLES');\n          if (audioTracks.length) {\n            // check if we have found an audio track embedded in main playlist (audio track without URI attribute)\n            let embeddedAudioFound = false;\n            audioTracks.forEach(audioTrack => {\n              if(!audioTrack.url) {\n                embeddedAudioFound = true;\n              }\n            });\n            // if no embedded audio track defined, but audio codec signaled in quality level, we need to signal this main audio track\n            // this could happen with playlists with alt audio rendition in which quality levels (main) contains both audio+video. but with mixed audio track not signaled\n            if (embeddedAudioFound === false && levels[0].audioCodec && !levels[0].attrs.AUDIO) {\n              logger.log('audio codec signaled in quality level, but no embedded audio track signaled, create one');\n              audioTracks.unshift({ type : 'main', name : 'main'});\n            }\n          }\n          hls.trigger(Event.MANIFEST_LOADED, {levels, audioTracks, subtitles, url, stats, networkDetails});\n        } else {\n          hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: url, reason: 'no level found in manifest', networkDetails: networkDetails});\n        }\n      }\n    } else {\n      hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: url, reason: 'no EXTM3U delimiter', networkDetails: networkDetails});\n    }\n  }\n\n  loaderror(response, context, networkDetails=null) {\n    var details, fatal,loader = context.loader;\n    switch(context.type) {\n      case 'manifest':\n        details = ErrorDetails.MANIFEST_LOAD_ERROR;\n        fatal = true;\n        break;\n      case 'level':\n        details = ErrorDetails.LEVEL_LOAD_ERROR;\n        fatal = false;\n        break;\n      case 'audioTrack':\n        details = ErrorDetails.AUDIO_TRACK_LOAD_ERROR;\n        fatal = false;\n        break;\n    }\n    if (loader) {\n      loader.abort();\n      this.loaders[context.type] = undefined;\n    }\n    this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: details, fatal: fatal, url: loader.url, loader: loader, response: response, context : context, networkDetails: networkDetails});\n  }\n\n  loadtimeout(stats, context, networkDetails=null) {\n    var details, fatal, loader = context.loader;\n    switch(context.type) {\n      case 'manifest':\n        details = ErrorDetails.MANIFEST_LOAD_TIMEOUT;\n        fatal = true;\n        break;\n      case 'level':\n        details = ErrorDetails.LEVEL_LOAD_TIMEOUT;\n        fatal = false;\n        break;\n      case 'audioTrack':\n        details = ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT;\n        fatal = false;\n        break;\n    }\n    if (loader) {\n      loader.abort();\n      this.loaders[context.type] = undefined;\n    }\n    this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: details, fatal: fatal, url: loader.url, loader: loader, context : context, networkDetails: networkDetails});\n  }\n}\n\nexport default PlaylistLoader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/loader/playlist-loader.js"",""/*\n * Fragment Loader\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport {logger} from '../utils/logger';\n\nclass FragmentLoader extends EventHandler {\n\n  constructor(hls) {\n    super(hls, Event.FRAG_LOADING);\n    this.loaders = {};\n  }\n\n  destroy() {\n    let loaders = this.loaders;\n    for (let loaderName in loaders) {\n      let loader = loaders[loaderName];\n      if (loader) {\n        loader.destroy();\n      }\n    }\n    this.loaders = {};\n    EventHandler.prototype.destroy.call(this);\n  }\n\n  onFragLoading(data) {\n    let frag = data.frag,\n        type = frag.type,\n        loader = this.loaders[type],\n        config = this.hls.config;\n\n    frag.loaded = 0;\n    if (loader) {\n      logger.warn(`abort previous fragment loader for type:${type}`);\n      loader.abort();\n    }\n    loader  = this.loaders[type] = frag.loader = typeof(config.fLoader) !== 'undefined' ? new config.fLoader(config) : new config.loader(config);\n\n    let loaderContext, loaderConfig, loaderCallbacks;\n    loaderContext = { url : frag.url, frag : frag, responseType : 'arraybuffer', progressData : false};\n    let start = frag.byteRangeStartOffset, end = frag.byteRangeEndOffset;\n    if (!isNaN(start) && !isNaN(end)) {\n      loaderContext.rangeStart = start;\n      loaderContext.rangeEnd = end;\n    }\n    loaderConfig = { timeout : config.fragLoadingTimeOut, maxRetry : 0 , retryDelay : 0, maxRetryDelay : config.fragLoadingMaxRetryTimeout};\n    loaderCallbacks = { onSuccess : this.loadsuccess.bind(this), onError :this.loaderror.bind(this), onTimeout : this.loadtimeout.bind(this), onProgress: this.loadprogress.bind(this)};\n    loader.load(loaderContext,loaderConfig,loaderCallbacks);\n  }\n\n  loadsuccess(response, stats, context, networkDetails=null) {\n    let payload = response.data, frag = context.frag;\n    // detach fragment loader on load success\n    frag.loader = undefined;\n    this.loaders[frag.type] = undefined;\n    this.hls.trigger(Event.FRAG_LOADED, {payload: payload, frag: frag, stats: stats, networkDetails: networkDetails});\n  }\n\n  loaderror(response, context, networkDetails=null) {\n    let loader = context.loader;\n    if (loader) {\n      loader.abort();\n    }\n    this.loaders[context.type] = undefined;\n    this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.FRAG_LOAD_ERROR, fatal: false, frag: context.frag, response: response, networkDetails: networkDetails});\n  }\n\n  loadtimeout(stats, context, networkDetails=null) {\n    let loader = context.loader;\n    if (loader) {\n      loader.abort();\n    }\n    this.loaders[context.type] = undefined;\n    this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.FRAG_LOAD_TIMEOUT, fatal: false, frag: context.frag, networkDetails: networkDetails});\n  }\n\n  // data will be used for progressive parsing\n  loadprogress(stats, context, data, networkDetails=null) { // jshint ignore:line\n    let frag = context.frag;\n    frag.loaded = stats.loaded;\n    this.hls.trigger(Event.FRAG_LOAD_PROGRESS, {frag: frag, stats: stats, networkDetails: networkDetails});\n  }\n}\n\nexport default FragmentLoader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/loader/fragment-loader.js"",""/*\n * Decrypt key Loader\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport {logger} from '../utils/logger';\n\nclass KeyLoader extends EventHandler {\n\n  constructor(hls) {\n    super(hls, Event.KEY_LOADING);\n    this.loaders = {};\n    this.decryptkey = null;\n    this.decrypturl = null;\n  }\n\n  destroy() {\n    for (let loaderName in this.loaders) {\n      let loader = this.loaders[loaderName];\n      if (loader) {\n        loader.destroy();\n      }\n    }\n    this.loaders = {};\n    EventHandler.prototype.destroy.call(this);\n  }\n\n  onKeyLoading(data) {\n    let frag = data.frag,\n        type = frag.type,\n        loader = this.loaders[type],\n        decryptdata = frag.decryptdata,\n        uri = decryptdata.uri;\n        // if uri is different from previous one or if decrypt key not retrieved yet\n      if (uri !== this.decrypturl || this.decryptkey === null) {\n        let config = this.hls.config;\n\n        if (loader) {\n          logger.warn(`abort previous key loader for type:${type}`);\n          loader.abort();\n        }\n        frag.loader = this.loaders[type] = new config.loader(config);\n        this.decrypturl = uri;\n        this.decryptkey = null;\n\n        let loaderContext, loaderConfig, loaderCallbacks;\n        loaderContext = { url : uri, frag : frag, responseType : 'arraybuffer'};\n        loaderConfig = { timeout : config.fragLoadingTimeOut, maxRetry : config.fragLoadingMaxRetry , retryDelay : config.fragLoadingRetryDelay, maxRetryDelay : config.fragLoadingMaxRetryTimeout};\n        loaderCallbacks = { onSuccess : this.loadsuccess.bind(this), onError :this.loaderror.bind(this), onTimeout : this.loadtimeout.bind(this)};\n        frag.loader.load(loaderContext,loaderConfig,loaderCallbacks);\n      } else if (this.decryptkey) {\n        // we already loaded this key, return it\n        decryptdata.key = this.decryptkey;\n        this.hls.trigger(Event.KEY_LOADED, {frag: frag});\n      }\n  }\n\n  loadsuccess(response, stats, context) {\n    let frag = context.frag;\n    this.decryptkey = frag.decryptdata.key = new Uint8Array(response.data);\n    // detach fragment loader on load success\n    frag.loader = undefined;\n    this.loaders[frag.type] = undefined;\n    this.hls.trigger(Event.KEY_LOADED, {frag: frag});\n  }\n\n  loaderror(response, context) {\n    let frag = context.frag,\n        loader = frag.loader;\n    if (loader) {\n      loader.abort();\n    }\n    this.loaders[context.type] = undefined;\n    this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.KEY_LOAD_ERROR, fatal: false, frag: frag, response: response});\n  }\n\n  loadtimeout(stats, context) {\n    let frag = context.frag,\n        loader = frag.loader;\n    if (loader) {\n      loader.abort();\n    }\n    this.loaders[context.type] = undefined;\n    this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.KEY_LOAD_TIMEOUT, fatal: false, frag: frag});\n  }\n}\n\nexport default KeyLoader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/loader/key-loader.js"",""var BinarySearch = {\n    /**\n     * Searches for an item in an array which matches a certain condition.\n     * This requires the condition to only match one item in the array,\n     * and for the array to be ordered.\n     *\n     * @param {Array} list The array to search.\n     * @param {Function} comparisonFunction\n     *      Called and provided a candidate item as the first argument.\n     *      Should return:\n     *          > -1 if the item should be located at a lower index than the provided item.\n     *          > 1 if the item should be located at a higher index than the provided item.\n     *          > 0 if the item is the item you're looking for.\n     *\n     * @return {*} The object if it is found or null otherwise.\n     */\n    search: function(list, comparisonFunction) {\n        var minIndex = 0;\n        var maxIndex = list.length - 1;\n        var currentIndex = null;\n        var currentElement = null;\n     \n        while (minIndex <= maxIndex) {\n            currentIndex = (minIndex + maxIndex) / 2 | 0;\n            currentElement = list[currentIndex];\n            \n            var comparisonResult = comparisonFunction(currentElement);\n            if (comparisonResult > 0) {\n                minIndex = currentIndex + 1;\n            }\n            else if (comparisonResult < 0) {\n                maxIndex = currentIndex - 1;\n            }\n            else {\n                return currentElement;\n            }\n        }\n     \n        return null;\n    }\n};\n\nexport default BinarySearch;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/binary-search.js"",""/**\n * Buffer Helper utils, providing methods dealing buffer length retrieval\n*/\n\nconst BufferHelper = {\n  isBuffered : function(media,position) {\n    if (media) {\n      let buffered = media.buffered;\n      for (let i = 0; i < buffered.length; i++) {\n        if (position >= buffered.start(i) && position <= buffered.end(i)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  },\n\n  bufferInfo : function(media, pos,maxHoleDuration) {\n    if (media) {\n      var vbuffered = media.buffered, buffered = [],i;\n      for (i = 0; i < vbuffered.length; i++) {\n        buffered.push({start: vbuffered.start(i), end: vbuffered.end(i)});\n      }\n      return this.bufferedInfo(buffered,pos,maxHoleDuration);\n    } else {\n      return {len: 0, start: pos, end: pos, nextStart : undefined} ;\n    }\n  },\n\n  bufferedInfo : function(buffered,pos,maxHoleDuration) {\n    var buffered2 = [],\n        // bufferStart and bufferEnd are buffer boundaries around current video position\n        bufferLen,bufferStart, bufferEnd,bufferStartNext,i;\n    // sort on buffer.start/smaller end (IE does not always return sorted buffered range)\n    buffered.sort(function (a, b) {\n      var diff = a.start - b.start;\n      if (diff) {\n        return diff;\n      } else {\n        return b.end - a.end;\n      }\n    });\n    // there might be some small holes between buffer time range\n    // consider that holes smaller than maxHoleDuration are irrelevant and build another\n    // buffer time range representations that discards those holes\n    for (i = 0; i < buffered.length; i++) {\n      var buf2len = buffered2.length;\n      if(buf2len) {\n        var buf2end = buffered2[buf2len - 1].end;\n        // if small hole (value between 0 or maxHoleDuration ) or overlapping (negative)\n        if((buffered[i].start - buf2end) < maxHoleDuration) {\n          // merge overlapping time ranges\n          // update lastRange.end only if smaller than item.end\n          // e.g.  [ 1, 15] with  [ 2,8] => [ 1,15] (no need to modify lastRange.end)\n          // whereas [ 1, 8] with  [ 2,15] => [ 1,15] ( lastRange should switch from [1,8] to [1,15])\n          if(buffered[i].end > buf2end) {\n            buffered2[buf2len - 1].end = buffered[i].end;\n          }\n        } else {\n          // big hole\n          buffered2.push(buffered[i]);\n        }\n      } else {\n        // first value\n        buffered2.push(buffered[i]);\n      }\n    }\n    for (i = 0, bufferLen = 0, bufferStart = bufferEnd = pos; i < buffered2.length; i++) {\n      var start =  buffered2[i].start,\n          end = buffered2[i].end;\n      //logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));\n      if ((pos + maxHoleDuration) >= start && pos < end) {\n        // play position is inside this buffer TimeRange, retrieve end of buffer position and buffer length\n        bufferStart = start;\n        bufferEnd = end;\n        bufferLen = bufferEnd - pos;\n      } else if ((pos + maxHoleDuration) < start) {\n        bufferStartNext = start;\n        break;\n      }\n    }\n    return {len: bufferLen, start: bufferStart, end: bufferEnd, nextStart : bufferStartNext};\n  }\n};\n\nexport default BufferHelper;\n\n\n\n// WEBPACK FOOTER //\n// ./src/helper/buffer-helper.js"",""import Event from '../events';\nimport DemuxerInline from '../demux/demuxer-inline';\nimport {logger} from '../utils/logger';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport EventEmitter from 'events';\nimport work from 'webworkify-webpack';\n\nclass Demuxer {\n\n  constructor(hls, id) {\n    this.hls = hls;\n    this.id = id;\n    // observer setup\n    const observer = this.observer = new EventEmitter();\n    const config = hls.config;\n    observer.trigger = function trigger (event, ...data) {\n      observer.emit(event, event, ...data);\n    };\n\n    observer.off = function off (event, ...data) {\n      observer.removeListener(event, ...data);\n    };\n\n    var forwardMessage = function(ev,data) {\n      data = data || {};\n      data.frag = this.frag;\n      data.id = this.id;\n      hls.trigger(ev,data);\n    }.bind(this);\n\n    // forward events to main thread\n    observer.on(Event.FRAG_DECRYPTED, forwardMessage);\n    observer.on(Event.FRAG_PARSING_INIT_SEGMENT, forwardMessage);\n    observer.on(Event.FRAG_PARSING_DATA, forwardMessage);\n    observer.on(Event.FRAG_PARSED, forwardMessage);\n    observer.on(Event.ERROR, forwardMessage);\n    observer.on(Event.FRAG_PARSING_METADATA, forwardMessage);\n    observer.on(Event.FRAG_PARSING_USERDATA, forwardMessage);\n    observer.on(Event.INIT_PTS_FOUND, forwardMessage);\n\n    const typeSupported = {\n      mp4 : MediaSource.isTypeSupported('video/mp4'),\n      mpeg: MediaSource.isTypeSupported('audio/mpeg'),\n      mp3: MediaSource.isTypeSupported('audio/mp4; codecs=\""mp3\""')\n    };\n    // navigator.vendor is not always available in Web Worker\n    // refer to https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/navigator\n    const vendor = navigator.vendor;\n    if (config.enableWorker && (typeof(Worker) !== 'undefined')) {\n        logger.log('demuxing in webworker');\n        let w;\n        try {\n          w = this.w = work(require.resolve('../demux/demuxer-worker.js'));\n          this.onwmsg = this.onWorkerMessage.bind(this);\n          w.addEventListener('message', this.onwmsg);\n          w.onerror = function(event) { hls.trigger(Event.ERROR, {type: ErrorTypes.OTHER_ERROR, details: ErrorDetails.INTERNAL_EXCEPTION, fatal: true, event : 'demuxerWorker', err : { message : event.message + ' (' + event.filename + ':' + event.lineno + ')' }});};\n          w.postMessage({cmd: 'init', typeSupported : typeSupported, vendor : vendor, id : id, config: JSON.stringify(config)});\n        } catch(err) {\n          logger.error('error while initializing DemuxerWorker, fallback on DemuxerInline');\n          if (w) {\n            // revoke the Object URL that was used to create demuxer worker, so as not to leak it\n            URL.revokeObjectURL(w.objectURL);\n          }\n          this.demuxer = new DemuxerInline(observer,typeSupported,config,vendor);\n          this.w = undefined;\n        }\n      } else {\n        this.demuxer = new DemuxerInline(observer,typeSupported,config, vendor);\n      }\n  }\n\n  destroy() {\n    let w = this.w;\n    if (w) {\n      w.removeEventListener('message', this.onwmsg);\n      w.terminate();\n      this.w = null;\n    } else {\n      let demuxer = this.demuxer;\n      if (demuxer) {\n        demuxer.destroy();\n        this.demuxer = null;\n      }\n    }\n    let observer = this.observer;\n    if (observer) {\n      observer.removeAllListeners();\n      this.observer = null;\n    }\n  }\n\n  push(data, initSegment, audioCodec, videoCodec, frag, duration,accurateTimeOffset,defaultInitPTS) {\n    const w = this.w;\n    const timeOffset = !isNaN(frag.startDTS) ? frag.startDTS  : frag.start;\n    const decryptdata = frag.decryptdata;\n    const lastFrag = this.frag;\n    const discontinuity = !(lastFrag && (frag.cc === lastFrag.cc));\n    const trackSwitch = !(lastFrag && (frag.level === lastFrag.level));\n    const nextSN = lastFrag && (frag.sn === (lastFrag.sn+1));\n    const contiguous = !trackSwitch && nextSN;\n    if (discontinuity) {\n      logger.log(`${this.id}:discontinuity detected`);\n    }\n    if (trackSwitch) {\n      logger.log(`${this.id}:switch detected`);\n    }\n    this.frag = frag;\n    if (w) {\n      // post fragment payload as transferable objects (no copy)\n      w.postMessage({cmd: 'demux', data, decryptdata, initSegment, audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset,defaultInitPTS}, [data]);\n    } else {\n      let demuxer = this.demuxer;\n      if (demuxer) {\n        demuxer.push(data, decryptdata, initSegment, audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset,defaultInitPTS);\n      }\n    }\n  }\n\n  onWorkerMessage(ev) {\n    let data = ev.data,\n        hls = this.hls;\n    //console.log('onWorkerMessage:' + data.event);\n    switch(data.event) {\n      case 'init':\n        // revoke the Object URL that was used to create demuxer worker, so as not to leak it\n        URL.revokeObjectURL(this.w.objectURL);\n        break;\n      // special case for FRAG_PARSING_DATA: data1 and data2 are transferable objects\n      case Event.FRAG_PARSING_DATA:\n        data.data.data1 = new Uint8Array(data.data1);\n        if (data.data2) {\n          data.data.data2 = new Uint8Array(data.data2);\n        }\n        /* falls through */\n      default:\n        data.data = data.data || {};\n        data.data.frag = this.frag;\n        data.data.id = this.id;\n        hls.trigger(data.event, data.data);\n        break;\n    }\n  }\n}\n\nexport default Demuxer;\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/demuxer.js"",""/**\n * Level Helper class, providing methods dealing with playlist sliding and drift\n*/\n\nimport {logger} from '../utils/logger';\n\nexport function updatePTS(fragments,fromIdx, toIdx) {\n  var fragFrom = fragments[fromIdx], fragTo = fragments[toIdx], fragToPTS = fragTo.startPTS;\n  // if we know startPTS[toIdx]\n  if (!isNaN(fragToPTS)) {\n    // update fragment duration.\n    // it helps to fix drifts between playlist reported duration and fragment real duration\n    if (toIdx > fromIdx) {\n      fragFrom.duration = fragToPTS - fragFrom.start;\n      if (fragFrom.duration < 0) {\n        logger.warn(`negative duration computed for frag ${fragFrom.sn},level ${fragFrom.level}, there should be some duration drift between playlist and fragment!`);\n      }\n    } else {\n      fragTo.duration = fragFrom.start - fragToPTS;\n      if (fragTo.duration < 0) {\n        logger.warn(`negative duration computed for frag ${fragTo.sn},level ${fragTo.level}, there should be some duration drift between playlist and fragment!`);\n      }\n    }\n  } else {\n    // we dont know startPTS[toIdx]\n    if (toIdx > fromIdx) {\n      fragTo.start = fragFrom.start + fragFrom.duration;\n    } else {\n      fragTo.start = Math.max(fragFrom.start - fragTo.duration, 0);\n    }\n  }\n}\n\nexport function updateFragPTSDTS(details,frag,startPTS,endPTS,startDTS,endDTS) {\n  // update frag PTS/DTS\n  let maxStartPTS = startPTS;\n  if (!isNaN(frag.startPTS)) {\n    // delta PTS between audio and video\n    let deltaPTS = Math.abs(frag.startPTS - startPTS);\n    if (isNaN(frag.deltaPTS)) {\n      frag.deltaPTS = deltaPTS;\n    } else {\n      frag.deltaPTS = Math.max(deltaPTS, frag.deltaPTS);\n    }\n    maxStartPTS = Math.max(startPTS,frag.startPTS);\n    startPTS = Math.min(startPTS, frag.startPTS);\n    endPTS = Math.max(endPTS, frag.endPTS);\n    startDTS = Math.min(startDTS, frag.startDTS);\n    endDTS = Math.max(endDTS, frag.endDTS);\n  }\n\n  const drift = startPTS - frag.start;\n  frag.start = frag.startPTS = startPTS;\n  frag.maxStartPTS = maxStartPTS;\n  frag.endPTS = endPTS;\n  frag.startDTS = startDTS;\n  frag.endDTS = endDTS;\n  frag.duration = endPTS - startPTS;\n\n  const sn = frag.sn;\n  // exit if sn out of range\n  if (!details || sn < details.startSN || sn > details.endSN) {\n    return 0;\n  }\n  var fragIdx, fragments, i;\n  fragIdx = sn - details.startSN;\n  fragments = details.fragments;\n  // update frag reference in fragments array\n  // rationale is that fragments array might not contain this frag object.\n  // this will happpen if playlist has been refreshed between frag loading and call to updateFragPTSDTS()\n  // if we don't update frag, we won't be able to propagate PTS info on the playlist\n  // resulting in invalid sliding computation\n  fragments[fragIdx] = frag;\n  // adjust fragment PTS/duration from seqnum-1 to frag 0\n  for (i = fragIdx; i > 0; i--) {\n    updatePTS(fragments, i, i - 1);\n  }\n\n  // adjust fragment PTS/duration from seqnum to last frag\n  for (i = fragIdx; i < fragments.length - 1; i++) {\n    updatePTS(fragments, i, i + 1);\n  }\n  details.PTSKnown = true;\n  //logger.log(`                                            frag start/end:${startPTS.toFixed(3)}/${endPTS.toFixed(3)}`);\n\n  return drift;\n}\n\nexport function mergeDetails(oldDetails,newDetails) {\n    var start = Math.max(oldDetails.startSN,newDetails.startSN)-newDetails.startSN,\n        end = Math.min(oldDetails.endSN,newDetails.endSN)-newDetails.startSN,\n        delta = newDetails.startSN - oldDetails.startSN,\n        oldfragments = oldDetails.fragments,\n        newfragments = newDetails.fragments,\n        ccOffset =0,\n        PTSFrag;\n\n    // check if old/new playlists have fragments in common\n    if ( end < start) {\n      newDetails.PTSKnown = false;\n      return;\n    }\n    // loop through overlapping SN and update startPTS , cc, and duration if any found\n    for(var i = start ; i <= end ; i++) {\n      var oldFrag = oldfragments[delta+i],\n          newFrag = newfragments[i];\n      if (newFrag && oldFrag) {\n        ccOffset = oldFrag.cc - newFrag.cc;\n        if (!isNaN(oldFrag.startPTS)) {\n          newFrag.start = newFrag.startPTS = oldFrag.startPTS;\n          newFrag.endPTS = oldFrag.endPTS;\n          newFrag.duration = oldFrag.duration;\n          newFrag.backtracked = oldFrag.backtracked;\n          newFrag.dropped = oldFrag.dropped;\n          PTSFrag = newFrag;\n        }\n      }\n    }\n\n    if(ccOffset) {\n      logger.log(`discontinuity sliding from playlist, take drift into account`);\n      for(i = 0 ; i < newfragments.length ; i++) {\n        newfragments[i].cc += ccOffset;\n      }\n    }\n\n    // if at least one fragment contains PTS info, recompute PTS information for all fragments\n    if(PTSFrag) {\n      updateFragPTSDTS(newDetails,PTSFrag,PTSFrag.startPTS,PTSFrag.endPTS,PTSFrag.startDTS,PTSFrag.endDTS);\n    } else {\n      // ensure that delta is within oldfragments range\n      // also adjust sliding in case delta is 0 (we could have old=[50-60] and new=old=[50-61])\n      // in that case we also need to adjust start offset of all fragments\n      if (delta >= 0 && delta < oldfragments.length) {\n        // adjust start by sliding offset\n        var sliding = oldfragments[delta].start;\n        for(i = 0 ; i < newfragments.length ; i++) {\n          newfragments[i].start += sliding;\n        }\n      }\n    }\n    // if we are here, it means we have fragments overlapping between\n    // old and new level. reliable PTS info is thus relying on old level\n    newDetails.PTSKnown = oldDetails.PTSKnown;\n  }\n\n\n\n// WEBPACK FOOTER //\n// ./src/helper/level-helper.js"",""/**\n *  TimeRanges to string helper\n */\n\nconst TimeRanges = {\n  toString : function(r) {\n    var log = '', len = r.length;\n    for (var i=0; i<len; i++) {\n      log += '[' + r.start(i).toFixed(3) + ',' + r.end(i).toFixed(3) + ']';\n    }\n    return log;\n  }\n};\n\nexport default TimeRanges;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/timeRanges.js"",""import BinarySearch from './binary-search';\nimport {logger} from '../utils/logger';\n\nexport function findFirstFragWithCC(fragments, cc) {\n  let firstFrag = null;\n\n  for (let i = 0; i < fragments.length; i += 1) {\n    const currentFrag = fragments[i];\n    if (currentFrag && currentFrag.cc === cc) {\n      firstFrag = currentFrag;\n      break;\n    }\n  }\n\n  return firstFrag;\n}\n\nexport function findFragWithCC(fragments, CC) {\n  return BinarySearch.search(fragments, (candidate) => {\n    if (candidate.cc < CC) {\n      return 1;\n    } else if (candidate.cc > CC) {\n      return -1;\n    } else {\n      return 0;\n    }\n  });\n}\n\nexport function shouldAlignOnDiscontinuities(lastFrag, lastLevel, details) {\n  let shouldAlign = false;\n  if (lastLevel && lastLevel.details && details) {\n    if (details.endCC > details.startCC || (lastFrag && lastFrag.cc < details.startCC)) {\n      shouldAlign = true;\n    }\n  }\n  return shouldAlign;\n}\n\n// Find the first frag in the previous level which matches the CC of the first frag of the new level\nexport function findDiscontinuousReferenceFrag(prevDetails, curDetails) {\n  const prevFrags = prevDetails.fragments;\n  const curFrags = curDetails.fragments;\n\n  if (!curFrags.length || !prevFrags.length) {\n    logger.log('No fragments to align');\n    return;\n  }\n\n  const prevStartFrag = findFirstFragWithCC(prevFrags, curFrags[0].cc);\n\n  if (!prevStartFrag || (prevStartFrag && !prevStartFrag.startPTS)) {\n    logger.log('No frag in previous level to align on');\n    return;\n  }\n\n  return prevStartFrag;\n}\n\nexport function adjustPts(sliding, details) {\n  details.fragments.forEach((frag) => {\n    if (frag) {\n      let start = frag.start + sliding;\n      frag.start = frag.startPTS = start;\n      frag.endPTS = start + frag.duration;\n    }\n  });\n  details.PTSKnown = true;\n}\n\n// If a change in CC is detected, the PTS can no longer be relied upon\n// Attempt to align the level by using the last level - find the last frag matching the current CC and use it's PTS\n// as a reference\nexport function alignDiscontinuities(lastFrag, lastLevel, details) {\n  if (shouldAlignOnDiscontinuities(lastFrag, lastLevel, details)) {\n    const referenceFrag = findDiscontinuousReferenceFrag(lastLevel.details, details);\n    if (referenceFrag) {\n      logger.log('Adjusting PTS using last level due to CC increase within current level');\n      adjustPts(referenceFrag.start, details);\n    }\n  }\n  // try to align using programDateTime attribute (if available)\n  if (details.PTSKnown === false && lastLevel && lastLevel.details) {\n    // if last level sliding is 1000 and its first frag PROGRAM-DATE-TIME is 2017-08-20 1:10:00 AM\n    // and if new details first frag PROGRAM DATE-TIME is 2017-08-20 1:10:08 AM\n    // then we can deduce that playlist B sliding is 1000+8 = 1008s\n    let lastPDT = lastLevel.details.programDateTime;\n    let newPDT = details.programDateTime;\n    // date diff is in ms. frag.start is in seconds\n    let sliding = (newPDT - lastPDT)/1000 + lastLevel.details.fragments[0].start;\n    if (!isNaN(sliding)) {\n      logger.log(`adjusting PTS using programDateTime delta, sliding:${sliding.toFixed(3)}`);\n      adjustPts(sliding,details);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/discontinuities.js"",""/*\n * Stream Controller\n*/\n\nimport BinarySearch from '../utils/binary-search';\nimport BufferHelper from '../helper/buffer-helper';\nimport Demuxer from '../demux/demuxer';\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport * as LevelHelper from '../helper/level-helper';import TimeRanges from '../utils/timeRanges';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport {logger} from '../utils/logger';\nimport { alignDiscontinuities } from '../utils/discontinuities';\n\n\nconst State = {\n  STOPPED : 'STOPPED',\n  IDLE : 'IDLE',\n  KEY_LOADING : 'KEY_LOADING',\n  FRAG_LOADING : 'FRAG_LOADING',\n  FRAG_LOADING_WAITING_RETRY : 'FRAG_LOADING_WAITING_RETRY',\n  WAITING_LEVEL : 'WAITING_LEVEL',\n  PARSING : 'PARSING',\n  PARSED : 'PARSED',\n  BUFFER_FLUSHING : 'BUFFER_FLUSHING',\n  ENDED : 'ENDED',\n  ERROR : 'ERROR'\n};\n\nclass StreamController extends EventHandler {\n\n  constructor(hls) {\n    super(hls,\n      Event.MEDIA_ATTACHED,\n      Event.MEDIA_DETACHING,\n      Event.MANIFEST_LOADING,\n      Event.MANIFEST_PARSED,\n      Event.LEVEL_LOADED,\n      Event.KEY_LOADED,\n      Event.FRAG_LOADED,\n      Event.FRAG_LOAD_EMERGENCY_ABORTED,\n      Event.FRAG_PARSING_INIT_SEGMENT,\n      Event.FRAG_PARSING_DATA,\n      Event.FRAG_PARSED,\n      Event.ERROR,\n      Event.AUDIO_TRACK_SWITCHING,\n      Event.AUDIO_TRACK_SWITCHED,\n      Event.BUFFER_CREATED,\n      Event.BUFFER_APPENDED,\n      Event.BUFFER_FLUSHED);\n\n    this.config = hls.config;\n    this.audioCodecSwap = false;\n    this.ticks = 0;\n    this._state = State.STOPPED;\n    this.ontick = this.tick.bind(this);\n  }\n\n  destroy() {\n    this.stopLoad();\n    if (this.timer) {\n      clearInterval(this.timer);\n      this.timer = null;\n    }\n    EventHandler.prototype.destroy.call(this);\n    this.state = State.STOPPED;\n  }\n\n  startLoad(startPosition) {\n    if (this.levels) {\n      let lastCurrentTime = this.lastCurrentTime, hls = this.hls;\n      this.stopLoad();\n      if (!this.timer) {\n        this.timer = setInterval(this.ontick, 100);\n      }\n      this.level = -1;\n      this.fragLoadError = 0;\n      if (!this.startFragRequested) {\n        // determine load level\n        let startLevel = hls.startLevel;\n        if (startLevel === -1) {\n          // -1 : guess start Level by doing a bitrate test by loading first fragment of lowest quality level\n          startLevel = 0;\n          this.bitrateTest = true;\n        }\n        // set new level to playlist loader : this will trigger start level load\n        // hls.nextLoadLevel remains until it is set to a new value or until a new frag is successfully loaded\n        this.level = hls.nextLoadLevel = startLevel;\n        this.loadedmetadata = false;\n      }\n      // if startPosition undefined but lastCurrentTime set, set startPosition to last currentTime\n      if (lastCurrentTime > 0 && startPosition === -1) {\n        logger.log(`override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n        startPosition = lastCurrentTime;\n      }\n      this.state = State.IDLE;\n      this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n      this.tick();\n    } else {\n      this.forceStartLoad = true;\n      this.state = State.STOPPED;\n    }\n  }\n\n  stopLoad() {\n    var frag = this.fragCurrent;\n    if (frag) {\n      if (frag.loader) {\n        frag.loader.abort();\n      }\n      this.fragCurrent = null;\n    }\n    this.fragPrevious = null;\n    if (this.demuxer) {\n      this.demuxer.destroy();\n      this.demuxer = null;\n    }\n    this.state = State.STOPPED;\n    this.forceStartLoad = false;\n  }\n\n  tick() {\n    this.ticks++;\n    if (this.ticks === 1) {\n      this.doTick();\n      if (this.ticks > 1) {\n        setTimeout(this.tick, 1);\n      }\n      this.ticks = 0;\n    }\n  }\n\n  doTick() {\n    switch(this.state) {\n      case State.ERROR:\n        //don't do anything in error state to avoid breaking further ...\n        break;\n      case State.BUFFER_FLUSHING:\n      // in buffer flushing state, reset fragLoadError counter\n        this.fragLoadError = 0;\n        break;\n      case State.IDLE:\n        this._doTickIdle();\n        break;\n      case State.WAITING_LEVEL:\n        var level = this.levels[this.level];\n        // check if playlist is already loaded\n        if (level && level.details) {\n          this.state = State.IDLE;\n        }\n        break;\n      case State.FRAG_LOADING_WAITING_RETRY:\n        var now = performance.now();\n        var retryDate = this.retryDate;\n        // if current time is gt than retryDate, or if media seeking let's switch to IDLE state to retry loading\n        if(!retryDate || (now >= retryDate) || (this.media && this.media.seeking)) {\n          logger.log(`mediaController: retryDate reached, switch back to IDLE state`);\n          this.state = State.IDLE;\n        }\n        break;\n      case State.ERROR:\n      case State.STOPPED:\n      case State.FRAG_LOADING:\n      case State.PARSING:\n      case State.PARSED:\n      case State.ENDED:\n        break;\n      default:\n        break;\n    }\n    // check buffer\n    this._checkBuffer();\n    // check/update current fragment\n    this._checkFragmentChanged();\n  }\n\n  // Ironically the \""idle\"" state is the on we do the most logic in it seems ....\n  // NOTE: Maybe we could rather schedule a check for buffer length after half of the currently\n  //       played segment, or on pause/play/seek instead of naively checking every 100ms?\n  _doTickIdle() {\n    const hls = this.hls,\n          config = hls.config,\n          media = this.media;\n\n\n    // if start level not parsed yet OR\n    // if video not attached AND start fragment already requested OR start frag prefetch disable\n    // exit loop, as we either need more info (level not parsed) or we need media to be attached to load new fragment\n    if (this.levelLastLoaded === undefined || (\n      !media && (this.startFragRequested || !config.startFragPrefetch))) {\n      return;\n    }\n\n    // if we have not yet loaded any fragment, start loading from start position\n    let pos;\n    if (this.loadedmetadata) {\n      pos = media.currentTime;\n    } else {\n      pos = this.nextLoadPosition;\n    }\n    // determine next load level\n    let level = hls.nextLoadLevel,\n        levelInfo = this.levels[level];\n\n    if (!levelInfo) {\n      return;\n    }\n\n    let levelBitrate = levelInfo.bitrate,\n        maxBufLen;\n\n    // compute max Buffer Length that we could get from this load level, based on level bitrate. don't buffer more than 60 MB and more than 30s\n    if (levelBitrate) {\n      maxBufLen = Math.max(8 * config.maxBufferSize / levelBitrate, config.maxBufferLength);\n    } else {\n      maxBufLen = config.maxBufferLength;\n    }\n    maxBufLen = Math.min(maxBufLen, config.maxMaxBufferLength);\n\n    // determine next candidate fragment to be loaded, based on current position and end of buffer position\n    // ensure up to `config.maxMaxBufferLength` of buffer upfront\n\n    const bufferInfo = BufferHelper.bufferInfo(this.mediaBuffer ? this.mediaBuffer : media, pos, config.maxBufferHole),\n          bufferLen = bufferInfo.len;\n    // Stay idle if we are still with buffer margins\n    if (bufferLen >= maxBufLen) {\n      return;\n    }\n\n    // if buffer length is less than maxBufLen try to load a new fragment ...\n    logger.trace(`buffer length of ${bufferLen.toFixed(3)} is below max of ${maxBufLen.toFixed(3)}. checking for more payload ...`);\n\n    // set next load level : this will trigger a playlist load if needed\n    this.level = hls.nextLoadLevel = level;\n\n    const levelDetails = levelInfo.details;\n    // if level info not retrieved yet, switch state and wait for level retrieval\n    // if live playlist, ensure that new playlist has been refreshed to avoid loading/try to load\n    // a useless and outdated fragment (that might even introduce load error if it is already out of the live playlist)\n    if (typeof levelDetails === 'undefined' || levelDetails.live && this.levelLastLoaded !== level) {\n      this.state = State.WAITING_LEVEL;\n      return;\n    }\n\n    // we just got done loading the final fragment and there is no other buffered range after ...\n    // rationale is that in case there are any buffered ranges after, it means that there are unbuffered portion in between\n    // so we should not switch to ENDED in that case, to be able to buffer them\n    // dont switch to ENDED if we need to backtrack last fragment\n    let fragPrevious = this.fragPrevious;\n    if (!levelDetails.live && fragPrevious && !fragPrevious.backtracked && fragPrevious.sn === levelDetails.endSN && !bufferInfo.nextStart) {\n        // fragPrevious is last fragment. retrieve level duration using last frag start offset + duration\n        // real duration might be lower than initial duration if there are drifts between real frag duration and playlist signaling\n        const duration = Math.min(media.duration,fragPrevious.start + fragPrevious.duration);\n        // if everything (almost) til the end is buffered, let's signal eos\n        // we don't compare exactly media.duration === bufferInfo.end as there could be some subtle media duration difference (audio/video offsets...)\n        // tolerate up to one frag duration to cope with these cases.\n        // also cope with almost zero last frag duration (max last frag duration with 200ms) refer to https://github.com/video-dev/hls.js/pull/657\n        if (duration - Math.max(bufferInfo.end,fragPrevious.start) <= Math.max(0.2,fragPrevious.duration)) {\n          // Finalize the media stream\n          let data = {};\n          if (this.altAudio) {\n            data.type = 'video';\n          }\n          this.hls.trigger(Event.BUFFER_EOS,data);\n          this.state = State.ENDED;\n          return;\n      }\n    }\n\n    // if we have the levelDetails for the selected variant, lets continue enrichen our stream (load keys/fragments or trigger EOS, etc..)\n    this._fetchPayloadOrEos(pos, bufferInfo, levelDetails);\n  }\n\n  _fetchPayloadOrEos(pos, bufferInfo, levelDetails) {\n    const fragPrevious = this.fragPrevious,\n          level = this.level,\n          fragments = levelDetails.fragments,\n          fragLen = fragments.length;\n\n    // empty playlist\n    if (fragLen === 0) {\n      return;\n    }\n\n    // find fragment index, contiguous with end of buffer position\n    let start = fragments[0].start,\n        end = fragments[fragLen-1].start + fragments[fragLen-1].duration,\n        bufferEnd = bufferInfo.end,\n        frag;\n\n    if (levelDetails.initSegment && !levelDetails.initSegment.data) {\n      frag = levelDetails.initSegment;\n    } else {\n      // in case of live playlist we need to ensure that requested position is not located before playlist start\n      if (levelDetails.live) {\n        let initialLiveManifestSize = this.config.initialLiveManifestSize;\n        if(fragLen < initialLiveManifestSize){\n          logger.warn(`Can not start playback of a level, reason: not enough fragments ${fragLen} < ${initialLiveManifestSize}`);\n          return;\n        }\n\n        frag = this._ensureFragmentAtLivePoint(levelDetails, bufferEnd, start, end, fragPrevious, fragments, fragLen);\n        // if it explicitely returns null don't load any fragment and exit function now\n        if (frag === null) {\n          return;\n        }\n\n      } else {\n        // VoD playlist: if bufferEnd before start of playlist, load first fragment\n        if (bufferEnd < start) {\n          frag = fragments[0];\n        }\n      }\n    }\n    if (!frag) {\n      frag = this._findFragment(start, fragPrevious, fragLen, fragments, bufferEnd, end, levelDetails);\n    }\n    if(frag) {\n      this._loadFragmentOrKey(frag, level, levelDetails, pos, bufferEnd);\n    }\n    return;\n  }\n\n  _ensureFragmentAtLivePoint(levelDetails, bufferEnd, start, end, fragPrevious, fragments, fragLen) {\n    const config = this.hls.config, media = this.media;\n\n    let frag;\n\n    // check if requested position is within seekable boundaries :\n    //logger.log(`start/pos/bufEnd/seeking:${start.toFixed(3)}/${pos.toFixed(3)}/${bufferEnd.toFixed(3)}/${this.media.seeking}`);\n    let maxLatency = config.liveMaxLatencyDuration !== undefined ? config.liveMaxLatencyDuration : config.liveMaxLatencyDurationCount*levelDetails.targetduration;\n\n    if (bufferEnd < Math.max(start-config.maxFragLookUpTolerance, end - maxLatency)) {\n        let liveSyncPosition = this.liveSyncPosition = this.computeLivePosition(start, levelDetails);\n        logger.log(`buffer end: ${bufferEnd.toFixed(3)} is located too far from the end of live sliding playlist, reset currentTime to : ${liveSyncPosition.toFixed(3)}`);\n        bufferEnd = liveSyncPosition;\n        if (media && media.readyState && media.duration > liveSyncPosition) {\n          media.currentTime = liveSyncPosition;\n        }\n        this.nextLoadPosition = liveSyncPosition;\n    }\n\n    // if end of buffer greater than live edge, don't load any fragment\n    // this could happen if live playlist intermittently slides in the past.\n    // level 1 loaded [182580161,182580167]\n    // level 1 loaded [182580162,182580169]\n    // Loading 182580168 of [182580162 ,182580169],level 1 ..\n    // Loading 182580169 of [182580162 ,182580169],level 1 ..\n    // level 1 loaded [182580162,182580168] <============= here we should have bufferEnd > end. in that case break to avoid reloading 182580168\n    // level 1 loaded [182580164,182580171]\n    //\n    // don't return null in case media not loaded yet (readystate === 0)\n    if (levelDetails.PTSKnown && bufferEnd > end && media && media.readyState) {\n      return null;\n    }\n\n    if (this.startFragRequested && !levelDetails.PTSKnown) {\n      /* we are switching level on live playlist, but we don't have any PTS info for that quality level ...\n         try to load frag matching with next SN.\n         even if SN are not synchronized between playlists, loading this frag will help us\n         compute playlist sliding and find the right one after in case it was not the right consecutive one */\n      if (fragPrevious) {\n        const targetSN = fragPrevious.sn + 1;\n        if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n          const fragNext = fragments[targetSN - levelDetails.startSN];\n          if (fragPrevious.cc === fragNext.cc) {\n            frag = fragNext;\n            logger.log(`live playlist, switching playlist, load frag with next SN: ${frag.sn}`);\n          }\n        }\n        // next frag SN not available (or not with same continuity counter)\n        // look for a frag sharing the same CC\n        if (!frag) {\n          frag = BinarySearch.search(fragments, function(frag) {\n            return fragPrevious.cc - frag.cc;\n          });\n          if (frag) {\n            logger.log(`live playlist, switching playlist, load frag with same CC: ${frag.sn}`);\n          }\n        }\n      }\n      if (!frag) {\n        /* we have no idea about which fragment should be loaded.\n           so let's load mid fragment. it will help computing playlist sliding and find the right one\n        */\n        frag = fragments[Math.min(fragLen - 1, Math.round(fragLen / 2))];\n        logger.log(`live playlist, switching playlist, unknown, load middle frag : ${frag.sn}`);\n      }\n    }\n    return frag;\n  }\n\n  _findFragment(start, fragPrevious, fragLen, fragments, bufferEnd, end, levelDetails) {\n    const config = this.hls.config;\n    let frag;\n    let foundFrag;\n    let maxFragLookUpTolerance = config.maxFragLookUpTolerance;\n    const fragNext = fragPrevious ? fragments[fragPrevious.sn - fragments[0].sn + 1] : undefined;\n    let fragmentWithinToleranceTest = (candidate) => {\n      // offset should be within fragment boundary - config.maxFragLookUpTolerance\n      // this is to cope with situations like\n      // bufferEnd = 9.991\n      // frag[Ø] : [0,10]\n      // frag[1] : [10,20]\n      // bufferEnd is within frag[0] range ... although what we are expecting is to return frag[1] here\n      //              frag start               frag start+duration\n      //                  |-----------------------------|\n      //              <--->                         <--->\n      //  ...--------><-----------------------------><---------....\n      // previous frag         matching fragment         next frag\n      //  return -1             return 0                 return 1\n      //logger.log(`level/sn/start/end/bufEnd:${level}/${candidate.sn}/${candidate.start}/${(candidate.start+candidate.duration)}/${bufferEnd}`);\n      // Set the lookup tolerance to be small enough to detect the current segment - ensures we don't skip over very small segments\n      let candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0));\n      if (candidate.start + candidate.duration - candidateLookupTolerance <= bufferEnd) {\n        return 1;\n      } // if maxFragLookUpTolerance will have negative value then don't return -1 for first element\n      else if (candidate.start - candidateLookupTolerance > bufferEnd && candidate.start) {\n        return -1;\n      }\n      return 0;\n    };\n\n    if (bufferEnd < end) {\n      if (bufferEnd > end - maxFragLookUpTolerance) {\n        maxFragLookUpTolerance = 0;\n      }\n      // Prefer the next fragment if it's within tolerance\n      if (fragNext && !fragmentWithinToleranceTest(fragNext)) {\n        foundFrag = fragNext;\n      } else {\n        foundFrag = BinarySearch.search(fragments, fragmentWithinToleranceTest);\n      }\n    } else {\n      // reach end of playlist\n      foundFrag = fragments[fragLen-1];\n    }\n    if (foundFrag) {\n      frag = foundFrag;\n      const curSNIdx = frag.sn - levelDetails.startSN;\n      const sameLevel = fragPrevious && frag.level === fragPrevious.level;\n      const prevFrag = fragments[curSNIdx - 1];\n      const nextFrag = fragments[curSNIdx + 1];\n      //logger.log('find SN matching with pos:' +  bufferEnd + ':' + frag.sn);\n      if (fragPrevious && frag.sn === fragPrevious.sn) {\n        if (sameLevel && !frag.backtracked) {\n          if (frag.sn < levelDetails.endSN) {\n            let deltaPTS = fragPrevious.deltaPTS;\n            // if there is a significant delta between audio and video, larger than max allowed hole,\n            // and if previous remuxed fragment did not start with a keyframe. (fragPrevious.dropped)\n            // let's try to load previous fragment again to get last keyframe\n            // then we will reload again current fragment (that way we should be able to fill the buffer hole ...)\n            if (deltaPTS && deltaPTS > config.maxBufferHole && fragPrevious.dropped && curSNIdx) {\n              frag = prevFrag;\n              logger.warn(`SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this`);\n              // decrement previous frag load counter to avoid frag loop loading error when next fragment will get reloaded\n              fragPrevious.loadCounter--;\n            } else {\n              frag = nextFrag;\n              logger.log(`SN just loaded, load next one: ${frag.sn}`);\n            }\n          } else {\n            frag = null;\n          }\n        } else if (frag.backtracked) {\n          // Only backtrack a max of 1 consecutive fragment to prevent sliding back too far when little or no frags start with keyframes\n          if (nextFrag && nextFrag.backtracked) {\n            logger.warn(`Already backtracked from fragment ${nextFrag.sn}, will not backtrack to fragment ${frag.sn}. Loading fragment ${nextFrag.sn}`);\n            frag = nextFrag;\n          } else {\n            // If a fragment has dropped frames and it's in a same level/sequence, load the previous fragment to try and find the keyframe\n            // Reset the dropped count now since it won't be reset until we parse the fragment again, which prevents infinite backtracking on the same segment\n            logger.warn('Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe');\n            frag.dropped = 0;\n            if (prevFrag) {\n              if (prevFrag.loadCounter) {\n                prevFrag.loadCounter--;\n              }\n              frag = prevFrag;\n              frag.backtracked = true;\n            } else if (curSNIdx) {\n              // can't backtrack on very first fragment\n              frag = null;\n            }\n          }\n        }\n      }\n    }\n    return frag;\n  }\n\n  _loadFragmentOrKey(frag, level, levelDetails, pos, bufferEnd) {\n    const hls = this.hls,\n          config = hls.config;\n\n    //logger.log('loading frag ' + i +',pos/bufEnd:' + pos.toFixed(3) + '/' + bufferEnd.toFixed(3));\n    if ((frag.decryptdata && frag.decryptdata.uri != null) && (frag.decryptdata.key == null)) {\n      logger.log(`Loading key for ${frag.sn} of [${levelDetails.startSN} ,${levelDetails.endSN}],level ${level}`);\n      this.state = State.KEY_LOADING;\n      hls.trigger(Event.KEY_LOADING, {frag: frag});\n    } else {\n      logger.log(`Loading ${frag.sn} of [${levelDetails.startSN} ,${levelDetails.endSN}],level ${level}, currentTime:${pos.toFixed(3)},bufferEnd:${bufferEnd.toFixed(3)}`);\n      // ensure that we are not reloading the same fragments in loop ...\n      if (this.fragLoadIdx !== undefined) {\n        this.fragLoadIdx++;\n      } else {\n        this.fragLoadIdx = 0;\n      }\n      if (frag.loadCounter) {\n        frag.loadCounter++;\n        let maxThreshold = config.fragLoadingLoopThreshold;\n        // if this frag has already been loaded 3 times, and if it has been reloaded recently\n        if (frag.loadCounter > maxThreshold && (Math.abs(this.fragLoadIdx - frag.loadIdx) < maxThreshold)) {\n          hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_LOOP_LOADING_ERROR, fatal: false, frag: frag});\n          return;\n        }\n      } else {\n        frag.loadCounter = 1;\n      }\n      frag.loadIdx = this.fragLoadIdx;\n      frag.autoLevel = hls.autoLevelEnabled;\n      frag.bitrateTest = this.bitrateTest;\n\n      this.fragCurrent = frag;\n      this.startFragRequested = true;\n      // Don't update nextLoadPosition for fragments which are not buffered\n      if (!isNaN(frag.sn) && !frag.bitrateTest) {\n        this.nextLoadPosition = frag.start + frag.duration;\n      }\n      hls.trigger(Event.FRAG_LOADING, {frag: frag});\n      // lazy demuxer init, as this could take some time ... do it during frag loading\n      if (!this.demuxer) {\n        this.demuxer = new Demuxer(hls,'main');\n      }\n      this.state = State.FRAG_LOADING;\n      return;\n    }\n  }\n\n  set state(nextState) {\n    if (this.state !== nextState) {\n      const previousState = this.state;\n      this._state = nextState;\n      logger.log(`main stream:${previousState}->${nextState}`);\n      this.hls.trigger(Event.STREAM_STATE_TRANSITION, {previousState, nextState});\n    }\n  }\n\n  get state() {\n    return this._state;\n  }\n\n  getBufferedFrag(position) {\n    return BinarySearch.search(this._bufferedFrags, function(frag) {\n      if (position < frag.startPTS) {\n        return -1;\n      } else if (position > frag.endPTS) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  get currentLevel() {\n    let media = this.media;\n    if (media) {\n      const frag = this.getBufferedFrag(media.currentTime);\n      if (frag) {\n        return frag.level;\n      }\n    }\n    return -1;\n  }\n\n  get nextBufferedFrag() {\n    let media = this.media;\n    if (media) {\n      // first get end range of current fragment\n      return this.followingBufferedFrag(this.getBufferedFrag(media.currentTime));\n    } else {\n      return null;\n    }\n  }\n\n  followingBufferedFrag(frag) {\n    if (frag) {\n      // try to get range of next fragment (500ms after this range)\n      return this.getBufferedFrag(frag.endPTS + 0.5);\n    }\n    return null;\n  }\n\n  get nextLevel() {\n    const frag = this.nextBufferedFrag;\n    if (frag) {\n      return frag.level;\n    } else {\n      return -1;\n    }\n  }\n\n  _checkFragmentChanged() {\n    var fragPlayingCurrent, currentTime, video = this.media;\n    if (video && video.readyState && video.seeking === false) {\n      currentTime = video.currentTime;\n      /* if video element is in seeked state, currentTime can only increase.\n        (assuming that playback rate is positive ...)\n        As sometimes currentTime jumps back to zero after a\n        media decode error, check this, to avoid seeking back to\n        wrong position after a media decode error\n      */\n      if(currentTime > video.playbackRate*this.lastCurrentTime) {\n        this.lastCurrentTime = currentTime;\n      }\n      if (BufferHelper.isBuffered(video,currentTime)) {\n        fragPlayingCurrent = this.getBufferedFrag(currentTime);\n      } else if (BufferHelper.isBuffered(video,currentTime + 0.1)) {\n        /* ensure that FRAG_CHANGED event is triggered at startup,\n          when first video frame is displayed and playback is paused.\n          add a tolerance of 100ms, in case current position is not buffered,\n          check if current pos+100ms is buffered and use that buffer range\n          for FRAG_CHANGED event reporting */\n        fragPlayingCurrent = this.getBufferedFrag(currentTime + 0.1);\n      }\n      if (fragPlayingCurrent) {\n        var fragPlaying = fragPlayingCurrent;\n        if (fragPlaying !== this.fragPlaying) {\n          this.hls.trigger(Event.FRAG_CHANGED, {frag: fragPlaying});\n          const fragPlayingLevel = fragPlaying.level;\n          if (!this.fragPlaying || this.fragPlaying.level !== fragPlayingLevel) {\n            this.hls.trigger(Event.LEVEL_SWITCHED, {level: fragPlayingLevel});\n          }\n          this.fragPlaying = fragPlaying;\n        }\n      }\n    }\n  }\n\n  /*\n    on immediate level switch :\n     - pause playback if playing\n     - cancel any pending load request\n     - and trigger a buffer flush\n  */\n  immediateLevelSwitch() {\n    logger.log('immediateLevelSwitch');\n    if (!this.immediateSwitch) {\n      this.immediateSwitch = true;\n      let media = this.media, previouslyPaused;\n      if (media) {\n        previouslyPaused = media.paused;\n        media.pause();\n      } else {\n        // don't restart playback after instant level switch in case media not attached\n        previouslyPaused = true;\n      }\n      this.previouslyPaused = previouslyPaused;\n    }\n    var fragCurrent = this.fragCurrent;\n    if (fragCurrent && fragCurrent.loader) {\n      fragCurrent.loader.abort();\n    }\n    this.fragCurrent = null;\n    // increase fragment load Index to avoid frag loop loading error after buffer flush\n    if (this.fragLoadIdx !== undefined) {\n      this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n    }\n    // flush everything\n    this.flushMainBuffer(0,Number.POSITIVE_INFINITY);\n  }\n\n  /*\n     on immediate level switch end, after new fragment has been buffered :\n      - nudge video decoder by slightly adjusting video currentTime (if currentTime buffered)\n      - resume the playback if needed\n  */\n  immediateLevelSwitchEnd() {\n    let media = this.media;\n    if (media && media.buffered.length) {\n      this.immediateSwitch = false;\n      if(BufferHelper.isBuffered(media,media.currentTime)) {\n        // only nudge if currentTime is buffered\n        media.currentTime -= 0.0001;\n      }\n      if (!this.previouslyPaused) {\n        media.play();\n      }\n    }\n  }\n\n  nextLevelSwitch() {\n    /* try to switch ASAP without breaking video playback :\n       in order to ensure smooth but quick level switching,\n      we need to find the next flushable buffer range\n      we should take into account new segment fetch time\n    */\n    let media = this.media;\n    // ensure that media is defined and that metadata are available (to retrieve currentTime)\n    if (media && media.readyState) {\n      let fetchdelay, fragPlayingCurrent, nextBufferedFrag;\n      if (this.fragLoadIdx !== undefined) {\n        // increase fragment load Index to avoid frag loop loading error after buffer flush\n        this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n      }\n      fragPlayingCurrent = this.getBufferedFrag(media.currentTime);\n      if (fragPlayingCurrent && fragPlayingCurrent.startPTS > 1) {\n        // flush buffer preceding current fragment (flush until current fragment start offset)\n        // minus 1s to avoid video freezing, that could happen if we flush keyframe of current video ...\n        this.flushMainBuffer(0,fragPlayingCurrent.startPTS - 1);\n      }\n      if (!media.paused) {\n        // add a safety delay of 1s\n        var nextLevelId = this.hls.nextLoadLevel,nextLevel = this.levels[nextLevelId], fragLastKbps = this.fragLastKbps;\n        if (fragLastKbps && this.fragCurrent) {\n          fetchdelay = this.fragCurrent.duration * nextLevel.bitrate / (1000 * fragLastKbps) + 1;\n        } else {\n          fetchdelay = 0;\n        }\n      } else {\n        fetchdelay = 0;\n      }\n      //logger.log('fetchdelay:'+fetchdelay);\n      // find buffer range that will be reached once new fragment will be fetched\n      nextBufferedFrag = this.getBufferedFrag(media.currentTime + fetchdelay);\n      if (nextBufferedFrag) {\n        // we can flush buffer range following this one without stalling playback\n        nextBufferedFrag = this.followingBufferedFrag(nextBufferedFrag);\n        if (nextBufferedFrag) {\n          // if we are here, we can also cancel any loading/demuxing in progress, as they are useless\n          var fragCurrent = this.fragCurrent;\n          if (fragCurrent && fragCurrent.loader) {\n            fragCurrent.loader.abort();\n          }\n          this.fragCurrent = null;\n          // start flush position is the start PTS of next buffered frag.\n          // we use frag.naxStartPTS which is max(audio startPTS, video startPTS).\n          // in case there is a small PTS Delta between audio and video, using maxStartPTS avoids flushing last samples from current fragment\n          this.flushMainBuffer(nextBufferedFrag.maxStartPTS , Number.POSITIVE_INFINITY);\n        }\n      }\n    }\n  }\n\n  flushMainBuffer(startOffset,endOffset) {\n    this.state = State.BUFFER_FLUSHING;\n    let flushScope = {startOffset: startOffset, endOffset: endOffset};\n    // if alternate audio tracks are used, only flush video, otherwise flush everything\n    if (this.altAudio) {\n      flushScope.type = 'video';\n    }\n    this.hls.trigger(Event.BUFFER_FLUSHING, flushScope);\n  }\n\n  onMediaAttached(data) {\n    var media = this.media = this.mediaBuffer = data.media;\n    this.onvseeking = this.onMediaSeeking.bind(this);\n    this.onvseeked = this.onMediaSeeked.bind(this);\n    this.onvended = this.onMediaEnded.bind(this);\n    media.addEventListener('seeking', this.onvseeking);\n    media.addEventListener('seeked', this.onvseeked);\n    media.addEventListener('ended', this.onvended);\n    let config = this.config;\n    if(this.levels && config.autoStartLoad) {\n      this.hls.startLoad(config.startPosition);\n    }\n  }\n\n  onMediaDetaching() {\n    var media = this.media;\n    if (media && media.ended) {\n      logger.log('MSE detaching and video ended, reset startPosition');\n      this.startPosition = this.lastCurrentTime = 0;\n    }\n\n    // reset fragment loading counter on MSE detaching to avoid reporting FRAG_LOOP_LOADING_ERROR after error recovery\n    var levels = this.levels;\n    if (levels) {\n      // reset fragment load counter\n        levels.forEach(level => {\n          if(level.details) {\n            level.details.fragments.forEach(fragment => {\n              fragment.loadCounter = undefined;\n              fragment.backtracked = undefined;\n            });\n          }\n      });\n    }\n    // remove video listeners\n    if (media) {\n      media.removeEventListener('seeking', this.onvseeking);\n      media.removeEventListener('seeked', this.onvseeked);\n      media.removeEventListener('ended', this.onvended);\n      this.onvseeking = this.onvseeked  = this.onvended = null;\n    }\n    this.media = this.mediaBuffer = null;\n    this.loadedmetadata = false;\n    this.stopLoad();\n  }\n\n  onMediaSeeking() {\n    let media = this.media, currentTime = media ? media.currentTime : undefined, config = this.config;\n    if (!isNaN(currentTime)) {\n      logger.log(`media seeking to ${currentTime.toFixed(3)}`);\n    }\n    let mediaBuffer = this.mediaBuffer ? this.mediaBuffer : media;\n    let bufferInfo = BufferHelper.bufferInfo(mediaBuffer,currentTime,this.config.maxBufferHole);\n    if (this.state === State.FRAG_LOADING) {\n      let fragCurrent = this.fragCurrent;\n      // check if we are seeking to a unbuffered area AND if frag loading is in progress\n      if (bufferInfo.len === 0 && fragCurrent) {\n        let tolerance = config.maxFragLookUpTolerance,\n            fragStartOffset = fragCurrent.start - tolerance,\n            fragEndOffset = fragCurrent.start + fragCurrent.duration + tolerance;\n        // check if we seek position will be out of currently loaded frag range : if out cancel frag load, if in, don't do anything\n        if (currentTime < fragStartOffset || currentTime > fragEndOffset) {\n          if (fragCurrent.loader) {\n            logger.log('seeking outside of buffer while fragment load in progress, cancel fragment load');\n            fragCurrent.loader.abort();\n          }\n          this.fragCurrent = null;\n          this.fragPrevious = null;\n          // switch to IDLE state to load new fragment\n          this.state = State.IDLE;\n        } else {\n          logger.log('seeking outside of buffer but within currently loaded fragment range');\n        }\n      }\n    } else if (this.state === State.ENDED) {\n        // if seeking to unbuffered area, clean up fragPrevious\n        if (bufferInfo.len === 0) {\n          this.fragPrevious = 0;\n        }\n        // switch to IDLE state to check for potential new fragment\n        this.state = State.IDLE;\n    }\n    if (media) {\n      this.lastCurrentTime = currentTime;\n    }\n    // avoid reporting fragment loop loading error in case user is seeking several times on same position\n    if (this.state !== State.FRAG_LOADING && this.fragLoadIdx !== undefined) {\n      this.fragLoadIdx += 2 * config.fragLoadingLoopThreshold;\n    }\n    // in case seeking occurs although no media buffered, adjust startPosition and nextLoadPosition to seek target\n    if(!this.loadedmetadata) {\n      this.nextLoadPosition = this.startPosition = currentTime;\n    }\n    // tick to speed up processing\n    this.tick();\n  }\n\n  onMediaSeeked() {\n    const media = this.media, currentTime = media ? media.currentTime : undefined;\n    if (!isNaN(currentTime)) {\n      logger.log(`media seeked to ${currentTime.toFixed(3)}`);\n    }\n    // tick to speed up FRAGMENT_PLAYING triggering\n    this.tick();\n  }\n\n  onMediaEnded() {\n    logger.log('media ended');\n    // reset startPosition and lastCurrentTime to restart playback @ stream beginning\n    this.startPosition = this.lastCurrentTime = 0;\n  }\n\n\n  onManifestLoading() {\n    // reset buffer on manifest loading\n    logger.log('trigger BUFFER_RESET');\n    this.hls.trigger(Event.BUFFER_RESET);\n    this._bufferedFrags = [];\n    this.stalled = false;\n    this.startPosition = this.lastCurrentTime = 0;\n  }\n\n  onManifestParsed(data) {\n    var aac = false, heaac = false, codec;\n    data.levels.forEach(level => {\n      // detect if we have different kind of audio codecs used amongst playlists\n      codec = level.audioCodec;\n      if (codec) {\n        if (codec.indexOf('mp4a.40.2') !== -1) {\n          aac = true;\n        }\n        if (codec.indexOf('mp4a.40.5') !== -1) {\n          heaac = true;\n        }\n      }\n    });\n    this.audioCodecSwitch = (aac && heaac);\n    if (this.audioCodecSwitch) {\n      logger.log('both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC');\n    }\n    this.levels = data.levels;\n    this.startFragRequested = false;\n    let config = this.config;\n    if (config.autoStartLoad || this.forceStartLoad) {\n      this.hls.startLoad(config.startPosition);\n    }\n  }\n\n  onLevelLoaded(data) {\n    const newDetails = data.details;\n    const newLevelId = data.level;\n    const lastLevel = this.levels[this.levelLastLoaded];\n    const curLevel = this.levels[newLevelId];\n    const duration = newDetails.totalduration;\n    let sliding = 0;\n\n    logger.log(`level ${newLevelId} loaded [${newDetails.startSN},${newDetails.endSN}],duration:${duration}`);\n\n    if (newDetails.live) {\n      var curDetails = curLevel.details;\n      if (curDetails && newDetails.fragments.length > 0) {\n        // we already have details for that level, merge them\n        LevelHelper.mergeDetails(curDetails,newDetails);\n        sliding = newDetails.fragments[0].start;\n        this.liveSyncPosition = this.computeLivePosition(sliding, curDetails);\n        if (newDetails.PTSKnown && !isNaN(sliding)) {\n          logger.log(`live playlist sliding:${sliding.toFixed(3)}`);\n        } else {\n          logger.log('live playlist - outdated PTS, unknown sliding');\n          alignDiscontinuities(this.fragPrevious, lastLevel, newDetails);\n        }\n      } else {\n        logger.log('live playlist - first load, unknown sliding');\n        newDetails.PTSKnown = false;\n        alignDiscontinuities(this.fragPrevious, lastLevel, newDetails);\n      }\n    } else {\n      newDetails.PTSKnown = false;\n    }\n    // override level info\n    curLevel.details = newDetails;\n    this.levelLastLoaded = newLevelId;\n    this.hls.trigger(Event.LEVEL_UPDATED, { details: newDetails, level: newLevelId });\n\n    if (this.startFragRequested === false) {\n    // compute start position if set to -1. use it straight away if value is defined\n      if (this.startPosition === -1 || this.lastCurrentTime === -1) {\n        // first, check if start time offset has been set in playlist, if yes, use this value\n        let startTimeOffset = newDetails.startTimeOffset;\n        if(!isNaN(startTimeOffset)) {\n          if (startTimeOffset < 0) {\n            logger.log(`negative start time offset ${startTimeOffset}, count from end of last fragment`);\n            startTimeOffset = sliding + duration + startTimeOffset;\n          }\n          logger.log(`start time offset found in playlist, adjust startPosition to ${startTimeOffset}`);\n          this.startPosition = startTimeOffset;\n        } else {\n          // if live playlist, set start position to be fragment N-this.config.liveSyncDurationCount (usually 3)\n          if (newDetails.live) {\n            this.startPosition = this.computeLivePosition(sliding, newDetails);\n            logger.log(`configure startPosition to ${this.startPosition}`);\n          } else {\n            this.startPosition = 0;\n          }\n        }\n        this.lastCurrentTime = this.startPosition;\n      }\n      this.nextLoadPosition = this.startPosition;\n    }\n    // only switch batck to IDLE state if we were waiting for level to start downloading a new fragment\n    if (this.state === State.WAITING_LEVEL) {\n      this.state = State.IDLE;\n    }\n    //trigger handler right now\n    this.tick();\n  }\n\n  onKeyLoaded() {\n    if (this.state === State.KEY_LOADING) {\n      this.state = State.IDLE;\n      this.tick();\n    }\n  }\n\n  onFragLoaded(data) {\n    var fragCurrent = this.fragCurrent,\n        fragLoaded = data.frag;\n    if (this.state === State.FRAG_LOADING &&\n        fragCurrent &&\n        fragLoaded.type === 'main' &&\n        fragLoaded.level === fragCurrent.level &&\n        fragLoaded.sn === fragCurrent.sn) {\n      let stats = data.stats,\n          currentLevel = this.levels[fragCurrent.level],\n          details = currentLevel.details;\n      logger.log(`Loaded  ${fragCurrent.sn} of [${details.startSN} ,${details.endSN}],level ${fragCurrent.level}`);\n      // reset frag bitrate test in any case after frag loaded event\n      this.bitrateTest = false;\n      this.stats = stats;\n      // if this frag was loaded to perform a bitrate test AND if hls.nextLoadLevel is greater than 0\n      // then this means that we should be able to load a fragment at a higher quality level\n      if (fragLoaded.bitrateTest === true && this.hls.nextLoadLevel) {\n        // switch back to IDLE state ... we just loaded a fragment to determine adequate start bitrate and initialize autoswitch algo\n        this.state = State.IDLE;\n        this.startFragRequested = false;\n        stats.tparsed = stats.tbuffered = performance.now();\n        this.hls.trigger(Event.FRAG_BUFFERED, {stats: stats, frag: fragCurrent, id : 'main'});\n        this.tick();\n      } else if (fragLoaded.sn === 'initSegment') {\n        this.state = State.IDLE;\n        stats.tparsed = stats.tbuffered = performance.now();\n        details.initSegment.data = data.payload;\n        this.hls.trigger(Event.FRAG_BUFFERED, {stats: stats, frag: fragCurrent, id : 'main'});\n        this.tick();\n      } else {\n        this.state = State.PARSING;\n        // transmux the MPEG-TS data to ISO-BMFF segments\n        let duration = details.totalduration,\n            level = fragCurrent.level,\n            sn = fragCurrent.sn,\n            audioCodec = this.config.defaultAudioCodec || currentLevel.audioCodec;\n        if(this.audioCodecSwap) {\n          logger.log('swapping playlist audio codec');\n          if(audioCodec === undefined) {\n            audioCodec = this.lastAudioCodec;\n          }\n          if(audioCodec) {\n            if(audioCodec.indexOf('mp4a.40.5') !==-1) {\n              audioCodec = 'mp4a.40.2';\n            } else {\n              audioCodec = 'mp4a.40.5';\n            }\n          }\n        }\n        this.pendingBuffering = true;\n        this.appended = false;\n        logger.log(`Parsing ${sn} of [${details.startSN} ,${details.endSN}],level ${level}, cc ${fragCurrent.cc}`);\n        let demuxer = this.demuxer;\n        if (!demuxer) {\n          demuxer = this.demuxer = new Demuxer(this.hls,'main');\n        }\n        // time Offset is accurate if level PTS is known, or if playlist is not sliding (not live) and if media is not seeking (this is to overcome potential timestamp drifts between playlists and fragments)\n        let media = this.media;\n        let mediaSeeking = media && media.seeking;\n        let accurateTimeOffset = !mediaSeeking && (details.PTSKnown || !details.live);\n        let initSegmentData = details.initSegment ? details.initSegment.data : [];\n        demuxer.push(data.payload, initSegmentData,audioCodec, currentLevel.videoCodec, fragCurrent, duration, accurateTimeOffset,undefined);\n      }\n    }\n    this.fragLoadError = 0;\n  }\n\n  onFragParsingInitSegment(data) {\n    const fragCurrent = this.fragCurrent;\n    const fragNew = data.frag;\n    if (fragCurrent &&\n        data.id === 'main' &&\n        fragNew.sn === fragCurrent.sn &&\n        fragNew.level === fragCurrent.level &&\n        this.state === State.PARSING) {\n      var tracks = data.tracks, trackName, track;\n\n      // if audio track is expected to come from audio stream controller, discard any coming from main\n      if (tracks.audio && this.altAudio) {\n        delete tracks.audio;\n      }\n      // include levelCodec in audio and video tracks\n      track = tracks.audio;\n      if(track) {\n        var audioCodec = this.levels[this.level].audioCodec,\n            ua = navigator.userAgent.toLowerCase();\n        if(audioCodec && this.audioCodecSwap) {\n          logger.log('swapping playlist audio codec');\n          if(audioCodec.indexOf('mp4a.40.5') !==-1) {\n            audioCodec = 'mp4a.40.2';\n          } else {\n            audioCodec = 'mp4a.40.5';\n          }\n        }\n        // in case AAC and HE-AAC audio codecs are signalled in manifest\n        // force HE-AAC , as it seems that most browsers prefers that way,\n        // except for mono streams OR on FF\n        // these conditions might need to be reviewed ...\n        if (this.audioCodecSwitch) {\n            // don't force HE-AAC if mono stream\n           if(track.metadata.channelCount !== 1 &&\n            // don't force HE-AAC if firefox\n            ua.indexOf('firefox') === -1) {\n              audioCodec = 'mp4a.40.5';\n          }\n        }\n        // HE-AAC is broken on Android, always signal audio codec as AAC even if variant manifest states otherwise\n        if(ua.indexOf('android') !== -1 && track.container !== 'audio/mpeg') { // Exclude mpeg audio\n          audioCodec = 'mp4a.40.2';\n          logger.log(`Android: force audio codec to ${audioCodec}`);\n        }\n        track.levelCodec = audioCodec;\n        track.id = data.id;\n      }\n      track = tracks.video;\n      if(track) {\n        track.levelCodec = this.levels[this.level].videoCodec;\n        track.id = data.id;\n      }\n      this.hls.trigger(Event.BUFFER_CODECS,tracks);\n      // loop through tracks that are going to be provided to bufferController\n      for (trackName in tracks) {\n        track = tracks[trackName];\n        logger.log(`main track:${trackName},container:${track.container},codecs[level/parsed]=[${track.levelCodec}/${track.codec}]`);\n        var initSegment = track.initSegment;\n        if (initSegment) {\n          this.appended = true;\n          // arm pending Buffering flag before appending a segment\n          this.pendingBuffering = true;\n          this.hls.trigger(Event.BUFFER_APPENDING, {type: trackName, data: initSegment, parent : 'main', content : 'initSegment'});\n        }\n      }\n      //trigger handler right now\n      this.tick();\n    }\n  }\n\n  onFragParsingData(data) {\n    const fragCurrent = this.fragCurrent;\n    const fragNew = data.frag;\n    if (fragCurrent &&\n        data.id === 'main' &&\n        fragNew.sn === fragCurrent.sn &&\n        fragNew.level === fragCurrent.level &&\n        !(data.type === 'audio' && this.altAudio) && // filter out main audio if audio track is loaded through audio stream controller\n        this.state === State.PARSING) {\n      var level = this.levels[this.level],\n          frag = fragCurrent;\n          if (isNaN(data.endPTS)) {\n            data.endPTS = data.startPTS + fragCurrent.duration;\n            data.endDTS = data.startDTS + fragCurrent.duration;\n          }\n\n      logger.log(`Parsed ${data.type},PTS:[${data.startPTS.toFixed(3)},${data.endPTS.toFixed(3)}],DTS:[${data.startDTS.toFixed(3)}/${data.endDTS.toFixed(3)}],nb:${data.nb},dropped:${data.dropped || 0}`);\n\n      // Detect gaps in a fragment  and try to fix it by finding a keyframe in the previous fragment (see _findFragments)\n      if(data.type === 'video') {\n        frag.dropped = data.dropped;\n        if (frag.dropped) {\n          if (!frag.backtracked) {\n            logger.warn('missing video frame(s), backtracking fragment');\n            // Return back to the IDLE state without appending to buffer\n            // Causes findFragments to backtrack a segment and find the keyframe\n            // Audio fragments arriving before video sets the nextLoadPosition, causing _findFragments to skip the backtracked fragment\n            frag.backtracked = true;\n            this.nextLoadPosition = data.startPTS;\n            this.state = State.IDLE;\n            this.fragPrevious = frag;\n            this.tick();\n            return;\n          } else {\n            logger.warn('Already backtracked on this fragment, appending with the gap');\n          }\n        } else {\n          // Only reset the backtracked flag if we've loaded the frag without any dropped frames\n          frag.backtracked = false;\n        }\n      }\n\n      var drift = LevelHelper.updateFragPTSDTS(level.details,frag,data.startPTS,data.endPTS,data.startDTS,data.endDTS),\n          hls = this.hls;\n      hls.trigger(Event.LEVEL_PTS_UPDATED, {details: level.details, level: this.level, drift: drift, type: data.type, start: data.startPTS, end: data.endPTS});\n\n      // has remuxer dropped video frames located before first keyframe ?\n      [data.data1, data.data2].forEach(buffer => {\n        // only append in PARSING state (rationale is that an appending error could happen synchronously on first segment appending)\n        // in that case it is useless to append following segments\n        if (buffer && buffer.length && this.state === State.PARSING) {\n          this.appended = true;\n          // arm pending Buffering flag before appending a segment\n          this.pendingBuffering = true;\n          hls.trigger(Event.BUFFER_APPENDING, {type: data.type, data: buffer, parent : 'main',content : 'data'});\n        }\n      });\n      //trigger handler right now\n      this.tick();\n    }\n  }\n\n  onFragParsed(data) {\n    const fragCurrent = this.fragCurrent;\n    const fragNew = data.frag;\n    if (fragCurrent &&\n        data.id === 'main' &&\n        fragNew.sn === fragCurrent.sn &&\n        fragNew.level === fragCurrent.level &&\n        this.state === State.PARSING) {\n      this.stats.tparsed = performance.now();\n      this.state = State.PARSED;\n      this._checkAppendedParsed();\n    }\n  }\n\n  onAudioTrackSwitching(data) {\n    // if any URL found on new audio track, it is an alternate audio track\n    var altAudio = !!data.url,\n        trackId = data.id;\n    // if we switch on main audio, ensure that main fragment scheduling is synced with media.buffered\n    // don't do anything if we switch to alt audio: audio stream controller is handling it.\n    // we will just have to change buffer scheduling on audioTrackSwitched\n    if (!altAudio) {\n      if (this.mediaBuffer !== this.media) {\n        logger.log(`switching on main audio, use media.buffered to schedule main fragment loading`);\n        this.mediaBuffer = this.media;\n        let fragCurrent = this.fragCurrent;\n        // we need to refill audio buffer from main: cancel any frag loading to speed up audio switch\n        if (fragCurrent.loader) {\n          logger.log('switching to main audio track, cancel main fragment load');\n          fragCurrent.loader.abort();\n        }\n        this.fragCurrent = null;\n        this.fragPrevious = null;\n        // destroy demuxer to force init segment generation (following audio switch)\n        if (this.demuxer) {\n          this.demuxer.destroy();\n          this.demuxer = null;\n        }\n        // switch to IDLE state to load new fragment\n        this.state = State.IDLE;\n      }\n      let hls = this.hls;\n      // switching to main audio, flush all audio and trigger track switched\n      hls.trigger(Event.BUFFER_FLUSHING, {startOffset: 0 , endOffset: Number.POSITIVE_INFINITY, type : 'audio'});\n      hls.trigger(Event.AUDIO_TRACK_SWITCHED, {id : trackId});\n      this.altAudio = false;\n    }\n  }\n\n  onAudioTrackSwitched(data) {\n    var trackId = data.id,\n    altAudio = !!this.hls.audioTracks[trackId].url;\n    if (altAudio) {\n      let videoBuffer = this.videoBuffer;\n      // if we switched on alternate audio, ensure that main fragment scheduling is synced with video sourcebuffer buffered\n      if (videoBuffer && this.mediaBuffer !== videoBuffer) {\n        logger.log(`switching on alternate audio, use video.buffered to schedule main fragment loading`);\n        this.mediaBuffer = videoBuffer;\n      }\n    }\n    this.altAudio = altAudio;\n    this.tick();\n  }\n\n\n\n  onBufferCreated(data) {\n    let tracks = data.tracks, mediaTrack, name, alternate = false;\n    for(var type in tracks) {\n      let track = tracks[type];\n      if (track.id === 'main') {\n        name = type;\n        mediaTrack = track;\n        // keep video source buffer reference\n        if (type === 'video') {\n          this.videoBuffer = tracks[type].buffer;\n        }\n      } else {\n        alternate = true;\n      }\n    }\n    if (alternate && mediaTrack) {\n      logger.log(`alternate track found, use ${name}.buffered to schedule main fragment loading`);\n      this.mediaBuffer = mediaTrack.buffer;\n    } else {\n      this.mediaBuffer = this.media;\n    }\n  }\n\n  onBufferAppended(data) {\n    if (data.parent === 'main') {\n      const state = this.state;\n      if (state === State.PARSING || state === State.PARSED) {\n        // check if all buffers have been appended\n        this.pendingBuffering = (data.pending > 0);\n        this._checkAppendedParsed();\n      }\n    }\n  }\n\n  _checkAppendedParsed() {\n    //trigger handler right now\n    if (this.state === State.PARSED && (!this.appended || !this.pendingBuffering)) {\n      const frag = this.fragCurrent;\n      if (frag) {\n        const media = this.mediaBuffer ? this.mediaBuffer : this.media;\n        logger.log(`main buffered : ${TimeRanges.toString(media.buffered)}`);\n        // filter fragments potentially evicted from buffer. this is to avoid memleak on live streams\n        let bufferedFrags = this._bufferedFrags.filter(frag => {return BufferHelper.isBuffered(media,(frag.startPTS + frag.endPTS) / 2);});\n        // push new range\n        bufferedFrags.push(frag);\n        // sort frags, as we use BinarySearch for lookup in getBufferedFrag ...\n        this._bufferedFrags = bufferedFrags.sort(function(a,b) {return (a.startPTS - b.startPTS);});\n        this.fragPrevious = frag;\n        const stats = this.stats;\n        stats.tbuffered = performance.now();\n        // we should get rid of this.fragLastKbps\n        this.fragLastKbps = Math.round(8 * stats.total / (stats.tbuffered - stats.tfirst));\n        this.hls.trigger(Event.FRAG_BUFFERED, {stats: stats, frag: frag, id : 'main'});\n        this.state = State.IDLE;\n      }\n      this.tick();\n    }\n  }\n\n  onError(data) {\n    let frag = data.frag || this.fragCurrent;\n    // don't handle frag error not related to main fragment\n    if (frag && frag.type !== 'main') {\n      return;\n    }\n    // 0.5 : tolerance needed as some browsers stalls playback before reaching buffered end\n    let mediaBuffered = !!this.media && BufferHelper.isBuffered(this.media, this.media.currentTime) && BufferHelper.isBuffered(this.media, this.media.currentTime + 0.5);\n\n    switch(data.details) {\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        if (!data.fatal) {\n          // keep retrying until the limit will be reached\n          if ((this.fragLoadError + 1) <= this.config.fragLoadingMaxRetry) {\n            // exponential backoff capped to config.fragLoadingMaxRetryTimeout\n            let delay = Math.min(Math.pow(2, this.fragLoadError) * this.config.fragLoadingRetryDelay, this.config.fragLoadingMaxRetryTimeout);\n            // reset load counter to avoid frag loop loading error\n            frag.loadCounter = 0;\n            logger.warn(`mediaController: frag loading failed, retry in ${delay} ms`);\n            this.retryDate = performance.now() + delay;\n            // retry loading state\n            // if loadedmetadata is not set, it means that we are emergency switch down on first frag\n            // in that case, reset startFragRequested flag\n            if (!this.loadedmetadata) {\n              this.startFragRequested = false;\n              this.nextLoadPosition = this.startPosition;\n            }\n            this.fragLoadError++;\n            this.state = State.FRAG_LOADING_WAITING_RETRY;\n          } else {\n            logger.error(`mediaController: ${data.details} reaches max retry, redispatch as fatal ...`);\n            // switch error to fatal\n            data.fatal = true;\n            this.state = State.ERROR;\n          }\n        }\n        break;\n      case ErrorDetails.FRAG_LOOP_LOADING_ERROR:\n        if(!data.fatal) {\n          // if buffer is not empty\n          if (mediaBuffered) {\n            // try to reduce max buffer length : rationale is that we could get\n            // frag loop loading error because of buffer eviction\n            this._reduceMaxBufferLength(frag.duration);\n            this.state = State.IDLE;\n          } else {\n            // buffer empty. report as fatal if in manual mode or if lowest level.\n            // level controller takes care of emergency switch down logic\n            if (!frag.autoLevel || frag.level === 0) {\n              // switch error to fatal\n              data.fatal = true;\n              this.state = State.ERROR;\n            }\n          }\n        }\n        break;\n      case ErrorDetails.LEVEL_LOAD_ERROR:\n      case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n        if(this.state !== State.ERROR) {\n          if (data.fatal) {\n           // if fatal error, stop processing\n            this.state = State.ERROR;\n            logger.warn(`streamController: ${data.details},switch to ${this.state} state ...`);\n          } else {\n            // in case of non fatal error while loading level, if level controller is not retrying to load level , switch back to IDLE\n            if (!data.levelRetry && this.state === State.WAITING_LEVEL) {\n              this.state = State.IDLE;\n            }\n          }\n        }\n        break;\n      case ErrorDetails.BUFFER_FULL_ERROR:\n        // if in appending state\n        if (data.parent === 'main' && (this.state === State.PARSING || this.state === State.PARSED)) {\n          // reduce max buf len if current position is buffered\n          if (mediaBuffered) {\n            this._reduceMaxBufferLength(this.config.maxBufferLength);\n            this.state = State.IDLE;\n          } else {\n            // current position is not buffered, but browser is still complaining about buffer full error\n            // this happens on IE/Edge, refer to https://github.com/video-dev/hls.js/pull/708\n            // in that case flush the whole buffer to recover\n            logger.warn('buffer full error also media.currentTime is not buffered, flush everything');\n            this.fragCurrent = null;\n            // flush everything\n            this.flushMainBuffer(0,Number.POSITIVE_INFINITY);\n          }\n        }\n        break;\n      default:\n        break;\n    }\n  }\n\n  _reduceMaxBufferLength(minLength) {\n    let config = this.config;\n    if (config.maxMaxBufferLength >= minLength) {\n      // reduce max buffer length as it might be too high. we do this to avoid loop flushing ...\n      config.maxMaxBufferLength/=2;\n      logger.warn(`main:reduce max buffer length to ${config.maxMaxBufferLength}s`);\n      if (this.fragLoadIdx !== undefined) {\n        // increase fragment load Index to avoid frag loop loading error after buffer flush\n        this.fragLoadIdx += 2 * config.fragLoadingLoopThreshold;\n      }\n    }\n  }\n\n_checkBuffer() {\n    var media = this.media,\n        config = this.config;\n    // if ready state different from HAVE_NOTHING (numeric value 0), we are allowed to seek\n    if(media && media.readyState) {\n        let currentTime = media.currentTime,\n            mediaBuffer = this.mediaBuffer ? this.mediaBuffer : media,\n             buffered = mediaBuffer.buffered;\n      // adjust currentTime to start position on loaded metadata\n      if(!this.loadedmetadata && buffered.length) {\n        this.loadedmetadata = true;\n        // only adjust currentTime if different from startPosition or if startPosition not buffered\n        // at that stage, there should be only one buffered range, as we reach that code after first fragment has been buffered\n        let startPosition = media.seeking ? currentTime : this.startPosition,\n            startPositionBuffered = BufferHelper.isBuffered(mediaBuffer,startPosition),\n            firstbufferedPosition = buffered.start(0),\n            startNotBufferedButClose = !startPositionBuffered && (Math.abs(startPosition-firstbufferedPosition) < config.maxSeekHole);\n        // if currentTime not matching with expected startPosition or startPosition not buffered but close to first buffered\n        if (currentTime !== startPosition || startNotBufferedButClose) {\n          logger.log(`target start position:${startPosition}`);\n          // if startPosition not buffered, let's seek to buffered.start(0)\n          if(!startNotBufferedButClose) {\n            startPosition = firstbufferedPosition;\n            logger.log(`target start position not buffered, seek to buffered.start(0) ${startPosition}`);\n          }\n          logger.log(`adjust currentTime from ${currentTime} to ${startPosition}`);\n          media.currentTime = startPosition;\n        }\n      } else if (this.immediateSwitch) {\n        this.immediateLevelSwitchEnd();\n      } else {\n        let bufferInfo = BufferHelper.bufferInfo(media,currentTime,0),\n            expectedPlaying = !(media.paused || // not playing when media is paused\n                                media.ended  || // not playing when media is ended\n                                media.buffered.length === 0), // not playing if nothing buffered\n            jumpThreshold = 0.5, // tolerance needed as some browsers stalls playback before reaching buffered range end\n            playheadMoving = currentTime !== this.lastCurrentTime;\n\n        if (playheadMoving) {\n          // played moving, but was previously stalled => now not stuck anymore\n          if (this.stallReported) {\n            logger.warn(`playback not stuck anymore @${currentTime}, after ${Math.round(performance.now()-this.stalled)}ms`);\n            this.stallReported = false;\n          }\n          this.stalled = undefined;\n          this.nudgeRetry = 0;\n        } else {\n          // playhead not moving\n          if(expectedPlaying) {\n            // playhead not moving BUT media expected to play\n            const tnow = performance.now();\n            const hls = this.hls;\n            if(!this.stalled) {\n              // stall just detected, store current time\n              this.stalled = tnow;\n              this.stallReported = false;\n            } else {\n              // playback already stalled, check stalling duration\n              // if stalling for more than a given threshold, let's try to recover\n              const stalledDuration = tnow - this.stalled;\n              const bufferLen = bufferInfo.len;\n              let nudgeRetry = this.nudgeRetry || 0;\n              // have we reached stall deadline ?\n              if (bufferLen <= jumpThreshold && stalledDuration > config.lowBufferWatchdogPeriod * 1000) {\n                // report stalled error once\n                if (!this.stallReported) {\n                  this.stallReported = true;\n                  logger.warn(`playback stalling in low buffer @${currentTime}`);\n                  hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_STALLED_ERROR, fatal: false, buffer : bufferLen});\n                }\n                // if buffer len is below threshold, try to jump to start of next buffer range if close\n                // no buffer available @ currentTime, check if next buffer is close (within a config.maxSeekHole second range)\n                var nextBufferStart = bufferInfo.nextStart, delta = nextBufferStart-currentTime;\n                if(nextBufferStart &&\n                   (delta < config.maxSeekHole) &&\n                   (delta > 0)) {\n                  this.nudgeRetry = ++nudgeRetry;\n                  const nudgeOffset = nudgeRetry * config.nudgeOffset;\n                  // next buffer is close ! adjust currentTime to nextBufferStart\n                  // this will ensure effective video decoding\n                  logger.log(`adjust currentTime from ${media.currentTime} to next buffered @ ${nextBufferStart} + nudge ${nudgeOffset}`);\n                  media.currentTime = nextBufferStart + nudgeOffset;\n                  // reset stalled so to rearm watchdog timer\n                  this.stalled = undefined;\n                  hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_SEEK_OVER_HOLE, fatal: false, hole : nextBufferStart + nudgeOffset - currentTime});\n                }\n              } else if (bufferLen > jumpThreshold && stalledDuration > config.highBufferWatchdogPeriod * 1000) {\n                // report stalled error once\n                if (!this.stallReported) {\n                  this.stallReported = true;\n                  logger.warn(`playback stalling in high buffer @${currentTime}`);\n                  hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_STALLED_ERROR, fatal: false, buffer : bufferLen});\n                }\n                // reset stalled so to rearm watchdog timer\n                this.stalled = undefined;\n                this.nudgeRetry = ++nudgeRetry;\n                if (nudgeRetry < config.nudgeMaxRetry) {\n                  const currentTime = media.currentTime;\n                  const targetTime = currentTime + nudgeRetry * config.nudgeOffset;\n                  logger.log(`adjust currentTime from ${currentTime} to ${targetTime}`);\n                  // playback stalled in buffered area ... let's nudge currentTime to try to overcome this\n                  media.currentTime = targetTime;\n                  hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_NUDGE_ON_STALL, fatal: false});\n                } else {\n                  logger.error(`still stuck in high buffer @${currentTime} after ${config.nudgeMaxRetry}, raise fatal error`);\n                  hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_STALLED_ERROR, fatal: true});\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  onFragLoadEmergencyAborted() {\n    this.state = State.IDLE;\n    // if loadedmetadata is not set, it means that we are emergency switch down on first frag\n    // in that case, reset startFragRequested flag\n    if(!this.loadedmetadata) {\n      this.startFragRequested = false;\n      this.nextLoadPosition = this.startPosition;\n    }\n    this.tick();\n  }\n\n  onBufferFlushed() {\n    /* after successful buffer flushing, filter flushed fragments from bufferedFrags\n      use mediaBuffered instead of media (so that we will check against video.buffered ranges in case of alt audio track)\n    */\n    const media = this.mediaBuffer ? this.mediaBuffer : this.media;\n    this._bufferedFrags = this._bufferedFrags.filter(frag => {return BufferHelper.isBuffered(media,(frag.startPTS + frag.endPTS) / 2);});\n\n    if (this.fragLoadIdx !== undefined) {\n      // increase fragment load Index to avoid frag loop loading error after buffer flush\n      this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n    }\n    // move to IDLE once flush complete. this should trigger new fragment loading\n    this.state = State.IDLE;\n    // reset reference to frag\n    this.fragPrevious = null;\n  }\n\n  swapAudioCodec() {\n    this.audioCodecSwap = !this.audioCodecSwap;\n  }\n\n  computeLivePosition(sliding, levelDetails) {\n    let targetLatency = this.config.liveSyncDuration !== undefined ? this.config.liveSyncDuration : this.config.liveSyncDurationCount * levelDetails.targetduration;\n    return sliding + Math.max(0, levelDetails.totalduration - targetLatency);\n  }\n\n  get liveSyncPosition() {\n    return this._liveSyncPosition;\n  }\n\n  set liveSyncPosition(value) {\n    this._liveSyncPosition = value;\n  }\n}\nexport default StreamController;\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/controller/stream-controller.js"",""/*\n * Level Controller\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {logger} from '../utils/logger';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport BufferHelper from '../helper/buffer-helper';\nimport {isCodecSupportedInMp4} from '../utils/codecs';\n\nclass LevelController extends EventHandler {\n\n  constructor(hls) {\n    super(hls,\n      Event.MANIFEST_LOADED,\n      Event.LEVEL_LOADED,\n      Event.FRAG_LOADED,\n      Event.ERROR);\n    this._manualLevel = -1;\n    this.timer = null;\n  }\n\n  destroy() {\n    this.cleanTimer();\n    this._manualLevel = -1;\n  }\n\n  cleanTimer() {\n    if (this.timer !== null) {\n      clearTimeout(this.timer);\n      this.timer = null;\n    }\n  }\n\n  startLoad() {\n    this.canload = true;\n    let levels = this._levels;\n    // clean up live level details to force reload them, and reset load errors\n    if(levels) {\n      levels.forEach(level => {\n        level.loadError = 0;\n        const levelDetails = level.details;\n        if (levelDetails && levelDetails.live) {\n          level.details = undefined;\n        }\n      });\n    }\n    // speed up live playlist refresh if timer exists\n    if (this.timer) {\n      this.tick();\n    }\n  }\n\n  stopLoad() {\n    this.canload = false;\n  }\n\n  onManifestLoaded(data) {\n    let levels          = [],\n        bitrateStart,\n        levelSet        = {},\n        levelFromSet    = null,\n        videoCodecFound = false,\n        audioCodecFound = false,\n        chromeOrFirefox = /chrome|firefox/.test(navigator.userAgent.toLowerCase());\n\n    // regroup redundant levels together\n    data.levels.forEach(level => {\n      level.loadError = 0;\n      level.fragmentError = false;\n\n      videoCodecFound = videoCodecFound || !!level.videoCodec;\n      audioCodecFound = audioCodecFound || !!level.audioCodec || !!(level.attrs && level.attrs.AUDIO);\n\n      // erase audio codec info if browser does not support mp4a.40.34.\n      // demuxer will autodetect codec and fallback to mpeg/audio\n      if (chromeOrFirefox === true && level.audioCodec && level.audioCodec.indexOf('mp4a.40.34') !== -1) {\n        level.audioCodec = undefined;\n      }\n\n      levelFromSet = levelSet[level.bitrate];\n\n      if (levelFromSet === undefined) {\n        level.url = [level.url];\n        level.urlId = 0;\n        levelSet[level.bitrate] = level;\n        levels.push(level);\n      } else {\n        levelFromSet.url.push(level.url);\n      }\n    });\n\n    // remove audio-only level if we also have levels with audio+video codecs signalled\n    if (videoCodecFound === true && audioCodecFound === true) {\n      levels = levels.filter(({videoCodec}) => !!videoCodec);\n    }\n\n    // only keep levels with supported audio/video codecs\n    levels = levels.filter(({audioCodec, videoCodec}) => {\n      return (!audioCodec || isCodecSupportedInMp4(audioCodec)) && (!videoCodec || isCodecSupportedInMp4(videoCodec));\n    });\n\n    if (levels.length > 0) {\n      // start bitrate is the first bitrate of the manifest\n      bitrateStart = levels[0].bitrate;\n      // sort level on bitrate\n      levels.sort(function (a, b) {\n        return a.bitrate - b.bitrate;\n      });\n      this._levels = levels;\n      // find index of first level in sorted levels\n      for (let i = 0; i < levels.length; i++) {\n        if (levels[i].bitrate === bitrateStart) {\n          this._firstLevel = i;\n          logger.log(`manifest loaded,${levels.length} level(s) found, first bitrate:${bitrateStart}`);\n          break;\n        }\n      }\n      this.hls.trigger(Event.MANIFEST_PARSED, {\n        levels    : levels,\n        firstLevel: this._firstLevel,\n        stats     : data.stats,\n        audio     : audioCodecFound,\n        video     : videoCodecFound,\n        altAudio  : data.audioTracks.length > 0\n      });\n    } else {\n      this.hls.trigger(Event.ERROR, {\n        type   : ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,\n        fatal  : true,\n        url    : this.hls.url,\n        reason : 'no level with compatible codecs found in manifest'\n      });\n    }\n  }\n\n  get levels() {\n    return this._levels;\n  }\n\n  get level() {\n    return this._level;\n  }\n\n  set level(newLevel) {\n    let levels = this._levels;\n    if (levels && levels.length > newLevel) {\n      if (this._level !== newLevel || levels[newLevel].details === undefined) {\n        this.setLevelInternal(newLevel);\n      }\n    }\n  }\n\n setLevelInternal(newLevel) {\n    const levels = this._levels;\n    const hls = this.hls;\n    // check if level idx is valid\n    if (newLevel >= 0 && newLevel < levels.length) {\n      // stopping live reloading timer if any\n      this.cleanTimer();\n      if (this._level !== newLevel) {\n        logger.log(`switching to level ${newLevel}`);\n        this._level = newLevel;\n        var levelProperties = levels[newLevel];\n        levelProperties.level = newLevel;\n        // LEVEL_SWITCH to be deprecated in next major release\n        hls.trigger(Event.LEVEL_SWITCH, levelProperties);\n        hls.trigger(Event.LEVEL_SWITCHING, levelProperties);\n      }\n      var level = levels[newLevel], levelDetails = level.details;\n       // check if we need to load playlist for this level\n      if (!levelDetails || levelDetails.live === true) {\n        // level not retrieved yet, or live playlist we need to (re)load it\n        var urlId = level.urlId;\n        hls.trigger(Event.LEVEL_LOADING, {url: level.url[urlId], level: newLevel, id: urlId});\n      }\n    } else {\n      // invalid level id given, trigger error\n      hls.trigger(Event.ERROR, {type : ErrorTypes.OTHER_ERROR, details: ErrorDetails.LEVEL_SWITCH_ERROR, level: newLevel, fatal: false, reason: 'invalid level idx'});\n    }\n }\n\n  get manualLevel() {\n    return this._manualLevel;\n  }\n\n  set manualLevel(newLevel) {\n    this._manualLevel = newLevel;\n    if (this._startLevel === undefined) {\n      this._startLevel = newLevel;\n    }\n    if (newLevel !== -1) {\n      this.level = newLevel;\n    }\n  }\n\n  get firstLevel() {\n    return this._firstLevel;\n  }\n\n  set firstLevel(newLevel) {\n    this._firstLevel = newLevel;\n  }\n\n  get startLevel() {\n    // hls.startLevel takes precedence over config.startLevel\n    // if none of these values are defined, fallback on this._firstLevel (first quality level appearing in variant manifest)\n    if (this._startLevel === undefined) {\n      let configStartLevel = this.hls.config.startLevel;\n      if (configStartLevel !== undefined) {\n        return configStartLevel;\n      } else {\n        return this._firstLevel;\n      }\n    } else {\n      return this._startLevel;\n    }\n  }\n\n  set startLevel(newLevel) {\n    this._startLevel = newLevel;\n  }\n\n  onError(data) {\n    if (data.fatal === true) {\n      if (data.type === ErrorTypes.NETWORK_ERROR) {\n        this.cleanTimer();\n      }\n      return;\n    }\n\n    let details = data.details, levelError = false, fragmentError = false;\n    let levelIndex, level;\n    let {config, media} = this.hls;\n\n    // try to recover not fatal errors\n    switch (details) {\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.FRAG_LOOP_LOADING_ERROR:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        levelIndex = data.frag.level;\n        fragmentError = true;\n        break;\n      case ErrorDetails.LEVEL_LOAD_ERROR:\n      case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n        levelIndex = data.context.level;\n        levelError = true;\n        break;\n      case ErrorDetails.REMUX_ALLOC_ERROR:\n        levelIndex = data.level;\n        break;\n    }\n    /* try to switch to a redundant stream if any available.\n     * if no redundant stream available, emergency switch down (if in auto mode and current level not 0)\n     * otherwise, we cannot recover this network error ...\n     */\n    if (levelIndex !== undefined) {\n      level = this._levels[levelIndex];\n      level.loadError++;\n      level.fragmentError = fragmentError;\n\n      // if any redundant streams available and if we haven't try them all (level.loadError is reseted on successful frag/level load.\n      // if level.loadError reaches redundantLevels it means that we tried them all, no hope  => let's switch down\n      const redundantLevels = level.url.length;\n\n      if (redundantLevels > 1 && level.loadError < redundantLevels) {\n        level.urlId = (level.urlId + 1) % redundantLevels;\n        level.details = undefined;\n        logger.warn(`level controller,${details} for level ${levelIndex}: switching to redundant stream id ${level.urlId}`);\n      } else {\n        // we could try to recover if in auto mode and current level not lowest level (0)\n        if ((this._manualLevel === -1) && levelIndex !== 0) {\n          logger.warn(`level controller,${details}: switch-down for next fragment`);\n          this.hls.nextAutoLevel = Math.max(0, levelIndex - 1);\n        } else if (level && level.details && level.details.live) {\n          logger.warn(`level controller,${details} on live stream, discard`);\n          if (levelError === true) {\n            // reset this._level so that another call to set level() will trigger again a frag load\n            this._level = undefined;\n          }\n          // other errors are handled by stream controller\n        } else if (levelError === true) {\n          // 0.5 : tolerance needed as some browsers stalls playback before reaching buffered end\n          let mediaBuffered = !!media && BufferHelper.isBuffered(media, media.currentTime) && BufferHelper.isBuffered(media, media.currentTime + 0.5);\n          // FIXME Rely on Level Retry parameters, now it's possible to retry as long as media is buffered\n          if (mediaBuffered === true) {\n            logger.warn(`level controller,${details}, but media buffered, retry in ${config.levelLoadingRetryDelay}ms`);\n            this.timer = setTimeout(() => this.tick(), config.levelLoadingRetryDelay);\n            // boolean used to inform stream controller not to switch back to IDLE on non fatal error\n            data.levelRetry = true;\n          } else {\n            logger.error(`cannot recover ${details} error`);\n            this._level = undefined;\n            // stopping live reloading timer if any\n            this.cleanTimer();\n            // switch error to fatal\n            data.fatal = true;\n          }\n        }\n      }\n    }\n  }\n\n  // reset errors on the successful load of a fragment\n  onFragLoaded({frag}) {\n    if (frag !== undefined && frag.type === 'main') {\n      const level = this._levels[frag.level];\n      if (level !== undefined) {\n        level.fragmentError = false;\n        level.loadError = 0;\n      }\n    }\n  }\n\n  onLevelLoaded(data) {\n    const levelId = data.level;\n    // only process level loaded events matching with expected level\n    if (levelId === this._level) {\n      let curLevel = this._levels[levelId];\n      // reset level load error counter on successful level loaded only if there is no issues with fragments\n      if(curLevel.fragmentError === false){\n        curLevel.loadError = 0;\n      }\n      let newDetails = data.details;\n      // if current playlist is a live playlist, arm a timer to reload it\n      if (newDetails.live) {\n        let reloadInterval = 1000 * ( newDetails.averagetargetduration ? newDetails.averagetargetduration : newDetails.targetduration),\n            curDetails     = curLevel.details;\n        if (curDetails && newDetails.endSN === curDetails.endSN) {\n          // follow HLS Spec, If the client reloads a Playlist file and finds that it has not\n          // changed then it MUST wait for a period of one-half the target\n          // duration before retrying.\n          reloadInterval /= 2;\n          logger.log(`same live playlist, reload twice faster`);\n        }\n        // decrement reloadInterval with level loading delay\n        reloadInterval -= performance.now() - data.stats.trequest;\n        // in any case, don't reload more than every second\n        reloadInterval = Math.max(1000, Math.round(reloadInterval));\n        logger.log(`live playlist, reload in ${reloadInterval} ms`);\n        this.timer = setTimeout(() => this.tick(), reloadInterval);\n      } else {\n        this.cleanTimer();\n      }\n    }\n  }\n\n  tick() {\n    var levelId = this._level;\n    if (levelId !== undefined && this.canload) {\n      var level = this._levels[levelId];\n      if (level && level.url) {\n        var urlId = level.urlId;\n        this.hls.trigger(Event.LEVEL_LOADING, {url: level.url[urlId], level: levelId, id: urlId});\n      }\n    }\n  }\n\n  get nextLoadLevel() {\n    if (this._manualLevel !== -1) {\n      return this._manualLevel;\n    } else {\n     return this.hls.nextAutoLevel;\n    }\n  }\n\n  set nextLoadLevel(nextLevel) {\n    this.level = nextLevel;\n    if (this._manualLevel === -1) {\n      this.hls.nextAutoLevel = nextLevel;\n    }\n  }\n}\n\nexport default LevelController;\n\n\n\n// WEBPACK FOOTER //\n// ./src/controller/level-controller.js"",""/*\n * id3 metadata track controller\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport ID3 from '../demux/id3';\n\nclass ID3TrackController extends EventHandler {\n\n  constructor(hls) {\n    super(hls,\n               Event.MEDIA_ATTACHED,\n               Event.MEDIA_DETACHING,\n               Event.FRAG_PARSING_METADATA);\n    this.id3Track = undefined;\n    this.media = undefined;\n  }\n\n  destroy() {\n    EventHandler.prototype.destroy.call(this);\n  }\n\n  // Add ID3 metatadata text track.\n  onMediaAttached(data) {\n    this.media = data.media;\n    if (!this.media) {\n      return;\n    }\n  }\n\n  onMediaDetaching() {\n    this.media = undefined;\n  }\n\n  onFragParsingMetadata(data) {\n    const fragment = data.frag;\n    const samples = data.samples;\n\n    // create track dynamically\n    if (!this.id3Track) {\n      this.id3Track = this.media.addTextTrack('metadata', 'id3');\n      this.id3Track.mode = 'hidden';\n    }\n\n    // Attempt to recreate Safari functionality by creating\n    // WebKitDataCue objects when available and store the decoded\n    // ID3 data in the value property of the cue\n    let Cue = window.WebKitDataCue || window.VTTCue || window.TextTrackCue;\n\n    for (let i = 0; i < samples.length; i++) {\n      const frames = ID3.getID3Frames(samples[i].data);\n      if (frames) {\n        const startTime = samples[i].pts;\n        let endTime = i < samples.length - 1 ? samples[i+1].pts : fragment.endPTS;\n\n        // Give a slight bump to the endTime if it's equal to startTime to avoid a SyntaxError in IE\n        if (startTime === endTime) {\n          endTime += 0.0001;\n        }\n\n        for(let j = 0; j < frames.length; j++) {\n          const frame = frames[j];\n          // Safari doesn't put the timestamp frame in the TextTrack\n          if (!ID3.isTimeStampFrame(frame)) {\n            const cue = new Cue(startTime, endTime, '');\n            cue.value = frame;\n            this.id3Track.addCue(cue);\n          }\n        }\n      }\n    }\n  }\n}\n\nexport default ID3TrackController;\n\n\n\n// WEBPACK FOOTER //\n// ./src/controller/id3-track-controller.js"",""/*\n * compute an Exponential Weighted moving average\n * - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n *  - heavily inspired from shaka-player\n */\n\nclass EWMA {\n\n //  About half of the estimated value will be from the last |halfLife| samples by weight.\n  constructor(halfLife) {\n    // Larger values of alpha expire historical data more slowly.\n    this.alpha_ = halfLife ? Math.exp(Math.log(0.5) / halfLife) : 0;\n    this.estimate_ = 0;\n    this.totalWeight_ = 0;\n  }\n\n  sample(weight,value) {\n    var adjAlpha = Math.pow(this.alpha_, weight);\n    this.estimate_ = value * (1 - adjAlpha) + adjAlpha * this.estimate_;\n    this.totalWeight_ += weight;\n  }\n\n  getTotalWeight() {\n    return this.totalWeight_;\n  }\n\n  getEstimate() {\n    if (this.alpha_) {\n      var zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);\n      return this.estimate_ / zeroFactor;\n    } else {\n      return this.estimate_;\n    }\n  }\n}\n\nexport default EWMA;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/ewma.js"",""/*\n * EWMA Bandwidth Estimator\n *  - heavily inspired from shaka-player\n * Tracks bandwidth samples and estimates available bandwidth.\n * Based on the minimum of two exponentially-weighted moving averages with\n * different half-lives.\n */\n\nimport EWMA from '../utils/ewma';\n\n\nclass EwmaBandWidthEstimator {\n\n  constructor(hls,slow,fast,defaultEstimate) {\n    this.hls = hls;\n    this.defaultEstimate_ = defaultEstimate;\n    this.minWeight_ = 0.001;\n    this.minDelayMs_ = 50;\n    this.slow_ = new EWMA(slow);\n    this.fast_ = new EWMA(fast);\n  }\n\n  sample(durationMs,numBytes) {\n    durationMs = Math.max(durationMs, this.minDelayMs_);\n    var bandwidth = 8000* numBytes / durationMs,\n    //console.log('instant bw:'+ Math.round(bandwidth));\n    // we weight sample using loading duration....\n        weight = durationMs / 1000;\n    this.fast_.sample(weight,bandwidth);\n    this.slow_.sample(weight,bandwidth);\n  }\n\n  canEstimate() {\n    let fast = this.fast_;\n    return (fast && fast.getTotalWeight() >= this.minWeight_);\n  }\n\n\n  getEstimate() {\n    if (this.canEstimate()) {\n      //console.log('slow estimate:'+ Math.round(this.slow_.getEstimate()));\n      //console.log('fast estimate:'+ Math.round(this.fast_.getEstimate()));\n      // Take the minimum of these two estimates.  This should have the effect of\n      // adapting down quickly, but up more slowly.\n      return Math.min(this.fast_.getEstimate(),this.slow_.getEstimate());\n    } else {\n      return this.defaultEstimate_;\n    }\n  }\n\n  destroy() {\n  }\n}\nexport default EwmaBandWidthEstimator;\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/ewma-bandwidth-estimator.js"",""/*\n * simple ABR Controller\n *  - compute next level based on last fragment bw heuristics\n *  - implement an abandon rules triggered if we have less than 2 frag buffered and if computed bw shows that we risk buffer stalling\n */\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport BufferHelper from '../helper/buffer-helper';\nimport {ErrorDetails} from '../errors';\nimport {logger} from '../utils/logger';\nimport EwmaBandWidthEstimator from '../utils/ewma-bandwidth-estimator';\n\nclass AbrController extends EventHandler {\n\n  constructor(hls) {\n    super(hls, Event.FRAG_LOADING,\n               Event.FRAG_LOADED,\n               Event.FRAG_BUFFERED,\n               Event.ERROR);\n    this.lastLoadedFragLevel = 0;\n    this._nextAutoLevel = -1;\n    this.hls = hls;\n    this.timer = null;\n    this._bwEstimator = null;\n    this.onCheck = this._abandonRulesCheck.bind(this);\n  }\n\n  destroy() {\n    this.clearTimer();\n    EventHandler.prototype.destroy.call(this);\n  }\n\n  onFragLoading(data) {\n    let frag = data.frag;\n    if (frag.type === 'main') {\n      if (!this.timer) {\n        this.timer = setInterval(this.onCheck, 100);\n      }\n      // lazy init of bw Estimator, rationale is that we use different params for Live/VoD\n      // so we need to wait for stream manifest / playlist type to instantiate it.\n      if (!this._bwEstimator) {\n        let hls = this.hls,\n            level = data.frag.level,\n            isLive = hls.levels[level].details.live,\n            config = hls.config,\n            ewmaFast, ewmaSlow;\n\n        if (isLive) {\n          ewmaFast = config.abrEwmaFastLive;\n          ewmaSlow = config.abrEwmaSlowLive;\n        } else {\n          ewmaFast = config.abrEwmaFastVoD;\n          ewmaSlow = config.abrEwmaSlowVoD;\n        }\n        this._bwEstimator = new EwmaBandWidthEstimator(hls,ewmaSlow,ewmaFast,config.abrEwmaDefaultEstimate);\n      }\n      this.fragCurrent = frag;\n    }\n  }\n\n  _abandonRulesCheck() {\n    /*\n      monitor fragment retrieval time...\n      we compute expected time of arrival of the complete fragment.\n      we compare it to expected time of buffer starvation\n    */\n    let hls = this.hls, v = hls.media,frag = this.fragCurrent, loader = frag.loader, minAutoLevel = hls.minAutoLevel;\n\n    // if loader has been destroyed or loading has been aborted, stop timer and return\n    if(!loader || ( loader.stats && loader.stats.aborted)) {\n      logger.warn('frag loader destroy or aborted, disarm abandonRules');\n      this.clearTimer();\n      return;\n    }\n    let stats = loader.stats;\n    /* only monitor frag retrieval time if\n    (video not paused OR first fragment being loaded(ready state === HAVE_NOTHING = 0)) AND autoswitching enabled AND not lowest level (=> means that we have several levels) */\n    if (v && stats && ((!v.paused && (v.playbackRate !== 0)) || !v.readyState) && frag.autoLevel && frag.level) {\n      let requestDelay = performance.now() - stats.trequest,\n          playbackRate = Math.abs(v.playbackRate);\n      // monitor fragment load progress after half of expected fragment duration,to stabilize bitrate\n      if (requestDelay > (500 * frag.duration / playbackRate)) {\n        let levels = hls.levels,\n            loadRate = Math.max(1, stats.bw ? stats.bw / 8 : stats.loaded * 1000 / requestDelay), // byte/s; at least 1 byte/s to avoid division by zero\n            // compute expected fragment length using frag duration and level bitrate. also ensure that expected len is gte than already loaded size\n            level = levels[frag.level],\n            levelBitrate = level.realBitrate ? Math.max(level.realBitrate,level.bitrate) : level.bitrate,\n            expectedLen = stats.total ? stats.total : Math.max(stats.loaded, Math.round(frag.duration * levelBitrate / 8)),\n            pos = v.currentTime,\n            fragLoadedDelay = (expectedLen - stats.loaded) / loadRate,\n            bufferStarvationDelay = (BufferHelper.bufferInfo(v,pos,hls.config.maxBufferHole).end - pos) / playbackRate;\n        // consider emergency switch down only if we have less than 2 frag buffered AND\n        // time to finish loading current fragment is bigger than buffer starvation delay\n        // ie if we risk buffer starvation if bw does not increase quickly\n        if ((bufferStarvationDelay < (2 * frag.duration / playbackRate)) && (fragLoadedDelay > bufferStarvationDelay)) {\n          let fragLevelNextLoadedDelay, nextLoadLevel;\n          // lets iterate through lower level and try to find the biggest one that could avoid rebuffering\n          // we start from current level - 1 and we step down , until we find a matching level\n          for (nextLoadLevel = frag.level - 1 ; nextLoadLevel > minAutoLevel ; nextLoadLevel--) {\n            // compute time to load next fragment at lower level\n            // 0.8 : consider only 80% of current bw to be conservative\n            // 8 = bits per byte (bps/Bps)\n            let levelNextBitrate = levels[nextLoadLevel].realBitrate ? Math.max(levels[nextLoadLevel].realBitrate,levels[nextLoadLevel].bitrate) : levels[nextLoadLevel].bitrate;\n            fragLevelNextLoadedDelay = frag.duration * levelNextBitrate / (8 * 0.8 * loadRate);\n            if (fragLevelNextLoadedDelay < bufferStarvationDelay) {\n              // we found a lower level that be rebuffering free with current estimated bw !\n              break;\n            }\n          }\n          // only emergency switch down if it takes less time to load new fragment at lowest level instead\n          // of finishing loading current one ...\n          if (fragLevelNextLoadedDelay < fragLoadedDelay) {\n            logger.warn(`loading too slow, abort fragment loading and switch to level ${nextLoadLevel}:fragLoadedDelay[${nextLoadLevel}]<fragLoadedDelay[${frag.level-1}];bufferStarvationDelay:${fragLevelNextLoadedDelay.toFixed(1)}<${fragLoadedDelay.toFixed(1)}:${bufferStarvationDelay.toFixed(1)}`);\n            // force next load level in auto mode\n            hls.nextLoadLevel = nextLoadLevel;\n            // update bw estimate for this fragment before cancelling load (this will help reducing the bw)\n            this._bwEstimator.sample(requestDelay,stats.loaded);\n            //abort fragment loading\n            loader.abort();\n            // stop abandon rules timer\n            this.clearTimer();\n            hls.trigger(Event.FRAG_LOAD_EMERGENCY_ABORTED, {frag: frag, stats: stats });\n          }\n        }\n      }\n    }\n  }\n\n  onFragLoaded(data) {\n    let frag = data.frag;\n    if (frag.type === 'main' && !isNaN(frag.sn)) {\n      // stop monitoring bw once frag loaded\n      this.clearTimer();\n      // store level id after successful fragment load\n      this.lastLoadedFragLevel = frag.level;\n      // reset forced auto level value so that next level will be selected\n      this._nextAutoLevel = -1;\n\n      // compute level average bitrate\n      if (this.hls.config.abrMaxWithRealBitrate) {\n        const level = this.hls.levels[frag.level];\n        let loadedBytes = (level.loaded ? level.loaded.bytes : 0) + data.stats.loaded;\n        let loadedDuration = (level.loaded ? level.loaded.duration : 0) + data.frag.duration;\n        level.loaded = { bytes : loadedBytes, duration : loadedDuration };\n        level.realBitrate = Math.round(8*loadedBytes/loadedDuration);\n      }\n      // if fragment has been loaded to perform a bitrate test,\n      if (data.frag.bitrateTest) {\n        let stats = data.stats;\n        stats.tparsed = stats.tbuffered = stats.tload;\n        this.onFragBuffered(data);\n      }\n    }\n  }\n\n  onFragBuffered(data) {\n    var stats = data.stats, frag = data.frag;\n    // only update stats on first frag buffering\n    // if same frag is loaded multiple times, it might be in browser cache, and loaded quickly\n    // and leading to wrong bw estimation\n    // on bitrate test, also only update stats once (if tload = tbuffered == on FRAG_LOADED)\n    if (stats.aborted !== true && frag.loadCounter === 1 && frag.type === 'main' && !isNaN(frag.sn) && ((!frag.bitrateTest || stats.tload === stats.tbuffered))) {\n      // use tparsed-trequest instead of tbuffered-trequest to compute fragLoadingProcessing; rationale is that  buffer appending only happens once media is attached\n      // in case we use config.startFragPrefetch while media is not attached yet, fragment might be parsed while media not attached yet, but it will only be buffered on media attached\n      // as a consequence it could happen really late in the process. meaning that appending duration might appears huge ... leading to underestimated throughput estimation\n      let fragLoadingProcessingMs = stats.tparsed - stats.trequest;\n      logger.log(`latency/loading/parsing/append/kbps:${Math.round(stats.tfirst-stats.trequest)}/${Math.round(stats.tload-stats.tfirst)}/${Math.round(stats.tparsed-stats.tload)}/${Math.round(stats.tbuffered-stats.tparsed)}/${Math.round(8*stats.loaded/(stats.tbuffered-stats.trequest))}`);\n      this._bwEstimator.sample(fragLoadingProcessingMs,stats.loaded);\n      stats.bwEstimate = this._bwEstimator.getEstimate();\n      // if fragment has been loaded to perform a bitrate test, (hls.startLevel = -1), store bitrate test delay duration\n      if (frag.bitrateTest) {\n        this.bitrateTestDelay = fragLoadingProcessingMs/1000;\n      } else {\n        this.bitrateTestDelay = 0;\n      }\n    }\n  }\n\n  onError(data) {\n    // stop timer in case of frag loading error\n    switch(data.details) {\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n        this.clearTimer();\n        break;\n      default:\n        break;\n    }\n  }\n\n clearTimer() {\n    clearInterval(this.timer);\n    this.timer = null;\n }\n\n  // return next auto level\n  get nextAutoLevel() {\n    const forcedAutoLevel = this._nextAutoLevel;\n    const bwEstimator = this._bwEstimator;\n    // in case next auto level has been forced, and bw not available or not reliable, return forced value\n    if (forcedAutoLevel !== -1 && (!bwEstimator || !bwEstimator.canEstimate())) {\n      return forcedAutoLevel;\n    }\n    // compute next level using ABR logic\n    let nextABRAutoLevel = this._nextABRAutoLevel;\n    // if forced auto level has been defined, use it to cap ABR computed quality level\n    if (forcedAutoLevel !== -1) {\n      nextABRAutoLevel = Math.min(forcedAutoLevel,nextABRAutoLevel);\n    }\n    return nextABRAutoLevel;\n  }\n  get _nextABRAutoLevel() {\n    var hls = this.hls, maxAutoLevel = hls.maxAutoLevel, levels = hls.levels, config = hls.config, minAutoLevel = hls.minAutoLevel;\n    const v = hls.media,\n          currentLevel = this.lastLoadedFragLevel,\n          currentFragDuration = this.fragCurrent ? this.fragCurrent.duration : 0,\n          pos = (v ? v.currentTime : 0),\n          // playbackRate is the absolute value of the playback rate; if v.playbackRate is 0, we use 1 to load as\n          // if we're playing back at the normal rate.\n          playbackRate = ((v && (v.playbackRate !== 0)) ? Math.abs(v.playbackRate) : 1.0),\n          avgbw = this._bwEstimator ? this._bwEstimator.getEstimate() : config.abrEwmaDefaultEstimate,\n          // bufferStarvationDelay is the wall-clock time left until the playback buffer is exhausted.\n          bufferStarvationDelay = (BufferHelper.bufferInfo(v, pos, config.maxBufferHole).end - pos) / playbackRate;\n\n    // First, look to see if we can find a level matching with our avg bandwidth AND that could also guarantee no rebuffering at all\n    let bestLevel = this._findBestLevel(currentLevel,currentFragDuration,avgbw,minAutoLevel,maxAutoLevel,bufferStarvationDelay,config.abrBandWidthFactor,config.abrBandWidthUpFactor,levels);\n    if (bestLevel >= 0) {\n      return bestLevel;\n    } else {\n      logger.trace('rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering');\n      // not possible to get rid of rebuffering ... let's try to find level that will guarantee less than maxStarvationDelay of rebuffering\n      // if no matching level found, logic will return 0\n      let maxStarvationDelay = currentFragDuration ? Math.min(currentFragDuration,config.maxStarvationDelay) : config.maxStarvationDelay,\n          bwFactor = config.abrBandWidthFactor,\n          bwUpFactor = config.abrBandWidthUpFactor;\n      if (bufferStarvationDelay === 0) {\n        // in case buffer is empty, let's check if previous fragment was loaded to perform a bitrate test\n        let bitrateTestDelay = this.bitrateTestDelay;\n        if (bitrateTestDelay) {\n          // if it is the case, then we need to adjust our max starvation delay using maxLoadingDelay config value\n          // max video loading delay used in  automatic start level selection :\n          // in that mode ABR controller will ensure that video loading time (ie the time to fetch the first fragment at lowest quality level +\n          // the time to fetch the fragment at the appropriate quality level is less than ```maxLoadingDelay``` )\n          // cap maxLoadingDelay and ensure it is not bigger 'than bitrate test' frag duration\n          const maxLoadingDelay = currentFragDuration ? Math.min(currentFragDuration,config.maxLoadingDelay) : config.maxLoadingDelay;\n          maxStarvationDelay = maxLoadingDelay - bitrateTestDelay;\n          logger.trace(`bitrate test took ${Math.round(1000*bitrateTestDelay)}ms, set first fragment max fetchDuration to ${Math.round(1000*maxStarvationDelay)} ms`);\n          // don't use conservative factor on bitrate test\n          bwFactor = bwUpFactor = 1;\n        }\n      }\n      bestLevel = this._findBestLevel(currentLevel,currentFragDuration,avgbw,minAutoLevel,maxAutoLevel,bufferStarvationDelay+maxStarvationDelay,bwFactor,bwUpFactor,levels);\n      return Math.max(bestLevel,0);\n    }\n  }\n\n  _findBestLevel(currentLevel,currentFragDuration,currentBw,minAutoLevel,maxAutoLevel,maxFetchDuration,bwFactor,bwUpFactor,levels) {\n    for (let i = maxAutoLevel; i >= minAutoLevel; i--) {\n      let levelInfo = levels[i],\n          levelDetails = levelInfo.details,\n          avgDuration = levelDetails ? levelDetails.totalduration/levelDetails.fragments.length : currentFragDuration,\n          live = levelDetails ? levelDetails.live : false,\n          adjustedbw;\n    // follow algorithm captured from stagefright :\n    // https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/httplive/LiveSession.cpp\n    // Pick the highest bandwidth stream below or equal to estimated bandwidth.\n    // consider only 80% of the available bandwidth, but if we are switching up,\n    // be even more conservative (70%) to avoid overestimating and immediately\n    // switching back.\n      if (i <= currentLevel) {\n        adjustedbw = bwFactor * currentBw;\n      } else {\n        adjustedbw = bwUpFactor * currentBw;\n      }\n      const bitrate = levels[i].realBitrate ? Math.max(levels[i].realBitrate,levels[i].bitrate) : levels[i].bitrate,\n            fetchDuration = bitrate * avgDuration / adjustedbw;\n\n    logger.trace(`level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: ${i}/${Math.round(adjustedbw)}/${bitrate}/${avgDuration}/${maxFetchDuration}/${fetchDuration}`);\n      // if adjusted bw is greater than level bitrate AND\n      if (adjustedbw > bitrate &&\n      // fragment fetchDuration unknown OR live stream OR fragment fetchDuration less than max allowed fetch duration, then this level matches\n      // we don't account for max Fetch Duration for live streams, this is to avoid switching down when near the edge of live sliding window ...\n      // special case to support startLevel = -1 (bitrateTest) on live streams : in that case we should not exit loop so that _findBestLevel will return -1\n        (!fetchDuration || (live  && !this.bitrateTestDelay) || fetchDuration < maxFetchDuration) ) {\n        // as we are looping from highest to lowest, this will return the best achievable quality level\n        return i;\n      }\n    }\n    // not enough time budget even with quality level 0 ... rebuffering might happen\n    return -1;\n  }\n\n  set nextAutoLevel(nextLevel) {\n    this._nextAutoLevel = nextLevel;\n  }\n}\n\nexport default AbrController;\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/controller/abr-controller.js"",""/*\n * Buffer Controller\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {logger} from '../utils/logger';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\n\nclass BufferController extends EventHandler {\n\n  constructor(hls) {\n    super(hls,\n      Event.MEDIA_ATTACHING,\n      Event.MEDIA_DETACHING,\n      Event.MANIFEST_PARSED,\n      Event.BUFFER_RESET,\n      Event.BUFFER_APPENDING,\n      Event.BUFFER_CODECS,\n      Event.BUFFER_EOS,\n      Event.BUFFER_FLUSHING,\n      Event.LEVEL_PTS_UPDATED,\n      Event.LEVEL_UPDATED);\n\n    // the value that we have set mediasource.duration to\n    // (the actual duration may be tweaked slighly by the browser)\n    this._msDuration = null;\n    // the value that we want to set mediaSource.duration to\n    this._levelDuration = null;\n\n    // Source Buffer listeners\n    this.onsbue = this.onSBUpdateEnd.bind(this);\n    this.onsbe  = this.onSBUpdateError.bind(this);\n    this.pendingTracks = {};\n    this.tracks = {};\n  }\n\n  destroy() {\n    EventHandler.prototype.destroy.call(this);\n  }\n\n  onLevelPtsUpdated(data) {\n    let type = data.type;\n    let audioTrack = this.tracks.audio;\n\n    // Adjusting `SourceBuffer.timestampOffset` (desired point in the timeline where the next frames should be appended)\n    // in Chrome browser when we detect MPEG audio container and time delta between level PTS and `SourceBuffer.timestampOffset`\n    // is greater than 100ms (this is enough to handle seek for VOD or level change for LIVE videos). At the time of change we issue\n    // `SourceBuffer.abort()` and adjusting `SourceBuffer.timestampOffset` if `SourceBuffer.updating` is false or awaiting `updateend`\n    // event if SB is in updating state.\n    // More info here: https://github.com/video-dev/hls.js/issues/332#issuecomment-257986486\n\n    if (type === 'audio' && audioTrack && audioTrack.container === 'audio/mpeg') { // Chrome audio mp3 track\n      let audioBuffer = this.sourceBuffer.audio;\n      let delta = Math.abs(audioBuffer.timestampOffset - data.start);\n\n      // adjust timestamp offset if time delta is greater than 100ms\n      if (delta > 0.1) {\n        let updating = audioBuffer.updating;\n\n        try {\n          audioBuffer.abort();\n        } catch (err) {\n          updating = true;\n          logger.warn('can not abort audio buffer: ' + err);\n        }\n\n        if (!updating) {\n          logger.warn('change mpeg audio timestamp offset from ' + audioBuffer.timestampOffset + ' to ' + data.start);\n          audioBuffer.timestampOffset = data.start;\n        } else {\n          this.audioTimestampOffset = data.start;\n        }\n      }\n    }\n  }\n\n  onManifestParsed(data) {\n    let audioExpected = data.audio,\n        videoExpected = data.video || (data.levels.length && data.audio),\n        sourceBufferNb = 0;\n    // in case of alt audio 2 BUFFER_CODECS events will be triggered, one per stream controller\n    // sourcebuffers will be created all at once when the expected nb of tracks will be reached\n    // in case alt audio is not used, only one BUFFER_CODEC event will be fired from main stream controller\n    // it will contain the expected nb of source buffers, no need to compute it\n    if (data.altAudio && (audioExpected || videoExpected)) {\n      sourceBufferNb = (audioExpected ? 1 : 0) + (videoExpected ? 1 : 0);\n      logger.log(`${sourceBufferNb} sourceBuffer(s) expected`);\n    }\n    this.sourceBufferNb = sourceBufferNb;\n  }\n\n  onMediaAttaching(data) {\n    let media = this.media = data.media;\n    if (media) {\n      // setup the media source\n      var ms = this.mediaSource = new MediaSource();\n      //Media Source listeners\n      this.onmso = this.onMediaSourceOpen.bind(this);\n      this.onmse = this.onMediaSourceEnded.bind(this);\n      this.onmsc = this.onMediaSourceClose.bind(this);\n      ms.addEventListener('sourceopen', this.onmso);\n      ms.addEventListener('sourceended', this.onmse);\n      ms.addEventListener('sourceclose', this.onmsc);\n      // link video and media Source\n      media.src = URL.createObjectURL(ms);\n    }\n  }\n\n  onMediaDetaching() {\n    logger.log('media source detaching');\n    var ms = this.mediaSource;\n    if (ms) {\n      if (ms.readyState === 'open') {\n        try {\n          // endOfStream could trigger exception if any sourcebuffer is in updating state\n          // we don't really care about checking sourcebuffer state here,\n          // as we are anyway detaching the MediaSource\n          // let's just avoid this exception to propagate\n          ms.endOfStream();\n        } catch(err) {\n          logger.warn(`onMediaDetaching:${err.message} while calling endOfStream`);\n        }\n      }\n      ms.removeEventListener('sourceopen', this.onmso);\n      ms.removeEventListener('sourceended', this.onmse);\n      ms.removeEventListener('sourceclose', this.onmsc);\n\n      // Detach properly the MediaSource from the HTMLMediaElement as\n      // suggested in https://github.com/w3c/media-source/issues/53.\n      if (this.media) {\n        URL.revokeObjectURL(this.media.src);\n        this.media.removeAttribute('src');\n        this.media.load();\n      }\n\n      this.mediaSource = null;\n      this.media = null;\n      this.pendingTracks = {};\n      this.tracks = {};\n      this.sourceBuffer = {};\n      this.flushRange = [];\n      this.segments = [];\n      this.appended = 0;\n    }\n    this.onmso = this.onmse = this.onmsc = null;\n    this.hls.trigger(Event.MEDIA_DETACHED);\n  }\n\n  onMediaSourceOpen() {\n    logger.log('media source opened');\n    this.hls.trigger(Event.MEDIA_ATTACHED, { media : this.media });\n    let mediaSource = this.mediaSource;\n    if (mediaSource) {\n      // once received, don't listen anymore to sourceopen event\n      mediaSource.removeEventListener('sourceopen', this.onmso);\n    }\n    this.checkPendingTracks();\n  }\n\n  checkPendingTracks() {\n    // if any buffer codecs pending, check if we have enough to create sourceBuffers\n    let pendingTracks = this.pendingTracks,\n        pendingTracksNb = Object.keys(pendingTracks).length;\n    // if any pending tracks and (if nb of pending tracks gt or equal than expected nb or if unknown expected nb)\n    if (pendingTracksNb && (\n        this.sourceBufferNb <= pendingTracksNb ||\n        this.sourceBufferNb === 0)) {\n      // ok, let's create them now !\n      this.createSourceBuffers(pendingTracks);\n      this.pendingTracks = {};\n      // append any pending segments now !\n      this.doAppending();\n    }\n  }\n\n  onMediaSourceClose() {\n    logger.log('media source closed');\n  }\n\n  onMediaSourceEnded() {\n    logger.log('media source ended');\n  }\n\n\n  onSBUpdateEnd() {\n    // update timestampOffset\n    if (this.audioTimestampOffset) {\n      let audioBuffer = this.sourceBuffer.audio;\n      logger.warn('change mpeg audio timestamp offset from ' + audioBuffer.timestampOffset + ' to ' + this.audioTimestampOffset);\n      audioBuffer.timestampOffset = this.audioTimestampOffset;\n      delete this.audioTimestampOffset;\n    }\n\n    if (this._needsFlush) {\n      this.doFlush();\n    }\n\n    if (this._needsEos) {\n      this.checkEos();\n    }\n    this.appending = false;\n    let parent = this.parent;\n    // count nb of pending segments waiting for appending on this sourcebuffer\n    let pending = this.segments.reduce( (counter, segment) => (segment.parent === parent) ? counter + 1 : counter , 0);\n    this.hls.trigger(Event.BUFFER_APPENDED, { parent : parent, pending : pending });\n\n    // don't append in flushing mode\n    if (!this._needsFlush) {\n      this.doAppending();\n    }\n\n    this.updateMediaElementDuration();\n  }\n\n  onSBUpdateError(event) {\n    logger.error('sourceBuffer error:', event);\n    // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n    // this error might not always be fatal (it is fatal if decode error is set, in that case\n    // it will be followed by a mediaElement error ...)\n    this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_APPENDING_ERROR, fatal: false});\n    // we don't need to do more than that, as accordin to the spec, updateend will be fired just after\n  }\n\n  onBufferReset() {\n    var sourceBuffer = this.sourceBuffer;\n    for(var type in sourceBuffer) {\n      var sb = sourceBuffer[type];\n      try {\n        this.mediaSource.removeSourceBuffer(sb);\n        sb.removeEventListener('updateend', this.onsbue);\n        sb.removeEventListener('error', this.onsbe);\n      } catch(err) {\n      }\n    }\n    this.sourceBuffer = {};\n    this.flushRange = [];\n    this.segments = [];\n    this.appended = 0;\n  }\n\n  onBufferCodecs(tracks) {\n    // if source buffer(s) not created yet, appended buffer tracks in this.pendingTracks\n    // if sourcebuffers already created, do nothing ...\n    if (Object.keys(this.sourceBuffer).length === 0) {\n      for (var trackName in tracks) { this.pendingTracks[trackName] = tracks[trackName]; }\n      let mediaSource = this.mediaSource;\n      if (mediaSource && mediaSource.readyState === 'open') {\n        // try to create sourcebuffers if mediasource opened\n        this.checkPendingTracks();\n      }\n    }\n  }\n\n\n  createSourceBuffers(tracks) {\n    var sourceBuffer = this.sourceBuffer,mediaSource = this.mediaSource;\n\n    for (let trackName in tracks) {\n      if(!sourceBuffer[trackName]) {\n        let track = tracks[trackName];\n        // use levelCodec as first priority\n        let codec = track.levelCodec || track.codec;\n        let mimeType = `${track.container};codecs=${codec}`;\n        logger.log(`creating sourceBuffer(${mimeType})`);\n        try {\n          let sb = sourceBuffer[trackName] = mediaSource.addSourceBuffer(mimeType);\n          sb.addEventListener('updateend', this.onsbue);\n          sb.addEventListener('error', this.onsbe);\n          this.tracks[trackName] = {codec: codec, container: track.container};\n          track.buffer = sb;\n        } catch(err) {\n          logger.error(`error while trying to add sourceBuffer:${err.message}`);\n          this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_ADD_CODEC_ERROR, fatal: false, err: err, mimeType : mimeType});\n        }\n      }\n    }\n    this.hls.trigger(Event.BUFFER_CREATED, { tracks : tracks } );\n  }\n\n  onBufferAppending(data) {\n    if (!this._needsFlush) {\n      if (!this.segments) {\n        this.segments = [ data ];\n      } else {\n        this.segments.push(data);\n      }\n      this.doAppending();\n    }\n  }\n\n  onBufferAppendFail(data) {\n    logger.error('sourceBuffer error:',data.event);\n    // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n    // this error might not always be fatal (it is fatal if decode error is set, in that case\n    // it will be followed by a mediaElement error ...)\n    this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_APPENDING_ERROR, fatal: false});\n  }\n\n  // on BUFFER_EOS mark matching sourcebuffer(s) as ended and trigger checkEos()\n  onBufferEos(data) {\n    var sb = this.sourceBuffer;\n    let dataType = data.type;\n    for(let type in sb) {\n      if (!dataType || type === dataType) {\n        if (!sb[type].ended) {\n          sb[type].ended = true;\n          logger.log(`${type} sourceBuffer now EOS`);\n        }\n      }\n    }\n    this.checkEos();\n  }\n\n // if all source buffers are marked as ended, signal endOfStream() to MediaSource.\n checkEos() {\n    var sb = this.sourceBuffer, mediaSource = this.mediaSource;\n    if (!mediaSource || mediaSource.readyState !== 'open') {\n      this._needsEos = false;\n      return;\n    }\n    for(let type in sb) {\n      let sbobj = sb[type];\n      if (!sbobj.ended) {\n        return;\n      }\n      if(sbobj.updating) {\n        this._needsEos = true;\n        return;\n      }\n    }\n    logger.log('all media data available, signal endOfStream() to MediaSource and stop loading fragment');\n    //Notify the media element that it now has all of the media data\n    try {\n      mediaSource.endOfStream();\n    } catch(e) {\n      logger.warn('exception while calling mediaSource.endOfStream()');\n    }\n    this._needsEos = false;\n }\n\n\n  onBufferFlushing(data) {\n    this.flushRange.push({start: data.startOffset, end: data.endOffset, type : data.type});\n    // attempt flush immediatly\n    this.flushBufferCounter = 0;\n    this.doFlush();\n  }\n\n  onLevelUpdated(event) {\n    let details = event.details;\n    if (details.fragments.length === 0) {\n      return;\n    }\n    this._levelDuration = details.totalduration + details.fragments[0].start;\n    this.updateMediaElementDuration();\n  }\n\n  // https://github.com/video-dev/hls.js/issues/355\n  updateMediaElementDuration() {\n    let media = this.media,\n        mediaSource = this.mediaSource,\n        sourceBuffer = this.sourceBuffer,\n        levelDuration = this._levelDuration;\n    if (levelDuration === null || !media || !mediaSource || !sourceBuffer || media.readyState === 0 || mediaSource.readyState !== 'open') {\n      return;\n    }\n    for (let type in sourceBuffer) {\n      if (sourceBuffer[type].updating) {\n        // can't set duration whilst a buffer is updating\n        return;\n      }\n    }\n    if (this._msDuration === null) {\n      // initialise to the value that the media source is reporting\n      this._msDuration = mediaSource.duration;\n    }\n    let duration = media.duration;\n    // levelDuration was the last value we set.\n    // not using mediaSource.duration as the browser may tweak this value\n    // only update mediasource duration if its value increase, this is to avoid\n    // flushing already buffered portion when switching between quality level\n    if ((levelDuration > this._msDuration && levelDuration > duration) || (duration === Infinity || isNaN(duration) )) {\n      logger.log(`Updating mediasource duration to ${levelDuration.toFixed(3)}`);\n      this._msDuration = mediaSource.duration = levelDuration;\n    }\n  }\n\n  doFlush() {\n    // loop through all buffer ranges to flush\n    while(this.flushRange.length) {\n      var range = this.flushRange[0];\n      // flushBuffer will abort any buffer append in progress and flush Audio/Video Buffer\n      if (this.flushBuffer(range.start, range.end, range.type)) {\n        // range flushed, remove from flush array\n        this.flushRange.shift();\n        this.flushBufferCounter = 0;\n      } else {\n        this._needsFlush = true;\n        // avoid looping, wait for SB update end to retrigger a flush\n        return;\n      }\n    }\n    if (this.flushRange.length === 0) {\n      // everything flushed\n      this._needsFlush = false;\n\n      // let's recompute this.appended, which is used to avoid flush looping\n      var appended = 0;\n      var sourceBuffer = this.sourceBuffer;\n      try {\n        for (var type in sourceBuffer) {\n          appended += sourceBuffer[type].buffered.length;\n        }\n      } catch(error) {\n        // error could be thrown while accessing buffered, in case sourcebuffer has already been removed from MediaSource\n        // this is harmess at this stage, catch this to avoid reporting an internal exception\n        logger.error('error while accessing sourceBuffer.buffered');\n      }\n      this.appended = appended;\n      this.hls.trigger(Event.BUFFER_FLUSHED);\n    }\n  }\n\n  doAppending() {\n    var hls = this.hls, sourceBuffer = this.sourceBuffer, segments = this.segments;\n    if (Object.keys(sourceBuffer).length) {\n      if (this.media.error) {\n        this.segments = [];\n        logger.error('trying to append although a media error occured, flush segment and abort');\n        return;\n      }\n      if (this.appending) {\n        //logger.log(`sb appending in progress`);\n        return;\n      }\n      if (segments && segments.length) {\n        let segment = segments.shift();\n        try {\n          let type = segment.type, sb = sourceBuffer[type];\n          if(sb) {\n            if(!sb.updating) {\n              // reset sourceBuffer ended flag before appending segment\n              sb.ended = false;\n              //logger.log(`appending ${segment.content} ${type} SB, size:${segment.data.length}, ${segment.parent}`);\n              this.parent = segment.parent;\n              sb.appendBuffer(segment.data);\n              this.appendError = 0;\n              this.appended++;\n              this.appending = true;\n            } else {\n              segments.unshift(segment);\n            }\n          } else {\n            // in case we don't have any source buffer matching with this segment type,\n            // it means that Mediasource fails to create sourcebuffer\n            // discard this segment, and trigger update end\n            this.onSBUpdateEnd();\n          }\n        } catch(err) {\n          // in case any error occured while appending, put back segment in segments table\n          logger.error(`error while trying to append buffer:${err.message}`);\n          segments.unshift(segment);\n          var event = {type: ErrorTypes.MEDIA_ERROR, parent : segment.parent};\n          if(err.code !== 22) {\n            if (this.appendError) {\n              this.appendError++;\n            } else {\n              this.appendError = 1;\n            }\n            event.details = ErrorDetails.BUFFER_APPEND_ERROR;\n            /* with UHD content, we could get loop of quota exceeded error until\n              browser is able to evict some data from sourcebuffer. retrying help recovering this\n            */\n            if (this.appendError > hls.config.appendErrorMaxRetry) {\n              logger.log(`fail ${hls.config.appendErrorMaxRetry} times to append segment in sourceBuffer`);\n              segments = [];\n              event.fatal = true;\n              hls.trigger(Event.ERROR, event);\n              return;\n            } else {\n              event.fatal = false;\n              hls.trigger(Event.ERROR, event);\n            }\n          } else {\n            // QuotaExceededError: http://www.w3.org/TR/html5/infrastructure.html#quotaexceedederror\n            // let's stop appending any segments, and report BUFFER_FULL_ERROR error\n            this.segments = [];\n            event.details = ErrorDetails.BUFFER_FULL_ERROR;\n            event.fatal = false;\n            hls.trigger(Event.ERROR,event);\n            return;\n          }\n        }\n      }\n    }\n  }\n\n  /*\n    flush specified buffered range,\n    return true once range has been flushed.\n    as sourceBuffer.remove() is asynchronous, flushBuffer will be retriggered on sourceBuffer update end\n  */\n  flushBuffer(startOffset, endOffset, typeIn) {\n    var sb, i, bufStart, bufEnd, flushStart, flushEnd, sourceBuffer = this.sourceBuffer;\n    if (Object.keys(sourceBuffer).length) {\n      logger.log(`flushBuffer,pos/start/end: ${this.media.currentTime.toFixed(3)}/${startOffset}/${endOffset}`);\n      // safeguard to avoid infinite looping : don't try to flush more than the nb of appended segments\n      if (this.flushBufferCounter < this.appended) {\n        for (var type in sourceBuffer) {\n          // check if sourcebuffer type is defined (typeIn): if yes, let's only flush this one\n          // if no, let's flush all sourcebuffers\n          if (typeIn && type !== typeIn) {\n            continue;\n          }\n          sb = sourceBuffer[type];\n          // we are going to flush buffer, mark source buffer as 'not ended'\n          sb.ended = false;\n          if (!sb.updating) {\n            try {\n              for (i = 0; i < sb.buffered.length; i++) {\n                bufStart = sb.buffered.start(i);\n                bufEnd = sb.buffered.end(i);\n                // workaround firefox not able to properly flush multiple buffered range.\n                if (navigator.userAgent.toLowerCase().indexOf('firefox') !== -1 && endOffset === Number.POSITIVE_INFINITY) {\n                  flushStart = startOffset;\n                  flushEnd = endOffset;\n                } else {\n                  flushStart = Math.max(bufStart, startOffset);\n                  flushEnd = Math.min(bufEnd, endOffset);\n                }\n                /* sometimes sourcebuffer.remove() does not flush\n                   the exact expected time range.\n                   to avoid rounding issues/infinite loop,\n                   only flush buffer range of length greater than 500ms.\n                */\n                if (Math.min(flushEnd,bufEnd) - flushStart > 0.5 ) {\n                  this.flushBufferCounter++;\n                  logger.log(`flush ${type} [${flushStart},${flushEnd}], of [${bufStart},${bufEnd}], pos:${this.media.currentTime}`);\n                  sb.remove(flushStart, flushEnd);\n                  return false;\n                }\n              }\n            } catch(e) {\n              logger.warn('exception while accessing sourcebuffer, it might have been removed from MediaSource');\n            }\n          } else {\n            //logger.log('abort ' + type + ' append in progress');\n            // this will abort any appending in progress\n            //sb.abort();\n            logger.warn('cannot flush, sb updating in progress');\n            return false;\n          }\n        }\n      } else {\n        logger.warn('abort flushing too many retries');\n      }\n      logger.log('buffer flushed');\n    }\n    // everything flushed !\n    return true;\n  }\n}\n\nexport default BufferController;\n\n\n\n// WEBPACK FOOTER //\n// ./src/controller/buffer-controller.js"",""/*\n * cap stream level to media size dimension controller\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\n\nclass CapLevelController extends EventHandler {\n\tconstructor(hls) {\n    super(hls,\n      Event.FPS_DROP_LEVEL_CAPPING,\n      Event.MEDIA_ATTACHING,\n      Event.MANIFEST_PARSED);\n\t}\n\n\tdestroy() {\n    if (this.hls.config.capLevelToPlayerSize) {\n      this.media = this.restrictedLevels = null;\n      this.autoLevelCapping = Number.POSITIVE_INFINITY;\n      if (this.timer) {\n        this.timer = clearInterval(this.timer);\n      }\n    }\n  }\n\n  onFpsDropLevelCapping(data) {\n\t  // Don't add a restricted level more than once\n    if (CapLevelController.isLevelAllowed(data.droppedLevel, this.restrictedLevels)) {\n      this.restrictedLevels.push(data.droppedLevel);\n    }\n  }\n\n\tonMediaAttaching(data) {\n    this.media = data.media instanceof HTMLVideoElement ? data.media : null;\n  }\n\n  onManifestParsed(data) {\n    const hls = this.hls;\n    this.restrictedLevels = [];\n    if (hls.config.capLevelToPlayerSize) {\n      this.autoLevelCapping = Number.POSITIVE_INFINITY;\n      this.levels = data.levels;\n      hls.firstLevel = this.getMaxLevel(data.firstLevel);\n      clearInterval(this.timer);\n      this.timer = setInterval(this.detectPlayerSize.bind(this), 1000);\n      this.detectPlayerSize();\n    }\n  }\n\n  detectPlayerSize() {\n    if (this.media) {\n      let levelsLength = this.levels ? this.levels.length : 0;\n      if (levelsLength) {\n        const hls = this.hls;\n        hls.autoLevelCapping = this.getMaxLevel(levelsLength - 1);\n        if (hls.autoLevelCapping > this.autoLevelCapping) {\n          // if auto level capping has a higher value for the previous one, flush the buffer using nextLevelSwitch\n          // usually happen when the user go to the fullscreen mode.\n          hls.streamController.nextLevelSwitch();\n        }\n        this.autoLevelCapping = hls.autoLevelCapping;\n      }\n    }\n  }\n\n  /*\n  * returns level should be the one with the dimensions equal or greater than the media (player) dimensions (so the video will be downscaled)\n  */\n  getMaxLevel(capLevelIndex) {\n    if (!this.levels) {\n      return -1;\n    }\n\n    const validLevels = this.levels.filter((level, index) =>\n      CapLevelController.isLevelAllowed(index, this.restrictedLevels) && index <= capLevelIndex\n    );\n\n    return CapLevelController.getMaxLevelByMediaSize(validLevels, this.mediaWidth, this.mediaHeight);\n  }\n\n  get mediaWidth() {\n    let width;\n    const media = this.media;\n    if (media) {\n      width = media.width || media.clientWidth || media.offsetWidth;\n      width *= CapLevelController.contentScaleFactor;\n    }\n    return width;\n  }\n\n  get mediaHeight() {\n    let height;\n    const media = this.media;\n    if (media) {\n      height = media.height || media.clientHeight || media.offsetHeight;\n      height *= CapLevelController.contentScaleFactor;\n    }\n    return height;\n  }\n\n  static get contentScaleFactor() {\n    let pixelRatio = 1;\n    try {\n      pixelRatio =  window.devicePixelRatio;\n    } catch(e) {}\n    return pixelRatio;\n  }\n\n  static isLevelAllowed(level, restrictedLevels = []) {\n    return restrictedLevels.indexOf(level) === -1;\n  }\n\n  static getMaxLevelByMediaSize(levels, width, height) {\n    if (!levels || (levels && !levels.length)) {\n      return -1;\n    }\n\n    // Levels can have the same dimensions but differing bandwidths - since levels are ordered, we can look to the next\n    // to determine whether we've chosen the greatest bandwidth for the media's dimensions\n    const atGreatestBandiwdth = (curLevel, nextLevel) => {\n      if (!nextLevel) {\n        return true;\n      }\n      return curLevel.width !== nextLevel.width || curLevel.height !== nextLevel.height;\n    };\n\n    // If we run through the loop without breaking, the media's dimensions are greater than every level, so default to\n    // the max level\n    let maxLevelIndex = levels.length - 1;\n\n    for (let i = 0; i < levels.length; i+= 1) {\n      const level = levels[i];\n      if ((level.width >= width || level.height >= height) && atGreatestBandiwdth(level, levels[i + 1])) {\n        maxLevelIndex = i;\n        break;\n      }\n    }\n\n    return maxLevelIndex;\n  }\n}\n\nexport default CapLevelController;\n\n\n\n// WEBPACK FOOTER //\n// ./src/controller/cap-level-controller.js"",""/*\n * FPS Controller\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {logger} from '../utils/logger';\n\nclass FPSController extends EventHandler{\n\n  constructor(hls) {\n    super(hls, Event.MEDIA_ATTACHING);\n  }\n\n  destroy() {\n    if (this.timer) {\n      clearInterval(this.timer);\n    }\n    this.isVideoPlaybackQualityAvailable = false;\n  }\n\n  onMediaAttaching(data) {\n    const config = this.hls.config;\n    if (config.capLevelOnFPSDrop) {\n      const video = this.video = data.media instanceof HTMLVideoElement ? data.media : null;\n      if (typeof video.getVideoPlaybackQuality === 'function') {\n        this.isVideoPlaybackQualityAvailable = true;\n      }\n      clearInterval(this.timer);\n      this.timer = setInterval(this.checkFPSInterval.bind(this), config.fpsDroppedMonitoringPeriod);\n    }\n  }\n\n  checkFPS(video, decodedFrames, droppedFrames) {\n    let currentTime = performance.now();\n    if (decodedFrames) {\n      if (this.lastTime) {\n        let currentPeriod = currentTime - this.lastTime,\n            currentDropped = droppedFrames - this.lastDroppedFrames,\n            currentDecoded = decodedFrames - this.lastDecodedFrames,\n            droppedFPS = 1000 * currentDropped / currentPeriod,\n            hls = this.hls;\n        hls.trigger(Event.FPS_DROP, {currentDropped: currentDropped, currentDecoded: currentDecoded, totalDroppedFrames: droppedFrames});\n        if (droppedFPS > 0) {\n          //logger.log('checkFPS : droppedFPS/decodedFPS:' + droppedFPS/(1000 * currentDecoded / currentPeriod));\n          if (currentDropped > hls.config.fpsDroppedMonitoringThreshold * currentDecoded) {\n            let currentLevel = hls.currentLevel;\n            logger.warn('drop FPS ratio greater than max allowed value for currentLevel: ' + currentLevel);\n            if (currentLevel > 0 && (hls.autoLevelCapping === -1 || hls.autoLevelCapping >= currentLevel)) {\n              currentLevel = currentLevel - 1;\n              hls.trigger(Event.FPS_DROP_LEVEL_CAPPING, {level: currentLevel, droppedLevel: hls.currentLevel});\n              hls.autoLevelCapping = currentLevel;\n              hls.streamController.nextLevelSwitch();\n            }\n          }\n        }\n      }\n      this.lastTime = currentTime;\n      this.lastDroppedFrames = droppedFrames;\n      this.lastDecodedFrames = decodedFrames;\n    }\n  }\n\n  checkFPSInterval() {\n    const video = this.video;\n    if (video) {\n      if (this.isVideoPlaybackQualityAvailable) {\n        let videoPlaybackQuality = video.getVideoPlaybackQuality();\n        this.checkFPS(video, videoPlaybackQuality.totalVideoFrames, videoPlaybackQuality.droppedVideoFrames);\n      } else {\n        this.checkFPS(video, video.webkitDecodedFrameCount, video.webkitDroppedFrameCount);\n      }\n    }\n  }\n}\n\nexport default FPSController;\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/controller/fps-controller.js"",""/**\n * XHR based logger\n*/\n\nimport {logger} from '../utils/logger';\n\nclass XhrLoader {\n\n  constructor(config) {\n    if (config && config.xhrSetup) {\n      this.xhrSetup = config.xhrSetup;\n    }\n  }\n\n  destroy() {\n    this.abort();\n    this.loader = null;\n  }\n\n  abort() {\n    var loader = this.loader;\n    if (loader && loader.readyState !== 4) {\n      this.stats.aborted = true;\n      loader.abort();\n    }\n\n    window.clearTimeout(this.requestTimeout);\n    this.requestTimeout = null;\n    window.clearTimeout(this.retryTimeout);\n    this.retryTimeout = null;\n  }\n\n  load(context, config, callbacks) {\n    this.context = context;\n    this.config = config;\n    this.callbacks = callbacks;\n    this.stats = {trequest: performance.now(), retry: 0};\n    this.retryDelay = config.retryDelay;\n    this.loadInternal();\n  }\n\n  loadInternal() {\n    var xhr, context = this.context;\n    xhr = this.loader = new XMLHttpRequest();\n    \n    let stats = this.stats;\n    stats.tfirst = 0;\n    stats.loaded = 0;\n    const xhrSetup = this.xhrSetup;\n\n    try {\n      if (xhrSetup) {\n        try {\n          xhrSetup(xhr, context.url);\n        } catch (e) {\n          // fix xhrSetup: (xhr, url) => {xhr.setRequestHeader(\""Content-Language\"", \""test\"");}\n          // not working, as xhr.setRequestHeader expects xhr.readyState === OPEN\n          xhr.open('GET', context.url, true);\n          xhrSetup(xhr, context.url);\n        }\n      }\n      if (!xhr.readyState) {\n        xhr.open('GET', context.url, true);\n      }\n    } catch (e) {\n      // IE11 throws an exception on xhr.open if attempting to access an HTTP resource over HTTPS\n      this.callbacks.onError({ code : xhr.status, text: e.message }, context, xhr);\n      return;\n    }\n\n    if (context.rangeEnd) {\n      xhr.setRequestHeader('Range','bytes=' + context.rangeStart + '-' + (context.rangeEnd-1));\n    }\n    xhr.onreadystatechange = this.readystatechange.bind(this);\n    xhr.onprogress = this.loadprogress.bind(this);\n    xhr.responseType = context.responseType;\n\n    // setup timeout before we perform request\n    this.requestTimeout = window.setTimeout(this.loadtimeout.bind(this), this.config.timeout);\n    xhr.send();\n  }\n\n  readystatechange(event) {\n    var xhr = event.currentTarget,\n        readyState = xhr.readyState,\n        stats = this.stats,\n        context = this.context,\n        config = this.config;\n\n    // don't proceed if xhr has been aborted\n    if (stats.aborted) {\n      return;\n    }\n\n    // >= HEADERS_RECEIVED\n    if (readyState >=2) {\n      // clear xhr timeout and rearm it if readyState less than 4\n      window.clearTimeout(this.requestTimeout);\n      if (stats.tfirst === 0) {\n        stats.tfirst = Math.max(performance.now(), stats.trequest);\n      }\n      if (readyState === 4) {\n        let status = xhr.status;\n        // http status between 200 to 299 are all successful\n        if (status >= 200 && status < 300)  {\n          stats.tload = Math.max(stats.tfirst,performance.now());\n          let data,len;\n          if (context.responseType === 'arraybuffer') {\n            data = xhr.response;\n            len = data.byteLength;\n          } else {\n            data = xhr.responseText;\n            len = data.length;\n          }\n          stats.loaded = stats.total = len;\n          let response = { url : xhr.responseURL, data : data };\n          this.callbacks.onSuccess(response, stats, context, xhr);\n        } else {\n            // if max nb of retries reached or if http status between 400 and 499 (such error cannot be recovered, retrying is useless), return error\n          if (stats.retry >= config.maxRetry || (status >= 400 && status < 499)) {\n            logger.error(`${status} while loading ${context.url}` );\n            this.callbacks.onError({ code : status, text : xhr.statusText}, context, xhr);\n          } else {\n            // retry\n            logger.warn(`${status} while loading ${context.url}, retrying in ${this.retryDelay}...`);\n            // aborts and resets internal state\n            this.destroy();\n            // schedule retry\n            this.retryTimeout = window.setTimeout(this.loadInternal.bind(this), this.retryDelay);\n            // set exponential backoff\n            this.retryDelay = Math.min(2 * this.retryDelay, config.maxRetryDelay);\n            stats.retry++;\n          }\n        }\n      } else {\n        // readyState >= 2 AND readyState !==4 (readyState = HEADERS_RECEIVED || LOADING) rearm timeout as xhr not finished yet\n        this.requestTimeout = window.setTimeout(this.loadtimeout.bind(this), config.timeout);\n      }\n    }\n  }\n\n  loadtimeout() {\n    logger.warn(`timeout while loading ${this.context.url}` );\n    this.callbacks.onTimeout(this.stats, this.context, null);\n  }\n\n  loadprogress(event) {\n    var xhr = event.currentTarget,\n        stats = this.stats;\n\n    stats.loaded = event.loaded;\n    if (event.lengthComputable) {\n      stats.total = event.total;\n    }\n    let onProgress = this.callbacks.onProgress;\n    if (onProgress) {\n      // third arg is to provide on progress data\n      onProgress(stats, this.context, null, xhr);\n    }\n  }\n}\n\nexport default XhrLoader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/xhr-loader.js"",""/**\n * HLS config\n */\n\nimport AbrController from    './controller/abr-controller';\nimport BufferController from  './controller/buffer-controller';\nimport CapLevelController from  './controller/cap-level-controller';\nimport FPSController from './controller/fps-controller';\nimport XhrLoader from './utils/xhr-loader';\n//import FetchLoader from './utils/fetch-loader';\n\nimport AudioTrackController from './controller/audio-track-controller';\nimport AudioStreamController from  './controller/audio-stream-controller';\n\nimport * as Cues from './utils/cues';\nimport TimelineController from './controller/timeline-controller';\nimport SubtitleTrackController from './controller/subtitle-track-controller';\nimport SubtitleStreamController from  './controller/subtitle-stream-controller';\n\nexport var hlsDefaultConfig = {\n  autoStartLoad: true,                    // used by stream-controller\n  startPosition: -1,                      // used by stream-controller\n  defaultAudioCodec: undefined,           // used by stream-controller\n  debug: false,                           // used by logger\n  capLevelOnFPSDrop: false,               // used by fps-controller\n  capLevelToPlayerSize: false,            // used by cap-level-controller\n  initialLiveManifestSize: 1,             // used by stream-controller\n  maxBufferLength: 30,                    // used by stream-controller\n  maxBufferSize: 60 * 1000 * 1000,        // used by stream-controller\n  maxBufferHole: 0.5,                     // used by stream-controller\n  maxSeekHole: 2,                         // used by stream-controller\n  lowBufferWatchdogPeriod: 0.5,           // used by stream-controller\n  highBufferWatchdogPeriod: 3,            // used by stream-controller\n  nudgeOffset: 0.1,                       // used by stream-controller\n  nudgeMaxRetry : 3,                      // used by stream-controller\n  maxFragLookUpTolerance: 0.2,            // used by stream-controller\n  liveSyncDurationCount:3,                // used by stream-controller\n  liveMaxLatencyDurationCount: Infinity,  // used by stream-controller\n  liveSyncDuration: undefined,            // used by stream-controller\n  liveMaxLatencyDuration: undefined,      // used by stream-controller\n  maxMaxBufferLength: 600,                // used by stream-controller\n  enableWorker: true,                     // used by demuxer\n  enableSoftwareAES: true,                // used by decrypter\n  manifestLoadingTimeOut: 10000,          // used by playlist-loader\n  manifestLoadingMaxRetry: 1,             // used by playlist-loader\n  manifestLoadingRetryDelay: 1000,        // used by playlist-loader\n  manifestLoadingMaxRetryTimeout: 64000,  // used by playlist-loader\n  startLevel: undefined,                  // used by level-controller\n  levelLoadingTimeOut: 10000,             // used by playlist-loader\n  levelLoadingMaxRetry: 4,                // used by playlist-loader\n  levelLoadingRetryDelay: 1000,           // used by playlist-loader\n  levelLoadingMaxRetryTimeout: 64000,     // used by playlist-loader\n  fragLoadingTimeOut: 20000,              // used by fragment-loader\n  fragLoadingMaxRetry: 6,                 // used by fragment-loader\n  fragLoadingRetryDelay: 1000,            // used by fragment-loader\n  fragLoadingMaxRetryTimeout: 64000,      // used by fragment-loader\n  fragLoadingLoopThreshold: 3,            // used by stream-controller\n  startFragPrefetch: false,               // used by stream-controller\n  fpsDroppedMonitoringPeriod: 5000,       // used by fps-controller\n  fpsDroppedMonitoringThreshold: 0.2,     // used by fps-controller\n  appendErrorMaxRetry: 3,                 // used by buffer-controller\n  loader: XhrLoader,\n  //loader: FetchLoader,\n  fLoader: undefined,\n  pLoader: undefined,\n  xhrSetup: undefined,\n  fetchSetup: undefined,\n  abrController: AbrController,\n  bufferController: BufferController,\n  capLevelController: CapLevelController,\n  fpsController: FPSController,\n  stretchShortVideoTrack: false,            // used by mp4-remuxer\n  maxAudioFramesDrift :1,                   // used by mp4-remuxer\n  forceKeyFrameOnDiscontinuity: true,       // used by ts-demuxer\n  abrEwmaFastLive: 3,                       // used by abr-controller\n  abrEwmaSlowLive: 9,                       // used by abr-controller\n  abrEwmaFastVoD: 3,                        // used by abr-controller\n  abrEwmaSlowVoD: 9,                        // used by abr-controller\n  abrEwmaDefaultEstimate: 5e5, // 500 kbps  // used by abr-controller\n  abrBandWidthFactor : 0.95,                // used by abr-controller\n  abrBandWidthUpFactor : 0.7,               // used by abr-controller\n  abrMaxWithRealBitrate : false,            // used by abr-controller\n  maxStarvationDelay : 4,                   // used by abr-controller\n  maxLoadingDelay : 4,                      // used by abr-controller\n  minAutoBitrate: 0                         // used by hls\n};\n\nif (typeof __SUBTITLE__ !== 'undefined' && __SUBTITLE__) {\n  hlsDefaultConfig.subtitleStreamController = SubtitleStreamController;\n  hlsDefaultConfig.subtitleTrackController = SubtitleTrackController;\n  hlsDefaultConfig.timelineController = TimelineController;\n  hlsDefaultConfig.cueHandler = Cues;\n  hlsDefaultConfig.enableCEA708Captions = true;           // used by timeline-controller\n  hlsDefaultConfig.enableWebVTT = true;                   // used by timeline-controller\n  hlsDefaultConfig.captionsTextTrack1Label = 'English';   // used by timeline-controller\n  hlsDefaultConfig.captionsTextTrack1LanguageCode = 'en'; // used by timeline-controller\n  hlsDefaultConfig.captionsTextTrack2Label = 'Spanish';   // used by timeline-controller\n  hlsDefaultConfig.captionsTextTrack2LanguageCode = 'es'; // used by timeline-controller\n}\n\nif (typeof __ALT_AUDIO__ !== 'undefined' && __ALT_AUDIO__) {\n  hlsDefaultConfig.audioStreamController = AudioStreamController;\n  hlsDefaultConfig.audioTrackController = AudioTrackController;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/config.js"",""/**\n * HLS interface\n */\nimport URLToolkit from 'url-toolkit';\nimport Event from './events';\nimport {ErrorTypes, ErrorDetails} from './errors';\nimport PlaylistLoader from './loader/playlist-loader';\nimport FragmentLoader from './loader/fragment-loader';\nimport KeyLoader from './loader/key-loader';\n\nimport StreamController from  './controller/stream-controller';\nimport LevelController from  './controller/level-controller';\nimport ID3TrackController from './controller/id3-track-controller';\n\nimport {logger, enableLogs} from './utils/logger';\nimport EventEmitter from 'events';\nimport {hlsDefaultConfig} from './config';\n\nexport default class Hls {\n  static get version() {\n    return __VERSION__;\n  }\n  static isSupported() {\n    const mediaSource = window.MediaSource = window.MediaSource || window.WebKitMediaSource;\n    const sourceBuffer = window.SourceBuffer = window.SourceBuffer || window.WebKitSourceBuffer;\n    const isTypeSupported = mediaSource &&\n                            typeof mediaSource.isTypeSupported === 'function' &&\n                            mediaSource.isTypeSupported('video/mp4; codecs=\""avc1.42E01E,mp4a.40.2\""');\n\n    // if SourceBuffer is exposed ensure its API is valid\n    // safari and old version of Chrome doe not expose SourceBuffer globally so checking SourceBuffer.prototype is impossible\n    const sourceBufferValidAPI = !sourceBuffer ||\n                                 (sourceBuffer.prototype &&\n                                 typeof sourceBuffer.prototype.appendBuffer === 'function' &&\n                                 typeof sourceBuffer.prototype.remove === 'function');\n    return isTypeSupported && sourceBufferValidAPI;\n  }\n\n  static get Events() {\n    return Event;\n  }\n\n  static get ErrorTypes() {\n    return ErrorTypes;\n  }\n\n  static get ErrorDetails() {\n    return ErrorDetails;\n  }\n\n  static get DefaultConfig() {\n    if(!Hls.defaultConfig) {\n      return hlsDefaultConfig;\n    }\n    return Hls.defaultConfig;\n  }\n\n  static set DefaultConfig(defaultConfig) {\n    Hls.defaultConfig = defaultConfig;\n  }\n\n  constructor(config = {}) {\n    var defaultConfig = Hls.DefaultConfig;\n\n    if ((config.liveSyncDurationCount || config.liveMaxLatencyDurationCount) && (config.liveSyncDuration || config.liveMaxLatencyDuration)) {\n      throw new Error('Illegal hls.js config: don\\'t mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration');\n    }\n\n    for (var prop in defaultConfig) {\n        if (prop in config) { continue; }\n        config[prop] = defaultConfig[prop];\n    }\n\n    if (config.liveMaxLatencyDurationCount !== undefined && config.liveMaxLatencyDurationCount <= config.liveSyncDurationCount) {\n      throw new Error('Illegal hls.js config: \""liveMaxLatencyDurationCount\"" must be gt \""liveSyncDurationCount\""');\n    }\n\n    if (config.liveMaxLatencyDuration !== undefined && (config.liveMaxLatencyDuration <= config.liveSyncDuration || config.liveSyncDuration === undefined)) {\n      throw new Error('Illegal hls.js config: \""liveMaxLatencyDuration\"" must be gt \""liveSyncDuration\""');\n    }\n\n    enableLogs(config.debug);\n    this.config = config;\n    this._autoLevelCapping = -1;\n    // observer setup\n    var observer = this.observer = new EventEmitter();\n    observer.trigger = function trigger (event, ...data) {\n      observer.emit(event, event, ...data);\n    };\n\n    observer.off = function off (event, ...data) {\n      observer.removeListener(event, ...data);\n    };\n    this.on = observer.on.bind(observer);\n    this.off = observer.off.bind(observer);\n    this.trigger = observer.trigger.bind(observer);\n\n    // core controllers and network loaders\n    const abrController = this.abrController = new config.abrController(this);\n    const bufferController  = new config.bufferController(this);\n    const capLevelController = new config.capLevelController(this);\n    const fpsController = new config.fpsController(this);\n    const playListLoader = new PlaylistLoader(this);\n    const fragmentLoader = new FragmentLoader(this);\n    const keyLoader = new KeyLoader(this);\n    const id3TrackController = new ID3TrackController(this);\n\n    // network controllers\n    const levelController = this.levelController = new LevelController(this);\n    const streamController = this.streamController = new StreamController(this);\n    let networkControllers = [levelController, streamController];\n\n    // optional audio stream controller\n    let Controller = config.audioStreamController;\n    if (Controller) {\n      networkControllers.push(new Controller(this));\n    }\n    this.networkControllers = networkControllers;\n\n    let coreComponents = [ playListLoader, fragmentLoader, keyLoader, abrController, bufferController, capLevelController, fpsController, id3TrackController ];\n\n    // optional audio track and subtitle controller\n    Controller = config.audioTrackController;\n    if (Controller) {\n      let audioTrackController = new Controller(this);\n      this.audioTrackController = audioTrackController;\n      coreComponents.push(audioTrackController);\n    }\n\n    Controller = config.subtitleTrackController;\n    if (Controller) {\n      let subtitleTrackController = new Controller(this);\n      this.subtitleTrackController = subtitleTrackController;\n      coreComponents.push(subtitleTrackController);\n    }\n\n    // optional subtitle controller\n    [config.subtitleStreamController, config.timelineController].forEach(Controller => {\n      if (Controller) {\n        coreComponents.push(new Controller(this));\n      }\n    });\n    this.coreComponents = coreComponents;\n  }\n\n  destroy() {\n    logger.log('destroy');\n    this.trigger(Event.DESTROYING);\n    this.detachMedia();\n    this.coreComponents.concat(this.networkControllers).forEach(component => {component.destroy();});\n    this.url = null;\n    this.observer.removeAllListeners();\n    this._autoLevelCapping = -1;\n  }\n\n  attachMedia(media) {\n    logger.log('attachMedia');\n    this.media = media;\n    this.trigger(Event.MEDIA_ATTACHING, {media: media});\n  }\n\n  detachMedia() {\n    logger.log('detachMedia');\n    this.trigger(Event.MEDIA_DETACHING);\n    this.media = null;\n  }\n\n  loadSource(url) {\n    url = URLToolkit.buildAbsoluteURL(window.location.href, url, { alwaysNormalize: true });\n    logger.log(`loadSource:${url}`);\n    this.url = url;\n    // when attaching to a source URL, trigger a playlist load\n    this.trigger(Event.MANIFEST_LOADING, {url: url});\n  }\n\n  startLoad(startPosition=-1) {\n    logger.log(`startLoad(${startPosition})`);\n    this.networkControllers.forEach(controller => {controller.startLoad(startPosition);});\n  }\n\n  stopLoad() {\n    logger.log('stopLoad');\n    this.networkControllers.forEach(controller => {controller.stopLoad();});\n  }\n\n  swapAudioCodec() {\n    logger.log('swapAudioCodec');\n    this.streamController.swapAudioCodec();\n  }\n\n  recoverMediaError() {\n    logger.log('recoverMediaError');\n    var media = this.media;\n    this.detachMedia();\n    this.attachMedia(media);\n  }\n\n  /** Return all quality levels **/\n  get levels() {\n    return this.levelController.levels;\n  }\n\n  /** Return current playback quality level **/\n  get currentLevel() {\n    return this.streamController.currentLevel;\n  }\n\n  /* set quality level immediately (-1 for automatic level selection) */\n  set currentLevel(newLevel) {\n    logger.log(`set currentLevel:${newLevel}`);\n    this.loadLevel = newLevel;\n    this.streamController.immediateLevelSwitch();\n  }\n\n  /** Return next playback quality level (quality level of next fragment) **/\n  get nextLevel() {\n    return this.streamController.nextLevel;\n  }\n\n  /* set quality level for next fragment (-1 for automatic level selection) */\n  set nextLevel(newLevel) {\n    logger.log(`set nextLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n    this.streamController.nextLevelSwitch();\n  }\n\n  /** Return the quality level of current/last loaded fragment **/\n  get loadLevel() {\n    return this.levelController.level;\n  }\n\n  /* set quality level for current/next loaded fragment (-1 for automatic level selection) */\n  set loadLevel(newLevel) {\n    logger.log(`set loadLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n  }\n\n  /** Return the quality level of next loaded fragment **/\n  get nextLoadLevel() {\n    return this.levelController.nextLoadLevel;\n  }\n\n  /** set quality level of next loaded fragment **/\n  set nextLoadLevel(level) {\n    this.levelController.nextLoadLevel = level;\n  }\n\n  /** Return first level (index of first level referenced in manifest)\n  **/\n  get firstLevel() {\n    return Math.max(this.levelController.firstLevel, this.minAutoLevel);\n  }\n\n  /** set first level (index of first level referenced in manifest)\n  **/\n  set firstLevel(newLevel) {\n    logger.log(`set firstLevel:${newLevel}`);\n    this.levelController.firstLevel = newLevel;\n  }\n\n  /** Return start level (level of first fragment that will be played back)\n      if not overrided by user, first level appearing in manifest will be used as start level\n      if -1 : automatic start level selection, playback will start from level matching download bandwidth (determined from download of first segment)\n  **/\n  get startLevel() {\n    return this.levelController.startLevel;\n  }\n\n  /** set  start level (level of first fragment that will be played back)\n      if not overrided by user, first level appearing in manifest will be used as start level\n      if -1 : automatic start level selection, playback will start from level matching download bandwidth (determined from download of first segment)\n  **/\n  set startLevel(newLevel) {\n    logger.log(`set startLevel:${newLevel}`);\n    const hls = this;\n    // if not in automatic start level detection, ensure startLevel is greater than minAutoLevel\n    if (newLevel !== -1) {\n      newLevel = Math.max(newLevel,hls.minAutoLevel);\n    }\n    hls.levelController.startLevel = newLevel;\n  }\n\n  /** Return the capping/max level value that could be used by automatic level selection algorithm **/\n  get autoLevelCapping() {\n    return this._autoLevelCapping;\n  }\n\n  /** set the capping/max level value that could be used by automatic level selection algorithm **/\n  set autoLevelCapping(newLevel) {\n    logger.log(`set autoLevelCapping:${newLevel}`);\n    this._autoLevelCapping = newLevel;\n  }\n\n  /* check if we are in automatic level selection mode */\n  get autoLevelEnabled() {\n    return (this.levelController.manualLevel === -1);\n  }\n\n  /* return manual level */\n  get manualLevel() {\n    return this.levelController.manualLevel;\n  }\n\n  /* return min level selectable in auto mode according to config.minAutoBitrate */\n  get minAutoLevel() {\n    let hls = this, levels = hls.levels, minAutoBitrate = hls.config.minAutoBitrate, len = levels ? levels.length : 0;\n    for (let i = 0; i < len; i++) {\n      const levelNextBitrate = levels[i].realBitrate ? Math.max(levels[i].realBitrate,levels[i].bitrate) : levels[i].bitrate;\n      if (levelNextBitrate > minAutoBitrate) {\n        return i;\n      }\n    }\n    return 0;\n  }\n\n  /* return max level selectable in auto mode according to autoLevelCapping */\n  get maxAutoLevel() {\n    const hls = this;\n    const levels = hls.levels;\n    const autoLevelCapping = hls.autoLevelCapping;\n    let maxAutoLevel;\n    if (autoLevelCapping=== -1 && levels && levels.length) {\n      maxAutoLevel = levels.length - 1;\n    } else {\n      maxAutoLevel = autoLevelCapping;\n    }\n    return maxAutoLevel;\n  }\n\n  // return next auto level\n  get nextAutoLevel() {\n    const hls = this;\n    // ensure next auto level is between  min and max auto level\n    return Math.min(Math.max(hls.abrController.nextAutoLevel,hls.minAutoLevel),hls.maxAutoLevel);\n  }\n\n  // this setter is used to force next auto level\n  // this is useful to force a switch down in auto mode : in case of load error on level N, hls.js can set nextAutoLevel to N-1 for example)\n  // forced value is valid for one fragment. upon succesful frag loading at forced level, this value will be resetted to -1 by ABR controller\n  set nextAutoLevel(nextLevel) {\n    const hls = this;\n    hls.abrController.nextAutoLevel = Math.max(hls.minAutoLevel,nextLevel);\n  }\n\n  /** get alternate audio tracks list from playlist **/\n  get audioTracks() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.audioTracks : [];\n  }\n\n  /** get index of the selected audio track (index in audio track lists) **/\n  get audioTrack() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.audioTrack : -1;\n  }\n\n  /** select an audio track, based on its index in audio track lists**/\n  set audioTrack(audioTrackId) {\n    const audioTrackController = this.audioTrackController;\n    if (audioTrackController) {\n      audioTrackController.audioTrack = audioTrackId;\n    }\n  }\n\n  get liveSyncPosition() {\n    return this.streamController.liveSyncPosition;\n  }\n\n  /** get alternate subtitle tracks list from playlist **/\n  get subtitleTracks() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleTracks : [];\n  }\n\n  /** get index of the selected subtitle track (index in subtitle track lists) **/\n  get subtitleTrack() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleTrack : -1;\n  }\n\n  /** select an subtitle track, based on its index in subtitle track lists**/\n  set subtitleTrack(subtitleTrackId) {\n    const subtitleTrackController = this.subtitleTrackController;\n    if (subtitleTrackController) {\n      subtitleTrackController.subtitleTrack = subtitleTrackId;\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/hls.js"",""function webpackBootstrapFunc (modules) {\n/******/  // The module cache\n/******/  var installedModules = {};\n\n/******/  // The require function\n/******/  function __webpack_require__(moduleId) {\n\n/******/    // Check if module is in cache\n/******/    if(installedModules[moduleId])\n/******/      return installedModules[moduleId].exports;\n\n/******/    // Create a new module (and put it into the cache)\n/******/    var module = installedModules[moduleId] = {\n/******/      i: moduleId,\n/******/      l: false,\n/******/      exports: {}\n/******/    };\n\n/******/    // Execute the module function\n/******/    modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/    // Flag the module as loaded\n/******/    module.l = true;\n\n/******/    // Return the exports of the module\n/******/    return module.exports;\n/******/  }\n\n/******/  // expose the modules object (__webpack_modules__)\n/******/  __webpack_require__.m = modules;\n\n/******/  // expose the module cache\n/******/  __webpack_require__.c = installedModules;\n\n/******/  // identity function for calling harmony imports with the correct context\n/******/  __webpack_require__.i = function(value) { return value; };\n\n/******/  // define getter function for harmony exports\n/******/  __webpack_require__.d = function(exports, name, getter) {\n/******/    if(!__webpack_require__.o(exports, name)) {\n/******/      Object.defineProperty(exports, name, {\n/******/        configurable: false,\n/******/        enumerable: true,\n/******/        get: getter\n/******/      });\n/******/    }\n/******/  };\n\n/******/  // getDefaultExport function for compatibility with non-harmony modules\n/******/  __webpack_require__.n = function(module) {\n/******/    var getter = module && module.__esModule ?\n/******/      function getDefault() { return module['default']; } :\n/******/      function getModuleExports() { return module; };\n/******/    __webpack_require__.d(getter, 'a', getter);\n/******/    return getter;\n/******/  };\n\n/******/  // Object.prototype.hasOwnProperty.call\n/******/  __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n/******/  // __webpack_public_path__\n/******/  __webpack_require__.p = \""/\"";\n\n/******/  // on error function for async loading\n/******/  __webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n  var f = __webpack_require__(__webpack_require__.s = ENTRY_MODULE)\n  return f.default || f // try to call default if defined to also support babel esmodule exports\n}\n\n// http://stackoverflow.com/a/2593661/130442\nfunction quoteRegExp (str) {\n  return (str + '').replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&')\n}\n\nfunction getModuleDependencies (module) {\n  var retval = []\n  var fnString = module.toString()\n  var wrapperSignature = fnString.match(/^function\\s?\\(\\w+,\\s*\\w+,\\s*(\\w+)\\)/)\n  if (!wrapperSignature) return retval\n\n  var webpackRequireName = wrapperSignature[1]\n  var re = new RegExp('(\\\\\\\\n|\\\\W)' + quoteRegExp(webpackRequireName) + '\\\\((\\/\\\\*.*?\\\\*\\/)?\\s?.*?([\\\\.|\\\\-|\\\\w|\\/|@]+).*?\\\\)', 'g') // additional chars when output.pathinfo is true\n  var match\n  while ((match = re.exec(fnString))) {\n    retval.push(match[3])\n  }\n  return retval\n}\n\nfunction getRequiredModules (sources, moduleId) {\n  var modulesQueue = [moduleId]\n  var requiredModules = []\n  var seenModules = {}\n\n  while (modulesQueue.length) {\n    var moduleToCheck = modulesQueue.pop()\n    if (seenModules[moduleToCheck] || !sources[moduleToCheck]) continue\n    seenModules[moduleToCheck] = true\n    requiredModules.push(moduleToCheck)\n    var newModules = getModuleDependencies(sources[moduleToCheck])\n    modulesQueue = modulesQueue.concat(newModules)\n  }\n\n  return requiredModules\n}\n\nmodule.exports = function (moduleId, options) {\n  options = options || {}\n  var sources = __webpack_modules__\n\n  var requiredModules = options.all ? Object.keys(sources) : getRequiredModules(sources, moduleId)\n  var src = '(' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(moduleId)) + ')({' + requiredModules.map(function (id) { return '' + JSON.stringify(id) + ': ' + sources[id].toString() }).join(',') + '})(self);'\n\n  var blob = new window.Blob([src], { type: 'text/javascript' })\n  if (options.bare) { return blob }\n\n  var URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n\n  var workerUrl = URL.createObjectURL(blob)\n  var worker = new window.Worker(workerUrl)\n  worker.objectURL = workerUrl\n\n  return worker\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/webworkify-webpack/index.js\n// module id = 9\n// module chunks = 0"",""/* demuxer web worker.\n *  - listen to worker message, and trigger DemuxerInline upon reception of Fragments.\n *  - provides MP4 Boxes back to main thread using [transferable objects](https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast) in order to minimize message passing overhead.\n */\n\n import DemuxerInline from '../demux/demuxer-inline';\n import Event from '../events';\n import {enableLogs} from '../utils/logger';\n import EventEmitter from 'events';\n\nvar DemuxerWorker = function (self) {\n  // observer setup\n  var observer = new EventEmitter();\n  observer.trigger = function trigger (event, ...data) {\n    observer.emit(event, event, ...data);\n  };\n\n  observer.off = function off (event, ...data) {\n    observer.removeListener(event, ...data);\n  };\n\n  var forwardMessage = function(ev,data) {\n    self.postMessage({event: ev, data:data });\n  };\n\n  self.addEventListener('message', function (ev) {\n    var data = ev.data;\n    //console.log('demuxer cmd:' + data.cmd);\n    switch (data.cmd) {\n      case 'init':\n        let config = JSON.parse(data.config);\n        self.demuxer = new DemuxerInline(observer, data.typeSupported, config, data.vendor);\n        try {\n          enableLogs(config.debug === true);\n        } catch(err) {\n          console.warn('demuxerWorker: unable to enable logs');\n        }\n        // signal end of worker init\n        forwardMessage('init',null);\n        break;\n      case 'demux':\n        self.demuxer.push(data.data, data.decryptdata, data.initSegment, data.audioCodec, data.videoCodec, data.timeOffset,data.discontinuity, data.trackSwitch,data.contiguous,data.duration,data.accurateTimeOffset,data.defaultInitPTS);\n        break;\n      default:\n        break;\n    }\n  });\n\n  // forward events to main thread\n  observer.on(Event.FRAG_DECRYPTED, forwardMessage);\n  observer.on(Event.FRAG_PARSING_INIT_SEGMENT, forwardMessage);\n  observer.on(Event.FRAG_PARSED, forwardMessage);\n  observer.on(Event.ERROR, forwardMessage);\n  observer.on(Event.FRAG_PARSING_METADATA, forwardMessage);\n  observer.on(Event.FRAG_PARSING_USERDATA, forwardMessage);\n  observer.on(Event.INIT_PTS_FOUND, forwardMessage);\n\n  // special case for FRAG_PARSING_DATA: pass data1/data2 as transferable object (no copy)\n  observer.on(Event.FRAG_PARSING_DATA, function(ev, data) {\n    let transferable = [];\n    let message = {event: ev, data:data};\n    if (data.data1) {\n      message.data1 = data.data1.buffer;\n      transferable.push(data.data1.buffer);\n      delete data.data1;\n    }\n    if (data.data2) {\n      message.data2 = data.data2.buffer;\n      transferable.push(data.data2.buffer);\n      delete data.data2;\n    }\n    self.postMessage(message,transferable);\n  });\n};\n\nexport default DemuxerWorker;\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/demux/demuxer-worker.js""],""sourceRoot"":""""}"
2b58065941b7a9e9fe758b7e85a61d6fa5f2bf1e,26077852,http://stackoverflow.com/a/26077852/3392276
2630854d93a1a4009f6e2304f62d7b16299ef201,15867542,        // http://stackoverflow.com/questions/15867542/range-object-get-selection-parent-node-chrome-vs-firefox
9767db1de9afaf161d90963fbc3b2535214c0f6a,15026302,    <!-- http://stackoverflow.com/questions/15026302/multiple-jars-single-persistence-unit-solution -->
b32a5e1e73d976a34faed34bec9a0e4474a6fc66,16459606,	  // is webkit? http://stackoverflow.com/a/16459606/376773
cb6783190071f7a7472141ec9ff822596d82567d,16277865, * @see http://stackoverflow.com/a/16277865/763010
004e12c7c3551aac5645778cf7d1bb660f11391e,5919996,/* http://stackoverflow.com/questions/5919996/how-to-detect-reliably-mac-os-x-ios-linux-windows-in-c-preprocessor */
df44e43ae9bd42eaaecb80879c2c0b280dbe28a4,2200494,    * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom
b691bbd687a0f4965a000a96d56498326b5a6ba6,15867542,        // http://stackoverflow.com/questions/15867542/range-object-get-selection-parent-node-chrome-vs-firefox
9f86f047da918004daf20e1da2615f07aa38bf6e,10727155,	 * This was originally inspired by <http://stackoverflow.com/a/10727155/1267639>
4ff2bc238bec4935cca069c766abb0a78e704007,106179,    /** http://stackoverflow.com/questions/106179/regular-expression-to-match-hostname-or-ip-address */
8380ce9de5a6d1ae7e422fe1343b52b851bdc669,1395509, *    See http://stackoverflow.com/a/1395509/992834 for a good explanation
4abd344bcdd9d3b71b27cd5f4ac4338d00845458,11328085,http://stackoverflow.com/questions/11328085/pseudo-after-align-right
d808d1b0f38cdf19cfad37f9a326daa514776d8f,3847503,                # http://stackoverflow.com/questions/3847503/wrapping-exceptions-in-python
545aae6da7187a06287577ff78ffda172ed122de,766809,            // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
7829ca4451cd2b189badca235a9e09fb5e7a85e3,6048786,   * http://stackoverflow.com/questions/6048786/from-module-import-in-init-py-makes-module-name-visible
3ca18d70fc61f9a942db8666361abcb13c19db0f,3635955, * @see http://stackoverflow.com/questions/3635955/how-to-create-a-1-1-1-2-1-3-html-list
4283dee3fc1c443431557b0b3ea827bcda9d6455,49696542,`mapGetters` helper is used for getting `vuex` `actions`. [more info](https://stackoverflow.com/questions/49696542/differences-b-n-mapstate-mapgetters-mapactions-mapmutations-in-vuex) on `vuex` _helpers_
1c3dbdd8d6ea19226fb878e2efc3100d6450ecfc,1495219,// See http://stackoverflow.com/questions/1495219/how-can-i-prevent-the-backspace-key-from-navigating-back
5add4db32d707270e894e0820484709a8cf4cdf8,3787983,    http://stackoverflow.com/a/3787983
df95bd08a7e36a965fe05e64c10130864476f65e,1361149,// http://stackoverflow.com/questions/1361149/get-img-thumbnails-from-vimeo
eaf072bc87139c275b1bc8c09888b4434a7963d9,39626302,// Fix iOS scrolling http://stackoverflow.com/q/39626302/1331425
7e6ea544f40ac941f611c8e2acd90fd2f5103d10,31460733,    // http://stackoverflow.com/questions/31460733/why-arent-stduniform-int-distributionuint8-t-and-stduniform-int-distri
d4f2c3c6a7650262623c6c38f656af02f450e082,51989015,      # https://stackoverflow.com/questions/51989015/selenium-file-detector-unable-to-find-file-to-upload-to-selenium-grid
aeab6a0dede879e6a91e86c431064f0b8bbdae15,3275449,* http://stackoverflow.com/questions/3275449/can-a-makefile-have-a-directory-as-a-target
ef2f729bbb08158a67c8ee429fdd88d1aab4aa67,8751264,// http://stackoverflow.com/questions/8751264/memory-mapped-using-linker
0ba1ca66988a0c62507dd4d003cc1ec2ab7f19d1,26603875,"{""version"":3,""sources"":[""C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/AppSrc/assets/foto5.jpg"",""C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/AppSrc/styles.sass?53fe"",""C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/bootstrap/dist/css/bootstrap.min.css?5f30"",""C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/bootstrap/dist/css/bootstrap.min.css"",""C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/AppSrc/styles.sass"",""C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/css-loader/lib/css-base.js"",""C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/style-loader/addStyles.js""],""names"":[],""mappings"":""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CA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C;AACA;AACA,QAAQ,uBAAuB;AAC/B;AACA;AACA,GAAG;AACH;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD;;AAEA,6BAA6B,mBAAmB;;AAEhD;;AAEA;;AAEA;AACA;AACA"",""file"":""styles.bundle.js"",""sourcesContent"":[""module.exports = __webpack_public_path__ + \""foto5.cfa2071c7cc4d271576d.jpg\"";\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/AppSrc/assets/foto5.jpg\n// module id = ../../../../../AppSrc/assets/foto5.jpg\n// module chunks = styles"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../node_modules/css-loader/index.js??ref--9-1!../node_modules/postcss-loader/index.js??postcss!../node_modules/sass-loader/lib/loader.js??ref--9-3!./styles.sass\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../node_modules/style-loader/addStyles.js\"")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../node_modules/css-loader/index.js??ref--9-1!../node_modules/postcss-loader/index.js??postcss!../node_modules/sass-loader/lib/loader.js??ref--9-3!./styles.sass\"", function() {\n\t\t\tvar newContent = require(\""!!../node_modules/css-loader/index.js??ref--9-1!../node_modules/postcss-loader/index.js??postcss!../node_modules/sass-loader/lib/loader.js??ref--9-3!./styles.sass\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/AppSrc/styles.sass\n// module id = ../../../../../AppSrc/styles.sass\n// module chunks = styles"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../../../css-loader/index.js??ref--8-1!../../../postcss-loader/index.js??postcss!./bootstrap.min.css\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../../../style-loader/addStyles.js\"")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../../../css-loader/index.js??ref--8-1!../../../postcss-loader/index.js??postcss!./bootstrap.min.css\"", function() {\n\t\t\tvar newContent = require(\""!!../../../css-loader/index.js??ref--8-1!../../../postcss-loader/index.js??postcss!./bootstrap.min.css\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/bootstrap/dist/css/bootstrap.min.css\n// module id = ../../../../bootstrap/dist/css/bootstrap.min.css\n// module chunks = styles"",""exports = module.exports = require(\""../../../css-loader/lib/css-base.js\"")(false);\n// imports\n\n\n// module\nexports.push([module.id, \""/*!\\n * Bootstrap v4.0.0-beta (https://getbootstrap.com)\\n * Copyright 2011-2017 The Bootstrap Authors\\n * Copyright 2011-2017 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}abbr[title]::after{content:\\\"" (\\\"" attr(title) \\\"")\\\""}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}html{box-sizing:border-box;font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}*,::after,::before{box-sizing:inherit}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\""Segoe UI\\\"",Roboto,\\\""Helvetica Neue\\\"",Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff}[tabindex=\\\""-1\\\""]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.1}.display-2{font-size:5.5rem;font-weight:300;line-height:1.1}.display-3{font-size:4.5rem;font-weight:300;line-height:1.1}.display-4{font-size:3.5rem;font-weight:300;line-height:1.1}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:5px}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#868e96}.blockquote-footer::before{content:\\\""\\\\2014   \\\\A0\\\""}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;transition:all .2s ease-in-out;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#868e96}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,\\\""Liberation Mono\\\"",\\\""Courier New\\\"",monospace}code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:#f8f9fa;border-radius:.25rem}a>code{padding:0;color:inherit;background-color:inherit}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;margin-top:0;margin-bottom:1rem;font-size:90%;color:#212529}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-right:15px;padding-left:15px;width:100%}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;margin-right:auto;margin-left:auto;padding-right:15px;padding-left:15px;width:100%}.row{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;-webkit-box-flex:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;-webkit-box-flex:0;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;-webkit-box-flex:0;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;-webkit-box-flex:0;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;-webkit-box-flex:0;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;-webkit-box-flex:0;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;-webkit-box-flex:0;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;-webkit-box-flex:0;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;-webkit-box-flex:0;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;-webkit-box-flex:0;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;-webkit-box-flex:0;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;-webkit-box-flex:0;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;-webkit-box-flex:0;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;-webkit-box-flex:0;flex:0 0 100%;max-width:100%}.order-1{-ms-flex-order:1;-webkit-box-ordinal-group:2;order:1}.order-2{-ms-flex-order:2;-webkit-box-ordinal-group:3;order:2}.order-3{-ms-flex-order:3;-webkit-box-ordinal-group:4;order:3}.order-4{-ms-flex-order:4;-webkit-box-ordinal-group:5;order:4}.order-5{-ms-flex-order:5;-webkit-box-ordinal-group:6;order:5}.order-6{-ms-flex-order:6;-webkit-box-ordinal-group:7;order:6}.order-7{-ms-flex-order:7;-webkit-box-ordinal-group:8;order:7}.order-8{-ms-flex-order:8;-webkit-box-ordinal-group:9;order:8}.order-9{-ms-flex-order:9;-webkit-box-ordinal-group:10;order:9}.order-10{-ms-flex-order:10;-webkit-box-ordinal-group:11;order:10}.order-11{-ms-flex-order:11;-webkit-box-ordinal-group:12;order:11}.order-12{-ms-flex-order:12;-webkit-box-ordinal-group:13;order:12}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;-webkit-box-flex:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;-webkit-box-flex:0;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;-webkit-box-flex:0;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;-webkit-box-flex:0;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;-webkit-box-flex:0;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;-webkit-box-flex:0;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;-webkit-box-flex:0;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;-webkit-box-flex:0;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;-webkit-box-flex:0;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;-webkit-box-flex:0;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;-webkit-box-flex:0;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;-webkit-box-flex:0;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;-webkit-box-flex:0;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;-webkit-box-flex:0;flex:0 0 100%;max-width:100%}.order-sm-1{-ms-flex-order:1;-webkit-box-ordinal-group:2;order:1}.order-sm-2{-ms-flex-order:2;-webkit-box-ordinal-group:3;order:2}.order-sm-3{-ms-flex-order:3;-webkit-box-ordinal-group:4;order:3}.order-sm-4{-ms-flex-order:4;-webkit-box-ordinal-group:5;order:4}.order-sm-5{-ms-flex-order:5;-webkit-box-ordinal-group:6;order:5}.order-sm-6{-ms-flex-order:6;-webkit-box-ordinal-group:7;order:6}.order-sm-7{-ms-flex-order:7;-webkit-box-ordinal-group:8;order:7}.order-sm-8{-ms-flex-order:8;-webkit-box-ordinal-group:9;order:8}.order-sm-9{-ms-flex-order:9;-webkit-box-ordinal-group:10;order:9}.order-sm-10{-ms-flex-order:10;-webkit-box-ordinal-group:11;order:10}.order-sm-11{-ms-flex-order:11;-webkit-box-ordinal-group:12;order:11}.order-sm-12{-ms-flex-order:12;-webkit-box-ordinal-group:13;order:12}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;-webkit-box-flex:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;-webkit-box-flex:0;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;-webkit-box-flex:0;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;-webkit-box-flex:0;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;-webkit-box-flex:0;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;-webkit-box-flex:0;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;-webkit-box-flex:0;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;-webkit-box-flex:0;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;-webkit-box-flex:0;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;-webkit-box-flex:0;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;-webkit-box-flex:0;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;-webkit-box-flex:0;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;-webkit-box-flex:0;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;-webkit-box-flex:0;flex:0 0 100%;max-width:100%}.order-md-1{-ms-flex-order:1;-webkit-box-ordinal-group:2;order:1}.order-md-2{-ms-flex-order:2;-webkit-box-ordinal-group:3;order:2}.order-md-3{-ms-flex-order:3;-webkit-box-ordinal-group:4;order:3}.order-md-4{-ms-flex-order:4;-webkit-box-ordinal-group:5;order:4}.order-md-5{-ms-flex-order:5;-webkit-box-ordinal-group:6;order:5}.order-md-6{-ms-flex-order:6;-webkit-box-ordinal-group:7;order:6}.order-md-7{-ms-flex-order:7;-webkit-box-ordinal-group:8;order:7}.order-md-8{-ms-flex-order:8;-webkit-box-ordinal-group:9;order:8}.order-md-9{-ms-flex-order:9;-webkit-box-ordinal-group:10;order:9}.order-md-10{-ms-flex-order:10;-webkit-box-ordinal-group:11;order:10}.order-md-11{-ms-flex-order:11;-webkit-box-ordinal-group:12;order:11}.order-md-12{-ms-flex-order:12;-webkit-box-ordinal-group:13;order:12}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;-webkit-box-flex:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;-webkit-box-flex:0;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;-webkit-box-flex:0;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;-webkit-box-flex:0;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;-webkit-box-flex:0;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;-webkit-box-flex:0;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;-webkit-box-flex:0;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;-webkit-box-flex:0;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;-webkit-box-flex:0;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;-webkit-box-flex:0;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;-webkit-box-flex:0;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;-webkit-box-flex:0;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;-webkit-box-flex:0;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;-webkit-box-flex:0;flex:0 0 100%;max-width:100%}.order-lg-1{-ms-flex-order:1;-webkit-box-ordinal-group:2;order:1}.order-lg-2{-ms-flex-order:2;-webkit-box-ordinal-group:3;order:2}.order-lg-3{-ms-flex-order:3;-webkit-box-ordinal-group:4;order:3}.order-lg-4{-ms-flex-order:4;-webkit-box-ordinal-group:5;order:4}.order-lg-5{-ms-flex-order:5;-webkit-box-ordinal-group:6;order:5}.order-lg-6{-ms-flex-order:6;-webkit-box-ordinal-group:7;order:6}.order-lg-7{-ms-flex-order:7;-webkit-box-ordinal-group:8;order:7}.order-lg-8{-ms-flex-order:8;-webkit-box-ordinal-group:9;order:8}.order-lg-9{-ms-flex-order:9;-webkit-box-ordinal-group:10;order:9}.order-lg-10{-ms-flex-order:10;-webkit-box-ordinal-group:11;order:10}.order-lg-11{-ms-flex-order:11;-webkit-box-ordinal-group:12;order:11}.order-lg-12{-ms-flex-order:12;-webkit-box-ordinal-group:13;order:12}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;-webkit-box-flex:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;-webkit-box-flex:0;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;-webkit-box-flex:0;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;-webkit-box-flex:0;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;-webkit-box-flex:0;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;-webkit-box-flex:0;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;-webkit-box-flex:0;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;-webkit-box-flex:0;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;-webkit-box-flex:0;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;-webkit-box-flex:0;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;-webkit-box-flex:0;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;-webkit-box-flex:0;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;-webkit-box-flex:0;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;-webkit-box-flex:0;flex:0 0 100%;max-width:100%}.order-xl-1{-ms-flex-order:1;-webkit-box-ordinal-group:2;order:1}.order-xl-2{-ms-flex-order:2;-webkit-box-ordinal-group:3;order:2}.order-xl-3{-ms-flex-order:3;-webkit-box-ordinal-group:4;order:3}.order-xl-4{-ms-flex-order:4;-webkit-box-ordinal-group:5;order:4}.order-xl-5{-ms-flex-order:5;-webkit-box-ordinal-group:6;order:5}.order-xl-6{-ms-flex-order:6;-webkit-box-ordinal-group:7;order:6}.order-xl-7{-ms-flex-order:7;-webkit-box-ordinal-group:8;order:7}.order-xl-8{-ms-flex-order:8;-webkit-box-ordinal-group:9;order:8}.order-xl-9{-ms-flex-order:9;-webkit-box-ordinal-group:10;order:9}.order-xl-10{-ms-flex-order:10;-webkit-box-ordinal-group:11;order:10}.order-xl-11{-ms-flex-order:11;-webkit-box-ordinal-group:12;order:11}.order-xl-12{-ms-flex-order:12;-webkit-box-ordinal-group:13;order:12}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #e9ecef}.table thead th{vertical-align:bottom;border-bottom:2px solid #e9ecef}.table tbody+tbody{border-top:2px solid #e9ecef}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #e9ecef}.table-bordered td,.table-bordered th{border:1px solid #e9ecef}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#dddfe2}.table-hover .table-secondary:hover{background-color:#cfd2d6}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#cfd2d6}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.thead-inverse th{color:#fff;background-color:#212529}.thead-default th{color:#495057;background-color:#e9ecef}.table-inverse{color:#fff;background-color:#212529}.table-inverse td,.table-inverse th,.table-inverse thead th{border-color:#32383e}.table-inverse.table-bordered{border:0}.table-inverse.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-inverse.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:991px){.table-responsive{display:block;width:100%;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive.table-bordered{border:0}}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:#495057;background-color:#fff;background-image:none;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0}.form-control::-webkit-input-placeholder{color:#868e96;opacity:1}.form-control:-ms-input-placeholder{color:#868e96;opacity:1}.form-control::placeholder{color:#868e96;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block}.col-form-label{padding-top:calc(.5rem - 1px * 2);padding-bottom:calc(.5rem - 1px * 2);margin-bottom:0}.col-form-label-lg{padding-top:calc(.5rem - 1px * 2);padding-bottom:calc(.5rem - 1px * 2);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem - 1px * 2);padding-bottom:calc(.25rem - 1px * 2);font-size:.875rem}.col-form-legend{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0;font-size:1rem}.form-control-plaintext{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0;line-height:1.25;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.form-control-plaintext.input-group-addon,.input-group-lg>.input-group-btn>.form-control-plaintext.btn,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.form-control-plaintext.input-group-addon,.input-group-sm>.input-group-btn>.form-control-plaintext.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-btn>select.btn:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>select.input-group-addon:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-btn>select.btn:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>select.input-group-addon:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.3125rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;margin-bottom:.5rem}.form-check.disabled .form-check-label{color:#868e96}.form-check-label{padding-left:1.25rem;margin-bottom:0}.form-check-input{position:absolute;margin-top:.25rem;margin-left:-1.25rem}.form-check-input:only-child{position:static}.form-check-inline{display:inline-block}.form-check-inline .form-check-label{vertical-align:middle}.form-check-inline+.form-check-inline{margin-left:.75rem}.invalid-feedback{display:none;margin-top:.25rem;font-size:.875rem;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;width:250px;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.invalid-feedback,.custom-select.is-valid~.invalid-tooltip,.form-control.is-valid~.invalid-feedback,.form-control.is-valid~.invalid-tooltip,.was-validated .custom-select:valid~.invalid-feedback,.was-validated .custom-select:valid~.invalid-tooltip,.was-validated .form-control:valid~.invalid-feedback,.was-validated .form-control:valid~.invalid-tooltip{display:block}.form-check-input.is-valid+.form-check-label,.was-validated .form-check-input:valid+.form-check-label{color:#28a745}.custom-control-input.is-valid~.custom-control-indicator,.was-validated .custom-control-input:valid~.custom-control-indicator{background-color:rgba(40,167,69,.25)}.custom-control-input.is-valid~.custom-control-description,.was-validated .custom-control-input:valid~.custom-control-description{color:#28a745}.custom-file-input.is-valid~.custom-file-control,.was-validated .custom-file-input:valid~.custom-file-control{border-color:#28a745}.custom-file-input.is-valid~.custom-file-control::before,.was-validated .custom-file-input:valid~.custom-file-control::before{border-color:inherit}.custom-file-input.is-valid:focus,.was-validated .custom-file-input:valid:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid+.form-check-label,.was-validated .form-check-input:invalid+.form-check-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-indicator,.was-validated .custom-control-input:invalid~.custom-control-indicator{background-color:rgba(220,53,69,.25)}.custom-control-input.is-invalid~.custom-control-description,.was-validated .custom-control-input:invalid~.custom-control-description{color:#dc3545}.custom-file-input.is-invalid~.custom-file-control,.was-validated .custom-file-input:invalid~.custom-file-control{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-control::before,.was-validated .custom-file-input:invalid~.custom-file-control::before{border-color:inherit}.custom-file-input.is-invalid:focus,.was-validated .custom-file-input:invalid:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-ms-flex-align:center;-webkit-box-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex:0 0 auto;-webkit-box-flex:0;flex:0 0 auto;-ms-flex-flow:row wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-ms-flex-align:center;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-control-label{margin-bottom:0;vertical-align:middle}.form-inline .form-check{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;width:auto;margin-top:0;margin-bottom:0}.form-inline .form-check-label{padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;padding-left:0}.form-inline .custom-control-indicator{position:static;display:inline-block;margin-right:.25rem;vertical-align:text-bottom}.form-inline .has-feedback .form-control-feedback{top:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem .75rem;font-size:1rem;line-height:1.25;border-radius:.25rem;transition:all .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 3px rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn.active,.btn:active{background-image:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 3px rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{background-color:#007bff;border-color:#007bff}.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{background-color:#0069d9;background-image:none;border-color:#0062cc}.btn-secondary{color:#fff;background-color:#868e96;border-color:#868e96}.btn-secondary:hover{color:#fff;background-color:#727b84;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 3px rgba(134,142,150,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#868e96;border-color:#868e96}.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{background-color:#727b84;background-image:none;border-color:#6c757d}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 3px rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{background-color:#28a745;border-color:#28a745}.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{background-color:#218838;background-image:none;border-color:#1e7e34}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 3px rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{background-color:#17a2b8;border-color:#17a2b8}.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{background-color:#138496;background-image:none;border-color:#117a8b}.btn-warning{color:#111;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#111;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 3px rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{background-color:#ffc107;border-color:#ffc107}.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{background-color:#e0a800;background-image:none;border-color:#d39e00}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 3px rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{background-color:#dc3545;border-color:#dc3545}.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{background-color:#c82333;background-image:none;border-color:#bd2130}.btn-light{color:#111;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#111;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 3px rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{background-color:#e2e6ea;background-image:none;border-color:#dae0e5}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 3px rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{background-color:#343a40;border-color:#343a40}.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{background-color:#23272b;background-image:none;border-color:#1d2124}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 3px rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary.active,.btn-outline-primary:active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-secondary{color:#868e96;background-color:transparent;background-image:none;border-color:#868e96}.btn-outline-secondary:hover{color:#fff;background-color:#868e96;border-color:#868e96}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 3px rgba(134,142,150,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#868e96;background-color:transparent}.btn-outline-secondary.active,.btn-outline-secondary:active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#868e96;border-color:#868e96}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 3px rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success.active,.btn-outline-success:active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 3px rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info.active,.btn-outline-info:active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#fff;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 3px rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning.active,.btn-outline-warning:active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#ffc107;border-color:#ffc107}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 3px rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger.active,.btn-outline-danger:active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#fff;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 3px rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light.active,.btn-outline-light:active,.show>.btn-outline-light.dropdown-toggle{color:#fff;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 3px rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark.active,.btn-outline-dark:active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-link{font-weight:400;color:#007bff;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link:disabled{background-color:transparent}.btn-link,.btn-link:active,.btn-link:focus{border-color:transparent;box-shadow:none}.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent}.btn-link:disabled{color:#868e96}.btn-link:disabled:focus,.btn-link:disabled:hover{text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\""\\\"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{border-top:0;border-bottom:.3em solid}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#868e96;background-color:transparent}.show>a{outline:0}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#868e96;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:-webkit-inline-box;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;-webkit-box-flex:0;flex:0 1 auto;margin-bottom:0}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:2}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;-webkit-box-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn+.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.btn+.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{display:-ms-inline-flexbox;display:-webkit-inline-box;display:inline-flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-ms-flex-align:start;-webkit-box-align:start;align-items:flex-start;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:-webkit-box;display:flex;width:100%}.input-group .form-control{position:relative;z-index:2;-ms-flex:1 1 auto;-webkit-box-flex:1;flex:1 1 auto;width:1%;margin-bottom:0}.input-group .form-control:active,.input-group .form-control:focus,.input-group .form-control:hover{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.25;color:#495057;text-align:center;background-color:#e9ecef;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.input-group-addon.form-control-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-addon.form-control-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:not(:last-child),.input-group-addon:not(:last-child),.input-group-btn:not(:first-child)>.btn-group:not(:last-child)>.btn,.input-group-btn:not(:first-child)>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group>.btn,.input-group-btn:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:not(:last-child){border-right:0}.input-group .form-control:not(:first-child),.input-group-addon:not(:first-child),.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group>.btn,.input-group-btn:not(:first-child)>.dropdown-toggle,.input-group-btn:not(:last-child)>.btn-group:not(:first-child)>.btn,.input-group-btn:not(:last-child)>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.form-control+.input-group-addon:not(:first-child){border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:3}.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group{margin-right:-1px}.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group{z-index:2;margin-left:-1px}.input-group-btn:not(:first-child)>.btn-group:active,.input-group-btn:not(:first-child)>.btn-group:focus,.input-group-btn:not(:first-child)>.btn-group:hover,.input-group-btn:not(:first-child)>.btn:active,.input-group-btn:not(:first-child)>.btn:focus,.input-group-btn:not(:first-child)>.btn:hover{z-index:3}.custom-control{position:relative;display:-ms-inline-flexbox;display:-webkit-inline-box;display:inline-flex;min-height:1.5rem;padding-left:1.5rem;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-indicator{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-indicator{box-shadow:0 0 0 1px #fff,0 0 0 3px #007bff}.custom-control-input:active~.custom-control-indicator{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-indicator{background-color:#e9ecef}.custom-control-input:disabled~.custom-control-description{color:#868e96}.custom-control-indicator{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#ddd;background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-indicator{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-indicator{background-image:url(\\\""data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\\\"")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-indicator{background-color:#007bff;background-image:url(\\\""data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\\\"")}.custom-radio .custom-control-indicator{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-indicator{background-image:url(\\\""data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\\\"")}.custom-controls-stacked{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.custom-controls-stacked .custom-control{margin-bottom:.25rem}.custom-controls-stacked .custom-control+.custom-control{margin-left:0}.custom-select{display:inline-block;max-width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.25;color:#495057;vertical-align:middle;background:#fff url(\\\""data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\\\"") no-repeat right .75rem center;background-size:8px 10px;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select:disabled{color:#868e96;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-file{position:relative;display:inline-block;max-width:100%;height:2.5rem;margin-bottom:0}.custom-file-input{min-width:14rem;max-width:100%;height:2.5rem;margin:0;opacity:0}.custom-file-control{position:absolute;top:0;right:0;left:0;z-index:5;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#495057;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.custom-file-control:lang(en):empty::after{content:\\\""Choose file...\\\""}.custom-file-control::before{position:absolute;top:-1px;right:-1px;bottom:-1px;z-index:6;display:block;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#495057;background-color:#e9ecef;border:1px solid rgba(0,0,0,.15);border-radius:0 .25rem .25rem 0}.custom-file-control:lang(en)::before{content:\\\""Browse\\\""}.nav{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#868e96}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #ddd}.nav-tabs .nav-link.disabled{color:#868e96;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#ddd #ddd #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.show>.nav-pills .nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;-webkit-box-flex:1;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;-webkit-box-flex:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:justify;-webkit-box-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:justify;-webkit-box-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-align:center;-webkit-box-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background:0 0;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\\\""\\\"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;-webkit-box-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;-webkit-box-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;-webkit-box-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;-webkit-box-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;-webkit-box-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\\\""data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\"")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\\\""data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\"")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.card{position:relative;display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card-body{-ms-flex:1 1 auto;-webkit-box-flex:1;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex:1 0 0%;-webkit-box-flex:1;flex:1 0 0%;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin-right:15px;margin-left:15px}}@media (min-width:576px){.card-group{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap}.card-group .card{-ms-flex:1 0 0%;-webkit-box-flex:1;flex:1 0 0%}.card-group .card+.card{margin-left:0;border-left:0}.card-group .card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group .card:first-child .card-img-top{border-top-right-radius:0}.card-group .card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group .card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group .card:last-child .card-img-top{border-top-left-radius:0}.card-group .card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group .card:not(:first-child):not(:last-child){border-radius:0}.card-group .card:not(:first-child):not(:last-child) .card-img-bottom,.card-group .card:not(:first-child):not(:last-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb::after{display:block;clear:both;content:\\\""\\\""}.breadcrumb-item{float:left}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#868e96;content:\\\""/\\\""}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#868e96}.pagination{display:-ms-flexbox;display:-webkit-box;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#868e96;pointer-events:none;background-color:#fff;border-color:#ddd}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #ddd}.page-link:focus,.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#ddd}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#868e96}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#6c757d}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#111;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#111;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#111;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#111;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible .close{position:relative;top:-.75rem;right:-1.25rem;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#464a4e;background-color:#e7e8ea;border-color:#dddfe2}.alert-secondary hr{border-top-color:#cfd2d6}.alert-secondary .alert-link{color:#2e3133}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:-webkit-box;display:flex;overflow:hidden;font-size:.75rem;line-height:1rem;text-align:center;background-color:#e9ecef;border-radius:.25rem}.progress-bar{height:1rem;line-height:1rem;color:#fff;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-align:start;-webkit-box-align:start;align-items:flex-start}.media-body{-ms-flex:1;-webkit-box-flex:1;flex:1}.list-group{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#868e96;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}a.list-group-item-primary,button.list-group-item-primary{color:#004085}a.list-group-item-primary:focus,a.list-group-item-primary:hover,button.list-group-item-primary:focus,button.list-group-item-primary:hover{color:#004085;background-color:#9fcdff}a.list-group-item-primary.active,button.list-group-item-primary.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#464a4e;background-color:#dddfe2}a.list-group-item-secondary,button.list-group-item-secondary{color:#464a4e}a.list-group-item-secondary:focus,a.list-group-item-secondary:hover,button.list-group-item-secondary:focus,button.list-group-item-secondary:hover{color:#464a4e;background-color:#cfd2d6}a.list-group-item-secondary.active,button.list-group-item-secondary.active{color:#fff;background-color:#464a4e;border-color:#464a4e}.list-group-item-success{color:#155724;background-color:#c3e6cb}a.list-group-item-success,button.list-group-item-success{color:#155724}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#155724;background-color:#b1dfbb}a.list-group-item-success.active,button.list-group-item-success.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}a.list-group-item-info,button.list-group-item-info{color:#0c5460}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#0c5460;background-color:#abdde5}a.list-group-item-info.active,button.list-group-item-info.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}a.list-group-item-warning,button.list-group-item-warning{color:#856404}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#856404;background-color:#ffe8a1}a.list-group-item-warning.active,button.list-group-item-warning.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}a.list-group-item-danger,button.list-group-item-danger{color:#721c24}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#721c24;background-color:#f1b0b7}a.list-group-item-danger.active,button.list-group-item-danger.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}a.list-group-item-light,button.list-group-item-light{color:#818182}a.list-group-item-light:focus,a.list-group-item-light:hover,button.list-group-item-light:focus,button.list-group-item-light:hover{color:#818182;background-color:#ececf6}a.list-group-item-light.active,button.list-group-item-light.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}a.list-group-item-dark,button.list-group-item-dark{color:#1b1e21}a.list-group-item-dark:focus,a.list-group-item-dark:hover,button.list-group-item-dark:focus,button.list-group-item-dark:hover{color:#1b1e21;background-color:#b9bbbe}a.list-group-item-dark.active,button.list-group-item-dark.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out, -webkit-transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:justify;-webkit-box-pack:justify;justify-content:space-between;padding:15px;border-bottom:1px solid #e9ecef}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;-webkit-box-flex:1;flex:1 1 auto;padding:15px}.modal-footer{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:end;-webkit-box-pack:end;justify-content:flex-end;padding:15px;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:30px auto}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\""Segoe UI\\\"",Roboto,\\\""Helvetica Neue\\\"",Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:5px;height:5px}.tooltip.bs-tooltip-auto[x-placement^=top],.tooltip.bs-tooltip-top{padding:5px 0}.tooltip.bs-tooltip-auto[x-placement^=top] .arrow,.tooltip.bs-tooltip-top .arrow{bottom:0}.tooltip.bs-tooltip-auto[x-placement^=top] .arrow::before,.tooltip.bs-tooltip-top .arrow::before{margin-left:-3px;content:\\\""\\\"";border-width:5px 5px 0;border-top-color:#000}.tooltip.bs-tooltip-auto[x-placement^=right],.tooltip.bs-tooltip-right{padding:0 5px}.tooltip.bs-tooltip-auto[x-placement^=right] .arrow,.tooltip.bs-tooltip-right .arrow{left:0}.tooltip.bs-tooltip-auto[x-placement^=right] .arrow::before,.tooltip.bs-tooltip-right .arrow::before{margin-top:-3px;content:\\\""\\\"";border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.bs-tooltip-auto[x-placement^=bottom],.tooltip.bs-tooltip-bottom{padding:5px 0}.tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow,.tooltip.bs-tooltip-bottom .arrow{top:0}.tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.tooltip.bs-tooltip-bottom .arrow::before{margin-left:-3px;content:\\\""\\\"";border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bs-tooltip-auto[x-placement^=left],.tooltip.bs-tooltip-left{padding:0 5px}.tooltip.bs-tooltip-auto[x-placement^=left] .arrow,.tooltip.bs-tooltip-left .arrow{right:0}.tooltip.bs-tooltip-auto[x-placement^=left] .arrow::before,.tooltip.bs-tooltip-left .arrow::before{right:0;margin-top:-3px;content:\\\""\\\"";border-width:5px 0 5px 5px;border-left-color:#000}.tooltip .arrow::before{position:absolute;border-color:transparent;border-style:solid}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;padding:1px;font-family:-apple-system,BlinkMacSystemFont,\\\""Segoe UI\\\"",Roboto,\\\""Helvetica Neue\\\"",Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:10px;height:5px}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;border-color:transparent;border-style:solid}.popover .arrow::before{content:\\\""\\\"";border-width:11px}.popover .arrow::after{content:\\\""\\\"";border-width:11px}.popover.bs-popover-auto[x-placement^=top],.popover.bs-popover-top{margin-bottom:10px}.popover.bs-popover-auto[x-placement^=top] .arrow,.popover.bs-popover-top .arrow{bottom:0}.popover.bs-popover-auto[x-placement^=top] .arrow::after,.popover.bs-popover-auto[x-placement^=top] .arrow::before,.popover.bs-popover-top .arrow::after,.popover.bs-popover-top .arrow::before{border-bottom-width:0}.popover.bs-popover-auto[x-placement^=top] .arrow::before,.popover.bs-popover-top .arrow::before{bottom:-11px;margin-left:-6px;border-top-color:rgba(0,0,0,.25)}.popover.bs-popover-auto[x-placement^=top] .arrow::after,.popover.bs-popover-top .arrow::after{bottom:-10px;margin-left:-6px;border-top-color:#fff}.popover.bs-popover-auto[x-placement^=right],.popover.bs-popover-right{margin-left:10px}.popover.bs-popover-auto[x-placement^=right] .arrow,.popover.bs-popover-right .arrow{left:0}.popover.bs-popover-auto[x-placement^=right] .arrow::after,.popover.bs-popover-auto[x-placement^=right] .arrow::before,.popover.bs-popover-right .arrow::after,.popover.bs-popover-right .arrow::before{margin-top:-8px;border-left-width:0}.popover.bs-popover-auto[x-placement^=right] .arrow::before,.popover.bs-popover-right .arrow::before{left:-11px;border-right-color:rgba(0,0,0,.25)}.popover.bs-popover-auto[x-placement^=right] .arrow::after,.popover.bs-popover-right .arrow::after{left:-10px;border-right-color:#fff}.popover.bs-popover-auto[x-placement^=bottom],.popover.bs-popover-bottom{margin-top:10px}.popover.bs-popover-auto[x-placement^=bottom] .arrow,.popover.bs-popover-bottom .arrow{top:0}.popover.bs-popover-auto[x-placement^=bottom] .arrow::after,.popover.bs-popover-auto[x-placement^=bottom] .arrow::before,.popover.bs-popover-bottom .arrow::after,.popover.bs-popover-bottom .arrow::before{margin-left:-7px;border-top-width:0}.popover.bs-popover-auto[x-placement^=bottom] .arrow::before,.popover.bs-popover-bottom .arrow::before{top:-11px;border-bottom-color:rgba(0,0,0,.25)}.popover.bs-popover-auto[x-placement^=bottom] .arrow::after,.popover.bs-popover-bottom .arrow::after{top:-10px;border-bottom-color:#fff}.popover.bs-popover-auto[x-placement^=bottom] .popover-header::before,.popover.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:20px;margin-left:-10px;content:\\\""\\\"";border-bottom:1px solid #f7f7f7}.popover.bs-popover-auto[x-placement^=left],.popover.bs-popover-left{margin-right:10px}.popover.bs-popover-auto[x-placement^=left] .arrow,.popover.bs-popover-left .arrow{right:0}.popover.bs-popover-auto[x-placement^=left] .arrow::after,.popover.bs-popover-auto[x-placement^=left] .arrow::before,.popover.bs-popover-left .arrow::after,.popover.bs-popover-left .arrow::before{margin-top:-8px;border-right-width:0}.popover.bs-popover-auto[x-placement^=left] .arrow::before,.popover.bs-popover-left .arrow::before{right:-11px;border-left-color:rgba(0,0,0,.25)}.popover.bs-popover-auto[x-placement^=left] .arrow::after,.popover.bs-popover-left .arrow::after{right:-10px;border-left-color:#fff}.popover-header{padding:8px 14px;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:9px 14px;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;-webkit-box-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease, -webkit-transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\\\""data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\\\"")}.carousel-control-next-icon{background-image:url(\\\""data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\\\"")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;-webkit-box-flex:0;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\""\\\""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\""\\\""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#868e96!important}a.bg-secondary:focus,a.bg-secondary:hover{background-color:#6c757d!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #e9ecef!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#868e96!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%}.rounded-0{border-radius:0}.clearfix::after{display:block;clear:both;content:\\\""\\\""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:-webkit-inline-box!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:-webkit-inline-box!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:-webkit-inline-box!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:-webkit-inline-box!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:-webkit-box!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:-webkit-inline-box!important;display:inline-flex!important}}.d-print-block{display:none!important}@media print{.d-print-block{display:block!important}}.d-print-inline{display:none!important}@media print{.d-print-inline{display:inline!important}}.d-print-inline-block{display:none!important}@media print{.d-print-inline-block{display:inline-block!important}}@media print{.d-print-none{display:none!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\\\""\\\""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-ms-flex-pack:start!important;-webkit-box-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;-webkit-box-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;-webkit-box-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;-webkit-box-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;-webkit-box-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;-webkit-box-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;-webkit-box-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;-webkit-box-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;-webkit-box-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-ms-flex-pack:start!important;-webkit-box-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;-webkit-box-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;-webkit-box-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;-webkit-box-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;-webkit-box-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;-webkit-box-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;-webkit-box-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;-webkit-box-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;-webkit-box-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-ms-flex-pack:start!important;-webkit-box-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;-webkit-box-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;-webkit-box-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;-webkit-box-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;-webkit-box-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;-webkit-box-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;-webkit-box-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;-webkit-box-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;-webkit-box-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-ms-flex-pack:start!important;-webkit-box-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;-webkit-box-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;-webkit-box-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;-webkit-box-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;-webkit-box-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;-webkit-box-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;-webkit-box-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;-webkit-box-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;-webkit-box-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-ms-flex-pack:start!important;-webkit-box-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;-webkit-box-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;-webkit-box-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;-webkit-box-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;-webkit-box-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;-webkit-box-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;-webkit-box-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;-webkit-box-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;-webkit-box-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position: -webkit-sticky) or (position: sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-right:0!important;margin-left:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:1rem!important}.mt-3{margin-top:1rem!important}.mr-3{margin-right:1rem!important}.mb-3{margin-bottom:1rem!important}.ml-3{margin-left:1rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-4{margin:1.5rem!important}.mt-4{margin-top:1.5rem!important}.mr-4{margin-right:1.5rem!important}.mb-4{margin-bottom:1.5rem!important}.ml-4{margin-left:1.5rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-5{margin:3rem!important}.mt-5{margin-top:3rem!important}.mr-5{margin-right:3rem!important}.mb-5{margin-bottom:3rem!important}.ml-5{margin-left:3rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-right:0!important;padding-left:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:1rem!important}.pt-3{padding-top:1rem!important}.pr-3{padding-right:1rem!important}.pb-3{padding-bottom:1rem!important}.pl-3{padding-left:1rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-4{padding:1.5rem!important}.pt-4{padding-top:1.5rem!important}.pr-4{padding-right:1.5rem!important}.pb-4{padding-bottom:1.5rem!important}.pl-4{padding-left:1.5rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-5{padding:3rem!important}.pt-5{padding-top:3rem!important}.pr-5{padding-right:3rem!important}.pb-5{padding-bottom:3rem!important}.pl-5{padding-left:3rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0{margin-top:0!important}.mr-sm-0{margin-right:0!important}.mb-sm-0{margin-bottom:0!important}.ml-sm-0{margin-left:0!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1{margin-top:.25rem!important}.mr-sm-1{margin-right:.25rem!important}.mb-sm-1{margin-bottom:.25rem!important}.ml-sm-1{margin-left:.25rem!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2{margin-top:.5rem!important}.mr-sm-2{margin-right:.5rem!important}.mb-sm-2{margin-bottom:.5rem!important}.ml-sm-2{margin-left:.5rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3{margin-top:1rem!important}.mr-sm-3{margin-right:1rem!important}.mb-sm-3{margin-bottom:1rem!important}.ml-sm-3{margin-left:1rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4{margin-top:1.5rem!important}.mr-sm-4{margin-right:1.5rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.ml-sm-4{margin-left:1.5rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5{margin-top:3rem!important}.mr-sm-5{margin-right:3rem!important}.mb-sm-5{margin-bottom:3rem!important}.ml-sm-5{margin-left:3rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0{padding-top:0!important}.pr-sm-0{padding-right:0!important}.pb-sm-0{padding-bottom:0!important}.pl-sm-0{padding-left:0!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1{padding-top:.25rem!important}.pr-sm-1{padding-right:.25rem!important}.pb-sm-1{padding-bottom:.25rem!important}.pl-sm-1{padding-left:.25rem!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2{padding-top:.5rem!important}.pr-sm-2{padding-right:.5rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pl-sm-2{padding-left:.5rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3{padding-top:1rem!important}.pr-sm-3{padding-right:1rem!important}.pb-sm-3{padding-bottom:1rem!important}.pl-sm-3{padding-left:1rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4{padding-top:1.5rem!important}.pr-sm-4{padding-right:1.5rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pl-sm-4{padding-left:1.5rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5{padding-top:3rem!important}.pr-sm-5{padding-right:3rem!important}.pb-sm-5{padding-bottom:3rem!important}.pl-sm-5{padding-left:3rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto{margin-top:auto!important}.mr-sm-auto{margin-right:auto!important}.mb-sm-auto{margin-bottom:auto!important}.ml-sm-auto{margin-left:auto!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0{margin-top:0!important}.mr-md-0{margin-right:0!important}.mb-md-0{margin-bottom:0!important}.ml-md-0{margin-left:0!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.m-md-1{margin:.25rem!important}.mt-md-1{margin-top:.25rem!important}.mr-md-1{margin-right:.25rem!important}.mb-md-1{margin-bottom:.25rem!important}.ml-md-1{margin-left:.25rem!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2{margin-top:.5rem!important}.mr-md-2{margin-right:.5rem!important}.mb-md-2{margin-bottom:.5rem!important}.ml-md-2{margin-left:.5rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3{margin-top:1rem!important}.mr-md-3{margin-right:1rem!important}.mb-md-3{margin-bottom:1rem!important}.ml-md-3{margin-left:1rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4{margin-top:1.5rem!important}.mr-md-4{margin-right:1.5rem!important}.mb-md-4{margin-bottom:1.5rem!important}.ml-md-4{margin-left:1.5rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5{margin-top:3rem!important}.mr-md-5{margin-right:3rem!important}.mb-md-5{margin-bottom:3rem!important}.ml-md-5{margin-left:3rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-md-0{padding:0!important}.pt-md-0{padding-top:0!important}.pr-md-0{padding-right:0!important}.pb-md-0{padding-bottom:0!important}.pl-md-0{padding-left:0!important}.px-md-0{padding-right:0!important;padding-left:0!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.p-md-1{padding:.25rem!important}.pt-md-1{padding-top:.25rem!important}.pr-md-1{padding-right:.25rem!important}.pb-md-1{padding-bottom:.25rem!important}.pl-md-1{padding-left:.25rem!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2{padding-top:.5rem!important}.pr-md-2{padding-right:.5rem!important}.pb-md-2{padding-bottom:.5rem!important}.pl-md-2{padding-left:.5rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3{padding-top:1rem!important}.pr-md-3{padding-right:1rem!important}.pb-md-3{padding-bottom:1rem!important}.pl-md-3{padding-left:1rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4{padding-top:1.5rem!important}.pr-md-4{padding-right:1.5rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pl-md-4{padding-left:1.5rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5{padding-top:3rem!important}.pr-md-5{padding-right:3rem!important}.pb-md-5{padding-bottom:3rem!important}.pl-md-5{padding-left:3rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto{margin-top:auto!important}.mr-md-auto{margin-right:auto!important}.mb-md-auto{margin-bottom:auto!important}.ml-md-auto{margin-left:auto!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0{margin-top:0!important}.mr-lg-0{margin-right:0!important}.mb-lg-0{margin-bottom:0!important}.ml-lg-0{margin-left:0!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1{margin-top:.25rem!important}.mr-lg-1{margin-right:.25rem!important}.mb-lg-1{margin-bottom:.25rem!important}.ml-lg-1{margin-left:.25rem!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2{margin-top:.5rem!important}.mr-lg-2{margin-right:.5rem!important}.mb-lg-2{margin-bottom:.5rem!important}.ml-lg-2{margin-left:.5rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3{margin-top:1rem!important}.mr-lg-3{margin-right:1rem!important}.mb-lg-3{margin-bottom:1rem!important}.ml-lg-3{margin-left:1rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4{margin-top:1.5rem!important}.mr-lg-4{margin-right:1.5rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.ml-lg-4{margin-left:1.5rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5{margin-top:3rem!important}.mr-lg-5{margin-right:3rem!important}.mb-lg-5{margin-bottom:3rem!important}.ml-lg-5{margin-left:3rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0{padding-top:0!important}.pr-lg-0{padding-right:0!important}.pb-lg-0{padding-bottom:0!important}.pl-lg-0{padding-left:0!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1{padding-top:.25rem!important}.pr-lg-1{padding-right:.25rem!important}.pb-lg-1{padding-bottom:.25rem!important}.pl-lg-1{padding-left:.25rem!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2{padding-top:.5rem!important}.pr-lg-2{padding-right:.5rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pl-lg-2{padding-left:.5rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3{padding-top:1rem!important}.pr-lg-3{padding-right:1rem!important}.pb-lg-3{padding-bottom:1rem!important}.pl-lg-3{padding-left:1rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4{padding-top:1.5rem!important}.pr-lg-4{padding-right:1.5rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pl-lg-4{padding-left:1.5rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5{padding-top:3rem!important}.pr-lg-5{padding-right:3rem!important}.pb-lg-5{padding-bottom:3rem!important}.pl-lg-5{padding-left:3rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto{margin-top:auto!important}.mr-lg-auto{margin-right:auto!important}.mb-lg-auto{margin-bottom:auto!important}.ml-lg-auto{margin-left:auto!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0{margin-top:0!important}.mr-xl-0{margin-right:0!important}.mb-xl-0{margin-bottom:0!important}.ml-xl-0{margin-left:0!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1{margin-top:.25rem!important}.mr-xl-1{margin-right:.25rem!important}.mb-xl-1{margin-bottom:.25rem!important}.ml-xl-1{margin-left:.25rem!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2{margin-top:.5rem!important}.mr-xl-2{margin-right:.5rem!important}.mb-xl-2{margin-bottom:.5rem!important}.ml-xl-2{margin-left:.5rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3{margin-top:1rem!important}.mr-xl-3{margin-right:1rem!important}.mb-xl-3{margin-bottom:1rem!important}.ml-xl-3{margin-left:1rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4{margin-top:1.5rem!important}.mr-xl-4{margin-right:1.5rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.ml-xl-4{margin-left:1.5rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5{margin-top:3rem!important}.mr-xl-5{margin-right:3rem!important}.mb-xl-5{margin-bottom:3rem!important}.ml-xl-5{margin-left:3rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0{padding-top:0!important}.pr-xl-0{padding-right:0!important}.pb-xl-0{padding-bottom:0!important}.pl-xl-0{padding-left:0!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1{padding-top:.25rem!important}.pr-xl-1{padding-right:.25rem!important}.pb-xl-1{padding-bottom:.25rem!important}.pl-xl-1{padding-left:.25rem!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2{padding-top:.5rem!important}.pr-xl-2{padding-right:.5rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pl-xl-2{padding-left:.5rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3{padding-top:1rem!important}.pr-xl-3{padding-right:1rem!important}.pb-xl-3{padding-bottom:1rem!important}.pl-xl-3{padding-left:1rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4{padding-top:1.5rem!important}.pr-xl-4{padding-right:1.5rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pl-xl-4{padding-left:1.5rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5{padding-top:3rem!important}.pr-xl-5{padding-right:3rem!important}.pb-xl-5{padding-bottom:3rem!important}.pl-xl-5{padding-left:3rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto{margin-top:auto!important}.mr-xl-auto{margin-right:auto!important}.mb-xl-auto{margin-bottom:auto!important}.ml-xl-auto{margin-left:auto!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-normal{font-weight:400}.font-weight-bold{font-weight:700}.font-italic{font-style:italic}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#868e96!important}a.text-secondary:focus,a.text-secondary:hover{color:#6c757d!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#868e96!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/css-loader?{\""sourceMap\"":false,\""importLoaders\"":1}!C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/postcss-loader?{\""ident\"":\""postcss\""}!C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/bootstrap/dist/css/bootstrap.min.css\n// module id = ../../../../css-loader/index.js?{\""sourceMap\"":false,\""importLoaders\"":1}!../../../../postcss-loader/index.js?{\""ident\"":\""postcss\""}!../../../../bootstrap/dist/css/bootstrap.min.css\n// module chunks = styles"",""exports = module.exports = require(\""../node_modules/css-loader/lib/css-base.js\"")(false);\n// imports\n\n\n// module\nexports.push([module.id, \""/* You can add global styles to this file, and also import other style files */\\nbody {\\n  background: white;\\n  margin: 0px;\\n  padding: 0px; }\\n\\n.bitcolor {\\n  background-color: white; }\\n\\n.bitfooter {\\n  padding: 10px;\\n  background: white; }\\n\\n.dishimg {\\n  width: 100px; }\\n\\n#header {\\n  background-image: url(\"" + require(\""./assets/foto5.jpg\"") + \"");\\n  height: 150px;\\n  width: 100%;\\n  padding: 10px;\\n  background-repeat: no-repeat;\\n  background-size: cover;\\n  border: 0px solid white; }\\n\\n#header h1 {\\n  font-size: 180%; }\\n\\n.navbar {\\n  background-color: #ddc073;\\n  text-align: center; }\\n\\n#navbarSupportedContent ul li a {\\n  color: black; }\\n\\n#navbarSupportedContent ul li a:hover {\\n  color: white;\\n  border-style: solid;\\n  border-width: 0 0 1px 0;\\n  border-color: white; }\\n\\n.card-select {\\n  padding: 10px; }\\n\\n.btn {\\n  background-color: #999999;\\n  border: 0px solid white; }\\n\\n.btn:hover {\\n  background-color: #d8d8d8;\\n  border: 0px solid white;\\n  color: black; }\\n\\n#button {\\n  color: white; }\\n\\n.selected {\\n  font: 250% \\\""Freestyle Script\\\"";\\n  font-weight: bolder; }\\n\\n.selected-message {\\n  color: #39a512; }\\n\\n#card-dish {\\n  padding: 2%;\\n  float: left;\\n  height: 400px; }\\n\\n#card-dish div a {\\n  float: left;\\n  margin-right: 10px; }\\n\\n#card-dish div img {\\n  margin-top: 10px;\\n  width: 100%; }\\n\\n.menue-title {\\n  font: 250% \\\""Freestyle Script\\\"";\\n  text-align: center;\\n  margin-top: 10px; }\\n\\n.menue-text {\\n  text-align: center; }\\n\\n.card-select {\\n  margin-right: 10px; }\\n\\n.card, .card-kitchen {\\n  margin-right: 5%;\\n  float: left;\\n  padding: 10px; }\\n\\n.card-header {\\n  background-color: #ddc073; }\\n\\n#adminNeuesRegister {\\n  margin-bottom: 10px; }\\n\\n#anzahl {\\n  text-align: center; }\\n\\n.card-deck {\\n  width: 100%;\\n  position: block;\\n  margin: 0px auto; }\\n\\n.adminTableNumber {\\n  margin-bottom: 2%;\\n  width: 100%;\\n  padding: 2%;\\n  border: 1px solid gray; }\\n\\n.card-kitchen {\\n  border: 1px solid gray;\\n  margin-bottom: 10px; }\\n\\n.card-select-dish a {\\n  cursor: pointer; }\\n\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/css-loader?{\""sourceMap\"":false,\""importLoaders\"":1}!C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/postcss-loader?{\""ident\"":\""postcss\""}!C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/sass-loader/lib/loader.js?{\""sourceMap\"":false,\""precision\"":8,\""includePaths\"":[]}!C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/AppSrc/styles.sass\n// module id = ../../../../css-loader/index.js?{\""sourceMap\"":false,\""importLoaders\"":1}!../../../../postcss-loader/index.js?{\""ident\"":\""postcss\""}!../../../../sass-loader/lib/loader.js?{\""sourceMap\"":false,\""precision\"":8,\""includePaths\"":[]}!../../../../../AppSrc/styles.sass\n// module chunks = styles"",""/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \""@media \"" + item[2] + \""{\"" + content + \""}\"";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\""\"");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \""string\"")\n\t\t\tmodules = [[null, modules, \""\""]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \""number\"")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \""number\"" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \""(\"" + item[2] + \"") and (\"" + mediaQuery + \"")\"";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/css-loader/lib/css-base.js\n// module id = ../../../../css-loader/lib/css-base.js\n// module chunks = styles vendor"",""/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nvar stylesInDom = {},\n\tmemoize = function(fn) {\n\t\tvar memo;\n\t\treturn function () {\n\t\t\tif (typeof memo === \""undefined\"") memo = fn.apply(this, arguments);\n\t\t\treturn memo;\n\t\t};\n\t},\n\tisOldIE = memoize(function() {\n\t\treturn /msie [6-9]\\b/.test(self.navigator.userAgent.toLowerCase());\n\t}),\n\tgetHeadElement = memoize(function () {\n\t\treturn document.head || document.getElementsByTagName(\""head\"")[0];\n\t}),\n\tsingletonElement = null,\n\tsingletonCounter = 0,\n\tstyleElementsInsertedAtTop = [];\n\nmodule.exports = function(list, options) {\n\tif(typeof DEBUG !== \""undefined\"" && DEBUG) {\n\t\tif(typeof document !== \""object\"") throw new Error(\""The style-loader cannot be used in a non-browser environment\"");\n\t}\n\n\toptions = options || {};\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (typeof options.singleton === \""undefined\"") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the bottom of <head>.\n\tif (typeof options.insertAt === \""undefined\"") options.insertAt = \""bottom\"";\n\n\tvar styles = listToStyles(list);\n\taddStylesToDom(styles, options);\n\n\treturn function update(newList) {\n\t\tvar mayRemove = [];\n\t\tfor(var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\t\tfor(var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++)\n\t\t\t\t\tdomStyle.parts[j]();\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction addStylesToDom(styles, options) {\n\tfor(var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles(list) {\n\tvar styles = [];\n\tvar newStyles = {};\n\tfor(var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\t\tif(!newStyles[id])\n\t\t\tstyles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse\n\t\t\tnewStyles[id].parts.push(part);\n\t}\n\treturn styles;\n}\n\nfunction insertStyleElement(options, styleElement) {\n\tvar head = getHeadElement();\n\tvar lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\n\tif (options.insertAt === \""top\"") {\n\t\tif(!lastStyleElementInsertedAtTop) {\n\t\t\thead.insertBefore(styleElement, head.firstChild);\n\t\t} else if(lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\thead.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\thead.appendChild(styleElement);\n\t\t}\n\t\tstyleElementsInsertedAtTop.push(styleElement);\n\t} else if (options.insertAt === \""bottom\"") {\n\t\thead.appendChild(styleElement);\n\t} else {\n\t\tthrow new Error(\""Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\"");\n\t}\n}\n\nfunction removeStyleElement(styleElement) {\n\tstyleElement.parentNode.removeChild(styleElement);\n\tvar idx = styleElementsInsertedAtTop.indexOf(styleElement);\n\tif(idx >= 0) {\n\t\tstyleElementsInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement(options) {\n\tvar styleElement = document.createElement(\""style\"");\n\tstyleElement.type = \""text/css\"";\n\tinsertStyleElement(options, styleElement);\n\treturn styleElement;\n}\n\nfunction createLinkElement(options) {\n\tvar linkElement = document.createElement(\""link\"");\n\tlinkElement.rel = \""stylesheet\"";\n\tinsertStyleElement(options, linkElement);\n\treturn linkElement;\n}\n\nfunction addStyle(obj, options) {\n\tvar styleElement, update, remove;\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\t\tstyleElement = singletonElement || (singletonElement = createStyleElement(options));\n\t\tupdate = applyToSingletonTag.bind(null, styleElement, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);\n\t} else if(obj.sourceMap &&\n\t\ttypeof URL === \""function\"" &&\n\t\ttypeof URL.createObjectURL === \""function\"" &&\n\t\ttypeof URL.revokeObjectURL === \""function\"" &&\n\t\ttypeof Blob === \""function\"" &&\n\t\ttypeof btoa === \""function\"") {\n\t\tstyleElement = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, styleElement);\n\t\tremove = function() {\n\t\t\tremoveStyleElement(styleElement);\n\t\t\tif(styleElement.href)\n\t\t\t\tURL.revokeObjectURL(styleElement.href);\n\t\t};\n\t} else {\n\t\tstyleElement = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, styleElement);\n\t\tremove = function() {\n\t\t\tremoveStyleElement(styleElement);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle(newObj) {\n\t\tif(newObj) {\n\t\t\tif(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)\n\t\t\t\treturn;\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag(styleElement, index, remove, obj) {\n\tvar css = remove ? \""\"" : obj.css;\n\n\tif (styleElement.styleSheet) {\n\t\tstyleElement.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = styleElement.childNodes;\n\t\tif (childNodes[index]) styleElement.removeChild(childNodes[index]);\n\t\tif (childNodes.length) {\n\t\t\tstyleElement.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyleElement.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag(styleElement, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyleElement.setAttribute(\""media\"", media)\n\t}\n\n\tif(styleElement.styleSheet) {\n\t\tstyleElement.styleSheet.cssText = css;\n\t} else {\n\t\twhile(styleElement.firstChild) {\n\t\t\tstyleElement.removeChild(styleElement.firstChild);\n\t\t}\n\t\tstyleElement.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink(linkElement, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\tif(sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \""\\n/*# sourceMappingURL=data:application/json;base64,\"" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \"" */\"";\n\t}\n\n\tvar blob = new Blob([css], { type: \""text/css\"" });\n\n\tvar oldSrc = linkElement.href;\n\n\tlinkElement.href = URL.createObjectURL(blob);\n\n\tif(oldSrc)\n\t\tURL.revokeObjectURL(oldSrc);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Users/tmeier/source/repos/Basta2017_SvcFabric_Lab/AngularClient/node_modules/style-loader/addStyles.js\n// module id = ../../../../style-loader/addStyles.js\n// module chunks = styles""],""sourceRoot"":""webpack:///""}"
a528577b7e82c599b68af7cea5da0ff33462d0c3,27936772,      // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873
418d3532cf3225ce3e4dff92152404a3ed05416e,5870603,                        // http://stackoverflow.com/questions/5868295/document-execcommand-fontsize-in-pixels/5870603#5870603
ee36b4917dae87fa212bf3a4eaa5c34c46ef3c76,4632891,"REM exit code fix, see http://stackoverflow.com/questions/4632891/exiting-batch-with-exit-b-x-where-x-1-acts-as-if-command-completed-successfu"
2859b17fb501303ae06229214949e09b1833070f,15376075,%http://stackoverflow.com/questions/15376075/cluster-analysis-in-r-determine-the-optimal-number-of-clusters?imm_mid=0bf394&cmp=em-strata-na-na-newsltr_20140702_elist
f90e35982637aae07fa0c3334ae74f747acb74d9,5875275,[source](https://stackoverflow.com/questions/5875275/git-commit-v-by-default)
d49063e419c13e3638d03d545947ee3bf48d8a5b,19911929,"Some web servers, like Google App Engine for example, require explicit configuration for each file type served. In this case, your Source Maps should be served with a MIME type of `application/json`, but Chrome will actually [accept any content-type](https://stackoverflow.com/questions/19911929/what-mime-type-should-i-use-for-source-map-files), for example `application/octet-stream`."
e1801b3abba0f217b879868c6680b2d206ed3ac8,2450976,// https://stackoverflow.com/a/2450976
6f99a709399558ceee7673ff6c7a843c9abf3501,25355178, * Adapted from http://stackoverflow.com/a/25355178
303c20dd6a0c8dd20292568dc486f2ff87b28312,26775144,http://bl.ocks.org/d3noob/8329447	http://stackoverflow.com/questions/26775144/reading-json-array-in-d3-via-php-not-working
c2c28c2b14609ac2d4a6a2f7827c031eacbc5627,28210364,    // http://stackoverflow.com/a/28210364/1070244
7cb26500e1decb2c6c06a7f2c5b540aff32cef63,6985582,maybe it could be done with proxies: http://stackoverflow.com/questions/6985582/monitor-all-javascript-object-properties-magic-getters-and-setters
9859ecb3e0f7dec44c20378e532fcac937c559a6,3300464,"        """"""Used for handling sqlite rows as dictionary (source: http://stackoverflow.com/questions/3300464/how-can-i-get-dict-from-sqlite-query)"""""""
268c81511dd220ea126c11138b00f36d11ce3e0a,39192844,    // https://stackoverflow.com/questions/39192844/android-studio-warning-when-using-packagemanager-get-signatures
eef208343730257aeada4b5db616c260bb5593b4,34085552,http://stackoverflow.com/questions/34085552/sslerror-bad-handshake-python-requests
bc4e58dfe8c4edd949e38c1891ad18110fb66692,477816,"[{""link_text"":""Coinbase Leads Charge In Bitcoin’s Consumerization"",""link"":""http://techcrunch.com/2013/05/27/bitcoin-2/"",""source"":""techcrunch.com"",""points"":58,""comments"":20,""submitter"":""dsugarman"",""date"":1369698827,""id"":""5777168"",""homepage"":false},{""link_text"":""OAuth.io - OAuth that just works."",""link"":""http://oauth.io"",""source"":""oauth.io"",""points"":139,""comments"":50,""submitter"":""thyb"",""date"":1369696944,""id"":""5777102"",""homepage"":false},{""source"":""medium.com"",""comments"":9,""date"":1369696339,""link_text"":""How to relax with all the powers of the universe at your fingertips"",""points"":25,""submitter"":""jarsbe"",""link"":""https://medium.com/this-happened-to-me/ba5f744e21d5"",""id"":""5777014"",""homepage"":false},{""link_text"":""The PGPi scanning project"",""link"":""http://www.pgpi.org/pgpi/project/scanning"",""source"":""pgpi.org"",""points"":42,""comments"":12,""submitter"":""yew"",""date"":1369695246,""id"":""5776969"",""homepage"":false},{""source"":""gowers.wordpress.com"",""comments"":5,""date"":1369695092,""link_text"":""Elsevier journals: has anything changed?"",""points"":120,""submitter"":""ColinWright"",""link"":""http://gowers.wordpress.com/2013/05/27/elsevier-journals-has-anything-changed/"",""id"":""5776867"",""homepage"":false},{""source"":""rorygianni.me.uk"",""comments"":8,""date"":1369694939,""link_text"":""Recreating the Image Viewer UI from Blade Runner"",""points"":21,""submitter"":""digitalWestie"",""link"":""http://rorygianni.me.uk/posts/recreating-the-image-viewer-ui-from-blade-runner"",""id"":""5776950"",""homepage"":false},{""link_text"":""Exploitation of an old Rails vulnerability"",""link"":""https://gist.github.com/ismasan/5647955"",""source"":""github.com"",""points"":77,""comments"":49,""submitter"":""boonez123"",""date"":1369692019,""id"":""5776422"",""homepage"":false},{""source"":""latimes.com"",""comments"":45,""date"":1369691565,""link_text"":""'The chair is out to kill us'. Studies point to the health risks of sitting"",""points"":39,""submitter"":""ronnier"",""link"":""http://www.latimes.com/health/la-he-dont-sit-20130525,0,3673157.story"",""id"":""5776717"",""homepage"":false},{""source"":""wiemann.name"",""comments"":14,""date"":1369689897,""link_text"":""500 requests/s with Ruby on Rails 4 on a 5$ / month server"",""points"":25,""submitter"":""matwiemann"",""link"":""http://blog.wiemann.name/500-requestss-with-ruby-on-rails-4-on-a-5-month-server"",""id"":""5776590"",""homepage"":false},{""source"":""quietbabylon.com"",""comments"":29,""date"":1369689744,""link_text"":""Twitter API returning results that do not respect the arrow of time"",""points"":107,""submitter"":""ChrisArchitect"",""link"":""http://twitterbug.quietbabylon.com/"",""id"":""5776454"",""homepage"":false},{""source"":""creativitypost.com"",""comments"":6,""date"":1369689592,""link_text"":""The Complexity of Greatness: Beyond Talent or Practice"",""points"":20,""submitter"":""tokenadult"",""link"":""http://www.creativitypost.com/psychology/the_complexity_of_greatness_beyond_talent_or_practice"",""id"":""5776526"",""homepage"":false},{""link_text"":""Centuries-old frozen plants revived"",""link"":""http://www.bbc.co.uk/news/science-environment-22656239"",""source"":""bbc.co.uk"",""points"":37,""comments"":4,""submitter"":""schrofer"",""date"":1369689440,""id"":""5776512"",""homepage"":false},{""link_text"":""Pure Javascript HTML Templating for jQuery and Node.js"",""link"":""http://json2html.com"",""source"":""json2html.com"",""points"":21,""comments"":10,""submitter"":""seebrown"",""date"":1369688498,""id"":""5776544"",""homepage"":false},{""source"":""indiegogo.com"",""comments"":95,""date"":1369686951,""link_text"":""Indiegogo fund raises enough money to buy video of Mayor Rob Ford smoking crack"",""points"":141,""submitter"":""muratmutlu"",""link"":""http://www.indiegogo.com/projects/rob-ford-crackstarter"",""id"":""5776412"",""homepage"":false},{""link_text"":""Researchers turn cement into metal"",""link"":""http://phys.org/news/2013-05-cement-metal.html"",""source"":""phys.org"",""points"":79,""comments"":16,""submitter"":""adventured"",""date"":1369686190,""id"":""5776280"",""homepage"":false},{""link_text"":""Crate.io: A new kind of Python package index"",""link"":""https://crate.io/"",""source"":""crate.io"",""points"":124,""comments"":46,""submitter"":""ak217"",""date"":1369685734,""id"":""5776305"",""homepage"":false},{""source"":""jeffkward.com"",""comments"":36,""date"":1369685429,""link_text"":""Best Place To Start A Company If You Have Kids"",""points"":74,""submitter"":""mjfern"",""link"":""http://jeffkward.com/best-place-for-starting-a-company-if-you-have-kids"",""id"":""5776188"",""homepage"":false},{""source"":""thenextweb.com"",""comments"":17,""date"":1369683304,""link_text"":""How rich would you be if you’d bought Apple shares instead of a Mac in 2003?"",""points"":12,""submitter"":""napolux"",""link"":""http://thenextweb.com/shareables/2013/05/27/what-if-you-bought-apple-shares-instead-of-a-17-powerbook-g4-in-2003/?awesm=tnw.to_i0fCx&utm_content=How%20rich%20would%20you%20be%20if%20youd%20bought%20Apple%20shares%20instead%20of%20a%20PowerBook%20in%202003"",""id"":""5775903"",""homepage"":false},{""link_text"":""Show HN: Better way to navigate Github projects"",""link"":""http://gitray.com"",""source"":""gitray.com"",""points"":null,""comments"":null,""submitter"":""Jonovono"",""date"":1369681020,""id"":""5775869"",""homepage"":false},{""source"":""lionoftheblogosphere.wordpress.com"",""comments"":233,""date"":1369680105,""link_text"":""Sucks to be an old engineer"",""points"":188,""submitter"":""ekm2"",""link"":""http://lionoftheblogosphere.wordpress.com/2013/05/25/sucks-to-be-an-old-engineer/"",""id"":""5775880"",""homepage"":false},{""link_text"":""Dear WordPress"",""link"":""http://ma.tt/2013/05/dear-wordpress/"",""source"":""ma.tt"",""points"":104,""comments"":77,""submitter"":""muellerwolfram"",""date"":1369679648,""id"":""5775870"",""homepage"":false},{""source"":""forbes.com"",""comments"":91,""date"":1369679338,""link_text"":""BitTorrent Sync Is A Dropbox Killer, Or Maybe Much More Than That"",""points"":88,""submitter"":""leonegresima"",""link"":""http://www.forbes.com/sites/haydnshaughnessy/2013/05/27/bittorrent-sync-is-a-dropbox-killer-or-maybe-much-more-than-that/"",""id"":""5775648"",""homepage"":false},{""source"":""washingtonpost.com"",""comments"":82,""date"":1369678428,""link_text"":""Is Silicon Valley only interested in the problems of twentysomethings?"",""points"":141,""submitter"":""sethbannon"",""link"":""http://www.washingtonpost.com/blogs/wonkblog/wp/2013/05/27/is-silicon-valley-only-interested-in-the-problems-of-twentysomethings/"",""id"":""5775573"",""homepage"":false},{""link_text"":""Open Source Game Clones"",""link"":""http://osgameclones.com"",""source"":""osgameclones.com"",""points"":206,""comments"":80,""submitter"":""piranha"",""date"":1369678275,""id"":""5775714"",""homepage"":false},{""source"":""steveapp.com"",""comments"":15,""date"":1369677027,""link_text"":""Show HN: Rapid prototyping and development tool for web and mobile apps"",""points"":21,""submitter"":""sorich87"",""link"":""http://www.steveapp.com/demo"",""id"":""5775615"",""homepage"":false},{""link_text"":""Google blimps will carry wireless signal across Africa"",""link"":""http://www.wired.co.uk/news/archive/2013-05/26/google-blimps"",""source"":""wired.co.uk"",""points"":195,""comments"":114,""submitter"":""richeyrw"",""date"":1369674859,""id"":""5775324"",""homepage"":false},{""source"":""catarse.me"",""comments"":9,""date"":1369674229,""link_text"":""45-year-old man living in hospital since age 1 is directing a 3D animation"",""points"":48,""submitter"":""sanoli"",""link"":""http://catarse.me/pt/leca"",""id"":""5775183"",""homepage"":false},{""link_text"":""Haxe 3 Released"",""link"":""http://haxe.org/download"",""source"":""haxe.org"",""points"":107,""comments"":33,""submitter"":""raphinou"",""date"":1369673773,""id"":""5775237"",""homepage"":false},{""source"":""washingtonpost.com"",""comments"":142,""date"":1369673620,""link_text"":""U.S. is the only developed country with no guaranteed paid vacation or holidays"",""points"":62,""submitter"":""sethbannon"",""link"":""http://www.washingtonpost.com/blogs/wonkblog/wp/2013/05/27/america-is-the-only-rich-country-that-doesnt-guarantee-paid-vacation-or-holidays/"",""id"":""5775250"",""homepage"":false},{""source"":""techradar.com"",""comments"":23,""date"":1369673466,""link_text"":""Judge agrees that Apple was complicit in fixing price of e-books"",""points"":31,""submitter"":""jamesbritt"",""link"":""http://www.techradar.com/news/computing/apple/judge-agrees-that-apple-was-complicit-in-fixing-price-of-e-books-1154204"",""id"":""5775291"",""homepage"":false},{""source"":""happybearsoftware.com"",""comments"":167,""date"":1369673466,""link_text"":""You are dangerously bad at cryptography"",""points"":257,""submitter"":""alinajaf"",""link"":""http://happybearsoftware.com/you-are-dangerously-bad-at-cryptography.html"",""id"":""5775165"",""homepage"":false},{""link_text"":""Ask HN: Review my startup. https://www.tesla.im"",""link"":""http://news.ycombinator.com/item?id=5775232"",""points"":10,""comments"":14,""submitter"":""yeleti"",""date"":1369672520,""dead"":""true"",""id"":""5775232"",""homepage"":false},{""source"":""neckbeardrepublic.com"",""comments"":2,""date"":1369672520,""link_text"":""CLI Applications With Docopt and Packaging [video]"",""points"":7,""submitter"":""ahammad"",""link"":""https://www.neckbeardrepublic.com/screencasts/cli-applications-and-packaging-part-1"",""id"":""5775227"",""homepage"":false},{""source"":""clever-cloud.com"",""comments"":0,""date"":1369670816,""link_text"":""The PostgreSQL JDBC Driver is now PgBouncer compliant "",""points"":4,""submitter"":""waxzce"",""link"":""http://engineering.clever-cloud.com/java/2013/05/27/pgjdbc-now-pgbouncer-compliant.html"",""id"":""5775103"",""homepage"":false},{""source"":""codinghorror.com"",""comments"":13,""date"":1369670359,""link_text"":""A Visual Explanation of SQL Joins (2007)"",""points"":106,""submitter"":""g3rald"",""link"":""http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html"",""id"":""5774918"",""homepage"":false},{""source"":""marketplace.org"",""comments"":4,""date"":1369670206,""link_text"":""Is vacation rental site Airbnb illegal?"",""points"":5,""submitter"":""sethbannon"",""link"":""http://www.marketplace.org/topics/tech/vacation-rental-site-airbnb-be-illegal"",""id"":""5774863"",""homepage"":false},{""link_text"":""Preparing a Mac laptop for your Grandma"",""link"":""http://blog.accursedware.com/nonagenarian-laptop/"",""source"":""accursedware.com"",""points"":72,""comments"":65,""submitter"":""talos"",""date"":1369669898,""id"":""5774892"",""homepage"":false},{""link_text"":""Ask HN: Favorite product question during development"",""link"":""http://news.ycombinator.com/item?id=5665895"",""points"":4,""comments"":null,""submitter"":""dustinlakin"",""date"":1369668816,""id"":""5665895"",""homepage"":false},{""link_text"":""How Email On Acid stole our work"",""link"":""http://stampready.net/blog/digital-theft/index.html"",""source"":""stampready.net"",""points"":59,""comments"":60,""submitter"":""f4stjack"",""date"":1369666953,""id"":""5774757"",""homepage"":false},{""link_text"":""Rundown of the newest features in C++11 [pdf]"",""link"":""http://dl.dropboxusercontent.com/u/13100941/C%2B%2B11.pdf"",""source"":""dropboxusercontent.com"",""points"":64,""comments"":36,""submitter"":""octo_t"",""date"":1369666338,""id"":""5774714"",""homepage"":false},{""source"":""wired.com"",""comments"":9,""date"":1369665850,""link_text"":""An Autistic Way of Thinking Powers Silicon Valley"",""points"":9,""submitter"":""youngerdryas"",""link"":""http://www.wired.com/opinion/2013/05/silicon-valley-coders-and-autism-and-asperbergers-maybe-its-a-new-kind-of-design-thinking"",""id"":""5774686"",""homepage"":false},{""source"":""sky.com"",""comments"":64,""date"":1369665241,""link_text"":""Google Boss: We Follow The Law On Tax"",""points"":15,""submitter"":""ceekays"",""link"":""http://news.sky.com/story/1094264/google-boss-we-follow-the-law-on-tax"",""id"":""5774588"",""homepage"":false},{""source"":""howtogeek.com"",""comments"":1,""date"":1369665241,""link_text"":""Forget Windows Media Center: Use a Free Linux-Based Media Center System"",""points"":4,""submitter"":""aynlaplant"",""link"":""http://www.howtogeek.com/163376/forget-windows-media-center-use-a-free-linux-based-media-center-system/"",""id"":""5774532"",""homepage"":false},{""source"":""codemancers.com"",""comments"":1,""date"":1369664786,""link_text"":""Profile Ruby 2.0 apps using DTrace - part 2"",""points"":21,""submitter"":""gnufied"",""link"":""http://crypt.codemancers.com/posts/2013-05-04-profile-ruby-2-dot-0-apps-using-dtrace-part-2/"",""id"":""5774599"",""homepage"":false},{""link_text"":""German railways to test anti-graffiti drones"",""link"":""http://www.bbc.co.uk/news/world-europe-22678580"",""source"":""bbc.co.uk"",""points"":33,""comments"":48,""submitter"":""DiabloD3"",""date"":1369664786,""id"":""5774575"",""homepage"":false},{""link_text"":""Wintersmith – a flexible static site generator"",""link"":""http://wintersmith.io/"",""source"":""wintersmith.io"",""points"":58,""comments"":51,""submitter"":""rwinn"",""date"":1369664331,""id"":""5774554"",""homepage"":false},{""source"":""bloomberg.com"",""comments"":20,""date"":1369662413,""link_text"":""Apple’s Ive Seen Risking iOS 7 Delay on Software Overhaul"",""points"":20,""submitter"":""followmylee"",""link"":""http://www.bloomberg.com/news/2013-05-01/apple-s-ive-seen-risking-ios-7-delay-on-software-overhaul-tech.html"",""id"":""5774536"",""homepage"":false},{""link_text"":""Metrics Monday: Google Analytics live today at 15:00 UTC "",""link"":""https://plus.google.com/events/conra0cb1h0fn9kvbbt6i1iemog"",""source"":""plus.google.com"",""points"":4,""comments"":5,""submitter"":""dirtyaura"",""date"":1369661622,""id"":""5774473"",""homepage"":false},{""source"":""supplementsos.com"",""comments"":80,""date"":1369660709,""link_text"":""How to eat healthily for £1 per day – version 0.2"",""points"":94,""submitter"":""lenazegher"",""link"":""http://supplementsos.com/blog/eat-healthily-for-1-pound-per-day-version-0-2/"",""id"":""5774447"",""homepage"":false},{""link_text"":""Our Recurring Payment Pricing Was Rejected"",""link"":""http://jerviswhitley.com/why-should-i-pay-for-your-saas/"",""source"":""jerviswhitley.com"",""points"":69,""comments"":75,""submitter"":""jdwhit2"",""date"":1369659644,""id"":""5774424"",""homepage"":false},{""link_text"":""How to Get Started as a Consultant"",""link"":""http://mashable.com/2013/05/26/consultant/"",""source"":""mashable.com"",""points"":7,""comments"":0,""submitter"":""dmoney67"",""date"":1369659039,""id"":""5774421"",""homepage"":false},{""link_text"":""Google Java Annotations Gallery"",""link"":""https://code.google.com/p/gag/"",""source"":""code.google.com"",""points"":152,""comments"":29,""submitter"":""javinpaul"",""date"":1369658403,""id"":""5774388"",""homepage"":false},{""source"":""stackoverflow.com"",""comments"":4,""date"":1369657945,""link_text"":""What is the *correct* JSON content type?"",""points"":15,""submitter"":""andysandimas"",""link"":""http://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type"",""id"":""5774361"",""homepage"":false},{""link_text"":""Ask HN: What Freelancer site do you recommend?"",""link"":""http://news.ycombinator.com/item?id=5774303"",""points"":140,""comments"":132,""submitter"":""10dpd"",""date"":1369656216,""id"":""5774303"",""homepage"":false},{""source"":""nytimes.com"",""comments"":1,""date"":1369654433,""link_text"":""Computer Network Piecing Together a Jigsaw of Jewish Lore"",""points"":17,""submitter"":""elemeno"",""link"":""http://www.nytimes.com/2013/05/27/world/middleeast/computers-piecing-together-jigsaw-of-jewish-lore.html?pagewanted=all"",""id"":""5774175"",""homepage"":false},{""link_text"":""Is It Possible to Be Both a Founder and a Daddy?"",""link"":""http://www.techinasia.com/be-both-a-founder-and-a-daddy/"",""source"":""techinasia.com"",""points"":37,""comments"":42,""submitter"":""vincvinc"",""date"":1369654281,""id"":""5774216"",""homepage"":false},{""source"":""namecheap.com"",""comments"":32,""date"":1369652994,""link_text"":""Namecheap $0.98 com/net per year coupon"",""points"":37,""submitter"":""websirnik"",""link"":""https://www.namecheap.com/deals/20000-retweets-0.98-domains-june-2013.aspx"",""id"":""5774138"",""homepage"":false},{""source"":""vice.com"",""comments"":184,""date"":1369648031,""link_text"":""This Is What Winning Looks Like – Afghanistan War Diary"",""points"":238,""submitter"":""yk"",""link"":""http://www.vice.com/vice-news/this-is-what-winning-looks-like-full-length"",""id"":""5773909"",""homepage"":false},{""source"":""mozilla.org"",""comments"":1,""date"":1369646908,""link_text"":""ECMAScript 6 support in Firefox"",""points"":5,""submitter"":""tbassetto"",""link"":""https://developer.mozilla.org/en-US/docs/JavaScript/ECMAScript_6_support_in_Mozilla"",""id"":""5773873"",""homepage"":false},{""link_text"":""OOScss architecture for Rails apps."",""link"":""http://blog.netguru.co/post/51462181876"",""source"":""netguru.co"",""points"":22,""comments"":4,""submitter"":""dawidwu"",""date"":1369646395,""id"":""5773995"",""homepage"":false},{""source"":""archive.org"",""comments"":4,""date"":1369645784,""link_text"":""Brainfilling Curves - a Fractal Bestiary (online book)"",""points"":17,""submitter"":""ohwp"",""link"":""http://archive.org/stream/BrainfillingCurves-AFractalBestiary/BrainFilling"",""id"":""5773877"",""homepage"":false},{""link_text"":""Tell your customers whats new with your service automatically"",""link"":""http://whatsnew.io"",""source"":""whatsnew.io"",""points"":31,""comments"":5,""submitter"":""BuddhaSource"",""date"":1369643758,""id"":""5773895"",""homepage"":false},{""link_text"":""How to run Android Apps on Google Glass"",""link"":""http://songz.quora.com/How-to-run-Android-Apps-on-Google-Glass"",""source"":""quora.com"",""points"":4,""comments"":0,""submitter"":""fersho311"",""date"":1369642832,""id"":""5773882"",""homepage"":false},{""source"":""swageroo.com"",""comments"":61,""date"":1369642529,""link_text"":""Interfaces in Go make it hard to navigate code"",""points"":39,""submitter"":""randartie"",""link"":""http://www.swageroo.com/wordpress/googles-go-and-implicit-interface-declaration/?h"",""id"":""5773810"",""homepage"":false},{""source"":""successfulsoftware.net"",""comments"":99,""date"":1369642378,""link_text"":""The declining profitability of Google Adwords"",""points"":134,""submitter"":""hermitcrab"",""link"":""http://successfulsoftware.net/2013/05/26/the-declining-profitability-of-google-adwords/"",""id"":""5773831"",""homepage"":false},{""link_text"":""uWSGI 1.9.11 released with PyPy support"",""link"":""http://uwsgi-docs.readthedocs.org/en/latest/PyPy.html"",""source"":""readthedocs.org"",""points"":48,""comments"":9,""submitter"":""kevinburke"",""date"":1369641067,""id"":""5773708"",""homepage"":false},{""source"":""forbes.com"",""comments"":5,""date"":1369639462,""link_text"":""Next gen consoles in a rut"",""points"":5,""submitter"":""Maven911"",""link"":""http://www.forbes.com/sites/insertcoin/2013/05/25/xbox-one-ps4-or-wii-u-were-in-a-console-rut/"",""id"":""5773693"",""homepage"":false},{""source"":""businessinsider.com"",""comments"":22,""date"":1369635518,""link_text"":""Amazon starts to do Grocery Delivery"",""points"":37,""submitter"":""cdvonstinkpot"",""link"":""http://www.businessinsider.com/amazon-and-grocery-delivery-2013-5"",""id"":""5773586"",""homepage"":false},{""source"":""stuff.co.nz"",""comments"":15,""date"":1369635185,""link_text"":""Inside of an atom snapped"",""points"":42,""submitter"":""jonbaer"",""link"":""http://www.stuff.co.nz/science/8721115/Inside-of-an-atom-snapped/"",""id"":""5773599"",""homepage"":false},{""link_text"":""Scientists Build Record-Setting Metamaterial Flat Lens"",""link"":""http://www.nist.gov/cnst/20130523_flatlens.cfm"",""source"":""nist.gov"",""points"":5,""comments"":1,""submitter"":""ChuckMcM"",""date"":1369634122,""id"":""5773512"",""homepage"":false},{""source"":""nikic.github.io"",""comments"":15,""date"":1369634122,""link_text"":""The true power of regular expression"",""points"":70,""submitter"":""RohitS5"",""link"":""http://nikic.github.io/2012/06/15/The-true-power-of-regular-expressions.html"",""id"":""5773438"",""homepage"":false},{""source"":""atlasobscura.com"",""comments"":30,""date"":1369632139,""link_text"":""The Skeleton Lake of Roopkund, India"",""points"":129,""submitter"":""aasarava"",""link"":""http://www.atlasobscura.com/places/the-skeleton-lake-of-roopkund-india"",""id"":""5773397"",""homepage"":false},{""source"":""djangoproject.com"",""comments"":35,""date"":1369630411,""link_text"":""Django 1.6 alpha 1 released"",""points"":118,""submitter"":""Lightning"",""link"":""https://www.djangoproject.com/weblog/2013/may/26/django-16-alpha-1/"",""id"":""5773413"",""homepage"":false},{""source"":""wikipedia.org"",""comments"":42,""date"":1369630411,""link_text"":""List of unsolved problems in computer science"",""points"":92,""submitter"":""jonbaer"",""link"":""http://en.wikipedia.org/wiki/List_of_unsolved_problems_in_computer_science"",""id"":""5773312"",""homepage"":false},{""link_text"":""What if Google starts doing it?"",""link"":""http://bhashkar.me/w/2013/05/27/what-if-google-starts-doing-it/"",""source"":""bhashkar.me"",""points"":6,""comments"":7,""submitter"":""bhashkarsharma"",""date"":1369628529,""id"":""5773333"",""homepage"":false},{""link_text"":""MailChimp Hit's 1MM Users"",""link"":""http://home.wistia.com/medias/d06d8d073a"",""source"":""wistia.com"",""points"":8,""comments"":1,""submitter"":""Brian_Curliss"",""date"":1369627091,""id"":""5773337"",""homepage"":false},{""source"":""ricostacruz.com"",""comments"":6,""date"":1369625481,""link_text"":""Flatdoc is the fastest way to create a site for your open source project."",""points"":21,""submitter"":""marksteve"",""link"":""http://ricostacruz.com/flatdoc/"",""id"":""5773228"",""homepage"":false},{""source"":""theatlantic.com"",""comments"":77,""date"":1369625027,""link_text"":""Chinese DIY Inventions"",""points"":227,""submitter"":""jnazario"",""link"":""http://www.theatlantic.com/infocus/2013/05/chinese-diy-inventions/100511?re&utm_source=buffer&&utm_content=buffer3141e"",""id"":""5773267"",""homepage"":false},{""source"":""theglobeandmail.com"",""comments"":50,""date"":1369624875,""link_text"":""Quebec Cracks Down on Airbnb"",""points"":52,""submitter"":""mattm"",""link"":""http://www.theglobeandmail.com/news/national/quebec-cracks-down-on-airbnb/article12162984/"",""id"":""5773117"",""homepage"":false},{""source"":""mashable.com"",""comments"":16,""date"":1369624542,""link_text"":""Yahoo's Design Chief Leaves Company"",""points"":35,""submitter"":""followmylee"",""link"":""http://mashable.com/2013/05/25/yahoos-design-chief-leaves-the-company/"",""id"":""5773109"",""homepage"":false},{""source"":""crowdtilt.com"",""comments"":2,""date"":1369623119,""link_text"":""Free Cammy Dee"",""points"":8,""submitter"":""baku"",""link"":""https://www.crowdtilt.com/campaigns/free-cammy-dee-hes-an-18yearold-rapper-trapped-in-prison-without-bail-for-a-facebook-post"",""id"":""5773200"",""homepage"":false},{""source"":""boingboing.net"",""comments"":256,""date"":1369619777,""link_text"":""US entertainment industry to Congress: make it legal for us to deploy rootkits"",""points"":591,""submitter"":""Suraj-Sun"",""link"":""http://boingboing.net/2013/05/26/us-entertainment-industry-to-c.html"",""id"":""5773020"",""homepage"":false},{""source"":""twitter.com"",""comments"":65,""date"":1369618476,""link_text"":""37 YC Companies have valuations of or been sold for at least $40 Million"",""points"":113,""submitter"":""mlinsey"",""link"":""https://twitter.com/paulg/status/338805881972080641"",""id"":""5772972"",""homepage"":false},{""source"":""arstechnica.com"",""comments"":11,""date"":1369617840,""link_text"":""If everything fades into the background, you may have a high IQ"",""points"":15,""submitter"":""akandiah"",""link"":""http://arstechnica.com/science/2013/05/if-everything-fades-into-the-background-you-may-have-a-high-iq/"",""id"":""5772875"",""homepage"":false},{""link_text"":""Finishing"",""link"":""http://www.avc.com/a_vc/2013/05/finishing.html"",""source"":""avc.com"",""points"":62,""comments"":10,""submitter"":""unstoppableted"",""date"":1369617688,""id"":""5772954"",""homepage"":false},{""source"":""suntimes.com"",""comments"":5,""date"":1369617356,""link_text"":""Pre-served prison sentence"",""points"":10,""submitter"":""jostmey"",""link"":""http://www.suntimes.com/news/crime/20320674-418/time-stands-still-in-cook-county-jail-for-some-inmates.html"",""id"":""5772901"",""homepage"":false},{""source"":""kennberg.com"",""comments"":30,""date"":1369615875,""link_text"":""Show HN: Got my Pebble and built a seven minute workout watchapp today"",""points"":96,""submitter"":""akennberg"",""link"":""http://kennberg.com/7min/"",""id"":""5772932"",""homepage"":false},{""link_text"":""Responding to peer review"",""link"":""http://matt.might.net/articles/peer-review-rebuttals/"",""source"":""might.net"",""points"":10,""comments"":0,""submitter"":""joeyespo"",""date"":1369614966,""id"":""5772525"",""homepage"":false},{""source"":""digitaljournal.com"",""comments"":30,""date"":1369614179,""link_text"":""Scientists find woman who sees 99 million more colors than others (2012)"",""points"":61,""submitter"":""colinprince"",""link"":""http://www.digitaljournal.com/article/326976"",""id"":""5772862"",""homepage"":false}]"
40fc5e8ceebd01b94308be180c359aa898961782,17625247,[ref](http://stackoverflow.com/a/17625247)
8c53298c3526039c733a5eb479f3ff5aa4b942b8,2432799,   This solution was found from [StackOverflow](http://stackoverflow.com/a/2432799) thanks to
1f41da144e495f012253b6a7082844044a301d60,27043933,* [http://stackoverflow.com/questions/27043933/install-failed-duplicate-permission-c2d-message](http://stackoverflow.com/questions/27043933/install-failed-duplicate-permission-c2d-message)
9e103cd76aea52dcf9400b396a8e8c5d3340947f,1197928, * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
fefb8a967c8a376ad2105ff700c198b748181602,17694143,"      ""url"":""http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer"","
0fe831cdab5fb8107da08ef650308679365acd6c,728360,// http://stackoverflow.com/questions/728360/how-do-i-correctly-clone-a-javascript-object
2bb9667431e23b93d5eb19039cf75d9c3d31896c,109383,        // http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java
efeaf1ef652c68d1c56914065301f6bd2f99973a,14852393,08:52 < faceleg> http://stackoverflow.com/a/14852393/187954
4dc8a58352d61d1357a3db695caa2c2c1c081f4d,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
ccd4836caa55c7e1b2122e48880234a86aefdc5d,40123073,            // better variation of: http://stackoverflow.com/a/40123073/5002496
3f4973a462e31acb54a4d1ee0491e8307735db93,31531797,        # Courtesy of http://stackoverflow.com/a/31531797/4759433
d0ff7269af6f1e614942bc70e6ec2d71e2c9f658,7422072,        // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
97acf49514fdf3a0d756a0f75899730814a9075e,22747272,"	module.exports = ""(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\""function\""&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\""Cannot find module '\""+o+\""'\"");throw f.code=\""MODULE_NOT_FOUND\"",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\""function\""&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n(function (process){\nmodule.exports = process.env.COV\n  ? require('./lib-cov/mocha')\n  : require('./lib/mocha');\n\n}).call(this,require('_process'))\n},{\""./lib-cov/mocha\"":undefined,\""./lib/mocha\"":14,\""_process\"":51}],2:[function(require,module,exports){\n/* eslint-disable no-unused-vars */\nmodule.exports = function(type) {\n  return function() {};\n};\n\n},{}],3:[function(require,module,exports){\n/**\n * Module exports.\n */\n\nexports.EventEmitter = EventEmitter;\n\n/**\n * Object#hasOwnProperty reference.\n */\nvar objToString = Object.prototype.toString;\n\n/**\n * Check if a value is an array.\n *\n * @api private\n * @param {*} val The value to test.\n * @return {boolean} true if the value is a boolean, otherwise false.\n */\nfunction isArray(val) {\n  return objToString.call(val) === '[object Array]';\n}\n\n/**\n * Event emitter constructor.\n *\n * @api public\n */\nfunction EventEmitter() {}\n\n/**\n * Add a listener.\n *\n * @api public\n * @param {string} name Event name.\n * @param {Function} fn Event handler.\n * @return {EventEmitter} Emitter instance.\n */\nEventEmitter.prototype.on = function(name, fn) {\n  if (!this.$events) {\n    this.$events = {};\n  }\n\n  if (!this.$events[name]) {\n    this.$events[name] = fn;\n  } else if (isArray(this.$events[name])) {\n    this.$events[name].push(fn);\n  } else {\n    this.$events[name] = [this.$events[name], fn];\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n/**\n * Adds a volatile listener.\n *\n * @api public\n * @param {string} name Event name.\n * @param {Function} fn Event handler.\n * @return {EventEmitter} Emitter instance.\n */\nEventEmitter.prototype.once = function(name, fn) {\n  var self = this;\n\n  function on() {\n    self.removeListener(name, on);\n    fn.apply(this, arguments);\n  }\n\n  on.listener = fn;\n  this.on(name, on);\n\n  return this;\n};\n\n/**\n * Remove a listener.\n *\n * @api public\n * @param {string} name Event name.\n * @param {Function} fn Event handler.\n * @return {EventEmitter} Emitter instance.\n */\nEventEmitter.prototype.removeListener = function(name, fn) {\n  if (this.$events && this.$events[name]) {\n    var list = this.$events[name];\n\n    if (isArray(list)) {\n      var pos = -1;\n\n      for (var i = 0, l = list.length; i < l; i++) {\n        if (list[i] === fn || (list[i].listener && list[i].listener === fn)) {\n          pos = i;\n          break;\n        }\n      }\n\n      if (pos < 0) {\n        return this;\n      }\n\n      list.splice(pos, 1);\n\n      if (!list.length) {\n        delete this.$events[name];\n      }\n    } else if (list === fn || (list.listener && list.listener === fn)) {\n      delete this.$events[name];\n    }\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners for an event.\n *\n * @api public\n * @param {string} name Event name.\n * @return {EventEmitter} Emitter instance.\n */\nEventEmitter.prototype.removeAllListeners = function(name) {\n  if (name === undefined) {\n    this.$events = {};\n    return this;\n  }\n\n  if (this.$events && this.$events[name]) {\n    this.$events[name] = null;\n  }\n\n  return this;\n};\n\n/**\n * Get all listeners for a given event.\n *\n * @api public\n * @param {string} name Event name.\n * @return {EventEmitter} Emitter instance.\n */\nEventEmitter.prototype.listeners = function(name) {\n  if (!this.$events) {\n    this.$events = {};\n  }\n\n  if (!this.$events[name]) {\n    this.$events[name] = [];\n  }\n\n  if (!isArray(this.$events[name])) {\n    this.$events[name] = [this.$events[name]];\n  }\n\n  return this.$events[name];\n};\n\n/**\n * Emit an event.\n *\n * @api public\n * @param {string} name Event name.\n * @return {boolean} true if at least one handler was invoked, else false.\n */\nEventEmitter.prototype.emit = function(name) {\n  if (!this.$events) {\n    return false;\n  }\n\n  var handler = this.$events[name];\n\n  if (!handler) {\n    return false;\n  }\n\n  var args = Array.prototype.slice.call(arguments, 1);\n\n  if (typeof handler === 'function') {\n    handler.apply(this, args);\n  } else if (isArray(handler)) {\n    var listeners = handler.slice();\n\n    for (var i = 0, l = listeners.length; i < l; i++) {\n      listeners[i].apply(this, args);\n    }\n  } else {\n    return false;\n  }\n\n  return true;\n};\n\n},{}],4:[function(require,module,exports){\n/**\n * Expose `Progress`.\n */\n\nmodule.exports = Progress;\n\n/**\n * Initialize a new `Progress` indicator.\n */\nfunction Progress() {\n  this.percent = 0;\n  this.size(0);\n  this.fontSize(11);\n  this.font('helvetica, arial, sans-serif');\n}\n\n/**\n * Set progress size to `size`.\n *\n * @api public\n * @param {number} size\n * @return {Progress} Progress instance.\n */\nProgress.prototype.size = function(size) {\n  this._size = size;\n  return this;\n};\n\n/**\n * Set text to `text`.\n *\n * @api public\n * @param {string} text\n * @return {Progress} Progress instance.\n */\nProgress.prototype.text = function(text) {\n  this._text = text;\n  return this;\n};\n\n/**\n * Set font size to `size`.\n *\n * @api public\n * @param {number} size\n * @return {Progress} Progress instance.\n */\nProgress.prototype.fontSize = function(size) {\n  this._fontSize = size;\n  return this;\n};\n\n/**\n * Set font to `family`.\n *\n * @param {string} family\n * @return {Progress} Progress instance.\n */\nProgress.prototype.font = function(family) {\n  this._font = family;\n  return this;\n};\n\n/**\n * Update percentage to `n`.\n *\n * @param {number} n\n * @return {Progress} Progress instance.\n */\nProgress.prototype.update = function(n) {\n  this.percent = n;\n  return this;\n};\n\n/**\n * Draw on `ctx`.\n *\n * @param {CanvasRenderingContext2d} ctx\n * @return {Progress} Progress instance.\n */\nProgress.prototype.draw = function(ctx) {\n  try {\n    var percent = Math.min(this.percent, 100);\n    var size = this._size;\n    var half = size / 2;\n    var x = half;\n    var y = half;\n    var rad = half - 1;\n    var fontSize = this._fontSize;\n\n    ctx.font = fontSize + 'px ' + this._font;\n\n    var angle = Math.PI * 2 * (percent / 100);\n    ctx.clearRect(0, 0, size, size);\n\n    // outer circle\n    ctx.strokeStyle = '#9f9f9f';\n    ctx.beginPath();\n    ctx.arc(x, y, rad, 0, angle, false);\n    ctx.stroke();\n\n    // inner circle\n    ctx.strokeStyle = '#eee';\n    ctx.beginPath();\n    ctx.arc(x, y, rad - 1, 0, angle, true);\n    ctx.stroke();\n\n    // text\n    var text = this._text || (percent | 0) + '%';\n    var w = ctx.measureText(text).width;\n\n    ctx.fillText(text, x - w / 2 + 1, y + fontSize / 2 - 1);\n  } catch (err) {\n    // don't fail if we can't render progress\n  }\n  return this;\n};\n\n},{}],5:[function(require,module,exports){\n(function (global){\nexports.isatty = function isatty() {\n  return true;\n};\n\nexports.getWindowSize = function getWindowSize() {\n  if ('innerHeight' in global) {\n    return [global.innerHeight, global.innerWidth];\n  }\n  // In a Web Worker, the DOM Window is not available.\n  return [640, 480];\n};\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{}],6:[function(require,module,exports){\n/**\n * Expose `Context`.\n */\n\nmodule.exports = Context;\n\n/**\n * Initialize a new `Context`.\n *\n * @api private\n */\nfunction Context() {}\n\n/**\n * Set or get the context `Runnable` to `runnable`.\n *\n * @api private\n * @param {Runnable} runnable\n * @return {Context}\n */\nContext.prototype.runnable = function(runnable) {\n  if (!arguments.length) {\n    return this._runnable;\n  }\n  this.test = this._runnable = runnable;\n  return this;\n};\n\n/**\n * Set test timeout `ms`.\n *\n * @api private\n * @param {number} ms\n * @return {Context} self\n */\nContext.prototype.timeout = function(ms) {\n  if (!arguments.length) {\n    return this.runnable().timeout();\n  }\n  this.runnable().timeout(ms);\n  return this;\n};\n\n/**\n * Set test timeout `enabled`.\n *\n * @api private\n * @param {boolean} enabled\n * @return {Context} self\n */\nContext.prototype.enableTimeouts = function(enabled) {\n  this.runnable().enableTimeouts(enabled);\n  return this;\n};\n\n/**\n * Set test slowness threshold `ms`.\n *\n * @api private\n * @param {number} ms\n * @return {Context} self\n */\nContext.prototype.slow = function(ms) {\n  this.runnable().slow(ms);\n  return this;\n};\n\n/**\n * Mark a test as skipped.\n *\n * @api private\n * @return {Context} self\n */\nContext.prototype.skip = function() {\n  this.runnable().skip();\n  return this;\n};\n\n/**\n * Inspect the context void of `._runnable`.\n *\n * @api private\n * @return {string}\n */\nContext.prototype.inspect = function() {\n  return JSON.stringify(this, function(key, val) {\n    return key === 'runnable' || key === 'test' ? undefined : val;\n  }, 2);\n};\n\n},{}],7:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Runnable = require('./runnable');\nvar inherits = require('./utils').inherits;\n\n/**\n * Expose `Hook`.\n */\n\nmodule.exports = Hook;\n\n/**\n * Initialize a new `Hook` with the given `title` and callback `fn`.\n *\n * @param {String} title\n * @param {Function} fn\n * @api private\n */\nfunction Hook(title, fn) {\n  Runnable.call(this, title, fn);\n  this.type = 'hook';\n}\n\n/**\n * Inherit from `Runnable.prototype`.\n */\ninherits(Hook, Runnable);\n\n/**\n * Get or set the test `err`.\n *\n * @param {Error} err\n * @return {Error}\n * @api public\n */\nHook.prototype.error = function(err) {\n  if (!arguments.length) {\n    err = this._error;\n    this._error = null;\n    return err;\n  }\n\n  this._error = err;\n};\n\n},{\""./runnable\"":35,\""./utils\"":39}],8:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Suite = require('../suite');\nvar Test = require('../test');\nvar escapeRe = require('escape-string-regexp');\n\n/**\n * BDD-style interface:\n *\n *      describe('Array', function() {\n *        describe('#indexOf()', function() {\n *          it('should return -1 when not present', function() {\n *            // ...\n *          });\n *\n *          it('should return the index when present', function() {\n *            // ...\n *          });\n *        });\n *      });\n *\n * @param {Suite} suite Root suite.\n */\nmodule.exports = function(suite) {\n  var suites = [suite];\n\n  suite.on('pre-require', function(context, file, mocha) {\n    var common = require('./common')(suites, context);\n\n    context.before = common.before;\n    context.after = common.after;\n    context.beforeEach = common.beforeEach;\n    context.afterEach = common.afterEach;\n    context.run = mocha.options.delay && common.runWithSuite(suite);\n    /**\n     * Describe a \""suite\"" with the given `title`\n     * and callback `fn` containing nested suites\n     * and/or tests.\n     */\n\n    context.describe = context.context = function(title, fn) {\n      var suite = Suite.create(suites[0], title);\n      suite.file = file;\n      suites.unshift(suite);\n      fn.call(suite);\n      suites.shift();\n      return suite;\n    };\n\n    /**\n     * Pending describe.\n     */\n\n    context.xdescribe = context.xcontext = context.describe.skip = function(title, fn) {\n      var suite = Suite.create(suites[0], title);\n      suite.pending = true;\n      suites.unshift(suite);\n      fn.call(suite);\n      suites.shift();\n    };\n\n    /**\n     * Exclusive suite.\n     */\n\n    context.describe.only = function(title, fn) {\n      var suite = context.describe(title, fn);\n      mocha.grep(suite.fullTitle());\n      return suite;\n    };\n\n    /**\n     * Describe a specification or test-case\n     * with the given `title` and callback `fn`\n     * acting as a thunk.\n     */\n\n    context.it = context.specify = function(title, fn) {\n      var suite = suites[0];\n      if (suite.pending) {\n        fn = null;\n      }\n      var test = new Test(title, fn);\n      test.file = file;\n      suite.addTest(test);\n      return test;\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.it.only = function(title, fn) {\n      var test = context.it(title, fn);\n      var reString = '^' + escapeRe(test.fullTitle()) + '$';\n      mocha.grep(new RegExp(reString));\n      return test;\n    };\n\n    /**\n     * Pending test case.\n     */\n\n    context.xit = context.xspecify = context.it.skip = function(title) {\n      context.it(title);\n    };\n  });\n};\n\n},{\""../suite\"":37,\""../test\"":38,\""./common\"":9,\""escape-string-regexp\"":68}],9:[function(require,module,exports){\n'use strict';\n\n/**\n * Functions common to more than one interface.\n *\n * @param {Suite[]} suites\n * @param {Context} context\n * @return {Object} An object containing common functions.\n */\nmodule.exports = function(suites, context) {\n  return {\n    /**\n     * This is only present if flag --delay is passed into Mocha. It triggers\n     * root suite execution.\n     *\n     * @param {Suite} suite The root wuite.\n     * @return {Function} A function which runs the root suite\n     */\n    runWithSuite: function runWithSuite(suite) {\n      return function run() {\n        suite.run();\n      };\n    },\n\n    /**\n     * Execute before running tests.\n     *\n     * @param {string} name\n     * @param {Function} fn\n     */\n    before: function(name, fn) {\n      suites[0].beforeAll(name, fn);\n    },\n\n    /**\n     * Execute after running tests.\n     *\n     * @param {string} name\n     * @param {Function} fn\n     */\n    after: function(name, fn) {\n      suites[0].afterAll(name, fn);\n    },\n\n    /**\n     * Execute before each test case.\n     *\n     * @param {string} name\n     * @param {Function} fn\n     */\n    beforeEach: function(name, fn) {\n      suites[0].beforeEach(name, fn);\n    },\n\n    /**\n     * Execute after each test case.\n     *\n     * @param {string} name\n     * @param {Function} fn\n     */\n    afterEach: function(name, fn) {\n      suites[0].afterEach(name, fn);\n    },\n\n    test: {\n      /**\n       * Pending test case.\n       *\n       * @param {string} title\n       */\n      skip: function(title) {\n        context.test(title);\n      }\n    }\n  };\n};\n\n},{}],10:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Suite = require('../suite');\nvar Test = require('../test');\n\n/**\n * TDD-style interface:\n *\n *     exports.Array = {\n *       '#indexOf()': {\n *         'should return -1 when the value is not present': function() {\n *\n *         },\n *\n *         'should return the correct index when the value is present': function() {\n *\n *         }\n *       }\n *     };\n *\n * @param {Suite} suite Root suite.\n */\nmodule.exports = function(suite) {\n  var suites = [suite];\n\n  suite.on('require', visit);\n\n  function visit(obj, file) {\n    var suite;\n    for (var key in obj) {\n      if (typeof obj[key] === 'function') {\n        var fn = obj[key];\n        switch (key) {\n          case 'before':\n            suites[0].beforeAll(fn);\n            break;\n          case 'after':\n            suites[0].afterAll(fn);\n            break;\n          case 'beforeEach':\n            suites[0].beforeEach(fn);\n            break;\n          case 'afterEach':\n            suites[0].afterEach(fn);\n            break;\n          default:\n            var test = new Test(key, fn);\n            test.file = file;\n            suites[0].addTest(test);\n        }\n      } else {\n        suite = Suite.create(suites[0], key);\n        suites.unshift(suite);\n        visit(obj[key]);\n        suites.shift();\n      }\n    }\n  }\n};\n\n},{\""../suite\"":37,\""../test\"":38}],11:[function(require,module,exports){\nexports.bdd = require('./bdd');\nexports.tdd = require('./tdd');\nexports.qunit = require('./qunit');\nexports.exports = require('./exports');\n\n},{\""./bdd\"":8,\""./exports\"":10,\""./qunit\"":12,\""./tdd\"":13}],12:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Suite = require('../suite');\nvar Test = require('../test');\nvar escapeRe = require('escape-string-regexp');\n\n/**\n * QUnit-style interface:\n *\n *     suite('Array');\n *\n *     test('#length', function() {\n *       var arr = [1,2,3];\n *       ok(arr.length == 3);\n *     });\n *\n *     test('#indexOf()', function() {\n *       var arr = [1,2,3];\n *       ok(arr.indexOf(1) == 0);\n *       ok(arr.indexOf(2) == 1);\n *       ok(arr.indexOf(3) == 2);\n *     });\n *\n *     suite('String');\n *\n *     test('#length', function() {\n *       ok('foo'.length == 3);\n *     });\n *\n * @param {Suite} suite Root suite.\n */\nmodule.exports = function(suite) {\n  var suites = [suite];\n\n  suite.on('pre-require', function(context, file, mocha) {\n    var common = require('./common')(suites, context);\n\n    context.before = common.before;\n    context.after = common.after;\n    context.beforeEach = common.beforeEach;\n    context.afterEach = common.afterEach;\n    context.run = mocha.options.delay && common.runWithSuite(suite);\n    /**\n     * Describe a \""suite\"" with the given `title`.\n     */\n\n    context.suite = function(title) {\n      if (suites.length > 1) {\n        suites.shift();\n      }\n      var suite = Suite.create(suites[0], title);\n      suite.file = file;\n      suites.unshift(suite);\n      return suite;\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.suite.only = function(title, fn) {\n      var suite = context.suite(title, fn);\n      mocha.grep(suite.fullTitle());\n    };\n\n    /**\n     * Describe a specification or test-case\n     * with the given `title` and callback `fn`\n     * acting as a thunk.\n     */\n\n    context.test = function(title, fn) {\n      var test = new Test(title, fn);\n      test.file = file;\n      suites[0].addTest(test);\n      return test;\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.test.only = function(title, fn) {\n      var test = context.test(title, fn);\n      var reString = '^' + escapeRe(test.fullTitle()) + '$';\n      mocha.grep(new RegExp(reString));\n    };\n\n    context.test.skip = common.test.skip;\n  });\n};\n\n},{\""../suite\"":37,\""../test\"":38,\""./common\"":9,\""escape-string-regexp\"":68}],13:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Suite = require('../suite');\nvar Test = require('../test');\nvar escapeRe = require('escape-string-regexp');\n\n/**\n * TDD-style interface:\n *\n *      suite('Array', function() {\n *        suite('#indexOf()', function() {\n *          suiteSetup(function() {\n *\n *          });\n *\n *          test('should return -1 when not present', function() {\n *\n *          });\n *\n *          test('should return the index when present', function() {\n *\n *          });\n *\n *          suiteTeardown(function() {\n *\n *          });\n *        });\n *      });\n *\n * @param {Suite} suite Root suite.\n */\nmodule.exports = function(suite) {\n  var suites = [suite];\n\n  suite.on('pre-require', function(context, file, mocha) {\n    var common = require('./common')(suites, context);\n\n    context.setup = common.beforeEach;\n    context.teardown = common.afterEach;\n    context.suiteSetup = common.before;\n    context.suiteTeardown = common.after;\n    context.run = mocha.options.delay && common.runWithSuite(suite);\n\n    /**\n     * Describe a \""suite\"" with the given `title` and callback `fn` containing\n     * nested suites and/or tests.\n     */\n    context.suite = function(title, fn) {\n      var suite = Suite.create(suites[0], title);\n      suite.file = file;\n      suites.unshift(suite);\n      fn.call(suite);\n      suites.shift();\n      return suite;\n    };\n\n    /**\n     * Pending suite.\n     */\n    context.suite.skip = function(title, fn) {\n      var suite = Suite.create(suites[0], title);\n      suite.pending = true;\n      suites.unshift(suite);\n      fn.call(suite);\n      suites.shift();\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n    context.suite.only = function(title, fn) {\n      var suite = context.suite(title, fn);\n      mocha.grep(suite.fullTitle());\n    };\n\n    /**\n     * Describe a specification or test-case with the given `title` and\n     * callback `fn` acting as a thunk.\n     */\n    context.test = function(title, fn) {\n      var suite = suites[0];\n      if (suite.pending) {\n        fn = null;\n      }\n      var test = new Test(title, fn);\n      test.file = file;\n      suite.addTest(test);\n      return test;\n    };\n\n    /**\n     * Exclusive test-case.\n     */\n\n    context.test.only = function(title, fn) {\n      var test = context.test(title, fn);\n      var reString = '^' + escapeRe(test.fullTitle()) + '$';\n      mocha.grep(new RegExp(reString));\n    };\n\n    context.test.skip = common.test.skip;\n  });\n};\n\n},{\""../suite\"":37,\""../test\"":38,\""./common\"":9,\""escape-string-regexp\"":68}],14:[function(require,module,exports){\n(function (process,global,__dirname){\n/*!\n * mocha\n * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar escapeRe = require('escape-string-regexp');\nvar path = require('path');\nvar reporters = require('./reporters');\nvar utils = require('./utils');\n\n/**\n * Expose `Mocha`.\n */\n\nexports = module.exports = Mocha;\n\n/**\n * To require local UIs and reporters when running in node.\n */\n\nif (!process.browser) {\n  var cwd = process.cwd();\n  module.paths.push(cwd, path.join(cwd, 'node_modules'));\n}\n\n/**\n * Expose internals.\n */\n\nexports.utils = utils;\nexports.interfaces = require('./interfaces');\nexports.reporters = reporters;\nexports.Runnable = require('./runnable');\nexports.Context = require('./context');\nexports.Runner = require('./runner');\nexports.Suite = require('./suite');\nexports.Hook = require('./hook');\nexports.Test = require('./test');\n\n/**\n * Return image `name` path.\n *\n * @api private\n * @param {string} name\n * @return {string}\n */\nfunction image(name) {\n  return path.join(__dirname, '../images', name + '.png');\n}\n\n/**\n * Set up mocha with `options`.\n *\n * Options:\n *\n *   - `ui` name \""bdd\"", \""tdd\"", \""exports\"" etc\n *   - `reporter` reporter instance, defaults to `mocha.reporters.spec`\n *   - `globals` array of accepted globals\n *   - `timeout` timeout in milliseconds\n *   - `bail` bail on the first test failure\n *   - `slow` milliseconds to wait before considering a test slow\n *   - `ignoreLeaks` ignore global leaks\n *   - `fullTrace` display the full stack-trace on failing\n *   - `grep` string or regexp to filter tests with\n *\n * @param {Object} options\n * @api public\n */\nfunction Mocha(options) {\n  options = options || {};\n  this.files = [];\n  this.options = options;\n  if (options.grep) {\n    this.grep(new RegExp(options.grep));\n  }\n  if (options.fgrep) {\n    this.grep(options.fgrep);\n  }\n  this.suite = new exports.Suite('', new exports.Context());\n  this.ui(options.ui);\n  this.bail(options.bail);\n  this.reporter(options.reporter, options.reporterOptions);\n  if (typeof options.timeout !== 'undefined' && options.timeout !== null) {\n    this.timeout(options.timeout);\n  }\n  this.useColors(options.useColors);\n  if (options.enableTimeouts !== null) {\n    this.enableTimeouts(options.enableTimeouts);\n  }\n  if (options.slow) {\n    this.slow(options.slow);\n  }\n\n  this.suite.on('pre-require', function(context) {\n    exports.afterEach = context.afterEach || context.teardown;\n    exports.after = context.after || context.suiteTeardown;\n    exports.beforeEach = context.beforeEach || context.setup;\n    exports.before = context.before || context.suiteSetup;\n    exports.describe = context.describe || context.suite;\n    exports.it = context.it || context.test;\n    exports.setup = context.setup || context.beforeEach;\n    exports.suiteSetup = context.suiteSetup || context.before;\n    exports.suiteTeardown = context.suiteTeardown || context.after;\n    exports.suite = context.suite || context.describe;\n    exports.teardown = context.teardown || context.afterEach;\n    exports.test = context.test || context.it;\n    exports.run = context.run;\n  });\n}\n\n/**\n * Enable or disable bailing on the first failure.\n *\n * @api public\n * @param {boolean} [bail]\n */\nMocha.prototype.bail = function(bail) {\n  if (!arguments.length) {\n    bail = true;\n  }\n  this.suite.bail(bail);\n  return this;\n};\n\n/**\n * Add test `file`.\n *\n * @api public\n * @param {string} file\n */\nMocha.prototype.addFile = function(file) {\n  this.files.push(file);\n  return this;\n};\n\n/**\n * Set reporter to `reporter`, defaults to \""spec\"".\n *\n * @param {String|Function} reporter name or constructor\n * @param {Object} reporterOptions optional options\n * @api public\n * @param {string|Function} reporter name or constructor\n * @param {Object} reporterOptions optional options\n */\nMocha.prototype.reporter = function(reporter, reporterOptions) {\n  if (typeof reporter === 'function') {\n    this._reporter = reporter;\n  } else {\n    reporter = reporter || 'spec';\n    var _reporter;\n    // Try to load a built-in reporter.\n    if (reporters[reporter]) {\n      _reporter = reporters[reporter];\n    }\n    // Try to load reporters from process.cwd() and node_modules\n    if (!_reporter) {\n      try {\n        _reporter = require(reporter);\n      } catch (err) {\n        err.message.indexOf('Cannot find module') !== -1\n          ? console.warn('\""' + reporter + '\"" reporter not found')\n          : console.warn('\""' + reporter + '\"" reporter blew up with error:\\n' + err.stack);\n      }\n    }\n    if (!_reporter && reporter === 'teamcity') {\n      console.warn('The Teamcity reporter was moved to a package named '\n        + 'mocha-teamcity-reporter '\n        + '(https://npmjs.org/package/mocha-teamcity-reporter).');\n    }\n    if (!_reporter) {\n      throw new Error('invalid reporter \""' + reporter + '\""');\n    }\n    this._reporter = _reporter;\n  }\n  this.options.reporterOptions = reporterOptions;\n  return this;\n};\n\n/**\n * Set test UI `name`, defaults to \""bdd\"".\n *\n * @api public\n * @param {string} bdd\n */\nMocha.prototype.ui = function(name) {\n  name = name || 'bdd';\n  this._ui = exports.interfaces[name];\n  if (!this._ui) {\n    try {\n      this._ui = require(name);\n    } catch (err) {\n      throw new Error('invalid interface \""' + name + '\""');\n    }\n  }\n  this._ui = this._ui(this.suite);\n  return this;\n};\n\n/**\n * Load registered files.\n *\n * @api private\n */\nMocha.prototype.loadFiles = function(fn) {\n  var self = this;\n  var suite = this.suite;\n  var pending = this.files.length;\n  this.files.forEach(function(file) {\n    file = path.resolve(file);\n    suite.emit('pre-require', global, file, self);\n    suite.emit('require', require(file), file, self);\n    suite.emit('post-require', global, file, self);\n    --pending || (fn && fn());\n  });\n};\n\n/**\n * Enable growl support.\n *\n * @api private\n */\nMocha.prototype._growl = function(runner, reporter) {\n  var notify = require('growl');\n\n  runner.on('end', function() {\n    var stats = reporter.stats;\n    if (stats.failures) {\n      var msg = stats.failures + ' of ' + runner.total + ' tests failed';\n      notify(msg, { name: 'mocha', title: 'Failed', image: image('error') });\n    } else {\n      notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', {\n        name: 'mocha',\n        title: 'Passed',\n        image: image('ok')\n      });\n    }\n  });\n};\n\n/**\n * Add regexp to grep, if `re` is a string it is escaped.\n *\n * @param {RegExp|String} re\n * @return {Mocha}\n * @api public\n * @param {RegExp|string} re\n * @return {Mocha}\n */\nMocha.prototype.grep = function(re) {\n  this.options.grep = typeof re === 'string' ? new RegExp(escapeRe(re)) : re;\n  return this;\n};\n\n/**\n * Invert `.grep()` matches.\n *\n * @return {Mocha}\n * @api public\n */\nMocha.prototype.invert = function() {\n  this.options.invert = true;\n  return this;\n};\n\n/**\n * Ignore global leaks.\n *\n * @param {Boolean} ignore\n * @return {Mocha}\n * @api public\n * @param {boolean} ignore\n * @return {Mocha}\n */\nMocha.prototype.ignoreLeaks = function(ignore) {\n  this.options.ignoreLeaks = Boolean(ignore);\n  return this;\n};\n\n/**\n * Enable global leak checking.\n *\n * @return {Mocha}\n * @api public\n */\nMocha.prototype.checkLeaks = function() {\n  this.options.ignoreLeaks = false;\n  return this;\n};\n\n/**\n * Display long stack-trace on failing\n *\n * @return {Mocha}\n * @api public\n */\nMocha.prototype.fullTrace = function() {\n  this.options.fullStackTrace = true;\n  return this;\n};\n\n/**\n * Enable growl support.\n *\n * @return {Mocha}\n * @api public\n */\nMocha.prototype.growl = function() {\n  this.options.growl = true;\n  return this;\n};\n\n/**\n * Ignore `globals` array or string.\n *\n * @param {Array|String} globals\n * @return {Mocha}\n * @api public\n * @param {Array|string} globals\n * @return {Mocha}\n */\nMocha.prototype.globals = function(globals) {\n  this.options.globals = (this.options.globals || []).concat(globals);\n  return this;\n};\n\n/**\n * Emit color output.\n *\n * @param {Boolean} colors\n * @return {Mocha}\n * @api public\n * @param {boolean} colors\n * @return {Mocha}\n */\nMocha.prototype.useColors = function(colors) {\n  if (colors !== undefined) {\n    this.options.useColors = colors;\n  }\n  return this;\n};\n\n/**\n * Use inline diffs rather than +/-.\n *\n * @param {Boolean} inlineDiffs\n * @return {Mocha}\n * @api public\n * @param {boolean} inlineDiffs\n * @return {Mocha}\n */\nMocha.prototype.useInlineDiffs = function(inlineDiffs) {\n  this.options.useInlineDiffs = inlineDiffs !== undefined && inlineDiffs;\n  return this;\n};\n\n/**\n * Set the timeout in milliseconds.\n *\n * @param {Number} timeout\n * @return {Mocha}\n * @api public\n * @param {number} timeout\n * @return {Mocha}\n */\nMocha.prototype.timeout = function(timeout) {\n  this.suite.timeout(timeout);\n  return this;\n};\n\n/**\n * Set slowness threshold in milliseconds.\n *\n * @param {Number} slow\n * @return {Mocha}\n * @api public\n * @param {number} slow\n * @return {Mocha}\n */\nMocha.prototype.slow = function(slow) {\n  this.suite.slow(slow);\n  return this;\n};\n\n/**\n * Enable timeouts.\n *\n * @param {Boolean} enabled\n * @return {Mocha}\n * @api public\n * @param {boolean} enabled\n * @return {Mocha}\n */\nMocha.prototype.enableTimeouts = function(enabled) {\n  this.suite.enableTimeouts(arguments.length && enabled !== undefined ? enabled : true);\n  return this;\n};\n\n/**\n * Makes all tests async (accepting a callback)\n *\n * @return {Mocha}\n * @api public\n */\nMocha.prototype.asyncOnly = function() {\n  this.options.asyncOnly = true;\n  return this;\n};\n\n/**\n * Disable syntax highlighting (in browser).\n *\n * @api public\n */\nMocha.prototype.noHighlighting = function() {\n  this.options.noHighlighting = true;\n  return this;\n};\n\n/**\n * Enable uncaught errors to propagate (in browser).\n *\n * @return {Mocha}\n * @api public\n */\nMocha.prototype.allowUncaught = function() {\n  this.options.allowUncaught = true;\n  return this;\n};\n\n/**\n * Delay root suite execution.\n * @returns {Mocha}\n */\nMocha.prototype.delay = function delay() {\n  this.options.delay = true;\n  return this;\n};\n\n/**\n * Run tests and invoke `fn()` when complete.\n *\n * @api public\n * @param {Function} fn\n * @return {Runner}\n */\nMocha.prototype.run = function(fn) {\n  if (this.files.length) {\n    this.loadFiles();\n  }\n  var suite = this.suite;\n  var options = this.options;\n  options.files = this.files;\n  var runner = new exports.Runner(suite, options.delay);\n  var reporter = new this._reporter(runner, options);\n  runner.ignoreLeaks = options.ignoreLeaks !== false;\n  runner.fullStackTrace = options.fullStackTrace;\n  runner.asyncOnly = options.asyncOnly;\n  runner.allowUncaught = options.allowUncaught;\n  if (options.grep) {\n    runner.grep(options.grep, options.invert);\n  }\n  if (options.globals) {\n    runner.globals(options.globals);\n  }\n  if (options.growl) {\n    this._growl(runner, reporter);\n  }\n  if (options.useColors !== undefined) {\n    exports.reporters.Base.useColors = options.useColors;\n  }\n  exports.reporters.Base.inlineDiffs = options.useInlineDiffs;\n\n  function done(failures) {\n    if (reporter.done) {\n      reporter.done(failures, fn);\n    } else {\n      fn && fn(failures);\n    }\n  }\n\n  return runner.run(done);\n};\n\n}).call(this,require('_process'),typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {},\""/lib\"")\n},{\""./context\"":6,\""./hook\"":7,\""./interfaces\"":11,\""./reporters\"":22,\""./runnable\"":35,\""./runner\"":36,\""./suite\"":37,\""./test\"":38,\""./utils\"":39,\""_process\"":51,\""escape-string-regexp\"":68,\""growl\"":69,\""path\"":41}],15:[function(require,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @api public\n * @param {string|number} val\n * @param {Object} options\n * @return {string|number}\n */\nmodule.exports = function(val, options) {\n  options = options || {};\n  if (typeof val === 'string') {\n    return parse(val);\n  }\n  // https://github.com/mochajs/mocha/pull/1035\n  return options['long'] ? longFormat(val) : shortFormat(val);\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @api private\n * @param {string} str\n * @return {number}\n */\nfunction parse(str) {\n  var match = (/^((?:\\d+)?\\.?\\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i).exec(str);\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 's':\n      return n * s;\n    case 'ms':\n      return n;\n    default:\n      // No default case\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @api private\n * @param {number} ms\n * @return {string}\n */\nfunction shortFormat(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @api private\n * @param {number} ms\n * @return {string}\n */\nfunction longFormat(ms) {\n  return plural(ms, d, 'day')\n    || plural(ms, h, 'hour')\n    || plural(ms, m, 'minute')\n    || plural(ms, s, 'second')\n    || ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n *\n * @api private\n * @param {number} ms\n * @param {number} n\n * @param {string} name\n */\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\n},{}],16:[function(require,module,exports){\n\n/**\n * Expose `Pending`.\n */\n\nmodule.exports = Pending;\n\n/**\n * Initialize a new `Pending` error with the given message.\n *\n * @param {string} message\n */\nfunction Pending(message) {\n  this.message = message;\n}\n\n},{}],17:[function(require,module,exports){\n(function (process,global){\n/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar diff = require('diff');\nvar ms = require('../ms');\nvar utils = require('../utils');\nvar supportsColor = process.browser ? null : require('supports-color');\n\n/**\n * Expose `Base`.\n */\n\nexports = module.exports = Base;\n\n/**\n * Save timer references to avoid Sinon interfering.\n * See: https://github.com/mochajs/mocha/issues/237\n */\n\n/* eslint-disable no-unused-vars, no-native-reassign */\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar setInterval = global.setInterval;\nvar clearTimeout = global.clearTimeout;\nvar clearInterval = global.clearInterval;\n/* eslint-enable no-unused-vars, no-native-reassign */\n\n/**\n * Check if both stdio streams are associated with a tty.\n */\n\nvar isatty = tty.isatty(1) && tty.isatty(2);\n\n/**\n * Enable coloring by default, except in the browser interface.\n */\n\nexports.useColors = !process.browser && (supportsColor || (process.env.MOCHA_COLORS !== undefined));\n\n/**\n * Inline diffs instead of +/-\n */\n\nexports.inlineDiffs = false;\n\n/**\n * Default color map.\n */\n\nexports.colors = {\n  pass: 90,\n  fail: 31,\n  'bright pass': 92,\n  'bright fail': 91,\n  'bright yellow': 93,\n  pending: 36,\n  suite: 0,\n  'error title': 0,\n  'error message': 31,\n  'error stack': 90,\n  checkmark: 32,\n  fast: 90,\n  medium: 33,\n  slow: 31,\n  green: 32,\n  light: 90,\n  'diff gutter': 90,\n  'diff added': 32,\n  'diff removed': 31\n};\n\n/**\n * Default symbol map.\n */\n\nexports.symbols = {\n  ok: '✓',\n  err: '✖',\n  dot: '․'\n};\n\n// With node.js on Windows: use symbols available in terminal default fonts\nif (process.platform === 'win32') {\n  exports.symbols.ok = '\\u221A';\n  exports.symbols.err = '\\u00D7';\n  exports.symbols.dot = '.';\n}\n\n/**\n * Color `str` with the given `type`,\n * allowing colors to be disabled,\n * as well as user-defined color\n * schemes.\n *\n * @param {string} type\n * @param {string} str\n * @return {string}\n * @api private\n */\nvar color = exports.color = function(type, str) {\n  if (!exports.useColors) {\n    return String(str);\n  }\n  return '\\u001b[' + exports.colors[type] + 'm' + str + '\\u001b[0m';\n};\n\n/**\n * Expose term window size, with some defaults for when stderr is not a tty.\n */\n\nexports.window = {\n  width: 75\n};\n\nif (isatty) {\n  exports.window.width = process.stdout.getWindowSize\n      ? process.stdout.getWindowSize(1)[0]\n      : tty.getWindowSize()[1];\n}\n\n/**\n * Expose some basic cursor interactions that are common among reporters.\n */\n\nexports.cursor = {\n  hide: function() {\n    isatty && process.stdout.write('\\u001b[?25l');\n  },\n\n  show: function() {\n    isatty && process.stdout.write('\\u001b[?25h');\n  },\n\n  deleteLine: function() {\n    isatty && process.stdout.write('\\u001b[2K');\n  },\n\n  beginningOfLine: function() {\n    isatty && process.stdout.write('\\u001b[0G');\n  },\n\n  CR: function() {\n    if (isatty) {\n      exports.cursor.deleteLine();\n      exports.cursor.beginningOfLine();\n    } else {\n      process.stdout.write('\\r');\n    }\n  }\n};\n\n/**\n * Outut the given `failures` as a list.\n *\n * @param {Array} failures\n * @api public\n */\n\nexports.list = function(failures) {\n  console.log();\n  failures.forEach(function(test, i) {\n    // format\n    var fmt = color('error title', '  %s) %s:\\n')\n      + color('error message', '     %s')\n      + color('error stack', '\\n%s\\n');\n\n    // msg\n    var msg;\n    var err = test.err;\n    var message;\n    if (err.message) {\n      message = err.message;\n    } else if (typeof err.inspect === 'function') {\n      message = err.inspect() + '';\n    } else {\n      message = '';\n    }\n    var stack = err.stack || message;\n    var index = stack.indexOf(message);\n    var actual = err.actual;\n    var expected = err.expected;\n    var escape = true;\n\n    if (index === -1) {\n      msg = message;\n    } else {\n      index += message.length;\n      msg = stack.slice(0, index);\n      // remove msg from stack\n      stack = stack.slice(index + 1);\n    }\n\n    // uncaught\n    if (err.uncaught) {\n      msg = 'Uncaught ' + msg;\n    }\n    // explicitly show diff\n    if (err.showDiff !== false && sameType(actual, expected) && expected !== undefined) {\n      escape = false;\n      if (!(utils.isString(actual) && utils.isString(expected))) {\n        err.actual = actual = utils.stringify(actual);\n        err.expected = expected = utils.stringify(expected);\n      }\n\n      fmt = color('error title', '  %s) %s:\\n%s') + color('error stack', '\\n%s\\n');\n      var match = message.match(/^([^:]+): expected/);\n      msg = '\\n      ' + color('error message', match ? match[1] : msg);\n\n      if (exports.inlineDiffs) {\n        msg += inlineDiff(err, escape);\n      } else {\n        msg += unifiedDiff(err, escape);\n      }\n    }\n\n    // indent stack trace\n    stack = stack.replace(/^/gm, '  ');\n\n    console.log(fmt, (i + 1), test.fullTitle(), msg, stack);\n  });\n};\n\n/**\n * Initialize a new `Base` reporter.\n *\n * All other reporters generally\n * inherit from this reporter, providing\n * stats such as test duration, number\n * of tests passed / failed etc.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction Base(runner) {\n  var stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 };\n  var failures = this.failures = [];\n\n  if (!runner) {\n    return;\n  }\n  this.runner = runner;\n\n  runner.stats = stats;\n\n  runner.on('start', function() {\n    stats.start = new Date();\n  });\n\n  runner.on('suite', function(suite) {\n    stats.suites = stats.suites || 0;\n    suite.root || stats.suites++;\n  });\n\n  runner.on('test end', function() {\n    stats.tests = stats.tests || 0;\n    stats.tests++;\n  });\n\n  runner.on('pass', function(test) {\n    stats.passes = stats.passes || 0;\n\n    if (test.duration > test.slow()) {\n      test.speed = 'slow';\n    } else if (test.duration > test.slow() / 2) {\n      test.speed = 'medium';\n    } else {\n      test.speed = 'fast';\n    }\n\n    stats.passes++;\n  });\n\n  runner.on('fail', function(test, err) {\n    stats.failures = stats.failures || 0;\n    stats.failures++;\n    test.err = err;\n    failures.push(test);\n  });\n\n  runner.on('end', function() {\n    stats.end = new Date();\n    stats.duration = new Date() - stats.start;\n  });\n\n  runner.on('pending', function() {\n    stats.pending++;\n  });\n}\n\n/**\n * Output common epilogue used by many of\n * the bundled reporters.\n *\n * @api public\n */\nBase.prototype.epilogue = function() {\n  var stats = this.stats;\n  var fmt;\n\n  console.log();\n\n  // passes\n  fmt = color('bright pass', ' ')\n    + color('green', ' %d passing')\n    + color('light', ' (%s)');\n\n  console.log(fmt,\n    stats.passes || 0,\n    ms(stats.duration));\n\n  // pending\n  if (stats.pending) {\n    fmt = color('pending', ' ')\n      + color('pending', ' %d pending');\n\n    console.log(fmt, stats.pending);\n  }\n\n  // failures\n  if (stats.failures) {\n    fmt = color('fail', '  %d failing');\n\n    console.log(fmt, stats.failures);\n\n    Base.list(this.failures);\n    console.log();\n  }\n\n  console.log();\n};\n\n/**\n * Pad the given `str` to `len`.\n *\n * @api private\n * @param {string} str\n * @param {string} len\n * @return {string}\n */\nfunction pad(str, len) {\n  str = String(str);\n  return Array(len - str.length + 1).join(' ') + str;\n}\n\n/**\n * Returns an inline diff between 2 strings with coloured ANSI output\n *\n * @api private\n * @param {Error} err with actual/expected\n * @param {boolean} escape\n * @return {string} Diff\n */\nfunction inlineDiff(err, escape) {\n  var msg = errorDiff(err, 'WordsWithSpace', escape);\n\n  // linenos\n  var lines = msg.split('\\n');\n  if (lines.length > 4) {\n    var width = String(lines.length).length;\n    msg = lines.map(function(str, i) {\n      return pad(++i, width) + ' |' + ' ' + str;\n    }).join('\\n');\n  }\n\n  // legend\n  msg = '\\n'\n    + color('diff removed', 'actual')\n    + ' '\n    + color('diff added', 'expected')\n    + '\\n\\n'\n    + msg\n    + '\\n';\n\n  // indent\n  msg = msg.replace(/^/gm, '      ');\n  return msg;\n}\n\n/**\n * Returns a unified diff between two strings.\n *\n * @api private\n * @param {Error} err with actual/expected\n * @param {boolean} escape\n * @return {string} The diff.\n */\nfunction unifiedDiff(err, escape) {\n  var indent = '      ';\n  function cleanUp(line) {\n    if (escape) {\n      line = escapeInvisibles(line);\n    }\n    if (line[0] === '+') {\n      return indent + colorLines('diff added', line);\n    }\n    if (line[0] === '-') {\n      return indent + colorLines('diff removed', line);\n    }\n    if (line.match(/\\@\\@/)) {\n      return null;\n    }\n    if (line.match(/\\\\ No newline/)) {\n      return null;\n    }\n    return indent + line;\n  }\n  function notBlank(line) {\n    return typeof line !== 'undefined' && line !== null;\n  }\n  var msg = diff.createPatch('string', err.actual, err.expected);\n  var lines = msg.split('\\n').splice(4);\n  return '\\n      '\n    + colorLines('diff added', '+ expected') + ' '\n    + colorLines('diff removed', '- actual')\n    + '\\n\\n'\n    + lines.map(cleanUp).filter(notBlank).join('\\n');\n}\n\n/**\n * Return a character diff for `err`.\n *\n * @api private\n * @param {Error} err\n * @param {string} type\n * @param {boolean} escape\n * @return {string}\n */\nfunction errorDiff(err, type, escape) {\n  var actual = escape ? escapeInvisibles(err.actual) : err.actual;\n  var expected = escape ? escapeInvisibles(err.expected) : err.expected;\n  return diff['diff' + type](actual, expected).map(function(str) {\n    if (str.added) {\n      return colorLines('diff added', str.value);\n    }\n    if (str.removed) {\n      return colorLines('diff removed', str.value);\n    }\n    return str.value;\n  }).join('');\n}\n\n/**\n * Returns a string with all invisible characters in plain text\n *\n * @api private\n * @param {string} line\n * @return {string}\n */\nfunction escapeInvisibles(line) {\n  return line.replace(/\\t/g, '<tab>')\n    .replace(/\\r/g, '<CR>')\n    .replace(/\\n/g, '<LF>\\n');\n}\n\n/**\n * Color lines for `str`, using the color `name`.\n *\n * @api private\n * @param {string} name\n * @param {string} str\n * @return {string}\n */\nfunction colorLines(name, str) {\n  return str.split('\\n').map(function(str) {\n    return color(name, str);\n  }).join('\\n');\n}\n\n/**\n * Object#toString reference.\n */\nvar objToString = Object.prototype.toString;\n\n/**\n * Check that a / b have the same type.\n *\n * @api private\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nfunction sameType(a, b) {\n  return objToString.call(a) === objToString.call(b);\n}\n\n}).call(this,require('_process'),typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""../ms\"":15,\""../utils\"":39,\""_process\"":51,\""diff\"":67,\""supports-color\"":41,\""tty\"":5}],18:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar utils = require('../utils');\n\n/**\n * Expose `Doc`.\n */\n\nexports = module.exports = Doc;\n\n/**\n * Initialize a new `Doc` reporter.\n *\n * @param {Runner} runner\n * @api public\n */\nfunction Doc(runner) {\n  Base.call(this, runner);\n\n  var indents = 2;\n\n  function indent() {\n    return Array(indents).join('  ');\n  }\n\n  runner.on('suite', function(suite) {\n    if (suite.root) {\n      return;\n    }\n    ++indents;\n    console.log('%s<section class=\""suite\"">', indent());\n    ++indents;\n    console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title));\n    console.log('%s<dl>', indent());\n  });\n\n  runner.on('suite end', function(suite) {\n    if (suite.root) {\n      return;\n    }\n    console.log('%s</dl>', indent());\n    --indents;\n    console.log('%s</section>', indent());\n    --indents;\n  });\n\n  runner.on('pass', function(test) {\n    console.log('%s  <dt>%s</dt>', indent(), utils.escape(test.title));\n    var code = utils.escape(utils.clean(test.fn.toString()));\n    console.log('%s  <dd><pre><code>%s</code></pre></dd>', indent(), code);\n  });\n\n  runner.on('fail', function(test, err) {\n    console.log('%s  <dt class=\""error\"">%s</dt>', indent(), utils.escape(test.title));\n    var code = utils.escape(utils.clean(test.fn.toString()));\n    console.log('%s  <dd class=\""error\""><pre><code>%s</code></pre></dd>', indent(), code);\n    console.log('%s  <dd class=\""error\"">%s</dd>', indent(), utils.escape(err));\n  });\n}\n\n},{\""../utils\"":39,\""./base\"":17}],19:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar color = Base.color;\n\n/**\n * Expose `Dot`.\n */\n\nexports = module.exports = Dot;\n\n/**\n * Initialize a new `Dot` matrix test reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction Dot(runner) {\n  Base.call(this, runner);\n\n  var self = this;\n  var width = Base.window.width * .75 | 0;\n  var n = -1;\n\n  runner.on('start', function() {\n    process.stdout.write('\\n');\n  });\n\n  runner.on('pending', function() {\n    if (++n % width === 0) {\n      process.stdout.write('\\n  ');\n    }\n    process.stdout.write(color('pending', Base.symbols.dot));\n  });\n\n  runner.on('pass', function(test) {\n    if (++n % width === 0) {\n      process.stdout.write('\\n  ');\n    }\n    if (test.speed === 'slow') {\n      process.stdout.write(color('bright yellow', Base.symbols.dot));\n    } else {\n      process.stdout.write(color(test.speed, Base.symbols.dot));\n    }\n  });\n\n  runner.on('fail', function() {\n    if (++n % width === 0) {\n      process.stdout.write('\\n  ');\n    }\n    process.stdout.write(color('fail', Base.symbols.dot));\n  });\n\n  runner.on('end', function() {\n    console.log();\n    self.epilogue();\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Dot, Base);\n\n}).call(this,require('_process'))\n},{\""../utils\"":39,\""./base\"":17,\""_process\"":51}],20:[function(require,module,exports){\n(function (process,__dirname){\n/**\n * Module dependencies.\n */\n\nvar JSONCov = require('./json-cov');\nvar readFileSync = require('fs').readFileSync;\nvar join = require('path').join;\n\n/**\n * Expose `HTMLCov`.\n */\n\nexports = module.exports = HTMLCov;\n\n/**\n * Initialize a new `JsCoverage` reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction HTMLCov(runner) {\n  var jade = require('jade');\n  var file = join(__dirname, '/templates/coverage.jade');\n  var str = readFileSync(file, 'utf8');\n  var fn = jade.compile(str, { filename: file });\n  var self = this;\n\n  JSONCov.call(this, runner, false);\n\n  runner.on('end', function() {\n    process.stdout.write(fn({\n      cov: self.cov,\n      coverageClass: coverageClass\n    }));\n  });\n}\n\n/**\n * Return coverage class for a given coverage percentage.\n *\n * @api private\n * @param {number} coveragePctg\n * @return {string}\n */\nfunction coverageClass(coveragePctg) {\n  if (coveragePctg >= 75) {\n    return 'high';\n  }\n  if (coveragePctg >= 50) {\n    return 'medium';\n  }\n  if (coveragePctg >= 25) {\n    return 'low';\n  }\n  return 'terrible';\n}\n\n}).call(this,require('_process'),\""/lib/reporters\"")\n},{\""./json-cov\"":23,\""_process\"":51,\""fs\"":41,\""jade\"":41,\""path\"":41}],21:[function(require,module,exports){\n(function (global){\n/* eslint-env browser */\n\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar utils = require('../utils');\nvar Progress = require('../browser/progress');\nvar escapeRe = require('escape-string-regexp');\nvar escape = utils.escape;\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\n/* eslint-disable no-unused-vars, no-native-reassign */\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar setInterval = global.setInterval;\nvar clearTimeout = global.clearTimeout;\nvar clearInterval = global.clearInterval;\n/* eslint-enable no-unused-vars, no-native-reassign */\n\n/**\n * Expose `HTML`.\n */\n\nexports = module.exports = HTML;\n\n/**\n * Stats template.\n */\n\nvar statsTemplate = '<ul id=\""mocha-stats\"">'\n  + '<li class=\""progress\""><canvas width=\""40\"" height=\""40\""></canvas></li>'\n  + '<li class=\""passes\""><a href=\""javascript:void(0);\"">passes:</a> <em>0</em></li>'\n  + '<li class=\""failures\""><a href=\""javascript:void(0);\"">failures:</a> <em>0</em></li>'\n  + '<li class=\""duration\"">duration: <em>0</em>s</li>'\n  + '</ul>';\n\n/**\n * Initialize a new `HTML` reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction HTML(runner) {\n  Base.call(this, runner);\n\n  var self = this;\n  var stats = this.stats;\n  var stat = fragment(statsTemplate);\n  var items = stat.getElementsByTagName('li');\n  var passes = items[1].getElementsByTagName('em')[0];\n  var passesLink = items[1].getElementsByTagName('a')[0];\n  var failures = items[2].getElementsByTagName('em')[0];\n  var failuresLink = items[2].getElementsByTagName('a')[0];\n  var duration = items[3].getElementsByTagName('em')[0];\n  var canvas = stat.getElementsByTagName('canvas')[0];\n  var report = fragment('<ul id=\""mocha-report\""></ul>');\n  var stack = [report];\n  var progress;\n  var ctx;\n  var root = document.getElementById('mocha');\n\n  if (canvas.getContext) {\n    var ratio = window.devicePixelRatio || 1;\n    canvas.style.width = canvas.width;\n    canvas.style.height = canvas.height;\n    canvas.width *= ratio;\n    canvas.height *= ratio;\n    ctx = canvas.getContext('2d');\n    ctx.scale(ratio, ratio);\n    progress = new Progress();\n  }\n\n  if (!root) {\n    return error('#mocha div missing, add it to your document');\n  }\n\n  // pass toggle\n  on(passesLink, 'click', function() {\n    unhide();\n    var name = (/pass/).test(report.className) ? '' : ' pass';\n    report.className = report.className.replace(/fail|pass/g, '') + name;\n    if (report.className.trim()) {\n      hideSuitesWithout('test pass');\n    }\n  });\n\n  // failure toggle\n  on(failuresLink, 'click', function() {\n    unhide();\n    var name = (/fail/).test(report.className) ? '' : ' fail';\n    report.className = report.className.replace(/fail|pass/g, '') + name;\n    if (report.className.trim()) {\n      hideSuitesWithout('test fail');\n    }\n  });\n\n  root.appendChild(stat);\n  root.appendChild(report);\n\n  if (progress) {\n    progress.size(40);\n  }\n\n  runner.on('suite', function(suite) {\n    if (suite.root) {\n      return;\n    }\n\n    // suite\n    var url = self.suiteURL(suite);\n    var el = fragment('<li class=\""suite\""><h1><a href=\""%s\"">%s</a></h1></li>', url, escape(suite.title));\n\n    // container\n    stack[0].appendChild(el);\n    stack.unshift(document.createElement('ul'));\n    el.appendChild(stack[0]);\n  });\n\n  runner.on('suite end', function(suite) {\n    if (suite.root) {\n      return;\n    }\n    stack.shift();\n  });\n\n  runner.on('fail', function(test) {\n    if (test.type === 'hook') {\n      runner.emit('test end', test);\n    }\n  });\n\n  runner.on('test end', function(test) {\n    // TODO: add to stats\n    var percent = stats.tests / this.total * 100 | 0;\n    if (progress) {\n      progress.update(percent).draw(ctx);\n    }\n\n    // update stats\n    var ms = new Date() - stats.start;\n    text(passes, stats.passes);\n    text(failures, stats.failures);\n    text(duration, (ms / 1000).toFixed(2));\n\n    // test\n    var el;\n    if (test.state === 'passed') {\n      var url = self.testURL(test);\n      el = fragment('<li class=\""test pass %e\""><h2>%e<span class=\""duration\"">%ems</span> <a href=\""%s\"" class=\""replay\"">‣</a></h2></li>', test.speed, test.title, test.duration, url);\n    } else if (test.pending) {\n      el = fragment('<li class=\""test pass pending\""><h2>%e</h2></li>', test.title);\n    } else {\n      el = fragment('<li class=\""test fail\""><h2>%e <a href=\""%e\"" class=\""replay\"">‣</a></h2></li>', test.title, self.testURL(test));\n      var stackString; // Note: Includes leading newline\n      var message = test.err.toString();\n\n      // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we\n      // check for the result of the stringifying.\n      if (message === '[object Error]') {\n        message = test.err.message;\n      }\n\n      if (test.err.stack) {\n        var indexOfMessage = test.err.stack.indexOf(test.err.message);\n        if (indexOfMessage === -1) {\n          stackString = test.err.stack;\n        } else {\n          stackString = test.err.stack.substr(test.err.message.length + indexOfMessage);\n        }\n      } else if (test.err.sourceURL && test.err.line !== undefined) {\n        // Safari doesn't give you a stack. Let's at least provide a source line.\n        stackString = '\\n(' + test.err.sourceURL + ':' + test.err.line + ')';\n      }\n\n      stackString = stackString || '';\n\n      if (test.err.htmlMessage && stackString) {\n        el.appendChild(fragment('<div class=\""html-error\"">%s\\n<pre class=\""error\"">%e</pre></div>', test.err.htmlMessage, stackString));\n      } else if (test.err.htmlMessage) {\n        el.appendChild(fragment('<div class=\""html-error\"">%s</div>', test.err.htmlMessage));\n      } else {\n        el.appendChild(fragment('<pre class=\""error\"">%e%e</pre>', message, stackString));\n      }\n    }\n\n    // toggle code\n    // TODO: defer\n    if (!test.pending) {\n      var h2 = el.getElementsByTagName('h2')[0];\n\n      on(h2, 'click', function() {\n        pre.style.display = pre.style.display === 'none' ? 'block' : 'none';\n      });\n\n      var pre = fragment('<pre><code>%e</code></pre>', utils.clean(test.fn.toString()));\n      el.appendChild(pre);\n      pre.style.display = 'none';\n    }\n\n    // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack.\n    if (stack[0]) {\n      stack[0].appendChild(el);\n    }\n  });\n}\n\n/**\n * Makes a URL, preserving querystring (\""search\"") parameters.\n *\n * @param {string} s\n * @return {string} A new URL.\n */\nfunction makeUrl(s) {\n  var search = window.location.search;\n\n  // Remove previous grep query parameter if present\n  if (search) {\n    search = search.replace(/[?&]grep=[^&\\s]*/g, '').replace(/^&/, '?');\n  }\n\n  return window.location.pathname + (search ? search + '&' : '?') + 'grep=' + encodeURIComponent(escapeRe(s));\n}\n\n/**\n * Provide suite URL.\n *\n * @param {Object} [suite]\n */\nHTML.prototype.suiteURL = function(suite) {\n  return makeUrl(suite.fullTitle());\n};\n\n/**\n * Provide test URL.\n *\n * @param {Object} [test]\n */\nHTML.prototype.testURL = function(test) {\n  return makeUrl(test.fullTitle());\n};\n\n/**\n * Display error `msg`.\n *\n * @param {string} msg\n */\nfunction error(msg) {\n  document.body.appendChild(fragment('<div id=\""mocha-error\"">%s</div>', msg));\n}\n\n/**\n * Return a DOM fragment from `html`.\n *\n * @param {string} html\n */\nfunction fragment(html) {\n  var args = arguments;\n  var div = document.createElement('div');\n  var i = 1;\n\n  div.innerHTML = html.replace(/%([se])/g, function(_, type) {\n    switch (type) {\n      case 's': return String(args[i++]);\n      case 'e': return escape(args[i++]);\n      // no default\n    }\n  });\n\n  return div.firstChild;\n}\n\n/**\n * Check for suites that do not have elements\n * with `classname`, and hide them.\n *\n * @param {text} classname\n */\nfunction hideSuitesWithout(classname) {\n  var suites = document.getElementsByClassName('suite');\n  for (var i = 0; i < suites.length; i++) {\n    var els = suites[i].getElementsByClassName(classname);\n    if (!els.length) {\n      suites[i].className += ' hidden';\n    }\n  }\n}\n\n/**\n * Unhide .hidden suites.\n */\nfunction unhide() {\n  var els = document.getElementsByClassName('suite hidden');\n  for (var i = 0; i < els.length; ++i) {\n    els[i].className = els[i].className.replace('suite hidden', 'suite');\n  }\n}\n\n/**\n * Set an element's text contents.\n *\n * @param {HTMLElement} el\n * @param {string} contents\n */\nfunction text(el, contents) {\n  if (el.textContent) {\n    el.textContent = contents;\n  } else {\n    el.innerText = contents;\n  }\n}\n\n/**\n * Listen on `event` with callback `fn`.\n */\nfunction on(el, event, fn) {\n  if (el.addEventListener) {\n    el.addEventListener(event, fn, false);\n  } else {\n    el.attachEvent('on' + event, fn);\n  }\n}\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""../browser/progress\"":4,\""../utils\"":39,\""./base\"":17,\""escape-string-regexp\"":68}],22:[function(require,module,exports){\n// Alias exports to a their normalized format Mocha#reporter to prevent a need\n// for dynamic (try/catch) requires, which Browserify doesn't handle.\nexports.Base = exports.base = require('./base');\nexports.Dot = exports.dot = require('./dot');\nexports.Doc = exports.doc = require('./doc');\nexports.TAP = exports.tap = require('./tap');\nexports.JSON = exports.json = require('./json');\nexports.HTML = exports.html = require('./html');\nexports.List = exports.list = require('./list');\nexports.Min = exports.min = require('./min');\nexports.Spec = exports.spec = require('./spec');\nexports.Nyan = exports.nyan = require('./nyan');\nexports.XUnit = exports.xunit = require('./xunit');\nexports.Markdown = exports.markdown = require('./markdown');\nexports.Progress = exports.progress = require('./progress');\nexports.Landing = exports.landing = require('./landing');\nexports.JSONCov = exports['json-cov'] = require('./json-cov');\nexports.HTMLCov = exports['html-cov'] = require('./html-cov');\nexports.JSONStream = exports['json-stream'] = require('./json-stream');\n\n},{\""./base\"":17,\""./doc\"":18,\""./dot\"":19,\""./html\"":21,\""./html-cov\"":20,\""./json\"":25,\""./json-cov\"":23,\""./json-stream\"":24,\""./landing\"":26,\""./list\"":27,\""./markdown\"":28,\""./min\"":29,\""./nyan\"":30,\""./progress\"":31,\""./spec\"":32,\""./tap\"":33,\""./xunit\"":34}],23:[function(require,module,exports){\n(function (process,global){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\n\n/**\n * Expose `JSONCov`.\n */\n\nexports = module.exports = JSONCov;\n\n/**\n * Initialize a new `JsCoverage` reporter.\n *\n * @api public\n * @param {Runner} runner\n * @param {boolean} output\n */\nfunction JSONCov(runner, output) {\n  Base.call(this, runner);\n\n  output = arguments.length === 1 || output;\n  var self = this;\n  var tests = [];\n  var failures = [];\n  var passes = [];\n\n  runner.on('test end', function(test) {\n    tests.push(test);\n  });\n\n  runner.on('pass', function(test) {\n    passes.push(test);\n  });\n\n  runner.on('fail', function(test) {\n    failures.push(test);\n  });\n\n  runner.on('end', function() {\n    var cov = global._$jscoverage || {};\n    var result = self.cov = map(cov);\n    result.stats = self.stats;\n    result.tests = tests.map(clean);\n    result.failures = failures.map(clean);\n    result.passes = passes.map(clean);\n    if (!output) {\n      return;\n    }\n    process.stdout.write(JSON.stringify(result, null, 2));\n  });\n}\n\n/**\n * Map jscoverage data to a JSON structure\n * suitable for reporting.\n *\n * @api private\n * @param {Object} cov\n * @return {Object}\n */\n\nfunction map(cov) {\n  var ret = {\n    instrumentation: 'node-jscoverage',\n    sloc: 0,\n    hits: 0,\n    misses: 0,\n    coverage: 0,\n    files: []\n  };\n\n  for (var filename in cov) {\n    if (Object.prototype.hasOwnProperty.call(cov, filename)) {\n      var data = coverage(filename, cov[filename]);\n      ret.files.push(data);\n      ret.hits += data.hits;\n      ret.misses += data.misses;\n      ret.sloc += data.sloc;\n    }\n  }\n\n  ret.files.sort(function(a, b) {\n    return a.filename.localeCompare(b.filename);\n  });\n\n  if (ret.sloc > 0) {\n    ret.coverage = (ret.hits / ret.sloc) * 100;\n  }\n\n  return ret;\n}\n\n/**\n * Map jscoverage data for a single source file\n * to a JSON structure suitable for reporting.\n *\n * @api private\n * @param {string} filename name of the source file\n * @param {Object} data jscoverage coverage data\n * @return {Object}\n */\nfunction coverage(filename, data) {\n  var ret = {\n    filename: filename,\n    coverage: 0,\n    hits: 0,\n    misses: 0,\n    sloc: 0,\n    source: {}\n  };\n\n  data.source.forEach(function(line, num) {\n    num++;\n\n    if (data[num] === 0) {\n      ret.misses++;\n      ret.sloc++;\n    } else if (data[num] !== undefined) {\n      ret.hits++;\n      ret.sloc++;\n    }\n\n    ret.source[num] = {\n      source: line,\n      coverage: data[num] === undefined ? '' : data[num]\n    };\n  });\n\n  ret.coverage = ret.hits / ret.sloc * 100;\n\n  return ret;\n}\n\n/**\n * Return a plain-object representation of `test`\n * free of cyclic properties etc.\n *\n * @api private\n * @param {Object} test\n * @return {Object}\n */\nfunction clean(test) {\n  return {\n    duration: test.duration,\n    fullTitle: test.fullTitle(),\n    title: test.title\n  };\n}\n\n}).call(this,require('_process'),typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""./base\"":17,\""_process\"":51}],24:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\n\n/**\n * Expose `List`.\n */\n\nexports = module.exports = List;\n\n/**\n * Initialize a new `List` test reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction List(runner) {\n  Base.call(this, runner);\n\n  var self = this;\n  var total = runner.total;\n\n  runner.on('start', function() {\n    console.log(JSON.stringify(['start', { total: total }]));\n  });\n\n  runner.on('pass', function(test) {\n    console.log(JSON.stringify(['pass', clean(test)]));\n  });\n\n  runner.on('fail', function(test, err) {\n    test = clean(test);\n    test.err = err.message;\n    test.stack = err.stack || null;\n    console.log(JSON.stringify(['fail', test]));\n  });\n\n  runner.on('end', function() {\n    process.stdout.write(JSON.stringify(['end', self.stats]));\n  });\n}\n\n/**\n * Return a plain-object representation of `test`\n * free of cyclic properties etc.\n *\n * @api private\n * @param {Object} test\n * @return {Object}\n */\nfunction clean(test) {\n  return {\n    title: test.title,\n    fullTitle: test.fullTitle(),\n    duration: test.duration\n  };\n}\n\n}).call(this,require('_process'))\n},{\""./base\"":17,\""_process\"":51}],25:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\n\n/**\n * Expose `JSON`.\n */\n\nexports = module.exports = JSONReporter;\n\n/**\n * Initialize a new `JSON` reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction JSONReporter(runner) {\n  Base.call(this, runner);\n\n  var self = this;\n  var tests = [];\n  var pending = [];\n  var failures = [];\n  var passes = [];\n\n  runner.on('test end', function(test) {\n    tests.push(test);\n  });\n\n  runner.on('pass', function(test) {\n    passes.push(test);\n  });\n\n  runner.on('fail', function(test) {\n    failures.push(test);\n  });\n\n  runner.on('pending', function(test) {\n    pending.push(test);\n  });\n\n  runner.on('end', function() {\n    var obj = {\n      stats: self.stats,\n      tests: tests.map(clean),\n      pending: pending.map(clean),\n      failures: failures.map(clean),\n      passes: passes.map(clean)\n    };\n\n    runner.testResults = obj;\n\n    process.stdout.write(JSON.stringify(obj, null, 2));\n  });\n}\n\n/**\n * Return a plain-object representation of `test`\n * free of cyclic properties etc.\n *\n * @api private\n * @param {Object} test\n * @return {Object}\n */\nfunction clean(test) {\n  return {\n    title: test.title,\n    fullTitle: test.fullTitle(),\n    duration: test.duration,\n    err: errorJSON(test.err || {})\n  };\n}\n\n/**\n * Transform `error` into a JSON object.\n *\n * @api private\n * @param {Error} err\n * @return {Object}\n */\nfunction errorJSON(err) {\n  var res = {};\n  Object.getOwnPropertyNames(err).forEach(function(key) {\n    res[key] = err[key];\n  }, err);\n  return res;\n}\n\n}).call(this,require('_process'))\n},{\""./base\"":17,\""_process\"":51}],26:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar cursor = Base.cursor;\nvar color = Base.color;\n\n/**\n * Expose `Landing`.\n */\n\nexports = module.exports = Landing;\n\n/**\n * Airplane color.\n */\n\nBase.colors.plane = 0;\n\n/**\n * Airplane crash color.\n */\n\nBase.colors['plane crash'] = 31;\n\n/**\n * Runway color.\n */\n\nBase.colors.runway = 90;\n\n/**\n * Initialize a new `Landing` reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction Landing(runner) {\n  Base.call(this, runner);\n\n  var self = this;\n  var width = Base.window.width * .75 | 0;\n  var total = runner.total;\n  var stream = process.stdout;\n  var plane = color('plane', '✈');\n  var crashed = -1;\n  var n = 0;\n\n  function runway() {\n    var buf = Array(width).join('-');\n    return '  ' + color('runway', buf);\n  }\n\n  runner.on('start', function() {\n    stream.write('\\n\\n\\n  ');\n    cursor.hide();\n  });\n\n  runner.on('test end', function(test) {\n    // check if the plane crashed\n    var col = crashed === -1 ? width * ++n / total | 0 : crashed;\n\n    // show the crash\n    if (test.state === 'failed') {\n      plane = color('plane crash', '✈');\n      crashed = col;\n    }\n\n    // render landing strip\n    stream.write('\\u001b[' + (width + 1) + 'D\\u001b[2A');\n    stream.write(runway());\n    stream.write('\\n  ');\n    stream.write(color('runway', Array(col).join('⋅')));\n    stream.write(plane);\n    stream.write(color('runway', Array(width - col).join('⋅') + '\\n'));\n    stream.write(runway());\n    stream.write('\\u001b[0m');\n  });\n\n  runner.on('end', function() {\n    cursor.show();\n    console.log();\n    self.epilogue();\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Landing, Base);\n\n}).call(this,require('_process'))\n},{\""../utils\"":39,\""./base\"":17,\""_process\"":51}],27:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar color = Base.color;\nvar cursor = Base.cursor;\n\n/**\n * Expose `List`.\n */\n\nexports = module.exports = List;\n\n/**\n * Initialize a new `List` test reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction List(runner) {\n  Base.call(this, runner);\n\n  var self = this;\n  var n = 0;\n\n  runner.on('start', function() {\n    console.log();\n  });\n\n  runner.on('test', function(test) {\n    process.stdout.write(color('pass', '    ' + test.fullTitle() + ': '));\n  });\n\n  runner.on('pending', function(test) {\n    var fmt = color('checkmark', '  -')\n      + color('pending', ' %s');\n    console.log(fmt, test.fullTitle());\n  });\n\n  runner.on('pass', function(test) {\n    var fmt = color('checkmark', '  ' + Base.symbols.dot)\n      + color('pass', ' %s: ')\n      + color(test.speed, '%dms');\n    cursor.CR();\n    console.log(fmt, test.fullTitle(), test.duration);\n  });\n\n  runner.on('fail', function(test) {\n    cursor.CR();\n    console.log(color('fail', '  %d) %s'), ++n, test.fullTitle());\n  });\n\n  runner.on('end', self.epilogue.bind(self));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(List, Base);\n\n}).call(this,require('_process'))\n},{\""../utils\"":39,\""./base\"":17,\""_process\"":51}],28:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar utils = require('../utils');\n\n/**\n * Constants\n */\n\nvar SUITE_PREFIX = '$';\n\n/**\n * Expose `Markdown`.\n */\n\nexports = module.exports = Markdown;\n\n/**\n * Initialize a new `Markdown` reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction Markdown(runner) {\n  Base.call(this, runner);\n\n  var level = 0;\n  var buf = '';\n\n  function title(str) {\n    return Array(level).join('#') + ' ' + str;\n  }\n\n  function mapTOC(suite, obj) {\n    var ret = obj;\n    var key = SUITE_PREFIX + suite.title;\n\n    obj = obj[key] = obj[key] || { suite: suite };\n    suite.suites.forEach(function(suite) {\n      mapTOC(suite, obj);\n    });\n\n    return ret;\n  }\n\n  function stringifyTOC(obj, level) {\n    ++level;\n    var buf = '';\n    var link;\n    for (var key in obj) {\n      if (key === 'suite') {\n        continue;\n      }\n      if (key !== SUITE_PREFIX) {\n        link = ' - [' + key.substring(1) + ']';\n        link += '(#' + utils.slug(obj[key].suite.fullTitle()) + ')\\n';\n        buf += Array(level).join('  ') + link;\n      }\n      buf += stringifyTOC(obj[key], level);\n    }\n    return buf;\n  }\n\n  function generateTOC(suite) {\n    var obj = mapTOC(suite, {});\n    return stringifyTOC(obj, 0);\n  }\n\n  generateTOC(runner.suite);\n\n  runner.on('suite', function(suite) {\n    ++level;\n    var slug = utils.slug(suite.fullTitle());\n    buf += '<a name=\""' + slug + '\""></a>' + '\\n';\n    buf += title(suite.title) + '\\n';\n  });\n\n  runner.on('suite end', function() {\n    --level;\n  });\n\n  runner.on('pass', function(test) {\n    var code = utils.clean(test.fn.toString());\n    buf += test.title + '.\\n';\n    buf += '\\n```js\\n';\n    buf += code + '\\n';\n    buf += '```\\n\\n';\n  });\n\n  runner.on('end', function() {\n    process.stdout.write('# TOC\\n');\n    process.stdout.write(generateTOC(runner.suite));\n    process.stdout.write(buf);\n  });\n}\n\n}).call(this,require('_process'))\n},{\""../utils\"":39,\""./base\"":17,\""_process\"":51}],29:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\n\n/**\n * Expose `Min`.\n */\n\nexports = module.exports = Min;\n\n/**\n * Initialize a new `Min` minimal test reporter (best used with --watch).\n *\n * @api public\n * @param {Runner} runner\n */\nfunction Min(runner) {\n  Base.call(this, runner);\n\n  runner.on('start', function() {\n    // clear screen\n    process.stdout.write('\\u001b[2J');\n    // set cursor position\n    process.stdout.write('\\u001b[1;3H');\n  });\n\n  runner.on('end', this.epilogue.bind(this));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Min, Base);\n\n}).call(this,require('_process'))\n},{\""../utils\"":39,\""./base\"":17,\""_process\"":51}],30:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\n\n/**\n * Expose `Dot`.\n */\n\nexports = module.exports = NyanCat;\n\n/**\n * Initialize a new `Dot` matrix test reporter.\n *\n * @param {Runner} runner\n * @api public\n */\n\nfunction NyanCat(runner) {\n  Base.call(this, runner);\n\n  var self = this;\n  var width = Base.window.width * .75 | 0;\n  var nyanCatWidth = this.nyanCatWidth = 11;\n\n  this.colorIndex = 0;\n  this.numberOfLines = 4;\n  this.rainbowColors = self.generateColors();\n  this.scoreboardWidth = 5;\n  this.tick = 0;\n  this.trajectories = [[], [], [], []];\n  this.trajectoryWidthMax = (width - nyanCatWidth);\n\n  runner.on('start', function() {\n    Base.cursor.hide();\n    self.draw();\n  });\n\n  runner.on('pending', function() {\n    self.draw();\n  });\n\n  runner.on('pass', function() {\n    self.draw();\n  });\n\n  runner.on('fail', function() {\n    self.draw();\n  });\n\n  runner.on('end', function() {\n    Base.cursor.show();\n    for (var i = 0; i < self.numberOfLines; i++) {\n      write('\\n');\n    }\n    self.epilogue();\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(NyanCat, Base);\n\n/**\n * Draw the nyan cat\n *\n * @api private\n */\n\nNyanCat.prototype.draw = function() {\n  this.appendRainbow();\n  this.drawScoreboard();\n  this.drawRainbow();\n  this.drawNyanCat();\n  this.tick = !this.tick;\n};\n\n/**\n * Draw the \""scoreboard\"" showing the number\n * of passes, failures and pending tests.\n *\n * @api private\n */\n\nNyanCat.prototype.drawScoreboard = function() {\n  var stats = this.stats;\n\n  function draw(type, n) {\n    write(' ');\n    write(Base.color(type, n));\n    write('\\n');\n  }\n\n  draw('green', stats.passes);\n  draw('fail', stats.failures);\n  draw('pending', stats.pending);\n  write('\\n');\n\n  this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Append the rainbow.\n *\n * @api private\n */\n\nNyanCat.prototype.appendRainbow = function() {\n  var segment = this.tick ? '_' : '-';\n  var rainbowified = this.rainbowify(segment);\n\n  for (var index = 0; index < this.numberOfLines; index++) {\n    var trajectory = this.trajectories[index];\n    if (trajectory.length >= this.trajectoryWidthMax) {\n      trajectory.shift();\n    }\n    trajectory.push(rainbowified);\n  }\n};\n\n/**\n * Draw the rainbow.\n *\n * @api private\n */\n\nNyanCat.prototype.drawRainbow = function() {\n  var self = this;\n\n  this.trajectories.forEach(function(line) {\n    write('\\u001b[' + self.scoreboardWidth + 'C');\n    write(line.join(''));\n    write('\\n');\n  });\n\n  this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Draw the nyan cat\n *\n * @api private\n */\nNyanCat.prototype.drawNyanCat = function() {\n  var self = this;\n  var startWidth = this.scoreboardWidth + this.trajectories[0].length;\n  var dist = '\\u001b[' + startWidth + 'C';\n  var padding = '';\n\n  write(dist);\n  write('_,------,');\n  write('\\n');\n\n  write(dist);\n  padding = self.tick ? '  ' : '   ';\n  write('_|' + padding + '/\\\\_/\\\\ ');\n  write('\\n');\n\n  write(dist);\n  padding = self.tick ? '_' : '__';\n  var tail = self.tick ? '~' : '^';\n  write(tail + '|' + padding + this.face() + ' ');\n  write('\\n');\n\n  write(dist);\n  padding = self.tick ? ' ' : '  ';\n  write(padding + '\""\""  \""\"" ');\n  write('\\n');\n\n  this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Draw nyan cat face.\n *\n * @api private\n * @return {string}\n */\n\nNyanCat.prototype.face = function() {\n  var stats = this.stats;\n  if (stats.failures) {\n    return '( x .x)';\n  } else if (stats.pending) {\n    return '( o .o)';\n  } else if (stats.passes) {\n    return '( ^ .^)';\n  }\n  return '( - .-)';\n};\n\n/**\n * Move cursor up `n`.\n *\n * @api private\n * @param {number} n\n */\n\nNyanCat.prototype.cursorUp = function(n) {\n  write('\\u001b[' + n + 'A');\n};\n\n/**\n * Move cursor down `n`.\n *\n * @api private\n * @param {number} n\n */\n\nNyanCat.prototype.cursorDown = function(n) {\n  write('\\u001b[' + n + 'B');\n};\n\n/**\n * Generate rainbow colors.\n *\n * @api private\n * @return {Array}\n */\nNyanCat.prototype.generateColors = function() {\n  var colors = [];\n\n  for (var i = 0; i < (6 * 7); i++) {\n    var pi3 = Math.floor(Math.PI / 3);\n    var n = (i * (1.0 / 6));\n    var r = Math.floor(3 * Math.sin(n) + 3);\n    var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3);\n    var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3);\n    colors.push(36 * r + 6 * g + b + 16);\n  }\n\n  return colors;\n};\n\n/**\n * Apply rainbow to the given `str`.\n *\n * @api private\n * @param {string} str\n * @return {string}\n */\nNyanCat.prototype.rainbowify = function(str) {\n  if (!Base.useColors) {\n    return str;\n  }\n  var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length];\n  this.colorIndex += 1;\n  return '\\u001b[38;5;' + color + 'm' + str + '\\u001b[0m';\n};\n\n/**\n * Stdout helper.\n *\n * @param {string} string A message to write to stdout.\n */\nfunction write(string) {\n  process.stdout.write(string);\n}\n\n}).call(this,require('_process'))\n},{\""../utils\"":39,\""./base\"":17,\""_process\"":51}],31:[function(require,module,exports){\n(function (process){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar color = Base.color;\nvar cursor = Base.cursor;\n\n/**\n * Expose `Progress`.\n */\n\nexports = module.exports = Progress;\n\n/**\n * General progress bar color.\n */\n\nBase.colors.progress = 90;\n\n/**\n * Initialize a new `Progress` bar test reporter.\n *\n * @api public\n * @param {Runner} runner\n * @param {Object} options\n */\nfunction Progress(runner, options) {\n  Base.call(this, runner);\n\n  var self = this;\n  var width = Base.window.width * .50 | 0;\n  var total = runner.total;\n  var complete = 0;\n  var lastN = -1;\n\n  // default chars\n  options = options || {};\n  options.open = options.open || '[';\n  options.complete = options.complete || '▬';\n  options.incomplete = options.incomplete || Base.symbols.dot;\n  options.close = options.close || ']';\n  options.verbose = false;\n\n  // tests started\n  runner.on('start', function() {\n    console.log();\n    cursor.hide();\n  });\n\n  // tests complete\n  runner.on('test end', function() {\n    complete++;\n\n    var percent = complete / total;\n    var n = width * percent | 0;\n    var i = width - n;\n\n    if (n === lastN && !options.verbose) {\n      // Don't re-render the line if it hasn't changed\n      return;\n    }\n    lastN = n;\n\n    cursor.CR();\n    process.stdout.write('\\u001b[J');\n    process.stdout.write(color('progress', '  ' + options.open));\n    process.stdout.write(Array(n).join(options.complete));\n    process.stdout.write(Array(i).join(options.incomplete));\n    process.stdout.write(color('progress', options.close));\n    if (options.verbose) {\n      process.stdout.write(color('progress', ' ' + complete + ' of ' + total));\n    }\n  });\n\n  // tests are complete, output some stats\n  // and the failures if any\n  runner.on('end', function() {\n    cursor.show();\n    console.log();\n    self.epilogue();\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Progress, Base);\n\n}).call(this,require('_process'))\n},{\""../utils\"":39,\""./base\"":17,\""_process\"":51}],32:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar color = Base.color;\nvar cursor = Base.cursor;\n\n/**\n * Expose `Spec`.\n */\n\nexports = module.exports = Spec;\n\n/**\n * Initialize a new `Spec` test reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction Spec(runner) {\n  Base.call(this, runner);\n\n  var self = this;\n  var indents = 0;\n  var n = 0;\n\n  function indent() {\n    return Array(indents).join('  ');\n  }\n\n  runner.on('start', function() {\n    console.log();\n  });\n\n  runner.on('suite', function(suite) {\n    ++indents;\n    console.log(color('suite', '%s%s'), indent(), suite.title);\n  });\n\n  runner.on('suite end', function() {\n    --indents;\n    if (indents === 1) {\n      console.log();\n    }\n  });\n\n  runner.on('pending', function(test) {\n    var fmt = indent() + color('pending', '  - %s');\n    console.log(fmt, test.title);\n  });\n\n  runner.on('pass', function(test) {\n    var fmt;\n    if (test.speed === 'fast') {\n      fmt = indent()\n        + color('checkmark', '  ' + Base.symbols.ok)\n        + color('pass', ' %s');\n      cursor.CR();\n      console.log(fmt, test.title);\n    } else {\n      fmt = indent()\n        + color('checkmark', '  ' + Base.symbols.ok)\n        + color('pass', ' %s')\n        + color(test.speed, ' (%dms)');\n      cursor.CR();\n      console.log(fmt, test.title, test.duration);\n    }\n  });\n\n  runner.on('fail', function(test) {\n    cursor.CR();\n    console.log(indent() + color('fail', '  %d) %s'), ++n, test.title);\n  });\n\n  runner.on('end', self.epilogue.bind(self));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Spec, Base);\n\n},{\""../utils\"":39,\""./base\"":17}],33:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\n\n/**\n * Expose `TAP`.\n */\n\nexports = module.exports = TAP;\n\n/**\n * Initialize a new `TAP` reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction TAP(runner) {\n  Base.call(this, runner);\n\n  var n = 1;\n  var passes = 0;\n  var failures = 0;\n\n  runner.on('start', function() {\n    var total = runner.grepTotal(runner.suite);\n    console.log('%d..%d', 1, total);\n  });\n\n  runner.on('test end', function() {\n    ++n;\n  });\n\n  runner.on('pending', function(test) {\n    console.log('ok %d %s # SKIP -', n, title(test));\n  });\n\n  runner.on('pass', function(test) {\n    passes++;\n    console.log('ok %d %s', n, title(test));\n  });\n\n  runner.on('fail', function(test, err) {\n    failures++;\n    console.log('not ok %d %s', n, title(test));\n    if (err.stack) {\n      console.log(err.stack.replace(/^/gm, '  '));\n    }\n  });\n\n  runner.on('end', function() {\n    console.log('# tests ' + (passes + failures));\n    console.log('# pass ' + passes);\n    console.log('# fail ' + failures);\n  });\n}\n\n/**\n * Return a TAP-safe title of `test`\n *\n * @api private\n * @param {Object} test\n * @return {String}\n */\nfunction title(test) {\n  return test.fullTitle().replace(/#/g, '');\n}\n\n},{\""./base\"":17}],34:[function(require,module,exports){\n(function (global){\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar utils = require('../utils');\nvar inherits = utils.inherits;\nvar fs = require('fs');\nvar escape = utils.escape;\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\n/* eslint-disable no-unused-vars, no-native-reassign */\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar setInterval = global.setInterval;\nvar clearTimeout = global.clearTimeout;\nvar clearInterval = global.clearInterval;\n/* eslint-enable no-unused-vars, no-native-reassign */\n\n/**\n * Expose `XUnit`.\n */\n\nexports = module.exports = XUnit;\n\n/**\n * Initialize a new `XUnit` reporter.\n *\n * @api public\n * @param {Runner} runner\n */\nfunction XUnit(runner, options) {\n  Base.call(this, runner);\n\n  var stats = this.stats;\n  var tests = [];\n  var self = this;\n\n  if (options.reporterOptions && options.reporterOptions.output) {\n    if (!fs.createWriteStream) {\n      throw new Error('file output not supported in browser');\n    }\n    self.fileStream = fs.createWriteStream(options.reporterOptions.output);\n  }\n\n  runner.on('pending', function(test) {\n    tests.push(test);\n  });\n\n  runner.on('pass', function(test) {\n    tests.push(test);\n  });\n\n  runner.on('fail', function(test) {\n    tests.push(test);\n  });\n\n  runner.on('end', function() {\n    self.write(tag('testsuite', {\n      name: 'Mocha Tests',\n      tests: stats.tests,\n      failures: stats.failures,\n      errors: stats.failures,\n      skipped: stats.tests - stats.failures - stats.passes,\n      timestamp: (new Date()).toUTCString(),\n      time: (stats.duration / 1000) || 0\n    }, false));\n\n    tests.forEach(function(t) {\n      self.test(t);\n    });\n\n    self.write('</testsuite>');\n  });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(XUnit, Base);\n\n/**\n * Override done to close the stream (if it's a file).\n *\n * @param failures\n * @param {Function} fn\n */\nXUnit.prototype.done = function(failures, fn) {\n  if (this.fileStream) {\n    this.fileStream.end(function() {\n      fn(failures);\n    });\n  } else {\n    fn(failures);\n  }\n};\n\n/**\n * Write out the given line.\n *\n * @param {string} line\n */\nXUnit.prototype.write = function(line) {\n  if (this.fileStream) {\n    this.fileStream.write(line + '\\n');\n  } else {\n    console.log(line);\n  }\n};\n\n/**\n * Output tag for the given `test.`\n *\n * @param {Test} test\n */\nXUnit.prototype.test = function(test) {\n  var attrs = {\n    classname: test.parent.fullTitle(),\n    name: test.title,\n    time: (test.duration / 1000) || 0\n  };\n\n  if (test.state === 'failed') {\n    var err = test.err;\n    this.write(tag('testcase', attrs, false, tag('failure', {}, false, cdata(escape(err.message) + '\\n' + err.stack))));\n  } else if (test.pending) {\n    this.write(tag('testcase', attrs, false, tag('skipped', {}, true)));\n  } else {\n    this.write(tag('testcase', attrs, true));\n  }\n};\n\n/**\n * HTML tag helper.\n *\n * @param name\n * @param attrs\n * @param close\n * @param content\n * @return {string}\n */\nfunction tag(name, attrs, close, content) {\n  var end = close ? '/>' : '>';\n  var pairs = [];\n  var tag;\n\n  for (var key in attrs) {\n    if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n      pairs.push(key + '=\""' + escape(attrs[key]) + '\""');\n    }\n  }\n\n  tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end;\n  if (content) {\n    tag += content + '</' + name + end;\n  }\n  return tag;\n}\n\n/**\n * Return cdata escaped CDATA `str`.\n */\n\nfunction cdata(str) {\n  return '<![CDATA[' + escape(str) + ']]>';\n}\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""../utils\"":39,\""./base\"":17,\""fs\"":41}],35:[function(require,module,exports){\n(function (global){\n/**\n * Module dependencies.\n */\n\nvar EventEmitter = require('events').EventEmitter;\nvar Pending = require('./pending');\nvar debug = require('debug')('mocha:runnable');\nvar milliseconds = require('./ms');\nvar utils = require('./utils');\nvar inherits = utils.inherits;\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\n/* eslint-disable no-unused-vars, no-native-reassign */\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar setInterval = global.setInterval;\nvar clearTimeout = global.clearTimeout;\nvar clearInterval = global.clearInterval;\n/* eslint-enable no-unused-vars, no-native-reassign */\n\n/**\n * Object#toString().\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Expose `Runnable`.\n */\n\nmodule.exports = Runnable;\n\n/**\n * Initialize a new `Runnable` with the given `title` and callback `fn`.\n *\n * @param {String} title\n * @param {Function} fn\n * @api private\n * @param {string} title\n * @param {Function} fn\n */\nfunction Runnable(title, fn) {\n  this.title = title;\n  this.fn = fn;\n  this.async = fn && fn.length;\n  this.sync = !this.async;\n  this._timeout = 2000;\n  this._slow = 75;\n  this._enableTimeouts = true;\n  this.timedOut = false;\n  this._trace = new Error('done() called multiple times');\n}\n\n/**\n * Inherit from `EventEmitter.prototype`.\n */\ninherits(Runnable, EventEmitter);\n\n/**\n * Set & get timeout `ms`.\n *\n * @api private\n * @param {number|string} ms\n * @return {Runnable|number} ms or Runnable instance.\n */\nRunnable.prototype.timeout = function(ms) {\n  if (!arguments.length) {\n    return this._timeout;\n  }\n  if (ms === 0) {\n    this._enableTimeouts = false;\n  }\n  if (typeof ms === 'string') {\n    ms = milliseconds(ms);\n  }\n  debug('timeout %d', ms);\n  this._timeout = ms;\n  if (this.timer) {\n    this.resetTimeout();\n  }\n  return this;\n};\n\n/**\n * Set & get slow `ms`.\n *\n * @api private\n * @param {number|string} ms\n * @return {Runnable|number} ms or Runnable instance.\n */\nRunnable.prototype.slow = function(ms) {\n  if (!arguments.length) {\n    return this._slow;\n  }\n  if (typeof ms === 'string') {\n    ms = milliseconds(ms);\n  }\n  debug('timeout %d', ms);\n  this._slow = ms;\n  return this;\n};\n\n/**\n * Set and get whether timeout is `enabled`.\n *\n * @api private\n * @param {boolean} enabled\n * @return {Runnable|boolean} enabled or Runnable instance.\n */\nRunnable.prototype.enableTimeouts = function(enabled) {\n  if (!arguments.length) {\n    return this._enableTimeouts;\n  }\n  debug('enableTimeouts %s', enabled);\n  this._enableTimeouts = enabled;\n  return this;\n};\n\n/**\n * Halt and mark as pending.\n *\n * @api private\n */\nRunnable.prototype.skip = function() {\n  throw new Pending();\n};\n\n/**\n * Return the full title generated by recursively concatenating the parent's\n * full title.\n *\n * @api public\n * @return {string}\n */\nRunnable.prototype.fullTitle = function() {\n  return this.parent.fullTitle() + ' ' + this.title;\n};\n\n/**\n * Clear the timeout.\n *\n * @api private\n */\nRunnable.prototype.clearTimeout = function() {\n  clearTimeout(this.timer);\n};\n\n/**\n * Inspect the runnable void of private properties.\n *\n * @api private\n * @return {string}\n */\nRunnable.prototype.inspect = function() {\n  return JSON.stringify(this, function(key, val) {\n    if (key[0] === '_') {\n      return;\n    }\n    if (key === 'parent') {\n      return '#<Suite>';\n    }\n    if (key === 'ctx') {\n      return '#<Context>';\n    }\n    return val;\n  }, 2);\n};\n\n/**\n * Reset the timeout.\n *\n * @api private\n */\nRunnable.prototype.resetTimeout = function() {\n  var self = this;\n  var ms = this.timeout() || 1e9;\n\n  if (!this._enableTimeouts) {\n    return;\n  }\n  this.clearTimeout();\n  this.timer = setTimeout(function() {\n    if (!self._enableTimeouts) {\n      return;\n    }\n    self.callback(new Error('timeout of ' + ms + 'ms exceeded. Ensure the done() callback is being called in this test.'));\n    self.timedOut = true;\n  }, ms);\n};\n\n/**\n * Whitelist a list of globals for this test run.\n *\n * @api private\n * @param {string[]} globals\n */\nRunnable.prototype.globals = function(globals) {\n  this._allowedGlobals = globals;\n};\n\n/**\n * Run the test and invoke `fn(err)`.\n *\n * @param {Function} fn\n * @api private\n */\nRunnable.prototype.run = function(fn) {\n  var self = this;\n  var start = new Date();\n  var ctx = this.ctx;\n  var finished;\n  var emitted;\n\n  // Sometimes the ctx exists, but it is not runnable\n  if (ctx && ctx.runnable) {\n    ctx.runnable(this);\n  }\n\n  // called multiple times\n  function multiple(err) {\n    if (emitted) {\n      return;\n    }\n    emitted = true;\n    self.emit('error', err || new Error('done() called multiple times; stacktrace may be inaccurate'));\n  }\n\n  // finished\n  function done(err) {\n    var ms = self.timeout();\n    if (self.timedOut) {\n      return;\n    }\n    if (finished) {\n      return multiple(err || self._trace);\n    }\n\n    self.clearTimeout();\n    self.duration = new Date() - start;\n    finished = true;\n    if (!err && self.duration > ms && self._enableTimeouts) {\n      err = new Error('timeout of ' + ms + 'ms exceeded. Ensure the done() callback is being called in this test.');\n    }\n    fn(err);\n  }\n\n  // for .resetTimeout()\n  this.callback = done;\n\n  // explicit async with `done` argument\n  if (this.async) {\n    this.resetTimeout();\n\n    if (this.allowUncaught) {\n      return callFnAsync(this.fn);\n    }\n    try {\n      callFnAsync(this.fn);\n    } catch (err) {\n      done(utils.getError(err));\n    }\n    return;\n  }\n\n  if (this.allowUncaught) {\n    callFn(this.fn);\n    done();\n    return;\n  }\n\n  // sync or promise-returning\n  try {\n    if (this.pending) {\n      done();\n    } else {\n      callFn(this.fn);\n    }\n  } catch (err) {\n    done(utils.getError(err));\n  }\n\n  function callFn(fn) {\n    var result = fn.call(ctx);\n    if (result && typeof result.then === 'function') {\n      self.resetTimeout();\n      result\n        .then(function() {\n          done();\n        },\n        function(reason) {\n          done(reason || new Error('Promise rejected with no or falsy reason'));\n        });\n    } else {\n      if (self.asyncOnly) {\n        return done(new Error('--async-only option in use without declaring `done()` or returning a promise'));\n      }\n\n      done();\n    }\n  }\n\n  function callFnAsync(fn) {\n    fn.call(ctx, function(err) {\n      if (err instanceof Error || toString.call(err) === '[object Error]') {\n        return done(err);\n      }\n      if (err) {\n        if (Object.prototype.toString.call(err) === '[object Object]') {\n          return done(new Error('done() invoked with non-Error: '\n            + JSON.stringify(err)));\n        }\n        return done(new Error('done() invoked with non-Error: ' + err));\n      }\n      done();\n    });\n  }\n};\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""./ms\"":15,\""./pending\"":16,\""./utils\"":39,\""debug\"":2,\""events\"":3}],36:[function(require,module,exports){\n(function (process,global){\n/**\n * Module dependencies.\n */\n\nvar EventEmitter = require('events').EventEmitter;\nvar Pending = require('./pending');\nvar utils = require('./utils');\nvar inherits = utils.inherits;\nvar debug = require('debug')('mocha:runner');\nvar Runnable = require('./runnable');\nvar filter = utils.filter;\nvar indexOf = utils.indexOf;\nvar keys = utils.keys;\nvar stackFilter = utils.stackTraceFilter();\nvar stringify = utils.stringify;\nvar type = utils.type;\nvar undefinedError = utils.undefinedError;\n\n/**\n * Non-enumerable globals.\n */\n\nvar globals = [\n  'setTimeout',\n  'clearTimeout',\n  'setInterval',\n  'clearInterval',\n  'XMLHttpRequest',\n  'Date',\n  'setImmediate',\n  'clearImmediate'\n];\n\n/**\n * Expose `Runner`.\n */\n\nmodule.exports = Runner;\n\n/**\n * Initialize a `Runner` for the given `suite`.\n *\n * Events:\n *\n *   - `start`  execution started\n *   - `end`  execution complete\n *   - `suite`  (suite) test suite execution started\n *   - `suite end`  (suite) all tests (and sub-suites) have finished\n *   - `test`  (test) test execution started\n *   - `test end`  (test) test completed\n *   - `hook`  (hook) hook execution started\n *   - `hook end`  (hook) hook complete\n *   - `pass`  (test) test passed\n *   - `fail`  (test, err) test failed\n *   - `pending`  (test) test pending\n *\n * @api public\n * @param {Suite} suite Root suite\n * @param {boolean} [delay] Whether or not to delay execution of root suite\n * until ready.\n */\nfunction Runner(suite, delay) {\n  var self = this;\n  this._globals = [];\n  this._abort = false;\n  this._delay = delay;\n  this.suite = suite;\n  this.started = false;\n  this.total = suite.total();\n  this.failures = 0;\n  this.on('test end', function(test) {\n    self.checkGlobals(test);\n  });\n  this.on('hook end', function(hook) {\n    self.checkGlobals(hook);\n  });\n  this._defaultGrep = /.*/;\n  this.grep(this._defaultGrep);\n  this.globals(this.globalProps().concat(extraGlobals()));\n}\n\n/**\n * Wrapper for setImmediate, process.nextTick, or browser polyfill.\n *\n * @param {Function} fn\n * @api private\n */\nRunner.immediately = global.setImmediate || process.nextTick;\n\n/**\n * Inherit from `EventEmitter.prototype`.\n */\ninherits(Runner, EventEmitter);\n\n/**\n * Run tests with full titles matching `re`. Updates runner.total\n * with number of tests matched.\n *\n * @param {RegExp} re\n * @param {Boolean} invert\n * @return {Runner} for chaining\n * @api public\n * @param {RegExp} re\n * @param {boolean} invert\n * @return {Runner} Runner instance.\n */\nRunner.prototype.grep = function(re, invert) {\n  debug('grep %s', re);\n  this._grep = re;\n  this._invert = invert;\n  this.total = this.grepTotal(this.suite);\n  return this;\n};\n\n/**\n * Returns the number of tests matching the grep search for the\n * given suite.\n *\n * @param {Suite} suite\n * @return {Number}\n * @api public\n * @param {Suite} suite\n * @return {number}\n */\nRunner.prototype.grepTotal = function(suite) {\n  var self = this;\n  var total = 0;\n\n  suite.eachTest(function(test) {\n    var match = self._grep.test(test.fullTitle());\n    if (self._invert) {\n      match = !match;\n    }\n    if (match) {\n      total++;\n    }\n  });\n\n  return total;\n};\n\n/**\n * Return a list of global properties.\n *\n * @return {Array}\n * @api private\n */\nRunner.prototype.globalProps = function() {\n  var props = keys(global);\n\n  // non-enumerables\n  for (var i = 0; i < globals.length; ++i) {\n    if (~indexOf(props, globals[i])) {\n      continue;\n    }\n    props.push(globals[i]);\n  }\n\n  return props;\n};\n\n/**\n * Allow the given `arr` of globals.\n *\n * @param {Array} arr\n * @return {Runner} for chaining\n * @api public\n * @param {Array} arr\n * @return {Runner} Runner instance.\n */\nRunner.prototype.globals = function(arr) {\n  if (!arguments.length) {\n    return this._globals;\n  }\n  debug('globals %j', arr);\n  this._globals = this._globals.concat(arr);\n  return this;\n};\n\n/**\n * Check for global variable leaks.\n *\n * @api private\n */\nRunner.prototype.checkGlobals = function(test) {\n  if (this.ignoreLeaks) {\n    return;\n  }\n  var ok = this._globals;\n\n  var globals = this.globalProps();\n  var leaks;\n\n  if (test) {\n    ok = ok.concat(test._allowedGlobals || []);\n  }\n\n  if (this.prevGlobalsLength === globals.length) {\n    return;\n  }\n  this.prevGlobalsLength = globals.length;\n\n  leaks = filterLeaks(ok, globals);\n  this._globals = this._globals.concat(leaks);\n\n  if (leaks.length > 1) {\n    this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + ''));\n  } else if (leaks.length) {\n    this.fail(test, new Error('global leak detected: ' + leaks[0]));\n  }\n};\n\n/**\n * Fail the given `test`.\n *\n * @api private\n * @param {Test} test\n * @param {Error} err\n */\nRunner.prototype.fail = function(test, err) {\n  ++this.failures;\n  test.state = 'failed';\n\n  if (!(err instanceof Error || err && typeof err.message === 'string')) {\n    err = new Error('the ' + type(err) + ' ' + stringify(err) + ' was thrown, throw an Error :)');\n  }\n\n  err.stack = (this.fullStackTrace || !err.stack)\n    ? err.stack\n    : stackFilter(err.stack);\n\n  this.emit('fail', test, err);\n};\n\n/**\n * Fail the given `hook` with `err`.\n *\n * Hook failures work in the following pattern:\n * - If bail, then exit\n * - Failed `before` hook skips all tests in a suite and subsuites,\n *   but jumps to corresponding `after` hook\n * - Failed `before each` hook skips remaining tests in a\n *   suite and jumps to corresponding `after each` hook,\n *   which is run only once\n * - Failed `after` hook does not alter\n *   execution order\n * - Failed `after each` hook skips remaining tests in a\n *   suite and subsuites, but executes other `after each`\n *   hooks\n *\n * @api private\n * @param {Hook} hook\n * @param {Error} err\n */\nRunner.prototype.failHook = function(hook, err) {\n  if (hook.ctx && hook.ctx.currentTest) {\n    hook.originalTitle = hook.originalTitle || hook.title;\n    hook.title = hook.originalTitle + ' for \""' + hook.ctx.currentTest.title + '\""';\n  }\n\n  this.fail(hook, err);\n  if (this.suite.bail()) {\n    this.emit('end');\n  }\n};\n\n/**\n * Run hook `name` callbacks and then invoke `fn()`.\n *\n * @api private\n * @param {string} name\n * @param {Function} fn\n */\n\nRunner.prototype.hook = function(name, fn) {\n  var suite = this.suite;\n  var hooks = suite['_' + name];\n  var self = this;\n\n  function next(i) {\n    var hook = hooks[i];\n    if (!hook) {\n      return fn();\n    }\n    self.currentRunnable = hook;\n\n    hook.ctx.currentTest = self.test;\n\n    self.emit('hook', hook);\n\n    if (!hook.listeners('error').length) {\n      hook.on('error', function(err) {\n        self.failHook(hook, err);\n      });\n    }\n\n    hook.run(function(err) {\n      var testError = hook.error();\n      if (testError) {\n        self.fail(self.test, testError);\n      }\n      if (err) {\n        if (err instanceof Pending) {\n          suite.pending = true;\n        } else {\n          self.failHook(hook, err);\n\n          // stop executing hooks, notify callee of hook err\n          return fn(err);\n        }\n      }\n      self.emit('hook end', hook);\n      delete hook.ctx.currentTest;\n      next(++i);\n    });\n  }\n\n  Runner.immediately(function() {\n    next(0);\n  });\n};\n\n/**\n * Run hook `name` for the given array of `suites`\n * in order, and callback `fn(err, errSuite)`.\n *\n * @api private\n * @param {string} name\n * @param {Array} suites\n * @param {Function} fn\n */\nRunner.prototype.hooks = function(name, suites, fn) {\n  var self = this;\n  var orig = this.suite;\n\n  function next(suite) {\n    self.suite = suite;\n\n    if (!suite) {\n      self.suite = orig;\n      return fn();\n    }\n\n    self.hook(name, function(err) {\n      if (err) {\n        var errSuite = self.suite;\n        self.suite = orig;\n        return fn(err, errSuite);\n      }\n\n      next(suites.pop());\n    });\n  }\n\n  next(suites.pop());\n};\n\n/**\n * Run hooks from the top level down.\n *\n * @param {String} name\n * @param {Function} fn\n * @api private\n */\nRunner.prototype.hookUp = function(name, fn) {\n  var suites = [this.suite].concat(this.parents()).reverse();\n  this.hooks(name, suites, fn);\n};\n\n/**\n * Run hooks from the bottom up.\n *\n * @param {String} name\n * @param {Function} fn\n * @api private\n */\nRunner.prototype.hookDown = function(name, fn) {\n  var suites = [this.suite].concat(this.parents());\n  this.hooks(name, suites, fn);\n};\n\n/**\n * Return an array of parent Suites from\n * closest to furthest.\n *\n * @return {Array}\n * @api private\n */\nRunner.prototype.parents = function() {\n  var suite = this.suite;\n  var suites = [];\n  while (suite.parent) {\n    suite = suite.parent;\n    suites.push(suite);\n  }\n  return suites;\n};\n\n/**\n * Run the current test and callback `fn(err)`.\n *\n * @param {Function} fn\n * @api private\n */\nRunner.prototype.runTest = function(fn) {\n  var self = this;\n  var test = this.test;\n\n  if (this.asyncOnly) {\n    test.asyncOnly = true;\n  }\n\n  if (this.allowUncaught) {\n    test.allowUncaught = true;\n    return test.run(fn);\n  }\n  try {\n    test.on('error', function(err) {\n      self.fail(test, err);\n    });\n    test.run(fn);\n  } catch (err) {\n    fn(err);\n  }\n};\n\n/**\n * Run tests in the given `suite` and invoke the callback `fn()` when complete.\n *\n * @api private\n * @param {Suite} suite\n * @param {Function} fn\n */\nRunner.prototype.runTests = function(suite, fn) {\n  var self = this;\n  var tests = suite.tests.slice();\n  var test;\n\n  function hookErr(_, errSuite, after) {\n    // before/after Each hook for errSuite failed:\n    var orig = self.suite;\n\n    // for failed 'after each' hook start from errSuite parent,\n    // otherwise start from errSuite itself\n    self.suite = after ? errSuite.parent : errSuite;\n\n    if (self.suite) {\n      // call hookUp afterEach\n      self.hookUp('afterEach', function(err2, errSuite2) {\n        self.suite = orig;\n        // some hooks may fail even now\n        if (err2) {\n          return hookErr(err2, errSuite2, true);\n        }\n        // report error suite\n        fn(errSuite);\n      });\n    } else {\n      // there is no need calling other 'after each' hooks\n      self.suite = orig;\n      fn(errSuite);\n    }\n  }\n\n  function next(err, errSuite) {\n    // if we bail after first err\n    if (self.failures && suite._bail) {\n      return fn();\n    }\n\n    if (self._abort) {\n      return fn();\n    }\n\n    if (err) {\n      return hookErr(err, errSuite, true);\n    }\n\n    // next test\n    test = tests.shift();\n\n    // all done\n    if (!test) {\n      return fn();\n    }\n\n    // grep\n    var match = self._grep.test(test.fullTitle());\n    if (self._invert) {\n      match = !match;\n    }\n    if (!match) {\n      // Run immediately only if we have defined a grep. When we\n      // define a grep — It can cause maximum callstack error if\n      // the grep is doing a large recursive loop by neglecting\n      // all tests. The run immediately function also comes with\n      // a performance cost. So we don't want to run immediately\n      // if we run the whole test suite, because running the whole\n      // test suite don't do any immediate recursive loops. Thus,\n      // allowing a JS runtime to breathe.\n      if (self._grep !== self._defaultGrep) {\n        Runner.immediately(next);\n      } else {\n        next();\n      }\n      return;\n    }\n\n    // pending\n    if (test.pending) {\n      self.emit('pending', test);\n      self.emit('test end', test);\n      return next();\n    }\n\n    // execute test and hook(s)\n    self.emit('test', self.test = test);\n    self.hookDown('beforeEach', function(err, errSuite) {\n      if (suite.pending) {\n        self.emit('pending', test);\n        self.emit('test end', test);\n        return next();\n      }\n      if (err) {\n        return hookErr(err, errSuite, false);\n      }\n      self.currentRunnable = self.test;\n      self.runTest(function(err) {\n        test = self.test;\n\n        if (err) {\n          if (err instanceof Pending) {\n            self.emit('pending', test);\n          } else {\n            self.fail(test, err);\n          }\n          self.emit('test end', test);\n\n          if (err instanceof Pending) {\n            return next();\n          }\n\n          return self.hookUp('afterEach', next);\n        }\n\n        test.state = 'passed';\n        self.emit('pass', test);\n        self.emit('test end', test);\n        self.hookUp('afterEach', next);\n      });\n    });\n  }\n\n  this.next = next;\n  this.hookErr = hookErr;\n  next();\n};\n\n/**\n * Run the given `suite` and invoke the callback `fn()` when complete.\n *\n * @api private\n * @param {Suite} suite\n * @param {Function} fn\n */\nRunner.prototype.runSuite = function(suite, fn) {\n  var i = 0;\n  var self = this;\n  var total = this.grepTotal(suite);\n  var afterAllHookCalled = false;\n\n  debug('run suite %s', suite.fullTitle());\n\n  if (!total || (self.failures && suite._bail)) {\n    return fn();\n  }\n\n  this.emit('suite', this.suite = suite);\n\n  function next(errSuite) {\n    if (errSuite) {\n      // current suite failed on a hook from errSuite\n      if (errSuite === suite) {\n        // if errSuite is current suite\n        // continue to the next sibling suite\n        return done();\n      }\n      // errSuite is among the parents of current suite\n      // stop execution of errSuite and all sub-suites\n      return done(errSuite);\n    }\n\n    if (self._abort) {\n      return done();\n    }\n\n    var curr = suite.suites[i++];\n    if (!curr) {\n      return done();\n    }\n\n    // Avoid grep neglecting large number of tests causing a\n    // huge recursive loop and thus a maximum call stack error.\n    // See comment in `this.runTests()` for more information.\n    if (self._grep !== self._defaultGrep) {\n      Runner.immediately(function() {\n        self.runSuite(curr, next);\n      });\n    } else {\n      self.runSuite(curr, next);\n    }\n  }\n\n  function done(errSuite) {\n    self.suite = suite;\n    self.nextSuite = next;\n\n    if (afterAllHookCalled) {\n      fn(errSuite);\n    } else {\n      // mark that the afterAll block has been called once\n      // and so can be skipped if there is an error in it.\n      afterAllHookCalled = true;\n      self.hook('afterAll', function() {\n        self.emit('suite end', suite);\n        fn(errSuite);\n      });\n    }\n  }\n\n  this.nextSuite = next;\n\n  this.hook('beforeAll', function(err) {\n    if (err) {\n      return done();\n    }\n    self.runTests(suite, next);\n  });\n};\n\n/**\n * Handle uncaught exceptions.\n *\n * @param {Error} err\n * @api private\n */\nRunner.prototype.uncaught = function(err) {\n  if (err) {\n    debug('uncaught exception %s', err !== function() {\n      return this;\n    }.call(err) ? err : (err.message || err));\n  } else {\n    debug('uncaught undefined exception');\n    err = undefinedError();\n  }\n  err.uncaught = true;\n\n  var runnable = this.currentRunnable;\n\n  if (!runnable) {\n    runnable = new Runnable('Uncaught error outside test suite');\n    runnable.parent = this.suite;\n\n    if (this.started) {\n      this.fail(runnable, err);\n    } else {\n      // Can't recover from this failure\n      this.emit('start');\n      this.fail(runnable, err);\n      this.emit('end');\n    }\n\n    return;\n  }\n\n  runnable.clearTimeout();\n\n  // Ignore errors if complete\n  if (runnable.state) {\n    return;\n  }\n  this.fail(runnable, err);\n\n  // recover from test\n  if (runnable.type === 'test') {\n    this.emit('test end', runnable);\n    this.hookUp('afterEach', this.next);\n    return;\n  }\n\n // recover from hooks\n  if (runnable.type === 'hook') {\n    var errSuite = this.suite;\n    // if hook failure is in afterEach block\n    if (runnable.fullTitle().indexOf('after each') > -1) {\n      return this.hookErr(err, errSuite, true);\n    }\n    // if hook failure is in beforeEach block\n    if (runnable.fullTitle().indexOf('before each') > -1) {\n      return this.hookErr(err, errSuite, false);\n    }\n    // if hook failure is in after or before blocks\n    return this.nextSuite(errSuite);\n  }\n\n  // bail\n  this.emit('end');\n};\n\n/**\n * Run the root suite and invoke `fn(failures)`\n * on completion.\n *\n * @param {Function} fn\n * @return {Runner} for chaining\n * @api public\n * @param {Function} fn\n * @return {Runner} Runner instance.\n */\nRunner.prototype.run = function(fn) {\n  var self = this;\n  var rootSuite = this.suite;\n\n  fn = fn || function() {};\n\n  function uncaught(err) {\n    self.uncaught(err);\n  }\n\n  function start() {\n    self.started = true;\n    self.emit('start');\n    self.runSuite(rootSuite, function() {\n      debug('finished running');\n      self.emit('end');\n    });\n  }\n\n  debug('start');\n\n  // callback\n  this.on('end', function() {\n    debug('end');\n    process.removeListener('uncaughtException', uncaught);\n    fn(self.failures);\n  });\n\n  // uncaught exception\n  process.on('uncaughtException', uncaught);\n\n  if (this._delay) {\n    // for reporters, I guess.\n    // might be nice to debounce some dots while we wait.\n    this.emit('waiting', rootSuite);\n    rootSuite.once('run', start);\n  } else {\n    start();\n  }\n\n  return this;\n};\n\n/**\n * Cleanly abort execution.\n *\n * @api public\n * @return {Runner} Runner instance.\n */\nRunner.prototype.abort = function() {\n  debug('aborting');\n  this._abort = true;\n\n  return this;\n};\n\n/**\n * Filter leaks with the given globals flagged as `ok`.\n *\n * @api private\n * @param {Array} ok\n * @param {Array} globals\n * @return {Array}\n */\nfunction filterLeaks(ok, globals) {\n  return filter(globals, function(key) {\n    // Firefox and Chrome exposes iframes as index inside the window object\n    if (/^d+/.test(key)) {\n      return false;\n    }\n\n    // in firefox\n    // if runner runs in an iframe, this iframe's window.getInterface method not init at first\n    // it is assigned in some seconds\n    if (global.navigator && (/^getInterface/).test(key)) {\n      return false;\n    }\n\n    // an iframe could be approached by window[iframeIndex]\n    // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak\n    if (global.navigator && (/^\\d+/).test(key)) {\n      return false;\n    }\n\n    // Opera and IE expose global variables for HTML element IDs (issue #243)\n    if (/^mocha-/.test(key)) {\n      return false;\n    }\n\n    var matched = filter(ok, function(ok) {\n      if (~ok.indexOf('*')) {\n        return key.indexOf(ok.split('*')[0]) === 0;\n      }\n      return key === ok;\n    });\n    return !matched.length && (!global.navigator || key !== 'onerror');\n  });\n}\n\n/**\n * Array of globals dependent on the environment.\n *\n * @return {Array}\n * @api private\n */\nfunction extraGlobals() {\n  if (typeof process === 'object' && typeof process.version === 'string') {\n    var parts = process.version.split('.');\n    var nodeVersion = utils.reduce(parts, function(a, v) {\n      return a << 8 | v;\n    });\n\n    // 'errno' was renamed to process._errno in v0.9.11.\n\n    if (nodeVersion < 0x00090B) {\n      return ['errno'];\n    }\n  }\n\n  return [];\n}\n\n}).call(this,require('_process'),typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""./pending\"":16,\""./runnable\"":35,\""./utils\"":39,\""_process\"":51,\""debug\"":2,\""events\"":3}],37:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar EventEmitter = require('events').EventEmitter;\nvar Hook = require('./hook');\nvar utils = require('./utils');\nvar inherits = utils.inherits;\nvar debug = require('debug')('mocha:suite');\nvar milliseconds = require('./ms');\n\n/**\n * Expose `Suite`.\n */\n\nexports = module.exports = Suite;\n\n/**\n * Create a new `Suite` with the given `title` and parent `Suite`. When a suite\n * with the same title is already present, that suite is returned to provide\n * nicer reporter and more flexible meta-testing.\n *\n * @api public\n * @param {Suite} parent\n * @param {string} title\n * @return {Suite}\n */\nexports.create = function(parent, title) {\n  var suite = new Suite(title, parent.ctx);\n  suite.parent = parent;\n  if (parent.pending) {\n    suite.pending = true;\n  }\n  title = suite.fullTitle();\n  parent.addSuite(suite);\n  return suite;\n};\n\n/**\n * Initialize a new `Suite` with the given `title` and `ctx`.\n *\n * @api private\n * @param {string} title\n * @param {Context} parentContext\n */\nfunction Suite(title, parentContext) {\n  this.title = title;\n  function Context() {}\n  Context.prototype = parentContext;\n  this.ctx = new Context();\n  this.suites = [];\n  this.tests = [];\n  this.pending = false;\n  this._beforeEach = [];\n  this._beforeAll = [];\n  this._afterEach = [];\n  this._afterAll = [];\n  this.root = !title;\n  this._timeout = 2000;\n  this._enableTimeouts = true;\n  this._slow = 75;\n  this._bail = false;\n  this.delayed = false;\n}\n\n/**\n * Inherit from `EventEmitter.prototype`.\n */\ninherits(Suite, EventEmitter);\n\n/**\n * Return a clone of this `Suite`.\n *\n * @api private\n * @return {Suite}\n */\nSuite.prototype.clone = function() {\n  var suite = new Suite(this.title);\n  debug('clone');\n  suite.ctx = this.ctx;\n  suite.timeout(this.timeout());\n  suite.enableTimeouts(this.enableTimeouts());\n  suite.slow(this.slow());\n  suite.bail(this.bail());\n  return suite;\n};\n\n/**\n * Set timeout `ms` or short-hand such as \""2s\"".\n *\n * @api private\n * @param {number|string} ms\n * @return {Suite|number} for chaining\n */\nSuite.prototype.timeout = function(ms) {\n  if (!arguments.length) {\n    return this._timeout;\n  }\n  if (ms.toString() === '0') {\n    this._enableTimeouts = false;\n  }\n  if (typeof ms === 'string') {\n    ms = milliseconds(ms);\n  }\n  debug('timeout %d', ms);\n  this._timeout = parseInt(ms, 10);\n  return this;\n};\n\n/**\n  * Set timeout to `enabled`.\n  *\n  * @api private\n  * @param {boolean} enabled\n  * @return {Suite|boolean} self or enabled\n  */\nSuite.prototype.enableTimeouts = function(enabled) {\n  if (!arguments.length) {\n    return this._enableTimeouts;\n  }\n  debug('enableTimeouts %s', enabled);\n  this._enableTimeouts = enabled;\n  return this;\n};\n\n/**\n * Set slow `ms` or short-hand such as \""2s\"".\n *\n * @api private\n * @param {number|string} ms\n * @return {Suite|number} for chaining\n */\nSuite.prototype.slow = function(ms) {\n  if (!arguments.length) {\n    return this._slow;\n  }\n  if (typeof ms === 'string') {\n    ms = milliseconds(ms);\n  }\n  debug('slow %d', ms);\n  this._slow = ms;\n  return this;\n};\n\n/**\n * Sets whether to bail after first error.\n *\n * @api private\n * @param {boolean} bail\n * @return {Suite|number} for chaining\n */\nSuite.prototype.bail = function(bail) {\n  if (!arguments.length) {\n    return this._bail;\n  }\n  debug('bail %s', bail);\n  this._bail = bail;\n  return this;\n};\n\n/**\n * Run `fn(test[, done])` before running tests.\n *\n * @api private\n * @param {string} title\n * @param {Function} fn\n * @return {Suite} for chaining\n */\nSuite.prototype.beforeAll = function(title, fn) {\n  if (this.pending) {\n    return this;\n  }\n  if (typeof title === 'function') {\n    fn = title;\n    title = fn.name;\n  }\n  title = '\""before all\"" hook' + (title ? ': ' + title : '');\n\n  var hook = new Hook(title, fn);\n  hook.parent = this;\n  hook.timeout(this.timeout());\n  hook.enableTimeouts(this.enableTimeouts());\n  hook.slow(this.slow());\n  hook.ctx = this.ctx;\n  this._beforeAll.push(hook);\n  this.emit('beforeAll', hook);\n  return this;\n};\n\n/**\n * Run `fn(test[, done])` after running tests.\n *\n * @api private\n * @param {string} title\n * @param {Function} fn\n * @return {Suite} for chaining\n */\nSuite.prototype.afterAll = function(title, fn) {\n  if (this.pending) {\n    return this;\n  }\n  if (typeof title === 'function') {\n    fn = title;\n    title = fn.name;\n  }\n  title = '\""after all\"" hook' + (title ? ': ' + title : '');\n\n  var hook = new Hook(title, fn);\n  hook.parent = this;\n  hook.timeout(this.timeout());\n  hook.enableTimeouts(this.enableTimeouts());\n  hook.slow(this.slow());\n  hook.ctx = this.ctx;\n  this._afterAll.push(hook);\n  this.emit('afterAll', hook);\n  return this;\n};\n\n/**\n * Run `fn(test[, done])` before each test case.\n *\n * @api private\n * @param {string} title\n * @param {Function} fn\n * @return {Suite} for chaining\n */\nSuite.prototype.beforeEach = function(title, fn) {\n  if (this.pending) {\n    return this;\n  }\n  if (typeof title === 'function') {\n    fn = title;\n    title = fn.name;\n  }\n  title = '\""before each\"" hook' + (title ? ': ' + title : '');\n\n  var hook = new Hook(title, fn);\n  hook.parent = this;\n  hook.timeout(this.timeout());\n  hook.enableTimeouts(this.enableTimeouts());\n  hook.slow(this.slow());\n  hook.ctx = this.ctx;\n  this._beforeEach.push(hook);\n  this.emit('beforeEach', hook);\n  return this;\n};\n\n/**\n * Run `fn(test[, done])` after each test case.\n *\n * @api private\n * @param {string} title\n * @param {Function} fn\n * @return {Suite} for chaining\n */\nSuite.prototype.afterEach = function(title, fn) {\n  if (this.pending) {\n    return this;\n  }\n  if (typeof title === 'function') {\n    fn = title;\n    title = fn.name;\n  }\n  title = '\""after each\"" hook' + (title ? ': ' + title : '');\n\n  var hook = new Hook(title, fn);\n  hook.parent = this;\n  hook.timeout(this.timeout());\n  hook.enableTimeouts(this.enableTimeouts());\n  hook.slow(this.slow());\n  hook.ctx = this.ctx;\n  this._afterEach.push(hook);\n  this.emit('afterEach', hook);\n  return this;\n};\n\n/**\n * Add a test `suite`.\n *\n * @api private\n * @param {Suite} suite\n * @return {Suite} for chaining\n */\nSuite.prototype.addSuite = function(suite) {\n  suite.parent = this;\n  suite.timeout(this.timeout());\n  suite.enableTimeouts(this.enableTimeouts());\n  suite.slow(this.slow());\n  suite.bail(this.bail());\n  this.suites.push(suite);\n  this.emit('suite', suite);\n  return this;\n};\n\n/**\n * Add a `test` to this suite.\n *\n * @api private\n * @param {Test} test\n * @return {Suite} for chaining\n */\nSuite.prototype.addTest = function(test) {\n  test.parent = this;\n  test.timeout(this.timeout());\n  test.enableTimeouts(this.enableTimeouts());\n  test.slow(this.slow());\n  test.ctx = this.ctx;\n  this.tests.push(test);\n  this.emit('test', test);\n  return this;\n};\n\n/**\n * Return the full title generated by recursively concatenating the parent's\n * full title.\n *\n * @api public\n * @return {string}\n */\nSuite.prototype.fullTitle = function() {\n  if (this.parent) {\n    var full = this.parent.fullTitle();\n    if (full) {\n      return full + ' ' + this.title;\n    }\n  }\n  return this.title;\n};\n\n/**\n * Return the total number of tests.\n *\n * @api public\n * @return {number}\n */\nSuite.prototype.total = function() {\n  return utils.reduce(this.suites, function(sum, suite) {\n    return sum + suite.total();\n  }, 0) + this.tests.length;\n};\n\n/**\n * Iterates through each suite recursively to find all tests. Applies a\n * function in the format `fn(test)`.\n *\n * @api private\n * @param {Function} fn\n * @return {Suite}\n */\nSuite.prototype.eachTest = function(fn) {\n  utils.forEach(this.tests, fn);\n  utils.forEach(this.suites, function(suite) {\n    suite.eachTest(fn);\n  });\n  return this;\n};\n\n/**\n * This will run the root suite if we happen to be running in delayed mode.\n */\nSuite.prototype.run = function run() {\n  if (this.root) {\n    this.emit('run');\n  }\n};\n\n},{\""./hook\"":7,\""./ms\"":15,\""./utils\"":39,\""debug\"":2,\""events\"":3}],38:[function(require,module,exports){\n/**\n * Module dependencies.\n */\n\nvar Runnable = require('./runnable');\nvar inherits = require('./utils').inherits;\n\n/**\n * Expose `Test`.\n */\n\nmodule.exports = Test;\n\n/**\n * Initialize a new `Test` with the given `title` and callback `fn`.\n *\n * @api private\n * @param {String} title\n * @param {Function} fn\n */\nfunction Test(title, fn) {\n  Runnable.call(this, title, fn);\n  this.pending = !fn;\n  this.type = 'test';\n}\n\n/**\n * Inherit from `Runnable.prototype`.\n */\ninherits(Test, Runnable);\n\n},{\""./runnable\"":35,\""./utils\"":39}],39:[function(require,module,exports){\n(function (process,Buffer){\n/* eslint-env browser */\n\n/**\n * Module dependencies.\n */\n\nvar basename = require('path').basename;\nvar debug = require('debug')('mocha:watch');\nvar exists = require('fs').existsSync || require('path').existsSync;\nvar glob = require('glob');\nvar join = require('path').join;\nvar readdirSync = require('fs').readdirSync;\nvar statSync = require('fs').statSync;\nvar watchFile = require('fs').watchFile;\n\n/**\n * Ignored directories.\n */\n\nvar ignore = ['node_modules', '.git'];\n\nexports.inherits = require('util').inherits;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @api private\n * @param  {string} html\n * @return {string}\n */\nexports.escape = function(html) {\n  return String(html)\n    .replace(/&/g, '&amp;')\n    .replace(/\""/g, '&quot;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n};\n\n/**\n * Array#forEach (<=IE8)\n *\n * @api private\n * @param {Array} arr\n * @param {Function} fn\n * @param {Object} scope\n */\nexports.forEach = function(arr, fn, scope) {\n  for (var i = 0, l = arr.length; i < l; i++) {\n    fn.call(scope, arr[i], i);\n  }\n};\n\n/**\n * Test if the given obj is type of string.\n *\n * @api private\n * @param {Object} obj\n * @return {boolean}\n */\nexports.isString = function(obj) {\n  return typeof obj === 'string';\n};\n\n/**\n * Array#map (<=IE8)\n *\n * @api private\n * @param {Array} arr\n * @param {Function} fn\n * @param {Object} scope\n * @return {Array}\n */\nexports.map = function(arr, fn, scope) {\n  var result = [];\n  for (var i = 0, l = arr.length; i < l; i++) {\n    result.push(fn.call(scope, arr[i], i, arr));\n  }\n  return result;\n};\n\n/**\n * Array#indexOf (<=IE8)\n *\n * @api private\n * @param {Array} arr\n * @param {Object} obj to find index of\n * @param {number} start\n * @return {number}\n */\nexports.indexOf = function(arr, obj, start) {\n  for (var i = start || 0, l = arr.length; i < l; i++) {\n    if (arr[i] === obj) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n/**\n * Array#reduce (<=IE8)\n *\n * @api private\n * @param {Array} arr\n * @param {Function} fn\n * @param {Object} val Initial value.\n * @return {*}\n */\nexports.reduce = function(arr, fn, val) {\n  var rval = val;\n\n  for (var i = 0, l = arr.length; i < l; i++) {\n    rval = fn(rval, arr[i], i, arr);\n  }\n\n  return rval;\n};\n\n/**\n * Array#filter (<=IE8)\n *\n * @api private\n * @param {Array} arr\n * @param {Function} fn\n * @return {Array}\n */\nexports.filter = function(arr, fn) {\n  var ret = [];\n\n  for (var i = 0, l = arr.length; i < l; i++) {\n    var val = arr[i];\n    if (fn(val, i, arr)) {\n      ret.push(val);\n    }\n  }\n\n  return ret;\n};\n\n/**\n * Object.keys (<=IE8)\n *\n * @api private\n * @param {Object} obj\n * @return {Array} keys\n */\nexports.keys = typeof Object.keys === 'function' ? Object.keys : function(obj) {\n  var keys = [];\n  var has = Object.prototype.hasOwnProperty; // for `window` on <=IE8\n\n  for (var key in obj) {\n    if (has.call(obj, key)) {\n      keys.push(key);\n    }\n  }\n\n  return keys;\n};\n\n/**\n * Watch the given `files` for changes\n * and invoke `fn(file)` on modification.\n *\n * @api private\n * @param {Array} files\n * @param {Function} fn\n */\nexports.watch = function(files, fn) {\n  var options = { interval: 100 };\n  files.forEach(function(file) {\n    debug('file %s', file);\n    watchFile(file, options, function(curr, prev) {\n      if (prev.mtime < curr.mtime) {\n        fn(file);\n      }\n    });\n  });\n};\n\n/**\n * Array.isArray (<=IE8)\n *\n * @api private\n * @param {Object} obj\n * @return {Boolean}\n */\nvar isArray = typeof Array.isArray === 'function' ? Array.isArray : function(obj) {\n  return Object.prototype.toString.call(obj) === '[object Array]';\n};\n\n/**\n * Buffer.prototype.toJSON polyfill.\n *\n * @type {Function}\n */\nif (typeof Buffer !== 'undefined' && Buffer.prototype) {\n  Buffer.prototype.toJSON = Buffer.prototype.toJSON || function() {\n    return Array.prototype.slice.call(this, 0);\n  };\n}\n\n/**\n * Ignored files.\n *\n * @api private\n * @param {string} path\n * @return {boolean}\n */\nfunction ignored(path) {\n  return !~ignore.indexOf(path);\n}\n\n/**\n * Lookup files in the given `dir`.\n *\n * @api private\n * @param {string} dir\n * @param {string[]} [ext=['.js']]\n * @param {Array} [ret=[]]\n * @return {Array}\n */\nexports.files = function(dir, ext, ret) {\n  ret = ret || [];\n  ext = ext || ['js'];\n\n  var re = new RegExp('\\\\.(' + ext.join('|') + ')$');\n\n  readdirSync(dir)\n    .filter(ignored)\n    .forEach(function(path) {\n      path = join(dir, path);\n      if (statSync(path).isDirectory()) {\n        exports.files(path, ext, ret);\n      } else if (path.match(re)) {\n        ret.push(path);\n      }\n    });\n\n  return ret;\n};\n\n/**\n * Compute a slug from the given `str`.\n *\n * @api private\n * @param {string} str\n * @return {string}\n */\nexports.slug = function(str) {\n  return str\n    .toLowerCase()\n    .replace(/ +/g, '-')\n    .replace(/[^-\\w]/g, '');\n};\n\n/**\n * Strip the function definition from `str`, and re-indent for pre whitespace.\n *\n * @param {string} str\n * @return {string}\n */\nexports.clean = function(str) {\n  str = str\n    .replace(/\\r\\n?|[\\n\\u2028\\u2029]/g, '\\n').replace(/^\\uFEFF/, '')\n    .replace(/^function *\\(.*\\)\\s*{|\\(.*\\) *=> *{?/, '')\n    .replace(/\\s+\\}$/, '');\n\n  var spaces = str.match(/^\\n?( *)/)[1].length;\n  var tabs = str.match(/^\\n?(\\t*)/)[1].length;\n  var re = new RegExp('^\\n?' + (tabs ? '\\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}', 'gm');\n\n  str = str.replace(re, '');\n\n  return exports.trim(str);\n};\n\n/**\n * Trim the given `str`.\n *\n * @api private\n * @param {string} str\n * @return {string}\n */\nexports.trim = function(str) {\n  return str.replace(/^\\s+|\\s+$/g, '');\n};\n\n/**\n * Parse the given `qs`.\n *\n * @api private\n * @param {string} qs\n * @return {Object}\n */\nexports.parseQuery = function(qs) {\n  return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair) {\n    var i = pair.indexOf('=');\n    var key = pair.slice(0, i);\n    var val = pair.slice(++i);\n\n    obj[key] = decodeURIComponent(val);\n    return obj;\n  }, {});\n};\n\n/**\n * Highlight the given string of `js`.\n *\n * @api private\n * @param {string} js\n * @return {string}\n */\nfunction highlight(js) {\n  return js\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\\/\\/(.*)/gm, '<span class=\""comment\"">//$1</span>')\n    .replace(/('.*?')/gm, '<span class=\""string\"">$1</span>')\n    .replace(/(\\d+\\.\\d+)/gm, '<span class=\""number\"">$1</span>')\n    .replace(/(\\d+)/gm, '<span class=\""number\"">$1</span>')\n    .replace(/\\bnew[ \\t]+(\\w+)/gm, '<span class=\""keyword\"">new</span> <span class=\""init\"">$1</span>')\n    .replace(/\\b(function|new|throw|return|var|if|else)\\b/gm, '<span class=\""keyword\"">$1</span>');\n}\n\n/**\n * Highlight the contents of tag `name`.\n *\n * @api private\n * @param {string} name\n */\nexports.highlightTags = function(name) {\n  var code = document.getElementById('mocha').getElementsByTagName(name);\n  for (var i = 0, len = code.length; i < len; ++i) {\n    code[i].innerHTML = highlight(code[i].innerHTML);\n  }\n};\n\n/**\n * If a value could have properties, and has none, this function is called,\n * which returns a string representation of the empty value.\n *\n * Functions w/ no properties return `'[Function]'`\n * Arrays w/ length === 0 return `'[]'`\n * Objects w/ no properties return `'{}'`\n * All else: return result of `value.toString()`\n *\n * @api private\n * @param {*} value The value to inspect.\n * @param {string} [type] The type of the value, if known.\n * @returns {string}\n */\nfunction emptyRepresentation(value, type) {\n  type = type || exports.type(value);\n\n  switch (type) {\n    case 'function':\n      return '[Function]';\n    case 'object':\n      return '{}';\n    case 'array':\n      return '[]';\n    default:\n      return value.toString();\n  }\n}\n\n/**\n * Takes some variable and asks `Object.prototype.toString()` what it thinks it\n * is.\n *\n * @api private\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n * @param {*} value The value to test.\n * @returns {string}\n * @example\n * type({}) // 'object'\n * type([]) // 'array'\n * type(1) // 'number'\n * type(false) // 'boolean'\n * type(Infinity) // 'number'\n * type(null) // 'null'\n * type(new Date()) // 'date'\n * type(/foo/) // 'regexp'\n * type('type') // 'string'\n * type(global) // 'global'\n */\nexports.type = function type(value) {\n  if (value === undefined) {\n    return 'undefined';\n  } else if (value === null) {\n    return 'null';\n  } else if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\n    return 'buffer';\n  }\n  return Object.prototype.toString.call(value)\n    .replace(/^\\[.+\\s(.+?)\\]$/, '$1')\n    .toLowerCase();\n};\n\n/**\n * Stringify `value`. Different behavior depending on type of value:\n *\n * - If `value` is undefined or null, return `'[undefined]'` or `'[null]'`, respectively.\n * - If `value` is not an object, function or array, return result of `value.toString()` wrapped in double-quotes.\n * - If `value` is an *empty* object, function, or array, return result of function\n *   {@link emptyRepresentation}.\n * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of\n *   JSON.stringify().\n *\n * @api private\n * @see exports.type\n * @param {*} value\n * @return {string}\n */\nexports.stringify = function(value) {\n  var type = exports.type(value);\n\n  if (!~exports.indexOf(['object', 'array', 'function'], type)) {\n    if (type !== 'buffer') {\n      return jsonStringify(value);\n    }\n    var json = value.toJSON();\n    // Based on the toJSON result\n    return jsonStringify(json.data && json.type ? json.data : json, 2)\n      .replace(/,(\\n|$)/g, '$1');\n  }\n\n  for (var prop in value) {\n    if (Object.prototype.hasOwnProperty.call(value, prop)) {\n      return jsonStringify(exports.canonicalize(value), 2).replace(/,(\\n|$)/g, '$1');\n    }\n  }\n\n  return emptyRepresentation(value, type);\n};\n\n/**\n * like JSON.stringify but more sense.\n *\n * @api private\n * @param {Object}  object\n * @param {number=} spaces\n * @param {number=} depth\n * @returns {*}\n */\nfunction jsonStringify(object, spaces, depth) {\n  if (typeof spaces === 'undefined') {\n    // primitive types\n    return _stringify(object);\n  }\n\n  depth = depth || 1;\n  var space = spaces * depth;\n  var str = isArray(object) ? '[' : '{';\n  var end = isArray(object) ? ']' : '}';\n  var length = object.length || exports.keys(object).length;\n  // `.repeat()` polyfill\n  function repeat(s, n) {\n    return new Array(n).join(s);\n  }\n\n  function _stringify(val) {\n    switch (exports.type(val)) {\n      case 'null':\n      case 'undefined':\n        val = '[' + val + ']';\n        break;\n      case 'array':\n      case 'object':\n        val = jsonStringify(val, spaces, depth + 1);\n        break;\n      case 'boolean':\n      case 'regexp':\n      case 'number':\n        val = val === 0 && (1 / val) === -Infinity // `-0`\n          ? '-0'\n          : val.toString();\n        break;\n      case 'date':\n        var sDate = isNaN(val.getTime())        // Invalid date\n          ? val.toString()\n          : val.toISOString();\n        val = '[Date: ' + sDate + ']';\n        break;\n      case 'buffer':\n        var json = val.toJSON();\n        // Based on the toJSON result\n        json = json.data && json.type ? json.data : json;\n        val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']';\n        break;\n      default:\n        val = (val === '[Function]' || val === '[Circular]')\n          ? val\n          : JSON.stringify(val); // string\n    }\n    return val;\n  }\n\n  for (var i in object) {\n    if (!object.hasOwnProperty(i)) {\n      continue; // not my business\n    }\n    --length;\n    str += '\\n ' + repeat(' ', space)\n      + (isArray(object) ? '' : '\""' + i + '\"": ') // key\n      + _stringify(object[i])                     // value\n      + (length ? ',' : '');                     // comma\n  }\n\n  return str\n    // [], {}\n    + (str.length !== 1 ? '\\n' + repeat(' ', --space) + end : end);\n}\n\n/**\n * Test if a value is a buffer.\n *\n * @api private\n * @param {*} value The value to test.\n * @return {boolean} True if `value` is a buffer, otherwise false\n */\nexports.isBuffer = function(value) {\n  return typeof Buffer !== 'undefined' && Buffer.isBuffer(value);\n};\n\n/**\n * Return a new Thing that has the keys in sorted order. Recursive.\n *\n * If the Thing...\n * - has already been seen, return string `'[Circular]'`\n * - is `undefined`, return string `'[undefined]'`\n * - is `null`, return value `null`\n * - is some other primitive, return the value\n * - is not a primitive or an `Array`, `Object`, or `Function`, return the value of the Thing's `toString()` method\n * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again.\n * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()`\n *\n * @api private\n * @see {@link exports.stringify}\n * @param {*} value Thing to inspect.  May or may not have properties.\n * @param {Array} [stack=[]] Stack of seen values\n * @return {(Object|Array|Function|string|undefined)}\n */\nexports.canonicalize = function(value, stack) {\n  var canonicalizedObj;\n  /* eslint-disable no-unused-vars */\n  var prop;\n  /* eslint-enable no-unused-vars */\n  var type = exports.type(value);\n  function withStack(value, fn) {\n    stack.push(value);\n    fn();\n    stack.pop();\n  }\n\n  stack = stack || [];\n\n  if (exports.indexOf(stack, value) !== -1) {\n    return '[Circular]';\n  }\n\n  switch (type) {\n    case 'undefined':\n    case 'buffer':\n    case 'null':\n      canonicalizedObj = value;\n      break;\n    case 'array':\n      withStack(value, function() {\n        canonicalizedObj = exports.map(value, function(item) {\n          return exports.canonicalize(item, stack);\n        });\n      });\n      break;\n    case 'function':\n      /* eslint-disable guard-for-in */\n      for (prop in value) {\n        canonicalizedObj = {};\n        break;\n      }\n      /* eslint-enable guard-for-in */\n      if (!canonicalizedObj) {\n        canonicalizedObj = emptyRepresentation(value, type);\n        break;\n      }\n    /* falls through */\n    case 'object':\n      canonicalizedObj = canonicalizedObj || {};\n      withStack(value, function() {\n        exports.forEach(exports.keys(value).sort(), function(key) {\n          canonicalizedObj[key] = exports.canonicalize(value[key], stack);\n        });\n      });\n      break;\n    case 'date':\n    case 'number':\n    case 'regexp':\n    case 'boolean':\n      canonicalizedObj = value;\n      break;\n    default:\n      canonicalizedObj = value.toString();\n  }\n\n  return canonicalizedObj;\n};\n\n/**\n * Lookup file names at the given `path`.\n *\n * @api public\n * @param {string} path Base path to start searching from.\n * @param {string[]} extensions File extensions to look for.\n * @param {boolean} recursive Whether or not to recurse into subdirectories.\n * @return {string[]} An array of paths.\n */\nexports.lookupFiles = function lookupFiles(path, extensions, recursive) {\n  var files = [];\n  var re = new RegExp('\\\\.(' + extensions.join('|') + ')$');\n\n  if (!exists(path)) {\n    if (exists(path + '.js')) {\n      path += '.js';\n    } else {\n      files = glob.sync(path);\n      if (!files.length) {\n        throw new Error(\""cannot resolve path (or pattern) '\"" + path + \""'\"");\n      }\n      return files;\n    }\n  }\n\n  try {\n    var stat = statSync(path);\n    if (stat.isFile()) {\n      return path;\n    }\n  } catch (err) {\n    // ignore error\n    return;\n  }\n\n  readdirSync(path).forEach(function(file) {\n    file = join(path, file);\n    try {\n      var stat = statSync(file);\n      if (stat.isDirectory()) {\n        if (recursive) {\n          files = files.concat(lookupFiles(file, extensions, recursive));\n        }\n        return;\n      }\n    } catch (err) {\n      // ignore error\n      return;\n    }\n    if (!stat.isFile() || !re.test(file) || basename(file)[0] === '.') {\n      return;\n    }\n    files.push(file);\n  });\n\n  return files;\n};\n\n/**\n * Generate an undefined error with a message warning the user.\n *\n * @return {Error}\n */\n\nexports.undefinedError = function() {\n  return new Error('Caught undefined error, did you throw without specifying what?');\n};\n\n/**\n * Generate an undefined error if `err` is not defined.\n *\n * @param {Error} err\n * @return {Error}\n */\n\nexports.getError = function(err) {\n  return err || exports.undefinedError();\n};\n\n/**\n * @summary\n * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`)\n * @description\n * When invoking this function you get a filter function that get the Error.stack as an input,\n * and return a prettify output.\n * (i.e: strip Mocha and internal node functions from stack trace).\n * @returns {Function}\n */\nexports.stackTraceFilter = function() {\n  // TODO: Replace with `process.browser`\n  var slash = '/';\n  var is = typeof document === 'undefined' ? { node: true } : { browser: true };\n  var cwd = is.node\n      ? process.cwd() + slash\n      : (typeof location === 'undefined' ? window.location : location).href.replace(/\\/[^\\/]*$/, '/');\n\n  function isMochaInternal(line) {\n    return (~line.indexOf('node_modules' + slash + 'mocha' + slash))\n      || (~line.indexOf('components' + slash + 'mochajs' + slash))\n      || (~line.indexOf('components' + slash + 'mocha' + slash))\n      || (~line.indexOf(slash + 'mocha.js'));\n  }\n\n  function isNodeInternal(line) {\n    return (~line.indexOf('(timers.js:'))\n      || (~line.indexOf('(events.js:'))\n      || (~line.indexOf('(node.js:'))\n      || (~line.indexOf('(module.js:'))\n      || (~line.indexOf('GeneratorFunctionPrototype.next (native)'))\n      || false;\n  }\n\n  return function(stack) {\n    stack = stack.split('\\n');\n\n    stack = exports.reduce(stack, function(list, line) {\n      if (isMochaInternal(line)) {\n        return list;\n      }\n\n      if (is.node && isNodeInternal(line)) {\n        return list;\n      }\n\n      // Clean up cwd(absolute)\n      list.push(line.replace(cwd, ''));\n      return list;\n    }, []);\n\n    return stack.join('\\n');\n  };\n};\n\n}).call(this,require('_process'),require(\""buffer\"").Buffer)\n},{\""_process\"":51,\""buffer\"":43,\""debug\"":2,\""fs\"":41,\""glob\"":41,\""path\"":41,\""util\"":66}],40:[function(require,module,exports){\n(function (process){\nvar WritableStream = require('stream').Writable\nvar inherits = require('util').inherits\n\nmodule.exports = BrowserStdout\n\n\ninherits(BrowserStdout, WritableStream)\n\nfunction BrowserStdout(opts) {\n  if (!(this instanceof BrowserStdout)) return new BrowserStdout(opts)\n\n  opts = opts || {}\n  WritableStream.call(this, opts)\n  this.label = (opts.label !== undefined) ? opts.label : 'stdout'\n}\n\nBrowserStdout.prototype._write = function(chunks, encoding, cb) {\n  var output = chunks.toString ? chunks.toString() : chunks\n  if (this.label === false) {\n    console.log(output)\n  } else {\n    console.log(this.label+':', output)\n  }\n  process.nextTick(cb)\n}\n\n}).call(this,require('_process'))\n},{\""_process\"":51,\""stream\"":63,\""util\"":66}],41:[function(require,module,exports){\n\n},{}],42:[function(require,module,exports){\narguments[4][41][0].apply(exports,arguments)\n},{\""dup\"":41}],43:[function(require,module,exports){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('is-array')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\nBuffer.poolSize = 8192 // not used by this implementation\n\nvar rootParent = {}\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property\n *     on objects.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = (function () {\n  function Bar () {}\n  try {\n    var arr = new Uint8Array(1)\n    arr.foo = function () { return 42 }\n    arr.constructor = Bar\n    return arr.foo() === 42 && // typed array instances can be augmented\n        arr.constructor === Bar && // constructor can be set\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n})()\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\n/**\n * Class: Buffer\n * =============\n *\n * The Buffer constructor returns instances of `Uint8Array` that are augmented\n * with function properties for all the node `Buffer` API functions. We use\n * `Uint8Array` so that square bracket notation works as expected -- it returns\n * a single octet.\n *\n * By augmenting the instances, we can avoid modifying the `Uint8Array`\n * prototype.\n */\nfunction Buffer (arg) {\n  if (!(this instanceof Buffer)) {\n    // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\n    if (arguments.length > 1) return new Buffer(arg, arguments[1])\n    return new Buffer(arg)\n  }\n\n  this.length = 0\n  this.parent = undefined\n\n  // Common case.\n  if (typeof arg === 'number') {\n    return fromNumber(this, arg)\n  }\n\n  // Slightly less common case.\n  if (typeof arg === 'string') {\n    return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\n  }\n\n  // Unusual.\n  return fromObject(this, arg)\n}\n\nfunction fromNumber (that, length) {\n  that = allocate(that, length < 0 ? 0 : checked(length) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < length; i++) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\n\n  // Assumption: byteLength() return value is always < kMaxLength.\n  var length = byteLength(string, encoding) | 0\n  that = allocate(that, length)\n\n  that.write(string, encoding)\n  return that\n}\n\nfunction fromObject (that, object) {\n  if (Buffer.isBuffer(object)) return fromBuffer(that, object)\n\n  if (isArray(object)) return fromArray(that, object)\n\n  if (object == null) {\n    throw new TypeError('must start with number, buffer, array or string')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined') {\n    if (object.buffer instanceof ArrayBuffer) {\n      return fromTypedArray(that, object)\n    }\n    if (object instanceof ArrayBuffer) {\n      return fromArrayBuffer(that, object)\n    }\n  }\n\n  if (object.length) return fromArrayLike(that, object)\n\n  return fromJsonObject(that, object)\n}\n\nfunction fromBuffer (that, buffer) {\n  var length = checked(buffer.length) | 0\n  that = allocate(that, length)\n  buffer.copy(that, 0, 0, length)\n  return that\n}\n\nfunction fromArray (that, array) {\n  var length = checked(array.length) | 0\n  that = allocate(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\n// Duplicate of fromArray() to keep fromArray() monomorphic.\nfunction fromTypedArray (that, array) {\n  var length = checked(array.length) | 0\n  that = allocate(that, length)\n  // Truncating the elements is probably not what people expect from typed\n  // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\n  // of the old Buffer constructor.\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array) {\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    array.byteLength\n    that = Buffer._augment(new Uint8Array(array))\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromTypedArray(that, new Uint8Array(array))\n  }\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = checked(array.length) | 0\n  that = allocate(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\n// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\n// Returns a zero-length buffer for inputs that don't conform to the spec.\nfunction fromJsonObject (that, object) {\n  var array\n  var length = 0\n\n  if (object.type === 'Buffer' && isArray(object.data)) {\n    array = object.data\n    length = checked(array.length) | 0\n  }\n  that = allocate(that, length)\n\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction allocate (that, length) {\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = Buffer._augment(new Uint8Array(length))\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that.length = length\n    that._isBuffer = true\n  }\n\n  var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\n  if (fromPool) that.parent = rootParent\n\n  return that\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (subject, encoding) {\n  if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\n\n  var buf = new Buffer(subject, encoding)\n  delete buf.parent\n  return buf\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  var i = 0\n  var len = Math.min(x, y)\n  while (i < len) {\n    if (a[i] !== b[i]) break\n\n    ++i\n  }\n\n  if (i !== len) {\n    x = a[i]\n    y = b[i]\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'binary':\n    case 'base64':\n    case 'raw':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\n\n  if (list.length === 0) {\n    return new Buffer(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; i++) {\n      length += list[i].length\n    }\n  }\n\n  var buf = new Buffer(length)\n  var pos = 0\n  for (i = 0; i < list.length; i++) {\n    var item = list[i]\n    item.copy(buf, pos)\n    pos += item.length\n  }\n  return buf\n}\n\nfunction byteLength (string, encoding) {\n  if (typeof string !== 'string') string = '' + string\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'binary':\n      // Deprecated\n      case 'raw':\n      case 'raws':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\n// pre-set for values that may exist in the future\nBuffer.prototype.length = undefined\nBuffer.prototype.parent = undefined\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  start = start | 0\n  end = end === undefined || end === Infinity ? this.length : end | 0\n\n  if (!encoding) encoding = 'utf8'\n  if (start < 0) start = 0\n  if (end > this.length) end = this.length\n  if (end <= start) return ''\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'binary':\n        return binarySlice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return 0\n  return Buffer.compare(this, b)\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\n  if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\n  else if (byteOffset < -0x80000000) byteOffset = -0x80000000\n  byteOffset >>= 0\n\n  if (this.length === 0) return -1\n  if (byteOffset >= this.length) return -1\n\n  // Negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n  if (typeof val === 'string') {\n    if (val.length === 0) return -1 // special case: looking for empty string always fails\n    return String.prototype.indexOf.call(this, val, byteOffset)\n  }\n  if (Buffer.isBuffer(val)) {\n    return arrayIndexOf(this, val, byteOffset)\n  }\n  if (typeof val === 'number') {\n    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n    }\n    return arrayIndexOf(this, [ val ], byteOffset)\n  }\n\n  function arrayIndexOf (arr, val, byteOffset) {\n    var foundIndex = -1\n    for (var i = 0; byteOffset + i < arr.length; i++) {\n      if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\n      } else {\n        foundIndex = -1\n      }\n    }\n    return -1\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\n// `get` is deprecated\nBuffer.prototype.get = function get (offset) {\n  console.log('.get() is deprecated. Access using array indexes instead.')\n  return this.readUInt8(offset)\n}\n\n// `set` is deprecated\nBuffer.prototype.set = function set (v, offset) {\n  console.log('.set() is deprecated. Access using array indexes instead.')\n  return this.writeUInt8(v, offset)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; i++) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) throw new Error('Invalid hex string')\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    var swap = encoding\n    encoding = offset\n    offset = length | 0\n    length = swap\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'binary':\n        return binaryWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \""call stack size exceeded\"".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction binarySlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; i++) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = Buffer._augment(this.subarray(start, end))\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; i++) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  if (newBuf.length) newBuf.parent = this.parent || this\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = value\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = value\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = value\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = value\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = value < 0 ? 1 : 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = value < 0 ? 1 : 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = value\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = value\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = value\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\n  if (offset < 0) throw new RangeError('index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; i--) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; i++) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    target._set(this.subarray(start, start + len), targetStart)\n  }\n\n  return len\n}\n\n// fill(value, start=0, end=buffer.length)\nBuffer.prototype.fill = function fill (value, start, end) {\n  if (!value) value = 0\n  if (!start) start = 0\n  if (!end) end = this.length\n\n  if (end < start) throw new RangeError('end < start')\n\n  // Fill 0 bytes; we're done\n  if (end === start) return\n  if (this.length === 0) return\n\n  if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\n  if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\n\n  var i\n  if (typeof value === 'number') {\n    for (i = start; i < end; i++) {\n      this[i] = value\n    }\n  } else {\n    var bytes = utf8ToBytes(value.toString())\n    var len = bytes.length\n    for (i = start; i < end; i++) {\n      this[i] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n/**\n * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.\n * Added in Node 0.12. Only available in browsers that support ArrayBuffer.\n */\nBuffer.prototype.toArrayBuffer = function toArrayBuffer () {\n  if (typeof Uint8Array !== 'undefined') {\n    if (Buffer.TYPED_ARRAY_SUPPORT) {\n      return (new Buffer(this)).buffer\n    } else {\n      var buf = new Uint8Array(this.length)\n      for (var i = 0, len = buf.length; i < len; i += 1) {\n        buf[i] = this[i]\n      }\n      return buf.buffer\n    }\n  } else {\n    throw new TypeError('Buffer.toArrayBuffer not supported in this browser')\n  }\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar BP = Buffer.prototype\n\n/**\n * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods\n */\nBuffer._augment = function _augment (arr) {\n  arr.constructor = Buffer\n  arr._isBuffer = true\n\n  // save reference to original Uint8Array set method before overwriting\n  arr._set = arr.set\n\n  // deprecated\n  arr.get = BP.get\n  arr.set = BP.set\n\n  arr.write = BP.write\n  arr.toString = BP.toString\n  arr.toLocaleString = BP.toString\n  arr.toJSON = BP.toJSON\n  arr.equals = BP.equals\n  arr.compare = BP.compare\n  arr.indexOf = BP.indexOf\n  arr.copy = BP.copy\n  arr.slice = BP.slice\n  arr.readUIntLE = BP.readUIntLE\n  arr.readUIntBE = BP.readUIntBE\n  arr.readUInt8 = BP.readUInt8\n  arr.readUInt16LE = BP.readUInt16LE\n  arr.readUInt16BE = BP.readUInt16BE\n  arr.readUInt32LE = BP.readUInt32LE\n  arr.readUInt32BE = BP.readUInt32BE\n  arr.readIntLE = BP.readIntLE\n  arr.readIntBE = BP.readIntBE\n  arr.readInt8 = BP.readInt8\n  arr.readInt16LE = BP.readInt16LE\n  arr.readInt16BE = BP.readInt16BE\n  arr.readInt32LE = BP.readInt32LE\n  arr.readInt32BE = BP.readInt32BE\n  arr.readFloatLE = BP.readFloatLE\n  arr.readFloatBE = BP.readFloatBE\n  arr.readDoubleLE = BP.readDoubleLE\n  arr.readDoubleBE = BP.readDoubleBE\n  arr.writeUInt8 = BP.writeUInt8\n  arr.writeUIntLE = BP.writeUIntLE\n  arr.writeUIntBE = BP.writeUIntBE\n  arr.writeUInt16LE = BP.writeUInt16LE\n  arr.writeUInt16BE = BP.writeUInt16BE\n  arr.writeUInt32LE = BP.writeUInt32LE\n  arr.writeUInt32BE = BP.writeUInt32BE\n  arr.writeIntLE = BP.writeIntLE\n  arr.writeIntBE = BP.writeIntBE\n  arr.writeInt8 = BP.writeInt8\n  arr.writeInt16LE = BP.writeInt16LE\n  arr.writeInt16BE = BP.writeInt16BE\n  arr.writeInt32LE = BP.writeInt32LE\n  arr.writeInt32BE = BP.writeInt32BE\n  arr.writeFloatLE = BP.writeFloatLE\n  arr.writeFloatBE = BP.writeFloatBE\n  arr.writeDoubleLE = BP.writeDoubleLE\n  arr.writeDoubleBE = BP.writeDoubleBE\n  arr.fill = BP.fill\n  arr.inspect = BP.inspect\n  arr.toArrayBuffer = BP.toArrayBuffer\n\n  return arr\n}\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; i++) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; i++) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n},{\""base64-js\"":44,\""ieee754\"":45,\""is-array\"":46}],44:[function(require,module,exports){\nvar lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n;(function (exports) {\n\t'use strict';\n\n  var Arr = (typeof Uint8Array !== 'undefined')\n    ? Uint8Array\n    : Array\n\n\tvar PLUS   = '+'.charCodeAt(0)\n\tvar SLASH  = '/'.charCodeAt(0)\n\tvar NUMBER = '0'.charCodeAt(0)\n\tvar LOWER  = 'a'.charCodeAt(0)\n\tvar UPPER  = 'A'.charCodeAt(0)\n\tvar PLUS_URL_SAFE = '-'.charCodeAt(0)\n\tvar SLASH_URL_SAFE = '_'.charCodeAt(0)\n\n\tfunction decode (elt) {\n\t\tvar code = elt.charCodeAt(0)\n\t\tif (code === PLUS ||\n\t\t    code === PLUS_URL_SAFE)\n\t\t\treturn 62 // '+'\n\t\tif (code === SLASH ||\n\t\t    code === SLASH_URL_SAFE)\n\t\t\treturn 63 // '/'\n\t\tif (code < NUMBER)\n\t\t\treturn -1 //no match\n\t\tif (code < NUMBER + 10)\n\t\t\treturn code - NUMBER + 26 + 26\n\t\tif (code < UPPER + 26)\n\t\t\treturn code - UPPER\n\t\tif (code < LOWER + 26)\n\t\t\treturn code - LOWER + 26\n\t}\n\n\tfunction b64ToByteArray (b64) {\n\t\tvar i, j, l, tmp, placeHolders, arr\n\n\t\tif (b64.length % 4 > 0) {\n\t\t\tthrow new Error('Invalid string. Length must be a multiple of 4')\n\t\t}\n\n\t\t// the number of equal signs (place holders)\n\t\t// if there are two placeholders, than the two characters before it\n\t\t// represent one byte\n\t\t// if there is only one, then the three characters before it represent 2 bytes\n\t\t// this is just a cheap hack to not do indexOf twice\n\t\tvar len = b64.length\n\t\tplaceHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0\n\n\t\t// base64 is 4/3 + up to two characters of the original data\n\t\tarr = new Arr(b64.length * 3 / 4 - placeHolders)\n\n\t\t// if there are placeholders, only get up to the last complete 4 chars\n\t\tl = placeHolders > 0 ? b64.length - 4 : b64.length\n\n\t\tvar L = 0\n\n\t\tfunction push (v) {\n\t\t\tarr[L++] = v\n\t\t}\n\n\t\tfor (i = 0, j = 0; i < l; i += 4, j += 3) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))\n\t\t\tpush((tmp & 0xFF0000) >> 16)\n\t\t\tpush((tmp & 0xFF00) >> 8)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\tif (placeHolders === 2) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)\n\t\t\tpush(tmp & 0xFF)\n\t\t} else if (placeHolders === 1) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)\n\t\t\tpush((tmp >> 8) & 0xFF)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\treturn arr\n\t}\n\n\tfunction uint8ToBase64 (uint8) {\n\t\tvar i,\n\t\t\textraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\n\t\t\toutput = \""\"",\n\t\t\ttemp, length\n\n\t\tfunction encode (num) {\n\t\t\treturn lookup.charAt(num)\n\t\t}\n\n\t\tfunction tripletToBase64 (num) {\n\t\t\treturn encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)\n\t\t}\n\n\t\t// go through the array every three bytes, we'll deal with trailing stuff later\n\t\tfor (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\n\t\t\ttemp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n\t\t\toutput += tripletToBase64(temp)\n\t\t}\n\n\t\t// pad the end with zeros, but make sure to not forget the extra bytes\n\t\tswitch (extraBytes) {\n\t\t\tcase 1:\n\t\t\t\ttemp = uint8[uint8.length - 1]\n\t\t\t\toutput += encode(temp >> 2)\n\t\t\t\toutput += encode((temp << 4) & 0x3F)\n\t\t\t\toutput += '=='\n\t\t\t\tbreak\n\t\t\tcase 2:\n\t\t\t\ttemp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])\n\t\t\t\toutput += encode(temp >> 10)\n\t\t\t\toutput += encode((temp >> 4) & 0x3F)\n\t\t\t\toutput += encode((temp << 2) & 0x3F)\n\t\t\t\toutput += '='\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn output\n\t}\n\n\texports.toByteArray = b64ToByteArray\n\texports.fromByteArray = uint8ToBase64\n}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))\n\n},{}],45:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n},{}],46:[function(require,module,exports){\n\n/**\n * isArray\n */\n\nvar isArray = Array.isArray;\n\n/**\n * toString\n */\n\nvar str = Object.prototype.toString;\n\n/**\n * Whether or not the given `val`\n * is an array.\n *\n * example:\n *\n *        isArray([]);\n *        // > true\n *        isArray(arguments);\n *        // > false\n *        isArray('');\n *        // > false\n *\n * @param {mixed} val\n * @return {bool}\n */\n\nmodule.exports = isArray || function (val) {\n  return !! val && '[object Array]' == str.call(val);\n};\n\n},{}],47:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      }\n      throw TypeError('Uncaught, unspecified \""error\"" event.');\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \""newListener\""! Before\n  // adding it to the listeners, first emit \""newListener\"".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],48:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],49:[function(require,module,exports){\nmodule.exports = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n},{}],50:[function(require,module,exports){\nexports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n    if (typeof location !== 'undefined') {\n        return location.hostname\n    }\n    else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n    return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n    return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n    if (typeof navigator !== 'undefined') {\n        return navigator.appVersion;\n    }\n    return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n    return '/tmp';\n};\n\nexports.EOL = '\\n';\n\n},{}],51:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = setTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        setTimeout(drainQueue, 0);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],52:[function(require,module,exports){\nmodule.exports = require(\""./lib/_stream_duplex.js\"")\n\n},{\""./lib/_stream_duplex.js\"":53}],53:[function(require,module,exports){\n(function (process){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n/*</replacement>*/\n\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\nforEach(objectKeys(Writable.prototype), function(method) {\n  if (!Duplex.prototype[method])\n    Duplex.prototype[method] = Writable.prototype[method];\n});\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex))\n    return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false)\n    this.readable = false;\n\n  if (options && options.writable === false)\n    this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false)\n    this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended)\n    return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(this.end.bind(this));\n}\n\nfunction forEach (xs, f) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    f(xs[i], i);\n  }\n}\n\n}).call(this,require('_process'))\n},{\""./_stream_readable\"":55,\""./_stream_writable\"":57,\""_process\"":51,\""core-util-is\"":58,\""inherits\"":48}],54:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough))\n    return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function(chunk, encoding, cb) {\n  cb(null, chunk);\n};\n\n},{\""./_stream_transform\"":56,\""core-util-is\"":58,\""inherits\"":48}],55:[function(require,module,exports){\n(function (process){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n\n/*<replacement>*/\nvar Buffer = require('buffer').Buffer;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\nvar EE = require('events').EventEmitter;\n\n/*<replacement>*/\nif (!EE.listenerCount) EE.listenerCount = function(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\nvar Stream = require('stream');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar StringDecoder;\n\n\n/*<replacement>*/\nvar debug = require('util');\nif (debug && debug.debuglog) {\n  debug = debug.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\n\nutil.inherits(Readable, Stream);\n\nfunction ReadableState(options, stream) {\n  var Duplex = require('./_stream_duplex');\n\n  options = options || {};\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \""don't call _read preemptively ever\""\n  var hwm = options.highWaterMark;\n  var defaultHwm = options.objectMode ? 16 : 16 * 1024;\n  this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = ~~this.highWaterMark;\n\n  this.buffer = [];\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \""later\"" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (stream instanceof Duplex)\n    this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // when piping, we only care about 'readable' events that happen\n  // after read()ing all the bytes and not getting any pushback.\n  this.ranOut = false;\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder)\n      StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  var Duplex = require('./_stream_duplex');\n\n  if (!(this instanceof Readable))\n    return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  Stream.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function(chunk, encoding) {\n  var state = this._readableState;\n\n  if (util.isString(chunk) && !state.objectMode) {\n    encoding = encoding || state.defaultEncoding;\n    if (encoding !== state.encoding) {\n      chunk = new Buffer(chunk, encoding);\n      encoding = '';\n    }\n  }\n\n  return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function(chunk) {\n  var state = this._readableState;\n  return readableAddChunk(this, state, chunk, '', true);\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n  var er = chunkInvalid(state, chunk);\n  if (er) {\n    stream.emit('error', er);\n  } else if (util.isNullOrUndefined(chunk)) {\n    state.reading = false;\n    if (!state.ended)\n      onEofChunk(stream, state);\n  } else if (state.objectMode || chunk && chunk.length > 0) {\n    if (state.ended && !addToFront) {\n      var e = new Error('stream.push() after EOF');\n      stream.emit('error', e);\n    } else if (state.endEmitted && addToFront) {\n      var e = new Error('stream.unshift() after end event');\n      stream.emit('error', e);\n    } else {\n      if (state.decoder && !addToFront && !encoding)\n        chunk = state.decoder.write(chunk);\n\n      if (!addToFront)\n        state.reading = false;\n\n      // if we want the data now, just emit it.\n      if (state.flowing && state.length === 0 && !state.sync) {\n        stream.emit('data', chunk);\n        stream.read(0);\n      } else {\n        // update the buffer info.\n        state.length += state.objectMode ? 1 : chunk.length;\n        if (addToFront)\n          state.buffer.unshift(chunk);\n        else\n          state.buffer.push(chunk);\n\n        if (state.needReadable)\n          emitReadable(stream);\n      }\n\n      maybeReadMore(stream, state);\n    }\n  } else if (!addToFront) {\n    state.reading = false;\n  }\n\n  return needMoreData(state);\n}\n\n\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended &&\n         (state.needReadable ||\n          state.length < state.highWaterMark ||\n          state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function(enc) {\n  if (!StringDecoder)\n    StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 128MB\nvar MAX_HWM = 0x800000;\nfunction roundUpToNextPowerOf2(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2\n    n--;\n    for (var p = 1; p < 32; p <<= 1) n |= n >> p;\n    n++;\n  }\n  return n;\n}\n\nfunction howMuchToRead(n, state) {\n  if (state.length === 0 && state.ended)\n    return 0;\n\n  if (state.objectMode)\n    return n === 0 ? 0 : 1;\n\n  if (isNaN(n) || util.isNull(n)) {\n    // only flow one buffer at a time\n    if (state.flowing && state.buffer.length)\n      return state.buffer[0].length;\n    else\n      return state.length;\n  }\n\n  if (n <= 0)\n    return 0;\n\n  // If we're asking for more than the target buffer level,\n  // then raise the water mark.  Bump up to the next highest\n  // power of 2, to prevent increasing it excessively in tiny\n  // amounts.\n  if (n > state.highWaterMark)\n    state.highWaterMark = roundUpToNextPowerOf2(n);\n\n  // don't have that much.  return null, unless we've ended.\n  if (n > state.length) {\n    if (!state.ended) {\n      state.needReadable = true;\n      return 0;\n    } else\n      return state.length;\n  }\n\n  return n;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function(n) {\n  debug('read', n);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (!util.isNumber(n) || n > 0)\n    state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 &&\n      state.needReadable &&\n      (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended)\n      endReadable(this);\n    else\n      emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0)\n      endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  }\n\n  if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0)\n      state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n  }\n\n  // If _read pushed data synchronously, then `reading` will be false,\n  // and we need to re-evaluate how much data we can return to the user.\n  if (doRead && !state.reading)\n    n = howMuchToRead(nOrig, state);\n\n  var ret;\n  if (n > 0)\n    ret = fromList(n, state);\n  else\n    ret = null;\n\n  if (util.isNull(ret)) {\n    state.needReadable = true;\n    n = 0;\n  }\n\n  state.length -= n;\n\n  // If we have nothing in the buffer, then we want to know\n  // as soon as we *do* get something into the buffer.\n  if (state.length === 0 && !state.ended)\n    state.needReadable = true;\n\n  // If we tried to read() past the EOF, then emit end on the next tick.\n  if (nOrig !== n && state.ended && state.length === 0)\n    endReadable(this);\n\n  if (!util.isNull(ret))\n    this.emit('data', ret);\n\n  return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n  var er = null;\n  if (!util.isBuffer(chunk) &&\n      !util.isString(chunk) &&\n      !util.isNullOrUndefined(chunk) &&\n      !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n\nfunction onEofChunk(stream, state) {\n  if (state.decoder && !state.ended) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync)\n      process.nextTick(function() {\n        emitReadable_(stream);\n      });\n    else\n      emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(function() {\n      maybeReadMore_(stream, state);\n    });\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended &&\n         state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n    else\n      len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \""length\"" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function(n) {\n  this.emit('error', new Error('not implemented'));\n};\n\nReadable.prototype.pipe = function(dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) &&\n              dest !== process.stdout &&\n              dest !== process.stderr;\n\n  var endFn = doEnd ? onend : cleanup;\n  if (state.endEmitted)\n    process.nextTick(endFn);\n  else\n    src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable) {\n    debug('onunpipe');\n    if (readable === src) {\n      cleanup();\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', cleanup);\n    src.removeListener('data', ondata);\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain &&\n        (!dest._writableState || dest._writableState.needDrain))\n      ondrain();\n  }\n\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    if (false === ret) {\n      debug('false write response, pause',\n            src._readableState.awaitDrain);\n      src._readableState.awaitDrain++;\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EE.listenerCount(dest, 'error') === 0)\n      dest.emit('error', er);\n  }\n  // This is a brutally ugly hack to make sure that our error handler\n  // is attached before any userland ones.  NEVER DO THIS.\n  if (!dest._events || !dest._events.error)\n    dest.on('error', onerror);\n  else if (isArray(dest._events.error))\n    dest._events.error.unshift(onerror);\n  else\n    dest._events.error = [onerror, dest._events.error];\n\n\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain)\n      state.awaitDrain--;\n    if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\n\nReadable.prototype.unpipe = function(dest) {\n  var state = this._readableState;\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0)\n    return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes)\n      return this;\n\n    if (!dest)\n      dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest)\n      dest.emit('unpipe', this);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++)\n      dests[i].emit('unpipe', this);\n    return this;\n  }\n\n  // try to find the right one.\n  var i = indexOf(state.pipes, dest);\n  if (i === -1)\n    return this;\n\n  state.pipes.splice(i, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1)\n    state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function(ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  // If listening to data, and it has not explicitly been paused,\n  // then call resume to start the flow of data on the next tick.\n  if (ev === 'data' && false !== this._readableState.flowing) {\n    this.resume();\n  }\n\n  if (ev === 'readable' && this.readable) {\n    var state = this._readableState;\n    if (!state.readableListening) {\n      state.readableListening = true;\n      state.emittedReadable = false;\n      state.needReadable = true;\n      if (!state.reading) {\n        var self = this;\n        process.nextTick(function() {\n          debug('readable nexttick read 0');\n          self.read(0);\n        });\n      } else if (state.length) {\n        emitReadable(this, state);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function() {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    if (!state.reading) {\n      debug('resume read 0');\n      this.read(0);\n    }\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(function() {\n      resume_(stream, state);\n    });\n  }\n}\n\nfunction resume_(stream, state) {\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading)\n    stream.read(0);\n}\n\nReadable.prototype.pause = function() {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  if (state.flowing) {\n    do {\n      var chunk = stream.read();\n    } while (null !== chunk && state.flowing);\n  }\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function(stream) {\n  var state = this._readableState;\n  var paused = false;\n\n  var self = this;\n  stream.on('end', function() {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length)\n        self.push(chunk);\n    }\n\n    self.push(null);\n  });\n\n  stream.on('data', function(chunk) {\n    debug('wrapped data');\n    if (state.decoder)\n      chunk = state.decoder.write(chunk);\n    if (!chunk || !state.objectMode && !chunk.length)\n      return;\n\n    var ret = self.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {\n      this[i] = function(method) { return function() {\n        return stream[method].apply(stream, arguments);\n      }}(i);\n    }\n  }\n\n  // proxy certain important events.\n  var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n  forEach(events, function(ev) {\n    stream.on(ev, self.emit.bind(self, ev));\n  });\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  self._read = function(n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return self;\n};\n\n\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\nfunction fromList(n, state) {\n  var list = state.buffer;\n  var length = state.length;\n  var stringMode = !!state.decoder;\n  var objectMode = !!state.objectMode;\n  var ret;\n\n  // nothing in the list, definitely empty.\n  if (list.length === 0)\n    return null;\n\n  if (length === 0)\n    ret = null;\n  else if (objectMode)\n    ret = list.shift();\n  else if (!n || n >= length) {\n    // read it all, truncate the array.\n    if (stringMode)\n      ret = list.join('');\n    else\n      ret = Buffer.concat(list, length);\n    list.length = 0;\n  } else {\n    // read just some of it.\n    if (n < list[0].length) {\n      // just take a part of the first list item.\n      // slice is the same for buffers and strings.\n      var buf = list[0];\n      ret = buf.slice(0, n);\n      list[0] = buf.slice(n);\n    } else if (n === list[0].length) {\n      // first list is a perfect match\n      ret = list.shift();\n    } else {\n      // complex case.\n      // we have enough to cover it, but it spans past the first buffer.\n      if (stringMode)\n        ret = '';\n      else\n        ret = new Buffer(n);\n\n      var c = 0;\n      for (var i = 0, l = list.length; i < l && c < n; i++) {\n        var buf = list[0];\n        var cpy = Math.min(n - c, buf.length);\n\n        if (stringMode)\n          ret += buf.slice(0, cpy);\n        else\n          buf.copy(ret, c, 0, cpy);\n\n        if (cpy < buf.length)\n          list[0] = buf.slice(cpy);\n        else\n          list.shift();\n\n        c += cpy;\n      }\n    }\n  }\n\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0)\n    throw new Error('endReadable called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(function() {\n      // Check that we didn't get one last unshift.\n      if (!state.endEmitted && state.length === 0) {\n        state.endEmitted = true;\n        stream.readable = false;\n        stream.emit('end');\n      }\n    });\n  }\n}\n\nfunction forEach (xs, f) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    f(xs[i], i);\n  }\n}\n\nfunction indexOf (xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}\n\n}).call(this,require('_process'))\n},{\""./_stream_duplex\"":53,\""_process\"":51,\""buffer\"":43,\""core-util-is\"":58,\""events\"":47,\""inherits\"":48,\""isarray\"":49,\""stream\"":63,\""string_decoder/\"":64,\""util\"":42}],56:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \""filter\"",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\n\nfunction TransformState(options, stream) {\n  this.afterTransform = function(er, data) {\n    return afterTransform(stream, er, data);\n  };\n\n  this.needTransform = false;\n  this.transforming = false;\n  this.writecb = null;\n  this.writechunk = null;\n}\n\nfunction afterTransform(stream, er, data) {\n  var ts = stream._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb)\n    return stream.emit('error', new Error('no writecb in Transform class'));\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (!util.isNullOrUndefined(data))\n    stream.push(data);\n\n  if (cb)\n    cb(er);\n\n  var rs = stream._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    stream._read(rs.highWaterMark);\n  }\n}\n\n\nfunction Transform(options) {\n  if (!(this instanceof Transform))\n    return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = new TransformState(options, this);\n\n  // when the writable side finishes, then flush out anything remaining.\n  var stream = this;\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  this.once('prefinish', function() {\n    if (util.isFunction(this._flush))\n      this._flush(function(er) {\n        done(stream, er);\n      });\n    else\n      done(stream);\n  });\n}\n\nTransform.prototype.push = function(chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function(chunk, encoding, cb) {\n  throw new Error('not implemented');\n};\n\nTransform.prototype._write = function(chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform ||\n        rs.needReadable ||\n        rs.length < rs.highWaterMark)\n      this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function(n) {\n  var ts = this._transformState;\n\n  if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\n\nfunction done(stream, er) {\n  if (er)\n    return stream.emit('error', er);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  var ws = stream._writableState;\n  var ts = stream._transformState;\n\n  if (ws.length)\n    throw new Error('calling transform done when ws.length != 0');\n\n  if (ts.transforming)\n    throw new Error('calling transform done when still transforming');\n\n  return stream.push(null);\n}\n\n},{\""./_stream_duplex\"":53,\""core-util-is\"":58,\""inherits\"":48}],57:[function(require,module,exports){\n(function (process){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, cb), and it'll handle all\n// the drain event emission and buffering.\n\nmodule.exports = Writable;\n\n/*<replacement>*/\nvar Buffer = require('buffer').Buffer;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Stream = require('stream');\n\nutil.inherits(Writable, Stream);\n\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n}\n\nfunction WritableState(options, stream) {\n  var Duplex = require('./_stream_duplex');\n\n  options = options || {};\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var defaultHwm = options.objectMode ? 16 : 16 * 1024;\n  this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (stream instanceof Duplex)\n    this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // cast to ints.\n  this.highWaterMark = ~~this.highWaterMark;\n\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \""later\"" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function(er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.buffer = [];\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n}\n\nfunction Writable(options) {\n  var Duplex = require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, though they're not\n  // instanceof Writable, they're instanceof Readable.\n  if (!(this instanceof Writable) && !(this instanceof Duplex))\n    return new Writable(options);\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function() {\n  this.emit('error', new Error('Cannot pipe. Not readable.'));\n};\n\n\nfunction writeAfterEnd(stream, state, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  process.nextTick(function() {\n    cb(er);\n  });\n}\n\n// If we get something that is not a buffer, string, null, or undefined,\n// and we're not in objectMode, then that's an error.\n// Otherwise stream chunks are all considered to be of length=1, and the\n// watermarks determine how many objects to keep in the buffer, rather than\n// how many bytes or characters.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  if (!util.isBuffer(chunk) &&\n      !util.isString(chunk) &&\n      !util.isNullOrUndefined(chunk) &&\n      !state.objectMode) {\n    var er = new TypeError('Invalid non-string/buffer chunk');\n    stream.emit('error', er);\n    process.nextTick(function() {\n      cb(er);\n    });\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function(chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n\n  if (util.isFunction(encoding)) {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (util.isBuffer(chunk))\n    encoding = 'buffer';\n  else if (!encoding)\n    encoding = state.defaultEncoding;\n\n  if (!util.isFunction(cb))\n    cb = function() {};\n\n  if (state.ended)\n    writeAfterEnd(this, state, cb);\n  else if (validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function() {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function() {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing &&\n        !state.corked &&\n        !state.finished &&\n        !state.bufferProcessing &&\n        state.buffer.length)\n      clearBuffer(this, state);\n  }\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode &&\n      state.decodeStrings !== false &&\n      util.isString(chunk)) {\n    chunk = new Buffer(chunk, encoding);\n  }\n  return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, cb) {\n  chunk = decodeChunk(state, chunk, encoding);\n  if (util.isBuffer(chunk))\n    encoding = 'buffer';\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret)\n    state.needDrain = true;\n\n  if (state.writing || state.corked)\n    state.buffer.push(new WriteReq(chunk, encoding, cb));\n  else\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev)\n    stream._writev(chunk, state.onwrite);\n  else\n    stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  if (sync)\n    process.nextTick(function() {\n      state.pendingcb--;\n      cb(er);\n    });\n  else {\n    state.pendingcb--;\n    cb(er);\n  }\n\n  stream._writableState.errorEmitted = true;\n  stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er)\n    onwriteError(stream, state, sync, er, cb);\n  else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(stream, state);\n\n    if (!finished &&\n        !state.corked &&\n        !state.bufferProcessing &&\n        state.buffer.length) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      process.nextTick(function() {\n        afterWrite(stream, state, finished, cb);\n      });\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished)\n    onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n\n  if (stream._writev && state.buffer.length > 1) {\n    // Fast case, write everything using _writev()\n    var cbs = [];\n    for (var c = 0; c < state.buffer.length; c++)\n      cbs.push(state.buffer[c].callback);\n\n    // count the one we are adding, as well.\n    // TODO(isaacs) clean this up\n    state.pendingcb++;\n    doWrite(stream, state, true, state.length, state.buffer, '', function(err) {\n      for (var i = 0; i < cbs.length; i++) {\n        state.pendingcb--;\n        cbs[i](err);\n      }\n    });\n\n    // Clear buffer\n    state.buffer = [];\n  } else {\n    // Slow case, write chunks one-by-one\n    for (var c = 0; c < state.buffer.length; c++) {\n      var entry = state.buffer[c];\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        c++;\n        break;\n      }\n    }\n\n    if (c < state.buffer.length)\n      state.buffer = state.buffer.slice(c);\n    else\n      state.buffer.length = 0;\n  }\n\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function(chunk, encoding, cb) {\n  cb(new Error('not implemented'));\n\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function(chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (util.isFunction(chunk)) {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (util.isFunction(encoding)) {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (!util.isNullOrUndefined(chunk))\n    this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending && !state.finished)\n    endWritable(this, state, cb);\n};\n\n\nfunction needFinish(stream, state) {\n  return (state.ending &&\n          state.length === 0 &&\n          !state.finished &&\n          !state.writing);\n}\n\nfunction prefinish(stream, state) {\n  if (!state.prefinished) {\n    state.prefinished = true;\n    stream.emit('prefinish');\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(stream, state);\n  if (need) {\n    if (state.pendingcb === 0) {\n      prefinish(stream, state);\n      state.finished = true;\n      stream.emit('finish');\n    } else\n      prefinish(stream, state);\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished)\n      process.nextTick(cb);\n    else\n      stream.once('finish', cb);\n  }\n  state.ended = true;\n}\n\n}).call(this,require('_process'))\n},{\""./_stream_duplex\"":53,\""_process\"":51,\""buffer\"":43,\""core-util-is\"":58,\""inherits\"":48,\""stream\"":63}],58:[function(require,module,exports){\n(function (Buffer){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nfunction isBuffer(arg) {\n  return Buffer.isBuffer(arg);\n}\nexports.isBuffer = isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n}).call(this,require(\""buffer\"").Buffer)\n},{\""buffer\"":43}],59:[function(require,module,exports){\nmodule.exports = require(\""./lib/_stream_passthrough.js\"")\n\n},{\""./lib/_stream_passthrough.js\"":54}],60:[function(require,module,exports){\nexports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = require('stream');\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n\n},{\""./lib/_stream_duplex.js\"":53,\""./lib/_stream_passthrough.js\"":54,\""./lib/_stream_readable.js\"":55,\""./lib/_stream_transform.js\"":56,\""./lib/_stream_writable.js\"":57,\""stream\"":63}],61:[function(require,module,exports){\nmodule.exports = require(\""./lib/_stream_transform.js\"")\n\n},{\""./lib/_stream_transform.js\"":56}],62:[function(require,module,exports){\nmodule.exports = require(\""./lib/_stream_writable.js\"")\n\n},{\""./lib/_stream_writable.js\"":57}],63:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n\n},{\""events\"":47,\""inherits\"":48,\""readable-stream/duplex.js\"":52,\""readable-stream/passthrough.js\"":59,\""readable-stream/readable.js\"":60,\""readable-stream/transform.js\"":61,\""readable-stream/writable.js\"":62}],64:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar Buffer = require('buffer').Buffer;\n\nvar isBufferEncoding = Buffer.isEncoding\n  || function(encoding) {\n       switch (encoding && encoding.toLowerCase()) {\n         case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n         default: return false;\n       }\n     }\n\n\nfunction assertEncoding(encoding) {\n  if (encoding && !isBufferEncoding(encoding)) {\n    throw new Error('Unknown encoding: ' + encoding);\n  }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nvar StringDecoder = exports.StringDecoder = function(encoding) {\n  this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n  assertEncoding(encoding);\n  switch (this.encoding) {\n    case 'utf8':\n      // CESU-8 represents each of Surrogate Pair by 3-bytes\n      this.surrogateSize = 3;\n      break;\n    case 'ucs2':\n    case 'utf16le':\n      // UTF-16 represents each of Surrogate Pair by 2-bytes\n      this.surrogateSize = 2;\n      this.detectIncompleteChar = utf16DetectIncompleteChar;\n      break;\n    case 'base64':\n      // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n      this.surrogateSize = 3;\n      this.detectIncompleteChar = base64DetectIncompleteChar;\n      break;\n    default:\n      this.write = passThroughWrite;\n      return;\n  }\n\n  // Enough space to store all bytes of a single character. UTF-8 needs 4\n  // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n  this.charBuffer = new Buffer(6);\n  // Number of bytes received for the current incomplete multi-byte character.\n  this.charReceived = 0;\n  // Number of bytes expected for the current incomplete multi-byte character.\n  this.charLength = 0;\n};\n\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n  var charStr = '';\n  // if our last write ended with an incomplete multibyte character\n  while (this.charLength) {\n    // determine how many remaining bytes this buffer has to offer for this char\n    var available = (buffer.length >= this.charLength - this.charReceived) ?\n        this.charLength - this.charReceived :\n        buffer.length;\n\n    // add the new bytes to the char buffer\n    buffer.copy(this.charBuffer, this.charReceived, 0, available);\n    this.charReceived += available;\n\n    if (this.charReceived < this.charLength) {\n      // still not enough chars in this buffer? wait for more ...\n      return '';\n    }\n\n    // remove bytes belonging to the current character from the buffer\n    buffer = buffer.slice(available, buffer.length);\n\n    // get the character that was split\n    charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n    // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n    var charCode = charStr.charCodeAt(charStr.length - 1);\n    if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n      this.charLength += this.surrogateSize;\n      charStr = '';\n      continue;\n    }\n    this.charReceived = this.charLength = 0;\n\n    // if there are no more bytes in this buffer, just emit our char\n    if (buffer.length === 0) {\n      return charStr;\n    }\n    break;\n  }\n\n  // determine and set charLength / charReceived\n  this.detectIncompleteChar(buffer);\n\n  var end = buffer.length;\n  if (this.charLength) {\n    // buffer the incomplete character bytes we got\n    buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n    end -= this.charReceived;\n  }\n\n  charStr += buffer.toString(this.encoding, 0, end);\n\n  var end = charStr.length - 1;\n  var charCode = charStr.charCodeAt(end);\n  // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n  if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n    var size = this.surrogateSize;\n    this.charLength += size;\n    this.charReceived += size;\n    this.charBuffer.copy(this.charBuffer, size, 0, size);\n    buffer.copy(this.charBuffer, 0, 0, size);\n    return charStr.substring(0, end);\n  }\n\n  // or just emit the charStr\n  return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n  // determine how many bytes we have to check at the end of this buffer\n  var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n  // Figure out if one of the last i bytes of our buffer announces an\n  // incomplete char.\n  for (; i > 0; i--) {\n    var c = buffer[buffer.length - i];\n\n    // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n    // 110XXXXX\n    if (i == 1 && c >> 5 == 0x06) {\n      this.charLength = 2;\n      break;\n    }\n\n    // 1110XXXX\n    if (i <= 2 && c >> 4 == 0x0E) {\n      this.charLength = 3;\n      break;\n    }\n\n    // 11110XXX\n    if (i <= 3 && c >> 3 == 0x1E) {\n      this.charLength = 4;\n      break;\n    }\n  }\n  this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n  var res = '';\n  if (buffer && buffer.length)\n    res = this.write(buffer);\n\n  if (this.charReceived) {\n    var cr = this.charReceived;\n    var buf = this.charBuffer;\n    var enc = this.encoding;\n    res += buf.slice(0, cr).toString(enc);\n  }\n\n  return res;\n};\n\nfunction passThroughWrite(buffer) {\n  return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n  this.charReceived = buffer.length % 2;\n  this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n  this.charReceived = buffer.length % 3;\n  this.charLength = this.charReceived ? 3 : 0;\n}\n\n},{\""buffer\"":43}],65:[function(require,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},{}],66:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \""Software\""), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \""options\"" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \""name\"": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\""|\""$/g, '')\n                                             .replace(/'/g, \""\\\\'\"")\n                                             .replace(/\\\\\""/g, '\""') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \""object\"", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\""([a-zA-Z_][a-zA-Z_0-9]*)\""$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \""\\\\'\"")\n                 .replace(/\\\\\""/g, '\""')\n                 .replace(/(^\""|\""$)/g, \""'\"");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,require('_process'),typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""./support/isBuffer\"":65,\""_process\"":51,\""inherits\"":48}],67:[function(require,module,exports){\n/* See LICENSE file for terms of use */\n\n/*\n * Text diff implementation.\n *\n * This library supports the following APIS:\n * JsDiff.diffChars: Character by character diff\n * JsDiff.diffWords: Word (as defined by \\b regex) diff which ignores whitespace\n * JsDiff.diffLines: Line based diff\n *\n * JsDiff.diffCss: Diff targeted at CSS content\n *\n * These methods are based on the implementation proposed in\n * \""An O(ND) Difference Algorithm and its Variations\"" (Myers, 1986).\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927\n */\n(function(global, undefined) {\n  var objectPrototypeToString = Object.prototype.toString;\n\n  /*istanbul ignore next*/\n  function map(arr, mapper, that) {\n    if (Array.prototype.map) {\n      return Array.prototype.map.call(arr, mapper, that);\n    }\n\n    var other = new Array(arr.length);\n\n    for (var i = 0, n = arr.length; i < n; i++) {\n      other[i] = mapper.call(that, arr[i], i, arr);\n    }\n    return other;\n  }\n  function clonePath(path) {\n    return { newPos: path.newPos, components: path.components.slice(0) };\n  }\n  function removeEmpty(array) {\n    var ret = [];\n    for (var i = 0; i < array.length; i++) {\n      if (array[i]) {\n        ret.push(array[i]);\n      }\n    }\n    return ret;\n  }\n  function escapeHTML(s) {\n    var n = s;\n    n = n.replace(/&/g, '&amp;');\n    n = n.replace(/</g, '&lt;');\n    n = n.replace(/>/g, '&gt;');\n    n = n.replace(/\""/g, '&quot;');\n\n    return n;\n  }\n\n  // This function handles the presence of circular references by bailing out when encountering an\n  // object that is already on the \""stack\"" of items being processed.\n  function canonicalize(obj, stack, replacementStack) {\n    stack = stack || [];\n    replacementStack = replacementStack || [];\n\n    var i;\n\n    for (i = 0; i < stack.length; i += 1) {\n      if (stack[i] === obj) {\n        return replacementStack[i];\n      }\n    }\n\n    var canonicalizedObj;\n\n    if ('[object Array]' === objectPrototypeToString.call(obj)) {\n      stack.push(obj);\n      canonicalizedObj = new Array(obj.length);\n      replacementStack.push(canonicalizedObj);\n      for (i = 0; i < obj.length; i += 1) {\n        canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack);\n      }\n      stack.pop();\n      replacementStack.pop();\n    } else if (typeof obj === 'object' && obj !== null) {\n      stack.push(obj);\n      canonicalizedObj = {};\n      replacementStack.push(canonicalizedObj);\n      var sortedKeys = [],\n          key;\n      for (key in obj) {\n        sortedKeys.push(key);\n      }\n      sortedKeys.sort();\n      for (i = 0; i < sortedKeys.length; i += 1) {\n        key = sortedKeys[i];\n        canonicalizedObj[key] = canonicalize(obj[key], stack, replacementStack);\n      }\n      stack.pop();\n      replacementStack.pop();\n    } else {\n      canonicalizedObj = obj;\n    }\n    return canonicalizedObj;\n  }\n\n  function buildValues(components, newString, oldString, useLongestToken) {\n    var componentPos = 0,\n        componentLen = components.length,\n        newPos = 0,\n        oldPos = 0;\n\n    for (; componentPos < componentLen; componentPos++) {\n      var component = components[componentPos];\n      if (!component.removed) {\n        if (!component.added && useLongestToken) {\n          var value = newString.slice(newPos, newPos + component.count);\n          value = map(value, function(value, i) {\n            var oldValue = oldString[oldPos + i];\n            return oldValue.length > value.length ? oldValue : value;\n          });\n\n          component.value = value.join('');\n        } else {\n          component.value = newString.slice(newPos, newPos + component.count).join('');\n        }\n        newPos += component.count;\n\n        // Common case\n        if (!component.added) {\n          oldPos += component.count;\n        }\n      } else {\n        component.value = oldString.slice(oldPos, oldPos + component.count).join('');\n        oldPos += component.count;\n\n        // Reverse add and remove so removes are output first to match common convention\n        // The diffing algorithm is tied to add then remove output and this is the simplest\n        // route to get the desired output with minimal overhead.\n        if (componentPos && components[componentPos - 1].added) {\n          var tmp = components[componentPos - 1];\n          components[componentPos - 1] = components[componentPos];\n          components[componentPos] = tmp;\n        }\n      }\n    }\n\n    return components;\n  }\n\n  function Diff(ignoreWhitespace) {\n    this.ignoreWhitespace = ignoreWhitespace;\n  }\n  Diff.prototype = {\n    diff: function(oldString, newString, callback) {\n      var self = this;\n\n      function done(value) {\n        if (callback) {\n          setTimeout(function() { callback(undefined, value); }, 0);\n          return true;\n        } else {\n          return value;\n        }\n      }\n\n      // Handle the identity case (this is due to unrolling editLength == 0\n      if (newString === oldString) {\n        return done([{ value: newString }]);\n      }\n      if (!newString) {\n        return done([{ value: oldString, removed: true }]);\n      }\n      if (!oldString) {\n        return done([{ value: newString, added: true }]);\n      }\n\n      newString = this.tokenize(newString);\n      oldString = this.tokenize(oldString);\n\n      var newLen = newString.length, oldLen = oldString.length;\n      var editLength = 1;\n      var maxEditLength = newLen + oldLen;\n      var bestPath = [{ newPos: -1, components: [] }];\n\n      // Seed editLength = 0, i.e. the content starts with the same values\n      var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n      if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n        // Identity per the equality and tokenizer\n        return done([{value: newString.join('')}]);\n      }\n\n      // Main worker method. checks all permutations of a given edit length for acceptance.\n      function execEditLength() {\n        for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n          var basePath;\n          var addPath = bestPath[diagonalPath - 1],\n              removePath = bestPath[diagonalPath + 1],\n              oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n          if (addPath) {\n            // No one else is going to attempt to use this value, clear it\n            bestPath[diagonalPath - 1] = undefined;\n          }\n\n          var canAdd = addPath && addPath.newPos + 1 < newLen,\n              canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n          if (!canAdd && !canRemove) {\n            // If this path is a terminal then prune\n            bestPath[diagonalPath] = undefined;\n            continue;\n          }\n\n          // Select the diagonal that we want to branch from. We select the prior\n          // path whose position in the new string is the farthest from the origin\n          // and does not pass the bounds of the diff graph\n          if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n            basePath = clonePath(removePath);\n            self.pushComponent(basePath.components, undefined, true);\n          } else {\n            basePath = addPath;   // No need to clone, we've pulled it from the list\n            basePath.newPos++;\n            self.pushComponent(basePath.components, true, undefined);\n          }\n\n          oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath);\n\n          // If we have hit the end of both strings, then we are done\n          if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n            return done(buildValues(basePath.components, newString, oldString, self.useLongestToken));\n          } else {\n            // Otherwise track this path as a potential candidate and continue.\n            bestPath[diagonalPath] = basePath;\n          }\n        }\n\n        editLength++;\n      }\n\n      // Performs the length of edit iteration. Is a bit fugly as this has to support the\n      // sync and async mode which is never fun. Loops over execEditLength until a value\n      // is produced.\n      if (callback) {\n        (function exec() {\n          setTimeout(function() {\n            // This should not happen, but we want to be safe.\n            /*istanbul ignore next */\n            if (editLength > maxEditLength) {\n              return callback();\n            }\n\n            if (!execEditLength()) {\n              exec();\n            }\n          }, 0);\n        }());\n      } else {\n        while (editLength <= maxEditLength) {\n          var ret = execEditLength();\n          if (ret) {\n            return ret;\n          }\n        }\n      }\n    },\n\n    pushComponent: function(components, added, removed) {\n      var last = components[components.length - 1];\n      if (last && last.added === added && last.removed === removed) {\n        // We need to clone here as the component clone operation is just\n        // as shallow array clone\n        components[components.length - 1] = {count: last.count + 1, added: added, removed: removed };\n      } else {\n        components.push({count: 1, added: added, removed: removed });\n      }\n    },\n    extractCommon: function(basePath, newString, oldString, diagonalPath) {\n      var newLen = newString.length,\n          oldLen = oldString.length,\n          newPos = basePath.newPos,\n          oldPos = newPos - diagonalPath,\n\n          commonCount = 0;\n      while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n        newPos++;\n        oldPos++;\n        commonCount++;\n      }\n\n      if (commonCount) {\n        basePath.components.push({count: commonCount});\n      }\n\n      basePath.newPos = newPos;\n      return oldPos;\n    },\n\n    equals: function(left, right) {\n      var reWhitespace = /\\S/;\n      return left === right || (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right));\n    },\n    tokenize: function(value) {\n      return value.split('');\n    }\n  };\n\n  var CharDiff = new Diff();\n\n  var WordDiff = new Diff(true);\n  var WordWithSpaceDiff = new Diff();\n  WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) {\n    return removeEmpty(value.split(/(\\s+|\\b)/));\n  };\n\n  var CssDiff = new Diff(true);\n  CssDiff.tokenize = function(value) {\n    return removeEmpty(value.split(/([{}:;,]|\\s+)/));\n  };\n\n  var LineDiff = new Diff();\n\n  var TrimmedLineDiff = new Diff();\n  TrimmedLineDiff.ignoreTrim = true;\n\n  LineDiff.tokenize = TrimmedLineDiff.tokenize = function(value) {\n    var retLines = [],\n        lines = value.split(/^/m);\n    for (var i = 0; i < lines.length; i++) {\n      var line = lines[i],\n          lastLine = lines[i - 1],\n          lastLineLastChar = lastLine && lastLine[lastLine.length - 1];\n\n      // Merge lines that may contain windows new lines\n      if (line === '\\n' && lastLineLastChar === '\\r') {\n          retLines[retLines.length - 1] = retLines[retLines.length - 1].slice(0, -1) + '\\r\\n';\n      } else {\n        if (this.ignoreTrim) {\n          line = line.trim();\n          // add a newline unless this is the last line.\n          if (i < lines.length - 1) {\n            line += '\\n';\n          }\n        }\n        retLines.push(line);\n      }\n    }\n\n    return retLines;\n  };\n\n  var PatchDiff = new Diff();\n  PatchDiff.tokenize = function(value) {\n    var ret = [],\n        linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n\n    // Ignore the final empty token that occurs if the string ends with a new line\n    if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n      linesAndNewlines.pop();\n    }\n\n    // Merge the content and line separators into single tokens\n    for (var i = 0; i < linesAndNewlines.length; i++) {\n      var line = linesAndNewlines[i];\n\n      if (i % 2) {\n        ret[ret.length - 1] += line;\n      } else {\n        ret.push(line);\n      }\n    }\n    return ret;\n  };\n\n  var SentenceDiff = new Diff();\n  SentenceDiff.tokenize = function(value) {\n    return removeEmpty(value.split(/(\\S.+?[.!?])(?=\\s+|$)/));\n  };\n\n  var JsonDiff = new Diff();\n  // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n  // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n  JsonDiff.useLongestToken = true;\n  JsonDiff.tokenize = LineDiff.tokenize;\n  JsonDiff.equals = function(left, right) {\n    return LineDiff.equals(left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'));\n  };\n\n  var JsDiff = {\n    Diff: Diff,\n\n    diffChars: function(oldStr, newStr, callback) { return CharDiff.diff(oldStr, newStr, callback); },\n    diffWords: function(oldStr, newStr, callback) { return WordDiff.diff(oldStr, newStr, callback); },\n    diffWordsWithSpace: function(oldStr, newStr, callback) { return WordWithSpaceDiff.diff(oldStr, newStr, callback); },\n    diffLines: function(oldStr, newStr, callback) { return LineDiff.diff(oldStr, newStr, callback); },\n    diffTrimmedLines: function(oldStr, newStr, callback) { return TrimmedLineDiff.diff(oldStr, newStr, callback); },\n\n    diffSentences: function(oldStr, newStr, callback) { return SentenceDiff.diff(oldStr, newStr, callback); },\n\n    diffCss: function(oldStr, newStr, callback) { return CssDiff.diff(oldStr, newStr, callback); },\n    diffJson: function(oldObj, newObj, callback) {\n      return JsonDiff.diff(\n        typeof oldObj === 'string' ? oldObj : JSON.stringify(canonicalize(oldObj), undefined, '  '),\n        typeof newObj === 'string' ? newObj : JSON.stringify(canonicalize(newObj), undefined, '  '),\n        callback\n      );\n    },\n\n    createTwoFilesPatch: function(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader) {\n      var ret = [];\n\n      if (oldFileName == newFileName) {\n        ret.push('Index: ' + oldFileName);\n      }\n      ret.push('===================================================================');\n      ret.push('--- ' + oldFileName + (typeof oldHeader === 'undefined' ? '' : '\\t' + oldHeader));\n      ret.push('+++ ' + newFileName + (typeof newHeader === 'undefined' ? '' : '\\t' + newHeader));\n\n      var diff = PatchDiff.diff(oldStr, newStr);\n      diff.push({value: '', lines: []});   // Append an empty value to make cleanup easier\n\n      // Formats a given set of lines for printing as context lines in a patch\n      function contextLines(lines) {\n        return map(lines, function(entry) { return ' ' + entry; });\n      }\n\n      // Outputs the no newline at end of file warning if needed\n      function eofNL(curRange, i, current) {\n        var last = diff[diff.length - 2],\n            isLast = i === diff.length - 2,\n            isLastOfType = i === diff.length - 3 && current.added !== last.added;\n\n        // Figure out if this is the last line for the given file and missing NL\n        if (!(/\\n$/.test(current.value)) && (isLast || isLastOfType)) {\n          curRange.push('\\\\ No newline at end of file');\n        }\n      }\n\n      var oldRangeStart = 0, newRangeStart = 0, curRange = [],\n          oldLine = 1, newLine = 1;\n      for (var i = 0; i < diff.length; i++) {\n        var current = diff[i],\n            lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n        current.lines = lines;\n\n        if (current.added || current.removed) {\n          // If we have previous context, start with that\n          if (!oldRangeStart) {\n            var prev = diff[i - 1];\n            oldRangeStart = oldLine;\n            newRangeStart = newLine;\n\n            if (prev) {\n              curRange = contextLines(prev.lines.slice(-4));\n              oldRangeStart -= curRange.length;\n              newRangeStart -= curRange.length;\n            }\n          }\n\n          // Output our changes\n          curRange.push.apply(curRange, map(lines, function(entry) {\n            return (current.added ? '+' : '-') + entry;\n          }));\n          eofNL(curRange, i, current);\n\n          // Track the updated file position\n          if (current.added) {\n            newLine += lines.length;\n          } else {\n            oldLine += lines.length;\n          }\n        } else {\n          // Identical context lines. Track line changes\n          if (oldRangeStart) {\n            // Close out any changes that have been output (or join overlapping)\n            if (lines.length <= 8 && i < diff.length - 2) {\n              // Overlapping\n              curRange.push.apply(curRange, contextLines(lines));\n            } else {\n              // end the range and output\n              var contextSize = Math.min(lines.length, 4);\n              ret.push(\n                  '@@ -' + oldRangeStart + ',' + (oldLine - oldRangeStart + contextSize)\n                  + ' +' + newRangeStart + ',' + (newLine - newRangeStart + contextSize)\n                  + ' @@');\n              ret.push.apply(ret, curRange);\n              ret.push.apply(ret, contextLines(lines.slice(0, contextSize)));\n              if (lines.length <= 4) {\n                eofNL(ret, i, current);\n              }\n\n              oldRangeStart = 0;\n              newRangeStart = 0;\n              curRange = [];\n            }\n          }\n          oldLine += lines.length;\n          newLine += lines.length;\n        }\n      }\n\n      return ret.join('\\n') + '\\n';\n    },\n\n    createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) {\n      return JsDiff.createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader);\n    },\n\n    applyPatch: function(oldStr, uniDiff) {\n      var diffstr = uniDiff.split('\\n'),\n          hunks = [],\n          i = 0,\n          remEOFNL = false,\n          addEOFNL = false;\n\n      // Skip to the first change hunk\n      while (i < diffstr.length && !(/^@@/.test(diffstr[i]))) {\n        i++;\n      }\n\n      // Parse the unified diff\n      for (; i < diffstr.length; i++) {\n        if (diffstr[i][0] === '@') {\n          var chnukHeader = diffstr[i].split(/@@ -(\\d+),(\\d+) \\+(\\d+),(\\d+) @@/);\n          hunks.unshift({\n            start: chnukHeader[3],\n            oldlength: +chnukHeader[2],\n            removed: [],\n            newlength: chnukHeader[4],\n            added: []\n          });\n        } else if (diffstr[i][0] === '+') {\n          hunks[0].added.push(diffstr[i].substr(1));\n        } else if (diffstr[i][0] === '-') {\n          hunks[0].removed.push(diffstr[i].substr(1));\n        } else if (diffstr[i][0] === ' ') {\n          hunks[0].added.push(diffstr[i].substr(1));\n          hunks[0].removed.push(diffstr[i].substr(1));\n        } else if (diffstr[i][0] === '\\\\') {\n          if (diffstr[i - 1][0] === '+') {\n            remEOFNL = true;\n          } else if (diffstr[i - 1][0] === '-') {\n            addEOFNL = true;\n          }\n        }\n      }\n\n      // Apply the diff to the input\n      var lines = oldStr.split('\\n');\n      for (i = hunks.length - 1; i >= 0; i--) {\n        var hunk = hunks[i];\n        // Sanity check the input string. Bail if we don't match.\n        for (var j = 0; j < hunk.oldlength; j++) {\n          if (lines[hunk.start - 1 + j] !== hunk.removed[j]) {\n            return false;\n          }\n        }\n        Array.prototype.splice.apply(lines, [hunk.start - 1, hunk.oldlength].concat(hunk.added));\n      }\n\n      // Handle EOFNL insertion/removal\n      if (remEOFNL) {\n        while (!lines[lines.length - 1]) {\n          lines.pop();\n        }\n      } else if (addEOFNL) {\n        lines.push('');\n      }\n      return lines.join('\\n');\n    },\n\n    convertChangesToXML: function(changes) {\n      var ret = [];\n      for (var i = 0; i < changes.length; i++) {\n        var change = changes[i];\n        if (change.added) {\n          ret.push('<ins>');\n        } else if (change.removed) {\n          ret.push('<del>');\n        }\n\n        ret.push(escapeHTML(change.value));\n\n        if (change.added) {\n          ret.push('</ins>');\n        } else if (change.removed) {\n          ret.push('</del>');\n        }\n      }\n      return ret.join('');\n    },\n\n    // See: http://code.google.com/p/google-diff-match-patch/wiki/API\n    convertChangesToDMP: function(changes) {\n      var ret = [],\n          change,\n          operation;\n      for (var i = 0; i < changes.length; i++) {\n        change = changes[i];\n        if (change.added) {\n          operation = 1;\n        } else if (change.removed) {\n          operation = -1;\n        } else {\n          operation = 0;\n        }\n\n        ret.push([operation, change.value]);\n      }\n      return ret;\n    },\n\n    canonicalize: canonicalize\n  };\n\n  /*istanbul ignore next */\n  /*global module */\n  if (typeof module !== 'undefined' && module.exports) {\n    module.exports = JsDiff;\n  } else if (typeof define === 'function' && define.amd) {\n    /*global define */\n    define([], function() { return JsDiff; });\n  } else if (typeof global.JsDiff === 'undefined') {\n    global.JsDiff = JsDiff;\n  }\n}(this));\n\n},{}],68:[function(require,module,exports){\n'use strict';\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn str.replace(matchOperatorsRe,  '\\\\$&');\n};\n\n},{}],69:[function(require,module,exports){\n(function (process){\n// Growl - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)\n\n/**\n * Module dependencies.\n */\n\nvar exec = require('child_process').exec\n  , fs = require('fs')\n  , path = require('path')\n  , exists = fs.existsSync || path.existsSync\n  , os = require('os')\n  , quote = JSON.stringify\n  , cmd;\n\nfunction which(name) {\n  var paths = process.env.PATH.split(':');\n  var loc;\n  \n  for (var i = 0, len = paths.length; i < len; ++i) {\n    loc = path.join(paths[i], name);\n    if (exists(loc)) return loc;\n  }\n}\n\nswitch(os.type()) {\n  case 'Darwin':\n    if (which('terminal-notifier')) {\n      cmd = {\n          type: \""Darwin-NotificationCenter\""\n        , pkg: \""terminal-notifier\""\n        , msg: '-message'\n        , title: '-title'\n        , subtitle: '-subtitle'\n        , priority: {\n              cmd: '-execute'\n            , range: []\n          }\n      };\n    } else {\n      cmd = {\n          type: \""Darwin-Growl\""\n        , pkg: \""growlnotify\""\n        , msg: '-m'\n        , sticky: '--sticky'\n        , priority: {\n              cmd: '--priority'\n            , range: [\n                -2\n              , -1\n              , 0\n              , 1\n              , 2\n              , \""Very Low\""\n              , \""Moderate\""\n              , \""Normal\""\n              , \""High\""\n              , \""Emergency\""\n            ]\n          }\n      };\n    }\n    break;\n  case 'Linux':\n    cmd = {\n        type: \""Linux\""\n      , pkg: \""notify-send\""\n      , msg: ''\n      , sticky: '-t 0'\n      , icon: '-i'\n      , priority: {\n          cmd: '-u'\n        , range: [\n            \""low\""\n          , \""normal\""\n          , \""critical\""\n        ]\n      }\n    };\n    break;\n  case 'Windows_NT':\n    cmd = {\n        type: \""Windows\""\n      , pkg: \""growlnotify\""\n      , msg: ''\n      , sticky: '/s:true'\n      , title: '/t:'\n      , icon: '/i:'\n      , priority: {\n            cmd: '/p:'\n          , range: [\n              -2\n            , -1\n            , 0\n            , 1\n            , 2\n          ]\n        }\n    };\n    break;\n}\n\n/**\n * Expose `growl`.\n */\n\nexports = module.exports = growl;\n\n/**\n * Node-growl version.\n */\n\nexports.version = '1.4.1'\n\n/**\n * Send growl notification _msg_ with _options_.\n *\n * Options:\n *\n *  - title   Notification title\n *  - sticky  Make the notification stick (defaults to false)\n *  - priority  Specify an int or named key (default is 0)\n *  - name    Application name (defaults to growlnotify)\n *  - image\n *    - path to an icon sets --iconpath\n *    - path to an image sets --image\n *    - capitalized word sets --appIcon\n *    - filename uses extname as --icon\n *    - otherwise treated as --icon\n *\n * Examples:\n *\n *   growl('New email')\n *   growl('5 new emails', { title: 'Thunderbird' })\n *   growl('Email sent', function(){\n *     // ... notification sent\n *   })\n *\n * @param {string} msg\n * @param {object} options\n * @param {function} fn\n * @api public\n */\n\nfunction growl(msg, options, fn) {\n  var image\n    , args\n    , options = options || {}\n    , fn = fn || function(){};\n\n  // noop\n  if (!cmd) return fn(new Error('growl not supported on this platform'));\n  args = [cmd.pkg];\n\n  // image\n  if (image = options.image) {\n    switch(cmd.type) {\n      case 'Darwin-Growl':\n        var flag, ext = path.extname(image).substr(1)\n        flag = flag || ext == 'icns' && 'iconpath'\n        flag = flag || /^[A-Z]/.test(image) && 'appIcon'\n        flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image'\n        flag = flag || ext && (image = ext) && 'icon'\n        flag = flag || 'icon'\n        args.push('--' + flag, quote(image))\n        break;\n      case 'Linux':\n        args.push(cmd.icon, quote(image));\n        // libnotify defaults to sticky, set a hint for transient notifications\n        if (!options.sticky) args.push('--hint=int:transient:1');\n        break;\n      case 'Windows':\n        args.push(cmd.icon + quote(image));\n        break;\n    }\n  }\n\n  // sticky\n  if (options.sticky) args.push(cmd.sticky);\n\n  // priority\n  if (options.priority) {\n    var priority = options.priority + '';\n    var checkindexOf = cmd.priority.range.indexOf(priority);\n    if (~cmd.priority.range.indexOf(priority)) {\n      args.push(cmd.priority, options.priority);\n    }\n  }\n\n  // name\n  if (options.name && cmd.type === \""Darwin-Growl\"") {\n    args.push('--name', options.name);\n  }\n\n  switch(cmd.type) {\n    case 'Darwin-Growl':\n      args.push(cmd.msg);\n      args.push(quote(msg));\n      if (options.title) args.push(quote(options.title));\n      break;\n    case 'Darwin-NotificationCenter':\n      args.push(cmd.msg);\n      args.push(quote(msg));\n      if (options.title) {\n        args.push(cmd.title);\n        args.push(quote(options.title));\n      }\n      if (options.subtitle) {\n        args.push(cmd.subtitle);\n        args.push(quote(options.subtitle));\n      }\n      break;\n    case 'Darwin-Growl':\n      args.push(cmd.msg);\n      args.push(quote(msg));\n      if (options.title) args.push(quote(options.title));\n      break;\n    case 'Linux':\n      if (options.title) {\n        args.push(quote(options.title));\n        args.push(cmd.msg);\n        args.push(quote(msg));\n      } else {\n        args.push(quote(msg));\n      }\n      break;\n    case 'Windows':\n      args.push(quote(msg));\n      if (options.title) args.push(cmd.title + quote(options.title));\n      break;\n  }\n\n  // execute\n  exec(args.join(' '), fn);\n};\n\n}).call(this,require('_process'))\n},{\""_process\"":51,\""child_process\"":41,\""fs\"":41,\""os\"":50,\""path\"":41}],70:[function(require,module,exports){\n(function (process,global){\n/**\n * Shim process.stdout.\n */\n\nprocess.stdout = require('browser-stdout')();\n\nvar Mocha = require('../');\n\n/**\n * Create a Mocha instance.\n *\n * @return {undefined}\n */\n\nvar mocha = new Mocha({ reporter: 'html' });\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar setInterval = global.setInterval;\nvar clearTimeout = global.clearTimeout;\nvar clearInterval = global.clearInterval;\n\nvar uncaughtExceptionHandlers = [];\n\nvar originalOnerrorHandler = global.onerror;\n\n/**\n * Remove uncaughtException listener.\n * Revert to original onerror handler if previously defined.\n */\n\nprocess.removeListener = function(e, fn){\n  if ('uncaughtException' == e) {\n    if (originalOnerrorHandler) {\n      global.onerror = originalOnerrorHandler;\n    } else {\n      global.onerror = function() {};\n    }\n    var i = Mocha.utils.indexOf(uncaughtExceptionHandlers, fn);\n    if (i != -1) { uncaughtExceptionHandlers.splice(i, 1); }\n  }\n};\n\n/**\n * Implements uncaughtException listener.\n */\n\nprocess.on = function(e, fn){\n  if ('uncaughtException' == e) {\n    global.onerror = function(err, url, line){\n      fn(new Error(err + ' (' + url + ':' + line + ')'));\n      return !mocha.allowUncaught;\n    };\n    uncaughtExceptionHandlers.push(fn);\n  }\n};\n\n// The BDD UI is registered by default, but no UI will be functional in the\n// browser without an explicit call to the overridden `mocha.ui` (see below).\n// Ensure that this default UI does not expose its methods to the global scope.\nmocha.suite.removeAllListeners('pre-require');\n\nvar immediateQueue = []\n  , immediateTimeout;\n\nfunction timeslice() {\n  var immediateStart = new Date().getTime();\n  while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) {\n    immediateQueue.shift()();\n  }\n  if (immediateQueue.length) {\n    immediateTimeout = setTimeout(timeslice, 0);\n  } else {\n    immediateTimeout = null;\n  }\n}\n\n/**\n * High-performance override of Runner.immediately.\n */\n\nMocha.Runner.immediately = function(callback) {\n  immediateQueue.push(callback);\n  if (!immediateTimeout) {\n    immediateTimeout = setTimeout(timeslice, 0);\n  }\n};\n\n/**\n * Function to allow assertion libraries to throw errors directly into mocha.\n * This is useful when running tests in a browser because window.onerror will\n * only receive the 'message' attribute of the Error.\n */\nmocha.throwError = function(err) {\n  Mocha.utils.forEach(uncaughtExceptionHandlers, function (fn) {\n    fn(err);\n  });\n  throw err;\n};\n\n/**\n * Override ui to ensure that the ui functions are initialized.\n * Normally this would happen in Mocha.prototype.loadFiles.\n */\n\nmocha.ui = function(ui){\n  Mocha.prototype.ui.call(this, ui);\n  this.suite.emit('pre-require', global, null, this);\n  return this;\n};\n\n/**\n * Setup mocha with the given setting options.\n */\n\nmocha.setup = function(opts){\n  if ('string' == typeof opts) opts = { ui: opts };\n  for (var opt in opts) this[opt](opts[opt]);\n  return this;\n};\n\n/**\n * Run mocha, returning the Runner.\n */\n\nmocha.run = function(fn){\n  var options = mocha.options;\n  mocha.globals('location');\n\n  var query = Mocha.utils.parseQuery(global.location.search || '');\n  if (query.grep) mocha.grep(new RegExp(query.grep));\n  if (query.fgrep) mocha.grep(query.fgrep);\n  if (query.invert) mocha.invert();\n\n  return Mocha.prototype.run.call(mocha, function(err){\n    // The DOM Document is not available in Web Workers.\n    var document = global.document;\n    if (document && document.getElementById('mocha') && options.noHighlighting !== true) {\n      Mocha.utils.highlightTags('code');\n    }\n    if (fn) fn(err);\n  });\n};\n\n/**\n * Expose the process shim.\n * https://github.com/mochajs/mocha/pull/916\n */\n\nMocha.process = process;\n\n/**\n * Expose mocha.\n */\n\nwindow.Mocha = Mocha;\nwindow.mocha = mocha;\n\n}).call(this,require('_process'),typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""../\"":1,\""_process\"":51,\""browser-stdout\"":40}]},{},[70]);\n"""
a17f931b17da0bf00342fb6ebb3bb9a379b5eddd,10952332,% https://stackoverflow.com/questions/10952332/return-node-if-relationship-is-not-present/14254214
a593c65a3e325f8c02ec0754cd7f6002f1be0e29,12720183,// see http://stackoverflow.com/questions/6280399/skip-links-not-working-in-chrome/12720183#12720183
31a75638bd846a3432d9f0421e3afe1de44fc16f,13729745,  - http://stackoverflow.com/questions/13728106/unexpectedly-hitting-php-memory-limit-with-a-single-pdo-query/13729745#13729745
fd17da30616c7cf7e521015291396c31783e2433,21797294,"  // getComputedStyle shim, from http://stackoverflow.com/a/21797294"
11c58a65c15d3cf251a129b778e2f7d601007b1d,3305059,this method is neither fast nor precise (http://stackoverflow.com/questions/3305059/how-do-you-calculate-log-base-2-in-java-for-integers)
189e9e117588da1058cb5877f45b3add8129e05c,11130109, * http://stackoverflow.com/questions/11130109/c-struct-size-alignment
4a517d909d51c9001feb04bece6ca2a83025d916,481601,	      // @see http://stackoverflow.com/questions/481601/how-to-skip-to-next-iteration-in-jquery-each-util
cfeccbfbf3e0de02cc54bff8e57816592c6cc32b,3330919,        // http://stackoverflow.com/a/3330919)
c4308c4cc5d9e8668333f552a1a8ec35257b5121,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
11b0a2432c9332bf7b9dcf3762b8326f61def295,16377215,# http://stackoverflow.com/questions/16377215/how-to-pickle-a-namedtuple-instance-correctly
834342d8cd4b04b1fab26bd7c7e487962e112680,2351101,        // https://stackoverflow.com/a/2351101/940936
1f94cf6aa813fdaf72f0523b0f20c2daee546a7f,32079407,     * JobScheduler can have issues: http://stackoverflow.com/questions/32079407/android-jobscheduler-onstartjob-called-multiple-times
c44359b2c892ad7b950ffab59abe0776769f7414,10721936,      # Taken from http://stackoverflow.com/a/10721936/255627
df7df6f416e172d3a0e8040f5e73ad02b6b9f92a,10600670,        // http://stackoverflow.com/questions/10600670/sqlitedatabase-query-method
107b6daca64393df5ad1d69adadcc0e8fbe52f75,8721406,    //https://stackoverflow.com/questions/8721406/how-to-determine-if-a-point-is-inside-a-2d-convex-polygon
6066124afed52d2ca48b8527da9180b959cd20c6,29977799,  //   // http://stackoverflow.com/questions/29977799/how-should-i-handle-a-leave-animation-in-componentwillunmount-in-react
fff66772188c3bba98fac0c226c4be00df7d0206,3330919,        // http://stackoverflow.com/a/3330919)
ca23e3be88e415261f8a2df25da49ac56d402d37,28144668,"      ""description"":""Firefox 46 and below do not support the `textTrack.onCueChange()` event ([see details](http://stackoverflow.com/questions/28144668/html5-audio-texttrack-kind-subtitles-cuechange-event-not-working-in-firefox))."""
c1dabfbd71562aab7a376c42ebc319bb10a9aa5c,20936993,* Use [SystemRandom](https://stackoverflow.com/questions/20936993/how-can-i-create-a-random-number-that-is-cryptographically-secure-in-python) which use `urandom` for non-important password generation.
14cbd4e7af38d5ef4026629f93ce7d1a9e233682,3330919,        // http://stackoverflow.com/a/3330919)
8d4dd6daf84466699c9983956c8c3597461a723e,6969486,	  // http://stackoverflow.com/a/6969486
b582c79b75928a7de38d784703e5e3dcb5dbd966,4836734,    from http://stackoverflow.com/a/4836734/1567452 but added the extra step
b9e77dd4a0612acc2e83e2130b9500f9be81ac2d,22747272,"	// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
b4de7f6ab43efa36b95dbd0c301353e09f820d01,3326650,"5549193,comment,5540603,5540603,1,0,jgalt212,,,""YUI has a pretty nice console.log wrapper with tons of extra functionality.  I don't use all of its functionality, but it does have the nice feature of not breaking IE when calling console.log without first having the <i>Developer Tools</i> window open.<p><a href=""""http://stackoverflow.com/questions/3326650/console-is-undefined-error-for-internet-explorer"""" rel=""""nofollow"""">http://stackoverflow.com/questions/3326650/console-is-undefi...</a><p><a href=""""http://yuilibrary.com/yui/docs/console/"""" rel=""""nofollow"""">http://yuilibrary.com/yui/docs/console/</a>"",1365988243"
993d5ee1feca437a096d4249cdc80e707491211a,12219967,        # http://stackoverflow.com/questions/12219967/how-to-mock-a-base-class-with-python-mock-library
d796998f07ac545b7ba1e0be774acf9939cd1192,2286402,- [URL Fragment and 302 redirects](http://stackoverflow.com/questions/2286402/url-fragment-and-302-redirects)
51a4499fd13f76354c3881d815fb551d66ba8360,1027201,  // http://stackoverflow.com/a/1027201/300213
5153c0ebdfe962c065b706d8402a0ac61b236eef,32421197,- <https://stackoverflow.com/questions/32421197/struct-error-required-argument-is-not-an-integer>
a263ae90fed604d6918688fea7f1a3072af1f5e6,19385911,"  ""readme"": ""<a href=\""http://promisesaplus.com/\"">\n    <img src=\""http://promisesaplus.com/assets/logo-small.png\"" alt=\""Promises/A+ logo\""\n         title=\""Promises/A+ 1.1 compliant\"" align=\""right\"" />\n</a>\n[![Build Status](https://travis-ci.org/petkaantonov/bluebird.svg?branch=master)](https://travis-ci.org/petkaantonov/bluebird)\n[![coverage-98%](http://img.shields.io/badge/coverage-98%-brightgreen.svg?style=flat)](http://petkaantonov.github.io/bluebird/coverage/debug/index.html)\n\n\n# Introduction\n\nBluebird is a fully featured [promise](#what-are-promises-and-why-should-i-use-them) library with focus on innovative features and performance\n\n\n\n# Topics\n\n- [Features](#features)\n- [Quick start](#quick-start)\n- [API Reference and examples](API.md)\n- [Support](#support)\n- [What are promises and why should I use them?](#what-are-promises-and-why-should-i-use-them)\n- [Questions and issues](#questions-and-issues)\n- [Error handling](#error-handling)\n- [Development](#development)\n    - [Testing](#testing)\n    - [Benchmarking](#benchmarks)\n    - [Custom builds](#custom-builds)\n    - [For library authors](#for-library-authors)\n- [What is the sync build?](#what-is-the-sync-build)\n- [License](#license)\n- [Snippets for common problems](https://github.com/petkaantonov/bluebird/wiki/Snippets)\n- [Promise anti-patterns](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns)\n- [Changelog](changelog.md)\n- [Optimization guide](#optimization-guide)\n\n# Features\n<img src=\""http://petkaantonov.github.io/bluebird/logo.png\"" alt=\""bluebird logo\"" align=\""right\"" />\n\n- [Promises A+](http://promisesaplus.com)\n- [Synchronous inspection](API.md#synchronous-inspection)\n- [Concurrency coordination](API.md#collections)\n- [Promisification on steroids](API.md#promisification)\n- [Resource management through a parallel of python `with`/C# `using`](API.md#resource-management)\n- [Cancellation and timeouts](API.md#cancellation)\n- [Parallel for C# `async` and `await`](API.md#generators)\n- Mind blowing utilities such as\n    - [`.bind()`](API.md#binddynamic-thisarg---promise)\n    - [`.call()`](API.md#callstring-propertyname--dynamic-arg---promise)\n    - [`Promise.join()`](API.md#promisejoinpromisethenablevalue-promises-function-handler---promise)\n    - [And](API.md#core) [much](API.md#timers) [more](API.md#utility)!\n- [Practical debugging solutions and sane defaults](#error-handling)\n- [Sick performance](benchmark/)\n\n<hr>\n\n# Quick start\n\n## Node.js\n\n    npm install bluebird\n\nThen:\n\n```js\nvar Promise = require(\""bluebird\"");\n```\n\n## Browsers\n\nThere are many ways to use bluebird in browsers:\n\n- Direct downloads\n    - Full build [bluebird.js](https://cdn.jsdelivr.net/bluebird/latest/bluebird.js)\n    - Full build minified [bluebird.min.js](https://cdn.jsdelivr.net/bluebird/latest/bluebird.min.js)\n- You may use browserify on the main export\n- You may use the [bower](http://bower.io) package.\n\nWhen using script tags the global variables `Promise` and `P` (alias for `Promise`) become available.\n\nA [minimal bluebird browser build](#custom-builds) is &asymp;38.92KB minified*, 11.65KB gzipped and has no external dependencies.\n\n*Google Closure Compiler using Simple.\n\n#### Browser support\n\nBrowsers that [implement ECMA-262, edition 3](http://en.wikipedia.org/wiki/Ecmascript#Implementations) and later are supported.\n\n[![Selenium Test Status](https://saucelabs.com/browser-matrix/petka_antonov.svg)](https://saucelabs.com/u/petka_antonov)\n\n**Note** that in ECMA-262, edition 3 (IE7, IE8 etc.) it is not possible to use methods that have keyword names like `.catch` and `.finally`. The [API documentation](API.md) always lists a compatible alternative name that you can use if you need to support these browsers. For example `.catch` is replaced with `.caught` and `.finally` with `.lastly`.\n\nAlso, [long stack trace](API.md#promiselongstacktraces---void) support is only available in Chrome, Firefox and Internet Explorer 10+.\n\nAfter quick start, see [API Reference and examples](API.md)\n\n<hr>\n\n# Support\n\n- Mailing list: [bluebird-js@googlegroups.com](https://groups.google.com/forum/#!forum/bluebird-js)\n- IRC: #promises @freenode\n- StackOverflow: [bluebird tag](http://stackoverflow.com/questions/tagged/bluebird)\n- Bugs and feature requests: [github issue tracker](https://github.com/petkaantonov/bluebird/issues?state=open)\n\n<hr>\n\n# What are promises and why should I use them?\n\nYou should use promises to turn this:\n\n```js\nfs.readFile(\""file.json\"", function(err, val) {\n    if( err ) {\n        console.error(\""unable to read file\"");\n    }\n    else {\n        try {\n            val = JSON.parse(val);\n            console.log(val.success);\n        }\n        catch( e ) {\n            console.error(\""invalid json in file\"");\n        }\n    }\n});\n```\n\nInto this:\n\n```js\nfs.readFileAsync(\""file.json\"").then(JSON.parse).then(function(val) {\n    console.log(val.success);\n})\n.catch(SyntaxError, function(e) {\n    console.error(\""invalid json in file\"");\n})\n.catch(function(e) {\n    console.error(\""unable to read file\"");\n});\n```\n\n*If you are wondering \""there is no `readFileAsync` method on `fs` that returns a promise\"", see [promisification](API.md#promisification)*\n\nActually you might notice the latter has a lot in common with code that would do the same using synchronous I/O:\n\n```js\ntry {\n    var val = JSON.parse(fs.readFileSync(\""file.json\""));\n    console.log(val.success);\n}\n//Syntax actually not supported in JS but drives the point\ncatch(SyntaxError e) {\n    console.error(\""invalid json in file\"");\n}\ncatch(Error e) {\n    console.error(\""unable to read file\"");\n}\n```\n\nAnd that is the point - being able to have something that is a lot like `return` and `throw` in synchronous code.\n\nYou can also use promises to improve code that was written with callback helpers:\n\n\n```js\n//Copyright Plato http://stackoverflow.com/a/19385911/995876\n//CC BY-SA 2.5\nmapSeries(URLs, function (URL, done) {\n    var options = {};\n    needle.get(URL, options, function (error, response, body) {\n        if (error) {\n            return done(error);\n        }\n        try {\n            var ret = JSON.parse(body);\n            return done(null, ret);\n        }\n        catch (e) {\n            done(e);\n        }\n    });\n}, function (err, results) {\n    if (err) {\n        console.log(err);\n    } else {\n        console.log('All Needle requests successful');\n        // results is a 1 to 1 mapping in order of URLs > needle.body\n        processAndSaveAllInDB(results, function (err) {\n            if (err) {\n                return done(err);\n            }\n            console.log('All Needle requests saved');\n            done(null);\n        });\n    }\n});\n```\n\nIs more pleasing to the eye when done with promises:\n\n```js\nPromise.promisifyAll(needle);\nvar options = {};\n\nvar current = Promise.resolve();\nPromise.map(URLs, function(URL) {\n    current = current.then(function () {\n        return needle.getAsync(URL, options);\n    });\n    return current;\n}).map(function(responseAndBody){\n    return JSON.parse(responseAndBody[1]);\n}).then(function (results) {\n    return processAndSaveAllInDB(results);\n}).then(function(){\n    console.log('All Needle requests saved');\n}).catch(function (e) {\n    console.log(e);\n});\n```\n\nAlso promises don't just give you correspondences for synchronous features but can also be used as limited event emitters or callback aggregators.\n\nMore reading:\n\n - [Promise nuggets](https://promise-nuggets.github.io/)\n - [Why I am switching to promises](http://spion.github.io/posts/why-i-am-switching-to-promises.html)\n - [What is the the point of promises](http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/#toc_1)\n - [Snippets for common problems](https://github.com/petkaantonov/bluebird/wiki/Snippets)\n - [Promise anti-patterns](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns)\n\n# Questions and issues\n\nIf you find a bug in bluebird or have a feature request, file an issue in the [github issue tracker](https://github.com/petkaantonov/bluebird/issues). Anything else, such as questions for help in using the library, should be posted in [StackOverflow](http://stackoverflow.com/questions/tagged/bluebird) under tags `promise` and `bluebird`.\n\n# Error handling\n\nThis is a problem every promise library needs to handle in some way. Unhandled rejections/exceptions don't really have a good agreed-on asynchronous correspondence. The problem is that it is impossible to predict the future and know if a rejected promise will eventually be handled.\n\nThere are two common pragmatic attempts at solving the problem that promise libraries do.\n\nThe more popular one is to have the user explicitly communicate that they are done and any unhandled rejections should be thrown, like so:\n\n```js\ndownload().then(...).then(...).done();\n```\n\nFor handling this problem, in my opinion, this is completely unacceptable and pointless. The user must remember to explicitly call `.done` and that cannot be justified when the problem is forgetting to create an error handler in the first place.\n\nThe second approach, which is what bluebird by default takes, is to call a registered handler if a rejection is unhandled by the start of a second turn. The default handler is to write the stack trace to `stderr` or `console.error` in browsers. This is close to what happens with synchronous code - your code doesn't work as expected and you open console and see a stack trace. Nice.\n\nOf course this is not perfect, if your code for some reason needs to swoop in and attach error handler to some promise after the promise has been hanging around a while then you will see annoying messages. In that case you can use the `.done()` method to signal that any hanging exceptions should be thrown.\n\nIf you want to override the default handler for these possibly unhandled rejections, you can pass yours like so:\n\n```js\nPromise.onPossiblyUnhandledRejection(function(error){\n    throw error;\n});\n```\n\nIf you want to also enable long stack traces, call:\n\n```js\nPromise.longStackTraces();\n```\n\nright after the library is loaded.\n\nIn node.js use the environment flag `BLUEBIRD_DEBUG`:\n\n```\nBLUEBIRD_DEBUG=1 node server.js\n```\n\nto enable long stack traces in all instances of bluebird.\n\nLong stack traces cannot be disabled after being enabled, and cannot be enabled after promises have already been created. Long stack traces imply a substantial performance penalty, even after using every trick to optimize them.\n\nLong stack traces are enabled by default in the debug build.\n\n#### Expected and unexpected errors\n\nA practical problem with Promises/A+ is that it models Javascript `try-catch` too closely for its own good. Therefore by default promises inherit `try-catch` warts such as the inability to specify the error types that the catch block is eligible for. It is an anti-pattern in every other language to use catch-all handlers because they swallow exceptions that you might not know about.\n\nNow, Javascript does have a perfectly fine and working way of creating error type hierarchies. It is still quite awkward to use them with the built-in `try-catch` however:\n\n```js\ntry {\n    //code\n}\ncatch(e) {\n    if( e instanceof WhatIWantError) {\n        //handle\n    }\n    else {\n        throw e;\n    }\n}\n```\n\nWithout such checking, unexpected errors would be silently swallowed. However, with promises, bluebird brings the future (hopefully) here now and extends the `.catch` to [accept potential error type eligibility](API.md#catchfunction-errorclass-function-handler---promise).\n\nFor instance here it is expected that some evil or incompetent entity will try to crash our server from `SyntaxError` by providing syntactically invalid JSON:\n\n```js\ngetJSONFromSomewhere().then(function(jsonString) {\n    return JSON.parse(jsonString);\n}).then(function(object) {\n    console.log(\""it was valid json: \"", object);\n}).catch(SyntaxError, function(e){\n    console.log(\""don't be evil\"");\n});\n```\n\nHere any kind of unexpected error will be automatically reported on `stderr` along with a stack trace because we only register a handler for the expected `SyntaxError`.\n\nOk, so, that's pretty neat. But actually not many libraries define error types and it is in fact a complete ghetto out there with ad hoc strings being attached as some arbitrary property name like `.name`, `.type`, `.code`, not having any property at all or even throwing strings as errors and so on. So how can we still listen for expected errors?\n\nBluebird defines a special error type `OperationalError` (you can get a reference from `Promise.OperationalError`). This type of error is given as rejection reason by promisified methods when\ntheir underlying library gives an untyped, but expected error. Primitives such as strings, and error objects that are directly created like `new Error(\""database didn't respond\"")` are considered untyped.\n\nExample of such library is the node core library `fs`. So if we promisify it, we can catch just the errors we want pretty easily and have programmer errors be redirected to unhandled rejection handler so that we notice them:\n\n```js\n//Read more about promisification in the API Reference:\n//API.md\nvar fs = Promise.promisifyAll(require(\""fs\""));\n\nfs.readFileAsync(\""myfile.json\"").then(JSON.parse).then(function (json) {\n    console.log(\""Successful json\"");\n}).catch(SyntaxError, function (e) {\n    console.error(\""file contains invalid json\"");\n}).catch(Promise.OperationalError, function (e) {\n    console.error(\""unable to read file, because: \"", e.message);\n});\n```\n\nThe last `catch` handler is only invoked when the `fs` module explicitly used the `err` argument convention of async callbacks to inform of an expected error. The `OperationalError` instance will contain the original error in its `.cause` property but it does have a direct copy of the `.message` and `.stack` too. In this code any unexpected error - be it in our code or the `fs` module - would not be caught by these handlers and therefore not swallowed.\n\nSince a `catch` handler typed to `Promise.OperationalError` is expected to be used very often, it has a neat shorthand:\n\n```js\n.error(function (e) {\n    console.error(\""unable to read file, because: \"", e.message);\n});\n```\n\nSee [API documentation for `.error()`](API.md#error-rejectedhandler----promise)\n\nFinally, Bluebird also supports predicate-based filters. If you pass a\npredicate function instead of an error type, the predicate will receive\nthe error as an argument. The return result will be used to determine whether\nthe error handler should be called.\n\nPredicates should allow for very fine grained control over caught errors:\npattern matching, error typesets with set operations and many other techniques\ncan be implemented on top of them.\n\nExample of using a predicate-based filter:\n\n```js\nvar Promise = require(\""bluebird\"");\nvar request = Promise.promisify(require(\""request\""));\n\nfunction clientError(e) {\n    return e.code >= 400 && e.code < 500;\n}\n\nrequest(\""http://www.google.com\"").then(function(contents){\n    console.log(contents);\n}).catch(clientError, function(e){\n   //A client error like 400 Bad Request happened\n});\n```\n\n**Danger:** The JavaScript language allows throwing primitive values like strings. Throwing primitives can lead to worse or no stack traces. Primitives [are not exceptions](http://www.devthought.com/2011/12/22/a-string-is-not-an-error/). You should consider always throwing Error objects when handling exceptions.\n\n<hr>\n\n#### How do long stack traces differ from e.g. Q?\n\nBluebird attempts to have more elaborate traces. Consider:\n\n```js\nError.stackTraceLimit = 25;\nQ.longStackSupport = true;\nQ().then(function outer() {\n    return Q().then(function inner() {\n        return Q().then(function evenMoreInner() {\n            a.b.c.d();\n        }).catch(function catcher(e){\n            console.error(e.stack);\n        });\n    })\n});\n```\n\nYou will see\n\n    ReferenceError: a is not defined\n        at evenMoreInner (<anonymous>:7:13)\n    From previous event:\n        at inner (<anonymous>:6:20)\n\nCompare to:\n\n```js\nError.stackTraceLimit = 25;\nPromise.longStackTraces();\nPromise.resolve().then(function outer() {\n    return Promise.resolve().then(function inner() {\n        return Promise.resolve().then(function evenMoreInner() {\n            a.b.c.d();\n        }).catch(function catcher(e){\n            console.error(e.stack);\n        });\n    });\n});\n```\n\n    ReferenceError: a is not defined\n        at evenMoreInner (<anonymous>:7:13)\n    From previous event:\n        at inner (<anonymous>:6:36)\n    From previous event:\n        at outer (<anonymous>:5:32)\n    From previous event:\n        at <anonymous>:4:21\n        at Object.InjectedScript._evaluateOn (<anonymous>:572:39)\n        at Object.InjectedScript._evaluateAndWrap (<anonymous>:531:52)\n        at Object.InjectedScript.evaluate (<anonymous>:450:21)\n\n\nA better and more practical example of the differences can be seen in gorgikosev's [debuggability competition](https://github.com/spion/async-compare#debuggability).\n\n<hr>\n\n# Development\n\nFor development tasks such as running benchmarks or testing, you need to clone the repository and install dev-dependencies.\n\nInstall [node](http://nodejs.org/) and [npm](https://npmjs.org/)\n\n    git clone git@github.com:petkaantonov/bluebird.git\n    cd bluebird\n    npm install\n\n## Testing\n\nTo run all tests, run\n\n    node tools/test\n\nIf you need to run generator tests run the `tool/test.js` script with `--harmony` argument and node 0.11+:\n\n    node-dev --harmony tools/test\n\nYou may specify an individual test file to run with the `--run` script flag:\n\n    node tools/test --run=cancel.js\n\n\nThis enables output from the test and may give a better idea where the test is failing. The paramter to `--run` can be any file name located in `test/mocha` folder.\n\n#### Testing in browsers\n\nTo run the test in a browser instead of node, pass the flag `--browser` to the test tool\n\n    node tools/test --run=cancel.js --browser\n\nThis will automatically create a server (default port 9999) and open it in your default browser once the tests have been compiled.\n\nKeep the test tab active because some tests are timing-sensitive and will fail if the browser is throttling timeouts. Chrome will do this for example when the tab is not active.\n\n#### Supported options by the test tool\n\nThe value of boolean flags is determined by presence, if you want to pass false value for a boolean flag, use the `no-`-prefix e.g. `--no-browser`.\n\n - `--run=String` - Which tests to run (or compile when testing in browser). Default `\""all\""`. Can also be a glob string (relative to ./test/mocha folder).\n - `--cover=String`. Create code coverage using the String as istanbul reporter. Coverage is created in the ./coverage folder. No coverage is created by default, default reporter is `\""html\""` (use `--cover` to use default reporter).\n - `--browser` - Whether to compile tests for browsers. Default `false`.\n - `--port=Number` - Port where local server is hosted when testing in browser. Default `9999`\n - `--execute-browser-tests` - Whether to execute the compiled tests for browser when using `--browser`. Default `true`.\n - `--open-browser` - Whether to open the default browser when executing browser tests. Default `true`.\n - `--fake-timers` - Whether to use fake timers (`setTimeout` etc) when running tests in node. Default `true`.\n - `--js-hint` - Whether to run JSHint on source files. Default `true`.\n - `--saucelabs` - Whether to create a tunnel to sauce labs and run tests in their VMs instead of your browser when compiling tests for browser. Default `false`.\n\n## Benchmarks\n\nTo run a benchmark, run the given command for a benchmark while on the project root. Requires bash (on windows the mingw32 that comes with git works fine too).\n\nNode 0.11.2+ is required to run the generator examples.\n\n### 1\\. DoxBee sequential\n\nCurrently the most relevant benchmark is @gorkikosev's benchmark in the article [Analysis of generators and other async patterns in node](http://spion.github.io/posts/analysis-generators-and-other-async-patterns-node.html). The benchmark emulates a situation where n amount of users are making a request in parallel to execute some mixed async/sync action. The benchmark has been modified to include a warm-up phase to minimize any JITing during timed sections.\n\nCommand: `bench doxbee`\n\n### 2\\. Made-up parallel\n\nThis made-up scenario runs 15 shimmed queries in parallel.\n\nCommand: `bench parallel`\n\n## Custom builds\n\nCustom builds for browsers are supported through a command-line utility.\n\n\n<table>\n    <caption>The following features can be disabled</caption>\n    <thead>\n        <tr>\n            <th>Feature(s)</th>\n            <th>Command line identifier</th>\n        </tr>\n    </thead>\n    <tbody>\n\n        <tr><td><a href=\""API.md#any---promise\""><code>.any</code></a> and <a href=\""API.md#promiseanyarraydynamicpromise-values---promise\""><code>Promise.any</code></a></td><td><code>any</code></td></tr>\n        <tr><td><a href=\""API.md#race---promise\""><code>.race</code></a> and <a href=\""API.md#promiseracearraypromise-promises---promise\""><code>Promise.race</code></a></td><td><code>race</code></td></tr>\n        <tr><td><a href=\""API.md#callstring-propertyname--dynamic-arg---promise\""><code>.call</code></a> and <a href=\""API.md#getstring-propertyname---promise\""><code>.get</code></a></td><td><code>call_get</code></td></tr>\n        <tr><td><a href=\""API.md#filterfunction-filterer---promise\""><code>.filter</code></a> and <a href=\""API.md#promisefilterarraydynamicpromise-values-function-filterer---promise\""><code>Promise.filter</code></a></td><td><code>filter</code></td></tr>\n        <tr><td><a href=\""API.md#mapfunction-mapper---promise\""><code>.map</code></a> and <a href=\""API.md#promisemaparraydynamicpromise-values-function-mapper---promise\""><code>Promise.map</code></a></td><td><code>map</code></td></tr>\n        <tr><td><a href=\""API.md#reducefunction-reducer--dynamic-initialvalue---promise\""><code>.reduce</code></a> and <a href=\""API.md#promisereducearraydynamicpromise-values-function-reducer--dynamic-initialvalue---promise\""><code>Promise.reduce</code></a></td><td><code>reduce</code></td></tr>\n        <tr><td><a href=\""API.md#props---promise\""><code>.props</code></a> and <a href=\""API.md#promisepropsobjectpromise-object---promise\""><code>Promise.props</code></a></td><td><code>props</code></td></tr>\n        <tr><td><a href=\""API.md#settle---promise\""><code>.settle</code></a> and <a href=\""API.md#promisesettlearraydynamicpromise-values---promise\""><code>Promise.settle</code></a></td><td><code>settle</code></td></tr>\n        <tr><td><a href=\""API.md#someint-count---promise\""><code>.some</code></a> and <a href=\""API.md#promisesomearraydynamicpromise-values-int-count---promise\""><code>Promise.some</code></a></td><td><code>some</code></td></tr>\n        <tr><td><a href=\""API.md#nodeifyfunction-callback---promise\""><code>.nodeify</code></a></td><td><code>nodeify</code></td></tr>\n        <tr><td><a href=\""API.md#promisecoroutinegeneratorfunction-generatorfunction---function\""><code>Promise.coroutine</code></a> and <a href=\""API.md#promisespawngeneratorfunction-generatorfunction---promise\""><code>Promise.spawn</code></a></td><td><code>generators</code></td></tr>\n        <tr><td><a href=\""API.md#progression\"">Progression</a></td><td><code>progress</code></td></tr>\n        <tr><td><a href=\""API.md#promisification\"">Promisification</a></td><td><code>promisify</code></td></tr>\n        <tr><td><a href=\""API.md#cancellation\"">Cancellation</a></td><td><code>cancel</code></td></tr>\n        <tr><td><a href=\""API.md#timers\"">Timers</a></td><td><code>timers</code></td></tr>\n        <tr><td><a href=\""API.md#resource-management\"">Resource management</a></td><td><code>using</code></td></tr>\n\n    </tbody>\n</table>\n\n\nMake sure you have cloned the repo somewhere and did `npm install` successfully.\n\nAfter that you can run:\n\n    node tools/build --features=\""core\""\n\n\nThe above builds the most minimal build you can get. You can add more features separated by spaces from the above list:\n\n    node tools/build --features=\""core filter map reduce\""\n\nThe custom build file will be found from `/js/browser/bluebird.js`. It will have a comment that lists the disabled and enabled features.\n\nNote that the build leaves the `/js/main` etc folders with same features so if you use the folder for node.js at the same time, don't forget to build\na full version afterwards (after having taken a copy of the bluebird.js somewhere):\n\n    node tools/build --debug --main --zalgo --browser --minify\n\n#### Supported options by the build tool\n\nThe value of boolean flags is determined by presence, if you want to pass false value for a boolean flag, use the `no-`-prefix e.g. `--no-debug`.\n\n - `--main` - Whether to build the main build. The main build is placed at `js/main` directory. Default `false`.\n - `--debug` - Whether to build the debug build. The debug build is placed at `js/debug` directory. Default `false`.\n - `--zalgo` - Whether to build the zalgo build. The zalgo build is placed at `js/zalgo` directory. Default `false`.\n - `--browser` - Whether to compile the browser build. The browser build file is placed at `js/browser/bluebird.js` Default `false`.\n - `--minify` - Whether to minify the compiled browser build. The minified browser build file is placed at `js/browser/bluebird.min.js` Default `true`.\n - `--features=String` - See [custom builds](#custom-builds)\n\n<hr>\n\n## For library authors\n\nBuilding a library that depends on bluebird? You should know about a few features.\n\nIf your library needs to do something obtrusive like adding or modifying methods on the `Promise` prototype, uses long stack traces or uses a custom unhandled rejection handler then... that's totally ok as long as you don't use `require(\""bluebird\"")`. Instead you should create a file\nthat creates an isolated copy. For example, creating a file called `bluebird-extended.js` that contains:\n\n```js\n                //NOTE the function call right after\nmodule.exports = require(\""bluebird/js/main/promise\"")();\n```\n\nYour library can then use `var Promise = require(\""bluebird-extended\"");` and do whatever it wants with it. Then if the application or other library uses their own bluebird promises they will all play well together because of Promises/A+ thenable assimilation magic.\n\nYou should also know about [`.nodeify()`](API.md#nodeifyfunction-callback---promise) which makes it easy to provide a dual callback/promise API.\n\n<hr>\n\n## What is the sync build?\n\nYou may now use sync build by:\n\n    var Promise = require(\""bluebird/zalgo\"");\n\nThe sync build is provided to see how forced asynchronity affects benchmarks. It should not be used in real code due to the implied hazards.\n\nThe normal async build gives Promises/A+ guarantees about asynchronous resolution of promises. Some people think this affects performance or just plain love their code having a possibility\nof stack overflow errors and non-deterministic behavior.\n\nThe sync build skips the async call trampoline completely, e.g code like:\n\n    async.invoke( this.fn, this, val );\n\nAppears as this in the sync build:\n\n    this.fn(val);\n\nThis should pressure the CPU slightly less and thus the sync build should perform better. Indeed it does, but only marginally. The biggest performance boosts are from writing efficient Javascript, not from compromising determinism.\n\nNote that while some benchmarks are waiting for the next event tick, the CPU is actually not in use during that time. So the resulting benchmark result is not completely accurate because on node.js you only care about how much the CPU is taxed. Any time spent on CPU is time the whole process (or server) is paralyzed. And it is not graceful like it would be with threads.\n\n\n```js\nvar cache = new Map(); //ES6 Map or DataStructures/Map or whatever...\nfunction getResult(url) {\n    var resolver = Promise.pending();\n    if (cache.has(url)) {\n        resolver.resolve(cache.get(url));\n    }\n    else {\n        http.get(url, function(err, content) {\n            if (err) resolver.reject(err);\n            else {\n                cache.set(url, content);\n                resolver.resolve(content);\n            }\n        });\n    }\n    return resolver.promise;\n}\n\n\n\n//The result of console.log is truly random without async guarantees\nfunction guessWhatItPrints( url ) {\n    var i = 3;\n    getResult(url).then(function(){\n        i = 4;\n    });\n    console.log(i);\n}\n```\n\n# Optimization guide\n\nArticles about optimization will be periodically posted in [the wiki section](https://github.com/petkaantonov/bluebird/wiki), polishing edits are welcome.\n\nA single cohesive guide compiled from the articles will probably be done eventually.\n\n# License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Petka Antonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \""Software\""), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"","
f7adf9abc242a5b3309a109a076ac4dd104fc5ef,3790935,      //http://stackoverflow.com/questions/3790935/can-i-hide-the-html5-number-inputs-spin-box
115c602067dc303b91e4ac76d3752f58be5e3fc6,31075341 22747272,"{""version"":3,""names"":[],""mappings"":"""",""sources"":[""app.js""],""sourcesContent"":[""(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\""function\""&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\""Cannot find module '\""+o+\""'\"");throw f.code=\""MODULE_NOT_FOUND\"",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\""function\""&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _ractive = (typeof window !== \""undefined\"" ? window['Ractive'] : typeof global !== \""undefined\"" ? global['Ractive'] : null);\n\nvar _ractive2 = _interopRequireDefault(_ractive);\n\nvar _ractiveLoad = require('./ractive/ractive-load');\n\nvar _ractiveLoad2 = _interopRequireDefault(_ractiveLoad);\n\nvar _ractive3 = require('./utils/ractive');\n\nvar _ractive4 = _interopRequireDefault(_ractive3);\n\nvar _ractiveTransitionsFade = require('./ractive/ractive-transitions-fade');\n\nvar _ractiveTransitionsFade2 = _interopRequireDefault(_ractiveTransitionsFade);\n\nvar _router = require('./plugins/router');\n\nvar RouterPlugin = _interopRequireWildcard(_router);\n\nvar _routes = require('./config/routes');\n\nvar _routes2 = _interopRequireDefault(_routes);\n\nvar _router2 = require('./components/layout/router');\n\nvar _router3 = _interopRequireDefault(_router2);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(0, _ractiveLoad2.default)('assets/views/app.html').then(function (AppView) {\n    initApp(AppView);\n}).catch(_ractive4.default);\n\nfunction initApp(AppView) {\n    var App = new AppView({\n        el: '#app',\n        components: {\n            // SearchUser: SearchUserComponent,\n            Router: _router3.default,\n            EmptyPage: _ractive2.default.extend({ template: '' })\n        },\n        data: {\n            componentName: 'EmptyPage',\n            headerTitle: 'Budget App'\n        },\n        transitions: { fade: _ractiveTransitionsFade2.default },\n        oncomplete: function oncomplete() {\n            // Wait for the app to be rendered so we properly handle transition\n            // from EmptyPage to the one the URL dictates\n            RouterPlugin.init(_routes2.default, this.onNavigation.bind(this));\n            console.log('App::oninit# Application initialized!');\n        },\n        onNavigation: function onNavigation(error, navigationContext) {\n            console.log('APP::onNavigation# Navigating to:', navigationContext.pageName, 'with context:', navigationContext);\n\n            if (error) {\n                console.warn('App::onNavigation# Error navigating:', error);\n                this.showAlert(error.displayMessage || error.message);\n            } else {\n                this.set({\n                    req: {\n                        params: navigationContext.params,\n                        body: navigationContext.state\n                    },\n                    componentName: navigationContext.pageName\n                });\n            }\n        },\n        showAlert: function showAlert(message) {\n            var _this = this;\n\n            this.set('errorMsg', message);\n            setTimeout(function () {\n                _this.set('errorMsg', null);\n            }, 2500);\n        }\n    });\n}\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""./components/layout/router\"":3,\""./config/routes\"":9,\""./plugins/router\"":10,\""./ractive/ractive-load\"":13,\""./ractive/ractive-transitions-fade\"":14,\""./utils/ractive\"":15}],2:[function(require,module,exports){\n(function (global){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nexports.loadDependencies = loadDependencies;\nexports.createComponent = createComponent;\n\nvar _ractive = (typeof window !== \""undefined\"" ? window['Ractive'] : typeof global !== \""undefined\"" ? global['Ractive'] : null);\n\nvar _ractive2 = _interopRequireDefault(_ractive);\n\nvar _ractiveLoad = require('../ractive/ractive-load');\n\nvar _ractiveLoad2 = _interopRequireDefault(_ractiveLoad);\n\nvar _ractive3 = require('../utils/ractive');\n\nvar _ractive4 = _interopRequireDefault(_ractive3);\n\nvar _newTransaction = require('./transaction/new-transaction');\n\nvar NewTransaction = _interopRequireWildcard(_newTransaction);\n\nvar _transactionList = require('./transaction/transaction-list');\n\nvar TransactionList = _interopRequireWildcard(_transactionList);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NewTransactionComponent;\nvar TransactionListComponent;\n\nvar Promise = _ractive2.default.Promise;\n\nfunction loadDependencies() {\n    return new Promise(function (fulfil, reject) {\n        (0, _ractiveLoad2.default)({\n            NewTransactionView: 'assets/views/transaction/new-transaction.html',\n            TransactionListView: 'assets/views/transaction/transaction-list.html'\n        }).then(function (components) {\n            NewTransactionComponent = NewTransaction.createComponent(components.NewTransactionView);\n            TransactionListComponent = TransactionList.createComponent(components.TransactionListView, {\n                count: 5,\n                data: {\n                    transactionListTitle: 'Recent transactions'\n                }\n            });\n            fulfil();\n        }).catch(_ractive4.default);\n    });\n}\n\nfunction createComponent(HomeView) {\n    var Page = _ractive2.default.components.HomePage = HomeView.extend({\n        data: {},\n        components: {\n            NewTransactionComponent: NewTransactionComponent,\n            TransactionListComponent: TransactionListComponent\n        }\n    });\n    Page._name = 'HomePage';\n    return Page;\n}\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""../ractive/ractive-load\"":13,\""../utils/ractive\"":15,\""./transaction/new-transaction\"":6,\""./transaction/transaction-list\"":8}],3:[function(require,module,exports){\n(function (global){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\n\nvar _ractive = (typeof window !== \""undefined\"" ? window['Ractive'] : typeof global !== \""undefined\"" ? global['Ractive'] : null);\n\nvar _ractive2 = _interopRequireDefault(_ractive);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\n    This router has been built on top of the ideas from this Stack Overflow question:\n    http://stackoverflow.com/questions/31075341/how-to-create-ractives-subcomponents-dynamically-and-change-them-programmatical\n*/\n\nvar Router = _ractive2.default.extend({\n    template: '<router-handler/>',\n    components: {\n        'router-handler': function routerHandler() {\n            return this.get('componentName');\n        }\n    },\n    oninit: function oninit() {\n        this.observe('componentName', function (newValue, oldValue) {\n            if (this.fragment.rendered) {\n                this.reset();\n            }\n        });\n    }\n});\n\nexports.default = Router;\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{}],4:[function(require,module,exports){\n(function (global){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nexports.loadDependencies = loadDependencies;\nexports.createComponent = createComponent;\n\nvar _ractive = (typeof window !== \""undefined\"" ? window['Ractive'] : typeof global !== \""undefined\"" ? global['Ractive'] : null);\n\nvar _ractive2 = _interopRequireDefault(_ractive);\n\nvar _ractiveLoad = require('../ractive/ractive-load');\n\nvar _ractiveLoad2 = _interopRequireDefault(_ractiveLoad);\n\nvar _ractive3 = require('../utils/ractive');\n\nvar _ractive4 = _interopRequireDefault(_ractive3);\n\nvar _transactionList = require('./transaction/transaction-list');\n\nvar TransactionList = _interopRequireWildcard(_transactionList);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TransactionListComponent;\n\nvar Promise = _ractive2.default.Promise;\n\nfunction loadDependencies() {\n    return new Promise(function (fulfil, reject) {\n        (0, _ractiveLoad2.default)({\n            TransactionListView: 'assets/views/transaction/transaction-list.html'\n        }).then(function (components) {\n            TransactionListComponent = TransactionList.createComponent(components.TransactionListView, {});\n            fulfil();\n        }).catch(_ractive4.default);\n    });\n}\n\nfunction createComponent(ListView) {\n    var Page = _ractive2.default.components.ListPage = ListView.extend({\n        data: {},\n        components: {\n            TransactionListComponent: TransactionListComponent\n        }\n    });\n    Page._name = 'ListPage';\n    return Page;\n}\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""../ractive/ractive-load\"":13,\""../utils/ractive\"":15,\""./transaction/transaction-list\"":8}],5:[function(require,module,exports){\n(function (global){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nexports.loadDependencies = loadDependencies;\nexports.createComponent = createComponent;\n\nvar _ractive = (typeof window !== \""undefined\"" ? window['Ractive'] : typeof global !== \""undefined\"" ? global['Ractive'] : null);\n\nvar _ractive2 = _interopRequireDefault(_ractive);\n\nvar _ractiveLoad = require('../ractive/ractive-load');\n\nvar _ractiveLoad2 = _interopRequireDefault(_ractiveLoad);\n\nvar _ractive3 = require('../utils/ractive');\n\nvar _ractive4 = _interopRequireDefault(_ractive3);\n\nvar _transactionDetails = require('./transaction/transaction-details');\n\nvar TransactionPage = _interopRequireWildcard(_transactionDetails);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TransactionDetailsComponent;\n\nvar Promise = _ractive2.default.Promise;\n\nfunction loadDependencies(options) {\n    return new Promise(function (fulfil, reject) {\n        (0, _ractiveLoad2.default)({\n            TransactionDetailsView: 'assets/views/transaction/transaction-details.html'\n        }).then(function (components) {\n            TransactionDetailsComponent = TransactionPage.createComponent(components.TransactionDetailsView, {\n                id: options.id\n            });\n            fulfil();\n        }).catch(_ractive4.default);\n    });\n}\n\nfunction createComponent(TransactionView) {\n    var Page = _ractive2.default.components.TransactionPage = TransactionView.extend({\n        data: {},\n        components: {\n            TransactionDetailsComponent: TransactionDetailsComponent\n        }\n    });\n    Page._name = 'TransactionPage';\n    return Page;\n}\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""../ractive/ractive-load\"":13,\""../utils/ractive\"":15,\""./transaction/transaction-details\"":7}],6:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nexports.createComponent = createComponent;\n\nvar _ractiveTransitionsFade = require('../../ractive/ractive-transitions-fade');\n\nvar _ractiveTransitionsFade2 = _interopRequireDefault(_ractiveTransitionsFade);\n\nvar _ractiveDecoratorsSelect = require('../../ractive/ractive-decorators-select2');\n\nvar _ractiveDecoratorsSelect2 = _interopRequireDefault(_ractiveDecoratorsSelect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n//@shame\n\n/**\n * Transaction model\n * @param  {object}  params  Initial values for the model\n * @return {object}          Transaction model\n *\n * Model properties\n * @param {boolean}  type          Expense (false) or income (true)\n * @param {number}   amount        Positive amount\n * @param {string}   category      Category ident\n * @param {string}   location      Location ident\n * @param {string}   creationDate  YYYY-MM-DD format\n * @param {string}   description   Description\n */\nfunction getTransactionModel(params) {\n    var defaults = {\n        type: 0,\n        amount: '',\n        category: null,\n        location: null,\n        creationDate: '',\n        description: ''\n    };\n    return $.extend({}, defaults, params);\n}\n\n/**\n * Decorators need to be in Ractive before any templates are initialized\n */\nvar defaultSelect2Options = {\n    createTag: function createTag(params) {\n        var term = $.trim(params.term);\n\n        if (term === '') {\n            return null;\n        }\n\n        return {\n            id: term,\n            text: term,\n            newTag: true\n        };\n    },\n    tags: true,\n    tokenSeparators: [',']\n};\nfunction prepareDecorators() {\n    window.Ractive.decorators.select2.type.transactionCategories = function (node) {\n        return $.extend(true, {}, defaultSelect2Options, {\n            placeholder: 'Select a category'\n        });\n    };\n    window.Ractive.decorators.select2.type.transactionLocations = function (node) {\n        return $.extend(true, {}, defaultSelect2Options, {\n            placeholder: 'Select a location'\n        });\n    };\n}\n\nfunction createComponent(NewTransactionView) {\n    prepareDecorators();\n\n    var Component = Ractive.components.NewTransaction = NewTransactionView.extend({\n        data: function data() {\n            // Merging basic transaction model dataset with other view specific datasets\n            return $.extend(getTransactionModel(), {\n                transactionCategories: [],\n                transactionLocations: []\n            });\n        },\n        transitions: { fade: _ractiveTransitionsFade2.default },\n\n        /**\n         * Load transaction categories\n         * @return this\n         */\n        loadCategories: function loadCategories() {\n            var _this = this;\n\n            $.ajax({\n                method: 'GET',\n                url: '/api/v1/transaction-categories',\n                data: {}\n            }).done(function (response) {\n                if (response.status === 'ok') {\n                    _this.set('transactionCategories', response.results);\n                }\n            }).fail(function () {\n                console.log('Error');\n            }).always(function () {});\n            return this;\n        },\n\n        /**\n         * Load transaction locations\n         * @return this\n         */\n        loadLocations: function loadLocations() {\n            var _this2 = this;\n\n            $.ajax({\n                method: 'GET',\n                url: '/api/v1/transaction-locations',\n                data: {}\n            }).done(function (response) {\n                if (response.status === 'ok') {\n                    _this2.set('transactionLocations', response.results);\n                }\n            }).fail(function () {\n                console.log('Error');\n            }).always(function () {});\n            return this;\n        },\n\n        /**\n         * Allows us to set proxy events and run other tasks when controller is initialized\n         * @param  {array}  options  Array of options\n         */\n        oninit: function oninit(options) {\n            this.loadCategories().loadLocations();\n\n            /* Proxy events */\n            this.on({\n                /**\n                 * Event triggered when new transaction form is submitted\n                 * Extracts data from the form and submits it to API\n                 * @param  {object}  event  Ractive event object\n                 */\n                submitTransaction: function submitTransaction(event) {\n                    var _this3 = this;\n\n                    // Prevent the page from reloading\n                    event.original.preventDefault();\n\n                    var transactionModel = getTransactionModel({\n                        type: this.get('type'),\n                        amount: this.get('amount'),\n                        category: this.get('category'),\n                        location: this.get('location'),\n                        creationDate: this.get('creationDate'),\n                        description: this.get('description')\n                    });\n\n                    console.log('Saving to server...', transactionModel);\n\n                    // Send the data to our API\n                    $.ajax({\n                        method: 'POST',\n                        url: '/api/v1/transactions',\n                        data: transactionModel\n                    }).done(function (response) {\n                        if (response.status === 'ok') {\n                            // Push the new transaction to the recent transaction list\n                            var transaction = response.results.shift();\n                            if (typeof transaction !== 'undefined') {\n                                // _this.recentTransactionsController.push('transactions', transaction);\n\n                                // We also update the category and location list in case of a new creation\n                                _this3.loadCategories().loadLocations();\n                            }\n\n                            // Reset the form\n                            document.activeElement.blur();\n                            $('.valid').removeClass('valid');\n\n                            _this3.set({\n                                type: 0,\n                                amount: '',\n                                category: null,\n                                location: null,\n                                timestamp: '',\n                                description: ''\n                            });\n                        }\n                    }).fail(function () {\n                        console.log('Error');\n                    }).always(function () {\n                        console.log('Finished');\n                    });\n                }\n            });\n        }\n    });\n    Component._name = 'NewTransaction';\n    return Component;\n}\n\n},{\""../../ractive/ractive-decorators-select2\"":11,\""../../ractive/ractive-transitions-fade\"":14}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nexports.createComponent = createComponent;\n\nvar _ractiveTransitionsFade = require('../../ractive/ractive-transitions-fade');\n\nvar _ractiveTransitionsFade2 = _interopRequireDefault(_ractiveTransitionsFade);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Default component options and dataset\nvar defaultViewOptions = {\n    id: '',\n    data: {\n        transaction: []\n    }\n};\n\nfunction createComponent(TransactionDetailsView, parentViewOptions) {\n    // Merging default component options with parent supplied options\n    var viewOptions = $.extend(true, {}, defaultViewOptions, parentViewOptions);\n\n    var Component = Ractive.components.TransactionDetails = TransactionDetailsView.extend({\n        data: function data() {\n            return viewOptions.data;\n        },\n        transitions: { fade: _ractiveTransitionsFade2.default },\n\n        /**\n         * Allows us to set proxy events and run other tasks when controller is initialized\n         * @param  {array}  options  Array of options\n         */\n        oninit: function oninit(options) {\n            var _this = this;\n\n            console.log('Loading transaction');\n\n            /* Load most recent transactions */\n            $.ajax({\n                method: 'GET',\n                url: '/api/v1/transactions/' + viewOptions.id,\n                data: {}\n            }).done(function (response) {\n                if (response.status === 'ok') {\n                    _this.set('transaction', response.results);\n                }\n            }).fail(function () {\n                console.log('Error');\n            }).always(function () {\n                console.log('Finished');\n            });\n\n            /* Proxy events */\n            this.on({});\n        }\n    });\n    Component._name = 'TransactionDetails';\n    return Component;\n}\n\n},{\""../../ractive/ractive-transitions-fade\"":14}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nexports.createComponent = createComponent;\n\nvar _ractiveEventsTap = require('../../ractive/ractive-events-tap');\n\nvar _ractiveEventsTap2 = _interopRequireDefault(_ractiveEventsTap);\n\nvar _ractiveTransitionsFade = require('../../ractive/ractive-transitions-fade');\n\nvar _ractiveTransitionsFade2 = _interopRequireDefault(_ractiveTransitionsFade);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Default component options and dataset\nvar defaultViewOptions = {\n    count: 20, // @todo Currently loads most recent 20, integrate paging eventually\n    data: {\n        sortColumn: 'creationDate',\n        transactions: [],\n        transactionListTitle: 'Transaction list'\n    }\n};\n\nfunction createComponent(TransactionListView, parentViewOptions) {\n    // Merging default component options with parent supplied options\n    var viewOptions = $.extend(true, {}, defaultViewOptions, parentViewOptions);\n\n    var Component = Ractive.components.TransactionList = TransactionListView.extend({\n        data: function data() {\n            return viewOptions.data;\n        },\n        computed: {\n            sortedTransactions: function sortedTransactions() {\n                var column = this.get('sortColumn');\n                return this.get('transactions').slice().sort(function (a, b) {\n                    return a[column] < b[column] ? 1 : -1;\n                });\n            }\n        },\n        events: { tap: _ractiveEventsTap2.default },\n        transitions: { fade: _ractiveTransitionsFade2.default },\n\n        /**\n         * Allows us to set proxy events and run other tasks when controller is initialized\n         * @param  {array}  options  Array of options\n         */\n        oninit: function oninit(options) {\n            var _this = this;\n\n            console.log('Loading transactions');\n\n            /* Load most recent transactions */\n            $.ajax({\n                method: 'GET',\n                url: '/api/v1/transactions',\n                data: {\n                    count: viewOptions.count\n                }\n            }).done(function (response) {\n                if (response.status === 'ok') {\n                    _this.set('transactions', response.results);\n                }\n            }).fail(function () {\n                console.log('Error');\n            }).always(function () {\n                console.log('Finished');\n            });\n\n            /* Proxy events */\n            this.on({\n                /**\n                 * Sets the sorting column\n                 * @param  {object}  event   Ractive event object\n                 * @param  {object}  column  Column ident\n                 */\n                sort: function sort(event, column) {\n                    _this.set('sortColumn', column);\n                }\n            });\n        }\n    });\n    Component._name = 'TransactionList';\n    return Component;\n}\n\n},{\""../../ractive/ractive-events-tap\"":12,\""../../ractive/ractive-transitions-fade\"":14}],9:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\n\nvar _ractiveLoad = require('../ractive/ractive-load');\n\nvar _ractiveLoad2 = _interopRequireDefault(_ractiveLoad);\n\nvar _ractive = require('../utils/ractive');\n\nvar _ractive2 = _interopRequireDefault(_ractive);\n\nvar _router = require('../plugins/router');\n\nvar _router2 = _interopRequireDefault(_router);\n\nvar _homePage = require('../components/home-page');\n\nvar HomePage = _interopRequireWildcard(_homePage);\n\nvar _listPage = require('../components/list-page');\n\nvar ListPage = _interopRequireWildcard(_listPage);\n\nvar _TransactionPage = require('../components/Transaction-page');\n\nvar TransactionPage = _interopRequireWildcard(_TransactionPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// import UserPage from '../components/user-page';\n// import UserModel from '../models/user';\n\nvar routes = new Map();\n\nroutes.set('/', function (context, next) {\n    (0, _ractiveLoad2.default)('assets/views/home-page.html').then(function (HomeView) {\n        HomePage.loadDependencies().then(function () {\n            next(null, HomePage.createComponent(HomeView));\n        });\n    }).catch(_ractive2.default);\n});\n\nroutes.set('/list', function (context, next) {\n    (0, _ractiveLoad2.default)('assets/views/list-page.html').then(function (ListView) {\n        ListPage.loadDependencies().then(function () {\n            next(null, ListPage.createComponent(ListView));\n        });\n    }).catch(_ractive2.default);\n});\n\nroutes.set('/transaction/:id', function (context, next) {\n    var id = context.params.id;\n    (0, _ractiveLoad2.default)('assets/views/transaction-page.html').then(function (TransactionView) {\n        TransactionPage.loadDependencies({\n            id: id\n        }).then(function () {\n            next(null, TransactionPage.createComponent(TransactionView));\n        });\n    }).catch(_ractive2.default);\n});\n\n// routes.set('/user/:username', (context, next) => {\n//     UserModel.findByName(context.params.username)\n//         .then((user) => {\n//             next(null, UserPage, {\n//                 user: user\n//             });\n//         })\n//         .catch((err) => {\n//             err.displayMessage = 'User data not found!';\n//             next(err);\n//         });\n// });\n\nexports.default = routes;\n\n},{\""../components/Transaction-page\"":5,\""../components/home-page\"":2,\""../components/list-page\"":4,\""../plugins/router\"":10,\""../ractive/ractive-load\"":13,\""../utils/ractive\"":15}],10:[function(require,module,exports){\n(function (global){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nexports.init = init;\nexports.navTo = navTo;\n\nvar _page = (typeof window !== \""undefined\"" ? window['page'] : typeof global !== \""undefined\"" ? global['page'] : null);\n\nvar _page2 = _interopRequireDefault(_page);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction navigationHandler(routeHandler, onNavigation) {\n    return function (context /*, next*/) {\n        routeHandler(context, function (error) {\n            var PageComponent = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n            var data = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n            // if (!error && !Ractive.components[PageComponent._name]) { // I'm not proud of this\n            //  Ractive.components[PageComponent._name] = PageComponent;\n            // }\n\n            context.pageName = PageComponent._name;\n            context.state = data;\n            onNavigation(error, context);\n        });\n    };\n}\n\nfunction init(routes, onNavigation) {\n\n    routes.forEach(function (routeHandler, path) {\n        (0, _page2.default)(path, navigationHandler(routeHandler, onNavigation));\n    });\n\n    (0, _page2.default)({\n        // hashbang: true\n    });\n}\n\nfunction navTo(url) {\n    _page2.default.show(url);\n}\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{}],11:[function(require,module,exports){\n'use strict';\n\n/*\n\n    ractive-decorators-select2\n    =============================================\n\n    Integrate Ractive with Select2\n\n    ==========================\n\n    Troubleshooting: If you're using a module system in your app (AMD or\n    something more nodey) then you may need to change the paths below,\n    where it says `require( 'ractive' )` or `define([ 'ractive' ]...)`.\n\n    ==========================\n\n    Usage: Include this file on your page below Ractive, e.g:\n\n        <script src='lib/ractive.js'></script>\n        <script src='lib/ractive-decorators-select2.js'></script>\n\n    Or, if you're using a module loader, require this module:\n\n        // requiring the plugin will 'activate' it - no need to use\n        // the return value\n        require( 'ractive-decorators-select2' );\n\n*/\n\n(function (global, factory) {\n\n    'use strict';\n\n    // Common JS (i.e. browserify) environment\n\n    if (typeof module !== 'undefined' && module.exports && typeof require === 'function') {\n        factory((typeof window !== \""undefined\"" ? window['Ractive'] : typeof global !== \""undefined\"" ? global['Ractive'] : null), (typeof window !== \""undefined\"" ? window['jQuery'] : typeof global !== \""undefined\"" ? global['jQuery'] : null));\n    }\n\n    // AMD?\n    else if (typeof define === 'function' && define.amd) {\n            define(['ractive', 'jquery'], factory);\n        }\n\n        // browser global\n        else if (global.Ractive && global.jQuery) {\n                factory(global.Ractive, global.jQuery);\n            } else {\n                throw new Error('Could not find Ractive or jQuery! They must be loaded before the ractive-decorators-select2 plugin');\n            }\n})(typeof window !== 'undefined' ? window : undefined, function (Ractive, $) {\n\n    'use strict';\n\n    var _select2Decorator;\n\n    _select2Decorator = function select2Decorator(node, type) {\n\n        var ractive = node._ractive.root || node._ractive.ractive;\n        var setting = false;\n        var observer;\n\n        var options = {};\n        if (type) {\n            if (!_select2Decorator.type.hasOwnProperty(type)) {\n                throw new Error('Ractive Select2 type \""' + type + '\"" is not defined!');\n            }\n\n            options = _select2Decorator.type[type];\n            if (typeof options === 'function') {\n                options = options.call(this, node);\n            }\n        }\n\n        // Push changes from ractive to select2\n        if (node._ractive.binding) {\n            var binding = node._ractive.binding;\n            var keypath = binding.keypath ? binding.keypath.str : binding.model.key;\n            observer = ractive.observe(keypath, function (newvalue) {\n                console.log(keypath);\n                console.log(newvalue);\n                if (!setting) {\n                    setting = true;\n                    window.setTimeout(function () {\n                        if (newvalue === \""\"") $(node).select2(\""val\"", \""\"");\n\n                        $(node).change();\n                        setting = false;\n                    }, 0);\n                }\n            });\n        }\n\n        // Pull changes from select2 to ractive\n        $(node).select2(options).on('change', function () {\n            if (!setting) {\n                setting = true;\n                ractive.updateModel();\n                setting = false;\n            }\n        });\n\n        return {\n            teardown: function teardown() {\n                $(node).select2('destroy');\n\n                if (observer) {\n                    observer.cancel();\n                }\n            }\n        };\n    };\n\n    _select2Decorator.type = {};\n\n    Ractive.decorators.select2 = _select2Decorator;\n});\n\n},{}],12:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nvar DISTANCE_THRESHOLD = 5; // maximum pixels pointer can move before cancel\nvar TIME_THRESHOLD = 400; // maximum milliseconds between down and up before cancel\n\nfunction tap(node, callback) {\n    return new TapHandler(node, callback);\n}\n\nfunction TapHandler(node, callback) {\n    this.node = node;\n    this.callback = callback;\n\n    this.preventMousedownEvents = false;\n\n    this.bind(node);\n}\n\nTapHandler.prototype = {\n    bind: function bind(node) {\n        // listen for mouse/pointer events...\n        if (window.navigator.pointerEnabled) {\n            node.addEventListener('pointerdown', handleMousedown, false);\n        } else if (window.navigator.msPointerEnabled) {\n            node.addEventListener('MSPointerDown', handleMousedown, false);\n        } else {\n            node.addEventListener('mousedown', handleMousedown, false);\n        }\n\n        // ...and touch events\n        node.addEventListener('touchstart', handleTouchstart, false);\n\n        // native buttons, and <input type='button'> elements, should fire a tap event\n        // when the space key is pressed\n        if (node.tagName === 'BUTTON' || node.type === 'button') {\n            node.addEventListener('focus', handleFocus, false);\n        }\n\n        node.__tap_handler__ = this;\n    },\n    fire: function fire(event, x, y) {\n        this.callback({\n            node: this.node,\n            original: event,\n            x: x,\n            y: y\n        });\n    },\n    mousedown: function mousedown(event) {\n        var _this = this;\n\n        if (this.preventMousedownEvents) {\n            return;\n        }\n\n        if (event.which !== undefined && event.which !== 1) {\n            return;\n        }\n\n        var x = event.clientX;\n        var y = event.clientY;\n\n        // This will be null for mouse events.\n        var pointerId = event.pointerId;\n\n        var handleMouseup = function handleMouseup(event) {\n            if (event.pointerId != pointerId) {\n                return;\n            }\n\n            _this.fire(event, x, y);\n            cancel();\n        };\n\n        var handleMousemove = function handleMousemove(event) {\n            if (event.pointerId != pointerId) {\n                return;\n            }\n\n            if (Math.abs(event.clientX - x) >= DISTANCE_THRESHOLD || Math.abs(event.clientY - y) >= DISTANCE_THRESHOLD) {\n                cancel();\n            }\n        };\n\n        var cancel = function cancel() {\n            _this.node.removeEventListener('MSPointerUp', handleMouseup, false);\n            document.removeEventListener('MSPointerMove', handleMousemove, false);\n            document.removeEventListener('MSPointerCancel', cancel, false);\n            _this.node.removeEventListener('pointerup', handleMouseup, false);\n            document.removeEventListener('pointermove', handleMousemove, false);\n            document.removeEventListener('pointercancel', cancel, false);\n            _this.node.removeEventListener('click', handleMouseup, false);\n            document.removeEventListener('mousemove', handleMousemove, false);\n        };\n\n        if (window.navigator.pointerEnabled) {\n            this.node.addEventListener('pointerup', handleMouseup, false);\n            document.addEventListener('pointermove', handleMousemove, false);\n            document.addEventListener('pointercancel', cancel, false);\n        } else if (window.navigator.msPointerEnabled) {\n            this.node.addEventListener('MSPointerUp', handleMouseup, false);\n            document.addEventListener('MSPointerMove', handleMousemove, false);\n            document.addEventListener('MSPointerCancel', cancel, false);\n        } else {\n            this.node.addEventListener('click', handleMouseup, false);\n            document.addEventListener('mousemove', handleMousemove, false);\n        }\n\n        setTimeout(cancel, TIME_THRESHOLD);\n    },\n    touchdown: function touchdown() {\n        var _this2 = this;\n\n        var touch = event.touches[0];\n\n        var x = touch.clientX;\n        var y = touch.clientY;\n\n        var finger = touch.identifier;\n\n        var handleTouchup = function handleTouchup(event) {\n            var touch = event.changedTouches[0];\n\n            if (touch.identifier !== finger) {\n                cancel();\n                return;\n            }\n\n            event.preventDefault(); // prevent compatibility mouse event\n\n            // for the benefit of mobile Firefox and old Android browsers, we need this absurd hack.\n            _this2.preventMousedownEvents = true;\n            clearTimeout(_this2.preventMousedownTimeout);\n\n            _this2.preventMousedownTimeout = setTimeout(function () {\n                _this2.preventMousedownEvents = false;\n            }, 400);\n\n            _this2.fire(event, x, y);\n            cancel();\n        };\n\n        var handleTouchmove = function handleTouchmove(event) {\n            if (event.touches.length !== 1 || event.touches[0].identifier !== finger) {\n                cancel();\n            }\n\n            var touch = event.touches[0];\n            if (Math.abs(touch.clientX - x) >= DISTANCE_THRESHOLD || Math.abs(touch.clientY - y) >= DISTANCE_THRESHOLD) {\n                cancel();\n            }\n        };\n\n        var cancel = function cancel() {\n            _this2.node.removeEventListener('touchend', handleTouchup, false);\n            window.removeEventListener('touchmove', handleTouchmove, false);\n            window.removeEventListener('touchcancel', cancel, false);\n        };\n\n        this.node.addEventListener('touchend', handleTouchup, false);\n        window.addEventListener('touchmove', handleTouchmove, false);\n        window.addEventListener('touchcancel', cancel, false);\n\n        setTimeout(cancel, TIME_THRESHOLD);\n    },\n    teardown: function teardown() {\n        var node = this.node;\n\n        node.removeEventListener('pointerdown', handleMousedown, false);\n        node.removeEventListener('MSPointerDown', handleMousedown, false);\n        node.removeEventListener('mousedown', handleMousedown, false);\n        node.removeEventListener('touchstart', handleTouchstart, false);\n        node.removeEventListener('focus', handleFocus, false);\n    }\n};\n\nfunction handleMousedown(event) {\n    this.__tap_handler__.mousedown(event);\n}\n\nfunction handleTouchstart(event) {\n    this.__tap_handler__.touchdown(event);\n}\n\nfunction handleFocus() {\n    this.addEventListener('keydown', handleKeydown, false);\n    this.addEventListener('blur', handleBlur, false);\n}\n\nfunction handleBlur() {\n    this.removeEventListener('keydown', handleKeydown, false);\n    this.removeEventListener('blur', handleBlur, false);\n}\n\nfunction handleKeydown(event) {\n    if (event.which === 32) {\n        // space key\n        this.__tap_handler__.fire();\n    }\n}\n\nexports.default = tap;\n\n},{}],13:[function(require,module,exports){\n(function (process,Buffer){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\n\nvar _typeof = typeof Symbol === \""function\"" && typeof Symbol.iterator === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \""function\"" && obj.constructor === Symbol ? \""symbol\"" : typeof obj; };\n\nvar _ractive = (typeof window !== \""undefined\"" ? window['Ractive'] : typeof global !== \""undefined\"" ? global['Ractive'] : null);\n\nvar _ractive2 = _interopRequireDefault(_ractive);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getName(path) {\n    var pathParts, filename, lastIndex;\n\n    pathParts = path.split('/');\n    filename = pathParts.pop();\n\n    lastIndex = filename.lastIndexOf('.');\n    if (lastIndex !== -1) {\n        filename = filename.substr(0, lastIndex);\n    }\n\n    return filename;\n}\n\n/**\n * Finds the line and column position of character `char`\n   in a (presumably) multi-line string\n * @param {array} lines - an array of strings, each representing\n   a line of the original string\n * @param {number} char - the character index to convert\n * @returns {object}\n     * @property {number} line - the zero-based line index\n     * @property {number} column - the zero-based column index\n     * @property {number} char - the character index that was passed in\n */\nfunction getLinePosition(lines, char) {\n    var line = 0;\n    var lineStart = 0;\n\n    var lineEnds = lines.map(function (line) {\n        var lineEnd = lineStart + line.length + 1; // +1 for the newline\n\n        lineStart = lineEnd;\n        return lineEnd;\n    });\n\n    lineStart = 0;\n\n    while (char >= lineEnds[line]) {\n        lineStart = lineEnds[line];\n        line += 1;\n    }\n\n    var column = char - lineStart;\n    return { line: line, column: column, char: char };\n}\n\nvar requirePattern = /require\\s*\\(\\s*(?:\""([^\""]+)\""|'([^']+)')\\s*\\)/g;\nvar TEMPLATE_VERSION = 3;\n\nfunction parse(source) {\n    var parsed, template, links, imports, scriptItem, script, styles, match, modules, i, item, result;\n\n    if (!rcu.Ractive) {\n        throw new Error('rcu has not been initialised! You must call rcu.init(Ractive) before rcu.parse()');\n    }\n\n    parsed = rcu.Ractive.parse(source, {\n        noStringify: true,\n        interpolate: { script: false, style: false },\n        includeLinePositions: true\n    });\n\n    if (parsed.v !== TEMPLATE_VERSION) {\n        throw new Error('Mismatched template version (expected ' + TEMPLATE_VERSION + ', got ' + parsed.v + ')! Please ensure you are using the latest version of Ractive.js in your build process as well as in your app');\n    }\n\n    links = [];\n    styles = [];\n    modules = [];\n\n    // Extract certain top-level nodes from the template. We work backwards\n    // so that we can easily splice them out as we go\n    template = parsed.t;\n    i = template.length;\n    while (i--) {\n        item = template[i];\n\n        if (item && item.t === 7) {\n            if (item.e === 'link' && item.a && item.a.rel === 'ractive') {\n                links.push(template.splice(i, 1)[0]);\n            }\n\n            if (item.e === 'script' && (!item.a || !item.a.type || item.a.type === 'text/javascript')) {\n                if (scriptItem) {\n                    throw new Error('You can only have one <script> tag per component file');\n                }\n                scriptItem = template.splice(i, 1)[0];\n            }\n\n            if (item.e === 'style' && (!item.a || !item.a.type || item.a.type === 'text/css')) {\n                styles.push(template.splice(i, 1)[0]);\n            }\n        }\n    }\n\n    // Clean up template - trim whitespace left over from the removal\n    // of <link>, <style> and <script> tags from start...\n    while (/^\\s*$/.test(template[0])) {\n        template.shift();\n    }\n\n    // ...and end\n    while (/^\\s*$/.test(template[template.length - 1])) {\n        template.pop();\n    }\n\n    // Extract names from links\n    imports = links.map(function (link) {\n        var href = link.a.href;\n        var name = link.a.name || getName(href);\n\n        if (typeof name !== 'string') {\n            throw new Error('Error parsing link tag');\n        }\n\n        return { name: name, href: href };\n    });\n\n    result = {\n        source: source, imports: imports, modules: modules,\n        template: parsed,\n        css: styles.map(extractFragment).join(' '),\n        script: ''\n    };\n\n    // extract position information, so that we can generate source maps\n    if (scriptItem) {\n        var content = scriptItem.f[0];\n\n        var contentStart = source.indexOf('>', scriptItem.p[2]) + 1;\n\n        // we have to jump through some hoops to find contentEnd, because the contents\n        // of the <script> tag get trimmed at parse time\n        var contentEnd = contentStart + content.length + source.slice(contentStart).replace(content, '').indexOf('</script');\n\n        var lines = source.split('\\n');\n\n        result.scriptStart = getLinePosition(lines, contentStart);\n        result.scriptEnd = getLinePosition(lines, contentEnd);\n\n        result.script = source.slice(contentStart, contentEnd);\n\n        while (match = requirePattern.exec(result.script)) {\n            modules.push(match[1] || match[2]);\n        }\n    }\n\n    return result;\n}\n\nfunction extractFragment(item) {\n    return item.f;\n}\n\nvar _eval;\nvar isBrowser;\nvar isNode;\nvar head;\nvar Module;\nvar base64Encode;\nvar SOURCE_MAPPING_URL = 'sourceMappingUrl';\nvar DATA = 'data';\n\n// This causes code to be eval'd in the global scope\n_eval = eval;\n\nif (typeof document !== 'undefined') {\n    isBrowser = true;\n    head = document.getElementsByTagName('head')[0];\n} else if (typeof process !== 'undefined') {\n    isNode = true;\n    Module = (require.nodeRequire || require)('module');\n}\n\nif (typeof btoa === 'function') {\n    base64Encode = function base64Encode(str) {\n        str = str.replace(/[^\\x00-\\x7F]/g, function (char) {\n            var hex = char.charCodeAt(0).toString(16);\n            while (hex.length < 4) {\n                hex = '0' + hex;\n            }return '\\\\u' + hex;\n        });\n\n        return btoa(str);\n    };\n} else if (typeof Buffer === 'function') {\n    base64Encode = function base64Encode(str) {\n        return new Buffer(str, 'utf-8').toString('base64');\n    };\n} else {\n    base64Encode = function base64Encode() {};\n}\n\nfunction eval2(script, options) {\n    options = options || {};\n\n    if (options.sourceMap) {\n        script += '\\n//# ' + SOURCE_MAPPING_URL + '=data:application/json;charset=utf-8;base64,' + base64Encode(JSON.stringify(options.sourceMap));\n    } else if (options.sourceURL) {\n        script += '\\n//# sourceURL=' + options.sourceURL;\n    }\n\n    try {\n        return _eval(script);\n    } catch (err) {\n        if (isNode) {\n            locateErrorUsingModule(script, options.sourceURL || '');\n            return;\n        }\n\n        // In browsers, only locate syntax errors. Other errors can\n        // be located via the console in the normal fashion\n        else if (isBrowser && err.name === 'SyntaxError') {\n                locateErrorUsingDataUri(script);\n            }\n\n        throw err;\n    }\n}\n\neval2.Function = function () {\n    var arguments$1 = arguments;\n\n    var i,\n        args = [],\n        body,\n        wrapped,\n        options;\n\n    i = arguments.length;\n    while (i--) {\n        args[i] = arguments$1[i];\n    }\n\n    if (_typeof(args[args.length - 1]) === 'object') {\n        options = args.pop();\n    } else {\n        options = {};\n    }\n\n    // allow an array of arguments to be passed\n    if (args.length === 1 && Object.prototype.toString.call(args) === '[object Array]') {\n        args = args[0];\n    }\n\n    if (options.sourceMap) {\n        options.sourceMap = clone(options.sourceMap);\n\n        // shift everything a line down, to accommodate `(function (...) {`\n        options.sourceMap.mappings = ';' + options.sourceMap.mappings;\n    }\n\n    body = args.pop();\n    wrapped = '(function (' + args.join(', ') + ') {\\n' + body + '\\n})';\n\n    return eval2(wrapped, options);\n};\n\nfunction locateErrorUsingDataUri(code) {\n    var dataURI, scriptElement;\n\n    dataURI = DATA + ':text/javascript;charset=utf-8,' + encodeURIComponent(code);\n\n    scriptElement = document.createElement('script');\n    scriptElement.src = dataURI;\n\n    scriptElement.onload = function () {\n        head.removeChild(scriptElement);\n    };\n\n    head.appendChild(scriptElement);\n}\n\nfunction locateErrorUsingModule(code, url) {\n    var m = new Module();\n\n    try {\n        m._compile('module.exports = function () {\\n' + code + '\\n};', url);\n    } catch (err) {\n        console.error(err);\n        return;\n    }\n\n    m.exports();\n}\n\nfunction clone(obj) {\n    var cloned = {},\n        key;\n\n    for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n            cloned[key] = obj[key];\n        }\n    }\n\n    return cloned;\n}\n\nvar charToInteger = {};\nvar integerToChar = {};\n\n'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split('').forEach(function (char, i) {\n    charToInteger[char] = i;\n    integerToChar[i] = char;\n});\n\nfunction encode(value) {\n    var result, i;\n\n    if (typeof value === 'number') {\n        result = encodeInteger(value);\n    } else {\n        result = '';\n        for (i = 0; i < value.length; i += 1) {\n            result += encodeInteger(value[i]);\n        }\n    }\n\n    return result;\n}\n\nfunction encodeInteger(num) {\n    var result = '',\n        clamped;\n\n    if (num < 0) {\n        num = -num << 1 | 1;\n    } else {\n        num <<= 1;\n    }\n\n    do {\n        clamped = num & 31;\n        num >>= 5;\n\n        if (num > 0) {\n            clamped |= 32;\n        }\n\n        result += integerToChar[clamped];\n    } while (num > 0);\n\n    return result;\n}\n\n/**\n * Encodes a string as base64\n * @param {string} str - the string to encode\n * @returns {string}\n */\nfunction btoa$1(str) {\n    return new Buffer(str).toString('base64');\n}\n\nvar SourceMap = function SourceMap(properties) {\n    this.version = 3;\n\n    this.file = properties.file;\n    this.sources = properties.sources;\n    this.sourcesContent = properties.sourcesContent;\n    this.names = properties.names;\n    this.mappings = properties.mappings;\n};\n\nSourceMap.prototype = {\n    toString: function toString() {\n        return JSON.stringify(this);\n    },\n\n    toUrl: function toUrl() {\n        return 'data:application/json;charset=utf-8;base64,' + btoa$1(this.toString());\n    }\n};\n\nvar alreadyWarned = false;\n\n/**\n * Generates a v3 sourcemap between an original source and its built form\n * @param {object} definition - the result of `rcu.parse( originalSource )`\n * @param {object} options\n * @param {string} options.source - the name of the original source file\n * @param {number=} options.offset - the number of lines in the generated\n   code that precede the script portion of the original source\n * @param {string=} options.file - the name of the generated file\n * @returns {object}\n */\nfunction generateSourceMap(definition, options) {\n    var lines, mappings, offset;\n\n    if (!options || !options.source) {\n        throw new Error('You must supply an options object with a `source` property to rcu.generateSourceMap()');\n    }\n\n    if ('padding' in options) {\n        options.offset = options.padding;\n\n        if (!alreadyWarned) {\n            console.log('rcu: options.padding is deprecated, use options.offset instead');\n            alreadyWarned = true;\n        }\n    }\n\n    // The generated code probably includes a load of module gubbins - we don't bother\n    // mapping that to anything, instead we just have a bunch of empty lines\n    offset = new Array((options.offset || 0) + 1).join(';');\n\n    lines = definition.script.split('\\n');\n    mappings = offset + lines.map(function (line, i) {\n        if (i === 0) {\n            // first mapping points to code immediately following opening <script> tag\n            return encode([0, 0, definition.scriptStart.line, definition.scriptStart.column]);\n        }\n\n        if (i === 1) {\n            return encode([0, 0, 1, -definition.scriptStart.column]);\n        }\n\n        return 'AACA'; // equates to [ 0, 0, 1, 0 ];\n    }).join(';');\n\n    return new SourceMap({\n        file: options.file,\n        sources: [options.source],\n        sourcesContent: [definition.source],\n        names: [],\n        mappings: mappings\n    });\n}\n\nfunction make(source, config, callback, errback) {\n    var definition, url, createComponent, loadImport, imports, loadModule, modules, remainingDependencies, onloaded, ready;\n\n    config = config || {};\n\n    // Implementation-specific config\n    url = config.url || '';\n    loadImport = config.loadImport;\n    loadModule = config.loadModule;\n\n    definition = parse(source);\n\n    createComponent = function createComponent() {\n        var options, Component, factory, component, exports, prop;\n\n        options = {\n            template: definition.template,\n            partials: definition.partials,\n            css: definition.css,\n            components: imports\n        };\n\n        if (definition.script) {\n            var sourceMap = generateSourceMap(definition, {\n                source: url,\n                content: source\n            });\n\n            try {\n                factory = new eval2.Function('component', 'require', 'Ractive', definition.script, {\n                    sourceMap: sourceMap\n                });\n\n                component = {};\n                factory(component, config.require, rcu.Ractive);\n                exports = component.exports;\n\n                if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {\n                    for (prop in exports) {\n                        if (exports.hasOwnProperty(prop)) {\n                            options[prop] = exports[prop];\n                        }\n                    }\n                }\n\n                Component = rcu.Ractive.extend(options);\n            } catch (err) {\n                errback(err);\n                return;\n            }\n\n            callback(Component);\n        } else {\n            Component = rcu.Ractive.extend(options);\n            callback(Component);\n        }\n    };\n\n    // If the definition includes sub-components e.g.\n    //     <link rel='ractive' href='foo.html'>\n    //\n    // ...then we need to load them first, using the loadImport method\n    // specified by the implementation.\n    //\n    // In some environments (e.g. AMD) the same goes for modules, which\n    // most be loaded before the script can execute\n    remainingDependencies = definition.imports.length + (loadModule ? definition.modules.length : 0);\n\n    if (remainingDependencies) {\n        onloaded = function onloaded() {\n            if (! --remainingDependencies) {\n                if (ready) {\n                    createComponent();\n                } else {\n                    setTimeout(createComponent, 0); // cheap way to enforce asynchrony for a non-Zalgoesque API\n                }\n            }\n        };\n\n        if (definition.imports.length) {\n            if (!loadImport) {\n                throw new Error('Component definition includes imports (e.g. `<link rel=\""ractive\"" href=\""' + definition.imports[0].href + '\"">`) but no loadImport method was passed to rcu.make()');\n            }\n\n            imports = {};\n\n            definition.imports.forEach(function (toImport) {\n                loadImport(toImport.name, toImport.href, url, function (Component) {\n                    imports[toImport.name] = Component;\n                    onloaded();\n                });\n            });\n        }\n\n        if (loadModule && definition.modules.length) {\n            modules = {};\n\n            definition.modules.forEach(function (name) {\n                loadModule(name, name, url, function (Component) {\n                    modules[name] = Component;\n                    onloaded();\n                });\n            });\n        }\n    } else {\n        setTimeout(createComponent, 0);\n    }\n\n    ready = true;\n}\n\nfunction resolvePath(relativePath, base) {\n    var pathParts, relativePathParts, part;\n\n    // If we've got an absolute path, or base is '', return\n    // relativePath\n    if (!base || relativePath.charAt(0) === '/') {\n        return relativePath;\n    }\n\n    // 'foo/bar/baz.html' -> ['foo', 'bar', 'baz.html']\n    pathParts = (base || '').split('/');\n    relativePathParts = relativePath.split('/');\n\n    // ['foo', 'bar', 'baz.html'] -> ['foo', 'bar']\n    pathParts.pop();\n\n    while (part = relativePathParts.shift()) {\n        if (part === '..') {\n            pathParts.pop();\n        } else if (part !== '.') {\n            pathParts.push(part);\n        }\n    }\n\n    return pathParts.join('/');\n}\n\nvar rcu = {\n    init: function init(copy) {\n        rcu.Ractive = copy;\n    },\n\n    parse: parse,\n    make: make,\n    generateSourceMap: generateSourceMap,\n    resolve: resolvePath,\n    getName: getName\n};\n\nvar get;\n\n// Test for XHR to see if we're in a browser...\nif (typeof XMLHttpRequest !== 'undefined') {\n    get = function get(url) {\n        return new _ractive2.default.Promise(function (fulfil, reject) {\n            var xhr, onload, loaded;\n\n            xhr = new XMLHttpRequest();\n            xhr.open('GET', url);\n\n            onload = function onload() {\n                if (xhr.readyState !== 4 || loaded) {\n                    return;\n                }\n\n                fulfil(xhr.responseText);\n                loaded = true;\n            };\n\n            xhr.onload = xhr.onreadystatechange = onload;\n            xhr.onerror = reject;\n            xhr.send();\n\n            if (xhr.readyState === 4) {\n                onload();\n            }\n        });\n    };\n}\n\n// ...or in node.js\nelse {\n        get = function get(url) {\n            return new _ractive2.default.Promise(function (fulfil, reject) {\n                require('fs').readFile(url, function (err, result) {\n                    if (err) {\n                        return reject(err);\n                    }\n\n                    fulfil(result.toString());\n                });\n            });\n        };\n    }\n\nvar get$1 = get;\n\nvar promises = {};\nvar global = typeof window !== 'undefined' ? window : {};\n// Load a single component:\n//\n//     Ractive.load( 'path/to/foo' ).then( function ( Foo ) {\n//       var foo = new Foo(...);\n//     });\nfunction loadSingle(path, parentUrl, baseUrl, cache) {\n    var promise, url;\n\n    url = rcu.resolve(path, path[0] === '.' ? parentUrl : baseUrl);\n\n    // if this component has already been requested, don't\n    // request it again\n    if (!cache || !promises[url]) {\n        promise = get$1(url).then(function (template) {\n            return new _ractive2.default.Promise(function (fulfil, reject) {\n                rcu.make(template, {\n                    url: url,\n                    loadImport: function loadImport(name, path, parentUrl, callback) {\n                        // if import has a relative URL, it should resolve\n                        // relative to this (parent). Otherwise, relative\n                        // to load.baseUrl\n                        loadSingle(path, parentUrl, baseUrl, cache).then(callback, reject);\n                    },\n                    require: ractiveRequire\n                }, fulfil, reject);\n            });\n        });\n\n        promises[url] = promise;\n    }\n\n    return promises[url];\n}\n\nfunction ractiveRequire(name) {\n    var dependency, qualified;\n\n    dependency = load.modules.hasOwnProperty(name) ? load.modules[name] : global.hasOwnProperty(name) ? global[name] : null;\n\n    if (!dependency && typeof require === 'function') {\n        try {\n            dependency = require(name);\n        } catch (e) {\n            if (typeof process !== 'undefined') {\n                dependency = require(process.cwd() + '/' + name);\n            } else {\n                throw e;\n            }\n        }\n    }\n\n    if (!dependency) {\n        qualified = !/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(name) ? '[\""' + name + '\""]' : '.' + name;\n        throw new Error('Ractive.load() error: Could not find dependency \""' + name + '\"". It should be exposed as Ractive.load.modules' + qualified + ' or window' + qualified);\n    }\n\n    return dependency;\n}\n\n// Create globally-available components from links found on the page:\n//\n//     <link rel='ractive' href='path/to/foo.html'>\n//\n// You can optionally add a name attribute, otherwise the file name (in\n// the example above, 'foo') will be used instead. The component will\n// be available as `Ractive.components.foo`:\n//\n//     Ractive.load().then( function () {\n//       var foo = new Ractive.components.foo(...);\n//     });\nfunction loadFromLinks(baseUrl, cache) {\n    var promise = new _ractive2.default.Promise(function (resolve, reject) {\n        var links, pending;\n\n        links = toArray(document.querySelectorAll('link[rel=\""ractive\""]'));\n        pending = links.length;\n\n        links.forEach(function (link) {\n            var name = getNameFromLink(link);\n\n            loadSingle(link.getAttribute('href'), '', baseUrl, cache).then(function (Component) {\n                _ractive2.default.components[name] = Component;\n\n                if (! --pending) {\n                    resolve();\n                }\n            }, reject);\n        });\n    });\n\n    return promise;\n}\n\nfunction getNameFromLink(link) {\n    return link.getAttribute('name') || rcu.getName(link.getAttribute('href'));\n}\n\nfunction toArray(arrayLike) {\n    var arr = [],\n        i = arrayLike.length;\n\n    while (i--) {\n        arr[i] = arrayLike[i];\n    }\n\n    return arr;\n}\n\n// Load multiple components:\n//\n//     Ractive.load({\n//       foo: 'path/to/foo.html',\n//       bar: 'path/to/bar.html'\n//     }).then( function ( components ) {\n//       var foo = new components.foo(...);\n//       var bar = new components.bar(...);\n//     });\nfunction loadMultiple(map, baseUrl, cache) {\n    var promise = new _ractive2.default.Promise(function (resolve, reject) {\n        var pending = 0,\n            result = {},\n            name,\n            load;\n\n        load = function load(name) {\n            var path = map[name];\n\n            loadSingle(path, baseUrl, baseUrl, cache).then(function (Component) {\n                result[name] = Component;\n\n                if (! --pending) {\n                    resolve(result);\n                }\n            }, reject);\n        };\n\n        for (name in map) {\n            if (map.hasOwnProperty(name)) {\n                pending += 1;\n                load(name);\n            }\n        }\n    });\n\n    return promise;\n}\n\nrcu.init(_ractive2.default);\n\nfunction load(url) {\n    var baseUrl = load.baseUrl;\n    var cache = load.cache !== false;\n\n    if (!url) {\n        return loadFromLinks(baseUrl, cache);\n    }\n\n    if ((typeof url === 'undefined' ? 'undefined' : _typeof(url)) === 'object') {\n        return loadMultiple(url, baseUrl, cache);\n    }\n\n    return loadSingle(url, baseUrl, baseUrl, cache);\n}\n\nload.baseUrl = '';\nload.modules = {};\n\nexports.default = load;\n\n}).call(this,require('_process'),require(\""buffer\"").Buffer)\n},{\""_process\"":21,\""buffer\"":18,\""fs\"":17}],14:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\nvar DEFAULTS = {\n    delay: 0,\n    duration: 300,\n    easing: 'linear'\n};\n\nfunction fade(t, params) {\n    var targetOpacity;\n\n    params = t.processParams(params, DEFAULTS);\n\n    if (t.isIntro) {\n        targetOpacity = t.getStyle('opacity');\n        t.setStyle('opacity', 0);\n    } else {\n        targetOpacity = 0;\n    }\n\n    t.animateStyle('opacity', targetOpacity, params).then(t.complete);\n}\n\nexports.default = fade;\n\n},{}],15:[function(require,module,exports){\n\""use strict\"";\n\nObject.defineProperty(exports, \""__esModule\"", {\n    value: true\n});\n\n/**\n * Catches Ractive Load errors\n * The setTimeout ensures the error doesn't get swallowed (this can be a problem with promises...)\n * @param  {Object} err\n */\nfunction ractiveLoadCatch(err) {\n    setTimeout(function () {\n        throw err;\n    });\n}\n\nexports.ractiveLoadCatch = ractiveLoadCatch;\n\n},{}],16:[function(require,module,exports){\n'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n  var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n  for (var i = 0, len = code.length; i < len; ++i) {\n    lookup[i] = code[i]\n    revLookup[code.charCodeAt(i)] = i\n  }\n\n  revLookup['-'.charCodeAt(0)] = 62\n  revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n  var i, j, l, tmp, placeHolders, arr\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n  // base64 is 4/3 + up to two characters of the original data\n  arr = new Arr(len * 3 / 4 - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n\n},{}],17:[function(require,module,exports){\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.foo = function () { return 42 }\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\""value\"" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\""size\"" argument must be a number')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; i++) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\""encoding\"" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  that.write(string, encoding)\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'binary':\n    case 'base64':\n    case 'raw':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\""list\"" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; i++) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; i++) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\""list\"" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'binary':\n      // Deprecated\n      case 'raw':\n      case 'raws':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \""this.length <= MAX_UINT32\"" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'binary':\n        return binarySlice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var foundIndex = -1\n  for (var i = 0; byteOffset + i < arrLength; i++) {\n    if (read(arr, byteOffset + i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n      if (foundIndex === -1) foundIndex = i\n      if (i - foundIndex + 1 === valLength) return (byteOffset + foundIndex) * indexSize\n    } else {\n      if (foundIndex !== -1) i -= i - foundIndex\n      foundIndex = -1\n    }\n  }\n  return -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset >>= 0\n\n  if (this.length === 0) return -1\n  if (byteOffset >= this.length) return -1\n\n  // Negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  if (Buffer.isBuffer(val)) {\n    // special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(this, val, byteOffset, encoding)\n  }\n  if (typeof val === 'number') {\n    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n    }\n    return arrayIndexOf(this, [ val ], byteOffset, encoding)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; i++) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'binary':\n        return binaryWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \""call stack size exceeded\"".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction binarySlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; i++) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; i++) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\""buffer\"" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\""value\"" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; i--) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; i++) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; i++) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; i++) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; i++) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; i++) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n}).call(this,typeof global !== \""undefined\"" ? global : typeof self !== \""undefined\"" ? self : typeof window !== \""undefined\"" ? window : {})\n},{\""base64-js\"":16,\""ieee754\"":19,\""isarray\"":20}],19:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n},{}],20:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n},{}],21:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it don't break things.\nvar cachedSetTimeout = setTimeout;\nvar cachedClearTimeout = clearTimeout;\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = cachedSetTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    cachedClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        cachedSetTimeout(drainQueue, 0);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}]},{},[1]);\n""],""file"":""app.js"",""sourceRoot"":""/source/""}"
ab387b2d80ed26bc51dc78d664bd5f281b9eb51b,7422072,        // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
71496d2185ca495704cd8d98e10b438389065806,3330919,        // http://stackoverflow.com/a/3330919)
6945ca9f760afb728d3303f7eb2da20d6d74347e,25669695,    // simplified from: http://stackoverflow.com/a/25669695/219684
1f8807287aa82019809b442d02f1b4ecd256f47f,902761,    http://stackoverflow.com/questions/902761/saving-a-numpy-array-as-an-image
308f5d682a0f70568176db4ac92d176f816403b1,16982510, * https://stackoverflow.com/a/16982510/7133471
56f93fb7afd00c03d2d5e1c0e51c74c0a239b603,24474581,-- (http://stackoverflow.com/questions/24474581)
5a60ee79e96828a39764940dc519a2dc20961928,2087250,"          </dd><dt class=""implicit"">Shadowing</dt><dd>This implicitly inherited member is ambiguous. One or more implicitly inherited members have similar signatures, so calling this member may produce an ambiguous implicit conversion compiler error.<br />To access this member you can use a <a href=""http://stackoverflow.com/questions/2087250/what-is-the-purpose-of-type-ascription-in-scala"" target=""_blank"">type ascription</a>:<br /><div class=""cmt""><pre>(section: ArrowAssoc[Section]).x</pre></div></dd><dt>Definition Classes</dt><dd>ArrowAssoc</dd><dt>Annotations</dt><dd>"
16054a62aefafda8f77a0e8abda86c3ad397c889,3401428,        # Taken from http://stackoverflow.com/questions/3401428/how-to-get-an-isoformat-datetime-string-including-the-default-timezone
c3350bd257b06aaa337678a61e87c10c50a09b5e,6990484,#   - http://stackoverflow.com/questions/6990484/git-checkout-by-date
cd52cbbe6b7e38d6fc1e3dce8b2c54a023abeb99,30805753, *     http://stackoverflow.com/questions/30805753/how-to-map-java-time-localdate-field-with-orika</a>
45ff40a9034c89d35580d9384df96bd0e85cd4f1,14967647,	    // From http://stackoverflow.com/questions/14967647/ (continues on next line)
1df2a5507265830fc5971bfa98b286cd6a4fd4e6,14404757, * https://stackoverflow.com/questions/14404757/how-to-encrypt-and-decrypt-plain-text-with-a-rsa-keys-in-go
1d88b568c41fd21da4bf447f40dbde6c92462f9a,5419173,            // See http://stackoverflow.com/questions/5419173/t4mvc-asynccontroller
57dd3fe2b5b6c7fa3a32331560fa04bcf8274b1e,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
7fc969b55dca823bcb8d01a73f09b6421ed9beda,24375832,# http://stackoverflow.com/questions/24375832/fread-and-column-with-a-trailing-backslash
8b224eab6fe48bf3fbb899c32db6c9138e559088,19491336,// http://stackoverflow.com/questions/19491336/get-url-parameter-jquery
0a7519b22f9e87cdf251a32ede1de71b22452ff8,12026551,                    # http://stackoverflow.com/questions/12026551/how-to-find-out-whether-a-member-function-is-const-or-volatile-with-libclang
6d1a2a426aa17c612500fa85e45e0c406b073cd5,3160113,#YES http://stackoverflow.com/questions/3160113/how-can-i-add-an-msbuild-import-with-ivsbuildpropertystorage
6e1cd69022483325978ce40b398e3f1e691d0f4a,3762199,"<li><a class=""reference external"" href=""http://stackoverflow.com/questions/3762199/etl-using-python"">http://stackoverflow.com/questions/3762199/etl-using-python</a></li>"
67093494f0a7726db33e4f8ed0bbd5d207750713,77005,"                <span class=""comment-date"" dir=""ltr""><a class=""comment-link"" href=""http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes#comment15654678_77005""><span title=""2012-08-02 20:01:17Z"" class=""relativetime-clean"">Aug 2 '12 at 20:01</span></a></span>"
427f5d95c9022432ebc2b3facc4eeda5f875b39a,5344560, * Алгоритм взят отсюда: http://stackoverflow.com/a/5344560
f52469391c715afa44bb71c3142c17bf82eb5eab,429812,		;-- Based on this method: http://stackoverflow.com/a/429812/494472
259c2bf7c8bca139ed17ccd58328ce9b05570779,35820522,        // https://stackoverflow.com/a/35820522/805882
746029cc493464cefa0839a78721223d5fad45bb,37628,0;114;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;reflection;1.0;0.06759656652360516;3.375;0;0
0d93ede3330649316266af531f24f77ccfda8edf,18004150, * http://stackoverflow.com/questions/18004150/desktop-api-is-not-supported-on-the-current-platform
de2b1836b491a0c00d9c197487ce2566f744088f,8079061,        # http://stackoverflow.com/questions/8079061/function-application-over-numpys-matrix-row-column
05049ad39d17fb9aa45c364ce4e09935ff0a1736,263416,            // credit: http://stackoverflow.com/a/263416/677735
f53d52d8d60fadabb1ab78465c7842f74d6defe8,3143070,// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
d4a8e222c96d2614af8af323f99578307349105a,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
0adc147afebdd8317376d71832f3b0a483bda344,7657624,// Source: http://stackoverflow.com/questions/7657624/get-master-sound-volume-in-c-in-linux
52f7d091d3a27bd1cf2a5777579ae92a04880349,5196591,  /* http://stackoverflow.com/a/5196591/2112538 */
9339550b3601a21dba5af64d4901456c035cb3cb,2564472,See the [original blog post](http://journals.jevon.org/users/jevon-phd/entry/19818) or the related [StackOverflow answer](http://stackoverflow.com/a/2564472/39531).
8c0be47c936e2912de4e0194cec3cb8d88b22d81,4998908, * http://stackoverflow.com/q/4998908
777a32af5aa59bfa7f8007d12b3ceceb48ad6698,744093,    # reverse with sed     ref: http://stackoverflow.com/a/744093/689223
0577b5dec406df74c9c7aaba755f0b819c04c9a3,937313,    // Reference: http://stackoverflow.com/questions/937313/android-basic-gesture-detection
6321b87051281bea81c5a0367dd0a7ec5a4545c1,105034,     * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
b687d3c25713b983cfc63392f2775eb87b6b1bb6,7490772,# From https://stackoverflow.com/a/7490772
ac7ac49b07ac80e0aae7832abf1b00b201d4a840,3102604,        // http://stackoverflow.com/questions/3102604/ignore-exceptions-that-cross-appdomains-when-debugging-in-visual-studio-2010
0244aecfa5e41e4a15651bdbfc040c16467e0db1,17863685,"    <p>更多信息请参考 <a href=""http://stackoverflow.com/questions/17408815/fieldset-resizes-wrong-appears-to-have-unremovable-min-width-min-content/17863685#17863685"">this Stack Overflow answer</a>.</p>"
36b8c16e0f5a06faaee1c6f802805ab85fdbfda6,10751094,    http://stackoverflow.com/questions/10751094/how-to-create-a-neat-two-columns-input-form-in-android -->
86e17fd030699e9d5cc309bb34e217f2e0ca7115,10300743,  // based on http://stackoverflow.com/a/10300743/280842
659d6cc6cd01c7023bbd7d7aaf3e16d531c71644,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
f2168b9435090e704fc262f0531427a8b3ce429c,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
40270064dbcd2aadee9e0ac6f5b85fd9c2e5fdff,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
74d03ef0518dda2681b3c9d33e32054ae9e292e7,22202182,;; http://stackoverflow.com/questions/22202182/error-on-websocket-when-try-to-use-ipython-notebook-in-emacs
b0e14dac9ea358c7bba708974f6bd11039bc8e60,565282,"		 * For more information, check: http://stackoverflow.com/a/565282/1091440"
58582286cb74013c141a42420b48b42517e158a5,2616906,// http://stackoverflow.com/questions/2616906/how-do-i-output-coloured-text-to-a-linux-terminal
b8b65d95ec7d98a23be20070aab42dee6630a669,7284,0;8;https://stackoverflow.com/questions/7284/what-is-turing-complete;takes_10_numbers;0.16666666666666663;0.3333333333333333;1.0;1.5;0.7071067811865475;0;be_adds_by
a51b7d06bed39054c52dd63113a3a975b062121a,19697846,# Props to http://stackoverflow.com/questions/19697846/python-csv-to-json
cefe85eb453172a206de6846a3105517aa98187f,654112,		// http://stackoverflow.com/questions/654112/how-do-you-detect-support-for-vml-or-svg-in-a-browser
27b36bedd9d2e790960ecdbd7e9be3aae7795e5a,8785624,// http://stackoverflow.com/questions/8785624/how-to-safely-wrap-console-log
0c7b075922dc6cf3d22496e147585e67ce6d22ac,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
af229dbab80a8f1985ee0d57beaebe741411a9eb,6935442,TODO application: https://stackoverflow.com/questions/6935442/x86-spinlock-using-cmpxchg
d57a47c2c9b782300539203941365c1e42b73478,3330919,        // http://stackoverflow.com/a/3330919)
4accedecad801339266afc2d519ef412aa7aaa05,17940144,"{""DataSource"":""stackoverflow.com"",""CommentId"":""26260602"",""Text"":""hi... Could you please refer following url where i have mentioned in details about my requirement  ---                                                                                                     <a href=\""http://stackoverflow.com/questions/17940144/how-to-store-the-most-recently-opened-content-of-infowindow-into-a-variable-in-g\"" title=\""how to store the most recently opened content of infowindow into a variable in g\"">stackoverflow.com/questions/17940144/&hellip;</a>"",""Language"":""javascript""}"
efecadaceae7b079619980036b0c58ab80b16fd2,35488927,        # https://stackoverflow.com/questions/35488927)
e5db58133d38d284e6c77b9862411b3e9162f1b8,3978040,        // ref http://stackoverflow.com/a/3978040
855a30ab5a9b89479fe34912c16c729b958f89ba,1960473, * http://stackoverflow.com/questions/1960473/unique-values-in-an-array
49f2fb25e604ab598f4f719a5724a3b62a7d1a33,26032513,"      ""description"":""iOS 8 Safari has [issues with nth-child](http://stackoverflow.com/questions/26032513/ios8-safari-after-a-pushstate-the-nth-child-selectors-not-works).\r\n"""
10dba46aba3851c0e593ab44a1feb2c2e7001045,3647634,        // credits : http://stackoverflow.com/a/3647634
f6abca2b7df76987b5fa988fc8c9c7a290315c65,3538851,            // From: http://stackoverflow.com/questions/3538851/php-imagick-setimageopacity-destroys-transparency-and-does-nothing
5b7b485836f77a1686e14ee32cafd625f5fbb7a4,22308016,"            // N.b.: temp goes on index name, not table name.  See http://stackoverflow.com/a/22308016."
b036b4159e9184ff3e87ebad5d3b15392e7c6342,12335841,// http://stackoverflow.com/questions/12328259/how-do-you-strip-the-unit-from-any-number-in-sass/12335841#12335841
11ec988a70768b9c098aa872fa7f40ce4cc90ede,1582534,"{""version"":3,""sources"":[""../src/gadget-ui.js"",""../src/javascript/gadget-ui.model.js"",""../src/polyfill.js"",""../src/javascript/display/wrapper/pre.js"",""../src/javascript/display/bubble.js"",""../src/javascript/display/collapsiblepane.js"",""../src/javascript/display/dialog.js"",""../src/javascript/display/fileuploadwrapper.js"",""../src/javascript/display/floatingpane.js"",""../src/javascript/display/modal.js"",""../src/javascript/display/progressbar.js"",""../src/javascript/display/sidebar.js"",""../src/javascript/display/wrapper/post.js"",""../src/javascript/input/wrapper/pre.js"",""../src/javascript/input/combobox.js"",""../src/javascript/input/fileuploader.js"",""../src/javascript/input/lookuplistinput.js"",""../src/javascript/input/selectinput.js"",""../src/javascript/input/textinput.js"",""../src/javascript/input/wrapper/post.js"",""../src/objects/wrapper/pre.js"",""../src/objects/constructor.js"",""../src/objects/eventbindings.js"",""../src/objects/fileitem.js"",""../src/objects/wrapper/post.js"",""../src/javascript/gadget-ui.util.js""],""names"":[],""mappings"":""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"",""file"":""gadget-ui.js"",""sourcesContent"":[""\""use strict\"";\n\n/*\n * author: Robert Munn <robert.d.munn@gmail.com>\n * \n * Copyright (C) 2016 Robert Munn\n * \n * This is free software licensed under the Mozilla Public License 2.0\n * \n * https://www.mozilla.org/en-US/MPL/2.0/\n * \n * \n */\n\nvar gadgetui = {\n\t\tkeyCode: {\n\t\t\tBACKSPACE: 8,\n\t\t\tCOMMA: 188,\n\t\t\tDELETE: 46,\n\t\t\tDOWN: 40,\n\t\t\tEND: 35,\n\t\t\tENTER: 13,\n\t\t\tESCAPE: 27,\n\t\t\tHOME: 36,\n\t\t\tLEFT: 37,\n\t\t\tPAGE_DOWN: 34,\n\t\t\tPAGE_UP: 33,\n\t\t\tPERIOD: 190,\n\t\t\tRIGHT: 39,\n\t\t\tSPACE: 32,\n\t\t\tTAB: 9,\n\t\t\tUP: 38\n\t\t}\n};\n\n// save mouse position\ndocument\n\t.addEventListener( \""mousemove\"", function(ev){ \n\t\tev = ev || window.event; \n\t\tgadgetui.mousePosition = gadgetui.util.mouseCoords(ev); \n\t});\n\n"",""gadgetui.model = ( function() {\r\n\t\""use strict\"";\r\n\r\n\tvar _model = {};\r\n\tfunction BindableObject( data, element ) {\r\n\t\tthis.data = data;\r\n\t\tthis.elements = [ ];\r\n\t\tif ( element !== undefined ) {\r\n\t\t\tthis.bind( element );\r\n\t\t}\r\n\t}\r\n\r\n\tBindableObject.prototype.handleEvent = function( ev ) {\r\n\t\tvar ix, obj;\r\n\t\tswitch ( ev.type ) {\r\n\t\t\tcase \""change\"":\r\n\t\t\t\tfor( ix = 0; ix < this.elements.length; ix++ ){\r\n\t\t\t\t\tobj = this.elements[ ix ];\r\n\t\t\t\t\tif( ev.originalSource === undefined ){\r\n\t\t\t\t\t\tev.originalSource = \""BindableObject.handleEvent['change']\"";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( ev.target.name === obj.prop && ev.originalSource !== 'BindableObject.updateDomElement' ){\r\n\t\t\t\t\t\t//select box binding\r\n\t\t\t\t\t\tif( ev.target.type.match( /select/ ) ){\r\n\t\t\t\t\t\t\tthis.change( { \tid : ev.target.value,\r\n\t\t\t\t\t\t\t\t\ttext : ev.target.options[ev.target.selectedIndex].innerHTML\r\n\t\t\t\t\t\t\t\t}, ev, obj.prop );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t// text input binding\r\n\t\t\t\t\t\tthis.change( ev.target.value, ev, obj.prop );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t}\r\n\t};\r\n\r\n\t// for each bound control, update the value\r\n\tBindableObject.prototype.change = function( value, event, property ) {\r\n\t\tvar ix, obj;\r\n\t\tif( event.originalSource === undefined ){\r\n\t\t\tevent.originalSource = \""BindableObject.change\"";\r\n\t\t}\r\n\t\tconsole.log( \""change : Source: \"" + event.originalSource );\r\n\r\n\t\t// this code changes the value of the BinableObject to the incoming value\r\n\t\tif ( property === undefined ) {\r\n\t\t\t// Directive is to replace the entire value stored in the BindableObject\r\n\t\t\t// update the BindableObject value with the incoming value\r\n\t\t\t// value could be anything, simple value or object, does not matter\r\n\t\t\tthis.data = value;\r\n\t\t}\r\n\t\telse if ( typeof this.data === 'object' ) {\r\n\t\t\t//Directive is to replace a property of the value stored in the BindableObject\r\n\t\t\t// verifies _this \""data\"" is an object and not a simple value\r\n\t\t\t// update the BindableObject's specified property with the incoming value\r\n\t\t\t// value could be anything, simple value or object, does not matter\r\n\r\n\t\t\tif( this.data[ property ] === undefined ){\r\n\t\t\t\tthrow( \""Property '\"" + property + \""' of object is undefined.\"" );\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tthis.data[ property ] = value;\r\n\t\t\t}\r\n\t\t\t// check if we are updating only a single property or the entire object\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthrow \""Attempt to treat a simple value as an object with properties. Change fails.\"";\r\n\t\t}\r\n\r\n\t\t// check if there are other dom elements linked to the property\r\n\t\tfor( ix = 0; ix < this.elements.length; ix++ ){\r\n\t\t\tobj = this.elements[ ix ];\r\n\t\t\tif( ( property === undefined || property === obj.prop ) && ( event.target !== undefined && obj.elem != event.target ) ){\r\n\t\t\t\tthis.updateDomElement( event,  obj.elem, value );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tBindableObject.prototype.updateDom = function( event, value, property ){\r\n\t\tvar ix, obj, key;\r\n\t\tif( event.originalSource === undefined ){\r\n\t\t\tevent.originalSource = 'BindableObject.updateDom';\r\n\t\t}\r\n\t\t// this code changes the value of the DOM element to the incoming value\r\n\t\tfor( ix = 0; ix < this.elements.length; ix++ ){\r\n\t\t\tobj = this.elements[ ix ];\r\n\r\n\t\t\tif ( property === undefined  ){\r\n\t\t\t\tif( typeof value === 'object' ){\r\n\t\t\t\t\tfor( key in value ){\r\n\t\t\t\t\t\tif( this.elements[ ix ].prop === key ){\r\n\t\t\t\t\t\t\tthis.updateDomElement( event, obj.elem, value[ key ] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// this code sets the value of each control bound to the BindableObject\r\n\t\t\t\t\t// to the correspondingly bound property of the incoming value\r\n\t\t\t\t\tthis.updateDomElement( event, obj.elem, value );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//break;\r\n\t\t\t}else if ( obj.prop === property ){\r\n\t\t\t\tthis.updateDomElement( event, obj.elem, value );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tBindableObject.prototype.updateDomElement = function( event, selector, newValue ){\r\n\t\tvar valueElements = \""INPUT\"";\r\n\t\tvar arrayElements = \""OL,UL,SELECT\"";\r\n\t\tvar wrappingElements = \""DIV,SPAN,H1,H2,H3,H4,H5,H6,P,TEXTAREA,LABEL,BUTTON\"";\r\n\r\n\t\tvar _updateOptions = function(){\r\n\t\t\tswitch( selector.tagName ){\r\n\t\t\t\tcase \""SELECT\"":\r\n\t\t\t\t\twhile (selector.firstChild) {\r\n\t\t\t\t\t\tselector.removeChild(selector.firstChild);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar idx = 0;\r\n\t\t\t\t\tnewValue.forEach( function( item ){\r\n\t\t\t\t\t\tvar opt = document.createElement(\""option\"");\r\n\t\t\t\t\t\tif( typeof item === 'object' ){\r\n\t\t\t\t\t\t\topt.value = item.id;\r\n\t\t\t\t\t\t\topt.text = item.text;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\topt.text = item;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tselector.appendChild( opt );\r\n\t\t\t\t\t\tidx++;\r\n\t\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase \""UL\"":\r\n\t\t\t\tcase \""OL\"":\r\n\t\t\t\t\twhile (selector.firstChild) {\r\n\t\t\t\t\t\tselector.removeChild(selector.firstChild);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewValue.forEach( function( item ){\r\n\t\t\t\t\t\tvar opt = document.createElement(\""li\"");\r\n\t\t\t\t\t\topt.textContent = item;\r\n\t\t\t\t\t\tselector.appendChild( opt );\r\n\t\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif( event.originalSource === undefined ){\r\n\t\t\tevent.originalSource = \""BindableObject.updateDomElement\"";\r\n\t\t}\r\n\t\t//console.log( \""updateDomElement : selector: { type: \"" + selector.nodeName + \"", name: \"" + selector.name + \"" }\"" );\r\n\t\t//console.log( \""updateDomElement : Source: \"" + event.originalSource );\r\n\r\n\t\t// updating the bound DOM element requires understanding what kind of DOM element is being updated\r\n\t\t// and what kind of data we are dealing with\r\n\r\n\t\tif( typeof newValue === 'object' ){\r\n\t\t\t// select box objects are populated with { text: text, id: id }\r\n\t\t\tif( valueElements.indexOf( selector.tagName ) >=0 ){\r\n\t\t\t\tselector.value = newValue.id;\r\n\t\t\t}else if( arrayElements.indexOf( selector.tagName ) >=0 ){\r\n\t\t\t\t_updateOptions();\r\n\t\t\t}else{\r\n\t\t\t\tselector.textContent = newValue.text;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif( valueElements.indexOf( selector.tagName ) >=0 ){\r\n\t\t\t\tselector.value = newValue;\r\n\t\t\t}else if( arrayElements.indexOf( selector.tagName ) >=0 ){\r\n\t\t\t\t_updateOptions();\r\n\t\t\t}else{\r\n\t\t\t\tselector.textContent = newValue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// we have three ways to update values\r\n\t\t// 1. via a change event fired from changing the DOM element\r\n\t\t// 2. via model.set() which should change the model value and update the dom element(s)\r\n\t\t// 3. via a second dom element, e.g. when more than one dom element is linked to the property\r\n\t\t//    we need to be able to update the other dom elements without entering an infinite loop\r\n\t\tif( event.originalSource !== 'model.set' ){\r\n\t\t\tvar ev = new Event( \""change\"" );\r\n\t\t\tev.originalSource = 'model.updateDomElement';\r\n\t\t\tselector.dispatchEvent( ev );\r\n\t\t}\r\n\t};\r\n\r\n\t// bind an object to an HTML element\r\n\tBindableObject.prototype.bind = function( element, property ) {\r\n\t\tvar e, _this = this;\r\n\r\n\t\tif ( property === undefined ) {\r\n\t\t\t// BindableObject holds a simple value\r\n\t\t\t// set the DOM element value to the value of the Bindable object\r\n\t\t\telement.value = this.data;\r\n\t\t\te = {\r\n\t\t\t\telem : element,\r\n\t\t\t\tprop : \""\""\r\n\t\t\t};\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// Bindable object holds an object with properties\r\n\t\t\t// set the DOM element value to the value of the specified property in the\r\n\t\t\t// Bindable object\r\n\t\t\telement.value = this.data[ property ];\r\n\t\t\te = {\r\n\t\t\t\telem : element,\r\n\t\t\t\tprop : property\r\n\t\t\t};\r\n\t\t}\r\n\t\t//add an event listener so we get notified when the value of the DOM element\r\n\t\t// changes\r\n\t\t//element[ 0 ].addEventListener( \""change\"", this, false );\r\n\t\t//IE 8 support\r\n\t\tif (element.addEventListener) {\r\n\t\t\telement.addEventListener( \""change\"", this, false);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// IE8\r\n\t\t\telement.attachEvent(\""onpropertychange\"", function( ev ){\r\n\t\t\t\tif( ev.propertyName === 'value'){\r\n\t\t\t\t\tvar el = ev.srcElement, val = ( el.nodeName === 'SELECT' ) ? { id: el.value, text: el.options[el.selectedIndex].innerHTML } : el.value;\r\n\t\t\t\t\t_this.change( val, { target: el }, el.name );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.elements.push( e );\r\n\t};\r\n\r\n\treturn {\r\n\t\tBindableObject : BindableObject,\r\n\r\n\t\tcreate : function( name, value, element ) {\r\n\t\t\tif ( element !== undefined ) {\r\n\t\t\t\t_model[ name ] = new BindableObject( value, element );\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t_model[ name ] = new BindableObject( value );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tdestroy : function( name ) {\r\n\t\t\tdelete _model[ name ];\r\n\t\t},\r\n\r\n\t\tbind : function( name, element ) {\r\n\t\t\tvar n = name.split( \"".\"" );\r\n\t\t\tif ( n.length === 1 ) {\r\n\t\t\t\t_model[ name ].bind( element );\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t_model[ n[ 0 ] ].bind( element, n[ 1 ] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\texists : function( name ) {\r\n\t\t\tif ( _model.hasOwnProperty( name ) ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\t// getter - if the name of the object to get has a period, we are\r\n\t\t// getting a property of the object, e.g. user.firstname\r\n\t\tget : function( name ) {\r\n\t\t\tif( name === null || name === undefined ){\r\n\t\t\t\tconsole.log( \""Expected parameter [name] is not defined.\"" );\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar n = name.split( \"".\"" );\r\n\t\t\ttry{\r\n\t\t\t\tif ( n.length === 1 ) {\r\n\t\t\t\t\tif( _model[name] === undefined ){\r\n\t\t\t\t\t\tthrow \""Key '\"" + name + \""' does not exist in the model.\"";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn _model[ name ].data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( _model[n[0]] === undefined ){\r\n\t\t\t\t\tthrow \""Key '\"" + n[0] + \""' does not exist in the model.\"";\r\n\t\t\t\t}\r\n\t\t\t\treturn _model[n[0]].data[ n[ 1 ] ];\r\n\r\n\t\t\t}catch( e ){\r\n\t\t\t\tconsole.log( e );\r\n\t\t\t\treturn undefined;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setter - if the name of the object to set has a period, we are\r\n\t\t// setting a property of the object, e.g. user.firstname\r\n\t\tset : function( name, value ) {\r\n\t\t\tif( name === null || name === undefined ){\r\n\t\t\t\tconsole.log( \""Expected parameter [name] is not defined.\"" );\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar n = name.split( \"".\"" ), event = { originalSource : 'model.set'};\r\n\t\t\tif ( this.exists( n[ 0 ] ) === false ) {\r\n\t\t\t\tif ( n.length === 1 ) {\r\n\t\t\t\t\tthis.create( name, value );\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// don't create complex objects, only simple values\r\n\t\t\t\t\tthrow \""Object \"" + n[ 0 ] + \""is not yet initialized.\"";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif ( n.length === 1 ) {\r\n\t\t\t\t\t_model[ name ].change( value, event );\r\n\t\t\t\t\t_model[ name ].updateDom( event, value );\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t_model[ n[ 0 ] ].change( value, event, n[1] );\r\n\t\t\t\t\t_model[ n[ 0 ] ].updateDom( event, value, n[1] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//console.log( \""model value set: name: \"" + name + \"", value: \"" + value );\r\n\t\t}\r\n\t};\r\n\r\n}() );\r\n"",""if (!String.prototype.trim) {\n  String.prototype.trim = function () {\n    return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n  };\n}\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function (callbackfn, thisArg) {\n        var O = Object(this),\n            lenValue = O.length,\n            len = lenValue >>> 0,\n            T,\n            k,\n            Pk,\n            kPresent,\n            kValue;\n \n        if (typeof callbackfn !== 'function') {\n            throw new TypeError();\n        }\n \n        T = thisArg ? thisArg : undefined;\n \n        k = 0;\n        while (k < len) {\n            Pk = k.toString();\n            kPresent = O.hasOwnProperty(Pk);\n            if (kPresent) {\n                kValue = O[Pk];\n                callbackfn.call(T, kValue, k, O);\n            }\n            k += 1;\n        }\n        return undefined;\n    };\n}"",""gadgetui.display = (function() {\n\t\n\tfunction getStyleRuleValue(style, selector, sheet) {\n\t    var sheets = typeof sheet !== 'undefined' ? [sheet] : document.styleSheets;\n\t    for (var i = 0, l = sheets.length; i < l; i++) {\n\t        var sheet = sheets[i];\n\t        if( !sheet.cssRules ) { continue; }\n\t        for (var j = 0, k = sheet.cssRules.length; j < k; j++) {\n\t            var rule = sheet.cssRules[j];\n\t            if (rule.selectorText && rule.selectorText.split(',').indexOf(selector) !== -1) {\n\t                return rule.style[style];\n\t            }\n\t        }\n\t    }\n\t    return null;\n\t}"",""function Bubble( selector, message, options ){\r\n\tthis.selector = selector;\r\n\tthis.message = message;\r\n\tthis.config( options );\r\n\tthis.render();\r\n\tthis.setStyles();\r\n\tthis.setBehaviors();\r\n\tthis.show();\r\n}\r\n\r\nBubble.prototype.render = function(){\r\n\r\n\tvar\tcss = gadgetui.util.setStyle;\r\n\tvar span,\r\n\t\tarrowOutside,\r\n\t\tarrowInside;\r\n\r\n\tthis.bubbleElement = document.createElement( \""div\"" );\r\n\tgadgetui.util.addClass( this.bubbleElement, \""gadgetui-bubble\"" );\r\n\tgadgetui.util.addClass( this.bubbleElement, \""gadgetui-bubble-\"" + this.bubbleType );\r\n\tif( this.class ){\r\n\t\tgadgetui.util.addClass( this.bubbleElement, this.class );\r\n\t}\r\n\tthis.bubbleElement.setAttribute( \""id\"", this.id );\r\n\tthis.bubbleElement.innerHTML = this.message;\r\n\r\n\tif( this.closable ){\r\n \t\tspan = document.createElement( \""span\"" );\r\n\t\tcss( span, \""float\"", \""right\"" );\r\n\t\tvar icon = `<svg class=\""feather\"">\r\n                <use xlink:href=\""${this.featherPath}/dist/feather-sprite.svg#x-circle\""/>\r\n                </svg>`;\r\n\t\tspan.innerHTML = icon;\r\n\t}\r\n\r\n\tthis.selector.parentNode.insertBefore( this.bubbleElement, this.selector.nextSibling );\r\n\tif( this.closable ){\r\n\t\tthis.bubbleElement.appendChild( span );\r\n\t}\r\n};\r\n\r\nBubble.prototype.show = function(){\r\n\tgadgetui.util.setStyle( this.bubbleElement, \""display\"", \""block\"" );\r\n};\r\n\r\nBubble.prototype.setStyles = function(){\r\n\tvar\tcss = gadgetui.util.setStyle;\r\n\tthis.setBubbleStyles();\r\n\tthis.calculatePosition();\r\n\r\n\tcss( this.bubbleElement, \""position\"", \""absolute\"" );\r\n\tcss( this.bubbleElement, \""top\"", this.top );\r\n\tcss( this.bubbleElement, \""left\"", this.left );\r\n\r\n\tthis.spanElement = this.bubbleElement.querySelector( \""span\"" );\r\n\tcss( this.spanElement, \""right\"", \""3px\"" );\r\n\tcss( this.spanElement, \""position\"", \""absolute\"" );\r\n\tcss( this.spanElement, \""cursor\"", \""pointer\""  );\r\n\tcss( this.spanElement, \""top\"", \""3px\"" );\r\n};\r\n\r\nBubble.prototype.setBubbleStyles = function(){\r\n\tvar css = gadgetui.util.setStyle;\r\n\tcss( this.bubbleElement, \""margin\"", 0 );\r\n\r\n\tif( this.boxShadow ){\r\n\t\tcss( this.bubbleElement, \""-webkit-box-shadow\"", this.shadowSize + \""px \"" + this.shadowSize + \""px 4px \"" + this.boxShadowColor );\r\n\t\tcss( this.bubbleElement, \""-moz-box-shadow\"", this.shadowSize + \""px \"" + this.shadowSize + \""px 4px \"" + this.boxShadowColor );\r\n\t\tcss( this.bubbleElement, \""box-shadow\"", this.shadowSize + \""px \"" + this.shadowSize + \""px 4px \"" + this.boxShadowColor );\r\n\t}\r\n};\r\n\r\nBubble.prototype.calculatePosition = function(){\r\n\tvar _this = this;\r\n\tthis.top = 0;\r\n\tthis.left = 0;\r\n\tvar relativeOffset = this.selector.getBoundingClientRect();\r\n\tvar bubbleCoords = this.bubbleElement.getBoundingClientRect();\r\n\tthis.position.split( \"" \"" ).forEach( function( ele ){\r\n\t\tswitch( ele ){\r\n\t\t\tcase \""top\"":\r\n\t\t\t\t_this.top =  relativeOffset.top - relativeOffset.height;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \""middle\"":\r\n\t\t\t\t_this.top = relativeOffset.top + Math.abs( relativeOffset.height - bubbleCoords.height  ) / 2;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \""bottom\"":\r\n\t\t\t\t_this.top = relativeOffset.height + relativeOffset.top;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \""left\"":\r\n\t\t\t\t_this.left = relativeOffset.left - relativeOffset.width - bubbleCoords.width;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \""right\"":\r\n\t\t\t\t_this.left = relativeOffset.width + relativeOffset.left;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \""center\"":\r\n\t\t\t\t_this.left = relativeOffset.width / 2  + relativeOffset.left;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t});\r\n};\r\n\r\nBubble.prototype.setBehaviors = function(){\r\n\tvar _this = this;\r\n\tvar css = gadgetui.util.setStyle;\r\n\r\n\tlet closeBubble = function(){\r\n\t\tif( typeof Velocity != 'undefined' && _this.animate ){\r\n\t\t\tVelocity( _this.bubbleElement, {\r\n\t\t\topacity: 0\r\n\t\t\t},{ duration: _this.delay, complete: function() {\r\n\t\t\t\t\tcss( _this.bubbleElement, \""display\"", \""none\"" );\r\n\t\t\t\t\t_this.bubbleElement.parentNode.removeChild( _this.bubbleElement );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcss( _this.bubbleElement, \""display\"", \""none\"" );\r\n\t\t\t_this.bubbleElement.parentNode.removeChild( _this.bubbleElement );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tthis.spanElement\r\n\t\t.addEventListener( \""click\"", function(){\r\n\t\t\t\tcloseBubble();\r\n\t\t\t});\r\n\r\n\tif( this.autoClose ){\r\n\t\tsetTimeout( closeBubble, this.autoCloseDelay );\r\n\t}\r\n};\r\n\r\nBubble.prototype.config = function( options ){\r\n\toptions = options || {};\r\n\r\n\tvar baseUIColor = options.baseUIColor || \""silver\"";\r\n\tthis.bubbleType = options.bubbleType || \""speech\"";\r\n\tthis.shadowColor = options.shadowColor || baseUIColor;\r\n\tthis.position = options.position || \""top left\"";\r\n\tthis.boxShadow = (( options.boxShadow === undefined) ? true : options.boxShadow );\r\n\tthis.shadowSize = 2; // shadow\r\n\tthis.arrowPosition = options.arrowPosition || \""bottom left\""; // location of arrow on bubble - top left | top right | top center | right top | right center | right bottom | bottom right | bottom center | bottom right | left bottom | left center | left top\r\n\tthis.arrowDirection = options.arrowDirection || \""middle\""; // direction arrow points - center | corner | middle\r\n\tthis.arrowPositionArray = this.arrowPosition.split( \"" \"" );\r\n\tthis.featherPath = options.featherPath || \""/node_modules/feather-icons\"";\r\n\tthis.boxShadowColor = options.boxShadowColor || baseUIColor;\r\n\tthis.closeIconSize = 13; // ui-icon css\r\n\tthis.closable = options.closable || false;\r\n\tthis.autoClose = options.autoClose || false;\r\n\tthis.autoCloseDelay = options.autoCloseDelay || 5000;\r\n\tthis.relativeOffset = { left: 0, top: 0 };\r\n\tthis.animate = (( options.animate === undefined) ? true : options.animate );\r\n\tthis.delay = (( options.delay === undefined) ? 500 : options.delay );\r\n\tthis.id = \""gadgetui-bubble-\"" + gadgetui.util.Id();\r\n\tthis.class = options.class;\r\n\t};\r\n"",""function CollapsiblePane( selector, options ){\n\n\tthis.selector = selector;\n\tthis.config( options );\n\n\tthis.addControl();\n\n\tthis.addCSS();\n\tthis.addHeader();\n\n\tthis.icon = this.wrapper.querySelector( \""div.oi\"" );\n\n\tthis.addBindings();\n\tthis.height = this.wrapper.offsetHeight;\n\tthis.headerHeight = this.header.offsetHeight;\n\tthis.selectorHeight = this.selector.offsetHeight;\n\t//if( this.collapse === true ){\n\t\tthis.toggle();\n\t//}\n}\n\nCollapsiblePane.prototype.addControl = function(){\n\tvar pane = document.createElement( \""div\"" );\n\n\n\tif( this.class ){\n\t\tgadgetui.util.addClass( pane, this.class );\n\t}\n\tgadgetui.util.addClass( pane, \""gadget-ui-collapsiblePane\"" );\n\n\tthis.selector.parentNode.insertBefore( pane, this.selector );\n\tthis.wrapper = this.selector.previousSibling;\n\tthis.selector.parentNode.removeChild( this.selector );\n\tpane.appendChild( this.selector );\n};\n\nCollapsiblePane.prototype.addHeader = function(){\n\tvar div,\n\tcss = gadgetui.util.setStyle,\n\t\theader = document.createElement( \""div\"" );\n\n\tgadgetui.util.addClass( header, \""gadget-ui-collapsiblePane-header\"" );\n\tif( this.headerClass ){\n\t\tgadgetui.util.addClass( header, this.headerClass );\n\t}\n\theader.innerHTML = this.title;\n\tthis.wrapper.insertBefore( header, this.selector );\n\tthis.header = ( this.headerClass ? this.wrapper.querySelector( \""div.\"" + this.headerClass ) : this.wrapper.querySelector( \""div.gadget-ui-collapsiblePane-header\"" ) ) ;\n\tdiv = document.createElement( \""div\"" );\n\t//gadgetui.util.addClass( div, \""oi\"" );\n\t//div.setAttribute( 'data-glyph', \""chevron-top\"" );\n\tthis.header.appendChild( div );\n};\n\nCollapsiblePane.prototype.addCSS = function(){\n\tvar theWidth = this.width,\n\t\tcss = gadgetui.util.setStyle;\n\tcss( this.wrapper, \""width\"", theWidth );\n\tcss( this.wrapper, \""overflow\"",  \""hidden\"" );\n};\n\nCollapsiblePane.prototype.addBindings = function(){\n\tvar _this = this,\n\theader = ( this.headerClass ? this.wrapper.querySelector( \""div.\"" + this.headerClass ) : this.wrapper.querySelector( \""div.gadget-ui-collapsiblePane-header\"" ) ) ;\n\n\theader\n\t\t.addEventListener( \""click\"", function(){\n\t\t\t_this.toggle();\n\t\t});\n};\n\nCollapsiblePane.prototype.toggle = function(){\n\tvar _this = this,\n\t\tcss = gadgetui.util.setStyle,\n\t\ticon,\n\t\tmyHeight,\n\t\tdisplay,\n\t\t//border,\n\t\tselectorHeight,\n\t\texpandClass = \""\"",\n\t\tcollapseClass = \""\"";\n\tif( this.collapsed === true ){\n\t\ticon = collapseClass;\n\t\tdisplay = \""block\"";\n\t\tmyHeight = this.height;\n\t\tselectorHeight = this.selectorHeight;\n\t\tthis.collapsed = false;\n\t}else{\n\t\ticon = expandClass;\n\t\tdisplay = \""none\"";\n\t\tmyHeight = this.headerHeight;\n\t\tselectorHeight = 0;\n\t\tthis.collapsed = true;\n\t}\n\n\tthis.eventName = ( this.collapsed ? \""collapse\"" : \""expand\"" );\n\n\tvar ev = new Event( this.eventName );\n\tthis.selector.dispatchEvent( ev );\n\n\tif( typeof Velocity != 'undefined' && this.animate ){\n\n\t\tVelocity( this.wrapper, {\n\t\t\theight: myHeight\n\t\t},{ queue: false, duration: 300, complete: function() {\n\t\t\t//_this.icon.setAttribute( \""data-glyph\"", icon );\n\t\t\t}\n\t\t});\n\t\tVelocity( this.selector, {\n\t\t\theight: selectorHeight\n\t\t},{ queue: false, duration: 300, complete: function() {\n\n\t\t\t}\n\t\t});\n\t}else{\n\t\tcss( this.selector, \""display\"", display );\n\t\t//this.icon.setAttribute( \""data-glyph\"", icon );\n\t}\n};\n\nCollapsiblePane.prototype.config = function( options ){\n\toptions = ( options === undefined ? {} : options );\n\tthis.animate = (( options.animate === undefined) ? true : options.animate );\n\tthis.title = ( options.title === undefined ? \""\"": options.title );\n\tthis.width = gadgetui.util.getStyle( this.selector, \""width\"" );\n\tthis.collapse = ( ( options.collapse === undefined ? false : options.collapse ) );\n\tthis.collapsed = ( ( options.collapse === undefined ? true :!  options.collapse ) );\n\tthis.class = ( ( options.class === undefined ? false : options.class ) );\n\tthis.headerClass = ( ( options.headerClass === undefined ? false : options.headerClass ) );\n};\n"",""\nfunction Dialog( selector, options ){\n\n  this.selector = selector;\n\tif( options !== undefined ){\n\t\tthis.config( options );\n    this.buttons = ( options.buttons !== undefined ? options.buttons : [] );\n\t}\n\n\tthis.setup( options );\n\n  this.addButtons();\n}\n\nDialog.prototype = FloatingPane.prototype;\n\nDialog.prototype.addButtons = function(){\n  var self = this;\n  var css = gadgetui.util.setStyle;\n  this.buttonDiv = document.createElement( \""div\"" );\n  css( this.buttonDiv, \""text-align\"", \""center\"" );\n  css( this.buttonDiv, \""padding\"", \"".5em\"" );\n  this.buttons.forEach( function( button ){\n    var btn = document.createElement( \""button\"" );\n    btn.innerText = button.label;\n    css( btn, \""margin\"", \"".5em\"" );\n    btn.addEventListener( \""click\"", button.click );\n    self.buttonDiv.appendChild( btn );\n  });\n  this.wrapper.appendChild( this.buttonDiv );\n}\n"",""\nfunction FileUploadWrapper(file, selector) {\n  var ix,\n    id,\n    options,\n    bindings = gadgetui.objects.EventBindings.getAll();\n\n  id = gadgetui.util.Id();\n  options = { id: id, filename: file.name, width: gadgetui.util.getStyle( selector, \""width\"" )};\n  this.file = file;\n  this.id = id;\n  this.progressbar = new gadgetui.display.ProgressBar(selector, options);\n  this.progressbar.render();\n  for (ix = 0; ix < bindings.length; ix++) {\n    this[bindings[ix].name] = bindings[ix].func;\n  }\n}\n\nFileUploadWrapper.prototype.events = [\""uploadComplete\""];\n\nFileUploadWrapper.prototype.completeUpload = function(fileItem) {\n  this.progressbar.destroy();\n  this.fireEvent(\""uploadComplete\"", fileItem);\n};\n"",""function FloatingPane( selector, options ){\n\tthis.selector = selector;\n\tif( options !== undefined ){\n\t\tthis.config( options );\n\t}\n\n\tthis.setup( options );\n}\n\nFloatingPane.prototype.setup = function( options ){\n\tthis.setMessage();\n\tthis.addControl();\n\tthis.addHeader();\n\tif( this.enableShrink ){\n\t\tthis.maxmin = this.wrapper.querySelector( \""div.oi[name='maxmin']\"" );\n\t}\n\t// need to be computed after header is done\n\tthis.minWidth = ( this.title.length > 0 ? gadgetui.util.textWidth( this.title, this.header.style ) + 80 : 100 );\n\tvar paddingPx = ( parseInt( gadgetui.util.getNumberValue( gadgetui.util.getStyle( this.selector, \""padding\"" ) ), 10 ) * 2 );\n\t// 6 px is padding + border of header\n\tvar headerHeight = gadgetui.util.getNumberValue( gadgetui.util.getStyle( this.header, \""height\"" ) ) + 6;\n\t//set height by setting width on selector to get content height at that width\n\tgadgetui.util.setStyle( this.selector, \""width\"", this.width - paddingPx );\n\tthis.height = ( options.height === undefined ? gadgetui.util.getNumberValue( gadgetui.util.getStyle( this.selector, \""height\"" ) ) + paddingPx + headerHeight + 10 : options.height );\n\n\tthis.addCSS();\n\n\t// now set height to computed height of control _this has been created\n\tthis.height = gadgetui.util.getStyle( this.wrapper, \""height\"" );\n\n\tthis.relativeOffsetLeft = gadgetui.util.getRelativeParentOffset( this.selector ).left;\n\tthis.addBindings();\n\tif( this.enableShrink ){\n\t\tthis.minimize();\n\t\tthis.expand();\n\t}\n};\n\nFloatingPane.prototype.setMessage = function(){\n\tif( this.message !== undefined ){\n\t\tthis.selector.innerText = this.message;\n\t}\n}\n\nFloatingPane.prototype.addBindings = function(){\n\tvar _this = this;\n\n\tvar dragger = gadgetui.util.draggable( this.wrapper );\n\n\tthis.wrapper.addEventListener( \""drag_end\"", function( event ){\n\t\t_this.top = event.detail.top;\n\t\t_this.left = event.detail.left;\n\t\t_this.relativeOffsetLeft = gadgetui.util.getRelativeParentOffset( _this.selector ).left;\n\t\tconsole.log( _this );\n\t});\n\n\tif( this.enableShrink ){\n\t\tthis.shrinker.addEventListener( \""click\"", function( event ){\n\t\t\tif( _this.minimized ){\n\t\t\t\t_this.expand();\n\t\t\t}else{\n\t\t\t\t_this.minimize();\n\t\t\t}\n\t\t});\n\t}\n\tif( this.enableClose ){\n\t\tthis.closer.addEventListener( \""click\"", function(){ _this.close.apply( _this ) } );\n\t}\n};\n\nFloatingPane.prototype.close = function(){\n\tthis.wrapper.parentNode.removeChild( this.wrapper );\n};\n\nFloatingPane.prototype.addHeader = function(){\n\tvar css = gadgetui.util.setStyle;\n\tthis.header = document.createElement( \""div\"" );\n\tthis.header.innerHTML = this.title;\n\tif( this.headerClass ){\n\t\tgadgetui.util.addClass( header, this.headerClass );\n\t}\n\tgadgetui.util.addClass( this.header, 'gadget-ui-floatingPane-header' );\n\n\n\tif( this.enableShrink ){\n\t\tthis.shrinker = document.createElement( \""span\"" );\n\t\tthis.shrinker.setAttribute( \""name\"", \""maxmin\"" );\n\t\tcss( this.shrinker, \""float\"", \""left\"" );\n\t\tcss( this.shrinker, \""margin-right\"", \"".5em\"" );\n\t\tvar shrinkIcon = `<svg class=\""feather\"">\n\t\t\t\t\t\t\t\t<use xlink:href=\""${this.featherPath}/dist/feather-sprite.svg#minimize\""/>\n\t\t\t\t\t\t\t\t</svg>`;\n\t\tthis.shrinker.innerHTML = shrinkIcon;\n\t\tthis.header.insertBefore( this.shrinker, undefined );\n\t\tthis.wrapper.insertBefore( this.header, this.selector );\n\t\tthis.header.appendChild( this.shrinker );\n\t}else{\n\t\tthis.wrapper.insertBefore( this.header, this.selector );\n\t}\n\n\tif( this.enableClose ){\n\t\tvar span = document.createElement( \""span\"" );\n\t\tspan.setAttribute( \""name\"", \""closeIcon\"" );\n\t\tcss( span, \""float\"", \""right\"" );\n\t\tvar icon = `<svg class=\""feather\"">\n\t\t\t\t\t\t\t\t<use xlink:href=\""${this.featherPath}/dist/feather-sprite.svg#x-circle\""/>\n\t\t\t\t\t\t\t\t</svg>`;\n\t\tspan.innerHTML = icon;\n\t\tthis.header.appendChild( span );\n\t\tcss( span, \""right\"", \""3px\"" );\n\t\tcss( span, \""position\"", \""absolute\"" );\n\t\tcss( span, \""cursor\"", \""pointer\""  );\n\t\tcss( span, \""top\"", \""3px\"" );\n\t\tthis.closer = span;\n\t}\n};\n\nFloatingPane.prototype.addCSS = function(){\n\tvar css = gadgetui.util.setStyle;\n\t//copy width from selector\n\tcss( this.wrapper, \""width\"",  this.width );\n\tcss( this.wrapper, \""z-index\"",  this.zIndex );\n\tif( this.top !== undefined ) css( this.wrapper, \""top\"", this.top );\n\tif( this.left !== undefined )css( this.wrapper, \""left\"", this.left );\n\tif( this.bottom !== undefined ) css( this.wrapper, \""bottom\"", this.bottom );\n\tif( this.right !== undefined )css( this.wrapper, \""right\"", this.right );\n};\n\nFloatingPane.prototype.addControl = function(){\n\tvar fp = document.createElement( \""div\"" );\n\tif( this.class ){\n\t\tgadgetui.util.addClass( fp, this.class );\n\t}\n\tgadgetui.util.addClass( fp, \""gadget-ui-floatingPane\"" );\n\n\tfp.draggable = true;\n\tthis.selector.parentNode.insertBefore( fp, this.selector );\n\tthis.wrapper = this.selector.previousSibling;\n\tthis.selector.parentNode.removeChild( this.selector );\n\tfp.appendChild( this.selector );\n\n};\n\nFloatingPane.prototype.expand = function(){\n\t// when minimizing and expanding, we must look up the ancestor chain to see if there are position: relative elements.\n\t// if so, we must subtract the offset left of the ancestor to get the pane back to its original position\n\n\tvar _this = this,\n\t\tcss = gadgetui.util.setStyle,\n\t\toffset = gadgetui.util.getOffset( this.wrapper ),\n\t\tparentPaddingLeft = parseInt( gadgetui.util.getNumberValue( gadgetui.util.getStyle( this.wrapper.parentElement, \""padding-left\"" ) ), 10 ),\n\t\tlx =  parseInt( new Number( offset.left ), 10 ) - this.relativeOffsetLeft - parentPaddingLeft;\n\n\t\t//width = parseInt( gadgetui.util.getNumberValue( this.width ), 10 );\n\tvar icon = `<svg class=\""feather\"">\n\t\t\t\t\t\t\t\t<use xlink:href=\""${this.featherPath}/dist/feather-sprite.svg#minimize\""/>\n\t\t\t\t\t\t\t\t</svg>`;\n\tif( typeof Velocity != 'undefined' && this.animate ){\n\n\t\tVelocity( this.wrapper, {\n\t\t\twidth: this.width\n\t\t},{queue: false, duration: 500}, function() {\n\t\t\t// Animation complete.\n\t\t});\n\n\t\tVelocity( this.selector, {\n\t\t\theight: this.height\n\t\t},{queue: false, duration: 500, complete: function() {\n\t\t\t_this.shrinker.innerHTML = icon;\n\t\t\tcss( _this.selector, \""overflow\"", \""scroll\"" );\n\t\t}\n\t\t});\n\t}else{\n\t\tcss( this.wrapper, \""width\"", this.width );\n\t\tcss( this.selector, \""height\"", this.height );\n\t\t_this.shrinker.innerHTML = icon;\n\t\tcss( this.selector, \""overflow\"", \""scroll\"" );\n\t}\n\n\tthis.minimized = false;\n};\n\nFloatingPane.prototype.minimize = function(){\n\t// when minimizing and maximizing, we must look up the ancestor chain to see if there are position: relative elements.\n\t// if so, we must subtract the offset left of the ancestor to get the pane back to its original position\n\n\tvar _this = this,\n\t\tcss = gadgetui.util.setStyle,\n\t\toffset = gadgetui.util.getOffset( this.wrapper ),\n\t\tparentPaddingLeft = parseInt( gadgetui.util.getNumberValue( gadgetui.util.getStyle( this.wrapper.parentElement, \""padding-left\"" ) ), 10 ),\n\t\tlx =  parseInt( new Number( offset.left ), 10 ) - this.relativeOffsetLeft - parentPaddingLeft,\n\t\twidth = parseInt( gadgetui.util.getNumberValue( this.width ), 10 );\n\n\tcss( this.selector, \""overflow\"", \""hidden\"" );\n\tvar icon = `<svg class=\""feather\"">\n\t\t\t\t\t\t\t<use xlink:href=\""${this.featherPath}/dist/feather-sprite.svg#maximize\""/>\n\t\t\t\t\t\t\t</svg>`;\n\tif( typeof Velocity != 'undefined' && this.animate ){\n\n\t\tVelocity( this.wrapper, {\n\t\t\twidth: _this.minWidth\n\t\t},{queue: false, duration: 500, complete: function() {\n\t\t\t//_this.icon.setAttribute( \""data-glyph\"", \""fullscreen-enter\"" );\n\t\t\t_this.shrinker.innerHTML = icon;\n\t\t\t}\n\t\t});\n\n\t\tVelocity( this.selector, {\n\t\t\theight: \""50px\""\n\t\t},{queue: false, duration: 500}, function() {\n\t\t\t// Animation complete.\n\t\t});\n\t}else{\n\t\tcss( this.wrapper, \""width\"", this.minWidth );\n\t\tcss( this.selector, \""height\"", \""50px\"" );\n\t\t_this.shrinker.innerHTML = icon;\n\t}\n\tthis.minimized = true;\n};\n\nFloatingPane.prototype.config = function( options ){\n\toptions = ( options === undefined ? {} : options );\n\tthis.message = ( options.message === undefined ? undefined: options.message );\n\tthis.animate = (( options.animate === undefined) ? true : options.animate );\n\tthis.title = ( options.title === undefined ? \""\"": options.title );\n\tthis.zIndex = ( options.zIndex === undefined ? gadgetui.util.getMaxZIndex() + 1: options.zIndex );\n\tthis.width = gadgetui.util.getStyle( this.selector, \""width\"" );\n \tthis.top = ( options.top === undefined ? undefined: options.top );\n\tthis.left = ( options.left === undefined ? undefined : options.left );\n\tthis.bottom = ( options.bottom === undefined ? undefined : options.bottom );\n\tthis.right = ( options.right === undefined ? undefined : options.right );\n\tthis.class = ( ( options.class === undefined ? false : options.class ) );\n\tthis.headerClass = ( ( options.headerClass === undefined ? false : options.headerClass ) );\n\tthis.featherPath = options.featherPath || \""/node_modules/feather-icons\"";\n\tthis.minimized = false;\n\tthis.relativeOffsetLeft = 0;\n\tthis.enableShrink = ( options.enableShrink !== undefined ? options.enableShrink : true );\n\tthis.enableClose = ( options.enableClose !== undefined ? options.enableClose : true );\n};\n"",""function Modal( selector, options ){\n  this.selector = selector;\n  this.config( options );\n\n  this.addControl();\n  this.addBindings();\n}\n\nModal.prototype.addControl = function(){\n  this.wrapper = document.createElement( \""div\"" );\n  if( this.class ){\n    gadgetui.util.addClass( this.wrapper, this.class );\n  }\n  gadgetui.util.addClass( this.wrapper, \""gadgetui-modal\"" );\n\n  this.selector.parentNode.insertBefore( this.wrapper, this.selector );\n  //this.wrapper = this.selector.previousSibling;\n  this.selector.parentNode.removeChild( this.selector );\n  this.wrapper.appendChild( this.selector );\n  gadgetui.util.addClass( this.selector, \""gadgetui-modalWindow\"" );\n  this.selector.innerHTML = `<span name=\""close\"" class=\""right-align\"">\n              <a name=\""close\"">\n              <svg class=\""feather\"">\n                <use xlink:href=\""${this.featherPath}/dist/feather-sprite.svg#x-circle\""/>\n              </svg>\n              </a>\n              </span>` + this.selector.innerHTML;\n  gadgetui.util.addClass( this.wrapper, \""gadgetui-showModal\"" );\n};\n\nModal.prototype.addBindings = function(){\n  let self = this;\n  let close = this.selector.querySelector( \"" a[name='close']\"" );\n  close.addEventListener( \""click\"", function( event ){\n    gadgetui.util.removeClass( self.wrapper, \""gadgetui-showModal\"" );\n  });\n}\n\nModal.prototype.config = function( options ){\n  this.class = ( ( options.class === undefined ? false : options.class ) );\n\tthis.featherPath = options.featherPath || \""/node_modules/feather-icons\"";\n};\n"",""function ProgressBar(selector, options) {\n  this.selector = selector;\n  this.configure(options);\n}\n\nProgressBar.prototype.configure = function(options) {\n  this.id = options.id;\n  this.filename = options.filename;\n  this.width = options.width;\n};\n\nProgressBar.prototype.render = function() {\n  var css = gadgetui.util.setStyle;\n/*   document.querySelector(this.selector).append(\n    '<div class=\""gadgetui-progressbar-progressbox\"" name=\""progressbox_' +\n      this.id +\n      '\"" style=\""display:none;\""><div name=\""filename\"" class=\""gadgetui-progressbar-filename\"">' +\n      this.filename +\n      '</div><div class=\""progressbar\"" name=\""progressbar_' +\n      this.id +\n      '\""></div ><div name=\""statustxt\"" class=\""statustxt\"">0%</div></div>'\n  ); */\n  var pbDiv = document.createElement( \""div\"" );\n  pbDiv.setAttribute( \""name\"", \""progressbox_\"" + this.id );\n  gadgetui.util.addClass( pbDiv, \""gadgetui-progressbar-progressbox\"" );\n  css( pbDiv, \""display\"", \""none\"" );\n\n  var fileDiv = document.createElement( \""div\"" );\n  fileDiv.setAttribute( \""name\"", \""filename\"" );\n  gadgetui.util.addClass( fileDiv, \""gadgetui-progressbar-filename\"" );\n  fileDiv.innerText = this.filename;\n  pbDiv.appendChild( fileDiv );\n\n  var pbarDiv = document.createElement( \""div\"" );\n  gadgetui.util.addClass( pbarDiv, \""progressbar\"" );\n  pbarDiv.setAttribute( \""name\"", \""progressbar_\"" + this.id );\n  pbDiv.appendChild( pbarDiv );\n\n  var statusDiv = document.createElement( \""div\"" );\n  statusDiv.setAttribute( \""name\"", \""statustxt\"" );\n  gadgetui.util.addClass( statusDiv, \""statustxt\"" );\n  statusDiv.innertText = \""0%\"";\n  pbDiv.appendChild( statusDiv );\n\n  this.selector.appendChild( pbDiv );\n\n  this.progressbox = document.querySelector(\n    \""div[name='progressbox_\"" + this.id + \""']\"",\n    this.selector\n  );\n  this.progressbar = document.querySelector(\n    \""div[name='progressbar_\"" + this.id + \""']\"",\n    this.selector\n  );\n  this.statustxt = document.querySelector( \""div[name='statustxt']\"", document.querySelector(\""div[name='progressbox_\"" + this.id + \""']\"", this.selector) );\n  css( this.progressbox, \""display\"", \""inline-block\"" );\n  css( this.progressbox, \""width\"", this.width );\n};\n\nProgressBar.prototype.start = function() {\n  var css = gadgetui.util.setStyle;\n  css( this.progressbar, \""width\"", \""0\"" );\n  this.statustxt.innerHTML = \""0%\"";\n};\n\nProgressBar.prototype.updatePercent = function(percent) {\n  var css = gadgetui.util.setStyle;\n  var percentage = percent + \""%\"";\n  this.percent = percent;\n  css( this.progressbar, \""width\"", percentage);\n  this.statustxt.innerHTML = percentage;\n  if (percent > 50) {\n    css(this.statustxt,\""color\"", \""#fff\"");\n  }\n};\n\nProgressBar.prototype.update = function(text) {\n  this.statustxt.innerHTML = text;\n};\n\nProgressBar.prototype.destroy = function() {\n  this.progressbox.parentNode.removeChild( this.progressbox );\n};\n"",""\nfunction Sidebar( selector, options ){\n  this.selector = selector;\n  this.minimized = false;\n  this.config( options );\n  this.addControl();\n  this.addBindings();\n}\n\nSidebar.prototype.config = function( options ){\n  this.class = ( ( options.class === undefined ? false : options.class ) );\n\tthis.featherPath = options.featherPath || \""/node_modules/feather-icons\"";\n};\n\nSidebar.prototype.addControl = function(){\n  this.wrapper = document.createElement( \""div\"" );\n  if( this.class ){\n    gadgetui.util.addClass( this.wrapper, this.class );\n  }\n  gadgetui.util.addClass( this.wrapper, \""gadgetui-sidebar\"" );\n\n  this.span = document.createElement( \""span\"" );\n  gadgetui.util.addClass( this.span, \""gadgetui-right-align\"" );\n  gadgetui.util.addClass( this.span, \""gadgetui-sidebar-toggle\"" );\n  this.span.innerHTML = `<svg class=\""feather\"" name=\""chevron\"">\n      <use xlink:href=\""${this.featherPath}/dist/feather-sprite.svg#chevron-left\""/>\n    </svg>`;\n\n  this.selector.parentNode.insertBefore( this.wrapper, this.selector );\n  this.selector.parentNode.removeChild( this.selector );\n  this.wrapper.appendChild( this.selector );\n  this.wrapper.insertBefore( this.span, this.selector );\n};\n\nSidebar.prototype.addBindings = function(){\n  let self = this;\n\n  this.span.addEventListener( \""click\"", function( event ){\n    self.minimized = !self.minimized;\n    if( self.minimized ){\n      gadgetui.util.addClass( self.wrapper, \""gadgetui-sidebar-minimized\"" );\n      gadgetui.util.addClass( self.selector, \""gadgetui-sidebarContent-minimized\"" );\n    }else{\n      gadgetui.util.removeClass( self.wrapper, \""gadgetui-sidebar-minimized\"" );\n      gadgetui.util.removeClass( self.selector, \""gadgetui-sidebarContent-minimized\"" );\n    }\n    self.setChevron( self.minimized );\n  });\n};\n\nSidebar.prototype.setChevron = function( minimized ){\n  let chevron = ( minimized ? \""chevron-right\"" : \""chevron-left\"" );\n  let svg = this.wrapper.querySelector( \""svg\"" );\n  svg.innerHTML = `<use xlink:href=\""${this.featherPath}/dist/feather-sprite.svg#${chevron}\""/>`;\n}\n"",""\n\treturn{\n\t\tBubble : Bubble,\n\t\tCollapsiblePane: CollapsiblePane,\n\t\tDialog: Dialog,\n\t\tFloatingPane: FloatingPane,\n\t\tFileUploadWrapper: FileUploadWrapper,\n\t\tModal: Modal,\n\t\tProgressBar: ProgressBar,\n\t\tSidebar: Sidebar\n\t};\n}());\n"",""gadgetui.input = (function() {\n\t\n\t"",""function ComboBox( selector, options ){\n\tthis.emitEvents = true;\n\tthis.model = gadgetui.model;\n\tthis.func;\n\n\tthis.selector = selector;\n\tthis.config( options );\n\tthis.setSaveFunc();\n\tthis.setDataProviderRefresh();\n\tthis.addControl();\n\tthis.addCSS();\n\t// bind to the model if binding is specified\n\tgadgetui.util.bind( this.selector, this.model );\n\t// bind to the model if binding is specified\n\tgadgetui.util.bind( this.label, this.model );\n\tthis.addBehaviors();\n\tthis.setStartingValues();\n}\n\nComboBox.prototype.addControl = function(){\n\tvar css = gadgetui.util.setStyle;\n\tthis.comboBox = gadgetui.util.createElement( \""div\"" );\n\tthis.input = gadgetui.util.createElement( \""input\"" );\n\tthis.label = gadgetui.util.createElement( \""div\"" );\n\tthis.inputWrapper = gadgetui.util.createElement( \""div\"" );\n\tthis.selectWrapper = gadgetui.util.createElement( \""div\"" );\n\n\tgadgetui.util.addClass( this.comboBox, \""gadgetui-combobox\"" );\n\tgadgetui.util.addClass( this.input, \""gadgetui-combobox-input\"" );\n\tgadgetui.util.addClass( this.label, \""gadgetui-combobox-label\"" );\n\tgadgetui.util.addClass( this.inputWrapper, \""gadgetui-combobox-inputwrapper\"" );\n\tgadgetui.util.addClass( this.selectWrapper,\""gadgetui-combobox-selectwrapper\"" );\n\n\tthis.selector.parentNode.insertBefore( this.comboBox, this.selector );\n\tthis.selector.parentNode.removeChild( this.selector );\n\tthis.comboBox.appendChild( this.label );\n\tthis.selectWrapper.appendChild( this.selector );\n\tthis.comboBox.appendChild( this.selectWrapper );\n\tthis.inputWrapper.appendChild( this.input );\n\tthis.comboBox.appendChild( this.inputWrapper );\n\tthis.label.setAttribute( \""data-id\"", this.id );\n\tthis.label.setAttribute( \""gadgetui-bind\"", this.selector.getAttribute( \""gadgetui-bind\"" ) );\n\tthis.label.innerHTML = this.text;\n\tthis.input.setAttribute( \""placeholder\"", this.newOption.text );\n\tthis.input.setAttribute( \""type\"", \""text\"" );\n\tthis.input.setAttribute( \""name\"", \""custom\"" );\n\n\tcss( this.comboBox, \""opacity\"", \"".0\"" );\n};\n\nComboBox.prototype.addCSS = function(){\n\tvar css = gadgetui.util.setStyle;\n\tgadgetui.util.addClass( this.selector, \""gadgetui-combobox-select\"" );\n\tcss( this.selector, \""width\"", this.width );\n\tcss( this.selector, \""border\"",  0 );\n\tcss( this.selector, \""display\"",  \""inline\"" );\n\tcss( this.comboBox, \""position\"",  \""relative\"" );\n\n\tvar styles = gadgetui.util.getStyle( this.selector ),\n\t\tinputWidth = this.selector.clientWidth,\n\t\tinputWidthAdjusted,\n\t\tinputLeftOffset = 0,\n\t\tselectMarginTop = 0,\n\t\tselectLeftPadding = 0,\n\t\tleftOffset = 0,\n\t\tinputWrapperTop = this.borderWidth,\n\t\tinputLeftMargin,\n\t\tleftPosition;\n\n\tleftPosition = gadgetui.util.getNumberValue( this.borderWidth ) + 4;\n\n\tif( this.borderRadius > 5 ){\n\t\tselectLeftPadding = this.borderRadius - 5;\n\t\tleftPosition = gadgetui.util.getNumberValue( leftPosition ) + gadgetui.util.getNumberValue( selectLeftPadding );\n\t}\n\tinputLeftMargin = leftPosition;\n\tinputWidthAdjusted = inputWidth - this.arrowWidth - gadgetui.util.getNumberValue( this.borderRadius ) - 4;\n\tconsole.log( navigator.userAgent );\n\tif( navigator.userAgent.match( /(Safari)/ ) && !navigator.userAgent.match( /(Chrome)/ )){\n\t\tinputWrapperTop = this.borderWidth - 2;\n\t\tselectLeftPadding = (selectLeftPadding < 4 ) ? 4 : this.borderRadius - 1;\n\t\tselectMarginTop = 1;\n\t}else if( navigator.userAgent.match( /Edge/ ) ){\n\t\tselectLeftPadding = (selectLeftPadding < 1 ) ? 1 : this.borderRadius - 4;\n\t\tinputLeftMargin--;\n\t}else if( navigator.userAgent.match( /MSIE/) ){\n\t\tselectLeftPadding = (selectLeftPadding < 1 ) ? 1 : this.borderRadius - 4;\n\t}else if( navigator.userAgent.match( /Trident/ ) ){\n\t\tselectLeftPadding = (selectLeftPadding < 2 ) ? 2 : this.borderRadius - 3;\n\t}else if( navigator.userAgent.match( /Chrome/ ) ){\n\t\tselectLeftPadding = (selectLeftPadding < 4 ) ? 4 : this.borderRadius - 1;\n\t\tselectMarginTop = 1;\n\t}\n\n\t// positioning\n\tcss( this.selector, \""margin-top\"", selectMarginTop );\n\tcss( this.selector, \""padding-left\"", selectLeftPadding );\n\n\tcss( this.inputWrapper, \""top\"", inputWrapperTop );\n\tcss( this.inputWrapper,\""left\"",leftOffset );\n\n\tcss( this.input, \""width\"", inputWidthAdjusted );\n\tcss( this.input, \""font-size\"", styles.fontSize );\n\n\t//appearance\n\tcss( this.comboBox, \""font-size\"", styles.fontSize );\n\n\tcss( this.label,\""left\"",leftPosition );\n\tcss( this.label, \""font-family\"", styles.fontFamily );\n\tcss( this.label, \""font-size\"", styles.fontSize );\n\tcss( this.label, \""font-weight\"", styles.fontWeight );\n\t// add rules for arrow Icon\n\t//we're doing this programmatically so we can skin our arrow icon\n\tif( navigator.userAgent.match( /Firefox/) ){\n\t\tif( this.scaleIconHeight === true ){\n\t\t\tcss( this.selectWrapper, \""background-size\"",  this.arrowWidth + \""px \"" + inputHeight + \""px\"" );\n\t\t}\n\t}\n\tcss( this.selector, \""-webkit-appearance\"",  \""none\"" );\n\tcss( this.selector, \""-moz-appearance\"",  \""window\"" );\n\n\tif( this.scaleIconHeight === true ){\n\t\tcss( this.selector, \""background-size\"",  this.arrowWidth + \""px \"" + inputHeight + \""px\"" );\n\t}\n\n\tcss( this.comboBox, \""opacity\"",  1 );\n\n\tif( this.hideable ){\n\t\tcss( this.inputWrapper, \""display\"", 'none' );\n\t\tcss( this.selectWrapper, \""display\"", 'none' );\n\t}else{\n\t\tcss( this.selectWrapper, \""display\"", 'inline' );\n\t\t\t\tcss( this.label, \""display\"", 'none' );\n\t\tif( this.selector.selectedIndex <= 0 ) {\n\t\t\tcss( this.inputWrapper, \""display\"", 'inline' );\n\t\t}\n\t}\n};\n\nComboBox.prototype.setSelectOptions = function(){\n\tvar _this = this, id, text, option;\n\n\n\twhile (_this.selector.options.length > 0) {\n\t\t_this.selector.remove(0);\n    }\n\t//console.log( \""append new option\"" );\n\toption = gadgetui.util.createElement( \""option\"" );\n\toption.value = _this.newOption.id;\n\toption.text = _this.newOption.text;\n\t_this.selector.add( option );\n\n\tthis.dataProvider.data.forEach( function( obj ){\n\t\tid = obj.id;\n\t\ttext = obj.text;\n\t\tif( text === undefined ){\n\t\t\ttext = id;\n\t\t}\n\t\toption = gadgetui.util.createElement( \""option\"" );\n\t\toption.value = id;\n\t\toption.text = text;\n\n\t\t_this.selector.add( option );\n\t});\n};\n\nComboBox.prototype.find = function( text ){\n\tvar ix;\n\tfor( ix = 0; ix < this.dataProvider.data.length; ix++ ){\n\t\tif( this.dataProvider.data[ix].text === text ){\n\t\t\treturn this.dataProvider.data[ix].id;\n\t\t}\n\t}\n\treturn;\n};\n\nComboBox.prototype.getText = function( id ){\n\tvar ix,\n\t\tcompId = parseInt( id, 10 );\n\tif( isNaN( compId ) === true ){\n\t\tcompId = id;\n\t}\n\tfor( ix = 0; ix < this.dataProvider.data.length; ix++ ){\n\t\tif( this.dataProvider.data[ix].id === compId ){\n\t\t\treturn this.dataProvider.data[ix].text;\n\t\t}\n\t}\n\treturn;\n};\nComboBox.prototype.showLabel = function(){\n\tvar css = gadgetui.util.setStyle;\n\tcss( this.label, \""display\"", \""inline-block\"" );\n\tcss( this.selectWrapper, \""display\"", 'none' );\n\tcss( this.inputWrapper, \""display\"", 'none' );\n};\n\nComboBox.prototype.addBehaviors = function( obj ) {\n\tvar _this = this;\n\tif( this.hideable ){\n\t\tthis.comboBox\n\t\t\t.addEventListener( this.activate, function( ) {\n\t\t\t\tsetTimeout( function( ) {\n\t\t\t\t\tif( _this.label.style.display != \""none\"" ){\n\t\t\t\t\t\tconsole.log( \""combo mouseenter \"");\n\t\t\t\t\t\t//_this.label.style.display = \""none\"" );\n\t\t\t\t\t\t_this.selectWrapper.style.display = \""inline\"";\n\t\t\t\t\t\t_this.label.style.display = \""none\"";\n\t\t\t\t\t\tif( _this.selector.selectedIndex <= 0 ) {\n\t\t\t\t\t\t\t_this.inputWrapper.style.display = \""inline\"";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, _this.delay );\n\t\t\t});\n\t\tthis.comboBox\n\t\t\t.addEventListener( \""mouseleave\"", function( ) {\n\t\t\t\tconsole.log( \""combo mouseleave \"");\n\t\t\t\tif ( _this.selector != document.activeElement && _this.input != document.activeElement ) {\n\t\t\t\t\t_this.showLabel();\n\t\t\t\t}\n\t\t\t});\n\t}\n\t_this.input\n\t\t.addEventListener( \""click\"", function( e ){\n\t\t\tconsole.log( \""input click \"");\n\t\t});\n\t_this.input\n\t\t.addEventListener( \""keyup\"", function( event ) {\n\t\t\tconsole.log( \""input keyup\"");\n\t\t\tif ( event.which === 13 ) {\n\t\t\t\tvar inputText =  gadgetui.util.encode( _this.input.value );\n\t\t\t\t_this.handleInput( inputText );\n\t\t\t}\n\t\t});\n\tif( this.hideable ){\n\t\t_this.input\n\t\t\t.addEventListener( \""blur\"", function( ) {\n\t\t\t\tconsole.log( \""input blur\"" );\n\n\t\t\t\tif( gadgetui.util.mouseWithin( _this.selector, gadgetui.mousePosition ) === true ){\n\t\t\t\t\t_this.inputWrapper.style.display = 'none';\n\t\t\t\t\t_this.selector.focus();\n\t\t\t\t}else{\n\t\t\t\t\t_this.showLabel();\n\t\t\t\t}\n\t\t\t});\n\t}\n\tif( this.hideable ){\n\t\tthis.selector\n\t\t\t.addEventListener( \""mouseenter\"", function( ev ){\n\t\t\t\t_this.selector.style.display = \""inline\"";\n\t\t\t});\n\t}\n\tthis.selector\n\t\t.addEventListener( \""click\"", function( ev ){\n\t\t\tconsole.log( \""select click\"");\n\t\t\tev.stopPropagation();\n\t\t});\n\tthis.selector\n\t\t.addEventListener( \""change\"", function( event ) {\n\t\t\tvar idx = ( event.target.selectedIndex >= 0 ) ? event.target.selectedIndex : 0;\n\t\t\tif( parseInt( event.target[ idx ].value, 10 ) !== parseInt( _this.id, 10 ) ){\n\t\t\t\tconsole.log( \""select change\"");\n\t\t\t\tif( event.target.selectedIndex > 0 ){\n\t\t\t\t\t_this.inputWrapper.style.display = 'none';\n\t\t\t\t\t_this.setValue( event.target[ event.target.selectedIndex ].value );\n\t\t\t\t}else{\n\t\t\t\t\t_this.inputWrapper.style.display = 'block';\n\t\t\t\t\t_this.setValue( _this.newOption.value );\n\t\t\t\t\t_this.input.focus();\n\t\t\t\t}\n\t\t\t\tgadgetui.util.trigger( _this.selector, \""gadgetui-combobox-change\"", { id: event.target[ event.target.selectedIndex ].value, text: event.target[ event.target.selectedIndex ].innerHTML } );\n\t\t\t}\n\t\t});\n\tif( this.hideable ){\n\t\tthis.selector\n\t\t\t.addEventListener( \""blur\"", function( event ) {\n\t\t\t\tconsole.log( \""select blur \"");\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tsetTimeout( function( ) {\n\t\t\t\t\t//if( _this.emitEvents === true ){\n\n\t\t\t\t\tif( _this.input !== document.activeElement ){\n\t\t\t\t\t\t_this.showLabel();\n\t\t\t\t\t}\n\t\t\t\t}, 200 );\n\t\t\t});\n\t}\n};\n\nComboBox.prototype.handleInput = function( inputText ){\n\tvar id = this.find( inputText ),\n\t\tcss = gadgetui.util.setStyle;\n\tif( id !== undefined ){\n\t\tthis.selector.value = id;\n\t\tthis.label.innerText = inputText;\n\t\tthis.selector.focus();\n\t\tthis.input.value = '';\n\t\tcss( this.inputWrapper, \""display\"", 'none' );\n\t}\n\telse if ( id === undefined && inputText.length > 0 ) {\n\t\tthis.save( inputText );\n\t}\n};\n\nComboBox.prototype.triggerSelectChange = function(){\n\tconsole.log(\""select change\"");\n\tvar ev = new Event( \""change\"", {\n\t    view: window,\n\t    bubbles: true,\n\t    cancelable: true\n\t  });\n\tthis.selector.dispatchEvent( ev );\n};\n\nComboBox.prototype.setSaveFunc = function(){\n\tvar _this = this;\n\n\tif( this.save !== undefined ){\n\t\tvar save = this.save;\n\t\tthis.save = function( text ) {\n\t\t\tvar _this = this,\n\t\t\t\tfunc,\n\t\t\t\tpromise,\n\t\t\t\targs = [ text ],\n\t\t\t\tvalue = this.find( text );\n\t\t\tif( value === undefined ){\n\t\t\t\tconsole.log( \""save: \"" + text );\n\n\t\t\t\tpromise = new Promise(\n\t\t\t\t\t\tfunction( resolve, reject ){\n\t\t\t\t\t\t\targs.push( resolve );\n\t\t\t\t\t\t\targs.push( reject );\n\t\t\t\t\t\t\tfunc = save.apply(_this, args);\n\t\t\t\t\t\t\tconsole.log( func );\n\t\t\t\t\t\t});\n\t\t\t\tpromise.then(\n\t\t\t\t\t\tfunction( value ){\n\t\t\t\t\t\t\tfunction callback(){\n\t\t\t\t\t\t\t\t// trigger save event if we're triggering events\n\t\t\t\t\t\t\t\t//if( _this.emitEvents === true ){\n\t\t\t\t\t\t\t\tgadgetui.util.trigger( _this.selector, \""gadgetui-combobox-save\"", { id: value, text: text } );\n\t\t\t\t\t\t\t\t\t//_this.selector.dispatchEvent( new Event( \""gadgetui-combobox-save\"" ), { id: value, text: text } );\n\t\t\t\t\t\t\t\t//}\n\t\t\t\t\t\t\t\t_this.input.value = '';\n\t\t\t\t\t\t\t\t_this.inputWrapper.style.display = 'none';\n\t\t\t\t\t\t\t\t_this.id = value;\n\t\t\t\t\t\t\t\t_this.dataProvider.refresh();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif( _this.animate === true && typeof Velocity !== \""undefined\"" ){\n\t\t\t\t\t\t\t\tVelocity( _this.selectWrapper, {\n\t\t\t\t\t\t\t\t\tboxShadow: '0 0 15px ' + _this.glowColor,\n\t\t\t\t\t\t\t\t\tborderColor: _this.glowColor\n\t\t\t\t\t\t\t\t  }, _this.animateDelay / 2, function(){\n\t\t\t\t\t\t\t\t\t _this.selectWrapper.style.borderColor = _this.glowColor;\n\t\t\t\t\t\t\t\t  } );\n\t\t\t\t\t\t\t\tVelocity( _this.selectWrapper, {\n\t\t\t\t\t\t\t\t\tboxShadow: 0,\n\t\t\t\t\t\t\t\t\tborderColor: _this.borderColor\n\t\t\t\t\t\t\t\t  }, _this.animateDelay / 2, callback );\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\tpromise['catch']( function( message ){\n\t\t\t\t\t_this.input.value= '';\n\t\t\t\t\t_this.inputWrapper.hide();\n\t\t\t\t\tconsole.log( message );\n\t\t\t\t\t_this.dataProvider.refresh();\n\n\t\t\t\t});\n\t\t\t}\n\t\t    return func;\n\t\t};\n\t}\n};\n\nComboBox.prototype.setStartingValues = function(){\n\t( this.dataProvider.data === undefined ) ? this.dataProvider.refresh() : this.setControls();\n};\n\nComboBox.prototype.setControls = function(){\n\tconsole.log( this );\n\tthis.setSelectOptions();\n\tthis.setValue( this.id );\n\tthis.triggerSelectChange();\n};\n\nComboBox.prototype.setValue = function( id ){\n\tvar text = this.getText( id );\n\tconsole.log( \""setting id:\"" + id );\n\t// value and text can only be set to current values in this.dataProvider.data, or to \""New\"" value\n\tthis.id = ( text === undefined ? this.newOption.id : id );\n\ttext = ( text === undefined ? this.newOption.text : text );\n\n\tthis.text = text;\n\tthis.label.innerText = this.text;\n\tthis.selector.value = this.id;\n};\n\nComboBox.prototype.setDataProviderRefresh = function(){\n\tvar _this = this,\n\t\tpromise,\n\t\trefresh = this.dataProvider.refresh,\n\t\tfunc;\n\tthis.dataProvider.refresh = function(){\n\t\tvar scope = this;\n\t\tif( refresh !== undefined ){\n\t\t\tpromise = new Promise(\n\t\t\t\t\tfunction( resolve, reject ){\n\t\t\t\t\t\tvar args = [ scope, resolve, reject ];\n\t\t\t\t\t\tfunc = refresh.apply( this, args );\n\t\t\t\t\t});\n\t\t\tpromise\n\t\t\t\t.then( function(){\n\t\t\t\t\tgadgetui.util.trigger( _this.selector, \""gadgetui-combobox-refresh\"" );\n\t\t\t\t\t//_this.selector.dispatchEvent( new Event( \""gadgetui-combobox-refresh\"" ) );\n\t\t\t\t\t_this.setControls();\n\t\t\t\t});\n\t\t\tpromise['catch']( function( message ){\n\t\t\t\t\tconsole.log( \""message\"" );\n\t\t\t\t\t_this.setControls();\n\t\t\t\t});\n\t\t}\n\t\treturn func;\n\t};\n};\n\nComboBox.prototype.config = function( options ){\n\toptions = ( options === undefined ? {} : options );\n\tthis.model =  (( options.model === undefined) ? this.model : options.model );\n\tthis.emitEvents = (( options.emitEvents === undefined) ? true : options.emitEvents );\n\tthis.dataProvider = (( options.dataProvider === undefined) ? undefined : options.dataProvider );\n\tthis.save = (( options.save === undefined) ? undefined : options.save );\n\tthis.activate = (( options.activate === undefined) ? \""mouseenter\"" : options.activate );\n\tthis.delay = (( options.delay === undefined) ? 10 : options.delay );\n\tthis.borderWidth = gadgetui.util.getStyle( this.selector, \""border-width\"" ) || 1;\n\tthis.borderRadius = gadgetui.util.getStyle( this.selector, \""border-radius\"" ) || 5;\n\tthis.borderColor = gadgetui.util.getStyle( this.selector, \""border-color\"" ) || \""silver\"";\n\tthis.arrowWidth = options.arrowWidth || 25;\n\tthis.width = (( options.width === undefined) ? 150 : options.width );\n\tthis.newOption = (( options.newOption === undefined) ? { text: \""...\"", id: 0 } : options.newOption );\n\tthis.id = (( options.id === undefined) ? this.newOption.id : options.id );\n\tthis.scaleIconHeight = (( options.scaleIconHeight === undefined) ? false : options.scaleIconHeight );\n\tthis.animate = (( options.animate === undefined) ? true : options.animate );\n\tthis.glowColor = (( options.glowColor === undefined ) ? 'rgb(82, 168, 236)' : options.glowColor );\n\tthis.animateDelay = (( options.animateDelay === undefined ) ? 500 : options.animateDelay );\n\tthis.border = this.borderWidth + \""px \"" + this.borderStyle + \"" \"" + this.borderColor;\n\tthis.saveBorder = this.borderWidth + \""px \"" + this.borderStyle + \"" \"" + this.glowColor;\n\tthis.hideable = options.hideable || false;\n};\n"",""function FileUploader(selector, options) {\n  this.selector = selector;\n  //this.dlg = \""\"";\n  this.droppedFiles = [];\n  this.configure(options);\n  this.render(options.title);\n  this.setEventHandlers();\n  this.setDimensions();\n}\n\nFileUploader.prototype.render = function(title) {\n  var self = this,\n    data,\n    options,\n    title = title,\n    files;\n\n  var renderUploader = function() {\n    var css = gadgetui.util.setStyle;\n    var options = {\n      title: title,\n      addFile: self.addFileMessage,\n      dropMessage: self.dropMessage,\n      fileSelectLbl: \""\""\n    };\n    //var tabDiv = document.querySelector(\""div[name='\"" + tab.name + \""']\"", self.selector);\n    self.selector.innerHTML =\n      '<div style=\""padding:10px;\"" class=\""gadgetui-fileuploader-wrapper\""><div name=\""dropzone\"" class=\""gadgetui-fileuploader-dropzone\"" id=\""dropzone\""><div class=\""gadgetui-fileuploader-dropmessage\"" name=\""dropMessageDiv\"">' +\n      options.dropMessage +\n      '</span></div></div><div name=\""filedisplay\"" class=\""gadgetui-fileuploader-filedisplay\"" style=\""display:none;\""></div><div class=\""buttons full\""><div class=\""fileUpload\"" name=\""fileUpload\""><input type=\""file\"" name=\""fileselect\"" class=\""upload\"" title=\""' +\n      options.fileSelectLbl +\n      '\""></div></div>';\n\n      if( self.showUploadButton === false ){\n        css( document.querySelector( \""div[name='fileUpload']\"", self.selector ), \""display\"", \""none\"" );\n      }\n\n      var left = gadgetui.util.getNumberValue( gadgetui.util.getStyle( self.selector, \""width\"" ) ) - ( gadgetui.util.textWidth( document.querySelector( \""div[name='dropMessageDiv']\"", self.selector ).innerText, self.selector.style ) );\n      var top = gadgetui.util.getNumberValue( gadgetui.util.getStyle( self.selector, \""height\"" ) ) / 2;\n      css( document.querySelector( \""div[name='dropMessageDiv']\"", self.selector ), \""left\"", left );\n      css( document.querySelector( \""div[name='dropMessageDiv']\"", self.selector ), \""top\"", top );\n\n    self.renderDropZone();\n  };\n\n  renderUploader();\n};\n\nFileUploader.prototype.configure = function(options) {\n  // may be undefined\n  this.message = options.message;\n  this.tags = options.tags;\n  this.uploadURI = options.uploadURI;\n  this.onUploadComplete = options.onUploadComplete;\n  this.willGenerateThumbnails = (options.willGenerateThumbnails !== undefined && options.willGenerateThumbnails !== null ? options.willGenerateThumbnails : false);\n  this.showUploadButton = ( options.showUploadButton !== undefined ? options.showUploadButton : true );\n  this.addFileMessage = ( options.addFileMessage !== undefined ? options.addFileMessage : \""Add a File\"" );\n  this.dropMessage = ( options.dropMessage !== undefined ? options.dropMessage : \""Drop Files Here\"" );\n\n};\n\nFileUploader.prototype.setDimensions = function() {\n  var css = gadgetui.util.setStyle;\n  var uHeight = gadgetui.util.getNumberValue(gadgetui.util.getStyle(this.selector, \""height\"")),\n    uWidth = gadgetui.util.getNumberValue(gadgetui.util.getStyle(this.selector, \""width\"")),\n    dropzone = document.querySelector(\""div[class='gadgetui-fileuploader-dropzone']\"", this.selector),\n    filedisplay = document.querySelector(\n      \""div[class='gadgetui-fileuploader-filedisplay']\"",\n      this.selector\n    ),\n    buttons = document.querySelector(\""div[class~='buttons']\"", this.selector);\n\n  css(dropzone, \""height\"", uHeight - gadgetui.util.getNumberValue(gadgetui.util.getStyle(buttons, \""height\"")) - 100);\n  css(dropzone, \""width\"", uWidth);\n\n  css(filedisplay, \""height\"", uHeight - gadgetui.util.getNumberValue(gadgetui.util.getStyle(buttons, \""height\"")) - 100);\n  css(filedisplay, \""width\"", uWidth);\n};\n\nFileUploader.prototype.setEventHandlers = function() {\n  var self = this;\n  document.querySelector(\""input[name='fileselect']\"", self.selector).addEventListener(\""change\"", function(evt) {\n    var dropzone = document.querySelector(\""div[name='dropzone']\"", self.selector),\n      filedisplay = document.querySelector(\""div[name='filedisplay']\"", self.selector);\n\n    self.processUpload(\n      evt,\n      evt.target.files,\n      dropzone,\n      filedisplay\n    );\n  });\n};\n\nFileUploader.prototype.renderDropZone = function() {\n  // if we decide to drop files into a drag/drop zone\n\n  var dropzone = document.querySelector(\""div[name='dropzone']\"", this.selector),\n    filedisplay = document.querySelector(\""div[name='filedisplay']\"", this.selector),\n    self = this;\n\n    document.addEventListener( \""dragstart\"", function( ev ){\n      ev.dataTransfer.setData(\""text\"",  \""data\"");\n      ev.dataTransfer.effectAllowed = \""copy\"";\n    });\n\n  dropzone.addEventListener(\""dragenter\"", function(ev) {\n    gadgetui.util.addClass( dropzone, \""highlighted\"");\n\n    ev.preventDefault();\n    ev.stopPropagation();\n  });\n\n  dropzone.addEventListener(\""dragleave\"", function(ev) {\n    ev.stopPropagation();\n    ev.preventDefault();\n    gadgetui.util.removeClass( dropzone,\""highlighted\"");\n  });\n\n  dropzone.addEventListener(\""dragover\"", function(ev) {\n    self.handleDragOver(ev);\n    ev.dataTransfer.dropEffect = \""copy\"";\n  });\n\n  dropzone.addEventListener(\""drop\"", function(ev) {\n    ev.stopPropagation();\n    ev.preventDefault();\n\n    self.processUpload(\n      ev,\n      ev.dataTransfer.files,\n      dropzone,\n      filedisplay\n    );\n  });\n};\n\nFileUploader.prototype.processUpload = function(event, files, dropzone, filedisplay) {\n  var self = this,\n    wrappedFile;\n  var css = gadgetui.util.setStyle;\n  self.uploadingFiles = [];\n\n  for (var idx = 0; idx < files.length; idx++) {\n    wrappedFile = gadgetui.objects.Constructor(\n      gadgetui.display.FileUploadWrapper, [files[idx], filedisplay,\n        true\n      ]);\n\n    self.uploadingFiles.push(wrappedFile);\n    wrappedFile.on(\""uploadComplete\"", function(fileWrapper) {\n      var ix;\n      for (ix = 0; ix < self.uploadingFiles.length; ix++) {\n        if (self.uploadingFiles[ix].id === fileWrapper.id) {\n          self.uploadingFiles.splice(ix, 1);\n        }\n      }\n      if (self.uploadingFiles.length === 0) {\n        self.show(\""dropzone\"");\n        self.setDimensions();\n      }\n    });\n  }\n\n  gadgetui.util.removeClass(dropzone, \""highlighted\"");\n\n  css(dropzone, \""display\"", \""none\"");\n  css(filedisplay, \""display\"", \""table-cell\"");\n\n  self.handleFileSelect(self.uploadingFiles, event);\n};\n\nFileUploader.prototype.handleFileSelect = function(wrappedFiles, evt) {\n  evt.stopPropagation();\n  evt.preventDefault();\n  var self = this;\n\n  if (self.willGenerateThumbnails) {\n    self.generateThumbnails(wrappedFiles);\n  } else {\n    self.upload(wrappedFiles);\n  }\n};\n\nFileUploader.prototype.generateThumbnails = function(wrappedFiles) {\n  // not going to convert this functionality right now\n  this.upload(wrappedFiles);\n};\n\n/*\nFileUploader.prototype.generateThumbnails = function( wrappedFiles ){\n  var self = this;\n  var pdfThumbnail = function(wrappedFile, idx) {\n      var pdfURL = URL.createObjectURL(wrappedFile.file);\n      wrappedFile.progressbar.update(\"" - generating thumbnail\"");\n      PDFJS.getDocument(pdfURL).then(function(pdf) {\n        pdf.getPage(1).then(function(page) {\n          var renderContext,\n            viewport = page.getViewport(0.5),\n            canvas = document.createElement(\""canvas\""),\n            ctx = canvas.getContext(\""2d\"");\n          canvas.height = viewport.height;\n          canvas.width = viewport.width;\n\n          renderContext = {\n            canvasContext: ctx,\n            viewport: viewport\n          };\n\n          page.render(renderContext).then(function() {\n            //set to draw behind current content\n            ctx.globalCompositeOperation = \""destination-over\"";\n\n            //set background color\n            ctx.fillStyle = \""#ffffff\"";\n\n            //draw background / rect on entire canvas\n            ctx.fillRect(0, 0, canvas.width, canvas.height);\n            var img = canvas.toDataURL();\n            wrappedFile = $.extend(wrappedFile, { tile: img });\n            if (idx === wrappedFiles.length - 1) {\n              self.upload( wrappedFiles );\n            }\n          });\n        });\n      });\n    },\n    imageThumbnail = function(wrappedFile, idx) {\n      try {\n        wrappedFile.progressbar.update(\"" - generating thumbnail\"");\n        $.canvasResize(wrappedFile.file, {\n          width: 200,\n          height: 0,\n          crop: false,\n          quality: 80,\n          callback: function(data, width, height) {\n            //file.progressbar.update( \"" - generated thumbnail\"" );\n            wrappedFile = $.extend(wrappedFile, { tile: data });\n            if (idx === wrappedFiles.length - 1) {\n              self.upload( wrappedFiles );\n            }\n          }\n        });\n      } catch (ev) {\n        //could not parse image\n      }\n    };\n\n  $.each(wrappedFiles, function(ix, wrappedFile) {\n    switch (wrappedFile.file.type) {\n      case \""application/pdf\"":\n        pdfThumbnail(wrappedFile, ix);\n        break;\n      case \""image/jpg\"":\n      case \""image/jpeg\"":\n      case \""image/png\"":\n      case \""image/gif\"":\n        imageThumbnail(wrappedFile, ix);\n        break;\n      default:\n        //console.log( \""Could not generate tile on client.\"" );\n        wrappedFile.progressbar.update(\n          \""Could not generate thumbnail on client\""\n        );\n        wrappedFile = $.extend(wrappedFile, { tile: \""\"" });\n        if (ix === wrappedFiles.length - 1) {\n          self.upload( wrappedFiles );\n        }\n        break;\n    }\n  });\n};\n */\n\nFileUploader.prototype.upload = function(wrappedFiles) {\n  wrappedFiles.forEach(function(wrappedFile) {\n    wrappedFile.progressbar.start();\n  });\n\n  this.uploadFile(wrappedFiles);\n};\n\nFileUploader.prototype.uploadFile = function(wrappedFiles) {\n  var self = this;\n  var process = function() {\n    var blob,\n      chunks = [],\n      BYTES_PER_CHUNK,\n      SIZE,\n      parts,\n      start,\n      end,\n      chunk,\n      j;\n\n    for (j = 0; j < wrappedFiles.length; j++) {\n      blob = wrappedFiles[j].file;\n      chunks = [];\n      BYTES_PER_CHUNK = 1024 * 1024;\n      // 1MB chunk sizes.\n      SIZE = blob.size;\n      parts = Math.ceil(SIZE / BYTES_PER_CHUNK);\n      start = 0;\n      end = BYTES_PER_CHUNK;\n\n      while (start < SIZE) {\n        if (blob.hasOwnProperty(\""mozSlice\"")) {\n          chunk = blob.mozSlice(start, end);\n        } else if (blob.hasOwnProperty(\""webkitSlice\"")) {\n          chunk = blob.webkitSlice(start, end);\n        } else {\n          chunk = blob.slice(start, end);\n        }\n\n        chunks.push(chunk);\n\n        start = end;\n        end = start + BYTES_PER_CHUNK;\n      }\n\n      // start the upload process\n      self.uploadChunk(wrappedFiles[j], chunks, 1, parts);\n    }\n  };\n  // process files\n  process();\n};\n\nFileUploader.prototype.uploadChunk = function(wrappedFile, chunks, filepart, parts) {\n  var xhr = new XMLHttpRequest(),\n    self = this,\n    response,\n    tags = self.tags === undefined ? \""\"" : self.tags;\n\n  if (wrappedFile.file.type.substr(0, 5) === \""image\"") {\n    tags = \""image \"" + tags;\n  }\n\n  xhr.onreadystatechange = function() {\n    var json;\n\n    if (xhr.readyState === 4) {\n      response = xhr.response;\n\n      if (filepart <= parts) {\n        wrappedFile.progressbar.updatePercent(\n          parseInt(filepart / parts * 100, 10)\n        );\n      }\n      if (filepart < parts) {\n        wrappedFile.id = xhr.getResponseHeader(\""X-Id\"");\n        filepart++;\n        self.uploadChunk(\n          wrappedFile,\n          chunks,\n          filepart,\n          parts\n        );\n      } else {\n        try {\n          json = {\n            data: JSON.parse(response)\n          };\n        } catch (e) {\n          json = {};\n        }\n\n        self.handleUploadResponse(json, wrappedFile);\n      }\n    }\n  };\n\n  xhr.open(\""POST\"", self.uploadURI, true);\n  if (filepart === 1) {\n    xhr.setRequestHeader(\""X-Tags\"", tags);\n  }\n  xhr.setRequestHeader(\""X-Id\"", wrappedFile.id);\n  xhr.setRequestHeader(\""X-FileName\"", wrappedFile.file.name);\n  xhr.setRequestHeader(\""X-FileSize\"", wrappedFile.file.size);\n  xhr.setRequestHeader(\""X-FilePart\"", filepart);\n  xhr.setRequestHeader(\""X-Parts\"", parts);\n  xhr.setRequestHeader(\n    \""X-MimeType\"",\n    wrappedFile.file.type || \""application/octet-stream\""\n  );\n  xhr.setRequestHeader(\n    \""X-HasTile\"",\n    wrappedFile.tile !== undefined && wrappedFile.tile.length > 0 ?\n    true :\n    false\n  );\n  xhr.setRequestHeader(\""Content-Type\"", \""application/octet-stream\"");\n\n  xhr.send(chunks[filepart - 1]);\n};\n\nFileUploader.prototype.handleUploadResponse = function(json, wrappedFile) {\n  var self = this;\n  var fileItem = gadgetui.objects.Constructor(\n    gadgetui.objects.FileItem, [{\n      mimetype: json.data.mimetype,\n      fileid: json.data.fileId,\n      filename: json.data.filename,\n      filesize: json.data.filesize,\n      tags: json.data.tags,\n      created: json.data.created,\n      createdStr: json.data.created,\n      disabled: json.data.disabled,\n      path: json.data.path\n    }],\n    false\n  );\n\n  // fire completeUpload event so upload dialog can clean itself up\n  wrappedFile.completeUpload(fileItem);\n\n  if (self.onUploadComplete !== undefined) {\n    self.onUploadComplete(fileItem);\n  }\n};\n\nFileUploader.prototype.show = function(name) {\n  var css = gadgetui.util.setStyle;\n  var dropzone = document.querySelector(\""div[class='gadgetui-fileuploader-dropzone']\"", this.selector),\n    filedisplay = document.querySelector(\n      \""div[class='gadgetui-fileuploader-filedisplay']\"",\n      this.selector\n    );\n  if (name === \""dropzone\"") {\n    css(dropzone, \""display\"", \""table-cell\"");\n    css(filedisplay, \""display\"", \""none\"");\n  } else {\n    css(filedisplay, \""display\"", \""table-cell\"");\n    css(dropzone, \""display\"", \""none\"");\n  }\n};\n\nFileUploader.prototype.handleDragOver = function(evt) {\n  evt.stopPropagation();\n  evt.preventDefault();\n  evt.dataTransfer.dropEffect = \""copy\"";\n  // Explicitly show this is a copy.\n};\n"",""//author - Robert Munn <robertdmunn@gmail.com>\n\n//adapted from jQuery UI autocomplete.\n\nfunction LookupListInput( selector, options ){\n\tthis.selector = selector;\n\tthis.items = [];\n\tthis.config( options );\n\tthis.setIsMultiLine();\n\tthis.addControl();\n\tthis.initSource();\n\tthis.addMenu();\n\tthis.addBindings();\n}\n\nLookupListInput.prototype.addControl = function(){\n\tthis.wrapper = document.createElement( \""div\"" );\n\tif( this.width !== undefined ){\n\t\tgadgetui.util.setStyle( this.wrapper, \""width\"", this.width );\n\t}\n\tgadgetui.util.addClass( this.wrapper, \""gadgetui-lookuplist-input\"" );\n\tthis.selector.parentNode.insertBefore( this.wrapper, this.selector );\n\tthis.selector.parentNode.removeChild( this.selector );\n\tthis.wrapper.appendChild( this.selector );\n};\n\nLookupListInput.prototype.addMenu = function(){\n\tvar div = document.createElement( \""div\"" );\n\tgadgetui.util.addClass( div, \""gadgetui-lookuplist-menu\"" );\n\tgadgetui.util.setStyle( div, \""display\"", \""none\"" );\n\n\tthis.menu = {\n\t\t\telement: div\n\t\t};\n\n\tthis.wrapper.appendChild( this.menu.element );\n};\n\nLookupListInput.prototype.initSource = function(){\n\tvar array, url,\n\t\t_this = this;\n\tif ( this.datasource.constructor === Array ) {\n\t\tarray = this.datasource;\n\t\tthis.source = function( request, response ) {\n\t\t\tvar content = _this.filter( array, request.term );\n\t\t\tresponse( content );\n\t\t};\n\t} else if ( typeof this.datasource === \""string\"" ) {\n\t\turl = this.datasource;\n\t\tthis.source = function( request, response ) {\n\t\t\tif ( _this.xhr ) {\n\t\t\t\t_this.xhr.abort();\n\t\t\t}\n\t\t\t_this.xhr = fetch({\n\t\t\t\turl: url,\n\t\t\t\tdata: request,\n\t\t\t\tdataType: \""json\"",\n\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\tresponse( data );\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\tresponse([]);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t} else {\n\t\tthis.source = this.datasource;\n\t}\n};\n\nLookupListInput.prototype.escapeRegex = function( value ) {\n\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \""\\\\$&\"" );\n};\n\nLookupListInput.prototype._filter = function( array, term ) {\n\tvar matcher = new RegExp( this.escapeRegex( term ), \""i\"" );\n\treturn gadgetui.util.grep( array, function( value ) {\n\t\treturn matcher.test( value.label || value.value || value );\n\t});\n};\n\nLookupListInput.prototype.checkForDuplicate = function( item ) {\n\tvar ix, found = false;\n\tfor( ix = 0; ix < this.items.length; ix++ ){\n\t\tif( this.items[ix].value === item.value ){\n\t\t\tfound = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn found;\n};\n\nLookupListInput.prototype.makeUnique = function( content ) {\n\tvar ix, results = [];\n\tfor( ix = 0; ix < content.length; ix++ ){\n\t\tif( !this.checkForDuplicate( content[ ix ] ) ){\n\t\t\tresults.push( content[ ix ] );\n\t\t}\n\t}\n\treturn results;\n};\n\nLookupListInput.prototype.setIsMultiLine = function(){\n\tvar nodeName = this.selector.nodeName.toLowerCase(),\n\tisTextarea = nodeName === \""textarea\"",\n\tisInput = nodeName === \""input\"";\n\n\tthis.isMultiLine = isTextarea ? true : isInput ? false : this.selector.getAttribute( \""isContentEditable\"" );\n};\n\nLookupListInput.prototype.addBindings = function(){\n\tvar _this = this, suppressKeyPress, suppressKeyPressRepeat, suppressInput, nodeName = this.selector.nodeName.toLowerCase();\n\tthis.isTextarea = nodeName === \""textarea\"";\n\tthis.isInput = nodeName === \""input\"";\n\tthis.wrapper\n\t\t.addEventListener( \""click\"", function(){\n\t\t\t_this.selector.focus();\n\t\t});\n\n\tthis.valueMethod = this.selector[ this.isTextarea || this.isInput ? \""value\"" : \""innerText\"" ];\n\tthis.isNewMenu = true;\n\n\tthis.selector.setAttribute( \""autocomplete\"", \""off\"" );\n\n\tthis.selector\n\t\t.addEventListener( \""keydown\"", function( event ) {\n\t\t\tif ( this.getAttribute( \""readOnly\"" ) ) {\n\t\t\t\tsuppressKeyPress = true;\n\t\t\t\tsuppressInput = true;\n\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsuppressKeyPress = false;\n\t\t\tsuppressInput = false;\n\t\t\tsuppressKeyPressRepeat = false;\n\t\t\tvar keyCode = gadgetui.keyCode;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\tsuppressKeyPress = true;\n\t\t\t\tthis._move( \""previousPage\"", event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\tsuppressKeyPress = true;\n\t\t\t\tthis._move( \""nextPage\"", event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.UP:\n\t\t\t\tsuppressKeyPress = true;\n\t\t\t\tthis._keyEvent( \""previous\"", event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.DOWN:\n\t\t\t\tsuppressKeyPress = true;\n\t\t\t\tthis._keyEvent( \""next\"", event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.ENTER:\n\t\t\t\t// when menu is open and has focus\n\t\t\t\tif ( _this.menu.active ) {\n\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t_this.menu.select( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase keyCode.BACKSPACE:\n\t\t\t\tif( !this.value.length && _this.items.length ){\n\t\t\t\t\tvar selector = this.previousSibling;\n\t\t\t\t\t_this.remove( selector );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase keyCode.TAB:\n\t\t\t\tif ( _this.menu.active ) {\n\t\t\t\t\t_this.menu.select( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase keyCode.ESCAPE:\n\t\t\t\tif ( _this.menu.element.style.display !== 'none' ) {\n\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t}\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t_this._searchTimeout( event );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\tthis.selector\n\t\t.addEventListener( \""keypress\"", function( event ) {\n\t\t\tif ( suppressKeyPress ) {\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tif ( !this.isMultiLine || _this.menu.element.style.display !== 'none' ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\tvar keyCode = gadgetui.keyCode;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\tthis._move( \""previousPage\"", event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\tthis._move( \""nextPage\"", event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.UP:\n\t\t\t\tthis._keyEvent( \""previous\"", event );\n\t\t\t\tbreak;\n\t\t\tcase keyCode.DOWN:\n\t\t\t\tthis._keyEvent( \""next\"", event );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\tthis.selector\n\t\t.addEventListener( \""input\"", function( event ) {\n\t\t\tif ( suppressInput ) {\n\t\t\t\tsuppressInput = false;\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_this._searchTimeout( event );\n\t\t});\n\n\tthis.selector\n\t\t.addEventListener( \""focus\"", function( event ) {\n\t\t\tthis.selectedItem = null;\n\t\t\tthis.previous = this.value;\n\t\t});\n\n\tthis.selector\n\t\t.addEventListener( \""blur\"", function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout( this.searching );\n\t\t\t_this.close( event );\n\t\t\t_this._change( event );\n\t\t});\n\n\t// menu bindings\n\tthis.menu.element.addEventListener(\""mousedown\"", function( event ) {\n\t\t// prevent moving focus out of the text field\n\t\tevent.preventDefault();\n\n\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t// so we set a flag to know when we should ignore the blur event\n\t\tthis.cancelBlur = true;\n\t\tgadgetui.util.delay(function() {\n\t\t\tdelete this.cancelBlur;\n\t\t});\n\n\t\t// clicking on the scrollbar causes focus to shift to the body\n\t\t// but we can't detect a mouseup or a click immediately afterward\n\t\t// so we have to track the next mousedown and close the menu if\n\t\t// the user clicks somewhere outside of the autocomplete\n\t\tvar menuElement = _this.menu.element;\n\t});\n\n\tthis.menu.element.addEventListener( \""menuselect\"", function( event ) {\n\t\tvar item = event.detail,\n\t\t\tprevious = _this.previous;\n\n\t\t// only trigger when focus was lost (click on menu)\n\t\tif ( _this.menu.element !== document.activeElement ) {\n\t\t\t_this.menu.element.focus();\n\t\t\t_this.previous = previous;\n\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t// term synchronously and asynchronously :-(\n\t\t\tgadgetui.util.delay(function() {\n\t\t\t\t_this.previous = previous;\n\t\t\t\t_this.selectedItem = item;\n\t\t\t});\n\t\t}\n\n\t\t//if ( false !== this._trigger( \""select\"", event, { item: item } ) ) {\n\t\t\t_this._value( item.value );\n\t\t//}\n\t\t// reset the term after the select event\n\t\t// this allows custom select handling to work properly\n\t\t_this.term = _this._value();\n\n\t\t_this.close( event );\n\t\t_this.selectedItem = item;\n\t\tif( !_this.checkForDuplicate( item ) ){\n\t\t\t_this.add( item );\n\t\t}else{\n\n\t\t}\n\t});\n};\n\nLookupListInput.prototype._renderItem = function( item ){\n\tvar itemNode, itemWrapper = document.createElement( \""div\"" );\n\tgadgetui.util.addClass( itemWrapper, \""gadgetui-lookuplist-input-item-wrapper\"" );\n\titemNode = document.createElement( \""div\"" );\n\tgadgetui.util.addClass( itemNode, \""gadgetui-lookuplist-input-item\"" );\n\titemNode.innerHTML = this.labelRenderer( item );\n\titemWrapper.appendChild( itemNode );\n\treturn itemWrapper;\n};\n\nLookupListInput.prototype._renderItemCancel = function( item, wrapper ){\n\tvar\tcss = gadgetui.util.setStyle,\n\t\titemCancel = document.createElement( \""span\"" ),\n\t\tspanLeft = gadgetui.util.getNumberValue( gadgetui.util.getStyle( wrapper, \""width\"" ) )\n\t\t+ 6;  // font-size of icon\n\t\t//- 3; // top offset of icon\n\n\tgadgetui.util.addClass( itemCancel, \""oi\"" );\n\titemCancel.setAttribute( 'data-glyph', \""circle-x\"" );\n\tcss( itemCancel, \""font-size\"", 12 );\n\tcss( itemCancel, \""opacity\"", \"".5\"" );\n\tcss( itemCancel, \""left\"", spanLeft );\n\tcss( itemCancel, \""position\"", \""absolute\"" );\n\tcss( itemCancel, \""cursor\"", \""pointer\""  );\n\tcss( itemCancel, \""top\"", 3 );\n\treturn itemCancel;\n};\n\nLookupListInput.prototype.add = function( item ){\n\tvar _this = this,\n\t\tprop, list, itemWrapper,\n\t\titemCancel;\n\n\titemWrapper = this.itemRenderer( item );\n\titemWrapper.setAttribute( \""data-value\"", item.value );\n\tthis.wrapper.insertBefore( itemWrapper, this.selector );\n\titemCancel = this.itemCancelRenderer( item, itemWrapper );\n\tif( itemCancel !== undefined ){\n\t\titemWrapper.appendChild( itemCancel );\n\t\titemCancel.addEventListener( \""click\"", function( event ){\n\t\t\t_this.remove( this.parentNode );\n\t\t});\n\t}\n\n\tthis.selector.value = '';\n\tthis.items.push( item );\n\n\tif( this.emitEvents === true ){\n\t\tgadgetui.util.trigger( this.selector, \""gadgetui-lookuplist-input-add\"", item );\n\t}\n\n\tif( this.func !== undefined ){\n\t\tthis.func( item, 'add' );\n\t}\n\tif( this.model !== undefined ){\n\t\t//update the model\n\t\tprop = this.selector.getAttribute( \""gadgetui-bind\"" );\n\t\tif( prop !== null && prop !== undefined ){\n\t\t\tlist = this.model.get( prop );\n\t\t\tif( typeof list === Array ){\n\t\t\t\tlist = [];\n\t\t\t}\n\t\t\tlist.push( item );\n\t\t\tthis.model.set( prop, list );\n\t\t}\n\t}\n};\n\nLookupListInput.prototype.remove = function( selector ){\n\tvar _this = this, removed, ix, prop, list, value = selector.getAttribute( \""data-value\"" );\n\n\tselector.parentNode.removeChild( selector );\n\t// remove from internal array\n\tfor( ix = 0; ix < this.items.length; ix++ ){\n\t\tif( this.items[ ix ].value === value ){\n\t\t\tremoved = this.items.splice( ix, 1 );\n\t\t}\n\t}\n\tif( this.model !== undefined ){\n\t\tprop = this.selector.getAttribute( \""gadgetui-bind\"" );\n\t\tif( prop !== null && prop !== undefined ){\n\t\t\tlist = this.model.get( prop );\n\t\t\tlist.forEach( function( obj, ix ){\n\t\t\t\tif( obj.value === value ){\n\t\t\t\t\tlist.splice( ix, 1 );\n\t\t\t\t\tif( _this.func !== undefined ){\n\t\t\t\t\t\t_this.func( obj, 'remove' );\n\t\t\t\t\t}\n\t\t\t\t\tif( _this.emitEvents === true ){\n\t\t\t\t\t\tgadgetui.util.trigger( _this.selector, \""gadgetui-lookuplist-input-remove\"", obj );\n\t\t\t\t\t}\n\t\t\t\t\t_this.model.set( prop, list );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n\nLookupListInput.prototype.reset = function(){\n\n\twhile ( this.wrapper.firstChild && this.wrapper.firstChild !== this.selector ) {\n\t\t\tthis.wrapper.removeChild( this.wrapper.firstChild );\n\t}\n\tthis.items = [];\n\tif( this.model !== undefined ){\n\t\tvar prop = this.selector.getAttribute( \""gadgetui-bind\"" );\n\t\tthis.model.set( prop, [] );\n\t}\n};\n\nLookupListInput.prototype.destroy = function() {\n\tclearTimeout( this.searching );\n\tthis.menu.element.remove();\n\tthis.liveRegion.remove();\n};\n\nLookupListInput.prototype._setOption = function( key, value ) {\n\tthis._super( key, value );\n\tif ( key === \""source\"" ) {\n\t\tthis._initSource();\n\t}\n\tif ( key === \""appendTo\"" ) {\n\t\tthis.menu.element.appendTo( this._appendTo() );\n\t}\n\tif ( key === \""disabled\"" && value && this.xhr ) {\n\t\tthis.xhr.abort();\n\t}\n};\n\nLookupListInput.prototype._appendTo = function() {\n\tvar element = this.options.appendTo;\n\n\tif ( element ) {\n\t\telement = element.jquery || element.nodeType ?\n\t\t\t$( element ) :\n\t\t\tthis.document.find( element ).eq( 0 );\n\t}\n\n\tif ( !element || !element[ 0 ] ) {\n\t\telement = this.element.closest( \"".ui-front\"" );\n\t}\n\n\tif ( !element.length ) {\n\t\telement = this.document[ 0 ].body;\n\t}\n\n\treturn element;\n};\n\nLookupListInput.prototype._searchTimeout = function( event ) {\n\tvar _this = this;\n\tclearTimeout( this.searching );\n\tthis.searching = gadgetui.util.delay(function() {\n\n\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\tvar equalValues = this.term === _this.selector.value,\n\t\t\tmenuVisible = _this.menu.element.style.display !== 'none',\n\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t_this.selectedItem = null;\n\t\t\t_this.search( null, event );\n\t\t}\n\t}, this.delay );\n};\n\nLookupListInput.prototype.search = function( value, event ) {\n\tvar _this = this;\n\tvalue = value != null ? value : _this.selector.value;\n\n\t// always save the actual value, not the one passed as an argument\n\tthis.term = this._value();\n\n\tif ( value.length < this.minLength ) {\n\t\treturn this.close( event );\n\t}\n\n\treturn this._search( value );\n};\n\nLookupListInput.prototype._search = function( value ) {\n\tthis.pending++;\n\tthis.cancelSearch = false;\n\n\tthis.source( { term: value }, this._response() );\n};\n\nLookupListInput.prototype._response = function() {\n\tvar _this = this,\n\t\tindex = ++this.requestIndex,\n\t\tfn = function( content ) {\n\t\t\t\t_this.__response( content );\n\n\t\t\t_this.pending--;\n\t\t\t/*\tif ( !_this.pending ) {\n\t\t\t\tthis.element.removeClass( \""ui-autocomplete-loading\"" );\n\t\t\t}\t*/\n\t\t},\n\t\tproxy = function(){\n\t\t\treturn fn.apply( _this, arguments );\n\t\t};\n\treturn proxy;\n};\n\nLookupListInput.prototype.__response = function( content ) {\n\tcontent = this.makeUnique( content );\n\n\tif ( content && content.length ) {\n\t\tcontent = this._normalize( content );\n\t}\n\tthis.selector.dispatchEvent( new CustomEvent( \""response\"", { content: content } ) );\n\tif ( !this.disabled && content && content.length && !this.cancelSearch ) {\n\t\tthis._suggest( content );\n\t\tthis.selector.dispatchEvent( new Event( \""open\"" ) );\n\t} else {\n\t\tthis._close();\n\t}\n};\n\nLookupListInput.prototype.close = function( event ) {\n\tthis.cancelSearch = true;\n\tthis._close( event );\n};\n\nLookupListInput.prototype._close = function( event ) {\n\tif ( this.menu.element.style.display !== 'none' ) {\n\t\tthis.menu.element.style.display = 'none';\n\t\tthis.menu.element.blur();\n\t\tthis.isNewMenu = true;\n\t}\n};\n\nLookupListInput.prototype._change = function( event ) {\n\t/*\tif ( this.previous !== this._value() ) {\n\t//\tthis._trigger( \""change\"", event, { item: this.selectedItem } );\n\t\t//this.selector.dispatchEvent( event );\n\t}\t*/\n};\n\nLookupListInput.prototype._normalize = function( items ) {\n\t// assume all items have the right format when the first item is complete\n\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\treturn items;\n\t}\n\treturn items.map( function( item ) {\n\t\tif ( typeof item === \""string\"" ) {\n\t\t\treturn {\n\t\t\t\tlabel: item,\n\t\t\t\tvalue: item\n\t\t\t};\n\t\t}\n\t\titem.label = item.label || item.value;\n\t\titem.value = item.value || item.label;\n\n\t\treturn item;\n\t});\n};\n\nLookupListInput.prototype._suggest = function( items ) {\n\tvar div = this.menu.element;\n\twhile (div.firstChild) {\n\t\tdiv.removeChild( div.firstChild );\n\t}\n\tthis._renderMenu( items );\n\tthis.isNewMenu = true;\n\n\t// size and position menu\n\tdiv.style.display = 'block';\n\tthis._resizeMenu();\n\tthis.position.of = this.element;\n\n\t/*\tif ( this.autoFocus ) {\n\t//\tthis.menu.next();\n\t}\t*/\n};\n\nLookupListInput.prototype._resizeMenu = function() {\n\tvar div = this.menu.element;\n\t// don't change it right now\n};\n\nLookupListInput.prototype._renderMenu = function( items ) {\n\tvar _this = this, ix;\n\tvar maxItems = Math.min( this.maxSuggestions, items.length );\n\tfor( ix = 0; ix < maxItems; ix++ ){\n\t\t_this._renderItemData( items[ ix ] );\n\t}\n};\n\nLookupListInput.prototype._renderItemData = function( item ) {\n\tvar _this = this,\n\t\tmenuItem = this.menuItemRenderer( item );\n\n\tmenuItem.addEventListener( \""click\"", function( event ){\n\t\tvar ev = new CustomEvent( \""menuselect\"", { detail: item } );\n\t\t_this.menu.element.dispatchEvent( ev );\n\t});\n\tthis.menu.element.appendChild( menuItem );\n\n};\n\nLookupListInput.prototype._renderMenuItem = function( item ) {\n\tvar menuItem = document.createElement( \""div\"" );\n\tgadgetui.util.addClass( menuItem, \""gadgetui-lookuplist-item\"" );\n\tmenuItem.setAttribute( \""value\"", item.value );\n\tmenuItem.innerText = this.labelRenderer( item );\n\treturn menuItem;\n};\n\nLookupListInput.prototype._renderLabel = function( item ) {\n\treturn item.label;\n};\n\nLookupListInput.prototype._move = function( direction, event ) {\n\tif ( !this.menu.element.style.display !== 'none' ) {\n\t\tthis.search( null, event );\n\t\treturn;\n\t}\n\tif ( this.menu.element.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\tthis.menu.element.isLastItem() && /^next/.test( direction ) ) {\n\n\t\tif ( !this.isMultiLine ) {\n\t\t\tthis._value( this.term );\n\t\t}\n\n\t\tthis.menu.blur();\n\t\treturn;\n\t}\n\tthis.menu[ direction ]( event );\n};\n\nLookupListInput.prototype.widget = function() {\n\treturn this.menu.element;\n};\n\nLookupListInput.prototype._value = function() {\n\treturn ( this.isInput ? this.selector.value : this.selector.innerText );\n};\n\nLookupListInput.prototype._keyEvent = function( keyEvent, event ) {\n\tif ( !this.isMultiLine || this.menu.element.style.display !== 'none' ) {\n\t\tthis._move( keyEvent, event );\n\n\t\t// prevents moving cursor to beginning/end of the text field in some browsers\n\t\tevent.preventDefault();\n\t}\n};\n\nLookupListInput.prototype.config = function( options ){\n\toptions = ( options === undefined ? {} : options );\n\t// if binding but no model was specified, use gadgetui model\n\tif( this.selector.getAttribute( \""gadgetui-bind\"" ) !== undefined ){\n\t\tthis.model = (( options.model === undefined) ? gadgetui.model : options.model );\n\t}\n\tthis.width = (( options.width === undefined) ? undefined : options.width );\n\tthis.func = (( options.func === undefined) ? undefined : options.func );\n\tthis.filter = (( options.filter === undefined) ? this._filter : options.filter );\n\tthis.labelRenderer = (( options.labelRenderer === undefined) ? this._renderLabel : options.labelRenderer );\n\tthis.itemRenderer = (( options.itemRenderer === undefined) ? this._renderItem : options.itemRenderer );\n\tthis.menuItemRenderer = (( options.menuItemRenderer === undefined) ? this._renderMenuItem : options.menuItemRenderer );\n\tthis.itemCancelRenderer = (( options.itemCancelRenderer === undefined) ? this._renderItemCancel : options.itemCancelRenderer );\n\tthis.emitEvents = (( options.emitEvents === undefined) ? true : options.emitEvents );\n\tthis.datasource = (( options.datasource === undefined) ? (( options.lookupList !== undefined ) ? options.lookupList : true ) : options.datasource );\n\tthis.minLength = (( options.minLength === undefined) ? 0 : options.minLength );\n\tthis.disabled = (( options.disabled === undefined) ? false : options.disabled );\n\tthis.maxSuggestions = (( options.maxSuggestions === undefined) ? 20 : options.maxSuggestions );\n\tthis.position = ( options.position === undefined ) ? { my: \""left top\"", at: \""left bottom\"", collision: \""none\"" } : options.position;\n\tthis.autoFocus = (( options.autoFocus === undefined) ? false : options.autoFocus );\n\tthis.requestIndex = 0;\n};\n"",""\r\nfunction SelectInput( selector, options ){\r\n\tthis.selector = selector;\r\n\r\n\tthis.config( options );\r\n\tthis.setSelectOptions();\r\n\tthis.setInitialValue( options );\r\n\r\n\tthis.addControl();\r\n\tthis.addCSS();\r\n\tvar css = gadgetui.util.setStyle;\r\n\tif( this.hideable ){\r\n\t\tcss( this.selector, \""display\"", \""none\"" );\r\n\t}else{\r\n\t\tcss( this.label, \""display\"", 'none' );\r\n\t\tcss( this.selector, \""display\"", \""inline-block\"" );\r\n\t}\r\n\r\n\t// bind to the model if binding is specified\r\n\tgadgetui.util.bind( this.selector, this.model );\r\n\t// bind to the model if binding is specified\r\n\tgadgetui.util.bind( this.label, this.model );\r\n\tthis.addBindings();\r\n}\r\n\r\nSelectInput.prototype.setInitialValue = function( options ){\r\n\tthis.value = ( options.value || { id: this.selector.options[this.selector.selectedIndex||0].value, text: this.selector.options[this.selector.selectedIndex||0].innerHTML } );\r\n\tthis.selector.value = this.value.id;\r\n};\r\n\r\nSelectInput.prototype.addControl = function(){\r\n\tvar _this = this;\r\n\tthis.wrapper = document.createElement( \""div\"" );\r\n\tthis.label = document.createElement( \""div\"" );\r\n\tgadgetui.util.addClass( this.wrapper, \""gadgetui-selectinput-div\"" );\r\n\tgadgetui.util.addClass( this.label, \""gadgetui-selectinput-label\"" );\r\n\tthis.label.setAttribute( \""gadgetui-bind\"", this.selector.getAttribute( \""gadgetui-bind\"" ) );\r\n\tthis.label.innerHTML = this.value.text;\r\n\tthis.selector.parentNode.insertBefore( this.wrapper, this.selector );\r\n\tthis.wrapper = this.selector.previousSibling;\r\n\tthis.selector.parentNode.removeChild( this.selector );\r\n\tthis.wrapper.appendChild( this.selector );\r\n\tthis.selector.parentNode.insertBefore( this.label, this.selector );\r\n};\r\n\r\nSelectInput.prototype.setSelectOptions = function(){\r\n\tvar _this = this, id, text, option;\r\n\tif( this.selector.getAttribute( \""gadgetui-bind-options\"" ) !== null || this.dataProvider !== undefined ){\r\n\t\twhile (_this.selector.options.length > 0) {\r\n\t\t\t_this.selector.remove(0);\r\n\t  }\r\n\r\n\t\tif( this.selector.getAttribute( \""gadgetui-bind-options\"" ) !== null ){\r\n\t\t\t// use the gadgetui-ui-bind attribute to populate the select box from the model\r\n\t\t\tvar optionsArray = this.model.get( this.selector.getAttribute( \""gadgetui-bind-options\"" ) );\r\n\t\t\toptionsArray.forEach( function( item ){\r\n\t\t\t\tvar opt = document.createElement(\""option\"");\r\n\t\t\t\tif( typeof item === \""object\"" ){\r\n\t\t\t\t\t// object containing id, text keys\r\n\t\t\t\t\topt.value = item.id;\r\n\t\t\t\t\topt.text = item.text;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// simple values in array\r\n\t\t\t\t\topt.text = item;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_this.selector.add( opt );\r\n\t\t\t});\r\n\t\t}else if( this.dataProvider !== undefined ){\r\n\t\t\t// use the dataProvider option to populate the select if provided\r\n\t\t\tthis.dataProvider.data.forEach( function( obj ){\r\n\t\t\t\tid = obj.id;\r\n\t\t\t\ttext = obj.text;\r\n\t\t\t\tif( text === undefined ){\r\n\t\t\t\t\ttext = id;\r\n\t\t\t\t}\r\n\t\t\t\toption = gadgetui.util.createElement( \""option\"" );\r\n\t\t\t\toption.value = id;\r\n\t\t\t\toption.text = text;\r\n\r\n\t\t\t\t_this.selector.add( option );\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSelectInput.prototype.addCSS = function(){\r\n\tvar height,\r\n\t\tparentstyle,\r\n\t\tcss = gadgetui.util.setStyle,\r\n\t\tstyle = gadgetui.util.getStyle( this.selector );\r\n\r\n\tcss( this.selector, \""min-width\"", \""100px\"" );\r\n\tcss( this.selector, \""font-size\"", style.fontSize );\r\n\r\n\tparentstyle = gadgetui.util.getStyle( this.selector.parentNode );\r\n\theight = gadgetui.util.getNumberValue( parentstyle.height ) - 2;\r\n\tthis.label.setAttribute( \""style\"", \""\"" );\r\n\tcss( this.label, \""padding-top\"", \""2px\"" );\r\n\tcss( this.label, \""height\"", height + \""px\"" );\r\n\tcss( this.label, \""margin-left\"", \""9px\"" );\r\n\r\n\tif( navigator.userAgent.match( /Edge/ ) ){\r\n\t\tcss( this.selector, \""margin-left\"", \""5px\"" );\r\n\t}else if( navigator.userAgent.match( /MSIE/ ) ){\r\n\t\tcss( this.selector, \""margin-top\"", \""0px\"" );\r\n\t\tcss( this.selector, \""margin-left\"", \""5px\"" );\r\n\t}\r\n};\r\n\r\nSelectInput.prototype.addBindings = function() {\r\n\tvar _this = this,\r\n\t\tcss = gadgetui.util.setStyle;\r\n\r\n\tif( this.hideable ){\r\n\t\tthis.label\r\n\t\t\t.addEventListener( this.activate, function( event ) {\r\n\t\t\t\tcss( _this.label, \""display\"", 'none' );\r\n\t\t\t\tcss( _this.selector, \""display\"", \""inline-block\"" );\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t});\r\n\r\n\t\tthis.selector\r\n\t\t\t.addEventListener( \""blur\"", function( ev ) {\r\n\t\t\t\t//setTimeout( function() {\r\n\t\t\t\t\tcss( _this.label, \""display\"", \""inline-block\"" );\r\n\t\t\t\t\tcss( _this.selector, \""display\"", 'none' );\r\n\t\t\t\t//}, 100 );\r\n\t\t\t});\r\n\t}\r\n\r\n\tthis.selector\r\n\t\t.addEventListener( \""change\"", function( ev ) {\r\n\t\t\tsetTimeout( function() {\r\n\t\t\t\tvar value = ev.target.value,\r\n\t\t\t\t\tlabel = ev.target[ ev.target.selectedIndex ].innerHTML;\r\n\r\n\t\t\t\tif( value.trim().length === 0 ){\r\n\t\t\t\t\tvalue = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_this.label.innerText = label;\r\n\t\t\t\tif( _this.model !== undefined && _this.selector.getAttribute( \""gadgetui-bind\"" ) === undefined ){\r\n\t\t\t\t\t// if we have specified a model but no data binding, change the model value\r\n\t\t\t\t\t_this.model.set( this.name, { id: value, text: label } );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif( _this.emitEvents === true ){\r\n\t\t\t\t\tgadgetui.util.trigger( _this.selector, \""gadgetui-input-change\"", { id: value, text: label } );\r\n\t\t\t\t}\r\n\t\t\t\tif( _this.func !== undefined ){\r\n\t\t\t\t\t_this.func( { id: value, text: label } );\r\n\t\t\t\t}\r\n\t\t\t\t_this.value = { id: value, text: label };\r\n\t\t\t}, 100 );\r\n\t\t});\r\n\r\n\tif( this.hideable ){\r\n\t\tthis.selector\r\n\t\t\t.addEventListener( \""mouseleave\"", function( ) {\r\n\t\t\t\tif ( _this.selector !== document.activeElement ) {\r\n\t\t\t\t\tcss( _this.label, \""display\"", 'inline-block' );\r\n\t\t\t\t\tcss( _this.selector, \""display\"", 'none' );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n};\r\n\r\nSelectInput.prototype.config = function( options ){\r\n\toptions = ( options === undefined ? {} : options );\r\n\tthis.model =  (( options.model === undefined) ? undefined : options.model );\r\n\tthis.dataProvider =  (( options.dataProvider === undefined) ? undefined : options.dataProvider );\r\n\tthis.func = (( options.func === undefined) ? undefined : options.func );\r\n\tthis.emitEvents = (( options.emitEvents === undefined) ? true : options.emitEvents );\r\n\tthis.activate = (( options.activate === undefined) ? \""mouseenter\"" : options.activate );\r\n\tthis.hideable = options.hideable || false;\r\n};\r\n"",""function TextInput( selector, options ){\n\tthis.emitEvents = true;\n\tthis.model = gadgetui.model;\n\tthis.func;\n\n\tthis.selector = selector;\n\n\tthis.config( options );\n\n\tthis.setInitialValue();\n\tthis.addControl();\n\tthis.setLineHeight();\n\tthis.setFont();\n\t//this.setMaxWidth();\n\tthis.setWidth();\n\tthis.addCSS();\n\t// bind to the model if binding is specified\n\tgadgetui.util.bind( this.selector, this.model );\n\t// bind to the model if binding is specified\n\tgadgetui.util.bind( this.label, this.model );\n\tthis.addBindings();\n}\n\nTextInput.prototype.addControl = function(){\n\tthis.wrapper = document.createElement( \""div\"" );\n\tthis.labelDiv = document.createElement( \""div\"" );\n\tthis.inputDiv = document.createElement( \""div\"" );\n\tthis.label = document.createElement( \""input\"" );\n\n\tthis.label.setAttribute( \""type\"", \""text\"" );\n\tthis.label.setAttribute( \""data-active\"", \""false\"" );\n\tthis.label.setAttribute( \""readonly\"", \""true\"" );\n\tthis.label.setAttribute( \""value\"", this.value );\n\tthis.label.setAttribute( \""gadgetui-bind\"", this.selector.getAttribute( \""gadgetui-bind\"" ) );\n\tthis.labelDiv.appendChild( this.label );\n\n\tthis.selector.parentNode.insertBefore( this.wrapper, this.selector );\n\tthis.selector.parentNode.removeChild( this.selector );\n\n\tthis.inputDiv.appendChild( this.selector );\n\tthis.wrapper.appendChild( this.inputDiv );\n\tthis.selector.parentNode.parentNode.insertBefore( this.labelDiv, this.inputDiv );\n\n\tthis.wrapper = this.selector.parentNode.parentNode;\n\tthis.labelDiv = this.wrapper.childNodes[0];\n\tthis.label = this.labelDiv.childNodes[0];\n\tthis.inputDiv = this.wrapper.childNodes[1];\n};\n\nTextInput.prototype.setInitialValue = function(){\n\tvar val = this.selector.value,\n\t\tph = this.selector.getAttribute( \""placeholder\"" );\n\n\tif( val.length === 0 ){\n\t\tif( ph !== null && ph!== undefined && ph.length > 0 ){\n\t\t\tval = ph;\n\t\t}else{\n\t\t\tval = \"" ... \"";\n\t\t}\n\t}\n\tthis.value = val;\n};\n\nTextInput.prototype.setLineHeight = function(){\n\tvar lineHeight = this.selector.offsetHeight;\n\tthis.lineHeight = lineHeight;\n};\n\nTextInput.prototype.setFont = function(){\n\tvar style = gadgetui.util.getStyle( this.selector ),\n\t\tfont = style.fontFamily + \"" \"" + style.fontSize + \"" \"" + style.fontWeight + \"" \"" + style.fontVariant;\n\t\tthis.font = font;\n};\n\nTextInput.prototype.setWidth = function(){\n\tthis.width = gadgetui.util.textWidth( this.selector.value, this.font ) + 10;\n\tif( this.width === 10 ){\n\t\tthis.width = this.maxWidth;\n\t}\n};\n\n/* TextInput.prototype.setMaxWidth = function(){\n\tvar parentStyle = gadgetui.util.getStyle( this.selector.parentNode.parentNode );\n\tthis.maxWidth = gadgetui.util.getNumberValue( gadgetui.util.getStyle( this.selector.parentNode.parentNode ).width );\n}; */\n\nTextInput.prototype.addCSS = function(){\n\tvar style = gadgetui.util.getStyle( this.selector ),\n\t\tcss = gadgetui.util.setStyle;\n\t// add CSS classes\n\tgadgetui.util.addClass( this.selector, \""gadgetui-textinput\"" );\n\tgadgetui.util.addClass( this.wrapper, \""gadgetui-textinput-div\"" );\n\tgadgetui.util.addClass( this.labelDiv, \""gadgetui-inputlabel\"" );\n\tgadgetui.util.addClass( this.label, \""gadgetui-inputlabelinput\"" );\n\tgadgetui.util.addClass( this.inputDiv, \""gadgetui-inputdiv\"" );\n\n\tcss( this.label, \""width\"", this.width + \""px\"" );\n\tcss( this.label, \""font-family\"", style.fontFamily );\n\tcss( this.label, \""font-size\"", style.fontSize );\n\tcss( this.label, \""font-weight\"", style.fontWeight );\n\tcss( this.label, \""font-variant\"", style.fontVariant );\n\n\tcss( this.label, \""max-width\"", \""\"" );\n\tcss( this.label, \""min-width\"", this.minWidth + \""px\"" );\n\n\tif( this.lineHeight > 20 ){\n\t\t// add min height to label div as well so label/input isn't offset vertically\n\t\tcss( this.wrapper, \""min-height\"", this.lineHeight + \""px\"" );\n\t\tcss( this.labelDiv, \""min-height\"", this.lineHeight + \""px\"" );\n\t\tcss( this.inputDiv, \""min-height\"", this.lineHeight + \""px\"" );\n\t}\n\n\tcss( this.labelDiv, \""height\"", this.lineHeight + \""px\"" );\n\tcss( this.labelDiv, \""font-size\"", style.fontSize );\n\n\tcss( this.inputDiv, \""height\"", this.lineHeight + \""px\"" );\n\tcss( this.inputDiv, \""font-size\"", style.fontSize );\n\n\tcss( this.selector, \""padding-left\"", \""4px\"" );\n\tcss( this.selector, \""border\"", \""1px solid \"" + this.borderColor );\n\tcss( this.selector, \""font-family\"", style.fontFamily );\n\tcss( this.selector, \""font-size\"", style.fontSize );\n\tcss( this.selector, \""font-weight\"", style.fontWeight );\n\tcss( this.selector, \""font-variant\"", style.fontVariant );\n\n\tcss( this.selector, \""width\"", this.width + \""px\"" );\n\tcss( this.selector, \""min-width\"", this.minWidth + \""px\"" );\n\n\tthis.selector.setAttribute( \""placeholder\"", this.value );\n\n\tif( this.hideable ){\n\t\tcss( this.labelDiv, \""display\"", \""block\"" );\n\t\tcss( this.inputDiv, \""display\"", \""none\"" );\n\t}else{\n\t\tcss( this.labelDiv, \""display\"", 'none' );\n\t\tcss( this.inputDiv, \""display\"", 'block' );\n\t}\n\n\n\tif( this.maxWidth > 10 && this.enforceMaxWidth === true ){\n\t\tcss( this.label, \""max-width\"", this.maxWidth );\n\t\tcss( this.selector, \""max-width\"", this.maxWidth );\n\n\t\tif( this.maxWidth < this.width ){\n\t\t\tthis.label.value = gadgetui.util.fitText( this.value, this.font, this.maxWidth );\n\t\t}\n\t}\n};\n\nTextInput.prototype.setControlWidth = function( text ){\n\tvar textWidth = parseInt( gadgetui.util.textWidth(text, this.font ), 10 ),\n\t\tcss = gadgetui.util.setStyle;\n\tif( textWidth < this.minWidth ){\n\t\ttextWidth = this.minWidth;\n\t}\n\tcss( this.selector, \""width\"", ( textWidth + 30 ) + \""px\"" );\n\tcss( this.label, \""width\"", ( textWidth + 30 ) + \""px\"" );\n};\n\nTextInput.prototype.addBindings = function(){\n\tvar _this = this;\n\n\tif( this.hideable ){\n\t\tthis.label\n\t\t\t//.off( _this.activate )\n\t\t\t.addEventListener( _this.activate, function( ) {\n\t\t\t\tif( _this.useActive && ( _this.label.getAttribute( \""data-active\"" ) === \""false\"" || _this.label.getAttribute( \""data-active\"" ) === undefined ) ){\n\t\t\t\t\t_this.label.setAttribute( \""data-active\"", \""true\"" );\n\t\t\t\t}else{\n\t\t\t\t\tsetTimeout(\n\t\t\t\t\t\tfunction(){\n\t\t\t\t\t\tvar event, css = gadgetui.util.setStyle;\n\t\t\t\t\t\tif( gadgetui.util.mouseWithin( _this.label, gadgetui.mousePosition ) === true ){\n\t\t\t\t\t\t\t// both input and label\n\t\t\t\t\t\t\tcss( _this.labelDiv, \""display\"", 'none' );\n\t\t\t\t\t\t\tcss( _this.inputDiv, \""display\"", 'block' );\n\t\t\t\t\t\t\t_this.setControlWidth( _this.selector.value );\n\n\t\t\t\t\t\t\t// if we are only showing the input on click, focus on the element immediately\n\t\t\t\t\t\t\tif( _this.activate === \""click\"" ){\n\t\t\t\t\t\t\t\t_this.selector.focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif( _this.emitEvents === true ){\n\t\t\t\t\t\t\t\t// raise an event _this the input is active\n\n\t\t\t\t\t\t\t\tevent = new Event( \""gadgetui-input-show\"" );\n\t\t\t\t\t\t\t\t_this.selector.dispatchEvent( event );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}, _this.delay );\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tthis.selector\n\t\t.addEventListener( \""focus\"", function(e){\n\t\t\te.preventDefault();\n\t\t});\n\n\tthis.selector\n\t\t.addEventListener( \""keyup\"", function( event ) {\n\t\t\tif ( parseInt( event.keyCode, 10 ) === 13 ) {\n\t\t\t\tthis.blur();\n\t\t\t}\n\t\t\t_this.setControlWidth( this.value );\n\t\t});\n\n\tthis.selector\n\t\t.addEventListener( \""change\"", function( event ) {\n\t\t\tsetTimeout( function( ) {\n\t\t\t\tvar value = event.target.value, style, txtWidth;\n\t\t\t\tif( value.length === 0 && _this.selector.getAttribute( \""placeholder\"" ) !== undefined ){\n\t\t\t\t\tvalue = _this.selector.getAttribute( \""placeholder\"" );\n\t\t\t\t}\n\n\t\t\t\ttxtWidth = gadgetui.util.textWidth( value, _this.font );\n\n\t\t\t\tif( _this.maxWidth < txtWidth ){\n\t\t\t\t\tvalue = gadgetui.util.fitText( value, _this.font, _this.maxWidth );\n\t\t\t\t}\n\t\t\t\t_this.label.value = value;\n\t\t\t\tif( _this.model !== undefined && _this.selector.getAttribute( \""gadgetui-bind\"" ) === undefined ){\n\t\t\t\t\t// if we have specified a model but no data binding, change the model value\n\t\t\t\t\t_this.model.set( _this.selector.name, event.target.value );\n\t\t\t\t}\n\n\t\t\t\tif( _this.emitEvents === true ){\n\t\t\t\t\tgadgetui.util.trigger( _this.selector, \""gadgetui-input-change\"", { text: event.target.value } );\n\t\t\t\t}\n\n\t\t\t\tif( _this.func !== undefined ){\n\t\t\t\t\t_this.func( { text: event.target.value } );\n\t\t\t\t}\n\t\t\t}, 200 );\n\t\t});\n\n\tif( this.hideable ){\n\t\tthis.selector\n\t\t\t//.removeEventListener( \""mouseleave\"" )\n\t\t\t.addEventListener( \""mouseleave\"", function( ) {\n\t\t\t\tvar css = gadgetui.util.setStyle;\n\t\t\t\tif( this !== document.activeElement ){\n\t\t\t\t\tcss( _this.labelDiv, \""display\"", \""block\"" );\n\t\t\t\t\tcss( _this.inputDiv, \""display\"", \""none\"" );\n\t\t\t\t\tcss( _this.label, \""maxWidth\"", _this.maxWidth );\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.selector\n\t\t\t.addEventListener( \""blur\"", function( ) {\n\t\t\t\tvar css = gadgetui.util.setStyle;\n\t\t\t\tcss( _this.inputDiv, \""display\"", 'none' );\n\t\t\t\tcss( _this.labelDiv, \""display\"", 'block' );\n\t\t\t\t_this.label.setAttribute( \""data-active\"", \""false\"" );\n\t\t\t\tcss( _this.selector, \""maxWidth\"", _this.maxWidth );\n\t\t\t\tcss( _this.label, \""maxWidth\"", _this.maxWidth );\n\t\t\t});\n\t}\n};\n\nTextInput.prototype.config = function( options ){\n\toptions = ( options === undefined ? {} : options );\n\tthis.borderColor =  (( options.borderColor === undefined) ? \""#d0d0d0\"" : options.borderColor );\n\tthis.useActive =  (( options.useActive === undefined) ? false : options.useActive );\n\tthis.model =  (( options.model === undefined) ? this.model : options.model );\n\tthis.func = (( options.func === undefined) ? undefined : options.func );\n\tthis.emitEvents = (( options.emitEvents === undefined) ? true : options.emitEvents );\n\tthis.activate = (( options.activate === undefined) ? \""mouseenter\"" : options.activate );\n\tthis.delay = (( options.delay === undefined) ? 10 : options.delay );\n\tthis.minWidth = (( options.minWidth === undefined) ? 100 : options.minWidth );\n\tthis.enforceMaxWidth = ( options.enforceMaxWidth === undefined ? false : options.enforceMaxWidth );\n\tthis.hideable = options.hideable || false;\n\tthis.maxWidth = options.maxWidth || gadgetui.util.getNumberValue( gadgetui.util.getStyle( this.selector.parentNode ).width );\n};\n"",""\n\treturn{\n\t\tFileUploader: FileUploader,\n\t\tTextInput: TextInput,\n\t\tSelectInput: SelectInput,\n\t\tComboBox: ComboBox,\n\t\tLookupListInput: LookupListInput\n\t};\n}());\n"",""gadgetui.objects = (function() {\n"",""function Constructor(constructor, args, addBindings) {\n  var ix, returnedObj, obj, bindings;\n\n  if (addBindings === true) {\n    bindings = EventBindings.getAll();\n    for (ix = 0; ix < bindings.length; ix++) {\n      if (constructor.prototype[bindings[ix].name] === undefined) {\n        constructor.prototype[bindings[ix].name] = bindings[ix].func;\n      }\n    }\n  }\n\n  // construct the object\n  obj = Object.create(constructor.prototype);\n  returnedObj = constructor.apply(obj, args);\n  if (returnedObj === undefined) {\n    returnedObj = obj;\n  }\n\n  if (addBindings === true) {\n    // create specified event list from prototype\n    returnedObj.events = {};\n    for (ix = 0; ix < constructor.prototype.events.length; ix++) {\n      returnedObj.events[constructor.prototype.events[ix]] = [];\n    }\n  }\n\n  return returnedObj;\n}\n"",""var EventBindings = {\n  on: function(event, func) {\n    if (this.events[event] === undefined) {\n      this.events[event] = [];\n    }\n    this.events[event].push(func);\n    return this;\n  },\n\n  off: function(event) {\n    // clear listeners\n    this.events[event] = [];\n    return this;\n  },\n\n  fireEvent: function(key, args) {\n    var self = this;\n    this.events[key].forEach( function( func ) {\n      func(self, args);\n    });\n  },\n\n  getAll: function() {\n    return [\n      { name: \""on\"", func: this.on },\n      { name: \""off\"", func: this.off },\n      { name: \""fireEvent\"", func: this.fireEvent }\n    ];\n  }\n};\n"",""function FileItem(args) {\n  this.set(args);\n}\n\nFileItem.prototype.set = function(args) {\n  // filename, size\n  this.fileid = args.fileid !== undefined ? args.fileid : \""\"";\n  this.filename = args.filename !== undefined ? args.filename : \""\"";\n  if (args.filename !== undefined) {\n    this.filenameabbr = args.filename.substr(0, 25);\n    if (args.filename.length > 25) {\n      this.filenameabbr = this.filenameabbr + \""...\"";\n    }\n  } else {\n    this.filenameabbr = \""\"";\n  }\n\n  this.filesize = args.filesize !== undefined ? args.filesize : \""\"";\n  this.tags = args.tags !== undefined ? args.tags : \""\"";\n  this.path = args.path !== undefined ? args.path : \""\"";\n  this.created = args.created !== undefined ? args.created : \""\"";\n  this.createdStr = args.created !== undefined ? args.createdStr : \""\"";\n  this.disabled = args.disabled !== undefined ? args.disabled : 0;\n  this.mimetype =\n    args.mimetype !== undefined ? args.mimetype : \""application/x-unknown\"";\n  this.tile = args.tile !== undefined ? args.tile : \""\"";\n};\n"",""\n\treturn{\n    Constructor: Constructor,\n\t  EventBindings: EventBindings,\n    FileItem: FileItem\n\t};\n}());\n"",""gadgetui.util = ( function() {\n\n\treturn {\n\t\tsplit : function( val ) {\n\t\t\treturn val.split( /,\\s*/ );\n\t\t},\n\t\textractLast : function( term ) {\n\t\t\treturn this.split( term ).pop();\n\t\t},\n\t\tgetNumberValue : function( pixelValue ) {\n\t\t\treturn ( isNaN( Number( pixelValue ) ) ? Number( pixelValue.substring( 0, pixelValue.length - 2 ) ) : pixelValue );\n\t\t},\n\n\t\taddClass : function( sel, className ) {\n\t\t\tif ( sel.classList ) {\n\t\t\t\tsel.classList.add( className );\n\t\t\t} else {\n\t\t\t\tsel.className += ' ' + className;\n\t\t\t}\n\t\t},\n\n    removeClass: function(sel, className) {\n      if (sel.classList) {\n        sel.classList.remove(className);\n      } else {\n        //sel.className += \"" \"" + className;\n        var classes = sel.className;\n        var regex = new RegExp(className,\""g\"");\n        classes.replace( regex, \""\"" );\n        sel.className = classes;\n      }\n    },\n\n\t\tgetOffset : function( selector ) {\n\t\t\tvar rect = selector.getBoundingClientRect();\n\n\t\t\treturn {\n\t\t\t\ttop : rect.top + document.body.scrollTop,\n\t\t\t\tleft : rect.left + document.body.scrollLeft\n\t\t\t};\n\t\t},\n\t\t// http://gomakethings.com/climbing-up-and-down-the-dom-tree-with-vanilla-javascript/\n\t\t// getParentsUntil - MIT License\n\t\tgetParentsUntil : function( elem, parent, selector ) {\n\n\t\t\tvar parents = [];\n\t\t\tif ( parent ) {\n\t\t\t\tvar parentType = parent.charAt( 0 );\n\t\t\t}\n\t\t\tif ( selector ) {\n\t\t\t\tvar selectorType = selector.charAt( 0 );\n\t\t\t}\n\n\t\t\t// Get matches\n\t\t\tfor ( ; elem && elem !== document; elem = elem.parentNode ) {\n\n\t\t\t\t// Check if parent has been reached\n\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t// If parent is a class\n\t\t\t\t\tif ( parentType === '.' ) {\n\t\t\t\t\t\tif ( elem.classList.contains( parent.substr( 1 ) ) ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If parent is an ID\n\t\t\t\t\tif ( parentType === '#' ) {\n\t\t\t\t\t\tif ( elem.id === parent.substr( 1 ) ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If parent is a data attribute\n\t\t\t\t\tif ( parentType === '[' ) {\n\t\t\t\t\t\tif ( elem.hasAttribute( parent.substr( 1,\n\t\t\t\t\t\t\t\tparent.length - 1 ) ) ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If parent is a tag\n\t\t\t\t\tif ( elem.tagName.toLowerCase() === parent ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( selector ) {\n\n\t\t\t\t\t// If selector is a class\n\t\t\t\t\tif ( selectorType === '.' ) {\n\t\t\t\t\t\tif ( elem.classList.contains( selector.substr( 1 ) ) ) {\n\t\t\t\t\t\t\tparents.push( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If selector is an ID\n\t\t\t\t\tif ( selectorType === '#' ) {\n\t\t\t\t\t\tif ( elem.id === selector.substr( 1 ) ) {\n\t\t\t\t\t\t\tparents.push( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If selector is a data attribute\n\t\t\t\t\tif ( selectorType === '[' ) {\n\t\t\t\t\t\tif ( elem.hasAttribute( selector.substr( 1,\n\t\t\t\t\t\t\t\tselector.length - 1 ) ) ) {\n\t\t\t\t\t\t\tparents.push( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If selector is a tag\n\t\t\t\t\tif ( elem.tagName.toLowerCase() === selector ) {\n\t\t\t\t\t\tparents.push( elem );\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tparents.push( elem );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Return parents if any exist\n\t\t\tif ( parents.length === 0 ) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\treturn parents;\n\t\t\t}\n\n\t\t},\n\t\tgetRelativeParentOffset : function( selector ) {\n\t\t\tvar i, offset, parents = gadgetui.util.getParentsUntil( selector,\n\t\t\t\t\t\""body\"" ), relativeOffsetLeft = 0, relativeOffsetTop = 0;\n\n\t\t\tfor ( i = 0; i < parents.length; i++ ) {\n\t\t\t\tif ( parents[ i ].style.position === \""relative\"" ) {\n\t\t\t\t\toffset = gadgetui.util.getOffset( parents[ i ] );\n\t\t\t\t\t// set the largest offset values of the ancestors\n\t\t\t\t\tif ( offset.left > relativeOffsetLeft ) {\n\t\t\t\t\t\trelativeOffsetLeft = offset.left;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( offset.top > relativeOffsetTop ) {\n\t\t\t\t\t\trelativeOffsetTop = offset.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tleft : relativeOffsetLeft,\n\t\t\t\ttop : relativeOffsetTop\n\t\t\t};\n\t\t},\n\t\tId : function() {\n\t\t\treturn ( ( Math.random() * 100 ).toString() ).replace( /\\./g, \""\"" );\n\t\t},\n\t\tbind : function( selector, model ) {\n\t\t\tvar bindVar = selector.getAttribute( \""gadgetui-bind\"" );\n\n\t\t\t// if binding was specified, make it so\n\t\t\tif ( bindVar !== undefined && model !== undefined ) {\n\t\t\t\tmodel.bind( bindVar, selector );\n\t\t\t}\n\t\t},\n\t\t/*\n\t\t * encode : function( input, options ){ var result, canon = true, encode =\n\t\t * true, encodeType = 'html'; if( options !== undefined ){ canon = (\n\t\t * options.canon === undefined ? true : options.canon ); encode = (\n\t\t * options.encode === undefined ? true : options.encode ); //enum\n\t\t * (html|css|attr|js|url) encodeType = ( options.encodeType ===\n\t\t * undefined ? \""html\"" : options.encodeType ); } if( canon ){ result =\n\t\t * $.encoder.canonicalize( input ); } if( encode ){ switch( encodeType ){\n\t\t * case \""html\"": result = $.encoder.encodeForHTML( result ); break; case\n\t\t * \""css\"": result = $.encoder.encodeForCSS( result ); break; case \""attr\"":\n\t\t * result = $.encoder.encodeForHTMLAttribute( result ); break; case\n\t\t * \""js\"": result = $.encoder.encodeForJavascript( result ); break; case\n\t\t * \""url\"": result = $.encoder.encodeForURL( result ); break; }\n\t\t *  } return result; },\n\t\t */\n\t\tmouseCoords : function( ev ) {\n\t\t\t// from\n\t\t\t// http://www.webreference.com/programming/javascript/mk/column2/\n\t\t\tif ( ev.pageX || ev.pageY ) {\n\t\t\t\treturn {\n\t\t\t\t\tx : ev.pageX,\n\t\t\t\t\ty : ev.pageY\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tx : ev.clientX + document.body.scrollLeft\n\t\t\t\t\t\t- document.body.clientLeft,\n\t\t\t\ty : ev.clientY + document.body.scrollTop\n\t\t\t\t\t\t- document.body.clientTop\n\t\t\t};\n\t\t},\n\t\tmouseWithin : function( selector, coords ) {\n\t\t\tvar rect = selector.getBoundingClientRect();\n\t\t\treturn ( coords.x >= rect.left && coords.x <= rect.right\n\t\t\t\t\t&& coords.y >= rect.top && coords.y <= rect.bottom ) ? true\n\t\t\t\t\t: false;\n\t\t},\n\t\tgetStyle : function( el, prop ) {\n\t\t\tif ( window.getComputedStyle !== undefined ) {\n\t\t\t\tif ( prop !== undefined ) {\n\t\t\t\t\treturn window.getComputedStyle( el, null )\n\t\t\t\t\t\t\t.getPropertyValue( prop );\n\t\t\t\t} else {\n\t\t\t\t\treturn window.getComputedStyle( el, null );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( prop !== undefined ) {\n\t\t\t\t\treturn el.currentStyle[ prop ];\n\t\t\t\t} else {\n\t\t\t\t\treturn el.currentStyle;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t//https://jsfiddle.net/tovic/Xcb8d/\n\t\t//author: Taufik Nurrohman\n\t\t// code belongs to author\n\t\t// no license enforced\n\t\tdraggable : function( selector ){\n\t\t\tvar selected = null, // Object of the element to be moved\n\t\t    x_pos = 0, y_pos = 0, // Stores x & y coordinates of the mouse pointer\n\t\t    x_elem = 0, y_elem = 0; // Stores top, left values (edge) of the element\n\n\t\t\t// Will be called when user starts dragging an element\n\t\t\tfunction _drag_init(elem) {\n\t\t\t    // Store the object of the element which needs to be moved\n\t\t\t    selected = elem;\n\t\t\t    x_elem = x_pos - selected.offsetLeft;\n\t\t\t    y_elem = y_pos - selected.offsetTop;\n\t\t\t}\n\n\t\t\t// Will be called when user dragging an element\n\t\t\tfunction _move_elem(e) {\n\t\t\t    x_pos = document.all ? window.event.clientX : e.pageX;\n\t\t\t    y_pos = document.all ? window.event.clientY : e.pageY;\n\t\t\t    if (selected !== null) {\n\t\t\t        selected.style.left = (x_pos - x_elem) + 'px';\n\t\t\t        selected.style.top = (y_pos - y_elem) + 'px';\n\t\t\t    }\n\t\t\t}\n\n\t\t\t// Destroy the object when we are done\n\t\t\tfunction _destroy( event ) {\n\t\t\t\tconsole.log( event );\n\t\t\t\tvar myEvent = new CustomEvent(\""drag_end\"", {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\ttop : gadgetui.util.getStyle( selector, \""top\"" ),\n\t\t\t\t\t\tleft : gadgetui.util.getStyle( selector, \""left\"" )\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Trigger it!\n\t\t\t\tselector.dispatchEvent(myEvent);\n\t\t\t  selected = null;\n\t\t\t}\n\n\t\t\t// Bind the functions...\n\t\t\tselector.onmousedown = function () {\n\t\t\t    _drag_init(this);\n\t\t\t    return false;\n\t\t\t};\n\n\t\t\tdocument.onmousemove = _move_elem;\n\t\t\tdocument.onmouseup = _destroy;\n\t\t},\n\n\t\ttextWidth : function( text, style ) {\n\t\t\t// http://stackoverflow.com/questions/1582534/calculating-text-width-with-jquery\n\t\t\t// based on edsioufi's solution\n\t\t\tif ( !gadgetui.util.textWidthEl ) {\n\t\t\t\tgadgetui.util.textWidthEl = document.createElement( \""div\"" );\n\t\t\t\tgadgetui.util.textWidthEl.setAttribute( \""id\"",\n\t\t\t\t\t\t\""gadgetui-textWidth\"" );\n\t\t\t\tgadgetui.util.textWidthEl.setAttribute( \""style\"",\n\t\t\t\t\t\t\""display: none;\"" );\n\t\t\t\tdocument.body.appendChild( gadgetui.util.textWidthEl );\n\t\t\t}\n\t\t\t// gadgetui.util.fakeEl = $('<span\n\t\t\t// id=\""gadgetui-textWidth\"">').appendTo(document.body);\n\n\t\t\t// var width, htmlText = text || selector.value ||\n\t\t\t// selector.innerHTML;\n\t\t\tvar width, htmlText = text;\n\t\t\tif ( htmlText.length > 0 ) {\n\t\t\t\t// htmlText =\n\t\t\t\t// gadgetui.util.TextWidth.fakeEl.text(htmlText).html();\n\t\t\t\t// //encode to Html\n\t\t\t\tgadgetui.util.textWidthEl.innerText = htmlText;\n\t\t\t\tif ( htmlText === undefined ) {\n\t\t\t\t\thtmlText = \""\"";\n\t\t\t\t} else {\n\t\t\t\t\thtmlText = htmlText.replace( /\\s/g, \""&nbsp;\"" ); // replace\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// trailing\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// and\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// leading\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// spaces\n\t\t\t\t}\n\t\t\t}\n\t\t\tgadgetui.util.textWidthEl.innertText = htmlText;\n\t\t\t// gadgetui.util.textWidthEl.style.font = font;\n\t\t\t// gadgetui.util.textWidthEl.html( htmlText ).style.font = font;\n\t\t\t// gadgetui.util.textWidthEl.html(htmlText).css('font', font ||\n\t\t\t// $.fn.css('font'));\n\t\t\tgadgetui.util.textWidthEl.style.fontFamily = style.fontFamily;\n\t\t\tgadgetui.util.textWidthEl.style.fontSize = style.fontSize;\n\t\t\tgadgetui.util.textWidthEl.style.fontWeight = style.fontWeight;\n\t\t\tgadgetui.util.textWidthEl.style.fontVariant = style.fontVariant;\n\t\t\tgadgetui.util.textWidthEl.style.display = \""inline\"";\n\n\t\t\twidth = gadgetui.util.textWidthEl.offsetWidth;\n\t\t\tgadgetui.util.textWidthEl.style.display = \""none\"";\n\t\t\treturn width;\n\t\t},\n\n\t\tfitText : function( text, style, width ) {\n\t\t\tvar midpoint, txtWidth = gadgetui.util.TextWidth( text, style ), ellipsisWidth = gadgetui.util\n\t\t\t\t\t.TextWidth( \""...\"", style );\n\t\t\tif ( txtWidth < width ) {\n\t\t\t\treturn text;\n\t\t\t} else {\n\t\t\t\tmidpoint = Math.floor( text.length / 2 ) - 1;\n\t\t\t\twhile ( txtWidth + ellipsisWidth >= width ) {\n\t\t\t\t\ttext = text.slice( 0, midpoint )\n\t\t\t\t\t\t\t+ text.slice( midpoint + 1, text.length );\n\n\t\t\t\t\tmidpoint = Math.floor( text.length / 2 ) - 1;\n\t\t\t\t\ttxtWidth = gadgetui.util.TextWidth( text, font );\n\n\t\t\t\t}\n\t\t\t\tmidpoint = Math.floor( text.length / 2 ) - 1;\n\t\t\t\ttext = text.slice( 0, midpoint ) + \""...\""\n\t\t\t\t\t\t+ text.slice( midpoint, text.length );\n\n\t\t\t\t// remove spaces around the ellipsis\n\t\t\t\twhile ( text.substring( midpoint - 1, midpoint ) === \"" \"" ) {\n\t\t\t\t\ttext = text.slice( 0, midpoint - 1 )\n\t\t\t\t\t\t\t+ text.slice( midpoint, text.length );\n\t\t\t\t\tmidpoint = midpoint - 1;\n\t\t\t\t}\n\n\t\t\t\twhile ( text.substring( midpoint + 3, midpoint + 4 ) === \"" \"" ) {\n\t\t\t\t\ttext = text.slice( 0, midpoint + 3 )\n\t\t\t\t\t\t\t+ text.slice( midpoint + 4, text.length );\n\t\t\t\t\tmidpoint = midpoint - 1;\n\t\t\t\t}\n\t\t\t\treturn text;\n\t\t\t}\n\t\t},\n\n\t\tcreateElement : function( tagName ) {\n\t\t\tvar el = document.createElement( tagName );\n\t\t\tel.setAttribute( \""style\"", \""\"" );\n\t\t\treturn el;\n\t\t},\n\n\t\taddStyle : function( element, style ) {\n\t\t\tvar estyles = element.getAttribute( \""style\"" ), currentStyles = ( estyles !== null ? estyles\n\t\t\t\t\t: \""\"" );\n\t\t\telement.setAttribute( \""style\"", currentStyles + \"" \"" + style + \"";\"" );\n\t\t},\n\n\t\tisNumeric : function( num ) {\n\t\t\treturn !isNaN( parseFloat( num ) ) && isFinite( num );\n\t\t},\n\n\t\tsetStyle : function( element, style, value ) {\n\t\t\tvar newStyles, estyles = element.getAttribute( \""style\"" ), currentStyles = ( estyles !== null ? estyles\n\t\t\t\t\t: \""\"" ), str = '(' + style + ')+ *\\\\:[^\\\\;]*\\\\;', re = new RegExp(\n\t\t\t\t\tstr, \""g\"" );\n\t\t\t// find styles in the style string\n\t\t\t// ([\\w\\-]+)+ *\\:[^\\;]*\\;\n\n\t\t\t// assume\n\t\t\tif ( gadgetui.util.isNumeric( value ) === true ) {\n\t\t\t\t// don't modify properties that accept a straight numeric value\n\t\t\t\tswitch ( style ) {\n\t\t\t\tcase \""opacity\"":\n\t\t\t\tcase \""z-index\"":\n\t\t\t\tcase \""font-weight\"":\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = value + \""px\"";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( currentStyles.search( re ) >= 0 ) {\n\t\t\t\tnewStyles = currentStyles.replace( re, style + \"": \"" + value\n\t\t\t\t\t\t+ \"";\"" );\n\t\t\t} else {\n\t\t\t\tnewStyles = currentStyles + \"" \"" + style + \"": \"" + value + \"";\"";\n\t\t\t}\n\t\t\telement.setAttribute( \""style\"", newStyles );\n\t\t},\n\t\tencode : function( str ) {\n\t\t\treturn str;\n\t\t},\n\n\t\ttrigger : function( selector, eventType, data ) {\n\t\t\tselector.dispatchEvent( new CustomEvent( eventType, {\n\t\t\t\tdetail : data\n\t\t\t} ) );\n\t\t},\n\t\tgetMaxZIndex : function() {\n\t\t\tvar elems = document.querySelectorAll( \""*\"" );\n\t\t\tvar highest = 0;\n\t\t\tfor ( var ix = 0; ix < elems.length; ix++ ) {\n\t\t\t\tvar zindex = gadgetui.util.getStyle( elems[ ix ], \""z-index\"" );\n\t\t\t\tif ( ( zindex > highest ) && ( zindex != 'auto' ) ) {\n\t\t\t\t\thighest = zindex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn highest;\n\t\t},\n\t\t// copied from jQuery core, re-distributed per MIT License\n\t\tgrep : function( elems, callback, invert ) {\n\t\t\tvar callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// _this pass the validator function\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\t\tdelay : function( handler, delay ) {\n\t\t\tfunction handlerProxy() {\n\t\t\t\treturn handler.apply( instance, arguments );\n\t\t\t}\n\t\t\tvar instance = this;\n\t\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t\t},\n\t\tcontains : function( child, parent ) {\n\t\t\tvar node = child.parentNode;\n\t\t\twhile ( node != null ) {\n\t\t\t\tif ( node == parent ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tnode = node.parentNode;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t};\n}() );\n""]}"
926e4c8645ab8507aa1a842f71f6f756b18a1a6a,1811116, * Alternative adoptNode on IE11 (http://stackoverflow.com/questions/1811116/ie-support-for-dom-importnode)
1c2b54eaa010ea7e12160ac54e4f6f24c100ae06,1444562,    // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object
786752390d7a48335380ae2a4a4556d9ad057f28,6646052,"If your project uses ARC, flag the source files with the `-fno-objc-arc` compiler flag ([how to](http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project))."
81c456962bb2cc95580297cec7e945c50dd5d412,2040240, * @origin http://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid#answer-15875555
d10a95ff830fea050c9c9c6acd51f4e94612d714,79923,  - [Stack vs Heap](http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap)
34a451446140aab3fe3cbb2f9c5f6e75cebfd720,9645193,"8981062,comment,8980546,8981034,0,0,codepie,,,""I think this might provide you a relevant answer : <a href=""""http://stackoverflow.com/questions/9645193/calculating-fibonacci-number-accurately-in-c"""" rel=""""nofollow"""">http://stackoverflow.com/questions/9645193/calculating-fibon...</a>"",1422815792"
0a1e8f8966488839bd7ba8c0509d3763bf14e7d4,1960516,http://stackoverflow.com/questions/1960516/python-json-serialize-a-decimal-object
21c8ab4128188ebf2b2e416cab5b76b98ebfa653,16575868,<http://stackoverflow.com/questions/16575868/efficiently-creating-additional-columns-in-a-pandas-dataframe-using-map>`__
52c1b562ec577f447051e86953d0dda160d0b516,3330919,        // http://stackoverflow.com/a/3330919)
cbe24ac52cf1f580247bf41ff4f8d7547b0c962e,7033855,  <!-- http://stackoverflow.com/questions/7033855/msvc10-mp-builds-not-multicore-across-folders-in-a-project -->
7fe192effe7d4bee27f6df3f8fb3aac80efc9402,49478,"# For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects"
c5e96255f1f6ab1b059116d71b5eb56198998139,3330919,        // http://stackoverflow.com/a/3330919)
727794aa3a2212c507edafada58187152542e24b,5043393, *     (see http://stackoverflow.com/questions/5043393/openssl-ts-command-not-working-trusted-timestamps)
0ec1f8329975021b8ab00a1116fe509ee066d667,22331362,"Version,org.springframework.data.mongodb.core.mapping.Version,http://stackoverflow.com/questions/22331362/org-osgi-framework-bundleexceptionmissing-requirement-260-0-package-packa"
b88c44445608c6a82e849cb05bb0d7872d208498,4819886,	// http://stackoverflow.com/a/4819886/1221082
ce63bc4d903010d7f3593cb450e49125578b1976,12816941,# http://stackoverflow.com/questions/12816941/unit-testing-with-django-pipeline
6239d2bfd83ae64c1cd2f06ee2a98f4f15586617,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
da32c29c96e8fd1c555106e1dd5a0387ef90a91f,18611135,        # Example from http://stackoverflow.com/a/18611135/498873
d94c2efb46417fa41cc5bc98943e7006d2128472,864718,:: Formatting from Bernhard Hofmann on http://stackoverflow.com/questions/864718/how-to-append-a-date-in-batch-files
4e48393baedeaa259fc7151dc5f0b0ffc58be7ac,17628589,	# http://stackoverflow.com/questions/17628589/perform-varimax-rotation-in-python-using-numpy
dfd45d33f4d2c4b9574c95ab76816eb8e4b722f4,5056734,  // See http://stackoverflow.com/questions/5056734/android-force-edittext-to-remove-focus
b34b63f7dd2db5fbcf7199e57daad907dfae6962,33268925,// Check Android API at run-time: https://stackoverflow.com/a/33268925
5c8f76c9d9c4503999714f3c4d79f00338e59036,11969840,     * From: http://stackoverflow.com/questions/11969840/how-to-convert-a-base-10-number-to-alphabetic-like-ordered-list-in-html
6a3b2367e0cb3be4481f0a48fb2df855df1a6322,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
78e57bc0b29f55004e927525b9f48aad62b16fa4,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
9131db8016128aadc3c5384362ba604726b92d83,125557,"t.compose=t.applyMiddleware=t.bindActionCreators=t.combineReducers=t.createStore=void 0;var o=n(367),i=r(o),a=n(968),u=r(a),s=n(967),c=r(s),l=n(966),f=r(l),p=n(366),d=r(p),h=n(368);r(h),t.createStore=i[""default""],t.combineReducers=u[""default""],t.bindActionCreators=c[""default""],t.applyMiddleware=f[""default""],t.compose=d[""default""]},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}Object.defineProperty(t,""__esModule"",{value:!0}),t[""default""]=void 0;var o=n(417),i=r(o);t[""default""]=i[""default""]},function(e,t){""use strict"";t.__esModule=!0;var n=!(""undefined""==typeof window||!window.document||!window.document.createElement);t.canUseDOM=n},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}function o(e){return s.stringify(e).replace(/%20/g,""+"")}function i(e){return function(){function t(e){if(null==e.query){var t=e.search;e.query=O(t.substring(1)),e[h]={search:t,searchBase:""""}}return e}function n(e,t){var n,r=e[h],o=t?w(t):"""";if(!r&&!o)return e;""string""==typeof e&&(e=f.parsePath(e));var i=void 0;i=r&&e.search===r.search?r.searchBase:e.search||"""";var u=i;return o&&(u+=(u?""&"":""?"")+o),a({},e,(n={search:u},n[h]={search:u,searchBase:i},n))}function r(e){return b.listenBefore(function(n,r){l[""default""](e,t(n),r)})}function i(e){return b.listen(function(n){e(t(n))})}function u(e){b.push(n(e,e.query))}function s(e){b.replace(n(e,e.query))}function c(e,t){return b.createPath(n(e,t||e.query))}function p(e,t){return b.createHref(n(e,t||e.query))}function v(e){for(var r=arguments.length,o=Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=arguments[i];var a=b.createLocation.apply(b,[n(e,e.query)].concat(o));return e.query&&(a.query=e.query),t(a)}function m(e,t,n){""string""==typeof t&&(t=f.parsePath(t)),u(a({state:e},t,{query:n}))}function g(e,t,n){""string""==typeof t&&(t=f.parsePath(t)),s(a({state:e},t,{query:n}))}var _=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=e(_),w=_.stringifyQuery,O=_.parseQueryString;return""function""!=typeof w&&(w=o),""function""!=typeof O&&(O=y),a({},b,{listenBefore:r,listen:i,push:u,replace:s,createPath:c,createHref:p,createLocation:v,pushState:d[""default""](m,""pushState is deprecated; use push instead""),replaceState:d[""default""](g,""replaceState is deprecated; use replace instead"")})}}t.__esModule=!0;var a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u=n(25),s=(r(u),n(637)),c=n(124),l=r(c),f=n(35),p=n(123),d=r(p),h=""$searchBase"",y=s.parse;t[""default""]=i,e.exports=t[""default""]},function(e,t){""use strict"";var n={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,mixins:!0,propTypes:!0,type:!0},r={name:!0,length:!0,prototype:!0,caller:!0,arguments:!0,arity:!0},o=""function""==typeof Object.getOwnPropertySymbols;e.exports=function(e,t,i){if(""string""!=typeof t){var a=Object.getOwnPropertyNames(t);o&&(a=a.concat(Object.getOwnPropertySymbols(t)));for(var u=0;u<a.length;++u)if(!(n[a[u]]||r[a[u]]||i&&i[a[u]]))try{e[a[u]]=t[a[u]]}catch(s){}}return e}},function(e,t,n){function r(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}var o=n(576),i=n(577),a=n(578),u=n(579),s=n(580);r.prototype.clear=o,r.prototype[""delete""]=i,r.prototype.get=a,r.prototype.has=u,r.prototype.set=s,e.exports=r},[974,16],function(e,t){function n(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}e.exports=n},function(e,t){function n(e,t){for(var n=-1,r=e?e.length:0,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}e.exports=n},function(e,t){function n(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}e.exports=n},function(e,t,n){function r(e,t){for(var n=e.length;n--;)if(o(e[n][0],t))return n;return-1}var o=n(93);e.exports=r},function(e,t,n){function r(e){return o(e)?i(e):{}}var o=n(27),i=Object.create;e.exports=r},function(e,t,n){function r(e,t,n,a,u){var s=-1,c=e.length;for(n||(n=i),u||(u=[]);++s<c;){var l=e[s];t>0&&n(l)?t>1?r(l,t-1,n,a,u):o(u,l):a||(u[u.length]=l)}return u}var o=n(82),i=n(571);e.exports=r},function(e,t){function n(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}e.exports=n},function(e,t,n){function r(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=o(e.prototype),r=e.apply(n,t);return i(r)?r:n}}var o=n(84),i=n(27);e.exports=r},[987,573],function(e,t,n){var r=n(141),o=Object.getPrototypeOf,i=r(o,Object);e.exports=i},function(e,t){function n(e){var t=!1;if(null!=e&&""function""!=typeof e.toString)try{t=!!(e+"""")}catch(n){}return t}e.exports=n},[993,17,65],[1e3,36],function(e,t){function n(e,t){return e===t||e!==e&&t!==t}e.exports=n},function(e,t){function n(e){return""number""==typeof e&&e>-1&&e%1==0&&e<=r}var r=9007199254740991;e.exports=n},function(e,t,n){""use strict"";function r(e){return""topMouseUp""===e||""topTouchEnd""===e||""topTouchCancel""===e}function o(e){return""topMouseMove""===e||""topTouchMove""===e}function i(e){return""topMouseDown""===e||""topTouchStart""===e}function a(e,t,n,r){var o=e.type||""unknown-event"";e.currentTarget=m.getNodeFromInstance(r),t?y.invokeGuardedCallbackWithCatch(o,n,e):y.invokeGuardedCallback(o,n,e),e.currentTarget=null}function u(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)a(e,t,n[o],r[o]);else n&&a(e,t,n,r);e._dispatchListeners=null,e._dispatchInstances=null}function s(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t)){for(var r=0;r<t.length&&!e.isPropagationStopped();r++)if(t[r](e,n[r]))return n[r]}else if(t&&t(e,n))return n;return null}function c(e){var t=s(e);return e._dispatchInstances=null,e._dispatchListeners=null,t}function l(e){var t=e._dispatchListeners,n=e._dispatchInstances;Array.isArray(t)?h(""103""):void 0,e.currentTarget=t?m.getNodeFromInstance(n):null;var r=t?t(e):null;return e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,r}function f(e){return!!e._dispatchListeners}var p,d,h=n(7),y=n(158),v=(n(2),n(6),{injectComponentTree:function(e){p=e},injectTreeTraversal:function(e){d=e}}),m={isEndish:r,isMoveish:o,isStartish:i,executeDirectDispatch:l,executeDispatchesInOrder:u,executeDispatchesInOrderStopAtTrue:c,hasDispatches:f,getInstanceFromNode:function(e){return p.getInstanceFromNode(e)},getNodeFromInstance:function(e){return p.getNodeFromInstance(e)},isAncestor:function(e,t){return d.isAncestor(e,t)},getLowestCommonAncestor:function(e,t){return d.getLowestCommonAncestor(e,t)},getParentInstance:function(e){return d.getParentInstance(e)},traverseTwoPhase:function(e,t,n){return d.traverseTwoPhase(e,t,n)},traverseEnterLeave:function(e,t,n,r,o){return d.traverseEnterLeave(e,t,n,r,o)},injection:v};e.exports=m},function(e,t,n){""use strict"";function r(e){return Object.prototype.hasOwnProperty.call(e,y)||(e[y]=d++,f[e[y]]={}),f[e[y]]}var o,i=n(8),a=n(154),u=n(670),s=n(160),c=n(703),l=n(165),f={},p=!1,d=0,h={topAbort:""abort"",topAnimationEnd:c(""animationend"")||""animationend"",topAnimationIteration:c(""animationiteration"")||""animationiteration"",topAnimationStart:c(""animationstart"")||""animationstart"",topBlur:""blur"",topCanPlay:""canplay"",topCanPlayThrough:""canplaythrough"",topChange:""change"",topClick:""click"",topCompositionEnd:""compositionend"",topCompositionStart:""compositionstart"",topCompositionUpdate:""compositionupdate"",topContextMenu:""contextmenu"",topCopy:""copy"",topCut:""cut"",topDoubleClick:""dblclick"",topDrag:""drag"",topDragEnd:""dragend"",topDragEnter:""dragenter"",topDragExit:""dragexit"",topDragLeave:""dragleave"",topDragOver:""dragover"",topDragStart:""dragstart"",topDrop:""drop"",topDurationChange:""durationchange"",topEmptied:""emptied"",topEncrypted:""encrypted"",topEnded:""ended"",topError:""error"",topFocus:""focus"",topInput:""input"",topKeyDown:""keydown"",topKeyPress:""keypress"",topKeyUp:""keyup"",topLoadedData:""loadeddata"",topLoadedMetadata:""loadedmetadata"",topLoadStart:""loadstart"",topMouseDown:""mousedown"",topMouseMove:""mousemove"",topMouseOut:""mouseout"",topMouseOver:""mouseover"",topMouseUp:""mouseup"",topPaste:""paste"",topPause:""pause"",topPlay:""play"",topPlaying:""playing"",topProgress:""progress"",topRateChange:""ratechange"",topScroll:""scroll"",topSeeked:""seeked"",topSeeking:""seeking"",topSelectionChange:""selectionchange"",topStalled:""stalled"",topSuspend:""suspend"",topTextInput:""textInput"",topTimeUpdate:""timeupdate"",topTouchCancel:""touchcancel"",topTouchEnd:""touchend"",topTouchMove:""touchmove"",topTouchStart:""touchstart"",topTransitionEnd:c(""transitionend"")||""transitionend"",topVolumeChange:""volumechange"",topWaiting:""waiting"",topWheel:""wheel""},y=""_reactListenersID""+String(Math.random()).slice(2),v=i({},u,{ReactEventListener:null,injection:{injectReactEventListener:function(e){e.setHandleTopLevel(v.handleTopLevel),v.ReactEventListener=e}},setEnabled:function(e){v.ReactEventListener&&v.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!v.ReactEventListener||!v.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var n=t,o=r(n),i=a.registrationNameDependencies[e],u=0;u<i.length;u++){var s=i[u];o.hasOwnProperty(s)&&o[s]||(""topWheel""===s?l(""wheel"")?v.ReactEventListener.trapBubbledEvent(""topWheel"",""wheel"",n):l(""mousewheel"")?v.ReactEventListener.trapBubbledEvent(""topWheel"",""mousewheel"",n):v.ReactEventListener.trapBubbledEvent(""topWheel"",""DOMMouseScroll"",n):""topScroll""===s?l(""scroll"",!0)?v.ReactEventListener.trapCapturedEvent(""topScroll"",""scroll"",n):v.ReactEventListener.trapBubbledEvent(""topScroll"",""scroll"",v.ReactEventListener.WINDOW_HANDLE):""topFocus""===s||""topBlur""===s?(l(""focus"",!0)?(v.ReactEventListener.trapCapturedEvent(""topFocus"",""focus"",n),v.ReactEventListener.trapCapturedEvent(""topBlur"",""blur"",n)):l(""focusin"")&&(v.ReactEventListener.trapBubbledEvent(""topFocus"",""focusin"",n),v.ReactEventListener.trapBubbledEvent(""topBlur"",""focusout"",n)),o.topBlur=!0,o.topFocus=!0):h.hasOwnProperty(s)&&v.ReactEventListener.trapBubbledEvent(s,h[s],n),o[s]=!0)}},trapBubbledEvent:function(e,t,n){return v.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return v.ReactEventListener.trapCapturedEvent(e,t,n)},supportsEventPageXY:function(){if(!document.createEvent)return!1;var e=document.createEvent(""MouseEvent"");return null!=e&&""pageX""in e},ensureScrollValueMonitoring:function(){if(void 0===o&&(o=v.supportsEventPageXY()),!o&&!p){var e=s.refreshScrollValues;v.ReactEventListener.monitorScrollValue(e),p=!0}}});e.exports=v},function(e,t,n){""use strict"";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(53),i=n(160),a=n(163),u={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:a,button:function(e){var t=e.button;return""which""in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return""pageX""in e?e.pageX:e.clientX+i.currentScrollLeft},pageY:function(e){return""pageY""in e?e.pageY:e.clientY+i.currentScrollTop}};o.augmentClass(r,u),e.exports=r},function(e,t,n){""use strict"";var r=n(7),o=(n(2),{}),i={reinitializeTransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitData?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(e,t,n,o,i,a,u,s){this.isInTransaction()?r(""27""):void 0;var c,l;try{this._isInTransaction=!0,c=!0,this.initializeAll(0),l=e.call(t,n,o,i,a,u,s),c=!1}finally{try{if(c)try{this.closeAll(0)}catch(f){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return l},initializeAll:function(e){for(var t=this.transactionWrappers,n=e;n<t.length;n++){var r=t[n];try{this.wrapperInitData[n]=o,this.wrapperInitData[n]=r.initialize?r.initialize.call(this):null}finally{if(this.wrapperInitData[n]===o)try{this.initializeAll(n+1)}catch(i){}}}},closeAll:function(e){this.isInTransaction()?void 0:r(""28"");for(var t=this.transactionWrappers,n=e;n<t.length;n++){var i,a=t[n],u=this.wrapperInitData[n];try{i=!0,u!==o&&a.close&&a.close.call(this,u),i=!1}finally{if(i)try{this.closeAll(n+1)}catch(s){}}}this.wrapperInitData.length=0}};e.exports=i},function(e,t){""use strict"";function n(e){var t=""""+e,n=o.exec(t);if(!n)return t;var r,i="""",a=0,u=0;for(a=n.index;a<t.length;a++){switch(t.charCodeAt(a)){case 34:r=""&quot;"";break;case 38:r=""&amp;"";break;case 39:r=""&#x27;"";break;case 60:r=""&lt;"";break;case 62:r=""&gt;"";break;default:continue}u!==a&&(i+=t.substring(u,a)),u=a+1,i+=r}return u!==a?i+t.substring(u,a):i}function r(e){return""boolean""==typeof e||""number""==typeof e?""""+e:n(e)}var o=/[""'&<>]/;e.exports=r},function(e,t,n){""use strict"";var r,o=n(15),i=n(153),a=/^[ \r\n\t\f]/,u=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,s=n(161),c=s(function(e,t){if(e.namespaceURI!==i.svg||""innerHTML""in e)e.innerHTML=t;else{r=r||document.createElement(""div""),r.innerHTML=""<svg>""+t+""</svg>"";for(var n=r.firstChild;n.firstChild;)e.appendChild(n.firstChild)}});if(o.canUseDOM){var l=document.createElement(""div"");l.innerHTML="" "",""""===l.innerHTML&&(c=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),a.test(t)||""<""===t[0]&&u.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),l=null}e.exports=c},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}Object.defineProperty(t,""__esModule"",{value:!0}),t.routerMiddleware=t.routerActions=t.goForward=t.goBack=t.go=t.replace=t.push=t.CALL_HISTORY_METHOD=t.routerReducer=t.LOCATION_CHANGE=t.syncHistoryWithStore=void 0;var o=n(302);Object.defineProperty(t,""LOCATION_CHANGE"",{enumerable:!0,get:function(){return o.LOCATION_CHANGE}}),Object.defineProperty(t,""routerReducer"",{enumerable:!0,get:function(){return o.routerReducer}});var i=n(301);Object.defineProperty(t,""CALL_HISTORY_METHOD"",{enumerable:!0,get:function(){return i.CALL_HISTORY_METHOD}}),Object.defineProperty(t,""push"",{enumerable:!0,get:function(){return i.push}}),Object.defineProperty(t,""replace"",{enumerable:!0,get:function(){return i.replace}}),Object.defineProperty(t,""go"",{enumerable:!0,get:function(){return i.go}}),Object.defineProperty(t,""goBack"",{enumerable:!0,get:function(){return i.goBack}}),Object.defineProperty(t,""goForward"",{enumerable:!0,get:function(){return i.goForward}}),Object.defineProperty(t,""routerActions"",{enumerable:!0,get:function(){return i.routerActions}});var a=n(713),u=r(a),s=n(712),c=r(s);t.syncHistoryWithStore=u[""default""],t.routerMiddleware=c[""default""]},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}t.__esModule=!0;var o=""function""==typeof Symbol&&""symbol""==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&""function""==typeof Symbol&&e.constructor===Symbol?""symbol"":typeof e},i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a=n(11),u=r(a),s=n(1),c=r(s),l=n(103),f=(r(l),n(728)),p=r(f),d=n(32),h=n(14),y=(r(h),c[""default""].PropTypes),v=y.array,m=y.func,g=y.object,_=c[""default""].createClass({displayName:""RouterContext"",propTypes:{history:g,router:g.isRequired,location:g.isRequired,routes:v.isRequired,params:g.isRequired,components:v.isRequired,createElement:m.isRequired},getDefaultProps:function(){return{createElement:c[""default""].createElement}},childContextTypes:{history:g,location:g.isRequired,router:g.isRequired},getChildContext:function(){var e=this.props,t=e.router,n=e.history,r=e.location;return t||(t=i({},n,{setRouteLeaveHook:n.listenBeforeLeavingRoute}),delete t.listenBeforeLeavingRoute),{history:n,location:r,router:t}},createElement:function(e,t){return null==e?null:this.props.createElement(e,t)},render:function(){var e=this,t=this.props,n=t.history,r=t.location,a=t.routes,s=t.params,l=t.components,f=null;return l&&(f=l.reduceRight(function(t,u,c){if(null==u)return t;var l=a[c],f=(0,p[""default""])(l,s),h={history:n,location:r,params:s,route:l,routeParams:f,routes:a};if((0,d.isReactChildren)(t))h.children=t;else if(t)for(var y in t)Object.prototype.hasOwnProperty.call(t,y)&&(h[y]=t[y]);if(""object""===(""undefined""==typeof u?""undefined"":o(u))){var v={};for(var m in u)Object.prototype.hasOwnProperty.call(u,m)&&(v[m]=e.createElement(u[m],i({key:m},h)));return v}return e.createElement(u,h)},f)),null===f||f===!1||c[""default""].isValidElement(f)?void 0:(0,u[""default""])(!1),f}});t[""default""]=_,e.exports=t[""default""]},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}t.__esModule=!0,t.canUseMembrane=void 0;var o=n(14),i=(r(o),t.canUseMembrane=!1,function(e){return e});t[""default""]=i},function(e,t,n){""use strict"";var r=n(1),o=n(68),i=(n(172),n(312)),a=n(313),u=n(8),s={to:r.PropTypes.string.isRequired,containerId:r.PropTypes.string,activeClass:r.PropTypes.string,spy:r.PropTypes.bool,smooth:r.PropTypes.bool,offset:r.PropTypes.number,delay:r.PropTypes.number,isDynamic:r.PropTypes.bool,onClick:r.PropTypes.func,duration:r.PropTypes.oneOfType([r.PropTypes.number,r.PropTypes.func]),absolute:r.PropTypes.bool,onSetActive:r.PropTypes.func},c={Scroll:function(e,t){var n=t||a;return r.createClass({propTypes:s,getDefaultProps:function(){return{offset:0}},scrollTo:function(e,t){n.scrollTo(e,t)},handleClick:function(e){this.props.onClick&&this.props.onClick(e),e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),this.scrollTo(this.props.to,this.props)},spyHandler:function(e){var t=n.get(this.props.to);if(t){var r=t.getBoundingClientRect(),o=r.top+e,a=o+r.height,u=e-this.props.offset,s=this.props.to,c=u>=o&&u<=a,l=u<o||u>a,f=n.getActiveLink();l&&f===s?(n.setActiveLink(void 0),this.setState({active:!1})):c&&f!=s&&(n.setActiveLink(s),this.setState({active:!0}),this.props.onSetActive&&this.props.onSetActive(s),i.updateStates())}},componentDidMount:function(){var e=this.props.containerId,t=e?document.getElementById(e):document;if(i.isMounted(t)||i.mount(t),this.props.spy){var r=this.props.to,o=null,a=0,u=0;this._stateHandler=function(){n.getActiveLink()!=r&&this.setState({active:!1})}.bind(this),i.addStateHandler(this._stateHandler),this._spyHandler=function(e){var s=0;if(t.getBoundingClientRect){var c=t.getBoundingClientRect();s=c.top}if(!o||this.props.isDynamic){if(o=n.get(r),!o)return;var l=o.getBoundingClientRect();a=l.top-s+e,u=a+l.height}var f=e-this.props.offset,p=f>=Math.floor(a)&&f<=Math.floor(u),d=f<Math.floor(a)||f>Math.floor(u),h=n.getActiveLink();d&&h===r?(n.setActiveLink(void 0),this.setState({active:!1})):p&&h!=r&&(n.setActiveLink(r),this.setState({active:!0}),this.props.onSetActive&&this.props.onSetActive(r),i.updateStates())}.bind(this),i.addSpyHandler(this._spyHandler,t)}},componentWillUnmount:function(){i.unmount(this._stateHandler,this._spyHandler)},render:function(){var t="""";t=this.state&&this.state.active?((this.props.className||"""")+"" ""+(this.props.activeClass||""active"")).trim():this.props.className;var n=u({},this.props);for(var o in s)n.hasOwnProperty(o)&&delete n[o];return n.className=t,n.onClick=this.handleClick,r.createElement(e,n)}})},Element:function(e){return r.createClass({propTypes:{name:r.PropTypes.string,id:r.PropTypes.string},componentDidMount:function(){this.registerElems(this.props.name)},componentWillReceiveProps:function(e){this.props.name!==e.name&&this.registerElems(e.name)},componentWillUnmount:function(){a.unregister(this.props.name)},registerElems:function(e){var t=o.findDOMNode(this);a.register(e,t)},render:function(){return r.createElement(e,this.props)}})}};e.exports=c},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){if(!(e instanceof t))throw new TypeError(""Cannot call a class as a function"")}function a(e,t){if(!e)throw new ReferenceError(""this hasn't been initialised - super() hasn't been called"");return!t||""object""!=typeof t&&""function""!=typeof t?e:t}function u(e,t){if(""function""!=typeof t&&null!==t)throw new TypeError(""Super expression must either be null or a function, not ""+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,""__esModule"",{value:!0}),t.ListItemContent=t.listItemContentFactory=void 0;var s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,""value""in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=n(1),l=r(c),f=n(5),p=r(f),d=n(3),h=n(4),y=n(327),v=r(y),m=[""auto"",""normal"",""large""],g=function(e){var t=function(t){function n(){return i(this,n),a(this,(n.__proto__||Object.getPrototypeOf(n)).apply(this,arguments))}return u(n,t),s(n,[{key:""getType"",value:function(){var e=this.props,t=e.type,n=e.children,r=e.caption,o=e.legend,i=l[""default""].Children.count(n);[r,o].forEach(function(e){i+=e?1:0});var a=Math.min(i,m.length);return t||m[a]}},{key:""render"",value:function(){var t=this.props,n=t.children,r=t.caption,i=t.legend,a=t.theme,u=(0,p[""default""])(a.itemContentRoot,o({},a[this.getType()],a[this.getType()]));return l[""default""].createElement(""span"",{className:u},r&&l[""default""].createElement(e,{theme:a,primary:!0},r),i&&l[""default""].createElement(e,{theme:a},i),n)}}]),n}(c.Component);return t.propTypes={caption:c.PropTypes.oneOfType([c.PropTypes.string,c.PropTypes.node]),children:c.PropTypes.any,legend:c.PropTypes.string,theme:c.PropTypes.shape({itemContentRoot:c.PropTypes.string,large:c.PropTypes.string}),type:c.PropTypes.oneOf(m)},t},_=g(v[""default""]);t[""default""]=(0,d.themr)(h.LIST)(_),t.listItemContentFactory=g,t.ListItemContent=_},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}Object.defineProperty(t,""__esModule"",{value:!0});var o=n(607),i=r(o);t[""default""]=i[""default""]},function(e,t){""use strict"";function n(e,t){if(e===t)return!0;if(""object""!==(""undefined""==typeof e?""undefined"":r(e))||null===e||""object""!==(""undefined""==typeof t?""undefined"":r(t))||null===t)return!1;var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(var a=o.bind(t),u=0;u<n.length;u++)if(!a(n[u])||e[n[u]]!==t[n[u]])return!1;return!0}Object.defineProperty(t,""__esModule"",{value:!0});var r=""function""==typeof Symbol&&""symbol""==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&""function""==typeof Symbol&&e.constructor===Symbol?""symbol"":typeof e};t[""default""]=n;var o=Object.prototype.hasOwnProperty},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}t.__esModule=!0;var o=n(804),i=r(o),a=n(336),u=r(a),s=n(805),c=r(s);t.createAction=i[""default""],t.handleAction=u[""default""],t.handleActions=c[""default""]},function(e,t){""use strict"";function n(e,t){var n=e._reduxForm.sectionPrefix;return n?n+"".""+t:t}Object.defineProperty(t,""__esModule"",{value:!0}),t[""default""]=n},11,function(e,t,n){function r(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}var o=n(916),i=n(917),a=n(918),u=n(919),s=n(920);r.prototype.clear=o,r.prototype[""delete""]=i,r.prototype.get=a,r.prototype.has=u,r.prototype.set=s,e.exports=r},[974,23],function(e,t,n){function r(e,t){for(var n=e.length;n--;)if(o(e[n][0],t))return n;return-1}var o=n(71);e.exports=r},function(e,t,n){function r(e,t,n){""__proto__""==t&&o?o(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var o=n(353);e.exports=r},[987,914],[1e3,44],function(e,t,n){function r(e){return null!=e&&i(e.length)&&!o(e)}var o=n(201),i=n(202);e.exports=r},function(e,t,n){function r(e){return""symbol""==typeof e||i(e)&&o(e)==a}var o=n(60),i=n(45),a=""[object Symbol]"";e.exports=r},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}Object.defineProperty(t,""__esModule"",{value:!0}),t[""default""]=void 0;var o=n(390),i=r(o);t[""default""]=i[""default""]},function(e,t,n){""use strict"";function r(e){return i.scroller.scrollTo(e,a)}function o(){return i.animateScroll.scrollToTop(a)}Object.defineProperty(t,""__esModule"",{value:!0}),t.scrollTo=r,t.scrollTop=o;var i=n(310),a={duration:700,delay:300,smooth:!0,offset:0,isDynamic:!0}},function(e,t){""use strict"";function n(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}function r(e,t){if(n(e,t))return!0;if(""object""!=typeof e||null===e||""object""!=typeof t||null===t)return!1;var r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;for(var a=0;a<r.length;a++)if(!o.call(t,r[a])||!n(e[r[a]],t[r[a]]))return!1;return!0}var o=Object.prototype.hasOwnProperty;e.exports=r},function(e,t){""use strict"";function n(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent(""on""+t,n)}function r(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent(""on""+t,n)}function o(){return window.location.href.split(""#"")[1]||""""}function i(e){window.location.replace(window.location.pathname+window.location.search+""#""+e)}function a(){return window.location.pathname+window.location.search+window.location.hash}function u(e){e&&window.history.go(e)}function s(e,t){t(window.confirm(e))}function c(){var e=navigator.userAgent;return(e.indexOf(""Android 2."")===-1&&e.indexOf(""Android 4.0"")===-1||e.indexOf(""Mobile Safari"")===-1||e.indexOf(""Chrome"")!==-1||e.indexOf(""Windows Phone"")!==-1)&&window.history&&""pushState""in window.history}function l(){var e=navigator.userAgent;return e.indexOf(""Firefox"")===-1}t.__esModule=!0,t.addEventListener=n,t.removeEventListener=r,t.getHashPath=o,t.replaceHashPath=i,t.getWindowPath=a,t.go=u,t.getUserConfirmation=s,t.supportsHistory=c,t.supportsGoWithoutReloadUsingHash=l},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}function o(e,t){return function(){return e.apply(this,arguments)}}t.__esModule=!0;var i=n(25);r(i),t[""default""]=o,e.exports=t[""default""]},function(e,t,n){""use strict"";function r(e){return e&&e.__esModule?e:{""default"":e}}function o(e,t,n){var r=e(t,n);e.length<2&&n(r)}t.__esModule=!0;var i=n(25);r(i),t[""default""]=o,e.exports=t[""default""]},function(e,t){function n(e){return!!e&&(""object""==typeof e||""function""==typeof e)&&""function""==typeof e.then}e.exports=n},function(e,t){e.exports=[{title:""FCC Leaders"",codeURL:""https://github.com/natac13/Camper-Leaderboard-FCC"",demoURL:""http://natac13.github.io/Camper-Leaderboard-FCC/"",description:"""",image:""FCCLeaderBoard.png""},{title:""Url Shortener"",codeURL:""https://github.com/natac13/url-shortener"",demoURL:""https://hidden-brushlands-29088.herokuapp.com/"",description:"""",image:""UrlShortener.png""},{title:""Tic Tac Toe"",codeURL:""https://github.com/natac13/Tic-Tac-Toe-Game"",demoURL:""http://natac13.github.io/Tic-Tac-Toe-Game/"",description:""Built with <a href='https://facebook.github.io/react/'>React</a> and <a href='https://github.com/rackt/redux'>Redux</a> which I find incredible to work with. The build process used Webpack to bundle everything up. This was my last project before I was able to the <a href='http://www.freecodecamp.com/natac13/front-end-certification'>Front-end Certificate</a> from Free Code Camp. The AI was the tricky part in the app. I found a <a href='http://stackoverflow.com/questions/125557/what-algorithm-for-a-tic-tac-toe-game-can-i-use-to-determine-the-best-move-for'>stackoverflow.com</a> answer which laid out 8 rules to follow to never lose at Tic Tac Toe. I turned these into <a href='https://github.com/natac13/Tic-Tac-Toe-Game/blob/gh-pages/app/utils/compTurn.js#L35-L42'>functions</a> (<a href='https://github.com/natac13/Tic-Tac-Toe-Game/tree/gh-pages/app/utils/AI'>defined here</a>) which will either return the square for the computer to occupy or false so that the next 'rule' function is called. I will admit these were changed a few times after sending the game out for testing in the local developer community. I was even fortunate to get a video from one of the testers showing me how he was able to beat the game. However as it stands none of original testers can beat my implementation. <em>Can you?</em>"",image:""TicTacToe.png"",alt:""Tic Tac Toe Game""},{title:""Markdown Prev."",codeURL:""https://github.com/natac13/Markdown-Previewer-React"",demoURL:""http://natac13.github.io/Markdown-Previewer-React/"",description:""Free Code Camp's first <a href='https://facebook.github.io/react/'>React</a> + <a href='http://sass-lang.com/'>Sass</a> application, as well as the tutorial project on the React site. A simple project to get introduced to React. However this was not my first. After leading about CSS modules and how to structure the components in there own folders, this project was a nice way to dive into those best practices. I was able to lead about using <a href='https://github.com/commitizen/cz-cli'>commitizen</a> to write better commits as well as getting more comfortable with a more solid workflow (deploying with <a href='https://github.com/tschaub/gh-pages'>gh-pages</a>, dev vs prod webpack config, etc)."",image:""MarkdownPreviewer.png"",alt:""Markdown Previewer""},{title:""Wiki Search"",codeURL:""https://github.com/natac13/WikiSearch"",demoURL:"""",description:""This application is using Wikipedia's api system to do a search through their records. This was my first crack at a <a href='https://facebook.github.io/react/'>React.js</a> application. I was able to simplify my build process by learning <a href='https://webpack.github.io/'>Webpack</a>; which handled ES6 transpiling, as well as the JSX transformation. This app is running off a node back-end which allows me to run it on heroku. After getting introduced to Webpack via this project, I have now adapted it to run my entire build process. The config file is quite different from the streams and <code>.pipe()</code> commands used in <a href='http://gulpjs.com/'>gulp</a>, but it is a way that has me focused on writing code and not setting up the environment."",image:""wikiSearch.png"",alt:""Wikipedia Mock Search Engine""},{title:""Simon Game"",codeURL:""http://github.com/natac13/simon-game"",demoURL:"""",description:""My Simon Game project. For this project I used the module pattern with ES6 <code>import</code> to separate the JavaScript files which really helped me when it came to testing with <a href='http://jasmine.github.io/'>Jasmine</a>. Learning that I can write my test files in ES6 and not have to transpile to ES5. The trouble with this project came when I was thinking of how to 'listen' for the users click and then test that to the played sequence. At first I thought of using a <code>setTimeout()</code> but could not think of where to go from there. It came to me to just run a <code>test()</code> function after the user clicks a panel and compare the two arrays. If they differ then there is a fail. On the other hand if they are the same length and match then advance to next level."",image:""simon_game.png"",alt:""Simon Game""},{title:""FCC Latest News"",codeURL:""https://github.com/natac13/FCC-news-feed"",demoURL:"""",description:""The latest news stories posted to Free Code Camp by the campers. The Free Code Camp community is <span class='bold'>extremely</span> passionate about sharing resources such as blog posts, free assets for a website, and other tutorials that help aid in the learning process. This app displays the news stories with all the relevant information from the FCC api. There are <span class='bold'>4</span> <a href='https://angularjs.org/'>AngularJS</a> filters that a user can use to display the list in different ways: (by date, author, how many likes). Throughout this project I was able to get an understanding of testing <a href='https://angularjs.org/'>AngularJS</a> controllers and filters with <a href='http://jasmine.github.io/'>Jasmine</a> being run by <a href='https://github.com/karma-runner/karma-jasmine'>Karma</a>."","
52917d1fdc4e92cf8908fe628971c09a22d4ced3,2120946,"1518363,comment,1517931,1517931,0,0,gtani,,,""There's been some long, impassioned threads here (YC), stackoverflow, reddit, Lambda-ultimate.  I invite you to dig deeper.  You can't summarize a language's spec, implementations, libraries, community and tool support very well in a 2000  word blog post.<p><a href=""""http://searchyc.com/clojure?sort=by_points"""" rel=""""nofollow"""">http://searchyc.com/clojure?sort=by_points</a><p><a href=""""http://groovyguts.wordpress.com/2010/01/08/10-reasons-to-learn-clojure-or-any-other-lisp/"""" rel=""""nofollow"""">http://groovyguts.wordpress.com/2010/01/08/10-reasons-to-lea...</a><p><a href=""""http://stackoverflow.com/questions/2120946/what-kind-of-applications-are-appropriate-for-clojure"""" rel=""""nofollow"""">http://stackoverflow.com/questions/2120946/what-kind-of-appl...</a><p>---------------<p><a href=""""http://news.ycombinator.com/item?id=1072822"""" rel=""""nofollow"""">http://news.ycombinator.com/item?id=1072822</a><p><a href=""""http://news.ycombinator.com/item?id=1074136"""" rel=""""nofollow"""">http://news.ycombinator.com/item?id=1074136</a><p><a href=""""http://news.ycombinator.com/item?id=1089139"""" rel=""""nofollow"""">http://news.ycombinator.com/item?id=1089139</a><p><a href=""""http://news.ycombinator.com/item?id=1167820"""" rel=""""nofollow"""">http://news.ycombinator.com/item?id=1167820</a>"",1279213515"
f7996e55b69f3588739eb4b3c4f5f4ef69f2730e,1633828,"return thirdLevelKey&&(!ev.keyCode||ev.keyCode>47);}function matchColor(r1,g1,b1){var hash=r1<<16|g1<<8|b1;if(matchColor._cache[hash]!=null){return matchColor._cache[hash];}var ldiff=Infinity,li=-1,i=0,c,r2,g2,b2,diff;for(;i<Terminal.vcolors.length;i++){c=Terminal.vcolors[i];r2=c[0];g2=c[1];b2=c[2];diff=matchColor.distance(r1,g1,b1,r2,g2,b2);if(diff===0){li=i;break;}if(diff<ldiff){ldiff=diff;li=i;}}return matchColor._cache[hash]=li;}matchColor._cache={};// http://stackoverflow.com/questions/1633828"
69367a7be1caaacf60f4ee5063582bcafe245a7d,3330919,        // http://stackoverflow.com/a/3330919)
4387dcb660b4224cf26f97ac79d48d34405c7769,7016686,"	""Adapted from https://stackoverflow.com/a/7016686/424245"""
3f6f6999db30e705e066f554fa0e3d685a2e4a6e,13042353,- Question sur SO : '[Haskell a-t-il une évaluation paresseuse ?](http://stackoverflow.com/questions/13042353/does-haskell-have-tail-recursive-optimization)'
dc31ae6a7e3727463dfd316bd8623ca192d4d061,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
09be89531522eb9f32cdad4af7e5e4aa767aa80f,766809,			// http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
cd82c8d20e241be952ac6c4225fcc16e0b2a203a,19107301,http://stackoverflow.com/questions/19107301/gstreamer-pipeline-for-decklinksrc-video-capture-card-with-udpsrc-and-udpsink-us
4f96fd74633bb1f4979d7cad4b09ffe451e8c08c,31832326,// Implementation from https://stackoverflow.com/a/31832326
1b8d5137d6de16edeeaa1b7bf2335d7cebe29fa3,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
1ebaa9e8ca43fea856e871cc91a95910fe04b12f,3758880,"<div class=""highlighter-rouge""><div class=""highlight""><pre class=""highlight""><code>// read more from here: http://stackoverflow.com/a/3758880/2600042"
33535cfbea9c11bd45dc10b582eb77c6c0361f2c,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
53b88bb815fc186359770cfb86ed42fbc9f4fc16,472729," * http://stackoverflow.com/a/472729)  However, setting img[src] does normalize the URL."
825c4f9c3682d275df36644012bfed207e71a7ce,14415881,"[{""source"":""theatlanticcities.com"",""comments"":71,""date"":1398815068,""link_text"":""Running Out of Power in a Tesla on the Side of a Highway"",""points"":43,""submitter"":""yiransheng"",""link"":""http://www.theatlanticcities.com/technology/2014/04/what-running-out-power-tesla-side-highway-taught-me-about-road-trip-tomorrow/8978/"",""id"":""7670484"",""homepage"":false},{""link_text"":""A Motion-Sensing Keyboard"",""link"":""http://research.microsoft.com/en-us/projects/typehoverswipe/"",""source"":""microsoft.com"",""points"":383,""comments"":133,""submitter"":""nivla"",""date"":1398813845,""id"":""7670521"",""homepage"":false},{""link_text"":""The Longest Conveyor Belt"",""link"":""http://www.conveyorbeltguide.com/LongestBelt.html"",""source"":""conveyorbeltguide.com"",""points"":195,""comments"":69,""submitter"":""NewHatMatt"",""date"":1398813387,""id"":""7670441"",""homepage"":false},{""source"":""arghbox.wordpress.com"",""comments"":0,""date"":1398812776,""link_text"":""Python Programming with Minecraft Pi: Early Draft"",""points"":12,""submitter"":""ternaryoperator"",""link"":""http://arghbox.wordpress.com/2013/06/13/programming-minecraft-pi-with-python-early-draft/"",""id"":""7670172"",""homepage"":false},{""source"":""grnh.se"",""comments"":null,""date"":1398812776,""link_text"":""Disqus is hiring a Site Reliability Engineer (DevOps) – SF or Remote"",""points"":null,""submitter"":"""",""link"":""http://grnh.se/2xmeaj"",""id"":""71e55cdb7bbfaaff43ebb81da355befa7efa7933"",""homepage"":false},{""link_text"":""CSS vs. JS Animation: Which is Faster?"",""link"":""http://davidwalsh.name/css-js-animation"",""source"":""davidwalsh.name"",""points"":66,""comments"":17,""submitter"":""ArtDev"",""date"":1398811558,""id"":""7670025"",""homepage"":false},{""source"":""sfgate.com"",""comments"":55,""date"":1398808962,""link_text"":""Hacker taps into baby monitor, shouts at sleeping infant"",""points"":50,""submitter"":""timr"",""link"":""http://blog.sfgate.com/sfmoms/2014/04/29/hacker-taps-into-baby-monitor-shouts-at-sleeping-infant/"",""id"":""7670143"",""homepage"":false},{""source"":""stanford.edu"",""comments"":89,""date"":1398806643,""link_text"":""Stanford study finds walking improves creativity"",""points"":223,""submitter"":""veesahni"",""link"":""http://news.stanford.edu/news/2014/april/walking-vs-sitting-042414.html?hn"",""id"":""7669818"",""homepage"":false},{""source"":""twitterinc.com"",""comments"":5,""date"":1398806489,""link_text"":""Twitter Reports First Quarter 2014 Results"",""points"":8,""submitter"":""mycodebreaks"",""link"":""https://investor.twitterinc.com/releasedetail.cfm?ReleaseID=843245"",""id"":""7669619"",""homepage"":false},{""source"":""nature.com"",""comments"":13,""date"":1398805718,""link_text"":""Death-penalty analysis reveals extent of wrongful convictions"",""points"":12,""submitter"":""gautamnarula"",""link"":""http://www.nature.com/news/death-penalty-analysis-reveals-extent-of-wrongful-convictions-1.15114"",""id"":""7669756"",""homepage"":false},{""source"":""code-experience.com"",""comments"":78,""date"":1398805248,""link_text"":""Why you might not need MVC with React.js"",""points"":128,""submitter"":""peterhunt"",""link"":""http://www.code-experience.com/why-you-might-not-need-mvc-with-reactjs/"",""id"":""7669836"",""homepage"":false},{""link_text"":""Memory inside Linux containers"",""link"":""http://fabiokung.com/2014/03/13/memory-inside-linux-containers/"",""source"":""fabiokung.com"",""points"":9,""comments"":0,""submitter"":""bkudria"",""date"":1398805094,""dead"":""true"",""id"":""7669783"",""homepage"":false},{""source"":""strongtalk.org"",""comments"":13,""date"":1398803241,""link_text"":""Strongtalk: A High-Performance Smalltalk With An Optional Type System"",""points"":26,""submitter"":""luu"",""link"":""http://strongtalk.org/index.html"",""id"":""7669538"",""homepage"":false},{""link_text"":""Varnish 4"",""link"":""https://www.varnish-cache.org/content/varnish-cache-400"",""source"":""varnish-cache.org"",""points"":52,""comments"":9,""submitter"":""neic"",""date"":1398802473,""id"":""7669536"",""homepage"":false},{""source"":""slate.com"",""comments"":64,""date"":1398802318,""link_text"":""A new study reveals that men are often the victims of sexual assault"",""points"":90,""submitter"":""tokenadult"",""link"":""http://www.slate.com/articles/double_x/doublex/2014/04/male_rape_in_america_a_new_study_reveals_that_men_are_sexually_assaulted.html"",""id"":""7668928"",""homepage"":false},{""source"":""reuters.com"",""comments"":0,""date"":1398802009,""link_text"":""European Union moves to end smartphone patent wars"",""points"":9,""submitter"":""bane"",""link"":""http://in.reuters.com/article/2014/04/29/us-eu-competition-motorola-idINBREA3S09220140429"",""id"":""7669480"",""homepage"":false},{""link_text"":""Tails 1.0 is out"",""link"":""https://tails.boum.org/news/version_1.0/index.en.html"",""source"":""boum.org"",""points"":221,""comments"":39,""submitter"":""conductor"",""date"":1398801394,""id"":""7669449"",""homepage"":false},{""source"":""github.com"",""comments"":19,""date"":1398801087,""link_text"":""Python Search – eval(raw_input())"",""points"":14,""submitter"":""Nurdok"",""link"":""https://github.com/search?p=8&q=%22eval%28raw_input%28%29%29%22&ref=searchresults&type=Code"",""id"":""7669506"",""homepage"":false},{""link_text"":""Linode Freemont down from DDoS"",""link"":""http://status.linode.com/?notnew"",""source"":""linode.com"",""points"":14,""comments"":7,""submitter"":""DanBlake"",""date"":1398800932,""id"":""7669434"",""homepage"":false},{""link_text"":""What's New in Mercurial 3.0"",""link"":""http://hglabhq.com/blog/2014/4/29/what-s-new-in-mercurial-3-0"",""source"":""hglabhq.com"",""points"":209,""comments"":115,""submitter"":""anton_gogolev"",""date"":1398800318,""id"":""7669436"",""homepage"":false},{""source"":""johndcook.com"",""comments"":69,""date"":1398798327,""link_text"":""Circle of fifths and roots of two"",""points"":80,""submitter"":""ColinWright"",""link"":""http://www.johndcook.com/blog/2009/09/30/perfect-fifths-equal-temperament/"",""id"":""7668898"",""homepage"":false},{""link_text"":""Joystick-like Input Method for Smartwatches"",""link"":""http://www.gierad.com/projects/smartwatch5dof/"",""source"":""gierad.com"",""points"":169,""comments"":32,""submitter"":""druidsbane"",""date"":1398798018,""id"":""7669086"",""homepage"":false},{""source"":""cryptomaths.com"",""comments"":2,""date"":1398797559,""link_text"":""Benchmarking Symmetric Crypto on the Apple A7"",""points"":29,""submitter"":""moonboots"",""link"":""http://cryptomaths.com/2014/04/29/benchmarking-symmetric-crypto-on-the-apple-a7/"",""id"":""7669036"",""homepage"":false},{""link_text"":""Rabbit Proto: Open source electronic prototyping for 3D printers"",""link"":""http://www.rabbitproto.com/"",""source"":""rabbitproto.com"",""points"":17,""comments"":4,""submitter"":""lawl"",""date"":1398797255,""id"":""7668770"",""homepage"":false},{""source"":""sciencedirect.com"",""comments"":5,""date"":1398796624,""link_text"":""The Human Amygdala and the Induction and Experience of Fear"",""points"":19,""submitter"":""gkya"",""link"":""http://www.sciencedirect.com/science/article/pii/S0960982210015083"",""id"":""7668620"",""homepage"":false},{""link_text"":""An interactive explanation of quadtrees"",""link"":""http://jimkang.com/quadtreevis/"",""source"":""jimkang.com"",""points"":84,""comments"":19,""submitter"":""mbrubeck"",""date"":1398796157,""id"":""7668628"",""homepage"":false},{""link_text"":""Square Pickup"",""link"":""https://squareup.com/pickup"",""source"":""squareup.com"",""points"":101,""comments"":42,""submitter"":""mikegreenspan"",""date"":1398795384,""id"":""7668820"",""homepage"":false},{""source"":""designcult.org"",""comments"":61,""date"":1398795384,""link_text"":""The origin of “log in” (2011)"",""points"":108,""submitter"":""pguzmang"",""link"":""http://www.designcult.org/2011/08/why-do-we-call-in-logging-in.html"",""id"":""7668653"",""homepage"":false},{""source"":""statwing.com"",""comments"":11,""date"":1398794661,""link_text"":""Visualize any public CSV on GitHub in a few clicks"",""points"":59,""submitter"":""glaugh"",""link"":""http://blog.statwing.com/visualize-any-public-csv-on-github-in-a-few-clicks/"",""id"":""7668683"",""homepage"":false},{""source"":""heroku.com"",""comments"":87,""date"":1398794045,""link_text"":""Introducing the new PHP on Heroku"",""points"":90,""submitter"":""fomb"",""link"":""https://blog.heroku.com/archives/2014/4/29/introducing_the_new_php_on_heroku"",""id"":""7668525"",""homepage"":false},{""source"":""heroku.com"",""comments"":19,""date"":1398792941,""link_text"":""PHP – a look back, a look forward"",""points"":21,""submitter"":""craigkerstiens"",""link"":""https://blog.heroku.com/archives/2014/4/29/php_a_look_back_a_look_forward"",""id"":""7668423"",""homepage"":false},{""link_text"":""2048 in Idris"",""link"":""https://github.com/KesterTong/idris2048/"",""source"":""github.com"",""points"":75,""comments"":11,""submitter"":""sctb"",""date"":1398792481,""id"":""7668540"",""homepage"":false},{""link_text"":""Cakebrew: The Mac App for Homebrew"",""link"":""http://www.cakebrew.com/"",""source"":""cakebrew.com"",""points"":280,""comments"":142,""submitter"":""ingve"",""date"":1398792328,""id"":""7668383"",""homepage"":false},{""source"":""nature.com"",""comments"":19,""date"":1398792021,""link_text"":""The Y chromosome is not vanishing"",""points"":16,""submitter"":""pwrfid"",""link"":""http://www.nature.com/news/reprieve-for-men-y-chromosome-is-not-vanishing-1.15103?WT.ec_id=NEWS-20140429"",""id"":""7668427"",""homepage"":false},{""source"":""phys.org"",""comments"":44,""date"":1398791869,""link_text"":""Mathematicians trace source of Rogers-Ramanujan identities, find algebraic gold"",""points"":122,""submitter"":""zoowar"",""link"":""http://phys.org/news/2014-04-mathematicians-source-rogers-ramanujan-identities-algebraic.html"",""id"":""7668395"",""homepage"":false},{""source"":""vagrantup.com"",""comments"":59,""date"":1398791561,""link_text"":""Vagrant Feature Preview: Docker-Based Development Environments"",""points"":299,""submitter"":""BummerCloud"",""link"":""http://www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html"",""id"":""7668349"",""homepage"":false},{""source"":""travelbythenumbers.com"",""comments"":0,""date"":1398791254,""link_text"":""Clustering the Airports"",""points"":5,""submitter"":""ariannahsimpson"",""link"":""http://travelbythenumbers.com/2014/04/25/clustering-the-airports/"",""id"":""7668338"",""homepage"":false},{""source"":""facebook.com"",""comments"":21,""date"":1398791254,""link_text"":""The strange truth about fiction"",""points"":52,""submitter"":""friggeri"",""link"":""https://www.facebook.com/notes/facebook-data-science/the-strange-truth-about-fiction/10152215561458859"",""id"":""7668168"",""homepage"":false},{""source"":""kickstarter.com"",""comments"":14,""date"":1398790793,""link_text"":""SCiO: A Pocket Molecular Sensor"",""points"":21,""submitter"":""klintcho"",""link"":""https://www.kickstarter.com/projects/903107259/scio-your-sixth-sense-a-pocket-molecular-sensor-fo"",""id"":""7668156"",""homepage"":false},{""link_text"":""RIP TDD"",""link"":""https://www.facebook.com/notes/kent-beck/rip-tdd/750840194948847"",""source"":""facebook.com"",""points"":109,""comments"":91,""submitter"":""platz"",""date"":1398790793,""id"":""7667988"",""homepage"":false},{""source"":""nytimes.com"",""comments"":18,""date"":1398790481,""link_text"":""Big Texas Utility Files for Bankruptcy"",""points"":13,""submitter"":""iamsalman"",""link"":""http://dealbook.nytimes.com/2014/04/29/big-texas-utility-files-for-bankruptcy"",""id"":""7667969"",""homepage"":false},{""link_text"":""Horizontal gene transfer"",""link"":""http://en.wikipedia.org/wiki/Horizontal_gene_transfer"",""source"":""wikipedia.org"",""points"":null,""comments"":null,""submitter"":""bra-ket"",""date"":1398790177,""id"":""7668020"",""homepage"":false},{""source"":""strongloop.com"",""comments"":5,""date"":1398789870,""link_text"":""Comparing Express, Restify, hapi and LoopBack for building RESTful APIs"",""points"":6,""submitter"":""alexgorbatchev"",""link"":""http://strongloop.com/strongblog/compare-express-restify-hapi-loopback/"",""id"":""7668051"",""homepage"":false},{""source"":""cnn.com"",""comments"":1,""date"":1398789718,""link_text"":""Caviar (YC S11), backed by Winklevoss twins, raises $15M"",""points"":5,""submitter"":""jwang815"",""link"":""http://tech.fortune.cnn.com/2014/04/29/caviar-backed-by-winklevoss-twins-raises-15-million/?section=magazines_fortune"",""id"":""7667704"",""homepage"":false},{""source"":""theguardian.com"",""comments"":0,""date"":1398789565,""link_text"":""EU moves to end smartphone patent wars in landmark ruling"",""points"":10,""submitter"":""AndrewDucker"",""link"":""http://www.theguardian.com/technology/2014/apr/29/eu-end-smartphone-patent-wars-landmark-ruling"",""id"":""7667818"",""homepage"":false},{""source"":""pastebin.com"",""comments"":139,""date"":1398789412,""link_text"":""Google AdSense leak?"",""points"":364,""submitter"":""rmujica"",""link"":""http://pastebin.com/qh6Tta3h"",""id"":""7667976"",""homepage"":false},{""link_text"":""Programming Sucks"",""link"":""http://stilldrinking.org/programming-sucks"",""source"":""stilldrinking.org"",""points"":220,""comments"":27,""submitter"":""sramsay"",""date"":1398788182,""id"":""7667825"",""homepage"":false},{""link_text"":""Baremetrics for Buffer"",""link"":""https://buffer.baremetrics.io/dashboard"",""source"":""baremetrics.io"",""points"":144,""comments"":53,""submitter"":""zrail"",""date"":1398787876,""id"":""7667901"",""homepage"":false},{""source"":""unity3d.com"",""comments"":23,""date"":1398787722,""link_text"":""On the future of Web publishing in Unity"",""points"":50,""submitter"":""robin_reala"",""link"":""http://blogs.unity3d.com/2014/04/29/on-the-future-of-web-publishing-in-unity/"",""id"":""7667345"",""homepage"":false},{""source"":""tech.pro"",""comments"":23,""date"":1398787415,""link_text"":""Functional JavaScript, Part 4: Function Currying"",""points"":21,""submitter"":""lrichardson"",""link"":""http://tech.pro/tutorial/2011/functional-javascript-part-4-function-currying"",""id"":""7667873"",""homepage"":false},{""source"":""sailthru.com"",""comments"":0,""date"":1398787415,""link_text"":""Product Prioritization for Startups"",""points"":6,""submitter"":""dannyrosen"",""link"":""https://www.sailthru.com/blog/product-prioritization-startups-perspective/"",""id"":""7667576"",""homepage"":false},{""link_text"":""The Avail Programming Language"",""link"":""http://availlang.org/"",""source"":""availlang.org"",""points"":67,""comments"":18,""submitter"":""jamesbritt"",""date"":1398786948,""id"":""7667706"",""homepage"":false},{""link_text"":""The Common Mistakes of a Marketer"",""link"":""http://blog.sqwiggle.com/common-mistakes-marketer/"",""source"":""sqwiggle.com"",""points"":5,""comments"":2,""submitter"":""bleachtree"",""date"":1398785873,""id"":""7667442"",""homepage"":false},{""link_text"":""Go, robots and refactoring"",""link"":""http://matt.aimonetti.net/posts/2014/04/28/refactoring-go-code/"",""source"":""aimonetti.net"",""points"":80,""comments"":35,""submitter"":""mattetti"",""date"":1398785552,""id"":""7667554"",""homepage"":false},{""link_text"":""Introducing the Canary Release Channel"",""link"":""http://blog.aerofs.com/introducing-the-canary-release-channel/"",""source"":""aerofs.com"",""points"":13,""comments"":4,""submitter"":""yurisagalov"",""date"":1398785245,""id"":""7667588"",""homepage"":false},{""link_text"":""Codefront: The Best Front-end Developer Conference in Europe "",""link"":""http://codefront.io/#"",""source"":""codefront.io"",""points"":5,""comments"":6,""submitter"":""sdogruyol"",""date"":1398784787,""id"":""7667322"",""homepage"":false},{""link_text"":""How to make your own icon fonts"",""link"":""http://fontcombiner.com/docs/customiconfonts"",""source"":""fontcombiner.com"",""points"":3,""comments"":0,""submitter"":""emily_b"",""date"":1398784178,""id"":""7667390"",""homepage"":false},{""source"":""nixos.org"",""comments"":29,""date"":1398783107,""link_text"":""The Nix project – Atomic upgrades, rollbacks and multi-user package management"",""points"":75,""submitter"":""diggan"",""link"":""http://nixos.org/"",""id"":""7667123"",""homepage"":false},{""source"":""insidesources.com"",""comments"":159,""date"":1398781890,""link_text"":""Outbox vs. USPS: How the Post Office Killed Digital Mail "",""points"":250,""submitter"":""ilamont"",""link"":""http://www.insidesources.com/outbox-vs-usps-how-the-post-office-killed-digital-mail/"",""id"":""7667068"",""homepage"":false},{""link_text"":""Lemonade Startup – A satire simulator game"",""link"":""http://lemonstartup.com"",""source"":""lemonstartup.com"",""points"":52,""comments"":33,""submitter"":""kylnew"",""date"":1398780973,""id"":""7666850"",""homepage"":false},{""source"":""theoldreader.com"",""comments"":57,""date"":1398780058,""link_text"":""Let’s Keep the Internet Dumb"",""points"":59,""submitter"":""sdfjkl"",""link"":""http://blog.theoldreader.com/post/84124784954/lets-keep-the-internet-dumb"",""id"":""7666873"",""homepage"":false},{""source"":""realpython.com"",""comments"":8,""date"":1398779750,""link_text"":""Flask by Example – Part 2 – Postgres, SQLAlchemy, and Alembic"",""points"":33,""submitter"":""mjhea0"",""link"":""http://www.realpython.com/blog/flask-by-example-part-2-postgres-sqlalchemy-and-alembic/#.U1-hunzipp8.hackernews"",""id"":""7666608"",""homepage"":false},{""source"":""heinemeierhansson.com"",""comments"":152,""date"":1398779292,""link_text"":""Test-induced design damage"",""points"":225,""submitter"":""petercooper"",""link"":""http://david.heinemeierhansson.com/2014/test-induced-design-damage.html"",""id"":""7666866"",""homepage"":false},{""link_text"":""Show HN: A socially curated startup job board"",""link"":""http://startupjob.org"",""source"":""startupjob.org"",""points"":59,""comments"":42,""submitter"":""efounders"",""date"":1398778680,""id"":""7666761"",""homepage"":false},{""source"":""hut8labs.com"",""comments"":14,""date"":1398778072,""link_text"":""Speeding Up Your Engineering Org, Part I: Beyond the Cost Center Mentality"",""points"":51,""submitter"":""ojrac"",""link"":""http://blog.hut8labs.com/speeding-up-your-eng-org-part-i.html"",""id"":""7666756"",""homepage"":false},{""link_text"":""The Physics of Spider-Man’s Webs"",""link"":""http://www.wired.com/2014/04/the-physics-of-spider-mans-webs/"",""source"":""wired.com"",""points"":29,""comments"":23,""submitter"":""bjansn"",""date"":1398777918,""id"":""7666574"",""homepage"":false},{""source"":""slatestarcodex.com"",""comments"":74,""date"":1398777462,""link_text"":""The Control Group Is Out of Control"",""points"":161,""submitter"":""nbouscal"",""link"":""http://slatestarcodex.com/2014/04/28/the-control-group-is-out-of-control/"",""id"":""7666575"",""homepage"":false},{""link_text"":""Firefox 29"",""link"":""http://www.firefox.com"",""source"":""firefox.com"",""points"":546,""comments"":498,""submitter"":""epaga"",""date"":1398777308,""id"":""7666688"",""homepage"":false},{""source"":""stackoverflow.com"",""comments"":39,""date"":1398776078,""link_text"":""How to pair socks from a pile efficiently?"",""points"":44,""submitter"":""arono"",""link"":""http://stackoverflow.com/questions/14415881/how-to-pair-socks-from-a-pile-efficiently"",""id"":""7666391"",""homepage"":false},{""comments"":null,""link_text"":""Stealth YC W14 FinTech company is hiring Machine Learning experts"",""points"":null,""date"":1398775620,""submitter"":"""",""link"":""http://news.ycombinator.com/item?id=7666519"",""id"":""7666519"",""homepage"":false},{""source"":""nytimes.com"",""comments"":110,""date"":1398775620,""link_text"":""Divide Your Rent Fairly"",""points"":218,""submitter"":""wallflower"",""link"":""http://www.nytimes.com/interactive/2014/science/rent-division-calculator.html?_r=0"",""id"":""7666501"",""homepage"":false},{""source"":""time.com"",""comments"":61,""date"":1398775620,""link_text"":""Fifty Years of BASIC"",""points"":63,""submitter"":""srikar"",""link"":""http://time.com/69316/basic/"",""id"":""7666365"",""homepage"":false},{""link_text"":""Ubuntu 14.04 LTS: Why you should not use it, at all"",""link"":""https://tim.siosm.fr/blog/2014/04/25/why-not-ubuntu-14.04-lts/"",""source"":""siosm.fr"",""points"":18,""comments"":21,""submitter"":""chli"",""date"":1398775316,""id"":""7666217"",""homepage"":false},{""link_text"":""Android betrays tethering data"",""link"":""http://danielpocock.com/android-betrays-tethering-data"",""source"":""danielpocock.com"",""points"":114,""comments"":103,""submitter"":""davidgerard"",""date"":1398773790,""id"":""7666295"",""homepage"":false},{""link_text"":""Open Sourcing super expensive proprietary software"",""link"":""http://www.usethetree.com"",""source"":""usethetree.com"",""points"":5,""comments"":13,""submitter"":""mqsiuser"",""date"":1398773790,""id"":""7666258"",""homepage"":false},{""link_text"":""New MacBook Air Released – $100 Cheaper"",""link"":""https://www.apple.com/macbook-air/specs.html"",""source"":""apple.com"",""points"":49,""comments"":96,""submitter"":""nitinag"",""date"":1398773636,""id"":""7666339"",""homepage"":false},{""link_text"":""Show HN: Open source enterprise mobile SDK – Mowbly"",""link"":""https://github.com/teammowbly/Mowbly-Mobile-SDK"",""source"":""github.com"",""points"":12,""comments"":5,""submitter"":""aravind_b"",""date"":1398771945,""id"":""7666238"",""homepage"":false},{""source"":""grepsr.com"",""comments"":5,""date"":1398770426,""link_text"":""Web Crawling: Why is Service a Better Option than Software?"",""points"":7,""submitter"":""grepsr"",""link"":""http://www.grepsr.com/blog/web-crawling-why-can-service-be-a-better-option-than-software/"",""id"":""7666150"",""homepage"":false},{""link_text"":""Announcing the MIT Bitcoin Project"",""link"":""http://bitcoin.mit.edu/announcing-the-mit-bitcoin-project/"",""source"":""mit.edu"",""points"":295,""comments"":137,""submitter"":""jordn"",""date"":1398770120,""id"":""7666034"",""homepage"":false},{""link_text"":""Show HN: Turn sketches on paper into app prototypes"",""link"":""https://marvelapp.com/iphone/"",""source"":""marvelapp.com"",""points"":194,""comments"":74,""submitter"":""muratmutlu"",""date"":1398769814,""id"":""7666102"",""homepage"":false},{""source"":""lokku.github.io"",""comments"":3,""date"":1398765107,""link_text"":""Fully customizable jquery sliders, Single/Double handles, Touch-enabled,"",""points"":17,""submitter"":""freyfogle"",""link"":""http://lokku.github.io/jquery-nstslider/"",""id"":""7665894"",""homepage"":false},{""link_text"":""GoCardless (YC S11) is hiring developers in London"",""link"":""http://news.ycombinator.com/item?id=7665878"",""points"":null,""comments"":null,""submitter"":"""",""date"":1398764044,""id"":""7665878"",""homepage"":false},{""link_text"":""How successful are you?"",""link"":""http://bycomet.wordpress.com/2014/04/29/how-successful-are-you/"",""source"":""bycomet.wordpress.com"",""points"":43,""comments"":44,""submitter"":""comet"",""date"":1398762673,""id"":""7665675"",""homepage"":false},{""source"":""macgyverdev.blogspot.com"",""comments"":47,""date"":1398761297,""link_text"":""Become a better programmer with programming challenges"",""points"":144,""submitter"":""johannoren"",""link"":""http://macgyverdev.blogspot.com/2014/04/become-better-programmer-with.html"",""id"":""7665690"",""homepage"":false},{""source"":""plus.google.com"",""comments"":145,""date"":1398759780,""link_text"":""Google's POWER8 server motherboard"",""points"":177,""submitter"":""self"",""link"":""https://plus.google.com/u/0/111282580643669107165/posts/Uwh9W3XiZTQ"",""id"":""7665553"",""homepage"":false},{""link_text"":""A Startup's Guide to Time Hacking"",""link"":""http://info.predictiveedge.com/a-startups-guide-to-time-hacking"",""source"":""predictiveedge.com"",""points"":43,""comments"":16,""submitter"":""swwu"",""date"":1398758398,""id"":""7665573"",""homepage"":false},{""link_text"":""How we scaled Freshdesk (Part I) – Before Sharding"",""link"":""http://blog.freshdesk.com/how-freshdesk-scaled-part-one/"",""source"":""freshdesk.com"",""points"":5,""comments"":0,""submitter"":""sandeepmzr"",""date"":1398757335,""id"":""7665411"",""homepage"":false},{""source"":""tested.com"",""comments"":1,""date"":1398757182,""link_text"":""Designing and Building an \""Open-Hardware\"" Laptop"",""points"":3,""submitter"":""phiggy"",""link"":""http://www.tested.com/tech/pcs/460922-crowd-sourcing-open-hardware-laptop/"",""id"":""7665501"",""homepage"":false},{""source"":""inteco.es"",""comments"":9,""date"":1398756087,""link_text"":""Bypassing the Telegram authentication protocol [pdf]"",""points"":31,""submitter"":""mweibel"",""link"":""http://cert.inteco.es/extfrontinteco/img/File/intecocert/EstudiosInformes/INT_Telegram_EN.pdf"",""id"":""7665436"",""homepage"":false},{""source"":""gatesnotes.com"",""comments"":1,""date"":1398755783,""link_text"":""The Deadliest Animal in the World"",""points"":14,""submitter"":""orky56"",""link"":""http://www.gatesnotes.com/Health/Most-Lethal-Animal-Mosquito-Week"",""id"":""7665106"",""homepage"":false},{""source"":""thenubbyadmin.com"",""comments"":8,""date"":1398753350,""link_text"":""A Tale of CenturyLink Backdoors, PCI Compliance, and Pain"",""points"":23,""submitter"":""dlgeek"",""link"":""http://thenubbyadmin.com/2014/04/28/a-tale-of-centurylink-backdoors-pci-compliance-and-pain-lots-of-pain/"",""id"":""7665292"",""homepage"":false},{""link_text"":""How Should You Write a Fast Integer Overflow Check?"",""link"":""http://blog.regehr.org/archives/1139"",""source"":""regehr.org"",""points"":85,""comments"":47,""submitter"":""cremno"",""date"":1398753350,""id"":""7665254"",""homepage"":false},{""source"":""kurzweilai.net"",""comments"":5,""date"":1398753350,""link_text"":""A neuromorphic-computing ‘roadmap’"",""points"":24,""submitter"":""aburan28"",""link"":""http://www.kurzweilai.net/neuromorphic-computing-roadmap-envisions-analog-path-to-simulating-human-brain"",""id"":""7665233"",""homepage"":false},{""source"":""karentcrye.posthaven.com"",""comments"":8,""date"":1398750908,""link_text"":""2 Middle-Aged Women doing a startup blog"",""points"":16,""submitter"":""karencrye"",""link"":""http://karentcrye.posthaven.com/2-middle-aged-women-applying-to-ycombinator"",""id"":""7665164"",""homepage"":false},{""source"":""reuters.com"",""comments"":3,""date"":1398750908,""link_text"":""Microsoft rushes to fix browser after attacks; no fix for XP users"",""points"":8,""submitter"":""AnthonyMouse"",""link"":""http://www.reuters.com/article/2014/04/27/us-cybersecurity-microsoft-browser-idUSBREA3Q0PB20140427"",""id"":""7665082"",""homepage"":false},{""link_text"":""Exec($_GET"",""link"":""https://github.com/search?q=exec%28%24_GET&ref=cmdform&type=Code"",""source"":""github.com"",""points"":198,""comments"":122,""submitter"":""throwaway2048"",""date"":1398750752,""id"":""7665153"",""homepage"":false},{""link_text"":""Drowning in Problems – By Notch, Creator of Minecraft"",""link"":""http://game.notch.net/drowning/"",""source"":""notch.net"",""points"":19,""comments"":9,""submitter"":""bellcurvetopper"",""date"":1398747717,""id"":""7664983"",""homepage"":false},{""source"":""featherweightmusings.blogspot.com"",""comments"":96,""date"":1398744652,""link_text"":""Rust for C++ programmers – part 4: unique pointers"",""points"":103,""submitter"":""pohl"",""link"":""http://featherweightmusings.blogspot.com/2014/04/rust-for-c-programmers-part-4-unique.html?m=1"",""id"":""7664842"",""homepage"":false},{""source"":""donotlick.com"",""comments"":288,""date"":1398744349,""link_text"":""Firefox and Flux: A New, Beautiful Browser is Coming"",""points"":227,""submitter"":""Boriss"",""link"":""http://www.donotlick.com/firefox-and-flux-a-new-beautiful-browser-is-coming/"",""id"":""7664837"",""homepage"":false},{""source"":""techcrunch.com"",""comments"":39,""date"":1398741306,""link_text"":""How I Killed A Startup In 4 Hours (And Why I Don’t Regret It)"",""points"":32,""submitter"":""samx18"",""link"":""http://techcrunch.com/2014/04/28/how-i-killed-a-startup-in-4-hours-and-why-i-dont-regret-it/"",""id"":""7664523"",""homepage"":false},{""link_text"":""Matt Blaze: My life as an international arms courier (1995)"",""link"":""http://www.crypto.com/papers/export.txt"",""source"":""crypto.com"",""points"":80,""comments"":22,""submitter"":""rdl"",""date"":1398740242,""id"":""7664637"",""homepage"":false},{""source"":""theatlanticcities.com"",""comments"":25,""date"":1398739785,""link_text"":"" Why Americans Are Moving Less: New Jobs Aren't Worth It "",""points"":49,""submitter"":""jrs235"",""link"":""http://www.theatlanticcities.com/jobs-and-economy/2014/04/why-americans-are-moving-less-new-jobs-arent-worth-it/8973/"",""id"":""7664401"",""homepage"":false},{""link_text"":""Convicted hacker (weev) starts hedge fund"",""link"":""http://video.cnbc.com/gallery/?video=3000270881"",""source"":""cnbc.com"",""points"":19,""comments"":4,""submitter"":""sethbannon"",""date"":1398739480,""id"":""7664530"",""homepage"":false},{""source"":""slate.com"",""comments"":49,""date"":1398737810,""link_text"":""US Nuclear Missile Silos Still Use Floppy Disks"",""points"":37,""submitter"":""ForHackernews"",""link"":""http://www.slate.com/blogs/future_tense/2014/04/28/huge_floppy_disks_and_other_old_tech_is_common_at_air_force_nuclear_missile.html"",""id"":""7664423"",""homepage"":false},{""link_text"":""Google Cloud DNS"",""link"":""https://developers.google.com/cloud-dns/"",""source"":""developers.google.com"",""points"":147,""comments"":78,""submitter"":""valhallarecords"",""date"":1398736137,""id"":""7664244"",""homepage"":false},{""source"":""newyorker.com"",""comments"":53,""date"":1398735984,""link_text"":""What happens when patients find out how good their doctors really are? (2004)"",""points"":167,""submitter"":""danso"",""link"":""http://newyorker.com/archive/2004/12/06/041206fa_fact?currentPage=all"",""id"":""7664301"",""homepage"":false},{""link_text"":""Show HN: Space Frack, a fracking game in space"",""link"":""http://guscost.github.io/"",""source"":""guscost.github.io"",""points"":5,""comments"":6,""submitter"":""guscost"",""date"":1398735984,""id"":""7664227"",""homepage"":false},{""source"":""sarahmoran.com.au"",""comments"":15,""date"":1398734910,""link_text"":""Why aren’t there more women in tech? I’ll tell you why I’m not (2012)"",""points"":7,""submitter"":""nreece"",""link"":""http://www.sarahmoran.com.au/2012/why-arent-there-more-women-in-tech-ill-tell-you-why-im-not/"",""id"":""7664192"",""homepage"":false},{""source"":""betatype.io"",""comments"":141,""date"":1398734455,""link_text"":""Show HN: Betatype - A freelance site where clients pay $3,500 for prototypes"",""points"":254,""submitter"":""brandonhsiao"",""link"":""http://betatype.io"",""id"":""7664240"",""homepage"":false},{""link_text"":""Weebly is hiring Android Engineers "",""link"":""http://news.ycombinator.com/item?id=7664074"",""points"":null,""comments"":null,""submitter"":"""",""date"":1398731418,""id"":""7664074"",""homepage"":false},{""link_text"":""Google acknowledges XKCD #1361"",""link"":""http://news.ycombinator.com/item?id=7664031"",""points"":95,""comments"":40,""submitter"":""asdafa"",""date"":1398731418,""id"":""7664031"",""homepage"":false},{""link_text"":""Excess Catered Food in San Francisco? Donate it to FoodRunners"",""link"":""http://www.foodrunners.org/"",""source"":""foodrunners.org"",""points"":109,""comments"":27,""submitter"":""sbisker"",""date"":1398730051,""id"":""7663731"",""homepage"":false},{""source"":""maxoffsky.com"",""comments"":0,""date"":1398729898,""link_text"":""Show HN: Delaunay triangulation wallpaper creator with PNG/SVG export."",""points"":9,""submitter"":""msurguy"",""link"":""http://maxoffsky.com/maxoffsky-blog/free-wallpapers-generator-delaunay-triangulation-patterns/"",""id"":""7663572"",""homepage"":false}]"
158bf12bc27e38ac32d7c922634f0a7bb5f74d09,4166917,        //http://stackoverflow.com/questions/4166917/android-how-to-rotate-a-bitmap-on-a-center-point
005cb95b2998f70072746fe29ccdebc7b392b2c6,10695139,We had help from the following stack overflow resource: http://stackoverflow.com/questions/10695139/sort-a-list-of-tuples-by-2nd-item-integer-value
179b9bbafe35660e80fbb969f1048bdc0d1eea22,7003316,            // Explanation here:    http://stackoverflow.com/questions/7003316/windows-display-setting-at-150-still-shows-96-dpi
541aa988bb4a2520d58b376ca6f7042957fcd896,3082324,-- see http://stackoverflow.com/questions/3082324/foldl-versus-foldr-behavior-with-infinite-lists
3f315a1a04499e58760915b9623a1bab8be778da,5579602,"4680292,comment,4679138,4680071,2,0,codewright,,,""Let me help you.<p><a href=""""https://github.com/okws/sfslite"""" rel=""""nofollow"""">https://github.com/okws/sfslite</a><p><a href=""""http://www.read.cs.ucla.edu/tamer/"""" rel=""""nofollow"""">http://www.read.cs.ucla.edu/tamer/</a><p><a href=""""http://stackoverflow.com/questions/5579602/what-is-the-scala-equivalent-of-fs-async-workflows"""" rel=""""nofollow"""">http://stackoverflow.com/questions/5579602/what-is-the-scala...</a> You will note that it's a comparison between F# and Scala.<p><a href=""""http://dispatch.databinder.net/Dispatch.html"""" rel=""""nofollow"""">http://dispatch.databinder.net/Dispatch.html</a> The standard HTTP client of choice is async, although the simple API wouldn't necessarily tell you as much.<p><a href=""""https://github.com/ztellman/lamina"""" rel=""""nofollow"""">https://github.com/ztellman/lamina</a> From the clojure people. Agents bear mentioning too."",1350842550"
8e43224f85778ffa8ef86cf7927de80dcbef776f,14697343,"We need to use an [OR EQUALS](http://stackoverflow.com/a/14697343), otherwise our method will error out when we try to shovel a student into a grade level that doesn't yet exist."
460dcc4aeca89b265643e119c16f359b64a5afbf,10454518,   	Source: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number
a468e7abde9fd346ea05a92770e1eefe7e5e8362,2891790,# see: http://stackoverflow.com/questions/2891790/pretty-printing-of-numpy-array
4a1bec4583ba6398582eb12a68e01a864246d557,6054033,// http://stackoverflow.com/questions/6054033/pretty-printing-json-with-php
6e8e736dcf49d39f1736ff453935d013c63542e6,2156892,- character incrementing: http://stackoverflow.com/questions/2156892/python-how-can-i-increment-a-char
bc0c0092065ef35b92fe62a7fa38e8fdf3d375a6,4567409,.. _`Python Image Library: How to combine 4 images into a 2 x 2 grid? - Stack Overflow`: http://stackoverflow.com/questions/4567409/python-image-library-how-to-combine-4-images-into-a-2-x-2-grid
3524b007f252913ff4894a20795e9975e8aa83d3,37628,examples of reflection computer programming;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;Will multiple chips outputing onto a bus for a few nanoseconds cause damage .;multiple_chips_outputing;1.0;0.006974248927038626;1.0;2.0069742489270386;0.0;0;Mon Jun 26 21:02:56 IST 2017
a6db87040caf0f6409964d0aa13214f9071512f4,1247772,    // Adapted from http://stackoverflow.com/questions/1247772/is-there-an-equivalent-of-java-util-regex-for-glob-type-patterns
516293a62e0f274bda10d15c8e25524829f8ec2f,42747609,		// 参考：http://stackoverflow.com/questions/42747285/getting-current-frame-from-videoplayer/42747609#42747609
a08cfad10745611edbf869d5cf3d5ffebc5341e0,26040779, *  Props to http://stackoverflow.com/questions/26040779/how-to-get-current-device-current-platform-in-ios
5d468ee88ff18c931b98da2bbd820af1af9aa30a,21182660,"<DIV class=""started""><A class=""started-link"" href=""http://stackoverflow.com/questions/21182660/shiro-httpsession-in-sessionlistener/?lastactivity""><SPAN "
301f175fc07e4bfc7c27d34d19f670cfebcf219a,37628,0;107;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;editing;0.2;0.006974248927038626;1.0;1.2069742489270388;0.0;0
82e43fa068ae7136a36ba8ef6eefcf2327c06bdb,3330919,        // http://stackoverflow.com/a/3330919)
89cd406dd4428378c8cac35abe3d35261f06a792,3296050,"4774948,comment,4774426,4774426,19,0,boyter,,,""My favorite regex is the following,<p>/^1?$|^(11+?)\1+$/<p>Which finds prime numbers. Although, I can't for the life of me think of a reason for using it.<p><a href=""""http://stackoverflow.com/questions/3296050/how-does-this-regex-find-primes"""" rel=""""nofollow"""">http://stackoverflow.com/questions/3296050/how-does-this-reg...</a>"",1352756513"
9adfbf262a7c611bed946291e08218d166db2213,2008444,	// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
29450cd6455d668814e78d16a9216f1e9c3a9dfd,46155,            // http://stackoverflow.com/questions/46155/validate-email-address-in-javascript
988764c0967a13dab889a81aa84e9eed5cf3e219,13468943,     * @see https://stackoverflow.com/a/13468943
a2985278523dd0d5c85a013d21744f0914a1a9c4,680929,// https://stackoverflow.com/questions/680929/how-to-extract-extension-from-filename-string-in-javascript
5879e14ef8baf547aa037ce57c4334b6a8ad4ab7,21777058,         * This test checks that this issue is resolved: http://stackoverflow.com/questions/21777058/loop-index-in-included-nunjucks-file
5570eddc8bd4eb554c3bd20aa37ac20dcf171424,46917767,     * https://stackoverflow.com/questions/46917767/doctrine-2-5-query-logging-unknown-column-type-2-requested
90efe74d5558721bb98e10e2bdd19e37405c4066,11016571,"<p><a href=""http://stackoverflow.com/questions/11016571/intellij-idea-11-flex-compilation-issue"">Stack Overflow</a></p>"
bfbac8e5088c0a1a9160252d819e9e51331e0c33,44580542, *  * https://stackoverflow.com/q/44580542/632035
eb712a8190d77da8a58552cd843b4a548882be6a,1026069,  // // http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript 
e40da958b0a90b632ef77f22c2e0e52a295ecbc4,1334613,	 * From http://stackoverflow.com/questions/1334613/how-to-recursively-zip-a-directory-in-php
1648918daa9f65fa84c132016f4621d5d2f59910,3786201,// http://stackoverflow.com/questions/3786201/parsing-of-date-time-from-string-boost
8e6ca8cc2c73975c48dc5a57e36d37b96a2f5706,3222375,3;11;http://stackoverflow.com/questions/3222375/what-is-message-passing;blocks;1.0;0.014925373134328358;2.5;0;0
2e60594b563a41f5272b22d613283825e74e1f98,30176254,         * http://stackoverflow.com/a/30176254/2254360
d98c0cb7cc79f236af5584119ff3931443808fef,646518,# According to http://stackoverflow.com/questions/646518/python-how-to-detect-debug-interpreter
dbde5ace3aed941e90fb1693736fd55f352e36f4,9039885,    // Detect iOS: http://stackoverflow.com/questions/9038625/detect-if-device-is-ios/9039885#9039885
df4d066cd8e652dea3f3d9579c86efe53ecb80af,7934620,                # https://stackoverflow.com/questions/7934620/python-dots-in-the-name-of-variable-in-a-format-string#comment9695339_7934969
9d088f738d12eefa17c1a5197c875eb075eeaad1,3330919,        // http://stackoverflow.com/a/3330919)
1ef72d9b1a8a844ea3875d2f2b383eb6616f752d,17202128 16226924 17694143 22661977,"{""agents"":{""ie"":{""browser"":""IE"",""abbr"":""IE"",""prefix"":""ms"",""type"":""desktop"",""usage_global"":{""5.5"":0.009298,""6"":0.0740436,""7"":0.0678733,""8"":1.96216,""9"":1.48087,""10"":1.23406,""11"":7.60181},""version_list"":[{""version"":""5.5"",""global_usage"":0.009298,""era"":-6,""prefix"":""""},{""version"":""6"",""global_usage"":0.0740436,""era"":-5,""prefix"":""""},{""version"":""7"",""global_usage"":0.0678733,""era"":-4,""prefix"":""""},{""version"":""8"",""global_usage"":1.96216,""era"":-3,""prefix"":""""},{""version"":""9"",""global_usage"":1.48087,""era"":-2,""prefix"":""""},{""version"":""10"",""global_usage"":1.23406,""era"":-1,""prefix"":""""},{""version"":""11"",""global_usage"":7.60181,""era"":0,""prefix"":""""}],""current_version"":""11""},""edge"":{""browser"":""Edge"",""abbr"":""Edge"",""prefix"":""ms"",""type"":""desktop"",""usage_global"":{""1"":0},""version_list"":[{""version"":""1"",""global_usage"":0,""era"":0,""prefix"":""""}],""current_version"":""1""},""firefox"":{""browser"":""Firefox"",""abbr"":""FF"",""prefix"":""moz"",""type"":""desktop"",""usage_global"":{""2"":0.01203,""3"":0.02406,""3.5"":0.01203,""3.6"":0.054135,""4"":0.018045,""5"":0.01203,""6"":0.018045,""7"":0.006015,""8"":0.02406,""9"":0.01203,""10"":0.02406,""11"":0.02406,""12"":0.042105,""13"":0.018045,""14"":0.018045,""15"":0.030075,""16"":0.042105,""17"":0.02406,""18"":0.02406,""19"":0.018045,""20"":0.02406,""21"":0.054135,""22"":0.02406,""23"":0.03609,""24"":0.04812,""25"":0.054135,""26"":0.03609,""27"":0.030075,""28"":0.03609,""29"":0.054135,""30"":0.126315,""31"":0.61353,""32"":0.34887,""33"":0.090225,""34"":0.09624,""35"":0.15639,""36"":0.15639,""37"":0.3609,""38"":7.45259,""39"":0.246615,""40"":0.01203,""41"":0,""42"":0},""version_list"":[{""version"":""2"",""global_usage"":0.01203,""era"":-39,""prefix"":""""},{""version"":""3"",""global_usage"":0.02406,""era"":-38,""prefix"":""""},{""version"":""3.5"",""global_usage"":0.01203,""era"":-37,""prefix"":""""},{""version"":""3.6"",""global_usage"":0.054135,""era"":-36,""prefix"":""""},{""version"":""4"",""global_usage"":0.018045,""era"":-35,""prefix"":""""},{""version"":""5"",""global_usage"":0.01203,""era"":-34,""prefix"":""""},{""version"":""6"",""global_usage"":0.018045,""era"":-33,""prefix"":""""},{""version"":""7"",""global_usage"":0.006015,""era"":-32,""prefix"":""""},{""version"":""8"",""global_usage"":0.02406,""era"":-31,""prefix"":""""},{""version"":""9"",""global_usage"":0.01203,""era"":-30,""prefix"":""""},{""version"":""10"",""global_usage"":0.02406,""era"":-29,""prefix"":""""},{""version"":""11"",""global_usage"":0.02406,""era"":-28,""prefix"":""""},{""version"":""12"",""global_usage"":0.042105,""era"":-27,""prefix"":""""},{""version"":""13"",""global_usage"":0.018045,""era"":-26,""prefix"":""""},{""version"":""14"",""global_usage"":0.018045,""era"":-25,""prefix"":""""},{""version"":""15"",""global_usage"":0.030075,""era"":-24,""prefix"":""""},{""version"":""16"",""global_usage"":0.042105,""era"":-23,""prefix"":""""},{""version"":""17"",""global_usage"":0.02406,""era"":-22,""prefix"":""""},{""version"":""18"",""global_usage"":0.02406,""era"":-21,""prefix"":""""},{""version"":""19"",""global_usage"":0.018045,""era"":-20,""prefix"":""""},{""version"":""20"",""global_usage"":0.02406,""era"":-19,""prefix"":""""},{""version"":""21"",""global_usage"":0.054135,""era"":-18,""prefix"":""""},{""version"":""22"",""global_usage"":0.02406,""era"":-17,""prefix"":""""},{""version"":""23"",""global_usage"":0.03609,""era"":-16,""prefix"":""""},{""version"":""24"",""global_usage"":0.04812,""era"":-15,""prefix"":""""},{""version"":""25"",""global_usage"":0.054135,""era"":-14,""prefix"":""""},{""version"":""26"",""global_usage"":0.03609,""era"":-13,""prefix"":""""},{""version"":""27"",""global_usage"":0.030075,""era"":-12,""prefix"":""""},{""version"":""28"",""global_usage"":0.03609,""era"":-11,""prefix"":""""},{""version"":""29"",""global_usage"":0.054135,""era"":-10,""prefix"":""""},{""version"":""30"",""global_usage"":0.126315,""era"":-9,""prefix"":""""},{""version"":""31"",""global_usage"":0.61353,""era"":-8,""prefix"":""""},{""version"":""32"",""global_usage"":0.34887,""era"":-7,""prefix"":""""},{""version"":""33"",""global_usage"":0.090225,""era"":-6,""prefix"":""""},{""version"":""34"",""global_usage"":0.09624,""era"":-5,""prefix"":""""},{""version"":""35"",""global_usage"":0.15639,""era"":-4,""prefix"":""""},{""version"":""36"",""global_usage"":0.15639,""era"":-3,""prefix"":""""},{""version"":""37"",""global_usage"":0.3609,""era"":-2,""prefix"":""""},{""version"":""38"",""global_usage"":7.45259,""era"":-1,""prefix"":""""},{""version"":""39"",""global_usage"":0.246615,""era"":0,""prefix"":""""},{""version"":""40"",""global_usage"":0.01203,""era"":1,""prefix"":""""},{""version"":""41"",""global_usage"":0,""era"":2,""prefix"":""""},{""version"":""42"",""global_usage"":0,""era"":3,""prefix"":""""}],""current_version"":""39""},""chrome"":{""browser"":""Chrome"",""abbr"":""Chr."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""4"":0.01203,""5"":0.01203,""6"":0.01203,""7"":0.006015,""8"":0.006015,""9"":0.006015,""10"":0.018045,""11"":0.06015,""12"":0.02406,""13"":0.01203,""14"":0.01203,""15"":0.01203,""16"":0.01203,""17"":0.01203,""18"":0.018045,""19"":0.018045,""20"":0.01203,""21"":0.03609,""22"":0.066165,""23"":0.02406,""24"":0.054135,""25"":0.02406,""26"":0.042105,""27"":0.03609,""28"":0.042105,""29"":0.04812,""30"":0.078195,""31"":0.763905,""32"":0.066165,""33"":0.162405,""34"":0.138345,""35"":0.258645,""36"":0.66165,""37"":0.896235,""38"":0.25263,""39"":0.51729,""40"":0.54135,""41"":0.487215,""42"":0.85413,""43"":24.3788,""44"":0.13233,""45"":0.19248,""46"":0,""47"":0},""version_list"":[{""version"":""4"",""global_usage"":0.01203,""era"":-40,""prefix"":""""},{""version"":""5"",""global_usage"":0.01203,""era"":-39,""prefix"":""""},{""version"":""6"",""global_usage"":0.01203,""era"":-38,""prefix"":""""},{""version"":""7"",""global_usage"":0.006015,""era"":-37,""prefix"":""""},{""version"":""8"",""global_usage"":0.006015,""era"":-36,""prefix"":""""},{""version"":""9"",""global_usage"":0.006015,""era"":-35,""prefix"":""""},{""version"":""10"",""global_usage"":0.018045,""era"":-34,""prefix"":""""},{""version"":""11"",""global_usage"":0.06015,""era"":-33,""prefix"":""""},{""version"":""12"",""global_usage"":0.02406,""era"":-32,""prefix"":""""},{""version"":""13"",""global_usage"":0.01203,""era"":-31,""prefix"":""""},{""version"":""14"",""global_usage"":0.01203,""era"":-30,""prefix"":""""},{""version"":""15"",""global_usage"":0.01203,""era"":-29,""prefix"":""""},{""version"":""16"",""global_usage"":0.01203,""era"":-28,""prefix"":""""},{""version"":""17"",""global_usage"":0.01203,""era"":-27,""prefix"":""""},{""version"":""18"",""global_usage"":0.018045,""era"":-26,""prefix"":""""},{""version"":""19"",""global_usage"":0.018045,""era"":-25,""prefix"":""""},{""version"":""20"",""global_usage"":0.01203,""era"":-24,""prefix"":""""},{""version"":""21"",""global_usage"":0.03609,""era"":-23,""prefix"":""""},{""version"":""22"",""global_usage"":0.066165,""era"":-22,""prefix"":""""},{""version"":""23"",""global_usage"":0.02406,""era"":-21,""prefix"":""""},{""version"":""24"",""global_usage"":0.054135,""era"":-20,""prefix"":""""},{""version"":""25"",""global_usage"":0.02406,""era"":-19,""prefix"":""""},{""version"":""26"",""global_usage"":0.042105,""era"":-18,""prefix"":""""},{""version"":""27"",""global_usage"":0.03609,""era"":-17,""prefix"":""""},{""version"":""28"",""global_usage"":0.042105,""era"":-16,""prefix"":""""},{""version"":""29"",""global_usage"":0.04812,""era"":-15,""prefix"":""""},{""version"":""30"",""global_usage"":0.078195,""era"":-14,""prefix"":""""},{""version"":""31"",""global_usage"":0.763905,""era"":-13,""prefix"":""""},{""version"":""32"",""global_usage"":0.066165,""era"":-12,""prefix"":""""},{""version"":""33"",""global_usage"":0.162405,""era"":-11,""prefix"":""""},{""version"":""34"",""global_usage"":0.138345,""era"":-10,""prefix"":""""},{""version"":""35"",""global_usage"":0.258645,""era"":-9,""prefix"":""""},{""version"":""36"",""global_usage"":0.66165,""era"":-8,""prefix"":""""},{""version"":""37"",""global_usage"":0.896235,""era"":-7,""prefix"":""""},{""version"":""38"",""global_usage"":0.25263,""era"":-6,""prefix"":""""},{""version"":""39"",""global_usage"":0.51729,""era"":-5,""prefix"":""""},{""version"":""40"",""global_usage"":0.54135,""era"":-4,""prefix"":""""},{""version"":""41"",""global_usage"":0.487215,""era"":-3,""prefix"":""""},{""version"":""42"",""global_usage"":0.85413,""era"":-2,""prefix"":""""},{""version"":""43"",""global_usage"":24.3788,""era"":-1,""prefix"":""""},{""version"":""44"",""global_usage"":0.13233,""era"":0,""prefix"":""""},{""version"":""45"",""global_usage"":0.19248,""era"":1,""prefix"":""""},{""version"":""46"",""global_usage"":0,""era"":2,""prefix"":""""},{""version"":""47"",""global_usage"":0,""era"":3,""prefix"":""""}],""current_version"":""44""},""safari"":{""browser"":""Safari"",""abbr"":""Saf."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""3.1"":0,""3.2"":0.008692,""4"":0.03609,""5"":0.102255,""5.1"":0.246615,""6"":0.042105,""6.1"":0.330825,""7"":0.547365,""7.1"":0.691725,""8"":1.37142,""9"":0},""version_list"":[{""version"":""3.1"",""global_usage"":0,""era"":-9,""prefix"":""""},{""version"":""3.2"",""global_usage"":0.008692,""era"":-8,""prefix"":""""},{""version"":""4"",""global_usage"":0.03609,""era"":-7,""prefix"":""""},{""version"":""5"",""global_usage"":0.102255,""era"":-6,""prefix"":""""},{""version"":""5.1"",""global_usage"":0.246615,""era"":-5,""prefix"":""""},{""version"":""6"",""global_usage"":0.042105,""era"":-4,""prefix"":""""},{""version"":""6.1"",""global_usage"":0.330825,""era"":-3,""prefix"":""""},{""version"":""7"",""global_usage"":0.547365,""era"":-2,""prefix"":""""},{""version"":""7.1"",""global_usage"":0.691725,""era"":-1,""prefix"":""""},{""version"":""8"",""global_usage"":1.37142,""era"":0,""prefix"":""""},{""version"":""9"",""global_usage"":0,""era"":1,""prefix"":""""}],""current_version"":""8""},""opera"":{""browser"":""Opera"",""abbr"":""Op."",""prefix"":""webkit"",""type"":""desktop"",""usage_global"":{""9"":0.0082,""9.5-9.6"":0.00685,""10.0-10.1"":0.02406,""10.5"":0.008392,""10.6"":0.007296,""11"":0.014996,""11.1"":0.006229,""11.5"":0.006015,""11.6"":0.01203,""12"":0.01203,""12.1"":0.150375,""15"":0.00685,""16"":0.00685,""17"":0.00685,""18"":0.006015,""19"":0.006015,""20"":0.01203,""21"":0.006597,""22"":0.006597,""23"":0.013434,""24"":0.006702,""25"":0.006015,""26"":0.01203,""27"":0.006152,""28"":0.02406,""29"":0.246615,""30"":0.427065,""31"":0,""32"":0},""version_list"":[{""version"":""9"",""global_usage"":0.0082,""era"":-26,""prefix"":""o""},{""version"":""9.5-9.6"",""global_usage"":0.00685,""era"":-25,""prefix"":""o""},{""version"":""10.0-10.1"",""global_usage"":0.02406,""era"":-24,""prefix"":""o""},{""version"":""10.5"",""global_usage"":0.008392,""era"":-23,""prefix"":""o""},{""version"":""10.6"",""global_usage"":0.007296,""era"":-22,""prefix"":""o""},{""version"":""11"",""global_usage"":0.014996,""era"":-21,""prefix"":""o""},{""version"":""11.1"",""global_usage"":0.006229,""era"":-20,""prefix"":""o""},{""version"":""11.5"",""global_usage"":0.006015,""era"":-19,""prefix"":""o""},{""version"":""11.6"",""global_usage"":0.01203,""era"":-18,""prefix"":""o""},{""version"":""12"",""global_usage"":0.01203,""era"":-17,""prefix"":""o""},{""version"":""12.1"",""global_usage"":0.150375,""era"":-16,""prefix"":""o""},{""version"":""15"",""global_usage"":0.00685,""era"":-15,""prefix"":""""},{""version"":""16"",""global_usage"":0.00685,""era"":-14,""prefix"":""""},{""version"":""17"",""global_usage"":0.00685,""era"":-13,""prefix"":""""},{""version"":""18"",""global_usage"":0.006015,""era"":-12,""prefix"":""""},{""version"":""19"",""global_usage"":0.006015,""era"":-11,""prefix"":""""},{""version"":""20"",""global_usage"":0.01203,""era"":-10,""prefix"":""""},{""version"":""21"",""global_usage"":0.006597,""era"":-9,""prefix"":""""},{""version"":""22"",""global_usage"":0.006597,""era"":-8,""prefix"":""""},{""version"":""23"",""global_usage"":0.013434,""era"":-7,""prefix"":""""},{""version"":""24"",""global_usage"":0.006702,""era"":-6,""prefix"":""""},{""version"":""25"",""global_usage"":0.006015,""era"":-5,""prefix"":""""},{""version"":""26"",""global_usage"":0.01203,""era"":-4,""prefix"":""""},{""version"":""27"",""global_usage"":0.006152,""era"":-3,""prefix"":""""},{""version"":""28"",""global_usage"":0.02406,""era"":-2,""prefix"":""""},{""version"":""29"",""global_usage"":0.246615,""era"":-1,""prefix"":""""},{""version"":""30"",""global_usage"":0.427065,""era"":0,""prefix"":""""},{""version"":""31"",""global_usage"":0,""era"":1,""prefix"":""""},{""version"":""32"",""global_usage"":0,""era"":2,""prefix"":""""}],""current_version"":""30"",""prefix_exceptions"":{""9"":""o"",""9.5-9.6"":""o"",""10.0-10.1"":""o"",""10.5"":""o"",""10.6"":""o"",""11"":""o"",""11.1"":""o"",""11.5"":""o"",""11.6"":""o"",""12"":""o"",""12.1"":""o""}},""ios_saf"":{""browser"":""iOS Safari"",""abbr"":""iOS"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""3.2"":0,""4.0-4.1"":0,""4.2-4.3"":0,""5.0-5.1"":0.0282087,""6.0-6.1"":0.0907254,""7.0-7.1"":0.917928,""8"":0.0541303,""8.1-8.4"":6.41863,""9"":0},""version_list"":[{""version"":""3.2"",""global_usage"":0,""era"":-7,""prefix"":""""},{""version"":""4.0-4.1"",""global_usage"":0,""era"":-6,""prefix"":""""},{""version"":""4.2-4.3"",""global_usage"":0,""era"":-5,""prefix"":""""},{""version"":""5.0-5.1"",""global_usage"":0.0282087,""era"":-4,""prefix"":""""},{""version"":""6.0-6.1"",""global_usage"":0.0907254,""era"":-3,""prefix"":""""},{""version"":""7.0-7.1"",""global_usage"":0.917928,""era"":-2,""prefix"":""""},{""version"":""8"",""global_usage"":0.0541303,""era"":-1,""prefix"":""""},{""version"":""8.1-8.4"",""global_usage"":6.41863,""era"":0,""prefix"":""""},{""version"":""9"",""global_usage"":0,""era"":1,""prefix"":""""}],""current_version"":""8.1-8.4""},""op_mini"":{""browser"":""Opera Mini"",""abbr"":""O.Mini"",""prefix"":""o"",""type"":""mobile"",""usage_global"":{""5.0-8.0"":4.71413},""version_list"":[{""version"":""5.0-8.0"",""global_usage"":4.71413,""era"":0,""prefix"":""""}],""current_version"":""5.0-8.0""},""android"":{""browser"":""Android Browser"",""abbr"":""And."",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""2.1"":0,""2.2"":0,""2.3"":0.0740353,""3"":0,""4"":0.218662,""4.1"":0.74724,""4.2-4.3"":1.48329,""4.4"":2.60759,""4.4.3-4.4.4"":1.13119,""40"":0},""version_list"":[{""version"":""2.1"",""global_usage"":0,""era"":-9,""prefix"":""""},{""version"":""2.2"",""global_usage"":0,""era"":-8,""prefix"":""""},{""version"":""2.3"",""global_usage"":0.0740353,""era"":-7,""prefix"":""""},{""version"":""3"",""global_usage"":0,""era"":-6,""prefix"":""""},{""version"":""4"",""global_usage"":0.218662,""era"":-5,""prefix"":""""},{""version"":""4.1"",""global_usage"":0.74724,""era"":-4,""prefix"":""""},{""version"":""4.2-4.3"",""global_usage"":1.48329,""era"":-3,""prefix"":""""},{""version"":""4.4"",""global_usage"":2.60759,""era"":-2,""prefix"":""""},{""version"":""4.4.3-4.4.4"",""global_usage"":1.13119,""era"":-1,""prefix"":""""},{""version"":""40"",""global_usage"":0,""era"":0,""prefix"":""""}],""current_version"":""40""},""bb"":{""browser"":""Blackberry Browser"",""abbr"":""BB"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""7"":0.093671,""10"":0},""version_list"":[{""version"":""7"",""global_usage"":0.093671,""era"":-1,""prefix"":""""},{""version"":""10"",""global_usage"":0,""era"":0,""prefix"":""""}],""current_version"":""10""},""op_mob"":{""browser"":""Opera Mobile"",""abbr"":""O.Mob"",""prefix"":""o"",""type"":""mobile"",""usage_global"":{""10"":0,""11"":0,""11.1"":0,""11.5"":0,""12"":0.00257321,""12.1"":0.00385982,""30"":0.0347384},""version_list"":[{""version"":""10"",""global_usage"":0,""era"":-6,""prefix"":""""},{""version"":""11"",""global_usage"":0,""era"":-5,""prefix"":""""},{""version"":""11.1"",""global_usage"":0,""era"":-4,""prefix"":""""},{""version"":""11.5"",""global_usage"":0,""era"":-3,""prefix"":""""},{""version"":""12"",""global_usage"":0.00257321,""era"":-2,""prefix"":""""},{""version"":""12.1"",""global_usage"":0.00385982,""era"":-1,""prefix"":""""},{""version"":""30"",""global_usage"":0.0347384,""era"":0,""prefix"":""webkit""}],""current_version"":""30"",""prefix_exceptions"":{""30"":""webkit""}},""and_chr"":{""browser"":""Chrome for Android"",""abbr"":""Chr/And."",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""42"":13.7734},""version_list"":[{""version"":""42"",""global_usage"":13.7734,""era"":0,""prefix"":""""}],""current_version"":""42""},""and_ff"":{""browser"":""Firefox for Android"",""abbr"":""FF/And."",""prefix"":""moz"",""type"":""mobile"",""usage_global"":{""38"":0.13951},""version_list"":[{""version"":""38"",""global_usage"":0.13951,""era"":0,""prefix"":""""}],""current_version"":""38""},""ie_mob"":{""browser"":""IE Mobile"",""abbr"":""IE.Mob"",""prefix"":""ms"",""type"":""mobile"",""usage_global"":{""10"":0.19437,""11"":0.626746},""version_list"":[{""version"":""10"",""global_usage"":0.19437,""era"":-1,""prefix"":""""},{""version"":""11"",""global_usage"":0.626746,""era"":0,""prefix"":""""}],""current_version"":""11""},""and_uc"":{""browser"":""UC Browser for Android"",""abbr"":""UC"",""prefix"":""webkit"",""type"":""mobile"",""usage_global"":{""9.9"":5.94313},""version_list"":[{""version"":""9.9"",""global_usage"":5.94313,""era"":0,""prefix"":""webkit""}],""current_version"":""9.9"",""prefix_exceptions"":{""9.9"":""webkit""}}},""statuses"":{""rec"":""W3C Recommendation"",""pr"":""W3C Proposed Recommendation"",""cr"":""W3C Candidate Recommendation"",""wd"":""W3C Working Draft"",""ls"":""WHATWG Living Standard"",""other"":""Other"",""unoff"":""Unofficial / Note""},""cats"":{""CSS"":[""CSS"",""CSS2"",""CSS3""],""HTML5"":[""Canvas"",""HTML5""],""JS API"":[""JS API""],""Other"":[""PNG"",""Other"",""DOM""],""SVG"":[""SVG""]},""updated"":1437616727,""data"":{""png-alpha"":{""title"":""PNG alpha transparency"",""description"":""Semi-transparent areas in PNG files"",""spec"":""http://www.w3.org/TR/PNG/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Portable_Network_Graphics"",""title"":""Wikipedia""},{""url"":""http://dillerdesign.com/experiment/DD_belatedPNG/"",""title"":""Workaround for IE6""}],""categories"":[""PNG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs."",""notes_by_num"":{},""usage_perc_y"":97.61,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""apng"":{""title"":""Animated PNG (APNG)"",""description"":""Like animated GIFs, but allowing 24-bit colors and alpha transparency"",""spec"":""https://wiki.mozilla.org/APNG_Specification"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/APNG"",""title"":""Wikipedia""},{""url"":""https://github.com/davidmz/apng-canvas"",""title"":""Polyfill using canvas""},{""url"":""https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp"",""title"":""Chrome extension providing support""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6513393-apng-animated-png-images-support-firefox-and-sa"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""PNG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Where support for APNG is missing, only the first frame is displayed"",""notes_by_num"":{},""usage_perc_y"":18.74,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""video"":{""title"":""Video element"",""description"":""Method of playing videos on webpages (without requiring a plug-in)."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element"",""status"":""ls"",""links"":[{""url"":""https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/"",""title"":""Detailed article on video/audio elements""},{""url"":""http://webmproject.org"",""title"":""WebM format information""},{""url"":""http://camendesign.co.uk/code/video_for_everybody"",""title"":""Video for Everybody""},{""url"":""http://diveintohtml5.info/video.html"",""title"":""Video on the Web - includes info on Android support""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/video.js#video"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/video"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Different browsers have support for different video formats, see sub-features for details.\r\n\r\n"",""notes_by_num"":{""1"":""The Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.""},""usage_perc_y"":90.78,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""<video>"",""ie_id"":"""",""chrome_id"":""""},""audio"":{""title"":""Audio element"",""description"":""Method of playing sound on webpages (without requiring a plug-in)."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#the-audio-element"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/native-audio-in-the-browser/"",""title"":""HTML5 Doctor article""},{""url"":""https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/"",""title"":""Detailed article on video/audio elements""},{""url"":""http://www.jplayer.org/latest/demos/"",""title"":""Demos of audio player that uses the audio element""},{""url"":""http://24ways.org/2010/the-state-of-html5-audio"",""title"":""Detailed article on support""},{""url"":""http://textopia.org/androidsoundformats.html"",""title"":""File format test page""},{""url"":""http://www.phoboslab.org/log/2011/03/the-state-of-html5-audio"",""title"":""The State of HTML5 Audio""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/audio.js#audio"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/audio"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":90.78,""usage_perc_a"":0.03,""ucprefix"":false,""parent"":"""",""keywords"":""<audio>"",""ie_id"":"""",""chrome_id"":""""},""contenteditable"":{""title"":""contenteditable attribute (basic support)"",""description"":""Method of making any HTML element editable."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#contenteditable"",""status"":""ls"",""links"":[{""url"":""http://html5demos.com/contenteditable"",""title"":""Demo page""},{""url"":""https://blog.whatwg.org/the-road-to-html-5-contenteditable"",""title"":""WHATWG blog post""},{""url"":""http://accessgarage.wordpress.com/2009/05/08/how-to-hack-your-app-to-make-contenteditable-work/"",""title"":""Blog post on usage problems""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/contentEditable"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""This support only refers to very basic editing capability, implementations vary significantly on how certain elements can be edited."",""notes_by_num"":{},""usage_perc_y"":92.87,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""dragndrop"":{""title"":""Drag and Drop"",""description"":""Method of easily dragging and dropping elements on a page, requiring minimal JavaScript."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#dnd"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/native-drag-and-drop/"",""title"":""HTML5 Doctor article""},{""url"":""http://nettutsplus.s3.amazonaws.com/64_html5dragdrop/demo/index.html"",""title"":""Shopping cart demo""},{""url"":""http://html5demos.com/drag"",""title"":""Demo with link blocks""},{""url"":""http://docs.webplatform.org/wiki/dom/DragEvent"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/MihaiValentin/setDragImage-IE"",""title"":""Polyfill for setDragImage in IE""},{""url"":""http://blog.teamtreehouse.com/implementing-native-drag-and-drop"",""title"":""Implementing Native Drag and Drop""},{""url"":""https://github.com/timruffles/ios-html5-drag-drop-shim"",""title"":""iOS/Android shim for HTML 5 drag'n'drop""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6542268-setdragimage-on-datatransfer-of-dragevent"",""title"":""Microsoft Edge setDragImage feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #2"",""11"":""a #2""},""edge"":{""1"":""a #2""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""y"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""`dataTransfer.items` only supported by Chrome.\r\n\r\nCurrently no browser supports the `dropzone` attribute.\r\n\r\nFirefox supports any kind of DOM elements for `.setDragImage`. Chrome must have either an `HTMLImageElement` or any kind of DOM elements attached to the DOM and within the viewport of the browser for `.setDragImage`."",""notes_by_num"":{""1"":""Partial support refers to no support for the `dataTransfer.files` or `.types` objects and limited supported formats for `dataTransfer.setData`/`getData`."",""2"":""Partial support refers to not supporting `.setDragImage`""},""usage_perc_y"":46.66,""usage_perc_a"":12.43,""ucprefix"":false,""parent"":"""",""keywords"":""draganddrop"",""ie_id"":"""",""chrome_id"":""""},""internationalization"":{""title"":""Internationalization API"",""description"":""Locale-sensitive collation (string comparison), number formatting, and date and time formatting."",""spec"":""http://www.ecma-international.org/ecma-402/1.0/"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"",""title"":""MDN reference""},{""url"":""http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/"",""title"":""The ECMAScript Internationalization API""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":67.06,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""Intl,Collator,NumberFormat,DateTimeFormat"",""ie_id"":""ecmascriptinternationalizationapi"",""chrome_id"":""""},""queryselector"":{""title"":""querySelector/querySelectorAll"",""description"":""Method of accessing DOM elements using CSS selectors"",""spec"":""http://www.w3.org/TR/selectors-api/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/element.querySelector"",""title"":""MDN article on querySelector""},{""url"":""https://developer.mozilla.org/En/DOM/Element.querySelectorAll"",""title"":""MDN article on querySelectorAll""},{""url"":""http://cjihrig.com/blog/javascripts-selectors-api/"",""title"":""Blog post""},{""url"":""http://docs.webplatform.org/wiki/css/selectors_api/querySelector"",""title"":""WebPlatform Docs""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE8 is due to being limited to [CSS 2.1 selectors](/#feat=css-sel2) and a small subset of [CSS 3 selectors](/#feat=css-sel3) (see notes there). Additionally, it will have trouble with selectors including unrecognized tags (for example HTML5 ones).""},""usage_perc_y"":95.53,""usage_perc_a"":1.96,""ucprefix"":false,""parent"":"""",""keywords"":""query,selectors,selectors api"",""ie_id"":"""",""chrome_id"":""""},""getelementsbyclassname"":{""title"":""getElementsByClassName"",""description"":""Method of accessing DOM elements by class name"",""spec"":""http://www.w3.org/TR/dom/#dom-document-getelementsbyclassname"",""status"":""wd"",""links"":[{""url"":""http://www.quirksmode.org/dom/tests/basics.html#getElementsByClassName"",""title"":""Test page""},{""url"":""http://docs.webplatform.org/wiki/dom/HTMLElement/getElementsByClassName"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":95.56,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""byclassname"",""ie_id"":"""",""chrome_id"":""""},""forms"":{""title"":""HTML5 form features"",""description"":""Expanded form options, including things like date pickers, sliders, validation, placeholders and multiple file uploads. Previously known as \""Web forms 2.0\""."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#forms"",""status"":""ls"",""links"":[{""url"":""https://miketaylr.com/code/input-type-attr.html"",""title"":""HTML5 inputs and attribute support page""},{""url"":""https://github.com/westonruter/webforms2"",""title"":""Cross-browser JS implementation (based on original spec)""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""a"",""11"":""a""},""edge"":{""1"":""a""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""a""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":6.21,""usage_perc_a"":80.45,""ucprefix"":false,""parent"":"""",""keywords"":""input,datepicker"",""ie_id"":"""",""chrome_id"":""""},""html5semantic"":{""title"":""New semantic elements"",""description"":""HTML5 offers some new elements, primarily for semantic purposes. The elements include: section, article, aside, header, footer, nav, figure, figcaption, time, mark, main."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#sections"",""status"":""ls"",""links"":[{""url"":""https://blog.whatwg.org/supporting-new-elements-in-ie"",""title"":""Workaround for IE""},{""url"":""https://blog.whatwg.org/styling-ie-noscript"",""title"":""Alternate workaround""},{""url"":""http://oli.jp/2009/html5-structure3/"",""title"":""Article on structural elements""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-html5-elements"",""title"":""has.js test""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""y #1"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""a #1"",""9.5-9.6"":""a #1"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""a #1"",""11"":""a #1"",""11.1"":""y #1"",""11.5"":""y #1"",""11.6"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""y #1"",""4.2-4.3"":""y #1"",""5.0-5.1"":""y #1"",""6.0-6.1"":""y #1"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""a #1"",""2.2"":""y #1"",""2.3"":""y #1"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y #1"",""10"":""y #1""},""op_mob"":{""10"":""a #1"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y #1""}},""notes"":""Partial support refers to missing the default styling. This is easily taken care of by using display:block for all new elements (except time and mark, these should be display:inline anyway)."",""notes_by_num"":{""1"":""Does not include support for the <main> element""},""usage_perc_y"":90.63,""usage_perc_a"":4.94,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""offline-apps"":{""title"":""Offline web applications"",""description"":""Method of defining web page files to be cached using a cache manifest file, allowing them to work offline on subsequent visits to the page"",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#offline"",""status"":""ls"",""links"":[{""url"":""http://www.sitepoint.com/offline-web-application-tutorial/"",""title"":""Sitepoint tutorial""},{""url"":""http://diveintohtml5.info/offline.html"",""title"":""Dive Into HTML5 article""},{""url"":""http://hacks.mozilla.org/2010/01/offline-web-applications/"",""title"":""Mozilla Hacks article/demo""},{""url"":""http://docs.webplatform.org/wiki/apis/appcache/ApplicationCache"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":89.29,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""appcache,applicationcache,app cache,application cache,online"",""ie_id"":""applicationcache"",""chrome_id"":""6192449487634432""},""webworkers"":{""title"":""Web Workers"",""description"":""Method of running scripts in the background, isolated from the web page"",""spec"":""https://html.spec.whatwg.org/multipage/workers.html"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/En/Using_web_workers"",""title"":""MDN article""},{""url"":""http://nerget.com/rayjs-mt/rayjs.html"",""title"":""Web Worker demo""},{""url"":""http://code.google.com/p/ie-web-worker/"",""title"":""Polyfill for IE (single threaded)""},{""url"":""http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-web-workers/"",""title"":""Tutorial""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":86.77,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""fontface"":{""title"":""@font-face Web fonts"",""description"":""Method of displaying fonts downloaded from websites"",""spec"":""http://www.w3.org/TR/css3-webfonts/"",""status"":""cr"",""links"":[{""url"":""http://webfonts.info"",""title"":""News and information site""},{""url"":""http://en.wikipedia.org/wiki/Web_typography"",""title"":""Wikipedia""},{""url"":""http://www.css3files.com/font/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@font-face"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #2"",""4.0-4.1"":""a #2"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Not supported by IE Mobile 9 and below."",""notes_by_num"":{""1"":""Partial support refers to only supporting EOT fonts."",""2"":""Partial support refers to only supporting SVG fonts.""},""usage_perc_y"":90.65,""usage_perc_a"":2.28,""ucprefix"":false,""parent"":"""",""keywords"":""font face"",""ie_id"":"""",""chrome_id"":""""},""eot"":{""title"":""EOT - Embedded OpenType fonts"",""description"":""Type of font that can be derived from a regular font, allowing small files and legal use of high-quality fonts. Usage is restricted by the file being tied to the website"",""spec"":""http://www.w3.org/Submission/EOT/"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Embedded_OpenType"",""title"":""Wikipedia""},{""url"":""http://www.microsoft.com/typography/web/embedding/default.aspx"",""title"":""Example pages""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Proposal by Microsoft, being considered for W3C standardization."",""notes_by_num"":{},""usage_perc_y"":12.42,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""woff"":{""title"":""WOFF - Web Open Font Format"",""description"":""Compressed TrueType/OpenType font that contains information about the font's source."",""spec"":""http://www.w3.org/TR/WOFF/"",""status"":""rec"",""links"":[{""url"":""http://hacks.mozilla.org/2009/10/woff/"",""title"":""Mozilla hacks blog post""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n #1"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Reported to be supported in some modified versions of the Android 4.0 browser.""},""usage_perc_y"":88.07,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""multibackgrounds"":{""title"":""CSS3 Multiple backgrounds"",""description"":""Method of using multiple images as a background"",""spec"":""http://www.w3.org/TR/css3-background/"",""status"":""cr"",""links"":[{""url"":""http://www.css3.info/preview/multiple-backgrounds/"",""title"":""Demo & information page""},{""url"":""http://www.css3files.com/background/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/background-image"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":95.49,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""border-image"":{""title"":""CSS3 Border images"",""description"":""Method of using images for borders"",""spec"":""http://www.w3.org/TR/css3-background/#the-border-image"",""status"":""cr"",""links"":[{""url"":""http://www.css3files.com/border/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/border-image"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a x"",""3.6"":""a x"",""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a x"",""3.2"":""a x"",""4"":""a x"",""5"":""a x"",""5.1"":""a x"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""a"",""10.6"":""a"",""11"":""a x"",""11.1"":""a x"",""11.5"":""a x"",""11.6"":""a x"",""12"":""a x"",""12.1"":""a x"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""a x"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a x""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a x"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""a x"",""11.1"":""a x"",""11.5"":""a x"",""12"":""a x"",""12.1"":""a x"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Note that both the `border-style` and `border-width` must be specified (not set to `none` or 0) for border-images to work according to spec, though older implementations may not have this requirement. Partial support refers to supporting the shorthand syntax, but not the individual properties (border-image-source, border-image-slice, etc). "",""notes_by_num"":{},""usage_perc_y"":84.16,""usage_perc_a"":8.44,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""background-img-opts"":{""title"":""CSS3 Background-image options"",""description"":""New properties to affect background images, including background-clip, background-origin and background-size"",""spec"":""http://www.w3.org/TR/css3-background/#backgrounds"",""status"":""cr"",""links"":[{""url"":""http://www.standardista.com/css3/css3-background-properties"",""title"":""Detailed compatibility tables and demos""},{""url"":""http://www.css3files.com/background/"",""title"":""Information page""},{""url"":""https://github.com/louisremi/background-size-polyfill"",""title"":""Polyfill for IE7-8""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a x"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #2 #3"",""3.2"":""a #2 #3"",""4"":""a #2 #3"",""5"":""a #2 #3"",""5.1"":""a #2 #3"",""6"":""a #2 #3"",""6.1"":""a #2 #3"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""a x"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a #3"",""6.0-6.1"":""a"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""a x"",""2.2"":""a x #3"",""2.3"":""a x #3"",""3"":""a #3"",""4"":""a #3"",""4.1"":""a #3"",""4.2-4.3"":""a #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Safari also supports the unofficial `-webkit-background-clip: text` (only with prefix)"",""notes_by_num"":{""1"":""Partial support in Opera Mini refers to not supporting background sizing or background attachments. However Opera Mini 7.5 supports background sizing (including cover and contain values)."",""2"":""Partial support in Safari 6 refers to not supporting background sizing offset from edges syntax."",""3"":""Does not support `background-size` values in the `background` shorthand""},""usage_perc_y"":87.14,""usage_perc_a"":8.38,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-table"":{""title"":""CSS Table display"",""description"":""Method of displaying elements as tables, rows, and cells"",""spec"":""http://www.w3.org/TR/CSS21/tables.html"",""status"":""rec"",""links"":[{""url"":""http://www.onenaught.com/posts/201/use-css-displaytable-for-layout"",""title"":""Blog post on usage""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":97.54,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""display:table, display: table,table-cell,table-row,table-layout"",""ie_id"":"""",""chrome_id"":""""},""css-gencontent"":{""title"":""CSS Generated content for pseudo-elements"",""description"":""Method of displaying text or images before or after the given element's contents using the ::before and ::after pseudo-elements. All browsers with support also support the `attr()` notation in the `content` property. "",""spec"":""http://www.w3.org/TR/CSS21/generate.html"",""status"":""rec"",""links"":[{""url"":""http://www.westciv.com/style_master/academy/css_tutorial/advanced/generated_content.html"",""title"":""Guide on usage""},{""url"":""https://dev.opera.com/articles/view/css-generated-content-techniques/"",""title"":""Dev.Opera article""},{""url"":""http://docs.webplatform.org/wiki/css/generated_and_replaced_content"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""For content to appear in pseudo-elements, the `content` property must be set (but may be an empty string)."",""notes_by_num"":{""1"":""IE8 only supports the single-colon CSS 2.1 syntax (i.e. :pseudo-class). It does not support the double-colon CSS3 syntax (i.e. ::pseudo-element).""},""usage_perc_y"":95.58,""usage_perc_a"":1.96,""ucprefix"":false,""parent"":"""",""keywords"":""before,after"",""ie_id"":"""",""chrome_id"":""""},""css-fixed"":{""title"":""CSS position:fixed"",""description"":""Method of keeping an element in a fixed location regardless of scroll position"",""spec"":""http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning"",""status"":""rec"",""links"":[{""url"":""http://www.css-101.org/fixed-positioning/05.php"",""title"":""Workaround for IE6""},{""url"":""http://bradfrostweb.com/blog/mobile/fixed-position/"",""title"":""Article on mobile support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/position"",""title"":""WebPlatform Docs""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a #2"",""2.2"":""a #2"",""2.3"":""a #2"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older iOS Safari refers to [buggy behavior](http://remysharp.com/2012/05/24/issues-with-position-fixed-scrolling-on-ios/)."",""2"":""Only works in Android 2.1 thru 2.3 by using the following meta tag: <meta name=\""viewport\"" content=\""width=device-width, user-scalable=no\"">.""},""usage_perc_y"":91.79,""usage_perc_a"":1.11,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""beacon"":{""title"":""Beacon API"",""description"":""Allows data to be sent asynchronously to a server with `navigator.sendBeacon`, even after a page was closed. Useful for posting analytics data the moment a user was finished using the page."",""spec"":""http://www.w3.org/TR/beacon/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":51.3,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""beacon"",""chrome_id"":""5517433905348608""},""hashchange"":{""title"":""Hashchange event"",""description"":""Event triggered in JavaScript when the URL's hash has changed (for example: page.html#foo to page.html#bar) "",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#the-hashchangeevent-interface"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.onhashchange"",""title"":""MDN article""},{""url"":""http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx"",""title"":""MSDN article""},{""url"":""http://www.quirksmode.org/dom/events/tests/hashchange.html"",""title"":""Simple demo""},{""url"":""http://github.com/3nr1c/jUri.js"",""title"":""Polyfill""},{""url"":""http://docs.webplatform.org/wiki/dom/Element/hashchange"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5"",""JS API""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""p"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":92.68,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""onhashchange,HashChangeEvent"",""ie_id"":"""",""chrome_id"":""""},""css-sel2"":{""title"":""CSS 2.1 selectors"",""description"":""Basic CSS selectors including: `*` (universal selector), `>` (child selector), `:first-child`, `:link`, `:visited`, `:active`, `:hover`, `:focus`, `:lang()`, `+` (adjacent sibling selector), `[attr]`, `[attr=\""val\""]`, `[attr~=\""val\""]`, `[attr|=\""bar\""]`, `.foo` (class selector), `#foo` (id selector)"",""spec"":""http://www.w3.org/TR/CSS21/selector.html"",""status"":""rec"",""links"":[{""url"":""http://www.quirksmode.org/css/contents.html"",""title"":""Detailed support information""},{""url"":""http://www.yourhtmlsource.com/stylesheets/advancedselectors.html"",""title"":""Examples of advanced selectors""},{""url"":""http://selectivizr.com"",""title"":""Selectivizr: Polyfill for IE6-8""},{""url"":""http://docs.webplatform.org/wiki/css/selectors"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Support for `:visited` styling [varies across browsers](http://sixrevisions.com/css/visited-pseudo-class-strange/) due to security concerns."",""notes_by_num"":{},""usage_perc_y"":97.61,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-sel3"":{""title"":""CSS3 selectors"",""description"":""Advanced element selection using selectors including: `[foo^=\""bar\""]`, `[foo$=\""bar\""]`, `[foo*=\""bar\""]`, `:root`, `:nth-child()`,  `:nth-last-child()`, `nth-of-type`, `nth-last-of-type()`, `:last-child`, `:first-of-type`, `:last-of-type`, `:only-child`, `:only-of-type`, `:empty`, `:target`, `:enabled`, `:disabled`, `:checked`, `:not()`, `~` (general sibling)"",""spec"":""http://www.w3.org/TR/css3-selectors/"",""status"":""rec"",""links"":[{""url"":""http://www.quirksmode.org/css/selectors/"",""title"":""Detailed support information""},{""url"":""http://www.css3.info/selectors-test/"",""title"":""Automated CSS3 selector test""},{""url"":""http://selectivizr.com"",""title"":""Selectivizr: Polyfill for IE6-8""},{""url"":""http://docs.webplatform.org/wiki/css/selectors"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""IE7 and IE8 support only these CSS3 selectors: General siblings (`element1~element2`) and Attribute selectors `[attr^=val]`, `[attr$=val]`, and `[attr*=val]`""},""usage_perc_y"":95.54,""usage_perc_a"":2.03,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-textshadow"":{""title"":""CSS3 Text-shadow"",""description"":""Method of applying one or more shadow or blur effects to text"",""spec"":""http://www.w3.org/TR/css-text-decor-3/#text-shadow-property"",""status"":""wd"",""links"":[{""url"":""http://hacks.mozilla.org/2009/06/text-shadow/"",""title"":""Mozilla hacks article""},{""url"":""http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_text-shadow.htm"",""title"":""Live editor""},{""url"":""http://www.css3files.com/shadow/#textshadow"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/text-shadow"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y #1"",""11"":""y #1""},""edge"":{""1"":""y #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #2"",""3.2"":""a #2"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":""Opera Mini ignores the blur-radius set, so no blur effect is visible. Text-shadow behavior can be somewhat emulated in older IE versions using the non-standard \""dropshadow\"" or \""glow\"" filters."",""notes_by_num"":{""1"":""IE 10+ supports a fourth length value for the shadow's \""spread\"". This is not (yet) part of the specification."",""2"":""Partial support in Safari 3.* refers to not supporting multiple shadows.""},""usage_perc_y"":89.24,""usage_perc_a"":4.82,""ucprefix"":false,""parent"":"""",""keywords"":""text shadow"",""ie_id"":"""",""chrome_id"":""""},""css-boxshadow"":{""title"":""CSS3 Box-shadow"",""description"":""Method of displaying an inner or outer shadow effect to elements"",""spec"":""http://www.w3.org/TR/css3-background/#box-shadow"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/En/CSS/-moz-box-shadow"",""title"":""MDN article""},{""url"":""http://westciv.com/tools/boxshadows/index.html"",""title"":""Live editor""},{""url"":""http://tests.themasta.com/blogstuff/boxshadowdemo.html"",""title"":""Demo of various effects""},{""url"":""http://www.css3files.com/shadow/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/box-shadow"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a x #1"",""3.2"":""a x #1"",""4"":""a x #1"",""5"":""y x"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Can be partially emulated in older IE versions using the non-standard \""shadow\"" filter."",""notes_by_num"":{""1"":""Partial support in Safari, iOS Safari and Android Browser refers to missing \""inset\"", blur radius value, and multiple shadow support.""},""usage_perc_y"":90.67,""usage_perc_a"":0.12,""ucprefix"":false,""parent"":"""",""keywords"":""box-shadows,boxshadows,box shadow,shaow"",""ie_id"":"""",""chrome_id"":""""},""css3-colors"":{""title"":""CSS3 Colors"",""description"":""Method of describing colors using Hue, Saturation and Lightness (hsl()) rather than just RGB, as well as allowing alpha-transparency with rgba() and hsla()."",""spec"":""http://www.w3.org/TR/css3-color/"",""status"":""rec"",""links"":[{""url"":""https://dev.opera.com/articles/view/color-in-opera-10-hsl-rgb-and-alpha-transparency/"",""title"":""Dev.Opera article""},{""url"":""http://www.css3files.com/color/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/color#RGBA_Notation"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":95.55,""usage_perc_a"":0.02,""ucprefix"":false,""parent"":"""",""keywords"":""rgb,hsl,rgba,hsla"",""ie_id"":"""",""chrome_id"":""""},""css3-boxsizing"":{""title"":""CSS3 Box-sizing"",""description"":""Method of specifying whether or not an element's borders and padding should be included in size units"",""spec"":""http://www.w3.org/TR/css3-ui/#box-sizing"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/En/CSS/Box-sizing"",""title"":""MDN article""},{""url"":""http://www.456bereastreet.com/archive/201104/controlling_width_with_css3_box-sizing/"",""title"":""Blog post""},{""url"":""https://github.com/Schepp/box-sizing-polyfill"",""title"":""Polyfill for IE""},{""url"":""http://css-tricks.com/box-sizing/"",""title"":""CSS Tricks""},{""url"":""http://docs.webplatform.org/wiki/css/properties/box-sizing"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Firefox currently also supports the `padding-box` in addition to `content-box` and `border-box`, though this value has been removed from the specification."",""notes_by_num"":{},""usage_perc_y"":97.54,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""border-box,content-box"",""ie_id"":"""",""chrome_id"":""""},""css-mediaqueries"":{""title"":""CSS3 Media Queries"",""description"":""Method of applying styles based on media information. Includes things like page and device dimensions"",""spec"":""http://www.w3.org/TR/css3-mediaqueries/"",""status"":""rec"",""links"":[{""url"":""http://ie.microsoft.com/testdrive/HTML5/85CSS3_MediaQueries/"",""title"":""IE demo page with information""},{""url"":""http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries"",""title"":""Media Queries tutorial""},{""url"":""https://github.com/scottjehl/Respond"",""title"":""Polyfill for IE""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@media"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #1 #2"",""3.2"":""a #1 #2"",""4"":""y #1"",""5"":""y #1"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y #1"",""4.0-4.1"":""y #1"",""4.2-4.3"":""y #1"",""5.0-5.1"":""y #1"",""6.0-6.1"":""y #1"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y #1"",""2.2"":""y #1"",""2.3"":""y #1"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support nested media queries"",""2"":""Partial support refers to only acknowledging different media rules on page reload""},""usage_perc_y"":95.53,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""@media"",""ie_id"":"""",""chrome_id"":""""},""multicolumn"":{""title"":""CSS3 Multiple column layout"",""description"":""Method of flowing information in multiple columns"",""spec"":""http://www.w3.org/TR/css3-multicol/"",""status"":""cr"",""links"":[{""url"":""https://dev.opera.com/articles/view/css3-multi-column-layout/"",""title"":""Dev.Opera article""},{""url"":""http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/an-introduction-to-the-css3-multiple-column-layout-module/"",""title"":""Introduction page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/column-width"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/BetleyWhitehorne/CSS3MultiColumn"",""title"":""Polyfill""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a x"",""3"":""a x"",""3.5"":""a x"",""3.6"":""a x"",""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x"",""38"":""a x"",""39"":""a x"",""40"":""a x"",""41"":""a x"",""42"":""a x""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x"",""38"":""a x"",""39"":""a x"",""40"":""a x"",""41"":""a x"",""42"":""a x"",""43"":""a x"",""44"":""a x"",""45"":""a x"",""46"":""a x"",""47"":""a x""},""safari"":{""3.1"":""a x"",""3.2"":""a x"",""4"":""a x"",""5"":""a x"",""5.1"":""a x"",""6"":""a x"",""6.1"":""a x"",""7"":""a x"",""7.1"":""a x"",""8"":""a x"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""a x"",""6.0-6.1"":""a x"",""7.0-7.1"":""a x"",""8"":""a x"",""8.1-8.4"":""a x"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""40"":""a x""},""bb"":{""7"":""a x"",""10"":""a x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""a x""},""and_chr"":{""42"":""a x""},""and_ff"":{""38"":""a x""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a x""}},""notes"":""Partial support refers to not supporting the `break-before`, `break-after`, `break-inside` properties. Webkit browsers do have equivalent support for the non-standard `-webkit-column-break-*` properties while Firefox supports `page-break-*` to accomplish the same result (but only the `auto` and `always' values)."",""notes_by_num"":{},""usage_perc_y"":14.56,""usage_perc_a"":79.47,""ucprefix"":false,""parent"":"""",""keywords"":""column-count"",""ie_id"":""multicolumnfullsupport"",""chrome_id"":""6526151266664448""},""border-radius"":{""title"":""CSS3 Border-radius (rounded corners)"",""description"":""Method of making the border corners round"",""spec"":""http://www.w3.org/TR/css3-background/#the-border-radius"",""status"":""cr"",""links"":[{""url"":""http://border-radius.com"",""title"":""Border-radius CSS Generator""},{""url"":""http://muddledramblings.com/table-of-css3-border-radius-compliance"",""title"":""Detailed compliance table""},{""url"":""http://www.css3files.com/border/#borderradius"",""title"":""Information page""},{""url"":""http://css3pie.com/"",""title"":""Polyfill which includes border-radius""},{""url"":""http://docs.webplatform.org/wiki/css/properties/border-radius"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y x"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y #1"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Safari 6.1 and earlier did not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128""},""usage_perc_y"":90.82,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""roundedcorners, border radius,-moz-border-radius"",""ie_id"":"""",""chrome_id"":""""},""transforms2d"":{""title"":""CSS3 2D Transforms"",""description"":""Method of transforming an element including rotating, scaling, etc. Includes support for `transform` as well as `transform-origin` properties."",""spec"":""http://www.w3.org/TR/css3-2d-transforms/"",""status"":""wd"",""links"":[{""url"":""http://www.westciv.com/tools/transforms/"",""title"":""Live editor""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/transform"",""title"":""MDN article""},{""url"":""http://www.webresourcesdepot.com/cross-browser-css-transforms-csssandpaper/"",""title"":""Workaround script for IE""},{""url"":""http://www.css3files.com/transform/"",""title"":""Information page""},{""url"":""http://www.useragentman.com/IETransformsTranslator/"",""title"":""Converter for IE""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/css/transforms/transform"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y x"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y x"",""10.6"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""The scale transform can be emulated in IE < 9 using Microsoft's \""zoom\"" extension, others are (not easily) possible using the MS Matrix filter"",""notes_by_num"":{},""usage_perc_y"":90.79,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""transformation,translate,rotation,rotate,scale,css-transforms,transform-origin"",""ie_id"":""transforms"",""chrome_id"":""6437640580628480""},""use-strict"":{""title"":""ECMAScript 5 Strict Mode"",""description"":""Method of placing code in a \""strict\"" operating context."",""spec"":""http://ecma-international.org/ecma-262/5.1/#sec-14.1"",""status"":""other"",""links"":[{""url"":""http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/"",""title"":""Information page""},{""url"":""http://javascriptweblog.wordpress.com/2011/05/03/javascript-strict-mode/"",""title"":""Article with test suite""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""a #1"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older Safari refers to strict mode still accepting a lot of JS that should be considered invalid.""},""usage_perc_y"":88.58,""usage_perc_a"":0.35,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""devicepixelratio"":{""title"":""Window.devicePixelRatio"",""description"":""Read-only property that returns the ratio of the (vertical) size of one physical pixel on the current display device to the size of one CSS pixel."",""spec"":""http://dev.w3.org/csswg/cssom-view/#dom-window-devicepixelratio"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio"",""title"":""MDN""}],""categories"":[""CSS"",""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""As the page is zoomed in the number of device pixels that one CSS pixel covers increases, and therefore the value of devicePixelRatio will also increase."",""notes_by_num"":{},""usage_perc_y"":92.18,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""device,pixel,ratio,size"",""ie_id"":"""",""chrome_id"":""""},""transforms3d"":{""title"":""CSS3 3D Transforms"",""description"":""Method of transforming an element in the third dimension using the `transform` property. Includes support for the `perspective` property to set the perspective in z-space and the `backface-visibility` property to toggle display of the reverse side of a 3D-transformed element."",""spec"":""http://www.w3.org/TR/css3-3d-transforms/"",""status"":""wd"",""links"":[{""url"":""http://css3.bradshawenterprises.com/flip/"",""title"":""Multi-browser demo""},{""url"":""http://hacks.mozilla.org/2011/10/css-3d-transformations-in-firefox-nightly/"",""title"":""Mozilla hacks article""},{""url"":""http://thewebrocks.com/demos/3D-css-tester/"",""title"":""3D CSS Tester""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-transform"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/css/transforms/transform"",""title"":""WebPlatform Docs""},{""url"":""http://desandro.github.io/3dtransforms/"",""title"":""Intro to CSS 3D transforms""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE refers to not supporting [the transform-style: preserve-3d property](http://msdn.microsoft.com/en-us/library/ie/hh673529%28v=vs.85%29.aspx#the_ms_transform_style_property). This prevents nesting 3D transformed elements.""},""usage_perc_y"":79.06,""usage_perc_a"":9.66,""ucprefix"":false,""parent"":"""",""keywords"":""css 3d,3dtransforms,translate3d,backface visibility,perspective,transform-origin"",""ie_id"":""transforms,csstransformspreserve3d"",""chrome_id"":""6437640580628480""},""sharedworkers"":{""title"":""Shared Web Workers"",""description"":""Method of allowing multiple scripts to communicate with a single web worker."",""spec"":""https://html.spec.whatwg.org/multipage/workers.html#shared-workers-introduction"",""status"":""ls"",""links"":[{""url"":""http://www.sitepoint.com/javascript-shared-web-workers-html5/"",""title"":""Sitepoint article""},{""url"":""http://greenido.wordpress.com/2011/11/03/web-workers-part-3-out-of-3-shared-wrokers/"",""title"":""Blog post""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":48.44,""usage_perc_a"":0,""ucprefix"":false,""parent"":""webworkers"",""keywords"":""shared worker"",""ie_id"":""sharedwebworkers"",""chrome_id"":""""},""css-hyphens"":{""title"":""CSS Hyphenation"",""description"":""Method of controlling when words at the end of lines should be hyphenated using the \""hyphens\"" property."",""spec"":""http://www.w3.org/TR/css3-text/#hyphenation"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/CSS/hyphens"",""title"":""MDN article""},{""url"":""http://blog.fontdeck.com/post/9037028497/hyphens"",""title"":""Blog post""},{""url"":""http://docs.webplatform.org/wiki/css/properties/hyphens"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x""},""edge"":{""1"":""y x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x""}},""notes"":""Chrome and Android 4.0 Browser support \""-webkit-hyphens: none\"", but not the \""auto\"" property. It is [advisable to set the @lang attribute](http://blog.adrianroselli.com/2015/01/on-use-of-lang-attribute.html) on the HTML element to enable hyphenation support and improve accessibility."",""notes_by_num"":{},""usage_perc_y"":30.1,""usage_perc_a"":5.94,""ucprefix"":false,""parent"":"""",""keywords"":""hyphen,shy"",""ie_id"":"""",""chrome_id"":""""},""css-transitions"":{""title"":""CSS3 Transitions"",""description"":""Simple method of animating certain properties of an element, with ability to define property, duration, delay and timing function. "",""spec"":""http://www.w3.org/TR/css3-transitions/"",""status"":""wd"",""links"":[{""url"":""http://www.webdesignerdepot.com/2010/01/css-transitions-101/"",""title"":""Article on usage""},{""url"":""http://www.css3files.com/transition/"",""title"":""Information page""},{""url"":""http://www.the-art-of-web.com/css/timing-function/"",""title"":""Examples on timing functions""},{""url"":""http://www.opera.com/docs/specs/presto2.12/css/transitions/"",""title"":""Animation of property types support in Opera""},{""url"":""http://docs.webplatform.org/wiki/css/properties/transition"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y x"",""10.6"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y x"",""10"":""y""},""op_mob"":{""10"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""12"":""y x"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""Support listed is for `transition` properties as well as the `transitionend` event. The prefixed name in WebKit browsers is `webkitTransitionEnd`"",""notes_by_num"":{},""usage_perc_y"":89.25,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""css transition,transitionend,transition-property,transition-duration,transition-timing-function,transition-delay"",""ie_id"":"""",""chrome_id"":""""},""font-feature"":{""title"":""CSS font-feature-settings"",""description"":""Method of applying advanced typographic and language-specific font features to supported OpenType fonts."",""spec"":""http://w3.org/TR/css3-fonts/#font-rend-props"",""status"":""wd"",""links"":[{""url"":""http://ie.microsoft.com/testdrive/Graphics/opentype/"",""title"":""Demo pages (IE/Firefox only)""},{""url"":""http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/"",""title"":""Mozilla hacks article""},{""url"":""http://html5accessibility.com/"",""title"":""Detailed tables on accessability support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/font-feature-settings"",""title"":""WebPlatform Docs""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-feature-settings"",""title"":""Mozilla Developer Network""},{""url"":""https://www.microsoft.com/typography/otspec/featuretags.htm"",""title"":""OpenType layout feature tag registry""},{""url"":""http://help.typekit.com/customer/portal/articles/1789736-syntax-for-opentype-features-in-css#salt"",""title"":""Syntax for OpenType features in CSS (Adobe Typekit Help)""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""Whenever possible, font-variant shorthand property or an associated longhand property, font-variant-ligatures, font-variant-caps, font-variant-east-asian, font-variant-alternates, font-variant-numeric or font-variant-position should be used. This property is a low-level feature designed to handle special cases where no other way to enable or access an OpenType font feature exists. In particular, this CSS property shouldn't be used to enable small caps."",""notes_by_num"":{""1"":""From Gecko 2.0 (Firefox 4.0) to Gecko 14.0 (Firefox 14.0) included, Gecko supported an older syntax, slightly different from the modern one: http://hacks.mozilla.org/2010/11/firefox-4-font-feature-support/"",""2"":""Partial support in older Chrome versions refers to lacking support in Mac OS X.""},""usage_perc_y"":74.22,""usage_perc_a"":0.83,""ucprefix"":false,""parent"":"""",""keywords"":""font-feature,font-feature-settings,kern,kerning,font-variant-alternates,ligatures,font-variant-ligatures"",""ie_id"":"""",""chrome_id"":""""},""css-animation"":{""title"":""CSS3 Animation"",""description"":""Complex method of animating certain properties of an element"",""spec"":""http://www.w3.org/TR/css3-animations/"",""status"":""wd"",""links"":[{""url"":""http://robertnyman.com/2010/05/06/css3-animations/"",""title"":""Blog post on usage""},{""url"":""http://www.css3files.com/animation/"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/animations"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y x"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Android browser refers to buggy behavior in different scenarios.""},""usage_perc_y"":89.09,""usage_perc_a"":0.07,""ucprefix"":false,""parent"":"""",""keywords"":""animations,css-animations,keyframe,keyframes"",""ie_id"":"""",""chrome_id"":""""},""css-gradients"":{""title"":""CSS Gradients"",""description"":""Method of defining a linear or radial color gradient as a CSS image."",""spec"":""http://www.w3.org/TR/css3-images/"",""status"":""cr"",""links"":[{""url"":""http://www.colorzilla.com/gradient-editor/"",""title"":""Cross-browser editor""},{""url"":""http://www.css3files.com/gradient/"",""title"":""Information page""},{""url"":""http://css3pie.com/"",""title"":""Tool to emulate support in IE""},{""url"":""http://docs.webplatform.org/wiki/css/functions/linear-gradient"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x"",""5"":""a x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""a x #1"",""11.5"":""a x #1"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a x"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a x #1"",""11.5"":""a x #1"",""12"":""y x"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""Syntax used by browsers with prefixed support may be incompatible with that for proper support.\r\n\r\nSupport can be somewhat emulated in older IE versions using the non-standard \""gradient\"" filter. \r\n\r\nFirefox 10+, Opera 11.6+, Chrome 26+ and IE10+ also support the new \""to (side)\"" syntax."",""notes_by_num"":{""1"":""Partial support in Opera 11.10 and 11.50 also refers to only having support for linear gradients.""},""usage_perc_y"":88.89,""usage_perc_a"":0.37,""ucprefix"":false,""parent"":"""",""keywords"":""linear,linear-gradient,gradiant"",""ie_id"":""gradients"",""chrome_id"":""5785905063264256""},""css-canvas"":{""title"":""CSS Canvas Drawings"",""description"":""Method of using HTML5 Canvas as a background image. Not currently part of any specification."",""spec"":""http://webkit.org/blog/176/css-canvas-drawing/"",""status"":""unoff"",""links"":[{""url"":""http://webkit.org/blog/176/css-canvas-drawing/"",""title"":""Webkit blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""u"",""41"":""u"",""42"":""u""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""A similar effect can be achieved in Firefox 4+ using the -moz-element() background property"",""notes_by_num"":{},""usage_perc_y"":68.8,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-reflections"":{""title"":""CSS Reflections"",""description"":""Method of displaying a reflection of an element"",""spec"":""http://webkit.org/blog/182/css-reflections/"",""status"":""unoff"",""links"":[{""url"":""http://webkit.org/blog/182/css-reflections/"",""title"":""Webkit blog post""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/7930470-support-css-reflections"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Similar effect can be achieved in Firefox 4+ using the -moz-element() background property"",""notes_by_num"":{},""usage_perc_y"":62.86,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""box-reflect"",""ie_id"":"""",""chrome_id"":""5627300510957568""},""css-masks"":{""title"":""CSS Masks"",""description"":""Method of displaying part of an element, using a selected image as a mask"",""spec"":""http://www.w3.org/TR/css-masking-1/"",""status"":""cr"",""links"":[{""url"":""http://docs.webplatform.org/wiki/css/properties/mask"",""title"":""WebPlatform Docs""},{""url"":""http://www.html5rocks.com/en/tutorials/masking/adobe/"",""title"":""HTML5 Rocks article""},{""url"":""http://thenittygritty.co/css-masking"",""title"":""Detailed blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #2"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""a #2"",""39"":""a #2"",""40"":""a #2"",""41"":""a #2"",""42"":""a #2""},""chrome"":{""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x #1"",""5"":""a x #1"",""5.1"":""a x #1"",""6"":""a x #1"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""a x #1"",""8"":""a x #1"",""9"":""a x #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""5.0-5.1"":""a x #1"",""6.0-6.1"":""a x #1"",""7.0-7.1"":""a x #1"",""8"":""a x #1"",""8.1-8.4"":""a x #1"",""9"":""a x #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""a x #1"",""4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""4.4"":""a x #1"",""4.4.3-4.4.4"":""a x #1"",""40"":""a x #1""},""bb"":{""7"":""a x #1"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a x #1""},""and_chr"":{""42"":""a x #1""},""and_ff"":{""38"":""a #2""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x #1""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in WebKit/Blink browsers refers to supporting the mask-image and mask-box-image properties, but lacking support for other parts of the spec."",""2"":""Partial support in Firefox refers to only support for inline SVG mask elements i.e. mask: url(#foo).""},""usage_perc_y"":0,""usage_perc_a"":79.42,""ucprefix"":false,""parent"":"""",""keywords"":""clip,clip-path,clip-rule,mask,mask-border,mask-clip,mask-image,mask-mode,mask-type"",""ie_id"":""masks"",""chrome_id"":""5381559662149632""},""console-basic"":{""title"":""Basic console logging functions"",""description"":""Method of outputting data to the browser's console, intended for development purposes."",""spec"":""https://github.com/DeveloperToolsWG/console-object/blob/master/api.md"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Console"",""title"":""MDN article""},{""url"":""https://developer.chrome.com/devtools/docs/console-api"",""title"":""Chrome console reference""},{""url"":""https://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/Console/Console.html"",""title"":""Safari console reference""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y #3"",""7.0-7.1"":""y #3"",""8"":""y #3"",""8.1-8.4"":""y #3"",""9"":""y #3""},""op_mini"":{""5.0-8.0"":""n #2""},""android"":{""2.1"":""y #4"",""2.2"":""y #4"",""2.3"":""y #4"",""3"":""y #4"",""4"":""y #4"",""4.1"":""y #4"",""4.2-4.3"":""y #4"",""4.4"":""y #4"",""4.4.3-4.4.4"":""y #4"",""40"":""y #4""},""bb"":{""7"":""n #2"",""10"":""n #2""},""op_mob"":{""10"":""n"",""11"":""n #2"",""11.1"":""n #2"",""11.5"":""n #2"",""12"":""n #2"",""12.1"":""n #2"",""30"":""n #2""},""and_chr"":{""42"":""y #4""},""and_ff"":{""38"":""y #5""},""ie_mob"":{""10"":""n #2"",""11"":""n #2""},""and_uc"":{""9.9"":""n #2""}},""notes"":""The basic functions that this information refers to include `console.log`, `console.info`, `console.warn`, `console.error`."",""notes_by_num"":{""1"":""Only supports console functions when developer tools are open, otherwise the `console` object is undefined and any calls will throw errors."",""2"":""Allows `console` functions to be used without throwing errors, but does not appear to output the data anywhere."",""3"":""Log output on iOS 6+ Safari can only be seen by connecting to a Mac and using the [Safari debugger](https://developer.apple.com/safari/tools/)."",""4"":""Log output on older Android browsers can be retrieved via Android's `logcat` command or using Chrome Developer Tools in Android 4.4+/Chrome for Android [see details](http://developer.android.com/guide/webapps/debugging.html)"",""5"":""Log output on Firefox for Android can be [accessed using WebIDE](https://developer.mozilla.org/en-US/docs/Tools/Remote_Debugging/Debugging_Firefox_for_Android_with_WebIDE)""},""usage_perc_y"":82.33,""usage_perc_a"":3.44,""ucprefix"":false,""parent"":"""",""keywords"":""console.log,console.info,console.warn,console.error,window.console"",""ie_id"":"""",""chrome_id"":""""},""svg"":{""title"":""SVG (basic support)"",""description"":""Method of displaying basic Vector Graphics features using the embed or object elements. Refers to the SVG 1.1 spec."",""spec"":""http://www.w3.org/TR/SVG/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"",""title"":""Wikipedia""},{""url"":""http://www.alistapart.com/articles/using-svg-for-flexible-scalable-and-fun-backgrounds-part-i"",""title"":""A List Apart article""},{""url"":""http://svg-wow.org/"",""title"":""SVG showcase site""},{""url"":""http://code.google.com/p/svgweb/"",""title"":""SVG Web: Flash-based polyfill""},{""url"":""http://svg-edit.googlecode.com"",""title"":""Web-based SVG editor""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg"",""title"":""has.js test""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #2"",""10"":""y #2"",""11"":""y #2""},""edge"":{""1"":""y #2""},""firefox"":{""2"":""a"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y #2"",""11"":""y #2""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Android 3 & 4 refers to not supporting masking."",""2"":""IE9-11 desktop & mobile don't properly scale SVG files.  [Adding height, width, viewBox, and CSS rules](http://codepen.io/tomByrer/pen/qEBbzw?editors=110) seem to be the best workaround.""},""usage_perc_y"":93.05,""usage_perc_a"":2.46,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""svg-css"":{""title"":""SVG in CSS backgrounds"",""description"":""Method of using SVG images as CSS backgrounds"",""spec"":""http://www.w3.org/TR/css3-background/#background-image"",""status"":""cr"",""links"":[{""url"":""http://www.sitepoint.com/a-farewell-to-css3-gradients/"",""title"":""Tutorial for advanced effects""}],""categories"":[""CSS3"",""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""a #1"",""4"":""a #1"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a #2"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in iOS Safari and older Safari versions refers to failing to support tiling or the background-position property."",""2"":""Partial support in older Firefox and Opera Mini/Mobile refers to SVG images being blurry when scaled.""},""usage_perc_y"":90.13,""usage_perc_a"":5.27,""ucprefix"":false,""parent"":"""",""keywords"":""svg-in-css,svgincss,css-svg"",""ie_id"":"""",""chrome_id"":""""},""svg-smil"":{""title"":""SVG SMIL animation"",""description"":""Method of using animation elements to animate SVG images"",""spec"":""http://www.w3.org/TR/SVG/animate.html"",""status"":""rec"",""links"":[{""url"":""http://svg-wow.org/blog/category/animation/"",""title"":""Examples on SVG WOW""},{""url"":""https://developer.mozilla.org/en/SVG/SVG_animation_with_SMIL"",""title"":""MDN article""},{""url"":""http://leunen.me/fakesmile/"",""title"":""JS library to support SMIL in SVG""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#svg-smil"",""title"":""has.js test""},{""url"":""https://github.com/madsgraphics/SVGEventListener"",""title"":""Polyfill for SMIL animate events on SVG""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""1"":""p""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""a #1"",""5"":""a #1"",""5.1"":""a #1"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older Safari versions refers to not working in HTML files or CSS background images.""},""usage_perc_y"":79.12,""usage_perc_a"":0.43,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""svgsmilanimation"",""chrome_id"":""""},""svg-fonts"":{""title"":""SVG fonts"",""description"":""Method of using fonts defined as SVG shapes. Considered among a number of browser vendors as a deprecated feature with support being removed."",""spec"":""http://www.w3.org/TR/SVG/fonts.html"",""status"":""rec"",""links"":[{""url"":""http://jeremie.patonnier.net/post/2011/02/07/Why-are-SVG-Fonts-so-different"",""title"":""Blog post""},{""url"":""http://opentype.info/blog/2010/04/13/the-ipad-and-svg-fonts-in-mobile-safari/"",""title"":""Blog post on usage for iPad""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""n #1"",""39"":""n #1"",""40"":""n #1"",""41"":""n #1"",""42"":""n #1"",""43"":""n #1"",""44"":""n #1"",""45"":""n #1"",""46"":""n #1"",""47"":""n #1""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""n #1"",""26"":""n #1"",""27"":""n #1"",""28"":""n #1"",""29"":""n #1"",""30"":""n #1"",""31"":""n #1"",""32"":""n #1""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""n""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""n #1""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Chrome 38 and newer support SVG fonts only on Windows Vista and XP."",""2"":""Supported in Opera Mini in SVG images only, not in HTML.""},""usage_perc_y"":27.15,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""5930075908210688""},""svg-filters"":{""title"":""SVG filters"",""description"":""Method of using photoshop-like effects on SVG objects including blurring and color manipulation."",""spec"":""http://www.w3.org/TR/SVG/filters.html"",""status"":""rec"",""links"":[{""url"":""http://electricbeach.org/?p=950"",""title"":""Experiments with filter effects""},{""url"":""http://svg-wow.org/blog/category/filters/"",""title"":""SVG filter demos""},{""url"":""http://docs.webplatform.org/wiki/svg/elements/filter"",""title"":""WebPlatform Docs""},{""url"":""http://jorgeatgu.github.io/svg-filters/"",""title"":""SVG Filter effects""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":91.01,""usage_perc_a"":0.03,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""svg-html"":{""title"":""SVG effects for HTML"",""description"":""Method of using SVG transforms, filters, etc on HTML elements using either CSS or the foreignObject element"",""spec"":""http://www.w3.org/TR/SVG11/extend.html#ForeignObjectElement"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/SVG/Tutorial/Other_content_in_SVG"",""title"":""MDN Tutorial""},{""url"":""https://developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content"",""title"":""MDN Reference page""},{""url"":""http://www.w3.org/TR/filter-effects/"",""title"":""Filter Effects draft""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a""},""opera"":{""9"":""a"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""a""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Partial support refers to lack of filter support or buggy result from effects. A [CSS Filter Effects](http://www.w3.org/TR/filter-effects/) specification is in the works that would replace this method."",""notes_by_num"":{},""usage_perc_y"":10.62,""usage_perc_a"":70.85,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""svg-html5"":{""title"":""Inline SVG in HTML5"",""description"":""Method of using SVG tags directly in HTML documents. Requires HTML5 parser."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#svg-0"",""status"":""ls"",""links"":[{""url"":""http://hacks.mozilla.org/2010/05/firefox-4-the-html5-parser-inline-svg-speed-and-more/"",""title"":""Mozilla Hacks blog post""},{""url"":""http://samples.msdn.microsoft.com/ietestcenter/html5/svghtml_harness.htm?url=SVG_HTML_Elements_001"",""title"":""Test suite""}],""categories"":[""HTML5"",""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""1"":""y #1""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y #1"",""7"":""y #1"",""7.1"":""y #1"",""8"":""y #1"",""9"":""y #1""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""y #1"",""6.0-6.1"":""y #1"",""7.0-7.1"":""y #1"",""8"":""y #1"",""8.1-8.4"":""y #1"",""9"":""y #1""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y #1"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support CSS transforms on SVG elements (transform attribute can be used instead)""},""usage_perc_y"":95.14,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""canvas"":{""title"":""Canvas (basic support)"",""description"":""Method of generating fast, dynamic graphics using JavaScript."",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/Canvas_tutorial"",""title"":""Tutorial by Mozilla""},{""url"":""http://www.canvasdemos.com/"",""title"":""Showcase site""},{""url"":""http://glimr.rubyforge.org/cake/canvas.html"",""title"":""Animation kit""},{""url"":""http://diveintohtml5.info/canvas.html"",""title"":""Another tutorial""},{""url"":""http://explorercanvas.googlecode.com/"",""title"":""Implementation for Internet Explorer""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas"",""title"":""has.js test""}],""categories"":[""Canvas"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a #1"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a #2""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""For screen readers, IE, Chrome & Firefox support the [accessible canvas element sub-DOM](http://www.paciellogroup.com/blog/2012/06/html5-canvas-accessibility-in-firefox-13/).\r\nFirefox & Chrome also support the drawfocus ring."",""notes_by_num"":{""1"":""Does not support `toDataURL()`"",""2"":""Opera Mini supports the canvas element, but is unable to play animations or run other more complex applications.""},""usage_perc_y"":90.74,""usage_perc_a"":4.84,""ucprefix"":false,""parent"":"""",""keywords"":""toDataURL()"",""ie_id"":""canvas"",""chrome_id"":""5100084685438976""},""canvas-text"":{""title"":""Text API for Canvas"",""description"":""Method of displaying text on Canvas elements"",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#drawing-text-to-the-bitmap"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/Drawing_text_using_a_canvas#Additional_examples"",""title"":""Examples by Mozilla""},{""url"":""http://code.google.com/p/canvas-text/"",""title"":""Support library""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/graphics.js#canvas-text"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/canvas/CanvasRenderingContext2D/fillText"",""title"":""WebPlatform Docs""}],""categories"":[""Canvas"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":90.78,""usage_perc_a"":0,""ucprefix"":false,""parent"":""canvas"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""namevalue-storage"":{""title"":""Web Storage - name/value pairs"",""description"":""Method of storing data locally like cookies, but for larger amounts of data (sessionStorage and localStorage, used to fall under HTML5)."",""spec"":""http://www.w3.org/TR/webstorage/#storage"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API"",""title"":""MDN article""},{""url"":""http://code.google.com/p/sessionstorage/"",""title"":""Support library""},{""url"":""http://html5demos.com/storage"",""title"":""Simple demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-localstorage;native-sessionstorage"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/web-storage/Storage/localStorage"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":92.75,""usage_perc_a"":0.04,""ucprefix"":false,""parent"":"""",""keywords"":""webstorage,local storage"",""ie_id"":""webstorage"",""chrome_id"":""5345825534246912""},""sql-storage"":{""title"":""Web SQL Database"",""description"":""Method of storing data client-side, allows Sqlite database queries for access and manipulation"",""spec"":""http://www.w3.org/TR/webdatabase/"",""status"":""unoff"",""links"":[{""url"":""http://html5doctor.com/introducing-web-sql-databases/"",""title"":""HTML5 Doctor article""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-sql-db"",""title"":""has.js test""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""The Web SQL Database specification is no longer being maintained and support may be dropped in future versions."",""notes_by_num"":{},""usage_perc_y"":69.04,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""db-storage,websql"",""ie_id"":""websqldatabase"",""chrome_id"":""6330987952734208""},""indexeddb"":{""title"":""IndexedDB"",""description"":""Method of storing data client-side, allows indexed database queries."",""spec"":""http://www.w3.org/TR/IndexedDB/"",""status"":""cr"",""links"":[{""url"":""http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/"",""title"":""Mozilla Hacks article""},{""url"":""https://github.com/axemclion/IndexedDBShim"",""title"":""Polyfill for browsers supporting WebSQL""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-indexeddb"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/indexedDB"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""n"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""a #2"",""8"":""a #2"",""9"":""a #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9"":""a #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""p""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE 10 & 11 refers to a number of subfeatures [not being supported](http://codepen.io/cemerick/pen/Itymi)."",""2"":""Partial support in iOS 8 refers to [seriously buggy behavior](http://www.raymondcamden.com/2014/9/25/IndexedDB-on-iOS-8--Broken-Bad).""},""usage_perc_y"":59.46,""usage_perc_a"":18.58,""ucprefix"":false,""parent"":"""",""keywords"":""indexdb"",""ie_id"":""indexeddb"",""chrome_id"":""6507459568992256""},""online-status"":{""title"":""Online/offline status"",""description"":""Events to indicate when the user's connected (`online` and `offline` events) and the `navigator.onLine` property to see current status."",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#browser-state"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine.onLine#Specification"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #2"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""a #3"",""16"":""a #3"",""17"":""a #3"",""18"":""a #3"",""19"":""a #3"",""20"":""a #3"",""21"":""a #3"",""22"":""a #3"",""23"":""a #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""a #3"",""29"":""a #3"",""30"":""a #3"",""31"":""a #3"",""32"":""a #3"",""33"":""a #3"",""34"":""a #3"",""35"":""a #3"",""36"":""a #3"",""37"":""a #3"",""38"":""a #3"",""39"":""a #3"",""40"":""a #3"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""a"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #1"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #1""}},""notes"":""\""online\"" does not always mean connection to the internet, it can also just mean connection to some network.\r\n\r\nEarly versions of Chrome and Safari always reported \""true\"" for `navigator.onLine`"",""notes_by_num"":{""0"":""Safari 7.0 supports only the event listener on `window`, and not on `document.body`"",""1"":""Seems to support `navigator.onLine` but not `online`/`offline` events."",""2"":""IE8 only supports the `online`/`offline` events on `document.body`, rather than `window`."",""3"":""Desktop Firefox responds to the status of its \""Work Offline\"" mode. If not in that mode, `navigator.onLine` is always `true`, regardless of the actual network connectivity status. [See bug](https://bugzilla.mozilla.org/show_bug.cgi?id=654579) for details.""},""usage_perc_y"":73.91,""usage_perc_a"":18.56,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""eventsource"":{""title"":""Server-sent events"",""description"":""Method of continuously sending data from a server to the browser, rather than repeatedly requesting it (EventSource interface, used to fall under HTML5)"",""spec"":""http://www.w3.org/TR/eventsource/"",""status"":""pr"",""links"":[{""url"":""http://www.html5rocks.com/tutorials/eventsource/basics/"",""title"":""HTML5 Rocks tutorial""},{""url"":""http://samshull.blogspot.com/2010/10/ajax-push-in-ios-safari-and-chrome-with.html"",""title"":""Blog post with demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-eventsource"",""title"":""has.js test""},{""url"":""https://github.com/Yaffle/EventSource"",""title"":""Polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""a"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":76.95,""usage_perc_a"":0.05,""ucprefix"":false,""parent"":"""",""keywords"":""serversent,s-sent-events"",""ie_id"":""serversenteventseventsource"",""chrome_id"":""5311740673785856""},""x-doc-messaging"":{""title"":""Cross-document messaging"",""description"":""Method of sending information from a page on one domain to a page on a different one (using postMessage)"",""spec"":""https://html.spec.whatwg.org/multipage/comms.html#crossDocumentMessages"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.postMessage"",""title"":""MDN article""},{""url"":""http://html5demos.com/postmessage2"",""title"":""Simple demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-crosswindowmessaging"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/web-messaging/MessagePort/postMessage"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""a #2"",""11"":""a #2""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to only working in frames/iframes (not other tabs/windows). Also, objects cannot be sent using postMessage."",""2"":""Partial support refers to [limitations in certain conditions](http://stackoverflow.com/questions/16226924/is-cross-origin-postmessage-broken-in-ie10).""},""usage_perc_y"":84.41,""usage_perc_a"":13.1,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""postmessage"",""chrome_id"":""4786174115708928""},""sni"":{""title"":""Server Name Indication"",""description"":""An extension to the TLS computer networking protocol by which a client indicates which hostname it is attempting to connect to at the start of the handshaking process."",""spec"":""http://www.rfc-editor.org/rfc/rfc6066.txt"",""status"":""other"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Server_Name_Indication"",""title"":""Wikipedia""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Only supported on Windows Vista or above (not Windows XP)""},""usage_perc_y"":95.39,""usage_perc_a"":2.03,""ucprefix"":false,""parent"":"""",""keywords"":""sni"",""ie_id"":"""",""chrome_id"":""""},""datauri"":{""title"":""Data URIs"",""description"":""Method of embedding images and other files in webpages as a string of text, generally using base64 encoding."",""spec"":""http://www.ietf.org/rfc/rfc2397.txt"",""status"":""other"",""links"":[{""url"":""http://css-tricks.com/data-uris/"",""title"":""Information page""},{""url"":""http://en.wikipedia.org/wiki/data_URI_scheme"",""title"":""Wikipedia""},{""url"":""http://www.websiteoptimization.com/speed/tweak/inline-images/"",""title"":""Data URL converter""},{""url"":""http://klevjers.com/papers/phishing.pdf"",""title"":""Information on security issues""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #2"",""10"":""a"",""11"":""a""},""edge"":{""1"":""a""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Support is limited to images and linked resources like CSS files, not HTML or JS files. Max URI length is 32KB."",""2"":""Support is limited to images and linked resources like CSS or JS, not HTML files. Maximum size limit is 4GB.""},""usage_perc_y"":84.44,""usage_perc_a"":13.1,""ucprefix"":false,""parent"":"""",""keywords"":""data url,datauris,data uri,dataurl,dataurls,base64"",""ie_id"":"""",""chrome_id"":""""},""mathml"":{""title"":""MathML"",""description"":""Special tags that allow mathematical formulas and notations to be written on web pages."",""spec"":""http://www.w3.org/TR/MathML/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/MathML"",""title"":""Wikipedia""},{""url"":""http://www.mozilla.org/projects/mathml/demo/"",""title"":""MathML demos""},{""url"":""http://www.mathjax.org"",""title"":""Cross-browser support script""},{""url"":""https://developer.mozilla.org/en/MathML/Element"",""title"":""MDN element reference""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""y #1"",""3"":""y #1"",""3.5"":""y #1"",""3.6"":""y #1"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""y"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""p""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""40"":""p""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""p""},""and_chr"":{""42"":""p""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a""}},""notes"":""Opera's support is limited to a CSS profile of MathML. Support was added in Chrome 24, but removed afterwards due to instability."",""notes_by_num"":{""1"":""Before version 4, Firefox only supports the XHTML notation""},""usage_perc_y"":21.45,""usage_perc_a"":6.19,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""mathml"",""chrome_id"":""5240822173794304""},""css-featurequeries"":{""title"":""CSS Feature Queries"",""description"":""CSS Feature Queries allow authors to condition rules based on whether particular property declarations are supported in CSS using the @supports at rule."",""spec"":""http://www.w3.org/TR/css3-conditional/#at-supports"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/@supports"",""title"":""MDN Article""},{""url"":""http://mcc.id.au/blog/2012/08/supports"",""title"":""@supports in Firefox""},{""url"":""http://dabblet.com/gist/3895764"",""title"":""Test case""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@supports"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""See also the [CSS.supports() DOM API](#feat=css-supports-api)"",""notes_by_num"":{},""usage_perc_y"":59.09,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""supports,conditional"",""ie_id"":""conditionalrules"",""chrome_id"":""4993981813358592""},""xhtml"":{""title"":""XHTML served as application/xhtml+xml"",""description"":""A strict form of HTML, and allows embedding of other XML languages"",""spec"":""http://www.w3.org/TR/xhtml1/"",""status"":""rec"",""links"":[{""url"":""http://en.wikipedia.org/wiki/XHTML"",""title"":""Wikipedia""},{""url"":""http://www.xmlplease.com/xhtml/xhtml5polyglot/"",""title"":""Information on XHTML5""},{""url"":""http://docs.webplatform.org/wiki/concepts/internet_and_web/the_web_standards_model#What_is_XHTML.3F"",""title"":""WebPlatform Docs""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""The XHTML syntax is very close to HTML, and thus is almost always ([incorrectly](https://developer.mozilla.org/en-US/docs/XHTML#MIME_type_versus_DOCTYPE)) served as text/html on the web."",""notes_by_num"":{},""usage_perc_y"":95.58,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""xhtml+xml"",""ie_id"":"""",""chrome_id"":""""},""xhtmlsmil"":{""title"":""XHTML+SMIL animation"",""description"":""Method of using SMIL animation in web pages"",""spec"":""http://www.w3.org/TR/XHTMLplusSMIL/"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/XHTML%2BSMIL"",""title"":""Wikipedia""},{""url"":""http://leunen.me/fakesmile/"",""title"":""JS library to support XHTML+SMIL""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""p""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9"":""p""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""40"":""p""},""bb"":{""7"":""p"",""10"":""p""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""p""},""and_chr"":{""42"":""p""},""and_ff"":{""38"":""p""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""p""}},""notes"":""Internet Explorer supports the W3C proposal HTML+TIME, which is largely the same as XHTML+SMIL"",""notes_by_num"":{},""usage_perc_y"":0,""usage_perc_a"":2.1,""ucprefix"":false,""parent"":""xhtml"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""wai-aria"":{""title"":""WAI-ARIA Accessibility features"",""description"":""Method of providing ways for people with disabilities to use dynamic web content and web applications."",""spec"":""http://www.w3.org/TR/wai-aria/"",""status"":""rec"",""links"":[{""url"":""http://www.w3.org/WAI/intro/aria"",""title"":""Information page""},{""url"":""http://www.paciellogroup.com/blog/2011/10/browser-assistive-technology-tests-redux/"",""title"":""Links to various test results""},{""url"":""http://en.wikipedia.org/wiki/WAI-ARIA"",""title"":""Wikipedia""},{""url"":""http://www.alistapart.com/articles/the-accessibility-of-wai-aria/"",""title"":""ALA Article""},{""url"":""http://zufelt.ca/blog/are-you-confused-html5-and-wai-aria-yet"",""title"":""HTML5/WAI-ARIA information""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""1"":""a""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""a"",""3.6"":""a"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a""},""opera"":{""9"":""n"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""a""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""n""}},""notes"":""Support for ARIA is rather complex and currently is not fully supported in any browser. For detailed information on partial support see the [ARIA 1.0 Implementation Report](http://www.w3.org/WAI/ARIA/1.0/CR/implementation-report)\r\n"",""notes_by_num"":{},""usage_perc_y"":0,""usage_perc_a"":88.97,""ucprefix"":false,""parent"":"""",""keywords"":""wai,aria"",""ie_id"":"""",""chrome_id"":""""},""geolocation"":{""title"":""Geolocation"",""description"":""Method of informing a website of the user's geographical location"",""spec"":""http://www.w3.org/TR/geolocation-API/"",""status"":""cr"",""links"":[{""url"":""http://html5demos.com/geo"",""title"":""Simple demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-geolocation"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/geolocation"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""n"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":90.72,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""geolocation"",""chrome_id"":""6348855016685568""},""flexbox"":{""title"":""Flexible Box Layout Module"",""description"":""Method of positioning elements in horizontal or vertical stacks. Support includes the support for the all properties prefixed with `flex` as well as `display: flex`, `display: inline-flex`, `align-content`, `align-items`, `align-self`, `justify-content` and `order`."",""spec"":""http://www.w3.org/TR/css3-flexbox/"",""status"":""wd"",""links"":[{""url"":""http://bennettfeely.com/flexplorer/"",""title"":""Flexbox CSS generator""},{""url"":""http://www.adobe.com/devnet/html5/articles/working-with-flexbox-the-new-spec.html"",""title"":""Article on using the latest spec""},{""url"":""https://dev.opera.com/articles/view/advanced-cross-browser-flexbox/"",""title"":""Tutorial on cross-browser support""},{""url"":""http://philipwalton.github.io/solved-by-flexbox/"",""title"":""Examples on how to solve common layout problems with flexbox""},{""url"":""http://css-tricks.com/snippets/css/a-guide-to-flexbox/"",""title"":""A Complete Guide to Flexbox""},{""url"":""http://the-echoplex.net/flexyboxes/"",""title"":""Flexbox playground and code generator""},{""url"":""https://github.com/philipwalton/flexbugs"",""title"":""Flexbugs: Repo for flexbox bugs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #2"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a x #1"",""3"":""a x #1"",""3.5"":""a x #1"",""3.6"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a #3"",""23"":""a #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a x #1"",""3.2"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""5.1"":""a x #1"",""6"":""a x #1"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a x #1"",""4.0-4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""5.0-5.1"":""a x #1"",""6.0-6.1"":""a x #1"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""a x #1"",""2.2"":""a x #1"",""2.3"":""a x #1"",""3"":""a x #1"",""4"":""a x #1"",""4.1"":""a x #1"",""4.2-4.3"":""a x #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a x #1"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a x #2"",""11"":""y""},""and_uc"":{""9.9"":""a x #1""}},""notes"":""Most partial support refers to supporting an [older version](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/) of the specification or an [older syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)."",""notes_by_num"":{""1"":""Only supports the [old flexbox](http://www.w3.org/TR/2009/WD-css3-flexbox-20090723) specification and does not support wrapping."",""2"":""Only supports the [2012 syntax](http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/)"",""3"":""Does not support flex-wrap or flex-flow properties""},""usage_perc_y"":82.42,""usage_perc_a"":11.57,""ucprefix"":false,""parent"":"""",""keywords"":""flex-box,flex-direction,flex-wrap,flex-flow,flex-grow,flex-basis"",""ie_id"":""flexbox"",""chrome_id"":""4837301406400512""},""webgl"":{""title"":""WebGL - 3D Canvas graphics"",""description"":""Method of generating dynamic 3D graphics using JavaScript, accelerated through hardware"",""spec"":""https://www.khronos.org/registry/webgl/specs/1.0/"",""status"":""other"",""links"":[{""url"":""http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation"",""title"":""Instructions on enabling WebGL""},{""url"":""http://www.khronos.org/webgl/wiki/Tutorial"",""title"":""Tutorial""},{""url"":""http://hacks.mozilla.org/2009/12/webgl-draft-released-today/"",""title"":""Firefox blog post""},{""url"":""http://webkit.org/blog/603/webgl-now-available-in-webkit-nightlies/"",""title"":""Webkit blog post""},{""url"":""https://github.com/iewebgl/iewebgl"",""title"":""Polyfill for IE""}],""categories"":[""Canvas""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""y #1""},""edge"":{""1"":""y #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""a #1"",""12.1"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""a""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""a"",""12.1"":""a"",""30"":""y""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""a""},""ie_mob"":{""10"":""p"",""11"":""y #1""},""and_uc"":{""9.9"":""y #1""}},""notes"":""Support listed as \""partial\"" refers to the fact that not all users with these browsers have WebGL access. This is due to the additional requirement for users to have [up to date video drivers](http://www.khronos.org/webgl/wiki/BlacklistsAndWhitelists). This problem was [solved in Chrome on Windows](http://blog.chromium.org/2012/02/gpu-accelerating-2d-canvas-and-enabling.html) as of version 18.\r\n\r\nNote that WebGL is part of the [Khronos Group](http://www.khronos.org/webgl/), not the W3C."",""notes_by_num"":{""1"":""WebGL context is accessed from \""experimental-webgl\"" rather than \""webgl\""""},""usage_perc_y"":52.85,""usage_perc_a"":27.33,""ucprefix"":false,""parent"":""canvas"",""keywords"":""web gl"",""ie_id"":""webglcanvas3d,webglinstancingextension"",""chrome_id"":""6049512976023552""},""fileapi"":{""title"":""File API"",""description"":""Method of manipulating file objects in web applications client-side, as well as programmatically selecting them and accessing their data."",""spec"":""http://www.w3.org/TR/FileAPI/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/Using_files_from_web_applications"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/apis/file"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/moxiecode/moxie"",""title"":""Polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #2"",""11"":""a #2""},""edge"":{""1"":""a #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""a #1 #2"",""7"":""a #1 #2"",""8"":""a #1 #2"",""9"":""a #1 #2"",""10"":""a #1 #2"",""11"":""a #1 #2"",""12"":""a #1 #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #1 #2"",""6"":""a #2"",""6.1"":""a #2"",""7"":""a #2"",""7.1"":""a #2"",""8"":""a #2"",""9"":""a #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""a #2"",""11.5"":""a #2"",""11.6"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""a #2"",""7.0-7.1"":""a #2"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9"":""a #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1 #2"",""4"":""a #1 #2"",""4.1"":""a #1 #2"",""4.2-4.3"":""a #1 #2"",""4.4"":""a #2"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #1 #2"",""10"":""a #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""a #2""},""and_uc"":{""9.9"":""a #2""}},""notes"":"""",""notes_by_num"":{""1"":""Does not have `FileReader` support. "",""2"":""Does not support the `File` constructor""},""usage_perc_y"":52.91,""usage_perc_a"":35.89,""ucprefix"":false,""parent"":"""",""keywords"":""FileReader"",""ie_id"":"""",""chrome_id"":""""},""shadowdom"":{""title"":""Shadow DOM"",""description"":""Method of establishing and maintaining functional boundaries between DOM trees and how these trees interact with each other within a document, thus enabling better functional encapsulation within the DOM."",""spec"":""http://www.w3.org/TR/shadow-dom/"",""status"":""wd"",""links"":[{""url"":""http://html5-demos.appspot.com/static/shadowdom-visualizer/index.html"",""title"":""Shadow DOM Visualizer""},{""url"":""http://www.html5rocks.com/tutorials/webcomponents/shadowdom/"",""title"":""HTML5Rocks - Shadow DOM 101 article""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supported in Firefox behind the `dom.webcomponents.enabled` flag.""},""usage_perc_y"":48.92,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web components"",""ie_id"":""shadowdomunprefixed"",""chrome_id"":""4507242028072960""},""websockets"":{""title"":""Web Sockets"",""description"":""Bidirectional communication technology for web apps"",""spec"":""http://www.w3.org/TR/websockets/"",""status"":""cr"",""links"":[{""url"":""http://websocket.org/aboutwebsocket.html"",""title"":""WebSockets information""},{""url"":""http://updates.html5rocks.com/2011/08/What-s-different-in-the-new-WebSocket-protocol"",""title"":""Details on newer protocol""},{""url"":""http://en.wikipedia.org/wiki/WebSocket"",""title"":""Wikipedia""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-websockets"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/websocket"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #1"",""5"":""a #1"",""6"":""a x #2"",""7"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""10"":""a x #2"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #2"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #2"",""6.1"":""a #2"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1"",""12"":""a #1"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y #1"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""a #1"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Reported to be supported in some Android 4.x browsers, including Sony Xperia S, Sony TX and HTC."",""notes_by_num"":{""1"":""Partial support refers to the websockets implementation using an older version of the protocol and/or the implementation being disabled by default (due to security issues with the older protocol)."",""2"":""Partial support refers to lacking support for binary data.""},""usage_perc_y"":85.55,""usage_perc_a"":1.11,""ucprefix"":true,""parent"":"""",""keywords"":"""",""ie_id"":""websocket"",""chrome_id"":""6555138000945152""},""hidden"":{""title"":""hidden attribute"",""description"":""The `hidden` attribute may be applied to any element, and effectively hides elements similar to `display: none` in CSS."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute"",""status"":""ls"",""links"":[{""url"":""http://davidwalsh.name/html5-hidden"",""title"":""Article on hidden attribute""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""The hidden state can be easily overridden with a CSS `display` property set to anything other than `none`."",""notes_by_num"":{},""usage_perc_y"":92.16,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""script-async"":{""title"":""async attribute for external scripts"",""description"":""The boolean async attribute on script elements allows the external JavaScript file to run when it's available, without delaying page load first."",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#attr-script-async"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/HTML/Element/script#Attributes"",""title"":""MDN article""},{""url"":""http://ie.microsoft.com/testdrive/Performance/AsyncScripts/Default.html"",""title"":""Demo""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-async"",""title"":""has.js test""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Using script.async = false; to maintain execution order for dynamically-added scripts isn't supported in Safari 5.0""},""usage_perc_y"":88.81,""usage_perc_a"":0.1,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""mediasource"":{""title"":""Media Source Extensions"",""description"":""API allowing media data to be accessed from HTML `video` and `audio` elements."",""spec"":""http://www.w3.org/TR/media-source/"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/MediaSource#Browser_compatibility"",""title"":""MDN article""},{""url"":""https://msdn.microsoft.com/en-us/library/dn594470%28v=vs.85%29.aspx"",""title"":""MSDN article""},{""url"":""http://html5-demos.appspot.com/static/media-source.html"",""title"":""MediaSource demo""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a #2""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n d"",""18"":""n d"",""19"":""n d"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Requires the `media.mediasource.enabled` flag to be enabled"",""2"":""Partial support in IE11 refers to only working in Windows 8+""},""usage_perc_y"":54.86,""usage_perc_a"":7.6,""ucprefix"":false,""parent"":"""",""keywords"":""sourcebuffer,endofstream"",""ie_id"":"""",""chrome_id"":""""},""cors"":{""title"":""Cross-Origin Resource Sharing"",""description"":""Method of performing XMLHttpRequests across domains"",""spec"":""http://www.w3.org/TR/cors/"",""status"":""rec"",""links"":[{""url"":""http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/"",""title"":""Mozilla Hacks blog post""},{""url"":""http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx"",""title"":""Alternative implementation by IE8""},{""url"":""https://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/"",""title"":""DOM access using CORS""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-cors-xhr"",""title"":""has.js test""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #2"",""9"":""a #2"",""10"":""a #1"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a #1 #3"",""5"":""a #1 #3"",""5.1"":""a #1 #3"",""6"":""y #3"",""6.1"":""y #3"",""7"":""y #3"",""7.1"":""y #3"",""8"":""y #3"",""9"":""y #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #1 #3"",""4.0-4.1"":""a #1 #3"",""4.2-4.3"":""a #1 #3"",""5.0-5.1"":""a #1 #3"",""6.0-6.1"":""y #3"",""7.0-7.1"":""y #3"",""8"":""y #3"",""8.1-8.4"":""y #3"",""9"":""y #3""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #1"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support CORS for images in `<canvas>`"",""2"":""Supported somewhat in IE8 and IE9 using the XDomainRequest object (but has [limitations]( http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx))"",""3"":""Does not support CORS for `<video>` in `<canvas>`: https://bugs.webkit.org/show_bug.cgi?id=135379""},""usage_perc_y"":84.63,""usage_perc_a"":8.06,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-backdrop-filter"":{""title"":""CSS Backdrop Filter"",""description"":""Method of applying filter effects (like blur, grayscale or hue) to content/elements below the target element."",""spec"":""http://dev.w3.org/fxtf/filters-2/#BackdropFilterProperty"",""status"":""unoff"",""links"":[{""url"":""http://product.voxmedia.com/til/2015/2/17/8053347/css-ios-transparency-with-webkit-backdrop-filter"",""title"":""Blog post""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":0,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""blue,hue-rotate,invert,saturate,filter"",""ie_id"":"""",""chrome_id"":""""},""calc"":{""title"":""calc() as CSS unit value"",""description"":""Method of allowing calculated values for length units, i.e. `width: calc(100% - 3em)`"",""spec"":""http://www.w3.org/TR/css3-values/#calc"",""status"":""cr"",""links"":[{""url"":""http://hacks.mozilla.org/2010/06/css3-calc/"",""title"":""Mozilla Hacks article""},{""url"":""https://developer.mozilla.org/en/CSS/-moz-calc"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/css/functions/calc"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #2"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a #1"",""4.4.3-4.4.4"":""a #1"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""Support can be somewhat emulated in older versions of IE using the non-standard `expression()` syntax."",""notes_by_num"":{""1"":""Partial support in Android Browser 4.4 refers to the browser lacking the ability to multiply and divide values."",""2"":""Partial support in IE9 refers to the browser crashing when used as a `background-position` value.""},""usage_perc_y"":76.07,""usage_perc_a"":5.22,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""csscalc"",""chrome_id"":""5765241438732288""},""dom-range"":{""title"":""Document Object Model Range"",""description"":""A contiguous range of content in a Document, DocumentFragment or Attr"",""spec"":""http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Range"",""title"":""MDN""},{""url"":""http://www.quirksmode.org/dom/range_intro.html"",""title"":""QuirksMode""},{""url"":""https://github.com/timdown/rangy"",""title"":""\""Rangy\"" Range library with old IE support""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Range) for feature support details"",""notes_by_num"":{},""usage_perc_y"":95.58,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""DOM,range,selection"",""ie_id"":"""",""chrome_id"":""""},""ruby"":{""title"":""Ruby annotation"",""description"":""Method of adding pronunciation or other annotations using ruby elements (primarily used in East Asian typography)."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#the-ruby-element"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/ruby-rt-rp-element/"",""title"":""HTML5 Doctor article""},{""url"":""http://docs.webplatform.org/wiki/html/elements/ruby"",""title"":""WebPlatform Docs""},{""url"":""https://addons.mozilla.org/firefox/addon/1935/"",""title"":""Add-on \""XHTML Ruby Support\"" for Firefox""},{""url"":""https://addons.mozilla.org/firefox/addon/6812/"",""title"":""Addon \""HTML Ruby\"" for Firefox support""},{""url"":""http://www.w3.org/TR/css-ruby-1/"",""title"":""CSS specification""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""1"":""a""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""p"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""a""},""bb"":{""7"":""p"",""10"":""a""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":""Browsers without native support can still simulate support using CSS. Partial support refers to only supporting basic ruby, may still be missing writing-mode, Complex ruby and CSS3 Ruby."",""notes_by_num"":{""1"":""IE9+ supports [properties](https://msdn.microsoft.com/en-us/library/hh772055%28v=vs.85%29.aspx) of an older version of the CSS Ruby specification.""},""usage_perc_y"":7.85,""usage_perc_a"":81.84,""ucprefix"":false,""parent"":"""",""keywords"":""ruby-base,ruby-text,ruby-position,ruby-merge,ruby-align"",""ie_id"":"""",""chrome_id"":""""},""css-opacity"":{""title"":""CSS3 Opacity"",""description"":""Method of setting the transparency level of an element"",""spec"":""http://www.w3.org/TR/css3-color/"",""status"":""rec"",""links"":[{""url"":""http://www.css3files.com/color/#opacity"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/opacity"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Transparency for elements in IE8 and older can be achieved using the proprietary \""filter\"" property and does not work well with PNG images using alpha transparency."",""notes_by_num"":{},""usage_perc_y"":95.58,""usage_perc_a"":2.11,""ucprefix"":false,""parent"":"""",""keywords"":""transparent,transparency,alpha"",""ie_id"":"""",""chrome_id"":""""},""form-validation"":{""title"":""Form validation"",""description"":""Method of setting required fields and field types without requiring JavaScript. This includes preventing forms from being submitted when appropriate, the `checkValidity()` method as well as support for the `:invalid`, `:valid`, and `:required` CSS pseudo-classes."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#client-side-form-validation"",""status"":""ls"",""links"":[{""url"":""http://docs.webplatform.org/wiki/html/attributes/required"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9"":""a #1""},""op_mini"":{""5.0-8.0"":""a #3""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""a #1"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #1"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #2"",""11"":""a #2""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to lack of notice when form with required fields is attempted to be submitted."",""2"":""Partial support in IE10 mobile refers to lack of warning when blocking submission."",""3"":""Partial support in Opera Mini refers to only supporting the CSS pseudo classes.""},""usage_perc_y"":72.28,""usage_perc_a"":21.53,""ucprefix"":false,""parent"":""forms"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""6091813840486400""},""history"":{""title"":""Session history management"",""description"":""Method of manipulating the user's browser's session history in JavaScript using `history.pushState`, `history.replaceState` and the `popstate` event."",""spec"":""https://html.spec.whatwg.org/multipage/browsers.html#dom-history-pushstate"",""status"":""ls"",""links"":[{""url"":""http://www.adequatelygood.com/2010/7/Saner-HTML5-History-Management"",""title"":""Introduction to history management""},{""url"":""https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history"",""title"":""MDN article""},{""url"":""http://html5demos.com/history"",""title"":""Demo page""},{""url"":""https://github.com/browserstate/history.js"",""title"":""History.js polyfill""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-history-state"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/dom/History"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a"",""5.1"":""a"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a""}},""notes"":""Older iOS versions and Android 4.0.4 claim support, but implementation is too buggy to be useful."",""notes_by_num"":{},""usage_perc_y"":81.89,""usage_perc_a"":6.29,""ucprefix"":false,""parent"":"""",""keywords"":""onpushstate,onreplacestate"",""ie_id"":"""",""chrome_id"":""""},""json"":{""title"":""JSON parsing"",""description"":""Method of converting JavaScript objects to JSON strings and JSON back to objects using JSON.stringify() and JSON.parse()"",""spec"":""http://es5.github.com/#x15.12"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/En/Using_native_JSON"",""title"":""MDN article""},{""url"":""http://www.json.org/js.html"",""title"":""JSON in JS (includes script w/support)""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/json.js#json"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/apis/json"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Requires document to be in IE8+ [standards mode](http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx) to work in IE8.""},""usage_perc_y"":97.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""classlist"":{""title"":""classList (DOMTokenList )"",""description"":""Method of easily manipulating classes on elements, using the DOMTokenList object."",""spec"":""http://www.w3.org/TR/dom/#dom-element-classlist"",""status"":""wd"",""links"":[{""url"":""http://hacks.mozilla.org/2010/01/classlist-in-firefox-3-6/"",""title"":""Mozilla Hacks article""},{""url"":""https://github.com/eligrey/classList.js"",""title"":""Polyfill script""},{""url"":""http://docs.webplatform.org/wiki/dom/Element/classList"",""title"":""WebPlatform Docs""},{""url"":""http://www.sitepoint.com/exploring-classlist-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/classlist-api-demo.html"",""title"":""Demo using classList""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Element.classList"",""title"":""MDN article""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""a #1 #2"",""11"":""a #1 #2""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""a #1 #2"",""9"":""a #1 #2"",""10"":""a #1 #2"",""11"":""a #1 #2"",""12"":""a #1 #2"",""13"":""a #1 #2"",""14"":""a #1 #2"",""15"":""a #1 #2"",""16"":""a #1 #2"",""17"":""a #1 #2"",""18"":""a #1 #2"",""19"":""a #1 #2"",""20"":""a #1 #2"",""21"":""a #1 #2"",""22"":""a #1 #2"",""23"":""a #2"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""a #1 #2"",""6"":""a #1 #2"",""6.1"":""a #1 #2"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""a #2"",""11.6"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""a #1 #2"",""6.0-6.1"":""a #1 #2"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""a #1 #2"",""4"":""a #1 #2"",""4.1"":""a #1 #2"",""4.2-4.3"":""a #1 #2"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #1 #2"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""a #2"",""11.5"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1 #2"",""11"":""a #1 #2""},""and_uc"":{""9.9"":""a #1 #2""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not working on SVG elements."",""2"":""Partial support refers to not supporting the second parameter for the `toggle` method""},""usage_perc_y"":69.03,""usage_perc_a"":19.96,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""text-overflow"":{""title"":""CSS3 Text-overflow"",""description"":""Append ellipsis when text overflows its containing element"",""spec"":""http://www.w3.org/TR/css3-ui/#text-overflow0"",""status"":""wd"",""links"":[{""url"":""https://github.com/rmorse/AutoEllipsis"",""title"":""jQuery polyfill for Firefox""},{""url"":""https://developer.mozilla.org/En/CSS/Text-overflow"",""title"":""MDN article""},{""url"":""http://www.css3files.com/text/"",""title"":""Information page""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-text-overflow"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/css/properties/text-overflow"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y x"",""9.5-9.6"":""y x"",""10.0-10.1"":""y x"",""10.5"":""y x"",""10.6"":""y x"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""12"":""y x"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":97.54,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""textoverflow,ellipsis"",""ie_id"":"""",""chrome_id"":""""},""webm"":{""title"":""WebM video format"",""description"":""Multimedia format designed to provide a royalty-free, high-quality open video compression format for use with HTML5 video. WebM supports the video codec VP8 and VP9."",""spec"":""http://www.webmproject.org/"",""status"":""other"",""links"":[{""url"":""https://tools.google.com/dlpage/webmmf"",""title"":""Codec for IE9 support""},{""url"":""http://www.broken-links.com/2010/09/01/playing-webm-in-safari-with-plugins/"",""title"":""Info on supporting WebM in Safari""},{""url"":""http://webmproject.org"",""title"":""Official website""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/video.js#video-webm"",""title"":""has.js test""},{""url"":""http://perian.org/"",""title"":""Perian :Mac OSX Webm Codec install""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""1"":""p""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""a"",""15"":""a"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""a""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":""Will work in IE9+ and Safari/MacOSX provided the user has the WebM codecs installed. Partial support indicates that at least one codec is supported but not all."",""notes_by_num"":{},""usage_perc_y"":60.97,""usage_perc_a"":7.6,""ucprefix"":false,""parent"":""video"",""keywords"":""matroska"",""ie_id"":""webmvideo"",""chrome_id"":""6362186595172352""},""mpeg4"":{""title"":""MPEG-4/H.264 video format"",""description"":""Commonly used video compression format."",""spec"":""http://ip.hhi.de/imagecom_G1/assets/pdfs/csvt_overview_0305.pdf"",""status"":""other"",""links"":[{""url"":""http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC"",""title"":""Wikipedia article""},{""url"":""http://www.interoperabilitybridges.com/html5-extension-for-wmp-plugin"",""title"":""Firefox extension allowing support in Win7""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a #1"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""a #2""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a""}},""notes"":""Firefox supports H.264 on Windows 7 and later since version 21. Firefox supports H.264 on Linux since version 26 if the appropriate gstreamer plug-ins are installed.\r\n\r\nPartial support for older Firefox versions refers to the lack of support in OS X & some non-Android Linux platforms."",""notes_by_num"":{""1"":""The Android 2.3 browser requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to play videos."",""2"":""Partial supports refers to the lack of hardware acceleration.""},""usage_perc_y"":79.8,""usage_perc_a"":10.25,""ucprefix"":false,""parent"":""video"",""keywords"":""avc,mp4,mpv,mov,aac,h264"",""ie_id"":"""",""chrome_id"":""""},""ogv"":{""title"":""Ogg/Theora video format"",""description"":""Free lossy video compression format."",""spec"":""http://theora.org/doc/"",""status"":""other"",""links"":[{""url"":""http://en.wikipedia.org/wiki/Theora"",""title"":""Wikipedia article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""1"":""p""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":48.6,""usage_perc_a"":0,""ucprefix"":false,""parent"":""video"",""keywords"":""xiph"",""ie_id"":"""",""chrome_id"":""""},""wordwrap"":{""title"":""CSS3 Overflow-wrap"",""description"":""Allows lines to be broken within words if an otherwise unbreakable string is too long to fit. Currently mostly supported using the `word-wrap` property."",""spec"":""http://www.w3.org/TR/css3-text/#overflow-wrap"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/En/CSS/Word-wrap"",""title"":""MDN article""},{""url"":""http://www.css3files.com/text/#wordwrap"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/properties/word-wrap"",""title"":""WebPlatform Docs""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=955857"",""title"":""Bug on Firefox support""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6524680-update-word-wrap-to-overflow-wrap"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""1"":""a""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a"",""3.6"":""a"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":""Partial support refers to requiring the legacy name \""word-wrap\"" (rather than \""overflow-wrap\"") to work."",""notes_by_num"":{},""usage_perc_y"":59.48,""usage_perc_a"":38.14,""ucprefix"":false,""parent"":"""",""keywords"":""wordwrap,word-wrap"",""ie_id"":"""",""chrome_id"":""""},""progressmeter"":{""title"":""Progress & Meter"",""description"":""Method of indicating a progress state (progress element) or the current level of a gauge (meter element).\r\n"",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-progress-element"",""status"":""ls"",""links"":[{""url"":""https://dev.opera.com/articles/new-form-features-in-html5/#newoutput"",""title"":""Dev.Opera article""},{""url"":""http://html5doctor.com/measure-up-with-the-meter-tag/"",""title"":""HTML5 Doctor on meter element""},{""url"":""http://peter.sh/examples/?/html/meter-progress.html"",""title"":""Examples of progress and meter elements""},{""url"":""http://docs.webplatform.org/wiki/html/elements/progress"",""title"":""WebPlatform Docs""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6803893-meter"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a"",""11"":""a""},""edge"":{""1"":""a""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""y""}},""notes"":""Partial support in Firefox 6-15, IE10 & iOS7 Safari refers to supporting the progress element, but not the meter element. iOS7 Safari also does not support \""indeterminate\"" progress elements.\r\n\r\nFor styling progress bars, [see this article](http://css-tricks.com/html5-progress-element/)"",""notes_by_num"":{},""usage_perc_y"":68.86,""usage_perc_a"":17.26,""ucprefix"":false,""parent"":""forms"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""object-fit"":{""title"":""CSS3 object-fit/object-position"",""description"":""Method of specifying how an object (image or video) should fit inside its box. object-fit options include \""contain\"" (fit according to aspect ratio), \""fill\"" (stretches object to fill) and \""cover\"" (overflows box but maintains ratio), where object-position allows the object to be repositioned like background-image does."",""spec"":""http://www.w3.org/TR/css3-images/"",""status"":""cr"",""links"":[{""url"":""https://dev.opera.com/articles/view/css3-object-fit-object-position/"",""title"":""Dev.Opera article""},{""url"":""http://docs.webplatform.org/wiki/css/properties/object-fit"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/anselmh/object-fit"",""title"":""object-fit JavaScript-Polyfill""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""y x"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y x"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9"":""a #1""},""op_mini"":{""5.0-8.0"":""y x""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""y x"",""11.1"":""y x"",""11.5"":""y x"",""12"":""y x"",""12.1"":""y x"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Safari refers to support for `object-fit` but not `object-position`.""},""usage_perc_y"":59.31,""usage_perc_a"":8.54,""ucprefix"":false,""parent"":"""",""keywords"":""objectfit,objectposition"",""ie_id"":""objectfitandobjectposition"",""chrome_id"":""5302669702856704""},""xhr2"":{""title"":""XMLHttpRequest advanced features"",""description"":""Adds more functionality to XHR (aka AJAX) requests like file uploads, transfer progress information and the ability to send form data. Previously known as [XMLHttpRequest Level 2](http://www.w3.org/TR/2012/WD-XMLHttpRequest-20120117/), these features now appear simply in the XMLHttpRequest spec."",""spec"":""https://xhr.spec.whatwg.org/"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/XMLHttpRequest/FormData"",""title"":""MDN article on FormData""},{""url"":""https://github.com/3nr1c/jUri.js"",""title"":""Polyfill for FormData object""},{""url"":""http://docs.webplatform.org/wiki/apis/xhr/XMLHttpRequest"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #1 #2 #3"",""3.6"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""5"":""a #1 #2 #3"",""6"":""a #1 #2"",""7"":""a #1 #2"",""8"":""a #1 #2"",""9"":""a #1 #2"",""10"":""a #2"",""11"":""a #2"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""u"",""7"":""a #1 #2"",""8"":""a #1 #2"",""9"":""a #1 #2"",""10"":""a #1 #2"",""11"":""a #1 #2"",""12"":""a #1 #2"",""13"":""a #1 #2"",""14"":""a #1 #2"",""15"":""a #1 #2"",""16"":""a #1 #2"",""17"":""a #1 #2"",""18"":""a #1 #2"",""19"":""a #1 #2"",""20"":""a #1 #2"",""21"":""a #1 #2"",""22"":""a #1 #2"",""23"":""a #1 #2"",""24"":""a #1 #2"",""25"":""a #1 #2"",""26"":""a #1 #2"",""27"":""a #1 #2"",""28"":""a #1 #2"",""29"":""a #1"",""30"":""a #1"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a #1 #2"",""5.1"":""a #1 #2"",""6"":""a #1 #2"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y"",""12.1"":""y"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #1 #2"",""6.0-6.1"":""a #1 #2"",""7.0-7.1"":""a #1"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""4.1"":""a #1 #2 #3"",""4.2-4.3"":""a #1 #2 #3"",""4.4"":""a #1 #2"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #1 #2"",""10"":""a #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""a #1 #2""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not supporting `json` as `responseType`"",""2"":""Partial support refers to not supporting `.timeout` and `.ontimeout`"",""3"":""Partial support refers to not supporting `blob` as `responseType`""},""usage_perc_y"":65.14,""usage_perc_a"":23.96,""ucprefix"":false,""parent"":"""",""keywords"":""formdata"",""ie_id"":"""",""chrome_id"":""""},""minmaxwh"":{""title"":""CSS min/max-width/height"",""description"":""Method of setting a minimum or maximum width or height to an element. "",""spec"":""http://www.w3.org/TR/CSS21/visudet.html#min-max-widths"",""status"":""rec"",""links"":[{""url"":""http://code.google.com/p/ie7-js/"",""title"":""JS library with support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/min-width"",""title"":""WebPlatform Docs""},{""url"":""http://www.impressivewebs.com/min-max-width-height-css/"",""title"":""CSS Basics post""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""y #1"",""8"":""y #2"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""IE7 does not support `inherit` as a value on any of these properties."",""2"":""IE8 has some bugs with `max-width`/`height` combined with `overflow: auto`/`scroll`.""},""usage_perc_y"":97.61,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""min-width,min-height,max-width,max-height"",""ie_id"":"""",""chrome_id"":""""},""details"":{""title"":""Details & Summary elements"",""description"":""The <details> element generates a simple no-JavaScript widget to show/hide element contents, optionally by clicking on its child <summary> element."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-details-element"",""status"":""ls"",""links"":[{""url"":""https://mathiasbynens.be/notes/html5-details-jquery"",""title"":""jQuery fallback script""},{""url"":""https://gist.github.com/370590"",""title"":""Fallback script""},{""url"":""http://html5doctor.com/summary-figcaption-element/"",""title"":""HTML5 Doctor article""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-details"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/details"",""title"":""WebPlatform Docs""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=591737"",""title"":""Bug on Firefox support""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""p""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":68.09,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""detailssummary"",""chrome_id"":""5348024557502464""},""text-stroke"":{""title"":""CSS text-stroke"",""description"":""Method of declaring the outline (stroke) width and color for text."",""spec"":""http://developer.apple.com/library/safari/documentation/appleapplications/reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-_webkit_text_stroke"",""status"":""unoff"",""links"":[{""url"":""http://css-tricks.com/7405-adding-stroke-to-web-text/"",""title"":""Information & workarounds""},{""url"":""http://www.westciv.com/tools/textStroke/"",""title"":""Live editor""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""u"",""41"":""u"",""42"":""u""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""a x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""n"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Does not yet appear in any W3C specification. Was briefly included in a spec as the \""text-outline\"" property, but this was removed."",""notes_by_num"":{},""usage_perc_y"":62.87,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""textstroke,stroke-color,stroke-width,fill-color,text-outline"",""ie_id"":"""",""chrome_id"":""""},""inline-block"":{""title"":""CSS inline-block"",""description"":""Method of displaying an element as a block while flowing it with text. "",""spec"":""http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning"",""status"":""rec"",""links"":[{""url"":""http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/"",""title"":""Blog post w/info""},{""url"":""http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/"",""title"":""Info on cross browser support""},{""url"":""http://docs.webplatform.org/wiki/css/properties/display"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a #1"",""7"":""a #1"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a x"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Only supported in IE6 and IE7 on elements with a display of \""inline\"" by default. [Alternative properties](http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/) are available to provide complete cross-browser support.""},""usage_perc_y"":97.53,""usage_perc_a"":0.16,""ucprefix"":false,""parent"":"""",""keywords"":""inlineblock"",""ie_id"":"""",""chrome_id"":""""},""notifications"":{""title"":""Web Notifications"",""description"":""Method of alerting the user outside of a web page by displaying notifications (that do not require interaction by the user)."",""spec"":""http://www.w3.org/TR/notifications/"",""status"":""cr"",""links"":[{""url"":""http://www.html5rocks.com/tutorials/notifications/quick/"",""title"":""HTML5 Rocks tutorial""},{""url"":""http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification"",""title"":""Chromium API""},{""url"":""https://addons.mozilla.org/en-us/firefox/addon/221523/"",""title"":""Add-on""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/notification"",""title"":""MDN Notifications""},{""url"":""http://www.sitepoint.com/introduction-web-notifications-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/web-notifications-api-demo.html"",""title"":""Demo""},{""url"":""http://ukot.github.io/ie_web_notifications/"",""title"":""Plug-in for support in IE""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""40"":""a x""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a x""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":58.32,""usage_perc_a"":4.06,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""webnotifications"",""chrome_id"":""5064350557536256""},""stream"":{""title"":""getUserMedia/Stream API"",""description"":""Method of accessing external device data (such as a webcam video stream). Formerly this was envisioned as the <device> element."",""spec"":""http://www.w3.org/TR/mediacapture-streams/"",""status"":""wd"",""links"":[{""url"":""https://dev.opera.com/blog/webcam-orientation-preview/"",""title"":""Technology preview from Opera""},{""url"":""http://docs.webplatform.org/wiki/dom/Navigator/getUserMedia"",""title"":""WebPlatform Docs""},{""url"":""http://blogs.windows.com/msedgedev/2015/05/13/announcing-media-capture-functionality-in-microsoft-edge/"",""title"":""Media Capture functionality in Microsoft Edge""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""a x #1"",""12.1"":""a x #1"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""a x #1""},""bb"":{""7"":""n"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""a x #1"",""12.1"":""a x #1"",""30"":""a x #1""},""and_chr"":{""42"":""a x #1""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x #1""}},""notes"":"""",""notes_by_num"":{""1"":""Blink-based (and some other) browsers support an older version of the spec that does not use `srcObject`. [See Chromium issue 387740](https://code.google.com/p/chromium/issues/detail?id=387740). Instead you need to convert a `MediaStream` object using `UR""},""usage_perc_y"":10.26,""usage_perc_a"":51.45,""ucprefix"":false,""parent"":"""",""keywords"":""camera,device,getUserMedia,media stream,Media Capture API"",""ie_id"":""mediacaptureandstreams"",""chrome_id"":""6067380039974912,6605041225957376""},""svg-img"":{""title"":""SVG in HTML img element"",""description"":""Method of displaying SVG images in HTML using <img>."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html"",""status"":""ls"",""links"":[{""url"":""http://blog.dholbert.org/2010/10/svg-as-image.html"",""title"":""Blog post with examples""},{""url"":""http://www.codedread.com/blog/"",""title"":""Blog with SVGs an images""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""a"",""4"":""a #1"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""a #1"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not supporting embedded images (data URIs) inside the SVG.""},""usage_perc_y"":81.52,""usage_perc_a"":13.88,""ucprefix"":false,""parent"":"""",""keywords"":""svg-as-img,svg-in-img"",""ie_id"":"""",""chrome_id"":""""},""datalist"":{""title"":""Datalist element"",""description"":""Method of setting a list of options for a user to select in a text field, while leaving the ability to enter a custom value."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element"",""status"":""ls"",""links"":[{""url"":""http://hacks.mozilla.org/2010/11/firefox-4-html5-forms/"",""title"":""Mozilla Hacks article""},{""url"":""http://afarkas.github.com/webshim/demos/"",""title"":""HTML5 Library including datalist support""},{""url"":""https://developer.mozilla.org/en/HTML/Element/datalist"",""title"":""MDN reference""},{""url"":""http://docs.webplatform.org/wiki/html/elements/datalist"",""title"":""WebPlatform Docs""},{""url"":""http://demo.agektmr.com/datalist/"",""title"":""Eiji Kitamura's options demos & tests""},{""url"":""http://github.com/thgreasi/datalist-polyfill"",""title"":""Minimal Datalist polyfill w/tutorial""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""a #2"",""11"":""a #2""},""edge"":{""1"":""a #2""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""a #3"",""16"":""a #3"",""17"":""a #3"",""18"":""a #3"",""19"":""a #3"",""20"":""a #3"",""21"":""a #3"",""22"":""a #3"",""23"":""a #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""a #3"",""29"":""a #3"",""30"":""a #3"",""31"":""a #3"",""32"":""a #3"",""33"":""a #3"",""34"":""a #3"",""35"":""a #3"",""36"":""a #3"",""37"":""a #3"",""38"":""a #3"",""39"":""a #3"",""40"":""a #3"",""41"":""a #3"",""42"":""a #3""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1"",""43"":""a #1"",""44"":""a #1"",""45"":""a #1"",""46"":""a #1"",""47"":""a #1""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""p""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""a #3""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":""While most commonly used on text fields, datalists can also be used on other input types. IE11 supports the element on `range` fields. Chrome and Opera also support datalists to suggest given values on `range`, `color` and date/time fields. "",""notes_by_num"":{""1"":""Partial support refers to [a bug](https://code.google.com/p/chromium/issues/detail?id=375637) where long lists of items are unscrollable resulting in unselectable options."",""2"":""Partial support in IE refers to [significantly buggy behavior](http://playground.onereason.eu/2013/04/ie10s-lousy-support-for-datalists/) (IE11+ does send the input and change events upon selection). "",""3"":""Partial support refers to no support for datalists on non-text fields (e.g. number, [range](https://bugzilla.mozilla.org/show_bug.cgi?id=841942), [color](https://bugzilla.mozilla.org/show_bug.cgi?id=960984)).""},""usage_perc_y"":21.11,""usage_perc_a"":50.95,""ucprefix"":false,""parent"":""forms"",""keywords"":""list attribute"",""ie_id"":""datalistelement"",""chrome_id"":""6090950820495360""},""dataset"":{""title"":""dataset & data-* attributes"",""description"":""Method of applying and accessing custom data to elements."",""spec"":""https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes"",""status"":""ls"",""links"":[{""url"":""http://html5doctor.com/html5-custom-data-attributes/"",""title"":""HTML5 Doctor article""},{""url"":""http://html5demos.com/dataset"",""title"":""Demo using dataset""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/dom.js#dom-dataset"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/data-*"",""title"":""WebPlatform Docs""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset"",""title"":""MDN Reference - dataset""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes"",""title"":""MDN Guide - Using data-* attributes""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""a"",""3.6"":""a"",""4"":""a"",""5"":""a"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1"",""43"":""y #1"",""44"":""y #1"",""45"":""y #1"",""46"":""y #1"",""47"":""y #1""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""y #1"",""6"":""y #1"",""6.1"":""y #1"",""7"":""y #1"",""7.1"":""y #1"",""8"":""y #1"",""9"":""y #1""},""opera"":{""9"":""a"",""9.5-9.6"":""a"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""y #1"",""6.0-6.1"":""y #1"",""7.0-7.1"":""y #1"",""8"":""y #1"",""8.1-8.4"":""y #1"",""9"":""y #1""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""y #1"",""4"":""y #1"",""4.1"":""y #1"",""4.2-4.3"":""y #1"",""4.4"":""y #1"",""4.4.3-4.4.4"":""y #1"",""40"":""y #1""},""bb"":{""7"":""y #1"",""10"":""y #1""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y #1""},""and_chr"":{""42"":""y #1""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a"",""11"":""y""},""and_uc"":{""9.9"":""y #1""}},""notes"":""Partial support refers to being able to use `data-*` attributes and access them using `getAttribute`. \r\n\r\n\""Supported\"" refers to accessing the values using the `dataset` property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements."",""notes_by_num"":{""1"":""While the HTML spec doesn't require it, these browsers also support `dataset` and `data-*` attributes on SVG elements, in compliance with [current plans for SVG2](http://www.w3.org/2015/01/15-svg-minutes.html#item03)""},""usage_perc_y"":87.5,""usage_perc_a"":10.2,""ucprefix"":false,""parent"":"""",""keywords"":""DOMStringMap"",""ie_id"":"""",""chrome_id"":""""},""css-grid"":{""title"":""CSS Grid Layout"",""description"":""Method of using a grid concept to lay out content, providing a mechanism for authors to divide available space for lay out into columns and rows using a set of predictable sizing behaviors"",""spec"":""http://www.w3.org/TR/css3-grid-layout/"",""status"":""wd"",""links"":[{""url"":""http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx"",""title"":""IE Blog post""},{""url"":""https://bugs.webkit.org/show_bug.cgi?id=60731"",""title"":""Webkit (Chrome, Safari, etc.) feature request""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=616605"",""title"":""Mozilla (Firefox) feature request""},{""url"":""https://github.com/codler/Grid-Layout-Polyfill"",""title"":""Polyfill based on old spec""},{""url"":""https://github.com/FremyCompany/css-grid-polyfill/"",""title"":""Polyfill based on new spec""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""p"",""10"":""a x #2"",""11"":""a x #2""},""edge"":{""1"":""a x #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""u"",""41"":""u"",""42"":""u""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p d #1"",""30"":""p d #1"",""31"":""p d #1"",""32"":""p d #1"",""33"":""p d #1"",""34"":""p d #1"",""35"":""p d #1"",""36"":""p d #1"",""37"":""p d #1"",""38"":""p d #1"",""39"":""p d #1"",""40"":""p d #1"",""41"":""p d #1"",""42"":""p d #1"",""43"":""p d #1"",""44"":""p d #1"",""45"":""p d #1"",""46"":""p d #1"",""47"":""p d #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""p d #1"",""29"":""p d #1"",""30"":""p d #1"",""31"":""p d #1"",""32"":""p d #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""40"":""p""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""p""},""and_chr"":{""42"":""p""},""and_ff"":{""38"":""p""},""ie_mob"":{""10"":""a x #2"",""11"":""a x #2""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Partial support in IE refers to supporting an [older version](http://www.w3.org/TR/2011/WD-css3-grid-layout-20110407/) of the specification.""},""usage_perc_y"":0,""usage_perc_a"":9.66,""ucprefix"":false,""parent"":"""",""keywords"":""grids,grid-row,grid-column"",""ie_id"":""grid"",""chrome_id"":""4589636412243968""},""menu"":{""title"":""Toolbar/context menu"",""description"":""Method of defining a toolbar menu, a context menu or a list of (interactive) options using the <menu> element."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-menu-element"",""status"":""ls"",""links"":[{""url"":""https://bug617528.bugzilla.mozilla.org/attachment.cgi?id=554309"",""title"":""Demo""},{""url"":""http://addyosmani.github.com/jQuery-contextMenu/"",""title"":""jQuery polyfill""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/events.js#event-contextmenu"",""title"":""has.js test""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=746087"",""title"":""Bug on Firefox support""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6508881-html5-menu-tag-contextmenu-attribute"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Firefox refers to being limited to context menus, not toolbar menus.""},""usage_perc_y"":0,""usage_perc_a"":10.36,""ucprefix"":false,""parent"":"""",""keywords"":""contextmenu,menuitem,command"",""ie_id"":"""",""chrome_id"":""""},""css-zoom"":{""title"":""CSS zoom"",""description"":""Non-standard method of scaling content."",""spec"":""https://msdn.microsoft.com/en-us/library/ms531189(v=vs.85).aspx"",""status"":""unoff"",""links"":[{""url"":""https://css-tricks.com/almanac/properties/z/zoom/"",""title"":""CSS Tricks""},{""url"":""https://docs.webplatform.org/wiki/css/properties/zoom"",""title"":""WebPlatform Docs""},{""url"":""https://msdn.microsoft.com/en-us/library/ms531189(v=vs.85).aspx"",""title"":""MSDN Library""},{""url"":""https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-SW1"",""title"":""Safari Developer Library""},{""url"":""http://www.satzansatz.de/cssd/onhavinglayout.html"",""title"":""Article explaining usage of zoom as the hack for fixing rendering bugs in IE6 and IE7.""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/zoom"",""title"":""Mozilla Developer Network""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":""Originally implemented only in Internet Explorer. Although several other browsers support the property, using `transform: scale()` is the recommended solution to scale content."",""notes_by_num"":{""1"":""The `-ms-zoom` property is an extension to CSS, and can be used as a synonym for `zoom` in IE8 Standards mode.""},""usage_perc_y"":82.06,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""-ms-zoom,transform,-moz-transform,-ms-transform,-webkit-transform,-o-transform,scale,css-transforms"",""ie_id"":"""",""chrome_id"":""""},""rem"":{""title"":""rem (root em) units"",""description"":""Type of unit similar to `em`, but relative only to the root element, not any parent element. Thus compounding does not occur as it does with `em` units."",""spec"":""http://www.w3.org/TR/css3-values/#font-relative-lengths"",""status"":""cr"",""links"":[{""url"":""http://snook.ca/archives/html_and_css/font-size-with-rem"",""title"":""Article on usage""},{""url"":""https://github.com/chuckcarpenter/REM-unit-polyfill"",""title"":""REM Polyfill""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #1"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""IE 9 & IE 10 do not support `rem` units when used in the `font` shorthand property (the entire declaration is ignored) or when used on pseudo elements.""},""usage_perc_y"":92.67,""usage_perc_a"":2.71,""ucprefix"":false,""parent"":"""",""keywords"":""rems"",""ie_id"":"""",""chrome_id"":""""},""ttf"":{""title"":""TTF/OTF - TrueType and OpenType font support"",""description"":""Support for the TrueType (.ttf) and OpenType (.otf) outline font formats in @font-face. "",""spec"":""http://developer.apple.com/fonts/TTRefMan/index.html"",""status"":""other"",""links"":[{""url"":""http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer"",""title"":""What is the status of TTF support in Internet Explorer?""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE9+ refers to the fonts only working [when set to be \""installable\""](http://blogs.msdn.com/b/ie/archive/2010/07/15/the-css-corner-better-web-typography-for-better-design.aspx). Support for this is tracked [here](https://status.modern.ie/crossdomainfontloading).""},""usage_perc_y"":79.68,""usage_perc_a"":11.14,""ucprefix"":false,""parent"":""fontface"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""touch"":{""title"":""Touch events"",""description"":""Method of registering when, where and how the interface is touched, for devices with a touch screen. These DOM events are similar to mousedown, mousemove, etc."",""spec"":""http://www.w3.org/TR/touch-events/"",""status"":""rec"",""links"":[{""url"":""http://www.quirksmode.org/mobile/tableTouch.html"",""title"":""Detailed support tables""},{""url"":""http://www.quirksmode.org/m/tests/drag2.html"",""title"":""Multi-touch demo""},{""url"":""http://schepers.cc/getintouch"",""title"":""Information on the spec development""},{""url"":""http://msdn.microsoft.com/en-us/library/ie/hh673557(v=vs.85).aspx"",""title"":""Internet Explorer's gesture and touch implementation.""},{""url"":""http://github.com/CamHenlin/TouchPolyfill"",""title"":""Touch polyfill for supporting touch events on Internet Explorer""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""p"",""11"":""p""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""p"",""11"":""a #2""},""and_uc"":{""9.9"":""y""}},""notes"":""Internet Explorer implements Pointer Events specification which supports more input devices than Touch Events one.\r\n\r\nThere is a library on GitHub that is working toward bringing W3C touch events to IE 10 and 11: https://github.com/CamHenlin/TouchPolyfill \r\n\r\nRemoved support in Firefox refers to desktop Firefox only."",""notes_by_num"":{""1"":""Can be enabled in Firefox using the dom.w3c_touch_events.enabled flag (disabled by default for site compatibility reasons)"",""2"":""Supported on IE11 Mobile for phones with \""[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\""""},""usage_perc_y"":65.51,""usage_perc_a"":0.94,""ucprefix"":false,""parent"":"""",""keywords"":""touchstart,touchend,touchmove,touchenter,touchleave,touchcancel"",""ie_id"":""touchevents"",""chrome_id"":""6156165603917824""},""matchesselector"":{""title"":""matches() DOM method"",""description"":""Method of testing whether or not a DOM element matches a given selector. Formerly known (and largely supported with prefix) as matchesSelector."",""spec"":""https://dom.spec.whatwg.org/#dom-element-matches"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/Element.mozMatchesSelector"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/dom/HTMLElement/matchesSelector"",""title"":""WebPlatform Docs""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6524858-unprefix-and-update-msmatchesselector-to-matches"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a x"",""10"":""a x"",""11"":""a x""},""edge"":{""1"":""a x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a x"",""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a x"",""5.1"":""a x"",""6"":""a x"",""6.1"":""a x"",""7"":""a x"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""a x"",""11.6"":""a x"",""12"":""a x"",""12.1"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""a x"",""4.2-4.3"":""a x"",""5.0-5.1"":""a x"",""6.0-6.1"":""a x"",""7.0-7.1"":""a x"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""40"":""y""},""bb"":{""7"":""a x"",""10"":""a x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a x"",""11.5"":""a x"",""12"":""a x"",""12.1"":""a x"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a x"",""11"":""a x""},""and_uc"":{""9.9"":""a x""}},""notes"":""Partial support refers to supporting the older specification's \""matchesSelector\"" name rather than just \""matches\""."",""notes_by_num"":{},""usage_perc_y"":61.03,""usage_perc_a"":29.67,""ucprefix"":false,""parent"":"""",""keywords"":"" matchesSelector"",""ie_id"":"""",""chrome_id"":""""},""pointer-events"":{""title"":""CSS pointer-events (for HTML)"",""description"":""This CSS property, when set to \""none\"" allows elements to not receive hover/click events, instead the event will occur on anything behind it. "",""spec"":""http://wiki.csswg.org/spec/css4-ui#pointer-events"",""status"":""unoff"",""links"":[{""url"":""http://robertnyman.com/2010/03/22/css-pointer-events-to-allow-clicks-on-underlying-elements/"",""title"":""Article & tutorial""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/css.js#css-pointerevents"",""title"":""has.js test""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Already part of the SVG specification, and all SVG-supporting browsers appear to support the property on SVG elements."",""notes_by_num"":{},""usage_perc_y"":87.64,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""pointerevents"",""ie_id"":""csspointerevents"",""chrome_id"":""""},""blobbuilder"":{""title"":""Blob constructing"",""description"":""Construct Blobs (binary large objects) either using the BlobBuilder API (deprecated) or the Blob constructor."",""spec"":""http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/BlobBuilder"",""title"":""MDN article on BlobBuilder""},{""url"":""https://developer.mozilla.org/en-US/docs/DOM/Blob"",""title"":""MDN article on Blobs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a x""}},""notes"":""Partial support refers to only supporting the now deprecated BlobBuilder to create blobs."",""notes_by_num"":{},""usage_perc_y"":76.02,""usage_perc_a"":12.49,""ucprefix"":true,""parent"":""fileapi"",""keywords"":"""",""ie_id"":""blob"",""chrome_id"":""5328783104016384""},""filereader"":{""title"":""FileReader API"",""description"":""Method of reading the contents of a File or Blob object into memory"",""spec"":""http://www.w3.org/TR/FileAPI/#dfn-filereader"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/FileReader"",""title"":""FileReader API""},{""url"":""http://docs.webplatform.org/wiki/apis/file/FileReader"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Does not support `readAsBinaryString`""},""usage_perc_y"":79.82,""usage_perc_a"":8.84,""ucprefix"":false,""parent"":""fileapi"",""keywords"":"""",""ie_id"":""filereader"",""chrome_id"":""5171003185430528""},""filesystem"":{""title"":""Filesystem & FileWriter API"",""description"":""Method of reading and writing files to a sandboxed file system."",""spec"":""http://www.w3.org/TR/file-system-api/"",""status"":""unoff"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/file/filesystem/"",""title"":""HTML5 Rocks tutorial""},{""url"":""http://docs.webplatform.org/wiki/apis/filesystem"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The File API: Directories and System specification is no longer being maintained and support may be dropped in future versions."",""notes_by_num"":{},""usage_perc_y"":45.47,""usage_perc_a"":0.11,""ucprefix"":false,""parent"":"""",""keywords"":""filewriter"",""ie_id"":""filewriter"",""chrome_id"":""5452478162141184""},""bloburls"":{""title"":""Blob URLs"",""description"":""Method of creating URL handles to the specified File or Blob object."",""spec"":""http://www.w3.org/TR/FileAPI/#url"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.URL.createObjectURL"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":88.2,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fileapi"",""keywords"":""createobjecturl"",""ie_id"":"""",""chrome_id"":""""},""rellist"":{""title"":""relList (DOMTokenList)"",""description"":""Method of easily manipulating rel attribute values on elements, using the DOMTokenList object (similar to classList)."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#dom-a-rellist"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/DOM/DOMTokenList"",""title"":""MDN - DOMTokenList""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":9.8,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""typedarrays"":{""title"":""Typed Arrays"",""description"":""JavaScript typed arrays provide a mechanism for accessing raw binary data much more efficiently.\r\n"",""spec"":""http://www.khronos.org/registry/typedarray/specs/latest/"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/en/javascript_typed_arrays"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #2"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a #2"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y""}},""notes"":""Includes support for ArrayBuffer objects."",""notes_by_num"":{""1"":""IE10 (and IE 10&11 mobile) does not support `Uint8ClampedArray`""},""usage_perc_y"":86.55,""usage_perc_a"":2.3,""ucprefix"":false,""parent"":"""",""keywords"":""float64array,dataview,uint8array,arraybuffer"",""ie_id"":""typedarrays"",""chrome_id"":""5135818813341696""},""deviceorientation"":{""title"":""DeviceOrientation & DeviceMotion events"",""description"":""API for detecting orientation and motion events from the device running the browser."",""spec"":""http://www.w3.org/TR/orientation-event/"",""status"":""wd"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/device/orientation/"",""title"":""HTML5 Rocks tutorial""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/features.js#native-orientation"",""title"":""has.js test""},{""url"":""http://html5labs.interoperabilitybridges.com/prototypes/device-orientation-events/device-orientation-events/info"",""title"":""DeviceOrientation implementation prototype for IE10""},{""url"":""http://aurelio.audero.it/demo/device-orientation-api-demo.html"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""a""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y"",""12.1"":""y"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""a""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""a""}},""notes"":""Partial support refers to the lack of compassneedscalibration event. Partial support also refers to the lack of devicemotion event support for Chrome 30- and Opera. Opera Mobile 14 lost the ondevicemotion event support. Firefox 3.6, 4 and 5 support the non-standard [MozOrientation](https://developer.mozilla.org/en/DOM/MozOrientation) event."",""notes_by_num"":{""1"":""`compassneedscalibration` supported in IE11 only for compatible devices with Windows 8.1+.""},""usage_perc_y"":0.63,""usage_perc_a"":83.36,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""deviceorientation,devicemotion"",""chrome_id"":""5874690627207168,5556931766779904""},""script-defer"":{""title"":""defer attribute for external scripts"",""description"":""The boolean defer attribute on script elements allows the external JavaScript file to run when the DOM is loaded, without delaying page load first."",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#attr-script-defer"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en/HTML/Element/script#Attributes"",""title"":""MDN article""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/script.js#script-defer"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/defer"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older IE refers to a buggy implementation (see issue).""},""usage_perc_y"":88.93,""usage_perc_a"":3.59,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""nav-timing"":{""title"":""Navigation Timing API"",""description"":""API for accessing timing information related to navigation and elements."",""spec"":""http://www.w3.org/TR/navigation-timing/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en/API/navigationTiming"",""title"":""MDN article""},{""url"":""http://www.html5rocks.com/en/tutorials/webperformance/basics/"",""title"":""HTML5 Rocks tutorial""},{""url"":""http://docs.webplatform.org/wiki/apis/navigation_timing"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""n"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Removed in iOS 8.1 due to poor performance."",""notes_by_num"":{},""usage_perc_y"":80.8,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""performance,performance.timing"",""ie_id"":""navigationtimingapi"",""chrome_id"":""5584144679567360""},""audio-api"":{""title"":""Web Audio API"",""description"":""High-level JavaScript API for processing and synthesizing audio"",""spec"":""http://www.w3.org/TR/webaudio/"",""status"":""wd"",""links"":[{""url"":""https://github.com/corbanbrook/audionode.js"",""title"":""Polyfill to support Web Audio API in Firefox""},{""url"":""http://docs.webplatform.org/wiki/apis/webaudio"",""title"":""WebPlatform Docs""},{""url"":""http://www.doboism.com/projects/webaudio-compatibility/"",""title"":""Additional browser compatibility tests for specific features""},{""url"":""https://github.com/g200kg/WAAPISim"",""title"":""Polyfill to enable Web Audio API through Firefox Audio Data api or flash""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Firefox versions < 25 support an alternative, deprecated audio API.\r\n\r\nChrome support [went through some changes](http://updates.html5rocks.com/2014/07/Web-Audio-Changes-in-m36) as of version 36."",""notes_by_num"":{},""usage_perc_y"":66.05,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web-audio,AudioContext,AudioBuffer,AudioNode"",""ie_id"":""webaudioapi"",""chrome_id"":""6261718720184320""},""css-regions"":{""title"":""CSS Regions"",""description"":""Method of flowing content into multiple elements."",""spec"":""http://www.w3.org/TR/css3-regions/"",""status"":""wd"",""links"":[{""url"":""http://html.adobe.com/webstandards/cssregions/"",""title"":""Adobe demos and samples""},{""url"":""http://msdn.microsoft.com/en-us/ie/hh272902#_CSSConnected"",""title"":""IE10 developer guide info""},{""url"":""http://docs.webplatform.org/wiki/css/atrules/@region"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #1""},""edge"":{""1"":""a x #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""n d"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""n d"",""24"":""n d"",""25"":""n d"",""26"":""n d"",""27"":""n d"",""28"":""n d"",""29"":""n d"",""30"":""n d"",""31"":""n d"",""32"":""n d"",""33"":""n d"",""34"":""n d"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""a x #1"",""11"":""a x #1""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{""1"":""Support is limited to using an iframe as a content source with the `-ms-flow-into: flow_name;` and `-ms-flow-from: flow_name;` syntax.""},""usage_perc_y"":16.28,""usage_perc_a"":9.71,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""regions"",""chrome_id"":""5655612935372800""},""spellcheck-attribute"":{""title"":""Spellcheck attribute"",""description"":""Attribute for `input`/`textarea` fields to enable/disable the browser's spellchecker."",""spec"":""https://html.spec.whatwg.org/multipage/interaction.html#spelling-and-grammar-checking"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Controlling_spell_checking_in_HTML_formsControlling_spell_checking_in_HTML_forms"",""title"":""MDN article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""a""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""a""},""bb"":{""7"":""a"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""a"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""a""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":""The partial support in mobile browsers results from their OS generally having built-in spell checking instead of using the wavy underline to indicate misspelled words. `spellcheck=\""false\""` does not seem to have any effect in these browsers.\r\n\r\nBrowsers have different behavior in how they deal with spellchecking in combination with the the `lang` attribute. Generally spelling is based on the browser's language, not the language of the document."",""notes_by_num"":{},""usage_perc_y"":54.57,""usage_perc_a"":39.3,""ucprefix"":false,""parent"":"""",""keywords"":""spelling"",""ie_id"":"""",""chrome_id"":""""},""fullscreen"":{""title"":""Full Screen API"",""description"":""API for allowing content (like a video or canvas element) to take up the entire screen."",""spec"":""http://www.w3.org/TR/fullscreen/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/Using_full-screen_mode"",""title"":""MDN article""},{""url"":""http://jlongster.com/2011/11/21/canvas.html"",""title"":""Blog post""},{""url"":""http://hacks.mozilla.org/2012/01/using-the-fullscreen-api-in-web-browsers/"",""title"":""Mozilla hacks article""},{""url"":""http://docs.webplatform.org/wiki/dom/Element/requestFullscreen"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y x""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #2"",""21"":""a x #2"",""22"":""a x #2"",""23"":""a x #2"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2"",""33"":""a x #2"",""34"":""a x #2"",""35"":""a x #2"",""36"":""a x #2"",""37"":""a x #2"",""38"":""a x #2"",""39"":""a x #2"",""40"":""a x #2"",""41"":""a x #2"",""42"":""a x #2"",""43"":""a x #2"",""44"":""a x #2"",""45"":""a x #2"",""46"":""a x #2"",""47"":""a x #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a x #1"",""6"":""a x #2"",""6.1"":""a x #2"",""7"":""a x #2"",""7.1"":""a x #2"",""8"":""a x #2"",""9"":""a x #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""a x #2"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""a x #2"",""22"":""a x #2"",""23"":""a x #2"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""a x #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a x #2""},""and_chr"":{""42"":""a x #2""},""and_ff"":{""38"":""a x #1""},""ie_mob"":{""10"":""n"",""11"":""y x""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to supporting an earlier draft of the spec."",""2"":""Partial support refers to not supporting `::backdrop`, and supporting the old `:full-screen` syntax rather than the standard `:fullscreen`.""},""usage_perc_y"":8.38,""usage_perc_a"":59.14,""ucprefix"":false,""parent"":"""",""keywords"":""full-screen"",""ie_id"":""fullscreenapi"",""chrome_id"":""5259513871466496""},""css-exclusions"":{""title"":""CSS Exclusions Level 1"",""description"":""Exclusions defines how inline content flows around elements. It extends the content wrapping ability of floats to any block-level element."",""spec"":""http://www.w3.org/TR/css3-exclusions/"",""status"":""wd"",""links"":[{""url"":""https://msdn.microsoft.com/en-us/library/ie/hh673558(v=vs.85).aspx"",""title"":""CSS Exclusions""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x""},""edge"":{""1"":""y x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y x"",""11"":""y x""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":9.66,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""floats,exclusions,wrap-flow,wrap-through"",""ie_id"":""exclusions"",""chrome_id"":""6296903092273152""},""requestanimationframe"":{""title"":""requestAnimationFrame"",""description"":""API allowing a more efficient way of running script-based animation, compared to traditional methods using timeouts. Also covers support for `cancelAnimationFrame`"",""spec"":""http://www.w3.org/TR/animation-timing/#requestAnimationFrame"",""status"":""cr"",""links"":[{""url"":""http://paulirish.com/2011/requestanimationframe-for-smart-animating/"",""title"":""Blog post""},{""url"":""http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/"",""title"":""Mozilla Hacks article""},{""url"":""http://docs.webplatform.org/wiki/dom/Window/requestAnimationFrame"",""title"":""WebPlatform Docs""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1 #2"",""11"":""a x #1 #2"",""12"":""a x #1 #2"",""13"":""a x #1 #2"",""14"":""a x #1 #2"",""15"":""a x #1 #2"",""16"":""a x #1 #2"",""17"":""a x #1 #2"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to lacking `cancelAnimationFrame` support."",""2"":""Supports `webkitCancelRequestAnimationFrame` rather than `webkitCancelAnimationFrame.""},""usage_perc_y"":85.57,""usage_perc_a"":0.36,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""requestanimationframe"",""chrome_id"":""5233400470306816""},""input-range"":{""title"":""Range input type"",""description"":""Form field type that allows the user to select a value using a slider widget."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#range-state-(type=range)"",""status"":""ls"",""links"":[{""url"":""https://github.com/fryn/html5slider"",""title"":""Polyfill for Firefox""},{""url"":""https://github.com/freqdec/fd-slider"",""title"":""Cross-browser polyfill""},{""url"":""http://tutorialzine.com/2011/12/what-you-need-to-know-html5-range-input/"",""title"":""Tutorial""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-range"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/input/type/range"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/andreruffert/rangeslider.js"",""title"":""rangeslider.js polyfill""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""u"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Currently all Android browsers with partial support hide the slider input field by default. However, the element [can be styled](http://tiffanybbrown.com/2012/02/07/input-typerange-and-androids-stock-browser/) to be made visible and usable."",""notes_by_num"":{},""usage_perc_y"":87.78,""usage_perc_a"":1.04,""ucprefix"":false,""parent"":""forms"",""keywords"":""input type=\""range\"""",""ie_id"":"""",""chrome_id"":""""},""matchmedia"":{""title"":""matchMedia"",""description"":""API for finding out whether or not a media query applies to the document."",""spec"":""http://www.w3.org/TR/cssom-view/#dom-window-matchmedia"",""status"":""wd"",""links"":[{""url"":""https://github.com/paulirish/matchMedia.js/"",""title"":""matchMedia.js polyfill""},{""url"":""https://developer.mozilla.org/en/DOM/window.matchMedia"",""title"":""MDN article""},{""url"":""https://developer.mozilla.org/en/CSS/Using_media_queries_from_code"",""title"":""MDN tutorial""},{""url"":""http://docs.webplatform.org/wiki/css/media_queries/apis/matchMedia"",""title"":""WebPlatform Docs""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":88.78,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""mediaquerylist"",""ie_id"":""matchmedia"",""chrome_id"":""4677872220372992""},""input-datetime"":{""title"":""Date and time input types"",""description"":""Form field widget to easily allow users to enter a date or a time, generally by using a calendar/time input widget."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#date-state-(type=date)"",""status"":""ls"",""links"":[{""url"":""http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-browser-datepickers-within-minutes/"",""title"":""Datepicker tutorial w/polyfill""},{""url"":""https://github.com/zoltan-dulac/html5Forms.js"",""title"":""Polyfill for HTML5 forms""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-datetime;input-type-datetime-local"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/input/type/date"",""title"":""WebPlatform Docs""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=888320"",""title"":""Bug on Firefox support""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #2"",""6.0-6.1"":""a #2"",""7.0-7.1"":""a #2"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9"":""a #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n #3"",""4.1"":""n #3"",""4.2-4.3"":""n #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Older versions of Safari provide date-formatted text fields, but no real calendar widget.\r\n\r\nChrome and Opera also support the `datetime-local` type for both date and time, but not the `datetime` one."",""notes_by_num"":{""1"":""Partial support in Microsoft Edge refers to supporting `date`, `week`, and `month` input types and not `time`, `datetime`, and `datetime-local`."",""2"":""Partial support in iOS Safari refers to not supporting `min`, `max` or `step` attributes"",""3"":""Some modified versions of the Android 4.x browser do have support for date/time fields.""},""usage_perc_y"":55.46,""usage_perc_a"":7.51,""ucprefix"":false,""parent"":""forms"",""keywords"":""datepicker,timepicker,input type=\""date\"",input type=\""time\"""",""ie_id"":""daterelatedinputtypes,timerelatedinputtypes"",""chrome_id"":""6640933999214592""},""input-color"":{""title"":""Color input type"",""description"":""Form field allowing the user to select a color."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#color-state-(type=color)"",""status"":""ls"",""links"":[{""url"":""http://www.html5tutorial.info/html5-color.php"",""title"":""Tutorial""},{""url"":""https://github.com/jonstipe/color-polyfill"",""title"":""Polyfill""},{""url"":""http://docs.webplatform.org/wiki/html/elements/input/type/color"",""title"":""WebPlatform Docs""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514216--input-type-color"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":59.26,""usage_perc_a"":5.94,""ucprefix"":false,""parent"":""forms"",""keywords"":""colour,input type=\""color\"""",""ie_id"":"""",""chrome_id"":""""},""input-number"":{""title"":""Number input type"",""description"":""Form field type for numbers."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#number-state-(type=number)"",""status"":""ls"",""links"":[{""url"":""http://www.html5tutorial.info/html5-number.php"",""title"":""Tutorial""},{""url"":""https://github.com/jonstipe/number-polyfill"",""title"":""Polyfill""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-type-number"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/elements/input/type/number"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y #3"",""30"":""y #3"",""31"":""y #3"",""32"":""y #3"",""33"":""y #3"",""34"":""y #3"",""35"":""y #3"",""36"":""y #3"",""37"":""y #3"",""38"":""y #3"",""39"":""y #3"",""40"":""y #3"",""41"":""y #3"",""42"":""y #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #1 #2"",""4.0-4.1"":""a #1 #2"",""4.2-4.3"":""a #1 #2"",""5.0-5.1"":""a #1 #2"",""6.0-6.1"":""a #1 #2"",""7.0-7.1"":""a #1 #2"",""8"":""a #1 #2"",""8.1-8.4"":""a #1 #2"",""9"":""a #1 #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""a #1 #2"",""4.1"":""a #1 #2"",""4.2-4.3"":""a #1 #2"",""4.4"":""a #1 #2"",""4.4.3-4.4.4"":""a #1 #2"",""40"":""a #1 #2""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""a #3""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":"""",""notes_by_num"":{""1"":""UI widget does not include increment/decrement buttons."",""2"":""UI widget does not take the \""step\"", \""min\"" or \""max\"" attributes into account."",""3"":""Firefox doesn't support [autocomplete content via datalist](http://codepen.io/graste/pen/bNoVKW) elements.""},""usage_perc_y"":45.1,""usage_perc_a"":43.25,""ucprefix"":false,""parent"":""forms"",""keywords"":""spinner,input type=\""number\"""",""ie_id"":"""",""chrome_id"":""""},""getboundingclientrect"":{""title"":""Element.getBoundingClientRect()"",""description"":""Method to get the size and position of an element's bounding box, relative to the viewport."",""spec"":""http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect"",""title"":""Mozilla Developer Network""},{""url"":""https://msdn.microsoft.com/en-us/library/ms536433(VS.85).aspx"",""title"":""Microsoft Developer Network""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""a #1 #3"",""6"":""a #1 #3"",""7"":""a #1 #3"",""8"":""a #1 #3"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""a #1 #4"",""3.5"":""a #2 #4"",""3.6"":""a #2 #3 #4"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""a #1"",""10.5"":""a #1"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""a #1"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""The returned object lacks `width` and `height` properties."",""2"":""Returns incorrect values for elements which have had CSS `transform`s applied to them."",""3"":""The returned object cannot have new properties added to it; it's not extensible."",""4"":""Existing properties of the returned object are immutable.""},""usage_perc_y"":95.28,""usage_perc_a"":2.37,""ucprefix"":false,""parent"":"""",""keywords"":""getBoundingClientRect,bounding,client,rect,DOMRect,box,cssom"",""ie_id"":"""",""chrome_id"":""""},""iframe-sandbox"":{""title"":""sandbox attribute for iframes"",""description"":""Method of running external site pages with reduced privileges (e.g. no JavaScript) in iframes."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-sandbox"",""status"":""ls"",""links"":[{""url"":""http://blog.chromium.org/2010/05/security-in-depth-html5s-sandbox.html"",""title"":""Chromium blog article""},{""url"":""http://msdn.microsoft.com/en-us/hh563496"",""title"":""MSDN article""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/sandbox"",""title"":""WebPlatform Docs""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":88.31,""usage_perc_a"":0.37,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""iframesandboxattribute"",""chrome_id"":""5715536319086592""},""css-counters"":{""title"":""CSS Counters"",""description"":""Method of controlling number values in generated content, using the counter-reset and counter-increment properties."",""spec"":""http://www.w3.org/TR/CSS21/generate.html#counters"",""status"":""wd"",""links"":[{""url"":""http://onwebdev.blogspot.com/2012/02/css-counters-tutorial.html"",""title"":""Tutorial and information""},{""url"":""https://developer.mozilla.org/en/CSS_Counters"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/css/properties/counter-reset"",""title"":""WebPlatform Docs""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":97.54,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-resize"":{""title"":""CSS resize property"",""description"":""Method of allowing an element to be resized by the user, with options to limit to a given direction. "",""spec"":""http://www.w3.org/TR/css3-ui/#resize"",""status"":""wd"",""links"":[{""url"":""http://css-tricks.com/almanac/properties/r/resize/"",""title"":""CSS Tricks info""},{""url"":""http://davidwalsh.name/textarea-resize"",""title"":""On textarea resizing""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6513977-css-resize-property"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y x"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""a #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Presto-based Opera 12.10+ currently only supports the resize property for textarea elements.""},""usage_perc_y"":59.55,""usage_perc_a"":0.15,""ucprefix"":false,""parent"":"""",""keywords"":""horizontal,vertical"",""ie_id"":"""",""chrome_id"":""""},""input-placeholder"":{""title"":""input placeholder attribute"",""description"":""Method of setting placeholder text for text-like input fields, to suggest the expected inserted information."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-input-placeholder"",""status"":""ls"",""links"":[{""url"":""http://www.zachleat.com/web/placeholder/"",""title"":""Article on usage""},{""url"":""https://github.com/mathiasbynens/jquery-placeholder"",""title"":""Polyfill""},{""url"":""https://raw.github.com/phiggins42/has.js/master/detect/form.js#input-attr-placeholder"",""title"":""has.js test""},{""url"":""http://docs.webplatform.org/wiki/html/attributes/placeholder"",""title"":""WebPlatform Docs""},{""url"":""https://code.google.com/p/android/issues/detail?id=24626"",""title"":""Issue 24626: Placeholder text for an input type=""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to lacking placeholder support on textarea elements.""},""usage_perc_y"":88.2,""usage_perc_a"":1.03,""ucprefix"":false,""parent"":""forms"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""spdy"":{""title"":""SPDY protocol"",""description"":""Networking protocol for low-latency transport of content over the web. Superseded by HTTP version 2."",""spec"":""http://http2.github.io/http2-spec/index.html"",""status"":""unoff"",""links"":[{""url"":""http://en.wikipedia.org/wiki/HTTP/2"",""title"":""Wikipedia""},{""url"":""http://dev.chromium.org/spdy/spdy-whitepaper"",""title"":""SPDY whitepaper""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""1"":""u""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""See also support for [HTTP2](http://caniuse.com/#feat=http2), successor of SPDY.\r\n\r\nChrome will be removing support in 2016 (in favor of HTTP2), other browsers likely to follow."",""notes_by_num"":{},""usage_perc_y"":78.41,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""http2"",""chrome_id"":""5152586365665280""},""css-repeating-gradients"":{""title"":""CSS Repeating Gradients"",""description"":""Method of defining a repeating linear or radial color gradient as a CSS image."",""spec"":""http://www.w3.org/TR/css3-images/#repeating-gradients"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en/CSS/repeating-linear-gradient"",""title"":""MDN article""},{""url"":""http://www.css3files.com/gradient/#repeatinglineargradient"",""title"":""Information page""},{""url"":""http://docs.webplatform.org/wiki/css/repeating-linear-gradient"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""a x"",""11.5"":""a x"",""11.6"":""y x"",""12"":""y x"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""a x"",""11.5"":""a x"",""12"":""y x"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""Firefox 10+, Chrome 26+ and Opera 11.6+ also support the new \""to (side)\"" syntax."",""notes_by_num"":{},""usage_perc_y"":88.89,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":""css-gradients"",""keywords"":""repeating-linear-gradient,repeating-radial-gradient"",""ie_id"":"""",""chrome_id"":""""},""css-filters"":{""title"":""CSS Filter Effects"",""description"":""Method of applying filter effects (like blur, grayscale, brightness, contrast and hue) to elements, previously only possible by using SVG."",""spec"":""http://www.w3.org/TR/filter-effects-1/"",""status"":""wd"",""links"":[{""url"":""http://html5-demos.appspot.com/static/css/filters/index.html"",""title"":""Demo file for WebKit browsers""},{""url"":""http://www.html5rocks.com/en/tutorials/filters/understanding-css/"",""title"":""HTML5Rocks article""},{""url"":""http://dl.dropbox.com/u/3260327/angular/CSS3ImageManipulation.html"",""title"":""Filter editor""},{""url"":""http://bennettfeely.com/filters/"",""title"":""Filter Playground""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n d #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""a #3"",""4"":""a #3"",""5"":""a #3"",""6"":""a #3"",""7"":""a #3"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #3"",""12"":""a #3"",""13"":""a #3"",""14"":""a #3"",""15"":""a #3"",""16"":""a #3"",""17"":""a #3"",""18"":""a #3"",""19"":""a #3"",""20"":""a #3"",""21"":""a #3"",""22"":""a #3"",""23"":""a #3"",""24"":""a #3"",""25"":""a #3"",""26"":""a #3"",""27"":""a #3"",""28"":""a #3"",""29"":""a #3"",""30"":""a #3"",""31"":""a #3"",""32"":""a #3"",""33"":""a #3"",""34"":""a d #1"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""Note that this property is significantly different from and incompatible with Microsoft's [older \""filter\"" property](http://msdn.microsoft.com/en-us/library/ie/ms530752%28v=vs.85%29.aspx)."",""notes_by_num"":{""1"":""Supported in Firefox under the `layout.css.filters.enabled` flag."",""2"":""Supported in Project Spartan under the \""Enable CSS filter property\"" flag. Supports filter functions, but not the `url` function."",""3"":""Partial support in Firefox before version 34 [only implemented the url() function of the filter property](https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Browser_compatibility)""},""usage_perc_y"":74.08,""usage_perc_a"":2.08,""ucprefix"":false,""parent"":"""",""keywords"":""sepia,hue-rotate,invert,saturate"",""ie_id"":""filters"",""chrome_id"":""5822463824887808""},""getcomputedstyle"":{""title"":""getComputedStyle"",""description"":""API to get the current computed CSS styles applied to an element. This may be the current value applied by an animation or as set by a stylesheet."",""spec"":""http://www.w3.org/TR/cssom/#dom-window-getcomputedstyle"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en/DOM/window.getComputedStyle"",""title"":""MDN article""},{""url"":""http://ie.microsoft.com/testdrive/HTML5/getComputedStyle/"",""title"":""Demo""},{""url"":""http://snipplr.com/view/13523/"",""title"":""Polyfill for IE""},{""url"":""http://docs.webplatform.org/wiki/css/cssom/methods/getComputedStyle"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3"",""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #2"",""3.2"":""a #2"",""4"":""a #2"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""a #2"",""9.5-9.6"":""a #2"",""10.0-10.1"":""a #2"",""10.5"":""a #2"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #2"",""4.0-4.1"":""a #2"",""4.2-4.3"":""a #2"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a #2""},""android"":{""2.1"":""a #2"",""2.2"":""a #2"",""2.3"":""a #2"",""3"":""a #2"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #2"",""10"":""y""},""op_mob"":{""10"":""a #2"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to requiring the second parameter to be included."",""2"":""Partial support refers to not supporting getComputedStyle on pseudo-elements.""},""usage_perc_y"":90.43,""usage_perc_a"":5.14,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""mp3"":{""title"":""MP3 audio format"",""description"":""Popular lossy audio compression format"",""spec"":""http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html"",""status"":""other"",""links"":[{""url"":""https://en.wikipedia.org/wiki/MP3"",""title"":""Wikipedia""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in older Firefox refers to being limited to certain operating systems.""},""usage_perc_y"":89.93,""usage_perc_a"":0.5,""ucprefix"":false,""parent"":""audio"",""keywords"":""mpeg"",""ie_id"":"""",""chrome_id"":""""},""word-break"":{""title"":""CSS3 word-break"",""description"":""Property to prevent or allow words to be broken over multiple lines between letters."",""spec"":""http://www.w3.org/TR/css3-text/#word-break"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en/CSS/word-break"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/css/properties/word-break"",""title"":""WebPlatform Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""a"",""37"":""a"",""38"":""a"",""39"":""a"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""a""},""bb"":{""7"":""a"",""10"":""a""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a""}},""notes"":""Partial support refers to supporting the `break-all` value, but not the `keep-all` value.\r\n\r\nChrome, Safari and other WebKit/Blink browsers also support the unofficial `break-word` value which is treated like `word-wrap: break-word`."",""notes_by_num"":{},""usage_perc_y"":23.91,""usage_perc_a"":68.49,""ucprefix"":false,""parent"":"""",""keywords"":""break-all,keep-all"",""ie_id"":"""",""chrome_id"":""""},""viewport-units"":{""title"":""Viewport units: vw, vh, vmin, vmax"",""description"":""Length units representing 1% of the viewport size for viewport width (vw), height (vh), the smaller of the two (vmin), or the larger of the two (vmax)."",""spec"":""http://www.w3.org/TR/css3-values/#viewport-relative-lengths"",""status"":""cr"",""links"":[{""url"":""http://css-tricks.com/viewport-sized-typography/"",""title"":""Blog post""},{""url"":""https://github.com/saabi/vminpoly"",""title"":""Polyfill""},{""url"":""https://github.com/rodneyrehm/viewport-units-buggyfill"",""title"":""Buggyfill - Polyfill that fixes buggy support""},{""url"":""http://blog.rodneyrehm.de/archives/34-iOS7-Mobile-Safari-And-Viewport-Units.html"",""title"":""Back-Forward issue blog post""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514497-vmax-unit"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #2"",""11"":""a #2""},""edge"":{""1"":""a #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""a #2"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""a #2 #3"",""7.0-7.1"":""a #3"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #2"",""11"":""a #2""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE9 refers to supporting \""vm\"" instead of \""vmin\""."",""2"":""Partial support refers to not supporting the \""vmax\"" unit. "",""3"":""Partial support in iOS7 is due to buggy behavior of the \""vh\"" unit (see [workaround](https://gist.github.com/pburtchaell/e702f441ba9b3f76f587)).""},""usage_perc_y"":68.53,""usage_perc_a"":12.41,""ucprefix"":false,""parent"":"""",""keywords"":""vm,viewport-percentage"",""ie_id"":"""",""chrome_id"":""""},""contentsecuritypolicy"":{""title"":""Content Security Policy 1.0"",""description"":""Mitigate cross-site scripting attacks by whitelisting allowed sources of script, style, and other resources."",""spec"":""http://www.w3.org/TR/2012/CR-CSP-20121115/"",""status"":""cr"",""links"":[{""url"":""http://html5rocks.com/en/tutorials/security/content-security-policy/"",""title"":""HTML5Rocks article""},{""url"":""http://content-security-policy.com/"",""title"":""CSP Examples & Quick Reference""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y #2"",""15"":""y #2"",""16"":""y #2"",""17"":""y #2"",""18"":""y #2"",""19"":""y #2"",""20"":""y #2"",""21"":""y #2"",""22"":""y #2"",""23"":""y #2"",""24"":""y #2"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""a #2"",""6"":""y #2"",""6.1"":""y #2"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #2"",""6.0-6.1"":""y #2"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y #2""}},""notes"":""The standard HTTP header is `Content-Security-Policy` which is used unless otherwise noted."",""notes_by_num"":{""1"":""Supported through the `X-Content-Security-Policy` header"",""2"":""Supported through the `X-Webkit-CSP` header""},""usage_perc_y"":76.16,""usage_perc_a"":9.93,""ucprefix"":false,""parent"":"""",""keywords"":""csp,security,header"",""ie_id"":""contentsecuritypolicy"",""chrome_id"":""5205088045891584""},""pagevisibility"":{""title"":""Page Visibility"",""description"":""JavaScript API for determining whether a document is visible on the display"",""spec"":""http://www.w3.org/TR/page-visibility/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/apis/timing/properties/visibilityState"",""title"":""WebPlatform Docs""},{""url"":""http://www.sitepoint.com/introduction-to-page-visibility-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/page-visibility-api-demo.html"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":85.75,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""visibilitystate"",""ie_id"":""pagevisibilityapi"",""chrome_id"":""5689697795833856""},""stricttransportsecurity"":{""title"":""Strict Transport Security"",""description"":""Declare that a website is only accessible over a secure connection (HTTPS)."",""spec"":""http://tools.ietf.org/html/rfc6797"",""status"":""other"",""links"":[{""url"":""http://dev.chromium.org/sts"",""title"":""Chromium article""},{""url"":""https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security"",""title"":""MDN article""},{""url"":""https://www.owasp.org/index.php/HTTP_Strict_Transport_Security"",""title"":""OWASP article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The HTTP header is 'Strict-Transport-Security'."",""notes_by_num"":{""1"":""IE 11 added support [in an update](http://blogs.windows.com/msedgedev/2015/06/09/http-strict-transport-security-comes-to-internet-explorer-11-on-windows-8-1-and-windows-7/) on June 9, 2015""},""usage_perc_y"":77.78,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""sts,hsts,security,header"",""ie_id"":""httpstricttransportsecurityhsts"",""chrome_id"":""4941480133132288""},""style-scoped"":{""title"":""Scoped CSS"",""description"":""Allows CSS rules to be scoped to part of the document, based on the position of the style element."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#attr-style-scoped"",""status"":""ls"",""links"":[{""url"":""https://github.com/PM5544/scoped-polyfill"",""title"":""Polyfill""},{""url"":""http://html5doctor.com/the-scoped-attribute/"",""title"":""HTML5 Doctor article""},{""url"":""http://updates.html5rocks.com/2012/03/A-New-Experimental-Feature-style-scoped"",""title"":""HTML5Rocks article""}],""categories"":[""CSS"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n d #1"",""21"":""n d #1"",""22"":""n d #1"",""23"":""n d #1"",""24"":""n d #1"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags""},""usage_perc_y"":16.12,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""scope"",""ie_id"":""scopedstyles"",""chrome_id"":""5374137958662144""},""svg-fragment"":{""title"":""SVG fragment identifiers"",""description"":""Method of displaying only a part of an SVG image by defining a view ID or view box dimensions as the file's fragment identifier."",""spec"":""http://www.w3.org/TR/SVG/linking.html#SVGFragmentIdentifiers"",""status"":""rec"",""links"":[{""url"":""http://www.broken-links.com/2012/08/14/better-svg-sprites-with-fragment-identifiers/"",""title"":""Blog post""}],""categories"":[""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""a"",""10.5"":""a"",""10.6"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""11.6"":""a"",""12"":""a"",""12.1"":""y"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""a"",""11"":""a"",""11.1"":""a"",""11.5"":""a"",""12"":""a"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":78.34,""usage_perc_a"":0.09,""ucprefix"":false,""parent"":"""",""keywords"":""fragments,sprite"",""ie_id"":"""",""chrome_id"":""""},""outline"":{""title"":""CSS outline"",""description"":""The CSS outline property is a shorthand property for setting one or more of the individual outline properties outline-style, outline-width and outline-color in a single rule. In most cases the use of this shortcut is preferable and more convenient."",""spec"":""http://www.w3.org/TR/CSS2/ui.html#propdef-outline"",""status"":""rec"",""links"":[{""url"":""http://dev.w3.org/csswg/css3-ui/#outline"",""title"":""CSS Basic User Interface Module Level 3""},{""url"":""https://developer.mozilla.org/en-US/docs/CSS/outline"",""title"":""Mozilla Developer Network: outline""}],""categories"":[""CSS2""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""y"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1""},""edge"":{""1"":""y #1""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y #1"",""11"":""y #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Also supports the value of `invert` for `outline-color`. (support of this value is optional for browsers)""},""usage_perc_y"":92.83,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""-moz-outline,outline-width,outline-style,outline-color"",""ie_id"":"""",""chrome_id"":""""},""download"":{""title"":""Download attribute"",""description"":""When used on an anchor, this attribute signifies that the browser should download the resource the anchor points to rather than navigate to it."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#downloading-resources"",""status"":""ls"",""links"":[{""url"":""http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download"",""title"":""HTML5Rocks post""},{""url"":""http://html5-demos.appspot.com/static/a.download.html"",""title"":""Demo: creating a text file and downloading it.""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":59.39,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""download,a.download,a[download],download attribute"",""ie_id"":""adownloadattribute"",""chrome_id"":""6473924464345088""},""pointer"":{""title"":""Pointer events"",""description"":""This specification integrates various inputs from mice, touchscreens, and pens, making separate implementations no longer necessary and authoring for cross-device pointers easier. Not to be mistaken with the unrelated \""pointer-events\"" CSS property."",""spec"":""http://www.w3.org/TR/pointerevents/"",""status"":""rec"",""links"":[{""url"":""http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx"",""title"":""Implementation of Pointer Events in IE10""},{""url"":""http://blogs.msdn.com/b/eternalcoding/archive/2013/01/16/hand-js-a-polyfill-for-supporting-pointer-events-on-every-browser.aspx"",""title"":""Hand.js, the polyfill for browsers only supporting Touch Events""},{""url"":""http://blogs.msdn.com/b/davrous/archive/2013/02/20/handling-touch-in-your-html5-apps-thanks-to-the-pointer-events-of-ie10-and-windows-8.aspx"",""title"":""Article & tutorial""},{""url"":""http://deeptissuejs.com"",""title"":""Abstraction library for pointer events""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p"",""43"":""p"",""44"":""p"",""45"":""p"",""46"":""p"",""47"":""p""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""40"":""p""},""bb"":{""7"":""p"",""10"":""p""},""op_mob"":{""10"":""n"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""p""},""and_chr"":{""42"":""p""},""and_ff"":{""38"":""p""},""ie_mob"":{""10"":""a x"",""11"":""y""},""and_uc"":{""9.9"":""p""}},""notes"":""Partial support in IE10 refers the lack of pointerenter and pointerleave events. Firefox Nightly provides 'dom.w3c_pointer_events.enabled' option to support this specification starting with version 28."",""notes_by_num"":{},""usage_perc_y"":8.23,""usage_perc_a"":1.43,""ucprefix"":false,""parent"":"""",""keywords"":""pointerdown,pointermove,pointerup,pointercancel,pointerover,pointerout,pointerenter,pointerleave"",""ie_id"":""pointerevents"",""chrome_id"":""4504699138998272""},""user-select-none"":{""title"":""CSS user-select: none"",""description"":""Method of preventing text/element selection using CSS. "",""spec"":""https://developer.mozilla.org/en-US/docs/CSS/user-select"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/CSS/user-select"",""title"":""MDN article""},{""url"":""http://css-tricks.com/almanac/properties/u/user-select/"",""title"":""CSS Tricks article""},{""url"":""http://msdn.microsoft.com/en-us/library/ie/hh781492(v=vs.85).aspx"",""title"":""MSDN Documentation""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x"",""11"":""y x""},""edge"":{""1"":""y x""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""y x"",""11"":""y x""},""and_uc"":{""9.9"":""y x""}},""notes"":""Currently the user-select property does not appear in any W3C specification. Support information here is only for \""none\"" value, not others."",""notes_by_num"":{},""usage_perc_y"":89.1,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""webp"":{""title"":""WebP image format"",""description"":""Image format that supports lossy and lossless compression, as well as animation and alpha transparency."",""spec"":""https://developers.google.com/speed/webp/"",""status"":""unoff"",""links"":[{""url"":""https://developers.google.com/speed/webp/"",""title"":""Official website""},{""url"":""http://antimatter15.github.io/weppy/demo.html"",""title"":""Polyfill for browsers with WebM support""},{""url"":""http://libwebpjs.appspot.com/"",""title"":""Decoder in JS""},{""url"":""http://webpjs.appspot.com/"",""title"":""Polyfill for browsers with or without WebM support (i.e. IE6-IE9, Safari/iOS version 6.1 and below; Firefox versions 24 and bel""},{""url"":""https://developers.google.com/speed/webp/faq#which_web_browsers_natively_support_webp"",""title"":""Official website FAQ - Which web browsers natively support WebP?""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""p"",""38"":""p"",""39"":""p"",""40"":""p"",""41"":""p"",""42"":""p""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""p"",""11"":""p"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""a #1"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""p""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Animated WebP images are supported in Chrome 32+ and Opera 19+."",""notes_by_num"":{""1"":""Partial support in older Chrome, Opera and Android refers to browsers not supporting lossless and alpha versions of WebP.""},""usage_perc_y"":61.31,""usage_perc_a"":1.31,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""webpimageformatsupport"",""chrome_id"":""6471725441089536,4785074604081152""},""input-autocomplete-onoff"":{""title"":""autocomplete attribute: on & off values"",""description"":""The `autocomplete` attribute for `input` elements indicates to the browser whether a value should or should not be autofilled when appropriate."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#autofill"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-autocomplete"",""title"":""MDN article""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""a #1""},""edge"":{""1"":""a #1""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""a #3"",""39"":""a #3"",""40"":""a #3"",""41"":""a #3"",""42"":""a #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #2"",""42"":""a #2"",""43"":""a #2"",""44"":""a #2"",""45"":""a #2"",""46"":""a #2"",""47"":""a #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""a #5"",""7.1"":""a #5"",""8"":""a #5"",""9"":""a #5""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y #4"",""6.0-6.1"":""y #4"",""7.0-7.1"":""y #4"",""8"":""y #4"",""8.1-8.4"":""y #4"",""9"":""y #4""},""op_mini"":{""5.0-8.0"":""y #4""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #5"",""11"":""a #5""},""and_uc"":{""9.9"":""y #4""}},""notes"":""This support information does not include support for other `autocomplete` values.\r\n\r\nAs described in detail below, many modern browsers ignore the `off` value on certain fields in certain cases intentionally in order to give the user more control over autofilling fields."",""notes_by_num"":{""1"":""Partial support refers to ignoring the `off` value for password fields. [see related blog post](http://blogs.msdn.com/b/ieinternals/archive/2009/09/10/troubleshooting-stored-login-problems-in-ie.aspx)"",""2"":""Partial support in Chrome refers to the browser intentionally ignoring `autocomplete=\""off\""` when the user uses the browser's autofill functionality. [see bug](https://code.google.com/p/chromium/issues/detail?id=468153#c29)"",""3"":""Partial support in Firefox refers to ignoring `autocomplete=\""off\""` for login forms. [see bug](https://bugzilla.mozilla.org/show_bug.cgi?id=956906)"",""4"":""Browser does not display previously submitted values as options with `on` value."",""5"":""Safari ignores the `off` value for [username, email and password fields](http://stackoverflow.com/questions/22661977/disabling-safari-autofill-on-usernames-and-passwords)""},""usage_perc_y"":48.09,""usage_perc_a"":49.25,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""intrinsic-width"":{""title"":""Intrinsic & Extrinsic Sizing"",""description"":""Allows for the heights and widths to be specified in intrinsic values using the `fill-available`, `max-content`, `min-content`, and `fit-content` properties."",""spec"":""http://www.w3.org/TR/css3-sizing/"",""status"":""wd"",""links"":[{""url"":""http://demosthenes.info/blog/662/Design-From-the-Inside-Out-With-CSS-MinContent"",""title"":""Min-Content tutorial""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""a x #1 #2"",""3.5"":""a x #1 #2"",""3.6"":""a x #1 #2"",""4"":""a x #1 #2"",""5"":""a x #1 #2"",""6"":""a x #1 #2"",""7"":""a x #1 #2"",""8"":""a x #1 #2"",""9"":""a x #1 #2"",""10"":""a x #1 #2"",""11"":""a x #1 #2"",""12"":""a x #1 #2"",""13"":""a x #1 #2"",""14"":""a x #1 #2"",""15"":""a x #1 #2"",""16"":""a x #1 #2"",""17"":""a x #1 #2"",""18"":""a x #1 #2"",""19"":""a x #1 #2"",""20"":""a x #1 #2"",""21"":""a x #1 #2"",""22"":""a x #1 #2"",""23"":""a x #1 #2"",""24"":""a x #1 #2"",""25"":""a x #1 #2"",""26"":""a x #1 #2"",""27"":""a x #1 #2"",""28"":""a x #1 #2"",""29"":""a x #1 #2"",""30"":""a x #1 #2"",""31"":""a x #1 #2"",""32"":""a x #1 #2"",""33"":""a x #1 #2"",""34"":""a x #1 #2"",""35"":""a x #1 #2"",""36"":""a x #1 #2"",""37"":""a x #1 #2"",""38"":""a x #1 #2"",""39"":""a x #1 #2"",""40"":""a x #1 #2"",""41"":""a x #1 #2"",""42"":""a x #1 #2""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""a x #1"",""8"":""a x #1"",""9"":""a x #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a x #1"",""8"":""a x #1"",""8.1-8.4"":""a x #1"",""9"":""a x #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""a x #1 #2""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Prefixes are on the values, not the property names (e.g. -webkit-min-content)\r\n\r\nOlder webkit browsers also support the unofficial `intrinsic` value which acts the same as `max-content`."",""notes_by_num"":{""1"":""Does not support `fit-content` for height attribute, only width. [see test case](http://codepen.io/shshaw/pen/Kiwaz)"",""2"":""Firefox currently supports the \""-moz-available\"" property rather than \""-moz-fill-available\"".""},""usage_perc_y"":49.07,""usage_perc_a"":20.97,""ucprefix"":false,""parent"":"""",""keywords"":""fill-available,max-content,min-content,fit-content,contain-floats"",""ie_id"":""cssintrinsicsizing"",""chrome_id"":""5901353784180736""},""cryptography"":{""title"":""Web Cryptography"",""description"":""JavaScript API for performing basic cryptographic operations in web applications"",""spec"":""http://www.w3.org/TR/WebCryptoAPI/"",""status"":""wd"",""links"":[{""url"":""http://www.slideshare.net/Channy/the-history-and-status-of-web-crypto-api"",""title"":""The History and Status of Web Crypto API""},{""url"":""http://research.microsoft.com/en-us/projects/msrjscrypto/"",""title"":""Microsoft Research JavaScript Cryptography Library""},{""url"":""http://bitwiseshiftleft.github.io/sjcl/"",""title"":""Cross-browser cryptography library""},{""url"":""https://docs.google.com/spreadsheet/ccc?key=0AiAcidBZRLxndE9LWEs2R1oxZ0xidUVoU3FQbFFobkE#gid=1"",""title"":""Support for recommended algorithms in Firefox""},{""url"":""https://github.com/Netflix/NfWebCrypto"",""title"":""Polyfill by Netflix with partial support""},{""url"":""https://github.com/GlobalSign/PKI.js"",""title"":""PKI.js - another crypto library for Public Key Infrastructure applications""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""a x #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""n d #2"",""33"":""n d #2"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""p"",""33"":""p"",""34"":""p"",""35"":""p"",""36"":""p"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""y x #3"",""8"":""y x #3"",""9"":""y x #3""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""y x #3"",""8.1-8.4"":""y x #3"",""9"":""y x #3""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""p"",""40"":""y""},""bb"":{""7"":""p"",""10"":""p""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""p""},""ie_mob"":{""10"":""p"",""11"":""a x #1""},""and_uc"":{""9.9"":""p""}},""notes"":""Many browsers support the `[crypto.getRandomValues()](#feat=getrandomvalues)` method, but not actual cryptography functionality under `crypto.subtle`. \r\n\r\nFirefox also has support for [unofficial features](https://developer.mozilla.org/en-US/docs/JavaScript_crypto). \r\n\r\nIn Chrome the API is only usable over secure connections. ([corresponding bug](https://code.google.com/p/chromium/issues/detail?id=373032))"",""notes_by_num"":{""1"":""Support in IE11 is based an older version of the specification."",""2"":""Supported in Firefox behind the `dom.webcrypto.enabled` flag."",""3"":""Supported in Safari using the `crypto.webkitSubtle` prefix.""},""usage_perc_y"":59.81,""usage_perc_a"":8.23,""ucprefix"":false,""parent"":"""",""keywords"":""subtle,subtlecrypto"",""ie_id"":""webcryptoapi"",""chrome_id"":""5030265697075200""},""template"":{""title"":""HTML templates"",""description"":""Method of declaring a portion of reusable markup that is parsed but not rendered until cloned."",""spec"":""https://html.spec.whatwg.org/multipage/scripting.html#the-template-element"",""status"":""ls"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/webcomponents/template/"",""title"":""HTML5Rocks - HTML's New template Tag""},{""url"":""http://polymer-project.org"",""title"":""Polymer project (polyfill & web components framework)""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":67.55,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web components, template"",""ie_id"":""templateelement"",""chrome_id"":""5207287069147136""},""opus"":{""title"":""Opus"",""description"":""Royalty-free open audio codec by IETF, which incorporated SILK from Skype and CELT from Xiph.org, to serve higher sound quality and lower latency at the same bitrate."",""spec"":""http://tools.ietf.org/html/rfc6716"",""status"":""other"",""links"":[{""url"":""https://hacks.mozilla.org/2012/07/firefox-beta-15-supports-the-new-opus-audio-format/"",""title"":""Introduction of Opus by Mozilla""},{""url"":""http://www.ietf.org/mail-archive/web/rtcweb/current/msg04953.html"",""title"":""Google's statement about the use of VP8 and Opus codec for WebRTC standard""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6513488-ogg-vorbis-and-opus-audio-formats-support-firefox"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""For Opera the Linux version may be able to play it when the GStreamer module is up to date and the served mime-type is 'audio/ogg'."",""notes_by_num"":{},""usage_perc_y"":40.58,""usage_perc_a"":0,""ucprefix"":false,""parent"":""audio"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""4891189287321600""},""jpegxr"":{""title"":""JPEG XR image format"",""description"":""The latest JPEG image format of Joint Photographic Experts Group which boasts better compression and supports lossless compression, alpha channel, and 48-bit deep color over normal jpg format."",""spec"":""http://www.itu.int/rec/T-REC-T.832"",""status"":""other"",""links"":[{""url"":""http://msdn.microsoft.com/en-us/library/windows/desktop/hh707223(v=vs.85).aspx"",""title"":""Microsoft JPEG XR Codec Overview""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":11.14,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""channel-messaging"":{""title"":""Channel messaging"",""description"":""Method for having two-way communication between browsing contexts (using MessageChannel)"",""spec"":""http://www.w3.org/TR/webmessaging/#channel-messaging"",""status"":""cr"",""links"":[{""url"":""https://dev.opera.com/articles/view/window-postmessage-messagechannel/#channel"",""title"":""An Introduction to HTML5 web messaging""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""u"",""10.0-10.1"":""u"",""10.5"":""u"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Supported in Firefox behind the `dom.messageChannel.enabled` flag. Reported to not work in web workers before version 41.""},""usage_perc_y"":76.12,""usage_perc_a"":0,""ucprefix"":false,""parent"":""x-doc-messaging"",""keywords"":"""",""ie_id"":""messagechannels"",""chrome_id"":""6710044586409984""},""css3-tabsize"":{""title"":""CSS3 tab-size"",""description"":""Method of customizing the width of the tab character. Only effective using 'white-space: pre' or 'white-space: pre-wrap'."",""spec"":""http://www.w3.org/TR/css3-text/#tab-size1"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/tab-size"",""title"":""MDN article""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6524689-tab-size-property"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""a x #1"",""11"":""a x #1"",""11.1"":""a x #1"",""11.5"":""a x #1"",""11.6"":""a x #1"",""12"":""a x #1"",""12.1"":""a x #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9"":""a #1""},""op_mini"":{""5.0-8.0"":""a x #1""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a #1"",""4.4.3-4.4.4"":""a #1"",""40"":""a #1""},""bb"":{""7"":""a #1"",""10"":""a #1""},""op_mob"":{""10"":""n"",""11"":""a x #1"",""11.1"":""a x #1"",""11.5"":""a x #1"",""12"":""a x #1"",""12.1"":""a x #1"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""a x #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial refers to supporting `<integer>` but not `<length>` values.""},""usage_perc_y"":40.04,""usage_perc_a"":34.97,""ucprefix"":false,""parent"":"""",""keywords"":""tab-size,tab-width"",""ie_id"":"""",""chrome_id"":""""},""mutationobserver"":{""title"":""Mutation Observer"",""description"":""Method for observing and reacting to changes to the DOM. Replaces MutationEvents, which is deprecated."",""spec"":""http://www.w3.org/TR/dom/#mutation-observers"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver"",""title"":""MutationObserver from MDN""},{""url"":""https://github.com/webcomponents/webcomponentsjs"",""title"":""Polyfill""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""p"",""10"":""p"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""p"",""11"":""y""},""and_uc"":{""9.9"":""y x""}},""notes"":""When the content of a node with a single CharacterData child node is changed by innerHTML attribute and the node have a single different one as a result, WebKit browsers consider it as a characterData mutation of the child CharacterData node, while other browsers think it as a childList mutation of the parent node."",""notes_by_num"":{},""usage_perc_y"":84.14,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""MutationObserver"",""ie_id"":""mutationobservers"",""chrome_id"":""5021194726146048""},""css-selection"":{""title"":""::selection CSS pseudo-element"",""description"":""The ::selection CSS pseudo-element applies rules to the portion of a document that has been highlighted (e.g., selected with the mouse or another pointing device) by the user."",""spec"":""http://www.w3.org/TR/css-pseudo-4/#selectordef-selection"",""status"":""wd"",""links"":[{""url"":""http://quirksmode.org/css/selectors/selection.html"",""title"":""::selection test""},{""url"":""http://docs.webplatform.org/wiki/css/selectors/pseudo-elements/::selection"",""title"":""WebPlatform Docs""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""u"",""11.1"":""u"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":74.79,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""::selection,selection"",""ie_id"":"""",""chrome_id"":""""},""css-placeholder"":{""title"":""::placeholder CSS pseudo-element"",""description"":""The ::placeholder pseudo-element represents placeholder text in an input field: text that represents the input and provides a hint to the user on how to fill out the form. For example, a date-input field might have the placeholder text `YYYY/MM/DD` to clarify that numeric dates are to be entered in year-month-day order."",""spec"":""http://dev.w3.org/csswg/css-pseudo-4/#placeholder-pseudo"",""status"":""wd"",""links"":[{""url"":""http://msdn.microsoft.com/en-us/library/ie/hh772745(v=vs.85).aspx"",""title"":""MSDN article""},{""url"":""http://css-tricks.com/snippets/css/style-placeholder-text/"",""title"":""CSS-Tricks article with all prefixes""},{""url"":""http://wiki.csswg.org/ideas/placeholder-styling"",""title"":""CSSWG discussion""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/::-moz-placeholder"",""title"":""MDN article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x"",""11"":""a x""},""edge"":{""1"":""a x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x""},""chrome"":{""4"":""a x"",""5"":""a x"",""6"":""a x"",""7"":""a x"",""8"":""a x"",""9"":""a x"",""10"":""a x"",""11"":""a x"",""12"":""a x"",""13"":""a x"",""14"":""a x"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x"",""38"":""a x"",""39"":""a x"",""40"":""a x"",""41"":""a x"",""42"":""a x"",""43"":""a x"",""44"":""a x"",""45"":""a x"",""46"":""a x"",""47"":""a x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""a x"",""5.1"":""a x"",""6"":""a x"",""6.1"":""a x"",""7"":""a x"",""7.1"":""a x"",""8"":""a x"",""9"":""a x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x"",""16"":""a x"",""17"":""a x"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""a x"",""5.0-5.1"":""a x"",""6.0-6.1"":""a x"",""7.0-7.1"":""a x"",""8"":""a x"",""8.1-8.4"":""a x"",""9"":""a x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x"",""2.2"":""a x"",""2.3"":""a x"",""3"":""a x"",""4"":""a x"",""4.1"":""a x"",""4.2-4.3"":""a x"",""4.4"":""a x"",""4.4.3-4.4.4"":""a x"",""40"":""a x""},""bb"":{""7"":""a x"",""10"":""a x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a x""},""and_chr"":{""42"":""a x""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""a x"",""11"":""a x""},""and_uc"":{""9.9"":""a x""}},""notes"":""Partial support refers to using alternate names:\r\n 1. `::-webkit-input-placeholder` (Chrome/Safari/Opera),\r\n 2. `:-ms-input-placeholder` (IE). "",""notes_by_num"":{""1"":""Firefox 18 and below supported the `:-moz-placeholder` pseudo-class rather than the `::-moz-placeholder` pseudo-element.""},""usage_perc_y"":10.21,""usage_perc_a"":78.76,""ucprefix"":false,""parent"":"""",""keywords"":""::placeholder,placeholder"",""ie_id"":"""",""chrome_id"":""""},""css-deviceadaptation"":{""title"":""CSS Device Adaptation"",""description"":""A standard way to override the size of viewport in web page using the `@viewport` rule, standardizing and replacing Apple's own popular `<meta>` viewport implementation."",""spec"":""http://www.w3.org/TR/css-device-adapt/"",""status"":""wd"",""links"":[{""url"":""https://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/"",""title"":""Introduction to meta viewport and @viewport in Opera Mobile""},{""url"":""http://msdn.microsoft.com/en-us/library/ie/hh708740(v=vs.85).aspx"",""title"":""Device adaptation in Internet Explorer 10""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6777420-unprefix-and-support-all-viewport-properties"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #1""},""edge"":{""1"":""a x #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d"",""30"":""n d"",""31"":""n d"",""32"":""n d"",""33"":""n d"",""34"":""n d"",""35"":""n d"",""36"":""n d"",""37"":""n d"",""38"":""n d"",""39"":""n d"",""40"":""n d"",""41"":""n d"",""42"":""n d"",""43"":""n d"",""44"":""n d"",""45"":""n d"",""46"":""n d"",""47"":""n d""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""a x #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""a x #2"",""11.1"":""a x #2"",""11.5"":""a x #2"",""12"":""a x #2"",""12.1"":""a x #2"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""a x #1"",""11"":""a x #1""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""IE only supports the 'width' and 'height' properties."",""2"":""Opera Mobile and Opera Mini only support the 'orientation' property.""},""usage_perc_y"":0,""usage_perc_a"":14.38,""ucprefix"":false,""parent"":"""",""keywords"":""viewport"",""ie_id"":"""",""chrome_id"":""4737164243894272""},""text-emphasis"":{""title"":""text-emphasis styling"",""description"":""Method of using small symbols next to each glyph to emphasize a run of text, commonly used in East Asian languages. The `text-emphasis` shorthand, and its `text-emphasis-style` and `text-emphasis-color` longhands, can be used to apply marks to the text. The `text-emphasis-position` property, which inherits separately, allows setting the emphasis marks' position with respect to the text."",""spec"":""http://www.w3.org/TR/css-text-decor-3/#text-emphasis"",""status"":""cr"",""links"":[{""url"":""https://github.com/zmmbreeze/jquery.emphasis/"",""title"":""A javascript fallback for CSS3 emphasis mark.""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514536-text-decoration-styling"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a x #1"",""4.4.3-4.4.4"":""a x #1"",""40"":""a x #1""},""bb"":{""7"":""n"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a x #1""},""and_chr"":{""42"":""a x #1""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x #1""}},""notes"":""Some old webkit browsers (like Chrome 24) support `-webkit-text-emphasis`, but does not support CJK languages and is therefore considered unsupported."",""notes_by_num"":{""1"":""Partial support refers to incorrect support for `-webkit-text-emphasis-position`. These browsers support `over` and `under` as values, but not the added `left` and `right` values required by the spec.""},""usage_perc_y"":9.45,""usage_perc_a"":55.74,""ucprefix"":false,""parent"":"""",""keywords"":""text-emphasis,text-emphasis-position,text-emphasis-style,text-emphasis-color"",""ie_id"":"""",""chrome_id"":""""},""midi"":{""title"":""Web MIDI API"",""description"":""The Web MIDI API specification defines a means for web developers to enumerate, manipulate and access MIDI devices"",""spec"":""http://webaudio.github.io/web-midi-api/"",""status"":""wd"",""links"":[{""url"":""https://github.com/cwilso/WebMIDIAPIShim"",""title"":""Polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":25.17,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""webmidiapi"",""chrome_id"":""4923613069180928""},""canvas-blending"":{""title"":""Canvas blend modes"",""description"":""Method of defining the effect resulting from overlaying two layers on a Canvas element. "",""spec"":""http://www.w3.org/TR/compositing-1/#blending"",""status"":""cr"",""links"":[{""url"":""http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/"",""title"":""Blog post""}],""categories"":[""Canvas""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":69.24,""usage_perc_a"":0,""ucprefix"":false,""parent"":""canvas"",""keywords"":"""",""ie_id"":""compositingandblendingincanvas2d"",""chrome_id"":""""},""clipboard"":{""title"":""Clipboard API"",""description"":""API to provide copy, cut and paste events as well as provide access to the OS clipboard."",""spec"":""http://www.w3.org/TR/clipboard-apis/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent"",""title"":""MDN page on ClipboardEvent""},{""url"":""https://www.lucidchart.com/techblog/2014/12/02/definitive-guide-copying-pasting-javascript/"",""title"":""Guide on cross-platform clipboard access""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""a #1 #2 #5"",""6"":""a #1 #2 #5"",""7"":""a #1 #2 #5"",""8"":""a #1 #2 #5"",""9"":""a #1 #2 #5"",""10"":""a #1 #2 #5"",""11"":""a #1 #2 #5""},""edge"":{""1"":""a #1 #2 #5""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""a #2 #3"",""23"":""a #2 #3"",""24"":""a #2 #3"",""25"":""a #2 #3"",""26"":""a #2 #3"",""27"":""a #2 #3"",""28"":""a #2 #3"",""29"":""a #2 #3"",""30"":""a #2 #3"",""31"":""a #2 #3"",""32"":""a #2 #3"",""33"":""a #2 #3"",""34"":""a #2 #3"",""35"":""a #2 #3"",""36"":""a #2 #3"",""37"":""a #2 #3"",""38"":""a #2 #3"",""39"":""a #2 #3"",""40"":""a #2 #3"",""41"":""a #2"",""42"":""a #2""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""a #3 #5"",""14"":""a #3 #5"",""15"":""a #3 #5"",""16"":""a #3 #5"",""17"":""a #3 #5"",""18"":""a #3 #5"",""19"":""a #3 #5"",""20"":""a #3 #5"",""21"":""a #3 #5"",""22"":""a #3 #5"",""23"":""a #3 #5"",""24"":""a #3 #5"",""25"":""a #3 #5"",""26"":""a #3 #5"",""27"":""a #3 #5"",""28"":""a #3 #5"",""29"":""a #3 #5"",""30"":""a #3 #5"",""31"":""a #3 #5"",""32"":""a #3 #5"",""33"":""a #3 #5"",""34"":""a #3 #5"",""35"":""a #3 #5"",""36"":""a #3 #5"",""37"":""a #3 #5"",""38"":""a #3 #5"",""39"":""a #3 #5"",""40"":""a #3 #5"",""41"":""a #3 #5"",""42"":""a #3 #5"",""43"":""a #5"",""44"":""a #5"",""45"":""a #5"",""46"":""a #5"",""47"":""a #5""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""a #2 #3 #5"",""5"":""a #2 #3 #5"",""5.1"":""a #2 #3 #5"",""6"":""a #2 #3 #5"",""6.1"":""a #2 #3 #5"",""7"":""a #2 #3 #5"",""7.1"":""a #2 #3 #5"",""8"":""a #2 #3 #5"",""9"":""a #2 #3 #5""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""u"",""10.6"":""u"",""11"":""u"",""11.1"":""u"",""11.5"":""u"",""11.6"":""u"",""12"":""u"",""12.1"":""a #3"",""15"":""a #3 #5"",""16"":""a #3 #5"",""17"":""a #3 #5"",""18"":""a #3 #5"",""19"":""a #3 #5"",""20"":""a #3 #5"",""21"":""a #3 #5"",""22"":""a #3 #5"",""23"":""a #3 #5"",""24"":""a #3 #5"",""25"":""a #3 #5"",""26"":""a #3 #5"",""27"":""a #3 #5"",""28"":""a #3 #5"",""29"":""a #3 #5"",""30"":""a #5"",""31"":""a #5"",""32"":""a #5""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #2 #3 #5"",""6.0-6.1"":""a #2 #3 #5"",""7.0-7.1"":""a #2 #3 #5"",""8"":""a #2 #3 #5"",""8.1-8.4"":""a #2 #3 #5"",""9"":""a #2 #3 #5""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a #2 #5"",""4.4.3-4.4.4"":""a #2 #5"",""40"":""a #2 #5""},""bb"":{""7"":""n"",""10"":""a #2 #5""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""u"",""30"":""a #4 #5""},""and_chr"":{""42"":""a #5""},""and_ff"":{""38"":""a #4""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Internet Explorer will display a security prompt for access to the OS clipboard.\r\n\r\nChrome 42+ and Opera 29+ support clipboard reading/writing only when part of a user action (click, keydown, etc)\r\n\r\nFirefox users [can enable support](https://developer.mozilla.org/en-US/docs/Midas/Security_preferences) with a security preference setting."",""notes_by_num"":{""1"":""Only supports `Text` and `URL` data types and uses [a non-standard method](http://msdn.microsoft.com/en-us/library/ie/ms535220%28v=vs.85%29.aspx) of interacting with the clipboard."",""2"":""Only fires `copy` event on a valid selection and only `cut` and `paste` in focused editable fields."",""3"":""Only supports OS clipboard reading/writing via shortcut keys, not through `document.execCommand()`."",""4"":""Only supports `paste` event."",""5"":""Does not support the `ClipboardEvent` constructor""},""usage_perc_y"":0,""usage_perc_a"":82.79,""ucprefix"":false,""parent"":"""",""keywords"":""cut,copy,paste,clipboarddata,clipboardevent"",""ie_id"":""clipboardapi"",""chrome_id"":""""},""rtcpeerconnection"":{""title"":""WebRTC Peer-to-peer connections"",""description"":""Method of allowing two users to communicate directly, browser to browser using the RTCPeerConnection API."",""spec"":""http://www.w3.org/TR/webrtc/#peer-to-peer-connections"",""status"":""wd"",""links"":[{""url"":""http://www.webrtc.org/"",""title"":""WebRTC Project site""},{""url"":""https://temasys.atlassian.net/wiki/display/TWPP/WebRTC+Plugins"",""title"":""Plug-in for support in IE & Safari""},{""url"":""http://www.html5labs.com/prototypes/object-rtc/object-rtc/info"",""title"":""Prototype implementation for ORTC""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y x""},""bb"":{""7"":""n"",""10"":""n #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""BlackBerry 10 recognizes RTCPeerConnection but real support is unconfirmed.""},""usage_perc_y"":55.36,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""webrtcwebrtcv10api"",""chrome_id"":""6612462929444864""},""css3-cursors"":{""title"":""CSS3 Cursors (original values)"",""description"":""CSS3 cursor values added in the 2004 spec, including none, context-menu, cell, vertical-text, alias, copy, no-drop, not-allowed, nesw-resize, nwse-resize, col-resize, row-resize and all-scroll. "",""spec"":""http://www.w3.org/TR/css3-ui/#cursor"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/cursor"",""title"":""MDN Documentation""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a"",""3"":""a"",""3.5"":""a"",""3.6"":""a"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""a #2"",""9.5-9.6"":""a #2"",""10.0-10.1"":""a #2"",""10.5"":""a #2"",""10.6"":""a #2"",""11"":""a #2"",""11.1"":""a #2"",""11.5"":""a #2"",""11.6"":""a #2"",""12"":""a #2"",""12.1"":""a #2"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""u""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to no support for the alias, cell, copy, ew-resize, ns-resize, nesw-resize, nwse-resize or context-menu cursors."",""2"":""Partial support refers to not supporting 'none' nor a URI.""},""usage_perc_y"":55.87,""usage_perc_a"":2.53,""ucprefix"":false,""parent"":"""",""keywords"":""cursors, pointers"",""ie_id"":"""",""chrome_id"":""""},""css3-cursors-newer"":{""title"":""CSS3 Cursors (new values)"",""description"":""Support for `zoom-in` and `zoom-out` values for the CSS3 `cursor` property."",""spec"":""http://www.w3.org/TR/css3-ui/#cursor"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/cursor"",""title"":""MDN Documentation""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""y""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Chrome, Safari and Firefox also support the unofficial `grab` and `grabbing` values (with prefix)"",""notes_by_num"":{},""usage_perc_y"":45.98,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""cursors, pointers"",""ie_id"":"""",""chrome_id"":""""},""webvtt"":{""title"":""WebVTT - Web Video Text Tracks"",""description"":""Format for marking up text captions for multimedia resources."",""spec"":""http://dev.w3.org/html5/webvtt/"",""status"":""unoff"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/track/basics/"",""title"":""Getting Started With the Track Element""},{""url"":""https://dev.opera.com/articles/view/an-introduction-to-webvtt-and-track/"",""title"":""An Introduction to WebVTT and track""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n d"",""25"":""n d"",""26"":""n d"",""27"":""n d"",""28"":""n d"",""29"":""n d"",""30"":""n d"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""WebVTT must be used with the <track> element."",""notes_by_num"":{""1"":""Firefox currently lacks support for the ::cue pseudo-element.""},""usage_perc_y"":78.66,""usage_perc_a"":0,""ucprefix"":false,""parent"":""video"",""keywords"":""captions,track"",""ie_id"":"""",""chrome_id"":""6719115557339136""},""promises"":{""title"":""Promises"",""description"":""A promise represents the eventual result of an asynchronous operation."",""spec"":""https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects"",""status"":""other"",""links"":[{""url"":""http://promises-aplus.github.io/promises-spec/"",""title"":""Promises/A+ spec""},{""url"":""http://www.chromestatus.com/features/5681726336532480"",""title"":""Chromium dashboard - ES6 Promises""},{""url"":""http://www.html5rocks.com/en/tutorials/es6/promises/"",""title"":""JavaScript Promises: There and back again - HTML5 Rocks""},{""url"":""https://github.com/jakearchibald/ES6-Promises"",""title"":""A polyfill for ES6-style Promises""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""1"":""y""},""firefox"":{""2"":""p"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""a"",""28"":""a"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""p"",""26"":""p"",""27"":""p"",""28"":""p"",""29"":""p"",""30"":""p"",""31"":""p"",""32"":""a"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""p"",""3.2"":""p"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""p"",""9.5-9.6"":""p"",""10.0-10.1"":""p"",""10.5"":""p"",""10.6"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""a"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""p"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""p"",""7.0-7.1"":""p"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""p""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""p"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""p"",""10"":""p""},""op_mob"":{""10"":""p"",""11"":""p"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""p""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":63.57,""usage_perc_a"":0.14,""ucprefix"":false,""parent"":"""",""keywords"":""futures"",""ie_id"":"""",""chrome_id"":""5681726336532480""},""css-sticky"":{""title"":""CSS position:sticky"",""description"":""Keeps elements positioned as \""fixed\"" or \""relative\"" depending on how it appears in the viewport. As a result the element is \""stuck\"" when necessary while scrolling."",""spec"":""http://dev.w3.org/csswg/css-position/#sticky-positioning"",""status"":""unoff"",""links"":[{""url"":""http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit"",""title"":""HTML5Rocks""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/position"",""title"":""MDN article""},{""url"":""http://docs.webplatform.org/wiki/css/properties/position"",""title"":""WebPlatform Docs""},{""url"":""https://github.com/filamentgroup/fixed-sticky"",""title"":""Polyfill""},{""url"":""https://github.com/wilddeer/stickyfill"",""title"":""Another polyfill""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n d #2"",""24"":""n d #2"",""25"":""n d #2"",""26"":""n d #2"",""27"":""n d #2"",""28"":""n d #2"",""29"":""n d #2"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""n d #2"",""35"":""n d #2"",""36"":""n d #2"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox by setting the about:config preference layout.css.sticky.enabled to true"",""2"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags""},""usage_perc_y"":19.48,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""positionsticky"",""chrome_id"":""6190250464378880""},""dialog"":{""title"":""Dialog element"",""description"":""Method of easily creating custom dialog boxes to display to the user with modal or non-modal options. Also includes a `::backdrop` pseudo-element for behind the element."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-dialog-element"",""status"":""ls"",""links"":[{""url"":""https://github.com/GoogleChrome/dialog-polyfill"",""title"":""Polyfill""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n d #2"",""20"":""n d #2"",""21"":""n d #2"",""22"":""n d #2"",""23"":""n d #2"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled through the \""Experimental Web Platform features\"" flag in `chrome://flags`"",""2"":""Enabled through the \""Experimental Web Platform features\"" flag in `opera://flags`""},""usage_perc_y"":42.79,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""HTMLDialogElement,showModal,backdrop"",""ie_id"":""dialogelementformodals"",""chrome_id"":""5770237022568448""},""css-variables"":{""title"":""CSS Variables"",""description"":""Permits the declaration and usage of cascading variables in stylesheets."",""spec"":""http://www.w3.org/TR/css-variables/"",""status"":""wd"",""links"":[{""url"":""https://hacks.mozilla.org/2013/12/css-variables-in-firefox-nightly/"",""title"":""Mozilla hacks article (older syntax)""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables"",""title"":""MDN article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""u"",""46"":""u"",""47"":""u""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":9.67,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""css variables,custom properties"",""ie_id"":""cssvariables"",""chrome_id"":""6401356696911872""},""vibration"":{""title"":""Vibration API"",""description"":""Method to access the vibration mechanism of the hosting device."",""spec"":""http://www.w3.org/TR/vibration/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Guide/API/Vibration"",""title"":""MDN article""},{""url"":""http://davidwalsh.name/vibration-api"",""title"":""Vibration API sample code & demo""},{""url"":""http://code.tutsplus.com/tutorials/html5-vibration-api--mobile-22585"",""title"":""Tuts+ article""},{""url"":""http://aurelio.audero.it/demo/vibration-api-demo.html"",""title"":""Demo""},{""url"":""http://www.illyism.com/journal/vibration-api"",""title"":""Article and Usage Examples""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":65.1,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""vibration,mobile,device"",""ie_id"":""vibrationapi"",""chrome_id"":""5698768766763008""},""css-backgroundblendmode"":{""title"":""CSS background-blend-mode"",""description"":""Allows blending between CSS background images, gradients, and colors."",""spec"":""http://www.w3.org/TR/compositing-1/#propdef-background-blend-mode"",""status"":""cr"",""links"":[{""url"":""http://codepen.io/bennettfeely/pen/rxoAc"",""title"":""codepen example""},{""url"":""https://medium.com/web-design-technique/6b51bf53743a"",""title"":""Blog post""},{""url"":""http://bennettfeely.com/gradients"",""title"":""Demo""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #1"",""8"":""a #1"",""9"":""a #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9"":""a #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial in Safari refers to not supporting the `hue`, `saturation`, `color`, and `luminosity` blend modes.""},""usage_perc_y"":53.53,""usage_perc_a"":8.54,""ucprefix"":false,""parent"":"""",""keywords"":""css blend modes,css blending modes,blending,multiply,screen,background"",""ie_id"":"""",""chrome_id"":""5768037999312896""},""css-mixblendmode"":{""title"":""Blending of HTML/SVG elements"",""description"":""Allows blending between arbitrary SVG and HTML elements"",""spec"":""http://www.w3.org/TR/compositing-1/#mix-blend-mode"",""status"":""cr"",""links"":[{""url"":""http://codepen.io/bennettfeely/pen/csjzd"",""title"":""codepen example""},{""url"":""http://css-tricks.com/basics-css-blend-modes/"",""title"":""Blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #2"",""8"":""a #2"",""9"":""a #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9"":""a #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Partial in Safari refers to not supporting the `hue`, `saturation`, `color`, and `luminosity` blend modes.""},""usage_perc_y"":49.59,""usage_perc_a"":8.54,""ucprefix"":false,""parent"":"""",""keywords"":""mix-blend-mode,css blend modes,css blending modes"",""ie_id"":""mixblendmode"",""chrome_id"":""6362616360337408""},""web-speech"":{""title"":""Web Speech API"",""description"":""Method to provide speech input and text-to-speech output features in a web browser."",""spec"":""https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html"",""status"":""unoff"",""links"":[{""url"":""http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API"",""title"":""HTML5Rocks article""},{""url"":""http://www.sitepoint.com/introducing-web-speech-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/web-speech-api-demo.html"",""title"":""Demo""},{""url"":""http://zenorocha.github.io/voice-elements/"",""title"":""Advanced demo and resource""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n d #3"",""23"":""n d #3"",""24"":""n d #3"",""25"":""n d #3"",""26"":""n d #3"",""27"":""n d #3"",""28"":""n d #3"",""29"":""n d #3"",""30"":""n d #3"",""31"":""n d #3"",""32"":""n d #3"",""33"":""n d #3"",""34"":""n d #3"",""35"":""n d #3"",""36"":""n d #3"",""37"":""n d #3"",""38"":""n d #3"",""39"":""n d #3"",""40"":""n d #3"",""41"":""n d #3"",""42"":""n d #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a x #2"",""7"":""a x #2"",""7.1"":""a #2"",""8"":""a #2"",""9"":""a #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a x #2"",""8"":""a x #2"",""8.1-8.4"":""a x #2"",""9"":""a x #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""a x #1""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to some attributes missing."",""2"":""Partial support in Safari refers to only Speech Synthesis supported."",""3"":""Supported in Firefox in about:config using the `media.webspeech.recognition.enable` flag.""},""usage_perc_y"":0,""usage_perc_a"":55.38,""ucprefix"":false,""parent"":"""",""keywords"":""speech,recognition,ASR"",""ie_id"":""webspeechapiinput"",""chrome_id"":""5908775487668224""},""high-resolution-time"":{""title"":""High Resolution Time API"",""description"":""Method to provide the current time in sub-millisecond resolution and such that it is not subject to system clock skew or adjustments. Called using `performance.now()`"",""spec"":""http://www.w3.org/TR/hr-time/"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()"",""title"":""MDN article""},{""url"":""http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now"",""title"":""HTML5Rocks article""},{""url"":""http://www.sitepoint.com/discovering-the-high-resolution-time-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/high-resolution-time-api-demo.html"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""n"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":76.47,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""performance,now,testing"",""ie_id"":""highresolutiontime"",""chrome_id"":""5349124069130240""},""battery-status"":{""title"":""Battery Status API"",""description"":""Method to provide information about the battery status of the hosting device."",""spec"":""http://www.w3.org/TR/battery-status/"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/WebAPI/Battery_Status"",""title"":""MDN Docs""},{""url"":""http://www.smartjava.org/examples/webapi-battery/"",""title"":""Simple demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n d"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""a #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a #1""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to support for the older specification's `navigator.battery` rather than `navigator.getBattery()` to access the `BatteryManager`.""},""usage_perc_y"":41.89,""usage_perc_a"":16.4,""ucprefix"":false,""parent"":"""",""keywords"":""navigator.battery,navigator.getbattery,batterymanager"",""ie_id"":""batterystatusapi"",""chrome_id"":""4537134732017664""},""serviceworkers"":{""title"":""Service Workers"",""description"":""Method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline."",""spec"":""https://slightlyoff.github.io/ServiceWorker/spec/service_worker/"",""status"":""wd"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/service-worker/introduction/"",""title"":""HTML5Rocks article (introduction)""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker_API"",""title"":""MDN article""},{""url"":""https://jakearchibald.github.io/isserviceworkerready/resources.html"",""title"":""List of various resources""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""a"",""41"":""a"",""42"":""a"",""43"":""a"",""44"":""a"",""45"":""a"",""46"":""a"",""47"":""a""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a""},""and_chr"":{""42"":""a""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Details on partial support can be found on [is ServiceWorker Ready?](https://jakearchibald.github.io/isserviceworkerready/)"",""notes_by_num"":{""1"":""Partial support can be enabled in Firefox with the `dom.serviceWorkers.enabled` flag.""},""usage_perc_y"":0,""usage_perc_a"":41.12,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""serviceworker"",""chrome_id"":""6561526227927040""},""text-decoration"":{""title"":""text-decoration styling"",""description"":""Method of defining the type, style and color of lines in the text-decoration property. These can be defined as shorthand (e.g. `text-decoration: line-through dashed blue`) or as single properties (e.g. `text-decoration-color: blue`)"",""spec"":""http://www.w3.org/TR/css-text-decor-3/#line-decoration"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-style"",""title"":""MDN Documentation for text-decoration-style""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color"",""title"":""MDN Documentation for text-decoration-color""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-line"",""title"":""MDN Documentation for text-decoration-line""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514536-text-decoration-styling"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n x d #1"",""27"":""n x d #1"",""28"":""n x d #1"",""29"":""n x d #1"",""30"":""n x d #1"",""31"":""n x d #1"",""32"":""n x d #1"",""33"":""n x d #1"",""34"":""n x d #1"",""35"":""n x d #1"",""36"":""n x d #1"",""37"":""n x d #1"",""38"":""n x d #1"",""39"":""n x d #1"",""40"":""n x d #1"",""41"":""n x d #1"",""42"":""n x d #1"",""43"":""n x d #1"",""44"":""n x d #1"",""45"":""n x d #1"",""46"":""n x d #1"",""47"":""n x d #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a x #2"",""8"":""a x #2"",""9"":""a x #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a x #2"",""8.1-8.4"":""a x #2"",""9"":""a x #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""All browsers support the CSS2 version of `text-decoration`, which matches only the `text-decoration-line` values (`underline`, etc.)"",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Partial support in Safari refers to not supporting the text-decoration-style property.""},""usage_perc_y"":10.52,""usage_perc_a"":8.54,""ucprefix"":false,""parent"":"""",""keywords"":""text-decoration-line,text-decoration-style,text-decoration-color"",""ie_id"":"""",""chrome_id"":""""},""iframe-srcdoc"":{""title"":""srcdoc attribute for iframes"",""description"":""Override the content specified in the `src` attribute (if present) with HTML content within the attribute."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-srcdoc"",""status"":""ls"",""links"":[{""url"":""https://docs.webplatform.org/wiki/html/elements/iframe"",""title"":""WebPlatform Docs""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe"",""title"":""MDN Docs""},{""url"":""https://github.com/jugglinmike/srcdoc-polyfill"",""title"":""Srcdoc Polyfill""},{""url"":""https://bocoup.com/weblog/third-party-javascript-development-future/"",""title"":""Article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p""},""edge"":{""1"":""p""},""firefox"":{""2"":""n"",""3"":""p"",""3.5"":""p"",""3.6"":""p"",""4"":""p"",""5"":""p"",""6"":""p"",""7"":""p"",""8"":""p"",""9"":""p"",""10"":""p"",""11"":""p"",""12"":""p"",""13"":""p"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""p"",""21"":""p"",""22"":""p"",""23"":""p"",""24"":""p"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""p"",""15"":""p"",""16"":""p"",""17"":""p"",""18"":""p"",""19"":""p"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""p"",""5"":""p"",""5.1"":""p"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""p"",""11.5"":""p"",""11.6"":""p"",""12"":""p"",""12.1"":""p"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""p"",""4.2-4.3"":""p"",""5.0-5.1"":""p"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""p"",""2.2"":""p"",""2.3"":""p"",""3"":""p"",""4"":""p"",""4.1"":""p"",""4.2-4.3"":""p"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""p"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""p"",""11.5"":""p"",""12"":""p"",""12.1"":""p"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""p"",""11"":""p""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":75.53,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""iframesrcdocattribute"",""chrome_id"":""5222955109842944""},""speech-synthesis"":{""title"":""Speech Synthesis API"",""description"":""A web API for controlling a text-to-speech output."",""spec"":""https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section"",""status"":""unoff"",""links"":[{""url"":""http://updates.html5rocks.com/2014/01/Web-apps-that-talk---Introduction-to-the-Speech-Synthesis-API"",""title"":""HTML5Rocks article""},{""url"":""http://www.sitepoint.com/talking-web-pages-and-the-speech-synthesis-api/"",""title"":""SitePoint article""},{""url"":""http://aurelio.audero.it/demo/speech-synthesis-api-demo.html"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox using the `media.webspeech.synth.enabled` about:config flag.""},""usage_perc_y"":53.95,""usage_perc_a"":0,""ucprefix"":false,""parent"":""web-speech"",""keywords"":""speech,synthesis,speechSynthesis,TTS,SpeechSynthesisUtterance,"",""ie_id"":""webspeechapisynthesis"",""chrome_id"":""4782875580825600""},""user-timing"":{""title"":""User Timing API"",""description"":""Method to help web developers measure the performance of their applications by giving them access to high precision timestamps."",""spec"":""http://www.w3.org/TR/user-timing/"",""status"":""rec"",""links"":[{""url"":""http://www.sitepoint.com/discovering-user-timing-api/"",""title"":""SitePoint article""},{""url"":""http://www.html5rocks.com/en/tutorials/webperformance/usertiming/"",""title"":""HTML5Rocks article""},{""url"":""https://gist.github.com/pmeenan/5902672"",""title"":""Polyfill""},{""url"":""http://aurelio.audero.it/demo/user-timing-api-demo.html"",""title"":""Demo""},{""url"":""https://github.com/nicjansma/usertiming.js"",""title"":""UserTiming.js polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":66.43,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""performance,testing,mark,measure"",""ie_id"":""usertimingapi"",""chrome_id"":""5066549580791808""},""srcset"":{""title"":""Srcset attribute"",""description"":""Allows authors to define various image resources and \""hints\"" that assist a user agent to determine the most appropriate image source to display (e.g. high-resolution displays, small monitors, etc)."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset"",""status"":""ls"",""links"":[{""url"":""https://www.webkit.org/blog/2910/improved-support-for-high-resolution-displays-with-the-srcset-image-attribute/"",""title"":""Improved support for high-resolution displays with the srcset image attribute""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""a #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""a #2"",""8"":""a #2"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""a #2"",""8.1-8.4"":""a #2"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox by setting the about:config preference dom.image.srcset.enabled to true"",""2"":""Supports the subset of the syntax for resolution switching (using the `x` descriptor), but not the full syntax that can be used with `sizes` (using the `w` descriptor).""},""usage_perc_y"":49.74,""usage_perc_a"":10.52,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""imgsrcset"",""chrome_id"":""4644337115725824""},""ambient-light"":{""title"":""Ambient Light API"",""description"":""Defines events that provide information about the ambient light level, as measured by a device's light sensor."",""spec"":""http://www.w3.org/TR/ambient-light/"",""status"":""cr"",""links"":[{""url"":""http://aurelio.audero.it/demo/ambient-light-api-demo.html"",""title"":""Demo""},{""url"":""http://modernweb.com/2014/05/27/introduction-to-the-ambient-light-api/"",""title"":""Article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in desktop Firefox refers to support being limited to Mac OS X. [Support for Windows 7 is in progress](https://bugzilla.mozilla.org/show_bug.cgi?id=754199)""},""usage_perc_y"":0.14,""usage_perc_a"":9.98,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""ambientlightevents"",""chrome_id"":""5298357018820608""},""will-change"":{""title"":""CSS will-change property"",""description"":""Method of optimizing animations by informing the browser which elements will change and what properties will change."",""spec"":""http://dev.w3.org/csswg/css-will-change/"",""status"":""wd"",""links"":[{""url"":""https://dev.opera.com/articles/css-will-change-property/"",""title"":""Detailed article""},{""url"":""http://aerotwist.com/blog/bye-bye-layer-hacks/"",""title"":""Blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supported in Firefox behind the `layout.css.will-change.enabled` flag""},""usage_perc_y"":51.82,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""scroll-position"",""ie_id"":""csswillchange"",""chrome_id"":""5954199330226176""},""css-shapes"":{""title"":""CSS Shapes Level 1"",""description"":""Allows geometric shapes to be set in CSS to define an area for text to flow around."",""spec"":""http://www.w3.org/TR/css-shapes/"",""status"":""cr"",""links"":[{""url"":""http://html.adobe.com/webplatform/layout/shapes/"",""title"":""Adobe demos and samples""},{""url"":""http://html.adobe.com/webplatform/layout/shapes/browser-support/"",""title"":""CSS shapes support test by Adobe""},{""url"":""http://alistapart.com/article/css-shapes-101"",""title"":""A List Apart article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags""},""usage_perc_y"":51.33,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""circle,ellipse,polygon,inset,shape-outside,shape-inside"",""ie_id"":""shapes"",""chrome_id"":""5163890719588352""},""domcontentloaded"":{""title"":""DOMContentLoaded"",""description"":""JavaScript event that fires when the DOM is loaded, but before all page assets are loaded (CSS, images, etc.)."",""spec"":""https://html.spec.whatwg.org/multipage/syntax.html#stop-parsing"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded"",""title"":""MDN: DOMContentLoaded""}],""categories"":[""DOM""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""y"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":95.58,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""dom,domready,onload,contentloaded,document"",""ie_id"":"""",""chrome_id"":""""},""proximity"":{""title"":""Proximity API"",""description"":""Defines events that provide information about the distance between a device and an object, as measured by a proximity sensor."",""spec"":""http://www.w3.org/TR/proximity/"",""status"":""cr"",""links"":[{""url"":""http://aurelio.audero.it/demo/proximity-api-demo.html"",""title"":""Demo""},{""url"":""http://www.sitepoint.com/introducing-proximity-api/"",""title"":""SitePoint article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":10.33,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""kerning-pairs-ligatures"":{""title"":""Improved kerning pairs & ligatures"",""description"":""Currently non-standard method of improving kerning pairs & ligatures using `text-rendering: optimizeLegibility`."",""spec"":""http://www.w3.org/TR/SVG11/painting.html#TextRenderingProperty"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-rendering"",""title"":""MDN article""},{""url"":""http://css-tricks.com/almanac/properties/t/text-rendering/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Android browser versions is due to a serious bug where `text-rendering: optimizeLegibility` causes custom web fonts to not render.""},""usage_perc_y"":76.79,""usage_perc_a"":2.45,""ucprefix"":false,""parent"":"""",""keywords"":""optimizeLegibility,optimizeSpeed,geometricPrecision"",""ie_id"":"""",""chrome_id"":""""},""iframe-seamless"":{""title"":""seamless attribute for iframes"",""description"":""The seamless attribute makes an iframe's contents actually part of a page, and adopts the styles from its hosting page. "",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-seamless"",""status"":""ls"",""links"":[{""url"":""https://github.com/ornj/seamless-polyfill"",""title"":""Experimental polyfill""},{""url"":""http://labs.ft.com/2013/01/seamless-iframes-not-quite-seamless/"",""title"":""Article""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=631218"",""title"":""Bug on Firefox support""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""u"",""41"":""u"",""42"":""u""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""n d"",""24"":""n d"",""25"":""n d"",""26"":""n d"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n #1"",""7.1"":""n #1"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n #1"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":""Chrome 20-26 had partial support behind a flag, though this was [later removed](http://crbug.com/229421)."",""notes_by_num"":{""1"":""Hides the border of seamless iframes and recognizes the 'seamless' DOM property, but does not provide actual support.""},""usage_perc_y"":5.94,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""iframeseamlessattribute"",""chrome_id"":""6630329993396224""},""css-image-orientation"":{""title"":""CSS3 image-orientation"",""description"":""CSS property used generally to fix the intended orientation of an image. This can be done using 90 degree increments or based on the image's EXIF data using the \""from-image\"" value."",""spec"":""http://www.w3.org/TR/css3-images/#image-orientation"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/image-orientation"",""title"":""MDN article""},{""url"":""http://sethfowler.org/blog/2013/09/13/new-in-firefox-26-css-image-orientation/"",""title"":""Blog post""},{""url"":""http://jsbin.com/EXUTolo/4"",""title"":""Demo (Chinese)""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""a #1"",""8.1-8.4"":""a #1"",""9"":""a #1""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Opening the image in a new tab in Chrome results in the image shown in the orientation according to the EXIF data."",""notes_by_num"":{""1"":""Partial support in iOS refers to the browser using EXIF data by default, though it does not actually support the property.""},""usage_perc_y"":9.96,""usage_perc_a"":7.51,""ucprefix"":false,""parent"":"""",""keywords"":""image-orientation,from-image,flip"",""ie_id"":"""",""chrome_id"":""""},""picture"":{""title"":""Picture element"",""description"":""A responsive images method to control which image resource a user agent presents to a user, based on resolution, media query and/or support for a particular image format"",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element"",""status"":""ls"",""links"":[{""url"":""http://responsiveimages.org/demos/"",""title"":""Demo""},{""url"":""http://code.tutsplus.com/tutorials/better-responsive-images-with-the-picture-element--net-36583"",""title"":""Tutorial""},{""url"":""http://usecases.responsiveimages.org/"",""title"":""Read about the use cases""},{""url"":""http://responsiveimages.org/"",""title"":""General information about Responsive Images""},{""url"":""https://dev.opera.com/articles/responsive-images/"",""title"":""Blog post on usage""},{""url"":""http://www.html5rocks.com/tutorials/responsive/picture-element/"",""title"":""HTML5 Rocks tutorial""},{""url"":""https://github.com/scottjehl/picturefill"",""title"":""Picturefill - polyfill for picture, srcset, sizes, and more""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n d #3"",""35"":""n d #3"",""36"":""n d #3"",""37"":""n d #3"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n d #1"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n d #2"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Enabled in Opera through the \""experimental Web Platform features\"" flag in opera://flags"",""3"":""Enabled in Firefox by setting the about:config preference dom.image.picture.enable to true""},""usage_perc_y"":49.74,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""<picture>"",""ie_id"":""pictureelement"",""chrome_id"":""5910974510923776""},""woff2"":{""title"":""WOFF 2.0 - Web Open Font Format"",""description"":""TrueType/OpenType font that provides better compression than WOFF 1.0."",""spec"":""http://www.w3.org/TR/WOFF2/"",""status"":""wd"",""links"":[{""url"":""https://gist.github.com/sergejmueller/cf6b4f2133bcb3e2f64a"",""title"":""Basics about WOFF 2.0""},{""url"":""http://everythingfonts.com/ttf-to-woff2"",""title"":""WOFF 2.0 converter""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Default 'enabled' for Firefox version 39+, but versions 37-38 will need to set a flag to 'true' to [use WOFF2](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#Browser_compatibility).""},""usage_perc_y"":43.72,""usage_perc_a"":0,""ucprefix"":false,""parent"":""fontface"",""keywords"":""woff, fontface, webfonts"",""ie_id"":""wofffileformat20"",""chrome_id"":""6718644721549312""},""text-size-adjust"":{""title"":""CSS text-size-adjust"",""description"":""On mobile devices, the text-size-adjust CSS property allows Web authors to control if and how the text-inflating algorithm is applied to the textual content of the element it is applied to."",""spec"":""http://dev.w3.org/csswg/css-size-adjust/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-size-adjust"",""title"":""MDN Docs""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""y x"",""11"":""y x""},""and_uc"":{""9.9"":""y x""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":14.41,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""web-animation"":{""title"":""Web Animations API"",""description"":""Lets you create animations that are run in the browser and as well as inspect and manipulate animations created through declarative means like CSS."",""spec"":""http://w3c.github.io/web-animations/"",""status"":""wd"",""links"":[{""url"":""http://updates.html5rocks.com/2014/05/Web-Animations---element-animate-is-now-in-Chrome-36"",""title"":""HTML5 Rocks""},{""url"":""http://updates.html5rocks.com/2013/12/New-Web-Animations-engine-in-Blink-drives-CSS-Animations-Transitions"",""title"":""HTML5 Rocks""},{""url"":""https://birtles.github.io/areweanimatedyet/"",""title"":""Current Firefox status""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""a d #3"",""34"":""a d #3"",""35"":""a d #3"",""36"":""a d #3"",""37"":""a d #3"",""38"":""a d #3"",""39"":""a d #3"",""40"":""a d #3"",""41"":""a d #3"",""42"":""a d #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #2"",""40"":""a #2"",""41"":""a #2"",""42"":""a #2"",""43"":""a #2"",""44"":""a #2"",""45"":""a #2"",""46"":""a #2"",""47"":""a #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""a #1""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a #1""},""and_chr"":{""42"":""a #1""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to basic support of `element.animate()`"",""2"":""Partial support refers to basic support of `element.animate()` and [playback control of AnimationPlayer](https://www.chromestatus.com/features/5633748733263872)"",""3"":""Partial support in Firefox is detailed in [Are we animated yet?](https://birtles.github.io/areweanimatedyet/)""},""usage_perc_y"":0,""usage_perc_a"":52.04,""ucprefix"":false,""parent"":"""",""keywords"":""animate,play,pause,reverse,finish,currentTime,startTime,playbackRate,playState"",""ie_id"":""webanimationsjavascriptapi"",""chrome_id"":""4854343836631040,5633748733263872""},""resource-timing"":{""title"":""Resource Timing"",""description"":""Method to help web developers to collect complete timing information related to resources on a document."",""spec"":""http://www.w3.org/TR/resource-timing/"",""status"":""cr"",""links"":[{""url"":""http://aurelio.audero.it/demo/resource-timing-api-demo.html"",""title"":""Demo""},{""url"":""http://googledevelopers.blogspot.com/2013/12/measuring-network-performance-with.html"",""title"":""Blog post""},{""url"":""http://www.sitepoint.com/introduction-resource-timing-api/"",""title"":""SitePoint article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox using the dom.enable_resource_timing flag""},""usage_perc_y"":66.96,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""performance,testing,resource"",""ie_id"":""resourcetimingapi"",""chrome_id"":""5796350423728128""},""custom-elements"":{""title"":""Custom Elements"",""description"":""Method of defining and using new types of DOM elements in a document."",""spec"":""http://www.w3.org/TR/custom-elements/"",""status"":""wd"",""links"":[{""url"":""http://w3c.github.io/webcomponents/spec/custom/"",""title"":""W3C Editor's Draft spec (closer to current implementations)""},{""url"":""http://www.polymer-project.org/platform/custom-elements.html"",""title"":""Polymer project (polyfill & web components framework)""},{""url"":""http://www.html5rocks.com/tutorials/webcomponents/customelements/"",""title"":""HTML5Rocks - Custom Elements: defining new elements in HTML""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=234509"",""title"":""Chromium tracking bug: Implement Custom Elements""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=889230"",""title"":""Firefox tracking bug: Implement Custom Elements (from Web Components)""},{""url"":""http://status.modern.ie/customelements"",""title"":""IE Web Platform Status and Roadmap: Custom Elements""},{""url"":""https://github.com/WebReflection/document-register-element"",""title"":""document.registerElement polyfill in 3KB minified & gzipped""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""p"",""11"":""p""},""edge"":{""1"":""p""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n d #1"",""24"":""n d #1"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""p d #1"",""31"":""p d #1"",""32"":""p d #1"",""33"":""p d #1"",""34"":""p d #1"",""35"":""p d #1"",""36"":""p d #1"",""37"":""p d #1"",""38"":""p d #1"",""39"":""p d #1"",""40"":""p d #1"",""41"":""p d #1"",""42"":""p d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n d"",""28"":""n d"",""29"":""n d"",""30"":""n d"",""31"":""n d"",""32"":""n d"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n d"",""16"":""n d"",""17"":""n d"",""18"":""n d"",""19"":""n d"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""p d #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled through the \""dom.webcomponents.enabled\"" preference in about:config""},""usage_perc_y"":45.18,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web components,registerElement"",""ie_id"":""customelements"",""chrome_id"":""4642138092470272""},""imports"":{""title"":""HTML Imports"",""description"":""Method of including and reusing HTML documents in other HTML documents."",""spec"":""http://www.w3.org/TR/html-imports/"",""status"":""wd"",""links"":[{""url"":""http://www.polymer-project.org/platform/html-imports.html"",""title"":""Polymer project (polyfill & web components framework)""},{""url"":""http://www.html5rocks.com/tutorials/webcomponents/imports/"",""title"":""HTML5Rocks - HTML Imports: #include for the web""},{""url"":""https://code.google.com/p/chromium/issues/detail?id=240592"",""title"":""Chromium tracking bug: Implement HTML Imports""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=877072"",""title"":""Firefox tracking bug: Implement HTML Imports""},{""url"":""http://status.modern.ie/htmlimports"",""title"":""IE Web Platform Status and Roadmap: HTML Imports""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""p"",""11"":""p""},""edge"":{""1"":""p""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""p"",""31"":""p"",""32"":""p d #1"",""33"":""p d #1"",""34"":""p d #1"",""35"":""p d #1"",""36"":""p d #1"",""37"":""p d #1"",""38"":""p d #1"",""39"":""p d #1"",""40"":""p d #1"",""41"":""p d #1"",""42"":""p d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""n d #2"",""35"":""p d #3"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""p"",""6.1"":""p"",""7"":""p"",""7.1"":""p"",""8"":""p"",""9"":""p""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n d #4"",""18"":""n d #4"",""19"":""n d #4"",""20"":""n d #4"",""21"":""n d #4"",""22"":""p d #5"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""p"",""8"":""p"",""8.1-8.4"":""p"",""9"":""p""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""p""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Firefox [has no plans to support HTML imports](https://hacks.mozilla.org/2014/12/mozilla-and-web-components/) though for now it can be enabled through the \""dom.webcomponents.enabled\"" preference in about:config"",""2"":""Enabled through the \""Enable HTML Imports\"" flag in chrome://flags"",""3"":""Enabled through the \""Experimental Web Platform features\"" flag in chrome://flags"",""4"":""Enabled through the \""Enable HTML Imports\"" flag in opera://flags"",""5"":""Enabled through the \""Experimental Web Platform features\"" flag in opera://flags""},""usage_perc_y"":43.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web components"",""ie_id"":""htmlimports"",""chrome_id"":""5144752345317376""},""input-file-multiple"":{""title"":""Multiple file selection"",""description"":""Allows users to select multiple files in the file picker."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-input-multiple"",""status"":""ls"",""links"":[{""url"":""https://code.google.com/p/chromium/issues/detail?id=348912"",""title"":""Chrome bug (for Android)""},{""url"":""http://www.raymondcamden.com/2012/2/28/Working-with-HTML5s-multiple-file-upload-support"",""title"":""Article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n #1""},""android"":{""2.1"":""n #1"",""2.2"":""n #1"",""2.3"":""n #1"",""3"":""n #1"",""4"":""n #1"",""4.1"":""n #1"",""4.2-4.3"":""n #1"",""4.4"":""n #1"",""4.4.3-4.4.4"":""n #1"",""40"":""n #1""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n #1"",""11"":""n #1"",""11.1"":""n #1"",""11.5"":""n #1"",""12"":""n #1"",""12.1"":""n #1"",""30"":""n #1""},""and_chr"":{""42"":""a #1""},""and_ff"":{""38"":""n #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n #1""}},""notes"":"""",""notes_by_num"":{""1"":""Not supported on Android 4.x and below, presumably an OS limitation. Only seems to work in Android 5.x for the Chrome browser.""},""usage_perc_y"":62.17,""usage_perc_a"":13.77,""ucprefix"":false,""parent"":""forms"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""atob-btoa"":{""title"":""Base64 encoding and decoding"",""description"":""Utility functions for of encoding and decoding strings to and from base 64: window.atob() and window.btoa()."",""spec"":""https://html.spec.whatwg.org/multipage/webappapis.html#atob"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa"",""title"":""MDN article on btoa()""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Window.atob"",""title"":""MDN article on atob()""},{""url"":""https://github.com/davidchambers/Base64.js"",""title"":""Polyfill""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""y"",""3.2"":""y"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""u"",""10.0-10.1"":""u"",""10.5"":""u"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""u"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":94.05,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""atob,btoa"",""ie_id"":"""",""chrome_id"":""""},""css-appearance"":{""title"":""CSS Appearance"",""description"":""The `appearance` property defines how elements (particularly form controls) appear by default. By setting the value to `none` the default appearance can be entirely redefined using other CSS properties."",""spec"":""http://wiki.csswg.org/spec/css4-ui#appearance"",""status"":""unoff"",""links"":[{""url"":""http://css-tricks.com/almanac/properties/a/appearance/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""a #1""},""firefox"":{""2"":""y x"",""3"":""y x"",""3.5"":""y x"",""3.6"":""y x"",""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x""},""chrome"":{""4"":""y x"",""5"":""y x"",""6"":""y x"",""7"":""y x"",""8"":""y x"",""9"":""y x"",""10"":""y x"",""11"":""y x"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""y x"",""3.2"":""y x"",""4"":""y x"",""5"":""y x"",""5.1"":""y x"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""y x"",""4.0-4.1"":""y x"",""4.2-4.3"":""y x"",""5.0-5.1"":""y x"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""y x"",""2.2"":""y x"",""2.3"":""y x"",""3"":""y x"",""4"":""y x"",""4.1"":""y x"",""4.2-4.3"":""y x"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""y x"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""n"",""11"":""a #1""},""and_uc"":{""9.9"":""y x""}},""notes"":""The `appearance` property currently does not appear in any CSS specification so there is no specifically correct usage."",""notes_by_num"":{""1"":""`-webkit-appearance` with value `none` is supported on IE11 Mobile for phones with \""[Windows Phone 8.1 Update](http://blogs.msdn.com/b/ie/archive/2014/07/31/the-mobile-web-should-just-work-for-everyone.aspx)\"", and in EdgeHTML.dll""},""usage_perc_y"":79.47,""usage_perc_a"":0.63,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-background-offsets"":{""title"":""CSS background-position edge offsets"",""description"":""Allows CSS background images to be positioned relative to the specified edge using the 3 to 4 value syntax. For example: `background-position: right 5px bottom 5px;` for positioning 5px from the bottom-right corner."",""spec"":""http://www.w3.org/TR/css3-background/#background-position"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/background-position"",""title"":""MDN article on background-position""},{""url"":""http://briantree.se/quick-tip-06-use-four-value-syntax-properly-position-background-images/"",""title"":""Basic information""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":85.37,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""4 value syntax"",""ie_id"":"""",""chrome_id"":""""},""css-supports-api"":{""title"":""CSS.supports() API"",""description"":""The CSS.supports() static methods returns a Boolean value indicating if the browser supports a given CSS feature, or not."",""spec"":""http://dev.w3.org/csswg/css-conditional/#the-css-interface"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/CSS.supports"",""title"":""MDN Docs""},{""url"":""http://jsbin.com/rimevilotari/1/edit"",""title"":""Demo (Chinese)""},{""url"":""https://dev.opera.com/articles/native-css-feature-detection/"",""title"":""Native CSS Feature Detection via the @supports Rule""},{""url"":""http://davidwalsh.name/css-supports"",""title"":""CSS @supports""},{""url"":""http://blog.csdn.net/hfahe/article/details/8619480"",""title"":""Article (Chinese)""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n d"",""21"":""n d"",""22"":""n d"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""y #1"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""See also [@supports in CSS](#feat=css-featurequeries)\r\n\r\nSee the [WebKit Bug](http://trac.webkit.org/changeset/142739) for status in Safari"",""notes_by_num"":{""1"":""Opera 12 uses a different method name('window.supportsCSS')""},""usage_perc_y"":59.07,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""conditional"",""ie_id"":""conditionalrules"",""chrome_id"":""4993981813358592""},""css-touch-action"":{""title"":""CSS touch-action property"",""description"":""touch-action is a CSS property that controls filtering of gesture events, providing developers with a declarative mechanism to selectively disable touch scrolling (in one or both axes), pinch-zooming or double-tap-zooming."",""spec"":""http://www.w3.org/TR/pointerevents/#the-touch-action-css-property"",""status"":""cr"",""links"":[{""url"":""http://docs.webplatform.org/wiki/css/properties/touch-action"",""title"":""WebPlatform Docs""},{""url"":""http://msdn.microsoft.com/en-us/library/windows/apps/hh767313.aspx"",""title"":""MSDN Docs""},{""url"":""http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away"",""title"":""300ms tap delay, gone away""},{""url"":""http://blogs.telerik.com/appbuilder/posts/13-11-21/what-exactly-is.....-the-300ms-click-delay"",""title"":""What Exactly Is..... The 300ms Click Delay""},{""url"":""http://thx.github.io/mobile/300ms-click-delay/"",""title"":""What Exactly Is..... The 300ms Click Delay(Chinese)""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y x #2"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y x #2"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supported in Firefox behind the `layout.css.touch_action.enabled` flag, Firefox for Windows 8 Touch ('Metro') enabled by default."",""2"":""IE10+ has already supported these property which are not in standard at present such as'pinch-zoom','double-tap-zoom','cross-slide-x','cross-slide-y'.""},""usage_perc_y"":53.12,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""touch action"",""ie_id"":""csstouchaction"",""chrome_id"":""5912074022551552""},""autofocus"":{""title"":""Autofocus attribute"",""description"":""Allows a form field to be immediately focused on page load."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#autofocusing-a-form-control:-the-autofocus-attribute"",""status"":""ls"",""links"":[{""url"":""http://davidwalsh.name/autofocus"",""title"":""Article on autofocus""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":""While not supported in iOS Safari, it does work in iOS WebViews."",""notes_by_num"":{},""usage_perc_y"":75.69,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-clip-path"":{""title"":""CSS clip-path property"",""description"":""Method of defining the visible region of an element using SVG or a shape definition."",""spec"":""http://www.w3.org/TR/css-masking-1/#the-clip-path"",""status"":""cr"",""links"":[{""url"":""http://css-tricks.com/almanac/properties/c/clip/"",""title"":""CSS Tricks article""},{""url"":""http://codepen.io/dubrod/details/myNNyW/"",""title"":""Codepen Example Clipping an Image with a Polygon""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""a #1"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2"",""33"":""a x #2"",""34"":""a x #2"",""35"":""a x #2"",""36"":""a x #2"",""37"":""a x #2"",""38"":""a x #2"",""39"":""a x #2"",""40"":""a x #2"",""41"":""a x #2"",""42"":""a x #2"",""43"":""a x #2"",""44"":""a x #2"",""45"":""a x #2"",""46"":""a x #2"",""47"":""a x #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""a x #2"",""7.1"":""a x #2"",""8"":""a x #2"",""9"":""a x #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #2"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""a x #2"",""22"":""a x #2"",""23"":""a x #2"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a x #2"",""8"":""a x #2"",""8.1-8.4"":""a x #2"",""9"":""a x #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a x #2"",""4.4.3-4.4.4"":""a x #2"",""40"":""a x #2""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a x #2""},""and_chr"":{""42"":""a x #2""},""and_ff"":{""38"":""a #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to only supporting the `url()` syntax."",""2"":""Partial support refers to supporting shapes and the `url(#foo)` syntax for inline SVG, but not shapes in external SVGs.""},""usage_perc_y"":0,""usage_perc_a"":69.59,""ucprefix"":false,""parent"":""css-masks"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""getrandomvalues"":{""title"":""crypto.getRandomValues()"",""description"":""Method of generating cryptographically random values."",""spec"":""http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y x""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""y x""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":78.03,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""screen-orientation"":{""title"":""Screen Orientation"",""description"":""Provides the ability to read the screen orientation state, to be informed when this state changes, and to be able to lock the screen orientation to a specific state."",""spec"":""http://www.w3.org/TR/screen-orientation/"",""status"":""wd"",""links"":[{""url"":""http://aurelio.audero.it/demo/screen-orientation-api-demo.html"",""title"":""Demo""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Screen.orientation"",""title"":""MDN article""},{""url"":""http://www.sitepoint.com/introducing-screen-orientation-api/"",""title"":""SitePoint article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a x""},""edge"":{""1"":""a x""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""a x"",""19"":""a x"",""20"":""a x"",""21"":""a x"",""22"":""a x"",""23"":""a x"",""24"":""a x"",""25"":""a x"",""26"":""a x"",""27"":""a x"",""28"":""a x"",""29"":""a x"",""30"":""a x"",""31"":""a x"",""32"":""a x"",""33"":""a x"",""34"":""a x"",""35"":""a x"",""36"":""a x"",""37"":""a x"",""38"":""a x"",""39"":""a x"",""40"":""a x"",""41"":""a x"",""42"":""a x""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""n"",""11"":""a x""},""and_uc"":{""9.9"":""y""}},""notes"":""Partial support refers to an [older version](http://www.w3.org/TR/2014/WD-screen-orientation-20140220/) of the draft specification, and the spec has undergone significant changes since, for example renaming the `screen.lockOrientation` method to `screen.orientation.lock`."",""notes_by_num"":{},""usage_perc_y"":47.97,""usage_perc_a"":18.33,""ucprefix"":false,""parent"":"""",""keywords"":""lockorientation,unlockorientation"",""ie_id"":""screenorientationapi"",""chrome_id"":""6191285283061760""},""font-loading"":{""title"":""CSS Font Loading"",""description"":""This CSS module defines a scripting interface to font faces in CSS, allowing font faces to be easily created and loaded from script. It also provides methods to track the loading status of an individual font, or of all the fonts on an entire page."",""spec"":""http://dev.w3.org/csswg/css-font-loading/"",""status"":""cr"",""links"":[{""url"":""https://www.igvita.com/2014/01/31/optimizing-web-font-rendering-performance/#font-load-events"",""title"":""Optimizing with font load events""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6509785-css-font-loading"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3"",""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Can be enabled in Firefox using the `layout.css.font-loading-api.enabled` flag. See [this bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1149381) for information on when it will be enabled by default.""},""usage_perc_y"":43.73,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""6244676289953792""},""font-unicode-range"":{""title"":""Font unicode-range subsetting"",""description"":""This @font-face descriptor defines the set of Unicode codepoints that may be supported by the font face for which it is declared. The descriptor value is a comma-delimited list of Unicode range (<urange>) values. The union of these ranges defines the set of codepoints that serves as a hint for user agents when deciding whether or not to download a font resource for a given text run."",""spec"":""http://dev.w3.org/csswg/css-fonts/#descdef-unicode-range"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-range"",""title"":""MDN: unicode-range""},{""url"":""https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/css/property/unicode-range"",""title"":""Safari CSS Reference: unicode-range""},{""url"":""http://docs.webplatform.org/wiki/css/properties/unicode-range"",""title"":""Web Platform Docs: unicode-range""},{""url"":""http://jsbin.com/jeqoguzeye/1/edit?html,output"",""title"":""Demo""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6510254-unicode-range"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a"",""10"":""a"",""11"":""a""},""edge"":{""1"":""a""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""n d #1"",""40"":""n d #1"",""41"":""n d #1"",""42"":""n d #1""},""chrome"":{""4"":""a"",""5"":""a"",""6"":""a"",""7"":""a"",""8"":""a"",""9"":""a"",""10"":""a"",""11"":""a"",""12"":""a"",""13"":""a"",""14"":""a"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""a"",""24"":""a"",""25"":""a"",""26"":""a"",""27"":""a"",""28"":""a"",""29"":""a"",""30"":""a"",""31"":""a"",""32"":""a"",""33"":""a"",""34"":""a"",""35"":""a"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a"",""3.2"":""a"",""4"":""a"",""5"":""a"",""5.1"":""a"",""6"":""a"",""6.1"":""a"",""7"":""a"",""7.1"":""a"",""8"":""a"",""9"":""a""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a"",""16"":""a"",""17"":""a"",""18"":""a"",""19"":""a"",""20"":""a"",""21"":""a"",""22"":""a"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a"",""4.0-4.1"":""a"",""4.2-4.3"":""a"",""5.0-5.1"":""a"",""6.0-6.1"":""a"",""7.0-7.1"":""a"",""8"":""a"",""8.1-8.4"":""a"",""9"":""a""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a"",""2.2"":""a"",""2.3"":""a"",""3"":""a"",""4"":""a"",""4.1"":""a"",""4.2-4.3"":""a"",""4.4"":""a"",""4.4.3-4.4.4"":""a"",""40"":""y""},""bb"":{""7"":""n"",""10"":""a""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n d #1""},""ie_mob"":{""10"":""a"",""11"":""a""},""and_uc"":{""9.9"":""a""}},""notes"":""Partial support indicates that unnecessary code-ranges are downloaded by the browser - see [browser test matrix](https://docs.google.com/a/chromium.org/spreadsheets/d/18h-1gaosu4-KYxH8JUNL6ZDuOsOKmWfauoai3CS3hPY/edit?pli=1#gid=0)."",""notes_by_num"":{""1"":""Can be enabled in Firefox using the `layout.css.unicode-range.enabled` flag""},""usage_perc_y"":43.43,""usage_perc_a"":36.43,""ucprefix"":false,""parent"":"""",""keywords"":""font face,unicode,unicode-range"",""ie_id"":"""",""chrome_id"":""""},""gamepad"":{""title"":""Gamepad API"",""description"":""API to support input from USB gamepad controllers through JavaScript."",""spec"":""http://www.w3.org/TR/gamepad/"",""status"":""wd"",""links"":[{""url"":""http://luser.github.io/gamepadtest/"",""title"":""Controller demo""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API"",""title"":""MDN article""},{""url"":""http://www.html5rocks.com/en/tutorials/doodles/gamepad/"",""title"":""HTML5Rocks article""},{""url"":""http://gamedevelopment.tutsplus.com/tutorials/using-the-html5-gamepad-api-to-add-controller-support-to-browser-games--cms-21345"",""title"":""Detailed tutorial""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":41.2,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""gamepadapi"",""chrome_id"":""5118776383111168""},""css-font-stretch"":{""title"":""CSS font-stretch"",""description"":""If a font has multiple types of variations based on the width of characters, the `font-stretch` property allows the appropriate one to be selected. The property in itself does not cause the browser to stretch to a font."",""spec"":""http://www.w3.org/TR/css-fonts-3/#font-stretch-prop"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch"",""title"":""MDN article""},{""url"":""http://css-tricks.com/almanac/properties/f/font-stretch/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""u"",""46"":""u"",""47"":""u""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":21.61,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""font stretch"",""ie_id"":""cssfontstretch"",""chrome_id"":""4598830058176512""},""font-size-adjust"":{""title"":""CSS font-size-adjust"",""description"":""Method of adjusting the font size in a matter that relates to the height of lowercase vs. uppercase letters. This makes it easier to set the size of fallback fonts."",""spec"":""http://www.w3.org/TR/css-fonts-3/#font-size-adjust-prop"",""status"":""cr"",""links"":[{""url"":""http://webdesignernotebook.com/css/the-little-known-font-size-adjust-css3-property/"",""title"":""Article on font-size-adjust""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-size-adjust"",""title"":""MDN article on font-size-adjust""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514821-font-size-adjust-other-font-properties"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n d #1"",""44"":""n d #1"",""45"":""n d #1"",""46"":""n d #1"",""47"":""n d #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n #2""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Enabled in Chrome through the \""experimental Web Platform features\"" flag in chrome://flags"",""2"":""Does not appear to work on Firefox mobile, despite recognition of the property.""},""usage_perc_y"":10.5,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""5720910061371392""},""link-icon-png"":{""title"":""PNG favicons"",""description"":""Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the PNG format can be preferable."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#rel-icon"",""status"":""ls"",""links"":[{""url"":""http://css-tricks.com/favicon-quiz/"",""title"":""Detailed info on favicons for various uses""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y #1"",""5"":""y #1"",""6"":""y #1"",""7"":""y #1"",""8"":""y #1"",""9"":""y #1"",""10"":""y #1"",""11"":""y #1"",""12"":""y #1"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1"",""43"":""y #1"",""44"":""y #1"",""45"":""y #1"",""46"":""y #1"",""47"":""y #1""},""safari"":{""3.1"":""y #2"",""3.2"":""y #2"",""4"":""y #2"",""5"":""y #2"",""5.1"":""y #2"",""6"":""y #2"",""6.1"":""y #2"",""7"":""y #2"",""7.1"":""y #2"",""8"":""y #2"",""9"":""y #2""},""opera"":{""9"":""y #3"",""9.5-9.6"":""y #3"",""10.0-10.1"":""y #3"",""10.5"":""y #3"",""10.6"":""y #3"",""11"":""y #3"",""11.1"":""y #3"",""11.5"":""y #3"",""11.6"":""y #3"",""12"":""y #3"",""12.1"":""y #3"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1""},""ios_saf"":{""3.2"":""n #4"",""4.0-4.1"":""n #4"",""4.2-4.3"":""n #4"",""5.0-5.1"":""n #4"",""6.0-6.1"":""n #4"",""7.0-7.1"":""n #4"",""8"":""n #4"",""8.1-8.4"":""n #4"",""9"":""n #4""},""op_mini"":{""5.0-8.0"":""n #4""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y #3"",""4.4.3-4.4.4"":""y #3"",""40"":""y #3""},""bb"":{""7"":""y"",""10"":""n #4""},""op_mob"":{""10"":""n #4"",""11"":""n #4"",""11.1"":""n #4"",""11.5"":""n #4"",""12"":""n #4"",""12.1"":""n #4"",""30"":""n #4""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n #4"",""11"":""n #4""},""and_uc"":{""9.9"":""y #2""}},""notes"":""Win8/IE10+ and iOS Safari support other types of icons for webpages too, using alternate tags.\r\n\r\nSee also [SVG favicons](#feat=link-icon-svg)."",""notes_by_num"":{""1"":""If both ICO and PNG are available, will use ICO over PNG if ICO has better matching sizes set."",""2"":""If both ICO and PNG are available, will ALWAYS use ICO file, regardless of sizes set."",""3"":""If multiple formats are available, will use the last one loaded, regardless of sizes (effectively picks at random)."",""4"":""Does not use favicons at all (but may have alternative for bookmarks, etc.).""},""usage_perc_y"":79.78,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""link-icon-svg"":{""title"":""SVG favicons"",""description"":""Icon used by browsers to identify a webpage or site. While all browsers support the `.ico` format, the SVG format can be preferable to more easily support higher resolutions or larger icons."",""spec"":""https://html.spec.whatwg.org/multipage/semantics.html#rel-icon"",""status"":""ls"",""links"":[{""url"":""http://crbug.com/294179"",""title"":""Chrome bug""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6509196-svg-favicons"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5"",""SVG""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""a #2"",""17"":""a #2"",""18"":""a #2"",""19"":""a #2"",""20"":""a #2"",""21"":""a #2"",""22"":""a #2"",""23"":""a #2"",""24"":""a #2"",""25"":""a #2"",""26"":""a #2"",""27"":""a #2"",""28"":""a #2"",""29"":""a #2"",""30"":""a #2"",""31"":""a #2"",""32"":""a #2"",""33"":""a #2"",""34"":""a #2"",""35"":""a #2"",""36"":""a #2"",""37"":""a #2"",""38"":""a #2"",""39"":""a #2"",""40"":""a #2"",""41"":""y #4"",""42"":""y #4""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""u"",""46"":""u"",""47"":""u""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""a #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n #1"",""4.0-4.1"":""n #1"",""4.2-4.3"":""n #1"",""5.0-5.1"":""n #1"",""6.0-6.1"":""n #1"",""7.0-7.1"":""n #1"",""8"":""n #1"",""8.1-8.4"":""n #1"",""9"":""a #3""},""op_mini"":{""5.0-8.0"":""n #1""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n #1""},""op_mob"":{""10"":""n #1"",""11"":""n #1"",""11.1"":""n #1"",""11.5"":""n #1"",""12"":""n #1"",""12.1"":""n #1"",""30"":""n #1""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n #1"",""11"":""n #1""},""and_uc"":{""9.9"":""n""}},""notes"":""See also [PNG favicons](#feat=link-icon-png)."",""notes_by_num"":{""1"":""Does not use favicons at all"",""2"":""Partial support in Firefox before version 41 refers to only loading the SVG favicon the first time, but not [on subsequent loads](https://bugzilla.mozilla.org/show_bug.cgi?id=366324#c14)."",""3"":""Safari 9 has support for \""[pinned tab](https://developer.apple.com/library/prerelease/mac/releasenotes/General/WhatsNewInSafari/Articles/Safari_9.html)\"" SVG icons, but this requires an unofficial `mask` attribute to be set and only works for all-black icons."",""4"":""Firefox [requires](https://bugzilla.mozilla.org/show_bug.cgi?id=366324#c50) the served mime-type to be 'image/svg+xml'.""},""usage_perc_y"":0,""usage_perc_a"":10.41,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-media-resolution"":{""title"":""Media Queries: resolution feature"",""description"":""Allows a media query to be set based on the device pixels used per CSS unit. While the standard uses `min`/`max-resolution` for this, some browsers support the older non-standard `device-pixel-ratio` media query."",""spec"":""http://www.w3.org/TR/css3-mediaqueries/#resolution"",""status"":""rec"",""links"":[{""url"":""http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio/"",""title"":""How to unprefix -webkit-device-pixel-ratio""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""a #2"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #2"",""10"":""a #2"",""11"":""a #2"",""12"":""a #2"",""13"":""a #2"",""14"":""a #2"",""15"":""a #2"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a x #3"",""5"":""a x #3"",""6"":""a x #3"",""7"":""a x #3"",""8"":""a x #3"",""9"":""a x #3"",""10"":""a x #3"",""11"":""a x #3"",""12"":""a x #3"",""13"":""a x #3"",""14"":""a x #3"",""15"":""a x #3"",""16"":""a x #3"",""17"":""a x #3"",""18"":""a x #3"",""19"":""a x #3"",""20"":""a x #3"",""21"":""a x #3"",""22"":""a x #3"",""23"":""a x #3"",""24"":""a x #3"",""25"":""a x #3"",""26"":""a x #3"",""27"":""a x #3"",""28"":""a x #3"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x #3"",""5"":""a x #3"",""5.1"":""a x #3"",""6"":""a x #3"",""6.1"":""a x #3"",""7"":""a x #3"",""7.1"":""a x #3"",""8"":""a x #3"",""9"":""a x #3""},""opera"":{""9"":""n"",""9.5-9.6"":""a x #3"",""10.0-10.1"":""a x #3"",""10.5"":""a x #3"",""10.6"":""a x #3"",""11"":""a x #3"",""11.1"":""a x #3"",""11.5"":""a x #3"",""11.6"":""a x #3"",""12"":""a x #3"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""a x #3"",""4.2-4.3"":""a x #3"",""5.0-5.1"":""a x #3"",""6.0-6.1"":""a x #3"",""7.0-7.1"":""a x #3"",""8"":""a x #3"",""8.1-8.4"":""a x #3"",""9"":""a x #3""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""u"",""2.2"":""u"",""2.3"":""a x #3"",""3"":""a x #3"",""4"":""a x #3"",""4.1"":""a x #3"",""4.2-4.3"":""a x #3"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a x #3"",""10"":""a x #3""},""op_mob"":{""10"":""a x #3"",""11"":""a x #3"",""11.1"":""a x #3"",""11.5"":""a x #3"",""12"":""a x #3"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""a x #3""}},""notes"":"""",""notes_by_num"":{""1"":""Supports the `dpi` unit, but does not support `dppx` or `dpcm` units."",""2"":""Firefox before 16 supports only `dpi` unit, but you can set `2dppx` per `min--moz-device-pixel-ratio: 2`"",""3"":""Supports the non-standard `min`/`max-device-pixel-ratio`"",""4"":""Supports the non-standard `min`/`max-device-pixel-ratio`""},""usage_perc_y"":59.24,""usage_perc_a"":36.29,""ucprefix"":false,""parent"":""css-mediaqueries"",""keywords"":""@media,device-pixel-ratio,resolution,dppx,dpcm,dpi"",""ie_id"":""mediaqueriesresolutionfeature,dppxunitfortheresolutionmediaquery"",""chrome_id"":""5944509615570944""},""xml-serializer"":{""title"":""DOM Parsing and Serialization"",""description"":""Various DOM parsing and serializing functions, specifically `DOMParser`, `XMLSerializer`, `innerHTML`, `outerHTML` and `adjacentHTML`."",""spec"":""http://www.w3.org/TR/DOM-Parsing/"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/XMLSerializer"",""title"":""MDN - XMLSerializer""},{""url"":""http://ejohn.org/blog/dom-insertadjacenthtml/"",""title"":""Article on insertAdjucentHTML""}],""categories"":[""DOM"",""JS API""],""stats"":{""ie"":{""5.5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #2"",""9"":""a #1"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a #2"",""3"":""a #2"",""3.5"":""a #2"",""3.6"":""a #2"",""4"":""a #2"",""5"":""a #2"",""6"":""a #2"",""7"":""a #2"",""8"":""a #3"",""9"":""a #3"",""10"":""a #3"",""11"":""a #1"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""a #1"",""26"":""a #1"",""27"":""a #1"",""28"":""a #1"",""29"":""a #1"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""a #1"",""5.1"":""a #1"",""6"":""a #1"",""6.1"":""a #1"",""7"":""a #1"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""u"",""10.5"":""u"",""10.6"":""a #1"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""11.6"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""a #1"",""4.0-4.1"":""a #1"",""4.2-4.3"":""a #1"",""5.0-5.1"":""a #1"",""6.0-6.1"":""a #1"",""7.0-7.1"":""a #1"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""a #1"",""4"":""a #1"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #1"",""10"":""a #1""},""op_mob"":{""10"":""u"",""11"":""a #1"",""11.1"":""a #1"",""11.5"":""a #1"",""12"":""a #1"",""12.1"":""a #1"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #1""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to lacking support for `parseFromString` on the DOMParser."",""2"":""Partial support in older IE refers to only supporting `innerHTML`, nothing else.""},""usage_perc_y"":77.32,""usage_perc_a"":20.33,""ucprefix"":false,""parent"":"""",""keywords"":""parseFromString"",""ie_id"":"""",""chrome_id"":""""},""css-image-set"":{""title"":""CSS image-set"",""description"":""Method of letting the browser pick the most appropriate CSS background image from a given set, primarily for high PPI screens."",""spec"":""http://dev.w3.org/csswg/css-images-3/#image-set-notation"",""status"":""unoff"",""links"":[{""url"":""http://cloudfour.com/examples/image-set/"",""title"":""Demo""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6606738-image-set"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x"",""43"":""y x"",""44"":""y x"",""45"":""y x"",""46"":""y x"",""47"":""y x""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y x"",""6.1"":""y x"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y x"",""7.0-7.1"":""y x"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y x"",""40"":""y x""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y x""},""and_chr"":{""42"":""y x""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":59.57,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-boxdecorationbreak"":{""title"":""CSS box-decoration-break"",""description"":""Controls whether the box's margins, borders, padding, and other decorations wrap the broken edges of the box fragments (when the box is split by a break (page/column/region/line)."",""spec"":""http://www.w3.org/TR/css3-break/#break-decoration"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break"",""title"":""MDN article""},{""url"":""http://jsbin.com/xojoro/edit?css,output"",""title"":""Demo of effect on box border""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514472-box-decoration-break"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1"",""43"":""a x #1"",""44"":""a x #1"",""45"":""a x #1"",""46"":""a x #1"",""47"":""a x #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""a x #1"",""7"":""a x #1"",""7.1"":""a x #1"",""8"":""a x #1"",""9"":""a x #1""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""11.6"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""a x #1"",""8"":""a x #1"",""8.1-8.4"":""a x #1"",""9"":""a x #1""},""op_mini"":{""5.0-8.0"":""a #1""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""a x #1"",""4.4.3-4.4.4"":""a x #1"",""40"":""a x #1""},""bb"":{""7"":""n"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""30"":""a x #1""},""and_chr"":{""42"":""a x #1""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to working for inline elements but not across column or page breaks.""},""usage_perc_y"":9.27,""usage_perc_a"":64.11,""ucprefix"":false,""parent"":"""",""keywords"":""box-decoration,box decoration,break"",""ie_id"":"""",""chrome_id"":""""},""object-observe"":{""title"":""Object.observe data binding"",""description"":""Method for data binding, part of the ECMAScript 7 proposals"",""spec"":""http://wiki.ecmascript.org/doku.php?id=harmony:observe"",""status"":""other"",""links"":[{""url"":""http://www.html5rocks.com/en/tutorials/es7/observe/"",""title"":""Data-binding Revolutions with Object.observe()""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":43.46,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""objectobserve"",""chrome_id"":""6147094632988672""},""css-at-counter-style"":{""title"":""CSS Counter Styles"",""description"":""The @counter-style CSS at-rule allows custom counter styles to be defined. A @counter-style rule defines how to convert a counter value into a string representation."",""spec"":""http://dev.w3.org/csswg/css-counter-styles/"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/@counter-style"",""title"":""MDN article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""a #1"",""34"":""a #1"",""35"":""a #1"",""36"":""a #1"",""37"":""a #1"",""38"":""a #1"",""39"":""a #1"",""40"":""a #1"",""41"":""a #1"",""42"":""a #1""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""a #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in Firefox refers to lacking support for [image symbols](https://bugzilla.mozilla.org/show_bug.cgi?id=1024179)""},""usage_perc_y"":0,""usage_perc_a"":8.71,""ucprefix"":false,""parent"":"""",""keywords"":""css @counter-style, list-style"",""ie_id"":"""",""chrome_id"":""""},""css-page-break"":{""title"":""CSS page-break properties"",""description"":""Properties to control the way elements are broken across (printed) pages."",""spec"":""http://www.w3.org/TR/CSS2/page.html#page-breaks"",""status"":""rec"",""links"":[{""url"":""https://css-tricks.com/almanac/properties/p/page-break/"",""title"":""CSS Tricks article""},{""url"":""http://dev.w3.org/csswg/css-break-3/#break-between"",""title"":""Latest fragmentation specification (includes column & region breaks)""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""10"":""a #1 #2"",""11"":""a #1 #2""},""edge"":{""1"":""a #1 #2""},""firefox"":{""2"":""a #1 #2 #3"",""3"":""a #1 #2 #3"",""3.5"":""a #1 #2 #3"",""3.6"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""5"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""10"":""a #1 #2 #3"",""11"":""a #1 #2 #3"",""12"":""a #1 #2 #3"",""13"":""a #1 #2 #3"",""14"":""a #1 #2 #3"",""15"":""a #1 #2 #3"",""16"":""a #1 #2 #3"",""17"":""a #1 #2 #3"",""18"":""a #1 #2 #3"",""19"":""a #1 #2 #3"",""20"":""a #1 #2 #3"",""21"":""a #1 #2 #3"",""22"":""a #1 #2 #3"",""23"":""a #1 #2 #3"",""24"":""a #1 #2 #3"",""25"":""a #1 #2 #3"",""26"":""a #1 #2 #3"",""27"":""a #1 #2 #3"",""28"":""a #1 #2 #3"",""29"":""a #1 #2 #3"",""30"":""a #1 #2 #3"",""31"":""a #1 #2 #3"",""32"":""a #1 #2 #3"",""33"":""a #1 #2 #3"",""34"":""a #1 #2 #3"",""35"":""a #1 #2 #3"",""36"":""a #1 #2 #3"",""37"":""a #1 #2 #3"",""38"":""a #1 #2 #3"",""39"":""a #1 #2 #3"",""40"":""a #1 #2 #3"",""41"":""a #1 #2 #3"",""42"":""a #1 #2 #3""},""chrome"":{""4"":""a #1 #2 #3"",""5"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3"",""10"":""a #1 #2 #3"",""11"":""a #1 #2 #3"",""12"":""a #1 #2 #3"",""13"":""a #1 #2 #3"",""14"":""a #1 #2 #3"",""15"":""a #1 #2 #3"",""16"":""a #1 #2 #3"",""17"":""a #1 #2 #3"",""18"":""a #1 #2 #3"",""19"":""a #1 #2 #3"",""20"":""a #1 #2 #3"",""21"":""a #1 #2 #3"",""22"":""a #1 #2 #3"",""23"":""a #1 #2 #3"",""24"":""a #1 #2 #3"",""25"":""a #1 #2 #3"",""26"":""a #1 #2 #3"",""27"":""a #1 #2 #3"",""28"":""a #1 #2 #3"",""29"":""a #1 #2 #3"",""30"":""a #1 #2 #3"",""31"":""a #1 #2 #3"",""32"":""a #1 #2 #3"",""33"":""a #1 #2 #3"",""34"":""a #1 #2 #3"",""35"":""a #1 #2 #3"",""36"":""a #1 #2 #3"",""37"":""a #1 #2 #3"",""38"":""a #1 #2 #3"",""39"":""a #1 #2 #3"",""40"":""a #1 #2 #3"",""41"":""a #1 #2 #3"",""42"":""a #1 #2 #3"",""43"":""a #1 #2 #3"",""44"":""a #1 #2 #3"",""45"":""a #1 #2 #3"",""46"":""a #1 #2 #3"",""47"":""a #1 #2 #3""},""safari"":{""3.1"":""a #1 #2 #3"",""3.2"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""5"":""a #1 #2 #3"",""5.1"":""a #1 #2 #3"",""6"":""a #1 #2 #3"",""6.1"":""a #1 #2 #3"",""7"":""a #1 #2 #3"",""7.1"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""9"":""a #1 #2 #3""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""y #1"",""10.5"":""y #1"",""10.6"":""y #1"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""11.6"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""15"":""a #1 #2 #3"",""16"":""a #1 #2 #3"",""17"":""a #1 #2 #3"",""18"":""a #1 #2 #3"",""19"":""a #1 #2 #3"",""20"":""a #1 #2 #3"",""21"":""a #1 #2 #3"",""22"":""a #1 #2 #3"",""23"":""a #1 #2 #3"",""24"":""a #1 #2 #3"",""25"":""a #1 #2 #3"",""26"":""a #1 #2 #3"",""27"":""a #1 #2 #3"",""28"":""a #1 #2 #3"",""29"":""a #1 #2 #3"",""30"":""a #1 #2 #3"",""31"":""a #1 #2 #3"",""32"":""a #1 #2 #3""},""ios_saf"":{""3.2"":""a #1 #2 #3"",""4.0-4.1"":""a #1 #2 #3"",""4.2-4.3"":""a #1 #2 #3"",""5.0-5.1"":""a #1 #2 #3"",""6.0-6.1"":""a #1 #2 #3"",""7.0-7.1"":""a #1 #2 #3"",""8"":""a #1 #2 #3"",""8.1-8.4"":""a #1 #2 #3"",""9"":""a #1 #2 #3""},""op_mini"":{""5.0-8.0"":""y #1""},""android"":{""2.1"":""a #1 #2 #3"",""2.2"":""a #1 #2 #3"",""2.3"":""a #1 #2 #3"",""3"":""a #1 #2 #3"",""4"":""a #1 #2 #3"",""4.1"":""a #1 #2 #3"",""4.2-4.3"":""a #1 #2 #3"",""4.4"":""a #1 #2 #3"",""4.4.3-4.4.4"":""a #1 #2 #3"",""40"":""a #1 #2 #3""},""bb"":{""7"":""a #1 #2 #3"",""10"":""a #1 #2 #3""},""op_mob"":{""10"":""y #1"",""11"":""y #1"",""11.1"":""y #1"",""11.5"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""30"":""a #1 #2 #3""},""and_chr"":{""42"":""a #1 #2 #3""},""and_ff"":{""38"":""a #1 #2 #3""},""ie_mob"":{""10"":""a #1 #2"",""11"":""a #1 #2""},""and_uc"":{""9.9"":""a #1 #2 #3""}},""notes"":""Not all mobile browsers offer print support; support listed for these is based on browser engine capability."",""notes_by_num"":{""1"":""Supports the `page-break-*` alias from the CSS 2.1 specification, but not the `break-*` properties from the latest spec."",""2"":""Does not support `avoid` for `page-break-before` & `page-break-after` (only `page-break-inside`)."",""3"":""Treats the `left` and `right` values like `always`.""},""usage_perc_y"":4.96,""usage_perc_a"":92.72,""ucprefix"":false,""parent"":"""",""keywords"":""page-break-before,page-break-after,page-break-inside,always,avoid"",""ie_id"":"""",""chrome_id"":""""},""css-placeholder-shown"":{""title"":"":placeholder-shown CSS pseudo-class"",""description"":""Input elements can sometimes show placeholder text as a hint to the user on what to type in. See, for example, the placeholder attribute in HTML5. The :placeholder-shown pseudo-class matches an input element that is showing such placeholder text."",""spec"":""http://dev.w3.org/csswg/selectors-4/#placeholder"",""status"":""wd"",""links"":[{""url"":""http://trac.webkit.org/changeset/172826"",""title"":""WebKit bug""},{""url"":""https://bugzilla.mozilla.org/show_bug.cgi?id=1069015"",""title"":""Firefox bug""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""For support of styling the actual placeholder text itself, see [CSS ::placeholder](http://caniuse.com/#feat=css-placeholder)\r\n\r\nSupport currently exists in [WebKit Nightly](http://trac.webkit.org/changeset/172826)"",""notes_by_num"":{},""usage_perc_y"":0,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"":placeholder-shown,placeholder-shown,placeholder"",""ie_id"":"""",""chrome_id"":""""},""broadcastchannel"":{""title"":""BroadcastChannel"",""description"":""BroadcastChannel allows scripts from the same origin but other browsing contexts (windows, workers) to send each other messages."",""spec"":""https://html.spec.whatwg.org/multipage/comms.html#broadcasting-to-other-browsing-contexts"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel"",""title"":""MDN article""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":7.85,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""broadcast,channel,messaging"",""ie_id"":"""",""chrome_id"":""4585496197988352""},""css-crisp-edges"":{""title"":""Crisp edges/pixelated images"",""description"":""Forces images to be scaled with an algorithm that preserves contrast and edges in the image, without smoothing colors or introduce blur. This is intended for images such as pixel art. Official values that accomplish this for the `image-rendering` property are `crisp-edges` and `pixelated`."",""spec"":""http://dev.w3.org/csswg/css-images-3/#valdef-image-rendering-crisp-edges"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering"",""title"":""MDN article""},{""url"":""http://updates.html5rocks.com/2015/01/pixelated"",""title"":""HTML5Rocks article""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""10"":""a x #2"",""11"":""a x #2""},""edge"":{""1"":""a x #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""y x #3"",""4"":""y x #3"",""5"":""y x #3"",""6"":""y x #3"",""7"":""y x #3"",""8"":""y x #3"",""9"":""y x #3"",""10"":""y x #3"",""11"":""y x #3"",""12"":""y x #3"",""13"":""y x #3"",""14"":""y x #3"",""15"":""y x #3"",""16"":""y x #3"",""17"":""y x #3"",""18"":""y x #3"",""19"":""y x #3"",""20"":""y x #3"",""21"":""y x #3"",""22"":""y x #3"",""23"":""y x #3"",""24"":""y x #3"",""25"":""y x #3"",""26"":""y x #3"",""27"":""y x #3"",""28"":""y x #3"",""29"":""y x #3"",""30"":""y x #3"",""31"":""y x #3"",""32"":""y x #3"",""33"":""y x #3"",""34"":""y x #3"",""35"":""y x #3"",""36"":""y x #3"",""37"":""y x #3"",""38"":""y x #3"",""39"":""y x #3"",""40"":""y x #3"",""41"":""y x #3"",""42"":""y x #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""y #4"",""42"":""y #4"",""43"":""y #4"",""44"":""y #4"",""45"":""y #4"",""46"":""y #4"",""47"":""y #4""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""a x #1"",""6.1"":""y x #3"",""7"":""y x #3"",""7.1"":""y x #3"",""8"":""y x #3"",""9"":""y x #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y x #3"",""12"":""y x #3"",""12.1"":""y x #3"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y #4"",""29"":""y #4"",""30"":""y #4"",""31"":""y #4"",""32"":""y #4""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a x #1"",""6.0-6.1"":""a x #1"",""7.0-7.1"":""y x #3"",""8"":""y x #3"",""8.1-8.4"":""y x #3"",""9"":""y x #3""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""a x #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""y x #3"",""12.1"":""y x #3"",""30"":""y #4""},""and_chr"":{""42"":""y #4""},""and_ff"":{""38"":""y x #3""},""ie_mob"":{""10"":""a x #2"",""11"":""a x #2""},""and_uc"":{""9.9"":""a x #1""}},""notes"":""Note that prefixes apply to the value (e.g. `-moz-crisp-edges`), not the `image-rendering` property."",""notes_by_num"":{""1"":""Supported using the non-standard value `-webkit-optimize-contrast`"",""2"":""Internet Explorer accomplishes support using the non-standard declaration `-ms-interpolation-mode: nearest-neighbor`"",""3"":""Supports the `crisp-edges` value, but not `pixelated`."",""4"":""Supports the `pixelated` value, but not `crisp-edges`.""},""usage_perc_y"":61.67,""usage_perc_a"":19.27,""ucprefix"":false,""parent"":"""",""keywords"":""image-rendering,crisp-edges"",""ie_id"":"""",""chrome_id"":""5118058116939776""},""css-text-align-last"":{""title"":""CSS3 text-align-last"",""description"":""CSS property to describe how the last line of a block or a line right before a forced line break when `text-align` is `justify`."",""spec"":""http://www.w3.org/TR/css3-text/#text-align-last-property"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/text-align-last"",""title"":""MDN text-align-last""},{""url"":""http://blogs.adobe.com/webplatform/2014/02/25/improving-your-sites-visual-details-css3-text-align-last/"",""title"":""Adobe Web Platform Article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1""},""edge"":{""1"":""a #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""y x"",""13"":""y x"",""14"":""y x"",""15"":""y x"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y x"",""21"":""y x"",""22"":""y x"",""23"":""y x"",""24"":""y x"",""25"":""y x"",""26"":""y x"",""27"":""y x"",""28"":""y x"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y x"",""34"":""y x"",""35"":""y x"",""36"":""y x"",""37"":""y x"",""38"":""y x"",""39"":""y x"",""40"":""y x"",""41"":""y x"",""42"":""y x""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n d #2"",""36"":""n d #2"",""37"":""n d #2"",""38"":""n d #2"",""39"":""n d #2"",""40"":""n d #2"",""41"":""n d #2"",""42"":""n d #2"",""43"":""n d #2"",""44"":""n d #2"",""45"":""n d #2"",""46"":""n d #2"",""47"":""n d #2""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n d #3"",""23"":""n d #3"",""24"":""n d #3"",""25"":""n d #3"",""26"":""n d #3"",""27"":""n d #3"",""28"":""n d #3"",""29"":""n d #3"",""30"":""n d #3"",""31"":""n d #3"",""32"":""n d #3""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""y x""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""In Internet Explorer, the start and end values are not supported."",""2"":""Enabled through the \""Enable Experimental Web Platform Features\"" flag in chrome://flags"",""3"":""Enabled through the \""Enable Experimental Web Platform Features\"" flag in opera://flags""},""usage_perc_y"":10.41,""usage_perc_a"":13.25,""ucprefix"":false,""parent"":"""",""keywords"":""text align last"",""ie_id"":"""",""chrome_id"":""""},""css-logical-props"":{""title"":""CSS Logical Properties"",""description"":""Use start/end properties that depend on LTR or RTL writing direction instead of left/right"",""spec"":""http://dev.w3.org/csswg/css-logical-props/"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-margin-start"",""title"":""MDN -moz-margin-start""},{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-padding-start"",""title"":""MDN -moz-padding-start""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/7438435-css-logical-properties"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""CSS"",""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""a x #1"",""3.5"":""a x #1"",""3.6"":""a x #1"",""4"":""a x #1"",""5"":""a x #1"",""6"":""a x #1"",""7"":""a x #1"",""8"":""a x #1"",""9"":""a x #1"",""10"":""a x #1"",""11"":""a x #1"",""12"":""a x #1"",""13"":""a x #1"",""14"":""a x #1"",""15"":""a x #1"",""16"":""a x #1"",""17"":""a x #1"",""18"":""a x #1"",""19"":""a x #1"",""20"":""a x #1"",""21"":""a x #1"",""22"":""a x #1"",""23"":""a x #1"",""24"":""a x #1"",""25"":""a x #1"",""26"":""a x #1"",""27"":""a x #1"",""28"":""a x #1"",""29"":""a x #1"",""30"":""a x #1"",""31"":""a x #1"",""32"":""a x #1"",""33"":""a x #1"",""34"":""a x #1"",""35"":""a x #1"",""36"":""a x #1"",""37"":""a x #1"",""38"":""a x #1"",""39"":""a x #1"",""40"":""a x #1"",""41"":""a x #1"",""42"":""a x #1""},""chrome"":{""4"":""a x #2"",""5"":""a x #2"",""6"":""a x #2"",""7"":""a x #2"",""8"":""a x #2"",""9"":""a x #2"",""10"":""a x #2"",""11"":""a x #2"",""12"":""a x #2"",""13"":""a x #2"",""14"":""a x #2"",""15"":""a x #2"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""a x #2"",""22"":""a x #2"",""23"":""a x #2"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2"",""33"":""a x #2"",""34"":""a x #2"",""35"":""a x #2"",""36"":""a x #2"",""37"":""a x #2"",""38"":""a x #2"",""39"":""a x #2"",""40"":""a x #2"",""41"":""a x #2"",""42"":""a x #2"",""43"":""a x #2"",""44"":""a x #2"",""45"":""a x #2"",""46"":""a x #2"",""47"":""a x #2""},""safari"":{""3.1"":""a x #2"",""3.2"":""a x #2"",""4"":""a x #2"",""5"":""a x #2"",""5.1"":""a x #2"",""6"":""a x #2"",""6.1"":""a x #2"",""7"":""a x #2"",""7.1"":""a x #2"",""8"":""a x #2"",""9"":""a x #2""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #2"",""16"":""a x #2"",""17"":""a x #2"",""18"":""a x #2"",""19"":""a x #2"",""20"":""a x #2"",""21"":""a x #2"",""22"":""a x #2"",""23"":""a x #2"",""24"":""a x #2"",""25"":""a x #2"",""26"":""a x #2"",""27"":""a x #2"",""28"":""a x #2"",""29"":""a x #2"",""30"":""a x #2"",""31"":""a x #2"",""32"":""a x #2""},""ios_saf"":{""3.2"":""a x #2"",""4.0-4.1"":""a x #2"",""4.2-4.3"":""a x #2"",""5.0-5.1"":""a x #2"",""6.0-6.1"":""a x #2"",""7.0-7.1"":""a x #2"",""8"":""a x #2"",""8.1-8.4"":""a x #2"",""9"":""a x #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a x #2"",""2.2"":""a x #2"",""2.3"":""a x #2"",""3"":""a x #2"",""4"":""a x #2"",""4.1"":""a x #2"",""4.2-4.3"":""a x #2"",""4.4"":""a x #2"",""4.4.3-4.4.4"":""a x #2"",""40"":""a x #2""},""bb"":{""7"":""a x #2"",""10"":""a x #2""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""a x #2""},""and_chr"":{""42"":""a x #2""},""and_ff"":{""38"":""a x #1""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""a x #2""}},""notes"":"""",""notes_by_num"":{""1"":""Only supports the *-start, and *-end values for `margin`, `border` and `padding`, not the inline/block type values as defined in the spec."",""2"":""Like #1 but also supports `*-before` and `*-end` for `*-block-start` and `*-block-end` properties as well as `start` and `end` values for `text-align`""},""usage_perc_y"":0,""usage_perc_a"":79.45,""ucprefix"":false,""parent"":"""",""keywords"":""margin-start,margin-end,padding-start,padding-end,border-start,border-end,inline-start,inline-end,block-start,block-end"",""ie_id"":""csslogicalpropertieslevel1"",""chrome_id"":""""},""fetch"":{""title"":""Fetch"",""description"":""A modern replacement for XMLHttpRequest."",""spec"":""https://fetch.spec.whatwg.org/"",""status"":""ls"",""links"":[{""url"":""https://github.com/github/fetch"",""title"":""Polyfill""},{""url"":""http://addyosmani.com/demos/fetch-api/"",""title"":""Demo""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n d #1"",""35"":""n d #1"",""36"":""n d #1"",""37"":""n d #1"",""38"":""n d #1"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""a #2"",""41"":""a #2 #3"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""a #2"",""28"":""a #2 #3"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support can be enabled in Firefox with the `dom.fetch.enabled` flag."",""2"":""Only available in Chrome and Opera within ServiceWorkers."",""3"":""Available in Chrome and Opera within Window and Workers by enabling the \""Experimental Web Platform Features\"" flag in `chrome://flags`""},""usage_perc_y"":40.3,""usage_perc_a"":1.06,""ucprefix"":false,""parent"":"""",""keywords"":""fetch,service,workers,xhr,xmlhttprequest"",""ie_id"":""fetchapi"",""chrome_id"":""6730533392351232""},""referrer-policy"":{""title"":""Referrer Policy"",""description"":""Allow control of HTTP referrers via the referrer meta tag."",""spec"":""http://w3c.github.io/webappsec/specs/referrer-policy/"",""status"":""wd"",""links"":[{""url"":""https://blog.mozilla.org/security/2015/01/21/meta-referrer/"",""title"":""Mozilla security article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":62.27,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""meta,referrer,referer"",""ie_id"":""metareferrer"",""chrome_id"":""""},""background-attachment"":{""title"":""CSS background-attachment"",""description"":""Method of defining how a background image is attached to a scrollable element. Values include `scroll` (default), `fixed` and `local`."",""spec"":""http://www.w3.org/TR/css3-background/#the-background-attachment"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment"",""title"":""MDN article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""a #1"",""3"":""a #1"",""3.5"":""a #1"",""3.6"":""a #1"",""4"":""a #1"",""5"":""a #1"",""6"":""a #1"",""7"":""a #1"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1"",""11"":""a #1"",""12"":""a #1"",""13"":""a #1"",""14"":""a #1"",""15"":""a #1"",""16"":""a #1"",""17"":""a #1"",""18"":""a #1"",""19"":""a #1"",""20"":""a #1"",""21"":""a #1"",""22"":""a #1"",""23"":""a #1"",""24"":""a #1"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""a #1"",""3.2"":""a #1"",""4"":""a #1"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""a #1"",""9.5-9.6"":""a #1"",""10.0-10.1"":""a #1"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""a #2"",""6.0-6.1"":""a #2"",""7.0-7.1"":""a #2"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""a #1"",""4.2-4.3"":""a #1"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""a #2"",""10"":""a #2""},""op_mob"":{""10"":""a #1"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""a #2""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""a #1""}},""notes"":""Most mobile devices have a delay in updating the background position after scrolling a page with `fixed` backgrounds."",""notes_by_num"":{""1"":""Partial support refers to supporting `fixed` but not `local`"",""2"":""Partial support refers to supporting `local` but not `fixed`""},""usage_perc_y"":63.03,""usage_perc_a"":25.92,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""currentcolor"":{""title"":""CSS currentColor value"",""description"":""A CSS value that will apply the existing `color` value to other properties like `background-color`, etc. "",""spec"":""http://www.w3.org/TR/css3-color/#currentcolor"",""status"":""rec"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentColor_keyword"",""title"":""MDN article""},{""url"":""http://css-tricks.com/currentcolor/"",""title"":""CSS Tricks article""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""y"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""y"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""y"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""y"",""2.2"":""y"",""2.3"":""y"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":95.56,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""input-pattern"":{""title"":""Pattern attribute for input fields"",""description"":""Allows validation of an input field based on a given regular expression pattern."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-pattern-attribute"",""status"":""ls"",""links"":[{""url"":""http://html5pattern.com"",""title"":""Site with common sample patterns""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""u"",""3.2"":""u"",""4"":""u"",""5"":""u"",""5.1"":""a #1 #2"",""6"":""a #1 #2"",""6.1"":""a #1 #2"",""7"":""a #1 #2"",""7.1"":""a #1 #2"",""8"":""a #1 #2"",""9"":""a #1 #2""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""u"",""4.0-4.1"":""u"",""4.2-4.3"":""u"",""5.0-5.1"":""a #1 #2"",""6.0-6.1"":""a #1 #2"",""7.0-7.1"":""a #1 #2"",""8"":""a #1 #2"",""8.1-8.4"":""a #1 #2"",""9"":""a #1 #2""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""a #1""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""a #1"",""11"":""a #1""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support refers to not displaying a message for invalid patterns"",""2"":""Safari browsers support the `pattern` attribute but will still allow forms to be submitted if the pattern is incorrect. See the [form validation data](http://caniuse.com/#feat=form-validation) for details.""},""usage_perc_y"":72.25,""usage_perc_a"":11.6,""ucprefix"":false,""parent"":""form-validation"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""registerprotocolhandler"":{""title"":""Custom protocol handling"",""description"":""Method of allowing a webpage to handle a given protocol using `navigator.registerProtocolHandler`. This allows certain URLs to be opened by a given web application, for example `mailto:` addresses can be opened by a webmail client."",""spec"":""https://html.spec.whatwg.org/multipage/webappapis.html#custom-handlers"",""status"":""ls"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler"",""title"":""MDN article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""y"",""3.5"":""y"",""3.6"":""y"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""y #1"",""14"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1"",""33"":""y #1"",""34"":""y #1"",""35"":""y #1"",""36"":""y #1"",""37"":""y #1"",""38"":""y #1"",""39"":""y #1"",""40"":""y #1"",""41"":""y #1"",""42"":""y #1"",""43"":""y #1"",""44"":""y #1"",""45"":""y #1"",""46"":""y #1"",""47"":""y #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""y #1"",""12"":""y #1"",""12.1"":""y #1"",""15"":""y #1"",""16"":""y #1"",""17"":""y #1"",""18"":""y #1"",""19"":""y #1"",""20"":""y #1"",""21"":""y #1"",""22"":""y #1"",""23"":""y #1"",""24"":""y #1"",""25"":""y #1"",""26"":""y #1"",""27"":""y #1"",""28"":""y #1"",""29"":""y #1"",""30"":""y #1"",""31"":""y #1"",""32"":""y #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""y #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Supports protocols `mailto`, `mms`, `nntp`, `rtsp`, and `webcal` but requires custom protocols to start with `web+`""},""usage_perc_y"":42.34,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""css-snappoints"":{""title"":""CSS Scroll snap points"",""description"":""CSS technique that allows customizable scrolling experiences like pagination of carousels by setting defined snap points."",""spec"":""http://www.w3.org/TR/css-snappoints-1/"",""status"":""wd"",""links"":[{""url"":""http://generatedcontent.org/post/66817675443/setting-native-like-scrolling-offsets-in-css-with"",""title"":""Blog post""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""a x #1"",""11"":""a x #2""},""edge"":{""1"":""a x #2""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Partial support in IE10 refers to support limited to touch screens."",""2"":""Partial support in IE11 [documented here](https://dl.dropboxusercontent.com/u/444684/openwebref/CSS/scroll-snap-points/support.html)"",""3"":""Can be enabled in Firefox using the `layout.css.scroll-snap.enabled` flag in `about:config`""},""usage_perc_y"":0.26,""usage_perc_a"":8.84,""ucprefix"":false,""parent"":"""",""keywords"":""scroll-snap-points-x,scroll-snap-points-y,scroll-snap-type,scroll-snap-destination,scroll-snap-coordinate"",""ie_id"":""cssscrollingsnappoints"",""chrome_id"":""""},""input-minlength"":{""title"":""Minimum length attribute for input fields"",""description"":""Declares a lower bound on the number of characters a user can input."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#the-maxlength-and-minlength-attributes"",""status"":""ls"",""links"":[{""url"":""http://www.w3.org/TR/html5/forms.html#setting-minimum-input-length-requirements:-the-minlength-attribute"",""title"":""W3C usage example""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6565212-minlength-attribute"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":41.1,""usage_perc_a"":0,""ucprefix"":false,""parent"":""form-validation"",""keywords"":"""",""ie_id"":"""",""chrome_id"":""6023370181181440""},""css-media-interaction"":{""title"":""Media Queries: interaction media features"",""description"":""Allows a media query to be set based on the presence and accuracy of the user's pointing device, and whether they have the ability to hover over elements on the page. This includes the `pointer`, `any-pointer`, `hover`, and `any-hover` media features."",""spec"":""http://www.w3.org/TR/mediaqueries-4/#mf-interaction"",""status"":""wd"",""links"":[{""url"":""http://jordanm.co.uk/2013/11/11/potential-use-cases-for-script-hover-and-pointer.html"",""title"":""Potential use cases for script, hover and pointer CSS Level 4 Media Features""},{""url"":""https://dev.opera.com/articles/media-features/"",""title"":""Interaction Media Features and their potential (for incorrect assumptions)""},{""url"":""https://github.com/twbs/mq4-hover-shim"",""title"":""Polyfill for the `hover` media feature""}],""categories"":[""CSS""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""u""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":40.55,""usage_perc_a"":0,""ucprefix"":false,""parent"":""css-mediaqueries"",""keywords"":""@media,interaction,hover,any-hover,pointer,any-pointer"",""ie_id"":""mediaquerieslevel4interactionmediafeaturespointerandhover"",""chrome_id"":""6460705494532096""},""ime"":{""title"":""Input Method Editor API"",""description"":""Provides scripted access to the Input Method Editor (IME). An IME is often used to input characters from East Asian languages by typing roman characters and selecting from the resulting suggestions."",""spec"":""http://www.w3.org/TR/ime-api/"",""status"":""wd"",""links"":[{""url"":""http://blogs.msdn.com/b/ie/archive/2014/03/31/building-better-input-experience-for-east-asian-users-with-the-ime-api-in-ie11.aspx"",""title"":""Building Better Input Experience for East Asian Users with the IME API in IE11""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""y x #1""},""edge"":{""1"":""y x #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""y x #1""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Prefixed implementation uses `msGetInputContext()` method from an earlier version of the spec to get the `InputMethodContext`, rather than the `inputMethodContext` attribute. Also includes support for `getCompositionAlternatives()` from the latest Editor'""},""usage_perc_y"":8.23,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""ime,cjk,input,internationalization,inputMethodContext,candidatewindow,composition"",""ie_id"":""imeapi"",""chrome_id"":""6366722080636928""},""font-smooth"":{""title"":""CSS font-smooth"",""description"":""Controls the application of anti-aliasing when fonts are rendered."",""spec"":""http://www.w3.org/TR/WD-font/#font-smooth"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-smooth"",""title"":""MDN article""},{""url"":""http://www.w3.org/TR/WD-font/#font-smooth"",""title"":""Old version of W3C recommendation containing font-smooth""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""a x #2 #3"",""26"":""a x #2 #3"",""27"":""a x #2 #3"",""28"":""a x #2 #3"",""29"":""a x #2 #3"",""30"":""a x #2 #3"",""31"":""a x #2 #3"",""32"":""a x #2 #3"",""33"":""a x #2 #3"",""34"":""a x #2 #3"",""35"":""a x #2 #3"",""36"":""a x #2 #3"",""37"":""a x #2 #3"",""38"":""a x #2 #3"",""39"":""a x #2 #3"",""40"":""a x #2 #3"",""41"":""a x #2 #3"",""42"":""a x #2 #3""},""chrome"":{""4"":""n"",""5"":""a x #1 #3"",""6"":""a x #1 #3"",""7"":""a x #1 #3"",""8"":""a x #1 #3"",""9"":""a x #1 #3"",""10"":""a x #1 #3"",""11"":""a x #1 #3"",""12"":""a x #1 #3"",""13"":""a x #1 #3"",""14"":""a x #1 #3"",""15"":""a x #1 #3"",""16"":""a x #1 #3"",""17"":""a x #1 #3"",""18"":""a x #1 #3"",""19"":""a x #1 #3"",""20"":""a x #1 #3"",""21"":""a x #1 #3"",""22"":""a x #1 #3"",""23"":""a x #1 #3"",""24"":""a x #1 #3"",""25"":""a x #1 #3"",""26"":""a x #1 #3"",""27"":""a x #1 #3"",""28"":""a x #1 #3"",""29"":""a x #1 #3"",""30"":""a x #1 #3"",""31"":""a x #1 #3"",""32"":""a x #1 #3"",""33"":""a x #1 #3"",""34"":""a x #1 #3"",""35"":""a x #1 #3"",""36"":""a x #1 #3"",""37"":""a x #1 #3"",""38"":""a x #1 #3"",""39"":""a x #1 #3"",""40"":""a x #1 #3"",""41"":""a x #1 #3"",""42"":""a x #1 #3"",""43"":""a x #1 #3"",""44"":""a x #1 #3"",""45"":""a x #1 #3"",""46"":""a x #1 #3"",""47"":""a x #1 #3""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""a x #1 #3"",""5"":""a x #1 #3"",""5.1"":""a x #1 #3"",""6"":""a x #1 #3"",""6.1"":""a x #1 #3"",""7"":""a x #1 #3"",""7.1"":""a x #1 #3"",""8"":""a x #1 #3"",""9"":""a x #1 #3""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""a x #1 #3"",""16"":""a x #1 #3"",""17"":""a x #1 #3"",""18"":""a x #1 #3"",""19"":""a x #1 #3"",""20"":""a x #1 #3"",""21"":""a x #1 #3"",""22"":""a x #1 #3"",""23"":""a x #1 #3"",""24"":""a x #1 #3"",""25"":""a x #1 #3"",""26"":""a x #1 #3"",""27"":""a x #1 #3"",""28"":""a x #1 #3"",""29"":""a x #1 #3"",""30"":""a x #1 #3"",""31"":""a x #1 #3"",""32"":""a x #1 #3""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""Though present in early (2002) drafts of CSS3 Fonts, `font-smooth` has been removed from this specification and is currently not on the standard track."",""notes_by_num"":{""1"":""Webkit implements something similar with a different name `-webkit-font-smoothing` and different values: `none`, `antialiased` and `subpixel-antialiased`."",""2"":""Firefox implements something similar with a different name `-moz-osx-font-smoothing` and different values: `auto`, `inherit`, `unset`, `grayscale`."",""3"":""Works only on Mac OS X platform.""},""usage_perc_y"":0,""usage_perc_a"":45.05,""ucprefix"":false,""parent"":"""",""keywords"":""font smooth,font smoothing,-webkit-font-smoothing,-moz-osx-font-smoothing"",""ie_id"":"""",""chrome_id"":""""},""audiotracks"":{""title"":""Audio Tracks"",""description"":""Method of specifying and selecting between multiple audio tracks. Useful for providing audio descriptions, director's commentry, additional languages, alternative takes, etc."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist-and-videotracklist-objects"",""status"":""ls"",""links"":[{""url"":""https://msdn.microsoft.com/en-US/library/hh772483%28v=vs.85%29.aspx"",""title"":""MSDN article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":19.99,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""AudioTrack,AudioTrackList,media,multiple,selection"",""ie_id"":""audiotracks"",""chrome_id"":""5748496434987008""},""videotracks"":{""title"":""Video Tracks"",""description"":""Method of specifying and selecting between multiple video tracks. Useful for providing sign language tracks, burnt-in captions or subtitles, alternative camera angles, etc."",""spec"":""https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist-and-videotracklist-objects"",""status"":""ls"",""links"":[{""url"":""https://msdn.microsoft.com/en-US/library/dn806262%28v=vs.85%29.aspx"",""title"":""MSDN article""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":10.33,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""VideoTrack,VideoTrackList,media,multiple,selection"",""ie_id"":""videotracks"",""chrome_id"":""5748496434987008""},""contentsecuritypolicy2"":{""title"":""Content Security Policy Level 2"",""description"":""Mitigate cross-site scripting attacks by whitelisting allowed sources of script, style, and other resources. CSP 2 adds hash-source, nonce-source, and five new directives"",""spec"":""http://www.w3.org/TR/CSP/"",""status"":""cr"",""links"":[{""url"":""http://html5rocks.com/en/tutorials/security/content-security-policy/"",""title"":""HTML5Rocks article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""a #1"",""32"":""a #1"",""33"":""a #1"",""34"":""a #1"",""35"":""a #2"",""36"":""a #3"",""37"":""a #3"",""38"":""a #3"",""39"":""a #3"",""40"":""a #3"",""41"":""a #3"",""42"":""a #3""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""a #4"",""37"":""a #4"",""38"":""a #4"",""39"":""a #5"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""a #4"",""24"":""a #4"",""25"":""a #4"",""26"":""a #5"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""a #6""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Firefox 31-34 is missing the plugin-types, child-src, frame-ancestors, base-uri, and form-action directives."",""2"":""Firefox 35 is missing the plugin-types, child-src, frame-ancestors, and form-action directives."",""3"":""Firefox 36+ is missing the plugin-types and child-src directives."",""4"":""Chrome 36-38 & Opera 23-25 are missing the plugin-types, child-src, frame-ancestors, base-uri, and form-action directives."",""5"":""Chrome 39 and Opera 26 are missing the plugin-types, child-src, base-uri, and form-action directives."",""6"":""Firefox 38 on Android is missing the child-src directive.""},""usage_perc_y"":41.1,""usage_perc_a"":12.04,""ucprefix"":false,""parent"":"""",""keywords"":""csp,header,nonce,hash"",""ie_id"":"""",""chrome_id"":""4957003285790720""},""permissions-api"":{""title"":""Permissions API"",""description"":""High-level JavaScript API for checking and requesting permissions"",""spec"":""https://w3c.github.io/permissions/"",""status"":""unoff"",""links"":[{""url"":""http://updates.html5rocks.com/2015/04/permissions-api-for-the-web"",""title"":""Permission API samples and examples""}],""categories"":[""JS API""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":25.13,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""web-permissions,navigator.permissions"",""ie_id"":"""",""chrome_id"":""6376494003650560""},""http2"":{""title"":""HTTP/2 protocol"",""description"":""Networking protocol for low-latency transport of content over the web. Originally started out from the SPDY protocol, now standardized as HTTP version 2."",""spec"":""http://http2.github.io/http2-spec/index.html"",""status"":""other"",""links"":[{""url"":""http://en.wikipedia.org/wiki/HTTP/2"",""title"":""Wikipedia""},{""url"":""https://http2.akamai.com/demo"",""title"":""Browser support test""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""a #1""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""See also support for [the SPDY protocol](http://caniuse.com/#feat=spdy), precursor of HTTP2."",""notes_by_num"":{""1"":""Partial support in IE11 refers to being limited to Windows 10.""},""usage_perc_y"":48.92,""usage_perc_a"":7.6,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":""http2"",""chrome_id"":""5152586365665280""},""font-kerning"":{""title"":""CSS3 font-kerning"",""description"":""Controls the usage of the kerning information (spacing between letters) stored in the font. Note that this only affects OpenType fonts with kerning information, it has no effect on other fonts."",""spec"":""http://www.w3.org/TR/css3-fonts/#font-kerning-prop"",""status"":""cr"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-kerning"",""title"":""MDN article""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n d #1"",""25"":""n d #1"",""26"":""n d #1"",""27"":""n d #1"",""28"":""n d #1"",""29"":""n d #1"",""30"":""n d #1"",""31"":""n d #1"",""32"":""n d #1"",""33"":""n d #1"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""y x"",""30"":""y x"",""31"":""y x"",""32"":""y x"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""y x"",""7.1"":""y x"",""8"":""y x"",""9"":""y x""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""y x"",""17"":""y x"",""18"":""y x"",""19"":""y x"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""y x"",""8.1-8.4"":""y x"",""9"":""y x""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y x"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y x""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y x""}},""notes"":""Browsers with support for [font feature settings](http://caniuse.com/#feat=font-feature) can also set kerning value."",""notes_by_num"":{""1"":""Disabled by default, can be enabled using preference layout.css.font-features.enabled - defaulting to true on Nightly and Aurora only.""},""usage_perc_y"":72.42,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":"""",""ie_id"":"""",""chrome_id"":""""},""jpeg2000"":{""title"":""JPEG 2000 image format"",""description"":""JPEG 2000 (JP2) was created by the Joint Photographic Experts Group committee in 2000 with the intention of superseding their original discrete cosine transform-based JPEG standard (created in 1992) with a newly designed, wavelet-based method. It offers some advantages in image fidelity over standard JPEG."",""spec"":""http://www.itu.int/rec/T-REC-T.800-200208-I"",""status"":""other"",""links"":[],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""n"",""44"":""n"",""45"":""n"",""46"":""n"",""47"":""n""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y #1"",""5.1"":""y #1"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":"""",""notes_by_num"":{""1"":""Not supported by Safari for Windows""},""usage_perc_y"":10.84,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""jp2,jpeg2000,jpeg 2000"",""ie_id"":"""",""chrome_id"":""""},""upgradeinsecurerequests"":{""title"":""Upgrade Insecure Requests"",""description"":""Declare that browsers should transparently upgrade HTTP resources on a website to HTTPS."",""spec"":""http://www.w3.org/TR/upgrade-insecure-requests/"",""status"":""wd"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives#upgrade-insecure-requests"",""title"":""MDN article""},{""url"":""https://googlechrome.github.io/samples/csp-upgrade-insecure-requests/index.html"",""title"":""Demo Website""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""n"",""39"":""n"",""40"":""n"",""41"":""n"",""42"":""n"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""n""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""n""},""and_ff"":{""38"":""n""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The HTTP header is `Content-Security-Policy: upgrade-insecure-requests`. Alternatively, the HTML tag is `<meta http-equiv=\""Content-Security-Policy\"" content=\""upgrade-insecure-requests\"">`."",""notes_by_num"":{},""usage_perc_y"":25.13,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""security,header"",""ie_id"":""upgradeinsecureresourcerequests"",""chrome_id"":""6534575509471232""},""publickeypinning"":{""title"":""Public Key Pinning"",""description"":""Declare that a website's HTTPS certificate should only be treated as valid if the public key is contained in a specified list to prevent MITM attacks that use valid CA-issued certificates."",""spec"":""https://tools.ietf.org/html/rfc7469"",""status"":""other"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning"",""title"":""MDN article""}],""categories"":[""Other""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""n"",""21"":""n"",""22"":""n"",""23"":""n"",""24"":""n"",""25"":""n"",""26"":""n"",""27"":""n"",""28"":""n"",""29"":""n"",""30"":""n"",""31"":""n"",""32"":""n"",""33"":""n"",""34"":""n"",""35"":""n"",""36"":""n"",""37"":""n"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""n"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n"",""16"":""n"",""17"":""n"",""18"":""n"",""19"":""n"",""20"":""u"",""21"":""u"",""22"":""u"",""23"":""a"",""24"":""u"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""n"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n"",""4.4.3-4.4.4"":""n"",""40"":""y""},""bb"":{""7"":""n"",""10"":""n""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n""}},""notes"":""The HTTP header syntax is 'Public-Key-Pins: pin-sha256=\""base64==\""; max-age=expireTime [; includeSubdomains][; report-uri=\""reportURI\""]'."",""notes_by_num"":{},""usage_perc_y"":50.38,""usage_perc_a"":0.01,""ucprefix"":false,""parent"":"""",""keywords"":""pkp,hpkp,security,header"",""ie_id"":""publickeypinningextensionforhttp"",""chrome_id"":""""},""input-email-tel-url"":{""title"":""Email, telephone & URL input types"",""description"":""Text input fields intended for email addresses, telephone numbers or URLs. Particularly useful in combination with [form validation](http://caniuse.com/#feat=form-validation)"",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#telephone-state-%28type=tel%29"",""status"":""ls"",""links"":[{""url"":""http://www.htmlgoodies.com/html5/tutorials/whats-new-in-html5-forms-email-url-and-telephone-input-types.html#fbid=c9PEy7_9RZb"",""title"":""Article on usage""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""y"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""y"",""4.0-4.1"":""y"",""4.2-4.3"":""y"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""a #1"",""2.2"":""a #1"",""2.3"":""a #1"",""3"":""y"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""a #1"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""y""},""and_uc"":{""9.9"":""y""}},""notes"":""Browsers without support for these types will fall back to using the \""text\"" type."",""notes_by_num"":{""1"":""Does not provide an email-specific keyboard for email addresses""},""usage_perc_y"":89.05,""usage_perc_a"":0.17,""ucprefix"":false,""parent"":""forms"",""keywords"":""input[type=email],input[type=tel],input[type=url]"",""ie_id"":"""",""chrome_id"":""""},""fieldset-disabled"":{""title"":""disabled attribute of the fieldset element"",""description"":""Allows disabling all of the form control descendants of a fieldset via a `disabled` attribute on the fieldset element itself."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-fieldset-disabled"",""status"":""ls"",""links"":[{""url"":""http://output.jsbin.com/bibiqi/1/edit"",""title"":""JS Bin Testcase/Demo""}],""categories"":[""DOM"",""HTML5""],""stats"":{""ie"":{""5.5"":""u"",""6"":""a #1 #2"",""7"":""a #1 #2"",""8"":""a #1"",""9"":""a #1"",""10"":""a #1 #2"",""11"":""a #1 #2""},""edge"":{""1"":""y""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""u"",""5"":""u"",""6"":""u"",""7"":""u"",""8"":""u"",""9"":""u"",""10"":""u"",""11"":""u"",""12"":""u"",""13"":""u"",""14"":""u"",""15"":""u"",""16"":""u"",""17"":""u"",""18"":""u"",""19"":""u"",""20"":""u"",""21"":""u"",""22"":""u"",""23"":""u"",""24"":""u"",""25"":""u"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n"",""5"":""n"",""5.1"":""n"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""u"",""9.5-9.6"":""u"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""n"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""a #1 #2""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""n"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""y"",""11"":""a #2""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{""1"":""Text inputs that are descendants of a disabled fieldset appear disabled but the user can still interact with them. [See IE bug #962368.](https://connect.microsoft.com/IE/feedbackdetail/view/962368/can-still-edit-input-type-text-within-fieldset-disabled)"",""2"":""File inputs that are descendants of a disabled fieldset appear disabled but the user can still interact with them. [See IE bug #817488.](https://connect.microsoft.com/IE/feedbackdetail/view/817488)""},""usage_perc_y"":76.3,""usage_perc_a"":17.76,""ucprefix"":false,""parent"":"""",""keywords"":""HTMLFieldSetElement,fieldset,disabled"",""ie_id"":"""",""chrome_id"":""""},""font-variant-alternates"":{""title"":""CSS font-variant-alternates"",""description"":""Controls the usage of alternate glyphs associated to alternative names defined in @font-feature-values for certain types of OpenType fonts."",""spec"":""http://dev.w3.org/csswg/css3-fonts/#propdef-font-variant-alternates"",""status"":""unoff"",""links"":[{""url"":""https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-alternates"",""title"":""Mozilla Developer Network""}],""categories"":[""CSS3""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n #1"",""11"":""n #1""},""edge"":{""1"":""n #1""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""n #1"",""5"":""n #1"",""6"":""n #1"",""7"":""n #1"",""8"":""n #1"",""9"":""n #1"",""10"":""n #1"",""11"":""n #1"",""12"":""n #1"",""13"":""n #1"",""14"":""n #1"",""15"":""n #1"",""16"":""n #1"",""17"":""n #1"",""18"":""n #1"",""19"":""n #1"",""20"":""n #1"",""21"":""n #1"",""22"":""n #1"",""23"":""n #1"",""24"":""n d #2"",""25"":""n d #2"",""26"":""n d #2"",""27"":""n d #2"",""28"":""n d #2"",""29"":""n d #2"",""30"":""n d #2"",""31"":""n d #2"",""32"":""n d #2"",""33"":""n d #2"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n"",""12"":""n"",""13"":""n"",""14"":""n"",""15"":""n"",""16"":""n #1"",""17"":""n #1"",""18"":""n #1"",""19"":""n #1"",""20"":""n #1"",""21"":""n #1"",""22"":""n #1"",""23"":""n #1"",""24"":""n #1"",""25"":""n #1"",""26"":""n #1"",""27"":""n #1"",""28"":""n #1"",""29"":""n #1"",""30"":""n #1"",""31"":""n #1"",""32"":""n #1"",""33"":""n #1"",""34"":""n #1"",""35"":""n #1"",""36"":""n #1"",""37"":""n #1"",""38"":""n #1"",""39"":""n #1"",""40"":""n #1"",""41"":""n #1"",""42"":""n #1"",""43"":""n #1"",""44"":""n #1"",""45"":""n #1"",""46"":""n #1"",""47"":""n #1""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""n #1"",""5"":""n #1"",""5.1"":""n #1"",""6"":""n #1"",""6.1"":""n"",""7"":""n"",""7.1"":""n"",""8"":""n"",""9"":""n""},""opera"":{""9"":""n"",""9.5-9.6"":""n"",""10.0-10.1"":""n"",""10.5"":""n"",""10.6"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""11.6"":""n"",""12"":""n"",""12.1"":""n"",""15"":""n #1"",""16"":""n #1"",""17"":""n #1"",""18"":""n #1"",""19"":""n #1"",""20"":""n #1"",""21"":""n #1"",""22"":""n #1"",""23"":""n #1"",""24"":""n #1"",""25"":""n #1"",""26"":""n #1"",""27"":""n #1"",""28"":""n #1"",""29"":""n #1"",""30"":""n #1"",""31"":""n #1"",""32"":""n #1""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n #1"",""4.2-4.3"":""n #1"",""5.0-5.1"":""n #1"",""6.0-6.1"":""n #1"",""7.0-7.1"":""n"",""8"":""n"",""8.1-8.4"":""n"",""9"":""n""},""op_mini"":{""5.0-8.0"":""n""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""n"",""4"":""n"",""4.1"":""n"",""4.2-4.3"":""n"",""4.4"":""n #1"",""4.4.3-4.4.4"":""n #1"",""40"":""n #1""},""bb"":{""7"":""n"",""10"":""n #1""},""op_mob"":{""10"":""n"",""11"":""n"",""11.1"":""n"",""11.5"":""n"",""12"":""n"",""12.1"":""n"",""30"":""n #1""},""and_chr"":{""42"":""n #1""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""n #1""}},""notes"":"""",""notes_by_num"":{""1"":""Low-level syntax available in [font-feature-settings](http://caniuse.com/#feat=font-feature) property equivalent to OpenType features: salt, ss01 through ss20, cv01 through cv99, swsh, cswh, ornm, nalt"",""2"":""Experimental support available by enabling the layout.css.font-features.enabled flag""},""usage_perc_y"":8.62,""usage_perc_a"":0,""ucprefix"":false,""parent"":"""",""keywords"":""font-feature,font-feature-settings,font-variant"",""ie_id"":"""",""chrome_id"":""""},""form-attribute"":{""title"":""Form attribute"",""description"":""Attribute for associating input and submit buttons with a form."",""spec"":""https://html.spec.whatwg.org/multipage/forms.html#attr-fae-form"",""status"":""ls"",""links"":[{""url"":""http://www.w3.org/TR/html5/forms.html#attr-fae-form"",""title"":""Input attribute specification""},{""url"":""http://www.impressivewebs.com/html5-form-attribute/"",""title"":""Article on usage""},{""url"":""https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/7327649-add-support-for-the-form-attribute"",""title"":""Microsoft Edge feature request on UserVoice""}],""categories"":[""HTML5""],""stats"":{""ie"":{""5.5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""n"",""11"":""n""},""edge"":{""1"":""n""},""firefox"":{""2"":""n"",""3"":""n"",""3.5"":""n"",""3.6"":""n"",""4"":""y"",""5"":""y"",""6"":""y"",""7"":""y"",""8"":""y"",""9"":""y"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y""},""chrome"":{""4"":""n"",""5"":""n"",""6"":""n"",""7"":""n"",""8"":""n"",""9"":""n"",""10"":""y"",""11"":""y"",""12"":""y"",""13"":""y"",""14"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y"",""33"":""y"",""34"":""y"",""35"":""y"",""36"":""y"",""37"":""y"",""38"":""y"",""39"":""y"",""40"":""y"",""41"":""y"",""42"":""y"",""43"":""y"",""44"":""y"",""45"":""y"",""46"":""y"",""47"":""y""},""safari"":{""3.1"":""n"",""3.2"":""n"",""4"":""u"",""5"":""u"",""5.1"":""y"",""6"":""y"",""6.1"":""y"",""7"":""y"",""7.1"":""y"",""8"":""y"",""9"":""y""},""opera"":{""9"":""n"",""9.5-9.6"":""y"",""10.0-10.1"":""y"",""10.5"":""y"",""10.6"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""11.6"":""y"",""12"":""y"",""12.1"":""y"",""15"":""y"",""16"":""y"",""17"":""y"",""18"":""y"",""19"":""y"",""20"":""y"",""21"":""y"",""22"":""y"",""23"":""y"",""24"":""y"",""25"":""y"",""26"":""y"",""27"":""y"",""28"":""y"",""29"":""y"",""30"":""y"",""31"":""y"",""32"":""y""},""ios_saf"":{""3.2"":""n"",""4.0-4.1"":""n"",""4.2-4.3"":""n"",""5.0-5.1"":""y"",""6.0-6.1"":""y"",""7.0-7.1"":""y"",""8"":""y"",""8.1-8.4"":""y"",""9"":""y""},""op_mini"":{""5.0-8.0"":""y""},""android"":{""2.1"":""n"",""2.2"":""n"",""2.3"":""n"",""3"":""u"",""4"":""y"",""4.1"":""y"",""4.2-4.3"":""y"",""4.4"":""y"",""4.4.3-4.4.4"":""y"",""40"":""y""},""bb"":{""7"":""y"",""10"":""y""},""op_mob"":{""10"":""y"",""11"":""y"",""11.1"":""y"",""11.5"":""y"",""12"":""y"",""12.1"":""y"",""30"":""y""},""and_chr"":{""42"":""y""},""and_ff"":{""38"":""y""},""ie_mob"":{""10"":""n"",""11"":""n""},""and_uc"":{""9.9"":""y""}},""notes"":"""",""notes_by_num"":{},""usage_perc_y"":84.06,""usage_perc_a"":0,""ucprefix"":false,""parent"":""forms"",""keywords"":""form,attribute"",""ie_id"":"""",""chrome_id"":""""}}}"
f285c0b3dcf4a3db03c27653ec318affc61191cc,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
4ed33ad2efcf558986a4a6660071edec6dbe1026,2989263,   http://stackoverflow.com/questions/2989263/disable-auto-zoom-in-input-text-tag-safari-on-iphone */
efcc36bb0068dc2bc3f3d775ba2a9215bb0a86bd,1114465,"        ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
aa2792a8bfe4dbe419db82800744150179fcd60c,195363,    // http://stackoverflow.com/questions/195363/inserting-a-newline-into-a-pre-tag-ie-javascript
c9d7c1b914f0460f8e2849e8db0d8fdc52f8c79f,9716468,     * From http://stackoverflow.com/questions/9716468/is-there-any-function-like-isnumeric-in-javascript-to-validate-numbers
7b855904a3182b9aa991441f6e4d4f35107021ca,10835933,        # <http://stackoverflow.com/questions/10835933 /preserve-quotes-in-
36795a21a6347c9aba405ad108f0232cdf009d1f,2368811,    # taken from http://stackoverflow.com/questions/2368811/how-to-set-warning-level-in-cmake
bd9f85428d03f10827c8a16aba3857c7d0549d26,43090273,                <!--(https://stackoverflow.com/a/43090273)-->
8f3565f1a63bd3bbf96df98c1cdf16bef3ff2729,6122571, * From: https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript
b7a56e33de6f678a720cd9c9c13b0c25b4bdc93b,263416,            // credit: http://stackoverflow.com/a/263416/677735
ba95d586d7aacdcf7b3fdf07a392675069614e66,16523607,[cant-get-ruby-devkit-configuration-file-autogenerated-properly](http://stackoverflow.com/questions/16523607/cant-get-ruby-devkit-configuration-file-autogenerated-properly)    
ce3db188bfc95ed47f7602eafe987fee764d3e83,6491463,            // http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key
25e5a574f09e1003b83c778fa078774b1ecaafc0,3330919,        // http://stackoverflow.com/a/3330919)
4cdc2bcbcae40fae1bf803c32cea85fb4a6b66b8,14567586,# http://stackoverflow.com/questions/14567586/token-authentication-for-restful-api-should-the-token-be-periodically-changed
4b43e3118b26f0884fe5c4d51f897747fac62a81,10525600,  //See http://stackoverflow.com/questions/10525600/what-is-the-purpose-of-fn-foo-constructor-foo-in-twitter-bootstrap-js
ba422d228a19ac076e1747817874e7b3aad5a0d7,11483060, * (see http://stackoverflow.com/questions/11483060/stdnext-permutation-implementation-explanation)
fd25392cd74d0aaaaa90d76fbee97f944f3e29c7,1554100,// http://stackoverflow.com/questions/1554100/parsing-javascript-not-json-in-php
c7b160252e74dde5563e5dae93ecee90f46e9423,24573598,    //next two methods adopted from http://stackoverflow.com/questions/24573598/write-arraylist-of-custom-objects-to-file
1dcb32866eb020b79db1ab74a72402fcefb5d04d,12931369,        // See Click everywhere but here event http://stackoverflow.com/questions/12931369
c271883d7958d6f261eaa0cd17e61c186f6a9228,766809,            // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
e1cff4af4c0afe61aaf8216d47cbfed1fbcd11e0,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
c3d0e0cc130a2ae0709278d34c78b82f4fbdc49a,214657,    src: http://stackoverflow.com/a/214657/5045925
23b069420547e96e0c62d2f5350db6af2de6e45d,21159197,- How do you resume a paused NSProgress instance? https://stackoverflow.com/questions/21159197/nsprogress-resume-after-calling-pause
d4b889e833ecf95621e16b338ac89babd5e92ff1,2188199,      // http://stackoverflow.com/questions/2188199/bash-double-or-single-bracket-parentheses-curly-braces
6ec2e3abefa3ca7c62a85add2c2a0dec1b30fc60,4050444,	 * Adapted from http://stackoverflow.com/questions/4049856/replace-phps-realpath/4050444#4050444 as a replacement for PHP's realpath
23202ce2e2a455c24fe56f7db362831b7cfe1c67,27399688,// src: http://stackoverflow.com/a/27399688/930450
5b68299917420598680fdee2f83c2f6c46680bcb,5988686,    from : http://stackoverflow.com/questions/5988686/creating-a-3d-sphere-in-opengl-using-visual-c
2270158c152526684f5e482559bc30d525a2f3f9,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
776ced4da95f65906381eae5c21af3f473519150,46352119,}; // borrowed from https://stackoverflow.com/a/46352119
9d1a79b7563708dd78e81cf296b0141ace57fe2b,52312071,            # https://stackoverflow.com/questions/52312070/how-to-modify-a-file-under-src-python-and-run-it-without-rebuilding-in-gem5/52312071#52312071
8dac45efc7724e382e3d668e7e4d371c022c6c71,36796281,Be aware of the [difference between default and named exports](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281). It is a common source of mistakes.
fe8714edd6851d1d8071f8aae2115ccc71454d1d,3330919,        // http://stackoverflow.com/a/3330919)
623a55ac27be64cf06d407228c69cc299d6985c6,13005444,  # and also as per http://stackoverflow.com/questions/13005444/testing-views-that-use-devise-with-rspec
1dcd51489d6ff7301e6c713785e6e092acf7eee4,13241475,/* insert svg line breaks: taken from http://stackoverflow.com/questions/13241475/how-do-i-include-newlines-in-labels-in-d3-charts */
c4a3d4cd988dc3def17345ac4e661e88ae40adc9,34133809,  // http://stackoverflow.com/questions/34133808/webpack-ots-parsing-error-loading-fonts/34133809#34133809
f5356d5085462f68bfadf9e145b7feefaa218a80,50127959,[^2]: [2] [win32.Dispatch vs win32.gencache in Python. What are the pros and cons?](https://stackoverflow.com/questions/50127959/win32-dispatch-vs-win32-gencache-in-python-what-are-the-pros-and-cons)
7fb0ca4cc8781311cc2f720a3de38c572f86839c,1444562,    // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object
dafabbb1613ade634715dd88c9d53054698affff,846221,				/* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */
3416cae6b80432b3a721deb8ed47da39e89013a5,3330919,        // http://stackoverflow.com/a/3330919)
a97c33687cfb66085cef3e45d61a03731e6002c9,1444562,        // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object
19cf9ef885f62dddb60daefa7ed76f4a89f39133,14070372,            // http://stackoverflow.com/questions/14070311/why-is-graphics-drawimage-cropping-part-of-my-image/14070372#14070372
4345e8402bf12445385e0ee2203cee67b1cbae85,38037760,    // https://stackoverflow.com/questions/38037760/how-to-set-iframe-src-in-angular-2-without-causing-unsafe-value-exception
02ffcb06da4d6424186a9770db76246a474c058f,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
0c9566ff3de57df42cfe3f3cbb842ffdc8568584,5499078,    //taken from http://stackoverflow.com/questions/5499078/fastest-method-to-escape-html-tags-as-html-entities
d019ae9bd019468c6e05a78ac26565111f74f736,657447,""" http://stackoverflow.com/questions/657447/vim-clear-last-search-highlighting"
6f338bbce805b3ce025083b488dd60ee87132747,41511598,            CommonOpenFileDialog dialog = new CommonOpenFileDialog(); //https://stackoverflow.com/a/41511598/6073998
1a485372f1e4bcd09feb199f8273f4d10bd2f248,3330919,        // http://stackoverflow.com/a/3330919)
1993e413734ab0d283e29e70b99d9f87b78471ed,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
d98a30e6014ebd6aff3fdf9721c14ab79505c759,105034,     * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
c9217e51055e9ac4d91d0e10b0ed6c36df74b9bd,9016307,		_forceReflow:			function (node) {			// http://stackoverflow.com/questions/9016307/force-reflow-in-css-transitions-in-bootstrap
a712861bd3b49fb14d5cfaade509a835c275f9a6,10046972,				if(!/^2|1223/.test(xhr.status)){ // https://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request
f44217f37278de72a6c9a6ca1b39c912a5f457b4,9510206,                // https://stackoverflow.com/a/9510206
6429c9ed1e409f8ebdde700f1f5656fa11cbde9d,846487,"            <seealso cref=""!:http://stackoverflow.com/questions/846487/how-to-get-uri-escapedatastring-to-comply-with-rfc-3986""/>"
e93c5f53fbf228dc05fc5e86a1443afb1658872f,661018,* [Pushing an existing git repository to SVN](http://stackoverflow.com/questions/661018/pushing-an-existing-git-repository-to-svn)
aca98304406607107c97bdeff8dd0d9cb91124a6,3037598,						// See also http://stackoverflow.com/questions/3037598/how-to-get-around-the-jslint-error-dont-make-functions-within-a-loop
af229dbab80a8f1985ee0d57beaebe741411a9eb,22670407,This is mentioned at: https://stackoverflow.com/questions/22670257/getting-ram-size-in-c-linux-non-precise-result/22670407#22670407
e4a5c7f061bb1f1dd3c721ec9288b4deb5691f5e,18622508,"    <p>Embedding YouTube videos in modals requires additional JavaScript not in Bootstrap to automatically stop playback and more. <a href=""http://stackoverflow.com/questions/18622508/bootstrap-3-and-youtube-in-modal"">See this helpful Stack Overflow post</a> for more information.</p>"
6af2d1396ddcf90bf075e6bfc9124e31ebcb37dd,3902635,          //http://stackoverflow.com/questions/3902635/how-does-one-capture-a-macs-command-key-via-javascript
9b33b992792b2b3d7410abfa213336aa3dd092a7,37245658,//					// http://stackoverflow.com/a/37245658
c0cc80f6b6ce44175aa92c97b5765a013797ed57,3845423,    # cf. http://stackoverflow.com/questions/3845423/remove-empty-strings-from-a-list-of-strings
437e07bf8609f47bf7c9dcb9bf131ed66136dab8,22677955,--  see: https://stackoverflow.com/questions/22677463/how-to-merge-all-integer-arrays-from-all-records-into-single-array-in-postgres/22677955#22677955
978dbba30e3707546f9f2ee8fe148194201322b6,202605 13210194,"{""version"":3,""sources"":[""webpack://libphonenumber/webpack/universalModuleDefinition"",""webpack://libphonenumber/webpack/bootstrap"",""webpack://libphonenumber/./es6/common.js"",""webpack://libphonenumber/./es6/metadata.js"",""webpack://libphonenumber/./es6/parse.js"",""webpack://libphonenumber/./es6/types.js"",""webpack://libphonenumber/./es6/RFC3966.js"",""webpack://libphonenumber/./es6/format.js"",""webpack://libphonenumber/./es6/IDD.js"",""webpack://libphonenumber/./es6/AsYouType.js"",""webpack://libphonenumber/./es6/getCountryCallingCode.js"",""webpack://libphonenumber/./es6/utf-8.common.js"",""webpack://libphonenumber/./es6/findNumbers.common.js"",""webpack://libphonenumber/./es6/findPhoneNumbers.js"",""webpack://libphonenumber/./es6/validate.js"",""webpack://libphonenumber/./node_modules/semver-compare/index.js"",""webpack://libphonenumber/./index.es6.js""],""names"":[""root"",""factory"",""exports"",""module"",""define"",""amd"",""window"",""installedModules"",""__webpack_require__"",""moduleId"",""i"",""l"",""modules"",""call"",""m"",""c"",""d"",""name"",""getter"",""o"",""Object"",""defineProperty"",""configurable"",""enumerable"",""get"",""r"",""value"",""n"",""__esModule"",""object"",""property"",""prototype"",""hasOwnProperty"",""p"",""s"",""parse_phone_number_digits"",""parse_national_number_and_country_calling_code"",""number"",""country"",""metadata"",""numberWithoutIDD"",""_IDD"",""stripIDDPrefix"",""MAX_LENGTH_COUNTRY_CODE"",""length"",""countryCallingCode"",""slice"",""countryCallingCodes"",""matches_entirely"",""text"",""arguments"",""undefined"",""regular_expression"",""matched_groups"",""match"",""create_extension_pattern"",""purpose"",""single_extension_characters"",""RFC3966_EXTN_PREFIX"",""CAPTURING_EXTN_DIGITS"",""VALID_DIGITS"",""WHITESPACE"",""PLUS_CHARS"",""VALID_PUNCTUATION"",""LEADING_PLUS_CHARS_PATTERN"",""RegExp"",""MAX_LENGTH_FOR_NSN"",""DIGIT_MAPPINGS"",""0"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""０"",""１"",""２"",""３"",""４"",""５"",""６"",""７"",""８"",""９"",""٠"",""١"",""٢"",""٣"",""٤"",""٥"",""٦"",""٧"",""٨"",""٩"",""۰"",""۱"",""۲"",""۳"",""۴"",""۵"",""۶"",""۷"",""۸"",""۹"",""test"",""replacements"",""replaced"",""_iterator"",""split"",""_isArray"",""Array"",""isArray"",""_i"",""Symbol"",""iterator"",""_ref"",""next"",""done"",""character"",""replacement"",""toUpperCase"",""drop_and_substitute_characters"",""validateMetadata"",""getExtPrefix"",""Metadata"",""ext"",""_semverCompare"",""_typeof"",""_typeof2"",""obj"",""constructor"",""_createClass"",""defineProperties"",""target"",""props"",""descriptor"",""writable"",""key"",""Constructor"",""protoProps"",""staticProps"",""_classCallCheck"",""instance"",""TypeError"",""V3"",""this"",""v1"",""version"",""v2"",""_semverCompare2"",""default"",""v3"",""countries"",""_country"",""country_metadata"",""hasCountry"",""Error"",""_this"",""formats"",""map"",""_"",""Format"",""nationalPrefix"",""types"",""_type"",""hasTypes"",""getType"",""Type"",""country_phone_code_to_countries"",""country_calling_codes"",""country_calling_code"",""format"",""_format"",""nationalPrefixFormattingRule"",""nationalPrefixIsOptionalWhenFormatting"",""usesNationalPrefix"",""replace"",""type"",""possibleLengths"",""is_object"",""keys"",""join"",""type_of"",""arg_1"",""arg_2"",""arg_3"",""arg_4"",""_sort_out_arguments"",""options"",""_extends"",""defaultCountry"",""default_options"",""_metadata2"",""sort_out_arguments"",""_parse_input"",""indexOf"",""_RFC"",""parseRFC3966"",""extract_formatted_phone_number"",""is_viable_phone_number"",""with_extension_stripped"",""start"",""search"",""EXTN_PATTERN"",""number_without_extension"",""matches"",""strip_extension"",""parse_input"",""formatted_phone_number"",""_parse_phone_number"",""default_country"",""_parse_national_numbe"",""_common"",""find_country_code"",""chooseCountryByCountryCallingCode"",""_parse_national_numbe2"",""national_number"",""carrier_code"",""_strip_national_prefi"",""strip_national_prefix_and_carrier_code"",""potential_national_number"",""carrierCode"",""_types"",""check_number_length_for_type"",""nationalNumberPattern"",""parse_national_number"",""parse_phone_number"",""selectedCountry"",""extended"",""MIN_LENGTH_FOR_NSN"",""valid"",""result"",""phone"",""possible"",""is_international"",""is_possible_number"",""assign"",""source"",""MAX_INPUT_STRING_LENGTH"",""EXTN_PATTERNS_FOR_PARSING"",""MIN_LENGTH_PHONE_NUMBER_PATTERN"",""VALID_PHONE_NUMBER"",""VALID_PHONE_NUMBER_PATTERN"",""PHONE_NUMBER_START_PATTERN"",""AFTER_PHONE_NUMBER_END_PATTERN"",""starts_at"",""nationalPrefixForParsing"",""national_prefix_pattern"",""national_prefix_matcher"",""exec"",""national_significant_number"",""captured_groups_count"",""nationalPrefixTransformRule"",""national_phone_number"",""possible_countries"",""leadingDigits"",""_types2"",""_find_country_code"",""input"",""is_of_type"",""pattern"",""non_fixed_line_types"",""type_info"",""possible_lengths"",""test_number_length_for_type"",""mobile_type"",""merge_arrays"",""actual_length"",""minimum_length"",""_parse"",""_parse2"",""a"",""b"",""merged"",""_iterator2"",""_isArray2"",""_i2"",""_ref2"",""element"",""push"",""sort"",""part"",""_part$split"",""_part$split2"",""_slicedToArray"",""formatRFC3966"",""arr"",""_arr"",""_n"",""_d"",""_e"",""_s"",""err"",""sliceIterator"",""arg_5"",""format_type"",""defaultOptions"",""format_national_number"",""add_extension"",""formatExtension"",""fromCountry"",""IDDPrefix"",""getIDDPrefix"",""humanReadable"",""formattedForSameCountryCallingCode"",""formatIDDSameCountryCallingCodeNumber"",""format_national_number_using_format"",""choose_format_for_number"",""local_to_international_style"",""_metadata"",""extension"",""FIRST_GROUP_PATTERN"",""international"",""enforce_national_prefix"",""format_pattern_matcher"",""national_prefix_may_be_omitted"",""formatted_number"",""internationalFormat"",""format_as"",""available_formats"",""leadingDigitsPatterns"",""last_leading_digits_pattern"",""local"",""trim"",""toCountryCallingCode"",""toCountryMetadata"",""fromCountryMetadata"",""countryMetadata"",""SINGLE_IDD_PREFIX"",""defaultIDDPrefix"",""IDDPrefixPattern"",""matchedGroups"",""CAPTURING_DIGIT_PATTERN"",""close_dangling_braces"",""count_occurences"",""repeat"",""DUMMY_DIGIT_MATCHER"",""LONGEST_DUMMY_PHONE_NUMBER"",""DIGIT_PLACEHOLDER"",""DIGIT_PLACEHOLDER_MATCHER"",""DIGIT_PLACEHOLDER_MATCHER_GLOBAL"",""CHARACTER_CLASS_PATTERN"",""STANDALONE_DIGIT_PATTERN"",""ELIGIBLE_FORMAT_PATTERN"",""VALID_INCOMPLETE_PHONE_NUMBER"",""VALID_INCOMPLETE_PHONE_NUMBER_PATTERN"",""AsYouType"",""country_code"",""reset"",""extracted_number"",""process_input"",""current_output"",""parsed_input"",""reset_countriness"",""determine_the_country"",""extract_country_calling_code"",""initialize_phone_number_formats_for_this_country_calling_code"",""reset_format"",""previous_national_prefix"",""national_prefix"",""extract_national_prefix"",""matching_formats"",""should_format"",""format_as_non_formatted_number"",""match_formats_by_leading_digits"",""formatted_national_phone_number"",""format_national_phone_number"",""full_phone_number"",""template"",""next_digits"",""national_number_formatted_with_previous_format"",""chosen_format"",""format_next_national_number_digits"",""attempt_to_format_complete_phone_number"",""choose_another_format"",""reformat_national_number"",""reset_country"",""partially_populated_template"",""last_match_position"",""filter"",""leading_digits"",""index_of_leading_digits_pattern"",""leading_digits_pattern_count"",""leading_digits_pattern_index"",""Math"",""min"",""leading_digits_pattern"",""is_format_applicable"",""create_formatting_template"",""full_number"",""formatted_national_number"",""national_number_rule"",""nationalPrefixIsMandatoryWhenFormatting"",""get_template_for_phone_number_format_pattern"",""number_pattern"",""dummy_phone_number_matching_format_pattern"",""number_format"",""get_format_format"",""strict_pattern"",""national_number_dummy_digits"",""digits"",""_iterator3"",""_isArray3"",""_i3"",""_ref3"",""digit"",""cut_before"",""retained_template"",""dangling_braces"",""symbol"",""string"",""count"",""_iterator4"",""_isArray4"",""_i4"",""_ref4"",""times"",""isLatinLetter"",""letter"",""pL_regexp"",""pMn_regexp"",""latinLetterRegexp"",""isInvalidPunctuationSymbol"",""pSc_regexp"",""_pL"",""isValidCandidate"",""candidate"",""offset"",""LEAD_CLASS_LEADING"",""previousChar"",""_utf"",""lastCharIndex"",""nextChar"",""OPENING_PARENS"",""LEAD_CLASS"",""CLOSING_PARENS"",""PhoneNumberSearch"",""phones"",""hasNext"",""searchPhoneNumbers"",""_sort_out_arguments2"",""_defineProperty"",""_findNumbers"",""WHITESPACE_IN_THE_BEGINNING_PATTERN"",""WHITESPACE_IN_THE_END_PATTERN"",""state"",""regexp"",""startsAt"",""index"",""endsAt"",""find"",""last_match"",""pa"",""pb"",""na"",""Number"",""nb"",""isNaN"",""parseNumber"",""parameters"",""_metadataMin2"",""apply"",""parse"",""formatNumber"",""_format2"",""getNumberType"",""isValidNumber"",""_validate2"",""findPhoneNumbers"",""_findPhoneNumbers2"",""_findPhoneNumbers"",""_validate"",""_getCountryCallingCode"",""_AsYouType"",""getCountryCallingCode"",""getPhoneCode"",""getPhoneCodeCustom"",""_getCountryCallingCode2"",""_AsYouType2"",""create""],""mappings"":""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"",""file"":""libphonenumber-js.min.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\""libphonenumber\"", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""libphonenumber\""] = factory();\n\telse\n\t\troot[\""libphonenumber\""] = factory();\n})(window, function() {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 15);\n"",""import { stripIDDPrefix } from './IDD';\n\n// `DASHES` will be right after the opening square bracket of the \""character class\""\nvar DASHES = '-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D';\nvar SLASHES = '\\uFF0F/';\nvar DOTS = '\\uFF0E.';\nexport var WHITESPACE = ' \\xA0\\xAD\\u200B\\u2060\\u3000';\nvar BRACKETS = '()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]';\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = '~\\u2053\\u223C\\uFF5E';\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = '0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9';\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = '' + DASHES + SLASHES + DOTS + WHITESPACE + BRACKETS + TILDES;\n\nexport var PLUS_CHARS = '+\\uFF0B';\nvar LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+');\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nexport var MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nexport var MAX_LENGTH_COUNTRY_CODE = 3;\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGIT_MAPPINGS = {\n\t'0': '0',\n\t'1': '1',\n\t'2': '2',\n\t'3': '3',\n\t'4': '4',\n\t'5': '5',\n\t'6': '6',\n\t'7': '7',\n\t'8': '8',\n\t'9': '9',\n\t'\\uFF10': '0', // Fullwidth digit 0\n\t'\\uFF11': '1', // Fullwidth digit 1\n\t'\\uFF12': '2', // Fullwidth digit 2\n\t'\\uFF13': '3', // Fullwidth digit 3\n\t'\\uFF14': '4', // Fullwidth digit 4\n\t'\\uFF15': '5', // Fullwidth digit 5\n\t'\\uFF16': '6', // Fullwidth digit 6\n\t'\\uFF17': '7', // Fullwidth digit 7\n\t'\\uFF18': '8', // Fullwidth digit 8\n\t'\\uFF19': '9', // Fullwidth digit 9\n\t'\\u0660': '0', // Arabic-indic digit 0\n\t'\\u0661': '1', // Arabic-indic digit 1\n\t'\\u0662': '2', // Arabic-indic digit 2\n\t'\\u0663': '3', // Arabic-indic digit 3\n\t'\\u0664': '4', // Arabic-indic digit 4\n\t'\\u0665': '5', // Arabic-indic digit 5\n\t'\\u0666': '6', // Arabic-indic digit 6\n\t'\\u0667': '7', // Arabic-indic digit 7\n\t'\\u0668': '8', // Arabic-indic digit 8\n\t'\\u0669': '9', // Arabic-indic digit 9\n\t'\\u06F0': '0', // Eastern-Arabic digit 0\n\t'\\u06F1': '1', // Eastern-Arabic digit 1\n\t'\\u06F2': '2', // Eastern-Arabic digit 2\n\t'\\u06F3': '3', // Eastern-Arabic digit 3\n\t'\\u06F4': '4', // Eastern-Arabic digit 4\n\t'\\u06F5': '5', // Eastern-Arabic digit 5\n\t'\\u06F6': '6', // Eastern-Arabic digit 6\n\t'\\u06F7': '7', // Eastern-Arabic digit 7\n\t'\\u06F8': '8', // Eastern-Arabic digit 8\n\t'\\u06F9': '9' // Eastern-Arabic digit 9\n\n\n\t/**\r\n  * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n  * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n  *\r\n  * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n  *\r\n  * @param  {string} number\r\n  * @return {string}\r\n  */\n};export function parse_phone_number_digits(number) {\n\treturn (LEADING_PLUS_CHARS_PATTERN.test(number) ? '+' : '') + drop_and_substitute_characters(number, DIGIT_MAPPINGS);\n}\n\n// Parses a formatted phone number\n// and returns `{ country_calling_code, number }`\n// where `number` is the national (significant) phone number.\n//\n// (aka `maybeExtractCountryPhoneCode`)\n//\nexport function parse_national_number_and_country_calling_code(number, country, metadata) {\n\tnumber = parse_phone_number_digits(number);\n\n\tif (!number) {\n\t\treturn {};\n\t}\n\n\t// If this is not an international phone number,\n\t// then don't extract country phone code.\n\tif (number[0] !== '+') {\n\t\t// Convert an \""out-of-country\"" dialing phone number\n\t\t// to a proper international phone number.\n\t\tvar numberWithoutIDD = stripIDDPrefix(number, country, metadata.metadata);\n\n\t\t// If an IDD prefix was stripped then\n\t\t// convert the number to international one.\n\t\tif (numberWithoutIDD && numberWithoutIDD !== number) {\n\t\t\tnumber = '+' + numberWithoutIDD;\n\t\t} else {\n\t\t\treturn { number: number };\n\t\t}\n\t}\n\n\t// Fast abortion: country codes do not begin with a '0'\n\tif (number[1] === '0') {\n\t\treturn {};\n\t}\n\n\t// The thing with country phone codes\n\t// is that they are orthogonal to each other\n\t// i.e. there's no such country phone code A\n\t// for which country phone code B exists\n\t// where B starts with A.\n\t// Therefore, while scanning digits,\n\t// if a valid country code is found,\n\t// that means that it is the country code.\n\t//\n\tvar i = 2;\n\twhile (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n\t\tvar countryCallingCode = number.slice(1, i);\n\n\t\tif (metadata.countryCallingCodes()[countryCallingCode]) {\n\t\t\treturn {\n\t\t\t\tcountryCallingCode: countryCallingCode,\n\t\t\t\tnumber: number.slice(i)\n\t\t\t};\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn {};\n}\n\n// Checks whether the entire input sequence can be matched\n// against the regular expression.\nexport function matches_entirely() {\n\tvar text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar regular_expression = arguments[1];\n\n\tif (typeof regular_expression === 'string') {\n\t\tregular_expression = '^(?:' + regular_expression + ')$';\n\t}\n\n\tvar matched_groups = text.match(regular_expression);\n\treturn matched_groups !== null && matched_groups[0].length === text.length;\n}\n\n// For any character not being part of `replacements`\n// it is removed from the phone number.\nfunction drop_and_substitute_characters(text, replacements) {\n\tvar replaced = '';\n\n\t// Using `.split('')` to iterate through a string here\n\t// to avoid requiring `Symbol.iterator` polyfill.\n\t// `.split('')` is generally not safe for Unicode,\n\t// but in this particular case for `digits` it is safe.\n\t// for (const character of text)\n\tfor (var _iterator = text.split(''), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar character = _ref;\n\n\t\tvar replacement = replacements[character.toUpperCase()];\n\n\t\tif (replacement) {\n\t\t\treplaced += replacement;\n\t\t}\n\t}\n\n\treturn replaced;\n}\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n// Pattern to capture digits used in an extension.\n// Places a maximum length of '7' for an extension.\nvar CAPTURING_EXTN_DIGITS = '([' + VALID_DIGITS + ']{1,7})';\n\n/**\r\n * Regexp of all possible ways to write extensions, for use when parsing. This\r\n * will be run as a case-insensitive regexp match. Wide character versions are\r\n * also provided after each ASCII version. There are three regular expressions\r\n * here. The first covers RFC 3966 format, where the extension is added using\r\n * ';ext='. The second more generic one starts with optional white space and\r\n * ends with an optional full stop (.), followed by zero or more spaces/tabs\r\n * /commas and then the numbers themselves. The other one covers the special\r\n * case of American numbers where the extension is written with a hash at the\r\n * end, such as '- 503#'. Note that the only capturing groups should be around\r\n * the digits that you want to capture as part of the extension, or else parsing\r\n * will fail! We allow two options for representing the accented o - the\r\n * character itself, and one in the unicode decomposed form with the combining\r\n * acute accent.\r\n */\nexport function create_extension_pattern(purpose) {\n\t// One-character symbols that can be used to indicate an extension.\n\tvar single_extension_characters = 'x\\uFF58#\\uFF03~\\uFF5E';\n\n\tswitch (purpose) {\n\t\t// For parsing, we are slightly more lenient in our interpretation than for matching. Here we\n\t\t// allow \""comma\"" and \""semicolon\"" as possible extension indicators. When matching, these are\n\t\tcase 'parsing':\n\t\t\tsingle_extension_characters = ',;' + single_extension_characters;\n\t}\n\n\treturn RFC3966_EXTN_PREFIX + CAPTURING_EXTN_DIGITS + '|' + '[ \\xA0\\\\t,]*' + '(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|' + '[' + single_extension_characters + ']|int|anexo|\\uFF49\\uFF4E\\uFF54)' + '[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*' + CAPTURING_EXTN_DIGITS + '#?|' + '[- ]+([' + VALID_DIGITS + ']{1,5})#';\n}\n//# sourceMappingURL=common.js.map"",""var _typeof = typeof Symbol === \""function\"" && typeof Symbol.iterator === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \""function\"" && obj.constructor === Symbol && obj !== Symbol.prototype ? \""symbol\"" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\""value\"" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\""Cannot call a class as a function\""); } }\n\nimport compare from 'semver-compare';\n\n// Added \""possibleLengths\"" and renamed\n// \""country_phone_code_to_countries\"" to \""country_calling_codes\"".\nvar V2 = '1.0.18';\n\n// Added \""idd_prefix\"" and \""default_idd_prefix\"".\nvar V3 = '1.2.0';\n\nvar DEFAULT_EXT_PREFIX = ' ext. ';\n\nvar Metadata = function () {\n\tfunction Metadata(metadata) {\n\t\t_classCallCheck(this, Metadata);\n\n\t\tvalidateMetadata(metadata);\n\n\t\tthis.metadata = metadata;\n\n\t\tthis.v1 = !metadata.version;\n\t\tthis.v2 = metadata.version !== undefined && compare(metadata.version, V3) === -1;\n\t\tthis.v3 = metadata.version !== undefined; // && compare(metadata.version, V4) === -1\n\t}\n\n\t_createClass(Metadata, [{\n\t\tkey: 'hasCountry',\n\t\tvalue: function hasCountry(country) {\n\t\t\treturn this.metadata.countries[country] !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'country',\n\t\tvalue: function country(_country) {\n\t\t\tif (!_country) {\n\t\t\t\tthis._country = undefined;\n\t\t\t\tthis.country_metadata = undefined;\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!this.hasCountry(_country)) {\n\t\t\t\tthrow new Error('Unknown country: ' + _country);\n\t\t\t}\n\n\t\t\tthis._country = _country;\n\t\t\tthis.country_metadata = this.metadata.countries[_country];\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'countryCallingCode',\n\t\tvalue: function countryCallingCode() {\n\t\t\treturn this.country_metadata[0];\n\t\t}\n\t}, {\n\t\tkey: 'IDDPrefix',\n\t\tvalue: function IDDPrefix() {\n\t\t\tif (this.v1 || this.v2) return;\n\t\t\treturn this.country_metadata[1];\n\t\t}\n\t}, {\n\t\tkey: 'defaultIDDPrefix',\n\t\tvalue: function defaultIDDPrefix() {\n\t\t\tif (this.v1 || this.v2) return;\n\t\t\treturn this.country_metadata[12];\n\t\t}\n\t}, {\n\t\tkey: 'nationalNumberPattern',\n\t\tvalue: function nationalNumberPattern() {\n\t\t\tif (this.v1 || this.v2) return this.country_metadata[1];\n\t\t\treturn this.country_metadata[2];\n\t\t}\n\t}, {\n\t\tkey: 'possibleLengths',\n\t\tvalue: function possibleLengths() {\n\t\t\tif (this.v1) return;\n\t\t\treturn this.country_metadata[this.v2 ? 2 : 3];\n\t\t}\n\t}, {\n\t\tkey: 'formats',\n\t\tvalue: function formats() {\n\t\t\tvar _this = this;\n\n\t\t\tvar formats = this.country_metadata[this.v1 ? 2 : this.v2 ? 3 : 4] || [];\n\t\t\treturn formats.map(function (_) {\n\t\t\t\treturn new Format(_, _this);\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefix',\n\t\tvalue: function nationalPrefix() {\n\t\t\treturn this.country_metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixFormattingRule',\n\t\tvalue: function nationalPrefixFormattingRule() {\n\t\t\treturn this.country_metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixForParsing',\n\t\tvalue: function nationalPrefixForParsing() {\n\t\t\t// If `national_prefix_for_parsing` is not set explicitly,\n\t\t\t// then infer it from `national_prefix` (if any)\n\t\t\treturn this.country_metadata[this.v1 ? 5 : this.v2 ? 6 : 7] || this.nationalPrefix();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixTransformRule',\n\t\tvalue: function nationalPrefixTransformRule() {\n\t\t\treturn this.country_metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsOptionalWhenFormatting',\n\t\tvalue: function nationalPrefixIsOptionalWhenFormatting() {\n\t\t\treturn !!this.country_metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n\t\t}\n\t}, {\n\t\tkey: 'leadingDigits',\n\t\tvalue: function leadingDigits() {\n\t\t\treturn this.country_metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n\t\t}\n\t}, {\n\t\tkey: 'types',\n\t\tvalue: function types() {\n\t\t\treturn this.country_metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n\t\t}\n\t}, {\n\t\tkey: 'hasTypes',\n\t\tvalue: function hasTypes() {\n\t\t\t// Versions 1.2.0 - 1.2.4: can be `[]`.\n\t\t\tif (this.types() && this.types().length === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Versions <= 1.2.4: can be `undefined`.\n\t\t\t// Version >= 1.2.5: can be `0`.\n\t\t\treturn !!this.types();\n\t\t}\n\t}, {\n\t\tkey: 'type',\n\t\tvalue: function type(_type) {\n\t\t\tif (this.hasTypes() && getType(this.types(), _type)) {\n\t\t\t\treturn new Type(getType(this.types(), _type), this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'ext',\n\t\tvalue: function ext() {\n\t\t\tif (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n\t\t\treturn this.country_metadata[13] || DEFAULT_EXT_PREFIX;\n\t\t}\n\t}, {\n\t\tkey: 'countryCallingCodes',\n\t\tvalue: function countryCallingCodes() {\n\t\t\tif (this.v1) return this.metadata.country_phone_code_to_countries;\n\t\t\treturn this.metadata.country_calling_codes;\n\t\t}\n\n\t\t// Formatting information for regions which share\n\t\t// a country calling code is contained by only one region\n\t\t// for performance reasons. For example, for NANPA region\n\t\t// (\""North American Numbering Plan Administration\"",\n\t\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t\t// it will be contained in the metadata for `US`.\n\t\t//\n\t\t// `country_calling_code` is always valid.\n\t\t// But the actual country may not necessarily be part of the metadata.\n\t\t//\n\n\t}, {\n\t\tkey: 'chooseCountryByCountryCallingCode',\n\t\tvalue: function chooseCountryByCountryCallingCode(country_calling_code) {\n\t\t\tvar country = this.countryCallingCodes()[country_calling_code][0];\n\n\t\t\t// Do not want to test this case.\n\t\t\t// (custom metadata, not all countries).\n\t\t\t/* istanbul ignore else */\n\t\t\tif (this.hasCountry(country)) {\n\t\t\t\tthis.country(country);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'selectedCountry',\n\t\tvalue: function selectedCountry() {\n\t\t\treturn this._country;\n\t\t}\n\t}]);\n\n\treturn Metadata;\n}();\n\nexport default Metadata;\n\nvar Format = function () {\n\tfunction Format(format, metadata) {\n\t\t_classCallCheck(this, Format);\n\n\t\tthis._format = format;\n\t\tthis.metadata = metadata;\n\t}\n\n\t_createClass(Format, [{\n\t\tkey: 'pattern',\n\t\tvalue: function pattern() {\n\t\t\treturn this._format[0];\n\t\t}\n\t}, {\n\t\tkey: 'format',\n\t\tvalue: function format() {\n\t\t\treturn this._format[1];\n\t\t}\n\t}, {\n\t\tkey: 'leadingDigitsPatterns',\n\t\tvalue: function leadingDigitsPatterns() {\n\t\t\treturn this._format[2] || [];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixFormattingRule',\n\t\tvalue: function nationalPrefixFormattingRule() {\n\t\t\treturn this._format[3] || this.metadata.nationalPrefixFormattingRule();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsOptionalWhenFormatting',\n\t\tvalue: function nationalPrefixIsOptionalWhenFormatting() {\n\t\t\treturn !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormatting();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsMandatoryWhenFormatting',\n\t\tvalue: function nationalPrefixIsMandatoryWhenFormatting() {\n\t\t\t// National prefix is omitted if there's no national prefix formatting rule\n\t\t\t// set for this country, or when the national prefix formatting rule\n\t\t\t// contains no national prefix itself, or when this rule is set but\n\t\t\t// national prefix is optional for this phone number format\n\t\t\t// (and it is not enforced explicitly)\n\t\t\treturn this.nationalPrefixFormattingRule() &&\n\t\t\t// Check that national prefix formatting rule is not a dummy one.\n\t\t\t// Check that national prefix formatting rule actually has national prefix digit(s).\n\t\t\tthis.usesNationalPrefix() &&\n\t\t\t// Or maybe national prefix is optional for this format\n\t\t\t!this.nationalPrefixIsOptionalWhenFormatting();\n\t\t}\n\n\t\t// Checks whether national prefix formatting rule contains national prefix\n\n\t}, {\n\t\tkey: 'usesNationalPrefix',\n\t\tvalue: function usesNationalPrefix() {\n\t\t\t// Check that national prefix formatting rule is not a dummy one\n\t\t\treturn this.nationalPrefixFormattingRule() !== '$1' &&\n\t\t\t// Check that national prefix formatting rule actually has national prefix digit(s)\n\t\t\t/\\d/.test(this.nationalPrefixFormattingRule().replace('$1', ''));\n\t\t}\n\t}, {\n\t\tkey: 'internationalFormat',\n\t\tvalue: function internationalFormat() {\n\t\t\treturn this._format[5] || this.format();\n\t\t}\n\t}]);\n\n\treturn Format;\n}();\n\nvar Type = function () {\n\tfunction Type(type, metadata) {\n\t\t_classCallCheck(this, Type);\n\n\t\tthis.type = type;\n\t\tthis.metadata = metadata;\n\t}\n\n\t_createClass(Type, [{\n\t\tkey: 'pattern',\n\t\tvalue: function pattern() {\n\t\t\tif (this.metadata.v1) return this.type;\n\t\t\treturn this.type[0];\n\t\t}\n\t}, {\n\t\tkey: 'possibleLengths',\n\t\tvalue: function possibleLengths() {\n\t\t\tif (this.metadata.v1) return;\n\t\t\treturn this.type[1] || this.metadata.possibleLengths();\n\t\t}\n\t}]);\n\n\treturn Type;\n}();\n\nfunction getType(types, type) {\n\tswitch (type) {\n\t\tcase 'FIXED_LINE':\n\t\t\treturn types[0];\n\t\tcase 'MOBILE':\n\t\t\treturn types[1];\n\t\tcase 'TOLL_FREE':\n\t\t\treturn types[2];\n\t\tcase 'PREMIUM_RATE':\n\t\t\treturn types[3];\n\t\tcase 'PERSONAL_NUMBER':\n\t\t\treturn types[4];\n\t\tcase 'VOICEMAIL':\n\t\t\treturn types[5];\n\t\tcase 'UAN':\n\t\t\treturn types[6];\n\t\tcase 'PAGER':\n\t\t\treturn types[7];\n\t\tcase 'VOIP':\n\t\t\treturn types[8];\n\t\tcase 'SHARED_COST':\n\t\t\treturn types[9];\n\t}\n}\n\nexport function validateMetadata(metadata) {\n\tif (!metadata) {\n\t\tthrow new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n\t}\n\n\t// `country_phone_code_to_countries` was renamed to\n\t// `country_calling_codes` in `1.0.18`.\n\tif (!is_object(metadata) || !is_object(metadata.countries) || !is_object(metadata.country_calling_codes) && !is_object(metadata.country_phone_code_to_countries)) {\n\t\tthrow new Error('[libphonenumber-js] `metadata` argument was passed but it\\'s not a valid metadata. Must be an object having `.countries` and `.country_calling_codes` child object properties. Got ' + (is_object(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + type_of(metadata) + ': ' + metadata) + '.');\n\t}\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : _typeof(_)) === 'object';\n};\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar type_of = function type_of(_) {\n\treturn typeof _ === 'undefined' ? 'undefined' : _typeof(_);\n};\n\nexport function getExtPrefix(country, metadata) {\n\treturn new Metadata(metadata).country(country).ext();\n}\n//# sourceMappingURL=metadata.js.map"",""var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { parse_phone_number_digits, parse_national_number_and_country_calling_code, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS, MAX_LENGTH_FOR_NSN, matches_entirely, create_extension_pattern } from './common';\n\nimport Metadata from './metadata';\n\nimport get_number_type, { check_number_length_for_type } from './types';\n\nimport { parseRFC3966 } from './RFC3966';\n\n// The minimum length of the national significant number.\nvar MIN_LENGTH_FOR_NSN = 2;\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n/**\r\n * Regexp of all possible ways to write extensions, for use when parsing. This\r\n * will be run as a case-insensitive regexp match. Wide character versions are\r\n * also provided after each ASCII version. There are three regular expressions\r\n * here. The first covers RFC 3966 format, where the extension is added using\r\n * ';ext='. The second more generic one starts with optional white space and\r\n * ends with an optional full stop (.), followed by zero or more spaces/tabs\r\n * /commas and then the numbers themselves. The other one covers the special\r\n * case of American numbers where the extension is written with a hash at the\r\n * end, such as '- 503#'. Note that the only capturing groups should be around\r\n * the digits that you want to capture as part of the extension, or else parsing\r\n * will fail! We allow two options for representing the accented o - the\r\n * character itself, and one in the unicode decomposed form with the combining\r\n * acute accent.\r\n */\nvar EXTN_PATTERNS_FOR_PARSING = create_extension_pattern('parsing');\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + EXTN_PATTERNS_FOR_PARSING + ')$', 'i');\n\n//  Regular expression of viable phone numbers. This is location independent.\n//  Checks we have at least three leading digits, and only valid punctuation,\n//  alpha characters and digits in the phone number. Does not include extension\n//  data. The symbol 'x' is allowed here as valid punctuation since it is often\n//  used as a placeholder for carrier codes, for example in Brazilian phone\n//  numbers. We also allow multiple '+' characters at the start.\n//\n//  Corresponds to the following:\n//  [digits]{minLengthNsn}|\n//  plus_sign*\n//  (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n//  The first reg-ex is to allow short numbers (two digits long) to be parsed if\n//  they are entered as \""15\"" etc, but only if there is no punctuation in them.\n//  The second expression restricts the number of digits to three or more, but\n//  then allows them to be in international form, and to have alpha-characters\n//  and punctuation. We split up the two reg-exes here and combine them when\n//  creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n//  with ^ and append $ to each branch.\n//\n//  \""Note VALID_PUNCTUATION starts with a -,\n//   so must be the first in the range\"" (c) Google devs.\n//  (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nvar VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + EXTN_PATTERNS_FOR_PARSING + ')?' + '$', 'i');\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + ']+$');\n\nvar default_options = {\n\tcountry: {}\n\n\t// `options`:\n\t//  {\n\t//    country:\n\t//    {\n\t//      restrict - (a two-letter country code)\n\t//                 the phone number must be in this country\n\t//\n\t//      default - (a two-letter country code)\n\t//                default country to use for phone number parsing and validation\n\t//                (if no country code could be derived from the phone number)\n\t//    }\n\t//  }\n\t//\n\t// Returns `{ country, number }`\n\t//\n\t// Example use cases:\n\t//\n\t// ```js\n\t// parse('8 (800) 555-35-35', 'RU')\n\t// parse('8 (800) 555-35-35', 'RU', metadata)\n\t// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n\t// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n\t// parse('+7 800 555 35 35')\n\t// parse('+7 800 555 35 35', metadata)\n\t// ```\n\t//\n};export default function parse(arg_1, arg_2, arg_3, arg_4) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4),\n\t    text = _sort_out_arguments.text,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// Validate `defaultCountry`.\n\n\n\tif (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n\t\tthrow new Error('Unknown country: ' + options.defaultCountry);\n\t}\n\n\t// Parse the phone number.\n\n\tvar _parse_input = parse_input(text),\n\t    formatted_phone_number = _parse_input.number,\n\t    ext = _parse_input.ext;\n\n\t// If the phone number is not viable then return nothing.\n\n\n\tif (!formatted_phone_number) {\n\t\treturn {};\n\t}\n\n\tvar _parse_phone_number = parse_phone_number(formatted_phone_number, options.defaultCountry, metadata),\n\t    country = _parse_phone_number.country,\n\t    national_number = _parse_phone_number.national_number,\n\t    countryCallingCode = _parse_phone_number.countryCallingCode,\n\t    carrierCode = _parse_phone_number.carrierCode;\n\n\tif (!metadata.selectedCountry()) {\n\t\treturn options.extended ? { countryCallingCode: countryCallingCode } : {};\n\t}\n\n\t// Validate national (significant) number length.\n\t//\n\t// A sidenote:\n\t//\n\t// They say that sometimes national (significant) numbers\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n\t// Such numbers will just be discarded.\n\t//\n\tif (national_number.length < MIN_LENGTH_FOR_NSN || national_number.length > MAX_LENGTH_FOR_NSN) {\n\t\t// Google's demo just throws an error in this case.\n\t\treturn options.extended ? { countryCallingCode: countryCallingCode } : {};\n\t}\n\n\t// Check if national phone number pattern matches the number\n\t// National number pattern is different for each country,\n\t// even for those ones which are part of the \""NANPA\"" group.\n\tvar valid = country && matches_entirely(national_number, new RegExp(metadata.nationalNumberPattern())) ? true : false;\n\n\tif (!options.extended) {\n\t\treturn valid ? result(country, national_number, ext) : {};\n\t}\n\n\treturn {\n\t\tcountry: country,\n\t\tcountryCallingCode: countryCallingCode,\n\t\tcarrierCode: carrierCode,\n\t\tvalid: valid,\n\t\tpossible: valid ? true : options.extended === true && metadata.possibleLengths() && is_possible_number(national_number, countryCallingCode !== undefined, metadata),\n\t\tphone: national_number,\n\t\text: ext\n\t};\n}\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport function is_viable_phone_number(number) {\n\treturn number.length >= MIN_LENGTH_FOR_NSN && matches_entirely(number, VALID_PHONE_NUMBER_PATTERN);\n}\n\n/**\r\n * Extracts a parseable phone number.\r\n * @param  {string} text - Input.\r\n * @return {string}.\r\n */\nexport function extract_formatted_phone_number(text) {\n\tif (!text || text.length > MAX_INPUT_STRING_LENGTH) {\n\t\treturn;\n\t}\n\n\t// Attempt to extract a possible number from the string passed in\n\n\tvar starts_at = text.search(PHONE_NUMBER_START_PATTERN);\n\n\tif (starts_at < 0) {\n\t\treturn;\n\t}\n\n\treturn text\n\t// Trim everything to the left of the phone number\n\t.slice(starts_at)\n\t// Remove trailing non-numerical characters\n\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n// Strips any national prefix (such as 0, 1) present in the number provided.\n// \""Carrier codes\"" are only used  in Colombia and Brazil,\n// and only when dialing within those countries from a mobile phone to a fixed line number.\nexport function strip_national_prefix_and_carrier_code(number, metadata) {\n\tif (!number || !metadata.nationalPrefixForParsing()) {\n\t\treturn { number: number };\n\t}\n\n\t// Attempt to parse the first digits as a national prefix\n\tvar national_prefix_pattern = new RegExp('^(?:' + metadata.nationalPrefixForParsing() + ')');\n\tvar national_prefix_matcher = national_prefix_pattern.exec(number);\n\n\t// If no national prefix is present in the phone number,\n\t// but the national prefix is optional for this country,\n\t// then consider this phone number valid.\n\t//\n\t// Google's reference `libphonenumber` implementation\n\t// wouldn't recognize such phone numbers as valid,\n\t// but I think it would perfectly make sense\n\t// to consider such phone numbers as valid\n\t// because if a national phone number was originally\n\t// formatted without the national prefix\n\t// then it must be parseable back into the original national number.\n\t// In other words, `parse(format(number))`\n\t// must always be equal to `number`.\n\t//\n\tif (!national_prefix_matcher) {\n\t\treturn { number: number };\n\t}\n\n\tvar national_significant_number = void 0;\n\n\t// `national_prefix_for_parsing` capturing groups\n\t// (used only for really messy cases: Argentina, Brazil, Mexico, Somalia)\n\tvar captured_groups_count = national_prefix_matcher.length - 1;\n\n\t// If the national number tranformation is needed then do it.\n\t//\n\t// I don't know what did they mean by `&& national_prefix_matcher[captured_groups_count]`.\n\t// https://github.com/googlei18n/libphonenumber/blob/d978e59c2e6b1ddfb6816cd190e1b62d9a96bc3b/javascript/i18n/phonenumbers/phonenumberutil.js#L3885\n\t// https://github.com/googlei18n/libphonenumber/blob/d978e59c2e6b1ddfb6816cd190e1b62d9a96bc3b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2906\n\t//\n\tif (metadata.nationalPrefixTransformRule() && national_prefix_matcher[captured_groups_count]) {\n\t\tnational_significant_number = number.replace(national_prefix_pattern, metadata.nationalPrefixTransformRule());\n\t}\n\t// Else, no transformation is necessary,\n\t// and just strip the national prefix.\n\telse {\n\t\t\tnational_significant_number = number.slice(national_prefix_matcher[0].length);\n\t\t}\n\n\tvar carrierCode = void 0;\n\tif (captured_groups_count > 0) {\n\t\tcarrierCode = national_prefix_matcher[1];\n\t}\n\n\t// The following is done in `get_country_and_national_number_for_local_number()` instead.\n\t//\n\t// // Verify the parsed national (significant) number for this country\n\t// const national_number_rule = new RegExp(metadata.nationalNumberPattern())\n\t// //\n\t// // If the original number (before stripping national prefix) was viable,\n\t// // and the resultant number is not, then prefer the original phone number.\n\t// // This is because for some countries (e.g. Russia) the same digit could be both\n\t// // a national prefix and a leading digit of a valid national phone number,\n\t// // like `8` is the national prefix for Russia and both\n\t// // `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t// if (matches_entirely(number, national_number_rule) &&\n\t// \t\t!matches_entirely(national_significant_number, national_number_rule))\n\t// {\n\t// \treturn number\n\t// }\n\n\t// Return the parsed national (significant) number\n\treturn {\n\t\tnumber: national_significant_number,\n\t\tcarrierCode: carrierCode\n\t};\n}\n\nexport function find_country_code(country_calling_code, national_phone_number, metadata) {\n\t// Is always non-empty, because `country_calling_code` is always valid\n\tvar possible_countries = metadata.countryCallingCodes()[country_calling_code];\n\n\t// If there's just one country corresponding to the country code,\n\t// then just return it, without further phone number digits validation.\n\tif (possible_countries.length === 1) {\n\t\treturn possible_countries[0];\n\t}\n\n\treturn _find_country_code(possible_countries, national_phone_number, metadata.metadata);\n}\n\n// Changes `metadata` `country`.\nfunction _find_country_code(possible_countries, national_phone_number, metadata) {\n\tmetadata = new Metadata(metadata);\n\n\tfor (var _iterator = possible_countries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar country = _ref;\n\n\t\tmetadata.country(country);\n\n\t\t// Leading digits check would be the simplest one\n\t\tif (metadata.leadingDigits()) {\n\t\t\tif (national_phone_number && national_phone_number.search(metadata.leadingDigits()) === 0) {\n\t\t\t\treturn country;\n\t\t\t}\n\t\t}\n\t\t// Else perform full validation with all of those\n\t\t// fixed-line/mobile/etc regular expressions.\n\t\telse if (get_number_type({ phone: national_phone_number, country: country }, metadata.metadata)) {\n\t\t\t\treturn country;\n\t\t\t}\n\t}\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3, arg_4) {\n\tvar text = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `parse('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\ttext = arg_1;\n\t} else throw new TypeError('A phone number for parsing must be a string.');\n\n\t// If \""default country\"" argument is being passed\n\t// then move it to `options`.\n\t// `parse('88005553535', 'RU', [options], metadata)`.\n\tif (typeof arg_2 === 'string') {\n\t\tif (arg_4) {\n\t\t\toptions = _extends({ defaultCountry: arg_2 }, arg_3);\n\t\t\tmetadata = arg_4;\n\t\t} else {\n\t\t\toptions = { defaultCountry: arg_2 };\n\t\t\tmetadata = arg_3;\n\t\t}\n\t}\n\t// No \""default country\"" argument is being passed.\n\t// International phone number is passed.\n\t// `parse('+78005553535', [options], metadata)`.\n\telse {\n\t\t\tif (arg_3) {\n\t\t\t\toptions = arg_2;\n\t\t\t\tmetadata = arg_3;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_2;\n\t\t\t}\n\t\t}\n\n\t// Apply default options.\n\tif (options) {\n\t\toptions = _extends({}, default_options, options);\n\t} else {\n\t\toptions = default_options;\n\t}\n\n\treturn { text: text, options: options, metadata: new Metadata(metadata) };\n}\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nfunction strip_extension(number) {\n\tvar start = number.search(EXTN_PATTERN);\n\tif (start < 0) {\n\t\treturn {};\n\t}\n\n\t// If we find a potential extension, and the number preceding this is a viable\n\t// number, we assume it is an extension.\n\tvar number_without_extension = number.slice(0, start);\n\t/* istanbul ignore if - seems a bit of a redundant check */\n\tif (!is_viable_phone_number(number_without_extension)) {\n\t\treturn {};\n\t}\n\n\tvar matches = number.match(EXTN_PATTERN);\n\tvar i = 1;\n\twhile (i < matches.length) {\n\t\tif (matches[i] != null && matches[i].length > 0) {\n\t\t\treturn {\n\t\t\t\tnumber: number_without_extension,\n\t\t\t\text: matches[i]\n\t\t\t};\n\t\t}\n\t\ti++;\n\t}\n}\n\nfunction is_possible_number(national_number, is_international, metadata) {\n\tswitch (check_number_length_for_type(national_number, undefined, metadata)) {\n\t\tcase 'IS_POSSIBLE':\n\t\t\treturn true;\n\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t// \treturn !is_international\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\r\n * @param  {string} text - Input.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parse_input(text) {\n\t// Parse RFC 3966 phone number URI.\n\tif (text && text.indexOf('tel:') === 0) {\n\t\treturn parseRFC3966(text);\n\t}\n\n\tvar number = extract_formatted_phone_number(text);\n\n\t// If the phone number is not viable, then abort.\n\tif (!number || !is_viable_phone_number(number)) {\n\t\treturn {};\n\t}\n\n\t// Attempt to parse extension first, since it doesn't require region-specific\n\t// data and we want to have the non-normalised number here.\n\tvar with_extension_stripped = strip_extension(number);\n\tif (with_extension_stripped.ext) {\n\t\treturn with_extension_stripped;\n\t}\n\n\treturn { number: number };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, national_number, ext) {\n\tvar result = {\n\t\tcountry: country,\n\t\tphone: national_number\n\t};\n\n\tif (ext) {\n\t\tresult.ext = ext;\n\t}\n\n\treturn result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * Returns `{ country, countryCallingCode, national_number }`.\r\n */\nfunction parse_phone_number(formatted_phone_number, default_country, metadata) {\n\tvar _parse_national_numbe = parse_national_number_and_country_calling_code(formatted_phone_number, default_country, metadata),\n\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t    number = _parse_national_numbe.number;\n\n\tif (!number) {\n\t\treturn { countryCallingCode: countryCallingCode };\n\t}\n\n\tvar country = void 0;\n\n\t// Attempt to extract country from international phone number.\n\tif (countryCallingCode) {\n\t\t// Sometimes there are several countries\n\t\t// corresponding to the same country phone code\n\t\t// (e.g. NANPA countries all having `1` country phone code).\n\t\t// Therefore, to reliably determine the exact country,\n\t\t// national (significant) number should have been parsed first.\n\t\t//\n\t\t// When `metadata.json` is generated, all \""ambiguous\"" country phone codes\n\t\t// get their countries populated with the full set of\n\t\t// \""phone number type\"" regular expressions.\n\t\t//\n\t\tcountry = find_country_code(countryCallingCode, number, metadata);\n\n\t\tif (country) {\n\t\t\tmetadata.country(country);\n\t\t} else {\n\t\t\t// Formatting information for regions which share\n\t\t\t// a country calling code is contained by only one region\n\t\t\t// for performance reasons. For example, for NANPA region\n\t\t\t// (\""North American Numbering Plan Administration\"",\n\t\t\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t\t\t// it will be contained in the metadata for `US`.\n\t\t\tmetadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t\t}\n\t} else if (default_country) {\n\t\tcountry = default_country;\n\t\tmetadata.country(country);\n\t\tcountryCallingCode = metadata.countryCallingCode();\n\t} else return {};\n\n\t// Parsing national prefixes and carrier codes\n\t// is only required for local phone numbers\n\t// but some people don't understand that\n\t// and sometimes write international phone numbers\n\t// with national prefixes (or maybe even carrier codes).\n\t// http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n\t// Google's original library forgives such mistakes\n\t// and so does this library, because it has been requested:\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/127\n\n\tvar _parse_national_numbe2 = parse_national_number(number, metadata),\n\t    national_number = _parse_national_numbe2.national_number,\n\t    carrier_code = _parse_national_numbe2.carrier_code;\n\n\treturn {\n\t\tcountry: country,\n\t\tcountryCallingCode: countryCallingCode,\n\t\tnational_number: national_number,\n\t\tcarrierCode: carrier_code\n\t};\n}\n\nfunction parse_national_number(number, metadata) {\n\tvar national_number = parse_phone_number_digits(number);\n\tvar carrier_code = void 0;\n\n\t// Only strip national prefixes for non-international phone numbers\n\t// because national prefixes can't be present in international phone numbers.\n\t// Otherwise, while forgiving, it would parse a NANPA number `+1 1877 215 5230`\n\t// first to `1877 215 5230` and then, stripping the leading `1`, to `877 215 5230`,\n\t// and then it would assume that's a valid number which it isn't.\n\t// So no forgiveness for grandmas here.\n\t// The issue asking for this fix:\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/159\n\n\tvar _strip_national_prefi = strip_national_prefix_and_carrier_code(national_number, metadata),\n\t    potential_national_number = _strip_national_prefi.number,\n\t    carrierCode = _strip_national_prefi.carrierCode;\n\n\t// If metadata has \""possible lengths\"" then employ the new algorythm.\n\n\n\tif (metadata.possibleLengths()) {\n\t\t// We require that the NSN remaining after stripping the national prefix and\n\t\t// carrier code be long enough to be a possible length for the region.\n\t\t// Otherwise, we don't do the stripping, since the original number could be\n\t\t// a valid short number.\n\t\tswitch (check_number_length_for_type(potential_national_number, undefined, metadata)) {\n\t\t\tcase 'TOO_SHORT':\n\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t\tcase 'INVALID_LENGTH':\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tnational_number = potential_national_number;\n\t\t\t\tcarrier_code = carrierCode;\n\t\t}\n\t} else {\n\t\t// If the original number (before stripping national prefix) was viable,\n\t\t// and the resultant number is not, then prefer the original phone number.\n\t\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t\t// a national prefix and a leading digit of a valid national phone number,\n\t\t// like `8` is the national prefix for Russia and both\n\t\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t\tif (matches_entirely(national_number, metadata.nationalNumberPattern()) && !matches_entirely(potential_national_number, metadata.nationalNumberPattern())) {\n\t\t\t// Keep the number without stripping national prefix.\n\t\t} else {\n\t\t\tnational_number = potential_national_number;\n\t\t\tcarrier_code = carrierCode;\n\t\t}\n\t}\n\n\treturn {\n\t\tnational_number: national_number,\n\t\tcarrier_code: carrier_code\n\t};\n}\n\n// Determines the country for a given (possibly incomplete) phone number.\n// export function get_country_from_phone_number(number, metadata)\n// {\n// \treturn parse_phone_number(number, null, metadata).country\n// }\n//# sourceMappingURL=parse.js.map"",""var _typeof = typeof Symbol === \""function\"" && typeof Symbol.iterator === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \""function\"" && obj.constructor === Symbol && obj !== Symbol.prototype ? \""symbol\"" : typeof obj; };\n\nimport parse, { is_viable_phone_number } from './parse';\n\nimport { matches_entirely } from './common';\n\nimport Metadata from './metadata';\n\nvar non_fixed_line_types = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function get_number_type(arg_1, arg_2, arg_3) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// When no input was passed\n\n\n\tif (!input) {\n\t\treturn;\n\t}\n\n\t// When `parse()` returned `{}`\n\t// meaning that the phone number is not a valid one.\n\tif (!input.country) {\n\t\treturn;\n\t}\n\n\tif (!metadata.hasCountry(input.country)) {\n\t\tthrow new Error('Unknown country: ' + input.country);\n\t}\n\n\tvar national_number = input.phone;\n\tmetadata.country(input.country);\n\n\t// The following is copy-pasted from the original function:\n\t// https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n\t// Is this national number even valid for this country\n\tif (!matches_entirely(national_number, metadata.nationalNumberPattern())) {\n\t\treturn;\n\t}\n\n\t// Is it fixed line number\n\tif (is_of_type(national_number, 'FIXED_LINE', metadata)) {\n\t\t// Because duplicate regular expressions are removed\n\t\t// to reduce metadata size, if \""mobile\"" pattern is \""\""\n\t\t// then it means it was removed due to being a duplicate of the fixed-line pattern.\n\t\t//\n\t\tif (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// v1 metadata.\n\t\t// Legacy.\n\t\t// Deprecated.\n\t\tif (!metadata.type('MOBILE')) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// Check if the number happens to qualify as both fixed line and mobile.\n\t\t// (no such country in the minimal metadata set)\n\t\t/* istanbul ignore if */\n\t\tif (is_of_type(national_number, 'MOBILE', metadata)) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\treturn 'FIXED_LINE';\n\t}\n\n\tfor (var _iterator = non_fixed_line_types, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar _type = _ref;\n\n\t\tif (is_of_type(national_number, _type, metadata)) {\n\t\t\treturn _type;\n\t\t}\n\t}\n}\n\nexport function is_of_type(national_number, type, metadata) {\n\ttype = metadata.type(type);\n\n\tif (!type || !type.pattern()) {\n\t\treturn false;\n\t}\n\n\t// Check if any possible number lengths are present;\n\t// if so, we use them to avoid checking\n\t// the validation pattern if they don't match.\n\t// If they are absent, this means they match\n\t// the general description, which we have\n\t// already checked before a specific number type.\n\tif (type.possibleLengths() && type.possibleLengths().indexOf(national_number.length) < 0) {\n\t\treturn false;\n\t}\n\n\treturn matches_entirely(national_number, type.pattern());\n}\n\n// Sort out arguments\nexport function sort_out_arguments(arg_1, arg_2, arg_3) {\n\tvar input = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `getNumberType('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\t// If \""resrict country\"" argument is being passed\n\t\t// then convert it to an `options` object.\n\t\t// `getNumberType('88005553535', 'RU', metadata)`.\n\t\tif (typeof arg_2 === 'string' || arg_2 === undefined) {\n\t\t\tmetadata = arg_3;\n\n\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t// while this `validate` function needs to verify\n\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\tif (is_viable_phone_number(arg_1)) {\n\t\t\t\tinput = parse(arg_1, arg_2, metadata);\n\t\t\t}\n\t\t}\n\t\t// No \""resrict country\"" argument is being passed.\n\t\t// International phone number is passed.\n\t\t// `getNumberType('+78005553535', metadata)`.\n\t\telse {\n\t\t\t\tmetadata = arg_2;\n\n\t\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t\t// while this `validate` function needs to verify\n\t\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\t\tif (is_viable_phone_number(arg_1)) {\n\t\t\t\t\tinput = parse(arg_1, metadata);\n\t\t\t\t}\n\t\t\t}\n\t}\n\t// If the phone number is passed as a parsed phone number.\n\t// `getNumberType({ phone: '88005553535', country: 'RU' }, ...)`.\n\telse if (is_object(arg_1) && typeof arg_1.phone === 'string') {\n\t\t\t// The `arg_1` must be a valid phone number\n\t\t\t// as a whole, not just a part of it which gets parsed here.\n\t\t\tif (is_viable_phone_number(arg_1.phone)) {\n\t\t\t\tinput = arg_1;\n\t\t\t}\n\n\t\t\tmetadata = arg_2;\n\t\t} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');\n\n\treturn { input: input, metadata: new Metadata(metadata) };\n}\n\n// Should only be called for the \""new\"" metadata which has \""possible lengths\"".\nexport function check_number_length_for_type(national_number, type, metadata) {\n\tvar type_info = metadata.type(type);\n\n\t// There should always be \""<possiblePengths/>\"" set for every type element.\n\t// This is declared in the XML schema.\n\t// For size efficiency, where a sub-description (e.g. fixed-line)\n\t// has the same \""<possiblePengths/>\"" as the \""general description\"", this is missing,\n\t// so we fall back to the \""general description\"". Where no numbers of the type\n\t// exist at all, there is one possible length (-1) which is guaranteed\n\t// not to match the length of any real phone number.\n\tvar possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n\t// let local_lengths    = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n\tif (type === 'FIXED_LINE_OR_MOBILE') {\n\t\t// No such country in metadata.\n\t\t/* istanbul ignore next */\n\t\tif (!metadata.type('FIXED_LINE')) {\n\t\t\t// The rare case has been encountered where no fixedLine data is available\n\t\t\t// (true for some non-geographical entities), so we just check mobile.\n\t\t\treturn test_number_length_for_type(national_number, 'MOBILE', metadata);\n\t\t}\n\n\t\tvar mobile_type = metadata.type('MOBILE');\n\n\t\tif (mobile_type) {\n\t\t\t// Merge the mobile data in if there was any. \""Concat\"" creates a new\n\t\t\t// array, it doesn't edit possible_lengths in place, so we don't need a copy.\n\t\t\t// Note that when adding the possible lengths from mobile, we have\n\t\t\t// to again check they aren't empty since if they are this indicates\n\t\t\t// they are the same as the general desc and should be obtained from there.\n\t\t\tpossible_lengths = merge_arrays(possible_lengths, mobile_type.possibleLengths());\n\t\t\t// The current list is sorted; we need to merge in the new list and\n\t\t\t// re-sort (duplicates are okay). Sorting isn't so expensive because\n\t\t\t// the lists are very small.\n\n\t\t\t// if (local_lengths)\n\t\t\t// {\n\t\t\t// \tlocal_lengths = merge_arrays(local_lengths, mobile_type.possibleLengthsLocal())\n\t\t\t// }\n\t\t\t// else\n\t\t\t// {\n\t\t\t// \tlocal_lengths = mobile_type.possibleLengthsLocal()\n\t\t\t// }\n\t\t}\n\t}\n\t// If the type doesn't exist then return 'INVALID_LENGTH'.\n\telse if (type && !type_info) {\n\t\t\treturn 'INVALID_LENGTH';\n\t\t}\n\n\tvar actual_length = national_number.length;\n\n\t// // This is safe because there is never an overlap beween the possible lengths\n\t// // and the local-only lengths; this is checked at build time.\n\t// if (local_lengths && local_lengths.indexOf(national_number.length) >= 0)\n\t// {\n\t// \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n\t// }\n\n\tvar minimum_length = possible_lengths[0];\n\n\tif (minimum_length === actual_length) {\n\t\treturn 'IS_POSSIBLE';\n\t}\n\n\tif (minimum_length > actual_length) {\n\t\treturn 'TOO_SHORT';\n\t}\n\n\tif (possible_lengths[possible_lengths.length - 1] < actual_length) {\n\t\treturn 'TOO_LONG';\n\t}\n\n\t// We skip the first element since we've already checked it.\n\treturn possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : _typeof(_)) === 'object';\n};\n\nexport function merge_arrays(a, b) {\n\tvar merged = a.slice();\n\n\tfor (var _iterator2 = b, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n\t\tvar _ref2;\n\n\t\tif (_isArray2) {\n\t\t\tif (_i2 >= _iterator2.length) break;\n\t\t\t_ref2 = _iterator2[_i2++];\n\t\t} else {\n\t\t\t_i2 = _iterator2.next();\n\t\t\tif (_i2.done) break;\n\t\t\t_ref2 = _i2.value;\n\t\t}\n\n\t\tvar element = _ref2;\n\n\t\tif (a.indexOf(element) < 0) {\n\t\t\tmerged.push(element);\n\t\t}\n\t}\n\n\treturn merged.sort(function (a, b) {\n\t\treturn a - b;\n\t});\n\n\t// ES6 version, requires Set polyfill.\n\t// let merged = new Set(a)\n\t// for (const element of b)\n\t// {\n\t// \tmerged.add(i)\n\t// }\n\t// return Array.from(merged).sort((a, b) => a - b)\n}\n//# sourceMappingURL=types.js.map"",""var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\""return\""]) _i[\""return\""](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\""Invalid attempt to destructure non-iterable instance\""); } }; }();\n\nimport { is_viable_phone_number } from './parse';\n\n// https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param  {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nexport function parseRFC3966(text) {\n\tvar number = void 0;\n\tvar ext = void 0;\n\n\tfor (var _iterator = text.split(';'), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar part = _ref;\n\n\t\tvar _part$split = part.split(':'),\n\t\t    _part$split2 = _slicedToArray(_part$split, 2),\n\t\t    name = _part$split2[0],\n\t\t    value = _part$split2[1];\n\n\t\tswitch (name) {\n\t\t\tcase 'tel':\n\t\t\t\tnumber = value;\n\t\t\t\tbreak;\n\t\t\tcase 'ext':\n\t\t\t\text = value;\n\t\t\t\tbreak;\n\t\t\tcase 'phone-context':\n\t\t\t\t// Only \""country contexts\"" are supported.\n\t\t\t\t// \""Domain contexts\"" are ignored.\n\t\t\t\tif (value[0] === '+') {\n\t\t\t\t\tnumber = value + number;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// If the phone number is not viable, then abort.\n\tif (!is_viable_phone_number(number)) {\n\t\treturn {};\n\t}\n\n\tvar result = { number: number };\n\tif (ext) {\n\t\tresult.ext = ext;\n\t}\n\treturn result;\n}\n\n/**\r\n * @param  {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nexport function formatRFC3966(_ref2) {\n\tvar number = _ref2.number,\n\t    ext = _ref2.ext;\n\n\tif (!number) {\n\t\treturn '';\n\t}\n\n\tif (number[0] !== '+') {\n\t\tthrow new Error('\""formatRFC3966()\"" expects \""number\"" to be in E.164 format.');\n\t}\n\n\treturn 'tel:' + number + (ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map"",""var _typeof = typeof Symbol === \""function\"" && typeof Symbol.iterator === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \""function\"" && obj.constructor === Symbol && obj !== Symbol.prototype ? \""symbol\"" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { parse_national_number_and_country_calling_code, VALID_PUNCTUATION, matches_entirely } from './common';\n\nimport { getIDDPrefix } from './IDD';\n\nimport Metadata from './metadata';\n\nimport { formatRFC3966 } from './RFC3966';\n\nvar defaultOptions = {\n\tformatExtension: function formatExtension(number, extension, metadata) {\n\t\treturn '' + number + metadata.ext() + extension;\n\t}\n\n\t// Formats a phone number\n\t//\n\t// Example use cases:\n\t//\n\t// ```js\n\t// format('8005553535', 'RU', 'International')\n\t// format('8005553535', 'RU', 'International', metadata)\n\t// format({ phone: '8005553535', country: 'RU' }, 'International')\n\t// format({ phone: '8005553535', country: 'RU' }, 'International', metadata)\n\t// format('+78005553535', 'National')\n\t// format('+78005553535', 'National', metadata)\n\t// ```\n\t//\n};export default function format(arg_1, arg_2, arg_3, arg_4, arg_5) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4, arg_5),\n\t    input = _sort_out_arguments.input,\n\t    format_type = _sort_out_arguments.format_type,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (input.country && metadata.hasCountry(input.country)) {\n\t\tmetadata.country(input.country);\n\t}\n\n\tvar _parse_national_numbe = parse_national_number_and_country_calling_code(input.phone, null, metadata),\n\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t    number = _parse_national_numbe.number;\n\n\tcountryCallingCode = countryCallingCode || input.countryCallingCode;\n\n\tif (countryCallingCode) {\n\t\t// Check country restriction\n\t\tif (input.country && metadata.selectedCountry() && countryCallingCode !== metadata.countryCallingCode()) {\n\t\t\treturn input.phone;\n\t\t}\n\n\t\tmetadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t}\n\n\tif (!metadata.selectedCountry()) {\n\t\treturn input.phone;\n\t}\n\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\t\tif (!number) {\n\t\t\t\treturn '+' + metadata.countryCallingCode();\n\t\t\t}\n\t\t\tnumber = format_national_number(number, 'International', false, metadata);\n\t\t\tnumber = '+' + metadata.countryCallingCode() + ' ' + number;\n\t\t\treturn add_extension(number, input.ext, metadata, options.formatExtension);\n\n\t\tcase 'E.164':\n\t\t\t// `E.164` doesn't define \""phone number extensions\"".\n\t\t\treturn '+' + metadata.countryCallingCode() + input.phone;\n\n\t\tcase 'RFC3966':\n\t\t\treturn formatRFC3966({\n\t\t\t\tnumber: '+' + metadata.countryCallingCode() + input.phone,\n\t\t\t\text: input.ext\n\t\t\t});\n\n\t\tcase 'IDD':\n\t\t\tif (!options.fromCountry) {\n\t\t\t\treturn;\n\t\t\t\t// throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n\t\t\t}\n\t\t\tvar IDDPrefix = getIDDPrefix(options.fromCountry, metadata.metadata);\n\t\t\tif (!IDDPrefix) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (options.humanReadable) {\n\t\t\t\tvar formattedForSameCountryCallingCode = countryCallingCode && formatIDDSameCountryCallingCodeNumber(number, countryCallingCode, options.fromCountry, metadata);\n\t\t\t\tif (formattedForSameCountryCallingCode) {\n\t\t\t\t\tnumber = formattedForSameCountryCallingCode;\n\t\t\t\t} else {\n\t\t\t\t\tnumber = IDDPrefix + ' ' + metadata.countryCallingCode() + ' ' + format_national_number(number, 'International', false, metadata);\n\t\t\t\t}\n\t\t\t\treturn add_extension(number, input.ext, metadata, options.formatExtension);\n\t\t\t}\n\t\t\treturn '' + IDDPrefix + metadata.countryCallingCode() + number;\n\n\t\tcase 'National':\n\t\t\tif (!number) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tnumber = format_national_number(number, 'National', false, metadata);\n\t\t\treturn add_extension(number, input.ext, metadata, options.formatExtension);\n\t}\n}\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly.  Therefore, we use \\d, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\n\nexport function format_national_number_using_format(number, format, international, enforce_national_prefix, metadata) {\n\tvar format_pattern_matcher = new RegExp(format.pattern());\n\n\t// National prefix is omitted if there's no national prefix formatting rule\n\t// set for this country, or when this rule is set but\n\t// national prefix is optional for this phone number format\n\t// (and it is not enforced explicitly)\n\tvar national_prefix_may_be_omitted = !format.nationalPrefixFormattingRule() || format.nationalPrefixFormattingRule() && format.nationalPrefixIsOptionalWhenFormatting() && !enforce_national_prefix;\n\n\tif (!international && !national_prefix_may_be_omitted) {\n\t\treturn number.replace(format_pattern_matcher, format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()));\n\t}\n\n\tvar formatted_number = number.replace(format_pattern_matcher, international ? format.internationalFormat() : format.format());\n\n\tif (international) {\n\t\treturn local_to_international_style(formatted_number);\n\t}\n\n\treturn formatted_number;\n}\n\nfunction format_national_number(number, format_as, enforce_national_prefix, metadata) {\n\tvar format = choose_format_for_number(metadata.formats(), number);\n\n\tif (!format) {\n\t\treturn number;\n\t}\n\n\treturn format_national_number_using_format(number, format, format_as === 'International', enforce_national_prefix, metadata);\n}\n\nexport function choose_format_for_number(available_formats, national_number) {\n\tfor (var _iterator = available_formats, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar _format = _ref;\n\n\t\t// Validate leading digits\n\t\tif (_format.leadingDigitsPatterns().length > 0) {\n\t\t\t// The last leading_digits_pattern is used here, as it is the most detailed\n\t\t\tvar last_leading_digits_pattern = _format.leadingDigitsPatterns()[_format.leadingDigitsPatterns().length - 1];\n\n\t\t\t// If leading digits don't match then move on to the next phone number format\n\t\t\tif (national_number.search(last_leading_digits_pattern) !== 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// Check that the national number matches the phone number format regular expression\n\t\tif (matches_entirely(national_number, new RegExp(_format.pattern()))) {\n\t\t\treturn _format;\n\t\t}\n\t}\n}\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \""(999) 111-22-33\"" -> \""999 111 22 33\""\n//\nexport function local_to_international_style(local) {\n\treturn local.replace(new RegExp('[' + VALID_PUNCTUATION + ']+', 'g'), ' ').trim();\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3, arg_4, arg_5) {\n\tvar input = void 0;\n\tvar format_type = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// Sort out arguments.\n\n\t// If the phone number is passed as a string.\n\t// `format('8005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\t// If country code is supplied.\n\t\t// `format('8005553535', 'RU', 'National', [options], metadata)`.\n\t\tif (typeof arg_3 === 'string') {\n\t\t\t// Will be `parse()`d later in code\n\t\t\tinput = {\n\t\t\t\tphone: arg_1,\n\t\t\t\tcountry: arg_2\n\t\t\t};\n\n\t\t\tformat_type = arg_3;\n\n\t\t\tif (arg_5) {\n\t\t\t\toptions = arg_4;\n\t\t\t\tmetadata = arg_5;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_4;\n\t\t\t}\n\t\t}\n\t\t// Just an international phone number is supplied\n\t\t// `format('+78005553535', 'National', [options], metadata)`.\n\t\telse {\n\t\t\t\t// Will be `parse()`d later in code\n\t\t\t\tinput = {\n\t\t\t\t\tphone: arg_1\n\t\t\t\t};\n\n\t\t\t\tif (typeof arg_2 !== 'string') {\n\t\t\t\t\tthrow new Error('Format type argument not passed for `format()`');\n\t\t\t\t}\n\n\t\t\t\tformat_type = arg_2;\n\n\t\t\t\tif (arg_4) {\n\t\t\t\t\toptions = arg_3;\n\t\t\t\t\tmetadata = arg_4;\n\t\t\t\t} else {\n\t\t\t\t\tmetadata = arg_3;\n\t\t\t\t}\n\t\t\t}\n\t}\n\t// If the phone number is passed as a parsed number object.\n\t// `format({ phone: '8005553535', country: 'RU' }, 'National', [options], metadata)`.\n\telse if (is_object(arg_1) && typeof arg_1.phone === 'string') {\n\t\t\tinput = arg_1;\n\t\t\tformat_type = arg_2;\n\n\t\t\tif (arg_4) {\n\t\t\t\toptions = arg_3;\n\t\t\t\tmetadata = arg_4;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_3;\n\t\t\t}\n\t\t} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');\n\n\t// Validate `format_type`.\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\tcase 'E.164':\n\t\tcase 'National':\n\t\tcase 'RFC3966':\n\t\tcase 'IDD':\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error('Unknown format type argument passed to \""format()\"": \""' + format_type + '\""');\n\t}\n\n\t// Apply default options.\n\tif (options) {\n\t\toptions = _extends({}, defaultOptions, options);\n\t} else {\n\t\toptions = defaultOptions;\n\t}\n\n\treturn { input: input, format_type: format_type, options: options, metadata: new Metadata(metadata) };\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : _typeof(_)) === 'object';\n};\n\nfunction add_extension(number, ext, metadata, formatExtension) {\n\treturn ext ? formatExtension(number, ext, metadata) : number;\n}\n\nexport function formatIDDSameCountryCallingCodeNumber(number, toCountryCallingCode, fromCountry, toCountryMetadata) {\n\tvar fromCountryMetadata = new Metadata(toCountryMetadata.metadata);\n\tfromCountryMetadata.country(fromCountry);\n\n\t// If calling within the same country calling code.\n\tif (toCountryCallingCode === fromCountryMetadata.countryCallingCode()) {\n\t\t// For NANPA regions, return the national format for these regions\n\t\t// but prefix it with the country calling code.\n\t\tif (toCountryCallingCode === '1') {\n\t\t\treturn toCountryCallingCode + ' ' + format_national_number(number, 'National', false, toCountryMetadata);\n\t\t}\n\n\t\t// If regions share a country calling code, the country calling code need\n\t\t// not be dialled. This also applies when dialling within a region, so this\n\t\t// if clause covers both these cases. Technically this is the case for\n\t\t// dialling from La Reunion to other overseas departments of France (French\n\t\t// Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n\t\t// this edge case for now and for those cases return the version including\n\t\t// country calling code. Details here:\n\t\t// http://www.petitfute.com/voyage/225-info-pratiques-reunion\n\t\treturn format_national_number(number, 'National', false, toCountryMetadata);\n\t}\n}\n//# sourceMappingURL=format.js.map"",""import Metadata from './metadata';\nimport { matches_entirely, VALID_DIGITS } from './common';\n\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\n\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\nvar SINGLE_IDD_PREFIX = /[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?/;\n\n// export function isSingleIDDPrefix(IDDPrefix)\n// {\n// \treturn matches_entirely(IDDPrefix, SINGLE_IDD_PREFIX)\n// }\n\n// For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\nexport function getIDDPrefix(country, metadata) {\n\tvar countryMetadata = new Metadata(metadata);\n\tcountryMetadata.country(country);\n\n\tif (matches_entirely(countryMetadata.IDDPrefix(), SINGLE_IDD_PREFIX)) {\n\t\treturn countryMetadata.IDDPrefix();\n\t}\n\n\treturn countryMetadata.defaultIDDPrefix();\n}\n\nexport function stripIDDPrefix(number, country, metadata) {\n\tif (!country) {\n\t\treturn;\n\t}\n\n\t// Check if the number is IDD-prefixed.\n\n\tvar countryMetadata = new Metadata(metadata);\n\tcountryMetadata.country(country);\n\n\tvar IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n\n\tif (number.search(IDDPrefixPattern) !== 0) {\n\t\treturn;\n\t}\n\n\t// Strip IDD prefix.\n\tnumber = number.slice(number.match(IDDPrefixPattern)[0].length);\n\n\t// Some kind of a weird edge case.\n\t// No explanation from Google given.\n\tvar matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n\t/* istanbul ignore next */\n\tif (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n\t\tif (matchedGroups[1] === '0') {\n\t\t\treturn;\n\t\t}\n\t}\n\n\treturn number;\n}\n//# sourceMappingURL=IDD.js.map"",""var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\""value\"" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\""Cannot call a class as a function\""); } }\n\n// This is an enhanced port of Google Android `libphonenumber`'s\n// `asyoutypeformatter.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/blob/8d21a365061de2ba0675c878a710a7b24f74d2ae/javascript/i18n/phonenumbers/asyoutypeformatter.js\n\nimport Metadata from './metadata';\n\nimport { matches_entirely, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS, parse_phone_number_digits, parse_national_number_and_country_calling_code } from './common';\n\nimport { extract_formatted_phone_number, find_country_code, strip_national_prefix_and_carrier_code } from './parse';\n\nimport { FIRST_GROUP_PATTERN, format_national_number_using_format, local_to_international_style } from './format';\n\nimport { check_number_length_for_type } from './types';\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\nvar DUMMY_DIGIT_MATCHER = new RegExp(DUMMY_DIGIT, 'g');\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \""longest phone number\"" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// The digits that have not been entered yet will be represented by a \\u2008,\n// the punctuation space.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\nvar DIGIT_PLACEHOLDER_MATCHER_GLOBAL = new RegExp(DIGIT_PLACEHOLDER, 'g');\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \""[1-4]\"".\nvar CHARACTER_CLASS_PATTERN = /\\[([^\\[\\]])*\\]/g;\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \""80[0-2]\\d{6,10}\"", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar STANDALONE_DIGIT_PATTERN = /\\d(?=[^,}][^,}])/g;\n\n// A pattern that is used to determine if a `format` is eligible\n// to be used by the \""as you type formatter\"".\n// It is eligible when the `format` contains groups of the dollar sign\n// followed by a single digit, separated by valid phone number punctuation.\n// This prevents invalid punctuation (such as the star sign in Israeli star numbers)\n// getting into the output of the \""as you type formatter\"".\nvar ELIGIBLE_FORMAT_PATTERN = new RegExp('^' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)+' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \""leading digits pattern\"" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\n\nvar VALID_INCOMPLETE_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\nvar VALID_INCOMPLETE_PHONE_NUMBER_PATTERN = new RegExp('^' + VALID_INCOMPLETE_PHONE_NUMBER + '$', 'i');\n\nvar AsYouType = function () {\n\n\t/**\r\n  * @param {string} [country_code] - The default country used for parsing non-international phone numbers.\r\n  * @param {Object} metadata\r\n  */\n\tfunction AsYouType(country_code, metadata) {\n\t\t_classCallCheck(this, AsYouType);\n\n\t\tthis.options = {};\n\n\t\tthis.metadata = new Metadata(metadata);\n\n\t\tif (country_code && this.metadata.hasCountry(country_code)) {\n\t\t\tthis.default_country = country_code;\n\t\t}\n\n\t\tthis.reset();\n\t}\n\t// Not setting `options` to a constructor argument\n\t// not to break backwards compatibility\n\t// for older versions of the library.\n\n\n\t_createClass(AsYouType, [{\n\t\tkey: 'input',\n\t\tvalue: function input(text) {\n\t\t\t// Parse input\n\n\t\t\tvar extracted_number = extract_formatted_phone_number(text) || '';\n\n\t\t\t// Special case for a lone '+' sign\n\t\t\t// since it's not considered a possible phone number.\n\t\t\tif (!extracted_number) {\n\t\t\t\tif (text && text.indexOf('+') >= 0) {\n\t\t\t\t\textracted_number = '+';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Validate possible first part of a phone number\n\t\t\tif (!matches_entirely(extracted_number, VALID_INCOMPLETE_PHONE_NUMBER_PATTERN)) {\n\t\t\t\treturn this.current_output;\n\t\t\t}\n\n\t\t\treturn this.process_input(parse_phone_number_digits(extracted_number));\n\t\t}\n\t}, {\n\t\tkey: 'process_input',\n\t\tvalue: function process_input(input) {\n\t\t\t// If an out of position '+' sign detected\n\t\t\t// (or a second '+' sign),\n\t\t\t// then just drop it from the input.\n\t\t\tif (input[0] === '+') {\n\t\t\t\tif (!this.parsed_input) {\n\t\t\t\t\tthis.parsed_input += '+';\n\n\t\t\t\t\t// If a default country was set\n\t\t\t\t\t// then reset it because an explicitly international\n\t\t\t\t\t// phone number is being entered\n\t\t\t\t\tthis.reset_countriness();\n\t\t\t\t}\n\n\t\t\t\tinput = input.slice(1);\n\t\t\t}\n\n\t\t\t// Raw phone number\n\t\t\tthis.parsed_input += input;\n\n\t\t\t// // Reset phone number validation state\n\t\t\t// this.valid = false\n\n\t\t\t// Add digits to the national number\n\t\t\tthis.national_number += input;\n\n\t\t\t// TODO: Deprecated: rename `this.national_number`\n\t\t\t// to `this.nationalNumber` and remove `.getNationalNumber()`.\n\n\t\t\t// Try to format the parsed input\n\n\t\t\tif (this.is_international()) {\n\t\t\t\tif (!this.countryCallingCode) {\n\t\t\t\t\t// No need to format anything\n\t\t\t\t\t// if there's no national phone number.\n\t\t\t\t\t// (e.g. just the country calling code)\n\t\t\t\t\tif (!this.national_number) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If one looks at country phone codes\n\t\t\t\t\t// then he can notice that no one country phone code\n\t\t\t\t\t// is ever a (leftmost) substring of another country phone code.\n\t\t\t\t\t// So if a valid country code is extracted so far\n\t\t\t\t\t// then it means that this is the country code.\n\n\t\t\t\t\t// If no country phone code could be extracted so far,\n\t\t\t\t\t// then just return the raw phone number,\n\t\t\t\t\t// because it has no way of knowing\n\t\t\t\t\t// how to format the phone number so far.\n\t\t\t\t\tif (!this.extract_country_calling_code()) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Initialize country-specific data\n\t\t\t\t\tthis.initialize_phone_number_formats_for_this_country_calling_code();\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t}\n\t\t\t\t// `this.country` could be `undefined`,\n\t\t\t\t// for instance, when there is ambiguity\n\t\t\t\t// in a form of several different countries\n\t\t\t\t// each corresponding to the same country phone code\n\t\t\t\t// (e.g. NANPA: USA, Canada, etc),\n\t\t\t\t// and there's not enough digits entered\n\t\t\t\t// to reliably determine the country\n\t\t\t\t// the phone number belongs to.\n\t\t\t\t// Therefore, in cases of such ambiguity,\n\t\t\t\t// each time something is input,\n\t\t\t\t// try to determine the country\n\t\t\t\t// (if it's not determined yet).\n\t\t\t\telse if (!this.country) {\n\t\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Some national prefixes are substrings of other national prefixes\n\t\t\t\t// (for the same country), therefore try to extract national prefix each time\n\t\t\t\t// because a longer national prefix might be available at some point in time.\n\n\t\t\t\tvar previous_national_prefix = this.national_prefix;\n\t\t\t\tthis.national_number = this.national_prefix + this.national_number;\n\n\t\t\t\t// Possibly extract a national prefix\n\t\t\t\tthis.extract_national_prefix();\n\n\t\t\t\tif (this.national_prefix !== previous_national_prefix) {\n\t\t\t\t\t// National number has changed\n\t\t\t\t\t// (due to another national prefix been extracted)\n\t\t\t\t\t// therefore national number has changed\n\t\t\t\t\t// therefore reset all previous formatting data.\n\t\t\t\t\t// (and leading digits matching state)\n\t\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.should_format()) {\n\t\t\t\treturn this.format_as_non_formatted_number();\n\t\t\t}\n\n\t\t\t// Check the available phone number formats\n\t\t\t// based on the currently available leading digits.\n\t\t\tthis.match_formats_by_leading_digits();\n\n\t\t\t// Format the phone number (given the next digits)\n\t\t\tvar formatted_national_phone_number = this.format_national_phone_number(input);\n\n\t\t\t// If the phone number could be formatted,\n\t\t\t// then return it, possibly prepending with country phone code\n\t\t\t// (for international phone numbers only)\n\t\t\tif (formatted_national_phone_number) {\n\t\t\t\treturn this.full_phone_number(formatted_national_phone_number);\n\t\t\t}\n\n\t\t\t// If the phone number couldn't be formatted,\n\t\t\t// then just fall back to the raw phone number.\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_as_non_formatted_number',\n\t\tvalue: function format_as_non_formatted_number() {\n\t\t\tif (this.is_international() && this.countryCallingCode) {\n\t\t\t\tif (this.national_number) {\n\t\t\t\t\t// For convenience, the public `.template` property\n\t\t\t\t\t// contains the whole international number\n\t\t\t\t\t// if the phone number being input is international:\n\t\t\t\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\n\t\t\t\t\t// a spacebar and then the template for the national number digits.\n\t\t\t\t\tthis.template = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.countryCallingCode.length) + ' ' + repeat(DIGIT_PLACEHOLDER, this.national_number.length);\n\n\t\t\t\t\treturn '+' + this.countryCallingCode + ' ' + this.national_number;\n\t\t\t\t}\n\n\t\t\t\treturn '+' + this.countryCallingCode;\n\t\t\t}\n\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_national_phone_number',\n\t\tvalue: function format_national_phone_number(next_digits) {\n\t\t\t// Format the next phone number digits\n\t\t\t// using the previously chosen phone number format.\n\t\t\t//\n\t\t\t// This is done here because if `attempt_to_format_complete_phone_number`\n\t\t\t// was placed before this call then the `template`\n\t\t\t// wouldn't reflect the situation correctly (and would therefore be inconsistent)\n\t\t\t//\n\t\t\tvar national_number_formatted_with_previous_format = void 0;\n\t\t\tif (this.chosen_format) {\n\t\t\t\tnational_number_formatted_with_previous_format = this.format_next_national_number_digits(next_digits);\n\t\t\t}\n\n\t\t\t// See if the input digits can be formatted properly already. If not,\n\t\t\t// use the results from format_next_national_number_digits(), which does formatting\n\t\t\t// based on the formatting pattern chosen.\n\n\t\t\tvar formatted_number = this.attempt_to_format_complete_phone_number();\n\n\t\t\t// Just because a phone number doesn't have a suitable format\n\t\t\t// that doesn't mean that the phone is invalid\n\t\t\t// because phone number formats only format phone numbers,\n\t\t\t// they don't validate them and some (rare) phone numbers\n\t\t\t// are meant to stay non-formatted.\n\t\t\tif (formatted_number) {\n\t\t\t\t// if (this.country)\n\t\t\t\t// {\n\t\t\t\t// \tthis.valid = true\n\t\t\t\t// }\n\n\t\t\t\treturn formatted_number;\n\t\t\t}\n\n\t\t\t// For some phone number formats national prefix\n\n\t\t\t// If the previously chosen phone number format\n\t\t\t// didn't match the next (current) digit being input\n\t\t\t// (leading digits pattern didn't match).\n\t\t\tif (this.choose_another_format()) {\n\t\t\t\t// And a more appropriate phone number format\n\t\t\t\t// has been chosen for these `leading digits`,\n\t\t\t\t// then format the national phone number (so far)\n\t\t\t\t// using the newly selected phone number pattern.\n\n\t\t\t\t// Will return `undefined` if it couldn't format\n\t\t\t\t// the supplied national number\n\t\t\t\t// using the selected phone number pattern.\n\n\t\t\t\treturn this.reformat_national_number();\n\t\t\t}\n\n\t\t\t// If could format the next (current) digit\n\t\t\t// using the previously chosen phone number format\n\t\t\t// then return the formatted number so far.\n\n\t\t\t// If no new phone number format could be chosen,\n\t\t\t// and couldn't format the supplied national number\n\t\t\t// using the selected phone number pattern,\n\t\t\t// then it will return `undefined`.\n\n\t\t\treturn national_number_formatted_with_previous_format;\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset() {\n\t\t\t// Input stripped of non-phone-number characters.\n\t\t\t// Can only contain a possible leading '+' sign and digits.\n\t\t\tthis.parsed_input = '';\n\n\t\t\tthis.current_output = '';\n\n\t\t\t// This contains the national prefix that has been extracted. It contains only\n\t\t\t// digits without formatting.\n\t\t\tthis.national_prefix = '';\n\n\t\t\tthis.national_number = '';\n\n\t\t\tthis.reset_countriness();\n\n\t\t\tthis.reset_format();\n\n\t\t\t// this.valid = false\n\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'reset_country',\n\t\tvalue: function reset_country() {\n\t\t\tif (this.is_international()) {\n\t\t\t\tthis.country = undefined;\n\t\t\t} else {\n\t\t\t\tthis.country = this.default_country;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_countriness',\n\t\tvalue: function reset_countriness() {\n\t\t\tthis.reset_country();\n\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.metadata.country(this.default_country);\n\t\t\t\tthis.countryCallingCode = this.metadata.countryCallingCode();\n\n\t\t\t\tthis.initialize_phone_number_formats_for_this_country_calling_code();\n\t\t\t} else {\n\t\t\t\tthis.metadata.country(undefined);\n\t\t\t\tthis.countryCallingCode = undefined;\n\n\t\t\t\tthis.available_formats = [];\n\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_format',\n\t\tvalue: function reset_format() {\n\t\t\tthis.chosen_format = undefined;\n\t\t\tthis.template = undefined;\n\t\t\tthis.partially_populated_template = undefined;\n\t\t\tthis.last_match_position = -1;\n\t\t}\n\n\t\t// Format each digit of national phone number (so far)\n\t\t// using the newly selected phone number pattern.\n\n\t}, {\n\t\tkey: 'reformat_national_number',\n\t\tvalue: function reformat_national_number() {\n\t\t\t// Format each digit of national phone number (so far)\n\t\t\t// using the selected phone number pattern.\n\t\t\treturn this.format_next_national_number_digits(this.national_number);\n\t\t}\n\t}, {\n\t\tkey: 'initialize_phone_number_formats_for_this_country_calling_code',\n\t\tvalue: function initialize_phone_number_formats_for_this_country_calling_code() {\n\t\t\t// Get all \""eligible\"" phone number formats for this country\n\t\t\tthis.available_formats = this.metadata.formats().filter(function (format) {\n\t\t\t\treturn ELIGIBLE_FORMAT_PATTERN.test(format.internationalFormat());\n\t\t\t});\n\n\t\t\tthis.matching_formats = this.available_formats;\n\t\t}\n\t}, {\n\t\tkey: 'match_formats_by_leading_digits',\n\t\tvalue: function match_formats_by_leading_digits() {\n\t\t\tvar leading_digits = this.national_number;\n\n\t\t\t// \""leading digits\"" pattern list starts with\n\t\t\t// one of a maximum length of 3 digits,\n\t\t\t// and then with each additional digit\n\t\t\t// a more precise \""leading digits\"" pattern is specified.\n\n\t\t\tvar index_of_leading_digits_pattern = leading_digits.length - MIN_LEADING_DIGITS_LENGTH;\n\n\t\t\tif (index_of_leading_digits_pattern < 0) {\n\t\t\t\tindex_of_leading_digits_pattern = 0;\n\t\t\t}\n\n\t\t\tthis.matching_formats = this.matching_formats.filter(function (format) {\n\t\t\t\tvar leading_digits_pattern_count = format.leadingDigitsPatterns().length;\n\n\t\t\t\t// Keep everything that isn't restricted by leading digits.\n\t\t\t\tif (leading_digits_pattern_count === 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar leading_digits_pattern_index = Math.min(index_of_leading_digits_pattern, leading_digits_pattern_count - 1);\n\t\t\t\tvar leading_digits_pattern = format.leadingDigitsPatterns()[leading_digits_pattern_index];\n\n\t\t\t\t// Brackets are required for `^` to be applied to\n\t\t\t\t// all or-ed (`|`) parts, not just the first one.\n\t\t\t\treturn new RegExp('^(' + leading_digits_pattern + ')').test(leading_digits);\n\t\t\t});\n\n\t\t\t// If there was a phone number format chosen\n\t\t\t// and it no longer holds given the new leading digits then reset it.\n\t\t\t// The test for this `if` condition is marked as:\n\t\t\t// \""Reset a chosen format when it no longer holds given the new leading digits\"".\n\t\t\t// To construct a valid test case for this one can find a country\n\t\t\t// in `PhoneNumberMetadata.xml` yielding one format for 3 `<leadingDigits>`\n\t\t\t// and yielding another format for 4 `<leadingDigits>` (Australia in this case).\n\t\t\tif (this.chosen_format && this.matching_formats.indexOf(this.chosen_format) === -1) {\n\t\t\t\tthis.reset_format();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'should_format',\n\t\tvalue: function should_format() {\n\t\t\t// Start matching any formats at all when the national number\n\t\t\t// entered so far is at least 3 digits long,\n\t\t\t// otherwise format matching would give false negatives\n\t\t\t// like when the digits entered so far are `2`\n\t\t\t// and the leading digits pattern is `21` –\n\t\t\t// it's quite obvious in this case that the format could be the one\n\t\t\t// but due to the absence of further digits it would give false negative.\n\t\t\t//\n\t\t\t// Google could have provided leading digits patterns starting\n\t\t\t// with a single digit but they chose not to (for whatever reasons).\n\t\t\t//\n\t\t\treturn this.national_number >= MIN_LEADING_DIGITS_LENGTH;\n\t\t}\n\n\t\t// Check to see if there is an exact pattern match for these digits. If so, we\n\t\t// should use this instead of any other formatting template whose\n\t\t// `leadingDigitsPattern` also matches the input.\n\n\t}, {\n\t\tkey: 'attempt_to_format_complete_phone_number',\n\t\tvalue: function attempt_to_format_complete_phone_number() {\n\t\t\tfor (var _iterator = this.matching_formats, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\t\t\tvar _ref;\n\n\t\t\t\tif (_isArray) {\n\t\t\t\t\tif (_i >= _iterator.length) break;\n\t\t\t\t\t_ref = _iterator[_i++];\n\t\t\t\t} else {\n\t\t\t\t\t_i = _iterator.next();\n\t\t\t\t\tif (_i.done) break;\n\t\t\t\t\t_ref = _i.value;\n\t\t\t\t}\n\n\t\t\t\tvar format = _ref;\n\n\t\t\t\tvar matcher = new RegExp('^(?:' + format.pattern() + ')$');\n\n\t\t\t\tif (!matcher.test(this.national_number)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!this.is_format_applicable(format)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// To leave the formatter in a consistent state\n\t\t\t\tthis.reset_format();\n\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\tvar formatted_number = format_national_number_using_format(this.national_number, format, this.is_international(), this.national_prefix.length > 0, this.metadata);\n\n\t\t\t\t// Set `this.template` and `this.partially_populated_template`.\n\t\t\t\t//\n\t\t\t\t// `else` case doesn't ever happen\n\t\t\t\t// with the current metadata,\n\t\t\t\t// but just in case.\n\t\t\t\t//\n\t\t\t\t/* istanbul ignore else */\n\t\t\t\tif (this.create_formatting_template(format)) {\n\t\t\t\t\t// Populate `this.partially_populated_template`\n\t\t\t\t\tthis.reformat_national_number();\n\t\t\t\t} else {\n\t\t\t\t\t// Prepend `+CountryCode` in case of an international phone number\n\t\t\t\t\tvar full_number = this.full_phone_number(formatted_number);\n\t\t\t\t\tthis.template = full_number.replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER);\n\t\t\t\t\tthis.partially_populated_template = full_number;\n\t\t\t\t}\n\n\t\t\t\treturn formatted_number;\n\t\t\t}\n\t\t}\n\n\t\t// Prepends `+CountryCode` in case of an international phone number\n\n\t}, {\n\t\tkey: 'full_phone_number',\n\t\tvalue: function full_phone_number(formatted_national_number) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn '+' + this.countryCallingCode + ' ' + formatted_national_number;\n\t\t\t}\n\n\t\t\treturn formatted_national_number;\n\t\t}\n\n\t\t// Extracts the country calling code from the beginning\n\t\t// of the entered `national_number` (so far),\n\t\t// and places the remaining input into the `national_number`.\n\n\t}, {\n\t\tkey: 'extract_country_calling_code',\n\t\tvalue: function extract_country_calling_code() {\n\t\t\tvar _parse_national_numbe = parse_national_number_and_country_calling_code(this.parsed_input, this.default_country, this.metadata),\n\t\t\t    countryCallingCode = _parse_national_numbe.countryCallingCode,\n\t\t\t    number = _parse_national_numbe.number;\n\n\t\t\tif (!countryCallingCode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.countryCallingCode = countryCallingCode;\n\t\t\tthis.national_number = number;\n\n\t\t\tthis.metadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t\t\treturn this.metadata.selectedCountry() !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'extract_national_prefix',\n\t\tvalue: function extract_national_prefix() {\n\t\t\tthis.national_prefix = '';\n\n\t\t\tif (!this.metadata.selectedCountry()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only strip national prefixes for non-international phone numbers\n\t\t\t// because national prefixes can't be present in international phone numbers.\n\t\t\t// Otherwise, while forgiving, it would parse a NANPA number `+1 1877 215 5230`\n\t\t\t// first to `1877 215 5230` and then, stripping the leading `1`, to `877 215 5230`,\n\t\t\t// and then it would assume that's a valid number which it isn't.\n\t\t\t// So no forgiveness for grandmas here.\n\t\t\t// The issue asking for this fix:\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/159\n\n\t\t\tvar _strip_national_prefi = strip_national_prefix_and_carrier_code(this.national_number, this.metadata),\n\t\t\t    potential_national_number = _strip_national_prefi.number;\n\n\t\t\t// We require that the NSN remaining after stripping the national prefix and\n\t\t\t// carrier code be long enough to be a possible length for the region.\n\t\t\t// Otherwise, we don't do the stripping, since the original number could be\n\t\t\t// a valid short number.\n\n\n\t\t\tif (!this.metadata.possibleLengths() || this.is_possible_number(this.national_number) && !this.is_possible_number(potential_national_number)) {\n\t\t\t\t// Verify the parsed national (significant) number for this country\n\t\t\t\tvar national_number_rule = new RegExp(this.metadata.nationalNumberPattern());\n\t\t\t\t//\n\t\t\t\t// If the original number (before stripping national prefix) was viable,\n\t\t\t\t// and the resultant number is not, then prefer the original phone number.\n\t\t\t\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t\t\t\t// a national prefix and a leading digit of a valid national phone number,\n\t\t\t\t// like `8` is the national prefix for Russia and both\n\t\t\t\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t\t\t\tif (matches_entirely(this.national_number, national_number_rule) && !matches_entirely(potential_national_number, national_number_rule)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.national_prefix = this.national_number.slice(0, this.national_number.length - potential_national_number.length);\n\t\t\tthis.national_number = potential_national_number;\n\n\t\t\treturn this.national_prefix;\n\t\t}\n\t}, {\n\t\tkey: 'is_possible_number',\n\t\tvalue: function is_possible_number(number) {\n\t\t\tvar validation_result = check_number_length_for_type(number, undefined, this.metadata);\n\t\t\tswitch (validation_result) {\n\t\t\t\tcase 'IS_POSSIBLE':\n\t\t\t\t\treturn true;\n\t\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t\t\t// \treturn !this.is_international()\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'choose_another_format',\n\t\tvalue: function choose_another_format() {\n\t\t\t// When there are multiple available formats, the formatter uses the first\n\t\t\t// format where a formatting template could be created.\n\t\t\tfor (var _iterator2 = this.matching_formats, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n\t\t\t\tvar _ref2;\n\n\t\t\t\tif (_isArray2) {\n\t\t\t\t\tif (_i2 >= _iterator2.length) break;\n\t\t\t\t\t_ref2 = _iterator2[_i2++];\n\t\t\t\t} else {\n\t\t\t\t\t_i2 = _iterator2.next();\n\t\t\t\t\tif (_i2.done) break;\n\t\t\t\t\t_ref2 = _i2.value;\n\t\t\t\t}\n\n\t\t\t\tvar format = _ref2;\n\n\t\t\t\t// If this format is currently being used\n\t\t\t\t// and is still possible, then stick to it.\n\t\t\t\tif (this.chosen_format === format) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If this `format` is suitable for \""as you type\"",\n\t\t\t\t// then extract the template from this format\n\t\t\t\t// and use it to format the phone number being input.\n\n\t\t\t\tif (!this.is_format_applicable(format)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!this.create_formatting_template(format)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t// With a new formatting template, the matched position\n\t\t\t\t// using the old template needs to be reset.\n\t\t\t\tthis.last_match_position = -1;\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// No format matches the phone number,\n\t\t\t// therefore set `country` to `undefined`\n\t\t\t// (or to the default country).\n\t\t\tthis.reset_country();\n\n\t\t\t// No format matches the national phone number entered\n\t\t\tthis.reset_format();\n\t\t}\n\t}, {\n\t\tkey: 'is_format_applicable',\n\t\tvalue: function is_format_applicable(format) {\n\t\t\t// If national prefix is mandatory for this phone number format\n\t\t\t// and the user didn't input the national prefix,\n\t\t\t// then this phone number format isn't suitable.\n\t\t\tif (!this.is_international() && !this.national_prefix && format.nationalPrefixIsMandatoryWhenFormatting()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t}, {\n\t\tkey: 'create_formatting_template',\n\t\tvalue: function create_formatting_template(format) {\n\t\t\t// The formatter doesn't format numbers when numberPattern contains '|', e.g.\n\t\t\t// (20|3)\\d{4}. In those cases we quickly return.\n\t\t\t// (Though there's no such format in current metadata)\n\t\t\t/* istanbul ignore if */\n\t\t\tif (format.pattern().indexOf('|') >= 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get formatting template for this phone number format\n\t\t\tvar template = this.get_template_for_phone_number_format_pattern(format);\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (!template) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This one is for national number only\n\t\t\tthis.partially_populated_template = template;\n\n\t\t\t// For convenience, the public `.template` property\n\t\t\t// contains the whole international number\n\t\t\t// if the phone number being input is international:\n\t\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\n\t\t\t// a spacebar and then the template for the formatted national number.\n\t\t\tif (this.is_international()) {\n\t\t\t\tthis.template = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.countryCallingCode.length) + ' ' + template;\n\t\t\t}\n\t\t\t// For local numbers, replace national prefix\n\t\t\t// with a digit placeholder.\n\t\t\telse {\n\t\t\t\t\tthis.template = template.replace(/\\d/g, DIGIT_PLACEHOLDER);\n\t\t\t\t}\n\n\t\t\t// This one is for the full phone number\n\t\t\treturn this.template;\n\t\t}\n\n\t\t// Generates formatting template for a phone number format\n\n\t}, {\n\t\tkey: 'get_template_for_phone_number_format_pattern',\n\t\tvalue: function get_template_for_phone_number_format_pattern(format) {\n\t\t\t// A very smart trick by the guys at Google\n\t\t\tvar number_pattern = format.pattern()\n\t\t\t// Replace anything in the form of [..] with \\d\n\t\t\t.replace(CHARACTER_CLASS_PATTERN, '\\\\d')\n\t\t\t// Replace any standalone digit (not the one in `{}`) with \\d\n\t\t\t.replace(STANDALONE_DIGIT_PATTERN, '\\\\d');\n\n\t\t\t// This match will always succeed,\n\t\t\t// because the \""longest dummy phone number\""\n\t\t\t// has enough length to accomodate any possible\n\t\t\t// national phone number format pattern.\n\t\t\tvar dummy_phone_number_matching_format_pattern = LONGEST_DUMMY_PHONE_NUMBER.match(number_pattern)[0];\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (this.national_number.length > dummy_phone_number_matching_format_pattern.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Prepare the phone number format\n\t\t\tvar number_format = this.get_format_format(format);\n\n\t\t\t// Get a formatting template which can be used to efficiently format\n\t\t\t// a partial number where digits are added one by one.\n\n\t\t\t// Below `strict_pattern` is used for the\n\t\t\t// regular expression (with `^` and `$`).\n\t\t\t// This wasn't originally in Google's `libphonenumber`\n\t\t\t// and I guess they don't really need it\n\t\t\t// because they're not using \""templates\"" to format phone numbers\n\t\t\t// but I added `strict_pattern` after encountering\n\t\t\t// South Korean phone number formatting bug.\n\t\t\t//\n\t\t\t// Non-strict regular expression bug demonstration:\n\t\t\t//\n\t\t\t// this.national_number : `111111111` (9 digits)\n\t\t\t//\n\t\t\t// number_pattern : (\\d{2})(\\d{3,4})(\\d{4})\n\t\t\t// number_format : `$1 $2 $3`\n\t\t\t// dummy_phone_number_matching_format_pattern : `9999999999` (10 digits)\n\t\t\t//\n\t\t\t// '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \""99 9999 9999\""\n\t\t\t//\n\t\t\t// template : xx xxxx xxxx\n\t\t\t//\n\t\t\t// But the correct template in this case is `xx xxx xxxx`.\n\t\t\t// The template was generated incorrectly because of the\n\t\t\t// `{3,4}` variability in the `number_pattern`.\n\t\t\t//\n\t\t\t// The fix is, if `this.national_number` has already sufficient length\n\t\t\t// to satisfy the `number_pattern` completely then `this.national_number` is used\n\t\t\t// instead of `dummy_phone_number_matching_format_pattern`.\n\n\t\t\tvar strict_pattern = new RegExp('^' + number_pattern + '$');\n\t\t\tvar national_number_dummy_digits = this.national_number.replace(/\\d/g, DUMMY_DIGIT);\n\n\t\t\t// If `this.national_number` has already sufficient length\n\t\t\t// to satisfy the `number_pattern` completely then use it\n\t\t\t// instead of `dummy_phone_number_matching_format_pattern`.\n\t\t\tif (strict_pattern.test(national_number_dummy_digits)) {\n\t\t\t\tdummy_phone_number_matching_format_pattern = national_number_dummy_digits;\n\t\t\t}\n\n\t\t\t// Generate formatting template for this phone number format\n\t\t\treturn dummy_phone_number_matching_format_pattern\n\t\t\t// Format the dummy phone number according to the format\n\t\t\t.replace(new RegExp(number_pattern), number_format)\n\t\t\t// Replace each dummy digit with a DIGIT_PLACEHOLDER\n\t\t\t.replace(DUMMY_DIGIT_MATCHER, DIGIT_PLACEHOLDER);\n\t\t}\n\t}, {\n\t\tkey: 'format_next_national_number_digits',\n\t\tvalue: function format_next_national_number_digits(digits) {\n\t\t\t// Using `.split('')` to iterate through a string here\n\t\t\t// to avoid requiring `Symbol.iterator` polyfill.\n\t\t\t// `.split('')` is generally not safe for Unicode,\n\t\t\t// but in this particular case for `digits` it is safe.\n\t\t\t// for (const digit of digits)\n\t\t\tfor (var _iterator3 = digits.split(''), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n\t\t\t\tvar _ref3;\n\n\t\t\t\tif (_isArray3) {\n\t\t\t\t\tif (_i3 >= _iterator3.length) break;\n\t\t\t\t\t_ref3 = _iterator3[_i3++];\n\t\t\t\t} else {\n\t\t\t\t\t_i3 = _iterator3.next();\n\t\t\t\t\tif (_i3.done) break;\n\t\t\t\t\t_ref3 = _i3.value;\n\t\t\t\t}\n\n\t\t\t\tvar digit = _ref3;\n\n\t\t\t\t// If there is room for more digits in current `template`,\n\t\t\t\t// then set the next digit in the `template`,\n\t\t\t\t// and return the formatted digits so far.\n\n\t\t\t\t// If more digits are entered than the current format could handle\n\t\t\t\tif (this.partially_populated_template.slice(this.last_match_position + 1).search(DIGIT_PLACEHOLDER_MATCHER) === -1) {\n\t\t\t\t\t// Reset the current format,\n\t\t\t\t\t// so that the new format will be chosen\n\t\t\t\t\t// in a subsequent `this.choose_another_format()` call\n\t\t\t\t\t// later in code.\n\t\t\t\t\tthis.chosen_format = undefined;\n\t\t\t\t\tthis.template = undefined;\n\t\t\t\t\tthis.partially_populated_template = undefined;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.last_match_position = this.partially_populated_template.search(DIGIT_PLACEHOLDER_MATCHER);\n\t\t\t\tthis.partially_populated_template = this.partially_populated_template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n\t\t\t}\n\n\t\t\t// Return the formatted phone number so far\n\t\t\treturn close_dangling_braces(this.partially_populated_template, this.last_match_position + 1).replace(DIGIT_PLACEHOLDER_MATCHER_GLOBAL, ' ');\n\t\t}\n\t}, {\n\t\tkey: 'is_international',\n\t\tvalue: function is_international() {\n\t\t\treturn this.parsed_input && this.parsed_input[0] === '+';\n\t\t}\n\t}, {\n\t\tkey: 'get_format_format',\n\t\tvalue: function get_format_format(format) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn local_to_international_style(format.internationalFormat());\n\t\t\t}\n\n\t\t\t// If national prefix formatting rule is set\n\t\t\t// for this phone number format\n\t\t\tif (format.nationalPrefixFormattingRule()) {\n\t\t\t\t// If the user did input the national prefix\n\t\t\t\t// (or if the national prefix formatting rule does not require national prefix)\n\t\t\t\t// then maybe make it part of the phone number template\n\t\t\t\tif (this.national_prefix || !format.usesNationalPrefix()) {\n\t\t\t\t\t// Make the national prefix part of the phone number template\n\t\t\t\t\treturn format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn format.format();\n\t\t}\n\n\t\t// Determines the country of the phone number\n\t\t// entered so far based on the country phone code\n\t\t// and the national phone number.\n\n\t}, {\n\t\tkey: 'determine_the_country',\n\t\tvalue: function determine_the_country() {\n\t\t\tthis.country = find_country_code(this.countryCallingCode, this.national_number, this.metadata);\n\t\t}\n\t}, {\n\t\tkey: 'getNationalNumber',\n\t\tvalue: function getNationalNumber() {\n\t\t\treturn this.national_number;\n\t\t}\n\t}]);\n\n\treturn AsYouType;\n}();\n\nexport default AsYouType;\n\n\nexport function close_dangling_braces(template, cut_before) {\n\tvar retained_template = template.slice(0, cut_before);\n\n\tvar opening_braces = count_occurences('(', retained_template);\n\tvar closing_braces = count_occurences(')', retained_template);\n\n\tvar dangling_braces = opening_braces - closing_braces;\n\n\twhile (dangling_braces > 0 && cut_before < template.length) {\n\t\tif (template[cut_before] === ')') {\n\t\t\tdangling_braces--;\n\t\t}\n\t\tcut_before++;\n\t}\n\n\treturn template.slice(0, cut_before);\n}\n\n// Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\nexport function count_occurences(symbol, string) {\n\tvar count = 0;\n\n\t// Using `.split('')` to iterate through a string here\n\t// to avoid requiring `Symbol.iterator` polyfill.\n\t// `.split('')` is generally not safe for Unicode,\n\t// but in this particular case for counting brackets it is safe.\n\t// for (const character of string)\n\tfor (var _iterator4 = string.split(''), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n\t\tvar _ref4;\n\n\t\tif (_isArray4) {\n\t\t\tif (_i4 >= _iterator4.length) break;\n\t\t\t_ref4 = _iterator4[_i4++];\n\t\t} else {\n\t\t\t_i4 = _iterator4.next();\n\t\t\tif (_i4.done) break;\n\t\t\t_ref4 = _i4.value;\n\t\t}\n\n\t\tvar character = _ref4;\n\n\t\tif (character === symbol) {\n\t\t\tcount++;\n\t\t}\n\t}\n\n\treturn count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nexport function repeat(string, times) {\n\tif (times < 1) {\n\t\treturn '';\n\t}\n\n\tvar result = '';\n\n\twhile (times > 1) {\n\t\tif (times & 1) {\n\t\t\tresult += string;\n\t\t}\n\n\t\ttimes >>= 1;\n\t\tstring += string;\n\t}\n\n\treturn result + string;\n}\n//# sourceMappingURL=AsYouType.js.map"",""import Metadata from './metadata';\n\nexport default function (country, metadata) {\n\tmetadata = new Metadata(metadata);\n\n\tif (!metadata.hasCountry(country)) {\n\t\tthrow new Error('Unknown country: ' + country);\n\t}\n\n\treturn metadata.country(country).countryCallingCode();\n}\n//# sourceMappingURL=getCountryCallingCode.js.map"",""// Javascript doesn't support UTF-8 regular expressions.\n// So mimicking them here.\n\n// Copy-pasted from `PhoneNumberMatcher.js`.\n\n/**\r\n * \""\\p{L}\"" is any kind of letter from any language (\""Letter\"").\r\n *\r\n * Javascript doesn't support Unicode Regular Expressions\r\n * so substituting it with this explicit set of characters.\r\n *\r\n * https://stackoverflow.com/questions/13210194/javascript-regex-equivalent-of-a-za-z-using-pl\r\n * https://github.com/danielberndt/babel-plugin-utf-8-regex/blob/master/src/transformer.js\r\n */\nexport var _pL = 'A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC';\nvar pL = '[' + _pL + ']';\nvar pL_regexp = new RegExp(pL);\n\nvar _pSc = '$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20B9\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6';\nvar pSc = '[' + _pSc + ']';\nvar pSc_regexp = new RegExp(pSc);\n\nvar _pMn = '\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u08FE\\u0900-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1BAB\\u1BE6\\u1BE8\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1DC0-\\u1DE6\\u1DFC-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099\\u309A\\uA66F\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEC\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26';\nvar pMn = '[' + _pMn + ']';\nvar pMn_regexp = new RegExp(pMn);\n\nvar _InBasic_Latin = '\\0-\\x7F';\nvar _InLatin_1_Supplement = '\\x80-\\xFF';\nvar _InLatin_Extended_A = '\\u0100-\\u017F';\nvar _InLatin_Extended_Additional = '\\u1E00-\\u1EFF';\nvar _InLatin_Extended_B = '\\u0180-\\u024F';\nvar _InCombining_Diacritical_Marks = '\\u0300-\\u036F';\n\nvar latinLetterRegexp = new RegExp('[' + _InBasic_Latin + _InLatin_1_Supplement + _InLatin_Extended_A + _InLatin_Extended_Additional + _InLatin_Extended_B + _InCombining_Diacritical_Marks + ']');\n\n/**\r\n * Helper method to determine if a character is a Latin-script letter or not.\r\n * For our purposes, combining marks should also return true since we assume\r\n * they have been added to a preceding Latin character.\r\n */\nexport function isLatinLetter(letter) {\n\t// Combining marks are a subset of non-spacing-mark.\n\tif (!pL_regexp.test(letter) && !pMn_regexp.test(letter)) {\n\t\treturn false;\n\t}\n\n\treturn latinLetterRegexp.test(letter);\n}\n\nexport function isInvalidPunctuationSymbol(character) {\n\treturn character === '%' || pSc_regexp.test(character);\n}\n//# sourceMappingURL=utf-8.common.js.map"",""// Copy-pasted from `PhoneNumberMatcher.js`.\n\nimport { PLUS_CHARS } from './common';\n\nimport { isLatinLetter, isInvalidPunctuationSymbol } from './utf-8.common';\n\nexport var OPENING_PARENS = '(\\\\[\\uFF08\\uFF3B';\nexport var CLOSING_PARENS = ')\\\\]\\uFF09\\uFF3D';\n\nexport var LEAD_CLASS = '[' + OPENING_PARENS + PLUS_CHARS + ']';\n\n// Punctuation that may be at the start of a phone number - brackets and plus signs.\nvar LEAD_CLASS_LEADING = new RegExp('^' + LEAD_CLASS);\n\nexport function isValidCandidate(candidate, offset, text) {\n\t// If the candidate is not at the start of the text,\n\t// and does not start with phone-number punctuation,\n\t// check the previous character.\n\tif (offset > 0 && !LEAD_CLASS_LEADING.test(candidate)) {\n\t\tvar previousChar = text[offset - 1];\n\t\t// We return null if it is a latin letter or an invalid punctuation symbol.\n\t\tif (isInvalidPunctuationSymbol(previousChar) || isLatinLetter(previousChar)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tvar lastCharIndex = offset + candidate.length;\n\tif (lastCharIndex < text.length) {\n\t\tvar nextChar = text[lastCharIndex];\n\t\tif (isInvalidPunctuationSymbol(nextChar) || isLatinLetter(nextChar)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n//# sourceMappingURL=findNumbers.common.js.map"",""var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\""value\"" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\""Cannot call a class as a function\""); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport parse from './parse';\nimport Metadata from './metadata';\n\nimport { PLUS_CHARS, VALID_PUNCTUATION, VALID_DIGITS,\n// OPENING_BRACKETS,\nWHITESPACE, create_extension_pattern } from './common';\n\nimport { isValidCandidate } from './findNumbers.common';\n\n// Copy-pasted from `./parse.js`.\nvar VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\nvar EXTN_PATTERNS_FOR_PARSING = create_extension_pattern('parsing');\n\nvar WHITESPACE_IN_THE_BEGINNING_PATTERN = new RegExp('^[' + WHITESPACE + ']+');\nvar WHITESPACE_IN_THE_END_PATTERN = new RegExp('[' + WHITESPACE + ']+$');\n\n// // Regular expression for getting opening brackets for a valid number\n// // found using `PHONE_NUMBER_START_PATTERN` for prepending those brackets to the number.\n// const BEFORE_NUMBER_DIGITS_PUNCTUATION = new RegExp('[' + OPENING_BRACKETS + ']+' + '[' + WHITESPACE + ']*' + '$')\n\nvar VALID_PRECEDING_CHARACTER_PATTERN = /[^a-zA-Z0-9]/;\n\nexport default function findPhoneNumbers(arg_1, arg_2, arg_3, arg_4) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4),\n\t    text = _sort_out_arguments.text,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tvar search = new PhoneNumberSearch(text, options, metadata.metadata);\n\n\tvar phones = [];\n\n\twhile (search.hasNext()) {\n\t\tphones.push(search.next());\n\t}\n\n\treturn phones;\n}\n\n/**\r\n * @return ES6 `for ... of` iterator.\r\n */\nexport function searchPhoneNumbers(arg_1, arg_2, arg_3, arg_4) {\n\tvar _sort_out_arguments2 = sort_out_arguments(arg_1, arg_2, arg_3, arg_4),\n\t    text = _sort_out_arguments2.text,\n\t    options = _sort_out_arguments2.options,\n\t    metadata = _sort_out_arguments2.metadata;\n\n\tvar search = new PhoneNumberSearch(text, options, metadata.metadata);\n\n\treturn _defineProperty({}, Symbol.iterator, function () {\n\t\treturn {\n\t\t\tnext: function next() {\n\t\t\t\tif (search.hasNext()) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: search.next()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdone: true\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t});\n}\n\n/**\r\n * Extracts a parseable phone number including any opening brackets, etc.\r\n * @param  {string} text - Input.\r\n * @return {object} `{ ?number, ?startsAt, ?endsAt }`.\r\n */\nexport var PhoneNumberSearch = function () {\n\tfunction PhoneNumberSearch(text) {\n\t\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar metadata = arguments[2];\n\n\t\t_classCallCheck(this, PhoneNumberSearch);\n\n\t\tthis.state = 'NOT_READY';\n\n\t\tthis.text = text;\n\t\tthis.options = options;\n\t\tthis.metadata = metadata;\n\n\t\tthis.regexp = new RegExp(VALID_PHONE_NUMBER +\n\t\t// Phone number extensions\n\t\t'(?:' + EXTN_PATTERNS_FOR_PARSING + ')?', 'ig');\n\n\t\t// this.searching_from = 0\n\t}\n\t// Iteration tristate.\n\n\n\t_createClass(PhoneNumberSearch, [{\n\t\tkey: 'find',\n\t\tvalue: function find() {\n\t\t\tvar matches = this.regexp.exec(this.text);\n\n\t\t\tif (!matches) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar number = matches[0];\n\t\t\tvar startsAt = matches.index;\n\n\t\t\tnumber = number.replace(WHITESPACE_IN_THE_BEGINNING_PATTERN, '');\n\t\t\tstartsAt += matches[0].length - number.length;\n\t\t\tnumber = number.replace(WHITESPACE_IN_THE_END_PATTERN, '');\n\n\t\t\t// Don't parse phone numbers which are non-phone numbers\n\t\t\t// due to being part of something else (e.g. a UUID).\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/213\n\t\t\t// Copy-pasted from Google's `PhoneNumberMatcher.js` (`.parseAndValidate()`).\n\t\t\tif (!this.options.extended && !isValidCandidate(number, startsAt, this.text)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// // Prepend any opening brackets left behind by the\n\t\t\t// // `PHONE_NUMBER_START_PATTERN` regexp.\n\t\t\t// const text_before_number = text.slice(this.searching_from, startsAt)\n\t\t\t// const full_number_starts_at = text_before_number.search(BEFORE_NUMBER_DIGITS_PUNCTUATION)\n\t\t\t// if (full_number_starts_at >= 0)\n\t\t\t// {\n\t\t\t// \tnumber   = text_before_number.slice(full_number_starts_at) + number\n\t\t\t// \tstartsAt = full_number_starts_at\n\t\t\t// }\n\t\t\t//\n\t\t\t// this.searching_from = matches.lastIndex\n\n\t\t\tvar result = parse(number, this.options, this.metadata);\n\n\t\t\tif (result.phone) {\n\t\t\t\tresult.startsAt = startsAt;\n\t\t\t\tresult.endsAt = startsAt + number.length;\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// Tail recursion.\n\t\t\t// Try the next one if this one is not a valid phone number.\n\t\t\treturn this.find();\n\t\t}\n\t}, {\n\t\tkey: 'hasNext',\n\t\tvalue: function hasNext() {\n\t\t\tif (this.state === 'NOT_READY') {\n\t\t\t\tthis.last_match = this.find();\n\n\t\t\t\tif (this.last_match) {\n\t\t\t\t\tthis.state = 'READY';\n\t\t\t\t} else {\n\t\t\t\t\tthis.state = 'DONE';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.state === 'READY';\n\t\t}\n\t}, {\n\t\tkey: 'next',\n\t\tvalue: function next() {\n\t\t\t// Check the state and find the next match as a side-effect if necessary.\n\t\t\tif (!this.hasNext()) {\n\t\t\t\tthrow new Error('No next element');\n\t\t\t}\n\n\t\t\t// Don't retain that memory any longer than necessary.\n\t\t\tvar result = this.last_match;\n\t\t\tthis.last_match = null;\n\t\t\tthis.state = 'NOT_READY';\n\t\t\treturn result;\n\t\t}\n\t}]);\n\n\treturn PhoneNumberSearch;\n}();\n\nexport function sort_out_arguments(arg_1, arg_2, arg_3, arg_4) {\n\tvar text = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `parse('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\ttext = arg_1;\n\t} else throw new TypeError('A text for parsing must be a string.');\n\n\t// If \""default country\"" argument is being passed\n\t// then move it to `options`.\n\t// `findNumbers('88005553535', 'RU', [options], metadata)`.\n\tif (typeof arg_2 === 'string') {\n\t\tif (arg_4) {\n\t\t\toptions = _extends({ defaultCountry: arg_2 }, arg_3);\n\t\t\tmetadata = arg_4;\n\t\t} else {\n\t\t\toptions = { defaultCountry: arg_2 };\n\t\t\tmetadata = arg_3;\n\t\t}\n\t}\n\t// No \""default country\"" argument is being passed.\n\t// Only international phone numbers are passed.\n\t// `findNumbers('+78005553535', [options], metadata)`.\n\telse {\n\t\t\tif (arg_3) {\n\t\t\t\toptions = arg_2;\n\t\t\t\tmetadata = arg_3;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_2;\n\t\t\t}\n\t\t}\n\n\tif (!options) {\n\t\toptions = {};\n\t}\n\n\t// // Apply default options.\n\t// if (options)\n\t// {\n\t// \toptions = { ...default_options, ...options }\n\t// }\n\t// else\n\t// {\n\t// \toptions = default_options\n\t// }\n\n\treturn { text: text, options: options, metadata: new Metadata(metadata) };\n}\n//# sourceMappingURL=findPhoneNumbers.js.map"",""import parse, { is_viable_phone_number } from './parse';\nimport get_number_type, { sort_out_arguments } from './types';\n\n// Checks if a given phone number is valid\n//\n// Example use cases:\n//\n// ```js\n// is_valid('8005553535', 'RU')\n// is_valid('8005553535', 'RU', metadata)\n// is_valid({ phone: '8005553535', country: 'RU' })\n// is_valid({ phone: '8005553535', country: 'RU' }, metadata)\n// is_valid('+78005553535')\n// is_valid('+78005553535', metadata)\n// ```\n//\nexport default function is_valid(arg_1, arg_2, arg_3) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (!input) {\n\t\treturn false;\n\t}\n\n\tif (!input.country) {\n\t\treturn false;\n\t}\n\n\tif (!metadata.hasCountry(input.country)) {\n\t\tthrow new Error('Unknown country: ' + input.country);\n\t}\n\n\tmetadata.country(input.country);\n\n\tif (metadata.hasTypes()) {\n\t\treturn get_number_type(input, metadata.metadata) !== undefined;\n\t}\n\n\treturn true;\n}\n//# sourceMappingURL=validate.js.map"",""module.exports = function cmp (a, b) {\n    var pa = a.split('.');\n    var pb = b.split('.');\n    for (var i = 0; i < 3; i++) {\n        var na = Number(pa[i]);\n        var nb = Number(pb[i]);\n        if (na > nb) return 1;\n        if (nb > na) return -1;\n        if (!isNaN(na) && isNaN(nb)) return 1;\n        if (isNaN(na) && !isNaN(nb)) return -1;\n    }\n    return 0;\n};\n"",""import metadata from './metadata.min.json'\r\n\r\nimport parseNumberCustom from './es6/parse'\r\nimport formatNumberCustom from './es6/format'\r\nimport getNumberTypeCustom from './es6/types'\r\nimport isValidNumberCustom from './es6/validate'\r\nimport findPhoneNumbersCustom, { searchPhoneNumbers as searchPhoneNumbersCustom, PhoneNumberSearch as PhoneNumberSearchCustom } from './es6/findPhoneNumbers'\r\nimport AsYouTypeCustom from './es6/AsYouType'\r\nimport getCountryCallingCodeCustom from './es6/getCountryCallingCode'\r\nexport { default as Metadata } from './es6/metadata'\r\nimport { getExtPrefix as getExtPrefixCustom } from './es6/metadata'\r\nimport { parseRFC3966 as parseRFC3966Custom, formatRFC3966 as formatRFC3966Custom } from './es6/RFC3966'\r\n\r\nexport function parseNumber()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn parseNumberCustom.apply(this, parameters)\r\n}\r\n\r\n// Deprecated: remove `parse()` export in 2.0.0.\r\n// (renamed to `parseNumber()`)\r\nexport function parse()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn parseNumberCustom.apply(this, parameters)\r\n}\r\n\r\nexport function formatNumber()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn formatNumberCustom.apply(this, parameters)\r\n}\r\n\r\n// Deprecated: remove `format()` export in 2.0.0.\r\n// (renamed to `formatNumber()`)\r\nexport function format()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn formatNumberCustom.apply(this, parameters)\r\n}\r\n\r\nexport function getNumberType()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn getNumberTypeCustom.apply(this, parameters)\r\n}\r\n\r\nexport function isValidNumber()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn isValidNumberCustom.apply(this, parameters)\r\n}\r\n\r\nexport function findPhoneNumbers()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn findPhoneNumbersCustom.apply(this, parameters)\r\n}\r\n\r\nexport function searchPhoneNumbers()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn searchPhoneNumbersCustom.apply(this, parameters)\r\n}\r\n\r\nexport function PhoneNumberSearch(text, options)\r\n{\r\n\tPhoneNumberSearchCustom.call(this, text, options, metadata)\r\n}\r\n\r\nPhoneNumberSearch.prototype = Object.create(PhoneNumberSearchCustom.prototype, {})\r\nPhoneNumberSearch.prototype.constructor = PhoneNumberSearch\r\n\r\nexport function AsYouType(country)\r\n{\r\n\tAsYouTypeCustom.call(this, country, metadata)\r\n}\r\n\r\nAsYouType.prototype = Object.create(AsYouTypeCustom.prototype, {})\r\nAsYouType.prototype.constructor = AsYouType\r\n\r\nexport function getExtPrefix()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn getExtPrefixCustom.apply(this, parameters)\r\n}\r\n\r\nexport function parseRFC3966()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn parseRFC3966Custom.apply(this, parameters)\r\n}\r\n\r\nexport function formatRFC3966()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn formatRFC3966Custom.apply(this, parameters)\r\n}\r\n\r\n// Deprecated: remove DIGITS export in 2.0.0 (unused).\r\nexport { DIGIT_MAPPINGS as DIGITS } from './es6/common'\r\n\r\n// Deprecated: remove this in 2.0.0 and make `custom.js` in ES6\r\n// (the old `custom.js` becomes `custom.commonjs.js`).\r\nexport { default as parseCustom } from './es6/parse'\r\nexport { default as formatCustom } from './es6/format'\r\nexport { default as isValidNumberCustom }    from './es6/validate'\r\nexport { default as findPhoneNumbersCustom } from './es6/findPhoneNumbers'\r\nexport { searchPhoneNumbers as searchPhoneNumbersCustom } from './es6/findPhoneNumbers'\r\nexport { PhoneNumberSearch as PhoneNumberSearchCustom } from './es6/findPhoneNumbers'\r\nexport { default as getNumberTypeCustom }    from './es6/types'\r\nexport { default as getCountryCallingCodeCustom } from './es6/getCountryCallingCode'\r\n\r\nexport\r\n{\r\n\tdefault as AsYouTypeCustom,\r\n\t// `DIGIT_PLACEHOLDER` is used by `react-phone-number-input`.\r\n\tDIGIT_PLACEHOLDER\r\n}\r\nfrom './es6/AsYouType'\r\n\r\nexport function getCountryCallingCode(country)\r\n{\r\n\treturn getCountryCallingCodeCustom(country, metadata)\r\n}\r\n\r\n// `getPhoneCode` name is deprecated, use `getCountryCallingCode` instead.\r\nexport function getPhoneCode(country)\r\n{\r\n\treturn getCountryCallingCode(country)\r\n}\r\n\r\n// `getPhoneCodeCustom` name is deprecated, use `getCountryCallingCodeCustom` instead.\r\nexport function getPhoneCodeCustom(country, metadata)\r\n{\r\n\treturn getCountryCallingCodeCustom(country, metadata)\r\n}""],""sourceRoot"":""""}"
7dbaf19e02426a8f4188e38fe84c472ecdd4bf35,9588010,	 * @link http://stackoverflow.com/a/9588010/1293256
0b00bb2a50e452a3d30d0dbec69050782a46b161,3783380,          Pinched from http://stackoverflow.com/a/3783380/285374
6959ca344fa574eab85aca2386f94265d547b7f9,15548023,"For other variations of valid optimization flags, see [clang optimization levels](http://stackoverflow.com/questions/15548023/clang-optimization-levels)."
ffd387496e6879d0b48bfc38b16ae68aeed20ef8,714108,		 * @see http://stackoverflow.com/questions/714108/cartesian-product-of-arbitrary-sets-in-java
7971eb081fd4064cd3ef7e820ac917085961a9b3,7403210,"		<div class=""blogcnt"" style=""width:800px;"">Ç°ÃæÒ»ÆªÖ÷Òª½éÉÜÁËPostgreSQL hllµÄ°²×°.ÈçÏÂ :&nbsp;<div><a target=""_blank"" href=""http://blog.163.com/digoal@126/blog/static/16387704020131264480325/""   >http://blog.163.com/digoal@126/blog/static/16387704020131264480325/</a><br><div><br><div>Ò»¡¢PostgreSQL hllµÄÖ÷Òª¹¦ÄÜ :&nbsp;</div><div>1. ¿ìËÙµÄ¼ìË÷hllÖÐ´æ´¢µÄÎ¨Ò»Öµ.</div><div>ÀýÈç¼ÆËãÍøÕ¾Ä³ÌìµÄ·ÃÎÊÓÃ»§Êý. ÒÔÇ°µÄËã·¨¿ÉÄÜÊÇÕâÑùµÄ :&nbsp;</div><div><pre class=""prettyprint""   ><p><font size=""2""   >select count(distinct userid) from access_log where date(crt_time)='2013-02-01'; -- ·Ç³£ºÄÊ±.</font></p></pre></div><div>hll½â¾öÁËºÄÊ±µÄÎÊÌâ, Ê¹ÓÃ·½·¨ÊÇ½«ÓÃ»§ID¾ÛºÏ´æ´¢µ½hllÀàÐÍÖÐ. ÈçÏÂ(¼ÙÉèuser_idµÄÀàÐÍÎªint) :&nbsp;</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >create table access_date (acc_date date unique, userids hll);</font></div><div><font size=""2""   >insert into access_date select&nbsp;<span style=""line-height: 22px;""   >date(crt_time),&nbsp;</span><span style=""line-height: 22px;""   >hll_add_agg(hll_hash_integer(user_id)) from access_log group by 1;</span></font></div><div><font size=""2""   ><span style=""line-height: 22px;""   >select #userids from&nbsp;</span><span style=""line-height: 22px;""   >access_date where acc_date=</span><span style=""line-height: 22px;""   >'2013-02-01'; -- ÕâÌõÓï¾ä·µ»ØÖ»Òª1ºÁÃë×óÓÒ. (10ÒÚ¸öÎ¨Ò»Öµ·µ»ØÒ²ÔÚ1ºÁÃë×óÓÒ)</span></font></div><div><font size=""2""   >¶øhll½ö½öÐèÒª1.2KB¾Í¿ÉÒÔ´æ´¢1.6e+12µÄÎ¨Ò»Öµ.&nbsp;</font></div><p></p></pre></div><div><br></div><div>2. ÒòÎªhllÖÐÊµ¼ÊÉÏ´æ´¢ÁË¼üÖµÐÅÏ¢, ËùÒÔ»¹¿ÉÒÔ×öÀàËÆÐÂÔöÓÃ»§µÈµÄÍ³¼Æ. ÈçÏÂ :&nbsp;</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >digoal=&gt; create table access_date(acc_date date unique, userids hll);</font></div><div><font size=""2""   >NOTICE: &nbsp;CREATE TABLE / UNIQUE will create implicit index ""access_date_acc_date_key"" for table ""access_date""</font></div><div><font size=""2""   >CREATE TABLE</font></div><div><font size=""2""   >Time: 8.219 ms</font></div><div><font size=""2""   >digoal=&gt; insert into access_date select current_date, hll_add_agg(hll_hash_integer(user_id)) from generate_series(1,10000) t(user_id);</font></div><div><font size=""2""   >INSERT 0 1</font></div><div><font size=""2""   >Time: 14.598 ms</font></div><div><font size=""2""   >digoal=&gt; insert into access_date select current_date-1, hll_add_agg(hll_hash_integer(user_id)) from generate_series(5000,20000) t(user_id);</font></div><div><font size=""2""   >INSERT 0 1</font></div><div><font size=""2""   >Time: 16.397 ms</font></div><div><font size=""2""   >digoal=&gt; insert into access_date select current_date-2, hll_add_agg(hll_hash_integer(user_id)) from generate_series(9000,40000) t(user_id);</font></div><div><font size=""2""   >INSERT 0 1</font></div><div><font size=""2""   >Time: 25.487 ms</font></div><div><font size=""2""   ><span style=""line-height: 19px;""   >digoal=&gt; select *,total_users-coalesce(lag(total_users,1) over (order by rn),0) AS new_users from (<br>digoal(&gt; SELECT acc_date, row_number() over date as rn,#hll_union_agg(userids) OVER date as total_users <br>digoal(&gt; FROM access_date<br>digoal(&gt; WINDOW date AS (ORDER BY acc_date ASC ROWS UNBOUNDED PRECEDING)<br>digoal(&gt; ) t;<br>  acc_date  | rn |   total_users    |    new_users     <br>------------+----+------------------+------------------<br> 2013-02-25 |  1 | 30324.8563878223 | 30324.8563878223<br> 2013-02-26 |  2 | 33944.8370446358 | 3619.98065681347<br> 2013-02-27 |  3 | 38696.2201822711 | 4751.38313763532<br>(3 rows)<br>Time: 2.327 ms</span></font></div><p></p></pre></div><div><br></div><div><div>¶þ¡¢PostgreSQL hllµÄÖ÷Òª×é³É²¿·Ö :&nbsp;</div><div>1. Á½¸öÊý¾ÝÀàÐÍ :&nbsp;</div><div><div>digoal=&gt; \dT+</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List of data types</div><div>&nbsp;Schema | &nbsp; &nbsp;Name &nbsp; &nbsp; | Internal name | Size | Elements | Access privileges | Description&nbsp;</div><div>--------+-------------+---------------+------+----------+-------------------+-------------</div><div>&nbsp;public | hll &nbsp; &nbsp; &nbsp; &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | var &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;</div><div>&nbsp;public | hll_hashval | hll_hashval &nbsp; | 8 &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;</div></div><div>hll Äã¿ÉÒÔÏëÏó³É¶à¸öhll_hashval×é³ÉµÄ¼¯ºÏ.</div><div>hll_hashvalÊÇÍ¨¹ýhashº¯ÊýÉú³ÉµÄhashÖµ, º¯ÊýÔÚºóÃæ½éÉÜ.</div><div><br></div><div>2. ¼¸¸ö²Ù×÷º¯Êý :&nbsp;</div><div>2.1 Éú³ÉhashÖµµÄº¯Êý</div><div><table style=""margin: 15px 0px; padding: 0px; border: 0px; border-collapse: collapse; border-spacing: 0px; font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22px; color: rgb(51, 51, 51);""   ><tbody style=""margin: 0px; padding: 0px; border: 0px;""   ><tr style=""margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-top-style: solid; border-top-color: rgb(204, 204, 204);""   ><th style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   >Function</th><th style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   >Input</th><th style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   >Example</th></tr><tr style=""margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248);""   ><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_boolean</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >boolean</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_boolean(TRUE)</code><br><strong style=""margin: 0px; padding: 0px; border: 0px;""   >or</strong><br><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_boolean(TRUE, 123/*hash seed*/)</code></td></tr><tr style=""margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-top-style: solid; border-top-color: rgb(204, 204, 204);""   ><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_smallint</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >smallint</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_smallint(4)</code><br><strong style=""margin: 0px; padding: 0px; border: 0px;""   >or</strong><br><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_smallint(4, 123/*hash seed*/)</code></td></tr><tr style=""margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248);""   ><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_integer</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >integer</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_integer(21474836)</code><br><strong style=""margin: 0px; padding: 0px; border: 0px;""   >or</strong><br><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_integer(21474836, 123/*hash seed*/)</code></td></tr><tr style=""margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-top-style: solid; border-top-color: rgb(204, 204, 204);""   ><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_bigint</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >bigint</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_bigint(223372036854775808)</code><br><strong style=""margin: 0px; padding: 0px; border: 0px;""   >or</strong><br><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_bigint(223372036854775808, 123/*hash seed*/)</code></td></tr><tr style=""margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(248, 248, 248);""   ><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_bytea</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >bytea</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_bytea(E'\\xDEADBEEF')</code><br><strong style=""margin: 0px; padding: 0px; border: 0px;""   >or</strong><br><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_bytea(E'\\xDEADBEEF', 123/*hash seed*/)</code></td></tr><tr style=""margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-top-style: solid; border-top-color: rgb(204, 204, 204);""   ><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_text</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >text</code></td><td style=""margin: 0px; padding: 6px 13px; border: 1px solid rgb(204, 204, 204);""   ><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_text('foobar')</code><br><strong style=""margin: 0px; padding: 0px; border: 0px;""   >or</strong><br><code style=""margin: 0px 2px; padding: 0px 5px; border: 1px solid rgb(234, 234, 234); font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap;""   >hll_hash_text('foobar', 123/*hash seed*/)</code></td></tr></table><p style=""margin-top: 15px; margin-bottom: 15px; border: 0px; color: rgb(51, 51, 51); font-family: Helvetica, arial, freesans, clean, sans-serif; line-height: 22px;""   ><span style=""line-height: 22px; font-family: Arial, Helvetica, sans-serif;""   >2.2 ½«¶à¸öhll_hashval¾ÛºÏ³ÉhllµÄº¯Êý</span></p></div><div><pre class=""prettyprint""   ><p></p><div><span style=""line-height: 22px;""   ><font size=""2""   >digoal=&gt; \df *.*hll*agg*</font></span></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List of functions</font></div><div><font size=""2""   >&nbsp;Schema | &nbsp; &nbsp; Name &nbsp; &nbsp; &nbsp;| Result data type | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Argument data types &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | Type&nbsp;</font></div><div><font size=""2""   >--------+---------------+------------------+------------------------------------------------+------</font></div><div><font size=""2""   >&nbsp;public | hll_add_agg &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll_hashval &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| agg</font></div><div><font size=""2""   >&nbsp;public | hll_add_agg &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll_hashval, integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | agg</font></div><div><font size=""2""   >&nbsp;public | hll_add_agg &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll_hashval, integer, integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| agg</font></div><div><font size=""2""   >&nbsp;public | hll_add_agg &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll_hashval, integer, integer, bigint &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| agg</font></div><div><font size=""2""   >&nbsp;public | hll_add_agg &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll_hashval, integer, integer, bigint, integer | agg</font></div><p></p></pre></div><div>ÓÉÓÚ¾ÛºÏº¯Êý²»Ö§³ÖÄ¬ÈÏÖµ, ËùÒÔ¶¨ÒåÁË5¸ö, ÈçÉÏ. ·Ö±ðÓÃÀ´ÉèÖÃ¼¸¸öµ÷Õû¾«¶ÈºÍãÐÖµ.</div><div>hll.c</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int32 log2m = PG_GETARG_INT32(2);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int32 regwidth = PG_GETARG_INT32(3);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int64 expthresh = PG_GETARG_INT64(4);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int32 sparseon = PG_GETARG_INT32(5);</font></div><p></p></pre></div><div>Ê¹ÓÃ·½·¨¾ÙÀý :&nbsp;</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >digoal=&gt; select hll_add_agg(hll_hash_integer(t)) from generate_series(1,10) g(t);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hll_add_agg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font size=""2""   >------------------------------------------------------------------------------------------------------------------------------------</font></div><div><font size=""2""   >--------------------------------------</font></div><div><font size=""2""   >&nbsp;\x128c7f8895a3f5af28cafeb2c0b33a441f4218da0ce907e4355b6018b150d055d8e3d31cc3e945c98357f02c98c8925c9ed0524848de7f7bd2a13b5c5c9d3935c</font></div><div><font size=""2""   >f09bf72f24e286b62c7e47f2769b67e461dfb</font></div><div><font size=""2""   >(1 row)</font></div><p></p></pre></div><div><br></div><div>2.3 ½«¶à¸öhll¾ÛºÏµÄº¯Êý</div><div><pre class=""prettyprint""   ><p><font size=""2""   >public | hll_union_agg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll</font></p></pre></div><div>È¥ÖØ¸´.</div><div><br></div><div>2.4 ±È½ÏÁ½¸öhll»òhll_hashvalÖµµÄº¯Êý</div><div><pre class=""prettyprint""   ><p></p><div><div><font size=""2""   >public | hll_ne &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| boolean &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll, hll</font></div></div><div><font size=""2""   >public | hll_eq &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| boolean &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll, hll</font></div><div><font size=""2""   >public | hll_hashval_ne &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| boolean &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll_hashval, hll_hashval</font></div><div><font size=""2""   >public | hll_hashval_eq &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| boolean &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll_hashval, hll_hashval</font></div><p></p></pre></div><div><br></div><div>2.5 unionÁ½¸öhllµÄº¯Êý. »òÕßÀí½âÎª<span style=""line-height: 22px;""   >ÔÚÏÖÓÐµÄhllÖÐÔö¼ÓhllÖµ.</span></div><div><pre class=""prettyprint""   ><p><font size=""2""   >public | hll_union &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll, hll</font></p></pre></div><div><br></div><div>2.6 ÔÚÏÖÓÐµÄhllÖÐÔö¼Óhll_hashvalÖµ</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >&nbsp;public | hll_add_rev &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll_hashval, hll</font></div><div><font size=""2""   >&nbsp;public | hll_add &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | hll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll, hll_hashval</font></div><div><font size=""2""   >ÀýÈç :&nbsp;</font></div><div><div><font size=""2""   >digoal=&gt; select hll_add_rev(hll_hash_bigint(1),hll_add_agg(hll_hash_bigint(t))) from generate_series(3,10) g(t);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hll_add_rev &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font size=""2""   >------------------------------------------------------------------------------------------------------------------------------------</font></div><div><font size=""2""   >----------------------</font></div><div><font size=""2""   >&nbsp;\x128c7fb419d210486ab6c1004403b7fb05c44a06c9ec78d52c26530fd4c5f69b6c771b122f34392c621e721b341d80dfead7e630e12993257f8fb23987d28c06f</font></div><div><font size=""2""   >0df795b3d5839b2488b0c</font></div><div><font size=""2""   >(1 row)</font></div><div><font size=""2""   >Time: 0.558 ms</font></div><div><font size=""2""   >digoal=&gt; select hll_add(hll_add_agg(hll_hash_bigint(t)),hll_hash_bigint(1)) from generate_series(3,10) g(t);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hll_add &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font size=""2""   >------------------------------------------------------------------------------------------------------------------------------------</font></div><div><font size=""2""   >----------------------</font></div><div><font size=""2""   >&nbsp;\x128c7fb419d210486ab6c1004403b7fb05c44a06c9ec78d52c26530fd4c5f69b6c771b122f34392c621e721b341d80dfead7e630e12993257f8fb23987d28c06f</font></div><div><font size=""2""   >0df795b3d5839b2488b0c</font></div><div><font size=""2""   >(1 row)</font></div></div><p></p></pre></div><div><br></div><div>2.7 ¼ÆËãhllÖÐµÄÎ¨Ò»ÖµµÄº¯Êý</div><div><p></p><pre class=""prettyprint""   ><p></p><div><p><font size=""2""   >public | hll_cardinality &nbsp; &nbsp; &nbsp; &nbsp; | double precision | hll</font></p></div><div><div><font size=""2""   >ÀýÈç :&nbsp;</font></div><div><font size=""2""   >digoal=&gt; insert into acc_agg select current_date,hll_add_agg(hll_hash_bigint(t)) from generate_series(1,100000000) g(t);</font></div><div><font size=""2""   >INSERT 0 1</font></div><div><font size=""2""   >Time: 75452.588 ms</font></div><div><font size=""2""   >digoal=&gt; select #userids from acc_agg;</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;?column? &nbsp; &nbsp;&nbsp;</font></div><div><font size=""2""   >------------------</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NaN</font></div><div><font size=""2""   >&nbsp;10017.3757531911</font></div><div><font size=""2""   >&nbsp;98388.5525610614</font></div><div><font size=""2""   >&nbsp;1004928.03336943</font></div><div><font size=""2""   >&nbsp;9817781.35207598</font></div><div><font size=""2""   >&nbsp;99813892.0484923</font></div><div><font size=""2""   >(6 rows)</font></div></div><p></p></pre></div><div><br></div><div>2.8 ÉèÖÃ»ò¼ì²éãÐÖµºÍ¾«¶ÈµÄº¯Êý</div><div><pre class=""prettyprint""   ><p></p><div><div><font size=""2""   >-- Returns the schema version of an hll.</font></div><div><font size=""2""   >--</font></div><div><font size=""2""   >CREATE FUNCTION hll_schema_version(hll)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;RETURNS integer</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >-- Returns the type of an hll.</font></div><div><font size=""2""   >--</font></div><div><font size=""2""   >CREATE FUNCTION hll_type(hll)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;RETURNS integer</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >-- Returns the log2m value of an hll.</font></div><div><font size=""2""   >--</font></div><div><font size=""2""   >CREATE FUNCTION hll_log2m(hll)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;RETURNS integer</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >-- Returns the register width of an hll.</font></div><div><font size=""2""   >--</font></div><div><font size=""2""   >CREATE FUNCTION hll_regwidth(hll)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;RETURNS integer</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >-- Returns the maximum explicit threshold of an hll.</font></div><div><font size=""2""   >--</font></div><div><font size=""2""   >CREATE FUNCTION hll_expthresh(hll, OUT specified bigint, OUT effective bigint)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >-- Returns the sparse enabled value of an hll.</font></div><div><font size=""2""   >--</font></div><div><font size=""2""   >CREATE FUNCTION hll_sparseon(hll)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;RETURNS integer</font></div></div><div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >-- Set output version.</font></div><div><font size=""2""   >--</font></div><div><font size=""2""   >CREATE FUNCTION hll_set_output_version(integer)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;RETURNS integer</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >-- Set sparse to full compressed threshold to fixed value.</font></div><div><font size=""2""   >--</font></div><div><font size=""2""   >CREATE FUNCTION hll_set_max_sparse(integer)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;RETURNS integer</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >-- Change the default type modifier, empty and add aggregate defaults.</font></div><div><font size=""2""   >CREATE FUNCTION hll_set_defaults(IN i_log2m integer,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IN i_regwidth integer,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IN i_expthresh bigint,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IN i_sparseon integer,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OUT o_log2m integer,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OUT o_regwidth integer,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OUT o_expthresh bigint,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OUT o_sparseon integer)</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;AS 'MODULE_PATHNAME'</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp;LANGUAGE C STRICT IMMUTABLE;</font></div></div><div><font size=""2""   >-- Êä³öµÄÊÇÀÏµÄ¾«¶ÈºÍãÐÖµ :&nbsp;</font></div><div><div><span style=""line-height: 22px;""   ><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values[j] = palloc(32);</font></span></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; snprintf(values[j++], 32, ""%d"", old_log2m);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values[j] = palloc(32);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; snprintf(values[j++], 32, ""%d"", old_regwidth);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values[j] = palloc(32);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; snprintf(values[j++], 32, INT64_FORMAT, old_expthresh);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values[j] = palloc(32);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; snprintf(values[j++], 32, ""%d"", old_sparseon);</font></div></div><p></p></pre></div><div><br></div><div>2.9 DEBUGº¯Êý :&nbsp;</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >public | hll_print &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | cstring &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| hll</font></div><div><font size=""2""   >ÀýÈç :&nbsp;</font></div><div><p></p><div><div><font size=""2""   >digoal=&gt; select hll_print(hll_add(hll_add_agg(hll_hash_bigint(t)),hll_hash_bigint(1))) from generate_series(3,10) g(t);</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hll_print &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div><font size=""2""   >---------------------------------------------------------------------------</font></div><div><font size=""2""   >&nbsp;EXPLICIT, 9 elements, nregs=4096, nbits=5, expthresh=-1(320), sparseon=1:+</font></div><div><font size=""2""   >&nbsp;0: -5469109305088493887 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+</font></div><div><font size=""2""   >&nbsp;1: &nbsp; &nbsp;19144387141682250 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+</font></div><div><font size=""2""   >&nbsp;2: &nbsp; 489182038263080531 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+</font></div><div><font size=""2""   >&nbsp;3: &nbsp;1140754268591781659 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+</font></div><div><font size=""2""   >&nbsp;4: &nbsp;1310323436750511730 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+</font></div><div><font size=""2""   >&nbsp;5: &nbsp;1960224177162737638 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+</font></div><div><font size=""2""   >&nbsp;6: &nbsp;3522142095546486706 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+</font></div><div><font size=""2""   >&nbsp;7: &nbsp;4145513480871534457 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+</font></div><div><font size=""2""   >&nbsp;8: &nbsp;6574508035858270988&nbsp;</font></div><div><font size=""2""   >(1 row)</font></div></div><div><font size=""2""   >ÒòÎªÎ´´ïµ½ãÐÖµ, ËùÒÔÊ¹ÓÃexplicit´æ´¢. ·µ»ØµÄÎ¨Ò»Öµ½«»áÊÇ¾«È·Öµ.</font></div></div><p></p></pre></div><div><p></p></div><div><br></div><div>3. ¼¸¸ö²Ù×÷·û :&nbsp;</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >-- ----------------------------------------------------------------</font></div><div><font size=""2""   >-- Operators</font></div><div><font size=""2""   >-- ----------------------------------------------------------------</font></div><div><font size=""2""   >-- ±È½ÏÁ½¸öhllÀàÐÍÖµÊÇ·ñÏàµÈ</font></div><div><font size=""2""   >CREATE OPERATOR = (</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; LEFTARG = hll, RIGHTARG = hll, PROCEDURE = hll_eq,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; COMMUTATOR = '=', NEGATOR = '&lt;&gt;',</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; RESTRICT = eqsel, JOIN = eqjoinsel,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; MERGES</font></div><div><font size=""2""   >);</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >CREATE OPERATOR &lt;&gt; (</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; LEFTARG = hll, RIGHTARG = hll, PROCEDURE = hll_ne,</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; COMMUTATOR = '&lt;&gt;', NEGATOR = '=',</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp; RESTRICT = neqsel, JOIN = neqjoinsel</font></div><div><font size=""2""   >);</font></div><div><font size=""2""   >-- ºÏ²¢Á½¸öhllÀàÐÍÖµ, È¥ÖØ¸´.</font></div><div><font size=""2""   >CREATE OPERATOR || (</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp;LEFTARG = hll, RIGHTARG = hll, PROCEDURE = hll_union</font></div><div><font size=""2""   >);</font></div><div><font size=""2""   >-- ºÏ²¢hll_hashvalºÍhll, È¥ÖØ¸´.</font></div><div><font size=""2""   >CREATE OPERATOR || (</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp;LEFTARG = hll, RIGHTARG = hll_hashval, PROCEDURE = hll_add</font></div><div><font size=""2""   >);</font></div><div><font size=""2""   >-- Í¬ÉÏ</font></div><div><font size=""2""   >CREATE OPERATOR || (</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp;LEFTARG = hll_hashval, RIGHTARG = hll, PROCEDURE = hll_add_rev</font></div><div><font size=""2""   >);</font></div><div><font size=""2""   >-- ¼ÆËãhllÀàÐÍÖµÖÐ°üº¬µÄÎ¨Ò»hll_hashvalÖµ.</font></div><div><font size=""2""   >CREATE OPERATOR # (</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; &nbsp;RIGHTARG = hll, PROCEDURE = hll_cardinality</font></div><div><font size=""2""   >);</font></div><p></p></pre></div><div><br></div><div>Èý¡¢¾«¶Èµ÷Õû :&nbsp;</div><div>ÔÚhll.cÖÐ :&nbsp;</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >// Defaults if type modifier values are not specified.</font></div><div><font size=""2""   >//</font></div><div><font size=""2""   >#define DEFAULT_LOG2M &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 15 &nbsp; &nbsp; &nbsp;</font></div><div><font size=""2""   >#define DEFAULT_REGWIDTH &nbsp; &nbsp; &nbsp; &nbsp;5</font></div><div><font size=""2""   >#define DEFAULT_EXPTHRESH &nbsp; &nbsp; &nbsp; -1</font></div><div><font size=""2""   >#define DEFAULT_SPARSEON &nbsp; &nbsp; &nbsp; &nbsp;1</font></div><div><font size=""2""   ><br></font></div><div><font size=""2""   >static int32 g_default_log2m = DEFAULT_LOG2M;</font></div><div><font size=""2""   >static int32 g_default_regwidth = DEFAULT_REGWIDTH;</font></div><div><font size=""2""   >static int64 g_default_expthresh = DEFAULT_EXPTHRESH;</font></div><div><font size=""2""   >static int32 g_default_sparseon = DEFAULT_SPARSEON;</font></div><p></p></pre></div><div>Ò²¿ÉÒÔÔÚÊý¾Ý¿âÖÐµ÷Õû :&nbsp;</div><div><pre class=""prettyprint""   ><p></p><div><font size=""2""   >-- ·µ»ØÎªÀÏµÄÖµ.</font></div><div><div><font size=""2""   >digoal=&gt; select * from hll_set_defaults(15,5,-1,1);</font></div><div><font size=""2""   >&nbsp;o_log2m | o_regwidth | o_expthresh | o_sparseon&nbsp;</font></div><div><font size=""2""   >---------+------------+-------------+------------</font></div><div><font size=""2""   >&nbsp; &nbsp; &nbsp; 12 | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-1 | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1</font></div><div><font size=""2""   >(1 row)</font></div><div><font size=""2""   >Time: 0.330 ms</font></div></div><p></p></pre></div><div><br></div><div>ËÄ¡¢ÓÃ·¨×¢Òâ</div><div>1. ¸üÐÂhllÊ±Ð¡ÐÄËø, ×îºÃÊÇÓÉ³ÌÐòµ÷¶È¾ÛºÏ. ²»ÒªÊµÊ±¸üÐÂ.</div><div>2. ¸¡µãÐÍ×ª»¯³Éhll_hashvalÊ±, ²»½¨ÒéÖ±½Ó×ª»¯, ½¨Òé½«¸¡µãÐÍÊýÖµ¹Ì»¯ºó×ª»¯.</div><div><a target=""_blank"" rel=""nofollow"" href=""http://stackoverflow.com/questions/7403210/hashing-floating-point-values""   >http://stackoverflow.com/questions/7403210/hashing-floating-point-values</a></div><div><br></div><div><span style=""line-height: 22px;""   >¡¾²Î¿¼¡¿</span></div></div></div></div><div>1.&nbsp;<a style=""line-height: 22px;"" target=""_blank"" rel=""nofollow"" href=""http://www.postgresql.org/docs/9.2/static/sql-select.html""   >http://www.postgresql.org/docs/9.2/static/sql-select.html</a></div><div>2.&nbsp;<a style=""line-height: 22px;"" target=""_blank"" rel=""nofollow"" href=""http://www.postgresql.org/docs/9.2/static/tutorial-window.html""   >http://www.postgresql.org/docs/9.2/static/tutorial-window.html</a></div><div>3.&nbsp;<a style=""line-height: 22px;"" target=""_blank"" rel=""nofollow"" href=""http://www.postgresql.org/docs/9.2/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS""   >http://www.postgresql.org/docs/9.2/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS</a></div><div>4.&nbsp;<a style=""line-height: 22px;"" target=""_blank"" rel=""nofollow"" href=""http://www.postgresql.org/docs/9.2/static/queries-table-expressions.html#QUERIES-WINDOW""   >http://www.postgresql.org/docs/9.2/static/queries-table-expressions.html#QUERIES-WINDOW</a></div><div>5.&nbsp;<a style=""line-height: 22px;"" target=""_blank"" rel=""nofollow"" href=""http://www.postgresql.org/docs/9.2/static/functions-window.html""   >http://www.postgresql.org/docs/9.2/static/functions-window.html</a></div><div>6.&nbsp;<a style=""line-height: 22px;"" target=""_blank"" href=""http://blog.163.com/digoal@126/blog/static/16387704020131264480325/""   >http://blog.163.com/digoal@126/blog/static/16387704020131264480325/</a></div>7.&nbsp;REFERENCE.markdown<div>8.&nbsp;STORAGE.markdown</div></div>"
6e286301eff4b49c9629c8ee7b37bc70fe58df50,947116,           * http://stackoverflow.com/questions/947116/matcher-appendreplacement-with-literal-text
5f3f704c34dad7be9b5ba3d3837ad0b776aaf650,8876069,http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript#8876069
77cd683334b9eb867184fc8997134cbb2e3d445f,301287,"  ""readme"": ""# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/coveralls/bestiejs/punycode.js/master.svg)](https://coveralls.io/r/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js)\n\nA robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891), and works on nearly all JavaScript platforms.\n\nThis JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm:\n\n* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C)\n* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c)\n* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c)\n* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287)\n* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072))\n\nThis project is [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with [Node.js v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) and [io.js v1.0.0+](https://github.com/iojs/io.js/blob/v1.x/lib/punycode.js).\n\n## Installation\n\nVia [npm](https://www.npmjs.com/) (only required for Node.js releases older than v0.6.2):\n\n```bash\nnpm install punycode\n```\n\nVia [Bower](http://bower.io/):\n\n```bash\nbower install punycode\n```\n\nVia [Component](https://github.com/component/component):\n\n```bash\ncomponent install bestiejs/punycode.js\n```\n\nIn a browser:\n\n```html\n<script src=\""punycode.js\""></script>\n```\n\nIn [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/):\n\n```js\nvar punycode = require('punycode');\n```\n\nIn [Rhino](http://www.mozilla.org/rhino/):\n\n```js\nload('punycode.js');\n```\n\nUsing an AMD loader like [RequireJS](http://requirejs.org/):\n\n```js\nrequire(\n  {\n    'paths': {\n      'punycode': 'path/to/punycode'\n    }\n  },\n  ['punycode'],\n  function(punycode) {\n    console.log(punycode);\n  }\n);\n```\n\n## API\n\n### `punycode.decode(string)`\n\nConverts a Punycode string of ASCII symbols to a string of Unicode symbols.\n\n```js\n// decode domain name parts\npunycode.decode('maana-pta'); // 'mañana'\npunycode.decode('--dqo34k'); // '☃-⌘'\n```\n\n### `punycode.encode(string)`\n\nConverts a string of Unicode symbols to a Punycode string of ASCII symbols.\n\n```js\n// encode domain name parts\npunycode.encode('mañana'); // 'maana-pta'\npunycode.encode('☃-⌘'); // '--dqo34k'\n```\n\n### `punycode.toUnicode(input)`\n\nConverts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode.\n\n```js\n// decode domain names\npunycode.toUnicode('xn--maana-pta.com');\n// → 'mañana.com'\npunycode.toUnicode('xn----dqo34k.com');\n// → '☃-⌘.com'\n\n// decode email addresses\npunycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq');\n// → 'джумла@джpумлатест.bрфa'\n```\n\n### `punycode.toASCII(input)`\n\nConverts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII.\n\n```js\n// encode domain names\npunycode.toASCII('mañana.com');\n// → 'xn--maana-pta.com'\npunycode.toASCII('☃-⌘.com');\n// → 'xn----dqo34k.com'\n\n// encode email addresses\npunycode.toASCII('джумла@джpумлатест.bрфa');\n// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'\n```\n\n### `punycode.ucs2`\n\n#### `punycode.ucs2.decode(string)`\n\nCreates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16.\n\n```js\npunycode.ucs2.decode('abc');\n// → [0x61, 0x62, 0x63]\n// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE:\npunycode.ucs2.decode('\\uD834\\uDF06');\n// → [0x1D306]\n```\n\n#### `punycode.ucs2.encode(codePoints)`\n\nCreates a string based on an array of numeric code point values.\n\n```js\npunycode.ucs2.encode([0x61, 0x62, 0x63]);\n// → 'abc'\npunycode.ucs2.encode([0x1D306]);\n// → '\\uD834\\uDF06'\n```\n\n### `punycode.version`\n\nA string representing the current Punycode.js version number.\n\n## Unit tests & code coverage\n\nAfter cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`.\n\nOnce that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`.\n\nTo generate the code coverage report, use `grunt cover`.\n\nFeel free to fork if you see possible improvements!\n\n## Author\n\n| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias \""Follow @mathias on Twitter\"") |\n|---|\n| [Mathias Bynens](https://mathiasbynens.be/) |\n\n## Contributors\n\n| [![twitter/jdalton](https://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \""Follow @jdalton on Twitter\"") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## License\n\nPunycode.js is available under the [MIT](https://mths.be/mit) license.\n"","
b0b274424eb0b171529459b087547264170dd384,6122571, * From: https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript
a2cdb2b9895bf55ec9215521ff3927ac3ace6670,19562903,http://stackoverflow.com/questions/19562903/remove-padding-from-columns-in-bootstrap-3 */
18506c943d9f6fd6e85691524c812b0f2fe0ffc9,4110866,#http://stackoverflow.com/questions/4110866/ruby-on-rails-where-to-define-global-constants
4565414e7c816bc8e923af76b814afb1a28721fd,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
df52f69a53e9981ab00473a5c0c2b7562a6d5d1f,3330919,        // http://stackoverflow.com/a/3330919)
4f31fc84fdf024471c32783d49c5b2aa19beb2f1,3330919,        // http://stackoverflow.com/a/3330919)
32cc8a8cf2ee1bb8b151d0b643b840935fc8a2b7,1740700,        http://stackoverflow.com/questions/1740700/how-to-get-hex-color-value-rather-than-rgb-value
e6d4edec0838da9c3ef7e061ba23a4d0089c7c8d,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
7b7b27e1075ef0e748853e0bd3f2467785935413,8503559,  |[Lints](http://stackoverflow.com/questions/8503559/what-is-linting) the
2d281180fd7ac2a464f38a06a979f6e19e93859e,17729336,    //http://stackoverflow.com/questions/17729336/uipageviewcontroller-auto-layout-rotation-issue
e2709c67221443b9cc21958383cd21734e47acda,1318091,"{""version"":3,""sources"":[""../src/Base.js"",""../src/garnish.js"",""../src/classes/BaseDrag.js"",""../src/classes/CheckboxSelect.js"",""../src/classes/ContextMenu.js"",""../src/classes/Drag.js"",""../src/classes/DragDrop.js"",""../src/classes/DragMove.js"",""../src/classes/DragSort.js"",""../src/classes/EscManager.js"",""../src/classes/HUD.js"",""../src/classes/Menu.js"",""../src/classes/MenuBtn.js"",""../src/classes/MixedInput.js"",""../src/classes/Modal.js"",""../src/classes/NiceText.js"",""../src/classes/Pill.js"",""../src/classes/Select.js"",""../src/classes/SelectMenu.js"",""garnish.js""],""names"":[""$"",""getErd"",""erd"",""elementResizeDetectorMaker"",""triggerResizeEvent"",""elem"",""trigger"",""Base"",""extend"",""_instance"",""_static"",""prototype"",""_prototyping"",""proto"",""this"",""call"",""base"",""constructor"",""klass"",""_constructing"",""apply"",""arguments"",""ancestor"",""forEach"",""implement"",""toString"",""valueOf"",""type"",""init"",""source"",""value"",""length"",""test"",""method"",""previous"",""returnValue"",""toSource"",""hidden"",""i"",""key"",""desc"",""Object"",""getOwnPropertyDescriptor"",""defineProperty"",""version"",""object"",""block"",""context"",""undefined"",""String"",""Garnish"",""$win"",""window"",""$doc"",""document"",""$bod"",""body"",""rtl"",""hasClass"",""ltr"",""$scrollContainer"",""DELETE_KEY"",""SHIFT_KEY"",""CTRL_KEY"",""ALT_KEY"",""RETURN_KEY"",""ESC_KEY"",""SPACE_KEY"",""LEFT_KEY"",""UP_KEY"",""RIGHT_KEY"",""DOWN_KEY"",""A_KEY"",""S_KEY"",""CMD_KEY"",""PRIMARY_CLICK"",""SECONDARY_CLICK"",""X_AXIS"",""Y_AXIS"",""FX_DURATION"",""TEXT_NODE"",""log"",""msg"",""console"",""_isMobileBrowser"",""_isMobileOrTabletBrowser"",""isMobileBrowser"",""detectTablets"",""a"",""navigator"",""userAgent"",""vendor"",""opera"",""RegExp"",""substr"",""isArray"",""val"",""Array"",""isJquery"",""jQuery"",""isString"",""hasAttr"",""attr"",""isTextNode"",""nodeType"",""getOffset"",""_offset"",""offset"",""top"",""scrollTop"",""left"",""scrollLeft"",""getDist"",""x1"",""y1"",""x2"",""y2"",""Math"",""sqrt"",""pow"",""hitTest"",""x"",""y"",""_$elem"",""_x1"",""_y1"",""_x2"",""outerWidth"",""_y2"",""outerHeight"",""isCursorOver"",""ev"",""pageX"",""pageY"",""copyTextStyles"",""target"",""$source"",""$target"",""css"",""fontFamily"",""fontSize"",""fontWeight"",""letterSpacing"",""lineHeight"",""textAlign"",""textIndent"",""whiteSpace"",""wordSpacing"",""wordWrap"",""getBodyScrollTop"",""_scrollTop"",""_maxScrollTop"",""height"",""requestAnimationFrame"",""raf"",""mozRequestAnimationFrame"",""webkitRequestAnimationFrame"",""fn"",""setTimeout"",""cancelAnimationFrame"",""cancel"",""mozCancelAnimationFrame"",""webkitCancelAnimationFrame"",""clearTimeout"",""id"",""scrollContainerToElement"",""container"",""$elem"",""$container"",""scrollParent"",""prop"",""elemOffset"",""elemScrollOffset"",""targetScrollTop"",""elemHeight"",""containerHeight"",""innerHeight"",""clientHeight"",""velocity"",""mobileHA"",""SHAKE_STEPS"",""SHAKE_STEP_DURATION"",""shake"",""startingPoint"",""parseInt"",""isNaN"",""_properties"",""getElement"",""makeArray"",""getInputBasename"",""name"",""replace"",""getInputPostVal"",""$input"",""findInputs"",""find"",""getPostData"",""postData"",""arrayInputCounters"",""$inputs"",""eq"",""inputName"",""inputVal"",""isArrayInput"",""croppedName"",""substring"",""j"",""copyInputValues"",""$sourceInputs"",""$targetInputs"",""isCtrlKeyPressed"",""platform"",""match"",""metaKey"",""ctrlKey"",""altKey"",""settings"",""_eventHandlers"",""_namespace"",""_$listeners"",""_disabled"",""floor"",""random"",""_listeners"",""noop"",""setSettings"",""defaults"",""baseSettings"",""on"",""events"",""data"",""handler"",""_normalizeEvents"",""push"",""namespace"",""off"",""eventHandler"",""splice"",""params"",""_ev"",""split"",""_splitEvents"",""trim"",""_formatEvents"",""slice"",""join"",""addListener"",""func"",""proxy"",""inArray"",""removeListener"",""removeAllListeners"",""disable"",""enable"",""destroy"",""event"",""special"",""activate"",""setup"",""namespaces"",""eventHandle"",""mousedown.garnish-activate"",""e"",""preventDefault"",""click.garnish-activate"",""keydown.garnish-activate"",""keyCode"",""addClass"",""removeClass"",""removeAttr"",""teardown"",""textchange"",""handle"",""el"",""args"",""delay"",""handleObj"",""targetData"",""delayTimeout"",""resize"",""listenTo"",""each"",""BaseDrag"",""$items"",""dragging"",""mousedownX"",""mousedownY"",""realMouseX"",""realMouseY"",""mouseX"",""mouseY"",""mouseDistX"",""mouseDistY"",""mouseOffsetX"",""mouseOffsetY"",""$targetItem"",""scrollProperty"",""scrollAxis"",""scrollDist"",""scrollProxy"",""scrollFrame"",""_"",""items"",""isPlainObject"",""addItems"",""allowDragging"",""startDragging"",""onDragStart"",""drag"",""didMouseMove"",""_scrollProperty"",""axis"",""_winScrollTop"",""_minMouseScrollY"",""windowScrollTargetSize"",""_scrollAxis"",""_scrollDist"",""round"",""_maxMouseScrollY"",""_winScrollLeft"",""_minMouseScrollX"",""_maxMouseScrollX"",""width"",""_cancelWindowScroll"",""onDrag"",""stopDragging"",""onDragStop"",""item"",""removeItems"",""add"",""index"",""_deinitItem"",""removeAllItems"",""_handleMouseDown"",""which"",""$handle"",""_getItemHandle"",""currentTarget"",""is"",""closest"",""ignoreHandleSelector"",""_handleMouseMove"",""_mouseDist"",""minMouseDist"",""_handleMouseUp"",""_scrollWindow"",""scrollPos"",""removeData"",""CheckboxSelect"",""$all"",""$options"",""$checkboxes"",""filter"",""not"",""onAllChange"",""isAllChecked"",""checked"",""disabled"",""ContextMenu"",""options"",""$menu"",""showingMenu"",""counter"",""buildMenu"",""menuClass"",""$ul"",""appendTo"",""option"",""$li"",""$a"",""label"",""onClick"",""mousedown"",""hideMenu"",""showMenu"",""showing"",""show"",""hide"",""Drag"",""targetItemWidth"",""targetItemHeight"",""targetItemPositionInDraggee"",""$draggee"",""otherItems"",""totalOtherItems"",""helpers"",""helperTargets"",""helperPositions"",""helperLagIncrement"",""updateHelperPosProxy"",""updateHelperPosFrame"",""lastMouseX"",""lastMouseY"",""_returningHelpersToDraggees"",""draggeeDisplay"",""setDraggee"",""findDraggee"",""helperLagIncrementDividend"",""concat"",""toArray"",""singleHelper"",""_createHelper"",""removeDraggee"",""collapseDraggees"",""appendDraggee"",""$newDraggee"",""oldLength"",""newLength"",""draggeeVirtualMidpointX"",""draggeeVirtualMidpointY"",""getHelperTargetX"",""getHelperTargetY"",""returnHelpersToDraggees"",""$helper"",""display"",""visibility"",""draggeeOffset"",""callback"",""onReturnHelpersToDraggees"",""$draggeeHelper"",""clone"",""copyDraggeeInputValuesToHelper"",""margin"",""helper"",""append"",""helperPos"",""_getHelperTarget"",""position"",""zIndex"",""helperBaseZindex"",""opacity"",""helperOpacity"",""_updateHelperPos"",""_i"",""_j"",""_lag"",""helperLagBase"",""helperSpacingX"",""helperSpacingY"",""_showDraggee"",""remove"",""DragDrop"",""$dropTargets"",""$activeDropTarget"",""updateDropTargets"",""dropTargets"",""_activeDropTarget"",""_elem"",""activeDropTargetClass"",""onDropTargetChange"",""fadeOutHelpers"",""duration"",""complete"",""DragMove"",""DragSort"",""$heightedContainer"",""$insertion"",""insertionVisible"",""oldDraggeeIndexes"",""newDraggeeIndexes"",""closestItem"",""_midpointVersion"",""_$prevItem"",""createInsertion"",""insertion"",""magnetStrength"",""_draggeeOffsetX"",""_draggeeOffsetY"",""canInsertBefore"",""$item"",""canInsertAfter"",""_getDraggeeIndexes"",""moveTargetItemToFront"",""_getItemIndex"",""first"",""insertBefore"",""_placeInsertionWithDraggee"",""_clearMidpoints"",""parent"",""_removeInsertion"",""_getClosestItem"",""_updateInsertion"",""insertAfter"",""onSortChange"",""onInsertionPointChange"",""indexes"",""_closestItem"",""_testForClosestItem"",""_midpoint"",""_getItemMidpoint"",""_startXDist"",""_lastXDist"",""abs"",""_startYDist"",""_lastYDist"",""_$otherItem"",""prev"",""_xDist"",""_yDist"",""last"",""next"",""_repositionDraggee"",""get"",""_moveDraggeeToItem"",""_$item"",""prependTo"",""_mouseDistX"",""_mouseDistY"",""_closestItemMouseDistY"",""_closestItemMouseDistX"",""EscManager"",""handlers"",""escapeLatest"",""register"",""obj"",""unregister"",""pop"",""escManager"",""HUD"",""$trigger"",""$fixedTriggerParent"",""$hud"",""$tip"",""$body"",""$header"",""$footer"",""$mainContainer"",""$main"",""$shade"",""orientation"",""bodyContents"",""onShow"",""onHide"",""onSubmit"",""activeHUDs"",""class"",""shadeClass"",""hudClass"",""tipClass"",""bodyClass"",""mainContainerClass"",""mainClass"",""updateBody"",""$parent"",""offsetParent"",""closeBtn"",""html"",""headerClass"",""footerClass"",""stopPropagation"",""closeOtherHUDs"",""hudID"",""updateSizeAndPosition"",""windowWidth"",""windowHeight"",""triggerWidth"",""triggerHeight"",""triggerOffset"",""windowScrollLeft"",""windowScrollTop"",""scrollContainerTriggerOffset"",""scrollContainerScrollLeft"",""scrollContainerScrollTop"",""hudBodyWidth"",""hudBodyHeight"",""right"",""bottom"",""overflow-x"",""overflow-y"",""clearances"",""orientations"",""relevantSize"",""windowSpacing"",""triggerSpacing"",""tipClasses"",""maxHudBodyWidth"",""maxHudBodyHeight"",""minBodyWidth"",""minBodyHeight"",""mainHeight"",""maxLeft"",""minLeft"",""triggerCenter"",""tipLeft"",""tipWidth"",""maxTop"",""minTop"",""tipTop"",""toggle"",""submit"",""_handleSubmit"",""Menu"",""$anchor"",""menuId"",""_windowWidth"",""_windowHeight"",""_windowScrollLeft"",""_windowScrollTop"",""_anchorOffset"",""_anchorWidth"",""_anchorHeight"",""_anchorOffsetRight"",""_anchorOffsetBottom"",""_menuWidth"",""_menuHeight"",""addOptions"",""$menuList"",""role"",""aria-hidden"",""attachToElement"",""anchor"",""optionKey"",""tabindex"",""setPositionRelativeToAnchor"",""topClearance"",""bottomClearance"",""align"",""_alignCenter"",""rightClearance"",""leftClearance"",""_alignRight"",""_alignLeft"",""detach"",""selectOption"",""onOptionSelect"",""selectedOption"",""MenuBtn"",""$btn"",""menu"",""btn"",""menuAnchor"",""aria-owns"",""aria-haspopup"",""aria-expanded"",""onBlur"",""onKeyDown"",""$currentOption"",""click"",""$option"",""focusOption"",""onMouseDown"",""onMenuHide"",""MixedInput"",""elements"",""focussedElement"",""blurTimeout"",""getElementIndex"",""isText"",""onFocus"",""setFocus"",""setCarotPos"",""addTextElement"",""text"",""TextElement"",""addElement"",""focussedElementIndex"",""selectionStart"",""selectionEnd"",""preVal"",""postVal"",""newText"",""removeElement"",""$prevElem"",""$nextElem"",""prevElemVal"",""newVal"",""blurFocussedElement"",""focus"",""focusPreviousElement"",""$from"",""focusNextElement"",""pos"",""parentInput"",""$stage"",""focussed"",""interval"",""padding"",""setWidth"",""getIndex"",""buildStage"",""getTextWidth"",""stageWidth"",""setInterval"",""NiceText"",""checkInput"",""clearInterval"",""getVal"",""setVal"",""changed"",""onChange"",""Modal"",""visible"",""dragger"",""desiredWidth"",""desiredHeight"",""resizeDragger"",""resizeStartWidth"",""resizeStartHeight"",""setContainer"",""autoShow"",""instances"",""draggable"",""dragHandleSelector"",""resizable"",""$resizeDragHandle"",""closeOtherModals"",""visibleModal"",""hideOnShadeClick"",""hideOnEsc"",""quickShow"",""quickHide"",""max"",""min-width"",""min-height"",""_width"",""min"",""getWidth"",""minGutter"",""_height"",""getHeight"",""onFadeIn"",""onFadeOut"",""_handleResizeStart"",""_handleResize"",""relativeElemPadding"",""$hint"",""$charsLeft"",""autoHeight"",""maxLength"",""showCharsLeft"",""showingHint"",""inputBoxSizing"",""minHeight"",""initialized"",""input"",""isVisible"",""initialize"",""getHeightForValue"",""updateHeight"",""hint"",""$hintContainer"",""charsLeftClass"",""updateCharsLeft"",""initializeIfVisible"",""showHint"",""hintFadeDuration"",""hideHint"",""onTextChange"",""border-top"",""border-right"",""border-bottom"",""border-left"",""padding-top"",""padding-right"",""padding-bottom"",""padding-left"",""-webkit-box-sizing"",""-moz-box-sizing"",""box-sizing"",""spaces"",""onHeightChange"",""updateHeightIfWidthChanged"",""_charsLeft"",""negativeCharsLeftClass"",""Pill"",""$outerContainer"",""$innerContainer"",""$btns"",""$selectedBtn"",""outerContainer"",""preventOutlineOnMouseFocus"",""select"",""selectNext"",""nextIndex"",""_getSelectedBtnIndex"",""selectPrev"",""prevIndex"",""Select"",""$selectedItems"",""mousedownTarget"",""mouseUpTimeout"",""callbackFrame"",""$focusable"",""$first"",""$last"",""allowEmpty"",""checkboxMode"",""ignoreClick"",""deselectAll"",""getItemIndex"",""isSelected"",""selectItem"",""preventScroll"",""multi"",""setFocusableItem"",""focusItem"",""_selectItems"",""selectAll"",""selectRange"",""sliceFrom"",""sliceTo"",""deselectItem"",""_deselectItems"",""clearFirst"",""deselectOthers"",""toggleItem"",""_canDeselect"",""clearMouseUpTimeout"",""getFirstItem"",""getLastItem"",""isPreviousItem"",""isNextItem"",""getPreviousItem"",""getNextItem"",""getItemToTheLeft"",""horizontal"",""vertical"",""getClosestItem"",""getItemToTheRight"",""getItemAbove"",""getItemBelow"",""dir"",""axisProps"",""closestItemAxisProps"",""dirProps"",""closestItemDirectionProps"",""$thisItem"",""thisOffset"",""thisMidpoint"",""midpointOffset"",""midpointSizeFunc"",""otherRowPos"",""smallestMidpointDiff"",""$closestItem"",""step"",""$otherItem"",""otherOffset"",""isNextRow"",""rowOffset"",""otherMidpoint"",""midpointDiff"",""isWrongDirection"",""getFurthestItemToTheLeft"",""getFurthestItem"",""getFurthestItemToTheRight"",""getFurthestItemAbove"",""getFurthestItemBelow"",""$testItem"",""totalSelected"",""getTotalSelected"",""updateIndexes"",""itemsChanged"",""selectionChanged"",""selectedIndex"",""selectedClass"",""onSelectionChange"",""resetItemOrder"",""scrollTo"",""getSelectedItems"",""shiftKey"",""_actAsCheckbox"",""onMouseUp"",""<"",""b"","">"",""SelectMenu"",""selected"",""build"",""_addSelectedOptionClass"",""dom"",""ul"",""className"",""setBtnText"",""$btnLabel"",""ulClass""],""mappings"":""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"",""file"":""garnish.min.js"",""sourcesContent"":[""/*!\r\n\tBase.js, version 1.1a\r\n\tCopyright 2006-2010, Dean Edwards\r\n\tLicense: http://www.opensource.org/licenses/mit-license.php\r\n*/\r\n\r\nvar Base = function() {\r\n\t// dummy\r\n};\r\n\r\nBase.extend = function(_instance, _static) { // subclass\r\n\tvar extend = Base.prototype.extend;\r\n\r\n\t// build the prototype\r\n\tBase._prototyping = true;\r\n\tvar proto = new this;\r\n\textend.call(proto, _instance);\r\n\tproto.base = function() {\r\n\t\t// call this method from any other method to invoke that method's ancestor\r\n\t};\r\n\tdelete Base._prototyping;\r\n\r\n\t// create the wrapper for the constructor function\r\n\t//var constructor = proto.constructor.valueOf(); //-dean\r\n\tvar constructor = proto.constructor;\r\n\tvar klass = proto.constructor = function() {\r\n\t\tif (!Base._prototyping) {\r\n\t\t\tif (this._constructing || this.constructor == klass) { // instantiation\r\n\t\t\t\tthis._constructing = true;\r\n\t\t\t\tconstructor.apply(this, arguments);\r\n\t\t\t\tdelete this._constructing;\r\n\t\t\t} else if (arguments[0] != null) { // casting\r\n\t\t\t\treturn (arguments[0].extend || extend).call(arguments[0], proto);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// build the class interface\r\n\tklass.ancestor = this;\r\n\tklass.extend = this.extend;\r\n\tklass.forEach = this.forEach;\r\n\tklass.implement = this.implement;\r\n\tklass.prototype = proto;\r\n\tklass.toString = this.toString;\r\n\tklass.valueOf = function(type) {\r\n\t\t//return (type == \""object\"") ? klass : constructor; //-dean\r\n\t\treturn (type == \""object\"") ? klass : constructor.valueOf();\r\n\t};\r\n\textend.call(klass, _static);\r\n\t// class initialisation\r\n\tif (typeof klass.init == \""function\"") klass.init();\r\n\treturn klass;\r\n};\r\n\r\nBase.prototype = {\r\n\textend: function(source, value) {\r\n\t\tif (arguments.length > 1) { // extending with a name/value pair\r\n\t\t\tvar ancestor = this[source];\r\n\t\t\tif (ancestor && (typeof value == \""function\"") && // overriding a method?\r\n\t\t\t\t// the valueOf() comparison is to avoid circular references\r\n\t\t\t\t(!ancestor.valueOf || ancestor.valueOf() != value.valueOf()) &&\r\n\t\t\t\t/\\bbase\\b/.test(value)) {\r\n\t\t\t\t// get the underlying method\r\n\t\t\t\tvar method = value.valueOf();\r\n\t\t\t\t// override\r\n\t\t\t\tvalue = function() {\r\n\t\t\t\t\tvar previous = this.base || Base.prototype.base;\r\n\t\t\t\t\tthis.base = ancestor;\r\n\t\t\t\t\tvar returnValue = method.apply(this, arguments);\r\n\t\t\t\t\tthis.base = previous;\r\n\t\t\t\t\treturn returnValue;\r\n\t\t\t\t};\r\n\t\t\t\t// point to the underlying method\r\n\t\t\t\tvalue.valueOf = function(type) {\r\n\t\t\t\t\treturn (type == \""object\"") ? value : method;\r\n\t\t\t\t};\r\n\t\t\t\tvalue.toString = Base.toString;\r\n\t\t\t}\r\n\t\t\tthis[source] = value;\r\n\t\t} else if (source) { // extending with an object literal\r\n\t\t\tvar extend = Base.prototype.extend;\r\n\t\t\t// if this object has a customised extend method then use it\r\n\t\t\tif (!Base._prototyping && typeof this != \""function\"") {\r\n\t\t\t\textend = this.extend || extend;\r\n\t\t\t}\r\n\t\t\tvar proto = {toSource: null};\r\n\t\t\t// do the \""toString\"" and other methods manually\r\n\t\t\tvar hidden = [\""constructor\"", \""toString\"", \""valueOf\""];\r\n\t\t\t// if we are prototyping then include the constructor\r\n\t\t\tvar i = Base._prototyping ? 0 : 1;\r\n\t\t\twhile (key = hidden[i++]) {\r\n\t\t\t\tif (source[key] != proto[key]) {\r\n\t\t\t\t\textend.call(this, key, source[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// copy each of the source object's properties to this object\r\n\t\t\tfor (var key in source) {\r\n\t\t\t\tif (!proto[key]) {\r\n\t\t\t\t\tvar desc = Object.getOwnPropertyDescriptor(source, key);\r\n\t\t\t\t\tif (typeof desc.value != typeof undefined) {\r\n\t\t\t\t\t\t// set the value normally in case it's a function that needs to be overwritten\r\n\t\t\t\t\t\textend.call(this, key, desc.value);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// set it while maintaining the original descriptor settings\r\n\t\t\t\t\t\tObject.defineProperty(this, key, desc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n};\r\n\r\n// initialise\r\nBase = Base.extend({\r\n\tconstructor: function() {\r\n\t\tthis.extend(arguments[0]);\r\n\t}\r\n}, {\r\n\tancestor: Object,\r\n\tversion: \""1.1\"",\r\n\r\n\tforEach: function(object, block, context) {\r\n\t\tfor (var key in object) {\r\n\t\t\tif (this.prototype[key] === undefined) {\r\n\t\t\t\tblock.call(context, object[key], key, object);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\timplement: function() {\r\n\t\tfor (var i = 0; i < arguments.length; i++) {\r\n\t\t\tif (typeof arguments[i] == \""function\"") {\r\n\t\t\t\t// if it's a function, call it\r\n\t\t\t\targuments[i](this.prototype);\r\n\t\t\t} else {\r\n\t\t\t\t// add the interface using the extend method\r\n\t\t\t\tthis.prototype.extend(arguments[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\ttoString: function() {\r\n\t\treturn String(this.valueOf());\r\n\t}\r\n});\r\n"",""/**\n * @namespace Garnish\n */\n\n// Bail if Garnish is already defined\nif (typeof Garnish != 'undefined')\n{\n\tthrow 'Garnish is already defined!';\n}\n\n\nGarnish = {\n\n\t// jQuery objects for common elements\n\t$win: $(window),\n\t$doc: $(document),\n\t$bod: $(document.body)\n\n};\n\nGarnish.rtl = Garnish.$bod.hasClass('rtl');\nGarnish.ltr = !Garnish.rtl;\n\nGarnish = $.extend(Garnish, {\n\n\t$scrollContainer: Garnish.$win,\n\n\t// Key code constants\n\tDELETE_KEY:  8,\n\tSHIFT_KEY:  16,\n\tCTRL_KEY:   17,\n\tALT_KEY:    18,\n\tRETURN_KEY: 13,\n\tESC_KEY:    27,\n\tSPACE_KEY:  32,\n\tLEFT_KEY:   37,\n\tUP_KEY:     38,\n\tRIGHT_KEY:  39,\n\tDOWN_KEY:   40,\n\tA_KEY:      65,\n\tS_KEY:      83,\n\tCMD_KEY:    91,\n\n\t// Mouse button constants\n\tPRIMARY_CLICK:   1,\n\tSECONDARY_CLICK: 3,\n\n\t// Axis constants\n\tX_AXIS: 'x',\n\tY_AXIS: 'y',\n\n\tFX_DURATION: 100,\n\n\t// Node types\n\tTEXT_NODE: 3,\n\n\t/**\n\t * Logs a message to the browser's console, if the browser has one.\n\t *\n\t * @param string msg\n\t */\n\tlog: function(msg)\n\t{\n\t\tif (typeof console != 'undefined' && typeof console.log == 'function')\n\t\t{\n\t\t\tconsole.log(msg);\n\t\t}\n\t},\n\n\t_isMobileBrowser: null,\n\t_isMobileOrTabletBrowser: null,\n\n\t/**\n\t * Returns whether this is a mobile browser.\n\t * Detection script courtesy of http://detectmobilebrowsers.com\n\t *\n\t * Last updated: 2014-11-24\n\t *\n\t * @param bool detectTablets\n\t * @return bool\n\t */\n\tisMobileBrowser: function(detectTablets)\n\t{\n\t\tvar key = detectTablets ? '_isMobileOrTabletBrowser' : '_isMobileBrowser';\n\n\t\tif (Garnish[key] === null)\n\t\t{\n\t\t\tvar a = navigator.userAgent || navigator.vendor || window.opera;\n\t\t\tGarnish[key] = ((new RegExp('(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino'+(detectTablets ? '|android|ipad|playbook|silk' : ''), 'i')).test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4)));\n\t\t}\n\n\t\treturn Garnish[key];\n\t},\n\n\t/**\n\t * Returns whether a variable is an array.\n\t *\n\t * @param mixed val\n\t * @return bool\n\t */\n\tisArray: function(val)\n\t{\n\t\treturn (val instanceof Array);\n\t},\n\n\t/**\n\t * Returns whether a variable is a jQuery collection.\n\t *\n\t * @param mixed val\n\t * @return bool\n\t */\n\tisJquery: function(val)\n\t{\n\t\treturn (val instanceof jQuery);\n\t},\n\n\t/**\n\t * Returns whether a variable is a string.\n\t *\n\t * @param mixed val\n\t * @return bool\n\t */\n\tisString: function(val)\n\t{\n\t\treturn (typeof val == 'string');\n\t},\n\n\t/**\n\t * Returns whether an element has an attribute.\n\t *\n\t * @see http://stackoverflow.com/questions/1318076/jquery-hasattr-checking-to-see-if-there-is-an-attribute-on-an-element/1318091#1318091\n\t */\n\thasAttr: function(elem, attr)\n\t{\n\t\tvar val = $(elem).attr(attr);\n\t\treturn (typeof val != 'undefined' && val !== false);\n\t},\n\n\t/**\n\t * Returns whether something is a text node.\n\t *\n\t * @param object elem\n\t * @return bool\n\t */\n\tisTextNode: function(elem)\n\t{\n\t\treturn (elem.nodeType == Garnish.TEXT_NODE);\n\t},\n\n\t/**\n\t * Returns the offset of an element within the scroll container, whether that's the window or something else\n\t */\n\tgetOffset: function(elem)\n\t{\n\t\tthis.getOffset._offset = $(elem).offset();\n\n\t\tif (Garnish.$scrollContainer[0] != Garnish.$win[0])\n\t\t{\n\t\t\tthis.getOffset._offset.top += Garnish.$scrollContainer.scrollTop();\n\t\t\tthis.getOffset._offset.left += Garnish.$scrollContainer.scrollLeft();\n\t\t}\n\n\t\treturn this.getOffset._offset;\n\t},\n\n\t/**\n\t * Returns the distance between two coordinates.\n\t *\n\t * @param int x1 The first coordinate's X position.\n\t * @param int y1 The first coordinate's Y position.\n\t * @param int x2 The second coordinate's X position.\n\t * @param int y2 The second coordinate's Y position.\n\t * @return float\n\t */\n\tgetDist: function(x1, y1, x2, y2)\n\t{\n\t\treturn Math.sqrt(Math.pow(x1-x2, 2) + Math.pow(y1-y2, 2));\n\t},\n\n\t/**\n\t * Returns whether an element is touching an x/y coordinate.\n\t *\n\t * @param int    x    The coordinate's X position.\n\t * @param int    y    The coordinate's Y position.\n\t * @param object elem Either an actual element or a jQuery collection.\n\t * @return bool\n\t */\n\thitTest: function(x, y, elem)\n\t{\n\t\tGarnish.hitTest._$elem = $(elem);\n\t\tGarnish.hitTest._offset = Garnish.hitTest._$elem.offset();\n\t\tGarnish.hitTest._x1 = Garnish.hitTest._offset.left;\n\t\tGarnish.hitTest._y1 = Garnish.hitTest._offset.top;\n\t\tGarnish.hitTest._x2 = Garnish.hitTest._x1 + Garnish.hitTest._$elem.outerWidth();\n\t\tGarnish.hitTest._y2 = Garnish.hitTest._y1 + Garnish.hitTest._$elem.outerHeight();\n\n\t\treturn (x >= Garnish.hitTest._x1 && x < Garnish.hitTest._x2 && y >= Garnish.hitTest._y1 && y < Garnish.hitTest._y2);\n\t},\n\n\t/**\n\t * Returns whether the cursor is touching an element.\n\t *\n\t * @param object ev   The mouse event object containing pageX and pageY properties.\n\t * @param object elem Either an actual element or a jQuery collection.\n\t * @return bool\n\t */\n\tisCursorOver: function(ev, elem)\n\t{\n\t\treturn Garnish.hitTest(ev.pageX, ev.pageY, elem);\n\t},\n\n\t/**\n\t * Copies text styles from one element to another.\n\t *\n\t * @param object source The source element. Can be either an actual element or a jQuery collection.\n\t * @param object target The target element. Can be either an actual element or a jQuery collection.\n\t */\n\tcopyTextStyles: function(source, target)\n\t{\n\t\tvar $source = $(source),\n\t\t\t$target = $(target);\n\n\t\t$target.css({\n\t\t\tfontFamily:    $source.css('fontFamily'),\n\t\t\tfontSize:      $source.css('fontSize'),\n\t\t\tfontWeight:    $source.css('fontWeight'),\n\t\t\tletterSpacing: $source.css('letterSpacing'),\n\t\t\tlineHeight:    $source.css('lineHeight'),\n\t\t\ttextAlign:     $source.css('textAlign'),\n\t\t\ttextIndent:    $source.css('textIndent'),\n\t\t\twhiteSpace:    $source.css('whiteSpace'),\n\t\t\twordSpacing:   $source.css('wordSpacing'),\n\t\t\twordWrap:      $source.css('wordWrap')\n\t\t});\n\t},\n\n\t/**\n\t * Returns the body's real scrollTop, discarding any window banding in Safari.\n\t *\n\t * @return int\n\t */\n\tgetBodyScrollTop: function()\n\t{\n\t\tGarnish.getBodyScrollTop._scrollTop = document.body.scrollTop;\n\n\t\tif (Garnish.getBodyScrollTop._scrollTop < 0)\n\t\t{\n\t\t\tGarnish.getBodyScrollTop._scrollTop = 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tGarnish.getBodyScrollTop._maxScrollTop = Garnish.$bod.outerHeight() - Garnish.$win.height();\n\n\t\t\tif (Garnish.getBodyScrollTop._scrollTop > Garnish.getBodyScrollTop._maxScrollTop)\n\t\t\t{\n\t\t\t\tGarnish.getBodyScrollTop._scrollTop = Garnish.getBodyScrollTop._maxScrollTop;\n\t\t\t}\n\t\t}\n\n\t\treturn Garnish.getBodyScrollTop._scrollTop;\n\t},\n\n\trequestAnimationFrame: (\n\t\tfunction()\n\t\t{\n\t\t\tvar raf = (\n\t\t\t\twindow.requestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\tfunction(fn){ return window.setTimeout(fn, 20); }\n\t\t\t);\n\n\t\t\treturn function(fn){ return raf(fn); };\n\t\t}\n\t)(),\n\n\tcancelAnimationFrame: (\n\t\tfunction()\n\t\t{\n\t\t\tvar cancel = (\n\t\t\t\twindow.cancelAnimationFrame ||\n\t\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\t\twindow.clearTimeout\n\t\t\t);\n\n\t\t\treturn function(id){ return cancel(id); };\n\t\t}\n\t)(),\n\n\t/**\n\t * Scrolls a container element to an element within it.\n\t *\n\t * @param object container Either an actual element or a jQuery collection.\n\t * @param object elem      Either an actual element or a jQuery collection.\n\t */\n\tscrollContainerToElement: function(container, elem)\n\t{\n\t\tif (typeof elem === typeof undefined)\n\t\t{\n\t\t\tvar $elem = $(container);\n\t\t\t\t$container = $elem.scrollParent();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar $container = $(container),\n\t\t\t\t$elem = $(elem);\n\t\t}\n\n\t\tif ($container.prop('nodeName') === 'HTML' || $container[0] == Garnish.$doc[0])\n\t\t{\n\t\t\t$container = Garnish.$win;\n\t\t}\n\n\t\tvar scrollTop = $container.scrollTop(),\n\t\t\telemOffset = $elem.offset().top;\n\n\t\tif ($container[0] == window)\n\t\t{\n\t\t\tvar elemScrollOffset = elemOffset - scrollTop;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar elemScrollOffset = elemOffset - $container.offset().top;\n\t\t}\n\n\t\tvar targetScrollTop = false;\n\n\t\t// Is the element above the fold?\n\t\tif (elemScrollOffset < 0)\n\t\t{\n\t\t\ttargetScrollTop = scrollTop + elemScrollOffset - 10;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar elemHeight = $elem.outerHeight(),\n\t\t\t\tcontainerHeight = ($container[0] == window ? window.innerHeight : $container[0].clientHeight);\n\n\t\t\t// Is it below the fold?\n\t\t\tif (elemScrollOffset + elemHeight > containerHeight)\n\t\t\t{\n\t\t\t\ttargetScrollTop = scrollTop + (elemScrollOffset - (containerHeight - elemHeight)) + 10;\n\t\t\t}\n\t\t}\n\n\t\tif (targetScrollTop !== false)\n\t\t{\n\t\t\t// Velocity only allows you to scroll to an arbitrary position if you're scrolling the main window\n\t\t\tif ($container[0] == window)\n\t\t\t{\n\t\t\t\t$('html').velocity('scroll', {\n\t\t\t\t\toffset: targetScrollTop+'px',\n\t\t\t\t\tmobileHA: false\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$container.scrollTop(targetScrollTop);\n\t\t\t}\n\t\t}\n\t},\n\n\tSHAKE_STEPS: 10,\n\tSHAKE_STEP_DURATION: 25,\n\n\t/**\n\t * Shakes an element.\n\t *\n\t * @param mixed  elem Either an actual element or a jQuery collection.\n\t * @param string prop The property that should be adjusted (default is 'margin-left').\n\t */\n\tshake: function(elem, prop)\n\t{\n\t\tvar $elem = $(elem);\n\n\t\tif (!prop)\n\t\t{\n\t\t\tprop = 'margin-left';\n\t\t}\n\n\t\tvar startingPoint = parseInt($elem.css(prop));\n\t\tif (isNaN(startingPoint))\n\t\t{\n\t\t\tstartingPoint = 0;\n\t\t}\n\n\t\tfor (var i = 0; i <= Garnish.SHAKE_STEPS; i++)\n\t\t{\n\t\t\t(function(i)\n\t\t\t{\n\t\t\t\tsetTimeout(function()\n\t\t\t\t{\n\t\t\t\t\tGarnish.shake._properties = {};\n\t\t\t\t\tGarnish.shake._properties[prop] = startingPoint + (i % 2 ? -1 : 1) * (10-i);\n\t\t\t\t\t$elem.velocity(Garnish.shake._properties, Garnish.SHAKE_STEP_DURATION);\n\t\t\t\t}, (Garnish.SHAKE_STEP_DURATION * i));\n\t\t\t})(i);\n\t\t}\n\t},\n\n\t/**\n\t * Returns the first element in an array or jQuery collection.\n\t *\n\t * @param mixed elem\n\t * @return mixed\n\t */\n\tgetElement: function(elem)\n\t{\n\t\treturn $.makeArray(elem)[0];\n\t},\n\n\t/**\n\t * Returns the beginning of an input's name= attribute value with any [bracktes] stripped out.\n\t *\n\t * @param object elem\n\t * @return string|null\n\t */\n\tgetInputBasename: function(elem)\n\t{\n\t\tvar name = $(elem).attr('name');\n\n\t\tif (name)\n\t\t{\n\t\t\treturn name.replace(/\\[.*/, '');\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t},\n\n\t/**\n\t * Returns an input's value as it would be POSTed.\n\t * So unchecked checkboxes and radio buttons return null,\n\t * and multi-selects whose name don't end in \""[]\"" only return the last selection\n\t *\n\t * @param jQuery $input\n\t * @return mixed\n\t */\n\tgetInputPostVal: function($input)\n\t{\n\t\tvar type = $input.attr('type'),\n\t\t\tval  = $input.val();\n\n\t\t// Is this an unchecked checkbox or radio button?\n\t\tif ((type == 'checkbox' || type == 'radio'))\n\t\t{\n\t\t\tif ($input.prop('checked'))\n\t\t\t{\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any array values whose input name doesn't end in \""[]\""\n\t\t//  - e.g. a multi-select\n\t\telse if (Garnish.isArray(val) && $input.attr('name').substr(-2) != '[]')\n\t\t{\n\t\t\tif (val.length)\n\t\t\t{\n\t\t\t\treturn val[val.length-1];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Just return the value\n\t\telse\n\t\t{\n\t\t\treturn val;\n\t\t}\n\t},\n\n\t/**\n\t * Returns the inputs within a container\n\t *\n\t * @param mixed container The container element. Can be either an actual element or a jQuery collection.\n\t * @return jQuery\n\t */\n\tfindInputs: function(container)\n\t{\n\t\treturn $(container).find('input,text,textarea,select,button');\n\t},\n\n\t/**\n\t * Returns the post data within a container.\n\t *\n\t * @param mixed container\n\t * @return array\n\t */\n\tgetPostData: function(container)\n\t{\n\t\tvar postData = {},\n\t\t\tarrayInputCounters = {},\n\t\t\t$inputs = Garnish.findInputs(container);\n\n\t\tfor (var i = 0; i < $inputs.length; i++)\n\t\t{\n\t\t\tvar $input = $inputs.eq(i);\n\n\t\t\tif ($input.prop('disabled'))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar inputName = $input.attr('name');\n\t\t\tif (!inputName)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar inputVal = Garnish.getInputPostVal($input);\n\t\t\tif (inputVal === null)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar isArrayInput = (inputName.substr(-2) == '[]');\n\n\t\t\tif (isArrayInput)\n\t\t\t{\n\t\t\t\t// Get the cropped input name\n\t\t\t\tvar croppedName = inputName.substring(0, inputName.length-2);\n\n\t\t\t\t// Prep the input counter\n\t\t\t\tif (typeof arrayInputCounters[croppedName] == 'undefined')\n\t\t\t\t{\n\t\t\t\t\tarrayInputCounters[croppedName] = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!Garnish.isArray(inputVal))\n\t\t\t{\n\t\t\t\tinputVal = [inputVal];\n\t\t\t}\n\n\t\t\tfor (var j = 0; j < inputVal.length; j++)\n\t\t\t{\n\t\t\t\tif (isArrayInput)\n\t\t\t\t{\n\t\t\t\t\tvar inputName = croppedName+'['+arrayInputCounters[croppedName]+']';\n\t\t\t\t\tarrayInputCounters[croppedName]++;\n\t\t\t\t}\n\n\t\t\t\tpostData[inputName] = inputVal[j];\n\t\t\t}\n\t\t}\n\n\t\treturn postData;\n\t},\n\n\tcopyInputValues: function(source, target)\n\t{\n\t\tvar $sourceInputs = Garnish.findInputs(source),\n\t\t\t$targetInputs = Garnish.findInputs(target);\n\n\t\tfor (var i = 0; i < $sourceInputs.length; i++)\n\t\t{\n\t\t\tif (typeof $targetInputs[i] == typeof undefined)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$targetInputs.eq(i).val(\n\t\t\t\t$sourceInputs.eq(i).val()\n\t\t\t);\n\t\t}\n\t},\n\n\t/**\n\t * Returns whether the \""Ctrl\"" key is pressed (or ⌘ if this is a Mac) for a given keyboard event\n\t *\n\t * @param ev The keyboard event\n\t *\n\t * @return boolean Whether the \""Ctrl\"" key is pressed\n\t */\n\tisCtrlKeyPressed: function(ev)\n\t{\n\t\tif (window.navigator.platform.match(/Mac/))\n\t\t{\n\t\t\t// metaKey maps to ⌘ on Macs\n\t\t\treturn ev.metaKey;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Both altKey and ctrlKey == true on some Windows keyboards when the right-hand ALT key is pressed\n\t\t\t// so just be safe and make sure altKey == false\n\t\t\treturn (ev.ctrlKey && !ev.altKey);\n\t\t}\n\t}\n});\n\n\n/**\n * Garnish base class\n */\nGarnish.Base = Base.extend({\n\n\tsettings: null,\n\n\t_eventHandlers: null,\n\t_namespace: null,\n\t_$listeners: null,\n\t_disabled: false,\n\n\tconstructor: function()\n\t{\n\t\tthis._eventHandlers = [];\n\t\tthis._namespace = '.Garnish'+Math.floor(Math.random()*1000000000);\n\t\tthis._listeners = [];\n\t\tthis.init.apply(this, arguments);\n\t},\n\n\tinit: $.noop,\n\n\tsetSettings: function(settings, defaults)\n\t{\n\t\tvar baseSettings = (typeof this.settings == 'undefined' ? {} : this.settings);\n\t\tthis.settings = $.extend({}, baseSettings, defaults, settings);\n\t},\n\n\ton: function(events, data, handler)\n\t{\n\t\tif (typeof data == 'function')\n\t\t{\n\t\t\thandler = data;\n\t\t\tdata = {};\n\t\t}\n\n\t\tvar events = this._normalizeEvents(events);\n\n\t\tfor (var i = 0; i < events.length; i++)\n\t\t{\n\t\t\tvar ev = events[i];\n\n\t\t\tthis._eventHandlers.push({\n\t\t\t\ttype: ev[0],\n\t\t\t\tnamespace: ev[1],\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler\n\t\t\t});\n\t\t}\n\t},\n\n\toff: function(events, handler)\n\t{\n\t\tvar events = this._normalizeEvents(events);\n\n\t\tfor (var i = 0; i < events.length; i++)\n\t\t{\n\t\t\tvar ev = events[i];\n\n\t\t\tfor (var j = this._eventHandlers.length - 1; j >= 0; j--)\n\t\t\t{\n\t\t\t\tvar eventHandler = this._eventHandlers[j];\n\n\t\t\t\tif (eventHandler.type == ev[0] && (!ev[1] || eventHandler.namespace == ev[1]) && eventHandler.handler === handler)\n\t\t\t\t{\n\t\t\t\t\tthis._eventHandlers.splice(j, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\ttrigger: function(type, data)\n\t{\n\t\tvar ev = {\n\t\t\ttype: type,\n\t\t\ttarget: this\n\t\t};\n\n\t\tif (typeof params == 'undefined')\n\t\t{\n\t\t\tparams = [];\n\t\t}\n\n\t\tfor (var i = 0; i < this._eventHandlers.length; i++)\n\t\t{\n\t\t\tvar handler = this._eventHandlers[i];\n\n\t\t\tif (handler.type == type)\n\t\t\t{\n\t\t\t\tvar _ev = $.extend({ data: handler.data }, data, ev);\n\t\t\t\thandler.handler(_ev)\n\t\t\t}\n\t\t}\n\t},\n\n\t_normalizeEvents: function(events)\n\t{\n\t\tif (typeof events == 'string')\n\t\t{\n\t\t\tevents = events.split(' ');\n\t\t}\n\n\t\tfor (var i = 0; i < events.length; i++)\n\t\t{\n\t\t\tif (typeof events[i] == 'string')\n\t\t\t{\n\t\t\t\tevents[i] = events[i].split('.');\n\t\t\t}\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_splitEvents: function(events)\n\t{\n\t\tif (typeof events == 'string')\n\t\t{\n\t\t\tevents = events.split(',');\n\n\t\t\tfor (var i = 0; i < events.length; i++)\n\t\t\t{\n\t\t\t\tevents[i] = $.trim(events[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_formatEvents: function(events)\n\t{\n\t\tvar events = this._splitEvents(events).slice(0);\n\n\t\tfor (var i = 0; i < events.length; i++)\n\t\t{\n\t\t\tevents[i] += this._namespace;\n\t\t}\n\n\t\treturn events.join(' ');\n\t},\n\n\taddListener: function(elem, events, data, func)\n\t{\n\t\tvar $elem = $(elem);\n\n\t\t// Ignore if there aren't any elements\n\t\tif (!$elem.length)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tevents = this._splitEvents(events);\n\n\t\t// Param mapping\n\t\tif (typeof func == typeof undefined && typeof data != 'object')\n\t\t{\n\t\t\t// (elem, events, func)\n\t\t\tfunc = data;\n\t\t\tdata = {};\n\t\t}\n\n\t\tif (typeof func == 'function')\n\t\t{\n\t\t\tfunc = $.proxy(func, this);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfunc = $.proxy(this, func);\n\t\t}\n\n\t\t$elem.on(this._formatEvents(events), data, $.proxy(function()\n\t\t{\n\t\t\tif (!this._disabled)\n\t\t\t{\n\t\t\t\tfunc.apply(this, arguments);\n\t\t\t}\n\t\t}, this));\n\n\t\t// Remember that we're listening to this element\n\t\tif ($.inArray(elem, this._listeners) == -1)\n\t\t{\n\t\t\tthis._listeners.push(elem);\n\t\t}\n\t},\n\n\tremoveListener: function(elem, events)\n\t{\n\t\t$(elem).off(this._formatEvents(events));\n\t},\n\n\tremoveAllListeners: function(elem)\n\t{\n\t\t$(elem).off(this._namespace);\n\t},\n\n\tdisable: function()\n\t{\n\t\tthis._disabled = true;\n\t},\n\n\tenable: function()\n\t{\n\t\tthis._disabled = false;\n\t},\n\n\tdestroy: function()\n\t{\n\t\tthis.trigger('destroy');\n\t\tthis.removeAllListeners(this._listeners);\n\t}\n});\n\n// Custom events\n// -----------------------------------------------------------------------------\n\nvar erd;\n\nfunction getErd()\n{\n\tif (typeof erd == typeof undefined)\n\t{\n\t\terd = elementResizeDetectorMaker();\n\t}\n\n\treturn erd;\n}\n\nfunction triggerResizeEvent(elem) {\n\t$(elem).trigger('resize');\n};\n\n// Work them into jQuery's event system\n$.extend(jQuery.event.special, {\n\tactivate: {\n\t\tsetup: function(data, namespaces, eventHandle) {\n\t\t\tvar activateNamespace = this._namespace+'-activate';\n\t\t\tvar $elem = $(this);\n\n\t\t\t$elem.on({\n\t\t\t\t'mousedown.garnish-activate': function(e) {\n\t\t\t\t\t// Prevent buttons from getting focus on click\n\t\t\t\t\te.preventDefault();\n\t\t\t\t},\n\t\t\t\t'click.garnish-activate': function(e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (!$elem.hasClass('disabled'))\n\t\t\t\t\t{\n\t\t\t\t\t\t$elem.trigger('activate');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'keydown.garnish-activate': function(e) {\n\t\t\t\t\t// Ignore if the event was bubbled up, or if it wasn't the space key\n\t\t\t\t\tif (this != $elem[0] || e.keyCode != Garnish.SPACE_KEY) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (!$elem.hasClass('disabled'))\n\t\t\t\t\t{\n\t\t\t\t\t\t$elem.addClass('active');\n\n\t\t\t\t\t\tGarnish.$doc.on('keyup.garnish-activate', function(e) {\n\t\t\t\t\t\t\t$elem.removeClass('active');\n\n\t\t\t\t\t\t\tif (e.keyCode == Garnish.SPACE_KEY) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$elem.trigger('activate');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tGarnish.$doc.off('keyup.garnish-activate');\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!$elem.hasClass('disabled')) {\n\t\t\t\t$elem.attr('tabindex', '0');\n\t\t\t} else {\n\t\t\t\t$elem.removeAttr('tabindex');\n\t\t\t}\n\t\t},\n\t\tteardown: function() {\n\t\t\t$(this).off('.garnish-activate');\n\t\t}\n\t},\n\n\ttextchange: {\n\t\tsetup: function(data, namespaces, eventHandle) {\n\t\t\tvar $elem = $(this);\n\t\t\t$elem.data('garnish-textchange-value', $elem.val());\n\t\t\t$elem.on('keypress.garnish-textchange keyup.garnish-textchange change.garnish-textchange blur.garnish-textchange', function(e) {\n\t\t\t\tvar val = $elem.val();\n\t\t\t\tif (val != $elem.data('garnish-textchange-value'))\n\t\t\t\t{\n\t\t\t\t\t$elem.data('garnish-textchange-value', val);\n\t\t\t\t\t$elem.trigger('textchange');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tteardown: function() {\n\t\t\t$(this).off('.garnish-textchange');\n\t\t},\n\t\thandle: function(ev, data) {\n\t\t\tvar el = this;\n\t\t\tvar args = arguments;\n\t\t\tvar delay = data && typeof data.delay != typeof undefined ? data.delay : (ev.data && typeof ev.data.delay != typeof undefined ? ev.data.delay : null);\n\t\t\tvar handleObj = ev.handleObj;\n\t\t\tvar targetData = $.data(ev.target);\n\n\t\t\t// Was this event configured with a delay?\n\t\t\tif (delay) {\n\t\t\t\tif (targetData.delayTimeout) {\n\t\t\t\t\tclearTimeout(targetData.delayTimeout);\n\t\t\t\t}\n\n\t\t\t\ttargetData.delayTimeout = setTimeout(function() {\n\t\t\t\t\thandleObj.handler.apply(el, args);\n\t\t\t\t}, delay);\n\t\t\t} else {\n\t\t\t\treturn handleObj.handler.apply(el, args);\n\t\t\t}\n\t\t}\n\t},\n\n\tresize: {\n\t\tsetup: function(data, namespaces, eventHandle) {\n\t\t\t// window is the only element that natively supports a resize event\n\t\t\tif (this == window) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$('> :last-child', this).addClass('last');\n\t\t\tgetErd().listenTo(this, triggerResizeEvent)\n\t\t},\n\t\tteardown: function() {\n\t\t\tif (this == window) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tgetErd().removeListener(this, triggerResizeEvent);\n\t\t}\n\t}\n});\n\n// Give them their own element collection chaining methods\njQuery.each(['activate','textchange','resize'], function(i, name) {\n\tjQuery.fn[name] = function(data, fn) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on(name, null, data, fn) :\n\t\t\tthis.trigger(name);\n\t};\n});\n"",""/**\n * Base drag class\n *\n * Does all the grunt work for manipulating elements via click-and-drag,\n * while leaving the actual element manipulation up to a subclass.\n */\nGarnish.BaseDrag = Garnish.Base.extend({\n\n\t// Properties\n\t// =========================================================================\n\n\t$items: null,\n\n\tdragging: false,\n\n\tmousedownX: null,\n\tmousedownY: null,\n\trealMouseX: null,\n\trealMouseY: null,\n\tmouseX: null,\n\tmouseY: null,\n\tmouseDistX: null,\n\tmouseDistY: null,\n\tmouseOffsetX: null,\n\tmouseOffsetY: null,\n\n\t$targetItem: null,\n\n\tscrollProperty: null,\n\tscrollAxis: null,\n\tscrollDist: null,\n\tscrollProxy: null,\n\tscrollFrame: null,\n\n\t_: null,\n\n\t// Public methods\n\t// =========================================================================\n\n\t/**\n\t * Constructor\n\t *\n\t * @param mixed  items    Elements that should be draggable right away. (Can be skipped.)\n\t * @param object settings Any settings that should override the defaults.\n\t */\n\tinit: function(items, settings)\n\t{\n\t\t// Param mapping\n\t\tif (typeof settings == typeof undefined && $.isPlainObject(items))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = items;\n\t\t\titems = null;\n\t\t}\n\n\t\tthis.settings = $.extend({}, Garnish.BaseDrag.defaults, settings);\n\n\t\tthis.$items = $();\n\t\tthis._ = {};\n\n\t\tif (items)\n\t\t{\n\t\t\tthis.addItems(items);\n\t\t}\n\t},\n\n\t/**\n\t * Returns whether dragging is allowed right now.\n\t */\n\tallowDragging: function()\n\t{\n\t\treturn true;\n\t},\n\n\t/**\n\t * Start Dragging\n\t */\n\tstartDragging: function()\n\t{\n\t\tthis.dragging = true;\n\t\tthis.onDragStart();\n\t},\n\n\t/**\n\t * Drag\n\t */\n\tdrag: function(didMouseMove)\n\t{\n\t\tif (didMouseMove)\n\t\t{\n\t\t\t// Is the mouse up against one of the window edges?\n\t\t\tthis.drag._scrollProperty = null;\n\n\t\t\tif (this.settings.axis != Garnish.X_AXIS)\n\t\t\t{\n\t\t\t\t// Scrolling up?\n\t\t\t\tthis.drag._winScrollTop = Garnish.$win.scrollTop();\n\t\t\t\tthis.drag._minMouseScrollY = this.drag._winScrollTop + Garnish.BaseDrag.windowScrollTargetSize;\n\n\t\t\t\tif (this.mouseY < this.drag._minMouseScrollY)\n\t\t\t\t{\n\t\t\t\t\tthis.drag._scrollProperty = 'scrollTop';\n\t\t\t\t\tthis.drag._scrollAxis = 'Y';\n\t\t\t\t\tthis.drag._scrollDist = Math.round((this.mouseY - this.drag._minMouseScrollY) / 2);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Scrolling down?\n\t\t\t\t\tthis.drag._maxMouseScrollY = this.drag._winScrollTop + Garnish.$win.height() - Garnish.BaseDrag.windowScrollTargetSize;\n\n\t\t\t\t\tif (this.mouseY > this.drag._maxMouseScrollY)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.drag._scrollProperty = 'scrollTop';\n\t\t\t\t\t\tthis.drag._scrollAxis = 'Y';\n\t\t\t\t\t\tthis.drag._scrollDist = Math.round((this.mouseY - this.drag._maxMouseScrollY) / 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.drag._scrollProperty && this.settings.axis != Garnish.Y_AXIS)\n\t\t\t{\n\t\t\t\t// Scrolling left?\n\t\t\t\tthis.drag._winScrollLeft = Garnish.$win.scrollLeft();\n\t\t\t\tthis.drag._minMouseScrollX = this.drag._winScrollLeft + Garnish.BaseDrag.windowScrollTargetSize;\n\n\t\t\t\tif (this.mouseX < this.drag._minMouseScrollX)\n\t\t\t\t{\n\t\t\t\t\tthis.drag._scrollProperty = 'scrollLeft';\n\t\t\t\t\tthis.drag._scrollAxis = 'X';\n\t\t\t\t\tthis.drag._scrollDist = Math.round((this.mouseX - this.drag._minMouseScrollX) / 2);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Scrolling right?\n\t\t\t\t\tthis.drag._maxMouseScrollX = this.drag._winScrollLeft + Garnish.$win.width() - Garnish.BaseDrag.windowScrollTargetSize;\n\n\t\t\t\t\tif (this.mouseX > this.drag._maxMouseScrollX)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.drag._scrollProperty = 'scrollLeft';\n\t\t\t\t\t\tthis.drag._scrollAxis = 'X';\n\t\t\t\t\t\tthis.drag._scrollDist = Math.round((this.mouseX - this.drag._maxMouseScrollX) / 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.drag._scrollProperty)\n\t\t\t{\n\t\t\t\t// Are we starting to scroll now?\n\t\t\t\tif (!this.scrollProperty)\n\t\t\t\t{\n\t\t\t\t\tif (!this.scrollProxy)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.scrollProxy = $.proxy(this, '_scrollWindow');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.scrollFrame)\n\t\t\t\t\t{\n\t\t\t\t\t\tGarnish.cancelAnimationFrame(this.scrollFrame);\n\t\t\t\t\t\tthis.scrollFrame = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.scrollFrame = Garnish.requestAnimationFrame(this.scrollProxy);\n\t\t\t\t}\n\n\t\t\t\tthis.scrollProperty = this.drag._scrollProperty;\n\t\t\t\tthis.scrollAxis = this.drag._scrollAxis;\n\t\t\t\tthis.scrollDist = this.drag._scrollDist;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._cancelWindowScroll();\n\t\t\t}\n\t\t}\n\n\t\tthis.onDrag();\n\t},\n\n\t/**\n\t * Stop Dragging\n\t */\n\tstopDragging: function()\n\t{\n\t\tthis.dragging = false;\n\t\tthis.onDragStop();\n\n\t\t// Clear the scroll animation\n\t\tthis._cancelWindowScroll();\n\t},\n\n\t/**\n\t * Add Items\n\t *\n\t * @param mixed items Elements that should be draggable.\n\t */\n\taddItems: function(items)\n\t{\n\t\titems = $.makeArray(items);\n\n\t\tfor (var i = 0; i < items.length; i++)\n\t\t{\n\t\t\tvar item = items[i];\n\n\t\t\t// Make sure this element doesn't belong to another dragger\n\t\t\tif ($.data(item, 'drag'))\n\t\t\t{\n\t\t\t\tGarnish.log('Element was added to more than one dragger');\n\t\t\t\t$.data(item, 'drag').removeItems(item);\n\t\t\t}\n\n\t\t\t// Add the item\n\t\t\t$.data(item, 'drag', this);\n\n\t\t\t// Add the listener\n\t\t\tthis.addListener(item, 'mousedown', '_handleMouseDown');\n\t\t}\n\n\t\tthis.$items = this.$items.add(items);\n\t},\n\n\t/**\n\t * Remove Items\n\t *\n\t * @param mixed items Elements that should no longer be draggable.\n\t */\n\tremoveItems: function(items)\n\t{\n\t\titems = $.makeArray(items);\n\n\t\tfor (var i = 0; i < items.length; i++)\n\t\t{\n\t\t\tvar item = items[i];\n\n\t\t\t// Make sure we actually know about this item\n\t\t\tvar index = $.inArray(item, this.$items);\n\t\t\tif (index != -1)\n\t\t\t{\n\t\t\t\tthis._deinitItem(item);\n\t\t\t\tthis.$items.splice(index, 1);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Remove All Items\n\t */\n\tremoveAllItems: function()\n\t{\n\t\tfor (var i = 0; i < this.$items.length; i++)\n\t\t{\n\t\t\tthis._deinitItem(this.$items[i]);\n\t\t}\n\n\t\tthis.$items = $();\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.removeAllItems();\n\t\tthis.base();\n\t},\n\n\t// Events\n\t// -------------------------------------------------------------------------\n\n\t/**\n\t * On Drag Start\n\t */\n\tonDragStart: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('dragStart');\n\t\t\tthis.settings.onDragStart();\n\t\t}, this));\n\t},\n\n\t/**\n\t * On Drag\n\t */\n\tonDrag: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('drag');\n\t\t\tthis.settings.onDrag();\n\t\t}, this));\n\t},\n\n\t/**\n\t * On Drag Stop\n\t */\n\tonDragStop: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('dragStop');\n\t\t\tthis.settings.onDragStop();\n\t\t}, this));\n\t},\n\n\t// Private methods\n\t// =========================================================================\n\n\t/**\n\t * Handle Mouse Down\n\t */\n\t_handleMouseDown: function(ev)\n\t{\n\t\t// Ignore right clicks\n\t\tif (ev.which != Garnish.PRIMARY_CLICK)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore if we already have a target\n\t\tif (this.$targetItem)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore if they didn't actually click on the handle\n\t\tvar $target = $(ev.target),\n\t\t\t$handle = this._getItemHandle(ev.currentTarget);\n\n\t\tif (!$target.is($handle) && !$target.closest($handle).length)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure the target isn't a button (unless the button is the handle)\n\t\tif (ev.currentTarget != ev.target && this.settings.ignoreHandleSelector)\n\t\t{\n\t\t\tif (\n\t\t\t\t$target.is(this.settings.ignoreHandleSelector) ||\n\t\t\t\t$target.closest(this.settings.ignoreHandleSelector).length\n\t\t\t)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tev.preventDefault();\n\n\t\t// Make sure that dragging is allowed right now\n\t\tif (!this.allowDragging())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Capture the target\n\t\tthis.$targetItem = $(ev.currentTarget);\n\n\t\t// Capture the current mouse position\n\t\tthis.mousedownX = this.mouseX = ev.pageX;\n\t\tthis.mousedownY = this.mouseY = ev.pageY;\n\n\t\t// Capture the difference between the mouse position and the target item's offset\n\t\tvar offset = this.$targetItem.offset();\n\t\tthis.mouseOffsetX = ev.pageX - offset.left;\n\t\tthis.mouseOffsetY = ev.pageY - offset.top;\n\n\t\t// Listen for mousemove, mouseup\n\t\tthis.addListener(Garnish.$doc, 'mousemove', '_handleMouseMove');\n\t\tthis.addListener(Garnish.$doc, 'mouseup', '_handleMouseUp');\n\t},\n\n\t_getItemHandle: function(item)\n\t{\n\t\tif (this.settings.handle)\n\t\t{\n\t\t\tif (typeof this.settings.handle == 'object')\n\t\t\t{\n\t\t\t\treturn $(this.settings.handle);\n\t\t\t}\n\n\t\t\tif (typeof this.settings.handle == 'string')\n\t\t\t{\n\t\t\t\treturn $(this.settings.handle, item);\n\t\t\t}\n\n\t\t\tif (typeof this.settings.handle == 'function')\n\t\t\t{\n\t\t\t\treturn $(this.settings.handle(item));\n\t\t\t}\n\t\t}\n\n\t\treturn $(item);\n\t},\n\n\t/**\n\t * Handle Mouse Move\n\t */\n\t_handleMouseMove: function(ev)\n\t{\n\t\tev.preventDefault();\n\n\t\tthis.realMouseX = ev.pageX;\n\t\tthis.realMouseY = ev.pageY;\n\n\t\tif (this.settings.axis != Garnish.Y_AXIS)\n\t\t{\n\t\t\tthis.mouseX = ev.pageX;\n\t\t}\n\n\t\tif (this.settings.axis != Garnish.X_AXIS)\n\t\t{\n\t\t\tthis.mouseY = ev.pageY;\n\t\t}\n\n\t\tthis.mouseDistX = this.mouseX - this.mousedownX;\n\t\tthis.mouseDistY = this.mouseY - this.mousedownY;\n\n\t\tif (!this.dragging)\n\t\t{\n\t\t\t// Has the mouse moved far enough to initiate dragging yet?\n\t\t\tthis._handleMouseMove._mouseDist = Garnish.getDist(this.mousedownX, this.mousedownY, this.realMouseX, this.realMouseY);\n\n\t\t\tif (this._handleMouseMove._mouseDist >= Garnish.BaseDrag.minMouseDist)\n\t\t\t{\n\t\t\t\tthis.startDragging();\n\t\t\t}\n\t\t}\n\n\t\tif (this.dragging)\n\t\t{\n\t\t\tthis.drag(true);\n\t\t}\n\t},\n\n\t/**\n\t * Handle Moues Up\n\t */\n\t_handleMouseUp: function(ev)\n\t{\n\t\t// Unbind the document events\n\t\tthis.removeAllListeners(Garnish.$doc);\n\n\t\tif (this.dragging)\n\t\t{\n\t\t\tthis.stopDragging();\n\t\t}\n\n\t\tthis.$targetItem = null;\n\t},\n\n\t/**\n\t * Scroll Window\n\t */\n\t_scrollWindow: function()\n\t{\n\t\tthis._.scrollPos = Garnish.$scrollContainer[this.scrollProperty]();\n\t\tGarnish.$scrollContainer[this.scrollProperty](this._.scrollPos + this.scrollDist);\n\n\t\tthis['mouse'+this.scrollAxis] -= this._.scrollPos - Garnish.$scrollContainer[this.scrollProperty]();\n\t\tthis['realMouse'+this.scrollAxis] = this['mouse'+this.scrollAxis];\n\n\t\tthis.drag();\n\n\t\tthis.scrollFrame = Garnish.requestAnimationFrame(this.scrollProxy);\n\t},\n\n\t/**\n\t * Cancel Window Scroll\n\t */\n\t_cancelWindowScroll: function()\n\t{\n\t\tif (this.scrollFrame)\n\t\t{\n\t\t\tGarnish.cancelAnimationFrame(this.scrollFrame);\n\t\t\tthis.scrollFrame = null;\n\t\t}\n\n\t\tthis.scrollProperty = null;\n\t\tthis.scrollAxis = null;\n\t\tthis.scrollDist = null;\n\t},\n\n\t/**\n\t * Deinitialize an item.\n\t */\n\t_deinitItem: function(item)\n\t{\n\t\tthis.removeAllListeners(item);\n\t\t$.removeData(item, 'drag');\n\t}\n},\n\n// Static Properties\n// =============================================================================\n\n{\n\tminMouseDist: 1,\n\twindowScrollTargetSize: 25,\n\n\tdefaults: {\n\t\thandle: null,\n\t\taxis: null,\n\t\tignoreHandleSelector: 'input, textarea, button, select, .btn',\n\n\t\tonDragStart: $.noop,\n\t\tonDrag:      $.noop,\n\t\tonDragStop:  $.noop\n\t}\n});\n"",""\n/**\n * Checkbox select class\n */\nGarnish.CheckboxSelect = Garnish.Base.extend({\n\n\t$container: null,\n\t$all: null,\n\t$options: null,\n\n\tinit: function(container)\n\t{\n\t\tthis.$container = $(container);\n\n\t\t// Is this already a checkbox select?\n\t\tif (this.$container.data('checkboxSelect'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a checkbox select on an element');\n\t\t\tthis.$container.data('checkbox-select').destroy();\n\t\t}\n\n\t\tthis.$container.data('checkboxSelect', this);\n\n\t\tvar $checkboxes = this.$container.find('input');\n\t\tthis.$all = $checkboxes.filter('.all:first');\n\t\tthis.$options = $checkboxes.not(this.$all);\n\n\t\tthis.addListener(this.$all, 'change', 'onAllChange');\n\t},\n\n\tonAllChange: function()\n\t{\n\t\tvar isAllChecked = this.$all.prop('checked');\n\n\t\tthis.$options.prop({\n\t\t\tchecked:  isAllChecked,\n\t\t\tdisabled: isAllChecked\n\t\t});\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$container.removeData('checkboxSelect');\n\t\tthis.base();\n\t}\n});\n"",""/**\n * Context Menu\n */\nGarnish.ContextMenu = Garnish.Base.extend({\n\n\t$target: null,\n\toptions: null,\n\t$menu: null,\n\tshowingMenu: false,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(target, options, settings)\n\t{\n\t\tthis.$target = $(target);\n\n\t\t// Is this already a context menu target?\n\t\tif (this.$target.data('contextmenu'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a context menu on an element');\n\t\t\tthis.$target.data('contextmenu').destroy();\n\t\t}\n\n\t\tthis.$target.data('contextmenu', this);\n\n\t\tthis.options = options;\n\t\tthis.setSettings(settings, Garnish.ContextMenu.defaults);\n\n\t\tGarnish.ContextMenu.counter++;\n\n\t\tthis.enable();\n\t},\n\n\t/**\n\t * Build Menu\n\t */\n\tbuildMenu: function()\n\t{\n\t\tthis.$menu = $('<div class=\""'+this.settings.menuClass+'\"" style=\""display: none\"" />');\n\n\t\tvar $ul = $('<ul/>').appendTo(this.$menu);\n\n\t\tfor (var i in this.options)\n\t\t{\n\t\t\tvar option = this.options[i];\n\n\t\t\tif (option == '-')\n\t\t\t{\n\t\t\t\t// Create a new <ul>\n\t\t\t\t$('<hr/>').appendTo(this.$menu);\n\t\t\t\t$ul = $('<ul/>').appendTo(this.$menu);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar $li = $('<li></li>').appendTo($ul),\n\t\t\t\t\t$a = $('<a>'+option.label+'</a>').appendTo($li);\n\n\t\t\t\tif (typeof option.onClick == 'function')\n\t\t\t\t{\n\t\t\t\t\t// maintain the current $a and options.onClick variables\n\t\t\t\t\t(function($a, onClick)\n\t\t\t\t\t{\n\t\t\t\t\t\tsetTimeout($.proxy(function(){\n\t\t\t\t\t\t\t$a.mousedown($.proxy(function(ev)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tthis.hideMenu();\n\t\t\t\t\t\t\t\t// call the onClick callback, with the scope set to the item,\n\t\t\t\t\t\t\t\t// and pass it the event with currentTarget set to the item as well\n\t\t\t\t\t\t\t\tonClick.call(this.currentTarget, $.extend(ev, { currentTarget: this.currentTarget }));\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t}, this), 1);\n\t\t\t\t\t}).call(this, $a, option.onClick);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Show Menu\n\t */\n\tshowMenu: function(ev)\n\t{\n\t\t// Ignore left mouse clicks\n\t\tif (ev.type == 'mousedown' && ev.which != Garnish.SECONDARY_CLICK)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (ev.type == 'contextmenu')\n\t\t{\n\t\t\t// Prevent the real context menu from showing\n\t\t\tev.preventDefault();\n\t\t}\n\n\t\t// Ignore if already showing\n\t\tif (this.showing && ev.currentTarget == this.currentTarget)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentTarget = ev.currentTarget;\n\n\t\tif (!this.$menu)\n\t\t{\n\t\t\tthis.buildMenu();\n\t\t}\n\n\t\tthis.$menu.appendTo(document.body);\n\t\tthis.$menu.show();\n\t\tthis.$menu.css({ left: ev.pageX+1, top: ev.pageY-4 });\n\n\t\tthis.showing = true;\n\n\t\tsetTimeout($.proxy(function()\n\t\t{\n\t\t\tthis.addListener(Garnish.$doc, 'mousedown', 'hideMenu');\n\t\t}, this), 0);\n\t},\n\n\t/**\n\t * Hide Menu\n\t */\n\thideMenu: function()\n\t{\n\t\tthis.removeListener(Garnish.$doc, 'mousedown');\n\t\tthis.$menu.hide();\n\t\tthis.showing = false;\n\t},\n\n\t/**\n\t * Enable\n\t */\n\tenable: function()\n\t{\n\t\tthis.addListener(this.$target, 'contextmenu,mousedown', 'showMenu');\n\t},\n\n\t/**\n\t * Disable\n\t */\n\tdisable: function()\n\t{\n\t\tthis.removeListener(this.$target, 'contextmenu,mousedown');\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$target.removeData('contextmenu');\n\t\tthis.base();\n\t}\n},\n{\n\tdefaults: {\n\t\tmenuClass: 'menu'\n\t},\n\tcounter: 0\n});\n"",""/**\n * Drag class\n *\n * Builds on the BaseDrag class by \""picking up\"" the selceted element(s),\n * without worrying about what to do when an element is being dragged.\n */\nGarnish.Drag = Garnish.BaseDrag.extend({\n\n\t// Properties\n\t// =========================================================================\n\n\ttargetItemWidth: null,\n\ttargetItemHeight: null,\n\ttargetItemPositionInDraggee: null,\n\n\t$draggee: null,\n\n\totherItems: null,\n\ttotalOtherItems: null,\n\n\thelpers: null,\n\thelperTargets: null,\n\thelperPositions: null,\n\thelperLagIncrement: null,\n\tupdateHelperPosProxy: null,\n\tupdateHelperPosFrame: null,\n\n\tlastMouseX: null,\n\tlastMouseY: null,\n\n\t_returningHelpersToDraggees: false,\n\n\t// Public methods\n\t// =========================================================================\n\n\t/**\n\t * Constructor\n\t *\n\t * @param mixed  items    Elements that should be draggable right away. (Can be skipped.)\n\t * @param object settings Any settings that should override the defaults.\n\t */\n\tinit: function(items, settings)\n\t{\n\t\t// Param mapping\n\t\tif (typeof settings == typeof undefined && $.isPlainObject(items))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = items;\n\t\t\titems = null;\n\t\t}\n\n\t\tsettings = $.extend({}, Garnish.Drag.defaults, settings);\n\t\tthis.base(items, settings);\n\t},\n\n\t/**\n\t * Returns whether dragging is allowed right now.\n\t */\n\tallowDragging: function()\n\t{\n\t\t// Don't allow dragging if we're in the middle of animating the helpers back to the draggees\n\t\treturn !this._returningHelpersToDraggees;\n\t},\n\n\t/**\n\t * Start Dragging\n\t */\n\tstartDragging: function()\n\t{\n\t\t// Reset some things\n\t\tthis.helpers = [];\n\t\tthis.helperTargets = [];\n\t\tthis.helperPositions = [];\n\t\tthis.lastMouseX = this.lastMouseY = null;\n\n\t\t// Capture the target item's width/height\n\t\tthis.targetItemWidth  = this.$targetItem.outerWidth();\n\t\tthis.targetItemHeight = this.$targetItem.outerHeight();\n\n\t\t// Save the draggee's display style (block/table-row) so we can re-apply it later\n\t\tthis.draggeeDisplay = this.$targetItem.css('display');\n\n\t\t// Set the $draggee\n\t\tthis.setDraggee(this.findDraggee());\n\n\t\t// Create an array of all the other items\n\t\tthis.otherItems = [];\n\n\t\tfor (var i = 0; i < this.$items.length; i++)\n\t\t{\n\t\t\tvar item = this.$items[i];\n\n\t\t\tif ($.inArray(item, this.$draggee) == -1)\n\t\t\t{\n\t\t\t\tthis.otherItems.push(item);\n\t\t\t}\n\t\t};\n\n\t\tthis.totalOtherItems = this.otherItems.length;\n\n\t\t// Keep the helpers following the cursor, with a little lag to smooth it out\n\t\tif (!this.updateHelperPosProxy)\n\t\t{\n\t\t\tthis.updateHelperPosProxy = $.proxy(this, '_updateHelperPos');\n\t\t}\n\n\t\tthis.helperLagIncrement = this.helpers.length == 1 ? 0 : this.settings.helperLagIncrementDividend / (this.helpers.length-1);\n\t\tthis.updateHelperPosFrame = Garnish.requestAnimationFrame(this.updateHelperPosProxy);\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * Sets the draggee.\n\t */\n\tsetDraggee: function($draggee)\n\t{\n\t\t// Record the target item's position in the draggee\n\t\tthis.targetItemPositionInDraggee = $.inArray(this.$targetItem[0], $draggee.add(this.$targetItem[0]));\n\n\t\t// Keep the target item at the front of the list\n\t\tthis.$draggee = $([ this.$targetItem[0] ].concat($draggee.not(this.$targetItem).toArray()));\n\n\t\t// Create the helper(s)\n\t\tif (this.settings.singleHelper)\n\t\t{\n\t\t\tthis._createHelper(0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i = 0; i < this.$draggee.length; i++)\n\t\t\t{\n\t\t\t\tthis._createHelper(i);\n\t\t\t}\n\t\t}\n\n\t\tif (this.settings.removeDraggee)\n\t\t{\n\t\t\tthis.$draggee.hide();\n\t\t}\n\t\telse if (this.settings.collapseDraggees)\n\t\t{\n\t\t\tthis.$targetItem.css('visibility', 'hidden');\n\t\t\tthis.$draggee.not(this.$targetItem).hide();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$draggee.css('visibility', 'hidden');\n\t\t}\n\t},\n\n\t/**\n\t * Appends additional items to the draggee.\n\t */\n\tappendDraggee: function($newDraggee)\n\t{\n\t\tif (!$newDraggee.length)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.settings.collapseDraggees)\n\t\t{\n\t\t\tvar oldLength = this.$draggee.length;\n\t\t}\n\n\t\tthis.$draggee = $(this.$draggee.toArray().concat($newDraggee.toArray()));\n\n\t\t// Create new helpers?\n\t\tif (!this.settings.collapseDraggees)\n\t\t{\n\t\t\tvar newLength = this.$draggee.length;\n\n\t\t\tfor (var i = oldLength; i < newLength; i++)\n\t\t\t{\n\t\t\t\tthis._createHelper(i);\n\t\t\t}\n\t\t}\n\n\t\tif (this.settings.removeDraggee || this.settings.collapseDraggees)\n\t\t{\n\t\t\t$newDraggee.hide();\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$newDraggee.css('visibility', 'hidden');\n\t\t}\n\t},\n\n\t/**\n\t * Drag\n\t */\n\tdrag: function(didMouseMove)\n\t{\n\t\t// Update the draggee's virtual midpoint\n\t\tthis.draggeeVirtualMidpointX = this.mouseX - this.mouseOffsetX + (this.targetItemWidth / 2);\n\t\tthis.draggeeVirtualMidpointY = this.mouseY - this.mouseOffsetY + (this.targetItemHeight / 2);\n\n\t\tthis.base(didMouseMove);\n\t},\n\n\t/**\n\t * Stop Dragging\n\t */\n\tstopDragging: function()\n\t{\n\t\t// Clear the helper animation\n\t\tGarnish.cancelAnimationFrame(this.updateHelperPosFrame);\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * Identifies the item(s) that are being dragged.\n\t */\n\tfindDraggee: function()\n\t{\n\t\tswitch (typeof this.settings.filter)\n\t\t{\n\t\t\tcase 'function':\n\t\t\t{\n\t\t\t\treturn this.settings.filter();\n\t\t\t}\n\n\t\t\tcase 'string':\n\t\t\t{\n\t\t\t\treturn this.$items.filter(this.settings.filter);\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\treturn this.$targetItem;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Returns the helper’s target X position\n\t */\n\tgetHelperTargetX: function()\n\t{\n\t\treturn this.mouseX - this.mouseOffsetX;\n\t},\n\n\t/**\n\t * Returns the helper’s target Y position\n\t */\n\tgetHelperTargetY: function()\n\t{\n\t\treturn this.mouseY - this.mouseOffsetY;\n\t},\n\n\t/**\n\t * Return Helpers to Draggees\n\t */\n\treturnHelpersToDraggees: function()\n\t{\n\t\tthis._returningHelpersToDraggees = true;\n\n\t\tfor (var i = 0; i < this.helpers.length; i++)\n\t\t{\n\t\t\tvar $draggee = this.$draggee.eq(i),\n\t\t\t\t$helper = this.helpers[i];\n\n\t\t\t$draggee.css({\n\t\t\t\tdisplay:    this.draggeeDisplay,\n\t\t\t\tvisibility: 'hidden'\n\t\t\t});\n\n\t\t\tvar draggeeOffset = $draggee.offset();\n\n\t\t\tif (i == 0)\n\t\t\t{\n\t\t\t\tvar callback = $.proxy(this, '_showDraggee');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar callback = null;\n\t\t\t}\n\n\t\t\t$helper.velocity({left: draggeeOffset.left, top: draggeeOffset.top}, Garnish.FX_DURATION, callback);\n\t\t}\n\t},\n\n\t// Events\n\t// -------------------------------------------------------------------------\n\n\tonReturnHelpersToDraggees: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('returnHelpersToDraggees');\n\t\t\tthis.settings.onReturnHelpersToDraggees();\n\t\t}, this));\n\t},\n\n\t// Private methods\n\t// =========================================================================\n\n\t/**\n\t * Creates a helper.\n\t */\n\t_createHelper: function(i)\n\t{\n\t\tvar $draggee = this.$draggee.eq(i),\n\t\t\t$draggeeHelper = $draggee.clone().addClass('draghelper');\n\n\t\tif (this.settings.copyDraggeeInputValuesToHelper)\n\t\t{\n\t\t\tGarnish.copyInputValues($draggee, $draggeeHelper);\n\t\t}\n\n\t\t// Remove any name= attributes so radio buttons don't lose their values\n\t\t$draggeeHelper.find('[name]').attr('name', '');\n\n\t\t$draggeeHelper.css({\n\t\t\twidth: $draggee.width() + 1, // Prevent the brower from wrapping text if the width was actually a fraction of a pixel larger\n\t\t\theight: $draggee.height(),\n\t\t\tmargin: 0\n\t\t});\n\n\t\tif (this.settings.helper)\n\t\t{\n\t\t\tif (typeof this.settings.helper == 'function')\n\t\t\t{\n\t\t\t\t$draggeeHelper = this.settings.helper($draggeeHelper);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$draggeeHelper = $(this.settings.helper).append($draggeeHelper);\n\t\t\t}\n\t\t}\n\n\t\t$draggeeHelper.appendTo(Garnish.$bod);\n\n\t\tvar helperPos = this._getHelperTarget(i);\n\n\t\t$draggeeHelper.css({\n\t\t\tposition: 'absolute',\n\t\t\ttop: helperPos.top,\n\t\t\tleft: helperPos.left,\n\t\t\tzIndex: this.settings.helperBaseZindex + this.$draggee.length - i,\n\t\t\topacity: this.settings.helperOpacity\n\t\t});\n\n\t\tthis.helperPositions[i] = {\n\t\t\ttop:  helperPos.top,\n\t\t\tleft: helperPos.left\n\t\t};\n\n\t\tthis.helpers.push($draggeeHelper);\n\t},\n\n\t/**\n\t * Update Helper Position\n\t */\n\t_updateHelperPos: function()\n\t{\n\t\t// Has the mouse moved?\n\t\tif (this.mouseX !== this.lastMouseX || this.mouseY !== this.lastMouseY)\n\t\t{\n\t\t\t// Get the new target helper positions\n\t\t\tfor (this._updateHelperPos._i = 0; this._updateHelperPos._i < this.helpers.length; this._updateHelperPos._i++)\n\t\t\t{\n\t\t\t\tthis.helperTargets[this._updateHelperPos._i] = this._getHelperTarget(this._updateHelperPos._i);\n\t\t\t}\n\n\t\t\tthis.lastMouseX = this.mouseX;\n\t\t\tthis.lastMouseY = this.mouseY;\n\t\t}\n\n\t\t// Gravitate helpers toward their target positions\n\t\tfor (this._updateHelperPos._j = 0; this._updateHelperPos._j < this.helpers.length; this._updateHelperPos._j++)\n\t\t{\n\t\t\tthis._updateHelperPos._lag = this.settings.helperLagBase + (this.helperLagIncrement * this._updateHelperPos._j);\n\n\t\t\tthis.helperPositions[this._updateHelperPos._j] = {\n\t\t\t\tleft: this.helperPositions[this._updateHelperPos._j].left + ((this.helperTargets[this._updateHelperPos._j].left - this.helperPositions[this._updateHelperPos._j].left) / this._updateHelperPos._lag),\n\t\t\t\ttop:  this.helperPositions[this._updateHelperPos._j].top  + ((this.helperTargets[this._updateHelperPos._j].top  - this.helperPositions[this._updateHelperPos._j].top) / this._updateHelperPos._lag)\n\t\t\t};\n\n\t\t\tthis.helpers[this._updateHelperPos._j].css(this.helperPositions[this._updateHelperPos._j]);\n\t\t}\n\n\t\t// Let's do this again on the next frame!\n\t\tthis.updateHelperPosFrame = Garnish.requestAnimationFrame(this.updateHelperPosProxy);\n\t},\n\n\t/**\n\t * Get the helper position for a draggee helper\n\t */\n\t_getHelperTarget: function(i)\n\t{\n\t\treturn {\n\t\t\tleft: this.getHelperTargetX() + (this.settings.helperSpacingX * i),\n\t\t\ttop:  this.getHelperTargetY() + (this.settings.helperSpacingY * i)\n\t\t};\n\t},\n\n\t_showDraggee: function()\n\t{\n\t\t// Remove the helpers\n\t\tfor (var i = 0; i < this.helpers.length; i++)\n\t\t{\n\t\t\tthis.helpers[i].remove();\n\t\t}\n\n\t\tthis.helpers = null;\n\n\t\tthis.$draggee.show().css('visibility', 'inherit');\n\n\t\tthis.onReturnHelpersToDraggees();\n\n\t\tthis._returningHelpersToDraggees = false;\n\t}\n},\n\n// Static Properties\n// =============================================================================\n\n{\n\tdefaults: {\n\t\tfilter: null,\n\t\tsingleHelper: false,\n\t\tcollapseDraggees: false,\n\t\tremoveDraggee: false,\n\t\tcopyDraggeeInputValuesToHelper: false,\n\t\thelperOpacity: 1,\n\t\thelper: null,\n\t\thelperBaseZindex: 1000,\n\t\thelperLagBase: 1,\n\t\thelperLagIncrementDividend: 1.5,\n\t\thelperSpacingX: 5,\n\t\thelperSpacingY: 5,\n\t\tonReturnHelpersToDraggees: $.noop\n\t}\n});\n"",""/**\n * Drag-and-drop class\n *\n * Builds on the Drag class by allowing you to set up \""drop targets\""\n * which the dragged elemements can be dropped onto.\n */\nGarnish.DragDrop = Garnish.Drag.extend({\n\n\t$dropTargets: null,\n\t$activeDropTarget: null,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(settings)\n\t{\n\t\tsettings = $.extend({}, Garnish.DragDrop.defaults, settings);\n\t\tthis.base(settings);\n\t},\n\n\tupdateDropTargets: function()\n\t{\n\t\tif (this.settings.dropTargets)\n\t\t{\n\t\t\tif (typeof this.settings.dropTargets == 'function')\n\t\t\t{\n\t\t\t\tthis.$dropTargets = $(this.settings.dropTargets());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.$dropTargets = $(this.settings.dropTargets);\n\t\t\t}\n\n\t\t\t// Discard if it's an empty array\n\t\t\tif (!this.$dropTargets.length)\n\t\t\t{\n\t\t\t\tthis.$dropTargets = null;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * On Drag Start\n\t */\n\tonDragStart: function()\n\t{\n\t\tthis.updateDropTargets();\n\t\tthis.$activeDropTarget = null;\n\t\tthis.base();\n\t},\n\n\t/**\n\t * On Drag\n\t */\n\tonDrag: function()\n\t{\n\t\tif (this.$dropTargets)\n\t\t{\n\t\t\tthis.onDrag._activeDropTarget = null;\n\n\t\t\t// is the cursor over any of the drop target?\n\t\t\tfor (this.onDrag._i = 0; this.onDrag._i < this.$dropTargets.length; this.onDrag._i++)\n\t\t\t{\n\t\t\t\tthis.onDrag._elem = this.$dropTargets[this.onDrag._i];\n\n\t\t\t\tif (Garnish.hitTest(this.mouseX, this.mouseY, this.onDrag._elem))\n\t\t\t\t{\n\t\t\t\t\tthis.onDrag._activeDropTarget = this.onDrag._elem;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// has the drop target changed?\n\t\t\tif (\n\t\t\t\t(this.$activeDropTarget && this.onDrag._activeDropTarget != this.$activeDropTarget[0]) ||\n\t\t\t\t(!this.$activeDropTarget && this.onDrag._activeDropTarget !== null)\n\t\t\t)\n\t\t\t{\n\t\t\t\t// was there a previous one?\n\t\t\t\tif (this.$activeDropTarget)\n\t\t\t\t{\n\t\t\t\t\tthis.$activeDropTarget.removeClass(this.settings.activeDropTargetClass);\n\t\t\t\t}\n\n\t\t\t\t// remember the new one\n\t\t\t\tif (this.onDrag._activeDropTarget)\n\t\t\t\t{\n\t\t\t\t\tthis.$activeDropTarget = $(this.onDrag._activeDropTarget).addClass(this.settings.activeDropTargetClass);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.$activeDropTarget = null;\n\t\t\t\t}\n\n\t\t\t\tthis.settings.onDropTargetChange(this.$activeDropTarget);\n\t\t\t}\n\t\t}\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * On Drag Stop\n\t */\n\tonDragStop: function()\n\t{\n\t\tif (this.$dropTargets && this.$activeDropTarget)\n\t\t{\n\t\t\tthis.$activeDropTarget.removeClass(this.settings.activeDropTargetClass);\n\t\t}\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * Fade Out Helpers\n\t */\n\tfadeOutHelpers: function()\n\t{\n\t\tfor (var i = 0; i < this.helpers.length; i++)\n\t\t{\n\t\t\t(function($draggeeHelper)\n\t\t\t{\n\t\t\t\t$draggeeHelper.velocity('fadeOut', {\n\t\t\t\t\tduration: Garnish.FX_DURATION,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\t$draggeeHelper.remove();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})(this.helpers[i]);\n\t\t}\n\t}\n},\n{\n\tdefaults: {\n\t\tdropTargets: null,\n\t\tonDropTargetChange: $.noop,\n\t\tactiveDropTargetClass: 'active'\n\t}\n});\n"",""/**\n * Drag-to-move clas\n *\n * Builds on the BaseDrag class by simply moving the dragged element(s) along with the mouse.\n */\nGarnish.DragMove = Garnish.BaseDrag.extend({\n\n\tonDrag: function(items, settings)\n\t{\n\t\tthis.$targetItem.css({\n\t\t\tleft: this.mouseX - this.mouseOffsetX,\n\t\t\ttop:  this.mouseY - this.mouseOffsetY\n\t\t});\n\t}\n\n});\n"",""/**\n * Drag-to-sort class\n *\n * Builds on the Drag class by allowing you to sort the elements amongst themselves.\n */\nGarnish.DragSort = Garnish.Drag.extend({\n\n\t// Properties\n\t// =========================================================================\n\n\t$heightedContainer: null,\n\t$insertion: null,\n\tinsertionVisible: false,\n\toldDraggeeIndexes: null,\n\tnewDraggeeIndexes: null,\n\tclosestItem: null,\n\n\t_midpointVersion: 0,\n\t_$prevItem: null,\n\n\t// Public methods\n\t// =========================================================================\n\n\t/**\n\t * Constructor\n\t *\n\t * @param mixed  items    Elements that should be draggable right away. (Can be skipped.)\n\t * @param object settings Any settings that should override the defaults.\n\t */\n\tinit: function(items, settings)\n\t{\n\t\t// Param mapping\n\t\tif (typeof settings == typeof undefined && $.isPlainObject(items))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = items;\n\t\t\titems = null;\n\t\t}\n\n\t\tsettings = $.extend({}, Garnish.DragSort.defaults, settings);\n\t\tthis.base(items, settings);\n\t},\n\n\t/**\n\t * Creates the insertion element.\n\t */\n\tcreateInsertion: function()\n\t{\n\t\tif (this.settings.insertion)\n\t\t{\n\t\t\tif (typeof this.settings.insertion == 'function')\n\t\t\t{\n\t\t\t\treturn $(this.settings.insertion(this.$draggee));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn $(this.settings.insertion);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Returns the helper’s target X position\n\t */\n\tgetHelperTargetX: function()\n\t{\n\t\tif (this.settings.magnetStrength != 1)\n\t\t{\n\t\t\tthis.getHelperTargetX._draggeeOffsetX = this.$draggee.offset().left;\n\t\t\treturn this.getHelperTargetX._draggeeOffsetX + ((this.mouseX - this.mouseOffsetX - this.getHelperTargetX._draggeeOffsetX) / this.settings.magnetStrength);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn this.base();\n\t\t}\n\t},\n\n\t/**\n\t * Returns the helper’s target Y position\n\t */\n\tgetHelperTargetY: function()\n\t{\n\t\tif (this.settings.magnetStrength != 1)\n\t\t{\n\t\t\tthis.getHelperTargetY._draggeeOffsetY = this.$draggee.offset().top;\n\t\t\treturn this.getHelperTargetY._draggeeOffsetY + ((this.mouseY - this.mouseOffsetY - this.getHelperTargetY._draggeeOffsetY) / this.settings.magnetStrength);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn this.base();\n\t\t}\n\t},\n\n\t/**\n\t * Returns whether the draggee can be inserted before a given item.\n\t */\n\tcanInsertBefore: function($item)\n\t{\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns whether the draggee can be inserted after a given item.\n\t */\n\tcanInsertAfter: function($item)\n\t{\n\t\treturn true;\n\t},\n\n\t// Events\n\t// -------------------------------------------------------------------------\n\n\t/**\n\t * On Drag Start\n\t */\n\tonDragStart: function()\n\t{\n\t\tthis.oldDraggeeIndexes = this._getDraggeeIndexes();\n\n\t\t// Are we supposed to be moving the target item to the front, and is it not already there?\n\t\tif (\n\t\t\tthis.settings.moveTargetItemToFront &&\n\t\t\tthis.$draggee.length > 1 &&\n\t\t\tthis._getItemIndex(this.$draggee[0]) > this._getItemIndex(this.$draggee[1])\n\t\t)\n\t\t{\n\t\t\t// Reposition the target item before the other draggee items in the DOM\n\t\t\tthis.$draggee.first().insertBefore(this.$draggee[1]);\n\t\t}\n\n\t\t// Create the insertion\n\t\tthis.$insertion = this.createInsertion();\n\t\tthis._placeInsertionWithDraggee();\n\n\t\tthis.closestItem = null;\n\t\tthis._clearMidpoints();\n\n\t\t//  Get the closest container that has a height\n\t\tif (this.settings.container)\n\t\t{\n\t\t\tthis.$heightedContainer = $(this.settings.container);\n\n\t\t\twhile (!this.$heightedContainer.height())\n\t\t\t{\n\t\t\t\tthis.$heightedContainer = this.$heightedContainer.parent();\n\t\t\t}\n\t\t}\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * On Drag\n\t */\n\tonDrag: function()\n\t{\n\t\t// If there's a container set, make sure that we're hovering over it\n\t\tif (this.$heightedContainer && !Garnish.hitTest(this.mouseX, this.mouseY, this.$heightedContainer))\n\t\t{\n\t\t\tif (this.closestItem)\n\t\t\t{\n\t\t\t\tthis.closestItem = null;\n\t\t\t\tthis._removeInsertion();\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Is there a new closest item?\n\t\t\tif (\n\t\t\t\tthis.closestItem !== (this.closestItem = this._getClosestItem()) &&\n\t\t\t\tthis.closestItem !== null\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis._updateInsertion();\n\t\t\t}\n\t\t}\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * On Drag Stop\n\t */\n\tonDragStop: function()\n\t{\n\t\tthis._removeInsertion();\n\n\t\t// Should we keep the target item where it was?\n\t\tif (!this.settings.moveTargetItemToFront && this.targetItemPositionInDraggee != 0)\n\t\t{\n\t\t\tthis.$targetItem.insertAfter(this.$draggee.eq(this.targetItemPositionInDraggee));\n\t\t}\n\n\t\t// Return the helpers to the draggees\n\t\tthis.returnHelpersToDraggees();\n\n\t\tthis.base();\n\n\t\t// Has the item actually moved?\n\t\tthis.$items = $().add(this.$items);\n\t\tthis.newDraggeeIndexes = this._getDraggeeIndexes();\n\n\t\tif (this.newDraggeeIndexes.join(',') != this.oldDraggeeIndexes.join(','))\n\t\t{\n\t\t\tthis.onSortChange();\n\t\t}\n\t},\n\n\t/**\n\t * On Insertion Point Change event\n\t */\n\tonInsertionPointChange: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('insertionPointChange');\n\t\t\tthis.settings.onInsertionPointChange();\n\t\t}, this));\n\t},\n\n\t/**\n\t * On Sort Change event\n\t */\n\tonSortChange: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('sortChange');\n\t\t\tthis.settings.onSortChange();\n\t\t}, this));\n\t},\n\n\t// Private methods\n\t// =========================================================================\n\n\t_getItemIndex: function(item)\n\t{\n\t\treturn $.inArray(item, this.$items);\n\t},\n\n\t_getDraggeeIndexes: function()\n\t{\n\t\tvar indexes = [];\n\n\t\tfor (var i = 0; i < this.$draggee.length; i++)\n\t\t{\n\t\t\tindexes.push(this._getItemIndex(this.$draggee[i]))\n\t\t}\n\n\t\treturn indexes;\n\t},\n\n\t/**\n\t * Returns the closest item to the cursor.\n\t */\n\t_getClosestItem: function()\n\t{\n\t\tthis._getClosestItem._closestItem = null;\n\n\t\t// Start by checking the draggee/insertion, if either are visible\n\t\t// ---------------------------------------------------------------------\n\n\t\tif (!this.settings.removeDraggee)\n\t\t{\n\t\t\tthis._testForClosestItem(this.$draggee[0]);\n\t\t}\n\t\telse if (this.insertionVisible)\n\t\t{\n\t\t\tthis._testForClosestItem(this.$insertion[0]);\n\t\t}\n\n\t\t// Check items before the draggee\n\t\t// ---------------------------------------------------------------------\n\n\t\tif (this._getClosestItem._closestItem) this._getClosestItem._midpoint = this._getItemMidpoint(this._getClosestItem._closestItem)\n\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._startXDist = this._getClosestItem._lastXDist = this._getClosestItem._closestItem ? Math.abs(this._getClosestItem._midpoint.x - this.draggeeVirtualMidpointX) : null;\n\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._startYDist = this._getClosestItem._lastYDist = this._getClosestItem._closestItem ? Math.abs(this._getClosestItem._midpoint.y - this.draggeeVirtualMidpointY) : null;\n\n\t\tthis._getClosestItem._$otherItem = this.$draggee.first().prev();\n\n\t\twhile (this._getClosestItem._$otherItem.length)\n\t\t{\n\t\t\t// See if we're just getting further away\n\t\t\tthis._getClosestItem._midpoint = this._getItemMidpoint(this._getClosestItem._$otherItem[0]);\n\t\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._xDist = Math.abs(this._getClosestItem._midpoint.x - this.draggeeVirtualMidpointX);\n\t\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._yDist = Math.abs(this._getClosestItem._midpoint.y - this.draggeeVirtualMidpointY);\n\n\t\t\tif (\n\t\t\t\t(this.settings.axis == Garnish.Y_AXIS || (this._getClosestItem._lastXDist !== null && this._getClosestItem._xDist > this._getClosestItem._lastXDist)) &&\n\t\t\t\t(this.settings.axis == Garnish.X_AXIS || (this._getClosestItem._lastYDist !== null && this._getClosestItem._yDist > this._getClosestItem._lastYDist))\n\t\t\t)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._lastXDist = this._getClosestItem._xDist;\n\t\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._lastYDist = this._getClosestItem._yDist;\n\n\t\t\t// Give the extending class a chance to allow/disallow this item\n\t\t\tif (this.canInsertBefore(this._getClosestItem._$otherItem))\n\t\t\t{\n\t\t\t\tthis._testForClosestItem(this._getClosestItem._$otherItem[0]);\n\t\t\t}\n\n\t\t\t// Prep the next item\n\t\t\tthis._getClosestItem._$otherItem = this._getClosestItem._$otherItem.prev();\n\t\t}\n\n\t\t// Check items after the draggee\n\t\t// ---------------------------------------------------------------------\n\n\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._lastXDist = this._getClosestItem._startXDist;\n\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._lastYDist = this._getClosestItem._startYDist;\n\n\t\tthis._getClosestItem._$otherItem = this.$draggee.last().next();\n\n\t\twhile (this._getClosestItem._$otherItem.length)\n\t\t{\n\t\t\t// See if we're just getting further away\n\t\t\tthis._getClosestItem._midpoint = this._getItemMidpoint(this._getClosestItem._$otherItem[0]);\n\t\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._xDist = Math.abs(this._getClosestItem._midpoint.x - this.draggeeVirtualMidpointX);\n\t\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._yDist = Math.abs(this._getClosestItem._midpoint.y - this.draggeeVirtualMidpointY);\n\n\t\t\tif (\n\t\t\t\t(this.settings.axis == Garnish.Y_AXIS || (this._getClosestItem._lastXDist !== null && this._getClosestItem._xDist > this._getClosestItem._lastXDist)) &&\n\t\t\t\t(this.settings.axis == Garnish.X_AXIS || (this._getClosestItem._lastYDist !== null && this._getClosestItem._yDist > this._getClosestItem._lastYDist))\n\t\t\t)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._lastXDist = this._getClosestItem._xDist;\n\t\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._lastYDist = this._getClosestItem._yDist;\n\n\t\t\t// Give the extending class a chance to allow/disallow this item\n\t\t\tif (this.canInsertAfter(this._getClosestItem._$otherItem))\n\t\t\t{\n\t\t\t\tthis._testForClosestItem(this._getClosestItem._$otherItem[0]);\n\t\t\t}\n\n\t\t\t// Prep the next item\n\t\t\tthis._getClosestItem._$otherItem = this._getClosestItem._$otherItem.next();\n\t\t}\n\n\t\t// Return the result\n\t\t// ---------------------------------------------------------------------\n\n\t\t// Ignore if it's the draggee or insertion\n\t\tif (\n\t\t\tthis._getClosestItem._closestItem != this.$draggee[0] &&\n\t\t\t(!this.insertionVisible || this._getClosestItem._closestItem != this.$insertion[0])\n\t\t)\n\t\t{\n\t\t\treturn this._getClosestItem._closestItem;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t},\n\n\t_clearMidpoints: function()\n\t{\n\t\tthis._midpointVersion++;\n\t\tthis._$prevItem = null;\n\t},\n\n\t_getItemMidpoint: function(item)\n\t{\n\t\tif ($.data(item, 'midpointVersion') != this._midpointVersion)\n\t\t{\n\t\t\t// If this isn't the draggee, temporarily move the draggee to this item\n\t\t\tthis._getItemMidpoint._repositionDraggee = (\n\t\t\t\t!this.settings.axis &&\n\t\t\t\t(!this.settings.removeDraggee || this.insertionVisible) &&\n\t\t\t\titem != this.$draggee[0] &&\n\t\t\t\t(!this.$insertion || item != this.$insertion.get(0))\n\t\t\t);\n\n\t\t\tif (this._getItemMidpoint._repositionDraggee)\n\t\t\t{\n\t\t\t\t// Is this the first time we've had to temporarily reposition the draggee since the last midpoint clearing?\n\t\t\t\tif (!this._$prevItem)\n\t\t\t\t{\n\t\t\t\t\tthis._$prevItem = (this.insertionVisible ? this.$insertion : this.$draggee).first().prev();\n\t\t\t\t}\n\n\t\t\t\tthis._moveDraggeeToItem(item);\n\n\t\t\t\t// Now figure out which element we're actually getting the midpoint of\n\t\t\t\tif (!this.settings.removeDraggee)\n\t\t\t\t{\n\t\t\t\t\tthis._getItemMidpoint._$item = this.$draggee;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis._getItemMidpoint._$item = this.$insertion;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// We're actually getting the midpoint of this item\n\t\t\t\tthis._getItemMidpoint._$item = $(item);\n\t\t\t}\n\n\t\t\tthis._getItemMidpoint._offset = this._getItemMidpoint._$item.offset();\n\n\t\t\t$.data(item, 'midpoint', {\n\t\t\t\tx: this._getItemMidpoint._offset.left + this._getItemMidpoint._$item.outerWidth() / 2,\n\t\t\t\ty: this._getItemMidpoint._offset.top + this._getItemMidpoint._$item.outerHeight() / 2\n\t\t\t});\n\n\t\t\t$.data(item, 'midpointVersion', this._midpointVersion);\n\n\t\t\tdelete this._getItemMidpoint._$item;\n\t\t\tdelete this._getItemMidpoint._offset;\n\n\t\t\tif (this._getItemMidpoint._repositionDraggee)\n\t\t\t{\n\t\t\t\t// Move the draggee back\n\t\t\t\tif (this._$prevItem.length)\n\t\t\t\t{\n\t\t\t\t\tthis.$draggee.insertAfter(this._$prevItem);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.$draggee.prependTo(this.$draggee.parent());\n\t\t\t\t}\n\n\t\t\t\tthis._placeInsertionWithDraggee();\n\t\t\t}\n\t\t}\n\n\t\treturn $.data(item, 'midpoint');\n\t},\n\n\t_testForClosestItem: function(item)\n\t{\n\t\tthis._testForClosestItem._midpoint = this._getItemMidpoint(item);\n\t\tthis._testForClosestItem._mouseDistX = Math.abs(this._testForClosestItem._midpoint.x - this.draggeeVirtualMidpointX);\n\t\tthis._testForClosestItem._mouseDistY = Math.abs(this._testForClosestItem._midpoint.y - this.draggeeVirtualMidpointY);\n\n\t\t// Don't even consider items that are further away on the Y axis\n\t\tif (\n\t\t\tthis._getClosestItem._closestItem === null ||\n\t\t\tthis._testForClosestItem._mouseDistY < this._getClosestItem._closestItemMouseDistY ||\n\t\t\t(\n\t\t\t\tthis._testForClosestItem._mouseDistY == this._getClosestItem._closestItemMouseDistY &&\n\t\t\t\tthis._testForClosestItem._mouseDistX <= this._getClosestItem._closestItemMouseDistX\n\t\t\t)\n\t\t)\n\t\t{\n\t\t\tthis._getClosestItem._closestItem          = item;\n\t\t\tthis._getClosestItem._closestItemMouseDistX = this._testForClosestItem._mouseDistX;\n\t\t\tthis._getClosestItem._closestItemMouseDistY = this._testForClosestItem._mouseDistY;\n\t\t}\n\t},\n\n\t/**\n\t * Updates the position of the insertion point.\n\t */\n\t_updateInsertion: function()\n\t{\n\t\tif (this.closestItem)\n\t\t{\n\t\t\tthis._moveDraggeeToItem(this.closestItem);\n\t\t}\n\n\t\t// Now that things have shifted around, invalidate the midpoints\n\t\tthis._clearMidpoints();\n\n\t\tthis.onInsertionPointChange();\n\t},\n\n\t_moveDraggeeToItem: function(item)\n\t{\n\t\t// Going down?\n\t\tif (this.$draggee.index() < $(item).index())\n\t\t{\n\t\t\tthis.$draggee.insertAfter(item);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$draggee.insertBefore(item);\n\t\t}\n\n\t\tthis._placeInsertionWithDraggee();\n\t},\n\n\t_placeInsertionWithDraggee: function()\n\t{\n\t\tif (this.$insertion)\n\t\t{\n\t\t\tthis.$insertion.insertBefore(this.$draggee.first());\n\t\t\tthis.insertionVisible = true;\n\t\t}\n\t},\n\n\t/**\n\t * Removes the insertion, if it's visible.\n\t */\n\t_removeInsertion: function()\n\t{\n\t\tif (this.insertionVisible)\n\t\t{\n\t\t\tthis.$insertion.remove();\n\t\t\tthis.insertionVisible = false;\n\t\t}\n\t}\n},\n\n// Static Properties\n// =============================================================================\n\n{\n\tdefaults: {\n\t\tcontainer: null,\n\t\tinsertion: null,\n\t\tmoveTargetItemToFront: false,\n\t\tmagnetStrength: 1,\n\t\tonInsertionPointChange: $.noop,\n\t\tonSortChange: $.noop\n\t}\n});\n"",""/**\n * ESC key manager class\n */\nGarnish.EscManager = Garnish.Base.extend({\n\n\thandlers: null,\n\n\tinit: function()\n\t{\n\t\tthis.handlers = [];\n\n\t\tthis.addListener(Garnish.$bod, 'keyup', function(ev)\n\t\t{\n\t\t\tif (ev.keyCode == Garnish.ESC_KEY)\n\t\t\t{\n\t\t\t\tthis.escapeLatest(ev);\n\t\t\t}\n\t\t});\n\t},\n\n\tregister: function(obj, func)\n\t{\n\t\tthis.handlers.push({\n\t\t\tobj: obj,\n\t\t\tfunc: func\n\t\t});\n\t},\n\n\tunregister: function(obj)\n\t{\n\t\tfor (var i = this.handlers.length - 1; i >= 0; i--)\n\t\t{\n\t\t\tif (this.handlers[i].obj == obj)\n\t\t\t{\n\t\t\t\tthis.handlers.splice(i, 1);\n\t\t\t}\n\t\t}\n\t},\n\n\tescapeLatest: function(ev)\n\t{\n\t\tif (this.handlers.length)\n\t\t{\n\t\t\tvar handler = this.handlers.pop();\n\n\t\t\tif (typeof handler.func == 'function')\n\t\t\t{\n\t\t\t\tvar func = handler.func;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar func = handler.obj[handler.func];\n\t\t\t}\n\n\t\t\tfunc.call(handler.obj, ev);\n\n\t\t\tif (typeof handler.obj.trigger == 'function')\n\t\t\t{\n\t\t\t\thandler.obj.trigger('escape');\n\t\t\t}\n\t\t}\n\t}\n\n});\n\nGarnish.escManager = new Garnish.EscManager();\n"",""/**\n * HUD\n */\nGarnish.HUD = Garnish.Base.extend({\n\n\t$trigger: null,\n\t$fixedTriggerParent: null,\n\t$hud: null,\n\t$tip: null,\n\t$body: null,\n\t$header: null,\n\t$footer: null,\n\t$mainContainer: null,\n\t$main: null,\n\t$shade: null,\n\n\tshowing: false,\n\torientation: null,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(trigger, bodyContents, settings) {\n\n\t\tthis.$trigger = $(trigger);\n\n\t\tthis.setSettings(settings, Garnish.HUD.defaults);\n\t\tthis.on('show', this.settings.onShow);\n\t\tthis.on('hide', this.settings.onHide);\n\t\tthis.on('submit', this.settings.onSubmit);\n\n\t\tif (typeof Garnish.HUD.activeHUDs == \""undefined\"")\n\t\t{\n\t\t\tGarnish.HUD.activeHUDs = {};\n\t\t}\n\n\t\tthis.$shade = $('<div/>', {'class': this.settings.shadeClass});\n\t\tthis.$hud = $('<div/>', {'class': this.settings.hudClass});\n\t\tthis.$tip = $('<div/>', {'class': this.settings.tipClass}).appendTo(this.$hud);\n\t\tthis.$body = $('<form/>', {'class': this.settings.bodyClass}).appendTo(this.$hud);\n\t\tthis.$mainContainer = $('<div/>', {'class': this.settings.mainContainerClass}).appendTo(this.$body);\n\t\tthis.$main = $('<div/>', {'class': this.settings.mainClass}).appendTo(this.$mainContainer);\n\n\t\tthis.updateBody(bodyContents);\n\n\t\t// See if the trigger is fixed\n\t\tvar $parent = this.$trigger;\n\n\t\tdo {\n\t\t\tif ($parent.css('position') == 'fixed')\n\t\t\t{\n\t\t\t\tthis.$fixedTriggerParent = $parent;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$parent = $parent.offsetParent();\n\t\t}\n\t\twhile ($parent.length && $parent.prop('nodeName') != 'HTML');\n\n\t\tif (this.$fixedTriggerParent)\n\t\t{\n\t\t\tthis.$hud.css('position', 'fixed');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$hud.css('position', 'absolute');\n\t\t}\n\n\t\tthis.show();\n\n\t\tthis.addListener(this.$body, 'submit', '_handleSubmit');\n\t\tthis.addListener(this.$shade, 'tap', 'hide');\n\n\t\tif (!this.$fixedTriggerParent && Garnish.$scrollContainer[0] != Garnish.$win[0])\n\t\t{\n\t\t\tthis.addListener(Garnish.$scrollContainer, 'scroll', 'updateSizeAndPosition');\n\t\t}\n\n\t\tif (this.settings.closeBtn)\n\t\t{\n\t\t\tthis.addListener(this.settings.closeBtn, 'activate', 'hide');\n\t\t}\n\n\t\tthis.addListener(Garnish.$win, 'resize', 'updateSizeAndPosition');\n\t},\n\n\t/**\n\t * Update the body contents\n\t */\n\tupdateBody: function(bodyContents)\n\t{\n\t\tthis.removeListener(this.$main, 'resize');\n\n\t\t// Cleanup\n\t\tthis.$main.html('');\n\n\t\tif (this.$header)\n\t\t{\n\t\t\tthis.$hud.removeClass('has-header');\n\t\t\tthis.$header.remove();\n\t\t\tthis.$header = null;\n\t\t}\n\n\t\tif (this.$footer)\n\t\t{\n\t\t\tthis.$hud.removeClass('has-footer');\n\t\t\tthis.$footer.remove();\n\t\t\tthis.$footer = null;\n\t\t}\n\n\t\t// Append the new body contents\n\t\tthis.$main.append(bodyContents);\n\n\t\t// Look for a header and footer\n\t\tvar $header = this.$main.find('.'+this.settings.headerClass+':first'),\n\t\t\t$footer = this.$main.find('.'+this.settings.footerClass+':first');\n\n\t\tif ($header.length)\n\t\t{\n\t\t\tthis.$header = $header.insertBefore(this.$mainContainer);\n\t\t\tthis.$hud.addClass('has-header');\n\t\t}\n\n\t\tif ($footer.length)\n\t\t{\n\t\t\tthis.$footer = $footer.insertAfter(this.$mainContainer);\n\t\t\tthis.$hud.addClass('has-footer');\n\t\t}\n\t},\n\n\t/**\n\t * Show\n\t */\n\tshow: function(ev)\n\t{\n\t\tif (ev && ev.stopPropagation)\n\t\t{\n\t\t\tev.stopPropagation();\n\t\t}\n\n\t\tif (this.showing)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.settings.closeOtherHUDs)\n\t\t{\n\t\t\tfor (var hudID in Garnish.HUD.activeHUDs)\n\t\t\t{\n\t\t\t\tGarnish.HUD.activeHUDs[hudID].hide();\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the browser from jumping\n\t\tthis.$hud.css('top', Garnish.$scrollContainer.scrollTop());\n\n\t\t// Move it to the end of <body> so it gets the highest sub-z-index\n\t\tthis.$shade.appendTo(Garnish.$bod);\n\t\tthis.$hud.appendTo(Garnish.$bod);\n\n\t\tthis.$hud.show();\n\t\tthis.updateSizeAndPosition();\n\n\t\tthis.$shade.show();\n\n\t\tthis.showing = true;\n\t\tGarnish.HUD.activeHUDs[this._namespace] = this;\n\n\t\tGarnish.escManager.register(this, 'hide');\n\n\t\tthis.onShow();\n\n\t\t// Reposition one last time just in case\n\t\tGarnish.requestAnimationFrame($.proxy(this, 'updateSizeAndPosition'));\n\n\t\tthis.enable();\n\t},\n\n\tonShow: function()\n\t{\n\t\tthis.trigger('show');\n\t},\n\n\tupdateSizeAndPosition: function()\n\t{\n\t\tthis.removeListener(this.$main, 'resize');\n\n\t\tvar windowWidth,\n\t\t\twindowHeight,\n\t\t\ttriggerWidth,\n\t\t\ttriggerHeight,\n\t\t\ttriggerOffset,\n\t\t\twindowScrollLeft,\n\t\t\twindowScrollTop,\n\t\t\tscrollContainerTriggerOffset,\n\t\t\tscrollContainerScrollLeft,\n\t\t\tscrollContainerScrollTop,\n\t\t\thudBodyWidth,\n\t\t\thudBodyHeight;\n\n\t\t// Get the window sizes and trigger offset\n\t\t// ---------------------------------------------------------------------\n\n\t\twindowWidth = Garnish.$win.width();\n\t\twindowHeight = Garnish.$win.height();\n\t\twindowScrollLeft = Garnish.$win.scrollLeft();\n\t\twindowScrollTop = Garnish.$win.scrollTop();\n\n\t\t// Get the trigger's dimensions\n\t\ttriggerWidth = this.$trigger.outerWidth();\n\t\ttriggerHeight = this.$trigger.outerHeight();\n\n\t\t// Get the offsets for each side of the trigger element\n\t\ttriggerOffset = this.$trigger.offset();\n\n\t\tif (this.$fixedTriggerParent)\n\t\t{\n\t\t\ttriggerOffset.left -= windowScrollLeft;\n\t\t\ttriggerOffset.top -= windowScrollTop;\n\n\t\t\tscrollContainerTriggerOffset = triggerOffset;\n\n\t\t\twindowScrollLeft = 0;\n\t\t\twindowScrollTop = 0;\n\t\t\tscrollContainerScrollLeft = 0;\n\t\t\tscrollContainerScrollTop = 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tscrollContainerTriggerOffset = Garnish.getOffset(this.$trigger);\n\n\t\t\tscrollContainerScrollLeft = Garnish.$scrollContainer.scrollLeft();\n\t\t\tscrollContainerScrollTop = Garnish.$scrollContainer.scrollTop();\n\t\t}\n\n\t\ttriggerOffset.right = triggerOffset.left + triggerWidth;\n\t\ttriggerOffset.bottom = triggerOffset.top + triggerHeight;\n\n\t\tscrollContainerTriggerOffset.right = scrollContainerTriggerOffset.left + triggerWidth;\n\t\tscrollContainerTriggerOffset.bottom = scrollContainerTriggerOffset.top + triggerHeight;\n\n\t\t// Get the HUD dimensions\n\t\tthis.$hud.css({\n\t\t\twidth: ''\n\t\t});\n\n\t\tthis.$mainContainer.css({\n\t\t\theight: '',\n\t\t\t'overflow-x': '',\n\t\t\t'overflow-y': ''\n\t\t});\n\n\t\thudBodyWidth = this.$body.width();\n\t\thudBodyHeight = this.$body.height();\n\n\t\t// Determine the best orientation for the HUD\n\t\t// ---------------------------------------------------------------------\n\n\t\t// Find the actual available top/right/bottom/left clearances\n\t\tvar clearances = {\n\t\t\tbottom: windowHeight + scrollContainerScrollTop - scrollContainerTriggerOffset.bottom,\n\t\t\ttop:    scrollContainerTriggerOffset.top - scrollContainerScrollTop,\n\t\t\tright:  windowWidth + scrollContainerScrollLeft - scrollContainerTriggerOffset.right,\n\t\t\tleft:   scrollContainerTriggerOffset.left - scrollContainerScrollLeft\n\t\t};\n\n\t\t// Find the first position that has enough room\n\t\tthis.orientation = null;\n\n\t\tfor (var i = 0; i < this.settings.orientations.length; i++)\n\t\t{\n\t\t\tvar orientation = this.settings.orientations[i],\n\t\t\t\trelevantSize = (orientation == 'top' || orientation == 'bottom' ? hudBodyHeight : hudBodyWidth);\n\n\t\t\tif (clearances[orientation] - (this.settings.windowSpacing + this.settings.triggerSpacing) >= relevantSize)\n\t\t\t{\n\t\t\t\t// This is the first orientation that has enough room in order of preference, so we'll go with this\n\t\t\t\tthis.orientation = orientation;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!this.orientation || clearances[orientation] > clearances[this.orientation])\n\t\t\t{\n\t\t\t\t// Use this as a fallback as it's the orientation with the most clearance so far\n\t\t\t\tthis.orientation = orientation;\n\t\t\t}\n\t\t}\n\n\t\t// Just in case...\n\t\tif (!this.orientation || $.inArray(this.orientation, ['bottom', 'top', 'right', 'left']) == -1)\n\t\t{\n\t\t\tthis.orientation = 'bottom'\n\t\t}\n\n\t\t// Update the tip class\n\t\tif (this.tipClass)\n\t\t{\n\t\t\tthis.$tip.removeClass(this.tipClass);\n\t\t}\n\n\t\tthis.tipClass = this.settings.tipClass+'-'+Garnish.HUD.tipClasses[this.orientation];\n\t\tthis.$tip.addClass(this.tipClass);\n\n\t\t// Make sure the HUD body is within the allowed size\n\t\t// ---------------------------------------------------------------------\n\n\t\tvar maxHudBodyWidth,\n\t\t\tmaxHudBodyHeight;\n\n\t\tif (this.orientation == 'top' || this.orientation == 'bottom')\n\t\t{\n\t\t\tmaxHudBodyWidth = windowWidth - this.settings.windowSpacing * 2;\n\t\t\tmaxHudBodyHeight = clearances[this.orientation] - this.settings.windowSpacing - this.settings.triggerSpacing;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmaxHudBodyWidth = clearances[this.orientation] - this.settings.windowSpacing - this.settings.triggerSpacing;\n\t\t\tmaxHudBodyHeight = windowHeight - this.settings.windowSpacing * 2;\n\t\t}\n\n\t\tif (maxHudBodyWidth < this.settings.minBodyWidth)\n\t\t{\n\t\t\tmaxHudBodyWidth = this.settings.minBodyWidth;\n\t\t}\n\n\t\tif (maxHudBodyHeight < this.settings.minBodyHeight)\n\t\t{\n\t\t\tmaxHudBodyHeight = this.settings.minBodyHeight;\n\t\t}\n\n\t\tif (hudBodyWidth > maxHudBodyWidth || hudBodyWidth < this.settings.minBodyWidth)\n\t\t{\n\t\t\tif (hudBodyWidth > maxHudBodyWidth)\n\t\t\t{\n\t\t\t\thudBodyWidth = maxHudBodyWidth;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thudBodyWidth = this.settings.minBodyWidth;\n\t\t\t}\n\n\t\t\tthis.$hud.width(hudBodyWidth);\n\n\t\t\t// Is there any overflow now?\n\t\t\tif (this.$main.outerWidth() > maxHudBodyWidth)\n\t\t\t{\n\t\t\t\tthis.$mainContainer.css('overflow-x', 'scroll');\n\t\t\t}\n\n\t\t\t// The height may have just changed\n\t\t\thudBodyHeight = this.$body.height();\n\t\t}\n\n\t\tif (hudBodyHeight > maxHudBodyHeight || hudBodyHeight < this.settings.minBodyHeight)\n\t\t{\n\t\t\tif (hudBodyHeight > maxHudBodyHeight)\n\t\t\t{\n\t\t\t\thudBodyHeight = maxHudBodyHeight;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thudBodyHeight = this.settings.minBodyHeight;\n\t\t\t}\n\n\t\t\tvar mainHeight = hudBodyHeight;\n\n\t\t\tif (this.$header)\n\t\t\t{\n\t\t\t\tmainHeight -= this.$header.outerHeight();\n\t\t\t}\n\n\t\t\tif (this.$footer)\n\t\t\t{\n\t\t\t\tmainHeight -= this.$footer.outerHeight();\n\t\t\t}\n\n\t\t\tthis.$mainContainer.height(mainHeight);\n\n\t\t\t// Is there any overflow now?\n\t\t\tif (this.$main.outerHeight() > mainHeight)\n\t\t\t{\n\t\t\t\tthis.$mainContainer.css('overflow-y', 'scroll');\n\t\t\t}\n\t\t}\n\n\t\t// Set the HUD/tip positions\n\t\t// ---------------------------------------------------------------------\n\n\t\tif (this.orientation == 'top' || this.orientation == 'bottom')\n\t\t{\n\t\t\t// Center the HUD horizontally\n\t\t\tvar maxLeft = (windowWidth + windowScrollLeft) - (hudBodyWidth + this.settings.windowSpacing),\n\t\t\t\tminLeft = (windowScrollLeft + this.settings.windowSpacing),\n\t\t\t\ttriggerCenter = triggerOffset.left + Math.round(triggerWidth / 2),\n\t\t\t\tleft = triggerCenter - Math.round(hudBodyWidth / 2);\n\n\t\t\tif (left > maxLeft) left = maxLeft;\n\t\t\tif (left < minLeft) left = minLeft;\n\n\t\t\tthis.$hud.css('left', left);\n\n\t\t\tvar tipLeft = (triggerCenter - left) - (this.settings.tipWidth / 2);\n\t\t\tthis.$tip.css({ left: tipLeft, top: '' });\n\n\t\t\tif (this.orientation == 'top')\n\t\t\t{\n\t\t\t\tvar top = triggerOffset.top - (hudBodyHeight + this.settings.triggerSpacing);\n\t\t\t\tthis.$hud.css('top', top);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar top = triggerOffset.bottom + this.settings.triggerSpacing;\n\t\t\t\tthis.$hud.css('top', top);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Center the HUD vertically\n\t\t\tvar maxTop = (windowHeight + windowScrollTop) - (hudBodyHeight + this.settings.windowSpacing),\n\t\t\t\tminTop = (windowScrollTop + this.settings.windowSpacing),\n\t\t\t\ttriggerCenter = triggerOffset.top + Math.round(triggerHeight / 2),\n\t\t\t\ttop = triggerCenter - Math.round(hudBodyHeight / 2);\n\n\t\t\tif (top > maxTop) top = maxTop;\n\t\t\tif (top < minTop) top = minTop;\n\n\t\t\tthis.$hud.css('top', top);\n\n\t\t\tvar tipTop = (triggerCenter - top) - (this.settings.tipWidth / 2);\n\t\t\tthis.$tip.css({ top: tipTop, left: '' });\n\n\n\t\t\tif (this.orientation == 'left')\n\t\t\t{\n\t\t\t\tvar left = triggerOffset.left - (hudBodyWidth + this.settings.triggerSpacing);\n\t\t\t\tthis.$hud.css('left', left);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar left = triggerOffset.right + this.settings.triggerSpacing;\n\t\t\t\tthis.$hud.css('left', left);\n\t\t\t}\n\t\t}\n\n\t\tGarnish.requestAnimationFrame($.proxy(function() {\n\t\t\tthis.addListener(this.$main, 'resize', 'updateSizeAndPosition');\n\t\t}, this));\n\t},\n\n\t/**\n\t * Hide\n\t */\n\thide: function()\n\t{\n\t\tthis.disable();\n\n\t\tthis.$hud.hide();\n\t\tthis.$shade.hide();\n\t\tthis.showing = false;\n\n\t\tdelete Garnish.HUD.activeHUDs[this._namespace];\n\n\t\tGarnish.escManager.unregister(this);\n\n\t\tthis.onHide();\n\t},\n\n\tonHide: function()\n\t{\n\t\tthis.trigger('hide');\n\t},\n\n\ttoggle: function()\n\t{\n\t\tif (this.showing)\n\t\t{\n\t\t\tthis.hide();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.show();\n\t\t}\n\t},\n\n\tsubmit: function()\n\t{\n\t\tthis.onSubmit();\n\t},\n\n\tonSubmit: function()\n\t{\n\t\tthis.trigger('submit');\n\t},\n\n\t_handleSubmit: function(ev)\n\t{\n\t\tev.preventDefault();\n\t\tthis.submit();\n\t}\n},\n{\n\ttipClasses: { bottom: 'top', top: 'bottom', right: 'left', left: 'right'},\n\n\tdefaults: {\n\t\tshadeClass: 'hud-shade',\n\t\thudClass: 'hud',\n\t\ttipClass: 'tip',\n\t\tbodyClass: 'body',\n\t\theaderClass: 'hud-header',\n\t\tfooterClass: 'hud-footer',\n\t\tmainContainerClass: 'main-container',\n\t\tmainClass: 'main',\n\t\torientations: ['bottom', 'top', 'right', 'left'],\n\t\ttriggerSpacing: 10,\n\t\twindowSpacing: 10,\n\t\ttipWidth: 30,\n\t\tminBodyWidth: 200,\n\t\tminBodyHeight: 0,\n\t\tonShow: $.noop,\n\t\tonHide: $.noop,\n\t\tonSubmit: $.noop,\n\t\tcloseBtn: null,\n\t\tcloseOtherHUDs: true\n\t}\n});\n"",""/**\n * Menu\n */\nGarnish.Menu = Garnish.Base.extend({\n\n\tsettings: null,\n\n\t$container: null,\n\t$options: null,\n\t$anchor: null,\n\n\tmenuId: null,\n\n\t_windowWidth: null,\n\t_windowHeight: null,\n\t_windowScrollLeft: null,\n\t_windowScrollTop: null,\n\n\t_anchorOffset: null,\n\t_anchorWidth: null,\n\t_anchorHeight: null,\n\t_anchorOffsetRight: null,\n\t_anchorOffsetBottom: null,\n\n\t_menuWidth: null,\n\t_menuHeight: null,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(container, settings)\n\t{\n\t\tthis.setSettings(settings, Garnish.Menu.defaults);\n\n\t\tthis.$container = $(container);\n\n\t\tthis.$options = $();\n\t\tthis.addOptions(this.$container.find('a'));\n\n\t\t// Menu List\n\t\tthis.menuId = 'menu' + this._namespace;\n\t\tthis.$menuList = $('ul', this.$container);\n\t\tthis.$menuList.attr({\n\t\t\t'role': 'listbox',\n\t\t\t'id': this.menuId,\n\t\t\t'aria-hidden': 'true'\n\t\t});\n\n\t\t// Deprecated\n\t\tif (this.settings.attachToElement)\n\t\t{\n\t\t\tthis.settings.anchor = this.settings.attachToElement;\n\t\t\tGarnish.log('The \\'attachToElement\\' setting is deprecated. Use \\'anchor\\' instead.');\n\t\t}\n\n\t\tif (this.settings.anchor)\n\t\t{\n\t\t\tthis.$anchor = $(this.settings.anchor);\n\t\t}\n\n\t\t// Prevent clicking on the container from hiding the menu\n\t\tthis.addListener(this.$container, 'mousedown', function(ev)\n\t\t{\n\t\t\tev.stopPropagation();\n\n\t\t\t// Prevent this from causing the menu button to blur\n\t\t\tev.preventDefault();\n\t\t});\n\t},\n\n\taddOptions: function($options)\n\t{\n\t\tthis.$options = this.$options.add($options);\n\t\t$options.data('menu', this);\n\n\t\t$options.each($.proxy(function(optionKey, option)\n\t\t{\n\t\t\t$(option).attr({\n\t\t\t\t'role':'option',\n\t\t\t\t'tabindex':'-1',\n\t\t\t\t'id': this.menuId+'-option-'+optionKey\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.addListener($options, 'click', 'selectOption');\n\t},\n\n\tsetPositionRelativeToAnchor: function()\n\t{\n\t\tthis._windowWidth = Garnish.$win.width();\n\t\tthis._windowHeight = Garnish.$win.height();\n\t\tthis._windowScrollLeft = Garnish.$win.scrollLeft();\n\t\tthis._windowScrollTop = Garnish.$win.scrollTop();\n\n\t\tthis._anchorOffset = this.$anchor.offset();\n\t\tthis._anchorWidth = this.$anchor.outerWidth();\n\t\tthis._anchorHeight = this.$anchor.outerHeight();\n\t\tthis._anchorOffsetRight = this._anchorOffset.left + this._anchorHeight;\n\t\tthis._anchorOffsetBottom = this._anchorOffset.top + this._anchorHeight;\n\n\t\tthis.$container.css('minWidth', 0);\n\t\tthis.$container.css('minWidth', this._anchorWidth - (this.$container.outerWidth() - this.$container.width()));\n\n\t\tthis._menuWidth = this.$container.outerWidth();\n\t\tthis._menuHeight = this.$container.outerHeight();\n\n\t\t// Is there room for the menu below the anchor?\n\t\tvar topClearance = this._anchorOffset.top - this._windowScrollTop,\n\t\t\tbottomClearance = this._windowHeight + this._windowScrollTop - this._anchorOffsetBottom;\n\n\t\tif (bottomClearance >= this._menuHeight || bottomClearance >= topClearance || topClearance < this._menuHeight)\n\t\t{\n\t\t\tthis.$container.css('top', this._anchorOffsetBottom);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$container.css('top', this._anchorOffset.top - this._menuHeight);\n\t\t}\n\n\t\t// Figure out how we're aliging it\n\t\tvar align = this.$container.data('align');\n\n\t\tif (align != 'left' && align != 'center' && align != 'right')\n\t\t{\n\t\t\talign = 'left';\n\t\t}\n\n\t\tif (align == 'center')\n\t\t{\n\t\t\tthis._alignCenter();\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Figure out which options are actually possible\n\t\t\tvar rightClearance = this._windowWidth + this._windowScrollLeft - (this._anchorOffset.left + this._menuWidth),\n\t\t\t\tleftClearance = this._anchorOffsetRight - this._menuWidth;\n\n\t\t\tif (align == 'right' && leftClearance >= 0 || rightClearance < 0)\n\t\t\t{\n\t\t\t\tthis._alignRight();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._alignLeft();\n\t\t\t}\n\t\t}\n\n\t\tdelete this._windowWidth;\n\t\tdelete this._windowHeight;\n\t\tdelete this._windowScrollLeft;\n\t\tdelete this._windowScrollTop;\n\t\tdelete this._anchorOffset;\n\t\tdelete this._anchorWidth;\n\t\tdelete this._anchorHeight;\n\t\tdelete this._anchorOffsetRight;\n\t\tdelete this._anchorOffsetBottom;\n\t\tdelete this._menuWidth;\n\t\tdelete this._menuHeight;\n\t},\n\n\tshow: function()\n\t{\n\t\t// Move the menu to the end of the DOM\n\t\tthis.$container.appendTo(Garnish.$bod)\n\n\t\tif (this.$anchor)\n\t\t{\n\t\t\tthis.setPositionRelativeToAnchor();\n\t\t}\n\n\t\tthis.$container.velocity('stop');\n\t\tthis.$container.css({\n\t\t\topacity: 1,\n\t\t\tdisplay: 'block'\n\t\t});\n\n\t\tthis.$menuList.attr('aria-hidden', 'false');\n\n\t\tGarnish.escManager.register(this, 'hide');\n\t},\n\n\thide: function()\n\t{\n\t\tthis.$menuList.attr('aria-hidden', 'true');\n\n\t\tthis.$container.velocity('fadeOut', { duration: Garnish.FX_DURATION }, $.proxy(function()\n\t\t{\n\t\t\tthis.$container.detach();\n\t\t}, this));\n\n\t\tGarnish.escManager.unregister(this);\n\n\t\tthis.trigger('hide');\n\t},\n\n\tselectOption: function(ev)\n\t{\n\t\tthis.settings.onOptionSelect(ev.currentTarget);\n\t\tthis.trigger('optionselect', { selectedOption: ev.currentTarget });\n\t\tthis.hide();\n\t},\n\n\t_alignLeft: function()\n\t{\n\t\tthis.$container.css({\n\t\t\tleft: this._anchorOffset.left,\n\t\t\tright: 'auto'\n\t\t});\n\t},\n\n\t_alignRight: function()\n\t{\n\t\tthis.$container.css({\n\t\t\tright: this._windowWidth - (this._anchorOffset.left + this._anchorWidth),\n\t\t\tleft: 'auto'\n\t\t});\n\t},\n\n\t_alignCenter: function()\n\t{\n\t\tvar left = Math.round((this._anchorOffset.left + this._anchorWidth / 2) - (this._menuWidth / 2));\n\n\t\tif (left < 0)\n\t\t{\n\t\t\tleft = 0;\n\t\t}\n\n\t\tthis.$container.css('left', left);\n\t}\n\n},\n{\n\tdefaults: {\n\t\tanchor: null,\n\t\tonOptionSelect: $.noop\n\t}\n});\n"",""/**\n * Menu Button\n */\nGarnish.MenuBtn = Garnish.Base.extend({\n\n\t$btn: null,\n\tmenu: null,\n\tshowingMenu: false,\n\tdisabled: true,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(btn, settings)\n\t{\n\t\tthis.$btn = $(btn);\n\n\t\t// Is this already a menu button?\n\t\tif (this.$btn.data('menubtn'))\n\t\t{\n\t\t\t// Grab the old MenuBtn's menu container\n\t\t\tvar $menu = this.$btn.data('menubtn').menu.$container;\n\n\t\t\tGarnish.log('Double-instantiating a menu button on an element');\n\t\t\tthis.$btn.data('menubtn').destroy();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar $menu = this.$btn.next('.menu').detach();\n\t\t}\n\n\t\tthis.$btn.data('menubtn', this);\n\n\t\tthis.setSettings(settings, Garnish.MenuBtn.defaults);\n\n\t\tthis.menu = new Garnish.Menu($menu, {\n\t\t\tanchor: (this.settings.menuAnchor || this.$btn),\n\t\t\tonOptionSelect: $.proxy(this, 'onOptionSelect')\n\t\t});\n\n\t\tthis.$btn.attr({\n\t\t\t'tabindex': 0,\n\t\t\t'role': 'combobox',\n\t\t\t'aria-owns': this.menu.menuId,\n\t\t\t'aria-haspopup': 'true',\n\t\t\t'aria-expanded': 'false',\n\t\t});\n\n\t\tthis.menu.on('hide', $.proxy(this, 'onMenuHide'));\n\t\tthis.addListener(this.$btn, 'mousedown', 'onMouseDown');\n\t\tthis.addListener(this.$btn, 'keydown', 'onKeyDown');\n\t\tthis.addListener(this.$btn, 'blur', 'onBlur');\n\t\tthis.enable();\n\t},\n\n\tonBlur: function(ev)\n\t{\n\t\tif (this.showingMenu)\n\t\t{\n\t\t\tthis.hideMenu();\n\t\t}\n\t},\n\n\tonKeyDown: function(ev)\n\t{\n\t\tswitch (ev.keyCode)\n\t\t{\n\t\t\tcase Garnish.RETURN_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\tvar $currentOption = this.menu.$options.filter('.hover');\n\n\t\t\t\tif($currentOption.length > 0)\n\t\t\t\t{\n\t\t\t\t\t$currentOption.get(0).click();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.SPACE_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\tif(!this.showingMenu)\n\t\t\t\t{\n\t\t\t\t\tthis.showMenu();\n\t\t\t\t\t\n\t\t\t\t\tvar $option = this.menu.$options.filter('.sel:first');\n\n\t\t\t\t\tif($option.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = this.menu.$options.first();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.focusOption($option);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.DOWN_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\tvar $option;\n\n\t\t\t\tif(this.showingMenu)\n\t\t\t\t{\n\t\t\t\t\t$.each(this.menu.$options, $.proxy(function(index, value)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!$option)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif($(value).hasClass('hover'))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif((index + 1) < this.menu.$options.length)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$option = $(this.menu.$options[(index + 1)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\n\t\t\t\t\tif(!$option)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = $(this.menu.$options[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.showMenu();\n\n\t\t\t\t\t$option = this.menu.$options.filter('.sel:first');\n\n\t\t\t\t\tif($option.length == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = this.menu.$options.first();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.focusOption($option);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.UP_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\tvar $option;\n\n\t\t\t\tif(this.showingMenu)\n\t\t\t\t{\n\t\t\t\t\t$.each(this.menu.$options, $.proxy(function(index, value)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!$option)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif($(value).hasClass('hover'))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif((index - 1) >= 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$option = $(this.menu.$options[(index - 1)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\n\t\t\t\t\tif(!$option)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = $(this.menu.$options[(this.menu.$options.length - 1)]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.showMenu();\n\n\t\t\t\t\t$option = this.menu.$options.filter('.sel:first');\n\n\t\t\t\t\tif($option.length == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = this.menu.$options.last();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.focusOption($option);\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\n\tfocusOption: function($option)\n\t{\n\t\tthis.menu.$options.removeClass('hover');\n\n\t\t$option.addClass('hover');\n\n\t\tthis.menu.$menuList.attr('aria-activedescendant', $option.attr('id'));\n\t\tthis.$btn.attr('aria-activedescendant', $option.attr('id'));\n\t},\n\n\tonMouseDown: function(ev)\n\t{\n\t\tif (ev.which != Garnish.PRIMARY_CLICK || Garnish.isCtrlKeyPressed(ev))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tev.preventDefault();\n\n\t\tif (this.showingMenu)\n\t\t{\n\t\t\tthis.hideMenu();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.showMenu();\n\t\t}\n\t},\n\n\tshowMenu: function()\n\t{\n\t\tif (this.disabled)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.menu.show();\n\t\tthis.$btn.addClass('active');\n\t\tthis.$btn.trigger('focus');\n\t\tthis.$btn.attr('aria-expanded', 'true');\n\n\t\tthis.showingMenu = true;\n\n\t\tsetTimeout($.proxy(function() {\n\t\t\tthis.addListener(Garnish.$doc, 'mousedown', 'onMouseDown');\n\t\t}, this), 1);\n\t},\n\n\thideMenu: function()\n\t{\n\t\tthis.menu.hide();\n\t\tthis.$btn.attr('aria-expanded', 'false');\n\t},\n\n\tonMenuHide: function()\n\t{\n\t\tthis.$btn.removeClass('active');\n\t\tthis.showingMenu = false;\n\n\t\tthis.removeListener(Garnish.$doc, 'mousedown');\n\t},\n\n\tonOptionSelect: function(option)\n\t{\n\t\tthis.settings.onOptionSelect(option);\n\t\tthis.trigger('optionSelect', { option: option });\n\t},\n\n\tenable: function ()\n\t{\n\t\tthis.disabled = false;\n\t},\n\n\tdisable: function ()\n\t{\n\t\tthis.disabled = true;\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$btn.removeData('menubtn');\n\t\tthis.base();\n\t}\n},\n{\n\tdefaults: {\n\t\tmenuAnchor: null,\n\t\tonOptionSelect: $.noop\n\t}\n});\n"",""/**\n * Mixed input\n *\n * @todo RTL support, in the event that the input doesn't have dir=\""ltr\"".\n */\nGarnish.MixedInput = Garnish.Base.extend({\n\n\t$container: null,\n\telements: null,\n\tfocussedElement: null,\n\tblurTimeout: null,\n\n\tinit: function(container, settings)\n\t{\n\t\tthis.$container = $(container);\n\t\tthis.setSettings(settings, Garnish.MixedInput.defaults);\n\n\t\tthis.elements = [];\n\n\t\t// Allow the container to receive focus\n\t\tthis.$container.attr('tabindex', 0);\n\t\tthis.addListener(this.$container, 'focus', 'onFocus');\n\t},\n\n\tgetElementIndex: function($elem)\n\t{\n\t\treturn $.inArray($elem, this.elements);\n\t},\n\n\tisText: function($elem)\n\t{\n\t\treturn ($elem.prop('nodeName') == 'INPUT');\n\t},\n\n\tonFocus: function(ev)\n\t{\n\t\t// Set focus to the first element\n\t\tif (this.elements.length)\n\t\t{\n\t\t\tvar $elem = this.elements[0];\n\t\t\tthis.setFocus($elem);\n\t\t\tthis.setCarotPos($elem, 0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.addTextElement();\n\t\t}\n\t},\n\n\taddTextElement: function(index)\n\t{\n\t\tvar text = new TextElement(this);\n\t\tthis.addElement(text.$input, index);\n\t\treturn text;\n\t},\n\n\taddElement: function($elem, index)\n\t{\n\t\t// Was a target index passed, and is it valid?\n\t\tif (typeof index == 'undefined')\n\t\t{\n\t\t\tif (this.focussedElement)\n\t\t\t{\n\t\t\t\tvar focussedElement = this.focussedElement,\n\t\t\t\t\tfocussedElementIndex = this.getElementIndex(focussedElement);\n\n\t\t\t\t// Is the focus on a text element?\n\t\t\t\tif (this.isText(focussedElement))\n\t\t\t\t{\n\t\t\t\t\tvar selectionStart = focussedElement.prop('selectionStart'),\n\t\t\t\t\t\tselectionEnd = focussedElement.prop('selectionEnd'),\n\t\t\t\t\t\tval = focussedElement.val(),\n\t\t\t\t\t\tpreVal = val.substring(0, selectionStart),\n\t\t\t\t\t\tpostVal = val.substr(selectionEnd);\n\n\t\t\t\t\tif (preVal && postVal)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Split the input into two\n\t\t\t\t\t\tfocussedElement.val(preVal).trigger('change');\n\t\t\t\t\t\tvar newText = new TextElement(this);\n\t\t\t\t\t\tnewText.$input.val(postVal).trigger('change');\n\t\t\t\t\t\tthis.addElement(newText.$input, focussedElementIndex+1);\n\n\t\t\t\t\t\t// Insert the new element in between them\n\t\t\t\t\t\tindex = focussedElementIndex+1;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!preVal)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Insert the new element before this one\n\t\t\t\t\t\tindex = focussedElementIndex;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// Insert it after this one\n\t\t\t\t\t\tindex = focussedElementIndex + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Just insert the new one after this one\n\t\t\t\t\tindex = focussedElementIndex + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Insert the new element at the end\n\t\t\t\tindex = this.elements.length;\n\t\t\t}\n\t\t}\n\n\t\t// Add the element\n\t\tif (typeof this.elements[index] != 'undefined')\n\t\t{\n\t\t\t$elem.insertBefore(this.elements[index]);\n\t\t\tthis.elements.splice(index, 0, $elem);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Just for safe measure, set the index to what it really will be\n\t\t\tindex = this.elements.length;\n\n\t\t\tthis.$container.append($elem);\n\t\t\tthis.elements.push($elem);\n\t\t}\n\n\t\t// Make sure that there are text elements surrounding all non-text elements\n\t\tif (!this.isText($elem))\n\t\t{\n\t\t\t// Add a text element before?\n\t\t\tif (index == 0 || !this.isText(this.elements[index-1]))\n\t\t\t{\n\t\t\t\tthis.addTextElement(index);\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\t// Add a text element after?\n\t\t\tif (index == this.elements.length-1 || !this.isText(this.elements[index+1]))\n\t\t\t{\n\t\t\t\tthis.addTextElement(index+1);\n\t\t\t}\n\t\t}\n\n\t\t// Add event listeners\n\t\tthis.addListener($elem, 'click', function() {\n\t\t\tthis.setFocus($elem);\n\t\t});\n\n\t\t// Set focus to the new element\n\t\tsetTimeout($.proxy(function() {\n\t\t\tthis.setFocus($elem);\n\t\t}, this), 1);\n\t},\n\n\tremoveElement: function($elem)\n\t{\n\t\tvar index = this.getElementIndex($elem);\n\t\tif (index != -1)\n\t\t{\n\t\t\tthis.elements.splice(index, 1);\n\n\t\t\tif (!this.isText($elem))\n\t\t\t{\n\t\t\t\t// Combine the two now-adjacent text elements\n\t\t\t\tvar $prevElem = this.elements[index-1],\n\t\t\t\t\t$nextElem = this.elements[index];\n\n\t\t\t\tif (this.isText($prevElem) && this.isText($nextElem))\n\t\t\t\t{\n\t\t\t\t\tvar prevElemVal = $prevElem.val(),\n\t\t\t\t\t\tnewVal = prevElemVal + $nextElem.val();\n\t\t\t\t\t$prevElem.val(newVal).trigger('change');\n\t\t\t\t\tthis.removeElement($nextElem);\n\t\t\t\t\tthis.setFocus($prevElem);\n\t\t\t\t\tthis.setCarotPos($prevElem, prevElemVal.length);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$elem.remove();\n\t\t}\n\t},\n\n\tsetFocus: function($elem)\n\t{\n\t\tthis.$container.addClass('focus');\n\n\t\tif (!this.focussedElement)\n\t\t{\n\t\t\t// Prevent the container from receiving focus\n\t\t\t// as long as one of its elements has focus\n\t\t\tthis.$container.attr('tabindex', '-1');\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Blur the previously-focussed element\n\t\t\tthis.blurFocussedElement();\n\t\t}\n\n\t\t$elem.attr('tabindex', '0');\n\t\t$elem.focus();\n\t\tthis.focussedElement = $elem;\n\n\t\tthis.addListener($elem, 'blur', function() {\n\t\t\tthis.blurTimeout = setTimeout($.proxy(function() {\n\t\t\t\tif (this.focussedElement == $elem)\n\t\t\t\t{\n\t\t\t\t\tthis.blurFocussedElement();\n\t\t\t\t\tthis.focussedElement = null;\n\t\t\t\t\tthis.$container.removeClass('focus');\n\n\t\t\t\t\t// Get ready for future focus\n\t\t\t\t\tthis.$container.attr('tabindex', '0');\n\t\t\t\t}\n\t\t\t}, this), 1);\n\t\t});\n\t},\n\n\tblurFocussedElement: function()\n\t{\n\t\tthis.removeListener(this.focussedElement, 'blur');\n\t\tthis.focussedElement.attr('tabindex', '-1');\n\t},\n\n\tfocusPreviousElement: function($from)\n\t{\n\t\tvar index = this.getElementIndex($from);\n\n\t\tif (index > 0)\n\t\t{\n\t\t\tvar $elem = this.elements[index-1];\n\t\t\tthis.setFocus($elem);\n\n\t\t\t// If it's a text element, put the carot at the end\n\t\t\tif (this.isText($elem))\n\t\t\t{\n\t\t\t\tvar length = $elem.val().length;\n\t\t\t\tthis.setCarotPos($elem, length);\n\t\t\t}\n\t\t}\n\t},\n\n\tfocusNextElement: function($from)\n\t{\n\t\tvar index = this.getElementIndex($from);\n\n\t\tif (index < this.elements.length-1)\n\t\t{\n\t\t\tvar $elem = this.elements[index+1];\n\t\t\tthis.setFocus($elem);\n\n\t\t\t// If it's a text element, put the carot at the beginning\n\t\t\tif (this.isText($elem))\n\t\t\t{\n\t\t\t\tthis.setCarotPos($elem, 0)\n\t\t\t}\n\t\t}\n\t},\n\n\tsetCarotPos: function($elem, pos)\n\t{\n\t\t$elem.prop('selectionStart', pos);\n\t\t$elem.prop('selectionEnd', pos);\n\t}\n\n});\n\n\n\nvar TextElement = Garnish.Base.extend({\n\n\tparentInput: null,\n\t$input: null,\n\t$stage: null,\n\tval: null,\n\tfocussed: false,\n\tinterval: null,\n\n\tinit: function(parentInput)\n\t{\n\t\tthis.parentInput = parentInput;\n\n\t\tthis.$input = $('<input type=\""text\""/>').appendTo(this.parentInput.$container);\n\t\tthis.$input.css('margin-right', (2-TextElement.padding)+'px');\n\n\t\tthis.setWidth();\n\n\t\tthis.addListener(this.$input, 'focus', 'onFocus');\n\t\tthis.addListener(this.$input, 'blur', 'onBlur');\n\t\tthis.addListener(this.$input, 'keydown', 'onKeyDown');\n\t\tthis.addListener(this.$input, 'change', 'checkInput');\n\t},\n\n\tgetIndex: function()\n\t{\n\t\treturn this.parentInput.getElementIndex(this.$input);\n\t},\n\n\tbuildStage: function()\n\t{\n\t\tthis.$stage = $('<stage/>').appendTo(Garnish.$bod);\n\n\t\t// replicate the textarea's text styles\n\t\tthis.$stage.css({\n\t\t\tposition: 'absolute',\n\t\t\ttop: -9999,\n\t\t\tleft: -9999,\n\t\t\twordWrap: 'nowrap'\n\t\t});\n\n\t\tGarnish.copyTextStyles(this.$input, this.$stage);\n\t},\n\n\tgetTextWidth: function(val)\n\t{\n\t\tif (!this.$stage)\n\t\t{\n\t\t\tthis.buildStage();\n\t\t}\n\n\t\tif (val)\n\t\t{\n\t\t\t// Ampersand entities\n\t\t\tval = val.replace(/&/g, '&amp;');\n\n\t\t\t// < and >\n\t\t\tval = val.replace(/</g, '&lt;');\n\t\t\tval = val.replace(/>/g, '&gt;');\n\n\t\t\t// Spaces\n\t\t\tval = val.replace(/ /g, '&nbsp;');\n\t\t}\n\n\t\tthis.$stage.html(val);\n\t\tthis.stageWidth = this.$stage.width();\n\t\treturn this.stageWidth;\n\t},\n\n\tonFocus: function()\n\t{\n\t\tthis.focussed = true;\n\t\tthis.interval = setInterval($.proxy(this, 'checkInput'), Garnish.NiceText.interval);\n\t\tthis.checkInput();\n\t},\n\n\tonBlur: function()\n\t{\n\t\tthis.focussed = false;\n\t\tclearInterval(this.interval);\n\t\tthis.checkInput();\n\t},\n\n\tonKeyDown: function(ev)\n\t{\n\t\tsetTimeout($.proxy(this, 'checkInput'), 1);\n\n\t\tswitch (ev.keyCode)\n\t\t{\n\t\t\tcase Garnish.LEFT_KEY:\n\t\t\t{\n\t\t\t\tif (this.$input.prop('selectionStart') == 0 && this.$input.prop('selectionEnd') == 0)\n\t\t\t\t{\n\t\t\t\t\t// Set focus to the previous element\n\t\t\t\t\tthis.parentInput.focusPreviousElement(this.$input);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.RIGHT_KEY:\n\t\t\t{\n\t\t\t\tif (this.$input.prop('selectionStart') == this.val.length && this.$input.prop('selectionEnd') == this.val.length)\n\t\t\t\t{\n\t\t\t\t\t// Set focus to the next element\n\t\t\t\t\tthis.parentInput.focusNextElement(this.$input);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.DELETE_KEY:\n\t\t\t{\n\t\t\t\tif (this.$input.prop('selectionStart') == 0 && this.$input.prop('selectionEnd') == 0)\n\t\t\t\t{\n\t\t\t\t\t// Set focus to the previous element\n\t\t\t\t\tthis.parentInput.focusPreviousElement(this.$input);\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tgetVal: function()\n\t{\n\t\tthis.val = this.$input.val();\n\t\treturn this.val;\n\t},\n\n\tsetVal: function(val)\n\t{\n\t\tthis.$input.val(val);\n\t\tthis.checkInput();\n\t},\n\n\tcheckInput: function()\n\t{\n\t\t// Has the value changed?\n\t\tvar changed = (this.val !== this.getVal());\n\t\tif (changed)\n\t\t{\n\t\t\tthis.setWidth();\n\t\t\tthis.onChange();\n\t\t}\n\n\t\treturn changed;\n\t},\n\n\tsetWidth: function()\n\t{\n\t\t// has the width changed?\n\t\tif (this.stageWidth !== this.getTextWidth(this.val))\n\t\t{\n\t\t\t// update the textarea width\n\t\t\tvar width = this.stageWidth + TextElement.padding;\n\t\t\tthis.$input.width(width);\n\t\t}\n\t},\n\n\tonChange: $.noop\n},\n{\n\tpadding: 20\n});\n"",""/**\n * Modal\n */\nGarnish.Modal = Garnish.Base.extend({\n\n\t$container: null,\n\t$shade: null,\n\n\tvisible: false,\n\n\tdragger: null,\n\n\tdesiredWidth: null,\n\tdesiredHeight: null,\n\tresizeDragger: null,\n\tresizeStartWidth: null,\n\tresizeStartHeight: null,\n\n\tinit: function(container, settings)\n\t{\n\t\t// Param mapping\n\t\tif (typeof settings == typeof undefined && $.isPlainObject(container))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = container;\n\t\t\tcontainer = null;\n\t\t}\n\n\t\tthis.setSettings(settings, Garnish.Modal.defaults);\n\n\t\t// Create the shade\n\t\tthis.$shade = $('<div class=\""'+this.settings.shadeClass+'\""/>');\n\n\t\t// If the container is already set, drop the shade below it.\n\t\tif (container)\n\t\t{\n\t\t\tthis.$shade.insertBefore(container);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$shade.appendTo(Garnish.$bod);\n\t\t}\n\n\t\tif (container)\n\t\t{\n\t\t\tthis.setContainer(container);\n\n\t\t\tif (this.settings.autoShow)\n\t\t\t{\n\t\t\t\tthis.show();\n\t\t\t}\n\t\t}\n\n\t\tGarnish.Modal.instances.push(this);\n\t},\n\n\tsetContainer: function(container)\n\t{\n\t\tthis.$container = $(container);\n\n\t\t// Is this already a modal?\n\t\tif (this.$container.data('modal'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a modal on an element');\n\t\t\tthis.$container.data('modal').destroy();\n\t\t}\n\n\t\tthis.$container.data('modal', this);\n\n\t\tif (this.settings.draggable)\n\t\t{\n\t\t\tthis.dragger = new Garnish.DragMove(this.$container, {\n\t\t\t\thandle: (this.settings.dragHandleSelector ? this.$container.find(this.settings.dragHandleSelector) : this.$container)\n\t\t\t});\n\t\t}\n\n\t\tif (this.settings.resizable)\n\t\t{\n\t\t\tvar $resizeDragHandle = $('<div class=\""resizehandle\""/>').appendTo(this.$container);\n\n\t\t\tthis.resizeDragger = new Garnish.BaseDrag($resizeDragHandle, {\n\t\t\t\tonDragStart:   $.proxy(this, '_handleResizeStart'),\n\t\t\t\tonDrag:        $.proxy(this, '_handleResize')\n\t\t\t});\n\t\t}\n\n\t\tthis.addListener(this.$container, 'click', function(ev) {\n\t\t\tev.stopPropagation();\n\t\t});\n\n\t\t// Show it if we're late to the party\n\t\tif (this.visible)\n\t\t{\n\t\t\tthis.show();\n\t\t}\n\t},\n\n\tshow: function()\n\t{\n\t\t// Close other modals as needed\n\t\tif (this.settings.closeOtherModals && Garnish.Modal.visibleModal && Garnish.Modal.visibleModal != this)\n\t\t{\n\t\t\tGarnish.Modal.visibleModal.hide();\n\t\t}\n\n\t\tif (this.$container)\n\t\t{\n\t\t\t// Move it to the end of <body> so it gets the highest sub-z-index\n\t\t\tthis.$shade.appendTo(Garnish.$bod);\n\t\t\tthis.$container.appendTo(Garnish.$bod);\n\n\t\t\tthis.$container.show();\n\t\t\tthis.updateSizeAndPosition();\n\n\t\t\tthis.$shade.velocity('fadeIn', { duration: 50 });\n\t\t\tthis.$container.delay(50).velocity('fadeIn', {\n\t\t\t\tcomplete: $.proxy(this, 'onFadeIn')\n\t\t\t});\n\n\t\t\tif (this.settings.hideOnShadeClick)\n\t\t\t{\n\t\t\t\tthis.addListener(this.$shade, 'click', 'hide');\n\t\t\t}\n\n\t\t\tthis.addListener(Garnish.$win, 'resize', 'updateSizeAndPosition');\n\t\t}\n\n\t\tthis.enable();\n\n\t\tif (this.settings.hideOnEsc)\n\t\t{\n\t\t\tGarnish.escManager.register(this, 'hide');\n\t\t}\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.visible = true;\n\t\t\tGarnish.Modal.visibleModal = this;\n\n\t\t\tthis.trigger('show');\n\t\t\tthis.settings.onShow();\n\t\t}\n\t},\n\n\tquickShow: function()\n\t{\n\t\tthis.show();\n\n\t\tif (this.$container)\n\t\t{\n\t\t\tthis.$container.velocity('stop');\n\t\t\tthis.$container.show().css('opacity', 1);\n\n\t\t\tthis.$shade.velocity('stop');\n\t\t\tthis.$shade.show().css('opacity', 1);\n\t\t}\n\t},\n\n\thide: function(ev)\n\t{\n\t\tthis.disable();\n\n\t\tif (ev)\n\t\t{\n\t\t\tev.stopPropagation();\n\t\t}\n\n\t\tif (this.$container)\n\t\t{\n\t\t\tthis.$container.velocity('fadeOut', { duration: Garnish.FX_DURATION });\n\t\t\tthis.$shade.velocity('fadeOut', {\n\t\t\t\tduration: Garnish.FX_DURATION,\n\t\t\t\tcomplete: $.proxy(this, 'onFadeOut')\n\t\t\t});\n\n\t\t\tif (this.settings.hideOnShadeClick)\n\t\t\t{\n\t\t\t\tthis.removeListener(this.$shade, 'click');\n\t\t\t}\n\n\t\t\tthis.removeListener(Garnish.$win, 'resize');\n\t\t}\n\n\t\tthis.visible = false;\n\t\tGarnish.Modal.visibleModal = null;\n\n\t\tif (this.settings.hideOnEsc)\n\t\t{\n\t\t\tGarnish.escManager.unregister(this);\n\t\t}\n\n\t\tthis.trigger('hide');\n\t\tthis.settings.onHide();\n\t},\n\n\tquickHide: function()\n\t{\n\t\tthis.hide();\n\n\t\tif (this.$container)\n\t\t{\n\t\t\tthis.$container.velocity('stop');\n\t\t\tthis.$container.css('opacity', 0).hide();\n\n\t\t\tthis.$shade.velocity('stop');\n\t\t\tthis.$shade.css('opacity', 0).hide();\n\t\t}\n\t},\n\n\tupdateSizeAndPosition: function()\n\t{\n\t\tif (!this.$container)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$container.css({\n\t\t\t'width':      (this.desiredWidth ? Math.max(this.desiredWidth, 200) : ''),\n\t\t\t'height':     (this.desiredHeight ? Math.max(this.desiredHeight, 200) : ''),\n\t\t\t'min-width':  '',\n\t\t\t'min-height': ''\n\t\t});\n\n\t\t// Set the width first so that the height can adjust for the width\n\t\tthis.updateSizeAndPosition._windowWidth = Garnish.$win.width();\n\t\tthis.updateSizeAndPosition._width = Math.min(this.getWidth(), this.updateSizeAndPosition._windowWidth - this.settings.minGutter*2);\n\n\t\tthis.$container.css({\n\t\t\t'width':      this.updateSizeAndPosition._width,\n\t\t\t'min-width':  this.updateSizeAndPosition._width,\n\t\t\t'left':       Math.round((this.updateSizeAndPosition._windowWidth - this.updateSizeAndPosition._width) / 2)\n\t\t});\n\n\t\t// Now set the height\n\t\tthis.updateSizeAndPosition._windowHeight = Garnish.$win.height();\n\t\tthis.updateSizeAndPosition._height = Math.min(this.getHeight(), this.updateSizeAndPosition._windowHeight - this.settings.minGutter*2);\n\n\t\tthis.$container.css({\n\t\t\t'height':     this.updateSizeAndPosition._height,\n\t\t\t'min-height': this.updateSizeAndPosition._height,\n\t\t\t'top':        Math.round((this.updateSizeAndPosition._windowHeight - this.updateSizeAndPosition._height) / 2)\n\t\t});\n\t},\n\n\tonFadeIn: function()\n\t{\n\t\tthis.trigger('fadeIn');\n\t\tthis.settings.onFadeIn();\n\t},\n\n\tonFadeOut: function()\n\t{\n\t\tthis.trigger('fadeOut');\n\t\tthis.settings.onFadeOut();\n\t},\n\n\tgetHeight: function()\n\t{\n\t\tif (!this.$container)\n\t\t{\n\t\t\tthrow 'Attempted to get the height of a modal whose container has not been set.';\n\t\t}\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.$container.show();\n\t\t}\n\n\t\tthis.getHeight._height = this.$container.outerHeight();\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.$container.hide();\n\t\t}\n\n\t\treturn this.getHeight._height;\n\t},\n\n\tgetWidth: function()\n\t{\n\t\tif (!this.$container)\n\t\t{\n\t\t\tthrow 'Attempted to get the width of a modal whose container has not been set.';\n\t\t}\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.$container.show();\n\t\t}\n\n\t\t// Chrome might be 1px shy here for some reason\n\t\tthis.getWidth._width = this.$container.outerWidth() + 1;\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.$container.hide();\n\t\t}\n\n\t\treturn this.getWidth._width;\n\t},\n\n\t_handleResizeStart: function()\n\t{\n\t\tthis.resizeStartWidth = this.getWidth();\n\t\tthis.resizeStartHeight = this.getHeight();\n\t},\n\n\t_handleResize: function()\n\t{\n\t\tif (Garnish.ltr)\n\t\t{\n\t\t\tthis.desiredWidth = this.resizeStartWidth + (this.resizeDragger.mouseDistX * 2);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.desiredWidth = this.resizeStartWidth - (this.resizeDragger.mouseDistX * 2);\n\t\t}\n\n\t\tthis.desiredHeight = this.resizeStartHeight + (this.resizeDragger.mouseDistY * 2);\n\n\t\tthis.updateSizeAndPosition();\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tif (this.$container)\n\t\t{\n\t\t\tthis.$container.removeData('modal').remove();\n\t\t}\n\n\t\tif (this.dragger)\n\t\t{\n\t\t\tthis.dragger.destroy();\n\t\t}\n\n\t\tif (this.resizeDragger)\n\t\t{\n\t\t\tthis.resizeDragger.destroy();\n\t\t}\n\n\t\tthis.base();\n\t}\n},\n{\n\trelativeElemPadding: 8,\n\tdefaults: {\n\t\tautoShow: true,\n\t\tdraggable: false,\n\t\tdragHandleSelector: null,\n\t\tresizable: false,\n\t\tminGutter: 10,\n\t\tonShow: $.noop,\n\t\tonHide: $.noop,\n\t\tonFadeIn: $.noop,\n\t\tonFadeOut: $.noop,\n\t\tcloseOtherModals: false,\n\t\thideOnEsc: true,\n\t\thideOnShadeClick: true,\n\t\tshadeClass: 'modal-shade'\n\t},\n\tinstances: [],\n\tvisibleModal: null\n});\n"",""/**\n * Nice Text\n */\nGarnish.NiceText = Garnish.Base.extend({\n\n\t$input: null,\n\t$hint: null,\n\t$stage: null,\n\t$charsLeft: null,\n\tautoHeight: null,\n\tmaxLength: null,\n\tshowCharsLeft: false,\n\tshowingHint: false,\n\tval: null,\n\tinputBoxSizing: 'content-box',\n\twidth: null,\n\theight: null,\n\tminHeight: null,\n\tinitialized: false,\n\n\tinit: function(input, settings)\n\t{\n\t\tthis.$input = $(input);\n\t\tthis.settings = $.extend({}, Garnish.NiceText.defaults, settings);\n\n\t\tif (this.isVisible())\n\t\t{\n\t\t\tthis.initialize();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.addListener(Garnish.$win, 'resize', 'initializeIfVisible');\n\t\t}\n\t},\n\n\tisVisible: function()\n\t{\n\t\treturn (this.$input.height() > 0);\n\t},\n\n\tinitialize: function()\n\t{\n\t\tif (this.initialized)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.initialized = true;\n\t\tthis.removeListener(Garnish.$win, 'resize');\n\n\t\tthis.maxLength = this.$input.attr('maxlength');\n\n\t\tif (this.maxLength)\n\t\t{\n\t\t\tthis.maxLength = parseInt(this.maxLength);\n\t\t}\n\n\t\tif (this.maxLength && (this.settings.showCharsLeft || Garnish.hasAttr(this.$input, 'data-show-chars-left')))\n\t\t{\n\t\t\tthis.showCharsLeft = true;\n\n\t\t\t// Remove the maxlength attribute\n\t\t\tthis.$input.removeAttr('maxlength');\n\t\t}\n\n\t\t// Is this already a transparent text input?\n\t\tif (this.$input.data('nicetext'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a transparent text input on an element');\n\t\t\tthis.$input.data('nicetext').destroy();\n\t\t}\n\n\t\tthis.$input.data('nicetext', this);\n\n\t\tthis.getVal();\n\n\t\tthis.autoHeight = (this.settings.autoHeight && this.$input.prop('nodeName') == 'TEXTAREA');\n\n\t\tif (this.autoHeight)\n\t\t{\n\t\t\tthis.minHeight = this.getHeightForValue('');\n\t\t\tthis.updateHeight();\n\n\t\t\t// Update height when the window resizes\n\t\t\tthis.width = this.$input.width();\n\t\t\tthis.addListener(Garnish.$win, 'resize', 'updateHeightIfWidthChanged');\n\t\t}\n\n\t\tif (this.settings.hint)\n\t\t{\n\t\t\tthis.$hintContainer = $('<div class=\""texthint-container\""/>').insertBefore(this.$input);\n\t\t\tthis.$hint = $('<div class=\""texthint\"">'+this.settings.hint+'</div>').appendTo(this.$hintContainer);\n\t\t\tthis.$hint.css({\n\t\t\t\ttop:  (parseInt(this.$input.css('borderTopWidth'))  + parseInt(this.$input.css('paddingTop'))),\n\t\t\t\tleft: (parseInt(this.$input.css('borderLeftWidth')) + parseInt(this.$input.css('paddingLeft')) + 1)\n\t\t\t});\n\t\t\tGarnish.copyTextStyles(this.$input, this.$hint);\n\n\t\t\tif (this.val)\n\t\t\t{\n\t\t\t\tthis.$hint.hide();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.showingHint = true;\n\t\t\t}\n\n\t\t\t// Focus the input when clicking on the hint\n\t\t\tthis.addListener(this.$hint, 'mousedown', function(ev) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tthis.$input.focus();\n\t\t\t});\n\t\t}\n\n\t\tif (this.showCharsLeft)\n\t\t{\n\t\t\tthis.$charsLeft = $('<div class=\""'+this.settings.charsLeftClass+'\""/>').insertAfter(this.$input);\n\t\t\tthis.updateCharsLeft();\n\t\t}\n\n\t\tthis.addListener(this.$input, 'textchange', 'onTextChange');\n\t},\n\n\tinitializeIfVisible: function()\n\t{\n\t\tif (this.isVisible())\n\t\t{\n\t\t\tthis.initialize();\n\t\t}\n\t},\n\n\tgetVal: function()\n\t{\n\t\tthis.val = this.$input.val();\n\t\treturn this.val;\n\t},\n\n\tshowHint: function()\n\t{\n\t\tthis.$hint.velocity('fadeIn', {\n\t\t\tcomplete: Garnish.NiceText.hintFadeDuration\n\t\t});\n\n\t\tthis.showingHint = true;\n\t},\n\n\thideHint: function()\n\t{\n\t\tthis.$hint.velocity('fadeOut', {\n\t\t\tcomplete: Garnish.NiceText.hintFadeDuration\n\t\t});\n\n\t\tthis.showingHint = false;\n\t},\n\n\tonTextChange: function()\n\t{\n\t\tthis.getVal();\n\n\t\tif (this.$hint)\n\t\t{\n\t\t\tif (this.showingHint && this.val)\n\t\t\t{\n\t\t\t\tthis.hideHint();\n\t\t\t}\n\t\t\telse if (!this.showingHint && !this.val)\n\t\t\t{\n\t\t\t\tthis.showHint();\n\t\t\t}\n\t\t}\n\n\t\tif (this.autoHeight)\n\t\t{\n\t\t\tthis.updateHeight();\n\t\t}\n\n\t\tif (this.showCharsLeft)\n\t\t{\n\t\t\tthis.updateCharsLeft();\n\t\t}\n\t},\n\n\tbuildStage: function()\n\t{\n\t\tthis.$stage = $('<stage/>').appendTo(Garnish.$bod);\n\n\t\t// replicate the textarea's text styles\n\t\tthis.$stage.css({\n\t\t\tdisplay: 'block',\n\t\t\tposition: 'absolute',\n\t\t\ttop: -9999,\n\t\t\tleft: -9999\n\t\t});\n\n\t\tthis.inputBoxSizing = this.$input.css('box-sizing');\n\n\t\tif (this.inputBoxSizing == 'border-box')\n\t\t{\n\t\t\tthis.$stage.css({\n\t\t\t\t'border-top':          this.$input.css('border-top'),\n\t\t\t\t'border-right':        this.$input.css('border-right'),\n\t\t\t\t'border-bottom':       this.$input.css('border-bottom'),\n\t\t\t\t'border-left':         this.$input.css('border-left'),\n\t\t\t\t'padding-top':         this.$input.css('padding-top'),\n\t\t\t\t'padding-right':       this.$input.css('padding-right'),\n\t\t\t\t'padding-bottom':      this.$input.css('padding-bottom'),\n\t\t\t\t'padding-left':        this.$input.css('padding-left'),\n\t\t\t\t'-webkit-box-sizing':  this.inputBoxSizing,\n\t\t\t\t'-moz-box-sizing':     this.inputBoxSizing,\n\t\t\t\t'box-sizing':          this.inputBoxSizing\n\t\t\t});\n\t\t}\n\n\t\tGarnish.copyTextStyles(this.$input, this.$stage);\n\t},\n\n\tgetHeightForValue: function(val)\n\t{\n\t\tif (!this.$stage)\n\t\t{\n\t\t\tthis.buildStage();\n\t\t}\n\n\t\tif (this.inputBoxSizing == 'border-box')\n\t\t{\n\t\t\tthis.$stage.css('width', this.$input.outerWidth());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$stage.css('width', this.$input.width());\n\t\t}\n\n\t\tif (!val)\n\t\t{\n\t\t\tval = '&nbsp;';\n\t\t\tfor (var i = 1; i < this.$input.prop('rows'); i++)\n\t\t\t{\n\t\t\t\tval += '<br/>&nbsp;';\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Ampersand entities\n\t\t\tval = val.replace(/&/g, '&amp;');\n\n\t\t\t// < and >\n\t\t\tval = val.replace(/</g, '&lt;');\n\t\t\tval = val.replace(/>/g, '&gt;');\n\n\t\t\t// Multiple spaces\n\t\t\tval = val.replace(/ {2,}/g, function(spaces) {\n\t\t\t\t// TODO: replace with String.repeat() when more broadly available?\n\t\t\t\tvar replace = '';\n\t\t\t\tfor (var i = 0; i < spaces.length - 1; i++) {\n\t\t\t\t\treplace += '&nbsp;';\n\t\t\t\t}\n\t\t\t\treturn replace+' ';\n\t\t\t});\n\n\t\t\t// Line breaks\n\t\t\tval = val.replace(/[\\n\\r]$/g, '<br/>&nbps;');\n\t\t\tval = val.replace(/[\\n\\r]/g, '<br/>');\n\t\t}\n\n\t\tthis.$stage.html(val);\n\n\t\tif (this.inputBoxSizing == 'border-box')\n\t\t{\n\t\t\tthis.getHeightForValue._height = this.$stage.outerHeight();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getHeightForValue._height = this.$stage.height();\n\t\t}\n\n\t\tif (this.minHeight && this.getHeightForValue._height < this.minHeight)\n\t\t{\n\t\t\tthis.getHeightForValue._height = this.minHeight;\n\t\t}\n\n\t\treturn this.getHeightForValue._height;\n\t},\n\n\tupdateHeight: function()\n\t{\n\t\t// has the height changed?\n\t\tif (this.height !== (this.height = this.getHeightForValue(this.val)))\n\t\t{\n\t\t\tthis.$input.css('min-height', this.height);\n\n\t\t\tif (this.initialized)\n\t\t\t{\n\t\t\t\tthis.onHeightChange();\n\t\t\t}\n\t\t}\n\t},\n\n\tupdateHeightIfWidthChanged: function()\n\t{\n\t\tif (this.isVisible() && this.width !== (this.width = this.$input.width()) && this.width)\n\t\t{\n\t\t\tthis.updateHeight();\n\t\t}\n\t},\n\n\tonHeightChange: function()\n\t{\n\t\tthis.settings.onHeightChange();\n\t},\n\n\tupdateCharsLeft: function()\n\t{\n\t\tthis.updateCharsLeft._charsLeft = this.maxLength - this.val.length;\n\t\tthis.$charsLeft.text(this.updateCharsLeft._charsLeft);\n\n\t\tif (this.updateCharsLeft._charsLeft >= 0)\n\t\t{\n\t\t\tthis.$charsLeft.removeClass(this.settings.negativeCharsLeftClass);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$charsLeft.addClass(this.settings.negativeCharsLeftClass);\n\t\t}\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$input.removeData('nicetext');\n\n\t\tif (this.$hint)\n\t\t{\n\t\t\tthis.$hint.remove();\n\t\t}\n\n\t\tif (this.$stage)\n\t\t{\n\t\t\tthis.$stage.remove();\n\t\t}\n\n\t\tthis.base();\n\t}\n},\n{\n\tinterval: 100,\n\thintFadeDuration: 50,\n\tdefaults: {\n\t\tautoHeight:             true,\n\t\tshowCharsLeft:          false,\n\t\tcharsLeftClass:         'chars-left',\n\t\tnegativeCharsLeftClass: 'negative-chars-left',\n\t\tonHeightChange:         $.noop\n\t}\n});\n"",""/**\n * Pill\n */\nGarnish.Pill = Garnish.Base.extend({\n\n\t$outerContainer: null,\n\t$innerContainer: null,\n\t$btns: null,\n\t$selectedBtn: null,\n\t$input: null,\n\n\tinit: function(outerContainer)\n\t{\n\t\tthis.$outerContainer = $(outerContainer);\n\n\t\t// Is this already a pill?\n\t\tif (this.$outerContainer.data('pill'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a pill on an element');\n\t\t\tthis.$outerContainer.data('pill').destroy();\n\t\t}\n\n\t\tthis.$outerContainer.data('pill', this);\n\n\t\tthis.$innerContainer = this.$outerContainer.find('.btngroup:first');\n\t\tthis.$btns = this.$innerContainer.find('.btn');\n\t\tthis.$selectedBtn = this.$btns.filter('.active:first');\n\t\tthis.$input = this.$outerContainer.find('input:first');\n\n\t\tGarnish.preventOutlineOnMouseFocus(this.$innerContainer);\n\t\tthis.addListener(this.$btns, 'mousedown', 'onMouseDown');\n\t\tthis.addListener(this.$innerContainer, 'keydown', 'onKeyDown');\n\t},\n\n\tselect: function(btn)\n\t{\n\t\tthis.$selectedBtn.removeClass('active');\n\t\tvar $btn = $(btn);\n\t\t$btn.addClass('active');\n\t\tthis.$input.val($btn.attr('data-value'));\n\t\tthis.$selectedBtn = $btn;\n\t},\n\n\tselectNext: function()\n\t{\n\t\tif (!this.$selectedBtn.length)\n\t\t{\n\t\t\tthis.select(this.$btns[this.$btns.length-1]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar nextIndex = this._getSelectedBtnIndex() + 1;\n\n\t\t\tif (typeof this.$btns[nextIndex] != 'undefined')\n\t\t\t{\n\t\t\t\tthis.select(this.$btns[nextIndex]);\n\t\t\t}\n\t\t}\n\t},\n\n\tselectPrev: function()\n\t{\n\t\tif (!this.$selectedBtn.length)\n\t\t{\n\t\t\tthis.select(this.$btns[0]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar prevIndex = this._getSelectedBtnIndex() - 1;\n\n\t\t\tif (typeof this.$btns[prevIndex] != 'undefined')\n\t\t\t{\n\t\t\t\tthis.select(this.$btns[prevIndex]);\n\t\t\t}\n\t\t}\n\t},\n\n\tonMouseDown: function(ev)\n\t{\n\t\tthis.select(ev.currentTarget);\n\t},\n\n\t_getSelectedBtnIndex: function()\n\t{\n\t\tif (typeof this.$selectedBtn[0] != 'undefined')\n\t\t{\n\t\t\treturn $.inArray(this.$selectedBtn[0], this.$btns);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\t},\n\n\tonKeyDown: function(ev)\n\t{\n\t\tswitch (ev.keyCode)\n\t\t{\n\t\t\tcase Garnish.RIGHT_KEY:\n\t\t\t{\n\t\t\t\tif (Garnish.ltr)\n\t\t\t\t{\n\t\t\t\t\tthis.selectNext();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.selectPrev();\n\t\t\t\t}\n\n\t\t\t\tev.preventDefault();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.LEFT_KEY:\n\t\t\t{\n\t\t\t\tif (Garnish.ltr)\n\t\t\t\t{\n\t\t\t\t\tthis.selectPrev();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.selectNext();\n\t\t\t\t}\n\n\t\t\t\tev.preventDefault();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$outerContainer.removeData('pill');\n\t\tthis.base();\n\t}\n});\n"",""/**\n * Select\n */\nGarnish.Select = Garnish.Base.extend({\n\n\t// Properties\n\t// =========================================================================\n\n\t$container: null,\n\t$items: null,\n\t$selectedItems: null,\n\n\tmousedownTarget: null,\n\tmouseUpTimeout: null,\n\tcallbackFrame: null,\n\n\t$focusable: null,\n\t$first: null,\n\tfirst: null,\n\t$last: null,\n\tlast: null,\n\n\t// Public methods\n\t// =========================================================================\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(container, items, settings)\n\t{\n\t\tthis.$container = $(container);\n\n\t\t// Param mapping\n\t\tif (typeof items == typeof undefined && $.isPlainObject(container))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = container;\n\t\t\tcontainer = null;\n\t\t\titems = null;\n\t\t}\n\t\telse if (typeof settings == typeof undefined && $.isPlainObject(items))\n\t\t{\n\t\t\t// (container, settings)\n\t\t\tsettings = items;\n\t\t\titems = null;\n\t\t}\n\n\t\t// Is this already a select?\n\t\tif (this.$container.data('select'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a select on an element');\n\t\t\tthis.$container.data('select').destroy();\n\t\t}\n\n\t\tthis.$container.data('select', this);\n\n\t\tthis.setSettings(settings, Garnish.Select.defaults);\n\n\t\tthis.$items = $();\n\t\tthis.$selectedItems = $();\n\n\t\tthis.addItems(items);\n\n\t\t// --------------------------------------------------------------------\n\n\t\tif (this.settings.allowEmpty && !this.settings.checkboxMode)\n\t\t{\n\t\t\tthis.addListener(this.$container, 'click', function(ev)\n\t\t\t{\n\t\t\t\tif (this.ignoreClick)\n\t\t\t\t{\n\t\t\t\t\tthis.ignoreClick = false;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Deselect all items on container click\n\t\t\t\t\tthis.deselectAll(true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t// --------------------------------------------------------------------\n\n\t/**\n\t * Get Item Index\n\t */\n\tgetItemIndex: function($item)\n\t{\n\t\treturn this.$items.index($item[0]);\n\t},\n\n\t/**\n\t * Is Selected?\n\t */\n\tisSelected: function(item)\n\t{\n\t\tif (Garnish.isJquery(item))\n\t\t{\n\t\t\tif (!item[0])\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\titem = item[0];\n\t\t}\n\n\t\treturn ($.inArray(item, this.$selectedItems) != -1);\n\t},\n\n\t/**\n\t * Select Item\n\t */\n\tselectItem: function($item, focus, preventScroll)\n\t{\n\t\tif (!this.settings.multi)\n\t\t{\n\t\t\tthis.deselectAll();\n\t\t}\n\n\t\tthis.$first = this.$last = $item;\n\t\tthis.first = this.last = this.getItemIndex($item);\n\n\t\tif (focus)\n\t\t{\n\t\t\tthis.setFocusableItem($item);\n\t\t\tthis.focusItem($item, preventScroll);\n\t\t}\n\n\t\tthis._selectItems($item);\n\t},\n\n\tselectAll: function()\n\t{\n\t\tif (!this.settings.multi || !this.$items.length)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.first = 0;\n\t\tthis.last = this.$items.length-1;\n\t\tthis.$first = this.$items.eq(this.first);\n\t\tthis.$last = this.$items.eq(this.last);\n\n\t\tthis._selectItems(this.$items);\n\t},\n\n\t/**\n\t * Select Range\n\t */\n\tselectRange: function($item, preventScroll)\n\t{\n\t\tif (!this.settings.multi)\n\t\t{\n\t\t\treturn this.selectItem($item, true);\n\t\t}\n\n\t\tthis.deselectAll();\n\n\t\tthis.$last = $item;\n\t\tthis.last = this.getItemIndex($item);\n\n\t\tthis.setFocusableItem($item);\n\t\tthis.focusItem($item, preventScroll);\n\n\t\t// prepare params for $.slice()\n\t\tif (this.first < this.last)\n\t\t{\n\t\t\tvar sliceFrom = this.first,\n\t\t\t\tsliceTo = this.last + 1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar sliceFrom = this.last,\n\t\t\t\tsliceTo = this.first + 1;\n\t\t}\n\n\t\tthis._selectItems(this.$items.slice(sliceFrom, sliceTo));\n\t},\n\n\t/**\n\t * Deselect Item\n\t */\n\tdeselectItem: function($item)\n\t{\n\t\tvar index = this.getItemIndex($item);\n\t\tif (this.first === index) this.$first = this.first = null;\n\t\tif (this.last === index) this.$last = this.last = null;\n\n\t\tthis._deselectItems($item);\n\t},\n\n\t/**\n\t * Deselect All\n\t */\n\tdeselectAll: function(clearFirst)\n\t{\n\t\tif (clearFirst)\n\t\t{\n\t\t\tthis.$first = this.first = this.$last = this.last = null;\n\t\t}\n\n\t\tthis._deselectItems(this.$items);\n\t},\n\n\t/**\n\t * Deselect Others\n\t */\n\tdeselectOthers: function($item)\n\t{\n\t\tthis.deselectAll();\n\t\tthis.selectItem($item, true);\n\t},\n\n\t/**\n\t * Toggle Item\n\t */\n\ttoggleItem: function($item, preventScroll)\n\t{\n\t\tif (!this.isSelected($item))\n\t\t{\n\t\t\tthis.selectItem($item, true, preventScroll);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (this._canDeselect($item))\n\t\t\t{\n\t\t\t\tthis.deselectItem($item, true);\n\t\t\t}\n\t\t}\n\t},\n\n\t// --------------------------------------------------------------------\n\n\tclearMouseUpTimeout: function()\n\t{\n\t\tclearTimeout(this.mouseUpTimeout);\n\t},\n\n\tgetFirstItem: function()\n\t{\n\t\tif (this.$items.length)\n\t\t{\n\t\t\treturn this.$items.first();\n\t\t}\n\t},\n\n\tgetLastItem: function()\n\t{\n\t\tif (this.$items.length)\n\t\t{\n\t\t\treturn this.$items.last();\n\t\t}\n\t},\n\n\tisPreviousItem: function(index)\n\t{\n\t\treturn (index > 0);\n\t},\n\n\tisNextItem: function(index)\n\t{\n\t\treturn (index < this.$items.length-1);\n\t},\n\n\tgetPreviousItem: function(index)\n\t{\n\t\tif (this.isPreviousItem(index))\n\t\t{\n\t\t\treturn this.$items.eq(index-1);\n\t\t}\n\t},\n\n\tgetNextItem: function(index)\n\t{\n\t\tif (this.isNextItem(index))\n\t\t{\n\t\t\treturn this.$items.eq(index+1);\n\t\t}\n\t},\n\n\tgetItemToTheLeft: function(index)\n\t{\n\t\tvar func = (Garnish.ltr ? 'Previous' : 'Next');\n\n\t\tif (this['is'+func+'Item'](index))\n\t\t{\n\t\t\tif (this.settings.horizontal)\n\t\t\t{\n\t\t\t\treturn this['get'+func+'Item'](index);\n\t\t\t}\n\t\t\tif (!this.settings.vertical)\n\t\t\t{\n\t\t\t\treturn this.getClosestItem(index, Garnish.X_AXIS, '<');\n\t\t\t}\n\t\t}\n\t},\n\n\tgetItemToTheRight: function(index)\n\t{\n\t\tvar func = (Garnish.ltr ? 'Next' : 'Previous');\n\n\t\tif (this['is'+func+'Item'](index))\n\t\t{\n\t\t\tif (this.settings.horizontal)\n\t\t\t{\n\t\t\t\treturn this['get'+func+'Item'](index);\n\t\t\t}\n\t\t\telse if (!this.settings.vertical)\n\t\t\t{\n\t\t\t\treturn this.getClosestItem(index, Garnish.X_AXIS, '>');\n\t\t\t}\n\t\t}\n\t},\n\n\tgetItemAbove: function(index)\n\t{\n\t\tif (this.isPreviousItem(index))\n\t\t{\n\t\t\tif (this.settings.vertical)\n\t\t\t{\n\t\t\t\treturn this.getPreviousItem(index);\n\t\t\t}\n\t\t\telse if (!this.settings.horizontal)\n\t\t\t{\n\t\t\t\treturn this.getClosestItem(index, Garnish.Y_AXIS, '<');\n\t\t\t}\n\t\t}\n\t},\n\n\tgetItemBelow: function(index)\n\t{\n\t\tif (this.isNextItem(index))\n\t\t{\n\t\t\tif (this.settings.vertical)\n\t\t\t{\n\t\t\t\treturn this.getNextItem(index);\n\t\t\t}\n\t\t\telse if (!this.settings.horizontal)\n\t\t\t{\n\t\t\t\treturn this.getClosestItem(index, Garnish.Y_AXIS, '>');\n\t\t\t}\n\t\t}\n\t},\n\n\tgetClosestItem: function(index, axis, dir)\n\t{\n\t\tvar axisProps = Garnish.Select.closestItemAxisProps[axis],\n\t\t\tdirProps = Garnish.Select.closestItemDirectionProps[dir];\n\n\t\tvar $thisItem = this.$items.eq(index),\n\t\t\tthisOffset = $thisItem.offset(),\n\t\t\tthisMidpoint = thisOffset[axisProps.midpointOffset] + Math.round($thisItem[axisProps.midpointSizeFunc]()/2),\n\t\t\totherRowPos = null,\n\t\t\tsmallestMidpointDiff = null,\n\t\t\t$closestItem = null;\n\n\t\t// Go the other way if this is the X axis and a RTL page\n\t\tif (Garnish.rtl && axis == Garnish.X_AXIS)\n\t\t{\n\t\t\tvar step = dirProps.step * -1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar step = dirProps.step;\n\t\t}\n\n\t\tfor (var i = index + step; (typeof this.$items[i] != 'undefined'); i += step)\n\t\t{\n\t\t\tvar $otherItem = this.$items.eq(i),\n\t\t\t\totherOffset = $otherItem.offset();\n\n\t\t\t// Are we on the next row yet?\n\t\t\tif (dirProps.isNextRow(otherOffset[axisProps.rowOffset], thisOffset[axisProps.rowOffset]))\n\t\t\t{\n\t\t\t\t// Is this the first time we've seen this row?\n\t\t\t\tif (otherRowPos === null)\n\t\t\t\t{\n\t\t\t\t\totherRowPos = otherOffset[axisProps.rowOffset];\n\t\t\t\t}\n\t\t\t\t// Have we gone too far?\n\t\t\t\telse if (otherOffset[axisProps.rowOffset] != otherRowPos)\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvar otherMidpoint = otherOffset[axisProps.midpointOffset] + Math.round($otherItem[axisProps.midpointSizeFunc]()/2),\n\t\t\t\t\tmidpointDiff = Math.abs(thisMidpoint - otherMidpoint);\n\n\t\t\t\t// Are we getting warmer?\n\t\t\t\tif (smallestMidpointDiff === null || midpointDiff < smallestMidpointDiff)\n\t\t\t\t{\n\t\t\t\t\tsmallestMidpointDiff = midpointDiff;\n\t\t\t\t\t$closestItem = $otherItem;\n\t\t\t\t}\n\t\t\t\t// Getting colder?\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Getting colder?\n\t\t\telse if (dirProps.isWrongDirection(otherOffset[axisProps.rowOffset], thisOffset[axisProps.rowOffset]))\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn $closestItem;\n\t},\n\n\tgetFurthestItemToTheLeft: function(index)\n\t{\n\t\treturn this.getFurthestItem(index, 'ToTheLeft');\n\t},\n\n\tgetFurthestItemToTheRight: function(index)\n\t{\n\t\treturn this.getFurthestItem(index, 'ToTheRight');\n\t},\n\n\tgetFurthestItemAbove: function(index)\n\t{\n\t\treturn this.getFurthestItem(index, 'Above');\n\t},\n\n\tgetFurthestItemBelow: function(index)\n\t{\n\t\treturn this.getFurthestItem(index, 'Below');\n\t},\n\n\tgetFurthestItem: function(index, dir)\n\t{\n\t\tvar $item, $testItem;\n\n\t\twhile ($testItem = this['getItem'+dir](index))\n\t\t{\n\t\t\t$item = $testItem;\n\t\t\tindex = this.getItemIndex($item);\n\t\t}\n\n\t\treturn $item;\n\t},\n\n\t// --------------------------------------------------------------------\n\n\t/**\n\t * totalSelected getter\n\t */\n\tget totalSelected()\n\t{\n\t\treturn this.getTotalSelected();\n\t},\n\n\t/**\n\t * Get Total Selected\n\t */\n\tgetTotalSelected: function()\n\t{\n\t\treturn this.$selectedItems.length;\n\t},\n\n\t/**\n\t * Add Items\n\t */\n\taddItems: function(items)\n\t{\n\t\tvar $items = $(items);\n\n\t\tfor (var i = 0; i < $items.length; i++)\n\t\t{\n\t\t\tvar item = $items[i];\n\n\t\t\t// Make sure this element doesn't belong to another selector\n\t\t\tif ($.data(item, 'select'))\n\t\t\t{\n\t\t\t\tGarnish.log('Element was added to more than one selector');\n\t\t\t\t$.data(item, 'select').removeItems(item);\n\t\t\t}\n\n\t\t\t// Add the item\n\t\t\t$.data(item, 'select', this);\n\n\t\t\t// Get the handle\n\t\t\tif (this.settings.handle)\n\t\t\t{\n\t\t\t\tif (typeof this.settings.handle == 'object')\n\t\t\t\t{\n\t\t\t\t\tvar $handle = $(this.settings.handle);\n\t\t\t\t}\n\t\t\t\telse if (typeof this.settings.handle == 'string')\n\t\t\t\t{\n\t\t\t\t\tvar $handle = $(item).find(this.settings.handle);\n\t\t\t\t}\n\t\t\t\telse if (typeof this.settings.handle == 'function')\n\t\t\t\t{\n\t\t\t\t\tvar $handle = $(this.settings.handle(item));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar $handle = $(item);\n\t\t\t}\n\n\t\t\t$.data(item, 'select-handle', $handle);\n\t\t\t$handle.data('select-item', item);\n\n\t\t\tthis.addListener($handle, 'mousedown', 'onMouseDown');\n\t\t\tthis.addListener($handle, 'mouseup', 'onMouseUp');\n\t\t\tthis.addListener($handle, 'click', function(ev)\n\t\t\t{\n\t\t\t\tthis.ignoreClick = true;\n\t\t\t});\n\n\t\t\tthis.addListener(item, 'keydown', 'onKeyDown');\n\t\t}\n\n\t\tthis.$items = this.$items.add($items);\n\t\tthis.updateIndexes();\n\t},\n\n\t/**\n\t * Remove Items\n\t */\n\tremoveItems: function(items)\n\t{\n\t\titems = $.makeArray(items);\n\n\t\tvar itemsChanged = false,\n\t\t\tselectionChanged = false;\n\n\t\tfor (var i = 0; i < items.length; i++)\n\t\t{\n\t\t\tvar item = items[i];\n\n\t\t\t// Make sure we actually know about this item\n\t\t\tvar index = $.inArray(item, this.$items);\n\t\t\tif (index != -1)\n\t\t\t{\n\t\t\t\tthis._deinitItem(item);\n\t\t\t\tthis.$items.splice(index, 1);\n\t\t\t\titemsChanged = true;\n\n\t\t\t\tvar selectedIndex = $.inArray(item, this.$selectedItems);\n\t\t\t\tif (selectedIndex != -1)\n\t\t\t\t{\n\t\t\t\t\tthis.$selectedItems.splice(selectedIndex, 1);\n\t\t\t\t\tselectionChanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (itemsChanged)\n\t\t{\n\t\t\tthis.updateIndexes();\n\n\t\t\tif (selectionChanged)\n\t\t\t{\n\t\t\t\t$(items).removeClass(this.settings.selectedClass);\n\t\t\t\tthis.onSelectionChange();\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Remove All Items\n\t */\n\tremoveAllItems: function()\n\t{\n\t\tfor (var i = 0; i < this.$items.length; i++)\n\t\t{\n\t\t\tthis._deinitItem(this.$items[i]);\n\t\t}\n\n\t\tthis.$items = $();\n\t\tthis.$selectedItems = $();\n\t\tthis.updateIndexes();\n\t},\n\n\t/**\n\t * Update First/Last indexes\n\t */\n\tupdateIndexes: function()\n\t{\n\t\tif (this.first !== null)\n\t\t{\n\t\t\tthis.first = this.getItemIndex(this.$first);\n\t\t\tthis.setFocusableItem(this.$first);\n\t\t}\n\t\telse if (this.$items.length)\n\t\t{\n\t\t\tthis.setFocusableItem($(this.$items[0]));\n\t\t}\n\n\t\tif (this.last !== null)\n\t\t{\n\t\t\tthis.last = this.getItemIndex(this.$last);\n\t\t}\n\t},\n\n\t/**\n\t * Reset Item Order\n\t */\n\t resetItemOrder: function()\n\t {\n\t \tthis.$items = $().add(this.$items);\n\t \tthis.$selectedItems = $().add(this.$selectedItems);\n\t \tthis.updateIndexes();\n\t },\n\n\t/**\n\t * Sets the focusable item.\n\t *\n\t * We only want to have one focusable item per selection list, so that the user\n\t * doesn't have to tab through a million items.\n\t *\n\t * @param object $item\n\t */\n\tsetFocusableItem: function($item)\n\t{\n\t\tif (this.$focusable)\n\t\t{\n\t\t\tthis.$focusable.removeAttr('tabindex');\n\t\t}\n\n\t\tthis.$focusable = $item.attr('tabindex', '0');\n\t},\n\n\t/**\n\t * Sets the focus on an item.\n\t */\n\tfocusItem: function($item, preventScroll)\n\t{\n\t\tif (preventScroll)\n\t\t{\n\t\t\tvar scrollLeft = Garnish.$doc.scrollLeft(),\n\t\t\t\tscrollTop = Garnish.$doc.scrollTop();\n\t\t\t$item.focus();\n\t\t\twindow.scrollTo(scrollLeft, scrollTop);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$item.focus();\n\t\t}\n\t},\n\n\t// --------------------------------------------------------------------\n\n\t/**\n\t * Get Selected Items\n\t */\n\tgetSelectedItems: function()\n\t{\n\t\treturn this.$selectedItems;\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$container.removeData('select');\n\t\tthis.removeAllItems();\n\t\tthis.base();\n\t},\n\n\t// Events\n\t// -------------------------------------------------------------------------\n\n\t/**\n\t * On Mouse Down\n\t */\n\tonMouseDown: function(ev)\n\t{\n\t\t// ignore right clicks\n\t\tif (ev.which != Garnish.PRIMARY_CLICK)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Enforce the filter\n\t\tif (this.settings.filter && !$(ev.target).is(this.settings.filter))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.mousedownTarget = ev.currentTarget;\n\n\t\tvar $item = $($.data(ev.currentTarget, 'select-item'));\n\n\t\tif (this.first !== null && ev.shiftKey)\n\t\t{\n\t\t\t// Shift key is consistent for both selection modes\n\t\t\tthis.selectRange($item, true);\n\t\t}\n\t\telse if (this._actAsCheckbox(ev))\n\t\t{\n\t\t\tthis.toggleItem($item, true);\n\t\t}\n\t},\n\n\t/**\n\t * On Mouse Up\n\t */\n\tonMouseUp: function(ev)\n\t{\n\t\t// ignore right clicks\n\t\tif (ev.which != Garnish.PRIMARY_CLICK)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Enfore the filter\n\t\tif (this.settings.filter && !$(ev.target).is(this.settings.filter))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar $item = $($.data(ev.currentTarget, 'select-item'));\n\n\t\t// was this a click?\n\t\tif (\n\t\t\t!this._actAsCheckbox(ev) &&\n\t\t\t!ev.shiftKey &&\n\t\t\tev.currentTarget == this.mousedownTarget\n\t\t)\n\t\t{\n\t\t\t// If this is already selected, wait a moment to see if this is a double click before making any rash decisions\n\t\t\tif (this.isSelected($item))\n\t\t\t{\n\t\t\t\tthis.clearMouseUpTimeout();\n\n\t\t\t\tthis.mouseUpTimeout = setTimeout($.proxy(function() {\n\t\t\t\t\tthis.deselectOthers($item);\n\t\t\t\t}, this), 300);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.deselectAll();\n\t\t\t\tthis.selectItem($item, true, true);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * On Key Down\n\t */\n\tonKeyDown: function(ev)\n\t{\n\t\t// Ignore if the focus isn't on one of our items\n\t\tif (ev.target != ev.currentTarget)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar ctrlKey = Garnish.isCtrlKeyPressed(ev);\n\n\t\tif (!this.settings.checkboxMode || !this.$focusable.length)\n\t\t{\n\t\t\tvar anchor = ev.shiftKey ? this.last : this.first;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar anchor = $.inArray(this.$focusable[0], this.$items);\n\n\t\t\tif (anchor == -1)\n\t\t\t{\n\t\t\t\tanchor = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Ok, what are we doing here?\n\t\tswitch (ev.keyCode)\n\t\t{\n\t\t\tcase Garnish.LEFT_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\t// Select the last item if none are selected\n\t\t\t\tif (this.first === null)\n\t\t\t\t{\n\t\t\t\t\tif (Garnish.ltr)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getLastItem();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFirstItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFurthestItemToTheLeft(anchor);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getItemToTheLeft(anchor);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.RIGHT_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\t// Select the first item if none are selected\n\t\t\t\tif (this.first === null)\n\t\t\t\t{\n\t\t\t\t\tif (Garnish.ltr)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFirstItem();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getLastItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFurthestItemToTheRight(anchor);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getItemToTheRight(anchor);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.UP_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\t// Select the last item if none are selected\n\t\t\t\tif (this.first === null)\n\t\t\t\t{\n\t\t\t\t\tif (this.$focusable)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.$focusable.prev();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.$focusable || !$item.length)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getLastItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFurthestItemAbove(anchor);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getItemAbove(anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!$item)\n\t\t\t\t\t{\n\t\t\t\t\t\t$item = this.getFirstItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.DOWN_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\t// Select the first item if none are selected\n\t\t\t\tif (this.first === null)\n\t\t\t\t{\n\t\t\t\t\tif (this.$focusable)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.$focusable.next();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.$focusable || !$item.length)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFirstItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFurthestItemBelow(anchor);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getItemBelow(anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!$item)\n\t\t\t\t\t{\n\t\t\t\t\t\t$item = this.getLastItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.SPACE_KEY:\n\t\t\t{\n\t\t\t\tif (!ctrlKey)\n\t\t\t\t{\n\t\t\t\t\tev.preventDefault();\n\n\t\t\t\t\tif (this.isSelected(this.$focusable))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this._canDeselect(this.$focusable))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.deselectItem(this.$focusable);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.selectItem(this.$focusable, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.A_KEY:\n\t\t\t{\n\t\t\t\tif (ctrlKey)\n\t\t\t\t{\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t\tthis.selectAll();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Is there an item queued up for focus/selection?\n\t\tif ($item && $item.length)\n\t\t{\n\t\t\tif (!this.settings.checkboxMode)\n\t\t\t{\n\t\t\t\t// select it\n\t\t\t\tif (this.first !== null && ev.shiftKey)\n\t\t\t\t{\n\t\t\t\t\tthis.selectRange($item);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.deselectAll();\n\t\t\t\t\tthis.selectItem($item, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// just set the new item to be focussable\n\t\t\t\tthis.setFocusableItem($item);\n\t\t\t\t$item.focus();\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set Callback Timeout\n\t */\n\tonSelectionChange: function()\n\t{\n\t\tif (this.callbackFrame)\n\t\t{\n\t\t\tGarnish.cancelAnimationFrame(this.callbackFrame);\n\t\t\tthis.callbackFrame = null;\n\t\t}\n\n\t\tthis.callbackFrame = Garnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.callbackFrame = null;\n\t\t\tthis.trigger('selectionChange');\n\t\t\tthis.settings.onSelectionChange();\n\t\t}, this));\n\t},\n\n\t// Private methods\n\t// =========================================================================\n\n\t_actAsCheckbox: function(ev)\n\t{\n\t\tif (Garnish.isCtrlKeyPressed(ev))\n\t\t{\n\t\t\treturn !this.settings.checkboxMode;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn this.settings.checkboxMode;\n\t\t}\n\t},\n\n\t_canDeselect: function($items)\n\t{\n\t\treturn (this.settings.allowEmpty || this.totalSelected > $items.length);\n\t},\n\n\t_selectItems: function($items)\n\t{\n\t\t$items.addClass(this.settings.selectedClass);\n\t\tthis.$selectedItems = this.$selectedItems.add($items);\n\t\tthis.onSelectionChange();\n\t},\n\n\t_deselectItems: function($items)\n\t{\n\t\t$items.removeClass(this.settings.selectedClass);\n\t\tthis.$selectedItems = this.$selectedItems.not($items);\n\t\tthis.onSelectionChange();\n\t},\n\n\t/**\n\t * Deinitialize an item.\n\t */\n\t_deinitItem: function(item)\n\t{\n\t\tvar $handle = $.data(item, 'select-handle');\n\n\t\tif ($handle)\n\t\t{\n\t\t\t$handle.removeData('select-item');\n\t\t\tthis.removeAllListeners($handle);\n\t\t}\n\n\t\t$.removeData(item, 'select');\n\t\t$.removeData(item, 'select-handle');\n\t}\n},\n\n// Static Properties\n// =============================================================================\n\n{\n\tdefaults: {\n\t\tselectedClass: 'sel',\n\t\tmulti: false,\n\t\tallowEmpty: true,\n\t\tvertical: false,\n\t\thorizontal: false,\n\t\thandle: null,\n\t\tfilter: null,\n\t\tcheckboxMode: false,\n\t\tonSelectionChange: $.noop\n\t},\n\n\tclosestItemAxisProps: {\n\t\tx: {\n\t\t\tmidpointOffset:   'top',\n\t\t\tmidpointSizeFunc: 'outerHeight',\n\t\t\trowOffset:        'left'\n\t\t},\n\t\ty: {\n\t\t\tmidpointOffset:   'left',\n\t\t\tmidpointSizeFunc: 'outerWidth',\n\t\t\trowOffset:        'top'\n\t\t}\n\t},\n\n\tclosestItemDirectionProps: {\n\t\t'<': {\n\t\t\tstep: -1,\n\t\t\tisNextRow: function(a, b) { return (a < b); },\n\t\t\tisWrongDirection: function(a, b) { return (a > b); }\n\t\t},\n\t\t'>': {\n\t\t\tstep: 1,\n\t\t\tisNextRow: function(a, b) { return (a > b); },\n\t\t\tisWrongDirection: function(a, b) { return (a < b); }\n\t\t}\n\t}\n});\n"",""/**\n * Select Menu\n */\nGarnish.SelectMenu = Garnish.Menu.extend({\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(btn, options, settings, callback)\n\t{\n\t\t// argument mapping\n\t\tif (typeof settings == 'function')\n\t\t{\n\t\t\t// (btn, options, callback)\n\t\t\tcallback = settings;\n\t\t\tsettings = {};\n\t\t}\n\n\t\tsettings = $.extend({}, Garnish.SelectMenu.defaults, settings);\n\n\t\tthis.base(btn, options, settings, callback);\n\n\t\tthis.selected = -1;\n\t},\n\n\t/**\n\t * Build\n\t */\n\tbuild: function()\n\t{\n\t\tthis.base();\n\n\t\tif (this.selected != -1)\n\t\t{\n\t\t\tthis._addSelectedOptionClass(this.selected);\n\t\t}\n\t},\n\n\t/**\n\t * Select\n\t */\n\tselect: function(option)\n\t{\n\t\t// ignore if it's already selected\n\t\tif (option == this.selected) return;\n\n\t\tif (this.dom.ul)\n\t\t{\n\t\t\tif (this.selected != -1)\n\t\t\t{\n\t\t\t\tthis.dom.options[this.selected].className = '';\n\t\t\t}\n\n\t\t\tthis._addSelectedOptionClass(option);\n\t\t}\n\n\t\tthis.selected = option;\n\n\t\t// set the button text to the selected option\n\t\tthis.setBtnText($(this.options[option].label).text());\n\n\t\tthis.base(option);\n\t},\n\n\t/**\n\t * Add Selected Option Class\n\t */\n\t_addSelectedOptionClass: function(option)\n\t{\n\t\tthis.dom.options[option].className = 'sel';\n\t},\n\n\t/**\n\t * Set Button Text\n\t */\n\tsetBtnText: function(text)\n\t{\n\t\tthis.dom.$btnLabel.text(text);\n\t}\n\n},\n{\n\tdefaults: {\n\t\tulClass: 'menu select'\n\t}\n});\n"",""/**\n * Garnish UI toolkit\n *\n * @copyright 2013 Pixel & Tonic, Inc.. All rights reserved.\n * @author    Brandon Kelly <brandon@pixelandtonic.com>\n * @version   0.1.9\n * @license   MIT\n */\n(function($){\n\n/*!\r\n\tBase.js, version 1.1a\r\n\tCopyright 2006-2010, Dean Edwards\r\n\tLicense: http://www.opensource.org/licenses/mit-license.php\r\n*/\r\n\r\nvar Base = function() {\r\n\t// dummy\r\n};\r\n\r\nBase.extend = function(_instance, _static) { // subclass\r\n\tvar extend = Base.prototype.extend;\r\n\r\n\t// build the prototype\r\n\tBase._prototyping = true;\r\n\tvar proto = new this;\r\n\textend.call(proto, _instance);\r\n\tproto.base = function() {\r\n\t\t// call this method from any other method to invoke that method's ancestor\r\n\t};\r\n\tdelete Base._prototyping;\r\n\r\n\t// create the wrapper for the constructor function\r\n\t//var constructor = proto.constructor.valueOf(); //-dean\r\n\tvar constructor = proto.constructor;\r\n\tvar klass = proto.constructor = function() {\r\n\t\tif (!Base._prototyping) {\r\n\t\t\tif (this._constructing || this.constructor == klass) { // instantiation\r\n\t\t\t\tthis._constructing = true;\r\n\t\t\t\tconstructor.apply(this, arguments);\r\n\t\t\t\tdelete this._constructing;\r\n\t\t\t} else if (arguments[0] != null) { // casting\r\n\t\t\t\treturn (arguments[0].extend || extend).call(arguments[0], proto);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// build the class interface\r\n\tklass.ancestor = this;\r\n\tklass.extend = this.extend;\r\n\tklass.forEach = this.forEach;\r\n\tklass.implement = this.implement;\r\n\tklass.prototype = proto;\r\n\tklass.toString = this.toString;\r\n\tklass.valueOf = function(type) {\r\n\t\t//return (type == \""object\"") ? klass : constructor; //-dean\r\n\t\treturn (type == \""object\"") ? klass : constructor.valueOf();\r\n\t};\r\n\textend.call(klass, _static);\r\n\t// class initialisation\r\n\tif (typeof klass.init == \""function\"") klass.init();\r\n\treturn klass;\r\n};\r\n\r\nBase.prototype = {\r\n\textend: function(source, value) {\r\n\t\tif (arguments.length > 1) { // extending with a name/value pair\r\n\t\t\tvar ancestor = this[source];\r\n\t\t\tif (ancestor && (typeof value == \""function\"") && // overriding a method?\r\n\t\t\t\t// the valueOf() comparison is to avoid circular references\r\n\t\t\t\t(!ancestor.valueOf || ancestor.valueOf() != value.valueOf()) &&\r\n\t\t\t\t/\\bbase\\b/.test(value)) {\r\n\t\t\t\t// get the underlying method\r\n\t\t\t\tvar method = value.valueOf();\r\n\t\t\t\t// override\r\n\t\t\t\tvalue = function() {\r\n\t\t\t\t\tvar previous = this.base || Base.prototype.base;\r\n\t\t\t\t\tthis.base = ancestor;\r\n\t\t\t\t\tvar returnValue = method.apply(this, arguments);\r\n\t\t\t\t\tthis.base = previous;\r\n\t\t\t\t\treturn returnValue;\r\n\t\t\t\t};\r\n\t\t\t\t// point to the underlying method\r\n\t\t\t\tvalue.valueOf = function(type) {\r\n\t\t\t\t\treturn (type == \""object\"") ? value : method;\r\n\t\t\t\t};\r\n\t\t\t\tvalue.toString = Base.toString;\r\n\t\t\t}\r\n\t\t\tthis[source] = value;\r\n\t\t} else if (source) { // extending with an object literal\r\n\t\t\tvar extend = Base.prototype.extend;\r\n\t\t\t// if this object has a customised extend method then use it\r\n\t\t\tif (!Base._prototyping && typeof this != \""function\"") {\r\n\t\t\t\textend = this.extend || extend;\r\n\t\t\t}\r\n\t\t\tvar proto = {toSource: null};\r\n\t\t\t// do the \""toString\"" and other methods manually\r\n\t\t\tvar hidden = [\""constructor\"", \""toString\"", \""valueOf\""];\r\n\t\t\t// if we are prototyping then include the constructor\r\n\t\t\tvar i = Base._prototyping ? 0 : 1;\r\n\t\t\twhile (key = hidden[i++]) {\r\n\t\t\t\tif (source[key] != proto[key]) {\r\n\t\t\t\t\textend.call(this, key, source[key]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// copy each of the source object's properties to this object\r\n\t\t\tfor (var key in source) {\r\n\t\t\t\tif (!proto[key]) {\r\n\t\t\t\t\tvar desc = Object.getOwnPropertyDescriptor(source, key);\r\n\t\t\t\t\tif (typeof desc.value != typeof undefined) {\r\n\t\t\t\t\t\t// set the value normally in case it's a function that needs to be overwritten\r\n\t\t\t\t\t\textend.call(this, key, desc.value);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// set it while maintaining the original descriptor settings\r\n\t\t\t\t\t\tObject.defineProperty(this, key, desc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n};\r\n\r\n// initialise\r\nBase = Base.extend({\r\n\tconstructor: function() {\r\n\t\tthis.extend(arguments[0]);\r\n\t}\r\n}, {\r\n\tancestor: Object,\r\n\tversion: \""1.1\"",\r\n\r\n\tforEach: function(object, block, context) {\r\n\t\tfor (var key in object) {\r\n\t\t\tif (this.prototype[key] === undefined) {\r\n\t\t\t\tblock.call(context, object[key], key, object);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\timplement: function() {\r\n\t\tfor (var i = 0; i < arguments.length; i++) {\r\n\t\t\tif (typeof arguments[i] == \""function\"") {\r\n\t\t\t\t// if it's a function, call it\r\n\t\t\t\targuments[i](this.prototype);\r\n\t\t\t} else {\r\n\t\t\t\t// add the interface using the extend method\r\n\t\t\t\tthis.prototype.extend(arguments[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\ttoString: function() {\r\n\t\treturn String(this.valueOf());\r\n\t}\r\n});\r\n\n/**\n * @namespace Garnish\n */\n\n// Bail if Garnish is already defined\nif (typeof Garnish != 'undefined')\n{\n\tthrow 'Garnish is already defined!';\n}\n\n\nGarnish = {\n\n\t// jQuery objects for common elements\n\t$win: $(window),\n\t$doc: $(document),\n\t$bod: $(document.body)\n\n};\n\nGarnish.rtl = Garnish.$bod.hasClass('rtl');\nGarnish.ltr = !Garnish.rtl;\n\nGarnish = $.extend(Garnish, {\n\n\t$scrollContainer: Garnish.$win,\n\n\t// Key code constants\n\tDELETE_KEY:  8,\n\tSHIFT_KEY:  16,\n\tCTRL_KEY:   17,\n\tALT_KEY:    18,\n\tRETURN_KEY: 13,\n\tESC_KEY:    27,\n\tSPACE_KEY:  32,\n\tLEFT_KEY:   37,\n\tUP_KEY:     38,\n\tRIGHT_KEY:  39,\n\tDOWN_KEY:   40,\n\tA_KEY:      65,\n\tS_KEY:      83,\n\tCMD_KEY:    91,\n\n\t// Mouse button constants\n\tPRIMARY_CLICK:   1,\n\tSECONDARY_CLICK: 3,\n\n\t// Axis constants\n\tX_AXIS: 'x',\n\tY_AXIS: 'y',\n\n\tFX_DURATION: 100,\n\n\t// Node types\n\tTEXT_NODE: 3,\n\n\t/**\n\t * Logs a message to the browser's console, if the browser has one.\n\t *\n\t * @param string msg\n\t */\n\tlog: function(msg)\n\t{\n\t\tif (typeof console != 'undefined' && typeof console.log == 'function')\n\t\t{\n\t\t\tconsole.log(msg);\n\t\t}\n\t},\n\n\t_isMobileBrowser: null,\n\t_isMobileOrTabletBrowser: null,\n\n\t/**\n\t * Returns whether this is a mobile browser.\n\t * Detection script courtesy of http://detectmobilebrowsers.com\n\t *\n\t * Last updated: 2014-11-24\n\t *\n\t * @param bool detectTablets\n\t * @return bool\n\t */\n\tisMobileBrowser: function(detectTablets)\n\t{\n\t\tvar key = detectTablets ? '_isMobileOrTabletBrowser' : '_isMobileBrowser';\n\n\t\tif (Garnish[key] === null)\n\t\t{\n\t\t\tvar a = navigator.userAgent || navigator.vendor || window.opera;\n\t\t\tGarnish[key] = ((new RegExp('(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino'+(detectTablets ? '|android|ipad|playbook|silk' : ''), 'i')).test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4)));\n\t\t}\n\n\t\treturn Garnish[key];\n\t},\n\n\t/**\n\t * Returns whether a variable is an array.\n\t *\n\t * @param mixed val\n\t * @return bool\n\t */\n\tisArray: function(val)\n\t{\n\t\treturn (val instanceof Array);\n\t},\n\n\t/**\n\t * Returns whether a variable is a jQuery collection.\n\t *\n\t * @param mixed val\n\t * @return bool\n\t */\n\tisJquery: function(val)\n\t{\n\t\treturn (val instanceof jQuery);\n\t},\n\n\t/**\n\t * Returns whether a variable is a string.\n\t *\n\t * @param mixed val\n\t * @return bool\n\t */\n\tisString: function(val)\n\t{\n\t\treturn (typeof val == 'string');\n\t},\n\n\t/**\n\t * Returns whether an element has an attribute.\n\t *\n\t * @see http://stackoverflow.com/questions/1318076/jquery-hasattr-checking-to-see-if-there-is-an-attribute-on-an-element/1318091#1318091\n\t */\n\thasAttr: function(elem, attr)\n\t{\n\t\tvar val = $(elem).attr(attr);\n\t\treturn (typeof val != 'undefined' && val !== false);\n\t},\n\n\t/**\n\t * Returns whether something is a text node.\n\t *\n\t * @param object elem\n\t * @return bool\n\t */\n\tisTextNode: function(elem)\n\t{\n\t\treturn (elem.nodeType == Garnish.TEXT_NODE);\n\t},\n\n\t/**\n\t * Returns the offset of an element within the scroll container, whether that's the window or something else\n\t */\n\tgetOffset: function(elem)\n\t{\n\t\tthis.getOffset._offset = $(elem).offset();\n\n\t\tif (Garnish.$scrollContainer[0] != Garnish.$win[0])\n\t\t{\n\t\t\tthis.getOffset._offset.top += Garnish.$scrollContainer.scrollTop();\n\t\t\tthis.getOffset._offset.left += Garnish.$scrollContainer.scrollLeft();\n\t\t}\n\n\t\treturn this.getOffset._offset;\n\t},\n\n\t/**\n\t * Returns the distance between two coordinates.\n\t *\n\t * @param int x1 The first coordinate's X position.\n\t * @param int y1 The first coordinate's Y position.\n\t * @param int x2 The second coordinate's X position.\n\t * @param int y2 The second coordinate's Y position.\n\t * @return float\n\t */\n\tgetDist: function(x1, y1, x2, y2)\n\t{\n\t\treturn Math.sqrt(Math.pow(x1-x2, 2) + Math.pow(y1-y2, 2));\n\t},\n\n\t/**\n\t * Returns whether an element is touching an x/y coordinate.\n\t *\n\t * @param int    x    The coordinate's X position.\n\t * @param int    y    The coordinate's Y position.\n\t * @param object elem Either an actual element or a jQuery collection.\n\t * @return bool\n\t */\n\thitTest: function(x, y, elem)\n\t{\n\t\tGarnish.hitTest._$elem = $(elem);\n\t\tGarnish.hitTest._offset = Garnish.hitTest._$elem.offset();\n\t\tGarnish.hitTest._x1 = Garnish.hitTest._offset.left;\n\t\tGarnish.hitTest._y1 = Garnish.hitTest._offset.top;\n\t\tGarnish.hitTest._x2 = Garnish.hitTest._x1 + Garnish.hitTest._$elem.outerWidth();\n\t\tGarnish.hitTest._y2 = Garnish.hitTest._y1 + Garnish.hitTest._$elem.outerHeight();\n\n\t\treturn (x >= Garnish.hitTest._x1 && x < Garnish.hitTest._x2 && y >= Garnish.hitTest._y1 && y < Garnish.hitTest._y2);\n\t},\n\n\t/**\n\t * Returns whether the cursor is touching an element.\n\t *\n\t * @param object ev   The mouse event object containing pageX and pageY properties.\n\t * @param object elem Either an actual element or a jQuery collection.\n\t * @return bool\n\t */\n\tisCursorOver: function(ev, elem)\n\t{\n\t\treturn Garnish.hitTest(ev.pageX, ev.pageY, elem);\n\t},\n\n\t/**\n\t * Copies text styles from one element to another.\n\t *\n\t * @param object source The source element. Can be either an actual element or a jQuery collection.\n\t * @param object target The target element. Can be either an actual element or a jQuery collection.\n\t */\n\tcopyTextStyles: function(source, target)\n\t{\n\t\tvar $source = $(source),\n\t\t\t$target = $(target);\n\n\t\t$target.css({\n\t\t\tfontFamily:    $source.css('fontFamily'),\n\t\t\tfontSize:      $source.css('fontSize'),\n\t\t\tfontWeight:    $source.css('fontWeight'),\n\t\t\tletterSpacing: $source.css('letterSpacing'),\n\t\t\tlineHeight:    $source.css('lineHeight'),\n\t\t\ttextAlign:     $source.css('textAlign'),\n\t\t\ttextIndent:    $source.css('textIndent'),\n\t\t\twhiteSpace:    $source.css('whiteSpace'),\n\t\t\twordSpacing:   $source.css('wordSpacing'),\n\t\t\twordWrap:      $source.css('wordWrap')\n\t\t});\n\t},\n\n\t/**\n\t * Returns the body's real scrollTop, discarding any window banding in Safari.\n\t *\n\t * @return int\n\t */\n\tgetBodyScrollTop: function()\n\t{\n\t\tGarnish.getBodyScrollTop._scrollTop = document.body.scrollTop;\n\n\t\tif (Garnish.getBodyScrollTop._scrollTop < 0)\n\t\t{\n\t\t\tGarnish.getBodyScrollTop._scrollTop = 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tGarnish.getBodyScrollTop._maxScrollTop = Garnish.$bod.outerHeight() - Garnish.$win.height();\n\n\t\t\tif (Garnish.getBodyScrollTop._scrollTop > Garnish.getBodyScrollTop._maxScrollTop)\n\t\t\t{\n\t\t\t\tGarnish.getBodyScrollTop._scrollTop = Garnish.getBodyScrollTop._maxScrollTop;\n\t\t\t}\n\t\t}\n\n\t\treturn Garnish.getBodyScrollTop._scrollTop;\n\t},\n\n\trequestAnimationFrame: (\n\t\tfunction()\n\t\t{\n\t\t\tvar raf = (\n\t\t\t\twindow.requestAnimationFrame ||\n\t\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\t\tfunction(fn){ return window.setTimeout(fn, 20); }\n\t\t\t);\n\n\t\t\treturn function(fn){ return raf(fn); };\n\t\t}\n\t)(),\n\n\tcancelAnimationFrame: (\n\t\tfunction()\n\t\t{\n\t\t\tvar cancel = (\n\t\t\t\twindow.cancelAnimationFrame ||\n\t\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\t\twindow.clearTimeout\n\t\t\t);\n\n\t\t\treturn function(id){ return cancel(id); };\n\t\t}\n\t)(),\n\n\t/**\n\t * Scrolls a container element to an element within it.\n\t *\n\t * @param object container Either an actual element or a jQuery collection.\n\t * @param object elem      Either an actual element or a jQuery collection.\n\t */\n\tscrollContainerToElement: function(container, elem)\n\t{\n\t\tif (typeof elem === typeof undefined)\n\t\t{\n\t\t\tvar $elem = $(container);\n\t\t\t\t$container = $elem.scrollParent();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar $container = $(container),\n\t\t\t\t$elem = $(elem);\n\t\t}\n\n\t\tif ($container.prop('nodeName') === 'HTML' || $container[0] == Garnish.$doc[0])\n\t\t{\n\t\t\t$container = Garnish.$win;\n\t\t}\n\n\t\tvar scrollTop = $container.scrollTop(),\n\t\t\telemOffset = $elem.offset().top;\n\n\t\tif ($container[0] == window)\n\t\t{\n\t\t\tvar elemScrollOffset = elemOffset - scrollTop;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar elemScrollOffset = elemOffset - $container.offset().top;\n\t\t}\n\n\t\tvar targetScrollTop = false;\n\n\t\t// Is the element above the fold?\n\t\tif (elemScrollOffset < 0)\n\t\t{\n\t\t\ttargetScrollTop = scrollTop + elemScrollOffset - 10;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar elemHeight = $elem.outerHeight(),\n\t\t\t\tcontainerHeight = ($container[0] == window ? window.innerHeight : $container[0].clientHeight);\n\n\t\t\t// Is it below the fold?\n\t\t\tif (elemScrollOffset + elemHeight > containerHeight)\n\t\t\t{\n\t\t\t\ttargetScrollTop = scrollTop + (elemScrollOffset - (containerHeight - elemHeight)) + 10;\n\t\t\t}\n\t\t}\n\n\t\tif (targetScrollTop !== false)\n\t\t{\n\t\t\t// Velocity only allows you to scroll to an arbitrary position if you're scrolling the main window\n\t\t\tif ($container[0] == window)\n\t\t\t{\n\t\t\t\t$('html').velocity('scroll', {\n\t\t\t\t\toffset: targetScrollTop+'px',\n\t\t\t\t\tmobileHA: false\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$container.scrollTop(targetScrollTop);\n\t\t\t}\n\t\t}\n\t},\n\n\tSHAKE_STEPS: 10,\n\tSHAKE_STEP_DURATION: 25,\n\n\t/**\n\t * Shakes an element.\n\t *\n\t * @param mixed  elem Either an actual element or a jQuery collection.\n\t * @param string prop The property that should be adjusted (default is 'margin-left').\n\t */\n\tshake: function(elem, prop)\n\t{\n\t\tvar $elem = $(elem);\n\n\t\tif (!prop)\n\t\t{\n\t\t\tprop = 'margin-left';\n\t\t}\n\n\t\tvar startingPoint = parseInt($elem.css(prop));\n\t\tif (isNaN(startingPoint))\n\t\t{\n\t\t\tstartingPoint = 0;\n\t\t}\n\n\t\tfor (var i = 0; i <= Garnish.SHAKE_STEPS; i++)\n\t\t{\n\t\t\t(function(i)\n\t\t\t{\n\t\t\t\tsetTimeout(function()\n\t\t\t\t{\n\t\t\t\t\tGarnish.shake._properties = {};\n\t\t\t\t\tGarnish.shake._properties[prop] = startingPoint + (i % 2 ? -1 : 1) * (10-i);\n\t\t\t\t\t$elem.velocity(Garnish.shake._properties, Garnish.SHAKE_STEP_DURATION);\n\t\t\t\t}, (Garnish.SHAKE_STEP_DURATION * i));\n\t\t\t})(i);\n\t\t}\n\t},\n\n\t/**\n\t * Returns the first element in an array or jQuery collection.\n\t *\n\t * @param mixed elem\n\t * @return mixed\n\t */\n\tgetElement: function(elem)\n\t{\n\t\treturn $.makeArray(elem)[0];\n\t},\n\n\t/**\n\t * Returns the beginning of an input's name= attribute value with any [bracktes] stripped out.\n\t *\n\t * @param object elem\n\t * @return string|null\n\t */\n\tgetInputBasename: function(elem)\n\t{\n\t\tvar name = $(elem).attr('name');\n\n\t\tif (name)\n\t\t{\n\t\t\treturn name.replace(/\\[.*/, '');\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t},\n\n\t/**\n\t * Returns an input's value as it would be POSTed.\n\t * So unchecked checkboxes and radio buttons return null,\n\t * and multi-selects whose name don't end in \""[]\"" only return the last selection\n\t *\n\t * @param jQuery $input\n\t * @return mixed\n\t */\n\tgetInputPostVal: function($input)\n\t{\n\t\tvar type = $input.attr('type'),\n\t\t\tval  = $input.val();\n\n\t\t// Is this an unchecked checkbox or radio button?\n\t\tif ((type == 'checkbox' || type == 'radio'))\n\t\t{\n\t\t\tif ($input.prop('checked'))\n\t\t\t{\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any array values whose input name doesn't end in \""[]\""\n\t\t//  - e.g. a multi-select\n\t\telse if (Garnish.isArray(val) && $input.attr('name').substr(-2) != '[]')\n\t\t{\n\t\t\tif (val.length)\n\t\t\t{\n\t\t\t\treturn val[val.length-1];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Just return the value\n\t\telse\n\t\t{\n\t\t\treturn val;\n\t\t}\n\t},\n\n\t/**\n\t * Returns the inputs within a container\n\t *\n\t * @param mixed container The container element. Can be either an actual element or a jQuery collection.\n\t * @return jQuery\n\t */\n\tfindInputs: function(container)\n\t{\n\t\treturn $(container).find('input,text,textarea,select,button');\n\t},\n\n\t/**\n\t * Returns the post data within a container.\n\t *\n\t * @param mixed container\n\t * @return array\n\t */\n\tgetPostData: function(container)\n\t{\n\t\tvar postData = {},\n\t\t\tarrayInputCounters = {},\n\t\t\t$inputs = Garnish.findInputs(container);\n\n\t\tfor (var i = 0; i < $inputs.length; i++)\n\t\t{\n\t\t\tvar $input = $inputs.eq(i);\n\n\t\t\tif ($input.prop('disabled'))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar inputName = $input.attr('name');\n\t\t\tif (!inputName)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar inputVal = Garnish.getInputPostVal($input);\n\t\t\tif (inputVal === null)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar isArrayInput = (inputName.substr(-2) == '[]');\n\n\t\t\tif (isArrayInput)\n\t\t\t{\n\t\t\t\t// Get the cropped input name\n\t\t\t\tvar croppedName = inputName.substring(0, inputName.length-2);\n\n\t\t\t\t// Prep the input counter\n\t\t\t\tif (typeof arrayInputCounters[croppedName] == 'undefined')\n\t\t\t\t{\n\t\t\t\t\tarrayInputCounters[croppedName] = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!Garnish.isArray(inputVal))\n\t\t\t{\n\t\t\t\tinputVal = [inputVal];\n\t\t\t}\n\n\t\t\tfor (var j = 0; j < inputVal.length; j++)\n\t\t\t{\n\t\t\t\tif (isArrayInput)\n\t\t\t\t{\n\t\t\t\t\tvar inputName = croppedName+'['+arrayInputCounters[croppedName]+']';\n\t\t\t\t\tarrayInputCounters[croppedName]++;\n\t\t\t\t}\n\n\t\t\t\tpostData[inputName] = inputVal[j];\n\t\t\t}\n\t\t}\n\n\t\treturn postData;\n\t},\n\n\tcopyInputValues: function(source, target)\n\t{\n\t\tvar $sourceInputs = Garnish.findInputs(source),\n\t\t\t$targetInputs = Garnish.findInputs(target);\n\n\t\tfor (var i = 0; i < $sourceInputs.length; i++)\n\t\t{\n\t\t\tif (typeof $targetInputs[i] == typeof undefined)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$targetInputs.eq(i).val(\n\t\t\t\t$sourceInputs.eq(i).val()\n\t\t\t);\n\t\t}\n\t},\n\n\t/**\n\t * Returns whether the \""Ctrl\"" key is pressed (or ⌘ if this is a Mac) for a given keyboard event\n\t *\n\t * @param ev The keyboard event\n\t *\n\t * @return boolean Whether the \""Ctrl\"" key is pressed\n\t */\n\tisCtrlKeyPressed: function(ev)\n\t{\n\t\tif (window.navigator.platform.match(/Mac/))\n\t\t{\n\t\t\t// metaKey maps to ⌘ on Macs\n\t\t\treturn ev.metaKey;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Both altKey and ctrlKey == true on some Windows keyboards when the right-hand ALT key is pressed\n\t\t\t// so just be safe and make sure altKey == false\n\t\t\treturn (ev.ctrlKey && !ev.altKey);\n\t\t}\n\t}\n});\n\n\n/**\n * Garnish base class\n */\nGarnish.Base = Base.extend({\n\n\tsettings: null,\n\n\t_eventHandlers: null,\n\t_namespace: null,\n\t_$listeners: null,\n\t_disabled: false,\n\n\tconstructor: function()\n\t{\n\t\tthis._eventHandlers = [];\n\t\tthis._namespace = '.Garnish'+Math.floor(Math.random()*1000000000);\n\t\tthis._listeners = [];\n\t\tthis.init.apply(this, arguments);\n\t},\n\n\tinit: $.noop,\n\n\tsetSettings: function(settings, defaults)\n\t{\n\t\tvar baseSettings = (typeof this.settings == 'undefined' ? {} : this.settings);\n\t\tthis.settings = $.extend({}, baseSettings, defaults, settings);\n\t},\n\n\ton: function(events, data, handler)\n\t{\n\t\tif (typeof data == 'function')\n\t\t{\n\t\t\thandler = data;\n\t\t\tdata = {};\n\t\t}\n\n\t\tvar events = this._normalizeEvents(events);\n\n\t\tfor (var i = 0; i < events.length; i++)\n\t\t{\n\t\t\tvar ev = events[i];\n\n\t\t\tthis._eventHandlers.push({\n\t\t\t\ttype: ev[0],\n\t\t\t\tnamespace: ev[1],\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler\n\t\t\t});\n\t\t}\n\t},\n\n\toff: function(events, handler)\n\t{\n\t\tvar events = this._normalizeEvents(events);\n\n\t\tfor (var i = 0; i < events.length; i++)\n\t\t{\n\t\t\tvar ev = events[i];\n\n\t\t\tfor (var j = this._eventHandlers.length - 1; j >= 0; j--)\n\t\t\t{\n\t\t\t\tvar eventHandler = this._eventHandlers[j];\n\n\t\t\t\tif (eventHandler.type == ev[0] && (!ev[1] || eventHandler.namespace == ev[1]) && eventHandler.handler === handler)\n\t\t\t\t{\n\t\t\t\t\tthis._eventHandlers.splice(j, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\ttrigger: function(type, data)\n\t{\n\t\tvar ev = {\n\t\t\ttype: type,\n\t\t\ttarget: this\n\t\t};\n\n\t\tif (typeof params == 'undefined')\n\t\t{\n\t\t\tparams = [];\n\t\t}\n\n\t\tfor (var i = 0; i < this._eventHandlers.length; i++)\n\t\t{\n\t\t\tvar handler = this._eventHandlers[i];\n\n\t\t\tif (handler.type == type)\n\t\t\t{\n\t\t\t\tvar _ev = $.extend({ data: handler.data }, data, ev);\n\t\t\t\thandler.handler(_ev)\n\t\t\t}\n\t\t}\n\t},\n\n\t_normalizeEvents: function(events)\n\t{\n\t\tif (typeof events == 'string')\n\t\t{\n\t\t\tevents = events.split(' ');\n\t\t}\n\n\t\tfor (var i = 0; i < events.length; i++)\n\t\t{\n\t\t\tif (typeof events[i] == 'string')\n\t\t\t{\n\t\t\t\tevents[i] = events[i].split('.');\n\t\t\t}\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_splitEvents: function(events)\n\t{\n\t\tif (typeof events == 'string')\n\t\t{\n\t\t\tevents = events.split(',');\n\n\t\t\tfor (var i = 0; i < events.length; i++)\n\t\t\t{\n\t\t\t\tevents[i] = $.trim(events[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_formatEvents: function(events)\n\t{\n\t\tvar events = this._splitEvents(events).slice(0);\n\n\t\tfor (var i = 0; i < events.length; i++)\n\t\t{\n\t\t\tevents[i] += this._namespace;\n\t\t}\n\n\t\treturn events.join(' ');\n\t},\n\n\taddListener: function(elem, events, data, func)\n\t{\n\t\tvar $elem = $(elem);\n\n\t\t// Ignore if there aren't any elements\n\t\tif (!$elem.length)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tevents = this._splitEvents(events);\n\n\t\t// Param mapping\n\t\tif (typeof func == typeof undefined && typeof data != 'object')\n\t\t{\n\t\t\t// (elem, events, func)\n\t\t\tfunc = data;\n\t\t\tdata = {};\n\t\t}\n\n\t\tif (typeof func == 'function')\n\t\t{\n\t\t\tfunc = $.proxy(func, this);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfunc = $.proxy(this, func);\n\t\t}\n\n\t\t$elem.on(this._formatEvents(events), data, $.proxy(function()\n\t\t{\n\t\t\tif (!this._disabled)\n\t\t\t{\n\t\t\t\tfunc.apply(this, arguments);\n\t\t\t}\n\t\t}, this));\n\n\t\t// Remember that we're listening to this element\n\t\tif ($.inArray(elem, this._listeners) == -1)\n\t\t{\n\t\t\tthis._listeners.push(elem);\n\t\t}\n\t},\n\n\tremoveListener: function(elem, events)\n\t{\n\t\t$(elem).off(this._formatEvents(events));\n\t},\n\n\tremoveAllListeners: function(elem)\n\t{\n\t\t$(elem).off(this._namespace);\n\t},\n\n\tdisable: function()\n\t{\n\t\tthis._disabled = true;\n\t},\n\n\tenable: function()\n\t{\n\t\tthis._disabled = false;\n\t},\n\n\tdestroy: function()\n\t{\n\t\tthis.trigger('destroy');\n\t\tthis.removeAllListeners(this._listeners);\n\t}\n});\n\n// Custom events\n// -----------------------------------------------------------------------------\n\nvar erd;\n\nfunction getErd()\n{\n\tif (typeof erd == typeof undefined)\n\t{\n\t\terd = elementResizeDetectorMaker();\n\t}\n\n\treturn erd;\n}\n\nfunction triggerResizeEvent(elem) {\n\t$(elem).trigger('resize');\n};\n\n// Work them into jQuery's event system\n$.extend(jQuery.event.special, {\n\tactivate: {\n\t\tsetup: function(data, namespaces, eventHandle) {\n\t\t\tvar activateNamespace = this._namespace+'-activate';\n\t\t\tvar $elem = $(this);\n\n\t\t\t$elem.on({\n\t\t\t\t'mousedown.garnish-activate': function(e) {\n\t\t\t\t\t// Prevent buttons from getting focus on click\n\t\t\t\t\te.preventDefault();\n\t\t\t\t},\n\t\t\t\t'click.garnish-activate': function(e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (!$elem.hasClass('disabled'))\n\t\t\t\t\t{\n\t\t\t\t\t\t$elem.trigger('activate');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'keydown.garnish-activate': function(e) {\n\t\t\t\t\t// Ignore if the event was bubbled up, or if it wasn't the space key\n\t\t\t\t\tif (this != $elem[0] || e.keyCode != Garnish.SPACE_KEY) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (!$elem.hasClass('disabled'))\n\t\t\t\t\t{\n\t\t\t\t\t\t$elem.addClass('active');\n\n\t\t\t\t\t\tGarnish.$doc.on('keyup.garnish-activate', function(e) {\n\t\t\t\t\t\t\t$elem.removeClass('active');\n\n\t\t\t\t\t\t\tif (e.keyCode == Garnish.SPACE_KEY) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$elem.trigger('activate');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tGarnish.$doc.off('keyup.garnish-activate');\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!$elem.hasClass('disabled')) {\n\t\t\t\t$elem.attr('tabindex', '0');\n\t\t\t} else {\n\t\t\t\t$elem.removeAttr('tabindex');\n\t\t\t}\n\t\t},\n\t\tteardown: function() {\n\t\t\t$(this).off('.garnish-activate');\n\t\t}\n\t},\n\n\ttextchange: {\n\t\tsetup: function(data, namespaces, eventHandle) {\n\t\t\tvar $elem = $(this);\n\t\t\t$elem.data('garnish-textchange-value', $elem.val());\n\t\t\t$elem.on('keypress.garnish-textchange keyup.garnish-textchange change.garnish-textchange blur.garnish-textchange', function(e) {\n\t\t\t\tvar val = $elem.val();\n\t\t\t\tif (val != $elem.data('garnish-textchange-value'))\n\t\t\t\t{\n\t\t\t\t\t$elem.data('garnish-textchange-value', val);\n\t\t\t\t\t$elem.trigger('textchange');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tteardown: function() {\n\t\t\t$(this).off('.garnish-textchange');\n\t\t},\n\t\thandle: function(ev, data) {\n\t\t\tvar el = this;\n\t\t\tvar args = arguments;\n\t\t\tvar delay = data && typeof data.delay != typeof undefined ? data.delay : (ev.data && typeof ev.data.delay != typeof undefined ? ev.data.delay : null);\n\t\t\tvar handleObj = ev.handleObj;\n\t\t\tvar targetData = $.data(ev.target);\n\n\t\t\t// Was this event configured with a delay?\n\t\t\tif (delay) {\n\t\t\t\tif (targetData.delayTimeout) {\n\t\t\t\t\tclearTimeout(targetData.delayTimeout);\n\t\t\t\t}\n\n\t\t\t\ttargetData.delayTimeout = setTimeout(function() {\n\t\t\t\t\thandleObj.handler.apply(el, args);\n\t\t\t\t}, delay);\n\t\t\t} else {\n\t\t\t\treturn handleObj.handler.apply(el, args);\n\t\t\t}\n\t\t}\n\t},\n\n\tresize: {\n\t\tsetup: function(data, namespaces, eventHandle) {\n\t\t\t// window is the only element that natively supports a resize event\n\t\t\tif (this == window) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$('> :last-child', this).addClass('last');\n\t\t\tgetErd().listenTo(this, triggerResizeEvent)\n\t\t},\n\t\tteardown: function() {\n\t\t\tif (this == window) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tgetErd().removeListener(this, triggerResizeEvent);\n\t\t}\n\t}\n});\n\n// Give them their own element collection chaining methods\njQuery.each(['activate','textchange','resize'], function(i, name) {\n\tjQuery.fn[name] = function(data, fn) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on(name, null, data, fn) :\n\t\t\tthis.trigger(name);\n\t};\n});\n\n/**\n * Base drag class\n *\n * Does all the grunt work for manipulating elements via click-and-drag,\n * while leaving the actual element manipulation up to a subclass.\n */\nGarnish.BaseDrag = Garnish.Base.extend({\n\n\t// Properties\n\t// =========================================================================\n\n\t$items: null,\n\n\tdragging: false,\n\n\tmousedownX: null,\n\tmousedownY: null,\n\trealMouseX: null,\n\trealMouseY: null,\n\tmouseX: null,\n\tmouseY: null,\n\tmouseDistX: null,\n\tmouseDistY: null,\n\tmouseOffsetX: null,\n\tmouseOffsetY: null,\n\n\t$targetItem: null,\n\n\tscrollProperty: null,\n\tscrollAxis: null,\n\tscrollDist: null,\n\tscrollProxy: null,\n\tscrollFrame: null,\n\n\t_: null,\n\n\t// Public methods\n\t// =========================================================================\n\n\t/**\n\t * Constructor\n\t *\n\t * @param mixed  items    Elements that should be draggable right away. (Can be skipped.)\n\t * @param object settings Any settings that should override the defaults.\n\t */\n\tinit: function(items, settings)\n\t{\n\t\t// Param mapping\n\t\tif (typeof settings == typeof undefined && $.isPlainObject(items))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = items;\n\t\t\titems = null;\n\t\t}\n\n\t\tthis.settings = $.extend({}, Garnish.BaseDrag.defaults, settings);\n\n\t\tthis.$items = $();\n\t\tthis._ = {};\n\n\t\tif (items)\n\t\t{\n\t\t\tthis.addItems(items);\n\t\t}\n\t},\n\n\t/**\n\t * Returns whether dragging is allowed right now.\n\t */\n\tallowDragging: function()\n\t{\n\t\treturn true;\n\t},\n\n\t/**\n\t * Start Dragging\n\t */\n\tstartDragging: function()\n\t{\n\t\tthis.dragging = true;\n\t\tthis.onDragStart();\n\t},\n\n\t/**\n\t * Drag\n\t */\n\tdrag: function(didMouseMove)\n\t{\n\t\tif (didMouseMove)\n\t\t{\n\t\t\t// Is the mouse up against one of the window edges?\n\t\t\tthis.drag._scrollProperty = null;\n\n\t\t\tif (this.settings.axis != Garnish.X_AXIS)\n\t\t\t{\n\t\t\t\t// Scrolling up?\n\t\t\t\tthis.drag._winScrollTop = Garnish.$win.scrollTop();\n\t\t\t\tthis.drag._minMouseScrollY = this.drag._winScrollTop + Garnish.BaseDrag.windowScrollTargetSize;\n\n\t\t\t\tif (this.mouseY < this.drag._minMouseScrollY)\n\t\t\t\t{\n\t\t\t\t\tthis.drag._scrollProperty = 'scrollTop';\n\t\t\t\t\tthis.drag._scrollAxis = 'Y';\n\t\t\t\t\tthis.drag._scrollDist = Math.round((this.mouseY - this.drag._minMouseScrollY) / 2);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Scrolling down?\n\t\t\t\t\tthis.drag._maxMouseScrollY = this.drag._winScrollTop + Garnish.$win.height() - Garnish.BaseDrag.windowScrollTargetSize;\n\n\t\t\t\t\tif (this.mouseY > this.drag._maxMouseScrollY)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.drag._scrollProperty = 'scrollTop';\n\t\t\t\t\t\tthis.drag._scrollAxis = 'Y';\n\t\t\t\t\t\tthis.drag._scrollDist = Math.round((this.mouseY - this.drag._maxMouseScrollY) / 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.drag._scrollProperty && this.settings.axis != Garnish.Y_AXIS)\n\t\t\t{\n\t\t\t\t// Scrolling left?\n\t\t\t\tthis.drag._winScrollLeft = Garnish.$win.scrollLeft();\n\t\t\t\tthis.drag._minMouseScrollX = this.drag._winScrollLeft + Garnish.BaseDrag.windowScrollTargetSize;\n\n\t\t\t\tif (this.mouseX < this.drag._minMouseScrollX)\n\t\t\t\t{\n\t\t\t\t\tthis.drag._scrollProperty = 'scrollLeft';\n\t\t\t\t\tthis.drag._scrollAxis = 'X';\n\t\t\t\t\tthis.drag._scrollDist = Math.round((this.mouseX - this.drag._minMouseScrollX) / 2);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Scrolling right?\n\t\t\t\t\tthis.drag._maxMouseScrollX = this.drag._winScrollLeft + Garnish.$win.width() - Garnish.BaseDrag.windowScrollTargetSize;\n\n\t\t\t\t\tif (this.mouseX > this.drag._maxMouseScrollX)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.drag._scrollProperty = 'scrollLeft';\n\t\t\t\t\t\tthis.drag._scrollAxis = 'X';\n\t\t\t\t\t\tthis.drag._scrollDist = Math.round((this.mouseX - this.drag._maxMouseScrollX) / 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.drag._scrollProperty)\n\t\t\t{\n\t\t\t\t// Are we starting to scroll now?\n\t\t\t\tif (!this.scrollProperty)\n\t\t\t\t{\n\t\t\t\t\tif (!this.scrollProxy)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.scrollProxy = $.proxy(this, '_scrollWindow');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.scrollFrame)\n\t\t\t\t\t{\n\t\t\t\t\t\tGarnish.cancelAnimationFrame(this.scrollFrame);\n\t\t\t\t\t\tthis.scrollFrame = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.scrollFrame = Garnish.requestAnimationFrame(this.scrollProxy);\n\t\t\t\t}\n\n\t\t\t\tthis.scrollProperty = this.drag._scrollProperty;\n\t\t\t\tthis.scrollAxis = this.drag._scrollAxis;\n\t\t\t\tthis.scrollDist = this.drag._scrollDist;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._cancelWindowScroll();\n\t\t\t}\n\t\t}\n\n\t\tthis.onDrag();\n\t},\n\n\t/**\n\t * Stop Dragging\n\t */\n\tstopDragging: function()\n\t{\n\t\tthis.dragging = false;\n\t\tthis.onDragStop();\n\n\t\t// Clear the scroll animation\n\t\tthis._cancelWindowScroll();\n\t},\n\n\t/**\n\t * Add Items\n\t *\n\t * @param mixed items Elements that should be draggable.\n\t */\n\taddItems: function(items)\n\t{\n\t\titems = $.makeArray(items);\n\n\t\tfor (var i = 0; i < items.length; i++)\n\t\t{\n\t\t\tvar item = items[i];\n\n\t\t\t// Make sure this element doesn't belong to another dragger\n\t\t\tif ($.data(item, 'drag'))\n\t\t\t{\n\t\t\t\tGarnish.log('Element was added to more than one dragger');\n\t\t\t\t$.data(item, 'drag').removeItems(item);\n\t\t\t}\n\n\t\t\t// Add the item\n\t\t\t$.data(item, 'drag', this);\n\n\t\t\t// Add the listener\n\t\t\tthis.addListener(item, 'mousedown', '_handleMouseDown');\n\t\t}\n\n\t\tthis.$items = this.$items.add(items);\n\t},\n\n\t/**\n\t * Remove Items\n\t *\n\t * @param mixed items Elements that should no longer be draggable.\n\t */\n\tremoveItems: function(items)\n\t{\n\t\titems = $.makeArray(items);\n\n\t\tfor (var i = 0; i < items.length; i++)\n\t\t{\n\t\t\tvar item = items[i];\n\n\t\t\t// Make sure we actually know about this item\n\t\t\tvar index = $.inArray(item, this.$items);\n\t\t\tif (index != -1)\n\t\t\t{\n\t\t\t\tthis._deinitItem(item);\n\t\t\t\tthis.$items.splice(index, 1);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Remove All Items\n\t */\n\tremoveAllItems: function()\n\t{\n\t\tfor (var i = 0; i < this.$items.length; i++)\n\t\t{\n\t\t\tthis._deinitItem(this.$items[i]);\n\t\t}\n\n\t\tthis.$items = $();\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.removeAllItems();\n\t\tthis.base();\n\t},\n\n\t// Events\n\t// -------------------------------------------------------------------------\n\n\t/**\n\t * On Drag Start\n\t */\n\tonDragStart: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('dragStart');\n\t\t\tthis.settings.onDragStart();\n\t\t}, this));\n\t},\n\n\t/**\n\t * On Drag\n\t */\n\tonDrag: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('drag');\n\t\t\tthis.settings.onDrag();\n\t\t}, this));\n\t},\n\n\t/**\n\t * On Drag Stop\n\t */\n\tonDragStop: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('dragStop');\n\t\t\tthis.settings.onDragStop();\n\t\t}, this));\n\t},\n\n\t// Private methods\n\t// =========================================================================\n\n\t/**\n\t * Handle Mouse Down\n\t */\n\t_handleMouseDown: function(ev)\n\t{\n\t\t// Ignore right clicks\n\t\tif (ev.which != Garnish.PRIMARY_CLICK)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore if we already have a target\n\t\tif (this.$targetItem)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore if they didn't actually click on the handle\n\t\tvar $target = $(ev.target),\n\t\t\t$handle = this._getItemHandle(ev.currentTarget);\n\n\t\tif (!$target.is($handle) && !$target.closest($handle).length)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure the target isn't a button (unless the button is the handle)\n\t\tif (ev.currentTarget != ev.target && this.settings.ignoreHandleSelector)\n\t\t{\n\t\t\tif (\n\t\t\t\t$target.is(this.settings.ignoreHandleSelector) ||\n\t\t\t\t$target.closest(this.settings.ignoreHandleSelector).length\n\t\t\t)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tev.preventDefault();\n\n\t\t// Make sure that dragging is allowed right now\n\t\tif (!this.allowDragging())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Capture the target\n\t\tthis.$targetItem = $(ev.currentTarget);\n\n\t\t// Capture the current mouse position\n\t\tthis.mousedownX = this.mouseX = ev.pageX;\n\t\tthis.mousedownY = this.mouseY = ev.pageY;\n\n\t\t// Capture the difference between the mouse position and the target item's offset\n\t\tvar offset = this.$targetItem.offset();\n\t\tthis.mouseOffsetX = ev.pageX - offset.left;\n\t\tthis.mouseOffsetY = ev.pageY - offset.top;\n\n\t\t// Listen for mousemove, mouseup\n\t\tthis.addListener(Garnish.$doc, 'mousemove', '_handleMouseMove');\n\t\tthis.addListener(Garnish.$doc, 'mouseup', '_handleMouseUp');\n\t},\n\n\t_getItemHandle: function(item)\n\t{\n\t\tif (this.settings.handle)\n\t\t{\n\t\t\tif (typeof this.settings.handle == 'object')\n\t\t\t{\n\t\t\t\treturn $(this.settings.handle);\n\t\t\t}\n\n\t\t\tif (typeof this.settings.handle == 'string')\n\t\t\t{\n\t\t\t\treturn $(this.settings.handle, item);\n\t\t\t}\n\n\t\t\tif (typeof this.settings.handle == 'function')\n\t\t\t{\n\t\t\t\treturn $(this.settings.handle(item));\n\t\t\t}\n\t\t}\n\n\t\treturn $(item);\n\t},\n\n\t/**\n\t * Handle Mouse Move\n\t */\n\t_handleMouseMove: function(ev)\n\t{\n\t\tev.preventDefault();\n\n\t\tthis.realMouseX = ev.pageX;\n\t\tthis.realMouseY = ev.pageY;\n\n\t\tif (this.settings.axis != Garnish.Y_AXIS)\n\t\t{\n\t\t\tthis.mouseX = ev.pageX;\n\t\t}\n\n\t\tif (this.settings.axis != Garnish.X_AXIS)\n\t\t{\n\t\t\tthis.mouseY = ev.pageY;\n\t\t}\n\n\t\tthis.mouseDistX = this.mouseX - this.mousedownX;\n\t\tthis.mouseDistY = this.mouseY - this.mousedownY;\n\n\t\tif (!this.dragging)\n\t\t{\n\t\t\t// Has the mouse moved far enough to initiate dragging yet?\n\t\t\tthis._handleMouseMove._mouseDist = Garnish.getDist(this.mousedownX, this.mousedownY, this.realMouseX, this.realMouseY);\n\n\t\t\tif (this._handleMouseMove._mouseDist >= Garnish.BaseDrag.minMouseDist)\n\t\t\t{\n\t\t\t\tthis.startDragging();\n\t\t\t}\n\t\t}\n\n\t\tif (this.dragging)\n\t\t{\n\t\t\tthis.drag(true);\n\t\t}\n\t},\n\n\t/**\n\t * Handle Moues Up\n\t */\n\t_handleMouseUp: function(ev)\n\t{\n\t\t// Unbind the document events\n\t\tthis.removeAllListeners(Garnish.$doc);\n\n\t\tif (this.dragging)\n\t\t{\n\t\t\tthis.stopDragging();\n\t\t}\n\n\t\tthis.$targetItem = null;\n\t},\n\n\t/**\n\t * Scroll Window\n\t */\n\t_scrollWindow: function()\n\t{\n\t\tthis._.scrollPos = Garnish.$scrollContainer[this.scrollProperty]();\n\t\tGarnish.$scrollContainer[this.scrollProperty](this._.scrollPos + this.scrollDist);\n\n\t\tthis['mouse'+this.scrollAxis] -= this._.scrollPos - Garnish.$scrollContainer[this.scrollProperty]();\n\t\tthis['realMouse'+this.scrollAxis] = this['mouse'+this.scrollAxis];\n\n\t\tthis.drag();\n\n\t\tthis.scrollFrame = Garnish.requestAnimationFrame(this.scrollProxy);\n\t},\n\n\t/**\n\t * Cancel Window Scroll\n\t */\n\t_cancelWindowScroll: function()\n\t{\n\t\tif (this.scrollFrame)\n\t\t{\n\t\t\tGarnish.cancelAnimationFrame(this.scrollFrame);\n\t\t\tthis.scrollFrame = null;\n\t\t}\n\n\t\tthis.scrollProperty = null;\n\t\tthis.scrollAxis = null;\n\t\tthis.scrollDist = null;\n\t},\n\n\t/**\n\t * Deinitialize an item.\n\t */\n\t_deinitItem: function(item)\n\t{\n\t\tthis.removeAllListeners(item);\n\t\t$.removeData(item, 'drag');\n\t}\n},\n\n// Static Properties\n// =============================================================================\n\n{\n\tminMouseDist: 1,\n\twindowScrollTargetSize: 25,\n\n\tdefaults: {\n\t\thandle: null,\n\t\taxis: null,\n\t\tignoreHandleSelector: 'input, textarea, button, select, .btn',\n\n\t\tonDragStart: $.noop,\n\t\tonDrag:      $.noop,\n\t\tonDragStop:  $.noop\n\t}\n});\n\n\n/**\n * Checkbox select class\n */\nGarnish.CheckboxSelect = Garnish.Base.extend({\n\n\t$container: null,\n\t$all: null,\n\t$options: null,\n\n\tinit: function(container)\n\t{\n\t\tthis.$container = $(container);\n\n\t\t// Is this already a checkbox select?\n\t\tif (this.$container.data('checkboxSelect'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a checkbox select on an element');\n\t\t\tthis.$container.data('checkbox-select').destroy();\n\t\t}\n\n\t\tthis.$container.data('checkboxSelect', this);\n\n\t\tvar $checkboxes = this.$container.find('input');\n\t\tthis.$all = $checkboxes.filter('.all:first');\n\t\tthis.$options = $checkboxes.not(this.$all);\n\n\t\tthis.addListener(this.$all, 'change', 'onAllChange');\n\t},\n\n\tonAllChange: function()\n\t{\n\t\tvar isAllChecked = this.$all.prop('checked');\n\n\t\tthis.$options.prop({\n\t\t\tchecked:  isAllChecked,\n\t\t\tdisabled: isAllChecked\n\t\t});\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$container.removeData('checkboxSelect');\n\t\tthis.base();\n\t}\n});\n\n/**\n * Context Menu\n */\nGarnish.ContextMenu = Garnish.Base.extend({\n\n\t$target: null,\n\toptions: null,\n\t$menu: null,\n\tshowingMenu: false,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(target, options, settings)\n\t{\n\t\tthis.$target = $(target);\n\n\t\t// Is this already a context menu target?\n\t\tif (this.$target.data('contextmenu'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a context menu on an element');\n\t\t\tthis.$target.data('contextmenu').destroy();\n\t\t}\n\n\t\tthis.$target.data('contextmenu', this);\n\n\t\tthis.options = options;\n\t\tthis.setSettings(settings, Garnish.ContextMenu.defaults);\n\n\t\tGarnish.ContextMenu.counter++;\n\n\t\tthis.enable();\n\t},\n\n\t/**\n\t * Build Menu\n\t */\n\tbuildMenu: function()\n\t{\n\t\tthis.$menu = $('<div class=\""'+this.settings.menuClass+'\"" style=\""display: none\"" />');\n\n\t\tvar $ul = $('<ul/>').appendTo(this.$menu);\n\n\t\tfor (var i in this.options)\n\t\t{\n\t\t\tvar option = this.options[i];\n\n\t\t\tif (option == '-')\n\t\t\t{\n\t\t\t\t// Create a new <ul>\n\t\t\t\t$('<hr/>').appendTo(this.$menu);\n\t\t\t\t$ul = $('<ul/>').appendTo(this.$menu);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar $li = $('<li></li>').appendTo($ul),\n\t\t\t\t\t$a = $('<a>'+option.label+'</a>').appendTo($li);\n\n\t\t\t\tif (typeof option.onClick == 'function')\n\t\t\t\t{\n\t\t\t\t\t// maintain the current $a and options.onClick variables\n\t\t\t\t\t(function($a, onClick)\n\t\t\t\t\t{\n\t\t\t\t\t\tsetTimeout($.proxy(function(){\n\t\t\t\t\t\t\t$a.mousedown($.proxy(function(ev)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tthis.hideMenu();\n\t\t\t\t\t\t\t\t// call the onClick callback, with the scope set to the item,\n\t\t\t\t\t\t\t\t// and pass it the event with currentTarget set to the item as well\n\t\t\t\t\t\t\t\tonClick.call(this.currentTarget, $.extend(ev, { currentTarget: this.currentTarget }));\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t}, this), 1);\n\t\t\t\t\t}).call(this, $a, option.onClick);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Show Menu\n\t */\n\tshowMenu: function(ev)\n\t{\n\t\t// Ignore left mouse clicks\n\t\tif (ev.type == 'mousedown' && ev.which != Garnish.SECONDARY_CLICK)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (ev.type == 'contextmenu')\n\t\t{\n\t\t\t// Prevent the real context menu from showing\n\t\t\tev.preventDefault();\n\t\t}\n\n\t\t// Ignore if already showing\n\t\tif (this.showing && ev.currentTarget == this.currentTarget)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentTarget = ev.currentTarget;\n\n\t\tif (!this.$menu)\n\t\t{\n\t\t\tthis.buildMenu();\n\t\t}\n\n\t\tthis.$menu.appendTo(document.body);\n\t\tthis.$menu.show();\n\t\tthis.$menu.css({ left: ev.pageX+1, top: ev.pageY-4 });\n\n\t\tthis.showing = true;\n\n\t\tsetTimeout($.proxy(function()\n\t\t{\n\t\t\tthis.addListener(Garnish.$doc, 'mousedown', 'hideMenu');\n\t\t}, this), 0);\n\t},\n\n\t/**\n\t * Hide Menu\n\t */\n\thideMenu: function()\n\t{\n\t\tthis.removeListener(Garnish.$doc, 'mousedown');\n\t\tthis.$menu.hide();\n\t\tthis.showing = false;\n\t},\n\n\t/**\n\t * Enable\n\t */\n\tenable: function()\n\t{\n\t\tthis.addListener(this.$target, 'contextmenu,mousedown', 'showMenu');\n\t},\n\n\t/**\n\t * Disable\n\t */\n\tdisable: function()\n\t{\n\t\tthis.removeListener(this.$target, 'contextmenu,mousedown');\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$target.removeData('contextmenu');\n\t\tthis.base();\n\t}\n},\n{\n\tdefaults: {\n\t\tmenuClass: 'menu'\n\t},\n\tcounter: 0\n});\n\n/**\n * Drag class\n *\n * Builds on the BaseDrag class by \""picking up\"" the selceted element(s),\n * without worrying about what to do when an element is being dragged.\n */\nGarnish.Drag = Garnish.BaseDrag.extend({\n\n\t// Properties\n\t// =========================================================================\n\n\ttargetItemWidth: null,\n\ttargetItemHeight: null,\n\ttargetItemPositionInDraggee: null,\n\n\t$draggee: null,\n\n\totherItems: null,\n\ttotalOtherItems: null,\n\n\thelpers: null,\n\thelperTargets: null,\n\thelperPositions: null,\n\thelperLagIncrement: null,\n\tupdateHelperPosProxy: null,\n\tupdateHelperPosFrame: null,\n\n\tlastMouseX: null,\n\tlastMouseY: null,\n\n\t_returningHelpersToDraggees: false,\n\n\t// Public methods\n\t// =========================================================================\n\n\t/**\n\t * Constructor\n\t *\n\t * @param mixed  items    Elements that should be draggable right away. (Can be skipped.)\n\t * @param object settings Any settings that should override the defaults.\n\t */\n\tinit: function(items, settings)\n\t{\n\t\t// Param mapping\n\t\tif (typeof settings == typeof undefined && $.isPlainObject(items))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = items;\n\t\t\titems = null;\n\t\t}\n\n\t\tsettings = $.extend({}, Garnish.Drag.defaults, settings);\n\t\tthis.base(items, settings);\n\t},\n\n\t/**\n\t * Returns whether dragging is allowed right now.\n\t */\n\tallowDragging: function()\n\t{\n\t\t// Don't allow dragging if we're in the middle of animating the helpers back to the draggees\n\t\treturn !this._returningHelpersToDraggees;\n\t},\n\n\t/**\n\t * Start Dragging\n\t */\n\tstartDragging: function()\n\t{\n\t\t// Reset some things\n\t\tthis.helpers = [];\n\t\tthis.helperTargets = [];\n\t\tthis.helperPositions = [];\n\t\tthis.lastMouseX = this.lastMouseY = null;\n\n\t\t// Capture the target item's width/height\n\t\tthis.targetItemWidth  = this.$targetItem.outerWidth();\n\t\tthis.targetItemHeight = this.$targetItem.outerHeight();\n\n\t\t// Save the draggee's display style (block/table-row) so we can re-apply it later\n\t\tthis.draggeeDisplay = this.$targetItem.css('display');\n\n\t\t// Set the $draggee\n\t\tthis.setDraggee(this.findDraggee());\n\n\t\t// Create an array of all the other items\n\t\tthis.otherItems = [];\n\n\t\tfor (var i = 0; i < this.$items.length; i++)\n\t\t{\n\t\t\tvar item = this.$items[i];\n\n\t\t\tif ($.inArray(item, this.$draggee) == -1)\n\t\t\t{\n\t\t\t\tthis.otherItems.push(item);\n\t\t\t}\n\t\t};\n\n\t\tthis.totalOtherItems = this.otherItems.length;\n\n\t\t// Keep the helpers following the cursor, with a little lag to smooth it out\n\t\tif (!this.updateHelperPosProxy)\n\t\t{\n\t\t\tthis.updateHelperPosProxy = $.proxy(this, '_updateHelperPos');\n\t\t}\n\n\t\tthis.helperLagIncrement = this.helpers.length == 1 ? 0 : this.settings.helperLagIncrementDividend / (this.helpers.length-1);\n\t\tthis.updateHelperPosFrame = Garnish.requestAnimationFrame(this.updateHelperPosProxy);\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * Sets the draggee.\n\t */\n\tsetDraggee: function($draggee)\n\t{\n\t\t// Record the target item's position in the draggee\n\t\tthis.targetItemPositionInDraggee = $.inArray(this.$targetItem[0], $draggee.add(this.$targetItem[0]));\n\n\t\t// Keep the target item at the front of the list\n\t\tthis.$draggee = $([ this.$targetItem[0] ].concat($draggee.not(this.$targetItem).toArray()));\n\n\t\t// Create the helper(s)\n\t\tif (this.settings.singleHelper)\n\t\t{\n\t\t\tthis._createHelper(0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (var i = 0; i < this.$draggee.length; i++)\n\t\t\t{\n\t\t\t\tthis._createHelper(i);\n\t\t\t}\n\t\t}\n\n\t\tif (this.settings.removeDraggee)\n\t\t{\n\t\t\tthis.$draggee.hide();\n\t\t}\n\t\telse if (this.settings.collapseDraggees)\n\t\t{\n\t\t\tthis.$targetItem.css('visibility', 'hidden');\n\t\t\tthis.$draggee.not(this.$targetItem).hide();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$draggee.css('visibility', 'hidden');\n\t\t}\n\t},\n\n\t/**\n\t * Appends additional items to the draggee.\n\t */\n\tappendDraggee: function($newDraggee)\n\t{\n\t\tif (!$newDraggee.length)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.settings.collapseDraggees)\n\t\t{\n\t\t\tvar oldLength = this.$draggee.length;\n\t\t}\n\n\t\tthis.$draggee = $(this.$draggee.toArray().concat($newDraggee.toArray()));\n\n\t\t// Create new helpers?\n\t\tif (!this.settings.collapseDraggees)\n\t\t{\n\t\t\tvar newLength = this.$draggee.length;\n\n\t\t\tfor (var i = oldLength; i < newLength; i++)\n\t\t\t{\n\t\t\t\tthis._createHelper(i);\n\t\t\t}\n\t\t}\n\n\t\tif (this.settings.removeDraggee || this.settings.collapseDraggees)\n\t\t{\n\t\t\t$newDraggee.hide();\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$newDraggee.css('visibility', 'hidden');\n\t\t}\n\t},\n\n\t/**\n\t * Drag\n\t */\n\tdrag: function(didMouseMove)\n\t{\n\t\t// Update the draggee's virtual midpoint\n\t\tthis.draggeeVirtualMidpointX = this.mouseX - this.mouseOffsetX + (this.targetItemWidth / 2);\n\t\tthis.draggeeVirtualMidpointY = this.mouseY - this.mouseOffsetY + (this.targetItemHeight / 2);\n\n\t\tthis.base(didMouseMove);\n\t},\n\n\t/**\n\t * Stop Dragging\n\t */\n\tstopDragging: function()\n\t{\n\t\t// Clear the helper animation\n\t\tGarnish.cancelAnimationFrame(this.updateHelperPosFrame);\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * Identifies the item(s) that are being dragged.\n\t */\n\tfindDraggee: function()\n\t{\n\t\tswitch (typeof this.settings.filter)\n\t\t{\n\t\t\tcase 'function':\n\t\t\t{\n\t\t\t\treturn this.settings.filter();\n\t\t\t}\n\n\t\t\tcase 'string':\n\t\t\t{\n\t\t\t\treturn this.$items.filter(this.settings.filter);\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\treturn this.$targetItem;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Returns the helper’s target X position\n\t */\n\tgetHelperTargetX: function()\n\t{\n\t\treturn this.mouseX - this.mouseOffsetX;\n\t},\n\n\t/**\n\t * Returns the helper’s target Y position\n\t */\n\tgetHelperTargetY: function()\n\t{\n\t\treturn this.mouseY - this.mouseOffsetY;\n\t},\n\n\t/**\n\t * Return Helpers to Draggees\n\t */\n\treturnHelpersToDraggees: function()\n\t{\n\t\tthis._returningHelpersToDraggees = true;\n\n\t\tfor (var i = 0; i < this.helpers.length; i++)\n\t\t{\n\t\t\tvar $draggee = this.$draggee.eq(i),\n\t\t\t\t$helper = this.helpers[i];\n\n\t\t\t$draggee.css({\n\t\t\t\tdisplay:    this.draggeeDisplay,\n\t\t\t\tvisibility: 'hidden'\n\t\t\t});\n\n\t\t\tvar draggeeOffset = $draggee.offset();\n\n\t\t\tif (i == 0)\n\t\t\t{\n\t\t\t\tvar callback = $.proxy(this, '_showDraggee');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar callback = null;\n\t\t\t}\n\n\t\t\t$helper.velocity({left: draggeeOffset.left, top: draggeeOffset.top}, Garnish.FX_DURATION, callback);\n\t\t}\n\t},\n\n\t// Events\n\t// -------------------------------------------------------------------------\n\n\tonReturnHelpersToDraggees: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('returnHelpersToDraggees');\n\t\t\tthis.settings.onReturnHelpersToDraggees();\n\t\t}, this));\n\t},\n\n\t// Private methods\n\t// =========================================================================\n\n\t/**\n\t * Creates a helper.\n\t */\n\t_createHelper: function(i)\n\t{\n\t\tvar $draggee = this.$draggee.eq(i),\n\t\t\t$draggeeHelper = $draggee.clone().addClass('draghelper');\n\n\t\tif (this.settings.copyDraggeeInputValuesToHelper)\n\t\t{\n\t\t\tGarnish.copyInputValues($draggee, $draggeeHelper);\n\t\t}\n\n\t\t// Remove any name= attributes so radio buttons don't lose their values\n\t\t$draggeeHelper.find('[name]').attr('name', '');\n\n\t\t$draggeeHelper.css({\n\t\t\twidth: $draggee.width() + 1, // Prevent the brower from wrapping text if the width was actually a fraction of a pixel larger\n\t\t\theight: $draggee.height(),\n\t\t\tmargin: 0\n\t\t});\n\n\t\tif (this.settings.helper)\n\t\t{\n\t\t\tif (typeof this.settings.helper == 'function')\n\t\t\t{\n\t\t\t\t$draggeeHelper = this.settings.helper($draggeeHelper);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$draggeeHelper = $(this.settings.helper).append($draggeeHelper);\n\t\t\t}\n\t\t}\n\n\t\t$draggeeHelper.appendTo(Garnish.$bod);\n\n\t\tvar helperPos = this._getHelperTarget(i);\n\n\t\t$draggeeHelper.css({\n\t\t\tposition: 'absolute',\n\t\t\ttop: helperPos.top,\n\t\t\tleft: helperPos.left,\n\t\t\tzIndex: this.settings.helperBaseZindex + this.$draggee.length - i,\n\t\t\topacity: this.settings.helperOpacity\n\t\t});\n\n\t\tthis.helperPositions[i] = {\n\t\t\ttop:  helperPos.top,\n\t\t\tleft: helperPos.left\n\t\t};\n\n\t\tthis.helpers.push($draggeeHelper);\n\t},\n\n\t/**\n\t * Update Helper Position\n\t */\n\t_updateHelperPos: function()\n\t{\n\t\t// Has the mouse moved?\n\t\tif (this.mouseX !== this.lastMouseX || this.mouseY !== this.lastMouseY)\n\t\t{\n\t\t\t// Get the new target helper positions\n\t\t\tfor (this._updateHelperPos._i = 0; this._updateHelperPos._i < this.helpers.length; this._updateHelperPos._i++)\n\t\t\t{\n\t\t\t\tthis.helperTargets[this._updateHelperPos._i] = this._getHelperTarget(this._updateHelperPos._i);\n\t\t\t}\n\n\t\t\tthis.lastMouseX = this.mouseX;\n\t\t\tthis.lastMouseY = this.mouseY;\n\t\t}\n\n\t\t// Gravitate helpers toward their target positions\n\t\tfor (this._updateHelperPos._j = 0; this._updateHelperPos._j < this.helpers.length; this._updateHelperPos._j++)\n\t\t{\n\t\t\tthis._updateHelperPos._lag = this.settings.helperLagBase + (this.helperLagIncrement * this._updateHelperPos._j);\n\n\t\t\tthis.helperPositions[this._updateHelperPos._j] = {\n\t\t\t\tleft: this.helperPositions[this._updateHelperPos._j].left + ((this.helperTargets[this._updateHelperPos._j].left - this.helperPositions[this._updateHelperPos._j].left) / this._updateHelperPos._lag),\n\t\t\t\ttop:  this.helperPositions[this._updateHelperPos._j].top  + ((this.helperTargets[this._updateHelperPos._j].top  - this.helperPositions[this._updateHelperPos._j].top) / this._updateHelperPos._lag)\n\t\t\t};\n\n\t\t\tthis.helpers[this._updateHelperPos._j].css(this.helperPositions[this._updateHelperPos._j]);\n\t\t}\n\n\t\t// Let's do this again on the next frame!\n\t\tthis.updateHelperPosFrame = Garnish.requestAnimationFrame(this.updateHelperPosProxy);\n\t},\n\n\t/**\n\t * Get the helper position for a draggee helper\n\t */\n\t_getHelperTarget: function(i)\n\t{\n\t\treturn {\n\t\t\tleft: this.getHelperTargetX() + (this.settings.helperSpacingX * i),\n\t\t\ttop:  this.getHelperTargetY() + (this.settings.helperSpacingY * i)\n\t\t};\n\t},\n\n\t_showDraggee: function()\n\t{\n\t\t// Remove the helpers\n\t\tfor (var i = 0; i < this.helpers.length; i++)\n\t\t{\n\t\t\tthis.helpers[i].remove();\n\t\t}\n\n\t\tthis.helpers = null;\n\n\t\tthis.$draggee.show().css('visibility', 'inherit');\n\n\t\tthis.onReturnHelpersToDraggees();\n\n\t\tthis._returningHelpersToDraggees = false;\n\t}\n},\n\n// Static Properties\n// =============================================================================\n\n{\n\tdefaults: {\n\t\tfilter: null,\n\t\tsingleHelper: false,\n\t\tcollapseDraggees: false,\n\t\tremoveDraggee: false,\n\t\tcopyDraggeeInputValuesToHelper: false,\n\t\thelperOpacity: 1,\n\t\thelper: null,\n\t\thelperBaseZindex: 1000,\n\t\thelperLagBase: 1,\n\t\thelperLagIncrementDividend: 1.5,\n\t\thelperSpacingX: 5,\n\t\thelperSpacingY: 5,\n\t\tonReturnHelpersToDraggees: $.noop\n\t}\n});\n\n/**\n * Drag-and-drop class\n *\n * Builds on the Drag class by allowing you to set up \""drop targets\""\n * which the dragged elemements can be dropped onto.\n */\nGarnish.DragDrop = Garnish.Drag.extend({\n\n\t$dropTargets: null,\n\t$activeDropTarget: null,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(settings)\n\t{\n\t\tsettings = $.extend({}, Garnish.DragDrop.defaults, settings);\n\t\tthis.base(settings);\n\t},\n\n\tupdateDropTargets: function()\n\t{\n\t\tif (this.settings.dropTargets)\n\t\t{\n\t\t\tif (typeof this.settings.dropTargets == 'function')\n\t\t\t{\n\t\t\t\tthis.$dropTargets = $(this.settings.dropTargets());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.$dropTargets = $(this.settings.dropTargets);\n\t\t\t}\n\n\t\t\t// Discard if it's an empty array\n\t\t\tif (!this.$dropTargets.length)\n\t\t\t{\n\t\t\t\tthis.$dropTargets = null;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * On Drag Start\n\t */\n\tonDragStart: function()\n\t{\n\t\tthis.updateDropTargets();\n\t\tthis.$activeDropTarget = null;\n\t\tthis.base();\n\t},\n\n\t/**\n\t * On Drag\n\t */\n\tonDrag: function()\n\t{\n\t\tif (this.$dropTargets)\n\t\t{\n\t\t\tthis.onDrag._activeDropTarget = null;\n\n\t\t\t// is the cursor over any of the drop target?\n\t\t\tfor (this.onDrag._i = 0; this.onDrag._i < this.$dropTargets.length; this.onDrag._i++)\n\t\t\t{\n\t\t\t\tthis.onDrag._elem = this.$dropTargets[this.onDrag._i];\n\n\t\t\t\tif (Garnish.hitTest(this.mouseX, this.mouseY, this.onDrag._elem))\n\t\t\t\t{\n\t\t\t\t\tthis.onDrag._activeDropTarget = this.onDrag._elem;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// has the drop target changed?\n\t\t\tif (\n\t\t\t\t(this.$activeDropTarget && this.onDrag._activeDropTarget != this.$activeDropTarget[0]) ||\n\t\t\t\t(!this.$activeDropTarget && this.onDrag._activeDropTarget !== null)\n\t\t\t)\n\t\t\t{\n\t\t\t\t// was there a previous one?\n\t\t\t\tif (this.$activeDropTarget)\n\t\t\t\t{\n\t\t\t\t\tthis.$activeDropTarget.removeClass(this.settings.activeDropTargetClass);\n\t\t\t\t}\n\n\t\t\t\t// remember the new one\n\t\t\t\tif (this.onDrag._activeDropTarget)\n\t\t\t\t{\n\t\t\t\t\tthis.$activeDropTarget = $(this.onDrag._activeDropTarget).addClass(this.settings.activeDropTargetClass);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.$activeDropTarget = null;\n\t\t\t\t}\n\n\t\t\t\tthis.settings.onDropTargetChange(this.$activeDropTarget);\n\t\t\t}\n\t\t}\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * On Drag Stop\n\t */\n\tonDragStop: function()\n\t{\n\t\tif (this.$dropTargets && this.$activeDropTarget)\n\t\t{\n\t\t\tthis.$activeDropTarget.removeClass(this.settings.activeDropTargetClass);\n\t\t}\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * Fade Out Helpers\n\t */\n\tfadeOutHelpers: function()\n\t{\n\t\tfor (var i = 0; i < this.helpers.length; i++)\n\t\t{\n\t\t\t(function($draggeeHelper)\n\t\t\t{\n\t\t\t\t$draggeeHelper.velocity('fadeOut', {\n\t\t\t\t\tduration: Garnish.FX_DURATION,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\t$draggeeHelper.remove();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})(this.helpers[i]);\n\t\t}\n\t}\n},\n{\n\tdefaults: {\n\t\tdropTargets: null,\n\t\tonDropTargetChange: $.noop,\n\t\tactiveDropTargetClass: 'active'\n\t}\n});\n\n/**\n * Drag-to-move clas\n *\n * Builds on the BaseDrag class by simply moving the dragged element(s) along with the mouse.\n */\nGarnish.DragMove = Garnish.BaseDrag.extend({\n\n\tonDrag: function(items, settings)\n\t{\n\t\tthis.$targetItem.css({\n\t\t\tleft: this.mouseX - this.mouseOffsetX,\n\t\t\ttop:  this.mouseY - this.mouseOffsetY\n\t\t});\n\t}\n\n});\n\n/**\n * Drag-to-sort class\n *\n * Builds on the Drag class by allowing you to sort the elements amongst themselves.\n */\nGarnish.DragSort = Garnish.Drag.extend({\n\n\t// Properties\n\t// =========================================================================\n\n\t$heightedContainer: null,\n\t$insertion: null,\n\tinsertionVisible: false,\n\toldDraggeeIndexes: null,\n\tnewDraggeeIndexes: null,\n\tclosestItem: null,\n\n\t_midpointVersion: 0,\n\t_$prevItem: null,\n\n\t// Public methods\n\t// =========================================================================\n\n\t/**\n\t * Constructor\n\t *\n\t * @param mixed  items    Elements that should be draggable right away. (Can be skipped.)\n\t * @param object settings Any settings that should override the defaults.\n\t */\n\tinit: function(items, settings)\n\t{\n\t\t// Param mapping\n\t\tif (typeof settings == typeof undefined && $.isPlainObject(items))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = items;\n\t\t\titems = null;\n\t\t}\n\n\t\tsettings = $.extend({}, Garnish.DragSort.defaults, settings);\n\t\tthis.base(items, settings);\n\t},\n\n\t/**\n\t * Creates the insertion element.\n\t */\n\tcreateInsertion: function()\n\t{\n\t\tif (this.settings.insertion)\n\t\t{\n\t\t\tif (typeof this.settings.insertion == 'function')\n\t\t\t{\n\t\t\t\treturn $(this.settings.insertion(this.$draggee));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn $(this.settings.insertion);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Returns the helper’s target X position\n\t */\n\tgetHelperTargetX: function()\n\t{\n\t\tif (this.settings.magnetStrength != 1)\n\t\t{\n\t\t\tthis.getHelperTargetX._draggeeOffsetX = this.$draggee.offset().left;\n\t\t\treturn this.getHelperTargetX._draggeeOffsetX + ((this.mouseX - this.mouseOffsetX - this.getHelperTargetX._draggeeOffsetX) / this.settings.magnetStrength);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn this.base();\n\t\t}\n\t},\n\n\t/**\n\t * Returns the helper’s target Y position\n\t */\n\tgetHelperTargetY: function()\n\t{\n\t\tif (this.settings.magnetStrength != 1)\n\t\t{\n\t\t\tthis.getHelperTargetY._draggeeOffsetY = this.$draggee.offset().top;\n\t\t\treturn this.getHelperTargetY._draggeeOffsetY + ((this.mouseY - this.mouseOffsetY - this.getHelperTargetY._draggeeOffsetY) / this.settings.magnetStrength);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn this.base();\n\t\t}\n\t},\n\n\t/**\n\t * Returns whether the draggee can be inserted before a given item.\n\t */\n\tcanInsertBefore: function($item)\n\t{\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns whether the draggee can be inserted after a given item.\n\t */\n\tcanInsertAfter: function($item)\n\t{\n\t\treturn true;\n\t},\n\n\t// Events\n\t// -------------------------------------------------------------------------\n\n\t/**\n\t * On Drag Start\n\t */\n\tonDragStart: function()\n\t{\n\t\tthis.oldDraggeeIndexes = this._getDraggeeIndexes();\n\n\t\t// Are we supposed to be moving the target item to the front, and is it not already there?\n\t\tif (\n\t\t\tthis.settings.moveTargetItemToFront &&\n\t\t\tthis.$draggee.length > 1 &&\n\t\t\tthis._getItemIndex(this.$draggee[0]) > this._getItemIndex(this.$draggee[1])\n\t\t)\n\t\t{\n\t\t\t// Reposition the target item before the other draggee items in the DOM\n\t\t\tthis.$draggee.first().insertBefore(this.$draggee[1]);\n\t\t}\n\n\t\t// Create the insertion\n\t\tthis.$insertion = this.createInsertion();\n\t\tthis._placeInsertionWithDraggee();\n\n\t\tthis.closestItem = null;\n\t\tthis._clearMidpoints();\n\n\t\t//  Get the closest container that has a height\n\t\tif (this.settings.container)\n\t\t{\n\t\t\tthis.$heightedContainer = $(this.settings.container);\n\n\t\t\twhile (!this.$heightedContainer.height())\n\t\t\t{\n\t\t\t\tthis.$heightedContainer = this.$heightedContainer.parent();\n\t\t\t}\n\t\t}\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * On Drag\n\t */\n\tonDrag: function()\n\t{\n\t\t// If there's a container set, make sure that we're hovering over it\n\t\tif (this.$heightedContainer && !Garnish.hitTest(this.mouseX, this.mouseY, this.$heightedContainer))\n\t\t{\n\t\t\tif (this.closestItem)\n\t\t\t{\n\t\t\t\tthis.closestItem = null;\n\t\t\t\tthis._removeInsertion();\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Is there a new closest item?\n\t\t\tif (\n\t\t\t\tthis.closestItem !== (this.closestItem = this._getClosestItem()) &&\n\t\t\t\tthis.closestItem !== null\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis._updateInsertion();\n\t\t\t}\n\t\t}\n\n\t\tthis.base();\n\t},\n\n\t/**\n\t * On Drag Stop\n\t */\n\tonDragStop: function()\n\t{\n\t\tthis._removeInsertion();\n\n\t\t// Should we keep the target item where it was?\n\t\tif (!this.settings.moveTargetItemToFront && this.targetItemPositionInDraggee != 0)\n\t\t{\n\t\t\tthis.$targetItem.insertAfter(this.$draggee.eq(this.targetItemPositionInDraggee));\n\t\t}\n\n\t\t// Return the helpers to the draggees\n\t\tthis.returnHelpersToDraggees();\n\n\t\tthis.base();\n\n\t\t// Has the item actually moved?\n\t\tthis.$items = $().add(this.$items);\n\t\tthis.newDraggeeIndexes = this._getDraggeeIndexes();\n\n\t\tif (this.newDraggeeIndexes.join(',') != this.oldDraggeeIndexes.join(','))\n\t\t{\n\t\t\tthis.onSortChange();\n\t\t}\n\t},\n\n\t/**\n\t * On Insertion Point Change event\n\t */\n\tonInsertionPointChange: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('insertionPointChange');\n\t\t\tthis.settings.onInsertionPointChange();\n\t\t}, this));\n\t},\n\n\t/**\n\t * On Sort Change event\n\t */\n\tonSortChange: function()\n\t{\n\t\tGarnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.trigger('sortChange');\n\t\t\tthis.settings.onSortChange();\n\t\t}, this));\n\t},\n\n\t// Private methods\n\t// =========================================================================\n\n\t_getItemIndex: function(item)\n\t{\n\t\treturn $.inArray(item, this.$items);\n\t},\n\n\t_getDraggeeIndexes: function()\n\t{\n\t\tvar indexes = [];\n\n\t\tfor (var i = 0; i < this.$draggee.length; i++)\n\t\t{\n\t\t\tindexes.push(this._getItemIndex(this.$draggee[i]))\n\t\t}\n\n\t\treturn indexes;\n\t},\n\n\t/**\n\t * Returns the closest item to the cursor.\n\t */\n\t_getClosestItem: function()\n\t{\n\t\tthis._getClosestItem._closestItem = null;\n\n\t\t// Start by checking the draggee/insertion, if either are visible\n\t\t// ---------------------------------------------------------------------\n\n\t\tif (!this.settings.removeDraggee)\n\t\t{\n\t\t\tthis._testForClosestItem(this.$draggee[0]);\n\t\t}\n\t\telse if (this.insertionVisible)\n\t\t{\n\t\t\tthis._testForClosestItem(this.$insertion[0]);\n\t\t}\n\n\t\t// Check items before the draggee\n\t\t// ---------------------------------------------------------------------\n\n\t\tif (this._getClosestItem._closestItem) this._getClosestItem._midpoint = this._getItemMidpoint(this._getClosestItem._closestItem)\n\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._startXDist = this._getClosestItem._lastXDist = this._getClosestItem._closestItem ? Math.abs(this._getClosestItem._midpoint.x - this.draggeeVirtualMidpointX) : null;\n\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._startYDist = this._getClosestItem._lastYDist = this._getClosestItem._closestItem ? Math.abs(this._getClosestItem._midpoint.y - this.draggeeVirtualMidpointY) : null;\n\n\t\tthis._getClosestItem._$otherItem = this.$draggee.first().prev();\n\n\t\twhile (this._getClosestItem._$otherItem.length)\n\t\t{\n\t\t\t// See if we're just getting further away\n\t\t\tthis._getClosestItem._midpoint = this._getItemMidpoint(this._getClosestItem._$otherItem[0]);\n\t\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._xDist = Math.abs(this._getClosestItem._midpoint.x - this.draggeeVirtualMidpointX);\n\t\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._yDist = Math.abs(this._getClosestItem._midpoint.y - this.draggeeVirtualMidpointY);\n\n\t\t\tif (\n\t\t\t\t(this.settings.axis == Garnish.Y_AXIS || (this._getClosestItem._lastXDist !== null && this._getClosestItem._xDist > this._getClosestItem._lastXDist)) &&\n\t\t\t\t(this.settings.axis == Garnish.X_AXIS || (this._getClosestItem._lastYDist !== null && this._getClosestItem._yDist > this._getClosestItem._lastYDist))\n\t\t\t)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._lastXDist = this._getClosestItem._xDist;\n\t\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._lastYDist = this._getClosestItem._yDist;\n\n\t\t\t// Give the extending class a chance to allow/disallow this item\n\t\t\tif (this.canInsertBefore(this._getClosestItem._$otherItem))\n\t\t\t{\n\t\t\t\tthis._testForClosestItem(this._getClosestItem._$otherItem[0]);\n\t\t\t}\n\n\t\t\t// Prep the next item\n\t\t\tthis._getClosestItem._$otherItem = this._getClosestItem._$otherItem.prev();\n\t\t}\n\n\t\t// Check items after the draggee\n\t\t// ---------------------------------------------------------------------\n\n\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._lastXDist = this._getClosestItem._startXDist;\n\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._lastYDist = this._getClosestItem._startYDist;\n\n\t\tthis._getClosestItem._$otherItem = this.$draggee.last().next();\n\n\t\twhile (this._getClosestItem._$otherItem.length)\n\t\t{\n\t\t\t// See if we're just getting further away\n\t\t\tthis._getClosestItem._midpoint = this._getItemMidpoint(this._getClosestItem._$otherItem[0]);\n\t\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._xDist = Math.abs(this._getClosestItem._midpoint.x - this.draggeeVirtualMidpointX);\n\t\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._yDist = Math.abs(this._getClosestItem._midpoint.y - this.draggeeVirtualMidpointY);\n\n\t\t\tif (\n\t\t\t\t(this.settings.axis == Garnish.Y_AXIS || (this._getClosestItem._lastXDist !== null && this._getClosestItem._xDist > this._getClosestItem._lastXDist)) &&\n\t\t\t\t(this.settings.axis == Garnish.X_AXIS || (this._getClosestItem._lastYDist !== null && this._getClosestItem._yDist > this._getClosestItem._lastYDist))\n\t\t\t)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (this.settings.axis != Garnish.Y_AXIS) this._getClosestItem._lastXDist = this._getClosestItem._xDist;\n\t\t\tif (this.settings.axis != Garnish.X_AXIS) this._getClosestItem._lastYDist = this._getClosestItem._yDist;\n\n\t\t\t// Give the extending class a chance to allow/disallow this item\n\t\t\tif (this.canInsertAfter(this._getClosestItem._$otherItem))\n\t\t\t{\n\t\t\t\tthis._testForClosestItem(this._getClosestItem._$otherItem[0]);\n\t\t\t}\n\n\t\t\t// Prep the next item\n\t\t\tthis._getClosestItem._$otherItem = this._getClosestItem._$otherItem.next();\n\t\t}\n\n\t\t// Return the result\n\t\t// ---------------------------------------------------------------------\n\n\t\t// Ignore if it's the draggee or insertion\n\t\tif (\n\t\t\tthis._getClosestItem._closestItem != this.$draggee[0] &&\n\t\t\t(!this.insertionVisible || this._getClosestItem._closestItem != this.$insertion[0])\n\t\t)\n\t\t{\n\t\t\treturn this._getClosestItem._closestItem;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t},\n\n\t_clearMidpoints: function()\n\t{\n\t\tthis._midpointVersion++;\n\t\tthis._$prevItem = null;\n\t},\n\n\t_getItemMidpoint: function(item)\n\t{\n\t\tif ($.data(item, 'midpointVersion') != this._midpointVersion)\n\t\t{\n\t\t\t// If this isn't the draggee, temporarily move the draggee to this item\n\t\t\tthis._getItemMidpoint._repositionDraggee = (\n\t\t\t\t!this.settings.axis &&\n\t\t\t\t(!this.settings.removeDraggee || this.insertionVisible) &&\n\t\t\t\titem != this.$draggee[0] &&\n\t\t\t\t(!this.$insertion || item != this.$insertion.get(0))\n\t\t\t);\n\n\t\t\tif (this._getItemMidpoint._repositionDraggee)\n\t\t\t{\n\t\t\t\t// Is this the first time we've had to temporarily reposition the draggee since the last midpoint clearing?\n\t\t\t\tif (!this._$prevItem)\n\t\t\t\t{\n\t\t\t\t\tthis._$prevItem = (this.insertionVisible ? this.$insertion : this.$draggee).first().prev();\n\t\t\t\t}\n\n\t\t\t\tthis._moveDraggeeToItem(item);\n\n\t\t\t\t// Now figure out which element we're actually getting the midpoint of\n\t\t\t\tif (!this.settings.removeDraggee)\n\t\t\t\t{\n\t\t\t\t\tthis._getItemMidpoint._$item = this.$draggee;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis._getItemMidpoint._$item = this.$insertion;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// We're actually getting the midpoint of this item\n\t\t\t\tthis._getItemMidpoint._$item = $(item);\n\t\t\t}\n\n\t\t\tthis._getItemMidpoint._offset = this._getItemMidpoint._$item.offset();\n\n\t\t\t$.data(item, 'midpoint', {\n\t\t\t\tx: this._getItemMidpoint._offset.left + this._getItemMidpoint._$item.outerWidth() / 2,\n\t\t\t\ty: this._getItemMidpoint._offset.top + this._getItemMidpoint._$item.outerHeight() / 2\n\t\t\t});\n\n\t\t\t$.data(item, 'midpointVersion', this._midpointVersion);\n\n\t\t\tdelete this._getItemMidpoint._$item;\n\t\t\tdelete this._getItemMidpoint._offset;\n\n\t\t\tif (this._getItemMidpoint._repositionDraggee)\n\t\t\t{\n\t\t\t\t// Move the draggee back\n\t\t\t\tif (this._$prevItem.length)\n\t\t\t\t{\n\t\t\t\t\tthis.$draggee.insertAfter(this._$prevItem);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.$draggee.prependTo(this.$draggee.parent());\n\t\t\t\t}\n\n\t\t\t\tthis._placeInsertionWithDraggee();\n\t\t\t}\n\t\t}\n\n\t\treturn $.data(item, 'midpoint');\n\t},\n\n\t_testForClosestItem: function(item)\n\t{\n\t\tthis._testForClosestItem._midpoint = this._getItemMidpoint(item);\n\t\tthis._testForClosestItem._mouseDistX = Math.abs(this._testForClosestItem._midpoint.x - this.draggeeVirtualMidpointX);\n\t\tthis._testForClosestItem._mouseDistY = Math.abs(this._testForClosestItem._midpoint.y - this.draggeeVirtualMidpointY);\n\n\t\t// Don't even consider items that are further away on the Y axis\n\t\tif (\n\t\t\tthis._getClosestItem._closestItem === null ||\n\t\t\tthis._testForClosestItem._mouseDistY < this._getClosestItem._closestItemMouseDistY ||\n\t\t\t(\n\t\t\t\tthis._testForClosestItem._mouseDistY == this._getClosestItem._closestItemMouseDistY &&\n\t\t\t\tthis._testForClosestItem._mouseDistX <= this._getClosestItem._closestItemMouseDistX\n\t\t\t)\n\t\t)\n\t\t{\n\t\t\tthis._getClosestItem._closestItem          = item;\n\t\t\tthis._getClosestItem._closestItemMouseDistX = this._testForClosestItem._mouseDistX;\n\t\t\tthis._getClosestItem._closestItemMouseDistY = this._testForClosestItem._mouseDistY;\n\t\t}\n\t},\n\n\t/**\n\t * Updates the position of the insertion point.\n\t */\n\t_updateInsertion: function()\n\t{\n\t\tif (this.closestItem)\n\t\t{\n\t\t\tthis._moveDraggeeToItem(this.closestItem);\n\t\t}\n\n\t\t// Now that things have shifted around, invalidate the midpoints\n\t\tthis._clearMidpoints();\n\n\t\tthis.onInsertionPointChange();\n\t},\n\n\t_moveDraggeeToItem: function(item)\n\t{\n\t\t// Going down?\n\t\tif (this.$draggee.index() < $(item).index())\n\t\t{\n\t\t\tthis.$draggee.insertAfter(item);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$draggee.insertBefore(item);\n\t\t}\n\n\t\tthis._placeInsertionWithDraggee();\n\t},\n\n\t_placeInsertionWithDraggee: function()\n\t{\n\t\tif (this.$insertion)\n\t\t{\n\t\t\tthis.$insertion.insertBefore(this.$draggee.first());\n\t\t\tthis.insertionVisible = true;\n\t\t}\n\t},\n\n\t/**\n\t * Removes the insertion, if it's visible.\n\t */\n\t_removeInsertion: function()\n\t{\n\t\tif (this.insertionVisible)\n\t\t{\n\t\t\tthis.$insertion.remove();\n\t\t\tthis.insertionVisible = false;\n\t\t}\n\t}\n},\n\n// Static Properties\n// =============================================================================\n\n{\n\tdefaults: {\n\t\tcontainer: null,\n\t\tinsertion: null,\n\t\tmoveTargetItemToFront: false,\n\t\tmagnetStrength: 1,\n\t\tonInsertionPointChange: $.noop,\n\t\tonSortChange: $.noop\n\t}\n});\n\n/**\n * ESC key manager class\n */\nGarnish.EscManager = Garnish.Base.extend({\n\n\thandlers: null,\n\n\tinit: function()\n\t{\n\t\tthis.handlers = [];\n\n\t\tthis.addListener(Garnish.$bod, 'keyup', function(ev)\n\t\t{\n\t\t\tif (ev.keyCode == Garnish.ESC_KEY)\n\t\t\t{\n\t\t\t\tthis.escapeLatest(ev);\n\t\t\t}\n\t\t});\n\t},\n\n\tregister: function(obj, func)\n\t{\n\t\tthis.handlers.push({\n\t\t\tobj: obj,\n\t\t\tfunc: func\n\t\t});\n\t},\n\n\tunregister: function(obj)\n\t{\n\t\tfor (var i = this.handlers.length - 1; i >= 0; i--)\n\t\t{\n\t\t\tif (this.handlers[i].obj == obj)\n\t\t\t{\n\t\t\t\tthis.handlers.splice(i, 1);\n\t\t\t}\n\t\t}\n\t},\n\n\tescapeLatest: function(ev)\n\t{\n\t\tif (this.handlers.length)\n\t\t{\n\t\t\tvar handler = this.handlers.pop();\n\n\t\t\tif (typeof handler.func == 'function')\n\t\t\t{\n\t\t\t\tvar func = handler.func;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar func = handler.obj[handler.func];\n\t\t\t}\n\n\t\t\tfunc.call(handler.obj, ev);\n\n\t\t\tif (typeof handler.obj.trigger == 'function')\n\t\t\t{\n\t\t\t\thandler.obj.trigger('escape');\n\t\t\t}\n\t\t}\n\t}\n\n});\n\nGarnish.escManager = new Garnish.EscManager();\n\n/**\n * HUD\n */\nGarnish.HUD = Garnish.Base.extend({\n\n\t$trigger: null,\n\t$fixedTriggerParent: null,\n\t$hud: null,\n\t$tip: null,\n\t$body: null,\n\t$header: null,\n\t$footer: null,\n\t$mainContainer: null,\n\t$main: null,\n\t$shade: null,\n\n\tshowing: false,\n\torientation: null,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(trigger, bodyContents, settings) {\n\n\t\tthis.$trigger = $(trigger);\n\n\t\tthis.setSettings(settings, Garnish.HUD.defaults);\n\t\tthis.on('show', this.settings.onShow);\n\t\tthis.on('hide', this.settings.onHide);\n\t\tthis.on('submit', this.settings.onSubmit);\n\n\t\tif (typeof Garnish.HUD.activeHUDs == \""undefined\"")\n\t\t{\n\t\t\tGarnish.HUD.activeHUDs = {};\n\t\t}\n\n\t\tthis.$shade = $('<div/>', {'class': this.settings.shadeClass});\n\t\tthis.$hud = $('<div/>', {'class': this.settings.hudClass});\n\t\tthis.$tip = $('<div/>', {'class': this.settings.tipClass}).appendTo(this.$hud);\n\t\tthis.$body = $('<form/>', {'class': this.settings.bodyClass}).appendTo(this.$hud);\n\t\tthis.$mainContainer = $('<div/>', {'class': this.settings.mainContainerClass}).appendTo(this.$body);\n\t\tthis.$main = $('<div/>', {'class': this.settings.mainClass}).appendTo(this.$mainContainer);\n\n\t\tthis.updateBody(bodyContents);\n\n\t\t// See if the trigger is fixed\n\t\tvar $parent = this.$trigger;\n\n\t\tdo {\n\t\t\tif ($parent.css('position') == 'fixed')\n\t\t\t{\n\t\t\t\tthis.$fixedTriggerParent = $parent;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$parent = $parent.offsetParent();\n\t\t}\n\t\twhile ($parent.length && $parent.prop('nodeName') != 'HTML');\n\n\t\tif (this.$fixedTriggerParent)\n\t\t{\n\t\t\tthis.$hud.css('position', 'fixed');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$hud.css('position', 'absolute');\n\t\t}\n\n\t\tthis.show();\n\n\t\tthis.addListener(this.$body, 'submit', '_handleSubmit');\n\t\tthis.addListener(this.$shade, 'tap', 'hide');\n\n\t\tif (!this.$fixedTriggerParent && Garnish.$scrollContainer[0] != Garnish.$win[0])\n\t\t{\n\t\t\tthis.addListener(Garnish.$scrollContainer, 'scroll', 'updateSizeAndPosition');\n\t\t}\n\n\t\tif (this.settings.closeBtn)\n\t\t{\n\t\t\tthis.addListener(this.settings.closeBtn, 'activate', 'hide');\n\t\t}\n\n\t\tthis.addListener(Garnish.$win, 'resize', 'updateSizeAndPosition');\n\t},\n\n\t/**\n\t * Update the body contents\n\t */\n\tupdateBody: function(bodyContents)\n\t{\n\t\tthis.removeListener(this.$main, 'resize');\n\n\t\t// Cleanup\n\t\tthis.$main.html('');\n\n\t\tif (this.$header)\n\t\t{\n\t\t\tthis.$hud.removeClass('has-header');\n\t\t\tthis.$header.remove();\n\t\t\tthis.$header = null;\n\t\t}\n\n\t\tif (this.$footer)\n\t\t{\n\t\t\tthis.$hud.removeClass('has-footer');\n\t\t\tthis.$footer.remove();\n\t\t\tthis.$footer = null;\n\t\t}\n\n\t\t// Append the new body contents\n\t\tthis.$main.append(bodyContents);\n\n\t\t// Look for a header and footer\n\t\tvar $header = this.$main.find('.'+this.settings.headerClass+':first'),\n\t\t\t$footer = this.$main.find('.'+this.settings.footerClass+':first');\n\n\t\tif ($header.length)\n\t\t{\n\t\t\tthis.$header = $header.insertBefore(this.$mainContainer);\n\t\t\tthis.$hud.addClass('has-header');\n\t\t}\n\n\t\tif ($footer.length)\n\t\t{\n\t\t\tthis.$footer = $footer.insertAfter(this.$mainContainer);\n\t\t\tthis.$hud.addClass('has-footer');\n\t\t}\n\t},\n\n\t/**\n\t * Show\n\t */\n\tshow: function(ev)\n\t{\n\t\tif (ev && ev.stopPropagation)\n\t\t{\n\t\t\tev.stopPropagation();\n\t\t}\n\n\t\tif (this.showing)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.settings.closeOtherHUDs)\n\t\t{\n\t\t\tfor (var hudID in Garnish.HUD.activeHUDs)\n\t\t\t{\n\t\t\t\tGarnish.HUD.activeHUDs[hudID].hide();\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the browser from jumping\n\t\tthis.$hud.css('top', Garnish.$scrollContainer.scrollTop());\n\n\t\t// Move it to the end of <body> so it gets the highest sub-z-index\n\t\tthis.$shade.appendTo(Garnish.$bod);\n\t\tthis.$hud.appendTo(Garnish.$bod);\n\n\t\tthis.$hud.show();\n\t\tthis.updateSizeAndPosition();\n\n\t\tthis.$shade.show();\n\n\t\tthis.showing = true;\n\t\tGarnish.HUD.activeHUDs[this._namespace] = this;\n\n\t\tGarnish.escManager.register(this, 'hide');\n\n\t\tthis.onShow();\n\n\t\t// Reposition one last time just in case\n\t\tGarnish.requestAnimationFrame($.proxy(this, 'updateSizeAndPosition'));\n\n\t\tthis.enable();\n\t},\n\n\tonShow: function()\n\t{\n\t\tthis.trigger('show');\n\t},\n\n\tupdateSizeAndPosition: function()\n\t{\n\t\tthis.removeListener(this.$main, 'resize');\n\n\t\tvar windowWidth,\n\t\t\twindowHeight,\n\t\t\ttriggerWidth,\n\t\t\ttriggerHeight,\n\t\t\ttriggerOffset,\n\t\t\twindowScrollLeft,\n\t\t\twindowScrollTop,\n\t\t\tscrollContainerTriggerOffset,\n\t\t\tscrollContainerScrollLeft,\n\t\t\tscrollContainerScrollTop,\n\t\t\thudBodyWidth,\n\t\t\thudBodyHeight;\n\n\t\t// Get the window sizes and trigger offset\n\t\t// ---------------------------------------------------------------------\n\n\t\twindowWidth = Garnish.$win.width();\n\t\twindowHeight = Garnish.$win.height();\n\t\twindowScrollLeft = Garnish.$win.scrollLeft();\n\t\twindowScrollTop = Garnish.$win.scrollTop();\n\n\t\t// Get the trigger's dimensions\n\t\ttriggerWidth = this.$trigger.outerWidth();\n\t\ttriggerHeight = this.$trigger.outerHeight();\n\n\t\t// Get the offsets for each side of the trigger element\n\t\ttriggerOffset = this.$trigger.offset();\n\n\t\tif (this.$fixedTriggerParent)\n\t\t{\n\t\t\ttriggerOffset.left -= windowScrollLeft;\n\t\t\ttriggerOffset.top -= windowScrollTop;\n\n\t\t\tscrollContainerTriggerOffset = triggerOffset;\n\n\t\t\twindowScrollLeft = 0;\n\t\t\twindowScrollTop = 0;\n\t\t\tscrollContainerScrollLeft = 0;\n\t\t\tscrollContainerScrollTop = 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tscrollContainerTriggerOffset = Garnish.getOffset(this.$trigger);\n\n\t\t\tscrollContainerScrollLeft = Garnish.$scrollContainer.scrollLeft();\n\t\t\tscrollContainerScrollTop = Garnish.$scrollContainer.scrollTop();\n\t\t}\n\n\t\ttriggerOffset.right = triggerOffset.left + triggerWidth;\n\t\ttriggerOffset.bottom = triggerOffset.top + triggerHeight;\n\n\t\tscrollContainerTriggerOffset.right = scrollContainerTriggerOffset.left + triggerWidth;\n\t\tscrollContainerTriggerOffset.bottom = scrollContainerTriggerOffset.top + triggerHeight;\n\n\t\t// Get the HUD dimensions\n\t\tthis.$hud.css({\n\t\t\twidth: ''\n\t\t});\n\n\t\tthis.$mainContainer.css({\n\t\t\theight: '',\n\t\t\t'overflow-x': '',\n\t\t\t'overflow-y': ''\n\t\t});\n\n\t\thudBodyWidth = this.$body.width();\n\t\thudBodyHeight = this.$body.height();\n\n\t\t// Determine the best orientation for the HUD\n\t\t// ---------------------------------------------------------------------\n\n\t\t// Find the actual available top/right/bottom/left clearances\n\t\tvar clearances = {\n\t\t\tbottom: windowHeight + scrollContainerScrollTop - scrollContainerTriggerOffset.bottom,\n\t\t\ttop:    scrollContainerTriggerOffset.top - scrollContainerScrollTop,\n\t\t\tright:  windowWidth + scrollContainerScrollLeft - scrollContainerTriggerOffset.right,\n\t\t\tleft:   scrollContainerTriggerOffset.left - scrollContainerScrollLeft\n\t\t};\n\n\t\t// Find the first position that has enough room\n\t\tthis.orientation = null;\n\n\t\tfor (var i = 0; i < this.settings.orientations.length; i++)\n\t\t{\n\t\t\tvar orientation = this.settings.orientations[i],\n\t\t\t\trelevantSize = (orientation == 'top' || orientation == 'bottom' ? hudBodyHeight : hudBodyWidth);\n\n\t\t\tif (clearances[orientation] - (this.settings.windowSpacing + this.settings.triggerSpacing) >= relevantSize)\n\t\t\t{\n\t\t\t\t// This is the first orientation that has enough room in order of preference, so we'll go with this\n\t\t\t\tthis.orientation = orientation;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!this.orientation || clearances[orientation] > clearances[this.orientation])\n\t\t\t{\n\t\t\t\t// Use this as a fallback as it's the orientation with the most clearance so far\n\t\t\t\tthis.orientation = orientation;\n\t\t\t}\n\t\t}\n\n\t\t// Just in case...\n\t\tif (!this.orientation || $.inArray(this.orientation, ['bottom', 'top', 'right', 'left']) == -1)\n\t\t{\n\t\t\tthis.orientation = 'bottom'\n\t\t}\n\n\t\t// Update the tip class\n\t\tif (this.tipClass)\n\t\t{\n\t\t\tthis.$tip.removeClass(this.tipClass);\n\t\t}\n\n\t\tthis.tipClass = this.settings.tipClass+'-'+Garnish.HUD.tipClasses[this.orientation];\n\t\tthis.$tip.addClass(this.tipClass);\n\n\t\t// Make sure the HUD body is within the allowed size\n\t\t// ---------------------------------------------------------------------\n\n\t\tvar maxHudBodyWidth,\n\t\t\tmaxHudBodyHeight;\n\n\t\tif (this.orientation == 'top' || this.orientation == 'bottom')\n\t\t{\n\t\t\tmaxHudBodyWidth = windowWidth - this.settings.windowSpacing * 2;\n\t\t\tmaxHudBodyHeight = clearances[this.orientation] - this.settings.windowSpacing - this.settings.triggerSpacing;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmaxHudBodyWidth = clearances[this.orientation] - this.settings.windowSpacing - this.settings.triggerSpacing;\n\t\t\tmaxHudBodyHeight = windowHeight - this.settings.windowSpacing * 2;\n\t\t}\n\n\t\tif (maxHudBodyWidth < this.settings.minBodyWidth)\n\t\t{\n\t\t\tmaxHudBodyWidth = this.settings.minBodyWidth;\n\t\t}\n\n\t\tif (maxHudBodyHeight < this.settings.minBodyHeight)\n\t\t{\n\t\t\tmaxHudBodyHeight = this.settings.minBodyHeight;\n\t\t}\n\n\t\tif (hudBodyWidth > maxHudBodyWidth || hudBodyWidth < this.settings.minBodyWidth)\n\t\t{\n\t\t\tif (hudBodyWidth > maxHudBodyWidth)\n\t\t\t{\n\t\t\t\thudBodyWidth = maxHudBodyWidth;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thudBodyWidth = this.settings.minBodyWidth;\n\t\t\t}\n\n\t\t\tthis.$hud.width(hudBodyWidth);\n\n\t\t\t// Is there any overflow now?\n\t\t\tif (this.$main.outerWidth() > maxHudBodyWidth)\n\t\t\t{\n\t\t\t\tthis.$mainContainer.css('overflow-x', 'scroll');\n\t\t\t}\n\n\t\t\t// The height may have just changed\n\t\t\thudBodyHeight = this.$body.height();\n\t\t}\n\n\t\tif (hudBodyHeight > maxHudBodyHeight || hudBodyHeight < this.settings.minBodyHeight)\n\t\t{\n\t\t\tif (hudBodyHeight > maxHudBodyHeight)\n\t\t\t{\n\t\t\t\thudBodyHeight = maxHudBodyHeight;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thudBodyHeight = this.settings.minBodyHeight;\n\t\t\t}\n\n\t\t\tvar mainHeight = hudBodyHeight;\n\n\t\t\tif (this.$header)\n\t\t\t{\n\t\t\t\tmainHeight -= this.$header.outerHeight();\n\t\t\t}\n\n\t\t\tif (this.$footer)\n\t\t\t{\n\t\t\t\tmainHeight -= this.$footer.outerHeight();\n\t\t\t}\n\n\t\t\tthis.$mainContainer.height(mainHeight);\n\n\t\t\t// Is there any overflow now?\n\t\t\tif (this.$main.outerHeight() > mainHeight)\n\t\t\t{\n\t\t\t\tthis.$mainContainer.css('overflow-y', 'scroll');\n\t\t\t}\n\t\t}\n\n\t\t// Set the HUD/tip positions\n\t\t// ---------------------------------------------------------------------\n\n\t\tif (this.orientation == 'top' || this.orientation == 'bottom')\n\t\t{\n\t\t\t// Center the HUD horizontally\n\t\t\tvar maxLeft = (windowWidth + windowScrollLeft) - (hudBodyWidth + this.settings.windowSpacing),\n\t\t\t\tminLeft = (windowScrollLeft + this.settings.windowSpacing),\n\t\t\t\ttriggerCenter = triggerOffset.left + Math.round(triggerWidth / 2),\n\t\t\t\tleft = triggerCenter - Math.round(hudBodyWidth / 2);\n\n\t\t\tif (left > maxLeft) left = maxLeft;\n\t\t\tif (left < minLeft) left = minLeft;\n\n\t\t\tthis.$hud.css('left', left);\n\n\t\t\tvar tipLeft = (triggerCenter - left) - (this.settings.tipWidth / 2);\n\t\t\tthis.$tip.css({ left: tipLeft, top: '' });\n\n\t\t\tif (this.orientation == 'top')\n\t\t\t{\n\t\t\t\tvar top = triggerOffset.top - (hudBodyHeight + this.settings.triggerSpacing);\n\t\t\t\tthis.$hud.css('top', top);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar top = triggerOffset.bottom + this.settings.triggerSpacing;\n\t\t\t\tthis.$hud.css('top', top);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Center the HUD vertically\n\t\t\tvar maxTop = (windowHeight + windowScrollTop) - (hudBodyHeight + this.settings.windowSpacing),\n\t\t\t\tminTop = (windowScrollTop + this.settings.windowSpacing),\n\t\t\t\ttriggerCenter = triggerOffset.top + Math.round(triggerHeight / 2),\n\t\t\t\ttop = triggerCenter - Math.round(hudBodyHeight / 2);\n\n\t\t\tif (top > maxTop) top = maxTop;\n\t\t\tif (top < minTop) top = minTop;\n\n\t\t\tthis.$hud.css('top', top);\n\n\t\t\tvar tipTop = (triggerCenter - top) - (this.settings.tipWidth / 2);\n\t\t\tthis.$tip.css({ top: tipTop, left: '' });\n\n\n\t\t\tif (this.orientation == 'left')\n\t\t\t{\n\t\t\t\tvar left = triggerOffset.left - (hudBodyWidth + this.settings.triggerSpacing);\n\t\t\t\tthis.$hud.css('left', left);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar left = triggerOffset.right + this.settings.triggerSpacing;\n\t\t\t\tthis.$hud.css('left', left);\n\t\t\t}\n\t\t}\n\n\t\tGarnish.requestAnimationFrame($.proxy(function() {\n\t\t\tthis.addListener(this.$main, 'resize', 'updateSizeAndPosition');\n\t\t}, this));\n\t},\n\n\t/**\n\t * Hide\n\t */\n\thide: function()\n\t{\n\t\tthis.disable();\n\n\t\tthis.$hud.hide();\n\t\tthis.$shade.hide();\n\t\tthis.showing = false;\n\n\t\tdelete Garnish.HUD.activeHUDs[this._namespace];\n\n\t\tGarnish.escManager.unregister(this);\n\n\t\tthis.onHide();\n\t},\n\n\tonHide: function()\n\t{\n\t\tthis.trigger('hide');\n\t},\n\n\ttoggle: function()\n\t{\n\t\tif (this.showing)\n\t\t{\n\t\t\tthis.hide();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.show();\n\t\t}\n\t},\n\n\tsubmit: function()\n\t{\n\t\tthis.onSubmit();\n\t},\n\n\tonSubmit: function()\n\t{\n\t\tthis.trigger('submit');\n\t},\n\n\t_handleSubmit: function(ev)\n\t{\n\t\tev.preventDefault();\n\t\tthis.submit();\n\t}\n},\n{\n\ttipClasses: { bottom: 'top', top: 'bottom', right: 'left', left: 'right'},\n\n\tdefaults: {\n\t\tshadeClass: 'hud-shade',\n\t\thudClass: 'hud',\n\t\ttipClass: 'tip',\n\t\tbodyClass: 'body',\n\t\theaderClass: 'hud-header',\n\t\tfooterClass: 'hud-footer',\n\t\tmainContainerClass: 'main-container',\n\t\tmainClass: 'main',\n\t\torientations: ['bottom', 'top', 'right', 'left'],\n\t\ttriggerSpacing: 10,\n\t\twindowSpacing: 10,\n\t\ttipWidth: 30,\n\t\tminBodyWidth: 200,\n\t\tminBodyHeight: 0,\n\t\tonShow: $.noop,\n\t\tonHide: $.noop,\n\t\tonSubmit: $.noop,\n\t\tcloseBtn: null,\n\t\tcloseOtherHUDs: true\n\t}\n});\n\n/**\n * Menu\n */\nGarnish.Menu = Garnish.Base.extend({\n\n\tsettings: null,\n\n\t$container: null,\n\t$options: null,\n\t$anchor: null,\n\n\tmenuId: null,\n\n\t_windowWidth: null,\n\t_windowHeight: null,\n\t_windowScrollLeft: null,\n\t_windowScrollTop: null,\n\n\t_anchorOffset: null,\n\t_anchorWidth: null,\n\t_anchorHeight: null,\n\t_anchorOffsetRight: null,\n\t_anchorOffsetBottom: null,\n\n\t_menuWidth: null,\n\t_menuHeight: null,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(container, settings)\n\t{\n\t\tthis.setSettings(settings, Garnish.Menu.defaults);\n\n\t\tthis.$container = $(container);\n\n\t\tthis.$options = $();\n\t\tthis.addOptions(this.$container.find('a'));\n\n\t\t// Menu List\n\t\tthis.menuId = 'menu' + this._namespace;\n\t\tthis.$menuList = $('ul', this.$container);\n\t\tthis.$menuList.attr({\n\t\t\t'role': 'listbox',\n\t\t\t'id': this.menuId,\n\t\t\t'aria-hidden': 'true'\n\t\t});\n\n\t\t// Deprecated\n\t\tif (this.settings.attachToElement)\n\t\t{\n\t\t\tthis.settings.anchor = this.settings.attachToElement;\n\t\t\tGarnish.log('The \\'attachToElement\\' setting is deprecated. Use \\'anchor\\' instead.');\n\t\t}\n\n\t\tif (this.settings.anchor)\n\t\t{\n\t\t\tthis.$anchor = $(this.settings.anchor);\n\t\t}\n\n\t\t// Prevent clicking on the container from hiding the menu\n\t\tthis.addListener(this.$container, 'mousedown', function(ev)\n\t\t{\n\t\t\tev.stopPropagation();\n\n\t\t\t// Prevent this from causing the menu button to blur\n\t\t\tev.preventDefault();\n\t\t});\n\t},\n\n\taddOptions: function($options)\n\t{\n\t\tthis.$options = this.$options.add($options);\n\t\t$options.data('menu', this);\n\n\t\t$options.each($.proxy(function(optionKey, option)\n\t\t{\n\t\t\t$(option).attr({\n\t\t\t\t'role':'option',\n\t\t\t\t'tabindex':'-1',\n\t\t\t\t'id': this.menuId+'-option-'+optionKey\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.addListener($options, 'click', 'selectOption');\n\t},\n\n\tsetPositionRelativeToAnchor: function()\n\t{\n\t\tthis._windowWidth = Garnish.$win.width();\n\t\tthis._windowHeight = Garnish.$win.height();\n\t\tthis._windowScrollLeft = Garnish.$win.scrollLeft();\n\t\tthis._windowScrollTop = Garnish.$win.scrollTop();\n\n\t\tthis._anchorOffset = this.$anchor.offset();\n\t\tthis._anchorWidth = this.$anchor.outerWidth();\n\t\tthis._anchorHeight = this.$anchor.outerHeight();\n\t\tthis._anchorOffsetRight = this._anchorOffset.left + this._anchorHeight;\n\t\tthis._anchorOffsetBottom = this._anchorOffset.top + this._anchorHeight;\n\n\t\tthis.$container.css('minWidth', 0);\n\t\tthis.$container.css('minWidth', this._anchorWidth - (this.$container.outerWidth() - this.$container.width()));\n\n\t\tthis._menuWidth = this.$container.outerWidth();\n\t\tthis._menuHeight = this.$container.outerHeight();\n\n\t\t// Is there room for the menu below the anchor?\n\t\tvar topClearance = this._anchorOffset.top - this._windowScrollTop,\n\t\t\tbottomClearance = this._windowHeight + this._windowScrollTop - this._anchorOffsetBottom;\n\n\t\tif (bottomClearance >= this._menuHeight || bottomClearance >= topClearance || topClearance < this._menuHeight)\n\t\t{\n\t\t\tthis.$container.css('top', this._anchorOffsetBottom);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$container.css('top', this._anchorOffset.top - this._menuHeight);\n\t\t}\n\n\t\t// Figure out how we're aliging it\n\t\tvar align = this.$container.data('align');\n\n\t\tif (align != 'left' && align != 'center' && align != 'right')\n\t\t{\n\t\t\talign = 'left';\n\t\t}\n\n\t\tif (align == 'center')\n\t\t{\n\t\t\tthis._alignCenter();\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Figure out which options are actually possible\n\t\t\tvar rightClearance = this._windowWidth + this._windowScrollLeft - (this._anchorOffset.left + this._menuWidth),\n\t\t\t\tleftClearance = this._anchorOffsetRight - this._menuWidth;\n\n\t\t\tif (align == 'right' && leftClearance >= 0 || rightClearance < 0)\n\t\t\t{\n\t\t\t\tthis._alignRight();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._alignLeft();\n\t\t\t}\n\t\t}\n\n\t\tdelete this._windowWidth;\n\t\tdelete this._windowHeight;\n\t\tdelete this._windowScrollLeft;\n\t\tdelete this._windowScrollTop;\n\t\tdelete this._anchorOffset;\n\t\tdelete this._anchorWidth;\n\t\tdelete this._anchorHeight;\n\t\tdelete this._anchorOffsetRight;\n\t\tdelete this._anchorOffsetBottom;\n\t\tdelete this._menuWidth;\n\t\tdelete this._menuHeight;\n\t},\n\n\tshow: function()\n\t{\n\t\t// Move the menu to the end of the DOM\n\t\tthis.$container.appendTo(Garnish.$bod)\n\n\t\tif (this.$anchor)\n\t\t{\n\t\t\tthis.setPositionRelativeToAnchor();\n\t\t}\n\n\t\tthis.$container.velocity('stop');\n\t\tthis.$container.css({\n\t\t\topacity: 1,\n\t\t\tdisplay: 'block'\n\t\t});\n\n\t\tthis.$menuList.attr('aria-hidden', 'false');\n\n\t\tGarnish.escManager.register(this, 'hide');\n\t},\n\n\thide: function()\n\t{\n\t\tthis.$menuList.attr('aria-hidden', 'true');\n\n\t\tthis.$container.velocity('fadeOut', { duration: Garnish.FX_DURATION }, $.proxy(function()\n\t\t{\n\t\t\tthis.$container.detach();\n\t\t}, this));\n\n\t\tGarnish.escManager.unregister(this);\n\n\t\tthis.trigger('hide');\n\t},\n\n\tselectOption: function(ev)\n\t{\n\t\tthis.settings.onOptionSelect(ev.currentTarget);\n\t\tthis.trigger('optionselect', { selectedOption: ev.currentTarget });\n\t\tthis.hide();\n\t},\n\n\t_alignLeft: function()\n\t{\n\t\tthis.$container.css({\n\t\t\tleft: this._anchorOffset.left,\n\t\t\tright: 'auto'\n\t\t});\n\t},\n\n\t_alignRight: function()\n\t{\n\t\tthis.$container.css({\n\t\t\tright: this._windowWidth - (this._anchorOffset.left + this._anchorWidth),\n\t\t\tleft: 'auto'\n\t\t});\n\t},\n\n\t_alignCenter: function()\n\t{\n\t\tvar left = Math.round((this._anchorOffset.left + this._anchorWidth / 2) - (this._menuWidth / 2));\n\n\t\tif (left < 0)\n\t\t{\n\t\t\tleft = 0;\n\t\t}\n\n\t\tthis.$container.css('left', left);\n\t}\n\n},\n{\n\tdefaults: {\n\t\tanchor: null,\n\t\tonOptionSelect: $.noop\n\t}\n});\n\n/**\n * Menu Button\n */\nGarnish.MenuBtn = Garnish.Base.extend({\n\n\t$btn: null,\n\tmenu: null,\n\tshowingMenu: false,\n\tdisabled: true,\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(btn, settings)\n\t{\n\t\tthis.$btn = $(btn);\n\n\t\t// Is this already a menu button?\n\t\tif (this.$btn.data('menubtn'))\n\t\t{\n\t\t\t// Grab the old MenuBtn's menu container\n\t\t\tvar $menu = this.$btn.data('menubtn').menu.$container;\n\n\t\t\tGarnish.log('Double-instantiating a menu button on an element');\n\t\t\tthis.$btn.data('menubtn').destroy();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar $menu = this.$btn.next('.menu').detach();\n\t\t}\n\n\t\tthis.$btn.data('menubtn', this);\n\n\t\tthis.setSettings(settings, Garnish.MenuBtn.defaults);\n\n\t\tthis.menu = new Garnish.Menu($menu, {\n\t\t\tanchor: (this.settings.menuAnchor || this.$btn),\n\t\t\tonOptionSelect: $.proxy(this, 'onOptionSelect')\n\t\t});\n\n\t\tthis.$btn.attr({\n\t\t\t'tabindex': 0,\n\t\t\t'role': 'combobox',\n\t\t\t'aria-owns': this.menu.menuId,\n\t\t\t'aria-haspopup': 'true',\n\t\t\t'aria-expanded': 'false',\n\t\t});\n\n\t\tthis.menu.on('hide', $.proxy(this, 'onMenuHide'));\n\t\tthis.addListener(this.$btn, 'mousedown', 'onMouseDown');\n\t\tthis.addListener(this.$btn, 'keydown', 'onKeyDown');\n\t\tthis.addListener(this.$btn, 'blur', 'onBlur');\n\t\tthis.enable();\n\t},\n\n\tonBlur: function(ev)\n\t{\n\t\tif (this.showingMenu)\n\t\t{\n\t\t\tthis.hideMenu();\n\t\t}\n\t},\n\n\tonKeyDown: function(ev)\n\t{\n\t\tswitch (ev.keyCode)\n\t\t{\n\t\t\tcase Garnish.RETURN_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\tvar $currentOption = this.menu.$options.filter('.hover');\n\n\t\t\t\tif($currentOption.length > 0)\n\t\t\t\t{\n\t\t\t\t\t$currentOption.get(0).click();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.SPACE_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\tif(!this.showingMenu)\n\t\t\t\t{\n\t\t\t\t\tthis.showMenu();\n\t\t\t\t\t\n\t\t\t\t\tvar $option = this.menu.$options.filter('.sel:first');\n\n\t\t\t\t\tif($option.length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = this.menu.$options.first();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.focusOption($option);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.DOWN_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\tvar $option;\n\n\t\t\t\tif(this.showingMenu)\n\t\t\t\t{\n\t\t\t\t\t$.each(this.menu.$options, $.proxy(function(index, value)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!$option)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif($(value).hasClass('hover'))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif((index + 1) < this.menu.$options.length)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$option = $(this.menu.$options[(index + 1)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\n\t\t\t\t\tif(!$option)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = $(this.menu.$options[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.showMenu();\n\n\t\t\t\t\t$option = this.menu.$options.filter('.sel:first');\n\n\t\t\t\t\tif($option.length == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = this.menu.$options.first();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.focusOption($option);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.UP_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\tvar $option;\n\n\t\t\t\tif(this.showingMenu)\n\t\t\t\t{\n\t\t\t\t\t$.each(this.menu.$options, $.proxy(function(index, value)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!$option)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif($(value).hasClass('hover'))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif((index - 1) >= 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$option = $(this.menu.$options[(index - 1)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\n\t\t\t\t\tif(!$option)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = $(this.menu.$options[(this.menu.$options.length - 1)]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.showMenu();\n\n\t\t\t\t\t$option = this.menu.$options.filter('.sel:first');\n\n\t\t\t\t\tif($option.length == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t$option = this.menu.$options.last();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.focusOption($option);\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\n\tfocusOption: function($option)\n\t{\n\t\tthis.menu.$options.removeClass('hover');\n\n\t\t$option.addClass('hover');\n\n\t\tthis.menu.$menuList.attr('aria-activedescendant', $option.attr('id'));\n\t\tthis.$btn.attr('aria-activedescendant', $option.attr('id'));\n\t},\n\n\tonMouseDown: function(ev)\n\t{\n\t\tif (ev.which != Garnish.PRIMARY_CLICK || Garnish.isCtrlKeyPressed(ev))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tev.preventDefault();\n\n\t\tif (this.showingMenu)\n\t\t{\n\t\t\tthis.hideMenu();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.showMenu();\n\t\t}\n\t},\n\n\tshowMenu: function()\n\t{\n\t\tif (this.disabled)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.menu.show();\n\t\tthis.$btn.addClass('active');\n\t\tthis.$btn.trigger('focus');\n\t\tthis.$btn.attr('aria-expanded', 'true');\n\n\t\tthis.showingMenu = true;\n\n\t\tsetTimeout($.proxy(function() {\n\t\t\tthis.addListener(Garnish.$doc, 'mousedown', 'onMouseDown');\n\t\t}, this), 1);\n\t},\n\n\thideMenu: function()\n\t{\n\t\tthis.menu.hide();\n\t\tthis.$btn.attr('aria-expanded', 'false');\n\t},\n\n\tonMenuHide: function()\n\t{\n\t\tthis.$btn.removeClass('active');\n\t\tthis.showingMenu = false;\n\n\t\tthis.removeListener(Garnish.$doc, 'mousedown');\n\t},\n\n\tonOptionSelect: function(option)\n\t{\n\t\tthis.settings.onOptionSelect(option);\n\t\tthis.trigger('optionSelect', { option: option });\n\t},\n\n\tenable: function ()\n\t{\n\t\tthis.disabled = false;\n\t},\n\n\tdisable: function ()\n\t{\n\t\tthis.disabled = true;\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$btn.removeData('menubtn');\n\t\tthis.base();\n\t}\n},\n{\n\tdefaults: {\n\t\tmenuAnchor: null,\n\t\tonOptionSelect: $.noop\n\t}\n});\n\n/**\n * Mixed input\n *\n * @todo RTL support, in the event that the input doesn't have dir=\""ltr\"".\n */\nGarnish.MixedInput = Garnish.Base.extend({\n\n\t$container: null,\n\telements: null,\n\tfocussedElement: null,\n\tblurTimeout: null,\n\n\tinit: function(container, settings)\n\t{\n\t\tthis.$container = $(container);\n\t\tthis.setSettings(settings, Garnish.MixedInput.defaults);\n\n\t\tthis.elements = [];\n\n\t\t// Allow the container to receive focus\n\t\tthis.$container.attr('tabindex', 0);\n\t\tthis.addListener(this.$container, 'focus', 'onFocus');\n\t},\n\n\tgetElementIndex: function($elem)\n\t{\n\t\treturn $.inArray($elem, this.elements);\n\t},\n\n\tisText: function($elem)\n\t{\n\t\treturn ($elem.prop('nodeName') == 'INPUT');\n\t},\n\n\tonFocus: function(ev)\n\t{\n\t\t// Set focus to the first element\n\t\tif (this.elements.length)\n\t\t{\n\t\t\tvar $elem = this.elements[0];\n\t\t\tthis.setFocus($elem);\n\t\t\tthis.setCarotPos($elem, 0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.addTextElement();\n\t\t}\n\t},\n\n\taddTextElement: function(index)\n\t{\n\t\tvar text = new TextElement(this);\n\t\tthis.addElement(text.$input, index);\n\t\treturn text;\n\t},\n\n\taddElement: function($elem, index)\n\t{\n\t\t// Was a target index passed, and is it valid?\n\t\tif (typeof index == 'undefined')\n\t\t{\n\t\t\tif (this.focussedElement)\n\t\t\t{\n\t\t\t\tvar focussedElement = this.focussedElement,\n\t\t\t\t\tfocussedElementIndex = this.getElementIndex(focussedElement);\n\n\t\t\t\t// Is the focus on a text element?\n\t\t\t\tif (this.isText(focussedElement))\n\t\t\t\t{\n\t\t\t\t\tvar selectionStart = focussedElement.prop('selectionStart'),\n\t\t\t\t\t\tselectionEnd = focussedElement.prop('selectionEnd'),\n\t\t\t\t\t\tval = focussedElement.val(),\n\t\t\t\t\t\tpreVal = val.substring(0, selectionStart),\n\t\t\t\t\t\tpostVal = val.substr(selectionEnd);\n\n\t\t\t\t\tif (preVal && postVal)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Split the input into two\n\t\t\t\t\t\tfocussedElement.val(preVal).trigger('change');\n\t\t\t\t\t\tvar newText = new TextElement(this);\n\t\t\t\t\t\tnewText.$input.val(postVal).trigger('change');\n\t\t\t\t\t\tthis.addElement(newText.$input, focussedElementIndex+1);\n\n\t\t\t\t\t\t// Insert the new element in between them\n\t\t\t\t\t\tindex = focussedElementIndex+1;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!preVal)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Insert the new element before this one\n\t\t\t\t\t\tindex = focussedElementIndex;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// Insert it after this one\n\t\t\t\t\t\tindex = focussedElementIndex + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Just insert the new one after this one\n\t\t\t\t\tindex = focussedElementIndex + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Insert the new element at the end\n\t\t\t\tindex = this.elements.length;\n\t\t\t}\n\t\t}\n\n\t\t// Add the element\n\t\tif (typeof this.elements[index] != 'undefined')\n\t\t{\n\t\t\t$elem.insertBefore(this.elements[index]);\n\t\t\tthis.elements.splice(index, 0, $elem);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Just for safe measure, set the index to what it really will be\n\t\t\tindex = this.elements.length;\n\n\t\t\tthis.$container.append($elem);\n\t\t\tthis.elements.push($elem);\n\t\t}\n\n\t\t// Make sure that there are text elements surrounding all non-text elements\n\t\tif (!this.isText($elem))\n\t\t{\n\t\t\t// Add a text element before?\n\t\t\tif (index == 0 || !this.isText(this.elements[index-1]))\n\t\t\t{\n\t\t\t\tthis.addTextElement(index);\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\t// Add a text element after?\n\t\t\tif (index == this.elements.length-1 || !this.isText(this.elements[index+1]))\n\t\t\t{\n\t\t\t\tthis.addTextElement(index+1);\n\t\t\t}\n\t\t}\n\n\t\t// Add event listeners\n\t\tthis.addListener($elem, 'click', function() {\n\t\t\tthis.setFocus($elem);\n\t\t});\n\n\t\t// Set focus to the new element\n\t\tsetTimeout($.proxy(function() {\n\t\t\tthis.setFocus($elem);\n\t\t}, this), 1);\n\t},\n\n\tremoveElement: function($elem)\n\t{\n\t\tvar index = this.getElementIndex($elem);\n\t\tif (index != -1)\n\t\t{\n\t\t\tthis.elements.splice(index, 1);\n\n\t\t\tif (!this.isText($elem))\n\t\t\t{\n\t\t\t\t// Combine the two now-adjacent text elements\n\t\t\t\tvar $prevElem = this.elements[index-1],\n\t\t\t\t\t$nextElem = this.elements[index];\n\n\t\t\t\tif (this.isText($prevElem) && this.isText($nextElem))\n\t\t\t\t{\n\t\t\t\t\tvar prevElemVal = $prevElem.val(),\n\t\t\t\t\t\tnewVal = prevElemVal + $nextElem.val();\n\t\t\t\t\t$prevElem.val(newVal).trigger('change');\n\t\t\t\t\tthis.removeElement($nextElem);\n\t\t\t\t\tthis.setFocus($prevElem);\n\t\t\t\t\tthis.setCarotPos($prevElem, prevElemVal.length);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$elem.remove();\n\t\t}\n\t},\n\n\tsetFocus: function($elem)\n\t{\n\t\tthis.$container.addClass('focus');\n\n\t\tif (!this.focussedElement)\n\t\t{\n\t\t\t// Prevent the container from receiving focus\n\t\t\t// as long as one of its elements has focus\n\t\t\tthis.$container.attr('tabindex', '-1');\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Blur the previously-focussed element\n\t\t\tthis.blurFocussedElement();\n\t\t}\n\n\t\t$elem.attr('tabindex', '0');\n\t\t$elem.focus();\n\t\tthis.focussedElement = $elem;\n\n\t\tthis.addListener($elem, 'blur', function() {\n\t\t\tthis.blurTimeout = setTimeout($.proxy(function() {\n\t\t\t\tif (this.focussedElement == $elem)\n\t\t\t\t{\n\t\t\t\t\tthis.blurFocussedElement();\n\t\t\t\t\tthis.focussedElement = null;\n\t\t\t\t\tthis.$container.removeClass('focus');\n\n\t\t\t\t\t// Get ready for future focus\n\t\t\t\t\tthis.$container.attr('tabindex', '0');\n\t\t\t\t}\n\t\t\t}, this), 1);\n\t\t});\n\t},\n\n\tblurFocussedElement: function()\n\t{\n\t\tthis.removeListener(this.focussedElement, 'blur');\n\t\tthis.focussedElement.attr('tabindex', '-1');\n\t},\n\n\tfocusPreviousElement: function($from)\n\t{\n\t\tvar index = this.getElementIndex($from);\n\n\t\tif (index > 0)\n\t\t{\n\t\t\tvar $elem = this.elements[index-1];\n\t\t\tthis.setFocus($elem);\n\n\t\t\t// If it's a text element, put the carot at the end\n\t\t\tif (this.isText($elem))\n\t\t\t{\n\t\t\t\tvar length = $elem.val().length;\n\t\t\t\tthis.setCarotPos($elem, length);\n\t\t\t}\n\t\t}\n\t},\n\n\tfocusNextElement: function($from)\n\t{\n\t\tvar index = this.getElementIndex($from);\n\n\t\tif (index < this.elements.length-1)\n\t\t{\n\t\t\tvar $elem = this.elements[index+1];\n\t\t\tthis.setFocus($elem);\n\n\t\t\t// If it's a text element, put the carot at the beginning\n\t\t\tif (this.isText($elem))\n\t\t\t{\n\t\t\t\tthis.setCarotPos($elem, 0)\n\t\t\t}\n\t\t}\n\t},\n\n\tsetCarotPos: function($elem, pos)\n\t{\n\t\t$elem.prop('selectionStart', pos);\n\t\t$elem.prop('selectionEnd', pos);\n\t}\n\n});\n\n\n\nvar TextElement = Garnish.Base.extend({\n\n\tparentInput: null,\n\t$input: null,\n\t$stage: null,\n\tval: null,\n\tfocussed: false,\n\tinterval: null,\n\n\tinit: function(parentInput)\n\t{\n\t\tthis.parentInput = parentInput;\n\n\t\tthis.$input = $('<input type=\""text\""/>').appendTo(this.parentInput.$container);\n\t\tthis.$input.css('margin-right', (2-TextElement.padding)+'px');\n\n\t\tthis.setWidth();\n\n\t\tthis.addListener(this.$input, 'focus', 'onFocus');\n\t\tthis.addListener(this.$input, 'blur', 'onBlur');\n\t\tthis.addListener(this.$input, 'keydown', 'onKeyDown');\n\t\tthis.addListener(this.$input, 'change', 'checkInput');\n\t},\n\n\tgetIndex: function()\n\t{\n\t\treturn this.parentInput.getElementIndex(this.$input);\n\t},\n\n\tbuildStage: function()\n\t{\n\t\tthis.$stage = $('<stage/>').appendTo(Garnish.$bod);\n\n\t\t// replicate the textarea's text styles\n\t\tthis.$stage.css({\n\t\t\tposition: 'absolute',\n\t\t\ttop: -9999,\n\t\t\tleft: -9999,\n\t\t\twordWrap: 'nowrap'\n\t\t});\n\n\t\tGarnish.copyTextStyles(this.$input, this.$stage);\n\t},\n\n\tgetTextWidth: function(val)\n\t{\n\t\tif (!this.$stage)\n\t\t{\n\t\t\tthis.buildStage();\n\t\t}\n\n\t\tif (val)\n\t\t{\n\t\t\t// Ampersand entities\n\t\t\tval = val.replace(/&/g, '&amp;');\n\n\t\t\t// < and >\n\t\t\tval = val.replace(/</g, '&lt;');\n\t\t\tval = val.replace(/>/g, '&gt;');\n\n\t\t\t// Spaces\n\t\t\tval = val.replace(/ /g, '&nbsp;');\n\t\t}\n\n\t\tthis.$stage.html(val);\n\t\tthis.stageWidth = this.$stage.width();\n\t\treturn this.stageWidth;\n\t},\n\n\tonFocus: function()\n\t{\n\t\tthis.focussed = true;\n\t\tthis.interval = setInterval($.proxy(this, 'checkInput'), Garnish.NiceText.interval);\n\t\tthis.checkInput();\n\t},\n\n\tonBlur: function()\n\t{\n\t\tthis.focussed = false;\n\t\tclearInterval(this.interval);\n\t\tthis.checkInput();\n\t},\n\n\tonKeyDown: function(ev)\n\t{\n\t\tsetTimeout($.proxy(this, 'checkInput'), 1);\n\n\t\tswitch (ev.keyCode)\n\t\t{\n\t\t\tcase Garnish.LEFT_KEY:\n\t\t\t{\n\t\t\t\tif (this.$input.prop('selectionStart') == 0 && this.$input.prop('selectionEnd') == 0)\n\t\t\t\t{\n\t\t\t\t\t// Set focus to the previous element\n\t\t\t\t\tthis.parentInput.focusPreviousElement(this.$input);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.RIGHT_KEY:\n\t\t\t{\n\t\t\t\tif (this.$input.prop('selectionStart') == this.val.length && this.$input.prop('selectionEnd') == this.val.length)\n\t\t\t\t{\n\t\t\t\t\t// Set focus to the next element\n\t\t\t\t\tthis.parentInput.focusNextElement(this.$input);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.DELETE_KEY:\n\t\t\t{\n\t\t\t\tif (this.$input.prop('selectionStart') == 0 && this.$input.prop('selectionEnd') == 0)\n\t\t\t\t{\n\t\t\t\t\t// Set focus to the previous element\n\t\t\t\t\tthis.parentInput.focusPreviousElement(this.$input);\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tgetVal: function()\n\t{\n\t\tthis.val = this.$input.val();\n\t\treturn this.val;\n\t},\n\n\tsetVal: function(val)\n\t{\n\t\tthis.$input.val(val);\n\t\tthis.checkInput();\n\t},\n\n\tcheckInput: function()\n\t{\n\t\t// Has the value changed?\n\t\tvar changed = (this.val !== this.getVal());\n\t\tif (changed)\n\t\t{\n\t\t\tthis.setWidth();\n\t\t\tthis.onChange();\n\t\t}\n\n\t\treturn changed;\n\t},\n\n\tsetWidth: function()\n\t{\n\t\t// has the width changed?\n\t\tif (this.stageWidth !== this.getTextWidth(this.val))\n\t\t{\n\t\t\t// update the textarea width\n\t\t\tvar width = this.stageWidth + TextElement.padding;\n\t\t\tthis.$input.width(width);\n\t\t}\n\t},\n\n\tonChange: $.noop\n},\n{\n\tpadding: 20\n});\n\n/**\n * Modal\n */\nGarnish.Modal = Garnish.Base.extend({\n\n\t$container: null,\n\t$shade: null,\n\n\tvisible: false,\n\n\tdragger: null,\n\n\tdesiredWidth: null,\n\tdesiredHeight: null,\n\tresizeDragger: null,\n\tresizeStartWidth: null,\n\tresizeStartHeight: null,\n\n\tinit: function(container, settings)\n\t{\n\t\t// Param mapping\n\t\tif (typeof settings == typeof undefined && $.isPlainObject(container))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = container;\n\t\t\tcontainer = null;\n\t\t}\n\n\t\tthis.setSettings(settings, Garnish.Modal.defaults);\n\n\t\t// Create the shade\n\t\tthis.$shade = $('<div class=\""'+this.settings.shadeClass+'\""/>');\n\n\t\t// If the container is already set, drop the shade below it.\n\t\tif (container)\n\t\t{\n\t\t\tthis.$shade.insertBefore(container);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$shade.appendTo(Garnish.$bod);\n\t\t}\n\n\t\tif (container)\n\t\t{\n\t\t\tthis.setContainer(container);\n\n\t\t\tif (this.settings.autoShow)\n\t\t\t{\n\t\t\t\tthis.show();\n\t\t\t}\n\t\t}\n\n\t\tGarnish.Modal.instances.push(this);\n\t},\n\n\tsetContainer: function(container)\n\t{\n\t\tthis.$container = $(container);\n\n\t\t// Is this already a modal?\n\t\tif (this.$container.data('modal'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a modal on an element');\n\t\t\tthis.$container.data('modal').destroy();\n\t\t}\n\n\t\tthis.$container.data('modal', this);\n\n\t\tif (this.settings.draggable)\n\t\t{\n\t\t\tthis.dragger = new Garnish.DragMove(this.$container, {\n\t\t\t\thandle: (this.settings.dragHandleSelector ? this.$container.find(this.settings.dragHandleSelector) : this.$container)\n\t\t\t});\n\t\t}\n\n\t\tif (this.settings.resizable)\n\t\t{\n\t\t\tvar $resizeDragHandle = $('<div class=\""resizehandle\""/>').appendTo(this.$container);\n\n\t\t\tthis.resizeDragger = new Garnish.BaseDrag($resizeDragHandle, {\n\t\t\t\tonDragStart:   $.proxy(this, '_handleResizeStart'),\n\t\t\t\tonDrag:        $.proxy(this, '_handleResize')\n\t\t\t});\n\t\t}\n\n\t\tthis.addListener(this.$container, 'click', function(ev) {\n\t\t\tev.stopPropagation();\n\t\t});\n\n\t\t// Show it if we're late to the party\n\t\tif (this.visible)\n\t\t{\n\t\t\tthis.show();\n\t\t}\n\t},\n\n\tshow: function()\n\t{\n\t\t// Close other modals as needed\n\t\tif (this.settings.closeOtherModals && Garnish.Modal.visibleModal && Garnish.Modal.visibleModal != this)\n\t\t{\n\t\t\tGarnish.Modal.visibleModal.hide();\n\t\t}\n\n\t\tif (this.$container)\n\t\t{\n\t\t\t// Move it to the end of <body> so it gets the highest sub-z-index\n\t\t\tthis.$shade.appendTo(Garnish.$bod);\n\t\t\tthis.$container.appendTo(Garnish.$bod);\n\n\t\t\tthis.$container.show();\n\t\t\tthis.updateSizeAndPosition();\n\n\t\t\tthis.$shade.velocity('fadeIn', { duration: 50 });\n\t\t\tthis.$container.delay(50).velocity('fadeIn', {\n\t\t\t\tcomplete: $.proxy(this, 'onFadeIn')\n\t\t\t});\n\n\t\t\tif (this.settings.hideOnShadeClick)\n\t\t\t{\n\t\t\t\tthis.addListener(this.$shade, 'click', 'hide');\n\t\t\t}\n\n\t\t\tthis.addListener(Garnish.$win, 'resize', 'updateSizeAndPosition');\n\t\t}\n\n\t\tthis.enable();\n\n\t\tif (this.settings.hideOnEsc)\n\t\t{\n\t\t\tGarnish.escManager.register(this, 'hide');\n\t\t}\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.visible = true;\n\t\t\tGarnish.Modal.visibleModal = this;\n\n\t\t\tthis.trigger('show');\n\t\t\tthis.settings.onShow();\n\t\t}\n\t},\n\n\tquickShow: function()\n\t{\n\t\tthis.show();\n\n\t\tif (this.$container)\n\t\t{\n\t\t\tthis.$container.velocity('stop');\n\t\t\tthis.$container.show().css('opacity', 1);\n\n\t\t\tthis.$shade.velocity('stop');\n\t\t\tthis.$shade.show().css('opacity', 1);\n\t\t}\n\t},\n\n\thide: function(ev)\n\t{\n\t\tthis.disable();\n\n\t\tif (ev)\n\t\t{\n\t\t\tev.stopPropagation();\n\t\t}\n\n\t\tif (this.$container)\n\t\t{\n\t\t\tthis.$container.velocity('fadeOut', { duration: Garnish.FX_DURATION });\n\t\t\tthis.$shade.velocity('fadeOut', {\n\t\t\t\tduration: Garnish.FX_DURATION,\n\t\t\t\tcomplete: $.proxy(this, 'onFadeOut')\n\t\t\t});\n\n\t\t\tif (this.settings.hideOnShadeClick)\n\t\t\t{\n\t\t\t\tthis.removeListener(this.$shade, 'click');\n\t\t\t}\n\n\t\t\tthis.removeListener(Garnish.$win, 'resize');\n\t\t}\n\n\t\tthis.visible = false;\n\t\tGarnish.Modal.visibleModal = null;\n\n\t\tif (this.settings.hideOnEsc)\n\t\t{\n\t\t\tGarnish.escManager.unregister(this);\n\t\t}\n\n\t\tthis.trigger('hide');\n\t\tthis.settings.onHide();\n\t},\n\n\tquickHide: function()\n\t{\n\t\tthis.hide();\n\n\t\tif (this.$container)\n\t\t{\n\t\t\tthis.$container.velocity('stop');\n\t\t\tthis.$container.css('opacity', 0).hide();\n\n\t\t\tthis.$shade.velocity('stop');\n\t\t\tthis.$shade.css('opacity', 0).hide();\n\t\t}\n\t},\n\n\tupdateSizeAndPosition: function()\n\t{\n\t\tif (!this.$container)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$container.css({\n\t\t\t'width':      (this.desiredWidth ? Math.max(this.desiredWidth, 200) : ''),\n\t\t\t'height':     (this.desiredHeight ? Math.max(this.desiredHeight, 200) : ''),\n\t\t\t'min-width':  '',\n\t\t\t'min-height': ''\n\t\t});\n\n\t\t// Set the width first so that the height can adjust for the width\n\t\tthis.updateSizeAndPosition._windowWidth = Garnish.$win.width();\n\t\tthis.updateSizeAndPosition._width = Math.min(this.getWidth(), this.updateSizeAndPosition._windowWidth - this.settings.minGutter*2);\n\n\t\tthis.$container.css({\n\t\t\t'width':      this.updateSizeAndPosition._width,\n\t\t\t'min-width':  this.updateSizeAndPosition._width,\n\t\t\t'left':       Math.round((this.updateSizeAndPosition._windowWidth - this.updateSizeAndPosition._width) / 2)\n\t\t});\n\n\t\t// Now set the height\n\t\tthis.updateSizeAndPosition._windowHeight = Garnish.$win.height();\n\t\tthis.updateSizeAndPosition._height = Math.min(this.getHeight(), this.updateSizeAndPosition._windowHeight - this.settings.minGutter*2);\n\n\t\tthis.$container.css({\n\t\t\t'height':     this.updateSizeAndPosition._height,\n\t\t\t'min-height': this.updateSizeAndPosition._height,\n\t\t\t'top':        Math.round((this.updateSizeAndPosition._windowHeight - this.updateSizeAndPosition._height) / 2)\n\t\t});\n\t},\n\n\tonFadeIn: function()\n\t{\n\t\tthis.trigger('fadeIn');\n\t\tthis.settings.onFadeIn();\n\t},\n\n\tonFadeOut: function()\n\t{\n\t\tthis.trigger('fadeOut');\n\t\tthis.settings.onFadeOut();\n\t},\n\n\tgetHeight: function()\n\t{\n\t\tif (!this.$container)\n\t\t{\n\t\t\tthrow 'Attempted to get the height of a modal whose container has not been set.';\n\t\t}\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.$container.show();\n\t\t}\n\n\t\tthis.getHeight._height = this.$container.outerHeight();\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.$container.hide();\n\t\t}\n\n\t\treturn this.getHeight._height;\n\t},\n\n\tgetWidth: function()\n\t{\n\t\tif (!this.$container)\n\t\t{\n\t\t\tthrow 'Attempted to get the width of a modal whose container has not been set.';\n\t\t}\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.$container.show();\n\t\t}\n\n\t\t// Chrome might be 1px shy here for some reason\n\t\tthis.getWidth._width = this.$container.outerWidth() + 1;\n\n\t\tif (!this.visible)\n\t\t{\n\t\t\tthis.$container.hide();\n\t\t}\n\n\t\treturn this.getWidth._width;\n\t},\n\n\t_handleResizeStart: function()\n\t{\n\t\tthis.resizeStartWidth = this.getWidth();\n\t\tthis.resizeStartHeight = this.getHeight();\n\t},\n\n\t_handleResize: function()\n\t{\n\t\tif (Garnish.ltr)\n\t\t{\n\t\t\tthis.desiredWidth = this.resizeStartWidth + (this.resizeDragger.mouseDistX * 2);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.desiredWidth = this.resizeStartWidth - (this.resizeDragger.mouseDistX * 2);\n\t\t}\n\n\t\tthis.desiredHeight = this.resizeStartHeight + (this.resizeDragger.mouseDistY * 2);\n\n\t\tthis.updateSizeAndPosition();\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tif (this.$container)\n\t\t{\n\t\t\tthis.$container.removeData('modal').remove();\n\t\t}\n\n\t\tif (this.dragger)\n\t\t{\n\t\t\tthis.dragger.destroy();\n\t\t}\n\n\t\tif (this.resizeDragger)\n\t\t{\n\t\t\tthis.resizeDragger.destroy();\n\t\t}\n\n\t\tthis.base();\n\t}\n},\n{\n\trelativeElemPadding: 8,\n\tdefaults: {\n\t\tautoShow: true,\n\t\tdraggable: false,\n\t\tdragHandleSelector: null,\n\t\tresizable: false,\n\t\tminGutter: 10,\n\t\tonShow: $.noop,\n\t\tonHide: $.noop,\n\t\tonFadeIn: $.noop,\n\t\tonFadeOut: $.noop,\n\t\tcloseOtherModals: false,\n\t\thideOnEsc: true,\n\t\thideOnShadeClick: true,\n\t\tshadeClass: 'modal-shade'\n\t},\n\tinstances: [],\n\tvisibleModal: null\n});\n\n/**\n * Nice Text\n */\nGarnish.NiceText = Garnish.Base.extend({\n\n\t$input: null,\n\t$hint: null,\n\t$stage: null,\n\t$charsLeft: null,\n\tautoHeight: null,\n\tmaxLength: null,\n\tshowCharsLeft: false,\n\tshowingHint: false,\n\tval: null,\n\tinputBoxSizing: 'content-box',\n\twidth: null,\n\theight: null,\n\tminHeight: null,\n\tinitialized: false,\n\n\tinit: function(input, settings)\n\t{\n\t\tthis.$input = $(input);\n\t\tthis.settings = $.extend({}, Garnish.NiceText.defaults, settings);\n\n\t\tif (this.isVisible())\n\t\t{\n\t\t\tthis.initialize();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.addListener(Garnish.$win, 'resize', 'initializeIfVisible');\n\t\t}\n\t},\n\n\tisVisible: function()\n\t{\n\t\treturn (this.$input.height() > 0);\n\t},\n\n\tinitialize: function()\n\t{\n\t\tif (this.initialized)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.initialized = true;\n\t\tthis.removeListener(Garnish.$win, 'resize');\n\n\t\tthis.maxLength = this.$input.attr('maxlength');\n\n\t\tif (this.maxLength)\n\t\t{\n\t\t\tthis.maxLength = parseInt(this.maxLength);\n\t\t}\n\n\t\tif (this.maxLength && (this.settings.showCharsLeft || Garnish.hasAttr(this.$input, 'data-show-chars-left')))\n\t\t{\n\t\t\tthis.showCharsLeft = true;\n\n\t\t\t// Remove the maxlength attribute\n\t\t\tthis.$input.removeAttr('maxlength');\n\t\t}\n\n\t\t// Is this already a transparent text input?\n\t\tif (this.$input.data('nicetext'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a transparent text input on an element');\n\t\t\tthis.$input.data('nicetext').destroy();\n\t\t}\n\n\t\tthis.$input.data('nicetext', this);\n\n\t\tthis.getVal();\n\n\t\tthis.autoHeight = (this.settings.autoHeight && this.$input.prop('nodeName') == 'TEXTAREA');\n\n\t\tif (this.autoHeight)\n\t\t{\n\t\t\tthis.minHeight = this.getHeightForValue('');\n\t\t\tthis.updateHeight();\n\n\t\t\t// Update height when the window resizes\n\t\t\tthis.width = this.$input.width();\n\t\t\tthis.addListener(Garnish.$win, 'resize', 'updateHeightIfWidthChanged');\n\t\t}\n\n\t\tif (this.settings.hint)\n\t\t{\n\t\t\tthis.$hintContainer = $('<div class=\""texthint-container\""/>').insertBefore(this.$input);\n\t\t\tthis.$hint = $('<div class=\""texthint\"">'+this.settings.hint+'</div>').appendTo(this.$hintContainer);\n\t\t\tthis.$hint.css({\n\t\t\t\ttop:  (parseInt(this.$input.css('borderTopWidth'))  + parseInt(this.$input.css('paddingTop'))),\n\t\t\t\tleft: (parseInt(this.$input.css('borderLeftWidth')) + parseInt(this.$input.css('paddingLeft')) + 1)\n\t\t\t});\n\t\t\tGarnish.copyTextStyles(this.$input, this.$hint);\n\n\t\t\tif (this.val)\n\t\t\t{\n\t\t\t\tthis.$hint.hide();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.showingHint = true;\n\t\t\t}\n\n\t\t\t// Focus the input when clicking on the hint\n\t\t\tthis.addListener(this.$hint, 'mousedown', function(ev) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tthis.$input.focus();\n\t\t\t});\n\t\t}\n\n\t\tif (this.showCharsLeft)\n\t\t{\n\t\t\tthis.$charsLeft = $('<div class=\""'+this.settings.charsLeftClass+'\""/>').insertAfter(this.$input);\n\t\t\tthis.updateCharsLeft();\n\t\t}\n\n\t\tthis.addListener(this.$input, 'textchange', 'onTextChange');\n\t},\n\n\tinitializeIfVisible: function()\n\t{\n\t\tif (this.isVisible())\n\t\t{\n\t\t\tthis.initialize();\n\t\t}\n\t},\n\n\tgetVal: function()\n\t{\n\t\tthis.val = this.$input.val();\n\t\treturn this.val;\n\t},\n\n\tshowHint: function()\n\t{\n\t\tthis.$hint.velocity('fadeIn', {\n\t\t\tcomplete: Garnish.NiceText.hintFadeDuration\n\t\t});\n\n\t\tthis.showingHint = true;\n\t},\n\n\thideHint: function()\n\t{\n\t\tthis.$hint.velocity('fadeOut', {\n\t\t\tcomplete: Garnish.NiceText.hintFadeDuration\n\t\t});\n\n\t\tthis.showingHint = false;\n\t},\n\n\tonTextChange: function()\n\t{\n\t\tthis.getVal();\n\n\t\tif (this.$hint)\n\t\t{\n\t\t\tif (this.showingHint && this.val)\n\t\t\t{\n\t\t\t\tthis.hideHint();\n\t\t\t}\n\t\t\telse if (!this.showingHint && !this.val)\n\t\t\t{\n\t\t\t\tthis.showHint();\n\t\t\t}\n\t\t}\n\n\t\tif (this.autoHeight)\n\t\t{\n\t\t\tthis.updateHeight();\n\t\t}\n\n\t\tif (this.showCharsLeft)\n\t\t{\n\t\t\tthis.updateCharsLeft();\n\t\t}\n\t},\n\n\tbuildStage: function()\n\t{\n\t\tthis.$stage = $('<stage/>').appendTo(Garnish.$bod);\n\n\t\t// replicate the textarea's text styles\n\t\tthis.$stage.css({\n\t\t\tdisplay: 'block',\n\t\t\tposition: 'absolute',\n\t\t\ttop: -9999,\n\t\t\tleft: -9999\n\t\t});\n\n\t\tthis.inputBoxSizing = this.$input.css('box-sizing');\n\n\t\tif (this.inputBoxSizing == 'border-box')\n\t\t{\n\t\t\tthis.$stage.css({\n\t\t\t\t'border-top':          this.$input.css('border-top'),\n\t\t\t\t'border-right':        this.$input.css('border-right'),\n\t\t\t\t'border-bottom':       this.$input.css('border-bottom'),\n\t\t\t\t'border-left':         this.$input.css('border-left'),\n\t\t\t\t'padding-top':         this.$input.css('padding-top'),\n\t\t\t\t'padding-right':       this.$input.css('padding-right'),\n\t\t\t\t'padding-bottom':      this.$input.css('padding-bottom'),\n\t\t\t\t'padding-left':        this.$input.css('padding-left'),\n\t\t\t\t'-webkit-box-sizing':  this.inputBoxSizing,\n\t\t\t\t'-moz-box-sizing':     this.inputBoxSizing,\n\t\t\t\t'box-sizing':          this.inputBoxSizing\n\t\t\t});\n\t\t}\n\n\t\tGarnish.copyTextStyles(this.$input, this.$stage);\n\t},\n\n\tgetHeightForValue: function(val)\n\t{\n\t\tif (!this.$stage)\n\t\t{\n\t\t\tthis.buildStage();\n\t\t}\n\n\t\tif (this.inputBoxSizing == 'border-box')\n\t\t{\n\t\t\tthis.$stage.css('width', this.$input.outerWidth());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$stage.css('width', this.$input.width());\n\t\t}\n\n\t\tif (!val)\n\t\t{\n\t\t\tval = '&nbsp;';\n\t\t\tfor (var i = 1; i < this.$input.prop('rows'); i++)\n\t\t\t{\n\t\t\t\tval += '<br/>&nbsp;';\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Ampersand entities\n\t\t\tval = val.replace(/&/g, '&amp;');\n\n\t\t\t// < and >\n\t\t\tval = val.replace(/</g, '&lt;');\n\t\t\tval = val.replace(/>/g, '&gt;');\n\n\t\t\t// Multiple spaces\n\t\t\tval = val.replace(/ {2,}/g, function(spaces) {\n\t\t\t\t// TODO: replace with String.repeat() when more broadly available?\n\t\t\t\tvar replace = '';\n\t\t\t\tfor (var i = 0; i < spaces.length - 1; i++) {\n\t\t\t\t\treplace += '&nbsp;';\n\t\t\t\t}\n\t\t\t\treturn replace+' ';\n\t\t\t});\n\n\t\t\t// Line breaks\n\t\t\tval = val.replace(/[\\n\\r]$/g, '<br/>&nbps;');\n\t\t\tval = val.replace(/[\\n\\r]/g, '<br/>');\n\t\t}\n\n\t\tthis.$stage.html(val);\n\n\t\tif (this.inputBoxSizing == 'border-box')\n\t\t{\n\t\t\tthis.getHeightForValue._height = this.$stage.outerHeight();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.getHeightForValue._height = this.$stage.height();\n\t\t}\n\n\t\tif (this.minHeight && this.getHeightForValue._height < this.minHeight)\n\t\t{\n\t\t\tthis.getHeightForValue._height = this.minHeight;\n\t\t}\n\n\t\treturn this.getHeightForValue._height;\n\t},\n\n\tupdateHeight: function()\n\t{\n\t\t// has the height changed?\n\t\tif (this.height !== (this.height = this.getHeightForValue(this.val)))\n\t\t{\n\t\t\tthis.$input.css('min-height', this.height);\n\n\t\t\tif (this.initialized)\n\t\t\t{\n\t\t\t\tthis.onHeightChange();\n\t\t\t}\n\t\t}\n\t},\n\n\tupdateHeightIfWidthChanged: function()\n\t{\n\t\tif (this.isVisible() && this.width !== (this.width = this.$input.width()) && this.width)\n\t\t{\n\t\t\tthis.updateHeight();\n\t\t}\n\t},\n\n\tonHeightChange: function()\n\t{\n\t\tthis.settings.onHeightChange();\n\t},\n\n\tupdateCharsLeft: function()\n\t{\n\t\tthis.updateCharsLeft._charsLeft = this.maxLength - this.val.length;\n\t\tthis.$charsLeft.text(this.updateCharsLeft._charsLeft);\n\n\t\tif (this.updateCharsLeft._charsLeft >= 0)\n\t\t{\n\t\t\tthis.$charsLeft.removeClass(this.settings.negativeCharsLeftClass);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$charsLeft.addClass(this.settings.negativeCharsLeftClass);\n\t\t}\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$input.removeData('nicetext');\n\n\t\tif (this.$hint)\n\t\t{\n\t\t\tthis.$hint.remove();\n\t\t}\n\n\t\tif (this.$stage)\n\t\t{\n\t\t\tthis.$stage.remove();\n\t\t}\n\n\t\tthis.base();\n\t}\n},\n{\n\tinterval: 100,\n\thintFadeDuration: 50,\n\tdefaults: {\n\t\tautoHeight:             true,\n\t\tshowCharsLeft:          false,\n\t\tcharsLeftClass:         'chars-left',\n\t\tnegativeCharsLeftClass: 'negative-chars-left',\n\t\tonHeightChange:         $.noop\n\t}\n});\n\n/**\n * Pill\n */\nGarnish.Pill = Garnish.Base.extend({\n\n\t$outerContainer: null,\n\t$innerContainer: null,\n\t$btns: null,\n\t$selectedBtn: null,\n\t$input: null,\n\n\tinit: function(outerContainer)\n\t{\n\t\tthis.$outerContainer = $(outerContainer);\n\n\t\t// Is this already a pill?\n\t\tif (this.$outerContainer.data('pill'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a pill on an element');\n\t\t\tthis.$outerContainer.data('pill').destroy();\n\t\t}\n\n\t\tthis.$outerContainer.data('pill', this);\n\n\t\tthis.$innerContainer = this.$outerContainer.find('.btngroup:first');\n\t\tthis.$btns = this.$innerContainer.find('.btn');\n\t\tthis.$selectedBtn = this.$btns.filter('.active:first');\n\t\tthis.$input = this.$outerContainer.find('input:first');\n\n\t\tGarnish.preventOutlineOnMouseFocus(this.$innerContainer);\n\t\tthis.addListener(this.$btns, 'mousedown', 'onMouseDown');\n\t\tthis.addListener(this.$innerContainer, 'keydown', 'onKeyDown');\n\t},\n\n\tselect: function(btn)\n\t{\n\t\tthis.$selectedBtn.removeClass('active');\n\t\tvar $btn = $(btn);\n\t\t$btn.addClass('active');\n\t\tthis.$input.val($btn.attr('data-value'));\n\t\tthis.$selectedBtn = $btn;\n\t},\n\n\tselectNext: function()\n\t{\n\t\tif (!this.$selectedBtn.length)\n\t\t{\n\t\t\tthis.select(this.$btns[this.$btns.length-1]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar nextIndex = this._getSelectedBtnIndex() + 1;\n\n\t\t\tif (typeof this.$btns[nextIndex] != 'undefined')\n\t\t\t{\n\t\t\t\tthis.select(this.$btns[nextIndex]);\n\t\t\t}\n\t\t}\n\t},\n\n\tselectPrev: function()\n\t{\n\t\tif (!this.$selectedBtn.length)\n\t\t{\n\t\t\tthis.select(this.$btns[0]);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar prevIndex = this._getSelectedBtnIndex() - 1;\n\n\t\t\tif (typeof this.$btns[prevIndex] != 'undefined')\n\t\t\t{\n\t\t\t\tthis.select(this.$btns[prevIndex]);\n\t\t\t}\n\t\t}\n\t},\n\n\tonMouseDown: function(ev)\n\t{\n\t\tthis.select(ev.currentTarget);\n\t},\n\n\t_getSelectedBtnIndex: function()\n\t{\n\t\tif (typeof this.$selectedBtn[0] != 'undefined')\n\t\t{\n\t\t\treturn $.inArray(this.$selectedBtn[0], this.$btns);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn -1;\n\t\t}\n\t},\n\n\tonKeyDown: function(ev)\n\t{\n\t\tswitch (ev.keyCode)\n\t\t{\n\t\t\tcase Garnish.RIGHT_KEY:\n\t\t\t{\n\t\t\t\tif (Garnish.ltr)\n\t\t\t\t{\n\t\t\t\t\tthis.selectNext();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.selectPrev();\n\t\t\t\t}\n\n\t\t\t\tev.preventDefault();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.LEFT_KEY:\n\t\t\t{\n\t\t\t\tif (Garnish.ltr)\n\t\t\t\t{\n\t\t\t\t\tthis.selectPrev();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.selectNext();\n\t\t\t\t}\n\n\t\t\t\tev.preventDefault();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$outerContainer.removeData('pill');\n\t\tthis.base();\n\t}\n});\n\n/**\n * Select\n */\nGarnish.Select = Garnish.Base.extend({\n\n\t// Properties\n\t// =========================================================================\n\n\t$container: null,\n\t$items: null,\n\t$selectedItems: null,\n\n\tmousedownTarget: null,\n\tmouseUpTimeout: null,\n\tcallbackFrame: null,\n\n\t$focusable: null,\n\t$first: null,\n\tfirst: null,\n\t$last: null,\n\tlast: null,\n\n\t// Public methods\n\t// =========================================================================\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(container, items, settings)\n\t{\n\t\tthis.$container = $(container);\n\n\t\t// Param mapping\n\t\tif (typeof items == typeof undefined && $.isPlainObject(container))\n\t\t{\n\t\t\t// (settings)\n\t\t\tsettings = container;\n\t\t\tcontainer = null;\n\t\t\titems = null;\n\t\t}\n\t\telse if (typeof settings == typeof undefined && $.isPlainObject(items))\n\t\t{\n\t\t\t// (container, settings)\n\t\t\tsettings = items;\n\t\t\titems = null;\n\t\t}\n\n\t\t// Is this already a select?\n\t\tif (this.$container.data('select'))\n\t\t{\n\t\t\tGarnish.log('Double-instantiating a select on an element');\n\t\t\tthis.$container.data('select').destroy();\n\t\t}\n\n\t\tthis.$container.data('select', this);\n\n\t\tthis.setSettings(settings, Garnish.Select.defaults);\n\n\t\tthis.$items = $();\n\t\tthis.$selectedItems = $();\n\n\t\tthis.addItems(items);\n\n\t\t// --------------------------------------------------------------------\n\n\t\tif (this.settings.allowEmpty && !this.settings.checkboxMode)\n\t\t{\n\t\t\tthis.addListener(this.$container, 'click', function(ev)\n\t\t\t{\n\t\t\t\tif (this.ignoreClick)\n\t\t\t\t{\n\t\t\t\t\tthis.ignoreClick = false;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Deselect all items on container click\n\t\t\t\t\tthis.deselectAll(true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t// --------------------------------------------------------------------\n\n\t/**\n\t * Get Item Index\n\t */\n\tgetItemIndex: function($item)\n\t{\n\t\treturn this.$items.index($item[0]);\n\t},\n\n\t/**\n\t * Is Selected?\n\t */\n\tisSelected: function(item)\n\t{\n\t\tif (Garnish.isJquery(item))\n\t\t{\n\t\t\tif (!item[0])\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\titem = item[0];\n\t\t}\n\n\t\treturn ($.inArray(item, this.$selectedItems) != -1);\n\t},\n\n\t/**\n\t * Select Item\n\t */\n\tselectItem: function($item, focus, preventScroll)\n\t{\n\t\tif (!this.settings.multi)\n\t\t{\n\t\t\tthis.deselectAll();\n\t\t}\n\n\t\tthis.$first = this.$last = $item;\n\t\tthis.first = this.last = this.getItemIndex($item);\n\n\t\tif (focus)\n\t\t{\n\t\t\tthis.setFocusableItem($item);\n\t\t\tthis.focusItem($item, preventScroll);\n\t\t}\n\n\t\tthis._selectItems($item);\n\t},\n\n\tselectAll: function()\n\t{\n\t\tif (!this.settings.multi || !this.$items.length)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.first = 0;\n\t\tthis.last = this.$items.length-1;\n\t\tthis.$first = this.$items.eq(this.first);\n\t\tthis.$last = this.$items.eq(this.last);\n\n\t\tthis._selectItems(this.$items);\n\t},\n\n\t/**\n\t * Select Range\n\t */\n\tselectRange: function($item, preventScroll)\n\t{\n\t\tif (!this.settings.multi)\n\t\t{\n\t\t\treturn this.selectItem($item, true);\n\t\t}\n\n\t\tthis.deselectAll();\n\n\t\tthis.$last = $item;\n\t\tthis.last = this.getItemIndex($item);\n\n\t\tthis.setFocusableItem($item);\n\t\tthis.focusItem($item, preventScroll);\n\n\t\t// prepare params for $.slice()\n\t\tif (this.first < this.last)\n\t\t{\n\t\t\tvar sliceFrom = this.first,\n\t\t\t\tsliceTo = this.last + 1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar sliceFrom = this.last,\n\t\t\t\tsliceTo = this.first + 1;\n\t\t}\n\n\t\tthis._selectItems(this.$items.slice(sliceFrom, sliceTo));\n\t},\n\n\t/**\n\t * Deselect Item\n\t */\n\tdeselectItem: function($item)\n\t{\n\t\tvar index = this.getItemIndex($item);\n\t\tif (this.first === index) this.$first = this.first = null;\n\t\tif (this.last === index) this.$last = this.last = null;\n\n\t\tthis._deselectItems($item);\n\t},\n\n\t/**\n\t * Deselect All\n\t */\n\tdeselectAll: function(clearFirst)\n\t{\n\t\tif (clearFirst)\n\t\t{\n\t\t\tthis.$first = this.first = this.$last = this.last = null;\n\t\t}\n\n\t\tthis._deselectItems(this.$items);\n\t},\n\n\t/**\n\t * Deselect Others\n\t */\n\tdeselectOthers: function($item)\n\t{\n\t\tthis.deselectAll();\n\t\tthis.selectItem($item, true);\n\t},\n\n\t/**\n\t * Toggle Item\n\t */\n\ttoggleItem: function($item, preventScroll)\n\t{\n\t\tif (!this.isSelected($item))\n\t\t{\n\t\t\tthis.selectItem($item, true, preventScroll);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (this._canDeselect($item))\n\t\t\t{\n\t\t\t\tthis.deselectItem($item, true);\n\t\t\t}\n\t\t}\n\t},\n\n\t// --------------------------------------------------------------------\n\n\tclearMouseUpTimeout: function()\n\t{\n\t\tclearTimeout(this.mouseUpTimeout);\n\t},\n\n\tgetFirstItem: function()\n\t{\n\t\tif (this.$items.length)\n\t\t{\n\t\t\treturn this.$items.first();\n\t\t}\n\t},\n\n\tgetLastItem: function()\n\t{\n\t\tif (this.$items.length)\n\t\t{\n\t\t\treturn this.$items.last();\n\t\t}\n\t},\n\n\tisPreviousItem: function(index)\n\t{\n\t\treturn (index > 0);\n\t},\n\n\tisNextItem: function(index)\n\t{\n\t\treturn (index < this.$items.length-1);\n\t},\n\n\tgetPreviousItem: function(index)\n\t{\n\t\tif (this.isPreviousItem(index))\n\t\t{\n\t\t\treturn this.$items.eq(index-1);\n\t\t}\n\t},\n\n\tgetNextItem: function(index)\n\t{\n\t\tif (this.isNextItem(index))\n\t\t{\n\t\t\treturn this.$items.eq(index+1);\n\t\t}\n\t},\n\n\tgetItemToTheLeft: function(index)\n\t{\n\t\tvar func = (Garnish.ltr ? 'Previous' : 'Next');\n\n\t\tif (this['is'+func+'Item'](index))\n\t\t{\n\t\t\tif (this.settings.horizontal)\n\t\t\t{\n\t\t\t\treturn this['get'+func+'Item'](index);\n\t\t\t}\n\t\t\tif (!this.settings.vertical)\n\t\t\t{\n\t\t\t\treturn this.getClosestItem(index, Garnish.X_AXIS, '<');\n\t\t\t}\n\t\t}\n\t},\n\n\tgetItemToTheRight: function(index)\n\t{\n\t\tvar func = (Garnish.ltr ? 'Next' : 'Previous');\n\n\t\tif (this['is'+func+'Item'](index))\n\t\t{\n\t\t\tif (this.settings.horizontal)\n\t\t\t{\n\t\t\t\treturn this['get'+func+'Item'](index);\n\t\t\t}\n\t\t\telse if (!this.settings.vertical)\n\t\t\t{\n\t\t\t\treturn this.getClosestItem(index, Garnish.X_AXIS, '>');\n\t\t\t}\n\t\t}\n\t},\n\n\tgetItemAbove: function(index)\n\t{\n\t\tif (this.isPreviousItem(index))\n\t\t{\n\t\t\tif (this.settings.vertical)\n\t\t\t{\n\t\t\t\treturn this.getPreviousItem(index);\n\t\t\t}\n\t\t\telse if (!this.settings.horizontal)\n\t\t\t{\n\t\t\t\treturn this.getClosestItem(index, Garnish.Y_AXIS, '<');\n\t\t\t}\n\t\t}\n\t},\n\n\tgetItemBelow: function(index)\n\t{\n\t\tif (this.isNextItem(index))\n\t\t{\n\t\t\tif (this.settings.vertical)\n\t\t\t{\n\t\t\t\treturn this.getNextItem(index);\n\t\t\t}\n\t\t\telse if (!this.settings.horizontal)\n\t\t\t{\n\t\t\t\treturn this.getClosestItem(index, Garnish.Y_AXIS, '>');\n\t\t\t}\n\t\t}\n\t},\n\n\tgetClosestItem: function(index, axis, dir)\n\t{\n\t\tvar axisProps = Garnish.Select.closestItemAxisProps[axis],\n\t\t\tdirProps = Garnish.Select.closestItemDirectionProps[dir];\n\n\t\tvar $thisItem = this.$items.eq(index),\n\t\t\tthisOffset = $thisItem.offset(),\n\t\t\tthisMidpoint = thisOffset[axisProps.midpointOffset] + Math.round($thisItem[axisProps.midpointSizeFunc]()/2),\n\t\t\totherRowPos = null,\n\t\t\tsmallestMidpointDiff = null,\n\t\t\t$closestItem = null;\n\n\t\t// Go the other way if this is the X axis and a RTL page\n\t\tif (Garnish.rtl && axis == Garnish.X_AXIS)\n\t\t{\n\t\t\tvar step = dirProps.step * -1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar step = dirProps.step;\n\t\t}\n\n\t\tfor (var i = index + step; (typeof this.$items[i] != 'undefined'); i += step)\n\t\t{\n\t\t\tvar $otherItem = this.$items.eq(i),\n\t\t\t\totherOffset = $otherItem.offset();\n\n\t\t\t// Are we on the next row yet?\n\t\t\tif (dirProps.isNextRow(otherOffset[axisProps.rowOffset], thisOffset[axisProps.rowOffset]))\n\t\t\t{\n\t\t\t\t// Is this the first time we've seen this row?\n\t\t\t\tif (otherRowPos === null)\n\t\t\t\t{\n\t\t\t\t\totherRowPos = otherOffset[axisProps.rowOffset];\n\t\t\t\t}\n\t\t\t\t// Have we gone too far?\n\t\t\t\telse if (otherOffset[axisProps.rowOffset] != otherRowPos)\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvar otherMidpoint = otherOffset[axisProps.midpointOffset] + Math.round($otherItem[axisProps.midpointSizeFunc]()/2),\n\t\t\t\t\tmidpointDiff = Math.abs(thisMidpoint - otherMidpoint);\n\n\t\t\t\t// Are we getting warmer?\n\t\t\t\tif (smallestMidpointDiff === null || midpointDiff < smallestMidpointDiff)\n\t\t\t\t{\n\t\t\t\t\tsmallestMidpointDiff = midpointDiff;\n\t\t\t\t\t$closestItem = $otherItem;\n\t\t\t\t}\n\t\t\t\t// Getting colder?\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Getting colder?\n\t\t\telse if (dirProps.isWrongDirection(otherOffset[axisProps.rowOffset], thisOffset[axisProps.rowOffset]))\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn $closestItem;\n\t},\n\n\tgetFurthestItemToTheLeft: function(index)\n\t{\n\t\treturn this.getFurthestItem(index, 'ToTheLeft');\n\t},\n\n\tgetFurthestItemToTheRight: function(index)\n\t{\n\t\treturn this.getFurthestItem(index, 'ToTheRight');\n\t},\n\n\tgetFurthestItemAbove: function(index)\n\t{\n\t\treturn this.getFurthestItem(index, 'Above');\n\t},\n\n\tgetFurthestItemBelow: function(index)\n\t{\n\t\treturn this.getFurthestItem(index, 'Below');\n\t},\n\n\tgetFurthestItem: function(index, dir)\n\t{\n\t\tvar $item, $testItem;\n\n\t\twhile ($testItem = this['getItem'+dir](index))\n\t\t{\n\t\t\t$item = $testItem;\n\t\t\tindex = this.getItemIndex($item);\n\t\t}\n\n\t\treturn $item;\n\t},\n\n\t// --------------------------------------------------------------------\n\n\t/**\n\t * totalSelected getter\n\t */\n\tget totalSelected()\n\t{\n\t\treturn this.getTotalSelected();\n\t},\n\n\t/**\n\t * Get Total Selected\n\t */\n\tgetTotalSelected: function()\n\t{\n\t\treturn this.$selectedItems.length;\n\t},\n\n\t/**\n\t * Add Items\n\t */\n\taddItems: function(items)\n\t{\n\t\tvar $items = $(items);\n\n\t\tfor (var i = 0; i < $items.length; i++)\n\t\t{\n\t\t\tvar item = $items[i];\n\n\t\t\t// Make sure this element doesn't belong to another selector\n\t\t\tif ($.data(item, 'select'))\n\t\t\t{\n\t\t\t\tGarnish.log('Element was added to more than one selector');\n\t\t\t\t$.data(item, 'select').removeItems(item);\n\t\t\t}\n\n\t\t\t// Add the item\n\t\t\t$.data(item, 'select', this);\n\n\t\t\t// Get the handle\n\t\t\tif (this.settings.handle)\n\t\t\t{\n\t\t\t\tif (typeof this.settings.handle == 'object')\n\t\t\t\t{\n\t\t\t\t\tvar $handle = $(this.settings.handle);\n\t\t\t\t}\n\t\t\t\telse if (typeof this.settings.handle == 'string')\n\t\t\t\t{\n\t\t\t\t\tvar $handle = $(item).find(this.settings.handle);\n\t\t\t\t}\n\t\t\t\telse if (typeof this.settings.handle == 'function')\n\t\t\t\t{\n\t\t\t\t\tvar $handle = $(this.settings.handle(item));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar $handle = $(item);\n\t\t\t}\n\n\t\t\t$.data(item, 'select-handle', $handle);\n\t\t\t$handle.data('select-item', item);\n\n\t\t\tthis.addListener($handle, 'mousedown', 'onMouseDown');\n\t\t\tthis.addListener($handle, 'mouseup', 'onMouseUp');\n\t\t\tthis.addListener($handle, 'click', function(ev)\n\t\t\t{\n\t\t\t\tthis.ignoreClick = true;\n\t\t\t});\n\n\t\t\tthis.addListener(item, 'keydown', 'onKeyDown');\n\t\t}\n\n\t\tthis.$items = this.$items.add($items);\n\t\tthis.updateIndexes();\n\t},\n\n\t/**\n\t * Remove Items\n\t */\n\tremoveItems: function(items)\n\t{\n\t\titems = $.makeArray(items);\n\n\t\tvar itemsChanged = false,\n\t\t\tselectionChanged = false;\n\n\t\tfor (var i = 0; i < items.length; i++)\n\t\t{\n\t\t\tvar item = items[i];\n\n\t\t\t// Make sure we actually know about this item\n\t\t\tvar index = $.inArray(item, this.$items);\n\t\t\tif (index != -1)\n\t\t\t{\n\t\t\t\tthis._deinitItem(item);\n\t\t\t\tthis.$items.splice(index, 1);\n\t\t\t\titemsChanged = true;\n\n\t\t\t\tvar selectedIndex = $.inArray(item, this.$selectedItems);\n\t\t\t\tif (selectedIndex != -1)\n\t\t\t\t{\n\t\t\t\t\tthis.$selectedItems.splice(selectedIndex, 1);\n\t\t\t\t\tselectionChanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (itemsChanged)\n\t\t{\n\t\t\tthis.updateIndexes();\n\n\t\t\tif (selectionChanged)\n\t\t\t{\n\t\t\t\t$(items).removeClass(this.settings.selectedClass);\n\t\t\t\tthis.onSelectionChange();\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Remove All Items\n\t */\n\tremoveAllItems: function()\n\t{\n\t\tfor (var i = 0; i < this.$items.length; i++)\n\t\t{\n\t\t\tthis._deinitItem(this.$items[i]);\n\t\t}\n\n\t\tthis.$items = $();\n\t\tthis.$selectedItems = $();\n\t\tthis.updateIndexes();\n\t},\n\n\t/**\n\t * Update First/Last indexes\n\t */\n\tupdateIndexes: function()\n\t{\n\t\tif (this.first !== null)\n\t\t{\n\t\t\tthis.first = this.getItemIndex(this.$first);\n\t\t\tthis.setFocusableItem(this.$first);\n\t\t}\n\t\telse if (this.$items.length)\n\t\t{\n\t\t\tthis.setFocusableItem($(this.$items[0]));\n\t\t}\n\n\t\tif (this.last !== null)\n\t\t{\n\t\t\tthis.last = this.getItemIndex(this.$last);\n\t\t}\n\t},\n\n\t/**\n\t * Reset Item Order\n\t */\n\t resetItemOrder: function()\n\t {\n\t \tthis.$items = $().add(this.$items);\n\t \tthis.$selectedItems = $().add(this.$selectedItems);\n\t \tthis.updateIndexes();\n\t },\n\n\t/**\n\t * Sets the focusable item.\n\t *\n\t * We only want to have one focusable item per selection list, so that the user\n\t * doesn't have to tab through a million items.\n\t *\n\t * @param object $item\n\t */\n\tsetFocusableItem: function($item)\n\t{\n\t\tif (this.$focusable)\n\t\t{\n\t\t\tthis.$focusable.removeAttr('tabindex');\n\t\t}\n\n\t\tthis.$focusable = $item.attr('tabindex', '0');\n\t},\n\n\t/**\n\t * Sets the focus on an item.\n\t */\n\tfocusItem: function($item, preventScroll)\n\t{\n\t\tif (preventScroll)\n\t\t{\n\t\t\tvar scrollLeft = Garnish.$doc.scrollLeft(),\n\t\t\t\tscrollTop = Garnish.$doc.scrollTop();\n\t\t\t$item.focus();\n\t\t\twindow.scrollTo(scrollLeft, scrollTop);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$item.focus();\n\t\t}\n\t},\n\n\t// --------------------------------------------------------------------\n\n\t/**\n\t * Get Selected Items\n\t */\n\tgetSelectedItems: function()\n\t{\n\t\treturn this.$selectedItems;\n\t},\n\n\t/**\n\t * Destroy\n\t */\n\tdestroy: function()\n\t{\n\t\tthis.$container.removeData('select');\n\t\tthis.removeAllItems();\n\t\tthis.base();\n\t},\n\n\t// Events\n\t// -------------------------------------------------------------------------\n\n\t/**\n\t * On Mouse Down\n\t */\n\tonMouseDown: function(ev)\n\t{\n\t\t// ignore right clicks\n\t\tif (ev.which != Garnish.PRIMARY_CLICK)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Enforce the filter\n\t\tif (this.settings.filter && !$(ev.target).is(this.settings.filter))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.mousedownTarget = ev.currentTarget;\n\n\t\tvar $item = $($.data(ev.currentTarget, 'select-item'));\n\n\t\tif (this.first !== null && ev.shiftKey)\n\t\t{\n\t\t\t// Shift key is consistent for both selection modes\n\t\t\tthis.selectRange($item, true);\n\t\t}\n\t\telse if (this._actAsCheckbox(ev))\n\t\t{\n\t\t\tthis.toggleItem($item, true);\n\t\t}\n\t},\n\n\t/**\n\t * On Mouse Up\n\t */\n\tonMouseUp: function(ev)\n\t{\n\t\t// ignore right clicks\n\t\tif (ev.which != Garnish.PRIMARY_CLICK)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t// Enfore the filter\n\t\tif (this.settings.filter && !$(ev.target).is(this.settings.filter))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar $item = $($.data(ev.currentTarget, 'select-item'));\n\n\t\t// was this a click?\n\t\tif (\n\t\t\t!this._actAsCheckbox(ev) &&\n\t\t\t!ev.shiftKey &&\n\t\t\tev.currentTarget == this.mousedownTarget\n\t\t)\n\t\t{\n\t\t\t// If this is already selected, wait a moment to see if this is a double click before making any rash decisions\n\t\t\tif (this.isSelected($item))\n\t\t\t{\n\t\t\t\tthis.clearMouseUpTimeout();\n\n\t\t\t\tthis.mouseUpTimeout = setTimeout($.proxy(function() {\n\t\t\t\t\tthis.deselectOthers($item);\n\t\t\t\t}, this), 300);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.deselectAll();\n\t\t\t\tthis.selectItem($item, true, true);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * On Key Down\n\t */\n\tonKeyDown: function(ev)\n\t{\n\t\t// Ignore if the focus isn't on one of our items\n\t\tif (ev.target != ev.currentTarget)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar ctrlKey = Garnish.isCtrlKeyPressed(ev);\n\n\t\tif (!this.settings.checkboxMode || !this.$focusable.length)\n\t\t{\n\t\t\tvar anchor = ev.shiftKey ? this.last : this.first;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar anchor = $.inArray(this.$focusable[0], this.$items);\n\n\t\t\tif (anchor == -1)\n\t\t\t{\n\t\t\t\tanchor = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Ok, what are we doing here?\n\t\tswitch (ev.keyCode)\n\t\t{\n\t\t\tcase Garnish.LEFT_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\t// Select the last item if none are selected\n\t\t\t\tif (this.first === null)\n\t\t\t\t{\n\t\t\t\t\tif (Garnish.ltr)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getLastItem();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFirstItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFurthestItemToTheLeft(anchor);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getItemToTheLeft(anchor);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.RIGHT_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\t// Select the first item if none are selected\n\t\t\t\tif (this.first === null)\n\t\t\t\t{\n\t\t\t\t\tif (Garnish.ltr)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFirstItem();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getLastItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFurthestItemToTheRight(anchor);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getItemToTheRight(anchor);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.UP_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\t// Select the last item if none are selected\n\t\t\t\tif (this.first === null)\n\t\t\t\t{\n\t\t\t\t\tif (this.$focusable)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.$focusable.prev();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.$focusable || !$item.length)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getLastItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFurthestItemAbove(anchor);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getItemAbove(anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!$item)\n\t\t\t\t\t{\n\t\t\t\t\t\t$item = this.getFirstItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.DOWN_KEY:\n\t\t\t{\n\t\t\t\tev.preventDefault();\n\n\t\t\t\t// Select the first item if none are selected\n\t\t\t\tif (this.first === null)\n\t\t\t\t{\n\t\t\t\t\tif (this.$focusable)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.$focusable.next();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.$focusable || !$item.length)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFirstItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (ctrlKey)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getFurthestItemBelow(anchor);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar $item = this.getItemBelow(anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!$item)\n\t\t\t\t\t{\n\t\t\t\t\t\t$item = this.getLastItem();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.SPACE_KEY:\n\t\t\t{\n\t\t\t\tif (!ctrlKey)\n\t\t\t\t{\n\t\t\t\t\tev.preventDefault();\n\n\t\t\t\t\tif (this.isSelected(this.$focusable))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this._canDeselect(this.$focusable))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.deselectItem(this.$focusable);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.selectItem(this.$focusable, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Garnish.A_KEY:\n\t\t\t{\n\t\t\t\tif (ctrlKey)\n\t\t\t\t{\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t\tthis.selectAll();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Is there an item queued up for focus/selection?\n\t\tif ($item && $item.length)\n\t\t{\n\t\t\tif (!this.settings.checkboxMode)\n\t\t\t{\n\t\t\t\t// select it\n\t\t\t\tif (this.first !== null && ev.shiftKey)\n\t\t\t\t{\n\t\t\t\t\tthis.selectRange($item);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.deselectAll();\n\t\t\t\t\tthis.selectItem($item, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// just set the new item to be focussable\n\t\t\t\tthis.setFocusableItem($item);\n\t\t\t\t$item.focus();\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Set Callback Timeout\n\t */\n\tonSelectionChange: function()\n\t{\n\t\tif (this.callbackFrame)\n\t\t{\n\t\t\tGarnish.cancelAnimationFrame(this.callbackFrame);\n\t\t\tthis.callbackFrame = null;\n\t\t}\n\n\t\tthis.callbackFrame = Garnish.requestAnimationFrame($.proxy(function()\n\t\t{\n\t\t\tthis.callbackFrame = null;\n\t\t\tthis.trigger('selectionChange');\n\t\t\tthis.settings.onSelectionChange();\n\t\t}, this));\n\t},\n\n\t// Private methods\n\t// =========================================================================\n\n\t_actAsCheckbox: function(ev)\n\t{\n\t\tif (Garnish.isCtrlKeyPressed(ev))\n\t\t{\n\t\t\treturn !this.settings.checkboxMode;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn this.settings.checkboxMode;\n\t\t}\n\t},\n\n\t_canDeselect: function($items)\n\t{\n\t\treturn (this.settings.allowEmpty || this.totalSelected > $items.length);\n\t},\n\n\t_selectItems: function($items)\n\t{\n\t\t$items.addClass(this.settings.selectedClass);\n\t\tthis.$selectedItems = this.$selectedItems.add($items);\n\t\tthis.onSelectionChange();\n\t},\n\n\t_deselectItems: function($items)\n\t{\n\t\t$items.removeClass(this.settings.selectedClass);\n\t\tthis.$selectedItems = this.$selectedItems.not($items);\n\t\tthis.onSelectionChange();\n\t},\n\n\t/**\n\t * Deinitialize an item.\n\t */\n\t_deinitItem: function(item)\n\t{\n\t\tvar $handle = $.data(item, 'select-handle');\n\n\t\tif ($handle)\n\t\t{\n\t\t\t$handle.removeData('select-item');\n\t\t\tthis.removeAllListeners($handle);\n\t\t}\n\n\t\t$.removeData(item, 'select');\n\t\t$.removeData(item, 'select-handle');\n\t}\n},\n\n// Static Properties\n// =============================================================================\n\n{\n\tdefaults: {\n\t\tselectedClass: 'sel',\n\t\tmulti: false,\n\t\tallowEmpty: true,\n\t\tvertical: false,\n\t\thorizontal: false,\n\t\thandle: null,\n\t\tfilter: null,\n\t\tcheckboxMode: false,\n\t\tonSelectionChange: $.noop\n\t},\n\n\tclosestItemAxisProps: {\n\t\tx: {\n\t\t\tmidpointOffset:   'top',\n\t\t\tmidpointSizeFunc: 'outerHeight',\n\t\t\trowOffset:        'left'\n\t\t},\n\t\ty: {\n\t\t\tmidpointOffset:   'left',\n\t\t\tmidpointSizeFunc: 'outerWidth',\n\t\t\trowOffset:        'top'\n\t\t}\n\t},\n\n\tclosestItemDirectionProps: {\n\t\t'<': {\n\t\t\tstep: -1,\n\t\t\tisNextRow: function(a, b) { return (a < b); },\n\t\t\tisWrongDirection: function(a, b) { return (a > b); }\n\t\t},\n\t\t'>': {\n\t\t\tstep: 1,\n\t\t\tisNextRow: function(a, b) { return (a > b); },\n\t\t\tisWrongDirection: function(a, b) { return (a < b); }\n\t\t}\n\t}\n});\n\n/**\n * Select Menu\n */\nGarnish.SelectMenu = Garnish.Menu.extend({\n\n\t/**\n\t * Constructor\n\t */\n\tinit: function(btn, options, settings, callback)\n\t{\n\t\t// argument mapping\n\t\tif (typeof settings == 'function')\n\t\t{\n\t\t\t// (btn, options, callback)\n\t\t\tcallback = settings;\n\t\t\tsettings = {};\n\t\t}\n\n\t\tsettings = $.extend({}, Garnish.SelectMenu.defaults, settings);\n\n\t\tthis.base(btn, options, settings, callback);\n\n\t\tthis.selected = -1;\n\t},\n\n\t/**\n\t * Build\n\t */\n\tbuild: function()\n\t{\n\t\tthis.base();\n\n\t\tif (this.selected != -1)\n\t\t{\n\t\t\tthis._addSelectedOptionClass(this.selected);\n\t\t}\n\t},\n\n\t/**\n\t * Select\n\t */\n\tselect: function(option)\n\t{\n\t\t// ignore if it's already selected\n\t\tif (option == this.selected) return;\n\n\t\tif (this.dom.ul)\n\t\t{\n\t\t\tif (this.selected != -1)\n\t\t\t{\n\t\t\t\tthis.dom.options[this.selected].className = '';\n\t\t\t}\n\n\t\t\tthis._addSelectedOptionClass(option);\n\t\t}\n\n\t\tthis.selected = option;\n\n\t\t// set the button text to the selected option\n\t\tthis.setBtnText($(this.options[option].label).text());\n\n\t\tthis.base(option);\n\t},\n\n\t/**\n\t * Add Selected Option Class\n\t */\n\t_addSelectedOptionClass: function(option)\n\t{\n\t\tthis.dom.options[option].className = 'sel';\n\t},\n\n\t/**\n\t * Set Button Text\n\t */\n\tsetBtnText: function(text)\n\t{\n\t\tthis.dom.$btnLabel.text(text);\n\t}\n\n},\n{\n\tdefaults: {\n\t\tulClass: 'menu select'\n\t}\n});\n\n})(jQuery);\n""]}"
60efecac3bc4ee1101dea621f21f116caecfb280,4023830,    # http://stackoverflow.com/questions/4023830/how-compare-two-strings-in-dot-separated-version-format-in-bash
4825ee1d0dc33a7f1c84308ad7cc85f9bba0b4fd,1907993,"    ""# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n"","
fbde0179f44f4caebe548ae0f64e90df7f253e70,43702546,See this [StackOverflow question](http://stackoverflow.com/questions/43702546/tensorboard-doesnt-show-all-data-points/)
5ad3176860a8f541d01040e65f5230813c86b034,42175630,[how-to-install-libuv-on-ubuntu](https://stackoverflow.com/questions/42175630/how-to-install-libuv-on-ubuntu)
4544df20682ef588a8821f8c8668fd0259a25fbe,11616630,					// see http://stackoverflow.com/questions/11616630/json-stringify-avoid-typeerror-converting-circular-structure-to-json
4f7b62966c3e5645ba90cdb18c59013f6b091cb0,12225253,   * http://stackoverflow.com/questions/12225253/which-node-js-module-should-i-install-to-be-able-to-use-google-protocol-buffers
82871390fa5737094f5f764adf477cb87f60189c,10454552,            // credit: http://stackoverflow.com/a/10454552/677735
9ff4c27537198e4041b9a6e46496971ec4bf69ef,6218425,# https://stackoverflow.com/a/6218425
65f79776251242ffffd3d83f63cf46a64577f533,7997152,#https://stackoverflow.com/questions/7997152/python-3d-polynomial-surface-fit-order-dependent
505d8fd564618146ed1c11331be64da9a348459e,123999,   * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
395391ed6abcc729907b7514046ffadce9754a03,511088,	    //taken from http://stackoverflow.com/questions/511088/use-javascript-to-place-cursor-at-end-of-text-in-text-input-element
175fc2563ae6e1b119b00ba771c66c6ff028dc40,7419630,// http://stackoverflow.com/a/7419630
27b95ba2dbf392a49df5f49cf293bf0e19c6c0c1,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
de151c4a0e023af10d7d768b974585797b2fd2a3,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
494d7eb462987a697d793e8e24862546e37cba76,5312849,			// http://stackoverflow.com/questions/5312849/jquery-find-self;
72e43473445034e30d79a39e5c4844ad5b32ec5b,25314391,			:SEE: http://stackoverflow.com/questions/25314391/system-tray-icon-doesnt-show-in-qt5-linux-lxde
12eeae2a49de5d6acdb90d6349ebf0d61b5b63b3,33683495,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///webpack/bootstrap f77cad729e392ee8f6d2"",""webpack:///./src/index.js"",""webpack:///./src/core/geolocator.js"",""webpack:///./src/lib/utils.js"",""webpack:///./src/lib/fetch.js"",""webpack:///./src/core/geo.helper.js"",""webpack:///./src/core/enums.js"",""webpack:///./src/core/geo.error.js"",""webpack:///./src/core/geo.watcher.js""],""names"":[""module"",""exports"",""EARTH_RADIUS_KM"",""EARTH_RADIUS_MI"",""defaultConfig"",""language"",""https"",""google"",""version"",""key"",""styles"",""geolocator"",""options"",""_"",""config"",""extend"",""callback"",""isPlainObject"",""center"",""Code"",""INVALID_PARAMETERS"",""isString"",""geocode"",""err"",""location"",""coords"",""getStaticMap"",""conf"",""opts"",""mapTypeId"",""MapTypeId"",""ROADMAP"",""size"",""width"",""height"",""scale"",""zoom"",""marker"",""format"",""ImageFormat"",""PNG"",""region"",""latitude"",""longitude"",""String"",""url"",""URL"",""GOOGLE_SATATIC_MAP"",""color"",""encodeURIComponent"",""isFilledArray"",""mapStylesToParams"",""isFunction"",""element"",""title"",""undefined"",""e"",""elem"",""document"",""getElementById"",""isJQueryObject"",""isGoogleLoaded"",""maps"",""Map"",""getDiv"",""isElement"",""isNode"",""isNumber"",""ensureGoogleLoaded"",""GOOGLE_API_FAILED"",""message"",""mapData"",""configCreateMap"",""enableHighAccuracy"",""timeout"",""maximumWait"",""maximumAge"",""desiredAccuracy"",""onProgress"",""noop"",""fallbackToIP"",""addressLookup"",""timezone"",""map"",""staticMap"",""checkGoogleKey"",""cb"",""callbackMap"",""error"",""locateByIP"",""onPositionReceived"",""fetchAddressAndTimezone"",""onPositionError"",""create"",""isGeolocationSupported"",""locateAccurate"",""navigator"",""geolocation"",""getCurrentPosition"",""GEOLOCATION_NOT_SUPPORTED"",""homeMobileCountryCode"",""homeMobileNetworkCode"",""radioType"",""carrier"",""cellTowers"",""wifiAccessPoints"",""raw"",""considerIp"",""setProtocol"",""GOOGLE_GEOLOCATION"",""xhrOpts"",""headers"",""data"",""JSON"",""stringify"",""post"",""xhr"",""response"",""getXHRResponse"",""isGeoError"",""lat"",""lng"",""accuracy"",""timestamp"",""time"",""source"",""geoIpSource"",""INVALID_GEO_IP_SOURCE"",""jsonpOpts"",""async"",""clean"",""callbackParam"",""rootName"",""globalVar"",""jsonp"",""window"",""clone"",""INVALID_RESPONSE"",""schema"",""mapToSchema"",""provider"",""setLocationURLs"",""Number"",""isStringSet"",""Object"",""freeze"",""watcher"",""target"",""clearOnError"",""radius"",""unitSystem"",""UnitSystem"",""METRIC"",""onPositionChanged"",""pos"",""own"",""distance"",""calcDistance"",""from"",""to"",""formula"",""DistanceFormula"",""HAVERSINE"",""targetReached"",""clear"",""reverseGeocode"",""GOOGLE_TIMEZONE"",""id"",""timeZoneId"",""name"",""timeZoneName"",""abbr"",""dots"",""dstOffset"",""rawOffset"",""o"",""origins"",""origin"",""d"",""destinations"",""destination"",""invalidOriginOrDest"",""toPointList"",""travelMode"",""TravelMode"",""DRIVING"",""avoidFerries"",""avoidHighways"",""avoidTolls"",""service"",""DistanceMatrixService"",""getDistanceMatrix"",""status"",""DistanceMatrixStatus"",""OK"",""fromResponse"",""formatDistanceResults"",""dLat"",""degToRad"",""dLng"",""a"",""Math"",""sin"",""cos"",""c"",""atan2"",""sqrt"",""latA"",""latB"",""lngA"",""lngB"",""x"",""y"",""IP"",""params"",""k"",""GOOGLE_MAPS_API"",""obj"",""isPositionError"",""km"",""mi"",""degrees"",""PI"",""radians"",""dec"",""isLng"",""sign"",""sn"",""we"",""nsew"",""absValue"",""abs"",""round"",""floor"",""LocationType"",""RadioType"",""value"",""isArray"",""REQUEST_FAILED"",""safeJsonParse"",""responseText"",""GOOGLE_KEY_INVALID"",""getMapOpts"",""mapOptions"",""isObject"",""formattedAddress"",""_geolocatorMapData"",""instance"",""infoWindow"",""LatLng"",""setOptions"",""Marker"",""event"",""clearInstanceListeners"",""setMap"",""position"",""InfoWindow"",""setContent"",""addListener"",""open"",""address"",""cc"",""countryCode"",""length"",""country"",""flag"",""FLAG"",""toLowerCase"",""createMap"",""reverse"",""loc"",""getTZ"",""getTimeZone"",""result"",""complete"",""POSITION_UNAVAILABLE"",""watch"",""cycle"",""setGeoIPSource"",""ip"",""city"",""state"",""stateCode"",""postalCode"",""_toString"",""prototype"",""toString"",""utils"",""trim"",""type"",""Boolean"",""call"",""array"",""isDate"",""object"",""HTMLElement"",""nodeType"",""Node"",""jQuery"",""isError"",""Error"",""removeQuery"",""str"",""replace"",""removeProtocol"",""p"",""protocol"",""trimDots"",""encodeURI"",""decodeURI"",""decodeURIComponent"",""randomString"",""len"",""random"",""slice"",""upper"",""s"",""match"",""join"",""toUpperCase"",""keys"",""encode"",""operator"",""separator"",""include"",""exclude"",""inc"",""exc"",""forIn"",""indexOf"",""v"",""push"",""notateGlobalObj"",""notation"",""levels"",""split"",""shift"",""forEach"",""note"",""sources"",""concat"",""Date"",""cloned"",""hasOwnProperty"",""mapped"",""parse"",""seconds"",""ts"",""now"",""parseInt"",""fetch"",""defer"",""script"",""createElement"",""cbParamSet"",""cbFnName"",""root"",""rootNameSet"",""query"",""qMark"",""execCb"",""timeUp"",""clearTimeout"",""parentNode"",""removeChild"",""fn"",""readyState"",""onreadystatechange"",""onload"",""onerror"",""errMsg"",""charset"",""crossorigin"",""src"",""getElementsByTagName"",""appendChild"",""setTimeout"",""XMLHttpRequest"",""hasCallback"",""method"",""withCredentials"",""mimeType"",""username"",""password"",""XHR_READY_STATE"",""DONE"",""crossDomain"",""ontimeout"",""setRequestHeader"",""overrideMimeType"",""send"",""_xhr"",""UNSENT"",""OPENED"",""HEADERS_RECEIVED"",""LOADING"",""geoHelper"",""toGoogleCoords"",""fromGoogleCoords"",""arr"",""getGeocodeComps"",""comp"",""route"",""locality"",""administrative_area"",""administrativeArea"",""postal_code"",""buildGeocodeParams"",""placeId"",""geoComps"",""b"",""bounds"",""southwestLat"",""southwestLng"",""northeastLat"",""northeastLng"",""formatGeocodeResults"",""results"",""i"",""comps"",""address_components"",""types"",""long_name"",""short_name"",""geometry"",""commonName"",""point_of_interest"",""premise"",""subpremise"",""colloquial_area"",""streetNumber"",""street_number"",""street"",""administrative_area_level_4"",""administrative_area_level_3"",""neighborhood"",""administrative_area_level_5"",""town"",""sublocality"",""administrative_area_level_2"",""administrative_area_level_1"",""administrative_area_level_1_s"",""country_s"",""formatted_address"",""location_type"",""place_id"",""prop"",""coordsSet"",""GOOGLE_GEOCODE"",""gErr"",""originAddresses"",""dests"",""destinationAddresses"",""rows"",""oIndex"",""dest"",""dIndex"",""elements"",""duration"",""fare"",""style"",""stylers"",""featureType"",""elementType"",""val"",""propName"",""propVal"",""GOOGLE_MAPS_API_BASE"",""enums"",""GOOGLE_DISTANCE_MATRIX"",""HYBRID"",""SATELLITE"",""TERRAIN"",""ROOFTOP"",""RANGE_INTERPOLATED"",""GEOMETRIC_CENTER"",""APPROXIMATE"",""WALKING"",""BICYCLING"",""TRANSIT"",""IMPERIAL"",""LTE"",""GSM"",""CDMA"",""WCDMA"",""PYTHAGOREAN"",""PNG_8"",""PNG_32"",""GIF"",""JPG"",""JPG_BASELINE"",""GeoError"",""code"",""UNKNOWN_ERROR"",""defineProperty"",""enumerable"",""writable"",""captureStackTrace"",""constructor"",""stack"",""msg"",""PERMISSION_DENIED"",""TIMEOUT"",""isValidErrorCode"",""errCode"",""errorCodeFromStatus"",""error_message"",""errorMessage"",""reason"",""errors"",""errorCodeFromReason"",""errorCode"",""setPrototypeOf"",""INVALID_REQUEST"",""REQUEST_DENIED"",""OVER_QUERY_LIMIT"",""USER_RATE_LIMIT_EXCEEDED"",""DAILY_LIMIT_EXCEEDED"",""MAX_ELEMENTS_EXCEEDED"",""MAX_DIMENSIONS_EXCEEDED"",""MAX_WAYPOINTS_EXCEEDED"",""PARSE_ERROR"",""NOT_FOUND"",""INTERNAL_ERROR"",""GeoWatcher"",""onChange"",""onError"",""isCleared"",""_timer"",""watchPosition"",""clearWatch"",""delay"",""_clear""],""mappings"":""AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;ACtCA;;;;;;AACA;AACA;AACAA,QAAOC,OAAP,wB;;;;;;;;;;;;;;;;ACHA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;AAEA;;;;;AAKA,KAAMC,kBAAkB,IAAxB;;AAEA;;;;;AAKA,KAAMC,kBAAkB,IAAxB;;AAEA;;;;;;AAMA,KAAMC,gBAAgB;AAClBC,eAAU,IADQ;AAElBC,YAAO,IAFW;AAGlBC,aAAQ;AACJC,kBAAS,GADL,EACU;AACdC,cAAK,EAFD;AAGJC,iBAAQ;AAHJ;AAHU,EAAtB;;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0BMC,U;;;;;;;;;AAgFF;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAmDcC,O,EAAS;AACnB,iBAAIA,OAAJ,EAAa;AACTD,4BAAWE,CAAX,CAAaC,MAAb,GAAsB,gBAAMC,MAAN,CAAaX,aAAb,EAA4BQ,OAA5B,CAAtB;AACH;AACD,oBAAOD,WAAWE,CAAX,CAAaC,MAApB;AACH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAgHoBF,O,EAASI,Q,EAAU;AACnC,iBAAI,CAAC,gBAAMC,aAAN,CAAoBL,OAApB,CAAD,IAAiC,CAACA,QAAQM,MAA9C,EAAsD;AAClD,uBAAM,kBAAa,cAASC,IAAT,CAAcC,kBAA3B,EACF,+CADE,CAAN;AAEH;;AAED,iBAAI,gBAAMC,QAAN,CAAeT,QAAQM,MAAvB,CAAJ,EAAoC;AAChC,wBAAOP,WAAWW,OAAX,CAAmBV,QAAQM,MAA3B,EAAmC,UAACK,GAAD,EAAMC,QAAN,EAAmB;AACzD,yBAAID,GAAJ,EAASP,SAASO,GAAT;AACTX,6BAAQM,MAAR,GAAiBM,SAASC,MAA1B;AACAT,8BAAS,IAAT,EAAeL,WAAWe,YAAX,CAAwBd,OAAxB,CAAf;AACH,kBAJM,CAAP;AAKH;;AAED,iBAAIe,OAAOhB,WAAWE,CAAX,CAAaC,MAAxB;AACA,iBAAIc,OAAO,gBAAMb,MAAN,CAAa;AACpBc,4BAAW,gBAAMC,SAAN,CAAgBC,OADP;AAEpBC,uBAAM;AACFC,4BAAO,GADL;AAEFC,6BAAQ;AAFN,kBAFc;AAMpBC,wBAAO,CANa,EAMV;AACVC,uBAAM,CAPc;AAQpBC,yBAAQ,KARY;AASpBC,yBAAQ,gBAAMC,WAAN,CAAkBC,GATN;AAUpBnC,2BAAUsB,KAAKtB,QAAL,IAAiB,IAVP;AAWpBoC,yBAAQ;AAXY,cAAb,EAYR7B,OAZQ,CAAX;;AAcA,iBAAIM,SAAS,gBAAMD,aAAN,CAAoBW,KAAKV,MAAzB,IACJU,KAAKV,MAAL,CAAYwB,QADR,SACoBd,KAAKV,MAAL,CAAYyB,SADhC,GAEPC,OAAOhB,KAAKV,MAAZ,CAFN;;AAIA,iBAAIc,OAAO,gBAAMf,aAAN,CAAoBW,KAAKI,IAAzB,IACFJ,KAAKI,IAAL,CAAUC,KADR,SACiBL,KAAKI,IAAL,CAAUE,MAD3B,GAELU,OAAOhB,KAAKI,IAAZ,CAFN;;AAIA,iBAAIa,MAAM,gBAAMC,GAAN,CAAUC,kBAAV,CAA6B;AAA7B,6BACO7B,MADP,iBACyBU,KAAKC,SAD9B,gBAEKG,IAFL,eAEmBJ,KAAKO,KAFxB,cAEsCP,KAAKQ,IAF3C,kBAGOR,KAAKU,MAHZ,kBAG+BV,KAAKvB,QAHpC,CAAV;;AAKA,iBAAIuB,KAAKS,MAAT,EAAiB;AACb,qBAAIW,QAAQ,gBAAM3B,QAAN,CAAeO,KAAKS,MAApB,IAA8BT,KAAKS,MAAnC,GAA4C,KAAxD;AACAQ,wBAAO,cAAcI,8BAA4BD,KAA5B,SAAqC9B,MAArC,CAArB;AACH;AACD,iBAAIU,KAAKa,MAAT,EAAiBI,OAAO,aAAajB,KAAKa,MAAzB;AACjB,iBAAId,KAAKpB,MAAL,CAAYE,GAAhB,EAAqBoC,OAAO,UAAUlB,KAAKpB,MAAL,CAAYE,GAA7B;;AAErB,iBAAIC,SAAS,CAAC,gBAAMwC,aAAN,CAAoBtB,KAAKlB,MAAzB,CAAD,GACN,gBAAMwC,aAAN,CAAoBvB,KAAKpB,MAAL,CAAYG,MAAhC,IAA0CiB,KAAKpB,MAAL,CAAYG,MAAtD,GAA+D,IADzD,GAEPkB,KAAKlB,MAFX;AAGA,iBAAIA,MAAJ,EAAYmC,OAAO,MAAM,cAAUM,iBAAV,CAA4BzC,MAA5B,CAAb;;AAEZ,iBAAI,gBAAM0C,UAAN,CAAiBpC,QAAjB,CAAJ,EAAgC,OAAOA,SAAS,IAAT,EAAe6B,GAAf,CAAP;AAChC,oBAAOA,GAAP;AACH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAsEiBjC,O,EAASI,Q,EAAU;AAChC;AACA;AACA,iBAAI,CAAC,gBAAMC,aAAN,CAAoBL,OAApB,CAAL,EAAmC;AAC/BA,2BAAU,EAAEyC,SAASzC,OAAX,EAAV;AACH;;AAEDA,uBAAU,gBAAMG,MAAN,CAAa;AACnBsC,0BAAS,IADU;AAEnBxB,4BAAW,gBAAMC,SAAN,CAAgBC,OAFR;AAGnBuB,wBAAOC,SAHY;AAInBlB,yBAAQ,IAJW;AAKnBD,uBAAM;AALa,cAAb,EAMPxB,OANO,CAAV;;AAQA,iBAAI4C,IAAI5C,QAAQyC,OAAhB;AAAA,iBACII,aADJ;AAEA,iBAAI,gBAAMpC,QAAN,CAAemC,CAAf,CAAJ,EAAuB;AACnBC,wBAAOC,SAASC,cAAT,CAAwBH,CAAxB,CAAP;AACH,cAFD,MAEO,IAAI,gBAAMI,cAAN,CAAqBJ,CAArB,CAAJ,EAA6B;AAChCC,wBAAOD,EAAE,CAAF,CAAP;AACH,cAFM,MAEA,IAAI7C,WAAWkD,cAAX,MAA+BL,aAAajD,OAAOuD,IAAP,CAAYC,GAA5D,EAAiE;AACpEN,wBAAOD,EAAEQ,MAAF,EAAP;AACH;;AAED,iBAAI,CAAC,gBAAMC,SAAN,CAAgBR,IAAhB,CAAD,IAA0B,CAAC,gBAAMS,MAAN,CAAaT,IAAb,CAA/B,EAAmD;AAC/C,uBAAM,kBAAa,cAAStC,IAAT,CAAcC,kBAA3B,EACF,gEADE,CAAN;AAEH;;AAED,iBAAI,CAAC,gBAAMH,aAAN,CAAoBL,QAAQM,MAA5B,CAAD,IACO,CAAC,gBAAMiD,QAAN,CAAevD,QAAQM,MAAR,CAAewB,QAA9B,CADR,IAEO,CAAC,gBAAMyB,QAAN,CAAevD,QAAQM,MAAR,CAAeyB,SAA9B,CAFZ,EAEsD;AAClD,uBAAM,kBAAa,cAASxB,IAAT,CAAcC,kBAA3B,EACF,kDADE,CAAN;AAEH;;AAEDR,qBAAQyC,OAAR,GAAkBI,IAAlB;;AAEA,iBAAI9B,OAAOhB,WAAWE,CAAX,CAAaC,MAAxB;AAAA,iBACIL,MAAMkB,KAAKpB,MAAL,CAAYE,GADtB;;AAGAG,qBAAQF,MAAR,GAAiB,CAAC,gBAAMwC,aAAN,CAAoBtC,QAAQF,MAA5B,CAAD,GACV,gBAAMwC,aAAN,CAAoBvB,KAAKpB,MAAL,CAAYG,MAAhC,IAA0CiB,KAAKpB,MAAL,CAAYG,MAAtD,GAA+D,IADrD,GAEXE,QAAQF,MAFd;;AAIAC,wBAAWyD,kBAAX,CAA8B3D,GAA9B,EAAmC,eAAO;AACtC,qBAAIc,GAAJ,EAAS;AACL,2BAAM,kBAAa,cAASJ,IAAT,CAAckD,iBAA3B,EAA8CzB,OAAOrB,IAAI+C,OAAJ,IAAe/C,GAAtB,CAA9C,CAAN;AACH;;AAED,qBAAIgD,UAAUC,gBAAgB5D,OAAhB,CAAd;AACAI,0BAAS,IAAT,EAAeuD,OAAf;AACH,cAPD;AAQH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAkJc3D,O,EAASI,Q,EAAU;AAC7BJ,uBAAU,gBAAMG,MAAN,CAAa;AACnB0D,qCAAoB,IADD;AAEnBC,0BAAS,IAFU;AAGnBC,8BAAa,KAHM;AAInBC,6BAAY,CAJO;AAKnBC,kCAAiB,EALE;AAMnBC,6BAAY,gBAAMC,IANC;AAOnBC,+BAAc,KAPK;AAQnBC,gCAAe,KARI;AASnBC,2BAAU,KATS;AAUnBC,sBAAK5B,SAVc;AAWnB6B,4BAAW;AAXQ,cAAb,EAYPxE,OAZO,CAAV;;AAcA;AACA,iBAAIA,QAAQ6D,kBAAZ,EAAgC7D,QAAQgE,UAAR,GAAqB,CAArB;AAChC;AACA,iBAAIhE,QAAQ8D,OAAR,GAAkB,IAAtB,EAA4B9D,QAAQ8D,OAAR,GAAkB,IAAlB;AAC5B;AACA,iBAAI9D,QAAQ+D,WAAR,GAAsB/D,QAAQ8D,OAAlC,EAA2C9D,QAAQ+D,WAAR,GAAsB/D,QAAQ8D,OAA9B;;AAE3C;AACAW,4BAAezE,OAAf;;AAEA,iBAAI0E,KAAKC,YAAY3E,OAAZ,EAAqBI,QAArB,CAAT;;AAEA,sBAASgE,YAAT,CAAsBQ,KAAtB,EAA6B;AACzB,qBAAI5E,QAAQoE,YAAZ,EAA0B;AACtB,4BAAOrE,WAAW8E,UAAX,CAAsB7E,OAAtB,EAA+B,UAACW,GAAD,EAAMC,QAAN,EAAmB;AACrD,6BAAID,GAAJ,EAAS,OAAO+D,GAAG/D,GAAH,EAAQ,IAAR,CAAP;AACT,gCAAO+D,GAAG,IAAH,EAAS9D,QAAT,CAAP;AACH,sBAHM,CAAP;AAIH;AACD8D,oBAAGE,KAAH,EAAU,IAAV;AACH;AACD,sBAASE,kBAAT,CAA4BlE,QAA5B,EAAsC;AAClCmE,yCAAwBnE,QAAxB,EAAkCZ,OAAlC,EAA2C0E,EAA3C;AACH;AACD,sBAASM,eAAT,CAAyBrE,GAAzB,EAA8B;AAC1BA,uBAAM,cAASsE,MAAT,CAAgBtE,GAAhB,CAAN;AACAyD,8BAAazD,GAAb;AACH;;AAED,iBAAIZ,WAAWmF,sBAAX,EAAJ,EAAyC;AACrC,qBAAIlF,QAAQ6D,kBAAZ,EAAgC;AAC5BsB,oCAAenF,OAAf,EAAwB8E,kBAAxB,EAA4CE,eAA5C;AACH,kBAFD,MAEO;AACHI,+BAAUC,WAAV,CAAsBC,kBAAtB,CAAyCR,kBAAzC,EAA6DE,eAA7D,EAA8EhF,OAA9E;AACH;AACJ,cAND,MAMO;AACH,qBAAIW,MAAM,kBAAa,cAASJ,IAAT,CAAcgF,yBAA3B,CAAV;AACAnB,8BAAazD,GAAb;AACH;AACJ;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA4EsBX,O,EAASI,Q,EAAU;AACrC,iBAAI,CAAC,gBAAMC,aAAN,CAAoBL,OAApB,CAAL,EAAmC;AAC/B,uBAAM,kBAAa,cAASO,IAAT,CAAcC,kBAA3B,CAAN;AACH;;AAED,iBAAIkE,KAAKC,YAAY3E,OAAZ,EAAqBI,QAArB,CAAT;;AAEAJ,uBAAU,gBAAMG,MAAN,CAAa;AACnBqF,wCAAuB7C,SADJ;AAEnB8C,wCAAuB9C,SAFJ;AAGnB+C,4BAAW/C,SAHQ;AAInBgD,0BAAShD,SAJU;AAKnByB,+BAAc,KALK;AAMnBwB,6BAAYjD,SANO;AAOnBkD,mCAAkBlD,SAPC;AAQnB0B,gCAAe,KARI;AASnBC,2BAAU,KATS;AAUnBC,sBAAK5B,SAVc;AAWnBmD,sBAAK;AAXc,cAAb,EAYP9F,OAZO,CAAV;;AAcAA,qBAAQ+F,UAAR,GAAqB/F,QAAQoE,YAA7B;AACA;AACAK;;AAEA,iBAAI1D,OAAOhB,WAAWE,CAAX,CAAaC,MAAxB;AAAA,iBACIL,MAAMkB,KAAKpB,MAAL,CAAYE,GAAZ,IAAmB,EAD7B;AAAA,iBAEIoC,MAAM,gBAAM+D,WAAN,CAAkB,gBAAM9D,GAAN,CAAU+D,kBAA5B,EAAgDlF,KAAKrB,KAArD,CAFV;AAAA,iBAGIwG,UAAU;AACNjE,sBAAQA,GAAR,aAAmBpC,GADb;AAENsG,0BAAS;AACL,qCAAgB;AADX,kBAFH;AAKNC,uBAAMC,KAAKC,SAAL,CAAetG,OAAf;AALA,cAHd;AAUA;;AAEA,6BAAMuG,IAAN,CAAWL,OAAX,EAAoB,UAACvF,GAAD,EAAM6F,GAAN,EAAc;AAC9B,qBAAIC,WAAWC,eAAe/F,GAAf,EAAoB6F,GAApB,CAAf;AACA,qBAAI,cAASG,UAAT,CAAoBF,QAApB,CAAJ,EAAmC,OAAO/B,GAAG+B,QAAH,EAAa,IAAb,CAAP;;AAEnCA,4BAAWzG,QAAQ8F,GAAR,GAAcW,QAAd,GAAyB;AAChC5F,6BAAQ;AACJiB,mCAAU2E,SAAS7F,QAAT,CAAkBgG,GADxB;AAEJ7E,oCAAW0E,SAAS7F,QAAT,CAAkBiG,GAFzB;AAGJC,mCAAUL,SAASK;AAHf,sBADwB;AAMhCC,gCAAW,gBAAMC,IAAN;AANqB,kBAApC;;AASAjC,yCAAwB0B,QAAxB,EAAkCzG,OAAlC,EAA2C0E,EAA3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACH,cAvBD;AAwBH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAuFkB1E,O,EAASI,Q,EAAU;AACjC;AACA,iBAAI6G,SAASlH,WAAWE,CAAX,CAAaiH,WAA1B;;AAEA,iBAAI,CAAC,gBAAM7G,aAAN,CAAoB4G,MAApB,CAAL,EAAkC;AAC9B,uBAAM,kBACF,cAAS1G,IAAT,CAAc4G,qBADZ,EAEF,0EAFE,CAAN;AAIH;;AAED;AACA1C,4BAAezE,WAAW,EAA1B;;AAEA,iBAAIoH,YAAY;AACZnF,sBAAKgF,OAAOhF,GADA;AAEZoF,wBAAO,IAFK;AAGZC,wBAAO;AACP;AAJY,cAAhB;AAMA,iBAAIL,OAAOM,aAAX,EAA0B;AACtBH,2BAAUG,aAAV,GAA0BN,OAAOM,aAAjC;AACAH,2BAAUI,QAAV,GAAqB,iBAArB;AACH,cAHD,MAGO,IAAI,CAACP,OAAOQ,SAAZ,EAAuB;AAC1B,uBAAM,kBACF,cAASlH,IAAT,CAAc4G,qBADZ,EAEF,oEAFE,CAAN;AAIH;AACD,oBAAO,gBAAMO,KAAN,CAAYN,SAAZ,EAAuB,UAACzG,GAAD,EAAM8F,QAAN,EAAmB;AAC7C,qBAAI9F,GAAJ,EAAS;AACL,4BAAOP,SAAS,cAAS6E,MAAT,CAAgBtE,GAAhB,CAAT,EAA+B,IAA/B,CAAP;AACH;AACD,qBAAIsG,OAAOQ,SAAX,EAAsB;AAClB,yBAAIE,OAAOV,OAAOQ,SAAd,CAAJ,EAA8B;AAC1BhB,oCAAW,gBAAMmB,KAAN,CAAYD,OAAOV,OAAOQ,SAAd,CAAZ,CAAX;AACA,gCAAOE,OAAOV,OAAOQ,SAAd,CAAP;AACH,sBAHD,MAGO;AACHhB,oCAAW,IAAX;AACH;AACJ;AACD,qBAAI,CAACA,QAAL,EAAe;AACX9F,2BAAM,kBAAa,cAASJ,IAAT,CAAcsH,gBAA3B,CAAN;AACA,4BAAOzH,SAASO,GAAT,EAAc,IAAd,CAAP;AACH;AACD,qBAAI,gBAAMN,aAAN,CAAoB4G,OAAOa,MAA3B,CAAJ,EAAwC;AACpCrB,gCAAW,gBAAMsB,WAAN,CAAkBtB,QAAlB,EAA4BQ,OAAOa,MAAnC,CAAX;AACH;AACDrB,0BAASuB,QAAT,GAAoBf,OAAOe,QAAP,IAAmB,SAAvC;AACAC,iCAAgBxB,QAAhB,EAA0BzG,OAA1B;AACA,qBAAIyG,SAAS5F,MAAb,EAAqB;AACjB4F,8BAAS5F,MAAT,CAAgBiB,QAAhB,GAA2BoG,OAAOzB,SAAS5F,MAAT,CAAgBiB,QAAvB,CAA3B;AACA2E,8BAAS5F,MAAT,CAAgBkB,SAAhB,GAA4BmG,OAAOzB,SAAS5F,MAAT,CAAgBkB,SAAvB,CAA5B;AACH;AACD,qBAAI2C,KAAKC,YAAY3E,OAAZ,EAAqBI,QAArB,CAAT;AACA2E,yCAAwB0B,QAAxB,EAAkCzG,OAAlC,EAA2C0E,EAA3C;AACH,cA3BM,CAAP;AA4BH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA2CsB1E,O,EAAS;AAC3B,iBAAI,CAAC,gBAAMK,aAAN,CAAoBL,OAApB,CAAL,EAAmC;AAC/B,uBAAM,kBAAa,cAASO,IAAT,CAAcC,kBAA3B,EAA+C,mCAA/C,CAAN;AACH;AACD,iBAAI,CAAC,gBAAM2H,WAAN,CAAkBnI,QAAQiC,GAA1B,CAAL,EAAqC;AACjC,uBAAM,kBAAa,cAAS1B,IAAT,CAAcC,kBAA3B,EAA+C,wCAA/C,CAAN;AACH;AACD;AACA;AACA;AACAT,wBAAWE,CAAX,CAAaiH,WAAb,GAA2BkB,OAAOC,MAAP,CAAcrI,OAAd,CAA3B;AACH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAsFaA,O,EAASI,Q,EAAU;AAC5B,iBAAI,CAACL,WAAWmF,sBAAX,EAAL,EAA0C;AACtC9E,0BAAS,kBAAa,cAASG,IAAT,CAAcgF,yBAA3B,CAAT,EAAgE,IAAhE;AACA,wBAAO,EAAP;AACH;;AAED,iBAAI+C,gBAAJ;AAAA,iBAAaC,eAAb;;AAEAvI,uBAAU,gBAAMG,MAAN,CAAa;AACnB0D,qCAAoB,IADD;AAEnBC,0BAAS,IAFU;AAGnBE,6BAAY,CAHO;AAInBwE,+BAAc;AAJK,cAAb,EAKPxI,OALO,CAAV;;AAOA,iBAAI,gBAAMK,aAAN,CAAoBL,QAAQuI,MAA5B,CAAJ,EAAyC;AACrCA,0BAAS,gBAAMpI,MAAN,CAAa;AAClBsI,6BAAQ,GADU;AAElBC,iCAAY3I,WAAW4I,UAAX,CAAsBC;AAFhB,kBAAb,EAGN5I,QAAQuI,MAHF,CAAT;AAIH;;AAED,sBAASM,iBAAT,CAA2BjI,QAA3B,EAAqC;AACjC,qBAAIkI,MAAM,gBAAMlB,KAAN,CAAYhH,QAAZ,EAAsB,EAAEmI,KAAK,KAAP,EAAtB,CAAV;AACA,qBAAIR,MAAJ,EAAY;AACR,yBAAIS,WAAWjJ,WAAWkJ,YAAX,CAAwB;AACnCC,+BAAMtI,SAASC,MADoB;AAEnCsI,6BAAIZ,MAF+B;AAGnCa,kCAASrJ,WAAWsJ,eAAX,CAA2BC,SAHD;AAInCZ,qCAAYH,OAAOG;AAJgB,sBAAxB,CAAf;AAMAI,yBAAIS,aAAJ,GAAoBP,YAAYT,OAAOE,MAAvC;AACA,yBAAIH,WAAWQ,IAAIS,aAAnB,EAAkC;AAC9BjB,iCAAQkB,KAAR,CAAc,YAAM;AAChB,oCAAOpJ,SAAS,IAAT,EAAe0I,GAAf,CAAP;AACH,0BAFD;AAGH;AACJ;AACD,wBAAO1I,SAAS,IAAT,EAAe0I,GAAf,CAAP;AACH;AACD,sBAAS9D,eAAT,CAAyBrE,GAAzB,EAA8B;AAC1BP,0BAAS,cAAS6E,MAAT,CAAgBtE,GAAhB,CAAT,EAA+B,IAA/B;AACH;AACD,oBAAO,kBAAekI,iBAAf,EAAkC7D,eAAlC,EAAmDhF,OAAnD,CAAP;AACH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA+FeA,O,EAASI,Q,EAAU;AAC9BM,sBAAQ,KAAR,EAAeV,OAAf,EAAwBI,QAAxB;AACH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAmFsBJ,O,EAASI,Q,EAAU;AACrCM,sBAAQ,IAAR,EAAcV,OAAd,EAAuBI,QAAvB;AACH;;AAED;;;;;;;uCAIqBJ,O,EAASI,Q,EAAU;AACpCL,wBAAW0J,cAAX,CAA0BzJ,OAA1B,EAAmCI,QAAnC;AACH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCA8CmBJ,O,EAASI,Q,EAAU;AAClC,iBAAI,CAAC,gBAAMC,aAAN,CAAoBL,OAApB,CAAD,IACO,CAAC,gBAAMuD,QAAN,CAAevD,QAAQ8B,QAAvB,CADR,IAEO,CAAC,gBAAMyB,QAAN,CAAevD,QAAQ+B,SAAvB,CAFZ,EAE+C;AAC3C,uBAAM,kBAAa,cAASxB,IAAT,CAAcC,kBAA3B,CAAN;AACH;;AAEDiE;;AAEA,iBAAI1D,OAAOhB,WAAWE,CAAX,CAAaC,MAAxB;AACAF,uBAAU,gBAAMG,MAAN,CAAa;AACnBN,sBAAKkB,KAAKpB,MAAL,CAAYE,GAAZ,IAAmB,EADL;AAEnBJ,2BAAUsB,KAAKtB,QAAL,IAAiB,IAFR;AAGnBsH,4BAAW,gBAAMC,IAAN,CAAW,IAAX,CAHQ;AAInBlB,sBAAK;AAJc,cAAb,EAKP9F,OALO,CAAV;;AAOA,iBAAIiC,MAAM,gBAAM+D,WAAN,CAAkB,gBAAM9D,GAAN,CAAUwH,eAA5B,EAA6C3I,KAAKrB,KAAlD,CAAV;AAAA,iBACIwG,UAAU;AACNjE,sBAAQA,GAAR,kBAAwBjC,QAAQ8B,QAAhC,SAA4C9B,QAAQ+B,SAApD,mBAA2E/B,QAAQ+G,SAAnF,kBAAyG/G,QAAQP,QAAjH,aAAiIO,QAAQH;AADnI,cADd;;AAKA,6BAAM2G,GAAN,CAAUN,OAAV,EAAmB,UAACvF,GAAD,EAAM6F,GAAN,EAAc;AAC7B,qBAAIC,WAAWC,eAAe/F,GAAf,EAAoB6F,GAApB,CAAf;AACA,qBAAI,cAASG,UAAT,CAAoBF,QAApB,CAAJ,EAAmC,OAAOrG,SAASqG,QAAT,EAAmB,IAAnB,CAAP;;AAEnCA,4BAAWzG,QAAQ8F,GAAR,GAAcW,QAAd,GAAyB;AAChCkD,yBAAIlD,SAASmD,UADmB;AAEhCC,2BAAMpD,SAASqD,YAFiB;AAGhCC,2BAAM,gBAAMA,IAAN,CAAWtD,SAASqD,YAApB,EAAkC,EAAEE,MAAM,KAAR,EAAlC,CAH0B;AAIhCC,gCAAWxD,SAASwD,SAJY;AAKhCC,gCAAWzD,SAASyD,SALY;AAMhCnD,gCAAW/G,QAAQ+G;AANa,kBAApC;AAQA3G,0BAASO,GAAT,EAAc8F,QAAd;AACH,cAbD;AAcH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAqFyBzG,O,EAASI,Q,EAAU;AACxCqE;;AAEA,iBAAI5E,MAAME,WAAWE,CAAX,CAAaC,MAAb,CAAoBP,MAApB,CAA2BE,GAArC;AACAE,wBAAWyD,kBAAX,CAA8B3D,GAA9B,EAAmC,eAAO;AACtC,qBAAIc,GAAJ,EAAS;AACL,2BAAM,kBAAa,cAASJ,IAAT,CAAckD,iBAA3B,EAA8CzB,OAAOrB,IAAI+C,OAAJ,IAAe/C,GAAtB,CAA9C,CAAN;AACH;;AAED,qBAAIwJ,IAAInK,QAAQoK,OAAR,IAAmBpK,QAAQqK,MAA3B,IAAqCrK,QAAQkJ,IAArD;AAAA,qBACIoB,IAAItK,QAAQuK,YAAR,IAAwBvK,QAAQwK,WAAhC,IAA+CxK,QAAQmJ,EAD/D;AAEA,qBAAI,CAAC,gBAAM9I,aAAN,CAAoBL,OAApB,CAAD,IAAiCyK,oBAAoBN,CAApB,CAAjC,IAA2DM,oBAAoBH,CAApB,CAA/D,EAAuF;AACnF,2BAAM,kBAAa,cAAS/J,IAAT,CAAcC,kBAA3B,CAAN;AACH;AACDR,yBAAQoK,OAAR,GAAkB,cAAUM,WAAV,CAAsBP,CAAtB,CAAlB;AACAnK,yBAAQuK,YAAR,GAAuB,cAAUG,WAAV,CAAsBJ,CAAtB,CAAvB;;AAEAtK,2BAAU,gBAAMG,MAAN,CAAa;AACnBwK,iCAAYhL,OAAOuD,IAAP,CAAY0H,UAAZ,CAAuBC,OADhB;AAEnBC,mCAAcnI,SAFK;AAGnBoI,oCAAepI,SAHI;AAInBqI,iCAAYrI,SAJO;AAKnB+F,iCAAY/I,OAAOuD,IAAP,CAAYyF,UAAZ,CAAuBC;AALhB,kBAAb,EAMP5I,OANO,CAAV;;AAQA,qBAAIiL,UAAU,IAAItL,OAAOuD,IAAP,CAAYgI,qBAAhB,EAAd;AACAD,yBAAQE,iBAAR,CAA0BnL,OAA1B,EAAmC,UAACyG,QAAD,EAAW2E,MAAX,EAAsB;AACrD,yBAAIzK,MAAM,IAAV;AACA,yBAAIyK,WAAWzL,OAAOuD,IAAP,CAAYmI,oBAAZ,CAAiCC,EAAhD,EAAoD;AAChD3K,+BAAM,cAAS4K,YAAT,CAAsBH,MAAtB,KACC,cAASG,YAAT,CAAsB9E,QAAtB,CADP;AAEAA,oCAAW,IAAX;AACH,sBAJD,MAIO;AACHA,oCAAWzG,QAAQ8F,GAAR,GAAcW,QAAd,GAAyB,cAAU+E,qBAAV,CAAgC/E,QAAhC,CAApC;AACH;AACDrG,8BAASO,GAAT,EAAc8F,QAAd;AACH,kBAVD;AAWH,cAjCD;AAkCH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAmCoBzG,O,EAAS;AACzBA,uBAAU,gBAAMG,MAAN,CAAa;AACnBiJ,0BAASrJ,WAAWsJ,eAAX,CAA2BC,SADjB;AAEnBZ,6BAAY3I,WAAW4I,UAAX,CAAsBC;AAFf,cAAb,EAGP5I,OAHO,CAAV;;AAKA,iBAAIkJ,OAAOlJ,QAAQkJ,IAAnB;AAAA,iBACIC,KAAKnJ,QAAQmJ,EADjB;AAAA,iBAEIV,SAASzI,QAAQ0I,UAAR,KAAuB3I,WAAW4I,UAAX,CAAsBC,MAA7C,GACHtJ,eADG,GACeC,eAH5B;;AAKA,iBAAIS,QAAQoJ,OAAR,KAAoBrJ,WAAWsJ,eAAX,CAA2BC,SAAnD,EAA8D;AAC1D,qBAAImC,OAAO1L,WAAW2L,QAAX,CAAoBvC,GAAGrH,QAAH,GAAcoH,KAAKpH,QAAvC,CAAX;AAAA,qBACI6J,OAAO5L,WAAW2L,QAAX,CAAoBvC,GAAGpH,SAAH,GAAemH,KAAKnH,SAAxC,CADX;AAAA,qBAEI6J,IAAIC,KAAKC,GAAL,CAASL,OAAO,CAAhB,IAAqBI,KAAKC,GAAL,CAASL,OAAO,CAAhB,CAArB,GACAI,KAAKE,GAAL,CAAShM,WAAW2L,QAAX,CAAoBxC,KAAKpH,QAAzB,CAAT,IACA+J,KAAKE,GAAL,CAAShM,WAAW2L,QAAX,CAAoBvC,GAAGpH,SAAvB,CAAT,CADA,GAEA8J,KAAKC,GAAL,CAASH,OAAO,CAAhB,CAFA,GAEqBE,KAAKC,GAAL,CAASH,OAAO,CAAhB,CAL7B;AAAA,qBAMIK,IAAI,IAAIH,KAAKI,KAAL,CAAWJ,KAAKK,IAAL,CAAUN,CAAV,CAAX,EAAyBC,KAAKK,IAAL,CAAU,IAAIN,CAAd,CAAzB,CANZ;AAOA,wBAAOnD,SAASuD,CAAhB;AACH;AACD;AACA,iBAAIG,OAAOpM,WAAW2L,QAAX,CAAoBxC,KAAKpH,QAAzB,CAAX;AAAA,iBACIsK,OAAOrM,WAAW2L,QAAX,CAAoBvC,GAAGrH,QAAvB,CADX;AAAA,iBAEIuK,OAAOtM,WAAW2L,QAAX,CAAoBxC,KAAKnH,SAAzB,CAFX;AAAA,iBAGIuK,OAAOvM,WAAW2L,QAAX,CAAoBvC,GAAGpH,SAAvB,CAHX;AAAA,iBAIIwK,IAAI,CAACD,OAAOD,IAAR,IAAgBR,KAAKE,GAAL,CAAS,CAACI,OAAOC,IAAR,IAAgB,CAAzB,CAJxB;AAAA,iBAKII,IAAKJ,OAAOD,IALhB;AAMA,oBAAON,KAAKK,IAAL,CAAUK,IAAIA,CAAJ,GAAQC,IAAIA,CAAtB,IAA2B/D,MAAlC;AACH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;+BAqBarI,Q,EAAU;AACnB,iBAAIW,OAAOhB,WAAWE,CAAX,CAAaC,MAAxB;;AAEA,iBAAIkH,YAAY;AACZnF,sBAAK,gBAAM+D,WAAN,CAAkB,gBAAM9D,GAAN,CAAUuK,EAA5B,EAAgC1L,KAAKrB,KAArC,CADO;AAEZ2H,wBAAO,IAFK;AAGZC,wBAAO,IAHK;AAIZoF,yBAAQ;AACJhL,6BAAQ;AADJ,kBAJI;AAOZ6F,gCAAe,UAPH;AAQZC,2BAAU;AARE,cAAhB;AAUA,oBAAO,gBAAME,KAAN,CAAYN,SAAZ,EAAuB,UAACzG,GAAD,EAAM8F,QAAN,EAAmB;AAC7C,qBAAI9F,GAAJ,EAAS;AACL,4BAAOP,SAAS,cAAS6E,MAAT,CAAgBtE,GAAhB,CAAT,EAA+B,IAA/B,CAAP;AACH;AACD,qBAAI,CAAC8F,QAAL,EAAe;AACX9F,2BAAM,kBAAa,cAASJ,IAAT,CAAcsH,gBAA3B,CAAN;AACA,4BAAOzH,SAASO,GAAT,EAAc,IAAd,CAAP;AACH;AACD,qBAAI,QAAO8F,QAAP,yCAAOA,QAAP,OAAoB,QAAxB,EAAkCA,SAASM,SAAT,GAAqB,gBAAMC,IAAN,EAArB;AAClC5G,0BAAS,IAAT,EAAeqG,QAAf;AACH,cAVM,CAAP;AAWH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CA+B0B5G,G,EAAKO,Q,EAAU;AACrC,iBAAIuM,UAAJ;AACA,iBAAI,gBAAMnK,UAAN,CAAiB3C,GAAjB,CAAJ,EAA2B;AACvBO,4BAAWP,GAAX;AACH,cAFD,MAEO;AACH8M,qBAAI9M,GAAJ;AACH;AACD,iBAAI,CAACE,WAAWkD,cAAX,EAAL,EAAkC;AAC9B,qBAAImE,YAAY;AACZnF,0BAAK,gBAAMC,GAAN,CAAU0K,eADH;AAEZvF,4BAAO,IAFK;AAGZE,oCAAe,UAHH;AAIZmF,6BAAQ;AACJ7M,8BAAK8M,KAAK;AACV;AAFI,sBAJI;AAQZnF,+BAAU;AARE,kBAAhB;AAUA,wBAAO,gBAAME,KAAN,CAAYN,SAAZ,EAAuBhH,QAAvB,CAAP;AACH;AACDA;AACH;;AAED;;;;;;;;0CAKwB;AACpB,oBAAQ,YAAYuH,MAAb,IAAwBhI,OAAOuD,IAAtC;AACH;;AAED;;;;;;;;;yCAMuB2J,G,EAAK;AACxB,oBAAO,gBAAMC,eAAN,CAAsBD,GAAtB,CAAP;AACH;;AAED;;;;;;;;;oCAMkBA,G,EAAK;AACnB,oBAAO,cAASlG,UAAT,CAAoBkG,GAApB,CAAP;AACH;;AAED;;;;;;;;kDAKgC;AAC5B,oBAAOzH,aAAc,iBAAiBA,SAAtC;AACH;;AAED;;;;;;;;;gCAMc2H,E,EAAI;AACd,oBAAOA,KAAK,QAAZ;AACH;;AAED;;;;;;;;;gCAMcC,E,EAAI;AACd,oBAAOA,KAAK,QAAZ;AACH;;AAED;;;;;;;;;kCAMgBC,O,EAAS;AACrB,oBAAOA,WAAWpB,KAAKqB,EAAL,GAAU,GAArB,CAAP;AACH;;AAED;;;;;;;;;kCAMgBC,O,EAAS;AACrB,oBAAOA,WAAW,MAAMtB,KAAKqB,EAAtB,CAAP;AACH;;AAED;;;;;;;;;;;;;wCAUsBE,G,EAAoB;AAAA,iBAAfC,KAAe,uEAAP,KAAO;;AACtC;AACA;AACA;AACA;AACA,iBAAIC,OAAOF,MAAM,CAAN,GAAU,CAAC,CAAX,GAAe,CAA1B;AAAA,iBACIG,KAAKH,MAAM,CAAN,GAAU,GAAV,GAAgB,GADzB;AAAA,iBAEII,KAAKJ,MAAM,CAAN,GAAU,GAAV,GAAgB,GAFzB;AAAA,iBAGIK,OAAO,CAACJ,KAAD,GAASE,EAAT,GAAcC,EAHzB;AAAA,iBAIIE,WAAW7B,KAAK8B,GAAL,CAAS9B,KAAK+B,KAAL,CAAWR,MAAM,SAAjB,CAAT,CAJf;AAKA,oBAASvB,KAAKgC,KAAL,CAAWH,WAAW,OAAtB,IAAiCJ,IAAlC,GAA0C,IAA1C,GAAiDzB,KAAKgC,KAAL,CAAW,CAAEH,WAAW,OAAZ,GAAuB7B,KAAKgC,KAAL,CAAWH,WAAW,OAAtB,CAAxB,IAA0D,EAArE,CAAjD,GAA4H,KAA5H,GACC7B,KAAKgC,KAAL,CAAW,CAAE,CAAEH,WAAW,OAAZ,GAAuB7B,KAAKgC,KAAL,CAAWH,WAAW,OAAtB,CAAxB,IAA0D,EAA3D,GAAiE7B,KAAKgC,KAAL,CAAW,CAAEH,WAAW,OAAZ,GAAuB7B,KAAKgC,KAAL,CAAWH,WAAW,OAAtB,CAAxB,IAA0D,EAArE,CAAlE,IAA8I,MAAzJ,IAAmK,EAAnK,GAAwK,MADzK,GACmL,IADpL,GAC4LD,IADnM;AAEH;;;;;AArvDD;AACA;AACA;;AAEA;;;;;;;;;;;;;;6BAcmB;AACf;AACH;;AAED;;;;;;;6BAIuB;AACnB,oBAAO,gBAAMvM,SAAb;AACH;;AAED;;;;;;;6BAI0B;AACtB,oBAAO,gBAAM4M,YAAb;AACH;;AAED;;;;;;;6BAIwB;AACpB,oBAAO,gBAAMlD,UAAb;AACH;;AAED;;;;;;;6BAIwB;AACpB,oBAAO,gBAAMjC,UAAb;AACH;;AAED;;;;;;;6BAIuB;AACnB,oBAAO,gBAAMoF,SAAb;AACH;;AAED;;;;;;;6BAI6B;AACzB,oBAAO,gBAAM1E,eAAb;AACH;;AAED;;;;;;;6BAIyB;AACrB,oBAAO,gBAAM1H,WAAb;AACH;;;;;;AA6qDL;AACA;AACA;;AAEA;;;;;;AAIA,UAAS8I,mBAAT,CAA6BuD,KAA7B,EAAoC;AAChC,YAAO,CAAC,gBAAMvN,QAAN,CAAeuN,KAAf,CAAD,IACA,CAAC,gBAAMC,OAAN,CAAcD,KAAd,CADD,IAEA,CAAC,gBAAM3N,aAAN,CAAoB2N,KAApB,CAFR;AAGH;;AAED;;;;;;;;;;;;AAYA,UAAStH,cAAT,CAAwB/F,GAAxB,EAA6B6F,GAA7B,EAAkC;AAC9B,SAAI7F,GAAJ,EAAS,OAAO,cAASsE,MAAT,CAAgBtE,GAAhB,CAAP;AACT,SAAI,CAAC6F,GAAL,EAAU,OAAO,kBAAa,cAASjG,IAAT,CAAc2N,cAA3B,CAAP;AACV,SAAIzH,WAAW,gBAAM0H,aAAN,CAAoB3H,IAAI4H,YAAxB,CAAf;AACA;AACA;AACA,YAAO,cAAS7C,YAAT,CAAsB9E,QAAtB,KAAmCA,QAA1C;AACH;;AAED;;;;;;;;AAQA,UAAShC,cAAT,CAAwBzE,OAAxB,EAAiC;AAC7B,SAAI,CAACA,OAAD,IAAaA,QAAQqE,aAAR,IAAyBrE,QAAQsE,QAAjC,IAA6CtE,QAAQuE,GAArD,IAA4DvE,QAAQwE,SAArF,EAAiG;AAC7F,aAAI,CAACzE,WAAWE,CAAX,CAAaC,MAAb,CAAoBP,MAApB,CAA2BE,GAAhC,EAAqC;AACjC,mBAAM,kBAAa,cAASU,IAAT,CAAc8N,kBAA3B,EAA+C,0DAA/C,CAAN;AACH;AACJ;AACJ;;AAED;;;;;;;;;;;;;AAaA,UAASC,UAAT,CAAoBC,UAApB,EAAgC3N,QAAhC,EAA0C;AACtC,SAAI,gBAAM4N,QAAN,CAAeD,UAAf,CAAJ,EAAgC;AAC5BA,oBAAWjO,MAAX,GAAoBM,SAASC,MAA7B;AACH,MAFD,MAEO;AACH0N,sBAAa;AACT9L,sBAAS8L,UADA;AAETjO,qBAAQM,SAASC;AAFR,UAAb;AAIH;AACD;AACA,SAAID,SAAS6N,gBAAb,EAA+B;AAC3BF,oBAAW7L,KAAX,GAAmB9B,SAAS6N,gBAA5B;AACH;AACD;AACA,SAAI,CAACF,WAAW/M,IAAZ,IACOZ,SAASC,MADhB,IAEO,gBAAM0C,QAAN,CAAe3C,SAASC,MAAT,CAAgBiG,QAA/B,CAFP,IAGOlG,SAASC,MAAT,CAAgBiG,QAAhB,GAA2B,IAHtC,EAG4C;AACxCyH,oBAAW/M,IAAX,GAAkB,EAAlB;AACH;AACD,YAAO+M,UAAP;AACH;;AAED;;;;;;;;;;;;AAYA,UAAS3K,eAAT,CAAyB5D,OAAzB,EAAkC;AAC9B,SAAI6C,OAAO7C,QAAQyC,OAAnB;;AACI;AACA;AACA;AACA;AACAkB,eAAUd,KAAK6L,kBALnB;AAAA,SAMInK,MAAOZ,WAAWA,QAAQgL,QAApB,IAAiC,IAN3C;AAAA,SAOIlN,SAAUkC,WAAWA,QAAQlC,MAApB,IAA+B,IAP5C;AAAA,SAQImN,aAAcjL,WAAWA,QAAQiL,UAApB,IAAmC,IARpD;AAAA,SASItO,SAAS,IAAIX,OAAOuD,IAAP,CAAY2L,MAAhB,CAAuB7O,QAAQM,MAAR,CAAewB,QAAtC,EAAgD9B,QAAQM,MAAR,CAAeyB,SAA/D,CATb;AAAA,SAUIwM,aAAa;AACTtN,oBAAWjB,QAAQiB,SADV;AAETX,iBAAQA,MAFC;AAGTkB,eAAMxB,QAAQwB,IAHL;AAIT1B,iBAAQE,QAAQF,MAAR,IAAkB;AAJjB,MAVjB;;AAiBA;AACA;AACA,SAAIyE,GAAJ,EAAS;AACLA,aAAIuK,UAAJ,CAAeP,UAAf;AACH,MAFD,MAEO;AACHhK,eAAM,IAAI5E,OAAOuD,IAAP,CAAYC,GAAhB,CAAoBnD,QAAQyC,OAA5B,EAAqC8L,UAArC,CAAN;AACH;;AAED;AACA,SAAIK,UAAJ,EAAgBA,aAAa,IAAb;AAChB,SAAInN,UAAUA,kBAAkB9B,OAAOuD,IAAP,CAAY6L,MAA5C,EAAoD;AAChDpP,gBAAOuD,IAAP,CAAY8L,KAAZ,CAAkBC,sBAAlB,CAAyCxN,MAAzC;AACAA,gBAAOyN,MAAP,CAAc,IAAd;AACAzN,kBAAS,IAAT;AACH;;AAED;AACA;AACA,SAAIzB,QAAQyB,MAAZ,EAAoB;AAChBA,kBAAS,IAAI9B,OAAOuD,IAAP,CAAY6L,MAAhB,CAAuB;AAC5BI,uBAAUZ,WAAWjO,MADO;AAE5BiE,kBAAKA;AAFuB,UAAvB,CAAT;AAIA,aAAIvE,QAAQ0C,KAAZ,EAAmB;AACfkM,0BAAa,IAAIjP,OAAOuD,IAAP,CAAYkM,UAAhB,EAAb;AACAR,wBAAWS,UAAX,CAAsBrP,QAAQ0C,KAA9B;AACA;AACA/C,oBAAOuD,IAAP,CAAY8L,KAAZ,CAAkBM,WAAlB,CAA8B7N,MAA9B,EAAsC,OAAtC,EAA+C,YAAM;AACjDmN,4BAAWW,IAAX,CAAgBhL,GAAhB,EAAqB9C,MAArB;AACH,cAFD;AAGH;AACJ;;AAEDkC,eAAU;AACNlB,kBAASI,IADH;AAEN8L,mBAAUpK,GAFJ;AAGN9C,iBAAQA,MAHF;AAINmN,qBAAYA,UAJN;AAKN5O,kBAASuO;AALH,MAAV;AAOA;AACA1L,UAAK6L,kBAAL,GAA0B/K,OAA1B;AACA,YAAOA,OAAP;AACH;;AAED;;;;;;;AAOA,UAASsE,eAAT,CAAyBrH,QAAzB,EAAmCZ,OAAnC,EAA4C;AACxC,SAAI,CAACY,QAAD,IAAa,CAACA,SAAS4O,OAA3B,EAAoC;AACpC,SAAIC,WAAJ;AAAA,SACID,UAAU5O,SAAS4O,OADvB;AAEA,SAAI,gBAAM/O,QAAN,CAAe+O,QAAQE,WAAvB,KAAuCF,QAAQE,WAAR,CAAoBC,MAApB,KAA+B,CAA1E,EAA6E;AACzEF,cAAKD,QAAQE,WAAb;AACH,MAFD,MAEO,IAAI,gBAAMjP,QAAN,CAAe+O,QAAQI,OAAvB,KAAmCJ,QAAQI,OAAR,CAAgBD,MAAhB,KAA2B,CAAlE,EAAqE;AACxEF,cAAKD,QAAQI,OAAb;AACH;AACD,SAAI,CAACH,EAAL,EAAS;AACT7O,cAASiP,IAAT,GAAgB,gBAAM3N,GAAN,CAAU4N,IAAV,GAAiBL,GAAGM,WAAH,EAAjB,GAAoC,MAApD;AACA,SAAI/P,QAAQwE,SAAZ,EAAuB;AACnB,aAAIxD,OAAO,gBAAMX,aAAN,CAAoBL,QAAQwE,SAA5B,IACL,gBAAMoD,KAAN,CAAY5H,QAAQwE,SAApB,CADK,GAEL,EAFN;AAGAxD,cAAKV,MAAL,GAAcM,SAASC,MAAvB;AACAD,kBAAS4D,SAAT,GAAqBzE,WAAWe,YAAX,CAAwBE,IAAxB,CAArB;AACH;AACJ;;AAED;;;;;;;;;;;AAWA,UAAS2D,WAAT,CAAqB3E,OAArB,EAA8BI,QAA9B,EAAwC;AACpC,YAAO,SAASsE,EAAT,CAAY/D,GAAZ,EAAiBC,QAAjB,EAA2B;AAC9B,aAAID,GAAJ,EAAS,OAAOP,SAAS,cAAS6E,MAAT,CAAgBtE,GAAhB,CAAT,EAA+B,IAA/B,CAAP;AACTsH,yBAAgBrH,QAAhB,EAA0BZ,OAA1B;AACA,aAAI,CAACA,QAAQuE,GAAb,EAAkB,OAAOnE,SAAS,IAAT,EAAeQ,QAAf,CAAP;AAClBZ,iBAAQuE,GAAR,GAAc+J,WAAWtO,QAAQuE,GAAnB,EAAwB3D,QAAxB,CAAd;AACAb,oBAAWiQ,SAAX,CAAqBhQ,QAAQuE,GAA7B,EAAkC,UAACK,KAAD,EAAQL,GAAR,EAAgB;AAC9C,iBAAIK,KAAJ,EAAW,OAAOxE,SAASwE,KAAT,EAAgB,IAAhB,CAAP;AACXhE,sBAAS2D,GAAT,GAAeA,GAAf;AACA,oBAAOnE,SAAS,IAAT,EAAeQ,QAAf,CAAP;AACH,UAJD;AAKH,MAVD;AAWH;;AAED;;;;;;;;;;;AAWA,UAASF,QAAT,CAAiBuP,OAAjB,EAA0BjQ,OAA1B,EAAmCI,QAAnC,EAA6C;AACzCqE;AACA,mBAAU/D,OAAV,CACIuP,OADJ,EAEIlQ,WAAWE,CAAX,CAAaC,MAFjB,EAGIF,OAHJ,EAII2E,YAAY3E,OAAZ,EAAqBI,QAArB,CAJJ;AAMH;;AAED;;;;;;;;;;;AAWA,UAAS2E,uBAAT,CAAiCnE,QAAjC,EAA2CZ,OAA3C,EAAoDI,QAApD,EAA8D;AAC1D,SAAI8P,MAAM,gBAAMtI,KAAN,CAAYhH,QAAZ,EAAsB,EAAEmI,KAAK,KAAP,EAAtB,CAAV;AACA,SAAI,CAAC/I,QAAQqE,aAAT,IAA0B,CAACrE,QAAQsE,QAAvC,EAAiD;AAC7C,gBAAOlE,SAAS,IAAT,EAAe8P,GAAf,CAAP;AACH;AACD,cAASC,KAAT,CAAezL,EAAf,EAAmB;AACf3E,oBAAWqQ,WAAX,CAAuBF,IAAIrP,MAA3B,EAAmC,UAACF,GAAD,EAAM2D,QAAN,EAAmB;AAClD,iBAAI3D,GAAJ,EAAS;AACL,wBAAO+D,GAAG/D,GAAH,EAAQ,IAAR,CAAP;AACH;AACD,oBAAO2D,SAASyC,SAAhB;AACAmJ,iBAAI5L,QAAJ,GAAeA,QAAf;AACA4L,iBAAInJ,SAAJ,GAAgB,gBAAMC,IAAN,EAAhB,CANkD,CAMpB;AAC9BtC,gBAAG,IAAH,EAASwL,GAAT;AACH,UARD;AASH;AACD,SAAIlQ,QAAQqE,aAAZ,EAA2B;AACvBtE,oBAAW0J,cAAX,CAA0ByG,IAAIrP,MAA9B,EAAsC,UAACF,GAAD,EAAM0P,MAAN,EAAiB;AACnD,iBAAI1P,GAAJ,EAAS,OAAOP,SAASO,GAAT,EAAc,IAAd,CAAP;AACTuP,mBAAM,gBAAM/P,MAAN,CAAa,EAAb,EAAiBkQ,MAAjB,EAAyBH,GAAzB,CAAN;AACAA,iBAAIV,OAAJ,GAAca,OAAOb,OAArB;AACAU,iBAAInJ,SAAJ,GAAgB,gBAAMC,IAAN,EAAhB,CAJmD,CAIrB;AAC9B,iBAAI,CAAChH,QAAQsE,QAAb,EAAuB;AACnBlE,0BAASO,GAAT,EAAcuP,GAAd;AACH,cAFD,MAEO;AACHC,uBAAM/P,QAAN;AACH;AACJ,UAVD;AAWH,MAZD,MAYO,IAAIJ,QAAQsE,QAAZ,EAAsB;AACzB6L,eAAM/P,QAAN;AACH,MAFM,MAEA;AACHA,kBAAS,IAAT,EAAe8P,GAAf;AACH;AACJ;;AAED;;;;;;;;;;;;AAYA,UAAS/K,cAAT,CAAwBnF,OAAxB,EAAiC8E,kBAAjC,EAAqDE,eAArD,EAAsE;AAClE,SAAIkL,YAAJ;AAAA,SACI5H,gBADJ;AAAA,SAEIpE,aAAa,CAAC,gBAAM1B,UAAN,CAAiBxC,QAAQkE,UAAzB,CAAD,GACP,gBAAMC,IADC,GAEPnE,QAAQkE,UAJlB;;AAMA,cAASoM,QAAT,GAAoB;AAChB,aAAI,CAACJ,GAAL,EAAU;AACNlL,6BAAgB,kBAAa,cAASzE,IAAT,CAAcgQ,oBAA3B,CAAhB;AACH,UAFD,MAEO;AACHzL,gCAAmBoL,GAAnB;AACH;AACJ;;AAED5H,eAAUvI,WAAWyQ,KAAX,CAAiBxQ,OAAjB,EAA0B,UAACW,GAAD,EAAMC,QAAN,EAAmB;AACnD,aAAID,GAAJ,EAAS;AACL,oBAAO2H,QAAQkB,KAAR,CAAc,YAAM;AACvBxE,iCAAgBrE,GAAhB;AACH,cAFM,CAAP;AAGH;AACDuP,eAAMtP,QAAN;AACA;AACA,aAAK0H,QAAQmI,KAAR,GAAgB,CAAjB,IAAwBP,IAAIrP,MAAJ,CAAWiG,QAAX,IAAuB9G,QAAQiE,eAA3D,EAA6E;AACzEqE,qBAAQkB,KAAR,CAAc8G,QAAd;AACH,UAFD,MAEO;AACHpM,wBAAWgM,GAAX;AACH;AACJ,MAbS,CAAV;AAcA5H,aAAQkB,KAAR,CAAcxJ,QAAQ+D,WAAR,GAAsB,GAApC,EAAyCuM,QAAzC;AACH;;AAED;AACA;AACA;;AAEA;;;;AAIAvQ,YAAWE,CAAX,GAAe;AACXC,aAAQ,gBAAMC,MAAN,CAAa,EAAb,EAAiBX,aAAjB,CADG;AAEX;AACAkF,SAAI;AAHO,EAAf;;AAMA;AACA3E,YAAW2Q,cAAX,CAA0B;AACtB1I,eAAU,WADY;AAEtB/F,UAAK,4BAFiB;AAGtBsF,oBAAe,UAHO;AAItBO,aAAQ;AACJ6I,aAAI,IADA;AAEJ9P,iBAAQ;AACJiB,uBAAU,UADN;AAEJC,wBAAW;AAFP,UAFJ;AAMJyN,kBAAS;AACLoB,mBAAM,MADD;AAELC,oBAAO,aAFF;AAGLC,wBAAW,aAHN;AAILC,yBAAY,UAJP;AAKLrB,0BAAa,cALR;AAMLE,sBAAS,cANJ;AAOL/N,qBAAQ;AAPH,UANL;AAeJyC,mBAAU;AACNqF,iBAAI;AADE;AAfN;AAJc,EAA1B;;AAyBA;AACA;AACA;;mBAEe5J,U;;AAEf;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;;;;;;;;;;;;;;;;;;;;;AAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5yEA,KAAIiR,YAAY5I,OAAO6I,SAAP,CAAiBC,QAAjC;;AAEA;;;;;;;;;AASA,KAAMC,QAAQ;AAEVhN,SAFU,kBAEH,CAAE,CAFC;;;AAIV;AACA;AACA;;AAEA;;;;;;;AAOA1D,aAfU,oBAeDuN,KAfC,EAeM;AACZ,gBAAO,OAAOA,KAAP,KAAiB,QAAxB;AACH,MAjBS;AAmBV7F,gBAnBU,uBAmBE6F,KAnBF,EAmBS;AACf,gBAAO,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,MAAMoD,IAAN,GAAazB,MAAb,GAAsB,CAA1D;AACH,MArBS;;;AAuBV;;;;;;;AAOApM,aA9BU,oBA8BDyK,KA9BC,EA8BM;AACZ,gBAAO,OAAOA,KAAP,KAAiB,QAAxB;AACH,MAhCS;;;AAkCV;;;;;;;AAOAQ,aAzCU,oBAyCDR,KAzCC,EAyCM;AACZ,aAAIqD,cAAcrD,KAAd,yCAAcA,KAAd,CAAJ;AACA,gBAAOsD,QAAQtD,KAAR,MAAmBqD,SAAS,QAAT,IAAqBA,SAAS,UAAjD,CAAP;AACH,MA5CS;;;AA8CV;;;;;;;AAOA7O,eArDU,sBAqDCwL,KArDD,EAqDQ;AACd,gBAAO,OAAOA,KAAP,KAAiB,UAAxB;AACH,MAvDS;;;AAyDV;;;;;;;AAOAC,YAhEU,mBAgEFD,KAhEE,EAgEK;AACX,gBAAOsD,QAAQtD,KAAR,KAAkBgD,UAAUO,IAAV,CAAevD,KAAf,MAA0B,gBAAnD;AACH,MAlES;;;AAoEV;;;;;;;AAOA1L,kBA3EU,yBA2EIkP,KA3EJ,EA2EW;AACjB,gBAAOL,MAAMlD,OAAN,CAAcuD,KAAd,KAAwBA,MAAM7B,MAAN,GAAe,CAA9C;AACH,MA7ES;;;AA+EV;;;;;;;AAOAtP,kBAtFU,yBAsFI2N,KAtFJ,EAsFW;AACjB,gBAAOsD,QAAQtD,KAAR,KACA,QAAOA,KAAP,yCAAOA,KAAP,OAAiB,QADjB,IAEAgD,UAAUO,IAAV,CAAevD,KAAf,MAA0B,iBAFjC;AAGH,MA1FS;;;AA4FV;;;;;;;AAOAyD,WAnGU,kBAmGHzD,KAnGG,EAmGI;AACV,gBAAOsD,QAAQtD,KAAR,KAAkBgD,UAAUO,IAAV,CAAevD,KAAf,MAA0B,eAAnD;AACH,MArGS;;;AAuGV;;;;;;;AAOA3K,cA9GU,qBA8GAqO,MA9GA,EA8GQ;AACd,aAAI,CAACA,MAAL,EAAa,OAAO,KAAP;AACb,gBAAOA,kBAAkBC,WAAlB,IACC,QAAOD,MAAP,yCAAOA,MAAP,OAAkB,QAAlB,IAA8BA,OAAOE,QAAP,KAAoB,CAD1D;AAEH,MAlHS;;;AAoHV;;;;;;;AAOAtO,WA3HU,kBA2HHoO,MA3HG,EA2HK;AACX,aAAI,CAACA,MAAL,EAAa,OAAO,KAAP;AACb,gBAAOA,kBAAkBG,IAAlB,IACC,QAAOH,MAAP,yCAAOA,MAAP,OAAkB,QAAlB,IAA8B,OAAOA,OAAOE,QAAd,KAA2B,QADjE;AAEH,MA/HS;;;AAiIV;;;;;;;;AAQA5O,mBAzIU,0BAyIK0O,MAzIL,EAyIa;AACnB,aAAI,CAACA,MAAL,EAAa,OAAO,KAAP;AACb,gBAAQ,YAAY/J,MAAZ,IAAsB+J,kBAAkB/J,OAAOmK,MAA/C,IAAyDR,QAAQI,OAAO,CAAP,CAAR,CAAjE;AACI;AACA;AACP,MA9IS;;;AAgJV;;;;;;;AAOA5E,oBAvJU,2BAuJMkB,KAvJN,EAuJa;AACnB,gBAAOsD,QAAQtD,KAAR,KAAkBgD,UAAUO,IAAV,CAAevD,KAAf,MAA0B,wBAAnD;AACH,MAzJS;;;AA2JV;;;;;;;AAOA+D,YAlKU,mBAkKF/D,KAlKE,EAkKK;AACX,gBAAQA,iBAAiBgE,KAAlB,IAA4Bb,MAAMrE,eAAN,CAAsBkB,KAAtB,CAAnC;AACH,MApKS;;;AAsKV;AACA;AACA;;AAEA;;;;;;;AAOAiE,gBAjLU,uBAiLEC,GAjLF,EAiLO;AACb,gBAAOA,IAAIC,OAAJ,CAAY,OAAZ,EAAqB,EAArB,CAAP;AACH,MAnLS;;;AAqLV;;;;;;;AAOAC,mBA5LU,0BA4LKF,GA5LL,EA4LU;AAChB,gBAAOA,IAAIC,OAAJ,CAAY,aAAZ,EAA2B,EAA3B,CAAP;AACH,MA9LS;;;AAgMV;;;;;;;;;;;;AAYAnM,gBA5MU,uBA4ME/D,GA5MF,EA4MOvC,KA5MP,EA4Mc;AACpB,aAAI2S,UAAJ;AACA,aAAI3S,UAAUiD,SAAV,IAAuBjD,UAAU,IAArC,EAA2C;AACvC2S,iBAAI1K,OAAO/G,QAAP,CAAgB0R,QAApB;AACH,UAFD,MAEO;AACHD,iBAAI3S,QAAQ,QAAR,GAAmB,OAAvB;AACH;AACDuC,eAAMkP,MAAMiB,cAAN,CAAqBnQ,GAArB,CAAN;AACA,gBAAUoQ,CAAV,UAAgBpQ,GAAhB;AACH,MArNS;;;AAuNV;;;;;;;AAOAsQ,aA9NU,oBA8NDL,GA9NC,EA8NI;AACV,gBAAOA,IAAIC,OAAJ,CAAY,kBAAZ,EAAgC,IAAhC,CAAP;AACH,MAhOS;;;AAkOV;;;;;;;;AAQAK,cA1OU,qBA0OAN,GA1OA,EA0OK;AACX,gBAAO7P,mBAAmB6P,GAAnB,EAAwBC,OAAxB,CAAgC,MAAhC,EAAwC,GAAxC,CAAP;AACH,MA5OS;;;AA8OV;;;;;;;;AAQAM,cAtPU,qBAsPAP,GAtPA,EAsPK;AACX,gBAAOQ,mBAAmBR,IAAIC,OAAJ,CAAY,KAAZ,EAAmB,KAAnB,CAAnB,CAAP;AACH,MAxPS;;;AA0PV;;;;;;;;;;AAUAjB,aApQU,oBAoQDlD,KApQC,EAoQM;AACZ,aAAIA,UAAU,IAAV,IAAkBA,UAAUrL,SAAhC,EAA2C,OAAO,EAAP;AAC3C,aAAIqL,MAAMkD,QAAN,IAAkBC,MAAM3O,UAAN,CAAiBwL,MAAMkD,QAAvB,CAAtB,EAAwD;AACpD,oBAAOlD,MAAMkD,QAAN,EAAP;AACH;AACD,gBAAOlP,OAAOgM,KAAP,CAAP;AACH,MA1QS;;;AA4QV;;;;;;;AAOA2E,iBAnRU,wBAmRGC,GAnRH,EAmRQ;AACd,aAAI,CAACA,GAAD,IAAQ,CAACzB,MAAM5N,QAAN,CAAeqP,GAAf,CAAb,EAAkCA,MAAM,CAAN;AAClCA,eAAM,CAAC/G,KAAK8B,GAAL,CAASiF,GAAT,CAAP;AACA,gBAAO/G,KAAKgH,MAAL,GAAc3B,QAAd,CAAuB,EAAvB,EAA2B4B,KAA3B,CAAiCF,GAAjC,CAAP;AACH,MAvRS;;;AAyRV;;;;;;;;;;;;;;;AAeA7I,SAxSU,gBAwSLmI,GAxSK,EAwSAlS,OAxSA,EAwSS;AACfA,mBAAUmR,MAAMhR,MAAN,CAAa;AACnB4S,oBAAO,IADY;AAEnB/I,mBAAM;AAFa,UAAb,EAGPhK,OAHO,CAAV;AAIA,aAAIsK,IAAItK,QAAQgK,IAAR,GAAe,GAAf,GAAqB,EAA7B;AAAA,aACIgJ,IAAId,IAAIe,KAAJ,CAAU,UAAV,EAAsBC,IAAtB,CAA2B5I,CAA3B,IAAgCA,CADxC;AAEA,gBAAOtK,QAAQ+S,KAAR,GAAgBC,EAAEG,WAAF,EAAhB,GAAkCH,CAAzC;AACH,MAhTS;;;AAkTV;;;;;;;;;;;;;;;;;;;AAmBAtG,WArUU,kBAqUHG,GArUG,EAqUE7M,OArUF,EAqUW;AACjB,aAAI,CAACmR,MAAM9Q,aAAN,CAAoBwM,GAApB,CAAD,IAA6BzE,OAAOgL,IAAP,CAAYvG,GAAZ,EAAiB8C,MAAjB,KAA4B,CAA7D,EAAgE;AAC5D,oBAAO,EAAP;AACH;;AAED3P,mBAAUmR,MAAMhR,MAAN,CAAa;AACnBkT,qBAAQ,IADW;AAEnBC,uBAAU,GAFS;AAGnBC,wBAAW,GAHQ;AAInBC,sBAAS7Q,SAJU;AAKnB8Q,sBAAS9Q;AALU,UAAb,EAMP3C,OANO,CAAV;;AAQA,aAAI0M,SAAS,EAAb;AAAA,aACIgH,MAAMvC,MAAMlD,OAAN,CAAcjO,QAAQwT,OAAtB,IAAiCxT,QAAQwT,OAAzC,GAAmD,IAD7D;AAAA,aAEIG,MAAM,CAACD,GAAD,IAAQvC,MAAMlD,OAAN,CAAcjO,QAAQyT,OAAtB,CAAR,GAAyCzT,QAAQyT,OAAjD,GAA2D,IAFrE;AAGAtC,eAAMyC,KAAN,CAAY/G,GAAZ,EAAiB,UAACmB,KAAD,EAAQnO,GAAR,EAAgB;AAC7B,iBAAI,CAAC,CAAC6T,GAAD,IAAQA,IAAIG,OAAJ,CAAYhU,GAAZ,KAAoB,CAA7B,MACQ,CAAC8T,GAAD,IAAQA,IAAIE,OAAJ,CAAYhU,GAAZ,IAAmB,CADnC,CAAJ,EAC2C;AACvC,qBAAIiU,IAAI3C,MAAMD,QAAN,CAAelD,KAAf,CAAR;AACA8F,qBAAI9T,QAAQqT,MAAR,GAAiBlC,MAAMqB,SAAN,CAAgBsB,CAAhB,CAAjB,GAAsCA,CAA1C;AACA,qBAAInH,IAAI3M,QAAQqT,MAAR,GAAiBlC,MAAMqB,SAAN,CAAgB3S,GAAhB,CAAjB,GAAwCA,GAAhD;AACA6M,wBAAOqH,IAAP,CAAYpH,IAAI3M,QAAQsT,QAAZ,GAAuBQ,CAAnC;AACH;AACJ,UARD;;AAUA,gBAAOpH,OAAOwG,IAAP,CAAYlT,QAAQuT,SAApB,CAAP;AACH,MAhWS;;;AAkWV;;;;;;;AAOAS,oBAzWU,2BAyWMC,QAzWN,EAyWgB;AACtBA,oBAAW9C,MAAMoB,QAAN,CAAe0B,QAAf,CAAX;AACA,aAAIC,SAASD,SAASE,KAAT,CAAe,GAAf,CAAb;AAAA,aACIhK,IAAIxC,MADR;AAEA,aAAIuM,OAAO,CAAP,MAAc,QAAd,IAA0BA,OAAO,CAAP,MAAc,UAA5C,EAAwD;AACpDA,oBAAOE,KAAP;AACH;AACDF,gBAAOG,OAAP,CAAe,gBAAQ;AACnBlK,iBAAIA,EAAEmK,IAAF,CAAJ;AACH,UAFD;AAGA,gBAAOnK,CAAP;AACH,MApXS;;;AAsXV;AACA;AACA;;AAEA;;;;;;;;;;;;;AAaAyJ,UAvYU,iBAuYJ/G,GAvYI,EAuYCzM,QAvYD,EAuYW;AACjB,aAAIuM,UAAJ;AACA,cAAKA,CAAL,IAAUE,GAAV,EAAe;AACX;AACA,iBAAIzM,SAASyM,IAAIF,CAAJ,CAAT,EAAiBA,CAAjB,EAAoBE,GAApB,MAA6B,KAAjC,EAAwC;AAC3C;AACJ,MA7YS;;;AA+YV;;;;;;;;;;;;;;AAcA1M,WA7ZU,kBA6ZHqK,WA7ZG,EA6ZsB;AAC5B,aAAI,CAAC2G,MAAM3C,QAAN,CAAehE,WAAf,CAAL,EAAkC,OAAO,EAAP;AAClC,aAAI3K,YAAJ;AAAA,aAASmO,cAAT;;AAF4B,2CAATuG,OAAS;AAATA,oBAAS;AAAA;;AAG5BA,iBAAQF,OAAR,CAAgB,kBAAU;AACtB,kBAAKxU,GAAL,IAAYoH,MAAZ,EAAoB;AAAE;AAClB+G,yBAAQ/G,OAAOpH,GAAP,CAAR;AACA,qBAAIsR,MAAMlD,OAAN,CAAcD,KAAd,CAAJ,EAA0B;AACtBxD,iCAAY3K,GAAZ,IAAmBmO,MAAMwG,MAAN,EAAnB;AACH,kBAFD,MAEO,IAAIrD,MAAMM,MAAN,CAAazD,KAAb,CAAJ,EAAyB;AAC5BxD,iCAAY3K,GAAZ,IAAmB,IAAI4U,IAAJ,CAASzG,KAAT,CAAnB;AACH,kBAFM,MAEA,IAAImD,MAAM3O,UAAN,CAAiBwL,KAAjB,CAAJ,EAA6B;AAAE;AAClCxD,iCAAY3K,GAAZ,IAAmBmO,KAAnB;AACH,kBAFM,MAEA,IAAImD,MAAM3C,QAAN,CAAeR,KAAf,CAAJ,EAA2B;AAC9BxD,iCAAY3K,GAAZ,IAAmBsR,MAAMhR,MAAN,CAAa,EAAb,EAAiB6N,KAAjB,CAAnB;AACH,kBAFM,MAEA;AACHxD,iCAAY3K,GAAZ,IAAmBmO,KAAnB;AACH;AACJ;AACJ,UAfD;AAgBA,gBAAOxD,WAAP;AACH,MAjbS;;;AAmbV;;;;;;;;;;;;;;;;;AAiBA5C,UApcU,iBAocJiF,GApcI,EAocC7M,OApcD,EAocU;AAChB,aAAI,CAAC6M,GAAL,EAAU,OAAO,EAAP;;AAEV,aAAIsE,MAAMlD,OAAN,CAAcjO,OAAd,CAAJ,EAA4B;AACxBA,uBAAU,EAAEoT,MAAMpT,OAAR,EAAV;AACH;AACDA,mBAAUmR,MAAMhR,MAAN,CAAa;AACnBiT,mBAAM,IADa;AAEnBrK,kBAAK;AAFc,UAAb,EAGP/I,OAHO,CAAV;;AAKA,aAAIwT,gBAAJ;AAAA,aACIkB,SAAS,EADb;;AAGAvD,eAAMyC,KAAN,CAAY/G,GAAZ,EAAiB,UAACmB,KAAD,EAAQnO,GAAR,EAAgB;AAC7B2T,uBAAUxT,QAAQoT,IAAR,GACJpT,QAAQoT,IAAR,CAAaS,OAAb,CAAqBhU,GAArB,KAA6B,CADzB,GAEHG,QAAQ+I,GAAR,IAAe8D,IAAI8H,cAAJ,CAAmB9U,GAAnB,CAAhB,IAA4C,CAACG,QAAQ+I,GAF3D;AAGA,iBAAIyK,OAAJ,EAAa;AACT,qBAAIrC,MAAM3C,QAAN,CAAeR,KAAf,CAAJ,EAA2B;AACvB0G,4BAAO7U,GAAP,IAAcsR,MAAMvJ,KAAN,CAAYoG,KAAZ,EAAmBhO,OAAnB,CAAd;AACH,kBAFD,MAEO;AACH0U,4BAAO7U,GAAP,IAAcmO,KAAd;AACH;AACJ;AACJ,UAXD;AAYA,gBAAO0G,MAAP;AACH,MA/dS;;;AAieV;;;;;;;;;;;;AAYA3M,gBA7eU,uBA6eE8E,GA7eF,EA6eO/E,MA7eP,EA6ee;AACrB,aAAI8M,SAAS,EAAb;AACAzD,eAAMyC,KAAN,CAAY9L,MAAZ,EAAoB,UAACkG,KAAD,EAAQnO,GAAR,EAAgB;AAChC,iBAAIsR,MAAM9Q,aAAN,CAAoB2N,KAApB,CAAJ,EAAgC;AAC5B4G,wBAAO/U,GAAP,IAAcsR,MAAMpJ,WAAN,CAAkB8E,GAAlB,EAAuBmB,KAAvB,CAAd;AACH,cAFD,MAEO;AACH4G,wBAAO/U,GAAP,IAAcgN,IAAImB,KAAJ,CAAd;AACH;AACJ,UAND;AAOA,gBAAO4G,MAAP;AACH,MAvfS;;;AAyfV;AACA;AACA;;AAEA;;;;;;;;;;AAUAzG,kBAvgBU,yBAugBI+D,GAvgBJ,EAugBS;AACf,aAAI/H,IAAI,IAAR;AACA,aAAI;AACAA,iBAAI9D,KAAKwO,KAAL,CAAW3C,GAAX,CAAJ;AACH,UAFD,CAEE,OAAOtP,CAAP,EAAU,CAAE;AACd,gBAAOuH,CAAP;AACH,MA7gBS;;;AA+gBV;;;;;;;;;;;;AAYAnD,SA3hBU,gBA2hBL8N,OA3hBK,EA2hBI;AACV,aAAIC,KAAKN,KAAKO,GAAL,EAAT;AACA,gBAAOF,UAAUG,SAASF,KAAK,IAAd,EAAoB,EAApB,CAAV,GAAoCA,EAA3C;AACH;AA9hBS,EAAd;;mBAkiBe5D,K;;;;;;;;;;;;;;AC9iBf;;;;;;;;AAEA;;;;;;KAMM+D,K;;;;;;;;;AAEF;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAqGalV,O,EAASI,Q,EAAU;AAC5B,iBAAI0D,gBAAJ;;AAEA1D,wBAAW,gBAAMoC,UAAN,CAAiBpC,QAAjB,IACLA,QADK,GAEL,gBAAM+D,IAFZ;;AAIA,iBAAI,gBAAM1D,QAAN,CAAeT,OAAf,CAAJ,EAA6B;AACzBA,2BAAU,EAAEiC,KAAKjC,OAAP,EAAV;AACH;;AAED,iBAAI,gBAAMK,aAAN,CAAoBL,OAApB,CAAJ,EAAkC;AAC9BA,2BAAU,gBAAMG,MAAN,CAAa;AACnB;AACAkH,4BAAO,IAFY;AAGnB8N,4BAAO,KAHY;AAInB;AACArR,8BAAS,CALU;AAMnB4I,6BAAQ,EANW;AAOnB;AACA;AACApF,4BAAO;AATY,kBAAb,EAUPtH,OAVO,CAAV;AAWH,cAZD,MAYO;AACH,wBAAOI,SAAS,IAAI4R,KAAJ,CAAU,uCAAV,CAAT,CAAP;AACH;;AAED,iBAAI,gBAAMvR,QAAN,CAAeT,QAAQiC,GAAvB,MAAgC,KAAhC,IAAyCjC,QAAQiC,GAAR,CAAYmP,IAAZ,OAAuB,EAApE,EAAwE;AACpE,wBAAOhR,SAAS,IAAI4R,KAAJ,CAAU,4BAAV,CAAT,CAAP;AACH;;AAED,iBAAIoD,SAAStS,SAASuS,aAAT,CAAuB,QAAvB,CAAb;AAAA,iBACIC,aAAa,gBAAM7U,QAAN,CAAeT,QAAQuH,aAAvB,KACNvH,QAAQuH,aAAR,CAAsB6J,IAAtB,OAAiC,EAF5C;AAAA,iBAGImE,iBAHJ;AAAA,iBAIIC,aAJJ;AAAA,iBAKIC,cAAc,gBAAMhV,QAAN,CAAeT,QAAQwH,QAAvB,KACPxH,QAAQwH,QAAR,KAAqB,QADd,IAEPxH,QAAQwH,QAAR,KAAqB,UAFd,IAGPxH,QAAQwH,QAAR,CAAiB4J,IAAjB,OAA4B,EARvC;;AAUA,iBAAIkE,UAAJ,EAAgB;AACZC,4BAAW,YAAY,gBAAM5C,YAAN,CAAmB,EAAnB,CAAvB;AACA3S,yBAAQ0M,MAAR,CAAe1M,QAAQuH,aAAvB,IAAwCkO,cAC/BzV,QAAQwH,QADuB,SACX+N,QADW,GAElCA,QAFN;AAGH;AACD,iBAAIG,QAAQ,gBAAMhJ,MAAN,CAAa1M,QAAQ0M,MAArB,KAAgC,EAA5C;AAAA,iBACIiJ,QAAQ3V,QAAQiC,GAAR,CAAY4R,OAAZ,CAAoB,GAApB,KAA4B,CAA5B,GAAgC,GAAhC,GAAsC,GADlD;AAAA,iBAEI5R,MAAMyT,aAAW1V,QAAQiC,GAAnB,GAAyB0T,KAAzB,GAAiCD,KAAjC,GAA2C1V,QAAQiC,GAF7D;AAGA;;AAEA,sBAAS2T,MAAT,CAAgBjV,GAAhB,EAAqBkV,MAArB,EAA6BhJ,GAA7B,EAAkC;AAC9B,qBAAI/I,OAAJ,EAAa;AACTgS,kCAAahS,OAAb;AACAA,+BAAU,IAAV;AACH;AACD,qBAAI,CAAC+R,UAAU7V,QAAQsH,KAAnB,KAA6B8N,OAAOW,UAAxC,EAAoD;AAChDX,4BAAOW,UAAP,CAAkBC,WAAlB,CAA8BZ,MAA9B;AACH;AACD;AACA,qBAAIK,WAAJ,EAAiB;AACb,4BAAOD,KAAKD,QAAL,CAAP;AACH;AACDnV,0BAASO,GAAT,EAAckM,GAAd;AACH;;AAED,iBAAI0I,QAAJ,EAAc;AACV,qBAAIU,KAAK,SAALA,EAAK,MAAO;AACZL,4BAAO,IAAP,EAAa,KAAb,EAAoB/I,GAApB;AACH,kBAFD;AAGA2I,wBAAOC;AACH;AADG,mBAED,gBAAMzB,eAAN,CAAsBhU,QAAQwH,QAA9B,CAFC,CAEuC;AAFvC,mBAGDG,MAHN;AAIA6N,sBAAKD,QAAL,IAAiBU,EAAjB;AACH,cATD,MASO,IAAIb,OAAOc,UAAX,EAAuB;AAAE;AAC5Bd,wBAAOe,kBAAP,GAA4B,YAAM;AAC9B,yBAAIf,OAAOc,UAAP,KAAsB,QAAtB,IACOd,OAAOc,UAAP,KAAsB,UADjC,EAC6C;AACzCd,gCAAOe,kBAAP,GAA4B,IAA5B;AACAP,gCAAO,IAAP;AACH;AACJ,kBAND;AAOH,cARM,MAQA;AAAE;AACLR,wBAAOgB,MAAP,GAAgB,YAAM;AAClBR,4BAAO,IAAP;AACH,kBAFD;AAGH;;AAEDR,oBAAOiB,OAAP,GAAiB,iBAAS;AACtB,qBAAIC,SAAS,8BAA8B,gBAAMrE,WAAN,CAAkBjS,QAAQiC,GAA1B,CAA3C;AACA,qBAAI2C,KAAJ,EAAW;AACP0R,+BAAU,QAAQ1R,MAAMlB,OAAN,IAAiBkB,KAAzB,CAAV;AACH;AACDgR,wBAAO,IAAI5D,KAAJ,CAAUsE,MAAV,CAAP;AACH,cAND;;AAQA,iBAAItW,QAAQqR,IAAZ,EAAkB;AACd+D,wBAAO/D,IAAP,GAAcrR,QAAQqR,IAAtB;AACH;AACD,iBAAIrR,QAAQuW,OAAZ,EAAqB;AACjBnB,wBAAOmB,OAAP,GAAiBvW,QAAQuW,OAAzB;AACH;AACD,iBAAIvW,QAAQqH,KAAZ,EAAmB;AACf+N,wBAAO/N,KAAP,GAAe,IAAf;AACH;AACD,iBAAIrH,QAAQmV,KAAZ,EAAmB;AACfC,wBAAOD,KAAP,GAAe,IAAf;AACH;AACD,iBAAInV,QAAQwW,WAAZ,EAAyB;AACrBpB,wBAAOoB,WAAP,GAAqBxW,QAAQwW,WAA7B;AACH;;AAEDpB,oBAAOqB,GAAP,GAAaxU,GAAb;AACAa,sBAAS4T,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,EAAyCC,WAAzC,CAAqDvB,MAArD;;AAEA;AACA,iBAAI,gBAAM7R,QAAN,CAAevD,QAAQ8D,OAAvB,KAAmC9D,QAAQ8D,OAAR,GAAkB,CAAzD,EAA4D;AACxDA,2BAAU8S,WAAW,YAAM;AACvBxB,4BAAOqB,GAAP,GAAa,EAAb;AACAb,4BAAO,IAAI5D,KAAJ,CAAU,sBAAV,CAAP,EAA0C,IAA1C;AACH,kBAHS,EAGPhS,QAAQ8D,OAHD,CAAV;AAIH;AACJ;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAmDW9D,O,EAASI,Q,EAAU;AAC1B,iBAAIoG,YAAJ;AAAA,iBAAS7F,YAAT;;AAEA,iBAAI,oBAAoBgH,MAAxB,EAAgC;AAC5BnB,uBAAM,IAAIqQ,cAAJ,EAAN;AACH,cAFD,MAEO;AACH,uBAAM,IAAI7E,KAAJ,CAAU,kCAAV,CAAN;AACH;;AAED,iBAAI8E,cAAc,gBAAMtU,UAAN,CAAiBpC,QAAjB,CAAlB;AACAA,wBAAW0W,cACL1W,QADK,GAEL,gBAAM+D,IAFZ;;AAIA,iBAAI,gBAAM1D,QAAN,CAAeT,OAAf,CAAJ,EAA6B;AACzBA,2BAAU,EAAEiC,KAAKjC,OAAP,EAAV;AACH;;AAED,iBAAI,gBAAMK,aAAN,CAAoBL,OAApB,CAAJ,EAAkC;AAC9BA,2BAAU,gBAAMG,MAAN,CAAa;AACnB4W,6BAAQ,KADW;AAEnB3Q,2BAAMzD,SAFa;AAGnB0E,4BAAO,IAHY;AAInBvD,8BAAS,CAJU,EAIP;AACZkT,sCAAiB,KALE;AAMnBC,+BAAUtU,SANS;AAOnBuU,+BAAU,EAPS;AAQnBC,+BAAU;AARS,kBAAb,EASPnX,OATO,CAAV;AAUH,cAXD,MAWO;AACHI,0BAAS,IAAI4R,KAAJ,CAAU,uCAAV,CAAT;AACH;;AAED,iBAAI,gBAAMvR,QAAN,CAAeT,QAAQiC,GAAvB,MAAgC,KAApC,EAA2C;AACvC7B,0BAAS,IAAI4R,KAAJ,CAAU,4BAAV,CAAT;AACH;;AAEDhS,qBAAQkX,QAAR,GAAmBlV,OAAOhC,QAAQkX,QAAf,CAAnB;AACAlX,qBAAQmX,QAAR,GAAmBnV,OAAOhC,QAAQmX,QAAf,CAAnB;AACAnX,qBAAQ+W,MAAR,GAAiB/W,QAAQ+W,MAAR,CAAe5D,WAAf,EAAjB;AACA,iBAAInT,QAAQ+W,MAAR,KAAmB,MAAnB,IAA6B/W,QAAQ+W,MAAR,KAAmB,KAApD,EAA2D;AACvD/W,yBAAQoG,IAAR,GAAezD,SAAf;AACH;AACD;;AAEA,iBAAImU,WAAJ,EAAiB;AACbtQ,qBAAI2P,kBAAJ,GAAyB,YAAM;AAC3B,yBAAI3P,IAAI0P,UAAJ,KAAmBhB,MAAMkC,eAAN,CAAsBC,IAA7C,EAAmD;AAC/C,6BAAI7Q,IAAI4E,MAAJ,KAAe,GAAnB,EAAwB;AACpBhL,sCAAS,IAAT,EAAeoG,GAAf;AACH,0BAFD,MAEO;AACH;AACA;AACA,iCAAI8Q,cAAc9Q,IAAI4E,MAAJ,KAAe,CAAf,GACZ,oEADY,GAEZ,EAFN;AAGAzK,mCAAM,IAAIqR,KAAJ,mCAA0CxL,IAAI4E,MAA9C,GAAuDkM,WAAvD,CAAN;AACA;AACAlX,sCAASO,GAAT,EAAc6F,GAAd;AACH;AACJ;AACJ,kBAfD;;AAiBA,qBAAI,gBAAMjD,QAAN,CAAevD,QAAQ8D,OAAvB,KAAmC9D,QAAQ8D,OAAR,GAAkB,CAAzD,EAA4D;AACxD0C,yBAAI1C,OAAJ,GAAc9D,QAAQ8D,OAAtB;AACA0C,yBAAI+Q,SAAJ,GAAgB,YAAM;AAClB;AACA5W,+BAAM,IAAIqR,KAAJ,CAAU,4BAAV,CAAN;AACA5R,kCAASO,GAAT,EAAc6F,GAAd;AACH,sBAJD;AAKH;AACJ;AACD;AACAA,iBAAI+I,IAAJ,CAASvP,QAAQ+W,MAAjB,EAAyB/W,QAAQiC,GAAjC,EAAsCjC,QAAQqH,KAA9C,EAAqDrH,QAAQkX,QAA7D,EAAuElX,QAAQmX,QAA/E;;AAEA;AACA;AACA,iBAAI,gBAAM9W,aAAN,CAAoBL,QAAQmG,OAA5B,CAAJ,EAA0C;AACtCiC,wBAAOgL,IAAP,CAAYpT,QAAQmG,OAApB,EAA6BkO,OAA7B,CAAqC,eAAO;AACxC,yBAAIrG,QAAQhO,QAAQmG,OAAR,CAAgBtG,GAAhB,CAAZ;AACA2G,yBAAIgR,gBAAJ,CAAqB3X,GAArB,EAA0BmO,KAA1B;AACH,kBAHD;AAIH;;AAED;AACA,iBAAIhO,QAAQiX,QAAZ,EAAsB;AAClBzQ,qBAAIiR,gBAAJ,CAAqBzX,QAAQiX,QAA7B;AACH;;AAEDzQ,iBAAIkR,IAAJ,CAAS1X,QAAQoG,IAAjB;AACH;;AAED;;;;;;;;;;;;;;;;;6BAcWpG,O,EAASI,Q,EAAU;AAC1B,oBAAO8U,MAAM1O,GAAN,CAAUxG,OAAV,EAAmBI,QAAnB,CAAP;AACH;;AAED;;;;;;;;;;;;;;;;;8BAcYJ,O,EAASI,Q,EAAU;AAC3B,oBAAOuX,KAAK,MAAL,EAAa3X,OAAb,EAAsBI,QAAtB,CAAP;AACH;;AAED;;;;;;;;;;;;;;;;;6BAcWJ,O,EAASI,Q,EAAU;AAC1B,oBAAOuX,KAAK,KAAL,EAAY3X,OAAZ,EAAqBI,QAArB,CAAP;AACH;;AAED;;;;;;;;;;;;;;;;;iCAccJ,O,EAASI,Q,EAAU;AAC7B,oBAAOuX,KAAK,QAAL,EAAe3X,OAAf,EAAwBI,QAAxB,CAAP;AACH;;;;;;AAGL;;;;;AAGA,UAASuX,IAAT,CAAcZ,MAAd,EAAsB/W,OAAtB,EAA+BI,QAA/B,EAAyC;AACrCJ,eAAU,gBAAMS,QAAN,CAAeT,OAAf,IACJ,EAAEiC,KAAKjC,OAAP,EADI,GAEJA,WAAW,EAFjB;AAGAA,aAAQ+W,MAAR,GAAiBA,MAAjB;AACA,YAAO7B,MAAM1O,GAAN,CAAUxG,OAAV,EAAmBI,QAAnB,CAAP;AACH;;AAED;;;;;;;AAOA8U,OAAMkC,eAAN,GAAwB;AACpB;;;;AAIAQ,aAAQ,CALY;AAMpB;;;;AAIAC,aAAQ,CAVY;AAWpB;;;;AAIAC,uBAAkB,CAfE;AAgBpB;;;;AAIAC,cAAS,CApBW;AAqBpB;;;;AAIAV,WAAM;AAzBc,EAAxB;;mBA4BenC,K;;;;;;;;;;;;ACrff;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEA;;;;;;;;AAQA,KAAM8C,YAAY;AAEdC,mBAFc,0BAECpX,MAFD,EAES;AACnB,gBAAO;AACH+F,kBAAK/F,OAAO+F,GAAP,IAAc/F,OAAOiB,QADvB;AAEH+E,kBAAKhG,OAAOgG,GAAP,IAAchG,OAAOkB;AAFvB,UAAP;AAIH,MAPa;AASdmW,qBATc,4BASGrX,MATH,EASW;AACrB,gBAAO;AACHiB,uBAAUjB,OAAOiB,QAAP,IAAmBjB,OAAO+F,GADjC;AAEH7E,wBAAWlB,OAAOkB,SAAP,IAAoBlB,OAAOgG;AAFnC,UAAP;AAIH,MAda;;;AAgBd;AACA6D,gBAjBc,uBAiBFyN,GAjBE,EAiBG;AACbA,eAAM,gBAAMlK,OAAN,CAAckK,GAAd,IAAqBA,GAArB,GAA2B,CAACA,GAAD,CAAjC;AACA,gBAAOA,IAAI5T,GAAJ,CAAQ,aAAK;AAChB,oBAAO,gBAAM9D,QAAN,CAAe0J,CAAf,IAAoBA,CAApB,GAAwB6N,UAAUC,cAAV,CAAyB9N,CAAzB,CAA/B;AACH,UAFM,CAAP;AAGH,MAtBa;AAwBdiO,oBAxBc,2BAwBEC,IAxBF,EAwBQ;AAClB,gBAAO;AACHC,oBAAOD,KAAKC,KADT;AAEHC,uBAAUF,KAAKE,QAFZ;AAGHC,kCAAqBH,KAAKI,kBAHvB,EAG2C;AAC9CC,0BAAaL,KAAKtH,UAJf,EAI2B;AAC9BnB,sBAASyI,KAAKzI,OALX;AAMH/N,qBAAQwW,KAAKxW;AANV,UAAP;AAQH,MAjCa;;;AAmCd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA8W,uBA3Cc,8BA2CK3Y,OA3CL,EA2CciQ,OA3Cd,EA2CuB;AACjC,aAAIvD,SAAS,EAAb;AAAA,aACI9J,IAAI,gBAAM4P,SADd;;AAGA,aAAIvC,OAAJ,EAAa;AACT,iBAAIjQ,QAAQ4Y,OAAZ,EAAqB;AACjBlM,wBAAOqH,IAAP,eAAwB/T,QAAQ4Y,OAAhC;AACH,cAFD,MAEO,IAAI5Y,QAAQ8B,QAAR,IAAoB9B,QAAQ+B,SAAhC,EAA2C;AAC9C2K,wBAAOqH,IAAP,aAAsB/T,QAAQ8B,QAA9B,SAA0C9B,QAAQ+B,SAAlD;AACH;AACJ,UAND,MAMO;AACH,iBAAI/B,QAAQwP,OAAZ,EAAqB;AACjB9C,wBAAOqH,IAAP,cAAuBnR,EAAE5C,QAAQwP,OAAV,CAAvB;AACH;;AAED,iBAAIqJ,WAAWb,UAAUI,eAAV,CAA0BpY,OAA1B,CAAf;AACA6Y,wBAAW,gBAAMnM,MAAN,CAAamM,QAAb,EAAuB,EAAEvF,UAAU,GAAZ,EAAiBC,WAAW,GAA5B,EAAvB,CAAX;AACA7G,oBAAOqH,IAAP,iBAA0B8E,QAA1B;;AAEA,iBAAIC,IAAI9Y,QAAQ+Y,MAAhB;AACA,iBAAI,gBAAM9K,OAAN,CAAc6K,CAAd,KAAoBA,EAAEnJ,MAAF,KAAa,CAArC,EAAwC;AACpCjD,wBAAOqH,IAAP,aAAsB+E,EAAE,CAAF,CAAtB,SAA8BA,EAAE,CAAF,CAA9B,SAAsCA,EAAE,CAAF,CAAtC,SAA8CA,EAAE,CAAF,CAA9C;AACH,cAFD,MAEO,IAAI,gBAAMzY,aAAN,CAAoByY,CAApB,KAA0B1Q,OAAOgL,IAAP,CAAY0F,CAAZ,EAAenJ,MAAf,KAA0B,CAAxD,EAA2D;AAC9DjD,wBAAOqH,IAAP,aAAsB+E,EAAEE,YAAxB,SAAwCF,EAAEG,YAA1C,SAA0DH,EAAEI,YAA5D,SAA4EJ,EAAEK,YAA9E;AACH;AACJ;;AAEDzM,gBAAOqH,IAAP,eAAwB/T,QAAQP,QAAhC;AACAiN,gBAAOqH,IAAP,UAAmB/T,QAAQH,GAA3B;AACA,gBAAO6M,OAAOwG,IAAP,CAAY,GAAZ,CAAP;AACH,MAzEa;;;AA2Ed;AACAkG,yBA5Ec,gCA4EOC,OA5EP,EA4EgB;AAC1B,aAAI,CAAC,gBAAMpL,OAAN,CAAcoL,OAAd,CAAD,IAA2BA,QAAQ1J,MAAR,IAAkB,CAAjD,EAAoD;AAChD,oBAAO;AACH/O,2BAAU,IADP;AAEH4O,0BAAS,IAFN;AAGHf,mCAAkB,EAHf;AAIH4C,uBAAM,IAJH,EAIS;AACZuH,0BAAS;AALN,cAAP;AAOH;;AAED,aAAIU,UAAJ;AAAA,aAAOtN,UAAP;AAAA,aACI7B,IAAI,EADR;AAAA,aAEI/D,OAAOiT,QAAQ,CAAR,CAFX;AAAA,aAGIE,QAAQnT,KAAKoT,kBAHjB;;AAKA,cAAKF,IAAI,CAAT,EAAYA,IAAIC,MAAM5J,MAAtB,EAA8B2J,KAAK,CAAnC,EAAsC;AAClCtN,iBAAIuN,MAAMD,CAAN,CAAJ;AACA,iBAAItN,EAAEyN,KAAF,IAAWzN,EAAEyN,KAAF,CAAQ9J,MAAR,GAAiB,CAAhC,EAAmC;AAC/BxF,mBAAE6B,EAAEyN,KAAF,CAAQ,CAAR,CAAF,IAAgBzN,EAAE0N,SAAlB;AACAvP,mBAAE6B,EAAEyN,KAAF,CAAQ,CAAR,IAAa,IAAf,IAAuBzN,EAAE2N,UAAzB;AACH;AACJ;;AAED,aAAIC,WAAWxT,KAAKwT,QAApB;AACA,gBAAO;AACH/Y,qBAAQ+Y,YAAYA,SAAShZ,QAArB,GAAgC;AACpCkB,2BAAU8X,SAAShZ,QAAT,CAAkBgG,GADQ;AAEpC7E,4BAAW6X,SAAShZ,QAAT,CAAkBiG;AAFO,cAAhC,GAGJ,IAJD;AAKH2I,sBAAS;AACLqK,6BAAY1P,EAAE2P,iBAAF,IACL3P,EAAE4P,OADG,IAEL5P,EAAE6P,UAFG,IAGL7P,EAAE8P,eAHG,IAIL,EALF;AAMLC,+BAAc/P,EAAEgQ,aAAF,IAAmB,EAN5B;AAOLC,yBAAQjQ,EAAEkQ,2BAAF,IACDlQ,EAAEmQ,2BADD,IAEDnQ,EAAEmO,KAFD,IAGD,EAVF;AAWLA,wBAAOnO,EAAEmO,KAAF,IAAW,EAXb;AAYLiC,+BAAcpQ,EAAEoQ,YAAF,IACPpQ,EAAEqQ,2BADK,IAEPrQ,EAAEkQ,2BAFK,IAGP,EAfF;AAgBLI,uBAAMtQ,EAAEuQ,WAAF,IAAiBvQ,EAAEwQ,2BAAnB,IAAkD,EAhBnD;AAiBL/J,uBAAMzG,EAAEoO,QAAF,IAAcpO,EAAEyQ,2BAAhB,IAA+C,EAjBhD;AAkBL/Y,yBAAQsI,EAAEwQ,2BAAF,IACDxQ,EAAEyQ,2BADD,IAED,EApBF;AAqBL7J,6BAAY5G,EAAEuO,WAAF,IAAiB,EArBxB;AAsBL7H,wBAAO1G,EAAEyQ,2BAAF,IAAiC,EAtBnC;AAuBL9J,4BAAW3G,EAAE0Q,6BAAF,IAAmC,EAvBzC;AAwBLjL,0BAASzF,EAAEyF,OAAF,IAAa,EAxBjB;AAyBLF,8BAAavF,EAAE2Q,SAAF,IAAe;AAzBvB,cALN;AAgCHrM,+BAAkBrI,KAAK2U,iBAhCpB;AAiCH1J,mBAAMuI,SAASoB,aAAT,IAA0B,EAjC7B;AAkCHpC,sBAASxS,KAAK6U,QAlCX;AAmCHlU,wBAAW,gBAAMC,IAAN;AAnCR,UAAP;AAqCH,MA1Ia;AA4IdtG,YA5Ic,mBA4INuP,OA5IM,EA4IGlP,IA5IH,EA4ISf,OA5IT,EA4IkBI,QA5IlB,EA4I4B;AACtC,aAAIY,OAAO,EAAX;AACA,aAAI,gBAAMP,QAAN,CAAeT,OAAf,CAAJ,EAA6B;AACzBgB,oBAAO,EAAP;AACA,iBAAIka,OAAOjL,UAAU,SAAV,GAAsB,SAAjC;AACAjP,kBAAKka,IAAL,IAAalb,OAAb;AACH,UAJD,MAIO,IAAI,gBAAMK,aAAN,CAAoBL,OAApB,CAAJ,EAAkC;AACrCgB,oBAAOhB,OAAP;AACH,UAFM,MAEA;AACH,mBAAM,kBAAa,cAASO,IAAT,CAAcC,kBAA3B,CAAN;AACH;;AAED,aAAIyP,OAAJ,EAAa;AACT,iBAAIkL,YAAY,gBAAM5X,QAAN,CAAevD,QAAQ8B,QAAvB,KACT,gBAAMyB,QAAN,CAAevD,QAAQ+B,SAAvB,CADP;AAEA,iBAAI,CAAC,gBAAMtB,QAAN,CAAeT,QAAQ4Y,OAAvB,CAAD,IAAoC,CAACuC,SAAzC,EAAoD;AAChD,uBAAM,kBAAa,cAAS5a,IAAT,CAAcC,kBAA3B,CAAN;AACH;AACJ;;AAEDQ,gBAAO,gBAAMb,MAAN,CAAa;AAChBN,kBAAKkB,KAAKpB,MAAL,CAAYE,GAAZ,IAAmB,EADR;AAEhBJ,uBAAUsB,KAAKtB,QAAL,IAAiB,IAFX;AAGhBqG,kBAAK;AAHW,UAAb,EAIJ9E,IAJI,CAAP;;AAMA,aAAI0U,QAAQsC,UAAUW,kBAAV,CAA6B3X,IAA7B,EAAmCiP,OAAnC,CAAZ;AAAA,aACIhO,MAAM,gBAAM+D,WAAN,CAAkB,gBAAM9D,GAAN,CAAUkZ,cAA5B,EAA4Cra,KAAKrB,KAAjD,CADV;AAAA,aAEIwG,UAAU;AACNjE,kBAAQA,GAAR,SAAeyT;AADT,UAFd;;AAMA,yBAAMlP,GAAN,CAAUN,OAAV,EAAmB,UAACvF,GAAD,EAAM6F,GAAN,EAAc;AAC7B,iBAAI7F,GAAJ,EAAS,OAAOP,SAAS,cAAS6E,MAAT,CAAgBtE,GAAhB,CAAT,EAA+B,IAA/B,CAAP;;AAET,iBAAI8F,WAAW,gBAAM0H,aAAN,CAAoB3H,IAAI4H,YAAxB,CAAf;AAAA,iBACIiN,OAAO,cAAS9P,YAAT,CAAsB9E,QAAtB,CADX;;AAGA,iBAAI4U,IAAJ,EAAU,OAAOjb,SAASib,IAAT,EAAe,IAAf,CAAP;;AAEV5U,wBAAWzG,QAAQ8F,GAAR,GACLW,QADK,GAELuR,UAAUoB,oBAAV,CAA+B3S,SAAS4S,OAAxC,CAFN;AAGAjZ,sBAAS,IAAT,EAAeqG,QAAf;AACH,UAZD;AAaH,MAzLa;;;AA2Ld;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA+E,0BAnOc,iCAmOQ6N,OAnOR,EAmOiB;AAC3B,aAAI,CAAC,gBAAMhZ,aAAN,CAAoBgZ,OAApB,CAAL,EAAmC;AAC/B,oBAAO,IAAP;AACH;;AAED,aAAIlB,MAAM,EAAV;AAAA,aACI/N,UAAUiP,QAAQiC,eADtB;AAAA,aAEIC,QAAQlC,QAAQmC,oBAFpB;AAAA,aAGIC,OAAOpC,QAAQoC,IAHnB;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAI7Y,UAAJ;AACAwH,iBAAQiK,OAAR,CAAgB,UAAChK,MAAD,EAASqR,MAAT,EAAoB;AAChCH,mBAAMlH,OAAN,CAAc,UAACsH,IAAD,EAAOC,MAAP,EAAkB;AAC5BhZ,qBAAI6Y,KAAKC,MAAL,EAAaG,QAAb,CAAsBD,MAAtB,CAAJ;AACAzD,qBAAIpE,IAAJ,CAAS;AACL7K,2BAAMmB,MADD;AAELlB,yBAAIwS,IAFC;AAGL3S,+BAAUpG,EAAEoG,QAHP;AAIL8S,+BAAUlZ,EAAEkZ,QAJP;AAKLC,2BAAMnZ,EAAEmZ,IALH;AAMLhV,gCAAW,gBAAMC,IAAN;AANN,kBAAT;AAQH,cAVD;AAWH,UAZD;;AAcA,gBAAOmR,GAAP;AACH,MAxQa;;;AA0Qd;AACA;AACA5V,sBA5Qc,6BA4QIzC,MA5QJ,EA4QY;AACtB,aAAI,CAACA,MAAL,EAAa,OAAO,EAAP;AACb,aAAI,CAAC,gBAAMmO,OAAN,CAAcnO,MAAd,CAAL,EAA4BA,SAAS,CAACA,MAAD,CAAT;AAC5B,aAAIuQ,SAAS,EAAb;AACAvQ,gBAAOuU,OAAP,CAAe,UAACP,CAAD,EAAIwF,CAAJ,EAAO1N,CAAP,EAAa;AACxB,iBAAIoQ,QAAQ,EAAZ;AACA,iBAAIlI,EAAEmI,OAAN,EAAe;AAAE;AACb,qBAAInI,EAAEmI,OAAF,CAAUtM,MAAV,GAAmB,CAAvB,EAA0B;AAAE;AACxBqM,8BAAS,CAAClI,EAAEa,cAAF,CAAiB,aAAjB,IAAkC,aAAab,EAAEoI,WAAjD,GAA+D,aAAhE,IAAiF,GAA1F;AACAF,8BAAS,CAAClI,EAAEa,cAAF,CAAiB,aAAjB,IAAkC,aAAab,EAAEqI,WAAjD,GAA+D,aAAhE,IAAiF,GAA1F;AACArI,uBAAEmI,OAAF,CAAU5H,OAAV,CAAkB,UAAC+H,GAAD,EAAM9C,CAAN,EAAS1N,CAAT,EAAe;AAC7B,6BAAIyQ,WAAWjU,OAAOgL,IAAP,CAAYgJ,GAAZ,EAAiB,CAAjB,CAAf;AAAA,6BACIE,UAAUF,IAAIC,QAAJ,EAAcnL,QAAd,GAAyBiB,OAAzB,CAAiC,GAAjC,EAAsC,IAAtC,CADd;AAEA6J,kCAASK,WAAW,GAAX,GAAiBC,OAAjB,GAA2B,GAApC;AACH,sBAJD;AAKH;AACJ;AACDjM,oBAAO0D,IAAP,CAAY,WAAW1R,mBAAmB2Z,KAAnB,CAAvB;AACH,UAdD;AAeA,gBAAO3L,OAAO6C,IAAP,CAAY,GAAZ,CAAP;AACH;AAhSa,EAAlB;;mBAoSe8E,S;;;;;;;;;;;ACjTf,KAAMuE,uBAAuB,gCAA7B;;AAEA;;;;;;;;AAQA,KAAMC,QAAQpU,OAAOC,MAAP,CAAc;AACxB;;;;;;;AAOAnG,QAAK;AACD;;;;;AAKAuK,SAAI,iBANH;AAOD;;;;;;AAMAqD,WAAM,iEAbL;AAcD;;;;;;;;;AASAlD,sBAAiB2P,uBAAuB,KAvBvC;AAwBD;;;;;AAKApa,yBAAoBoa,uBAAuB,YA7B1C;AA8BD;;;;;AAKAtW,yBAAoB,+CAnCnB;AAoCD;;;;;AAKAmV,qBAAgB,6CAzCf;AA0CD;;;;;AAKA1R,sBAAiB,8CA/ChB;AAgDD;;;;;AAKA+S,6BAAwB;AArDvB,IARmB;AA+DxB;;;;;;;AAOAvb,cAAW;AACP;;;;;AAKAwb,aAAQ,QAND;AAOP;;;;AAIAvb,cAAS,SAXF;AAYP;;;;AAIAwb,gBAAW,WAhBJ;AAiBP;;;;;AAKAC,cAAS;AAtBF,IAtEa;AA8FxB;;;;;;;AAOA9O,iBAAc;AACV;;;;;;AAMA+O,cAAS,SAPC;AAQV;;;;;;;AAOAC,yBAAoB,oBAfV;AAgBV;;;;;;AAMAC,uBAAkB,kBAtBR;AAuBV;;;;AAIAC,kBAAa;AA3BH,IArGU;AAkIxB;;;;;;;AAOApS,eAAY;AACR;;;;AAIAC,cAAS,SALD;AAMR;;;;;AAKAoS,cAAS,SAXD;AAYR;;;;;AAKAC,gBAAW,WAjBH;AAkBR;;;;;;;;;;;AAWAC,cAAS;AA7BD,IAzIY;AAwKxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOAxU,eAAY;AACR;;;;AAIAC,aAAQ,CALA;AAMR;;;;AAIAwU,eAAU;AAVF,IA5LY;AAwMxB;;;;;;;AAOArP,cAAW;AACP;;;;AAIAsP,UAAK,KALE;AAMP;;;;AAIAC,UAAK,KAVE;AAWP;;;;AAIAC,WAAM,MAfC;AAgBP;;;;AAIAC,YAAO;AApBA,IA/Ma;AAqOxB;;;;;;;;;;AAUAnU,oBAAiB;AACb;;;;;;AAMAC,gBAAW,WAPE;AAQb;;;;;;;AAOAmU,kBAAa;AAfA,IA/OO;AAgQxB;;;;;;;AAOA9b,gBAAa;AACT;;;;;AAKAC,UAAK,KANI;AAOT;;;;;AAKA8b,YAAO,MAZE;AAaT;;;;AAIAC,aAAQ,OAjBC;AAkBT;;;;AAIAC,UAAK,KAtBI;AAuBT;;;;AAIAC,UAAK,KA3BI;AA4BT;;;;AAIAC,mBAAc;AAhCL;AAvQW,EAAd,CAAd;;mBA2SetB,K;;;;;;;;;;;;;;;;ACrTf;;;;;;;;AAEA;;;;;;;;;;;KAWMuB,Q;AAAW;;AAEb;;;;;;;;;;;;;;;;;;AAkBA,yBAAyD;AAAA,aAA7CC,IAA6C,uEAAtCD,SAASxd,IAAT,CAAc0d,aAAwB;AAAA,aAATva,OAAS;;AAAA;;AACrDA,mBAAUA,WAAW1B,OAAOgc,IAAP,CAArB;;AAEA;;;;;;AAMA5V,gBAAO8V,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;AAChCC,yBAAY,KADoB;AAEhCC,uBAAU,KAFsB;AAGhCpQ,oBAAO,UAHyB,CAGd;AAHc,UAApC;;AAMA;;;;;;;AAOA5F,gBAAO8V,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;AAChCC,yBAAY,KADoB;AAEhCC,uBAAU,IAFsB;AAGhCpQ,oBAAOgQ;AAHyB,UAApC;;AAMA;;;;;;AAMA5V,gBAAO8V,cAAP,CAAsB,IAAtB,EAA4B,SAA5B,EAAuC;AACnCC,yBAAY,KADuB;AAEnCC,uBAAU,IAFyB;AAGnCpQ,oBAAOtK;AAH4B,UAAvC;;AAMA,aAAIsO,MAAM2C,cAAN,CAAqB,mBAArB,CAAJ,EAA+C;AAAE;AAC7C3C,mBAAMqM,iBAAN,CAAwB,IAAxB,EAA8B,KAAKC,WAAnC;AACH,UAFD,MAEO;AACH;;;;;AAKAlW,oBAAO8V,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;AACjCC,6BAAY,KADqB;AAEjCC,2BAAU,KAFuB;AAGjCpQ,wBAAQ,IAAIgE,KAAJ,CAAUtO,OAAV,CAAD,CAAqB6a;AAHK,cAArC;AAKH;AACJ;;AAED;;;;;;;;;;;;;;;;;;;;;;;gCAmBc5d,G,EAAK;AACf,iBAAIA,eAAeod,QAAnB,EAA6B;AACzB,wBAAOpd,GAAP;AACH;;AAED,iBAAIqd,aAAJ;AAAA,iBAAUQ,YAAV;;AAEA,iBAAI,gBAAM1R,eAAN,CAAsBnM,GAAtB,KAA8BA,IAAIqd,IAAtC,EAA4C;AACxC,yBAAQrd,IAAIqd,IAAZ;AACI,0BAAK,CAAL;AACIA,gCAAOD,SAASxd,IAAT,CAAcke,iBAArB;AACA;AACJ,0BAAK,CAAL;AACIT,gCAAOD,SAASxd,IAAT,CAAcgQ,oBAArB;AACA;AACJ,0BAAK,CAAL;AACIyN,gCAAOD,SAASxd,IAAT,CAAcme,OAArB;AACA;AACJ;AACIV,gCAAOD,SAASxd,IAAT,CAAc0d,aAArB;AACA;AAZR;AAcA,wBAAO,IAAIF,QAAJ,CAAaC,IAAb,EAAmBrd,IAAI+C,OAAJ,IAAe,EAAlC,CAAP;AACH;;AAED,iBAAI,OAAO/C,GAAP,KAAe,QAAnB,EAA6B;AACzBqd,wBAAOQ,MAAM7d,GAAb;AACH,cAFD,MAEO,IAAI,QAAOA,GAAP,yCAAOA,GAAP,OAAe,QAAnB,EAA6B;AAChCqd,wBAAOrd,IAAIqd,IAAJ,IAAYrd,IAAI+C,OAAvB;AACA8a,uBAAM7d,IAAI+C,OAAJ,IAAe/C,IAAIqd,IAAzB;AACH;AACD,iBAAIA,QAAQD,SAASY,gBAAT,CAA0BX,IAA1B,CAAZ,EAA6C;AACzC,wBAAO,IAAID,QAAJ,CAAaC,IAAb,EAAmBQ,GAAnB,CAAP;AACH;;AAED,oBAAO,IAAIT,QAAJ,CAAaA,SAASxd,IAAT,CAAc0d,aAA3B,EAA0CO,GAA1C,CAAP;AACH;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;sCAsBoB/X,Q,EAAwB;AAAA,iBAAd/C,OAAc,uEAAJ,EAAI;;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAI,CAAC+C,QAAL,EAAe,OAAO,IAAIsX,QAAJ,CAAaA,SAASxd,IAAT,CAAcsH,gBAA3B,CAAP;;AAEf,iBAAI+W,gBAAJ;;AAEA,iBAAI,gBAAMne,QAAN,CAAegG,QAAf,CAAJ,EAA8B;AAC1BmY,2BAAUC,oBAAoBpY,QAApB,CAAV;AACA,qBAAImY,OAAJ,EAAa,OAAO,IAAIb,QAAJ,CAAaa,OAAb,EAAsBlb,WAAW+C,QAAjC,CAAP;AAChB;;AAED,iBAAI,CAAC,gBAAM+H,QAAN,CAAe/H,QAAf,CAAL,EAA+B,OAAO,IAAP;;AAE/B,iBAAI6P,SAAS7P,SAASqY,aAAT,IACNrY,SAASsY,YADH,IAEJtY,SAAS7B,KAAT,IAAkB6B,SAAS7B,KAAT,CAAelB,OAAlC,IAA8C,EAFzC,IAGN,EAHP;;AAKA,iBAAI+C,SAAS2E,MAAb,EAAqB;AACjBwT,2BAAUC,oBAAoBpY,SAAS2E,MAA7B,CAAV;AACA,qBAAIwT,OAAJ,EAAa,OAAO,IAAIb,QAAJ,CAAaa,OAAb,EAAsBtI,UAAU5S,OAAV,IAAqB+C,SAAS2E,MAApD,CAAP;AAChB;;AAED,iBAAI3E,SAAS7B,KAAb,EAAoB;AAChB,qBAAIoa,SAASvY,SAASuY,MAAT,IAAmBvY,SAAS7B,KAAT,CAAeoa,MAA/C;AACA,qBAAI,CAACA,MAAL,EAAa;AACT,yBAAIC,SAASxY,SAAS7B,KAAT,CAAeqa,MAA5B;AACA,yBAAI,gBAAMhR,OAAN,CAAcgR,MAAd,KAAyBA,OAAOtP,MAAP,GAAgB,CAA7C,EAAgD;AAC5CqP,kCAASC,OAAO,CAAP,EAAUD,MAAnB,CAD4C,CACjB;AAC3B1I,kCAASA,UAAU2I,OAAO,CAAP,EAAUvb,OAA7B,CAF4C,CAEN;AACzC;AACJ;AACDkb,2BAAUM,oBAAoBF,MAApB,KAA+BjB,SAASxd,IAAT,CAAc0d,aAAvD;AACA,wBAAO,IAAIF,QAAJ,CAAaa,OAAb,EAAsBtI,UAAU0I,MAAV,IAAoBtb,OAA1C,CAAP;AACH;;AAED,iBAAI4S,MAAJ,EAAY;AACRsI,2BAAUC,oBAAoBvI,MAApB,KAA+ByH,SAASxd,IAAT,CAAc0d,aAAvD;AACA,wBAAO,IAAIF,QAAJ,CAAaa,OAAb,EAAsBtI,UAAU5S,OAAhC,CAAP;AACH;;AAED,oBAAO,IAAP;AACH;;AAED;;;;;;;;;;oCAOkB/C,G,EAAK;AACnB,oBAAOA,eAAeod,QAAtB;AACH;;AAED;;;;;;;;;;0CAOwBoB,S,EAAW;AAC/B,iBAAIjE,aAAJ;AACA,kBAAKA,IAAL,IAAa6C,SAASxd,IAAtB,EAA4B;AACxB,qBAAIwd,SAASxd,IAAT,CAAcoU,cAAd,CAA6BuG,IAA7B,KACOiE,cAAcpB,SAASxd,IAAT,CAAc2a,IAAd,CADzB,EAC8C;AAC1C,4BAAO,IAAP;AACH;AACJ;AACD,oBAAO,KAAP;AACH;;;;;;AAGL;;;;;;;AAKA6C,UAAS9M,SAAT,CAAmBC,QAAnB,GAA8B,YAAY;AACtC,SAAIsN,MAAM,KAAKR,IAAL,KAAc,KAAKta,OAAnB,UAAkC,KAAKA,OAAvC,SAAoD,EAA9D;AACA,YAAU,KAAKmG,IAAf,UAAwB,KAAKmU,IAA7B,GAAoCQ,GAApC;AACH,EAHD;;AAKA;AACA;AACA;AACA;AACA,KAAI,OAAOpW,OAAOgX,cAAd,KAAiC,UAArC,EAAiD;AAC7ChX,YAAOgX,cAAP,CAAsBrB,SAAS9M,SAA/B,EAA0Ce,MAAMf,SAAhD;AACH,EAFD,MAEO;AACH8M,cAAS9M,SAAT,GAAqB7I,OAAOnD,MAAP,CAAc+M,MAAMf,SAApB,CAArB;AACH;;AAED;AACA;AACA;;AAEA;;;;;;AAMA8M,UAASxd,IAAT,GAAgB;AACZ;;;;AAIAgF,gCAA2B,2BALf;AAMZ;;;;AAIA4B,4BAAuB,uBAVX;AAWZ;;;;;AAKAsX,wBAAmB,mBAhBP;AAiBZ;;;;;AAKAlO,2BAAsB,sBAtBV;AAuBZ;;;;;;AAMAmO,cAAS,SA7BG;AA8BZ;;;;AAIAle,yBAAoB,oBAlCR;AAmCZ;;;;AAIAqH,uBAAkB,kBAvCN;AAwCZ;;;;;AAKAwX,sBAAiB,iBA7CL;AA8CZ;;;;;;AAMAC,qBAAgB,gBApDJ;AAqDZ;;;;;AAKApR,qBAAgB,gBA1DJ;AA2DZ;;;;AAIAzK,wBAAmB,mBA/DP;AAgEZ;;;;AAIA8b,uBAAkB,kBApEN;AAqEZ;;;;;;;AAOAC,+BAA0B,0BA5Ed;AA6EZ;;;;AAIAC,2BAAsB,sBAjFV;AAkFZ;;;;;;AAMApR,yBAAoB,oBAxFR;AAyFZ;;;;;;AAMAqR,4BAAuB,uBA/FX;AAgGZ;;;;;AAKAC,8BAAyB,yBArGb;AAsGZ;;;;AAIAC,6BAAwB,wBA1GZ;AA2GZ;;;;AAIAC,kBAAa,aA/GD;AAgHZ;;;;;AAKAC,gBAAW,WArHC;AAsHZ;;;;AAIAC,qBAAgB,gBA1HJ;AA2HZ;;;;AAIA9B,oBAAe;AA/HH,EAAhB;;AAkIA;AACA;AACA;;AAEA;;;AAGA,UAASY,mBAAT,CAA6BzT,MAA7B,EAAqC;AACjC,SAAI,CAACA,MAAL,EAAa,OAAO2S,SAASxd,IAAT,CAAcsH,gBAArB;AACb,SAAIuD,WAAW,IAAf,EAAqB,OAAO,IAAP;AACrB,SAAIA,WAAW,cAAf,EAA+B,OAAO2S,SAASxd,IAAT,CAAcuf,SAArB;AAC/B,SAAI/B,SAASxd,IAAT,CAAcoU,cAAd,CAA6BvJ,MAA7B,CAAJ,EAA0C,OAAOA,MAAP;AAC1C,YAAO,IAAP;AACH;;AAED;;;;;;;;;AASA,UAAS8T,mBAAT,CAA6BF,MAA7B,EAAqC;AACjC,aAAQA,MAAR;AACI,cAAK,SAAL;AACI,oBAAOjB,SAASxd,IAAT,CAAc8e,eAArB;AACJ,cAAK,oBAAL;AACI,oBAAOtB,SAASxd,IAAT,CAAckf,oBAArB;AACJ,cAAK,YAAL;AACI,oBAAO1B,SAASxd,IAAT,CAAc8N,kBAArB;AACJ,cAAK,uBAAL;AACI,oBAAO0P,SAASxd,IAAT,CAAcif,wBAArB;AACJ,cAAK,UAAL;AACI,oBAAOzB,SAASxd,IAAT,CAAcuf,SAArB;AACJ,cAAK,YAAL;AACI,oBAAO/B,SAASxd,IAAT,CAAcsf,WAArB;AACJ;AACI,oBAAO,IAAP;AAdR;AAgBH;;AAED;AACA;AACA;;mBAEe9B,Q;;;;;;;;;;;;;;ACpdf;;;;;;;;KAEMiC,U;AAEF,yBAAYC,QAAZ,EAAsBC,OAAtB,EAA6C;AAAA;;AAAA,aAAdlgB,OAAc,uEAAJ,EAAI;;AAAA;;AACzC,cAAKmgB,SAAL,GAAiB,KAAjB;AACA,cAAK1P,KAAL,GAAa,CAAb;AACA,cAAK2P,MAAL,GAAc,IAAd;AACA,cAAKzW,EAAL,GAAUvE,UAAUC,WAAV,CAAsBgb,aAAtB,CACN,eAAO;AACH,mBAAK5P,KAAL;AACA,iBAAI,gBAAMjO,UAAN,CAAiByd,QAAjB,CAAJ,EAAgCA,SAASnX,GAAT;AACnC,UAJK,EAKN,eAAO;AACH,mBAAK2H,KAAL;AACA,iBAAI,gBAAMjO,UAAN,CAAiB0d,OAAjB,CAAJ,EAA+BA,QAAQvf,GAAR;AAC/B,iBAAIX,QAAQwI,YAAZ,EAA0B;AACtB,uBAAKgB,KAAL;AACH;AACJ,UAXK,EAYNxJ,OAZM,CAAV;AAcH;;;;kCAEQ;AACLoF,uBAAUC,WAAV,CAAsBib,UAAtB,CAAiC,KAAK3W,EAAtC;AACA,kBAAKwW,SAAL,GAAiB,IAAjB;AACA,kBAAKC,MAAL,GAAc,IAAd;AACH;;;+BAEKG,K,EAAOngB,Q,EAAU;AAAA;;AACnB,iBAAIkK,IAAI,gBAAM/G,QAAN,CAAegd,KAAf,IAAwBA,KAAxB,GAAgC,CAAxC;AAAA,iBACI7b,KAAK,gBAAMlC,UAAN,CAAiBpC,QAAjB,IAA6BA,QAA7B,GACC,gBAAMoC,UAAN,CAAiB+d,KAAjB,IAA0BA,KAA1B,GAAkC,IAF5C;AAGA;AACA,iBAAI,KAAKH,MAAT,EAAiB;AACbtK,8BAAa,KAAKsK,MAAlB;AACA,sBAAKA,MAAL,GAAc,IAAd;AACH;AACD;AACA,iBAAI,CAAC,KAAKD,SAAV,EAAqB;AACjB,qBAAI7V,MAAM,CAAV,EAAa;AACT,0BAAKkW,MAAL;AACA,yBAAI9b,EAAJ,EAAQA;AACR;AACH;AACD,sBAAK0b,MAAL,GAAcxJ,WAAW,YAAM;AAC3B,4BAAK4J,MAAL;AACA,yBAAI9b,EAAJ,EAAQA;AACX,kBAHa,EAGX4F,CAHW,CAAd;AAIH;AACJ;;;;;;AAIL;AACA;AACA;;mBAEe0V,U"",""file"":""geolocator.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\""geolocator\"", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""geolocator\""] = factory();\n\telse\n\t\troot[\""geolocator\""] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""dist/\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap f77cad729e392ee8f6d2\n **/"",""import geolocator from './core/geolocator';\n// export default geolocator;\n// http://stackoverflow.com/a/33683495/112731\nmodule.exports = geolocator;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/"",""import utils from '../lib/utils';\nimport fetch from '../lib/fetch';\nimport geoHelper from './geo.helper';\nimport GeoError from './geo.error';\nimport GeoWatcher from './geo.watcher';\nimport enums from './enums';\n\n/**\n *  Radius of earth in kilometers.\n *  @private\n *  @type {Number}\n */\nconst EARTH_RADIUS_KM = 6371;\n\n/**\n *  Radius of earth in miles.\n *  @private\n *  @type {Number}\n */\nconst EARTH_RADIUS_MI = 3959;\n\n/**\n *  Storage for Geolocator default configuration.\n *\n *  @readonly\n *  @private\n */\nconst defaultConfig = {\n    language: 'en',\n    https: true,\n    google: {\n        version: '3', // latest 3.x\n        key: '',\n        styles: null\n    }\n};\n\n/**\n *  Geolocator library that provides methods for getting geo-location information,\n *  geocoding, address look-ups, distance & durations, timezone information and more...\n *  This library makes use of HTML5 position feautures, implements Google APIs\n *  and other services.\n *\n *  <b>Important Notes:</b>\n *\n *  Although some calls might work without a key, it is generally required by\n *  most {@link https://developers.google.com/maps/faq#using-google-maps-apis|Goolge APIs}\n *  (such as Time Zone API). To get a free (or premium) key,\n *  {@link https://developers.google.com/maps/documentation/javascript/|click here}.\n *  After getting a key, you can enable multiple APIs for it. Make sure you\n *  {@link https://console.developers.google.com|enable}\n *  all the APIs supported by Geolocator.\n *\n *  Note that browser API keys cannot have referer restrictions when used\n *  with some Google APIs.\n *\n *  Make sure your doctype is HTML5 and you're calling Geolocation APIs from an\n *  HTTPS page. Geolocation API is removed from unsecured origins in Chrome 50.\n *  Other browsers are expected to follow.\n *\n *  @license MIT\n *  @copyright 2016, Onur Yıldırım (onur@cutepilot.com)\n */\nclass geolocator {\n\n    // ---------------------------\n    // PROPERTIES\n    // ---------------------------\n\n    /**\n     *  Geolocator Error class that provides a common type of error object for\n     *  the various APIs implemented in Geolocator. All callbacks of Geolocator\n     *  will include an instance of this object as the first argument; if the\n     *  corresponding operation fails. Also all thrown errors will be an instance\n     *  of this object.\n     *\n     *  This object also enumerates\n     *  {@link ?api=geolocator-error#GeoError.Code|Geolocator Error codes}.\n     *\n     *  @see {@link ?api=geolocator-error|`GeoError` documentation}\n     *  @type {GeoError}\n     *  @readonly\n     */\n    static get Error() {\n        return GeoError;\n    }\n\n    /**\n     *  Documented separately in enums.js\n     *  @private\n     */\n    static get MapTypeId() {\n        return enums.MapTypeId;\n    }\n\n    /**\n     *  Documented separately in enums.js\n     *  @private\n     */\n    static get LocationType() {\n        return enums.LocationType;\n    }\n\n    /**\n     *  Documented separately in enums.js\n     *  @private\n     */\n    static get TravelMode() {\n        return enums.TravelMode;\n    }\n\n    /**\n     *  Documented separately in enums.js\n     *  @private\n     */\n    static get UnitSystem() {\n        return enums.UnitSystem;\n    }\n\n    /**\n     *  Documented separately in enums.js\n     *  @private\n     */\n    static get RadioType() {\n        return enums.RadioType;\n    }\n\n    /**\n     *  Documented separately in enums.js\n     *  @private\n     */\n    static get DistanceFormula() {\n        return enums.DistanceFormula;\n    }\n\n    /**\n     *  Documented separately in enums.js\n     *  @private\n     */\n    static get ImageFormat() {\n        return enums.ImageFormat;\n    }\n\n    // ---------------------------\n    // STATIC METHODS\n    // ---------------------------\n\n    /**\n     *  Sets or gets the geolocator configuration object.\n     *  Make sure you configure Geolocator before calling other methods that\n     *  require a Google API key.\n     *\n     *  @param {Object} [options]\n     *         Configuration object. If omitted, this method returns the current\n     *         configuration.\n     *      @param {String} [options.language=\""en\""]\n     *             Language to be used for API requests that supports language\n     *             configurations. This is generally used for Google APIs.\n     *             See {@link https://developers.google.com/maps/faq#languagesupport|supported languages}.\n     *      @param {Boolean} [options.https=true]\n     *             As Google recommends; using HTTPS encryption makes your site\n     *             more secure, and more resistant to snooping or tampering.\n     *             If set to `true`, the API calls are made over HTTPS, at all\n     *             times. Setting to `false` will switch to HTTP (even if the\n     *             page is on HTTPS). And if set to `null`, current protocol will\n     *             be used. Note that some APIs might not work with HTTP such as\n     *             Google Maps TimeZone API.\n     *      @param {Object} [options.google]\n     *             Google specific options.\n     *          @param {String} [options.google.version=\""3\""]\n     *                 Google Maps API version to be used (with\n     *                 `geolocator.createMap()`) method. The default version\n     *                 value is tested and works with Geolocator. You can set a\n     *                 greater value or the latest version number and it should\n     *                 work; but it's not guaranteed. Find out the\n     *                 {@link https://developers.google.com/maps/documentation/javascript/versions|latest version here}.\n     *          @param {String} [options.google.key=\""\""]\n     *                 API key to be used with Google API calls. Although some\n     *                 calls might work without a key, it is generally required\n     *                 by most Goolge APIs. To get a free (or premium) key,\n     *                 {@link https://developers.google.com/maps/documentation/javascript/|click here}.\n     *          @param {Array} [options.google.styles]\n     *                 An array of objects to customize the presentation of the\n     *                 Google base maps, changing the visual display of such\n     *                 elements as roads, parks, and built-up areas.\n     *                 See {@link https://developers.google.com/maps/documentation/javascript/styling|Styling Maps}.\n     *\n     *  @returns {Object} - Returns the current or updated configuration object.\n     *\n     *  @example\n     *  geolocator.config({\n     *      language: \""en\"",\n     *      google: {\n     *          version: \""3\"",\n     *          key: \""YOUR-GOOGLE-API-KEY\""\n     *      }\n     *  });\n     */\n    static config(options) {\n        if (options) {\n            geolocator._.config = utils.extend(defaultConfig, options);\n        }\n        return geolocator._.config;\n    }\n\n    /**\n     *  Gets a static map image URL which can be embeded via an `<img />` tag\n     *  on the page.\n     *\n     *  Note that, if `options.center` is set to an address (instead of\n     *  coordinates) and `options.marker` is also set; we will need to geocode\n     *  that address to get center coordinates for the marker.\n     *  In this case, you must use the `callback` parameter to get the async\n     *  result. Otherwise, this method will directly return a `String`.\n     *\n     *  Make sure you have enabled Static Maps API (and Geocoding API if\n     *  `marker` is enabled) in your Google Developers console.\n     *\n     *  For interactive map, see {@link #geolocator.createMap|`geolocator.createMap()` method}.\n     *\n     *  @see {@link https://developers.google.com/maps/documentation/static-maps/intro|Static Maps}\n     *  @see {@link https://developers.google.com/maps/documentation/static-maps/usage-limits|Usage Limits}\n     *\n     *  @param {Object} options\n     *         Static map options.\n     *         @param {String|Object} options.center\n     *                Defines the center of the map and the location.\n     *                Either an address `String` or an coordinates `Object` with\n     *                `latitude:Number` and `longitude:Number` properties.\n     *         @param {String} [options.mapTypeId=\""roadmap\""]\n     *                Type of the map to be created.\n     *                See {@link #geolocator.MapTypeId|`geolocator.MapTypeId` enumeration}\n     *                for possible values.\n     *         @param {String|Object} [options.size=\""600x300\""]\n     *                Defines the size (in pixels) of the returned image.\n     *                Either a string in `widthxheight` format or an Object\n     *                with `width:Number` and `height:Number` properties.\n     *         @param {Number} [options.scale=1]\n     *                Affects the number of pixels that are returned. scale=2\n     *                returns twice as many pixels as scale=1 while retaining\n     *                the same coverage area and level of detail (i.e. the\n     *                contents of the map don't change). Accepted values are 1,\n     *                2 and 4 (4 is only available to Google Maps APIs Premium\n     *                Plan customers.)\n     *         @param {Number} [options.zoom=9]\n     *                Zoom level to be set for the map.\n     *         @param {String} [options.format=png]\n     *                Defines the format of the resulting image.\n     *                See {@link #geolocator.ImageFormat|`geolocator.ImageFormat` enumeration}\n     *                for possible values.\n     *         @param {Boolean|String} [options.marker=true]\n     *                Specifies whether to add a marker to the center of the map.\n     *                You can define the color of the marker by passing a color\n     *                `String` instead of a `Boolean`. Color can be a predefined\n     *                color from the set `red` (default), `black`, `brown`,\n     *                `green`, `purple`, `yellow`, `blue`, `gray`, `orange` and\n     *                `white`; or a HEX 24-bit color (e.g. `\""0xFF0000\""`).\n     *                Note that marker will not be visible if `center` is set to\n     *                a `String` address and you don't use the callback.\n     *         @param {String} [options.region]\n     *                Defines the appropriate borders to display, based on\n     *                geo-political sensitivities. Accepts a region code\n     *                specified as a two-character ccTLD (top-level domain)\n     *                value. e.g. `\""us\""`.\n     *         @param {Array} [options.styles]\n     *                An array of objects to customize the presentation of the\n     *                Google base maps, changing the visual display of such\n     *                elements as roads, parks, and built-up areas.\n     *                This will default to the global styles set via\n     *                {@link #geolocator.config|`geolocator.config()` method}, if any.\n     *                See {@link https://developers.google.com/maps/documentation/javascript/styling|Styling Maps}.\n     *\n     *  @param {Function} [callback]\n     *         Callback function to be executed when the static map URL is built.\n     *         This takes 2 arguments: `function (err, url) { ... }`.\n     *         If omitted, this method will directly return the static map\n     *         image URL; but (if enabled) the marker will not be visible if\n     *         `options.center` is set to an address `String` instead of a\n     *         coordinates `Object`.\n     *\n     *  @returns {String|void}\n     *           If a callback is passed, this will return `void`.\n     *           Otherwise, a `String` that represents the URL of the static map.\n     *\n     *  @example\n     *  // Async example (with address and marker)\n     *  var options = {\n     *      center: \""Los Angles, CA, US\"",\n     *      mapTypeId: geolocator.MapTypeId.ROADMAP,\n     *      size: \""600x300\"",\n     *      scale: 1,\n     *      zoom: 5,\n     *      marker: \""0xFFCC00\"",\n     *      format: geolocator.ImageFormat.PNG\n     *  };\n     *  geolocator.getStaticMap(options, function (err, url) {\n     *      if (!err) {\n     *          document.getElementById('my-img').src = url;\n     *      }\n     *  });\n     *\n     *  @example\n     *  // Sync example (with coordinates)\n     *  var options = {\n     *      center: {\n     *          longitude: 34.0522342,\n     *          latitude: -118.2436849\n     *      },\n     *      mapTypeId: geolocator.MapTypeId.ROADMAP,\n     *      size: \""600x300\"",\n     *      scale: 1,\n     *      zoom: 5,\n     *      marker: \""0xFFCC00\"",\n     *      format: geolocator.ImageFormat.PNG\n     *  };\n     *  document.getElementById('my-img').src = geolocator.getStaticMap(options);\n     */\n    static getStaticMap(options, callback) {\n        if (!utils.isPlainObject(options) || !options.center) {\n            throw new GeoError(GeoError.Code.INVALID_PARAMETERS,\n                'A center address or coordinates are required.');\n        }\n\n        if (utils.isString(options.center)) {\n            return geolocator.geocode(options.center, (err, location) => {\n                if (err) callback(err);\n                options.center = location.coords;\n                callback(null, geolocator.getStaticMap(options));\n            });\n        }\n\n        let conf = geolocator._.config;\n        let opts = utils.extend({\n            mapTypeId: enums.MapTypeId.ROADMAP,\n            size: {\n                width: 600,\n                height: 300\n            },\n            scale: 1, // 1 | 2 | (4 for business customers of google maps)\n            zoom: 9,\n            marker: 'red',\n            format: enums.ImageFormat.PNG,\n            language: conf.language || 'en',\n            region: null\n        }, options);\n\n        let center = utils.isPlainObject(opts.center)\n            ? `${opts.center.latitude},${opts.center.longitude}`\n            : String(opts.center);\n\n        let size = utils.isPlainObject(opts.size)\n            ? `${opts.size.width}x${opts.size.height}`\n            : String(opts.size);\n\n        let url = enums.URL.GOOGLE_SATATIC_MAP // not using utils.setProtocol() here\n            + `?center=${center}&maptype=${opts.mapTypeId}`\n            + `&size=${size}&scale=${opts.scale}&zoom=${opts.zoom}`\n            + `&format=${opts.format}&language=${opts.language}`;\n\n        if (opts.marker) {\n            let color = utils.isString(opts.marker) ? opts.marker : 'red';\n            url += '&markers=' + encodeURIComponent(`color:${color}|${center}`);\n        }\n        if (opts.region) url += '&region=' + opts.region;\n        if (conf.google.key) url += '&key=' + conf.google.key;\n\n        let styles = !utils.isFilledArray(opts.styles)\n            ? (utils.isFilledArray(conf.google.styles) ? conf.google.styles : null)\n            : opts.styles;\n        if (styles) url += '&' + geoHelper.mapStylesToParams(styles);\n\n        if (utils.isFunction(callback)) return callback(null, url);\n        return url;\n    }\n\n    /**\n     *  Creates an interactive Google Map within the given element.\n     *  Make sure you have enabled Google Static Maps API in your Google Developers console.\n     *  For static map, see {@link #geolocator.getStaticMap|`geolocator.getStaticMap()` method}.\n     *  @see {@link https://developers.google.com/maps/documentation/javascript/reference|Google Maps JavaScript API}\n     *  @see {@link https://developers.google.com/maps/documentation/javascript/usage|Usage Limits}\n     *\n     *  @param {Object|String|HTMLElement|Map} options\n     *         Either map options object with the following properties or; the ID\n     *         of a DOM element, or element itself which the map will be\n     *         created within; or a previously created `google.maps.Map` instance.\n     *         If a map instance is set, this only will apply the options without\n     *         re-creating it.\n     *      @param {String|HTMLElement|Map} options.element\n     *             Either the ID of a DOM element or the element itself;\n     *             which the map will be created within; or a previously created\n     *             `google.maps.Map` instance. If a map instance is set, this\n     *             only will apply the options without re-creating it.\n     *      @param {Object} options.center\n     *             Center coordinates for the map to be created.\n     *          @param {Number} options.center.latitude\n     *                 Latitude of the center point coordinates.\n     *          @param {Number} options.center.longitude\n     *                 Longitude of the center point coordinates.\n     *      @param {String} [options.mapTypeId=\""roadmap\""]\n     *             Type of the map to be created.\n     *             See {@link #geolocator.MapTypeId|`geolocator.MapTypeId` enumeration}\n     *             for possible values.\n     *      @param {String} [options.title]\n     *             Title text to be displayed within an `InfoWindow`, when the\n     *             marker is clicked. This only take effect if `marker` is\n     *             enabled.\n     *      @param {Boolean} [options.marker=true]\n     *             Whether to place a marker at the given coordinates.\n     *             If `title` is set, an `InfoWindow` will be opened when the\n     *             marker is clicked.\n     *      @param {Number} [options.zoom=9]\n     *             Zoom level to be set for the map.\n     *      @param {Array} [options.styles]\n     *             An array of objects to customize the presentation of the\n     *             Google base maps, changing the visual display of such\n     *             elements as roads, parks, and built-up areas.\n     *             This will default to the global styles set via\n     *             {@link #geolocator.config|`geolocator.config` method}`, if any.\n     *             See {@link https://developers.google.com/maps/documentation/javascript/styling|Styling Maps}.\n     *\n     *  @param {Function} callback\n     *         Callback function to be executed when the map is created.\n     *         This takes 2 arguments: `function (err, map) { ... }`.\n     *         See {@link #geolocator~MapData|`geolocator~MapData` type} for details.\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  var options = {\n     *      element: \""my-map\"",\n     *      center: {\n     *          latitude: 48.8534100,\n     *          longitude: 2.3488000\n     *  \t},\n     *  \tmarker: true,\n     *  \ttitle: \""Paris, France\"",\n     *  \tzoom: 12\n     *  };\n     *  geolocator.createMap(options, function (err, map) {\n     *      if (map && map.infoWindow) {\n     *          map.infoWindow.open(map.instance, map.marker);\n     *      }\n     *  });\n     */\n    static createMap(options, callback) {\n        // if options is not a plain object, consider element ID, `HTMLElement`,\n        // `jQuery` instance or `google.maps.Map` instance.\n        if (!utils.isPlainObject(options)) {\n            options = { element: options };\n        }\n\n        options = utils.extend({\n            element: null,\n            mapTypeId: enums.MapTypeId.ROADMAP,\n            title: undefined,\n            marker: true,\n            zoom: 9\n        }, options);\n\n        let e = options.element,\n            elem;\n        if (utils.isString(e)) {\n            elem = document.getElementById(e);\n        } else if (utils.isJQueryObject(e)) {\n            elem = e[0];\n        } else if (geolocator.isGoogleLoaded() && e instanceof google.maps.Map) {\n            elem = e.getDiv();\n        }\n\n        if (!utils.isElement(elem) && !utils.isNode(elem)) {\n            throw new GeoError(GeoError.Code.INVALID_PARAMETERS,\n                'A valid DOM element or element ID is required to create a map.');\n        }\n\n        if (!utils.isPlainObject(options.center)\n                || !utils.isNumber(options.center.latitude)\n                || !utils.isNumber(options.center.longitude)) {\n            throw new GeoError(GeoError.Code.INVALID_PARAMETERS,\n                'Center coordinates are required to create a map.');\n        }\n\n        options.element = elem;\n\n        let conf = geolocator._.config,\n            key = conf.google.key;\n\n        options.styles = !utils.isFilledArray(options.styles)\n            ? (utils.isFilledArray(conf.google.styles) ? conf.google.styles : null)\n            : options.styles;\n\n        geolocator.ensureGoogleLoaded(key, err => {\n            if (err) {\n                throw new GeoError(GeoError.Code.GOOGLE_API_FAILED, String(err.message || err));\n            }\n\n            let mapData = configCreateMap(options);\n            callback(null, mapData);\n        });\n    }\n\n    /**\n     *  Locates the user's location via HTML5 geolocation. This may\n     *  require/prompt for user's permission. If the permission is granted we'll\n     *  get the most accurate location information. Otherwise, we'll fallback to\n     *  locating via user's IP (if enabled).\n     *\n     *  For better accuracy, Geolocator implements a different approach than the\n     *  `getCurrentPosition` API; which generally triggers before the device's\n     *  GPS hardware can provide anything accurate. Thanks to\n     *  {@link https://github.com/gwilson/getAccurateCurrentPosition#background|Greg Wilson}\n     *  for the idea.\n     *\n     *  Also note that HTML5 Geolocation feature no more allows insecure origins.\n     *  See {@link https://goo.gl/rStTGz|this} for more details.\n     *  This means if you don't call this method from an HTTPS page, it will\n     *  fail. And if `options.fallbackToIP` is enabled, this will locate by IP.\n     *\n     *  @param {Object} [options]\n     *         HTML5 geo-location settings with some additional options.\n     *      @param {Boolean} [options.enableHighAccuracy=true]\n     *             Specifies whether the device should provide the most accurate\n     *             position it can. Note that setting this to `true` might\n     *             consume more CPU and/or battery power; and result in slower\n     *             response times.\n     *      @param {Number} [options.desiredAccuracy=30]\n     *             Minimum accuracy desired, in meters. Position will not be\n     *             returned until this is met, before the timeout. This only\n     *             takes effect if `enableHighAccuracy` is set to `true`.\n     *      @param {Number} [options.timeout=5000]\n     *             HTML5 position timeout setting in milliseconds. Setting this\n     *             to `Infinity` means that Geolocator won't return until the\n     *             position is available.\n     *      @param {Number} [options.maximumWait=10000]\n     *             Maximum time to wait (in milliseconds) for the desired\n     *             accuracy (which should be greater than `timeout`).\n     *             This only takes effect if `enableHighAccuracy` is set to\n     *             `true`.\n     *      @param {Number} [options.maximumAge=0]\n     *             HTML5 position maximum age. Indicates the maximum age in\n     *             milliseconds of a possible cached position that is acceptable\n     *             to return. `0` means, the device cannot use a cached position\n     *             and must attempt to retrieve the real current position. If set\n     *             to `Infinity` the device must return a cached position\n     *             regardless of its age. Note that if `enableHighAccuracy` is\n     *             set to `true`, `maximumAge` will be forced to `0`.\n     *      @param {Function} [options.onProgress]\n     *             If `enableHighAccuracy` is set to `true`, you can use this\n     *             callback to check the progress of the location accuracy;\n     *             while waiting for the final, best accurate location.\n     *      @param {Boolean} [options.fallbackToIP=false]\n     *             Specifies whether to fallback to IP geolocation if the HTML5\n     *             geolocation fails (e.g. user rejection).\n     *      @param {Boolean} [options.addressLookup=false]\n     *             Specifies whether to run a reverse-geocode operation for the\n     *             fetched coordinates to retrieve detailed address information.\n     *             Note that this means an additional request which requires a\n     *             Google API key to be set in the Geolocator configuration.\n     *             See {@link #geolocator.config|`geolocator.config()`}.\n     *      @param {Boolean} [options.timezone=false]\n     *             Specifies whether to also fetch the time zone information for\n     *             the receieved coordinates. Note that this means an additional\n     *             request which requires a Google API key to be set in the\n     *             Geolocator configuration.\n     *             See {@link #geolocator.config|`geolocator.config()`}.\n     *      @param {String|Object} [options.map]\n     *             In order to create an interactive map from the fetched\n     *             location coordinates; either set this to map options object\n     *             or; the ID of a DOM element or DOM element itself which the\n     *             map will be created within.\n     *      @param {Boolean|Object} [options.staticMap=false]\n     *             Set to `true` to get a static Google Map image URL (with\n     *             default options); or pass a static map options object.\n     *\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes.\n     *         This takes 2 arguments: `function (err, location) { ... }`.\n     *         See {@link #geolocator~Location|`geolocator~Location` type} for details.\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  var options = {\n     *      enableHighAccuracy: true,\n     *      desiredAccuracy: 30,\n     *      timeout: 5000,\n     *      maximumWait: 10000,\n     *      maximumAge: 0,\n     *      fallbackToIP: true,\n     *      addressLookup: true,\n     *      timezone: true,\n     *      map: \""my-map\"",\n     *      staticMap: true\n     *  };\n     *  geolocator.locate(options, function (err, location) {\n     *      console.log(err || location);\n     *  });\n     *\n     * @example\n     *  // location result:\n     *  {\n     *      coords: {\n     *          latitude: 37.4224764,\n     *          longitude: -122.0842499,\n     *          accuracy: 30,\n     *          altitude: null,\n     *          altitudeAccuracy: null,\n     *          heading: null,\n     *          speed: null\n     *      },\n     *      address: {\n     *          commonName: \""\"",\n     *          street: \""Amphitheatre Pkwy\"",\n     *          route: \""Amphitheatre Pkwy\"",\n     *          streetNumber: \""1600\"",\n     *          neighborhood: \""\"",\n     *          town: \""\"",\n     *          city: \""Mountain View\"",\n     *          region: \""Santa Clara County\"",\n     *          state: \""California\"",\n     *          stateCode: \""CA\"",\n     *          postalCode: \""94043\"",\n     *          country: \""United States\"",\n     *          countryCode: \""US\""\n     *      },\n     *      formattedAddress: \""1600 Amphitheatre Parkway, Mountain View, CA 94043, USA\"",\n     *      type: \""ROOFTOP\"",\n     *      placeId: \""ChIJ2eUgeAK6j4ARbn5u_wAGqWA\"",\n     *      timezone: {\n     *          id: \""America/Los_Angeles\"",\n     *          name: \""Pacific Standard Time\"",\n     *          abbr: \""PST\"",\n     *          dstOffset: 0,\n     *          rawOffset: -28800\n     *      },\n     *      flag: \""//cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/flags/4x3/us.svg\"",\n     *      map: {\n     *          element: HTMLElement,\n     *          instance: Object, // google.maps.Map\n     *          marker: Object, // google.maps.Marker\n     *          infoWindow: Object, // google.maps.InfoWindow\n     *          options: Object // map options\n     *      },\n     *      staticMap: \""//maps.googleapis.com/maps/api/staticmap?center=37.4224764,-122.0842499&maptype=roadmap&size=600x300&scale=1&zoom=9&format=png&language=en&markers=color%3Ared%7C37.4224764%2C2-122.0842499&key=YOUR-GOOGLE-API-KEY\"",\n     *      timestamp: 1456795956380\n     *  }\n     */\n    static locate(options, callback) {\n        options = utils.extend({\n            enableHighAccuracy: true,\n            timeout: 5000,\n            maximumWait: 10000,\n            maximumAge: 0,\n            desiredAccuracy: 30,\n            onProgress: utils.noop,\n            fallbackToIP: false,\n            addressLookup: false,\n            timezone: false,\n            map: undefined,\n            staticMap: false\n        }, options);\n\n        // force disable cache if high-accuracy is enabled\n        if (options.enableHighAccuracy) options.maximumAge = 0;\n        // set a min value for timeout\n        if (options.timeout < 1000) options.timeout = 1000;\n        // max wait should not be less than timeout\n        if (options.maximumWait < options.timeout) options.maximumWait = options.timeout;\n\n        // check options and Google key\n        checkGoogleKey(options);\n\n        let cb = callbackMap(options, callback);\n\n        function fallbackToIP(error) {\n            if (options.fallbackToIP) {\n                return geolocator.locateByIP(options, (err, location) => {\n                    if (err) return cb(err, null);\n                    return cb(null, location);\n                });\n            }\n            cb(error, null);\n        }\n        function onPositionReceived(location) {\n            fetchAddressAndTimezone(location, options, cb);\n        }\n        function onPositionError(err) {\n            err = GeoError.create(err);\n            fallbackToIP(err);\n        }\n\n        if (geolocator.isGeolocationSupported()) {\n            if (options.enableHighAccuracy) {\n                locateAccurate(options, onPositionReceived, onPositionError);\n            } else {\n                navigator.geolocation.getCurrentPosition(onPositionReceived, onPositionError, options);\n            }\n        } else {\n            let err = new GeoError(GeoError.Code.GEOLOCATION_NOT_SUPPORTED);\n            fallbackToIP(err);\n        }\n    }\n\n    /**\n     *  Returns a location and accuracy radius based on information about cell\n     *  towers and WiFi nodes that the mobile client can detect; via the Google\n     *  Maps Geolocation API.\n     *  @see {@link https://developers.google.com/maps/documentation/geolocation/intro|Google Maps Geolocation API}\n     *  @see {@link https://developers.google.com/maps/documentation/geolocation/usage-limits|Usage Limits}\n     *\n     *  @param {Object} [options]\n     *         Geolocation options.\n     *      @param {Number} [options.homeMobileCountryCode]\n     *             The mobile country code (MCC) for the device's home network.\n     *      @param {Number} [options.homeMobileNetworkCode]\n     *             The mobile network code (MNC) for the device's home network.\n     *      @param {String} [options.radioType]\n     *             The mobile radio type.\n     *             See {@link #geolocator.RadioType|`geolocator.RadioType` enumeration}\n     *             for possible values. While this field is optional, it should\n     *             be included if a value is available, for more accurate results.\n     *      @param {string} [options.carrier]\n     *             The carrier name. e.g. \""Vodafone\""\n     *      @param {Boolean} [options.fallbackToIP=false]\n     *             Specifies whether to fallback to IP geolocation if wifi and\n     *             cell tower signals are not available. Note that the IP address\n     *             in the request header may not be the IP of the device. Set\n     *             `fallbackToIP` to `false` to disable fall back.\n     *      @param {Array} [options.cellTowers]\n     *             An array of cell tower objects.\n     *             See {@link https://developers.google.com/maps/documentation/geolocation/intro#cell_tower_object|Cell tower objects} for details.\n     *      @param {Array} [options.wifiAccessPoints]\n     *             An array of WiFi access point objects.\n     *             See {@link https://developers.google.com/maps/documentation/geolocation/intro#wifi_access_point_object|WiFi access point objects} for details.\n     *      @param {Boolean} [options.addressLookup=false]\n     *             Specifies whether to run a reverse-geocode operation for the\n     *             fetched coordinates to retrieve detailed address information.\n     *             Note that this means an additional request which requires a\n     *             Google API key to be set in the Geolocator configuration.\n     *             See {@link #geolocator.config|`geolocator.config()`}.\n     *      @param {Boolean} [options.timezone=false]\n     *             Specifies whether to also fetch the time zone information for\n     *             the receieved coordinates. Note that this means an additional\n     *             request which requires a Google API key to be set in the\n     *             Geolocator configuration.\n     *             See {@link #geolocator.config|`geolocator.config()`}.\n     *      @param {String|Object} [options.map]\n     *             In order to create an interactive map from the fetched\n     *             location coordinates; either set this to map options object\n     *             or; the ID of a DOM element or DOM element itself which the\n     *             map will be created within.\n     *      @param {Boolean|Object} [options.staticMap=false]\n     *             Set to `true` to get a static Google Map image URL (with\n     *             default options); or pass a static map options object.\n     *      @param {Boolean} [options.raw=false]\n     *      \t      Whether to return the raw Google API result.\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes.\n     *         This takes 2 arguments: `function (err, location) { ... }`.\n     *         See {@link #geolocator~Location|`geolocator~Location` type} for details.\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  var options = {\n     *      homeMobileCountryCode: 310,\n     *      homeMobileNetworkCode: 410,\n     *      carrier: 'Vodafone',\n     *      radioType: geolocator.RadioType.GSM,\n     *      fallbackToIP: true,\n     *      addressLookup: false,\n     *      timezone: false,\n     *      map: \""my-map\"",\n     *      staticMap: false\n     *  };\n     *  geolocator.locateByMobile(options, function (err, location) {\n     *      console.log(err || location);\n     *  });\n     */\n    static locateByMobile(options, callback) {\n        if (!utils.isPlainObject(options)) {\n            throw new GeoError(GeoError.Code.INVALID_PARAMETERS);\n        }\n\n        let cb = callbackMap(options, callback);\n\n        options = utils.extend({\n            homeMobileCountryCode: undefined,\n            homeMobileNetworkCode: undefined,\n            radioType: undefined,\n            carrier: undefined,\n            fallbackToIP: false,\n            cellTowers: undefined,\n            wifiAccessPoints: undefined,\n            addressLookup: false,\n            timezone: false,\n            map: undefined,\n            raw: false\n        }, options);\n\n        options.considerIp = options.fallbackToIP;\n        // check Google key\n        checkGoogleKey();\n\n        let conf = geolocator._.config,\n            key = conf.google.key || '',\n            url = utils.setProtocol(enums.URL.GOOGLE_GEOLOCATION, conf.https),\n            xhrOpts = {\n                url: `${url}?key=${key}`,\n                headers: {\n                    'Content-Type': 'application/json'\n                },\n                data: JSON.stringify(options)\n            };\n        // console.log(xhrOpts.data);\n\n        fetch.post(xhrOpts, (err, xhr) => {\n            let response = getXHRResponse(err, xhr);\n            if (GeoError.isGeoError(response)) return cb(response, null);\n\n            response = options.raw ? response : {\n                coords: {\n                    latitude: response.location.lat,\n                    longitude: response.location.lng,\n                    accuracy: response.accuracy\n                },\n                timestamp: utils.time()\n            };\n\n            fetchAddressAndTimezone(response, options, cb);\n\n            // e.g. raw response\n            // {\n            //     \""location\"": {\n            //         \""lat\"": 51.0,\n            //         \""lng\"": -0.1\n            //     },\n            //     \""accuracy\"": 1200.4\n            // }\n        });\n    }\n\n    /**\n     *  Locates the user's location by the client's IP.\n     *\n     *  This method uses FreeGeoIP's lookup service, by default.\n     *  In order to change the source provider, you can use\n     *  {@link #geolocator.setGeoIPSource|`geolocator.setGeoIPSource()` method}.\n     *\n     *  @param {Object} [options]\n     *         Locate options.\n     *      @param {Boolean} [options.addressLookup=false]\n     *             Specifies whether to run a reverse-geocode operation for the\n     *             fetched coordinates to retrieve detailed address information.\n     *             Since no precise address can be fetched from an IP addres; you\n     *             should only enable this if the Geo-IP Source returns no useful\n     *             address information other than coordinates. Also, note that\n     *             this means an additional request which requires a Google API\n     *             key to be set in the Geolocator configuration.\n     *             See {@link #geolocator.config|`geolocator.config()`}.\n     *      @param {Boolean} [options.timezone=false]\n     *             Specifies whether to also fetch the time zone information for\n     *             the receieved coordinates. Note that this means an additional\n     *             request which requires a Google API key to be set in the\n     *             Geolocator configuration.\n     *             See {@link #geolocator.config|`geolocator.config()`}.\n     *      @param {String|Object} [options.map]\n     *             In order to create an interactive map from the fetched\n     *             location coordinates; either set this to map options object\n     *             or; the ID of a DOM element or DOM element itself which the\n     *             map will be created within.\n     *      @param {Boolean|Object} [options.staticMap=false]\n     *             Set to `true` to get a static Google Map image URL (with\n     *             default options); or pass a static map options object.\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes.\n     *         This takes 2 arguments: `function (err, location) { ... }`.\n     *         See {@link #geolocator~Location|`geolocator~Location` type} for details.\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  var options = {\n     *  \taddressLookup: true,\n     *  \ttimezone: true,\n     *  \tmap: \""my-map\"",\n     *  \tstaticMap: true\n     *  };\n     *  geolocator.locateByIP(options, function (err, location) {\n     *  \tconsole.log(err || location);\n     *  });\n     *\n     *  @example\n     *  // location result:\n     *  {\n     *      coords: {\n     *          latitude: 41.0214,\n     *          longitude: 28.9948,\n     *      },\n     *      address: {\n     *          city: \""Istanbul\"",\n     *          region: \""34\"",\n     *          state: \""34\"",\n     *          country: \""Turkey\"",\n     *          countryCode: \""TR\""\n     *      },\n     *      formattedAddress: \""Demirtaş, Tesviyeci Sk. No:7, 34134 Fatih/İstanbul, Turkey\"",\n     *      type: \""ROOFTOP\"",\n     *      placeId: \""ChIJ-ZRLfO25yhQRBi5YJxX80Q0\"",\n     *      timezone: {\n     *          id: \""Europe/Istanbul\"",\n     *          name: \""Eastern European Summer Time\"",\n     *          abbr: \""EEST\"",\n     *          dstOffset: 3600,\n     *          rawOffset: 7200\n     *      },\n     *      flag: \""//cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/flags/4x3/tr.svg\"",\n     *      map: {\n     *          element: HTMLElement,\n     *          instance: Object, // google.maps.Map\n     *          marker: Object, // google.maps.Marker\n     *          infoWindow: Object, // google.maps.InfoWindow\n     *          options: Object // map options\n     *      },\n     *      staticMap: \""//maps.googleapis.com/maps/api/staticmap?center=41.0214,28.9948&maptype=roadmap&size=600x300&scale=1&zoom=9&format=png&language=en&markers=color%3Ared%7C41.0214%2C228.9948&key=YOUR-GOOGLE-API-KEY\"",\n     *      provider: \""freegeoip\"",\n     *      timestamp: 1466216325223\n     *  }\n     */\n    static locateByIP(options, callback) {\n        // passed source can be a string or object\n        let source = geolocator._.geoIpSource;\n\n        if (!utils.isPlainObject(source)) {\n            throw new GeoError(\n                GeoError.Code.INVALID_GEO_IP_SOURCE,\n                'Please set a valid Geo-IP Source via geolocator.setGeoIPSource(options).'\n            );\n        }\n\n        // check options and Google key\n        checkGoogleKey(options || {});\n\n        let jsonpOpts = {\n            url: source.url,\n            async: true,\n            clean: true\n            // params: {}\n        };\n        if (source.callbackParam) {\n            jsonpOpts.callbackParam = source.callbackParam;\n            jsonpOpts.rootName = 'geolocator._.cb';\n        } else if (!source.globalVar) {\n            throw new GeoError(\n                GeoError.Code.INVALID_GEO_IP_SOURCE,\n                'Either callbackParam or globalVar should be set for Geo-IP source.'\n            );\n        }\n        return fetch.jsonp(jsonpOpts, (err, response) => {\n            if (err) {\n                return callback(GeoError.create(err), null);\n            }\n            if (source.globalVar) {\n                if (window[source.globalVar]) {\n                    response = utils.clone(window[source.globalVar]);\n                    delete window[source.globalVar];\n                } else {\n                    response = null;\n                }\n            }\n            if (!response) {\n                err = new GeoError(GeoError.Code.INVALID_RESPONSE);\n                return callback(err, null);\n            }\n            if (utils.isPlainObject(source.schema)) {\n                response = utils.mapToSchema(response, source.schema);\n            }\n            response.provider = source.provider || 'unknown';\n            setLocationURLs(response, options);\n            if (response.coords) {\n                response.coords.latitude = Number(response.coords.latitude);\n                response.coords.longitude = Number(response.coords.longitude);\n            }\n            let cb = callbackMap(options, callback);\n            fetchAddressAndTimezone(response, options, cb);\n        });\n    }\n\n    /**\n     *  Sets the Geo-IP source to be used for fetching location information\n     *  by user's IP; which is internally used by\n     *  {@link #geolocator.locateByIP|`geolocator.locateByIP()` method}.\n     *\n     *  By default, Geolocator uses FreeGeoIP as the Geo-IP source provider.\n     *  You can use this method to change this; or you can choose from\n     *  ready-to-use\n     *  {@link https://github.com/onury/geolocator/tree/master/src/geo-ip-sources|Geo-IP sources}.\n     *\n     *  @param {Object} options\n     *         Geo-IP Source options.\n     *      @param {String} [options.provider]\n     *             Source or service provider's name.\n     *      @param {String} options.url\n     *             Source URL without the callback query parameter. The callback\n     *             name (if supported) should be set via `options.callbackParam`.\n     *             Also, make sure the service supports the protocol you use in\n     *             the enums.URL. If it supports both HTTP and HTTPS, you can omit the\n     *             protocol. In this case, it will be determined via Geolocator\n     *             configuration.\n     *             See {@link #geolocator.config|`geolocator.config()`}.\n     *             NOTE: Do not forget to include your API key in the query\n     *             parameters of the URL, if you have one.\n     *      @param {String} [options.callbackParam]\n     *             If JSON callback is supported, pass the name of the callback\n     *             parameter, defined by the provider.\n     *      @param {Object} [options.globalVar]\n     *             Set this instead of `options.callbackParam` if the service\n     *             does not support JSON callbacks, but weirdly set a global\n     *             variable in the document. For example, if the response is\n     *             `Geo = { lat, lng }`, you should set this to `\""Geo\""`.\n     *      @param {Object} [options.schema]\n     *             Schema object to be used to re-structure the response returned\n     *             from the service. Set the response object's keys as values of\n     *             a custom object to map the format to the `location` object.\n     *             For example; if the service returns a response like\n     *             `{ lat: 40.112233, lng: 10.112233, otherProp: 'hello' }`.\n     *             Then you should set the following schema:\n     *             `{ coords: { latitude: 'lat', longitude: 'lng' } }`.\n     *\n     *  @return {geolocator}\n     */\n    static setGeoIPSource(options) {\n        if (!utils.isPlainObject(options)) {\n            throw new GeoError(GeoError.Code.INVALID_PARAMETERS, 'Geo-IP source options is invalid.');\n        }\n        if (!utils.isStringSet(options.url)) {\n            throw new GeoError(GeoError.Code.INVALID_PARAMETERS, 'Geo-IP source should have a valid URI.');\n        }\n        // if (!utils.isStringSet(options.callbackParam) && !utils.isStringSet(options.globalVar)) {\n        //     throw new GeoError(GeoError.Code.INVALID_PARAMETERS, 'No \\'callbackParam\\' or \\'globalVar\\' is provided for the Geo-IP Source options.');\n        // }\n        geolocator._.geoIpSource = Object.freeze(options);\n    }\n\n    /**\n     *  Registers a handler for watching the user's location via HTML5\n     *  geolocation; that is triggered each time the position of the device\n     *  changes. This may require/prompt for user's permission.\n     *\n     *  @param {Object} [options]\n     *         HTML5 geo-location settings.\n     *      @param {Boolean} [options.enableHighAccuracy=true]\n     *             Specifies whether the device should provide the most accurate\n     *             position it can. Note that setting this to `true` might consume\n     *             more CPU and/or battery power; and result in slower response\n     *             times.\n     *      @param {Number} [options.timeout=6000]\n     *             HTML5 position timeout setting in milliseconds. Setting this\n     *             to `Infinity` means that Geolocator won't return until the\n     *             position is available.\n     *      @param {Number} [options.maximumAge=0]\n     *             HTML5 position maximum age. Indicates the maximum age in\n     *             milliseconds of a possible cached position that is acceptable\n     *             to return. `0` means, the device cannot use a cached position\n     *             and must attempt to retrieve the real current position. If set\n     *             to `Infinity` the device must return a cached position\n     *             regardless of its age.\n     *      @param {Boolean} [options.clearOnError=false]\n     *             Specifies whether to clear the watcher on first error so that\n     *             it does not execute any more callbacks.\n     *      @param {Object} [options.target]\n     *             Object that defines the target location and settings; that\n     *             when the location is reached, the watcher will auto-clear\n     *             itself and invoke the callback.\n     *      @param {Number} options.target.latitude\n     *             The `latitude` of the target location.\n     *      @param {Number} options.target.longitude\n     *             The `longitude` of the target location.\n     *      @param {Number} [options.target.radius=0.5]\n     *             The radius, in other words; the minimum distance (in\n     *             kilometers or miles) to the target point that should be\n     *             reached.\n     *      @param {Number} [options.target.unitSystem=0]\n     *             Unit system to be used for target radius.\n     *             See {@link #geolocator.UnitSystem|`geolocator.UnitSystem` enumeration}\n     *             for possible values.\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes.\n     *         This takes 2 arguments: `function (err, location) { ... }`.\n     *         If `options.target` is set, `location` will also\n     *         include a `targetReached:Boolean` property.\n     *         See {@link #geolocator~Location|`geolocator~Location` type} for details.\n     *\n     *  @returns {GeoWatcher} - A watcher object that provides a\n     *  `.clear(delay:Number, callback:Function)` method to clear the watcher\n     *  when needed. Optional `delay` argument can be set (in milliseconds) to\n     *  clear in a later time. Omitting this argument will clear the watcher\n     *  immediately. You should always call this method, except if you've set up\n     *  a target; which will auto-clear the watcher when reached.\n     *\n     *  @example\n     *  // Watch my position for 5 minutes.\n     *  var options = { enableHighAccuracy: true, timeout: 6000, maximumAge: 0 };\n     *  var watcher = geolocator.watch(options, function (err, location) {\n     *      console.log(err || location);\n     *  });\n     *  console.log(watcher.id); // ID of the watcher\n     *  watcher.clear(300000); // clear after 5 minutes.\n     *\n     *  @example\n     *  // Watch my position until I'm 350 meters near Disneyland Park.\n     *  options.target = {\n     *      latitude: 33.8120918,\n     *      longitude: -117.9233569,\n     *      radius: 0.35,\n     *      unitSystem: geolocator.UnitSystem.METRIC\n     *  };\n     *  watcher = geolocator.watch(options, function (err, location) {\n     *      if (err) {\n     *          console.log(err);\n     *          return;\n     *      }\n     *      if (location.targetReached) {\n     *          console.log(watcher.isCleared); // true\n     *          console.log(watcher.cycle); // 15 — target reached after 15 cycles\n     *      } else {\n     *          console.log(watcher.isCleared); // false — watcher is active.\n     *      }\n     *  });\n     */\n    static watch(options, callback) {\n        if (!geolocator.isGeolocationSupported()) {\n            callback(new GeoError(GeoError.Code.GEOLOCATION_NOT_SUPPORTED), null);\n            return {};\n        }\n\n        let watcher, target;\n\n        options = utils.extend({\n            enableHighAccuracy: true,\n            timeout: 6000,\n            maximumAge: 0,\n            clearOnError: false\n        }, options);\n\n        if (utils.isPlainObject(options.target)) {\n            target = utils.extend({\n                radius: 0.5,\n                unitSystem: geolocator.UnitSystem.METRIC\n            }, options.target);\n        }\n\n        function onPositionChanged(location) {\n            let pos = utils.clone(location, { own: false });\n            if (target) {\n                let distance = geolocator.calcDistance({\n                    from: location.coords,\n                    to: target,\n                    formula: geolocator.DistanceFormula.HAVERSINE,\n                    unitSystem: target.unitSystem\n                });\n                pos.targetReached = distance <= target.radius;\n                if (watcher && pos.targetReached) {\n                    watcher.clear(() => {\n                        return callback(null, pos);\n                    });\n                }\n            }\n            return callback(null, pos);\n        }\n        function onPositionError(err) {\n            callback(GeoError.create(err), null);\n        }\n        return new GeoWatcher(onPositionChanged, onPositionError, options);\n    }\n\n    /**\n     *  Converts a given address (or address components) into geographic\n     *  coordinates (i.e. latitude, longitude); and gets detailed address\n     *  information.\n     *  @see {@link https://developers.google.com/maps/documentation/geocoding/intro|Google Maps Geocoding API}\n     *  @see {@link https://developers.google.com/maps/documentation/geocoding/usage-limits|Usage Limits}\n     *\n     *  @param {String|Object} options\n     *         Either the address to geocode or geocoding options with the\n     *         following properties.\n     *      @param {String} options.address\n     *             The street address to geocode, in the format used by the\n     *             national postal service of the country concerned. Additional\n     *             address elements such as business names and unit, suite or\n     *             floor numbers should be avoided. Note that any address\n     *             component (route, locality, administrativeArea, postalCode and\n     *             country) should be specified either in address or the\n     *             corresponding property - not both. Doing so may result in\n     *             `ZERO_RESULTS`.\n     *      @param {String} [options.route]\n     *      \t      Long or short name of a route.\n     *      @param {String} [options.locality]\n     *      \t      Locality and sublocality of the location.\n     *      @param {String} [options.administrativeArea]\n     *      \t      Administrative area of the location.\n     *      @param {String} [options.postalCode]\n     *      \t      Postal code of the location.\n     *      @param {String} [options.country]\n     *      \t      A country name or a two letter ISO 3166-1 country code.\n     *      @param {String} [options.region]\n     *      \t      The region code, specified as a ccTLD (\""top-level domain\"")\n     *      \t      two-character value. e.g.: `\""fr\""` for France.\n     *      @param {Array|Object} [options.bounds]\n     *      \t      The bounding box of the viewport within which to bias geocode\n     *      \t      results more prominently. e.g.:\n     *      \t      `[ southwestLat:Number, southwestLng:Number, northeastLat:Number, northeastLng:Number ]`\n     *      @param {String|Object} [options.map]\n     *             In order to create an interactive map from the fetched\n     *             location coordinates; either set this to map options object\n     *             or; the ID of a DOM element or DOM element itself which the\n     *             map will be created within.\n     *      @param {Boolean|Object} [options.staticMap=false]\n     *             Set to `true` to get a static Google Map image URL (with\n     *             default options); or pass a static map options object.\n     *      @param {Boolean} [options.raw=false]\n     *      \t      Whether to return the raw Google API result.\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes.\n     *         This takes 2 arguments: `function (err, location) { ... }`.\n     *         See {@link #geolocator~Location|`geolocator~Location` type} for details.\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  var address = '1600 Amphitheatre Parkway, CA';\n     *  geolocator.geocode(address, function (err, location) {\n     *      console.log(err || location);\n     *  });\n     *\n     *  @example\n     *  // location result:\n     *  {\n     *      coords: {\n     *          latitude: 37.4224764,\n     *          longitude: -122.0842499\n     *      },\n     *      address: {\n     *          commonName: \""\"",\n     *          street: \""Amphitheatre Pkwy\"",\n     *          route: \""Amphitheatre Pkwy\"",\n     *          streetNumber: \""1600\"",\n     *          neighborhood: \""\"",\n     *          town: \""\"",\n     *          city: \""Mountain View\"",\n     *          region: \""Santa Clara County\"",\n     *          state: \""California\"",\n     *          stateCode: \""CA\"",\n     *          postalCode: \""94043\"",\n     *          country: \""United States\"",\n     *          countryCode: \""US\""\n     *      },\n     *      formattedAddress: \""1600 Amphitheatre Parkway, Mountain View, CA 94043, USA\"",\n     *      type: \""ROOFTOP\"",\n     *      placeId: \""ChIJ2eUgeAK6j4ARbn5u_wAGqWA\"",\n     *      flag: \""//cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/flags/4x3/us.svg\"",\n     *      map: {\n     *          element: HTMLElement,\n     *          instance: Object, // google.maps.Map\n     *          marker: Object, // google.maps.Marker\n     *          infoWindow: Object, // google.maps.InfoWindow\n     *          options: Object // map options\n     *      },\n     *      timestamp: 1456795956380\n     *  }\n     */\n    static geocode(options, callback) {\n        geocode(false, options, callback);\n    }\n\n    /**\n     *  Converts the given geographic coordinates into a human-readable address\n     *  information.\n     *  @see {@link https://developers.google.com/maps/documentation/geocoding/intro#ReverseGeocoding|Google Maps (Reverse) Geocoding API}\n     *  @see {@link https://developers.google.com/maps/documentation/geocoding/usage-limits|Usage Limits}\n     *  @alias geolocator.addressLookup\n     *\n     *  @param {Object|String} options\n     *         Either the `placeId` of the location or Reverse Geocoding options\n     *         with the following properties.\n     *      @param {Number} options.latitude\n     *      Latitude of the target location.\n     *      @param {Number} options.longitude\n     *      Longitude of the target location.\n     *      @param {String} [options.placeId]\n     *             Required if `latitude` and `longitude` are omitted. The place\n     *             ID of the place for which you wish to obtain the\n     *             human-readable address. The place ID is a unique identifier\n     *             that can be used with other Google APIs. Note that if\n     *             `placeId` is set, `latitude` and `longitude` are ignored.\n     *      @param {String|Object} [options.map]\n     *             In order to create an interactive map from the fetched\n     *             location coordinates; either set this to map options object\n     *             or; the ID of a DOM element or DOM element itself which the\n     *             map will be created within.\n     *      @param {Boolean|Object} [options.staticMap=false]\n     *             Set to `true` to get a static Google Map image URL (with\n     *             default options); or pass a static map options object.\n     *      @param {Boolean} [options.raw=false]\n     *             Whether to return the raw Google API result.\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes.\n     *         This takes 2 arguments: `function (err, location) { ... }`\n     *         See {@link #geolocator~Location|`geolocator~Location` type} for details.\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  var coords = {\n     *      latitude: 37.4224764,\n     *      longitude: -122.0842499\n     *  };\n     *\n     *  geolocator.reverseGeocode(coords, function (err, location) {\n     *      console.log(err || location);\n     *  });\n     *\n     *  @example\n     *  // location result:\n     *  {\n     *      coords: {\n     *          latitude: 37.4224764,\n     *          longitude: -122.0842499\n     *      },\n     *      address: {\n     *          commonName: \""\"",\n     *          street: \""Amphitheatre Pkwy\"",\n     *          route: \""Amphitheatre Pkwy\"",\n     *          streetNumber: \""1600\"",\n     *          neighborhood: \""\"",\n     *          town: \""\"",\n     *          city: \""Mountain View\"",\n     *          region: \""Santa Clara County\"",\n     *          state: \""California\"",\n     *          stateCode: \""CA\"",\n     *          postalCode: \""94043\"",\n     *          country: \""United States\"",\n     *          countryCode: \""US\""\n     *      },\n     *      formattedAddress: \""1600 Amphitheatre Parkway, Mountain View, CA 94043, USA\"",\n     *      type: \""ROOFTOP\"",\n     *      placeId: \""ChIJ2eUgeAK6j4ARbn5u_wAGqWA\"",\n     *      flag: \""//cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/flags/4x3/us.svg\"",\n     *      map: {\n     *          element: HTMLElement,\n     *          instance: Object, // google.maps.Map\n     *          marker: Object, // google.maps.Marker\n     *          infoWindow: Object, // google.maps.InfoWindow\n     *          options: Object // map options\n     *      },\n     *      timestamp: 1456795956380\n     *  }\n     */\n    static reverseGeocode(options, callback) {\n        geocode(true, options, callback);\n    }\n\n    /**\n     *  Alias for `geolocator.reverseGeocode`\n     *  @private\n     */\n    static addressLookup(options, callback) {\n        geolocator.reverseGeocode(options, callback);\n    }\n\n    /**\n     *  Gets timezone information for the given coordinates.\n     *  Note: Google Browser API keys cannot have referer restrictions when used with this API.\n     *  @see {@link https://developers.google.com/maps/documentation/timezone/intro|Google Maps TimeZone API}\n     *  @see {@link https://developers.google.com/maps/documentation/timezone/usage-limits|Usage Limits}\n     *\n     *  @param {Object} options\n     *         Time zone options.\n     *      @param {Number} options.latitude\n     *             Latitude of location.\n     *      @param {Number} options.longitude\n     *             Longitude of location.\n     *      @param {Number} [options.timestamp=Date.now()]\n     *             Specifies the desired time as seconds since midnight, January\n     *             1, 1970 UTC. This is used to determine whether or not Daylight\n     *             Savings should be applied.\n     *      @param {Boolean} [options.raw=false]\n     *             Whether to return the raw Google API result.\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes, in\n     *         the following signature: `function (err, timezone) { ... }`.\n     *         See {@link #geolocator~TimeZone|`geolocator~TimeZone` type} for\n     *         details.\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  var options = {\n     *      latitude: 48.8534100,\n     *      longitude: 2.3488000\n     *  };\n     *  geolocator.getTimeZone(options, function (err, timezone) {\n     *      console.log(err || timezone);\n     *  });\n     *\n     *  @example\n     *  // timezone result:\n     *  {\n     *      id: \""Europe/Paris\"",\n     *      name: \""Central European Standard Time\"",\n     *      abbr: \""CEST\"",\n     *      dstOffset: 0,\n     *      rawOffset: 3600,\n     *      timestamp: 1455733120\n     *  }\n     */\n    static getTimeZone(options, callback) {\n        if (!utils.isPlainObject(options)\n                || !utils.isNumber(options.latitude)\n                || !utils.isNumber(options.longitude)) {\n            throw new GeoError(GeoError.Code.INVALID_PARAMETERS);\n        }\n\n        checkGoogleKey();\n\n        let conf = geolocator._.config;\n        options = utils.extend({\n            key: conf.google.key || '',\n            language: conf.language || 'en',\n            timestamp: utils.time(true),\n            raw: false\n        }, options);\n\n        let url = utils.setProtocol(enums.URL.GOOGLE_TIMEZONE, conf.https),\n            xhrOpts = {\n                url: `${url}?location=${options.latitude},${options.longitude}&timestamp=${options.timestamp}&language=${options.language}&key=${options.key}`\n            };\n\n        fetch.xhr(xhrOpts, (err, xhr) => {\n            let response = getXHRResponse(err, xhr);\n            if (GeoError.isGeoError(response)) return callback(response, null);\n\n            response = options.raw ? response : {\n                id: response.timeZoneId,\n                name: response.timeZoneName,\n                abbr: utils.abbr(response.timeZoneName, { dots: false }),\n                dstOffset: response.dstOffset,\n                rawOffset: response.rawOffset,\n                timestamp: options.timestamp\n            };\n            callback(err, response);\n        });\n    }\n\n    /**\n     *  Gets the distance and duration values based on the recommended route\n     *  between start and end points.\n     *  @see {@link https://developers.google.com/maps/documentation/distance-matrix/intro|Google Maps Distance Matrix API}\n     *  @see {@link https://developers.google.com/maps/documentation/distance-matrix/usage-limits|Usage Limits}\n     *\n     *  @param {Object} options\n     *         Distance matrix options.\n     *      @param {String|Object|Array} options.origins\n     *             One or more addresses and/or an object of latitude/longitude\n     *             values, from which to calculate distance and time. If you pass\n     *             an address as a string, the service will geocode the string\n     *             and convert it to a latitude/longitude coordinate to calculate\n     *             distances. Following are valid examples:\n     *  <pre><code>options.origins = 'London';\n     *  options.origins = ['London', 'Paris'];\n     *  options.origins = { latitude: 51.5085300, longitude: -0.1257400 };\n     *  options.origins = [\n     *      { latitude: 51.5085300, longitude: -0.1257400 },\n     *      { latitude: 48.8534100, longitude: 2.3488000 }\n     *  ];\n     *  </code></pre>\n     *      @param {String|Object|Array} options.destinations\n     *             One or more addresses and/or an object of latitude/longitude\n     *             values, from which to calculate distance and time. If you pass\n     *             an address as a string, the service will geocode the string\n     *             and convert it to a latitude/longitude coordinate to calculate\n     *             distances.\n     *      @param {String} [options.travelMode=\""DRIVING\""]\n     *             Type of routing requested.\n     *             See {@link #geolocator.TravelMode|`geolocator.TravelMode` enumeration}\n     *             for possible values.\n     *      @param {Boolean} [options.avoidFerries]\n     *             If true, instructs the Distance Matrix service to avoid\n     *             ferries where possible.\n     *      @param {Boolean} [options.avoidHighways]\n     *             If true, instructs the Distance Matrix service to avoid\n     *             highways where possible.\n     *      @param {Boolean} [options.avoidTolls]\n     *             If true, instructs the Distance Matrix service to avoid toll\n     *             roads where possible.\n     *      @param {Number} [options.unitSystem=0]\n     *             Preferred unit system to use when displaying distance.\n     *             See {@link #geolocator.UnitSystem|`geolocator.UnitSystem` enumeration}\n     *             for possible values.\n     *      @param {String} [options.region]\n     *             Region code used as a bias for geocoding requests.\n     *  @param {Boolean} [options.raw=false]\n     *         Whether to return the raw Google API result.\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes,\n     *         in the following signature: `function (err, result) { ... }`\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  var options = {\n     *      origins: [{ latitude: 51.5085300, longitude: -0.1257400 }],\n     *      destinations: [{ latitude: 48.8534100, longitude: 2.3488000 }],\n     *      travelMode: geolocator.TravelMode.DRIVING,\n     *      unitSystem: geolocator.UnitSystem.METRIC\n     *  };\n     *  geolocator.getDistanceMatrix(options, function (err, result) {\n     *      console.log(err || result);\n     *  });\n     *\n     *  @example\n     *  // result:\n     *  [\n     *  \t{\n     *  \t\tfrom: \""449 Duncannon St, London WC2R 0DZ, UK\"",\n     *  \t\tto: \""1 Parvis Notre-Dame - Pl. Jean-Paul II, 75004 Paris-4E-Arrondissement, France\"",\n     *  \t\tdistance: {\n     *  \t\t\tvalue: 475104,\n     *  \t\t\ttext: \""475 km\""\n     *  \t\t},\n     *  \t\tduration: {\n     *  \t\t\tvalue: 20193,\n     *  \t\t\ttext: \""5 hours 37 mins\""\n     *  \t\t},\n     *  \t\tfare: undefined,\n     *  \t\ttimestamp: 1456795956380\n     *  \t}\n     *  ]\n     */\n    static getDistanceMatrix(options, callback) {\n        checkGoogleKey();\n\n        let key = geolocator._.config.google.key;\n        geolocator.ensureGoogleLoaded(key, err => {\n            if (err) {\n                throw new GeoError(GeoError.Code.GOOGLE_API_FAILED, String(err.message || err));\n            }\n\n            let o = options.origins || options.origin || options.from,\n                d = options.destinations || options.destination || options.to;\n            if (!utils.isPlainObject(options) || invalidOriginOrDest(o) || invalidOriginOrDest(d)) {\n                throw new GeoError(GeoError.Code.INVALID_PARAMETERS);\n            }\n            options.origins = geoHelper.toPointList(o);\n            options.destinations = geoHelper.toPointList(d);\n\n            options = utils.extend({\n                travelMode: google.maps.TravelMode.DRIVING,\n                avoidFerries: undefined,\n                avoidHighways: undefined,\n                avoidTolls: undefined,\n                unitSystem: google.maps.UnitSystem.METRIC\n            }, options);\n\n            let service = new google.maps.DistanceMatrixService();\n            service.getDistanceMatrix(options, (response, status) => {\n                let err = null;\n                if (status !== google.maps.DistanceMatrixStatus.OK) {\n                    err = GeoError.fromResponse(status)\n                        || GeoError.fromResponse(response);\n                    response = null;\n                } else {\n                    response = options.raw ? response : geoHelper.formatDistanceResults(response);\n                }\n                callback(err, response);\n            });\n        });\n    }\n\n    /**\n     *  Calculates the distance between two geographic points.\n     *\n     *  @param {Object} options\n     *         Calculation and display options.\n     *      @param {Object} options.from\n     *             Object containing the `latitude` and `longitude` of original\n     *             location.\n     *      @param {Object} options.to\n     *             Object containing the `latitude` and `longitude` of destination.\n     *      @param {String} [options.formula=\""haversine\""]\n     *             The algorithm or formula to calculate the distance.\n     *             See {@link #geolocator.DistanceFormula|`geolocator.DistanceFormula` enumeration}.\n     *      @param {Number} [options.unitSystem=0]\n     *             Preferred unit system to use when displaying distance.\n     *             See {@link #geolocator.UnitSystem|`geolocator.UnitSystem` enumeration}.\n     *\n     *  @returns {Number} - The calculated distance.\n     *\n     *  @example\n     *  // Calculate distance from London to Paris.\n     *  var result = geolocator.calcDistance({\n     *      from: {\n     *          latitude: 51.5085300,\n     *          longitude: -0.1257400\n     *      },\n     *      to: {\n     *          latitude: 48.8534100,\n     *          longitude: 2.3488000\n     *      },\n     *      formula: geolocator.DistanceFormula.HAVERSINE,\n     *      unitSystem: geolocator.UnitSystem.METRIC\n     *  });\n     *  // result: 366.41656039126093 (kilometers)\n     */\n    static calcDistance(options) {\n        options = utils.extend({\n            formula: geolocator.DistanceFormula.HAVERSINE,\n            unitSystem: geolocator.UnitSystem.METRIC\n        }, options);\n\n        let from = options.from,\n            to = options.to,\n            radius = options.unitSystem === geolocator.UnitSystem.METRIC\n                ? EARTH_RADIUS_KM : EARTH_RADIUS_MI;\n\n        if (options.formula === geolocator.DistanceFormula.HAVERSINE) {\n            let dLat = geolocator.degToRad(to.latitude - from.latitude),\n                dLng = geolocator.degToRad(to.longitude - from.longitude),\n                a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n                    Math.cos(geolocator.degToRad(from.latitude)) *\n                    Math.cos(geolocator.degToRad(to.longitude)) *\n                    Math.sin(dLng / 2) * Math.sin(dLng / 2),\n                c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n            return radius * c;\n        }\n        // geolocator.DistanceFormula.PYTHAGOREAN\n        let latA = geolocator.degToRad(from.latitude),\n            latB = geolocator.degToRad(to.latitude),\n            lngA = geolocator.degToRad(from.longitude),\n            lngB = geolocator.degToRad(to.longitude),\n            x = (lngB - lngA) * Math.cos((latA + latB) / 2),\n            y = (latB - latA);\n        return Math.sqrt(x * x + y * y) * radius;\n    }\n\n    /**\n     *  Gets the current public IP of the client.\n     *\n     *  @param {Function} callback\n     *         Callback function to be executed when the request completes, in\n     *         the following signature: `function (err, result) { ... }`\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  geolocator.getIP(function (err, result) {\n     *      console.log(err || result);\n     *  });\n     *\n     *  @example\n     *  // result:\n     *  {\n     *      ip: \""176.232.71.155\"",\n     *      timestamp: 1457573683427\n     *  }\n     */\n    static getIP(callback) {\n        let conf = geolocator._.config;\n\n        let jsonpOpts = {\n            url: utils.setProtocol(enums.URL.IP, conf.https),\n            async: true,\n            clean: true,\n            params: {\n                format: 'jsonp'\n            },\n            callbackParam: 'callback',\n            rootName: 'geolocator._.cb'\n        };\n        return fetch.jsonp(jsonpOpts, (err, response) => {\n            if (err) {\n                return callback(GeoError.create(err), null);\n            }\n            if (!response) {\n                err = new GeoError(GeoError.Code.INVALID_RESPONSE);\n                return callback(err, null);\n            }\n            if (typeof response === 'object') response.timestamp = utils.time();\n            callback(null, response);\n        });\n    }\n\n    /**\n     *  Ensures Google Maps API is loaded. If not, this will load all of the\n     *  main Javascript objects and symbols for use in the Maps API.\n     *\n     *  Note that, Google Maps API is loaded only when needed. For example,\n     *  the DistanceMatrix API does not support Web Service requests and\n     *  requires this API to be loaded. However, the TimeZone API requests are\n     *  made throught the Web Service without requiring a `google` object\n     *  within DOM.\n     *\n     *  Also note that this will not re-load the API if `google.maps` object\n     *  already exists. In this case, the `callback` is still executed and\n     *  no errors are passed.\n     *\n     *  You can use the following overload to omit the `key` argument altogether:\n     *\n     *  `geolocator.ensureGoogleLoaded(callback)`\n     *\n     *  @param {String} [key]\n     *         Google API key.\n     *  @param {Function} callback\n     *         Callback function to be executed when the operation ends.\n     *\n     *  @returns {void}\n     *\n     *  @example\n     *  geolocator.ensureGoogleLoaded(function (err) {\n     *      if (err) return;\n     *      console.log('google' in window); // true\n     *  });\n     */\n    static ensureGoogleLoaded(key, callback) {\n        let k;\n        if (utils.isFunction(key)) {\n            callback = key;\n        } else {\n            k = key;\n        }\n        if (!geolocator.isGoogleLoaded()) {\n            let jsonpOpts = {\n                url: enums.URL.GOOGLE_MAPS_API,\n                async: true,\n                callbackParam: 'callback',\n                params: {\n                    key: k || ''\n                    // callback: ''\n                },\n                rootName: 'geolocator._.cb'\n            };\n            return fetch.jsonp(jsonpOpts, callback);\n        }\n        callback();\n    }\n\n    /**\n     *  Checks whether the Google Maps API is loaded.\n     *\n     *  @returns {Boolean} - Returns `true` if already loaded.\n     */\n    static isGoogleLoaded() {\n        return ('google' in window) && google.maps;\n    }\n\n    /**\n     *  Checks whether the type of the given object is an HTML5 `PositionError`.\n     *\n     *  @param {*} obj - Object to be checked.\n     *  @return {Boolean}\n     */\n    static isPositionError(obj) {\n        return utils.isPositionError(obj);\n    }\n\n    /**\n     *  Checks whether the given value is an instance of `GeoError`.\n     *\n     *  @param {*} obj - Object to be checked.\n     *  @return {Boolean}\n     */\n    static isGeoError(obj) {\n        return GeoError.isGeoError(obj);\n    }\n\n    /**\n     *  Checks whether HTML5 Geolocation API is supported.\n     *\n     *  @return {Boolean}\n     */\n    static isGeolocationSupported() {\n        return navigator && ('geolocation' in navigator);\n    }\n\n    /**\n     *  Converts kilometers to miles.\n     *\n     *  @param {Number} km - Kilometers to be converted.\n     *  @returns {Number} - Miles.\n     */\n    static kmToMi(km) {\n        return km * 0.621371;\n    }\n\n    /**\n     *  Converts miles to kilometers.\n     *\n     *  @param {Number} mi - Miles to be converted.\n     *  @returns {Number} - Kilometers.\n     */\n    static miToKm(mi) {\n        return mi / 0.621371;\n    }\n\n    /**\n     *  Converts degrees to radians.\n     *\n     *  @param {Number} deg - Degrees to be converted.\n     *  @returns {Number} - Radians.\n     */\n    static degToRad(degrees) {\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     *  Converts radians to degrees.\n     *\n     *  @param {Number} rad - Radians to be converted.\n     *  @returns {Number} - Degrees.\n     */\n    static radToDeg(radians) {\n        return radians * (180 / Math.PI);\n    }\n\n    /**\n     *  Converts decimal coordinates (either lat or lng) to degrees, minutes, seconds.\n     *\n     *  @param {Number} dec\n     *         Decimals to be converted.\n     *  @param {Boolean} [isLng=false]\n     *         Indicates whether the given decimals is longitude.\n     *\n     *  @returns {String} - Degrees, minutes, seconds.\n     */\n    static decToDegMinSec(dec, isLng = false) {\n        // Degrees Latitude must be in the range of -90. to 90.\n        // Degrees Longitude must be in the range of -180 to 180.\n        // +Latitude is North, -Latitude is South\n        // +Longitude is East, -Longitude is West\n        let sign = dec < 0 ? -1 : 1,\n            sn = dec < 0 ? 'S' : 'N',\n            we = dec < 0 ? 'W' : 'E',\n            nsew = !isLng ? sn : we,\n            absValue = Math.abs(Math.round(dec * 1000000.0));\n        return ((Math.floor(absValue / 1000000) * sign) + '° ' + Math.floor(((absValue / 1000000) - Math.floor(absValue / 1000000)) * 60) + '\\' ' +\n                (Math.floor(((((absValue / 1000000) - Math.floor(absValue / 1000000)) * 60) - Math.floor(((absValue / 1000000) - Math.floor(absValue / 1000000)) * 60)) * 100000) * 60 / 100000) + '\"" ') + nsew;\n    }\n\n}\n\n// ---------------------------\n// HELPER METHODS\n// ---------------------------\n\n/**\n *  Used with distance matrix calls.\n *  @private\n */\nfunction invalidOriginOrDest(value) {\n    return !utils.isString(value)\n        && !utils.isArray(value)\n        && !utils.isPlainObject(value);\n}\n\n/**\n *  Check if XHR response is an error response and returns a `GeoError`.\n *  If not, returns the parsed response.\n *  @private\n *\n *  @param {Error} err\n *         XHR error.\n *  @param {Object} xhr\n *         XHR object to be checked.\n *\n *  @returns {GeoError|Object}\n */\nfunction getXHRResponse(err, xhr) {\n    if (err) return GeoError.create(err);\n    if (!xhr) return new GeoError(GeoError.Code.REQUEST_FAILED);\n    let response = utils.safeJsonParse(xhr.responseText);\n    // Check if XHR response is an error response.\n    // return response if not.\n    return GeoError.fromResponse(response) || response;\n}\n\n/**\n *  Checks the given options and determines if Google key is required.\n *  Throws if key is required but not set or valid.\n *  @private\n *\n *  @param {Object} [options]\n *         Options to be checked. If `undefined`, directly checks Googke key.\n */\nfunction checkGoogleKey(options) {\n    if (!options || (options.addressLookup || options.timezone || options.map || options.staticMap)) {\n        if (!geolocator._.config.google.key) {\n            throw new GeoError(GeoError.Code.GOOGLE_KEY_INVALID, 'A Google API key is required but it\\'s not set or valid.');\n        }\n    }\n}\n\n/**\n *  Checks and adds necessary properties to map options from the given location\n *  result object. This is used with methods that support `map` option; to\n *  create a map from the result coordinates; such as locate() method.\n *  @private\n *\n *  @param {Object|String} options\n *         Original options object.\n *  @param {Object} location\n *         Location result object.\n *\n *  @returns {Object} - Final map options object.\n */\nfunction getMapOpts(mapOptions, location) {\n    if (utils.isObject(mapOptions)) {\n        mapOptions.center = location.coords;\n    } else {\n        mapOptions = {\n            element: mapOptions,\n            center: location.coords\n        };\n    }\n    // this will enable infoWindow\n    if (location.formattedAddress) {\n        mapOptions.title = location.formattedAddress;\n    }\n    // if location has accuracy, (and zoom is not set) we can zoom in a bit more\n    if (!mapOptions.zoom\n            && location.coords\n            && utils.isNumber(location.coords.accuracy)\n            && location.coords.accuracy < 1500) {\n        mapOptions.zoom = 15;\n    }\n    return mapOptions;\n}\n\n/**\n *  Checks the HTMLElement to see whether a previous map and related objects\n *  (marker, infoWindow) are created for it; by checking our private property\n *  `_geolocatorMapData`. If there is a map, this does not re-create it (which\n *  will break the map) but only re-adjust center, zoom and re-create the marker\n *  if needed. We use this approach bec. Google maps has no feature to destroy\n *  a map. This is considered a bug by Google developers.\n *  @private\n *\n *  @param {Object} options\n *         Options for creating a map.\n */\nfunction configCreateMap(options) {\n    let elem = options.element,\n        // when geolocator creates a map, it will set a `_geolocatorMapData`\n        // property on the element. So we can use this map instance later,\n        // when the same HTMLElement is passed to create a map. So check if\n        // we have it here.\n        mapData = elem._geolocatorMapData,\n        map = (mapData && mapData.instance) || null,\n        marker = (mapData && mapData.marker) || null,\n        infoWindow = (mapData && mapData.infoWindow) || null,\n        center = new google.maps.LatLng(options.center.latitude, options.center.longitude),\n        mapOptions = {\n            mapTypeId: options.mapTypeId,\n            center: center,\n            zoom: options.zoom,\n            styles: options.styles || null\n        };\n\n    // if we have a map, we'll just configure it. otherwise, we'll create\n    // one.\n    if (map) {\n        map.setOptions(mapOptions);\n    } else {\n        map = new google.maps.Map(options.element, mapOptions);\n    }\n\n    // destroy marker and infoWindow if previously created for this element.\n    if (infoWindow) infoWindow = null;\n    if (marker && marker instanceof google.maps.Marker) {\n        google.maps.event.clearInstanceListeners(marker);\n        marker.setMap(null);\n        marker = null;\n    }\n\n    // check the new options to see if we need to re-create a marker for\n    // this.\n    if (options.marker) {\n        marker = new google.maps.Marker({\n            position: mapOptions.center,\n            map: map\n        });\n        if (options.title) {\n            infoWindow = new google.maps.InfoWindow();\n            infoWindow.setContent(options.title);\n            // infoWindow.open(map, marker);\n            google.maps.event.addListener(marker, 'click', () => {\n                infoWindow.open(map, marker);\n            });\n        }\n    }\n\n    mapData = {\n        element: elem,\n        instance: map,\n        marker: marker,\n        infoWindow: infoWindow,\n        options: mapOptions\n    };\n    // set the reference on the element for later use, if needed.\n    elem._geolocatorMapData = mapData;\n    return mapData;\n}\n\n/**\n *  Sets the `flag` and `staticMap` (if enabled) property of the given location.\n *  @private\n *\n *  @param {Object} location - Fetched location result.\n *  @param {Object} options - initial options.\n */\nfunction setLocationURLs(location, options) {\n    if (!location || !location.address) return;\n    let cc,\n        address = location.address;\n    if (utils.isString(address.countryCode) && address.countryCode.length === 2) {\n        cc = address.countryCode;\n    } else if (utils.isString(address.country) && address.country.length === 2) {\n        cc = address.country;\n    }\n    if (!cc) return;\n    location.flag = enums.URL.FLAG + cc.toLowerCase() + '.svg';\n    if (options.staticMap) {\n        let opts = utils.isPlainObject(options.staticMap)\n            ? utils.clone(options.staticMap)\n            : {};\n        opts.center = location.coords;\n        location.staticMap = geolocator.getStaticMap(opts);\n    }\n}\n\n/**\n *  Nests `createMap` callback within the given callback.\n *  @private\n *\n *  @param {Object} options\n *         Method options.\n *  @param {Function} callback\n *         Parent callback.\n *\n *  @returns {Function} - Nested callback.\n */\nfunction callbackMap(options, callback) {\n    return function cb(err, location) {\n        if (err) return callback(GeoError.create(err), null);\n        setLocationURLs(location, options);\n        if (!options.map) return callback(null, location);\n        options.map = getMapOpts(options.map, location);\n        geolocator.createMap(options.map, (error, map) => {\n            if (error) return callback(error, null);\n            location.map = map;\n            return callback(null, location);\n        });\n    };\n}\n\n/**\n *  Sends a geocode or reverse-geocode request with the given options.\n *  @private\n *\n *  @param {Boolean} reverse\n *         Whether to send reverse-geocode request.\n *  @param {Object} options\n *         Geocode options.\n *  @param {Function} callback\n *         Callback to be nested and executed with map callback.\n */\nfunction geocode(reverse, options, callback) {\n    checkGoogleKey();\n    geoHelper.geocode(\n        reverse,\n        geolocator._.config,\n        options,\n        callbackMap(options, callback)\n    );\n}\n\n/**\n *  Runs both an address and a timezone look-up for the given location.\n *  @private\n *\n *  @param {Object} location\n *         Location object.\n *  @param {Object} options\n *         Method options.\n *  @param {Function} callback\n *         Parent callback.\n */\nfunction fetchAddressAndTimezone(location, options, callback) {\n    let loc = utils.clone(location, { own: false });\n    if (!options.addressLookup && !options.timezone) {\n        return callback(null, loc);\n    }\n    function getTZ(cb) {\n        geolocator.getTimeZone(loc.coords, (err, timezone) => {\n            if (err) {\n                return cb(err, null);\n            }\n            delete timezone.timestamp;\n            loc.timezone = timezone;\n            loc.timestamp = utils.time(); // update timestamp\n            cb(null, loc);\n        });\n    }\n    if (options.addressLookup) {\n        geolocator.reverseGeocode(loc.coords, (err, result) => {\n            if (err) return callback(err, null);\n            loc = utils.extend({}, result, loc);\n            loc.address = result.address;\n            loc.timestamp = utils.time(); // update timestamp\n            if (!options.timezone) {\n                callback(err, loc);\n            } else {\n                getTZ(callback);\n            }\n        });\n    } else if (options.timezone) {\n        getTZ(callback);\n    } else {\n        callback(null, loc);\n    }\n}\n\n/**\n *  Gets the position with better accuracy.\n *  See https://github.com/gwilson/getAccurateCurrentPosition#background\n *  @private\n *\n *  @param {Object} options\n *         Locate options.\n *  @param {Function} onPositionReceived\n *         Success callback.\n *  @param {Function} onPositionError\n *         Error callback.\n */\nfunction locateAccurate(options, onPositionReceived, onPositionError) {\n    let loc,\n        watcher,\n        onProgress = !utils.isFunction(options.onProgress)\n            ? utils.noop\n            : options.onProgress;\n\n    function complete() {\n        if (!loc) {\n            onPositionError(new GeoError(GeoError.Code.POSITION_UNAVAILABLE));\n        } else {\n            onPositionReceived(loc);\n        }\n    }\n\n    watcher = geolocator.watch(options, (err, location) => {\n        if (err) {\n            return watcher.clear(() => {\n                onPositionError(err);\n            });\n        }\n        loc = location;\n        // ignore the first event if not the only result; for more accuracy.\n        if ((watcher.cycle > 1) && (loc.coords.accuracy <= options.desiredAccuracy)) {\n            watcher.clear(complete);\n        } else {\n            onProgress(loc);\n        }\n    });\n    watcher.clear(options.maximumWait + 100, complete);\n}\n\n// ---------------------------\n// INITIALIZE\n// ---------------------------\n\n/**\n *  @private\n *  @type {Object}\n */\ngeolocator._ = {\n    config: utils.extend({}, defaultConfig),\n    // Storage for global callbacks.\n    cb: {}\n};\n\n// setting default Geo-IP source, FreeGeoIP\ngeolocator.setGeoIPSource({\n    provider: 'freegeoip',\n    url: 'https://freegeoip.net/json',\n    callbackParam: 'callback',\n    schema: {\n        ip: 'ip',\n        coords: {\n            latitude: 'latitude',\n            longitude: 'longitude'\n        },\n        address: {\n            city: 'city',\n            state: 'region_name',\n            stateCode: 'region_code',\n            postalCode: 'zip_code',\n            countryCode: 'country_code',\n            country: 'country_name',\n            region: 'region_name'\n        },\n        timezone: {\n            id: 'time_zone'\n        }\n    }\n});\n\n// ---------------------------\n// EXPORT\n// ---------------------------\n\nexport default geolocator;\n\n// ---------------------------\n// ADDITIONAL DOCUMENTATION\n// ---------------------------\n\n/**\n *  `Coordinates` inner type that specifies the geographic position of the\n *  device. The position is expressed as a set of geographic coordinates\n *  together with information about heading and speed.\n *\n *  This is generally returned as part of the\n *  {@link ?api=geolocator#geolocator~Location|`Location` result object}.\n *\n *  @typedef geolocator~Coordinates\n *  @type Object\n *\n *  @property {Number} latitude\n *         Specifies the latitude estimate in decimal degrees. The value\n *         range is [-90.00, +90.00].\n *  @property {Number} longitude\n *         Specifies the longitude estimate in decimal degrees. The value\n *         range is [-180.00, +180.00].\n *  @property {Number} altitude\n *         Specifies the altitude estimate in meters above the WGS 84\n *         ellipsoid.\n *  @property {Number} accuracy\n *         Specifies the accuracy of the latitude and longitude estimates in\n *         meters.\n *  @property {Number} altitudeAccuracy\n *         Specifies the accuracy of the altitude estimate in meters.\n *  @property {Number} heading\n *         Specifies the device's current direction of movement in degrees\n *         counting clockwise relative to true north.\n *  @property {Number} speed\n *         Specifies the device's current ground speed in meters per second.\n */\n\n/**\n *\t`Address` inner type that specifies the address of the fetched location.\n *\tThe address is expressed as a set of political and locality components.\n *\n *  This is generally returned as part of the\n *  {@link ?api=geolocator#geolocator~Location|`Location` result object}.\n *\n *  @typedef geolocator~Address\n *  @type Object\n *\n *  @property {String} commonName\n *         Indicates a point of interest, a premise or colloquial area name for\n *         the fetched location, if any.\n *  @property {String} streetNumber\n *         Indicates the precise street number of the fetched location, if any.\n *  @property {String} street\n *         Indicates the street name of the fetched location, if any.\n *  @property {String} route\n *         Indicates the route name of the fetched location, if any.\n *  @property {String} neighborhood\n *         Indicates the neighborhood name of the fetched location, if any.\n *  @property {String} town\n *         Indictes the town of the fetched location, if any.\n *  @property {String} city\n *         Indicates the city of the fetched location.\n *  @property {String} region\n *         Indicates the political region name of the fetched location, if any.\n *  @property {String} postalCode\n *         Indicates the postal code of the fetched location, if any.\n *  @property {String} state\n *         Indicates the state of the fetched location, if any.\n *  @property {String} stateCode\n *         Indicates the state code of the fetched location, if any.\n *  @property {String} country\n *         Indicates the national political entity of the fetched location.\n *  @property {String} countryCode\n *         Indicates the ISO alpha-2 country code of the fetched location.\n */\n\n/**\n *\t`TimeZone` inner type that specifies time offset data for the fetched\n *\tlocation on the surface of the earth.\n *\n *  This is generally returned as part of the\n *  {@link ?api=geolocator#geolocator~Location|`Location` result object}.\n *\n *  @typedef geolocator~TimeZone\n *  @type Object\n *\n *  @property {String} id\n *         The ID of the time zone, such as `\""America/Los_Angeles\""` or\n *         `\""Australia/Sydney\""`. These IDs are defined in the\n *         {@link http://www.iana.org/time-zones|IANA Time Zone Database},\n *         which is also available in searchable format in Wikipedia's\n *         {@link http://en.wikipedia.org/wiki/List_of_tz_database_time_zones|List of tz database time zones}.\n *  @property {String} name\n *         The long form name of the time zone. This field will be localized if\n *         the Geolocator `language` is configured. e.g. `\""Pacific Daylight Time\""`\n *         or `\""Australian Eastern Daylight Time\""`.\n *  @property {String} abbr\n *         The abbreviation of the time zone.\n *  @property {Number} dstOffset\n *         The offset for daylight-savings time in seconds. This will be zero\n *         if the time zone is not in Daylight Savings Time during the specified\n *         timestamp.\n *  @property {Number} rawOffset\n *         The offset from UTC (in seconds) for the given location. This does\n *         not take into effect daylight savings.\n */\n\n/**\n *\t`MapData` inner type that provides references to the components of a\n *\tcreated Google Maps `Map` and the containing DOM element.\n *\n *  This is generally returned as part of the\n *  {@link ?api=geolocator#geolocator~Location|`Location` result object}.\n *\n *  @typedef geolocator~MapData\n *  @type Object\n *\n *  @property {HTMLElement} element\n *         DOM element which a (Google) map is created within.\n *  @property {google.maps.Map} instance\n *         Instance of a Google Maps `Map` object.\n *  @property {google.maps.Marker} marker\n *         Instance of a Google Maps `Marker` object, if any.\n *  @property {google.maps.InfoWindow} infoWindow\n *         Instance of a Google Maps `InfoWindow` object, if any.\n *  @property {Object} options\n *         Arbitrary object of applied map options.\n */\n\n/**\n *\t`Location` inner type that specifies geographic coordinates, address and\n *\ttime zone information for the fetched location.\n *\n *  This result object is passed to the callbacks of the corresponding\n *  asynchronous Geolocator methods (such as `.locate()` method), as the second\n *  argument. The contents of this object will differ for various  Geolocator\n *  methods, depending on the configured method options.\n *\n *  @typedef geolocator~Location\n *  @type Object\n *\n *  @property {Coordinates} coords\n *         Specifies the geographic location of the device. The location is\n *         expressed as a set of geographic coordinates together with\n *         information about heading and speed.\n *         See {@link #geolocator~Coordinates|`geolocator~Coordinates` type}\n *         for details.\n *  @property {Address} address\n *         Specifies the address of the fetched location. The address is\n *         expressed as a set of political and locality components.\n *         This property might be `undefined` if `addressLookup` option is not\n *         enabled for the corresponding method.\n *         See {@link #geolocator~Address|`geolocator~Address` type}\n *         for details.\n *  @property {String} formattedAddress\n *         The human-readable address of this location. Often this address is\n *         equivalent to the \""postal address,\"" which sometimes differs from\n *         country to country.\n *  @property {Boolean} targetReached\n *         Specifies whether the defined target coordinates is reached.\n *         This property is only available for\n *         {@link #geolocator.watch|`geolocator.watch()`} method when `target`\n *         option is defined.\n *  @property {String} type\n *         Type of the location. See\n *         {@link #geolcoator.LocationType|`geolcoator.LocationType` enumeration}\n *         for details.\n *  @property {String} placeId\n *         A unique identifier that can be used with other Google APIs.\n *  @property {String} flag\n *         URL of the country flag image, in SVG format. This property exists\n *         only if address information is available.\n *  @property {TimeZone} timezone\n *         Specifies time offset data for the fetched location on the surface of\n *         the earth. See {@link #geolocator~TimeZone|`geolocator~TimeZone` type}\n *         for details.\n *  @property {MapData} map\n *         Provides references to the components of a created Google Maps `Map`\n *         and the containing DOM element. See\n *         {@link #geolocator~MapData|`geolocator~MapData` type} for details.\n *  @property {String} staticMap\n *         URL of a static Google map image, for the location.\n *  @property {Number} timestamp\n *         Specifies the time when the location information was retrieved and\n *         the `Location` object created.\n */\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/geolocator.js\n **/"",""\nlet _toString = Object.prototype.toString;\n\n/**\n * Simple utility methods; internally used within Geolocator core;\n * made publically accessible.\n * @type {Object}\n * @readonly\n *\n * @license MIT\n * @copyright 2016, Onur Yıldırım (onur@cutepilot.com)\n */\nconst utils = {\n\n    noop() {},\n\n    // ---------------------------\n    // Validation\n    // ---------------------------\n\n    /**\n     * Checks if the type of the given value is `String`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isString(value) {\n        return typeof value === 'string';\n    },\n\n    isStringSet(value) {\n        return typeof value === 'string' && value.trim().length > 0;\n    },\n\n    /**\n     * Checks if the type of the given value is `Number`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isNumber(value) {\n        return typeof value === 'number';\n    },\n\n    /**\n     * Checks if the type of the given value is an `Object` or `Function`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isObject(value) {\n        let type = typeof value;\n        return Boolean(value) && (type === 'object' || type === 'function');\n    },\n\n    /**\n     * Checks if the type of the given value is `Function`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isFunction(value) {\n        return typeof value === 'function';\n    },\n\n    /**\n     * Checks if the type of the given value is `Array`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isArray(value) {\n        return Boolean(value) && _toString.call(value) === '[object Array]';\n    },\n\n    /**\n     * Checks if the given object is a non-empty `Array`.\n     * @memberof utils\n     *\n     * @param {*} array - Object to be checked.\n     * @returns {Boolean}\n     */\n    isFilledArray(array) {\n        return utils.isArray(array) && array.length > 0;\n    },\n\n    /**\n     * Checks if the given value is a plain `Object`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isPlainObject(value) {\n        return Boolean(value)\n            && typeof value === 'object'\n            && _toString.call(value) === '[object Object]';\n    },\n\n    /**\n     * Checks if the given value is a `Date`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isDate(value) {\n        return Boolean(value) && _toString.call(value) === '[object Date]';\n    },\n\n    /**\n     * Checks if the given object is a DOM element.\n     * @memberof utils\n     *\n     * @param {Object} object - Object to be checked.\n     * @returns {Boolean}\n     */\n    isElement(object) {\n        if (!object) return false;\n        return object instanceof HTMLElement\n            || (typeof object === 'object' && object.nodeType === 1);\n    },\n\n    /**\n     * Checks if the given object is a DOM node.\n     * @memberof utils\n     *\n     * @param {Object} object - Object to be checked.\n     * @returns {Boolean}\n     */\n    isNode(object) {\n        if (!object) return false;\n        return object instanceof Node\n            || (typeof object === 'object' && typeof object.nodeType === 'number');\n    },\n\n    /**\n     * Checks if the given object is a jQuery instance.\n     * This will still return `false` if the jQuery instance has no items.\n     * @memberof utils\n     *\n     * @param {Object} object - Object to be checked.\n     * @returns {Boolean}\n     */\n    isJQueryObject(object) {\n        if (!object) return false;\n        return ('jQuery' in window && object instanceof window.jQuery && Boolean(object[0]));\n            // http://api.jquery.com/jquery-2/\n            // || (typeof object === 'object' && Boolean(object.jquery));\n    },\n\n    /**\n     * Checks if the type of the given value is an HTML5 `PositionError`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isPositionError(value) {\n        return Boolean(value) && _toString.call(value) === '[object PositionError]';\n    },\n\n    /**\n     * Checks if the given value is an instance of `Error` or HTML5 `PositionError`.\n     * @memberof utils\n     *\n     * @param {*} value - Value to be checked.\n     * @returns {Boolean}\n     */\n    isError(value) {\n        return (value instanceof Error) || utils.isPositionError(value);\n    },\n\n    // ---------------------------\n    // String\n    // ---------------------------\n\n    /**\n     * Removes the query string portion from the given URL string.\n     * @memberof utils\n     *\n     * @param {String} str - String to be processed.\n     * @returns {String} - Returns the rest of the string.\n     */\n    removeQuery(str) {\n        return str.replace(/\\?.*$/, '');\n    },\n\n    /**\n     * Removes the protocol portion from the given URL string.\n     * @memberof utils\n     *\n     * @param {String} str - String to be processed.\n     * @returns {String} - Returns the rest of the string.\n     */\n    removeProtocol(str) {\n        return str.replace(/^(.*:)?\\/\\//, '');\n    },\n\n    /**\n     * Sets the protocol of the given URL.\n     * @memberof utils\n     *\n     * @param {String} url\n     *        The URL to be modified.\n     * @param {Boolean} [https]\n     *        Specifies whether to set the protocol to HTTPS.\n     *        If omitted, current page protocol will be used.\n     *\n     * @returns {String} - The modified URL string.\n     */\n    setProtocol(url, https) {\n        let p;\n        if (https === undefined || https === null) {\n            p = window.location.protocol;\n        } else {\n            p = https ? 'https:' : 'http:';\n        }\n        url = utils.removeProtocol(url);\n        return `${p}//${url}`;\n    },\n\n    /**\n     * Removes both the leading and trailing dots from the given string.\n     * @memberof utils\n     *\n     * @param {String} str - String to be processed.\n     * @returns {String} - Returns the rest of the string.\n     */\n    trimDots(str) {\n        return str.replace(/^\\.+?(.*?)\\.+?$/g, '$1');\n    },\n\n    /**\n     * URL-Encodes the given string. Note that the encoding is done Google's\n     * way; that is, spaces are replaced with `+` instead of `%20`.\n     * @memberof utils\n     *\n     * @param {String} str - String to be processed.\n     * @returns {String} - Returns the encoded string.\n     */\n    encodeURI(str) {\n        return encodeURIComponent(str).replace(/%20/g, '+');\n    },\n\n    /**\n     * URL-Decodes the given string. This is the reverse of `utils.encodeURI()`;\n     * so pluses (`+`) are replaced with spaces.\n     * @memberof utils\n     *\n     * @param {String} str - String to be processed.\n     * @returns {String} - Returns the decoded string.\n     */\n    decodeURI(str) {\n        return decodeURIComponent(str.replace(/\\+/g, '%20'));\n    },\n\n    /**\n     * Converts the given value to string.\n     * `null` and `undefined` converts to empty string.\n     * If value is a function, it's native `toString()` method is used.\n     * Otherwise, value is coerced.\n     * @memberof utils\n     *\n     * @param {*} value - String to be converted.\n     * @returns {String} - Returns the result string.\n     */\n    toString(value) {\n        if (value === null || value === undefined) return '';\n        if (value.toString && utils.isFunction(value.toString)) {\n            return value.toString();\n        }\n        return String(value);\n    },\n\n    /**\n     * Generates a random string with the number of characters.\n     * @memberof utils\n     *\n     * @param {Number} [len=1] - Length of the string.\n     * @returns {String} - Returns a random string.\n     */\n    randomString(len) {\n        if (!len || !utils.isNumber(len)) len = 1;\n        len = -Math.abs(len);\n        return Math.random().toString(36).slice(len);\n    },\n\n    /**\n     * Gets the abbreviation of the given phrase.\n     * @memberof utils\n     *\n     * @param {String} str\n     *        String to abbreviate.\n     * @param {Object} [options]\n     *        Abbreviation options.\n     *     @param {Boolean} [options.upper=true]\n     *            Whether to convert to upper-case.\n     *     @param {Boolean} [options.dots=true]\n     *            Whether to add dots after each abbreviation.\n     *\n     * @returns {String} - Returns the abbreviation of the given phrase.\n     */\n    abbr(str, options) {\n        options = utils.extend({\n            upper: true,\n            dots: true\n        }, options);\n        let d = options.dots ? '.' : '',\n            s = str.match(/(\\b\\w)/gi).join(d) + d;\n        return options.upper ? s.toUpperCase() : s;\n    },\n\n    /**\n     * Builds URI parameters from the given object.\n     * Note: This does not iterate deep objects.\n     * @memberof utils\n     *\n     * @param {Object} obj - Object to be processed.\n     * @param {Object} options - Parameterize options.\n     *     @param {Boolean} [options.encode=true]\n     *            Whether to encode URI components.\n     *     @param {String} [options.operator=\""=\""]\n     *     @param {String} [options.separator=\""&\""]\n     *     @param {Array} [options.include]\n     *            Keys to be included in the output params. If defined,\n     *            `options.exclude` is ignored.\n     *     @param {Array} [options.exclude]\n     *            Keys to be excluded from the output params.\n     *\n     * @returns {String} - URI parameters string.\n     */\n    params(obj, options) {\n        if (!utils.isPlainObject(obj) || Object.keys(obj).length === 0) {\n            return '';\n        }\n\n        options = utils.extend({\n            encode: true,\n            operator: '=',\n            separator: '&',\n            include: undefined,\n            exclude: undefined\n        }, options);\n\n        let params = [],\n            inc = utils.isArray(options.include) ? options.include : null,\n            exc = !inc && utils.isArray(options.exclude) ? options.exclude : null;\n        utils.forIn(obj, (value, key) => {\n            if ((!inc || inc.indexOf(key) >= 0)\n                    && (!exc || exc.indexOf(key) < 0)) {\n                let v = utils.toString(value);\n                v = options.encode ? utils.encodeURI(v) : v;\n                let k = options.encode ? utils.encodeURI(key) : key;\n                params.push(k + options.operator + v);\n            }\n        });\n\n        return params.join(options.separator);\n    },\n\n    /**\n     * Gets the object from the given object notation string.\n     * @private\n     *\n     * @param {String} notation - Object notation.\n     * @returns {*} - Any existing object.\n     */\n    notateGlobalObj(notation) {\n        notation = utils.trimDots(notation);\n        let levels = notation.split('.'),\n            o = window;\n        if (levels[0] === 'window' || levels[0] === 'document') {\n            levels.shift();\n        }\n        levels.forEach(note => {\n            o = o[note];\n        });\n        return o;\n    },\n\n    // ---------------------------\n    // Object\n    // ---------------------------\n\n    /**\n     * Iterates over own properties of an object invoking a callback for each\n     * property.\n     * @memberof utils\n     *\n     * @param {Object} obj\n     *        Object to be processed.\n     * @param {Function} callback\n     *        Callback function with the following signature:\n     *        `function (value, key, object) { ... }`.\n     *        Explicitly returning `false` will exit the iteration early.\n     * @returns {void}\n     */\n    forIn(obj, callback) {\n        let k;\n        for (k in obj) {\n            // if (obj.hasOwnProperty(k)) {} // Do this inside callback if needed.\n            if (callback(obj[k], k, obj) === false) break;\n        }\n    },\n\n    /**\n     * Extends the given object with the specified sources.\n     * Right most source overwrites the previous.\n     * NOTE: This is not a full implementation. Use with caution.\n     * @memberof utils\n     *\n     * @param {Object} destination\n     *        Destionation Object that will be extended and holds the default\n     *        values.\n     * @param {...Object} sources\n     *        Source objects to be merged.\n     *\n     * @returns {Object} - Returns the extended object.\n     */\n    extend(destination, ...sources) {\n        if (!utils.isObject(destination)) return {};\n        let key, value;\n        sources.forEach(source => {\n            for (key in source) { // eslint-disable-line\n                value = source[key];\n                if (utils.isArray(value)) {\n                    destination[key] = value.concat();\n                } else if (utils.isDate(value)) {\n                    destination[key] = new Date(value);\n                } else if (utils.isFunction(value)) { // should be before object\n                    destination[key] = value;\n                } else if (utils.isObject(value)) {\n                    destination[key] = utils.extend({}, value);\n                } else {\n                    destination[key] = value;\n                }\n            }\n        });\n        return destination;\n    },\n\n    /**\n     * Clones the given object.\n     * NOTE: This is not a full implementation. Use with caution.\n     * @memberof utils\n     *\n     * @param {Object} obj\n     *        Target Object to be cloned.\n     * @param {Object|Array} [options]\n     *        Clone options or array of keys to be cloned.\n     *     @param {Array} [options.keys]\n     *            Keys of the properties to be cloned.\n     *     @param {Boolean} [options.own=true]\n     *            Whether to clone own properties only. This is only effective\n     *            if `keys` is not defined.\n     *\n     * @returns {Object} - Returns the cloned object.\n     */\n    clone(obj, options) {\n        if (!obj) return {};\n\n        if (utils.isArray(options)) {\n            options = { keys: options };\n        }\n        options = utils.extend({\n            keys: null,\n            own: true\n        }, options);\n\n        let include,\n            cloned = {};\n\n        utils.forIn(obj, (value, key) => {\n            include = options.keys\n                ? options.keys.indexOf(key) >= 0\n                : (options.own && obj.hasOwnProperty(key)) || !options.own;\n            if (include) {\n                if (utils.isObject(value)) {\n                    cloned[key] = utils.clone(value, options);\n                } else {\n                    cloned[key] = value;\n                }\n            }\n        });\n        return cloned;\n    },\n\n    /**\n     *  Maps the values of the given object to a schema to re-structure a new\n     *  object.\n     *  @memberof utils\n     *\n     *  @param {Object} obj\n     *         Original object to be mapped.\n     *  @param {Object} schema\n     *         Schema to be used to map the object.\n     *\n     *  @returns {Object} - Mapped object.\n     */\n    mapToSchema(obj, schema) {\n        let mapped = {};\n        utils.forIn(schema, (value, key) => {\n            if (utils.isPlainObject(value)) {\n                mapped[key] = utils.mapToSchema(obj, value);\n            } else {\n                mapped[key] = obj[value];\n            }\n        });\n        return mapped;\n    },\n\n    // ---------------------------\n    // Misc\n    // ---------------------------\n\n    /**\n     * Safely parses the given JSON `String` into an `Object`.\n     * The only difference from `JSON.parse()` is that this method does not\n     * throw for invalid input. Instead, returns `null`.\n     * @memberof utils\n     *\n     * @param {String} str - JSON string to be parsed\n     * @returns {Object|null} - Returns the parsed `Object` or `null` if the\n     * input is invalid.\n     */\n    safeJsonParse(str) {\n        let o = null;\n        try {\n            o = JSON.parse(str);\n        } catch (e) {}\n        return o;\n    },\n\n    /**\n     * Gets a timestamp that is seconds or milliseconds since midnight,\n     * January 1, 1970 UTC.\n     * @memberof utils\n     *\n     * @param {Boolean} [seconds=false]\n     *        Specifies whether seconds should be returned instead of\n     *        milliseconds.\n     *\n     * @returns {Number} - Returns seconds or milliseconds since midnight,\n     * January 1, 1970 UTC.\n     */\n    time(seconds) {\n        let ts = Date.now();\n        return seconds ? parseInt(ts / 1000, 10) : ts;\n    }\n\n};\n\nexport default utils;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/lib/utils.js\n **/"",""import utils from './utils';\n\n/**\n * Utility for making `XMLHttpRequest` and `JSONP` requests.\n *\n * @license MIT\n * @copyright 2016, Onur Yıldırım (onur@cutepilot.com)\n */\nclass fetch {\n\n    // https://html.spec.whatwg.org/multipage/scripting.html#script\n\n    /**\n     * Makes a JSONP (GET) request by injecting a script tag in the browser.\n     * Note that using JSONP has some security implications. As JSONP is really\n     * javascript, it can do everything else javascript can do, so you need to\n     * trust the provider of the JSONP data.\n     * @see https://en.wikipedia.org/wiki/JSONP\n     * @memberof fetch\n     *\n     * @param {Object|String} options - Required. Either the URL string which\n     *     will set other options to defaults or an options object with the\n     *     following properties.\n     *     @param {String} options.url\n     *            Source URL to be called.\n     *     @param {String} [options.type]\n     *            The MIME type that identifies the scripting language of the\n     *            code referenced within the script element.\n     *            e.g. `\""text/javascript\""`\n     *     @param {String} [options.charset]\n     *            Indicates the character encoding of the external resource.\n     *            e.g. `\""utf-8\""`.\n     *     @param {Boolean} [options.async=true]\n     *            Indicates whether or not to perform the operation\n     *            asynchronously. See {@link http://caniuse.com/#feat=script-async|browser support}.\n     *     @param {Boolean} [options.defer=false]\n     *            Indicates whether the script should be executed when the page\n     *            has finished parsing. See {@link http://caniuse.com/#feat=script-defer|browser support}.\n     *     @param {String} [options.crossorigin]\n     *            Indicates the CORS setting for the script element being\n     *            injected. Note that this attribute is not widely supported.\n     *            Valid values: `\""anonymous\""`, `\""use-credentials\""`.\n     *            See {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes|CORS settings}.\n     *     @param {Number} [options.timeout=0]\n     *            The number of milliseconds a request can take before\n     *            automatically being terminated. `0` disables timeout.\n     *     @param {Boolean} [options.clean=false]\n     *            Whether to remove the loaded script from DOM when the\n     *            operation ends. Note that the initial source might load\n     *            additional sources which are not deteceted or removed. Only\n     *            the initial source is removed.\n     *     @param {Object} [options.params]\n     *            Optional query parameters to be appended at the end of the URL.\n     *            e.g. `{ key: \""MY-KEY\"" }`\n     *            You can also include the JSONP callback name parameter here\n     *            but if you want the object to be passed to the callback\n     *            argument of this method, use `options.callbackParam` to set\n     *            the callback parameter.\n     *     @param {String} [options.callbackParam]\n     *            If the endpoint supports JSONP callbacks, you can set the\n     *            callback parameter with this setting. This will enable a\n     *            second `obj` argument in the callback of this method which is\n     *            useful if the JSONP source invokes the callback with an\n     *            argument.\n     *     @param {String} [options.rootName]\n     *            The name (or notation) of the object that the generated JSONP\n     *            callback function should be assigned to. By default, this is\n     *            the `window` object but you can set this to a custom object\n     *            notation; for example, to prevent global namespace polution.\n     *            Note that this root object has to be globally accessible for\n     *            this to work. e.g. `\""window.myObject\""` (as string)\n     * @param {Function} [callback]\n     *        The callback function that will be executed when the script is\n     *        loaded. This callback has the following signature:\n     *        `function (err, obj) { ... }`. Note that the second argument\n     *        `obj` will always be `undefined` if the source endpoint does not\n     *        support JSONP callbacks or a callback param is not set explicitly\n     *        via `options.callbackParam` (or if the source does not invoke the\n     *        jsonp with an argument). However, the function will always execute\n     *        when the script loads or an error occurs.\n     *\n     * @returns {void}\n     *\n     * @example\n     * var opts1 = {\n     * \t   url: 'some/api',\n     * \t   callbackParam: 'jsonCallback',\n     * \t   params: { key: 'MY-KEY' }\n     * };\n     * // This will load the following source:\n     * // some/api?jsonCallback={auto-generated-fn-name}&key=MY-KEY\n     * fetch.jsonp(opts1, function (err, obj) {\n     * \t   console.log(obj); // some object\n     * });\n     *\n     * var opts2 = {\n     * \t   url: 'some/api',\n     * \t   params: {\n     * \t\t   key: 'MY-KEY',\n     * \t\t   jsonCallback: 'my-fn-name'\n     * \t   }\n     * };\n     * // This will load the following source:\n     * // some/api?jsonCallback=my-fn-name&key=MY-KEY\n     * fetch.jsonp(options, function (err, obj) {\n     * \t   console.log(obj); // undefined\n     * \t   // still executes, catch errors here\n     * });\n     * // JSON callback should be explicitly set.\n     * window['my-fn-name'] = function (obj) {\n     * \t   console.log(obj); // some object\n     * };\n     */\n    static jsonp(options, callback) {\n        let timeout;\n\n        callback = utils.isFunction(callback)\n            ? callback\n            : utils.noop;\n\n        if (utils.isString(options)) {\n            options = { url: options };\n        }\n\n        if (utils.isPlainObject(options)) {\n            options = utils.extend({\n                // type: undefined,\n                async: true,\n                defer: false,\n                // crossorigin: undefined,\n                timeout: 0,\n                params: {},\n                // callbackParam: undefined,\n                // rootName: undefined,\n                clean: true\n            }, options);\n        } else {\n            return callback(new Error('No options or target URL is provided.'));\n        }\n\n        if (utils.isString(options.url) === false || options.url.trim() === '') {\n            return callback(new Error('No target URL is provided.'));\n        }\n\n        let script = document.createElement('script'),\n            cbParamSet = utils.isString(options.callbackParam)\n                && options.callbackParam.trim() !== '',\n            cbFnName,\n            root,\n            rootNameSet = utils.isString(options.rootName)\n                && options.rootName !== 'window'\n                && options.rootName !== 'document'\n                && options.rootName.trim() !== '';\n\n        if (cbParamSet) {\n            cbFnName = '_jsonp_' + utils.randomString(10);\n            options.params[options.callbackParam] = rootNameSet\n                ? `${options.rootName}.${cbFnName}`\n                : cbFnName;\n        }\n        let query = utils.params(options.params) || '',\n            qMark = options.url.indexOf('?') >= 0 ? '&' : '?',\n            url = query ? `${options.url}${qMark}${query}` : options.url;\n        // console.log(url);\n\n        function execCb(err, timeUp, obj) {\n            if (timeout) {\n                clearTimeout(timeout);\n                timeout = null;\n            }\n            if ((timeUp || options.clean) && script.parentNode) {\n                script.parentNode.removeChild(script);\n            }\n            // delete the jsonp callback function\n            if (rootNameSet) {\n                delete root[cbFnName];\n            }\n            callback(err, obj);\n        }\n\n        if (cbFnName) {\n            let fn = obj => {\n                execCb(null, false, obj);\n            };\n            root = rootNameSet\n                // ? window[options.rootName][cbFnName] = fn;\n                ? utils.notateGlobalObj(options.rootName) // if rootName is dot-notation.\n                : window;\n            root[cbFnName] = fn;\n        } else if (script.readyState) { // IE < 11\n            script.onreadystatechange = () => {\n                if (script.readyState === 'loaded'\n                        || script.readyState === 'complete') {\n                    script.onreadystatechange = null;\n                    execCb(null);\n                }\n            };\n        } else { // IE 11+\n            script.onload = () => {\n                execCb(null);\n            };\n        }\n\n        script.onerror = error => {\n            let errMsg = 'Could not load source at ' + utils.removeQuery(options.url);\n            if (error) {\n                errMsg += '\\n' + (error.message || error);\n            }\n            execCb(new Error(errMsg));\n        };\n\n        if (options.type) {\n            script.type = options.type;\n        }\n        if (options.charset) {\n            script.charset = options.charset;\n        }\n        if (options.async) {\n            script.async = true;\n        }\n        if (options.defer) {\n            script.defer = true;\n        }\n        if (options.crossorigin) {\n            script.crossorigin = options.crossorigin;\n        }\n\n        script.src = url;\n        document.getElementsByTagName('head')[0].appendChild(script);\n\n        // Timeout\n        if (utils.isNumber(options.timeout) && options.timeout > 0) {\n            timeout = setTimeout(() => {\n                script.src = '';\n                execCb(new Error('Operation timed out.'), true);\n            }, options.timeout);\n        }\n    }\n\n    /**\n     * Makes an XMLHttpRequest with the given parameters.\n     * Note that `\""Access-Control-Allow-Origin\""` header should be present on\n     * the requested resource. Otherwise, the request will not be allowed.\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest}.\n     * @memberof fetch\n     *\n     * @param {Object|String} options\n     *        Either the URL string which will set other options to defaults or\n     *        the full options object.\n     *     @param {String} options.url\n     *            Target URL to be called.\n     *     @param {String} [options.method=\""GET\""]\n     *            HTTP method.\n     *     @param {*} [options.data]\n     *            Data to be sent with the request.\n     *     @param {Number} [options.timeout]\n     *            The number of milliseconds a request can take before\n     *            automatically being terminated. `0` disables timeout.\n     *     @param {Boolean} [options.withCredentials=false]\n     *            Indicates whether or not cross-site Access-Control requests\n     *            should be made using credentials such as cookies or\n     *            authorization headers.\n     *     @param {Boolean} [options.async=true]\n     *            Indicating whether or not to perform the operation\n     *            asynchronously. If this value is false, the `send()` method\n     *            does not return until the response is received. If `true`,\n     *            notification of a completed transaction is provided using\n     *            event listeners. This must be `true` if the multipart\n     *            attribute is `true`, or an exception will be thrown.\n     *     @param {String} [options.mimeType]\n     *            If set, overrides the MIME type returned by the server. This\n     *            may be used, for example, to force a stream to be treated and\n     *            parsed as `text/xml`, even if the server does not report it as\n     *            such.\n     *     @param {Object} [options.headers]\n     *            Sets the HTTP request headers. Each key should be a header\n     *            name with a value. e.g. `{ 'Content-Length': 50 }`. For\n     *            security reasons, some headers cannot be set and can only be\n     *            controlled by the user agent.\n     *     @param {String} [options.username=\""\""]\n     *            User name to use for authentication purposes.\n     *     @param {String} [options.password=\""\""]\n     *            Password to use for authentication purposes.\n     * @param {Function} [callback]\n     *        The callback function in the following signature:\n     *        `function (err, xhr) { ... }`\n     *        Note that `xhr` object is always passed regardless of an error.\n     *\n     * @returns {void}\n     */\n    static xhr(options, callback) {\n        let xhr, err;\n\n        if ('XMLHttpRequest' in window) {\n            xhr = new XMLHttpRequest();\n        } else {\n            throw new Error('XMLHttpRequest is not supported!');\n        }\n\n        let hasCallback = utils.isFunction(callback);\n        callback = hasCallback\n            ? callback\n            : utils.noop;\n\n        if (utils.isString(options)) {\n            options = { url: options };\n        }\n\n        if (utils.isPlainObject(options)) {\n            options = utils.extend({\n                method: 'GET',\n                data: undefined,\n                async: true,\n                timeout: 0, // no timeout\n                withCredentials: false,\n                mimeType: undefined,\n                username: '',\n                password: ''\n            }, options);\n        } else {\n            callback(new Error('No options or target URL is provided.'));\n        }\n\n        if (utils.isString(options.url) === false) {\n            callback(new Error('No target URL is provided.'));\n        }\n\n        options.username = String(options.username);\n        options.password = String(options.password);\n        options.method = options.method.toUpperCase();\n        if (options.method !== 'POST' && options.method !== 'PUT') {\n            options.data = undefined;\n        }\n        // console.log(JSON.stringify(options));\n\n        if (hasCallback) {\n            xhr.onreadystatechange = () => {\n                if (xhr.readyState === fetch.XHR_READY_STATE.DONE) {\n                    if (xhr.status === 200) {\n                        callback(null, xhr);\n                    } else {\n                        // let response = utils.safeJsonParse(xhr.responseText);\n                        // if (response && response.error)\n                        let crossDomain = xhr.status === 0\n                            ? '. Make sure you have permission if this is a cross-domain request.'\n                            : '';\n                        err = new Error(`The request returned status: ${xhr.status}${crossDomain}`);\n                        // console.log(xhr);\n                        callback(err, xhr);\n                    }\n                }\n            };\n\n            if (utils.isNumber(options.timeout) && options.timeout > 0) {\n                xhr.timeout = options.timeout;\n                xhr.ontimeout = () => {\n                    // xhr.abort();\n                    err = new Error('The request had timed out.');\n                    callback(err, xhr);\n                };\n            }\n        }\n        // console.log(options);\n        xhr.open(options.method, options.url, options.async, options.username, options.password);\n\n        // xhr.setRequestHeader() method should b called œafter open(), but\n        // before send().\n        if (utils.isPlainObject(options.headers)) {\n            Object.keys(options.headers).forEach(key => {\n                let value = options.headers[key];\n                xhr.setRequestHeader(key, value);\n            });\n        }\n\n        // xhr.overrideMimeType() method must be called before send().\n        if (options.mimeType) {\n            xhr.overrideMimeType(options.mimeType);\n        }\n\n        xhr.send(options.data);\n    }\n\n    /**\n     * Alias of `fetch.xhr()` with request method set to `\""GET\""` by default.\n     * @memberof fetch\n     *\n     * @param {Object} options\n     *        Either the URL string which will set other options to defaults or\n     *        the full options object. See `fetch.xhr()` method options for\n     *        details.\n     * @param {Function} [callback]\n     *        The callback function in the following signature:\n     *        `function (err, xhr) { ... }`\n     *        Note that `xhr` object is always passed regardless of an error.\n     * @returns {void}\n     */\n    static get(options, callback) {\n        return fetch.xhr(options, callback);\n    }\n\n    /**\n     * Alias of `fetch.xhr()` with request method set to `\""POST\""` by default.\n     * @memberof fetch\n     *\n     * @param {Object} options\n     *        Either the URL string which will set other options to defaults or\n     *        the full options object. See `fetch.xhr()` method options for\n     *        details.\n     * @param {Function} [callback]\n     *        The callback function in the following signature:\n     *        `function (err, xhr) { ... }`\n     *        Note that `xhr` object is always passed regardless of an error.\n     * @returns {void}\n     */\n    static post(options, callback) {\n        return _xhr('POST', options, callback);\n    }\n\n    /**\n     * Alias of `fetch.xhr()` with request method set to `\""PUT\""` by default.\n     * @memberof fetch\n     *\n     * @param {Object} options\n     *        Either the URL string which will set other options to defaults or\n     *        the full options object. See `fetch.xhr()` method options for\n     *        details.\n     * @param {Function} [callback]\n     *        The callback function in the following signature:\n     *        `function (err, xhr) { ... }`\n     *        Note that `xhr` object is always passed regardless of an error.\n     * @returns {void}\n     */\n    static put(options, callback) {\n        return _xhr('PUT', options, callback);\n    }\n\n    /**\n     * Alias of `fetch.xhr()` with request method set to `\""DELETE\""` by default.\n     * @memberof fetch\n     *\n     * @param {Object} options\n     *        Either the URL string which will set other options to defaults or\n     *        the full options object. See `fetch.xhr()` method options for\n     *        details.\n     * @param {Function} [callback]\n     *        The callback function in the following signature:\n     *        `function (err, xhr) { ... }`\n     *        Note that `xhr` object is always passed regardless of an error.\n     * @returns {void}\n     */\n    static delete(options, callback) {\n        return _xhr('DELETE', options, callback);\n    }\n}\n\n/**\n *  @private\n */\nfunction _xhr(method, options, callback) {\n    options = utils.isString(options)\n        ? { url: options }\n        : options || {};\n    options.method = method;\n    return fetch.xhr(options, callback);\n}\n\n/**\n * Enumerates `XMLHttpRequest` ready states.\n * Not to be confused with `script.readyState`.\n * @memberof fetch\n *\n * @enum {Number}\n */\nfetch.XHR_READY_STATE = {\n    /**\n     * `xhr.open()` has not been called yet.\n     * @type {Number}\n     */\n    UNSENT: 0,\n    /**\n     * `xhr.send()` has been called.\n     * @type {Number}\n     */\n    OPENED: 1,\n    /**\n     * `xhr.send()` has been called, and headers and status are available.\n     * @type {Number}\n     */\n    HEADERS_RECEIVED: 2,\n    /**\n     * Downloading; responseText holds partial data.\n     * @type {Number}\n     */\n    LOADING: 3,\n    /**\n     * The operation is complete.\n     * @type {Number}\n     */\n    DONE: 4\n};\n\nexport default fetch;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/lib/fetch.js\n **/"",""import utils from '../lib/utils';\nimport fetch from '../lib/fetch';\nimport enums from './enums';\nimport GeoError from './geo.error';\n\n/**\n *  Helper methods.\n *\n *  @license MIT\n *  @copyright 2016, Onur Yıldırım (onur@cutepilot.com)\n *  @type {Object}\n *  @private\n */\nconst geoHelper = {\n\n    toGoogleCoords(coords) {\n        return {\n            lat: coords.lat || coords.latitude,\n            lng: coords.lng || coords.longitude\n        };\n    },\n\n    fromGoogleCoords(coords) {\n        return {\n            latitude: coords.latitude || coords.lat,\n            longitude: coords.longitude || coords.lng\n        };\n    },\n\n    // used for distance matrix origins and destinations\n    toPointList(arr) {\n        arr = utils.isArray(arr) ? arr : [arr];\n        return arr.map(o => {\n            return utils.isString(o) ? o : geoHelper.toGoogleCoords(o);\n        });\n    },\n\n    getGeocodeComps(comp) {\n        return {\n            route: comp.route,\n            locality: comp.locality,\n            administrative_area: comp.administrativeArea, // eslint-disable-line camelcase\n            postal_code: comp.postalCode, // eslint-disable-line camelcase\n            country: comp.country,\n            region: comp.region\n        };\n    },\n\n    // Geocode examples:\n    // address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=API_KEY\n    // address=Winnetka&bounds=34.172684,-118.604794|34.236144,-118.500938&key=API_KEY\n    // address=santa+cruz&components=country:ES&key=API_KEY\n    // components=administrative_area:TX|country:US&key=API_KEY\n    // Reverse Geocode examples:\n    // latlng=40.714224,-73.961452&key=API_KEY\n    // place_id=ChIJd8BlQ2BZwokRAFUEcm_qrcA&key=API_KEY\n    buildGeocodeParams(options, reverse) {\n        let params = [],\n            e = utils.encodeURI;\n\n        if (reverse) {\n            if (options.placeId) {\n                params.push(`place_id=${options.placeId}`);\n            } else if (options.latitude && options.longitude) {\n                params.push(`latlng=${options.latitude},${options.longitude}`);\n            }\n        } else {\n            if (options.address) {\n                params.push(`address=${e(options.address)}`);\n            }\n\n            let geoComps = geoHelper.getGeocodeComps(options);\n            geoComps = utils.params(geoComps, { operator: ':', separator: '|' });\n            params.push(`components=${geoComps}`);\n\n            let b = options.bounds;\n            if (utils.isArray(b) && b.length === 4) {\n                params.push(`bounds=${b[0]},${b[1]}|${b[2]},${b[3]}`);\n            } else if (utils.isPlainObject(b) && Object.keys(b).length === 4) {\n                params.push(`bounds=${b.southwestLat},${b.southwestLng}|${b.northeastLat},${b.northeastLng}`);\n            }\n        }\n\n        params.push(`language=${options.language}`);\n        params.push(`key=${options.key}`);\n        return params.join('&');\n    },\n\n    // See https://developers.google.com/maps/documentation/geocoding/intro\n    formatGeocodeResults(results) {\n        if (!utils.isArray(results) || results.length <= 0) {\n            return {\n                location: null,\n                address: null,\n                formattedAddress: '',\n                type: null, // locationType\n                placeId: ''\n            };\n        }\n\n        let i, c,\n            o = {},\n            data = results[0],\n            comps = data.address_components;\n\n        for (i = 0; i < comps.length; i += 1) {\n            c = comps[i];\n            if (c.types && c.types.length > 0) {\n                o[c.types[0]] = c.long_name;\n                o[c.types[0] + '_s'] = c.short_name;\n            }\n        }\n\n        let geometry = data.geometry;\n        return {\n            coords: geometry && geometry.location ? {\n                latitude: geometry.location.lat,\n                longitude: geometry.location.lng\n            } : null,\n            address: {\n                commonName: o.point_of_interest\n                    || o.premise\n                    || o.subpremise\n                    || o.colloquial_area\n                    || '',\n                streetNumber: o.street_number || '',\n                street: o.administrative_area_level_4\n                    || o.administrative_area_level_3\n                    || o.route\n                    || '',\n                route: o.route || '',\n                neighborhood: o.neighborhood\n                    || o.administrative_area_level_5\n                    || o.administrative_area_level_4\n                    || '',\n                town: o.sublocality || o.administrative_area_level_2 || '',\n                city: o.locality || o.administrative_area_level_1 || '',\n                region: o.administrative_area_level_2\n                    || o.administrative_area_level_1\n                    || '',\n                postalCode: o.postal_code || '',\n                state: o.administrative_area_level_1 || '',\n                stateCode: o.administrative_area_level_1_s || '',\n                country: o.country || '',\n                countryCode: o.country_s || ''\n            },\n            formattedAddress: data.formatted_address,\n            type: geometry.location_type || '',\n            placeId: data.place_id,\n            timestamp: utils.time()\n        };\n    },\n\n    geocode(reverse, conf, options, callback) {\n        let opts = {};\n        if (utils.isString(options)) {\n            opts = {};\n            let prop = reverse ? 'placeId' : 'address';\n            opts[prop] = options;\n        } else if (utils.isPlainObject(options)) {\n            opts = options;\n        } else {\n            throw new GeoError(GeoError.Code.INVALID_PARAMETERS);\n        }\n\n        if (reverse) {\n            let coordsSet = utils.isNumber(options.latitude)\n                && utils.isNumber(options.longitude);\n            if (!utils.isString(options.placeId) && !coordsSet) {\n                throw new GeoError(GeoError.Code.INVALID_PARAMETERS);\n            }\n        }\n\n        opts = utils.extend({\n            key: conf.google.key || '',\n            language: conf.language || 'en',\n            raw: false\n        }, opts);\n\n        let query = geoHelper.buildGeocodeParams(opts, reverse),\n            url = utils.setProtocol(enums.URL.GOOGLE_GEOCODE, conf.https),\n            xhrOpts = {\n                url: `${url}?${query}`\n            };\n\n        fetch.xhr(xhrOpts, (err, xhr) => {\n            if (err) return callback(GeoError.create(err), null);\n\n            let response = utils.safeJsonParse(xhr.responseText),\n                gErr = GeoError.fromResponse(response);\n\n            if (gErr) return callback(gErr, null);\n\n            response = options.raw\n                ? response\n                : geoHelper.formatGeocodeResults(response.results);\n            callback(null, response);\n        });\n    },\n\n    // See https://developers.google.com/maps/documentation/distance-matrix/intro\n    // Raw Result Example:\n    // {\n    //    \""destination_addresses\"" : [ \""San Francisco, CA, USA\"", \""Victoria, BC, Canada\"" ],\n    //    \""origin_addresses\"" : [ \""Vancouver, BC, Canada\"", \""Seattle, WA, USA\"" ],\n    //    \""rows\"" : [\n    //       {\n    //          \""elements\"" : [\n    //             {\n    //                \""distance\"" : { \""text\"" : \""1,704 km\"", \""value\"" : 1704324 },\n    //                \""duration\"" : { \""text\"" : \""3 days 19 hours\"", \""value\"" : 327061\n    //                },\n    //                \""status\"" : \""OK\""\n    //             },\n    //             {\n    //                \""distance\"" : { \""text\"" : \""138 km\"", \""value\"" : 138295 },\n    //                \""duration\"" : { \""text\"" : \""6 hours 44 mins\"", \""value\"" : 24236 },\n    //                \""status\"" : \""OK\""\n    //             }\n    //          ]\n    //       },\n    //       {\n    //          \""elements\"" : [\n    //             {\n    //                \""distance\"" : { \""text\"" : \""1,452 km\"", \""value\"" : 1451623 },\n    //                \""duration\"" : { \""text\"" : \""3 days 4 hours\"", \""value\"" : 275062 },\n    //                \""status\"" : \""OK\""\n    //             },\n    //             {\n    //                \""distance\"" : { \""text\"" : \""146 km\"", \""value\"" : 146496 },\n    //                \""duration\"" : { \""text\"" : \""2 hours 52 mins\"", \""value\"" : 10324 },\n    //                \""status\"" : \""OK\""\n    //             }\n    //          ]\n    //       }\n    //    ],\n    //    \""status\"" : \""OK\""\n    // }\n    // Formatted to:\n\n    formatDistanceResults(results) {\n        if (!utils.isPlainObject(results)) {\n            return null;\n        }\n\n        let arr = [],\n            origins = results.originAddresses,\n            dests = results.destinationAddresses,\n            rows = results.rows;\n\n        // [\n        //     {\n        //          from: 'Vancouver, BC, Canada',\n        //          to: 'San Francisco, CA, USA',\n        //          distance: { value: 1704107, text: \""1,704 km\"" },\n        //          duration: { value: 327025, text: \""3 days 19 hours\"" },\n        //          fare: { currency: \""USD\"", value: 6, text: \""$6.00\"" }\n        //     },\n        //     ...\n        // ]\n\n        let e;\n        origins.forEach((origin, oIndex) => {\n            dests.forEach((dest, dIndex) => {\n                e = rows[oIndex].elements[dIndex];\n                arr.push({\n                    from: origin,\n                    to: dest,\n                    distance: e.distance,\n                    duration: e.duration,\n                    fare: e.fare,\n                    timestamp: utils.time()\n                });\n            });\n        });\n\n        return arr;\n    },\n\n    // Converts a map-styles object in to static map styles (formatted query-string params).\n    // See https://developers.google.com/maps/documentation/static-maps/styling\n    mapStylesToParams(styles) {\n        if (!styles) return '';\n        if (!utils.isArray(styles)) styles = [styles];\n        let result = [];\n        styles.forEach((v, i, a) => {\n            let style = '';\n            if (v.stylers) { // only if there is a styler object\n                if (v.stylers.length > 0) { // Needs to have a style rule to be valid.\n                    style += (v.hasOwnProperty('featureType') ? 'feature:' + v.featureType : 'feature:all') + '|';\n                    style += (v.hasOwnProperty('elementType') ? 'element:' + v.elementType : 'element:all') + '|';\n                    v.stylers.forEach((val, i, a) => {\n                        let propName = Object.keys(val)[0],\n                            propVal = val[propName].toString().replace('#', '0x');\n                        style += propName + ':' + propVal + '|';\n                    });\n                }\n            }\n            result.push('style=' + encodeURIComponent(style));\n        });\n        return result.join('&');\n    }\n\n};\n\nexport default geoHelper;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/geo.helper.js\n **/"",""const GOOGLE_MAPS_API_BASE = '//maps.googleapis.com/maps/api';\n\n/**\n * This file only includes partial documentation about `geolocator` enumerations.\n * Note that these enumerations are mostly an aggregation of\n * {@link https://developers.google.com/maps/documentation/javascript|Google Maps API} constants.\n *\n * @private\n * @readonly\n */\nconst enums = Object.freeze({\n    /**\n     * Enumerates API endpoints used within Geolocator core.\n     *\n     * @enum {String}\n     * @readonly\n     * @private\n     */\n    URL: {\n        /**\n         *  Public IP retrieval (free) service.\n         *  @type {String}\n         *  @private\n         */\n        IP: '//api.ipify.org',\n        /**\n         *  Country SVG flags.\n         *  e.g. <url>/tr.svg for Turkey flag.\n         *  @type {String}\n         *  @private\n         */\n        FLAG: '//cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/flags/4x3/',\n        /**\n         * Google Maps API bootstrap endpoint that loads all of the main\n         * Javascript objects and symbols for use in the Maps API.\n         * Some Maps API features are also available in self-contained\n         * libraries which are not loaded unless you specifically request them.\n         * See {@link https://developers.google.com/maps/documentation/javascript/libraries|details}.\n         * @type {String}\n         * @private\n         */\n        GOOGLE_MAPS_API: GOOGLE_MAPS_API_BASE + '/js',\n        /**\n         * Google Maps API Static Map endpoint.\n         * @type {String}\n         * @private\n         */\n        GOOGLE_SATATIC_MAP: GOOGLE_MAPS_API_BASE + '/staticmap',\n        /**\n         * Google Geolocation API endpoint.\n         * @type {String}\n         * @private\n         */\n        GOOGLE_GEOLOCATION: '//www.googleapis.com/geolocation/v1/geolocate',\n        /**\n         * Google Geocode API endpoint.\n         * @type {String}\n         * @private\n         */\n        GOOGLE_GEOCODE: '//maps.googleapis.com/maps/api/geocode/json',\n        /**\n         * Google TimeZone API endpoint.\n         * @type {String}\n         * @private\n         */\n        GOOGLE_TIMEZONE: '//maps.googleapis.com/maps/api/timezone/json',\n        /**\n         * Google Distance Matrix API endpoint.\n         * @type {String}\n         * @private\n         */\n        GOOGLE_DISTANCE_MATRIX: '//maps.googleapis.com/maps/api/distancematrix/json'\n    },\n    /**\n     * Enumerates Google map types.\n     * @memberof! geolocator\n     *\n     * @enum {String}\n     * @readonly\n     */\n    MapTypeId: {\n        /**\n         * Map type that displays a transparent layer of major streets on\n         * satellite images.\n         * @type {String}\n         */\n        HYBRID: 'hybrid',\n        /**\n         * Map type that displays a normal street map.\n         * @type {String}\n         */\n        ROADMAP: 'roadmap',\n        /**\n         * Map type that displays satellite images.\n         * @type {String}\n         */\n        SATELLITE: 'satellite',\n        /**\n         * Map type displays maps with physical features such as terrain and\n         * vegetation.\n         * @type {String}\n         */\n        TERRAIN: 'terrain'\n    },\n    /**\n     * Enumerates Google location types.\n     * @memberof! geolocator\n     *\n     * @enum {String}\n     * @readonly\n     */\n    LocationType: {\n        /**\n         * Indicates that the returned result is a precise geocode for which\n         * we have location information accurate down to street address\n         * precision.\n         * @type {String}\n         */\n        ROOFTOP: 'ROOFTOP',\n        /**\n         * Indicates that the returned result reflects an approximation\n         * (usually on a road) interpolated between two precise points (such as\n         * intersections). Interpolated results are generally returned when\n         * rooftop geocodes are unavailable for a street address.\n         * @type {String}\n         */\n        RANGE_INTERPOLATED: 'RANGE_INTERPOLATED',\n        /**\n         * Indicates that the returned result is the geometric center of a\n         * result such as a polyline (for example, a street) or polygon\n         * (region).\n         * @type {String}\n         */\n        GEOMETRIC_CENTER: 'GEOMETRIC_CENTER',\n        /**\n         * Indicates that the returned result is approximate.\n         * @type {String}\n         */\n        APPROXIMATE: 'APPROXIMATE'\n    },\n    /**\n     * Enumerates Google travel modes.\n     * @memberof! geolocator\n     *\n     * @enum {String}\n     * @readonly\n     */\n    TravelMode: {\n        /**\n         * Indicates distance calculation using the road network.\n         * @type {String}\n         */\n        DRIVING: 'DRIVING',\n        /**\n         * Requests distance calculation for walking via pedestrian paths &\n         * sidewalks (where available).\n         * @type {String}\n         */\n        WALKING: 'WALKING',\n        /**\n         * Requests distance calculation for bicycling via bicycle paths &\n         * preferred streets (where available).\n         * @type {String}\n         */\n        BICYCLING: 'BICYCLING',\n        /**\n         * Requests distance calculation via public transit routes (where\n         * available). This value may only be specified if the request includes\n         * an API key or a Google Maps APIs Premium Plan client ID. If you set\n         * the mode to transit you can optionally specify either a\n         * `departureTime` or an `arrivalTime`. If neither time is specified,\n         * the `departureTime` defaults to now (that is, the departure time defaults\n         * to the current time). You can also optionally include a `transitMode`\n         * and/or a `transitRoutingPreference`.\n         * @type {String}\n         */\n        TRANSIT: 'TRANSIT'\n    },\n    // /**\n    //  * Enumerates Google route restrictions.\n    //  * @memberof! geolocator\n    //  *\n    //  * @enum {String}\n    //  * @readonly\n    //  */\n    // RouteRestriction: {\n    //     TOLLS: 'tolls',\n    //     HIGHWAYS: 'highways',\n    //     FERRIES: 'ferries',\n    //     INDOOR: 'indoor'\n    // },\n    /**\n     * Enumerates Google unit systems.\n     * @memberof! geolocator\n     *\n     * @enum {Number}\n     * @readonly\n     */\n    UnitSystem: {\n        /**\n         * Distances in kilometers and meters.\n         * @type {Number}\n         */\n        METRIC: 0,\n        /**\n         * Distances defined in miles and feet.\n         * @type {Number}\n         */\n        IMPERIAL: 1\n    },\n    /**\n     * Enumerates mobile radio types.\n     * @memberof! geolocator\n     *\n     * @enum {String}\n     * @readonly\n     */\n    RadioType: {\n        /**\n         * LTE (Long-Term Evolution) mobile radio type.\n         * @type {String}\n         */\n        LTE: 'lte',\n        /**\n         * GSM (Global System for Mobile Communications) mobile radio type.\n         * @type {String}\n         */\n        GSM: 'gsm',\n        /**\n         * CDMA (Code division multiple access) mobile radio access technology.\n         * @type {String}\n         */\n        CDMA: 'cdma',\n        /**\n         * Wideband CDMA mobile radio access technology.\n         * @type {String}\n         */\n        WCDMA: 'wcdma'\n    },\n    /**\n     * Enumerates formulas/algorithms for calculating the distance between two\n     * lat/lng points.\n     * @memberof! geolocator\n     *\n     * @readonly\n     * @enum {String}\n     *\n     * @todo {@link https://en.wikipedia.org/wiki/Vincenty%27s_formulae|Vincenty's Formula}\n     */\n    DistanceFormula: {\n        /**\n         * Haversine formula for calculating the distance between two lat/lng points\n         * by relating the sides and angles of spherical triangles.\n         * @see {@link http://en.wikipedia.org/wiki/Haversine_formula|Haversine_formula}.\n         * @type {String}\n         */\n        HAVERSINE: 'haversine',\n        /**\n         * Formula based on the Pythagoras Theorem for calculating the\n         * distance between two lat/lng points on a Equirectangular projection\n         * to account for curvature of the longitude lines.\n         * @see {@link https://en.wikipedia.org/wiki/Pythagorean_theorem|Pythagorean_theorem}\n         * @type {String}\n         */\n        PYTHAGOREAN: 'pythagorean'\n    },\n    /**\n     *  Enumerates the image formats used for getting static Google Map images.\n     *  @memberof! geolocator\n     *\n     *  @readonly\n     *  @enum {String}\n     */\n    ImageFormat: {\n        /**\n         *  Specifies the PNG image format.\n         *  Same as `PNG_8`.\n         *  @type {String}\n         */\n        PNG: 'png',\n        /**\n         *  Specifies the 8-bit PNG image format.\n         *  Same as `PNG`.\n         *  @type {String}\n         */\n        PNG_8: 'png8',\n        /**\n         *  Specifies the 32-bit PNG image format.\n         *  @type {String}\n         */\n        PNG_32: 'png32',\n        /**\n         *  Specifies the GIF image format.\n         *  @type {String}\n         */\n        GIF: 'gif',\n        /**\n         *  Specifies the JPEG compressed image format.\n         *  @type {String}\n         */\n        JPG: 'jpg',\n        /**\n         *  Specifies a non-progressive JPEG compression image format.\n         *  @type {String}\n         */\n        JPG_BASELINE: 'jpg-baseline'\n    }\n});\n\nexport default enums;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/enums.js\n **/"",""import utils from '../lib/utils';\n\n/**\n * Geolocator Error class that provides a common type of error object for the\n * various APIs implemented in Geolocator. All callbacks of Geolocator will\n * include an instance of this object as the first argument; if the\n * corresponding operation fails. Also all thrown errors will be an instance of\n * this object.\n *\n * This object can be publicly accessed via `geolocator.Error`.\n *\n * @extends Error\n */\nclass GeoError { // extends Error (doesn't work with transpilers)\n\n    /**\n     * Costructs a new instance of `GeoError`.\n     *\n     * @param {String} [code=\""UNKNOWN_ERROR\""]\n     *        Any valid Geolocator Error code.\n     *        See {@link #GeoError.Code|`GeoError.Code` enumeration} for\n     *        possible values.\n     * @param {String} [message]\n     *        Error message. If omitted, this will be set to `code`.\n     *\n     * @returns {GeoError}\n     *\n     * @example\n     * var GeoError = geolocator.Error,\n     *     error = new GeoError(GeoError.Code.GEOLOCATION_NOT_SUPPORTED);\n     * console.log(error.code); // \""GEOLOCATION_NOT_SUPPORTED\""\n     * console.log(error instanceof GeoError); // true\n     */\n    constructor(code = GeoError.Code.UNKNOWN_ERROR, message) {\n        message = message || String(code);\n\n        /**\n         *  Gets the name of the Error object.\n         *  This always returns `\""GeoError\""`.\n         *  @name GeoError#name\n         *  @type {String}\n         */\n        Object.defineProperty(this, 'name', {\n            enumerable: false,\n            writable: false,\n            value: 'GeoError' // this.constructor.name\n        });\n\n        /**\n         *  Gets the error code set for this instance.\n         *  This will return one of\n         *  {@link #GeoError.Code|`GeoError.Code` enumeration}.\n         *  @name GeoError#code\n         *  @type {String}\n         */\n        Object.defineProperty(this, 'code', {\n            enumerable: false,\n            writable: true,\n            value: code\n        });\n\n        /**\n         *  Gets the error message set for this instance.\n         *  If no message is set, this will return the error code value.\n         *  @name GeoError#message\n         *  @type {String}\n         */\n        Object.defineProperty(this, 'message', {\n            enumerable: false,\n            writable: true,\n            value: message\n        });\n\n        if (Error.hasOwnProperty('captureStackTrace')) { // V8\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            /**\n             *  Gets the error stack for this instance.\n             *  @name GeoError#stack\n             *  @type {String}\n             */\n            Object.defineProperty(this, 'stack', {\n                enumerable: false,\n                writable: false,\n                value: (new Error(message)).stack\n            });\n        }\n    }\n\n    /**\n     * Creates a new instance of `GeoError` from the given value.\n     *\n     * @param {*} [err]\n     *        Value to be transformed. This is used to determine the proper\n     *        error code for the created instance. If an `Error` or `Object` is\n     *        passed, its `message` property is checked if it matches any of the\n     *        valid error codes. If omitted or no match is found, error code\n     *        `GeoError.Code.UNKNOWN_ERROR` will be used as default.\n     *\n     * @returns {GeoError}\n     *\n     * @example\n     * var GeoError = geolocator.Error,\n     * \t   error = GeoError.create();\n     * console.log(error.code); // \""UNKNOWN_ERROR\""\n     * error = GeoError.create(GeoError.Code.GEOLOCATION_NOT_SUPPORTED);\n     * console.log(error.code); // \""GEOLOCATION_NOT_SUPPORTED\""\n     */\n    static create(err) {\n        if (err instanceof GeoError) {\n            return err;\n        }\n\n        let code, msg;\n\n        if (utils.isPositionError(err) && err.code) {\n            switch (err.code) {\n                case 1:\n                    code = GeoError.Code.PERMISSION_DENIED;\n                    break;\n                case 2:\n                    code = GeoError.Code.POSITION_UNAVAILABLE;\n                    break;\n                case 3:\n                    code = GeoError.Code.TIMEOUT;\n                    break;\n                default:\n                    code = GeoError.Code.UNKNOWN_ERROR;\n                    break;\n            }\n            return new GeoError(code, err.message || '');\n        }\n\n        if (typeof err === 'string') {\n            code = msg = err;\n        } else if (typeof err === 'object') {\n            code = err.code || err.message;\n            msg = err.message || err.code;\n        }\n        if (code && GeoError.isValidErrorCode(code)) {\n            return new GeoError(code, msg);\n        }\n\n        return new GeoError(GeoError.Code.UNKNOWN_ERROR, msg);\n    }\n\n    /**\n     * Creates a new instance of `GeoError` from the given response object.\n     * Since Geolocator implements various Google APIs, we might receive\n     * responses if different structures. For example, some APIs return a\n     * response object with a `status:String` property (such as the TimeZone\n     * API) and some return responses with an `error:Object` property. This\n     * method will determine the correct reason or message and return a\n     * consistent error object.\n     *\n     * @param {Object|String} response\n     *        Response (Object) or status (String) to be transformed.\n     * @param {String} [message=null]\n     *        Error message.\n     *\n     * @returns {GeoError}\n     *          `GeoError` instance if response contains an error. Otherwise,\n     *          returns `null`.\n     *\n     * @example\n     * var error = geolocator.Error.fromResponse(googleResponse);\n     * console.log(error.code); // \""GOOGLE_KEY_INVALID\""\n     */\n    static fromResponse(response, message = '') {\n        // example Google Geolocation API response:\n        // https://developers.google.com/maps/documentation/geolocation/intro#errors\n        // {\n        //      \""error\"": {\n        //          \""errors\"": [\n        //              {\n        //                  \""domain\"": \""global\"",\n        //                  \""reason\"": \""parseError\"",\n        //                  \""message\"": \""Parse Error\"",\n        //              }\n        //          ],\n        //      \""code\"": 400,\n        //      \""message\"": \""Parse Error\""\n        //      }\n        // }\n        // example Google TimeZone API response:\n        // {\n        //     \""status\"": \""REQUEST_DENIED\""\n        // }\n\n        if (!response) return new GeoError(GeoError.Code.INVALID_RESPONSE);\n\n        let errCode;\n\n        if (utils.isString(response)) {\n            errCode = errorCodeFromStatus(response);\n            if (errCode) return new GeoError(errCode, message || response);\n        }\n\n        if (!utils.isObject(response)) return null;\n\n        let errMsg = response.error_message\n            || response.errorMessage\n            || ((response.error && response.error.message) || '')\n            || '';\n\n        if (response.status) {\n            errCode = errorCodeFromStatus(response.status);\n            if (errCode) return new GeoError(errCode, errMsg || message || response.status);\n        }\n\n        if (response.error) {\n            let reason = response.reason || response.error.reason;\n            if (!reason) {\n                let errors = response.error.errors;\n                if (utils.isArray(errors) && errors.length > 0) {\n                    reason = errors[0].reason; // get the first reason only\n                    errMsg = errMsg || errors[0].message; // update errMsg\n                }\n            }\n            errCode = errorCodeFromReason(reason) || GeoError.Code.UNKNOWN_ERROR;\n            return new GeoError(errCode, errMsg || reason || message);\n        }\n\n        if (errMsg) {\n            errCode = errorCodeFromStatus(errMsg) || GeoError.Code.UNKNOWN_ERROR;\n            return new GeoError(errCode, errMsg || message);\n        }\n\n        return null;\n    }\n\n    /**\n     *  Checks whether the given value is an instance of `GeoError`.\n     *\n     *  @param {*} err - Object to be checked.\n     *\n     *  @returns {Boolean}\n     */\n    static isGeoError(err) {\n        return err instanceof GeoError;\n    }\n\n    /**\n     *  Checks whether the given value is a valid Geolocator Error code.\n     *\n     *  @param {String} errorCode - Error code to be checked.\n     *\n     *  @returns {Boolean}\n     */\n    static isValidErrorCode(errorCode) {\n        let prop;\n        for (prop in GeoError.Code) {\n            if (GeoError.Code.hasOwnProperty(prop)\n                    && errorCode === GeoError.Code[prop]) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n\n/**\n *  Gets the string representation of the error instance.\n *\n *  @returns {String}\n */\nGeoError.prototype.toString = function () {\n    var msg = this.code !== this.message ? ` (${this.message})` : '';\n    return `${this.name}: ${this.code}${msg}`;\n};\n\n// `class x extends Error` doesn't work when using an ES6 transpiler, such as\n// Babel, since subclasses must extend a class. With Babel 6, we need\n// transform-builtin-extend plugin for this to work. So we're extending from\n// Error the old way. Now, `err instanceof Error` also returns `true`.\nif (typeof Object.setPrototypeOf === 'function') {\n    Object.setPrototypeOf(GeoError.prototype, Error.prototype);\n} else {\n    GeoError.prototype = Object.create(Error.prototype);\n}\n\n// ---------------------------\n// ERROR CODES\n// ---------------------------\n\n/**\n *  Enumerates Geolocator error codes.\n *  This enumeration combines Google API status (error) codes, HTML5 Geolocation\n *  position error codes and other Geolocator-specific error codes.\n *  @enum {String}\n */\nGeoError.Code = {\n    /**\n     *  Indicates that HTML5 Geolocation API is not supported by the browser.\n     *  @type {String}\n     */\n    GEOLOCATION_NOT_SUPPORTED: 'GEOLOCATION_NOT_SUPPORTED',\n    /**\n     *  Indicates that Geolocation-IP source is not set or invalid.\n     *  @type {String}\n     */\n    INVALID_GEO_IP_SOURCE: 'INVALID_GEO_IP_SOURCE',\n    /**\n     *  The acquisition of the geolocation information failed because the\n     *  page didn't have the permission to do it.\n     *  @type {String}\n     */\n    PERMISSION_DENIED: 'PERMISSION_DENIED',\n    /**\n     *  The acquisition of the geolocation failed because at least one\n     *  internal source of position returned an internal error.\n     *  @type {String}\n     */\n    POSITION_UNAVAILABLE: 'POSITION_UNAVAILABLE',\n    /**\n     *  The time allowed to acquire the geolocation, defined by\n     *  PositionOptions.timeout information was reached before\n     *  the information was obtained.\n     *  @type {String}\n     */\n    TIMEOUT: 'TIMEOUT',\n    /**\n     * Indicates that the request had one or more invalid parameters.\n     * @type {String}\n     */\n    INVALID_PARAMETERS: 'INVALID_PARAMETERS',\n    /**\n     * Indicates that the service returned invalid response.\n     * @type {String}\n     */\n    INVALID_RESPONSE: 'INVALID_RESPONSE',\n    /**\n     * Generally indicates that the query (address, components or latlng)\n     * is missing.\n     * @type {String}\n     */\n    INVALID_REQUEST: 'INVALID_REQUEST',\n    /**\n     * Indicates that the request was denied by the service.\n     * This will generally occur because of a missing API key or because the request\n     * is sent over HTTP instead of HTTPS.\n     * @type {String}\n     */\n    REQUEST_DENIED: 'REQUEST_DENIED',\n    /**\n     * Indicates that the request has failed.\n     * This will generally occur because of an XHR error.\n     * @type {String}\n     */\n    REQUEST_FAILED: 'REQUEST_FAILED',\n    /**\n     * Indicates that Google API could not be loaded.\n     * @type {String}\n     */\n    GOOGLE_API_FAILED: 'GOOGLE_API_FAILED',\n    /**\n     * Indicates that you are over your Google API quota.\n     * @type {String}\n     */\n    OVER_QUERY_LIMIT: 'OVER_QUERY_LIMIT',\n    /**\n     * Indicates that you've exceeded the requests per second per user limit that\n     * you configured in the Google Developers Console. This limit should be\n     * configured to prevent a single or small group of users from exhausting your\n     * daily quota, while still allowing reasonable access to all users.\n     * @type {String}\n     */\n    USER_RATE_LIMIT_EXCEEDED: 'USER_RATE_LIMIT_EXCEEDED',\n    /**\n     * Indicates that you've exceeded your daily limit for Google API(s).\n     * @type {String}\n     */\n    DAILY_LIMIT_EXCEEDED: 'DAILY_LIMIT_EXCEEDED',\n    /**\n     * Indicates that your Google API key is not valid. Please ensure that you've\n     * included the entire key, and that you've either purchased the API or have\n     * enabled billing and activated the API to obtain the free quota.\n     * @type {String}\n     */\n    GOOGLE_KEY_INVALID: 'GOOGLE_KEY_INVALID',\n    /**\n     * Indicates that maximum number of elements limit is exceeded. For\n     * example, for the Distance Matrix API; occurs when the product of\n     * origins and destinations exceeds the per-query limit.\n     * @type {String}\n     */\n    MAX_ELEMENTS_EXCEEDED: 'MAX_ELEMENTS_EXCEEDED',\n    /**\n     * Indicates that the request contained more than 25 origins,\n     * or more than 25 destinations.\n     * @type {String}\n     */\n    MAX_DIMENSIONS_EXCEEDED: 'MAX_DIMENSIONS_EXCEEDED',\n    /**\n     * Indicates that the request contained more than allowed waypoints.\n     * @type {String}\n     */\n    MAX_WAYPOINTS_EXCEEDED: 'MAX_WAYPOINTS_EXCEEDED',\n    /**\n     * Indicates that the request body is not valid JSON.\n     * @type {String}\n     */\n    PARSE_ERROR: 'PARSE_ERROR',\n    /**\n     * Indicates that the requested resource could not be found.\n     * Note that this also covers `ZERO_RESULTS`.\n     * @type {String}\n     */\n    NOT_FOUND: 'NOT_FOUND',\n    /**\n     * Indicates that an internal error (such as XHR cross-domain, etc) has occured.\n     * @type {String}\n     */\n    INTERNAL_ERROR: 'INTERNAL_ERROR',\n    /**\n     * Indicates that an unknown error has occured.\n     * @type {String}\n     */\n    UNKNOWN_ERROR: 'UNKNOWN_ERROR'\n};\n\n// ---------------------------\n// HELPER METHODS\n// ---------------------------\n\n/**\n *  @private\n */\nfunction errorCodeFromStatus(status) {\n    if (!status) return GeoError.Code.INVALID_RESPONSE;\n    if (status === 'OK') return null;\n    if (status === 'ZERO_RESULTS') return GeoError.Code.NOT_FOUND;\n    if (GeoError.Code.hasOwnProperty(status)) return status;\n    return null;\n}\n\n/**\n *  Gets `GeoError.Code` from the given response error reason.\n *  @private\n *\n *  @param {String} reason\n *         Google response error reason.\n *\n *  @returns {String}\n */\nfunction errorCodeFromReason(reason) {\n    switch (reason) {\n        case 'invalid':\n            return GeoError.Code.INVALID_REQUEST;\n        case 'dailyLimitExceeded':\n            return GeoError.Code.DAILY_LIMIT_EXCEEDED;\n        case 'keyInvalid':\n            return GeoError.Code.GOOGLE_KEY_INVALID;\n        case 'userRateLimitExceeded':\n            return GeoError.Code.USER_RATE_LIMIT_EXCEEDED;\n        case 'notFound':\n            return GeoError.Code.NOT_FOUND;\n        case 'parseError':\n            return GeoError.Code.PARSE_ERROR;\n        default:\n            return null;\n    }\n}\n\n// ---------------------------\n// EXPORT\n// ---------------------------\n\nexport default GeoError;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/geo.error.js\n **/"",""import utils from '../lib/utils';\n\nclass GeoWatcher {\n\n    constructor(onChange, onError, options = {}) {\n        this.isCleared = false;\n        this.cycle = 0;\n        this._timer = null;\n        this.id = navigator.geolocation.watchPosition(\n            pos => {\n                this.cycle++;\n                if (utils.isFunction(onChange)) onChange(pos);\n            },\n            err => {\n                this.cycle++;\n                if (utils.isFunction(onError)) onError(err);\n                if (options.clearOnError) {\n                    this.clear();\n                }\n            },\n            options\n        );\n    }\n\n    _clear() {\n        navigator.geolocation.clearWatch(this.id);\n        this.isCleared = true;\n        this._timer = null;\n    }\n\n    clear(delay, callback) {\n        let d = utils.isNumber(delay) ? delay : 0,\n            cb = utils.isFunction(callback) ? callback\n                : utils.isFunction(delay) ? delay : null;\n        // clear any previous timeout\n        if (this._timer) {\n            clearTimeout(this._timer);\n            this._timer = null;\n        }\n        // check if watcher is not cleared\n        if (!this.isCleared) {\n            if (d === 0) {\n                this._clear();\n                if (cb) cb();\n                return;\n            }\n            this._timer = setTimeout(() => {\n                this._clear();\n                if (cb) cb();\n            }, d);\n        }\n    }\n\n}\n\n// ---------------------------\n// EXPORT\n// ---------------------------\n\nexport default GeoWatcher;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/geo.watcher.js\n **/""],""sourceRoot"":""""}"
c24a3801de64d68f42d446d691a30a66752687ee,36796281,Be aware of the [difference between default and named exports](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281). It is a common source of mistakes.
d70272d183564625c6beaf2e1ec00c10777ed10d,33566501,    // http://stackoverflow.com/questions/33566501/incompatibleclasschangeerror-android-support-design-internal-navigationmenuview/34645356
7c87536c072cbef894024f69be65ad3e02355b70,6606870,    //http://stackoverflow.com/questions/6606870/suspend-forked-process-at-startup
137db5f38dbf25d3b36f20d33f098fcd3edf7c9a,494122,      // Escape endChar for RegExp (taken from http://stackoverflow.com/a/494122/526741)
801fb0b07d109571e7fc0010ccf82a512c9480e7,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
c5fabf4c5b33dd0e94fff35fef95d90c401c26df,16192916,#   http://stackoverflow.com/q/16192916/893652
552fbadb4b6892c156e5bbdc4ff568a1277fb585,8809472 1197928 1349404 6122571 105034,"{""version"":3,""sources"":[""webpack://pnp.graph/webpack/universalModuleDefinition"",""webpack://pnp.graph/webpack/bootstrap"",""webpack://pnp.graph/./node_modules/tslib/tslib.es6.js"",""webpack://pnp.graph/./build/packages-es5/common/src/util.js"",""webpack://pnp.graph/./build/packages-es5/common/src/netutil.js"",""webpack://pnp.graph/./node_modules/adal-angular/dist/adal.min.js"",""webpack://pnp.graph/(webpack)/buildin/global.js"",""webpack://pnp.graph/./build/packages-es5/common/src/adalclient.js"",""webpack://pnp.graph/./build/packages-es5/common/src/collections.js"",""webpack://pnp.graph/./build/packages-es5/common/src/libconfig.js"",""webpack://pnp.graph/./build/packages-es5/logging/src/loglevel.js"",""webpack://pnp.graph/./build/packages-es5/common/src/storage.js"",""webpack://pnp.graph/./build/packages-es5/odata/src/caching.js"",""webpack://pnp.graph/./build/packages-es5/odata/src/parsers.js"",""webpack://pnp.graph/./build/packages-es5/logging/src/logger.js"",""webpack://pnp.graph/./build/packages-es5/logging/src/listeners.js"",""webpack://pnp.graph/./build/packages-es5/odata/src/pipeline.js"",""webpack://pnp.graph/./build/packages-es5/odata/src/queryable.js"",""webpack://pnp.graph/./build/packages-es5/odata/src/odatabatch.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/config/graphlibconfig.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/net/graphhttpclient.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/types.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/graphqueryable.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/members.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/groups.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/calendars.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/attachments.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/conversations.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/planner.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/photos.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/teams.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/directoryobjects.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/contacts.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/onenote.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/onedrive.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/messages.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/people.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/insights.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/users.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/batch.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/invitations.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/subscriptions.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/security.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/sites.js"",""webpack://pnp.graph/./build/packages-es5/graph/src/rest.js"",""webpack://pnp.graph/./build/packages-es5/graph/index.js""],""names"":[""root"",""factory"",""exports"",""module"",""define"",""amd"",""window"",""installedModules"",""__webpack_require__"",""moduleId"",""i"",""l"",""modules"",""call"",""m"",""c"",""d"",""name"",""getter"",""o"",""Object"",""defineProperty"",""enumerable"",""get"",""r"",""Symbol"",""toStringTag"",""value"",""t"",""mode"",""__esModule"",""ns"",""create"",""key"",""bind"",""n"",""object"",""property"",""prototype"",""hasOwnProperty"",""p"",""s"",""extendStatics"",""b"",""setPrototypeOf"",""__proto__"",""Array"",""__extends"",""__"",""this"",""constructor"",""__decorate"",""decorators"",""target"",""desc"",""arguments"",""length"",""getOwnPropertyDescriptor"",""Reflect"",""decorate"",""getCtxCallback"",""context"",""method"",""params"",""_i"",""apply"",""dateAdd"",""date"",""interval"",""units"",""ret"",""Date"",""toLowerCase"",""setFullYear"",""getFullYear"",""setMonth"",""getMonth"",""setDate"",""getDate"",""setTime"",""getTime"",""undefined"",""combine"",""paths"",""filter"",""path"",""stringIsNullOrEmpty"",""map"",""replace"",""join"",""getGUID"",""now"",""performance"",""Math"",""random"",""floor"",""toString"",""isFunc"",""cf"",""objectDefinedNotNull"",""obj"",""isArray"",""array"",""extend"",""source"",""noOverwrite"",""check"",""getOwnPropertyNames"",""v"",""reduce"",""isUrlAbsolute"",""url"",""test"",""jsS"",""JSON"",""stringify"",""hOP"",""mergeHeaders"",""Request"",""headers"",""forEach"",""append"",""mergeOptions"",""BearerTokenFetchClient"",""_super"",""_token"",""_this"",""set"",""token"",""configurable"",""fetch"",""options"",""Headers"",""FetchClient"",""global"",""AuthenticationContext"",""a"",""REQUEST_TYPE"",""LOGIN"",""RENEW_TOKEN"",""UNKNOWN"",""RESPONSE_TYPE"",""ID_TOKEN_TOKEN"",""TOKEN"",""CONSTANTS"",""ACCESS_TOKEN"",""EXPIRES_IN"",""ID_TOKEN"",""ERROR_DESCRIPTION"",""SESSION_STATE"",""ERROR"",""STORAGE"",""TOKEN_KEYS"",""ACCESS_TOKEN_KEY"",""EXPIRATION_KEY"",""STATE_LOGIN"",""STATE_RENEW"",""NONCE_IDTOKEN"",""USERNAME"",""IDTOKEN"",""LOGIN_REQUEST"",""LOGIN_ERROR"",""RENEW_STATUS"",""ANGULAR_LOGIN_REQUEST"",""RESOURCE_DELIMETER"",""CACHE_DELIMETER"",""LOADFRAME_TIMEOUT"",""TOKEN_RENEW_STATUS_CANCELED"",""TOKEN_RENEW_STATUS_COMPLETED"",""TOKEN_RENEW_STATUS_IN_PROGRESS"",""LOGGING_LEVEL"",""WARN"",""INFO"",""VERBOSE"",""LEVEL_STRING_MAP"",""0"",""1"",""2"",""3"",""POPUP_WIDTH"",""POPUP_HEIGHT"",""_singletonInstance"",""instance"",""config"",""callback"",""popUp"",""isAngular"",""_user"",""_activeRenewals"",""_loginInProgress"",""_acquireTokenInProgress"",""_renewStates"",""_callBackMappedToRenewStates"",""_callBacksMappedToRenewStates"",""_openedWindows"",""_requestType"",""_adalInstance"",""displayCall"",""Error"",""clientId"",""_cloneConfig"",""navigateToLoginRequestUrl"",""loginResource"",""redirectUri"",""location"",""href"",""split"",""postLogoutRedirectUri"",""anonymousEndpoints"",""loadFrameTimeout"",""Logging"",""piiLoggingEnabled"",""level"",""log"",""login"",""info"",""_guid"",""state"",""_idTokenNonce"",""_getItem"",""_saveItem"",""verbose"",""_getNavigateUrl"",""encodeURIComponent"",""push"",""registerCallback"",""_loginPopup"",""promptUser"",""_openPopup"",""e"",""screenLeft"",""screenX"",""f"",""screenTop"",""screenY"",""g"",""innerWidth"",""document"",""documentElement"",""clientWidth"",""body"",""h"",""innerHeight"",""clientHeight"",""j"",""k"",""open"",""focus"",""warn"",""message"",""_handlePopupError"",""indexOf"",""setInterval"",""closed"",""_broadcast"",""clearInterval"",""encodeURI"",""hash"",""handleWindowCallback"",""close"",""bubbles"",""cancelable"",""detail"",""createEvent"",""initCustomEvent"",""CustomEvent"",""Event"",""dispatchEvent"",""loginInProgress"",""_hasResource"",""_isEmpty"",""getCachedToken"",""expireOffsetSeconds"",""_now"",""getCachedUser"",""_createUser"",""_renewToken"",""_addAdalFrame"",""_urlRemoveQueryStringParameter"",""_addHintParameters"",""verbosePii"",""src"",""_loadFrameTimeout"",""_renewIdToken"",""_urlContainsQueryStringParameter"",""RegExp"",""_loadFrame"",""setTimeout"",""acquireToken"",""extraQueryParameter"",""acquireTokenPopup"",""acquireTokenRedirect"",""infoPii"",""clearCache"",""clearCacheForResource"",""logOut"",""logOutUri"",""tenant"",""getUser"",""profile"",""sid"",""upn"",""_extractIdToken"",""aud"",""userName"",""email"",""_getHash"",""substring"",""isCallback"",""_deserialize"",""getLoginError"",""getRequestInfo"",""valid"",""parameters"",""stateMatch"",""stateResponse"",""requestType"",""_matchState"",""parent"",""_matchNonce"",""nonce"",""_getResourceFromState"",""saveTokenFromHash"",""error"",""error_description"",""_expiresIn"",""exp"",""getResourceForEndpoint"",""endpoints"",""_getHostFromUri"",""String"",""opener"",""_serialize"",""_addLibMetadata"",""_decodeJwt"",""JWSPayload"",""_base64DecodeStringUrlSafe"",""parse"",""atob"",""decodeURIComponent"",""escape"",""_decode"",""charAt"",""fromCharCode"",""exec"",""header"",""JWSSig"",""_convertUrlSafeToRegularBase64EncodedString"",""slice"",""correlationId"",""_decimalToHex"",""crypto"",""msCrypto"",""getRandomValues"",""Uint8Array"",""parseInt"",""round"",""getElementById"",""createElement"",""opera"",""navigator"",""userAgent"",""setAttribute"",""style"",""visibility"",""position"",""width"",""height"",""borderWidth"",""getElementsByTagName"",""appendChild"",""insertAdjacentHTML"",""frames"",""cacheLocation"",""_supportsLocalStorage"",""localStorage"",""setItem"",""_supportsSessionStorage"",""sessionStorage"",""getItem"",""removeItem"",""_libVersion"",""toUTCString"",""stack"",""errorPii"",""warnPii"",""inject"",""Function"",""getResource"",""parser"",""protocol"",""hostname"",""AdalClient"",""_displayCallback"",""_loginPromise"",""fromSPFxContext"",""spfxContext"",""getToken"",""then"",""resource"",""Promise"",""resolve"",""reject"",""ensureAuthContext"",""_"",""_authContext"",""catch"",""popupWindow"",""pollTimer"",""URL"",""SPFxAdalClient"",""aadTokenProviderFactory"",""getTokenProvider"",""provider"",""objectEntries"",""entries"",""keys"",""LogLevel"",""RuntimeConfig"",""RuntimeConfigImpl"",""_v"",""Map"",""maps"",""mergeMaps"",""PnPClientStorageWrapper"",""store"",""defaultTimeoutMinutes"",""enabled"",""enableCacheExpiration"",""cacheExpirationHandler"",""persistable"",""expiration"",""delete"",""put"",""expire"",""createPersistable"",""getOrPut"",""deleteExpired"",""defaultTimeout"",""defaultCachingTimeoutSeconds"",""pnp"",""cacheExpirationIntervalMilliseconds"",""console"",""MemoryStorage"",""_store"",""size"",""clear"",""index"",""from"",""data"",""PnPClientStorage"",""_local"",""_session"",""getStore"",""CachingOptions"",""storeName"",""defaultCachingStore"",""storage"",""local"",""session"",""CachingParserWrapper"",""cacheOptions"",""response"",""cacheData"",""HttpRequestError"",""status"",""statusText"",""isHttpRequestError"",""init"",""clone"",""text"",""ODataParserBase"",""rawJson"",""handleError"",""parseImpl"",""has"",""parseFloat"",""txt"",""json"",""parseODataJSON"",""ok"",""result"",""results"",""ODataDefaultParser"",""TextParser"",""BlobParser"",""blob"",""JSONParser"",""BufferParser"",""arrayBuffer"",""buffer"",""Logger"",""LambdaParser"",""activeLogLevel"",""_instance"",""LoggerImpl"",""subscribe"",""listeners"",""listener"",""clearSubscribers"",""count"",""write"",""writeJSON"",""entry"",""err"",""subscribers"",""subscriber"",""ConsoleListener"",""msg"",""format"",""FunctionListener"",""setResult"",""hasResult"",""next"",""pipeline"",""shift"",""pipe"",""requestId"",""promise"",""ctx"",""returnResult"",""isBatched"",""batch"",""addResolveBatchDependency"",""requestPipelineMethod"",""alwaysRun"",""propertyKey"",""descriptor"",""args"",""PipelineMethods"",""logStart"",""verb"",""requestAbsoluteUrl"",""caching"",""isCached"",""cachingOptions"",""batchDependency"",""hydrate"",""send"",""add"",""batchId"",""client"",""clientFactory"",""opts"",""logEnd"",""ODataQueryable"",""_batch"",""_batchDependency"",""inBatch"",""toUrl"",""_url"",""getCore"",""postCore"",""patchCore"",""deleteCore"",""putCore"",""reqImpl"",""hasBatch"",""addBatchDependency"",""addDependency"",""_clone"",""cloneSettings"",""includeBatch"",""Queryable"",""_query"",""_options"",""_parentUrl"",""_useCaching"",""_cachingOptions"",""_cloneParentWasCaching"",""_cloneParentCacheOptions"",""_requestPipeline"",""concat"",""pathPart"",""configure"",""configureFrom"",""usingCaching"",""globalCacheDisable"",""withPipeline"",""getRequestPipeline"",""toRequestContext"",""_0"",""ODataBatch"",""_batchId"",""_reqs"",""_deps"",""_rDeps"",""id"",""toUpperCase"",""resolver"",""execute"",""all"",""executeImpl"",""GraphRuntimeConfig"",""GraphRuntimeConfigImpl"",""graphPart"",""fetchClientFactory"",""GraphHttpClient"",""_impl"",""fetchRaw"",""rawHeaders"",""retry"",""delay"",""attempts"",""retryCount"",""retryContext"",""post"",""patch"",""GraphEndpoints"",""ensure"",""endpoint"",""Beta"",""V1"",""regex"",""replaces"",""GraphQueryable"",""baseUrl"",""urlStr"",""select"",""selects"",""query"",""expand"",""expands"",""as"",""toUrlAndQuery"",""char"",""setEndpoint"",""getParent"",""parentUrl"",""additionalPath"",""dependencyDispose"",""GraphQueryableCollection"",""orderBy"",""ascending"",""top"",""skip"",""num"",""skipToken"",""GraphQueryableSearchableCollection"",""search"",""GraphQueryableInstance"",""defaultPath"",""class_1"",""GroupType"",""Members"",""Members_1"",""getById"",""Member"",""remove"",""Owners"",""Calendars"",""Calendar"",""Events"",""properties"",""event"",""update"",""Attachments"",""addFile"",""bytes"",""contentBytes"",""Attachment"",""Conversations"",""Threads"",""Posts"",""Conversation"",""Thread"",""reply"",""Post"",""forward"",""Senders"",""remover"",""Planner"",""Plans"",""owner"",""title"",""postBody"",""plan"",""Plan"",""Tasks"",""planId"",""assignments"",""bucketId"",""task"",""Task"",""Buckets"",""orderHint"",""bucket"",""Bucket"",""Details"",""Photo"",""Photo_1"",""getBlob"",""getBuffer"",""setContent"",""content"",""Teams"",""description"",""ownerId"",""teamProperties"",""groupProps"",""graph"",""groups"",""Office365"",""gar"",""group"",""createTeam"",""team"",""Team"",""Team_1"",""archive"",""shouldSetSpoSiteReadOnlyForMembers"",""unarchive"",""cloneTeam"",""partsToClone"",""displayName"",""mailNickname"",""Channels"",""channel"",""Channel"",""Apps"",""appUrl"",""Tabs"",""tab"",""Tab"",""Tab_1"",""DirectoryObjectType"",""Groups"",""groupType"",""additionalProperties"",""mailEnabled"",""securityEnabled"",""Security"",""groupTypes"",""Group"",""addFavorite"",""getMemberObjects"",""securityEnabledOnly"",""getMemberGroups"",""checkMemberGroups"",""groupIds"",""removeFavorite"",""resetUnseenCount"",""subscribeByMail"",""unsubscribeByMail"",""getCalendarView"",""start"",""end"",""view"",""toISOString"",""Contacts"",""givenName"",""surName"",""emailAddresses"",""businessPhones"",""contact"",""Contact"",""ContactFolders"",""parentFolderId"",""contactFolder"",""ContactFolder"",""OneNote"",""Notebooks"",""notebook"",""Notebook"",""Sections"",""section"",""Section"",""Pages"",""Drives"",""Drive"",""Root"",""DriveItems"",""DriveItem"",""move"",""parentReference"",""patchBody"",""Children"",""driveItemType"",""driveItem"",""DriveList"",""Recent"",""SharedWithMe"",""DriveSearch"",""Thumbnails"",""Messages"",""Message"",""MailFolders"",""mailFolder"",""MailFolder"",""MailboxSettings"",""settings"",""DirectoryObjects"",""DirectoryObjects_1"",""getByIds"",""ids"",""type"",""directoryObject"",""DirectoryObject"",""People"",""Insights"",""Trending"",""Used"",""Shared"",""Users"",""User"",""sendMail"",""GraphBatch"",""batchUrl"",""maxRequests"",""makeUrlRelative"",""substr"",""formatRequests"",""requests"",""reqInfo"",""requestFragment"",""parseResponse"",""graphResponse"",""parsedResponses"",""fill"",""responses"",""responseId"",""Response"",""nextLink"",""_loop_1"",""requestsChunk"",""splice"",""this_1"",""batchRequest"",""batchOptions"",""parsedResponse"",""chain"",""request"",""Invitations"",""invitedUserEmailAddress"",""inviteRedirectUrl"",""Subscriptions"",""changeType"",""notificationUrl"",""expirationDateTime"",""subscription"",""Subscription"",""Alerts"",""Alert"",""Sites"",""relativeUrl"",""siteUrl"",""_urlCombine"",""lastIndexOf"",""GraphSite"",""GraphContentTypes"",""GraphContentType"",""GraphColumns"",""GraphColumn"",""GraphColumnLinks"",""GraphColumnLink"",""GraphLists"",""list"",""GraphList"",""GraphItems"",""fields"",""item"",""GraphItem"",""GraphFields"",""GraphVersions"",""Version"",""GraphRest"",""createBatch"",""setup""],""mappings"":""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"",""file"":""graph.es5.umd.bundle.min.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""pnp.graph\""] = factory();\n\telse\n\t\troot[\""pnp.graph\""] = factory();\n})(window, function() {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n"",""/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \""License\""); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \""function\"")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \""object\"" && typeof Reflect.decorate === \""function\"") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \""object\"" && typeof Reflect.metadata === \""function\"") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\""throw\""](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \""throw\"": verb(1), \""return\"": verb(2) }, typeof Symbol === \""function\"" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\""Generator is already executing.\"");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\""return\""] : op[0] ? y[\""throw\""] || ((t = y[\""return\""]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \""function\"" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \""function\"" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\""return\""])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\""Symbol.asyncIterator is not defined.\"");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\""next\""), verb(\""throw\""), verb(\""return\""), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\""next\"", value); }\r\n    function reject(value) { resume(\""throw\"", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\""next\""), verb(\""throw\"", function (e) { throw e; }), verb(\""return\""), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \""return\"" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\""Symbol.asyncIterator is not defined.\"");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \""function\"" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\""next\""), verb(\""throw\""), verb(\""return\""), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \""raw\"", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"",""/**\r\n * Gets a callback function which will maintain context across async calls.\r\n * Allows for the calling pattern getCtxCallback(thisobj, method, methodarg1, methodarg2, ...)\r\n *\r\n * @param context The object that will be the 'this' value in the callback\r\n * @param method The method to which we will apply the context and parameters\r\n * @param params Optional, additional arguments to supply to the wrapped method when it is invoked\r\n */\r\nexport function getCtxCallback(context, method) {\r\n    var params = [];\r\n    for (var _i = 2; _i < arguments.length; _i++) {\r\n        params[_i - 2] = arguments[_i];\r\n    }\r\n    return function () {\r\n        method.apply(context, params);\r\n    };\r\n}\r\n/**\r\n * Adds a value to a date\r\n *\r\n * @param date The date to which we will add units, done in local time\r\n * @param interval The name of the interval to add, one of: ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second']\r\n * @param units The amount to add to date of the given interval\r\n *\r\n * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object\r\n */\r\nexport function dateAdd(date, interval, units) {\r\n    var ret = new Date(date); // don't change original date\r\n    switch (interval.toLowerCase()) {\r\n        case \""year\"":\r\n            ret.setFullYear(ret.getFullYear() + units);\r\n            break;\r\n        case \""quarter\"":\r\n            ret.setMonth(ret.getMonth() + 3 * units);\r\n            break;\r\n        case \""month\"":\r\n            ret.setMonth(ret.getMonth() + units);\r\n            break;\r\n        case \""week\"":\r\n            ret.setDate(ret.getDate() + 7 * units);\r\n            break;\r\n        case \""day\"":\r\n            ret.setDate(ret.getDate() + units);\r\n            break;\r\n        case \""hour\"":\r\n            ret.setTime(ret.getTime() + units * 3600000);\r\n            break;\r\n        case \""minute\"":\r\n            ret.setTime(ret.getTime() + units * 60000);\r\n            break;\r\n        case \""second\"":\r\n            ret.setTime(ret.getTime() + units * 1000);\r\n            break;\r\n        default:\r\n            ret = undefined;\r\n            break;\r\n    }\r\n    return ret;\r\n}\r\n/**\r\n * Combines an arbitrary set of paths ensuring and normalizes the slashes\r\n *\r\n * @param paths 0 to n path parts to combine\r\n */\r\nexport function combine() {\r\n    var paths = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        paths[_i] = arguments[_i];\r\n    }\r\n    return paths\r\n        .filter(function (path) { return !stringIsNullOrEmpty(path); })\r\n        .map(function (path) { return path.replace(/^[\\\\|\\/]/, \""\"").replace(/[\\\\|\\/]$/, \""\""); })\r\n        .join(\""/\"")\r\n        .replace(/\\\\/g, \""/\"");\r\n}\r\n/**\r\n * Gets a random string of chars length\r\n *\r\n * https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\r\n *\r\n * @param chars The length of the random string to generate\r\n */\r\nexport function getRandomString(chars) {\r\n    var text = new Array(chars);\r\n    var possible = \""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"";\r\n    for (var i = 0; i < chars; i++) {\r\n        text[i] = possible.charAt(Math.floor(Math.random() * possible.length));\r\n    }\r\n    return text.join(\""\"");\r\n}\r\n/**\r\n * Gets a random GUID value\r\n *\r\n * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\r\n * https://stackoverflow.com/a/8809472 updated to prevent collisions.\r\n */\r\n/* tslint:disable no-bitwise */\r\nexport function getGUID() {\r\n    var d = Date.now();\r\n    if (typeof performance !== \""undefined\"" && typeof performance.now === \""function\"") {\r\n        d += performance.now(); // use high-precision timer if available\r\n    }\r\n    var guid = \""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"".replace(/[xy]/g, function (c) {\r\n        var r = (d + Math.random() * 16) % 16 | 0;\r\n        d = Math.floor(d / 16);\r\n        return (c === \""x\"" ? r : (r & 0x3 | 0x8)).toString(16);\r\n    });\r\n    return guid;\r\n}\r\n/* tslint:enable */\r\n/**\r\n * Determines if a given value is a function\r\n *\r\n * @param cf The thing to test for functionness\r\n */\r\nexport function isFunc(cf) {\r\n    return typeof cf === \""function\"";\r\n}\r\n/**\r\n * Determines if an object is both defined and not null\r\n * @param obj Object to test\r\n */\r\nexport function objectDefinedNotNull(obj) {\r\n    return typeof obj !== \""undefined\"" && obj !== null;\r\n}\r\n/**\r\n * @returns whether the provided parameter is a JavaScript Array or not.\r\n*/\r\nexport function isArray(array) {\r\n    if (Array.isArray) {\r\n        return Array.isArray(array);\r\n    }\r\n    return array && typeof array.length === \""number\"" && array.constructor === Array;\r\n}\r\n/**\r\n * Provides functionality to extend the given object by doing a shallow copy\r\n *\r\n * @param target The object to which properties will be copied\r\n * @param source The source object from which properties will be copied\r\n * @param noOverwrite If true existing properties on the target are not overwritten from the source\r\n * @param filter If provided allows additional filtering on what properties are copied (propName: string) => boolean\r\n *\r\n */\r\nexport function extend(target, source, noOverwrite, filter) {\r\n    if (noOverwrite === void 0) { noOverwrite = false; }\r\n    if (filter === void 0) { filter = function () { return true; }; }\r\n    if (!objectDefinedNotNull(source)) {\r\n        return target;\r\n    }\r\n    // ensure we don't overwrite things we don't want overwritten\r\n    var check = noOverwrite ? function (o, i) { return !(i in o); } : function () { return true; };\r\n    // final filter we will use\r\n    var f = function (v) { return check(target, v) && filter(v); };\r\n    return Object.getOwnPropertyNames(source)\r\n        .filter(f)\r\n        .reduce(function (t, v) {\r\n        t[v] = source[v];\r\n        return t;\r\n    }, target);\r\n}\r\n/**\r\n * Determines if a given url is absolute\r\n *\r\n * @param url The url to check to see if it is absolute\r\n */\r\nexport function isUrlAbsolute(url) {\r\n    return /^https?:\\/\\/|^\\/\\//i.test(url);\r\n}\r\n/**\r\n * Determines if a string is null or empty or undefined\r\n *\r\n * @param s The string to test\r\n */\r\nexport function stringIsNullOrEmpty(s) {\r\n    return s === undefined || s === null || s.length < 1;\r\n}\r\n/**\r\n * Gets an attribute value from an html/xml string block. NOTE: if the input attribute value has\r\n * RegEx special characters they will be escaped in the returned string\r\n *\r\n * @param html HTML to search\r\n * @param attrName The name of the attribute to find\r\n */\r\nexport function getAttrValueFromString(html, attrName) {\r\n    // make the input safe for regex\r\n    html = html.replace(/[.*+?^${}()|[\\]\\\\]/g, \""\\\\$&\"");\r\n    var reg = new RegExp(attrName + \""\\\\s*?=\\\\s*?(\\\""|')([^\\\\1]*?)\\\\1\"", \""i\"");\r\n    var match = reg.exec(html);\r\n    return match !== null && match.length > 0 ? match[2] : null;\r\n}\r\n/**\r\n * Ensures guid values are represented consistently as \""ea123463-137d-4ae3-89b8-cf3fc578ca05\""\r\n *\r\n * @param guid The candidate guid\r\n */\r\nexport function sanitizeGuid(guid) {\r\n    if (stringIsNullOrEmpty(guid)) {\r\n        return guid;\r\n    }\r\n    var matches = /([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})/i.exec(guid);\r\n    return matches === null ? guid : matches[1];\r\n}\r\n/**\r\n * Shorthand for JSON.stringify\r\n *\r\n * @param o Any type of object\r\n */\r\nexport function jsS(o) {\r\n    return JSON.stringify(o);\r\n}\r\n/**\r\n * Shorthand for Object.hasOwnProperty\r\n *\r\n * @param o Object to check for\r\n * @param p Name of the property\r\n */\r\nexport function hOP(o, p) {\r\n    return Object.hasOwnProperty.call(o, p);\r\n}\r\n/**\r\n * Generates a ~unique hash code\r\n *\r\n * From: https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript\r\n */\r\n// tslint:disable:no-bitwise\r\nexport function getHashCode(s) {\r\n    var hash = 0;\r\n    if (s.length === 0) {\r\n        return hash;\r\n    }\r\n    for (var i = 0; i < s.length; i++) {\r\n        var chr = s.charCodeAt(i);\r\n        hash = ((hash << 5) - hash) + chr;\r\n        hash |= 0; // Convert to 32bit integer\r\n    }\r\n    return hash;\r\n}\r\n// tslint:enable:no-bitwise\r\n//# sourceMappingURL=util.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, objectDefinedNotNull } from \""./util\"";\r\nexport function mergeHeaders(target, source) {\r\n    if (source !== undefined && source !== null) {\r\n        var temp = new Request(\""\"", { headers: source });\r\n        temp.headers.forEach(function (value, name) {\r\n            target.append(name, value);\r\n        });\r\n    }\r\n}\r\nexport function mergeOptions(target, source) {\r\n    if (objectDefinedNotNull(source)) {\r\n        var headers = extend(target.headers || {}, source.headers);\r\n        target = extend(target, source);\r\n        target.headers = headers;\r\n    }\r\n}\r\n/**\r\n * Makes requests using the global/window fetch API\r\n */\r\nvar FetchClient = /** @class */ (function () {\r\n    function FetchClient() {\r\n    }\r\n    FetchClient.prototype.fetch = function (url, options) {\r\n        return global.fetch(url, options);\r\n    };\r\n    return FetchClient;\r\n}());\r\nexport { FetchClient };\r\n/**\r\n * Makes requests using the fetch API adding the supplied token to the Authorization header\r\n */\r\nvar BearerTokenFetchClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BearerTokenFetchClient, _super);\r\n    function BearerTokenFetchClient(_token) {\r\n        var _this = _super.call(this) || this;\r\n        _this._token = _token;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(BearerTokenFetchClient.prototype, \""token\"", {\r\n        get: function () {\r\n            return this._token || \""\"";\r\n        },\r\n        set: function (token) {\r\n            this._token = token;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    BearerTokenFetchClient.prototype.fetch = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var headers = new Headers();\r\n        mergeHeaders(headers, options.headers);\r\n        headers.set(\""Authorization\"", \""Bearer \"" + this._token);\r\n        options.headers = headers;\r\n        return _super.prototype.fetch.call(this, url, options);\r\n    };\r\n    return BearerTokenFetchClient;\r\n}(FetchClient));\r\nexport { BearerTokenFetchClient };\r\n//# sourceMappingURL=netutil.js.map"",""/*! adal-angular v1.0.17 2018-02-27 */\r\nvar AuthenticationContext=function(){\""use strict\"";return AuthenticationContext=function(a){if(this.REQUEST_TYPE={LOGIN:\""LOGIN\"",RENEW_TOKEN:\""RENEW_TOKEN\"",UNKNOWN:\""UNKNOWN\""},this.RESPONSE_TYPE={ID_TOKEN_TOKEN:\""id_token token\"",TOKEN:\""token\""},this.CONSTANTS={ACCESS_TOKEN:\""access_token\"",EXPIRES_IN:\""expires_in\"",ID_TOKEN:\""id_token\"",ERROR_DESCRIPTION:\""error_description\"",SESSION_STATE:\""session_state\"",ERROR:\""error\"",STORAGE:{TOKEN_KEYS:\""adal.token.keys\"",ACCESS_TOKEN_KEY:\""adal.access.token.key\"",EXPIRATION_KEY:\""adal.expiration.key\"",STATE_LOGIN:\""adal.state.login\"",STATE_RENEW:\""adal.state.renew\"",NONCE_IDTOKEN:\""adal.nonce.idtoken\"",SESSION_STATE:\""adal.session.state\"",USERNAME:\""adal.username\"",IDTOKEN:\""adal.idtoken\"",ERROR:\""adal.error\"",ERROR_DESCRIPTION:\""adal.error.description\"",LOGIN_REQUEST:\""adal.login.request\"",LOGIN_ERROR:\""adal.login.error\"",RENEW_STATUS:\""adal.token.renew.status\"",ANGULAR_LOGIN_REQUEST:\""adal.angular.login.request\""},RESOURCE_DELIMETER:\""|\"",CACHE_DELIMETER:\""||\"",LOADFRAME_TIMEOUT:6e3,TOKEN_RENEW_STATUS_CANCELED:\""Canceled\"",TOKEN_RENEW_STATUS_COMPLETED:\""Completed\"",TOKEN_RENEW_STATUS_IN_PROGRESS:\""In Progress\"",LOGGING_LEVEL:{ERROR:0,WARN:1,INFO:2,VERBOSE:3},LEVEL_STRING_MAP:{0:\""ERROR:\"",1:\""WARNING:\"",2:\""INFO:\"",3:\""VERBOSE:\""},POPUP_WIDTH:483,POPUP_HEIGHT:600},AuthenticationContext.prototype._singletonInstance)return AuthenticationContext.prototype._singletonInstance;if(AuthenticationContext.prototype._singletonInstance=this,this.instance=\""https://login.microsoftonline.com/\"",this.config={},this.callback=null,this.popUp=!1,this.isAngular=!1,this._user=null,this._activeRenewals={},this._loginInProgress=!1,this._acquireTokenInProgress=!1,this._renewStates=[],this._callBackMappedToRenewStates={},this._callBacksMappedToRenewStates={},this._openedWindows=[],this._requestType=this.REQUEST_TYPE.LOGIN,window._adalInstance=this,a.displayCall&&\""function\""!=typeof a.displayCall)throw new Error(\""displayCall is not a function\"");if(!a.clientId)throw new Error(\""clientId is required\"");this.config=this._cloneConfig(a),void 0===this.config.navigateToLoginRequestUrl&&(this.config.navigateToLoginRequestUrl=!0),this.config.popUp&&(this.popUp=!0),this.config.callback&&\""function\""==typeof this.config.callback&&(this.callback=this.config.callback),this.config.instance&&(this.instance=this.config.instance),this.config.loginResource||(this.config.loginResource=this.config.clientId),this.config.redirectUri||(this.config.redirectUri=window.location.href.split(\""?\"")[0].split(\""#\"")[0]),this.config.postLogoutRedirectUri||(this.config.postLogoutRedirectUri=window.location.href.split(\""?\"")[0].split(\""#\"")[0]),this.config.anonymousEndpoints||(this.config.anonymousEndpoints=[]),this.config.isAngular&&(this.isAngular=this.config.isAngular),this.config.loadFrameTimeout&&(this.CONSTANTS.LOADFRAME_TIMEOUT=this.config.loadFrameTimeout)},\""undefined\""!=typeof window&&(window.Logging={piiLoggingEnabled:!1,level:0,log:function(a){}}),AuthenticationContext.prototype.login=function(){if(this._loginInProgress)return void this.info(\""Login in progress\"");this._loginInProgress=!0;var a=this._guid();this.config.state=a,this._idTokenNonce=this._guid();var b=this._getItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST);b&&\""\""!==b?this._saveItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,\""\""):b=window.location.href,this.verbose(\""Expected state: \""+a+\"" startPage:\""+b),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,b),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,a,!0),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\"");var c=this._getNavigateUrl(\""id_token\"",null)+\""&nonce=\""+encodeURIComponent(this._idTokenNonce);this.config.displayCall?this.config.displayCall(c):this.popUp?(this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,\""\""),this._renewStates.push(a),this.registerCallback(a,this.config.clientId,this.callback),this._loginPopup(c)):this.promptUser(c)},AuthenticationContext.prototype._openPopup=function(a,b,c,d){try{var e=window.screenLeft?window.screenLeft:window.screenX,f=window.screenTop?window.screenTop:window.screenY,g=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,h=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,i=g/2-c/2+e,j=h/2-d/2+f,k=window.open(a,b,\""width=\""+c+\"", height=\""+d+\"", top=\""+j+\"", left=\""+i);return k.focus&&k.focus(),k}catch(a){return this.warn(\""Error opening popup, \""+a.message),this._loginInProgress=!1,this._acquireTokenInProgress=!1,null}},AuthenticationContext.prototype._handlePopupError=function(a,b,c,d,e){this.warn(d),this._saveItem(this.CONSTANTS.STORAGE.ERROR,c),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,d),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,e),b&&this._activeRenewals[b]&&(this._activeRenewals[b]=null),this._loginInProgress=!1,this._acquireTokenInProgress=!1,a&&a(d,null,c)},AuthenticationContext.prototype._loginPopup=function(a,b,c){var d=this._openPopup(a,\""login\"",this.CONSTANTS.POPUP_WIDTH,this.CONSTANTS.POPUP_HEIGHT),e=c||this.callback;if(null==d){var f=\""Popup Window is null. This can happen if you are using IE\"";return void this._handlePopupError(e,b,\""Error opening popup\"",f,f)}if(this._openedWindows.push(d),-1!=this.config.redirectUri.indexOf(\""#\""))var g=this.config.redirectUri.split(\""#\"")[0];else var g=this.config.redirectUri;var h=this,i=window.setInterval(function(){if(!d||d.closed||void 0===d.closed){var a=\""Popup Window closed\"",c=\""Popup Window closed by UI action/ Popup Window handle destroyed due to cross zone navigation in IE/Edge\"";return h.isAngular&&h._broadcast(\""adal:popUpClosed\"",c+h.CONSTANTS.RESOURCE_DELIMETER+a),h._handlePopupError(e,b,a,c,c),void window.clearInterval(i)}try{var f=d.location;if(-1!=encodeURI(f.href).indexOf(encodeURI(g)))return h.isAngular?h._broadcast(\""adal:popUpHashChanged\"",f.hash):h.handleWindowCallback(f.hash),window.clearInterval(i),h._loginInProgress=!1,h._acquireTokenInProgress=!1,h.info(\""Closing popup window\""),h._openedWindows=[],void d.close()}catch(a){}},1)},AuthenticationContext.prototype._broadcast=function(a,b){!function(){function a(a,b){b=b||{bubbles:!1,cancelable:!1,detail:void 0};var c=document.createEvent(\""CustomEvent\"");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}if(\""function\""==typeof window.CustomEvent)return!1;a.prototype=window.Event.prototype,window.CustomEvent=a}();var c=new CustomEvent(a,{detail:b});window.dispatchEvent(c)},AuthenticationContext.prototype.loginInProgress=function(){return this._loginInProgress},AuthenticationContext.prototype._hasResource=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);return b&&!this._isEmpty(b)&&b.indexOf(a+this.CONSTANTS.RESOURCE_DELIMETER)>-1},AuthenticationContext.prototype.getCachedToken=function(a){if(!this._hasResource(a))return null;var b=this._getItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a),c=this._getItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a),d=this.config.expireOffsetSeconds||300;return c&&c>this._now()+d?b:(this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a,\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a,0),null)},AuthenticationContext.prototype.getCachedUser=function(){if(this._user)return this._user;var a=this._getItem(this.CONSTANTS.STORAGE.IDTOKEN);return this._user=this._createUser(a),this._user},AuthenticationContext.prototype.registerCallback=function(a,b,c){this._activeRenewals[b]=a,this._callBacksMappedToRenewStates[a]||(this._callBacksMappedToRenewStates[a]=[]);var d=this;this._callBacksMappedToRenewStates[a].push(c),this._callBackMappedToRenewStates[a]||(this._callBackMappedToRenewStates[a]=function(c,e,f,g){d._activeRenewals[b]=null;for(var h=0;h<d._callBacksMappedToRenewStates[a].length;++h)try{d._callBacksMappedToRenewStates[a][h](c,e,f,g)}catch(f){d.warn(f)}d._callBacksMappedToRenewStates[a]=null,d._callBackMappedToRenewStates[a]=null})},AuthenticationContext.prototype._renewToken=function(a,b,c){this.info(\""renewToken is called for resource:\""+a);var d=this._addAdalFrame(\""adalRenewFrame\""+a),e=this._guid()+\""|\""+a;this.config.state=e,this._renewStates.push(e),this.verbose(\""Renew token Expected state: \""+e),c=c||\""token\"";var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(c,a),\""prompt\"");c===this.RESPONSE_TYPE.ID_TOKEN_TOKEN&&(this._idTokenNonce=this._guid(),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),f+=\""&nonce=\""+encodeURIComponent(this._idTokenNonce)),f+=\""&prompt=none\"",f=this._addHintParameters(f),this.registerCallback(e,a,b),this.verbosePii(\""Navigate to:\""+f),d.src=\""about:blank\"",this._loadFrameTimeout(f,\""adalRenewFrame\""+a,a)},AuthenticationContext.prototype._renewIdToken=function(a,b){this.info(\""renewIdToken is called\"");var c=this._addAdalFrame(\""adalIdTokenFrame\""),d=this._guid()+\""|\""+this.config.clientId;this._idTokenNonce=this._guid(),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),this.config.state=d,this._renewStates.push(d),this.verbose(\""Renew Idtoken Expected state: \""+d);var e=null===b||void 0===b?null:this.config.clientId,b=b||\""id_token\"",f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(b,e),\""prompt\"");f+=\""&prompt=none\"",f=this._addHintParameters(f),f+=\""&nonce=\""+encodeURIComponent(this._idTokenNonce),this.registerCallback(d,this.config.clientId,a),this.verbosePii(\""Navigate to:\""+f),c.src=\""about:blank\"",this._loadFrameTimeout(f,\""adalIdTokenFrame\"",this.config.clientId)},AuthenticationContext.prototype._urlContainsQueryStringParameter=function(a,b){return new RegExp(\""[\\\\?&]\""+a+\""=\"").test(b)},AuthenticationContext.prototype._urlRemoveQueryStringParameter=function(a,b){var c=new RegExp(\""(\\\\&\""+b+\""=)[^&]+\"");return a=a.replace(c,\""\""),c=new RegExp(\""(\""+b+\""=)[^&]+&\""),a=a.replace(c,\""\""),c=new RegExp(\""(\""+b+\""=)[^&]+\""),a=a.replace(c,\""\"")},AuthenticationContext.prototype._loadFrameTimeout=function(a,b,c){this.verbose(\""Set loading state to pending for: \""+c),this._saveItem(this.CONSTANTS.STORAGE.RENEW_STATUS+c,this.CONSTANTS.TOKEN_RENEW_STATUS_IN_PROGRESS),this._loadFrame(a,b);var d=this;setTimeout(function(){if(d._getItem(d.CONSTANTS.STORAGE.RENEW_STATUS+c)===d.CONSTANTS.TOKEN_RENEW_STATUS_IN_PROGRESS){d.verbose(\""Loading frame has timed out after: \""+d.CONSTANTS.LOADFRAME_TIMEOUT/1e3+\"" seconds for resource \""+c);var a=d._activeRenewals[c];a&&d._callBackMappedToRenewStates[a]&&d._callBackMappedToRenewStates[a](\""Token renewal operation failed due to timeout\"",null,\""Token Renewal Failed\""),d._saveItem(d.CONSTANTS.STORAGE.RENEW_STATUS+c,d.CONSTANTS.TOKEN_RENEW_STATUS_CANCELED)}},d.CONSTANTS.LOADFRAME_TIMEOUT)},AuthenticationContext.prototype._loadFrame=function(a,b){var c=this;c.info(\""LoadFrame: \""+b);var d=b;setTimeout(function(){var b=c._addAdalFrame(d);\""\""!==b.src&&\""about:blank\""!==b.src||(b.src=a,c._loadFrame(a,d))},500)},AuthenticationContext.prototype.acquireToken=function(a,b){if(this._isEmpty(a))return this.warn(\""resource is required\""),void b(\""resource is required\"",null,\""resource is required\"");var c=this.getCachedToken(a);return c?(this.info(\""Token is already in cache for resource:\""+a),void b(null,c,null)):this._user||this.config.extraQueryParameter&&-1!==this.config.extraQueryParameter.indexOf(\""login_hint\"")?void(this._activeRenewals[a]?this.registerCallback(this._activeRenewals[a],a,b):(this._requestType=this.REQUEST_TYPE.RENEW_TOKEN,a===this.config.clientId?this._user?(this.verbose(\""renewing idtoken\""),this._renewIdToken(b)):(this.verbose(\""renewing idtoken and access_token\""),this._renewIdToken(b,this.RESPONSE_TYPE.ID_TOKEN_TOKEN)):this._user?(this.verbose(\""renewing access_token\""),this._renewToken(a,b)):(this.verbose(\""renewing idtoken and access_token\""),this._renewToken(a,b,this.RESPONSE_TYPE.ID_TOKEN_TOKEN)))):(this.warn(\""User login is required\""),void b(\""User login is required\"",null,\""login required\""))},AuthenticationContext.prototype.acquireTokenPopup=function(a,b,c,d){if(this._isEmpty(a))return this.warn(\""resource is required\""),void d(\""resource is required\"",null,\""resource is required\"");if(!this._user)return this.warn(\""User login is required\""),void d(\""User login is required\"",null,\""login required\"");if(this._acquireTokenInProgress)return this.warn(\""Acquire token interactive is already in progress\""),void d(\""Acquire token interactive is already in progress\"",null,\""Acquire token interactive is already in progress\"");var e=this._guid()+\""|\""+a;this.config.state=e,this._renewStates.push(e),this._requestType=this.REQUEST_TYPE.RENEW_TOKEN,this.verbose(\""Renew token Expected state: \""+e);var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(\""token\"",a),\""prompt\"");if(f+=\""&prompt=select_account\"",b&&(f+=b),c&&-1===f.indexOf(\""&claims\""))f+=\""&claims=\""+encodeURIComponent(c);else if(c&&-1!==f.indexOf(\""&claims\""))throw new Error(\""Claims cannot be passed as an extraQueryParameter\"");f=this._addHintParameters(f),this._acquireTokenInProgress=!0,this.info(\""acquireToken interactive is called for the resource \""+a),this.registerCallback(e,a,d),this._loginPopup(f,a,d)},AuthenticationContext.prototype.acquireTokenRedirect=function(a,b,c){if(this._isEmpty(a))return this.warn(\""resource is required\""),void d(\""resource is required\"",null,\""resource is required\"");var d=this.callback;if(!this._user)return this.warn(\""User login is required\""),void d(\""User login is required\"",null,\""login required\"");if(this._acquireTokenInProgress)return this.warn(\""Acquire token interactive is already in progress\""),void d(\""Acquire token interactive is already in progress\"",null,\""Acquire token interactive is already in progress\"");var e=this._guid()+\""|\""+a;this.config.state=e,this.verbose(\""Renew token Expected state: \""+e);var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(\""token\"",a),\""prompt\"");if(f+=\""&prompt=select_account\"",b&&(f+=b),c&&-1===f.indexOf(\""&claims\""))f+=\""&claims=\""+encodeURIComponent(c);else if(c&&-1!==f.indexOf(\""&claims\""))throw new Error(\""Claims cannot be passed as an extraQueryParameter\"");f=this._addHintParameters(f),this._acquireTokenInProgress=!0,this.info(\""acquireToken interactive is called for the resource \""+a),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,window.location.href),this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,e,!0),this.promptUser(f)},AuthenticationContext.prototype.promptUser=function(a){a?(this.infoPii(\""Navigate to:\""+a),window.location.replace(a)):this.info(\""Navigate url is empty\"")},AuthenticationContext.prototype.clearCache=function(){this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,\""\""),this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,\""\""),this._renewStates=[],this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\""),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\"");var a=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);if(!this._isEmpty(a)){a=a.split(this.CONSTANTS.RESOURCE_DELIMETER);for(var b=0;b<a.length&&\""\""!==a[b];b++)this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a[b],\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a[b],0)}this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,\""\"")},AuthenticationContext.prototype.clearCacheForResource=function(a){this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\""),this._hasResource(a)&&(this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a,\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a,0))},AuthenticationContext.prototype.logOut=function(){this.clearCache(),this._user=null;var a;if(this.config.logOutUri)a=this.config.logOutUri;else{var b=\""common\"",c=\""\"";this.config.tenant&&(b=this.config.tenant),this.config.postLogoutRedirectUri&&(c=\""post_logout_redirect_uri=\""+encodeURIComponent(this.config.postLogoutRedirectUri)),a=this.instance+b+\""/oauth2/logout?\""+c}this.infoPii(\""Logout navigate to: \""+a),this.promptUser(a)},AuthenticationContext.prototype._isEmpty=function(a){return void 0===a||!a||0===a.length},AuthenticationContext.prototype.getUser=function(a){if(\""function\""!=typeof a)throw new Error(\""callback is not a function\"");if(this._user)return void a(null,this._user);var b=this._getItem(this.CONSTANTS.STORAGE.IDTOKEN);this._isEmpty(b)?(this.warn(\""User information is not available\""),a(\""User information is not available\"",null)):(this.info(\""User exists in cache: \""),this._user=this._createUser(b),a(null,this._user))},AuthenticationContext.prototype._addHintParameters=function(a){if(this._user&&this._user.profile)if(this._user.profile.sid&&-1!==a.indexOf(\""&prompt=none\""))this._urlContainsQueryStringParameter(\""sid\"",a)||(a+=\""&sid=\""+encodeURIComponent(this._user.profile.sid));else if(this._user.profile.upn&&(this._urlContainsQueryStringParameter(\""login_hint\"",a)||(a+=\""&login_hint=\""+encodeURIComponent(this._user.profile.upn)),!this._urlContainsQueryStringParameter(\""domain_hint\"",a)&&this._user.profile.upn.indexOf(\""@\"")>-1)){var b=this._user.profile.upn.split(\""@\"");a+=\""&domain_hint=\""+encodeURIComponent(b[b.length-1])}return a},AuthenticationContext.prototype._createUser=function(a){var b=null,c=this._extractIdToken(a);return c&&c.hasOwnProperty(\""aud\"")&&(c.aud.toLowerCase()===this.config.clientId.toLowerCase()?(b={userName:\""\"",profile:c},c.hasOwnProperty(\""upn\"")?b.userName=c.upn:c.hasOwnProperty(\""email\"")&&(b.userName=c.email)):this.warn(\""IdToken has invalid aud field\"")),b},AuthenticationContext.prototype._getHash=function(a){return a.indexOf(\""#/\"")>-1?a=a.substring(a.indexOf(\""#/\"")+2):a.indexOf(\""#\"")>-1&&(a=a.substring(1)),a},AuthenticationContext.prototype.isCallback=function(a){a=this._getHash(a);var b=this._deserialize(a);return b.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION)||b.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)||b.hasOwnProperty(this.CONSTANTS.ID_TOKEN)},AuthenticationContext.prototype.getLoginError=function(){return this._getItem(this.CONSTANTS.STORAGE.LOGIN_ERROR)},AuthenticationContext.prototype.getRequestInfo=function(a){a=this._getHash(a);var b=this._deserialize(a),c={valid:!1,parameters:{},stateMatch:!1,stateResponse:\""\"",requestType:this.REQUEST_TYPE.UNKNOWN};if(b&&(c.parameters=b,b.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION)||b.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)||b.hasOwnProperty(this.CONSTANTS.ID_TOKEN))){c.valid=!0;var d=\""\"";if(!b.hasOwnProperty(\""state\""))return this.warn(\""No state returned\""),c;if(this.verbose(\""State: \""+b.state),d=b.state,c.stateResponse=d,this._matchState(c))return c;if(!c.stateMatch&&window.parent){c.requestType=this._requestType;for(var e=this._renewStates,f=0;f<e.length;f++)if(e[f]===c.stateResponse){c.stateMatch=!0;break}}}return c},AuthenticationContext.prototype._matchNonce=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN);if(b){b=b.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<b.length;c++)if(b[c]===a.profile.nonce)return!0}return!1},AuthenticationContext.prototype._matchState=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.STATE_LOGIN);if(b){b=b.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<b.length;c++)if(b[c]===a.stateResponse)return a.requestType=this.REQUEST_TYPE.LOGIN,a.stateMatch=!0,!0}var d=this._getItem(this.CONSTANTS.STORAGE.STATE_RENEW);if(d){d=d.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<d.length;c++)if(d[c]===a.stateResponse)return a.requestType=this.REQUEST_TYPE.RENEW_TOKEN,a.stateMatch=!0,!0}return!1},AuthenticationContext.prototype._getResourceFromState=function(a){if(a){var b=a.indexOf(\""|\"");if(b>-1&&b+1<a.length)return a.substring(b+1)}return\""\""},AuthenticationContext.prototype.saveTokenFromHash=function(a){this.info(\""State status:\""+a.stateMatch+\""; Request type:\""+a.requestType),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\"");var b=this._getResourceFromState(a.stateResponse);if(a.parameters.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION))this.infoPii(\""Error :\""+a.parameters.error+\""; Error description:\""+a.parameters[this.CONSTANTS.ERROR_DESCRIPTION]),this._saveItem(this.CONSTANTS.STORAGE.ERROR,a.parameters.error),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,a.parameters[this.CONSTANTS.ERROR_DESCRIPTION]),a.requestType===this.REQUEST_TYPE.LOGIN&&(this._loginInProgress=!1,this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,a.parameters.error_description));else if(a.stateMatch){this.info(\""State is right\""),a.parameters.hasOwnProperty(this.CONSTANTS.SESSION_STATE)&&this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE,a.parameters[this.CONSTANTS.SESSION_STATE]);var c;a.parameters.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)&&(this.info(\""Fragment has access token\""),this._hasResource(b)||(c=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS)||\""\"",this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,c+b+this.CONSTANTS.RESOURCE_DELIMETER)),this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+b,a.parameters[this.CONSTANTS.ACCESS_TOKEN]),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+b,this._expiresIn(a.parameters[this.CONSTANTS.EXPIRES_IN]))),a.parameters.hasOwnProperty(this.CONSTANTS.ID_TOKEN)&&(this.info(\""Fragment has id token\""),this._loginInProgress=!1,this._user=this._createUser(a.parameters[this.CONSTANTS.ID_TOKEN]),this._user&&this._user.profile?this._matchNonce(this._user)?(this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN,a.parameters[this.CONSTANTS.ID_TOKEN]),b=this.config.loginResource?this.config.loginResource:this.config.clientId,this._hasResource(b)||(c=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS)||\""\"",this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,c+b+this.CONSTANTS.RESOURCE_DELIMETER)),this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+b,a.parameters[this.CONSTANTS.ID_TOKEN]),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+b,this._user.profile.exp)):(this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""Nonce received: \""+this._user.profile.nonce+\"" is not same as requested: \""+this._getItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN)),this._user=null):(a.parameters.error=\""invalid id_token\"",a.parameters.error_description=\""Invalid id_token. id_token: \""+a.parameters[this.CONSTANTS.ID_TOKEN],this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""invalid id_token\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""Invalid id_token. id_token: \""+a.parameters[this.CONSTANTS.ID_TOKEN])))}else a.parameters.error=\""Invalid_state\"",a.parameters.error_description=\""Invalid_state. state: \""+a.stateResponse,this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""Invalid_state\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""Invalid_state. state: \""+a.stateResponse);this._saveItem(this.CONSTANTS.STORAGE.RENEW_STATUS+b,this.CONSTANTS.TOKEN_RENEW_STATUS_COMPLETED)},AuthenticationContext.prototype.getResourceForEndpoint=function(a){if(this.config&&this.config.anonymousEndpoints)for(var b=0;b<this.config.anonymousEndpoints.length;b++)if(a.indexOf(this.config.anonymousEndpoints[b])>-1)return null;if(this.config&&this.config.endpoints)for(var c in this.config.endpoints)if(a.indexOf(c)>-1)return this.config.endpoints[c];return a.indexOf(\""http://\"")>-1||a.indexOf(\""https://\"")>-1?this._getHostFromUri(a)===this._getHostFromUri(this.config.redirectUri)?this.config.loginResource:null:this.config.loginResource},AuthenticationContext.prototype._getHostFromUri=function(a){var b=String(a).replace(/^(https?:)\\/\\//,\""\"");return b=b.split(\""/\"")[0]},AuthenticationContext.prototype.handleWindowCallback=function(a){if(null==a&&(a=window.location.hash),this.isCallback(a)){var b=null,c=!1;this._openedWindows.length>0&&this._openedWindows[this._openedWindows.length-1].opener&&this._openedWindows[this._openedWindows.length-1].opener._adalInstance?(b=this._openedWindows[this._openedWindows.length-1].opener._adalInstance,c=!0):window.parent&&window.parent._adalInstance&&(b=window.parent._adalInstance);var d,e,f=b.getRequestInfo(a),g=null;e=c||window.parent!==window?b._callBackMappedToRenewStates[f.stateResponse]:b.callback,b.info(\""Returned from redirect url\""),b.saveTokenFromHash(f),f.requestType===this.REQUEST_TYPE.RENEW_TOKEN&&window.parent?(window.parent!==window?b.verbose(\""Window is in iframe, acquiring token silently\""):b.verbose(\""acquiring token interactive in progress\""),d=f.parameters[b.CONSTANTS.ACCESS_TOKEN]||f.parameters[b.CONSTANTS.ID_TOKEN],g=b.CONSTANTS.ACCESS_TOKEN):f.requestType===this.REQUEST_TYPE.LOGIN&&(d=f.parameters[b.CONSTANTS.ID_TOKEN],g=b.CONSTANTS.ID_TOKEN);var h=f.parameters[b.CONSTANTS.ERROR_DESCRIPTION],i=f.parameters[b.CONSTANTS.ERROR];try{e&&e(h,d,i,g)}catch(a){b.error(\""Error occurred in user defined callback function: \""+a)}window.parent!==window||c||(b.config.navigateToLoginRequestUrl?window.location.href=b._getItem(b.CONSTANTS.STORAGE.LOGIN_REQUEST):window.location.hash=\""\"")}},AuthenticationContext.prototype._getNavigateUrl=function(a,b){var c=\""common\"";this.config.tenant&&(c=this.config.tenant);var d=this.instance+c+\""/oauth2/authorize\""+this._serialize(a,this.config,b)+this._addLibMetadata();return this.info(\""Navigate url:\""+d),d},AuthenticationContext.prototype._extractIdToken=function(a){var b=this._decodeJwt(a);if(!b)return null;try{var c=b.JWSPayload,d=this._base64DecodeStringUrlSafe(c);return d?JSON.parse(d):(this.info(\""The returned id_token could not be base64 url safe decoded.\""),null)}catch(a){this.error(\""The returned id_token could not be decoded\"",a)}return null},AuthenticationContext.prototype._base64DecodeStringUrlSafe=function(a){return a=a.replace(/-/g,\""+\"").replace(/_/g,\""/\""),window.atob?decodeURIComponent(escape(window.atob(a))):decodeURIComponent(escape(this._decode(a)))},AuthenticationContext.prototype._decode=function(a){var b=\""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"";a=String(a).replace(/=+$/,\""\"");var c=a.length;if(c%4==1)throw new Error(\""The token to be decoded is not correctly encoded.\"");for(var d,e,f,g,h,i,j,k,l=\""\"",m=0;m<c;m+=4){if(d=b.indexOf(a.charAt(m)),e=b.indexOf(a.charAt(m+1)),f=b.indexOf(a.charAt(m+2)),g=b.indexOf(a.charAt(m+3)),m+2===c-1){h=d<<18|e<<12|f<<6,i=h>>16&255,j=h>>8&255,l+=String.fromCharCode(i,j);break}if(m+1===c-1){h=d<<18|e<<12,i=h>>16&255,l+=String.fromCharCode(i);break}h=d<<18|e<<12|f<<6|g,i=h>>16&255,j=h>>8&255,k=255&h,l+=String.fromCharCode(i,j,k)}return l},AuthenticationContext.prototype._decodeJwt=function(a){if(this._isEmpty(a))return null;var b=/^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/,c=b.exec(a);return!c||c.length<4?(this.warn(\""The returned id_token is not parseable.\""),null):{header:c[1],JWSPayload:c[2],JWSSig:c[3]}},AuthenticationContext.prototype._convertUrlSafeToRegularBase64EncodedString=function(a){return a.replace(\""-\"",\""+\"").replace(\""_\"",\""/\"")},AuthenticationContext.prototype._serialize=function(a,b,c){var d=[];if(null!==b){d.push(\""?response_type=\""+a),d.push(\""client_id=\""+encodeURIComponent(b.clientId)),c&&d.push(\""resource=\""+encodeURIComponent(c)),d.push(\""redirect_uri=\""+encodeURIComponent(b.redirectUri)),d.push(\""state=\""+encodeURIComponent(b.state)),b.hasOwnProperty(\""slice\"")&&d.push(\""slice=\""+encodeURIComponent(b.slice)),b.hasOwnProperty(\""extraQueryParameter\"")&&d.push(b.extraQueryParameter);var e=b.correlationId?b.correlationId:this._guid();d.push(\""client-request-id=\""+encodeURIComponent(e))}return d.join(\""&\"")},AuthenticationContext.prototype._deserialize=function(a){var b,c=/\\+/g,d=/([^&=]+)=([^&]*)/g,e=function(a){return decodeURIComponent(a.replace(c,\"" \""))},f={};for(b=d.exec(a);b;)f[e(b[1])]=e(b[2]),b=d.exec(a);return f},AuthenticationContext.prototype._decimalToHex=function(a){for(var b=a.toString(16);b.length<2;)b=\""0\""+b;return b},AuthenticationContext.prototype._guid=function(){var a=window.crypto||window.msCrypto;if(a&&a.getRandomValues){var b=new Uint8Array(16);return a.getRandomValues(b),b[6]|=64,b[6]&=79,b[8]|=128,b[8]&=191,this._decimalToHex(b[0])+this._decimalToHex(b[1])+this._decimalToHex(b[2])+this._decimalToHex(b[3])+\""-\""+this._decimalToHex(b[4])+this._decimalToHex(b[5])+\""-\""+this._decimalToHex(b[6])+this._decimalToHex(b[7])+\""-\""+this._decimalToHex(b[8])+this._decimalToHex(b[9])+\""-\""+this._decimalToHex(b[10])+this._decimalToHex(b[11])+this._decimalToHex(b[12])+this._decimalToHex(b[13])+this._decimalToHex(b[14])+this._decimalToHex(b[15])}for(var c=\""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"",d=\""0123456789abcdef\"",e=0,f=\""\"",g=0;g<36;g++)\""-\""!==c[g]&&\""4\""!==c[g]&&(e=16*Math.random()|0),\""x\""===c[g]?f+=d[e]:\""y\""===c[g]?(e&=3,e|=8,f+=d[e]):f+=c[g];return f},AuthenticationContext.prototype._expiresIn=function(a){return a||(a=3599),this._now()+parseInt(a,10)},AuthenticationContext.prototype._now=function(){return Math.round((new Date).getTime()/1e3)},AuthenticationContext.prototype._addAdalFrame=function(a){if(void 0!==a){this.info(\""Add adal frame to document:\""+a);var b=document.getElementById(a);if(!b){if(document.createElement&&document.documentElement&&(window.opera||-1===window.navigator.userAgent.indexOf(\""MSIE 5.0\""))){var c=document.createElement(\""iframe\"");c.setAttribute(\""id\"",a),c.setAttribute(\""aria-hidden\"",\""true\""),c.style.visibility=\""hidden\"",c.style.position=\""absolute\"",c.style.width=c.style.height=c.borderWidth=\""0px\"",b=document.getElementsByTagName(\""body\"")[0].appendChild(c)}else document.body&&document.body.insertAdjacentHTML&&document.body.insertAdjacentHTML(\""beforeEnd\"",'<iframe name=\""'+a+'\"" id=\""'+a+'\"" style=\""display:none\""></iframe>');window.frames&&window.frames[a]&&(b=window.frames[a])}return b}},AuthenticationContext.prototype._saveItem=function(a,b,c){if(this.config&&this.config.cacheLocation&&\""localStorage\""===this.config.cacheLocation){if(!this._supportsLocalStorage())return this.info(\""Local storage is not supported\""),!1;if(c){var d=this._getItem(a)||\""\"";localStorage.setItem(a,d+b+this.CONSTANTS.CACHE_DELIMETER)}else localStorage.setItem(a,b);return!0}return this._supportsSessionStorage()?(sessionStorage.setItem(a,b),!0):(this.info(\""Session storage is not supported\""),!1)},AuthenticationContext.prototype._getItem=function(a){return this.config&&this.config.cacheLocation&&\""localStorage\""===this.config.cacheLocation?this._supportsLocalStorage()?localStorage.getItem(a):(this.info(\""Local storage is not supported\""),null):this._supportsSessionStorage()?sessionStorage.getItem(a):(this.info(\""Session storage is not supported\""),null)},AuthenticationContext.prototype._supportsLocalStorage=function(){try{return!!window.localStorage&&(window.localStorage.setItem(\""storageTest\"",\""A\""),\""A\""==window.localStorage.getItem(\""storageTest\"")&&(window.localStorage.removeItem(\""storageTest\""),!window.localStorage.getItem(\""storageTest\"")))}catch(a){return!1}},AuthenticationContext.prototype._supportsSessionStorage=function(){try{return!!window.sessionStorage&&(window.sessionStorage.setItem(\""storageTest\"",\""A\""),\""A\""==window.sessionStorage.getItem(\""storageTest\"")&&(window.sessionStorage.removeItem(\""storageTest\""),!window.sessionStorage.getItem(\""storageTest\"")))}catch(a){return!1}},AuthenticationContext.prototype._cloneConfig=function(a){if(null===a||\""object\""!=typeof a)return a;var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b},AuthenticationContext.prototype._addLibMetadata=function(){return\""&x-client-SKU=Js&x-client-Ver=\""+this._libVersion()},AuthenticationContext.prototype.log=function(a,b,c,d){if(a<=Logging.level){if(!Logging.piiLoggingEnabled&&d)return;var e=(new Date).toUTCString(),f=\""\"";f=this.config.correlationId?e+\"":\""+this.config.correlationId+\""-\""+this._libVersion()+\""-\""+this.CONSTANTS.LEVEL_STRING_MAP[a]+\"" \""+b:e+\"":\""+this._libVersion()+\""-\""+this.CONSTANTS.LEVEL_STRING_MAP[a]+\"" \""+b,c&&(f+=\""\\nstack:\\n\""+c.stack),Logging.log(f)}},AuthenticationContext.prototype.error=function(a,b){this.log(this.CONSTANTS.LOGGING_LEVEL.ERROR,a,b)},AuthenticationContext.prototype.warn=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.WARN,a,null)},AuthenticationContext.prototype.info=function(a){\r\nthis.log(this.CONSTANTS.LOGGING_LEVEL.INFO,a,null)},AuthenticationContext.prototype.verbose=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.VERBOSE,a,null)},AuthenticationContext.prototype.errorPii=function(a,b){this.log(this.CONSTANTS.LOGGING_LEVEL.ERROR,a,b,!0)},AuthenticationContext.prototype.warnPii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.WARN,a,null,!0)},AuthenticationContext.prototype.infoPii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.INFO,a,null,!0)},AuthenticationContext.prototype.verbosePii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.VERBOSE,a,null,!0)},AuthenticationContext.prototype._libVersion=function(){return\""1.0.17\""},\""undefined\""!=typeof module&&module.exports&&(module.exports=AuthenticationContext,module.exports.inject=function(a){return new AuthenticationContext(a)}),AuthenticationContext}();"",""var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\""return this\"")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \""object\"") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n"",""import * as tslib_1 from \""tslib\"";\r\nimport { BearerTokenFetchClient } from \""./netutil\"";\r\nimport { isUrlAbsolute } from \""./util\"";\r\n// @ts-ignore\r\nimport * as adal from \""adal-angular/dist/adal.min.js\"";\r\n/**\r\n * Parses out the root of the request url to use as the resource when getting the token\r\n *\r\n * After: https://gist.github.com/jlong/2428561\r\n * @param url The url to parse\r\n */\r\nfunction getResource(url) {\r\n    var parser = document.createElement(\""a\"");\r\n    parser.href = url;\r\n    return parser.protocol + \""//\"" + parser.hostname;\r\n}\r\n/**\r\n * Azure AD Client for use in the browser\r\n */\r\nvar AdalClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AdalClient, _super);\r\n    /**\r\n     * Creates a new instance of AdalClient\r\n     * @param clientId Azure App Id\r\n     * @param tenant Office 365 tenant (Ex: {tenant}.onmicrosoft.com)\r\n     * @param redirectUri The redirect url used to authenticate the\r\n     */\r\n    function AdalClient(clientId, tenant, redirectUri) {\r\n        var _this = _super.call(this, null) || this;\r\n        _this.clientId = clientId;\r\n        _this.tenant = tenant;\r\n        _this.redirectUri = redirectUri;\r\n        _this._displayCallback = null;\r\n        _this._loginPromise = null;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Creates a new AdalClient using the values of the supplied SPFx context (requires SPFx >= 1.6)\r\n     *\r\n     * @param spfxContext Current SPFx context\r\n     * @description Using this method requires that the features described in this article\r\n     * https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-aadhttpclient are activated in the tenant.\r\n     */\r\n    AdalClient.fromSPFxContext = function (spfxContext) {\r\n        return new SPFxAdalClient(spfxContext);\r\n    };\r\n    /**\r\n     * Conducts the fetch opertation against the AAD secured resource\r\n     *\r\n     * @param url Absolute URL for the request\r\n     * @param options Any fetch options passed to the underlying fetch implementation\r\n     */\r\n    AdalClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        if (!isUrlAbsolute(url)) {\r\n            throw Error(\""You must supply absolute urls to AdalClient.fetch.\"");\r\n        }\r\n        // the url we are calling is the resource\r\n        return this.getToken(getResource(url)).then(function (token) {\r\n            _this.token = token;\r\n            return _super.prototype.fetch.call(_this, url, options);\r\n        });\r\n    };\r\n    /**\r\n     * Gets a token based on the current user\r\n     *\r\n     * @param resource The resource for which we are requesting a token\r\n     */\r\n    AdalClient.prototype.getToken = function (resource) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            _this.ensureAuthContext().then(function (_) { return _this.login(); }).then(function (_) {\r\n                AdalClient._authContext.acquireToken(resource, function (message, token) {\r\n                    if (message) {\r\n                        return reject(Error(message));\r\n                    }\r\n                    resolve(token);\r\n                });\r\n            }).catch(reject);\r\n        });\r\n    };\r\n    /**\r\n     * Ensures we have created and setup the adal AuthenticationContext instance\r\n     */\r\n    AdalClient.prototype.ensureAuthContext = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            if (AdalClient._authContext === null) {\r\n                AdalClient._authContext = adal.inject({\r\n                    clientId: _this.clientId,\r\n                    displayCall: function (url) {\r\n                        if (_this._displayCallback) {\r\n                            _this._displayCallback(url);\r\n                        }\r\n                    },\r\n                    navigateToLoginRequestUrl: false,\r\n                    redirectUri: _this.redirectUri,\r\n                    tenant: _this.tenant,\r\n                });\r\n            }\r\n            resolve();\r\n        });\r\n    };\r\n    /**\r\n     * Ensures the current user is logged in\r\n     */\r\n    AdalClient.prototype.login = function () {\r\n        var _this = this;\r\n        if (this._loginPromise) {\r\n            return this._loginPromise;\r\n        }\r\n        this._loginPromise = new Promise(function (resolve, reject) {\r\n            if (AdalClient._authContext.getCachedUser()) {\r\n                return resolve();\r\n            }\r\n            _this._displayCallback = function (url) {\r\n                var popupWindow = window.open(url, \""login\"", \""width=483, height=600\"");\r\n                if (!popupWindow) {\r\n                    return reject(Error(\""Could not open pop-up window for auth. Likely pop-ups are blocked by the browser.\""));\r\n                }\r\n                if (popupWindow && popupWindow.focus) {\r\n                    popupWindow.focus();\r\n                }\r\n                var pollTimer = window.setInterval(function () {\r\n                    if (!popupWindow || popupWindow.closed || popupWindow.closed === undefined) {\r\n                        window.clearInterval(pollTimer);\r\n                    }\r\n                    try {\r\n                        if (popupWindow.document.URL.indexOf(_this.redirectUri) !== -1) {\r\n                            window.clearInterval(pollTimer);\r\n                            AdalClient._authContext.handleWindowCallback(popupWindow.location.hash);\r\n                            popupWindow.close();\r\n                            resolve();\r\n                        }\r\n                    }\r\n                    catch (e) {\r\n                        reject(e);\r\n                    }\r\n                }, 30);\r\n            };\r\n            // this triggers the login process\r\n            _this.ensureAuthContext().then(function (_) {\r\n                AdalClient._authContext._loginInProgress = false;\r\n                AdalClient._authContext.login();\r\n                _this._displayCallback = null;\r\n            });\r\n        });\r\n        return this._loginPromise;\r\n    };\r\n    /**\r\n     * Our auth context\r\n     */\r\n    AdalClient._authContext = null;\r\n    return AdalClient;\r\n}(BearerTokenFetchClient));\r\nexport { AdalClient };\r\n/**\r\n * Client wrapping the aadTokenProvider available from SPFx >= 1.6\r\n */\r\nvar SPFxAdalClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPFxAdalClient, _super);\r\n    /**\r\n     *\r\n     * @param context provide the appropriate SPFx Context object\r\n     */\r\n    function SPFxAdalClient(context) {\r\n        var _this = _super.call(this, null) || this;\r\n        _this.context = context;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Executes a fetch request using the supplied url and options\r\n     *\r\n     * @param url Absolute url of the request\r\n     * @param options Any options\r\n     */\r\n    SPFxAdalClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        return this.getToken(getResource(url)).then(function (token) {\r\n            _this.token = token;\r\n            return _super.prototype.fetch.call(_this, url, options);\r\n        });\r\n    };\r\n    /**\r\n     * Gets an AAD token for the provided resource using the SPFx AADTokenProvider\r\n     *\r\n     * @param resource Resource for which a token is to be requested (ex: https://graph.microsoft.com)\r\n     */\r\n    SPFxAdalClient.prototype.getToken = function (resource) {\r\n        return this.context.aadTokenProviderFactory.getTokenProvider().then(function (provider) {\r\n            return provider.getToken(resource);\r\n        });\r\n    };\r\n    return SPFxAdalClient;\r\n}(BearerTokenFetchClient));\r\nexport { SPFxAdalClient };\r\n//# sourceMappingURL=adalclient.js.map"",""import { isFunc } from \""./util\"";\r\n/**\r\n * Used to calculate the object properties, with polyfill if needed\r\n */\r\nvar objectEntries = isFunc(Object.entries) ? Object.entries : function (o) { return Object.keys(o).map(function (k) { return [k, o[k]]; }); };\r\n/**\r\n * Converts the supplied object to a map\r\n *\r\n * @param o The object to map\r\n */\r\nexport function objectToMap(o) {\r\n    if (o !== undefined && o !== null) {\r\n        return new Map(objectEntries(o));\r\n    }\r\n    return new Map();\r\n}\r\n/**\r\n * Merges to Map instances together, overwriting values in target with matching keys, last in wins\r\n *\r\n * @param target map into which the other maps are merged\r\n * @param maps One or more maps to merge into the target\r\n */\r\nexport function mergeMaps(target) {\r\n    var maps = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        maps[_i - 1] = arguments[_i];\r\n    }\r\n    for (var i = 0; i < maps.length; i++) {\r\n        maps[i].forEach(function (v, k) {\r\n            target.set(k, v);\r\n        });\r\n    }\r\n    return target;\r\n}\r\n//# sourceMappingURL=collections.js.map"",""import { mergeMaps, objectToMap } from \""./collections\"";\r\nexport function setup(config) {\r\n    RuntimeConfig.extend(config);\r\n}\r\n// lable mapping for known config values\r\nvar s = [\r\n    \""defaultCachingStore\"",\r\n    \""defaultCachingTimeoutSeconds\"",\r\n    \""globalCacheDisable\"",\r\n    \""enableCacheExpiration\"",\r\n    \""cacheExpirationIntervalMilliseconds\"",\r\n    \""spfxContext\"",\r\n];\r\nvar RuntimeConfigImpl = /** @class */ (function () {\r\n    function RuntimeConfigImpl(_v) {\r\n        if (_v === void 0) { _v = new Map(); }\r\n        this._v = _v;\r\n        // setup defaults\r\n        this._v.set(s[0], \""session\"");\r\n        this._v.set(s[1], 60);\r\n        this._v.set(s[2], false);\r\n        this._v.set(s[3], false);\r\n        this._v.set(s[4], 750);\r\n        this._v.set(s[5], null);\r\n    }\r\n    /**\r\n     *\r\n     * @param config The set of properties to add to the globa configuration instance\r\n     */\r\n    RuntimeConfigImpl.prototype.extend = function (config) {\r\n        this._v = mergeMaps(this._v, objectToMap(config));\r\n    };\r\n    RuntimeConfigImpl.prototype.get = function (key) {\r\n        return this._v.get(key);\r\n    };\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingStore\"", {\r\n        get: function () {\r\n            return this.get(s[0]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingTimeoutSeconds\"", {\r\n        get: function () {\r\n            return this.get(s[1]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""globalCacheDisable\"", {\r\n        get: function () {\r\n            return this.get(s[2]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""enableCacheExpiration\"", {\r\n        get: function () {\r\n            return this.get(s[3]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""cacheExpirationIntervalMilliseconds\"", {\r\n        get: function () {\r\n            return this.get(s[4]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""spfxContext\"", {\r\n        get: function () {\r\n            return this.get(s[5]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return RuntimeConfigImpl;\r\n}());\r\nexport { RuntimeConfigImpl };\r\nvar _runtimeConfig = new RuntimeConfigImpl();\r\nexport var RuntimeConfig = _runtimeConfig;\r\n//# sourceMappingURL=libconfig.js.map"",""/**\r\n * A set of logging levels\r\n */\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n    LogLevel[LogLevel[\""Verbose\""] = 0] = \""Verbose\"";\r\n    LogLevel[LogLevel[\""Info\""] = 1] = \""Info\"";\r\n    LogLevel[LogLevel[\""Warning\""] = 2] = \""Warning\"";\r\n    LogLevel[LogLevel[\""Error\""] = 3] = \""Error\"";\r\n    LogLevel[LogLevel[\""Off\""] = 99] = \""Off\"";\r\n})(LogLevel || (LogLevel = {}));\r\n//# sourceMappingURL=loglevel.js.map"",""import { dateAdd, getCtxCallback, jsS, objectDefinedNotNull } from \""./util\"";\r\nimport { RuntimeConfig } from \""./libconfig\"";\r\n/**\r\n * A wrapper class to provide a consistent interface to browser based storage\r\n *\r\n */\r\nvar PnPClientStorageWrapper = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the PnPClientStorageWrapper class\r\n     *\r\n     * @constructor\r\n     */\r\n    function PnPClientStorageWrapper(store, defaultTimeoutMinutes) {\r\n        if (defaultTimeoutMinutes === void 0) { defaultTimeoutMinutes = -1; }\r\n        this.store = store;\r\n        this.defaultTimeoutMinutes = defaultTimeoutMinutes;\r\n        this.enabled = this.test();\r\n        // if the cache timeout is enabled call the handler\r\n        // this will clear any expired items and set the timeout function\r\n        if (RuntimeConfig.enableCacheExpiration) {\r\n            this.cacheExpirationHandler();\r\n        }\r\n    }\r\n    /**\r\n     * Get a value from storage, or null if that value does not exist\r\n     *\r\n     * @param key The key whose value we want to retrieve\r\n     */\r\n    PnPClientStorageWrapper.prototype.get = function (key) {\r\n        if (!this.enabled) {\r\n            return null;\r\n        }\r\n        var o = this.store.getItem(key);\r\n        if (!objectDefinedNotNull(o)) {\r\n            return null;\r\n        }\r\n        var persistable = JSON.parse(o);\r\n        if (new Date(persistable.expiration) <= new Date()) {\r\n            this.delete(key);\r\n            return null;\r\n        }\r\n        else {\r\n            return persistable.value;\r\n        }\r\n    };\r\n    /**\r\n     * Adds a value to the underlying storage\r\n     *\r\n     * @param key The key to use when storing the provided value\r\n     * @param o The value to store\r\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\r\n     */\r\n    PnPClientStorageWrapper.prototype.put = function (key, o, expire) {\r\n        if (this.enabled) {\r\n            this.store.setItem(key, this.createPersistable(o, expire));\r\n        }\r\n    };\r\n    /**\r\n     * Deletes a value from the underlying storage\r\n     *\r\n     * @param key The key of the pair we want to remove from storage\r\n     */\r\n    PnPClientStorageWrapper.prototype.delete = function (key) {\r\n        if (this.enabled) {\r\n            this.store.removeItem(key);\r\n        }\r\n    };\r\n    /**\r\n     * Gets an item from the underlying storage, or adds it if it does not exist using the supplied getter function\r\n     *\r\n     * @param key The key to use when storing the provided value\r\n     * @param getter A function which will upon execution provide the desired value\r\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\r\n     */\r\n    PnPClientStorageWrapper.prototype.getOrPut = function (key, getter, expire) {\r\n        var _this = this;\r\n        if (!this.enabled) {\r\n            return getter();\r\n        }\r\n        var o = this.get(key);\r\n        if (o === null) {\r\n            return getter().then(function (d) {\r\n                _this.put(key, d, expire);\r\n                return d;\r\n            });\r\n        }\r\n        return Promise.resolve(o);\r\n    };\r\n    /**\r\n     * Deletes any expired items placed in the store by the pnp library, leaves other items untouched\r\n     */\r\n    PnPClientStorageWrapper.prototype.deleteExpired = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (!_this.enabled) {\r\n                resolve();\r\n            }\r\n            try {\r\n                for (var i = 0; i < _this.store.length; i++) {\r\n                    var key = _this.store.key(i);\r\n                    if (key !== null) {\r\n                        // test the stored item to see if we stored it\r\n                        if (/[\""|']?pnp[\""|']? ?: ?1/i.test(_this.store.getItem(key))) {\r\n                            // get those items as get will delete from cache if they are expired\r\n                            _this.get(key);\r\n                        }\r\n                    }\r\n                }\r\n                resolve();\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Used to determine if the wrapped storage is available currently\r\n     */\r\n    PnPClientStorageWrapper.prototype.test = function () {\r\n        var str = \""t\"";\r\n        try {\r\n            this.store.setItem(str, str);\r\n            this.store.removeItem(str);\r\n            return true;\r\n        }\r\n        catch (e) {\r\n            return false;\r\n        }\r\n    };\r\n    /**\r\n     * Creates the persistable to store\r\n     */\r\n    PnPClientStorageWrapper.prototype.createPersistable = function (o, expire) {\r\n        if (expire === undefined) {\r\n            // ensure we are by default inline with the global library setting\r\n            var defaultTimeout = RuntimeConfig.defaultCachingTimeoutSeconds;\r\n            if (this.defaultTimeoutMinutes > 0) {\r\n                defaultTimeout = this.defaultTimeoutMinutes * 60;\r\n            }\r\n            expire = dateAdd(new Date(), \""second\"", defaultTimeout);\r\n        }\r\n        return jsS({ pnp: 1, expiration: expire, value: o });\r\n    };\r\n    /**\r\n     * Deletes expired items added by this library in this.store and sets a timeout to call itself\r\n     */\r\n    PnPClientStorageWrapper.prototype.cacheExpirationHandler = function () {\r\n        var _this = this;\r\n        this.deleteExpired().then(function (_) {\r\n            // call ourself in the future\r\n            setTimeout(getCtxCallback(_this, _this.cacheExpirationHandler), RuntimeConfig.cacheExpirationIntervalMilliseconds);\r\n        }).catch(function (e) {\r\n            console.error(e);\r\n        });\r\n    };\r\n    return PnPClientStorageWrapper;\r\n}());\r\nexport { PnPClientStorageWrapper };\r\n/**\r\n * A thin implementation of in-memory storage for use in nodejs\r\n */\r\nvar MemoryStorage = /** @class */ (function () {\r\n    function MemoryStorage(_store) {\r\n        if (_store === void 0) { _store = new Map(); }\r\n        this._store = _store;\r\n    }\r\n    Object.defineProperty(MemoryStorage.prototype, \""length\"", {\r\n        get: function () {\r\n            return this._store.size;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    MemoryStorage.prototype.clear = function () {\r\n        this._store.clear();\r\n    };\r\n    MemoryStorage.prototype.getItem = function (key) {\r\n        return this._store.get(key);\r\n    };\r\n    MemoryStorage.prototype.key = function (index) {\r\n        return Array.from(this._store)[index][0];\r\n    };\r\n    MemoryStorage.prototype.removeItem = function (key) {\r\n        this._store.delete(key);\r\n    };\r\n    MemoryStorage.prototype.setItem = function (key, data) {\r\n        this._store.set(key, data);\r\n    };\r\n    return MemoryStorage;\r\n}());\r\n/**\r\n * A class that will establish wrappers for both local and session storage\r\n */\r\nvar PnPClientStorage = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the PnPClientStorage class\r\n     *\r\n     * @constructor\r\n     */\r\n    function PnPClientStorage(_local, _session) {\r\n        if (_local === void 0) { _local = null; }\r\n        if (_session === void 0) { _session = null; }\r\n        this._local = _local;\r\n        this._session = _session;\r\n    }\r\n    Object.defineProperty(PnPClientStorage.prototype, \""local\"", {\r\n        /**\r\n         * Provides access to the local storage of the browser\r\n         */\r\n        get: function () {\r\n            if (this._local === null) {\r\n                this._local = this.getStore(\""local\"");\r\n            }\r\n            return this._local;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(PnPClientStorage.prototype, \""session\"", {\r\n        /**\r\n         * Provides access to the session storage of the browser\r\n         */\r\n        get: function () {\r\n            if (this._session === null) {\r\n                this._session = this.getStore(\""session\"");\r\n            }\r\n            return this._session;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    PnPClientStorage.prototype.getStore = function (name) {\r\n        if (name === \""local\"") {\r\n            return new PnPClientStorageWrapper(typeof (localStorage) === \""undefined\"" ? new MemoryStorage() : localStorage);\r\n        }\r\n        return new PnPClientStorageWrapper(typeof (sessionStorage) === \""undefined\"" ? new MemoryStorage() : sessionStorage);\r\n    };\r\n    return PnPClientStorage;\r\n}());\r\nexport { PnPClientStorage };\r\n//# sourceMappingURL=storage.js.map"",""import { RuntimeConfig, dateAdd, PnPClientStorage } from \""@pnp/common\"";\r\nvar CachingOptions = /** @class */ (function () {\r\n    function CachingOptions(key) {\r\n        this.key = key;\r\n        this.expiration = dateAdd(new Date(), \""second\"", RuntimeConfig.defaultCachingTimeoutSeconds);\r\n        this.storeName = RuntimeConfig.defaultCachingStore;\r\n    }\r\n    Object.defineProperty(CachingOptions.prototype, \""store\"", {\r\n        get: function () {\r\n            if (this.storeName === \""local\"") {\r\n                return CachingOptions.storage.local;\r\n            }\r\n            else {\r\n                return CachingOptions.storage.session;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    CachingOptions.storage = new PnPClientStorage();\r\n    return CachingOptions;\r\n}());\r\nexport { CachingOptions };\r\nvar CachingParserWrapper = /** @class */ (function () {\r\n    function CachingParserWrapper(parser, cacheOptions) {\r\n        this.parser = parser;\r\n        this.cacheOptions = cacheOptions;\r\n    }\r\n    CachingParserWrapper.prototype.parse = function (response) {\r\n        var _this = this;\r\n        return this.parser.parse(response).then(function (r) { return _this.cacheData(r); });\r\n    };\r\n    CachingParserWrapper.prototype.cacheData = function (data) {\r\n        if (this.cacheOptions.store !== null) {\r\n            this.cacheOptions.store.put(this.cacheOptions.key, data, this.cacheOptions.expiration);\r\n        }\r\n        return data;\r\n    };\r\n    return CachingParserWrapper;\r\n}());\r\nexport { CachingParserWrapper };\r\n//# sourceMappingURL=caching.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { isFunc, hOP } from \""@pnp/common\"";\r\nvar HttpRequestError = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HttpRequestError, _super);\r\n    function HttpRequestError(message, response, status, statusText) {\r\n        if (status === void 0) { status = response.status; }\r\n        if (statusText === void 0) { statusText = response.statusText; }\r\n        var _this = _super.call(this, message) || this;\r\n        _this.response = response;\r\n        _this.status = status;\r\n        _this.statusText = statusText;\r\n        _this.isHttpRequestError = true;\r\n        return _this;\r\n    }\r\n    HttpRequestError.init = function (r) {\r\n        return r.clone().text().then(function (t) {\r\n            return new HttpRequestError(\""Error making HttpClient request in queryable [\"" + r.status + \""] \"" + r.statusText + \"" ::> \"" + t, r.clone());\r\n        });\r\n    };\r\n    return HttpRequestError;\r\n}(Error));\r\nexport { HttpRequestError };\r\nvar ODataParserBase = /** @class */ (function () {\r\n    function ODataParserBase() {\r\n        this.rawJson = {};\r\n    }\r\n    ODataParserBase.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (_this.handleError(r, reject)) {\r\n                _this.parseImpl(r, resolve, reject);\r\n            }\r\n        });\r\n    };\r\n    ODataParserBase.prototype.parseImpl = function (r, resolve, reject) {\r\n        var _this = this;\r\n        if ((r.headers.has(\""Content-Length\"") && parseFloat(r.headers.get(\""Content-Length\"")) === 0) || r.status === 204) {\r\n            resolve({});\r\n        }\r\n        else {\r\n            // patch to handle cases of 200 response with no or whitespace only bodies (#487 & #545)\r\n            r.text()\r\n                .then(function (txt) { return txt.replace(/\\s/ig, \""\"").length > 0 ? JSON.parse(txt) : {}; })\r\n                .then(function (json) { return resolve(_this.parseODataJSON(json)); })\r\n                .catch(function (e) { return reject(e); });\r\n        }\r\n    };\r\n    /**\r\n     * Handles a response with ok === false by parsing the body and creating a ProcessHttpClientResponseException\r\n     * which is passed to the reject delegate. This method returns true if there is no error, otherwise false\r\n     *\r\n     * @param r Current response object\r\n     * @param reject reject delegate for the surrounding promise\r\n     */\r\n    ODataParserBase.prototype.handleError = function (r, reject) {\r\n        if (!r.ok) {\r\n            HttpRequestError.init(r).then(reject);\r\n        }\r\n        return r.ok;\r\n    };\r\n    /**\r\n     * Normalizes the json response by removing the various nested levels\r\n     *\r\n     * @param json json object to parse\r\n     */\r\n    ODataParserBase.prototype.parseODataJSON = function (json) {\r\n        this.rawJson = json;\r\n        var result = json;\r\n        if (hOP(json, \""d\"")) {\r\n            if (hOP(json.d, \""results\"")) {\r\n                result = json.d.results;\r\n            }\r\n            else {\r\n                result = json.d;\r\n            }\r\n        }\r\n        else if (hOP(json, \""value\"")) {\r\n            result = json.value;\r\n        }\r\n        return result;\r\n    };\r\n    return ODataParserBase;\r\n}());\r\nexport { ODataParserBase };\r\nvar ODataDefaultParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ODataDefaultParser, _super);\r\n    function ODataDefaultParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return ODataDefaultParser;\r\n}(ODataParserBase));\r\nexport { ODataDefaultParser };\r\nvar TextParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TextParser, _super);\r\n    function TextParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TextParser.prototype.parseImpl = function (r, resolve) {\r\n        r.text().then(resolve);\r\n    };\r\n    return TextParser;\r\n}(ODataParserBase));\r\nexport { TextParser };\r\nvar BlobParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BlobParser, _super);\r\n    function BlobParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BlobParser.prototype.parseImpl = function (r, resolve) {\r\n        r.blob().then(resolve);\r\n    };\r\n    return BlobParser;\r\n}(ODataParserBase));\r\nexport { BlobParser };\r\nvar JSONParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JSONParser, _super);\r\n    function JSONParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    JSONParser.prototype.parseImpl = function (r, resolve) {\r\n        r.json().then(resolve);\r\n    };\r\n    return JSONParser;\r\n}(ODataParserBase));\r\nexport { JSONParser };\r\nvar BufferParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BufferParser, _super);\r\n    function BufferParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BufferParser.prototype.parseImpl = function (r, resolve) {\r\n        if (isFunc(r.arrayBuffer)) {\r\n            r.arrayBuffer().then(resolve);\r\n        }\r\n        else {\r\n            r.buffer().then(resolve);\r\n        }\r\n    };\r\n    return BufferParser;\r\n}(ODataParserBase));\r\nexport { BufferParser };\r\nvar LambdaParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(LambdaParser, _super);\r\n    function LambdaParser(parser) {\r\n        var _this = _super.call(this) || this;\r\n        _this.parser = parser;\r\n        return _this;\r\n    }\r\n    LambdaParser.prototype.parseImpl = function (r, resolve) {\r\n        this.parser(r).then(resolve);\r\n    };\r\n    return LambdaParser;\r\n}(ODataParserBase));\r\nexport { LambdaParser };\r\n//# sourceMappingURL=parsers.js.map"",""/**\r\n * Class used to subscribe ILogListener and log messages throughout an application\r\n *\r\n */\r\nvar Logger = /** @class */ (function () {\r\n    function Logger() {\r\n    }\r\n    Object.defineProperty(Logger, \""activeLogLevel\"", {\r\n        /**\r\n         * Gets or sets the active log level to apply for log filtering\r\n         */\r\n        get: function () {\r\n            return Logger.instance.activeLogLevel;\r\n        },\r\n        set: function (value) {\r\n            Logger.instance.activeLogLevel = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Logger, \""instance\"", {\r\n        get: function () {\r\n            if (Logger._instance === undefined || Logger._instance === null) {\r\n                Logger._instance = new LoggerImpl();\r\n            }\r\n            return Logger._instance;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds ILogListener instances to the set of subscribed listeners\r\n     *\r\n     * @param listeners One or more listeners to subscribe to this log\r\n     */\r\n    Logger.subscribe = function () {\r\n        var listeners = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            listeners[_i] = arguments[_i];\r\n        }\r\n        listeners.map(function (listener) { return Logger.instance.subscribe(listener); });\r\n    };\r\n    /**\r\n     * Clears the subscribers collection, returning the collection before modifiction\r\n     */\r\n    Logger.clearSubscribers = function () {\r\n        return Logger.instance.clearSubscribers();\r\n    };\r\n    Object.defineProperty(Logger, \""count\"", {\r\n        /**\r\n         * Gets the current subscriber count\r\n         */\r\n        get: function () {\r\n            return Logger.instance.count;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Writes the supplied string to the subscribed listeners\r\n     *\r\n     * @param message The message to write\r\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info)\r\n     */\r\n    Logger.write = function (message, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        Logger.instance.log({ level: level, message: message });\r\n    };\r\n    /**\r\n     * Writes the supplied string to the subscribed listeners\r\n     *\r\n     * @param json The json object to stringify and write\r\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info)\r\n     */\r\n    Logger.writeJSON = function (json, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        this.write(JSON.stringify(json), level);\r\n    };\r\n    /**\r\n     * Logs the supplied entry to the subscribed listeners\r\n     *\r\n     * @param entry The message to log\r\n     */\r\n    Logger.log = function (entry) {\r\n        Logger.instance.log(entry);\r\n    };\r\n    /**\r\n     * Logs an error object to the subscribed listeners\r\n     *\r\n     * @param err The error object\r\n     */\r\n    Logger.error = function (err) {\r\n        Logger.instance.log({ data: err, level: 3 /* Error */, message: err.message });\r\n    };\r\n    return Logger;\r\n}());\r\nexport { Logger };\r\nvar LoggerImpl = /** @class */ (function () {\r\n    function LoggerImpl(activeLogLevel, subscribers) {\r\n        if (activeLogLevel === void 0) { activeLogLevel = 2 /* Warning */; }\r\n        if (subscribers === void 0) { subscribers = []; }\r\n        this.activeLogLevel = activeLogLevel;\r\n        this.subscribers = subscribers;\r\n    }\r\n    LoggerImpl.prototype.subscribe = function (listener) {\r\n        this.subscribers.push(listener);\r\n    };\r\n    LoggerImpl.prototype.clearSubscribers = function () {\r\n        var s = this.subscribers.slice(0);\r\n        this.subscribers.length = 0;\r\n        return s;\r\n    };\r\n    Object.defineProperty(LoggerImpl.prototype, \""count\"", {\r\n        get: function () {\r\n            return this.subscribers.length;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LoggerImpl.prototype.write = function (message, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        this.log({ level: level, message: message });\r\n    };\r\n    LoggerImpl.prototype.log = function (entry) {\r\n        if (entry !== undefined && this.activeLogLevel <= entry.level) {\r\n            this.subscribers.map(function (subscriber) { return subscriber.log(entry); });\r\n        }\r\n    };\r\n    return LoggerImpl;\r\n}());\r\n//# sourceMappingURL=logger.js.map"",""/**\r\n * Implementation of LogListener which logs to the console\r\n *\r\n */\r\nvar ConsoleListener = /** @class */ (function () {\r\n    function ConsoleListener() {\r\n    }\r\n    /**\r\n     * Any associated data that a given logging listener may choose to log or ignore\r\n     *\r\n     * @param entry The information to be logged\r\n     */\r\n    ConsoleListener.prototype.log = function (entry) {\r\n        var msg = this.format(entry);\r\n        switch (entry.level) {\r\n            case 0 /* Verbose */:\r\n            case 1 /* Info */:\r\n                console.log(msg);\r\n                break;\r\n            case 2 /* Warning */:\r\n                console.warn(msg);\r\n                break;\r\n            case 3 /* Error */:\r\n                console.error(msg);\r\n                break;\r\n        }\r\n    };\r\n    /**\r\n     * Formats the message\r\n     *\r\n     * @param entry The information to format into a string\r\n     */\r\n    ConsoleListener.prototype.format = function (entry) {\r\n        var msg = [];\r\n        msg.push(\""Message: \"" + entry.message);\r\n        if (entry.data !== undefined) {\r\n            try {\r\n                msg.push(\"" Data: \"" + JSON.stringify(entry.data));\r\n            }\r\n            catch (e) {\r\n                msg.push(\"" Data: Error in stringify of supplied data \"" + e);\r\n            }\r\n        }\r\n        return msg.join(\""\"");\r\n    };\r\n    return ConsoleListener;\r\n}());\r\nexport { ConsoleListener };\r\n/**\r\n * Implementation of LogListener which logs to the supplied function\r\n *\r\n */\r\nvar FunctionListener = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the FunctionListener class\r\n     *\r\n     * @constructor\r\n     * @param  method The method to which any logging data will be passed\r\n     */\r\n    function FunctionListener(method) {\r\n        this.method = method;\r\n    }\r\n    /**\r\n     * Any associated data that a given logging listener may choose to log or ignore\r\n     *\r\n     * @param entry The information to be logged\r\n     */\r\n    FunctionListener.prototype.log = function (entry) {\r\n        this.method(entry);\r\n    };\r\n    return FunctionListener;\r\n}());\r\nexport { FunctionListener };\r\n//# sourceMappingURL=listeners.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, isFunc, hOP } from \""@pnp/common\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { CachingOptions, CachingParserWrapper } from \""./caching\"";\r\n/**\r\n * Resolves the context's result value\r\n *\r\n * @param context The current context\r\n */\r\nfunction returnResult(context) {\r\n    Logger.log({\r\n        data: Logger.activeLogLevel === 0 /* Verbose */ ? context.result : {},\r\n        level: 1 /* Info */,\r\n        message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Returning result from pipeline. Set logging to verbose to see data.\"",\r\n    });\r\n    return Promise.resolve(context.result);\r\n}\r\n/**\r\n * Sets the result on the context\r\n */\r\nexport function setResult(context, value) {\r\n    return new Promise(function (resolve) {\r\n        context.result = value;\r\n        context.hasResult = true;\r\n        resolve(context);\r\n    });\r\n}\r\n/**\r\n * Invokes the next method in the provided context's pipeline\r\n *\r\n * @param c The current request context\r\n */\r\nfunction next(c) {\r\n    if (c.pipeline.length > 0) {\r\n        return c.pipeline.shift()(c);\r\n    }\r\n    else {\r\n        return Promise.resolve(c);\r\n    }\r\n}\r\n/**\r\n * Executes the current request context's pipeline\r\n *\r\n * @param context Current context\r\n */\r\nexport function pipe(context) {\r\n    if (context.pipeline.length < 1) {\r\n        Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Request pipeline contains no methods!\"", 2 /* Warning */);\r\n    }\r\n    var promise = next(context).then(function (ctx) { return returnResult(ctx); }).catch(function (e) {\r\n        Logger.error(e);\r\n        throw e;\r\n    });\r\n    if (context.isBatched) {\r\n        // this will block the batch's execute method from returning until the child requets have been resolved\r\n        context.batch.addResolveBatchDependency(promise);\r\n    }\r\n    return promise;\r\n}\r\n/**\r\n * decorator factory applied to methods in the pipeline to control behavior\r\n */\r\nexport function requestPipelineMethod(alwaysRun) {\r\n    if (alwaysRun === void 0) { alwaysRun = false; }\r\n    return function (target, propertyKey, descriptor) {\r\n        var method = descriptor.value;\r\n        descriptor.value = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            // if we have a result already in the pipeline, pass it along and don't call the tagged method\r\n            if (!alwaysRun && args.length > 0 && hOP(args[0], \""hasResult\"") && args[0].hasResult) {\r\n                Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Skipping request pipeline method \"" + propertyKey + \"", existing result in pipeline.\"", 0 /* Verbose */);\r\n                return Promise.resolve(args[0]);\r\n            }\r\n            // apply the tagged method\r\n            Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Calling request pipeline method \"" + propertyKey + \"".\"", 0 /* Verbose */);\r\n            // then chain the next method in the context's pipeline - allows for dynamic pipeline\r\n            return method.apply(target, args).then(function (ctx) { return next(ctx); });\r\n        };\r\n    };\r\n}\r\n/**\r\n * Contains the methods used within the request pipeline\r\n */\r\nvar PipelineMethods = /** @class */ (function () {\r\n    function PipelineMethods() {\r\n    }\r\n    /**\r\n     * Logs the start of the request\r\n     */\r\n    PipelineMethods.logStart = function (context) {\r\n        return new Promise(function (resolve) {\r\n            Logger.log({\r\n                data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                level: 1 /* Info */,\r\n                message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Beginning \"" + context.verb + \"" request (\"" + context.requestAbsoluteUrl + \"")\"",\r\n            });\r\n            resolve(context);\r\n        });\r\n    };\r\n    /**\r\n     * Handles caching of the request\r\n     */\r\n    PipelineMethods.caching = function (context) {\r\n        return new Promise(function (resolve) {\r\n            // handle caching, if applicable\r\n            if (context.isCached) {\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Caching is enabled for request, checking cache...\"", 1 /* Info */);\r\n                var cacheOptions = new CachingOptions(context.requestAbsoluteUrl.toLowerCase());\r\n                if (context.cachingOptions !== undefined) {\r\n                    cacheOptions = extend(cacheOptions, context.cachingOptions);\r\n                }\r\n                // we may not have a valid store\r\n                if (cacheOptions.store !== null) {\r\n                    // check if we have the data in cache and if so resolve the promise and return\r\n                    var data = cacheOptions.store.get(cacheOptions.key);\r\n                    if (data !== null) {\r\n                        // ensure we clear any held batch dependency we are resolving from the cache\r\n                        Logger.log({\r\n                            data: Logger.activeLogLevel === 1 /* Info */ ? {} : data,\r\n                            level: 1 /* Info */,\r\n                            message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value returned from cache.\"",\r\n                        });\r\n                        if (isFunc(context.batchDependency)) {\r\n                            context.batchDependency();\r\n                        }\r\n                        // handle the case where a parser needs to take special actions with a cached result\r\n                        if (hOP(context.parser, \""hydrate\"")) {\r\n                            data = context.parser.hydrate(data);\r\n                        }\r\n                        return setResult(context, data).then(function (ctx) { return resolve(ctx); });\r\n                    }\r\n                }\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value not found in cache.\"", 1 /* Info */);\r\n                // if we don't then wrap the supplied parser in the caching parser wrapper\r\n                // and send things on their way\r\n                context.parser = new CachingParserWrapper(context.parser, cacheOptions);\r\n            }\r\n            return resolve(context);\r\n        });\r\n    };\r\n    /**\r\n     * Sends the request\r\n     */\r\n    PipelineMethods.send = function (context) {\r\n        return new Promise(function (resolve, reject) {\r\n            // send or batch the request\r\n            if (context.isBatched) {\r\n                // we are in a batch, so add to batch, remove dependency, and resolve with the batch's promise\r\n                var p = context.batch.add(context.requestAbsoluteUrl, context.verb, context.options, context.parser, context.requestId);\r\n                // we release the dependency here to ensure the batch does not execute until the request is added to the batch\r\n                if (isFunc(context.batchDependency)) {\r\n                    context.batchDependency();\r\n                }\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Batching request in batch \"" + context.batch.batchId + \"".\"", 1 /* Info */);\r\n                // we set the result as the promise which will be resolved by the batch's execution\r\n                resolve(setResult(context, p));\r\n            }\r\n            else {\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Sending request.\"", 1 /* Info */);\r\n                // we are not part of a batch, so proceed as normal\r\n                var client = context.clientFactory();\r\n                var opts = extend(context.options || {}, { method: context.verb });\r\n                client.fetch(context.requestAbsoluteUrl, opts)\r\n                    .then(function (response) { return context.parser.parse(response); })\r\n                    .then(function (result) { return setResult(context, result); })\r\n                    .then(function (ctx) { return resolve(ctx); })\r\n                    .catch(function (e) { return reject(e); });\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Logs the end of the request\r\n     */\r\n    PipelineMethods.logEnd = function (context) {\r\n        return new Promise(function (resolve) {\r\n            if (context.isBatched) {\r\n                Logger.log({\r\n                    data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                    level: 1 /* Info */,\r\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") \"" + context.verb + \"" request will complete in batch \"" + context.batch.batchId + \"".\"",\r\n                });\r\n            }\r\n            else {\r\n                Logger.log({\r\n                    data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                    level: 1 /* Info */,\r\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Completing \"" + context.verb + \"" request.\"",\r\n                });\r\n            }\r\n            resolve(context);\r\n        });\r\n    };\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod(true)\r\n    ], PipelineMethods, \""logStart\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod()\r\n    ], PipelineMethods, \""caching\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod()\r\n    ], PipelineMethods, \""send\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod(true)\r\n    ], PipelineMethods, \""logEnd\"", null);\r\n    return PipelineMethods;\r\n}());\r\nexport { PipelineMethods };\r\nexport function getDefaultPipeline() {\r\n    return [\r\n        PipelineMethods.logStart,\r\n        PipelineMethods.caching,\r\n        PipelineMethods.send,\r\n        PipelineMethods.logEnd,\r\n    ].slice(0);\r\n}\r\n//# sourceMappingURL=pipeline.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { combine, RuntimeConfig, mergeOptions, objectDefinedNotNull, isArray, } from \""@pnp/common\"";\r\nimport { ODataDefaultParser, JSONParser } from \""./parsers\"";\r\nimport { getDefaultPipeline, pipe, } from \""./pipeline\"";\r\nvar Queryable = /** @class */ (function () {\r\n    function Queryable() {\r\n        this._query = new Map();\r\n        this._options = {};\r\n        this._url = \""\"";\r\n        this._parentUrl = \""\"";\r\n        this._useCaching = false;\r\n        this._cachingOptions = null;\r\n        this._cloneParentWasCaching = false;\r\n        this._cloneParentCacheOptions = null;\r\n        this._requestPipeline = null;\r\n    }\r\n    /**\r\n    * Gets the currentl url\r\n    *\r\n    */\r\n    Queryable.prototype.toUrl = function () {\r\n        return this._url;\r\n    };\r\n    /**\r\n     * Directly concatonates the supplied string to the current url, not normalizing \""/\"" chars\r\n     *\r\n     * @param pathPart The string to concatonate to the url\r\n     */\r\n    Queryable.prototype.concat = function (pathPart) {\r\n        this._url += pathPart;\r\n        return this;\r\n    };\r\n    Object.defineProperty(Queryable.prototype, \""query\"", {\r\n        /**\r\n         * Provides access to the query builder for this url\r\n         *\r\n         */\r\n        get: function () {\r\n            return this._query;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Sets custom options for current object and all derived objects accessible via chaining\r\n     *\r\n     * @param options custom options\r\n     */\r\n    Queryable.prototype.configure = function (options) {\r\n        mergeOptions(this._options, options);\r\n        return this;\r\n    };\r\n    /**\r\n     * Configures this instance from the configure options of the supplied instance\r\n     *\r\n     * @param o Instance from which options should be taken\r\n     */\r\n    Queryable.prototype.configureFrom = function (o) {\r\n        mergeOptions(this._options, o._options);\r\n        return this;\r\n    };\r\n    /**\r\n     * Enables caching for this request\r\n     *\r\n     * @param options Defines the options used when caching this request\r\n     */\r\n    Queryable.prototype.usingCaching = function (options) {\r\n        if (!RuntimeConfig.globalCacheDisable) {\r\n            this._useCaching = true;\r\n            if (options !== undefined) {\r\n                this._cachingOptions = options;\r\n            }\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Allows you to set a request specific processing pipeline\r\n     *\r\n     * @param pipeline The set of methods, in order, to execute a given request\r\n     */\r\n    Queryable.prototype.withPipeline = function (pipeline) {\r\n        this._requestPipeline = pipeline.slice(0);\r\n        return this;\r\n    };\r\n    Queryable.prototype.getCore = function (parser, options) {\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        // Fix for #304 - when we clone objects we in some cases then execute a get request\r\n        // in these cases the caching settings were getting dropped from the request\r\n        // this tracks if the object from which this was cloned was caching and applies that to an immediate get request\r\n        // does not affect objects cloned from this as we are using different fields to track the settings so it won't\r\n        // be triggered\r\n        if (this._cloneParentWasCaching) {\r\n            this.usingCaching(this._cloneParentCacheOptions);\r\n        }\r\n        return this.reqImpl(\""GET\"", options, parser);\r\n    };\r\n    Queryable.prototype.postCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.reqImpl(\""POST\"", options, parser);\r\n    };\r\n    Queryable.prototype.patchCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.reqImpl(\""PATCH\"", options, parser);\r\n    };\r\n    Queryable.prototype.deleteCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.reqImpl(\""DELETE\"", options, parser);\r\n    };\r\n    Queryable.prototype.putCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.reqImpl(\""PUT\"", options, parser);\r\n    };\r\n    Queryable.prototype.reqImpl = function (method, options, parser) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        return this.getRequestPipeline(method, options, parser)\r\n            .then(function (pipeline) { return _this.toRequestContext(method, options, parser, pipeline); })\r\n            .then(function (context) { return pipe(context); });\r\n    };\r\n    /**\r\n     * Appends the given string and normalizes \""/\"" chars\r\n     *\r\n     * @param pathPart The string to append\r\n     */\r\n    Queryable.prototype.append = function (pathPart) {\r\n        this._url = combine(this._url, pathPart);\r\n    };\r\n    Object.defineProperty(Queryable.prototype, \""parentUrl\"", {\r\n        /**\r\n         * Gets the parent url used when creating this instance\r\n         *\r\n         */\r\n        get: function () {\r\n            return this._parentUrl;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Extends this queryable from the provided parent\r\n     *\r\n     * @param parent Parent queryable from which we will derive a base url\r\n     * @param path Additional path\r\n     */\r\n    Queryable.prototype.extend = function (parent, path) {\r\n        this._parentUrl = parent._url;\r\n        this._url = combine(this._parentUrl, path || \""\"");\r\n        this.configureFrom(parent);\r\n    };\r\n    /**\r\n     * Configures a cloned object from this instance\r\n     *\r\n     * @param clone\r\n     */\r\n    Queryable.prototype._clone = function (clone, _0) {\r\n        clone.configureFrom(this);\r\n        if (this._useCaching) {\r\n            clone._cloneParentWasCaching = true;\r\n            clone._cloneParentCacheOptions = this._cachingOptions;\r\n        }\r\n        return clone;\r\n    };\r\n    /**\r\n     * Handles getting the request pipeline to run for a given request\r\n     */\r\n    // @ts-ignore\r\n    // justified because we want to show that all these arguments are passed to the method so folks inheriting and potentially overriding\r\n    // clearly see how the method is invoked inside the class\r\n    Queryable.prototype.getRequestPipeline = function (method, options, parser) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        return new Promise(function (resolve) {\r\n            if (objectDefinedNotNull(_this._requestPipeline) && isArray(_this._requestPipeline)) {\r\n                resolve(_this._requestPipeline);\r\n            }\r\n            else {\r\n                resolve(getDefaultPipeline());\r\n            }\r\n        });\r\n    };\r\n    return Queryable;\r\n}());\r\nexport { Queryable };\r\nvar ODataQueryable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ODataQueryable, _super);\r\n    function ODataQueryable() {\r\n        var _this = _super.call(this) || this;\r\n        _this._batch = null;\r\n        _this._batchDependency = null;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Adds this query to the supplied batch\r\n     *\r\n     * @example\r\n     * ```\r\n     *\r\n     * let b = pnp.sp.createBatch();\r\n     * pnp.sp.web.inBatch(b).get().then(...);\r\n     * b.execute().then(...)\r\n     * ```\r\n     */\r\n    ODataQueryable.prototype.inBatch = function (batch) {\r\n        if (this.batch !== null) {\r\n            throw Error(\""This query is already part of a batch.\"");\r\n        }\r\n        if (objectDefinedNotNull(batch)) {\r\n            this._batch = batch;\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets the currentl url\r\n     *\r\n     */\r\n    ODataQueryable.prototype.toUrl = function () {\r\n        return this._url;\r\n    };\r\n    /**\r\n     * Executes the currently built request\r\n     *\r\n     * @param parser Allows you to specify a parser to handle the result\r\n     * @param getOptions The options used for this request\r\n     */\r\n    ODataQueryable.prototype.get = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return this.getCore(parser, options);\r\n    };\r\n    ODataQueryable.prototype.getCore = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return _super.prototype.getCore.call(this, parser, options);\r\n    };\r\n    ODataQueryable.prototype.postCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.postCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.patchCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.patchCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.deleteCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.deleteCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.putCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.putCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.reqImpl = function (method, options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (this.hasBatch) {\r\n            this._batchDependency = this.addBatchDependency();\r\n        }\r\n        return _super.prototype.reqImpl.call(this, method, options, parser);\r\n    };\r\n    /**\r\n     * Blocks a batch call from occuring, MUST be cleared by calling the returned function\r\n    */\r\n    ODataQueryable.prototype.addBatchDependency = function () {\r\n        if (this._batch !== null) {\r\n            return this._batch.addDependency();\r\n        }\r\n        return function () { return null; };\r\n    };\r\n    Object.defineProperty(ODataQueryable.prototype, \""hasBatch\"", {\r\n        /**\r\n         * Indicates if the current query has a batch associated\r\n         *\r\n         */\r\n        get: function () {\r\n            return objectDefinedNotNull(this._batch);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ODataQueryable.prototype, \""batch\"", {\r\n        /**\r\n         * The batch currently associated with this query or null\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.hasBatch ? this._batch : null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Configures a cloned object from this instance\r\n     *\r\n     * @param clone\r\n     */\r\n    ODataQueryable.prototype._clone = function (clone, cloneSettings) {\r\n        clone = _super.prototype._clone.call(this, clone, cloneSettings);\r\n        if (cloneSettings.includeBatch) {\r\n            clone = clone.inBatch(this._batch);\r\n        }\r\n        return clone;\r\n    };\r\n    return ODataQueryable;\r\n}(Queryable));\r\nexport { ODataQueryable };\r\n//# sourceMappingURL=queryable.js.map"",""import { getGUID } from \""@pnp/common\"";\r\nvar ODataBatch = /** @class */ (function () {\r\n    function ODataBatch(_batchId) {\r\n        if (_batchId === void 0) { _batchId = getGUID(); }\r\n        this._batchId = _batchId;\r\n        this._reqs = [];\r\n        this._deps = [];\r\n        this._rDeps = [];\r\n    }\r\n    Object.defineProperty(ODataBatch.prototype, \""batchId\"", {\r\n        get: function () {\r\n            return this._batchId;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ODataBatch.prototype, \""requests\"", {\r\n        /**\r\n         * The requests contained in this batch\r\n         */\r\n        get: function () {\r\n            return this._reqs;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     *\r\n     * @param url Request url\r\n     * @param method Request method (GET, POST, etc)\r\n     * @param options Any request options\r\n     * @param parser The parser used to handle the eventual return from the query\r\n     * @param id An identifier used to track a request within a batch\r\n     */\r\n    ODataBatch.prototype.add = function (url, method, options, parser, id) {\r\n        var info = {\r\n            id: id,\r\n            method: method.toUpperCase(),\r\n            options: options,\r\n            parser: parser,\r\n            reject: null,\r\n            resolve: null,\r\n            url: url,\r\n        };\r\n        var p = new Promise(function (resolve, reject) {\r\n            info.resolve = resolve;\r\n            info.reject = reject;\r\n        });\r\n        this._reqs.push(info);\r\n        return p;\r\n    };\r\n    /**\r\n     * Adds a dependency insuring that some set of actions will occur before a batch is processed.\r\n     * MUST be cleared using the returned resolve delegate to allow batches to run\r\n     */\r\n    ODataBatch.prototype.addDependency = function () {\r\n        var resolver = function () { return void (0); };\r\n        this._deps.push(new Promise(function (resolve) {\r\n            resolver = resolve;\r\n        }));\r\n        return resolver;\r\n    };\r\n    /**\r\n     * The batch's execute method will not resolve util any promises added here resolve\r\n     *\r\n     * @param p The dependent promise\r\n     */\r\n    ODataBatch.prototype.addResolveBatchDependency = function (p) {\r\n        this._rDeps.push(p);\r\n    };\r\n    /**\r\n     * Execute the current batch and resolve the associated promises\r\n     *\r\n     * @returns A promise which will be resolved once all of the batch's child promises have resolved\r\n     */\r\n    ODataBatch.prototype.execute = function () {\r\n        var _this = this;\r\n        // we need to check the dependencies twice due to how different engines handle things.\r\n        // We can get a second set of promises added during the first set resolving\r\n        return Promise.all(this._deps)\r\n            .then(function () { return Promise.all(_this._deps); })\r\n            .then(function () { return _this.executeImpl(); })\r\n            .then(function () { return Promise.all(_this._rDeps); })\r\n            .then(function () { return void (0); });\r\n    };\r\n    return ODataBatch;\r\n}());\r\nexport { ODataBatch };\r\n//# sourceMappingURL=odatabatch.js.map"",""import { RuntimeConfig, AdalClient } from \""@pnp/common\"";\r\nexport function setup(config) {\r\n    RuntimeConfig.extend(config);\r\n}\r\nvar GraphRuntimeConfigImpl = /** @class */ (function () {\r\n    function GraphRuntimeConfigImpl() {\r\n    }\r\n    Object.defineProperty(GraphRuntimeConfigImpl.prototype, \""headers\"", {\r\n        get: function () {\r\n            var graphPart = RuntimeConfig.get(\""graph\"");\r\n            if (graphPart !== undefined && graphPart !== null && graphPart.headers !== undefined) {\r\n                return graphPart.headers;\r\n            }\r\n            return {};\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRuntimeConfigImpl.prototype, \""fetchClientFactory\"", {\r\n        get: function () {\r\n            var graphPart = RuntimeConfig.get(\""graph\"");\r\n            // use a configured factory firt\r\n            if (graphPart !== undefined && graphPart !== null && graphPart.fetchClientFactory !== undefined) {\r\n                return graphPart.fetchClientFactory;\r\n            }\r\n            // then try and use spfx context if available\r\n            if (RuntimeConfig.spfxContext !== undefined) {\r\n                return function () { return AdalClient.fromSPFxContext(RuntimeConfig.spfxContext); };\r\n            }\r\n            throw Error(\""There is no Graph Client available, either set one using configuraiton or provide a valid SPFx Context using setup.\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return GraphRuntimeConfigImpl;\r\n}());\r\nexport { GraphRuntimeConfigImpl };\r\nexport var GraphRuntimeConfig = new GraphRuntimeConfigImpl();\r\n//# sourceMappingURL=graphlibconfig.js.map"",""import { extend, mergeHeaders, getCtxCallback, } from \""@pnp/common\"";\r\nimport { GraphRuntimeConfig } from \""../config/graphlibconfig\"";\r\nvar GraphHttpClient = /** @class */ (function () {\r\n    function GraphHttpClient() {\r\n        this._impl = GraphRuntimeConfig.fetchClientFactory();\r\n    }\r\n    GraphHttpClient.prototype.fetch = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var headers = new Headers();\r\n        // first we add the global headers so they can be overwritten by any passed in locally to this call\r\n        mergeHeaders(headers, GraphRuntimeConfig.headers);\r\n        // second we add the local options so we can overwrite the globals\r\n        mergeHeaders(headers, options.headers);\r\n        if (!headers.has(\""Content-Type\"")) {\r\n            headers.append(\""Content-Type\"", \""application/json\"");\r\n        }\r\n        if (!headers.has(\""SdkVersion\"")) {\r\n            // this marks the requests for understanding by the service\r\n            headers.append(\""SdkVersion\"", \""PnPCoreJS/1.3.5\"");\r\n        }\r\n        var opts = extend(options, { headers: headers });\r\n        return this.fetchRaw(url, opts);\r\n    };\r\n    GraphHttpClient.prototype.fetchRaw = function (url, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        // here we need to normalize the headers\r\n        var rawHeaders = new Headers();\r\n        mergeHeaders(rawHeaders, options.headers);\r\n        options = extend(options, { headers: rawHeaders });\r\n        var retry = function (ctx) {\r\n            _this._impl.fetch(url, options).then(function (response) { return ctx.resolve(response); }).catch(function (response) {\r\n                // Check if request was throttled - http status code 429\r\n                // Check if request failed due to server unavailable - http status code 503\r\n                if (response.status !== 429 && response.status !== 503) {\r\n                    ctx.reject(response);\r\n                }\r\n                // grab our current delay\r\n                var delay = ctx.delay;\r\n                // Increment our counters.\r\n                ctx.delay *= 2;\r\n                ctx.attempts++;\r\n                // If we have exceeded the retry count, reject.\r\n                if (ctx.retryCount <= ctx.attempts) {\r\n                    ctx.reject(response);\r\n                }\r\n                // Set our retry timeout for {delay} milliseconds.\r\n                setTimeout(getCtxCallback(_this, retry, ctx), delay);\r\n            });\r\n        };\r\n        return new Promise(function (resolve, reject) {\r\n            var retryContext = {\r\n                attempts: 0,\r\n                delay: 100,\r\n                reject: reject,\r\n                resolve: resolve,\r\n                retryCount: 7,\r\n            };\r\n            retry.call(_this, retryContext);\r\n        });\r\n    };\r\n    GraphHttpClient.prototype.get = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""GET\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    GraphHttpClient.prototype.post = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""POST\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    GraphHttpClient.prototype.patch = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""PATCH\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    GraphHttpClient.prototype.delete = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""DELETE\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    return GraphHttpClient;\r\n}());\r\nexport { GraphHttpClient };\r\n//# sourceMappingURL=graphhttpclient.js.map"",""var GraphEndpoints = /** @class */ (function () {\r\n    function GraphEndpoints() {\r\n    }\r\n    /**\r\n     *\r\n     * @param url The url to set the endpoint\r\n     */\r\n    GraphEndpoints.ensure = function (url, endpoint) {\r\n        var all = [GraphEndpoints.Beta, GraphEndpoints.V1];\r\n        var regex = new RegExp(endpoint, \""i\"");\r\n        var replaces = all.filter(function (s) { return !regex.test(s); }).map(function (s) { return s.replace(\"".\"", \""\\\\.\""); });\r\n        regex = new RegExp(\""/?(\"" + replaces.join(\""|\"") + \"")/\"", \""ig\"");\r\n        return url.replace(regex, \""/\"" + endpoint + \""/\"");\r\n    };\r\n    GraphEndpoints.Beta = \""beta\"";\r\n    GraphEndpoints.V1 = \""v1.0\"";\r\n    return GraphEndpoints;\r\n}());\r\nexport { GraphEndpoints };\r\n//# sourceMappingURL=types.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { combine, extend, isUrlAbsolute, getGUID, } from \""@pnp/common\"";\r\nimport { ODataQueryable, } from \""@pnp/odata\"";\r\nimport { GraphHttpClient } from \""./net/graphhttpclient\"";\r\nimport { GraphEndpoints } from \""./types\"";\r\n/**\r\n * Queryable Base Class\r\n *\r\n */\r\nvar GraphQueryable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphQueryable, _super);\r\n    /**\r\n     * Creates a new instance of the Queryable class\r\n     *\r\n     * @constructor\r\n     * @param baseUrl A string or Queryable that should form the base part of the url\r\n     *\r\n     */\r\n    function GraphQueryable(baseUrl, path) {\r\n        var _this = _super.call(this) || this;\r\n        if (typeof baseUrl === \""string\"") {\r\n            var urlStr = baseUrl;\r\n            _this._parentUrl = urlStr;\r\n            _this._url = combine(urlStr, path);\r\n        }\r\n        else {\r\n            _this.extend(baseUrl, path);\r\n        }\r\n        return _this;\r\n    }\r\n    /**\r\n     * Choose which fields to return\r\n     *\r\n     * @param selects One or more fields to return\r\n     */\r\n    GraphQueryable.prototype.select = function () {\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        if (selects.length > 0) {\r\n            this.query.set(\""$select\"", selects.join(\"",\""));\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Expands fields such as lookups to get additional data\r\n     *\r\n     * @param expands The Fields for which to expand the values\r\n     */\r\n    GraphQueryable.prototype.expand = function () {\r\n        var expands = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            expands[_i] = arguments[_i];\r\n        }\r\n        if (expands.length > 0) {\r\n            this.query.set(\""$expand\"", expands.join(\"",\""));\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Creates a new instance of the supplied factory and extends this into that new instance\r\n     *\r\n     * @param factory constructor for the new queryable\r\n     */\r\n    GraphQueryable.prototype.as = function (factory) {\r\n        var o = new factory(this._url, null);\r\n        return extend(o, this, true);\r\n    };\r\n    /**\r\n     * Gets the full url with query information\r\n     *\r\n     */\r\n    GraphQueryable.prototype.toUrlAndQuery = function () {\r\n        var url = this.toUrl();\r\n        if (!isUrlAbsolute(url)) {\r\n            url = combine(\""https://graph.microsoft.com\"", url);\r\n        }\r\n        if (this.query.size > 0) {\r\n            var char = url.indexOf(\""?\"") > -1 ? \""&\"" : \""?\"";\r\n            url += \""\"" + char + Array.from(this.query).map(function (v) { return v[0] + \""=\"" + v[1]; }).join(\""&\"");\r\n        }\r\n        return url;\r\n    };\r\n    /**\r\n     * Allows setting the endpoint (v1.0, beta)\r\n     *\r\n     * @param endpoint\r\n     */\r\n    GraphQueryable.prototype.setEndpoint = function (endpoint) {\r\n        this._url = GraphEndpoints.ensure(this._url, endpoint);\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets a parent for this instance as specified\r\n     *\r\n     * @param factory The contructor for the class to create\r\n     */\r\n    GraphQueryable.prototype.getParent = function (factory, baseUrl, path) {\r\n        if (baseUrl === void 0) { baseUrl = this.parentUrl; }\r\n        return new factory(baseUrl, path);\r\n    };\r\n    /**\r\n     * Clones this queryable into a new queryable instance of T\r\n     * @param factory Constructor used to create the new instance\r\n     * @param additionalPath Any additional path to include in the clone\r\n     * @param includeBatch If true this instance's batch will be added to the cloned instance\r\n     */\r\n    GraphQueryable.prototype.clone = function (factory, additionalPath, includeBatch) {\r\n        if (includeBatch === void 0) { includeBatch = true; }\r\n        return _super.prototype._clone.call(this, new factory(this, additionalPath), { includeBatch: includeBatch });\r\n    };\r\n    /**\r\n     * Converts the current instance to a request context\r\n     *\r\n     * @param verb The request verb\r\n     * @param options The set of supplied request options\r\n     * @param parser The supplied ODataParser instance\r\n     * @param pipeline Optional request processing pipeline\r\n     */\r\n    GraphQueryable.prototype.toRequestContext = function (verb, options, parser, pipeline) {\r\n        if (options === void 0) { options = {}; }\r\n        var dependencyDispose = this.hasBatch ? this._batchDependency : function () { return; };\r\n        return Promise.resolve({\r\n            batch: this.batch,\r\n            batchDependency: dependencyDispose,\r\n            cachingOptions: this._cachingOptions,\r\n            clientFactory: function () { return new GraphHttpClient(); },\r\n            isBatched: this.hasBatch,\r\n            isCached: /^get$/i.test(verb) && this._useCaching,\r\n            options: options,\r\n            parser: parser,\r\n            pipeline: pipeline,\r\n            requestAbsoluteUrl: this.toUrlAndQuery(),\r\n            requestId: getGUID(),\r\n            verb: verb,\r\n        });\r\n    };\r\n    return GraphQueryable;\r\n}(ODataQueryable));\r\nexport { GraphQueryable };\r\n/**\r\n * Represents a REST collection which can be filtered, paged, and selected\r\n *\r\n */\r\nvar GraphQueryableCollection = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphQueryableCollection, _super);\r\n    function GraphQueryableCollection() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     *\r\n     * @param filter The string representing the filter query\r\n     */\r\n    GraphQueryableCollection.prototype.filter = function (filter) {\r\n        this.query.set(\""$filter\"", filter);\r\n        return this;\r\n    };\r\n    /**\r\n     * Orders based on the supplied fields\r\n     *\r\n     * @param orderby The name of the field on which to sort\r\n     * @param ascending If false DESC is appended, otherwise ASC (default)\r\n     */\r\n    GraphQueryableCollection.prototype.orderBy = function (orderBy, ascending) {\r\n        if (ascending === void 0) { ascending = true; }\r\n        var o = \""$orderby\"";\r\n        var query = this.query.has(o) ? this.query.get(o).split(\"",\"") : [];\r\n        query.push(orderBy + \"" \"" + (ascending ? \""asc\"" : \""desc\""));\r\n        this.query.set(o, query.join(\"",\""));\r\n        return this;\r\n    };\r\n    /**\r\n     * Limits the query to only return the specified number of items\r\n     *\r\n     * @param top The query row limit\r\n     */\r\n    GraphQueryableCollection.prototype.top = function (top) {\r\n        this.query.set(\""$top\"", top.toString());\r\n        return this;\r\n    };\r\n    /**\r\n     * Skips a set number of items in the return set\r\n     *\r\n     * @param num Number of items to skip\r\n     */\r\n    GraphQueryableCollection.prototype.skip = function (num) {\r\n        this.query.set(\""$skip\"", num.toString());\r\n        return this;\r\n    };\r\n    /**\r\n     * \tTo request second and subsequent pages of Graph data\r\n     */\r\n    GraphQueryableCollection.prototype.skipToken = function (token) {\r\n        this.query.set(\""$skiptoken\"", token);\r\n        return this;\r\n    };\r\n    Object.defineProperty(GraphQueryableCollection.prototype, \""count\"", {\r\n        /**\r\n         * \tRetrieves the total count of matching resources\r\n         */\r\n        get: function () {\r\n            this.query.set(\""$count\"", \""true\"");\r\n            return this;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return GraphQueryableCollection;\r\n}(GraphQueryable));\r\nexport { GraphQueryableCollection };\r\nvar GraphQueryableSearchableCollection = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphQueryableSearchableCollection, _super);\r\n    function GraphQueryableSearchableCollection() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * \tTo request second and subsequent pages of Graph data\r\n     */\r\n    GraphQueryableSearchableCollection.prototype.search = function (query) {\r\n        this.query.set(\""$search\"", query);\r\n        return this;\r\n    };\r\n    return GraphQueryableSearchableCollection;\r\n}(GraphQueryableCollection));\r\nexport { GraphQueryableSearchableCollection };\r\n/**\r\n * Represents an instance that can be selected\r\n *\r\n */\r\nvar GraphQueryableInstance = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphQueryableInstance, _super);\r\n    function GraphQueryableInstance() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return GraphQueryableInstance;\r\n}(GraphQueryable));\r\nexport { GraphQueryableInstance };\r\n/**\r\n * Decorator used to specify the default path for Queryable objects\r\n *\r\n * @param path\r\n */\r\nexport function defaultPath(path) {\r\n    return function (target) {\r\n        return /** @class */ (function (_super) {\r\n            tslib_1.__extends(class_1, _super);\r\n            function class_1() {\r\n                var args = [];\r\n                for (var _i = 0; _i < arguments.length; _i++) {\r\n                    args[_i] = arguments[_i];\r\n                }\r\n                return _super.call(this, args[0], args.length > 1 && args[1] !== undefined ? args[1] : path) || this;\r\n            }\r\n            return class_1;\r\n        }(target));\r\n    };\r\n}\r\n//# sourceMappingURL=graphqueryable.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nvar Members = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Members, _super);\r\n    function Members() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Members_1 = Members;\r\n    /**\r\n     * Use this API to add a member to an Office 365 group, a security group or a mail-enabled security group through\r\n     * the members navigation property. You can add users or other groups.\r\n     * Important: You can add only users to Office 365 groups.\r\n     *\r\n     * @param id Full @odata.id of the directoryObject, user, or group object you want to add (ex: https://graph.microsoft.com/v1.0/directoryObjects/${id})\r\n     */\r\n    Members.prototype.add = function (id) {\r\n        return this.clone(Members_1, \""$ref\"").postCore({\r\n            body: jsS({\r\n                \""@odata.id\"": id,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Gets a member of the group by id\r\n     *\r\n     * @param id Group member's id\r\n     */\r\n    Members.prototype.getById = function (id) {\r\n        return new Member(this, id);\r\n    };\r\n    var Members_1;\r\n    Members = Members_1 = tslib_1.__decorate([\r\n        defaultPath(\""members\"")\r\n    ], Members);\r\n    return Members;\r\n}(GraphQueryableCollection));\r\nexport { Members };\r\nvar Member = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Member, _super);\r\n    function Member() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Removes this Member\r\n     */\r\n    Member.prototype.remove = function () {\r\n        return this.clone(Member, \""$ref\"").deleteCore();\r\n    };\r\n    return Member;\r\n}(GraphQueryableInstance));\r\nexport { Member };\r\nvar Owners = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Owners, _super);\r\n    function Owners() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Owners = tslib_1.__decorate([\r\n        defaultPath(\""owners\"")\r\n    ], Owners);\r\n    return Owners;\r\n}(Members));\r\nexport { Owners };\r\n//# sourceMappingURL=members.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { Members, Owners } from \""./members\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { Calendar, Events } from \""./calendars\"";\r\nimport { Conversations, Senders } from \""./conversations\"";\r\nimport { Plans } from \""./planner\"";\r\nimport { Photo } from \""./photos\"";\r\nimport { Team } from \""./teams\"";\r\nexport var GroupType;\r\n(function (GroupType) {\r\n    /**\r\n     * Office 365 (aka unified group)\r\n     */\r\n    GroupType[GroupType[\""Office365\""] = 0] = \""Office365\"";\r\n    /**\r\n     * Dynamic membership\r\n     */\r\n    GroupType[GroupType[\""Dynamic\""] = 1] = \""Dynamic\"";\r\n    /**\r\n     * Security\r\n     */\r\n    GroupType[GroupType[\""Security\""] = 2] = \""Security\"";\r\n})(GroupType || (GroupType = {}));\r\n/**\r\n * Describes a collection of Field objects\r\n *\r\n */\r\nvar Groups = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Groups, _super);\r\n    function Groups() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a group from the collection using the specified id\r\n     *\r\n     * @param id Id of the group to get from this collection\r\n     */\r\n    Groups.prototype.getById = function (id) {\r\n        return new Group(this, id);\r\n    };\r\n    /**\r\n     * Create a new group as specified in the request body.\r\n     *\r\n     * @param name Name to display in the address book for the group\r\n     * @param mailNickname Mail alias for the group\r\n     * @param groupType Type of group being created\r\n     * @param additionalProperties A plain object collection of additional properties you want to set on the new group\r\n     */\r\n    Groups.prototype.add = function (name, mailNickname, groupType, additionalProperties) {\r\n        var _this = this;\r\n        if (additionalProperties === void 0) { additionalProperties = {}; }\r\n        var postBody = extend({\r\n            displayName: name,\r\n            mailEnabled: groupType === GroupType.Office365,\r\n            mailNickname: mailNickname,\r\n            securityEnabled: groupType !== GroupType.Office365,\r\n        }, additionalProperties);\r\n        // include a group type if required\r\n        if (groupType !== GroupType.Security) {\r\n            postBody = extend(postBody, {\r\n                groupTypes: groupType === GroupType.Office365 ? [\""Unified\""] : [\""DynamicMembership\""],\r\n            });\r\n        }\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                group: _this.getById(r.id),\r\n            };\r\n        });\r\n    };\r\n    Groups = tslib_1.__decorate([\r\n        defaultPath(\""groups\"")\r\n    ], Groups);\r\n    return Groups;\r\n}(GraphQueryableCollection));\r\nexport { Groups };\r\n/**\r\n * Represents a group entity\r\n */\r\nvar Group = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Group, _super);\r\n    function Group() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Group.prototype, \""calendar\"", {\r\n        /**\r\n         * The calendar associated with this group\r\n         */\r\n        get: function () {\r\n            return new Calendar(this, \""calendar\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""events\"", {\r\n        /**\r\n         * Retrieve a list of event objects\r\n         */\r\n        get: function () {\r\n            return new Events(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""owners\"", {\r\n        /**\r\n         * Gets the collection of owners for this group\r\n         */\r\n        get: function () {\r\n            return new Owners(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""plans\"", {\r\n        /**\r\n         * The collection of plans for this group\r\n         */\r\n        get: function () {\r\n            return new Plans(this, \""planner/plans\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""members\"", {\r\n        /**\r\n         * Gets the collection of members for this group\r\n         */\r\n        get: function () {\r\n            return new Members(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""conversations\"", {\r\n        /**\r\n         * Gets the conversations collection for this group\r\n         */\r\n        get: function () {\r\n            return new Conversations(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""acceptedSenders\"", {\r\n        /**\r\n         * Gets the collection of accepted senders for this group\r\n         */\r\n        get: function () {\r\n            return new Senders(this, \""acceptedsenders\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""rejectedSenders\"", {\r\n        /**\r\n         * Gets the collection of rejected senders for this group\r\n         */\r\n        get: function () {\r\n            return new Senders(this, \""rejectedsenders\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""photo\"", {\r\n        /**\r\n         * The photo associated with the group\r\n         */\r\n        get: function () {\r\n            return new Photo(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Group.prototype, \""team\"", {\r\n        /**\r\n         * Gets the team associated with this group, if it exists\r\n         */\r\n        get: function () {\r\n            return new Team(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Add the group to the list of the current user's favorite groups. Supported for only Office 365 groups\r\n     */\r\n    Group.prototype.addFavorite = function () {\r\n        return this.clone(Group, \""addFavorite\"").postCore();\r\n    };\r\n    /**\r\n     * Creates a Microsoft Team associated with this group\r\n     *\r\n     * @param properties Initial properties for the new Team\r\n     */\r\n    Group.prototype.createTeam = function (properties) {\r\n        return this.clone(Group, \""team\"").putCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    /**\r\n     * Returns all the groups and directory roles that the specified group is a member of. The check is transitive\r\n     *\r\n     * @param securityEnabledOnly\r\n     */\r\n    Group.prototype.getMemberObjects = function (securityEnabledOnly) {\r\n        if (securityEnabledOnly === void 0) { securityEnabledOnly = false; }\r\n        return this.clone(Group, \""getMemberObjects\"").postCore({\r\n            body: jsS({\r\n                securityEnabledOnly: securityEnabledOnly,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Return all the groups that the specified group is a member of. The check is transitive\r\n     *\r\n     * @param securityEnabledOnly\r\n     */\r\n    Group.prototype.getMemberGroups = function (securityEnabledOnly) {\r\n        if (securityEnabledOnly === void 0) { securityEnabledOnly = false; }\r\n        return this.clone(Group, \""getMemberGroups\"").postCore({\r\n            body: jsS({\r\n                securityEnabledOnly: securityEnabledOnly,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Check for membership in a specified list of groups, and returns from that list those groups of which the specified user, group, or directory object is a member.\r\n     * This function is transitive.\r\n     * @param groupIds A collection that contains the object IDs of the groups in which to check membership. Up to 20 groups may be specified.\r\n     */\r\n    Group.prototype.checkMemberGroups = function (groupIds) {\r\n        return this.clone(Group, \""checkMemberGroups\"").postCore({\r\n            body: jsS({\r\n                groupIds: groupIds,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this group\r\n     */\r\n    Group.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a group object\r\n     *\r\n     * @param properties Set of properties of this group to update\r\n     */\r\n    Group.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    /**\r\n     * Remove the group from the list of the current user's favorite groups. Supported for only Office 365 groups\r\n     */\r\n    Group.prototype.removeFavorite = function () {\r\n        return this.clone(Group, \""removeFavorite\"").postCore();\r\n    };\r\n    /**\r\n     * Reset the unseenCount of all the posts that the current user has not seen since their last visit\r\n     */\r\n    Group.prototype.resetUnseenCount = function () {\r\n        return this.clone(Group, \""resetUnseenCount\"").postCore();\r\n    };\r\n    /**\r\n     * Calling this method will enable the current user to receive email notifications for this group,\r\n     * about new posts, events, and files in that group. Supported for only Office 365 groups\r\n     */\r\n    Group.prototype.subscribeByMail = function () {\r\n        return this.clone(Group, \""subscribeByMail\"").postCore();\r\n    };\r\n    /**\r\n     * Calling this method will prevent the current user from receiving email notifications for this group\r\n     * about new posts, events, and files in that group. Supported for only Office 365 groups\r\n     */\r\n    Group.prototype.unsubscribeByMail = function () {\r\n        return this.clone(Group, \""unsubscribeByMail\"").postCore();\r\n    };\r\n    /**\r\n     * Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, from the default calendar of a group\r\n     *\r\n     * @param start Start date and time of the time range\r\n     * @param end End date and time of the time range\r\n     */\r\n    Group.prototype.getCalendarView = function (start, end) {\r\n        var view = this.clone(Group, \""calendarView\"");\r\n        view.query.set(\""startDateTime\"", start.toISOString());\r\n        view.query.set(\""endDateTime\"", end.toISOString());\r\n        return view.get();\r\n    };\r\n    return Group;\r\n}(GraphQueryableInstance));\r\nexport { Group };\r\n//# sourceMappingURL=groups.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\n// import { Attachments } from \""./attachments\"";\r\nvar Calendars = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Calendars, _super);\r\n    function Calendars() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Calendars = tslib_1.__decorate([\r\n        defaultPath(\""calendars\"")\r\n    ], Calendars);\r\n    return Calendars;\r\n}(GraphQueryableCollection));\r\nexport { Calendars };\r\nvar Calendar = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Calendar, _super);\r\n    function Calendar() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Calendar.prototype, \""events\"", {\r\n        get: function () {\r\n            return new Events(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Calendar;\r\n}(GraphQueryableInstance));\r\nexport { Calendar };\r\nvar Events = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Events, _super);\r\n    function Events() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Events.prototype.getById = function (id) {\r\n        return new Event(this, id);\r\n    };\r\n    /**\r\n     * Adds a new event to the collection\r\n     *\r\n     * @param properties The set of properties used to create the event\r\n     */\r\n    Events.prototype.add = function (properties) {\r\n        var _this = this;\r\n        return this.postCore({\r\n            body: jsS(properties),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                event: _this.getById(r.id),\r\n            };\r\n        });\r\n    };\r\n    Events = tslib_1.__decorate([\r\n        defaultPath(\""events\"")\r\n    ], Events);\r\n    return Events;\r\n}(GraphQueryableCollection));\r\nexport { Events };\r\nvar Event = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Event, _super);\r\n    function Event() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // TODO:: when supported\r\n    // /**\r\n    //  * Gets the collection of attachments for this event\r\n    //  */\r\n    // public get attachments(): Attachments {\r\n    //     return new Attachments(this);\r\n    // }\r\n    /**\r\n     * Update the properties of an event object\r\n     *\r\n     * @param properties Set of properties of this event to update\r\n     */\r\n    Event.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this event\r\n     */\r\n    Event.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    return Event;\r\n}(GraphQueryableInstance));\r\nexport { Event };\r\n//# sourceMappingURL=calendars.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nvar Attachments = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Attachments, _super);\r\n    function Attachments() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a member of the group by id\r\n     *\r\n     * @param id Attachment id\r\n     */\r\n    Attachments.prototype.getById = function (id) {\r\n        return new Attachment(this, id);\r\n    };\r\n    /**\r\n     * Add attachment to this collection\r\n     *\r\n     * @param name Name given to the attachment file\r\n     * @param bytes File content\r\n     */\r\n    Attachments.prototype.addFile = function (name, bytes) {\r\n        return this.postCore({\r\n            body: jsS({\r\n                \""@odata.type\"": \""#microsoft.graph.fileAttachment\"",\r\n                contentBytes: bytes,\r\n                name: name,\r\n            }),\r\n        });\r\n    };\r\n    Attachments = tslib_1.__decorate([\r\n        defaultPath(\""attachments\"")\r\n    ], Attachments);\r\n    return Attachments;\r\n}(GraphQueryableCollection));\r\nexport { Attachments };\r\nvar Attachment = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Attachment, _super);\r\n    function Attachment() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Attachment;\r\n}(GraphQueryableInstance));\r\nexport { Attachment };\r\n//# sourceMappingURL=attachments.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nimport { Attachments } from \""./attachments\"";\r\nvar Conversations = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Conversations, _super);\r\n    function Conversations() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Create a new conversation by including a thread and a post.\r\n     *\r\n     * @param properties Properties used to create the new conversation\r\n     */\r\n    Conversations.prototype.add = function (properties) {\r\n        return this.postCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    /**\r\n     * Gets a conversation from this collection by id\r\n     *\r\n     * @param id Group member's id\r\n     */\r\n    Conversations.prototype.getById = function (id) {\r\n        return new Conversation(this, id);\r\n    };\r\n    Conversations = tslib_1.__decorate([\r\n        defaultPath(\""conversations\"")\r\n    ], Conversations);\r\n    return Conversations;\r\n}(GraphQueryableCollection));\r\nexport { Conversations };\r\nvar Threads = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Threads, _super);\r\n    function Threads() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a thread from this collection by id\r\n     *\r\n     * @param id Group member's id\r\n     */\r\n    Threads.prototype.getById = function (id) {\r\n        return new Thread(this, id);\r\n    };\r\n    /**\r\n     * Adds a new thread to this collection\r\n     *\r\n     * @param properties properties used to create the new thread\r\n     * @returns Id of the new thread\r\n     */\r\n    Threads.prototype.add = function (properties) {\r\n        return this.postCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    Threads = tslib_1.__decorate([\r\n        defaultPath(\""threads\"")\r\n    ], Threads);\r\n    return Threads;\r\n}(GraphQueryableCollection));\r\nexport { Threads };\r\nvar Posts = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Posts, _super);\r\n    function Posts() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a thread from this collection by id\r\n     *\r\n     * @param id Group member's id\r\n     */\r\n    Posts.prototype.getById = function (id) {\r\n        return new Post(this, id);\r\n    };\r\n    /**\r\n     * Adds a new thread to this collection\r\n     *\r\n     * @param properties properties used to create the new thread\r\n     * @returns Id of the new thread\r\n     */\r\n    Posts.prototype.add = function (properties) {\r\n        return this.postCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    Posts = tslib_1.__decorate([\r\n        defaultPath(\""posts\"")\r\n    ], Posts);\r\n    return Posts;\r\n}(GraphQueryableCollection));\r\nexport { Posts };\r\nvar Conversation = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Conversation, _super);\r\n    function Conversation() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Conversation.prototype, \""threads\"", {\r\n        /**\r\n         * Get all the threads in a group conversation.\r\n         */\r\n        get: function () {\r\n            return new Threads(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Updates this conversation\r\n     */\r\n    Conversation.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this member from the group\r\n     */\r\n    Conversation.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    return Conversation;\r\n}(GraphQueryableInstance));\r\nexport { Conversation };\r\nvar Thread = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Thread, _super);\r\n    function Thread() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Thread.prototype, \""posts\"", {\r\n        /**\r\n         * Get all the threads in a group conversation.\r\n         */\r\n        get: function () {\r\n            return new Posts(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Reply to a thread in a group conversation and add a new post to it\r\n     *\r\n     * @param post Contents of the post\r\n     */\r\n    Thread.prototype.reply = function (post) {\r\n        return this.clone(Thread, \""reply\"").postCore({\r\n            body: jsS({\r\n                post: post,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this member from the group\r\n     */\r\n    Thread.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    return Thread;\r\n}(GraphQueryableInstance));\r\nexport { Thread };\r\nvar Post = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Post, _super);\r\n    function Post() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Post.prototype, \""attachments\"", {\r\n        get: function () {\r\n            return new Attachments(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Deletes this post\r\n     */\r\n    Post.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Forward a post to a recipient\r\n     */\r\n    Post.prototype.forward = function (info) {\r\n        return this.clone(Post, \""forward\"").postCore({\r\n            body: jsS(info),\r\n        });\r\n    };\r\n    /**\r\n     * Reply to a thread in a group conversation and add a new post to it\r\n     *\r\n     * @param post Contents of the post\r\n     */\r\n    Post.prototype.reply = function (post) {\r\n        return this.clone(Post, \""reply\"").postCore({\r\n            body: jsS({\r\n                post: post,\r\n            }),\r\n        });\r\n    };\r\n    return Post;\r\n}(GraphQueryableInstance));\r\nexport { Post };\r\nvar Senders = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Senders, _super);\r\n    function Senders(baseUrl, path) {\r\n        return _super.call(this, baseUrl, path) || this;\r\n    }\r\n    /**\r\n     * Add a new user or group to this senders collection\r\n     * @param id The full @odata.id value to add (ex: https://graph.microsoft.com/v1.0/users/user@contoso.com)\r\n     */\r\n    Senders.prototype.add = function (id) {\r\n        return this.clone(Senders, \""$ref\"").postCore({\r\n            body: jsS({\r\n                \""@odata.id\"": id,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Removes the entity from the collection\r\n     *\r\n     * @param id The full @odata.id value to remove (ex: https://graph.microsoft.com/v1.0/users/user@contoso.com)\r\n     */\r\n    Senders.prototype.remove = function (id) {\r\n        var remover = this.clone(Senders, \""$ref\"");\r\n        remover.query.set(\""$id\"", id);\r\n        return remover.deleteCore();\r\n    };\r\n    return Senders;\r\n}(GraphQueryableCollection));\r\nexport { Senders };\r\n//# sourceMappingURL=conversations.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nvar Planner = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Planner, _super);\r\n    function Planner() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Planner.prototype, \""plans\"", {\r\n        // Should Only be able to get by id, or else error occur\r\n        get: function () {\r\n            return new Plans(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Planner.prototype, \""tasks\"", {\r\n        // Should Only be able to get by id, or else error occur\r\n        get: function () {\r\n            return new Tasks(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Planner.prototype, \""buckets\"", {\r\n        // Should Only be able to get by id, or else error occur\r\n        get: function () {\r\n            return new Buckets(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Planner = tslib_1.__decorate([\r\n        defaultPath(\""planner\"")\r\n    ], Planner);\r\n    return Planner;\r\n}(GraphQueryableInstance));\r\nexport { Planner };\r\nvar Plans = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Plans, _super);\r\n    function Plans() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Plans.prototype.getById = function (id) {\r\n        return new Plan(this, id);\r\n    };\r\n    /**\r\n     * Create a new Planner Plan.\r\n     *\r\n     * @param owner Id of Group object.\r\n     * @param title The Title of the Plan.\r\n     */\r\n    Plans.prototype.add = function (owner, title) {\r\n        var _this = this;\r\n        var postBody = {\r\n            owner: owner,\r\n            title: title,\r\n        };\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                plan: _this.getById(r.id),\r\n            };\r\n        });\r\n    };\r\n    Plans = tslib_1.__decorate([\r\n        defaultPath(\""plans\"")\r\n    ], Plans);\r\n    return Plans;\r\n}(GraphQueryableCollection));\r\nexport { Plans };\r\n/**\r\n * Should not be able to get by Id\r\n */\r\nvar Plan = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Plan, _super);\r\n    function Plan() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Plan.prototype, \""tasks\"", {\r\n        get: function () {\r\n            return new Tasks(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Plan.prototype, \""buckets\"", {\r\n        get: function () {\r\n            return new Buckets(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Plan.prototype, \""details\"", {\r\n        get: function () {\r\n            return new Details(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Deletes this Plan\r\n     */\r\n    Plan.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a Plan\r\n     *\r\n     * @param properties Set of properties of this Plan to update\r\n     */\r\n    Plan.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    return Plan;\r\n}(GraphQueryableInstance));\r\nexport { Plan };\r\nvar Tasks = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Tasks, _super);\r\n    function Tasks() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Tasks.prototype.getById = function (id) {\r\n        return new Task(this, id);\r\n    };\r\n    /**\r\n     * Create a new Planner Task.\r\n     *\r\n     * @param planId Id of Plan.\r\n     * @param title The Title of the Task.\r\n     * @param assignments Assign the task\r\n     * @param bucketId Id of Bucket\r\n     */\r\n    Tasks.prototype.add = function (planId, title, assignments, bucketId) {\r\n        var _this = this;\r\n        var postBody = extend({\r\n            planId: planId,\r\n            title: title,\r\n        }, assignments);\r\n        if (bucketId) {\r\n            postBody = extend(postBody, {\r\n                bucketId: bucketId,\r\n            });\r\n        }\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                task: _this.getById(r.id),\r\n            };\r\n        });\r\n    };\r\n    Tasks = tslib_1.__decorate([\r\n        defaultPath(\""tasks\"")\r\n    ], Tasks);\r\n    return Tasks;\r\n}(GraphQueryableCollection));\r\nexport { Tasks };\r\nvar Task = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Task, _super);\r\n    function Task() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Deletes this Task\r\n     */\r\n    Task.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a Task\r\n     *\r\n     * @param properties Set of properties of this Task to update\r\n     */\r\n    Task.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    Object.defineProperty(Task.prototype, \""details\"", {\r\n        get: function () {\r\n            return new Details(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Task;\r\n}(GraphQueryableInstance));\r\nexport { Task };\r\nvar Buckets = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Buckets, _super);\r\n    function Buckets() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Create a new Bucket.\r\n     *\r\n     * @param name Name of Bucket object.\r\n     * @param planId The Id of the Plan.\r\n     * @param oderHint Hint used to order items of this type in a list view.\r\n     */\r\n    Buckets.prototype.add = function (name, planId, orderHint) {\r\n        var _this = this;\r\n        var postBody = {\r\n            name: name,\r\n            orderHint: orderHint ? orderHint : \""\"",\r\n            planId: planId,\r\n        };\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                bucket: _this.getById(r.id),\r\n                data: r,\r\n            };\r\n        });\r\n    };\r\n    Buckets.prototype.getById = function (id) {\r\n        return new Bucket(this, id);\r\n    };\r\n    Buckets = tslib_1.__decorate([\r\n        defaultPath(\""buckets\"")\r\n    ], Buckets);\r\n    return Buckets;\r\n}(GraphQueryableCollection));\r\nexport { Buckets };\r\nvar Bucket = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bucket, _super);\r\n    function Bucket() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Deletes this Bucket\r\n     */\r\n    Bucket.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a Bucket\r\n     *\r\n     * @param properties Set of properties of this Bucket to update\r\n     */\r\n    Bucket.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    Object.defineProperty(Bucket.prototype, \""tasks\"", {\r\n        get: function () {\r\n            return new Tasks(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Bucket;\r\n}(GraphQueryableInstance));\r\nexport { Bucket };\r\nvar Details = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Details, _super);\r\n    function Details() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Details = tslib_1.__decorate([\r\n        defaultPath(\""details\"")\r\n    ], Details);\r\n    return Details;\r\n}(GraphQueryableCollection));\r\nexport { Details };\r\n//# sourceMappingURL=planner.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, defaultPath } from \""./graphqueryable\"";\r\nimport { BlobParser, BufferParser } from \""@pnp/odata\"";\r\nvar Photo = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Photo, _super);\r\n    function Photo() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Photo_1 = Photo;\r\n    /**\r\n     * Gets the image bytes as a blob (browser)\r\n     */\r\n    Photo.prototype.getBlob = function () {\r\n        return this.clone(Photo_1, \""$value\"", false).get(new BlobParser());\r\n    };\r\n    /**\r\n     * Gets the image file byets as a Buffer (node.js)\r\n     */\r\n    Photo.prototype.getBuffer = function () {\r\n        return this.clone(Photo_1, \""$value\"", false).get(new BufferParser());\r\n    };\r\n    /**\r\n     * Sets the file bytes\r\n     *\r\n     * @param content Image file contents, max 4 MB\r\n     */\r\n    Photo.prototype.setContent = function (content) {\r\n        return this.clone(Photo_1, \""$value\"", false).patchCore({\r\n            body: content,\r\n        });\r\n    };\r\n    var Photo_1;\r\n    Photo = Photo_1 = tslib_1.__decorate([\r\n        defaultPath(\""photo\"")\r\n    ], Photo);\r\n    return Photo;\r\n}(GraphQueryableInstance));\r\nexport { Photo };\r\n//# sourceMappingURL=photos.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { graph } from \""./rest\"";\r\nimport { GroupType } from \""./groups\"";\r\nimport { GraphQueryableInstance, defaultPath, GraphQueryableCollection } from \""./graphqueryable\"";\r\nimport { ODataDefaultParser } from \""@pnp/odata\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nvar Teams = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Teams, _super);\r\n    function Teams() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Creates a new team and associated Group with the given information\r\n     * @param name The name of the new Group\r\n     * @param description Optional description of the group\r\n     * @param ownerId Add an owner with a user id from the graph\r\n     */\r\n    Teams.prototype.create = function (name, description, ownerId, teamProperties) {\r\n        if (description === void 0) { description = \""\""; }\r\n        if (teamProperties === void 0) { teamProperties = {}; }\r\n        var groupProps = {\r\n            \""description\"": description && description.length > 0 ? description : \""\"",\r\n            \""owners@odata.bind\"": [\r\n                \""https://graph.microsoft.com/v1.0/users/\"" + ownerId,\r\n            ],\r\n        };\r\n        return graph.groups.add(name, name, GroupType.Office365, groupProps).then(function (gar) {\r\n            return gar.group.createTeam(teamProperties).then(function (data) {\r\n                return {\r\n                    data: data,\r\n                    group: gar.group,\r\n                    team: new Team(gar.group),\r\n                };\r\n            });\r\n        });\r\n    };\r\n    Teams.prototype.getById = function (id) {\r\n        return new Team(this, id);\r\n    };\r\n    Teams = tslib_1.__decorate([\r\n        defaultPath(\""teams\"")\r\n    ], Teams);\r\n    return Teams;\r\n}(GraphQueryableCollection));\r\nexport { Teams };\r\n/**\r\n * Represents a Microsoft Team\r\n */\r\nvar Team = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Team, _super);\r\n    function Team() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Team_1 = Team;\r\n    Object.defineProperty(Team.prototype, \""channels\"", {\r\n        get: function () {\r\n            return new Channels(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Team.prototype, \""installedApps\"", {\r\n        get: function () {\r\n            return new Apps(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Updates this team instance's properties\r\n     *\r\n     * @param properties The set of properties to update\r\n     */\r\n    // TODO:: update properties to be typed once type is available in graph-types\r\n    Team.prototype.update = function (properties) {\r\n        var _this = this;\r\n        return this.clone(Team_1, \""\"").patchCore({\r\n            body: jsS(properties),\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                team: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Archives this Team\r\n     *\r\n     * @param shouldSetSpoSiteReadOnlyForMembers Should members have Read-only in associated Team Site\r\n     */\r\n    // TODO:: update properties to be typed once type is available in graph-types\r\n    Team.prototype.archive = function (shouldSetSpoSiteReadOnlyForMembers) {\r\n        var _this = this;\r\n        var postBody;\r\n        if (shouldSetSpoSiteReadOnlyForMembers != null) {\r\n            postBody = extend(postBody, {\r\n                shouldSetSpoSiteReadOnlyForMembers: shouldSetSpoSiteReadOnlyForMembers,\r\n            });\r\n        }\r\n        return this.clone(Team_1, \""archive\"").postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                team: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n    * Unarchives this Team\r\n    *\r\n    */\r\n    // TODO:: update properties to be typed once type is available in graph-types\r\n    Team.prototype.unarchive = function () {\r\n        var _this = this;\r\n        return this.clone(Team_1, \""unarchive\"").postCore({}).then(function (data) {\r\n            return {\r\n                data: data,\r\n                team: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Clones this Team\r\n     * @param name The name of the new Group\r\n     * @param description Optional description of the group\r\n     * @param partsToClone Parts to clone ex: apps,tabs,settings,channels,members\r\n     * @param visibility Set visibility to public or private\r\n     */\r\n    // TODO:: update properties to be typed once type is available in graph-types\r\n    Team.prototype.cloneTeam = function (name, description, partsToClone, visibility) {\r\n        var _this = this;\r\n        if (description === void 0) { description = \""\""; }\r\n        var postBody = {\r\n            description: description ? description : \""\"",\r\n            displayName: name,\r\n            mailNickname: name,\r\n            partsToClone: partsToClone,\r\n            visibility: visibility,\r\n        };\r\n        return this.clone(Team_1, \""clone\"").postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                team: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Executes the currently built request\r\n     *\r\n     * @param parser Allows you to specify a parser to handle the result\r\n     * @param getOptions The options used for this request\r\n     */\r\n    Team.prototype.get = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return this.clone(Team_1, \""\"").getCore(parser, options);\r\n    };\r\n    var Team_1;\r\n    Team = Team_1 = tslib_1.__decorate([\r\n        defaultPath(\""team\"")\r\n    ], Team);\r\n    return Team;\r\n}(GraphQueryableInstance));\r\nexport { Team };\r\nvar Channels = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Channels, _super);\r\n    function Channels() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Creates a new Channel in the Team\r\n     * @param name The display name of the new channel\r\n     * @param description Optional description of the channel\r\n     *\r\n     */\r\n    Channels.prototype.create = function (name, description) {\r\n        var _this = this;\r\n        if (description === void 0) { description = \""\""; }\r\n        var postBody = {\r\n            description: description && description.length > 0 ? description : \""\"",\r\n            displayName: name,\r\n        };\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                channel: _this.getById(r.id),\r\n                data: r,\r\n            };\r\n        });\r\n    };\r\n    Channels.prototype.getById = function (id) {\r\n        return new Channel(this, id);\r\n    };\r\n    Channels = tslib_1.__decorate([\r\n        defaultPath(\""channels\"")\r\n    ], Channels);\r\n    return Channels;\r\n}(GraphQueryableCollection));\r\nexport { Channels };\r\nvar Channel = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Channel, _super);\r\n    function Channel() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Channel.prototype, \""tabs\"", {\r\n        get: function () {\r\n            return new Tabs(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Channel;\r\n}(GraphQueryableInstance));\r\nexport { Channel };\r\nvar Apps = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Apps, _super);\r\n    function Apps() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Creates a new App in the Team\r\n     * @param appUrl The url to an app ex: https://graph.microsoft.com/beta/appCatalogs/teamsApps/12345678-9abc-def0-123456789a\r\n     *\r\n     */\r\n    Apps.prototype.add = function (appUrl) {\r\n        var postBody = {\r\n            \""teamsApp@odata.bind\"": appUrl,\r\n        };\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this app\r\n     */\r\n    Apps.prototype.remove = function () {\r\n        return this.deleteCore();\r\n    };\r\n    Apps = tslib_1.__decorate([\r\n        defaultPath(\""installedApps\"")\r\n    ], Apps);\r\n    return Apps;\r\n}(GraphQueryableCollection));\r\nexport { Apps };\r\nvar Tabs = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Tabs, _super);\r\n    function Tabs() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Adds a tab to the cahnnel\r\n     * @param name The name of the new Tab\r\n     * @param appUrl The url to an app ex: https://graph.microsoft.com/beta/appCatalogs/teamsApps/12345678-9abc-def0-123456789a\r\n     * @param tabsConfiguration visit https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/teamstab_add for reference\r\n     */\r\n    Tabs.prototype.add = function (name, appUrl, properties) {\r\n        var _this = this;\r\n        var postBody = extend({\r\n            name: name,\r\n            \""teamsApp@odata.bind\"": appUrl,\r\n        }, properties);\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                tab: _this.getById(r.id),\r\n            };\r\n        });\r\n    };\r\n    Tabs.prototype.getById = function (id) {\r\n        return new Tab(this, id);\r\n    };\r\n    Tabs = tslib_1.__decorate([\r\n        defaultPath(\""tabs\"")\r\n    ], Tabs);\r\n    return Tabs;\r\n}(GraphQueryableCollection));\r\nexport { Tabs };\r\n/**\r\n * Represents a Microsoft Team\r\n */\r\nvar Tab = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Tab, _super);\r\n    function Tab() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Tab_1 = Tab;\r\n    /**\r\n     * Updates this tab\r\n     *\r\n     * @param properties The set of properties to update\r\n     */\r\n    // TODO:: update properties to be typed once type is available in graph-types\r\n    Tab.prototype.update = function (properties) {\r\n        var _this = this;\r\n        return this.clone(Tab_1, \""\"").patchCore({\r\n            body: jsS(properties),\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                tab: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this tab\r\n     */\r\n    Tab.prototype.remove = function () {\r\n        return this.deleteCore();\r\n    };\r\n    var Tab_1;\r\n    Tab = Tab_1 = tslib_1.__decorate([\r\n        defaultPath(\""tab\"")\r\n    ], Tab);\r\n    return Tab;\r\n}(GraphQueryableInstance));\r\nexport { Tab };\r\n//# sourceMappingURL=teams.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nexport var DirectoryObjectType;\r\n(function (DirectoryObjectType) {\r\n    /**\r\n     * Directory Objects\r\n     */\r\n    DirectoryObjectType[DirectoryObjectType[\""directoryObject\""] = 0] = \""directoryObject\"";\r\n    /**\r\n     * User\r\n     */\r\n    DirectoryObjectType[DirectoryObjectType[\""user\""] = 1] = \""user\"";\r\n    /**\r\n     * Group\r\n     */\r\n    DirectoryObjectType[DirectoryObjectType[\""group\""] = 2] = \""group\"";\r\n    /**\r\n     * Device\r\n     */\r\n    DirectoryObjectType[DirectoryObjectType[\""device\""] = 3] = \""device\"";\r\n})(DirectoryObjectType || (DirectoryObjectType = {}));\r\n/**\r\n * Describes a collection of Directory Objects\r\n *\r\n */\r\nvar DirectoryObjects = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DirectoryObjects, _super);\r\n    function DirectoryObjects() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    DirectoryObjects_1 = DirectoryObjects;\r\n    /**\r\n     * Gets a directoryObject from the collection using the specified id\r\n     *\r\n     * @param id Id of the Directory Object to get from this collection\r\n     */\r\n    DirectoryObjects.prototype.getById = function (id) {\r\n        return new DirectoryObject(this, id);\r\n    };\r\n    /**\r\n    * Returns the directory objects specified in a list of ids. NOTE: The directory objects returned are the full objects containing all their properties.\r\n    * The $select query option is not available for this operation.\r\n    *\r\n    * @param ids A collection of ids for which to return objects. You can specify up to 1000 ids.\r\n    * @param type A collection of resource types that specifies the set of resource collections to search. Default is directoryObject.\r\n    */\r\n    DirectoryObjects.prototype.getByIds = function (ids, type) {\r\n        if (type === void 0) { type = DirectoryObjectType.directoryObject; }\r\n        return this.clone(DirectoryObjects_1, \""getByIds\"").postCore({\r\n            body: jsS({\r\n                ids: ids,\r\n                type: type,\r\n            }),\r\n        });\r\n    };\r\n    var DirectoryObjects_1;\r\n    DirectoryObjects = DirectoryObjects_1 = tslib_1.__decorate([\r\n        defaultPath(\""directoryObjects\"")\r\n    ], DirectoryObjects);\r\n    return DirectoryObjects;\r\n}(GraphQueryableCollection));\r\nexport { DirectoryObjects };\r\n/**\r\n * Represents a Directory Object entity\r\n */\r\nvar DirectoryObject = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DirectoryObject, _super);\r\n    function DirectoryObject() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Deletes this group\r\n     */\r\n    DirectoryObject.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Returns all the groups and directory roles that the specified Directory Object is a member of. The check is transitive\r\n     *\r\n     * @param securityEnabledOnly\r\n     */\r\n    DirectoryObject.prototype.getMemberObjects = function (securityEnabledOnly) {\r\n        if (securityEnabledOnly === void 0) { securityEnabledOnly = false; }\r\n        return this.clone(DirectoryObject, \""getMemberObjects\"").postCore({\r\n            body: jsS({\r\n                securityEnabledOnly: securityEnabledOnly,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Returns all the groups that the specified Directory Object is a member of. The check is transitive\r\n     *\r\n     * @param securityEnabledOnly\r\n     */\r\n    DirectoryObject.prototype.getMemberGroups = function (securityEnabledOnly) {\r\n        if (securityEnabledOnly === void 0) { securityEnabledOnly = false; }\r\n        return this.clone(DirectoryObject, \""getMemberGroups\"").postCore({\r\n            body: jsS({\r\n                securityEnabledOnly: securityEnabledOnly,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Check for membership in a specified list of groups, and returns from that list those groups of which the specified user, group, or directory object is a member.\r\n     * This function is transitive.\r\n     * @param groupIds A collection that contains the object IDs of the groups in which to check membership. Up to 20 groups may be specified.\r\n     */\r\n    DirectoryObject.prototype.checkMemberGroups = function (groupIds) {\r\n        return this.clone(DirectoryObject, \""checkMemberGroups\"").postCore({\r\n            body: jsS({\r\n                groupIds: groupIds,\r\n            }),\r\n        });\r\n    };\r\n    return DirectoryObject;\r\n}(GraphQueryableInstance));\r\nexport { DirectoryObject };\r\n//# sourceMappingURL=directoryobjects.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nvar Contacts = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Contacts, _super);\r\n    function Contacts() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Contacts.prototype.getById = function (id) {\r\n        return new Contact(this, id);\r\n    };\r\n    /**\r\n    * Create a new Contact for the user.\r\n    *\r\n    * @param givenName The contact's given name.\r\n    * @param surName The contact's surname.\r\n    * @param emailAddresses The contact's email addresses.\r\n    * @param businessPhones The contact's business phone numbers.\r\n    * @param additionalProperties A plain object collection of additional properties you want to set on the new contact\r\n    */\r\n    Contacts.prototype.add = function (givenName, surName, emailAddresses, businessPhones, additionalProperties) {\r\n        var _this = this;\r\n        if (additionalProperties === void 0) { additionalProperties = {}; }\r\n        var postBody = extend({\r\n            businessPhones: businessPhones,\r\n            emailAddresses: emailAddresses,\r\n            givenName: givenName,\r\n            surName: surName,\r\n        }, additionalProperties);\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                contact: _this.getById(r.id),\r\n                data: r,\r\n            };\r\n        });\r\n    };\r\n    Contacts = tslib_1.__decorate([\r\n        defaultPath(\""contacts\"")\r\n    ], Contacts);\r\n    return Contacts;\r\n}(GraphQueryableCollection));\r\nexport { Contacts };\r\nvar Contact = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Contact, _super);\r\n    function Contact() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Deletes this contact\r\n     */\r\n    Contact.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a contact object\r\n     *\r\n     * @param properties Set of properties of this contact to update\r\n     */\r\n    Contact.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    return Contact;\r\n}(GraphQueryableInstance));\r\nexport { Contact };\r\nvar ContactFolders = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ContactFolders, _super);\r\n    function ContactFolders() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ContactFolders.prototype.getById = function (id) {\r\n        return new ContactFolder(this, id);\r\n    };\r\n    /**\r\n     * Create a new Contact Folder for the user.\r\n     *\r\n     * @param displayName The folder's display name.\r\n     * @param parentFolderId The ID of the folder's parent folder.\r\n     */\r\n    ContactFolders.prototype.add = function (displayName, parentFolderId) {\r\n        var _this = this;\r\n        var postBody = {\r\n            displayName: displayName,\r\n            parentFolderId: parentFolderId,\r\n        };\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                contactFolder: _this.getById(r.id),\r\n                data: r,\r\n            };\r\n        });\r\n    };\r\n    ContactFolders = tslib_1.__decorate([\r\n        defaultPath(\""contactFolders\"")\r\n    ], ContactFolders);\r\n    return ContactFolders;\r\n}(GraphQueryableCollection));\r\nexport { ContactFolders };\r\nvar ContactFolder = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ContactFolder, _super);\r\n    function ContactFolder() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(ContactFolder.prototype, \""contacts\"", {\r\n        /**\r\n         * Gets the contacts in this contact folder\r\n         */\r\n        get: function () {\r\n            return new Contacts(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ContactFolder.prototype, \""childFolders\"", {\r\n        /**\r\n        * Gets the contacts in this contact folder\r\n        */\r\n        get: function () {\r\n            return new ContactFolders(this, \""childFolders\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Deletes this contact folder\r\n     */\r\n    ContactFolder.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a contact folder\r\n     *\r\n     * @param properties Set of properties of this contact folder to update\r\n     */\r\n    ContactFolder.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    return ContactFolder;\r\n}(GraphQueryableInstance));\r\nexport { ContactFolder };\r\n//# sourceMappingURL=contacts.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\n/**\r\n * Represents a onenote entity\r\n */\r\nvar OneNote = /** @class */ (function (_super) {\r\n    tslib_1.__extends(OneNote, _super);\r\n    function OneNote() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(OneNote.prototype, \""notebooks\"", {\r\n        get: function () {\r\n            return new Notebooks(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(OneNote.prototype, \""sections\"", {\r\n        get: function () {\r\n            return new Sections(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(OneNote.prototype, \""pages\"", {\r\n        get: function () {\r\n            return new Pages(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    OneNote = tslib_1.__decorate([\r\n        defaultPath(\""onenote\"")\r\n    ], OneNote);\r\n    return OneNote;\r\n}(GraphQueryableInstance));\r\nexport { OneNote };\r\n/**\r\n * Describes a collection of Notebook objects\r\n *\r\n */\r\nvar Notebooks = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Notebooks, _super);\r\n    function Notebooks() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a notebook instance by id\r\n     *\r\n     * @param id Notebook id\r\n     */\r\n    Notebooks.prototype.getById = function (id) {\r\n        return new Notebook(this, id);\r\n    };\r\n    /**\r\n     * Create a new notebook as specified in the request body.\r\n     *\r\n     * @param displayName Notebook display name\r\n     */\r\n    Notebooks.prototype.add = function (displayName) {\r\n        var _this = this;\r\n        var postBody = {\r\n            displayName: displayName,\r\n        };\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                notebook: _this.getById(r.id),\r\n            };\r\n        });\r\n    };\r\n    Notebooks = tslib_1.__decorate([\r\n        defaultPath(\""notebooks\"")\r\n    ], Notebooks);\r\n    return Notebooks;\r\n}(GraphQueryableCollection));\r\nexport { Notebooks };\r\n/**\r\n * Describes a notebook instance\r\n *\r\n */\r\nvar Notebook = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Notebook, _super);\r\n    function Notebook(baseUrl, path) {\r\n        return _super.call(this, baseUrl, path) || this;\r\n    }\r\n    Object.defineProperty(Notebook.prototype, \""sections\"", {\r\n        get: function () {\r\n            return new Sections(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Notebook;\r\n}(GraphQueryableInstance));\r\nexport { Notebook };\r\n/**\r\n * Describes a collection of Sections objects\r\n *\r\n */\r\nvar Sections = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Sections, _super);\r\n    function Sections() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a section instance by id\r\n     *\r\n     * @param id Section id\r\n     */\r\n    Sections.prototype.getById = function (id) {\r\n        return new Section(this, id);\r\n    };\r\n    /**\r\n     * Adds a new section\r\n     *\r\n     * @param displayName New section display name\r\n     */\r\n    Sections.prototype.add = function (displayName) {\r\n        var _this = this;\r\n        var postBody = {\r\n            displayName: displayName,\r\n        };\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                section: _this.getById(r.id),\r\n            };\r\n        });\r\n    };\r\n    Sections = tslib_1.__decorate([\r\n        defaultPath(\""sections\"")\r\n    ], Sections);\r\n    return Sections;\r\n}(GraphQueryableCollection));\r\nexport { Sections };\r\n/**\r\n * Describes a sections instance\r\n *\r\n */\r\nvar Section = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Section, _super);\r\n    function Section(baseUrl, path) {\r\n        return _super.call(this, baseUrl, path) || this;\r\n    }\r\n    return Section;\r\n}(GraphQueryableInstance));\r\nexport { Section };\r\n/**\r\n * Describes a collection of Pages objects\r\n *\r\n */\r\nvar Pages = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Pages, _super);\r\n    function Pages() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Pages = tslib_1.__decorate([\r\n        defaultPath(\""pages\"")\r\n    ], Pages);\r\n    return Pages;\r\n}(GraphQueryableCollection));\r\nexport { Pages };\r\n//# sourceMappingURL=onenote.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\n/**\r\n * Describes a collection of Drive objects\r\n *\r\n */\r\nvar Drives = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Drives, _super);\r\n    function Drives() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a Drive instance by id\r\n     *\r\n     * @param id Drive id\r\n     */\r\n    Drives.prototype.getById = function (id) {\r\n        return new Drive(this, id);\r\n    };\r\n    Drives = tslib_1.__decorate([\r\n        defaultPath(\""drives\"")\r\n    ], Drives);\r\n    return Drives;\r\n}(GraphQueryableCollection));\r\nexport { Drives };\r\n/**\r\n * Describes a Drive instance\r\n *\r\n */\r\nvar Drive = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Drive, _super);\r\n    function Drive() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Drive.prototype, \""root\"", {\r\n        get: function () {\r\n            return new Root(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Drive.prototype, \""items\"", {\r\n        get: function () {\r\n            return new DriveItems(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Drive.prototype, \""list\"", {\r\n        get: function () {\r\n            return new DriveList(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Drive.prototype, \""recent\"", {\r\n        get: function () {\r\n            return new Recent(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Drive.prototype, \""sharedWithMe\"", {\r\n        get: function () {\r\n            return new SharedWithMe(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Drive = tslib_1.__decorate([\r\n        defaultPath(\""drive\"")\r\n    ], Drive);\r\n    return Drive;\r\n}(GraphQueryableInstance));\r\nexport { Drive };\r\n/**\r\n * Describes a Root instance\r\n *\r\n */\r\nvar Root = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Root, _super);\r\n    function Root() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Root.prototype, \""children\"", {\r\n        get: function () {\r\n            return new Children(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Root.prototype.search = function (query) {\r\n        return new DriveSearch(this, \""search(q='\"" + query + \""')\"");\r\n    };\r\n    Root = tslib_1.__decorate([\r\n        defaultPath(\""root\"")\r\n    ], Root);\r\n    return Root;\r\n}(GraphQueryableInstance));\r\nexport { Root };\r\n/**\r\n * Describes a collection of Drive Item objects\r\n *\r\n */\r\nvar DriveItems = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DriveItems, _super);\r\n    function DriveItems() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a Drive Item instance by id\r\n     *\r\n     * @param id Drive Item id\r\n     */\r\n    DriveItems.prototype.getById = function (id) {\r\n        return new DriveItem(this, id);\r\n    };\r\n    DriveItems = tslib_1.__decorate([\r\n        defaultPath(\""items\"")\r\n    ], DriveItems);\r\n    return DriveItems;\r\n}(GraphQueryableCollection));\r\nexport { DriveItems };\r\n/**\r\n * Describes a Drive Item instance\r\n *\r\n */\r\nvar DriveItem = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DriveItem, _super);\r\n    function DriveItem() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(DriveItem.prototype, \""children\"", {\r\n        get: function () {\r\n            return new Children(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(DriveItem.prototype, \""thumbnails\"", {\r\n        get: function () {\r\n            return new Thumbnails(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Deletes this Drive Item\r\n     */\r\n    DriveItem.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a Drive item\r\n     *\r\n     * @param properties Set of properties of this Drive Item to update\r\n     */\r\n    DriveItem.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    /**\r\n     * Move the Drive item and optionally update the properties\r\n     *\r\n     * @param parentReference Should contain Id of new parent folder\r\n     * @param properties Optional set of properties of this Drive Item to update\r\n     */\r\n    DriveItem.prototype.move = function (parentReference, properties) {\r\n        var patchBody = extend({}, parentReference);\r\n        if (properties) {\r\n            patchBody = extend({}, properties);\r\n        }\r\n        return this.patchCore({\r\n            body: jsS(patchBody),\r\n        });\r\n    };\r\n    return DriveItem;\r\n}(GraphQueryableInstance));\r\nexport { DriveItem };\r\n/**\r\n * Return a collection of DriveItems in the children relationship of a DriveItem\r\n *\r\n */\r\nvar Children = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Children, _super);\r\n    function Children() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n    * Create a new folder or DriveItem in a Drive with a specified parent item or path\r\n    * Currently only Folder or File works\r\n    * @param name The name of the Drive Item.\r\n    * @param properties Type of Drive Item to create.\r\n    * */\r\n    Children.prototype.add = function (name, driveItemType) {\r\n        var _this = this;\r\n        var postBody = extend({\r\n            name: name,\r\n        }, driveItemType);\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                driveItem: new DriveItem(_this, r.id),\r\n            };\r\n        });\r\n    };\r\n    Children = tslib_1.__decorate([\r\n        defaultPath(\""children\"")\r\n    ], Children);\r\n    return Children;\r\n}(GraphQueryableCollection));\r\nexport { Children };\r\nvar DriveList = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DriveList, _super);\r\n    function DriveList() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    DriveList = tslib_1.__decorate([\r\n        defaultPath(\""list\"")\r\n    ], DriveList);\r\n    return DriveList;\r\n}(GraphQueryableCollection));\r\nexport { DriveList };\r\nvar Recent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Recent, _super);\r\n    function Recent() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Recent = tslib_1.__decorate([\r\n        defaultPath(\""recent\"")\r\n    ], Recent);\r\n    return Recent;\r\n}(GraphQueryableInstance));\r\nexport { Recent };\r\nvar SharedWithMe = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharedWithMe, _super);\r\n    function SharedWithMe() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SharedWithMe = tslib_1.__decorate([\r\n        defaultPath(\""sharedWithMe\"")\r\n    ], SharedWithMe);\r\n    return SharedWithMe;\r\n}(GraphQueryableInstance));\r\nexport { SharedWithMe };\r\nvar DriveSearch = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DriveSearch, _super);\r\n    function DriveSearch() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    DriveSearch = tslib_1.__decorate([\r\n        defaultPath(\""search\"")\r\n    ], DriveSearch);\r\n    return DriveSearch;\r\n}(GraphQueryableInstance));\r\nexport { DriveSearch };\r\nvar Thumbnails = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Thumbnails, _super);\r\n    function Thumbnails() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Thumbnails = tslib_1.__decorate([\r\n        defaultPath(\""thumbnails\"")\r\n    ], Thumbnails);\r\n    return Thumbnails;\r\n}(GraphQueryableInstance));\r\nexport { Thumbnails };\r\n//# sourceMappingURL=onedrive.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nvar Messages = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Messages, _super);\r\n    function Messages() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a member of the group by id\r\n     *\r\n     * @param id Attachment id\r\n     */\r\n    Messages.prototype.getById = function (id) {\r\n        return new Message(this, id);\r\n    };\r\n    /**\r\n     * Add a message to this collection\r\n     *\r\n     * @param message The message details\r\n     */\r\n    Messages.prototype.add = function (message) {\r\n        return this.postCore({\r\n            body: jsS(message),\r\n        });\r\n    };\r\n    Messages = tslib_1.__decorate([\r\n        defaultPath(\""messages\"")\r\n    ], Messages);\r\n    return Messages;\r\n}(GraphQueryableCollection));\r\nexport { Messages };\r\nvar Message = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Message, _super);\r\n    function Message() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Message;\r\n}(GraphQueryableInstance));\r\nexport { Message };\r\nvar MailFolders = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MailFolders, _super);\r\n    function MailFolders() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a member of the group by id\r\n     *\r\n     * @param id Attachment id\r\n     */\r\n    MailFolders.prototype.getById = function (id) {\r\n        return new MailFolder(this, id);\r\n    };\r\n    /**\r\n     * Add a mail folder to this collection\r\n     *\r\n     * @param message The message details\r\n     */\r\n    MailFolders.prototype.add = function (mailFolder) {\r\n        return this.postCore({\r\n            body: jsS(mailFolder),\r\n        });\r\n    };\r\n    MailFolders = tslib_1.__decorate([\r\n        defaultPath(\""mailFolders\"")\r\n    ], MailFolders);\r\n    return MailFolders;\r\n}(GraphQueryableCollection));\r\nexport { MailFolders };\r\nvar MailFolder = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MailFolder, _super);\r\n    function MailFolder() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return MailFolder;\r\n}(GraphQueryableInstance));\r\nexport { MailFolder };\r\nvar MailboxSettings = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MailboxSettings, _super);\r\n    function MailboxSettings() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    MailboxSettings.prototype.update = function (settings) {\r\n        return this.patchCore({\r\n            body: jsS(settings),\r\n        });\r\n    };\r\n    MailboxSettings = tslib_1.__decorate([\r\n        defaultPath(\""mailboxSettings\"")\r\n    ], MailboxSettings);\r\n    return MailboxSettings;\r\n}(GraphQueryableInstance));\r\nexport { MailboxSettings };\r\n//# sourceMappingURL=messages.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nvar People = /** @class */ (function (_super) {\r\n    tslib_1.__extends(People, _super);\r\n    function People() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    People = tslib_1.__decorate([\r\n        defaultPath(\""people\"")\r\n    ], People);\r\n    return People;\r\n}(GraphQueryableCollection));\r\nexport { People };\r\n//# sourceMappingURL=people.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\n/**\r\n * Represents a Insights entity\r\n */\r\nvar Insights = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Insights, _super);\r\n    function Insights() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Insights.prototype, \""trending\"", {\r\n        get: function () {\r\n            return new Trending(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Insights.prototype, \""used\"", {\r\n        get: function () {\r\n            return new Used(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Insights.prototype, \""shared\"", {\r\n        get: function () {\r\n            return new Shared(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Insights = tslib_1.__decorate([\r\n        defaultPath(\""insights\"")\r\n    ], Insights);\r\n    return Insights;\r\n}(GraphQueryableInstance));\r\nexport { Insights };\r\n/**\r\n * Describes a collection of Trending objects\r\n *\r\n */\r\nvar Trending = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Trending, _super);\r\n    function Trending() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Trending = tslib_1.__decorate([\r\n        defaultPath(\""trending\"")\r\n    ], Trending);\r\n    return Trending;\r\n}(GraphQueryableCollection));\r\nexport { Trending };\r\n/**\r\n * Describes a collection of Used objects\r\n *\r\n */\r\nvar Used = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Used, _super);\r\n    function Used() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Used = tslib_1.__decorate([\r\n        defaultPath(\""used\"")\r\n    ], Used);\r\n    return Used;\r\n}(GraphQueryableCollection));\r\nexport { Used };\r\n/**\r\n * Describes a collection of Shared objects\r\n *\r\n */\r\nvar Shared = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Shared, _super);\r\n    function Shared() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Shared = tslib_1.__decorate([\r\n        defaultPath(\""shared\"")\r\n    ], Shared);\r\n    return Shared;\r\n}(GraphQueryableCollection));\r\nexport { Shared };\r\n//# sourceMappingURL=insights.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { Contacts, ContactFolders } from \""./contacts\"";\r\nimport { OneNote } from \""./onenote\"";\r\nimport { Drive, Drives } from \""./onedrive\"";\r\nimport { Tasks } from \""./planner\"";\r\nimport { Teams } from \""./teams\"";\r\nimport { Messages, MailboxSettings, MailFolders } from \""./messages\"";\r\nimport { DirectoryObjects } from \""./directoryobjects\"";\r\nimport { People } from \""./people\"";\r\nimport { Photo } from \""./photos\"";\r\nimport { Calendar } from \""./calendars\"";\r\nimport { Insights } from \""./insights\"";\r\n/**\r\n * Describes a collection of Users objects\r\n *\r\n */\r\nvar Users = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Users, _super);\r\n    function Users() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a user from the collection using the specified id\r\n     *\r\n     * @param id Id of the user to get from this collection\r\n     */\r\n    Users.prototype.getById = function (id) {\r\n        return new User(this, id);\r\n    };\r\n    Users = tslib_1.__decorate([\r\n        defaultPath(\""users\"")\r\n    ], Users);\r\n    return Users;\r\n}(GraphQueryableCollection));\r\nexport { Users };\r\n/**\r\n * Represents a user entity\r\n */\r\nvar User = /** @class */ (function (_super) {\r\n    tslib_1.__extends(User, _super);\r\n    function User() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(User.prototype, \""onenote\"", {\r\n        /**\r\n        * The onenote associated with me\r\n        */\r\n        get: function () {\r\n            return new OneNote(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""contacts\"", {\r\n        /**\r\n        * The Contacts associated with the user\r\n        */\r\n        get: function () {\r\n            return new Contacts(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""calendar\"", {\r\n        /**\r\n         * The calendar associated with the user\r\n         */\r\n        get: function () {\r\n            return new Calendar(this, \""calendar\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""photo\"", {\r\n        /**\r\n        * The photo associated with the user\r\n        */\r\n        get: function () {\r\n            return new Photo(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""joinedTeams\"", {\r\n        /**\r\n        * The Teams associated with the user\r\n        */\r\n        get: function () {\r\n            return new Teams(this, \""joinedTeams\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""memberOf\"", {\r\n        /**\r\n        * The groups and directory roles associated with the user\r\n        */\r\n        get: function () {\r\n            return new DirectoryObjects(this, \""memberOf\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Returns all the groups and directory roles that the specified useris a member of. The check is transitive\r\n     *\r\n     * @param securityEnabledOnly\r\n     */\r\n    User.prototype.getMemberObjects = function (securityEnabledOnly) {\r\n        if (securityEnabledOnly === void 0) { securityEnabledOnly = false; }\r\n        return this.clone(User, \""getMemberObjects\"").postCore({\r\n            body: jsS({\r\n                securityEnabledOnly: securityEnabledOnly,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Return all the groups that the specified user is a member of. The check is transitive\r\n     *\r\n     * @param securityEnabledOnly\r\n     */\r\n    User.prototype.getMemberGroups = function (securityEnabledOnly) {\r\n        if (securityEnabledOnly === void 0) { securityEnabledOnly = false; }\r\n        return this.clone(User, \""getMemberGroups\"").postCore({\r\n            body: jsS({\r\n                securityEnabledOnly: securityEnabledOnly,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Check for membership in a specified list of groups, and returns from that list those groups of which the specified user, group, or directory object is a member.\r\n     * This function is transitive.\r\n     * @param groupIds A collection that contains the object IDs of the groups in which to check membership. Up to 20 groups may be specified.\r\n     */\r\n    User.prototype.checkMemberGroups = function (groupIds) {\r\n        return this.clone(User, \""checkMemberGroups\"").postCore({\r\n            body: jsS({\r\n                groupIds: groupIds,\r\n            }),\r\n        });\r\n    };\r\n    Object.defineProperty(User.prototype, \""contactFolders\"", {\r\n        /**\r\n        * The Contact Folders associated with the user\r\n        */\r\n        get: function () {\r\n            return new ContactFolders(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""drive\"", {\r\n        /**\r\n        * The default Drive associated with the user\r\n        */\r\n        get: function () {\r\n            return new Drive(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""drives\"", {\r\n        /**\r\n        * The Drives the user has available\r\n        */\r\n        get: function () {\r\n            return new Drives(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""tasks\"", {\r\n        /**\r\n        * The Tasks the user has available\r\n        */\r\n        get: function () {\r\n            return new Tasks(this, \""planner/tasks\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""messages\"", {\r\n        /**\r\n         * Get the messages in the signed-in user's mailbox\r\n         */\r\n        get: function () {\r\n            return new Messages(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""mailboxSettings\"", {\r\n        /**\r\n         * Get the MailboxSettings in the signed-in user's mailbox\r\n         */\r\n        get: function () {\r\n            return new MailboxSettings(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""mailFolders\"", {\r\n        /**\r\n         * Get the MailboxSettings in the signed-in user's mailbox\r\n         */\r\n        get: function () {\r\n            return new MailFolders(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Updates this user\r\n     *\r\n     * @param properties Properties used to update this user\r\n     */\r\n    User.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this user\r\n     */\r\n    User.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Send the message specified in the request body. The message is saved in the Sent Items folder by default.\r\n     */\r\n    User.prototype.sendMail = function (message) {\r\n        return this.clone(User, \""sendMail\"").postCore({\r\n            body: jsS(message),\r\n        });\r\n    };\r\n    Object.defineProperty(User.prototype, \""people\"", {\r\n        /**\r\n        * People ordered by their relevance to the user\r\n        */\r\n        get: function () {\r\n            return new People(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""directReports\"", {\r\n        /**\r\n        * People that have direct reports to the user\r\n        */\r\n        get: function () {\r\n            return new People(this, \""directReports\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(User.prototype, \""insights\"", {\r\n        /**\r\n        * The Insights associated with me\r\n        */\r\n        get: function () {\r\n            return new Insights(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return User;\r\n}(GraphQueryableInstance));\r\nexport { User };\r\n//# sourceMappingURL=users.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { ODataBatch } from \""@pnp/odata\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { extend, jsS, isUrlAbsolute } from \""@pnp/common\"";\r\nimport { GraphRuntimeConfig } from \""./config/graphlibconfig\"";\r\nimport { GraphHttpClient } from \""./net/graphhttpclient\"";\r\nvar GraphBatch = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphBatch, _super);\r\n    function GraphBatch(batchUrl, maxRequests) {\r\n        if (batchUrl === void 0) { batchUrl = \""https://graph.microsoft.com/v1.0/$batch\""; }\r\n        if (maxRequests === void 0) { maxRequests = 20; }\r\n        var _this = _super.call(this) || this;\r\n        _this.batchUrl = batchUrl;\r\n        _this.maxRequests = maxRequests;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Urls come to the batch absolute, but the processor expects relative\r\n     * @param url Url to ensure is relative\r\n     */\r\n    GraphBatch.makeUrlRelative = function (url) {\r\n        if (!isUrlAbsolute(url)) {\r\n            // already not absolute, just give it back\r\n            return url;\r\n        }\r\n        var index = url.indexOf(\"".com/v1.0/\"");\r\n        if (index < 0) {\r\n            index = url.indexOf(\"".com/beta/\"");\r\n            if (index > -1) {\r\n                // beta url\r\n                return url.substr(index + 10);\r\n            }\r\n        }\r\n        else {\r\n            // v1.0 url\r\n            return url.substr(index + 9);\r\n        }\r\n        // no idea\r\n        return url;\r\n    };\r\n    GraphBatch.formatRequests = function (requests) {\r\n        var _this = this;\r\n        return requests.map(function (reqInfo, index) {\r\n            var requestFragment = {\r\n                id: \""\"" + ++index,\r\n                method: reqInfo.method,\r\n                url: _this.makeUrlRelative(reqInfo.url),\r\n            };\r\n            var headers = {};\r\n            // merge global config headers\r\n            if (GraphRuntimeConfig.headers !== undefined && GraphRuntimeConfig.headers !== null) {\r\n                headers = extend(headers, GraphRuntimeConfig.headers);\r\n            }\r\n            if (reqInfo.options !== undefined) {\r\n                // merge per request headers\r\n                if (reqInfo.options.headers !== undefined && reqInfo.options.headers !== null) {\r\n                    headers = extend(headers, reqInfo.options.headers);\r\n                }\r\n                // add a request body\r\n                if (reqInfo.options.body !== undefined && reqInfo.options.body !== null) {\r\n                    requestFragment = extend(requestFragment, {\r\n                        body: reqInfo.options.body,\r\n                    });\r\n                }\r\n            }\r\n            requestFragment = extend(requestFragment, {\r\n                headers: headers,\r\n            });\r\n            return requestFragment;\r\n        });\r\n    };\r\n    GraphBatch.parseResponse = function (requests, graphResponse) {\r\n        return new Promise(function (resolve) {\r\n            var parsedResponses = new Array(requests.length).fill(null);\r\n            for (var i = 0; i < graphResponse.responses.length; ++i) {\r\n                var response = graphResponse.responses[i];\r\n                // we create the request id by adding 1 to the index, so we place the response by subtracting one to match\r\n                // the array of requests and make it easier to map them by index\r\n                var responseId = parseInt(response.id, 10) - 1;\r\n                if (response.status === 204) {\r\n                    parsedResponses[responseId] = new Response();\r\n                }\r\n                else {\r\n                    parsedResponses[responseId] = new Response(JSON.stringify(response.body), response);\r\n                }\r\n            }\r\n            resolve({\r\n                nextLink: graphResponse.nextLink,\r\n                responses: parsedResponses,\r\n            });\r\n        });\r\n    };\r\n    GraphBatch.prototype.executeImpl = function () {\r\n        var _this = this;\r\n        Logger.write(\""[\"" + this.batchId + \""] (\"" + (new Date()).getTime() + \"") Executing batch with \"" + this.requests.length + \"" requests.\"", 1 /* Info */);\r\n        if (this.requests.length < 1) {\r\n            Logger.write(\""Resolving empty batch.\"", 1 /* Info */);\r\n            return Promise.resolve();\r\n        }\r\n        var client = new GraphHttpClient();\r\n        // create a working copy of our requests\r\n        var requests = this.requests.slice();\r\n        // this is the root of our promise chain\r\n        var promise = Promise.resolve();\r\n        var _loop_1 = function () {\r\n            var requestsChunk = requests.splice(0, this_1.maxRequests);\r\n            var batchRequest = {\r\n                requests: GraphBatch.formatRequests(requestsChunk),\r\n            };\r\n            var batchOptions = {\r\n                body: jsS(batchRequest),\r\n                headers: {\r\n                    \""Accept\"": \""application/json\"",\r\n                    \""Content-Type\"": \""application/json\"",\r\n                },\r\n                method: \""POST\"",\r\n            };\r\n            Logger.write(\""[\"" + this_1.batchId + \""] (\"" + (new Date()).getTime() + \"") Sending batch request.\"", 1 /* Info */);\r\n            client.fetch(this_1.batchUrl, batchOptions)\r\n                .then(function (r) { return r.json(); })\r\n                .then(function (j) { return GraphBatch.parseResponse(requestsChunk, j); })\r\n                .then(function (parsedResponse) {\r\n                Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Resolving batched requests.\"", 1 /* Info */);\r\n                parsedResponse.responses.reduce(function (chain, response, index) {\r\n                    var request = requestsChunk[index];\r\n                    Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Resolving batched request \"" + request.method + \"" \"" + request.url + \"".\"", 0 /* Verbose */);\r\n                    return chain.then(function (_) { return request.parser.parse(response).then(request.resolve).catch(request.reject); });\r\n                }, promise);\r\n            });\r\n        };\r\n        var this_1 = this;\r\n        while (requests.length > 0) {\r\n            _loop_1();\r\n        }\r\n        return promise;\r\n    };\r\n    return GraphBatch;\r\n}(ODataBatch));\r\nexport { GraphBatch };\r\n//# sourceMappingURL=batch.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nimport { GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nvar Invitations = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Invitations, _super);\r\n    function Invitations() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Create a new Invitation via invitation manager.\r\n     *\r\n     * @param invitedUserEmailAddress The email address of the user being invited.\r\n     * @param inviteRedirectUrl The URL user should be redirected to once the invitation is redeemed.\r\n     * @param additionalProperties A plain object collection of additional properties you want to set in the invitation\r\n     */\r\n    Invitations.prototype.create = function (invitedUserEmailAddress, inviteRedirectUrl, additionalProperties) {\r\n        if (additionalProperties === void 0) { additionalProperties = {}; }\r\n        var postBody = extend({\r\n            inviteRedirectUrl: inviteRedirectUrl,\r\n            invitedUserEmailAddress: invitedUserEmailAddress,\r\n        }, additionalProperties);\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n            };\r\n        });\r\n    };\r\n    Invitations = tslib_1.__decorate([\r\n        defaultPath(\""invitations\"")\r\n    ], Invitations);\r\n    return Invitations;\r\n}(GraphQueryableCollection));\r\nexport { Invitations };\r\n//# sourceMappingURL=invitations.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nvar Subscriptions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Subscriptions, _super);\r\n    function Subscriptions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Subscriptions.prototype.getById = function (id) {\r\n        return new Subscription(this, id);\r\n    };\r\n    /**\r\n     * Create a new Subscription.\r\n     *\r\n     * @param changeType Indicates the type of change in the subscribed resource that will raise a notification. The supported values are: created, updated, deleted.\r\n     * @param notificationUrl The URL of the endpoint that will receive the notifications. This URL must make use of the HTTPS protocol.\r\n     * @param resource Specifies the resource that will be monitored for changes. Do not include the base URL (https://graph.microsoft.com/v1.0/).\r\n     * @param expirationDateTime Specifies the date and time when the webhook subscription expires. The time is in UTC.\r\n     * @param additionalProperties A plain object collection of additional properties you want to set on the new subscription\r\n     *\r\n     */\r\n    Subscriptions.prototype.add = function (changeType, notificationUrl, resource, expirationDateTime, additionalProperties) {\r\n        var _this = this;\r\n        if (additionalProperties === void 0) { additionalProperties = {}; }\r\n        var postBody = extend({\r\n            changeType: changeType,\r\n            expirationDateTime: expirationDateTime,\r\n            notificationUrl: notificationUrl,\r\n            resource: resource,\r\n        }, additionalProperties);\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                subscription: _this.getById(r.id),\r\n            };\r\n        });\r\n    };\r\n    Subscriptions = tslib_1.__decorate([\r\n        defaultPath(\""subscriptions\"")\r\n    ], Subscriptions);\r\n    return Subscriptions;\r\n}(GraphQueryableCollection));\r\nexport { Subscriptions };\r\nvar Subscription = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Subscription, _super);\r\n    function Subscription() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Deletes this Subscription\r\n     */\r\n    Subscription.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a Subscription\r\n     *\r\n     * @param properties Set of properties of this Subscription to update\r\n     */\r\n    Subscription.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    return Subscription;\r\n}(GraphQueryableInstance));\r\nexport { Subscription };\r\n//# sourceMappingURL=subscriptions.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nimport { GraphQueryableCollection, defaultPath, GraphQueryableInstance } from \""./graphqueryable\"";\r\nvar Security = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Security, _super);\r\n    function Security() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Security.prototype, \""alerts\"", {\r\n        get: function () {\r\n            return new Alerts(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Security = tslib_1.__decorate([\r\n        defaultPath(\""security\"")\r\n    ], Security);\r\n    return Security;\r\n}(GraphQueryableInstance));\r\nexport { Security };\r\nvar Alerts = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Alerts, _super);\r\n    function Alerts() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Alerts.prototype.getById = function (id) {\r\n        return new Alert(this, id);\r\n    };\r\n    Alerts = tslib_1.__decorate([\r\n        defaultPath(\""alerts\"")\r\n    ], Alerts);\r\n    return Alerts;\r\n}(GraphQueryableCollection));\r\nexport { Alerts };\r\nvar Alert = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Alert, _super);\r\n    function Alert() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n    * Update the properties of an Alert\r\n    *\r\n    * @param properties Set of properties of this Alert to update\r\n    */\r\n    Alert.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    return Alert;\r\n}(GraphQueryableInstance));\r\nexport { Alert };\r\n//# sourceMappingURL=security.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryableInstance, GraphQueryableCollection, defaultPath } from \""./graphqueryable\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nimport { Drive, Drives, DriveItem, } from \""./onedrive\"";\r\n/**\r\n * Represents a Sites entity\r\n */\r\nvar Sites = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Sites, _super);\r\n    function Sites() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Sites.prototype, \""root\"", {\r\n        /**\r\n         * Gets the root site collection of the tenant\r\n         */\r\n        get: function () {\r\n            return new GraphSite(this, \""root\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a Site instance by id\r\n     *\r\n     * @param baseUrl Base url ex: contoso.sharepoint.com\r\n     * @param relativeUrl Optional relative url ex: /sites/site\r\n     */\r\n    Sites.prototype.getById = function (baseUrl, relativeUrl) {\r\n        var siteUrl = baseUrl;\r\n        // If a relative URL combine url with : at the right places\r\n        if (relativeUrl) {\r\n            siteUrl = this._urlCombine(baseUrl, relativeUrl);\r\n        }\r\n        return new GraphSite(this, siteUrl);\r\n    };\r\n    /**\r\n     * Method to make sure the url is encoded as it should with :\r\n     *\r\n     */\r\n    Sites.prototype._urlCombine = function (baseUrl, relativeUrl) {\r\n        // remove last '/' of base if exists\r\n        if (baseUrl.lastIndexOf(\""/\"") === baseUrl.length - 1) {\r\n            baseUrl = baseUrl.substring(0, baseUrl.length - 1);\r\n        }\r\n        // remove '/' at 0\r\n        if (relativeUrl.charAt(0) === \""/\"") {\r\n            relativeUrl = relativeUrl.substring(1, relativeUrl.length);\r\n        }\r\n        // remove last '/' of next if exists\r\n        if (relativeUrl.lastIndexOf(\""/\"") === relativeUrl.length - 1) {\r\n            relativeUrl = relativeUrl.substring(0, relativeUrl.length - 1);\r\n        }\r\n        return baseUrl + \"":/\"" + relativeUrl + \"":\"";\r\n    };\r\n    Sites = tslib_1.__decorate([\r\n        defaultPath(\""sites\"")\r\n    ], Sites);\r\n    return Sites;\r\n}(GraphQueryableInstance));\r\nexport { Sites };\r\n/**\r\n * Describes a Site object\r\n *\r\n */\r\nvar GraphSite = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphSite, _super);\r\n    function GraphSite() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(GraphSite.prototype, \""columns\"", {\r\n        get: function () {\r\n            return new GraphColumns(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphSite.prototype, \""contentTypes\"", {\r\n        get: function () {\r\n            return new GraphContentTypes(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphSite.prototype, \""drive\"", {\r\n        get: function () {\r\n            return new Drive(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphSite.prototype, \""drives\"", {\r\n        get: function () {\r\n            return new Drives(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphSite.prototype, \""lists\"", {\r\n        get: function () {\r\n            return new GraphLists(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphSite.prototype, \""sites\"", {\r\n        get: function () {\r\n            return new Sites(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return GraphSite;\r\n}(GraphQueryableInstance));\r\nexport { GraphSite };\r\n/**\r\n* Describes a collection of Content Type objects\r\n*\r\n*/\r\nvar GraphContentTypes = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphContentTypes, _super);\r\n    function GraphContentTypes() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a Content Type instance by id\r\n     *\r\n     * @param id Content Type id\r\n     */\r\n    GraphContentTypes.prototype.getById = function (id) {\r\n        return new GraphContentType(this, id);\r\n    };\r\n    GraphContentTypes = tslib_1.__decorate([\r\n        defaultPath(\""contenttypes\"")\r\n    ], GraphContentTypes);\r\n    return GraphContentTypes;\r\n}(GraphQueryableCollection));\r\nexport { GraphContentTypes };\r\n/**\r\n * Describes a Content Type object\r\n *\r\n */\r\nvar GraphContentType = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphContentType, _super);\r\n    function GraphContentType() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return GraphContentType;\r\n}(GraphQueryableInstance));\r\nexport { GraphContentType };\r\n/**\r\n * Describes a collection of Column Definition objects\r\n *\r\n */\r\nvar GraphColumns = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphColumns, _super);\r\n    function GraphColumns() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a Column instance by id\r\n     *\r\n     * @param id Column id\r\n     */\r\n    GraphColumns.prototype.getById = function (id) {\r\n        return new GraphColumn(this, id);\r\n    };\r\n    GraphColumns = tslib_1.__decorate([\r\n        defaultPath(\""columns\"")\r\n    ], GraphColumns);\r\n    return GraphColumns;\r\n}(GraphQueryableCollection));\r\nexport { GraphColumns };\r\n/**\r\n * Describes a Column Definition object\r\n *\r\n */\r\nvar GraphColumn = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphColumn, _super);\r\n    function GraphColumn() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(GraphColumn.prototype, \""columnLinks\"", {\r\n        get: function () {\r\n            return new GraphColumnLinks(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return GraphColumn;\r\n}(GraphQueryableInstance));\r\nexport { GraphColumn };\r\n/**\r\n * Describes a collection of Column Link objects\r\n *\r\n */\r\nvar GraphColumnLinks = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphColumnLinks, _super);\r\n    function GraphColumnLinks() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a Column Link instance by id\r\n     *\r\n     * @param id Column link id\r\n     */\r\n    GraphColumnLinks.prototype.getById = function (id) {\r\n        return new GraphColumnLink(this, id);\r\n    };\r\n    GraphColumnLinks = tslib_1.__decorate([\r\n        defaultPath(\""columnlinks\"")\r\n    ], GraphColumnLinks);\r\n    return GraphColumnLinks;\r\n}(GraphQueryableCollection));\r\nexport { GraphColumnLinks };\r\n/**\r\n * Describes a Column Link object\r\n *\r\n */\r\nvar GraphColumnLink = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphColumnLink, _super);\r\n    function GraphColumnLink() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return GraphColumnLink;\r\n}(GraphQueryableInstance));\r\nexport { GraphColumnLink };\r\n/**\r\n* Describes a collection of Column definitions objects\r\n*/\r\nvar GraphLists = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphLists, _super);\r\n    function GraphLists() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a List instance by id\r\n     *\r\n     * @param id List id\r\n     */\r\n    GraphLists.prototype.getById = function (id) {\r\n        return new GraphList(this, id);\r\n    };\r\n    /**\r\n    * Create a new List\r\n    * @param displayName The display name of the List\r\n    * @param list List information. Which template, if hidden, and contentTypesEnabled.\r\n    * @param additionalProperties A plain object collection of additional properties you want to set in list\r\n    *\r\n    * */\r\n    GraphLists.prototype.create = function (displayName, list, additionalProperties) {\r\n        var _this = this;\r\n        if (additionalProperties === void 0) { additionalProperties = {}; }\r\n        var postBody = extend({\r\n            displayName: displayName,\r\n            list: list,\r\n        }, additionalProperties);\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                list: new GraphList(_this, r.id),\r\n            };\r\n        });\r\n    };\r\n    GraphLists = tslib_1.__decorate([\r\n        defaultPath(\""lists\"")\r\n    ], GraphLists);\r\n    return GraphLists;\r\n}(GraphQueryableCollection));\r\nexport { GraphLists };\r\n/**\r\n * Describes a List object\r\n *\r\n */\r\nvar GraphList = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphList, _super);\r\n    function GraphList() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(GraphList.prototype, \""columns\"", {\r\n        get: function () {\r\n            return new GraphColumns(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphList.prototype, \""contentTypes\"", {\r\n        get: function () {\r\n            return new GraphContentTypes(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphList.prototype, \""drive\"", {\r\n        get: function () {\r\n            return new Drive(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphList.prototype, \""items\"", {\r\n        get: function () {\r\n            return new GraphItems(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return GraphList;\r\n}(GraphQueryableInstance));\r\nexport { GraphList };\r\n/**\r\n* Describes a collection of Item objects\r\n*/\r\nvar GraphItems = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphItems, _super);\r\n    function GraphItems() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a List Item instance by id\r\n     *\r\n     * @param id List item id\r\n     */\r\n    GraphItems.prototype.getById = function (id) {\r\n        return new GraphItem(this, id);\r\n    };\r\n    /**\r\n    * Create a new Item\r\n    * @param displayName The display name of the List\r\n    * @param list List information. Which template, if hidden, and contentTypesEnabled.\r\n    * @param additionalProperties A plain object collection of additional properties you want to set in list\r\n    *\r\n    * */\r\n    GraphItems.prototype.create = function (fields) {\r\n        var _this = this;\r\n        var postBody = {\r\n            fields: fields,\r\n        };\r\n        return this.postCore({\r\n            body: jsS(postBody),\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                item: new GraphItem(_this, r.id),\r\n            };\r\n        });\r\n    };\r\n    GraphItems = tslib_1.__decorate([\r\n        defaultPath(\""items\"")\r\n    ], GraphItems);\r\n    return GraphItems;\r\n}(GraphQueryableCollection));\r\nexport { GraphItems };\r\n/**\r\n * Describes an Item object\r\n *\r\n */\r\nvar GraphItem = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphItem, _super);\r\n    function GraphItem() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(GraphItem.prototype, \""driveItem\"", {\r\n        get: function () {\r\n            return new DriveItem(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphItem.prototype, \""fields\"", {\r\n        get: function () {\r\n            return new GraphFields(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphItem.prototype, \""versions\"", {\r\n        get: function () {\r\n            return new GraphVersions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Deletes this item\r\n     */\r\n    GraphItem.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    /**\r\n     * Update the properties of a item object\r\n     *\r\n     * @param properties Set of properties of this item to update\r\n     */\r\n    GraphItem.prototype.update = function (properties) {\r\n        return this.patchCore({\r\n            body: jsS(properties),\r\n        });\r\n    };\r\n    return GraphItem;\r\n}(GraphQueryableInstance));\r\nexport { GraphItem };\r\n/**\r\n * Describes a collection of Field objects\r\n *\r\n */\r\nvar GraphFields = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphFields, _super);\r\n    function GraphFields() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    GraphFields = tslib_1.__decorate([\r\n        defaultPath(\""fields\"")\r\n    ], GraphFields);\r\n    return GraphFields;\r\n}(GraphQueryableCollection));\r\nexport { GraphFields };\r\n/**\r\n * Describes a collection of Version objects\r\n *\r\n */\r\nvar GraphVersions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphVersions, _super);\r\n    function GraphVersions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n    * Gets a Version instance by id\r\n    *\r\n    * @param id Version id\r\n    */\r\n    GraphVersions.prototype.getById = function (id) {\r\n        return new Version(this, id);\r\n    };\r\n    GraphVersions = tslib_1.__decorate([\r\n        defaultPath(\""versions\"")\r\n    ], GraphVersions);\r\n    return GraphVersions;\r\n}(GraphQueryableCollection));\r\nexport { GraphVersions };\r\n/**\r\n * Describes a Version object\r\n *\r\n */\r\nvar Version = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Version, _super);\r\n    function Version() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Version;\r\n}(GraphQueryableInstance));\r\nexport { Version };\r\n//# sourceMappingURL=sites.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { GraphQueryable } from \""./graphqueryable\"";\r\nimport { setup as _setup, } from \""./config/graphlibconfig\"";\r\nimport { Groups } from \""./groups\"";\r\nimport { Teams } from \""./teams\"";\r\nimport { Users, User } from \""./users\"";\r\nimport { Planner } from \""./planner\"";\r\nimport { GraphBatch } from \""./batch\"";\r\nimport { DirectoryObjects } from \""./directoryobjects\"";\r\nimport { Invitations } from \""./invitations\"";\r\nimport { Subscriptions } from \""./subscriptions\"";\r\nimport { Security } from \""./security\"";\r\nimport { Sites } from \""./sites\"";\r\nvar GraphRest = /** @class */ (function (_super) {\r\n    tslib_1.__extends(GraphRest, _super);\r\n    function GraphRest(baseUrl, path) {\r\n        return _super.call(this, baseUrl, path) || this;\r\n    }\r\n    Object.defineProperty(GraphRest.prototype, \""directoryObjects\"", {\r\n        get: function () {\r\n            return new DirectoryObjects(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRest.prototype, \""groups\"", {\r\n        get: function () {\r\n            return new Groups(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRest.prototype, \""teams\"", {\r\n        get: function () {\r\n            return new Teams(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRest.prototype, \""me\"", {\r\n        get: function () {\r\n            return new User(this, \""me\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRest.prototype, \""planner\"", {\r\n        get: function () {\r\n            return new Planner(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRest.prototype, \""users\"", {\r\n        get: function () {\r\n            return new Users(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRest.prototype, \""invitations\"", {\r\n        get: function () {\r\n            return new Invitations(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRest.prototype, \""subscriptions\"", {\r\n        get: function () {\r\n            return new Subscriptions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    GraphRest.prototype.createBatch = function () {\r\n        return new GraphBatch();\r\n    };\r\n    GraphRest.prototype.setup = function (config) {\r\n        _setup(config);\r\n    };\r\n    Object.defineProperty(GraphRest.prototype, \""security\"", {\r\n        get: function () {\r\n            return new Security(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(GraphRest.prototype, \""sites\"", {\r\n        get: function () {\r\n            return new Sites(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return GraphRest;\r\n}(GraphQueryable));\r\nexport { GraphRest };\r\nexport var graph = new GraphRest(\""v1.0\"");\r\n//# sourceMappingURL=rest.js.map"",""export * from \""./src/graph\"";\r\n//# sourceMappingURL=index.js.map""],""sourceRoot"":""""}"
01717403797215ac8b6865f75978211ad3dea88a,2823316,- [阅读资料](http://stackoverflow.com/questions/2823316/generate-a-random-letter-in-python)
ba6437f0529996c059160bc7fe0874abed0d26e0,1207190,https://stackoverflow.com/questions/1207190/embedding-base64-images
798f75dfc096aa14363d5980e77165a0ba5b5e94,26928299,1. https://stackoverflow.com/questions/26928299/why-does-git-subtree-push-always-list-hundreds-of-commits
904b386f3381c7bb08cf854745df305602ae2433,35627553,"- [Stack Overflow: Is there any way to ""commit"" the state in Redux to free memory?](http://stackoverflow.com/questions/35627553/is-there-any-way-to-commit-the-state-in-redux-to-free-memory/35634004)"
cad2ef9a55ba7c911bc85075be5655e7739436a8,20848740,#### http://stackoverflow.com/questions/20848740/smoothing-surface-plot-from-matrix
d129b3f4504feb6ba5e8160bcff52694893a88b6,1993721,     * https://stackoverflow.com/questions/1993721/how-to-convert-camelcase-to-camel-case
54cddf9c007a72ab8e70c28c5074907223bfbbe7,3665561,        //http://stackoverflow.com/questions/3665561/document-readystate-of-interactive-vs-ondomcontentloaded
2f14bb713261c0f0546134bf32ae173e8a1cfccb,11130109, * http://stackoverflow.com/questions/11130109/c-struct-size-alignment
db9424c07a5018eec777635b43bc21773fa5a3b4,7688070,* [1]: https://stackoverflow.com/questions/7688070/why-is-comparing-the-constructor-property-of-two-windows-unreliable
5cbd75c34b872b750c9ee0fa2d3db84852ce9680,17907445,        // http://stackoverflow.com/questions/17907445/how-to-detect-ie11#comment30165888_17907562
951b2cbb8c4f82703acf30e2021a9ce91a5151cc,21476380,"      ""description"":""iOS has an issue preventing `background-position: fixed` from being used with `background-size: cover` - [see details](http://stackoverflow.com/questions/21476380/background-size-on-ios)"""
4b4c09410aa8de5781de3df72480e3ada08e8a4f,93540 430325,"589138,comment,589124,589124,0,0,villageidiot,,,""This post is a negative critique of Haml which points out that it is not an improvement over HTML - it makes working with designers more cumbersome for one thing. A somewhat different viewpoint from a StackOverflow user:<p><a href=""""http://stackoverflow.com/questions/93540/your-attitude-to-haml/430325#430325"""" rel=""""nofollow"""">http://stackoverflow.com/questions/93540/your-attitude-to-ha...</a>"",1241211546"
d71b079f51f7676e7efbd67b5d56bdd916428c3c,16013517,                            see https://stackoverflow.com/a/16013517/759749
3e422d25eb57af9e92b5be6b40f9816b47c5eab8,3330919,        // http://stackoverflow.com/a/3330919)
0b944c103b9d0e6e4dc835df6475e9c19ee87b24,5736503,  more information here: https://stackoverflow.com/questions/5736503/how-to-make-css3-rounded-corners-hide-overflow-in-chrome-opera*/
6727b92b15fb5f3b1d019418ed05b96cec8a6bd6,7696791,                    //http://stackoverflow.com/a/7696791/1091751
f56d49e5cd5307a669d9c11f3ad16800c98472a6,6690611,   * Taken from http://stackoverflow.com/a/6690611/255627
971f1d8f59e239c56f2e23c0ff0e001af79dcf47,934012,		// Courtesy of http://stackoverflow.com/questions/934012/get-image-data-in-javascript
b7a4958d6cf9ff79782625584b9899b9332bf4b5,30757193,        // http://stackoverflow.com/questions/30757193/find-out-if-character-in-string-is-emoji
198efd72fbd9878f22c9e9c33c4a9fb6fe5f8963,9618017,1. [remove old ruby Remove old Ruby](http://stackoverflow.com/a/9618017/2510374)
7991f19b0a46b9d07e8da5cd0a4c396a0d7e555c,6252782,* [将时间字符串转换为日期类型 Joda Time](http://stackoverflow.com/a/6252782)
3ecbe9a43167f5269e704fbd97479a9b8113b265,16496730,	 * @see http://stackoverflow.com/a/16496730/1688568
4f088eae4606226e5e690551339f42c6e7006273,11156204,http://stackoverflow.com/questions/11156204/parse-kml-file-with-geoxml3-and-makerclusterer
f641659022627aea56a24a1609231d6dbef45f6b,34502625,"10804329,comment,10800900,10800900,0,0,ivarv,,,""This looks very promising and could be huge if it supported  JVM languages besides Java. I&#x27;ve been digging through the docs and have yet to find anything to this end. (Going so far as to post a SO question about it at <a href=""""http://stackoverflow.com/questions/34502625/can-i-use-codenameone-to-compile-other-jvm-based-languages-to-ios"""" rel=""""nofollow"""">http://stackoverflow.com/questions/34502625/can-i-use-codena...</a> )"",1451348368"
7c1707bbefdb6dde68b6be21cae0d28345ad2ffb,26489079,        //http://stackoverflow.com/questions/26489079/evenly-spaced-menu-items-on-toolbar
36c5ff72e50374cc4ede92fe6a2a9bb27bc2326d,2806897,# http://stackoverflow.com/questions/2806897
7684f14bf155ad7a9bd89ceafda9782b05282c27,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
1b0001ede1bdb171c116c1c70edb7ea60e8ecc41,1125292,	 * http://stackoverflow.com/questions/1125292/how-to-move-cursor-to-end-of-contenteditable-entity
44db63e2769715d8760f39b3c46df89e8324c303,12523516,    http://stackoverflow.com/questions/12523516/using-ast-and-whitelists-to-make-pythons-eval-safe
6498764b197ad7f96a1d0f2b23017871757435fb,24453387,    # See: http://stackoverflow.com/questions/24453387/scons-attributeerror-builtin-function-or-method-object-has-no-attribute-disp
6f395ab58badb527dab4a1cdd6c30a1c27a817fd,105034,     * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
992caf882f4fa4b2fa0e375ce79e50b23938dd32,47225591,// https://stackoverflow.com/a/47225591/2730032
f579883ecd22f077b5c514bf67c7f505d587e4ba,42022950,"# For further details, see: https://stackoverflow.com/questions/42022950/which-seeds-have-to-be-set-where-to-realize-100-reproducibility-of-training-res"
af8acac934bcee6b3c473334c55540449f74d4af,10906204,            var dragging = 0; //Ref. http://stackoverflow.com/a/10906204
fe61ba2174717d485edcbbb2c2ae395071c6441d,24161582,"       "" * http://stackoverflow.com/a/24161582/3208463\n"","
041f253109a7af7bd86b8d087478ff1b8942d387,41927589,//    see http://stackoverflow.com/questions/41927589/rationales-consequences-of-webidl-class-inheritance-requirements
b221c56e2f2c7e76d8348ed4d854f61892b798e0,6491621,  // source: http://stackoverflow.com/a/6491621
d87f967ec5b4b298a48de758d7755accc0298df4,15642494, * http://stackoverflow.com/questions/15642494/find-property-by-name-in-a-deep-object
000b072c77fa095ae2f6db757fc5c47d89a799d2,57803,	http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript
a47c48e74f5b8b73258b3876ab38b4d13f6ddb0a,8913138,        // http://stackoverflow.com/questions/8913138/minify-indented-json-string-in-net
af0db4e37e02b859547a2cad74ca04d1dde007f9,27962953,"    ""* Basemap: gridline labels for any projection; limited to a few in cartopy ([workaround](http://stackoverflow.com/questions/27962953/cartopy-axis-label-workaround) for Lambert Conic)\n"","
ca8a4cdda20bdfc5ab2f958971d7a6a1ade38082,7814017, * Found at http://stackoverflow.com/questions/7814017/is-it-possible-to-disable-scrolling-on-a-viewpager.
1663879a17f75bdfc7a604ac0d1b69ea325c1ea8,8144214,"* Express - The best way to understand express is through its [Official Website](http://expressjs.com/), which has a [Getting Started](http://expressjs.com/starter/installing.html) guide, as well as an [ExpressJS Guide](http://expressjs.com/guide/error-handling.html) guide for general express topics. You can also go through this [StackOverflow Thread](http://stackoverflow.com/questions/8144214/learning-express-for-node-js) for more resources."
02052ad509355465a0d8730d296e70cf76e6d454,646628,//By: http://stackoverflow.com/questions/646628/how-to-check-if-a-string-startswith-another-string
dca40b94b708ec6f7af1a848f72644958fa54172,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
ab76b763b303796001cacc2face982ff1e24811a,359237,* http://stackoverflow.com/questions/359237/why-does-c-not-have-reflection
55e2b6ec3fde74572a8f6624dd5fc2f956bd21f4,37939589,"# c.f., https://stackoverflow.com/a/37939589"
8b4c7b8465da5c29d3a71bd76c172e18c883497b,5657371,  // cf. https://stackoverflow.com/questions/5657371
4336d3235167b60eb2fd79dbdca301c668443855,3330919,        // http://stackoverflow.com/a/3330919)
29b6a3e7e00daa536727d17f217f2a11217baeae,29595502, * http://stackoverflow.com/q/29595502/2663985 - Implement custom token filter for that It's also
1d8e29984b3a06e35b4dafb3537298bedd3d3b11,34252817,   * @see https://stackoverflow.com/questions/34252817/handlebarsjs-check-if-a-string-is-equal-to-a-value
4d6bcf8a2c4460ed32258dd22c607e3e4702bb54,14853974,	//! @see http://stackoverflow.com/a/14853974
eb9b51d84d7252d76e817771e5f044bd6330df52,179085,        - http://stackoverflow.com/questions/179085/multiple-indexes-vs-multi-column-indexes
85d74c5b94c475878c623d2c1e4436027fa88da0,17347254,    // http://stackoverflow.com/questions/17347254/why-is-allocation-and-deallocation-of-stdvector-slower-than-dynamic-array-on-m
c5e20888bc4d19f9296feed8a642c1918369f974,30209750,            # http://stackoverflow.com/a/30209750/125349
53a76e27d176ad6fd462fe915fdf9382b87955a9,2674489,//solution from http://stackoverflow.com/questions/2674489/spreadsheet-excel-writer-data-output-is-damaged
a152754e00b24339a01ea8af8d3a07c9b30c2637,3330919,        // http://stackoverflow.com/a/3330919)
fcfc1899fdd8839fa5d1a1eca02d97aa47b8bda3,1506337,"<span class=""sourceLineNo"">679</span>     * Credit goes to user Joren on StackOverflow, http://stackoverflow.com/a/1506337<a name=""line.679""></a>"
e4b8f83c64eaf166269e951712533cbfc152ec09,9457233,# http://stackoverflow.com/questions/9457233/unlimited-bash-history
8140df225689fb854dc7f357a56712fd86aafd48,4922867,    http://stackoverflow.com/questions/4922867/junit-xml-format-specification-that-hudson-supports
4b3e92722bec891942115ce74c8c0094f088a877,44450533,# https://stackoverflow.com/questions/44450533/difference-between-testcase-and-transactiontestcase-classes-in-django-test
66ab742015daae5953c877fe19cf4cc0bd67eb97,7973461,    #       http://stackoverflow.com/questions/7973461/django-aggregation-does-excessive-group-by-clauses
a536c913fda8a9dce54dde6843d047e68c92d9b4,23023650,Refer to this [StackOverflow](http://stackoverflow.com/questions/23023650/is-it-possible-to-pass-a-flag-to-gulp-to-have-it-run-tasks-in-different-ways) link for how to add task specific flags
ffb1e1ec6f596ddf1122959cbaccb4d6cbfa07a2,105034,     * http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
98ca008545e0f13dc9355265df0ae40852fac0e1,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
963843b2f84b9a1d405ba000ad88b1a65543282b,2559759,        // http://stackoverflow.com/questions/2559759/how-do-i-convert-camelcase-into-human-readable-names-in-java
7ff1ad83f3eb867dbda08abce81c86311ab81425,3330919,        // http://stackoverflow.com/a/3330919)
1e3d13cfb4c6e764f1cae0fbd2146d1ee34ba6fb,5919996,/* http://stackoverflow.com/questions/5919996/how-to-detect-reliably-mac-os-x-ios-linux-windows-in-c-preprocessor */
71245cfb14425cf0b514d1c9ef22472c7fecc324,12429133,		// See http://stackoverflow.com/a/12429133/2104976
be0b71af6d9e8e491fc739509a6acad0c872f2ad,1978049,            // http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this
154efa0fb8d6f79c203683ebc9379b5b0e949828,12949590,    // http://stackoverflow.com/questions/12949590/how-to-detach-event-in-ie-6-7-8-9-using-javascript
04f47de9ceb651cae3afe5dff7e85662565c5c0f,1197401,    // http://stackoverflow.com/questions/1197401/how-can-i-get-the-element-the-caret-is-in-with-javascript-when-using-contentedi
d48f356786b2e1b98a3b034a930ac57891a01a7c,25453159,      // see http://stackoverflow.com/questions/25453159
415370682f0e534f4c6130457b1cd329acec04b0,25698007,"    ""link"": ""http://stackoverflow.com/questions/25698007/concatenate-binary-bit-sized-strings"","
bce042f057b7016e0398f3a8799b51c2eab2029e,39675445,    /// http://stackoverflow.com/questions/39675445/reachability-returns-false-for-cellular-network-in-ios-swift
c3ef61135baeb38b54c3b7fee777f7e14b9f559b,8318911,"9570461,story,,,2,1,telegato,""Why does HTML think “chucknorris” is a color"",http://stackoverflow.com/questions/8318911/why-does-html-think-chucknorris-is-a-color,,1432047260"
0ec0832d15d46dd7fa834b26badc0d70b6dbc4f9,10941249,Relevant [Stack Overflow discussion](http://stackoverflow.com/questions/10941249/separate-rest-json-api-server-and-client) with other architecture options.
80750b99ad5e947c174d08abffe01a418bdf3c99,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
b34b502069cb99df5d29de86061eff506eebd405,4285627,        // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
355754d7acb4d2e63c83234e2ef70ea7dc82a8a1,15981198,"5557986,story,,,2,0,wslh,""Javascript standalone library for handling HTTP cookies on a personal container?"",http://stackoverflow.com/questions/15981198/looking-for-a-standalone-library-for-handling-http-cookies-on-a-personal-contain,,1366120014"
a39d05ef109072ef311d16f8984ecb5b1a8ec974,7634346,        // As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event
b25e67a4d60de238bac3029109d91266025f0d82,37628,0;360;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;area_51;0.0;0.006429277942631058;1.0;1.0064292779426312;0.0;0
e65c62dad4d8ac935313b15c599c7e837db5518a,4965335,	 * http://stackoverflow.com/questions/4965335/how-to-print-binary-tree-diagram
47f4f2bdc4480ab601ceb6b166d911f764e0dc50,2510434,    // http://stackoverflow.com/questions/2510434/format-bytes-to-kilobytes-megabytes-gigabytes
af01a7941136ef659b6aab4b0c9f66a0c0f4f171,5448545,http://stackoverflow.com/questions/5448545/how-to-retrieve-get-parameters-from-javascript
194ca5dcb8a2c4184363def970c711421b1908b0,9882716,"    ""// packing code from here http://stackoverflow.com/questions/9882716/packing-float-into-vec4-how-does-this-code-work"","
7d789cd91fd32bf2657b3b5cf2e73388ebdd873f,16926725,https://stackoverflow.com/questions/16926725/audio-speed-changes-on-converting-wav-to-mp3
d39bd32c579994358d4d41345676a3b858993e2b,3393612,"You can cancel the timer, and even pass both positional and keyword arguments directly to the object. This gives us the ability to easily wait a delay then call the function. However, what if you want to run the function multiple times on an interval? The simple answer is have your function, when run, create a new timer object. However, your main thread then loses control of its hook to the timer object, which means that you can't cancel the interval (and your program will never terminate)! My method is personalized from an answer to the Stack Overflow question: &ldquo;[Run certain code every n seconds](http://stackoverflow.com/questions/3393612/run-certain-code-every-n-seconds)&rdquo; and is as follows:"
36427a4669fa09fec01c1d15210ab7cfa57b176e,2117523, *     Sourced from: http://stackoverflow.com/a/2117523/4949715
2616c2aa99ff853b57394e8af802000f08ad1606,24601806,# https://stackoverflow.com/questions/24601806/got-permission-denied-when-emulating-sh-under-zsh
8fea487fe73e942d288e43a082668d85f3ce33f8,7167553 18082,"{""version"":3,""file"":""ractive.min.js"",""sources"":[""ractive.js""],""sourcesContent"":[""/*\n\tRactive.js v0.9.0-edge\n\tSat Feb 11 2017 20:26:06 GMT+0000 (UTC) - commit 597de063175a1b7309143b9b8fc21b5caf2a11bb\n\n\thttp://ractivejs.org\n\thttp://twitter.com/RactiveJS\n\n\tReleased under the MIT License.\n*/\n\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t((function() { var current = global.Ractive; var next = factory(); next.noConflict = function() { global.Ractive = current; return next; }; return global.Ractive = next; })());\n}(this, (function () { 'use strict';\n\nvar defaults = {\n\t// render placement:\n\tel:                     void 0,\n\tappend:                 false,\n\tdelegate:               true,\n\n\t// template:\n\ttemplate:               null,\n\n\t// parse:\n\tdelimiters:             [ '{{', '}}' ],\n\ttripleDelimiters:       [ '{{{', '}}}' ],\n\tstaticDelimiters:       [ '[[', ']]' ],\n\tstaticTripleDelimiters: [ '[[[', ']]]' ],\n\tcsp:                    true,\n\tinterpolate:            false,\n\tpreserveWhitespace:     false,\n\tsanitize:               false,\n\tstripComments:          true,\n\tcontextLines:           0,\n\n\t// data & binding:\n\tdata:                   {},\n\tcomputed:               {},\n\tsyncComputedChildren:   false,\n\tresolveInstanceMembers: true,\n\twarnAboutAmbiguity:     false,\n\tmagic:                  false,\n\tmodifyArrays:           false,\n\tadapt:                  [],\n\tisolated:               false,\n\ttwoway:                 true,\n\tlazy:                   false,\n\n\t// transitions:\n\tnoIntro:                false,\n\tnoOutro:                false,\n\ttransitionsEnabled:     true,\n\tcomplete:               void 0,\n\tnestedTransitions:      true,\n\n\t// css:\n\tcss:                    null,\n\tnoCssTransform:         false\n};\n\n// These are a subset of the easing equations found at\n// https://raw.github.com/danro/easing-js - license info\n// follows:\n\n// --------------------------------------------------\n// easing.js v0.5.4\n// Generic set of easing functions with AMD support\n// https://github.com/danro/easing-js\n// This code may be freely distributed under the MIT license\n// http://danro.mit-license.org/\n// --------------------------------------------------\n// All functions adapted from Thomas Fuchs & Jeremy Kahn\n// Easing Equations (c) 2003 Robert Penner, BSD license\n// https://raw.github.com/danro/easing-js/master/LICENSE\n// --------------------------------------------------\n\n// In that library, the functions named easeIn, easeOut, and\n// easeInOut below are named easeInCubic, easeOutCubic, and\n// (you guessed it) easeInOutCubic.\n//\n// You can add additional easing functions to this list, and they\n// will be globally available.\n\n\nvar easing = {\n\tlinear: function linear ( pos ) { return pos; },\n\teaseIn: function easeIn ( pos ) { return Math.pow( pos, 3 ); },\n\teaseOut: function easeOut ( pos ) { return ( Math.pow( ( pos - 1 ), 3 ) + 1 ); },\n\teaseInOut: function easeInOut ( pos ) {\n\t\tif ( ( pos /= 0.5 ) < 1 ) { return ( 0.5 * Math.pow( pos, 3 ) ); }\n\t\treturn ( 0.5 * ( Math.pow( ( pos - 2 ), 3 ) + 2 ) );\n\t}\n};\n\nvar toString$1$1 = Object.prototype.toString;\n\n\nfunction isEqual ( a, b ) {\n\tif ( a === null && b === null ) {\n\t\treturn true;\n\t}\n\n\tif ( typeof a === 'object' || typeof b === 'object' ) {\n\t\treturn false;\n\t}\n\n\treturn a === b;\n}\n\n// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\nfunction isNumeric ( thing ) {\n\treturn !isNaN( parseFloat( thing ) ) && isFinite( thing );\n}\n\nfunction isObject ( thing ) {\n\treturn ( thing && toString$1$1.call( thing ) === '[object Object]' );\n}\n\nfunction isObjectLike ( thing ) {\n\tif ( !thing ) { return false; }\n\tvar type = typeof thing;\n\tif ( type === 'object' || type === 'function' ) { return true; }\n}\n\n/* eslint no-console:\""off\"" */\nvar win = typeof window !== 'undefined' ? window : null;\nvar doc = win ? document : null;\nvar isClient = !!doc;\nvar hasConsole = ( typeof console !== 'undefined' && typeof console.warn === 'function' && typeof console.warn.apply === 'function' );\n\nvar magic;\ntry {\n\tObject.defineProperty({}, 'test', { value: 0 });\n\tmagic = true;\n} catch ( e ) {\n\tmagic = false;\n}\n\nvar svg = doc ?\n\tdoc.implementation.hasFeature( 'http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1' ) :\n\tfalse;\n\nvar vendors = [ 'o', 'ms', 'moz', 'webkit' ];\n\nvar noop = function () {};\n\n/* global console */\n/* eslint no-console:\""off\"" */\n\nvar alreadyWarned = {};\nvar log;\nvar printWarning;\nvar welcome;\n\nif ( hasConsole ) {\n\tvar welcomeIntro = [\n\t\t\""%cRactive.js %c0.9.0-edge-597de063175a1b7309143b9b8fc21b5caf2a11bb %cin debug mode, %cmore...\"",\n\t\t'color: rgb(114, 157, 52); font-weight: normal;',\n\t\t'color: rgb(85, 85, 85); font-weight: normal;',\n\t\t'color: rgb(85, 85, 85); font-weight: normal;',\n\t\t'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n\t];\n\tvar welcomeMessage = \""You're running Ractive 0.9.0-edge-597de063175a1b7309143b9b8fc21b5caf2a11bb in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\\n\\nTo disable debug mode, add this line at the start of your app:\\n  Ractive.DEBUG = false;\\n\\nTo disable debug mode when your app is minified, add this snippet:\\n  Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\\n\\nGet help and support:\\n  http://docs.ractivejs.org\\n  http://stackoverflow.com/questions/tagged/ractivejs\\n  http://groups.google.com/forum/#!forum/ractive-js\\n  http://twitter.com/ractivejs\\n\\nFound a bug? Raise an issue:\\n  https://github.com/ractivejs/ractive/issues\\n\\n\"";\n\n\twelcome = function () {\n\t\tif ( Ractive.WELCOME_MESSAGE === false ) {\n\t\t\twelcome = noop;\n\t\t\treturn;\n\t\t}\n\t\tvar message = 'WELCOME_MESSAGE' in Ractive ? Ractive.WELCOME_MESSAGE : welcomeMessage;\n\t\tvar hasGroup = !!console.groupCollapsed;\n\t\tif ( hasGroup ) { console.groupCollapsed.apply( console, welcomeIntro ); }\n\t\tconsole.log( message );\n\t\tif ( hasGroup ) {\n\t\t\tconsole.groupEnd( welcomeIntro );\n\t\t}\n\n\t\twelcome = noop;\n\t};\n\n\tprintWarning = function ( message, args ) {\n\t\twelcome();\n\n\t\t// extract information about the instance this message pertains to, if applicable\n\t\tif ( typeof args[ args.length - 1 ] === 'object' ) {\n\t\t\tvar options = args.pop();\n\t\t\tvar ractive = options ? options.ractive : null;\n\n\t\t\tif ( ractive ) {\n\t\t\t\t// if this is an instance of a component that we know the name of, add\n\t\t\t\t// it to the message\n\t\t\t\tvar name;\n\t\t\t\tif ( ractive.component && ( name = ractive.component.name ) ) {\n\t\t\t\t\tmessage = \""<\"" + name + \""> \"" + message;\n\t\t\t\t}\n\n\t\t\t\tvar node;\n\t\t\t\tif ( node = ( options.node || ( ractive.fragment && ractive.fragment.rendered && ractive.find( '*' ) ) ) ) {\n\t\t\t\t\targs.push( node );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn.apply( console, [ '%cRactive.js: %c' + message, 'color: rgb(114, 157, 52);', 'color: rgb(85, 85, 85);' ].concat( args ) );\n\t};\n\n\tlog = function () {\n\t\tconsole.log.apply( console, arguments );\n\t};\n} else {\n\tprintWarning = log = welcome = noop;\n}\n\nfunction format ( message, args ) {\n\treturn message.replace( /%s/g, function () { return args.shift(); } );\n}\n\nfunction fatal ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\tthrow new Error( message );\n}\n\nfunction logIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\tlog.apply( null, arguments );\n\t}\n}\n\nfunction warn ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\tprintWarning( message, args );\n}\n\nfunction warnOnce ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\n\tif ( alreadyWarned[ message ] ) {\n\t\treturn;\n\t}\n\n\talreadyWarned[ message ] = true;\n\tprintWarning( message, args );\n}\n\nfunction warnIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\twarn.apply( null, arguments );\n\t}\n}\n\nfunction warnOnceIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\twarnOnce.apply( null, arguments );\n\t}\n}\n\n// Error messages that are used (or could be) in multiple places\nvar badArguments = 'Bad arguments';\nvar noRegistryFunctionReturn = 'A function was specified for \""%s\"" %s, but no %s was returned';\nvar missingPlugin = function ( name, type ) { return (\""Missing \\\""\"" + name + \""\\\"" \"" + type + \"" plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#\"" + type + \""s\""); };\n\nfunction findInViewHierarchy ( registryName, ractive, name ) {\n\tvar instance = findInstance( registryName, ractive, name );\n\treturn instance ? instance[ registryName ][ name ] : null;\n}\n\nfunction findInstance ( registryName, ractive, name ) {\n\twhile ( ractive ) {\n\t\tif ( name in ractive[ registryName ] ) {\n\t\t\treturn ractive;\n\t\t}\n\n\t\tif ( ractive.isolated ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tractive = ractive.parent;\n\t}\n}\n\nfunction interpolate ( from, to, ractive, type ) {\n\tif ( from === to ) { return null; }\n\n\tif ( type ) {\n\t\tvar interpol = findInViewHierarchy( 'interpolators', ractive, type );\n\t\tif ( interpol ) { return interpol( from, to ) || null; }\n\n\t\tfatal( missingPlugin( type, 'interpolator' ) );\n\t}\n\n\treturn interpolators.number( from, to ) ||\n\t       interpolators.array( from, to ) ||\n\t       interpolators.object( from, to ) ||\n\t       null;\n}\n\nfunction snap ( to ) {\n\treturn function () { return to; };\n}\n\nvar interpolators = {\n\tnumber: function number ( from, to ) {\n\t\tif ( !isNumeric( from ) || !isNumeric( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfrom = +from;\n\t\tto = +to;\n\n\t\tvar delta = to - from;\n\n\t\tif ( !delta ) {\n\t\t\treturn function () { return from; };\n\t\t}\n\n\t\treturn function ( t ) {\n\t\t\treturn from + ( t * delta );\n\t\t};\n\t},\n\n\tarray: function array ( from, to ) {\n\t\tvar len, i;\n\n\t\tif ( !Array.isArray( from ) || !Array.isArray( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar intermediate = [];\n\t\tvar interpolators = [];\n\n\t\ti = len = Math.min( from.length, to.length );\n\t\twhile ( i-- ) {\n\t\t\tinterpolators[i] = interpolate( from[i], to[i] );\n\t\t}\n\n\t\t// surplus values - don't interpolate, but don't exclude them either\n\t\tfor ( i=len; i<from.length; i+=1 ) {\n\t\t\tintermediate[i] = from[i];\n\t\t}\n\n\t\tfor ( i=len; i<to.length; i+=1 ) {\n\t\t\tintermediate[i] = to[i];\n\t\t}\n\n\t\treturn function ( t ) {\n\t\t\tvar i = len;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tintermediate[i] = interpolators[i]( t );\n\t\t\t}\n\n\t\t\treturn intermediate;\n\t\t};\n\t},\n\n\tobject: function object ( from, to ) {\n\t\tif ( !isObject( from ) || !isObject( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar properties = [];\n\t\tvar intermediate = {};\n\t\tvar interpolators = {};\n\n\t\tfor ( var prop in from ) {\n\t\t\tif ( from.hasOwnProperty( prop ) ) {\n\t\t\t\tif ( to.hasOwnProperty( prop ) ) {\n\t\t\t\t\tproperties.push( prop );\n\t\t\t\t\tinterpolators[ prop ] = interpolate( from[ prop ], to[ prop ] ) || snap( to[ prop ] );\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tintermediate[ prop ] = from[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( var prop$1 in to ) {\n\t\t\tif ( to.hasOwnProperty( prop$1 ) && !from.hasOwnProperty( prop$1 ) ) {\n\t\t\t\tintermediate[ prop$1 ] = to[ prop$1 ];\n\t\t\t}\n\t\t}\n\n\t\tvar len = properties.length;\n\n\t\treturn function ( t ) {\n\t\t\tvar i = len;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar prop = properties[i];\n\n\t\t\t\tintermediate[ prop ] = interpolators[ prop ]( t );\n\t\t\t}\n\n\t\t\treturn intermediate;\n\t\t};\n\t}\n};\n\nfunction addToArray ( array, value ) {\n\tvar index = array.indexOf( value );\n\n\tif ( index === -1 ) {\n\t\tarray.push( value );\n\t}\n}\n\nfunction arrayContains$1 ( array, value ) {\n\tfor ( var i = 0, c = array.length; i < c; i++ ) {\n\t\tif ( array[i] == value ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction arrayContentsMatch ( a, b ) {\n\tvar i;\n\n\tif ( !Array.isArray( a ) || !Array.isArray( b ) ) {\n\t\treturn false;\n\t}\n\n\tif ( a.length !== b.length ) {\n\t\treturn false;\n\t}\n\n\ti = a.length;\n\twhile ( i-- ) {\n\t\tif ( a[i] !== b[i] ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction ensureArray ( x ) {\n\tif ( typeof x === 'string' ) {\n\t\treturn [ x ];\n\t}\n\n\tif ( x === undefined ) {\n\t\treturn [];\n\t}\n\n\treturn x;\n}\n\nfunction lastItem ( array ) {\n\treturn array[ array.length - 1 ];\n}\n\nfunction removeFromArray$1 ( array, member ) {\n\tif ( !array ) {\n\t\treturn;\n\t}\n\n\tvar index = array.indexOf( member );\n\n\tif ( index !== -1 ) {\n\t\tarray.splice( index, 1 );\n\t}\n}\n\nfunction combine () {\n\tvar arrays = [], len = arguments.length;\n\twhile ( len-- ) arrays[ len ] = arguments[ len ];\n\n\tvar res = arrays.concat.apply( [], arrays );\n\tvar i = res.length;\n\twhile ( i-- ) {\n\t\tvar idx = res.indexOf( res[i] );\n\t\tif ( ~idx && idx < i ) { res.splice( i, 1 ); }\n\t}\n\n\treturn res;\n}\n\nfunction toArray ( arrayLike ) {\n\tvar array = [];\n\tvar i = arrayLike.length;\n\twhile ( i-- ) {\n\t\tarray[i] = arrayLike[i];\n\t}\n\n\treturn array;\n}\n\nfunction findMap ( array, fn ) {\n\tvar len = array.length;\n\tfor ( var i = 0; i < len; i++ ) {\n\t\tvar result = fn( array[i] );\n\t\tif ( result ) { return result; }\n\t}\n}\n\nvar TransitionManager = function TransitionManager ( callback, parent ) {\n\tthis.callback = callback;\n\tthis.parent = parent;\n\n\tthis.intros = [];\n\tthis.outros = [];\n\n\tthis.children = [];\n\tthis.totalChildren = this.outroChildren = 0;\n\n\tthis.detachQueue = [];\n\tthis.outrosComplete = false;\n\n\tif ( parent ) {\n\t\tparent.addChild( this );\n\t}\n};\n\nTransitionManager.prototype.add = function add ( transition ) {\n\tvar list = transition.isIntro ? this.intros : this.outros;\n\ttransition.starting = true;\n\tlist.push( transition );\n};\n\nTransitionManager.prototype.addChild = function addChild ( child ) {\n\tthis.children.push( child );\n\n\tthis.totalChildren += 1;\n\tthis.outroChildren += 1;\n};\n\nTransitionManager.prototype.decrementOutros = function decrementOutros () {\n\tthis.outroChildren -= 1;\n\tcheck( this );\n};\n\nTransitionManager.prototype.decrementTotal = function decrementTotal () {\n\tthis.totalChildren -= 1;\n\tcheck( this );\n};\n\nTransitionManager.prototype.detachNodes = function detachNodes () {\n\tthis.detachQueue.forEach( detach$1 );\n\tthis.children.forEach( _detachNodes );\n};\n\nTransitionManager.prototype.ready = function ready () {\n\tif ( this.detachQueue.length ) { detachImmediate( this ); }\n};\n\nTransitionManager.prototype.remove = function remove ( transition ) {\n\tvar list = transition.isIntro ? this.intros : this.outros;\n\tremoveFromArray$1( list, transition );\n\tcheck( this );\n};\n\nTransitionManager.prototype.start = function start () {\n\tthis.children.forEach( function (c) { return c.start(); } );\n\tthis.intros.concat( this.outros ).forEach( function (t) { return t.start(); } );\n\tthis.ready = true;\n\tcheck( this );\n};\n\nfunction detach$1 ( element ) {\n\telement.detach();\n}\n\nfunction _detachNodes ( tm ) { // _ to avoid transpiler quirk\n\ttm.detachNodes();\n}\n\nfunction check ( tm ) {\n\tif ( !tm.ready || tm.outros.length || tm.outroChildren ) { return; }\n\n\t// If all outros are complete, and we haven't already done this,\n\t// we notify the parent if there is one, otherwise\n\t// start detaching nodes\n\tif ( !tm.outrosComplete ) {\n\t\ttm.outrosComplete = true;\n\n\t\tif ( tm.parent && !tm.parent.outrosComplete ) {\n\t\t\ttm.parent.decrementOutros( tm );\n\t\t} else {\n\t\t\ttm.detachNodes();\n\t\t}\n\t}\n\n\t// Once everything is done, we can notify parent transition\n\t// manager and call the callback\n\tif ( !tm.intros.length && !tm.totalChildren ) {\n\t\tif ( typeof tm.callback === 'function' ) {\n\t\t\ttm.callback();\n\t\t}\n\n\t\tif ( tm.parent && !tm.notifiedTotal ) {\n\t\t\ttm.notifiedTotal = true;\n\t\t\ttm.parent.decrementTotal();\n\t\t}\n\t}\n}\n\n// check through the detach queue to see if a node is up or downstream from a\n// transition and if not, go ahead and detach it\nfunction detachImmediate ( manager ) {\n\tvar queue = manager.detachQueue;\n\tvar outros = collectAllOutros( manager );\n\n\tvar i = queue.length;\n\tvar j = 0;\n\tvar node, trans;\n\tstart: while ( i-- ) {\n\t\tnode = queue[i].node;\n\t\tj = outros.length;\n\t\twhile ( j-- ) {\n\t\t\ttrans = outros[j].element.node;\n\t\t\t// check to see if the node is, contains, or is contained by the transitioning node\n\t\t\tif ( trans === node || trans.contains( node ) || node.contains( trans ) ) { continue start; }\n\t\t}\n\n\t\t// no match, we can drop it\n\t\tqueue[i].detach();\n\t\tqueue.splice( i, 1 );\n\t}\n}\n\nfunction collectAllOutros ( manager, _list ) {\n\tvar list = _list;\n\n\t// if there's no list, we're starting at the root to build one\n\tif ( !list ) {\n\t\tlist = [];\n\t\tvar parent = manager;\n\t\twhile ( parent.parent ) { parent = parent.parent; }\n\t\treturn collectAllOutros( parent, list );\n\t} else {\n\t\t// grab all outros from child managers\n\t\tvar i = manager.children.length;\n\t\twhile ( i-- ) {\n\t\t\tlist = collectAllOutros( manager.children[i], list );\n\t\t}\n\n\t\t// grab any from this manager if there are any\n\t\tif ( manager.outros.length ) { list = list.concat( manager.outros ); }\n\n\t\treturn list;\n\t}\n}\n\nvar batch;\n\nvar runloop = {\n\tstart: function start ( instance ) {\n\t\tvar fulfilPromise;\n\t\tvar promise = new Promise( function (f) { return ( fulfilPromise = f ); } );\n\n\t\tbatch = {\n\t\t\tpreviousBatch: batch,\n\t\t\ttransitionManager: new TransitionManager( fulfilPromise, batch && batch.transitionManager ),\n\t\t\tfragments: [],\n\t\t\ttasks: [],\n\t\t\timmediateObservers: [],\n\t\t\tdeferredObservers: [],\n\t\t\tinstance: instance,\n\t\t\tpromise: promise\n\t\t};\n\n\t\treturn promise;\n\t},\n\n\tend: function end () {\n\t\tflushChanges();\n\n\t\tif ( !batch.previousBatch ) { batch.transitionManager.start(); }\n\n\t\tbatch = batch.previousBatch;\n\t},\n\n\taddFragment: function addFragment ( fragment ) {\n\t\taddToArray( batch.fragments, fragment );\n\t},\n\n\t// TODO: come up with a better way to handle fragments that trigger their own update\n\taddFragmentToRoot: function addFragmentToRoot ( fragment ) {\n\t\tif ( !batch ) { return; }\n\n\t\tvar b = batch;\n\t\twhile ( b.previousBatch ) {\n\t\t\tb = b.previousBatch;\n\t\t}\n\n\t\taddToArray( b.fragments, fragment );\n\t},\n\n\taddObserver: function addObserver ( observer, defer ) {\n\t\taddToArray( defer ? batch.deferredObservers : batch.immediateObservers, observer );\n\t},\n\n\tregisterTransition: function registerTransition ( transition ) {\n\t\ttransition._manager = batch.transitionManager;\n\t\tbatch.transitionManager.add( transition );\n\t},\n\n\t// synchronise node detachments with transition ends\n\tdetachWhenReady: function detachWhenReady ( thing ) {\n\t\tbatch.transitionManager.detachQueue.push( thing );\n\t},\n\n\tscheduleTask: function scheduleTask ( task, postRender ) {\n\t\tvar _batch;\n\n\t\tif ( !batch ) {\n\t\t\ttask();\n\t\t} else {\n\t\t\t_batch = batch;\n\t\t\twhile ( postRender && _batch.previousBatch ) {\n\t\t\t\t// this can't happen until the DOM has been fully updated\n\t\t\t\t// otherwise in some situations (with components inside elements)\n\t\t\t\t// transitions and decorators will initialise prematurely\n\t\t\t\t_batch = _batch.previousBatch;\n\t\t\t}\n\n\t\t\t_batch.tasks.push( task );\n\t\t}\n\t},\n\n\tpromise: function promise () {\n\t\tif ( !batch ) { return Promise.resolve(); }\n\n\t\tvar target = batch;\n\t\twhile ( target.previousBatch ) {\n\t\t\ttarget = target.previousBatch;\n\t\t}\n\n\t\treturn target.promise || Promise.resolve();\n\t}\n};\n\nfunction dispatch$1 ( observer ) {\n\tobserver.dispatch();\n}\n\nfunction flushChanges () {\n\tvar which = batch.immediateObservers;\n\tbatch.immediateObservers = [];\n\twhich.forEach( dispatch$1 );\n\n\t// Now that changes have been fully propagated, we can update the DOM\n\t// and complete other tasks\n\tvar i = batch.fragments.length;\n\tvar fragment;\n\n\twhich = batch.fragments;\n\tbatch.fragments = [];\n\n\twhile ( i-- ) {\n\t\tfragment = which[i];\n\t\tfragment.update();\n\t}\n\n\tbatch.transitionManager.ready();\n\n\twhich = batch.deferredObservers;\n\tbatch.deferredObservers = [];\n\twhich.forEach( dispatch$1 );\n\n\tvar tasks = batch.tasks;\n\tbatch.tasks = [];\n\n\tfor ( i = 0; i < tasks.length; i += 1 ) {\n\t\ttasks[i]();\n\t}\n\n\t// If updating the view caused some model blowback - e.g. a triple\n\t// containing <option> elements caused the binding on the <select>\n\t// to update - then we start over\n\tif ( batch.fragments.length || batch.immediateObservers.length || batch.deferredObservers.length || batch.tasks.length ) { return flushChanges(); }\n}\n\nvar refPattern = /\\[\\s*(\\*|[0-9]|[1-9][0-9]+)\\s*\\]/g;\nvar splitPattern = /([^\\\\](?:\\\\\\\\)*)\\./;\nvar escapeKeyPattern = /\\\\|\\./g;\nvar unescapeKeyPattern = /((?:\\\\)+)\\1|\\\\(\\.)/g;\n\nfunction escapeKey ( key ) {\n\tif ( typeof key === 'string' ) {\n\t\treturn key.replace( escapeKeyPattern, '\\\\$&' );\n\t}\n\n\treturn key;\n}\n\nfunction normalise ( ref ) {\n\treturn ref ? ref.replace( refPattern, '.$1' ) : '';\n}\n\nfunction splitKeypath ( keypath ) {\n\tvar result = [];\n\tvar match;\n\n\tkeypath = normalise( keypath );\n\n\twhile ( match = splitPattern.exec( keypath ) ) {\n\t\tvar index = match.index + match[1].length;\n\t\tresult.push( keypath.substr( 0, index ) );\n\t\tkeypath = keypath.substr( index + 1 );\n\t}\n\n\tresult.push( keypath );\n\n\treturn result;\n}\n\nfunction unescapeKey ( key ) {\n\tif ( typeof key === 'string' ) {\n\t\treturn key.replace( unescapeKeyPattern, '$1$2' );\n\t}\n\n\treturn key;\n}\n\nfunction set$1 ( ractive, pairs, options ) {\n\tvar deep = options && options.deep;\n\tvar shuffle = options && options.shuffle;\n\tvar promise = runloop.start( ractive, true );\n\n\tvar i = pairs.length;\n\twhile ( i-- ) {\n\t\tvar model = pairs[i][0];\n\t\tvar value = pairs[i][1];\n\t\tvar keypath = pairs[i][2];\n\n\t\tif ( !model ) {\n\t\t\trunloop.end();\n\t\t\tthrow new Error( (\""Failed to set invalid keypath '\"" + keypath + \""'\"") );\n\t\t}\n\n\t\tif ( deep ) { deepSet( model, value ); }\n\t\telse if ( shuffle ) {\n\t\t\tvar array = value;\n\t\t\tvar target = model.get();\n\t\t\t// shuffle target array with itself\n\t\t\tif ( !array ) { array = target; }\n\n\t\t\tif ( !Array.isArray( target ) || !Array.isArray( array ) ) {\n\t\t\t\tthrow new Error( 'You cannot merge an array with a non-array' );\n\t\t\t}\n\n\t\t\tvar comparator = getComparator( shuffle );\n\t\t\tmodel.merge( array, comparator );\n\t\t} else { model.set( value ); }\n\t}\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nvar star = /\\*/;\nfunction gather ( ractive, keypath, base ) {\n\tif ( !base && keypath[0] === '.' ) {\n\t\twarnIfDebug( \""Attempted to set a relative keypath from a non-relative context. You can use a getNodeInfo or event object to set relative keypaths.\"" );\n\t\treturn [];\n\t}\n\n\tvar model = base || ractive.viewmodel;\n\tif ( star.test( keypath ) ) {\n\t\treturn model.findMatches( splitKeypath( keypath ) );\n\t} else {\n\t\treturn [ model.joinAll( splitKeypath( keypath ) ) ];\n\t}\n}\n\nfunction build ( ractive, keypath, value ) {\n\tvar sets = [];\n\n\t// set multiple keypaths in one go\n\tif ( isObject( keypath ) ) {\n\t\tvar loop = function ( k ) {\n\t\t\tif ( keypath.hasOwnProperty( k ) ) {\n\t\t\t\tsets.push.apply( sets, gather( ractive, k ).map( function (m) { return [ m, keypath[k], k ]; } ) );\n\t\t\t}\n\t\t};\n\n\t\tfor ( var k in keypath ) loop( k );\n\n\t}\n\t// set a single keypath\n\telse {\n\t\tsets.push.apply( sets, gather( ractive, keypath ).map( function (m) { return [ m, value, keypath ]; } ) );\n\t}\n\n\treturn sets;\n}\n\nvar deepOpts = { virtual: false };\nfunction deepSet( model, value ) {\n\tvar dest = model.get( false, deepOpts );\n\n\t// if dest doesn't exist, just set it\n\tif ( dest == null || typeof value !== 'object' ) { return model.set( value ); }\n\tif ( typeof dest !== 'object' ) { return model.set( value ); }\n\n\tfor ( var k in value ) {\n\t\tif ( value.hasOwnProperty( k ) ) {\n\t\t\tdeepSet( model.joinKey( k ), value[k] );\n\t\t}\n\t}\n}\n\nvar comparators = {};\nfunction getComparator ( option ) {\n\tif ( option === true ) { return null; } // use existing arrays\n\tif ( typeof option === 'function' ) { return option; }\n\n\tif ( typeof option === 'string' ) {\n\t\treturn comparators[ option ] || ( comparators[ option ] = function (thing) { return thing[ option ]; } );\n\t}\n\n\tthrow new Error( 'If supplied, options.compare must be a string, function, `1`, or `true`' ); // TODO link to docs\n}\n\nvar errorMessage = 'Cannot add to a non-numeric value';\n\nfunction add$1 ( ractive, keypath, d ) {\n\tif ( typeof keypath !== 'string' || !isNumeric( d ) ) {\n\t\tthrow new Error( 'Bad arguments' );\n\t}\n\n\tvar sets = build( ractive, keypath, d );\n\n\treturn set$1( ractive, sets.map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar add = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( add ) || !isNumeric( value ) ) { throw new Error( errorMessage ); }\n\t\treturn [ model, value + add ];\n\t}));\n}\n\nfunction Ractive$add ( keypath, d ) {\n\treturn add$1( this, keypath, ( d === undefined ? 1 : +d ) );\n}\n\nvar noAnimation = Promise.resolve();\nObject.defineProperty( noAnimation, 'stop', { value: noop });\n\nvar linear$1 = easing.linear;\n\nfunction getOptions ( options, instance ) {\n\toptions = options || {};\n\n\tvar easing$$1;\n\tif ( options.easing ) {\n\t\teasing$$1 = typeof options.easing === 'function' ?\n\t\t\toptions.easing :\n\t\t\tinstance.easing[ options.easing ];\n\t}\n\n\treturn {\n\t\teasing: easing$$1 || linear$1,\n\t\tduration: 'duration' in options ? options.duration : 400,\n\t\tcomplete: options.complete || noop,\n\t\tstep: options.step || noop\n\t};\n}\n\nfunction animate$1 ( ractive, model, to, options ) {\n\toptions = getOptions( options, ractive );\n\tvar from = model.get();\n\n\t// don't bother animating values that stay the same\n\tif ( isEqual( from, to ) ) {\n\t\toptions.complete( options.to );\n\t\treturn noAnimation; // TODO should this have .then and .catch methods?\n\t}\n\n\tvar interpolator = interpolate( from, to, ractive, options.interpolator );\n\n\t// if we can't interpolate the value, set it immediately\n\tif ( !interpolator ) {\n\t\trunloop.start();\n\t\tmodel.set( to );\n\t\trunloop.end();\n\n\t\treturn noAnimation;\n\t}\n\n\treturn model.animate( from, to, options, interpolator );\n}\n\nfunction Ractive$animate ( keypath, to, options ) {\n\tif ( typeof keypath === 'object' ) {\n\t\tvar keys = Object.keys( keypath );\n\n\t\tthrow new Error( (\""ractive.animate(...) no longer supports objects. Instead of ractive.animate({\\n  \"" + (keys.map( function (key) { return (\""'\"" + key + \""': \"" + (keypath[ key ])); } ).join( '\\n  ' )) + \""\\n}, {...}), do\\n\\n\"" + (keys.map( function (key) { return (\""ractive.animate('\"" + key + \""', \"" + (keypath[ key ]) + \"", {...});\""); } ).join( '\\n' )) + \""\\n\"") );\n\t}\n\n\n\treturn animate$1( this, this.viewmodel.joinAll( splitKeypath( keypath ) ), to, options );\n}\n\nfunction enqueue ( ractive, event ) {\n\tif ( ractive.event ) {\n\t\tractive._eventQueue.push( ractive.event );\n\t}\n\n\tractive.event = event;\n}\n\nfunction dequeue ( ractive ) {\n\tif ( ractive._eventQueue.length ) {\n\t\tractive.event = ractive._eventQueue.pop();\n\t} else {\n\t\tractive.event = null;\n\t}\n}\n\nvar initStars = {};\nvar bubbleStars = {};\n\n// cartesian product of name parts and stars\n// adjusted appropriately for special cases\nfunction variants ( name, initial ) {\n\tvar map = initial ? initStars : bubbleStars;\n\tif ( map[ name ] ) { return map[ name ]; }\n\n\tvar parts = name.split( '.' );\n\tvar result = [];\n\tvar base = false;\n\n\t// initial events the implicit namespace of 'this'\n\tif ( initial ) {\n\t\tparts.unshift( 'this' );\n\t\tbase = true;\n\t}\n\n\t// use max - 1 bits as a bitmap to pick a part or a *\n\t// need to skip the full star case if the namespace is synthetic\n\tvar max = Math.pow( 2, parts.length ) - ( initial ? 1 : 0 );\n\tfor ( var i = 0; i < max; i++ ) {\n\t\tvar join = [];\n\t\tfor ( var j = 0; j < parts.length; j++ ) {\n\t\t\tjoin.push( 1 & ( i >> j ) ? '*' : parts[j] );\n\t\t}\n\t\tresult.unshift( join.join( '.' ) );\n\t}\n\n\tif ( base ) {\n\t\t// include non-this-namespaced versions\n\t\tif ( parts.length > 2 ) {\n\t\t\tresult.push.apply( result, variants( name, false ) );\n\t\t} else {\n\t\t\tresult.push( '*' );\n\t\t\tresult.push( name );\n\t\t}\n\t}\n\n\tmap[ name ] = result;\n\treturn result;\n}\n\nfunction fireEvent ( ractive, eventName, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( !eventName ) { return; }\n\n\tif ( !options.event ) {\n\t\toptions.event = {\n\t\t\tname: eventName,\n\t\t\t// until event not included as argument default\n\t\t\t_noArg: true\n\t\t};\n\t} else {\n\t\toptions.event.name = eventName;\n\t}\n\n\tvar eventNames = ractive._nsSubs ? variants( eventName, true ) : [ '*', eventName ];\n\n\treturn fireEventAs( ractive, eventNames, options.event, options.args, true );\n}\n\nfunction fireEventAs  ( ractive, eventNames, event, args, initialFire ) {\n\tif ( initialFire === void 0 ) initialFire = false;\n\n\tvar bubble = true;\n\n\tif ( initialFire || ractive._nsSubs ) {\n\t\tenqueue( ractive, event );\n\n\t\tvar i = eventNames.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( eventNames[ i ] in ractive._subs ) {\n\t\t\t\tbubble = notifySubscribers( ractive, ractive._subs[ eventNames[ i ] ], event, args ) && bubble;\n\t\t\t}\n\t\t}\n\n\t\tdequeue( ractive );\n\t}\n\n\tif ( ractive.parent && bubble ) {\n\n\t\tif ( initialFire && ractive.component ) {\n\t\t\tvar fullName = ractive.component.name + '.' + eventNames[ eventNames.length - 1 ];\n\t\t\teventNames = variants( fullName, false );\n\n\t\t\tif ( event && !event.component ) {\n\t\t\t\tevent.component = ractive;\n\t\t\t}\n\t\t}\n\n\t\tbubble = fireEventAs( ractive.parent, eventNames, event, args );\n\t}\n\n\treturn bubble;\n}\n\nfunction notifySubscribers ( ractive, subscribers, event, args ) {\n\tvar originalEvent = null;\n\tvar stopEvent = false;\n\n\tif ( event && !event._noArg ) {\n\t\targs = [ event ].concat( args );\n\t}\n\n\t// subscribers can be modified inflight, e.g. \""once\"" functionality\n\t// so we need to copy to make sure everyone gets called\n\tsubscribers = subscribers.slice();\n\n\tfor ( var i = 0, len = subscribers.length; i < len; i += 1 ) {\n\t\tif ( !subscribers[ i ].off && subscribers[ i ].apply( ractive, args ) === false ) {\n\t\t\tstopEvent = true;\n\t\t}\n\t}\n\n\tif ( event && !event._noArg && stopEvent && ( originalEvent = event.original ) ) {\n\t\toriginalEvent.preventDefault && originalEvent.preventDefault();\n\t\toriginalEvent.stopPropagation && originalEvent.stopPropagation();\n\t}\n\n\treturn !stopEvent;\n}\n\nvar Hook = function Hook ( event ) {\n\tthis.event = event;\n\tthis.method = 'on' + event;\n};\n\nHook.prototype.fire = function fire ( ractive, arg ) {\n\tif ( ractive[ this.method ] ) {\n\t\targ ? ractive[ this.method ]( arg ) : ractive[ this.method ]();\n\t}\n\n\tvar options = { args: [] };\n\tif ( arg ) { options.args.push( arg ); }\n\toptions.args.push( ractive );\n\tfireEvent( ractive, this.event, options );\n};\n\nfunction updateLiveQueries ( element ) {\n\t// Does this need to be added to any live queries?\n\tvar node = element.node;\n\tvar instance = element.ractive;\n\tvar queries = [];\n\tvar remotes = {};\n\tvar remote = instance.component && instance.component.target === false;\n\tvar i;\n\n\tdo {\n\t\tvar liveQueries = instance._liveQueries;\n\n\t\ti = liveQueries.length;\n\t\twhile ( i-- ) {\n\t\t\tvar query = liveQueries[i];\n\n\t\t\tif ( query.test( node ) ) {\n\t\t\t\tqueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( !remote && instance.component && instance.component.target === false ) { remote = true; }\n\t\tremotes[ instance._guid ] = remote;\n\t} while ( instance = instance.parent );\n\n\ti = queries.length;\n\twhile ( i-- ) {\n\t\tvar query$1 = queries[i];\n\t\tif ( query$1.remote || !remotes[ query$1.ractive._guid ] ) {\n\t\t\tquery$1.add( node );\n\t\t\t// keep register of applicable selectors, for when we teardown\n\t\t\telement.liveQueries.push( query$1 );\n\t\t}\n\t}\n}\n\n// TODO it's unfortunate that this has to run every time a\n// component is rendered... is there a better way?\nfunction updateLiveQueries$1 ( component ) {\n\t// Does this need to be added to any live queries?\n\tvar instance = component.ractive;\n\tvar queries = [];\n\tvar remotes = {};\n\tvar remote = component.target === false;\n\tvar i;\n\n\tdo {\n\t\tvar liveQueries = instance._liveComponentQueries;\n\n\t\ti = liveQueries.length;\n\t\twhile ( i-- ) {\n\t\t\tvar query = liveQueries[i];\n\n\t\t\tif ( query.test( component ) ) {\n\t\t\t\tqueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( !remote && instance.component && instance.component.target === false ) { remote = true; }\n\t\tremotes[ instance._guid ] = remote;\n\t} while ( instance = instance.parent );\n\n\ti = queries.length;\n\twhile ( i-- ) {\n\t\tvar query$1 = queries[i];\n\t\tif ( query$1.remote || !remotes[ query$1.ractive._guid ] ) {\n\t\t\tquery$1.add( component.instance );\n\t\t\t// keep register of applicable selectors, for when we teardown\n\t\t\tcomponent.liveQueries.push( query$1 );\n\t\t}\n\t}\n}\n\nfunction findAnchors ( fragment, name ) {\n\tif ( name === void 0 ) name = null;\n\n\tvar res = [];\n\n\tfindAnchorsIn( fragment, name, res );\n\n\treturn res;\n}\n\nfunction findAnchorsIn ( item, name, result ) {\n\tif ( item.isAnchor ) {\n\t\tif ( !name || item.name === name ) {\n\t\t\tresult.push( item );\n\t\t}\n\t} else if ( item.items ) {\n\t\titem.items.forEach( function (i) { return findAnchorsIn( i, name, result ); } );\n\t} else if ( item.iterations ) {\n\t\titem.iterations.forEach( function (i) { return findAnchorsIn( i, name, result ); } );\n\t} else if ( item.fragment && !item.component ) {\n\t\tfindAnchorsIn( item.fragment, name, result );\n\t}\n}\n\nfunction updateAnchors ( instance, name ) {\n\tif ( name === void 0 ) name = null;\n\n\tvar anchors = findAnchors( instance.fragment, name );\n\tvar idxs = {};\n\tvar children = instance._children.byName;\n\n\tanchors.forEach( function (a) {\n\t\tvar name = a.name;\n\t\tif ( !( name in idxs ) ) { idxs[name] = 0; }\n\t\tvar idx = idxs[name];\n\t\tvar child = ( children[name] || [] )[idx];\n\n\t\tif ( child && child.lastBound !== a ) {\n\t\t\tif ( child.lastBound ) { child.lastBound.removeChild( child ); }\n\t\t\ta.addChild( child );\n\t\t}\n\n\t\tidxs[name]++;\n\t});\n}\n\nfunction unrenderChild ( meta ) {\n\tif ( meta.instance.fragment.rendered ) {\n\t\tmeta.shouldDestroy = true;\n\t\tmeta.instance.unrender();\n\t}\n\tmeta.instance.el = null;\n}\n\nvar attachHook = new Hook( 'attachchild' );\n\nfunction attachChild ( child, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tvar children = this._children;\n\n\tif ( child.parent && child.parent !== this ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is already attached to a different instance \"" + (child.parent._guid) + \"". Please detach it from the other instance using detachChild first.\"") ); }\n\telse if ( child.parent ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is already attached to this instance.\"") ); }\n\n\tvar meta = {\n\t\tinstance: child,\n\t\tractive: this,\n\t\tname: options.name || child.constructor.name || 'Ractive',\n\t\tliveQueries: [],\n\t\ttarget: options.target || false,\n\t\tbubble: bubble$1,\n\t\tfindNextNode: findNextNode$1,\n\t\tremoveFromQuery: removeFromQuery$1\n\t};\n\tmeta.nameOption = options.name;\n\n\t// child is managing itself\n\tif ( !meta.target ) {\n\t\tmeta.parentFragment = this.fragment;\n\t\tmeta.external = true;\n\t} else {\n\t\tvar list;\n\t\tif ( !( list = children.byName[ meta.target ] ) ) {\n\t\t\tlist = [];\n\t\t\tthis.set( (\""@this.children.byName.\"" + (meta.target)), list );\n\t\t}\n\t\tvar idx = options.prepend ? 0 : options.insertAt || list.length;\n\t\tlist.splice( idx, 0, meta );\n\t}\n\n\tchild.set({\n\t\t'@this.parent': this,\n\t\t'@this.root': this.root\n\t});\n\tchild.component = meta;\n\tchildren.push( meta );\n\n\tattachHook.fire( child );\n\n\tvar promise = runloop.start( child, true );\n\n\tif ( meta.target ) {\n\t\tunrenderChild( meta );\n\t\tthis.set( (\""@this.children.byName.\"" + (meta.target)), null, { shuffle: true } );\n\t\tupdateAnchors( this, meta.target );\n\t} else {\n\t\tif ( !child.isolated ) { child.viewmodel.attached( this.fragment ); }\n\t\tif ( child.fragment.rendered ) {\n\t\t\tchild.findAll( '*' ).forEach( function (el) { return updateLiveQueries( el._ractive.proxy ); } );\n\t\t\tchild.findAllComponents().forEach( function (cmp) { return updateLiveQueries$1( cmp.component ); } );\n\t\t\tupdateLiveQueries$1( meta );\n\t\t}\n\t}\n\n\trunloop.end();\n\n\tpromise.ractive = child;\n\treturn promise.then( function () { return child; } );\n}\n\nfunction bubble$1 () { runloop.addFragment( this.instance.fragment ); }\n\nfunction removeFromQuery$1 ( query ) {\n\tquery.remove( this.instance );\n\tremoveFromArray$1( this.liveQueries, query );\n}\n\nfunction findNextNode$1 () {\n\tif ( this.anchor ) { return this.anchor.findNextNode(); }\n}\n\nvar detachHook = new Hook( 'detach' );\n\nfunction Ractive$detach () {\n\tif ( this.isDetached ) {\n\t\treturn this.el;\n\t}\n\n\tif ( this.el ) {\n\t\tremoveFromArray$1( this.el.__ractive_instances__, this );\n\t}\n\n\tthis.el = this.fragment.detach();\n\tthis.isDetached = true;\n\n\tdetachHook.fire( this );\n\treturn this.el;\n}\n\nvar detachHook$1 = new Hook( 'detachchild' );\n\nfunction detachChild ( child ) {\n\tvar this$1 = this;\n\n\tvar children = this._children;\n\tvar meta, index;\n\n\tvar i = children.length;\n\twhile ( i-- ) {\n\t\tif ( children[i].instance === child ) {\n\t\t\tindex = i;\n\t\t\tmeta = children[i];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( !meta || child.parent !== this ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is not attached to this instance.\"") ); }\n\n\tvar promise = runloop.start( child, true );\n\n\tif ( meta.anchor ) { meta.anchor.removeChild( meta ); }\n\tif ( !child.isolated ) { child.viewmodel.detached(); }\n\n\trunloop.end();\n\n\tchildren.splice( index, 1 );\n\tif ( meta.target ) {\n\t\tvar list = children.byName[ meta.target ];\n\t\tlist.splice( list.indexOf( meta ), 1 );\n\t\tthis.set( (\""@this.children.byName.\"" + (meta.target)), null, { shuffle: true } );\n\t\tupdateAnchors( this, meta.target );\n\t}\n\tchild.set({\n\t\t'@this.parent': undefined,\n\t\t'@this.root': child\n\t});\n\tchild.component = null;\n\n\tdetachHook$1.fire( child );\n\n\tif ( !meta.target && child.fragment.rendered ) {\n\t\t// keep live queries up to date\n\t\tchild.findAll( '*' ).forEach( function (el) {\n\t\t\tel._ractive.proxy.liveQueries.forEach( function (q) {\n\t\t\t\t// remove from non-self queries\n\t\t\t\tif ( isParent( this$1, q.ractive ) ) { el._ractive.proxy.removeFromQuery( q ); }\n\t\t\t});\n\t\t});\n\n\t\t// keep live component queries up to date\n\t\tchild.findAllComponents().forEach( function (cmp) {\n\t\t\tcmp.component.liveQueries.forEach( function (q) {\n\t\t\t\tif ( isParent( this$1, q.ractive ) ) { cmp.component.removeFromQuery( q ); }\n\t\t\t});\n\t\t});\n\n\t\tmeta.liveQueries.forEach( function (q) { return meta.removeFromQuery( q ); } );\n\t}\n\n\tpromise.ractive = child;\n\treturn promise.then( function () { return child; } );\n}\n\nfunction isParent ( target, check ) {\n\twhile ( target ) {\n\t\tif ( target === check ) { return true; }\n\t\ttarget = target.parent;\n\t}\n}\n\nfunction Ractive$find ( selector, options ) {\n\tvar this$1 = this;\n\tif ( options === void 0 ) options = {};\n\n\tif ( !this.el ) { throw new Error( (\""Cannot call ractive.find('\"" + selector + \""') unless instance is rendered to the DOM\"") ); }\n\n\tvar node = this.fragment.find( selector, options );\n\tif ( node ) { return node; }\n\n\tif ( options.remote ) {\n\t\tfor ( var i = 0; i < this._children.length; i++ ) {\n\t\t\tif ( !this$1._children[i].instance.fragment.rendered ) { continue; }\n\t\t\tnode = this$1._children[i].instance.find( selector, options );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n}\n\nvar html   = 'http://www.w3.org/1999/xhtml';\nvar mathml = 'http://www.w3.org/1998/Math/MathML';\nvar svg$1    = 'http://www.w3.org/2000/svg';\nvar xlink  = 'http://www.w3.org/1999/xlink';\nvar xml    = 'http://www.w3.org/XML/1998/namespace';\nvar xmlns  = 'http://www.w3.org/2000/xmlns';\n\nvar namespaces = { html: html, mathml: mathml, svg: svg$1, xlink: xlink, xml: xml, xmlns: xmlns };\n\nvar createElement;\nvar matches;\nvar div;\nvar methodNames;\nvar unprefixed;\nvar prefixed;\nvar i;\nvar j;\nvar makeFunction;\n\n// Test for SVG support\nif ( !svg ) {\n\tcreateElement = function ( type, ns, extend ) {\n\t\tif ( ns && ns !== html ) {\n\t\t\tthrow 'This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you\\'re trying to render SVG in an older browser. See http://docs.ractivejs.org/latest/svg-and-older-browsers for more information';\n\t\t}\n\n\t\treturn extend ?\n\t\t\tdoc.createElement( type, extend ) :\n\t\t\tdoc.createElement( type );\n\t};\n} else {\n\tcreateElement = function ( type, ns, extend ) {\n\t\tif ( !ns || ns === html ) {\n\t\t\treturn extend ?\n\t\t\t\tdoc.createElement( type, extend ) :\n\t\t\t\tdoc.createElement( type );\n\t\t}\n\n\t\treturn extend ?\n\t\t\tdoc.createElementNS( ns, type, extend ) :\n\t\t\tdoc.createElementNS( ns, type );\n\t};\n}\n\nfunction createDocumentFragment () {\n\treturn doc.createDocumentFragment();\n}\n\nfunction getElement ( input ) {\n\tvar output;\n\n\tif ( !input || typeof input === 'boolean' ) { return; }\n\n\tif ( !win || !doc || !input ) {\n\t\treturn null;\n\t}\n\n\t// We already have a DOM node - no work to do. (Duck typing alert!)\n\tif ( input.nodeType ) {\n\t\treturn input;\n\t}\n\n\t// Get node from string\n\tif ( typeof input === 'string' ) {\n\t\t// try ID first\n\t\toutput = doc.getElementById( input );\n\n\t\t// then as selector, if possible\n\t\tif ( !output && doc.querySelector ) {\n\t\t\toutput = doc.querySelector( input );\n\t\t}\n\n\t\t// did it work?\n\t\tif ( output && output.nodeType ) {\n\t\t\treturn output;\n\t\t}\n\t}\n\n\t// If we've been given a collection (jQuery, Zepto etc), extract the first item\n\tif ( input[0] && input[0].nodeType ) {\n\t\treturn input[0];\n\t}\n\n\treturn null;\n}\n\nif ( !isClient ) {\n\tmatches = null;\n} else {\n\tdiv = createElement( 'div' );\n\tmethodNames = [ 'matches', 'matchesSelector' ];\n\n\tmakeFunction = function ( methodName ) {\n\t\treturn function ( node, selector ) {\n\t\t\treturn node[ methodName ]( selector );\n\t\t};\n\t};\n\n\ti = methodNames.length;\n\n\twhile ( i-- && !matches ) {\n\t\tunprefixed = methodNames[i];\n\n\t\tif ( div[ unprefixed ] ) {\n\t\t\tmatches = makeFunction( unprefixed );\n\t\t} else {\n\t\t\tj = vendors.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\tprefixed = vendors[i] + unprefixed.substr( 0, 1 ).toUpperCase() + unprefixed.substring( 1 );\n\n\t\t\t\tif ( div[ prefixed ] ) {\n\t\t\t\t\tmatches = makeFunction( prefixed );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// IE8...\n\tif ( !matches ) {\n\t\tmatches = function ( node, selector ) {\n\t\t\tvar parentNode, i;\n\n\t\t\tparentNode = node.parentNode;\n\n\t\t\tif ( !parentNode ) {\n\t\t\t\t// empty dummy <div>\n\t\t\t\tdiv.innerHTML = '';\n\n\t\t\t\tparentNode = div;\n\t\t\t\tnode = node.cloneNode();\n\n\t\t\t\tdiv.appendChild( node );\n\t\t\t}\n\n\t\t\tvar nodes = parentNode.querySelectorAll( selector );\n\n\t\t\ti = nodes.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( nodes[i] === node ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nfunction detachNode ( node ) {\n\t// stupid ie\n\tif ( node && typeof node.parentNode !== 'unknown' && node.parentNode ) { // eslint-disable-line valid-typeof\n\t\tnode.parentNode.removeChild( node );\n\t}\n\n\treturn node;\n}\n\nfunction safeToStringValue ( value ) {\n\treturn ( value == null || !value.toString ) ? '' : '' + value;\n}\n\nfunction safeAttributeString ( string ) {\n\treturn safeToStringValue( string )\n\t\t.replace( /&/g, '&amp;' )\n\t\t.replace( /\""/g, '&quot;' )\n\t\t.replace( /'/g, '&#39;' );\n}\n\nfunction sortByDocumentPosition ( node, otherNode ) {\n\tif ( node.compareDocumentPosition ) {\n\t\tvar bitmask = node.compareDocumentPosition( otherNode );\n\t\treturn ( bitmask & 2 ) ? 1 : -1;\n\t}\n\n\t// In old IE, we can piggy back on the mechanism for\n\t// comparing component positions\n\treturn sortByItemPosition( node, otherNode );\n}\n\nfunction sortByItemPosition ( a, b ) {\n\tvar baseA = a.component || a._ractive.proxy;\n\tvar baseB = b.component || b._ractive.proxy;\n\n\t// allow for attached childdren outside the template\n\tif ( baseA.target === false && baseB.target === false ) { return 0; }\n\telse if ( baseA.target === false ) { return 1; }\n\telse if ( baseB.target === false ) { return -1; }\n\n\tvar ancestryA = getAncestry( baseA );\n\tvar ancestryB = getAncestry( baseB );\n\n\tvar oldestA = lastItem( ancestryA );\n\tvar oldestB = lastItem( ancestryB );\n\tvar mutualAncestor;\n\n\t// remove items from the end of both ancestries as long as they are identical\n\t// - the final one removed is the closest mutual ancestor\n\twhile ( oldestA && ( oldestA === oldestB ) ) {\n\t\tancestryA.pop();\n\t\tancestryB.pop();\n\n\t\tmutualAncestor = oldestA;\n\n\t\toldestA = lastItem( ancestryA );\n\t\toldestB = lastItem( ancestryB );\n\t}\n\n\t// now that we have the mutual ancestor, we can find which is earliest\n\toldestA = oldestA.component || oldestA;\n\toldestB = oldestB.component || oldestB;\n\n\tvar fragmentA = oldestA.parentFragment;\n\tvar fragmentB = oldestB.parentFragment;\n\n\t// if both items share a parent fragment, our job is easy\n\tif ( fragmentA === fragmentB ) {\n\t\tvar indexA = fragmentA.items.indexOf( oldestA );\n\t\tvar indexB = fragmentB.items.indexOf( oldestB );\n\n\t\t// if it's the same index, it means one contains the other,\n\t\t// so we see which has the longest ancestry\n\t\treturn ( indexA - indexB ) || ancestryA.length - ancestryB.length;\n\t}\n\n\t// if mutual ancestor is a section, we first test to see which section\n\t// fragment comes first\n\tvar fragments = mutualAncestor.iterations;\n\tif ( fragments ) {\n\t\tvar indexA$1 = fragments.indexOf( fragmentA );\n\t\tvar indexB$1 = fragments.indexOf( fragmentB );\n\n\t\treturn ( indexA$1 - indexB$1 ) || ancestryA.length - ancestryB.length;\n\t}\n\n\tthrow new Error( 'An unexpected condition was met while comparing the position of two components. Please file an issue at https://github.com/ractivejs/ractive/issues - thanks!' );\n}\n\nfunction getParent ( item ) {\n\tvar parentFragment = item.parentFragment;\n\n\tif ( parentFragment ) { return parentFragment.owner; }\n\n\tif ( item.component && ( parentFragment = item.component.parentFragment ) ) {\n\t\treturn parentFragment.owner;\n\t}\n}\n\nfunction getAncestry ( item ) {\n\tvar ancestry = [ item ];\n\tvar ancestor = getParent( item );\n\n\twhile ( ancestor ) {\n\t\tancestry.push( ancestor );\n\t\tancestor = getParent( ancestor );\n\t}\n\n\treturn ancestry;\n}\n\n\nvar Query = function Query ( ractive, selector, live, isComponentQuery ) {\n\tvar this$1 = this;\n\n\tthis.ractive = ractive;\n\tthis.selector = selector;\n\tthis.live = live;\n\tthis.isComponentQuery = isComponentQuery;\n\n\tthis.refs = 1;\n\n\tthis.result = [];\n\tthis.result.cancel = function () { return this$1.cancel(); };\n\n\tthis.dirty = true;\n};\n\nQuery.prototype.add = function add ( item ) {\n\tif ( !~this.result.indexOf( item ) ) {\n\t\tthis.result.push( item );\n\t\tthis.makeDirty();\n\t}\n};\n\nQuery.prototype.cancel = function cancel () {\n\t\tvar this$1 = this;\n\n\tif ( --this.refs ) { return; }\n\n\tthis.cancelled = true;\n\n\tvar liveQueries = this.ractive[ this.isComponentQuery ? '_liveComponentQueries' : '_liveQueries' ];\n\n\tvar index = liveQueries.indexOf( this );\n\n\tif ( index !== -1 ) {\n\t\tliveQueries.splice( index, 1 );\n\t}\n\n\tthis.result.forEach( function (item) {\n\t\titem = this$1.isComponentQuery ? item.component : item._ractive.proxy;\n\t\titem.removeFromQuery( this$1 );\n\t});\n};\n\nQuery.prototype.init = function init () {\n\tthis.dirty = false;\n};\n\nQuery.prototype.makeDirty = function makeDirty () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\n\t\t// Once the DOM has been updated, ensure the query\n\t\t// is correctly ordered\n\t\trunloop.scheduleTask( function () { return this$1.update(); } );\n\t}\n};\n\nQuery.prototype.remove = function remove ( item ) {\n\tif ( !this.cancelled ) {\n\t\tvar index = this.result.indexOf( item );\n\t\tif ( index !== -1 ) { this.result.splice( index, 1 ); }\n\t}\n};\n\nQuery.prototype.update = function update () {\n\tthis.result.sort( this.isComponentQuery ? sortByItemPosition : sortByDocumentPosition );\n\tthis.dirty = false;\n};\n\nQuery.prototype.test = function test ( item ) {\n\treturn this.isComponentQuery ?\n\t\t( !this.selector || item.name === this.selector ) :\n\t\t( item ? matches( item, this.selector ) : null );\n};\n\nfunction getQuery ( ractive, selector, options, component ) {\n\tvar liveQueries = ractive[(\""_live\"" + (component ? 'Component' : '') + \""Queries\"")];\n\tvar query;\n\n\t// Shortcut: if we're maintaining a live query with this\n\t// selector, we don't need to traverse the parallel DOM\n\tquery = liveQueries.find( function (q) { return q.selector === selector && q.remote === options.remote; } );\n\tif ( query ) {\n\t\tif ( options.live ) { query.refs++; }\n\t\t// Either return the exact same query, or (if not live) a snapshot\n\t\treturn { old: options.live ? query.result : query.result.slice() };\n\t}\n\n\tquery = new Query( ractive, selector, !!options.live, component );\n\toptions._query = query;\n\tquery.remote = options.remote;\n\n\t// Add this to the list of live queries Ractive needs to maintain,\n\t// if applicable\n\tif ( query.live ) {\n\t\tliveQueries.push( query );\n\t}\n\n\treturn query;\n}\n\nfunction Ractive$findAll ( selector, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( !this.el ) { throw new Error( (\""Cannot call ractive.findAll('\"" + selector + \""', ...) unless instance is rendered to the DOM\"") ); }\n\n\tvar query = options._query;\n\n\tif ( !query ) {\n\t\tquery = getQuery( this, selector, options, false );\n\t\tif ( query.old ) { return query.old; }\n\t}\n\n\tthis.fragment.findAll( selector, query );\n\n\tif ( query.remote ) {\n\t\t// seach non-fragment children\n\t\tthis._children.forEach( function (c) {\n\t\t\tif ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {\n\t\t\t\tc.instance.findAll( selector, options );\n\t\t\t}\n\t\t});\n\t}\n\n\tquery.init();\n\treturn query.result;\n}\n\nfunction Ractive$findAllComponents ( selector, options ) {\n\tif ( !options && typeof selector === 'object' ) {\n\t\toptions = selector;\n\t\tselector = '';\n\t}\n\n\toptions = options || {};\n\n\tvar query = options._query;\n\n\tif ( !query ) {\n\t\tquery = getQuery( this, selector, options, true );\n\t\tif ( query.old ) { return query.old; }\n\t}\n\n\tthis.fragment.findAllComponents( selector, query );\n\n\tif ( query.remote ) {\n\t\t// search non-fragment children\n\t\tthis._children.forEach( function (c) {\n\t\t\tif ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {\n\t\t\t\tif ( query.test( c ) ) {\n\t\t\t\t\tquery.add( c.instance );\n\t\t\t\t\tc.liveQueries.push( query );\n\t\t\t\t}\n\n\t\t\t\tc.instance.findAllComponents( selector, options );\n\t\t\t}\n\t\t});\n\t}\n\n\tquery.init();\n\treturn query.result;\n}\n\nfunction Ractive$findComponent ( selector, options ) {\n\tvar this$1 = this;\n\tif ( options === void 0 ) options = {};\n\n\tif ( typeof selector === 'object' ) {\n\t\toptions = selector;\n\t\tselector = '';\n\t}\n\n\tvar child = this.fragment.findComponent( selector, options );\n\tif ( child ) { return child; }\n\n\tif ( options.remote ) {\n\t\tif ( !selector && this._children.length ) { return this._children[0].instance; }\n\t\tfor ( var i = 0; i < this._children.length; i++ ) {\n\t\t\t// skip children that are or should be in an anchor\n\t\t\tif ( this$1._children[i].target ) { continue; }\n\t\t\tif ( this$1._children[i].name === selector ) { return this$1._children[i].instance; }\n\t\t\tchild = this$1._children[i].instance.findComponent( selector, options );\n\t\t\tif ( child ) { return child; }\n\t\t}\n\t}\n}\n\nfunction Ractive$findContainer ( selector ) {\n\tif ( this.container ) {\n\t\tif ( this.container.component && this.container.component.name === selector ) {\n\t\t\treturn this.container;\n\t\t} else {\n\t\t\treturn this.container.findContainer( selector );\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction Ractive$findParent ( selector ) {\n\n\tif ( this.parent ) {\n\t\tif ( this.parent.component && this.parent.component.name === selector ) {\n\t\t\treturn this.parent;\n\t\t} else {\n\t\t\treturn this.parent.findParent ( selector );\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction Ractive$fire ( eventName ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\treturn fireEvent( this, eventName, { args: args });\n}\n\nvar stack = [];\nvar captureGroup;\n\nfunction startCapturing () {\n\tstack.push( captureGroup = [] );\n}\n\nfunction stopCapturing () {\n\tvar dependencies = stack.pop();\n\tcaptureGroup = stack[ stack.length - 1 ];\n\treturn dependencies;\n}\n\nfunction capture ( model ) {\n\tif ( captureGroup ) {\n\t\tcaptureGroup.push( model );\n\t}\n}\n\nvar KeyModel = function KeyModel ( key, parent ) {\n\tthis.value = key;\n\tthis.isReadonly = this.isKey = true;\n\tthis.deps = [];\n\tthis.links = [];\n\tthis.parent = parent;\n};\n\nKeyModel.prototype.get = function get ( shouldCapture ) {\n\tif ( shouldCapture ) { capture( this ); }\n\treturn unescapeKey( this.value );\n};\n\nKeyModel.prototype.getKeypath = function getKeypath () {\n\treturn unescapeKey( this.value );\n};\n\nKeyModel.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tvar i = this.deps.length;\n\twhile ( i-- ) { this$1.deps[i].rebind( next, previous, false ); }\n\n\ti = this.links.length;\n\twhile ( i-- ) { this$1.links[i].rebind( next, previous, false ); }\n};\n\nKeyModel.prototype.register = function register ( dependant ) {\n\tthis.deps.push( dependant );\n};\n\nKeyModel.prototype.registerLink = function registerLink ( link ) {\n\taddToArray( this.links, link );\n};\n\nKeyModel.prototype.unregister = function unregister ( dependant ) {\n\tremoveFromArray$1( this.deps, dependant );\n};\n\nKeyModel.prototype.unregisterLink = function unregisterLink ( link ) {\n\tremoveFromArray$1( this.links, link );\n};\n\nfunction bind$1$1               ( x ) { x.bind(); }\nfunction cancel$1             ( x ) { x.cancel(); }\nfunction destroyed$1$1          ( x ) { x.destroyed(); }\nfunction handleChange$1$1       ( x ) { x.handleChange(); }\nfunction mark$1$1               ( x ) { x.mark(); }\nfunction marked             ( x ) { x.marked(); }\nfunction markedAll          ( x ) { x.markedAll(); }\nfunction render$1$1             ( x ) { x.render(); }\nfunction shuffled$1$1           ( x ) { x.shuffled(); }\nfunction teardown$1$1           ( x ) { x.teardown(); }\nfunction unbind$1$1             ( x ) { x.unbind(); }\nfunction unrender$1$1           ( x ) { x.unrender(); }\nfunction unrenderAndDestroy ( x ) { x.unrender( true ); }\nfunction update$1$1             ( x ) { x.update(); }\nfunction toString$2           ( x ) { return x.toString(); }\nfunction toEscapedString    ( x ) { return x.toString( true ); }\n\nvar KeypathModel = function KeypathModel ( parent, ractive ) {\n\tthis.parent = parent;\n\tthis.ractive = ractive;\n\tthis.value = ractive ? parent.getKeypath( ractive ) : parent.getKeypath();\n\tthis.deps = [];\n\tthis.children = {};\n\tthis.isReadonly = this.isKeypath = true;\n};\n\nKeypathModel.prototype.get = function get ( shouldCapture ) {\n\tif ( shouldCapture ) { capture( this ); }\n\treturn this.value;\n};\n\nKeypathModel.prototype.getChild = function getChild ( ractive ) {\n\tif ( !( ractive._guid in this.children ) ) {\n\t\tvar model = new KeypathModel( this.parent, ractive );\n\t\tthis.children[ ractive._guid ] = model;\n\t\tmodel.owner = this;\n\t}\n\treturn this.children[ ractive._guid ];\n};\n\nKeypathModel.prototype.getKeypath = function getKeypath () {\n\treturn this.value;\n};\n\nKeypathModel.prototype.handleChange = function handleChange$1 () {\n\t\tvar this$1 = this;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].handleChange();\n\t}\n\n\tthis.deps.forEach( handleChange$1$1 );\n};\n\nKeypathModel.prototype.rebindChildren = function rebindChildren ( next ) {\n\t\tvar this$1 = this;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tvar child = this$1.children[keys[i]];\n\t\tchild.value = next.getKeypath( child.ractive );\n\t\tchild.handleChange();\n\t}\n};\n\nKeypathModel.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tvar model = next ? next.getKeypathModel( this.ractive ) : undefined;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].rebind( next, previous, false );\n\t}\n\n\ti = this.deps.length;\n\twhile ( i-- ) {\n\t\tthis$1.deps[i].rebind( model, this$1, false );\n\t}\n};\n\nKeypathModel.prototype.register = function register ( dep ) {\n\tthis.deps.push( dep );\n};\n\nKeypathModel.prototype.removeChild = function removeChild ( model ) {\n\tif ( model.ractive ) { delete this.children[ model.ractive._guid ]; }\n};\n\nKeypathModel.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\tif ( this.owner ) { this.owner.removeChild( this ); }\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].teardown();\n\t}\n};\n\nKeypathModel.prototype.unregister = function unregister ( dep ) {\n\tremoveFromArray$1( this.deps, dep );\n\tif ( !this.deps.length ) { this.teardown(); }\n};\n\nfunction bind$2 ( fn, context ) {\n\tif ( !/this/.test( fn.toString() ) ) { return fn; }\n\n\tvar bound = fn.bind( context );\n\tfor ( var prop in fn ) { bound[ prop ] = fn[ prop ]; }\n\n\treturn bound;\n}\n\nvar hasProp = Object.prototype.hasOwnProperty;\n\nvar shuffleTasks = { early: [], mark: [] };\nvar registerQueue = { early: [], mark: [] };\n\nvar ModelBase = function ModelBase ( parent ) {\n\tthis.deps = [];\n\n\tthis.children = [];\n\tthis.childByKey = {};\n\tthis.links = [];\n\n\tthis.keyModels = {};\n\n\tthis.bindings = [];\n\tthis.patternObservers = [];\n\n\tif ( parent ) {\n\t\tthis.parent = parent;\n\t\tthis.root = parent.root;\n\t}\n};\n\nModelBase.prototype.addShuffleTask = function addShuffleTask ( task, stage ) {\n\tif ( stage === void 0 ) stage = 'early';\n shuffleTasks[stage].push( task ); };\nModelBase.prototype.addShuffleRegister = function addShuffleRegister ( item, stage ) {\n\tif ( stage === void 0 ) stage = 'early';\n registerQueue[stage].push({ model: this, item: item }); };\n\nModelBase.prototype.findMatches = function findMatches ( keys ) {\n\tvar len = keys.length;\n\n\tvar existingMatches = [ this ];\n\tvar matches;\n\tvar i;\n\n\tvar loop = function (  ) {\n\t\tvar key = keys[i];\n\n\t\tif ( key === '*' ) {\n\t\t\tmatches = [];\n\t\t\texistingMatches.forEach( function (model) {\n\t\t\t\tmatches.push.apply( matches, model.getValueChildren( model.get() ) );\n\t\t\t});\n\t\t} else {\n\t\t\tmatches = existingMatches.map( function (model) { return model.joinKey( key ); } );\n\t\t}\n\n\t\texistingMatches = matches;\n\t};\n\n\t\tfor ( i = 0; i < len; i += 1 ) loop(  );\n\n\treturn matches;\n};\n\nModelBase.prototype.getKeyModel = function getKeyModel ( key, skip ) {\n\tif ( key !== undefined && !skip ) { return this.parent.getKeyModel( key, true ); }\n\n\tif ( !( key in this.keyModels ) ) { this.keyModels[ key ] = new KeyModel( escapeKey( key ), this ); }\n\n\treturn this.keyModels[ key ];\n};\n\nModelBase.prototype.getKeypath = function getKeypath ( ractive ) {\n\tif ( ractive !== this.ractive && this._link ) { return this._link.target.getKeypath( ractive ); }\n\n\tif ( !this.keypath ) {\n\t\tvar parent = this.parent && this.parent.getKeypath( ractive );\n\t\tthis.keypath = parent ? ((this.parent.getKeypath( ractive )) + \"".\"" + (escapeKey( this.key ))) : escapeKey( this.key );\n\t}\n\n\treturn this.keypath;\n};\n\nModelBase.prototype.getValueChildren = function getValueChildren ( value ) {\n\t\tvar this$1 = this;\n\n\tvar children;\n\tif ( Array.isArray( value ) ) {\n\t\tchildren = [];\n\t\tif ( 'length' in this && this.length !== value.length ) {\n\t\t\tchildren.push( this.joinKey( 'length' ) );\n\t\t}\n\t\tvalue.forEach( function ( m, i ) {\n\t\t\tchildren.push( this$1.joinKey( i ) );\n\t\t});\n\t}\n\n\telse if ( isObject( value ) || typeof value === 'function' ) {\n\t\tchildren = Object.keys( value ).map( function (key) { return this$1.joinKey( key ); } );\n\t}\n\n\telse if ( value != null ) {\n\t\treturn [];\n\t}\n\n\treturn children;\n};\n\nModelBase.prototype.getVirtual = function getVirtual ( shouldCapture ) {\n\t\tvar this$1 = this;\n\n\tvar value = this.get( shouldCapture, { virtual: false } );\n\tif ( isObject( value ) ) {\n\t\tvar result = Array.isArray( value ) ? [] : {};\n\n\t\tvar keys = Object.keys( value );\n\t\tvar i = keys.length;\n\t\twhile ( i-- ) {\n\t\t\tvar child = this$1.childByKey[ keys[i] ];\n\t\t\tif ( !child ) { result[ keys[i] ] = value[ keys[i] ]; }\n\t\t\telse if ( child._link ) { result[ keys[i] ] = child._link.getVirtual(); }\n\t\t\telse { result[ keys[i] ] = child.getVirtual(); }\n\t\t}\n\n\t\ti = this.children.length;\n\t\twhile ( i-- ) {\n\t\t\tvar child$1 = this$1.children[i];\n\t\t\tif ( !( child$1.key in result ) && child$1._link ) {\n\t\t\t\tresult[ child$1.key ] = child$1._link.getVirtual();\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t} else { return value; }\n};\n\nModelBase.prototype.has = function has ( key ) {\n\tif ( this._link ) { return this._link.has( key ); }\n\n\tvar value = this.get();\n\tif ( !value ) { return false; }\n\n\tkey = unescapeKey( key );\n\tif ( hasProp.call( value, key ) ) { return true; }\n\n\t// We climb up the constructor chain to find if one of them contains the key\n\tvar constructor = value.constructor;\n\twhile ( constructor !== Function && constructor !== Array && constructor !== Object ) {\n\t\tif ( hasProp.call( constructor.prototype, key ) ) { return true; }\n\t\tconstructor = constructor.constructor;\n\t}\n\n\treturn false;\n};\n\nModelBase.prototype.joinAll = function joinAll ( keys, opts ) {\n\tvar model = this;\n\tfor ( var i = 0; i < keys.length; i += 1 ) {\n\t\tif ( opts && opts.lastLink === false && i + 1 === keys.length && model.childByKey[keys[i]] && model.childByKey[keys[i]]._link ) { return model.childByKey[keys[i]]; }\n\t\tmodel = model.joinKey( keys[i], opts );\n\t}\n\n\treturn model;\n};\n\nModelBase.prototype.notifyUpstream = function notifyUpstream ( startPath ) {\n\t\tvar this$1 = this;\n\n\tvar parent = this.parent;\n\tvar path = startPath || [ this.key ];\n\twhile ( parent ) {\n\t\tif ( parent.patternObservers.length ) { parent.patternObservers.forEach( function (o) { return o.notify( path.slice() ); } ); }\n\t\tpath.unshift( parent.key );\n\t\tparent.links.forEach( function (l) { return l.notifiedUpstream( path, this$1.root ); } );\n\t\tparent.deps.forEach( handleChange$1$1 );\n\t\tparent = parent.parent;\n\t}\n};\n\nModelBase.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tvar this$1 = this;\n\n\t// tell the deps to move to the new target\n\tvar i = this.deps.length;\n\twhile ( i-- ) {\n\t\tif ( this$1.deps[i].rebind ) { this$1.deps[i].rebind( next, previous, safe ); }\n\t}\n\n\ti = this.links.length;\n\twhile ( i-- ) {\n\t\tvar link = this$1.links[i];\n\t\t// only relink the root of the link tree\n\t\tif ( link.owner._link ) { link.relinking( next, safe ); }\n\t}\n\n\ti = this.children.length;\n\twhile ( i-- ) {\n\t\tvar child = this$1.children[i];\n\t\tchild.rebind( next ? next.joinKey( child.key ) : undefined, child, safe );\n\t}\n\n\tif ( this.keypathModel ) { this.keypathModel.rebind( next, previous, false ); }\n\n\ti = this.bindings.length;\n\twhile ( i-- ) {\n\t\tthis$1.bindings[i].rebind( next, previous, safe );\n\t}\n};\n\nModelBase.prototype.register = function register ( dep ) {\n\tthis.deps.push( dep );\n};\n\nModelBase.prototype.registerLink = function registerLink ( link ) {\n\taddToArray( this.links, link );\n};\n\nModelBase.prototype.registerPatternObserver = function registerPatternObserver ( observer ) {\n\tthis.patternObservers.push( observer );\n\tthis.register( observer );\n};\n\nModelBase.prototype.registerTwowayBinding = function registerTwowayBinding ( binding ) {\n\tthis.bindings.push( binding );\n};\n\nModelBase.prototype.unregister = function unregister ( dep ) {\n\tremoveFromArray$1( this.deps, dep );\n};\n\nModelBase.prototype.unregisterLink = function unregisterLink ( link ) {\n\tremoveFromArray$1( this.links, link );\n};\n\nModelBase.prototype.unregisterPatternObserver = function unregisterPatternObserver ( observer ) {\n\tremoveFromArray$1( this.patternObservers, observer );\n\tthis.unregister( observer );\n};\n\nModelBase.prototype.unregisterTwowayBinding = function unregisterTwowayBinding ( binding ) {\n\tremoveFromArray$1( this.bindings, binding );\n};\n\nModelBase.prototype.updateFromBindings = function updateFromBindings$1 ( cascade ) {\n\t\tvar this$1 = this;\n\n\tvar i = this.bindings.length;\n\twhile ( i-- ) {\n\t\tvar value = this$1.bindings[i].getValue();\n\t\tif ( value !== this$1.value ) { this$1.set( value ); }\n\t}\n\n\t// check for one-way bindings if there are no two-ways\n\tif ( !this.bindings.length ) {\n\t\tvar oneway = findBoundValue( this.deps );\n\t\tif ( oneway && oneway.value !== this.value ) { this.set( oneway.value ); }\n\t}\n\n\tif ( cascade ) {\n\t\tthis.children.forEach( updateFromBindings );\n\t\tthis.links.forEach( updateFromBindings );\n\t\tif ( this._link ) { this._link.updateFromBindings( cascade ); }\n\t}\n};\n\n// TODO: this may be better handled by overreiding `get` on models with a parent that isRoot\nfunction maybeBind ( model, value, shouldBind ) {\n\tif ( shouldBind && typeof value === 'function' && model.parent && model.parent.isRoot ) {\n\t\tif ( !model.boundValue ) {\n\t\t\tmodel.boundValue = bind$2( value._r_unbound || value, model.parent.ractive );\n\t\t}\n\n\t\treturn model.boundValue;\n\t}\n\n\treturn value;\n}\n\nfunction updateFromBindings ( model ) {\n\tmodel.updateFromBindings( true );\n}\n\nfunction findBoundValue( list ) {\n\tvar i = list.length;\n\twhile ( i-- ) {\n\t\tif ( list[i].bound ) {\n\t\t\tvar owner = list[i].owner;\n\t\t\tif ( owner ) {\n\t\t\t\tvar value = owner.name === 'checked' ?\n\t\t\t\t\towner.node.checked :\n\t\t\t\t\towner.node.value;\n\t\t\t\treturn { value: value };\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction fireShuffleTasks ( stage ) {\n\tif ( !stage ) {\n\t\tfireShuffleTasks( 'early' );\n\t\tfireShuffleTasks( 'mark' );\n\t} else {\n\t\tvar tasks = shuffleTasks[stage];\n\t\tshuffleTasks[stage] = [];\n\t\tvar i = tasks.length;\n\t\twhile ( i-- ) { tasks[i](); }\n\n\t\tvar register = registerQueue[stage];\n\t\tregisterQueue[stage] = [];\n\t\ti = register.length;\n\t\twhile ( i-- ) { register[i].model.register( register[i].item ); }\n\t}\n}\n\nfunction shuffle$1$1 ( model, newIndices, link ) {\n\tmodel.shuffling = true;\n\n\tvar i = newIndices.length;\n\twhile ( i-- ) {\n\t\tvar idx = newIndices[ i ];\n\t\t// nothing is actually changing, so move in the index and roll on\n\t\tif ( i === idx ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// rebind the children on i to idx\n\t\tif ( i in model.childByKey ) { model.childByKey[ i ].rebind( !~idx ? undefined : model.joinKey( idx ), model.childByKey[ i ], true ); }\n\n\t\tif ( !~idx && model.keyModels[ i ] ) {\n\t\t\tmodel.keyModels[i].rebind( undefined, model.keyModels[i], false );\n\t\t} else if ( ~idx && model.keyModels[ i ] ) {\n\t\t\tif ( !model.keyModels[ idx ] ) { model.childByKey[ idx ].getKeyModel( idx ); }\n\t\t\tmodel.keyModels[i].rebind( model.keyModels[ idx ], model.keyModels[i], false );\n\t\t}\n\t}\n\n\tvar upstream = model.source().length !== model.source().value.length;\n\n\tmodel.links.forEach( function (l) { return l.shuffle( newIndices ); } );\n\tif ( !link ) { fireShuffleTasks( 'early' ); }\n\n\ti = model.deps.length;\n\twhile ( i-- ) {\n\t\tif ( model.deps[i].shuffle ) { model.deps[i].shuffle( newIndices ); }\n\t}\n\n\tmodel[ link ? 'marked' : 'mark' ]();\n\tif ( !link ) { fireShuffleTasks( 'mark' ); }\n\n\tif ( upstream ) { model.notifyUpstream(); }\n\n\tmodel.shuffling = false;\n}\n\nKeyModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;\nKeyModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;\nKeypathModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;\nKeypathModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;\n\n// this is the dry method of checking to see if a rebind applies to\n// a particular keypath because in some cases, a dep may be bound\n// directly to a particular keypath e.g. foo.bars.0.baz and need\n// to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted\nfunction rebindMatch ( template, next, previous, fragment ) {\n\tvar keypath = template.r || template;\n\n\t// no valid keypath, go with next\n\tif ( !keypath || typeof keypath !== 'string' ) { return next; }\n\n\t// completely contextual ref, go with next\n\tif ( keypath === '.' || keypath[0] === '@' || ( next || previous ).isKey || ( next || previous ).isKeypath ) { return next; }\n\n\tvar parts = keypath.split( '/' );\n\tvar keys = splitKeypath( parts[ parts.length - 1 ] );\n\tvar last = keys[ keys.length - 1 ];\n\n\t// check the keypath against the model keypath to see if it matches\n\tvar model = next || previous;\n\n\t// check to see if this was an alias\n\tif ( model && keys.length === 1 && last !== model.key && fragment ) {\n\t\tkeys = findAlias( last, fragment ) || keys;\n\t}\n\n\tvar i = keys.length;\n\tvar match = true;\n\tvar shuffling = false;\n\n\twhile ( model && i-- ) {\n\t\tif ( model.shuffling ) { shuffling = true; }\n\t\t// non-strict comparison to account for indices in keypaths\n\t\tif ( keys[i] != model.key ) { match = false; }\n\t\tmodel = model.parent;\n\t}\n\n\t// next is undefined, but keypath is shuffling and previous matches\n\tif ( !next && match && shuffling ) { return previous; }\n\t// next is defined, but doesn't match the keypath\n\telse if ( next && !match && shuffling ) { return previous; }\n\telse { return next; }\n}\n\nfunction findAlias ( name, fragment ) {\n\twhile ( fragment ) {\n\t\tvar z = fragment.aliases;\n\t\tif ( z && z[ name ] ) {\n\t\t\tvar aliases = ( fragment.owner.iterations ? fragment.owner : fragment ).owner.template.z;\n\t\t\tfor ( var i = 0; i < aliases.length; i++ ) {\n\t\t\t\tif ( aliases[i].n === name ) {\n\t\t\t\t\tvar alias = aliases[i].x;\n\t\t\t\t\tif ( !alias.r ) { return false; }\n\t\t\t\t\tvar parts = alias.r.split( '/' );\n\t\t\t\t\treturn splitKeypath( parts[ parts.length - 1 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tfragment = fragment.componentParent || fragment.parent;\n\t}\n}\n\n// temporary placeholder target for detached implicit links\nvar Missing = {\n\tkey: '@missing',\n\tanimate: noop,\n\tapplyValue: noop,\n\tget: noop,\n\tgetKeypath: function getKeypath () { return this.key; },\n\tjoinAll: function joinAll () { return this; },\n\tjoinKey: function joinKey () { return this; },\n\tmark: noop,\n\tregisterLink: noop,\n\tshufle: noop,\n\tset: noop,\n\tunregisterLink: noop\n};\nMissing.parent = Missing;\n\nvar LinkModel = (function (ModelBase$$1) {\n\tfunction LinkModel ( parent, owner, target, key ) {\n\t\tModelBase$$1.call( this, parent );\n\n\t\tthis.owner = owner;\n\t\tthis.target = target;\n\t\tthis.key = key === undefined ? owner.key : key;\n\t\tif ( owner.isLink ) { this.sourcePath = (owner.sourcePath) + \"".\"" + (this.key); }\n\n\t\ttarget.registerLink( this );\n\n\t\tif ( parent ) { this.isReadonly = parent.isReadonly; }\n\n\t\tthis.isLink = true;\n\t}\n\n\tif ( ModelBase$$1 ) LinkModel.__proto__ = ModelBase$$1;\n\tLinkModel.prototype = Object.create( ModelBase$$1 && ModelBase$$1.prototype );\n\tLinkModel.prototype.constructor = LinkModel;\n\n\tLinkModel.prototype.animate = function animate ( from, to, options, interpolator ) {\n\t\treturn this.target.animate( from, to, options, interpolator );\n\t};\n\n\tLinkModel.prototype.applyValue = function applyValue ( value ) {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\t\tthis.target.applyValue( value );\n\t};\n\n\tLinkModel.prototype.attach = function attach ( fragment ) {\n\t\tvar model = resolveReference( fragment, this.key );\n\t\tif ( model ) {\n\t\t\tthis.relinking( model, false );\n\t\t} else { // if there is no link available, move everything here to real models\n\t\t\tthis.owner.unlink();\n\t\t}\n\t};\n\n\tLinkModel.prototype.detach = function detach () {\n\t\tthis.relinking( Missing, false );\n\t};\n\n\tLinkModel.prototype.get = function get ( shouldCapture, opts ) {\n\t\tif ( opts === void 0 ) opts = {};\n\n\t\tif ( shouldCapture ) {\n\t\t\tcapture( this );\n\n\t\t\t// may need to tell the target to unwrap\n\t\t\topts.unwrap = true;\n\t\t}\n\n\t\tvar bind$$1 = 'shouldBind' in opts ? opts.shouldBind : true;\n\t\topts.shouldBind = false;\n\n\t\treturn maybeBind( this, this.target.get( false, opts ), bind$$1 );\n\t};\n\n\tLinkModel.prototype.getKeypath = function getKeypath ( ractive ) {\n\t\tif ( ractive && ractive !== this.root.ractive ) { return this.target.getKeypath( ractive ); }\n\n\t\treturn ModelBase$$1.prototype.getKeypath.call( this, ractive );\n\t};\n\n\tLinkModel.prototype.getKeypathModel = function getKeypathModel ( ractive ) {\n\t\tif ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }\n\t\tif ( ractive && ractive !== this.root.ractive ) { return this.keypathModel.getChild( ractive ); }\n\t\treturn this.keypathModel;\n\t};\n\n\tLinkModel.prototype.handleChange = function handleChange$1 () {\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.links.forEach( handleChange$1$1 );\n\t\tthis.notifyUpstream();\n\t};\n\n\tLinkModel.prototype.isDetached = function isDetached () { return this.virtual && this.target === Missing; };\n\n\tLinkModel.prototype.joinKey = function joinKey ( key ) {\n\t\t// TODO: handle nested links\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new LinkModel( this, this, this.target.joinKey( key ), key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tLinkModel.prototype.mark = function mark () {\n\t\tthis.target.mark();\n\t};\n\n\tLinkModel.prototype.marked = function marked$1 () {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\tthis.links.forEach( marked );\n\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t};\n\n\tLinkModel.prototype.markedAll = function markedAll$1 () {\n\t\tthis.children.forEach( markedAll );\n\t\tthis.marked();\n\t};\n\n\tLinkModel.prototype.notifiedUpstream = function notifiedUpstream ( startPath, root ) {\n\t\tvar this$1 = this;\n\n\t\tthis.links.forEach( function (l) { return l.notifiedUpstream( startPath, this$1.root ); } );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tif ( startPath && this.rootLink && this.root !== root ) {\n\t\t\tvar path = startPath.slice( 1 );\n\t\t\tpath.unshift( this.key );\n\t\t\tthis.notifyUpstream( path );\n\t\t}\n\t};\n\n\tLinkModel.prototype.relinked = function relinked () {\n\t\tthis.target.registerLink( this );\n\t\tthis.children.forEach( function (c) { return c.relinked(); } );\n\t};\n\n\tLinkModel.prototype.relinking = function relinking ( target, safe ) {\n\t\tvar this$1 = this;\n\n\t\tif ( this.rootLink && this.sourcePath ) { target = rebindMatch( this.sourcePath, target, this.target ); }\n\t\tif ( !target || this.target === target ) { return; }\n\n\t\tthis.target.unregisterLink( this );\n\t\tif ( this.keypathModel ) { this.keypathModel.rebindChildren( target ); }\n\n\t\tthis.target = target;\n\t\tthis.children.forEach( function (c) {\n\t\t\tc.relinking( target.joinKey( c.key ), safe );\n\t\t});\n\n\t\tif ( this.rootLink ) { this.addShuffleTask( function () {\n\t\t\tthis$1.relinked();\n\t\t\tif ( !safe ) { this$1.notifyUpstream(); }\n\t\t}); }\n\t};\n\n\tLinkModel.prototype.set = function set ( value ) {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\t\tthis.target.set( value );\n\t};\n\n\tLinkModel.prototype.shuffle = function shuffle$1 ( newIndices ) {\n\t\t// watch for extra shuffles caused by a shuffle in a downstream link\n\t\tif ( this.shuffling ) { return; }\n\n\t\t// let the real model handle firing off shuffles\n\t\tif ( !this.target.shuffling ) {\n\t\t\tthis.target.shuffle( newIndices );\n\t\t} else {\n\t\t\tshuffle$1$1( this, newIndices, true );\n\t\t}\n\n\t};\n\n\tLinkModel.prototype.source = function source () {\n\t\tif ( this.target.source ) { return this.target.source(); }\n\t\telse { return this.target; }\n\t};\n\n\tLinkModel.prototype.teardown = function teardown$1 () {\n\t\tif ( this._link ) { this._link.teardown(); }\n\t\tthis.children.forEach( teardown$1$1 );\n\t};\n\n\treturn LinkModel;\n}(ModelBase));\n\nModelBase.prototype.link = function link ( model, keypath, options ) {\n\tvar lnk = this._link || new LinkModel( this.parent, this, model, this.key );\n\tlnk.implicit = options && options.implicit;\n\tlnk.sourcePath = keypath;\n\tlnk.rootLink = true;\n\tif ( this._link ) { this._link.relinking( model, true, false ); }\n\tthis.rebind( lnk, this, false );\n\tfireShuffleTasks();\n\n\tthis._link = lnk;\n\tlnk.markedAll();\n\n\tthis.notifyUpstream();\n\treturn lnk;\n};\n\nModelBase.prototype.unlink = function unlink () {\n\tif ( this._link ) {\n\t\tvar ln = this._link;\n\t\tthis._link = undefined;\n\t\tln.rebind( this, this._link );\n\t\tfireShuffleTasks();\n\t\tln.teardown();\n\t\tthis.notifyUpstream();\n\t}\n};\n\n// TODO what happens if a transition is aborted?\n\nvar tickers = [];\nvar running = false;\n\nfunction tick () {\n\trunloop.start();\n\n\tvar now = performance.now();\n\n\tvar i;\n\tvar ticker;\n\n\tfor ( i = 0; i < tickers.length; i += 1 ) {\n\t\tticker = tickers[i];\n\n\t\tif ( !ticker.tick( now ) ) {\n\t\t\t// ticker is complete, remove it from the stack, and decrement i so we don't miss one\n\t\t\ttickers.splice( i--, 1 );\n\t\t}\n\t}\n\n\trunloop.end();\n\n\tif ( tickers.length ) {\n\t\trequestAnimationFrame( tick );\n\t} else {\n\t\trunning = false;\n\t}\n}\n\nvar Ticker = function Ticker ( options ) {\n\tthis.duration = options.duration;\n\tthis.step = options.step;\n\tthis.complete = options.complete;\n\tthis.easing = options.easing;\n\n\tthis.start = performance.now();\n\tthis.end = this.start + this.duration;\n\n\tthis.running = true;\n\n\ttickers.push( this );\n\tif ( !running ) { requestAnimationFrame( tick ); }\n};\n\nTicker.prototype.tick = function tick$1 ( now ) {\n\tif ( !this.running ) { return false; }\n\n\tif ( now > this.end ) {\n\t\tif ( this.step ) { this.step( 1 ); }\n\t\tif ( this.complete ) { this.complete( 1 ); }\n\n\t\treturn false;\n\t}\n\n\tvar elapsed = now - this.start;\n\tvar eased = this.easing( elapsed / this.duration );\n\n\tif ( this.step ) { this.step( eased ); }\n\n\treturn true;\n};\n\nTicker.prototype.stop = function stop () {\n\tif ( this.abort ) { this.abort(); }\n\tthis.running = false;\n};\n\nvar prefixers = {};\n\n// TODO this is legacy. sooner we can replace the old adaptor API the better\nfunction prefixKeypath ( obj, prefix ) {\n\tvar prefixed = {};\n\n\tif ( !prefix ) {\n\t\treturn obj;\n\t}\n\n\tprefix += '.';\n\n\tfor ( var key in obj ) {\n\t\tif ( obj.hasOwnProperty( key ) ) {\n\t\t\tprefixed[ prefix + key ] = obj[ key ];\n\t\t}\n\t}\n\n\treturn prefixed;\n}\n\nfunction getPrefixer ( rootKeypath ) {\n\tvar rootDot;\n\n\tif ( !prefixers[ rootKeypath ] ) {\n\t\trootDot = rootKeypath ? rootKeypath + '.' : '';\n\n\t\tprefixers[ rootKeypath ] = function ( relativeKeypath, value ) {\n\t\t\tvar obj;\n\n\t\t\tif ( typeof relativeKeypath === 'string' ) {\n\t\t\t\tobj = {};\n\t\t\t\tobj[ rootDot + relativeKeypath ] = value;\n\t\t\t\treturn obj;\n\t\t\t}\n\n\t\t\tif ( typeof relativeKeypath === 'object' ) {\n\t\t\t\t// 'relativeKeypath' is in fact a hash, not a keypath\n\t\t\t\treturn rootDot ? prefixKeypath( relativeKeypath, rootKeypath ) : relativeKeypath;\n\t\t\t}\n\t\t};\n\t}\n\n\treturn prefixers[ rootKeypath ];\n}\n\nvar Model = (function (ModelBase$$1) {\n\tfunction Model ( parent, key ) {\n\t\tModelBase$$1.call( this, parent );\n\n\t\tthis.ticker = null;\n\n\t\tif ( parent ) {\n\t\t\tthis.key = unescapeKey( key );\n\t\t\tthis.isReadonly = parent.isReadonly;\n\n\t\t\tif ( parent.value ) {\n\t\t\t\tthis.value = parent.value[ this.key ];\n\t\t\t\tif ( Array.isArray( this.value ) ) { this.length = this.value.length; }\n\t\t\t\tthis.adapt();\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( ModelBase$$1 ) Model.__proto__ = ModelBase$$1;\n\tModel.prototype = Object.create( ModelBase$$1 && ModelBase$$1.prototype );\n\tModel.prototype.constructor = Model;\n\n\tModel.prototype.adapt = function adapt () {\n\t\tvar this$1 = this;\n\n\t\tvar adaptors = this.root.adaptors;\n\t\tvar len = adaptors.length;\n\n\t\tthis.rewrap = false;\n\n\t\t// Exit early if no adaptors\n\t\tif ( len === 0 ) { return; }\n\n\t\tvar value = this.wrapper ? ( 'newWrapperValue' in this ? this.newWrapperValue : this.wrapperValue ) : this.value;\n\n\t\t// TODO remove this legacy nonsense\n\t\tvar ractive = this.root.ractive;\n\t\tvar keypath = this.getKeypath();\n\n\t\t// tear previous adaptor down if present\n\t\tif ( this.wrapper ) {\n\t\t\tvar shouldTeardown = this.wrapperValue === value ? false : !this.wrapper.reset || this.wrapper.reset( value ) === false;\n\n\t\t\tif ( shouldTeardown ) {\n\t\t\t\tthis.wrapper.teardown();\n\t\t\t\tthis.wrapper = null;\n\n\t\t\t\t// don't branch for undefined values\n\t\t\t\tif ( this.value !== undefined ) {\n\t\t\t\t\tvar parentValue = this.parent.value || this.parent.createBranch( this.key );\n\t\t\t\t\tif ( parentValue[ this.key ] !== value ) { parentValue[ this.key ] = value; }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete this.newWrapperValue;\n\t\t\t\tthis.wrapperValue = value;\n\t\t\t\tthis.value = this.wrapper.get();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar adaptor = adaptors[i];\n\t\t\tif ( adaptor.filter( value, keypath, ractive ) ) {\n\t\t\t\tthis$1.wrapper = adaptor.wrap( ractive, value, keypath, getPrefixer( keypath ) );\n\t\t\t\tthis$1.wrapperValue = value;\n\t\t\t\tthis$1.wrapper.__model = this$1; // massive temporary hack to enable array adaptor\n\n\t\t\t\tthis$1.value = this$1.wrapper.get();\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tModel.prototype.animate = function animate ( from, to, options, interpolator ) {\n\t\tvar this$1 = this;\n\n\t\tif ( this.ticker ) { this.ticker.stop(); }\n\n\t\tvar fulfilPromise;\n\t\tvar promise = new Promise( function (fulfil) { return fulfilPromise = fulfil; } );\n\n\t\tthis.ticker = new Ticker({\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tstep: function (t) {\n\t\t\t\tvar value = interpolator( t );\n\t\t\t\tthis$1.applyValue( value );\n\t\t\t\tif ( options.step ) { options.step( t, value ); }\n\t\t\t},\n\t\t\tcomplete: function () {\n\t\t\t\tthis$1.applyValue( to );\n\t\t\t\tif ( options.complete ) { options.complete( to ); }\n\n\t\t\t\tthis$1.ticker = null;\n\t\t\t\tfulfilPromise();\n\t\t\t}\n\t\t});\n\n\t\tpromise.stop = this.ticker.stop;\n\t\treturn promise;\n\t};\n\n\tModel.prototype.applyValue = function applyValue ( value, notify ) {\n\t\tif ( notify === void 0 ) notify = true;\n\n\t\tif ( isEqual( value, this.value ) ) { return; }\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\tif ( this.parent.wrapper && this.parent.wrapper.set ) {\n\t\t\tthis.parent.wrapper.set( this.key, value );\n\t\t\tthis.parent.value = this.parent.wrapper.get();\n\n\t\t\tthis.value = this.parent.value[ this.key ];\n\t\t\tif ( this.wrapper ) { this.newWrapperValue = this.value; }\n\t\t\tthis.adapt();\n\t\t} else if ( this.wrapper ) {\n\t\t\tthis.newWrapperValue = value;\n\t\t\tthis.adapt();\n\t\t} else {\n\t\t\tvar parentValue = this.parent.value || this.parent.createBranch( this.key );\n\t\t\tif ( isObjectLike( parentValue ) ) {\n\t\t\t\tparentValue[ this.key ] = value;\n\t\t\t} else {\n\t\t\t\twarnIfDebug( (\""Attempted to set a property of a non-object '\"" + (this.getKeypath()) + \""'\"") );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.value = value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\t// keep track of array stuff\n\t\tif ( Array.isArray( value ) ) {\n\t\t\tthis.length = value.length;\n\t\t\tthis.isArray = true;\n\t\t} else {\n\t\t\tthis.isArray = false;\n\t\t}\n\n\t\t// notify dependants\n\t\tthis.links.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( mark$1$1 );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\n\t\tif ( notify ) { this.notifyUpstream(); }\n\n\t\tif ( this.parent.isArray ) {\n\t\t\tif ( this.key === 'length' ) { this.parent.length = value; }\n\t\t\telse { this.parent.joinKey( 'length' ).mark(); }\n\t\t}\n\t};\n\n\tModel.prototype.createBranch = function createBranch ( key ) {\n\t\tvar branch = isNumeric( key ) ? [] : {};\n\t\tthis.applyValue( branch, false );\n\n\t\treturn branch;\n\t};\n\n\tModel.prototype.get = function get ( shouldCapture, opts ) {\n\t\tif ( this._link ) { return this._link.get( shouldCapture, opts ); }\n\t\tif ( shouldCapture ) { capture( this ); }\n\t\t// if capturing, this value needs to be unwrapped because it's for external use\n\t\tif ( opts && opts.virtual ) { return this.getVirtual( false ); }\n\t\treturn maybeBind( this, ( ( opts && 'unwrap' in opts ) ? opts.unwrap !== false : shouldCapture ) && this.wrapper ? this.wrapperValue : this.value, !opts || opts.shouldBind !== false );\n\t};\n\n\tModel.prototype.getKeypathModel = function getKeypathModel () {\n\t\tif ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }\n\t\treturn this.keypathModel;\n\t};\n\n\tModel.prototype.joinKey = function joinKey ( key, opts ) {\n\t\tif ( this._link ) {\n\t\t\tif ( opts && opts.lastLink !== false && ( key === undefined || key === '' ) ) { return this; }\n\t\t\treturn this._link.joinKey( key );\n\t\t}\n\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new Model( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\tif ( this.childByKey[ key ]._link && ( !opts || opts.lastLink !== false ) ) { return this.childByKey[ key ]._link; }\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tModel.prototype.mark = function mark$1 () {\n\t\tif ( this._link ) { return this._link.mark(); }\n\n\t\tvar value = this.retrieve();\n\n\t\tif ( !isEqual( value, this.value ) ) {\n\t\t\tvar old = this.value;\n\t\t\tthis.value = value;\n\t\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\t\t// make sure the wrapper stays in sync\n\t\t\tif ( old !== value || this.rewrap ) {\n\t\t\t\tif ( this.wrapper ) { this.newWrapperValue = value; }\n\t\t\t\tthis.adapt();\n\t\t\t}\n\n\t\t\t// keep track of array stuff\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\tthis.length = value.length;\n\t\t\t\tthis.isArray = true;\n\t\t\t} else {\n\t\t\t\tthis.isArray = false;\n\t\t\t}\n\n\t\t\tthis.children.forEach( mark$1$1 );\n\t\t\tthis.links.forEach( marked );\n\n\t\t\tthis.deps.forEach( handleChange$1$1 );\n\t\t}\n\t};\n\n\tModel.prototype.merge = function merge ( array, comparator ) {\n\t\tvar oldArray = this.value;\n\t\tvar newArray = array;\n\t\tif ( oldArray === newArray ) { oldArray = recreateArray( this ); }\n\t\tif ( comparator ) {\n\t\t\toldArray = oldArray.map( comparator );\n\t\t\tnewArray = newArray.map( comparator );\n\t\t}\n\n\t\tvar oldLength = oldArray.length;\n\n\t\tvar usedIndices = {};\n\t\tvar firstUnusedIndex = 0;\n\n\t\tvar newIndices = oldArray.map( function (item) {\n\t\t\tvar index;\n\t\t\tvar start = firstUnusedIndex;\n\n\t\t\tdo {\n\t\t\t\tindex = newArray.indexOf( item, start );\n\n\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\n\t\t\t\tstart = index + 1;\n\t\t\t} while ( ( usedIndices[ index ] === true ) && start < oldLength );\n\n\t\t\t// keep track of the first unused index, so we don't search\n\t\t\t// the whole of newArray for each item in oldArray unnecessarily\n\t\t\tif ( index === firstUnusedIndex ) {\n\t\t\t\tfirstUnusedIndex += 1;\n\t\t\t}\n\t\t\t// allow next instance of next \""equal\"" to be found item\n\t\t\tusedIndices[ index ] = true;\n\t\t\treturn index;\n\t\t});\n\n\t\tthis.parent.value[ this.key ] = array;\n\t\tthis.shuffle( newIndices );\n\t};\n\n\tModel.prototype.retrieve = function retrieve () {\n\t\treturn this.parent.value ? this.parent.value[ this.key ] : undefined;\n\t};\n\n\tModel.prototype.set = function set ( value ) {\n\t\tif ( this.ticker ) { this.ticker.stop(); }\n\t\tthis.applyValue( value );\n\t};\n\n\tModel.prototype.shuffle = function shuffle$1 ( newIndices ) {\n\t\tshuffle$1$1( this, newIndices, false );\n\t};\n\n\tModel.prototype.source = function source () { return this; };\n\n\tModel.prototype.teardown = function teardown$1 () {\n\t\tif ( this._link ) { this._link.teardown(); }\n\t\tthis.children.forEach( teardown$1$1 );\n\t\tif ( this.wrapper ) { this.wrapper.teardown(); }\n\t\tif ( this.keypathModel ) { this.keypathModel.teardown(); }\n\t};\n\n\treturn Model;\n}(ModelBase));\n\nfunction recreateArray( model ) {\n\tvar array = [];\n\n\tfor ( var i = 0; i < model.length; i++ ) {\n\t\tarray[ i ] = (model.childByKey[i] || {}).value;\n\t}\n\n\treturn array;\n}\n\n/* global global */\nvar data = {};\n\nvar SharedModel = (function (Model$$1) {\n\tfunction SharedModel ( value, name ) {\n\t\tModel$$1.call( this, null, (\""@\"" + name) );\n\t\tthis.key = \""@\"" + name;\n\t\tthis.value = value;\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.adaptors = [];\n\t}\n\n\tif ( Model$$1 ) SharedModel.__proto__ = Model$$1;\n\tSharedModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tSharedModel.prototype.constructor = SharedModel;\n\n\tSharedModel.prototype.getKeypath = function getKeypath () {\n\t\treturn this.key;\n\t};\n\n\treturn SharedModel;\n}(Model));\n\nvar SharedModel$1 = new SharedModel( data, 'shared' );\n\nvar GlobalModel = new SharedModel( typeof global !== 'undefined' ? global : window, 'global' );\n\nfunction resolveReference ( fragment, ref ) {\n\tvar initialFragment = fragment;\n\t// current context ref\n\tif ( ref === '.' ) { return fragment.findContext(); }\n\n\t// ancestor references\n\tif ( ref[0] === '~' ) { return fragment.ractive.viewmodel.joinAll( splitKeypath( ref.slice( 2 ) ) ); }\n\n\t// scoped references\n\tif ( ref[0] === '.' || ref[0] === '^' ) {\n\t\tvar frag = fragment;\n\t\tvar parts = ref.split( '/' );\n\t\tvar explicitContext = parts[0] === '^^';\n\t\tvar context$1 = explicitContext ? null : fragment.findContext();\n\n\t\t// account for the first context hop\n\t\tif ( explicitContext ) { parts.unshift( '^^' ); }\n\n\t\t// walk up the context chain\n\t\twhile ( parts[0] === '^^' ) {\n\t\t\tparts.shift();\n\t\t\tcontext$1 = null;\n\t\t\twhile ( frag && !context$1 ) {\n\t\t\t\tcontext$1 = frag.context;\n\t\t\t\tfrag = frag.parent.component ? frag.parent.component.parentFragment : frag.parent;\n\t\t\t}\n\t\t}\n\n\t\tif ( !context$1 && explicitContext ) {\n\t\t\tthrow new Error( (\""Invalid context parent reference ('\"" + ref + \""'). There is not context at that level.\"") );\n\t\t}\n\n\t\t// walk up the context path\n\t\twhile ( parts[0] === '.' || parts[0] === '..' ) {\n\t\t\tvar part = parts.shift();\n\n\t\t\tif ( part === '..' ) {\n\t\t\t\tcontext$1 = context$1.parent;\n\t\t\t}\n\t\t}\n\n\t\tref = parts.join( '/' );\n\n\t\t// special case - `{{.foo}}` means the same as `{{./foo}}`\n\t\tif ( ref[0] === '.' ) { ref = ref.slice( 1 ); }\n\t\treturn context$1.joinAll( splitKeypath( ref ) );\n\t}\n\n\tvar keys = splitKeypath( ref );\n\tif ( !keys.length ) { return; }\n\tvar base = keys.shift();\n\n\t// special refs\n\tif ( base[0] === '@' ) {\n\t\t// shorthand from outside the template\n\t\t// @this referring to local ractive instance\n\t\tif ( base === '@this' || base === '@' ) {\n\t\t\treturn fragment.ractive.viewmodel.getRactiveModel().joinAll( keys );\n\t\t}\n\n\t\t// @index or @key referring to the nearest repeating index or key\n\t\telse if ( base === '@index' || base === '@key' ) {\n\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\tvar repeater = fragment.findRepeatingFragment();\n\t\t\t// make sure the found fragment is actually an iteration\n\t\t\tif ( !repeater.isIteration ) { return; }\n\t\t\treturn repeater.context.getKeyModel( repeater[ ref[1] === 'i' ? 'index' : 'key' ] );\n\t\t}\n\n\t\t// @global referring to window or global\n\t\telse if ( base === '@global' ) {\n\t\t\treturn GlobalModel.joinAll( keys );\n\t\t}\n\n\t\t// @global referring to window or global\n\t\telse if ( base === '@shared' ) {\n\t\t\treturn SharedModel$1.joinAll( keys );\n\t\t}\n\n\t\t// @keypath or @rootpath, the current keypath string, which may also be used to resolve relative keypaths\n\t\telse if ( base.indexOf( '@keypath' ) === 0 || base.indexOf( '@rootpath' ) === 0 ) {\n\t\t\tvar root = ref[1] === 'r' ? fragment.ractive.root : null;\n\t\t\tvar context$2 = fragment.findContext();\n\n\t\t\t// skip over component roots, which provide no context\n\t\t\twhile ( root && context$2.isRoot && context$2.ractive.component ) {\n\t\t\t\tcontext$2 = context$2.ractive.component.parentFragment.findContext();\n\t\t\t}\n\n\t\t\treturn context$2.getKeypathModel( root );\n\t\t}\n\n\t\t// nope\n\t\telse {\n\t\t\tthrow new Error( (\""Invalid special reference '\"" + base + \""'\"") );\n\t\t}\n\t}\n\n\tvar context = fragment.findContext();\n\n\t// check immediate context for a match\n\tif ( context.has( base ) ) {\n\t\treturn context.joinKey( base ).joinAll( keys );\n\t}\n\n\t// walk up the fragment hierarchy looking for a matching ref, alias, or key in a context\n\tvar crossedComponentBoundary;\n\tvar shouldWarn = fragment.ractive.warnAboutAmbiguity;\n\n\twhile ( fragment ) {\n\t\t// repeated fragments\n\t\tif ( fragment.isIteration ) {\n\t\t\tif ( base === fragment.parent.keyRef ) {\n\t\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\t\treturn fragment.context.getKeyModel( fragment.key );\n\t\t\t}\n\n\t\t\tif ( base === fragment.parent.indexRef ) {\n\t\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\t\treturn fragment.context.getKeyModel( fragment.index );\n\t\t\t}\n\t\t}\n\n\t\t// alias node or iteration\n\t\tif ( fragment.aliases  && fragment.aliases.hasOwnProperty( base ) ) {\n\t\t\tvar model = fragment.aliases[ base ];\n\n\t\t\tif ( keys.length === 0 ) { return model; }\n\t\t\telse if ( typeof model.joinAll === 'function' ) {\n\t\t\t\treturn model.joinAll( keys );\n\t\t\t}\n\t\t}\n\n\t\t// check fragment context to see if it has the key we need\n\t\tif ( fragment.context && fragment.context.has( base ) ) {\n\t\t\t// this is an implicit mapping\n\t\t\tif ( crossedComponentBoundary ) {\n\t\t\t\tif ( shouldWarn ) { warnIfDebug( (\""'\"" + ref + \""' resolved but is ambiguous and will create a mapping to a parent component.\"") ); }\n\t\t\t\treturn context.root.createLink( base, fragment.context.joinKey( base ), base, { implicit: true } ).joinAll( keys );\n\t\t\t}\n\n\t\t\tif ( shouldWarn ) { warnIfDebug( (\""'\"" + ref + \""' resolved but is ambiguous.\"") ); }\n\t\t\treturn fragment.context.joinKey( base ).joinAll( keys );\n\t\t}\n\n\t\tif ( ( fragment.componentParent || ( !fragment.parent && fragment.ractive.component ) ) && !fragment.ractive.isolated ) {\n\t\t\t// ascend through component boundary\n\t\t\tfragment = fragment.componentParent || fragment.ractive.component.parentFragment;\n\t\t\tcrossedComponentBoundary = true;\n\t\t} else {\n\t\t\tfragment = fragment.parent;\n\t\t}\n\t}\n\n\t// if enabled, check the instance for a match\n\tif ( initialFragment.ractive.resolveInstanceMembers ) {\n\t\tvar model$1 = initialFragment.ractive.viewmodel.getRactiveModel();\n\t\tif ( model$1.has( base ) ) {\n\t\t\treturn model$1.joinKey( base ).joinAll( keys );\n\t\t}\n\t}\n\n\tif ( shouldWarn ) {\n\t\twarnIfDebug( (\""'\"" + ref + \""' is ambiguous and did not resolve.\"") );\n\t}\n\n\t// didn't find anything, so go ahead and create the key on the local model\n\treturn context.joinKey( base ).joinAll( keys );\n}\n\nfunction badReference ( key ) {\n\tthrow new Error( (\""An index or key reference (\"" + key + \"") cannot have child properties\"") );\n}\n\nfunction Ractive$get ( keypath, opts ) {\n\tif ( typeof keypath !== 'string' ) { return this.viewmodel.get( true, keypath ); }\n\n\tvar keys = splitKeypath( keypath );\n\tvar key = keys[0];\n\n\tvar model;\n\n\tif ( !this.viewmodel.has( key ) ) {\n\t\t// if this is an inline component, we may need to create\n\t\t// an implicit mapping\n\t\tif ( this.component && !this.isolated ) {\n\t\t\tmodel = resolveReference( this.component.parentFragment, key );\n\n\t\t\tif ( model ) {\n\t\t\t\tthis.viewmodel.map( key, model, { implicit: true } );\n\t\t\t}\n\t\t}\n\t}\n\n\tmodel = this.viewmodel.joinAll( keys );\n\treturn model.get( true, opts );\n}\n\n// This function takes an array, the name of a mutator method, and the\n// arguments to call that mutator method with, and returns an array that\n// maps the old indices to their new indices.\n\n// So if you had something like this...\n//\n//     array = [ 'a', 'b', 'c', 'd' ];\n//     array.push( 'e' );\n//\n// ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices\n// have changed. If you then did this...\n//\n//     array.unshift( 'z' );\n//\n// ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved\n// one higher to make room for the 'z'. If you removed an item, the new index\n// would be -1...\n//\n//     array.splice( 2, 2 );\n//\n// ...this would result in [ 0, 1, -1, -1, 2, 3 ].\n//\n// This information is used to enable fast, non-destructive shuffling of list\n// sections when you do e.g. `ractive.splice( 'items', 2, 2 );\n\nfunction getNewIndices ( length, methodName, args ) {\n\tvar newIndices = [];\n\n\tvar spliceArguments = getSpliceEquivalent( length, methodName, args );\n\n\tif ( !spliceArguments ) {\n\t\treturn null; // TODO support reverse and sort?\n\t}\n\n\tvar balance = ( spliceArguments.length - 2 ) - spliceArguments[1];\n\n\tvar removeStart = Math.min( length, spliceArguments[0] );\n\tvar removeEnd = removeStart + spliceArguments[1];\n\tnewIndices.startIndex = removeStart;\n\n\tvar i;\n\tfor ( i = 0; i < removeStart; i += 1 ) {\n\t\tnewIndices.push( i );\n\t}\n\n\tfor ( ; i < removeEnd; i += 1 ) {\n\t\tnewIndices.push( -1 );\n\t}\n\n\tfor ( ; i < length; i += 1 ) {\n\t\tnewIndices.push( i + balance );\n\t}\n\n\t// there is a net shift for the rest of the array starting with index + balance\n\tif ( balance !== 0 ) {\n\t\tnewIndices.touchedFrom = spliceArguments[0];\n\t} else {\n\t\tnewIndices.touchedFrom = length;\n\t}\n\n\treturn newIndices;\n}\n\n\n// The pop, push, shift an unshift methods can all be represented\n// as an equivalent splice\nfunction getSpliceEquivalent ( length, methodName, args ) {\n\tswitch ( methodName ) {\n\t\tcase 'splice':\n\t\t\tif ( args[0] !== undefined && args[0] < 0 ) {\n\t\t\t\targs[0] = length + Math.max( args[0], -length );\n\t\t\t}\n\n\t\t\tif ( args[0] === undefined ) { args[0] = 0; }\n\n\t\t\twhile ( args.length < 2 ) {\n\t\t\t\targs.push( length - args[0] );\n\t\t\t}\n\n\t\t\tif ( typeof args[1] !== 'number' ) {\n\t\t\t\targs[1] = length - args[0];\n\t\t\t}\n\n\t\t\t// ensure we only remove elements that exist\n\t\t\targs[1] = Math.min( args[1], length - args[0] );\n\n\t\t\treturn args;\n\n\t\tcase 'sort':\n\t\tcase 'reverse':\n\t\t\treturn null;\n\n\t\tcase 'pop':\n\t\t\tif ( length ) {\n\t\t\t\treturn [ length - 1, 1 ];\n\t\t\t}\n\t\t\treturn [ 0, 0 ];\n\n\t\tcase 'push':\n\t\t\treturn [ length, 0 ].concat( args );\n\n\t\tcase 'shift':\n\t\t\treturn [ 0, length ? 1 : 0 ];\n\n\t\tcase 'unshift':\n\t\t\treturn [ 0, 0 ].concat( args );\n\t}\n}\n\nvar arrayProto = Array.prototype;\n\nvar makeArrayMethod = function ( methodName ) {\n\tfunction path ( keypath ) {\n\t\tvar args = [], len = arguments.length - 1;\n\t\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\t\treturn model( this.viewmodel.joinAll( splitKeypath( keypath ) ), args );\n\t}\n\n\tfunction model ( mdl, args ) {\n\t\tvar array = mdl.get();\n\n\t\tif ( !Array.isArray( array ) ) {\n\t\t\tif ( array === undefined ) {\n\t\t\t\tarray = [];\n\t\t\t\tvar result$1 = arrayProto[ methodName ].apply( array, args );\n\t\t\t\tvar promise$1 = runloop.start( this, true ).then( function () { return result$1; } );\n\t\t\t\tmdl.set( array );\n\t\t\t\trunloop.end();\n\t\t\t\treturn promise$1;\n\t\t\t} else {\n\t\t\t\tthrow new Error( (\""shuffle array method \"" + methodName + \"" called on non-array at \"" + (mdl.getKeypath())) );\n\t\t\t}\n\t\t}\n\n\t\tvar newIndices = getNewIndices( array.length, methodName, args );\n\t\tvar result = arrayProto[ methodName ].apply( array, args );\n\n\t\tvar promise = runloop.start( this, true ).then( function () { return result; } );\n\t\tpromise.result = result;\n\n\t\tif ( newIndices ) {\n\t\t\tmdl.shuffle( newIndices );\n\t\t} else {\n\t\t\tmdl.set( result );\n\t\t}\n\n\t\trunloop.end();\n\n\t\treturn promise;\n\t}\n\n\treturn { path: path, model: model };\n};\n\nvar updateHook = new Hook( 'update' );\n\nfunction update$3 ( ractive, model ) {\n\t// if the parent is wrapped, the adaptor will need to be updated before\n\t// updating on this keypath\n\tif ( model.parent && model.parent.wrapper ) {\n\t\tmodel.parent.adapt();\n\t}\n\n\tvar promise = runloop.start( ractive, true );\n\n\tmodel.mark();\n\n\t// notify upstream of changes\n\tmodel.notifyUpstream();\n\n\trunloop.end();\n\n\tupdateHook.fire( ractive, model );\n\n\treturn promise;\n}\n\nfunction Ractive$update ( keypath ) {\n\tif ( keypath ) { keypath = splitKeypath( keypath ); }\n\n\treturn update$3( this, keypath ? this.viewmodel.joinAll( keypath ) : this.viewmodel );\n}\n\nvar modelPush = makeArrayMethod( 'push' ).model;\nvar modelPop = makeArrayMethod( 'pop' ).model;\nvar modelShift = makeArrayMethod( 'shift' ).model;\nvar modelUnshift = makeArrayMethod( 'unshift' ).model;\nvar modelSort = makeArrayMethod( 'sort' ).model;\nvar modelSplice = makeArrayMethod( 'splice' ).model;\nvar modelReverse = makeArrayMethod( 'reverse' ).model;\n\n// TODO: at some point perhaps this could support relative * keypaths?\nfunction build$1 ( el, keypath, value ) {\n\tvar sets = [];\n\n\t// set multiple keypaths in one go\n\tif ( isObject( keypath ) ) {\n\t\tfor ( var k in keypath ) {\n\t\t\tif ( keypath.hasOwnProperty( k ) ) {\n\t\t\t\tsets.push( [ findModel( el, k ).model, keypath[k] ] );\n\t\t\t}\n\t\t}\n\n\t}\n\t// set a single keypath\n\telse {\n\t\tsets.push( [ findModel( el, keypath ).model, value ] );\n\t}\n\n\treturn sets;\n}\n\n// get relative keypaths and values\nfunction get$1$1 ( keypath ) {\n\tif ( !keypath ) { return this.proxy.parentFragment.findContext().get( true ); }\n\n\tvar model = resolveReference( this.proxy.parentFragment, keypath );\n\n\treturn model ? model.get( true ) : undefined;\n}\n\nfunction resolve ( path, ractive ) {\n\tvar ref = findModel( this, path );\n\tvar model = ref.model;\n\tvar instance = ref.instance;\n\treturn model ? model.getKeypath( ractive || instance ) : path;\n}\n\nfunction findModel ( el, path ) {\n\tvar frag = el.proxy.parentFragment;\n\n\tif ( typeof path !== 'string' ) {\n\t\treturn { model: frag.findContext(), instance: path };\n\t}\n\n\treturn { model: resolveReference( frag, path ), instance: frag.ractive };\n}\n\n// the usual mutation suspects\nfunction add$2 ( keypath, value ) {\n\tif ( value === undefined ) { value = 1; }\n\tif ( !isNumeric( value ) ) { throw new Error( 'Bad arguments' ); }\n\treturn set$1( this.ractive, build$1( this, keypath, value ).map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar val = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( val ) || !isNumeric( value ) ) { throw new Error( 'Cannot add non-numeric value' ); }\n\t\treturn [ model, value + val ];\n\t}) );\n}\n\nfunction animate$2 ( keypath, value, options ) {\n\tvar model = findModel( this, keypath ).model;\n\treturn animate$1( this.ractive, model, value, options );\n}\n\nfunction link$1 ( source, dest ) {\n\tvar there = findModel( this, source ).model;\n\tvar here = findModel( this, dest ).model;\n\tvar promise = runloop.start( this.ractive, true );\n\there.link( there, source );\n\trunloop.end();\n\treturn promise;\n}\n\nfunction observe ( keypath, callback, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( isObject( keypath ) ) { options = callback || {}; }\n\toptions.fragment = this.proxy.parentFragment;\n\treturn this.ractive.observe( keypath, callback, options );\n}\n\nfunction observeOnce ( keypath, callback, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( isObject( keypath ) ) { options = callback || {}; }\n\toptions.fragment = this.proxy.parentFragment;\n\treturn this.ractive.observeOnce( keypath, callback, options );\n}\n\nfunction pop ( keypath ) {\n\treturn modelPop( findModel( this, keypath ).model, [] );\n}\n\nfunction push ( keypath ) {\n\tvar values = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];\n\n\treturn modelPush( findModel( this, keypath ).model, values );\n}\n\nfunction raise ( name, event ) {\n\tvar args = [], len = arguments.length - 2;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 2 ];\n\n\tvar element = this.proxy;\n\n\twhile ( element ) {\n\t\tvar events = element.events;\n\t\tfor ( var i = 0; i < events.length; i++ ) {\n\t\t\tvar event$1 = events[i];\n\t\t\tif ( ~event$1.template.n.indexOf( name ) ) {\n\t\t\t\tevent$1.fire( event$1, args );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\telement = element.parent;\n\t}\n}\n\nfunction readLink ( keypath, options ) {\n\treturn this.ractive.readLink( this.resolve( keypath ), options );\n}\n\nfunction reverse ( keypath ) {\n\treturn modelReverse( findModel( this, keypath ).model, [] );\n}\n\nfunction set$2 ( keypath, value ) {\n\treturn set$1( this.ractive, build$1( this, keypath, value ) );\n}\n\nfunction shift ( keypath ) {\n\treturn modelShift( findModel( this, keypath ).model, [] );\n}\n\nfunction splice ( keypath, index, drop ) {\n\tvar add = [], len = arguments.length - 3;\n\twhile ( len-- > 0 ) add[ len ] = arguments[ len + 3 ];\n\n\tadd.unshift( index, drop );\n\treturn modelSplice( findModel( this, keypath ).model, add );\n}\n\nfunction sort ( keypath ) {\n\treturn modelSort( findModel( this, keypath ).model, [] );\n}\n\nfunction subtract ( keypath, value ) {\n\tif ( value === undefined ) { value = 1; }\n\tif ( !isNumeric( value ) ) { throw new Error( 'Bad arguments' ); }\n\treturn set$1( this.ractive, build$1( this, keypath, value ).map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar val = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( val ) || !isNumeric( value ) ) { throw new Error( 'Cannot add non-numeric value' ); }\n\t\treturn [ model, value - val ];\n\t}) );\n}\n\nfunction toggle ( keypath ) {\n\tvar ref = findModel( this, keypath );\n\tvar model = ref.model;\n\treturn set$1( this.ractive, [ [ model, !model.get() ] ] );\n}\n\nfunction unlink$1 ( dest ) {\n\tvar here = findModel( this, dest ).model;\n\tvar promise = runloop.start( this.ractive, true );\n\tif ( here.owner && here.owner._link ) { here.owner.unlink(); }\n\trunloop.end();\n\treturn promise;\n}\n\nfunction unshift ( keypath ) {\n\tvar add = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) add[ len ] = arguments[ len + 1 ];\n\n\treturn modelUnshift( findModel( this, keypath ).model, add );\n}\n\nfunction update$2 ( keypath ) {\n\treturn update$3( this.ractive, findModel( this, keypath ).model );\n}\n\nfunction updateModel ( keypath, cascade ) {\n\tvar ref = findModel( this, keypath );\n\tvar model = ref.model;\n\tvar promise = runloop.start( this.ractive, true );\n\tmodel.updateFromBindings( cascade );\n\trunloop.end();\n\treturn promise;\n}\n\n// two-way binding related helpers\nfunction isBound () {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\treturn !!model;\n}\n\nfunction getBindingPath ( ractive ) {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\tvar instance = ref.instance;\n\tif ( model ) { return model.getKeypath( ractive || instance ); }\n}\n\nfunction getBinding () {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\tif ( model ) { return model.get( true ); }\n}\n\nfunction getBindingModel ( ctx ) {\n\tvar el = ctx.proxy;\n\treturn { model: el.binding && el.binding.model, instance: el.parentFragment.ractive };\n}\n\nfunction setBinding ( value ) {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\treturn set$1( this.ractive, [ [ model, value ] ] );\n}\n\nfunction addHelpers ( obj, element ) {\n\tObject.defineProperties( obj, {\n\t\tproxy: { value: element, writable: true },\n\t\tractive: { value: element.parentFragment.ractive },\n\t\tresolve: { value: resolve },\n\t\tget: { value: get$1$1 },\n\n\t\tadd: { value: add$2 },\n\t\tanimate: { value: animate$2 },\n\t\tlink: { value: link$1 },\n\t\tobserve: { value: observe },\n\t\tobserveOnce: { value: observeOnce },\n\t\tpop: { value: pop },\n\t\tpush: { value: push },\n\t\traise: { value: raise },\n\t\treadLink: { value: readLink },\n\t\treverse: { value: reverse },\n\t\tset: { value: set$2 },\n\t\tshift: { value: shift },\n\t\tsort: { value: sort },\n\t\tsplice: { value: splice },\n\t\tsubtract: { value: subtract },\n\t\ttoggle: { value: toggle },\n\t\tunlink: { value: unlink$1 },\n\t\tunshift: { value: unshift },\n\t\tupdate: { value: update$2 },\n\t\tupdateModel: { value: updateModel },\n\n\t\tisBound: { value: isBound },\n\t\tgetBindingPath: { value: getBindingPath },\n\t\tgetBinding: { value: getBinding },\n\t\tsetBinding: { value: setBinding },\n\n\t\tdecorators: {\n\t\t\tget: function get$1 () {\n\t\t\t\tvar items = {};\n\t\t\t\telement.decorators.forEach( function (d) { return items[ d.name ] = d.intermediary; } );\n\t\t\t\treturn items;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn obj;\n}\n\nvar query = doc && doc.querySelector;\n\nvar staticInfo = function( node ) {\n\tif ( typeof node === 'string' && query ) {\n\t\tnode = query.call( document, node );\n\t}\n\n\tif ( !node || !node._ractive ) { return undefined; }\n\n\tvar storage = node._ractive;\n\n\treturn addHelpers( {}, storage.proxy );\n};\n\nfunction getNodeInfo( node, options ) {\n\tif ( typeof node === 'string' ) {\n\t\tnode = this.find( node, options );\n\t}\n\n\treturn staticInfo( node );\n}\n\nvar insertHook = new Hook( 'insert' );\n\nfunction Ractive$insert ( target, anchor ) {\n\tif ( !this.fragment.rendered ) {\n\t\t// TODO create, and link to, documentation explaining this\n\t\tthrow new Error( 'The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.' );\n\t}\n\n\ttarget = getElement( target );\n\tanchor = getElement( anchor ) || null;\n\n\tif ( !target ) {\n\t\tthrow new Error( 'You must specify a valid target to insert into' );\n\t}\n\n\ttarget.insertBefore( this.detach(), anchor );\n\tthis.el = target;\n\n\t( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( this );\n\tthis.isDetached = false;\n\n\tfireInsertHook( this );\n}\n\nfunction fireInsertHook( ractive ) {\n\tinsertHook.fire( ractive );\n\n\tractive.findAllComponents('*').forEach( function (child) {\n\t\tfireInsertHook( child.instance );\n\t});\n}\n\nfunction link$2( there, here, options ) {\n\tif ( here === there || (there + '.').indexOf( here + '.' ) === 0 || (here + '.').indexOf( there + '.' ) === 0 ) {\n\t\tthrow new Error( 'A keypath cannot be linked to itself.' );\n\t}\n\n\tvar promise = runloop.start();\n\tvar model;\n\tvar target = ( options && options.ractive ) || this;\n\n\t// may need to allow a mapping to resolve implicitly\n\tvar sourcePath = splitKeypath( there );\n\tif ( !target.viewmodel.has( sourcePath[0] ) && target.component ) {\n\t\tmodel = resolveReference( target.component.parentFragment, sourcePath[0] );\n\t\tmodel = model.joinAll( sourcePath.slice( 1 ) );\n\t}\n\n\tthis.viewmodel.joinAll( splitKeypath( here ), { lastLink: false } ).link( model || target.viewmodel.joinAll( sourcePath ), there );\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nvar Observer = function Observer ( ractive, model, callback, options ) {\n\tthis.context = options.context || ractive;\n\tthis.callback = callback;\n\tthis.ractive = ractive;\n\n\tif ( model ) { this.resolved( model ); }\n\n\tthis.options = options;\n\n\tif ( typeof options.old === 'function' ) {\n\t\tthis.oldContext = Object.create( ractive );\n\t\tthis.old = options.old;\n\t} else {\n\t\tthis.old = old;\n\t}\n\n\tif ( options.init !== false ) {\n\t\tthis.dirty = true;\n\t\tthis.dispatch();\n\t} else {\n\t\tthis.oldValue = this.old.call( this.oldContext, undefined, this.newValue );\n\t}\n\n\tthis.dirty = false;\n};\n\nObserver.prototype.cancel = function cancel () {\n\tthis.cancelled = true;\n\tif ( this.model ) {\n\t\tthis.model.unregister( this );\n\t} else {\n\t\tthis.resolver.unbind();\n\t}\n\tremoveFromArray$1( this.ractive._observers, this );\n};\n\nObserver.prototype.dispatch = function dispatch () {\n\tif ( !this.cancelled ) {\n\t\tthis.callback.call( this.context, this.newValue, this.oldValue, this.keypath );\n\t\tthis.oldValue = this.old.call( this.oldContext, this.oldValue, this.model ? this.model.get() : this.newValue );\n\t\tthis.dirty = false;\n\t}\n};\n\nObserver.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty ) {\n\t\tvar newValue = this.model.get();\n\t\tif ( isEqual( newValue, this.oldValue ) ) { return; }\n\n\t\tthis.newValue = newValue;\n\n\t\tif ( this.options.strict && this.newValue === this.oldValue ) { return; }\n\n\t\trunloop.addObserver( this, this.options.defer );\n\t\tthis.dirty = true;\n\n\t\tif ( this.options.once ) { runloop.scheduleTask( function () { return this$1.cancel(); } ); }\n\t}\n};\n\nObserver.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tnext = rebindMatch( this.keypath, next, previous );\n\t// TODO: set up a resolver if next is undefined?\n\tif ( next === this.model ) { return false; }\n\n\tif ( this.model ) { this.model.unregister( this ); }\n\tif ( next ) { next.addShuffleTask( function () { return this$1.resolved( next ); } ); }\n};\n\nObserver.prototype.resolved = function resolved ( model ) {\n\tthis.model = model;\n\tthis.keypath = model.getKeypath( this.ractive );\n\n\tthis.oldValue = undefined;\n\tthis.newValue = model.get();\n\n\tmodel.register( this );\n};\n\nfunction old ( previous, next ) {\n\treturn next;\n}\n\nvar star$1 = /\\*+/g;\n\nvar PatternObserver = function PatternObserver ( ractive, baseModel, keys, callback, options ) {\n\tvar this$1 = this;\n\n\tthis.context = options.context || ractive;\n\tthis.ractive = ractive;\n\tthis.baseModel = baseModel;\n\tthis.keys = keys;\n\tthis.callback = callback;\n\n\tvar pattern = keys.join( '\\\\.' ).replace( star$1, '(.+)' );\n\tvar baseKeypath = this.baseKeypath = baseModel.getKeypath( ractive );\n\tthis.pattern = new RegExp( (\""^\"" + (baseKeypath ? baseKeypath + '\\\\.' : '') + pattern + \""$\"") );\n\tthis.recursive = keys.length === 1 && keys[0] === '**';\n\tif ( this.recursive ) { this.keys = [ '*' ]; }\n\n\tthis.oldValues = {};\n\tthis.newValues = {};\n\n\tthis.defer = options.defer;\n\tthis.once = options.once;\n\tthis.strict = options.strict;\n\n\tthis.dirty = false;\n\tthis.changed = [];\n\tthis.partial = false;\n\tthis.links = options.links;\n\n\tvar models = baseModel.findMatches( this.keys );\n\n\tmodels.forEach( function (model) {\n\t\tthis$1.newValues[ model.getKeypath( this$1.ractive ) ] = model.get();\n\t});\n\n\tif ( options.init !== false ) {\n\t\tthis.dispatch();\n\t} else {\n\t\tthis.oldValues = this.newValues;\n\t}\n\n\tbaseModel.registerPatternObserver( this );\n};\n\nPatternObserver.prototype.cancel = function cancel () {\n\tthis.baseModel.unregisterPatternObserver( this );\n\tremoveFromArray$1( this.ractive._observers, this );\n};\n\nPatternObserver.prototype.dispatch = function dispatch () {\n\t\tvar this$1 = this;\n\n\tvar newValues = this.newValues;\n\tthis.newValues = {};\n\tObject.keys( newValues ).forEach( function (keypath) {\n\t\tif ( this$1.newKeys && !this$1.newKeys[ keypath ] ) { return; }\n\n\t\tvar newValue = newValues[ keypath ];\n\t\tvar oldValue = this$1.oldValues[ keypath ];\n\n\t\tif ( this$1.strict && newValue === oldValue ) { return; }\n\t\tif ( isEqual( newValue, oldValue ) ) { return; }\n\n\t\tvar args = [ newValue, oldValue, keypath ];\n\t\tif ( keypath ) {\n\t\t\tvar wildcards = this$1.pattern.exec( keypath );\n\t\t\tif ( wildcards ) {\n\t\t\t\targs = args.concat( wildcards.slice( 1 ) );\n\t\t\t}\n\t\t}\n\n\t\tthis$1.callback.apply( this$1.context, args );\n\t});\n\n\tif ( this.partial ) {\n\t\tfor ( var k in newValues ) {\n\t\t\tthis$1.oldValues[k] = newValues[k];\n\t\t}\n\t} else {\n\t\tthis.oldValues = newValues;\n\t}\n\n\tthis.newKeys = null;\n\tthis.dirty = false;\n};\n\nPatternObserver.prototype.notify = function notify ( key ) {\n\tthis.changed.push( key );\n};\n\nPatternObserver.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tif ( !Array.isArray( this.baseModel.value ) ) { return; }\n\n\tvar base = this.baseKeypath = this.baseModel.getKeypath( this.ractive );\n\tvar max = this.baseModel.value.length;\n\tvar suffix = this.keys.length > 1 ? '.' + this.keys.slice( 1 ).join( '.' ) : '';\n\n\tthis.newKeys = {};\n\tfor ( var i = 0; i < newIndices.length; i++ ) {\n\t\tif ( newIndices[ i ] === -1 || newIndices[ i ] === i ) { continue; }\n\t\tthis$1.newKeys[ (base + \"".\"" + i + suffix) ] = true;\n\t}\n\n\tfor ( var i$1 = newIndices.touchedFrom; i$1 < max; i$1++ ) {\n\t\tthis$1.newKeys[ (base + \"".\"" + i$1 + suffix) ] = true;\n\t}\n};\n\nPatternObserver.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty || this.changed.length ) {\n\t\tif ( !this.dirty ) { this.newValues = {}; }\n\n\t\tif ( !this.changed.length ) {\n\t\t\tthis.baseModel.findMatches( this.keys ).forEach( function (model) {\n\t\t\t\tvar keypath = model.getKeypath( this$1.ractive );\n\t\t\t\tthis$1.newValues[ keypath ] = model.get();\n\t\t\t});\n\t\t\tthis.partial = false;\n\t\t} else {\n\t\t\tvar count = 0;\n\n\t\t\tif ( this.recursive ) {\n\t\t\t\tthis.changed.forEach( function (keys) {\n\t\t\t\t\tvar model = this$1.baseModel.joinAll( keys );\n\t\t\t\t\tif ( model.isLink && !this$1.links ) { return; }\n\t\t\t\t\tcount++;\n\t\t\t\t\tthis$1.newValues[ model.getKeypath( this$1.ractive ) ] = model.get();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar ok = this.baseModel.isRoot ?\n\t\t\t\t\tthis.changed.map( function (keys) { return keys.map( escapeKey ).join( '.' ); } ) :\n\t\t\t\t\tthis.changed.map( function (keys) { return this$1.baseKeypath + '.' + keys.map( escapeKey ).join( '.' ); } );\n\n\t\t\t\tthis.baseModel.findMatches( this.keys ).forEach( function (model) {\n\t\t\t\t\tvar keypath = model.getKeypath( this$1.ractive );\n\t\t\t\t\tvar check = function (k) {\n\t\t\t\t\t\treturn ( k.indexOf( keypath ) === 0 && ( k.length === keypath.length || k[ keypath.length ] === '.' ) ) ||\n\t\t\t\t\t\t\t( keypath.indexOf( k ) === 0 && ( k.length === keypath.length || keypath[ k.length ] === '.' ) );\n\n\t\t\t\t\t};\n\n\t\t\t\t\t// is this model on a changed keypath?\n\t\t\t\t\tif ( ok.filter( check ).length ) {\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t\tthis$1.newValues[ keypath ] = model.get();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// no valid change triggered, so bail to avoid breakage\n\t\t\tif ( !count ) { return; }\n\n\t\t\tthis.partial = true;\n\t\t}\n\n\t\trunloop.addObserver( this, this.defer );\n\t\tthis.dirty = true;\n\t\tthis.changed.length = 0;\n\n\t\tif ( this.once ) { this.cancel(); }\n\t}\n};\n\nfunction negativeOne () {\n\treturn -1;\n}\n\nvar ArrayObserver = function ArrayObserver ( ractive, model, callback, options ) {\n\tthis.ractive = ractive;\n\tthis.model = model;\n\tthis.keypath = model.getKeypath();\n\tthis.callback = callback;\n\tthis.options = options;\n\n\tthis.pending = null;\n\n\tmodel.register( this );\n\n\tif ( options.init !== false ) {\n\t\tthis.sliced = [];\n\t\tthis.shuffle([]);\n\t\tthis.dispatch();\n\t} else {\n\t\tthis.sliced = this.slice();\n\t}\n};\n\nArrayObserver.prototype.cancel = function cancel () {\n\tthis.model.unregister( this );\n\tremoveFromArray$1( this.ractive._observers, this );\n};\n\nArrayObserver.prototype.dispatch = function dispatch () {\n\tthis.callback( this.pending );\n\tthis.pending = null;\n\tif ( this.options.once ) { this.cancel(); }\n};\n\nArrayObserver.prototype.handleChange = function handleChange () {\n\tif ( this.pending ) {\n\t\t// post-shuffle\n\t\trunloop.addObserver( this, this.options.defer );\n\t} else {\n\t\t// entire array changed\n\t\tthis.shuffle( this.sliced.map( negativeOne ) );\n\t\tthis.handleChange();\n\t}\n};\n\nArrayObserver.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tvar newValue = this.slice();\n\n\tvar inserted = [];\n\tvar deleted = [];\n\tvar start;\n\n\tvar hadIndex = {};\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\thadIndex[ newIndex ] = true;\n\n\t\tif ( newIndex !== oldIndex && start === undefined ) {\n\t\t\tstart = oldIndex;\n\t\t}\n\n\t\tif ( newIndex === -1 ) {\n\t\t\tdeleted.push( this$1.sliced[ oldIndex ] );\n\t\t}\n\t});\n\n\tif ( start === undefined ) { start = newIndices.length; }\n\n\tvar len = newValue.length;\n\tfor ( var i = 0; i < len; i += 1 ) {\n\t\tif ( !hadIndex[i] ) { inserted.push( newValue[i] ); }\n\t}\n\n\tthis.pending = { inserted: inserted, deleted: deleted, start: start };\n\tthis.sliced = newValue;\n};\n\nArrayObserver.prototype.slice = function slice () {\n\tvar value = this.model.get();\n\treturn Array.isArray( value ) ? value.slice() : [];\n};\n\nfunction observe$1 ( keypath, callback, options ) {\n\tvar this$1 = this;\n\n\tvar observers = [];\n\tvar map;\n\tvar opts;\n\n\tif ( isObject( keypath ) ) {\n\t\tmap = keypath;\n\t\topts = callback || {};\n\t} else {\n\t\tif ( typeof keypath === 'function' ) {\n\t\t\tmap = { '': keypath };\n\t\t\topts = callback || {};\n\t\t} else {\n\t\t\tmap = {};\n\t\t\tmap[ keypath ] = callback;\n\t\t\topts = options || {};\n\t\t}\n\t}\n\n\tvar silent = false;\n\tObject.keys( map ).forEach( function (keypath) {\n\t\tvar callback = map[ keypath ];\n\t\tvar caller = function () {\n\t\t\tvar args = [], len = arguments.length;\n\t\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\t\tif ( silent ) { return; }\n\t\t\treturn callback.apply( this, args );\n\t\t};\n\n\t\tvar keypaths = keypath.split( ' ' );\n\t\tif ( keypaths.length > 1 ) { keypaths = keypaths.filter( function (k) { return k; } ); }\n\n\t\tkeypaths.forEach( function (keypath) {\n\t\t\tvar observer = createObserver( this$1, keypath, caller, opts );\n\t\t\tif ( observer ) { observers.push( observer ); }\n\t\t});\n\t});\n\n\t// add observers to the Ractive instance, so they can be\n\t// cancelled on ractive.teardown()\n\tthis._observers.push.apply( this._observers, observers );\n\n\treturn {\n\t\tcancel: function () { return observers.forEach( function (o) { return o.cancel(); } ); },\n\t\tisSilenced: function () { return silent; },\n\t\tsilence: function () { return silent = true; },\n\t\tresume: function () { return silent = false; }\n\t};\n}\n\nfunction createObserver ( ractive, keypath, callback, options ) {\n\tvar keys = splitKeypath( keypath );\n\tvar wildcardIndex = keys.indexOf( '*' );\n\tif ( !~wildcardIndex ) { wildcardIndex = keys.indexOf( '**' ); }\n\n\toptions.fragment = options.fragment || ractive.fragment;\n\n\tvar model;\n\tif ( !options.fragment ) {\n\t\tmodel = ractive.viewmodel.joinKey( keys[0] );\n\t} else {\n\t\t// .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .\n\t\tif ( ~keys[0].indexOf( '.*' ) ) {\n\t\t\tmodel = options.fragment.findContext();\n\t\t\twildcardIndex = 0;\n\t\t\tkeys[0] = keys[0].slice( 1 );\n\t\t} else {\n\t\t\tmodel = wildcardIndex === 0 ? options.fragment.findContext() : resolveReference( options.fragment, keys[0] );\n\t\t}\n\t}\n\n\t// the model may not exist key\n\tif ( !model ) { model = ractive.viewmodel.joinKey( keys[0] ); }\n\n\tif ( !~wildcardIndex ) {\n\t\tmodel = model.joinAll( keys.slice( 1 ) );\n\t\tif ( options.array ) {\n\t\t\treturn new ArrayObserver( ractive, model, callback, options );\n\t\t} else {\n\t\t\treturn new Observer( ractive, model, callback, options );\n\t\t}\n\t} else {\n\t\tvar double = keys.indexOf( '**' );\n\t\tif ( ~double ) {\n\t\t\tif ( double + 1 !== keys.length || ~keys.indexOf( '*' ) ) {\n\t\t\t\twarnOnceIfDebug( \""Recursive observers may only specify a single '**' at the end of the path.\"" );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tmodel = model.joinAll( keys.slice( 1, wildcardIndex ) );\n\n\t\treturn new PatternObserver( ractive, model, keys.slice( wildcardIndex ), callback, options );\n\t}\n}\n\nvar onceOptions = { init: false, once: true };\n\nfunction observeOnce$1 ( keypath, callback, options ) {\n\tif ( isObject( keypath ) || typeof keypath === 'function' ) {\n\t\toptions = Object.assign( callback || {}, onceOptions );\n\t\treturn this.observe( keypath, options );\n\t}\n\n\toptions = Object.assign( options || {}, onceOptions );\n\treturn this.observe( keypath, callback, options );\n}\n\nvar trim = function (str) { return str.trim(); };\n\nvar notEmptyString = function (str) { return str !== ''; };\n\nfunction Ractive$off ( eventName, callback ) {\n\tvar this$1 = this;\n\n\t// if no event is specified, remove _all_ event listeners\n\tif ( !eventName ) {\n\t\tthis._subs = {};\n\t} else {\n\t\t// Handle multiple space-separated event names\n\t\tvar eventNames = eventName.split( ' ' ).map( trim ).filter( notEmptyString );\n\n\t\teventNames.forEach( function (event) {\n\t\t\tvar subs = this$1._subs[ event ];\n\t\t\t// if given a specific callback to remove, remove only it\n\t\t\tif ( subs && callback ) {\n\t\t\t\t// flag this callback as off so that any in-flight firings don't call\n\t\t\t\t// a cancelled handler - this is _slightly_ hacky\n\t\t\t\t( callback._proxy || callback ).off = true;\n\t\t\t\tremoveFromArray$1( subs, callback._proxy || callback );\n\t\t\t\tif ( event.indexOf( '.' ) ) { this$1._nsSubs--; }\n\t\t\t}\n\n\t\t\t// otherwise, remove all listeners for this event\n\t\t\telse if ( subs ) {\n\t\t\t\tif ( event.indexOf( '.' ) ) { this$1._nsSubs -= subs.length; }\n\t\t\t\tsubs.length = 0;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn this;\n}\n\nfunction Ractive$on ( eventName, callback ) {\n\tvar this$1 = this;\n\n\t// eventName may already be a map\n\tvar map = typeof eventName === 'object' ? eventName : {};\n\t// or it may be a string along with a callback\n\tif ( typeof eventName === 'string' ) { map[ eventName ] = callback; }\n\n\tvar silent = false;\n\tvar events = [];\n\n\tvar loop = function ( k ) {\n\t\tvar callback$1 = map[k];\n\t\tvar caller = function () {\n\t\t\tvar args = [], len = arguments.length;\n\t\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\t\tif ( !silent ) { return callback$1.apply( this, args ); }\n\t\t};\n\t\tcallback$1._proxy = caller;\n\n\t\tif ( map.hasOwnProperty( k ) ) {\n\t\t\tvar names = k.split( ' ' ).map( trim ).filter( notEmptyString );\n\t\t\tnames.forEach( function (n) {\n\t\t\t\t( this$1._subs[ n ] || ( this$1._subs[ n ] = [] ) ).push( caller );\n\t\t\t\tif ( n.indexOf( '.' ) ) { this$1._nsSubs++; }\n\t\t\t\tevents.push( [ n, caller ] );\n\t\t\t});\n\t\t}\n\t};\n\n\tfor ( var k in map ) loop( k );\n\n\treturn {\n\t\tcancel: function () { return events.forEach( function (e) { return this$1.off( e[0], e[1] ); } ); },\n\t\tisSilenced: function () { return silent; },\n\t\tsilence: function () { return silent = true; },\n\t\tresume: function () { return silent = false; }\n\t};\n}\n\nfunction Ractive$once ( eventName, handler ) {\n\tvar listener = this.on( eventName, function () {\n\t\thandler.apply( this, arguments );\n\t\tlistener.cancel();\n\t});\n\n\t// so we can still do listener.cancel() manually\n\treturn listener;\n}\n\nvar pop$1 = makeArrayMethod( 'pop' ).path;\n\nvar push$1 = makeArrayMethod( 'push' ).path;\n\nfunction readLink$1 ( keypath, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tvar path = splitKeypath( keypath );\n\n\tif ( this.viewmodel.has( path[0] ) ) {\n\t\tvar model = this.viewmodel.joinAll( path );\n\n\t\tif ( !model.isLink ) { return; }\n\n\t\twhile ( ( model = model.target ) && options.canonical !== false ) {\n\t\t\tif ( !model.isLink ) { break; }\n\t\t}\n\n\t\tif ( model ) { return { ractive: model.root.ractive, keypath: model.getKeypath() }; }\n\t}\n}\n\nvar PREFIX = '/* Ractive.js component styles */';\n\n// Holds current definitions of styles.\nvar styleDefinitions = [];\n\n// Flag to tell if we need to update the CSS\nvar isDirty = false;\n\n// These only make sense on the browser. See additional setup below.\nvar styleElement = null;\nvar useCssText = null;\n\nfunction addCSS( styleDefinition ) {\n\tstyleDefinitions.push( styleDefinition );\n\tisDirty = true;\n}\n\nfunction applyCSS() {\n\n\t// Apply only seems to make sense when we're in the DOM. Server-side renders\n\t// can call toCSS to get the updated CSS.\n\tif ( !doc || !isDirty ) { return; }\n\n\tif ( useCssText ) {\n\t\tstyleElement.styleSheet.cssText = getCSS( null );\n\t} else {\n\t\tstyleElement.innerHTML = getCSS( null );\n\t}\n\n\tisDirty = false;\n}\n\nfunction getCSS( cssIds ) {\n\n\tvar filteredStyleDefinitions = cssIds ? styleDefinitions.filter( function (style) { return ~cssIds.indexOf( style.id ); } ) : styleDefinitions;\n\n\treturn filteredStyleDefinitions.reduce( function ( styles, style ) { return (styles + \""\\n\\n/* {\"" + (style.id) + \""} */\\n\"" + (style.styles)); }, PREFIX );\n\n}\n\n// If we're on the browser, additional setup needed.\nif ( doc && ( !styleElement || !styleElement.parentNode ) ) {\n\n\tstyleElement = doc.createElement( 'style' );\n\tstyleElement.type = 'text/css';\n\n\tdoc.getElementsByTagName( 'head' )[ 0 ].appendChild( styleElement );\n\n\tuseCssText = !!styleElement.styleSheet;\n}\n\nfunction fillGaps ( target ) {\n\tvar sources = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n\n\tfor (var i = 0; i < sources.length; i++){\n\t\tvar source = sources[i];\n\t\tfor ( var key in source ) {\n\t\t\t// Source can be a prototype-less object.\n\t\t\tif ( key in target || !Object.prototype.hasOwnProperty.call( source, key ) ) { continue; }\n\t\t\ttarget[ key ] = source[ key ];\n\t\t}\n\t}\n\n\treturn target;\n}\n\nfunction toPairs ( obj ) {\n\tif ( obj === void 0 ) obj = {};\n\n\tvar pairs = [];\n\tfor ( var key in obj ) {\n\t\t// Source can be a prototype-less object.\n\t\tif ( !Object.prototype.hasOwnProperty.call( obj, key ) ) { continue; }\n\t\tpairs.push( [ key, obj[ key ] ] );\n\t}\n\treturn pairs;\n}\n\nvar adaptConfigurator = {\n\textend: function ( Parent, proto, options ) {\n\t\tproto.adapt = combine( proto.adapt, ensureArray( options.adapt ) );\n\t},\n\n\tinit: function init () {}\n};\n\nvar remove$1 = /\\/\\*(?:[\\s\\S]*?)\\*\\//g;\nvar escape = /url\\(\\s*(['\""])(?:\\\\[\\s\\S]|(?!\\1).)*\\1\\s*\\)|url\\((?:\\\\[\\s\\S]|[^)])*\\)|(['\""])(?:\\\\[\\s\\S]|(?!\\2).)*\\2/gi;\nvar value = /\\0(\\d+)/g;\n\n// Removes comments and strings from the given CSS to make it easier to parse.\n// Callback receives the cleaned CSS and a function which can be used to put\n// the removed strings back in place after parsing is done.\nvar cleanCss = function ( css, callback, additionalReplaceRules ) {\n\tif ( additionalReplaceRules === void 0 ) additionalReplaceRules = [];\n\n\tvar values = [];\n\tvar reconstruct = function (css) { return css.replace( value, function ( match, n ) { return values[ n ]; } ); };\n\tcss = css.replace( escape, function (match) { return (\""\\u0000\"" + (values.push( match ) - 1)); }).replace( remove$1, '' );\n\n\tadditionalReplaceRules.forEach( function ( pattern ) {\n\t\tcss = css.replace( pattern, function (match) { return (\""\\u0000\"" + (values.push( match ) - 1)); } );\n\t});\n\n\treturn callback( css, reconstruct );\n};\n\nvar selectorsPattern = /(?:^|\\}|\\{)\\s*([^\\{\\}\\0]+)\\s*(?=\\{)/g;\nvar keyframesDeclarationPattern = /@keyframes\\s+[^\\{\\}]+\\s*\\{(?:[^{}]+|\\{[^{}]+})*}/gi;\nvar selectorUnitPattern = /((?:(?:\\[[^\\]]+\\])|(?:[^\\s\\+\\>~:]))+)((?:::?[^\\s\\+\\>\\~\\(:]+(?:\\([^\\)]+\\))?)*\\s*[\\s\\+\\>\\~]?)\\s*/g;\nvar excludePattern = /^(?:@|\\d+%)/;\nvar dataRvcGuidPattern = /\\[data-ractive-css~=\""\\{[a-z0-9-]+\\}\""]/g;\n\nfunction trim$1 ( str ) {\n\treturn str.trim();\n}\n\nfunction extractString ( unit ) {\n\treturn unit.str;\n}\n\nfunction transformSelector ( selector, parent ) {\n\tvar selectorUnits = [];\n\tvar match;\n\n\twhile ( match = selectorUnitPattern.exec( selector ) ) {\n\t\tselectorUnits.push({\n\t\t\tstr: match[0],\n\t\t\tbase: match[1],\n\t\t\tmodifiers: match[2]\n\t\t});\n\t}\n\n\t// For each simple selector within the selector, we need to create a version\n\t// that a) combines with the id, and b) is inside the id\n\tvar base = selectorUnits.map( extractString );\n\n\tvar transformed = [];\n\tvar i = selectorUnits.length;\n\n\twhile ( i-- ) {\n\t\tvar appended = base.slice();\n\n\t\t// Pseudo-selectors should go after the attribute selector\n\t\tvar unit = selectorUnits[i];\n\t\tappended[i] = unit.base + parent + unit.modifiers || '';\n\n\t\tvar prepended = base.slice();\n\t\tprepended[i] = parent + ' ' + prepended[i];\n\n\t\ttransformed.push( appended.join( ' ' ), prepended.join( ' ' ) );\n\t}\n\n\treturn transformed.join( ', ' );\n}\n\nfunction transformCss ( css, id ) {\n\tvar dataAttr = \""[data-ractive-css~=\\\""{\"" + id + \""}\\\""]\"";\n\n\tvar transformed;\n\n\tif ( dataRvcGuidPattern.test( css ) ) {\n\t\ttransformed = css.replace( dataRvcGuidPattern, dataAttr );\n\t} else {\n\t\ttransformed = cleanCss( css, function ( css, reconstruct ) {\n\t\t\tcss = css.replace( selectorsPattern, function ( match, $1 ) {\n\t\t\t\t// don't transform at-rules and keyframe declarations\n\t\t\t\tif ( excludePattern.test( $1 ) ) { return match; }\n\n\t\t\t\tvar selectors = $1.split( ',' ).map( trim$1 );\n\t\t\t\tvar transformed = selectors\n\t\t\t\t\t.map( function (selector) { return transformSelector( selector, dataAttr ); } )\n\t\t\t\t\t.join( ', ' ) + ' ';\n\n\t\t\t\treturn match.replace( $1, transformed );\n\t\t\t});\n\n\t\t\treturn reconstruct( css );\n\t\t}, [ keyframesDeclarationPattern ]);\n\t}\n\n\treturn transformed;\n}\n\nfunction s4() {\n\treturn Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n}\n\nfunction uuid() {\n\treturn s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n\nvar cssConfigurator = {\n\tname: 'css',\n\n\t// Called when creating a new component definition\n\textend: function ( Parent, proto, options ) {\n\t\tif ( !options.css ) { return; }\n\n\t\tvar id = options.cssId || uuid();\n\t\tvar styles = options.noCssTransform ? options.css : transformCss( options.css, id );\n\n\t\tproto.cssId = id;\n\n\t\taddCSS( { id: id, styles: styles } );\n\n\t},\n\n\t// Called when creating a new component instance\n\tinit: function ( Parent, target, options ) {\n\t\tif ( !options.css ) { return; }\n\n\t\twarnIfDebug( \""\\nThe css option is currently not supported on a per-instance basis and will be discarded. Instead, we recommend instantiating from a component definition with a css option.\\n\\nconst Component = Ractive.extend({\\n\\t...\\n\\tcss: '/* your css */',\\n\\t...\\n});\\n\\nconst componentInstance = new Component({ ... })\\n\\t\\t\"" );\n\t}\n\n};\n\nfunction validate ( data ) {\n\t// Warn if userOptions.data is a non-POJO\n\tif ( data && data.constructor !== Object ) {\n\t\tif ( typeof data === 'function' ) {\n\t\t\t// TODO do we need to support this in the new Ractive() case?\n\t\t} else if ( typeof data !== 'object' ) {\n\t\t\tfatal( (\""data option must be an object or a function, `\"" + data + \""` is not valid\"") );\n\t\t} else {\n\t\t\twarnIfDebug( 'If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged' );\n\t\t}\n\t}\n}\n\nvar dataConfigurator = {\n\tname: 'data',\n\n\textend: function ( Parent, proto, options ) {\n\t\tvar key;\n\t\tvar value;\n\n\t\t// check for non-primitives, which could cause mutation-related bugs\n\t\tif ( options.data && isObject( options.data ) ) {\n\t\t\tfor ( key in options.data ) {\n\t\t\t\tvalue = options.data[ key ];\n\n\t\t\t\tif ( value && typeof value === 'object' ) {\n\t\t\t\t\tif ( isObject( value ) || Array.isArray( value ) ) {\n\t\t\t\t\t\twarnIfDebug( \""Passing a `data` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\\n\\n  // this...\\n  data: function () {\\n    return {\\n      myObject: {}\\n    };\\n  })\\n\\n  // instead of this:\\n  data: {\\n    myObject: {}\\n  }\"" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tproto.data = combine$1( proto.data, options.data );\n\t},\n\n\tinit: function ( Parent, ractive, options ) {\n\t\tvar result = combine$1( Parent.prototype.data, options.data );\n\n\t\tif ( typeof result === 'function' ) { result = result.call( ractive ); }\n\n\t\t// bind functions to the ractive instance at the top level,\n\t\t// unless it's a non-POJO (in which case alarm bells should ring)\n\t\tif ( result && result.constructor === Object ) {\n\t\t\tfor ( var prop in result ) {\n\t\t\t\tif ( typeof result[ prop ] === 'function' ) {\n\t\t\t\t\tvar value = result[ prop ];\n\t\t\t\t\tresult[ prop ] = bind$2( value, ractive );\n\t\t\t\t\tresult[ prop ]._r_unbound = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result || {};\n\t},\n\n\treset: function reset ( ractive ) {\n\t\tvar result = this.init( ractive.constructor, ractive, ractive.viewmodel );\n\t\tractive.viewmodel.root.set( result );\n\t\treturn true;\n\t}\n};\n\nfunction combine$1 ( parentValue, childValue ) {\n\tvalidate( childValue );\n\n\tvar parentIsFn = typeof parentValue === 'function';\n\tvar childIsFn = typeof childValue === 'function';\n\n\t// Very important, otherwise child instance can become\n\t// the default data object on Ractive or a component.\n\t// then ractive.set() ends up setting on the prototype!\n\tif ( !childValue && !parentIsFn ) {\n\t\tchildValue = {};\n\t}\n\n\t// Fast path, where we just need to copy properties from\n\t// parent to child\n\tif ( !parentIsFn && !childIsFn ) {\n\t\treturn fromProperties( childValue, parentValue );\n\t}\n\n\treturn function () {\n\t\tvar child = childIsFn ? callDataFunction( childValue, this ) : childValue;\n\t\tvar parent = parentIsFn ? callDataFunction( parentValue, this ) : parentValue;\n\n\t\treturn fromProperties( child, parent );\n\t};\n}\n\nfunction callDataFunction ( fn, context ) {\n\tvar data = fn.call( context );\n\n\tif ( !data ) { return; }\n\n\tif ( typeof data !== 'object' ) {\n\t\tfatal( 'Data function must return an object' );\n\t}\n\n\tif ( data.constructor !== Object ) {\n\t\twarnOnceIfDebug( 'Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged' );\n\t}\n\n\treturn data;\n}\n\nfunction fromProperties ( primary, secondary ) {\n\tif ( primary && secondary ) {\n\t\tfor ( var key in secondary ) {\n\t\t\tif ( !( key in primary ) ) {\n\t\t\t\tprimary[ key ] = secondary[ key ];\n\t\t\t}\n\t\t}\n\n\t\treturn primary;\n\t}\n\n\treturn primary || secondary;\n}\n\nvar TEMPLATE_VERSION = 4;\n\nvar pattern = /\\$\\{([^\\}]+)\\}/g;\n\nfunction fromExpression ( body, length ) {\n\tif ( length === void 0 ) length = 0;\n\n\tvar args = new Array( length );\n\n\twhile ( length-- ) {\n\t\targs[length] = \""_\"" + length;\n\t}\n\n\t// Functions created directly with new Function() look like this:\n\t//     function anonymous (_0 /**/) { return _0*2 }\n\t//\n\t// With this workaround, we get a little more compact:\n\t//     function (_0){return _0*2}\n\treturn new Function( [], (\""return function (\"" + (args.join(',')) + \""){return(\"" + body + \"");};\"") )();\n}\n\nfunction fromComputationString ( str, bindTo ) {\n\tvar hasThis;\n\n\tvar functionBody = 'return (' + str.replace( pattern, function ( match, keypath ) {\n\t\thasThis = true;\n\t\treturn (\""__ractive.get(\\\""\"" + keypath + \""\\\"")\"");\n\t}) + ');';\n\n\tif ( hasThis ) { functionBody = \""var __ractive = this; \"" + functionBody; }\n\tvar fn = new Function( functionBody );\n\treturn hasThis ? fn.bind( bindTo ) : fn;\n}\n\nvar functions = Object.create( null );\n\nfunction getFunction ( str, i ) {\n\tif ( functions[ str ] ) { return functions[ str ]; }\n\treturn functions[ str ] = createFunction( str, i );\n}\n\nfunction addFunctions( template ) {\n\tif ( !template ) { return; }\n\n\tvar exp = template.e;\n\n\tif ( !exp ) { return; }\n\n\tObject.keys( exp ).forEach( function ( str ) {\n\t\tif ( functions[ str ] ) { return; }\n\t\tfunctions[ str ] = exp[ str ];\n\t});\n}\n\nvar leadingWhitespace = /^\\s+/;\n\nvar ParseError = function ( message ) {\n\tthis.name = 'ParseError';\n\tthis.message = message;\n\ttry {\n\t\tthrow new Error(message);\n\t} catch (e) {\n\t\tthis.stack = e.stack;\n\t}\n};\n\nParseError.prototype = Error.prototype;\n\nvar Parser = function ( str, options ) {\n\tvar item;\n\tvar lineStart = 0;\n\n\tthis.str = str;\n\tthis.options = options || {};\n\tthis.pos = 0;\n\n\tthis.lines = this.str.split( '\\n' );\n\tthis.lineEnds = this.lines.map( function (line) {\n\t\tvar lineEnd = lineStart + line.length + 1; // +1 for the newline\n\n\t\tlineStart = lineEnd;\n\t\treturn lineEnd;\n\t}, 0 );\n\n\t// Custom init logic\n\tif ( this.init ) { this.init( str, options ); }\n\n\tvar items = [];\n\n\twhile ( ( this.pos < this.str.length ) && ( item = this.read() ) ) {\n\t\titems.push( item );\n\t}\n\n\tthis.leftover = this.remaining();\n\tthis.result = this.postProcess ? this.postProcess( items, options ) : items;\n};\n\nParser.prototype = {\n\tread: function read ( converters ) {\n\t\tvar this$1 = this;\n\n\t\tvar i, item;\n\n\t\tif ( !converters ) { converters = this.converters; }\n\n\t\tvar pos = this.pos;\n\n\t\tvar len = converters.length;\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tthis$1.pos = pos; // reset for each attempt\n\n\t\t\tif ( item = converters[i]( this$1 ) ) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\tgetContextMessage: function getContextMessage ( pos, message ) {\n\t\tvar ref = this.getLinePos( pos );\n\t\tvar lineNum = ref[0];\n\t\tvar columnNum = ref[1];\n\t\tif ( this.options.contextLines === -1 ) {\n\t\t\treturn [ lineNum, columnNum, (message + \"" at line \"" + lineNum + \"" character \"" + columnNum) ];\n\t\t}\n\n\t\tvar line = this.lines[ lineNum - 1 ];\n\n\t\tvar contextUp = '';\n\t\tvar contextDown = '';\n\t\tif ( this.options.contextLines ) {\n\t\t\tvar start = lineNum - 1 - this.options.contextLines < 0 ? 0 : lineNum - 1 - this.options.contextLines;\n\t\t\tcontextUp = this.lines.slice( start, lineNum - 1 - start ).join( '\\n' ).replace( /\\t/g, '  ' );\n\t\t\tcontextDown = this.lines.slice( lineNum, lineNum + this.options.contextLines ).join( '\\n' ).replace( /\\t/g, '  ' );\n\t\t\tif ( contextUp ) {\n\t\t\t\tcontextUp += '\\n';\n\t\t\t}\n\t\t\tif ( contextDown ) {\n\t\t\t\tcontextDown = '\\n' + contextDown;\n\t\t\t}\n\t\t}\n\n\t\tvar numTabs = 0;\n\t\tvar annotation = contextUp + line.replace( /\\t/g, function ( match, char ) {\n\t\t\tif ( char < columnNum ) {\n\t\t\t\tnumTabs += 1;\n\t\t\t}\n\n\t\t\treturn '  ';\n\t\t}) + '\\n' + new Array( columnNum + numTabs ).join( ' ' ) + '^----' + contextDown;\n\n\t\treturn [ lineNum, columnNum, (message + \"" at line \"" + lineNum + \"" character \"" + columnNum + \"":\\n\"" + annotation) ];\n\t},\n\n\tgetLinePos: function getLinePos ( char ) {\n\t\tvar this$1 = this;\n\n\t\tvar lineNum = 0;\n\t\tvar lineStart = 0;\n\n\t\twhile ( char >= this.lineEnds[ lineNum ] ) {\n\t\t\tlineStart = this$1.lineEnds[ lineNum ];\n\t\t\tlineNum += 1;\n\t\t}\n\n\t\tvar columnNum = char - lineStart;\n\t\treturn [ lineNum + 1, columnNum + 1, char ]; // line/col should be one-based, not zero-based!\n\t},\n\n\terror: function error ( message ) {\n\t\tvar ref = this.getContextMessage( this.pos, message );\n\t\tvar lineNum = ref[0];\n\t\tvar columnNum = ref[1];\n\t\tvar msg = ref[2];\n\n\t\tvar error = new ParseError( msg );\n\n\t\terror.line = lineNum;\n\t\terror.character = columnNum;\n\t\terror.shortMessage = message;\n\n\t\tthrow error;\n\t},\n\n\tmatchString: function matchString ( string ) {\n\t\tif ( this.str.substr( this.pos, string.length ) === string ) {\n\t\t\tthis.pos += string.length;\n\t\t\treturn string;\n\t\t}\n\t},\n\n\tmatchPattern: function matchPattern ( pattern ) {\n\t\tvar match;\n\n\t\tif ( match = pattern.exec( this.remaining() ) ) {\n\t\t\tthis.pos += match[0].length;\n\t\t\treturn match[1] || match[0];\n\t\t}\n\t},\n\n\tallowWhitespace: function allowWhitespace () {\n\t\tthis.matchPattern( leadingWhitespace );\n\t},\n\n\tremaining: function remaining () {\n\t\treturn this.str.substring( this.pos );\n\t},\n\n\tnextChar: function nextChar () {\n\t\treturn this.str.charAt( this.pos );\n\t}\n};\n\nParser.extend = function ( proto ) {\n\tvar Parent = this;\n\tvar Child = function ( str, options ) {\n\t\tParser.call( this, str, options );\n\t};\n\n\tChild.prototype = Object.create( Parent.prototype );\n\n\tfor ( var key in proto ) {\n\t\tif ( proto.hasOwnProperty( key ) ) {\n\t\t\tChild.prototype[ key ] = proto[ key ];\n\t\t}\n\t}\n\n\tChild.extend = Parser.extend;\n\treturn Child;\n};\n\nvar TEXT              = 1;\nvar INTERPOLATOR      = 2;\nvar TRIPLE            = 3;\nvar SECTION           = 4;\nvar INVERTED          = 5;\nvar CLOSING           = 6;\nvar ELEMENT           = 7;\nvar PARTIAL           = 8;\nvar COMMENT           = 9;\nvar DELIMCHANGE       = 10;\nvar ANCHOR            = 11;\nvar ATTRIBUTE         = 13;\nvar CLOSING_TAG       = 14;\nvar COMPONENT         = 15;\nvar YIELDER           = 16;\nvar INLINE_PARTIAL    = 17;\nvar DOCTYPE           = 18;\nvar ALIAS             = 19;\n\nvar NUMBER_LITERAL    = 20;\nvar STRING_LITERAL    = 21;\nvar ARRAY_LITERAL     = 22;\nvar OBJECT_LITERAL    = 23;\nvar BOOLEAN_LITERAL   = 24;\nvar REGEXP_LITERAL    = 25;\n\nvar GLOBAL            = 26;\nvar KEY_VALUE_PAIR    = 27;\n\n\nvar REFERENCE         = 30;\nvar REFINEMENT        = 31;\nvar MEMBER            = 32;\nvar PREFIX_OPERATOR   = 33;\nvar BRACKETED         = 34;\nvar CONDITIONAL       = 35;\nvar INFIX_OPERATOR    = 36;\n\nvar INVOCATION        = 40;\n\nvar SECTION_IF        = 50;\nvar SECTION_UNLESS    = 51;\nvar SECTION_EACH      = 52;\nvar SECTION_WITH      = 53;\nvar SECTION_IF_WITH   = 54;\n\nvar ELSE              = 60;\nvar ELSEIF            = 61;\n\nvar EVENT             = 70;\nvar DECORATOR         = 71;\nvar TRANSITION        = 72;\nvar BINDING_FLAG      = 73;\nvar DELEGATE_FLAG     = 74;\n\nvar delimiterChangePattern = /^[^\\s=]+/;\nvar whitespacePattern = /^\\s+/;\n\nfunction readDelimiterChange ( parser ) {\n\tif ( !parser.matchString( '=' ) ) {\n\t\treturn null;\n\t}\n\n\tvar start = parser.pos;\n\n\t// allow whitespace before new opening delimiter\n\tparser.allowWhitespace();\n\n\tvar opening = parser.matchPattern( delimiterChangePattern );\n\tif ( !opening ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace (in fact, it's necessary...)\n\tif ( !parser.matchPattern( whitespacePattern ) ) {\n\t\treturn null;\n\t}\n\n\tvar closing = parser.matchPattern( delimiterChangePattern );\n\tif ( !closing ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace before closing '='\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '=' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn [ opening, closing ];\n}\n\nvar regexpPattern = /^(\\/(?:[^\\n\\r\\u2028\\u2029/\\\\[]|\\\\.|\\[(?:[^\\n\\r\\u2028\\u2029\\]\\\\]|\\\\.)*])+\\/(?:([gimuy])(?![a-z]*\\2))*(?![a-zA-Z_$0-9]))/;\n\nfunction readNumberLiteral ( parser ) {\n\tvar result;\n\n\tif ( result = parser.matchPattern( regexpPattern ) ) {\n\t\treturn {\n\t\t\tt: REGEXP_LITERAL,\n\t\t\tv: result\n\t\t};\n\t}\n\n\treturn null;\n}\n\nvar pattern$1 = /[-/\\\\^$*+?.()|[\\]{}]/g;\n\nfunction escapeRegExp ( str ) {\n\treturn str.replace( pattern$1, '\\\\$&' );\n}\n\nvar regExpCache = {};\n\nvar getLowestIndex = function ( haystack, needles ) {\n\treturn haystack.search( regExpCache[needles.join()] || ( regExpCache[needles.join()] = new RegExp( needles.map( escapeRegExp ).join( '|' ) ) ) );\n};\n\n// https://github.com/kangax/html-minifier/issues/63#issuecomment-37763316\nvar booleanAttributes = /^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;\nvar voidElementNames = /^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i;\n\nvar htmlEntities = { quot: 34, amp: 38, apos: 39, lt: 60, gt: 62, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190, iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221, THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252, yacute: 253, thorn: 254, yuml: 255, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, fnof: 402, circ: 710, tilde: 732, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949, zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, bull: 8226, hellip: 8230, permil: 8240, prime: 8242, Prime: 8243, lsaquo: 8249, rsaquo: 8250, oline: 8254, frasl: 8260, euro: 8364, image: 8465, weierp: 8472, real: 8476, trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744, cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830\t};\nvar controlCharacters = [ 8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376 ];\nvar entityPattern = new RegExp( '&(#?(?:x[\\\\w\\\\d]+|\\\\d+|' + Object.keys( htmlEntities ).join( '|' ) + '));?', 'g' );\nvar codePointSupport = typeof String.fromCodePoint === 'function';\nvar codeToChar = codePointSupport ? String.fromCodePoint : String.fromCharCode;\n\nfunction decodeCharacterReferences ( html ) {\n\treturn html.replace( entityPattern, function ( match, entity ) {\n\t\tvar code;\n\n\t\t// Handle named entities\n\t\tif ( entity[0] !== '#' ) {\n\t\t\tcode = htmlEntities[ entity ];\n\t\t} else if ( entity[1] === 'x' ) {\n\t\t\tcode = parseInt( entity.substring( 2 ), 16 );\n\t\t} else {\n\t\t\tcode = parseInt( entity.substring( 1 ), 10 );\n\t\t}\n\n\t\tif ( !code ) {\n\t\t\treturn match;\n\t\t}\n\n\t\treturn codeToChar( validateCode( code ) );\n\t});\n}\n\nvar lessThan = /</g;\nvar greaterThan = />/g;\nvar amp = /&/g;\nvar invalid = 65533;\n\nfunction escapeHtml ( str ) {\n\treturn str\n\t\t.replace( amp, '&amp;' )\n\t\t.replace( lessThan, '&lt;' )\n\t\t.replace( greaterThan, '&gt;' );\n}\n\n// some code points are verboten. If we were inserting HTML, the browser would replace the illegal\n// code points with alternatives in some cases - since we're bypassing that mechanism, we need\n// to replace them ourselves\n//\n// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters\nfunction validateCode ( code ) {\n\tif ( !code ) {\n\t\treturn invalid;\n\t}\n\n\t// line feed becomes generic whitespace\n\tif ( code === 10 ) {\n\t\treturn 32;\n\t}\n\n\t// ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)\n\tif ( code < 128 ) {\n\t\treturn code;\n\t}\n\n\t// code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need\n\t// to correct the mistake or we'll end up with missing € signs and so on\n\tif ( code <= 159 ) {\n\t\treturn controlCharacters[ code - 128 ];\n\t}\n\n\t// basic multilingual plane\n\tif ( code < 55296 ) {\n\t\treturn code;\n\t}\n\n\t// UTF-16 surrogate halves\n\tif ( code <= 57343 ) {\n\t\treturn invalid;\n\t}\n\n\t// rest of the basic multilingual plane\n\tif ( code <= 65535 ) {\n\t\treturn code;\n\t} else if ( !codePointSupport ) {\n\t\treturn invalid;\n\t}\n\n\t// supplementary multilingual plane 0x10000 - 0x1ffff\n\tif ( code >= 65536 && code <= 131071 ) {\n\t\treturn code;\n\t}\n\n\t// supplementary ideographic plane 0x20000 - 0x2ffff\n\tif ( code >= 131072 && code <= 196607 ) {\n\t\treturn code;\n\t}\n\n\treturn invalid;\n}\n\nvar expectedExpression = 'Expected a JavaScript expression';\nvar expectedParen = 'Expected closing paren';\n\n// bulletproof number regex from https://gist.github.com/Rich-Harris/7544330\nvar numberPattern = /^(?:[+-]?)0*(?:(?:(?:[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\n\nfunction readNumberLiteral$1 ( parser ) {\n\tvar result;\n\n\tif ( result = parser.matchPattern( numberPattern ) ) {\n\t\treturn {\n\t\t\tt: NUMBER_LITERAL,\n\t\t\tv: result\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction readBooleanLiteral ( parser ) {\n\tvar remaining = parser.remaining();\n\n\tif ( remaining.substr( 0, 4 ) === 'true' ) {\n\t\tparser.pos += 4;\n\t\treturn {\n\t\t\tt: BOOLEAN_LITERAL,\n\t\t\tv: 'true'\n\t\t};\n\t}\n\n\tif ( remaining.substr( 0, 5 ) === 'false' ) {\n\t\tparser.pos += 5;\n\t\treturn {\n\t\t\tt: BOOLEAN_LITERAL,\n\t\t\tv: 'false'\n\t\t};\n\t}\n\n\treturn null;\n}\n\n// Match one or more characters until: \"", ', \\, or EOL/EOF.\n// EOL/EOF is written as (?!.) (meaning there's no non-newline char next).\nvar stringMiddlePattern = /^(?=.)[^\""'\\\\]+?(?:(?!.)|(?=[\""'\\\\]))/;\n\n// Match one escape sequence, including the backslash.\nvar escapeSequencePattern = /^\\\\(?:[`'\""\\\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/;\n\n// Match one ES5 line continuation (backslash + line terminator).\nvar lineContinuationPattern = /^\\\\(?:\\r\\n|[\\u000A\\u000D\\u2028\\u2029])/;\n\n// Helper for defining getDoubleQuotedString and getSingleQuotedString.\nvar makeQuotedStringMatcher = function ( okQuote ) {\n\treturn function ( parser ) {\n\t\tvar literal = '\""';\n\t\tvar done = false;\n\t\tvar next;\n\n\t\twhile ( !done ) {\n\t\t\tnext = ( parser.matchPattern( stringMiddlePattern ) || parser.matchPattern( escapeSequencePattern ) ||\n\t\t\t\tparser.matchString( okQuote ) );\n\t\t\tif ( next ) {\n\t\t\t\tif ( next === \""\\\""\"" ) {\n\t\t\t\t\tliteral += \""\\\\\\\""\"";\n\t\t\t\t} else if ( next === \""\\\\'\"" ) {\n\t\t\t\t\tliteral += \""'\"";\n\t\t\t\t} else {\n\t\t\t\t\tliteral += next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnext = parser.matchPattern( lineContinuationPattern );\n\t\t\t\tif ( next ) {\n\t\t\t\t\t// convert \\(newline-like) into a \\u escape, which is allowed in JSON\n\t\t\t\t\tliteral += '\\\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );\n\t\t\t\t} else {\n\t\t\t\t\tdone = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tliteral += '\""';\n\n\t\t// use JSON.parse to interpret escapes\n\t\treturn JSON.parse( literal );\n\t};\n};\n\nvar singleMatcher = makeQuotedStringMatcher( \""\\\""\"" );\nvar doubleMatcher = makeQuotedStringMatcher( \""'\"" );\n\nvar readStringLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\tvar quote = parser.matchString( \""'\"" ) || parser.matchString( \""\\\""\"" );\n\n\tif ( quote ) {\n\t\tvar string = ( quote === \""'\"" ? singleMatcher : doubleMatcher )( parser );\n\n\t\tif ( !parser.matchString( quote ) ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: STRING_LITERAL,\n\t\t\tv: string\n\t\t};\n\t}\n\n\treturn null;\n};\n\n// Match one or more characters until: \"", ', or \\\nvar stringMiddlePattern$1 = /^[^`\""\\\\\\$]+?(?:(?=[`\""\\\\\\$]))/;\n\nvar escapes = /[\\r\\n\\t\\b\\f]/g;\nfunction getString$1 ( literal ) {\n\treturn JSON.parse( (\""\\\""\"" + (literal.replace( escapes, escapeChar )) + \""\\\""\"") );\n}\n\nfunction escapeChar ( c ) {\n\tswitch ( c ) {\n\t\tcase '\\n': return '\\\\n';\n\t\tcase '\\r': return '\\\\r';\n\t\tcase '\\t': return '\\\\t';\n\t\tcase '\\b': return '\\\\b';\n\t\tcase '\\f': return '\\\\f';\n\t}\n}\n\nfunction readTemplateStringLiteral ( parser ) {\n\tif ( !parser.matchString( '`' ) ) { return null; }\n\n\tvar literal = '';\n\tvar done = false;\n\tvar next;\n\tvar parts = [];\n\n\twhile ( !done ) {\n\t\tnext = parser.matchPattern( stringMiddlePattern$1 ) || parser.matchPattern( escapeSequencePattern ) ||\n\t\t\tparser.matchString( '$' ) || parser.matchString( '\""' );\n\t\tif ( next ) {\n\t\t\tif ( next === \""\\\""\"" ) {\n\t\t\t\tliteral += \""\\\\\\\""\"";\n\t\t\t} else if ( next === '\\\\`' ) {\n\t\t\t\tliteral += '`';\n\t\t\t} else if ( next === '$' ) {\n\t\t\t\tif ( parser.matchString( '{' ) ) {\n\t\t\t\t\tparts.push({ t: STRING_LITERAL, v: getString$1( literal ) });\n\t\t\t\t\tliteral = '';\n\n\t\t\t\t\tparser.allowWhitespace();\n\t\t\t\t\tvar expr = readExpression( parser );\n\n\t\t\t\t\tif ( !expr ) { parser.error( 'Expected valid expression' ); }\n\n\t\t\t\t\tparts.push({ t: BRACKETED, x: expr });\n\n\t\t\t\t\tparser.allowWhitespace();\n\t\t\t\t\tif ( !parser.matchString( '}' ) ) { parser.error( \""Expected closing '}' after interpolated expression\"" ); }\n\t\t\t\t} else {\n\t\t\t\t\tliteral += '$';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tliteral += next;\n\t\t\t}\n\t\t} else {\n\t\t\tnext = parser.matchPattern( lineContinuationPattern );\n\t\t\tif ( next ) {\n\t\t\t\t// convert \\(newline-like) into a \\u escape, which is allowed in JSON\n\t\t\t\tliteral += '\\\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );\n\t\t\t} else {\n\t\t\t\tdone = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( literal.length ) { parts.push({ t: STRING_LITERAL, v: getString$1( literal ) }); }\n\n\tif ( !parser.matchString( '`' ) ) { parser.error( \""Expected closing '`'\"" ); }\n\n\tif ( parts.length === 1 ) {\n\t\treturn parts[0];\n\t} else {\n\t\tvar result = parts.pop();\n\t\tvar part;\n\n\t\twhile ( part = parts.pop() ) {\n\t\t\tresult = {\n\t\t\t\tt: INFIX_OPERATOR,\n\t\t\t\ts: '+',\n\t\t\t\to: [ part, result ]\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tt: BRACKETED,\n\t\t\tx: result\n\t\t};\n\t}\n}\n\nvar name = /^[a-zA-Z_$][a-zA-Z_$0-9]*/;\nvar spreadPattern = /^\\s*\\.{3}/;\nvar legalReference = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:\\.(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nvar relaxedName = /^[a-zA-Z_$][-\\/a-zA-Z_$0-9]*(?:\\.(?:[a-zA-Z_$][-\\/a-zA-Z_$0-9]*))*/;\n\nvar identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n// http://mathiasbynens.be/notes/javascript-properties\n// can be any name, string literal, or number literal\nfunction readKey ( parser ) {\n\tvar token;\n\n\tif ( token = readStringLiteral( parser ) ) {\n\t\treturn identifier.test( token.v ) ? token.v : '\""' + token.v.replace( /\""/g, '\\\\\""' ) + '\""';\n\t}\n\n\tif ( token = readNumberLiteral$1( parser ) ) {\n\t\treturn token.v;\n\t}\n\n\tif ( token = parser.matchPattern( name ) ) {\n\t\treturn token;\n\t}\n\n\treturn null;\n}\n\nfunction readKeyValuePair ( parser ) {\n\tvar spread;\n\tvar start = parser.pos;\n\n\t// allow whitespace between '{' and key\n\tparser.allowWhitespace();\n\n\tvar refKey = parser.nextChar() !== '\\'' && parser.nextChar() !== '\""';\n\tif ( refKey ) { spread = parser.matchPattern( spreadPattern ); }\n\n\tvar key = spread ? readExpression( parser ) : readKey( parser );\n\tif ( key === null ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace between key and ':'\n\tparser.allowWhitespace();\n\n\t// es2015 shorthand property\n\tif ( refKey && ( parser.nextChar() === ',' || parser.nextChar() === '}' ) ) {\n\t\tif ( !spread && !name.test( key ) ) {\n\t\t\tparser.error( (\""Expected a valid reference, but found '\"" + key + \""' instead.\"") );\n\t\t}\n\n\t\tvar pair = {\n\t\t\tt: KEY_VALUE_PAIR,\n\t\t\tk: key,\n\t\t\tv: {\n\t\t\t\tt: REFERENCE,\n\t\t\t\tn: key\n\t\t\t}\n\t\t};\n\n\t\tif ( spread ) {\n\t\t\tpair.p = true;\n\t\t}\n\n\t\treturn pair;\n\t}\n\n\n\t// next character must be ':'\n\tif ( !parser.matchString( ':' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace between ':' and value\n\tparser.allowWhitespace();\n\n\t// next expression must be a, well... expression\n\tvar value = readExpression( parser );\n\tif ( value === null ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: KEY_VALUE_PAIR,\n\t\tk: key,\n\t\tv: value\n\t};\n}\n\nfunction readKeyValuePairs ( parser ) {\n\tvar start = parser.pos;\n\n\tvar pair = readKeyValuePair( parser );\n\tif ( pair === null ) {\n\t\treturn null;\n\t}\n\n\tvar pairs = [ pair ];\n\n\tif ( parser.matchString( ',' ) ) {\n\t\tvar keyValuePairs = readKeyValuePairs( parser );\n\n\t\tif ( !keyValuePairs ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn pairs.concat( keyValuePairs );\n\t}\n\n\treturn pairs;\n}\n\nvar readObjectLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\n\t// allow whitespace\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '{' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar keyValuePairs = readKeyValuePairs( parser );\n\n\t// allow whitespace between final value and '}'\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '}' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: OBJECT_LITERAL,\n\t\tm: keyValuePairs\n\t};\n};\n\nvar readArrayLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\n\t// allow whitespace before '['\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '[' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar expressionList = readExpressionList( parser, true );\n\n\tif ( !parser.matchString( ']' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: ARRAY_LITERAL,\n\t\tm: expressionList\n\t};\n};\n\nfunction readLiteral ( parser ) {\n\treturn readNumberLiteral$1( parser )         ||\n\t       readBooleanLiteral( parser )        ||\n\t       readStringLiteral( parser )         ||\n\t       readTemplateStringLiteral( parser ) ||\n\t       readObjectLiteral( parser )         ||\n\t       readArrayLiteral( parser )          ||\n\t       readNumberLiteral( parser );\n}\n\n// if a reference is a browser global, we don't deference it later, so it needs special treatment\nvar globals = /^(?:Array|console|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null|Object|Number|String|Boolean)\\b/;\n\n// keywords are not valid references, with the exception of `this`\nvar keywords = /^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/;\n\nvar prefixPattern = /^(?:\\@\\.|\\@|~\\/|(?:\\^\\^\\/(?:\\^\\^\\/)*(?:\\.\\.\\/)*)|(?:\\.\\.\\/)+|\\.\\/(?:\\.\\.\\/)*|\\.)/;\nvar specials = /^(key|index|keypath|rootpath|this|global|shared)/;\n\nfunction readReference ( parser ) {\n\tvar prefix, name$$1, global, reference, lastDotIndex;\n\n\tvar startPos = parser.pos;\n\n\tprefix = parser.matchPattern( prefixPattern ) || '';\n\tname$$1 = ( !prefix && parser.relaxedNames && parser.matchPattern( relaxedName ) ) ||\n\t\t\tparser.matchPattern( legalReference );\n\tvar actual = prefix.length + ( ( name$$1 && name$$1.length ) || 0 );\n\n\tif ( prefix === '@.' ) {\n\t\tprefix = '@';\n\t\tif ( name$$1 ) { name$$1 = 'this.' + name$$1; }\n\t\telse { name$$1 = 'this'; }\n\t}\n\n\tif ( !name$$1 && prefix ) {\n\t\tname$$1 = prefix;\n\t\tprefix = '';\n\t}\n\n\tif ( !name$$1 ) {\n\t\treturn null;\n\t}\n\n\tif ( prefix === '@' && !specials.test( name$$1 ) ) {\n\t\tparser.error( (\""Unrecognized special reference @\"" + name$$1) );\n\t}\n\n\t// bug out if it's a keyword (exception for ancestor/restricted refs - see https://github.com/ractivejs/ractive/issues/1497)\n\tif ( !prefix && !parser.relaxedNames && keywords.test( name$$1 ) ) {\n\t\tparser.pos = startPos;\n\t\treturn null;\n\t}\n\n\t// if this is a browser global, stop here\n\tif ( !prefix && globals.test( name$$1 ) ) {\n\t\tglobal = globals.exec( name$$1 )[0];\n\t\tparser.pos = startPos + global.length;\n\n\t\treturn {\n\t\t\tt: GLOBAL,\n\t\t\tv: global\n\t\t};\n\t}\n\n\treference = ( prefix || '' ) + normalise( name$$1 );\n\n\tif ( parser.matchString( '(' ) ) {\n\t\t// if this is a method invocation (as opposed to a function) we need\n\t\t// to strip the method name from the reference combo, else the context\n\t\t// will be wrong\n\t\t// but only if the reference was actually a member and not a refinement\n\t\tlastDotIndex = reference.lastIndexOf( '.' );\n\t\tif ( lastDotIndex !== -1 && name$$1[ name$$1.length - 1 ] !== ']' ) {\n\t\t\tvar refLength = reference.length;\n\t\t\treference = reference.substr( 0, lastDotIndex );\n\t\t\tparser.pos = startPos + ( actual - ( refLength - lastDotIndex ) );\n\t\t} else {\n\t\t\tparser.pos -= 1;\n\t\t}\n\t}\n\n\treturn {\n\t\tt: REFERENCE,\n\t\tn: reference.replace( /^this\\./, './' ).replace( /^this$/, '.' )\n\t};\n}\n\nfunction readBracketedExpression ( parser ) {\n\tif ( !parser.matchString( '(' ) ) { return null; }\n\n\tparser.allowWhitespace();\n\n\tvar expr = readExpression( parser );\n\n\tif ( !expr ) { parser.error( expectedExpression ); }\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( ')' ) ) { parser.error( expectedParen ); }\n\n\treturn {\n\t\tt: BRACKETED,\n\t\tx: expr\n\t};\n}\n\nvar readPrimary = function ( parser ) {\n\treturn readLiteral( parser )\n\t\t|| readReference( parser )\n\t\t|| readBracketedExpression( parser );\n};\n\nfunction readRefinement ( parser ) {\n\t// some things call for strict refinement (partial names), meaning no space between reference and refinement\n\tif ( !parser.strictRefinement ) {\n\t\tparser.allowWhitespace();\n\t}\n\n\t// \"".\"" name\n\tif ( parser.matchString( '.' ) ) {\n\t\tparser.allowWhitespace();\n\n\t\tvar name$$1 = parser.matchPattern( name );\n\t\tif ( name$$1 ) {\n\t\t\treturn {\n\t\t\t\tt: REFINEMENT,\n\t\t\t\tn: name$$1\n\t\t\t};\n\t\t}\n\n\t\tparser.error( 'Expected a property name' );\n\t}\n\n\t// \""[\"" expression \""]\""\n\tif ( parser.matchString( '[' ) ) {\n\t\tparser.allowWhitespace();\n\n\t\tvar expr = readExpression( parser );\n\t\tif ( !expr ) { parser.error( expectedExpression ); }\n\n\t\tparser.allowWhitespace();\n\n\t\tif ( !parser.matchString( ']' ) ) { parser.error( \""Expected ']'\"" ); }\n\n\t\treturn {\n\t\t\tt: REFINEMENT,\n\t\t\tx: expr\n\t\t};\n\t}\n\n\treturn null;\n}\n\nvar readMemberOrInvocation = function ( parser ) {\n\tvar expression = readPrimary( parser );\n\n\tif ( !expression ) { return null; }\n\n\twhile ( expression ) {\n\t\tvar refinement = readRefinement( parser );\n\t\tif ( refinement ) {\n\t\t\texpression = {\n\t\t\t\tt: MEMBER,\n\t\t\t\tx: expression,\n\t\t\t\tr: refinement\n\t\t\t};\n\t\t}\n\n\t\telse if ( parser.matchString( '(' ) ) {\n\t\t\tparser.allowWhitespace();\n\t\t\tvar expressionList = readExpressionList( parser, true );\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( !parser.matchString( ')' ) ) {\n\t\t\t\tparser.error( expectedParen );\n\t\t\t}\n\n\t\t\texpression = {\n\t\t\t\tt: INVOCATION,\n\t\t\t\tx: expression\n\t\t\t};\n\n\t\t\tif ( expressionList ) { expression.o = expressionList; }\n\t\t}\n\n\t\telse {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn expression;\n};\n\nvar readTypeOf;\n\nvar makePrefixSequenceMatcher = function ( symbol, fallthrough ) {\n\treturn function ( parser ) {\n\t\tvar expression;\n\n\t\tif ( expression = fallthrough( parser ) ) {\n\t\t\treturn expression;\n\t\t}\n\n\t\tif ( !parser.matchString( symbol ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tparser.allowWhitespace();\n\n\t\texpression = readExpression( parser );\n\t\tif ( !expression ) {\n\t\t\tparser.error( expectedExpression );\n\t\t}\n\n\t\treturn {\n\t\t\ts: symbol,\n\t\t\to: expression,\n\t\t\tt: PREFIX_OPERATOR\n\t\t};\n\t};\n};\n\n// create all prefix sequence matchers, return readTypeOf\n(function() {\n\tvar i, len, matcher, fallthrough;\n\n\tvar prefixOperators = '! ~ + - typeof'.split( ' ' );\n\n\tfallthrough = readMemberOrInvocation;\n\tfor ( i = 0, len = prefixOperators.length; i < len; i += 1 ) {\n\t\tmatcher = makePrefixSequenceMatcher( prefixOperators[i], fallthrough );\n\t\tfallthrough = matcher;\n\t}\n\n\t// typeof operator is higher precedence than multiplication, so provides the\n\t// fallthrough for the multiplication sequence matcher we're about to create\n\t// (we're skipping void and delete)\n\treadTypeOf = fallthrough;\n}());\n\nvar readTypeof = readTypeOf;\n\nvar readLogicalOr;\n\nvar makeInfixSequenceMatcher = function ( symbol, fallthrough ) {\n\treturn function ( parser ) {\n\t\t// > and / have to be quoted\n\t\tif ( parser.inUnquotedAttribute && ( symbol === '>' || symbol === '/' ) ) { return fallthrough( parser ); }\n\n\t\tvar start, left, right;\n\n\t\tleft = fallthrough( parser );\n\t\tif ( !left ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Loop to handle left-recursion in a case like `a * b * c` and produce\n\t\t// left association, i.e. `(a * b) * c`.  The matcher can't call itself\n\t\t// to parse `left` because that would be infinite regress.\n\t\twhile ( true ) {\n\t\t\tstart = parser.pos;\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( !parser.matchString( symbol ) ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\t// special case - in operator must not be followed by [a-zA-Z_$0-9]\n\t\t\tif ( symbol === 'in' && /[a-zA-Z_$0-9]/.test( parser.remaining().charAt( 0 ) ) ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\t// right operand must also consist of only higher-precedence operators\n\t\t\tright = fallthrough( parser );\n\t\t\tif ( !right ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\tleft = {\n\t\t\t\tt: INFIX_OPERATOR,\n\t\t\t\ts: symbol,\n\t\t\t\to: [ left, right ]\n\t\t\t};\n\n\t\t\t// Loop back around.  If we don't see another occurrence of the symbol,\n\t\t\t// we'll return left.\n\t\t}\n\t};\n};\n\n// create all infix sequence matchers, and return readLogicalOr\n(function() {\n\tvar i, len, matcher, fallthrough;\n\n\t// All the infix operators on order of precedence (source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)\n\t// Each sequence matcher will initially fall through to its higher precedence\n\t// neighbour, and only attempt to match if one of the higher precedence operators\n\t// (or, ultimately, a literal, reference, or bracketed expression) already matched\n\tvar infixOperators = '* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||'.split( ' ' );\n\n\t// A typeof operator is higher precedence than multiplication\n\tfallthrough = readTypeof;\n\tfor ( i = 0, len = infixOperators.length; i < len; i += 1 ) {\n\t\tmatcher = makeInfixSequenceMatcher( infixOperators[i], fallthrough );\n\t\tfallthrough = matcher;\n\t}\n\n\t// Logical OR is the fallthrough for the conditional matcher\n\treadLogicalOr = fallthrough;\n}());\n\nvar readLogicalOr$1 = readLogicalOr;\n\n// The conditional operator is the lowest precedence operator, so we start here\nfunction getConditional ( parser ) {\n\tvar expression = readLogicalOr$1( parser );\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '?' ) ) {\n\t\tparser.pos = start;\n\t\treturn expression;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar ifTrue = readExpression( parser );\n\tif ( !ifTrue ) {\n\t\tparser.error( expectedExpression );\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( ':' ) ) {\n\t\tparser.error( 'Expected \"":\""' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar ifFalse = readExpression( parser );\n\tif ( !ifFalse ) {\n\t\tparser.error( expectedExpression );\n\t}\n\n\treturn {\n\t\tt: CONDITIONAL,\n\t\to: [ expression, ifTrue, ifFalse ]\n\t};\n}\n\nfunction readExpression ( parser ) {\n\t// The conditional operator is the lowest precedence operator (except yield,\n\t// assignment operators, and commas, none of which are supported), so we\n\t// start there. If it doesn't match, it 'falls through' to progressively\n\t// higher precedence operators, until it eventually matches (or fails to\n\t// match) a 'primary' - a literal or a reference. This way, the abstract syntax\n\t// tree has everything in its proper place, i.e. 2 + 3 * 4 === 14, not 20.\n\treturn getConditional( parser );\n}\n\nfunction readExpressionList ( parser, spread ) {\n\tvar isSpread;\n\tvar expressions = [];\n\n\tvar pos = parser.pos;\n\n\tdo {\n\t\tparser.allowWhitespace();\n\n\t\tif ( spread ) {\n\t\t\tisSpread = parser.matchPattern( spreadPattern );\n\t\t}\n\n\t\tvar expr = readExpression( parser );\n\n\t\tif ( expr === null && expressions.length ) {\n\t\t\tparser.error( expectedExpression );\n\t\t} else if ( expr === null ) {\n\t\t\tparser.pos = pos;\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( isSpread ) {\n\t\t\texpr.p = true;\n\t\t}\n\n\t\texpressions.push( expr );\n\n\t\tparser.allowWhitespace();\n\t} while ( parser.matchString( ',' ) );\n\n\treturn expressions;\n}\n\nfunction flattenExpression ( expression ) {\n\tvar refs;\n\tvar count = 0;\n\n\textractRefs( expression, refs = [] );\n\tvar stringified = stringify( expression );\n\n\treturn {\n\t\tr: refs,\n\t\ts: getVars(stringified)\n\t};\n\n\tfunction getVars(expr) {\n\t\tvar vars = [];\n\t\tfor ( var i = count - 1; i >= 0; i-- ) {\n\t\t\tvars.push( (\""x$\"" + i) );\n\t\t}\n\t\treturn vars.length ? (\""(function(){var \"" + (vars.join(',')) + \"";return(\"" + expr + \"");})()\"") : expr;\n\t}\n\n\tfunction stringify ( node ) {\n\t\tif ( typeof node === 'string' ) {\n\t\t\treturn node;\n\t\t}\n\n\t\tswitch ( node.t ) {\n\t\t\tcase BOOLEAN_LITERAL:\n\t\t\tcase GLOBAL:\n\t\t\tcase NUMBER_LITERAL:\n\t\t\tcase REGEXP_LITERAL:\n\t\t\t\treturn node.v;\n\n\t\t\tcase STRING_LITERAL:\n\t\t\t\treturn JSON.stringify( String( node.v ) );\n\n\t\t\tcase ARRAY_LITERAL:\n\t\t\t\tif ( node.m && hasSpread( node.m )) {\n\t\t\t\t\treturn (\""[].concat(\"" + (makeSpread( node.m, '[', ']', stringify )) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn '[' + ( node.m ? node.m.map( stringify ).join( ',' ) : '' ) + ']';\n\t\t\t\t}\n\n\t\t\tcase OBJECT_LITERAL:\n\t\t\t\tif ( node.m && hasSpread( node.m ) ) {\n\t\t\t\t\treturn (\""Object.assign({},\"" + (makeSpread( node.m, '{', '}', stringifyPair)) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn '{' + ( node.m ? node.m.map( function (n) { return ((n.k) + \"":\"" + (stringify( n.v ))); } ).join( ',' ) : '' ) + '}';\n\t\t\t\t}\n\n\t\t\tcase PREFIX_OPERATOR:\n\t\t\t\treturn ( node.s === 'typeof' ? 'typeof ' : node.s ) + stringify( node.o );\n\n\t\t\tcase INFIX_OPERATOR:\n\t\t\t\treturn stringify( node.o[0] ) + ( node.s.substr( 0, 2 ) === 'in' ? ' ' + node.s + ' ' : node.s ) + stringify( node.o[1] );\n\n\t\t\tcase INVOCATION:\n\t\t\t\tif ( node.o && hasSpread( node.o ) ) {\n\t\t\t\t\tvar id = count++;\n\t\t\t\t\treturn (\""(x$\"" + id + \""=\"" + (stringify(node.x)) + \"").apply(x$\"" + id + \"",\"" + (stringify({ t: ARRAY_LITERAL, m: node.o })) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn stringify( node.x ) + '(' + ( node.o ? node.o.map( stringify ).join( ',' ) : '' ) + ')';\n\t\t\t\t}\n\n\t\t\tcase BRACKETED:\n\t\t\t\treturn '(' + stringify( node.x ) + ')';\n\n\t\t\tcase MEMBER:\n\t\t\t\treturn stringify( node.x ) + stringify( node.r );\n\n\t\t\tcase REFINEMENT:\n\t\t\t\treturn ( node.n ? '.' + node.n : '[' + stringify( node.x ) + ']' );\n\n\t\t\tcase CONDITIONAL:\n\t\t\t\treturn stringify( node.o[0] ) + '?' + stringify( node.o[1] ) + ':' + stringify( node.o[2] );\n\n\t\t\tcase REFERENCE:\n\t\t\t\treturn '_' + refs.indexOf( node.n );\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'Expected legal JavaScript' );\n\t\t}\n\t}\n\n\tfunction stringifyPair ( node ) { return node.p ? stringify( node.k ) : ((node.k) + \"":\"" + (stringify( node.v ))); }\n\n\tfunction makeSpread ( list, open, close, fn ) {\n\t\tvar out = list.reduce( function ( a, c ) {\n\t\t\tif ( c.p ) {\n\t\t\t\ta.str += \""\"" + (a.open ? close + ',' : a.str.length ? ',' : '') + (fn( c ));\n\t\t\t} else {\n\t\t\t\ta.str += \""\"" + (!a.str.length ? open : !a.open ? ',' + open : ',') + (fn( c ));\n\t\t\t}\n\t\t\ta.open = !c.p;\n\t\t\treturn a;\n\t\t}, { open: false, str: '' } );\n\t\tif ( out.open ) { out.str += close; }\n\t\treturn out.str;\n\t}\n}\n\nfunction hasSpread ( list ) {\n\tfor ( var i = 0; i < list.length; i++ ) {\n\t\tif ( list[i].p ) { return true; }\n\t}\n\n\treturn false;\n}\n\n// TODO maybe refactor this?\nfunction extractRefs ( node, refs ) {\n\tif ( node.t === REFERENCE && typeof node.n === 'string' ) {\n\t\tif ( !~refs.indexOf( node.n ) ) {\n\t\t\trefs.unshift( node.n );\n\t\t}\n\t}\n\n\tvar list = node.o || node.m;\n\tif ( list ) {\n\t\tif ( isObject( list ) ) {\n\t\t\textractRefs( list, refs );\n\t\t} else {\n\t\t\tvar i = list.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\textractRefs( list[i], refs );\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( node.k && node.t === KEY_VALUE_PAIR && typeof node.k !== 'string' ) {\n\t\textractRefs( node.k, refs );\n\t}\n\n\tif ( node.x ) {\n\t\textractRefs( node.x, refs );\n\t}\n\n\tif ( node.r ) {\n\t\textractRefs( node.r, refs );\n\t}\n\n\tif ( node.v ) {\n\t\textractRefs( node.v, refs );\n\t}\n}\n\nvar attributeNamePattern = /^[^\\s\""'>\\/=]+/;\nvar onPattern = /^on/;\nvar eventPattern = /^on-([a-zA-Z\\*\\.$_]((?:[a-zA-Z\\*\\.$_0-9\\-]|\\\\-)+))$/;\nvar reservedEventNames = /^(?:change|reset|teardown|update|construct|config|init|render|complete|unrender|detach|insert|destruct|attachchild|detachchild)$/;\nvar decoratorPattern = /^as-([a-z-A-Z][-a-zA-Z_0-9]*)$/;\nvar transitionPattern = /^([a-zA-Z](?:(?!-in-out)[-a-zA-Z_0-9])*)-(in|out|in-out)$/;\nvar directives = {\n\tlazy: { t: BINDING_FLAG, v: 'l' },\n\ttwoway: { t: BINDING_FLAG, v: 't' },\n\t'no-delegation': { t: DELEGATE_FLAG }\n};\nvar unquotedAttributeValueTextPattern = /^[^\\s\""'=<>\\/`]+/;\nvar proxyEvent = /^[^\\s\""'=<>@\\[\\]()]*/;\nvar whitespace = /^\\s+/;\n\nvar slashes = /\\\\/g;\nfunction splitEvent ( str ) {\n\tvar result = [];\n\tvar s = 0;\n\n\tfor ( var i = 0; i < str.length; i++ ) {\n\t\tif ( str[i] === '-' && str[ i - 1 ] !== '\\\\' ) {\n\t\t\tresult.push( str.substring( s, i ).replace( slashes, '' ) );\n\t\t\ts = i + 1;\n\t\t}\n\t}\n\n\tresult.push( str.substring( s ).replace( slashes, '' ) );\n\n\treturn result;\n}\n\nfunction readAttribute ( parser ) {\n\tvar name, i, nearest, idx;\n\n\tparser.allowWhitespace();\n\n\tname = parser.matchPattern( attributeNamePattern );\n\tif ( !name ) {\n\t\treturn null;\n\t}\n\n\t// check for accidental delimiter consumption e.g. <tag bool{{>attrs}} />\n\tnearest = name.length;\n\tfor ( i = 0; i < parser.tags.length; i++ ) {\n\t\tif ( ~( idx = name.indexOf( parser.tags[ i ].open ) ) ) {\n\t\t\tif ( idx < nearest ) { nearest = idx; }\n\t\t}\n\t}\n\tif ( nearest < name.length ) {\n\t\tparser.pos -= name.length - nearest;\n\t\tname = name.substr( 0, nearest );\n\t\tif ( !name ) { return null; }\n\t}\n\n\treturn { n: name };\n}\n\nfunction readAttributeValue ( parser ) {\n\tvar start = parser.pos;\n\n\t// next character must be `=`, `/`, `>` or whitespace\n\tif ( !/[=\\/>\\s]/.test( parser.nextChar() ) ) {\n\t\tparser.error( 'Expected `=`, `/`, `>` or whitespace' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '=' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar valueStart = parser.pos;\n\tvar startDepth = parser.sectionDepth;\n\n\tvar value = readQuotedAttributeValue( parser, \""'\"" ) ||\n\t\t\treadQuotedAttributeValue( parser, \""\\\""\"" ) ||\n\t\t\treadUnquotedAttributeValue( parser );\n\n\tif ( value === null ) {\n\t\tparser.error( 'Expected valid attribute value' );\n\t}\n\n\tif ( parser.sectionDepth !== startDepth ) {\n\t\tparser.pos = valueStart;\n\t\tparser.error( 'An attribute value must contain as many opening section tags as closing section tags' );\n\t}\n\n\tif ( !value.length ) {\n\t\treturn '';\n\t}\n\n\tif ( value.length === 1 && typeof value[0] === 'string' ) {\n\t\treturn decodeCharacterReferences( value[0] );\n\t}\n\n\treturn value;\n}\n\nfunction readUnquotedAttributeValueToken ( parser ) {\n\tvar text, index;\n\n\tvar start = parser.pos;\n\n\ttext = parser.matchPattern( unquotedAttributeValueTextPattern );\n\n\tif ( !text ) {\n\t\treturn null;\n\t}\n\n\tvar haystack = text;\n\tvar needles = parser.tags.map( function (t) { return t.open; } ); // TODO refactor... we do this in readText.js as well\n\n\tif ( ( index = getLowestIndex( haystack, needles ) ) !== -1 ) {\n\t\ttext = text.substr( 0, index );\n\t\tparser.pos = start + text.length;\n\t}\n\n\treturn text;\n}\n\nfunction readUnquotedAttributeValue ( parser ) {\n\tparser.inAttribute = true;\n\n\tvar tokens = [];\n\n\tvar token = readMustache( parser ) || readUnquotedAttributeValueToken( parser );\n\twhile ( token ) {\n\t\ttokens.push( token );\n\t\ttoken = readMustache( parser ) || readUnquotedAttributeValueToken( parser );\n\t}\n\n\tif ( !tokens.length ) {\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = false;\n\treturn tokens;\n}\n\nfunction readQuotedAttributeValue ( parser, quoteMark ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( quoteMark ) ) {\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = quoteMark;\n\n\tvar tokens = [];\n\n\tvar token = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );\n\twhile ( token !== null ) {\n\t\ttokens.push( token );\n\t\ttoken = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );\n\t}\n\n\tif ( !parser.matchString( quoteMark ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = false;\n\n\treturn tokens;\n}\n\nfunction readQuotedStringToken ( parser, quoteMark ) {\n\tvar haystack = parser.remaining();\n\n\tvar needles = parser.tags.map( function (t) { return t.open; } ); // TODO refactor... we do this in readText.js as well\n\tneedles.push( quoteMark );\n\n\tvar index = getLowestIndex( haystack, needles );\n\n\tif ( index === -1 ) {\n\t\tparser.error( 'Quoted attribute value must have a closing quote' );\n\t}\n\n\tif ( !index ) {\n\t\treturn null;\n\t}\n\n\tparser.pos += index;\n\treturn haystack.substr( 0, index );\n}\n\nfunction readAttributeOrDirective ( parser ) {\n\tvar match, directive;\n\n\tvar attribute = readAttribute( parser, false );\n\n\tif ( !attribute ) { return null; }\n\n\t\t// lazy, twoway\n\tif ( directive = directives[ attribute.n ] ) {\n\t\tattribute.t = directive.t;\n\t\tif ( directive.v ) { attribute.v = directive.v; }\n\t\tdelete attribute.n; // no name necessary\n\t\tparser.allowWhitespace();\n\t\tif ( parser.nextChar() === '=' ) { attribute.f = readAttributeValue( parser ); }\n\t}\n\n\t\t// decorators\n\telse if ( match = decoratorPattern.exec( attribute.n ) ) {\n\t\tattribute.n = match[1];\n\t\tattribute.t = DECORATOR;\n\t\treadArguments( parser, attribute );\n\t}\n\n\t\t// transitions\n\telse if ( match = transitionPattern.exec( attribute.n ) ) {\n\t\tattribute.n = match[1];\n\t\tattribute.t = TRANSITION;\n\t\treadArguments( parser, attribute );\n\t\tattribute.v = match[2] === 'in-out' ? 't0' : match[2] === 'in' ? 't1' : 't2';\n\t}\n\n\t\t// on-click etc\n\telse if ( match = eventPattern.exec( attribute.n ) ) {\n\n\t\tattribute.n = splitEvent( match[1] );\n\t\tattribute.t = EVENT;\n\n\t\t\t// check for a proxy event\n\t\tif ( !readProxyEvent( parser, attribute ) ) {\n\t\t\t\t// otherwise, it's an expression\n\t\t\treadArguments( parser, attribute, true );\n\t\t} else if ( reservedEventNames.test( attribute.f ) ) {\n\t\t\tparser.pos -= attribute.f.length;\n\t\t\tparser.error( 'Cannot use reserved event names (change, reset, teardown, update, construct, config, init, render, unrender, complete, detach, insert, destruct, attachchild, detachchild)' );\n\t\t}\n\t}\n\n\telse {\n\t\tparser.allowWhitespace();\n\t\tvar value = parser.nextChar() === '=' ? readAttributeValue( parser ) : null;\n\t\tattribute.f = value != null ? value : attribute.f;\n\n\t\tif ( parser.sanitizeEventAttributes && onPattern.test( attribute.n ) ) {\n\t\t\treturn { exclude: true };\n\t\t} else {\n\t\t\tattribute.f = attribute.f || ( attribute.f === '' ? '' : 0 );\n\t\t\tattribute.t = ATTRIBUTE;\n\t\t}\n\t}\n\n\treturn attribute;\n}\n\nfunction readProxyEvent ( parser, attribute ) {\n\tvar start = parser.pos;\n\tif ( !parser.matchString( '=' ) ) { parser.error( \""Missing required directive arguments\"" ); }\n\n\tvar quote = parser.matchString( \""'\"" ) || parser.matchString( \""\\\""\"" );\n\tparser.allowWhitespace();\n\tvar proxy = parser.matchPattern( proxyEvent );\n\n\tif ( proxy !== undefined ) {\n\t\tif ( quote ) {\n\t\t\tparser.allowWhitespace();\n\t\t\tif ( !parser.matchString( quote ) ) { parser.pos = start; }\n\t\t\telse { return ( attribute.f = proxy ) || true; }\n\t\t} else if ( !parser.matchPattern( whitespace ) ) {\n\t\t\tparser.pos = start;\n\t\t} else {\n\t\t\treturn ( attribute.f = proxy ) || true;\n\t\t}\n\t} else {\n\t\tparser.pos = start;\n\t}\n}\n\nfunction readArguments ( parser, attribute, required ) {\n\tif ( required === void 0 ) required = false;\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( '=' ) ) {\n\t\tif ( required ) { parser.error( \""Missing required directive arguments\"" ); }\n\t\treturn;\n\t}\n\tparser.allowWhitespace();\n\n\tvar quote = parser.matchString( '\""' ) || parser.matchString( \""'\"" );\n\tvar spread = parser.spreadArgs;\n\tparser.spreadArgs = true;\n\tparser.inUnquotedAttribute = !quote;\n\tvar exprs = readExpressionList( parser );\n\tparser.inUnquotedAttribute = false;\n\tparser.spreadArgs = spread;\n\n\tif ( quote ) {\n\t\tparser.allowWhitespace();\n\t\tif ( parser.matchString( quote ) !== quote ) { parser.error( (\""Expected matching quote '\"" + quote + \""'\"") ); }\n\t}\n\n\tattribute.f = flattenExpression({ m: exprs, t: 22 });\n}\n\nvar delimiterChangeToken = { t: DELIMCHANGE, exclude: true };\n\nfunction readMustache ( parser ) {\n\tvar mustache, i;\n\n\t// If we're inside a <script> or <style> tag, and we're not\n\t// interpolating, bug out\n\tif ( parser.interpolate[ parser.inside ] === false ) {\n\t\treturn null;\n\t}\n\n\tfor ( i = 0; i < parser.tags.length; i += 1 ) {\n\t\tif ( mustache = readMustacheOfType( parser, parser.tags[i] ) ) {\n\t\t\treturn mustache;\n\t\t}\n\t}\n\n\tif ( parser.inTag && !parser.inAttribute ) {\n\t\tmustache = readAttributeOrDirective( parser );\n\t\tif ( mustache ) {\n\t\t\tparser.allowWhitespace();\n\t\t\treturn mustache;\n\t\t}\n\t}\n}\n\nfunction readMustacheOfType ( parser, tag ) {\n\tvar mustache, reader, i;\n\n\tvar start = parser.pos;\n\n\tif ( parser.matchString( '\\\\' + tag.open ) ) {\n\t\tif ( start === 0 || parser.str[ start - 1 ] !== '\\\\' ) {\n\t\t\treturn tag.open;\n\t\t}\n\t} else if ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\t// delimiter change?\n\tif ( mustache = readDelimiterChange( parser ) ) {\n\t\t// find closing delimiter or abort...\n\t\tif ( !parser.matchString( tag.close ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// ...then make the switch\n\t\ttag.open = mustache[0];\n\t\ttag.close = mustache[1];\n\t\tparser.sortMustacheTags();\n\n\t\treturn delimiterChangeToken;\n\t}\n\n\tparser.allowWhitespace();\n\n\t// illegal section closer\n\tif ( parser.matchString( '/' ) ) {\n\t\tparser.pos -= 1;\n\t\tvar rewind = parser.pos;\n\t\tif ( !readNumberLiteral( parser ) ) {\n\t\t\tparser.pos = rewind - ( tag.close.length );\n\t\t\tif ( parser.inAttribute ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tparser.error( 'Attempted to close a section that wasn\\'t open' );\n\t\t\t}\n\t\t} else {\n\t\t\tparser.pos = rewind;\n\t\t}\n\t}\n\n\tfor ( i = 0; i < tag.readers.length; i += 1 ) {\n\t\treader = tag.readers[i];\n\n\t\tif ( mustache = reader( parser, tag ) ) {\n\t\t\tif ( tag.isStatic ) {\n\t\t\t\tmustache.s = true; // TODO make this `1` instead - more compact\n\t\t\t}\n\n\t\t\tif ( parser.includeLinePositions ) {\n\t\t\t\tmustache.p = parser.getLinePos( start );\n\t\t\t}\n\n\t\t\treturn mustache;\n\t\t}\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nfunction refineExpression ( expression, mustache ) {\n\tvar referenceExpression;\n\n\tif ( expression ) {\n\t\twhile ( expression.t === BRACKETED && expression.x ) {\n\t\t\texpression = expression.x;\n\t\t}\n\n\t\tif ( expression.t === REFERENCE ) {\n\t\t\tmustache.r = expression.n;\n\t\t} else {\n\t\t\tif ( referenceExpression = getReferenceExpression( expression ) ) {\n\t\t\t\tmustache.rx = referenceExpression;\n\t\t\t} else {\n\t\t\t\tmustache.x = flattenExpression( expression );\n\t\t\t}\n\t\t}\n\n\t\treturn mustache;\n\t}\n}\n\n// TODO refactor this! it's bewildering\nfunction getReferenceExpression ( expression ) {\n\tvar members = [];\n\tvar refinement;\n\n\twhile ( expression.t === MEMBER && expression.r.t === REFINEMENT ) {\n\t\trefinement = expression.r;\n\n\t\tif ( refinement.x ) {\n\t\t\tif ( refinement.x.t === REFERENCE ) {\n\t\t\t\tmembers.unshift( refinement.x );\n\t\t\t} else {\n\t\t\t\tmembers.unshift( flattenExpression( refinement.x ) );\n\t\t\t}\n\t\t} else {\n\t\t\tmembers.unshift( refinement.n );\n\t\t}\n\n\t\texpression = expression.x;\n\t}\n\n\tif ( expression.t !== REFERENCE ) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tr: expression.n,\n\t\tm: members\n\t};\n}\n\nfunction readTriple ( parser, tag ) {\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tvar triple = { t: TRIPLE };\n\trefineExpression( expression, triple ); // TODO handle this differently - it's mysterious\n\n\treturn triple;\n}\n\nfunction readUnescaped ( parser, tag ) {\n\tif ( !parser.matchString( '&' ) ) {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tvar triple = { t: TRIPLE };\n\trefineExpression( expression, triple ); // TODO handle this differently - it's mysterious\n\n\treturn triple;\n}\n\nvar legalAlias = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nvar asRE = /^as/i;\n\nfunction readAliases( parser ) {\n\tvar aliases = [];\n\tvar alias;\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\talias = readAlias( parser );\n\n\tif ( alias ) {\n\t\talias.x = refineExpression( alias.x, {} );\n\t\taliases.push( alias );\n\n\t\tparser.allowWhitespace();\n\n\t\twhile ( parser.matchString(',') ) {\n\t\t\talias = readAlias( parser );\n\n\t\t\tif ( !alias ) {\n\t\t\t\tparser.error( 'Expected another alias.' );\n\t\t\t}\n\n\t\t\talias.x = refineExpression( alias.x, {} );\n\t\t\taliases.push( alias );\n\n\t\t\tparser.allowWhitespace();\n\t\t}\n\n\t\treturn aliases;\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nfunction readAlias( parser ) {\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\tvar expr = readExpression( parser, [] );\n\n\tif ( !expr ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchPattern( asRE ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar alias = parser.matchPattern( legalAlias );\n\n\tif ( !alias ) {\n\t\tparser.error( 'Expected a legal alias name.' );\n\t}\n\n\treturn { n: alias, x: expr };\n}\n\nfunction readPartial ( parser, tag ) {\n\tvar type = parser.matchString( '>' ) || parser.matchString( 'yield' );\n\tvar partial = { t: type === '>' ? PARTIAL : YIELDER };\n\tvar aliases;\n\n\tif ( !type ) { return null; }\n\n\tparser.allowWhitespace();\n\n\tif ( type === '>' || !( aliases = parser.matchString( 'with' ) ) ) {\n\t\t// Partial names can include hyphens, so we can't use readExpression\n\t\t// blindly. Instead, we use the `relaxedNames` flag to indicate that\n\t\t// `foo-bar` should be read as a single name, rather than 'subtract\n\t\t// bar from foo'\n\t\tparser.relaxedNames = parser.strictRefinement = true;\n\t\tvar expression = readExpression( parser );\n\t\tparser.relaxedNames = parser.strictRefinement = false;\n\n\t\tif ( !expression && type === '>' ) { return null; }\n\n\t\tif ( expression ) {\n\t\t\trefineExpression( expression, partial ); // TODO...\n\t\t\tparser.allowWhitespace();\n\t\t\tif ( type !== '>' ) { aliases = parser.matchString( 'with' ); }\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\t// check for alias context e.g. `{{>foo bar as bat, bip as bop}}`\n\tif ( aliases || type === '>' ) {\n\t\taliases = readAliases( parser );\n\t\tif ( aliases && aliases.length ) {\n\t\t\tpartial.z = aliases;\n\t\t}\n\n\t\t// otherwise check for literal context e.g. `{{>foo bar}}` then\n\t\t// turn it into `{{#with bar}}{{>foo}}{{/with}}`\n\t\telse if ( type === '>' ) {\n\t\t\tvar context = readExpression( parser );\n\t\t\tif ( context) {\n\t\t\t\tpartial.c = {};\n\t\t\t\trefineExpression( context, partial.c );\n\t\t\t}\n\t\t}\n\n\t\telse {\n\t\t\t// {{yield with}} requires some aliases\n\t\t\tparser.error( \""Expected one or more aliases\"" );\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn partial;\n}\n\nfunction readComment ( parser, tag ) {\n\tif ( !parser.matchString( '!' ) ) {\n\t\treturn null;\n\t}\n\n\tvar index = parser.remaining().indexOf( tag.close );\n\n\tif ( index !== -1 ) {\n\t\tparser.pos += index + tag.close.length;\n\t\treturn { t: COMMENT };\n\t}\n}\n\nfunction readExpressionOrReference ( parser, expectedFollowers ) {\n\tvar start = parser.pos;\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\t// valid reference but invalid expression e.g. `{{new}}`?\n\t\tvar ref = parser.matchPattern( /^(\\w+)/ );\n\t\tif ( ref ) {\n\t\t\treturn {\n\t\t\t\tt: REFERENCE,\n\t\t\t\tn: ref\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfor ( var i = 0; i < expectedFollowers.length; i += 1 ) {\n\t\tif ( parser.remaining().substr( 0, expectedFollowers[i].length ) === expectedFollowers[i] ) {\n\t\t\treturn expression;\n\t\t}\n\t}\n\n\tparser.pos = start;\n\treturn readReference( parser );\n}\n\nfunction readInterpolator ( parser, tag ) {\n\tvar expression, err;\n\n\tvar start = parser.pos;\n\n\t// TODO would be good for perf if we could do away with the try-catch\n\ttry {\n\t\texpression = readExpressionOrReference( parser, [ tag.close ] );\n\t} catch ( e ) {\n\t\terr = e;\n\t}\n\n\tif ( !expression ) {\n\t\tif ( parser.str.charAt( start ) === '!' ) {\n\t\t\t// special case - comment\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( err ) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""' after reference\"") );\n\n\t\tif ( !expression ) {\n\t\t\t// special case - comment\n\t\t\tif ( parser.nextChar() === '!' ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tparser.error( \""Expected expression or legal reference\"" );\n\t\t}\n\t}\n\n\tvar interpolator = { t: INTERPOLATOR };\n\trefineExpression( expression, interpolator ); // TODO handle this differently - it's mysterious\n\n\treturn interpolator;\n}\n\nfunction readClosing ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '/' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar remaining = parser.remaining();\n\tvar index = remaining.indexOf( tag.close );\n\n\tif ( index !== -1 ) {\n\t\tvar closing = {\n\t\t\tt: CLOSING,\n\t\t\tr: remaining.substr( 0, index ).split( ' ' )[0]\n\t\t};\n\n\t\tparser.pos += index;\n\n\t\tif ( !parser.matchString( tag.close ) ) {\n\t\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t\t}\n\n\t\treturn closing;\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nvar elsePattern = /^\\s*else\\s*/;\n\nfunction readElse ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( elsePattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn {\n\t\tt: ELSE\n\t};\n}\n\nvar elsePattern$1 = /^\\s*elseif\\s+/;\n\nfunction readElseIf ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( elsePattern$1 ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar expression = readExpression( parser );\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn {\n\t\tt: ELSEIF,\n\t\tx: expression\n\t};\n}\n\nvar handlebarsBlockCodes = {\n\teach:    SECTION_EACH,\n\t'if':      SECTION_IF,\n\t'with':    SECTION_IF_WITH,\n\tunless:  SECTION_UNLESS\n};\n\nvar indexRefPattern = /^\\s*:\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nvar keyIndexRefPattern = /^\\s*,\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nvar handlebarsBlockPattern = new RegExp( '^(' + Object.keys( handlebarsBlockCodes ).join( '|' ) + ')\\\\b' );\n\nfunction readSection ( parser, tag ) {\n\tvar expression, section, child, children, hasElse, block, unlessBlock, closed, i, expectedClose;\n\tvar aliasOnly = false;\n\n\tvar start = parser.pos;\n\n\tif ( parser.matchString( '^' ) ) {\n\t\t// watch out for parent context refs - {{^^/^^/foo}}\n\t\tif ( parser.matchString( '^/' ) ){\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\t\tsection = { t: SECTION, f: [], n: SECTION_UNLESS };\n\t} else if ( parser.matchString( '#' ) ) {\n\t\tsection = { t: SECTION, f: [] };\n\n\t\tif ( parser.matchString( 'partial' ) ) {\n\t\t\tparser.pos = start - parser.standardDelimiters[0].length;\n\t\t\tparser.error( 'Partial definitions can only be at the top level of the template, or immediately inside components' );\n\t\t}\n\n\t\tif ( block = parser.matchPattern( handlebarsBlockPattern ) ) {\n\t\t\texpectedClose = block;\n\t\t\tsection.n = handlebarsBlockCodes[ block ];\n\t\t}\n\t} else {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( block === 'with' ) {\n\t\tvar aliases = readAliases( parser );\n\t\tif ( aliases ) {\n\t\t\taliasOnly = true;\n\t\t\tsection.z = aliases;\n\t\t\tsection.t = ALIAS;\n\t\t}\n\t} else if ( block === 'each' ) {\n\t\tvar alias = readAlias( parser );\n\t\tif ( alias ) {\n\t\t\tsection.z = [ { n: alias.n, x: { r: '.' } } ];\n\t\t\texpression = alias.x;\n\t\t}\n\t}\n\n\tif ( !aliasOnly ) {\n\t\tif ( !expression ) { expression = readExpression( parser ); }\n\n\t\tif ( !expression ) {\n\t\t\tparser.error( 'Expected expression' );\n\t\t}\n\n\t\t// optional index and key references\n\t\tif ( i = parser.matchPattern( indexRefPattern ) ) {\n\t\t\tvar extra;\n\n\t\t\tif ( extra = parser.matchPattern( keyIndexRefPattern ) ) {\n\t\t\t\tsection.i = i + ',' + extra;\n\t\t\t} else {\n\t\t\t\tsection.i = i;\n\t\t\t}\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tparser.sectionDepth += 1;\n\tchildren = section.f;\n\n\tvar pos;\n\tdo {\n\t\tpos = parser.pos;\n\t\tif ( child = readClosing( parser, tag ) ) {\n\t\t\tif ( expectedClose && child.r !== expectedClose ) {\n\t\t\t\tparser.pos = pos;\n\t\t\t\tparser.error( (\""Expected \"" + (tag.open) + \""/\"" + expectedClose + (tag.close)) );\n\t\t\t}\n\n\t\t\tparser.sectionDepth -= 1;\n\t\t\tclosed = true;\n\t\t}\n\n\t\telse if ( !aliasOnly && ( child = readElseIf( parser, tag ) ) ) {\n\t\t\tif ( section.n === SECTION_UNLESS ) {\n\t\t\t\tparser.error( '{{else}} not allowed in {{#unless}}' );\n\t\t\t}\n\n\t\t\tif ( hasElse ) {\n\t\t\t\tparser.error( 'illegal {{elseif...}} after {{else}}' );\n\t\t\t}\n\n\t\t\tif ( !unlessBlock ) {\n\t\t\t\tunlessBlock = [];\n\t\t\t}\n\n\t\t\tvar mustache = {\n\t\t\t\tt: SECTION,\n\t\t\t\tn: SECTION_IF,\n\t\t\t\tf: children = []\n\t\t\t};\n\t\t\trefineExpression( child.x, mustache );\n\n\t\t\tunlessBlock.push( mustache );\n\t\t}\n\n\t\telse if ( !aliasOnly && ( child = readElse( parser, tag ) ) ) {\n\t\t\tif ( section.n === SECTION_UNLESS ) {\n\t\t\t\tparser.error( '{{else}} not allowed in {{#unless}}' );\n\t\t\t}\n\n\t\t\tif ( hasElse ) {\n\t\t\t\tparser.error( 'there can only be one {{else}} block, at the end of a section' );\n\t\t\t}\n\n\t\t\thasElse = true;\n\n\t\t\t// use an unless block if there's no elseif\n\t\t\tif ( !unlessBlock ) {\n\t\t\t\tunlessBlock = [];\n\t\t\t}\n\n\t\t\tunlessBlock.push({\n\t\t\t\tt: SECTION,\n\t\t\t\tn: SECTION_UNLESS,\n\t\t\t\tf: children = []\n\t\t\t});\n\t\t}\n\n\t\telse {\n\t\t\tchild = parser.read( READERS );\n\n\t\t\tif ( !child ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchildren.push( child );\n\t\t}\n\t} while ( !closed );\n\n\tif ( unlessBlock ) {\n\t\tsection.l = unlessBlock;\n\t}\n\n\tif ( !aliasOnly ) {\n\t\trefineExpression( expression, section );\n\t}\n\n\t// TODO if a section is empty it should be discarded. Don't do\n\t// that here though - we need to clean everything up first, as\n\t// it may contain removeable whitespace. As a temporary measure,\n\t// to pass the existing tests, remove empty `f` arrays\n\tif ( !section.f.length ) {\n\t\tdelete section.f;\n\t}\n\n\treturn section;\n}\n\nvar OPEN_COMMENT = '<!--';\nvar CLOSE_COMMENT = '-->';\n\nfunction readHtmlComment ( parser ) {\n\tvar start = parser.pos;\n\n\tif ( parser.textOnlyMode || !parser.matchString( OPEN_COMMENT ) ) {\n\t\treturn null;\n\t}\n\n\tvar remaining = parser.remaining();\n\tvar endIndex = remaining.indexOf( CLOSE_COMMENT );\n\n\tif ( endIndex === -1 ) {\n\t\tparser.error( 'Illegal HTML - expected closing comment sequence (\\'-->\\')' );\n\t}\n\n\tvar content = remaining.substr( 0, endIndex );\n\tparser.pos += endIndex + 3;\n\n\tvar comment = {\n\t\tt: COMMENT,\n\t\tc: content\n\t};\n\n\tif ( parser.includeLinePositions ) {\n\t\tcomment.p = parser.getLinePos( start );\n\t}\n\n\treturn comment;\n}\n\nvar leadingLinebreak = /^[ \\t\\f\\r\\n]*\\r?\\n/;\nvar trailingLinebreak = /\\r?\\n[ \\t\\f\\r\\n]*$/;\n\nvar stripStandalones = function ( items ) {\n\tvar i, current, backOne, backTwo, lastSectionItem;\n\n\tfor ( i=1; i<items.length; i+=1 ) {\n\t\tcurrent = items[i];\n\t\tbackOne = items[i-1];\n\t\tbackTwo = items[i-2];\n\n\t\t// if we're at the end of a [text][comment][text] sequence...\n\t\tif ( isString( current ) && isComment( backOne ) && isString( backTwo ) ) {\n\n\t\t\t// ... and the comment is a standalone (i.e. line breaks either side)...\n\t\t\tif ( trailingLinebreak.test( backTwo ) && leadingLinebreak.test( current ) ) {\n\n\t\t\t\t// ... then we want to remove the whitespace after the first line break\n\t\t\t\titems[i-2] = backTwo.replace( trailingLinebreak, '\\n' );\n\n\t\t\t\t// and the leading line break of the second text token\n\t\t\t\titems[i] = current.replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\n\t\t// if the current item is a section, and it is preceded by a linebreak, and\n\t\t// its first item is a linebreak...\n\t\tif ( isSection( current ) && isString( backOne ) ) {\n\t\t\tif ( trailingLinebreak.test( backOne ) && isString( current.f[0] ) && leadingLinebreak.test( current.f[0] ) ) {\n\t\t\t\titems[i-1] = backOne.replace( trailingLinebreak, '\\n' );\n\t\t\t\tcurrent.f[0] = current.f[0].replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\n\t\t// if the last item was a section, and it is followed by a linebreak, and\n\t\t// its last item is a linebreak...\n\t\tif ( isString( current ) && isSection( backOne ) ) {\n\t\t\tlastSectionItem = lastItem( backOne.f );\n\n\t\t\tif ( isString( lastSectionItem ) && trailingLinebreak.test( lastSectionItem ) && leadingLinebreak.test( current ) ) {\n\t\t\t\tbackOne.f[ backOne.f.length - 1 ] = lastSectionItem.replace( trailingLinebreak, '\\n' );\n\t\t\t\titems[i] = current.replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn items;\n};\n\nfunction isString ( item ) {\n\treturn typeof item === 'string';\n}\n\nfunction isComment ( item ) {\n\treturn item.t === COMMENT || item.t === DELIMCHANGE;\n}\n\nfunction isSection ( item ) {\n\treturn ( item.t === SECTION || item.t === INVERTED ) && item.f;\n}\n\nvar trimWhitespace = function ( items, leadingPattern, trailingPattern ) {\n\tvar item;\n\n\tif ( leadingPattern ) {\n\t\titem = items[0];\n\t\tif ( typeof item === 'string' ) {\n\t\t\titem = item.replace( leadingPattern, '' );\n\n\t\t\tif ( !item ) {\n\t\t\t\titems.shift();\n\t\t\t} else {\n\t\t\t\titems[0] = item;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( trailingPattern ) {\n\t\titem = lastItem( items );\n\t\tif ( typeof item === 'string' ) {\n\t\t\titem = item.replace( trailingPattern, '' );\n\n\t\t\tif ( !item ) {\n\t\t\t\titems.pop();\n\t\t\t} else {\n\t\t\t\titems[ items.length - 1 ] = item;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar contiguousWhitespace = /[ \\t\\f\\r\\n]+/g;\nvar preserveWhitespaceElements = /^(?:pre|script|style|textarea)$/i;\nvar leadingWhitespace$1 = /^[ \\t\\f\\r\\n]+/;\nvar trailingWhitespace = /[ \\t\\f\\r\\n]+$/;\nvar leadingNewLine = /^(?:\\r\\n|\\r|\\n)/;\nvar trailingNewLine = /(?:\\r\\n|\\r|\\n)$/;\n\nfunction cleanup ( items, stripComments, preserveWhitespace, removeLeadingWhitespace, removeTrailingWhitespace ) {\n\tif ( typeof items === 'string' ) { return; }\n\n\tvar i,\n\t\titem,\n\t\tpreviousItem,\n\t\tnextItem,\n\t\tpreserveWhitespaceInsideFragment,\n\t\tremoveLeadingWhitespaceInsideFragment,\n\t\tremoveTrailingWhitespaceInsideFragment;\n\n\t// First pass - remove standalones and comments etc\n\tstripStandalones( items );\n\n\ti = items.length;\n\twhile ( i-- ) {\n\t\titem = items[i];\n\n\t\t// Remove delimiter changes, unsafe elements etc\n\t\tif ( item.exclude ) {\n\t\t\titems.splice( i, 1 );\n\t\t}\n\n\t\t// Remove comments, unless we want to keep them\n\t\telse if ( stripComments && item.t === COMMENT ) {\n\t\t\titems.splice( i, 1 );\n\t\t}\n\t}\n\n\t// If necessary, remove leading and trailing whitespace\n\ttrimWhitespace( items, removeLeadingWhitespace ? leadingWhitespace$1 : null, removeTrailingWhitespace ? trailingWhitespace : null );\n\n\ti = items.length;\n\twhile ( i-- ) {\n\t\titem = items[i];\n\n\t\t// Recurse\n\t\tif ( item.f ) {\n\t\t\tvar isPreserveWhitespaceElement = item.t === ELEMENT && preserveWhitespaceElements.test( item.e );\n\t\t\tpreserveWhitespaceInsideFragment = preserveWhitespace || isPreserveWhitespaceElement;\n\n\t\t\tif ( !preserveWhitespace && isPreserveWhitespaceElement ) {\n\t\t\t\ttrimWhitespace( item.f, leadingNewLine, trailingNewLine );\n\t\t\t}\n\n\t\t\tif ( !preserveWhitespaceInsideFragment ) {\n\t\t\t\tpreviousItem = items[ i - 1 ];\n\t\t\t\tnextItem = items[ i + 1 ];\n\n\t\t\t\t// if the previous item was a text item with trailing whitespace,\n\t\t\t\t// remove leading whitespace inside the fragment\n\t\t\t\tif ( !previousItem || ( typeof previousItem === 'string' && trailingWhitespace.test( previousItem ) ) ) {\n\t\t\t\t\tremoveLeadingWhitespaceInsideFragment = true;\n\t\t\t\t}\n\n\t\t\t\t// and vice versa\n\t\t\t\tif ( !nextItem || ( typeof nextItem === 'string' && leadingWhitespace$1.test( nextItem ) ) ) {\n\t\t\t\t\tremoveTrailingWhitespaceInsideFragment = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcleanup( item.f, stripComments, preserveWhitespaceInsideFragment, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\t\t}\n\n\t\t// Split if-else blocks into two (an if, and an unless)\n\t\tif ( item.l ) {\n\t\t\tcleanup( item.l, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\n\t\t\titem.l.forEach( function (s) { return s.l = 1; } );\n\t\t\titem.l.unshift( i + 1, 0 );\n\t\t\titems.splice.apply( items, item.l );\n\t\t\tdelete item.l; // TODO would be nice if there was a way around this\n\t\t}\n\n\t\t// Clean up conditional attributes\n\t\tif ( item.m ) {\n\t\t\tcleanup( item.m, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\t\t\tif ( item.m.length < 1 ) { delete item.m; }\n\t\t}\n\t}\n\n\t// final pass - fuse text nodes together\n\ti = items.length;\n\twhile ( i-- ) {\n\t\tif ( typeof items[i] === 'string' ) {\n\t\t\tif ( typeof items[i+1] === 'string' ) {\n\t\t\t\titems[i] = items[i] + items[i+1];\n\t\t\t\titems.splice( i + 1, 1 );\n\t\t\t}\n\n\t\t\tif ( !preserveWhitespace ) {\n\t\t\t\titems[i] = items[i].replace( contiguousWhitespace, ' ' );\n\t\t\t}\n\n\t\t\tif ( items[i] === '' ) {\n\t\t\t\titems.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar closingTagPattern = /^([a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*)\\s*\\>/;\n\nfunction readClosingTag ( parser ) {\n\tvar tag;\n\n\tvar start = parser.pos;\n\n\t// are we looking at a closing tag?\n\tif ( !parser.matchString( '</' ) ) {\n\t\treturn null;\n\t}\n\n\tif ( tag = parser.matchPattern( closingTagPattern ) ) {\n\t\tif ( parser.inside && tag !== parser.inside ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: CLOSING_TAG,\n\t\t\te: tag\n\t\t};\n\t}\n\n\t// We have an illegal closing tag, report it\n\tparser.pos -= 2;\n\tparser.error( 'Illegal closing tag' );\n}\n\nvar tagNamePattern = /^[a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*/;\nvar validTagNameFollower = /^[\\s\\n\\/>]/;\nvar exclude = { exclude: true };\n\n// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission\nvar disallowedContents = {\n\tli: [ 'li' ],\n\tdt: [ 'dt', 'dd' ],\n\tdd: [ 'dt', 'dd' ],\n\tp: 'address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul'.split( ' ' ),\n\trt: [ 'rt', 'rp' ],\n\trp: [ 'rt', 'rp' ],\n\toptgroup: [ 'optgroup' ],\n\toption: [ 'option', 'optgroup' ],\n\tthead: [ 'tbody', 'tfoot' ],\n\ttbody: [ 'tbody', 'tfoot' ],\n\ttfoot: [ 'tbody' ],\n\ttr: [ 'tr', 'tbody' ],\n\ttd: [ 'td', 'th', 'tr' ],\n\tth: [ 'td', 'th', 'tr' ]\n};\n\nfunction readElement$1 ( parser ) {\n\tvar attribute, selfClosing, children, partials, hasPartials, child, closed, pos, remaining, closingTag, anchor;\n\n\tvar start = parser.pos;\n\n\tif ( parser.inside || parser.inAttribute || parser.textOnlyMode ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( '<' ) ) {\n\t\treturn null;\n\t}\n\n\t// if this is a closing tag, abort straight away\n\tif ( parser.nextChar() === '/' ) {\n\t\treturn null;\n\t}\n\n\tvar element = {};\n\tif ( parser.includeLinePositions ) {\n\t\telement.p = parser.getLinePos( start );\n\t}\n\n\t// check for doctype decl\n\tif ( parser.matchString( '!' ) ) {\n\t\telement.t = DOCTYPE;\n\t\tif ( !parser.matchPattern( /^doctype/i ) ) {\n\t\t\tparser.error( 'Expected DOCTYPE declaration' );\n\t\t}\n\n\t\telement.a = parser.matchPattern( /^(.+?)>/ );\n\t\treturn element;\n\t}\n\t// check for anchor\n\telse if ( anchor = parser.matchString( '#' ) ) {\n\t\tparser.allowWhitespace();\n\t\telement.t = ANCHOR;\n\t\telement.n = parser.matchPattern( relaxedName );\n\t}\n\t// otherwise, it's an element/component\n\telse {\n\t\telement.t = ELEMENT;\n\n\t\t// element name\n\t\telement.e = parser.matchPattern( tagNamePattern );\n\t\tif ( !element.e ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// next character must be whitespace, closing solidus or '>'\n\tif ( !validTagNameFollower.test( parser.nextChar() ) ) {\n\t\tparser.error( 'Illegal tag name' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tparser.inTag = true;\n\n\t// directives and attributes\n\twhile ( attribute = readMustache( parser ) ) {\n\t\tif ( attribute !== false ) {\n\t\t\tif ( !element.m ) { element.m = []; }\n\t\t\telement.m.push( attribute );\n\t\t}\n\n\t\tparser.allowWhitespace();\n\t}\n\n\tparser.inTag = false;\n\n\t// allow whitespace before closing solidus\n\tparser.allowWhitespace();\n\n\t// self-closing solidus?\n\tif ( parser.matchString( '/' ) ) {\n\t\tselfClosing = true;\n\t}\n\n\t// closing angle bracket\n\tif ( !parser.matchString( '>' ) ) {\n\t\treturn null;\n\t}\n\n\tvar lowerCaseName = ( element.e || element.n ).toLowerCase();\n\tvar preserveWhitespace = parser.preserveWhitespace;\n\n\tif ( !selfClosing && ( anchor || !voidElementNames.test( element.e ) ) ) {\n\t\tif ( !anchor ) {\n\t\t\tparser.elementStack.push( lowerCaseName );\n\n\t\t\t// Special case - if we open a script element, further tags should\n\t\t\t// be ignored unless they're a closing script element\n\t\t\tif ( lowerCaseName in parser.interpolate ) {\n\t\t\t\tparser.inside = lowerCaseName;\n\t\t\t}\n\t\t}\n\n\t\tchildren = [];\n\t\tpartials = Object.create( null );\n\n\t\tdo {\n\t\t\tpos = parser.pos;\n\t\t\tremaining = parser.remaining();\n\n\t\t\tif ( !remaining ) {\n\t\t\t\tparser.error( (\""Missing end \"" + (parser.elementStack.length > 1 ? 'tags' : 'tag') + \"" (\"" + (parser.elementStack.reverse().map( function (x) { return (\""</\"" + x + \"">\""); } ).join( '' )) + \"")\"") );\n\t\t\t}\n\n\t\t\t// if for example we're in an <li> element, and we see another\n\t\t\t// <li> tag, close the first so they become siblings\n\t\t\tif ( !anchor && !canContain( lowerCaseName, remaining ) ) {\n\t\t\t\tclosed = true;\n\t\t\t}\n\n\t\t\t// closing tag\n\t\t\telse if ( !anchor && ( closingTag = readClosingTag( parser ) ) ) {\n\t\t\t\tclosed = true;\n\n\t\t\t\tvar closingTagName = closingTag.e.toLowerCase();\n\n\t\t\t\t// if this *isn't* the closing tag for the current element...\n\t\t\t\tif ( closingTagName !== lowerCaseName ) {\n\t\t\t\t\t// rewind parser\n\t\t\t\t\tparser.pos = pos;\n\n\t\t\t\t\t// if it doesn't close a parent tag, error\n\t\t\t\t\tif ( !~parser.elementStack.indexOf( closingTagName ) ) {\n\t\t\t\t\t\tvar errorMessage = 'Unexpected closing tag';\n\n\t\t\t\t\t\t// add additional help for void elements, since component names\n\t\t\t\t\t\t// might clash with them\n\t\t\t\t\t\tif ( voidElementNames.test( closingTagName ) ) {\n\t\t\t\t\t\t\terrorMessage += \"" (<\"" + closingTagName + \""> is a void element - it cannot contain children)\"";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparser.error( errorMessage );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if ( anchor && readAnchorClose( parser, element.n ) ) {\n\t\t\t\tclosed = true;\n\t\t\t}\n\n\t\t\t// implicit close by closing section tag. TODO clean this up\n\t\t\telse if ( child = readClosing( parser, { open: parser.standardDelimiters[0], close: parser.standardDelimiters[1] } ) ) {\n\t\t\t\tclosed = true;\n\t\t\t\tparser.pos = pos;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tif ( child = parser.read( PARTIAL_READERS ) ) {\n\t\t\t\t\tif ( partials[ child.n ] ) {\n\t\t\t\t\t\tparser.pos = pos;\n\t\t\t\t\t\tparser.error( 'Duplicate partial definition' );\n\t\t\t\t\t}\n\n\t\t\t\t\tcleanup( child.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );\n\n\t\t\t\t\tpartials[ child.n ] = child.f;\n\t\t\t\t\thasPartials = true;\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tif ( child = parser.read( READERS ) ) {\n\t\t\t\t\t\tchildren.push( child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} while ( !closed );\n\n\t\tif ( children.length ) {\n\t\t\telement.f = children;\n\t\t}\n\n\t\tif ( hasPartials ) {\n\t\t\telement.p = partials;\n\t\t}\n\n\t\tparser.elementStack.pop();\n\t}\n\n\tparser.inside = null;\n\n\tif ( parser.sanitizeElements && parser.sanitizeElements.indexOf( lowerCaseName ) !== -1 ) {\n\t\treturn exclude;\n\t}\n\n\treturn element;\n}\n\nfunction canContain ( name$$1, remaining ) {\n\tvar match = /^<([a-zA-Z][a-zA-Z0-9]*)/.exec( remaining );\n\tvar disallowed = disallowedContents[ name$$1 ];\n\n\tif ( !match || !disallowed ) {\n\t\treturn true;\n\t}\n\n\treturn !~disallowed.indexOf( match[1].toLowerCase() );\n}\n\nfunction readAnchorClose ( parser, name$$1 ) {\n\tvar pos = parser.pos;\n\tif ( !parser.matchString( '</' ) ) {\n\t\treturn null;\n\t}\n\n\tparser.matchString( '#' );\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( name$$1 ) ) {\n\t\tparser.pos = pos;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '>' ) ) {\n\t\tparser.pos = pos;\n\t\treturn null;\n\t}\n\n\treturn true;\n}\n\nfunction readText ( parser ) {\n\tvar index, disallowed, barrier;\n\n\tvar remaining = parser.remaining();\n\n\tif ( parser.textOnlyMode ) {\n\t\tdisallowed = parser.tags.map( function (t) { return t.open; } );\n\t\tdisallowed = disallowed.concat( parser.tags.map( function (t) { return '\\\\' + t.open; } ) );\n\n\t\tindex = getLowestIndex( remaining, disallowed );\n\t} else {\n\t\tbarrier = parser.inside ? '</' + parser.inside : '<';\n\n\t\tif ( parser.inside && !parser.interpolate[ parser.inside ] ) {\n\t\t\tindex = remaining.indexOf( barrier );\n\t\t} else {\n\t\t\tdisallowed = parser.tags.map( function (t) { return t.open; } );\n\t\t\tdisallowed = disallowed.concat( parser.tags.map( function (t) { return '\\\\' + t.open; } ) );\n\n\t\t\t// http://developers.whatwg.org/syntax.html#syntax-attributes\n\t\t\tif ( parser.inAttribute === true ) {\n\t\t\t\t// we're inside an unquoted attribute value\n\t\t\t\tdisallowed.push( \""\\\""\"", \""'\"", \""=\"", \""<\"", \"">\"", '`' );\n\t\t\t} else if ( parser.inAttribute ) {\n\t\t\t\t// quoted attribute value\n\t\t\t\tdisallowed.push( parser.inAttribute );\n\t\t\t} else {\n\t\t\t\tdisallowed.push( barrier );\n\t\t\t}\n\n\t\t\tindex = getLowestIndex( remaining, disallowed );\n\t\t}\n\t}\n\n\tif ( !index ) {\n\t\treturn null;\n\t}\n\n\tif ( index === -1 ) {\n\t\tindex = remaining.length;\n\t}\n\n\tparser.pos += index;\n\n\tif ( ( parser.inside && parser.inside !== 'textarea' ) || parser.textOnlyMode ) {\n\t\treturn remaining.substr( 0, index );\n\t} else {\n\t\treturn decodeCharacterReferences( remaining.substr( 0, index ) );\n\t}\n}\n\nvar partialDefinitionSectionPattern = /^\\s*#\\s*partial\\s+/;\n\nfunction readPartialDefinitionSection ( parser ) {\n\tvar child, closed;\n\n\tvar start = parser.pos;\n\n\tvar delimiters = parser.standardDelimiters;\n\n\tif ( !parser.matchString( delimiters[0] ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( partialDefinitionSectionPattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar name = parser.matchPattern( /^[a-zA-Z_$][a-zA-Z_$0-9\\-\\/]*/ );\n\n\tif ( !name ) {\n\t\tparser.error( 'expected legal partial name' );\n\t}\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( delimiters[1] ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (delimiters[1]) + \""'\"") );\n\t}\n\n\tvar content = [];\n\n\tvar open = delimiters[0];\n\tvar close = delimiters[1];\n\n\tdo {\n\t\tif ( child = readClosing( parser, { open: open, close: close }) ) {\n\t\t\tif ( child.r !== 'partial' ) {\n\t\t\t\tparser.error( (\""Expected \"" + open + \""/partial\"" + close) );\n\t\t\t}\n\n\t\t\tclosed = true;\n\t\t}\n\n\t\telse {\n\t\t\tchild = parser.read( READERS );\n\n\t\t\tif ( !child ) {\n\t\t\t\tparser.error( (\""Expected \"" + open + \""/partial\"" + close) );\n\t\t\t}\n\n\t\t\tcontent.push( child );\n\t\t}\n\t} while ( !closed );\n\n\treturn {\n\t\tt: INLINE_PARTIAL,\n\t\tn: name,\n\t\tf: content\n\t};\n}\n\nfunction readTemplate ( parser ) {\n\tvar fragment = [];\n\tvar partials = Object.create( null );\n\tvar hasPartials = false;\n\n\tvar preserveWhitespace = parser.preserveWhitespace;\n\n\twhile ( parser.pos < parser.str.length ) {\n\t\tvar pos = parser.pos;\n\t\tvar item = (void 0), partial = (void 0);\n\n\t\tif ( partial = parser.read( PARTIAL_READERS ) ) {\n\t\t\tif ( partials[ partial.n ] ) {\n\t\t\t\tparser.pos = pos;\n\t\t\t\tparser.error( 'Duplicated partial definition' );\n\t\t\t}\n\n\t\t\tcleanup( partial.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );\n\n\t\t\tpartials[ partial.n ] = partial.f;\n\t\t\thasPartials = true;\n\t\t} else if ( item = parser.read( READERS ) ) {\n\t\t\tfragment.push( item );\n\t\t} else  {\n\t\t\tparser.error( 'Unexpected template content' );\n\t\t}\n\t}\n\n\tvar result = {\n\t\tv: TEMPLATE_VERSION,\n\t\tt: fragment\n\t};\n\n\tif ( hasPartials ) {\n\t\tresult.p = partials;\n\t}\n\n\treturn result;\n}\n\nfunction insertExpressions ( obj, expr ) {\n\n\tObject.keys( obj ).forEach( function (key) {\n\t\tif  ( isExpression( key, obj ) ) { return addTo( obj, expr ); }\n\n\t\tvar ref = obj[ key ];\n\t\tif ( hasChildren( ref ) ) { insertExpressions( ref, expr ); }\n\t});\n}\n\nfunction isExpression( key, obj ) {\n\treturn key === 's' && Array.isArray( obj.r );\n}\n\nfunction addTo( obj, expr ) {\n\tvar s = obj.s;\n\tvar r = obj.r;\n\tif ( !expr[ s ] ) { expr[ s ] = fromExpression( s, r.length ); }\n}\n\nfunction hasChildren( ref ) {\n\treturn Array.isArray( ref ) || isObject( ref );\n}\n\n// See https://github.com/ractivejs/template-spec for information\n// about the Ractive template specification\n\nvar STANDARD_READERS = [ readPartial, readUnescaped, readSection, readInterpolator, readComment ];\nvar TRIPLE_READERS = [ readTriple ];\nvar STATIC_READERS = [ readUnescaped, readSection, readInterpolator ]; // TODO does it make sense to have a static section?\n\nvar READERS = [ readMustache, readHtmlComment, readElement$1, readText ];\nvar PARTIAL_READERS = [ readPartialDefinitionSection ];\n\nvar defaultInterpolate = [ 'script', 'style', 'template' ];\n\nvar StandardParser = Parser.extend({\n\tinit: function init ( str, options ) {\n\t\tvar this$1 = this;\n\n\t\tvar tripleDelimiters = options.tripleDelimiters || [ '{{{', '}}}' ];\n\t\tvar staticDelimiters = options.staticDelimiters || [ '[[', ']]' ];\n\t\tvar staticTripleDelimiters = options.staticTripleDelimiters || [ '[[[', ']]]' ];\n\n\t\tthis.standardDelimiters = options.delimiters || [ '{{', '}}' ];\n\n\t\tthis.tags = [\n\t\t\t{ isStatic: false, isTriple: false, open: this.standardDelimiters[0], close: this.standardDelimiters[1], readers: STANDARD_READERS },\n\t\t\t{ isStatic: false, isTriple: true,  open: tripleDelimiters[0],        close: tripleDelimiters[1],        readers: TRIPLE_READERS },\n\t\t\t{ isStatic: true,  isTriple: false, open: staticDelimiters[0],        close: staticDelimiters[1],        readers: STATIC_READERS },\n\t\t\t{ isStatic: true,  isTriple: true,  open: staticTripleDelimiters[0],  close: staticTripleDelimiters[1],  readers: TRIPLE_READERS }\n\t\t];\n\n\t\tthis.contextLines = options.contextLines || 0;\n\n\t\tthis.sortMustacheTags();\n\n\t\tthis.sectionDepth = 0;\n\t\tthis.elementStack = [];\n\n\t\tthis.interpolate = Object.create( options.interpolate || {} );\n\t\tthis.interpolate.textarea = true;\n\t\tdefaultInterpolate.forEach( function (t) { return this$1.interpolate[ t ] = !options.interpolate || options.interpolate[ t ] !== false; } );\n\n\t\tif ( options.sanitize === true ) {\n\t\t\toptions.sanitize = {\n\t\t\t\t// blacklist from https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/lang/html/html4-elements-whitelist.json\n\t\t\t\telements: 'applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title'.split( ' ' ),\n\t\t\t\teventAttributes: true\n\t\t\t};\n\t\t}\n\n\t\tthis.stripComments = options.stripComments !== false;\n\t\tthis.preserveWhitespace = options.preserveWhitespace;\n\t\tthis.sanitizeElements = options.sanitize && options.sanitize.elements;\n\t\tthis.sanitizeEventAttributes = options.sanitize && options.sanitize.eventAttributes;\n\t\tthis.includeLinePositions = options.includeLinePositions;\n\t\tthis.textOnlyMode = options.textOnlyMode;\n\t\tthis.csp = options.csp;\n\t},\n\n\tpostProcess: function postProcess ( result ) {\n\t\t// special case - empty string\n\t\tif ( !result.length ) {\n\t\t\treturn { t: [], v: TEMPLATE_VERSION };\n\t\t}\n\n\t\tif ( this.sectionDepth > 0 ) {\n\t\t\tthis.error( 'A section was left open' );\n\t\t}\n\n\t\tcleanup( result[0].t, this.stripComments, this.preserveWhitespace, !this.preserveWhitespace, !this.preserveWhitespace );\n\n\t\tif ( this.csp !== false ) {\n\t\t\tvar expr = {};\n\t\t\tinsertExpressions( result[0].t, expr );\n\t\t\tif ( Object.keys( expr ).length ) { result[0].e = expr; }\n\t\t}\n\n\t\treturn result[0];\n\t},\n\n\tconverters: [\n\t\treadTemplate\n\t],\n\n\tsortMustacheTags: function sortMustacheTags () {\n\t\t// Sort in order of descending opening delimiter length (longer first),\n\t\t// to protect against opening delimiters being substrings of each other\n\t\tthis.tags.sort( function ( a, b ) {\n\t\t\treturn b.open.length - a.open.length;\n\t\t});\n\t}\n});\n\nfunction parse$1$1 ( template, options ) {\n\treturn new StandardParser( template, options || {} ).result;\n}\n\nvar parseOptions = [\n\t'delimiters',\n\t'tripleDelimiters',\n\t'staticDelimiters',\n\t'staticTripleDelimiters',\n\t'csp',\n\t'interpolate',\n\t'preserveWhitespace',\n\t'sanitize',\n\t'stripComments',\n\t'contextLines'\n];\n\nvar TEMPLATE_INSTRUCTIONS = \""Either preparse or use a ractive runtime source that includes the parser. \"";\n\nvar COMPUTATION_INSTRUCTIONS = \""Either include a version of Ractive that can parse or convert your computation strings to functions.\"";\n\n\nfunction throwNoParse ( method, error, instructions ) {\n\tif ( !method ) {\n\t\tfatal( (\""Missing Ractive.parse - cannot parse \"" + error + \"". \"" + instructions) );\n\t}\n}\n\nfunction createFunction ( body, length ) {\n\tthrowNoParse( fromExpression, 'new expression function', TEMPLATE_INSTRUCTIONS );\n\treturn fromExpression( body, length );\n}\n\nfunction createFunctionFromString ( str, bindTo ) {\n\tthrowNoParse( fromComputationString, 'compution string \""${str}\""', COMPUTATION_INSTRUCTIONS );\n\treturn fromComputationString( str, bindTo );\n}\n\nvar parser = {\n\n\tfromId: function fromId ( id, options ) {\n\t\tif ( !doc ) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Cannot retrieve template #\"" + id + \"" as Ractive is not running in a browser.\"") );\n\t\t}\n\n\t\tif ( id ) { id = id.replace( /^#/, '' ); }\n\n\t\tvar template;\n\n\t\tif ( !( template = doc.getElementById( id ) )) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Could not find template element with id #\"" + id) );\n\t\t}\n\n\t\tif ( template.tagName.toUpperCase() !== 'SCRIPT' ) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Template element with id #\"" + id + \"", must be a <script> element\"") );\n\t\t}\n\n\t\treturn ( 'textContent' in template ? template.textContent : template.innerHTML );\n\n\t},\n\n\tisParsed: function isParsed ( template) {\n\t\treturn !( typeof template === 'string' );\n\t},\n\n\tgetParseOptions: function getParseOptions ( ractive ) {\n\t\t// Could be Ractive or a Component\n\t\tif ( ractive.defaults ) { ractive = ractive.defaults; }\n\n\t\treturn parseOptions.reduce( function ( val, key ) {\n\t\t\tval[ key ] = ractive[ key ];\n\t\t\treturn val;\n\t\t}, {});\n\t},\n\n\tparse: function parse$1 ( template, options ) {\n\t\tthrowNoParse( parse$1$1, 'template', TEMPLATE_INSTRUCTIONS );\n\t\tvar parsed = parse$1$1( template, options );\n\t\taddFunctions( parsed );\n\t\treturn parsed;\n\t},\n\n\tparseFor: function parseFor( template, ractive ) {\n\t\treturn this.parse( template, this.getParseOptions( ractive ) );\n\t}\n};\n\nvar templateConfigurator = {\n\tname: 'template',\n\n\textend: function extend ( Parent, proto, options ) {\n\t\t// only assign if exists\n\t\tif ( 'template' in options ) {\n\t\t\tvar template = options.template;\n\n\t\t\tif ( typeof template === 'function' ) {\n\t\t\t\tproto.template = template;\n\t\t\t} else {\n\t\t\t\tproto.template = parseTemplate( template, proto );\n\t\t\t}\n\t\t}\n\t},\n\n\tinit: function init ( Parent, ractive, options ) {\n\t\t// TODO because of prototypal inheritance, we might just be able to use\n\t\t// ractive.template, and not bother passing through the Parent object.\n\t\t// At present that breaks the test mocks' expectations\n\t\tvar template = 'template' in options ? options.template : Parent.prototype.template;\n\t\ttemplate = template || { v: TEMPLATE_VERSION, t: [] };\n\n\t\tif ( typeof template === 'function' ) {\n\t\t\tvar fn = template;\n\t\t\ttemplate = getDynamicTemplate( ractive, fn );\n\n\t\t\tractive._config.template = {\n\t\t\t\tfn: fn,\n\t\t\t\tresult: template\n\t\t\t};\n\t\t}\n\n\t\ttemplate = parseTemplate( template, ractive );\n\n\t\t// TODO the naming of this is confusing - ractive.template refers to [...],\n\t\t// but Component.prototype.template refers to {v:1,t:[],p:[]}...\n\t\t// it's unnecessary, because the developer never needs to access\n\t\t// ractive.template\n\t\tractive.template = template.t;\n\n\t\tif ( template.p ) {\n\t\t\textendPartials( ractive.partials, template.p );\n\t\t}\n\t},\n\n\treset: function reset ( ractive ) {\n\t\tvar result = resetValue( ractive );\n\n\t\tif ( result ) {\n\t\t\tvar parsed = parseTemplate( result, ractive );\n\n\t\t\tractive.template = parsed.t;\n\t\t\textendPartials( ractive.partials, parsed.p, true );\n\n\t\t\treturn true;\n\t\t}\n\t}\n};\n\nfunction resetValue ( ractive ) {\n\tvar initial = ractive._config.template;\n\n\t// If this isn't a dynamic template, there's nothing to do\n\tif ( !initial || !initial.fn ) {\n\t\treturn;\n\t}\n\n\tvar result = getDynamicTemplate( ractive, initial.fn );\n\n\t// TODO deep equality check to prevent unnecessary re-rendering\n\t// in the case of already-parsed templates\n\tif ( result !== initial.result ) {\n\t\tinitial.result = result;\n\t\treturn result;\n\t}\n}\n\nfunction getDynamicTemplate ( ractive, fn ) {\n\treturn fn.call( ractive, {\n\t\tfromId: parser.fromId,\n\t\tisParsed: parser.isParsed,\n\t\tparse: function parse ( template, options ) {\n\t\t\tif ( options === void 0 ) options = parser.getParseOptions( ractive );\n\n\t\t\treturn parser.parse( template, options );\n\t\t}\n\t});\n}\n\nfunction parseTemplate ( template, ractive ) {\n\tif ( typeof template === 'string' ) {\n\t\t// parse will validate and add expression functions\n\t\ttemplate = parseAsString( template, ractive );\n\t}\n\telse {\n\t\t// need to validate and add exp for already parsed template\n\t\tvalidate$1( template );\n\t\taddFunctions( template );\n\t}\n\n\treturn template;\n}\n\nfunction parseAsString ( template, ractive ) {\n\t// ID of an element containing the template?\n\tif ( template[0] === '#' ) {\n\t\ttemplate = parser.fromId( template );\n\t}\n\n\treturn parser.parseFor( template, ractive );\n}\n\nfunction validate$1( template ) {\n\n\t// Check that the template even exists\n\tif ( template == undefined ) {\n\t\tthrow new Error( (\""The template cannot be \"" + template + \"".\"") );\n\t}\n\n\t// Check the parsed template has a version at all\n\telse if ( typeof template.v !== 'number' ) {\n\t\tthrow new Error( 'The template parser was passed a non-string template, but the template doesn\\'t have a version.  Make sure you\\'re passing in the template you think you are.' );\n\t}\n\n\t// Check we're using the correct version\n\telse if ( template.v !== TEMPLATE_VERSION ) {\n\t\tthrow new Error( (\""Mismatched template version (expected \"" + TEMPLATE_VERSION + \"", got \"" + (template.v) + \"") Please ensure you are using the latest version of Ractive.js in your build process as well as in your app\"") );\n\t}\n}\n\nfunction extendPartials ( existingPartials, newPartials, overwrite ) {\n\tif ( !newPartials ) { return; }\n\n\t// TODO there's an ambiguity here - we need to overwrite in the `reset()`\n\t// case, but not initially...\n\n\tfor ( var key in newPartials ) {\n\t\tif ( overwrite || !existingPartials.hasOwnProperty( key ) ) {\n\t\t\texistingPartials[ key ] = newPartials[ key ];\n\t\t}\n\t}\n}\n\nvar registryNames = [\n\t'adaptors',\n\t'components',\n\t'computed',\n\t'decorators',\n\t'easing',\n\t'events',\n\t'interpolators',\n\t'partials',\n\t'transitions'\n];\n\nvar Registry = function Registry ( name, useDefaults ) {\n\tthis.name = name;\n\tthis.useDefaults = useDefaults;\n};\n\nRegistry.prototype.extend = function extend ( Parent, proto, options ) {\n\tthis.configure(\n\t\tthis.useDefaults ? Parent.defaults : Parent,\n\t\tthis.useDefaults ? proto : proto.constructor,\n\t\toptions );\n};\n\nRegistry.prototype.init = function init () {\n\t// noop\n};\n\nRegistry.prototype.configure = function configure ( Parent, target, options ) {\n\tvar name = this.name;\n\tvar option = options[ name ];\n\n\tvar registry = Object.create( Parent[name] );\n\n\tfor ( var key in option ) {\n\t\tregistry[ key ] = option[ key ];\n\t}\n\n\ttarget[ name ] = registry;\n};\n\nRegistry.prototype.reset = function reset ( ractive ) {\n\tvar registry = ractive[ this.name ];\n\tvar changed = false;\n\n\tObject.keys( registry ).forEach( function (key) {\n\t\tvar item = registry[ key ];\n\n\t\tif ( item._fn ) {\n\t\t\tif ( item._fn.isOwner ) {\n\t\t\t\tregistry[key] = item._fn;\n\t\t\t} else {\n\t\t\t\tdelete registry[key];\n\t\t\t}\n\t\t\tchanged = true;\n\t\t}\n\t});\n\n\treturn changed;\n};\n\nvar registries = registryNames.map( function (name) { return new Registry( name, name === 'computed' ); } );\n\nfunction wrap$1 ( parent, name, method ) {\n\tif ( !/_super/.test( method ) ) { return method; }\n\n\tfunction wrapper () {\n\t\tvar superMethod = getSuperMethod( wrapper._parent, name );\n\t\tvar hasSuper = '_super' in this;\n\t\tvar oldSuper = this._super;\n\n\t\tthis._super = superMethod;\n\n\t\tvar result = method.apply( this, arguments );\n\n\t\tif ( hasSuper ) {\n\t\t\tthis._super = oldSuper;\n\t\t} else {\n\t\t\tdelete this._super;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\twrapper._parent = parent;\n\twrapper._method = method;\n\n\treturn wrapper;\n}\n\nfunction getSuperMethod ( parent, name ) {\n\tif ( name in parent ) {\n\t\tvar value = parent[ name ];\n\n\t\treturn typeof value === 'function' ?\n\t\t\tvalue :\n\t\t\tfunction () { return value; };\n\t}\n\n\treturn noop;\n}\n\nfunction getMessage( deprecated, correct, isError ) {\n\treturn \""options.\"" + deprecated + \"" has been deprecated in favour of options.\"" + correct + \"".\""\n\t\t+ ( isError ? (\"" You cannot specify both options, please use options.\"" + correct + \"".\"") : '' );\n}\n\nfunction deprecateOption ( options, deprecatedOption, correct ) {\n\tif ( deprecatedOption in options ) {\n\t\tif( !( correct in options ) ) {\n\t\t\twarnIfDebug( getMessage( deprecatedOption, correct ) );\n\t\t\toptions[ correct ] = options[ deprecatedOption ];\n\t\t} else {\n\t\t\tthrow new Error( getMessage( deprecatedOption, correct, true ) );\n\t\t}\n\t}\n}\n\nfunction deprecate ( options ) {\n\tdeprecateOption( options, 'beforeInit', 'onconstruct' );\n\tdeprecateOption( options, 'init', 'onrender' );\n\tdeprecateOption( options, 'complete', 'oncomplete' );\n\tdeprecateOption( options, 'eventDefinitions', 'events' );\n\n\t// Using extend with Component instead of options,\n\t// like Human.extend( Spider ) means adaptors as a registry\n\t// gets copied to options. So we have to check if actually an array\n\tif ( Array.isArray( options.adaptors ) ) {\n\t\tdeprecateOption( options, 'adaptors', 'adapt' );\n\t}\n}\n\nvar custom = {\n\tadapt: adaptConfigurator,\n\tcss: cssConfigurator,\n\tdata: dataConfigurator,\n\ttemplate: templateConfigurator\n};\n\nvar defaultKeys = Object.keys( defaults );\n\nvar isStandardKey = makeObj( defaultKeys.filter( function (key) { return !custom[ key ]; } ) );\n\n// blacklisted keys that we don't double extend\nvar isBlacklisted = makeObj( defaultKeys.concat( registries.map( function (r) { return r.name; } ), [ 'on', 'observe', 'attributes' ] ) );\n\nvar order = [].concat(\n\tdefaultKeys.filter( function (key) { return !registries[ key ] && !custom[ key ]; } ),\n\tregistries,\n\t//custom.data,\n\tcustom.template,\n\tcustom.css\n);\n\nvar config = {\n\textend: function ( Parent, proto, options ) { return configure$1( 'extend', Parent, proto, options ); },\n\n\tinit: function ( Parent, ractive, options ) { return configure$1( 'init', Parent, ractive, options ); },\n\n\treset: function (ractive) {\n\t\treturn order.filter( function (c) {\n\t\t\treturn c.reset && c.reset( ractive );\n\t\t}).map( function (c) { return c.name; } );\n\t},\n\n\t// this defines the order. TODO this isn't used anywhere in the codebase,\n\t// only in the test suite - should get rid of it\n\torder: order\n};\n\nfunction configure$1 ( method, Parent, target, options ) {\n\tdeprecate( options );\n\n\tfor ( var key in options ) {\n\t\tif ( isStandardKey.hasOwnProperty( key ) ) {\n\t\t\tvar value = options[ key ];\n\n\t\t\t// warn the developer if they passed a function and ignore its value\n\n\t\t\t// NOTE: we allow some functions on \""el\"" because we duck type element lists\n\t\t\t// and some libraries or ef'ed-up virtual browsers (phantomJS) return a\n\t\t\t// function object as the result of querySelector methods\n\t\t\tif ( key !== 'el' && typeof value === 'function' ) {\n\t\t\t\twarnIfDebug( (key + \"" is a Ractive option that does not expect a function and will be ignored\""),\n\t\t\t\t\tmethod === 'init' ? target : null );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttarget[ key ] = value;\n\t\t\t}\n\t\t}\n\t}\n\n\t// disallow combination of `append` and `enhance`\n\tif ( options.append && options.enhance ) {\n\t\tthrow new Error( 'Cannot use append and enhance at the same time' );\n\t}\n\n\tregistries.forEach( function (registry) {\n\t\tregistry[ method ]( Parent, target, options );\n\t});\n\n\tadaptConfigurator[ method ]( Parent, target, options );\n\ttemplateConfigurator[ method ]( Parent, target, options );\n\tcssConfigurator[ method ]( Parent, target, options );\n\n\textendOtherMethods( Parent.prototype, target, options );\n}\n\nvar _super = /\\b_super\\b/;\nfunction extendOtherMethods ( parent, target, options ) {\n\tfor ( var key in options ) {\n\t\tif ( !isBlacklisted[ key ] && options.hasOwnProperty( key ) ) {\n\t\t\tvar member = options[ key ];\n\n\t\t\t// if this is a method that overwrites a method, wrap it:\n\t\t\tif ( typeof member === 'function' ) {\n\t\t\t\tif ( key in RactiveProto && !_super.test( member.toString() ) ) {\n\t\t\t\t\twarnIfDebug( (\""Overriding Ractive prototype function '\"" + key + \""' without calling the '\"" + _super + \""' method can be very dangerous.\"") );\n\t\t\t\t}\n\t\t\t\tmember = wrap$1( parent, key, member );\n\t\t\t}\n\n\t\t\ttarget[ key ] = member;\n\t\t}\n\t}\n}\n\nfunction makeObj ( array ) {\n\tvar obj = {};\n\tarray.forEach( function (x) { return obj[x] = true; } );\n\treturn obj;\n}\n\nvar Item = function Item ( options ) {\n\tthis.parentFragment = options.parentFragment;\n\tthis.ractive = options.parentFragment.ractive;\n\n\tthis.template = options.template;\n\tthis.index = options.index;\n\tthis.type = options.template.t;\n\n\tthis.dirty = false;\n};\n\nItem.prototype.bubble = function bubble () {\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\t\tthis.parentFragment.bubble();\n\t}\n};\n\nItem.prototype.destroyed = function destroyed () {\n\tif ( this.fragment ) { this.fragment.destroyed(); }\n};\n\nItem.prototype.find = function find () {\n\treturn null;\n};\n\nItem.prototype.findComponent = function findComponent () {\n\treturn null;\n};\n\nItem.prototype.findNextNode = function findNextNode () {\n\treturn this.parentFragment.findNextNode( this );\n};\n\nItem.prototype.shuffled = function shuffled () {\n\tif ( this.fragment ) { this.fragment.shuffled(); }\n};\n\nItem.prototype.valueOf = function valueOf () {\n\treturn this.toString();\n};\n\nItem.prototype.findAll = noop;\nItem.prototype.findAllComponents = noop;\n\nvar ContainerItem = (function (Item) {\n\tfunction ContainerItem ( options ) {\n\t\tItem.call( this, options );\n\t}\n\n\tif ( Item ) ContainerItem.__proto__ = Item;\n\tContainerItem.prototype = Object.create( Item && Item.prototype );\n\tContainerItem.prototype.constructor = ContainerItem;\n\n\tContainerItem.prototype.detach = function detach () {\n\t\treturn this.fragment ? this.fragment.detach() : createDocumentFragment();\n\t};\n\n\tContainerItem.prototype.find = function find ( selector ) {\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.find( selector );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findAll = function findAll ( selector, query ) {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAll( selector, query );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findComponent = function findComponent ( name ) {\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.findComponent( name );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAllComponents( name, query );\n\t\t}\n\t};\n\n\tContainerItem.prototype.firstNode = function firstNode ( skipParent ) {\n\t\treturn this.fragment && this.fragment.firstNode( skipParent );\n\t};\n\n\tContainerItem.prototype.toString = function toString ( escape ) {\n\t\treturn this.fragment ? this.fragment.toString( escape ) : '';\n\t};\n\n\treturn ContainerItem;\n}(Item));\n\nvar ComputationChild = (function (Model$$1) {\n\tfunction ComputationChild ( parent, key ) {\n\t\tModel$$1.call( this, parent, key );\n\n\t\tthis.isReadonly = !this.root.ractive.syncComputedChildren;\n\t\tthis.dirty = true;\n\t}\n\n\tif ( Model$$1 ) ComputationChild.__proto__ = Model$$1;\n\tComputationChild.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tComputationChild.prototype.constructor = ComputationChild;\n\n\tComputationChild.prototype.applyValue = function applyValue ( value ) {\n\t\tModel$$1.prototype.applyValue.call( this, value );\n\n\t\tif ( !this.isReadonly ) {\n\t\t\tvar source = this.parent;\n\t\t\t// computed models don't have a shuffle method\n\t\t\twhile ( source && source.shuffle ) {\n\t\t\t\tsource = source.parent;\n\t\t\t}\n\n\t\t\tif ( source ) {\n\t\t\t\tsource.dependencies.forEach( mark$1$1 );\n\t\t\t}\n\t\t}\n\t};\n\n\tComputationChild.prototype.get = function get ( shouldCapture ) {\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tvar parentValue = this.parent.get();\n\t\t\tthis.value = parentValue ? parentValue[ this.key ] : undefined;\n\t\t}\n\n\t\treturn this.value;\n\t};\n\n\tComputationChild.prototype.handleChange = function handleChange$1 () {\n\t\tthis.dirty = true;\n\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\tthis.links.forEach( marked );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( handleChange$1$1 );\n\t};\n\n\tComputationChild.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ComputationChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\treturn ComputationChild;\n}(Model));\n\n/* global console */\n/* eslint no-console:\""off\"" */\n\nvar Computation = (function (Model$$1) {\n\tfunction Computation ( viewmodel, signature, key ) {\n\t\tModel$$1.call( this, null, null );\n\n\t\tthis.root = this.parent = viewmodel;\n\t\tthis.signature = signature;\n\n\t\tthis.key = key; // not actually used, but helps with debugging\n\t\tthis.isExpression = key && key[0] === '@';\n\n\t\tthis.isReadonly = !this.signature.setter;\n\n\t\tthis.context = viewmodel.computationContext;\n\n\t\tthis.dependencies = [];\n\n\t\tthis.children = [];\n\t\tthis.childByKey = {};\n\n\t\tthis.deps = [];\n\n\t\tthis.dirty = true;\n\n\t\t// TODO: is there a less hackish way to do this?\n\t\tthis.shuffle = undefined;\n\t}\n\n\tif ( Model$$1 ) Computation.__proto__ = Model$$1;\n\tComputation.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tComputation.prototype.constructor = Computation;\n\n\tComputation.prototype.get = function get ( shouldCapture ) {\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tvar old = this.value;\n\t\t\tthis.value = this.getValue();\n\t\t\tif ( !isEqual( old, this.value ) ) { this.notifyUpstream(); }\n\t\t\tif ( this.wrapper ) { this.newWrapperValue = this.value; }\n\t\t\tthis.adapt();\n\t\t}\n\n\t\t// if capturing, this value needs to be unwrapped because it's for external use\n\t\treturn maybeBind( this, shouldCapture && this.wrapper ? this.wrapperValue : this.value );\n\t};\n\n\tComputation.prototype.getValue = function getValue () {\n\t\tstartCapturing();\n\t\tvar result;\n\n\t\ttry {\n\t\t\tresult = this.signature.getter.call( this.context );\n\t\t} catch ( err ) {\n\t\t\twarnIfDebug( (\""Failed to compute \"" + (this.getKeypath()) + \"": \"" + (err.message || err)) );\n\n\t\t\t// TODO this is all well and good in Chrome, but...\n\t\t\t// ...also, should encapsulate this stuff better, and only\n\t\t\t// show it if Ractive.DEBUG\n\t\t\tif ( hasConsole ) {\n\t\t\t\tif ( console.groupCollapsed ) { console.groupCollapsed( '%cshow details', 'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;' ); }\n\t\t\t\tvar sig = this.signature;\n\t\t\t\tconsole.error( ((err.name) + \"": \"" + (err.message) + \""\\n\\n\"" + (sig.getterString) + (sig.getterUseStack ? '\\n\\n' + err.stack : '')) );\n\t\t\t\tif ( console.groupCollapsed ) { console.groupEnd(); }\n\t\t\t}\n\t\t}\n\n\t\tvar dependencies = stopCapturing();\n\t\tthis.setDependencies( dependencies );\n\n\t\treturn result;\n\t};\n\n\tComputation.prototype.mark = function mark () {\n\t\tthis.handleChange();\n\t};\n\n\tComputation.prototype.rebind = function rebind ( next, previous ) {\n\t\t// computations will grab all of their deps again automagically\n\t\tif ( next !== previous ) { this.handleChange(); }\n\t};\n\n\tComputation.prototype.set = function set ( value ) {\n\t\tif ( this.isReadonly ) {\n\t\t\tthrow new Error( (\""Cannot set read-only computed value '\"" + (this.key) + \""'\"") );\n\t\t}\n\n\t\tthis.signature.setter( value );\n\t\tthis.mark();\n\t};\n\n\tComputation.prototype.setDependencies = function setDependencies ( dependencies ) {\n\t\tvar this$1 = this;\n\n\t\t// unregister any soft dependencies we no longer have\n\t\tvar i = this.dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tvar model = this$1.dependencies[i];\n\t\t\tif ( !~dependencies.indexOf( model ) ) { model.unregister( this$1 ); }\n\t\t}\n\n\t\t// and add any new ones\n\t\ti = dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tvar model$1 = dependencies[i];\n\t\t\tif ( !~this$1.dependencies.indexOf( model$1 ) ) { model$1.register( this$1 ); }\n\t\t}\n\n\t\tthis.dependencies = dependencies;\n\t};\n\n\tComputation.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tvar i = this.dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this$1.dependencies[i] ) { this$1.dependencies[i].unregister( this$1 ); }\n\t\t}\n\t\tif ( this.root.computations[this.key] === this ) { delete this.root.computations[this.key]; }\n\t\tModel$$1.prototype.teardown.call(this);\n\t};\n\n\treturn Computation;\n}(Model));\n\nvar prototype$1 = Computation.prototype;\nvar child = ComputationChild.prototype;\nprototype$1.handleChange = child.handleChange;\nprototype$1.joinKey = child.joinKey;\n\nvar ExpressionProxy = (function (Model$$1) {\n\tfunction ExpressionProxy ( fragment, template ) {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.call( this, fragment.ractive.viewmodel, null );\n\n\t\tthis.fragment = fragment;\n\t\tthis.template = template;\n\n\t\tthis.isReadonly = true;\n\t\tthis.dirty = true;\n\n\t\tthis.fn = getFunction( template.s, template.r.length );\n\n\t\tthis.models = this.template.r.map( function (ref) {\n\t\t\treturn resolveReference( this$1.fragment, ref );\n\t\t});\n\t\tthis.dependencies = [];\n\n\t\tthis.shuffle = undefined;\n\n\t\tthis.bubble();\n\t}\n\n\tif ( Model$$1 ) ExpressionProxy.__proto__ = Model$$1;\n\tExpressionProxy.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tExpressionProxy.prototype.constructor = ExpressionProxy;\n\n\tExpressionProxy.prototype.bubble = function bubble ( actuallyChanged ) {\n\t\tif ( actuallyChanged === void 0 ) actuallyChanged = true;\n\n\t\t// refresh the keypath\n\t\tthis.keypath = undefined;\n\n\t\tif ( actuallyChanged ) {\n\t\t\tthis.handleChange();\n\t\t}\n\t};\n\n\tExpressionProxy.prototype.getKeypath = function getKeypath () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.template ) { return '@undefined'; }\n\t\tif ( !this.keypath ) {\n\t\t\tthis.keypath = '@' + this.template.s.replace( /_(\\d+)/g, function ( match, i ) {\n\t\t\t\tif ( i >= this$1.models.length ) { return match; }\n\n\t\t\t\tvar model = this$1.models[i];\n\t\t\t\treturn model ? model.getKeypath() : '@undefined';\n\t\t\t});\n\t\t}\n\n\t\treturn this.keypath;\n\t};\n\n\tExpressionProxy.prototype.getValue = function getValue () {\n\t\tvar this$1 = this;\n\n\t\tstartCapturing();\n\t\tvar result;\n\n\t\ttry {\n\t\t\tvar params = this.models.map( function (m) { return m ? m.get( true ) : undefined; } );\n\t\t\tresult = this.fn.apply( this.fragment.ractive, params );\n\t\t} catch ( err ) {\n\t\t\twarnIfDebug( (\""Failed to compute \"" + (this.getKeypath()) + \"": \"" + (err.message || err)) );\n\t\t}\n\n\t\tvar dependencies = stopCapturing();\n\t\t// remove missing deps\n\t\tthis.dependencies.filter( function (d) { return !~dependencies.indexOf( d ); } ).forEach( function (d) {\n\t\t\td.unregister( this$1 );\n\t\t\tremoveFromArray$1( this$1.dependencies, d );\n\t\t});\n\t\t// register new deps\n\t\tdependencies.filter( function (d) { return !~this$1.dependencies.indexOf( d ); } ).forEach( function (d) {\n\t\t\td.register( this$1 );\n\t\t\tthis$1.dependencies.push( d );\n\t\t});\n\n\t\treturn result;\n\t};\n\n\tExpressionProxy.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tvar idx = this.models.indexOf( previous );\n\n\t\tif ( ~idx ) {\n\t\t\tnext = rebindMatch( this.template.r[idx], next, previous );\n\t\t\tif ( next !== previous ) {\n\t\t\t\tprevious.unregister( this );\n\t\t\t\tthis.models.splice( idx, 1, next );\n\t\t\t\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\t\t\t}\n\t\t}\n\t\tthis.bubble( !safe );\n\t};\n\n\tExpressionProxy.prototype.retrieve = function retrieve () {\n\t\treturn this.get();\n\t};\n\n\tExpressionProxy.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tthis.unbind();\n\t\tthis.fragment = undefined;\n\t\tif ( this.dependencies ) { this.dependencies.forEach( function (d) { return d.unregister( this$1 ); } ); }\n\t\tModel$$1.prototype.teardown.call(this);\n\t};\n\n\tExpressionProxy.prototype.unregister = function unregister ( dep ) {\n\t\tModel$$1.prototype.unregister.call( this, dep );\n\t\tif ( !this.deps.length ) { this.teardown(); }\n\t};\n\n\treturn ExpressionProxy;\n}(Model));\n\nvar prototype = ExpressionProxy.prototype;\nvar computation = Computation.prototype;\nprototype.get = computation.get;\nprototype.handleChange = computation.handleChange;\nprototype.joinKey = computation.joinKey;\nprototype.mark = computation.mark;\nprototype.unbind = noop;\n\nvar ReferenceExpressionChild = (function (Model$$1) {\n\tfunction ReferenceExpressionChild ( parent, key ) {\n\t\tModel$$1.call ( this, parent, key );\n\t}\n\n\tif ( Model$$1 ) ReferenceExpressionChild.__proto__ = Model$$1;\n\tReferenceExpressionChild.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tReferenceExpressionChild.prototype.constructor = ReferenceExpressionChild;\n\n\tReferenceExpressionChild.prototype.applyValue = function applyValue ( value ) {\n\t\tif ( isEqual( value, this.value ) ) { return; }\n\n\t\tvar parent = this.parent;\n\t\tvar keys = [ this.key ];\n\t\twhile ( parent ) {\n\t\t\tif ( parent.base ) {\n\t\t\t\tvar target = parent.model.joinAll( keys );\n\t\t\t\ttarget.applyValue( value );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tkeys.unshift( parent.key );\n\n\t\t\tparent = parent.parent;\n\t\t}\n\t};\n\n\tReferenceExpressionChild.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ReferenceExpressionChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tReferenceExpressionChild.prototype.retrieve = function retrieve () {\n\t\tvar parent = this.parent.get();\n\t\treturn parent && parent[ this.key ];\n\t};\n\n\treturn ReferenceExpressionChild;\n}(Model));\n\nvar ReferenceExpressionProxy = (function (Model$$1) {\n\tfunction ReferenceExpressionProxy ( fragment, template ) {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.call( this, null, null );\n\t\tthis.dirty = true;\n\t\tthis.root = fragment.ractive.viewmodel;\n\t\tthis.template = template;\n\n\t\tthis.base = resolve$1( fragment, template );\n\n\t\tvar intermediary = this.intermediary = {\n\t\t\thandleChange: function () { return this$1.handleChange(); },\n\t\t\trebind: function ( next, previous ) {\n\t\t\t\tif ( previous === this$1.base ) {\n\t\t\t\t\tnext = rebindMatch( template, next, previous );\n\t\t\t\t\tif ( next !== this$1.base ) {\n\t\t\t\t\t\tthis$1.base.unregister( intermediary );\n\t\t\t\t\t\tthis$1.base = next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar idx = this$1.members.indexOf( previous );\n\t\t\t\t\tif ( ~idx ) {\n\t\t\t\t\t\t// only direct references will rebind... expressions handle themselves\n\t\t\t\t\t\tnext = rebindMatch( template.m[idx].n, next, previous );\n\t\t\t\t\t\tif ( next !== this$1.members[idx] ) {\n\t\t\t\t\t\t\tthis$1.members.splice( idx, 1, next );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( next !== previous ) { previous.unregister( intermediary ); }\n\t\t\t\tif ( next ) { next.addShuffleTask( function () { return next.register( intermediary ); } ); }\n\n\t\t\t\tthis$1.bubble();\n\t\t\t}\n\t\t};\n\n\t\tthis.members = template.m.map( function ( template ) {\n\t\t\tif ( typeof template === 'string' ) {\n\t\t\t\treturn { get: function () { return template; } };\n\t\t\t}\n\n\t\t\tvar model;\n\n\t\t\tif ( template.t === REFERENCE ) {\n\t\t\t\tmodel = resolveReference( fragment, template.n );\n\t\t\t\tmodel.register( intermediary );\n\n\t\t\t\treturn model;\n\t\t\t}\n\n\t\t\tmodel = new ExpressionProxy( fragment, template );\n\t\t\tmodel.register( intermediary );\n\t\t\treturn model;\n\t\t});\n\n\t\tthis.bubble();\n\t}\n\n\tif ( Model$$1 ) ReferenceExpressionProxy.__proto__ = Model$$1;\n\tReferenceExpressionProxy.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tReferenceExpressionProxy.prototype.constructor = ReferenceExpressionProxy;\n\n\tReferenceExpressionProxy.prototype.bubble = function bubble () {\n\t\tif ( !this.base ) { return; }\n\t\tif ( !this.dirty ) { this.handleChange(); }\n\t};\n\n\tReferenceExpressionProxy.prototype.get = function get ( shouldCapture ) {\n\t\tif ( this.dirty ) {\n\t\t\tthis.bubble();\n\n\t\t\tvar keys = this.members.map( function (m) { return escapeKey( String( m.get() ) ); } );\n\t\t\tvar model = this.base.joinAll( keys );\n\n\t\t\tif ( model !== this.model ) {\n\t\t\t\tif ( this.model ) {\n\t\t\t\t\tthis.model.unregister( this );\n\t\t\t\t\tthis.model.unregisterTwowayBinding( this );\n\t\t\t\t}\n\n\t\t\t\tthis.model = model;\n\t\t\t\tthis.parent = model.parent;\n\t\t\t\tthis.model.register( this );\n\t\t\t\tthis.model.registerTwowayBinding( this );\n\n\t\t\t\tif ( this.keypathModel ) { this.keypathModel.handleChange(); }\n\t\t\t}\n\n\t\t\tthis.value = this.model.get( shouldCapture );\n\t\t\tthis.dirty = false;\n\t\t\tthis.mark();\n\t\t\treturn this.value;\n\t\t} else {\n\t\t\treturn this.model ? this.model.get( shouldCapture ) : undefined;\n\t\t}\n\t};\n\n\t// indirect two-way bindings\n\tReferenceExpressionProxy.prototype.getValue = function getValue () {\n\t\tvar this$1 = this;\n\n\t\tthis.value = this.model ? this.model.get() : undefined;\n\n\t\tvar i = this.bindings.length;\n\t\twhile ( i-- ) {\n\t\t\tvar value = this$1.bindings[i].getValue();\n\t\t\tif ( value !== this$1.value ) { return value; }\n\t\t}\n\n\t\t// check one-way bindings\n\t\tvar oneway = findBoundValue( this.deps );\n\t\tif ( oneway ) { return oneway.value; }\n\n\t\treturn this.value;\n\t};\n\n\tReferenceExpressionProxy.prototype.getKeypath = function getKeypath () {\n\t\treturn this.model ? this.model.getKeypath() : '@undefined';\n\t};\n\n\tReferenceExpressionProxy.prototype.handleChange = function handleChange$1 () {\n\t\tthis.dirty = true;\n\t\tthis.mark();\n\t};\n\n\tReferenceExpressionProxy.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ReferenceExpressionChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tReferenceExpressionProxy.prototype.mark = function mark$1 () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.deps.forEach( handleChange$1$1 );\n\t\t}\n\n\t\tthis.links.forEach( marked );\n\t\tthis.children.forEach( mark$1$1 );\n\t};\n\n\tReferenceExpressionProxy.prototype.retrieve = function retrieve () {\n\t\treturn this.value;\n\t};\n\n\tReferenceExpressionProxy.prototype.set = function set ( value ) {\n\t\tthis.model.set( value );\n\t};\n\n\tReferenceExpressionProxy.prototype.unbind = function unbind () {\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t\tthis.model.unregisterTwowayBinding( this );\n\t\t}\n\t};\n\n\treturn ReferenceExpressionProxy;\n}(Model));\n\nReferenceExpressionProxy.prototype.rebind = noop;\n\nfunction resolve$1 ( fragment, template ) {\n\tif ( template.r ) {\n\t\treturn resolveReference( fragment, template.r );\n\t}\n\n\telse if ( template.x ) {\n\t\treturn new ExpressionProxy( fragment, template.x );\n\t}\n\n\telse if ( template.rx ) {\n\t\treturn new ReferenceExpressionProxy( fragment, template.rx );\n\t}\n}\n\nfunction resolveAliases( aliases, fragment ) {\n\tvar resolved = {};\n\n\tfor ( var i = 0; i < aliases.length; i++ ) {\n\t\tresolved[ aliases[i].n ] = resolve$1( fragment, aliases[i].x );\n\t}\n\n\treturn resolved;\n}\n\nvar Alias = (function (ContainerItem$$1) {\n\tfunction Alias ( options ) {\n\t\tContainerItem$$1.call( this, options );\n\n\t\tthis.fragment = null;\n\t}\n\n\tif ( ContainerItem$$1 ) Alias.__proto__ = ContainerItem$$1;\n\tAlias.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tAlias.prototype.constructor = Alias;\n\n\tAlias.prototype.bind = function bind () {\n\t\tthis.fragment = new Fragment({\n\t\t\towner: this,\n\t\t\ttemplate: this.template.f\n\t\t});\n\n\t\tthis.fragment.aliases = resolveAliases( this.template.z, this.parentFragment );\n\t\tthis.fragment.bind();\n\t};\n\n\tAlias.prototype.render = function render ( target ) {\n\t\tthis.rendered = true;\n\t\tif ( this.fragment ) { this.fragment.render( target ); }\n\t};\n\n\tAlias.prototype.unbind = function unbind () {\n\t\tthis.fragment.aliases = {};\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tAlias.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }\n\t\tthis.rendered = false;\n\t};\n\n\tAlias.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tthis.fragment.update();\n\t\t}\n\t};\n\n\treturn Alias;\n}(ContainerItem));\n\nfunction findElement( start, orComponent, name ) {\n\tif ( orComponent === void 0 ) orComponent = true;\n\n\twhile ( start && ( start.type !== ELEMENT || ( name && start.name !== name ) ) && ( !orComponent || ( start.type !== COMPONENT && start.type !== ANCHOR ) ) ) {\n\t\t// start is a fragment - look at the owner\n\t\tif ( start.owner ) { start = start.owner; }\n\t\t// start is a component or yielder - look at the container\n\t\telse if ( start.component ) { start = start.containerFragment || start.component.parentFragment; }\n\t\t// start is an item - look at the parent\n\t\telse if ( start.parent ) { start = start.parent; }\n\t\t// start is an item without a parent - look at the parent fragment\n\t\telse if ( start.parentFragment ) { start = start.parentFragment; }\n\n\t\telse { start = undefined; }\n\t}\n\n\treturn start;\n}\n\nvar space = /\\s+/;\n\nfunction readStyle ( css ) {\n\tif ( typeof css !== 'string' ) { return {}; }\n\n\treturn cleanCss( css, function ( css, reconstruct ) {\n\t\treturn css.split( ';' )\n\t\t\t.filter( function (rule) { return !!rule.trim(); } )\n\t\t\t.map( reconstruct )\n\t\t\t.reduce(function ( rules, rule ) {\n\t\t\t\tvar i = rule.indexOf(':');\n\t\t\t\tvar name = rule.substr( 0, i ).trim();\n\t\t\t\trules[ name ] = rule.substr( i + 1 ).trim();\n\t\t\t\treturn rules;\n\t\t\t}, {});\n\t});\n}\n\nfunction readClass ( str ) {\n\tvar list = str.split( space );\n\n  // remove any empty entries\n\tvar i = list.length;\n\twhile ( i-- ) {\n\t\tif ( !list[i] ) { list.splice( i, 1 ); }\n\t}\n\n\treturn list;\n}\n\nvar hyphenateCamel = function ( camelCaseStr ) {\n\treturn camelCaseStr.replace( /([A-Z])/g, function ( match, $1 ) {\n\t\treturn '-' + $1.toLowerCase();\n\t});\n};\n\nvar textTypes = [ undefined, 'text', 'search', 'url', 'email', 'hidden', 'password', 'search', 'reset', 'submit' ];\n\nfunction getUpdateDelegate ( attribute ) {\n\tvar element = attribute.element;\n\tvar name = attribute.name;\n\n\tif ( name === 'value' ) {\n\t\tif ( attribute.interpolator ) { attribute.interpolator.bound = true; }\n\n\t\t// special case - selects\n\t\tif ( element.name === 'select' && name === 'value' ) {\n\t\t\treturn element.getAttribute( 'multiple' ) ? updateMultipleSelectValue : updateSelectValue;\n\t\t}\n\n\t\tif ( element.name === 'textarea' ) { return updateStringValue; }\n\n\t\t// special case - contenteditable\n\t\tif ( element.getAttribute( 'contenteditable' ) != null ) { return updateContentEditableValue; }\n\n\t\t// special case - <input>\n\t\tif ( element.name === 'input' ) {\n\t\t\tvar type = element.getAttribute( 'type' );\n\n\t\t\t// type='file' value='{{fileList}}'>\n\t\t\tif ( type === 'file' ) { return noop; } // read-only\n\n\t\t\t// type='radio' name='{{twoway}}'\n\t\t\tif ( type === 'radio' && element.binding && element.binding.attribute.name === 'name' ) { return updateRadioValue; }\n\n\t\t\tif ( ~textTypes.indexOf( type ) ) { return updateStringValue; }\n\t\t}\n\n\t\treturn updateValue;\n\t}\n\n\tvar node = element.node;\n\n\t// special case - <input type='radio' name='{{twoway}}' value='foo'>\n\tif ( attribute.isTwoway && name === 'name' ) {\n\t\tif ( node.type === 'radio' ) { return updateRadioName; }\n\t\tif ( node.type === 'checkbox' ) { return updateCheckboxName; }\n\t}\n\n\tif ( name === 'style' ) { return updateStyleAttribute; }\n\n\tif ( name.indexOf( 'style-' ) === 0 ) { return updateInlineStyle; }\n\n\t// special case - class names. IE fucks things up, again\n\tif ( name === 'class' && ( !node.namespaceURI || node.namespaceURI === html ) ) { return updateClassName; }\n\n\tif ( name.indexOf( 'class-' ) === 0 ) { return updateInlineClass; }\n\n\tif ( attribute.isBoolean ) {\n\t\tvar type$1 = element.getAttribute( 'type' );\n\t\tif ( attribute.interpolator && name === 'checked' && ( type$1 === 'checkbox' || type$1 === 'radio' ) ) { attribute.interpolator.bound = true; }\n\t\treturn updateBoolean;\n\t}\n\n\tif ( attribute.namespace && attribute.namespace !== attribute.node.namespaceURI ) { return updateNamespacedAttribute; }\n\n\treturn updateAttribute;\n}\n\nfunction updateMultipleSelectValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !Array.isArray( value ) ) { value = [ value ]; }\n\n\tvar options = this.node.options;\n\tvar i = options.length;\n\n\tif ( reset ) {\n\t\twhile ( i-- ) { options[i].selected = false; }\n\t} else {\n\t\twhile ( i-- ) {\n\t\t\tvar option = options[i];\n\t\t\tvar optionValue = option._ractive ?\n\t\t\t\toption._ractive.value :\n\t\t\t\toption.value; // options inserted via a triple don't have _ractive\n\n\t\t\toption.selected = arrayContains$1( value, optionValue );\n\t\t}\n\t}\n}\n\nfunction updateSelectValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !this.locked ) { // TODO is locked still a thing?\n\t\tthis.node._ractive.value = value;\n\n\t\tvar options = this.node.options;\n\t\tvar i = options.length;\n\t\tvar wasSelected = false;\n\n\t\tif ( reset ) {\n\t\t\twhile ( i-- ) { options[i].selected = false; }\n\t\t} else {\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar option = options[i];\n\t\t\t\tvar optionValue = option._ractive ?\n\t\t\t\t\toption._ractive.value :\n\t\t\t\t\toption.value; // options inserted via a triple don't have _ractive\n\t\t\t\tif ( option.disabled && option.selected ) { wasSelected = true; }\n\n\t\t\t\tif ( optionValue == value ) { // double equals as we may be comparing numbers with strings\n\t\t\t\t\toption.selected = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !wasSelected ) { this.node.selectedIndex = -1; }\n\t}\n}\n\n\nfunction updateContentEditableValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !this.locked ) {\n\t\tif ( reset ) { this.node.innerHTML = ''; }\n\t\telse { this.node.innerHTML = value === undefined ? '' : value; }\n\t}\n}\n\nfunction updateRadioValue ( reset ) {\n\tvar node = this.node;\n\tvar wasChecked = node.checked;\n\n\tvar value = this.getValue();\n\n\tif ( reset ) { return node.checked = false; }\n\n\t//node.value = this.element.getAttribute( 'value' );\n\tnode.value = this.node._ractive.value = value;\n\tnode.checked = this.element.compare( value, this.element.getAttribute( 'name' ) );\n\n\t// This is a special case - if the input was checked, and the value\n\t// changed so that it's no longer checked, the twoway binding is\n\t// most likely out of date. To fix it we have to jump through some\n\t// hoops... this is a little kludgy but it works\n\tif ( wasChecked && !node.checked && this.element.binding && this.element.binding.rendered ) {\n\t\tthis.element.binding.group.model.set( this.element.binding.group.getValue() );\n\t}\n}\n\nfunction updateValue ( reset ) {\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tthis.node.removeAttribute( 'value' );\n\t\t\tthis.node.value = this.node._ractive.value = null;\n\t\t} else {\n\t\t\tvar value = this.getValue();\n\n\t\t\tthis.node.value = this.node._ractive.value = value;\n\t\t\tthis.node.setAttribute( 'value', value );\n\t\t}\n\t}\n}\n\nfunction updateStringValue ( reset ) {\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tthis.node._ractive.value = '';\n\t\t\tthis.node.removeAttribute( 'value' );\n\t\t} else {\n\t\t\tvar value = this.getValue();\n\n\t\t\tthis.node._ractive.value = value;\n\n\t\t\tthis.node.value = safeToStringValue( value );\n\t\t\tthis.node.setAttribute( 'value', safeToStringValue( value ) );\n\t\t}\n\t}\n}\n\nfunction updateRadioName ( reset ) {\n\tif ( reset ) { this.node.checked = false; }\n\telse { this.node.checked = this.element.compare( this.getValue(), this.element.binding.getValue() ); }\n}\n\nfunction updateCheckboxName ( reset ) {\n\tvar ref = this;\n\tvar element = ref.element;\n\tvar node = ref.node;\n\tvar binding = element.binding;\n\n\tvar value = this.getValue();\n\tvar valueAttribute = element.getAttribute( 'value' );\n\n\tif ( reset ) {\n\t\t// TODO: WAT?\n\t}\n\n\tif ( !Array.isArray( value ) ) {\n\t\tbinding.isChecked = node.checked = element.compare( value, valueAttribute );\n\t} else {\n\t\tvar i = value.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( element.compare ( valueAttribute, value[i] ) ) {\n\t\t\t\tbinding.isChecked = node.checked = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tbinding.isChecked = node.checked = false;\n\t}\n}\n\nfunction updateStyleAttribute ( reset ) {\n\tvar props = reset ? {} : readStyle( this.getValue() || '' );\n\tvar style = this.node.style;\n\tvar keys = Object.keys( props );\n\tvar prev = this.previous || [];\n\n\tvar i = 0;\n\twhile ( i < keys.length ) {\n\t\tif ( keys[i] in style ) {\n\t\t\tvar safe = props[ keys[i] ].replace( '!important', '' );\n\t\t\tstyle.setProperty( keys[i], safe, safe.length !== props[ keys[i] ].length ? 'important' : '' );\n\t\t}\n\t\ti++;\n\t}\n\n\t// remove now-missing attrs\n\ti = prev.length;\n\twhile ( i-- ) {\n\t\tif ( !~keys.indexOf( prev[i] ) && prev[i] in style ) { style.setProperty( prev[i], '', '' ); }\n\t}\n\n\tthis.previous = keys;\n}\n\nfunction updateInlineStyle ( reset ) {\n\tif ( !this.style ) {\n\t\tthis.style = hyphenateCamel( this.name.substr( 6 ) );\n\t}\n\n\tvar value = reset ? '' : safeToStringValue( this.getValue() );\n\tvar safe = value.replace( '!important', '' );\n\tthis.node.style.setProperty( this.style, safe, safe.length !== value.length ? 'important' : '' );\n}\n\nfunction updateClassName ( reset ) {\n\tvar value = reset ? [] : readClass( safeToStringValue( this.getValue() ) );\n\tvar attr = readClass( this.node.className );\n\tvar prev = this.previous || attr.slice( 0 );\n\n\tvar i = 0;\n\twhile ( i < value.length ) {\n\t\tif ( !~attr.indexOf( value[i] ) ) { attr.push( value[i] ); }\n\t\ti++;\n\t}\n\n\t// remove now-missing classes\n\ti = prev.length;\n\twhile ( i-- ) {\n\t\tif ( !~value.indexOf( prev[i] ) ) {\n\t\t\tvar idx = attr.indexOf( prev[i] );\n\t\t\tif ( ~idx ) { attr.splice( idx, 1 ); }\n\t\t}\n\t}\n\n\tvar className = attr.join( ' ' );\n\n\tif ( className !== this.node.className ) {\n\t\tthis.node.className = className;\n\t}\n\n\tthis.previous = value;\n}\n\nfunction updateInlineClass ( reset ) {\n\tvar name = this.name.substr( 6 );\n\tvar attr = readClass( this.node.className );\n\tvar value = reset ? false : this.getValue();\n\n\tif ( !this.inlineClass ) { this.inlineClass = name; }\n\n\tif ( value && !~attr.indexOf( name ) ) { attr.push( name ); }\n\telse if ( !value && ~attr.indexOf( name ) ) { attr.splice( attr.indexOf( name ), 1 ); }\n\n\tthis.node.className = attr.join( ' ' );\n}\n\nfunction updateBoolean ( reset ) {\n\t// with two-way binding, only update if the change wasn't initiated by the user\n\t// otherwise the cursor will often be sent to the wrong place\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tif ( this.useProperty ) { this.node[ this.propertyName ] = false; }\n\t\t\tthis.node.removeAttribute( this.propertyName );\n\t\t} else {\n\t\t\tif ( this.useProperty ) {\n\t\t\t\tthis.node[ this.propertyName ] = this.getValue();\n\t\t\t} else {\n\t\t\t\tif ( this.getValue() ) {\n\t\t\t\t\tthis.node.setAttribute( this.propertyName, '' );\n\t\t\t\t} else {\n\t\t\t\t\tthis.node.removeAttribute( this.propertyName );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction updateAttribute ( reset ) {\n\tif ( reset ) { this.node.removeAttribute( this.name ); }\n\telse { this.node.setAttribute( this.name, safeToStringValue( this.getString() ) ); }\n}\n\nfunction updateNamespacedAttribute ( reset ) {\n\tif ( reset ) { this.node.removeAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ) ); }\n\telse { this.node.setAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ), safeToStringValue( this.getString() ) ); }\n}\n\nvar propertyNames = {\n\t'accept-charset': 'acceptCharset',\n\taccesskey: 'accessKey',\n\tbgcolor: 'bgColor',\n\t'class': 'className',\n\tcodebase: 'codeBase',\n\tcolspan: 'colSpan',\n\tcontenteditable: 'contentEditable',\n\tdatetime: 'dateTime',\n\tdirname: 'dirName',\n\t'for': 'htmlFor',\n\t'http-equiv': 'httpEquiv',\n\tismap: 'isMap',\n\tmaxlength: 'maxLength',\n\tnovalidate: 'noValidate',\n\tpubdate: 'pubDate',\n\treadonly: 'readOnly',\n\trowspan: 'rowSpan',\n\ttabindex: 'tabIndex',\n\tusemap: 'useMap'\n};\n\nvar div$1 = doc ? createElement( 'div' ) : null;\n\nvar attributes = false;\nfunction inAttributes() { return attributes; }\nfunction doInAttributes( fn ) {\n\tattributes = true;\n\tfn();\n\tattributes = false;\n}\n\nvar ConditionalAttribute = (function (Item$$1) {\n\tfunction ConditionalAttribute ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.attributes = [];\n\n\t\tthis.owner = options.owner;\n\n\t\tthis.fragment = new Fragment({\n\t\t\tractive: this.ractive,\n\t\t\towner: this,\n\t\t\ttemplate: this.template\n\t\t});\n\t\t// this fragment can't participate in node-y things\n\t\tthis.fragment.findNextNode = noop;\n\n\t\tthis.dirty = false;\n\t}\n\n\tif ( Item$$1 ) ConditionalAttribute.__proto__ = Item$$1;\n\tConditionalAttribute.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tConditionalAttribute.prototype.constructor = ConditionalAttribute;\n\n\tConditionalAttribute.prototype.bind = function bind () {\n\t\tthis.fragment.bind();\n\t};\n\n\tConditionalAttribute.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.owner.bubble();\n\t\t}\n\t};\n\n\tConditionalAttribute.prototype.render = function render () {\n\t\tthis.node = this.owner.node;\n\t\tif ( this.node ) {\n\t\t\tthis.isSvg = this.node.namespaceURI === svg$1;\n\t\t}\n\n\t\tattributes = true;\n\t\tif ( !this.rendered ) { this.fragment.render(); }\n\n\t\tthis.rendered = true;\n\t\tthis.dirty = true; // TODO this seems hacky, but necessary for tests to pass in browser AND node.js\n\t\tthis.update();\n\t\tattributes = false;\n\t};\n\n\tConditionalAttribute.prototype.toString = function toString () {\n\t\treturn this.fragment.toString();\n\t};\n\n\tConditionalAttribute.prototype.unbind = function unbind () {\n\t\tthis.fragment.unbind();\n\t};\n\n\tConditionalAttribute.prototype.unrender = function unrender () {\n\t\tthis.rendered = false;\n\t\tthis.fragment.unrender();\n\t};\n\n\tConditionalAttribute.prototype.update = function update () {\n\t\tvar this$1 = this;\n\n\t\tvar str;\n\t\tvar attrs;\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tvar current = attributes;\n\t\t\tattributes = true;\n\t\t\tthis.fragment.update();\n\t\t\tattributes = current || false;\n\n\t\t\tif ( this.rendered && this.node ) {\n\t\t\t\tstr = this.fragment.toString();\n\t\t\t\tattrs = parseAttributes( str, this.isSvg );\n\n\t\t\t\t// any attributes that previously existed but no longer do\n\t\t\t\t// must be removed\n\t\t\t\tthis.attributes.filter( function (a) { return notIn( attrs, a ); } ).forEach( function (a) {\n\t\t\t\t\tthis$1.node.removeAttribute( a.name );\n\t\t\t\t});\n\n\t\t\t\tattrs.forEach( function (a) {\n\t\t\t\t\tthis$1.node.setAttribute( a.name, a.value );\n\t\t\t\t});\n\n\t\t\t\tthis.attributes = attrs;\n\t\t\t}\n\t\t}\n\t};\n\n\treturn ConditionalAttribute;\n}(Item));\n\nfunction parseAttributes ( str, isSvg ) {\n\tvar tagName = isSvg ? 'svg' : 'div';\n\treturn str\n\t\t? (div$1.innerHTML = \""<\"" + tagName + \"" \"" + str + \""></\"" + tagName + \"">\"") &&\n\t\t\ttoArray(div$1.childNodes[0].attributes)\n\t\t: [];\n}\n\nfunction notIn ( haystack, needle ) {\n\tvar i = haystack.length;\n\n\twhile ( i-- ) {\n\t\tif ( haystack[i].name === needle.name ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction lookupNamespace ( node, prefix ) {\n\tvar qualified = \""xmlns:\"" + prefix;\n\n\twhile ( node ) {\n\t\tif ( node.hasAttribute && node.hasAttribute( qualified ) ) { return node.getAttribute( qualified ); }\n\t\tnode = node.parentNode;\n\t}\n\n\treturn namespaces[ prefix ];\n}\n\nvar Attribute = (function (Item$$1) {\n\tfunction Attribute ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.name = options.template.n;\n\t\tthis.namespace = null;\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || options.element || findElement( options.parentFragment );\n\t\tthis.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.parentFragment ) );\n\t\tthis.parentFragment = options.parentFragment; // shared\n\t\tthis.ractive = this.parentFragment.ractive;\n\n\t\tthis.rendered = false;\n\t\tthis.updateDelegate = null;\n\t\tthis.fragment = null;\n\n\t\tthis.element.attributeByName[ this.name ] = this;\n\n\t\tif ( !Array.isArray( options.template.f ) ) {\n\t\t\tthis.value = options.template.f;\n\t\t\tif ( this.value === 0 ) {\n\t\t\t\tthis.value = '';\n\t\t\t}\n\t\t} else {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\towner: this,\n\t\t\t\ttemplate: options.template.f\n\t\t\t});\n\t\t}\n\n\t\tthis.interpolator = this.fragment &&\n\t\t\tthis.fragment.items.length === 1 &&\n\t\t\tthis.fragment.items[0].type === INTERPOLATOR &&\n\t\t\tthis.fragment.items[0];\n\n\t\tif ( this.interpolator ) { this.interpolator.owner = this; }\n\t}\n\n\tif ( Item$$1 ) Attribute.__proto__ = Item$$1;\n\tAttribute.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tAttribute.prototype.constructor = Attribute;\n\n\tAttribute.prototype.bind = function bind () {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.bind();\n\t\t}\n\t};\n\n\tAttribute.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.parentFragment.bubble();\n\t\t\tthis.element.bubble();\n\t\t\tthis.dirty = true;\n\t\t}\n\t};\n\n\tAttribute.prototype.getString = function getString () {\n\t\treturn this.fragment ?\n\t\t\tthis.fragment.toString() :\n\t\t\tthis.value != null ? '' + this.value : '';\n\t};\n\n\t// TODO could getValue ever be called for a static attribute,\n\t// or can we assume that this.fragment exists?\n\tAttribute.prototype.getValue = function getValue () {\n\t\treturn this.fragment ? this.fragment.valueOf() : booleanAttributes.test( this.name ) ? true : this.value;\n\t};\n\n\tAttribute.prototype.render = function render () {\n\t\tvar node = this.element.node;\n\t\tthis.node = node;\n\n\t\t// should we use direct property access, or setAttribute?\n\t\tif ( !node.namespaceURI || node.namespaceURI === namespaces.html ) {\n\t\t\tthis.propertyName = propertyNames[ this.name ] || this.name;\n\n\t\t\tif ( node[ this.propertyName ] !== undefined ) {\n\t\t\t\tthis.useProperty = true;\n\t\t\t}\n\n\t\t\t// is attribute a boolean attribute or 'value'? If so we're better off doing e.g.\n\t\t\t// node.selected = true rather than node.setAttribute( 'selected', '' )\n\t\t\tif ( booleanAttributes.test( this.name ) || this.isTwoway ) {\n\t\t\t\tthis.isBoolean = true;\n\t\t\t}\n\n\t\t\tif ( this.propertyName === 'value' ) {\n\t\t\t\tnode._ractive.value = this.value;\n\t\t\t}\n\t\t}\n\n\t\tif ( node.namespaceURI ) {\n\t\t\tvar index = this.name.indexOf( ':' );\n\t\t\tif ( index !== -1 ) {\n\t\t\t\tthis.namespace = lookupNamespace( node, this.name.slice( 0, index ) );\n\t\t\t} else {\n\t\t\t\tthis.namespace = node.namespaceURI;\n\t\t\t}\n\t\t}\n\n\t\tthis.rendered = true;\n\t\tthis.updateDelegate = getUpdateDelegate( this );\n\t\tthis.updateDelegate();\n\t};\n\n\tAttribute.prototype.toString = function toString () {\n\t\tif ( inAttributes() ) { return ''; }\n\n\t\tvar value = this.getValue();\n\n\t\t// Special case - select and textarea values (should not be stringified)\n\t\tif ( this.name === 'value' && ( this.element.getAttribute( 'contenteditable' ) !== undefined || ( this.element.name === 'select' || this.element.name === 'textarea' ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Special case – bound radio `name` attributes\n\t\tif ( this.name === 'name' && this.element.name === 'input' && this.interpolator && this.element.getAttribute( 'type' ) === 'radio' ) {\n\t\t\treturn (\""name=\\\""{{\"" + (this.interpolator.model.getKeypath()) + \""}}\\\""\"");\n\t\t}\n\n\t\t// Special case - style and class attributes and directives\n\t\tif ( this.owner === this.element && ( this.name === 'style' || this.name === 'class' || this.style || this.inlineClass ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !this.rendered && this.owner === this.element && ( !this.name.indexOf( 'style-' ) || !this.name.indexOf( 'class-' ) ) ) {\n\t\t\tif ( !this.name.indexOf( 'style-' ) ) {\n\t\t\t\tthis.style = hyphenateCamel( this.name.substr( 6 ) );\n\t\t\t} else {\n\t\t\t\tthis.inlineClass = this.name.substr( 6 );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( booleanAttributes.test( this.name ) ) { return value ? this.name : ''; }\n\t\tif ( value == null ) { return ''; }\n\n\t\tvar str = safeAttributeString( this.getString() );\n\t\treturn str ?\n\t\t\t((this.name) + \""=\\\""\"" + str + \""\\\""\"") :\n\t\t\tthis.name;\n\t};\n\n\tAttribute.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tAttribute.prototype.unrender = function unrender () {\n\t\tthis.updateDelegate( true );\n\n\t\tthis.rendered = false;\n\t};\n\n\tAttribute.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tif ( this.rendered ) { this.updateDelegate(); }\n\t\t\tif ( this.isTwoway && !this.locked ) {\n\t\t\t\tthis.interpolator.twowayBinding.lastVal( true, this.interpolator.model.get() );\n\t\t\t}\n\t\t}\n\t};\n\n\treturn Attribute;\n}(Item));\n\nvar BindingFlag = (function (Item$$1) {\n\tfunction BindingFlag ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\t\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\t\tthis.flag = options.template.v === 'l' ? 'lazy' : 'twoway';\n\n\t\tif ( this.element.type === ELEMENT ) {\n\t\t\tif ( Array.isArray( options.template.f ) ) {\n\t\t\t\tthis.fragment = new Fragment({\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: options.template.f\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.interpolator = this.fragment &&\n\t\t\t\t\t\t\t\tthis.fragment.items.length === 1 &&\n\t\t\t\t\t\t\t\tthis.fragment.items[0].type === INTERPOLATOR &&\n\t\t\t\t\t\t\t\tthis.fragment.items[0];\n\t\t}\n\t}\n\n\tif ( Item$$1 ) BindingFlag.__proto__ = Item$$1;\n\tBindingFlag.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tBindingFlag.prototype.constructor = BindingFlag;\n\n\tBindingFlag.prototype.bind = function bind () {\n\t\tif ( this.fragment ) { this.fragment.bind(); }\n\t\tset$3( this, this.getValue(), true );\n\t};\n\n\tBindingFlag.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.element.bubble();\n\t\t\tthis.dirty = true;\n\t\t}\n\t};\n\n\tBindingFlag.prototype.getValue = function getValue () {\n\t\tif ( this.fragment ) { return this.fragment.valueOf(); }\n\t\telse if ( 'value' in this ) { return this.value; }\n\t\telse if ( 'f' in this.template ) { return this.template.f; }\n\t\telse { return true; }\n\t};\n\n\tBindingFlag.prototype.render = function render () {\n\t\tset$3( this, this.getValue(), true );\n\t};\n\n\tBindingFlag.prototype.toString = function toString () { return ''; };\n\n\tBindingFlag.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\n\t\tdelete this.element[ this.flag ];\n\t};\n\n\tBindingFlag.prototype.unrender = function unrender () {\n\t\tif ( this.element.rendered ) { this.element.recreateTwowayBinding(); }\n\t};\n\n\tBindingFlag.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tset$3( this, this.getValue(), true );\n\t\t}\n\t};\n\n\treturn BindingFlag;\n}(Item));\n\nfunction set$3 ( flag, value, update ) {\n\tif ( value === 0 ) {\n\t\tflag.value = true;\n\t} else if ( value === 'true' ) {\n\t\tflag.value = true;\n\t} else if ( value === 'false' || value === '0' ) {\n\t\tflag.value = false;\n\t} else {\n\t\tflag.value = value;\n\t}\n\n\tvar current = flag.element[ flag.flag ];\n\tflag.element[ flag.flag ] = flag.value;\n\tif ( update && !flag.element.attributes.binding && current !== flag.value ) {\n\t\tflag.element.recreateTwowayBinding();\n\t}\n\n\treturn flag.value;\n}\n\nvar processWrapper = function ( wrapper, array, methodName, newIndices ) {\n\tvar __model = wrapper.__model;\n\n\tif ( newIndices ) {\n\t\t__model.shuffle( newIndices );\n\t} else {\n\t\t// If this is a sort or reverse, we just do root.set()...\n\t\t// TODO use merge logic?\n\t\t//root.viewmodel.mark( keypath );\n\t}\n};\n\nvar mutatorMethods = [ 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift' ];\nvar patchedArrayProto = [];\n\nmutatorMethods.forEach( function (methodName) {\n\tvar method = function () {\n\t\tvar this$1 = this;\n\t\tvar args = [], len = arguments.length;\n\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\tvar newIndices = getNewIndices( this.length, methodName, args );\n\n\t\t// lock any magic array wrappers, so that things don't get fudged\n\t\tthis._ractive.wrappers.forEach( function (r) { if ( r.magic ) { r.magic.locked = true; } } );\n\n\t\t// apply the underlying method\n\t\tvar result = Array.prototype[ methodName ].apply( this, arguments );\n\n\t\t// trigger changes\n\t\trunloop.start();\n\n\t\tthis._ractive.setting = true;\n\t\tvar i = this._ractive.wrappers.length;\n\t\twhile ( i-- ) {\n\t\t\tprocessWrapper( this$1._ractive.wrappers[i], this$1, methodName, newIndices );\n\t\t}\n\n\t\trunloop.end();\n\n\t\tthis._ractive.setting = false;\n\n\t\t// unlock the magic arrays... magic... bah\n\t\tthis._ractive.wrappers.forEach( function (r) { if ( r.magic ) { r.magic.locked = false; } } );\n\n\t\treturn result;\n\t};\n\n\tObject.defineProperty( patchedArrayProto, methodName, {\n\t\tvalue: method,\n\t\tconfigurable: true\n\t});\n});\n\nvar patchArrayMethods;\nvar unpatchArrayMethods;\n\n// can we use prototype chain injection?\n// http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/#wrappers_prototype_chain_injection\nif ( ({}).__proto__ ) {\n\t// yes, we can\n\tpatchArrayMethods = function (array) { return array.__proto__ = patchedArrayProto; };\n\tunpatchArrayMethods = function (array) { return array.__proto__ = Array.prototype; };\n}\n\nelse {\n\t// no, we can't\n\tpatchArrayMethods = function (array) {\n\t\tvar i = mutatorMethods.length;\n\t\twhile ( i-- ) {\n\t\t\tvar methodName = mutatorMethods[i];\n\t\t\tObject.defineProperty( array, methodName, {\n\t\t\t\tvalue: patchedArrayProto[ methodName ],\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t}\n\t};\n\n\tunpatchArrayMethods = function (array) {\n\t\tvar i = mutatorMethods.length;\n\t\twhile ( i-- ) {\n\t\t\tdelete array[ mutatorMethods[i] ];\n\t\t}\n\t};\n}\n\npatchArrayMethods.unpatch = unpatchArrayMethods; // TODO export separately?\nvar patch = patchArrayMethods;\n\nvar errorMessage$1 = 'Something went wrong in a rather interesting way';\n\nvar arrayAdaptor = {\n\tfilter: function filter ( object ) {\n\t\t// wrap the array if a) b) it's an array, and b) either it hasn't been wrapped already,\n\t\t// or the array didn't trigger the get() itself\n\t\treturn Array.isArray( object ) && ( !object._ractive || !object._ractive.setting );\n\t},\n\twrap: function wrap ( ractive, array, keypath ) {\n\t\treturn new ArrayWrapper( ractive, array, keypath );\n\t}\n};\n\nvar ArrayWrapper = function ArrayWrapper ( ractive, array ) {\n\tthis.root = ractive;\n\tthis.value = array;\n\tthis.__model = null; // filled in later\n\n\t// if this array hasn't already been ractified, ractify it\n\tif ( !array._ractive ) {\n\t\t// define a non-enumerable _ractive property to store the wrappers\n\t\tObject.defineProperty( array, '_ractive', {\n\t\t\tvalue: {\n\t\t\t\twrappers: [],\n\t\t\t\tinstances: [],\n\t\t\t\tsetting: false\n\t\t\t},\n\t\t\tconfigurable: true\n\t\t});\n\n\t\tpatch( array );\n\t}\n\n\t// store the ractive instance, so we can handle transitions later\n\tif ( !array._ractive.instances[ ractive._guid ] ) {\n\t\tarray._ractive.instances[ ractive._guid ] = 0;\n\t\tarray._ractive.instances.push( ractive );\n\t}\n\n\tarray._ractive.instances[ ractive._guid ] += 1;\n\tarray._ractive.wrappers.push( this );\n};\n\nArrayWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nArrayWrapper.prototype.reset = function reset ( value ) {\n\treturn this.value === value;\n};\n\nArrayWrapper.prototype.teardown = function teardown () {\n\tvar array = this.value;\n\tvar storage = array._ractive;\n\tvar wrappers = storage.wrappers;\n\tvar instances = storage.instances;\n\n\t// if teardown() was invoked because we're clearing the cache as a result of\n\t// a change that the array itself triggered, we can save ourselves the teardown\n\t// and immediate setup\n\tif ( storage.setting ) {\n\t\treturn false; // so that we don't remove it from cached wrappers\n\t}\n\n\tvar index = wrappers.indexOf( this );\n\tif ( index === -1 ) {\n\t\tthrow new Error( errorMessage$1 );\n\t}\n\n\twrappers.splice( index, 1 );\n\n\t// if nothing else depends on this array, we can revert it to its\n\t// natural state\n\tif ( !wrappers.length ) {\n\t\tdelete array._ractive;\n\t\tpatch.unpatch( this.value );\n\t}\n\n\telse {\n\t\t// remove ractive instance if possible\n\t\tinstances[ this.root._guid ] -= 1;\n\t\tif ( !instances[ this.root._guid ] ) {\n\t\t\tindex = instances.indexOf( this.root );\n\n\t\t\tif ( index === -1 ) {\n\t\t\t\tthrow new Error( errorMessage$1 );\n\t\t\t}\n\n\t\t\tinstances.splice( index, 1 );\n\t\t}\n\t}\n};\n\nvar magicAdaptor;\n\ntry {\n\tObject.defineProperty({}, 'test', { get: function get() {}, set: function set() {} });\n\n\tmagicAdaptor = {\n\t\tfilter: function filter ( value ) {\n\t\t\treturn value && typeof value === 'object';\n\t\t},\n\t\twrap: function wrap ( ractive, value, keypath ) {\n\t\t\treturn new MagicWrapper( ractive, value, keypath );\n\t\t}\n\t};\n} catch ( err ) {\n\tmagicAdaptor = false;\n}\n\nvar magicAdaptor$1 = magicAdaptor;\n\nfunction createOrWrapDescriptor ( originalDescriptor, ractive, keypath, wrapper ) {\n\tif ( originalDescriptor.set && originalDescriptor.set.__magic ) {\n\t\toriginalDescriptor.set.__magic.dependants.push({ ractive: ractive, keypath: keypath });\n\t\treturn originalDescriptor;\n\t}\n\n\tvar setting;\n\n\tvar dependants = [{ ractive: ractive, keypath: keypath }];\n\n\tvar descriptor = {\n\t\tget: function get () {\n\t\t\treturn 'value' in originalDescriptor ? originalDescriptor.value : originalDescriptor.get.call( this );\n\t\t},\n\t\tset: function set (value) {\n\t\t\tif ( setting ) { return; }\n\n\t\t\tif ( 'value' in originalDescriptor ) {\n\t\t\t\toriginalDescriptor.value = value;\n\t\t\t} else {\n\t\t\t\toriginalDescriptor.set.call( this, value );\n\t\t\t}\n\n\t\t\tif ( wrapper.locked ) { return; }\n\t\t\tsetting = true;\n\t\t\tdependants.forEach( function (ref) {\n\t\t\t\tvar ractive = ref.ractive;\n\t\t\t\tvar keypath = ref.keypath;\n\n\t\t\t\tractive.set( keypath, value );\n\t\t\t});\n\t\t\tsetting = false;\n\t\t},\n\t\tenumerable: true\n\t};\n\n\tdescriptor.set.__magic = { dependants: dependants, originalDescriptor: originalDescriptor };\n\n\treturn descriptor;\n}\n\nfunction revert ( descriptor, ractive, keypath ) {\n\tif ( !descriptor.set || !descriptor.set.__magic ) { return true; }\n\n\tvar dependants = descriptor.set.__magic;\n\tvar i = dependants.length;\n\twhile ( i-- ) {\n\t\tvar dependant = dependants[i];\n\t\tif ( dependant.ractive === ractive && dependant.keypath === keypath ) {\n\t\t\tdependants.splice( i, 1 );\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nvar MagicWrapper = function MagicWrapper ( ractive, value, keypath ) {\n\tvar this$1 = this;\n\n\tthis.ractive = ractive;\n\tthis.value = value;\n\tthis.keypath = keypath;\n\n\tthis.originalDescriptors = {};\n\n\t// wrap all properties with getters\n\tObject.keys( value ).forEach( function (key) {\n\t\tvar originalDescriptor = Object.getOwnPropertyDescriptor( this$1.value, key );\n\t\tthis$1.originalDescriptors[ key ] = originalDescriptor;\n\n\t\tvar childKeypath = keypath ? (keypath + \"".\"" + (escapeKey( key ))) : escapeKey( key );\n\n\t\tvar descriptor = createOrWrapDescriptor( originalDescriptor, ractive, childKeypath, this$1 );\n\n\n\n\t\tObject.defineProperty( this$1.value, key, descriptor );\n\t});\n};\n\nMagicWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nMagicWrapper.prototype.reset = function reset ( value ) {\n\treturn this.value === value;\n};\n\nMagicWrapper.prototype.set = function set ( key, value ) {\n\tthis.value[ key ] = value;\n};\n\nMagicWrapper.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\tObject.keys( this.value ).forEach( function (key) {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor( this$1.value, key );\n\t\tif ( !descriptor.set || !descriptor.set.__magic ) { return; }\n\n\t\trevert( descriptor );\n\n\t\tif ( descriptor.set.__magic.dependants.length === 1 ) {\n\t\t\tObject.defineProperty( this$1.value, key, descriptor.set.__magic.originalDescriptor );\n\t\t}\n\t});\n};\n\nvar MagicArrayWrapper = function MagicArrayWrapper ( ractive, array, keypath ) {\n\tthis.value = array;\n\n\tthis.magic = true;\n\n\tthis.magicWrapper = magicAdaptor$1.wrap( ractive, array, keypath );\n\tthis.arrayWrapper = arrayAdaptor.wrap( ractive, array, keypath );\n\tthis.arrayWrapper.magic = this.magicWrapper;\n\n\t// ugh, this really is a terrible hack\n\tObject.defineProperty( this, '__model', {\n\t\tget: function get () {\n\t\t\treturn this.arrayWrapper.__model;\n\t\t},\n\t\tset: function set ( model ) {\n\t\t\tthis.arrayWrapper.__model = model;\n\t\t}\n\t});\n};\n\nMagicArrayWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nMagicArrayWrapper.prototype.teardown = function teardown () {\n\tthis.arrayWrapper.teardown();\n\tthis.magicWrapper.teardown();\n};\n\nMagicArrayWrapper.prototype.reset = function reset ( value ) {\n\treturn this.arrayWrapper.reset( value ) && this.magicWrapper.reset( value );\n};\n\nvar magicArrayAdaptor = {\n\tfilter: function filter ( object, keypath, ractive ) {\n\t\treturn magicAdaptor$1.filter( object, keypath, ractive ) && arrayAdaptor.filter( object );\n\t},\n\n\twrap: function wrap ( ractive, array, keypath ) {\n\t\treturn new MagicArrayWrapper( ractive, array, keypath );\n\t}\n};\n\nvar RactiveModel = (function (Model$$1) {\n\tfunction RactiveModel ( ractive ) {\n\t\tModel$$1.call( this, null, '' );\n\t\tthis.value = ractive;\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.adaptors = [];\n\t\tthis.ractive = ractive;\n\t}\n\n\tif ( Model$$1 ) RactiveModel.__proto__ = Model$$1;\n\tRactiveModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tRactiveModel.prototype.constructor = RactiveModel;\n\n\tRactiveModel.prototype.joinKey = function joinKey ( key ) {\n\t\tvar model = Model$$1.prototype.joinKey.call( this, key );\n\n\t\tif ( ( key === 'root' || key === 'parent' ) && !model.isLink ) { return initLink( model, key ); }\n\t\telse if ( key === 'data' ) { return this.ractive.viewmodel; }\n\n\t\treturn model;\n\t};\n\n\tRactiveModel.prototype.getKeypath = function getKeypath () {\n\t\treturn '@this';\n\t};\n\n\tRactiveModel.prototype.retrieve = function retrieve () {\n\t\treturn this.ractive;\n\t};\n\n\treturn RactiveModel;\n}(Model));\n\nfunction initLink ( model, key ) {\n\tmodel.applyValue = function ( value ) {\n\t\tthis.parent.value[ key ] = value;\n\t\tif ( value && value.viewmodel ) {\n\t\t\tthis.link( value.viewmodel.getRactiveModel(), key );\n\t\t\tthis._link.markedAll();\n\t\t} else {\n\t\t\tthis.link( Object.create( Missing ), key );\n\t\t\tthis._link.markedAll();\n\t\t}\n\t};\n\n\tmodel.applyValue( model.parent.ractive[ key ], key );\n\tmodel._link.set = function (v) { return model.applyValue( v ); };\n\tmodel._link.applyValue = function (v) { return model.applyValue( v ); };\n\treturn model._link;\n}\n\nvar hasProp$1 = Object.prototype.hasOwnProperty;\n\nvar RootModel = (function (Model$$1) {\n\tfunction RootModel ( options ) {\n\t\tModel$$1.call( this, null, null );\n\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.ractive = options.ractive; // TODO sever this link\n\n\t\tthis.value = options.data;\n\t\tthis.adaptors = options.adapt;\n\t\tthis.adapt();\n\n\t\tthis.computationContext = options.ractive;\n\t\tthis.computations = {};\n\t}\n\n\tif ( Model$$1 ) RootModel.__proto__ = Model$$1;\n\tRootModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tRootModel.prototype.constructor = RootModel;\n\n\tRootModel.prototype.attached = function attached ( fragment ) {\n\t\tattachImplicits( this, fragment );\n\t};\n\n\tRootModel.prototype.compute = function compute ( key, signature ) {\n\t\tvar computation = new Computation( this, signature, key );\n\t\tthis.computations[ escapeKey( key ) ] = computation;\n\n\t\treturn computation;\n\t};\n\n\tRootModel.prototype.createLink = function createLink ( keypath, target, targetPath, options ) {\n\t\tvar this$1 = this;\n\n\t\tvar keys = splitKeypath( keypath );\n\n\t\tvar model = this;\n\t\twhile ( keys.length ) {\n\t\t\tvar key = keys.shift();\n\t\t\tmodel = this$1.childByKey[ key ] || this$1.joinKey( key );\n\t\t}\n\n\t\treturn model.link( target, targetPath, options );\n\t};\n\n\tRootModel.prototype.detached = function detached () {\n\t\tdetachImplicits( this );\n\t};\n\n\tRootModel.prototype.get = function get ( shouldCapture, options ) {\n\t\tvar this$1 = this;\n\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( !options || options.virtual !== false ) {\n\t\t\tvar result = this.getVirtual();\n\t\t\tvar keys = Object.keys( this.computations );\n\t\t\tvar i = keys.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tresult[ keys[i] ] = this$1.computations[ keys[i] ].get();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn this.value;\n\t\t}\n\t};\n\n\tRootModel.prototype.getKeypath = function getKeypath () {\n\t\treturn '';\n\t};\n\n\tRootModel.prototype.getRactiveModel = function getRactiveModel () {\n\t\treturn this.ractiveModel || ( this.ractiveModel = new RactiveModel( this.ractive ) );\n\t};\n\n\tRootModel.prototype.getValueChildren = function getValueChildren () {\n\t\tvar this$1 = this;\n\n\t\tvar children = Model$$1.prototype.getValueChildren.call( this, this.value );\n\n\t\tthis.children.forEach( function (child) {\n\t\t\tif ( child._link ) {\n\t\t\t\tvar idx = children.indexOf( child );\n\t\t\t\tif ( ~idx ) { children.splice( idx, 1, child._link ); }\n\t\t\t\telse { children.push( child._link ); }\n\t\t\t}\n\t\t});\n\n\t\tfor ( var k in this.computations ) {\n\t\t\tchildren.push( this$1.computations[k] );\n\t\t}\n\n\t\treturn children;\n\t};\n\n\tRootModel.prototype.has = function has ( key ) {\n\t\tvar value = this.value;\n\t\tvar unescapedKey = unescapeKey( key );\n\n\t\tif ( unescapedKey === '@this' || unescapedKey === '@global' || unescapedKey === '@shared' ) { return true; }\n\t\tif ( unescapedKey[0] === '~' && unescapedKey[1] === '/' ) { unescapedKey = unescapedKey.slice( 2 ); }\n\t\tif ( hasProp$1.call( value, unescapedKey ) ) { return true; }\n\n\t\t// mappings/links and computations\n\t\tif ( key in this.computations || this.childByKey[unescapedKey] && this.childByKey[unescapedKey]._link ) { return true; }\n\n\t\t// We climb up the constructor chain to find if one of them contains the unescapedKey\n\t\tvar constructor = value.constructor;\n\t\twhile ( constructor !== Function && constructor !== Array && constructor !== Object ) {\n\t\t\tif ( hasProp$1.call( constructor.prototype, unescapedKey ) ) { return true; }\n\t\t\tconstructor = constructor.constructor;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tRootModel.prototype.joinKey = function joinKey ( key, opts ) {\n\t\tif ( key[0] === '@' ) {\n\t\t\tif ( key === '@this' || key === '@' ) { return this.getRactiveModel(); }\n\t\t\tif ( key === '@global' ) { return GlobalModel; }\n\t\t\tif ( key === '@shared' ) { return SharedModel$1; }\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key[0] === '~' && key[1] === '/' ) { key = key.slice( 2 ); }\n\n\t\treturn this.computations.hasOwnProperty( key ) ? this.computations[ key ] :\n\t\t       Model$$1.prototype.joinKey.call( this, key, opts );\n\t};\n\n\t// TODO: this should go away\n\tRootModel.prototype.map = function map ( localKey, origin, options ) {\n\t\tvar local = this.joinKey( localKey );\n\t\tlocal.link( origin, localKey, options );\n\t};\n\n\tRootModel.prototype.set = function set ( value ) {\n\t\t// TODO wrapping root node is a baaaad idea. We should prevent this\n\t\tvar wrapper = this.wrapper;\n\t\tif ( wrapper ) {\n\t\t\tvar shouldTeardown = !wrapper.reset || wrapper.reset( value ) === false;\n\n\t\t\tif ( shouldTeardown ) {\n\t\t\t\twrapper.teardown();\n\t\t\t\tthis.wrapper = null;\n\t\t\t\tthis.value = value;\n\t\t\t\tthis.adapt();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.value = value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( mark$1$1 );\n\t};\n\n\tRootModel.prototype.retrieve = function retrieve () {\n\t\treturn this.wrapper ? this.wrapper.get() : this.value;\n\t};\n\n\tRootModel.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.prototype.teardown.call(this);\n\t\tfor ( var k in this.computations ) {\n\t\t\tthis$1.computations[ k ].teardown();\n\t\t}\n\t};\n\n\treturn RootModel;\n}(Model));\n\nRootModel.prototype.update = noop;\n\nfunction attachImplicits ( model, fragment ) {\n\tif ( model._link && model._link.implicit && model._link.isDetached() ) {\n\t\tmodel.attach( fragment );\n\t}\n\n\t// look for virtual children to relink and cascade\n\tfor ( var k in model.childByKey ) {\n\t\tif ( k in model.value ) {\n\t\t\tattachImplicits( model.childByKey[k], fragment );\n\t\t} else if ( !model.childByKey[k]._link || model.childByKey[k]._link.isDetached() ) {\n\t\t\tvar mdl = resolveReference( fragment, k );\n\t\t\tif ( mdl ) {\n\t\t\t\tmodel.childByKey[k].link( mdl, k, { implicit: true } );\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction detachImplicits ( model ) {\n\tif ( model._link && model._link.implicit ) {\n\t\tmodel.unlink();\n\t}\n\n\tfor ( var k in model.childByKey ) {\n\t\tdetachImplicits( model.childByKey[k] );\n\t}\n}\n\nfunction getComputationSignature ( ractive, key, signature ) {\n\tvar getter;\n\tvar setter;\n\n\t// useful for debugging\n\tvar getterString;\n\tvar getterUseStack;\n\tvar setterString;\n\n\tif ( typeof signature === 'function' ) {\n\t\tgetter = bind$2( signature, ractive );\n\t\tgetterString = signature.toString();\n\t\tgetterUseStack = true;\n\t}\n\n\tif ( typeof signature === 'string' ) {\n\t\tgetter = createFunctionFromString( signature, ractive );\n\t\tgetterString = signature;\n\t}\n\n\tif ( typeof signature === 'object' ) {\n\t\tif ( typeof signature.get === 'string' ) {\n\t\t\tgetter = createFunctionFromString( signature.get, ractive );\n\t\t\tgetterString = signature.get;\n\t\t} else if ( typeof signature.get === 'function' ) {\n\t\t\tgetter = bind$2( signature.get, ractive );\n\t\t\tgetterString = signature.get.toString();\n\t\t\tgetterUseStack = true;\n\t\t} else {\n\t\t\tfatal( '`%s` computation must have a `get()` method', key );\n\t\t}\n\n\t\tif ( typeof signature.set === 'function' ) {\n\t\t\tsetter = bind$2( signature.set, ractive );\n\t\t\tsetterString = signature.set.toString();\n\t\t}\n\t}\n\n\treturn {\n\t\tgetter: getter,\n\t\tsetter: setter,\n\t\tgetterString: getterString,\n\t\tsetterString: setterString,\n\t\tgetterUseStack: getterUseStack\n\t};\n}\n\nvar constructHook = new Hook( 'construct' );\n\nvar registryNames$1 = [\n\t'adaptors',\n\t'components',\n\t'decorators',\n\t'easing',\n\t'events',\n\t'interpolators',\n\t'partials',\n\t'transitions'\n];\n\nvar uid = 0;\n\nfunction construct ( ractive, options ) {\n\tif ( Ractive.DEBUG ) { welcome(); }\n\n\tinitialiseProperties( ractive );\n\thandleAttributes( ractive );\n\n\t// if there's not a delegation setting, inherit from parent if it's not default\n\tif ( !options.hasOwnProperty( 'delegate' ) && ractive.parent && ractive.parent.delegate !== ractive.delegate ) {\n\t\tractive.delegate = false;\n\t}\n\n\t// TODO don't allow `onconstruct` with `new Ractive()`, there's no need for it\n\tconstructHook.fire( ractive, options );\n\n\t// Add registries\n\tvar i = registryNames$1.length;\n\twhile ( i-- ) {\n\t\tvar name = registryNames$1[ i ];\n\t\tractive[ name ] = Object.assign( Object.create( ractive.constructor[ name ] || null ), options[ name ] );\n\t}\n\n\tif ( ractive._attributePartial ) {\n\t\tractive.partials['extra-attributes'] = ractive._attributePartial;\n\t\tdelete ractive._attributePartial;\n\t}\n\n\t// Create a viewmodel\n\tvar viewmodel = new RootModel({\n\t\tadapt: getAdaptors( ractive, ractive.adapt, options ),\n\t\tdata: dataConfigurator.init( ractive.constructor, ractive, options ),\n\t\tractive: ractive\n\t});\n\n\tractive.viewmodel = viewmodel;\n\n\t// Add computed properties\n\tvar computed = Object.assign( Object.create( ractive.constructor.prototype.computed ), options.computed );\n\n\tfor ( var key in computed ) {\n\t\tif ( key === '__proto__' ) { continue; }\n\t\tvar signature = getComputationSignature( ractive, key, computed[ key ] );\n\t\tviewmodel.compute( key, signature );\n\t}\n}\n\nfunction getAdaptors ( ractive, protoAdapt, options ) {\n\tprotoAdapt = protoAdapt.map( lookup );\n\tvar adapt = ensureArray( options.adapt ).map( lookup );\n\n\tvar builtins = [];\n\tvar srcs = [ protoAdapt, adapt ];\n\tif ( ractive.parent && !ractive.isolated ) {\n\t\tsrcs.push( ractive.parent.viewmodel.adaptors );\n\t}\n\tsrcs.push( builtins );\n\n\tvar magic$$1 = 'magic' in options ? options.magic : ractive.magic;\n\tvar modifyArrays = 'modifyArrays' in options ? options.modifyArrays : ractive.modifyArrays;\n\n\tif ( magic$$1 ) {\n\t\tif ( !magic ) {\n\t\t\tthrow new Error( 'Getters and setters (magic mode) are not supported in this browser' );\n\t\t}\n\n\t\tif ( modifyArrays ) {\n\t\t\tbuiltins.push( magicArrayAdaptor );\n\t\t}\n\n\t\tbuiltins.push( magicAdaptor$1 );\n\t}\n\n\tif ( modifyArrays ) {\n\t\tbuiltins.push( arrayAdaptor );\n\t}\n\n\treturn combine.apply( null, srcs );\n\n\n\tfunction lookup ( adaptor ) {\n\t\tif ( typeof adaptor === 'string' ) {\n\t\t\tadaptor = findInViewHierarchy( 'adaptors', ractive, adaptor );\n\n\t\t\tif ( !adaptor ) {\n\t\t\t\tfatal( missingPlugin( adaptor, 'adaptor' ) );\n\t\t\t}\n\t\t}\n\n\t\treturn adaptor;\n\t}\n}\n\nfunction initialiseProperties ( ractive ) {\n\t// Generate a unique identifier, for places where you'd use a weak map if it\n\t// existed\n\tractive._guid = 'r-' + uid++;\n\n\t// events\n\tractive._subs = Object.create( null );\n\tractive._nsSubs = 0;\n\n\t// storage for item configuration from instantiation to reset,\n\t// like dynamic functions or original values\n\tractive._config = {};\n\n\t// events\n\tractive.event = null;\n\tractive._eventQueue = [];\n\n\t// live queries\n\tractive._liveQueries = [];\n\tractive._liveComponentQueries = [];\n\n\t// observers\n\tractive._observers = [];\n\n\t// external children\n\tractive._children = [];\n\tractive._children.byName = {};\n\tractive.children = ractive._children;\n\n\tif ( !ractive.component ) {\n\t\tractive.root = ractive;\n\t\tractive.parent = ractive.container = null; // TODO container still applicable?\n\t}\n}\n\nfunction handleAttributes ( ractive ) {\n\tvar component = ractive.component;\n\tvar attributes = ractive.constructor.attributes;\n\n\tif ( attributes && component ) {\n\t\tvar tpl = component.template;\n\t\tvar attrs = tpl.m ? tpl.m.slice() : [];\n\n\t\t// grab all of the passed attribute names\n\t\tvar props = attrs.filter( function (a) { return a.t === ATTRIBUTE; } ).map( function (a) { return a.n; } );\n\n\t\t// warn about missing requireds\n\t\tattributes.required.forEach( function (p) {\n\t\t\tif ( !~props.indexOf( p ) ) {\n\t\t\t\twarnIfDebug( (\""Component '\"" + (component.name) + \""' requires attribute '\"" + p + \""' to be provided\"") );\n\t\t\t}\n\t\t});\n\n\t\t// set up a partial containing non-property attributes\n\t\tvar all = attributes.optional.concat( attributes.required );\n\t\tvar partial = [];\n\t\tvar i = attrs.length;\n\t\twhile ( i-- ) {\n\t\t\tvar a = attrs[i];\n\t\t\tif ( a.t === ATTRIBUTE && !~all.indexOf( a.n ) ) {\n\t\t\t\tif ( attributes.mapAll ) {\n\t\t\t\t\t// map the attribute if requested and make the extra attribute in the partial refer to the mapping\n\t\t\t\t\tpartial.unshift({ t: ATTRIBUTE, n: a.n, f: [{ t: INTERPOLATOR, r: (\""~/\"" + (a.n)) }] });\n\t\t\t\t} else {\n\t\t\t\t\t// transfer the attribute to the extra attributes partal\n\t\t\t\t\tpartial.unshift( attrs.splice( i, 1 )[0] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( partial.length ) { component.template = { t: tpl.t, e: tpl.e, f: tpl.f, m: attrs, p: tpl.p }; }\n\t\tractive._attributePartial = partial;\n\t}\n}\n\nvar teardownHook = new Hook( 'teardown' );\nvar destructHook = new Hook( 'destruct' );\n\n// Teardown. This goes through the root fragment and all its children, removing observers\n// and generally cleaning up after itself\n\nfunction Ractive$teardown () {\n\tvar this$1 = this;\n\n\tif ( this.torndown ) {\n\t\twarnIfDebug( 'ractive.teardown() was called on a Ractive instance that was already torn down' );\n\t\treturn Promise.resolve();\n\t}\n\n\tthis.shouldDestroy = true;\n\treturn teardown$2( this, function () { return this$1.fragment.rendered ? this$1.unrender() : Promise.resolve(); } );\n}\n\nfunction teardown$2 ( instance, getPromise ) {\n\tinstance.torndown = true;\n\tinstance.viewmodel.teardown();\n\tinstance.fragment.unbind();\n\tinstance._observers.slice().forEach( cancel$1 );\n\n\tif ( instance.fragment.rendered && instance.el.__ractive_instances__ ) {\n\t\tremoveFromArray$1( instance.el.__ractive_instances__, instance );\n\t}\n\n\tvar promise = getPromise();\n\n\tteardownHook.fire( instance );\n\tpromise.then( function () { return destructHook.fire( instance ); } );\n\n\treturn promise;\n}\n\nfunction makeDirty$1 ( query ) {\n\tquery.makeDirty();\n}\n\nvar Component = (function (Item$$1) {\n\tfunction Component ( options, ComponentConstructor ) {\n\t\tvar this$1 = this;\n\n\t\tItem$$1.call( this, options );\n\t\tthis.isAnchor = this.template.t === ANCHOR;\n\t\tthis.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super\n\n\t\tvar partials = options.template.p || {};\n\t\tif ( !( 'content' in partials ) ) { partials.content = options.template.f || []; }\n\t\tthis._partials = partials; // TEMP\n\n\t\tif ( this.isAnchor ) {\n\t\t\tthis.name = options.template.n;\n\n\t\t\tthis.addChild = addChild$1;\n\t\t\tthis.removeChild = removeChild$1;\n\t\t} else {\n\t\t\tvar instance = Object.create( ComponentConstructor.prototype );\n\n\t\t\tthis.instance = instance;\n\t\t\tthis.name = options.template.e;\n\n\t\t\tif ( instance.el ) {\n\t\t\t\twarnIfDebug( (\""The <\"" + (this.name) + \""> component has a default 'el' property; it has been disregarded\"") );\n\t\t\t}\n\n\t\t\tthis.liveQueries = [];\n\n\t\t\t// find container\n\t\t\tvar fragment = options.parentFragment;\n\t\t\tvar container;\n\t\t\twhile ( fragment ) {\n\t\t\t\tif ( fragment.owner.type === YIELDER ) {\n\t\t\t\t\tcontainer = fragment.owner.container;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tfragment = fragment.parent;\n\t\t\t}\n\n\t\t\t// add component-instance-specific properties\n\t\t\tinstance.parent = this.parentFragment.ractive;\n\t\t\tinstance.container = container || null;\n\t\t\tinstance.root = instance.parent.root;\n\t\t\tinstance.component = this;\n\n\t\t\tconstruct( this.instance, { partials: partials });\n\n\t\t\t// for hackability, this could be an open option\n\t\t\t// for any ractive instance, but for now, just\n\t\t\t// for components and just for ractive...\n\t\t\tinstance._inlinePartials = partials;\n\t\t}\n\n\t\tthis.attributeByName = {};\n\n\t\tthis.events = [];\n\t\tthis.attributes = [];\n\t\tvar leftovers = [];\n\t\t( this.template.m || [] ).forEach( function (template) {\n\t\t\tswitch ( template.t ) {\n\t\t\t\tcase ATTRIBUTE:\n\t\t\t\tcase EVENT:\n\t\t\t\t\tthis$1.attributes.push( createItem({\n\t\t\t\t\t\towner: this$1,\n\t\t\t\t\t\tparentFragment: this$1.parentFragment,\n\t\t\t\t\t\ttemplate: template\n\t\t\t\t\t}) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TRANSITION:\n\t\t\t\tcase BINDING_FLAG:\n\t\t\t\tcase DECORATOR:\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tleftovers.push( template );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif ( leftovers.length ) {\n\t\t\tthis.attributes.push( new ConditionalAttribute({\n\t\t\t\towner: this,\n\t\t\t\tparentFragment: this.parentFragment,\n\t\t\t\ttemplate: leftovers\n\t\t\t}) );\n\t\t}\n\n\t\tthis.eventHandlers = [];\n\t}\n\n\tif ( Item$$1 ) Component.__proto__ = Item$$1;\n\tComponent.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tComponent.prototype.constructor = Component;\n\n\tComponent.prototype.bind = function bind$1 () {\n\t\tif ( !this.isAnchor ) {\n\t\t\tthis.attributes.forEach( bind$1$1 );\n\n\t\t\tinitialise( this.instance, {\n\t\t\t\tpartials: this._partials\n\t\t\t}, {\n\t\t\t\tcssIds: this.parentFragment.cssIds\n\t\t\t});\n\n\t\t\tthis.eventHandlers.forEach( bind$1$1 );\n\n\t\t\tthis.bound = true;\n\t\t}\n\t};\n\n\tComponent.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.parentFragment.bubble();\n\t\t}\n\t};\n\n\tComponent.prototype.destroyed = function destroyed () {\n\t\tif ( !this.isAnchor && this.instance.fragment ) { this.instance.fragment.destroyed(); }\n\t};\n\n\tComponent.prototype.detach = function detach () {\n\t\tif ( this.isAnchor ) {\n\t\t\tif ( this.instance ) { return this.instance.fragment.detach(); }\n\t\t\treturn createDocumentFragment();\n\t\t}\n\n\t\treturn this.instance.fragment.detach();\n\t};\n\n\tComponent.prototype.find = function find ( selector, options ) {\n\t\tif ( this.instance ) { return this.instance.fragment.find( selector, options ); }\n\t};\n\n\tComponent.prototype.findAll = function findAll ( selector, query ) {\n\t\tif ( this.instance ) { this.instance.fragment.findAll( selector, query ); }\n\t};\n\n\tComponent.prototype.findComponent = function findComponent ( name, options ) {\n\t\tif ( !name || this.name === name ) { return this.instance; }\n\n\t\tif ( this.instance.fragment ) {\n\t\t\treturn this.instance.fragment.findComponent( name, options );\n\t\t}\n\t};\n\n\tComponent.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\t\tif ( this.instance && query.test( this ) ) {\n\t\t\tquery.add( this.instance );\n\n\t\t\tif ( query.live ) {\n\t\t\t\tthis.liveQueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.instance ) { this.instance.findAllComponents( name, { _query: query } ); }\n\t};\n\n\tComponent.prototype.firstNode = function firstNode ( skipParent ) {\n\t\tif ( this.instance ) { return this.instance.fragment.firstNode( skipParent ); }\n\t};\n\n\tComponent.prototype.removeFromQuery = function removeFromQuery ( query ) {\n\t\tif ( this.instance ) { query.remove( this.instance ); }\n\t\tremoveFromArray$1( this.liveQueries, query );\n\t};\n\n\tComponent.prototype.render = function render$1 ( target, occupants ) {\n\t\tif ( this.isAnchor ) {\n\t\t\tthis.rendered = true;\n\t\t\tthis.target = target;\n\n\t\t\tif ( !checking.length ) {\n\t\t\t\tchecking.push( this.ractive );\n\t\t\t\tif ( occupants ) {\n\t\t\t\t\tthis.occupants = occupants;\n\t\t\t\t\tcheckAnchors();\n\t\t\t\t\tthis.occupants = null;\n\t\t\t\t} else {\n\t\t\t\t\trunloop.scheduleTask( checkAnchors, true );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\trender$2( this.instance, target, null, occupants );\n\n\t\t\tthis.attributes.forEach( render$1$1 );\n\t\t\tthis.eventHandlers.forEach( render$1$1 );\n\t\t\tupdateLiveQueries$1( this );\n\n\t\t\tthis.rendered = true;\n\t\t}\n\t};\n\n\tComponent.prototype.shuffled = function shuffled () {\n\t\tif ( this.instance ) { this.liveQueries.forEach( makeDirty$1 ); }\n\t\tItem$$1.prototype.shuffled.call(this);\n\t};\n\n\tComponent.prototype.toString = function toString () {\n\t\tif ( this.instance ) { return this.instance.toHTML(); }\n\t};\n\n\tComponent.prototype.unbind = function unbind$1 () {\n\t\tif ( !this.isAnchor ) {\n\t\t\tthis.bound = false;\n\n\t\t\tthis.attributes.forEach( unbind$1$1 );\n\n\t\t\tteardown$2( this.instance, function () { return runloop.promise(); } );\n\t\t}\n\t};\n\n\tComponent.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\t\tvar this$1 = this;\n\n\t\tthis.shouldDestroy = shouldDestroy;\n\n\t\tif ( this.isAnchor ) {\n\t\t\tif ( this.item ) { unrenderItem( this, this.item ); }\n\t\t\tthis.target = null;\n\t\t\tif ( !checking.length ) {\n\t\t\t\tchecking.push( this.ractive );\n\t\t\t\trunloop.scheduleTask( checkAnchors, true );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.instance.unrender();\n\t\t\tthis.instance.el = this.instance.target = null;\n\t\t\tthis.attributes.forEach( unrender$1$1 );\n\t\t\tthis.eventHandlers.forEach( unrender$1$1 );\n\n\t\t\tthis.liveQueries.forEach( function (query) { return query.remove( this$1.instance ); } );\n\t\t\tthis.liveQueries = [];\n\t\t}\n\n\t\tthis.rendered = false;\n\t};\n\n\tComponent.prototype.update = function update$1 () {\n\t\tthis.dirty = false;\n\t\tif ( this.instance ) {\n\t\t\tthis.instance.fragment.update();\n\t\t\tthis.attributes.forEach( update$1$1 );\n\t\t\tthis.eventHandlers.forEach( update$1$1 );\n\t\t}\n\t};\n\n\treturn Component;\n}(Item));\n\nfunction addChild$1 ( meta ) {\n\tif ( this.item ) { this.removeChild( this.item ); }\n\n\tvar child = meta.instance;\n\tmeta.anchor = this;\n\n\tmeta.parentFragment = this.parentFragment;\n\tmeta.name = meta.nameOption || this.name;\n\tthis.name = meta.name;\n\n\n\tif ( !child.isolated ) { child.viewmodel.attached( this.parentFragment ); }\n\n\t// render as necessary\n\tif ( this.rendered ) {\n\t\trenderItem( this, meta );\n\t}\n}\n\nfunction removeChild$1 ( meta ) {\n\t// unrender as necessary\n\tif ( this.item === meta ) {\n\t\tunrenderItem( this, meta );\n\t\tthis.name = this.template.n;\n\t}\n}\n\nfunction renderItem ( anchor, meta ) {\n\tif ( !anchor.rendered ) { return; }\n\n\tmeta.shouldDestroy = false;\n\tmeta.parentFragment = anchor.parentFragment;\n\n\tanchor.item = meta;\n\tanchor.instance = meta.instance;\n\tanchor.liveQueries = meta.liveQueries;\n\tvar nextNode = anchor.parentFragment.findNextNode( anchor );\n\n\tif ( meta.instance.fragment.rendered ) {\n\t\tmeta.instance.unrender();\n\t}\n\n\tmeta.partials = meta.instance.partials;\n\tmeta.instance.partials = Object.assign( {}, meta.partials, anchor._partials );\n\n\tmeta.instance.fragment.unbind();\n\tmeta.instance.fragment.bind( meta.instance.viewmodel );\n\n\tanchor.attributes.forEach( bind$1$1 );\n\tanchor.eventHandlers.forEach( bind$1$1 );\n\tanchor.attributes.forEach( render$1$1 );\n\tanchor.eventHandlers.forEach( render$1$1 );\n\n\tvar target = anchor.parentFragment.findParentNode();\n\trender$2( meta.instance, target, target.contains( nextNode ) ? nextNode : null, anchor.occupants );\n\n\tif ( meta.lastBound !== anchor ) {\n\t\tmeta.lastBound = anchor;\n\t}\n\n\tupdateLiveQueries$1( meta );\n}\n\nfunction unrenderItem ( anchor, meta ) {\n\tif ( !anchor.rendered ) { return; }\n\n\tmeta.shouldDestroy = true;\n\tmeta.instance.unrender();\n\n\tanchor.eventHandlers.forEach( unrender$1$1 );\n\tanchor.attributes.forEach( unrender$1$1 );\n\tanchor.eventHandlers.forEach( unbind$1$1 );\n\tanchor.attributes.forEach( unbind$1$1 );\n\n\tmeta.instance.el = meta.instance.anchor = null;\n\tmeta.parentFragment = null;\n\tmeta.anchor = null;\n\tanchor.item = null;\n\tanchor.instance = null;\n\n\tmeta.liveQueries.forEach( function (q) { return q.remove( meta.instance ); } );\n\tmeta.liveQueries = [];\n\tanchor.liveQueries = null;\n}\n\nvar checking = [];\nfunction checkAnchors () {\n\tvar list = checking;\n\tchecking = [];\n\n\tlist.forEach( updateAnchors );\n}\n\nfunction setupArgsFn ( item, template, fragment, opts ) {\n\tif ( opts === void 0 ) opts = {};\n\n\tif ( template && template.f && template.f.s ) {\n\t\titem.fn = getFunction( template.f.s, template.f.r.length );\n\t\tif ( opts.register === true ) {\n\t\t\titem.models = resolveArgs( item, template, fragment, opts );\n\t\t}\n\t}\n}\n\nfunction resolveArgs ( item, template, fragment, opts ) {\n\tif ( opts === void 0 ) opts = {};\n\n\treturn template.f.r.map( function ( ref, i ) {\n\t\tvar model;\n\n\t\tif ( opts.specialRef && ( model = opts.specialRef( ref, i ) ) ) { return model; }\n\n\t\tmodel = resolveReference( fragment, ref );\n\t\tif ( opts.register === true ) {\n\t\t\tmodel.register( item );\n\t\t}\n\n\t\treturn model;\n\t});\n}\n\nfunction teardownArgsFn ( item, template ) {\n\tif ( template && template.f && template.f.s ) {\n\t\tif ( item.models ) { item.models.forEach( function (m) {\n\t\t\tif ( m && m.unregister ) { m.unregister( item ); }\n\t\t}); }\n\t\titem.models = null;\n\t}\n}\n\nvar missingDecorator = {\n\tupdate: noop,\n\tteardown: noop\n};\n\nvar Decorator = function Decorator ( options ) {\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\tthis.parentFragment = this.owner.parentFragment;\n\tthis.ractive = this.owner.ractive;\n\tvar template = this.template = options.template;\n\n\tthis.name = template.n;\n\n\tthis.node = null;\n\tthis.intermediary = null;\n\n\tthis.element.decorators.push( this );\n};\n\nDecorator.prototype.bind = function bind () {\n\tsetupArgsFn( this, this.template, this.parentFragment, { register: true } );\n};\n\nDecorator.prototype.bubble = function bubble () {\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\t\tthis.owner.bubble();\n\t}\n};\n\nDecorator.prototype.destroyed = function destroyed () {\n\tif ( this.intermediary ) { this.intermediary.teardown(); }\n\tthis.shouldDestroy = true;\n};\n\nDecorator.prototype.handleChange = function handleChange () { this.bubble(); };\n\nDecorator.prototype.rebind = function rebind ( next, previous, safe ) {\n\tvar idx = this.models.indexOf( previous );\n\tif ( !~idx ) { return; }\n\n\tnext = rebindMatch( this.template.f.r[ idx ], next, previous );\n\tif ( next === previous ) { return; }\n\n\tprevious.unregister( this );\n\tthis.models.splice( idx, 1, next );\n\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\n\tif ( !safe ) { this.bubble(); }\n};\n\nDecorator.prototype.render = function render () {\n\t\tvar this$1 = this;\n\n\trunloop.scheduleTask( function () {\n\t\tvar fn = findInViewHierarchy( 'decorators', this$1.ractive, this$1.name );\n\n\t\tif ( !fn ) {\n\t\t\twarnOnce( missingPlugin( this$1.name, 'decorator' ) );\n\t\t\tthis$1.intermediary = missingDecorator;\n\t\t\treturn;\n\t\t}\n\n\t\tthis$1.node = this$1.element.node;\n\n\t\tvar args;\n\t\tif ( this$1.fn ) {\n\t\t\targs = this$1.models.map( function (model) {\n\t\t\t\tif ( !model ) { return undefined; }\n\n\t\t\t\treturn model.get();\n\t\t\t});\n\t\t\targs = this$1.fn.apply( this$1.ractive, args );\n\t\t}\n\n\t\tthis$1.intermediary = fn.apply( this$1.ractive, [ this$1.node ].concat( args ) );\n\n\t\tif ( !this$1.intermediary || !this$1.intermediary.teardown ) {\n\t\t\tthrow new Error( (\""The '\"" + (this$1.name) + \""' decorator must return an object with a teardown method\"") );\n\t\t}\n\n\t\t// watch out for decorators that cause their host element to be unrendered\n\t\tif ( this$1.shouldDestroy ) { this$1.destroyed(); }\n\t}, true );\n\tthis.rendered = true;\n};\n\nDecorator.prototype.toString = function toString () { return ''; };\n\nDecorator.prototype.unbind = function unbind () {\n\tteardownArgsFn( this, this.template );\n};\n\nDecorator.prototype.unrender = function unrender ( shouldDestroy ) {\n\tif ( ( !shouldDestroy || this.element.rendered ) && this.intermediary ) { this.intermediary.teardown(); }\n\tthis.rendered = false;\n};\n\nDecorator.prototype.update = function update () {\n\tif ( !this.dirty ) { return; }\n\n\tthis.dirty = false;\n\n\tif ( this.intermediary ) {\n\t\tif ( !this.intermediary.update ) {\n\t\t\tthis.unrender();\n\t\t\tthis.render();\n\t\t}\n\t\telse {\n\t\t\tvar args = this.models.map( function (model) { return model && model.get(); } );\n\t\t\tthis.intermediary.update.apply( this.ractive, this.fn.apply( this.ractive, args ) );\n\t\t}\n\t}\n};\n\nvar Doctype = (function (Item$$1) {\n\tfunction Doctype () {\n\t\tItem$$1.apply(this, arguments);\n\t}\n\n\tif ( Item$$1 ) Doctype.__proto__ = Item$$1;\n\tDoctype.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tDoctype.prototype.constructor = Doctype;\n\n\tDoctype.prototype.toString = function toString () {\n\t\treturn '<!DOCTYPE' + this.template.a + '>';\n\t};\n\n\treturn Doctype;\n}(Item));\n\nvar proto = Doctype.prototype;\nproto.bind = proto.render = proto.teardown = proto.unbind = proto.unrender = proto.update = noop;\n\nvar Binding = function Binding ( element, name ) {\n\tif ( name === void 0 ) name = 'value';\n\n\tthis.element = element;\n\tthis.ractive = element.ractive;\n\tthis.attribute = element.attributeByName[ name ];\n\n\tvar interpolator = this.attribute.interpolator;\n\tinterpolator.twowayBinding = this;\n\n\tvar model = interpolator.model;\n\n\tif ( model.isReadonly ) {\n\t\tvar keypath = model.getKeypath().replace( /^@/, '' );\n\t\twarnOnceIfDebug( (\""Cannot use two-way binding on <\"" + (element.name) + \""> element: \"" + keypath + \"" is read-only. To suppress this warning use <\"" + (element.name) + \"" twoway='false'...>\""), { ractive: this.ractive });\n\t\treturn false;\n\t}\n\n\tthis.attribute.isTwoway = true;\n\tthis.model = model;\n\n\t// initialise value, if it's undefined\n\tvar value = model.get();\n\tthis.wasUndefined = value === undefined;\n\n\tif ( value === undefined && this.getInitialValue ) {\n\t\tvalue = this.getInitialValue();\n\t\tmodel.set( value );\n\t}\n\tthis.lastVal( true, value );\n\n\tvar parentForm = findElement( this.element, false, 'form' );\n\tif ( parentForm ) {\n\t\tthis.resetValue = value;\n\t\tparentForm.formBindings.push( this );\n\t}\n};\n\nBinding.prototype.bind = function bind () {\n\tthis.model.registerTwowayBinding( this );\n};\n\nBinding.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tvar value = this.getValue();\n\tif ( this.lastVal() === value ) { return; }\n\n\trunloop.start( this.root );\n\t\tthis.attribute.locked = true;\n\tthis.model.set( value );\n\tthis.lastVal( true, value );\n\n\t\t// if the value changes before observers fire, unlock to be updatable cause something weird and potentially freezy is up\n\tif ( this.model.get() !== value ) { this.attribute.locked = false; }\n\telse { runloop.scheduleTask( function () { return this$1.attribute.locked = false; } ); }\n\n\trunloop.end();\n};\n\nBinding.prototype.lastVal = function lastVal ( setting, value ) {\n\tif ( setting ) { this.lastValue = value; }\n\telse { return this.lastValue; }\n};\n\nBinding.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tif ( this.model && this.model === previous ) { previous.unregisterTwowayBinding( this ); }\n\tif ( next ) {\n\t\tthis.model = next;\n\t\trunloop.scheduleTask( function () { return next.registerTwowayBinding( this$1 ); } );\n\t}\n};\n\nBinding.prototype.render = function render () {\n\tthis.node = this.element.node;\n\tthis.node._ractive.binding = this;\n\tthis.rendered = true; // TODO is this used anywhere?\n};\n\nBinding.prototype.setFromNode = function setFromNode ( node ) {\n\tthis.model.set( node.value );\n};\n\nBinding.prototype.unbind = function unbind () {\n\tthis.model.unregisterTwowayBinding( this );\n};\n\nBinding.prototype.unrender = noop;\n\n// This is the handler for DOM events that would lead to a change in the model\n// (i.e. change, sometimes, input, and occasionally click and keyup)\nfunction handleDomEvent () {\n\tthis._ractive.binding.handleChange();\n}\n\nvar CheckboxBinding = (function (Binding$$1) {\n\tfunction CheckboxBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'checked' );\n\t}\n\n\tif ( Binding$$1 ) CheckboxBinding.__proto__ = Binding$$1;\n\tCheckboxBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tCheckboxBinding.prototype.constructor = CheckboxBinding;\n\n\tCheckboxBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.node.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tCheckboxBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t\tthis.node.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\tCheckboxBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn !!this.element.getAttribute( 'checked' );\n\t};\n\n\tCheckboxBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.checked;\n\t};\n\n\tCheckboxBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.checked );\n\t};\n\n\treturn CheckboxBinding;\n}(Binding));\n\nfunction getBindingGroup ( group, model, getValue ) {\n\tvar hash = group + \""-bindingGroup\"";\n\treturn model[hash] || ( model[ hash ] = new BindingGroup( hash, model, getValue ) );\n}\n\nvar BindingGroup = function BindingGroup ( hash, model, getValue ) {\n\tvar this$1 = this;\n\n\tthis.model = model;\n\tthis.hash = hash;\n\tthis.getValue = function () {\n\t\tthis$1.value = getValue.call(this$1);\n\t\treturn this$1.value;\n\t};\n\n\tthis.bindings = [];\n};\n\nBindingGroup.prototype.add = function add ( binding ) {\n\tthis.bindings.push( binding );\n};\n\nBindingGroup.prototype.bind = function bind () {\n\tthis.value = this.model.get();\n\tthis.model.registerTwowayBinding( this );\n\tthis.bound = true;\n};\n\nBindingGroup.prototype.remove = function remove ( binding ) {\n\tremoveFromArray$1( this.bindings, binding );\n\tif ( !this.bindings.length ) {\n\t\tthis.unbind();\n\t}\n};\n\nBindingGroup.prototype.unbind = function unbind () {\n\tthis.model.unregisterTwowayBinding( this );\n\tthis.bound = false;\n\tdelete this.model[this.hash];\n};\n\nvar push$2 = [].push;\n\nfunction getValue$1$1() {\n\tvar this$1 = this;\n\n\tvar all = this.bindings.filter(function (b) { return b.node && b.node.checked; }).map(function (b) { return b.element.getAttribute( 'value' ); });\n\tvar res = [];\n\tall.forEach(function (v) { if ( !this$1.bindings[0].arrayContains( res, v ) ) { res.push( v ); } });\n\treturn res;\n}\n\nvar CheckboxNameBinding = (function (Binding$$1) {\n\tfunction CheckboxNameBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'name' );\n\n\t\tthis.checkboxName = true; // so that ractive.updateModel() knows what to do with this\n\n\t\t// Each input has a reference to an array containing it and its\n\t\t// group, as two-way binding depends on being able to ascertain\n\t\t// the status of all inputs within the group\n\t\tthis.group = getBindingGroup( 'checkboxes', this.model, getValue$1$1 );\n\t\tthis.group.add( this );\n\n\t\tif ( this.noInitialValue ) {\n\t\t\tthis.group.noInitialValue = true;\n\t\t}\n\n\t\t// If no initial value was set, and this input is checked, we\n\t\t// update the model\n\t\tif ( this.group.noInitialValue && this.element.getAttribute( 'checked' ) ) {\n\t\t\tvar existingValue = this.model.get();\n\t\t\tvar bindingValue = this.element.getAttribute( 'value' );\n\n\t\t\tif ( !this.arrayContains( existingValue, bindingValue ) ) {\n\t\t\t\tpush$2.call( existingValue, bindingValue ); // to avoid triggering runloop with array adaptor\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( Binding$$1 ) CheckboxNameBinding.__proto__ = Binding$$1;\n\tCheckboxNameBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tCheckboxNameBinding.prototype.constructor = CheckboxNameBinding;\n\n\tCheckboxNameBinding.prototype.bind = function bind () {\n\t\tif ( !this.group.bound ) {\n\t\t\tthis.group.bind();\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.getInitialValue = function getInitialValue () {\n\t\t// This only gets called once per group (of inputs that\n\t\t// share a name), because it only gets called if there\n\t\t// isn't an initial value. By the same token, we can make\n\t\t// a note of that fact that there was no initial value,\n\t\t// and populate it using any `checked` attributes that\n\t\t// exist (which users should avoid, but which we should\n\t\t// support anyway to avoid breaking expectations)\n\t\tthis.noInitialValue = true; // TODO are noInitialValue and wasUndefined the same thing?\n\t\treturn [];\n\t};\n\n\tCheckboxNameBinding.prototype.getValue = function getValue$1 () {\n\t\treturn this.group.value;\n\t};\n\n\tCheckboxNameBinding.prototype.handleChange = function handleChange () {\n\t\tthis.isChecked = this.element.node.checked;\n\t\tthis.group.value = this.model.get();\n\t\tvar value = this.element.getAttribute( 'value' );\n\t\tif ( this.isChecked && !this.arrayContains( this.group.value, value ) ) {\n\t\t\tthis.group.value.push( value );\n\t\t} else if ( !this.isChecked && this.arrayContains( this.group.value, value ) ) {\n\t\t\tthis.removeFromArray( this.group.value, value );\n\t\t}\n\t\t// make sure super knows there's a change\n\t\tthis.lastValue = null;\n\t\tBinding$$1.prototype.handleChange.call(this);\n\t};\n\n\tCheckboxNameBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tvar existingValue = this.model.get();\n\t\tvar bindingValue = this.element.getAttribute( 'value' );\n\n\t\tif ( Array.isArray( existingValue ) ) {\n\t\t\tthis.isChecked = this.arrayContains( existingValue, bindingValue );\n\t\t} else {\n\t\t\tthis.isChecked = this.element.compare( existingValue, bindingValue );\n\t\t}\n\t\tnode.name = '{{' + this.model.getKeypath() + '}}';\n\t\tnode.checked = this.isChecked;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\t// in case of IE emergency, bind to click event as well\n\t\tif ( node.attachEvent ) {\n\t\t\tnode.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.group.bindings.forEach( function (binding) { return binding.wasUndefined = true; } );\n\n\t\tif ( node.checked ) {\n\t\t\tvar valueSoFar = this.group.getValue();\n\t\t\tvalueSoFar.push( this.element.getAttribute( 'value' ) );\n\n\t\t\tthis.group.model.set( valueSoFar );\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.unbind = function unbind () {\n\t\tthis.group.remove( this );\n\t};\n\n\tCheckboxNameBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.element.node;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\tCheckboxNameBinding.prototype.arrayContains = function arrayContains ( selectValue, optionValue ) {\n\t\tvar this$1 = this;\n\n\t\tvar i = selectValue.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this$1.element.compare( optionValue, selectValue[i] ) ) { return true; }\n\t\t}\n\t\treturn false;\n\t};\n\n\tCheckboxNameBinding.prototype.removeFromArray = function removeFromArray ( array, item ) {\n\t\tvar this$1 = this;\n\n\t\tif (!array) { return; }\n\t\tvar i = array.length;\n\t\twhile( i-- ) {\n\t\t\tif ( this$1.element.compare( item, array[i] ) ) {\n\t\t\t\tarray.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t};\n\n\treturn CheckboxNameBinding;\n}(Binding));\n\nvar ContentEditableBinding = (function (Binding$$1) {\n\tfunction ContentEditableBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) ContentEditableBinding.__proto__ = Binding$$1;\n\tContentEditableBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tContentEditableBinding.prototype.constructor = ContentEditableBinding;\n\n\tContentEditableBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn this.element.fragment ? this.element.fragment.toString() : '';\n\t};\n\n\tContentEditableBinding.prototype.getValue = function getValue () {\n\t\treturn this.element.node.innerHTML;\n\t};\n\n\tContentEditableBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\t\tnode.addEventListener( 'blur', handleDomEvent, false );\n\n\t\tif ( !this.ractive.lazy ) {\n\t\t\tnode.addEventListener( 'input', handleDomEvent, false );\n\n\t\t\tif ( node.attachEvent ) {\n\t\t\t\tnode.addEventListener( 'keyup', handleDomEvent, false );\n\t\t\t}\n\t\t}\n\t};\n\n\tContentEditableBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.innerHTML );\n\t};\n\n\tContentEditableBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.node;\n\n\t\tnode.removeEventListener( 'blur', handleDomEvent, false );\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'input', handleDomEvent, false );\n\t\tnode.removeEventListener( 'keyup', handleDomEvent, false );\n\t};\n\n\treturn ContentEditableBinding;\n}(Binding));\n\nfunction handleBlur () {\n\thandleDomEvent.call( this );\n\n\tvar value = this._ractive.binding.model.get();\n\tthis.value = value == undefined ? '' : value;\n}\n\nfunction handleDelay ( delay ) {\n\tvar timeout;\n\n\treturn function () {\n\t\tvar this$1 = this;\n\n\t\tif ( timeout ) { clearTimeout( timeout ); }\n\n\t\ttimeout = setTimeout( function () {\n\t\t\tvar binding = this$1._ractive.binding;\n\t\t\tif ( binding.rendered ) { handleDomEvent.call( this$1 ); }\n\t\t\ttimeout = null;\n\t\t}, delay );\n\t};\n}\n\nvar GenericBinding = (function (Binding$$1) {\n\tfunction GenericBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) GenericBinding.__proto__ = Binding$$1;\n\tGenericBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tGenericBinding.prototype.constructor = GenericBinding;\n\n\tGenericBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn '';\n\t};\n\n\tGenericBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.value;\n\t};\n\n\tGenericBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\t// any lazy setting for this element overrides the root\n\t\t// if the value is a number, it's a timeout\n\t\tvar lazy = this.ractive.lazy;\n\t\tvar timeout = false;\n\n\t\tif ( 'lazy' in this.element ) {\n\t\t\tlazy = this.element.lazy;\n\t\t}\n\n\t\tif ( isNumeric( lazy ) ) {\n\t\t\ttimeout = +lazy;\n\t\t\tlazy = false;\n\t\t}\n\n\t\tthis.handler = timeout ? handleDelay( timeout ) : handleDomEvent;\n\n\t\tvar node = this.node;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( !lazy ) {\n\t\t\tnode.addEventListener( 'input', this.handler, false );\n\n\t\t\tif ( node.attachEvent ) {\n\t\t\t\tnode.addEventListener( 'keyup', this.handler, false );\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener( 'blur', handleBlur, false );\n\t};\n\n\tGenericBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.element.node;\n\t\tthis.rendered = false;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'input', this.handler, false );\n\t\tnode.removeEventListener( 'keyup', this.handler, false );\n\t\tnode.removeEventListener( 'blur', handleBlur, false );\n\t};\n\n\treturn GenericBinding;\n}(Binding));\n\nvar FileBinding = (function (GenericBinding$$1) {\n\tfunction FileBinding () {\n\t\tGenericBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( GenericBinding$$1 ) FileBinding.__proto__ = GenericBinding$$1;\n\tFileBinding.prototype = Object.create( GenericBinding$$1 && GenericBinding$$1.prototype );\n\tFileBinding.prototype.constructor = FileBinding;\n\n\tFileBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn undefined;\n\t};\n\n\tFileBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.files;\n\t};\n\n\tFileBinding.prototype.render = function render () {\n\t\tthis.element.lazy = false;\n\t\tGenericBinding$$1.prototype.render.call(this);\n\t};\n\n\tFileBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.files );\n\t};\n\n\treturn FileBinding;\n}(GenericBinding));\n\nfunction getSelectedOptions ( select ) {\n\treturn select.selectedOptions\n\t\t? toArray( select.selectedOptions )\n\t\t: select.options\n\t\t\t? toArray( select.options ).filter( function (option) { return option.selected; } )\n\t\t\t: [];\n}\n\nvar MultipleSelectBinding = (function (Binding$$1) {\n\tfunction MultipleSelectBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) MultipleSelectBinding.__proto__ = Binding$$1;\n\tMultipleSelectBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tMultipleSelectBinding.prototype.constructor = MultipleSelectBinding;\n\n\tMultipleSelectBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn this.element.options\n\t\t\t.filter( function (option) { return option.getAttribute( 'selected' ); } )\n\t\t\t.map( function (option) { return option.getAttribute( 'value' ); } );\n\t};\n\n\tMultipleSelectBinding.prototype.getValue = function getValue () {\n\t\tvar options = this.element.node.options;\n\t\tvar len = options.length;\n\n\t\tvar selectedValues = [];\n\n\t\tfor ( var i = 0; i < len; i += 1 ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( option.selected ) {\n\t\t\t\tvar optionValue = option._ractive ? option._ractive.value : option.value;\n\t\t\t\tselectedValues.push( optionValue );\n\t\t\t}\n\t\t}\n\n\t\treturn selectedValues;\n\t};\n\n\tMultipleSelectBinding.prototype.handleChange = function handleChange () {\n\t\tvar attribute = this.attribute;\n\t\tvar previousValue = attribute.getValue();\n\n\t\tvar value = this.getValue();\n\n\t\tif ( previousValue === undefined || !arrayContentsMatch( value, previousValue ) ) {\n\t\t\tBinding$$1.prototype.handleChange.call(this);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tMultipleSelectBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.model.get() === undefined ) {\n\t\t\t// get value from DOM, if possible\n\t\t\tthis.handleChange();\n\t\t}\n\t};\n\n\tMultipleSelectBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar selectedOptions = getSelectedOptions( node );\n\t\tvar i = selectedOptions.length;\n\t\tvar result = new Array( i );\n\n\t\twhile ( i-- ) {\n\t\t\tvar option = selectedOptions[i];\n\t\t\tresult[i] = option._ractive ? option._ractive.value : option.value;\n\t\t}\n\n\t\tthis.model.set( result );\n\t};\n\n\tMultipleSelectBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t};\n\n\treturn MultipleSelectBinding;\n}(Binding));\n\nvar NumericBinding = (function (GenericBinding$$1) {\n\tfunction NumericBinding () {\n\t\tGenericBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( GenericBinding$$1 ) NumericBinding.__proto__ = GenericBinding$$1;\n\tNumericBinding.prototype = Object.create( GenericBinding$$1 && GenericBinding$$1.prototype );\n\tNumericBinding.prototype.constructor = NumericBinding;\n\n\tNumericBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn undefined;\n\t};\n\n\tNumericBinding.prototype.getValue = function getValue () {\n\t\tvar value = parseFloat( this.node.value );\n\t\treturn isNaN( value ) ? undefined : value;\n\t};\n\n\tNumericBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar value = parseFloat( node.value );\n\t\tif ( !isNaN( value ) ) { this.model.set( value ); }\n\t};\n\n\treturn NumericBinding;\n}(GenericBinding));\n\nvar siblings = {};\n\nfunction getSiblings ( hash ) {\n\treturn siblings[ hash ] || ( siblings[ hash ] = [] );\n}\n\nvar RadioBinding = (function (Binding$$1) {\n\tfunction RadioBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'checked' );\n\n\t\tthis.siblings = getSiblings( this.ractive._guid + this.element.getAttribute( 'name' ) );\n\t\tthis.siblings.push( this );\n\t}\n\n\tif ( Binding$$1 ) RadioBinding.__proto__ = Binding$$1;\n\tRadioBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tRadioBinding.prototype.constructor = RadioBinding;\n\n\tRadioBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.checked;\n\t};\n\n\tRadioBinding.prototype.handleChange = function handleChange () {\n\t\trunloop.start( this.root );\n\n\t\tthis.siblings.forEach( function (binding) {\n\t\t\tbinding.model.set( binding.getValue() );\n\t\t});\n\n\t\trunloop.end();\n\t};\n\n\tRadioBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.node.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tRadioBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.checked );\n\t};\n\n\tRadioBinding.prototype.unbind = function unbind () {\n\t\tremoveFromArray$1( this.siblings, this );\n\t};\n\n\tRadioBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t\tthis.node.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\treturn RadioBinding;\n}(Binding));\n\nfunction getValue$2() {\n\tvar checked = this.bindings.filter( function (b) { return b.node.checked; } );\n\tif ( checked.length > 0 ) {\n\t\treturn checked[0].element.getAttribute( 'value' );\n\t}\n}\n\nvar RadioNameBinding = (function (Binding$$1) {\n\tfunction RadioNameBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'name' );\n\n\t\tthis.group = getBindingGroup( 'radioname', this.model, getValue$2 );\n\t\tthis.group.add( this );\n\n\t\tif ( element.checked ) {\n\t\t\tthis.group.value = this.getValue();\n\t\t}\n\t}\n\n\tif ( Binding$$1 ) RadioNameBinding.__proto__ = Binding$$1;\n\tRadioNameBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tRadioNameBinding.prototype.constructor = RadioNameBinding;\n\n\tRadioNameBinding.prototype.bind = function bind () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.group.bound ) {\n\t\t\tthis.group.bind();\n\t\t}\n\n\t\t// update name keypath when necessary\n\t\tthis.nameAttributeBinding = {\n\t\t\thandleChange: function () { return this$1.node.name = \""{{\"" + (this$1.model.getKeypath()) + \""}}\""; }\n\t\t};\n\n\t\tthis.model.getKeypathModel().register( this.nameAttributeBinding );\n\t};\n\n\tRadioNameBinding.prototype.getInitialValue = function getInitialValue () {\n\t\tif ( this.element.getAttribute( 'checked' ) ) {\n\t\t\treturn this.element.getAttribute( 'value' );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.getValue = function getValue$1 () {\n\t\treturn this.element.getAttribute( 'value' );\n\t};\n\n\tRadioNameBinding.prototype.handleChange = function handleChange () {\n\t\t// If this <input> is the one that's checked, then the value of its\n\t\t// `name` model gets set to its value\n\t\tif ( this.node.checked ) {\n\t\t\tthis.group.value = this.getValue();\n\t\t\tBinding$$1.prototype.handleChange.call(this);\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.lastVal = function lastVal ( setting, value ) {\n\t\tif ( !this.group ) { return; }\n\t\tif ( setting ) { this.group.lastValue = value; }\n\t\telse { return this.group.lastValue; }\n\t};\n\n\tRadioNameBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tnode.name = \""{{\"" + (this.model.getKeypath()) + \""}}\"";\n\t\tnode.checked = this.element.compare ( this.model.get(), this.element.getAttribute( 'value' ) );\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( node.attachEvent ) {\n\t\t\tnode.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tif ( node.checked ) {\n\t\t\tthis.group.model.set( this.element.getAttribute( 'value' ) );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.unbind = function unbind () {\n\t\tthis.group.remove( this );\n\n\t\tthis.model.getKeypathModel().unregister( this.nameAttributeBinding );\n\t};\n\n\tRadioNameBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.node;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\treturn RadioNameBinding;\n}(Binding));\n\nvar SingleSelectBinding = (function (Binding$$1) {\n\tfunction SingleSelectBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) SingleSelectBinding.__proto__ = Binding$$1;\n\tSingleSelectBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tSingleSelectBinding.prototype.constructor = SingleSelectBinding;\n\n\tSingleSelectBinding.prototype.forceUpdate = function forceUpdate () {\n\t\tvar this$1 = this;\n\n\t\tvar value = this.getValue();\n\n\t\tif ( value !== undefined ) {\n\t\t\tthis.attribute.locked = true;\n\t\t\trunloop.scheduleTask( function () { return this$1.attribute.locked = false; } );\n\t\t\tthis.model.set( value );\n\t\t}\n\t};\n\n\tSingleSelectBinding.prototype.getInitialValue = function getInitialValue () {\n\t\tif ( this.element.getAttribute( 'value' ) !== undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar options = this.element.options;\n\t\tvar len = options.length;\n\n\t\tif ( !len ) { return; }\n\n\t\tvar value;\n\t\tvar optionWasSelected;\n\t\tvar i = len;\n\n\t\t// take the final selected option...\n\t\twhile ( i-- ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( option.getAttribute( 'selected' ) ) {\n\t\t\t\tif ( !option.getAttribute( 'disabled' ) ) {\n\t\t\t\t\tvalue = option.getAttribute( 'value' );\n\t\t\t\t}\n\n\t\t\t\toptionWasSelected = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// or the first non-disabled option, if none are selected\n\t\tif ( !optionWasSelected ) {\n\t\t\twhile ( ++i < len ) {\n\t\t\t\tif ( !options[i].getAttribute( 'disabled' ) ) {\n\t\t\t\t\tvalue = options[i].getAttribute( 'value' );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This is an optimisation (aka hack) that allows us to forgo some\n\t\t// other more expensive work\n\t\t// TODO does it still work? seems at odds with new architecture\n\t\tif ( value !== undefined ) {\n\t\t\tthis.element.attributeByName.value.value = value;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\tSingleSelectBinding.prototype.getValue = function getValue () {\n\t\tvar options = this.node.options;\n\t\tvar len = options.length;\n\n\t\tvar i;\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( options[i].selected && !options[i].disabled ) {\n\t\t\t\treturn option._ractive ? option._ractive.value : option.value;\n\t\t\t}\n\t\t}\n\t};\n\n\tSingleSelectBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\t};\n\n\tSingleSelectBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar option = getSelectedOptions( node )[0];\n\t\tthis.model.set( option._ractive ? option._ractive.value : option.value );\n\t};\n\n\tSingleSelectBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t};\n\n\treturn SingleSelectBinding;\n}(Binding));\n\nfunction isBindable ( attribute ) {\n\n\t// The fragment must be a single non-string fragment\n\tif ( !attribute || !attribute.template.f || !attribute.template.f.length === 1 || attribute.template.f[0].s ) { return false; }\n\n\t// A binding is an interpolator `{{ }}`, yey.\n\tif ( attribute.template.f[0].t === INTERPOLATOR ) { return true; }\n\n\t// The above is probably the only true case. For the rest, show an appropriate\n\t// warning before returning false.\n\n\t// You can't bind a triple curly. HTML values on an attribute makes no sense.\n\tif ( attribute.template.f[0].t === TRIPLE ) { warnIfDebug( 'It is not possible create a binding using a triple mustache.' ); }\n\n\treturn false;\n}\n\nfunction selectBinding ( element ) {\n\tvar name = element.name;\n\tvar attributes = element.attributeByName;\n\tvar isBindableByValue = isBindable( attributes.value );\n\tvar isBindableByContentEditable = isBindable( attributes.contenteditable );\n\tvar isContentEditable =  element.getAttribute( 'contenteditable' );\n\n\t// contenteditable\n\t// Bind if the contenteditable is true or a binding that may become true.\n\tif ( ( isContentEditable || isBindableByContentEditable ) && isBindableByValue ) { return ContentEditableBinding; }\n\n\t// <input>\n\tif ( name === 'input' ) {\n\t\tvar type = element.getAttribute( 'type' );\n\n\t\tif ( type === 'radio' ) {\n\t\t\tvar isBindableByName = isBindable( attributes.name );\n\t\t\tvar isBindableByChecked = isBindable( attributes.checked );\n\n\t\t\t// For radios we can either bind the name or checked, but not both.\n\t\t\t// Name binding is handed instead.\n\t\t\tif ( isBindableByName && isBindableByChecked ) {\n\t\t\t\twarnIfDebug( 'A radio input can have two-way binding on its name attribute, or its checked attribute - not both', { ractive: element.root });\n\t\t\t\treturn RadioNameBinding;\n\t\t\t}\n\n\t\t\tif ( isBindableByName ) { return RadioNameBinding; }\n\n\t\t\tif ( isBindableByChecked ) { return RadioBinding; }\n\n\t\t\t// Dead end. Unknown binding on radio input.\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type === 'checkbox' ) {\n\t\t\tvar isBindableByName$1 = isBindable( attributes.name );\n\t\t\tvar isBindableByChecked$1 = isBindable( attributes.checked );\n\n\t\t\t// A checkbox with bindings for both name and checked. Checked treated as\n\t\t\t// the checkbox value, name is treated as a regular binding.\n\t\t\t//\n\t\t\t// See https://github.com/ractivejs/ractive/issues/1749\n\t\t\tif ( isBindableByName$1 && isBindableByChecked$1 ) { return CheckboxBinding; }\n\n\t\t\tif ( isBindableByName$1 ) { return CheckboxNameBinding; }\n\n\t\t\tif ( isBindableByChecked$1 ) { return CheckboxBinding; }\n\n\t\t\t// Dead end. Unknown binding on checkbox input.\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type === 'file' && isBindableByValue ) { return FileBinding; }\n\n\t\tif ( type === 'number' && isBindableByValue ) { return NumericBinding; }\n\n\t\tif ( type === 'range' && isBindableByValue ) { return NumericBinding; }\n\n\t\t// Some input of unknown type (browser usually falls back to text).\n\t\tif ( isBindableByValue ) { return GenericBinding; }\n\n\t\t// Dead end. Some unknown input and an unbindable.\n\t\treturn null;\n\t}\n\n\t// <select>\n\tif ( name === 'select' && isBindableByValue ){\n\t\treturn element.getAttribute( 'multiple' ) ? MultipleSelectBinding : SingleSelectBinding;\n\t}\n\n\t// <textarea>\n\tif ( name === 'textarea' && isBindableByValue ) { return GenericBinding; }\n\n\t// Dead end. Some unbindable element.\n\treturn null;\n}\n\nvar DOMEvent = function DOMEvent ( name, owner ) {\n\tif ( name.indexOf( '*' ) !== -1 ) {\n\t\tfatal( (\""Only component proxy-events may contain \\\""*\\\"" wildcards, <\"" + (owner.name) + \"" on-\"" + name + \""=\\\""...\\\""/> is not valid\"") );\n\t}\n\n\tthis.name = name;\n\tthis.owner = owner;\n\tthis.node = null;\n\tthis.handler = null;\n};\n\nDOMEvent.prototype.listen = function listen ( directive ) {\n\t\tvar node = this.node = this.owner.node;\n\tvar name = this.name;\n\n\t// this is probably a custom event fired from a decorator or manually\n\t\tif ( !( (\""on\"" + name) in node ) ) { return; }\n\n\tnode.addEventListener( name, this.handler = function( event ) {\n\t\tdirective.fire({\n\t\t\tnode: node,\n\t\t\toriginal: event,\n\t\t\tname: name\n\t\t});\n\t}, false );\n};\n\nDOMEvent.prototype.unlisten = function unlisten () {\n\tif ( this.handler ) { this.node.removeEventListener( this.name, this.handler, false ); }\n};\n\nvar CustomEvent = function CustomEvent ( eventPlugin, owner, name ) {\n\tthis.eventPlugin = eventPlugin;\n\tthis.owner = owner;\n\tthis.name = name;\n\tthis.handler = null;\n};\n\nCustomEvent.prototype.listen = function listen ( directive ) {\n\t\tvar this$1 = this;\n\n\tvar node = this.owner.node;\n\n\tthis.handler = this.eventPlugin( node, function ( event ) {\n\t\t\tif ( event === void 0 ) event = {};\n\n\t\tevent.name = this$1.name;\n\t\t\tevent.node = event.node || node;\n\t\t\tdirective.fire( event );\n\t});\n};\n\nCustomEvent.prototype.unlisten = function unlisten () {\n\tthis.handler.teardown();\n};\n\nvar RactiveEvent = function RactiveEvent ( component, name ) {\n\tthis.component = component;\n\tthis.name = name;\n\tthis.handler = null;\n};\n\nRactiveEvent.prototype.listen = function listen ( directive ) {\n\tvar ractive = this.component.instance;\n\n\tthis.handler = ractive.on( this.name, function () {\n\t\tvar event;\n\n\t\t// semi-weak test, but what else? tag the event obj ._isEvent ?\n\t\tif ( arguments.length && arguments[0] && arguments[0].node ) {\n\t\t\tevent = Array.prototype.shift.call( arguments );\n\t\t\tevent.component = ractive;\n\t\t}\n\n\t\tvar args = Array.prototype.slice.call( arguments );\n\t\tdirective.fire( event, args );\n\n\t\t// cancel bubbling\n\t\treturn false;\n\t});\n};\n\nRactiveEvent.prototype.unlisten = function unlisten () {\n\tthis.handler.cancel();\n};\n\nvar specialPattern = /^(event|arguments)(\\..+)?$/;\nvar dollarArgsPattern = /^\\$(\\d+)(\\..+)?$/;\n\nvar DelegateProxy = {\n\tfire: function fire ( event, passedArgs ) {\n\t\tif ( passedArgs === void 0 ) passedArgs = [];\n\n\t\tif ( event && event.original ) {\n\t\t\tvar ev = event.original;\n\n\t\t\t// TODO if IE<9 needs to be supported here, could probably walk to the element with a ractive proxy with a delegates property\n\t\t\tvar end = ev.currentTarget;\n\t\t\tvar node = ev.target;\n\t\t\tvar name = event.name;\n\t\t\tvar bubble = true;\n\n\t\t\t// starting with the origin node, walk up the DOM looking for ractive nodes with a matching event listener\n\t\t\twhile ( bubble && node !== end ) {\n\t\t\t\tvar el = node._ractive && node._ractive.proxy;\n\n\t\t\t\tif ( el ) {\n\t\t\t\t\t// set up the context for the handler\n\t\t\t\t\tevent.node = el.node;\n\t\t\t\t\tevent.name = name;\n\n\t\t\t\t\tel.events.forEach( function (ev) {\n\t\t\t\t\t\tif ( ~ev.template.n.indexOf( name ) ) {\n\t\t\t\t\t\t\tbubble = ev.fire( event, passedArgs ) !== false && bubble;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode = node.parentNode;\n\t\t\t}\n\n\t\t\treturn bubble;\n\t\t}\n\t}\n};\n\nvar EventDirective = function EventDirective ( options ) {\n\tvar this$1 = this;\n\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment, true );\n\tthis.template = options.template;\n\tthis.parentFragment = options.parentFragment;\n\tthis.ractive = options.parentFragment.ractive;\n\tvar delegate = this.delegate = this.ractive.delegate && options.parentFragment.delegate;\n\tthis.events = [];\n\n\tif ( this.element.type === COMPONENT || this.element.type === ANCHOR ) {\n\t\tthis.template.n.forEach( function (n) {\n\t\t\tthis$1.events.push( new RactiveEvent( this$1.element, n ) );\n\t\t});\n\t} else {\n\t\t// make sure the delegate element has a storag object\n\t\tif ( delegate && !delegate.delegates ) { delegate.delegates = {}; }\n\n\t\tthis.template.n.forEach( function (n) {\n\t\t\tvar fn = findInViewHierarchy( 'events', this$1.ractive, n );\n\t\t\tif ( fn ) {\n\t\t\t\tthis$1.events.push( new CustomEvent( fn, this$1.element, n ) );\n\t\t\t} else {\n\t\t\t\tif ( delegate ) {\n\t\t\t\t\tif ( !delegate.delegates[n] ) {\n\t\t\t\t\t\tvar ev = new DOMEvent( n, delegate );\n\t\t\t\t\t\tdelegate.delegates[n] = ev;\n\t\t\t\t\t\t// if the element is already rendered, render the event too\n\t\t\t\t\t\tif ( delegate.rendered ) { ev.listen( DelegateProxy ); }\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis$1.events.push( new DOMEvent( n, this$1.element ) );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// method calls\n\tthis.models = null;\n};\n\nEventDirective.prototype.bind = function bind () {\n\taddToArray( this.element.events, this );\n\n\tsetupArgsFn( this, this.template );\n\tif ( !this.fn ) { this.action = this.template.f; }\n};\n\nEventDirective.prototype.destroyed = function destroyed () {\n\tthis.events.forEach( function (e) { return e.unlisten(); } );\n};\n\nEventDirective.prototype.fire = function fire ( event, passedArgs ) {\n\t\tif ( passedArgs === void 0 ) passedArgs = [];\n\n\t// augment event object\n\tif ( event ) {\n\t\t   if ( !event.hasOwnProperty( 'proxy' ) ) { addHelpers( event, this.owner ); }\n\t\t   else { event.proxy = this.owner; }\n\t}\n\n\tif ( this.fn ) {\n\t\tvar values = [];\n\n\t\tif ( event ) { passedArgs.unshift( event ); }\n\n\t\tvar models = resolveArgs( this, this.template, this.parentFragment, {\n\t\t\tspecialRef: function specialRef ( ref ) {\n\t\t\t\tvar specialMatch = specialPattern.exec( ref );\n\t\t\t\tif ( specialMatch ) {\n\t\t\t\t\t// on-click=\""foo(event.node)\""\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspecial: specialMatch[1],\n\t\t\t\t\t\tkeys: specialMatch[2] ? splitKeypath( specialMatch[2].substr(1) ) : []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvar dollarMatch = dollarArgsPattern.exec( ref );\n\t\t\t\tif ( dollarMatch ) {\n\t\t\t\t\t// on-click=\""foo($1)\""\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspecial: 'arguments',\n\t\t\t\t\t\tkeys: [ dollarMatch[1] - 1 ].concat( dollarMatch[2] ? splitKeypath( dollarMatch[2].substr( 1 ) ) : [] )\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( models ) {\n\t\t\tmodels.forEach( function (model) {\n\t\t\t\tif ( !model ) { return values.push( undefined ); }\n\n\t\t\t\tif ( model.special ) {\n\t\t\t\t\tvar obj = model.special === 'event' ? event : passedArgs;\n\t\t\t\t\tvar keys = model.keys.slice();\n\n\t\t\t\t\twhile ( keys.length ) { obj = obj[ keys.shift() ]; }\n\t\t\t\t\treturn values.push( obj );\n\t\t\t\t}\n\n\t\t\t\tif ( model.wrapper ) {\n\t\t\t\t\treturn values.push( model.wrapperValue );\n\t\t\t\t}\n\n\t\t\t\tvalues.push( model.get() );\n\t\t\t});\n\t\t}\n\n\t\t// make event available as `this.event`\n\t\tvar ractive = this.ractive;\n\t\tvar oldEvent = ractive.event;\n\n\t\tractive.event = event;\n\t\tvar result = this.fn.apply( ractive, values ).pop();\n\n\t\t// Auto prevent and stop if return is explicitly false\n\t\tif ( result === false ) {\n\t\t\tvar original = event ? event.original : undefined;\n\t\t\tif ( original ) {\n\t\t\t\toriginal.preventDefault && original.preventDefault();\n\t\t\t\toriginal.stopPropagation && original.stopPropagation();\n\t\t\t} else {\n\t\t\t\twarnOnceIfDebug( (\""handler '\"" + (this.template.n.join( ' ' )) + \""' returned false, but there is no event available to cancel\"") );\n\t\t\t}\n\t\t}\n\n\t\tractive.event = oldEvent;\n\n\t\treturn result;\n\t}\n\n\telse {\n\t\tvar args = [];\n\t\tif ( passedArgs.length ) { args = args.concat( passedArgs ); }\n\t\tif ( event ) { event.name = this.action; }\n\n\t\treturn fireEvent( this.ractive, this.action, {\n\t\t\tevent: event,\n\t\t\targs: args\n\t\t});\n\t}\n};\n\nEventDirective.prototype.handleChange = function handleChange () {};\n\nEventDirective.prototype.render = function render () {\n\t\tvar this$1 = this;\n\n\t// render events after everything else, so they fire after bindings\n\trunloop.scheduleTask( function () { return this$1.events.forEach( function (e) { return e.listen( this$1 ); }, true ); } );\n};\n\nEventDirective.prototype.toString = function toString () { return ''; };\n\nEventDirective.prototype.unbind = function unbind () {\n\tremoveFromArray$1( this.element.events, this );\n};\n\nEventDirective.prototype.unrender = function unrender () {\n\tthis.events.forEach( function (e) { return e.unlisten(); } );\n};\n\nEventDirective.prototype.update = noop;\n\nfunction makeDirty$2 ( query ) {\n\tquery.makeDirty();\n}\n\nvar endsWithSemi = /;\\s*$/;\n\nvar Element = (function (ContainerItem$$1) {\n\tfunction Element ( options ) {\n\t\tvar this$1 = this;\n\n\t\tContainerItem$$1.call( this, options );\n\n\t\tthis.liveQueries = []; // TODO rare case. can we handle differently?\n\n\t\tthis.name = options.template.e.toLowerCase();\n\t\tthis.isVoid = voidElementNames.test( this.name );\n\n\t\t// find parent element\n\t\tthis.parent = findElement( this.parentFragment, false );\n\n\t\tif ( this.parent && this.parent.name === 'option' ) {\n\t\t\tthrow new Error( (\""An <option> element cannot contain other elements (encountered <\"" + (this.name) + \"">)\"") );\n\t\t}\n\n\t\tthis.decorators = [];\n\t\tthis.events = [];\n\n\t\t// create attributes\n\t\tthis.attributeByName = {};\n\n\t\tthis.attributes = [];\n\t\tvar leftovers = [];\n\t\t( this.template.m || [] ).forEach( function (template) {\n\t\t\tswitch ( template.t ) {\n\t\t\t\tcase ATTRIBUTE:\n\t\t\t\tcase BINDING_FLAG:\n\t\t\t\tcase DECORATOR:\n\t\t\t\tcase EVENT:\n\t\t\t\tcase TRANSITION:\n\t\t\t\t\tthis$1.attributes.push( createItem({\n\t\t\t\t\t\towner: this$1,\n\t\t\t\t\t\tparentFragment: this$1.parentFragment,\n\t\t\t\t\t\ttemplate: template\n\t\t\t\t\t}) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase DELEGATE_FLAG:\n\t\t\t\t  this$1.delegate = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tleftovers.push( template );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif ( leftovers.length ) {\n\t\t\tthis.attributes.push( new ConditionalAttribute({\n\t\t\t\towner: this,\n\t\t\t\tparentFragment: this.parentFragment,\n\t\t\t\ttemplate: leftovers\n\t\t\t}) );\n\t\t}\n\n\t\tthis.attributes.sort( sortAttributes );\n\n\t\t// create children\n\t\tif ( options.template.f && !options.deferContent ) {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\ttemplate: options.template.f,\n\t\t\t\towner: this,\n\t\t\t\tcssIds: null\n\t\t\t});\n\t\t}\n\n\t\tthis.binding = null; // filled in later\n\t}\n\n\tif ( ContainerItem$$1 ) Element.__proto__ = ContainerItem$$1;\n\tElement.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tElement.prototype.constructor = Element;\n\n\tElement.prototype.bind = function bind$1 () {\n\t\tthis.attributes.binding = true;\n\t\tthis.attributes.forEach( bind$1$1 );\n\t\tthis.attributes.binding = false;\n\n\t\tif ( this.fragment ) { this.fragment.bind(); }\n\n\t\t// create two-way binding if necessary\n\t\tif ( !this.binding ) { this.recreateTwowayBinding(); }\n\t};\n\n\tElement.prototype.createTwowayBinding = function createTwowayBinding () {\n\t\tif ( 'twoway' in this ? this.twoway : this.ractive.twoway ) {\n\t\t\tvar Binding = selectBinding( this );\n\t\t\tif ( Binding ) {\n\t\t\t\tvar binding = new Binding( this );\n\t\t\t\tif ( binding && binding.model ) { return binding; }\n\t\t\t}\n\t\t}\n\t};\n\n\tElement.prototype.destroyed = function destroyed$1 () {\n\t\tvar this$1 = this;\n\n\t\tthis.attributes.forEach( destroyed$1$1 );\n\t\tfor ( var ev in this.delegates ) {\n\t\t\tthis$1.delegates[ev].unlisten();\n\t\t}\n\t\tif ( this.fragment ) { this.fragment.destroyed(); }\n\t};\n\n\tElement.prototype.detach = function detach () {\n\t\t// if this element is no longer rendered, the transitions are complete and the attributes can be torn down\n\t\tif ( !this.rendered ) { this.destroyed(); }\n\n\t\treturn detachNode( this.node );\n\t};\n\n\tElement.prototype.find = function find ( selector, options ) {\n\t\tif ( this.node && matches( this.node, selector ) ) { return this.node; }\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.find( selector, options );\n\t\t}\n\t};\n\n\tElement.prototype.findAll = function findAll ( selector, query ) {\n\t\t// Add this node to the query, if applicable, and register the\n\t\t// query on this element\n\t\tvar matches$$1 = query.test( this.node );\n\t\tif ( matches$$1 ) {\n\t\t\tquery.add( this.node );\n\t\t\tif ( query.live ) { this.liveQueries.push( query ); }\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAll( selector, query );\n\t\t}\n\t};\n\n\tElement.prototype.findNextNode = function findNextNode () {\n\t\treturn null;\n\t};\n\n\tElement.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tElement.prototype.getAttribute = function getAttribute ( name ) {\n\t\tvar attribute = this.attributeByName[ name ];\n\t\treturn attribute ? attribute.getValue() : undefined;\n\t};\n\n\tElement.prototype.recreateTwowayBinding = function recreateTwowayBinding () {\n\t\tif ( this.binding ) {\n\t\t\tthis.binding.unbind();\n\t\t\tthis.binding.unrender();\n\t\t}\n\n\t\tif ( this.binding = this.createTwowayBinding() ) {\n\t\t\tthis.binding.bind();\n\t\t\tif ( this.rendered ) { this.binding.render(); }\n\t\t}\n\t};\n\n\tElement.prototype.removeFromQuery = function removeFromQuery ( query ) {\n\t\tquery.remove( this.node );\n\t\tremoveFromArray$1( this.liveQueries, query );\n\t};\n\n\tElement.prototype.render = function render$1 ( target, occupants ) {\n\t\tvar this$1 = this;\n\n\t\t// TODO determine correct namespace\n\t\tthis.namespace = getNamespace( this );\n\n\t\tvar node;\n\t\tvar existing = false;\n\n\t\tif ( occupants ) {\n\t\t\tvar n;\n\t\t\twhile ( ( n = occupants.shift() ) ) {\n\t\t\t\tif ( n.nodeName.toUpperCase() === this$1.template.e.toUpperCase() && n.namespaceURI === this$1.namespace ) {\n\t\t\t\t\tthis$1.node = node = n;\n\t\t\t\t\texisting = true;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tdetachNode( n );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !node ) {\n\t\t\tvar name = this.template.e;\n\t\t\tnode = createElement( this.namespace === html ? name.toLowerCase() : name, this.namespace, this.getAttribute( 'is' ) );\n\t\t\tthis.node = node;\n\t\t}\n\n\t\t// tie the node to this vdom element\n\t\tObject.defineProperty( node, '_ractive', {\n\t\t\tvalue: {\n\t\t\t\tproxy: this\n\t\t\t}\n\t\t});\n\n\t\t// Is this a top-level node of a component? If so, we may need to add\n\t\t// a data-ractive-css attribute, for CSS encapsulation\n\t\tif ( this.parentFragment.cssIds ) {\n\t\t\tnode.setAttribute( 'data-ractive-css', this.parentFragment.cssIds.map( function (x) { return (\""{\"" + x + \""}\""); } ).join( ' ' ) );\n\t\t}\n\n\t\tif ( existing && this.foundNode ) { this.foundNode( node ); }\n\n\t\t// register intro before rendering content so children can find the intro\n\t\tvar intro = this.intro;\n\t\tif ( intro && intro.shouldFire( 'intro' ) ) {\n\t\t\tintro.isIntro = true;\n\t\t\tintro.isOutro = false;\n\t\t\trunloop.registerTransition( intro );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tvar children = existing ? toArray( node.childNodes ) : undefined;\n\n\t\t\tthis.fragment.render( node, children );\n\n\t\t\t// clean up leftover children\n\t\t\tif ( children ) {\n\t\t\t\tchildren.forEach( detachNode );\n\t\t\t}\n\t\t}\n\n\t\tif ( existing ) {\n\t\t\t// store initial values for two-way binding\n\t\t\tif ( this.binding && this.binding.wasUndefined ) { this.binding.setFromNode( node ); }\n\t\t\t// remove unused attributes\n\t\t\tvar i = node.attributes.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar name$1 = node.attributes[i].name;\n\t\t\t\tif ( !( name$1 in this$1.attributeByName ) ){ node.removeAttribute( name$1 ); }\n\t\t\t}\n\t\t}\n\n\t\tthis.attributes.forEach( render$1$1 );\n\t\tif ( this.delegates ) {\n\t\t\tfor ( var ev in this.delegates ) {\n\t\t\t\tthis$1.delegates[ev].listen( DelegateProxy );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.binding ) { this.binding.render(); }\n\n\t\tupdateLiveQueries( this );\n\n\t\tif ( !existing ) {\n\t\t\ttarget.appendChild( node );\n\t\t}\n\n\t\tthis.rendered = true;\n\t};\n\n\tElement.prototype.shuffled = function shuffled () {\n\t\tthis.liveQueries.forEach( makeDirty$2 );\n\t\tContainerItem$$1.prototype.shuffled.call(this);\n\t};\n\n\tElement.prototype.toString = function toString () {\n\t\tvar tagName = this.template.e;\n\n\t\tvar attrs = this.attributes.map( stringifyAttribute ).join( '' );\n\n\t\t// Special case - selected options\n\t\tif ( this.name === 'option' && this.isSelected() ) {\n\t\t\tattrs += ' selected';\n\t\t}\n\n\t\t// Special case - two-way radio name bindings\n\t\tif ( this.name === 'input' && inputIsCheckedRadio( this ) ) {\n\t\t\tattrs += ' checked';\n\t\t}\n\n\t\t// Special case style and class attributes and directives\n\t\tvar style, cls;\n\t\tthis.attributes.forEach( function (attr) {\n\t\t\tif ( attr.name === 'class' ) {\n\t\t\t\tcls = ( cls || '' ) + ( cls ? ' ' : '' ) + safeAttributeString( attr.getString() );\n\t\t\t} else if ( attr.name === 'style' ) {\n\t\t\t\tstyle = ( style || '' ) + ( style ? ' ' : '' ) + safeAttributeString( attr.getString() );\n\t\t\t\tif ( style && !endsWithSemi.test( style ) ) { style += ';'; }\n\t\t\t} else if ( attr.style ) {\n\t\t\t\tstyle = ( style || '' ) + ( style ? ' ' : '' ) +  (attr.style) + \"": \"" + (safeAttributeString( attr.getString() )) + \"";\"";\n\t\t\t} else if ( attr.inlineClass && attr.getValue() ) {\n\t\t\t\tcls = ( cls || '' ) + ( cls ? ' ' : '' ) + attr.inlineClass;\n\t\t\t}\n\t\t});\n\t\t// put classes first, then inline style\n\t\tif ( style !== undefined ) { attrs = ' style' + ( style ? (\""=\\\""\"" + style + \""\\\""\"") : '' ) + attrs; }\n\t\tif ( cls !== undefined ) { attrs = ' class' + (cls ? (\""=\\\""\"" + cls + \""\\\""\"") : '') + attrs; }\n\n\t\tif ( this.parentFragment.cssIds ) {\n\t\t\tattrs += \"" data-ractive-css=\\\""\"" + (this.parentFragment.cssIds.map( function (x) { return (\""{\"" + x + \""}\""); } ).join( ' ' )) + \""\\\""\"";\n\t\t}\n\n\t\tvar str = \""<\"" + tagName + attrs + \"">\"";\n\n\t\tif ( this.isVoid ) { return str; }\n\n\t\t// Special case - textarea\n\t\tif ( this.name === 'textarea' && this.getAttribute( 'value' ) !== undefined ) {\n\t\t\tstr += escapeHtml( this.getAttribute( 'value' ) );\n\t\t}\n\n\t\t// Special case - contenteditable\n\t\telse if ( this.getAttribute( 'contenteditable' ) !== undefined ) {\n\t\t\tstr += ( this.getAttribute( 'value' ) || '' );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tstr += this.fragment.toString( !/^(?:script|style)$/i.test( this.template.e ) ); // escape text unless script/style\n\t\t}\n\n\t\tstr += \""</\"" + tagName + \"">\"";\n\t\treturn str;\n\t};\n\n\tElement.prototype.unbind = function unbind$1 () {\n\t\tthis.attributes.unbinding = true;\n\t\tthis.attributes.forEach( unbind$1$1 );\n\t\tthis.attributes.unbinding = false;\n\n\t\tif ( this.binding ) { this.binding.unbind(); }\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tElement.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.rendered ) { return; }\n\t\tthis.rendered = false;\n\n\t\t// unrendering before intro completed? complete it now\n\t\t// TODO should be an API for aborting transitions\n\t\tvar transition = this.intro;\n\t\tif ( transition && transition.complete ) { transition.complete(); }\n\n\t\t// Detach as soon as we can\n\t\tif ( this.name === 'option' ) {\n\t\t\t// <option> elements detach immediately, so that\n\t\t\t// their parent <select> element syncs correctly, and\n\t\t\t// since option elements can't have transitions anyway\n\t\t\tthis.detach();\n\t\t} else if ( shouldDestroy ) {\n\t\t\trunloop.detachWhenReady( this );\n\t\t}\n\n\t\t// outro transition\n\t\tvar outro = this.outro;\n\t\tif ( outro && outro.shouldFire( 'outro' ) ) {\n\t\t\toutro.isIntro = false;\n\t\t\toutro.isOutro = true;\n\t\t\trunloop.registerTransition( outro );\n\t\t}\n\n\t\tif ( this.fragment ) { this.fragment.unrender(); }\n\n\t\tif ( this.binding ) { this.binding.unrender(); }\n\n\t\tthis.liveQueries.forEach( function (query) { return query.remove( this$1.node ); } );\n\t\tthis.liveQueries = [];\n\t\t// TODO forms are a special case\n\t};\n\n\tElement.prototype.update = function update$1 () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tthis.attributes.forEach( update$1$1 );\n\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t}\n\t};\n\n\treturn Element;\n}(ContainerItem));\n\nvar toFront = [ 'min', 'max', 'class', 'type' ];\nfunction sortAttributes ( left, right ) {\n\tleft = left.name;\n\tright = right.name;\n\tvar l = left === 'value' ? 1 : ~toFront.indexOf( left );\n\tvar r = right === 'value' ? 1 : ~toFront.indexOf( right );\n\treturn l < r ? -1 : l > r ? 1 : 0;\n}\n\nfunction inputIsCheckedRadio ( element ) {\n\tvar nameAttr = element.attributeByName.name;\n\treturn element.getAttribute( 'type' ) === 'radio' &&\n\t\t( nameAttr || {} ).interpolator &&\n\t\telement.getAttribute( 'value' ) === nameAttr.interpolator.model.get();\n}\n\nfunction stringifyAttribute ( attribute ) {\n\tvar str = attribute.toString();\n\treturn str ? ' ' + str : '';\n}\n\nfunction getNamespace ( element ) {\n\t// Use specified namespace...\n\tvar xmlns$$1 = element.getAttribute( 'xmlns' );\n\tif ( xmlns$$1 ) { return xmlns$$1; }\n\n\t// ...or SVG namespace, if this is an <svg> element\n\tif ( element.name === 'svg' ) { return svg$1; }\n\n\tvar parent = element.parent;\n\n\tif ( parent ) {\n\t\t// ...or HTML, if the parent is a <foreignObject>\n\t\tif ( parent.name === 'foreignobject' ) { return html; }\n\n\t\t// ...or inherit from the parent node\n\t\treturn parent.node.namespaceURI;\n\t}\n\n\treturn element.ractive.el.namespaceURI;\n}\n\nvar Form = (function (Element$$1) {\n\tfunction Form ( options ) {\n\t\tElement$$1.call( this, options );\n\t\tthis.formBindings = [];\n\t}\n\n\tif ( Element$$1 ) Form.__proto__ = Element$$1;\n\tForm.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tForm.prototype.constructor = Form;\n\n\tForm.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.node.addEventListener( 'reset', handleReset, false );\n\t};\n\n\tForm.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tthis.node.removeEventListener( 'reset', handleReset, false );\n\t\tElement$$1.prototype.unrender.call( this, shouldDestroy );\n\t};\n\n\treturn Form;\n}(Element));\n\nfunction handleReset () {\n\tvar element = this._ractive.proxy;\n\n\trunloop.start();\n\telement.formBindings.forEach( updateModel$1 );\n\trunloop.end();\n}\n\nfunction updateModel$1 ( binding ) {\n\tbinding.model.set( binding.resetValue );\n}\n\nfunction progressiveText ( item, target, occupants, text ) {\n\tif ( occupants ) {\n\t\tvar n = occupants[0];\n\t\tif ( n && n.nodeType === 3 ) {\n\t\t\tvar idx = n.nodeValue.indexOf( text );\n\t\t\toccupants.shift();\n\n\t\t\tif ( idx === 0 ) {\n\t\t\t\tif ( n.nodeValue.length !== text.length ) {\n\t\t\t\t\toccupants.unshift( n.splitText( text.length ) );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tn.nodeValue = text;\n\t\t\t}\n\t\t} else {\n\t\t\tn = item.node = doc.createTextNode( text );\n\t\t\tif ( occupants[0] ) {\n\t\t\t\ttarget.insertBefore( n, occupants[0] );\n\t\t\t} else {\n\t\t\t\ttarget.appendChild( n );\n\t\t\t}\n\t\t}\n\n\t\titem.node = n;\n\t} else {\n\t\tif ( !item.node ) { item.node = doc.createTextNode( text ); }\n\t\ttarget.appendChild( item.node );\n\t}\n}\n\nvar Mustache = (function (Item$$1) {\n\tfunction Mustache ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.parentFragment = options.parentFragment;\n\t\tthis.template = options.template;\n\t\tthis.index = options.index;\n\t\tif ( options.owner ) { this.parent = options.owner; }\n\n\t\tthis.isStatic = !!options.template.s;\n\n\t\tthis.model = null;\n\t\tthis.dirty = false;\n\t}\n\n\tif ( Item$$1 ) Mustache.__proto__ = Item$$1;\n\tMustache.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tMustache.prototype.constructor = Mustache;\n\n\tMustache.prototype.bind = function bind () {\n\t\t// yield mustaches should resolve in container context\n\t\tvar start = this.containerFragment || this.parentFragment;\n\t\t// try to find a model for this view\n\t\tvar model = resolve$1( start, this.template );\n\n\t\tif ( model ) {\n\t\t\tvar value = model.get();\n\n\t\t\tif ( this.isStatic ) {\n\t\t\t\tthis.model = { get: function () { return value; } };\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmodel.register( this );\n\t\t\tthis.model = model;\n\t\t}\n\t};\n\n\tMustache.prototype.handleChange = function handleChange () {\n\t\tthis.bubble();\n\t};\n\n\tMustache.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tnext = rebindMatch( this.template, next, previous, this.parentFragment );\n\t\tif ( next === this.model ) { return false; }\n\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t}\n\t\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\t\tthis.model = next;\n\t\tif ( !safe ) { this.handleChange(); }\n\t\treturn true;\n\t};\n\n\tMustache.prototype.unbind = function unbind () {\n\t\tif ( !this.isStatic ) {\n\t\t\tthis.model && this.model.unregister( this );\n\t\t\tthis.model = undefined;\n\t\t}\n\t};\n\n\treturn Mustache;\n}(Item));\n\nvar MustacheContainer = (function (ContainerItem$$1) {\n\tfunction MustacheContainer ( options ) {\n\t\tContainerItem$$1.call( this, options );\n\t}\n\n\tif ( ContainerItem$$1 ) MustacheContainer.__proto__ = ContainerItem$$1;\n\tMustacheContainer.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tMustacheContainer.prototype.constructor = MustacheContainer;\n\n\treturn MustacheContainer;\n}(ContainerItem));\nvar proto$1 = MustacheContainer.prototype;\nvar mustache = Mustache.prototype;\nproto$1.bind = mustache.bind;\nproto$1.handleChange = mustache.handleChange;\nproto$1.rebind = mustache.rebind;\nproto$1.unbind = mustache.unbind;\n\nvar Interpolator = (function (Mustache$$1) {\n\tfunction Interpolator () {\n\t\tMustache$$1.apply(this, arguments);\n\t}\n\n\tif ( Mustache$$1 ) Interpolator.__proto__ = Mustache$$1;\n\tInterpolator.prototype = Object.create( Mustache$$1 && Mustache$$1.prototype );\n\tInterpolator.prototype.constructor = Interpolator;\n\n\tInterpolator.prototype.bubble = function bubble () {\n\t\tif ( this.owner ) { this.owner.bubble(); }\n\t\tMustache$$1.prototype.bubble.call(this);\n\t};\n\n\tInterpolator.prototype.detach = function detach () {\n\t\treturn detachNode( this.node );\n\t};\n\n\tInterpolator.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tInterpolator.prototype.getString = function getString () {\n\t\treturn this.model ? safeToStringValue( this.model.get() ) : '';\n\t};\n\n\tInterpolator.prototype.render = function render ( target, occupants ) {\n\t\tif ( inAttributes() ) { return; }\n\t\tvar value = this.getString();\n\n\t\tthis.rendered = true;\n\n\t\tprogressiveText( this, target, occupants, value );\n\t};\n\n\tInterpolator.prototype.toString = function toString ( escape ) {\n\t\tvar string = this.getString();\n\t\treturn escape ? escapeHtml( string ) : string;\n\t};\n\n\tInterpolator.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( shouldDestroy ) { this.detach(); }\n\t\tthis.rendered = false;\n\t};\n\n\tInterpolator.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.rendered ) {\n\t\t\t\tthis.node.data = this.getString();\n\t\t\t}\n\t\t}\n\t};\n\n\tInterpolator.prototype.valueOf = function valueOf () {\n\t\treturn this.model ? this.model.get() : undefined;\n\t};\n\n\treturn Interpolator;\n}(Mustache));\n\nvar Input = (function (Element$$1) {\n\tfunction Input () {\n\t\tElement$$1.apply(this, arguments);\n\t}\n\n\tif ( Element$$1 ) Input.__proto__ = Element$$1;\n\tInput.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tInput.prototype.constructor = Input;\n\n\tInput.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.node.defaultValue = this.node.value;\n\t};\n\tInput.prototype.compare = function compare ( value, attrValue ) {\n\t\tvar comparator = this.getAttribute( 'value-comparator' );\n\t\tif ( comparator ) {\n\t\t\tif ( typeof comparator === 'function' ) {\n\t\t\t\treturn comparator( value, attrValue );\n\t\t\t}\n\t\t\tif (value && attrValue) {\n\t\t\t\treturn value[comparator] == attrValue[comparator];\n\t\t\t}\n\t\t}\n\t\treturn value == attrValue;\n\t};\n\n\treturn Input;\n}(Element));\n\n// simple JSON parser, without the restrictions of JSON parse\n// (i.e. having to double-quote keys).\n//\n// If passed a hash of values as the second argument, ${placeholders}\n// will be replaced with those values\n\nvar specials$1 = {\n\t'true': true,\n\t'false': false,\n\t'null': null,\n\tundefined: undefined\n};\n\nvar specialsPattern = new RegExp( '^(?:' + Object.keys( specials$1 ).join( '|' ) + ')' );\nvar numberPattern$1 = /^(?:[+-]?)(?:(?:(?:0|[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\nvar placeholderPattern = /\\$\\{([^\\}]+)\\}/g;\nvar placeholderAtStartPattern = /^\\$\\{([^\\}]+)\\}/;\nvar onlyWhitespace = /^\\s*$/;\n\nvar JsonParser = Parser.extend({\n\tinit: function init ( str, options ) {\n\t\tthis.values = options.values;\n\t\tthis.allowWhitespace();\n\t},\n\n\tpostProcess: function postProcess ( result ) {\n\t\tif ( result.length !== 1 || !onlyWhitespace.test( this.leftover ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { value: result[0].v };\n\t},\n\n\tconverters: [\n\t\tfunction getPlaceholder ( parser ) {\n\t\t\tif ( !parser.values ) { return null; }\n\n\t\t\tvar placeholder = parser.matchPattern( placeholderAtStartPattern );\n\n\t\t\tif ( placeholder && ( parser.values.hasOwnProperty( placeholder ) ) ) {\n\t\t\t\treturn { v: parser.values[ placeholder ] };\n\t\t\t}\n\t\t},\n\n\t\tfunction getSpecial ( parser ) {\n\t\t\tvar special = parser.matchPattern( specialsPattern );\n\t\t\tif ( special ) { return { v: specials$1[ special ] }; }\n\t\t},\n\n\t\tfunction getNumber ( parser ) {\n\t\t\tvar number = parser.matchPattern( numberPattern$1 );\n\t\t\tif ( number ) { return { v: +number }; }\n\t\t},\n\n\t\tfunction getString ( parser ) {\n\t\t\tvar stringLiteral = readStringLiteral( parser );\n\t\t\tvar values = parser.values;\n\n\t\t\tif ( stringLiteral && values ) {\n\t\t\t\treturn {\n\t\t\t\t\tv: stringLiteral.v.replace( placeholderPattern, function ( match, $1 ) { return ( $1 in values ? values[ $1 ] : $1 ); } )\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn stringLiteral;\n\t\t},\n\n\t\tfunction getObject ( parser ) {\n\t\t\tif ( !parser.matchString( '{' ) ) { return null; }\n\n\t\t\tvar result = {};\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( parser.matchString( '}' ) ) {\n\t\t\t\treturn { v: result };\n\t\t\t}\n\n\t\t\tvar pair;\n\t\t\twhile ( pair = getKeyValuePair( parser ) ) {\n\t\t\t\tresult[ pair.key ] = pair.value;\n\n\t\t\t\tparser.allowWhitespace();\n\n\t\t\t\tif ( parser.matchString( '}' ) ) {\n\t\t\t\t\treturn { v: result };\n\t\t\t\t}\n\n\t\t\t\tif ( !parser.matchString( ',' ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\tfunction getArray ( parser ) {\n\t\t\tif ( !parser.matchString( '[' ) ) { return null; }\n\n\t\t\tvar result = [];\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( parser.matchString( ']' ) ) {\n\t\t\t\treturn { v: result };\n\t\t\t}\n\n\t\t\tvar valueToken;\n\t\t\twhile ( valueToken = parser.read() ) {\n\t\t\t\tresult.push( valueToken.v );\n\n\t\t\t\tparser.allowWhitespace();\n\n\t\t\t\tif ( parser.matchString( ']' ) ) {\n\t\t\t\t\treturn { v: result };\n\t\t\t\t}\n\n\t\t\t\tif ( !parser.matchString( ',' ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tparser.allowWhitespace();\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t]\n});\n\nfunction getKeyValuePair ( parser ) {\n\tparser.allowWhitespace();\n\n\tvar key = readKey( parser );\n\n\tif ( !key ) { return null; }\n\n\tvar pair = { key: key };\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( ':' ) ) {\n\t\treturn null;\n\t}\n\tparser.allowWhitespace();\n\n\tvar valueToken = parser.read();\n\n\tif ( !valueToken ) { return null; }\n\n\tpair.value = valueToken.v;\n\treturn pair;\n}\n\nvar parseJSON = function ( str, values ) {\n\tvar parser = new JsonParser( str, { values: values });\n\treturn parser.result;\n};\n\nvar Mapping = (function (Item$$1) {\n\tfunction Mapping ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.name = options.template.n;\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || options.element || findElement( options.parentFragment );\n\t\tthis.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.parentFragment ) );\n\t\tthis.parentFragment = this.element.parentFragment; // shared\n\t\tthis.ractive = this.parentFragment.ractive;\n\n\t\tthis.fragment = null;\n\n\t\tthis.element.attributeByName[ this.name ] = this;\n\n\t\tthis.value = options.template.f;\n\t}\n\n\tif ( Item$$1 ) Mapping.__proto__ = Item$$1;\n\tMapping.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tMapping.prototype.constructor = Mapping;\n\n\tMapping.prototype.bind = function bind () {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.bind();\n\t\t}\n\n\t\tvar template = this.template.f;\n\t\tvar viewmodel = this.element.instance.viewmodel;\n\n\t\tif ( template === 0 ) {\n\t\t\t// empty attributes are `true`\n\t\t\tviewmodel.joinKey( this.name ).set( true );\n\t\t}\n\n\t\telse if ( typeof template === 'string' ) {\n\t\t\tvar parsed = parseJSON( template );\n\t\t\tviewmodel.joinKey( this.name ).set( parsed ? parsed.value : template );\n\t\t}\n\n\t\telse if ( Array.isArray( template ) ) {\n\t\t\tcreateMapping( this, true );\n\t\t}\n\t};\n\n\tMapping.prototype.render = function render () {};\n\n\tMapping.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t\tif ( this.boundFragment ) { this.boundFragment.unbind(); }\n\n\t\tif ( this.element.bound ) {\n\t\t\tif ( this.link.target === this.model ) { this.link.owner.unlink(); }\n\t\t}\n\t};\n\n\tMapping.prototype.unrender = function unrender () {};\n\n\tMapping.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tif ( this.boundFragment ) { this.boundFragment.update(); }\n\t\t\tif ( this.rendered ) { this.updateDelegate(); }\n\t\t}\n\t};\n\n\treturn Mapping;\n}(Item));\n\nfunction createMapping ( item ) {\n\tvar template = item.template.f;\n\tvar viewmodel = item.element.instance.viewmodel;\n\tvar childData = viewmodel.value;\n\n\tif ( template.length === 1 && template[0].t === INTERPOLATOR ) {\n\t\titem.model = resolve$1( item.parentFragment, template[0] );\n\n\t\tif ( !item.model ) {\n\t\t\twarnOnceIfDebug( (\""The \"" + (item.name) + \""='{{\"" + (template[0].r) + \""}}' mapping is ambiguous, and may cause unexpected results. Consider initialising your data to eliminate the ambiguity\""), { ractive: item.element.instance }); // TODO add docs page explaining item\n\t\t\titem.parentFragment.ractive.get( item.name ); // side-effect: create mappings as necessary\n\t\t\titem.model = item.parentFragment.findContext().joinKey( item.name );\n\t\t}\n\n\t\titem.link = viewmodel.createLink( item.name, item.model, template[0].r );\n\n\t\tif ( item.model.get() === undefined && item.name in childData ) {\n\t\t\titem.model.set( childData[ item.name ] );\n\t\t}\n\t}\n\n\telse {\n\t\titem.boundFragment = new Fragment({\n\t\t\towner: item,\n\t\t\ttemplate: template\n\t\t}).bind();\n\n\t\titem.model = viewmodel.joinKey( item.name );\n\t\titem.model.set( item.boundFragment.valueOf() );\n\n\t\t// item is a *bit* of a hack\n\t\titem.boundFragment.bubble = function () {\n\t\t\tFragment.prototype.bubble.call( item.boundFragment );\n\t\t\t// defer this to avoid mucking around model deps if there happens to be an expression involved\n\t\t\trunloop.scheduleTask(function () {\n\t\t\t\titem.boundFragment.update();\n\t\t\t\titem.model.set( item.boundFragment.valueOf() );\n\t\t\t});\n\t\t};\n\t}\n}\n\nvar Option = (function (Element$$1) {\n\tfunction Option ( options ) {\n\t\tvar template = options.template;\n\t\tif ( !template.a ) { template.a = {}; }\n\n\t\t// If the value attribute is missing, use the element's content,\n\t\t// as long as it isn't disabled\n\t\tif ( template.a.value === undefined && !( 'disabled' in template.a ) ) {\n\t\t\ttemplate.a.value = template.f || '';\n\t\t}\n\n\t\tElement$$1.call( this, options );\n\n\t\tthis.select = findElement( this.parent || this.parentFragment, false, 'select' );\n\t}\n\n\tif ( Element$$1 ) Option.__proto__ = Element$$1;\n\tOption.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tOption.prototype.constructor = Option;\n\n\tOption.prototype.bind = function bind () {\n\t\tif ( !this.select ) {\n\t\t\tElement$$1.prototype.bind.call(this);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the select has a value, it overrides the `selected` attribute on\n\t\t// this option - so we delete the attribute\n\t\tvar selectedAttribute = this.attributeByName.selected;\n\t\tif ( selectedAttribute && this.select.getAttribute( 'value' ) !== undefined ) {\n\t\t\tvar index = this.attributes.indexOf( selectedAttribute );\n\t\t\tthis.attributes.splice( index, 1 );\n\t\t\tdelete this.attributeByName.selected;\n\t\t}\n\n\t\tElement$$1.prototype.bind.call(this);\n\t\tthis.select.options.push( this );\n\t};\n\n\tOption.prototype.bubble = function bubble () {\n\t\t// if we're using content as value, may need to update here\n\t\tvar value = this.getAttribute( 'value' );\n\t\tif ( this.node && this.node.value !== value ) {\n\t\t\tthis.node._ractive.value = value;\n\t\t}\n\t\tElement$$1.prototype.bubble.call(this);\n\t};\n\n\tOption.prototype.getAttribute = function getAttribute ( name ) {\n\t\tvar attribute = this.attributeByName[ name ];\n\t\treturn attribute ? attribute.getValue() : name === 'value' && this.fragment ? this.fragment.valueOf() : undefined;\n\t};\n\n\tOption.prototype.isSelected = function isSelected () {\n\t\tvar this$1 = this;\n\n\t\tvar optionValue = this.getAttribute( 'value' );\n\n\t\tif ( optionValue === undefined || !this.select ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar selectValue = this.select.getAttribute( 'value' );\n\n\t\tif ( this.select.compare( selectValue, optionValue ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( this.select.getAttribute( 'multiple' ) && Array.isArray( selectValue ) ) {\n\t\t\tvar i = selectValue.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( this$1.select.compare( selectValue[i], optionValue ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tOption.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\n\t\tif ( !this.attributeByName.value ) {\n\t\t\tthis.node._ractive.value = this.getAttribute( 'value' );\n\t\t}\n\t};\n\n\tOption.prototype.unbind = function unbind () {\n\t\tElement$$1.prototype.unbind.call(this);\n\n\t\tif ( this.select ) {\n\t\t\tremoveFromArray$1( this.select.options, this );\n\t\t}\n\t};\n\n\treturn Option;\n}(Element));\n\nfunction getPartialTemplate ( ractive, name, parentFragment ) {\n\t// If the partial in instance or view heirarchy instances, great\n\tvar partial = getPartialFromRegistry( ractive, name, parentFragment || {} );\n\tif ( partial ) { return partial; }\n\n\t// Does it exist on the page as a script tag?\n\tpartial = parser.fromId( name, { noThrow: true } );\n\tif ( partial ) {\n\t\t// parse and register to this ractive instance\n\t\tvar parsed = parser.parseFor( partial, ractive );\n\n\t\t// register extra partials on the ractive instance if they don't already exist\n\t\tif ( parsed.p ) { fillGaps( ractive.partials, parsed.p ); }\n\n\t\t// register (and return main partial if there are others in the template)\n\t\treturn ractive.partials[ name ] = parsed.t;\n\t}\n}\n\nfunction getPartialFromRegistry ( ractive, name, parentFragment ) {\n\t// if there was an instance up-hierarchy, cool\n\tvar partial = findParentPartial( name, parentFragment.owner );\n\tif ( partial ) { return partial; }\n\n\t// find first instance in the ractive or view hierarchy that has this partial\n\tvar instance = findInstance( 'partials', ractive, name );\n\n\tif ( !instance ) { return; }\n\n\tpartial = instance.partials[ name ];\n\n\t// partial is a function?\n\tvar fn;\n\tif ( typeof partial === 'function' ) {\n\t\tfn = partial.bind( instance );\n\t\tfn.isOwner = instance.partials.hasOwnProperty(name);\n\t\tpartial = fn.call( ractive, parser );\n\t}\n\n\tif ( !partial && partial !== '' ) {\n\t\twarnIfDebug( noRegistryFunctionReturn, name, 'partial', 'partial', { ractive: ractive });\n\t\treturn;\n\t}\n\n\t// If this was added manually to the registry,\n\t// but hasn't been parsed, parse it now\n\tif ( !parser.isParsed( partial ) ) {\n\t\t// use the parseOptions of the ractive instance on which it was found\n\t\tvar parsed = parser.parseFor( partial, instance );\n\n\t\t// Partials cannot contain nested partials!\n\t\t// TODO add a test for this\n\t\tif ( parsed.p ) {\n\t\t\twarnIfDebug( 'Partials ({{>%s}}) cannot contain nested inline partials', name, { ractive: ractive });\n\t\t}\n\n\t\t// if fn, use instance to store result, otherwise needs to go\n\t\t// in the correct point in prototype chain on instance or constructor\n\t\tvar target = fn ? instance : findOwner( instance, name );\n\n\t\t// may be a template with partials, which need to be registered and main template extracted\n\t\ttarget.partials[ name ] = partial = parsed.t;\n\t}\n\n\t// store for reset\n\tif ( fn ) { partial._fn = fn; }\n\n\treturn partial.v ? partial.t : partial;\n}\n\nfunction findOwner ( ractive, key ) {\n\treturn ractive.partials.hasOwnProperty( key )\n\t\t? ractive\n\t\t: findConstructor( ractive.constructor, key);\n}\n\nfunction findConstructor ( constructor, key ) {\n\tif ( !constructor ) { return; }\n\treturn constructor.partials.hasOwnProperty( key )\n\t\t? constructor\n\t\t: findConstructor( constructor._Parent, key );\n}\n\nfunction findParentPartial( name, parent ) {\n\tif ( parent ) {\n\t\tif ( parent.template && parent.template.p && parent.template.p[name] ) {\n\t\t\treturn parent.template.p[name];\n\t\t} else if ( parent.parentFragment && parent.parentFragment.owner ) {\n\t\t\treturn findParentPartial( name, parent.parentFragment.owner );\n\t\t}\n\t}\n}\n\nvar Partial = (function (MustacheContainer$$1) {\n\tfunction Partial ( options ) {\n\t\tMustacheContainer$$1.call( this, options );\n\n\t\tthis.yielder = options.template.t === YIELDER;\n\n\t\tif ( this.yielder ) {\n\t\t\tthis.container = options.parentFragment.ractive;\n\t\t\tthis.component = this.container.component;\n\n\t\t\tthis.containerFragment = options.parentFragment;\n\t\t\tthis.parentFragment = this.component.parentFragment;\n\n\t\t\t// {{yield}} is equivalent to {{yield content}}\n\t\t\tif ( !options.template.r && !options.template.rx && !options.template.x ) { options.template.r = 'content'; }\n\t\t}\n\t}\n\n\tif ( MustacheContainer$$1 ) Partial.__proto__ = MustacheContainer$$1;\n\tPartial.prototype = Object.create( MustacheContainer$$1 && MustacheContainer$$1.prototype );\n\tPartial.prototype.constructor = Partial;\n\n\tPartial.prototype.bind = function bind () {\n\t\tvar this$1 = this;\n\n\t\t// keep track of the reference name for future resets\n\t\tthis.refName = this.template.r;\n\n\t\t// name matches take priority over expressions\n\t\tvar template = this.refName ? getPartialTemplate( this.ractive, this.refName, this.parentFragment ) || null : null;\n\t\tvar templateObj;\n\n\t\tif ( template ) {\n\t\t\tthis.named = true;\n\t\t\tthis.setTemplate( this.template.r, template );\n\t\t}\n\n\t\tif ( !template ) {\n\t\t\tMustacheContainer$$1.prototype.bind.call(this);\n\t\t\tif ( this.model && ( templateObj = this.model.get() ) && typeof templateObj === 'object' && ( typeof templateObj.template === 'string' || Array.isArray( templateObj.t ) ) ) {\n\t\t\t\tif ( templateObj.template ) {\n\t\t\t\t\tthis.source = templateObj.template;\n\t\t\t\t\ttemplateObj = parsePartial( this.template.r, templateObj.template, this.ractive );\n\t\t\t\t} else {\n\t\t\t\t\tthis.source = templateObj.t;\n\t\t\t\t}\n\t\t\t\tthis.setTemplate( this.template.r, templateObj.t );\n\t\t\t} else if ( ( !this.model || typeof this.model.get() !== 'string' ) && this.refName ) {\n\t\t\t\tthis.setTemplate( this.refName, template );\n\t\t\t} else {\n\t\t\t\tthis.setTemplate( this.model.get() );\n\t\t\t}\n\t\t}\n\n\t\tvar options = {\n\t\t\towner: this,\n\t\t\ttemplate: this.partialTemplate\n\t\t};\n\n\t\tif ( this.template.c ) {\n\t\t\toptions.template = [{ t: SECTION, n: SECTION_WITH, f: options.template }];\n\t\t\tfor ( var k in this.template.c ) {\n\t\t\t\toptions.template[0][k] = this$1.template.c[k];\n\t\t\t}\n\t\t}\n\n\t\tif ( this.yielder ) {\n\t\t\toptions.ractive = this.container.parent;\n\t\t}\n\n\t\tthis.fragment = new Fragment(options);\n\t\tif ( this.template.z ) {\n\t\t\tthis.fragment.aliases = resolveAliases( this.template.z, this.yielder ? this.containerFragment : this.parentFragment );\n\t\t}\n\t\tthis.fragment.bind();\n\t};\n\n\tPartial.prototype.bubble = function bubble () {\n\t\tif ( this.yielder && !this.dirty ) {\n\t\t\tthis.containerFragment.bubble();\n\t\t\tthis.dirty = true;\n\t\t} else {\n\t\t\tMustacheContainer$$1.prototype.bubble.call(this);\n\t\t}\n\t};\n\n\tPartial.prototype.findNextNode = function findNextNode () {\n\t\treturn this.yielder ? this.containerFragment.findNextNode( this ) : MustacheContainer$$1.prototype.findNextNode.call(this);\n\t};\n\n\tPartial.prototype.forceResetTemplate = function forceResetTemplate () {\n\t\tvar this$1 = this;\n\n\t\tthis.partialTemplate = undefined;\n\n\t\t// on reset, check for the reference name first\n\t\tif ( this.refName ) {\n\t\t\tthis.partialTemplate = getPartialTemplate( this.ractive, this.refName, this.parentFragment );\n\t\t}\n\n\t\t// then look for the resolved name\n\t\tif ( !this.partialTemplate ) {\n\t\t\tthis.partialTemplate = getPartialTemplate( this.ractive, this.name, this.parentFragment );\n\t\t}\n\n\t\tif ( !this.partialTemplate ) {\n\t\t\twarnOnceIfDebug( (\""Could not find template for partial '\"" + (this.name) + \""'\"") );\n\t\t\tthis.partialTemplate = [];\n\t\t}\n\n\t\tif ( this.inAttribute ) {\n\t\t\tdoInAttributes( function () { return this$1.fragment.resetTemplate( this$1.partialTemplate ); } );\n\t\t} else {\n\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t}\n\n\t\tthis.bubble();\n\t};\n\n\tPartial.prototype.render = function render ( target, occupants ) {\n\t\treturn this.fragment.render( target, occupants );\n\t};\n\n\tPartial.prototype.setTemplate = function setTemplate ( name, template ) {\n\t\tthis.name = name;\n\n\t\tif ( !template && template !== null ) { template = getPartialTemplate( this.ractive, name, this.parentFragment ); }\n\n\t\tif ( !template ) {\n\t\t\twarnOnceIfDebug( (\""Could not find template for partial '\"" + name + \""'\"") );\n\t\t}\n\n\t\tthis.partialTemplate = template || [];\n\t};\n\n\tPartial.prototype.unbind = function unbind () {\n\t\tMustacheContainer$$1.prototype.unbind.call(this);\n\t\tthis.fragment.aliases = {};\n\t\tthis.fragment.unbind();\n\t};\n\n\tPartial.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tthis.fragment.unrender( shouldDestroy );\n\t};\n\n\tPartial.prototype.update = function update () {\n\t\tvar template;\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tif ( !this.named ) {\n\t\t\t\tif ( this.model ) {\n\t\t\t\t\ttemplate = this.model.get();\n\t\t\t\t}\n\n\t\t\t\tif ( template && typeof template === 'string' && template !== this.name ) {\n\t\t\t\t\tthis.setTemplate( template );\n\t\t\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t\t\t} else if ( template && typeof template === 'object' && ( typeof template.template === 'string' || Array.isArray( template.t ) ) ) {\n\t\t\t\t\tif ( template.t !== this.source && template.template !== this.source ) {\n\t\t\t\t\t\tif ( template.template ) {\n\t\t\t\t\t\t\tthis.source = template.template;\n\t\t\t\t\t\t\ttemplate = parsePartial( this.name, template.template, this.ractive );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.source = template.t;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.setTemplate( this.name, template.t );\n\t\t\t\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.fragment.update();\n\t\t}\n\t};\n\n\treturn Partial;\n}(MustacheContainer));\n\nfunction parsePartial( name, partial, ractive ) {\n\tvar parsed;\n\n\ttry {\n\t\tparsed = parser.parse( partial, parser.getParseOptions( ractive ) );\n\t} catch (e) {\n\t\twarnIfDebug( (\""Could not parse partial from expression '\"" + name + \""'\\n\"" + (e.message)) );\n\t}\n\n\treturn parsed || { t: [] };\n}\n\nvar RepeatedFragment = function RepeatedFragment ( options ) {\n\tthis.parent = options.owner.parentFragment;\n\n\t// bit of a hack, so reference resolution works without another\n\t// layer of indirection\n\tthis.parentFragment = this;\n\tthis.owner = options.owner;\n\tthis.ractive = this.parent.ractive;\n\tthis.delegate = this.parent.delegate || findElement( options.owner );\n\t// delegation disabled by directive\n\tif ( this.delegate && this.delegate.delegate === false ) { this.delegate = false; }\n\n\t// encapsulated styles should be inherited until they get applied by an element\n\tthis.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );\n\n\tthis.context = null;\n\tthis.rendered = false;\n\tthis.iterations = [];\n\n\tthis.template = options.template;\n\n\tthis.indexRef = options.indexRef;\n\tthis.keyRef = options.keyRef;\n\n\tthis.pendingNewIndices = null;\n\tthis.previousIterations = null;\n\n\t// track array versus object so updates of type rest\n\tthis.isArray = false;\n};\n\nRepeatedFragment.prototype.bind = function bind ( context ) {\n\t\tvar this$1 = this;\n\n\tthis.context = context;\n\tvar value = context.get();\n\n\t// {{#each array}}...\n\tif ( this.isArray = Array.isArray( value ) ) {\n\t\t// we can't use map, because of sparse arrays\n\t\tthis.iterations = [];\n\t\tvar max = value.length;\n\t\tfor ( var i = 0; i < max; i += 1 ) {\n\t\t\tthis$1.iterations[i] = this$1.createIteration( i, i );\n\t\t}\n\t}\n\n\t// {{#each object}}...\n\telse if ( isObject( value ) ) {\n\t\tthis.isArray = false;\n\n\t\t// TODO this is a dreadful hack. There must be a neater way\n\t\tif ( this.indexRef ) {\n\t\t\tvar refs = this.indexRef.split( ',' );\n\t\t\tthis.keyRef = refs[0];\n\t\t\tthis.indexRef = refs[1];\n\t\t}\n\n\t\tthis.iterations = Object.keys( value ).map( function ( key, index ) {\n\t\t\treturn this$1.createIteration( key, index );\n\t\t});\n\t}\n\n\treturn this;\n};\n\nRepeatedFragment.prototype.bubble = function bubble ( index ) {\n\tif  ( !this.bubbled ) { this.bubbled = []; }\n\tthis.bubbled.push( index );\n\n\tthis.owner.bubble();\n};\n\nRepeatedFragment.prototype.createIteration = function createIteration ( key, index ) {\n\tvar fragment = new Fragment({\n\t\towner: this,\n\t\ttemplate: this.template\n\t});\n\n\tfragment.key = key;\n\tfragment.index = index;\n\tfragment.isIteration = true;\n\tfragment.delegate = this.delegate;\n\n\tvar model = this.context.joinKey( key );\n\n\t// set up an iteration alias if there is one\n\tif ( this.owner.template.z ) {\n\t\tfragment.aliases = {};\n\t\tfragment.aliases[ this.owner.template.z[0].n ] = model;\n\t}\n\n\treturn fragment.bind( model );\n};\n\nRepeatedFragment.prototype.destroyed = function destroyed$1 () {\n\tthis.iterations.forEach( destroyed$1$1 );\n};\n\nRepeatedFragment.prototype.detach = function detach () {\n\tvar docFrag = createDocumentFragment();\n\tthis.iterations.forEach( function (fragment) { return docFrag.appendChild( fragment.detach() ); } );\n\treturn docFrag;\n};\n\nRepeatedFragment.prototype.find = function find ( selector, options ) {\n\treturn findMap( this.iterations, function (i) { return i.find( selector, options ); } );\n};\n\nRepeatedFragment.prototype.findAll = function findAll ( selector, query ) {\n\treturn this.iterations.forEach( function (i) { return i.findAll( selector, query ); } );\n};\n\nRepeatedFragment.prototype.findComponent = function findComponent ( name, options ) {\n\treturn findMap( this.iterations, function (i) { return i.findComponent( name, options ); } );\n};\n\nRepeatedFragment.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\treturn this.iterations.forEach( function (i) { return i.findAllComponents( name, query ); } );\n};\n\nRepeatedFragment.prototype.findNextNode = function findNextNode ( iteration ) {\n\t\tvar this$1 = this;\n\n\tif ( iteration.index < this.iterations.length - 1 ) {\n\t\tfor ( var i = iteration.index + 1; i < this.iterations.length; i++ ) {\n\t\t\tvar node = this$1.iterations[ i ].firstNode( true );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n\n\treturn this.owner.findNextNode();\n};\n\nRepeatedFragment.prototype.firstNode = function firstNode ( skipParent ) {\n\treturn this.iterations[0] ? this.iterations[0].firstNode( skipParent ) : null;\n};\n\nRepeatedFragment.prototype.rebinding = function rebinding ( next ) {\n\t\tvar this$1 = this;\n\n\tthis.context = next;\n\tthis.iterations.forEach( function (fragment) {\n\t\tvar model = next ? next.joinKey( fragment.key ) : undefined;\n\t\tfragment.context = model;\n\t\tif ( this$1.owner.template.z ) {\n\t\t\tfragment.aliases = {};\n\t\t\tfragment.aliases[ this$1.owner.template.z[0].n ] = model;\n\t\t}\n\t});\n};\n\nRepeatedFragment.prototype.render = function render ( target, occupants ) {\n\t// TODO use docFrag.cloneNode...\n\n\tif ( this.iterations ) {\n\t\tthis.iterations.forEach( function (fragment) { return fragment.render( target, occupants ); } );\n\t}\n\n\tthis.rendered = true;\n};\n\nRepeatedFragment.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tif ( !this.pendingNewIndices ) { this.previousIterations = this.iterations.slice(); }\n\n\tif ( !this.pendingNewIndices ) { this.pendingNewIndices = []; }\n\n\tthis.pendingNewIndices.push( newIndices );\n\n\tvar iterations = [];\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\tif ( newIndex === -1 ) { return; }\n\n\t\tvar fragment = this$1.iterations[ oldIndex ];\n\t\titerations[ newIndex ] = fragment;\n\n\t\tif ( newIndex !== oldIndex && fragment ) { fragment.dirty = true; }\n\t});\n\n\tthis.iterations = iterations;\n\n\tthis.bubble();\n};\n\nRepeatedFragment.prototype.shuffled = function shuffled$1 () {\n\tthis.iterations.forEach( shuffled$1$1 );\n};\n\nRepeatedFragment.prototype.toString = function toString$1 ( escape ) {\n\treturn this.iterations ?\n\t\tthis.iterations.map( escape ? toEscapedString : toString$2 ).join( '' ) :\n\t\t'';\n};\n\nRepeatedFragment.prototype.unbind = function unbind$1 () {\n\tthis.iterations.forEach( unbind$1$1 );\n\treturn this;\n};\n\nRepeatedFragment.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\tthis.iterations.forEach( shouldDestroy ? unrenderAndDestroy : unrender$1$1 );\n\tif ( this.pendingNewIndices && this.previousIterations ) {\n\t\tthis.previousIterations.forEach( function (fragment) {\n\t\t\tif ( fragment.rendered ) { shouldDestroy ? unrenderAndDestroy( fragment ) : unrender$1$1( fragment ); }\n\t\t});\n\t}\n\tthis.rendered = false;\n};\n\n// TODO smart update\nRepeatedFragment.prototype.update = function update$1 () {\n\t\tvar this$1 = this;\n\n\t// skip dirty check, since this is basically just a facade\n\n\tif ( this.pendingNewIndices ) {\n\t\tthis.bubbled.length = 0;\n\t\tthis.updatePostShuffle();\n\t\treturn;\n\t}\n\n\tif ( this.updating ) { return; }\n\tthis.updating = true;\n\n\tvar value = this.context.get();\n\tvar wasArray = this.isArray;\n\n\tvar toRemove;\n\tvar oldKeys;\n\tvar reset = true;\n\tvar i;\n\n\tif ( this.isArray = Array.isArray( value ) ) {\n\t\tif ( wasArray ) {\n\t\t\treset = false;\n\t\t\tif ( this.iterations.length > value.length ) {\n\t\t\t\ttoRemove = this.iterations.splice( value.length );\n\t\t\t}\n\t\t}\n\t} else if ( isObject( value ) && !wasArray ) {\n\t\treset = false;\n\t\ttoRemove = [];\n\t\toldKeys = {};\n\t\ti = this.iterations.length;\n\n\t\twhile ( i-- ) {\n\t\t\tvar fragment$1 = this$1.iterations[i];\n\t\t\tif ( fragment$1.key in value ) {\n\t\t\t\toldKeys[ fragment$1.key ] = true;\n\t\t\t} else {\n\t\t\t\tthis$1.iterations.splice( i, 1 );\n\t\t\t\ttoRemove.push( fragment$1 );\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( reset ) {\n\t\ttoRemove = this.iterations;\n\t\tthis.iterations = [];\n\t}\n\n\tif ( toRemove ) {\n\t\ttoRemove.forEach( function (fragment) {\n\t\t\tfragment.unbind();\n\t\t\tfragment.unrender( true );\n\t\t});\n\t}\n\n\t// update the remaining ones\n\tif ( !reset && this.isArray && this.bubbled && this.bubbled.length ) {\n\t\tthis.bubbled.forEach( function (i) { return this$1.iterations[i] && this$1.iterations[i].update(); } );\n\t} else {\n\t\tthis.iterations.forEach( update$1$1 );\n\t}\n\n\tif ( this.bubbled ) { this.bubbled.length = 0; }\n\n\t// add new iterations\n\tvar newLength = Array.isArray( value ) ?\n\t\tvalue.length :\n\t\tisObject( value ) ?\n\t\t\tObject.keys( value ).length :\n\t\t\t0;\n\n\tvar docFrag;\n\tvar fragment;\n\n\tif ( newLength > this.iterations.length ) {\n\t\tdocFrag = this.rendered ? createDocumentFragment() : null;\n\t\ti = this.iterations.length;\n\n\t\tif ( Array.isArray( value ) ) {\n\t\t\twhile ( i < value.length ) {\n\t\t\t\tfragment = this$1.createIteration( i, i );\n\n\t\t\t\tthis$1.iterations.push( fragment );\n\t\t\t\tif ( this$1.rendered ) { fragment.render( docFrag ); }\n\n\t\t\t\ti += 1;\n\t\t\t}\n\t\t}\n\n\t\telse if ( isObject( value ) ) {\n\t\t\t// TODO this is a dreadful hack. There must be a neater way\n\t\t\tif ( this.indexRef && !this.keyRef ) {\n\t\t\t\tvar refs = this.indexRef.split( ',' );\n\t\t\t\tthis.keyRef = refs[0];\n\t\t\t\tthis.indexRef = refs[1];\n\t\t\t}\n\n\t\t\tObject.keys( value ).forEach( function (key) {\n\t\t\t\tif ( !oldKeys || !( key in oldKeys ) ) {\n\t\t\t\t\tfragment = this$1.createIteration( key, i );\n\n\t\t\t\t\tthis$1.iterations.push( fragment );\n\t\t\t\t\tif ( this$1.rendered ) { fragment.render( docFrag ); }\n\n\t\t\t\t\ti += 1;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif ( this.rendered ) {\n\t\t\tvar parentNode = this.parent.findParentNode();\n\t\t\tvar anchor = this.parent.findNextNode( this.owner );\n\n\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t}\n\t}\n\n\tthis.updating = false;\n};\n\nRepeatedFragment.prototype.updatePostShuffle = function updatePostShuffle () {\n\t\tvar this$1 = this;\n\n\tvar newIndices = this.pendingNewIndices[ 0 ];\n\n\t// map first shuffle through\n\tthis.pendingNewIndices.slice( 1 ).forEach( function (indices) {\n\t\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\t\tnewIndices[ oldIndex ] = indices[ newIndex ];\n\t\t});\n\t});\n\n\t// This algorithm (for detaching incorrectly-ordered fragments from the DOM and\n\t// storing them in a document fragment for later reinsertion) seems a bit hokey,\n\t// but it seems to work for now\n\tvar len = this.context.get().length;\n\tvar oldLen = this.previousIterations.length;\n\tvar removed = {};\n\tvar i;\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\tvar fragment = this$1.previousIterations[ oldIndex ];\n\t\tthis$1.previousIterations[ oldIndex ] = null;\n\n\t\tif ( newIndex === -1 ) {\n\t\t\tremoved[ oldIndex ] = fragment;\n\t\t} else if ( fragment.index !== newIndex ) {\n\t\t\tvar model = this$1.context.joinKey( newIndex );\n\t\t\tfragment.index = newIndex;\n\t\t\tfragment.context = model;\n\t\t\tif ( this$1.owner.template.z ) {\n\t\t\t\tfragment.aliases = {};\n\t\t\t\tfragment.aliases[ this$1.owner.template.z[0].n ] = model;\n\t\t\t}\n\t\t}\n\t});\n\n\t// if the array was spliced outside of ractive, sometimes there are leftover fragments not in the newIndices\n\tthis.previousIterations.forEach( function ( frag, i ) {\n\t\tif ( frag ) { removed[ i ] = frag; }\n\t});\n\n\t// create new/move existing iterations\n\tvar docFrag = this.rendered ? createDocumentFragment() : null;\n\tvar parentNode = this.rendered ? this.parent.findParentNode() : null;\n\n\tvar contiguous = 'startIndex' in newIndices;\n\ti = contiguous ? newIndices.startIndex : 0;\n\n\tfor ( i; i < len; i++ ) {\n\t\tvar frag = this$1.iterations[i];\n\n\t\tif ( frag && contiguous ) {\n\t\t\t// attach any built-up iterations\n\t\t\tif ( this$1.rendered ) {\n\t\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\t\t\t\tif ( docFrag.childNodes.length  ) { parentNode.insertBefore( docFrag, frag.firstNode() ); }\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( !frag ) { this$1.iterations[i] = this$1.createIteration( i, i ); }\n\n\t\tif ( this$1.rendered ) {\n\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\n\t\t\tif ( frag ) { docFrag.appendChild( frag.detach() ); }\n\t\t\telse {\n\t\t\t\tthis$1.iterations[i].render( docFrag );\n\t\t\t}\n\t\t}\n\t}\n\n\t// append any leftovers\n\tif ( this.rendered ) {\n\t\tfor ( i = len; i < oldLen; i++ ) {\n\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\t\t}\n\n\t\tif ( docFrag.childNodes.length ) {\n\t\t\tparentNode.insertBefore( docFrag, this.owner.findNextNode() );\n\t\t}\n\t}\n\n\t// trigger removal on old nodes\n\tObject.keys( removed ).forEach( function (k) { return removed[k].unbind().unrender( true ); } );\n\n\tthis.iterations.forEach( update$1$1 );\n\n\tthis.pendingNewIndices = null;\n\n\tthis.shuffled();\n};\n\nfunction isEmpty ( value ) {\n\treturn !value ||\n\t       ( Array.isArray( value ) && value.length === 0 ) ||\n\t\t   ( isObject( value ) && Object.keys( value ).length === 0 );\n}\n\nfunction getType ( value, hasIndexRef ) {\n\tif ( hasIndexRef || Array.isArray( value ) ) { return SECTION_EACH; }\n\tif ( isObject( value ) || typeof value === 'function' ) { return SECTION_IF_WITH; }\n\tif ( value === undefined ) { return null; }\n\treturn SECTION_IF;\n}\n\nvar Section = (function (MustacheContainer$$1) {\n\tfunction Section ( options ) {\n\t\tMustacheContainer$$1.call( this, options );\n\n\t\tthis.sectionType = options.template.n || null;\n\t\tthis.templateSectionType = this.sectionType;\n\t\tthis.subordinate = options.template.l === 1;\n\t\tthis.fragment = null;\n\t}\n\n\tif ( MustacheContainer$$1 ) Section.__proto__ = MustacheContainer$$1;\n\tSection.prototype = Object.create( MustacheContainer$$1 && MustacheContainer$$1.prototype );\n\tSection.prototype.constructor = Section;\n\n\tSection.prototype.bind = function bind () {\n\t\tMustacheContainer$$1.prototype.bind.call(this);\n\n\t\tif ( this.subordinate ) {\n\t\t\tthis.sibling = this.parentFragment.items[ this.parentFragment.items.indexOf( this ) - 1 ];\n\t\t\tthis.sibling.nextSibling = this;\n\t\t}\n\n\t\t// if we managed to bind, we need to create children\n\t\tif ( this.model ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.update();\n\t\t} else if ( this.sectionType && this.sectionType === SECTION_UNLESS && ( !this.sibling || !this.sibling.isTruthy() ) ) {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\towner: this,\n\t\t\t\ttemplate: this.template.f\n\t\t\t}).bind();\n\t\t}\n\t};\n\n\tSection.prototype.isTruthy = function isTruthy () {\n\t\tif ( this.subordinate && this.sibling.isTruthy() ) { return true; }\n\t\tvar value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n\t\treturn !!value && ( this.templateSectionType === SECTION_IF_WITH || !isEmpty( value ) );\n\t};\n\n\tSection.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tif ( MustacheContainer$$1.prototype.rebind.call( this, next, previous, safe ) ) {\n\t\t\tif ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {\n\t\t\t\tthis.fragment.rebinding( next );\n\t\t\t}\n\t\t}\n\t};\n\n\tSection.prototype.render = function render ( target, occupants ) {\n\t\tthis.rendered = true;\n\t\tif ( this.fragment ) { this.fragment.render( target, occupants ); }\n\t};\n\n\tSection.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tif ( this.fragment && this.sectionType === SECTION_EACH ) {\n\t\t\tthis.fragment.shuffle( newIndices );\n\t\t}\n\t};\n\n\tSection.prototype.unbind = function unbind () {\n\t\tMustacheContainer$$1.prototype.unbind.call(this);\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tSection.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }\n\t\tthis.rendered = false;\n\t};\n\n\tSection.prototype.update = function update () {\n\t\tif ( !this.dirty ) { return; }\n\n\t\tif ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {\n\t\t\tthis.fragment.context = this.model;\n\t\t}\n\n\t\tif ( !this.model && this.sectionType !== SECTION_UNLESS ) { return; }\n\n\t\tthis.dirty = false;\n\n\t\tvar value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n\t\tvar siblingFalsey = !this.subordinate || !this.sibling.isTruthy();\n\t\tvar lastType = this.sectionType;\n\n\t\t// watch for switching section types\n\t\tif ( this.sectionType === null || this.templateSectionType === null ) { this.sectionType = getType( value, this.template.i ); }\n\t\tif ( lastType && lastType !== this.sectionType && this.fragment ) {\n\t\t\tif ( this.rendered ) {\n\t\t\t\tthis.fragment.unbind().unrender( true );\n\t\t\t}\n\n\t\t\tthis.fragment = null;\n\t\t}\n\n\t\tvar newFragment;\n\n\t\tvar fragmentShouldExist = this.sectionType === SECTION_EACH || // each always gets a fragment, which may have no iterations\n\t\t                            this.sectionType === SECTION_WITH || // with (partial context) always gets a fragment\n\t\t                            ( siblingFalsey && ( this.sectionType === SECTION_UNLESS ? !this.isTruthy() : this.isTruthy() ) ); // if, unless, and if-with depend on siblings and the condition\n\n\t\tif ( fragmentShouldExist ) {\n\t\t\tif ( this.fragment ) {\n\t\t\t\tthis.fragment.update();\n\t\t\t} else {\n\t\t\t\tif ( this.sectionType === SECTION_EACH ) {\n\t\t\t\t\tnewFragment = new RepeatedFragment({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\ttemplate: this.template.f,\n\t\t\t\t\t\tindexRef: this.template.i\n\t\t\t\t\t}).bind( this.model );\n\t\t\t\t} else {\n\t\t\t\t\t// only with and if-with provide context - if and unless do not\n\t\t\t\t\tvar context = this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ? this.model : null;\n\t\t\t\t\tnewFragment = new Fragment({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\ttemplate: this.template.f\n\t\t\t\t\t}).bind( context );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.fragment && this.rendered ) {\n\t\t\t\tthis.fragment.unbind().unrender( true );\n\t\t\t}\n\n\t\t\tthis.fragment = null;\n\t\t}\n\n\t\tif ( newFragment ) {\n\t\t\tif ( this.rendered ) {\n\t\t\t\tvar parentNode = this.parentFragment.findParentNode();\n\t\t\t\tvar anchor = this.parentFragment.findNextNode( this );\n\n\t\t\t\tif ( anchor ) {\n\t\t\t\t\tvar docFrag = createDocumentFragment();\n\t\t\t\t\tnewFragment.render( docFrag );\n\n\t\t\t\t\t// we use anchor.parentNode, not parentNode, because the sibling\n\t\t\t\t\t// may be temporarily detached as a result of a shuffle\n\t\t\t\t\tanchor.parentNode.insertBefore( docFrag, anchor );\n\t\t\t\t} else {\n\t\t\t\t\tnewFragment.render( parentNode );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.fragment = newFragment;\n\t\t}\n\n\t\tif ( this.nextSibling ) {\n\t\t\tthis.nextSibling.dirty = true;\n\t\t\tthis.nextSibling.update();\n\t\t}\n\t};\n\n\treturn Section;\n}(MustacheContainer));\n\nvar Select = (function (Element$$1) {\n\tfunction Select ( options ) {\n\t\tElement$$1.call( this, options );\n\t\tthis.options = [];\n\t}\n\n\tif ( Element$$1 ) Select.__proto__ = Element$$1;\n\tSelect.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tSelect.prototype.constructor = Select;\n\n\tSelect.prototype.foundNode = function foundNode ( node ) {\n\t\tif ( this.binding ) {\n\t\t\tvar selectedOptions = getSelectedOptions( node );\n\n\t\t\tif ( selectedOptions.length > 0 ) {\n\t\t\t\tthis.selectedOptions = selectedOptions;\n\t\t\t}\n\t\t}\n\t};\n\n\tSelect.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.sync();\n\n\t\tvar node = this.node;\n\n\t\tvar i = node.options.length;\n\t\twhile ( i-- ) {\n\t\t\tnode.options[i].defaultSelected = node.options[i].selected;\n\t\t}\n\n\t\tthis.rendered = true;\n\t};\n\n\tSelect.prototype.sync = function sync () {\n\t\tvar this$1 = this;\n\n\t\tvar selectNode = this.node;\n\n\t\tif ( !selectNode ) { return; }\n\n\t\tvar options = toArray( selectNode.options );\n\n\t\tif ( this.selectedOptions ) {\n\t\t\toptions.forEach( function (o) {\n\t\t\t\tif ( this$1.selectedOptions.indexOf( o ) >= 0 ) { o.selected = true; }\n\t\t\t\telse { o.selected = false; }\n\t\t\t});\n\t\t\tthis.binding.setFromNode( selectNode );\n\t\t\tdelete this.selectedOptions;\n\t\t\treturn;\n\t\t}\n\n\t\tvar selectValue = this.getAttribute( 'value' );\n\t\tvar isMultiple = this.getAttribute( 'multiple' );\n\t\tvar array = isMultiple && Array.isArray( selectValue );\n\n\t\t// If the <select> has a specified value, that should override\n\t\t// these options\n\t\tif ( selectValue !== undefined ) {\n\t\t\tvar optionWasSelected;\n\n\t\t\toptions.forEach( function (o) {\n\t\t\t\tvar optionValue = o._ractive ? o._ractive.value : o.value;\n\t\t\t\tvar shouldSelect = isMultiple ?\n\t\t\t\t\tarray && this$1.valueContains( selectValue, optionValue ) :\n\t\t\t\t\tthis$1.compare( selectValue, optionValue );\n\n\t\t\t\tif ( shouldSelect ) {\n\t\t\t\t\toptionWasSelected = true;\n\t\t\t\t}\n\n\t\t\t\to.selected = shouldSelect;\n\t\t\t});\n\n\t\t\tif ( !optionWasSelected && !isMultiple ) {\n\t\t\t\tif ( this.binding ) {\n\t\t\t\t\tthis.binding.forceUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Otherwise the value should be initialised according to which\n\t\t// <option> element is selected, if twoway binding is in effect\n\t\telse if ( this.binding ) {\n\t\t\tthis.binding.forceUpdate();\n\t\t}\n\t};\n\tSelect.prototype.valueContains = function valueContains ( selectValue, optionValue ) {\n\t\tvar this$1 = this;\n\n\t\tvar i = selectValue.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this$1.compare( optionValue, selectValue[i] ) ) { return true; }\n\t\t}\n\t};\n\tSelect.prototype.compare = function compare (optionValue, selectValue) {\n\t\tvar comparator = this.getAttribute( 'value-comparator' );\n\t\tif ( comparator ) {\n\t\t\tif (typeof comparator === 'function') {\n\t\t\t\treturn comparator( selectValue, optionValue );\n\t\t\t}\n\t\t\tif ( selectValue && optionValue ) {\n\t\t\t\treturn selectValue[comparator] == optionValue[comparator];\n\t\t\t}\n\t\t}\n\t\treturn selectValue == optionValue;\n\t};\n\tSelect.prototype.update = function update () {\n\t\tElement$$1.prototype.update.call(this);\n\t\tthis.sync();\n\t};\n\n\treturn Select;\n}(Element));\n\nvar Textarea = (function (Input$$1) {\n\tfunction Textarea( options ) {\n\t\tvar template = options.template;\n\n\t\toptions.deferContent = true;\n\n\t\tInput$$1.call( this, options );\n\n\t\t// check for single interpolator binding\n\t\tif ( !this.attributeByName.value ) {\n\t\t\tif ( template.f && isBindable( { template: template } ) ) {\n\t\t\t\tthis.attributes.push( createItem( {\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: { t: ATTRIBUTE, f: template.f, n: 'value' },\n\t\t\t\t\tparentFragment: this.parentFragment\n\t\t\t\t} ) );\n\t\t\t} else {\n\t\t\t\tthis.fragment = new Fragment({ owner: this, cssIds: null, template: template.f });\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( Input$$1 ) Textarea.__proto__ = Input$$1;\n\tTextarea.prototype = Object.create( Input$$1 && Input$$1.prototype );\n\tTextarea.prototype.constructor = Textarea;\n\n\tTextarea.prototype.bubble = function bubble () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\n\t\t\tif ( this.rendered && !this.binding && this.fragment ) {\n\t\t\t\trunloop.scheduleTask( function () {\n\t\t\t\t\tthis$1.dirty = false;\n\t\t\t\t\tthis$1.node.value = this$1.fragment.toString();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.parentFragment.bubble(); // default behaviour\n\t\t}\n\t};\n\n\treturn Textarea;\n}(Input));\n\nvar Text = (function (Item$$1) {\n\tfunction Text ( options ) {\n\t\tItem$$1.call( this, options );\n\t\tthis.type = TEXT;\n\t}\n\n\tif ( Item$$1 ) Text.__proto__ = Item$$1;\n\tText.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tText.prototype.constructor = Text;\n\n\tText.prototype.detach = function detach () {\n\t\treturn detachNode( this.node );\n\t};\n\n\tText.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tText.prototype.render = function render ( target, occupants ) {\n\t\tif ( inAttributes() ) { return; }\n\t\tthis.rendered = true;\n\n\t\tprogressiveText( this, target, occupants, this.template );\n\t};\n\n\tText.prototype.toString = function toString ( escape ) {\n\t\treturn escape ? escapeHtml( this.template ) : this.template;\n\t};\n\n\tText.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && shouldDestroy ) { this.detach(); }\n\t\tthis.rendered = false;\n\t};\n\n\tText.prototype.valueOf = function valueOf () {\n\t\treturn this.template;\n\t};\n\n\treturn Text;\n}(Item));\n\nvar proto$2 = Text.prototype;\nproto$2.bind = proto$2.unbind = proto$2.update = noop;\n\nvar camelizeHyphenated = function ( hyphenatedStr ) {\n\treturn hyphenatedStr.replace( /-([a-zA-Z])/g, function ( match, $1 ) {\n\t\treturn $1.toUpperCase();\n\t});\n};\n\nvar prefix;\n\nif ( !isClient ) {\n\tprefix = null;\n} else {\n\tvar prefixCache = {};\n\tvar testStyle = createElement( 'div' ).style;\n\n\tprefix = function ( prop ) {\n\t\tprop = camelizeHyphenated( prop );\n\n\t\tif ( !prefixCache[ prop ] ) {\n\t\t\tif ( testStyle[ prop ] !== undefined ) {\n\t\t\t\tprefixCache[ prop ] = prop;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\t// test vendors...\n\t\t\t\tvar capped = prop.charAt( 0 ).toUpperCase() + prop.substring( 1 );\n\n\t\t\t\tvar i = vendors.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tvar vendor = vendors[i];\n\t\t\t\t\tif ( testStyle[ vendor + capped ] !== undefined ) {\n\t\t\t\t\t\tprefixCache[ prop ] = vendor + capped;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn prefixCache[ prop ];\n\t};\n}\n\nvar prefix$1 = prefix;\n\nvar visible;\nvar hidden = 'hidden';\n\nif ( doc ) {\n\tvar prefix$2;\n\n\tif ( hidden in doc ) {\n\t\tprefix$2 = '';\n\t} else {\n\t\tvar i$1 = vendors.length;\n\t\twhile ( i$1-- ) {\n\t\t\tvar vendor = vendors[i$1];\n\t\t\thidden = vendor + 'Hidden';\n\n\t\t\tif ( hidden in doc ) {\n\t\t\t\tprefix$2 = vendor;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( prefix$2 !== undefined ) {\n\t\tdoc.addEventListener( prefix$2 + 'visibilitychange', onChange );\n\t\tonChange();\n\t} else {\n\t\t// gah, we're in an old browser\n\t\tif ( 'onfocusout' in doc ) {\n\t\t\tdoc.addEventListener( 'focusout', onHide );\n\t\t\tdoc.addEventListener( 'focusin', onShow );\n\t\t}\n\n\t\telse {\n\t\t\twin.addEventListener( 'pagehide', onHide );\n\t\t\twin.addEventListener( 'blur', onHide );\n\n\t\t\twin.addEventListener( 'pageshow', onShow );\n\t\t\twin.addEventListener( 'focus', onShow );\n\t\t}\n\n\t\tvisible = true; // until proven otherwise. Not ideal but hey\n\t}\n}\n\nfunction onChange () {\n\tvisible = !doc[ hidden ];\n}\n\nfunction onHide () {\n\tvisible = false;\n}\n\nfunction onShow () {\n\tvisible = true;\n}\n\nvar unprefixPattern = new RegExp( '^-(?:' + vendors.join( '|' ) + ')-' );\n\nvar unprefix = function ( prop ) {\n\treturn prop.replace( unprefixPattern, '' );\n};\n\nvar vendorPattern = new RegExp( '^(?:' + vendors.join( '|' ) + ')([A-Z])' );\n\nvar hyphenate = function ( str ) {\n\tif ( !str ) { return ''; } // edge case\n\n\tif ( vendorPattern.test( str ) ) { str = '-' + str; }\n\n\treturn str.replace( /[A-Z]/g, function (match) { return '-' + match.toLowerCase(); } );\n};\n\nvar createTransitions;\n\nif ( !isClient ) {\n\tcreateTransitions = null;\n} else {\n\tvar testStyle$1 = createElement( 'div' ).style;\n\tvar linear$2 = function (x) { return x; };\n\n\tvar canUseCssTransitions = {};\n\tvar cannotUseCssTransitions = {};\n\n\t// determine some facts about our environment\n\tvar TRANSITION$1;\n\tvar TRANSITIONEND;\n\tvar CSS_TRANSITIONS_ENABLED;\n\tvar TRANSITION_DURATION;\n\tvar TRANSITION_PROPERTY;\n\tvar TRANSITION_TIMING_FUNCTION;\n\n\tif ( testStyle$1.transition !== undefined ) {\n\t\tTRANSITION$1 = 'transition';\n\t\tTRANSITIONEND = 'transitionend';\n\t\tCSS_TRANSITIONS_ENABLED = true;\n\t} else if ( testStyle$1.webkitTransition !== undefined ) {\n\t\tTRANSITION$1 = 'webkitTransition';\n\t\tTRANSITIONEND = 'webkitTransitionEnd';\n\t\tCSS_TRANSITIONS_ENABLED = true;\n\t} else {\n\t\tCSS_TRANSITIONS_ENABLED = false;\n\t}\n\n\tif ( TRANSITION$1 ) {\n\t\tTRANSITION_DURATION = TRANSITION$1 + 'Duration';\n\t\tTRANSITION_PROPERTY = TRANSITION$1 + 'Property';\n\t\tTRANSITION_TIMING_FUNCTION = TRANSITION$1 + 'TimingFunction';\n\t}\n\n\tcreateTransitions = function ( t, to, options, changedProperties, resolve ) {\n\n\t\t// Wait a beat (otherwise the target styles will be applied immediately)\n\t\t// TODO use a fastdom-style mechanism?\n\t\tsetTimeout( function () {\n\t\t\tvar jsTransitionsComplete;\n\t\t\tvar cssTransitionsComplete;\n\t\t\tvar cssTimeout; // eslint-disable-line prefer-const\n\n\t\t\tfunction transitionDone () { clearTimeout( cssTimeout ); }\n\n\t\t\tfunction checkComplete () {\n\t\t\t\tif ( jsTransitionsComplete && cssTransitionsComplete ) {\n\t\t\t\t\tt.unregisterCompleteHandler( transitionDone );\n\t\t\t\t\t// will changes to events and fire have an unexpected consequence here?\n\t\t\t\t\tt.ractive.fire( t.name + ':end', t.node, t.isIntro );\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// this is used to keep track of which elements can use CSS to animate\n\t\t\t// which properties\n\t\t\tvar hashPrefix = ( t.node.namespaceURI || '' ) + t.node.tagName;\n\n\t\t\t// need to reset transition properties\n\t\t\tvar style = t.node.style;\n\t\t\tvar previous = {\n\t\t\t\tproperty: style[ TRANSITION_PROPERTY ],\n\t\t\t\ttiming: style[ TRANSITION_TIMING_FUNCTION ],\n\t\t\t\tduration: style[ TRANSITION_DURATION ]\n\t\t\t};\n\n\t\t\tstyle[ TRANSITION_PROPERTY ] = changedProperties.map( prefix$1 ).map( hyphenate ).join( ',' );\n\t\t\tvar easingName = hyphenate( options.easing || 'linear' );\n\t\t\tstyle[ TRANSITION_TIMING_FUNCTION ] = easingName;\n\t\t\tvar cssTiming = style[ TRANSITION_TIMING_FUNCTION ] === easingName;\n\t\t\tstyle[ TRANSITION_DURATION ] = ( options.duration / 1000 ) + 's';\n\n\t\t\tfunction transitionEndHandler ( event ) {\n\t\t\t\tvar index = changedProperties.indexOf( camelizeHyphenated( unprefix( event.propertyName ) ) );\n\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\tchangedProperties.splice( index, 1 );\n\t\t\t\t}\n\n\t\t\t\tif ( changedProperties.length ) {\n\t\t\t\t\t// still transitioning...\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( cssTimeout );\n\t\t\t\tcssTransitionsDone();\n\t\t\t}\n\n\t\t\tfunction cssTransitionsDone () {\n\t\t\t\tstyle[ TRANSITION_PROPERTY ] = previous.property;\n\t\t\t\tstyle[ TRANSITION_TIMING_FUNCTION ] = previous.duration;\n\t\t\t\tstyle[ TRANSITION_DURATION ] = previous.timing;\n\n\t\t\t\tt.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );\n\n\t\t\t\tcssTransitionsComplete = true;\n\t\t\t\tcheckComplete();\n\t\t\t}\n\n\t\t\tt.node.addEventListener( TRANSITIONEND, transitionEndHandler, false );\n\n\t\t\t// safety net in case transitionend never fires\n\t\t\tcssTimeout = setTimeout( function () {\n\t\t\t\tchangedProperties = [];\n\t\t\t\tcssTransitionsDone();\n\t\t\t}, options.duration + ( options.delay || 0 ) + 50 );\n\t\t\tt.registerCompleteHandler( transitionDone );\n\n\t\t\tsetTimeout( function () {\n\t\t\t\tvar i = changedProperties.length;\n\t\t\t\tvar hash;\n\t\t\t\tvar originalValue;\n\t\t\t\tvar index;\n\t\t\t\tvar propertiesToTransitionInJs = [];\n\t\t\t\tvar prop;\n\t\t\t\tvar suffix;\n\t\t\t\tvar interpolator;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tprop = changedProperties[i];\n\t\t\t\t\thash = hashPrefix + prop;\n\n\t\t\t\t\tif ( cssTiming && CSS_TRANSITIONS_ENABLED && !cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\tstyle[ prefix$1( prop ) ] = to[ prop ];\n\n\t\t\t\t\t\t// If we're not sure if CSS transitions are supported for\n\t\t\t\t\t\t// this tag/property combo, find out now\n\t\t\t\t\t\tif ( !canUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t\toriginalValue = t.getStyle( prop );\n\n\t\t\t\t\t\t\t// if this property is transitionable in this browser,\n\t\t\t\t\t\t\t// the current style will be different from the target style\n\t\t\t\t\t\t\tcanUseCssTransitions[ hash ] = ( t.getStyle( prop ) != to[ prop ] );\n\t\t\t\t\t\t\tcannotUseCssTransitions[ hash ] = !canUseCssTransitions[ hash ];\n\n\t\t\t\t\t\t\t// Reset, if we're going to use timers after all\n\t\t\t\t\t\t\tif ( cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t\t\tstyle[ prefix$1( prop ) ] = originalValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !cssTiming || !CSS_TRANSITIONS_ENABLED || cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t// we need to fall back to timer-based stuff\n\t\t\t\t\t\tif ( originalValue === undefined ) {\n\t\t\t\t\t\t\toriginalValue = t.getStyle( prop );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// need to remove this from changedProperties, otherwise transitionEndHandler\n\t\t\t\t\t\t// will get confused\n\t\t\t\t\t\tindex = changedProperties.indexOf( prop );\n\t\t\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\t\t\twarnIfDebug( 'Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!', { node: t.node });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchangedProperties.splice( index, 1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// TODO Determine whether this property is animatable at all\n\n\t\t\t\t\t\tsuffix = /[^\\d]*$/.exec( to[ prop ] )[0];\n\t\t\t\t\t\tinterpolator = interpolate( parseFloat( originalValue ), parseFloat( to[ prop ] ) ) || ( function () { return to[ prop ]; } );\n\n\t\t\t\t\t\t// ...then kick off a timer-based transition\n\t\t\t\t\t\tpropertiesToTransitionInJs.push({\n\t\t\t\t\t\t\tname: prefix$1( prop ),\n\t\t\t\t\t\t\tinterpolator: interpolator,\n\t\t\t\t\t\t\tsuffix: suffix\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// javascript transitions\n\t\t\t\tif ( propertiesToTransitionInJs.length ) {\n\t\t\t\t\tvar easing;\n\n\t\t\t\t\tif ( typeof options.easing === 'string' ) {\n\t\t\t\t\t\teasing = t.ractive.easing[ options.easing ];\n\n\t\t\t\t\t\tif ( !easing ) {\n\t\t\t\t\t\t\twarnOnceIfDebug( missingPlugin( options.easing, 'easing' ) );\n\t\t\t\t\t\t\teasing = linear$2;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( typeof options.easing === 'function' ) {\n\t\t\t\t\t\teasing = options.easing;\n\t\t\t\t\t} else {\n\t\t\t\t\t\teasing = linear$2;\n\t\t\t\t\t}\n\n\t\t\t\t\tnew Ticker({\n\t\t\t\t\t\tduration: options.duration,\n\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t\tstep: function step ( pos ) {\n\t\t\t\t\t\t\tvar i = propertiesToTransitionInJs.length;\n\t\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\t\tvar prop = propertiesToTransitionInJs[i];\n\t\t\t\t\t\t\t\tt.node.style[ prop.name ] = prop.interpolator( pos ) + prop.suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: function complete () {\n\t\t\t\t\t\t\tjsTransitionsComplete = true;\n\t\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tjsTransitionsComplete = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !changedProperties.length ) {\n\t\t\t\t\t// We need to cancel the transitionEndHandler, and deal with\n\t\t\t\t\t// the fact that it will never fire\n\t\t\t\t\tt.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );\n\t\t\t\t\tcssTransitionsComplete = true;\n\t\t\t\t\tcheckComplete();\n\t\t\t\t}\n\t\t\t}, 0 );\n\t\t}, options.delay || 0 );\n\t};\n}\n\nvar createTransitions$1 = createTransitions;\n\nfunction resetStyle ( node, style ) {\n\tif ( style ) {\n\t\tnode.setAttribute( 'style', style );\n\t} else {\n\t\t// Next line is necessary, to remove empty style attribute!\n\t\t// See http://stackoverflow.com/a/7167553\n\t\tnode.getAttribute( 'style' );\n\t\tnode.removeAttribute( 'style' );\n\t}\n}\n\nvar getComputedStyle = win && win.getComputedStyle;\nvar resolved$1 = Promise.resolve();\n\nvar names = {\n\tt0: 'intro-outro',\n\tt1: 'intro',\n\tt2: 'outro'\n};\n\nvar Transition = function Transition ( options ) {\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\tthis.ractive = this.owner.ractive;\n\tthis.template = options.template;\n\tthis.parentFragment = options.parentFragment;\n\tthis.options = options;\n\tthis.onComplete = [];\n};\n\nTransition.prototype.animateStyle = function animateStyle ( style, value, options ) {\n\t\tvar this$1 = this;\n\n\tif ( arguments.length === 4 ) {\n\t\tthrow new Error( 't.animateStyle() returns a promise - use .then() instead of passing a callback' );\n\t}\n\n\t// Special case - page isn't visible. Don't animate anything, because\n\t// that way you'll never get CSS transitionend events\n\tif ( !visible ) {\n\t\tthis.setStyle( style, value );\n\t\treturn resolved$1;\n\t}\n\n\tvar to;\n\n\tif ( typeof style === 'string' ) {\n\t\tto = {};\n\t\tto[ style ] = value;\n\t} else {\n\t\tto = style;\n\n\t\t// shuffle arguments\n\t\toptions = value;\n\t}\n\n\t// As of 0.3.9, transition authors should supply an `option` object with\n\t// `duration` and `easing` properties (and optional `delay`), plus a\n\t// callback function that gets called after the animation completes\n\n\t// TODO remove this check in a future version\n\tif ( !options ) {\n\t\twarnOnceIfDebug( 'The \""%s\"" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340', this.name );\n\t\toptions = this;\n\t}\n\n\treturn new Promise( function (fulfil) {\n\t\t// Edge case - if duration is zero, set style synchronously and complete\n\t\tif ( !options.duration ) {\n\t\t\tthis$1.setStyle( to );\n\t\t\tfulfil();\n\t\t\treturn;\n\t\t}\n\n\t\t// Get a list of the properties we're animating\n\t\tvar propertyNames = Object.keys( to );\n\t\tvar changedProperties = [];\n\n\t\t// Store the current styles\n\t\tvar computedStyle = getComputedStyle( this$1.node );\n\n\t\tvar i = propertyNames.length;\n\t\twhile ( i-- ) {\n\t\t\tvar prop = propertyNames[i];\n\t\t\tvar current = computedStyle[ prefix$1( prop ) ];\n\n\t\t\tif ( current === '0px' ) { current = 0; }\n\n\t\t\t// we need to know if we're actually changing anything\n\t\t\tif ( current != to[ prop ] ) { // use != instead of !==, so we can compare strings with numbers\n\t\t\t\tchangedProperties.push( prop );\n\n\t\t\t\t// make the computed style explicit, so we can animate where\n\t\t\t\t// e.g. height='auto'\n\t\t\t\tthis$1.node.style[ prefix$1( prop ) ] = current;\n\t\t\t}\n\t\t}\n\n\t\t// If we're not actually changing anything, the transitionend event\n\t\t// will never fire! So we complete early\n\t\tif ( !changedProperties.length ) {\n\t\t\tfulfil();\n\t\t\treturn;\n\t\t}\n\n\t\tcreateTransitions$1( this$1, to, options, changedProperties, fulfil );\n\t});\n};\n\nTransition.prototype.bind = function bind () {\n\tvar options = this.options;\n\tvar type = options.template && options.template.v;\n\tif ( type ) {\n\t\tif ( type === 't0' || type === 't1' ) { this.element.intro = this; }\n\t\tif ( type === 't0' || type === 't2' ) { this.element.outro = this; }\n\t\tthis.eventName = names[ type ];\n\t}\n\n\tvar ractive = this.owner.ractive;\n\n\tthis.name = options.name || options.template.n;\n\n\tif ( options.params ) {\n\t\tthis.params = options.params;\n\t}\n\n\tif ( typeof this.name === 'function' ) {\n\t\tthis._fn = this.name;\n\t\tthis.name = this._fn.name;\n\t} else {\n\t\tthis._fn = findInViewHierarchy( 'transitions', ractive, this.name );\n\t}\n\n\tif ( !this._fn ) {\n\t\twarnOnceIfDebug( missingPlugin( this.name, 'transition' ), { ractive: ractive });\n\t}\n\n\tsetupArgsFn( this, options.template );\n};\n\nTransition.prototype.getParams = function getParams () {\n\tif ( this.params ) { return this.params; }\n\n\t// get expression args if supplied\n\tif ( this.fn ) {\n\t\tvar values = resolveArgs( this, this.template, this.parentFragment ).map( function (model) {\n\t\t\tif ( !model ) { return undefined; }\n\n\t\t\treturn model.get();\n\t\t});\n\t\treturn this.fn.apply( this.ractive, values );\n\t}\n};\n\nTransition.prototype.getStyle = function getStyle ( props ) {\n\tvar computedStyle = getComputedStyle( this.node );\n\n\tif ( typeof props === 'string' ) {\n\t\tvar value = computedStyle[ prefix$1( props ) ];\n\t\treturn value === '0px' ? 0 : value;\n\t}\n\n\tif ( !Array.isArray( props ) ) {\n\t\tthrow new Error( 'Transition$getStyle must be passed a string, or an array of strings representing CSS properties' );\n\t}\n\n\tvar styles = {};\n\n\tvar i = props.length;\n\twhile ( i-- ) {\n\t\tvar prop = props[i];\n\t\tvar value$1 = computedStyle[ prefix$1( prop ) ];\n\n\t\tif ( value$1 === '0px' ) { value$1 = 0; }\n\t\tstyles[ prop ] = value$1;\n\t}\n\n\treturn styles;\n};\n\nTransition.prototype.processParams = function processParams ( params, defaults ) {\n\tif ( typeof params === 'number' ) {\n\t\tparams = { duration: params };\n\t}\n\n\telse if ( typeof params === 'string' ) {\n\t\tif ( params === 'slow' ) {\n\t\t\tparams = { duration: 600 };\n\t\t} else if ( params === 'fast' ) {\n\t\t\tparams = { duration: 200 };\n\t\t} else {\n\t\t\tparams = { duration: 400 };\n\t\t}\n\t} else if ( !params ) {\n\t\tparams = {};\n\t}\n\n\treturn Object.assign( {}, defaults, params );\n};\n\nTransition.prototype.registerCompleteHandler = function registerCompleteHandler ( fn ) {\n\taddToArray( this.onComplete, fn );\n};\n\nTransition.prototype.setStyle = function setStyle ( style, value ) {\n\t\tvar this$1 = this;\n\n\tif ( typeof style === 'string' ) {\n\t\tthis.node.style[ prefix$1( style ) ] = value;\n\t}\n\n\telse {\n\t\tvar prop;\n\t\tfor ( prop in style ) {\n\t\t\tif ( style.hasOwnProperty( prop ) ) {\n\t\t\t\tthis$1.node.style[ prefix$1( prop ) ] = style[ prop ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\nTransition.prototype.shouldFire = function shouldFire ( type ) {\n\tif ( !this.ractive.transitionsEnabled ) { return false; }\n\n\t// check for noIntro and noOutro cases, which only apply when the owner ractive is rendering and unrendering, respectively\n\tif ( type === 'intro' && this.ractive.rendering && nearestProp( 'noIntro', this.ractive, true ) ) { return false; }\n\tif ( type === 'outro' && this.ractive.unrendering && nearestProp( 'noOutro', this.ractive, false ) ) { return false; }\n\n\tvar params = this.getParams(); // this is an array, the params object should be the first member\n\t// if there's not a parent element, this can't be nested, so roll on\n\tif ( !this.element.parent ) { return true; }\n\n\t// if there is a local param, it takes precedent\n\tif ( params && params[0] && 'nested' in params[0] ) {\n\t\tif ( params[0].nested !== false ) { return true; }\n\t} else { // use the nearest instance setting\n\t\t// find the nearest instance that actually has a nested setting\n\t\tif ( nearestProp( 'nestedTransitions', this.ractive ) !== false ) { return true; }\n\t}\n\n\t// check to see if this is actually a nested transition\n\tvar el = this.element.parent;\n\twhile ( el ) {\n\t\tif ( el[type] && el[type].starting ) { return false; }\n\t\tel = el.parent;\n\t}\n\n\treturn true;\n};\n\nTransition.prototype.start = function start () {\n\t\tvar this$1 = this;\n\n\tvar node = this.node = this.element.node;\n\tvar originalStyle = node.getAttribute( 'style' );\n\n\tvar completed;\n\tvar args = this.getParams();\n\n\t// create t.complete() - we don't want this on the prototype,\n\t// because we don't want `this` silliness when passing it as\n\t// an argument\n\tthis.complete = function (noReset) {\n\t\tthis$1.starting = false;\n\t\tif ( completed ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis$1.onComplete.forEach( function (fn) { return fn(); } );\n\t\tif ( !noReset && this$1.isIntro ) {\n\t\t\tresetStyle( node, originalStyle);\n\t\t}\n\n\t\tthis$1._manager.remove( this$1 );\n\n\t\tcompleted = true;\n\t};\n\n\t// If the transition function doesn't exist, abort\n\tif ( !this._fn ) {\n\t\tthis.complete();\n\t\treturn;\n\t}\n\n\tvar promise = this._fn.apply( this.ractive, [ this ].concat( args ) );\n\tif ( promise ) { promise.then( this.complete ); }\n};\n\nTransition.prototype.toString = function toString () { return ''; };\n\nTransition.prototype.unbind = function unbind () {\n\tif ( !this.element.attributes.unbinding ) {\n\t\tvar type = this.options && this.options.template && this.options.template.v;\n\t\tif ( type === 't0' || type === 't1' ) { this.element.intro = null; }\n\t\tif ( type === 't0' || type === 't2' ) { this.element.outro = null; }\n\t}\n};\n\nTransition.prototype.unregisterCompleteHandler = function unregisterCompleteHandler ( fn ) {\n\tremoveFromArray$1( this.onComplete, fn );\n};\n\nvar proto$3 = Transition.prototype;\nproto$3.destroyed = proto$3.render = proto$3.unrender = proto$3.update = noop;\n\nfunction nearestProp ( prop, ractive, rendering ) {\n\tvar instance = ractive;\n\twhile ( instance ) {\n\t\tif ( instance.hasOwnProperty( prop ) && ( rendering === undefined || rendering ? instance.rendering : instance.unrendering ) ) { return instance[ prop ]; }\n\t\tinstance = instance.component && instance.component.ractive;\n\t}\n\n\treturn ractive[ prop ];\n}\n\nvar elementCache = {};\n\nvar ieBug;\nvar ieBlacklist;\n\ntry {\n\tcreateElement( 'table' ).innerHTML = 'foo';\n} catch ( err ) {\n\tieBug = true;\n\n\tieBlacklist = {\n\t\tTABLE:  [ '<table class=\""x\"">', '</table>' ],\n\t\tTHEAD:  [ '<table><thead class=\""x\"">', '</thead></table>' ],\n\t\tTBODY:  [ '<table><tbody class=\""x\"">', '</tbody></table>' ],\n\t\tTR:     [ '<table><tr class=\""x\"">', '</tr></table>' ],\n\t\tSELECT: [ '<select class=\""x\"">', '</select>' ]\n\t};\n}\n\nvar insertHtml = function ( html$$1, node ) {\n\tvar nodes = [];\n\n\t// render 0 and false\n\tif ( html$$1 == null || html$$1 === '' ) { return nodes; }\n\n\tvar container;\n\tvar wrapper;\n\tvar selectedOption;\n\n\tif ( ieBug && ( wrapper = ieBlacklist[ node.tagName ] ) ) {\n\t\tcontainer = element( 'DIV' );\n\t\tcontainer.innerHTML = wrapper[0] + html$$1 + wrapper[1];\n\t\tcontainer = container.querySelector( '.x' );\n\n\t\tif ( container.tagName === 'SELECT' ) {\n\t\t\tselectedOption = container.options[ container.selectedIndex ];\n\t\t}\n\t}\n\n\telse if ( node.namespaceURI === svg$1 ) {\n\t\tcontainer = element( 'DIV' );\n\t\tcontainer.innerHTML = '<svg class=\""x\"">' + html$$1 + '</svg>';\n\t\tcontainer = container.querySelector( '.x' );\n\t}\n\n\telse if ( node.tagName === 'TEXTAREA' ) {\n\t\tcontainer = createElement( 'div' );\n\n\t\tif ( typeof container.textContent !== 'undefined' ) {\n\t\t\tcontainer.textContent = html$$1;\n\t\t} else {\n\t\t\tcontainer.innerHTML = html$$1;\n\t\t}\n\t}\n\n\telse {\n\t\tcontainer = element( node.tagName );\n\t\tcontainer.innerHTML = html$$1;\n\n\t\tif ( container.tagName === 'SELECT' ) {\n\t\t\tselectedOption = container.options[ container.selectedIndex ];\n\t\t}\n\t}\n\n\tvar child;\n\twhile ( child = container.firstChild ) {\n\t\tnodes.push( child );\n\t\tcontainer.removeChild( child );\n\t}\n\n\t// This is really annoying. Extracting <option> nodes from the\n\t// temporary container <select> causes the remaining ones to\n\t// become selected. So now we have to deselect them. IE8, you\n\t// amaze me. You really do\n\t// ...and now Chrome too\n\tvar i;\n\tif ( node.tagName === 'SELECT' ) {\n\t\ti = nodes.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( nodes[i] !== selectedOption ) {\n\t\t\t\tnodes[i].selected = false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nodes;\n};\n\nfunction element ( tagName ) {\n\treturn elementCache[ tagName ] || ( elementCache[ tagName ] = createElement( tagName ) );\n}\n\nvar Triple = (function (Mustache$$1) {\n\tfunction Triple ( options ) {\n\t\tMustache$$1.call( this, options );\n\t}\n\n\tif ( Mustache$$1 ) Triple.__proto__ = Mustache$$1;\n\tTriple.prototype = Object.create( Mustache$$1 && Mustache$$1.prototype );\n\tTriple.prototype.constructor = Triple;\n\n\tTriple.prototype.detach = function detach () {\n\t\tvar docFrag = createDocumentFragment();\n\t\tthis.nodes.forEach( function (node) { return docFrag.appendChild( node ); } );\n\t\treturn docFrag;\n\t};\n\n\tTriple.prototype.find = function find ( selector ) {\n\t\tvar this$1 = this;\n\n\t\tvar len = this.nodes.length;\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar node = this$1.nodes[i];\n\n\t\t\tif ( node.nodeType !== 1 ) { continue; }\n\n\t\t\tif ( matches( node, selector ) ) { return node; }\n\n\t\t\tvar queryResult = node.querySelector( selector );\n\t\t\tif ( queryResult ) { return queryResult; }\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tTriple.prototype.findAll = function findAll ( selector, query ) {\n\t\tvar this$1 = this;\n\n\t\tvar len = this.nodes.length;\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar node = this$1.nodes[i];\n\n\t\t\tif ( node.nodeType !== 1 ) { continue; }\n\n\t\t\tif ( query.test( node ) ) { query.add( node ); }\n\n\t\t\tvar queryAllResult = node.querySelectorAll( selector );\n\t\t\tif ( queryAllResult ) {\n\t\t\t\tvar numNodes = queryAllResult.length;\n\t\t\t\tvar j = (void 0);\n\n\t\t\t\tfor ( j = 0; j < numNodes; j += 1 ) {\n\t\t\t\t\tquery.add( queryAllResult[j] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tTriple.prototype.findComponent = function findComponent () {\n\t\treturn null;\n\t};\n\n\tTriple.prototype.firstNode = function firstNode () {\n\t\treturn this.rendered && this.nodes[0];\n\t};\n\n\tTriple.prototype.render = function render ( target, occupants ) {\n\t\tvar this$1 = this;\n\n\t\tvar parentNode = this.parentFragment.findParentNode();\n\n\t\tif ( !this.nodes ) {\n\t\t\tvar html = this.model ? this.model.get() : '';\n\t\t\tthis.nodes = insertHtml( html, this.parentFragment.findParentNode(), target );\n\t\t}\n\n\t\tvar nodes = this.nodes;\n\t\tvar anchor = this.parentFragment.findNextNode( this );\n\n\t\t// progressive enhancement\n\t\tif ( occupants ) {\n\t\t\tvar i = -1;\n\t\t\tvar next;\n\n\t\t\t// start with the first node that should be rendered\n\t\t\twhile ( occupants.length && ( next = this.nodes[ i + 1 ] ) ) {\n\t\t\t\tvar n = (void 0);\n\t\t\t\t// look through the occupants until a matching node is found\n\t\t\t\twhile ( n = occupants.shift() ) {\n\t\t\t\t\tvar t = n.nodeType;\n\n\t\t\t\t\tif ( t === next.nodeType && ( ( t === 1 && n.outerHTML === next.outerHTML ) || ( ( t === 3 || t === 8 ) && n.nodeValue === next.nodeValue ) ) ) {\n\t\t\t\t\t\tthis$1.nodes.splice( ++i, 1, n ); // replace the generated node with the existing one\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.removeChild( n ); // remove the non-matching existing node\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( i >= 0 ) {\n\t\t\t\t// update the list of remaining nodes to attach, excluding any that were replaced by existing nodes\n\t\t\t\tnodes = this.nodes.slice( i );\n\t\t\t}\n\n\t\t\t// update the anchor to be the next occupant\n\t\t\tif ( occupants.length ) { anchor = occupants[0]; }\n\t\t}\n\n\t\t// attach any remainging nodes to the parent\n\t\tif ( nodes.length ) {\n\t\t\tvar frag = createDocumentFragment();\n\t\t\tnodes.forEach( function (n) { return frag.appendChild( n ); } );\n\n\t\t\tif ( anchor ) {\n\t\t\t\tanchor.parentNode.insertBefore( frag, anchor );\n\t\t\t} else {\n\t\t\t\tparentNode.appendChild( frag );\n\t\t\t}\n\t\t}\n\n\t\tthis.rendered = true;\n\t};\n\n\tTriple.prototype.toString = function toString () {\n\t\treturn this.model && this.model.get() != null ? decodeCharacterReferences( '' + this.model.get() ) : '';\n\t};\n\n\tTriple.prototype.unrender = function unrender () {\n\t\tif ( this.nodes ) { this.nodes.forEach( function (node) { return detachNode( node ); } ); }\n\t\tthis.rendered = false;\n\t\tthis.nodes = null;\n\t};\n\n\tTriple.prototype.update = function update () {\n\t\tif ( this.rendered && this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tthis.unrender();\n\t\t\tthis.render();\n\t\t} else {\n\t\t\t// make sure to reset the dirty flag even if not rendered\n\t\t\tthis.dirty = false;\n\t\t}\n\t};\n\n\treturn Triple;\n}(Mustache));\n\n// finds the component constructor in the registry or view hierarchy registries\nfunction getComponentConstructor ( ractive, name ) {\n\tvar instance = findInstance( 'components', ractive, name );\n\tvar Component;\n\n\tif ( instance ) {\n\t\tComponent = instance.components[ name ];\n\n\t\t// best test we have for not Ractive.extend\n\t\tif ( Component && !Component._Parent ) {\n\t\t\t// function option, execute and store for reset\n\t\t\tvar fn = Component.bind( instance );\n\t\t\tfn.isOwner = instance.components.hasOwnProperty( name );\n\t\t\tComponent = fn();\n\n\t\t\tif ( !Component ) {\n\t\t\t\twarnIfDebug( noRegistryFunctionReturn, name, 'component', 'component', { ractive: ractive });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( typeof Component === 'string' ) {\n\t\t\t\t// allow string lookup\n\t\t\t\tComponent = getComponentConstructor( ractive, Component );\n\t\t\t}\n\n\t\t\tComponent._fn = fn;\n\t\t\tinstance.components[ name ] = Component;\n\t\t}\n\t}\n\n\treturn Component;\n}\n\n//import Yielder from './Yielder';\nvar constructors = {};\nconstructors[ ALIAS ] = Alias;\nconstructors[ ANCHOR ] = Component;\nconstructors[ DOCTYPE ] = Doctype;\nconstructors[ INTERPOLATOR ] = Interpolator;\nconstructors[ PARTIAL ] = Partial;\nconstructors[ SECTION ] = Section;\nconstructors[ TRIPLE ] = Triple;\nconstructors[ YIELDER ] = Partial;\n\nconstructors[ ATTRIBUTE ] = Attribute;\nconstructors[ BINDING_FLAG ] = BindingFlag;\nconstructors[ DECORATOR ] = Decorator;\nconstructors[ EVENT ] = EventDirective;\nconstructors[ TRANSITION ] = Transition;\n\nvar specialElements = {\n\tdoctype: Doctype,\n\tform: Form,\n\tinput: Input,\n\toption: Option,\n\tselect: Select,\n\ttextarea: Textarea\n};\n\nfunction createItem ( options ) {\n\tif ( typeof options.template === 'string' ) {\n\t\treturn new Text( options );\n\t}\n\n\tif ( options.template.t === ELEMENT ) {\n\t\t// could be component or element\n\t\tvar ComponentConstructor = getComponentConstructor( options.parentFragment.ractive, options.template.e );\n\t\tif ( ComponentConstructor ) {\n\t\t\treturn new Component( options, ComponentConstructor );\n\t\t}\n\n\t\tvar tagName = options.template.e.toLowerCase();\n\n\t\tvar ElementConstructor = specialElements[ tagName ] || Element;\n\t\treturn new ElementConstructor( options );\n\t}\n\n\tvar Item;\n\n\t// component mappings are a special case of attribute\n\tif ( options.template.t === ATTRIBUTE ) {\n\t\tvar el = options.owner;\n\t\tif ( !el || ( el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT ) ) {\n\t\t\tel = findElement( options.parentFragment );\n\t\t}\n\t\toptions.element = el;\n\n\t\tItem = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;\n\t} else {\n\t\tItem = constructors[ options.template.t ];\n\t}\n\n\tif ( !Item ) { throw new Error( (\""Unrecognised item type \"" + (options.template.t)) ); }\n\n\treturn new Item( options );\n}\n\n// TODO all this code needs to die\nfunction processItems ( items, values, guid, counter ) {\n\tif ( counter === void 0 ) counter = 0;\n\n\treturn items.map( function (item) {\n\t\tif ( item.type === TEXT ) {\n\t\t\treturn item.template;\n\t\t}\n\n\t\tif ( item.fragment ) {\n\t\t\tif ( item.fragment.iterations ) {\n\t\t\t\treturn item.fragment.iterations.map( function (fragment) {\n\t\t\t\t\treturn processItems( fragment.items, values, guid, counter );\n\t\t\t\t}).join( '' );\n\t\t\t} else {\n\t\t\t\treturn processItems( item.fragment.items, values, guid, counter );\n\t\t\t}\n\t\t}\n\n\t\tvar placeholderId = guid + \""-\"" + (counter++);\n\t\tvar model = item.model || item.newModel;\n\n\t\tvalues[ placeholderId ] = model ?\n\t\t\tmodel.wrapper ?\n\t\t\t\tmodel.wrapperValue :\n\t\t\t\tmodel.get() :\n\t\t\tundefined;\n\n\t\treturn '${' + placeholderId + '}';\n\t}).join( '' );\n}\n\nfunction unrenderAndDestroy$1 ( item ) {\n\titem.unrender( true );\n}\n\nvar Fragment = function Fragment ( options ) {\n\tthis.owner = options.owner; // The item that owns this fragment - an element, section, partial, or attribute\n\n\tthis.isRoot = !options.owner.parentFragment;\n\tthis.parent = this.isRoot ? null : this.owner.parentFragment;\n\tthis.ractive = options.ractive || ( this.isRoot ? options.owner : this.parent.ractive );\n\n\tthis.componentParent = ( this.isRoot && this.ractive.component ) ? this.ractive.component.parentFragment : null;\n\tthis.delegate = this.parent ? this.parent.delegate : ( this.componentParent && this.componentParent.delegate );\n\n\tthis.context = null;\n\tthis.rendered = false;\n\n\t// encapsulated styles should be inherited until they get applied by an element\n\tthis.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );\n\n\tthis.dirty = false;\n\tthis.dirtyValue = true; // used for attribute values\n\n\tthis.template = options.template || [];\n\tthis.createItems();\n};\n\nFragment.prototype.bind = function bind$1 ( context ) {\n\tthis.context = context;\n\tthis.items.forEach( bind$1$1 );\n\tthis.bound = true;\n\n\t// in rare cases, a forced resolution (or similar) will cause the\n\t// fragment to be dirty before it's even finished binding. In those\n\t// cases we update immediately\n\tif ( this.dirty ) { this.update(); }\n\n\treturn this;\n};\n\nFragment.prototype.bubble = function bubble () {\n\tthis.dirtyValue = true;\n\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\n\t\tif ( this.isRoot ) { // TODO encapsulate 'is component root, but not overall root' check?\n\t\t\tif ( this.ractive.component ) {\n\t\t\t\tthis.ractive.component.bubble();\n\t\t\t} else if ( this.bound ) {\n\t\t\t\trunloop.addFragment( this );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.owner.bubble( this.index );\n\t\t}\n\t}\n};\n\nFragment.prototype.createItems = function createItems () {\n\t\tvar this$1 = this;\n\n\t// this is a hot code path\n\tvar max = this.template.length;\n\tthis.items = [];\n\tfor ( var i = 0; i < max; i++ ) {\n\t\tthis$1.items[i] = createItem({ parentFragment: this$1, template: this$1.template[i], index: i });\n\t}\n};\n\nFragment.prototype.destroyed = function destroyed$1 () {\n\tthis.items.forEach( destroyed$1$1 );\n};\n\nFragment.prototype.detach = function detach () {\n\tvar docFrag = createDocumentFragment();\n\tthis.items.forEach( function (item) { return docFrag.appendChild( item.detach() ); } );\n\treturn docFrag;\n};\n\nFragment.prototype.find = function find ( selector, options ) {\n\treturn findMap( this.items, function (i) { return i.find( selector, options ); } );\n};\n\nFragment.prototype.findAll = function findAll ( selector, query ) {\n\tif ( this.items ) {\n\t\tthis.items.forEach( function (i) { return i.findAll && i.findAll( selector, query ); } );\n\t}\n};\n\nFragment.prototype.findComponent = function findComponent ( name, options ) {\n\treturn findMap( this.items, function (i) { return i.findComponent( name, options ); } );\n};\n\nFragment.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\tif ( this.items ) {\n\t\tthis.items.forEach( function (i) { return i.findAllComponents && i.findAllComponents( name, query ); } );\n\t}\n};\n\nFragment.prototype.findContext = function findContext () {\n\tvar fragment = this;\n\twhile ( fragment && !fragment.context ) { fragment = fragment.parent; }\n\tif ( !fragment ) { return this.ractive.viewmodel; }\n\telse { return fragment.context; }\n};\n\nFragment.prototype.findNextNode = function findNextNode ( item ) {\n\t\tvar this$1 = this;\n\n\t// search for the next node going forward\n\tif ( item ) {\n\t\tfor ( var i = item.index + 1; i < this.items.length; i++ ) {\n\t\t\tif ( !this$1.items[ i ] ) { continue; }\n\n\t\t\tvar node = this$1.items[ i ].firstNode( true );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n\n\t// if this is the root fragment, and there are no more items,\n\t// it means we're at the end...\n\tif ( this.isRoot ) {\n\t\tif ( this.ractive.component ) {\n\t\t\treturn this.ractive.component.parentFragment.findNextNode( this.ractive.component );\n\t\t}\n\n\t\t// TODO possible edge case with other content\n\t\t// appended to this.ractive.el?\n\t\treturn null;\n\t}\n\n\tif ( this.parent ) { return this.owner.findNextNode( this ); } // the argument is in case the parent is a RepeatedFragment\n};\n\nFragment.prototype.findParentNode = function findParentNode () {\n\tvar fragment = this;\n\n\tdo {\n\t\tif ( fragment.owner.type === ELEMENT ) {\n\t\t\treturn fragment.owner.node;\n\t\t}\n\n\t\tif ( fragment.isRoot && !fragment.ractive.component ) { // TODO encapsulate check\n\t\t\treturn fragment.ractive.el;\n\t\t}\n\n\t\tif ( fragment.owner.type === YIELDER ) {\n\t\t\tfragment = fragment.owner.containerFragment;\n\t\t} else {\n\t\t\tfragment = fragment.componentParent || fragment.parent; // TODO ugh\n\t\t}\n\t} while ( fragment );\n\n\tthrow new Error( 'Could not find parent node' ); // TODO link to issue tracker\n};\n\nFragment.prototype.findRepeatingFragment = function findRepeatingFragment () {\n\tvar fragment = this;\n\t// TODO better check than fragment.parent.iterations\n\twhile ( ( fragment.parent || fragment.componentParent ) && !fragment.isIteration ) {\n\t\tfragment = fragment.parent || fragment.componentParent;\n\t}\n\n\treturn fragment;\n};\n\nFragment.prototype.firstNode = function firstNode ( skipParent ) {\n\tvar node = findMap( this.items, function (i) { return i.firstNode( true ); } );\n\tif ( node ) { return node; }\n\tif ( skipParent ) { return null; }\n\n\treturn this.parent.findNextNode( this.owner );\n};\n\nFragment.prototype.rebinding = function rebinding ( next ) {\n\tthis.context = next;\n};\n\nFragment.prototype.render = function render ( target, occupants ) {\n\tif ( this.rendered ) { throw new Error( 'Fragment is already rendered!' ); }\n\tthis.rendered = true;\n\n\tthis.items.forEach( function (item) { return item.render( target, occupants ); } );\n};\n\nFragment.prototype.resetTemplate = function resetTemplate ( template ) {\n\tvar wasBound = this.bound;\n\tvar wasRendered = this.rendered;\n\n\t// TODO ensure transitions are disabled globally during reset\n\n\tif ( wasBound ) {\n\t\tif ( wasRendered ) { this.unrender( true ); }\n\t\tthis.unbind();\n\t}\n\n\tthis.template = template;\n\tthis.createItems();\n\n\tif ( wasBound ) {\n\t\tthis.bind( this.context );\n\n\t\tif ( wasRendered ) {\n\t\t\tvar parentNode = this.findParentNode();\n\t\t\tvar anchor = this.findNextNode();\n\n\t\t\tif ( anchor ) {\n\t\t\t\tvar docFrag = createDocumentFragment();\n\t\t\t\tthis.render( docFrag );\n\t\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t\t} else {\n\t\t\t\tthis.render( parentNode );\n\t\t\t}\n\t\t}\n\t}\n};\n\nFragment.prototype.shuffled = function shuffled$1 () {\n\tthis.items.forEach( shuffled$1$1 );\n};\n\nFragment.prototype.toString = function toString$1 ( escape ) {\n\treturn this.items.map( escape ? toEscapedString : toString$2 ).join( '' );\n};\n\nFragment.prototype.unbind = function unbind$1 () {\n\tthis.context = null;\n\tthis.items.forEach( unbind$1$1 );\n\tthis.bound = false;\n\n\treturn this;\n};\n\nFragment.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\tthis.items.forEach( shouldDestroy ? unrenderAndDestroy$1 : unrender$1$1 );\n\tthis.rendered = false;\n};\n\nFragment.prototype.update = function update$1 () {\n\tif ( this.dirty ) {\n\t\tif ( !this.updating ) {\n\t\t\tthis.dirty = false;\n\t\t\tthis.updating = true;\n\t\t\tthis.items.forEach( update$1$1 );\n\t\t\tthis.updating = false;\n\t\t} else if ( this.isRoot ) {\n\t\t\trunloop.addFragmentToRoot( this );\n\t\t}\n\t}\n};\n\nFragment.prototype.valueOf = function valueOf () {\n\tif ( this.items.length === 1 ) {\n\t\treturn this.items[0].valueOf();\n\t}\n\n\tif ( this.dirtyValue ) {\n\t\tvar values = {};\n\t\tvar source = processItems( this.items, values, this.ractive._guid );\n\t\tvar parsed = parseJSON( source, values );\n\n\t\tthis.value = parsed ?\n\t\t\tparsed.value :\n\t\t\tthis.toString();\n\n\t\tthis.dirtyValue = false;\n\t}\n\n\treturn this.value;\n};\n\nfunction getChildQueue ( queue, ractive ) {\n\treturn queue[ ractive._guid ] || ( queue[ ractive._guid ] = [] );\n}\n\nfunction fire$1 ( hookQueue, ractive ) {\n\tvar childQueue = getChildQueue( hookQueue.queue, ractive );\n\n\thookQueue.hook.fire( ractive );\n\n\t// queue is \""live\"" because components can end up being\n\t// added while hooks fire on parents that modify data values.\n\twhile ( childQueue.length ) {\n\t\tfire$1( hookQueue, childQueue.shift() );\n\t}\n\n\tdelete hookQueue.queue[ ractive._guid ];\n}\n\nvar HookQueue = function HookQueue ( event ) {\n\tthis.hook = new Hook( event );\n\tthis.inProcess = {};\n\tthis.queue = {};\n};\n\nHookQueue.prototype.begin = function begin ( ractive ) {\n\tthis.inProcess[ ractive._guid ] = true;\n};\n\nHookQueue.prototype.end = function end ( ractive ) {\n\tvar parent = ractive.parent;\n\n\t// If this is *isn't* a child of a component that's in process,\n\t// it should call methods or fire at this point\n\tif ( !parent || !this.inProcess[ parent._guid ] ) {\n\t\tfire$1( this, ractive );\n\t}\n\t// elsewise, handoff to parent to fire when ready\n\telse {\n\t\tgetChildQueue( this.queue, parent ).push( ractive );\n\t}\n\n\tdelete this.inProcess[ ractive._guid ];\n};\n\nvar configHook = new Hook( 'config' );\nvar initHook = new HookQueue( 'init' );\n\nfunction initialise ( ractive, userOptions, options ) {\n\tObject.keys( ractive.viewmodel.computations ).forEach( function (key) {\n\t\tvar computation = ractive.viewmodel.computations[ key ];\n\n\t\tif ( ractive.viewmodel.value.hasOwnProperty( key ) ) {\n\t\t\tcomputation.set( ractive.viewmodel.value[ key ] );\n\t\t}\n\t});\n\n\t// set up event subscribers\n\tsubscribe( ractive, userOptions, 'on' );\n\n\t// init config from Parent and options\n\tconfig.init( ractive.constructor, ractive, userOptions );\n\n\tconfigHook.fire( ractive );\n\n\t// general config done, set up observers\n\tsubscribe( ractive, userOptions, 'observe' );\n\n\tinitHook.begin( ractive );\n\n\tvar fragment = ractive.fragment = createFragment( ractive, options );\n\tif ( fragment ) { fragment.bind( ractive.viewmodel ); }\n\n\tinitHook.end( ractive );\n\n\tif ( fragment ) {\n\t\t// render automatically ( if `el` is specified )\n\t\tvar el = getElement( ractive.el || ractive.target );\n\t\tif ( el ) {\n\t\t\tvar promise = ractive.render( el, ractive.append );\n\n\t\t\tif ( Ractive.DEBUG_PROMISES ) {\n\t\t\t\tpromise['catch']( function (err) {\n\t\t\t\t\twarnOnceIfDebug( 'Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\\n  Ractive.DEBUG_PROMISES = false;' );\n\t\t\t\t\twarnIfDebug( 'An error happened during rendering', { ractive: ractive });\n\t\t\t\t\tlogIfDebug( err );\n\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction createFragment ( ractive, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( ractive.template ) {\n\t\tvar cssIds;\n\n\t\tif ( options.cssIds || ractive.cssId ) {\n\t\t\tcssIds = options.cssIds ? options.cssIds.slice() : [];\n\n\t\t\tif ( ractive.cssId ) {\n\t\t\t\tcssIds.push( ractive.cssId );\n\t\t\t}\n\t\t}\n\n\t\treturn new Fragment({\n\t\t\towner: ractive,\n\t\t\ttemplate: ractive.template,\n\t\t\tcssIds: cssIds\n\t\t});\n\t}\n}\n\nfunction subscribe ( instance, options, type ) {\n\tvar subs = ( instance.constructor[ (\""_\"" + type) ] || [] ).concat( toPairs( options[ type ] || [] ) );\n\tvar single = type === 'on' ? 'once' : (type + \""Once\"");\n\n\tsubs.forEach( function (ref) {\n\t\tvar target = ref[0];\n\t\tvar config$$1 = ref[1];\n\n\t\tif ( typeof config$$1 === 'function' ) {\n\t\t\tinstance[type]( target, config$$1 );\n\t\t} else if ( typeof config$$1 === 'object' && typeof config$$1.handler === 'function' ) {\n\t\t\tinstance[ config$$1.once ? single : type ]( target, config$$1.handler, config$$1 );\n\t\t}\n\t});\n}\n\nvar renderHook = new Hook( 'render' );\nvar completeHook = new Hook( 'complete' );\n\nfunction render$2 ( ractive, target, anchor, occupants ) {\n\t// set a flag to let any transitions know that this instance is currently rendering\n\tractive.rendering = true;\n\n\tvar promise = runloop.start( ractive, true );\n\trunloop.scheduleTask( function () { return renderHook.fire( ractive ); }, true );\n\n\tif ( ractive.fragment.rendered ) {\n\t\tthrow new Error( 'You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first' );\n\t}\n\n\tif ( ractive.destroyed ) {\n\t\tractive.destroyed = false;\n\t\tractive.fragment = createFragment( ractive ).bind( ractive.viewmodel );\n\t}\n\n\tanchor = getElement( anchor ) || ractive.anchor;\n\n\tractive.el = ractive.target = target;\n\tractive.anchor = anchor;\n\n\t// ensure encapsulated CSS is up-to-date\n\tif ( ractive.cssId ) { applyCSS(); }\n\n\tif ( target ) {\n\t\t( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( ractive );\n\n\t\tif ( anchor ) {\n\t\t\tvar docFrag = doc.createDocumentFragment();\n\t\t\tractive.fragment.render( docFrag );\n\t\t\ttarget.insertBefore( docFrag, anchor );\n\t\t} else {\n\t\t\tractive.fragment.render( target, occupants );\n\t\t}\n\t}\n\n\trunloop.end();\n\tractive.rendering = false;\n\n\treturn promise.then( function () { return completeHook.fire( ractive ); } );\n}\n\nfunction Ractive$render ( target, anchor ) {\n\tif ( this.torndown ) {\n\t\twarnIfDebug( 'ractive.render() was called on a Ractive instance that was already torn down' );\n\t\treturn Promise.resolve();\n\t}\n\n\ttarget = getElement( target ) || this.el;\n\n\tif ( !this.append && target ) {\n\t\t// Teardown any existing instances *before* trying to set up the new one -\n\t\t// avoids certain weird bugs\n\t\tvar others = target.__ractive_instances__;\n\t\tif ( others ) { others.forEach( teardown$1$1 ); }\n\n\t\t// make sure we are the only occupants\n\t\tif ( !this.enhance ) {\n\t\t\ttarget.innerHTML = ''; // TODO is this quicker than removeChild? Initial research inconclusive\n\t\t}\n\t}\n\n\tvar occupants = this.enhance ? toArray( target.childNodes ) : null;\n\tvar promise = render$2( this, target, anchor, occupants );\n\n\tif ( occupants ) {\n\t\twhile ( occupants.length ) { target.removeChild( occupants.pop() ); }\n\t}\n\n\treturn promise;\n}\n\nvar shouldRerender = [ 'template', 'partials', 'components', 'decorators', 'events' ];\n\nvar completeHook$1 = new Hook( 'complete' );\nvar resetHook = new Hook( 'reset' );\nvar renderHook$1 = new Hook( 'render' );\nvar unrenderHook = new Hook( 'unrender' );\n\nfunction Ractive$reset ( data ) {\n\tdata = data || {};\n\n\tif ( typeof data !== 'object' ) {\n\t\tthrow new Error( 'The reset method takes either no arguments, or an object containing new data' );\n\t}\n\n\t// TEMP need to tidy this up\n\tdata = dataConfigurator.init( this.constructor, this, { data: data });\n\n\tvar promise = runloop.start( this, true );\n\n\t// If the root object is wrapped, try and use the wrapper's reset value\n\tvar wrapper = this.viewmodel.wrapper;\n\tif ( wrapper && wrapper.reset ) {\n\t\tif ( wrapper.reset( data ) === false ) {\n\t\t\t// reset was rejected, we need to replace the object\n\t\t\tthis.viewmodel.set( data );\n\t\t}\n\t} else {\n\t\tthis.viewmodel.set( data );\n\t}\n\n\t// reset config items and track if need to rerender\n\tvar changes = config.reset( this );\n\tvar rerender;\n\n\tvar i = changes.length;\n\twhile ( i-- ) {\n\t\tif ( shouldRerender.indexOf( changes[i] ) > -1 ) {\n\t\t\trerender = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( rerender ) {\n\t\tunrenderHook.fire( this );\n\t\tthis.fragment.resetTemplate( this.template );\n\t\trenderHook$1.fire( this );\n\t\tcompleteHook$1.fire( this );\n\t}\n\n\trunloop.end();\n\n\tresetHook.fire( this, data );\n\n\treturn promise;\n}\n\nfunction collect( source, name, attr, dest ) {\n\tsource.forEach( function (item) {\n\t\t// queue to rerender if the item is a partial and the current name matches\n\t\tif ( item.type === PARTIAL && ( item.refName ===  name || item.name === name ) ) {\n\t\t\titem.inAttribute = attr;\n\t\t\tdest.push( item );\n\t\t\treturn; // go no further\n\t\t}\n\n\t\t// if it has a fragment, process its items\n\t\tif ( item.fragment ) {\n\t\t\tcollect( item.fragment.iterations || item.fragment.items, name, attr, dest );\n\t\t}\n\n\t\t// or if it is itself a fragment, process its items\n\t\telse if ( Array.isArray( item.items ) ) {\n\t\t\tcollect( item.items, name, attr, dest );\n\t\t}\n\n\t\t// or if it is a component, step in and process its items\n\t\telse if ( item.type === COMPONENT && item.instance ) {\n\t\t\t// ...unless the partial is shadowed\n\t\t\tif ( item.instance.partials[ name ] ) { return; }\n\t\t\tcollect( item.instance.fragment.items, name, attr, dest );\n\t\t}\n\n\t\t// if the item is an element, process its attributes too\n\t\tif ( item.type === ELEMENT ) {\n\t\t\tif ( Array.isArray( item.attributes ) ) {\n\t\t\t\tcollect( item.attributes, name, true, dest );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction forceResetTemplate$1 ( partial ) {\n\tpartial.forceResetTemplate();\n}\n\nvar resetPartial = function ( name, partial ) {\n\tvar collection = [];\n\tcollect( this.fragment.items, name, false, collection );\n\n\tvar promise = runloop.start( this, true );\n\n\tthis.partials[ name ] = partial;\n\tcollection.forEach( forceResetTemplate$1 );\n\n\trunloop.end();\n\n\treturn promise;\n};\n\n// TODO should resetTemplate be asynchronous? i.e. should it be a case\n// of outro, update template, intro? I reckon probably not, since that\n// could be achieved with unrender-resetTemplate-render. Also, it should\n// conceptually be similar to resetPartial, which couldn't be async\n\nfunction Ractive$resetTemplate ( template ) {\n\ttemplateConfigurator.init( null, this, { template: template });\n\n\tvar transitionsEnabled = this.transitionsEnabled;\n\tthis.transitionsEnabled = false;\n\n\t// Is this is a component, we need to set the `shouldDestroy`\n\t// flag, otherwise it will assume by default that a parent node\n\t// will be detached, and therefore it doesn't need to bother\n\t// detaching its own nodes\n\tvar component = this.component;\n\tif ( component ) { component.shouldDestroy = true; }\n\tthis.unrender();\n\tif ( component ) { component.shouldDestroy = false; }\n\n\tvar promise = runloop.start();\n\n\t// remove existing fragment and create new one\n\tthis.fragment.unbind().unrender( true );\n\n\tthis.fragment = new Fragment({\n\t\ttemplate: this.template,\n\t\troot: this,\n\t\towner: this\n\t});\n\n\tvar docFrag = createDocumentFragment();\n\tthis.fragment.bind( this.viewmodel ).render( docFrag );\n\n\t// if this is a component, its el may not be valid, so find a\n\t// target based on the component container\n\tif ( component && !component.external ) {\n\t\tthis.fragment.findParentNode().insertBefore( docFrag, component.findNextNode() );\n\t} else {\n\t\tthis.el.insertBefore( docFrag, this.anchor );\n\t}\n\n\trunloop.end();\n\n\tthis.transitionsEnabled = transitionsEnabled;\n\n\treturn promise;\n}\n\nvar reverse$1 = makeArrayMethod( 'reverse' ).path;\n\nfunction Ractive$set ( keypath, value, options ) {\n\tvar ractive = this;\n\n\tvar opts = typeof keypath === 'object' ? value : options;\n\n\treturn set$1( ractive, build( ractive, keypath, value ), opts );\n}\n\nvar shift$1 = makeArrayMethod( 'shift' ).path;\n\nvar sort$1 = makeArrayMethod( 'sort' ).path;\n\nvar splice$1 = makeArrayMethod( 'splice' ).path;\n\nfunction Ractive$subtract ( keypath, d ) {\n\treturn add$1( this, keypath, ( d === undefined ? -1 : -d ) );\n}\n\nfunction Ractive$toggle ( keypath ) {\n\tif ( typeof keypath !== 'string' ) {\n\t\tthrow new TypeError( badArguments );\n\t}\n\n\treturn set$1( this, gather( this, keypath ).map( function (m) { return [ m, !m.get() ]; } ) );\n}\n\nfunction Ractive$toCSS() {\n\tvar cssIds = [ this.cssId ].concat( this.findAllComponents().map( function (c) { return c.cssId; } ) );\n\tvar uniqueCssIds = Object.keys(cssIds.reduce( function ( ids, id ) { return (ids[id] = true, ids); }, {}));\n\treturn getCSS( uniqueCssIds );\n}\n\nfunction Ractive$toHTML () {\n\treturn this.fragment.toString( true );\n}\n\nfunction toText () {\n\treturn this.fragment.toString( false );\n}\n\nfunction Ractive$transition ( name, node, params ) {\n\n\tif ( node instanceof HTMLElement ) {\n\t\t// good to go\n\t}\n\telse if ( isObject( node ) ) {\n\t\t// omitted, use event node\n\t\tparams = node;\n\t}\n\n\t// if we allow query selector, then it won't work\n\t// simple params like \""fast\""\n\n\t// else if ( typeof node === 'string' ) {\n\t// \t// query selector\n\t// \tnode = this.find( node )\n\t// }\n\n\tnode = node || this.event.node;\n\n\tif ( !node || !node._ractive ) {\n\t\tfatal( (\""No node was supplied for transition \"" + name) );\n\t}\n\n\tparams = params || {};\n\tvar owner = node._ractive.proxy;\n\tvar transition = new Transition({ owner: owner, parentFragment: owner.parentFragment, name: name, params: params });\n\ttransition.bind();\n\n\tvar promise = runloop.start( this, true );\n\trunloop.registerTransition( transition );\n\trunloop.end();\n\n\tpromise.then( function () { return transition.unbind(); } );\n\treturn promise;\n}\n\nfunction unlink$2( here ) {\n\tvar promise = runloop.start();\n\tthis.viewmodel.joinAll( splitKeypath( here ), { lastLink: false } ).unlink();\n\trunloop.end();\n\treturn promise;\n}\n\nvar unrenderHook$1 = new Hook( 'unrender' );\n\nfunction Ractive$unrender () {\n\tif ( !this.fragment.rendered ) {\n\t\twarnIfDebug( 'ractive.unrender() was called on a Ractive instance that was not rendered' );\n\t\treturn Promise.resolve();\n\t}\n\n\tthis.unrendering = true;\n\tvar promise = runloop.start( this, true );\n\n\t// If this is a component, and the component isn't marked for destruction,\n\t// don't detach nodes from the DOM unnecessarily\n\tvar shouldDestroy = !this.component || ( this.component.anchor || {} ).shouldDestroy || this.component.shouldDestroy || this.shouldDestroy;\n\tthis.fragment.unrender( shouldDestroy );\n\tif ( shouldDestroy ) { this.destroyed = true; }\n\n\tremoveFromArray$1( this.el.__ractive_instances__, this );\n\n\tunrenderHook$1.fire( this );\n\n\trunloop.end();\n\tthis.unrendering = false;\n\n\treturn promise;\n}\n\nvar unshift$1 = makeArrayMethod( 'unshift' ).path;\n\nfunction Ractive$updateModel ( keypath, cascade ) {\n\tvar promise = runloop.start( this, true );\n\n\tif ( !keypath ) {\n\t\tthis.viewmodel.updateFromBindings( true );\n\t} else {\n\t\tthis.viewmodel.joinAll( splitKeypath( keypath ) ).updateFromBindings( cascade !== false );\n\t}\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nvar RactiveProto = {\n\tadd: Ractive$add,\n\tanimate: Ractive$animate,\n\tattachChild: attachChild,\n\tdetach: Ractive$detach,\n\tdetachChild: detachChild,\n\tfind: Ractive$find,\n\tfindAll: Ractive$findAll,\n\tfindAllComponents: Ractive$findAllComponents,\n\tfindComponent: Ractive$findComponent,\n\tfindContainer: Ractive$findContainer,\n\tfindParent: Ractive$findParent,\n\tfire: Ractive$fire,\n\tget: Ractive$get,\n\tgetNodeInfo: getNodeInfo,\n\tinsert: Ractive$insert,\n\tlink: link$2,\n\tobserve: observe$1,\n\tobserveOnce: observeOnce$1,\n\toff: Ractive$off,\n\ton: Ractive$on,\n\tonce: Ractive$once,\n\tpop: pop$1,\n\tpush: push$1,\n\treadLink: readLink$1,\n\trender: Ractive$render,\n\treset: Ractive$reset,\n\tresetPartial: resetPartial,\n\tresetTemplate: Ractive$resetTemplate,\n\treverse: reverse$1,\n\tset: Ractive$set,\n\tshift: shift$1,\n\tsort: sort$1,\n\tsplice: splice$1,\n\tsubtract: Ractive$subtract,\n\tteardown: Ractive$teardown,\n\ttoggle: Ractive$toggle,\n\ttoCSS: Ractive$toCSS,\n\ttoCss: Ractive$toCSS,\n\ttoHTML: Ractive$toHTML,\n\ttoHtml: Ractive$toHTML,\n\ttoText: toText,\n\ttransition: Ractive$transition,\n\tunlink: unlink$2,\n\tunrender: Ractive$unrender,\n\tunshift: unshift$1,\n\tupdate: Ractive$update,\n\tupdateModel: Ractive$updateModel\n};\n\nvar wrap$2 = function ( method, superMethod, force ) {\n\n\tif ( force || needsSuper( method, superMethod ) )  {\n\n\t\treturn function () {\n\n\t\t\tvar hasSuper = ( '_super' in this );\n\t\t\tvar _super = this._super;\n\n\t\t\tthis._super = superMethod;\n\n\t\t\tvar result = method.apply( this, arguments );\n\n\t\t\tif ( hasSuper ) {\n\t\t\t\tthis._super = _super;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\telse {\n\t\treturn method;\n\t}\n};\n\nfunction needsSuper ( method, superMethod ) {\n\treturn typeof superMethod === 'function' && /_super/.test( method );\n}\n\nfunction unwrap ( Child ) {\n\tvar options = {};\n\n\twhile ( Child ) {\n\t\taddRegistries( Child, options );\n\t\taddOtherOptions( Child, options );\n\n\t\tif ( Child._Parent !== Ractive ) {\n\t\t\tChild = Child._Parent;\n\t\t} else {\n\t\t\tChild = false;\n\t\t}\n\t}\n\n\treturn options;\n}\n\nfunction addRegistries ( Child, options ) {\n\tregistries.forEach( function (r) {\n\t\taddRegistry(\n\t\t\tr.useDefaults ? Child.prototype : Child,\n\t\t\toptions, r.name );\n\t});\n}\n\nfunction addRegistry ( target, options, name ) {\n\tvar registry;\n\tvar keys = Object.keys( target[ name ] );\n\n\tif ( !keys.length ) { return; }\n\n\tif ( !( registry = options[ name ] ) ) {\n\t\tregistry = options[ name ] = {};\n\t}\n\n\tkeys\n\t\t.filter( function (key) { return !( key in registry ); } )\n\t\t.forEach( function (key) { return registry[ key ] = target[ name ][ key ]; } );\n}\n\nfunction addOtherOptions ( Child, options ) {\n\tObject.keys( Child.prototype ).forEach( function (key) {\n\t\tif ( key === 'computed' ) { return; }\n\n\t\tvar value = Child.prototype[ key ];\n\n\t\tif ( !( key in options ) ) {\n\t\t\toptions[ key ] = value._method ? value._method : value;\n\t\t}\n\n\t\t// is it a wrapped function?\n\t\telse if ( typeof options[ key ] === 'function'\n\t\t\t\t&& typeof value === 'function'\n\t\t\t\t&& options[ key ]._method ) {\n\n\t\t\tvar needsSuper = value._method;\n\n\t\t\tif ( needsSuper ) { value = value._method; }\n\n\t\t\t// rewrap bound directly to parent fn\n\t\t\tvar result = wrap$2( options[ key ]._method, value );\n\n\t\t\tif ( needsSuper ) { result._method = result; }\n\n\t\t\toptions[ key ] = result;\n\t\t}\n\t});\n}\n\nvar callsSuper = /super\\s\\(|\\.call\\s*\\(\\s*this/;\n\nfunction extend$1 () {\n\tvar options = [], len = arguments.length;\n\twhile ( len-- ) options[ len ] = arguments[ len ];\n\n\tif( !options.length ) {\n\t\treturn extendOne( this );\n\t} else {\n\t\treturn options.reduce( extendOne, this );\n\t}\n}\n\nfunction extendWith ( Class, options ) {\n\tif ( options === void 0 ) options = {};\n\n\treturn extendOne( this, options, Class );\n}\n\nfunction extendOne ( Parent, options, Target ) {\n\tif ( options === void 0 ) options = {};\n\n\t// if we're extending with another Ractive instance...\n\t//\n\t//   var Human = Ractive.extend(...), Spider = Ractive.extend(...);\n\t//   var Spiderman = Human.extend( Spider );\n\t//\n\t// ...inherit prototype methods and default options as well\n\tif ( options.prototype instanceof Ractive ) {\n\t\toptions = unwrap( options );\n\t}\n\n\tvar proto;\n\tvar Child = typeof Target === 'function' && Target;\n\n\tif ( Child ) {\n\t\tif ( !( Child.prototype instanceof Parent ) ) {\n\t\t\tthrow new Error( \""Only classes that inherit the appropriate prototype may be used with extend\"" );\n\t\t}\n\t\tif ( !callsSuper.test( Child.toString() ) ) {\n\t\t\tthrow new Error( \""Only classes that call super in their constructor may be used with extend\"" );\n\t\t}\n\n\t\tproto = Child.prototype;\n\t} else {\n\t\tChild = function ( options ) {\n\t\t\tif ( !( this instanceof Child ) ) { return new Child( options ); }\n\n\t\t\tconstruct( this, options || {} );\n\t\t\tinitialise( this, options || {}, {} );\n\t\t};\n\n\t\tproto = Object.create( Parent.prototype );\n\t\tproto.constructor = Child;\n\n\t\tChild.prototype = proto;\n\t}\n\n\t// Static properties\n\tObject.defineProperties( Child, {\n\t\t// alias prototype as defaults\n\t\tdefaults: { value: proto },\n\n\t\t// extendable\n\t\textend: { value: extend$1, writable: true, configurable: true },\n\t\textendClass: { value: extendWith, writable: true, configurable: true },\n\n\t\t// Parent - for IE8, can't use Object.getPrototypeOf\n\t\t_Parent: { value: Parent }\n\t});\n\n\t// extend configuration\n\tconfig.extend( Parent, proto, options );\n\n\t// store event and observer registries on the constructor when extending\n\tChild._on = ( Parent._on || [] ).concat( toPairs( options.on ) );\n\tChild._observe = ( Parent._observe || [] ).concat( toPairs( options.observe ) );\n\n\t// attribute defs are not inherited, but they need to be stored\n\tif ( options.attributes ) {\n\t\tvar attrs;\n\n\t\t// allow an array of optional props or an object with arrays for optional and required props\n\t\tif ( Array.isArray( options.attributes ) ) {\n\t\t\tattrs = { optional: options.attributes, required: [] };\n\t\t} else {\n\t\t\tattrs = options.attributes;\n\t\t}\n\n\t\t// make sure the requisite keys actually store arrays\n\t\tif ( !Array.isArray( attrs.required ) ) { attrs.required = []; }\n\t\tif ( !Array.isArray( attrs.optional ) ) { attrs.optional = []; }\n\n\t\tChild.attributes = attrs;\n\t}\n\n\tdataConfigurator.extend( Parent, proto, options );\n\n\tif ( options.computed ) {\n\t\tproto.computed = Object.assign( Object.create( Parent.prototype.computed ), options.computed );\n\t}\n\n\treturn Child;\n}\n\nfunction joinKeys () {\n\tvar keys = [], len = arguments.length;\n\twhile ( len-- ) keys[ len ] = arguments[ len ];\n\n\treturn keys.map( escapeKey ).join( '.' );\n}\n\nfunction splitKeypath$1 ( keypath ) {\n\treturn splitKeypath( keypath ).map( unescapeKey );\n}\n\nfunction Ractive ( options ) {\n\tif ( !( this instanceof Ractive ) ) { return new Ractive( options ); }\n\n\tconstruct( this, options || {} );\n\tinitialise( this, options || {}, {} );\n}\n\n// check to see if we're being asked to force Ractive as a global for some weird environments\nif ( win && !win.Ractive ) {\n\tvar opts = '';\n\tvar script = document.currentScript || document.querySelector( 'script[data-ractive-options]' );\n\n\tif ( script ) {\n\t\topts = script.getAttribute( 'data-ractive-options' ) || '';\n\t}\n\n\tif ( ~opts.indexOf( 'ForceGlobal' ) ) {\n\t\twin.Ractive = Ractive;\n\t}\n}\n\nObject.assign( Ractive.prototype, RactiveProto, defaults );\nRactive.prototype.constructor = Ractive;\n\n// alias prototype as `defaults`\nRactive.defaults = Ractive.prototype;\n\n// static properties\nObject.defineProperties( Ractive, {\n\n\t// debug flag\n\tDEBUG:          { writable: true, value: true },\n\tDEBUG_PROMISES: { writable: true, value: true },\n\n\t// static methods:\n\textend:         { value: extend$1 },\n\textendWith:     { value: extendWith },\n\tescapeKey:      { value: escapeKey },\n\tgetNodeInfo:    { value: staticInfo },\n\tjoinKeys:       { value: joinKeys },\n\tparse:          { value: parse$1$1 },\n\tsplitKeypath:   { value: splitKeypath$1 },\n\tunescapeKey:    { value: unescapeKey },\n\tgetCSS:         { value: getCSS },\n\n\t// support\n\tenhance:        { writable: true, value: false },\n\tsvg:            { value: svg },\n\tmagic:          { value: magic },\n\n\t// version\n\tVERSION:        { value: '0.9.0-edge-597de063175a1b7309143b9b8fc21b5caf2a11bb' },\n\n\t// plugins\n\tadaptors:       { writable: true, value: {} },\n\tcomponents:     { writable: true, value: {} },\n\tdecorators:     { writable: true, value: {} },\n\teasing:         { writable: true, value: easing },\n\tevents:         { writable: true, value: {} },\n\tinterpolators:  { writable: true, value: interpolators },\n\tpartials:       { writable: true, value: {} },\n\ttransitions:    { writable: true, value: {} }\n});\n\nreturn Ractive;\n\n})));\n""],""names"":[""fragment"",""context"",""model"",""this$1"",""owner"",""template"",""z"",""aliases"",""n"",""this"",""previousIterations"",""forEach"",""frag"",""i"",""removed"",""docFrag"",""rendered"",""createDocumentFragment"",""parentNode"",""parent"",""findParentNode"",""contiguous"",""newIndices"",""startIndex"",""len"",""iterations"",""appendChild"",""detach"",""childNodes"",""length"",""insertBefore"",""firstNode"",""createIteration"",""render"",""oldLen"",""findNextNode"",""Object"",""keys"",""k"",""unbind"",""unrender"",""update$1$1"",""pendingNewIndices"",""shuffled"",""Section"",""MustacheContainer$$1"",""options"",""call"",""sectionType"",""templateSectionType"",""subordinate"",""l"",""__proto__"",""prototype"",""create"",""constructor"",""bind"",""sibling"",""parentFragment"",""items"",""indexOf"",""nextSibling"",""dirty"",""update"",""SECTION_UNLESS"",""isTruthy"",""Fragment"",""f"",""value"",""isRoot"",""get"",""undefined"",""SECTION_IF_WITH"",""isEmpty"",""rebind"",""next"",""previous"",""safe"",""SECTION_IF"",""rebinding"",""target"",""occupants"",""shuffle"",""SECTION_EACH"",""shouldDestroy"",""siblingFalsey"",""lastType"",""getType"",""newFragment"",""fragmentShouldExist"",""SECTION_WITH"",""RepeatedFragment"",""indexRef"",""anchor"",""MustacheContainer"",""Select"",""Element$$1"",""foundNode"",""node"",""binding"",""selectedOptions"",""getSelectedOptions"",""sync"",""defaultSelected"",""selected"",""selectNode"",""toArray"",""o"",""setFromNode"",""selectValue"",""getAttribute"",""isMultiple"",""array"",""Array"",""isArray"",""optionWasSelected"",""optionValue"",""_ractive"",""shouldSelect"",""valueContains"",""compare"",""forceUpdate"",""comparator"",""Element"",""Textarea"",""Input$$1"",""deferContent"",""attributeByName"",""isBindable"",""attributes"",""push"",""createItem"",""t"",""ATTRIBUTE"",""cssIds"",""bubble"",""runloop"",""scheduleTask"",""toString"",""Input"",""Text"",""Item$$1"",""type"",""TEXT"",""detachNode"",""inAttributes"",""progressiveText"",""escape"",""escapeHtml"",""valueOf"",""Item"",""proto$2"",""noop"",""prefix"",""camelizeHyphenated"",""hyphenatedStr"",""replace"",""match"",""$1"",""toUpperCase"",""isClient"",""prefixCache"",""testStyle"",""createElement"",""style"",""prop"",""capped"",""charAt"",""substring"",""vendors"",""vendor"",""visible"",""prefix$1"",""hidden"",""doc"",""prefix$2"",""i$1"",""addEventListener"",""onChange"",""onHide"",""onShow"",""win"",""createTransitions"",""unprefixPattern"",""RegExp"",""join"",""unprefix"",""vendorPattern"",""hyphenate"",""str"",""test"",""toLowerCase"",""TRANSITION$1"",""TRANSITIONEND"",""CSS_TRANSITIONS_ENABLED"",""TRANSITION_DURATION"",""TRANSITION_PROPERTY"",""TRANSITION_TIMING_FUNCTION"",""testStyle$1"",""linear$2"",""x"",""canUseCssTransitions"",""cannotUseCssTransitions"",""transition"",""webkitTransition"",""to"",""changedProperties"",""resolve"",""setTimeout"",""transitionDone"",""clearTimeout"",""cssTimeout"",""checkComplete"",""jsTransitionsComplete"",""cssTransitionsComplete"",""unregisterCompleteHandler"",""ractive"",""fire"",""name"",""isIntro"",""transitionEndHandler"",""event"",""index"",""propertyName"",""splice"",""cssTransitionsDone"",""property"",""duration"",""timing"",""removeEventListener"",""hashPrefix"",""namespaceURI"",""tagName"",""map"",""easingName"",""easing"",""cssTiming"",""delay"",""registerCompleteHandler"",""hash"",""originalValue"",""suffix"",""interpolator"",""propertiesToTransitionInJs"",""getStyle"",""warnIfDebug"",""exec"",""interpolate"",""parseFloat"",""warnOnceIfDebug"",""missingPlugin"",""Ticker"",""step"",""pos"",""complete"",""createTransitions$1"",""getComputedStyle"",""resolved$1"",""Promise"",""names"",""t0"",""t1"",""t2"",""Transition"",""findElement"",""element"",""onComplete"",""animateStyle"",""arguments"",""Error"",""setStyle"",""fulfil"",""propertyNames"",""computedStyle"",""current"",""v"",""intro"",""outro"",""eventName"",""params"",""_fn"",""findInViewHierarchy"",""setupArgsFn"",""getParams"",""fn"",""values"",""resolveArgs"",""apply"",""props"",""styles"",""value$1"",""processParams"",""defaults"",""assign"",""addToArray"",""hasOwnProperty"",""shouldFire"",""transitionsEnabled"",""rendering"",""nearestProp"",""unrendering"",""nested"",""el"",""starting"",""start"",""completed"",""originalStyle"",""args"",""noReset"",""resetStyle"",""_manager"",""remove"",""promise"",""concat"",""then"",""unbinding"",""removeFromArray$1"",""proto$3"",""destroyed"",""ieBug"",""ieBlacklist"",""elementCache"",""innerHTML"",""err"",""TABLE"",""THEAD"",""TBODY"",""TR"",""SELECT"",""insertHtml"",""html$$1"",""nodes"",""container"",""wrapper"",""selectedOption"",""querySelector"",""selectedIndex"",""svg$1"",""textContent"",""child"",""firstChild"",""removeChild"",""Triple"",""Mustache$$1"",""find"",""selector"",""nodeType"",""matches"",""queryResult"",""findAll"",""query"",""add"",""queryAllResult"",""querySelectorAll"",""numNodes"",""j"",""findComponent"",""html"",""shift"",""outerHTML"",""nodeValue"",""slice"",""decodeCharacterReferences"",""Mustache"",""constructors"",""ALIAS"",""Alias"",""ANCHOR"",""Component"",""DOCTYPE"",""Doctype"",""INTERPOLATOR"",""Interpolator"",""PARTIAL"",""Partial"",""SECTION"",""TRIPLE"",""YIELDER"",""Attribute"",""BINDING_FLAG"",""BindingFlag"",""DECORATOR"",""Decorator"",""EVENT"",""EventDirective"",""TRANSITION"",""specialElements"",""doctype"",""form"",""Form"",""input"",""option"",""Option"",""select"",""textarea"",""componentParent"",""component"",""delegate"",""dirtyValue"",""createItems"",""bind$1$1"",""bound"",""addFragment"",""max"",""destroyed$1$1"",""item"",""findMap"",""findAllComponents"",""findContext"",""viewmodel"",""ELEMENT"",""containerFragment"",""findRepeatingFragment"",""isIteration"",""skipParent"",""resetTemplate"",""wasBound"",""wasRendered"",""shuffled$1$1"",""toEscapedString"",""toString$2"",""unbind$1$1"",""unrenderAndDestroy$1"",""unrender$1$1"",""updating"",""addFragmentToRoot"",""source"",""processItems"",""_guid"",""parsed"",""parseJSON"",""HookQueue"",""hook"",""Hook"",""inProcess"",""queue"",""begin"",""end"",""getChildQueue"",""fire$1"",""configHook"",""initHook"",""renderHook"",""completeHook"",""shouldRerender"",""completeHook$1"",""resetHook"",""renderHook$1"",""unrenderHook"",""resetPartial"",""partial"",""collection"",""collect"",""partials"",""forceResetTemplate$1"",""reverse$1"",""makeArrayMethod"",""path"",""shift$1"",""sort$1"",""splice$1"",""unrenderHook$1"",""unshift$1"",""RactiveProto"",""Ractive$add"",""animate"",""Ractive$animate"",""attachChild"",""Ractive$detach"",""detachChild"",""Ractive$find"",""Ractive$findAll"",""Ractive$findAllComponents"",""Ractive$findComponent"",""findContainer"",""Ractive$findContainer"",""findParent"",""Ractive$findParent"",""Ractive$fire"",""Ractive$get"",""getNodeInfo"",""insert"",""Ractive$insert"",""link"",""link$2"",""observe"",""observe$1"",""observeOnce"",""observeOnce$1"",""off"",""Ractive$off"",""on"",""Ractive$on"",""once"",""Ractive$once"",""pop"",""pop$1"",""push$1"",""readLink"",""readLink$1"",""Ractive$render"",""reset"",""Ractive$reset"",""Ractive$resetTemplate"",""reverse"",""set"",""Ractive$set"",""sort"",""subtract"",""Ractive$subtract"",""teardown"",""Ractive$teardown"",""toggle"",""Ractive$toggle"",""toCSS"",""Ractive$toCSS"",""toCss"",""toHTML"",""Ractive$toHTML"",""toHtml"",""toText"",""Ractive$transition"",""unlink"",""unlink$2"",""Ractive$unrender"",""unshift"",""Ractive$update"",""updateModel"",""Ractive$updateModel"",""wrap$2"",""method"",""superMethod"",""force"",""needsSuper"",""hasSuper"",""_super"",""result"",""callsSuper"",""Ractive"",""opts"",""script"",""document"",""currentScript"",""defineProperties"",""DEBUG"",""writable"",""DEBUG_PROMISES"",""extend"",""extend$1"",""extendWith"",""escapeKey"",""staticInfo"",""joinKeys"",""parse"",""parse$1$1"",""splitKeypath"",""splitKeypath$1"",""unescapeKey"",""getCSS"",""enhance"",""svg"",""magic"",""VERSION"",""adaptors"",""components"",""decorators"",""events"",""interpolators"",""transitions"",""CheckboxNameBinding"",""removeFromArray"",""Binding"",""ContentEditableBinding"",""Binding$$1"",""getInitialValue"",""getValue"",""handleDomEvent"",""lazy"",""attachEvent"",""GenericBinding"",""timeout"",""isNumeric"",""handler"",""handleDelay"",""handleBlur"",""FileBinding"",""GenericBinding$$1"",""files"",""MultipleSelectBinding"",""filter"",""selectedValues"",""handleChange"",""attribute"",""previousValue"",""arrayContentsMatch"",""NumericBinding"",""isNaN"",""siblings"",""RadioBinding"",""getSiblings"",""checked"",""root"",""RadioNameBinding"",""group"",""getBindingGroup"",""getValue$2"",""nameAttributeBinding"",""getKeypath"",""getKeypathModel"",""register"",""lastVal"",""setting"",""lastValue"",""unregister"",""SingleSelectBinding"",""locked"",""disabled"",""DOMEvent"",""fatal"",""listen"",""directive"",""original"",""unlisten"",""CustomEvent"",""eventPlugin"",""RactiveEvent"",""instance"",""cancel"",""specialPattern"",""dollarArgsPattern"",""DelegateProxy"",""passedArgs"",""ev"",""currentTarget"",""proxy"",""COMPONENT"",""delegates"",""models"",""action"",""e"",""addHelpers"",""specialRef"",""ref"",""specialMatch"",""special"",""substr"",""dollarMatch"",""obj"",""wrapperValue"",""oldEvent"",""preventDefault"",""stopPropagation"",""fireEvent"",""endsWithSemi"",""ContainerItem$$1"",""liveQueries"",""isVoid"",""voidElementNames"",""leftovers"",""m"",""DELEGATE_FLAG"",""ConditionalAttribute"",""sortAttributes"",""recreateTwowayBinding"",""createTwowayBinding"",""twoway"",""selectBinding"",""matches$$1"",""live"",""removeFromQuery"",""namespace"",""getNamespace"",""existing"",""nodeName"",""defineProperty"",""setAttribute"",""isOutro"",""registerTransition"",""children"",""wasUndefined"",""name$1"",""removeAttribute"",""render$1$1"",""updateLiveQueries"",""makeDirty$2"",""attrs"",""stringifyAttribute"",""isSelected"",""inputIsCheckedRadio"",""cls"",""attr"",""safeAttributeString"",""getString"",""inlineClass"",""detachWhenReady"",""ContainerItem"",""toFront"",""formBindings"",""handleReset"",""isStatic"",""s"",""resolve$1"",""rebindMatch"",""addShuffleRegister"",""proto$1"",""mustache"",""safeToStringValue"",""string"",""data"",""defaultValue"",""attrValue"",""specials$1"",""true"",""false"",""null"",""specialsPattern"",""numberPattern$1"",""placeholderPattern"",""placeholderAtStartPattern"",""onlyWhitespace"",""JsonParser"",""Parser"",""init"",""allowWhitespace"",""postProcess"",""leftover"",""converters"",""parser"",""placeholder"",""matchPattern"",""number"",""stringLiteral"",""readStringLiteral"",""matchString"",""pair"",""getKeyValuePair"",""key"",""valueToken"",""read"",""Mapping"",""joinKey"",""createMapping"",""boundFragment"",""updateDelegate"",""a"",""selectedAttribute"",""yielder"",""r"",""rx"",""refName"",""templateObj"",""getPartialTemplate"",""named"",""setTemplate"",""parsePartial"",""partialTemplate"",""c"",""resolveAliases"",""forceResetTemplate"",""inAttribute"",""doInAttributes"",""keyRef"",""isObject"",""refs"",""split"",""bubbled"",""iteration"",""newIndex"",""oldIndex"",""unrenderAndDestroy"",""updatePostShuffle"",""toRemove"",""oldKeys"",""wasArray"",""fragment$1"",""newLength"",""indices"",""ComputationChild"",""Model$$1"",""isReadonly"",""syncComputedChildren"",""applyValue"",""dependencies"",""mark$1$1"",""shouldCapture"",""capture"",""parentValue"",""boundValue"",""links"",""marked"",""deps"",""handleChange$1$1"",""childByKey"",""Model"",""Computation"",""signature"",""isExpression"",""setter"",""computationContext"",""old"",""isEqual"",""notifyUpstream"",""newWrapperValue"",""adapt"",""maybeBind"",""startCapturing"",""getter"",""message"",""hasConsole"",""console"",""groupCollapsed"",""sig"",""error"",""getterUseStack"",""stack"",""groupEnd"",""stopCapturing"",""setDependencies"",""mark"",""model$1"",""computations"",""prototype$1"",""ExpressionProxy"",""getFunction"",""resolveReference"",""actuallyChanged"",""keypath"",""d"",""idx"",""retrieve"",""dep"",""computation"",""ReferenceExpressionChild"",""base"",""joinAll"",""ReferenceExpressionProxy"",""intermediary"",""members"",""addShuffleTask"",""REFERENCE"",""String"",""unregisterTwowayBinding"",""registerTwowayBinding"",""keypathModel"",""bindings"",""oneway"",""findBoundValue"",""space"",""hyphenateCamel"",""camelCaseStr"",""textTypes"",""accept-charset"",""accesskey"",""bgcolor"",""class"",""codebase"",""colspan"",""contenteditable"",""datetime"",""dirname"",""for"",""http-equiv"",""ismap"",""maxlength"",""novalidate"",""pubdate"",""readonly"",""rowspan"",""tabindex"",""usemap"",""div$1"",""isSvg"",""parseAttributes"",""notIn"",""booleanAttributes"",""namespaces"",""useProperty"",""isTwoway"",""isBoolean"",""lookupNamespace"",""getUpdateDelegate"",""twowayBinding"",""flag"",""set$3"",""processWrapper"",""methodName"",""__model"",""mutatorMethods"",""patchedArrayProto"",""getNewIndices"",""wrappers"",""configurable"",""patchArrayMethods"",""unpatchArrayMethods"",""unpatch"",""patch"",""errorMessage$1"",""arrayAdaptor"",""object"",""wrap"",""ArrayWrapper"",""instances"",""storage"",""magicAdaptor"",""MagicWrapper"",""magicAdaptor$1"",""originalDescriptors"",""originalDescriptor"",""getOwnPropertyDescriptor"",""childKeypath"",""descriptor"",""createOrWrapDescriptor"",""__magic"",""revert"",""dependants"",""MagicArrayWrapper"",""magicWrapper"",""arrayWrapper"",""magicArrayAdaptor"",""RactiveModel"",""isLink"",""initLink"",""hasProp$1"",""RootModel"",""attached"",""attachImplicits"",""compute"",""createLink"",""targetPath"",""detached"",""detachImplicits"",""virtual"",""getVirtual"",""getRactiveModel"",""ractiveModel"",""getValueChildren"",""_link"",""has"",""unescapedKey"",""Function"",""GlobalModel"",""SharedModel$1"",""localKey"",""origin"",""local"",""shouldTeardown"",""constructHook"",""registryNames$1"",""uid"",""teardownHook"",""destructHook"",""ComponentConstructor"",""isAnchor"",""p"",""content"",""_partials"",""addChild"",""addChild$1"",""removeChild$1"",""construct"",""_inlinePartials"",""eventHandlers"",""initialise"",""_query"",""checking"",""checkAnchors"",""render$2"",""updateLiveQueries$1"",""makeDirty$1"",""teardown$2"",""unrenderItem"",""missingDecorator"",""warnOnce"",""teardownArgsFn"",""proto"",""parentForm"",""resetValue"",""CheckboxBinding"",""BindingGroup"",""push$2"",""checkboxName"",""getValue$1$1"",""noInitialValue"",""existingValue"",""bindingValue"",""arrayContains"",""isChecked"",""valueSoFar"",""LinkModel"",""markedAll"",""notifiedUpstream"",""startPath"",""rootLink"",""relinked"",""registerLink"",""relinking"",""sourcePath"",""unregisterLink"",""rebindChildren"",""shuffling"",""shuffle$1$1"",""teardown$1$1"",""ModelBase"",""lnk"",""implicit"",""fireShuffleTasks"",""ln"",""tickers"",""running"",""performance"",""now"",""requestAnimationFrame"",""tick"",""elapsed"",""eased"",""stop"",""abort"",""prefixers"",""ModelBase$$1"",""ticker"",""rewrap"",""createBranch"",""adaptor"",""getPrefixer"",""from"",""fulfilPromise"",""notify"",""isObjectLike"",""branch"",""unwrap"",""shouldBind"",""KeypathModel"",""lastLink"",""merge"",""oldArray"",""newArray"",""recreateArray"",""oldLength"",""usedIndices"",""firstUnusedIndex"",""SharedModel"",""global"",""window"",""arrayProto"",""mdl"",""result$1"",""promise$1"",""updateHook"",""modelPush"",""modelPop"",""modelShift"",""modelUnshift"",""modelSort"",""modelSplice"",""modelReverse"",""insertHook"",""Observer"",""callback"",""resolved"",""oldContext"",""dispatch"",""oldValue"",""newValue"",""cancelled"",""resolver"",""_observers"",""strict"",""addObserver"",""defer"",""star$1"",""PatternObserver"",""baseModel"",""pattern"",""baseKeypath"",""recursive"",""oldValues"",""newValues"",""changed"",""findMatches"",""registerPatternObserver"",""unregisterPatternObserver"",""newKeys"",""wildcards"",""touchedFrom"",""count"",""ok"",""check"",""ArrayObserver"",""pending"",""sliced"",""negativeOne"",""inserted"",""deleted"",""hadIndex"",""onceOptions"",""trim"",""notEmptyString"",""PREFIX"",""styleDefinitions"",""isDirty"",""styleElement"",""useCssText"",""getElementsByTagName"",""styleSheet"",""adaptConfigurator"",""Parent"",""combine"",""ensureArray"",""remove$1"",""cleanCss"",""css"",""additionalReplaceRules"",""reconstruct"",""selectorsPattern"",""keyframesDeclarationPattern"",""selectorUnitPattern"",""excludePattern"",""dataRvcGuidPattern"",""cssConfigurator"",""id"",""cssId"",""uuid"",""noCssTransform"",""transformCss"",""addCSS"",""dataConfigurator"",""combine$1"",""bind$2"",""_r_unbound"",""TEMPLATE_VERSION"",""functions"",""leadingWhitespace"",""ParseError"",""lineStart"",""lines"",""lineEnds"",""line"",""lineEnd"",""remaining"",""getContextMessage"",""getLinePos"",""lineNum"",""columnNum"",""contextLines"",""contextUp"",""contextDown"",""numTabs"",""annotation"",""char"",""msg"",""character"",""shortMessage"",""nextChar"",""Child"",""readTypeOf"",""INVERTED"",""CLOSING"",""COMMENT"",""DELIMCHANGE"",""CLOSING_TAG"",""INLINE_PARTIAL"",""NUMBER_LITERAL"",""STRING_LITERAL"",""ARRAY_LITERAL"",""OBJECT_LITERAL"",""BOOLEAN_LITERAL"",""REGEXP_LITERAL"",""GLOBAL"",""KEY_VALUE_PAIR"",""REFINEMENT"",""MEMBER"",""PREFIX_OPERATOR"",""BRACKETED"",""CONDITIONAL"",""INFIX_OPERATOR"",""INVOCATION"",""ELSE"",""ELSEIF"",""delimiterChangePattern"",""whitespacePattern"",""regexpPattern"",""pattern$1"",""regExpCache"",""getLowestIndex"",""haystack"",""needles"",""search"",""escapeRegExp"",""htmlEntities"",""quot"",""amp"",""apos"",""lt"",""gt"",""nbsp"",""iexcl"",""cent"",""pound"",""curren"",""yen"",""brvbar"",""sect"",""uml"",""copy"",""ordf"",""laquo"",""not"",""shy"",""reg"",""macr"",""deg"",""plusmn"",""sup2"",""sup3"",""acute"",""micro"",""para"",""middot"",""cedil"",""sup1"",""ordm"",""raquo"",""frac14"",""frac12"",""frac34"",""iquest"",""Agrave"",""Aacute"",""Acirc"",""Atilde"",""Auml"",""Aring"",""AElig"",""Ccedil"",""Egrave"",""Eacute"",""Ecirc"",""Euml"",""Igrave"",""Iacute"",""Icirc"",""Iuml"",""ETH"",""Ntilde"",""Ograve"",""Oacute"",""Ocirc"",""Otilde"",""Ouml"",""times"",""Oslash"",""Ugrave"",""Uacute"",""Ucirc"",""Uuml"",""Yacute"",""THORN"",""szlig"",""agrave"",""aacute"",""acirc"",""atilde"",""auml"",""aring"",""aelig"",""ccedil"",""egrave"",""eacute"",""ecirc"",""euml"",""igrave"",""iacute"",""icirc"",""iuml"",""eth"",""ntilde"",""ograve"",""oacute"",""ocirc"",""otilde"",""ouml"",""divide"",""oslash"",""ugrave"",""uacute"",""ucirc"",""uuml"",""yacute"",""thorn"",""yuml"",""OElig"",""oelig"",""Scaron"",""scaron"",""Yuml"",""fnof"",""circ"",""tilde"",""Alpha"",""Beta"",""Gamma"",""Delta"",""Epsilon"",""Zeta"",""Eta"",""Theta"",""Iota"",""Kappa"",""Lambda"",""Mu"",""Nu"",""Xi"",""Omicron"",""Pi"",""Rho"",""Sigma"",""Tau"",""Upsilon"",""Phi"",""Chi"",""Psi"",""Omega"",""alpha"",""beta"",""gamma"",""delta"",""epsilon"",""zeta"",""eta"",""theta"",""iota"",""kappa"",""lambda"",""mu"",""nu"",""xi"",""omicron"",""pi"",""rho"",""sigmaf"",""sigma"",""tau"",""upsilon"",""phi"",""chi"",""psi"",""omega"",""thetasym"",""upsih"",""piv"",""ensp"",""emsp"",""thinsp"",""zwnj"",""zwj"",""lrm"",""rlm"",""ndash"",""mdash"",""lsquo"",""rsquo"",""sbquo"",""ldquo"",""rdquo"",""bdquo"",""dagger"",""Dagger"",""bull"",""hellip"",""permil"",""prime"",""Prime"",""lsaquo"",""rsaquo"",""oline"",""frasl"",""euro"",""image"",""weierp"",""real"",""trade"",""alefsym"",""larr"",""uarr"",""rarr"",""darr"",""harr"",""crarr"",""lArr"",""uArr"",""rArr"",""dArr"",""hArr"",""forall"",""part"",""exist"",""empty"",""nabla"",""isin"",""notin"",""ni"",""prod"",""sum"",""minus"",""lowast"",""radic"",""infin"",""ang"",""and"",""or"",""cap"",""cup"",""int"",""there4"",""sim"",""cong"",""asymp"",""ne"",""equiv"",""le"",""ge"",""sub"",""sup"",""nsub"",""sube"",""supe"",""oplus"",""otimes"",""perp"",""sdot"",""lceil"",""rceil"",""lfloor"",""rfloor"",""lang"",""rang"",""loz"",""spades"",""clubs"",""hearts"",""diams"",""controlCharacters"",""entityPattern"",""codePointSupport"",""fromCodePoint"",""codeToChar"",""fromCharCode"",""lessThan"",""greaterThan"",""invalid"",""expectedExpression"",""expectedParen"",""numberPattern"",""stringMiddlePattern"",""escapeSequencePattern"",""lineContinuationPattern"",""makeQuotedStringMatcher"",""okQuote"",""literal"",""done"",""charCodeAt"",""JSON"",""singleMatcher"",""doubleMatcher"",""quote"",""stringMiddlePattern$1"",""escapes"",""spreadPattern"",""legalReference"",""relaxedName"",""identifier"",""readObjectLiteral"",""keyValuePairs"",""readKeyValuePairs"",""readArrayLiteral"",""expressionList"",""readExpressionList"",""globals"",""keywords"",""prefixPattern"",""specials"",""readPrimary"",""readLiteral"",""readReference"",""readBracketedExpression"",""readMemberOrInvocation"",""expression"",""refinement"",""readRefinement"",""makePrefixSequenceMatcher"",""symbol"",""fallthrough"",""readExpression"",""matcher"",""prefixOperators"",""readLogicalOr"",""readTypeof"",""makeInfixSequenceMatcher"",""inUnquotedAttribute"",""left"",""right"",""infixOperators"",""readLogicalOr$1"",""attributeNamePattern"",""onPattern"",""eventPattern"",""reservedEventNames"",""decoratorPattern"",""transitionPattern"",""directives"",""no-delegation"",""unquotedAttributeValueTextPattern"",""proxyEvent"",""whitespace"",""slashes"",""delimiterChangeToken"",""exclude"",""legalAlias"",""asRE"",""elsePattern"",""elsePattern$1"",""handlebarsBlockCodes"",""each"",""if"",""with"",""unless"",""indexRefPattern"",""keyIndexRefPattern"",""handlebarsBlockPattern"",""OPEN_COMMENT"",""CLOSE_COMMENT"",""leadingLinebreak"",""trailingLinebreak"",""stripStandalones"",""backOne"",""backTwo"",""lastSectionItem"",""isString"",""isComment"",""isSection"",""lastItem"",""trimWhitespace"",""leadingPattern"",""trailingPattern"",""contiguousWhitespace"",""preserveWhitespaceElements"",""leadingWhitespace$1"",""trailingWhitespace"",""leadingNewLine"",""trailingNewLine"",""closingTagPattern"",""tagNamePattern"",""validTagNameFollower"",""disallowedContents"",""li"",""dt"",""dd"",""rt"",""rp"",""optgroup"",""thead"",""tbody"",""tfoot"",""tr"",""td"",""th"",""partialDefinitionSectionPattern"",""STANDARD_READERS"",""readPartial"",""readUnescaped"",""readSection"",""readInterpolator"",""readComment"",""TRIPLE_READERS"",""readTriple"",""STATIC_READERS"",""READERS"",""readMustache"",""readHtmlComment"",""readElement$1"",""readText"",""PARTIAL_READERS"",""readPartialDefinitionSection"",""defaultInterpolate"",""StandardParser"",""tripleDelimiters"",""staticDelimiters"",""staticTripleDelimiters"",""standardDelimiters"",""delimiters"",""tags"",""isTriple"",""open"",""close"",""readers"",""sortMustacheTags"",""sectionDepth"",""elementStack"",""sanitize"",""elements"",""eventAttributes"",""stripComments"",""preserveWhitespace"",""sanitizeElements"",""sanitizeEventAttributes"",""includeLinePositions"",""textOnlyMode"",""csp"",""cleanup"",""expr"",""insertExpressions"",""readTemplate"",""b"",""parseOptions"",""TEMPLATE_INSTRUCTIONS"",""COMPUTATION_INSTRUCTIONS"",""fromId"",""noThrow"",""getElementById"",""isParsed"",""getParseOptions"",""reduce"",""val"",""throwNoParse"",""addFunctions"",""parseFor"",""templateConfigurator"",""parseTemplate"",""getDynamicTemplate"",""_config"",""extendPartials"",""registryNames"",""Registry"",""useDefaults"",""configure"",""registry"",""isOwner"",""registries"",""custom"",""defaultKeys"",""isStandardKey"",""makeObj"",""isBlacklisted"",""order"",""config"",""configure$1"",""renderItem"",""meta"",""nextNode"",""contains"",""lastBound"",""q"",""list"",""updateAnchors"",""all"",""res"",""isBindableByValue"",""isBindableByContentEditable"",""isContentEditable"",""isBindableByName"",""isBindableByChecked"",""isBindableByName$1"",""isBindableByChecked$1"",""makeDirty"",""nameAttr"",""xmlns$$1"",""updateModel$1"",""text"",""splitText"",""createTextNode"",""readKey"",""childData"",""getPartialFromRegistry"",""fillGaps"",""findParentPartial"",""findInstance"",""noRegistryFunctionReturn"",""findOwner"",""findConstructor"",""_Parent"",""hasIndexRef"",""getComponentConstructor"",""ElementConstructor"",""guid"",""counter"",""placeholderId"",""newModel"",""hookQueue"",""childQueue"",""userOptions"",""subscribe"",""createFragment"",""getElement"",""append"",""logIfDebug"",""subs"",""toPairs"",""single"",""config$$1"",""applyCSS"",""__ractive_instances__"",""torndown"",""others"",""rerender"",""changes"",""dest"",""external"",""set$1"",""build"",""add$1"",""TypeError"",""badArguments"",""gather"",""uniqueCssIds"",""ids"",""HTMLElement"",""here"",""cascade"",""updateFromBindings"",""addRegistries"",""addOtherOptions"",""addRegistry"",""_method"",""extendOne"",""Class"",""Target"",""extendClass"",""_on"",""_observe"",""optional"",""required"",""computed"",""resolveInstanceMembers"",""warnAboutAmbiguity"",""modifyArrays"",""isolated"",""noIntro"",""noOutro"",""nestedTransitions"",""linear"",""easeIn"",""Math"",""pow"",""easeOut"",""easeInOut"",""toString$1$1"",""warn"",""log"",""printWarning"",""welcome"",""implementation"",""hasFeature"",""alreadyWarned"",""welcomeIntro"",""welcomeMessage"",""WELCOME_MESSAGE"",""hasGroup"",""intermediate"",""min"",""properties"",""snap"",""prop$1"",""TransitionManager"",""intros"",""outros"",""totalChildren"",""outroChildren"",""detachQueue"",""outrosComplete"",""decrementOutros"",""decrementTotal"",""detachNodes"",""detach$1"",""_detachNodes"",""ready"",""detachImmediate"",""batch"",""previousBatch"",""transitionManager"",""fragments"",""tasks"",""immediateObservers"",""deferredObservers"",""flushChanges"",""observer"",""thing"",""task"",""postRender"",""_batch"",""refPattern"",""splitPattern"",""escapeKeyPattern"",""unescapeKeyPattern"",""star"",""deepOpts"",""comparators"",""errorMessage"",""noAnimation"",""linear$1"",""initStars"",""bubbleStars"",""arg"",""div"",""methodNames"",""unprefixed"",""prefixed"",""makeFunction"",""attachHook"",""detachHook"",""detachHook$1"",""mathml"",""xlink"",""xml"",""xmlns"",""ns"",""createElementNS"",""cloneNode"",""Query"",""isComponentQuery"",""sortByItemPosition"",""sortByDocumentPosition"",""captureGroup"",""KeyModel"",""isKey"",""dependant"",""isKeypath"",""getChild"",""hasProp"",""shuffleTasks"",""early"",""registerQueue"",""keyModels"",""patternObservers"",""stage"",""existingMatches"",""loop"",""getKeyModel"",""skip"",""child$1"",""Missing"",""shufle"",""attach"",""bind$$1"",""isDetached"",""readBooleanLiteral"",""getString$1"",""escapeChar"",""readTemplateStringLiteral"",""parts"",""token"",""readNumberLiteral$1"",""readKeyValuePair"",""spread"",""refKey"",""pairs"",""readNumberLiteral"",""name$$1"",""reference"",""lastDotIndex"",""startPos"",""relaxedNames"",""actual"",""normalise"",""lastIndexOf"",""refLength"",""strictRefinement"",""getConditional"",""ifTrue"",""ifFalse"",""isSpread"",""expressions"",""flattenExpression"",""getVars"",""vars"",""stringify"",""hasSpread"",""makeSpread"",""stringifyPair"",""out"",""extractRefs"",""stringified"",""splitEvent"",""readAttribute"",""nearest"",""readAttributeValue"",""valueStart"",""startDepth"",""readQuotedAttributeValue"",""readUnquotedAttributeValue"",""readUnquotedAttributeValueToken"",""tokens"",""quoteMark"",""readQuotedStringToken"",""readAttributeOrDirective"",""readArguments"",""readProxyEvent"",""spreadArgs"",""exprs"",""inside"",""readMustacheOfType"",""inTag"",""tag"",""reader"",""readDelimiterChange"",""rewind"",""refineExpression"",""referenceExpression"",""getReferenceExpression"",""triple"",""readAliases"",""alias"",""readAlias"",""readExpressionOrReference"",""expectedFollowers"",""readClosing"",""closing"",""readElse"",""readElseIf"",""section"",""hasElse"",""block"",""unlessBlock"",""closed"",""expectedClose"",""aliasOnly"",""extra"",""endIndex"",""comment"",""removeLeadingWhitespace"",""removeTrailingWhitespace"",""previousItem"",""nextItem"",""preserveWhitespaceInsideFragment"",""removeLeadingWhitespaceInsideFragment"",""removeTrailingWhitespaceInsideFragment"",""isPreserveWhitespaceElement"",""readClosingTag"",""selfClosing"",""hasPartials"",""closingTag"",""lowerCaseName"",""canContain"",""closingTagName"",""readAnchorClose"",""disallowed"",""barrier"",""addTo"",""hasChildren"",""fromExpression"",""instructions"",""createFunction"",""body"",""createFunctionFromString"",""bindTo"",""fromComputationString"",""initial"",""parseAsString"",""validate$1"",""existingPartials"",""newPartials"",""overwrite"",""wrap$1"",""getSuperMethod"",""_parent"",""oldSuper"",""getMessage"",""deprecated"",""correct"",""isError"",""deprecateOption"",""deprecatedOption"",""deprecate"",""extendOtherMethods"",""member"",""orComponent"",""readStyle"",""rule"",""rules"",""readClass"",""updateMultipleSelectValue"",""updateSelectValue"",""updateStringValue"",""updateContentEditableValue"",""updateRadioValue"",""updateValue"",""updateRadioName"",""updateCheckboxName"",""updateStyleAttribute"",""updateInlineStyle"",""updateClassName"",""updateInlineClass"",""type$1"",""updateBoolean"",""updateNamespacedAttribute"",""updateAttribute"",""arrayContains$1"",""wasSelected"",""wasChecked"",""valueAttribute"",""prev"",""setProperty"",""className"",""removeAttributeNS"",""setAttributeNS"",""needle"",""qualified"",""hasAttribute"",""enumerable"",""getComputationSignature"",""getterString"",""setterString"",""initialiseProperties"",""handleAttributes"",""_attributePartial"",""getAdaptors"",""protoAdapt"",""lookup"",""builtins"",""srcs"",""magic$$1"",""_subs"",""_nsSubs"",""_eventQueue"",""_liveQueries"",""_liveComponentQueries"",""_children"",""byName"",""tpl"",""mapAll"",""getPromise"",""cancel$1"",""nameOption"",""factory"",""exports"",""module"",""define"",""amd"",""noConflict"",""isFinite"",""format"",""registryName"",""interpol"",""arrays"",""arrayLike"",""tm"",""notifiedTotal"",""manager"",""trans"",""collectAllOutros"",""_list"",""dispatch$1"",""which"",""deep"",""deepSet"",""getComparator"",""sets"",""getOptions"",""easing$$1"",""animate$1"",""enqueue"",""dequeue"",""variants"",""_noArg"",""eventNames"",""fireEventAs"",""initialFire"",""notifySubscribers"",""fullName"",""subscribers"",""originalEvent"",""stopEvent"",""queries"",""remotes"",""remote"",""query$1"",""findAnchors"",""findAnchorsIn"",""anchors"",""idxs"",""unrenderChild"",""bubble$1"",""findNextNode$1"",""removeFromQuery$1"",""prepend"",""insertAt"",""@this.parent"",""@this.root"",""cmp"",""isParent"",""output"",""otherNode"",""compareDocumentPosition"",""bitmask"",""baseA"",""baseB"",""mutualAncestor"",""ancestryA"",""getAncestry"",""ancestryB"",""oldestA"",""oldestB"",""fragmentA"",""fragmentB"",""indexA"",""indexB"",""indexA$1"",""indexB$1"",""getParent"",""ancestry"",""ancestor"",""getQuery"",""upstream"",""last"",""findAlias"",""prefixKeypath"",""rootKeypath"",""rootDot"",""relativeKeypath"",""initialFragment"",""explicitContext"",""context$1"",""badReference"",""repeater"",""context$2"",""crossedComponentBoundary"",""shouldWarn"",""spliceArguments"",""getSpliceEquivalent"",""balance"",""removeStart"",""removeEnd"",""update$3"",""build$1"",""findModel"",""get$1$1"",""add$2"",""animate$2"",""link$1"",""there"",""raise"",""event$1"",""set$2"",""drop"",""unlink$1"",""update$2"",""isBound"",""getBindingModel"",""getBindingPath"",""getBinding"",""ctx"",""setBinding"",""fireInsertHook"",""observers"",""silent"",""caller"",""keypaths"",""createObserver"",""isSilenced"",""silence"",""resume"",""wildcardIndex"",""double"",""_proxy"",""callback$1"",""listener"",""canonical"",""styleDefinition"",""cssText"",""filteredStyleDefinitions"",""sources"",""trim$1"",""extractString"",""unit"",""transformSelector"",""selectorUnits"",""modifiers"",""transformed"",""appended"",""prepended"",""dataAttr"",""selectors"",""s4"",""floor"",""random"",""validate"",""childValue"",""parentIsFn"",""childIsFn"",""callDataFunction"",""fromProperties"",""primary"",""secondary"",""hasThis"",""functionBody"",""exp"",""opening"",""entity"",""code"",""parseInt"",""validateCode""],""mappings"":""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AAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,KAAM,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,KAAM,IAAKC,IAAK,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,KAAM,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,KAAM,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,KAAM,IAAKC,KAAM,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,QAAS,IAAKC,KAAM,IAAKC,IAAK,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,GAAI,IAAKC,GAAI,IAAKC,GAAI,IAAKC,QAAS,IAAKC,GAAI,IAAKC,IAAK,IAAKC,MAAO,IAAKC,IAAK,IAAKC,QAAS,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,MAAO,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,QAAS,IAAKC,KAAM,IAAKC,IAAK,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,GAAI,IAAKC,GAAI,IAAKC,GAAI,IAAKC,QAAS,IAAKC,GAAI,IAAKC,IAAK,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,IAAK,IAAKC,QAAS,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,MAAO,IAAKC,SAAU,IAAKC,MAAO,IAAKC,IAAK,IAAKC,KAAM,KAAMC,KAAM,KAAMC,OAAQ,KAAMC,KAAM,KAAMC,IAAK,KAAMC,IAAK,KAAMC,IAAK,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,OAAQ,KAAMC,OAAQ,KAAMC,KAAM,KAAMC,OAAQ,KAAMC,OAAQ,KAAMC,MAAO,KAAMC,MAAO,KAAMC,OAAQ,KAAMC,OAAQ,KAAMC,MAAO,KAAMC,MA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""}"
f8388342d56f04d6041e1a3546d5a5633d6ca634,6724515,            http://stackoverflow.com/questions/6724515/what-is-the-purpose-of-the-html-no-js-class
2cbee15a3c4d98c12998ce5c6f44503579fe7f8f,40521433,Try the solution here: https://stackoverflow.com/a/40521433
5c3b297c54c2604adb63bc208c6427e107d01431,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
43b44f5a46f60b9c27c46d8cff43d304696ca946,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
7d2c56de87608cb0ef98572d4fd77e7cc8b2c1ef,1909534,// * @source on http://stackoverflow.com/questions/1909534/java-replacing-text-url-with-clickable-html-link
221e2706613639b0e13e0a7afa1ba19d8eb750d6,28142011,                // thing. See http://stackoverflow.com/q/28142011/266378
5af4ea6ffcfbd30abef3635e2baf45362bbdc89d,3115982,    //https://stackoverflow.com/questions/3115982/
3a59e7241c430ab98ad594d77119750a98b8b262,4368838,See [StackOverflow #3282655](http://stackoverflow.com/questions/3282655/ruby-on-rails-3-reload-lib-directory-for-each-request/4368838#4368838) for more information.
220689096f9b1a8310b2eab3545921b2cb77297b,10276323,"<a href=""http://stackoverflow.com/questions/10276323/outlook-addin-goes-straight-to-inactive-application-addins"">Here</a> is an example, albeit poorly written in the sense that it's not even posed as a question and there are no capital letters which is something of an eyesore . . . that directly states the problem. No wasted words and very specific. In this instance I would like to point out that I know exactly the issue that the questioner is dealing with and in my experience this isn't the solution. "
caec34fd2f4e815d54dd53a5ef5ed3bbfc75916c,17803475,"<div><a href=""http://stackoverflow.com/questions/17803475/why-is-stdinitializer-list-often-passed-by-value"">http://stackoverflow.com/questions/17803475/why-is-stdinitializer-list-often-passed-by-value</a></div>"
7bf837046f42ab17764637ec03f94b694af2c295,12245935,"    /// See <see cref=""http://stackoverflow.com/questions/12245935/is-task-factory-startnew-guaranteed-to-use-another-thread-than-the-calling-thr"" />"
59ad6953f9f6a814146cfd4cf93942c82f28a7cb,47006235,  [3]: https://stackoverflow.com/a/47006235/2462089
1c3a94bbf37354eb1f681d59bfc3625a73204468,5926986,                // visible overflow for firefox https://stackoverflow.com/questions/5926986/why-does-firefox-appear-to-truncate-embedded-svgs
a738dcd662d7ee6a6922428fb88070324562533c,5243012, *    http://stackoverflow.com/questions/5243012/is-it-guaranteed-to-be-safe-to-perform-memcpy0-0-0
1c52ea22b6b7107a51c9ef6985a66a347e4956cf,37432260,// https://stackoverflow.com/a/37432260
7af35f16f90ead300f69ea2353bfeae6af8cce68,3311940,"to reconfigure java to work correctly within R. You might read about possible solutions for [Linux](https://stackoverflow.com/questions/3311940/r-rjava-package-install-failing) and [Mac OS X](https://github.com/MTFA/CohortEx/wiki/Run-rJava-with-RStudio-under-OSX-10.10,-10.11-(El-Capitan)-or-10.12-(Sierra))."
8280f5ca9674dcb909f2054a1e06377e3feae452,7944460,		// http://stackoverflow.com/questions/7944460/detect-safari-browser - needed to position scrolling body
5f2cc9a07d5444de604c0bbc6d0896ff65c523df,3790935,        //http://stackoverflow.com/questions/3790935/can-i-hide-the-html5-number-inputs-spin-box
04658121ae478c8aa8433f1eb188b919bcacc438,11251376,// from: http://stackoverflow.com/questions/11251376
86f367282435f0b8be9f86b485f06c42fe0c95c9,263416,            // credit: http://stackoverflow.com/a/263416/677735
efd8861b43550f9bda2cd0035967af87f5fbc381,18361233,					merci à http://stackoverflow.com/questions/18361233/gmail-sending-limits
f989f68b7822a94fbd647a66599e2c415ee5f7cf,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
0de83a423cfc8c57a518924d2292b5cb84dc2b3b,3939157,                        //  Thanks to http://stackoverflow.com/questions/3939157/c-getopt-multiple-value
becbc8baae502f8167038f960e5324383eab95a4,470832, * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
882f2e21d1e024b9e0fab931e81f3764263cbe4b,4475996,  // http://stackoverflow.com/questions/4475996/given-prime-number-n-compute-the-next-prime
2ee63bafedfad6b091d0a72f54df87bf44e75529,4343746, *	http://stackoverflow.com/questions/4343746/is-there-a-data-structure-like-the-java-set-in-javascript
2ad2e9b3b0ac732cdb9612e734f97688f1d82113,4950905,        // http://stackoverflow.com/a/4950905/244576
3d45a4088e2adc6a0632c2d1252acb912b118dfb,39176935,- https://stackoverflow.com/questions/39176935/formatting-output-of-csv-file-in-python
727549c87be780a1a7d4da18e5232044554f7707,1732454,guru](http://stackoverflow.com/a/1732454/3515576) will be happy to inform you.
1751de97cc9fef5a73a19f38af7cf9173a56fc20,263305,//http://stackoverflow.com/questions/263305/drawing-a-topographical-map
fb31b4dbd87d19a702e61e9d7bbba8dd89967aab,21440217,  // shim for IE courtesy of http://stackoverflow.com/a/21440217
586144a105323484e34ed2818183c58f9766608d,279170,"Every effort has been made to make the app support Unicode by consistently using UTF-8. However, complete Unicode support is [rather tricky in PHP](http://stackoverflow.com/questions/279170/utf-8-all-the-way-through), and Formulaic's dependencies may not have proper Unicode support. In particular, it is known that Excel won't handle Unicode characters in CSV files generated by the app, due to bugs in PHPExcel."
5f5071ce47117dcef5da0f3474268a99d7986867,7243567,    /// Encoding can be specified depending on what your server expect (see https://stackoverflow.com/a/7243567).
7f7f08924a9d1b2864c2b000dd88e93c9123af15,3222375,0;19;http://stackoverflow.com/questions/3222375/what-is-message-passing;sender;0.3137254901960784;0.09375;0.1933333333333333;0.6008088235294118;0.0;0.0
4226d351914d2c99c99c7dc50c21a658d46f635f,43003970,   * About the Generic: https://stackoverflow.com/q/43003970/1123955
ada12ebfe24b0cd1cb724ea9808ef6fe2807a7af,24161582,"       "" * http://stackoverflow.com/a/24161582/3208463\n"","
fb7de916a201d4035ad2f3d0da81af809af5ef11,19599266,	// http://stackoverflow.com/questions/19599266/invalid-context-0x0-under-ios-7-0-and-system-degradation
7c124be4a2650d61d54c2416cc47009a59351883,44691611,            /* https://stackoverflow.com/questions/44691611/xamarin-android-c-how-to-pass-data-back-from-activity-without-new-intent */
7bfa28a2e30525b0369377fa141a246209bf2028,2760976,    # see http://stackoverflow.com/questions/2760976/theme-confusion-in-spreadsheetml
83ac3838c49ee940595e0a33aa2d95a9060719fd,14693052,      // see http://stackoverflow.com/questions/14693052/watch-ngmodel-from-inside-directive-using-isolate-scope how to do it then
f8d304e55416203d8bb4d752ecfc6e15b3599008,8495687,http://stackoverflow.com/questions/8495687/split-array-into-chunks
715032f8b0e4df344b7fb9cf3bf6b809573f935d,166506,    # See http://stackoverflow.com/questions/166506/finding-local-ip-addresses-using-pythons-stdlib
cce760b68055f1c1f7207940eacb9e7880a4760f,35090981,# source: https://stackoverflow.com/a/35090981/6873133
e3661635f0632f12f19b124d0445176a57b2cb3f,1058149,    // http://stackoverflow.com/questions/1058149/using-a-byte-array-as-hashmap-key-java
7d22f2c8d0267e52cc336037cdab8163378668e0,229643,"On Windows host, you may (and likely will) experience problems with `npm` that are related to [Maximum Path Length Limitations of Windows API](http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath). To work around that issue you would need to enable symbolic link evaluations by executing the command in admin command prompt on the windows host ([details](http://stackoverflow.com/questions/229643/how-do-i-overcome-the-the-symbolic-link-cannot-be-followed-because-its-type-is))."
70680001b39a2a485ba3a2b00b554f4a2a140ce5,43274850,* [Why is there a comma in this Golang struct creation?](https://stackoverflow.com/questions/43274850/why-is-there-a-comma-in-this-golang-struct-creation)
4a017f4bd32f8ee6c353c598132e341b3e18983c,28531695, * http://stackoverflow.com/a/28531695/778449
74a84bf3dece385841307083e1876f923284caaa,8277299,"""http://stackoverflow.com/questions/8277299/using-node-js-with-django-and-"""
35da271ea1c6233f31686c1c9d8b2766914427ce,7290086,        //http://stackoverflow.com/questions/7290086/javascript-use-strict-and-nicks-find-global-function
b83f14a1e67a9b718c0a0c101550fea76145037e,14731922,   * Source:  http://stackoverflow.com/a/14731922
f46315eb941c0bd9518d750f3f6c8f95b045b920,5438771,          // choice as per http://stackoverflow.com/a/5438771.
dad6b73cbca15da1d6e8cc305856c539633b4e20,18545941,  // See http://stackoverflow.com/questions/18545941/jquery-on-submit-event
b252089c430edf2a5f6fd35f7be326d54f1b7a83,37628,208;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;variables;1.0;9.891196834817012E-4;28.0;0
084ac336c6d58f53e86be1a72ea70249d2847063,1321878,"    <!-- prevent favicon request, see https://stackoverflow.com/questions/1321878/how-to-prevent-favicon-ico-requests  -->"
08c0b104f1576d01b521483b2bf081f3419b20e5,95727, * Details: http://stackoverflow.com/questions/95727/how-to-convert-floats-to-human-readable-fractions
fc27898beb2f1a1a3a299a5b23a29abf76c5c7ce,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
96176212dc67c1bad17df22c6ca26f15e94f847e,6690752,// Credit: http://stackoverflow.com/questions/6690752/insert-html-at-caret-in-a-contenteditable-div
e11c8ab90ea52dc822df35b09e3deb7e9782763a,11925952,	 * (see http://stackoverflow.com/questions/11925952/custom-spring-property-source-does-not-resolve-placeholders-in-value) 
c447254334fda7427817d1c88bbbf1a63c23e048,13977403,"    // disable link, http://stackoverflow.com/a/13977403"
93f5a5c4640dd8dc05297109f2fc2e60da3bbed1,5736398,//http://stackoverflow.com/questions/5736398/how-to-calculate-the-svg-path-for-an-arc-of-a-circle
5383f28ce83eb24fd8edac0be7dd673629a9afa7,5115613,	# http://stackoverflow.com/questions/5115613/core-dump-file-analysis
7d9693c89c13d2395655262d88337255bfd5d98f,10868104,	   src: http://stackoverflow.com/questions/10868104/can-you-have-a-javascript-hook-trigger-after-a-dom-elements-style-object-change
2961bc362c43e5c39f0ba2aca56c528436b32aee,19600905,  # See: http://stackoverflow.com/q/19600905/806956
70525f41b6b1b6e412df2bf9c7fa77c09500e7b2,30030031,"  (0, _warning2[""default""])('You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');"
377b653287eb1c1b2c6f23442fbb7122bd469471,11585839,http://stackoverflow.com/questions/5522020/how-do-sessions-work-in-express-with-nodejs/11585839#11585839
8a4210a806589d2dda9671260bf162f769daa42d,21168141,http://stackoverflow.com/questions/21168141/cannot-install-packages-using-node-package-manager-in-ubuntu
229f0a5dd578ffdc7614402e8aaa116a4e893436,1444562,  // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object
c776fcfd33950faa0f9df8f26b7c504fd8656acc,3833127,         * http://stackoverflow.com/questions/3833127/alternative-to-file-exists-in-java
40e9b49d515860c87638de502311845cfed58e6f,36932,"# enums in Python, thanks http://stackoverflow.com/questions/36932"
d19da0380bf6d72ae844351b44b19d763348ef26,6889419 6852307 6620091 6870031,"  ""readme"": ""# After [![Build Status][1]][2]\n\nInvoke callback after n calls\n\n## Status: production ready\n\n## Example\n\n```js\nvar after = require(\""after\"")\nvar db = require(\""./db\"") // some db.\n\nvar updateUser = function (req, res) {\n  // use after to run two tasks in parallel,\n  // namely get request body and get session\n  // then run updateUser with the results\n  var next = after(2, updateUser)\n  var results = {}\n  \n  getJSONBody(req, res, function (err, body) {\n    if (err) return next(err)\n    \n    results.body = body\n    next(null, results)\n  })\n  \n  getSessionUser(req, res, function (err, user) {\n    if (err) return next(err)\n    \n    results.user = user\n    next(null, results)\n  })\n  \n  // now do the thing!\n  function updateUser(err, result) {\n    if (err) {\n      res.statusCode = 500\n      return res.end(\""Unexpected Error\"")\n    }\n    \n    if (!result.user || result.user.role !== \""admin\"") {\n      res.statusCode = 403\n      return res.end(\""Permission Denied\"")\n    }\n    \n    db.put(\""users:\"" + req.params.userId, result.body, function (err) {\n      if (err) {\n        res.statusCode = 500\n        return res.end(\""Unexpected Error\"")\n      }\n      \n      res.statusCode = 200\n      res.end(\""Ok\"")  \n    })   \n  }\n}\n```\n\n## Naive Example\n\n```js\nvar after = require(\""after\"")\n    , next = after(3, logItWorks)\n\nnext()\nnext()\nnext() // it works\n\nfunction logItWorks() {\n    console.log(\""it works!\"")\n}\n```\n\n## Example with error handling\n\n```js\nvar after = require(\""after\"")\n    , next = after(3, logError)\n\nnext()\nnext(new Error(\""oops\"")) // logs oops\nnext() // does nothing\n\n// This callback is only called once.\n// If there is an error the callback gets called immediately\n// this avoids the situation where errors get lost.\nfunction logError(err) {\n    console.log(err)\n}\n```\n\n## Installation\n\n`npm install after`\n\n## Tests\n\n`npm test`\n\n## Contributors\n\n - Raynos\n - defunctzombie\n\n## MIT Licenced\n\n  [1]: https://secure.travis-ci.org/Raynos/after.png\n  [2]: http://travis-ci.org/Raynos/after\n  [3]: http://raynos.org/blog/2/Flow-control-in-node.js\n  [4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307\n  [5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031\n  [6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419\n  [7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091\n  [8]: http://github.com/Raynos/iterators\n  [9]: http://github.com/Raynos/composite\n"","
6e4f31d9c0f37b8941f4334c4d799da03d9e6800,30030031,"	  (0, _warning2[""default""])('You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');"
325d2075681ed483582fd29e8850befc20f9022c,16047306,http://stackoverflow.com/questions/16047306/how-is-docker-io-different-from-a-normal-virtual-machine).
6fe2b3b3d291f21c8b92a8084ba049bc8b192f00,4169160,// IE version detection - http://stackoverflow.com/questions/4169160/javascript-ie-detection-why-not-use-simple-conditional-comments
b097be9d5ebaa66678894cfd563688fbd60887ff,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
614a3fba1a1c2690668a54e5b9c0958afe376d85,2025282,"- [Difference between px, dp, dip and sp in Android?](http://stackoverflow.com/questions/2025282/difference-between-px-dp-dip-and-sp-in-android)"
36388104dba27b2137dc63c39813912438f17e3c,8422550,<http://stackoverflow.com/questions/8422550/defining-a-property-getter-for-my-singleton-class-in-coffeescript>
229dcadfa4cd1e47e4f387d5217986e85ab3d8c8,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
576463253097a55b8911866b4ec788f3c4d5c24a,10747381,/* From: http://stackoverflow.com/a/10747381 */
28c316c49ec0ccf19bc92c9de870ff8ee462f9c2,6677355,            // http://stackoverflow.com/a/6677355
c6075cf8ff4a9e80c099c63a939f87a816b7069b,3629183,//http://stackoverflow.com/questions/3629183/why-doesnt-indexof-work-on-an-array-ie8
8515e342fb555334f95fbd9846bb9a680dd5ecb6,23986466,<!-- http://stackoverflow.com/questions/23986466/d3-force-layout-linking-nodes-by-name-instead-of-index -->
c3c69d0f15c3ee89e186206d9715e855489d94ee,24506789,// https://stackoverflow.com/questions/24506789/set-vs-unordered-set-for-fastest-iteration
4c18c573cb41998424ba62d8b90c6b0bbda68fe3,1080411,http://stackoverflow.com/questions/1080411/retrieve-links-from-web-page-using-python-and-beautifulsoup
ad5c6f66de25f5765f1d7519edbb4751462935ed,1825928,# Borrowing from http://stackoverflow.com/questions/1825928/netmask-to-cidr-in-ruby
77910170c283e5f7b5b333eab3901897dce0b84b,3330919,        // http://stackoverflow.com/a/3330919)
0b6f3a00b358e5dac435b3c63b22726a0478354a,49478,# from http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects
2b6d103d4a8e9611263513991914bef639c226ed,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
bd68202551c74c76dd43dc61b263ad06b6598f70,43044,      // based on awesome response : http://stackoverflow.com/questions/43044/algorithm-to-randomly-generate-an-aesthetically-pleasing-color-palette
1ec6c831acf47c8e56c9cc40637c418232f3e35a,8809472,  // from http://stackoverflow.com/a/8809472/1138191
145bd6dd1771d85cf6031ed8be5ff712bb22ed08,8809472,	  // from http://stackoverflow.com/a/8809472/1138191
7742f0100b71811505ccf8918938b441f2deee52,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
019444ac3fc5af373d56c7f270566e6131621a43,50283,# -- UNVERIFIED: c.f. http://stackoverflow.com/a/50283/153422
4e7f9785847b4da8cfcadfaca4274c892acb6626,17180645 12844968 8005327,"<p>参考列表<br><a href=""http://stackoverflow.com/questions/12844968/http-post-body-lost-spuriously-httpurlconnection-jetty"" target=""_blank"" rel=""external"">HTTP post body lost spuriously (HttpURLConnection &amp; Jetty)</a><br><a href=""http://stackoverflow.com/questions/17180645/post-byte-array-in-parameter"" target=""_blank"" rel=""external"">Post byte array in parameter</a><br><a href=""http://stackoverflow.com/questions/8005327/convert-a-stringbuffer-to-a-byte-array-in-java"" target=""_blank"" rel=""external"">Convert a StringBuffer to a byte Array in Java</a></p>"
08549c4987cf9e51f6f208766e93ed1483fbf2e2,28210364,    // http://stackoverflow.com/a/28210364/1070244
607d27ad55577b7f695b3ffccaf8ed176c01ef18,4976787,http://stackoverflow.com/questions/2726126/what-does-the-microsoft-webapplication-targets-import-do-in-vs-2010-web-applicati/4976787#4976787
7e6ab8e49ef7698e5c5ae8d31429857b9eda33c6,7422072,    // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
691861eb150dc72e0c1b0653c553a8817d192ea8,22747272,"	// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
8984b54e9ff591268b8600c5fc4651292763c496,30707423, * From [stackoverflow](http://stackoverflow.com/a/30707423).
23d2977203b38befae0e77d9950028f12b3442da,9739772,#    - ref  http://stackoverflow.com/questions/9739772/how-to-pin-to-taskbar-using-powershell
df54168b265fc96b4bcb7ba6760c90903116cc0b,21637922,        # ref: http://stackoverflow.com/questions/21637922/how-to-install-pyqt4-in-anaconda
d33d24be31eaf1f919a68cafe78181bc187eb605,17603000,# from https://stackoverflow.com/a/17603000
473f3fa5f5b4b02f6b1fb6139638f7a588d03c7c,18368485,   * http://stackoverflow.com/questions/18368485/angular-js-resizable-div-directive
ecbbab4503c96b4ed47ec8aac4b038593ff53d1f,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
c43250d2c360c647fd2343d4be4bbf91ffc6cbd9,9235374,				// http://stackoverflow.com/questions/9235374/confusion-on-position-in-instantiateitem-function-in-class-pageradapter-andro
dfc128474a5b5bb28daddfaebfe1a3a2bdc3703f,7788165,# From refaim on stackoverflow: http://stackoverflow.com/a/7788165/770468
28297519ba56085c47d18b9120a75feae0bd111d,9904844,    // and http://stackoverflow.com/a/9904844
e6f03fe9eb6996cb64da353c5a49b340a4739660,3330919,        // http://stackoverflow.com/a/3330919)
bb1e353120cfa7a2b32c699e82a65cbdc7815a73,566746,"     http://stackoverflow.com/questions/566746/how-to-get-console-window-width-in-python"""""""
fef7353c257ec1ae8e0a591e4f149b752ff1a6a3,26936864,// taken from http://stackoverflow.com/a/26936864/266378
39d72ddfe69aacce68b9efeff64d2bd2b80b251b,14317243,#http://stackoverflow.com/questions/14317243/boto-uploading-file-to-a-specific-location-on-amazon-s3
fe2ddc851a09da9822dffc9a2c6305899a679261,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
3e0776db520c1360538cbe91b7d6fafff977d4c1,8533318,https://stackoverflow.com/questions/8533318/python-multiprocessing-pool-when-to-use-apply-apply-async-or-map/8533626
a6021d6e6464053f473ad4db6d6d45c2fdf79571,4508574,	// http://stackoverflow.com/questions/4508574/remove-hash-from-url seems an issue in angular+html5 mode
c1c08b5a66eb275ed355a465bd1a3955e8134780,11764714,  - [Adding Delays within Loops using IIFEs](http://stackoverflow.com/questions/11764714/applying-delay-between-iterations-of-javascript-for-loop)
3c696b3d663bedada1d8d62aac65b452bd81dd17,32075416,> [How to handle Scroll bars while developing test scripts in Sikuli for automation - Stack Overflow](https://stackoverflow.com/a/32075416)
d2c131a2ea7bbb443a8800d3e32a6aeedef452da,12037133,  - [Others](https://stackoverflow.com/a/12037133/8122577)
1963bde4cc1515a97879243928786fa5b56983f2,21601521, *      http://stackoverflow.com/questions/21601521/how-to-use-the-libnl-library-to-trigger-nl80211-commands
a80af6e13b88bca194355eca7f171bf5ed70fa50,4775722,                // see http://stackoverflow.com/questions/4775722/check-if-object-is-array
191cdea9c859c625b6a89c7555579389532c97e9,17202128,"    ""1"":""Safari 6.1 and earlier did not apply `border-radius` correctly to image borders: http://stackoverflow.com/q/17202128"","
42820660ee6904778e0e2da7164ef815f171fdbd,42006320,"  <td><a href=""http://stackoverflow.com/q/42006320"">42006320</a></td>"
67d2c212bcee7f6cf2022abf59c029152d15fe73,3653444,      // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7
0dc9007d429ae4fed6d746b8cfff0e19fb58521d,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
1b469621bd3e7dedc14b3faa6351f03b008b265c,3330919,        // http://stackoverflow.com/a/3330919)
22d393612a38b96369e8de24c1dea7270aad68bf,15191273,// http://stackoverflow.com/questions/4688693/how-do-i-connect-to-mongodb-with-node-js-and-authenticate/15191273#15191273
0a672d0d9dcc051bfa3a2ea254abfdb0d67742d5,442474,   * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966
99c4b50f1c97e7b06bab888575713378bf95a7d9,19580944,    # ver http://stackoverflow.com/questions/19580944/python-set-union-and-set-intersection-operate-differently para o operador    
a12e7a4dff186ab1cc5f8f133903b631a569d529,1227037,# http://stackoverflow.com/questions/1227037/substitutions-inside-links-in-rest-sphinx
d9ac992accad3641a4016436cb0550fa5cb528c6,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
541f72082087fcf8931b0e8618ce7d99b6434338,4155197,                // http://stackoverflow.com/a/4155197
33f78287210e2d3d130d1423f3167718536423ca,41927589,//    see http://stackoverflow.com/questions/41927589/rationales-consequences-of-webidl-class-inheritance-requirements
efd7c837235f589e4f6fdf3f883d6b9890f3994b,470832,                // http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
8e3158abcb2004270e150358fa25a25857232b32,8591192 18675579,"                    ""value"": ""*\r\n     * M8) Setup all events used by the API. Right now the API uses: drag, zoom and click events.\r\n     * Pan = viewchange,  Zoom = mousewheel, click = click\r\n     * @param {number} mappos - This map id. \r\n     * @return {void}\r\n     * @see http://www.bing.com/api/maps/sdkrelease/mapcontrol/isdk#addEventHandler+JS \r\n     * @see http://stackoverflow.com/a/8591192/5869289\r\n     * @see http://stackoverflow.com/a/18675579/5869289\r\n     "","
5887fb756eba443f854d4a9e121797b9c01c89fc,923034,  http://stackoverflow.com/questions/564695/is-there-a-way-to-change-effective-process-name-in-python/923034#923034
000b072c77fa095ae2f6db757fc5c47d89a799d2,3277369,	http://stackoverflow.com/questions/3277369/simulate-a-click-by-using-x-y-coordinates-javascript
f03de686c7169b5f79857603c8e9d643288bf61e,8508275,	/*THANK YOU SO MUCH STACKOVERFLOW http://stackoverflow.com/questions/8508275/how-to-center-a-position-absolute-element */
7cdfd6f0bf2b86adda7124786ffd75b063f74e80,7264899,"	// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr"
43437379b049b6ed4573a4557e0d80ecb498ccf8,31751392,    /*refer: http://stackoverflow.com/questions/31751392/how-to-make-transparent-navbar-when-scroll-to-top-of-document*/
adfba4db5795a120752dffdc3493d88ffc729ddd,826782,            // http://stackoverflow.com/questions/826782/css-rule-to-disable-text-selection-highlighting
9a7c8eca956f86b638ea4903bdb570b3695d431b,11062804,    // SO: https://stackoverflow.com/questions/11062804/measuring-the-runtime-of-a-c-code
fe32b0710f5323e2015087fe8083a188091979aa,23757345,        // 1. 参考 http://stackoverflow.com/questions/23757345/android-does-not-correctly-scroll-on-input-focus-if-not-body-element
b46312a449fec9a81c14434ba89b919fe35ecf62,15637170,    //http://stackoverflow.com/a/15637170/1927178
6012a8129712523dc8b929e88767ad99c7e9de38,11877551,# See https://stackoverflow.com/questions/11877551/zsh-not-re-computing-my-shell-prompt
dc66a352d8a5d7bc1f25990f2f76eee14b851c2b,3330919,        // http://stackoverflow.com/a/3330919)
d95f885c753401bc081825530897ce7b421dc20e,3783848,        //Confused? Check http://stackoverflow.com/questions/3783848/android-possible-to-have-multiple-distinct-shared-preferences-per-app
9b664a16312aa85435437ff938d4d79720080a04,4440626,    // @see http://stackoverflow.com/questions/4440626/how-can-i-validate-regex
4b67ba46e85b49bb5132d0e120909430635e1b42,6048975,        // -- http://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom-level-for-a-given-bounds
db5f98eb569bb7a0f734f5301295b1b6a13a1f1d,24236240,         * @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox
91310a6ac82b8de6518f11e85ca82899946c03b9,17863685,"  output = '<p>For more information, read <a href=""https://stackoverflow.com/questions/17408815/fieldset-resizes-wrong-appears-to-have-unremovable-min-width-min-content/17863685#17863685"">this Stack Overflow answer</a>.</p>';"
d21236e03c26512aace6daf0cd120d6dc2fcd27d,22075070,"  'a': /[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,  // http://stackoverflow.com/a/22075070"
b22e6def3ee964b915e8daf407f47ff57212aa20,1197928,     * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
61df2a949df98986d18bb497c45199884f505433,1606797,     * new と apply を同時に使う <http://stackoverflow.com/questions/1606797/use-of-apply-with-new-operator-is-this-possible>
2fd576afabf38931c64490718db5228d758301a6,6856733,			// and here:  http://stackoverflow.com/questions/6856733/bluetooth-connection-timed-out-too-soon	
76703b3f1166c5decfdc11acc050c655a7bf4c3f,1197928, * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
c119f4b46da2f06206e1ef87ce500e294ac56e2a,127591,- [Remap Capslock](http://stackoverflow.com/questions/127591/using-caps-lock-as-esc-in-mac-os-x)
62272c7fa9fbcd22d8fbd0561a30ae1ea0c80da8,3148441,//   - http://stackoverflow.com/a/3148441/147079
21611167f011a7d20060759e252bbddbae2541d5,2839321,"               ""Url"": ""https://stackoverflow.com/questions/2839321/connect-java-to-a-mysql-database"","
bae4a910b896fb486bb4def70b937919c1cc185b,582336,"msgid ""See also http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script"""
a070a17b41ac345943495505e486021ed348a787,8008213,"S'# -*- coding: utf-8 -*-\n# intente algo como\nimport os\nimport ast\n\n\'\'\'\ndef index():\n    cabezas = [""ip_machine"", ""code_course"", ""operative_system"", ""memory"", ""processor""]\n    filas =  db1((db1.machine.ip_machine)).select(\n        db1.machine.ip_machine, db1.machine.code_course, db1.machine.operative_system,db1.machine.memory,db1.machine.processor\n    )\n    acciones = [T(""Restart""),T(""Add user"")]\n    return locals()\n\'\'\'\n@auth.requires_login()\ndef mostrar():\n    # Crear un campo pasando un arreglo para los campos http://web2py.com/books/default/chapter/29/05/the-views#HTML-helpers\n    # como agregar campos a un formulario https://web2py.wordpress.com/2010/05/01/more-customization-on-forms/\n    opciones = [T(""Restart""), T(""Create User(s)""), T(""Delete User(s)""),T(\'Change user(s) pass\'), T(""Copy Files"") ]\n    #test2 = SQLFORM.factory(\n    #    Field(\'accion\',requires=IS_IN_SET(opciones))\n    #)\n    test = SELECT(*opciones, **dict(_name=""accion"", _id=""accion"") )\n\n    grid = SQLFORM.grid(db1.machine,         csv=False, editable=False, deletable=False,\n        #query = asdasdasdasdasads\n        selectable = lambda ids :\n                        redirect(     URL(  \'maquinas\', \'configurar\', vars=dict(ids=ids)    )  )\n    )\n    grid[1][0].insert(1, test)\n    #grid[1][0].insert(1, test2)\n    grid[1][\'_align\'] = ""center"" # jejeje\n\n    #GRACIAS!!!!   https://groups.google.com/forum/#!topic/web2py/3kSpuDgo1Lw\n    #Si no hay maquinas se muere, ya q grid[1][0] queda siendo un div y no es posible llamar process(), corregir~! \n    x = grid[1][0].process()\n    x[""_method""] =\'post\'\n    if x.accepted:\n        if x.vars.records:\n            if x.vars.accion == T(""Restart""):\n                redirect (URL(\'reiniciar\', vars=dict(ids= x.vars.records)))\n                \n            elif x.vars.accion == T(""Create User(s)""):\n                redirect(URL(\'usuarios\', \'crear\' ,vars=dict(ids= x.vars.records)))\n                \n            elif x.vars.accion == T(""Delete User(s)""):\n                redirect(URL(\'usuarios\',\'eliminar_usuario\',vars=dict(ids= x.vars.records)))\n                \n            elif x.vars.accion == T(\'Change user(s) pass\'):\n                redirect(URL(\'usuarios\',\'cambiar_pass\',vars=dict(ids= x.vars.records)))\n                \n            elif x.vars.accion == T(""Copy Files""):\n                redirect(URL(\'copiar_archivos\',vars=dict(ids= x.vars.records)))\n                \n            \n            else:\n                pass\n        else:\n            response.flash = T(\'Please select at least one machine\')\n            #redirect ( URL(  \'maquinas\', \'configurar\', vars=dict(accion=x.vars.accion, id= x.vars.records) ))\n    #elif x.errors:\n        #response.flash = T(\'Please select at leats one id\')\n    return locals()\n\n@auth.requires_login()\ndef reiniciar():\n    ids = request.vars[""ids""]\n    form = FORM(_method=\'post\').confirm(T(\'Restart\'),{T(\'Back\'):URL(\'mostrar#\')})\n    form[""_align""] = ""center""\n    \n    pregunta = T(\'Do you really whish to restart the selected machines?\')\n    \n    if form.accepted:\n        print ""se reiniciara la maquina""\n        redirect(URL(\'ejecutar\', vars= dict(ids=ids, opcion=\'restart\')))\n        #print tarea\n    return locals()\n\n@auth.requires_login()\ndef copiar_archivos():\n    ids = request.vars[""ids""]\n    ruta_basica = os.path.join(request.folder, \'uploads/\')\n    HOSTNAME=[\'Carlos\',\'centos\']\n    url = URL(\'download\')\n    # https://groups.google.com/forum/#!topic/web2py/X5xmXyTCavY Checkbox Multiple\n    form = SQLFORM.factory(  Field(""archivo"", ""upload"", uploadfolder=ruta_basica, autodelete=True), #widget=SQLFORM.widgets.upload.widget),\n    \n    #form = SQLFORM.factory( Field(""archivo"", widget=SQLFORM.widgets.upload.widget),\n        Field(""hostname"", ""list:string"",\n              default=HOSTNAME,widget=SQLFORM.widgets.checkboxes.widget,\n              requires=[IS_IN_SET(HOSTNAME,multiple=True),IS_NOT_EMPTY()]))\n    form.add_button(T(\'Back\'), URL(\'mostrar#\'))\n\n    #var_extra = dict(origen=request.vars.archivo, somelist=request.vars.hostname)\n    var_extra = """"#""origen="" +str("""") + ""somelist="" + str(request.vars.hostname)\n\n    print ""\\n\\n ********************************** \\n\\n""\n    if request.vars.archivo:\n        var_extra = request.vars.archivo.filename\n    if form.accepts(request.vars, session):\n        #http://stackoverflow.com/questions/8008213/web2py-upload-with-original-filename todo un d\xc3\xada intentado hacer lo que este chico me soluciono :D\n        coded_name = form.vars.archivo\n        orig_name = request.vars.archivo.filename\n        os.rename(ruta_basica + coded_name, ruta_basica + orig_name)\n        redirect(URL(\'ejecutar\', vars= dict(ids=ids, opcion=\'copyFile\', variables_extra=dict(origen=ruta_basica + orig_name,\n                                                                                             somelist=request.vars.hostname))))\n    return locals()\n@auth.requires_login()\ndef lista_maquina_grupo():\n    indentificador = auth.user_id\n\n    user_groups = db1(db1.course_group.id_teacher == indentificador).select( ##los grupos del usuario\n        db1.course_group[\'cod_course\']\n    )\n\n    print "" ------------------------------ MATERIAS DEL USUARIO ------------------""\n    materias_ids = []\n    for i in user_groups:\n        materia_id = db1(db1.course.id == i[\'cod_course\']).select(db1.course[""id""])\n        #print ""comparando..................""\n        if materia_id not in materias_ids:\n            #print ""no esta""\n            #print materia_id\n            materias_ids.append(materia_id)\n            \n    materias = db1(db1.machine.id in materias_ids).select()\n    for materia in materias:\n        pass\n        #for campo in materia:\n        #    print campo\n    restricciones = dict(course_group= db1.course_group.id_teacher == indentificador)\n    grid = SQLFORM.smartgrid(db1.course,linked_tables=[\'course_group\']\n                             , constraints = {""course_group"":db1.course_group.id_teacher== indentificador,\n                                             ""course"": db1.course in materias_ids\n                                             }\n                            )\n    \n    \'\'\'\n    ids_maquinas = []\n    for id in ids:\n        maquinas = db1(db1.machine.code_course==id).select(\n            #db1.machine.ip_machine\n            db1.machine.id\n        )\n        #maquinas.append(int(maquina[0][\'machine.id\']))\n        for campo in maquinas:\n            ids_maquinas.append(campo[\'id\'])\n        #print maquina[0][\'ip_machine\']\n        #print ""------------------\\n"",maquina[0][\'machine.id\']\n    for id_maquina in ids_maquinas:\n        print id_maquina\n    #grid = db1(db1.machine.id == ids_maquinas[0]).select()\n    restricciones=dict(machine = db1.machine.id == ids_maquinas[0])\n    grid = SQLFORM.smartgrid(db1.machine,linked_tables=(\'port_machine\'), constraints = restricciones)\n    \'\'\'\n    return locals()\n\ndef ejecutar():\n    #un diccionario con los nombres de los playbooks segun la opcion elegida\n    playbooks= dict(restart=\'reiniciar.yml\', user=\'usuarios2/linux_users.yml\', copyFile=\'copiarArchivo.yml\')\n     \n    #los ids de las maquinas selccionadas y la opcion elegida\n    ids = request.vars[""ids""]\n    opcion = request.vars[\'opcion\']\n    variables_extra = request.vars[\'variables_extra\']\n    print str(ids)+ ""opcion "" + str(playbooks[opcion]) + str(variables_extra) \n    \n    #se crea el nombre de los archivos de la tarea con primerNombre_segundoNombre\n    indentificador = auth.user_id\n    #nombres = db1(db1.auth_user.id == indentificador).select(db1.auth_user.first_name,      db1.auth_user.last_name)\n\n    ruta_basica = os.path.join(request.folder, \'private/Ansible/\')\n\n    trabajos_usuario = db1(db1.job.user_id == auth.user_id).select()\n    total_trabajos = len(trabajos_usuario)\n\n\n    nombre = str(indentificador) + \'_\' + str(total_trabajos)\n\n    #se construye un diccionario para ejecutar el playbook\n    variables = dict(\n        nombre= ruta_basica + ""resultados/"" + nombre,\n        playbook=ruta_basica + ""Playbooks/"" +  playbooks[opcion],\n        hosts= ruta_basica + \'\' + nombre,\n        ruta_extra=ruta_basica + ""variables/"" + nombre,\n        variables=variables_extra\n    )\n    #se pide al worker o proceso en segundo plano que ejcuta el playbook en maximo 10 minutos\n    tarea = scheduler.queue_task(\n        ""playbook"", pargs=ids, pvars=variables, stop_time = None, timeout = 120 ,repeats = 1\n    )\n    print ""id "", str(tarea.id) #id de la tarea \n    #se inserta un registro de la tarea en la base de datos con la referencia al campo en la tabla scheduler_task,\n    #dicha tabla maneja los estados de una tarea, registra los errores, guarda los argumentos(parametros en un arreglo)\n    # y las variables(parametros en un diccionario)\n    db1.job.insert(name = nombre, user_id = indentificador, task_id = tarea.id)\n\n    #db1.commit()\n    redirect(URL(\'maquinas\', \'mostrar\'))\n\nresponse._vars=response._caller(lista_maquina_grupo)\n'"
b09c1b86c90ccfd5c564fc4ed4d33d8d7bed2b4a,1926822,    //retrieved from http://stackoverflow.com/a/1926822/1455558
ee0b3149c79d0c91d2cb327ca7183e55c17806e1,1653978,"    http://stackoverflow.com/a/1653978/287297"""""""
c171f1533d2c0b128ff3169e9e2cd3ef210255f0,111928,// From https://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format
c38a58c151fab11ce5d3d24ecaa2a3c0e95fef5b,7390426,"// a better ""typeof"" from this post: http://stackoverflow.com/questions/7390426/better-way-to-get-type-of-a-javascript-variable"
1f4dc52be6fb3038ceb2928bb5328d44254949b2,12506897,        // http://stackoverflow.com/questions/12506897/is-safari-on-ios-6-caching-ajax-results
3c0391a85cb348d071ff59aab787852d1802b163,8141423,	// http://stackoverflow.com/questions/4123991/uiscrollview-disable-scrolling-while-rotating-on-iphone-ipad/8141423#8141423 ).
34f0eceba3ae276330ea204817a572f265b30aee,9457832,        http://stackoverflow.com/questions/9457832/python-list-rotation
cc1f607d205b0a8018f67d3334fa2bf0195979c3,3169786,    //http://stackoverflow.com/questions/3169786/clear-text-selection-with-javascript
53468e755a722aa4751cb9446be97a1e676abf49,14744068,<http://stackoverflow.com/questions/14744068/prepend-a-level-to-a-pandas-multiindex>`__
c7d49dca8f8f59dc79bc4ec778903a19858b7989,14355731,    //http://stackoverflow.com/questions/14355731/killing-one-activity-from-another
d612ef83744269b59b6355f0e5552b42c236a322,11197247,    // From http://stackoverflow.com/questions/11197247/javascript-equivalent-of-jquerys-extend-method
dbc891d8c744115d6ce16c45629ffa429c59ccdc,32789027,"     * See <a href=""http://stackoverflow.com/questions/32789027/android-m-camera-intent-permission-bug"">StackOverflow"
a69316689e523bc7b511211220fd4939fe37f1fd,25725005,		 * http://stackoverflow.com/a/25725005/3248003
284dc9544469dcbf86b4da2cdb3fd7c9e45915a7,26603875,		// http://stackoverflow.com/a/26603875
326e8c91493d2e296dafed6ba43a08ed9710eb8c,7224445,     * http://stackoverflow.com/questions/7224445/css3-selection-behaves-differently-in-ff-chrome
cde8de677eb3ee71565d50b728a575aa4e3874c0,388242,* Also see: [The Definitive C++ Book Guide and List](http://stackoverflow.com/q/388242/511601)
49f70a22775f8f4a27a2f19f223d8e93ae1a7079,5926986,                    // visible overflow for firefox https://stackoverflow.com/questions/5926986/why-does-firefox-appear-to-truncate-embedded-svgs
293404b5b1ed63f7bdd76d02691c3b6e75cf7f6e,4836734,    Inspired from: http://stackoverflow.com/a/4836734/592289
fcad8ca77a570d9252d6fd6d26f36ee25554e8f6,24066679,我在stackoverflow上找到了答案：https://stackoverflow.com/questions/24066679/java-aes-string-decrypting-given-final-block-not-properly-padded
25d2ca54d2dd6987fecc6bc9d96d81d4f0db112b,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
c426843693839d32ad5a4364ef02d1ac1bd4e56e,105034,//生成UUID http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
dab61668e0f889881a60dcefc6a4c2aa7b836c4e,8298610,// AND http://stackoverflow.com/questions/8298610/waveform-on-ios
b6633c1af035c12c826b0ce01a25d442581d03ad,6659689,# http://stackoverflow.com/questions/6659689/referring-to-a-file-relative-to-executing-script
5660ba95f846a495f0a584a66bc3b24786d50bd3,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
bf34d4063224259519dd0db798e1bd4bf7da52c0,19443718 11990388,"As stated in [this link](http://stackoverflow.com/questions/11990388/request-headers-bag-is-missing-authorization-header-in-symfony-2) and [this one](http://stackoverflow.com/questions/19443718/symfony-2-3-getrequest-headers-not-showing-authorization-bearer-token/19445020), Apache server will strip any `Authorization header` not in a valid HTTP BASIC AUTH format. "
56e8b6ccb4841f332d9ff4d32f24a14e2ea3cfc4,1220118,"2911930,story,,,417,183,ez77,""Your problem with Vim is that you don't grok vi"",http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118,""Inspired by a comment [1] made today by kaylarose. It points to a most useful list of resources [2].<p><pre><code>  [1] http://news.ycombinator.com/item?id=2910991\n  [2] https://github.com/carlhuda/janus</code></pre>"",1314005798"
15ab58017c06a078e6b5cdb719d2f28af251d05c,32821003,	    // http://stackoverflow.com/questions/32821003/redraw-resize-highcharts-when-printing-website
8d760c870a20340b232e568c8007d4c3057cd5fe,1527820,"				// adapted from http://stackoverflow.com/a/1527820 - check out the answer, it's pretty cool"
ad55b78b67fa17aa84a9eaf6cb7936616aac6a0b,40846742,# Reference: https://stackoverflow.com/a/40846742
2c23e12c13f1f248e33fbc19a8640fac9ab2a248,1091045,        // or link: http://stackoverflow.com/questions/1091045/is-it-good-practice-to-use-java-lang-string-intern
abf078b7dcfaa2e43078ff888c53231544db1d31,3722334,"[{""link_text"":""Google CEO's inner circle: Meet the L Team"",""link"":""http://www.reuters.com/article/2011/12/16/us-google-idUSTRE7BF1T420111216"",""source"":""reuters.com"",""points"":""36"",""comments"":""20"",""submitter"":""taylorbuley"",""date"":1324079105,""id"":""3362735"",""homepage"":false},{""link_text"":""Focus on building 10x teams, not on hiring 10x developers"",""link"":""http://avichal.com/2011/12/16/focus-on-building-10x-teams-not-on-hiring-10x-developers/"",""source"":""avichal.com"",""points"":""228"",""comments"":""44"",""submitter"":""yinyinwu"",""date"":1324077003,""id"":""3362740"",""homepage"":false},{""link_text"":""Basic theory of expander graphs"",""link"":""http://terrytao.wordpress.com/2011/12/02/245b-notes-1-basic-theory-of-expander-graphs/"",""source"":""terrytao.wordpress.com"",""points"":""47"",""comments"":""1"",""submitter"":""llambda"",""date"":1324075803,""id"":""3362631"",""homepage"":false},{""link_text"":""WTF happened to software?"",""link"":""http://doppnet.com/2011/12/wtf-happened-to-software/"",""source"":""doppnet.com"",""points"":""7"",""comments"":""4"",""submitter"":""tnajdek"",""date"":1324075803,""id"":""3362568"",""homepage"":false},{""link_text"":""Motorola Shutting Down 280 Slides"",""link"":""http://280slides.com/"",""source"":""280slides.com"",""points"":""43"",""comments"":""27"",""submitter"":""aaronbrethorst"",""date"":1324075204,""id"":""3362597"",""homepage"":false},{""link_text"":""The Command Line Crash Course (Zed Shaw)"",""link"":""http://learncodethehardway.org/cli/book/"",""source"":""learncodethehardway.org"",""points"":""161"",""comments"":""25"",""submitter"":""drewda"",""date"":1324074003,""id"":""3362578"",""homepage"":false},{""link_text"":""Your Nexus S Could Taste Ice Cream Sandwich As Early As Today"",""link"":""http://techcrunch.com/2011/12/16/your-nexus-s-could-taste-ice-cream-sandwich-as-early-as-today/"",""source"":""techcrunch.com"",""points"":""28"",""comments"":""13"",""submitter"":""aaronbrethorst"",""date"":1324074003,""id"":""3362546"",""homepage"":false},{""link_text"":""Beijing orders new controls on 'Weibo' microblogs"",""link"":""http://www.bbc.co.uk/news/world-asia-china-16212578"",""source"":""bbc.co.uk"",""points"":""7"",""comments"":""2"",""submitter"":""FluidDjango"",""date"":1324073703,""id"":""3362455"",""homepage"":false},{""link_text"":""Zynga IPO Goes SplatVille. What Happened?"",""link"":""http://www.forbes.com/sites/roberthof/2011/12/16/zynga-ipo-goes-splatville-what-happened/?feed=rss_home"",""source"":""forbes.com"",""points"":""18"",""comments"":""4"",""submitter"":""wavephorm"",""date"":1324073403,""id"":""3361744"",""homepage"":false},{""link_text"":""Why Heather Matters"",""link"":""http://uncrunched.com/2011/12/16/why-heather-matters/"",""source"":""uncrunched.com"",""points"":""16"",""comments"":""2"",""submitter"":""taylorbuley"",""date"":1324069803,""id"":""3362307"",""homepage"":false},{""link_text"":""Redis server built in Erlang"",""link"":""http://github.com/inaka/edis"",""source"":""github.com"",""points"":""48"",""comments"":""8"",""submitter"":""rubyrescue"",""date"":1324068603,""id"":""3362057"",""homepage"":false},{""link_text"":""MapReduce for the Masses: Zero to Hadoop in 5 minutes with Common Crawl"",""link"":""http://www.commoncrawl.org/mapreduce-for-the-masses/"",""source"":""commoncrawl.org"",""points"":""102"",""comments"":""25"",""submitter"":""Aloisius"",""date"":1324068003,""id"":""3362163"",""homepage"":false},{""link_text"":""100 Startups Selected to Comprise Third Generation"",""link"":""http://www.startupchile.org/100-startups-selected-to-comprise-third-generation/"",""source"":""startupchile.org"",""points"":""36"",""comments"":""16"",""submitter"":""lorem"",""date"":1324067703,""id"":""3362122"",""homepage"":false},{""link_text"":""Sprint orders all OEMs to strip Carrier IQ from their hardware"",""link"":""http://www.geek.com/articles/mobile/sprint-orders-all-oems-to-strip-carrier-iq-from-their-hardware-20111216/"",""source"":""geek.com"",""points"":""117"",""comments"":""12"",""submitter"":""11031a"",""date"":1324067703,""id"":""3361986"",""homepage"":false},{""link_text"":""SOPA Vote Delayed"",""link"":""http://www.wired.com/threatlevel/2011/12/sopa-vote-delayed/"",""source"":""wired.com"",""points"":""135"",""comments"":""15"",""submitter"":""nextparadigms"",""date"":1324067104,""id"":""3362036"",""homepage"":false},{""link_text"":""Publishing News: \""Hating Amazon is not a strategy\"""",""link"":""http://radar.oreilly.com/2011/12/amazon-consumer-reports-kindle-fire.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+oreilly/radar/atom+(O%27Reilly+Radar)&utm_content=Google+Reader"",""source"":""oreilly.com"",""points"":""6"",""comments"":""1"",""submitter"":""rbanffy"",""date"":1324066803,""id"":""3362023"",""homepage"":false},{""link_text"":""Rep. Zoe Lofgren doing a SOPA-related AMA on Reddit"",""link"":""http://www.reddit.com/r/SOPA/comments/nfhhy/member_of_house_judiciary_committee_ama_on_sopa/"",""source"":""reddit.com"",""points"":""92"",""comments"":""3"",""submitter"":""mcrittenden"",""date"":1324066503,""id"":""3362044"",""homepage"":false},{""link_text"":""SOPA Hearings Delayed, 140,000 Americans watched the hearings"",""link"":""http://gigaom.com/2011/12/16/sopa-interest-by-the-numbers-and-the-end-of-the-hearing/"",""source"":""gigaom.com"",""points"":""261"",""comments"":""55"",""submitter"":""kposehn"",""date"":1324066503,""id"":""3362043"",""homepage"":false},{""link_text"":""Graphiti: An Alternate Frontend for Graphite"",""link"":""http://dev.paperlesspost.com/blog/2011/12/16/introducing-graphiti-an-alternate-frontend-for-graphite/"",""source"":""paperlesspost.com"",""points"":""56"",""comments"":""19"",""submitter"":""vanessa"",""date"":1324066206,""id"":""3362070"",""homepage"":false},{""link_text"":""The highest-rated products on Amazon."",""link"":""http://topazon.com"",""source"":""topazon.com"",""points"":""13"",""comments"":""5"",""submitter"":""GraffitiTim"",""date"":1324066206,""id"":""3361959"",""homepage"":false},{""link_text"":""Learn to speak vim - verbs, nouns, and modifiers"",""link"":""http://yanpritzker.com/2011/12/16/learn-to-speak-vim-verbs-nouns-and-modifiers/"",""source"":""yanpritzker.com"",""points"":""186"",""comments"":""33"",""submitter"":""skwp"",""date"":1324065303,""id"":""3361993"",""homepage"":false},{""link_text"":""Physics discoveries of 2011"",""link"":""http://physicsworld.com/cws/article/news/48126"",""source"":""physicsworld.com"",""points"":""78"",""comments"":""2"",""submitter"":""cldwalker"",""date"":1324065303,""id"":""3361971"",""homepage"":false},{""link_text"":""In 2012, TechCrunch Will Bring The Crunchies, Disrupt, And More Events"",""link"":""http://techcrunch.com/2011/12/16/mark-your-calendars-in-2012-techcrunch-will-bring-the-crunchies-disrupt-and-more-events/"",""source"":""techcrunch.com"",""points"":""3"",""comments"":""0"",""submitter"":""sahillavingia"",""date"":1324065303,""id"":""3361941"",""homepage"":false},{""link_text"":""Stanford Pulls Bid for New York Tech Campus"",""link"":""http://www.betabeat.com/2011/12/16/breaking-stanford-pulls-bid-for-new-york-tech-campus/"",""source"":""betabeat.com"",""points"":""67"",""comments"":""49"",""submitter"":""flahertyiv"",""date"":1324064403,""id"":""3361906"",""homepage"":false},{""link_text"":""Nate Silver's Republican Primary Projections"",""link"":""http://elections.nytimes.com/2012/fivethirtyeight/primaries/iowa"",""source"":""nytimes.com"",""points"":""5"",""comments"":""0"",""submitter"":""tysone"",""date"":1324062903,""id"":""3361756"",""homepage"":false},{""link_text"":""In case SOPA passes: IP addresses of popular websites "",""link"":""http://www.reddit.com/r/SOPA/comments/nf5p1/sopa_emergency_list/"",""source"":""reddit.com"",""points"":""263"",""comments"":""133"",""submitter"":""RyanMcGreal"",""date"":1324062603,""id"":""3361794"",""homepage"":false},{""link_text"":""Why you should sell your iPhone 4 and buy a Galaxy Nexus"",""link"":""http://www.extremetech.com/computing/109405-whys-you-should-sell-your-iphone-4-and-buy-a-galaxy-nexus"",""source"":""extremetech.com"",""points"":""7"",""comments"":""1"",""submitter"":""evo_9"",""date"":1324061104,""id"":""3361593"",""homepage"":false},{""link_text"":""Think Like a VC"",""link"":""http://dbasch.posterous.com/think-like-a-vc"",""source"":""dbasch.posterous.com"",""points"":""44"",""comments"":""5"",""submitter"":""diego"",""date"":1324061104,""id"":""3361563"",""homepage"":false},{""link_text"":""Inside Uber: Math, Money, and Metrics"",""link"":""http://venturebeat.com/2011/12/15/uber/"",""source"":""venturebeat.com"",""points"":""29"",""comments"":""6"",""submitter"":""thoughtpeddler"",""date"":1324059903,""id"":""3361509"",""homepage"":false},{""link_text"":""A Big List of Interesting Programming Books Released in 2011"",""link"":""http://programmingzen.com/2011/12/16/interesting-programming-books-2011/"",""source"":""programmingzen.com"",""points"":""9"",""comments"":""3"",""submitter"":""acangiano"",""date"":1324059303,""id"":""3361421"",""homepage"":false},{""link_text"":""Oberon-2, a hi-performance alternative to C++ (1996)"",""link"":""http://www.modulaware.com/mdltws.htm"",""source"":""modulaware.com"",""points"":""35"",""comments"":""18"",""submitter"":""da02"",""date"":1324059007,""id"":""3361469"",""homepage"":false},{""link_text"":""Google's Android Update Alliance Is Already Dead"",""link"":""http://www.pcmag.com/article2/0,2817,2397729,00.asp"",""source"":""pcmag.com"",""points"":""82"",""comments"":""52"",""submitter"":""adeelarshad82"",""date"":1324058404,""id"":""3361306"",""homepage"":false},{""link_text"":""Why don't they implement Python and Ruby on the web browsers?"",""link"":""http://stackoverflow.com/questions/3722334/why-dont-they-implement-python-and-ruby-on-the-web-browsers"",""source"":""stackoverflow.com"",""points"":""119"",""comments"":""140"",""submitter"":""jsnk"",""date"":1324057803,""id"":""3361322"",""homepage"":false},{""link_text"":""Running Erlang Webmachine on Heroku"",""link"":""http://zianet.dk/blog/2011/12/16/running-erlang-webmachine-on-heroku/"",""source"":""zianet.dk"",""points"":""42"",""comments"":""5"",""submitter"":""davidbalbert"",""date"":1324056903,""id"":""3361282"",""homepage"":false},{""link_text"":""Ask HN: Can I help you be more awesome today? (No strings.)"",""link"":""http://news.ycombinator.com/item?id=3361181"",""points"":""32"",""comments"":""50"",""submitter"":""mikegreenberg"",""date"":1324056603,""id"":""3361181"",""homepage"":false},{""link_text"":""How to stop SOPA: Don't build it."",""link"":""http://greaterdebater.com/blog/gabe/post/27"",""source"":""greaterdebater.com"",""points"":""288"",""comments"":""150"",""submitter"":""imgabe"",""date"":1324056003,""id"":""3361131"",""homepage"":false},{""link_text"":""Writing the Perfect Job Description"",""link"":""http://pith.org/notes/2011/12/15/writing-the-perfect-job-description/"",""source"":""pith.org"",""points"":""13"",""comments"":""1"",""submitter"":""johndbritton"",""date"":1324055703,""id"":""3361260"",""homepage"":false},{""link_text"":""RIM is rotting from within"",""link"":""http://www.itworld.com/mobile-wireless/233771/rim-rotting-within"",""source"":""itworld.com"",""points"":""40"",""comments"":""23"",""submitter"":""junioreven"",""date"":1324055407,""id"":""3361197"",""homepage"":false},{""link_text"":""A 2D Tour of a 3D Printer Factory"",""link"":""http://www.pcmag.com/article2/0,2817,2397625,00.asp"",""source"":""pcmag.com"",""points"":""9"",""comments"":""2"",""submitter"":""adeelarshad82"",""date"":1324054504,""id"":""3361160"",""homepage"":false},{""link_text"":""Tweet temporarily derails SOPA debate"",""link"":""http://www.cbsnews.com/8301-205_162-57343951/sopa-tweet-triggers-political-explosion-delays-vote/"",""source"":""cbsnews.com"",""points"":""107"",""comments"":""84"",""submitter"":""boredguy8"",""date"":1324054203,""id"":""3361158"",""homepage"":false},{""link_text"":""Rake for Rails Developers"",""link"":""http://erik.debill.org/2011/12/04/rake-for-rails-developers"",""source"":""debill.org"",""points"":""4"",""comments"":""0"",""submitter"":""potomak"",""date"":1324054203,""id"":""3361011"",""homepage"":false},{""link_text"":""Believe Me, It's Torture"",""link"":""http://www.vanityfair.com/politics/features/2008/08/hitchens200808"",""source"":""vanityfair.com"",""points"":""16"",""comments"":""2"",""submitter"":""danso"",""date"":1324054203,""id"":""3360908"",""homepage"":false},{""link_text"":""40th anniversary of video games: From Computer Space to Skyrim"",""link"":""http://www.extremetech.com/gaming/109205-40th-anniversary-of-video-games-from-computer-space-to-skyrim"",""source"":""extremetech.com"",""points"":""7"",""comments"":""3"",""submitter"":""evo_9"",""date"":1324052703,""id"":""3361051"",""homepage"":false},{""link_text"":""Vim for developers that use other software, too"",""link"":""http://cream.sourceforge.net/home.html"",""source"":""sourceforge.net"",""points"":""23"",""comments"":""28"",""submitter"":""macco"",""date"":1324052404,""id"":""3361061"",""homepage"":false},{""link_text"":""Megaupload Video Reinstated"",""link"":""http://torrentfreak.com/megaupload-video-reinstated-universal-says-you-cant-touch-us-111216/"",""source"":""torrentfreak.com"",""points"":""63"",""comments"":""19"",""submitter"":""llambda"",""date"":1324052103,""id"":""3360931"",""homepage"":false},{""link_text"":""Animating border-width in CSS3 to reveal content"",""link"":""http://html5advent2011.digitpaint.nl/1/index.html"",""source"":""digitpaint.nl"",""points"":""7"",""comments"":""0"",""submitter"":""flurinegger"",""date"":1324050305,""id"":""3360852"",""homepage"":false},{""link_text"":""Ruby On REST 2: Representers and the DCI Pattern"",""link"":""http://nicksda.apotomo.de/2011/12/ruby-on-rest-2-representers-and-the-dci-pattern/"",""source"":""apotomo.de"",""points"":""27"",""comments"":""9"",""submitter"":""andrzejkrzywda"",""date"":1324050305,""id"":""3360851"",""homepage"":false},{""link_text"":""The Future of Physics"",""link"":""http://www.economist.com/node/21530946"",""source"":""economist.com"",""points"":""9"",""comments"":""0"",""submitter"":""antoviaque"",""date"":1324050305,""id"":""3360850"",""homepage"":false},{""link_text"":""C++11 multithreading tutorial"",""link"":""http://solarianprogrammer.com/2011/12/16/cpp-11-thread-tutorial/"",""source"":""solarianprogrammer.com"",""points"":""53"",""comments"":""15"",""submitter"":""g3orge"",""date"":1324050305,""id"":""3360843"",""homepage"":false},{""link_text"":""Famous Last Words by Bosses I've Had"",""link"":""http://edweissman.com/famous-last-words-by-bosses-ive-had"",""source"":""edweissman.com"",""points"":""305"",""comments"":""177"",""submitter"":""edw519"",""date"":1324049703,""id"":""3360862"",""homepage"":false},{""link_text"":""Counter-trends to Open Data: Problems and Opportunities in Government Data"",""link"":""http://h30565.www3.hp.com/t5/Feature-Articles/Problems-and-Opportunities-in-Government-Data/ba-p/1050"",""source"":""hp.com"",""points"":""13"",""comments"":""0"",""submitter"":""asteroid"",""date"":1324049104,""id"":""3360903"",""homepage"":false},{""link_text"":""Satellite View Of China's First Aircraft Carrier"",""link"":""http://www.google.com/hostednews/ap/slideshow/ALeqM5gsDIXw0lMCiDUT3zN_BgUMvYo0vw?docId=ff45a05f37d542fea0f6854bfff884e1&index=0"",""source"":""google.com"",""points"":""13"",""comments"":""3"",""submitter"":""start123"",""date"":1324048203,""id"":""3360794"",""homepage"":false},{""link_text"":""Show HN: multimethod.js - a Clojure-inspired multimethod library for JavaScript"",""link"":""http://krisjordan.com/multimethod-js"",""source"":""krisjordan.com"",""points"":""48"",""comments"":""10"",""submitter"":""KrisJordan"",""date"":1324047910,""id"":""3360769"",""homepage"":false},{""link_text"":""Pixel Tracking in Node.js"",""link"":""https://github.com/analytics-machine/pixel-tracker"",""source"":""github.com"",""points"":""33"",""comments"":""9"",""submitter"":""funthree"",""date"":1324047303,""id"":""3360759"",""homepage"":false},{""link_text"":""New e-book pricing scheme a surprising assault on the wallet"",""link"":""http://bottomline.msnbc.msn.com/_news/2011/12/15/9469981-new-e-book-pricing-scheme-a-surprising-assault-on-the-wallet"",""source"":""msn.com"",""points"":""55"",""comments"":""60"",""submitter"":""stfu"",""date"":1324046403,""id"":""3360621"",""homepage"":false},{""link_text"":""Julian Assange's clear and present danger"",""link"":""http://www.eurekastreet.com.au/article.aspx?aeid=29449"",""source"":""eurekastreet.com.au"",""points"":""7"",""comments"":""1"",""submitter"":""onoj"",""date"":1324046103,""id"":""3360738"",""homepage"":false},{""link_text"":""“Entrepreneurs get distracted by fundraising, so I just did that part first.”"",""link"":""http://www.betabeat.com/2011/12/16/exclusive-jake-lodwick-raises-1-2-m-to-build-elepath-a-software-studio/"",""source"":""betabeat.com"",""points"":""31"",""comments"":""28"",""submitter"":""frankdenbow"",""date"":1324044303,""id"":""3360682"",""homepage"":false},{""link_text"":""How Super Mario Bros. 3 was made"",""link"":""http://www.chrismcovell.com/secret/weekly/Stars_of_the_Family_Computer.html"",""source"":""chrismcovell.com"",""points"":""284"",""comments"":""29"",""submitter"":""bpierre"",""date"":1324044003,""id"":""3360641"",""homepage"":false},{""link_text"":""The \""Surprise Exam\"" paradox"",""link"":""http://www.thebigquestions.com/2011/12/12/the-surprise-exam-and-more-surprises/"",""source"":""thebigquestions.com"",""points"":""65"",""comments"":""60"",""submitter"":""ColinWright"",""date"":1324043709,""id"":""3360556"",""homepage"":false},{""link_text"":""In-depth look at gaming and the Mozilla Labs Apps Project"",""link"":""http://hacks.mozilla.org/2011/12/gaming-and-the-mozilla-labs-apps-project/"",""source"":""mozilla.org"",""points"":""14"",""comments"":""3"",""submitter"":""robhawkes"",""date"":1324043709,""id"":""3360491"",""homepage"":false},{""link_text"":""Fractals in Clojure: Buddhabrot Fractal"",""link"":""http://nakkaya.com/2009/10/04/fractals-in-clojure-buddhabrot-fractal/"",""source"":""nakkaya.com"",""points"":""49"",""comments"":""8"",""submitter"":""llambda"",""date"":1324043403,""id"":""3360589"",""homepage"":false},{""link_text"":""Stanford Online Classes. Like A Great Movie With A Bad Ending"",""link"":""http://hernan.amiune.com/blog/entry/stanford-online-classes-like-a-great-movie-with-a-bad-ending"",""source"":""amiune.com"",""points"":""16"",""comments"":""11"",""submitter"":""amiune"",""date"":1324041603,""id"":""3360550"",""homepage"":false},{""link_text"":""Why almost all multicellular organisms begin life as a single cell"",""link"":""http://www.sciencedaily.com/releases/2011/12/111215141615.htm"",""source"":""sciencedaily.com"",""points"":""76"",""comments"":""6"",""submitter"":""llambda"",""date"":1324041603,""id"":""3360474"",""homepage"":false},{""link_text"":""Amazing image effects with HTML5 canvas"",""link"":""http://html5advent2011.digitpaint.nl/16/"",""source"":""digitpaint.nl"",""points"":""10"",""comments"":""1"",""submitter"":""flurinegger"",""date"":1324041303,""id"":""3360521"",""homepage"":false},{""link_text"":""How to write efficient unit tests. 5 principles for unit testing."",""link"":""http://www.makinggoodsoftware.com/2011/12/15/how-to-write-efficient-unit-tests-5-principles-for-unit-testing/"",""source"":""makinggoodsoftware.com"",""points"":""10"",""comments"":""0"",""submitter"":""wtfdeveloper"",""date"":1324037403,""id"":""3360432"",""homepage"":false},{""link_text"":""SQL Server App Store Reviews (If SQL Server were an app:)"",""link"":""http://www.brentozar.com/archive/2011/12/sql-server-app-store-reviews/"",""source"":""brentozar.com"",""points"":""85"",""comments"":""17"",""submitter"":""progga"",""date"":1324035903,""id"":""3360367"",""homepage"":false},{""link_text"":""Google Code Jam 2012 Schedule"",""link"":""http://code.google.com/codejam/schedule.html"",""source"":""google.com"",""points"":""19"",""comments"":""3"",""submitter"":""bjin"",""date"":1324035903,""id"":""3360361"",""homepage"":false},{""link_text"":""$1086.29 = cost of starting a software company"",""link"":""http://plumbr.eu/blog/what-does-it-cost-to-start-a-company"",""source"":""plumbr.eu"",""points"":""19"",""comments"":""6"",""submitter"":""rrand"",""date"":1324032003,""id"":""3360008"",""homepage"":false},{""link_text"":""The Checklist (2007)"",""link"":""http://www.newyorker.com/reporting/2007/12/10/071210fa_fact_gawande?currentPage=all"",""source"":""newyorker.com"",""points"":""73"",""comments"":""25"",""submitter"":""bearwithclaws"",""date"":1324031103,""id"":""3360098"",""homepage"":false},{""link_text"":""Widespread iTunes and iCloud Apple ID Outage"",""link"":""http://www.macrumors.com/2011/12/16/widespread-itunes-and-icloud-apple-id-outage/"",""source"":""macrumors.com"",""points"":""6"",""comments"":""2"",""submitter"":""dylanrw"",""date"":1324028103,""id"":""3360139"",""homepage"":false},{""link_text"":""Fly the Airplane"",""link"":""http://dcurt.is/2011/12/15/fly-the-airplane/"",""source"":""dcurt.is"",""points"":""170"",""comments"":""84"",""submitter"":""drewblaisdell"",""date"":1324023903,""id"":""3359964"",""homepage"":false},{""link_text"":""UMG claims \""right to block or remove\"" YouTube videos it doesn't own"",""link"":""http://arstechnica.com/tech-policy/news/2011/12/umg-we-have-the-right-to-block-or-remove-youtube-videos.ars"",""source"":""arstechnica.com"",""points"":""141"",""comments"":""54"",""submitter"":""binarybits"",""date"":1324023604,""id"":""3359864"",""homepage"":false},{""link_text"":""SOPA discusses lyrics of \""The Internet is for Porn\"" (See 1:54:26)"",""link"":""http://www.justin.tv/unearthed365/b/302702510?"",""source"":""justin.tv"",""points"":""8"",""comments"":""2"",""submitter"":""nyellin"",""date"":1324023303,""id"":""3359838"",""homepage"":false},{""link_text"":""Mobile Cloud Platform Race Heats Up Today"",""link"":""http://www.stackmob.com/2011/12/welcome-to-stackmob-open-beta/"",""source"":""stackmob.com"",""points"":""8"",""comments"":""0"",""submitter"":""janaboruta"",""date"":1324018503,""id"":""3359782"",""homepage"":false},{""link_text"":""How big are PHP arrays (and values) really?"",""link"":""http://nikic.github.com/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html"",""source"":""github.com"",""points"":""147"",""comments"":""85"",""submitter"":""there"",""date"":1324013103,""id"":""3359433"",""homepage"":false},{""link_text"":""In Memoriam: Christopher Hitchens, 1949–2011"",""link"":""http://www.vanityfair.com/online/daily/2011/12/In-Memoriam-Christopher-Hitchens-19492011"",""source"":""vanityfair.com"",""points"":""660"",""comments"":""207"",""submitter"":""tieistoowhite"",""date"":1324012507,""id"":""3359498"",""homepage"":false},{""link_text"":""Mozilla's BrowserID (single sign-on for the web) is live"",""link"":""https://github.com/mozilla/browserid/wiki/How-to-Use-BrowserID-on-Your-Site"",""source"":""github.com"",""points"":""165"",""comments"":""88"",""submitter"":""waterside81"",""date"":1324011303,""id"":""3359302"",""homepage"":false},{""link_text"":""Design is Horseshit"",""link"":""http://yongfook.com/post/14295124427/design-is-horseshit"",""source"":""yongfook.com"",""points"":""278"",""comments"":""140"",""submitter"":""thesethings"",""date"":1324009203,""id"":""3359368"",""homepage"":false},{""link_text"":""Batman failed in China"",""link"":""http://edition.cnn.com/2011/12/15/world/asia/china-bale-activist/index.html"",""source"":""cnn.com"",""points"":""5"",""comments"":""0"",""submitter"":""DaNmarner"",""date"":1324008303,""id"":""3359274"",""homepage"":false},{""link_text"":""Google Insights: HN vs. Reddit vs. Digg"",""link"":""http://www.google.com/insights/search/#q=reddit%2C%20hacker%20news%2Cdigg&cmpt=q"",""source"":""google.com"",""points"":""69"",""comments"":""44"",""submitter"":""solipsist"",""date"":1324005903,""id"":""3359245"",""homepage"":false},{""link_text"":""Announcing Rackspace Cloud Monitoring Private Beta"",""link"":""http://www.rackspace.com/cloud/blog/2011/12/15/announcing-rackspace-cloud-monitoring-private-beta/"",""source"":""rackspace.com"",""points"":""35"",""comments"":""8"",""submitter"":""ddispaltro"",""date"":1324005903,""id"":""3359228"",""homepage"":false},{""link_text"":""CheerLights"",""link"":""http://www.cheerlights.com/post/14288332111/call-or-txt-cheerlights-for-the-latest-color"",""source"":""cheerlights.com"",""points"":""9"",""comments"":""4"",""submitter"":""dmor"",""date"":1324005608,""id"":""3359035"",""homepage"":false},{""link_text"":""How to unlock the bootloader of the Galaxy Nexus"",""link"":""http://www.geek.com/articles/mobile/how-to-unlock-the-bootloader-of-the-galaxy-nexus-20111215/"",""source"":""geek.com"",""points"":""3"",""comments"":""0"",""submitter"":""lemieux"",""date"":1324002903,""id"":""3359046"",""homepage"":false},{""link_text"":""Slanger: An open implementation of the Pusher protocol written in Ruby"",""link"":""https://github.com/stevegraham/slanger?hn"",""source"":""github.com"",""points"":""43"",""comments"":""6"",""submitter"":""sjtgraham"",""date"":1324002004,""id"":""3359097"",""homepage"":false},{""link_text"":""Recipes with Backbone.js "",""link"":""http://recipeswithbackbone.com/"",""source"":""recipeswithbackbone.com"",""points"":""91"",""comments"":""45"",""submitter"":""ngauthier"",""date"":1324001705,""id"":""3358748"",""homepage"":false},{""link_text"":""Mexico drug gangs up ante with high-tech tunnels"",""link"":""http://www.reuters.com/article/2011/12/11/us-mexico-drugs-tunnels-idUSTRE7BA0D120111211"",""source"":""reuters.com"",""points"":""9"",""comments"":""1"",""submitter"":""jamesbritt"",""date"":1324000503,""id"":""3358916"",""homepage"":false},{""link_text"":""Horseshit - MG responds to Topolsky's rant"",""link"":""http://parislemon.com/post/14286785030/horseshit"",""source"":""parislemon.com"",""points"":""21"",""comments"":""17"",""submitter"":""realize"",""date"":1323999303,""id"":""3358929"",""homepage"":false},{""link_text"":""An Open Letter From Internet Engineers to the U.S. Congress  "",""link"":""http://www.eff.org/deeplinks/2011/12/internet-inventors-warn-against-sopa-and-pipa"",""source"":""eff.org"",""points"":""271"",""comments"":""44"",""submitter"":""ryeguy_24"",""date"":1323997503,""id"":""3358738"",""homepage"":false},{""link_text"":""Distributed Buddhabrot Fractal in ClojureScript"",""link"":""http://nakkaya.com/2011/12/15/fractals-in-clojure-distributed-buddhabrot-fractal-using-clojurescript/"",""source"":""nakkaya.com"",""points"":""17"",""comments"":""2"",""submitter"":""sritchie"",""date"":1323996303,""id"":""3358762"",""homepage"":false},{""link_text"":""Salesforce Buys Social Performance Platform Rypple"",""link"":""http://techcrunch.com/2011/12/15/salesforce-acquires-social-performance-platform-rypple-will-launch-human-capital-management-unit-successforce/"",""source"":""techcrunch.com"",""points"":""4"",""comments"":""0"",""submitter"":""vrikhter"",""date"":1323996003,""id"":""3358705"",""homepage"":false},{""link_text"":""Grit & Determination"",""link"":""http://blog.adamsmith.cc/2011/12/grit-determination.html"",""source"":""adamsmith.cc"",""points"":""66"",""comments"":""15"",""submitter"":""adamsmith"",""date"":1323995403,""id"":""3358681"",""homepage"":false},{""link_text"":""Galaxy Nexus Available In US"",""link"":""http://www.google.com/nexus/#utm_campaign=us&utm_source=ha-bk&utm_medium=sem&utm_term=%2Bnexus"",""source"":""google.com"",""points"":""52"",""comments"":""44"",""submitter"":""ghempton"",""date"":1323994503,""id"":""3358636"",""homepage"":false},{""link_text"":""An ELance for high-end, professional services."",""link"":""http://gigaom.com/collaboration/expertbids-online-labor-platforms-go-niche/"",""source"":""gigaom.com"",""points"":""7"",""comments"":""2"",""submitter"":""nickcronin"",""date"":1323994203,""id"":""3358511"",""homepage"":false},{""link_text"":""The Command Line Crash Course Controlling Your Computer From The Terminal"",""link"":""http://learncodethehardway.org/cli/book/cli-crash-course.html"",""source"":""learncodethehardway.org"",""points"":""200"",""comments"":""86"",""submitter"":""goodweeds"",""date"":1323993903,""id"":""3358544"",""homepage"":false}]"
6498fad06e2334f8a6eba8704778484d13722186,707426,            // Code from http://stackoverflow.com/a/707426/1356325
9b255b3badc91ccd132772b37f2af00662b30645,11981277,"  ; from http://stackoverflow.com/a/11981277"""
1bea64e4065a9ee66448bf660b60d1d4488946dc,28298540,	/* http://stackoverflow.com/questions/28298540/difference-between-single-bufferedglut-single-and-double-buffered-drawingglut */
9ec76c59601c4b506bb6a3ae52c245c2d0906214,1830844,   * From: http://stackoverflow.com/a/1830844
7f706f33aaeeaf154c1b3a4dbd2c43b7bf916b93,158914,    // Taken from http://stackoverflow.com/questions/158914/cropping-a-uiimage
6a9cf58665eec37408ef1d3f592d1489504d367d,1444562,    // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object
78e57bc0b29f55004e927525b9f48aad62b16fa4,4881951,        // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951
c40a2d25e0b3d3538a55b16ea953b1f0e668da58,12569290,	 *  http://stackoverflow.com/questions/12517000/no-sound-on-ios-6-web-audio-api/12569290#12569290
9d9a3c629ded1a0df1e5a2341ed68e6932933583,19296146,https://stackoverflow.com/questions/19296146/tempfile-temporarydirectory-context-manager-in-python-2-7
04bd539c879752ef964f5a55eda7a1c7f0efa018,10119793,                    //Possibly related to http://stackoverflow.com/questions/10119793/why-does-firefox-react-differently-from-webkit-and-ie-to-click-event-on-selec
20e7fce8d423c3b0f46bc0f06366947a00c90fe9,18750001,  // src: http://stackoverflow.com/a/18750001/2317712
cf5bc64fa7d42e4cee200663d19615077694554c,13533655,  // http://stackoverflow.com/questions/13533655/how-to-listen-to-stderr-in-c-c-for-sending-to-callback
4ba76143d0e9d6f212abcc1a788ff8317e0f97bb,1235179,   * from http://stackoverflow.com/questions/1235179/
a3844e1a745d36e3c656df30c2edba63fc40b7b5,16631213,"            that particular job<footnote><para>See, for instance, his answer in <link xlink:href=""http://stackoverflow.com/questions/16631213/writing-a-recursive-function-xslt-xpath-for-computing-new-values"" xlink:type=""simple"" xlink:show=""new"" xlink:actuate=""onRequest"">question 16631213 at StackOverflow</link>, which uses recursion on element"
c54ca7ca9533a99b0ac074c4b2e8431da9d5654c,2587345, * https://stackoverflow.com/questions/2587345/why-does-date-parse-give-incorrect-results
0772b17ebd6b5028e5b4ebe96f95c3fa132a8f22,33542499,        // From Stack Overflow https://stackoverflow.com/a/33542499
d8f9c29eacd463b1531cce52560112abfc2e68a5,12142066,[source](http://stackoverflow.com/a/12142066/535590)
df305df1a883ac4673739b381603cb045f58d171,32954565,// http://stackoverflow.com/a/32954565/96342
d2a1d5e48854d8830d6ff6bad0369d210aea46e3,4065353,      // the callback (see http://stackoverflow.com/q/4065353 precisely)
954cde7e1805ab4b12cffd7239e293ac8143c706,10029651,"4794282,story,,,2,1,hartleybrody,""Fastest way to iterate through ALL Guids Possible"",http://stackoverflow.com/questions/10029651/fastest-way-in-c-sharp-to-iterate-through-all-guids-possible,,1353081162"
4d270a35c109810c220c2779d8b604f34a579b48,11783114,There's a nice [SO discussion](http://stackoverflow.com/questions/11783114/draw-outer-half-circle-with-gradient-using-core-graphics-in-ios) on this topic. One minor improvement there is that rectangles are replaced with trapezoids. This way shapes won't overlap with corners. 
ed98f09d60ba9d3cb99cc2b659898abe91601744,14967647,    // From http://stackoverflow.com/questions/14967647/ (continues on next line)
20994feb9f34910a911d1710bb27f4c8cec06c0f,2117523,     // http://stackoverflow.com/a/2117523/6224807
06a49b3a14c2b84c25fb21fadd34dc26280144df,6300136,     * Also see: http://stackoverflow.com/questions/6300136/trying-to-implement-googles-fast-button
998715f237e5101a253dbb8591bacad95526af3f,3330919,        // http://stackoverflow.com/a/3330919)
c0b0db2626f1f739ebc673527bb8c5808463a79a,24225816, * http://stackoverflow.com/a/24225816/546491
2db645c7ccc85d72b1ef22f8e9ce56b48ceeb3d7,379906,"<a href=""http://stackoverflow.com/q/379906?rq=1"" title=""Vote score (upvotes - downvotes)"">"
2d10ce6dfd00d8ca85426e78a8d22f2df7692775,28985481,在stackoverflow上又一个很好的解决方法。[hitimes require error when running jekyll serve on windows 8.1](http://stackoverflow.com/questions/28985481/hitimes-require-error-when-running-jekyll-serve-on-windows-8-1) 虽然上面的题主问的是 win 8.1 系统下的情况，但是同样适用于 win7。下面我简单翻译一下错误原因和解决方法。
4f1490df0cb294b09ad8a3ce87633af54bff8297,8455200,			//  http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements
1d5613f827d66bffac96a2feb6bd5923b38c196f,2972986,     * http://stackoverflow.com/q/2972986/194609 and use only if you know what you are doing.
64b9dd241143063a52cc984a82ab86adf72f5345,826509,;http://stackoverflow.com/a/826509
1e550a7267e3bdc95664e2c3c36d68a082573cc2,16459606,	  // is webkit? http://stackoverflow.com/a/16459606/376773
296761d7aa19c7a5e1eb67a630a828234fc98bd9,499126,        * see http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
59e61082b3164900a8799c4d2ea9ddb202eeb9e4,4494404,    From http://stackoverflow.com/questions/4494404/
03cf9fcca1cf97e81c3d63f30e9f8c258d2a61a4,37628,0;143;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;interpreters;interpreter_;0.2;0.0;1.0;1.2;0.0;0
ea7d4a51cf48be6760b56d3130376943d4069756,6736653,        /// http://stackoverflow.com/a/6736653/13932
540072abfe40d258060d7c36e3e2b07d13ca8f17,59895,# http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in
466a8130c3c36983e09a219ba01a289321241b3c,3796927,http://stackoverflow.com/questions/3796927/how-to-git-clone-including-submodules
7b240f8e48c974d216827e10654cf908c6dadac1,202605,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///libphonenumber-js.min.js"",""webpack:///webpack/bootstrap 4a03a0d07ea1d2dac759"",""webpack:///./es6/metadata.js"",""webpack:///./~/core-js/library/modules/_core.js"",""webpack:///./~/core-js/library/modules/_global.js"",""webpack:///./~/core-js/library/modules/_wks.js"",""webpack:///./es6/parse.js"",""webpack:///./~/core-js/library/modules/_descriptors.js"",""webpack:///./~/core-js/library/modules/_hide.js"",""webpack:///./es6/common.js"",""webpack:///./~/core-js/library/modules/_an-object.js"",""webpack:///./~/core-js/library/modules/_export.js"",""webpack:///./~/core-js/library/modules/_has.js"",""webpack:///./~/core-js/library/modules/_iterators.js"",""webpack:///./~/core-js/library/modules/_object-dp.js"",""webpack:///./es6/format.js"",""webpack:///./es6/get number type.js"",""webpack:///./~/babel-runtime/core-js/get-iterator.js"",""webpack:///./~/core-js/library/modules/_defined.js"",""webpack:///./~/core-js/library/modules/_fails.js"",""webpack:///./~/core-js/library/modules/_is-object.js"",""webpack:///./~/core-js/library/modules/_shared-key.js"",""webpack:///./~/core-js/library/modules/_to-integer.js"",""webpack:///./~/core-js/library/modules/_to-iobject.js"",""webpack:///./~/core-js/library/modules/_cof.js"",""webpack:///./~/core-js/library/modules/_dom-create.js"",""webpack:///./~/core-js/library/modules/_enum-bug-keys.js"",""webpack:///./~/core-js/library/modules/_iobject.js"",""webpack:///./~/core-js/library/modules/_iter-define.js"",""webpack:///./~/core-js/library/modules/_object-create.js"",""webpack:///./~/core-js/library/modules/_object-keys.js"",""webpack:///./~/core-js/library/modules/_property-desc.js"",""webpack:///./~/core-js/library/modules/_set-to-string-tag.js"",""webpack:///./~/core-js/library/modules/_shared.js"",""webpack:///./~/core-js/library/modules/_to-object.js"",""webpack:///./~/core-js/library/modules/_uid.js"",""webpack:///./metadata.min.json"",""webpack:///./es6/as you type.js"",""webpack:///./es6/validate.js"",""webpack:///./~/babel-runtime/core-js/object/create.js"",""webpack:///./~/babel-runtime/core-js/object/assign.js"",""webpack:///./~/babel-runtime/core-js/object/define-property.js"",""webpack:///./~/babel-runtime/helpers/classCallCheck.js"",""webpack:///./~/babel-runtime/helpers/createClass.js"",""webpack:///./~/babel-runtime/helpers/extends.js"",""webpack:///./~/core-js/library/fn/get-iterator.js"",""webpack:///./~/core-js/library/fn/object/assign.js"",""webpack:///./~/core-js/library/fn/object/create.js"",""webpack:///./~/core-js/library/fn/object/define-property.js"",""webpack:///./~/core-js/library/modules/_a-function.js"",""webpack:///./~/core-js/library/modules/_add-to-unscopables.js"",""webpack:///./~/core-js/library/modules/_array-includes.js"",""webpack:///./~/core-js/library/modules/_classof.js"",""webpack:///./~/core-js/library/modules/_ctx.js"",""webpack:///./~/core-js/library/modules/_html.js"",""webpack:///./~/core-js/library/modules/_ie8-dom-define.js"",""webpack:///./~/core-js/library/modules/_iter-create.js"",""webpack:///./~/core-js/library/modules/_iter-step.js"",""webpack:///./~/core-js/library/modules/_library.js"",""webpack:///./~/core-js/library/modules/_object-assign.js"",""webpack:///./~/core-js/library/modules/_object-dps.js"",""webpack:///./~/core-js/library/modules/_object-gops.js"",""webpack:///./~/core-js/library/modules/_object-gpo.js"",""webpack:///./~/core-js/library/modules/_object-keys-internal.js"",""webpack:///./~/core-js/library/modules/_object-pie.js"",""webpack:///./~/core-js/library/modules/_redefine.js"",""webpack:///./~/core-js/library/modules/_string-at.js"",""webpack:///./~/core-js/library/modules/_to-index.js"",""webpack:///./~/core-js/library/modules/_to-length.js"",""webpack:///./~/core-js/library/modules/_to-primitive.js"",""webpack:///./~/core-js/library/modules/core.get-iterator-method.js"",""webpack:///./~/core-js/library/modules/core.get-iterator.js"",""webpack:///./~/core-js/library/modules/es6.array.iterator.js"",""webpack:///./~/core-js/library/modules/es6.object.assign.js"",""webpack:///./~/core-js/library/modules/es6.object.create.js"",""webpack:///./~/core-js/library/modules/es6.object.define-property.js"",""webpack:///./~/core-js/library/modules/es6.string.iterator.js"",""webpack:///./~/core-js/library/modules/web.dom.iterable.js"",""webpack:///./index.es6.js""],""names"":[""root"",""factory"",""exports"",""module"",""define"",""amd"",""this"",""modules"",""__webpack_require__"",""moduleId"",""installedModules"",""i"",""l"",""call"",""m"",""c"",""value"",""d"",""name"",""getter"",""o"",""Object"",""defineProperty"",""configurable"",""enumerable"",""get"",""n"",""__esModule"",""object"",""property"",""prototype"",""hasOwnProperty"",""p"",""s"",""get_phone_code"",""country_metadata"",""get_national_number_pattern"",""get_formats"",""get_national_prefix"",""get_national_prefix_formatting_rule"",""get_national_prefix_for_parsing"",""national_prefix_for_parsing"",""get_national_prefix_transform_rule"",""get_national_prefix_is_optional_when_formatting"",""get_leading_digits"",""get_format_pattern"",""format_array"",""get_format_format"",""get_format_leading_digits_patterns"",""get_format_national_prefix_formatting_rule"",""get_format_national_prefix_is_optional_when_formatting"",""get_format_national_prefix_is_mandatory_when_formatting"",""national_prefix_formatting_rule"",""get_format_uses_national_prefix"",""test"",""replace"",""get_format_international_format"",""get_metadata_by_country_phone_code"",""country_phone_code"",""metadata"",""country_code"",""country_phone_code_to_countries"",""countries"",""get_types"",""get_type"",""index"",""undefined"",""get_type_fixed_line"",""get_type_mobile"",""get_type_toll_free"",""get_type_premium_rate"",""get_type_personal_number"",""get_type_voice_mail"",""get_type_uan"",""get_type_pager"",""get_type_voip"",""get_type_shared_cost"",""get_country_phone_code"",""country"",""core"",""version"",""__e"",""global"",""window"",""Math"",""self"",""Function"",""__g"",""store"",""uid"",""Symbol"",""USE_SYMBOL"",""$exports"",""_interopRequireDefault"",""obj"",""default"",""parse"",""first_argument"",""second_argument"",""third_argument"",""_sort_out_arguments"",""sort_out_arguments"",""text"",""options"",""_extends3"",""default_options"",""Error"",""restrict"",""formatted_phone_number"",""extract_formatted_phone_number"",""is_viable_phone_number"",""_parse_phone_number_a"",""parse_phone_number_and_country_phone_code"",""number"",""is_international"",""_metadata"",""normalize"",""national_number"",""strip_national_prefix"",""find_country_code"",""length"",""MAX_LENGTH_FOR_NSN"",""national_number_rule"",""RegExp"",""_common"",""matches_entirely"",""phone"",""replace_characters"",""DIGIT_MAPPINGS"",""replacements"",""replaced"",""_iteratorNormalCompletion"",""_didIteratorError"",""_iteratorError"",""_step"",""_iterator"",""_getIterator3"",""next"",""done"",""character"",""replacement"",""toUpperCase"",""err"",""return"",""MIN_LENGTH_FOR_NSN"",""VALID_PHONE_NUMBER_PATTERN"",""MAX_INPUT_STRING_LENGTH"",""starts_at"",""search"",""PHONE_NUMBER_START_PATTERN"",""slice"",""AFTER_PHONE_NUMBER_END_PATTERN"",""parse_phone_number"",""LEADING_PLUS_CHARS_PATTERN"",""MAX_LENGTH_COUNTRY_CODE"",""national_prefix_pattern"",""national_prefix_matcher"",""exec"",""national_significant_number"",""any_groups_were_captured"",""national_prefix_transform_rule"",""national_phone_number"",""possible_countries"",""_iteratorNormalCompletion2"",""_didIteratorError2"",""_iteratorError2"",""_step2"",""_iterator2"",""_getNumberType2"",""restrict_to_country"",""VALID_PUNCTUATION"",""VALID_DIGITS"",""PLUS_CHARS"",""_getIterator2"",""_extends2"",""_getNumberType"",""DASHES"",""SLASHES"",""DOTS"",""WHITESPACE"",""BRACKETS"",""TILDES"",""MIN_LENGTH_PHONE_NUMBER_PATTERN"",""VALID_PHONE_NUMBER"",""0"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""０"",""１"",""２"",""３"",""４"",""５"",""６"",""７"",""８"",""９"",""٠"",""١"",""٢"",""٣"",""٤"",""٥"",""٦"",""٧"",""٨"",""٩"",""۰"",""۱"",""۲"",""۳"",""۴"",""۵"",""۶"",""۷"",""۸"",""۹"",""a"",""dP"",""createDesc"",""key"",""f"",""arguments"",""regular_expression"",""matched_groups"",""match"",""isObject"",""it"",""TypeError"",""ctx"",""hide"",""PROTOTYPE"",""$export"",""type"",""source"",""own"",""out"",""IS_FORCED"",""F"",""IS_GLOBAL"",""G"",""IS_STATIC"",""S"",""IS_PROTO"",""P"",""IS_BIND"",""B"",""IS_WRAP"",""W"",""expProto"",""target"",""C"",""b"",""apply"",""virtual"",""R"",""U"",""anObject"",""IE8_DOM_DEFINE"",""toPrimitive"",""O"",""Attributes"",""e"",""format"",""fourth_argument"",""input"",""format_type"",""_parse"",""format_national_number"",""format_national_number_using_format"",""international"",""enforce_national_prefix"",""format_pattern_matcher"",""national_prefix_may_be_omitted"",""FIRST_GROUP_PATTERN"",""formatted_number"",""local_to_international_style"",""format_as"",""choose_format_for_number"",""available_formats"",""_format"",""last_leading_digits_pattern"",""local"",""trim"",""get_number_type"",""is_of_type"",""_parse2"",""shared"",""ceil"",""floor"",""isNaN"",""IObject"",""defined"",""toString"",""document"",""is"",""createElement"",""split"",""cof"",""propertyIsEnumerable"",""LIBRARY"",""redefine"",""has"",""Iterators"",""$iterCreate"",""setToStringTag"",""getPrototypeOf"",""ITERATOR"",""BUGGY"",""keys"",""FF_ITERATOR"",""KEYS"",""VALUES"",""returnThis"",""Base"",""NAME"",""Constructor"",""DEFAULT"",""IS_SET"",""FORCED"",""methods"",""IteratorPrototype"",""getMethod"",""kind"",""proto"",""TAG"",""DEF_VALUES"",""VALUES_BUG"",""$native"",""$default"",""$entries"",""$anyNative"",""entries"",""values"",""dPs"",""enumBugKeys"",""IE_PROTO"",""Empty"",""createDict"",""iframeDocument"",""iframe"",""lt"",""gt"",""style"",""display"",""appendChild"",""src"",""contentWindow"",""open"",""write"",""close"",""create"",""Properties"",""result"",""$keys"",""bitmap"",""writable"",""def"",""tag"",""stat"",""SHARED"",""id"",""px"",""random"",""concat"",""20"",""27"",""30"",""31"",""32"",""33"",""34"",""36"",""39"",""40"",""41"",""43"",""44"",""45"",""46"",""47"",""48"",""49"",""51"",""52"",""53"",""54"",""55"",""56"",""57"",""58"",""60"",""61"",""62"",""63"",""64"",""65"",""66"",""81"",""82"",""84"",""86"",""90"",""91"",""92"",""93"",""94"",""95"",""98"",""211"",""212"",""213"",""216"",""218"",""220"",""221"",""222"",""223"",""224"",""225"",""226"",""227"",""228"",""229"",""230"",""231"",""232"",""233"",""234"",""235"",""236"",""237"",""238"",""239"",""240"",""241"",""242"",""243"",""244"",""245"",""246"",""247"",""248"",""249"",""250"",""251"",""252"",""253"",""254"",""255"",""256"",""257"",""258"",""260"",""261"",""262"",""263"",""264"",""265"",""266"",""267"",""268"",""269"",""290"",""291"",""297"",""298"",""299"",""350"",""351"",""352"",""353"",""354"",""355"",""356"",""357"",""358"",""359"",""370"",""371"",""372"",""373"",""374"",""375"",""376"",""377"",""378"",""380"",""381"",""382"",""385"",""386"",""387"",""389"",""420"",""421"",""423"",""500"",""501"",""502"",""503"",""504"",""505"",""506"",""507"",""508"",""509"",""590"",""591"",""592"",""593"",""594"",""595"",""596"",""597"",""598"",""599"",""670"",""672"",""673"",""674"",""675"",""676"",""677"",""678"",""679"",""680"",""681"",""682"",""683"",""685"",""686"",""687"",""688"",""689"",""690"",""691"",""692"",""800"",""808"",""850"",""852"",""853"",""855"",""856"",""870"",""878"",""880"",""881"",""882"",""883"",""886"",""888"",""960"",""961"",""962"",""963"",""964"",""965"",""966"",""967"",""968"",""970"",""971"",""972"",""973"",""974"",""975"",""976"",""977"",""979"",""992"",""993"",""994"",""995"",""996"",""998"",""AC"",""AD"",""AE"",""AF"",""AG"",""AI"",""AL"",""AM"",""AO"",""AR"",""AS"",""AT"",""AU"",""AW"",""AX"",""AZ"",""BA"",""BB"",""BD"",""BE"",""BF"",""BG"",""BH"",""BI"",""BJ"",""BL"",""BM"",""BN"",""BO"",""BQ"",""BR"",""BS"",""BT"",""BW"",""BY"",""BZ"",""CA"",""CC"",""CD"",""CF"",""CG"",""CH"",""CI"",""CK"",""CL"",""CM"",""CN"",""CO"",""CR"",""CU"",""CV"",""CW"",""CX"",""CY"",""CZ"",""DE"",""DJ"",""DK"",""DM"",""DO"",""DZ"",""EC"",""EE"",""EG"",""EH"",""ER"",""ES"",""ET"",""FI"",""FJ"",""FK"",""FM"",""FO"",""FR"",""GA"",""GB"",""GD"",""GE"",""GF"",""GG"",""GH"",""GI"",""GL"",""GM"",""GN"",""GP"",""GQ"",""GR"",""GT"",""GU"",""GW"",""GY"",""HK"",""HN"",""HR"",""HT"",""HU"",""ID"",""IE"",""IL"",""IM"",""IN"",""IO"",""IQ"",""IR"",""IS"",""IT"",""JE"",""JM"",""JO"",""JP"",""KE"",""KG"",""KH"",""KI"",""KM"",""KN"",""KP"",""KR"",""KW"",""KY"",""KZ"",""LA"",""LB"",""LC"",""LI"",""LK"",""LR"",""LS"",""LT"",""LU"",""LV"",""LY"",""MA"",""MC"",""MD"",""ME"",""MF"",""MG"",""MH"",""MK"",""ML"",""MM"",""MN"",""MO"",""MP"",""MQ"",""MR"",""MS"",""MT"",""MU"",""MV"",""MW"",""MX"",""MY"",""MZ"",""NA"",""NC"",""NE"",""NF"",""NG"",""NI"",""NL"",""NO"",""NP"",""NR"",""NU"",""NZ"",""OM"",""PA"",""PE"",""PF"",""PG"",""PH"",""PK"",""PL"",""PM"",""PR"",""PS"",""PT"",""PW"",""PY"",""QA"",""RE"",""RO"",""RS"",""RU"",""RW"",""SA"",""SB"",""SC"",""SD"",""SE"",""SG"",""SH"",""SI"",""SJ"",""SK"",""SL"",""SM"",""SN"",""SO"",""SR"",""SS"",""ST"",""SV"",""SX"",""SY"",""SZ"",""TA"",""TC"",""TD"",""TG"",""TH"",""TJ"",""TK"",""TL"",""TM"",""TN"",""TO"",""TR"",""TT"",""TV"",""TW"",""TZ"",""UA"",""UG"",""US"",""UY"",""UZ"",""VA"",""VC"",""VE"",""VG"",""VI"",""VN"",""VU"",""WF"",""WS"",""YE"",""YT"",""ZA"",""ZM"",""ZW"",""001"",""close_dangling_braces"",""template"",""cut_before"",""retained_template"",""opening_braces"",""count_occurences"",""closing_braces"",""dangling_braces"",""symbol"",""string"",""count"",""_iteratorNormalCompletion4"",""_didIteratorError4"",""_iteratorError4"",""_step4"",""_iterator4"",""repeat"",""times"",""DIGIT_PLACEHOLDER"",""_classCallCheck2"",""_classCallCheck3"",""_createClass2"",""_createClass3"",""DUMMY_DIGIT"",""DUMMY_DIGIT_MATCHER"",""LONGEST_NATIONAL_PHONE_NUMBER_LENGTH"",""LONGEST_DUMMY_PHONE_NUMBER"",""DIGIT_PLACEHOLDER_MATCHER"",""DIGIT_PLACEHOLDER_MATCHER_GLOBAL"",""CHARACTER_CLASS_PATTERN"",""STANDALONE_DIGIT_PATTERN"",""ELIGIBLE_FORMAT_PATTERN"",""MIN_LEADING_DIGITS_LENGTH"",""VALID_INCOMPLETE_PHONE_NUMBER"",""VALID_INCOMPLETE_PHONE_NUMBER_PATTERN"",""as_you_type"",""default_country"",""reset"",""extracted_number"",""indexOf"",""process_input"",""current_output"",""parsed_input"",""reset_countriness"",""determine_the_country"",""extract_country_phone_code"",""initialize_phone_number_formats_for_this_country_phone_code"",""reset_format"",""previous_national_prefix"",""national_prefix"",""extract_national_prefix"",""matching_formats"",""match_formats_by_leading_digits"",""formatted_national_phone_number"",""format_national_phone_number"",""full_phone_number"",""next_digits"",""national_number_formatted_with_previous_format"",""chosen_format"",""format_next_national_number_digits"",""attempt_to_format_complete_phone_number"",""choose_another_format"",""reformat_national_number"",""reset_country"",""phone_code"",""partially_populated_template"",""last_match_position"",""filter"",""leading_digits"",""index_of_leading_digits_pattern"",""get_relevant_phone_number_formats"",""leading_digits_pattern_count"",""leading_digits_pattern_index"",""min"",""leading_digits_pattern"",""matcher"",""validate_format"",""create_formatting_template"",""full_number"",""formatted_national_number"",""number_pattern"",""dummy_phone_number_matching_format_pattern"",""number_format"",""digits"",""_iteratorNormalCompletion3"",""_didIteratorError3"",""_iteratorError3"",""_step3"",""_iterator3"",""digit"",""is_valid"",""instance"",""_defineProperty"",""_defineProperty2"",""defineProperties"",""props"",""descriptor"",""protoProps"",""staticProps"",""_assign"",""_assign2"",""assign"",""$Object"",""D"",""desc"",""toIObject"",""toLength"",""toIndex"",""IS_INCLUDES"",""$this"",""el"",""fromIndex"",""ARG"",""tryGet"",""T"",""callee"",""aFunction"",""fn"",""that"",""documentElement"",""getKeys"",""gOPS"",""pIE"",""toObject"",""$assign"",""A"",""K"",""forEach"",""k"",""join"",""aLen"",""getSymbols"",""isEnum"",""j"",""getOwnPropertySymbols"",""ObjectProto"",""constructor"",""arrayIndexOf"",""names"",""push"",""toInteger"",""TO_STRING"",""pos"",""String"",""charCodeAt"",""charAt"",""max"",""val"",""valueOf"",""classof"",""getIteratorMethod"",""getIterator"",""iterFn"",""addToUnscopables"",""step"",""Array"",""iterated"",""_t"",""_i"",""_k"",""Arguments"",""$at"",""point"",""TO_STRING_TAG"",""collections"",""Collection"",""parameters"",""_metadataMin2"",""_format2"",""getNumberType"",""is_valid_number"",""_validate2"",""isValidNumber"",""_asYouType2"",""asYouType"",""getPhoneCode"",""getPhoneCodeCustom"",""asYouTypeCustom"",""getNumberTypeCustom"",""isValidNumberCustom"",""formatCustom"",""parseCustom"",""_create"",""_create2"",""_validate"",""_asYouType"",""_metadataMin""],""mappings"":""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MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,KACA,KACA,KACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,KACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,KACA,KACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,IACA,MAEAC,KACA,MAEAC,KACA,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,KACA,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,OAEAC,KACA,OAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,OAEAC,KACA,OAEAC,KACA,MAEAC,KACA,OAEAC,KACA,OAEAC,KACA,OAEAC,KACA,MAEAC,KACA,OAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,OAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,MAEAC,KACA,OAGAzgB,WACA0gB,IACA,MACA,4BAEAC,IACA,MACA,8BAGA,mBACA,SAEA,oBAIA,mBACA,SAEA,MACA,aAIA,2BACA,YAEA,UAKAC,IACA,MACA,+BAGA,6BACA,YAEA,mBAIA,yBACA,YAEA,OAIA,yBACA,YAEA,UAEA,OAGA,qBACA,SAEA,QAEA,OAGA,IACA,OAEAC,IACA,KACA,gBAGA,6BACA,YAEA,WAIA,IACA,OAEAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,2CAGA,sBACA,YAEA,YAIA,yBACA,YAEA,OAIA,2BACA,YAEA,wBAIA,qBACA,SAEA,+BAIA,IACA,OAEAC,IACA,MACA,gBAGA,mBACA,SAEA,UAIA,mBACA,SAEA,wBAEA,QAGA,mBACA,SAEA,UAIA,2BACA,YAEA,QAEA,SAGA,IACA,SAEAC,IACA,MACA,eAGA,2BACA,cAIAC,IACA,KACA,mCAGA,+BACA,YAEA,UAIA,0BACA,eAEA,OAEA,KACA,KACA,gBAGA,8BACA,eAEA,wBACA,iGACA,+LACA,+MAEA,KACA,KACA,gBAGA,8BACA,eAEA,SAEA,KACA,KACA,gBAGA,uBACA,YAEA,KAEA,KACA,SAGA,2BACA,YAEA,4FACA,0LACA,0MAEA,KACA,SAGA,2BACA,YAEA,QAEA,KACA,SAGA,IACA,MACA,2jBACA,OAEAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,KACA,mBAGA,cACA,MAEA,OAEA,OAGA,iBACA,SAEA,OAIA,mBACA,SAEA,YAIA,2BACA,YAEA,YAIA,2BACA,YAEA,YAIA,sBACA,SAEA,wDAIA,qBACA,SAEA,+FAIA,IACA,OAEAC,IACA,KACA,4BAGA,2BACA,YAEA,UAEA,UAGA,2BACA,YAEA,WAEA,QAGA,iBACA,SAEA,MAEA,QAGA,yBACA,YAEA,MAEA,QAGA,iCACA,YAEA,gBACA,kBAEA,OAGA,iBACA,SAEA,MACA,QAEA,OAGA,kBACA,SAEA,UAEA,OAGA,qBACA,SAEA,WAEA,OAGA,uBACA,YAEA,WAEA,OAGA,IACA,KACA,KACA,KACA,KACA,MAEA,kFACA,6FACA,yBACA,+BACA,YACA,KACA,KACA,aACA,YACA,qCAGAC,IACA,MACA,iBAGA,mBACA,WAIAC,IACA,MACA,uEAGA,qBACA,SAEA,qBAIA,cACA,MAEA,OAEA,OAGA,qBACA,SAEA,yCAIA,kBACA,SAEA,oCAIA,0BACA,YAEA,QAIA,IACA,MACA,KACA,KACA,KACA,MAEA,kBACA,wCACA,cACA,iBACA,KACA,KACA,8PAGAC,IACA,MACA,gBAGA,mCACA,eAEA,qCAIA,mCACA,eAEA,SAEA,QAGA,mCACA,eAEA,KAEA,QAGA,IACA,SAEAC,IACA,MACA,kBAGA,2BACA,YAEA,WAIA,2BACA,YAEA,oBAIA,mCACA,eAEA,YAIA,IACA,OAEAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,0CAGA,gBACA,SAEA,OAIA,qBACA,SAEA,aAIA,qBACA,SAEA,4JAIA,qBACA,SAEA,mBAIA,IACA,OAEAC,IACA,KACA,kBAGA,mCACA,eAEA,YAIA,gCACA,eAEA,uBAIA,mCACA,eAEA,qCAIA,2BACA,YAEA,eAIA,IACA,OAEAC,IACA,MACA,iBAGA,mCACA,iBAIAC,IACA,MACA,kCAGA,2BACA,eAEA,OAIA,wBACA,YAEA,OAIA,mBACA,SAEA,uBAIA,2BACA,YAEA,uBAIA,2BACA,YAEA,YAIA,2BACA,YAEA,SAIA,6BACA,YAEA,yCAIA,6BACA,YAEA,qBAIA,IACA,OAEAC,IACA,MACA,kBAGA,mBACA,WAIAC,IACA,MACA,gBAGA,mCACA,iBAIAC,IACA,MACA,yBAGA,mCACA,iBAIAC,IACA,MACA,eAGA,2BACA,aAGA,IACA,KACA,KACA,KACA,KACA,MAEA,+BACA,iCAGAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,kBAGA,0BACA,WAIAC,IACA,MACA,kBAGA,kBACA,SAEA,WAIA,eACA,MAEA,UAIA,IACA,KACA,YAEAC,IACA,MACA,gBAGA,mBACA,SAEA,YAIA,sBACA,YAEA,OAIA,KACA,KACA,KACA,KACA,KACA,MAEA,uDACA,gFAGAC,IACA,KACA,oEAGA,2BACA,YAEA,cAEA,SAGA,2BACA,YAEA,wDAEA,SAGA,mBACA,SAEA,wBAIA,+BACA,YAEA,YAEA,QAGA,IACA,KACA,uDACA,MAEAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,kBAGA,mCACA,eAEA,UAIA,0BACA,YAEA,oBAKAC,IACA,MACA,mBAGA,mBACA,SAEA,WAIA,yBACA,YAEA,OAIA,eACA,SAEA,QAKAC,IACA,MACA,0CAGA,mCACA,eAEA,yBACA,4CAEA,UAGA,mCACA,eAEA,mDACA,iFAEA,UAGA,2BACA,YAEA,oDACA,yFAEA,UAGA,+BACA,YAEA,WAEA,SAGA,0BACA,YAEA,MAEA,SAGA,gBACA,SAEA,OAEA,SAGA,0BACA,YAEA,OAEA,SAGA,IACA,KACA,QAEAC,IACA,MACA,yBAGA,mBACA,SAEA,WAIA,2BACA,eAEA,QAKAC,IACA,IACA,wBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,MAEA,wLACA,8KACA,iDACA,iBACA,yCAGAC,IACA,KACA,mBAGA,2BACA,YAEA,UAEA,UAGA,2BACA,YAEA,WAEA,QAGA,iBACA,SAEA,MAEA,QAGA,yBACA,YAEA,MAEA,QAGA,iCACA,YAEA,gBACA,kBAEA,OAGA,iBACA,SAEA,MACA,QAEA,OAGA,kBACA,SAEA,UAEA,OAGA,qBACA,SAEA,WAEA,OAGA,uBACA,YAEA,WAEA,OAGA,IACA,KACA,KACA,KACA,KACA,MAEA,cACA,uGACA,yBACA,kBACA,YACA,KACA,KACA,KACA,YACA,0BAGAC,IACA,MACA,qCAGA,2BACA,YAEA,QAIA,+BACA,YAEA,iBAIA,2BACA,YAEA,QAIA,mBACA,SAEA,WAIA,IACA,OAEAC,IACA,MACA,gBAGA,mCACA,iBAIAC,IACA,MACA,gBAGA,mCACA,eAEA,SAIA,2BACA,YAEA,UAIA,wBACA,YAEA,UAKAC,IACA,KACA,0BAGA,qCACA,eAEA,iBAIA,+BACA,YAEA,eAIA,2CACA,kBAEA,SAIA,IACA,OAEAC,IACA,MACA,iBAGA,mCACA,iBAIAC,IACA,MACA,gBAGA,mBACA,WAIAC,IACA,KACA,8BAGA,wBACA,YAEA,SAEA,SAGA,2BACA,YAEA,0BAEA,SAGA,sBACA,YAEA,OAIA,uBACA,YAEA,QAIA,6BACA,YAEA,QAEA,OAGA,gCACA,eAEA,MAEA,OAGA,yBACA,YAEA,KAEA,OAGA,mBACA,SAEA,OAEA,SAGA,IACA,MACA,uDAEAC,IACA,MACA,mBAGA,yCACA,kBAEA,UAIA,mCACA,eAEA,aAIA,wBACA,YAEA,SAKAC,IACA,KACA,iDAGA,qBACA,SAEA,YAEA,MACA,SAGA,2BACA,YAEA,YAIA,qBACA,SAEA,kBACA,0BACA,4BAEA,QAGA,qBACA,SAEA,QACA,kBACA,2BAEA,QAGA,yBACA,YAEA,MAEA,MACA,SAGA,4BACA,YAEA,kBACA,kBACA,0CAEA,MACA,SAGA,2BACA,YAEA,uTAEA,MACA,SAGA,2BACA,YAEA,gHAEA,MACA,SAGA,2BACA,YAEA,MACA,QAEA,MACA,SAGA,2BACA,YAEA,cAIA,0BACA,YAEA,MACA,OACA,WAIA,qBACA,SAEA,SAIA,IACA,KACA;AAEAC,IACA,KACA,kCAGA,gBACA,SAEA,kCACA,0CAEA,SAGA,mBACA,SAEA,OAIA,sBACA,YAEA,gBACA,6BAEA,MACA,KACA,aAGA,IACA,KACA,yBAEAC,IACA,MACA,mBAGA,mBACA,SAEA,mBAIA,2BACA,YAEA,WAIA,KACA,KACA,uCAEAC,IACA,KACA,mBAGA,kBACA,SAEA,OAIA,qBACA,SAEA,WAIA,gBACA,SAEA,KAEA,QAGA,IACA,SAEAC,IACA,MACA,gBAGA,2BACA,cAIAC,IACA,MACA,kBAGA,mBACA,SAEA,YAIA,sBACA,YAEA,OAIA,KACA,KACA,KACA,KACA,KACA,MAEA,qEACA,wDACA,KACA,KACA,KACA,KACA,KACA,YACA,KACA,kBAGAC,IACA,KACA,mBAGA,2BACA,YAEA,UAEA,UAGA,2BACA,YAEA,WAEA,QAGA,iBACA,SAEA,MAEA,QAGA,yBACA,YAEA,MAEA,QAGA,iCACA,YAEA,gBACA,kBAEA,OAGA,iBACA,SAEA,MACA,QAEA,OAGA,kBACA,SAEA,UAEA,OAGA,qBACA,SAEA,WAEA,OAGA,uBACA,YAEA,WAEA,OAGA,IACA,KACA,KACA,KACA,KACA,MAEA,cACA,uGACA,yBACA,kBACA,YACA,KACA,KACA,KACA,YACA,0BAGAC,IACA,MACA,kBAGA,mBACA,WAIAC,IACA,MACA,2BAGA,gCACA,YAEA,oBAIA,kCACA,eAEA,QAIA,iCACA,eAEA,YAKAC,IACA,KACA,0GAGA,sBACA,SAEA,WAIA,qBACA,SAEA,cAIA,oBACA,SAEA,QAIA,sBACA,SAEA,oBAIA,sBACA,SAEA,gFAIA,sBACA,SAEA,sFACA,+cAIA,uBACA,SAEA,OAIA,mBACA,SAEA,SAIA,2BACA,YAEA,iBACA,0BAIA,uBACA,SAEA,SAIA,qBACA,SAEA,MACA,OACA,WAIA,qBACA,SAEA,YAIA,kBACA,SAEA,eAIA,wBACA,YAEA,SAIA,gBACA,SAEA,SAIA,+BACA,YAEA,gBAIA,+BACA,YAEA,aAIA,+BACA,YAEA,mBAIA,IACA,OAEAC,IACA,MACA,eAGA,mCACA,iBAIAC,IACA,KACA,gBAGA,mCACA,iBAIAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,IACA,gBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,WAEAC,IACA,MACA,6BAGA,qCACA,eAEA,WAIA,wCACA,eAEA,WAIA,iCACA,eAEA,OAIA,IACA,OAEAC,IACA,MACA,mCAGA,wBACA,YAEA,oBAEA,KACA,KACA,aAGA,2BACA,YAEA,KAEA,QAGA,2BACA,YAEA,KAEA,OAGA,IACA,SAEAC,IACA,MACA,wCAGA,yBACA,SAEA,gDACA,+EAIA,uBACA,YAEA,QAIA,yBACA,YAEA,MACA,UAIA,0BACA,SAEA,qBACA,8BAKAC,IACA,KACA,gDAGA,kBACA,SAEA,UAIA,2BACA,YAEA,mBAIA,qBACA,SAEA,2BAIA,IACA,OAEAC,IACA,MACA,gBAGA,wBACA,SAEA,+BAIA,uBACA,SAEA,8BACA,wDAIA,oBACA,SAEA,aACA,oBAIA,sCACA,eAEA,uBAIA,kBACA,SAEA,qBAIA,IACA,MACA,KACA,KACA,KACA,WAEAC,IACA,MACA,gBAGA,wBACA,aAGA,IACA,OAEAC,IACA,KACA,gBAGA,2BACA,YAEA,YAIA,wCACA,eAEA,sBAKAC,IACA,MACA,iBAGA,8BACA,aAGA,IACA,OAEAC,IACA,MACA,wEAGA,qBACA,SAEA,qBAIA,cACA,MAEA,OAEA,OAGA,qBACA,SAEA,yCAIA,kBACA,SAEA,oCAIA,0BACA,YAEA,QAIA,IACA,MACA,KACA,KACA,KACA,MAEA,6CACA,wCACA,cACA,iBACA,KACA,KACA,8PAGAC,IACA,MACA,0BAGA,mBACA,SAEA,YAIA,2BACA,YAEA,QAKAC,IACA,MACA,eAEAC,IACA,MACA,eAGA,mBACA,WAIAC,IACA,MACA,gBAGA,WACA,OAGA,KACA,KACA,uBAEAC,IACA,KACA,gBAGA,2CACA,kBAEA,YAIA,oCACA,eAEA,KAEA,SAGA,IACA,OAEAC,IACA,MACA,aAGA,gCACA,eAEA,SAEA,QAGA,mCACA,eAEA,QAKAC,IACA,KACA,cAGA,oBACA,SAEA,mBACA,oBACA,wBAIA,2BACA,YAEA,mBAIA,2BACA,YAEA,0BAIA,qBACA,SAEA,yBACA,kCACA,uDAIA,sBACA,SAEA,OAIA,gBACA,SAEA,MACA,OACA,QACA,SACA,aAIA,kBACA,YAEA,MACA,OACA,QACA,YAIA,4BACA,YAEA,wBAIA,0BACA,YAEA,QAIA,mBACA,SAEA,YAIA,IACA,MACA,KACA,KACA,KACA,MAEA,02CACA,wPACA,6CACA,yCACA,WACA,KACA,uBACA,oGACA,WACA,2CAGAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,kBAGA,mCACA,eAEA,SAEA,QAGA,2BACA,YAEA,KAEA,QAGA,mCACA,eAEA,KAEA,OAGA,KAEAC,IACA,MACA,eAGA,mCACA,gBAGA,IACA,OAEAC,IACA,KACA,qBAGA,oBACA,SAEA,mBACA,oBACA,wBAIA,2BACA,YAEA,mBAIA,2BACA,YAEA,0BAIA,qBACA,SAEA,yBACA,kCACA,uDAIA,sBACA,SAEA,OAIA,gBACA,SAEA,MACA,OACA,QACA,SACA,aAIA,kBACA,YAEA,MACA,OACA,QACA,YAIA,4BACA,YAEA,wBAIA,0BACA,YAEA,QAIA,mBACA,SAEA,YAIA,IACA,MACA,KACA,KACA,KACA,MAEA,mBACA,mCACA,6CACA,wCACA,WACA,KACA,uBACA,+DACA,WACA,2CAGAC,IACA,MACA,wBAGA,2BACA,YAEA,WAIA,mBACA,SAEA,OAIA,IACA,OAEAC,IACA,MACA,iBAGA,mBACA,SAEA,QAKAC,IACA,MACA,kBAGA,2BACA,cAIAC,IACA,MACA,gBAGA,mBACA,WAIAC,IACA,MACA,kBAGA,mCACA,eAEA,OAIA,mCACA,eAEA,WAKAC,IACA,MACA,eAGA,2BACA,aAGA,IACA,MACA,KACA,KACA,KACA,MAEA,oFACA,iCAGAC,IACA,MACA,kBAGA,2BACA,YAEA,WAIA,mBACA,SAEA,WAKAC,IACA,KACA,iBAGA,4BACA,YAEA,UAIA,2BACA,YAEA,mBAIA,oBACA,SAEA,mBAKAC,IACA,MACA,4BAGA,mBACA,SAEA,WAIA,2BACA,YAEA,QAKAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,qCAGA,2BACA,YAEA,eAIA,mBACA,SAEA,SAKAC,IACA,MACA,mBAGA,mBACA,WAIAC,IACA,MACA,uCAGA,mBACA,SAEA,kCAIA,wBACA,YAEA,SAIA,gCACA,eAEA,SAIA,kBACA,SAEA,UAKAC,IACA,MACA,kBAGA,mBACA,WAIAC,IACA,MACA,+BAGA,sBACA,YAEA,OAIA,+BACA,YAEA,WAIA,2BACA,YAEA,OAIA,4BACA,YAEA,WAIA,8BACA,YAEA,UAIA,6BACA,YAEA,OAIA,2BACA,YAEA,OAIA,IACA,OAEAC,IACA,MACA,kBAGA,2BACA,cAIAC,IACA,KACA,kBAGA,sBACA,YAEA,OAIA,6BACA,YAEA,WAIA,KACA,QAEAC,IACA,KACA,mCAGA,qBACA,SAEA,gBAEA,UAGA,qBACA,SAEA,8BAEA,UAGA,8BACA,YAEA,eAIA,8BACA,YAEA,eAIA,mBACA,YAEA,MAEA,OAGA,kBACA,SAEA,QAIA,kBACA,SAEA,SAIA,wBACA,YAEA,SAIA,+BACA,eAEA,YAIA,IACA,OAEAC,IACA,MACA,oBAGA,wBACA,YAEA,OAIA,mBACA,SAEA,oCAIA,mBACA,SAEA,mBAIA,uBACA,YAEA,QAIA,wBACA,YAEA,QAIA,6BACA,YAEA,mBAIA,8BACA,YAEA,cAEA,QAGA,wBACA,YAEA,MAEA,QAGA,2BACA,YAEA,gBACA,kBAEA,OAGA,IACA,SAEAC,IACA,MACA,4DAGA,4BACA,YAEA,WAEA,QAGA,4BACA,YAEA,QAEA,QAGA,kCACA,eAEA,SAIA,mCACA,eAEA,YAIA,iBACA,SAEA,SAIA,yBACA,YAEA,SAIA,yBACA,YAEA,SAIA,iBACA,SAEA,QAIA,WACA,OAEA,aAIA,IACA,MAEAC,IACA,KACA,qBAGA,oBACA,SAEA,mBACA,oBACA,wBAIA,2BACA,YAEA,mBAIA,2BACA,YAEA,0BAIA,qBACA,SAEA,yBACA,kCACA,uDAIA,sBACA,SAEA,OAIA,gBACA,SAEA,MACA,OACA,QACA,SACA,aAIA,kBACA,YAEA,MACA,OACA,QACA,YAIA,4BACA,YAEA,wBAIA,0BACA,YAEA,QAIA,mBACA,SAEA,YAIA,IACA,MACA,KACA,KACA,KACA,MAEA,kBACA,4BACA,eACA,+BACA,WACA,KACA,kFACA,cACA,WACA,8CAGAC,IACA,KACA,wCAGA,mBACA,SAEA,oDACA,oaACA,8jCAIA,2BACA,YAEA,wCAIA,2BACA,YAEA,sZAIA,2BACA,YAEA,mCAIA,mCACA,eAEA,SAIA,2BACA,YAEA,OAEA,OAGA,2BACA,YAEA,MACA,QAEA,OAGA,qBACA,SAEA,MACA,QAEA,OAGA,6BACA,YAEA,MACA,QAEA,OAGA,6BACA,YAEA,MACA,QAEA,OAGA,mCACA,eAEA,UAEA,OAGA,IACA,MACA,KACA,MACA,GAEAC,IACA,MACA,YAGA,mBACA,WAIAC,IACA,MACA,kBAGA,sBACA,YAEA,OAIA,+BACA,YAEA,WAIA,4BACA,YAEA,OAIA,IACA,OAEAC,IACA,KACA,2CAGA,iBACA,SAEA,QAIA,2BACA,YAEA,WAIA,mBACA,SAEA,UAIA,6BACA,YAEA,UAIA,6BACA,YAEA,OAIA,IACA,OAEAC,IACA,MACA,yBAGA,mBACA,SAEA,WAIA,4BACA,YAEA,QAKAC,IACA,KACA,uDAGA,6BACA,YAEA,cAIA,0BACA,YAEA,WAIA,oBACA,SAEA,WAIA,8BACA,YAEA,sBAIA,qBACA,SAEA,wCACA,qDAIA,4BACA,YAEA,wBAIA,sBACA,SAEA,wBAIA,6BACA,YAEA,2BACA,sCAIA,mBACA,SAEA,MACA,cAIA,2BACA,YAEA,OAIA,KACA,KACA,KACA,KACA,KACA,MAEA,4YACA,2CACA,wBACA,kHACA,sBACA,KACA,KACA,KACA,WACA,gCAGAC,IACA,KACA,qBAGA,oBACA,SAEA,mBACA,oBACA,wBAIA,2BACA,YAEA,mBAIA,2BACA,YAEA,0BAIA,qBACA,SAEA,yBACA,kCACA,uDAIA,sBACA,SAEA,OAIA,gBACA,SAEA,MACA,OACA,QACA,SACA,aAIA,kBACA,YAEA,MACA,OACA,QACA,YAIA,4BACA,YAEA,wBAIA,0BACA,YAEA,QAIA,mBACA,SAEA,YAIA,IACA,MACA,KACA,KACA,KACA,MAEA,qBACA,uDACA,+BACA,kDACA,eACA,KACA,4GACA,+DACA,WACA,8DAGAC,IACA,IACA,gBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,oBAGA,wBACA,YAEA,aAEA,UAGA,sBACA,YAEA,cAIA,qBACA,SAEA,kBAIA,IACA,OAEAC,IACA,KACA,wDAGA,2BACA,YAEA,mBAIA,2BACA,YAEA,SAIA,2BACA,YAEA,qBAIA,wBACA,YAEA,6FACA,+KACA,yMAIA,2BACA,YAEA,0aACA,iqBACA,iwBACA,4wBAIA,2BACA,YAEA,4HACA,gKACA,4KAIA,2BACA,YAEA,yCAIA,wBACA,YAEA,+BAIA,2BACA,YAEA,iBAIA,IACA,OAEAC,IACA,MACA,6BAGA,qBACA,SAEA,YAIA,mBACA,SAEA,OAIA,6BACA,YAEA,UAIA,IACA,MACA,SAEAC,IACA,MACA,oBAGA,2BACA,YAEA,mBAIA,mBACA,SAEA,sBAIA,gCACA,eAEA,OAIA,IACA,OAEAC,IACA,MACA,kBAGA,6BACA,YAEA,mBAEA,QAGA,4BACA,YAEA,YAIA,KAEAC,IACA,MACA,oCAEA,KACA,KACA,KAEAC,IACA,MACA,iBAGA,2BACA,cAIAC,IACA,IACA,gBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,uBAGA,2BACA,YAEA,OAIA,wBACA,YAEA,OAIA,2BACA,YAEA,OAIA,IACA,OAEAC,IACA,KACA,uCAGA,2BACA,YAEA,kCACA,2CAIA,6BACA,YAEA,sDACA,mEAIA,wBACA,YAEA,MACA,UAIA,2BACA,YAEA,MACA,eAIA,2BACA,YAEA,aAIA,mCACA,eAEA,QAIA,0BACA,YAEA,YAIA,kBACA,SAEA,gBAIA,qBACA,SAEA,cACA,6BAIA,mBACA,SAEA,kCACA,0EAEA,OAGA,IACA,MACA,0BAEAC,IACA,MACA,oBAGA,qBACA,SAEA,kDAIA,mBACA,SAEA,wBAKAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,IACA,mCAGA,yCACA,eAEA,aAIA,4BACA,YAEA,OAIA,IACA,KACA,KACA,KACA,KACA,MAEA,8dACA,6CACA,YACA,YACA,KACA,KACA,KACA,KACA,cAGAC,IACA,MACA,kBAGA,+BACA,eAEA,QAIA,6BACA,YAEA,uBAIA,+BACA,eAEA,QAIA,IACA,OAEAC,IACA,MACA,mBAGA,wBACA,YAEA,kDAEA,QAGA,6BACA,YAEA,8CAIA,KAEAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,0BAGA,2BACA,YAEA,aAIA,2BACA,YAEA,WAIA,wBACA,YAEA,SAIA,IACA,KACA,oBAEAC,IACA,KACA,gBAGA,2BACA,YAEA,aAIA,2BACA,YAEA,OAIA,IACA,OAEAC,IACA,MACA,4CAGA,yBACA,YAEA,OAIA,0BACA,YAEA,UAIA,2BACA,YAEA,aAIA,IACA,OAEAC,IACA,MACA,iBAGA,mBACA,WAIAC,IACA,MACA,gBAGA,oBACA,SAEA,4BAIA,wBACA,SAEA,kCAIA,gCACA,YAEA,SAEA,SAGA,uBACA,YAEA,cAIA,IACA,SACA,OACA,MACA,GAEAC,IACA,MACA,2DAGA,mBACA,SAEA,uCAIA,2BACA,YAEA,uCAIA,2BACA,YAEA,QAIA,qCACA,eAEA,wBAIA,mCACA,eAEA,QAIA,6CACA,kBAEA,wBAIA,qCACA,eAEA,4EAIA,2BACA,YAEA,uBAIA,2BACA,YAEA,OAIA,KACA,KACA,qDAEAC,IACA,MACA,iBAGA,8BACA,cAIAC,IACA,MACA,kBAGA,uBACA,UAGA,IACA,OAEAC,IACA,MACA,gBAGA,wBACA,SAEA,+BAIA,uBACA,SAEA,8BACA,wDAIA,oBACA,SAEA,aACA,oBAIA,sCACA,eAEA,uBAIA,kBACA,SAEA,qBAIA,IACA,MACA,KACA,KACA,KACA,MAEA,oIACA,0DACA,WACA,WACA,KACA,KACA,KACA,KACA;AAGAC,IACA,MACA,oBAGA,mCACA,eAEA,QAEA,OAGA,2BACA,YAEA,OAIA,sCACA,kBAEA,OAIA,2BACA,YAEA,KAEA,OAGA,IACA,OAEAC,IACA,MACA,kBAGA,2BACA,YAEA,UAIA,iCACA,YAEA,mBAIA,uBACA,SAEA,UAIA,IACA,OAEAC,IACA,MACA,kBAGA,2BACA,YAEA,uBAIA,IACA,OAEAC,IACA,MACA,eAGA,2BACA,aAGA,IACA,KACA,KACA,KACA,KACA,MAEA,0CACA,iCAGAC,IACA,MACA,eAGA,oCACA,gBAGA,IACA,OAEAC,IACA,MACA,gBAGA,mBACA,UAGA,KAEAC,IACA,MACA,kBAGA,sBACA,YAEA,OAIA,6BACA,YAEA,WAIA,oCACA,eAEA,UAIA,IACA,OAEAC,IACA,MACA,kBAGA,mCACA,eAEA,cAKAC,IACA,KACA,kFAGA,0BACA,YAEA,cAIA,sBACA,YAEA,SAIA,wBACA,YAEA,UAIA,6BACA,YAEA,WAIA,6BACA,YAEA,WAIA,wBACA,YAEA,iCAIA,0BACA,YAEA,4BAIA,8BACA,eAEA,YAIA,8BACA,eAEA,QAIA,IACA,OAEAC,IACA,MACA,8BAGA,4BACA,YAEA,WAIA,uBACA,SAEA,gBAIA,uBACA,SAEA,mBACA,0BAIA,mBACA,SAEA,UAEA,OAGA,yBACA,SAEA,mBACA,8BAIA,IACA,OAEAC,IACA,MACA,gBAGA,wBACA,WAIAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,eAGA,mCACA,gBAGA,IACA,OAEAC,IACA,MACA,iBAGA,sCACA,iBAIAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,mBAGA,mBACA,WAIAC,IACA,MACA,kBAGA,2BACA,SAEA,cAIA,oBACA,SAEA,QAKAC,IACA,MACA,yCAGA,mBACA,SAEA,8BAIA,2BACA,YAEA,aAKAC,IACA,MACA,wCAGA,wBACA,YAEA,OAIA,4BACA,YAEA,OAIA,mCACA,eAEA,YAIA,IACA,OAEAC,IACA,KACA,mBAGA,6BACA,YAEA,cAIA,2BACA,YAEA,iDAIA,gCACA,gBAEA,iBAEA,KACA,KACA,gBAGA,8BACA,gBAEA,mDAEA,KACA,KACA,gBAGA,KACA,QACA,wBACA,OACA,GAEAC,IACA,KACA,mBAGA,2BACA,YAEA,UAEA,Q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A,KACA,eAEAC,IACA,KACA,6BAGA,2BACA,YAEA,WAIA,mBACA,SAEA,WAIA,2BACA,YAEA,qBAIA,oBACA,SAEA,YAIA,IACA,OAEAC,IACA,MACA,yDAGA,yBACA,SAEA,oBAIA,wBACA,SAEA,kDAIA,mBACA,SAEA,OAIA,yBACA,SAEA,UAIA,oBACA,SAEA,WAIA,uBACA,SAEA,WAIA,IACA,OAEAC,IACA,IACA,iBAGA,yCACA,eAEA,aAIA,4BACA,YAEA,OAIA,IACA,SACA,KACA,MACA,EACA,MAEA,wKACA,UACA,eACA,iBAGAC,IACA,MACA,oBAGA,4BACA,YAEA,KAEA,OAGA,gCACA,YAEA,SAEA,QAGA,iCACA,eAEA,OAIA,KAEAC,IACA,MACA,mDAGA,4BACA,YAEA,aAIA,yBACA,YAEA,cAIA,yBACA,YAEA,OAIA,qBACA,SAEA,MAEA,OAGA,wBACA,YAEA,MAEA,OAGA,0BACA,YAEA,QAIA,IACA,OAEAC,IACA,MACA,kBAGA,mBACA,SAEA,YAKAC,IACA,MACA,oBAGA,wBACA,YAEA,YAKAC,IACA,MACA,eAGA,2BACA,aAGA,IACA,OAEAC,IACA,KACA,gCAGA,kCACA,eAEA,KAEA,KACA,KACA,gBAGA,wCACA,eAEA,iDAEA,KACA,KACA,gBAGA,+BACA,YAEA,yCAEA,KACA,KACA,aAGA,mCACA,eAEA,+GAEA,KACA,KACA,gBAGA,6BACA,YAEA,+GAEA,KACA,KACA,aAGA,iCACA,eAEA,KAEA,KACA,KACA,gBAGA,uBACA,WAEA,KAEA,KACA,KACA,aAGA,yBACA,YAEA,MAEA,KACA,KACA,aAGA,sCACA,eAEA,UAEA,KACA,KACA,gBAGA,sBACA,SAEA,UAEA,KACA,KACA,UAGA,2CACA,kBAEA,mBAEA,KACA,KACA,mBAGA,IACA,OAEAC,IACA,KACA,+BAGA,yBACA,SAEA,kBAIA,4BACA,YAEA,WAIA,yBACA,YAEA,QAIA,wBACA,YAEA,SAKAC,IACA,MACA,iBAEA,KACA,KACA,KACA,KACA,KACA,MAEA,gCACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,cAGAC,IACA,MACA,+BAGA,gCACA,eAEA,sCAEA,UAGA,6BACA,YAEA,2BAIA,uBACA,SAEA,cAIA,uBACA,SAEA,eAIA,IACA,OAEAC,IACA,KACA,0BAGA,gCACA,YAEA,WAIA,uCACA,eAEA,aAIA,KACA,KACA,KACA,KACA,KACA,MAEA,WACA,gCACA,eACA,eACA,YACA,eACA,+CACA,KACA,gBACA,iCAGAC,IACA,MACA,iCAGA,uBACA,YAEA,YAIA,8BACA,YAEA,WAIA,8BACA,eAEA,OAIA,qCACA,eAEA,WAIA,gCACA,YAEA,WAIA,iBACA,SAEA,UAIA,IACA,OAEAC,IACA,MACA,gBAGA,mBACA,UAGA,IACA,SAEAC,IACA,MACA,mBAGA,mCACA,eAEA,WAIA,iBACA,SAEA,KAEA,KACA,KACA,YAGA,WACA,WAEA,QAEA,KACA,KACA,cAGA,KACA,KACA,wBACA,UAEAC,IACA,MACA,iBAGA,mCACA,eAEA,WAIA,mCACA,eAEA,QAKAC,IACA,MACA,kBAGA,WACA,MAEA,WAIA,gBACA,SAEA,oBAIA,gBACA,SAEA,aAIA,mBACA,SAEA,YAIA,qBACA,SAEA,gCAIA,2BACA,YAEA,qCAIA,KAEAC,IACA,MACA,kBAGA,mBACA,SAEA,mBAIA,2BACA,YAEA,QAIA,mBACA,SAEA,YAKAC,IACA,MACA,eAGA,2BACA,WACA,KACA,QAGA,KAEAC,IACA,MACA,eAGA,mBACA,WAIAC,IACA,MACA,sCAGA,mBACA,SAEA,WAIA,mBACA,SAEA,UAIA,2BACA,YAEA,WAKAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,mBAGA,6BACA,YAEA,WAIA,4BACA,YAEA,OAIA,IACA,MACA,KACA,MACA,GAEAC,IACA,MACA,gBAGA,mBACA,SAEA,YAKAC,IACA,MACA,aAEA,KACA,KACA,KACA,KACA,KACA,MAEA,YAGAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,iBAGA,mCACA,iBAIAC,IACA,MACA,eAGA,mCACA,eAEA,WAKAC,IACA,KACA,uCAGA,sBACA,YAEA,OAIA,gCACA,YAEA,cAIA,4BACA,YAEA,KAEA,OAGA,IACA,OAEAC,IACA,MACA,mBAGA,gCACA,YAEA,kBAIA,+BACA,YAEA,sCAIA,wBACA,YAEA,MACA,OACA,QACA,YAIA,wBACA,YAEA,SACA,sCAIA,IACA,KACA,KACA,MACA,GAEAC,IACA,MACA,kBAEAC,IACA,MACA,4BAGA,mBACA,SAEA,aAIA,mBACA,SAEA,QAKAC,IACA,MACA,gBAGA,mCACA,eAEA,QAIA,mBACA,SAEA,KAEA,SAGA,gCACA,eAEA,cAIA,IACA,UAEAC,IACA,MACA,mBAGA,2BACA,cAIAC,IACA,MACA,mBAGA,mBACA,SAEA,wBAIA,mBACA,SAEA,oBAIA,mBACA,SAEA,QAKAC,IACA,KACA,4BAGA,mCACA,eAEA,gCAEA,QACA,SAGA,mCACA,eAEA,YAEA,MACA,SAGA,2BACA,YAEA,WAEA,MACA,SAGA,wBACA,YAEA,SAIA,KAEAC,IACA,IACA,gBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,MACA,iBAEAC,IACA,MACA,wCAGA,oBACA,YAEA,SAIA,uBACA,YAEA,eAIA,4BACA,YAEA,6BAIA,+BACA,YAEA,UAIA,uBACA,YAEA,QAIA,IACA,OAEAC,IACA,MACA,WAGA,4BACA,YAEA,UAIA,+BACA,YAEA,UAIA,+BACA,YAEA,UAIA,IACA,OAEAC,IACA,MACA,gBAGA,6BACA,YAEA,8DACA,0EAIA,kCACA,YAEA,4EACA,6GAIA,wBACA,SAEA,0IACA,sLAIA,IACA,OAEAC,IACA,MACA,WAGA,mBACA,SAEA,iDAIA,mBACA,SAEA,4BAIA,iBACA,SAEA,UAIA,IACA,OAEAC,IACA,IACA,gBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,MACA,EACA,MAEA,6kBACA,KACA,uCACA,iBACA,yCAGAC,IACA,MACA,mBAGA,mBACA,SAEA,UAIA,2BACA,YAEA,UAEA,QAGA,mBACA,SAEA,SAEA,QAGA,KAEAC,IACA,MACA,gBAGA,qCACA,gBAGA,IACA,QAEAC,IACA,KACA,oFAGA,6BACA,YAEA,cAIA,0BACA,YAEA,WAIA,oBACA,SAEA,WAIA,8BACA,YAEA,sBAIA,qBACA,SAEA,wCACA,qDAIA,4BACA,YAEA,wBAIA,sBACA,SAEA,wBAIA,6BACA,YAEA,2BACA,sCAIA,mBACA,SAEA,MACA,cAIA,2BACA,YAEA,OAIA,KACA,KACA,KACA,KACA,KACA,MAEA,cACA,2CACA,wBACA,kHACA,sBACA,KACA,KACA,KACA,WACA,gCAGAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,KACA,kBAGA,mBACA,UAGA,IACA,OAEAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,IACA,iBAGA,2BACA,aACA,KACA,KACA,KACA,aAGA,IACA,KACA,KACA,KACA,KACA,OAEAC,IACA,KACA,2CAGA,mBACA,SAEA,YAIA,yBACA,YAEA,+BAIA,+BACA,YAEA,8CAIA,eACA,SAEA,QAIA,oBACA,SAEA,QAIA,kCACA,YAEA,gCAIA,oCACA,eAEA,oBAIA,+BACA,YAEA,wBAIA,2BACA,YAEA,YAIA,sBACA,SAEA,UAEA,OAGA,IACA,MACA,KACA,MACA,GAEAC,IACA,MACA,qBAGA,mBACA,SAEA,YAKAC,IACA,MACA,gBAGA,2BACA,cAIAC,IACA,MACA,kBAGA,sBACA,SAEA,OAIA,iBACA,SAEA,OAIA,WACA,MAEA,YAKAC,IACA,MACA,kBAGA,4BACA,YAEA,oBAIA,4BACA,YAEA,aAIA,IACA,OAEAC,IACA,MACA,gBAGA,wCACA,gBAGA,IACA,MACA,KACA,KACA,KACA,UAEAC,IACA,KACA,2BAGA,wBACA,YAEA,SAIA,qBACA,SAEA,YAIA,6BACA,YAEA,YAIA,2BACA,YAEA,+BAIA,IACA,OAEAC,I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"",""file"":""libphonenumber-js.min.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\""libphonenumber\"", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""libphonenumber\""] = factory();\n\telse\n\t\troot[\""libphonenumber\""] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"",""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\""libphonenumber\"", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""libphonenumber\""] = factory();\n\telse\n\t\troot[\""libphonenumber\""] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \""\"";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 76);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.get_phone_code = get_phone_code;\nexports.get_national_number_pattern = get_national_number_pattern;\nexports.get_formats = get_formats;\nexports.get_national_prefix = get_national_prefix;\nexports.get_national_prefix_formatting_rule = get_national_prefix_formatting_rule;\nexports.get_national_prefix_for_parsing = get_national_prefix_for_parsing;\nexports.get_national_prefix_transform_rule = get_national_prefix_transform_rule;\nexports.get_national_prefix_is_optional_when_formatting = get_national_prefix_is_optional_when_formatting;\nexports.get_leading_digits = get_leading_digits;\nexports.get_format_pattern = get_format_pattern;\nexports.get_format_format = get_format_format;\nexports.get_format_leading_digits_patterns = get_format_leading_digits_patterns;\nexports.get_format_national_prefix_formatting_rule = get_format_national_prefix_formatting_rule;\nexports.get_format_national_prefix_is_optional_when_formatting = get_format_national_prefix_is_optional_when_formatting;\nexports.get_format_national_prefix_is_mandatory_when_formatting = get_format_national_prefix_is_mandatory_when_formatting;\nexports.get_format_uses_national_prefix = get_format_uses_national_prefix;\nexports.get_format_international_format = get_format_international_format;\nexports.get_metadata_by_country_phone_code = get_metadata_by_country_phone_code;\nexports.get_types = get_types;\nexports.get_type_fixed_line = get_type_fixed_line;\nexports.get_type_mobile = get_type_mobile;\nexports.get_type_toll_free = get_type_toll_free;\nexports.get_type_premium_rate = get_type_premium_rate;\nexports.get_type_personal_number = get_type_personal_number;\nexports.get_type_voice_mail = get_type_voice_mail;\nexports.get_type_uan = get_type_uan;\nexports.get_type_pager = get_type_pager;\nexports.get_type_voip = get_type_voip;\nexports.get_type_shared_cost = get_type_shared_cost;\nexports.get_country_phone_code = get_country_phone_code;\nfunction get_phone_code(country_metadata) {\n\treturn country_metadata[0];\n}\n\nfunction get_national_number_pattern(country_metadata) {\n\treturn country_metadata[1];\n}\n\nfunction get_formats(country_metadata) {\n\treturn country_metadata[2] || [];\n}\n\nfunction get_national_prefix(country_metadata) {\n\treturn country_metadata[3];\n}\n\nfunction get_national_prefix_formatting_rule(country_metadata) {\n\treturn country_metadata[4];\n}\n\nfunction get_national_prefix_for_parsing(country_metadata) {\n\tvar national_prefix_for_parsing = country_metadata[5];\n\n\t// If `national_prefix_for_parsing` is not set explicitly,\n\t// then infer it from `national_prefix` (if any)\n\tif (!national_prefix_for_parsing) {\n\t\tnational_prefix_for_parsing = get_national_prefix(country_metadata);\n\t}\n\n\treturn national_prefix_for_parsing;\n}\n\nfunction get_national_prefix_transform_rule(country_metadata) {\n\treturn country_metadata[6];\n}\n\nfunction get_national_prefix_is_optional_when_formatting(country_metadata) {\n\treturn country_metadata[7];\n}\n\nfunction get_leading_digits(country_metadata) {\n\treturn country_metadata[8];\n}\n\nfunction get_format_pattern(format_array) {\n\treturn format_array[0];\n}\n\nfunction get_format_format(format_array) {\n\treturn format_array[1];\n}\n\nfunction get_format_leading_digits_patterns(format_array) {\n\treturn format_array[2] || [];\n}\n\nfunction get_format_national_prefix_formatting_rule(format_array, country_metadata) {\n\treturn format_array[3] || get_national_prefix_formatting_rule(country_metadata);\n}\n\nfunction get_format_national_prefix_is_optional_when_formatting(format_array, country_metadata) {\n\treturn format_array[4] || get_national_prefix_is_optional_when_formatting(country_metadata);\n}\n\nfunction get_format_national_prefix_is_mandatory_when_formatting(format_array, country_metadata) {\n\tvar national_prefix_formatting_rule = get_format_national_prefix_formatting_rule(format_array, country_metadata);\n\n\t// National prefix is omitted if there's no national prefix formatting rule\n\t// set for this country, or when the national prefix formatting rule\n\t// contains no national prefix itself, or when this rule is set but\n\t// national prefix is optional for this phone number format\n\t// (and it is not enforced explicitly)\n\treturn national_prefix_formatting_rule &&\n\t// Check that national prefix formatting rule is not a dummy one.\n\t// Check that national prefix formatting rule actually has national prefix digit(s).\n\tget_format_uses_national_prefix(national_prefix_formatting_rule) &&\n\t// Or maybe national prefix is optional for this format\n\t!get_format_national_prefix_is_optional_when_formatting(format_array, country_metadata);\n}\n\n// Checks whether national prefix formatting rule contains national prefix\nfunction get_format_uses_national_prefix(national_prefix_formatting_rule) {\n\t// Check that national prefix formatting rule is not a dummy one\n\treturn national_prefix_formatting_rule !== '$1' &&\n\t// Check that national prefix formatting rule actually has national prefix digit(s)\n\t/\\d/.test(national_prefix_formatting_rule.replace('$1', ''));\n}\n\nfunction get_format_international_format(format_array) {\n\treturn format_array[5] || get_format_format(format_array);\n}\n\n// Formatting information for regions which share\n// a country calling code is contained by only one region\n// for performance reasons. For example, for NANPA region\n// (\""North American Numbering Plan Administration\"",\n//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n// it will be contained in the metadata for `US`.\nfunction get_metadata_by_country_phone_code(country_phone_code, metadata) {\n\tvar country_code = metadata.country_phone_code_to_countries[country_phone_code][0];\n\treturn metadata.countries[country_code];\n}\n\nfunction get_types(country_metadata) {\n\treturn country_metadata[9];\n}\n\nfunction get_type(country_metadata, index) {\n\treturn get_types(country_metadata) ? get_types(country_metadata)[index] : undefined;\n}\n\nfunction get_type_fixed_line(country_metadata) {\n\treturn get_type(country_metadata, 0);\n}\n\nfunction get_type_mobile(country_metadata) {\n\treturn get_type(country_metadata, 1);\n}\n\nfunction get_type_toll_free(country_metadata) {\n\treturn get_type(country_metadata, 2);\n}\n\nfunction get_type_premium_rate(country_metadata) {\n\treturn get_type(country_metadata, 3);\n}\n\nfunction get_type_personal_number(country_metadata) {\n\treturn get_type(country_metadata, 4);\n}\n\nfunction get_type_voice_mail(country_metadata) {\n\treturn get_type(country_metadata, 5);\n}\n\nfunction get_type_uan(country_metadata) {\n\treturn get_type(country_metadata, 6);\n}\n\nfunction get_type_pager(country_metadata) {\n\treturn get_type(country_metadata, 7);\n}\n\nfunction get_type_voip(country_metadata) {\n\treturn get_type(country_metadata, 8);\n}\n\nfunction get_type_shared_cost(country_metadata) {\n\treturn get_type(country_metadata, 9);\n}\n\nfunction get_country_phone_code(country, country_metadata) {\n\treturn get_phone_code(country_metadata[country]);\n}\n//# sourceMappingURL=metadata.js.map\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\nvar core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar store      = __webpack_require__(31)('wks')\n  , uid        = __webpack_require__(33)\n  , Symbol     = __webpack_require__(2).Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.VALID_PUNCTUATION = exports.VALID_DIGITS = exports.PLUS_CHARS = undefined;\nexports.default = parse;\nexports.normalize = normalize;\nexports.replace_characters = replace_characters;\nexports.is_viable_phone_number = is_viable_phone_number;\nexports.extract_formatted_phone_number = extract_formatted_phone_number;\nexports.parse_phone_number = parse_phone_number;\nexports.parse_phone_number_and_country_phone_code = parse_phone_number_and_country_phone_code;\nexports.strip_national_prefix = strip_national_prefix;\nexports.find_country_code = find_country_code;\n\nvar _getIterator2 = __webpack_require__(15);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _extends2 = __webpack_require__(42);\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _common = __webpack_require__(7);\n\nvar _metadata = __webpack_require__(0);\n\nvar _format = __webpack_require__(13);\n\nvar _getNumberType = __webpack_require__(14);\n\nvar _getNumberType2 = _interopRequireDefault(_getNumberType);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nvar PLUS_CHARS = exports.PLUS_CHARS = '+\\uFF0B';\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nvar VALID_DIGITS = exports.VALID_DIGITS = '0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9';\n\n// `DASHES` will be right after the opening square bracket of the \""character class\""\nvar DASHES = '-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D';\nvar SLASHES = '\\uFF0F/';\nvar DOTS = '\\uFF0E.';\nvar WHITESPACE = ' \\xA0\\xAD\\u200B\\u2060\\u3000';\nvar BRACKETS = '()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]';\nvar TILDES = '~\\u2053\\u223C\\uFF5E';\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nvar VALID_PUNCTUATION = exports.VALID_PUNCTUATION = '' + DASHES + SLASHES + DOTS + WHITESPACE + BRACKETS + TILDES;\n\n//  Regular expression of viable phone numbers. This is location independent.\n//  Checks we have at least three leading digits, and only valid punctuation,\n//  alpha characters and digits in the phone number. Does not include extension\n//  data. The symbol 'x' is allowed here as valid punctuation since it is often\n//  used as a placeholder for carrier codes, for example in Brazilian phone\n//  numbers. We also allow multiple '+' characters at the start.\n//\n//  Corresponds to the following:\n//  [digits]{minLengthNsn}|\n//  plus_sign*\n//  (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n//  The first reg-ex is to allow short numbers (two digits long) to be parsed if\n//  they are entered as \""15\"" etc, but only if there is no punctuation in them.\n//  The second expression restricts the number of digits to three or more, but\n//  then allows them to be in international form, and to have alpha-characters\n//  and punctuation. We split up the two reg-exes here and combine them when\n//  creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n//  with ^ and append $ to each branch.\n//\n//  Note VALID_PUNCTUATION starts with a -, so must be the first in the range.\n//  (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nvar VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER +\n// screw phone number extensions\n// '(?:' + EXTN_PATTERNS_FOR_PARSING + ')?' +\n'$', 'i');\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + ']+$');\n\nvar LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+');\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\nvar DIGIT_MAPPINGS = {\n\t'0': '0',\n\t'1': '1',\n\t'2': '2',\n\t'3': '3',\n\t'4': '4',\n\t'5': '5',\n\t'6': '6',\n\t'7': '7',\n\t'8': '8',\n\t'9': '9',\n\t'\\uFF10': '0', // Fullwidth digit 0\n\t'\\uFF11': '1', // Fullwidth digit 1\n\t'\\uFF12': '2', // Fullwidth digit 2\n\t'\\uFF13': '3', // Fullwidth digit 3\n\t'\\uFF14': '4', // Fullwidth digit 4\n\t'\\uFF15': '5', // Fullwidth digit 5\n\t'\\uFF16': '6', // Fullwidth digit 6\n\t'\\uFF17': '7', // Fullwidth digit 7\n\t'\\uFF18': '8', // Fullwidth digit 8\n\t'\\uFF19': '9', // Fullwidth digit 9\n\t'\\u0660': '0', // Arabic-indic digit 0\n\t'\\u0661': '1', // Arabic-indic digit 1\n\t'\\u0662': '2', // Arabic-indic digit 2\n\t'\\u0663': '3', // Arabic-indic digit 3\n\t'\\u0664': '4', // Arabic-indic digit 4\n\t'\\u0665': '5', // Arabic-indic digit 5\n\t'\\u0666': '6', // Arabic-indic digit 6\n\t'\\u0667': '7', // Arabic-indic digit 7\n\t'\\u0668': '8', // Arabic-indic digit 8\n\t'\\u0669': '9', // Arabic-indic digit 9\n\t'\\u06F0': '0', // Eastern-Arabic digit 0\n\t'\\u06F1': '1', // Eastern-Arabic digit 1\n\t'\\u06F2': '2', // Eastern-Arabic digit 2\n\t'\\u06F3': '3', // Eastern-Arabic digit 3\n\t'\\u06F4': '4', // Eastern-Arabic digit 4\n\t'\\u06F5': '5', // Eastern-Arabic digit 5\n\t'\\u06F6': '6', // Eastern-Arabic digit 6\n\t'\\u06F7': '7', // Eastern-Arabic digit 7\n\t'\\u06F8': '8', // Eastern-Arabic digit 8\n\t'\\u06F9': '9' // Eastern-Arabic digit 9\n};\n\n// The maximum length of the country calling code.\nvar MAX_LENGTH_COUNTRY_CODE = 3;\n\n// The minimum length of the national significant number.\nvar MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nvar MAX_LENGTH_FOR_NSN = 17;\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\nvar default_options = {\n\tcountry: {}\n};\n\n// `options`:\n//  {\n//    country:\n//    {\n//      restrict - (a two-letter country code)\n//                 the phone number must be in this country\n//\n//      default - (a two-letter country code)\n//                default country to use for phone number parsing and validation\n//                (if no country code could be derived from the phone number)\n//    }\n//  }\n//\n// Returns `{ country, number }`\n//\n// Example use cases:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\nfunction parse(first_argument, second_argument, third_argument) {\n\tvar _sort_out_arguments = sort_out_arguments(first_argument, second_argument, third_argument),\n\t    text = _sort_out_arguments.text,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (!options) {\n\t\toptions = (0, _extends3.default)({}, default_options);\n\t}\n\n\t// Validate country codes\n\n\t// Validate `default` country\n\tif (options.country.default && !metadata.countries[options.country.default]) {\n\t\tthrow new Error('Unknown country code: ' + options.country.default);\n\t}\n\n\t// Validate `restrict` country\n\tif (options.country.restrict && !metadata.countries[options.country.restrict]) {\n\t\tthrow new Error('Unknown country code: ' + options.country.restrict);\n\t}\n\n\t// Parse the phone number\n\n\tvar formatted_phone_number = extract_formatted_phone_number(text);\n\n\t// If the phone number is not viable, then abort.\n\tif (!is_viable_phone_number(formatted_phone_number)) {\n\t\treturn {};\n\t}\n\n\tvar _parse_phone_number_a = parse_phone_number_and_country_phone_code(formatted_phone_number, metadata),\n\t    country_phone_code = _parse_phone_number_a.country_phone_code,\n\t    number = _parse_phone_number_a.number;\n\n\t// Maybe invalid country phone code encountered\n\n\n\tif (!number) {\n\t\treturn {};\n\t}\n\n\tvar country = void 0;\n\tvar country_metadata = void 0;\n\n\t// Whether the phone number is formatted as an international phone number\n\tvar is_international = false;\n\n\tif (country_phone_code) {\n\t\tis_international = true;\n\n\t\t// Check country restriction\n\t\tif (options.country.restrict && country_phone_code !== (0, _metadata.get_phone_code)(metadata.countries[options.country.restrict])) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Formatting information for regions which share\n\t\t// a country calling code is contained by only one region\n\t\t// for performance reasons. For example, for NANPA region\n\t\t// (\""North American Numbering Plan Administration\"",\n\t\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t\t// it will be contained in the metadata for `US`.\n\t\tcountry_metadata = (0, _metadata.get_metadata_by_country_phone_code)(country_phone_code, metadata);\n\n\t\t// `country` will be set later,\n\t\t// because, for example, for NANPA countries\n\t\t// there are several countries corresponding\n\t\t// to the same `1` country phone code.\n\t\t// Therefore, to reliably determine the exact country,\n\t\t// national (significant) number should be parsed first.\n\t} else if (options.country.restrict || options.country.default) {\n\t\tcountry = options.country.restrict || options.country.default;\n\t\tcountry_metadata = metadata.countries[country];\n\n\t\tnumber = normalize(text);\n\t}\n\n\tif (!country_metadata) {\n\t\treturn {};\n\t}\n\n\tvar national_number = strip_national_prefix(number, country_metadata);\n\n\tvar did_have_national_prefix = national_number !== number;\n\n\t// https://github.com/halt-hammerzeit/libphonenumber-js/issues/67\n\t// if (!is_international && !did_have_national_prefix &&\n\t// \t\tis_national_prefix_required(national_number, country_metadata))\n\t// {\n\t// \treturn {}\n\t// }\n\n\t// Sometimes there are several countries\n\t// corresponding to the same country phone code\n\t// (e.g. NANPA countries all having `1` country phone code).\n\t// Therefore, to reliably determine the exact country,\n\t// national (significant) number should have been parsed first.\n\t//\n\tif (!country) {\n\t\t// When `metadata.json` is generated, all \""ambiguous\"" country phone codes\n\t\t// get their countries populated with the full set of\n\t\t// \""phone number type\"" regular expressions.\n\t\tcountry = find_country_code(country_phone_code, national_number, metadata);\n\n\t\t// Just in case there appears to be a bug in Google's metadata\n\t\t// and the exact country could not be extracted from the phone number.\n\t\t/* istanbul ignore if */\n\t\tif (!country) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Update metadata to be for this specific country\n\t\tcountry_metadata = metadata.countries[country];\n\t}\n\n\t// Validate national (significant) number length.\n\t//\n\t// A sidenote:\n\t//\n\t// They say that sometimes national (significant) numbers\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n\t// Such numbers will just be discarded.\n\t//\n\tif (national_number.length > MAX_LENGTH_FOR_NSN) {\n\t\treturn {};\n\t}\n\n\t// National number pattern is different for each country,\n\t// even for those ones which are part of the \""NANPA\"" group.\n\tvar national_number_rule = new RegExp((0, _metadata.get_national_number_pattern)(country_metadata));\n\n\t// Check if national phone number pattern matches the number\n\tif (!(0, _common.matches_entirely)(national_number, national_number_rule)) {\n\t\treturn {};\n\t}\n\n\treturn { country: country, phone: national_number };\n}\n\n// Normalizes a string of characters representing a phone number.\n// This converts wide-ascii and arabic-indic numerals to European numerals,\n// and strips punctuation and alpha characters.\nfunction normalize(number) {\n\treturn replace_characters(number, DIGIT_MAPPINGS);\n}\n\n// For any character not being part of `replacements`\n// it is removed from the phone number.\nfunction replace_characters(text, replacements) {\n\tvar replaced = '';\n\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = (0, _getIterator3.default)(text), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar character = _step.value;\n\n\t\t\tvar replacement = replacements[character.toUpperCase()];\n\n\t\t\tif (replacement !== undefined) {\n\t\t\t\treplaced += replacement;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn replaced;\n}\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nfunction is_viable_phone_number(number) {\n\treturn number.length >= MIN_LENGTH_FOR_NSN && (0, _common.matches_entirely)(number, VALID_PHONE_NUMBER_PATTERN);\n}\n\nfunction extract_formatted_phone_number(text) {\n\tif (!text || text.length > MAX_INPUT_STRING_LENGTH) {\n\t\treturn '';\n\t}\n\n\t// Attempt to extract a possible number from the string passed in\n\n\tvar starts_at = text.search(PHONE_NUMBER_START_PATTERN);\n\n\tif (starts_at < 0) {\n\t\treturn '';\n\t}\n\n\treturn text\n\t// Trim everything to the left of the phone number\n\t.slice(starts_at)\n\t// Remove trailing non-numerical characters\n\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n// Parses a formatted phone number.\nfunction parse_phone_number(number) {\n\tif (!number) {\n\t\treturn '';\n\t}\n\n\tvar is_international = LEADING_PLUS_CHARS_PATTERN.test(number);\n\n\t// Remove non-digits\n\t// (and strip the possible leading '+')\n\tnumber = normalize(number);\n\n\tif (is_international) {\n\t\treturn '+' + number;\n\t}\n\n\treturn number;\n}\n\n// Parses a formatted phone number\n// and returns `{ country_phone_code, number }`\n// where `number` is the national (significant) phone number.\n//\n// (aka `maybeExtractCountryPhoneCode`)\n//\nfunction parse_phone_number_and_country_phone_code(number, metadata) {\n\tnumber = parse_phone_number(number);\n\n\tif (!number) {\n\t\treturn {};\n\t}\n\n\t// If this is not an international phone number,\n\t// then don't extract country phone code.\n\tif (number[0] !== '+') {\n\t\treturn { number: number };\n\t}\n\n\t// Strip the leading '+' sign\n\tnumber = number.slice(1);\n\n\t// Fast abortion: country codes do not begin with a '0'\n\tif (number[0] === '0') {\n\t\treturn {};\n\t}\n\n\t// The thing with country phone codes\n\t// is that they are orthogonal to each other\n\t// i.e. there's no such country phone code A\n\t// for which country phone code B exists\n\t// where B starts with A.\n\t// Therefore, while scanning digits,\n\t// if a valid country code is found,\n\t// that means that it is the country code.\n\t//\n\tvar i = 1;\n\twhile (i <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n\t\tvar country_phone_code = number.slice(0, i);\n\n\t\tif (metadata.country_phone_code_to_countries[country_phone_code]) {\n\t\t\treturn { country_phone_code: country_phone_code, number: number.slice(i) };\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn {};\n}\n\n// Strips any national prefix (such as 0, 1) present in the number provided\nfunction strip_national_prefix(number, country_metadata) {\n\tvar national_prefix_for_parsing = (0, _metadata.get_national_prefix_for_parsing)(country_metadata);\n\n\tif (!number || !national_prefix_for_parsing) {\n\t\treturn number;\n\t}\n\n\t// Attempt to parse the first digits as a national prefix\n\tvar national_prefix_pattern = new RegExp('^(?:' + national_prefix_for_parsing + ')');\n\tvar national_prefix_matcher = national_prefix_pattern.exec(number);\n\n\t// If no national prefix is present in the phone number,\n\t// but if the national prefix is optional for this country,\n\t// then consider this phone number valid.\n\t//\n\t// Google's reference `libphonenumber` implementation\n\t// wouldn't recognize such phone numbers as valid,\n\t// but I think it would perfectly make sense\n\t// to consider such phone numbers as valid\n\t// because if a national phone number was originally\n\t// formatted without the national prefix\n\t// then it must be parseable back into the original national number.\n\t// In other words, `parse(format(number))`\n\t// must always be equal to `number`.\n\t//\n\tif (!national_prefix_matcher) {\n\t\treturn number;\n\t}\n\n\tvar national_significant_number = void 0;\n\n\t// `national_prefix_for_parsing` capturing groups\n\t// (used only for really messy cases: Argentina, Brazil, Mexico, Somalia)\n\tvar any_groups_were_captured = national_prefix_matcher[national_prefix_matcher.length - 1];\n\tvar national_prefix_transform_rule = (0, _metadata.get_national_prefix_transform_rule)(country_metadata);\n\n\t// If the national number tranformation is needed then do it\n\tif (national_prefix_transform_rule && any_groups_were_captured) {\n\t\tnational_significant_number = number.replace(national_prefix_pattern, national_prefix_transform_rule);\n\t}\n\t// Else, no transformation is necessary,\n\t// and just strip the national prefix.\n\telse {\n\t\t\tnational_significant_number = number.slice(national_prefix_matcher[0].length);\n\t\t}\n\n\t// Verify the parsed national (significant) number for this country\n\tvar national_number_rule = new RegExp((0, _metadata.get_national_number_pattern)(country_metadata));\n\n\t// If the original number (before stripping national prefix) was viable,\n\t// and the resultant number is not, then prefer the original phone number.\n\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t// a national prefix and a leading digit of a valid national phone number,\n\t// like `8` is the national prefix for Russia and both\n\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\tif ((0, _common.matches_entirely)(number, national_number_rule) && !(0, _common.matches_entirely)(national_significant_number, national_number_rule)) {\n\t\treturn number;\n\t}\n\n\t// Return the parsed national (significant) number\n\treturn national_significant_number;\n}\n\nfunction find_country_code(country_phone_code, national_phone_number, metadata) {\n\t// Is always non-empty, because `country_phone_code` is always valid\n\tvar possible_countries = metadata.country_phone_code_to_countries[country_phone_code];\n\n\t// If there's just one country corresponding to the country code,\n\t// then just return it, without further phone number digits validation.\n\tif (possible_countries.length === 1) {\n\t\treturn possible_countries[0];\n\t}\n\n\tvar _iteratorNormalCompletion2 = true;\n\tvar _didIteratorError2 = false;\n\tvar _iteratorError2 = undefined;\n\n\ttry {\n\t\tfor (var _iterator2 = (0, _getIterator3.default)(possible_countries), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\tvar country_code = _step2.value;\n\n\t\t\tvar country = metadata.countries[country_code];\n\n\t\t\t// Leading digits check would be the simplest one\n\t\t\tif ((0, _metadata.get_leading_digits)(country)) {\n\t\t\t\tif (national_phone_number && national_phone_number.search((0, _metadata.get_leading_digits)(country)) === 0) {\n\t\t\t\t\treturn country_code;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Else perform full validation with all of those bulky\n\t\t\t// fixed-line/mobile/etc regular expressions.\n\t\t\telse if ((0, _getNumberType2.default)({ phone: national_phone_number, country: country_code }, metadata)) {\n\t\t\t\t\treturn country_code;\n\t\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError2 = true;\n\t\t_iteratorError2 = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t_iterator2.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError2) {\n\t\t\t\tthrow _iteratorError2;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// export function is_national_prefix_required(national_number, country_metadata)\n// {\n// \tconst format = choose_format_for_number(get_formats(country_metadata), national_number)\n//\n// \tif (format)\n// \t{\n// \t\treturn get_format_national_prefix_is_mandatory_when_formatting(format, country_metadata)\n// \t}\n// }\n\n// Sort out arguments\nfunction sort_out_arguments(first_argument, second_argument, third_argument) {\n\tvar text = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\tif (typeof first_argument === 'string') {\n\t\ttext = first_argument;\n\t}\n\n\t// Covert `resrict` country to an `options` object\n\tif (typeof second_argument === 'string') {\n\t\tvar restrict_to_country = second_argument;\n\n\t\toptions = (0, _extends3.default)({}, default_options, {\n\n\t\t\tcountry: {\n\t\t\t\trestrict: restrict_to_country\n\t\t\t}\n\t\t});\n\n\t\tmetadata = third_argument;\n\t} else {\n\t\t// Differentiate `metadata` from `options`\n\t\tif (second_argument && second_argument.countries) {\n\t\t\tmetadata = second_argument;\n\t\t} else {\n\t\t\toptions = second_argument;\n\t\t\tmetadata = third_argument;\n\t\t}\n\t}\n\n\t// Sanity check\n\tif (!metadata) {\n\t\tthrow new Error('Metadata not passed');\n\t}\n\n\treturn { text: text, options: options, metadata: metadata };\n}\n//# sourceMappingURL=parse.js.map\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(17)(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar dP         = __webpack_require__(12)\n  , createDesc = __webpack_require__(29);\nmodule.exports = __webpack_require__(5) ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.matches_entirely = matches_entirely;\n// Checks whether the entire input sequence can be matched\n// against the regular expression.\nfunction matches_entirely() {\n\tvar text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar regular_expression = arguments[1];\n\n\tif (typeof regular_expression === 'string') {\n\t\tregular_expression = '^(?:' + regular_expression + ')$';\n\t}\n\n\tvar matched_groups = text.match(regular_expression);\n\treturn matched_groups && matched_groups[0].length === text.length;\n}\n//# sourceMappingURL=common.js.map\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(18);\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar global    = __webpack_require__(2)\n  , core      = __webpack_require__(1)\n  , ctx       = __webpack_require__(51)\n  , hide      = __webpack_require__(6)\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\nmodule.exports = {};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar anObject       = __webpack_require__(8)\n  , IE8_DOM_DEFINE = __webpack_require__(53)\n  , toPrimitive    = __webpack_require__(67)\n  , dP             = Object.defineProperty;\n\nexports.f = __webpack_require__(5) ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.FIRST_GROUP_PATTERN = undefined;\nexports.default = format;\nexports.format_national_number_using_format = format_national_number_using_format;\nexports.format_national_number = format_national_number;\nexports.choose_format_for_number = choose_format_for_number;\nexports.local_to_international_style = local_to_international_style;\n\nvar _getIterator2 = __webpack_require__(15);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _common = __webpack_require__(7);\n\nvar _parse = __webpack_require__(4);\n\nvar _metadata = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Formats a phone number\n//\n// Example use cases:\n//\n// ```js\n// format('8005553535', 'RU', 'International')\n// format('8005553535', 'RU', 'International', metadata)\n// format({ phone: '8005553535', country: 'RU' }, 'International')\n// format({ phone: '8005553535', country: 'RU' }, 'International', metadata)\n// format('+78005553535', 'National')\n// format('+78005553535', 'National', metadata)\n// ```\n//\nfunction format(first_argument, second_argument, third_argument, fourth_argument) {\n\tvar _sort_out_arguments = sort_out_arguments(first_argument, second_argument, third_argument, fourth_argument),\n\t    input = _sort_out_arguments.input,\n\t    format_type = _sort_out_arguments.format_type,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tvar country_metadata = void 0;\n\n\tif (input.country) {\n\t\tcountry_metadata = metadata.countries[input.country];\n\t}\n\n\tvar _parse_phone_number_a = (0, _parse.parse_phone_number_and_country_phone_code)(input.phone, metadata),\n\t    country_phone_code = _parse_phone_number_a.country_phone_code,\n\t    number = _parse_phone_number_a.number;\n\n\tif (country_phone_code) {\n\t\t// Check country restriction\n\t\tif (input.country && country_metadata && country_phone_code !== (0, _metadata.get_phone_code)(country_metadata)) {\n\t\t\treturn input.phone;\n\t\t}\n\n\t\tcountry_metadata = (0, _metadata.get_metadata_by_country_phone_code)(country_phone_code, metadata);\n\t}\n\n\tif (!country_metadata) {\n\t\treturn input.phone;\n\t}\n\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\t\tif (!number) {\n\t\t\t\treturn '+' + (0, _metadata.get_phone_code)(country_metadata);\n\t\t\t}\n\t\t\tvar national_number = format_national_number(number, 'International', false, country_metadata);\n\t\t\treturn '+' + (0, _metadata.get_phone_code)(country_metadata) + ' ' + national_number;\n\n\t\tcase 'International_plaintext':\n\t\t\treturn '+' + (0, _metadata.get_phone_code)(country_metadata) + input.phone;\n\n\t\tcase 'National':\n\t\t\tif (!number) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn format_national_number(number, 'National', false, country_metadata);\n\t}\n}\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly.  Therefore, we use \\d, so that the first\n// group actually used in the pattern will be matched.\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nvar FIRST_GROUP_PATTERN = exports.FIRST_GROUP_PATTERN = /(\\$\\d)/;\n\nfunction format_national_number_using_format(number, format, international, enforce_national_prefix, country_metadata) {\n\tvar format_pattern_matcher = new RegExp((0, _metadata.get_format_pattern)(format));\n\n\tvar national_prefix_formatting_rule = (0, _metadata.get_format_national_prefix_formatting_rule)(format, country_metadata);\n\n\t// National prefix is omitted if there's no national prefix formatting rule\n\t// set for this country, or when this rule is set but\n\t// national prefix is optional for this phone number format\n\t// (and it is not enforced explicitly)\n\tvar national_prefix_may_be_omitted = !national_prefix_formatting_rule || national_prefix_formatting_rule && (0, _metadata.get_format_national_prefix_is_optional_when_formatting)(format, country_metadata) && !enforce_national_prefix;\n\n\tif (!international && !national_prefix_may_be_omitted) {\n\t\treturn number.replace(format_pattern_matcher, (0, _metadata.get_format_format)(format).replace(FIRST_GROUP_PATTERN, national_prefix_formatting_rule));\n\t}\n\n\tvar formatted_number = number.replace(format_pattern_matcher, international ? (0, _metadata.get_format_international_format)(format) : (0, _metadata.get_format_format)(format));\n\n\tif (international) {\n\t\treturn local_to_international_style(formatted_number);\n\t}\n\n\treturn formatted_number;\n}\n\nfunction format_national_number(number, format_as, enforce_national_prefix, country_metadata) {\n\tvar format = choose_format_for_number((0, _metadata.get_formats)(country_metadata), number);\n\n\tif (!format) {\n\t\treturn number;\n\t}\n\n\treturn format_national_number_using_format(number, format, format_as === 'International', enforce_national_prefix, country_metadata);\n}\n\nfunction choose_format_for_number(available_formats, national_number) {\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = (0, _getIterator3.default)(available_formats), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _format = _step.value;\n\n\t\t\t// Validate leading digits\n\t\t\tif ((0, _metadata.get_format_leading_digits_patterns)(_format).length > 0) {\n\t\t\t\t// The last leading_digits_pattern is used here, as it is the most detailed\n\t\t\t\tvar last_leading_digits_pattern = (0, _metadata.get_format_leading_digits_patterns)(_format)[(0, _metadata.get_format_leading_digits_patterns)(_format).length - 1];\n\n\t\t\t\t// If leading digits don't match then move on to the next phone number format\n\t\t\t\tif (national_number.search(last_leading_digits_pattern) !== 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check that the national number matches the phone number format regular expression\n\t\t\tif ((0, _common.matches_entirely)(national_number, new RegExp((0, _metadata.get_format_pattern)(_format)))) {\n\t\t\t\treturn _format;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \""(999) 111-22-33\"" -> \""999 111 22 33\""\n//\nfunction local_to_international_style(local) {\n\treturn local\n\t// Remove brackets\n\t.replace(/[\\(\\)]/g, '')\n\t// Replace dashes with spaces\n\t.replace(/\\-/g, ' ').trim();\n}\n\n// Sort out arguments\nfunction sort_out_arguments() {\n\tvar first_argument = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar second_argument = arguments[1];\n\tvar third_argument = arguments[2];\n\tvar fourth_argument = arguments[3];\n\n\tvar input = void 0;\n\tvar format_type = void 0;\n\tvar metadata = void 0;\n\n\t// Sort out arguments\n\tif (typeof first_argument === 'string') {\n\t\t// If country code is supplied\n\t\tif (typeof third_argument === 'string') {\n\t\t\t// Will be `parse()`d later in code\n\t\t\tinput = {\n\t\t\t\tphone: first_argument,\n\t\t\t\tcountry: second_argument\n\t\t\t};\n\n\t\t\tformat_type = third_argument;\n\t\t\tmetadata = fourth_argument;\n\t\t}\n\t\t// Just an international phone number is supplied\n\t\telse {\n\t\t\t\t// Will be `parse()`d later in code\n\t\t\t\tinput = {\n\t\t\t\t\tphone: first_argument\n\t\t\t\t};\n\n\t\t\t\tif (typeof second_argument !== 'string') {\n\t\t\t\t\tthrow new Error('Format type argument not passed for `format()`');\n\t\t\t\t}\n\n\t\t\t\tformat_type = second_argument;\n\t\t\t\tmetadata = third_argument;\n\t\t\t}\n\t} else {\n\t\tinput = first_argument;\n\t\tformat_type = second_argument;\n\t\tmetadata = third_argument;\n\t}\n\n\t// Sanity check\n\tif (!metadata) {\n\t\tthrow new Error('Metadata not passed');\n\t}\n\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\tcase 'International_plaintext':\n\t\tcase 'National':\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error('Unknown format type argument passed to \""format()\"": \""' + format_type + '\""');\n\t}\n\n\treturn { input: input, format_type: format_type, metadata: metadata };\n}\n//# sourceMappingURL=format.js.map\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.default = get_number_type;\nexports.is_of_type = is_of_type;\nexports.sort_out_arguments = sort_out_arguments;\n\nvar _parse = __webpack_require__(4);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nvar _common = __webpack_require__(7);\n\nvar _metadata = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Finds out national phone number type (fixed line, mobile, etc)\nfunction get_number_type(first_argument, second_argument, third_argument) {\n\tvar _sort_out_arguments = sort_out_arguments(first_argument, second_argument, third_argument),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// Sanity check\n\n\n\tif (!metadata) {\n\t\tthrow new Error('Metadata not passed');\n\t}\n\n\t// When no input was passed\n\tif (!input) {\n\t\treturn;\n\t}\n\n\t// When `parse()` returned `{}`\n\t// meaning that the phone number is not a valid one.\n\tif (!input.country) {\n\t\treturn;\n\t}\n\n\tvar national_number = input.phone;\n\tvar country_metadata = metadata.countries[input.country];\n\n\t// The following is copy-pasted from the original function:\n\t// https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n\t// Is this national number even valid for this country\n\tif (!is_of_type(national_number, (0, _metadata.get_national_number_pattern)(country_metadata))) {\n\t\treturn; // 'UNKNOWN'\n\t}\n\n\tif (is_of_type(national_number, (0, _metadata.get_type_premium_rate)(country_metadata))) {\n\t\treturn 'PREMIUM_RATE';\n\t}\n\n\tif (is_of_type(national_number, (0, _metadata.get_type_toll_free)(country_metadata))) {\n\t\treturn 'TOLL_FREE';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, (0, _metadata.get_type_shared_cost)(country_metadata))) {\n\t\treturn 'SHARED_COST';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, (0, _metadata.get_type_voip)(country_metadata))) {\n\t\treturn 'VOIP';\n\t}\n\n\tif (is_of_type(national_number, (0, _metadata.get_type_personal_number)(country_metadata))) {\n\t\treturn 'PERSONAL_NUMBER';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, (0, _metadata.get_type_pager)(country_metadata))) {\n\t\treturn 'PAGER';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, (0, _metadata.get_type_uan)(country_metadata))) {\n\t\treturn 'UAN';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, (0, _metadata.get_type_voice_mail)(country_metadata))) {\n\t\treturn 'VOICEMAIL';\n\t}\n\n\t// Is it fixed line number\n\tif (is_of_type(national_number, (0, _metadata.get_type_fixed_line)(country_metadata))) {\n\t\t// Because duplicate regular expressions are removed\n\t\t// to reduce metadata size, if there's no \""mobile\"" pattern\n\t\t// then it means it was removed due to being a duplicate of some other pattern.\n\t\t//\n\t\tif (!(0, _metadata.get_type_mobile)(country_metadata)) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// Check if the number happens to qualify as both fixed line and mobile.\n\t\t// (no such country in the minimal metadata set)\n\t\t/* istanbul ignore if */\n\t\tif (is_of_type(national_number, (0, _metadata.get_type_mobile)(country_metadata))) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\treturn 'FIXED_LINE';\n\t}\n\n\tif (is_of_type(national_number, (0, _metadata.get_type_mobile)(country_metadata))) {\n\t\treturn 'MOBILE';\n\t}\n\n\t// return 'UNKNOWN'\n}\n\nfunction is_of_type(national_number, type) {\n\t// // Check if any possible number lengths are present;\n\t// // if so, we use them to avoid checking\n\t// // the validation pattern if they don't match.\n\t// // If they are absent, this means they match\n\t// // the general description, which we have\n\t// // already checked before a specific number type.\n\t// if (get_possible_lengths(type) &&\n\t// \tget_possible_lengths(type).indexOf(national_number.length) === -1)\n\t// {\n\t// \treturn false\n\t// }\n\n\t// get_type_pattern(type) === type\n\treturn (0, _common.matches_entirely)(national_number, type);\n}\n\n// Sort out arguments\nfunction sort_out_arguments(first_argument, second_argument, third_argument) {\n\tvar input = void 0;\n\tvar metadata = void 0;\n\n\tif (typeof first_argument === 'string') {\n\t\t// If country code is supplied\n\t\tif (typeof second_argument === 'string') {\n\t\t\tmetadata = third_argument;\n\n\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t// while this `validate` function needs to verify\n\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\tif ((0, _parse.is_viable_phone_number)(first_argument)) {\n\t\t\t\tinput = (0, _parse2.default)(first_argument, second_argument, metadata);\n\t\t\t}\n\t\t}\n\t\t// Just an international phone number is supplied\n\t\telse {\n\t\t\t\tmetadata = second_argument;\n\n\t\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t\t// while this `validate` function needs to verify\n\t\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\t\tif ((0, _parse.is_viable_phone_number)(first_argument)) {\n\t\t\t\t\tinput = (0, _parse2.default)(first_argument, metadata);\n\t\t\t\t}\n\t\t\t}\n\t} else {\n\t\t// The `first_argument` must be a valid phone number\n\t\t// as a whole, not just a part of it which gets parsed here.\n\t\tif (first_argument && first_argument.phone && (0, _parse.is_viable_phone_number)(first_argument.phone)) {\n\t\t\tinput = first_argument;\n\t\t}\n\n\t\tmetadata = second_argument;\n\t}\n\n\treturn { input: input, metadata: metadata };\n}\n//# sourceMappingURL=get number type.js.map\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(43), __esModule: true };\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\nmodule.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\nmodule.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(31)('keys')\n  , uid    = __webpack_require__(33);\nmodule.exports = function(key){\n  return shared[key] || (shared[key] = uid(key));\n};\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(25)\n  , defined = __webpack_require__(16);\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(18)\n  , document = __webpack_require__(2).document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n/***/ },\n/* 24 */\n/***/ function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(22);\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar LIBRARY        = __webpack_require__(56)\n  , $export        = __webpack_require__(9)\n  , redefine       = __webpack_require__(63)\n  , hide           = __webpack_require__(6)\n  , has            = __webpack_require__(10)\n  , Iterators      = __webpack_require__(11)\n  , $iterCreate    = __webpack_require__(54)\n  , setToStringTag = __webpack_require__(30)\n  , getPrototypeOf = __webpack_require__(60)\n  , ITERATOR       = __webpack_require__(3)('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject    = __webpack_require__(8)\n  , dPs         = __webpack_require__(58)\n  , enumBugKeys = __webpack_require__(24)\n  , IE_PROTO    = __webpack_require__(19)('IE_PROTO')\n  , Empty       = function(){ /* empty */ }\n  , PROTOTYPE   = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(23)('iframe')\n    , i      = enumBugKeys.length\n    , lt     = '<'\n    , gt     = '>'\n    , iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(52).appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n  var result;\n  if(O !== null){\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty;\n    Empty[PROTOTYPE] = null;\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys       = __webpack_require__(61)\n  , enumBugKeys = __webpack_require__(24);\n\nmodule.exports = Object.keys || function keys(O){\n  return $keys(O, enumBugKeys);\n};\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\nmodule.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(12).f\n  , has = __webpack_require__(10)\n  , TAG = __webpack_require__(3)('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(2)\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(16);\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n/***/ },\n/* 33 */\n/***/ function(module, exports) {\n\nvar id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n/***/ },\n/* 34 */\n/***/ function(module, exports) {\n\nmodule.exports = {\n\t\""country_phone_code_to_countries\"": {\n\t\t\""1\"": [\n\t\t\t\""US\"",\n\t\t\t\""AG\"",\n\t\t\t\""AI\"",\n\t\t\t\""AS\"",\n\t\t\t\""BB\"",\n\t\t\t\""BM\"",\n\t\t\t\""BS\"",\n\t\t\t\""CA\"",\n\t\t\t\""DM\"",\n\t\t\t\""DO\"",\n\t\t\t\""GD\"",\n\t\t\t\""GU\"",\n\t\t\t\""JM\"",\n\t\t\t\""KN\"",\n\t\t\t\""KY\"",\n\t\t\t\""LC\"",\n\t\t\t\""MP\"",\n\t\t\t\""MS\"",\n\t\t\t\""PR\"",\n\t\t\t\""SX\"",\n\t\t\t\""TC\"",\n\t\t\t\""TT\"",\n\t\t\t\""VC\"",\n\t\t\t\""VG\"",\n\t\t\t\""VI\""\n\t\t],\n\t\t\""7\"": [\n\t\t\t\""RU\"",\n\t\t\t\""KZ\""\n\t\t],\n\t\t\""20\"": [\n\t\t\t\""EG\""\n\t\t],\n\t\t\""27\"": [\n\t\t\t\""ZA\""\n\t\t],\n\t\t\""30\"": [\n\t\t\t\""GR\""\n\t\t],\n\t\t\""31\"": [\n\t\t\t\""NL\""\n\t\t],\n\t\t\""32\"": [\n\t\t\t\""BE\""\n\t\t],\n\t\t\""33\"": [\n\t\t\t\""FR\""\n\t\t],\n\t\t\""34\"": [\n\t\t\t\""ES\""\n\t\t],\n\t\t\""36\"": [\n\t\t\t\""HU\""\n\t\t],\n\t\t\""39\"": [\n\t\t\t\""IT\"",\n\t\t\t\""VA\""\n\t\t],\n\t\t\""40\"": [\n\t\t\t\""RO\""\n\t\t],\n\t\t\""41\"": [\n\t\t\t\""CH\""\n\t\t],\n\t\t\""43\"": [\n\t\t\t\""AT\""\n\t\t],\n\t\t\""44\"": [\n\t\t\t\""GB\"",\n\t\t\t\""GG\"",\n\t\t\t\""IM\"",\n\t\t\t\""JE\""\n\t\t],\n\t\t\""45\"": [\n\t\t\t\""DK\""\n\t\t],\n\t\t\""46\"": [\n\t\t\t\""SE\""\n\t\t],\n\t\t\""47\"": [\n\t\t\t\""NO\"",\n\t\t\t\""SJ\""\n\t\t],\n\t\t\""48\"": [\n\t\t\t\""PL\""\n\t\t],\n\t\t\""49\"": [\n\t\t\t\""DE\""\n\t\t],\n\t\t\""51\"": [\n\t\t\t\""PE\""\n\t\t],\n\t\t\""52\"": [\n\t\t\t\""MX\""\n\t\t],\n\t\t\""53\"": [\n\t\t\t\""CU\""\n\t\t],\n\t\t\""54\"": [\n\t\t\t\""AR\""\n\t\t],\n\t\t\""55\"": [\n\t\t\t\""BR\""\n\t\t],\n\t\t\""56\"": [\n\t\t\t\""CL\""\n\t\t],\n\t\t\""57\"": [\n\t\t\t\""CO\""\n\t\t],\n\t\t\""58\"": [\n\t\t\t\""VE\""\n\t\t],\n\t\t\""60\"": [\n\t\t\t\""MY\""\n\t\t],\n\t\t\""61\"": [\n\t\t\t\""AU\"",\n\t\t\t\""CC\"",\n\t\t\t\""CX\""\n\t\t],\n\t\t\""62\"": [\n\t\t\t\""ID\""\n\t\t],\n\t\t\""63\"": [\n\t\t\t\""PH\""\n\t\t],\n\t\t\""64\"": [\n\t\t\t\""NZ\""\n\t\t],\n\t\t\""65\"": [\n\t\t\t\""SG\""\n\t\t],\n\t\t\""66\"": [\n\t\t\t\""TH\""\n\t\t],\n\t\t\""81\"": [\n\t\t\t\""JP\""\n\t\t],\n\t\t\""82\"": [\n\t\t\t\""KR\""\n\t\t],\n\t\t\""84\"": [\n\t\t\t\""VN\""\n\t\t],\n\t\t\""86\"": [\n\t\t\t\""CN\""\n\t\t],\n\t\t\""90\"": [\n\t\t\t\""TR\""\n\t\t],\n\t\t\""91\"": [\n\t\t\t\""IN\""\n\t\t],\n\t\t\""92\"": [\n\t\t\t\""PK\""\n\t\t],\n\t\t\""93\"": [\n\t\t\t\""AF\""\n\t\t],\n\t\t\""94\"": [\n\t\t\t\""LK\""\n\t\t],\n\t\t\""95\"": [\n\t\t\t\""MM\""\n\t\t],\n\t\t\""98\"": [\n\t\t\t\""IR\""\n\t\t],\n\t\t\""211\"": [\n\t\t\t\""SS\""\n\t\t],\n\t\t\""212\"": [\n\t\t\t\""MA\"",\n\t\t\t\""EH\""\n\t\t],\n\t\t\""213\"": [\n\t\t\t\""DZ\""\n\t\t],\n\t\t\""216\"": [\n\t\t\t\""TN\""\n\t\t],\n\t\t\""218\"": [\n\t\t\t\""LY\""\n\t\t],\n\t\t\""220\"": [\n\t\t\t\""GM\""\n\t\t],\n\t\t\""221\"": [\n\t\t\t\""SN\""\n\t\t],\n\t\t\""222\"": [\n\t\t\t\""MR\""\n\t\t],\n\t\t\""223\"": [\n\t\t\t\""ML\""\n\t\t],\n\t\t\""224\"": [\n\t\t\t\""GN\""\n\t\t],\n\t\t\""225\"": [\n\t\t\t\""CI\""\n\t\t],\n\t\t\""226\"": [\n\t\t\t\""BF\""\n\t\t],\n\t\t\""227\"": [\n\t\t\t\""NE\""\n\t\t],\n\t\t\""228\"": [\n\t\t\t\""TG\""\n\t\t],\n\t\t\""229\"": [\n\t\t\t\""BJ\""\n\t\t],\n\t\t\""230\"": [\n\t\t\t\""MU\""\n\t\t],\n\t\t\""231\"": [\n\t\t\t\""LR\""\n\t\t],\n\t\t\""232\"": [\n\t\t\t\""SL\""\n\t\t],\n\t\t\""233\"": [\n\t\t\t\""GH\""\n\t\t],\n\t\t\""234\"": [\n\t\t\t\""NG\""\n\t\t],\n\t\t\""235\"": [\n\t\t\t\""TD\""\n\t\t],\n\t\t\""236\"": [\n\t\t\t\""CF\""\n\t\t],\n\t\t\""237\"": [\n\t\t\t\""CM\""\n\t\t],\n\t\t\""238\"": [\n\t\t\t\""CV\""\n\t\t],\n\t\t\""239\"": [\n\t\t\t\""ST\""\n\t\t],\n\t\t\""240\"": [\n\t\t\t\""GQ\""\n\t\t],\n\t\t\""241\"": [\n\t\t\t\""GA\""\n\t\t],\n\t\t\""242\"": [\n\t\t\t\""CG\""\n\t\t],\n\t\t\""243\"": [\n\t\t\t\""CD\""\n\t\t],\n\t\t\""244\"": [\n\t\t\t\""AO\""\n\t\t],\n\t\t\""245\"": [\n\t\t\t\""GW\""\n\t\t],\n\t\t\""246\"": [\n\t\t\t\""IO\""\n\t\t],\n\t\t\""247\"": [\n\t\t\t\""AC\""\n\t\t],\n\t\t\""248\"": [\n\t\t\t\""SC\""\n\t\t],\n\t\t\""249\"": [\n\t\t\t\""SD\""\n\t\t],\n\t\t\""250\"": [\n\t\t\t\""RW\""\n\t\t],\n\t\t\""251\"": [\n\t\t\t\""ET\""\n\t\t],\n\t\t\""252\"": [\n\t\t\t\""SO\""\n\t\t],\n\t\t\""253\"": [\n\t\t\t\""DJ\""\n\t\t],\n\t\t\""254\"": [\n\t\t\t\""KE\""\n\t\t],\n\t\t\""255\"": [\n\t\t\t\""TZ\""\n\t\t],\n\t\t\""256\"": [\n\t\t\t\""UG\""\n\t\t],\n\t\t\""257\"": [\n\t\t\t\""BI\""\n\t\t],\n\t\t\""258\"": [\n\t\t\t\""MZ\""\n\t\t],\n\t\t\""260\"": [\n\t\t\t\""ZM\""\n\t\t],\n\t\t\""261\"": [\n\t\t\t\""MG\""\n\t\t],\n\t\t\""262\"": [\n\t\t\t\""RE\"",\n\t\t\t\""YT\""\n\t\t],\n\t\t\""263\"": [\n\t\t\t\""ZW\""\n\t\t],\n\t\t\""264\"": [\n\t\t\t\""NA\""\n\t\t],\n\t\t\""265\"": [\n\t\t\t\""MW\""\n\t\t],\n\t\t\""266\"": [\n\t\t\t\""LS\""\n\t\t],\n\t\t\""267\"": [\n\t\t\t\""BW\""\n\t\t],\n\t\t\""268\"": [\n\t\t\t\""SZ\""\n\t\t],\n\t\t\""269\"": [\n\t\t\t\""KM\""\n\t\t],\n\t\t\""290\"": [\n\t\t\t\""SH\"",\n\t\t\t\""TA\""\n\t\t],\n\t\t\""291\"": [\n\t\t\t\""ER\""\n\t\t],\n\t\t\""297\"": [\n\t\t\t\""AW\""\n\t\t],\n\t\t\""298\"": [\n\t\t\t\""FO\""\n\t\t],\n\t\t\""299\"": [\n\t\t\t\""GL\""\n\t\t],\n\t\t\""350\"": [\n\t\t\t\""GI\""\n\t\t],\n\t\t\""351\"": [\n\t\t\t\""PT\""\n\t\t],\n\t\t\""352\"": [\n\t\t\t\""LU\""\n\t\t],\n\t\t\""353\"": [\n\t\t\t\""IE\""\n\t\t],\n\t\t\""354\"": [\n\t\t\t\""IS\""\n\t\t],\n\t\t\""355\"": [\n\t\t\t\""AL\""\n\t\t],\n\t\t\""356\"": [\n\t\t\t\""MT\""\n\t\t],\n\t\t\""357\"": [\n\t\t\t\""CY\""\n\t\t],\n\t\t\""358\"": [\n\t\t\t\""FI\"",\n\t\t\t\""AX\""\n\t\t],\n\t\t\""359\"": [\n\t\t\t\""BG\""\n\t\t],\n\t\t\""370\"": [\n\t\t\t\""LT\""\n\t\t],\n\t\t\""371\"": [\n\t\t\t\""LV\""\n\t\t],\n\t\t\""372\"": [\n\t\t\t\""EE\""\n\t\t],\n\t\t\""373\"": [\n\t\t\t\""MD\""\n\t\t],\n\t\t\""374\"": [\n\t\t\t\""AM\""\n\t\t],\n\t\t\""375\"": [\n\t\t\t\""BY\""\n\t\t],\n\t\t\""376\"": [\n\t\t\t\""AD\""\n\t\t],\n\t\t\""377\"": [\n\t\t\t\""MC\""\n\t\t],\n\t\t\""378\"": [\n\t\t\t\""SM\""\n\t\t],\n\t\t\""380\"": [\n\t\t\t\""UA\""\n\t\t],\n\t\t\""381\"": [\n\t\t\t\""RS\""\n\t\t],\n\t\t\""382\"": [\n\t\t\t\""ME\""\n\t\t],\n\t\t\""385\"": [\n\t\t\t\""HR\""\n\t\t],\n\t\t\""386\"": [\n\t\t\t\""SI\""\n\t\t],\n\t\t\""387\"": [\n\t\t\t\""BA\""\n\t\t],\n\t\t\""389\"": [\n\t\t\t\""MK\""\n\t\t],\n\t\t\""420\"": [\n\t\t\t\""CZ\""\n\t\t],\n\t\t\""421\"": [\n\t\t\t\""SK\""\n\t\t],\n\t\t\""423\"": [\n\t\t\t\""LI\""\n\t\t],\n\t\t\""500\"": [\n\t\t\t\""FK\""\n\t\t],\n\t\t\""501\"": [\n\t\t\t\""BZ\""\n\t\t],\n\t\t\""502\"": [\n\t\t\t\""GT\""\n\t\t],\n\t\t\""503\"": [\n\t\t\t\""SV\""\n\t\t],\n\t\t\""504\"": [\n\t\t\t\""HN\""\n\t\t],\n\t\t\""505\"": [\n\t\t\t\""NI\""\n\t\t],\n\t\t\""506\"": [\n\t\t\t\""CR\""\n\t\t],\n\t\t\""507\"": [\n\t\t\t\""PA\""\n\t\t],\n\t\t\""508\"": [\n\t\t\t\""PM\""\n\t\t],\n\t\t\""509\"": [\n\t\t\t\""HT\""\n\t\t],\n\t\t\""590\"": [\n\t\t\t\""GP\"",\n\t\t\t\""BL\"",\n\t\t\t\""MF\""\n\t\t],\n\t\t\""591\"": [\n\t\t\t\""BO\""\n\t\t],\n\t\t\""592\"": [\n\t\t\t\""GY\""\n\t\t],\n\t\t\""593\"": [\n\t\t\t\""EC\""\n\t\t],\n\t\t\""594\"": [\n\t\t\t\""GF\""\n\t\t],\n\t\t\""595\"": [\n\t\t\t\""PY\""\n\t\t],\n\t\t\""596\"": [\n\t\t\t\""MQ\""\n\t\t],\n\t\t\""597\"": [\n\t\t\t\""SR\""\n\t\t],\n\t\t\""598\"": [\n\t\t\t\""UY\""\n\t\t],\n\t\t\""599\"": [\n\t\t\t\""CW\"",\n\t\t\t\""BQ\""\n\t\t],\n\t\t\""670\"": [\n\t\t\t\""TL\""\n\t\t],\n\t\t\""672\"": [\n\t\t\t\""NF\""\n\t\t],\n\t\t\""673\"": [\n\t\t\t\""BN\""\n\t\t],\n\t\t\""674\"": [\n\t\t\t\""NR\""\n\t\t],\n\t\t\""675\"": [\n\t\t\t\""PG\""\n\t\t],\n\t\t\""676\"": [\n\t\t\t\""TO\""\n\t\t],\n\t\t\""677\"": [\n\t\t\t\""SB\""\n\t\t],\n\t\t\""678\"": [\n\t\t\t\""VU\""\n\t\t],\n\t\t\""679\"": [\n\t\t\t\""FJ\""\n\t\t],\n\t\t\""680\"": [\n\t\t\t\""PW\""\n\t\t],\n\t\t\""681\"": [\n\t\t\t\""WF\""\n\t\t],\n\t\t\""682\"": [\n\t\t\t\""CK\""\n\t\t],\n\t\t\""683\"": [\n\t\t\t\""NU\""\n\t\t],\n\t\t\""685\"": [\n\t\t\t\""WS\""\n\t\t],\n\t\t\""686\"": [\n\t\t\t\""KI\""\n\t\t],\n\t\t\""687\"": [\n\t\t\t\""NC\""\n\t\t],\n\t\t\""688\"": [\n\t\t\t\""TV\""\n\t\t],\n\t\t\""689\"": [\n\t\t\t\""PF\""\n\t\t],\n\t\t\""690\"": [\n\t\t\t\""TK\""\n\t\t],\n\t\t\""691\"": [\n\t\t\t\""FM\""\n\t\t],\n\t\t\""692\"": [\n\t\t\t\""MH\""\n\t\t],\n\t\t\""800\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""808\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""850\"": [\n\t\t\t\""KP\""\n\t\t],\n\t\t\""852\"": [\n\t\t\t\""HK\""\n\t\t],\n\t\t\""853\"": [\n\t\t\t\""MO\""\n\t\t],\n\t\t\""855\"": [\n\t\t\t\""KH\""\n\t\t],\n\t\t\""856\"": [\n\t\t\t\""LA\""\n\t\t],\n\t\t\""870\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""878\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""880\"": [\n\t\t\t\""BD\""\n\t\t],\n\t\t\""881\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""882\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""883\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""886\"": [\n\t\t\t\""TW\""\n\t\t],\n\t\t\""888\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""960\"": [\n\t\t\t\""MV\""\n\t\t],\n\t\t\""961\"": [\n\t\t\t\""LB\""\n\t\t],\n\t\t\""962\"": [\n\t\t\t\""JO\""\n\t\t],\n\t\t\""963\"": [\n\t\t\t\""SY\""\n\t\t],\n\t\t\""964\"": [\n\t\t\t\""IQ\""\n\t\t],\n\t\t\""965\"": [\n\t\t\t\""KW\""\n\t\t],\n\t\t\""966\"": [\n\t\t\t\""SA\""\n\t\t],\n\t\t\""967\"": [\n\t\t\t\""YE\""\n\t\t],\n\t\t\""968\"": [\n\t\t\t\""OM\""\n\t\t],\n\t\t\""970\"": [\n\t\t\t\""PS\""\n\t\t],\n\t\t\""971\"": [\n\t\t\t\""AE\""\n\t\t],\n\t\t\""972\"": [\n\t\t\t\""IL\""\n\t\t],\n\t\t\""973\"": [\n\t\t\t\""BH\""\n\t\t],\n\t\t\""974\"": [\n\t\t\t\""QA\""\n\t\t],\n\t\t\""975\"": [\n\t\t\t\""BT\""\n\t\t],\n\t\t\""976\"": [\n\t\t\t\""MN\""\n\t\t],\n\t\t\""977\"": [\n\t\t\t\""NP\""\n\t\t],\n\t\t\""979\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""992\"": [\n\t\t\t\""TJ\""\n\t\t],\n\t\t\""993\"": [\n\t\t\t\""TM\""\n\t\t],\n\t\t\""994\"": [\n\t\t\t\""AZ\""\n\t\t],\n\t\t\""995\"": [\n\t\t\t\""GE\""\n\t\t],\n\t\t\""996\"": [\n\t\t\t\""KG\""\n\t\t],\n\t\t\""998\"": [\n\t\t\t\""UZ\""\n\t\t]\n\t},\n\t\""countries\"": {\n\t\t\""AC\"": [\n\t\t\t\""247\"",\n\t\t\t\""[46]\\\\d{4}|[01589]\\\\d{5}\""\n\t\t],\n\t\t\""AD\"": [\n\t\t\t\""376\"",\n\t\t\t\""[16]\\\\d{5,8}|[37-9]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[137-9]|6[0-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""180[02]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""690\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""AE\"": [\n\t\t\t\""971\"",\n\t\t\t\""[2-79]\\\\d{7,8}|800\\\\d{2,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-4679])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-4679][2-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([479]00)(\\\\d)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[479]0\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([68]00)(\\\\d{2,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""60|8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""AF\"": [\n\t\t\t\""93\"",\n\t\t\t\""[2-7]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-7]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-7]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""AG\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""268\""\n\t\t],\n\t\t\""AI\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""264\""\n\t\t],\n\t\t\""AL\"": [\n\t\t\t\""355\"",\n\t\t\t\""[2-57]\\\\d{7}|6\\\\d{8}|8\\\\d{5,7}|9\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(4)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[0-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2358][2-5]|4[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235][16-9]|8[016-9]|[79]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""AM\"": [\n\t\t\t\""374\"",\n\t\t\t\""[1-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|47\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[1349]|[5-7]|9[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8|90\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0 $1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""AO\"": [\n\t\t\t\""244\"",\n\t\t\t\""[29]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""AR\"": [\n\t\t\t\""54\"",\n\t\t\t\""11\\\\d{8}|[2368]\\\\d{9}|9\\\\d{10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([68]\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[68]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(11)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$2 15-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""911\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3-$4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$2 15-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9(?:2[234689]|3[3-8])\"",\n\t\t\t\t\t\t\""9(?:2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[1-358]|5[138]|6[24]|7[069]|8[013578]))\"",\n\t\t\t\t\t\t\""9(?:2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3[456]|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45])))\"",\n\t\t\t\t\t\t\""9(?:2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3(?:4|5[014]|6[1239])|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45])))\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3-$4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$2 15-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[23]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3-$4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(11)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[1-358]|5[138]|6[24]|7[069]|8[013578])\"",\n\t\t\t\t\t\t\""2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3[456]|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45]))\"",\n\t\t\t\t\t\t\""2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3(?:4|5[014]|6[1239])|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45]))\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\t\""true\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\t\""0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))?15)?\"",\n\t\t\t\""9$1\""\n\t\t],\n\t\t\""AS\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""684\""\n\t\t],\n\t\t\""AT\"": [\n\t\t\t\""43\"",\n\t\t\t\""[1-9]\\\\d{3,12}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(116\\\\d{3})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""116\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3,12})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5[079]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5[079]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{4})(\\\\d{4,7})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5[079]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,10})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""316|46|51|732|6(?:5[0-3579]|[6-9])|7(?:[28]0)|[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[5-79])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""AU\"": [\n\t\t\t\""61\"",\n\t\t\t\""1\\\\d{4,9}|[2-578]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2378])(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2378]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[45]|14\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[38]0|90)\"",\n\t\t\t\t\t\t\""1(?:[38]00|90)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(180)(2\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1802\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[13]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[679]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(13)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""[237]\\\\d{8}|8(?:[6-8]\\\\d{3}|9(?:[02-9]\\\\d{2}|1(?:[0-57-9]\\\\d|6[0135-9])))\\\\d{4}\"",\n\t\t\t\t\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-3]\\\\d|4[47-9]|5[0-25-9]|6[6-9]|7[02-9]|8[147-9]|9[017-9])\\\\d{6}\"",\n\t\t\t\t\""180(?:0\\\\d{3}|2)\\\\d{3}\"",\n\t\t\t\t\""19(?:0[0126]\\\\d|[679])\\\\d{5}\"",\n\t\t\t\t\""500\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""16\\\\d{3,7}\"",\n\t\t\t\t\""550\\\\d{6}\"",\n\t\t\t\t\""13(?:00\\\\d{3}|45[0-4]|\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""AW\"": [\n\t\t\t\""297\"",\n\t\t\t\""[25-9]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""AX\"": [\n\t\t\t\""358\"",\n\t\t\t\""[15]\\\\d{6,9}|2\\\\d{4,9}|3\\\\d{5,9}|4\\\\d{7,10}|[67]\\\\d{7,9}|8\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[16-8]0|300)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(116\\\\d{3})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""116\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[3-9]|2[09]|4|50|7(?:[13]|5[03-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{6,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[25689][1-8]|3(?:0[1-9]|[1-8])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(39\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""39\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""18[1-8]\\\\d{4,6}\"",\n\t\t\t\t\""4(?:[0-8]\\\\d{6,8}|9\\\\d{9})|50\\\\d{6,8}\"",\n\t\t\t\t\""800\\\\d{5,6}\"",\n\t\t\t\t\""[67]00\\\\d{5,6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""10(?:0\\\\d{4,6}|[1-9]\\\\d{5,7})|2(?:0(?:0\\\\d{4,6}|[13-8]\\\\d{5,7}|2(?:[023]\\\\d{4,5}|[14-9]\\\\d{4,6})|9(?:[0-7]\\\\d{4,6}|[89]\\\\d{1,6}))|9\\\\d{6,8})|3(?:0(?:0\\\\d{3,7}|[1-9]\\\\d{5,7})|93\\\\d{5,7})|60(?:[12]\\\\d{5,6}|6\\\\d{7})|7(?:1\\\\d{7}|3\\\\d{8}|5[03-9]\\\\d{5,6})\""\n\t\t\t]\n\t\t],\n\t\t\""AZ\"": [\n\t\t\t\""994\"",\n\t\t\t\""[1-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:1[28]|2(?:[45]2|[0-36])|365)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-8]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""BA\"": [\n\t\t\t\""387\"",\n\t\t\t\""[3-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[1-356]|[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[047]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""BB\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""246\""\n\t\t],\n\t\t\""BD\"": [\n\t\t\t\""880\"",\n\t\t\t\""[2-79]\\\\d{5,9}|1\\\\d{9}|8[0-7]\\\\d{4,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-79]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|3(?:0|[2-58]2)|4(?:0|[25]2|3[23]|[4689][25])|5(?:[02-578]2|6[25])|6(?:[0347-9]2|[26][25])|7[02-9]2|8(?:[023][23]|[4-7]2)|9(?:[02][23]|[458]2|6[016])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-79][2-9]|8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""BE\"": [\n\t\t\t\""32\"",\n\t\t\t\""[1-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[6-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]|4[23]|9[2-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[156]|7[018]|8(?:0[1-9]|[1-79])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:80|9)0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""BF\"": [\n\t\t\t\""226\"",\n\t\t\t\""[25-7]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BG\"": [\n\t\t\t\""359\"",\n\t\t\t\""[23567]\\\\d{5,7}|[489]\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""43[124-7]|70[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""43[124-7]|70[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[78]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""999\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""48|8[7-9]|9[08]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""BH\"": [\n\t\t\t\""973\"",\n\t\t\t\""[136-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BI\"": [\n\t\t\t\""257\"",\n\t\t\t\""[267]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BJ\"": [\n\t\t\t\""229\"",\n\t\t\t\""[2689]\\\\d{7}|7\\\\d{3}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BL\"": [\n\t\t\t\""590\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([56]90)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""590(?:2[7-9]|5[12]|87)\\\\d{4}\"",\n\t\t\t\t\""690(?:0[0-7]|[1-9]\\\\d)\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""BM\"": [\n\t\t\t\""1\"",\n\t\t\t\""[4589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""441\""\n\t\t],\n\t\t\""BN\"": [\n\t\t\t\""673\"",\n\t\t\t\""[2-578]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-578]\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BO\"": [\n\t\t\t\""591\"",\n\t\t\t\""[23467]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([234])(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[234]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([67]\\\\d{7})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[67]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""0(1\\\\d)?\""\n\t\t],\n\t\t\""BQ\"": [\n\t\t\t\""599\"",\n\t\t\t\""[347]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:318[023]|41(?:6[023]|70)|7(?:1[578]|50)\\\\d)\\\\d{3}\"",\n\t\t\t\t\""(?:31(?:8[14-8]|9[14578])|416[145-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""BR\"": [\n\t\t\t\""55\"",\n\t\t\t\""[1-46-9]\\\\d{7,10}|5(?:[0-4]\\\\d{7,9}|5(?:[2-8]\\\\d{7}|9\\\\d{7,8}))\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-9][1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[14689][1-9]|2[12478]|3[1-578]|5[1-5]|7[13-579])9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:300|40(?:0|20))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3589]00)(\\\\d{2,3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3589]00\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""0(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\"",\n\t\t\t\""$2\""\n\t\t],\n\t\t\""BS\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""242\""\n\t\t],\n\t\t\""BT\"": [\n\t\t\t\""975\"",\n\t\t\t\""[1-8]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|77\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-8])(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-68]|7[246]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BW\"": [\n\t\t\t\""267\"",\n\t\t\t\""[2-79]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(90)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BY\"": [\n\t\t\t\""375\"",\n\t\t\t\""[1-4]\\\\d{8}|800\\\\d{3,7}|[89]\\\\d{9,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""17[0-3589]|2[4-9]|[34]\"",\n\t\t\t\t\t\t\""17(?:[02358]|1[0-2]|9[0189])|2[4-9]|[34]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:5[24]|6[235]|7[467])|2(?:1[246]|2[25]|3[26])\"",\n\t\t\t\t\t\t\""1(?:5[24]|6(?:2|3[04-9]|5[0346-9])|7(?:[46]|7[37-9]))|2(?:1[246]|2[25]|3[26])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\"",\n\t\t\t\t\t\t\""1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[01]|9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(82\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""82\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{2})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\tnull,\n\t\t\t\""8?0?\""\n\t\t],\n\t\t\""BZ\"": [\n\t\t\t\""501\"",\n\t\t\t\""[2-8]\\\\d{6}|0\\\\d{10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0)(800)(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CA\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2-9]\\\\d{9}|3\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|48|79|8[17])|6(?:0[04]|13|22|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}|310\\\\d{4}\"",\n\t\t\t\t\""(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|48|79|8[17])|6(?:0[04]|13|22|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}\"",\n\t\t\t\t\""8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}|310\\\\d{4}\"",\n\t\t\t\t\""900[2-9]\\\\d{6}\"",\n\t\t\t\t\""5(?:00|22|33|44|66|77|88)[2-9]\\\\d{6}\""\n\t\t\t]\n\t\t],\n\t\t\""CC\"": [\n\t\t\t\""61\"",\n\t\t\t\""[1458]\\\\d{5,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2378])(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2378]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[45]|14\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[38]0|90)\"",\n\t\t\t\t\t\t\""1(?:[38]00|90)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(180)(2\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1802\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[13]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[679]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(13)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""89162\\\\d{4}\"",\n\t\t\t\t\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-2]\\\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[02-9]|8[147-9]|9[017-9])\\\\d{6}\"",\n\t\t\t\t\""180(?:0\\\\d{3}|2)\\\\d{3}\"",\n\t\t\t\t\""190[0126]\\\\d{6}\"",\n\t\t\t\t\""500\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""550\\\\d{6}\"",\n\t\t\t\t\""13(?:00\\\\d{2})?\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""CD\"": [\n\t\t\t\""243\"",\n\t\t\t\""[2-6]\\\\d{6}|[18]\\\\d{6,8}|9\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""12\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[0-2459]|9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""88\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-6]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""CF\"": [\n\t\t\t\""236\"",\n\t\t\t\""[278]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CG\"": [\n\t\t\t\""242\"",\n\t\t\t\""[028]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""801\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[02]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CH\"": [\n\t\t\t\""41\"",\n\t\t\t\""[2-9]\\\\d{8}|860\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-9]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-7]|[89]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[047]|90\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""860\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""CI\"": [\n\t\t\t\""225\"",\n\t\t\t\""[02-8]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CK\"": [\n\t\t\t\""682\"",\n\t\t\t\""[2-8]\\\\d{4}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CL\"": [\n\t\t\t\""56\"",\n\t\t\t\""(?:[2-9]|600|123)\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[23]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[357]|4[1-35]|6[13-57]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(44)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""44\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([68]00)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""60|8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(600)(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""60\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1230)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""219\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\t\""0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))\""\n\t\t],\n\t\t\""CM\"": [\n\t\t\t\""237\"",\n\t\t\t\""[2368]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([26])(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]|88\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CN\"": [\n\t\t\t\""86\"",\n\t\t\t\""[1-7]\\\\d{6,11}|8[0-357-9]\\\\d{6,9}|9\\\\d{7,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80[2678]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([48]00)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[48]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:10|2\\\\d)[19]\"",\n\t\t\t\t\t\t\""(?:10|2\\\\d)(?:10|9[56])\"",\n\t\t\t\t\t\t\""(?:10|2\\\\d)(?:100|9[56])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-9]\"",\n\t\t\t\t\t\t\""[3-9]\\\\d{2}[19]\"",\n\t\t\t\t\t\t\""[3-9]\\\\d{2}(?:10|9[56])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(21)(\\\\d{4})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([12]\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""10[1-9]|2[02-9]\"",\n\t\t\t\t\t\t\""10[1-9]|2[02-9]\"",\n\t\t\t\t\t\t\""10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7\\\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:11|7[179])|4(?:[15]1|3[1-35])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:[57]1|98)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""807\"",\n\t\t\t\t\t\t\""8078\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[3-578]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(10800)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""108\"",\n\t\t\t\t\t\t\""1080\"",\n\t\t\t\t\t\t\""10800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""950\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""(1(?:[129]\\\\d{3}|79\\\\d{2}))|0\""\n\t\t],\n\t\t\""CO\"": [\n\t\t\t\""57\"",\n\t\t\t\""(?:[13]\\\\d{0,3}|[24-8])\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:8[2-9]|9[0-3]|[2-7])|[24-8]\"",\n\t\t\t\t\t\t\""1(?:8[2-9]|9(?:09|[1-3])|[2-7])|[24-8]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3})(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:80|9[04])\"",\n\t\t\t\t\t\t\""1(?:800|9(?:0[01]|4[78]))\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""0([3579]|4(?:44|56))?\""\n\t\t],\n\t\t\""CR\"": [\n\t\t\t\""506\"",\n\t\t\t\""[24-9]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24-7]|8[3-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""(19(?:0[012468]|1[09]|20|66|77|99))\""\n\t\t],\n\t\t\""CU\"": [\n\t\t\t\""53\"",\n\t\t\t\""[2-57]\\\\d{5,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{6,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""CV\"": [\n\t\t\t\""238\"",\n\t\t\t\""[259]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CW\"": [\n\t\t\t\""599\"",\n\t\t\t\""[169]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""9(?:[48]\\\\d{2}|50\\\\d|7(?:2[0-24]|[34]\\\\d|6[35-7]|77|8[7-9]))\\\\d{4}\"",\n\t\t\t\t\""9(?:5(?:[12467]\\\\d|3[01])|6(?:[15-9]\\\\d|3[01]))\\\\d{4}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""955\\\\d{5}\"",\n\t\t\t\tnull,\n\t\t\t\t\""60[0-2]\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""CX\"": [\n\t\t\t\""61\"",\n\t\t\t\""[1458]\\\\d{5,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2378])(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2378]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[45]|14\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[38]0|90)\"",\n\t\t\t\t\t\t\""1(?:[38]00|90)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(180)(2\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1802\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[13]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[679]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(13)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""89164\\\\d{4}\"",\n\t\t\t\t\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-2]\\\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[02-9]|8[147-9]|9[017-9])\\\\d{6}\"",\n\t\t\t\t\""180(?:0\\\\d{3}|2)\\\\d{3}\"",\n\t\t\t\t\""190[0126]\\\\d{6}\"",\n\t\t\t\t\""500\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""550\\\\d{6}\"",\n\t\t\t\t\""13(?:00\\\\d{2})?\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""CY\"": [\n\t\t\t\""357\"",\n\t\t\t\""[257-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CZ\"": [\n\t\t\t\""420\"",\n\t\t\t\""[2-8]\\\\d{8}|9\\\\d{8,11}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-8]|9[015-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(96\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""96\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[36]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""DE\"": [\n\t\t\t\""49\"",\n\t\t\t\""[1-35-9]\\\\d{3,14}|4(?:[0-8]\\\\d{3,12}|9(?:[0-37]\\\\d|4(?:[1-35-8]|4\\\\d?)|5\\\\d{1,2}|6[1-8]\\\\d?)\\\\d{2,8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{2})(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(15\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15[0568]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,11})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[02]|40|[68]9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,11})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:\\\\d1|0[2389]|1[24]|28|34)|3(?:[3-9][15]|40)|[4-8][1-9]1|9(?:06|[1-9]1)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2,11})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24-6]|[7-9](?:\\\\d[1-9]|[1-9]\\\\d)|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])\"",\n\t\t\t\t\t\t\""[24-6]|[7-9](?:\\\\d[1-9]|[1-9]\\\\d)|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|4[1246]|6[1-4]|7[1346]|8[13568]|9[1246])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(3\\\\d{4})(\\\\d{1,10})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{7,12})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d)(\\\\d{4,10})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:18|90)0|137\"",\n\t\t\t\t\t\t\""1(?:37|80)|900[1359]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{2})(\\\\d{5,11})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""181\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(18\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""185\"",\n\t\t\t\t\t\t\""1850\"",\n\t\t\t\t\t\t\""18500\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(18\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""18[68]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(18\\\\d)(\\\\d{8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""18[2-579]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(700)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""700\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(138)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""138\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(15[013-68])(\\\\d{2})(\\\\d{8})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15[013-68]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(15[279]\\\\d)(\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15[279]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[67]\\\\d)(\\\\d{2})(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:6[023]|7)\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""DJ\"": [\n\t\t\t\""253\"",\n\t\t\t\""[27]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""DK\"": [\n\t\t\t\""45\"",\n\t\t\t\""[2-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""DM\"": [\n\t\t\t\""1\"",\n\t\t\t\""[57-9]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""767\""\n\t\t],\n\t\t\""DO\"": [\n\t\t\t\""1\"",\n\t\t\t\""[589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""8[024]9\""\n\t\t],\n\t\t\""DZ\"": [\n\t\t\t\""213\"",\n\t\t\t\""(?:[1-4]|[5-9]\\\\d)\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-4]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([5-8]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[5-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""EC\"": [\n\t\t\t\""593\"",\n\t\t\t\""1\\\\d{9,10}|[2-8]\\\\d{7}|9\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[247]|[356][2-8]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1800)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""EE\"": [\n\t\t\t\""372\"",\n\t\t\t\""1\\\\d{3,4}|[3-9]\\\\d{6,7}|800\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3-79]\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]\"",\n\t\t\t\t\t\t\""[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(70)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8000)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8000\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([458]\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""40|5|8(?:00|[1-5])\"",\n\t\t\t\t\t\t\""40|5|8(?:00[1-9]|[1-5])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""EG\"": [\n\t\t\t\""20\"",\n\t\t\t\""1\\\\d{4,9}|[2456]\\\\d{8}|3\\\\d{7}|[89]\\\\d{8,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[012]|[89]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[35]|[4-6]|[89][2-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""EH\"": [\n\t\t\t\""212\"",\n\t\t\t\""[5-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([5-7]\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:2[015-7]|3[0-4])|[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:2[2-489]|3[5-9]|92)|892\"",\n\t\t\t\t\t\t\""5(?:2(?:[2-48]|9[0-7])|3(?:[5-79]|8[0-7])|924)|892\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:29|38)\"",\n\t\t\t\t\t\t\""5(?:29|38)[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([5]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:4[067]|5[03])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8[09])(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:0|9[013-9])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""528[89]\""\n\t\t],\n\t\t\""ER\"": [\n\t\t\t\""291\"",\n\t\t\t\""[178]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ES\"": [\n\t\t\t\""34\"",\n\t\t\t\""[5-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([89]00)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([5-9]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[568]|[79][0-8]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""ET\"": [\n\t\t\t\""251\"",\n\t\t\t\""[1-59]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-59]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""FI\"": [\n\t\t\t\""358\"",\n\t\t\t\""[156]\\\\d{6,9}|2\\\\d{4,9}|3\\\\d{5,9}|4\\\\d{7,10}|7\\\\d{7,9}|[89]\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[16-8]0|300)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(116\\\\d{3})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""116\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[3-9]|2[09]|4|50|7(?:[13]|5[03-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{6,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[25689][1-8]|3(?:0[1-9]|[1-8])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(39\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""39\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""1[3-79][1-8]\\\\d{4,6}|[235689][1-8]\\\\d{5,7}\"",\n\t\t\t\t\""4(?:[0-8]\\\\d{6,8}|9\\\\d{9})|50\\\\d{6,8}\"",\n\t\t\t\t\""800\\\\d{5,6}\"",\n\t\t\t\t\""[67]00\\\\d{5,6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""10(?:0\\\\d{4,6}|[1-9]\\\\d{5,7})|2(?:0(?:0\\\\d{4,6}|[13-8]\\\\d{5,7}|2(?:[023]\\\\d{4,5}|[14-9]\\\\d{4,6})|9(?:[0-7]\\\\d{4,6}|[89]\\\\d{1,6}))|9\\\\d{6,8})|3(?:0(?:0\\\\d{3,7}|[1-9]\\\\d{5,7})|93\\\\d{5,7})|60(?:[12]\\\\d{5,6}|6\\\\d{7})|7(?:1\\\\d{7}|3\\\\d{8}|5[03-9]\\\\d{5,6})\""\n\t\t\t]\n\t\t],\n\t\t\""FJ\"": [\n\t\t\t\""679\"",\n\t\t\t\""[35-9]\\\\d{6}|0\\\\d{10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""FK\"": [\n\t\t\t\""500\"",\n\t\t\t\""[2-7]\\\\d{4}\""\n\t\t],\n\t\t\""FM\"": [\n\t\t\t\""691\"",\n\t\t\t\""[39]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""FO\"": [\n\t\t\t\""298\"",\n\t\t\t\""[2-9]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{6})\"",\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""(10(?:01|[12]0|88))\""\n\t\t],\n\t\t\""FR\"": [\n\t\t\t\""33\"",\n\t\t\t\""[1-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-79])(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-79]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0 $1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""GA\"": [\n\t\t\t\""241\"",\n\t\t\t\""0?\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-7]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GB\"": [\n\t\t\t\""44\"",\n\t\t\t\""\\\\d{7,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7(?:[1-5789]|62)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|624)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|6242)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|5[56]|7[06]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:1|\\\\d1)|3|9[018]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:38|5[23]|69|76|94)\"",\n\t\t\t\t\t\t\""1(?:387|5(?:24|39)|697|768|946)\"",\n\t\t\t\t\t\t\""1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8001\"",\n\t\t\t\t\t\t\""80011\"",\n\t\t\t\t\t\t\""800111\"",\n\t\t\t\t\t\t\""8001111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(845)(46)(4\\\\d)\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""845\"",\n\t\t\t\t\t\t\""8454\"",\n\t\t\t\t\t\t\""84546\"",\n\t\t\t\t\t\t\""845464\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:4[2-5]|7[0-3])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[0-26-9]|[78][0-49])|21[0-7]|31[0-8]|[4-69]1\\\\d))\\\\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)|3(?:0\\\\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[28][02-57-9]|[37]\\\\d|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\\\\d|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\\\d|9[2-57]))\\\\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\\\\d)|276\\\\d|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[567]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}|176888[2-46-8]\\\\d{2}|16977[23]\\\\d{3}\"",\n\t\t\t\t\""7(?:[1-3]\\\\d{3}|4(?:[0-46-9]\\\\d{2}|5(?:[0-689]\\\\d|7[0-57-9]))|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])\\\\d|7(?:0(?:0[01]|[1-9]\\\\d)|[1-7]\\\\d{2}|8[02-9]\\\\d|9[0-689]\\\\d)|8(?:[014-9]\\\\d|[23][0-8])\\\\d|9(?:[024-9]\\\\d{2}|1(?:[02-9]\\\\d|1[028])|3[0-689]\\\\d))\\\\d{5}\"",\n\t\t\t\t\""80(?:0(?:1111|\\\\d{6,7})|8\\\\d{7})|500\\\\d{6}\"",\n\t\t\t\t\""(?:87[123]|9(?:[01]\\\\d|8[2349]))\\\\d{7}\"",\n\t\t\t\t\""70\\\\d{8}\"",\n\t\t\t\tnull,\n\t\t\t\t\""(?:3[0347]|55)\\\\d{8}\"",\n\t\t\t\t\""76(?:0[012]\\\\d|2(?:[356]\\\\d|4[013-9])|4[0134]\\\\d|5[49]\\\\d|6[0-369]\\\\d|77\\\\d|81\\\\d|9[39]\\\\d)\\\\d{5}\"",\n\t\t\t\t\""56\\\\d{8}\"",\n\t\t\t\t\""8(?:4(?:5464\\\\d|[2-5]\\\\d{7})|70\\\\d{7})\""\n\t\t\t]\n\t\t],\n\t\t\""GD\"": [\n\t\t\t\""1\"",\n\t\t\t\""[4589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""473\""\n\t\t],\n\t\t\""GE\"": [\n\t\t\t\""995\"",\n\t\t\t\""[34578]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[348]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""GF\"": [\n\t\t\t\""594\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""GG\"": [\n\t\t\t\""44\"",\n\t\t\t\""[135789]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7(?:[1-5789]|62)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|624)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|6242)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|5[56]|7[06]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:1|\\\\d1)|3|9[018]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:38|5[23]|69|76|94)\"",\n\t\t\t\t\t\t\""1(?:387|5(?:24|39)|697|768|946)\"",\n\t\t\t\t\t\t\""1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8001\"",\n\t\t\t\t\t\t\""80011\"",\n\t\t\t\t\t\t\""800111\"",\n\t\t\t\t\t\t\""8001111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(845)(46)(4\\\\d)\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""845\"",\n\t\t\t\t\t\t\""8454\"",\n\t\t\t\t\t\t\""84546\"",\n\t\t\t\t\t\t\""845464\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:4[2-5]|7[0-3])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""1481[25-9]\\\\d{5}\"",\n\t\t\t\t\""7(?:781\\\\d|839\\\\d|911[17])\\\\d{5}\"",\n\t\t\t\t\""80(?:0(?:1111|\\\\d{6,7})|8\\\\d{7})|500\\\\d{6}\"",\n\t\t\t\t\""(?:87[123]|9(?:[01]\\\\d|8[0-3]))\\\\d{7}\"",\n\t\t\t\t\""70\\\\d{8}\"",\n\t\t\t\tnull,\n\t\t\t\t\""(?:3[0347]|55)\\\\d{8}\"",\n\t\t\t\t\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\"",\n\t\t\t\t\""56\\\\d{8}\"",\n\t\t\t\t\""8(?:4(?:5464\\\\d|[2-5]\\\\d{7})|70\\\\d{7})\""\n\t\t\t]\n\t\t],\n\t\t\""GH\"": [\n\t\t\t\""233\"",\n\t\t\t\""[235]\\\\d{8}|8\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""GI\"": [\n\t\t\t\""350\"",\n\t\t\t\""[2568]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GL\"": [\n\t\t\t\""299\"",\n\t\t\t\""[1-689]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GM\"": [\n\t\t\t\""220\"",\n\t\t\t\""[2-9]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GN\"": [\n\t\t\t\""224\"",\n\t\t\t\""[367]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[67]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GP\"": [\n\t\t\t\""590\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([56]90)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""590(?:0[13468]|1[012]|2[0-68]|3[28]|4[0-8]|5[579]|6[0189]|70|8[0-689]|9\\\\d)\\\\d{4}\"",\n\t\t\t\t\""690(?:0[0-7]|[1-9]\\\\d)\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""GQ\"": [\n\t\t\t\""240\"",\n\t\t\t\""[23589]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GR\"": [\n\t\t\t\""30\"",\n\t\t\t\""[26-9]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([27]\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21|7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[2-9]1|[689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[2-9][02-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GT\"": [\n\t\t\t\""502\"",\n\t\t\t\""[2-7]\\\\d{7}|1[89]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GU\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""671\""\n\t\t],\n\t\t\""GW\"": [\n\t\t\t\""245\"",\n\t\t\t\""(?:4(?:0\\\\d{5}|4\\\\d{7})|9\\\\d{8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""44|9[567]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""40\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GY\"": [\n\t\t\t\""592\"",\n\t\t\t\""[2-46-9]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""HK\"": [\n\t\t\t\""852\"",\n\t\t\t\""[235-7]\\\\d{7}|8\\\\d{7,8}|9\\\\d{4,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235-7]|[89](?:0[1-9]|[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(900)(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""900\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(900)(\\\\d{2,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""900\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""HN\"": [\n\t\t\t\""504\"",\n\t\t\t\""[237-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""HR\"": [\n\t\t\t\""385\"",\n\t\t\t\""[1-7]\\\\d{5,8}|[89]\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-5]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6[01])(\\\\d{2})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[01]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([67]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80[01])(\\\\d{2})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80[01])(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""HT\"": [\n\t\t\t\""509\"",\n\t\t\t\""[2-489]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""HU\"": [\n\t\t\t\""36\"",\n\t\t\t\""[1-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""06\"",\n\t\t\t\""($1)\""\n\t\t],\n\t\t\""ID\"": [\n\t\t\t\""62\"",\n\t\t\t\""(?:[1-79]\\\\d{6,10}|8\\\\d{7,11})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[124]|[36]1\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4579]|2[035-9]|[36][02-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3,4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1-35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{4})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1-35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)(500)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(177)(\\\\d{6,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""17\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{5,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(804)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""804\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80[79]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""IE\"": [\n\t\t\t\""353\"",\n\t\t\t\""[124-9]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[24-9]|47|58|6[237-9]|9[35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""40[24]|50[45]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(48)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""48\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(818)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""81\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24-69]|7[14]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([78]\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""76|8[35-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(700)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:8[059]|5)\"",\n\t\t\t\t\t\t\""1(?:8[059]0|5)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""IL\"": [\n\t\t\t\""972\"",\n\t\t\t\""1\\\\d{6,11}|[2-589]\\\\d{3}(?:\\\\d{3,6})?|6\\\\d{3}|7\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-489])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-489]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([57]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[57]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(153)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""153\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)([7-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1255)(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""125\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1200)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""120\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1212)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""121\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1599)(\\\\d{6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})\"",\n\t\t\t\t\t\""*$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-689]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""$1\""\n\t\t],\n\t\t\""IM\"": [\n\t\t\t\""44\"",\n\t\t\t\""[135789]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7(?:[1-5789]|62)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|624)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|6242)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|5[56]|7[06]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:1|\\\\d1)|3|9[018]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:38|5[23]|69|76|94)\"",\n\t\t\t\t\t\t\""1(?:387|5(?:24|39)|697|768|946)\"",\n\t\t\t\t\t\t\""1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8001\"",\n\t\t\t\t\t\t\""80011\"",\n\t\t\t\t\t\t\""800111\"",\n\t\t\t\t\t\t\""8001111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(845)(46)(4\\\\d)\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""845\"",\n\t\t\t\t\t\t\""8454\"",\n\t\t\t\t\t\t\""84546\"",\n\t\t\t\t\t\t\""845464\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:4[2-5]|7[0-3])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""1624[5-8]\\\\d{5}\"",\n\t\t\t\t\""7(?:4576|[59]24\\\\d)\\\\d{5}\"",\n\t\t\t\t\""808162\\\\d{4}\"",\n\t\t\t\t\""(?:872299|90[0167]624)\\\\d{4}\"",\n\t\t\t\t\""70\\\\d{8}\"",\n\t\t\t\tnull,\n\t\t\t\t\""3(?:08162\\\\d|3\\\\d{5}|4(?:40[49]06|5624\\\\d)|7(?:0624\\\\d|2299\\\\d))\\\\d{3}|55\\\\d{8}\"",\n\t\t\t\t\""76242\\\\d{5}\"",\n\t\t\t\t\""56\\\\d{8}\"",\n\t\t\t\t\""8(?:4(?:40[49]06|5624\\\\d)|70624\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""IN\"": [\n\t\t\t\""91\"",\n\t\t\t\""008\\\\d{9}|1\\\\d{7,12}|[2-9]\\\\d{9,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""600|7(?:[02-8]|19|9[037-9])|8(?:0[015-9]|[1-9])|9\"",\n\t\t\t\t\t\t\""600|7(?:[078]|19[0-5]|2(?:[02356-9]|[14][017-9]|9[389])|3(?:[025-9]|1[07-9]|[34][017-9])|4(?:[0-35689]|[47][017-9])|5(?:[02346-9]|1[017-9]|5[017-9])|6(?:[02-9]|1[0-257-9])|9(?:[089]|31|7[02-9]))|8(?:0(?:[01589]|6[67]|7[02-9])|1(?:[0-57-9]|6[07-9])|2(?:0[07-9]|[14][07-9]|[235-9])|3(?:[03-57-9]|[126][07-9])|[45]|6(?:[02457-9]|[136][07-9])|7(?:[078][07-9]|[1-69])|8(?:[0-25-9]|3[07-9]|4[047-9])|9(?:[02-9]|1[027-9]))|9\"",\n\t\t\t\t\t\t\""600|7(?:0|19[0-5]|2(?:[0235679]|[14][017-9]|8(?:[0-569]|[78][089])|9[389])|3(?:[05-8]|1(?:[089]|7[5-9])|2(?:[5-8]|[0-49][089])|3[017-9]|4(?:[07-9]|11)|9(?:[01689]|[2345][089]|40|7[0189]))|4(?:[056]|1(?:[0135-9]|[23][089]|2[089]|4[089])|2(?:0[089]|[1-7][089]|[89])|3(?:[0-8][089]|9)|4(?:[089]|11|7[02-8])|7(?:[089]|11|7[02-8])|8(?:[0-24-7][089]|[389])|9(?:[0-7][089]|[89]))|5(?:[0346-9]|1[017-9]|2(?:[03-9]|[12][089])|5[017-9])|6(?:[0346-9]|1[0-257-9]|2(?:[0-4]\\\\d|[5-9][089])|5(?:[0-367][089]|[4589]))|7(?:0(?:[02-9]|1[089])|[1-9])|8(?:[0-79]|8(?:0[0189]|11|8[013-9]|9))|9(?:[089]|313|7(?:[02-8]|9[07-9])))|8(?:0(?:[01589]|6[67]|7(?:[02-8]|9[05-9]))|1(?:[02-57-9]|1(?:[0-35-9]|4[0-46-9])|6(?:[089]|7[02-8]))|2(?:0(?:[089]|7[02])|[14](?:[089]|7[02-8])|[235-9])|3(?:[0357-9]|1(?:[089]|7[02-6])|2(?:[09]|77|8[0-689])|4(?:0[1-7]|[1-9])|6(?:[089]|7[02-7]))|[45]|6(?:[02457-9]|1(?:[089]|7[02-8])|3(?:[089]|7[02-68])|6(?:[08]|7[02-8]|9[01]))|7(?:0[07-9]|[1-69]|7(?:[089]|7[02-8])|8(?:[089]|7[02-8]))|8(?:[0-25-9]|3(?:[089]|7[02-8])|4(?:[0489]|7[02-68]))|9(?:[02-9]|1(?:[0289]|7[2-6])))|9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""11|2[02]|33|4[04]|79[1-9]|80[2-46]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:2[0-249]|3[0-25]|4[145]|[59][14]|7[1257]|[68][1-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|[36][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2-4]1|5[17]|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[23579]|[468][1-9])|[2-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""008\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""140\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""160\"",\n\t\t\t\t\t\t\""1600\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1800\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1800\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""186\"",\n\t\t\t\t\t\t\""1860\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""18[06]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""IO\"": [\n\t\t\t\""246\"",\n\t\t\t\""3\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""IQ\"": [\n\t\t\t\""964\"",\n\t\t\t\""[1-7]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-6]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""IR\"": [\n\t\t\t\""98\"",\n\t\t\t\""[1-8]\\\\d{9}|9(?:[0-4]\\\\d{8}|9\\\\d{2,8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(21)(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9990\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9990\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""IS\"": [\n\t\t\t\""354\"",\n\t\t\t\""[4-9]\\\\d{6}|38\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(3\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""IT\"": [\n\t\t\t\""39\"",\n\t\t\t\""[01589]\\\\d{5,10}|3(?:[12457-9]\\\\d{8}|[36]\\\\d{7,9})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]|55\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0[26])(\\\\d{4})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0[26])(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][0159]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][0159]|8(?:03|4[17]|9[245])\"",\n\t\t\t\t\t\t\""0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][2-46-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{3})(\\\\d{2,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][2-46-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13]|8(?:00|4[08]|9[59])\"",\n\t\t\t\t\t\t\""[13]|8(?:00|4[08]|9(?:5[5-9]|9))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""894\"",\n\t\t\t\t\t\t\""894[5-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""0(?:[26]\\\\d{4,9}|(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2346]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[34578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7})\"",\n\t\t\t\t\""3(?:[12457-9]\\\\d{8}|6\\\\d{7,8}|3\\\\d{7,9})\"",\n\t\t\t\t\""80(?:0\\\\d{6}|3\\\\d{3})\"",\n\t\t\t\t\""0878\\\\d{5}|1(?:44|6[346])\\\\d{6}|89(?:2\\\\d{3}|4(?:[0-4]\\\\d{2}|[5-9]\\\\d{4})|5(?:[0-4]\\\\d{2}|[5-9]\\\\d{6})|9\\\\d{6})\"",\n\t\t\t\t\""1(?:78\\\\d|99)\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""55\\\\d{8}\"",\n\t\t\t\t\""84(?:[08]\\\\d{6}|[17]\\\\d{3})\""\n\t\t\t]\n\t\t],\n\t\t\""JE\"": [\n\t\t\t\""44\"",\n\t\t\t\""[135789]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7(?:[1-5789]|62)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|624)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|6242)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|5[56]|7[06]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:1|\\\\d1)|3|9[018]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:38|5[23]|69|76|94)\"",\n\t\t\t\t\t\t\""1(?:387|5(?:24|39)|697|768|946)\"",\n\t\t\t\t\t\t\""1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8001\"",\n\t\t\t\t\t\t\""80011\"",\n\t\t\t\t\t\t\""800111\"",\n\t\t\t\t\t\t\""8001111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(845)(46)(4\\\\d)\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""845\"",\n\t\t\t\t\t\t\""8454\"",\n\t\t\t\t\t\t\""84546\"",\n\t\t\t\t\t\t\""845464\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:4[2-5]|7[0-3])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""1534[0-24-8]\\\\d{5}\"",\n\t\t\t\t\""7(?:509\\\\d|7(?:00[378]|97[7-9])|829\\\\d|937\\\\d)\\\\d{5}\"",\n\t\t\t\t\""80(?:07(?:35|81)|8901)\\\\d{4}\"",\n\t\t\t\t\""(?:871206|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\"",\n\t\t\t\t\""701511\\\\d{4}\"",\n\t\t\t\tnull,\n\t\t\t\t\""3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))\\\\d{4}|55\\\\d{8}\"",\n\t\t\t\t\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\"",\n\t\t\t\t\""56\\\\d{8}\"",\n\t\t\t\t\""8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|70002)\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""JM\"": [\n\t\t\t\""1\"",\n\t\t\t\""[589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""876\""\n\t\t],\n\t\t\""JO\"": [\n\t\t\t\""962\"",\n\t\t\t\""[235-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2356]|87\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[457-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70|8[0158]|9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""JP\"": [\n\t\t\t\""81\"",\n\t\t\t\""[1-9]\\\\d{8,9}|00(?:[36]\\\\d{7,14}|7\\\\d{5,7}|8\\\\d{7})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:12|57|99)0\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2579]0|80[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])\"",\n\t\t\t\t\t\t\""1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))\"",\n\t\t\t\t\t\t\""1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])\"",\n\t\t\t\t\t\t\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-6]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))\"",\n\t\t\t\t\t\t\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))\"",\n\t\t\t\t\t\t\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)\"",\n\t\t\t\t\t\t\""1|2(?:2[37]|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])\"",\n\t\t\t\t\t\t\""1|2(?:2[37]|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:9[14-79]|74|[34]7|[56]9)|82|993\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3|4(?:2[09]|7[01])|6[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2479][1-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""KE\"": [\n\t\t\t\""254\"",\n\t\t\t\""20\\\\d{6,7}|[4-9]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\t\""005|0\""\n\t\t],\n\t\t\""KG\"": [\n\t\t\t\""996\"",\n\t\t\t\""[235-8]\\\\d{8,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[25-7]|31[25]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:1[36]|[2-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""KH\"": [\n\t\t\t\""855\"",\n\t\t\t\""[1-9]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\\\\d[1-9]|[2-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[89]00)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[89]0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""KI\"": [\n\t\t\t\""686\"",\n\t\t\t\""[2458]\\\\d{4}|3\\\\d{4,7}|7\\\\d{7}\"",\n\t\t\t[],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""0\""\n\t\t],\n\t\t\""KM\"": [\n\t\t\t\""269\"",\n\t\t\t\""[3478]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""KN\"": [\n\t\t\t\""1\"",\n\t\t\t\""[589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""869\""\n\t\t],\n\t\t\""KP\"": [\n\t\t\t\""850\"",\n\t\t\t\""1\\\\d{9}|[28]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""KR\"": [\n\t\t\t\""82\"",\n\t\t\t\""007\\\\d{9,11}|[1-7]\\\\d{3,9}|8\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:0|1[19]|[69]9|5[458])|[57]0\"",\n\t\t\t\t\t\t\""1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[01]|5[1-4]|6[2-8]|[7-9])|[68]0|[3-6][1-9][1-9]\"",\n\t\t\t\t\t\t\""1(?:[01]|5(?:[1-3]|4[56])|6[2-8]|[7-9])|[68]0|[3-6][1-9][1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""131\"",\n\t\t\t\t\t\t\""1312\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""131\"",\n\t\t\t\t\t\t\""131[13-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""30\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21[0-46-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-6][1-9]1\"",\n\t\t\t\t\t\t\""[3-6][1-9]1(?:[0-46-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:5[246-9]|6[04678]|8[03579])\"",\n\t\t\t\t\t\t\""1(?:5(?:22|44|66|77|88|99)|6(?:00|44|6[16]|70|88)|8(?:00|33|55|77|99))\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\t\""0(8[1-46-8]|85\\\\d{2})?\""\n\t\t],\n\t\t\""KW\"": [\n\t\t\t\""965\"",\n\t\t\t\""[12569]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[16]|2(?:[0-35-9]|4[0-35-9])|9[024-9]|52[25]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""244|5(?:[015]|66)\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""KY\"": [\n\t\t\t\""1\"",\n\t\t\t\""[3589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""345\""\n\t\t],\n\t\t\""KZ\"": [\n\t\t\t\""7\"",\n\t\t\t\""(?:33\\\\d|7\\\\d{2}|80[09])\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3489]\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[34689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""33622\\\\d{5}|7(?:1(?:0(?:[23]\\\\d|4[0-3]|59|63)|1(?:[23]\\\\d|4[0-79]|59)|2(?:[23]\\\\d|59)|3(?:2\\\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\\\d|3[013-9]|5[1-9])|5(?:2\\\\d|3[1-9]|4[0-7]|59)|6(?:[234]\\\\d|5[19]|61)|72\\\\d|8(?:[27]\\\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\\\d|4[46-9]|5[3469])|2(?:2\\\\d|3[0679]|46|5[12679])|3(?:[234]\\\\d|5[139])|4(?:2\\\\d|3[1235-9]|59)|5(?:[23]\\\\d|4[01246-8]|59|61)|6(?:2\\\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\\\d|40|5[279])|8(?:[23]\\\\d|4[0-3]|59)|9(?:2\\\\d|3[124578]|59)))\\\\d{5}\"",\n\t\t\t\t\""7(?:0[012578]|47|6[02-4]|7[15-8]|85)\\\\d{7}\"",\n\t\t\t\t\""800\\\\d{7}\"",\n\t\t\t\t\""809\\\\d{7}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""751\\\\d{7}\""\n\t\t\t]\n\t\t],\n\t\t\""LA\"": [\n\t\t\t\""856\"",\n\t\t\t\""[2-8]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(20)(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-8]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[13]|3[14]|[4-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(30)(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""30\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""LB\"": [\n\t\t\t\""961\"",\n\t\t\t\""[13-9]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13-6]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]|9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([7-9]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89][01]|7(?:[01]|6[013-9]|8[89]|9[1-3])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""LC\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5789]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""758\""\n\t\t],\n\t\t\""LI\"": [\n\t\t\t\""423\"",\n\t\t\t\""6\\\\d{8}|[23789]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23789]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[56]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(69)(7\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""697\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""0|10(?:01|20|66)\""\n\t\t],\n\t\t\""LK\"": [\n\t\t\t\""94\"",\n\t\t\t\""[1-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{1})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""LR\"": [\n\t\t\t\""231\"",\n\t\t\t\""2\\\\d{7,8}|[378]\\\\d{8}|4\\\\d{6}|5\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([4-5])(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[45]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23578]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""LS\"": [\n\t\t\t\""266\"",\n\t\t\t\""[2568]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""LT\"": [\n\t\t\t\""370\"",\n\t\t\t\""[3-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([34]\\\\d)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""37|4(?:1|5[45]|6[2-4])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-6]\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[148]|4(?:[24]|6[09])|528|6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([7-9]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[7-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5)(2\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""52[0-79]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""(8-$1)\"",\n\t\t\t\""[08]\"",\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""LU\"": [\n\t\t\t\""352\"",\n\t\t\t\""[24-9]\\\\d{3,10}|3(?:[0-46-9]\\\\d{2,9}|5[013-9]\\\\d{1,8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:[0367]|4[3-8])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:[0367]|4[3-8])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,4})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:[12589]|4[12])|[3-5]|7[1-9]|8(?:[1-9]|0[2-9])|9(?:[1-9]|0[2-46-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70|80[01]|90[015]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""(15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\\\\d)\""\n\t\t],\n\t\t\""LV\"": [\n\t\t\t\""371\"",\n\t\t\t\""[2689]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2689]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""LY\"": [\n\t\t\t\""218\"",\n\t\t\t\""[25679]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([25679]\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MA\"": [\n\t\t\t\""212\"",\n\t\t\t\""[5-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([5-7]\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:2[015-7]|3[0-4])|[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:2[2-489]|3[5-9]|92)|892\"",\n\t\t\t\t\t\t\""5(?:2(?:[2-48]|9[0-7])|3(?:[5-79]|8[0-7])|924)|892\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:29|38)\"",\n\t\t\t\t\t\t\""5(?:29|38)[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([5]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:4[067]|5[03])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8[09])(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:0|9[013-9])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""5(?:2(?:[015-79]\\\\d|2[02-9]|3[2-57]|4[2-8]|8[235-7])\\\\d|3(?:[0-48]\\\\d|[57][2-9]|6[2-8]|9[3-9])\\\\d|4[067]\\\\d{2}|5[03]\\\\d{2})\\\\d{4}\"",\n\t\t\t\t\""(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[07][07]|6[12]))\\\\d{6}\"",\n\t\t\t\t\""80\\\\d{7}\"",\n\t\t\t\t\""89\\\\d{7}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""5924[01]\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""MC\"": [\n\t\t\t\""377\"",\n\t\t\t\""[34689]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[39]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MD\"": [\n\t\t\t\""373\"",\n\t\t\t\""[235-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""22|3\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([25-7]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[13-9]|[5-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ME\"": [\n\t\t\t\""382\"",\n\t\t\t\""[2-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-57-9]|6[036-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MF\"": [\n\t\t\t\""590\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([56]90)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""590(?:[02][79]|13|5[0-268]|[78]7)\\\\d{4}\"",\n\t\t\t\t\""690(?:0[0-7]|[1-9]\\\\d)\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""MG\"": [\n\t\t\t\""261\"",\n\t\t\t\""[23]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([23]\\\\d)(\\\\d{2})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MH\"": [\n\t\t\t\""692\"",\n\t\t\t\""[2-6]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\""\n\t\t],\n\t\t\""MK\"": [\n\t\t\t\""389\"",\n\t\t\t\""[2-578]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([347]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[347]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]\\\\d{2})(\\\\d)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ML\"": [\n\t\t\t\""223\"",\n\t\t\t\""[246-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[246-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MM\"": [\n\t\t\t\""95\"",\n\t\t\t\""[1478]\\\\d{5,7}|[256]\\\\d{5,8}|9(?:[279]\\\\d{0,2}|[58]|[34]\\\\d{1,2}|6\\\\d?)\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|2[245]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""251\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16|2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""67|81\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9(?:2[0-4]|[35-9]|4[137-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)([34]\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9(?:3[0-36]|4[0-57-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""92[56]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""93\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MN\"": [\n\t\t\t\""976\"",\n\t\t\t\""[12]\\\\d{7,9}|[57-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([12]\\\\d)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([12]2\\\\d)(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]2[1-3]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([12]\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12](?:27|[3-5])\"",\n\t\t\t\t\t\t\""[12](?:27|[3-5]\\\\d)2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[57-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([12]\\\\d{4})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12](?:27|[3-5])\"",\n\t\t\t\t\t\t\""[12](?:27|[3-5]\\\\d)[4-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MO\"": [\n\t\t\t\""853\"",\n\t\t\t\""[268]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([268]\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MP\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""670\""\n\t\t],\n\t\t\""MQ\"": [\n\t\t\t\""596\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MR\"": [\n\t\t\t\""222\"",\n\t\t\t\""[2-48]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-48]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MS\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""664\""\n\t\t],\n\t\t\""MT\"": [\n\t\t\t\""356\"",\n\t\t\t\""[2357-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MU\"": [\n\t\t\t\""230\"",\n\t\t\t\""[2-9]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-46-9]\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-46-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MV\"": [\n\t\t\t\""960\"",\n\t\t\t\""[346-8]\\\\d{6,9}|9(?:00\\\\d{7}|\\\\d{6})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3467]|9(?:[1-9]|0[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MW\"": [\n\t\t\t\""265\"",\n\t\t\t\""(?:1(?:\\\\d{2})?|[2789]\\\\d{2})\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1789]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MX\"": [\n\t\t\t\""52\"",\n\t\t\t\""[1-9]\\\\d{9,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([358]\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""33|55|81\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2467]|3[0-2457-9]|5[089]|8[02-9]|9[0-35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)([358]\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""044 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:33|55|81)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""044 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[2467]|3[0-2457-9]|5[089]|8[2-9]|9[1-35-9])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""01\"",\n\t\t\t\""01 $1\"",\n\t\t\t\""0[12]|04[45](\\\\d{10})\"",\n\t\t\t\""1$1\"",\n\t\t\ttrue\n\t\t],\n\t\t\""MY\"": [\n\t\t\t\""60\"",\n\t\t\t\""[13-9]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([4-79])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-79]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(3)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([18]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[02-46-9][1-9]|8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)([36-8]00)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[36-8]0\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(11)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""11\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(15[49])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""MZ\"": [\n\t\t\t\""258\"",\n\t\t\t\""[28]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([28]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|8[2-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NA\"": [\n\t\t\t\""264\"",\n\t\t\t\""[68]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1235]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(88)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""88\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(870)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""870\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""NC\"": [\n\t\t\t\""687\"",\n\t\t\t\""[2-57-9]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1.$2.$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-46-9]|5[0-4]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NE\"": [\n\t\t\t\""227\"",\n\t\t\t\""[0289]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[289]|09\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(08)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""08\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NF\"": [\n\t\t\t\""672\"",\n\t\t\t\""[13]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NG\"": [\n\t\t\t\""234\"",\n\t\t\t\""[1-6]\\\\d{5,8}|9\\\\d{5,9}|[78]\\\\d{5,13}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]|9(?:0[3-9]|[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-6]|7(?:[1-79]|0[1-9])|8[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70|8[01]|90[235-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([78]00)(\\\\d{4})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[78]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([78]00)(\\\\d{5})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[78]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(78)(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""78\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""NI\"": [\n\t\t\t\""505\"",\n\t\t\t\""[12578]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NL\"": [\n\t\t\t\""31\"",\n\t\t\t\""1\\\\d{4,8}|[2-7]\\\\d{8}|[89]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-578]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[4578]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-5]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6)(\\\\d{8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[0-57-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(66)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""66\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(14)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""14\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]0\\\\d)(\\\\d{4,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80|9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""NO\"": [\n\t\t\t\""47\"",\n\t\t\t\""0\\\\d{4}|[2-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([489]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[489]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235-7]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235-7]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\\\d{6}\"",\n\t\t\t\t\""(?:4[015-8]|5[89]|87|9\\\\d)\\\\d{6}\"",\n\t\t\t\t\""80[01]\\\\d{5}\"",\n\t\t\t\t\""82[09]\\\\d{5}\"",\n\t\t\t\t\""880\\\\d{5}\"",\n\t\t\t\t\""81[23]\\\\d{5}\"",\n\t\t\t\t\""0\\\\d{4}|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d{2})\\\\d{3}\"",\n\t\t\t\tnull,\n\t\t\t\t\""85[0-5]\\\\d{5}\"",\n\t\t\t\t\""810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""NP\"": [\n\t\t\t\""977\"",\n\t\t\t\""[1-8]\\\\d{7}|9(?:[1-69]\\\\d{6,8}|7[2-6]\\\\d{5,7}|8\\\\d{8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[2-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[01]|[2-8]|9(?:[1-69]|7[15-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9(?:6[013]|7[245]|8)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""NR\"": [\n\t\t\t\""674\"",\n\t\t\t\""[458]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NU\"": [\n\t\t\t\""683\"",\n\t\t\t\""[1-5]\\\\d{3}\""\n\t\t],\n\t\t\""NZ\"": [\n\t\t\t\""64\"",\n\t\t\t\""6[235-9]\\\\d{6}|[2-57-9]\\\\d{7,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([34679])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[346]|7[2-57-9]|9[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(24099)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""240\"",\n\t\t\t\t\t\t\""2409\"",\n\t\t\t\t\t\t\""24099\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:1[1-9]|[69]|7[0-35-9])|70|86\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[028]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:10|74)|5|[89]0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""OM\"": [\n\t\t\t\""968\"",\n\t\t\t\""(?:5|[279]\\\\d)\\\\d{6}|800\\\\d{5,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([79]\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[79]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PA\"": [\n\t\t\t\""507\"",\n\t\t\t\""[1-9]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-57-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PE\"": [\n\t\t\t\""51\"",\n\t\t\t\""[14-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([4-8]\\\\d)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-7]|8[2-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""PF\"": [\n\t\t\t\""689\"",\n\t\t\t\""4\\\\d{5,7}|8\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[09]|8[79]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""44\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PG\"": [\n\t\t\t\""675\"",\n\t\t\t\""[1-9]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13-689]|27\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20|7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PH\"": [\n\t\t\t\""63\"",\n\t\t\t\""2\\\\d{5,7}|[3-9]\\\\d{7,9}|1800\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])\"",\n\t\t\t\t\t\t\""3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""346|4(?:27|9[35])|883\"",\n\t\t\t\t\t\t\""3469|4(?:279|9(?:30|56))|8834\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-8]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-8]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""81|9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1800)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1800)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""PK\"": [\n\t\t\t\""92\"",\n\t\t\t\""1\\\\d{8}|[2-8]\\\\d{5,11}|9(?:[013-9]\\\\d{4,9}|2\\\\d(?:111\\\\d{6}|\\\\d{3,7}))\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(111)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1\"",\n\t\t\t\t\t\t\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11\"",\n\t\t\t\t\t\t\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(111)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[349]|45|54|60|72|8[2-5]|9[2-9]\"",\n\t\t\t\t\t\t\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d1\"",\n\t\t\t\t\t\t\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d11\"",\n\t\t\t\t\t\t\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[349]|45|54|60|72|8[2-5]|9[2-9]\"",\n\t\t\t\t\t\t\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(3\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([15]\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""58[12]|1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(586\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""586\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]00)(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]00\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""PL\"": [\n\t\t\t\""48\"",\n\t\t\t\""[12]\\\\d{6,8}|[3-57-9]\\\\d{8}|6\\\\d{5,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[14]|2[0-57-9]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{1})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""26|39|5[0137]|6[0469]|7[02389]|8[08]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""64\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""64\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PM\"": [\n\t\t\t\""508\"",\n\t\t\t\""[45]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([45]\\\\d)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""PR\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5789]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""787|939\""\n\t\t],\n\t\t\""PS\"": [\n\t\t\t\""970\"",\n\t\t\t\""[24589]\\\\d{7,8}|1(?:[78]\\\\d{8}|[49]\\\\d{2,3})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2489])(2\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2489]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5[69]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[78]00)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[78]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""PT\"": [\n\t\t\t\""351\"",\n\t\t\t\""[2-46-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[12]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-46-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[3-9]|[346-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PW\"": [\n\t\t\t\""680\"",\n\t\t\t\""[2-8]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PY\"": [\n\t\t\t\""595\"",\n\t\t\t\""5[0-5]\\\\d{4,7}|[2-46-9]\\\\d{5,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-9]0\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8700\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-8][1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-8][1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""QA\"": [\n\t\t\t\""974\"",\n\t\t\t\""[2-8]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([28]\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[28]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-7]\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-7]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""RE\"": [\n\t\t\t\""262\"",\n\t\t\t\""[268]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([268]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""262|6[49]|8\""\n\t\t],\n\t\t\""RO\"": [\n\t\t\t\""40\"",\n\t\t\t\""[23]\\\\d{5,8}|[7-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23][3-7]|[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[3-6]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""RS\"": [\n\t\t\t\""381\"",\n\t\t\t\""[126-9]\\\\d{4,11}|3(?:[0-79]\\\\d{3,10}|8[2-9]\\\\d{2,9})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([23]\\\\d{2})(\\\\d{4,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:2[389]|39)0\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-3]\\\\d)(\\\\d{5,10})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6\\\\d)(\\\\d{6,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7[26])(\\\\d{4,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7[08]\\\\d)(\\\\d{4,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[08]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""RU\"": [\n\t\t\t\""7\"",\n\t\t\t\""[3489]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3489]\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[34689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""8 ($1)\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-79]|7[1-37-9]))\\\\d{7}\"",\n\t\t\t\t\""9\\\\d{9}\"",\n\t\t\t\t\""80[04]\\\\d{7}\"",\n\t\t\t\t\""80[39]\\\\d{7}\""\n\t\t\t]\n\t\t],\n\t\t\""RW\"": [\n\t\t\t\""250\"",\n\t\t\t\""[027-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([7-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[7-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""SA\"": [\n\t\t\t\""966\"",\n\t\t\t\""1\\\\d{7,8}|(?:[2-467]|92)\\\\d{7}|5\\\\d{8}|8\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-467])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-467]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[1-467]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(92\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""92\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(811)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""81\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SB\"": [\n\t\t\t\""677\"",\n\t\t\t\""[1-9]\\\\d{4,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SC\"": [\n\t\t\t\""248\"",\n\t\t\t\""[24689]\\\\d{5,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[246]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SD\"": [\n\t\t\t\""249\"",\n\t\t\t\""[19]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SE\"": [\n\t\t\t\""46\"",\n\t\t\t\""[1-35-9]\\\\d{5,11}|4\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(8)(\\\\d{2,3})(\\\\d{2,3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-69]\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-469]\\\\d)(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[136]|2[136]|3[356]|4[0246]|6[03]|90\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(77)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(20)(\\\\d{2,3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9[034]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[034]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9[034]\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[034]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""25[245]|67[3-6]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4 $5\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SG\"": [\n\t\t\t\""65\"",\n\t\t\t\""[36]\\\\d{7}|[17-9]\\\\d{7,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3689]\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[369]|8[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[89]00)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7000)(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SH\"": [\n\t\t\t\""290\"",\n\t\t\t\""[256]\\\\d{4}\"",\n\t\t\t[],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""2(?:[0-57-9]\\\\d|6[4-9])\\\\d{2}\"",\n\t\t\t\t\""[56]\\\\d{4}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""262\\\\d{2}\""\n\t\t\t]\n\t\t],\n\t\t\""SI\"": [\n\t\t\t\""386\"",\n\t\t\t\""[1-7]\\\\d{6,7}|[89]\\\\d{4,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]|3[24-8]|4[24-8]|5[2-8]|7[3-8]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-7]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[37][01]|4[0139]|51|6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89][09])(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89][09]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""59|8[1-3]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SJ\"": [\n\t\t\t\""47\"",\n\t\t\t\""0\\\\d{4}|[45789]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([489]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[489]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235-7]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235-7]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""79\\\\d{6}\"",\n\t\t\t\t\""(?:4[015-8]|5[89]|9\\\\d)\\\\d{6}\"",\n\t\t\t\t\""80[01]\\\\d{5}\"",\n\t\t\t\t\""82[09]\\\\d{5}\"",\n\t\t\t\t\""880\\\\d{5}\"",\n\t\t\t\t\""81[23]\\\\d{5}\"",\n\t\t\t\t\""0\\\\d{4}|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d{2})\\\\d{3}\"",\n\t\t\t\tnull,\n\t\t\t\t\""85[0-5]\\\\d{5}\"",\n\t\t\t\t\""810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""SK\"": [\n\t\t\t\""421\"",\n\t\t\t\""(?:[2-68]\\\\d{5,8}|9\\\\d{6,8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(1[67])(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-5]\\\\d)(1[67])(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1/$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-5]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1/$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([689]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9090)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9090\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SL\"": [\n\t\t\t\""232\"",\n\t\t\t\""[2-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""SM\"": [\n\t\t\t\""378\"",\n\t\t\t\""[05-7]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[5-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0549)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""($1) $2\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{6})\"",\n\t\t\t\t\t\""0549 $1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""(0549) $1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""(?:0549)?([89]\\\\d{5})\"",\n\t\t\t\""0549$1\""\n\t\t],\n\t\t\""SN\"": [\n\t\t\t\""221\"",\n\t\t\t\""[3789]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[379]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SO\"": [\n\t\t\t\""252\"",\n\t\t\t\""[1-9]\\\\d{5,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{6})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[134]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[0-79]|[13-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""24|[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[125]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15|28|6[1-35-9]|799|9[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[59]|4[89]|6[24-6]|79|8[08]|90\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""SR\"": [\n\t\t\t\""597\"",\n\t\t\t\""[2-8]\\\\d{5,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-4]|5[2-58]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""56\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[6-8]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SS\"": [\n\t\t\t\""211\"",\n\t\t\t\""[19]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""ST\"": [\n\t\t\t\""239\"",\n\t\t\t\""[29]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SV\"": [\n\t\t\t\""503\"",\n\t\t\t\""[267]\\\\d{7}|[89]\\\\d{6}(?:\\\\d{4})?\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[267]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SX\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5789]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""721\""\n\t\t],\n\t\t\""SY\"": [\n\t\t\t\""963\"",\n\t\t\t\""[1-59]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""SZ\"": [\n\t\t\t\""268\"",\n\t\t\t\""[027]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[027]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TA\"": [\n\t\t\t\""290\"",\n\t\t\t\""8\\\\d{3}\"",\n\t\t\t[],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""8\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""TC\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""649\""\n\t\t],\n\t\t\""TD\"": [\n\t\t\t\""235\"",\n\t\t\t\""[2679]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TG\"": [\n\t\t\t\""228\"",\n\t\t\t\""[29]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[29]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TH\"": [\n\t\t\t\""66\"",\n\t\t\t\""[2-9]\\\\d{7,8}|1\\\\d{3}(?:\\\\d{5,6})?\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([13-9]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""14|[3-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[89]00)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""TJ\"": [\n\t\t\t\""992\"",\n\t\t\t\""[3-57-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([349]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[34]7|91[78]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([457-9]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[148]|[578]|9(?:1[59]|[0235-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(331700)(\\\\d)(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""331\"",\n\t\t\t\t\t\t\""3317\"",\n\t\t\t\t\t\t\""33170\"",\n\t\t\t\t\t\t\""331700\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[1-5]\"",\n\t\t\t\t\t\t\""3(?:[1245]|3(?:[02-9]|1[0-589]))\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""TK\"": [\n\t\t\t\""690\"",\n\t\t\t\""[2-47]\\\\d{3,6}\""\n\t\t],\n\t\t\""TL\"": [\n\t\t\t\""670\"",\n\t\t\t\""[2-489]\\\\d{6}|7\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-489]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TM\"": [\n\t\t\t\""993\"",\n\t\t\t\""[1-6]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""12\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13|[2-5]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""(8 $1)\""\n\t\t],\n\t\t\""TN\"": [\n\t\t\t\""216\"",\n\t\t\t\""[2-57-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TO\"": [\n\t\t\t\""676\"",\n\t\t\t\""[02-8]\\\\d{4,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-6]|7[0-4]|8[05]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[5-9]|8[47-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TR\"": [\n\t\t\t\""90\"",\n\t\t\t\""[2-589]\\\\d{9}|444\\\\d{4}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]|4(?:[0-35-9]|4[0-35-9])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5[02-69]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""51|[89]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(444)(\\\\d{1})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""444\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""TT\"": [\n\t\t\t\""1\"",\n\t\t\t\""[589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""868\""\n\t\t],\n\t\t\""TV\"": [\n\t\t\t\""688\"",\n\t\t\t\""[279]\\\\d{4,6}\""\n\t\t],\n\t\t\""TW\"": [\n\t\t\t\""886\"",\n\t\t\t\""2\\\\d{6,8}|[3-689]\\\\d{7,8}|7\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(20)(\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""202\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(20)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20[013-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-8])(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[23-8]|[3-6]|[78][1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80|9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(70)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""TZ\"": [\n\t\t\t\""255\"",\n\t\t\t\""\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([24]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([67]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""UA\"": [\n\t\t\t\""380\"",\n\t\t\t\""[3-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3-9]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[38]9|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|7|9[1-9]\"",\n\t\t\t\t\t\t\""[38]9|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|7|9[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-689]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[1-8]2|4[13678]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90\"",\n\t\t\t\t\t\t\""3(?:[1-46-8]2[013-9]|52)|4(?:[1378]2|62[013-9])|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-6]\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])\"",\n\t\t\t\t\t\t\""3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6(?:[013-9]|22)|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6(?:3[02389]|[015689])|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""UG\"": [\n\t\t\t\""256\"",\n\t\t\t\""\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[7-9]|20(?:[013-8]|2[5-9])|4(?:6[45]|[7-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3|4(?:[1-5]|6[0-36-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2024)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2024\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""US\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2-9]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:2(?:0[1-35-9]|1[02-9]|2[04589]|3[149]|4[08]|5[1-46]|6[0279]|7[026]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|4[67]|5[12]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|6[39]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[16]|5[017]|6[0-279]|78|8[012])|7(?:0[1-46-8]|1[02-9]|2[0457]|3[1247]|4[037]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[014678]|4[0179]|5[12469]|7[0-3589]|8[0459]))[2-9]\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\t\""8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\"",\n\t\t\t\t\""900[2-9]\\\\d{6}\"",\n\t\t\t\t\""5(?:00|22|33|44|66|77|88)[2-9]\\\\d{6}\""\n\t\t\t]\n\t\t],\n\t\t\""UY\"": [\n\t\t\t\""598\"",\n\t\t\t\""[2489]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]0\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""UZ\"": [\n\t\t\t\""998\"",\n\t\t\t\""[679]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([679]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""8 $1\""\n\t\t],\n\t\t\""VA\"": [\n\t\t\t\""39\"",\n\t\t\t\""(?:0(?:878\\\\d{5}|6698\\\\d{5})|[1589]\\\\d{5,10}|3(?:[12457-9]\\\\d{8}|[36]\\\\d{7,9}))\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]|55\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0[26])(\\\\d{4})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0[26])(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][0159]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][0159]|8(?:03|4[17]|9[245])\"",\n\t\t\t\t\t\t\""0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][2-46-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{3})(\\\\d{2,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][2-46-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13]|8(?:00|4[08]|9[59])\"",\n\t\t\t\t\t\t\""[13]|8(?:00|4[08]|9(?:5[5-9]|9))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""894\"",\n\t\t\t\t\t\t\""894[5-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""06698\\\\d{5}\"",\n\t\t\t\t\""3(?:[12457-9]\\\\d{8}|6\\\\d{7,8}|3\\\\d{7,9})\"",\n\t\t\t\t\""80(?:0\\\\d{6}|3\\\\d{3})\"",\n\t\t\t\t\""0878\\\\d{5}|1(?:44|6[346])\\\\d{6}|89(?:2\\\\d{3}|4(?:[0-4]\\\\d{2}|[5-9]\\\\d{4})|5(?:[0-4]\\\\d{2}|[5-9]\\\\d{6})|9\\\\d{6})\"",\n\t\t\t\t\""1(?:78\\\\d|99)\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""55\\\\d{8}\"",\n\t\t\t\t\""84(?:[08]\\\\d{6}|[17]\\\\d{3})\""\n\t\t\t]\n\t\t],\n\t\t\""VC\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5789]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""784\""\n\t\t],\n\t\t\""VE\"": [\n\t\t\t\""58\"",\n\t\t\t\""[24589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""VG\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""284\""\n\t\t],\n\t\t\""VI\"": [\n\t\t\t\""1\"",\n\t\t\t\""[3589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""340\""\n\t\t],\n\t\t\""VN\"": [\n\t\t\t\""84\"",\n\t\t\t\""[167]\\\\d{6,9}|[2-59]\\\\d{7,9}|8\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([17]99)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[17]99\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([48])(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4|8(?:[2-5]|6[236]|7[13])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235-7]\\\\d)(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[5-7]|3[0136]|5[5-9]|6[0-46-8]|7[02-79]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(69\\\\d)(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""69\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235-7]\\\\d{2})(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[0-489]|3[25]|50|65|7[18]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:8|9[89])|9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[2689]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[26]|8[68]|99)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(86[89])(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""86[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[89]00)(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[89]0\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""VU\"": [\n\t\t\t\""678\"",\n\t\t\t\""[2-57-9]\\\\d{4,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[579]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""WF\"": [\n\t\t\t\""681\"",\n\t\t\t\""[4-8]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""WS\"": [\n\t\t\t\""685\"",\n\t\t\t\""[2-8]\\\\d{4,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-6]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""YE\"": [\n\t\t\t\""967\"",\n\t\t\t\""[1-7]\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-7])(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-6]|7[24-68]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[0137]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""YT\"": [\n\t\t\t\""262\"",\n\t\t\t\""[268]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([268]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""269|63\""\n\t\t],\n\t\t\""ZA\"": [\n\t\t\t\""27\"",\n\t\t\t\""[1-79]\\\\d{8}|8\\\\d{4,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(860)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""860\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-79]|8(?:[0-57]|6[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ZM\"": [\n\t\t\t\""260\"",\n\t\t\t\""[289]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([29]\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[29]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ZW\"": [\n\t\t\t\""263\"",\n\t\t\t\""2(?:[012457-9]\\\\d{3,8}|6(?:[14]\\\\d{7}|\\\\d{4}))|[13-79]\\\\d{4,9}|8[06]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([49])(\\\\d{3})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4|9[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(86\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""86[24]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2356]\\\\d{2})(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:0[45]|2[278]|[49]8|[78])|3(?:08|17|3[78]|7[1569]|8[37]|98)|5[15][78]|6(?:[29]8|[38]7|6[78]|75|[89]8)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:1[39]|2[0157]|6[14]|7[35]|84)|329\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-356]\\\\d)(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[3-9]|2[0569]|3[0-69]|5[05689]|6[0-46-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]9|54\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([25]\\\\d{3})(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:25|54)8\"",\n\t\t\t\t\t\t\""258[23]|5483\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""86\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""001\"": [\n\t\t\t\""979\"",\n\t\t\t\""\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t]\n\t}\n};\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.DIGIT_PLACEHOLDER = undefined;\nexports.close_dangling_braces = close_dangling_braces;\nexports.count_occurences = count_occurences;\nexports.repeat = repeat;\n\nvar _getIterator2 = __webpack_require__(15);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _classCallCheck2 = __webpack_require__(40);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(41);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _metadata = __webpack_require__(0);\n\nvar _parse = __webpack_require__(4);\n\nvar _format = __webpack_require__(13);\n\nvar _common = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\n\n// This is an enhanced port of Google Android `libphonenumber`'s\n// `asyoutypeformatter.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/blob/8d21a365061de2ba0675c878a710a7b24f74d2ae/javascript/i18n/phonenumbers/asyoutypeformatter.js\n\nvar DUMMY_DIGIT = '9';\nvar DUMMY_DIGIT_MATCHER = new RegExp(DUMMY_DIGIT, 'g');\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \""longest phone number\"" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// The digits that have not been entered yet will be represented by a \\u2008,\n// the punctuation space.\nvar DIGIT_PLACEHOLDER = exports.DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\nvar DIGIT_PLACEHOLDER_MATCHER_GLOBAL = new RegExp(DIGIT_PLACEHOLDER, 'g');\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \""[1-4]\"".\nvar CHARACTER_CLASS_PATTERN = /\\[([^\\[\\]])*\\]/g;\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \""80[0-2]\\d{6,10}\"", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar STANDALONE_DIGIT_PATTERN = /\\d(?=[^,}][^,}])/g;\n\n// A pattern that is used to determine if a `format` is eligible\n// to be used by the \""as you type formatter\"".\n// It is eligible when the `format` contains groups of the dollar sign\n// followed by a single digit, separated by valid phone number punctuation.\n// This prevents invalid punctuation (such as the star sign in Israeli star numbers)\n// getting into the output of the \""as you type formatter\"".\nvar ELIGIBLE_FORMAT_PATTERN = new RegExp('^' + '[' + _parse.VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + _parse.VALID_PUNCTUATION + ']*)+' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \""leading digits pattern\"" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\n\nvar VALID_INCOMPLETE_PHONE_NUMBER = '[' + _parse.PLUS_CHARS + ']{0,1}' + '[' + _parse.VALID_PUNCTUATION + _parse.VALID_DIGITS + ']*';\n\nvar VALID_INCOMPLETE_PHONE_NUMBER_PATTERN = new RegExp('^' + VALID_INCOMPLETE_PHONE_NUMBER + '$', 'i');\n\nvar as_you_type = function () {\n\tfunction as_you_type(country_code, metadata) {\n\t\t(0, _classCallCheck3.default)(this, as_you_type);\n\n\t\t// Sanity check\n\t\tif (!metadata) {\n\t\t\tthrow new Error('Metadata not passed');\n\t\t}\n\n\t\tif (country_code && metadata.countries[country_code]) {\n\t\t\tthis.default_country = country_code;\n\t\t}\n\n\t\tthis.metadata = metadata;\n\n\t\tthis.reset();\n\t}\n\n\t(0, _createClass3.default)(as_you_type, [{\n\t\tkey: 'input',\n\t\tvalue: function input(text) {\n\t\t\t// Parse input\n\n\t\t\tvar extracted_number = (0, _parse.extract_formatted_phone_number)(text);\n\n\t\t\t// Special case for a lone '+' sign\n\t\t\t// since it's not considered a possible phone number.\n\t\t\tif (!extracted_number) {\n\t\t\t\tif (text && text.indexOf('+') >= 0) {\n\t\t\t\t\textracted_number = '+';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Validate possible first part of a phone number\n\t\t\tif (!(0, _common.matches_entirely)(extracted_number, VALID_INCOMPLETE_PHONE_NUMBER_PATTERN)) {\n\t\t\t\treturn this.current_output;\n\t\t\t}\n\n\t\t\treturn this.process_input((0, _parse.parse_phone_number)(extracted_number));\n\t\t}\n\t}, {\n\t\tkey: 'process_input',\n\t\tvalue: function process_input(input) {\n\t\t\t// If an out of position '+' sign detected\n\t\t\t// (or a second '+' sign),\n\t\t\t// then just drop it from the input.\n\t\t\tif (input[0] === '+') {\n\t\t\t\tif (!this.parsed_input) {\n\t\t\t\t\tthis.parsed_input += '+';\n\n\t\t\t\t\t// If a default country was set\n\t\t\t\t\t// then reset it because an explicitly international\n\t\t\t\t\t// phone number is being entered\n\t\t\t\t\tthis.reset_countriness();\n\t\t\t\t}\n\n\t\t\t\tinput = input.slice(1);\n\t\t\t}\n\n\t\t\t// Raw phone number\n\t\t\tthis.parsed_input += input;\n\n\t\t\t// // Reset phone number validation state\n\t\t\t// this.valid = false\n\n\t\t\t// Add digits to the national number\n\t\t\tthis.national_number += input;\n\n\t\t\t// Try to format the parsed input\n\n\t\t\tif (this.is_international()) {\n\t\t\t\tif (!this.country_phone_code) {\n\t\t\t\t\t// If one looks at country phone codes\n\t\t\t\t\t// then he can notice that no one country phone code\n\t\t\t\t\t// is ever a (leftmost) substring of another country phone code.\n\t\t\t\t\t// So if a valid country code is extracted so far\n\t\t\t\t\t// then it means that this is the country code.\n\n\t\t\t\t\t// If no country phone code could be extracted so far,\n\t\t\t\t\t// then just return the raw phone number,\n\t\t\t\t\t// because it has no way of knowing\n\t\t\t\t\t// how to format the phone number so far.\n\t\t\t\t\tif (!this.extract_country_phone_code()) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Initialize country-specific data\n\t\t\t\t\tthis.initialize_phone_number_formats_for_this_country_phone_code();\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t}\n\t\t\t\t// `this.country` could be `undefined`,\n\t\t\t\t// for instance, when there is ambiguity\n\t\t\t\t// in a form of several different countries\n\t\t\t\t// each corresponding to the same country phone code\n\t\t\t\t// (e.g. NANPA: USA, Canada, etc),\n\t\t\t\t// and there's not enough digits entered\n\t\t\t\t// to reliably determine the country\n\t\t\t\t// the phone number belongs to.\n\t\t\t\t// Therefore, in cases of such ambiguity,\n\t\t\t\t// each time something is input,\n\t\t\t\t// try to determine the country\n\t\t\t\t// (if it's not determined yet).\n\t\t\t\telse if (!this.country) {\n\t\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Some national prefixes are substrings of other national prefixes\n\t\t\t\t// (for the same country), therefore try to extract national prefix each time\n\t\t\t\t// because a longer national prefix might be available at some point in time.\n\n\t\t\t\tvar previous_national_prefix = this.national_prefix;\n\t\t\t\tthis.national_number = this.national_prefix + this.national_number;\n\n\t\t\t\t// Possibly extract a national prefix\n\t\t\t\tthis.extract_national_prefix();\n\n\t\t\t\tif (this.national_prefix !== previous_national_prefix) {\n\t\t\t\t\t// National number has changed\n\t\t\t\t\t// (due to another national prefix been extracted)\n\t\t\t\t\t// therefore national number has changed\n\t\t\t\t\t// therefore reset all previous formatting data.\n\t\t\t\t\t// (and leading digits matching state)\n\t\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check the available phone number formats\n\t\t\t// based on the currently available leading digits.\n\t\t\tthis.match_formats_by_leading_digits();\n\n\t\t\t// Format the phone number (given the next digits)\n\t\t\tvar formatted_national_phone_number = this.format_national_phone_number(input);\n\n\t\t\t// If the phone number could be formatted,\n\t\t\t// then return it, possibly prepending with country phone code\n\t\t\t// (for international phone numbers only)\n\t\t\tif (formatted_national_phone_number) {\n\t\t\t\treturn this.full_phone_number(formatted_national_phone_number);\n\t\t\t}\n\n\t\t\t// If the phone number couldn't be formatted,\n\t\t\t// then just fall back to the raw phone number.\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_national_phone_number',\n\t\tvalue: function format_national_phone_number(next_digits) {\n\t\t\t// Format the next phone number digits\n\t\t\t// using the previously chosen phone number format.\n\t\t\t//\n\t\t\t// This is done here because if `attempt_to_format_complete_phone_number`\n\t\t\t// was placed before this call then the `template`\n\t\t\t// wouldn't reflect the situation correctly (and would therefore be inconsistent)\n\t\t\t//\n\t\t\tvar national_number_formatted_with_previous_format = void 0;\n\t\t\tif (this.chosen_format) {\n\t\t\t\tnational_number_formatted_with_previous_format = this.format_next_national_number_digits(next_digits);\n\t\t\t}\n\n\t\t\t// See if the input digits can be formatted properly already. If not,\n\t\t\t// use the results from format_next_national_number_digits(), which does formatting\n\t\t\t// based on the formatting pattern chosen.\n\n\t\t\tvar formatted_number = this.attempt_to_format_complete_phone_number();\n\n\t\t\t// Just because a phone number doesn't have a suitable format\n\t\t\t// that doesn't mean that the phone is invalid\n\t\t\t// because phone number formats only format phone numbers,\n\t\t\t// they don't validate them and some (rare) phone numbers\n\t\t\t// are meant to stay non-formatted.\n\t\t\tif (formatted_number) {\n\t\t\t\t// if (this.country)\n\t\t\t\t// {\n\t\t\t\t// \tthis.valid = true\n\t\t\t\t// }\n\n\t\t\t\treturn formatted_number;\n\t\t\t}\n\n\t\t\t// For some phone number formats national prefix\n\n\t\t\t// If the previously chosen phone number format\n\t\t\t// didn't match the next (current) digit being input\n\t\t\t// (leading digits pattern didn't match).\n\t\t\tif (this.choose_another_format()) {\n\t\t\t\t// And a more appropriate phone number format\n\t\t\t\t// has been chosen for these `leading digits`,\n\t\t\t\t// then format the national phone number (so far)\n\t\t\t\t// using the newly selected phone number pattern.\n\n\t\t\t\t// Will return `undefined` if it couldn't format\n\t\t\t\t// the supplied national number\n\t\t\t\t// using the selected phone number pattern.\n\n\t\t\t\treturn this.reformat_national_number();\n\t\t\t}\n\n\t\t\t// If could format the next (current) digit\n\t\t\t// using the previously chosen phone number format\n\t\t\t// then return the formatted number so far.\n\n\t\t\t// If no new phone number format could be chosen,\n\t\t\t// and couldn't format the supplied national number\n\t\t\t// using the selected phone number pattern,\n\t\t\t// then it will return `undefined`.\n\n\t\t\treturn national_number_formatted_with_previous_format;\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset() {\n\t\t\t// Input stripped of non-phone-number characters.\n\t\t\t// Can only contain a possible leading '+' sign and digits.\n\t\t\tthis.parsed_input = '';\n\n\t\t\tthis.current_output = '';\n\n\t\t\t// This contains the national prefix that has been extracted. It contains only\n\t\t\t// digits without formatting.\n\t\t\tthis.national_prefix = '';\n\n\t\t\tthis.national_number = '';\n\n\t\t\tthis.reset_countriness();\n\n\t\t\tthis.reset_format();\n\n\t\t\t// this.valid = false\n\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'reset_country',\n\t\tvalue: function reset_country() {\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.country = this.default_country;\n\t\t\t} else {\n\t\t\t\tthis.country = undefined;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_countriness',\n\t\tvalue: function reset_countriness() {\n\t\t\tthis.reset_country();\n\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.country_metadata = this.metadata.countries[this.default_country];\n\t\t\t\tthis.country_phone_code = this.country_metadata.phone_code;\n\n\t\t\t\tthis.initialize_phone_number_formats_for_this_country_phone_code();\n\t\t\t} else {\n\t\t\t\tthis.country_metadata = undefined;\n\t\t\t\tthis.country_phone_code = undefined;\n\n\t\t\t\tthis.available_formats = [];\n\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_format',\n\t\tvalue: function reset_format() {\n\t\t\tthis.chosen_format = undefined;\n\t\t\tthis.template = undefined;\n\t\t\tthis.partially_populated_template = undefined;\n\t\t\tthis.last_match_position = -1;\n\t\t}\n\n\t\t// Format each digit of national phone number (so far)\n\t\t// using the newly selected phone number pattern.\n\n\t}, {\n\t\tkey: 'reformat_national_number',\n\t\tvalue: function reformat_national_number() {\n\t\t\t// Format each digit of national phone number (so far)\n\t\t\t// using the selected phone number pattern.\n\t\t\treturn this.format_next_national_number_digits(this.national_number);\n\t\t}\n\t}, {\n\t\tkey: 'initialize_phone_number_formats_for_this_country_phone_code',\n\t\tvalue: function initialize_phone_number_formats_for_this_country_phone_code() {\n\t\t\t// Get all \""eligible\"" phone number formats for this country\n\t\t\tthis.available_formats = (0, _metadata.get_formats)(this.country_metadata).filter(function (format) {\n\t\t\t\treturn ELIGIBLE_FORMAT_PATTERN.test((0, _metadata.get_format_international_format)(format));\n\t\t\t});\n\n\t\t\tthis.matching_formats = this.available_formats;\n\t\t}\n\t}, {\n\t\tkey: 'match_formats_by_leading_digits',\n\t\tvalue: function match_formats_by_leading_digits() {\n\t\t\tvar leading_digits = this.national_number;\n\n\t\t\t// \""leading digits\"" patterns start with a maximum 3 digits,\n\t\t\t// and then with each additional digit\n\t\t\t// a more precise \""leading digits\"" pattern is specified.\n\t\t\t// They could make \""leading digits\"" patterns start\n\t\t\t// with a maximum of a single digit, but they didn't,\n\t\t\t// so it's possible that some phone number formats\n\t\t\t// will be falsely rejected until there are at least\n\t\t\t// 3 digits in the national (significant) number being input.\n\n\t\t\tvar index_of_leading_digits_pattern = leading_digits.length - MIN_LEADING_DIGITS_LENGTH;\n\n\t\t\tif (index_of_leading_digits_pattern < 0) {\n\t\t\t\tindex_of_leading_digits_pattern = 0;\n\t\t\t}\n\n\t\t\tthis.matching_formats = this.get_relevant_phone_number_formats().filter(function (format) {\n\t\t\t\tvar leading_digits_pattern_count = (0, _metadata.get_format_leading_digits_patterns)(format).length;\n\n\t\t\t\t// Keep everything that isn't restricted by leading digits.\n\t\t\t\tif (leading_digits_pattern_count === 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar leading_digits_pattern_index = Math.min(index_of_leading_digits_pattern, leading_digits_pattern_count - 1);\n\t\t\t\tvar leading_digits_pattern = (0, _metadata.get_format_leading_digits_patterns)(format)[leading_digits_pattern_index];\n\n\t\t\t\t// Brackets are required for `^` to be applied to\n\t\t\t\t// all or-ed (`|`) parts, not just the first one.\n\t\t\t\treturn new RegExp('^(' + leading_digits_pattern + ')').test(leading_digits);\n\t\t\t});\n\n\t\t\t// If there was a phone number format chosen\n\t\t\t// and it no longer holds given the new leading digits then reset it\n\t\t\tif (this.chosen_format && this.matching_formats.indexOf(this.chosen_format) === -1) {\n\t\t\t\tthis.reset_format();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'get_relevant_phone_number_formats',\n\t\tvalue: function get_relevant_phone_number_formats() {\n\t\t\tvar leading_digits = this.national_number;\n\n\t\t\t// \""leading digits\"" patterns start with a maximum 3 digits,\n\t\t\t// and then with each additional digit\n\t\t\t// a more precise \""leading digits\"" pattern is specified.\n\t\t\t// They could make \""leading digits\"" patterns start\n\t\t\t// with a maximum of a single digit, but they didn't,\n\t\t\t// so it's possible that some phone number formats\n\t\t\t// will be falsely rejected until there are at least\n\t\t\t// 3 digits in the national (significant) number being input.\n\n\t\t\tif (leading_digits.length <= MIN_LEADING_DIGITS_LENGTH) {\n\t\t\t\treturn this.available_formats;\n\t\t\t}\n\n\t\t\treturn this.matching_formats;\n\t\t}\n\n\t\t// Check to see if there is an exact pattern match for these digits. If so, we\n\t\t// should use this instead of any other formatting template whose\n\t\t// leadingDigitsPattern also matches the input.\n\n\t}, {\n\t\tkey: 'attempt_to_format_complete_phone_number',\n\t\tvalue: function attempt_to_format_complete_phone_number() {\n\t\t\tvar _iteratorNormalCompletion = true;\n\t\t\tvar _didIteratorError = false;\n\t\t\tvar _iteratorError = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator = (0, _getIterator3.default)(this.get_relevant_phone_number_formats()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\t\t\tvar format = _step.value;\n\n\t\t\t\t\tvar matcher = new RegExp('^(?:' + (0, _metadata.get_format_pattern)(format) + ')$');\n\n\t\t\t\t\tif (!matcher.test(this.national_number)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.validate_format(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// To leave the formatter in a consistent state\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t\tvar formatted_number = (0, _format.format_national_number_using_format)(this.national_number, format, this.is_international(), this.national_prefix.length > 0, this.country_metadata);\n\n\t\t\t\t\t// Set `this.template` and `this.partially_populated_template`\n\t\t\t\t\t//\n\t\t\t\t\t// `else` case doesn't ever happen\n\t\t\t\t\t// with the current metadata,\n\t\t\t\t\t// but just in case.\n\t\t\t\t\t//\n\t\t\t\t\t/* istanbul ignore else */\n\t\t\t\t\tif (this.create_formatting_template(format)) {\n\t\t\t\t\t\t// Populate `this.partially_populated_template`\n\t\t\t\t\t\tthis.reformat_national_number();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar full_number = this.full_phone_number(formatted_number);\n\n\t\t\t\t\t\tthis.template = full_number.replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER);\n\t\t\t\t\t\tthis.partially_populated_template = full_number;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn formatted_number;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError = true;\n\t\t\t\t_iteratorError = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t\t\t_iterator.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError) {\n\t\t\t\t\t\tthrow _iteratorError;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Combines the national number with the appropriate prefix\n\n\t}, {\n\t\tkey: 'full_phone_number',\n\t\tvalue: function full_phone_number(formatted_national_number) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn '+' + this.country_phone_code + ' ' + formatted_national_number;\n\t\t\t}\n\n\t\t\treturn formatted_national_number;\n\t\t}\n\n\t\t// Extracts the country calling code from the beginning\n\t\t// of the entered `national_number` (so far),\n\t\t// and places the remaining input into the `national_number`.\n\n\t}, {\n\t\tkey: 'extract_country_phone_code',\n\t\tvalue: function extract_country_phone_code() {\n\t\t\tif (!this.national_number) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar _parse_phone_number_a = (0, _parse.parse_phone_number_and_country_phone_code)(this.parsed_input, this.metadata),\n\t\t\t    country_phone_code = _parse_phone_number_a.country_phone_code,\n\t\t\t    number = _parse_phone_number_a.number;\n\n\t\t\tif (!country_phone_code) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.country_phone_code = country_phone_code;\n\t\t\tthis.national_number = number;\n\n\t\t\treturn this.country_metadata = (0, _metadata.get_metadata_by_country_phone_code)(country_phone_code, this.metadata);\n\t\t}\n\t}, {\n\t\tkey: 'extract_national_prefix',\n\t\tvalue: function extract_national_prefix() {\n\t\t\tthis.national_prefix = '';\n\n\t\t\tif (!this.country_metadata) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar national_number = (0, _parse.strip_national_prefix)(this.national_number, this.country_metadata);\n\n\t\t\tif (national_number !== this.national_number) {\n\t\t\t\tthis.national_prefix = this.national_number.slice(0, this.national_number.length - national_number.length);\n\t\t\t\tthis.national_number = national_number;\n\t\t\t}\n\n\t\t\treturn this.national_prefix;\n\t\t}\n\t}, {\n\t\tkey: 'choose_another_format',\n\t\tvalue: function choose_another_format() {\n\t\t\t// When there are multiple available formats, the formatter uses the first\n\t\t\t// format where a formatting template could be created.\n\t\t\tvar _iteratorNormalCompletion2 = true;\n\t\t\tvar _didIteratorError2 = false;\n\t\t\tvar _iteratorError2 = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator2 = (0, _getIterator3.default)(this.get_relevant_phone_number_formats()), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\t\tvar format = _step2.value;\n\n\t\t\t\t\t// If this format is currently being used\n\t\t\t\t\t// and is still possible, then stick to it.\n\t\t\t\t\tif (this.chosen_format === format) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this `format` is suitable for \""as you type\"",\n\t\t\t\t\t// then extract the template from this format\n\t\t\t\t\t// and use it to format the phone number being input.\n\n\t\t\t\t\tif (!this.validate_format(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.create_formatting_template(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t\t// With a new formatting template, the matched position\n\t\t\t\t\t// using the old template needs to be reset.\n\t\t\t\t\tthis.last_match_position = -1;\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// No format matches the phone number,\n\t\t\t\t// therefore set `country` to `undefined`\n\t\t\t\t// (or to the default country).\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError2 = true;\n\t\t\t\t_iteratorError2 = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t\t_iterator2.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.reset_country();\n\n\t\t\t// No format matches the national phone number entered\n\t\t\tthis.reset_format();\n\t\t}\n\t}, {\n\t\tkey: 'validate_format',\n\t\tvalue: function validate_format(format) {\n\t\t\t// If national prefix is mandatory for this phone number format\n\t\t\t// and the user didn't input the national prefix,\n\t\t\t// then this phone number format isn't suitable.\n\t\t\tif (!this.is_international() && !this.national_prefix && (0, _metadata.get_format_national_prefix_is_mandatory_when_formatting)(format, this.country_metadata)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t}, {\n\t\tkey: 'create_formatting_template',\n\t\tvalue: function create_formatting_template(format) {\n\t\t\t// The formatter doesn't format numbers when numberPattern contains '|', e.g.\n\t\t\t// (20|3)\\d{4}. In those cases we quickly return.\n\t\t\t// (Though there's no such format in current metadata)\n\t\t\t/* istanbul ignore if */\n\t\t\tif ((0, _metadata.get_format_pattern)(format).indexOf('|') >= 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar national_prefix_formatting_rule = (0, _metadata.get_format_national_prefix_formatting_rule)(format, this.country_metadata);\n\n\t\t\t// A very smart trick by the guys at Google\n\t\t\tvar number_pattern = (0, _metadata.get_format_pattern)(format)\n\t\t\t// Replace anything in the form of [..] with \\d\n\t\t\t.replace(CHARACTER_CLASS_PATTERN, '\\\\d')\n\t\t\t// Replace any standalone digit (not the one in `{}`) with \\d\n\t\t\t.replace(STANDALONE_DIGIT_PATTERN, '\\\\d');\n\n\t\t\t// This match will always succeed,\n\t\t\t// because the \""longest dummy phone number\""\n\t\t\t// has enough length to accomodate any possible\n\t\t\t// national phone number format pattern.\n\t\t\tvar dummy_phone_number_matching_format_pattern = LONGEST_DUMMY_PHONE_NUMBER.match(number_pattern)[0];\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (this.national_number.length > dummy_phone_number_matching_format_pattern.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Now prepare phone number format\n\t\t\tvar number_format = this.get_format_format(format);\n\n\t\t\t// If national prefix formatting rule is set\n\t\t\t// for this phone number format\n\t\t\tif (national_prefix_formatting_rule) {\n\t\t\t\t// If the user did input the national prefix\n\t\t\t\t// (or if the national prefix formatting rule does not require national prefix)\n\t\t\t\t// then maybe make it part of the phone number template\n\t\t\t\tif (this.national_prefix || !(0, _metadata.get_format_uses_national_prefix)(national_prefix_formatting_rule)) {\n\t\t\t\t\t// Make the national prefix part of the phone number template\n\t\t\t\t\tnumber_format = number_format.replace(_format.FIRST_GROUP_PATTERN, national_prefix_formatting_rule);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get a formatting template which can be used to efficiently format\n\t\t\t// a partial number where digits are added one by one.\n\n\t\t\t// Create formatting template for this phone number format\n\t\t\tvar template = dummy_phone_number_matching_format_pattern\n\t\t\t// Format the dummy phone number according to the format\n\t\t\t.replace(new RegExp(number_pattern, 'g'), number_format)\n\t\t\t// Replace each dummy digit with a DIGIT_PLACEHOLDER\n\t\t\t.replace(DUMMY_DIGIT_MATCHER, DIGIT_PLACEHOLDER);\n\n\t\t\t// This one is for national number only\n\t\t\tthis.partially_populated_template = template;\n\n\t\t\t// For convenience, the public `.template` property\n\t\t\t// is gonna contain the whole international number\n\t\t\t// if the phone number being input is international.\n\t\t\tif (this.is_international()) {\n\t\t\t\ttemplate = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.country_phone_code.length) + ' ' + template;\n\t\t\t}\n\t\t\t// For local numbers, replace national prefix\n\t\t\t// with a digit placeholder.\n\t\t\telse {\n\t\t\t\t\ttemplate = template.replace(/\\d/g, DIGIT_PLACEHOLDER);\n\t\t\t\t}\n\n\t\t\t// This one is for the full phone number\n\t\t\treturn this.template = template;\n\t\t}\n\t}, {\n\t\tkey: 'format_next_national_number_digits',\n\t\tvalue: function format_next_national_number_digits(digits) {\n\t\t\tvar _iteratorNormalCompletion3 = true;\n\t\t\tvar _didIteratorError3 = false;\n\t\t\tvar _iteratorError3 = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator3 = (0, _getIterator3.default)(digits), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\t\tvar digit = _step3.value;\n\n\t\t\t\t\t// If there is room for more digits in current `template`,\n\t\t\t\t\t// then set the next digit in the `template`,\n\t\t\t\t\t// and return the formatted digits so far.\n\n\t\t\t\t\t// If more digits are entered than the current format could handle\n\t\t\t\t\tif (this.partially_populated_template.slice(this.last_match_position + 1).search(DIGIT_PLACEHOLDER_MATCHER) === -1) {\n\t\t\t\t\t\t// Reset the current format,\n\t\t\t\t\t\t// so that the new format will be chosen\n\t\t\t\t\t\t// in a subsequent `this.choose_another_format()` call\n\t\t\t\t\t\t// later in code.\n\t\t\t\t\t\tthis.chosen_format = undefined;\n\t\t\t\t\t\tthis.template = undefined;\n\t\t\t\t\t\tthis.partially_populated_template = undefined;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.last_match_position = this.partially_populated_template.search(DIGIT_PLACEHOLDER_MATCHER);\n\t\t\t\t\tthis.partially_populated_template = this.partially_populated_template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n\t\t\t\t}\n\n\t\t\t\t// Return the formatted phone number so far\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError3 = true;\n\t\t\t\t_iteratorError3 = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t\t_iterator3.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn close_dangling_braces(this.partially_populated_template, this.last_match_position + 1).replace(DIGIT_PLACEHOLDER_MATCHER_GLOBAL, ' ');\n\t\t}\n\t}, {\n\t\tkey: 'is_international',\n\t\tvalue: function is_international() {\n\t\t\treturn this.parsed_input && this.parsed_input[0] === '+';\n\t\t}\n\t}, {\n\t\tkey: 'get_format_format',\n\t\tvalue: function get_format_format(format) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn (0, _format.local_to_international_style)((0, _metadata.get_format_international_format)(format));\n\t\t\t}\n\n\t\t\treturn (0, _metadata.get_format_format)(format);\n\t\t}\n\n\t\t// Determines the country of the phone number\n\t\t// entered so far based on the country phone code\n\t\t// and the national phone number.\n\n\t}, {\n\t\tkey: 'determine_the_country',\n\t\tvalue: function determine_the_country() {\n\t\t\tthis.country = (0, _parse.find_country_code)(this.country_phone_code, this.national_number, this.metadata);\n\t\t}\n\t}]);\n\n\treturn as_you_type;\n}();\n\nexports.default = as_you_type;\nfunction close_dangling_braces(template, cut_before) {\n\tvar retained_template = template.slice(0, cut_before);\n\n\tvar opening_braces = count_occurences('(', retained_template);\n\tvar closing_braces = count_occurences(')', retained_template);\n\n\tvar dangling_braces = opening_braces - closing_braces;\n\n\twhile (dangling_braces > 0 && cut_before < template.length) {\n\t\tif (template[cut_before] === ')') {\n\t\t\tdangling_braces--;\n\t\t}\n\t\tcut_before++;\n\t}\n\n\treturn template.slice(0, cut_before);\n}\n\n// Counts all occurences of a symbol in a string\nfunction count_occurences(symbol, string) {\n\tvar count = 0;\n\n\tvar _iteratorNormalCompletion4 = true;\n\tvar _didIteratorError4 = false;\n\tvar _iteratorError4 = undefined;\n\n\ttry {\n\t\tfor (var _iterator4 = (0, _getIterator3.default)(string), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n\t\t\tvar character = _step4.value;\n\n\t\t\tif (character === symbol) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError4 = true;\n\t\t_iteratorError4 = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion4 && _iterator4.return) {\n\t\t\t\t_iterator4.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError4) {\n\t\t\t\tthrow _iteratorError4;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nfunction repeat(string, times) {\n\tif (times < 1) {\n\t\treturn '';\n\t}\n\n\tvar result = '';\n\n\twhile (times > 1) {\n\t\tif (times & 1) {\n\t\t\tresult += string;\n\t\t}\n\n\t\ttimes >>= 1;\n\t\tstring += string;\n\t}\n\n\treturn result + string;\n}\n//# sourceMappingURL=as you type.js.map\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.default = is_valid;\n\nvar _parse = __webpack_require__(4);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nvar _getNumberType = __webpack_require__(14);\n\nvar _getNumberType2 = _interopRequireDefault(_getNumberType);\n\nvar _metadata = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Checks if a given phone number is valid\n//\n// Example use cases:\n//\n// ```js\n// is_valid('8005553535', 'RU')\n// is_valid('8005553535', 'RU', metadata)\n// is_valid({ phone: '8005553535', country: 'RU' })\n// is_valid({ phone: '8005553535', country: 'RU' }, metadata)\n// is_valid('+78005553535')\n// is_valid('+78005553535', metadata)\n// ```\n//\nfunction is_valid(first_argument, second_argument, third_argument) {\n\tvar _sort_out_arguments = (0, _getNumberType.sort_out_arguments)(first_argument, second_argument, third_argument),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// Sanity check\n\n\n\tif (!metadata) {\n\t\tthrow new Error('Metadata not passed');\n\t}\n\n\tif (!input) {\n\t\treturn false;\n\t}\n\n\tif (!input.country) {\n\t\treturn false;\n\t}\n\n\tvar country_metadata = metadata.countries[input.country];\n\n\tif ((0, _metadata.get_types)(country_metadata)) {\n\t\tif (!(0, _getNumberType2.default)(input, metadata)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n//# sourceMappingURL=validate.js.map\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(45), __esModule: true };\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(44), __esModule: true };\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = { \""default\"": __webpack_require__(46), __esModule: true };\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\""Cannot call a class as a function\"");\n  }\n};\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nexports.__esModule = true;\n\nvar _defineProperty = __webpack_require__(39);\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\""value\"" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nexports.__esModule = true;\n\nvar _assign = __webpack_require__(38);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n__webpack_require__(75);\n__webpack_require__(74);\nmodule.exports = __webpack_require__(69);\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n__webpack_require__(71);\nmodule.exports = __webpack_require__(1).Object.assign;\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n__webpack_require__(72);\nvar $Object = __webpack_require__(1).Object;\nmodule.exports = function create(P, D){\n  return $Object.create(P, D);\n};\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n__webpack_require__(73);\nvar $Object = __webpack_require__(1).Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n/***/ },\n/* 47 */\n/***/ function(module, exports) {\n\nmodule.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n/***/ },\n/* 48 */\n/***/ function(module, exports) {\n\nmodule.exports = function(){ /* empty */ };\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(21)\n  , toLength  = __webpack_require__(66)\n  , toIndex   = __webpack_require__(65);\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(22)\n  , TAG = __webpack_require__(3)('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(47);\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(2).document && document.documentElement;\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(5) && !__webpack_require__(17)(function(){\n  return Object.defineProperty(__webpack_require__(23)('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar create         = __webpack_require__(27)\n  , descriptor     = __webpack_require__(29)\n  , setToStringTag = __webpack_require__(30)\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(6)(IteratorPrototype, __webpack_require__(3)('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n/***/ },\n/* 55 */\n/***/ function(module, exports) {\n\nmodule.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n/***/ },\n/* 56 */\n/***/ function(module, exports) {\n\nmodule.exports = true;\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = __webpack_require__(28)\n  , gOPS     = __webpack_require__(59)\n  , pIE      = __webpack_require__(62)\n  , toObject = __webpack_require__(32)\n  , IObject  = __webpack_require__(25)\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(17)(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar dP       = __webpack_require__(12)\n  , anObject = __webpack_require__(8)\n  , getKeys  = __webpack_require__(28);\n\nmodule.exports = __webpack_require__(5) ? Object.defineProperties : function defineProperties(O, Properties){\n  anObject(O);\n  var keys   = getKeys(Properties)\n    , length = keys.length\n    , i = 0\n    , P;\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n/***/ },\n/* 59 */\n/***/ function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has         = __webpack_require__(10)\n  , toObject    = __webpack_require__(32)\n  , IE_PROTO    = __webpack_require__(19)('IE_PROTO')\n  , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n  O = toObject(O);\n  if(has(O, IE_PROTO))return O[IE_PROTO];\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar has          = __webpack_require__(10)\n  , toIObject    = __webpack_require__(21)\n  , arrayIndexOf = __webpack_require__(49)(false)\n  , IE_PROTO     = __webpack_require__(19)('IE_PROTO');\n\nmodule.exports = function(object, names){\n  var O      = toIObject(object)\n    , i      = 0\n    , result = []\n    , key;\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while(names.length > i)if(has(O, key = names[i++])){\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n/***/ },\n/* 62 */\n/***/ function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(6);\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(20)\n  , defined   = __webpack_require__(16);\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(20)\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(20)\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(18);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar classof   = __webpack_require__(50)\n  , ITERATOR  = __webpack_require__(3)('iterator')\n  , Iterators = __webpack_require__(11);\nmodule.exports = __webpack_require__(1).getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(8)\n  , get      = __webpack_require__(68);\nmodule.exports = __webpack_require__(1).getIterator = function(it){\n  var iterFn = get(it);\n  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar addToUnscopables = __webpack_require__(48)\n  , step             = __webpack_require__(55)\n  , Iterators        = __webpack_require__(11)\n  , toIObject        = __webpack_require__(21);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(26)(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(9);\n\n$export($export.S + $export.F, 'Object', {assign: __webpack_require__(57)});\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(9)\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', {create: __webpack_require__(27)});\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(9);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(5), 'Object', {defineProperty: __webpack_require__(12).f});\n\n/***/ },\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\nvar $at  = __webpack_require__(64)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(26)(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n__webpack_require__(70);\nvar global        = __webpack_require__(2)\n  , hide          = __webpack_require__(6)\n  , Iterators     = __webpack_require__(11)\n  , TO_STRING_TAG = __webpack_require__(3)('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype;\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\""use strict\"";\n\n\nObject.defineProperty(exports, \""__esModule\"", {\n\tvalue: true\n});\nexports.DIGIT_PLACEHOLDER = exports.asYouTypeCustom = exports.getNumberTypeCustom = exports.isValidNumberCustom = exports.formatCustom = exports.parseCustom = undefined;\n\nvar _create = __webpack_require__(37);\n\nvar _create2 = _interopRequireDefault(_create);\n\nexports.parse = parse;\nexports.format = format;\nexports.get_number_type = get_number_type;\nexports.getNumberType = getNumberType;\nexports.is_valid_number = is_valid_number;\nexports.isValidNumber = isValidNumber;\nexports.as_you_type = as_you_type;\nexports.asYouType = asYouType;\n\nvar _parse = __webpack_require__(4);\n\nObject.defineProperty(exports, 'parseCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_parse).default;\n\t}\n});\n\nvar _format = __webpack_require__(13);\n\nObject.defineProperty(exports, 'formatCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_format).default;\n\t}\n});\n\nvar _validate = __webpack_require__(36);\n\nObject.defineProperty(exports, 'isValidNumberCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_validate).default;\n\t}\n});\n\nvar _getNumberType = __webpack_require__(14);\n\nObject.defineProperty(exports, 'getNumberTypeCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_getNumberType).default;\n\t}\n});\n\nvar _asYouType = __webpack_require__(35);\n\nObject.defineProperty(exports, 'asYouTypeCustom', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _interopRequireDefault(_asYouType).default;\n\t}\n});\nObject.defineProperty(exports, 'DIGIT_PLACEHOLDER', {\n\tenumerable: true,\n\tget: function get() {\n\t\treturn _asYouType.DIGIT_PLACEHOLDER;\n\t}\n});\nexports.getPhoneCode = getPhoneCode;\nexports.getPhoneCodeCustom = getPhoneCodeCustom;\n\nvar _metadataMin = __webpack_require__(34);\n\nvar _metadataMin2 = _interopRequireDefault(_metadataMin);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nvar _getNumberType2 = _interopRequireDefault(_getNumberType);\n\nvar _format2 = _interopRequireDefault(_format);\n\nvar _validate2 = _interopRequireDefault(_validate);\n\nvar _asYouType2 = _interopRequireDefault(_asYouType);\n\nvar _metadata = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse() {\n\tvar parameters = Array.prototype.slice.call(arguments);\n\tparameters.push(_metadataMin2.default);\n\treturn _parse2.default.apply(this, parameters);\n}\n\nfunction format() {\n\tvar parameters = Array.prototype.slice.call(arguments);\n\tparameters.push(_metadataMin2.default);\n\treturn _format2.default.apply(this, parameters);\n}\n\nfunction get_number_type() {\n\tvar parameters = Array.prototype.slice.call(arguments);\n\tparameters.push(_metadataMin2.default);\n\treturn _getNumberType2.default.apply(this, parameters);\n}\n\n// camelCase alias\nfunction getNumberType() {\n\treturn is_valid_number.apply(this, arguments);\n}\n\nfunction is_valid_number() {\n\tvar parameters = Array.prototype.slice.call(arguments);\n\tparameters.push(_metadataMin2.default);\n\treturn _validate2.default.apply(this, parameters);\n}\n\n// camelCase alias\nfunction isValidNumber() {\n\treturn is_valid_number.apply(this, arguments);\n}\n\nfunction as_you_type(country) {\n\t_asYouType2.default.call(this, country, _metadataMin2.default);\n}\n\nas_you_type.prototype = (0, _create2.default)(_asYouType2.default.prototype, {});\nas_you_type.prototype.constructor = as_you_type;\n\n// camelCase alias\n\nfunction asYouType(country) {\n\t_asYouType2.default.call(this, country, _metadataMin2.default);\n}\n\nasYouType.prototype = (0, _create2.default)(_asYouType2.default.prototype, {});\nasYouType.prototype.constructor = asYouType;\n\nfunction getPhoneCode(country) {\n\treturn getPhoneCodeCustom(country, _metadataMin2.default);\n}\n\nfunction getPhoneCodeCustom(country, metadata) {\n\tif (!metadata.countries[country]) {\n\t\tthrow new Error('Unknown country: \""' + country + '\""');\n\t}\n\n\treturn (0, _metadata.get_phone_code)(metadata.countries[country]);\n}\n\n/***/ }\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// libphonenumber-js.min.js"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 76);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4a03a0d07ea1d2dac759"",""export function get_phone_code(country_metadata) {\n\treturn country_metadata[0];\n}\n\nexport function get_national_number_pattern(country_metadata) {\n\treturn country_metadata[1];\n}\n\nexport function get_formats(country_metadata) {\n\treturn country_metadata[2] || [];\n}\n\nexport function get_national_prefix(country_metadata) {\n\treturn country_metadata[3];\n}\n\nexport function get_national_prefix_formatting_rule(country_metadata) {\n\treturn country_metadata[4];\n}\n\nexport function get_national_prefix_for_parsing(country_metadata) {\n\tvar national_prefix_for_parsing = country_metadata[5];\n\n\t// If `national_prefix_for_parsing` is not set explicitly,\n\t// then infer it from `national_prefix` (if any)\n\tif (!national_prefix_for_parsing) {\n\t\tnational_prefix_for_parsing = get_national_prefix(country_metadata);\n\t}\n\n\treturn national_prefix_for_parsing;\n}\n\nexport function get_national_prefix_transform_rule(country_metadata) {\n\treturn country_metadata[6];\n}\n\nexport function get_national_prefix_is_optional_when_formatting(country_metadata) {\n\treturn country_metadata[7];\n}\n\nexport function get_leading_digits(country_metadata) {\n\treturn country_metadata[8];\n}\n\nexport function get_format_pattern(format_array) {\n\treturn format_array[0];\n}\n\nexport function get_format_format(format_array) {\n\treturn format_array[1];\n}\n\nexport function get_format_leading_digits_patterns(format_array) {\n\treturn format_array[2] || [];\n}\n\nexport function get_format_national_prefix_formatting_rule(format_array, country_metadata) {\n\treturn format_array[3] || get_national_prefix_formatting_rule(country_metadata);\n}\n\nexport function get_format_national_prefix_is_optional_when_formatting(format_array, country_metadata) {\n\treturn format_array[4] || get_national_prefix_is_optional_when_formatting(country_metadata);\n}\n\nexport function get_format_national_prefix_is_mandatory_when_formatting(format_array, country_metadata) {\n\tvar national_prefix_formatting_rule = get_format_national_prefix_formatting_rule(format_array, country_metadata);\n\n\t// National prefix is omitted if there's no national prefix formatting rule\n\t// set for this country, or when the national prefix formatting rule\n\t// contains no national prefix itself, or when this rule is set but\n\t// national prefix is optional for this phone number format\n\t// (and it is not enforced explicitly)\n\treturn national_prefix_formatting_rule &&\n\t// Check that national prefix formatting rule is not a dummy one.\n\t// Check that national prefix formatting rule actually has national prefix digit(s).\n\tget_format_uses_national_prefix(national_prefix_formatting_rule) &&\n\t// Or maybe national prefix is optional for this format\n\t!get_format_national_prefix_is_optional_when_formatting(format_array, country_metadata);\n}\n\n// Checks whether national prefix formatting rule contains national prefix\nexport function get_format_uses_national_prefix(national_prefix_formatting_rule) {\n\t// Check that national prefix formatting rule is not a dummy one\n\treturn national_prefix_formatting_rule !== '$1' &&\n\t// Check that national prefix formatting rule actually has national prefix digit(s)\n\t/\\d/.test(national_prefix_formatting_rule.replace('$1', ''));\n}\n\nexport function get_format_international_format(format_array) {\n\treturn format_array[5] || get_format_format(format_array);\n}\n\n// Formatting information for regions which share\n// a country calling code is contained by only one region\n// for performance reasons. For example, for NANPA region\n// (\""North American Numbering Plan Administration\"",\n//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n// it will be contained in the metadata for `US`.\nexport function get_metadata_by_country_phone_code(country_phone_code, metadata) {\n\tvar country_code = metadata.country_phone_code_to_countries[country_phone_code][0];\n\treturn metadata.countries[country_code];\n}\n\nexport function get_types(country_metadata) {\n\treturn country_metadata[9];\n}\n\nfunction get_type(country_metadata, index) {\n\treturn get_types(country_metadata) ? get_types(country_metadata)[index] : undefined;\n}\n\nexport function get_type_fixed_line(country_metadata) {\n\treturn get_type(country_metadata, 0);\n}\n\nexport function get_type_mobile(country_metadata) {\n\treturn get_type(country_metadata, 1);\n}\n\nexport function get_type_toll_free(country_metadata) {\n\treturn get_type(country_metadata, 2);\n}\n\nexport function get_type_premium_rate(country_metadata) {\n\treturn get_type(country_metadata, 3);\n}\n\nexport function get_type_personal_number(country_metadata) {\n\treturn get_type(country_metadata, 4);\n}\n\nexport function get_type_voice_mail(country_metadata) {\n\treturn get_type(country_metadata, 5);\n}\n\nexport function get_type_uan(country_metadata) {\n\treturn get_type(country_metadata, 6);\n}\n\nexport function get_type_pager(country_metadata) {\n\treturn get_type(country_metadata, 7);\n}\n\nexport function get_type_voip(country_metadata) {\n\treturn get_type(country_metadata, 8);\n}\n\nexport function get_type_shared_cost(country_metadata) {\n\treturn get_type(country_metadata, 9);\n}\n\nexport function get_country_phone_code(country, country_metadata) {\n\treturn get_phone_code(country_metadata[country]);\n}\n//# sourceMappingURL=metadata.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/metadata.js"",""var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_core.js\n// module id = 1\n// module chunks = 0"",""// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_global.js\n// module id = 2\n// module chunks = 0"",""var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks.js\n// module id = 3\n// module chunks = 0"",""import _getIterator from 'babel-runtime/core-js/get-iterator';\nimport _extends from 'babel-runtime/helpers/extends';\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { matches_entirely } from './common';\n\nimport { get_phone_code, get_national_number_pattern, get_national_prefix_for_parsing, get_national_prefix_transform_rule, get_leading_digits, get_metadata_by_country_phone_code, get_formats } from\n// get_format_national_prefix_is_mandatory_when_formatting\n'./metadata';\n\nimport { choose_format_for_number } from './format';\n\nimport get_number_type from './get number type';\n\nexport var PLUS_CHARS = '+\\uFF0B';\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = '0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9';\n\n// `DASHES` will be right after the opening square bracket of the \""character class\""\nvar DASHES = '-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D';\nvar SLASHES = '\\uFF0F/';\nvar DOTS = '\\uFF0E.';\nvar WHITESPACE = ' \\xA0\\xAD\\u200B\\u2060\\u3000';\nvar BRACKETS = '()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]';\nvar TILDES = '~\\u2053\\u223C\\uFF5E';\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = '' + DASHES + SLASHES + DOTS + WHITESPACE + BRACKETS + TILDES;\n\n//  Regular expression of viable phone numbers. This is location independent.\n//  Checks we have at least three leading digits, and only valid punctuation,\n//  alpha characters and digits in the phone number. Does not include extension\n//  data. The symbol 'x' is allowed here as valid punctuation since it is often\n//  used as a placeholder for carrier codes, for example in Brazilian phone\n//  numbers. We also allow multiple '+' characters at the start.\n//\n//  Corresponds to the following:\n//  [digits]{minLengthNsn}|\n//  plus_sign*\n//  (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n//  The first reg-ex is to allow short numbers (two digits long) to be parsed if\n//  they are entered as \""15\"" etc, but only if there is no punctuation in them.\n//  The second expression restricts the number of digits to three or more, but\n//  then allows them to be in international form, and to have alpha-characters\n//  and punctuation. We split up the two reg-exes here and combine them when\n//  creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n//  with ^ and append $ to each branch.\n//\n//  Note VALID_PUNCTUATION starts with a -, so must be the first in the range.\n//  (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nvar VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER +\n// screw phone number extensions\n// '(?:' + EXTN_PATTERNS_FOR_PARSING + ')?' +\n'$', 'i');\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + ']+$');\n\nvar LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+');\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\nvar DIGIT_MAPPINGS = {\n\t'0': '0',\n\t'1': '1',\n\t'2': '2',\n\t'3': '3',\n\t'4': '4',\n\t'5': '5',\n\t'6': '6',\n\t'7': '7',\n\t'8': '8',\n\t'9': '9',\n\t'\\uFF10': '0', // Fullwidth digit 0\n\t'\\uFF11': '1', // Fullwidth digit 1\n\t'\\uFF12': '2', // Fullwidth digit 2\n\t'\\uFF13': '3', // Fullwidth digit 3\n\t'\\uFF14': '4', // Fullwidth digit 4\n\t'\\uFF15': '5', // Fullwidth digit 5\n\t'\\uFF16': '6', // Fullwidth digit 6\n\t'\\uFF17': '7', // Fullwidth digit 7\n\t'\\uFF18': '8', // Fullwidth digit 8\n\t'\\uFF19': '9', // Fullwidth digit 9\n\t'\\u0660': '0', // Arabic-indic digit 0\n\t'\\u0661': '1', // Arabic-indic digit 1\n\t'\\u0662': '2', // Arabic-indic digit 2\n\t'\\u0663': '3', // Arabic-indic digit 3\n\t'\\u0664': '4', // Arabic-indic digit 4\n\t'\\u0665': '5', // Arabic-indic digit 5\n\t'\\u0666': '6', // Arabic-indic digit 6\n\t'\\u0667': '7', // Arabic-indic digit 7\n\t'\\u0668': '8', // Arabic-indic digit 8\n\t'\\u0669': '9', // Arabic-indic digit 9\n\t'\\u06F0': '0', // Eastern-Arabic digit 0\n\t'\\u06F1': '1', // Eastern-Arabic digit 1\n\t'\\u06F2': '2', // Eastern-Arabic digit 2\n\t'\\u06F3': '3', // Eastern-Arabic digit 3\n\t'\\u06F4': '4', // Eastern-Arabic digit 4\n\t'\\u06F5': '5', // Eastern-Arabic digit 5\n\t'\\u06F6': '6', // Eastern-Arabic digit 6\n\t'\\u06F7': '7', // Eastern-Arabic digit 7\n\t'\\u06F8': '8', // Eastern-Arabic digit 8\n\t'\\u06F9': '9' // Eastern-Arabic digit 9\n};\n\n// The maximum length of the country calling code.\nvar MAX_LENGTH_COUNTRY_CODE = 3;\n\n// The minimum length of the national significant number.\nvar MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nvar MAX_LENGTH_FOR_NSN = 17;\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\nvar default_options = {\n\tcountry: {}\n};\n\n// `options`:\n//  {\n//    country:\n//    {\n//      restrict - (a two-letter country code)\n//                 the phone number must be in this country\n//\n//      default - (a two-letter country code)\n//                default country to use for phone number parsing and validation\n//                (if no country code could be derived from the phone number)\n//    }\n//  }\n//\n// Returns `{ country, number }`\n//\n// Example use cases:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\nexport default function parse(first_argument, second_argument, third_argument) {\n\tvar _sort_out_arguments = sort_out_arguments(first_argument, second_argument, third_argument),\n\t    text = _sort_out_arguments.text,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (!options) {\n\t\toptions = _extends({}, default_options);\n\t}\n\n\t// Validate country codes\n\n\t// Validate `default` country\n\tif (options.country.default && !metadata.countries[options.country.default]) {\n\t\tthrow new Error('Unknown country code: ' + options.country.default);\n\t}\n\n\t// Validate `restrict` country\n\tif (options.country.restrict && !metadata.countries[options.country.restrict]) {\n\t\tthrow new Error('Unknown country code: ' + options.country.restrict);\n\t}\n\n\t// Parse the phone number\n\n\tvar formatted_phone_number = extract_formatted_phone_number(text);\n\n\t// If the phone number is not viable, then abort.\n\tif (!is_viable_phone_number(formatted_phone_number)) {\n\t\treturn {};\n\t}\n\n\tvar _parse_phone_number_a = parse_phone_number_and_country_phone_code(formatted_phone_number, metadata),\n\t    country_phone_code = _parse_phone_number_a.country_phone_code,\n\t    number = _parse_phone_number_a.number;\n\n\t// Maybe invalid country phone code encountered\n\n\n\tif (!number) {\n\t\treturn {};\n\t}\n\n\tvar country = void 0;\n\tvar country_metadata = void 0;\n\n\t// Whether the phone number is formatted as an international phone number\n\tvar is_international = false;\n\n\tif (country_phone_code) {\n\t\tis_international = true;\n\n\t\t// Check country restriction\n\t\tif (options.country.restrict && country_phone_code !== get_phone_code(metadata.countries[options.country.restrict])) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Formatting information for regions which share\n\t\t// a country calling code is contained by only one region\n\t\t// for performance reasons. For example, for NANPA region\n\t\t// (\""North American Numbering Plan Administration\"",\n\t\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t\t// it will be contained in the metadata for `US`.\n\t\tcountry_metadata = get_metadata_by_country_phone_code(country_phone_code, metadata);\n\n\t\t// `country` will be set later,\n\t\t// because, for example, for NANPA countries\n\t\t// there are several countries corresponding\n\t\t// to the same `1` country phone code.\n\t\t// Therefore, to reliably determine the exact country,\n\t\t// national (significant) number should be parsed first.\n\t} else if (options.country.restrict || options.country.default) {\n\t\tcountry = options.country.restrict || options.country.default;\n\t\tcountry_metadata = metadata.countries[country];\n\n\t\tnumber = normalize(text);\n\t}\n\n\tif (!country_metadata) {\n\t\treturn {};\n\t}\n\n\tvar national_number = strip_national_prefix(number, country_metadata);\n\n\tvar did_have_national_prefix = national_number !== number;\n\n\t// https://github.com/halt-hammerzeit/libphonenumber-js/issues/67\n\t// if (!is_international && !did_have_national_prefix &&\n\t// \t\tis_national_prefix_required(national_number, country_metadata))\n\t// {\n\t// \treturn {}\n\t// }\n\n\t// Sometimes there are several countries\n\t// corresponding to the same country phone code\n\t// (e.g. NANPA countries all having `1` country phone code).\n\t// Therefore, to reliably determine the exact country,\n\t// national (significant) number should have been parsed first.\n\t//\n\tif (!country) {\n\t\t// When `metadata.json` is generated, all \""ambiguous\"" country phone codes\n\t\t// get their countries populated with the full set of\n\t\t// \""phone number type\"" regular expressions.\n\t\tcountry = find_country_code(country_phone_code, national_number, metadata);\n\n\t\t// Just in case there appears to be a bug in Google's metadata\n\t\t// and the exact country could not be extracted from the phone number.\n\t\t/* istanbul ignore if */\n\t\tif (!country) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Update metadata to be for this specific country\n\t\tcountry_metadata = metadata.countries[country];\n\t}\n\n\t// Validate national (significant) number length.\n\t//\n\t// A sidenote:\n\t//\n\t// They say that sometimes national (significant) numbers\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n\t// Such numbers will just be discarded.\n\t//\n\tif (national_number.length > MAX_LENGTH_FOR_NSN) {\n\t\treturn {};\n\t}\n\n\t// National number pattern is different for each country,\n\t// even for those ones which are part of the \""NANPA\"" group.\n\tvar national_number_rule = new RegExp(get_national_number_pattern(country_metadata));\n\n\t// Check if national phone number pattern matches the number\n\tif (!matches_entirely(national_number, national_number_rule)) {\n\t\treturn {};\n\t}\n\n\treturn { country: country, phone: national_number };\n}\n\n// Normalizes a string of characters representing a phone number.\n// This converts wide-ascii and arabic-indic numerals to European numerals,\n// and strips punctuation and alpha characters.\nexport function normalize(number) {\n\treturn replace_characters(number, DIGIT_MAPPINGS);\n}\n\n// For any character not being part of `replacements`\n// it is removed from the phone number.\nexport function replace_characters(text, replacements) {\n\tvar replaced = '';\n\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = _getIterator(text), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar character = _step.value;\n\n\t\t\tvar replacement = replacements[character.toUpperCase()];\n\n\t\t\tif (replacement !== undefined) {\n\t\t\t\treplaced += replacement;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn replaced;\n}\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport function is_viable_phone_number(number) {\n\treturn number.length >= MIN_LENGTH_FOR_NSN && matches_entirely(number, VALID_PHONE_NUMBER_PATTERN);\n}\n\nexport function extract_formatted_phone_number(text) {\n\tif (!text || text.length > MAX_INPUT_STRING_LENGTH) {\n\t\treturn '';\n\t}\n\n\t// Attempt to extract a possible number from the string passed in\n\n\tvar starts_at = text.search(PHONE_NUMBER_START_PATTERN);\n\n\tif (starts_at < 0) {\n\t\treturn '';\n\t}\n\n\treturn text\n\t// Trim everything to the left of the phone number\n\t.slice(starts_at)\n\t// Remove trailing non-numerical characters\n\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n// Parses a formatted phone number.\nexport function parse_phone_number(number) {\n\tif (!number) {\n\t\treturn '';\n\t}\n\n\tvar is_international = LEADING_PLUS_CHARS_PATTERN.test(number);\n\n\t// Remove non-digits\n\t// (and strip the possible leading '+')\n\tnumber = normalize(number);\n\n\tif (is_international) {\n\t\treturn '+' + number;\n\t}\n\n\treturn number;\n}\n\n// Parses a formatted phone number\n// and returns `{ country_phone_code, number }`\n// where `number` is the national (significant) phone number.\n//\n// (aka `maybeExtractCountryPhoneCode`)\n//\nexport function parse_phone_number_and_country_phone_code(number, metadata) {\n\tnumber = parse_phone_number(number);\n\n\tif (!number) {\n\t\treturn {};\n\t}\n\n\t// If this is not an international phone number,\n\t// then don't extract country phone code.\n\tif (number[0] !== '+') {\n\t\treturn { number: number };\n\t}\n\n\t// Strip the leading '+' sign\n\tnumber = number.slice(1);\n\n\t// Fast abortion: country codes do not begin with a '0'\n\tif (number[0] === '0') {\n\t\treturn {};\n\t}\n\n\t// The thing with country phone codes\n\t// is that they are orthogonal to each other\n\t// i.e. there's no such country phone code A\n\t// for which country phone code B exists\n\t// where B starts with A.\n\t// Therefore, while scanning digits,\n\t// if a valid country code is found,\n\t// that means that it is the country code.\n\t//\n\tvar i = 1;\n\twhile (i <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n\t\tvar country_phone_code = number.slice(0, i);\n\n\t\tif (metadata.country_phone_code_to_countries[country_phone_code]) {\n\t\t\treturn { country_phone_code: country_phone_code, number: number.slice(i) };\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn {};\n}\n\n// Strips any national prefix (such as 0, 1) present in the number provided\nexport function strip_national_prefix(number, country_metadata) {\n\tvar national_prefix_for_parsing = get_national_prefix_for_parsing(country_metadata);\n\n\tif (!number || !national_prefix_for_parsing) {\n\t\treturn number;\n\t}\n\n\t// Attempt to parse the first digits as a national prefix\n\tvar national_prefix_pattern = new RegExp('^(?:' + national_prefix_for_parsing + ')');\n\tvar national_prefix_matcher = national_prefix_pattern.exec(number);\n\n\t// If no national prefix is present in the phone number,\n\t// but if the national prefix is optional for this country,\n\t// then consider this phone number valid.\n\t//\n\t// Google's reference `libphonenumber` implementation\n\t// wouldn't recognize such phone numbers as valid,\n\t// but I think it would perfectly make sense\n\t// to consider such phone numbers as valid\n\t// because if a national phone number was originally\n\t// formatted without the national prefix\n\t// then it must be parseable back into the original national number.\n\t// In other words, `parse(format(number))`\n\t// must always be equal to `number`.\n\t//\n\tif (!national_prefix_matcher) {\n\t\treturn number;\n\t}\n\n\tvar national_significant_number = void 0;\n\n\t// `national_prefix_for_parsing` capturing groups\n\t// (used only for really messy cases: Argentina, Brazil, Mexico, Somalia)\n\tvar any_groups_were_captured = national_prefix_matcher[national_prefix_matcher.length - 1];\n\tvar national_prefix_transform_rule = get_national_prefix_transform_rule(country_metadata);\n\n\t// If the national number tranformation is needed then do it\n\tif (national_prefix_transform_rule && any_groups_were_captured) {\n\t\tnational_significant_number = number.replace(national_prefix_pattern, national_prefix_transform_rule);\n\t}\n\t// Else, no transformation is necessary,\n\t// and just strip the national prefix.\n\telse {\n\t\t\tnational_significant_number = number.slice(national_prefix_matcher[0].length);\n\t\t}\n\n\t// Verify the parsed national (significant) number for this country\n\tvar national_number_rule = new RegExp(get_national_number_pattern(country_metadata));\n\n\t// If the original number (before stripping national prefix) was viable,\n\t// and the resultant number is not, then prefer the original phone number.\n\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t// a national prefix and a leading digit of a valid national phone number,\n\t// like `8` is the national prefix for Russia and both\n\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\tif (matches_entirely(number, national_number_rule) && !matches_entirely(national_significant_number, national_number_rule)) {\n\t\treturn number;\n\t}\n\n\t// Return the parsed national (significant) number\n\treturn national_significant_number;\n}\n\nexport function find_country_code(country_phone_code, national_phone_number, metadata) {\n\t// Is always non-empty, because `country_phone_code` is always valid\n\tvar possible_countries = metadata.country_phone_code_to_countries[country_phone_code];\n\n\t// If there's just one country corresponding to the country code,\n\t// then just return it, without further phone number digits validation.\n\tif (possible_countries.length === 1) {\n\t\treturn possible_countries[0];\n\t}\n\n\tvar _iteratorNormalCompletion2 = true;\n\tvar _didIteratorError2 = false;\n\tvar _iteratorError2 = undefined;\n\n\ttry {\n\t\tfor (var _iterator2 = _getIterator(possible_countries), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\tvar country_code = _step2.value;\n\n\t\t\tvar country = metadata.countries[country_code];\n\n\t\t\t// Leading digits check would be the simplest one\n\t\t\tif (get_leading_digits(country)) {\n\t\t\t\tif (national_phone_number && national_phone_number.search(get_leading_digits(country)) === 0) {\n\t\t\t\t\treturn country_code;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Else perform full validation with all of those bulky\n\t\t\t// fixed-line/mobile/etc regular expressions.\n\t\t\telse if (get_number_type({ phone: national_phone_number, country: country_code }, metadata)) {\n\t\t\t\t\treturn country_code;\n\t\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError2 = true;\n\t\t_iteratorError2 = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t_iterator2.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError2) {\n\t\t\t\tthrow _iteratorError2;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// export function is_national_prefix_required(national_number, country_metadata)\n// {\n// \tconst format = choose_format_for_number(get_formats(country_metadata), national_number)\n//\n// \tif (format)\n// \t{\n// \t\treturn get_format_national_prefix_is_mandatory_when_formatting(format, country_metadata)\n// \t}\n// }\n\n// Sort out arguments\nfunction sort_out_arguments(first_argument, second_argument, third_argument) {\n\tvar text = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\tif (typeof first_argument === 'string') {\n\t\ttext = first_argument;\n\t}\n\n\t// Covert `resrict` country to an `options` object\n\tif (typeof second_argument === 'string') {\n\t\tvar restrict_to_country = second_argument;\n\n\t\toptions = _extends({}, default_options, {\n\n\t\t\tcountry: {\n\t\t\t\trestrict: restrict_to_country\n\t\t\t}\n\t\t});\n\n\t\tmetadata = third_argument;\n\t} else {\n\t\t// Differentiate `metadata` from `options`\n\t\tif (second_argument && second_argument.countries) {\n\t\t\tmetadata = second_argument;\n\t\t} else {\n\t\t\toptions = second_argument;\n\t\t\tmetadata = third_argument;\n\t\t}\n\t}\n\n\t// Sanity check\n\tif (!metadata) {\n\t\tthrow new Error('Metadata not passed');\n\t}\n\n\treturn { text: text, options: options, metadata: metadata };\n}\n//# sourceMappingURL=parse.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/parse.js"",""// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_descriptors.js\n// module id = 5\n// module chunks = 0"",""var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_hide.js\n// module id = 6\n// module chunks = 0"",""// Checks whether the entire input sequence can be matched\n// against the regular expression.\nexport function matches_entirely() {\n\tvar text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar regular_expression = arguments[1];\n\n\tif (typeof regular_expression === 'string') {\n\t\tregular_expression = '^(?:' + regular_expression + ')$';\n\t}\n\n\tvar matched_groups = text.match(regular_expression);\n\treturn matched_groups && matched_groups[0].length === text.length;\n}\n//# sourceMappingURL=common.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/common.js"",""var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_an-object.js\n// module id = 8\n// module chunks = 0"",""var global    = require('./_global')\n  , core      = require('./_core')\n  , ctx       = require('./_ctx')\n  , hide      = require('./_hide')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_export.js\n// module id = 9\n// module chunks = 0"",""var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_has.js\n// module id = 10\n// module chunks = 0"",""module.exports = {};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iterators.js\n// module id = 11\n// module chunks = 0"",""var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-dp.js\n// module id = 12\n// module chunks = 0"",""import _getIterator from 'babel-runtime/core-js/get-iterator';\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { matches_entirely } from './common';\n\nimport { parse_phone_number_and_country_phone_code } from './parse';\n\nimport { get_phone_code, get_formats, get_format_pattern, get_format_format, get_format_leading_digits_patterns, get_format_national_prefix_formatting_rule, get_format_national_prefix_is_optional_when_formatting, get_format_international_format, get_metadata_by_country_phone_code } from './metadata';\n\n// Formats a phone number\n//\n// Example use cases:\n//\n// ```js\n// format('8005553535', 'RU', 'International')\n// format('8005553535', 'RU', 'International', metadata)\n// format({ phone: '8005553535', country: 'RU' }, 'International')\n// format({ phone: '8005553535', country: 'RU' }, 'International', metadata)\n// format('+78005553535', 'National')\n// format('+78005553535', 'National', metadata)\n// ```\n//\nexport default function format(first_argument, second_argument, third_argument, fourth_argument) {\n\tvar _sort_out_arguments = sort_out_arguments(first_argument, second_argument, third_argument, fourth_argument),\n\t    input = _sort_out_arguments.input,\n\t    format_type = _sort_out_arguments.format_type,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tvar country_metadata = void 0;\n\n\tif (input.country) {\n\t\tcountry_metadata = metadata.countries[input.country];\n\t}\n\n\tvar _parse_phone_number_a = parse_phone_number_and_country_phone_code(input.phone, metadata),\n\t    country_phone_code = _parse_phone_number_a.country_phone_code,\n\t    number = _parse_phone_number_a.number;\n\n\tif (country_phone_code) {\n\t\t// Check country restriction\n\t\tif (input.country && country_metadata && country_phone_code !== get_phone_code(country_metadata)) {\n\t\t\treturn input.phone;\n\t\t}\n\n\t\tcountry_metadata = get_metadata_by_country_phone_code(country_phone_code, metadata);\n\t}\n\n\tif (!country_metadata) {\n\t\treturn input.phone;\n\t}\n\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\t\tif (!number) {\n\t\t\t\treturn '+' + get_phone_code(country_metadata);\n\t\t\t}\n\t\t\tvar national_number = format_national_number(number, 'International', false, country_metadata);\n\t\t\treturn '+' + get_phone_code(country_metadata) + ' ' + national_number;\n\n\t\tcase 'International_plaintext':\n\t\t\treturn '+' + get_phone_code(country_metadata) + input.phone;\n\n\t\tcase 'National':\n\t\t\tif (!number) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn format_national_number(number, 'National', false, country_metadata);\n\t}\n}\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly.  Therefore, we use \\d, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\n\nexport function format_national_number_using_format(number, format, international, enforce_national_prefix, country_metadata) {\n\tvar format_pattern_matcher = new RegExp(get_format_pattern(format));\n\n\tvar national_prefix_formatting_rule = get_format_national_prefix_formatting_rule(format, country_metadata);\n\n\t// National prefix is omitted if there's no national prefix formatting rule\n\t// set for this country, or when this rule is set but\n\t// national prefix is optional for this phone number format\n\t// (and it is not enforced explicitly)\n\tvar national_prefix_may_be_omitted = !national_prefix_formatting_rule || national_prefix_formatting_rule && get_format_national_prefix_is_optional_when_formatting(format, country_metadata) && !enforce_national_prefix;\n\n\tif (!international && !national_prefix_may_be_omitted) {\n\t\treturn number.replace(format_pattern_matcher, get_format_format(format).replace(FIRST_GROUP_PATTERN, national_prefix_formatting_rule));\n\t}\n\n\tvar formatted_number = number.replace(format_pattern_matcher, international ? get_format_international_format(format) : get_format_format(format));\n\n\tif (international) {\n\t\treturn local_to_international_style(formatted_number);\n\t}\n\n\treturn formatted_number;\n}\n\nexport function format_national_number(number, format_as, enforce_national_prefix, country_metadata) {\n\tvar format = choose_format_for_number(get_formats(country_metadata), number);\n\n\tif (!format) {\n\t\treturn number;\n\t}\n\n\treturn format_national_number_using_format(number, format, format_as === 'International', enforce_national_prefix, country_metadata);\n}\n\nexport function choose_format_for_number(available_formats, national_number) {\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = _getIterator(available_formats), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _format = _step.value;\n\n\t\t\t// Validate leading digits\n\t\t\tif (get_format_leading_digits_patterns(_format).length > 0) {\n\t\t\t\t// The last leading_digits_pattern is used here, as it is the most detailed\n\t\t\t\tvar last_leading_digits_pattern = get_format_leading_digits_patterns(_format)[get_format_leading_digits_patterns(_format).length - 1];\n\n\t\t\t\t// If leading digits don't match then move on to the next phone number format\n\t\t\t\tif (national_number.search(last_leading_digits_pattern) !== 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check that the national number matches the phone number format regular expression\n\t\t\tif (matches_entirely(national_number, new RegExp(get_format_pattern(_format)))) {\n\t\t\t\treturn _format;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \""(999) 111-22-33\"" -> \""999 111 22 33\""\n//\nexport function local_to_international_style(local) {\n\treturn local\n\t// Remove brackets\n\t.replace(/[\\(\\)]/g, '')\n\t// Replace dashes with spaces\n\t.replace(/\\-/g, ' ').trim();\n}\n\n// Sort out arguments\nfunction sort_out_arguments() {\n\tvar first_argument = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar second_argument = arguments[1];\n\tvar third_argument = arguments[2];\n\tvar fourth_argument = arguments[3];\n\n\tvar input = void 0;\n\tvar format_type = void 0;\n\tvar metadata = void 0;\n\n\t// Sort out arguments\n\tif (typeof first_argument === 'string') {\n\t\t// If country code is supplied\n\t\tif (typeof third_argument === 'string') {\n\t\t\t// Will be `parse()`d later in code\n\t\t\tinput = {\n\t\t\t\tphone: first_argument,\n\t\t\t\tcountry: second_argument\n\t\t\t};\n\n\t\t\tformat_type = third_argument;\n\t\t\tmetadata = fourth_argument;\n\t\t}\n\t\t// Just an international phone number is supplied\n\t\telse {\n\t\t\t\t// Will be `parse()`d later in code\n\t\t\t\tinput = {\n\t\t\t\t\tphone: first_argument\n\t\t\t\t};\n\n\t\t\t\tif (typeof second_argument !== 'string') {\n\t\t\t\t\tthrow new Error('Format type argument not passed for `format()`');\n\t\t\t\t}\n\n\t\t\t\tformat_type = second_argument;\n\t\t\t\tmetadata = third_argument;\n\t\t\t}\n\t} else {\n\t\tinput = first_argument;\n\t\tformat_type = second_argument;\n\t\tmetadata = third_argument;\n\t}\n\n\t// Sanity check\n\tif (!metadata) {\n\t\tthrow new Error('Metadata not passed');\n\t}\n\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\tcase 'International_plaintext':\n\t\tcase 'National':\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error('Unknown format type argument passed to \""format()\"": \""' + format_type + '\""');\n\t}\n\n\treturn { input: input, format_type: format_type, metadata: metadata };\n}\n//# sourceMappingURL=format.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/format.js"",""import parse, { is_viable_phone_number } from './parse';\n\nimport { matches_entirely } from './common';\n\nimport { get_national_number_pattern, get_type_fixed_line, get_type_mobile, get_type_toll_free, get_type_premium_rate, get_type_personal_number, get_type_voice_mail, get_type_uan, get_type_pager, get_type_voip, get_type_shared_cost } from './metadata';\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function get_number_type(first_argument, second_argument, third_argument) {\n\tvar _sort_out_arguments = sort_out_arguments(first_argument, second_argument, third_argument),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// Sanity check\n\n\n\tif (!metadata) {\n\t\tthrow new Error('Metadata not passed');\n\t}\n\n\t// When no input was passed\n\tif (!input) {\n\t\treturn;\n\t}\n\n\t// When `parse()` returned `{}`\n\t// meaning that the phone number is not a valid one.\n\tif (!input.country) {\n\t\treturn;\n\t}\n\n\tvar national_number = input.phone;\n\tvar country_metadata = metadata.countries[input.country];\n\n\t// The following is copy-pasted from the original function:\n\t// https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n\t// Is this national number even valid for this country\n\tif (!is_of_type(national_number, get_national_number_pattern(country_metadata))) {\n\t\treturn; // 'UNKNOWN'\n\t}\n\n\tif (is_of_type(national_number, get_type_premium_rate(country_metadata))) {\n\t\treturn 'PREMIUM_RATE';\n\t}\n\n\tif (is_of_type(national_number, get_type_toll_free(country_metadata))) {\n\t\treturn 'TOLL_FREE';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, get_type_shared_cost(country_metadata))) {\n\t\treturn 'SHARED_COST';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, get_type_voip(country_metadata))) {\n\t\treturn 'VOIP';\n\t}\n\n\tif (is_of_type(national_number, get_type_personal_number(country_metadata))) {\n\t\treturn 'PERSONAL_NUMBER';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, get_type_pager(country_metadata))) {\n\t\treturn 'PAGER';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, get_type_uan(country_metadata))) {\n\t\treturn 'UAN';\n\t}\n\n\t/* istanbul ignore if */\n\tif (is_of_type(national_number, get_type_voice_mail(country_metadata))) {\n\t\treturn 'VOICEMAIL';\n\t}\n\n\t// Is it fixed line number\n\tif (is_of_type(national_number, get_type_fixed_line(country_metadata))) {\n\t\t// Because duplicate regular expressions are removed\n\t\t// to reduce metadata size, if there's no \""mobile\"" pattern\n\t\t// then it means it was removed due to being a duplicate of some other pattern.\n\t\t//\n\t\tif (!get_type_mobile(country_metadata)) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// Check if the number happens to qualify as both fixed line and mobile.\n\t\t// (no such country in the minimal metadata set)\n\t\t/* istanbul ignore if */\n\t\tif (is_of_type(national_number, get_type_mobile(country_metadata))) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\treturn 'FIXED_LINE';\n\t}\n\n\tif (is_of_type(national_number, get_type_mobile(country_metadata))) {\n\t\treturn 'MOBILE';\n\t}\n\n\t// return 'UNKNOWN'\n}\n\nexport function is_of_type(national_number, type) {\n\t// // Check if any possible number lengths are present;\n\t// // if so, we use them to avoid checking\n\t// // the validation pattern if they don't match.\n\t// // If they are absent, this means they match\n\t// // the general description, which we have\n\t// // already checked before a specific number type.\n\t// if (get_possible_lengths(type) &&\n\t// \tget_possible_lengths(type).indexOf(national_number.length) === -1)\n\t// {\n\t// \treturn false\n\t// }\n\n\t// get_type_pattern(type) === type\n\treturn matches_entirely(national_number, type);\n}\n\n// Sort out arguments\nexport function sort_out_arguments(first_argument, second_argument, third_argument) {\n\tvar input = void 0;\n\tvar metadata = void 0;\n\n\tif (typeof first_argument === 'string') {\n\t\t// If country code is supplied\n\t\tif (typeof second_argument === 'string') {\n\t\t\tmetadata = third_argument;\n\n\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t// while this `validate` function needs to verify\n\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\tif (is_viable_phone_number(first_argument)) {\n\t\t\t\tinput = parse(first_argument, second_argument, metadata);\n\t\t\t}\n\t\t}\n\t\t// Just an international phone number is supplied\n\t\telse {\n\t\t\t\tmetadata = second_argument;\n\n\t\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t\t// while this `validate` function needs to verify\n\t\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\t\tif (is_viable_phone_number(first_argument)) {\n\t\t\t\t\tinput = parse(first_argument, metadata);\n\t\t\t\t}\n\t\t\t}\n\t} else {\n\t\t// The `first_argument` must be a valid phone number\n\t\t// as a whole, not just a part of it which gets parsed here.\n\t\tif (first_argument && first_argument.phone && is_viable_phone_number(first_argument.phone)) {\n\t\t\tinput = first_argument;\n\t\t}\n\n\t\tmetadata = second_argument;\n\t}\n\n\treturn { input: input, metadata: metadata };\n}\n//# sourceMappingURL=get number type.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/get number type.js"",""module.exports = { \""default\"": require(\""core-js/library/fn/get-iterator\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/get-iterator.js\n// module id = 15\n// module chunks = 0"",""// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_defined.js\n// module id = 16\n// module chunks = 0"",""module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_fails.js\n// module id = 17\n// module chunks = 0"",""module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_is-object.js\n// module id = 18\n// module chunks = 0"",""var shared = require('./_shared')('keys')\n  , uid    = require('./_uid');\nmodule.exports = function(key){\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_shared-key.js\n// module id = 19\n// module chunks = 0"",""// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-integer.js\n// module id = 20\n// module chunks = 0"",""// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-iobject.js\n// module id = 21\n// module chunks = 0"",""var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_cof.js\n// module id = 22\n// module chunks = 0"",""var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_dom-create.js\n// module id = 23\n// module chunks = 0"",""// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_enum-bug-keys.js\n// module id = 24\n// module chunks = 0"",""// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iobject.js\n// module id = 25\n// module chunks = 0"",""'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-define.js\n// module id = 26\n// module chunks = 0"",""// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject    = require('./_an-object')\n  , dPs         = require('./_object-dps')\n  , enumBugKeys = require('./_enum-bug-keys')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , Empty       = function(){ /* empty */ }\n  , PROTOTYPE   = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe')\n    , i      = enumBugKeys.length\n    , lt     = '<'\n    , gt     = '>'\n    , iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n  var result;\n  if(O !== null){\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty;\n    Empty[PROTOTYPE] = null;\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-create.js\n// module id = 27\n// module chunks = 0"",""// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys       = require('./_object-keys-internal')\n  , enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O){\n  return $keys(O, enumBugKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-keys.js\n// module id = 28\n// module chunks = 0"",""module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_property-desc.js\n// module id = 29\n// module chunks = 0"",""var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-to-string-tag.js\n// module id = 30\n// module chunks = 0"",""var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_shared.js\n// module id = 31\n// module chunks = 0"",""// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-object.js\n// module id = 32\n// module chunks = 0"",""var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_uid.js\n// module id = 33\n// module chunks = 0"",""module.exports = {\n\t\""country_phone_code_to_countries\"": {\n\t\t\""1\"": [\n\t\t\t\""US\"",\n\t\t\t\""AG\"",\n\t\t\t\""AI\"",\n\t\t\t\""AS\"",\n\t\t\t\""BB\"",\n\t\t\t\""BM\"",\n\t\t\t\""BS\"",\n\t\t\t\""CA\"",\n\t\t\t\""DM\"",\n\t\t\t\""DO\"",\n\t\t\t\""GD\"",\n\t\t\t\""GU\"",\n\t\t\t\""JM\"",\n\t\t\t\""KN\"",\n\t\t\t\""KY\"",\n\t\t\t\""LC\"",\n\t\t\t\""MP\"",\n\t\t\t\""MS\"",\n\t\t\t\""PR\"",\n\t\t\t\""SX\"",\n\t\t\t\""TC\"",\n\t\t\t\""TT\"",\n\t\t\t\""VC\"",\n\t\t\t\""VG\"",\n\t\t\t\""VI\""\n\t\t],\n\t\t\""7\"": [\n\t\t\t\""RU\"",\n\t\t\t\""KZ\""\n\t\t],\n\t\t\""20\"": [\n\t\t\t\""EG\""\n\t\t],\n\t\t\""27\"": [\n\t\t\t\""ZA\""\n\t\t],\n\t\t\""30\"": [\n\t\t\t\""GR\""\n\t\t],\n\t\t\""31\"": [\n\t\t\t\""NL\""\n\t\t],\n\t\t\""32\"": [\n\t\t\t\""BE\""\n\t\t],\n\t\t\""33\"": [\n\t\t\t\""FR\""\n\t\t],\n\t\t\""34\"": [\n\t\t\t\""ES\""\n\t\t],\n\t\t\""36\"": [\n\t\t\t\""HU\""\n\t\t],\n\t\t\""39\"": [\n\t\t\t\""IT\"",\n\t\t\t\""VA\""\n\t\t],\n\t\t\""40\"": [\n\t\t\t\""RO\""\n\t\t],\n\t\t\""41\"": [\n\t\t\t\""CH\""\n\t\t],\n\t\t\""43\"": [\n\t\t\t\""AT\""\n\t\t],\n\t\t\""44\"": [\n\t\t\t\""GB\"",\n\t\t\t\""GG\"",\n\t\t\t\""IM\"",\n\t\t\t\""JE\""\n\t\t],\n\t\t\""45\"": [\n\t\t\t\""DK\""\n\t\t],\n\t\t\""46\"": [\n\t\t\t\""SE\""\n\t\t],\n\t\t\""47\"": [\n\t\t\t\""NO\"",\n\t\t\t\""SJ\""\n\t\t],\n\t\t\""48\"": [\n\t\t\t\""PL\""\n\t\t],\n\t\t\""49\"": [\n\t\t\t\""DE\""\n\t\t],\n\t\t\""51\"": [\n\t\t\t\""PE\""\n\t\t],\n\t\t\""52\"": [\n\t\t\t\""MX\""\n\t\t],\n\t\t\""53\"": [\n\t\t\t\""CU\""\n\t\t],\n\t\t\""54\"": [\n\t\t\t\""AR\""\n\t\t],\n\t\t\""55\"": [\n\t\t\t\""BR\""\n\t\t],\n\t\t\""56\"": [\n\t\t\t\""CL\""\n\t\t],\n\t\t\""57\"": [\n\t\t\t\""CO\""\n\t\t],\n\t\t\""58\"": [\n\t\t\t\""VE\""\n\t\t],\n\t\t\""60\"": [\n\t\t\t\""MY\""\n\t\t],\n\t\t\""61\"": [\n\t\t\t\""AU\"",\n\t\t\t\""CC\"",\n\t\t\t\""CX\""\n\t\t],\n\t\t\""62\"": [\n\t\t\t\""ID\""\n\t\t],\n\t\t\""63\"": [\n\t\t\t\""PH\""\n\t\t],\n\t\t\""64\"": [\n\t\t\t\""NZ\""\n\t\t],\n\t\t\""65\"": [\n\t\t\t\""SG\""\n\t\t],\n\t\t\""66\"": [\n\t\t\t\""TH\""\n\t\t],\n\t\t\""81\"": [\n\t\t\t\""JP\""\n\t\t],\n\t\t\""82\"": [\n\t\t\t\""KR\""\n\t\t],\n\t\t\""84\"": [\n\t\t\t\""VN\""\n\t\t],\n\t\t\""86\"": [\n\t\t\t\""CN\""\n\t\t],\n\t\t\""90\"": [\n\t\t\t\""TR\""\n\t\t],\n\t\t\""91\"": [\n\t\t\t\""IN\""\n\t\t],\n\t\t\""92\"": [\n\t\t\t\""PK\""\n\t\t],\n\t\t\""93\"": [\n\t\t\t\""AF\""\n\t\t],\n\t\t\""94\"": [\n\t\t\t\""LK\""\n\t\t],\n\t\t\""95\"": [\n\t\t\t\""MM\""\n\t\t],\n\t\t\""98\"": [\n\t\t\t\""IR\""\n\t\t],\n\t\t\""211\"": [\n\t\t\t\""SS\""\n\t\t],\n\t\t\""212\"": [\n\t\t\t\""MA\"",\n\t\t\t\""EH\""\n\t\t],\n\t\t\""213\"": [\n\t\t\t\""DZ\""\n\t\t],\n\t\t\""216\"": [\n\t\t\t\""TN\""\n\t\t],\n\t\t\""218\"": [\n\t\t\t\""LY\""\n\t\t],\n\t\t\""220\"": [\n\t\t\t\""GM\""\n\t\t],\n\t\t\""221\"": [\n\t\t\t\""SN\""\n\t\t],\n\t\t\""222\"": [\n\t\t\t\""MR\""\n\t\t],\n\t\t\""223\"": [\n\t\t\t\""ML\""\n\t\t],\n\t\t\""224\"": [\n\t\t\t\""GN\""\n\t\t],\n\t\t\""225\"": [\n\t\t\t\""CI\""\n\t\t],\n\t\t\""226\"": [\n\t\t\t\""BF\""\n\t\t],\n\t\t\""227\"": [\n\t\t\t\""NE\""\n\t\t],\n\t\t\""228\"": [\n\t\t\t\""TG\""\n\t\t],\n\t\t\""229\"": [\n\t\t\t\""BJ\""\n\t\t],\n\t\t\""230\"": [\n\t\t\t\""MU\""\n\t\t],\n\t\t\""231\"": [\n\t\t\t\""LR\""\n\t\t],\n\t\t\""232\"": [\n\t\t\t\""SL\""\n\t\t],\n\t\t\""233\"": [\n\t\t\t\""GH\""\n\t\t],\n\t\t\""234\"": [\n\t\t\t\""NG\""\n\t\t],\n\t\t\""235\"": [\n\t\t\t\""TD\""\n\t\t],\n\t\t\""236\"": [\n\t\t\t\""CF\""\n\t\t],\n\t\t\""237\"": [\n\t\t\t\""CM\""\n\t\t],\n\t\t\""238\"": [\n\t\t\t\""CV\""\n\t\t],\n\t\t\""239\"": [\n\t\t\t\""ST\""\n\t\t],\n\t\t\""240\"": [\n\t\t\t\""GQ\""\n\t\t],\n\t\t\""241\"": [\n\t\t\t\""GA\""\n\t\t],\n\t\t\""242\"": [\n\t\t\t\""CG\""\n\t\t],\n\t\t\""243\"": [\n\t\t\t\""CD\""\n\t\t],\n\t\t\""244\"": [\n\t\t\t\""AO\""\n\t\t],\n\t\t\""245\"": [\n\t\t\t\""GW\""\n\t\t],\n\t\t\""246\"": [\n\t\t\t\""IO\""\n\t\t],\n\t\t\""247\"": [\n\t\t\t\""AC\""\n\t\t],\n\t\t\""248\"": [\n\t\t\t\""SC\""\n\t\t],\n\t\t\""249\"": [\n\t\t\t\""SD\""\n\t\t],\n\t\t\""250\"": [\n\t\t\t\""RW\""\n\t\t],\n\t\t\""251\"": [\n\t\t\t\""ET\""\n\t\t],\n\t\t\""252\"": [\n\t\t\t\""SO\""\n\t\t],\n\t\t\""253\"": [\n\t\t\t\""DJ\""\n\t\t],\n\t\t\""254\"": [\n\t\t\t\""KE\""\n\t\t],\n\t\t\""255\"": [\n\t\t\t\""TZ\""\n\t\t],\n\t\t\""256\"": [\n\t\t\t\""UG\""\n\t\t],\n\t\t\""257\"": [\n\t\t\t\""BI\""\n\t\t],\n\t\t\""258\"": [\n\t\t\t\""MZ\""\n\t\t],\n\t\t\""260\"": [\n\t\t\t\""ZM\""\n\t\t],\n\t\t\""261\"": [\n\t\t\t\""MG\""\n\t\t],\n\t\t\""262\"": [\n\t\t\t\""RE\"",\n\t\t\t\""YT\""\n\t\t],\n\t\t\""263\"": [\n\t\t\t\""ZW\""\n\t\t],\n\t\t\""264\"": [\n\t\t\t\""NA\""\n\t\t],\n\t\t\""265\"": [\n\t\t\t\""MW\""\n\t\t],\n\t\t\""266\"": [\n\t\t\t\""LS\""\n\t\t],\n\t\t\""267\"": [\n\t\t\t\""BW\""\n\t\t],\n\t\t\""268\"": [\n\t\t\t\""SZ\""\n\t\t],\n\t\t\""269\"": [\n\t\t\t\""KM\""\n\t\t],\n\t\t\""290\"": [\n\t\t\t\""SH\"",\n\t\t\t\""TA\""\n\t\t],\n\t\t\""291\"": [\n\t\t\t\""ER\""\n\t\t],\n\t\t\""297\"": [\n\t\t\t\""AW\""\n\t\t],\n\t\t\""298\"": [\n\t\t\t\""FO\""\n\t\t],\n\t\t\""299\"": [\n\t\t\t\""GL\""\n\t\t],\n\t\t\""350\"": [\n\t\t\t\""GI\""\n\t\t],\n\t\t\""351\"": [\n\t\t\t\""PT\""\n\t\t],\n\t\t\""352\"": [\n\t\t\t\""LU\""\n\t\t],\n\t\t\""353\"": [\n\t\t\t\""IE\""\n\t\t],\n\t\t\""354\"": [\n\t\t\t\""IS\""\n\t\t],\n\t\t\""355\"": [\n\t\t\t\""AL\""\n\t\t],\n\t\t\""356\"": [\n\t\t\t\""MT\""\n\t\t],\n\t\t\""357\"": [\n\t\t\t\""CY\""\n\t\t],\n\t\t\""358\"": [\n\t\t\t\""FI\"",\n\t\t\t\""AX\""\n\t\t],\n\t\t\""359\"": [\n\t\t\t\""BG\""\n\t\t],\n\t\t\""370\"": [\n\t\t\t\""LT\""\n\t\t],\n\t\t\""371\"": [\n\t\t\t\""LV\""\n\t\t],\n\t\t\""372\"": [\n\t\t\t\""EE\""\n\t\t],\n\t\t\""373\"": [\n\t\t\t\""MD\""\n\t\t],\n\t\t\""374\"": [\n\t\t\t\""AM\""\n\t\t],\n\t\t\""375\"": [\n\t\t\t\""BY\""\n\t\t],\n\t\t\""376\"": [\n\t\t\t\""AD\""\n\t\t],\n\t\t\""377\"": [\n\t\t\t\""MC\""\n\t\t],\n\t\t\""378\"": [\n\t\t\t\""SM\""\n\t\t],\n\t\t\""380\"": [\n\t\t\t\""UA\""\n\t\t],\n\t\t\""381\"": [\n\t\t\t\""RS\""\n\t\t],\n\t\t\""382\"": [\n\t\t\t\""ME\""\n\t\t],\n\t\t\""385\"": [\n\t\t\t\""HR\""\n\t\t],\n\t\t\""386\"": [\n\t\t\t\""SI\""\n\t\t],\n\t\t\""387\"": [\n\t\t\t\""BA\""\n\t\t],\n\t\t\""389\"": [\n\t\t\t\""MK\""\n\t\t],\n\t\t\""420\"": [\n\t\t\t\""CZ\""\n\t\t],\n\t\t\""421\"": [\n\t\t\t\""SK\""\n\t\t],\n\t\t\""423\"": [\n\t\t\t\""LI\""\n\t\t],\n\t\t\""500\"": [\n\t\t\t\""FK\""\n\t\t],\n\t\t\""501\"": [\n\t\t\t\""BZ\""\n\t\t],\n\t\t\""502\"": [\n\t\t\t\""GT\""\n\t\t],\n\t\t\""503\"": [\n\t\t\t\""SV\""\n\t\t],\n\t\t\""504\"": [\n\t\t\t\""HN\""\n\t\t],\n\t\t\""505\"": [\n\t\t\t\""NI\""\n\t\t],\n\t\t\""506\"": [\n\t\t\t\""CR\""\n\t\t],\n\t\t\""507\"": [\n\t\t\t\""PA\""\n\t\t],\n\t\t\""508\"": [\n\t\t\t\""PM\""\n\t\t],\n\t\t\""509\"": [\n\t\t\t\""HT\""\n\t\t],\n\t\t\""590\"": [\n\t\t\t\""GP\"",\n\t\t\t\""BL\"",\n\t\t\t\""MF\""\n\t\t],\n\t\t\""591\"": [\n\t\t\t\""BO\""\n\t\t],\n\t\t\""592\"": [\n\t\t\t\""GY\""\n\t\t],\n\t\t\""593\"": [\n\t\t\t\""EC\""\n\t\t],\n\t\t\""594\"": [\n\t\t\t\""GF\""\n\t\t],\n\t\t\""595\"": [\n\t\t\t\""PY\""\n\t\t],\n\t\t\""596\"": [\n\t\t\t\""MQ\""\n\t\t],\n\t\t\""597\"": [\n\t\t\t\""SR\""\n\t\t],\n\t\t\""598\"": [\n\t\t\t\""UY\""\n\t\t],\n\t\t\""599\"": [\n\t\t\t\""CW\"",\n\t\t\t\""BQ\""\n\t\t],\n\t\t\""670\"": [\n\t\t\t\""TL\""\n\t\t],\n\t\t\""672\"": [\n\t\t\t\""NF\""\n\t\t],\n\t\t\""673\"": [\n\t\t\t\""BN\""\n\t\t],\n\t\t\""674\"": [\n\t\t\t\""NR\""\n\t\t],\n\t\t\""675\"": [\n\t\t\t\""PG\""\n\t\t],\n\t\t\""676\"": [\n\t\t\t\""TO\""\n\t\t],\n\t\t\""677\"": [\n\t\t\t\""SB\""\n\t\t],\n\t\t\""678\"": [\n\t\t\t\""VU\""\n\t\t],\n\t\t\""679\"": [\n\t\t\t\""FJ\""\n\t\t],\n\t\t\""680\"": [\n\t\t\t\""PW\""\n\t\t],\n\t\t\""681\"": [\n\t\t\t\""WF\""\n\t\t],\n\t\t\""682\"": [\n\t\t\t\""CK\""\n\t\t],\n\t\t\""683\"": [\n\t\t\t\""NU\""\n\t\t],\n\t\t\""685\"": [\n\t\t\t\""WS\""\n\t\t],\n\t\t\""686\"": [\n\t\t\t\""KI\""\n\t\t],\n\t\t\""687\"": [\n\t\t\t\""NC\""\n\t\t],\n\t\t\""688\"": [\n\t\t\t\""TV\""\n\t\t],\n\t\t\""689\"": [\n\t\t\t\""PF\""\n\t\t],\n\t\t\""690\"": [\n\t\t\t\""TK\""\n\t\t],\n\t\t\""691\"": [\n\t\t\t\""FM\""\n\t\t],\n\t\t\""692\"": [\n\t\t\t\""MH\""\n\t\t],\n\t\t\""800\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""808\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""850\"": [\n\t\t\t\""KP\""\n\t\t],\n\t\t\""852\"": [\n\t\t\t\""HK\""\n\t\t],\n\t\t\""853\"": [\n\t\t\t\""MO\""\n\t\t],\n\t\t\""855\"": [\n\t\t\t\""KH\""\n\t\t],\n\t\t\""856\"": [\n\t\t\t\""LA\""\n\t\t],\n\t\t\""870\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""878\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""880\"": [\n\t\t\t\""BD\""\n\t\t],\n\t\t\""881\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""882\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""883\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""886\"": [\n\t\t\t\""TW\""\n\t\t],\n\t\t\""888\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""960\"": [\n\t\t\t\""MV\""\n\t\t],\n\t\t\""961\"": [\n\t\t\t\""LB\""\n\t\t],\n\t\t\""962\"": [\n\t\t\t\""JO\""\n\t\t],\n\t\t\""963\"": [\n\t\t\t\""SY\""\n\t\t],\n\t\t\""964\"": [\n\t\t\t\""IQ\""\n\t\t],\n\t\t\""965\"": [\n\t\t\t\""KW\""\n\t\t],\n\t\t\""966\"": [\n\t\t\t\""SA\""\n\t\t],\n\t\t\""967\"": [\n\t\t\t\""YE\""\n\t\t],\n\t\t\""968\"": [\n\t\t\t\""OM\""\n\t\t],\n\t\t\""970\"": [\n\t\t\t\""PS\""\n\t\t],\n\t\t\""971\"": [\n\t\t\t\""AE\""\n\t\t],\n\t\t\""972\"": [\n\t\t\t\""IL\""\n\t\t],\n\t\t\""973\"": [\n\t\t\t\""BH\""\n\t\t],\n\t\t\""974\"": [\n\t\t\t\""QA\""\n\t\t],\n\t\t\""975\"": [\n\t\t\t\""BT\""\n\t\t],\n\t\t\""976\"": [\n\t\t\t\""MN\""\n\t\t],\n\t\t\""977\"": [\n\t\t\t\""NP\""\n\t\t],\n\t\t\""979\"": [\n\t\t\t\""001\""\n\t\t],\n\t\t\""992\"": [\n\t\t\t\""TJ\""\n\t\t],\n\t\t\""993\"": [\n\t\t\t\""TM\""\n\t\t],\n\t\t\""994\"": [\n\t\t\t\""AZ\""\n\t\t],\n\t\t\""995\"": [\n\t\t\t\""GE\""\n\t\t],\n\t\t\""996\"": [\n\t\t\t\""KG\""\n\t\t],\n\t\t\""998\"": [\n\t\t\t\""UZ\""\n\t\t]\n\t},\n\t\""countries\"": {\n\t\t\""AC\"": [\n\t\t\t\""247\"",\n\t\t\t\""[46]\\\\d{4}|[01589]\\\\d{5}\""\n\t\t],\n\t\t\""AD\"": [\n\t\t\t\""376\"",\n\t\t\t\""[16]\\\\d{5,8}|[37-9]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[137-9]|6[0-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""180[02]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""690\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""AE\"": [\n\t\t\t\""971\"",\n\t\t\t\""[2-79]\\\\d{7,8}|800\\\\d{2,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-4679])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-4679][2-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([479]00)(\\\\d)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[479]0\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([68]00)(\\\\d{2,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""60|8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""AF\"": [\n\t\t\t\""93\"",\n\t\t\t\""[2-7]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-7]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-7]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""AG\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""268\""\n\t\t],\n\t\t\""AI\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""264\""\n\t\t],\n\t\t\""AL\"": [\n\t\t\t\""355\"",\n\t\t\t\""[2-57]\\\\d{7}|6\\\\d{8}|8\\\\d{5,7}|9\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(4)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[0-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2358][2-5]|4[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235][16-9]|8[016-9]|[79]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""AM\"": [\n\t\t\t\""374\"",\n\t\t\t\""[1-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|47\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[1349]|[5-7]|9[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8|90\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0 $1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""AO\"": [\n\t\t\t\""244\"",\n\t\t\t\""[29]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""AR\"": [\n\t\t\t\""54\"",\n\t\t\t\""11\\\\d{8}|[2368]\\\\d{9}|9\\\\d{10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([68]\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[68]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(11)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$2 15-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""911\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3-$4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$2 15-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9(?:2[234689]|3[3-8])\"",\n\t\t\t\t\t\t\""9(?:2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[1-358]|5[138]|6[24]|7[069]|8[013578]))\"",\n\t\t\t\t\t\t\""9(?:2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3[456]|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45])))\"",\n\t\t\t\t\t\t\""9(?:2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3(?:4|5[014]|6[1239])|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45])))\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3-$4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$2 15-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[23]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3-$4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(11)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[1-358]|5[138]|6[24]|7[069]|8[013578])\"",\n\t\t\t\t\t\t\""2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3[456]|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45]))\"",\n\t\t\t\t\t\t\""2(?:2(?:0[013-9]|[13])|3(?:0[013-9]|[67])|49|6(?:[0136]|4[0-59])|8|9(?:[19]|44|7[013-9]|8[14]))|3(?:36|4(?:[12]|3(?:4|5[014]|6[1239])|[58]4)|5(?:1|3[0-24-689]|8[46])|6|7[069]|8(?:[01]|34|[578][45]))\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\t\""true\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\t\""0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))?15)?\"",\n\t\t\t\""9$1\""\n\t\t],\n\t\t\""AS\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""684\""\n\t\t],\n\t\t\""AT\"": [\n\t\t\t\""43\"",\n\t\t\t\""[1-9]\\\\d{3,12}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(116\\\\d{3})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""116\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3,12})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5[079]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5[079]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{4})(\\\\d{4,7})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5[079]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,10})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""316|46|51|732|6(?:5[0-3579]|[6-9])|7(?:[28]0)|[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[5-79])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""AU\"": [\n\t\t\t\""61\"",\n\t\t\t\""1\\\\d{4,9}|[2-578]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2378])(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2378]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[45]|14\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[38]0|90)\"",\n\t\t\t\t\t\t\""1(?:[38]00|90)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(180)(2\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1802\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[13]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[679]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(13)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""[237]\\\\d{8}|8(?:[6-8]\\\\d{3}|9(?:[02-9]\\\\d{2}|1(?:[0-57-9]\\\\d|6[0135-9])))\\\\d{4}\"",\n\t\t\t\t\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-3]\\\\d|4[47-9]|5[0-25-9]|6[6-9]|7[02-9]|8[147-9]|9[017-9])\\\\d{6}\"",\n\t\t\t\t\""180(?:0\\\\d{3}|2)\\\\d{3}\"",\n\t\t\t\t\""19(?:0[0126]\\\\d|[679])\\\\d{5}\"",\n\t\t\t\t\""500\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""16\\\\d{3,7}\"",\n\t\t\t\t\""550\\\\d{6}\"",\n\t\t\t\t\""13(?:00\\\\d{3}|45[0-4]|\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""AW\"": [\n\t\t\t\""297\"",\n\t\t\t\""[25-9]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""AX\"": [\n\t\t\t\""358\"",\n\t\t\t\""[15]\\\\d{6,9}|2\\\\d{4,9}|3\\\\d{5,9}|4\\\\d{7,10}|[67]\\\\d{7,9}|8\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[16-8]0|300)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(116\\\\d{3})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""116\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[3-9]|2[09]|4|50|7(?:[13]|5[03-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{6,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[25689][1-8]|3(?:0[1-9]|[1-8])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(39\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""39\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""18[1-8]\\\\d{4,6}\"",\n\t\t\t\t\""4(?:[0-8]\\\\d{6,8}|9\\\\d{9})|50\\\\d{6,8}\"",\n\t\t\t\t\""800\\\\d{5,6}\"",\n\t\t\t\t\""[67]00\\\\d{5,6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""10(?:0\\\\d{4,6}|[1-9]\\\\d{5,7})|2(?:0(?:0\\\\d{4,6}|[13-8]\\\\d{5,7}|2(?:[023]\\\\d{4,5}|[14-9]\\\\d{4,6})|9(?:[0-7]\\\\d{4,6}|[89]\\\\d{1,6}))|9\\\\d{6,8})|3(?:0(?:0\\\\d{3,7}|[1-9]\\\\d{5,7})|93\\\\d{5,7})|60(?:[12]\\\\d{5,6}|6\\\\d{7})|7(?:1\\\\d{7}|3\\\\d{8}|5[03-9]\\\\d{5,6})\""\n\t\t\t]\n\t\t],\n\t\t\""AZ\"": [\n\t\t\t\""994\"",\n\t\t\t\""[1-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:1[28]|2(?:[45]2|[0-36])|365)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-8]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""BA\"": [\n\t\t\t\""387\"",\n\t\t\t\""[3-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[1-356]|[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[047]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""BB\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""246\""\n\t\t],\n\t\t\""BD\"": [\n\t\t\t\""880\"",\n\t\t\t\""[2-79]\\\\d{5,9}|1\\\\d{9}|8[0-7]\\\\d{4,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-79]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|3(?:0|[2-58]2)|4(?:0|[25]2|3[23]|[4689][25])|5(?:[02-578]2|6[25])|6(?:[0347-9]2|[26][25])|7[02-9]2|8(?:[023][23]|[4-7]2)|9(?:[02][23]|[458]2|6[016])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-79][2-9]|8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""BE\"": [\n\t\t\t\""32\"",\n\t\t\t\""[1-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[6-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]|4[23]|9[2-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[156]|7[018]|8(?:0[1-9]|[1-79])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:80|9)0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""BF\"": [\n\t\t\t\""226\"",\n\t\t\t\""[25-7]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BG\"": [\n\t\t\t\""359\"",\n\t\t\t\""[23567]\\\\d{5,7}|[489]\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""43[124-7]|70[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""43[124-7]|70[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[78]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""999\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""48|8[7-9]|9[08]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""BH\"": [\n\t\t\t\""973\"",\n\t\t\t\""[136-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BI\"": [\n\t\t\t\""257\"",\n\t\t\t\""[267]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BJ\"": [\n\t\t\t\""229\"",\n\t\t\t\""[2689]\\\\d{7}|7\\\\d{3}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BL\"": [\n\t\t\t\""590\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([56]90)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""590(?:2[7-9]|5[12]|87)\\\\d{4}\"",\n\t\t\t\t\""690(?:0[0-7]|[1-9]\\\\d)\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""BM\"": [\n\t\t\t\""1\"",\n\t\t\t\""[4589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""441\""\n\t\t],\n\t\t\""BN\"": [\n\t\t\t\""673\"",\n\t\t\t\""[2-578]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-578]\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BO\"": [\n\t\t\t\""591\"",\n\t\t\t\""[23467]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([234])(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[234]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([67]\\\\d{7})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[67]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""0(1\\\\d)?\""\n\t\t],\n\t\t\""BQ\"": [\n\t\t\t\""599\"",\n\t\t\t\""[347]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:318[023]|41(?:6[023]|70)|7(?:1[578]|50)\\\\d)\\\\d{3}\"",\n\t\t\t\t\""(?:31(?:8[14-8]|9[14578])|416[145-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""BR\"": [\n\t\t\t\""55\"",\n\t\t\t\""[1-46-9]\\\\d{7,10}|5(?:[0-4]\\\\d{7,9}|5(?:[2-8]\\\\d{7}|9\\\\d{7,8}))\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-9][1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[14689][1-9]|2[12478]|3[1-578]|5[1-5]|7[13-579])9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:300|40(?:0|20))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3589]00)(\\\\d{2,3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3589]00\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""0(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\"",\n\t\t\t\""$2\""\n\t\t],\n\t\t\""BS\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""242\""\n\t\t],\n\t\t\""BT\"": [\n\t\t\t\""975\"",\n\t\t\t\""[1-8]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|77\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-8])(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-68]|7[246]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BW\"": [\n\t\t\t\""267\"",\n\t\t\t\""[2-79]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(90)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""BY\"": [\n\t\t\t\""375\"",\n\t\t\t\""[1-4]\\\\d{8}|800\\\\d{3,7}|[89]\\\\d{9,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""17[0-3589]|2[4-9]|[34]\"",\n\t\t\t\t\t\t\""17(?:[02358]|1[0-2]|9[0189])|2[4-9]|[34]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:5[24]|6[235]|7[467])|2(?:1[246]|2[25]|3[26])\"",\n\t\t\t\t\t\t\""1(?:5[24]|6(?:2|3[04-9]|5[0346-9])|7(?:[46]|7[37-9]))|2(?:1[246]|2[25]|3[26])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\"",\n\t\t\t\t\t\t\""1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[01]|9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(82\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""82\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{2})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\tnull,\n\t\t\t\""8?0?\""\n\t\t],\n\t\t\""BZ\"": [\n\t\t\t\""501\"",\n\t\t\t\""[2-8]\\\\d{6}|0\\\\d{10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0)(800)(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CA\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2-9]\\\\d{9}|3\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|48|79|8[17])|6(?:0[04]|13|22|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}|310\\\\d{4}\"",\n\t\t\t\t\""(?:2(?:04|[23]6|[48]9|50)|3(?:06|43|65)|4(?:03|1[68]|3[178]|50)|5(?:06|1[49]|48|79|8[17])|6(?:0[04]|13|22|39|47)|7(?:0[59]|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}\"",\n\t\t\t\t\""8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}|310\\\\d{4}\"",\n\t\t\t\t\""900[2-9]\\\\d{6}\"",\n\t\t\t\t\""5(?:00|22|33|44|66|77|88)[2-9]\\\\d{6}\""\n\t\t\t]\n\t\t],\n\t\t\""CC\"": [\n\t\t\t\""61\"",\n\t\t\t\""[1458]\\\\d{5,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2378])(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2378]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[45]|14\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[38]0|90)\"",\n\t\t\t\t\t\t\""1(?:[38]00|90)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(180)(2\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1802\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[13]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[679]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(13)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""89162\\\\d{4}\"",\n\t\t\t\t\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-2]\\\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[02-9]|8[147-9]|9[017-9])\\\\d{6}\"",\n\t\t\t\t\""180(?:0\\\\d{3}|2)\\\\d{3}\"",\n\t\t\t\t\""190[0126]\\\\d{6}\"",\n\t\t\t\t\""500\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""550\\\\d{6}\"",\n\t\t\t\t\""13(?:00\\\\d{2})?\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""CD\"": [\n\t\t\t\""243\"",\n\t\t\t\""[2-6]\\\\d{6}|[18]\\\\d{6,8}|9\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""12\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[0-2459]|9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""88\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-6]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""CF\"": [\n\t\t\t\""236\"",\n\t\t\t\""[278]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CG\"": [\n\t\t\t\""242\"",\n\t\t\t\""[028]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""801\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[02]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CH\"": [\n\t\t\t\""41\"",\n\t\t\t\""[2-9]\\\\d{8}|860\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-9]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-7]|[89]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[047]|90\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""860\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""CI\"": [\n\t\t\t\""225\"",\n\t\t\t\""[02-8]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CK\"": [\n\t\t\t\""682\"",\n\t\t\t\""[2-8]\\\\d{4}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CL\"": [\n\t\t\t\""56\"",\n\t\t\t\""(?:[2-9]|600|123)\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[23]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[357]|4[1-35]|6[13-57]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(44)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""44\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([68]00)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""60|8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(600)(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""60\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1230)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""219\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\t\""0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))\""\n\t\t],\n\t\t\""CM\"": [\n\t\t\t\""237\"",\n\t\t\t\""[2368]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([26])(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]|88\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CN\"": [\n\t\t\t\""86\"",\n\t\t\t\""[1-7]\\\\d{6,11}|8[0-357-9]\\\\d{6,9}|9\\\\d{7,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80[2678]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([48]00)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[48]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:10|2\\\\d)[19]\"",\n\t\t\t\t\t\t\""(?:10|2\\\\d)(?:10|9[56])\"",\n\t\t\t\t\t\t\""(?:10|2\\\\d)(?:100|9[56])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-9]\"",\n\t\t\t\t\t\t\""[3-9]\\\\d{2}[19]\"",\n\t\t\t\t\t\t\""[3-9]\\\\d{2}(?:10|9[56])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(21)(\\\\d{4})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([12]\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""10[1-9]|2[02-9]\"",\n\t\t\t\t\t\t\""10[1-9]|2[02-9]\"",\n\t\t\t\t\t\t\""10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7\\\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:11|7[179])|4(?:[15]1|3[1-35])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:[57]1|98)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""807\"",\n\t\t\t\t\t\t\""8078\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[3-578]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(10800)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""108\"",\n\t\t\t\t\t\t\""1080\"",\n\t\t\t\t\t\t\""10800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""950\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""(1(?:[129]\\\\d{3}|79\\\\d{2}))|0\""\n\t\t],\n\t\t\""CO\"": [\n\t\t\t\""57\"",\n\t\t\t\""(?:[13]\\\\d{0,3}|[24-8])\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:8[2-9]|9[0-3]|[2-7])|[24-8]\"",\n\t\t\t\t\t\t\""1(?:8[2-9]|9(?:09|[1-3])|[2-7])|[24-8]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""($1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3})(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:80|9[04])\"",\n\t\t\t\t\t\t\""1(?:800|9(?:0[01]|4[78]))\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""0([3579]|4(?:44|56))?\""\n\t\t],\n\t\t\""CR\"": [\n\t\t\t\""506\"",\n\t\t\t\""[24-9]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24-7]|8[3-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""(19(?:0[012468]|1[09]|20|66|77|99))\""\n\t\t],\n\t\t\""CU\"": [\n\t\t\t\""53\"",\n\t\t\t\""[2-57]\\\\d{5,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{6,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""CV\"": [\n\t\t\t\""238\"",\n\t\t\t\""[259]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CW\"": [\n\t\t\t\""599\"",\n\t\t\t\""[169]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""9(?:[48]\\\\d{2}|50\\\\d|7(?:2[0-24]|[34]\\\\d|6[35-7]|77|8[7-9]))\\\\d{4}\"",\n\t\t\t\t\""9(?:5(?:[12467]\\\\d|3[01])|6(?:[15-9]\\\\d|3[01]))\\\\d{4}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""955\\\\d{5}\"",\n\t\t\t\tnull,\n\t\t\t\t\""60[0-2]\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""CX\"": [\n\t\t\t\""61\"",\n\t\t\t\""[1458]\\\\d{5,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2378])(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2378]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[45]|14\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(16)(\\\\d{3})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[389]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[38]0|90)\"",\n\t\t\t\t\t\t\""1(?:[38]00|90)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(180)(2\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1802\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[13]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(19\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""19[679]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(13)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""89164\\\\d{4}\"",\n\t\t\t\t\""14(?:5\\\\d|71)\\\\d{5}|4(?:[0-2]\\\\d|3[0-57-9]|4[47-9]|5[0-25-9]|6[6-9]|7[02-9]|8[147-9]|9[017-9])\\\\d{6}\"",\n\t\t\t\t\""180(?:0\\\\d{3}|2)\\\\d{3}\"",\n\t\t\t\t\""190[0126]\\\\d{6}\"",\n\t\t\t\t\""500\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""550\\\\d{6}\"",\n\t\t\t\t\""13(?:00\\\\d{2})?\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""CY\"": [\n\t\t\t\""357\"",\n\t\t\t\""[257-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""CZ\"": [\n\t\t\t\""420\"",\n\t\t\t\""[2-8]\\\\d{8}|9\\\\d{8,11}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-8]|9[015-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(96\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""96\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[36]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""DE\"": [\n\t\t\t\""49\"",\n\t\t\t\""[1-35-9]\\\\d{3,14}|4(?:[0-8]\\\\d{3,12}|9(?:[0-37]\\\\d|4(?:[1-35-8]|4\\\\d?)|5\\\\d{1,2}|6[1-8]\\\\d?)\\\\d{2,8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{2})(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(15\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15[0568]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,11})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[02]|40|[68]9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,11})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:\\\\d1|0[2389]|1[24]|28|34)|3(?:[3-9][15]|40)|[4-8][1-9]1|9(?:06|[1-9]1)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2,11})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24-6]|[7-9](?:\\\\d[1-9]|[1-9]\\\\d)|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])\"",\n\t\t\t\t\t\t\""[24-6]|[7-9](?:\\\\d[1-9]|[1-9]\\\\d)|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|4[1246]|6[1-4]|7[1346]|8[13568]|9[1246])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(3\\\\d{4})(\\\\d{1,10})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{7,12})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d)(\\\\d{4,10})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:18|90)0|137\"",\n\t\t\t\t\t\t\""1(?:37|80)|900[1359]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{2})(\\\\d{5,11})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""181\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(18\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""185\"",\n\t\t\t\t\t\t\""1850\"",\n\t\t\t\t\t\t\""18500\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(18\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""18[68]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(18\\\\d)(\\\\d{8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""18[2-579]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(700)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""700\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(138)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""138\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(15[013-68])(\\\\d{2})(\\\\d{8})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15[013-68]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(15[279]\\\\d)(\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15[279]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[67]\\\\d)(\\\\d{2})(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:6[023]|7)\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""DJ\"": [\n\t\t\t\""253\"",\n\t\t\t\""[27]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""DK\"": [\n\t\t\t\""45\"",\n\t\t\t\""[2-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""DM\"": [\n\t\t\t\""1\"",\n\t\t\t\""[57-9]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""767\""\n\t\t],\n\t\t\""DO\"": [\n\t\t\t\""1\"",\n\t\t\t\""[589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""8[024]9\""\n\t\t],\n\t\t\""DZ\"": [\n\t\t\t\""213\"",\n\t\t\t\""(?:[1-4]|[5-9]\\\\d)\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-4]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([5-8]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[5-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""EC\"": [\n\t\t\t\""593\"",\n\t\t\t\""1\\\\d{9,10}|[2-8]\\\\d{7}|9\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[247]|[356][2-8]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1800)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""EE\"": [\n\t\t\t\""372\"",\n\t\t\t\""1\\\\d{3,4}|[3-9]\\\\d{6,7}|800\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3-79]\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]\"",\n\t\t\t\t\t\t\""[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(70)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8000)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8000\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([458]\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""40|5|8(?:00|[1-5])\"",\n\t\t\t\t\t\t\""40|5|8(?:00[1-9]|[1-5])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""EG\"": [\n\t\t\t\""20\"",\n\t\t\t\""1\\\\d{4,9}|[2456]\\\\d{8}|3\\\\d{7}|[89]\\\\d{8,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[012]|[89]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[35]|[4-6]|[89][2-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""EH\"": [\n\t\t\t\""212\"",\n\t\t\t\""[5-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([5-7]\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:2[015-7]|3[0-4])|[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:2[2-489]|3[5-9]|92)|892\"",\n\t\t\t\t\t\t\""5(?:2(?:[2-48]|9[0-7])|3(?:[5-79]|8[0-7])|924)|892\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:29|38)\"",\n\t\t\t\t\t\t\""5(?:29|38)[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([5]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:4[067]|5[03])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8[09])(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:0|9[013-9])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""528[89]\""\n\t\t],\n\t\t\""ER\"": [\n\t\t\t\""291\"",\n\t\t\t\""[178]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ES\"": [\n\t\t\t\""34\"",\n\t\t\t\""[5-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([89]00)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([5-9]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[568]|[79][0-8]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""ET\"": [\n\t\t\t\""251\"",\n\t\t\t\""[1-59]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-59]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""FI\"": [\n\t\t\t\""358\"",\n\t\t\t\""[156]\\\\d{6,9}|2\\\\d{4,9}|3\\\\d{5,9}|4\\\\d{7,10}|7\\\\d{7,9}|[89]\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[16-8]0|300)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(116\\\\d{3})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""116\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[3-9]|2[09]|4|50|7(?:[13]|5[03-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{6,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[25689][1-8]|3(?:0[1-9]|[1-8])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(39\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""39\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""1[3-79][1-8]\\\\d{4,6}|[235689][1-8]\\\\d{5,7}\"",\n\t\t\t\t\""4(?:[0-8]\\\\d{6,8}|9\\\\d{9})|50\\\\d{6,8}\"",\n\t\t\t\t\""800\\\\d{5,6}\"",\n\t\t\t\t\""[67]00\\\\d{5,6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""10(?:0\\\\d{4,6}|[1-9]\\\\d{5,7})|2(?:0(?:0\\\\d{4,6}|[13-8]\\\\d{5,7}|2(?:[023]\\\\d{4,5}|[14-9]\\\\d{4,6})|9(?:[0-7]\\\\d{4,6}|[89]\\\\d{1,6}))|9\\\\d{6,8})|3(?:0(?:0\\\\d{3,7}|[1-9]\\\\d{5,7})|93\\\\d{5,7})|60(?:[12]\\\\d{5,6}|6\\\\d{7})|7(?:1\\\\d{7}|3\\\\d{8}|5[03-9]\\\\d{5,6})\""\n\t\t\t]\n\t\t],\n\t\t\""FJ\"": [\n\t\t\t\""679\"",\n\t\t\t\""[35-9]\\\\d{6}|0\\\\d{10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""FK\"": [\n\t\t\t\""500\"",\n\t\t\t\""[2-7]\\\\d{4}\""\n\t\t],\n\t\t\""FM\"": [\n\t\t\t\""691\"",\n\t\t\t\""[39]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""FO\"": [\n\t\t\t\""298\"",\n\t\t\t\""[2-9]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{6})\"",\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""(10(?:01|[12]0|88))\""\n\t\t],\n\t\t\""FR\"": [\n\t\t\t\""33\"",\n\t\t\t\""[1-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-79])(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-79]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0 $1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""GA\"": [\n\t\t\t\""241\"",\n\t\t\t\""0?\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-7]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GB\"": [\n\t\t\t\""44\"",\n\t\t\t\""\\\\d{7,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7(?:[1-5789]|62)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|624)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|6242)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|5[56]|7[06]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:1|\\\\d1)|3|9[018]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:38|5[23]|69|76|94)\"",\n\t\t\t\t\t\t\""1(?:387|5(?:24|39)|697|768|946)\"",\n\t\t\t\t\t\t\""1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8001\"",\n\t\t\t\t\t\t\""80011\"",\n\t\t\t\t\t\t\""800111\"",\n\t\t\t\t\t\t\""8001111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(845)(46)(4\\\\d)\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""845\"",\n\t\t\t\t\t\t\""8454\"",\n\t\t\t\t\t\t\""84546\"",\n\t\t\t\t\t\t\""845464\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:4[2-5]|7[0-3])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[0-26-9]|[78][0-49])|21[0-7]|31[0-8]|[4-69]1\\\\d))\\\\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)|3(?:0\\\\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[28][02-57-9]|[37]\\\\d|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\\\\d|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\\\d|9[2-57]))\\\\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\\\\d)|276\\\\d|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[567]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}|176888[2-46-8]\\\\d{2}|16977[23]\\\\d{3}\"",\n\t\t\t\t\""7(?:[1-3]\\\\d{3}|4(?:[0-46-9]\\\\d{2}|5(?:[0-689]\\\\d|7[0-57-9]))|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])\\\\d|7(?:0(?:0[01]|[1-9]\\\\d)|[1-7]\\\\d{2}|8[02-9]\\\\d|9[0-689]\\\\d)|8(?:[014-9]\\\\d|[23][0-8])\\\\d|9(?:[024-9]\\\\d{2}|1(?:[02-9]\\\\d|1[028])|3[0-689]\\\\d))\\\\d{5}\"",\n\t\t\t\t\""80(?:0(?:1111|\\\\d{6,7})|8\\\\d{7})|500\\\\d{6}\"",\n\t\t\t\t\""(?:87[123]|9(?:[01]\\\\d|8[2349]))\\\\d{7}\"",\n\t\t\t\t\""70\\\\d{8}\"",\n\t\t\t\tnull,\n\t\t\t\t\""(?:3[0347]|55)\\\\d{8}\"",\n\t\t\t\t\""76(?:0[012]\\\\d|2(?:[356]\\\\d|4[013-9])|4[0134]\\\\d|5[49]\\\\d|6[0-369]\\\\d|77\\\\d|81\\\\d|9[39]\\\\d)\\\\d{5}\"",\n\t\t\t\t\""56\\\\d{8}\"",\n\t\t\t\t\""8(?:4(?:5464\\\\d|[2-5]\\\\d{7})|70\\\\d{7})\""\n\t\t\t]\n\t\t],\n\t\t\""GD\"": [\n\t\t\t\""1\"",\n\t\t\t\""[4589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""473\""\n\t\t],\n\t\t\""GE\"": [\n\t\t\t\""995\"",\n\t\t\t\""[34578]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[348]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""GF\"": [\n\t\t\t\""594\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""GG\"": [\n\t\t\t\""44\"",\n\t\t\t\""[135789]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7(?:[1-5789]|62)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|624)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|6242)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|5[56]|7[06]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:1|\\\\d1)|3|9[018]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:38|5[23]|69|76|94)\"",\n\t\t\t\t\t\t\""1(?:387|5(?:24|39)|697|768|946)\"",\n\t\t\t\t\t\t\""1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8001\"",\n\t\t\t\t\t\t\""80011\"",\n\t\t\t\t\t\t\""800111\"",\n\t\t\t\t\t\t\""8001111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(845)(46)(4\\\\d)\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""845\"",\n\t\t\t\t\t\t\""8454\"",\n\t\t\t\t\t\t\""84546\"",\n\t\t\t\t\t\t\""845464\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:4[2-5]|7[0-3])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""1481[25-9]\\\\d{5}\"",\n\t\t\t\t\""7(?:781\\\\d|839\\\\d|911[17])\\\\d{5}\"",\n\t\t\t\t\""80(?:0(?:1111|\\\\d{6,7})|8\\\\d{7})|500\\\\d{6}\"",\n\t\t\t\t\""(?:87[123]|9(?:[01]\\\\d|8[0-3]))\\\\d{7}\"",\n\t\t\t\t\""70\\\\d{8}\"",\n\t\t\t\tnull,\n\t\t\t\t\""(?:3[0347]|55)\\\\d{8}\"",\n\t\t\t\t\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\"",\n\t\t\t\t\""56\\\\d{8}\"",\n\t\t\t\t\""8(?:4(?:5464\\\\d|[2-5]\\\\d{7})|70\\\\d{7})\""\n\t\t\t]\n\t\t],\n\t\t\""GH\"": [\n\t\t\t\""233\"",\n\t\t\t\""[235]\\\\d{8}|8\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""GI\"": [\n\t\t\t\""350\"",\n\t\t\t\""[2568]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GL\"": [\n\t\t\t\""299\"",\n\t\t\t\""[1-689]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GM\"": [\n\t\t\t\""220\"",\n\t\t\t\""[2-9]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GN\"": [\n\t\t\t\""224\"",\n\t\t\t\""[367]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[67]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GP\"": [\n\t\t\t\""590\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([56]90)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""590(?:0[13468]|1[012]|2[0-68]|3[28]|4[0-8]|5[579]|6[0189]|70|8[0-689]|9\\\\d)\\\\d{4}\"",\n\t\t\t\t\""690(?:0[0-7]|[1-9]\\\\d)\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""GQ\"": [\n\t\t\t\""240\"",\n\t\t\t\""[23589]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GR\"": [\n\t\t\t\""30\"",\n\t\t\t\""[26-9]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([27]\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21|7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[2-9]1|[689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[2-9][02-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GT\"": [\n\t\t\t\""502\"",\n\t\t\t\""[2-7]\\\\d{7}|1[89]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GU\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""671\""\n\t\t],\n\t\t\""GW\"": [\n\t\t\t\""245\"",\n\t\t\t\""(?:4(?:0\\\\d{5}|4\\\\d{7})|9\\\\d{8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""44|9[567]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""40\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""GY\"": [\n\t\t\t\""592\"",\n\t\t\t\""[2-46-9]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""HK\"": [\n\t\t\t\""852\"",\n\t\t\t\""[235-7]\\\\d{7}|8\\\\d{7,8}|9\\\\d{4,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235-7]|[89](?:0[1-9]|[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(900)(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""900\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(900)(\\\\d{2,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""900\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""HN\"": [\n\t\t\t\""504\"",\n\t\t\t\""[237-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""HR\"": [\n\t\t\t\""385\"",\n\t\t\t\""[1-7]\\\\d{5,8}|[89]\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-5]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6[01])(\\\\d{2})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[01]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([67]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80[01])(\\\\d{2})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80[01])(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""HT\"": [\n\t\t\t\""509\"",\n\t\t\t\""[2-489]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""HU\"": [\n\t\t\t\""36\"",\n\t\t\t\""[1-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""06\"",\n\t\t\t\""($1)\""\n\t\t],\n\t\t\""ID\"": [\n\t\t\t\""62\"",\n\t\t\t\""(?:[1-79]\\\\d{6,10}|8\\\\d{7,11})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[124]|[36]1\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4579]|2[035-9]|[36][02-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3,4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1-35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{4})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1-35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)(500)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(177)(\\\\d{6,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""17\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{5,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(804)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""804\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80[79]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""IE\"": [\n\t\t\t\""353\"",\n\t\t\t\""[124-9]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[24-9]|47|58|6[237-9]|9[35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""40[24]|50[45]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(48)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""48\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(818)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""81\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24-69]|7[14]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([78]\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""76|8[35-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(700)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:8[059]|5)\"",\n\t\t\t\t\t\t\""1(?:8[059]0|5)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""IL\"": [\n\t\t\t\""972\"",\n\t\t\t\""1\\\\d{6,11}|[2-589]\\\\d{3}(?:\\\\d{3,6})?|6\\\\d{3}|7\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-489])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-489]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([57]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[57]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(153)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""153\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)([7-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1255)(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""125\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1200)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""120\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1212)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""121\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1599)(\\\\d{6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})\"",\n\t\t\t\t\t\""*$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-689]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""$1\""\n\t\t],\n\t\t\""IM\"": [\n\t\t\t\""44\"",\n\t\t\t\""[135789]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7(?:[1-5789]|62)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|624)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|6242)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|5[56]|7[06]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:1|\\\\d1)|3|9[018]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:38|5[23]|69|76|94)\"",\n\t\t\t\t\t\t\""1(?:387|5(?:24|39)|697|768|946)\"",\n\t\t\t\t\t\t\""1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8001\"",\n\t\t\t\t\t\t\""80011\"",\n\t\t\t\t\t\t\""800111\"",\n\t\t\t\t\t\t\""8001111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(845)(46)(4\\\\d)\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""845\"",\n\t\t\t\t\t\t\""8454\"",\n\t\t\t\t\t\t\""84546\"",\n\t\t\t\t\t\t\""845464\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:4[2-5]|7[0-3])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""1624[5-8]\\\\d{5}\"",\n\t\t\t\t\""7(?:4576|[59]24\\\\d)\\\\d{5}\"",\n\t\t\t\t\""808162\\\\d{4}\"",\n\t\t\t\t\""(?:872299|90[0167]624)\\\\d{4}\"",\n\t\t\t\t\""70\\\\d{8}\"",\n\t\t\t\tnull,\n\t\t\t\t\""3(?:08162\\\\d|3\\\\d{5}|4(?:40[49]06|5624\\\\d)|7(?:0624\\\\d|2299\\\\d))\\\\d{3}|55\\\\d{8}\"",\n\t\t\t\t\""76242\\\\d{5}\"",\n\t\t\t\t\""56\\\\d{8}\"",\n\t\t\t\t\""8(?:4(?:40[49]06|5624\\\\d)|70624\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""IN\"": [\n\t\t\t\""91\"",\n\t\t\t\""008\\\\d{9}|1\\\\d{7,12}|[2-9]\\\\d{9,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""600|7(?:[02-8]|19|9[037-9])|8(?:0[015-9]|[1-9])|9\"",\n\t\t\t\t\t\t\""600|7(?:[078]|19[0-5]|2(?:[02356-9]|[14][017-9]|9[389])|3(?:[025-9]|1[07-9]|[34][017-9])|4(?:[0-35689]|[47][017-9])|5(?:[02346-9]|1[017-9]|5[017-9])|6(?:[02-9]|1[0-257-9])|9(?:[089]|31|7[02-9]))|8(?:0(?:[01589]|6[67]|7[02-9])|1(?:[0-57-9]|6[07-9])|2(?:0[07-9]|[14][07-9]|[235-9])|3(?:[03-57-9]|[126][07-9])|[45]|6(?:[02457-9]|[136][07-9])|7(?:[078][07-9]|[1-69])|8(?:[0-25-9]|3[07-9]|4[047-9])|9(?:[02-9]|1[027-9]))|9\"",\n\t\t\t\t\t\t\""600|7(?:0|19[0-5]|2(?:[0235679]|[14][017-9]|8(?:[0-569]|[78][089])|9[389])|3(?:[05-8]|1(?:[089]|7[5-9])|2(?:[5-8]|[0-49][089])|3[017-9]|4(?:[07-9]|11)|9(?:[01689]|[2345][089]|40|7[0189]))|4(?:[056]|1(?:[0135-9]|[23][089]|2[089]|4[089])|2(?:0[089]|[1-7][089]|[89])|3(?:[0-8][089]|9)|4(?:[089]|11|7[02-8])|7(?:[089]|11|7[02-8])|8(?:[0-24-7][089]|[389])|9(?:[0-7][089]|[89]))|5(?:[0346-9]|1[017-9]|2(?:[03-9]|[12][089])|5[017-9])|6(?:[0346-9]|1[0-257-9]|2(?:[0-4]\\\\d|[5-9][089])|5(?:[0-367][089]|[4589]))|7(?:0(?:[02-9]|1[089])|[1-9])|8(?:[0-79]|8(?:0[0189]|11|8[013-9]|9))|9(?:[089]|313|7(?:[02-8]|9[07-9])))|8(?:0(?:[01589]|6[67]|7(?:[02-8]|9[05-9]))|1(?:[02-57-9]|1(?:[0-35-9]|4[0-46-9])|6(?:[089]|7[02-8]))|2(?:0(?:[089]|7[02])|[14](?:[089]|7[02-8])|[235-9])|3(?:[0357-9]|1(?:[089]|7[02-6])|2(?:[09]|77|8[0-689])|4(?:0[1-7]|[1-9])|6(?:[089]|7[02-7]))|[45]|6(?:[02457-9]|1(?:[089]|7[02-8])|3(?:[089]|7[02-68])|6(?:[08]|7[02-8]|9[01]))|7(?:0[07-9]|[1-69]|7(?:[089]|7[02-8])|8(?:[089]|7[02-8]))|8(?:[0-25-9]|3(?:[089]|7[02-8])|4(?:[0489]|7[02-68]))|9(?:[02-9]|1(?:[0289]|7[2-6])))|9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""11|2[02]|33|4[04]|79[1-9]|80[2-46]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:2[0-249]|3[0-25]|4[145]|[59][14]|7[1257]|[68][1-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|[36][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2-4]1|5[17]|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[23579]|[468][1-9])|[2-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""008\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""140\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""160\"",\n\t\t\t\t\t\t\""1600\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1800\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""180\"",\n\t\t\t\t\t\t\""1800\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""186\"",\n\t\t\t\t\t\t\""1860\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""18[06]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""IO\"": [\n\t\t\t\""246\"",\n\t\t\t\""3\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""IQ\"": [\n\t\t\t\""964\"",\n\t\t\t\""[1-7]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-6]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""IR\"": [\n\t\t\t\""98\"",\n\t\t\t\""[1-8]\\\\d{9}|9(?:[0-4]\\\\d{8}|9\\\\d{2,8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(21)(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9990\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9990\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""IS\"": [\n\t\t\t\""354\"",\n\t\t\t\""[4-9]\\\\d{6}|38\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(3\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""IT\"": [\n\t\t\t\""39\"",\n\t\t\t\""[01589]\\\\d{5,10}|3(?:[12457-9]\\\\d{8}|[36]\\\\d{7,9})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]|55\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0[26])(\\\\d{4})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0[26])(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][0159]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][0159]|8(?:03|4[17]|9[245])\"",\n\t\t\t\t\t\t\""0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][2-46-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{3})(\\\\d{2,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][2-46-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13]|8(?:00|4[08]|9[59])\"",\n\t\t\t\t\t\t\""[13]|8(?:00|4[08]|9(?:5[5-9]|9))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""894\"",\n\t\t\t\t\t\t\""894[5-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""0(?:[26]\\\\d{4,9}|(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2346]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[34578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7})\"",\n\t\t\t\t\""3(?:[12457-9]\\\\d{8}|6\\\\d{7,8}|3\\\\d{7,9})\"",\n\t\t\t\t\""80(?:0\\\\d{6}|3\\\\d{3})\"",\n\t\t\t\t\""0878\\\\d{5}|1(?:44|6[346])\\\\d{6}|89(?:2\\\\d{3}|4(?:[0-4]\\\\d{2}|[5-9]\\\\d{4})|5(?:[0-4]\\\\d{2}|[5-9]\\\\d{6})|9\\\\d{6})\"",\n\t\t\t\t\""1(?:78\\\\d|99)\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""55\\\\d{8}\"",\n\t\t\t\t\""84(?:[08]\\\\d{6}|[17]\\\\d{3})\""\n\t\t\t]\n\t\t],\n\t\t\""JE\"": [\n\t\t\t\""44\"",\n\t\t\t\""[135789]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7(?:[1-5789]|62)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|624)\"",\n\t\t\t\t\t\t\""7(?:[1-5789]|6242)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|5[56]|7[06]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:1|\\\\d1)|3|9[018]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:38|5[23]|69|76|94)\"",\n\t\t\t\t\t\t\""1(?:387|5(?:24|39)|697|768|946)\"",\n\t\t\t\t\t\t\""1(?:3873|5(?:242|39[456])|697[347]|768[347]|9467)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\"",\n\t\t\t\t\t\t\""8001\"",\n\t\t\t\t\t\t\""80011\"",\n\t\t\t\t\t\t\""800111\"",\n\t\t\t\t\t\t\""8001111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(845)(46)(4\\\\d)\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""845\"",\n\t\t\t\t\t\t\""8454\"",\n\t\t\t\t\t\t\""84546\"",\n\t\t\t\t\t\t\""845464\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:4[2-5]|7[0-3])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""1534[0-24-8]\\\\d{5}\"",\n\t\t\t\t\""7(?:509\\\\d|7(?:00[378]|97[7-9])|829\\\\d|937\\\\d)\\\\d{5}\"",\n\t\t\t\t\""80(?:07(?:35|81)|8901)\\\\d{4}\"",\n\t\t\t\t\""(?:871206|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\"",\n\t\t\t\t\""701511\\\\d{4}\"",\n\t\t\t\tnull,\n\t\t\t\t\""3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))\\\\d{4}|55\\\\d{8}\"",\n\t\t\t\t\""76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\\\\d{6}\"",\n\t\t\t\t\""56\\\\d{8}\"",\n\t\t\t\t\""8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|70002)\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""JM\"": [\n\t\t\t\""1\"",\n\t\t\t\""[589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""876\""\n\t\t],\n\t\t\""JO\"": [\n\t\t\t\""962\"",\n\t\t\t\""[235-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2356]|87\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[457-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70|8[0158]|9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""JP\"": [\n\t\t\t\""81\"",\n\t\t\t\""[1-9]\\\\d{8,9}|00(?:[36]\\\\d{7,14}|7\\\\d{5,7}|8\\\\d{7})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:12|57|99)0\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""800\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2579]0|80[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])\"",\n\t\t\t\t\t\t\""1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))\"",\n\t\t\t\t\t\t\""1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])\"",\n\t\t\t\t\t\t\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-6]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))\"",\n\t\t\t\t\t\t\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))\"",\n\t\t\t\t\t\t\""1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-689]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)\"",\n\t\t\t\t\t\t\""1|2(?:2[37]|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])\"",\n\t\t\t\t\t\t\""1|2(?:2[37]|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:9[14-79]|74|[34]7|[56]9)|82|993\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3|4(?:2[09]|7[01])|6[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2479][1-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""KE\"": [\n\t\t\t\""254\"",\n\t\t\t\""20\\\\d{6,7}|[4-9]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\t\""005|0\""\n\t\t],\n\t\t\""KG\"": [\n\t\t\t\""996\"",\n\t\t\t\""[235-8]\\\\d{8,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[25-7]|31[25]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:1[36]|[2-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""KH\"": [\n\t\t\t\""855\"",\n\t\t\t\""[1-9]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\\\\d[1-9]|[2-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[89]00)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[89]0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""KI\"": [\n\t\t\t\""686\"",\n\t\t\t\""[2458]\\\\d{4}|3\\\\d{4,7}|7\\\\d{7}\"",\n\t\t\t[],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""0\""\n\t\t],\n\t\t\""KM\"": [\n\t\t\t\""269\"",\n\t\t\t\""[3478]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""KN\"": [\n\t\t\t\""1\"",\n\t\t\t\""[589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""869\""\n\t\t],\n\t\t\""KP\"": [\n\t\t\t\""850\"",\n\t\t\t\""1\\\\d{9}|[28]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""KR\"": [\n\t\t\t\""82\"",\n\t\t\t\""007\\\\d{9,11}|[1-7]\\\\d{3,9}|8\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:0|1[19]|[69]9|5[458])|[57]0\"",\n\t\t\t\t\t\t\""1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[01]|5[1-4]|6[2-8]|[7-9])|[68]0|[3-6][1-9][1-9]\"",\n\t\t\t\t\t\t\""1(?:[01]|5(?:[1-3]|4[56])|6[2-8]|[7-9])|[68]0|[3-6][1-9][1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""131\"",\n\t\t\t\t\t\t\""1312\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""131\"",\n\t\t\t\t\t\t\""131[13-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""30\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21[0-46-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-6][1-9]1\"",\n\t\t\t\t\t\t\""[3-6][1-9]1(?:[0-46-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:5[246-9]|6[04678]|8[03579])\"",\n\t\t\t\t\t\t\""1(?:5(?:22|44|66|77|88|99)|6(?:00|44|6[16]|70|88)|8(?:00|33|55|77|99))\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\t\""0(8[1-46-8]|85\\\\d{2})?\""\n\t\t],\n\t\t\""KW\"": [\n\t\t\t\""965\"",\n\t\t\t\""[12569]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[16]|2(?:[0-35-9]|4[0-35-9])|9[024-9]|52[25]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""244|5(?:[015]|66)\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""KY\"": [\n\t\t\t\""1\"",\n\t\t\t\""[3589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""345\""\n\t\t],\n\t\t\""KZ\"": [\n\t\t\t\""7\"",\n\t\t\t\""(?:33\\\\d|7\\\\d{2}|80[09])\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3489]\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[34689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""33622\\\\d{5}|7(?:1(?:0(?:[23]\\\\d|4[0-3]|59|63)|1(?:[23]\\\\d|4[0-79]|59)|2(?:[23]\\\\d|59)|3(?:2\\\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\\\d|3[013-9]|5[1-9])|5(?:2\\\\d|3[1-9]|4[0-7]|59)|6(?:[234]\\\\d|5[19]|61)|72\\\\d|8(?:[27]\\\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\\\d|4[46-9]|5[3469])|2(?:2\\\\d|3[0679]|46|5[12679])|3(?:[234]\\\\d|5[139])|4(?:2\\\\d|3[1235-9]|59)|5(?:[23]\\\\d|4[01246-8]|59|61)|6(?:2\\\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\\\d|40|5[279])|8(?:[23]\\\\d|4[0-3]|59)|9(?:2\\\\d|3[124578]|59)))\\\\d{5}\"",\n\t\t\t\t\""7(?:0[012578]|47|6[02-4]|7[15-8]|85)\\\\d{7}\"",\n\t\t\t\t\""800\\\\d{7}\"",\n\t\t\t\t\""809\\\\d{7}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""751\\\\d{7}\""\n\t\t\t]\n\t\t],\n\t\t\""LA\"": [\n\t\t\t\""856\"",\n\t\t\t\""[2-8]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(20)(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-8]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[13]|3[14]|[4-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(30)(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""30\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""LB\"": [\n\t\t\t\""961\"",\n\t\t\t\""[13-9]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13-6]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]|9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([7-9]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89][01]|7(?:[01]|6[013-9]|8[89]|9[1-3])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""LC\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5789]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""758\""\n\t\t],\n\t\t\""LI\"": [\n\t\t\t\""423\"",\n\t\t\t\""6\\\\d{8}|[23789]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23789]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[56]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(69)(7\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""697\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\t\""0|10(?:01|20|66)\""\n\t\t],\n\t\t\""LK\"": [\n\t\t\t\""94\"",\n\t\t\t\""[1-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{1})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""LR\"": [\n\t\t\t\""231\"",\n\t\t\t\""2\\\\d{7,8}|[378]\\\\d{8}|4\\\\d{6}|5\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([4-5])(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[45]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23578]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""LS\"": [\n\t\t\t\""266\"",\n\t\t\t\""[2568]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""LT\"": [\n\t\t\t\""370\"",\n\t\t\t\""[3-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([34]\\\\d)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""37|4(?:1|5[45]|6[2-4])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-6]\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[148]|4(?:[24]|6[09])|528|6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([7-9]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[7-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5)(2\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""52[0-79]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""(8-$1)\"",\n\t\t\t\""[08]\"",\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""LU\"": [\n\t\t\t\""352\"",\n\t\t\t\""[24-9]\\\\d{3,10}|3(?:[0-46-9]\\\\d{2,9}|5[013-9]\\\\d{1,8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:[0367]|4[3-8])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:[0367]|4[3-8])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,4})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:[12589]|4[12])|[3-5]|7[1-9]|8(?:[1-9]|0[2-9])|9(?:[1-9]|0[2-46-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70|80[01]|90[015]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""(15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\\\\d)\""\n\t\t],\n\t\t\""LV\"": [\n\t\t\t\""371\"",\n\t\t\t\""[2689]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2689]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""LY\"": [\n\t\t\t\""218\"",\n\t\t\t\""[25679]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([25679]\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MA\"": [\n\t\t\t\""212\"",\n\t\t\t\""[5-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([5-7]\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:2[015-7]|3[0-4])|[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:2[2-489]|3[5-9]|92)|892\"",\n\t\t\t\t\t\t\""5(?:2(?:[2-48]|9[0-7])|3(?:[5-79]|8[0-7])|924)|892\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:29|38)\"",\n\t\t\t\t\t\t\""5(?:29|38)[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([5]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5(?:4[067]|5[03])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8[09])(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:0|9[013-9])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""5(?:2(?:[015-79]\\\\d|2[02-9]|3[2-57]|4[2-8]|8[235-7])\\\\d|3(?:[0-48]\\\\d|[57][2-9]|6[2-8]|9[3-9])\\\\d|4[067]\\\\d{2}|5[03]\\\\d{2})\\\\d{4}\"",\n\t\t\t\t\""(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[07][07]|6[12]))\\\\d{6}\"",\n\t\t\t\t\""80\\\\d{7}\"",\n\t\t\t\t\""89\\\\d{7}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""5924[01]\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""MC\"": [\n\t\t\t\""377\"",\n\t\t\t\""[34689]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[39]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MD\"": [\n\t\t\t\""373\"",\n\t\t\t\""[235-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""22|3\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([25-7]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[13-9]|[5-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ME\"": [\n\t\t\t\""382\"",\n\t\t\t\""[2-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-57-9]|6[036-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MF\"": [\n\t\t\t\""590\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([56]90)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""590(?:[02][79]|13|5[0-268]|[78]7)\\\\d{4}\"",\n\t\t\t\t\""690(?:0[0-7]|[1-9]\\\\d)\\\\d{4}\""\n\t\t\t]\n\t\t],\n\t\t\""MG\"": [\n\t\t\t\""261\"",\n\t\t\t\""[23]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([23]\\\\d)(\\\\d{2})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MH\"": [\n\t\t\t\""692\"",\n\t\t\t\""[2-6]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\""\n\t\t],\n\t\t\""MK\"": [\n\t\t\t\""389\"",\n\t\t\t\""[2-578]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([347]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[347]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]\\\\d{2})(\\\\d)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ML\"": [\n\t\t\t\""223\"",\n\t\t\t\""[246-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[246-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MM\"": [\n\t\t\t\""95\"",\n\t\t\t\""[1478]\\\\d{5,7}|[256]\\\\d{5,8}|9(?:[279]\\\\d{0,2}|[58]|[34]\\\\d{1,2}|6\\\\d?)\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|2[245]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""251\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""16|2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""67|81\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9(?:2[0-4]|[35-9]|4[137-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)([34]\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9(?:3[0-36]|4[0-57-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""92[56]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9)(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""93\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MN\"": [\n\t\t\t\""976\"",\n\t\t\t\""[12]\\\\d{7,9}|[57-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([12]\\\\d)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([12]2\\\\d)(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]2[1-3]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([12]\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12](?:27|[3-5])\"",\n\t\t\t\t\t\t\""[12](?:27|[3-5]\\\\d)2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[57-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([12]\\\\d{4})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12](?:27|[3-5])\"",\n\t\t\t\t\t\t\""[12](?:27|[3-5]\\\\d)[4-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MO\"": [\n\t\t\t\""853\"",\n\t\t\t\""[268]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([268]\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MP\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""670\""\n\t\t],\n\t\t\""MQ\"": [\n\t\t\t\""596\"",\n\t\t\t\""[56]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MR\"": [\n\t\t\t\""222\"",\n\t\t\t\""[2-48]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-48]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MS\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""664\""\n\t\t],\n\t\t\""MT\"": [\n\t\t\t\""356\"",\n\t\t\t\""[2357-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MU\"": [\n\t\t\t\""230\"",\n\t\t\t\""[2-9]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2-46-9]\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-46-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MV\"": [\n\t\t\t\""960\"",\n\t\t\t\""[346-8]\\\\d{6,9}|9(?:00\\\\d{7}|\\\\d{6})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3467]|9(?:[1-9]|0[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]00\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""MW\"": [\n\t\t\t\""265\"",\n\t\t\t\""(?:1(?:\\\\d{2})?|[2789]\\\\d{2})\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1789]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""MX\"": [\n\t\t\t\""52\"",\n\t\t\t\""[1-9]\\\\d{9,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([358]\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""33|55|81\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2467]|3[0-2457-9]|5[089]|8[02-9]|9[0-35-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)([358]\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""044 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:33|55|81)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""044 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[2467]|3[0-2457-9]|5[089]|8[2-9]|9[1-35-9])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""01\"",\n\t\t\t\""01 $1\"",\n\t\t\t\""0[12]|04[45](\\\\d{10})\"",\n\t\t\t\""1$1\"",\n\t\t\ttrue\n\t\t],\n\t\t\""MY\"": [\n\t\t\t\""60\"",\n\t\t\t\""[13-9]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([4-79])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-79]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(3)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([18]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[02-46-9][1-9]|8\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1)([36-8]00)(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[36-8]0\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(11)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""11\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(15[49])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""MZ\"": [\n\t\t\t\""258\"",\n\t\t\t\""[28]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([28]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2|8[2-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NA\"": [\n\t\t\t\""264\"",\n\t\t\t\""[68]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1235]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(88)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""88\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(870)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""870\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""NC\"": [\n\t\t\t\""687\"",\n\t\t\t\""[2-57-9]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1.$2.$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-46-9]|5[0-4]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NE\"": [\n\t\t\t\""227\"",\n\t\t\t\""[0289]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[289]|09\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(08)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""08\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NF\"": [\n\t\t\t\""672\"",\n\t\t\t\""[13]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NG\"": [\n\t\t\t\""234\"",\n\t\t\t\""[1-6]\\\\d{5,8}|9\\\\d{5,9}|[78]\\\\d{5,13}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]|9(?:0[3-9]|[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-6]|7(?:[1-79]|0[1-9])|8[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70|8[01]|90[235-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([78]00)(\\\\d{4})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[78]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([78]00)(\\\\d{5})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[78]00\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(78)(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""78\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""NI\"": [\n\t\t\t\""505\"",\n\t\t\t\""[12578]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NL\"": [\n\t\t\t\""31\"",\n\t\t\t\""1\\\\d{4,8}|[2-7]\\\\d{8}|[89]\\\\d{6,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-578]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[4578]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-5]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6)(\\\\d{8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6[0-57-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(66)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""66\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(14)(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""14\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]0\\\\d)(\\\\d{4,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80|9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""NO\"": [\n\t\t\t\""47\"",\n\t\t\t\""0\\\\d{4}|[2-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([489]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[489]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235-7]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235-7]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\\\d{6}\"",\n\t\t\t\t\""(?:4[015-8]|5[89]|87|9\\\\d)\\\\d{6}\"",\n\t\t\t\t\""80[01]\\\\d{5}\"",\n\t\t\t\t\""82[09]\\\\d{5}\"",\n\t\t\t\t\""880\\\\d{5}\"",\n\t\t\t\t\""81[23]\\\\d{5}\"",\n\t\t\t\t\""0\\\\d{4}|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d{2})\\\\d{3}\"",\n\t\t\t\tnull,\n\t\t\t\t\""85[0-5]\\\\d{5}\"",\n\t\t\t\t\""810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""NP\"": [\n\t\t\t\""977\"",\n\t\t\t\""[1-8]\\\\d{7}|9(?:[1-69]\\\\d{6,8}|7[2-6]\\\\d{5,7}|8\\\\d{8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[2-6]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[01]|[2-8]|9(?:[1-69]|7[15-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9(?:6[013]|7[245]|8)\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""NR\"": [\n\t\t\t\""674\"",\n\t\t\t\""[458]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""NU\"": [\n\t\t\t\""683\"",\n\t\t\t\""[1-5]\\\\d{3}\""\n\t\t],\n\t\t\""NZ\"": [\n\t\t\t\""64\"",\n\t\t\t\""6[235-9]\\\\d{6}|[2-57-9]\\\\d{7,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([34679])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[346]|7[2-57-9]|9[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(24099)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""240\"",\n\t\t\t\t\t\t\""2409\"",\n\t\t\t\t\t\t\""24099\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:1[1-9]|[69]|7[0-35-9])|70|86\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d)(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[028]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:10|74)|5|[89]0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""OM\"": [\n\t\t\t\""968\"",\n\t\t\t\""(?:5|[279]\\\\d)\\\\d{6}|800\\\\d{5,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([79]\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[79]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]00)(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[58]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PA\"": [\n\t\t\t\""507\"",\n\t\t\t\""[1-9]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-57-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PE\"": [\n\t\t\t\""51\"",\n\t\t\t\""[14-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(1)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([4-8]\\\\d)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[4-7]|8[2-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""PF\"": [\n\t\t\t\""689\"",\n\t\t\t\""4\\\\d{5,7}|8\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[09]|8[79]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""44\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PG\"": [\n\t\t\t\""675\"",\n\t\t\t\""[1-9]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13-689]|27\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20|7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PH\"": [\n\t\t\t\""63\"",\n\t\t\t\""2\\\\d{5,7}|[3-9]\\\\d{7,9}|1800\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])\"",\n\t\t\t\t\t\t\""3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""346|4(?:27|9[35])|883\"",\n\t\t\t\t\t\t\""3469|4(?:279|9(?:30|56))|8834\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-8]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-8]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""81|9\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1800)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1800)(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""PK\"": [\n\t\t\t\""92\"",\n\t\t\t\""1\\\\d{8}|[2-8]\\\\d{5,11}|9(?:[013-9]\\\\d{4,9}|2\\\\d(?:111\\\\d{6}|\\\\d{3,7}))\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(111)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1\"",\n\t\t\t\t\t\t\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11\"",\n\t\t\t\t\t\t\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(111)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[349]|45|54|60|72|8[2-5]|9[2-9]\"",\n\t\t\t\t\t\t\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d1\"",\n\t\t\t\t\t\t\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d11\"",\n\t\t\t\t\t\t\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d111\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{7,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[349]|45|54|60|72|8[2-5]|9[2-9]\"",\n\t\t\t\t\t\t\""(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\\\d[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(3\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([15]\\\\d{3})(\\\\d{5,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""58[12]|1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(586\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""586\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]00)(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]00\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""PL\"": [\n\t\t\t\""48\"",\n\t\t\t\""[12]\\\\d{6,8}|[3-57-9]\\\\d{8}|6\\\\d{5,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[14]|2[0-57-9]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{1})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""26|39|5[0137]|6[0469]|7[02389]|8[08]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""64\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""64\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PM\"": [\n\t\t\t\""508\"",\n\t\t\t\""[45]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([45]\\\\d)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""PR\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5789]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""787|939\""\n\t\t],\n\t\t\""PS\"": [\n\t\t\t\""970\"",\n\t\t\t\""[24589]\\\\d{7,8}|1(?:[78]\\\\d{8}|[49]\\\\d{2,3})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([2489])(2\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2489]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5[69]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[78]00)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[78]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""PT\"": [\n\t\t\t\""351\"",\n\t\t\t\""[2-46-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[12]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-46-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[3-9]|[346-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PW\"": [\n\t\t\t\""680\"",\n\t\t\t\""[2-8]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""PY\"": [\n\t\t\t\""595\"",\n\t\t\t\""5[0-5]\\\\d{4,7}|[2-46-9]\\\\d{5,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-9]0\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8700\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-8][1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-8][1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""QA\"": [\n\t\t\t\""974\"",\n\t\t\t\""[2-8]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([28]\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[28]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-7]\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-7]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""RE\"": [\n\t\t\t\""262\"",\n\t\t\t\""[268]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([268]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""262|6[49]|8\""\n\t\t],\n\t\t\""RO\"": [\n\t\t\t\""40\"",\n\t\t\t\""[23]\\\\d{5,8}|[7-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]1\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23][3-7]|[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[3-6]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""RS\"": [\n\t\t\t\""381\"",\n\t\t\t\""[126-9]\\\\d{4,11}|3(?:[0-79]\\\\d{3,10}|8[2-9]\\\\d{2,9})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([23]\\\\d{2})(\\\\d{4,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:2[389]|39)0\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-3]\\\\d)(\\\\d{5,10})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(6\\\\d)(\\\\d{6,8})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7[26])(\\\\d{4,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7[08]\\\\d)(\\\\d{4,9})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[08]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""RU\"": [\n\t\t\t\""7\"",\n\t\t\t\""[3489]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3489]\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[34689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""8 ($1)\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-79]|7[1-37-9]))\\\\d{7}\"",\n\t\t\t\t\""9\\\\d{9}\"",\n\t\t\t\t\""80[04]\\\\d{7}\"",\n\t\t\t\t\""80[39]\\\\d{7}\""\n\t\t\t]\n\t\t],\n\t\t\""RW\"": [\n\t\t\t\""250\"",\n\t\t\t\""[027-9]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([7-9]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[7-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""SA\"": [\n\t\t\t\""966\"",\n\t\t\t\""1\\\\d{7,8}|(?:[2-467]|92)\\\\d{7}|5\\\\d{8}|8\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-467])(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-467]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[1-467]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(5\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(92\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""92\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(811)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""81\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SB\"": [\n\t\t\t\""677\"",\n\t\t\t\""[1-9]\\\\d{4,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[7-9]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SC\"": [\n\t\t\t\""248\"",\n\t\t\t\""[24689]\\\\d{5,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[246]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SD\"": [\n\t\t\t\""249\"",\n\t\t\t\""[19]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SE\"": [\n\t\t\t\""46\"",\n\t\t\t\""[1-35-9]\\\\d{5,11}|4\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(8)(\\\\d{2,3})(\\\\d{2,3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-69]\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-469]\\\\d)(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[136]|2[136]|3[356]|4[0246]|6[03]|90\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(77)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(20)(\\\\d{2,3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9[034]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[034]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9[034]\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[034]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2 $3 $4 $5\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""25[245]|67[3-6]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1 $2 $3 $4 $5\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SG\"": [\n\t\t\t\""65\"",\n\t\t\t\""[36]\\\\d{7}|[17-9]\\\\d{7,10}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3689]\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[369]|8[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[89]00)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7000)(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SH\"": [\n\t\t\t\""290\"",\n\t\t\t\""[256]\\\\d{4}\"",\n\t\t\t[],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""2(?:[0-57-9]\\\\d|6[4-9])\\\\d{2}\"",\n\t\t\t\t\""[56]\\\\d{4}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""262\\\\d{2}\""\n\t\t\t]\n\t\t],\n\t\t\""SI\"": [\n\t\t\t\""386\"",\n\t\t\t\""[1-7]\\\\d{6,7}|[89]\\\\d{4,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[12]|3[24-8]|4[24-8]|5[2-8]|7[3-8]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-7]\\\\d)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[37][01]|4[0139]|51|6\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89][09])(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89][09]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([58]\\\\d{2})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""59|8[1-3]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SJ\"": [\n\t\t\t\""47\"",\n\t\t\t\""0\\\\d{4}|[45789]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([489]\\\\d{2})(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[489]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235-7]\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[235-7]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""79\\\\d{6}\"",\n\t\t\t\t\""(?:4[015-8]|5[89]|9\\\\d)\\\\d{6}\"",\n\t\t\t\t\""80[01]\\\\d{5}\"",\n\t\t\t\t\""82[09]\\\\d{5}\"",\n\t\t\t\t\""880\\\\d{5}\"",\n\t\t\t\t\""81[23]\\\\d{5}\"",\n\t\t\t\t\""0\\\\d{4}|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d{2})\\\\d{3}\"",\n\t\t\t\tnull,\n\t\t\t\t\""85[0-5]\\\\d{5}\"",\n\t\t\t\t\""810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""SK\"": [\n\t\t\t\""421\"",\n\t\t\t\""(?:[2-68]\\\\d{5,8}|9\\\\d{6,8})\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(1[67])(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""21[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-5]\\\\d)(1[67])(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{3})(\\\\d{2})\"",\n\t\t\t\t\t\""$1/$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-5]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1/$2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[3-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([689]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[689]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9090)(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9090\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""SL\"": [\n\t\t\t\""232\"",\n\t\t\t\""[2-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""(0$1)\""\n\t\t],\n\t\t\""SM\"": [\n\t\t\t\""378\"",\n\t\t\t\""[05-7]\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[5-7]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0549)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""($1) $2\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{6})\"",\n\t\t\t\t\t\""0549 $1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t],\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""(0549) $1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""(?:0549)?([89]\\\\d{5})\"",\n\t\t\t\""0549$1\""\n\t\t],\n\t\t\""SN\"": [\n\t\t\t\""221\"",\n\t\t\t\""[3789]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[379]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SO\"": [\n\t\t\t\""252\"",\n\t\t\t\""[1-9]\\\\d{5,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{6})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[134]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[0-79]|[13-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""24|[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[125]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{5,7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""15|28|6[1-35-9]|799|9[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[59]|4[89]|6[24-6]|79|8[08]|90\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""SR\"": [\n\t\t\t\""597\"",\n\t\t\t\""[2-8]\\\\d{5,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-4]|5[2-58]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1-$2-$3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""56\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[6-8]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SS\"": [\n\t\t\t\""211\"",\n\t\t\t\""[19]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""ST\"": [\n\t\t\t\""239\"",\n\t\t\t\""[29]\\\\d{6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SV\"": [\n\t\t\t\""503\"",\n\t\t\t\""[267]\\\\d{7}|[89]\\\\d{6}(?:\\\\d{4})?\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[267]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""SX\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5789]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""721\""\n\t\t],\n\t\t\""SY\"": [\n\t\t\t\""963\"",\n\t\t\t\""[1-59]\\\\d{7,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-5]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(9\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""SZ\"": [\n\t\t\t\""268\"",\n\t\t\t\""[027]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[027]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TA\"": [\n\t\t\t\""290\"",\n\t\t\t\""8\\\\d{3}\"",\n\t\t\t[],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""8\\\\d{3}\""\n\t\t\t]\n\t\t],\n\t\t\""TC\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5689]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""649\""\n\t\t],\n\t\t\""TD\"": [\n\t\t\t\""235\"",\n\t\t\t\""[2679]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TG\"": [\n\t\t\t\""228\"",\n\t\t\t\""[29]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[29]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TH\"": [\n\t\t\t\""66\"",\n\t\t\t\""[2-9]\\\\d{7,8}|1\\\\d{3}(?:\\\\d{5,6})?\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(2)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([13-9]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""14|[3-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[89]00)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""TJ\"": [\n\t\t\t\""992\"",\n\t\t\t\""[3-57-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([349]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[34]7|91[78]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([457-9]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4[148]|[578]|9(?:1[59]|[0235-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(331700)(\\\\d)(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""331\"",\n\t\t\t\t\t\t\""3317\"",\n\t\t\t\t\t\t\""33170\"",\n\t\t\t\t\t\t\""331700\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[1-5]\"",\n\t\t\t\t\t\t\""3(?:[1245]|3(?:[02-9]|1[0-589]))\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""TK\"": [\n\t\t\t\""690\"",\n\t\t\t\""[2-47]\\\\d{3,6}\""\n\t\t],\n\t\t\""TL\"": [\n\t\t\t\""670\"",\n\t\t\t\""[2-489]\\\\d{6}|7\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-489]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TM\"": [\n\t\t\t\""993\"",\n\t\t\t\""[1-6]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""12\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""6\""\n\t\t\t\t\t],\n\t\t\t\t\t\""8 $1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2-$3-$4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""13|[2-5]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""(8 $1)\""\n\t\t],\n\t\t\""TN\"": [\n\t\t\t\""216\"",\n\t\t\t\""[2-57-9]\\\\d{7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TO\"": [\n\t\t\t\""676\"",\n\t\t\t\""[02-8]\\\\d{4,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})\"",\n\t\t\t\t\t\""$1-$2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-6]|7[0-4]|8[05]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[5-9]|8[47-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""TR\"": [\n\t\t\t\""90\"",\n\t\t\t\""[2-589]\\\\d{9}|444\\\\d{4}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]|4(?:[0-35-9]|4[0-35-9])\""\n\t\t\t\t\t],\n\t\t\t\t\t\""(0$1)\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""5[02-69]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""51|[89]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\"",\n\t\t\t\t\t\""true\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(444)(\\\\d{1})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""444\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""TT\"": [\n\t\t\t\""1\"",\n\t\t\t\""[589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""868\""\n\t\t],\n\t\t\""TV\"": [\n\t\t\t\""688\"",\n\t\t\t\""[279]\\\\d{4,6}\""\n\t\t],\n\t\t\""TW\"": [\n\t\t\t\""886\"",\n\t\t\t\""2\\\\d{6,8}|[3-689]\\\\d{7,8}|7\\\\d{7,9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(20)(\\\\d)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""202\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(20)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""20[013-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2-8])(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[23-8]|[3-6]|[78][1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80|9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(70)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""70\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""TZ\"": [\n\t\t\t\""255\"",\n\t\t\t\""\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([24]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([67]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[67]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d{2})(\\\\d{2})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""UA\"": [\n\t\t\t\""380\"",\n\t\t\t\""[3-9]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([3-9]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[38]9|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|7|9[1-9]\"",\n\t\t\t\t\t\t\""[38]9|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|7|9[1-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-689]\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3[1-8]2|4[13678]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90\"",\n\t\t\t\t\t\t\""3(?:[1-46-8]2[013-9]|52)|4(?:[1378]2|62[013-9])|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([3-6]\\\\d{3})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])\"",\n\t\t\t\t\t\t\""3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6(?:[013-9]|22)|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6(?:3[02389]|[015689])|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""UG\"": [\n\t\t\t\""256\"",\n\t\t\t\""\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[7-9]|20(?:[013-8]|2[5-9])|4(?:6[45]|[7-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3|4(?:[1-5]|6[0-36-9])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(2024)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2024\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""US\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2-9]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""(?:2(?:0[1-35-9]|1[02-9]|2[04589]|3[149]|4[08]|5[1-46]|6[0279]|7[026]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|4[67]|5[12]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|6[39]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[16]|5[017]|6[0-279]|78|8[012])|7(?:0[1-46-8]|1[02-9]|2[0457]|3[1247]|4[037]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[014678]|4[0179]|5[12469]|7[0-3589]|8[0459]))[2-9]\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\t\""8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\"",\n\t\t\t\t\""900[2-9]\\\\d{6}\"",\n\t\t\t\t\""5(?:00|22|33|44|66|77|88)[2-9]\\\\d{6}\""\n\t\t\t]\n\t\t],\n\t\t\""UY\"": [\n\t\t\t\""598\"",\n\t\t\t\""[2489]\\\\d{6,7}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[24]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""9[1-9]\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[89]0\""\n\t\t\t\t\t],\n\t\t\t\t\t\""0$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\""\n\t\t],\n\t\t\""UZ\"": [\n\t\t\t\""998\"",\n\t\t\t\""[679]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([679]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""8\"",\n\t\t\t\""8 $1\""\n\t\t],\n\t\t\""VA\"": [\n\t\t\t\""39\"",\n\t\t\t\""(?:0(?:878\\\\d{5}|6698\\\\d{5})|[1589]\\\\d{5,10}|3(?:[12457-9]\\\\d{8}|[36]\\\\d{7,9}))\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]|55\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0[26])(\\\\d{4})(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0[26])(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[26]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{2})(\\\\d{3,4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][0159]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][0159]|8(?:03|4[17]|9[245])\"",\n\t\t\t\t\t\t\""0[13-57-9][0159]|8(?:03|4[17]|9(?:2|[45][0-4]))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][2-46-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(0\\\\d{3})(\\\\d{2,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""0[13-57-9][2-46-8]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[13]|8(?:00|4[08]|9[59])\"",\n\t\t\t\t\t\t\""[13]|8(?:00|4[08]|9(?:5[5-9]|9))\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""894\"",\n\t\t\t\t\t\t\""894[5-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""3\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t[\n\t\t\t\t\""06698\\\\d{5}\"",\n\t\t\t\t\""3(?:[12457-9]\\\\d{8}|6\\\\d{7,8}|3\\\\d{7,9})\"",\n\t\t\t\t\""80(?:0\\\\d{6}|3\\\\d{3})\"",\n\t\t\t\t\""0878\\\\d{5}|1(?:44|6[346])\\\\d{6}|89(?:2\\\\d{3}|4(?:[0-4]\\\\d{2}|[5-9]\\\\d{4})|5(?:[0-4]\\\\d{2}|[5-9]\\\\d{6})|9\\\\d{6})\"",\n\t\t\t\t\""1(?:78\\\\d|99)\\\\d{6}\"",\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\t\""55\\\\d{8}\"",\n\t\t\t\t\""84(?:[08]\\\\d{6}|[17]\\\\d{3})\""\n\t\t\t]\n\t\t],\n\t\t\""VC\"": [\n\t\t\t\""1\"",\n\t\t\t\""[5789]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""784\""\n\t\t],\n\t\t\""VE\"": [\n\t\t\t\""58\"",\n\t\t\t\""[24589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{7})\"",\n\t\t\t\t\t\""$1-$2\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""VG\"": [\n\t\t\t\""1\"",\n\t\t\t\""[2589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""284\""\n\t\t],\n\t\t\""VI\"": [\n\t\t\t\""1\"",\n\t\t\t\""[3589]\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""($1) $2-$3\"",\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull,\n\t\t\t\t\t\""$1-$2-$3\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""340\""\n\t\t],\n\t\t\""VN\"": [\n\t\t\t\""84\"",\n\t\t\t\""[167]\\\\d{6,9}|[2-59]\\\\d{7,9}|8\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([17]99)(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[17]99\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([48])(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4|8(?:[2-5]|6[236]|7[13])\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235-7]\\\\d)(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[5-7]|3[0136]|5[5-9]|6[0-46-8]|7[02-79]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(69\\\\d)(\\\\d{4,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""69\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235-7]\\\\d{2})(\\\\d{4})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2[0-489]|3[25]|50|65|7[18]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([89]\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8(?:8|9[89])|9\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[2689]\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1(?:[26]|8[68]|99)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(86[89])(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""86[89]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(1[89]00)(\\\\d{4,6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[89]0\""\n\t\t\t\t\t],\n\t\t\t\t\t\""$1\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\ttrue\n\t\t],\n\t\t\""VU\"": [\n\t\t\t\""678\"",\n\t\t\t\""[2-57-9]\\\\d{4,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[579]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""WF\"": [\n\t\t\t\""681\"",\n\t\t\t\""[4-8]\\\\d{5}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""WS\"": [\n\t\t\t\""685\"",\n\t\t\t\""[2-8]\\\\d{4,6}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{2})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d)(\\\\d{5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{5})\"",\n\t\t\t\t\t\""$1\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[2-6]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t]\n\t\t],\n\t\t\""YE\"": [\n\t\t\t\""967\"",\n\t\t\t\""[1-7]\\\\d{6,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([1-7])(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-6]|7[24-68]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7[0137]\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""YT\"": [\n\t\t\t\""262\"",\n\t\t\t\""[268]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([268]\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\"",\n\t\t\t\t\t\""$1 $2 $3 $4\""\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\"",\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t\""269|63\""\n\t\t],\n\t\t\""ZA\"": [\n\t\t\t\""27\"",\n\t\t\t\""[1-79]\\\\d{8}|8\\\\d{4,8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(860)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""860\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8[1-4]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{2})(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[1-79]|8(?:[0-57]|6[1-9])\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ZM\"": [\n\t\t\t\""260\"",\n\t\t\t\""[289]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([29]\\\\d)(\\\\d{7})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[29]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(800)(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""8\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""ZW\"": [\n\t\t\t\""263\"",\n\t\t\t\""2(?:[012457-9]\\\\d{3,8}|6(?:[14]\\\\d{7}|\\\\d{4}))|[13-79]\\\\d{4,9}|8[06]\\\\d{8}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""([49])(\\\\d{3})(\\\\d{2,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""4|9[2-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(7\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""7\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(86\\\\d{2})(\\\\d{3})(\\\\d{3})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""86[24]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([2356]\\\\d{2})(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:0[45]|2[278]|[49]8|[78])|3(?:08|17|3[78]|7[1569]|8[37]|98)|5[15][78]|6(?:[29]8|[38]7|6[78]|75|[89]8)\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""2(?:1[39]|2[0157]|6[14]|7[35]|84)|329\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([1-356]\\\\d)(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""1[3-9]|2[0569]|3[0-69]|5[05689]|6[0-46-9]\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([235]\\\\d)(\\\\d{3})(\\\\d{3,4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""[23]9|54\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""([25]\\\\d{3})(\\\\d{3,5})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""(?:25|54)8\"",\n\t\t\t\t\t\t\""258[23]|5483\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(8\\\\d{3})(\\\\d{6})\"",\n\t\t\t\t\t\""$1 $2\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""86\""\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t\""(80\\\\d)(\\\\d{3})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\"",\n\t\t\t\t\t[\n\t\t\t\t\t\t\""80\""\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t],\n\t\t\t\""0\"",\n\t\t\t\""0$1\""\n\t\t],\n\t\t\""001\"": [\n\t\t\t\""979\"",\n\t\t\t\""\\\\d{9}\"",\n\t\t\t[\n\t\t\t\t[\n\t\t\t\t\t\""(\\\\d)(\\\\d{4})(\\\\d{4})\"",\n\t\t\t\t\t\""$1 $2 $3\""\n\t\t\t\t]\n\t\t\t]\n\t\t]\n\t}\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./metadata.min.json\n// module id = 34\n// module chunks = 0"",""import _getIterator from 'babel-runtime/core-js/get-iterator';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n// This is an enhanced port of Google Android `libphonenumber`'s\n// `asyoutypeformatter.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/blob/8d21a365061de2ba0675c878a710a7b24f74d2ae/javascript/i18n/phonenumbers/asyoutypeformatter.js\n\nimport { get_phone_code, get_national_prefix, get_national_prefix_for_parsing, get_formats, get_format_pattern, get_format_format as _get_format_format, get_format_international_format, get_format_national_prefix_formatting_rule, get_format_national_prefix_is_mandatory_when_formatting, get_format_leading_digits_patterns, get_format_uses_national_prefix, get_metadata_by_country_phone_code } from './metadata';\n\nimport { VALID_PUNCTUATION, PLUS_SIGN, PLUS_CHARS, VALID_DIGITS, extract_formatted_phone_number, parse_phone_number, parse_phone_number_and_country_phone_code, find_country_code, strip_national_prefix } from './parse';\n\nimport { FIRST_GROUP_PATTERN, format_national_number_using_format, local_to_international_style } from './format';\n\nimport { matches_entirely } from './common';\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\nvar DUMMY_DIGIT_MATCHER = new RegExp(DUMMY_DIGIT, 'g');\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \""longest phone number\"" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// The digits that have not been entered yet will be represented by a \\u2008,\n// the punctuation space.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\nvar DIGIT_PLACEHOLDER_MATCHER_GLOBAL = new RegExp(DIGIT_PLACEHOLDER, 'g');\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \""[1-4]\"".\nvar CHARACTER_CLASS_PATTERN = /\\[([^\\[\\]])*\\]/g;\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \""80[0-2]\\d{6,10}\"", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar STANDALONE_DIGIT_PATTERN = /\\d(?=[^,}][^,}])/g;\n\n// A pattern that is used to determine if a `format` is eligible\n// to be used by the \""as you type formatter\"".\n// It is eligible when the `format` contains groups of the dollar sign\n// followed by a single digit, separated by valid phone number punctuation.\n// This prevents invalid punctuation (such as the star sign in Israeli star numbers)\n// getting into the output of the \""as you type formatter\"".\nvar ELIGIBLE_FORMAT_PATTERN = new RegExp('^' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)+' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \""leading digits pattern\"" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\n\nvar VALID_INCOMPLETE_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\nvar VALID_INCOMPLETE_PHONE_NUMBER_PATTERN = new RegExp('^' + VALID_INCOMPLETE_PHONE_NUMBER + '$', 'i');\n\nvar as_you_type = function () {\n\tfunction as_you_type(country_code, metadata) {\n\t\t_classCallCheck(this, as_you_type);\n\n\t\t// Sanity check\n\t\tif (!metadata) {\n\t\t\tthrow new Error('Metadata not passed');\n\t\t}\n\n\t\tif (country_code && metadata.countries[country_code]) {\n\t\t\tthis.default_country = country_code;\n\t\t}\n\n\t\tthis.metadata = metadata;\n\n\t\tthis.reset();\n\t}\n\n\t_createClass(as_you_type, [{\n\t\tkey: 'input',\n\t\tvalue: function input(text) {\n\t\t\t// Parse input\n\n\t\t\tvar extracted_number = extract_formatted_phone_number(text);\n\n\t\t\t// Special case for a lone '+' sign\n\t\t\t// since it's not considered a possible phone number.\n\t\t\tif (!extracted_number) {\n\t\t\t\tif (text && text.indexOf('+') >= 0) {\n\t\t\t\t\textracted_number = '+';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Validate possible first part of a phone number\n\t\t\tif (!matches_entirely(extracted_number, VALID_INCOMPLETE_PHONE_NUMBER_PATTERN)) {\n\t\t\t\treturn this.current_output;\n\t\t\t}\n\n\t\t\treturn this.process_input(parse_phone_number(extracted_number));\n\t\t}\n\t}, {\n\t\tkey: 'process_input',\n\t\tvalue: function process_input(input) {\n\t\t\t// If an out of position '+' sign detected\n\t\t\t// (or a second '+' sign),\n\t\t\t// then just drop it from the input.\n\t\t\tif (input[0] === '+') {\n\t\t\t\tif (!this.parsed_input) {\n\t\t\t\t\tthis.parsed_input += '+';\n\n\t\t\t\t\t// If a default country was set\n\t\t\t\t\t// then reset it because an explicitly international\n\t\t\t\t\t// phone number is being entered\n\t\t\t\t\tthis.reset_countriness();\n\t\t\t\t}\n\n\t\t\t\tinput = input.slice(1);\n\t\t\t}\n\n\t\t\t// Raw phone number\n\t\t\tthis.parsed_input += input;\n\n\t\t\t// // Reset phone number validation state\n\t\t\t// this.valid = false\n\n\t\t\t// Add digits to the national number\n\t\t\tthis.national_number += input;\n\n\t\t\t// Try to format the parsed input\n\n\t\t\tif (this.is_international()) {\n\t\t\t\tif (!this.country_phone_code) {\n\t\t\t\t\t// If one looks at country phone codes\n\t\t\t\t\t// then he can notice that no one country phone code\n\t\t\t\t\t// is ever a (leftmost) substring of another country phone code.\n\t\t\t\t\t// So if a valid country code is extracted so far\n\t\t\t\t\t// then it means that this is the country code.\n\n\t\t\t\t\t// If no country phone code could be extracted so far,\n\t\t\t\t\t// then just return the raw phone number,\n\t\t\t\t\t// because it has no way of knowing\n\t\t\t\t\t// how to format the phone number so far.\n\t\t\t\t\tif (!this.extract_country_phone_code()) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Initialize country-specific data\n\t\t\t\t\tthis.initialize_phone_number_formats_for_this_country_phone_code();\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t}\n\t\t\t\t// `this.country` could be `undefined`,\n\t\t\t\t// for instance, when there is ambiguity\n\t\t\t\t// in a form of several different countries\n\t\t\t\t// each corresponding to the same country phone code\n\t\t\t\t// (e.g. NANPA: USA, Canada, etc),\n\t\t\t\t// and there's not enough digits entered\n\t\t\t\t// to reliably determine the country\n\t\t\t\t// the phone number belongs to.\n\t\t\t\t// Therefore, in cases of such ambiguity,\n\t\t\t\t// each time something is input,\n\t\t\t\t// try to determine the country\n\t\t\t\t// (if it's not determined yet).\n\t\t\t\telse if (!this.country) {\n\t\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Some national prefixes are substrings of other national prefixes\n\t\t\t\t// (for the same country), therefore try to extract national prefix each time\n\t\t\t\t// because a longer national prefix might be available at some point in time.\n\n\t\t\t\tvar previous_national_prefix = this.national_prefix;\n\t\t\t\tthis.national_number = this.national_prefix + this.national_number;\n\n\t\t\t\t// Possibly extract a national prefix\n\t\t\t\tthis.extract_national_prefix();\n\n\t\t\t\tif (this.national_prefix !== previous_national_prefix) {\n\t\t\t\t\t// National number has changed\n\t\t\t\t\t// (due to another national prefix been extracted)\n\t\t\t\t\t// therefore national number has changed\n\t\t\t\t\t// therefore reset all previous formatting data.\n\t\t\t\t\t// (and leading digits matching state)\n\t\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check the available phone number formats\n\t\t\t// based on the currently available leading digits.\n\t\t\tthis.match_formats_by_leading_digits();\n\n\t\t\t// Format the phone number (given the next digits)\n\t\t\tvar formatted_national_phone_number = this.format_national_phone_number(input);\n\n\t\t\t// If the phone number could be formatted,\n\t\t\t// then return it, possibly prepending with country phone code\n\t\t\t// (for international phone numbers only)\n\t\t\tif (formatted_national_phone_number) {\n\t\t\t\treturn this.full_phone_number(formatted_national_phone_number);\n\t\t\t}\n\n\t\t\t// If the phone number couldn't be formatted,\n\t\t\t// then just fall back to the raw phone number.\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_national_phone_number',\n\t\tvalue: function format_national_phone_number(next_digits) {\n\t\t\t// Format the next phone number digits\n\t\t\t// using the previously chosen phone number format.\n\t\t\t//\n\t\t\t// This is done here because if `attempt_to_format_complete_phone_number`\n\t\t\t// was placed before this call then the `template`\n\t\t\t// wouldn't reflect the situation correctly (and would therefore be inconsistent)\n\t\t\t//\n\t\t\tvar national_number_formatted_with_previous_format = void 0;\n\t\t\tif (this.chosen_format) {\n\t\t\t\tnational_number_formatted_with_previous_format = this.format_next_national_number_digits(next_digits);\n\t\t\t}\n\n\t\t\t// See if the input digits can be formatted properly already. If not,\n\t\t\t// use the results from format_next_national_number_digits(), which does formatting\n\t\t\t// based on the formatting pattern chosen.\n\n\t\t\tvar formatted_number = this.attempt_to_format_complete_phone_number();\n\n\t\t\t// Just because a phone number doesn't have a suitable format\n\t\t\t// that doesn't mean that the phone is invalid\n\t\t\t// because phone number formats only format phone numbers,\n\t\t\t// they don't validate them and some (rare) phone numbers\n\t\t\t// are meant to stay non-formatted.\n\t\t\tif (formatted_number) {\n\t\t\t\t// if (this.country)\n\t\t\t\t// {\n\t\t\t\t// \tthis.valid = true\n\t\t\t\t// }\n\n\t\t\t\treturn formatted_number;\n\t\t\t}\n\n\t\t\t// For some phone number formats national prefix\n\n\t\t\t// If the previously chosen phone number format\n\t\t\t// didn't match the next (current) digit being input\n\t\t\t// (leading digits pattern didn't match).\n\t\t\tif (this.choose_another_format()) {\n\t\t\t\t// And a more appropriate phone number format\n\t\t\t\t// has been chosen for these `leading digits`,\n\t\t\t\t// then format the national phone number (so far)\n\t\t\t\t// using the newly selected phone number pattern.\n\n\t\t\t\t// Will return `undefined` if it couldn't format\n\t\t\t\t// the supplied national number\n\t\t\t\t// using the selected phone number pattern.\n\n\t\t\t\treturn this.reformat_national_number();\n\t\t\t}\n\n\t\t\t// If could format the next (current) digit\n\t\t\t// using the previously chosen phone number format\n\t\t\t// then return the formatted number so far.\n\n\t\t\t// If no new phone number format could be chosen,\n\t\t\t// and couldn't format the supplied national number\n\t\t\t// using the selected phone number pattern,\n\t\t\t// then it will return `undefined`.\n\n\t\t\treturn national_number_formatted_with_previous_format;\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset() {\n\t\t\t// Input stripped of non-phone-number characters.\n\t\t\t// Can only contain a possible leading '+' sign and digits.\n\t\t\tthis.parsed_input = '';\n\n\t\t\tthis.current_output = '';\n\n\t\t\t// This contains the national prefix that has been extracted. It contains only\n\t\t\t// digits without formatting.\n\t\t\tthis.national_prefix = '';\n\n\t\t\tthis.national_number = '';\n\n\t\t\tthis.reset_countriness();\n\n\t\t\tthis.reset_format();\n\n\t\t\t// this.valid = false\n\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'reset_country',\n\t\tvalue: function reset_country() {\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.country = this.default_country;\n\t\t\t} else {\n\t\t\t\tthis.country = undefined;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_countriness',\n\t\tvalue: function reset_countriness() {\n\t\t\tthis.reset_country();\n\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.country_metadata = this.metadata.countries[this.default_country];\n\t\t\t\tthis.country_phone_code = this.country_metadata.phone_code;\n\n\t\t\t\tthis.initialize_phone_number_formats_for_this_country_phone_code();\n\t\t\t} else {\n\t\t\t\tthis.country_metadata = undefined;\n\t\t\t\tthis.country_phone_code = undefined;\n\n\t\t\t\tthis.available_formats = [];\n\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_format',\n\t\tvalue: function reset_format() {\n\t\t\tthis.chosen_format = undefined;\n\t\t\tthis.template = undefined;\n\t\t\tthis.partially_populated_template = undefined;\n\t\t\tthis.last_match_position = -1;\n\t\t}\n\n\t\t// Format each digit of national phone number (so far)\n\t\t// using the newly selected phone number pattern.\n\n\t}, {\n\t\tkey: 'reformat_national_number',\n\t\tvalue: function reformat_national_number() {\n\t\t\t// Format each digit of national phone number (so far)\n\t\t\t// using the selected phone number pattern.\n\t\t\treturn this.format_next_national_number_digits(this.national_number);\n\t\t}\n\t}, {\n\t\tkey: 'initialize_phone_number_formats_for_this_country_phone_code',\n\t\tvalue: function initialize_phone_number_formats_for_this_country_phone_code() {\n\t\t\t// Get all \""eligible\"" phone number formats for this country\n\t\t\tthis.available_formats = get_formats(this.country_metadata).filter(function (format) {\n\t\t\t\treturn ELIGIBLE_FORMAT_PATTERN.test(get_format_international_format(format));\n\t\t\t});\n\n\t\t\tthis.matching_formats = this.available_formats;\n\t\t}\n\t}, {\n\t\tkey: 'match_formats_by_leading_digits',\n\t\tvalue: function match_formats_by_leading_digits() {\n\t\t\tvar leading_digits = this.national_number;\n\n\t\t\t// \""leading digits\"" patterns start with a maximum 3 digits,\n\t\t\t// and then with each additional digit\n\t\t\t// a more precise \""leading digits\"" pattern is specified.\n\t\t\t// They could make \""leading digits\"" patterns start\n\t\t\t// with a maximum of a single digit, but they didn't,\n\t\t\t// so it's possible that some phone number formats\n\t\t\t// will be falsely rejected until there are at least\n\t\t\t// 3 digits in the national (significant) number being input.\n\n\t\t\tvar index_of_leading_digits_pattern = leading_digits.length - MIN_LEADING_DIGITS_LENGTH;\n\n\t\t\tif (index_of_leading_digits_pattern < 0) {\n\t\t\t\tindex_of_leading_digits_pattern = 0;\n\t\t\t}\n\n\t\t\tthis.matching_formats = this.get_relevant_phone_number_formats().filter(function (format) {\n\t\t\t\tvar leading_digits_pattern_count = get_format_leading_digits_patterns(format).length;\n\n\t\t\t\t// Keep everything that isn't restricted by leading digits.\n\t\t\t\tif (leading_digits_pattern_count === 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar leading_digits_pattern_index = Math.min(index_of_leading_digits_pattern, leading_digits_pattern_count - 1);\n\t\t\t\tvar leading_digits_pattern = get_format_leading_digits_patterns(format)[leading_digits_pattern_index];\n\n\t\t\t\t// Brackets are required for `^` to be applied to\n\t\t\t\t// all or-ed (`|`) parts, not just the first one.\n\t\t\t\treturn new RegExp('^(' + leading_digits_pattern + ')').test(leading_digits);\n\t\t\t});\n\n\t\t\t// If there was a phone number format chosen\n\t\t\t// and it no longer holds given the new leading digits then reset it\n\t\t\tif (this.chosen_format && this.matching_formats.indexOf(this.chosen_format) === -1) {\n\t\t\t\tthis.reset_format();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'get_relevant_phone_number_formats',\n\t\tvalue: function get_relevant_phone_number_formats() {\n\t\t\tvar leading_digits = this.national_number;\n\n\t\t\t// \""leading digits\"" patterns start with a maximum 3 digits,\n\t\t\t// and then with each additional digit\n\t\t\t// a more precise \""leading digits\"" pattern is specified.\n\t\t\t// They could make \""leading digits\"" patterns start\n\t\t\t// with a maximum of a single digit, but they didn't,\n\t\t\t// so it's possible that some phone number formats\n\t\t\t// will be falsely rejected until there are at least\n\t\t\t// 3 digits in the national (significant) number being input.\n\n\t\t\tif (leading_digits.length <= MIN_LEADING_DIGITS_LENGTH) {\n\t\t\t\treturn this.available_formats;\n\t\t\t}\n\n\t\t\treturn this.matching_formats;\n\t\t}\n\n\t\t// Check to see if there is an exact pattern match for these digits. If so, we\n\t\t// should use this instead of any other formatting template whose\n\t\t// leadingDigitsPattern also matches the input.\n\n\t}, {\n\t\tkey: 'attempt_to_format_complete_phone_number',\n\t\tvalue: function attempt_to_format_complete_phone_number() {\n\t\t\tvar _iteratorNormalCompletion = true;\n\t\t\tvar _didIteratorError = false;\n\t\t\tvar _iteratorError = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator = _getIterator(this.get_relevant_phone_number_formats()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\t\t\tvar format = _step.value;\n\n\t\t\t\t\tvar matcher = new RegExp('^(?:' + get_format_pattern(format) + ')$');\n\n\t\t\t\t\tif (!matcher.test(this.national_number)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.validate_format(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// To leave the formatter in a consistent state\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t\tvar formatted_number = format_national_number_using_format(this.national_number, format, this.is_international(), this.national_prefix.length > 0, this.country_metadata);\n\n\t\t\t\t\t// Set `this.template` and `this.partially_populated_template`\n\t\t\t\t\t//\n\t\t\t\t\t// `else` case doesn't ever happen\n\t\t\t\t\t// with the current metadata,\n\t\t\t\t\t// but just in case.\n\t\t\t\t\t//\n\t\t\t\t\t/* istanbul ignore else */\n\t\t\t\t\tif (this.create_formatting_template(format)) {\n\t\t\t\t\t\t// Populate `this.partially_populated_template`\n\t\t\t\t\t\tthis.reformat_national_number();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar full_number = this.full_phone_number(formatted_number);\n\n\t\t\t\t\t\tthis.template = full_number.replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER);\n\t\t\t\t\t\tthis.partially_populated_template = full_number;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn formatted_number;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError = true;\n\t\t\t\t_iteratorError = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t\t\t_iterator.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError) {\n\t\t\t\t\t\tthrow _iteratorError;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Combines the national number with the appropriate prefix\n\n\t}, {\n\t\tkey: 'full_phone_number',\n\t\tvalue: function full_phone_number(formatted_national_number) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn '+' + this.country_phone_code + ' ' + formatted_national_number;\n\t\t\t}\n\n\t\t\treturn formatted_national_number;\n\t\t}\n\n\t\t// Extracts the country calling code from the beginning\n\t\t// of the entered `national_number` (so far),\n\t\t// and places the remaining input into the `national_number`.\n\n\t}, {\n\t\tkey: 'extract_country_phone_code',\n\t\tvalue: function extract_country_phone_code() {\n\t\t\tif (!this.national_number) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar _parse_phone_number_a = parse_phone_number_and_country_phone_code(this.parsed_input, this.metadata),\n\t\t\t    country_phone_code = _parse_phone_number_a.country_phone_code,\n\t\t\t    number = _parse_phone_number_a.number;\n\n\t\t\tif (!country_phone_code) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.country_phone_code = country_phone_code;\n\t\t\tthis.national_number = number;\n\n\t\t\treturn this.country_metadata = get_metadata_by_country_phone_code(country_phone_code, this.metadata);\n\t\t}\n\t}, {\n\t\tkey: 'extract_national_prefix',\n\t\tvalue: function extract_national_prefix() {\n\t\t\tthis.national_prefix = '';\n\n\t\t\tif (!this.country_metadata) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar national_number = strip_national_prefix(this.national_number, this.country_metadata);\n\n\t\t\tif (national_number !== this.national_number) {\n\t\t\t\tthis.national_prefix = this.national_number.slice(0, this.national_number.length - national_number.length);\n\t\t\t\tthis.national_number = national_number;\n\t\t\t}\n\n\t\t\treturn this.national_prefix;\n\t\t}\n\t}, {\n\t\tkey: 'choose_another_format',\n\t\tvalue: function choose_another_format() {\n\t\t\t// When there are multiple available formats, the formatter uses the first\n\t\t\t// format where a formatting template could be created.\n\t\t\tvar _iteratorNormalCompletion2 = true;\n\t\t\tvar _didIteratorError2 = false;\n\t\t\tvar _iteratorError2 = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator2 = _getIterator(this.get_relevant_phone_number_formats()), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\t\tvar format = _step2.value;\n\n\t\t\t\t\t// If this format is currently being used\n\t\t\t\t\t// and is still possible, then stick to it.\n\t\t\t\t\tif (this.chosen_format === format) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this `format` is suitable for \""as you type\"",\n\t\t\t\t\t// then extract the template from this format\n\t\t\t\t\t// and use it to format the phone number being input.\n\n\t\t\t\t\tif (!this.validate_format(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.create_formatting_template(format)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t\t// With a new formatting template, the matched position\n\t\t\t\t\t// using the old template needs to be reset.\n\t\t\t\t\tthis.last_match_position = -1;\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// No format matches the phone number,\n\t\t\t\t// therefore set `country` to `undefined`\n\t\t\t\t// (or to the default country).\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError2 = true;\n\t\t\t\t_iteratorError2 = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t\t_iterator2.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.reset_country();\n\n\t\t\t// No format matches the national phone number entered\n\t\t\tthis.reset_format();\n\t\t}\n\t}, {\n\t\tkey: 'validate_format',\n\t\tvalue: function validate_format(format) {\n\t\t\t// If national prefix is mandatory for this phone number format\n\t\t\t// and the user didn't input the national prefix,\n\t\t\t// then this phone number format isn't suitable.\n\t\t\tif (!this.is_international() && !this.national_prefix && get_format_national_prefix_is_mandatory_when_formatting(format, this.country_metadata)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t}, {\n\t\tkey: 'create_formatting_template',\n\t\tvalue: function create_formatting_template(format) {\n\t\t\t// The formatter doesn't format numbers when numberPattern contains '|', e.g.\n\t\t\t// (20|3)\\d{4}. In those cases we quickly return.\n\t\t\t// (Though there's no such format in current metadata)\n\t\t\t/* istanbul ignore if */\n\t\t\tif (get_format_pattern(format).indexOf('|') >= 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar national_prefix_formatting_rule = get_format_national_prefix_formatting_rule(format, this.country_metadata);\n\n\t\t\t// A very smart trick by the guys at Google\n\t\t\tvar number_pattern = get_format_pattern(format)\n\t\t\t// Replace anything in the form of [..] with \\d\n\t\t\t.replace(CHARACTER_CLASS_PATTERN, '\\\\d')\n\t\t\t// Replace any standalone digit (not the one in `{}`) with \\d\n\t\t\t.replace(STANDALONE_DIGIT_PATTERN, '\\\\d');\n\n\t\t\t// This match will always succeed,\n\t\t\t// because the \""longest dummy phone number\""\n\t\t\t// has enough length to accomodate any possible\n\t\t\t// national phone number format pattern.\n\t\t\tvar dummy_phone_number_matching_format_pattern = LONGEST_DUMMY_PHONE_NUMBER.match(number_pattern)[0];\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (this.national_number.length > dummy_phone_number_matching_format_pattern.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Now prepare phone number format\n\t\t\tvar number_format = this.get_format_format(format);\n\n\t\t\t// If national prefix formatting rule is set\n\t\t\t// for this phone number format\n\t\t\tif (national_prefix_formatting_rule) {\n\t\t\t\t// If the user did input the national prefix\n\t\t\t\t// (or if the national prefix formatting rule does not require national prefix)\n\t\t\t\t// then maybe make it part of the phone number template\n\t\t\t\tif (this.national_prefix || !get_format_uses_national_prefix(national_prefix_formatting_rule)) {\n\t\t\t\t\t// Make the national prefix part of the phone number template\n\t\t\t\t\tnumber_format = number_format.replace(FIRST_GROUP_PATTERN, national_prefix_formatting_rule);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get a formatting template which can be used to efficiently format\n\t\t\t// a partial number where digits are added one by one.\n\n\t\t\t// Create formatting template for this phone number format\n\t\t\tvar template = dummy_phone_number_matching_format_pattern\n\t\t\t// Format the dummy phone number according to the format\n\t\t\t.replace(new RegExp(number_pattern, 'g'), number_format)\n\t\t\t// Replace each dummy digit with a DIGIT_PLACEHOLDER\n\t\t\t.replace(DUMMY_DIGIT_MATCHER, DIGIT_PLACEHOLDER);\n\n\t\t\t// This one is for national number only\n\t\t\tthis.partially_populated_template = template;\n\n\t\t\t// For convenience, the public `.template` property\n\t\t\t// is gonna contain the whole international number\n\t\t\t// if the phone number being input is international.\n\t\t\tif (this.is_international()) {\n\t\t\t\ttemplate = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.country_phone_code.length) + ' ' + template;\n\t\t\t}\n\t\t\t// For local numbers, replace national prefix\n\t\t\t// with a digit placeholder.\n\t\t\telse {\n\t\t\t\t\ttemplate = template.replace(/\\d/g, DIGIT_PLACEHOLDER);\n\t\t\t\t}\n\n\t\t\t// This one is for the full phone number\n\t\t\treturn this.template = template;\n\t\t}\n\t}, {\n\t\tkey: 'format_next_national_number_digits',\n\t\tvalue: function format_next_national_number_digits(digits) {\n\t\t\tvar _iteratorNormalCompletion3 = true;\n\t\t\tvar _didIteratorError3 = false;\n\t\t\tvar _iteratorError3 = undefined;\n\n\t\t\ttry {\n\t\t\t\tfor (var _iterator3 = _getIterator(digits), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\t\tvar digit = _step3.value;\n\n\t\t\t\t\t// If there is room for more digits in current `template`,\n\t\t\t\t\t// then set the next digit in the `template`,\n\t\t\t\t\t// and return the formatted digits so far.\n\n\t\t\t\t\t// If more digits are entered than the current format could handle\n\t\t\t\t\tif (this.partially_populated_template.slice(this.last_match_position + 1).search(DIGIT_PLACEHOLDER_MATCHER) === -1) {\n\t\t\t\t\t\t// Reset the current format,\n\t\t\t\t\t\t// so that the new format will be chosen\n\t\t\t\t\t\t// in a subsequent `this.choose_another_format()` call\n\t\t\t\t\t\t// later in code.\n\t\t\t\t\t\tthis.chosen_format = undefined;\n\t\t\t\t\t\tthis.template = undefined;\n\t\t\t\t\t\tthis.partially_populated_template = undefined;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.last_match_position = this.partially_populated_template.search(DIGIT_PLACEHOLDER_MATCHER);\n\t\t\t\t\tthis.partially_populated_template = this.partially_populated_template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n\t\t\t\t}\n\n\t\t\t\t// Return the formatted phone number so far\n\t\t\t} catch (err) {\n\t\t\t\t_didIteratorError3 = true;\n\t\t\t\t_iteratorError3 = err;\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t\t_iterator3.return();\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn close_dangling_braces(this.partially_populated_template, this.last_match_position + 1).replace(DIGIT_PLACEHOLDER_MATCHER_GLOBAL, ' ');\n\t\t}\n\t}, {\n\t\tkey: 'is_international',\n\t\tvalue: function is_international() {\n\t\t\treturn this.parsed_input && this.parsed_input[0] === '+';\n\t\t}\n\t}, {\n\t\tkey: 'get_format_format',\n\t\tvalue: function get_format_format(format) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn local_to_international_style(get_format_international_format(format));\n\t\t\t}\n\n\t\t\treturn _get_format_format(format);\n\t\t}\n\n\t\t// Determines the country of the phone number\n\t\t// entered so far based on the country phone code\n\t\t// and the national phone number.\n\n\t}, {\n\t\tkey: 'determine_the_country',\n\t\tvalue: function determine_the_country() {\n\t\t\tthis.country = find_country_code(this.country_phone_code, this.national_number, this.metadata);\n\t\t}\n\t}]);\n\n\treturn as_you_type;\n}();\n\nexport default as_you_type;\n\n\nexport function close_dangling_braces(template, cut_before) {\n\tvar retained_template = template.slice(0, cut_before);\n\n\tvar opening_braces = count_occurences('(', retained_template);\n\tvar closing_braces = count_occurences(')', retained_template);\n\n\tvar dangling_braces = opening_braces - closing_braces;\n\n\twhile (dangling_braces > 0 && cut_before < template.length) {\n\t\tif (template[cut_before] === ')') {\n\t\t\tdangling_braces--;\n\t\t}\n\t\tcut_before++;\n\t}\n\n\treturn template.slice(0, cut_before);\n}\n\n// Counts all occurences of a symbol in a string\nexport function count_occurences(symbol, string) {\n\tvar count = 0;\n\n\tvar _iteratorNormalCompletion4 = true;\n\tvar _didIteratorError4 = false;\n\tvar _iteratorError4 = undefined;\n\n\ttry {\n\t\tfor (var _iterator4 = _getIterator(string), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n\t\t\tvar character = _step4.value;\n\n\t\t\tif (character === symbol) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError4 = true;\n\t\t_iteratorError4 = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion4 && _iterator4.return) {\n\t\t\t\t_iterator4.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError4) {\n\t\t\t\tthrow _iteratorError4;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nexport function repeat(string, times) {\n\tif (times < 1) {\n\t\treturn '';\n\t}\n\n\tvar result = '';\n\n\twhile (times > 1) {\n\t\tif (times & 1) {\n\t\t\tresult += string;\n\t\t}\n\n\t\ttimes >>= 1;\n\t\tstring += string;\n\t}\n\n\treturn result + string;\n}\n//# sourceMappingURL=as you type.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/as you type.js"",""import parse, { is_viable_phone_number } from './parse';\nimport get_number_type, { sort_out_arguments } from './get number type';\n\nimport { get_types } from './metadata';\n\n// Checks if a given phone number is valid\n//\n// Example use cases:\n//\n// ```js\n// is_valid('8005553535', 'RU')\n// is_valid('8005553535', 'RU', metadata)\n// is_valid({ phone: '8005553535', country: 'RU' })\n// is_valid({ phone: '8005553535', country: 'RU' }, metadata)\n// is_valid('+78005553535')\n// is_valid('+78005553535', metadata)\n// ```\n//\nexport default function is_valid(first_argument, second_argument, third_argument) {\n\tvar _sort_out_arguments = sort_out_arguments(first_argument, second_argument, third_argument),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// Sanity check\n\n\n\tif (!metadata) {\n\t\tthrow new Error('Metadata not passed');\n\t}\n\n\tif (!input) {\n\t\treturn false;\n\t}\n\n\tif (!input.country) {\n\t\treturn false;\n\t}\n\n\tvar country_metadata = metadata.countries[input.country];\n\n\tif (get_types(country_metadata)) {\n\t\tif (!get_number_type(input, metadata)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n//# sourceMappingURL=validate.js.map\n\n\n// WEBPACK FOOTER //\n// ./es6/validate.js"",""module.exports = { \""default\"": require(\""core-js/library/fn/object/create\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/create.js\n// module id = 37\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/object/assign\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/assign.js\n// module id = 38\n// module chunks = 0"",""module.exports = { \""default\"": require(\""core-js/library/fn/object/define-property\""), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/define-property.js\n// module id = 39\n// module chunks = 0"",""\""use strict\"";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\""Cannot call a class as a function\"");\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/classCallCheck.js\n// module id = 40\n// module chunks = 0"",""\""use strict\"";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\""../core-js/object/define-property\"");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\""value\"" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/createClass.js\n// module id = 41\n// module chunks = 0"",""\""use strict\"";\n\nexports.__esModule = true;\n\nvar _assign = require(\""../core-js/object/assign\"");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/extends.js\n// module id = 42\n// module chunks = 0"",""require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/get-iterator.js\n// module id = 43\n// module chunks = 0"",""require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/assign.js\n// module id = 44\n// module chunks = 0"",""require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D){\n  return $Object.create(P, D);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/create.js\n// module id = 45\n// module chunks = 0"",""require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/define-property.js\n// module id = 46\n// module chunks = 0"",""module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_a-function.js\n// module id = 47\n// module chunks = 0"",""module.exports = function(){ /* empty */ };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_add-to-unscopables.js\n// module id = 48\n// module chunks = 0"",""// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_array-includes.js\n// module id = 49\n// module chunks = 0"",""// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_classof.js\n// module id = 50\n// module chunks = 0"",""// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_ctx.js\n// module id = 51\n// module chunks = 0"",""module.exports = require('./_global').document && document.documentElement;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_html.js\n// module id = 52\n// module chunks = 0"",""module.exports = !require('./_descriptors') && !require('./_fails')(function(){\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_ie8-dom-define.js\n// module id = 53\n// module chunks = 0"",""'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-create.js\n// module id = 54\n// module chunks = 0"",""module.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-step.js\n// module id = 55\n// module chunks = 0"",""module.exports = true;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_library.js\n// module id = 56\n// module chunks = 0"",""'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = require('./_object-keys')\n  , gOPS     = require('./_object-gops')\n  , pIE      = require('./_object-pie')\n  , toObject = require('./_to-object')\n  , IObject  = require('./_iobject')\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-assign.js\n// module id = 57\n// module chunks = 0"",""var dP       = require('./_object-dp')\n  , anObject = require('./_an-object')\n  , getKeys  = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\n  anObject(O);\n  var keys   = getKeys(Properties)\n    , length = keys.length\n    , i = 0\n    , P;\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-dps.js\n// module id = 58\n// module chunks = 0"",""exports.f = Object.getOwnPropertySymbols;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gops.js\n// module id = 59\n// module chunks = 0"",""// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has         = require('./_has')\n  , toObject    = require('./_to-object')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n  O = toObject(O);\n  if(has(O, IE_PROTO))return O[IE_PROTO];\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gpo.js\n// module id = 60\n// module chunks = 0"",""var has          = require('./_has')\n  , toIObject    = require('./_to-iobject')\n  , arrayIndexOf = require('./_array-includes')(false)\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function(object, names){\n  var O      = toIObject(object)\n    , i      = 0\n    , result = []\n    , key;\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while(names.length > i)if(has(O, key = names[i++])){\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-keys-internal.js\n// module id = 61\n// module chunks = 0"",""exports.f = {}.propertyIsEnumerable;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-pie.js\n// module id = 62\n// module chunks = 0"",""module.exports = require('./_hide');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_redefine.js\n// module id = 63\n// module chunks = 0"",""var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_string-at.js\n// module id = 64\n// module chunks = 0"",""var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-index.js\n// module id = 65\n// module chunks = 0"",""// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-length.js\n// module id = 66\n// module chunks = 0"",""// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-primitive.js\n// module id = 67\n// module chunks = 0"",""var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.get-iterator-method.js\n// module id = 68\n// module chunks = 0"",""var anObject = require('./_an-object')\n  , get      = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function(it){\n  var iterFn = get(it);\n  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.get-iterator.js\n// module id = 69\n// module chunks = 0"",""'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.array.iterator.js\n// module id = 70\n// module chunks = 0"",""// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.assign.js\n// module id = 71\n// module chunks = 0"",""var $export = require('./_export')\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', {create: require('./_object-create')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.create.js\n// module id = 72\n// module chunks = 0"",""var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.define-property.js\n// module id = 73\n// module chunks = 0"",""'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.string.iterator.js\n// module id = 74\n// module chunks = 0"",""require('./es6.array.iterator');\nvar global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , TO_STRING_TAG = require('./_wks')('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype;\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/web.dom.iterable.js\n// module id = 75\n// module chunks = 0"",""import metadata from './metadata.min.json'\n\nimport parseCustom from './es6/parse'\nimport getNumberTypeCustom from './es6/get number type'\nimport formatCustom from './es6/format'\nimport isValidNumberCustom from './es6/validate'\nimport asYouTypeCustom from './es6/as you type'\n\nimport { get_phone_code } from './es6/metadata'\n\nexport function parse()\n{\n\tvar parameters = Array.prototype.slice.call(arguments)\n\tparameters.push(metadata)\n\treturn parseCustom.apply(this, parameters)\n}\n\nexport function format()\n{\n\tvar parameters = Array.prototype.slice.call(arguments)\n\tparameters.push(metadata)\n\treturn formatCustom.apply(this, parameters)\n}\n\nexport function get_number_type()\n{\n\tvar parameters = Array.prototype.slice.call(arguments)\n\tparameters.push(metadata)\n\treturn getNumberTypeCustom.apply(this, parameters)\n}\n\n// camelCase alias\nexport function getNumberType()\n{\n\treturn is_valid_number.apply(this, arguments)\n}\n\nexport function is_valid_number()\n{\n\tvar parameters = Array.prototype.slice.call(arguments)\n\tparameters.push(metadata)\n\treturn isValidNumberCustom.apply(this, parameters)\n}\n\n// camelCase alias\nexport function isValidNumber()\n{\n\treturn is_valid_number.apply(this, arguments)\n}\n\nexport function as_you_type(country)\n{\n\tasYouTypeCustom.call(this, country, metadata)\n}\n\nas_you_type.prototype = Object.create(asYouTypeCustom.prototype, {})\nas_you_type.prototype.constructor = as_you_type\n\n// camelCase alias\n\nexport function asYouType(country)\n{\n\tasYouTypeCustom.call(this, country, metadata)\n}\n\nasYouType.prototype = Object.create(asYouTypeCustom.prototype, {})\nasYouType.prototype.constructor = asYouType\n\nexport { default as parseCustom }         from './es6/parse'\nexport { default as formatCustom }        from './es6/format'\nexport { default as isValidNumberCustom } from './es6/validate'\nexport { default as getNumberTypeCustom } from './es6/get number type'\n\nexport\n{\n\tdefault as asYouTypeCustom,\n\tDIGIT_PLACEHOLDER\n}\nfrom './es6/as you type'\n\nexport function getPhoneCode(country)\n{\n\treturn getPhoneCodeCustom(country, metadata)\n}\n\nexport function getPhoneCodeCustom(country, metadata)\n{\n\tif (!metadata.countries[country])\n\t{\n\t\tthrow new Error('Unknown country: \""' + country + '\""')\n\t}\n\n\treturn get_phone_code(metadata.countries[country])\n}\n\n\n// WEBPACK FOOTER //\n// ./index.es6.js""],""sourceRoot"":""""}"
3c5e67c403b483802995663963761e1b660dcdee,32083053,        //https://stackoverflow.com/questions/32083053/android-fragment-onattach-deprecated
966f45e60c7c08f5973e6778bfc198c27bdc1d93,10525050,""" https://stackoverflow.com/a/10525050/4413082"
43882855354b7b8e78ac3bd70e5bcb02d6dde3ab,4404172,https://stackoverflow.com/questions/4404172/how-to-tag-an-older-commit-in-git
503ae20adb4c0147a21638f99f98fb0967bee844,4580397,    // Taken from http://stackoverflow.com/questions/4580397/json-formatter-in-c
bb93200d839f5fbe828efbcfc106b0b5ec45245a,7422072,	// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
880c26179f6785822c8b8d9efa1b1bd71b71c45b,910873,            // http://stackoverflow.com/questions/910873/how-can-i-determine-if-a-file-is-binary-or-text-in-c
c486f8aa538183912612410bc7e46fc1862134a6,499126,// http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
a32f3f010b7dbceae3593a896e03d8ce466bece7,2732894,    #http://stackoverflow.com/questions/2732894/using-rubys-optionparser-to-parse-sub-commands
82e2109c8b3494e0e015a9be8b1146c10db409dd,394816,    // source: http://stackoverflow.com/questions/394816/how-to-get-parent-process-in-net-in-managed-way
d28adfe2e12edd662d3c9e9621dd53fbc259ba43,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
587c96fbb9efeea6a2735ef9a40e7eaa49ad5d2a,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
d6b1e6c759231b606f1cd938f2346fd382f52674,26603875,"{""version"":3,""sources"":[""webpack:///./node_modules/@swimlane/ngx-datatable/release/assets/icons.css"",""webpack:///./node_modules/@swimlane/ngx-datatable/release/index.css"",""webpack:///./node_modules/@swimlane/ngx-datatable/release/themes/material.css"",""webpack:///./src/styles.css"",""webpack:///./node_modules/@swimlane/ngx-datatable/release/assets/icons.css?3050"",""webpack:///./node_modules/@swimlane/ngx-datatable/release/index.css?d9fc"",""webpack:///./node_modules/@swimlane/ngx-datatable/release/themes/material.css?e28b"",""webpack:///./node_modules/style-loader/lib/addStyles.js"",""webpack:///./node_modules/style-loader/lib/urls.js"",""webpack:///./src/styles.css?b364""],""names"":[],""mappings"":"";;;;;;;;;AAAA,mBAAmB,QAAS,sBAAsB,gBAAgB,gCAAgC,8BAA8B,yNAAyN,wBAAwB,uBAAuB,KAAK,wBAAwB,2CAA2C,6BAA6B,kCAAkC,mCAAmC,oCAAoC,oCAAoC,gBAAgB,mBAAmB,wCAAwC,uCAAuC,GAAG,gFAAgF,2CAA2C,kCAAkC,mCAAmC,oCAAoC,oCAAoC,gBAAgB,mBAAmB,wCAAwC,uCAAuC,GAAG,mCAAmC,sBAAsB,GAAG,qCAAqC,sBAAsB,GAAG,mCAAmC,sBAAsB,GAAG,kCAAkC,sBAAsB,GAAG,+BAA+B,sBAAsB,GAAG,iCAAiC,sBAAsB,GAAG,iCAAiC,sBAAsB,GAAG,iCAAiC,sBAAsB,GAAG,qCAAqC,sBAAsB,GAAG,mCAAmC,sBAAsB,GAAG,gCAAgC,sBAAsB,GAAG,gCAAgC,sBAAsB,GAAG,iCAAiC,sBAAsB,GAAG,kCAAkC,sBAAsB,GAAG,iCAAiC,sBAAsB,GAAG,iCAAiC,sBAAsB,GAAG,+CAA+C,i4H;;;;;;;;;;;ACAvkE,mBAAmB,QAAS,6JAA6J,mBAAmB,qBAAqB,4BAA4B,uBAAuB,4CAA4C,qVAAqV,2BAA2B,+BAA+B,EAAE,qEAAqE,6BAA6B,EAAE,kDAAkD,uBAAuB,EAAE,qFAAqF,yBAAyB,EAAE,8CAA8C,uBAAuB,wCAAwC,EAAE,yEAAyE,0BAA0B,EAAE,gGAAgG,4BAA4B,yBAAyB,gCAAgC,EAAE,8CAA8C,0BAA0B,EAAE,kEAAkE,4BAA4B,EAAE,uFAAuF,2BAA2B,8BAA8B,kCAAkC,EAAE,6FAA6F,2BAA2B,8BAA8B,kCAAkC,EAAE,0HAA0H,oBAAoB,0BAA0B,wBAAwB,qBAAqB,EAAE,iFAAiF,yBAAyB,0BAA0B,4BAA4B,yBAAyB,EAAE,+FAA+F,sBAAsB,EAAE,8EAA8E,iBAAiB,EAAE,+JAA+J,yBAAyB,EAAE,oCAAoC,qBAAqB,uBAAuB,EAAE,4DAA4D,6BAA6B,qCAAqC,EAAE,2DAA2D,2BAA2B,8BAA8B,EAAE,mGAAmG,0BAA0B,EAAE,oGAAoG,uBAAuB,EAAE,qEAAqE,4BAA4B,iCAAiC,gCAAgC,0BAA0B,EAAE,iKAAiK,gCAAgC,6BAA6B,mBAAmB,iBAAiB,oBAAoB,qBAAqB,yBAAyB,6BAA6B,EAAE,0EAA0E,4BAA4B,EAAE,2FAA2F,8BAA8B,EAAE,+FAA+F,8BAA8B,EAAE,yEAAyE,6BAA6B,iBAAiB,oBAAoB,EAAE,sFAAsF,qBAAqB,EAAE,uFAAuF,oBAAoB,EAAE,gGAAgG,0BAA0B,EAAE,kCAAkC,yBAAyB,kBAAkB,qBAAqB,EAAE,oDAAoD,8BAA8B,EAAE,wDAAwD,2BAA2B,EAAE,yDAAyD,sBAAsB,+BAA+B,EAAE,sDAAsD,sBAAsB,EAAE,4DAA4D,wBAAwB,EAAE,oCAAoC,qBAAqB,kBAAkB,EAAE,4DAA4D,sBAAsB,4BAA4B,oBAAoB,EAAE,gEAAgE,sBAAsB,EAAE,qEAAqE,sBAAsB,EAAE,gDAAgD,sBAAsB,EAAE,qDAAqD,sBAAsB,0BAA0B,EAAE,gIAAgI,qBAAqB,oBAAoB,gCAAgC,2BAA2B,EAAE,8HAA8H,wBAAwB,EAAE,iEAAiE,0BAA0B,gCAAgC,EAAE,0EAA0E,8BAA8B,EAAE,+EAA+E,q7E;;;;;;;;;;;ACA32M,mBAAmB,QAAS,4BAA4B,qBAAqB,0HAA0H,8KAA8K,wDAAwD,uBAAuB,EAAE,kfAAkf,gCAAgC,kBAAkB,EAAE,shBAAshB,gCAAgC,kBAAkB,EAAE,shBAAshB,gCAAgC,kBAAkB,EAAE,4KAA4K,6BAA6B,sCAAsC,+BAA+B,yCAAyC,EAAE,4KAA4K,6BAA6B,EAAE,kKAAkK,6BAA6B,sCAAsC,+BAA+B,yCAAyC,EAAE,kKAAkK,6BAA6B,EAAE,oKAAoK,gCAAgC,kBAAkB,EAAE,gLAAgL,gCAAgC,kBAAkB,EAAE,gLAAgL,gCAAgC,kBAAkB,EAAE,wCAAwC,mBAAmB,uBAAuB,4BAA4B,0BAA0B,oBAAoB,EAAE,0CAA0C,uBAAuB,4BAA4B,0BAA0B,oBAAoB,EAAE,mIAAmI,6BAA6B,kCAAkC,kCAAkC,2CAA2C,qHAAqH,EAAE,qIAAqI,+BAA+B,6BAA6B,kCAAkC,2CAA2C,qHAAqH,EAAE,+CAA+C,mDAAmD,EAAE,sEAAsE,yBAAyB,8BAA8B,yBAAyB,mCAAmC,+BAA+B,wBAAwB,yBAAyB,EAAE,qGAAqG,6BAA6B,EAAE,kGAAkG,uEAAuE,+DAA+D,6FAA6F,sBAAsB,sCAAsC,sCAAsC,EAAE,wFAAwF,yBAAyB,6BAA6B,mBAAmB,oBAAoB,kCAAkC,uBAAuB,sBAAsB,2BAA2B,8BAA8B,qBAAqB,+BAA+B,+BAA+B,sCAAsC,sCAAsC,wBAAwB,+BAA+B,EAAE,8FAA8F,6BAA6B,EAAE,8DAA8D,qCAAqC,EAAE,mEAAmE,0BAA0B,oBAAoB,EAAE,qEAAqE,0BAA0B,uCAAuC,oCAAoC,EAAE,sFAAsF,uBAAuB,4BAA4B,0BAA0B,oBAAoB,iCAAiC,kCAAkC,sBAAsB,uBAAuB,EAAE,4FAA4F,uBAAuB,4BAA4B,0BAA0B,oBAAoB,iCAAiC,kCAAkC,sBAAsB,uBAAuB,EAAE,8DAA8D,qBAAqB,yBAAyB,kBAAkB,kBAAkB,iBAAiB,gBAAgB,yBAAyB,EAAE,yEAAyE,uBAAuB,2BAA2B,yBAAyB,oBAAoB,oBAAoB,uDAAuD,+CAA+C,kCAAkC,EAAE,8EAA8E,qCAAqC,qFAAqF,6EAA6E,mDAAmD,2CAA2C,yEAAyE,oCAAoC,6BAA6B,kBAAkB,iBAAiB,oBAAoB,sBAAsB,sBAAsB,EAAE,+CAA+C,gDAAgD,sBAAsB,uBAAuB,iCAAiC,EAAE,2DAA2D,0BAA0B,qBAAqB,0BAA0B,EAAE,gEAAgE,uBAAuB,EAAE,mEAAmE,iCAAiC,EAAE,8EAA8E,kDAAkD,qDAAqD,EAAE,4EAA4E,uDAAuD,8BAA8B,EAAE,kEAAkE,uBAAuB,0BAA0B,4BAA4B,yBAAyB,6BAA6B,0BAA0B,6BAA6B,8BAA8B,qCAAqC,gCAAgC,iCAAiC,EAAE,wEAAwE,uCAAuC,uDAAuD,EAAE,8VAA8V,0BAA0B,4BAA4B,yBAAyB,EAAE,wEAAwE,6BAA6B,EAAE,8EAA8E,+BAA+B,EAAE,6FAA6F,0BAA0B,EAAE,oDAAoD,uBAAuB,cAAc,oBAAoB,2BAA2B,0BAA0B,2BAA2B,eAAe,EAAE,gDAAgD,yBAAyB,yBAAyB,sBAAsB,oBAAoB,EAAE,uDAAuD,yCAAyC,sBAAsB,2BAA2B,gBAAgB,mBAAmB,oBAAoB,qBAAqB,kCAAkC,EAAE,+DAA+D,0CAA0C,kCAAkC,sBAAsB,8BAA8B,+BAA+B,iCAAiC,EAAE,sDAAsD,sBAAsB,2BAA2B,eAAe,gBAAgB,oBAAoB,qBAAqB,yBAAyB,wBAAwB,EAAE,sEAAsE,QAAQ,iBAAiB,uDAAuD,uDAAuD,EAAE,UAAU,iBAAiB,sDAAsD,sDAAsD,EAAE,EAAE,sBAAsB,QAAQ,iBAAiB,uDAAuD,uDAAuD,EAAE,UAAU,iBAAiB,sDAAsD,sDAAsD,EAAE,EAAE,+CAA+C,q4nB;;;;;;;;;;;ACAjzY,mBAAmB,QAAS,sJAAsJ,4EAA4E,yEAAyE,uBAAuB,kFAAkF,oBAAoB,iGAAiG,oBAAoB,iGAAiG,oBAAoB,iGAAiG,oBAAoB,kGAAkG,oBAAoB,kGAAkG,oBAAoB,mGAAmG,oBAAoB,uGAAuG,oBAAoB,uGAAuG,oBAAoB,uGAAuG,qBAAqB,wGAAwG,qBAAqB,wGAAwG,qBAAqB,wGAAwG,qBAAqB,wGAAwG,qBAAqB,wGAAwG,qBAAqB,wGAAwG,qBAAqB,yGAAyG,qBAAqB,yGAAyG,qBAAqB,yGAAyG,qBAAqB,yGAAyG,qBAAqB,0GAA0G,qBAAqB,0GAA0G,qBAAqB,0GAA0G,qBAAqB,0GAA0G,qBAAqB,0GAA0G,qBAAqB,gBAAgB,eAAe,iDAAiD,sCAAsC,cAAc,sCAAsC,eAAe,2CAA2C,wDAAwD,gBAAgB,wCAAwC,wDAAwD,gBAAgB,+CAA+C,wDAAwD,gBAAgB,+CAA+C,wDAAwD,gBAAgB,6BAA6B,2DAA2D,gBAAgB,6BAA6B,0DAA0D,gBAAgB,+BAA+B,wDAAwD,wCAAwC,wDAAwD,8CAA8C,gBAAgB,0BAA0B,wDAAwD,gDAAgD,0DAA0D,gBAAgB,sBAAsB,gDAAgD,wDAAwD,gBAAgB,sBAAsB,gDAAgD,wDAAwD,gBAAgB,uBAAuB,gDAAgD,wDAAwD,gBAAgB,8BAA8B,iDAAiD,eAAe,gBAAgB,8GAA8G,iDAAiD,eAAe,gBAAgB,qBAAqB,iDAAiD,YAAY,iDAAiD,kBAAkB,eAAe,gBAAgB,wEAAwE,eAAe,gBAAgB,iDAAiD,2CAA2C,iBAAiB,YAAY,eAAe,iBAAiB,iFAAiF,eAAe,aAAa,iDAAiD,mBAAmB,eAAe,gBAAgB,6BAA6B,eAAe,gBAAgB,iDAAiD,qBAAqB,eAAe,uDAAuD,eAAe,gBAAgB,gCAAgC,eAAe,gBAAgB,oBAAoB,wDAAwD,8BAA8B,iDAAiD,eAAe,gBAAgB,+BAA+B,wDAAwD,kBAAkB,kBAAkB,gBAAgB,kBAAkB,iDAAiD,0BAA0B,yBAAyB,oEAAoE,eAAe,kBAAkB,kFAAkF,aAAa,YAAY,sGAAsG,eAAe,kBAAkB,wBAAwB,eAAe,sCAAsC,oLAAoL,oDAAoD,4CAA4C,iBAAiB,2HAA2H,oDAAoD,4CAA4C,iBAAiB,gCAAgC,cAAc,qBAAqB,wBAAwB,cAAc,4BAA4B,iBAAiB,oCAAoC,cAAc,oBAAoB,2BAA2B,4DAA4D,sBAAsB,0DAA0D,kBAAkB,sPAAsP,0FAA0F,kFAAkF,gDAAgD,iBAAiB,mKAAmK,4FAA4F,oFAAoF,gDAAgD,iBAAiB,4JAA4J,4FAA4F,oFAAoF,gDAAgD,iBAAiB,0DAA0D,cAAc,8DAA8D,cAAc,sEAAsE,oBAAoB,2BAA2B,wDAAwD,wBAAwB,wDAAwD,cAAc,iBAAiB,kPAAkP,mDAAmD,2CAA2C,iBAAiB,0JAA0J,mDAAmD,2CAA2C,iBAAiB,2DAA2D,oBAAoB,2DAA2D,cAAc,kBAAkB,wPAAwP,oDAAoD,4CAA4C,iBAAiB,6JAA6J,oDAAoD,4CAA4C,iBAAiB,8CAA8C,eAAe,kEAAkE,mBAAmB,gBAAgB,uBAAuB,cAAc,sBAAsB,gGAAgG,eAAe,0BAA0B,oBAAoB,iBAAiB,iDAAiD,eAAe,gBAAgB,8DAA8D,iDAAiD,eAAe,oBAAoB,iDAAiD,cAAc,iDAAiD,sBAAsB,eAAe,4BAA4B,wDAAwD,+BAA+B,iDAAiD,eAAe,gBAAgB,gDAAgD,iDAAiD,kBAAkB,eAAe,gBAAgB,2BAA2B,eAAe,gBAAgB,iBAAiB,iDAAiD,+BAA+B,iDAAiD,eAAe,gBAAgB,+GAA+G,wDAAwD,SAAS,eAAe,iDAAiD,eAAe,gBAAgB,mBAAmB,uBAAuB,eAAe,gBAAgB,mBAAmB,iBAAiB,iDAAiD,mBAAmB,iDAAiD,2FAA2F,eAAe,yHAAyH,mBAAmB,gBAAgB,uBAAuB,cAAc,sBAAsB,sKAAsK,eAAe,iGAAiG,eAAe,+HAA+H,mBAAmB,gBAAgB,uBAAuB,cAAc,sBAAsB,4KAA4K,eAAe,2FAA2F,iDAAiD,eAAe,gBAAgB,gHAAgH,eAAe,8IAA8I,mBAAmB,gBAAgB,uBAAuB,cAAc,sBAAsB,2LAA2L,eAAe,sHAAsH,eAAe,oJAAoJ,mBAAmB,gBAAgB,uBAAuB,cAAc,sBAAsB,iMAAiM,eAAe,gHAAgH,iDAAiD,eAAe,gBAAgB,cAAc,iDAAiD,eAAe,sBAAsB,wDAAwD,uBAAuB,iDAAiD,eAAe,8BAA8B,cAAc,oBAAoB,kBAAkB,gBAAgB,YAAY,iDAAiD,iBAAiB,gBAAgB,eAAe,cAAc,gBAAgB,mCAAmC,iBAAiB,sBAAsB,kBAAkB,kBAAkB,oBAAoB,+DAA+D,uDAAuD,mGAAmG,2BAA2B,mBAAmB,+CAA+C,oBAAoB,cAAc,uBAAuB,SAAS,mBAAmB,WAAW,YAAY,gBAAgB,UAAU,kBAAkB,UAAU,UAAU,wBAAwB,qBAAqB,qDAAqD,oBAAoB,MAAM,OAAO,YAAY,WAAW,yBAAyB,eAAe,aAAa,+BAA+B,aAAa,8BAA8B,aAAa,kBAAkB,aAAa,oBAAoB,kBAAkB,oBAAoB,sBAAsB,aAAa,aAAa,eAAe,gBAAgB,wBAAwB,kBAAkB,MAAM,SAAS,OAAO,QAAQ,aAAa,oBAAoB,wCAAwC,kDAAkD,UAAU,qDAAqD,UAAU,+CAA+C,mDAAmD,YAAY,6BAA6B,4BAA4B,mGAAmG,UAAU,+CAA+C,kBAAkB,aAAa,aAAa,sBAAsB,cAAc,eAAe,0BAA0B,eAAe,WAAW,kBAAkB,mDAAmD,MAAM,2CAA2C,MAAM,iDAAiD,MAAM,yCAAyC,MAAM,sDAAsD,qDAAqD,6CAA6C,4DAA4D,mDAAmD,2CAA2C,iCAAiC,YAAY,2CAA2C,sBAAsB,0BAA0B,wBAAwB,iCAAiC,sBAAsB,sCAAsC,cAAc,WAAW,0FAA0F,iCAAiC,+EAA+E,iCAAiC,yBAAyB,iCAAiC,WAAW,kCAAkC,2BAA2B,kEAAkE,cAAc,iEAAiE,cAAc,+DAA+D,cAAc,sBAAsB,2BAA2B,6CAA6C,2BAA2B,uBAAuB,2BAA2B,8BAA8B,cAAc,0JAA0J,mBAAmB,4FAA4F,mBAAmB,sFAAsF,mBAAmB,4HAA4H,mBAAmB,sBAAsB,yBAAyB,WAAW,2BAA2B,aAAa,0BAA0B,mBAAmB,WAAW,gFAAgF,mBAAmB,0GAA0G,WAAW,qBAAqB,WAAW,mBAAmB,uCAAuC,mBAAmB,sBAAsB,qCAAqC,WAAW,mBAAmB,aAAa,kBAAkB,uCAAuC,aAAa,qBAAqB,kBAAkB,kBAAkB,qBAAqB,kBAAkB,6CAA6C,qCAAqC,wEAAwE,4BAA4B,oBAAoB,gBAAgB,mBAAmB,uBAAuB,oBAAoB,sCAAsC,uBAAuB,eAAe,sCAAsC,WAAW,YAAY,iBAAiB,+CAA+C,oCAAoC,kBAAkB,iBAAiB,sDAAsD,SAAS,sDAAsD,YAAY,uDAAuD,WAAW,iEAAiE,UAAU,YAAY,sDAAsD,YAAY,gEAAgE,WAAW,WAAW,yEAAyE,UAAU,mFAAmF,UAAU,WAAW,wEAAwE,WAAW,kFAAkF,WAAW,UAAU,uCAAuC,WAAW,YAAY,iBAAiB,+CAA+C,qCAAqC,kBAAkB,iBAAiB,uDAAuD,UAAU,uDAAuD,aAAa,wDAAwD,WAAW,kEAAkE,UAAU,YAAY,uDAAuD,YAAY,iEAAiE,WAAW,WAAW,0EAA0E,WAAW,oFAAoF,UAAU,YAAY,yEAAyE,YAAY,mFAAmF,WAAW,WAAW,sCAAsC,WAAW,YAAY,iBAAiB,+CAA+C,oCAAoC,kBAAkB,iBAAiB,sDAAsD,UAAU,sDAAsD,aAAa,uDAAuD,WAAW,iEAAiE,UAAU,YAAY,sDAAsD,YAAY,gEAAgE,WAAW,WAAW,yEAAyE,WAAW,mFAAmF,UAAU,YAAY,wEAAwE,YAAY,kFAAkF,WAAW,WAAW,8BAA8B,mBAAmB,WAAW,mDAAmD,cAAc,eAAe,uFAAuF,cAAc,oFAAoF,cAAc,8EAA8E,cAAc,4bAA4b,2BAA2B,qKAAqK,sCAAsC,kKAAkK,uCAAuC,4JAA4J,qCAAqC,+JAA+J,6BAA6B,mJAAmJ,qCAAqC,gJAAgJ,sCAAsC,0IAA0I,oCAAoC,6DAA6D,WAAW,yBAAyB,6GAA6G,WAAW,yGAAyG,sBAAsB,iGAAiG,WAAW,sjBAAsjB,2BAA2B,6GAA6G,yBAAyB,yGAAyG,yBAAyB,iGAAiG,yBAAyB,sjBAAsjB,uCAAuC,6LAA6L,sCAAsC,yLAAyL,gCAAgC,iLAAiL,sCAAsC,mDAAmD,qCAAqC,kDAAkD,sCAAsC,gDAAgD,oCAAoC,qBAAqB,2BAA2B,sDAAsD,uCAAuC,6BAA6B,yBAAyB,2BAA2B,8BAA8B,sBAAsB,2BAA2B,wDAAwD,yBAAyB,YAAY,mBAAmB,WAAW,qBAAqB,2BAA2B,sBAAsB,kCAAkC,0BAA0B,aAAa,+BAA+B,yBAAyB,uDAAuD,6BAA6B,uBAAuB,0BAA0B,yBAAyB,8HAA8H,yBAAyB,4HAA4H,yBAAyB,wHAAwH,yBAAyB,kJAAkJ,yBAAyB,wEAAwE,qBAAqB,6CAA6C,cAAc,+CAA+C,uBAAuB,YAAY,+CAA+C,yBAAyB,gBAAgB,iGAAiG,sCAAsC,gGAAgG,uCAAuC,8FAA8F,qCAAqC,8BAA8B,yBAAyB,WAAW,+CAA+C,WAAW,WAAW,qDAAqD,YAAY,4DAA4D,yBAAyB,WAAW,6EAA6E,WAAW,WAAW,mFAAmF,YAAY,yDAAyD,yBAAyB,WAAW,0EAA0E,WAAW,WAAW,gFAAgF,YAAY,2DAA2D,yBAAyB,sBAAsB,4EAA4E,sBAAsB,WAAW,kFAAkF,YAAY,aAAa,mBAAmB,yJAAyJ,mBAAmB,0FAA0F,0CAA0C,mBAAmB,2BAA2B,6BAA6B,WAAW,sBAAsB,sBAAsB,iIAAiI,WAAW,6BAA6B,2BAA2B,4CAA4C,iCAAiC,2BAA2B,2BAA2B,kCAAkC,WAAW,yBAAyB,+FAA+F,2BAA2B,mWAAmW,uCAAuC,4DAA4D,kCAAkC,wFAAwF,kCAAkC,8BAA8B,yBAAyB,WAAW,0DAA0D,qCAAqC,sDAAsD,gCAAgC,0BAA0B,yBAAyB,WAAW,iEAAiE,yBAAyB,sBAAsB,6FAA6F,sCAAsC,yFAAyF,2CAA2C,+DAA+D,yBAAyB,WAAW,2FAA2F,oCAAoC,uFAAuF,gCAAgC,gCAAgC,cAAc,2CAA2C,cAAc,yCAAyC,cAAc,wBAAwB,mBAAmB,WAAW,eAAe,uCAAuC,wBAAwB,yCAAyC,uBAAuB,mBAAmB,WAAW,kBAAkB,uCAAuC,2UAA2U,iCAAiC,sBAAsB,oGAAoG,oBAAoB,oCAAoC,WAAW,0EAA0E,2BAA2B,kDAAkD,2BAA2B,4KAA4K,cAAc,wBAAwB,2BAA2B,YAAY,2BAA2B,oDAAoD,cAAc,+DAA+D,cAAc,6DAA6D,cAAc,+CAA+C,cAAc,yBAAyB,sBAAsB,qDAAqD,yBAAyB,gEAAgE,yBAAyB,8DAA8D,yBAAyB,+DAA+D,cAAc,uKAAuK,cAAc,yIAAyI,yBAAyB,aAAa,cAAc,0DAA0D,2BAA2B,8CAA8C,2BAA2B,8DAA8D,sCAAsC,sFAAsF,yGAAyG,yBAAyB,2BAA2B,gEAAgE,sCAAsC,wFAAwF,yGAAyG,yBAAyB,2BAA2B,uDAAuD,sCAAsC,+EAA+E,uCAAuC,oEAAoE,sCAAsC,gFAAgF,2BAA2B,4FAA4F,6BAA6B,6DAA6D,2BAA2B,mEAAmE,WAAW,+EAA+E,cAAc,0FAA0F,cAAc,wFAAwF,cAAc,iHAAiH,cAAc,mFAAmF,2BAA2B,qFAAqF,4BAA4B,wBAAwB,cAAc,uBAAuB,cAAc,qBAAqB,cAAc,8BAA8B,2BAA2B,qBAAqB,oBAAoB,gDAAgD,2BAA2B,2CAA2C,2BAA2B,4CAA4C,2BAA2B,kCAAkC,2BAA2B,uCAAuC,2BAA2B,gDAAgD,2BAA2B,2CAA2C,2BAA2B,iCAAiC,oBAAoB,0EAA0E,oBAAoB,2FAA2F,WAAW,iGAAiG,WAAW,2FAA2F,2BAA2B,0BAA0B,sBAAsB,kJAAkJ,iCAAiC,kBAAkB,mBAAmB,iBAAiB,eAAe,WAAW,2DAA2D,2BAA2B,8EAA8E,WAAW,yLAAyL,iCAAiC,iBAAiB,mBAAmB,8DAA8D,2BAA2B,oDAAoD,0BAA0B,4BAA4B,2CAA2C,0BAA0B,yMAAyM,kCAAkC,+BAA+B,aAAa,2BAA2B,yBAAyB,gCAAgC,yBAAyB,4DAA4D,aAAa,wDAAwD,yBAAyB,6DAA6D,yBAAyB,0DAA0D,aAAa,sDAAsD,yBAAyB,2DAA2D,yBAAyB,mDAAmD,eAAe,yEAAyE,eAAe,qEAAqE,eAAe,0BAA0B,kCAAkC,0EAA0E,qBAAqB,wDAAwD,yBAAyB,sEAAsE,sCAAsC,yEAAyE,qBAAqB,uDAAuD,yBAAyB,qEAAqE,uCAAuC,uEAAuE,qBAAqB,qDAAqD,yBAAyB,mEAAmE,qCAAqC,8IAA8I,kCAAkC,0IAA0I,sCAAsC,gEAAgE,2BAA2B,uDAAuD,mBAAmB,oBAAoB,WAAW,0BAA0B,2BAA2B,yCAAyC,2BAA2B,oBAAoB,2BAA2B,uEAAuE,iCAAiC,4DAA4D,cAAc,2DAA2D,cAAc,yDAAyD,cAAc,mEAAmE,cAAc,oEAAoE,2BAA2B,wBAAwB,yBAAyB,WAAW,cAAc,yBAAyB,WAAW,8BAA8B,yBAAyB,wCAAwC,sCAAsC,2EAA2E,yBAAyB,yEAAyE,sCAAsC,0DAA0D,uCAAuC,wCAAwC,uCAAuC,uFAAuF,yBAAyB,qFAAqF,sCAAsC,sEAAsE,uCAAuC,oDAAoD,uCAAuC,oFAAoF,yBAAyB,kFAAkF,sCAAsC,mEAAmE,uCAAuC,iDAAiD,uCAAuC,wCAAwC,yBAAyB,sCAAsC,uCAAuC,0BAA0B,yBAAyB,wBAAwB,sCAAsC,+BAA+B,sCAAsC,0GAA0G,yBAAyB,4CAA4C,WAAW,uGAAuG,yBAAyB,2CAA2C,sBAAsB,iGAAiG,yBAAyB,yCAAyC,WAAW,yBAAyB,sCAAsC,2FAA2F,sCAAsC,uIAAuI,sCAAsC,0DAA0D,sCAAsC,+CAA+C,uCAAuC,sJAAsJ,sBAAsB,8KAA8K,sCAAsC,+EAA+E,kCAAkC,6BAA6B,8KAA8K,kCAAkC,sNAAsN,kCAAkC,mDAAmD,kCAAkC,2CAA2C,6HAA6H,kIAAkI,yCAAyC,8HAA8H,oGAAoG,uCAAuC,uEAAuE,2BAA2B,kCAAkC,yBAAyB,WAAW,8CAA8C,sCAAsC,WAAW,yDAAyD,WAAW,gDAAgD,yBAAyB,qCAAqC,wCAAwC,+BAA+B,uCAAuC,yBAAyB,cAAc,mCAAmC,8CAA8C,iGAAiG,2CAA2C,mBAAmB,+BAA+B,WAAW,iEAAiE,2BAA2B,qCAAqC,kBAAkB,yEAAyE,kCAAkC,kGAAkG,mBAAmB,gBAAgB,krBAAkrB,qCAAqC,oFAAoF,yBAAyB,kIAAkI,sBAAsB,0qBAA0qB,sCAAsC,kFAAkF,yBAAyB,8HAA8H,iCAAiC,0pBAA0pB,sCAAsC,8EAA8E,yBAAyB,sHAAsH,sBAAsB,0wBAA0wB,qCAAqC,4NAA4N,yBAAyB,wNAAwN,WAAW,4RAA4R,2BAA2B,sJAAsJ,kBAAkB,8NAA8N,kCAAkC,wHAAwH,uCAAuC,kwBAAkwB,sCAAsC,wNAAwN,yBAAyB,oNAAoN,sBAAsB,wRAAwR,qBAAqB,oJAAoJ,6BAA6B,4NAA4N,4BAA4B,sHAAsH,iCAAiC,kvBAAkvB,sCAAsC,gNAAgN,yBAAyB,4MAA4M,WAAW,gRAAgR,2BAA2B,gJAAgJ,kBAAkB,wNAAwN,kCAAkC,kHAAkH,uCAAuC,eAAe,mBAAmB,WAAW,2BAA2B,mBAAmB,WAAW,0BAA0B,mBAAmB,sBAAsB,wBAAwB,mBAAmB,WAAW,8HAA8H,8BAA8B,8MAA8M,cAAc,kCAAkC,yBAAyB,eAAe,6BAA6B,YAAY,mBAAmB,iBAAiB,WAAW,2BAA2B,mBAAmB,sBAAsB,8BAA8B,cAAc,QAAQ,0BAA0B,uBAAuB,6BAA6B,kBAAkB,MAAM,QAAQ,gBAAgB,sBAAsB,uBAAuB,sCAAsC,yBAAyB,uBAAuB,sBAAsB,iBAAiB,6BAA6B,gBAAgB,cAAc,aAAa,YAAY,iCAAiC,MAAM,iBAAiB,qBAAqB,GAAG,uBAAuB,oBAAoB,oDAAoD,GAAG,oBAAoB,kBAAkB,GAAG,0BAA0B,kBAAkB,GAAG,uEAAuE,4BAA4B,GAAG,kGAAkG,oBAAoB,qBAAqB,GAAG,kGAAkG,iBAAiB,GAAG,sCAAsC,2BAA2B,gBAAgB,GAAG,qCAAqC,kBAAkB,GAAG,oCAAoC,2BAA2B,GAAG,2BAA2B,6CAA6C,gCAAgC,GAAG,uJAAuJ,mCAAmC,+CAA+C,GAAG,iEAAiE,0CAA0C,0CAA0C,GAAG,qDAAqD,0CAA0C,0CAA0C,GAAG,4BAA4B,QAAQ,sCAAsC,EAAE,SAAS,qCAAqC,EAAE,UAAU,sCAAsC,EAAE,GAAG,oBAAoB,QAAQ,sCAAsC,EAAE,SAAS,qCAAqC,EAAE,UAAU,sCAAsC,EAAE,GAAG,sCAAsC,8BAA8B,GAAG,qCAAqC,2BAA2B,GAAG,mBAAmB,oBAAoB,GAAG,sCAAsC,mBAAmB,uBAAuB,GAAG,6BAA6B,qCAAqC,8BAA8B,qCAAqC,GAAG,oCAAoC,8BAA8B,GAAG,oFAAoF,gBAAgB,GAAG,2DAA2D,8BAA8B,8BAA8B,8BAA8B,8BAA8B,GAAG,gGAAgG,mBAAmB,GAAG,6BAA6B,uBAAuB,aAAa,cAAc,eAAe,gBAAgB,8BAA8B,iBAAiB,iBAAiB,GAAG,qBAAqB,kCAAkC,qBAAqB,0CAA0C,6BAA6B,uBAAuB,aAAa,gBAAgB,GAAG,wCAAwC,uBAAuB,qBAAqB,kBAAkB,GAAG,iCAAiC,8BAA8B,GAAG,0CAA0C,6CAA6C,eAAe,sBAAsB,GAAG,kBAAkB,wBAAwB,qBAAqB,iBAAiB,iBAAiB,qBAAqB,mBAAmB,uBAAuB,0BAA0B,GAAG,0BAA0B,qBAAqB,kCAAkC,sBAAsB,iBAAiB,oBAAoB,wBAAwB,2BAA2B,8BAA8B,sBAAsB,GAAG,sDAAsD,qtrG;;;;;;;;;;;;ACC/ogE,cAAc,mBAAO,CAAC,iWAA2J;;AAEjL,4CAA4C,QAAS;;AAErD;AACA;;;;AAIA,eAAe;;AAEf;AACA;;AAEA,aAAa,mBAAO,CAAC,+FAA4C;;AAEjE;;AAEA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;AClBf,cAAc,mBAAO,CAAC,oVAAqJ;;AAE3K,4CAA4C,QAAS;;AAErD;AACA;;;;AAIA,eAAe;;AAEf;AACA;;AAEA,aAAa,mBAAO,CAAC,4FAAyC;;AAE9D;;AAEA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;AClBf,cAAc,mBAAO,CAAC,uWAA8J;;AAEpL,4CAA4C,QAAS;;AAErD;AACA;;;;AAIA,eAAe;;AAEf;AACA;;AAEA,aAAa,mBAAO,CAAC,+FAA4C;;AAEjE;;AAEA,GAAG,KAAU,EAAE,E;;;;;;;;;;;ACnBf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA,cAAc,mBAAO,CAAC,uDAAQ;;AAE9B;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA,mBAAmB,2BAA2B;;AAE9C;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAmB;AACnC;AACA;;AAEA;AACA;;AAEA,iBAAiB,2BAA2B;AAC5C;AACA;;AAEA,QAAQ,uBAAuB;AAC/B;AACA;AACA,GAAG;AACH;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,kDAAkD,sBAAsB;AACxE;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA,KAAK,KAAwC,EAAE,EAE7C;;AAEF,QAAQ,sBAAiB;AACzB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD;;AAEA,6BAA6B,mBAAmB;;AAEhD;;AAEA;;AAEA;AACA;;;;;;;;;;;;;AC9YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,WAAW,EAAE;AACrD,wCAAwC,WAAW,EAAE;;AAErD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,sCAAsC;AACtC,GAAG;AACH;AACA,8DAA8D;AAC9D;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;;;;;;;;;;;;ACvFA,cAAc,mBAAO,CAAC,2TAAoK;;AAE1L,4CAA4C,QAAS;;AAErD;AACA;;;;AAIA,eAAe;;AAEf;AACA;;AAEA,aAAa,mBAAO,CAAC,mGAAgD;;AAErE;;AAEA,GAAG,KAAU,EAAE,E"",""file"":""styles.js"",""sourcesContent"":[""module.exports = [[module.id, \""@charset \\\""UTF-8\\\"";\\n\\n@font-face {\\n  font-family: \\\""data-table\\\"";\\n  src:url('data-table.eot');\\n  src:url('data-table.eot?#iefix') format(\\\""embedded-opentype\\\""),\\n    url('data-table.woff') format(\\\""woff\\\""),\\n    url('data-table.ttf') format(\\\""truetype\\\""),\\n    url('data-table.svg#data-table') format(\\\""svg\\\"");\\n  font-weight: normal;\\n  font-style: normal;\\n\\n}\\n\\n[data-icon]:before {\\n  font-family: \\\""data-table\\\"" !important;\\n  content: attr(data-icon);\\n  font-style: normal !important;\\n  font-weight: normal !important;\\n  font-variant: normal !important;\\n  text-transform: none !important;\\n  speak: none;\\n  line-height: 1;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n\\n[class^=\\\""datatable-icon-\\\""]:before,\\n[class*=\\\"" datatable-icon-\\\""]:before {\\n  font-family: \\\""data-table\\\"" !important;\\n  font-style: normal !important;\\n  font-weight: normal !important;\\n  font-variant: normal !important;\\n  text-transform: none !important;\\n  speak: none;\\n  line-height: 1;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.datatable-icon-filter:before {\\n  content: \\\""\\\\62\\\"";\\n}\\n\\n.datatable-icon-collapse:before {\\n  content: \\\""\\\\61\\\"";\\n}\\n\\n.datatable-icon-expand:before {\\n  content: \\\""\\\\63\\\"";\\n}\\n\\n.datatable-icon-close:before {\\n  content: \\\""\\\\64\\\"";\\n}\\n\\n.datatable-icon-up:before {\\n  content: \\\""\\\\65\\\"";\\n}\\n\\n.datatable-icon-down:before {\\n  content: \\\""\\\\66\\\"";\\n}\\n\\n.datatable-icon-sort:before {\\n  content: \\\""\\\\67\\\"";\\n}\\n\\n.datatable-icon-done:before {\\n  content: \\\""\\\\68\\\"";\\n}\\n\\n.datatable-icon-done-all:before {\\n  content: \\\""\\\\69\\\"";\\n}\\n\\n.datatable-icon-search:before {\\n  content: \\\""\\\\6a\\\"";\\n}\\n\\n.datatable-icon-pin:before {\\n  content: \\\""\\\\6b\\\"";\\n}\\n\\n.datatable-icon-add:before {\\n  content: \\\""\\\\6d\\\"";\\n}\\n\\n.datatable-icon-left:before {\\n  content: \\\""\\\\6f\\\"";\\n}\\n\\n.datatable-icon-right:before {\\n  content: \\\""\\\\70\\\"";\\n}\\n\\n.datatable-icon-skip:before {\\n  content: \\\""\\\\71\\\"";\\n}\\n\\n.datatable-icon-prev:before {\\n  content: \\\""\\\\72\\\"";\\n}\\n\\n/*# sourceMappingURL=data:application/json;base64,  */\"", '', '']]"",""module.exports = [[module.id, \""/**\\n * angular2-data-table v\\\""14.0.0\\\"" (https://github.com/swimlane/angular2-data-table)\\n * Copyright 2016\\n * Licensed under MIT\\n */\\n.ngx-datatable {\\n  display: block;\\n  overflow: hidden;\\n  justify-content: center;\\n  position: relative;\\n  -webkit-transform: translate3d(0, 0, 0);\\n  /**\\n   * Vertical Scrolling Adjustments\\n   */\\n  /**\\n   * Horizontal Scrolling Adjustments\\n   */\\n  /**\\n   * Fixed Header Height Adjustments\\n   */\\n  /**\\n   * Fixed row height adjustments\\n   */\\n  /**\\n   * Shared Styles\\n   */\\n  /**\\n   * Header Styles\\n   */\\n  /**\\n   * Body Styles\\n   */\\n  /**\\n   * Footer Styles\\n   */ }\\n.ngx-datatable [hidden] {\\n    display: none !important; }\\n.ngx-datatable *, .ngx-datatable *:before, .ngx-datatable *:after {\\n    box-sizing: border-box; }\\n.ngx-datatable.scroll-vertical .datatable-body {\\n    overflow-y: auto; }\\n.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper {\\n    position: absolute; }\\n.ngx-datatable.scroll-horz .datatable-body {\\n    overflow-x: auto;\\n    -webkit-overflow-scrolling: touch; }\\n.ngx-datatable.fixed-header .datatable-header .datatable-header-inner {\\n    white-space: nowrap; }\\n.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell {\\n      white-space: nowrap;\\n      overflow: hidden;\\n      text-overflow: ellipsis; }\\n.ngx-datatable.fixed-row .datatable-scroll {\\n    white-space: nowrap; }\\n.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row {\\n      white-space: nowrap; }\\n.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell {\\n        overflow: hidden;\\n        white-space: nowrap;\\n        text-overflow: ellipsis; }\\n.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell {\\n        overflow: hidden;\\n        white-space: nowrap;\\n        text-overflow: ellipsis; }\\n.ngx-datatable .datatable-body-row,\\n  .ngx-datatable .datatable-row-center,\\n  .ngx-datatable .datatable-header-inner {\\n    display: flex;\\n    flex-direction: row;\\n    -o-flex-flow: row;\\n    flex-flow: row; }\\n.ngx-datatable .datatable-body-cell,\\n  .ngx-datatable .datatable-header-cell {\\n    overflow-x: hidden;\\n    vertical-align: top;\\n    display: inline-block;\\n    line-height: 1.625; }\\n.ngx-datatable .datatable-body-cell:focus,\\n    .ngx-datatable .datatable-header-cell:focus {\\n      outline: none; }\\n.ngx-datatable .datatable-row-left,\\n  .ngx-datatable .datatable-row-right {\\n    z-index: 9; }\\n.ngx-datatable .datatable-row-left,\\n  .ngx-datatable .datatable-row-center,\\n  .ngx-datatable .datatable-row-group,\\n  .ngx-datatable .datatable-row-right {\\n    position: relative; }\\n.ngx-datatable .datatable-header {\\n    display: block;\\n    overflow: hidden; }\\n.ngx-datatable .datatable-header .datatable-header-inner {\\n      align-items: stretch;\\n      -webkit-align-items: stretch; }\\n.ngx-datatable .datatable-header .datatable-header-cell {\\n      position: relative;\\n      display: inline-block; }\\n.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper {\\n        cursor: pointer; }\\n.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper {\\n        cursor: move; }\\n.ngx-datatable .datatable-header .datatable-header-cell .sort-btn {\\n        line-height: 100%;\\n        vertical-align: middle;\\n        display: inline-block;\\n        cursor: pointer; }\\n.ngx-datatable .datatable-header .datatable-header-cell .resize-handle, .ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable {\\n        display: inline-block;\\n        position: absolute;\\n        right: 0;\\n        top: 0;\\n        bottom: 0;\\n        width: 5px;\\n        padding: 0 4px;\\n        visibility: hidden; }\\n.ngx-datatable .datatable-header .datatable-header-cell .resize-handle {\\n        cursor: ew-resize; }\\n.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle {\\n        visibility: visible; }\\n.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable {\\n        visibility: visible; }\\n.ngx-datatable .datatable-header .datatable-header-cell .targetMarker {\\n        position: absolute;\\n        top: 0;\\n        bottom: 0; }\\n.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft {\\n          right: 0; }\\n.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight {\\n          left: 0; }\\n.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap {\\n        height: inherit; }\\n.ngx-datatable .datatable-body {\\n    position: relative;\\n    z-index: 10;\\n    display: block; }\\n.ngx-datatable .datatable-body .datatable-scroll {\\n      display: inline-block; }\\n.ngx-datatable .datatable-body .datatable-row-detail {\\n      overflow-y: hidden; }\\n.ngx-datatable .datatable-body .datatable-row-wrapper {\\n      display: flex;\\n      flex-direction: column; }\\n.ngx-datatable .datatable-body .datatable-body-row {\\n      outline: none; }\\n.ngx-datatable .datatable-body .datatable-body-row > div {\\n        display: flex; }\\n.ngx-datatable .datatable-footer {\\n    display: block;\\n    width: 100%; }\\n.ngx-datatable .datatable-footer .datatable-footer-inner {\\n      display: flex;\\n      align-items: center;\\n      width: 100%; }\\n.ngx-datatable .datatable-footer .selected-count .page-count {\\n      flex: 1 1 40%; }\\n.ngx-datatable .datatable-footer .selected-count .datatable-pager {\\n      flex: 1 1 60%; }\\n.ngx-datatable .datatable-footer .page-count {\\n      flex: 1 1 20%; }\\n.ngx-datatable .datatable-footer .datatable-pager {\\n      flex: 1 1 80%;\\n      text-align: right; }\\n.ngx-datatable .datatable-footer .datatable-pager .pager,\\n      .ngx-datatable .datatable-footer .datatable-pager .pager li {\\n        padding: 0;\\n        margin: 0;\\n        display: inline-block;\\n        list-style: none; }\\n.ngx-datatable .datatable-footer .datatable-pager .pager li, .ngx-datatable .datatable-footer .datatable-pager .pager li a {\\n        outline: none; }\\n.ngx-datatable .datatable-footer .datatable-pager .pager li a {\\n        cursor: pointer;\\n        display: inline-block; }\\n.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a {\\n        cursor: not-allowed; }\\n/*# sourceMappingURL=index.map*/\\n/*# sourceMappingURL=data:application/json;base64,  */\"", '', '']]"",""module.exports = [[module.id, \"".ngx-datatable.material {\\n  background: #FFF;\\n  box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12);\\n  /**\\n\\t * Shared Styles\\n\\t */\\n  /**\\n\\t * Global Row Styles\\n\\t */\\n  /**\\n\\t * Header Styles\\n\\t */\\n  /**\\n\\t * Body Styles\\n\\t */\\n  /**\\n\\t * Footer Styles\\n\\t */ }\\n  .ngx-datatable.material.striped .datatable-row-odd {\\n    background: #eee; }\\n  .ngx-datatable.material.single-selection .datatable-body-row.active,\\n  .ngx-datatable.material.single-selection .datatable-body-row.active .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active,\\n  .ngx-datatable.material.multi-selection .datatable-body-row.active .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active,\\n  .ngx-datatable.material.multi-click-selection .datatable-body-row.active .datatable-row-group {\\n    background-color: #304FFE;\\n    color: #FFF; }\\n  .ngx-datatable.material.single-selection .datatable-body-row.active:hover,\\n  .ngx-datatable.material.single-selection .datatable-body-row.active:hover .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active:hover,\\n  .ngx-datatable.material.multi-selection .datatable-body-row.active:hover .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active:hover,\\n  .ngx-datatable.material.multi-click-selection .datatable-body-row.active:hover .datatable-row-group {\\n    background-color: #193AE4;\\n    color: #FFF; }\\n  .ngx-datatable.material.single-selection .datatable-body-row.active:focus,\\n  .ngx-datatable.material.single-selection .datatable-body-row.active:focus .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active:focus,\\n  .ngx-datatable.material.multi-selection .datatable-body-row.active:focus .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active:focus,\\n  .ngx-datatable.material.multi-click-selection .datatable-body-row.active:focus .datatable-row-group {\\n    background-color: #2041EF;\\n    color: #FFF; }\\n  .ngx-datatable.material:not(.cell-selection) .datatable-body-row:hover,\\n  .ngx-datatable.material:not(.cell-selection) .datatable-body-row:hover .datatable-row-group {\\n    background-color: #eee;\\n    transition-property: background;\\n    transition-duration: .3s;\\n    transition-timing-function: linear; }\\n  .ngx-datatable.material:not(.cell-selection) .datatable-body-row:focus,\\n  .ngx-datatable.material:not(.cell-selection) .datatable-body-row:focus .datatable-row-group {\\n    background-color: #ddd; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell:hover,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell:hover .datatable-row-group {\\n    background-color: #eee;\\n    transition-property: background;\\n    transition-duration: .3s;\\n    transition-timing-function: linear; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell:focus,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell:focus .datatable-row-group {\\n    background-color: #ddd; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active .datatable-row-group {\\n    background-color: #304FFE;\\n    color: #FFF; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active:hover,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active:hover .datatable-row-group {\\n    background-color: #193AE4;\\n    color: #FFF; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active:focus,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active:focus .datatable-row-group {\\n    background-color: #2041EF;\\n    color: #FFF; }\\n  .ngx-datatable.material .empty-row {\\n    height: 50px;\\n    text-align: left;\\n    padding: .5rem 1.2rem;\\n    vertical-align: top;\\n    border-top: 0; }\\n  .ngx-datatable.material .loading-row {\\n    text-align: left;\\n    padding: .5rem 1.2rem;\\n    vertical-align: top;\\n    border-top: 0; }\\n  .ngx-datatable.material .datatable-header .datatable-row-left,\\n  .ngx-datatable.material .datatable-body .datatable-row-left {\\n    background-color: #FFF;\\n    background-position: 100% 0;\\n    background-repeat: repeat-y;\\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAYAAAD5PA/NAAAAFklEQVQIHWPSkNeSBmJhTQVtbiDNCgASagIIuJX8OgAAAABJRU5ErkJggg==); }\\n  .ngx-datatable.material .datatable-header .datatable-row-right,\\n  .ngx-datatable.material .datatable-body .datatable-row-right {\\n    background-position: 0 0;\\n    background-color: #fff;\\n    background-repeat: repeat-y;\\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAYAAAD5PA/NAAAAFklEQVQI12PQkNdi1VTQ5gbSwkAsDQARLAIGtOSFUAAAAABJRU5ErkJggg==); }\\n  .ngx-datatable.material .datatable-header {\\n    border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\\n  .ngx-datatable.material .datatable-header .datatable-header-cell {\\n      text-align: left;\\n      padding: .9rem 1.2rem;\\n      font-weight: 400;\\n      color: rgba(0, 0, 0, 0.54);\\n      vertical-align: bottom;\\n      font-size: 12px;\\n      font-weight: 500; }\\n  .ngx-datatable.material .datatable-header .datatable-header-cell .datatable-header-cell-wrapper {\\n        position: relative; }\\n  .ngx-datatable.material .datatable-header .datatable-header-cell.longpress .draggable::after {\\n        transition: opacity 400ms ease, -webkit-transform 400ms ease;\\n        transition: transform 400ms ease, opacity 400ms ease;\\n        transition: transform 400ms ease, opacity 400ms ease, -webkit-transform 400ms ease;\\n        opacity: .5;\\n        -webkit-transform: scale(1);\\n                transform: scale(1); }\\n  .ngx-datatable.material .datatable-header .datatable-header-cell .draggable::after {\\n        content: \\\"" \\\"";\\n        position: absolute;\\n        top: 50%;\\n        left: 50%;\\n        margin: -30px 0 0 -30px;\\n        height: 60px;\\n        width: 60px;\\n        background: #eee;\\n        border-radius: 100%;\\n        opacity: 1;\\n        -webkit-filter: none;\\n                filter: none;\\n        -webkit-transform: scale(0);\\n                transform: scale(0);\\n        z-index: 9999;\\n        pointer-events: none; }\\n  .ngx-datatable.material .datatable-header .datatable-header-cell.dragging .resize-handle {\\n        border-right: none; }\\n  .ngx-datatable.material .datatable-header .resize-handle {\\n      border-right: solid 1px #eee; }\\n  .ngx-datatable.material .datatable-body .datatable-row-detail {\\n    background: #f5f5f5;\\n    padding: 10px; }\\n  .ngx-datatable.material .datatable-body .datatable-group-header {\\n    background: #f5f5f5;\\n    border-bottom: solid 1px #D9D8D9;\\n    border-top: solid 1px #D9D8D9; }\\n  .ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-cell {\\n    text-align: left;\\n    padding: .9rem 1.2rem;\\n    vertical-align: top;\\n    border-top: 0;\\n    color: rgba(0, 0, 0, 0.87);\\n    transition: width 0.3s ease;\\n    font-size: 14px;\\n    font-weight: 400; }\\n  .ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-group-cell {\\n    text-align: left;\\n    padding: .9rem 1.2rem;\\n    vertical-align: top;\\n    border-top: 0;\\n    color: rgba(0, 0, 0, 0.87);\\n    transition: width 0.3s ease;\\n    font-size: 14px;\\n    font-weight: 400; }\\n  .ngx-datatable.material .datatable-body .progress-linear {\\n    display: block;\\n    position: relative;\\n    width: 100%;\\n    height: 5px;\\n    padding: 0;\\n    margin: 0;\\n    position: absolute; }\\n  .ngx-datatable.material .datatable-body .progress-linear .container {\\n      display: block;\\n      position: relative;\\n      overflow: hidden;\\n      width: 100%;\\n      height: 5px;\\n      -webkit-transform: translate(0, 0) scale(1, 1);\\n      transform: translate(0, 0) scale(1, 1);\\n      background-color: #aad1f9; }\\n  .ngx-datatable.material .datatable-body .progress-linear .container .bar {\\n        transition: all .2s linear;\\n        -webkit-animation: query 0.8s infinite cubic-bezier(0.39, 0.575, 0.565, 1);\\n        animation: query 0.8s infinite cubic-bezier(0.39, 0.575, 0.565, 1);\\n        transition: -webkit-transform .2s linear;\\n        transition: transform .2s linear;\\n        transition: transform .2s linear, -webkit-transform .2s linear;\\n        background-color: #106cc8;\\n        position: absolute;\\n        left: 0;\\n        top: 0;\\n        bottom: 0;\\n        width: 100%;\\n        height: 5px; }\\n  .ngx-datatable.material .datatable-footer {\\n    border-top: 1px solid rgba(0, 0, 0, 0.12);\\n    font-size: 12px;\\n    font-weight: 400;\\n    color: rgba(0, 0, 0, 0.54); }\\n  .ngx-datatable.material .datatable-footer .page-count {\\n      line-height: 50px;\\n      height: 50px;\\n      padding: 0 1.2rem; }\\n  .ngx-datatable.material .datatable-footer .datatable-pager {\\n      margin: 0 10px; }\\n  .ngx-datatable.material .datatable-footer .datatable-pager li {\\n        vertical-align: middle; }\\n  .ngx-datatable.material .datatable-footer .datatable-pager li.disabled a {\\n          color: rgba(0, 0, 0, 0.26) !important;\\n          background-color: transparent !important; }\\n  .ngx-datatable.material .datatable-footer .datatable-pager li.active a {\\n          background-color: rgba(158, 158, 158, 0.2);\\n          font-weight: bold; }\\n  .ngx-datatable.material .datatable-footer .datatable-pager a {\\n        height: 22px;\\n        min-width: 24px;\\n        line-height: 22px;\\n        padding: 0 6px;\\n        border-radius: 3px;\\n        margin: 6px 3px;\\n        text-align: center;\\n        vertical-align: top;\\n        color: rgba(0, 0, 0, 0.54);\\n        text-decoration: none;\\n        vertical-align: bottom; }\\n  .ngx-datatable.material .datatable-footer .datatable-pager a:hover {\\n          color: rgba(0, 0, 0, 0.75);\\n          background-color: rgba(158, 158, 158, 0.2); }\\n  .ngx-datatable.material .datatable-footer .datatable-pager .datatable-icon-left,\\n      .ngx-datatable.material .datatable-footer .datatable-pager .datatable-icon-skip,\\n      .ngx-datatable.material .datatable-footer .datatable-pager .datatable-icon-right,\\n      .ngx-datatable.material .datatable-footer .datatable-pager .datatable-icon-prev {\\n        font-size: 20px;\\n        line-height: 20px;\\n        padding: 0 3px; }\\n  .ngx-datatable.material .datatable-summary-row .datatable-body-row {\\n    background-color: #ddd; }\\n  .ngx-datatable.material .datatable-summary-row .datatable-body-row:hover {\\n      background-color: #ddd; }\\n  .ngx-datatable.material .datatable-summary-row .datatable-body-row .datatable-body-cell {\\n      font-weight: bold; }\\n  /**\\n * Checkboxes\\n**/\\n  .datatable-checkbox {\\n  position: relative;\\n  margin: 0;\\n  cursor: pointer;\\n  vertical-align: middle;\\n  display: inline-block;\\n  box-sizing: border-box;\\n  padding: 0; }\\n  .datatable-checkbox input[type='checkbox'] {\\n    position: relative;\\n    margin: 0 1rem 0 0;\\n    cursor: pointer;\\n    outline: none; }\\n  .datatable-checkbox input[type='checkbox']:before {\\n      transition: all 0.3s ease-in-out;\\n      content: \\\""\\\"";\\n      position: absolute;\\n      left: 0;\\n      z-index: 1;\\n      width: 1rem;\\n      height: 1rem;\\n      border: 2px solid #f2f2f2; }\\n  .datatable-checkbox input[type='checkbox']:checked:before {\\n      -webkit-transform: rotate(-45deg);\\n      transform: rotate(-45deg);\\n      height: .5rem;\\n      border-color: #009688;\\n      border-top-style: none;\\n      border-right-style: none; }\\n  .datatable-checkbox input[type='checkbox']:after {\\n      content: \\\""\\\"";\\n      position: absolute;\\n      top: 0;\\n      left: 0;\\n      width: 1rem;\\n      height: 1rem;\\n      background: #fff;\\n      cursor: pointer; }\\n  /**\\n * Progress bar animations\\n */\\n  @-webkit-keyframes query {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateX(35%) scale(0.3, 1);\\n            transform: translateX(35%) scale(0.3, 1); }\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateX(-50%) scale(0, 1);\\n            transform: translateX(-50%) scale(0, 1); } }\\n  @keyframes query {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateX(35%) scale(0.3, 1);\\n            transform: translateX(35%) scale(0.3, 1); }\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateX(-50%) scale(0, 1);\\n            transform: translateX(-50%) scale(0, 1); } }\\n\\n/*# sourceMappingURL=data:application/json;base64,  */\"", '', '']]"",""module.exports = [[module.id, \""/* You can add global styles to this file, and also import other style files */\\n/* @import \\\""~@angular/material/prebuilt-themes/indigo-pink.css\\\""; */\\n/* @import \\\""~@angular/material/prebuilt-themes/deeppurple-amber.css\\\""; */\\n/* @import \\\""~@angular/material/prebuilt-themes/pink-bluegrey.css\\\""; */\\n.mat-elevation-z0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}\\n.mat-elevation-z1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)}\\n.mat-elevation-z2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}\\n.mat-elevation-z3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)}\\n.mat-elevation-z4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}\\n.mat-elevation-z5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)}\\n.mat-elevation-z6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}\\n.mat-elevation-z7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}\\n.mat-elevation-z8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}\\n.mat-elevation-z9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}\\n.mat-elevation-z10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}\\n.mat-elevation-z11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}\\n.mat-elevation-z12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}\\n.mat-elevation-z13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}\\n.mat-elevation-z14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}\\n.mat-elevation-z15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}\\n.mat-elevation-z16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}\\n.mat-elevation-z17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}\\n.mat-elevation-z18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}\\n.mat-elevation-z19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}\\n.mat-elevation-z20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}\\n.mat-elevation-z21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}\\n.mat-elevation-z22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}\\n.mat-elevation-z23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}\\n.mat-elevation-z24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}\\n.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-badge-small .mat-badge-content{font-size:6px}\\n.mat-badge-large .mat-badge-content{font-size:24px}\\n.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 16px}\\n.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 16px}\\n.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 16px}\\n.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 16px}\\n.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 12px}\\n.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 12px}\\n.mat-body-2,.mat-body-strong{font:500 14px/24px Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}\\n.mat-caption,.mat-small{font:400 12px/20px Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 56px;letter-spacing:-.05em}\\n.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 64px;letter-spacing:-.02em}\\n.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 64px;letter-spacing:-.005em}\\n.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0 0 64px}\\n.mat-bottom-sheet-container{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:16px;font-weight:400}\\n.mat-button,.mat-fab,.mat-flat-button,.mat-icon-button,.mat-mini-fab,.mat-raised-button,.mat-stroked-button{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:14px;font-weight:500}\\n.mat-button-toggle{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-card{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-card-title{font-size:24px;font-weight:400}\\n.mat-card-content,.mat-card-header .mat-card-title,.mat-card-subtitle{font-size:14px}\\n.mat-checkbox{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-checkbox-layout .mat-checkbox-label{line-height:24px}\\n.mat-chip{font-size:13px;line-height:18px}\\n.mat-chip .mat-chip-remove.mat-icon,.mat-chip .mat-chip-trailing-icon.mat-icon{font-size:18px}\\n.mat-table{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-header-cell{font-size:12px;font-weight:500}\\n.mat-cell,.mat-footer-cell{font-size:14px}\\n.mat-calendar{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-calendar-body{font-size:13px}\\n.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}\\n.mat-calendar-table-header th{font-size:11px;font-weight:400}\\n.mat-dialog-title{font:500 20px/32px Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-expansion-panel-header{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:15px;font-weight:400}\\n.mat-expansion-panel-content{font:400 14px/20px Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-form-field-wrapper{padding-bottom:1.34375em}\\n.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}\\n.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}\\n.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}\\n.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}\\n.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.34375em) scale(.75);transform:translateY(-1.34375em) scale(.75);width:133.33333%}\\n.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.34374em) scale(.75);transform:translateY(-1.34374em) scale(.75);width:133.33334%}\\n.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}\\n.mat-form-field-label{top:1.34375em}\\n.mat-form-field-underline{bottom:1.34375em}\\n.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.66667em;top:calc(100% - 1.79167em)}\\n.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}\\n.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.33334%}\\n.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.33335%}\\n.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}\\n.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}\\n.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.54167em;top:calc(100% - 1.66667em)}\\n.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em 0}\\n.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}\\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-.59375em) scale(.75);transform:translateY(-.59375em) scale(.75);width:133.33333%}\\n.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-.59374em) scale(.75);transform:translateY(-.59374em) scale(.75);width:133.33334%}\\n.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0 1em 0}\\n.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}\\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{-webkit-transform:translateY(-1.59375em) scale(.75);transform:translateY(-1.59375em) scale(.75);width:133.33333%}\\n.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{-webkit-transform:translateY(-1.59374em) scale(.75);transform:translateY(-1.59374em) scale(.75);width:133.33334%}\\n.mat-grid-tile-footer,.mat-grid-tile-header{font-size:14px}\\n.mat-grid-tile-footer .mat-line,.mat-grid-tile-header .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}\\n.mat-grid-tile-footer .mat-line:nth-child(n+2),.mat-grid-tile-header .mat-line:nth-child(n+2){font-size:12px}\\ninput.mat-input-element{margin-top:-.0625em}\\n.mat-menu-item{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:16px;font-weight:400}\\n.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:12px}\\n.mat-radio-button{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-select{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-select-trigger{height:1.125em}\\n.mat-slide-toggle-content{font:400 14px/20px Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-slider-thumb-label-text{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:12px;font-weight:500}\\n.mat-stepper-horizontal,.mat-stepper-vertical{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-step-label{font-size:14px;font-weight:400}\\n.mat-step-label-selected{font-size:14px;font-weight:500}\\n.mat-tab-group{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-tab-label,.mat-tab-link{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:14px;font-weight:500}\\n.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,\\\""Helvetica Neue\\\"",sans-serif;margin:0}\\n.mat-tooltip{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}\\n.mat-tooltip-handset{font-size:14px;padding-top:9px;padding-bottom:9px}\\n.mat-list-item{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-list-option{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-list .mat-list-item,.mat-nav-list .mat-list-item,.mat-selection-list .mat-list-item{font-size:16px}\\n.mat-list .mat-list-item .mat-line,.mat-nav-list .mat-list-item .mat-line,.mat-selection-list .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}\\n.mat-list .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list .mat-list-item .mat-line:nth-child(n+2){font-size:14px}\\n.mat-list .mat-list-option,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-option{font-size:16px}\\n.mat-list .mat-list-option .mat-line,.mat-nav-list .mat-list-option .mat-line,.mat-selection-list .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}\\n.mat-list .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list .mat-list-option .mat-line:nth-child(n+2){font-size:14px}\\n.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:14px;font-weight:500}\\n.mat-list[dense] .mat-list-item,.mat-nav-list[dense] .mat-list-item,.mat-selection-list[dense] .mat-list-item{font-size:12px}\\n.mat-list[dense] .mat-list-item .mat-line,.mat-nav-list[dense] .mat-list-item .mat-line,.mat-selection-list[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}\\n.mat-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}\\n.mat-list[dense] .mat-list-option,.mat-nav-list[dense] .mat-list-option,.mat-selection-list[dense] .mat-list-option{font-size:12px}\\n.mat-list[dense] .mat-list-option .mat-line,.mat-nav-list[dense] .mat-list-option .mat-line,.mat-selection-list[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}\\n.mat-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}\\n.mat-list[dense] .mat-subheader,.mat-nav-list[dense] .mat-subheader,.mat-selection-list[dense] .mat-subheader{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:12px;font-weight:500}\\n.mat-option{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:16px}\\n.mat-optgroup-label{font:500 14px/24px Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-simple-snackbar{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif;font-size:14px}\\n.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}\\n.mat-tree{font-family:Roboto,\\\""Helvetica Neue\\\"",sans-serif}\\n.mat-tree-node{font-weight:400;font-size:14px}\\n.mat-ripple{overflow:hidden}\\n.mat-ripple.mat-ripple-unbounded{overflow:visible}\\n.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,-webkit-transform 0s cubic-bezier(0,0,.2,1);transition:opacity,transform 0s cubic-bezier(0,0,.2,1);transition:opacity,transform 0s cubic-bezier(0,0,.2,1),-webkit-transform 0s cubic-bezier(0,0,.2,1);-webkit-transform:scale(0);transform:scale(0)}\\n@media screen and (-ms-high-contrast:active){.mat-ripple-element{display:none}}\\n.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}\\n.cdk-global-overlay-wrapper,.cdk-overlay-container{pointer-events:none;top:0;left:0;height:100%;width:100%}\\n.cdk-overlay-container{position:fixed;z-index:1000}\\n.cdk-overlay-container:empty{display:none}\\n.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}\\n.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}\\n.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}\\n.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}\\n@media screen and (-ms-high-contrast:active){.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}}\\n.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.288)}\\n.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}\\n.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}\\n.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}\\n@-webkit-keyframes cdk-text-field-autofill-start{/*!*/}\\n@keyframes cdk-text-field-autofill-start{/*!*/}\\n@-webkit-keyframes cdk-text-field-autofill-end{/*!*/}\\n@keyframes cdk-text-field-autofill-end{/*!*/}\\n.cdk-text-field-autofill-monitored:-webkit-autofill{-webkit-animation-name:cdk-text-field-autofill-start;animation-name:cdk-text-field-autofill-start}\\n.cdk-text-field-autofill-monitored:not(:-webkit-autofill){-webkit-animation-name:cdk-text-field-autofill-end;animation-name:cdk-text-field-autofill-end}\\ntextarea.cdk-textarea-autosize{resize:none}\\ntextarea.cdk-textarea-autosize-measuring{height:auto!important;overflow:hidden!important;padding:2px 0!important;box-sizing:content-box!important}\\n.mat-ripple-element{background-color:rgba(255,255,255,.1)}\\n.mat-option{color:#fff}\\n.mat-option:focus:not(.mat-option-disabled),.mat-option:hover:not(.mat-option-disabled){background:rgba(255,255,255,.04)}\\n.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){background:rgba(255,255,255,.04)}\\n.mat-option.mat-active{background:rgba(255,255,255,.04);color:#fff}\\n.mat-option.mat-option-disabled{color:rgba(255,255,255,.5)}\\n.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#7b1fa2}\\n.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#69f0ae}\\n.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#f44336}\\n.mat-optgroup-label{color:rgba(255,255,255,.7)}\\n.mat-optgroup-disabled .mat-optgroup-label{color:rgba(255,255,255,.5)}\\n.mat-pseudo-checkbox{color:rgba(255,255,255,.7)}\\n.mat-pseudo-checkbox::after{color:#303030}\\n.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate,.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate{background:#69f0ae}\\n.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#7b1fa2}\\n.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#f44336}\\n.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#686868}\\n.mat-app-background{background-color:#303030;color:#fff}\\n.mat-theme-loaded-marker{display:none}\\n.mat-autocomplete-panel{background:#424242;color:#fff}\\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#424242}\\n.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:#fff}\\n.mat-badge-content{color:#fff;background:#7b1fa2}\\n.mat-badge-accent .mat-badge-content{background:#69f0ae;color:rgba(0,0,0,.87)}\\n.mat-badge-warn .mat-badge-content{color:#fff;background:#f44336}\\n.mat-badge{position:relative}\\n.mat-badge-hidden .mat-badge-content{display:none}\\n.mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out, -webkit-transform .2s ease-in-out;-webkit-transform:scale(.6);transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}\\n.mat-badge-content.mat-badge-active{-webkit-transform:none;transform:none}\\n.mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}\\n@media screen and (-ms-high-contrast:active){.mat-badge-small .mat-badge-content{outline:solid 1px;border-radius:0}}\\n.mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}\\n.mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}\\n.mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}\\n[dir=rtl] .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}\\n.mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}\\n[dir=rtl] .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}\\n.mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}\\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}\\n.mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}\\n[dir=rtl] .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}\\n.mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}\\n@media screen and (-ms-high-contrast:active){.mat-badge-medium .mat-badge-content{outline:solid 1px;border-radius:0}}\\n.mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}\\n.mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}\\n.mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}\\n[dir=rtl] .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}\\n.mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}\\n[dir=rtl] .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}\\n.mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}\\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}\\n.mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}\\n[dir=rtl] .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}\\n.mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}\\n@media screen and (-ms-high-contrast:active){.mat-badge-large .mat-badge-content{outline:solid 1px;border-radius:0}}\\n.mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}\\n.mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}\\n.mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}\\n[dir=rtl] .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}\\n.mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}\\n[dir=rtl] .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}\\n.mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}\\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}\\n.mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}\\n[dir=rtl] .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}\\n.mat-bottom-sheet-container{background:#424242;color:#fff}\\n.mat-button,.mat-icon-button,.mat-stroked-button{color:inherit;background:0 0}\\n.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#7b1fa2}\\n.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#69f0ae}\\n.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#f44336}\\n.mat-button.mat-accent[disabled],.mat-button.mat-primary[disabled],.mat-button.mat-warn[disabled],.mat-button[disabled][disabled],.mat-icon-button.mat-accent[disabled],.mat-icon-button.mat-primary[disabled],.mat-icon-button.mat-warn[disabled],.mat-icon-button[disabled][disabled],.mat-stroked-button.mat-accent[disabled],.mat-stroked-button.mat-primary[disabled],.mat-stroked-button.mat-warn[disabled],.mat-stroked-button[disabled][disabled]{color:rgba(255,255,255,.3)}\\n.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:rgba(123,31,162,.12)}\\n.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:rgba(105,240,174,.12)}\\n.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:rgba(244,67,54,.12)}\\n.mat-button[disabled] .mat-button-focus-overlay,.mat-icon-button[disabled] .mat-button-focus-overlay,.mat-stroked-button[disabled] .mat-button-focus-overlay{background-color:transparent}\\n.mat-button.mat-primary .mat-ripple-element,.mat-icon-button.mat-primary .mat-ripple-element,.mat-stroked-button.mat-primary .mat-ripple-element{background-color:rgba(123,31,162,.1)}\\n.mat-button.mat-accent .mat-ripple-element,.mat-icon-button.mat-accent .mat-ripple-element,.mat-stroked-button.mat-accent .mat-ripple-element{background-color:rgba(105,240,174,.1)}\\n.mat-button.mat-warn .mat-ripple-element,.mat-icon-button.mat-warn .mat-ripple-element,.mat-stroked-button.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.1)}\\n.mat-fab,.mat-flat-button,.mat-mini-fab,.mat-raised-button{color:#fff;background-color:#424242}\\n.mat-fab.mat-primary,.mat-flat-button.mat-primary,.mat-mini-fab.mat-primary,.mat-raised-button.mat-primary{color:#fff}\\n.mat-fab.mat-accent,.mat-flat-button.mat-accent,.mat-mini-fab.mat-accent,.mat-raised-button.mat-accent{color:rgba(0,0,0,.87)}\\n.mat-fab.mat-warn,.mat-flat-button.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{color:#fff}\\n.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{color:rgba(255,255,255,.3)}\\n.mat-fab.mat-primary,.mat-flat-button.mat-primary,.mat-mini-fab.mat-primary,.mat-raised-button.mat-primary{background-color:#7b1fa2}\\n.mat-fab.mat-accent,.mat-flat-button.mat-accent,.mat-mini-fab.mat-accent,.mat-raised-button.mat-accent{background-color:#69f0ae}\\n.mat-fab.mat-warn,.mat-flat-button.mat-warn,.mat-mini-fab.mat-warn,.mat-raised-button.mat-warn{background-color:#f44336}\\n.mat-fab.mat-accent[disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled]{background-color:rgba(255,255,255,.12)}\\n.mat-fab.mat-primary .mat-ripple-element,.mat-flat-button.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element,.mat-raised-button.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,.1)}\\n.mat-fab.mat-accent .mat-ripple-element,.mat-flat-button.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element,.mat-raised-button.mat-accent .mat-ripple-element{background-color:rgba(0,0,0,.1)}\\n.mat-fab.mat-warn .mat-ripple-element,.mat-flat-button.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element,.mat-raised-button.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,.1)}\\n.mat-icon-button.mat-primary .mat-ripple-element{background-color:rgba(123,31,162,.2)}\\n.mat-icon-button.mat-accent .mat-ripple-element{background-color:rgba(105,240,174,.2)}\\n.mat-icon-button.mat-warn .mat-ripple-element{background-color:rgba(244,67,54,.2)}\\n.mat-button-toggle{color:rgba(255,255,255,.5)}\\n.mat-button-toggle .mat-button-toggle-focus-overlay{background-color:rgba(255,255,255,.12)}\\n.mat-button-toggle-checked{background-color:#212121;color:rgba(255,255,255,.7)}\\n.mat-button-toggle-disabled{background-color:#000;color:rgba(255,255,255,.3)}\\n.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#424242}\\n.mat-card{background:#424242;color:#fff}\\n.mat-card-subtitle{color:rgba(255,255,255,.7)}\\n.mat-checkbox-frame{border-color:rgba(255,255,255,.7)}\\n.mat-checkbox-checkmark{fill:#303030}\\n.mat-checkbox-checkmark-path{stroke:#303030!important}\\n@media screen and (-ms-high-contrast:black-on-white){.mat-checkbox-checkmark-path{stroke:#000!important}}\\n.mat-checkbox-mixedmark{background-color:#303030}\\n.mat-checkbox-checked.mat-primary .mat-checkbox-background,.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{background-color:#7b1fa2}\\n.mat-checkbox-checked.mat-accent .mat-checkbox-background,.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background{background-color:#69f0ae}\\n.mat-checkbox-checked.mat-warn .mat-checkbox-background,.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background{background-color:#f44336}\\n.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#686868}\\n.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#686868}\\n.mat-checkbox-disabled .mat-checkbox-label{color:#686868}\\n@media screen and (-ms-high-contrast:active){.mat-checkbox-disabled{opacity:.5}}\\n@media screen and (-ms-high-contrast:active){.mat-checkbox-background{background:0 0}}\\n.mat-checkbox:not(.mat-checkbox-disabled).mat-primary .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(123,31,162,.26)}\\n.mat-checkbox:not(.mat-checkbox-disabled).mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(105,240,174,.26)}\\n.mat-checkbox:not(.mat-checkbox-disabled).mat-warn .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(244,67,54,.26)}\\n.mat-chip.mat-standard-chip{background-color:#616161;color:#fff}\\n.mat-chip.mat-standard-chip .mat-chip-remove{color:#fff;opacity:.4}\\n.mat-chip.mat-standard-chip .mat-chip-remove:hover{opacity:.54}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary{background-color:#7b1fa2;color:#fff}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:#fff;opacity:.4}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-primary .mat-chip-remove:hover{opacity:.54}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn{background-color:#f44336;color:#fff}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:#fff;opacity:.4}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-warn .mat-chip-remove:hover{opacity:.54}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent{background-color:#69f0ae;color:rgba(0,0,0,.87)}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:rgba(0,0,0,.87);opacity:.4}\\n.mat-chip.mat-standard-chip.mat-chip-selected.mat-accent .mat-chip-remove:hover{opacity:.54}\\n.mat-table{background:#424242}\\n.mat-table tbody,.mat-table tfoot,.mat-table thead,.mat-table-sticky,[mat-footer-row],[mat-header-row],[mat-row],mat-footer-row,mat-header-row,mat-row{background:inherit}\\nmat-footer-row,mat-header-row,mat-row,td.mat-cell,td.mat-footer-cell,th.mat-header-cell{border-bottom-color:rgba(255,255,255,.12)}\\n.mat-header-cell{color:rgba(255,255,255,.7)}\\n.mat-cell,.mat-footer-cell{color:#fff}\\n.mat-calendar-arrow{border-top-color:#fff}\\n.mat-datepicker-content .mat-calendar-next-button,.mat-datepicker-content .mat-calendar-previous-button,.mat-datepicker-toggle{color:#fff}\\n.mat-calendar-table-header{color:rgba(255,255,255,.5)}\\n.mat-calendar-table-header-divider::after{background:rgba(255,255,255,.12)}\\n.mat-calendar-body-label{color:rgba(255,255,255,.7)}\\n.mat-calendar-body-cell-content{color:#fff;border-color:transparent}\\n.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){color:rgba(255,255,255,.5)}\\n.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:rgba(255,255,255,.04)}\\n.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(255,255,255,.5)}\\n.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(255,255,255,.3)}\\n.mat-calendar-body-selected{background-color:#7b1fa2;color:#fff}\\n.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(123,31,162,.4)}\\n.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}\\n.mat-datepicker-content{background-color:#424242;color:#fff}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-selected{background-color:#69f0ae;color:rgba(0,0,0,.87)}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(105,240,174,.4)}\\n.mat-datepicker-content.mat-accent .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px rgba(0,0,0,.87)}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-selected{background-color:#f44336;color:#fff}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(244,67,54,.4)}\\n.mat-datepicker-content.mat-warn .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px #fff}\\n.mat-datepicker-toggle-active{color:#7b1fa2}\\n.mat-datepicker-toggle-active.mat-accent{color:#69f0ae}\\n.mat-datepicker-toggle-active.mat-warn{color:#f44336}\\n.mat-dialog-container{background:#424242;color:#fff}\\n.mat-divider{border-top-color:rgba(255,255,255,.12)}\\n.mat-divider-vertical{border-right-color:rgba(255,255,255,.12)}\\n.mat-expansion-panel{background:#424242;color:#fff}\\n.mat-action-row{border-top-color:rgba(255,255,255,.12)}\\n.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:rgba(255,255,255,.04)}\\n@media (hover:none){.mat-expansion-panel:not(.mat-expanded):not([aria-disabled=true]) .mat-expansion-panel-header:hover{background:#424242}}\\n.mat-expansion-panel-header-title{color:#fff}\\n.mat-expansion-indicator::after,.mat-expansion-panel-header-description{color:rgba(255,255,255,.7)}\\n.mat-expansion-panel-header[aria-disabled=true]{color:rgba(255,255,255,.3)}\\n.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title{color:inherit}\\n.mat-form-field-label{color:rgba(255,255,255,.7)}\\n.mat-hint{color:rgba(255,255,255,.7)}\\n.mat-form-field.mat-focused .mat-form-field-label{color:#7b1fa2}\\n.mat-form-field.mat-focused .mat-form-field-label.mat-accent{color:#69f0ae}\\n.mat-form-field.mat-focused .mat-form-field-label.mat-warn{color:#f44336}\\n.mat-focused .mat-form-field-required-marker{color:#69f0ae}\\n.mat-form-field-ripple{background-color:#fff}\\n.mat-form-field.mat-focused .mat-form-field-ripple{background-color:#7b1fa2}\\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-accent{background-color:#69f0ae}\\n.mat-form-field.mat-focused .mat-form-field-ripple.mat-warn{background-color:#f44336}\\n.mat-form-field.mat-form-field-invalid .mat-form-field-label{color:#f44336}\\n.mat-form-field.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker,.mat-form-field.mat-form-field-invalid .mat-form-field-label.mat-accent{color:#f44336}\\n.mat-form-field.mat-form-field-invalid .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple.mat-accent{background-color:#f44336}\\n.mat-error{color:#f44336}\\n.mat-form-field-appearance-legacy .mat-form-field-label{color:rgba(255,255,255,.7)}\\n.mat-form-field-appearance-legacy .mat-hint{color:rgba(255,255,255,.7)}\\n.mat-form-field-appearance-legacy .mat-form-field-underline{background-color:rgba(255,255,255,.7)}\\n.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right,rgba(255,255,255,.7) 0,rgba(255,255,255,.7) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}\\n.mat-form-field-appearance-standard .mat-form-field-underline{background-color:rgba(255,255,255,.7)}\\n.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right,rgba(255,255,255,.7) 0,rgba(255,255,255,.7) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x}\\n.mat-form-field-appearance-fill .mat-form-field-flex{background-color:rgba(255,255,255,.1)}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-flex{background-color:rgba(255,255,255,.05)}\\n.mat-form-field-appearance-fill .mat-form-field-underline::before{background-color:rgba(255,255,255,.5)}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-label{color:rgba(255,255,255,.5)}\\n.mat-form-field-appearance-fill.mat-form-field-disabled .mat-form-field-underline::before{background-color:transparent}\\n.mat-form-field-appearance-outline .mat-form-field-outline{color:rgba(255,255,255,.3)}\\n.mat-form-field-appearance-outline .mat-form-field-outline-thick{color:#fff}\\n.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:#7b1fa2}\\n.mat-form-field-appearance-outline.mat-focused.mat-accent .mat-form-field-outline-thick{color:#69f0ae}\\n.mat-form-field-appearance-outline.mat-focused.mat-warn .mat-form-field-outline-thick{color:#f44336}\\n.mat-form-field-appearance-outline.mat-form-field-invalid.mat-form-field-invalid .mat-form-field-outline-thick{color:#f44336}\\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-label{color:rgba(255,255,255,.5)}\\n.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{color:rgba(255,255,255,.15)}\\n.mat-icon.mat-primary{color:#7b1fa2}\\n.mat-icon.mat-accent{color:#69f0ae}\\n.mat-icon.mat-warn{color:#f44336}\\n.mat-input-element:disabled{color:rgba(255,255,255,.5)}\\n.mat-input-element{caret-color:#7b1fa2}\\n.mat-input-element::-webkit-input-placeholder{color:rgba(255,255,255,.5)}\\n.mat-input-element:-ms-input-placeholder{color:rgba(255,255,255,.5)}\\n.mat-input-element::-ms-input-placeholder{color:rgba(255,255,255,.5)}\\n.mat-input-element::placeholder{color:rgba(255,255,255,.5)}\\n.mat-input-element::-moz-placeholder{color:rgba(255,255,255,.5)}\\n.mat-input-element::-webkit-input-placeholder{color:rgba(255,255,255,.5)}\\n.mat-input-element:-ms-input-placeholder{color:rgba(255,255,255,.5)}\\n.mat-accent .mat-input-element{caret-color:#69f0ae}\\n.mat-form-field-invalid .mat-input-element,.mat-warn .mat-input-element{caret-color:#f44336}\\n.mat-list .mat-list-item,.mat-nav-list .mat-list-item,.mat-selection-list .mat-list-item{color:#fff}\\n.mat-list .mat-list-option,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-option{color:#fff}\\n.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{color:rgba(255,255,255,.7)}\\n.mat-list-item-disabled{background-color:#000}\\n.mat-list-option.mat-list-item-focus,.mat-list-option:hover,.mat-nav-list .mat-list-item.mat-list-item-focus,.mat-nav-list .mat-list-item:hover{background:rgba(255,255,255,.04)}\\n.mat-menu-panel{background:#424242}\\n.mat-menu-item{background:0 0;color:#fff}\\n.mat-menu-item[disabled],.mat-menu-item[disabled]::after{color:rgba(255,255,255,.5)}\\n.mat-menu-item .mat-icon:not([color]),.mat-menu-item-submenu-trigger::after{color:#fff}\\n.mat-menu-item-highlighted:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item:hover:not([disabled]){background:rgba(255,255,255,.04)}\\n.mat-paginator{background:#424242}\\n.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(255,255,255,.7)}\\n.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid #fff;border-right:2px solid #fff}\\n.mat-paginator-first,.mat-paginator-last{border-top:2px solid #fff}\\n.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(255,255,255,.5)}\\n.mat-progress-bar-background{fill:#9c27b0}\\n.mat-progress-bar-buffer{background-color:#9c27b0}\\n.mat-progress-bar-fill::after{background-color:#7b1fa2}\\n.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#b9f6ca}\\n.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#b9f6ca}\\n.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#69f0ae}\\n.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#ffcdd2}\\n.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#ffcdd2}\\n.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#f44336}\\n.mat-progress-spinner circle,.mat-spinner circle{stroke:#7b1fa2}\\n.mat-progress-spinner.mat-accent circle,.mat-spinner.mat-accent circle{stroke:#69f0ae}\\n.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#f44336}\\n.mat-radio-outer-circle{border-color:rgba(255,255,255,.7)}\\n.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#7b1fa2}\\n.mat-radio-button.mat-primary .mat-radio-inner-circle{background-color:#7b1fa2}\\n.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element{background-color:rgba(123,31,162,.26)}\\n.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#69f0ae}\\n.mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#69f0ae}\\n.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element{background-color:rgba(105,240,174,.26)}\\n.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#f44336}\\n.mat-radio-button.mat-warn .mat-radio-inner-circle{background-color:#f44336}\\n.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element{background-color:rgba(244,67,54,.26)}\\n.mat-radio-button.mat-radio-disabled .mat-radio-outer-circle,.mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-outer-circle{border-color:rgba(255,255,255,.5)}\\n.mat-radio-button.mat-radio-disabled .mat-radio-inner-circle,.mat-radio-button.mat-radio-disabled .mat-radio-ripple .mat-ripple-element{background-color:rgba(255,255,255,.5)}\\n.mat-radio-button.mat-radio-disabled .mat-radio-label-content{color:rgba(255,255,255,.5)}\\n.mat-select-content,.mat-select-panel-done-animating{background:#424242}\\n.mat-select-value{color:#fff}\\n.mat-select-placeholder{color:rgba(255,255,255,.5)}\\n.mat-select-disabled .mat-select-value{color:rgba(255,255,255,.5)}\\n.mat-select-arrow{color:rgba(255,255,255,.7)}\\n.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(255,255,255,.12)}\\n.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#7b1fa2}\\n.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#69f0ae}\\n.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#f44336}\\n.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#f44336}\\n.mat-form-field .mat-select.mat-select-disabled .mat-select-arrow{color:rgba(255,255,255,.5)}\\n.mat-drawer-container{background-color:#303030;color:#fff}\\n.mat-drawer{background-color:#424242;color:#fff}\\n.mat-drawer.mat-drawer-push{background-color:#424242}\\n.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(189,189,189,.6)}\\n.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#a5d6a7}\\n.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(165,214,167,.5)}\\n.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:rgba(255,255,255,.12)}\\n.mat-slide-toggle .mat-ripple-element{background-color:rgba(165,214,167,.12)}\\n.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#ce93d8}\\n.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(206,147,216,.5)}\\n.mat-slide-toggle.mat-primary:not(.mat-checked) .mat-ripple-element{background-color:rgba(255,255,255,.12)}\\n.mat-slide-toggle.mat-primary .mat-ripple-element{background-color:rgba(206,147,216,.12)}\\n.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#ef9a9a}\\n.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(239,154,154,.5)}\\n.mat-slide-toggle.mat-warn:not(.mat-checked) .mat-ripple-element{background-color:rgba(255,255,255,.12)}\\n.mat-slide-toggle.mat-warn .mat-ripple-element{background-color:rgba(239,154,154,.12)}\\n.mat-disabled .mat-slide-toggle-thumb{background-color:#424242}\\n.mat-disabled .mat-slide-toggle-bar{background-color:rgba(255,255,255,.12)}\\n.mat-slide-toggle-thumb{background-color:#bdbdbd}\\n.mat-slide-toggle-bar{background-color:rgba(255,255,255,.5)}\\n.mat-slider-track-background{background-color:rgba(255,255,255,.3)}\\n.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label,.mat-primary .mat-slider-track-fill{background-color:#7b1fa2}\\n.mat-primary .mat-slider-thumb-label-text{color:#fff}\\n.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label,.mat-accent .mat-slider-track-fill{background-color:#69f0ae}\\n.mat-accent .mat-slider-thumb-label-text{color:rgba(0,0,0,.87)}\\n.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label,.mat-warn .mat-slider-track-fill{background-color:#f44336}\\n.mat-warn .mat-slider-thumb-label-text{color:#fff}\\n.mat-slider-focus-ring{background-color:rgba(105,240,174,.2)}\\n.cdk-focused .mat-slider-track-background,.mat-slider:hover .mat-slider-track-background{background-color:rgba(255,255,255,.3)}\\n.mat-slider-disabled .mat-slider-thumb,.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill{background-color:rgba(255,255,255,.3)}\\n.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(255,255,255,.3)}\\n.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(255,255,255,.12)}\\n.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb-label{background-color:#fff}\\n.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(255,255,255,.3)}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(255,255,255,.3);background-color:transparent}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb{border-color:rgba(255,255,255,.3)}\\n.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb{border-color:rgba(255,255,255,.3)}\\n.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(255,255,255,.7)}\\n.mat-slider-horizontal .mat-slider-ticks{background-image:repeating-linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7) 2px,transparent 0,transparent);background-image:-moz-repeating-linear-gradient(.0001deg,rgba(255,255,255,.7),rgba(255,255,255,.7) 2px,transparent 0,transparent)}\\n.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom,rgba(255,255,255,.7),rgba(255,255,255,.7) 2px,transparent 0,transparent)}\\n.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(255,255,255,.04)}\\n.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(255,255,255,.5)}\\n.mat-step-header .mat-step-icon{background-color:#7b1fa2;color:#fff}\\n.mat-step-header .mat-step-icon-not-touched{background-color:rgba(255,255,255,.5);color:#fff}\\n.mat-step-header .mat-step-label.mat-step-label-active{color:#fff}\\n.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#424242}\\n.mat-stepper-vertical-line::before{border-left-color:rgba(255,255,255,.12)}\\n.mat-stepper-horizontal-line{border-top-color:rgba(255,255,255,.12)}\\n.mat-sort-header-arrow{color:#c6c6c6}\\n.mat-tab-header,.mat-tab-nav-bar{border-bottom:1px solid rgba(255,255,255,.12)}\\n.mat-tab-group-inverted-header .mat-tab-header,.mat-tab-group-inverted-header .mat-tab-nav-bar{border-top:1px solid rgba(255,255,255,.12);border-bottom:none}\\n.mat-tab-label,.mat-tab-link{color:#fff}\\n.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.5)}\\n.mat-tab-header-pagination-chevron{border-color:#fff}\\n.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,.5)}\\n.mat-tab-group[class*=mat-background-] .mat-tab-header,.mat-tab-nav-bar[class*=mat-background-]{border-bottom:none;border-top:none}\\n.mat-tab-group.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(156,39,176,.3)}\\n.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#7b1fa2}\\n.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar{background-color:#fff}\\n.mat-tab-group.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(185,246,202,.3)}\\n.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#69f0ae}\\n.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar{background-color:rgba(0,0,0,.87)}\\n.mat-tab-group.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}\\n.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#f44336}\\n.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar{background-color:#fff}\\n.mat-tab-group.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-primary .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(156,39,176,.3)}\\n.mat-tab-group.mat-background-primary .mat-tab-header,.mat-tab-group.mat-background-primary .mat-tab-links,.mat-tab-nav-bar.mat-background-primary .mat-tab-header,.mat-tab-nav-bar.mat-background-primary .mat-tab-links{background-color:#7b1fa2}\\n.mat-tab-group.mat-background-primary .mat-tab-label,.mat-tab-group.mat-background-primary .mat-tab-link,.mat-tab-nav-bar.mat-background-primary .mat-tab-label,.mat-tab-nav-bar.mat-background-primary .mat-tab-link{color:#fff}\\n.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}\\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron{border-color:#fff}\\n.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,.4)}\\n.mat-tab-group.mat-background-primary .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary .mat-ripple-element{background-color:rgba(255,255,255,.12)}\\n.mat-tab-group.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-accent .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(185,246,202,.3)}\\n.mat-tab-group.mat-background-accent .mat-tab-header,.mat-tab-group.mat-background-accent .mat-tab-links,.mat-tab-nav-bar.mat-background-accent .mat-tab-header,.mat-tab-nav-bar.mat-background-accent .mat-tab-links{background-color:#69f0ae}\\n.mat-tab-group.mat-background-accent .mat-tab-label,.mat-tab-group.mat-background-accent .mat-tab-link,.mat-tab-nav-bar.mat-background-accent .mat-tab-label,.mat-tab-nav-bar.mat-background-accent .mat-tab-link{color:rgba(0,0,0,.87)}\\n.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,.4)}\\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.87)}\\n.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,.4)}\\n.mat-tab-group.mat-background-accent .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent .mat-ripple-element{background-color:rgba(0,0,0,.12)}\\n.mat-tab-group.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-group.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-label.cdk-program-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-keyboard-focused:not(.mat-tab-disabled),.mat-tab-nav-bar.mat-background-warn .mat-tab-link.cdk-program-focused:not(.mat-tab-disabled){background-color:rgba(255,205,210,.3)}\\n.mat-tab-group.mat-background-warn .mat-tab-header,.mat-tab-group.mat-background-warn .mat-tab-links,.mat-tab-nav-bar.mat-background-warn .mat-tab-header,.mat-tab-nav-bar.mat-background-warn .mat-tab-links{background-color:#f44336}\\n.mat-tab-group.mat-background-warn .mat-tab-label,.mat-tab-group.mat-background-warn .mat-tab-link,.mat-tab-nav-bar.mat-background-warn .mat-tab-label,.mat-tab-nav-bar.mat-background-warn .mat-tab-link{color:#fff}\\n.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,.4)}\\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron{border-color:#fff}\\n.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,.4)}\\n.mat-tab-group.mat-background-warn .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn .mat-ripple-element{background-color:rgba(255,255,255,.12)}\\n.mat-toolbar{background:#212121;color:#fff}\\n.mat-toolbar.mat-primary{background:#7b1fa2;color:#fff}\\n.mat-toolbar.mat-accent{background:#69f0ae;color:rgba(0,0,0,.87)}\\n.mat-toolbar.mat-warn{background:#f44336;color:#fff}\\n.mat-toolbar .mat-focused .mat-form-field-ripple,.mat-toolbar .mat-form-field-ripple,.mat-toolbar .mat-form-field-underline{background-color:currentColor}\\n.mat-toolbar .mat-focused .mat-form-field-label,.mat-toolbar .mat-form-field-label,.mat-toolbar .mat-form-field.mat-focused .mat-select-arrow,.mat-toolbar .mat-select-arrow,.mat-toolbar .mat-select-value{color:inherit}\\n.mat-toolbar .mat-input-element{caret-color:currentColor}\\n.mat-tooltip{background:rgba(97,97,97,.9)}\\n.mat-tree{background:#424242}\\n.mat-tree-node{color:#fff}\\n.mat-snack-bar-container{background:#fafafa;color:rgba(0,0,0,.87)}\\n.mat-simple-snackbar-action{color:inherit}\\nhtml {\\n  /* position: relative; */\\n  /* height: 100%; */\\n  /* position: relative;\\n  height: 100vh; */\\n}\\nbody {\\n  width: 100%;\\n  padding-top: 84px;\\n  overflow-x: hidden;\\n  background-color: rgb(70, 70, 70);\\n  /* min-height: 100vh; */\\n  /* height: 100%; */\\n  /* margin: 0px;\\n  padding: 0px; */\\n  /* position: absolute; */\\n  /* top:0; \\n  bottom:0; \\n  right:0; \\n  left:0; */\\n  /* background-color: blue; */\\n}\\nbody.noscroll {\\n  overflow: hidden;\\n}\\nbody:-ms-fullscreen { \\n  overflow: auto; /* fix for IE11 scrollbar */\\n  overflow-x: hidden;\\n}\\n.mat-icon-button {\\n  outline: none;\\n}\\n.mat-icon-button:focus {\\n  outline: none;\\n}\\n/* .ngx-datatable.material .datatable-header .datatable-header-cell {\\n  padding: 4px !important;\\n}\\n\\n.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell {\\n  font-size: 11px;\\n  text-align: left;\\n}\\n\\n.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap {\\n  padding: 0px;\\n}\\n\\n.ngx-datatable .datatable-header {\\n  background-color: #fff;\\n  color: #000;\\n} */\\n.ngx-datatable.scroll-vertical {\\n  height: 170px;\\n}\\n.ngx-datatable .datatable-scroll {\\n  width: 100% !important;\\n}\\n.ngx-datatable.material {\\n  background-color: transparent !important;\\n  box-shadow: none !important;\\n}\\n.ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-cell,\\n.ngx-datatable.material .datatable-header .datatable-header-cell {\\n  padding: 5px 0.3rem !important;\\n  border-right: 1px solid rgba(0, 0, 0, 0.3);\\n}\\n.ngx-datatable .datatable-body-row.new-row-data .animate-cell {\\n  -webkit-animation: flash linear 1s 10;\\n          animation: flash linear 1s 10;\\n}\\n.ngx-datatable .datatable-body-row.alert-row-data {\\n  -webkit-animation: flash linear 1s 10;\\n          animation: flash linear 1s 10;\\n}\\n@-webkit-keyframes flash {\\n\\t0% { background-color: rgba(255, 255, 25); }\\n\\t50% { background-color: rgb(243, 203, 71); }\\n\\t100% { background-color: rgb(255, 255, 255); }\\n}\\n@keyframes flash {\\n\\t0% { background-color: rgba(255, 255, 25); }\\n\\t50% { background-color: rgb(243, 203, 71); }\\n\\t100% { background-color: rgb(255, 255, 255); }\\n}\\n.ngx-datatable .datatable-row-even {\\n  background-color: #d0cece;\\n}\\n.ngx-datatable .datatable-row-odd {\\n  background-color: #fff;\\n}\\n.cursor-pointer {\\n  cursor: pointer;\\n}\\n.ngx-datatable.material .empty-row {\\n  color: #dbdddd;\\n  text-align: center;\\n}\\n.ngx-datatable .word-wrap {\\n  white-space: pre-wrap !important;\\n  display: block !important;\\n  word-break: break-all !important;\\n}\\n.ngx-datatable .datatable-header {\\n  background-color: #595959;\\n}\\n.ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-cell {\\n  color: #000;\\n}\\n.ngx-datatable .datatable-header .datatable-header-cell {\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n      -ms-user-select: none;\\n          user-select: none;\\n}\\n.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap {\\n  color: #dbdddd;\\n}\\n/* #widget-dashboard-card {\\n  position: absolute;\\n  top: 3px;\\n  left: 3px;\\n  right: 3px;\\n  bottom: 3px;\\n  background-color: #041D44;\\n  color: white;\\n  padding: 2px;\\n} */\\n/* bottom: 10px; \\n      background-color: sienna;\\n      color: white; */\\n/* background-color: rgb(32, 31, 31); */\\n/* .widget-more-button {\\n  position: absolute;\\n  top: 5px;\\n  right: 10px;\\n} */\\n/* #widget-dashboard-card-content {\\n  text-align: center;\\n  overflow-y: auto;\\n  height: 180px;\\n} */\\n/* #widget-mat-card-header {\\n  background-color: #041D44;\\n} */\\n/* background-color: rgb(32, 31, 31); */\\n/* KPI matrix */\\n/* \\n.widget-metrics {\\n  width: 95%;\\n  margin: 10px auto;\\n} */\\n/* left: 5px; */\\n/* margin-top: 8px; */\\n/* .widget-box {\\n  height: 45px;\\n  width: 100px;\\n  margin: 5px 10px;\\n  color: #FFFFFF;\\n  text-align: center;\\n  display: inline-block;\\n} */\\n/* font-weight: bold; */\\n/* float: right; */\\n/* background-color: #1FAAAA; */\\n/* .widget-head {\\n  padding: 2px;\\n  font-size: 11px;\\n  border-radius: 10px;\\n  border: 1px solid gray;\\n  box-shadow: 0 0 10px gray;\\n  font-weight: bold;\\n} */\\n\\n\\n\\n/*# sourceMappingURL=data:application/json;base64,  */\"", '', '']]"",""\nvar content = require(\""!!../../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../../postcss-loader/src/index.js??embedded!./icons.css\"");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\""hmr\"":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\""!../../../../style-loader/lib/addStyles.js\"")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\""!!../../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../../postcss-loader/src/index.js??embedded!./icons.css\"", function() {\n\t\tvar newContent = require(\""!!../../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../../postcss-loader/src/index.js??embedded!./icons.css\"");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}"",""\nvar content = require(\""!!../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../postcss-loader/src/index.js??embedded!./index.css\"");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\""hmr\"":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\""!../../../style-loader/lib/addStyles.js\"")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\""!!../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../postcss-loader/src/index.js??embedded!./index.css\"", function() {\n\t\tvar newContent = require(\""!!../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../postcss-loader/src/index.js??embedded!./index.css\"");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}"",""\nvar content = require(\""!!../../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../../postcss-loader/src/index.js??embedded!./material.css\"");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\""hmr\"":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\""!../../../../style-loader/lib/addStyles.js\"")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\""!!../../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../../postcss-loader/src/index.js??embedded!./material.css\"", function() {\n\t\tvar newContent = require(\""!!../../../../@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../../../../postcss-loader/src/index.js??embedded!./material.css\"");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}"",""/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \""undefined\"") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n  if (parent){\n    return parent.querySelector(target);\n  }\n  return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n                // If passing function in options, then use it for resolve \""head\"" element.\n                // Useful for Shadow Root style i.e\n                // {\n                //   insertInto: function () { return document.querySelector(\""#foo\"").shadowRoot }\n                // }\n                if (typeof target === 'function') {\n                        return target();\n                }\n                if (typeof memo[target] === \""undefined\"") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\""./urls\"");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \""undefined\"" && DEBUG) {\n\t\tif (typeof document !== \""object\"") throw new Error(\""The style-loader cannot be used in a non-browser environment\"");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \""object\"" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \""boolean\"") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n        if (!options.insertInto) options.insertInto = \""head\"";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \""bottom\"";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\""Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\"");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \""top\"") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \""bottom\"") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \""object\"" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertAt.before, target);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\""[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\"");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\""style\"");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \""text/css\"";\n\t}\n\n\tif(options.attrs.nonce === undefined) {\n\t\tvar nonce = getNonce();\n\t\tif (nonce) {\n\t\t\toptions.attrs.nonce = nonce;\n\t\t}\n\t}\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\""link\"");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \""text/css\"";\n\t}\n\toptions.attrs.rel = \""stylesheet\"";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction getNonce() {\n\tif (typeof __webpack_nonce__ === 'undefined') {\n\t\treturn null;\n\t}\n\n\treturn __webpack_nonce__;\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t    result = typeof options.transform === 'function'\n\t\t ? options.transform(obj.css) \n\t\t : options.transform.default(obj.css);\n\n\t    if (result) {\n\t    \t// If transform returns a value, use that instead of the original css.\n\t    \t// This allows running runtime transformations on the css.\n\t    \tobj.css = result;\n\t    } else {\n\t    \t// If the transform function returns a falsy value, don't add this css.\n\t    \t// This allows conditional loading of css\n\t    \treturn function() {\n\t    \t\t// noop\n\t    \t};\n\t    }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \""function\"" &&\n\t\ttypeof URL.createObjectURL === \""function\"" &&\n\t\ttypeof URL.revokeObjectURL === \""function\"" &&\n\t\ttypeof Blob === \""function\"" &&\n\t\ttypeof btoa === \""function\""\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \""\"" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\""media\"", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default.  Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \""\\n/*# sourceMappingURL=data:application/json;base64,\"" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \"" */\"";\n\t}\n\n\tvar blob = new Blob([css], { type: \""text/css\"" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n"",""\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \""fixes\"" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n  // get current location\n  var location = typeof window !== \""undefined\"" && window.location;\n\n  if (!location) {\n    throw new Error(\""fixUrls requires window.location\"");\n  }\n\n\t// blank or null?\n\tif (!css || typeof css !== \""string\"") {\n\t  return css;\n  }\n\n  var baseUrl = location.protocol + \""//\"" + location.host;\n  var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \""/\"");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\(  = Match on the word \""url\"" with any whitespace after it and then a parens\n\t   (  = Start a capturing group\n\t     (?:  = Start a non-capturing group\n\t         [^)(]  = Match anything that isn't a parentheses\n\t         |  = OR\n\t         \\(  = Match a start parentheses\n\t             (?:  = Start another non-capturing groups\n\t                 [^)(]+  = Match anything that isn't a parentheses\n\t                 |  = OR\n\t                 \\(  = Match a start parentheses\n\t                     [^)(]*  = Match anything that isn't a parentheses\n\t                 \\)  = Match a end parentheses\n\t             )  = End Group\n              *\\) = Match anything and then a close parens\n          )  = Close non-capturing group\n          *  = Match anything\n       )  = Close capturing group\n\t \\)  = Match a close parens\n\n\t /gi  = Get all matches, not the first.  Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\""(.*)\""$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t  return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\""//\"") === 0) {\n\t\t  \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\""/\"") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \""\""); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \""url(\"" + JSON.stringify(newUrl) + \"")\"";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n"",""\nvar content = require(\""!!../node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../node_modules/postcss-loader/src/index.js??embedded!./styles.css\"");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\""hmr\"":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\""!../node_modules/style-loader/lib/addStyles.js\"")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\""!!../node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../node_modules/postcss-loader/src/index.js??embedded!./styles.css\"", function() {\n\t\tvar newContent = require(\""!!../node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!../node_modules/postcss-loader/src/index.js??embedded!./styles.css\"");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}""],""sourceRoot"":""""}"
4ce2c344533e8e6b583ff481b638dac3dc5eee69,12801463,        # Reference: https://stackoverflow.com/questions/12801463/capture-and-assert-meta-tags-in-rspec
00e2668c0dcae832f3cddf2cd245807f5aa7de5c,5499256,; put and get from https://stackoverflow.com/a/5499256
e36a29b1e9970dbd5e8ce99a7742b091ab4e79f0,13351965,"Note: You need the --harmony <a href=""http://stackoverflow.com/questions/13351965/what-does-node-harmony-do"">flag</a> with Node v5+ or Node v4."
edbdc9b12cb0934e4d56057ca9ff0351859aa98e,8649003,                // http://stackoverflow.com/a/8649003/835696
86a291aa1c66dbd41a9323363433adac03a6ed83,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
5f8f42cf8452a78bede6ecac8eb571f885ba2585,17874360,    # http://stackoverflow.com/questions/17874360/python-how-to-parse-the-body-from-a-raw-email-given-that-raw-email-does-not
2ad8614efe0261895d720b756d289c1c101acc4b,9655080, *  @see http://stackoverflow.com/questions/9655080/scala-operator-oddity
8ee91564fb326b21fcaea1c41e48bf3048edec46,3561493 181348,"{""version"":3,""sources"":[""webpack:///./node_modules/react-social-sharing/dist-es6/svg/pinterest.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/twitter.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/mail.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/tumblr.js"",""webpack:///./node_modules/core-js/modules/es6.string.small.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/google.js"",""webpack:///./node_modules/@emotion/memoize/dist/memoize.browser.esm.js"",""webpack:///./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/hacker.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/reddit.js"",""webpack:///./node_modules/is-what/dist/index.esm.js"",""webpack:///./node_modules/merge-anything/dist/index.esm.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/factory.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/vk.js"",""webpack:///./src/components/Post/Author/Author.js"",""webpack:///./src/components/Post/Content/Content.js"",""webpack:///./src/components/Post/Meta/Meta.js"",""webpack:///./src/components/Post/Tags/Tags.js"",""webpack:///./src/components/Post/Post.js"",""webpack:///./src/templates/post-template.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/twitter.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/telegram.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/telegram.js"",""webpack:///./node_modules/@emotion/unitless/dist/unitless.browser.esm.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/common.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/whatsapp.js"",""webpack:///./node_modules/stylis-rule-sheet/index.js"",""webpack:///./node_modules/react-is/index.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/linkedin.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/tumblr.js"",""webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/xing.js"",""webpack:///(webpack)/buildin/module.js"",""webpack:///./node_modules/stylis/stylis.min.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/whatsapp.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/index.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/xing.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/vk.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/facebook.js"",""webpack:///./node_modules/core-js/modules/es6.date.to-iso-string.js"",""webpack:///./node_modules/core-js/modules/_date-to-iso-string.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/google.js"",""webpack:///./node_modules/core-js/modules/es6.array.last-index-of.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/reddit.js"",""webpack:///./node_modules/core-js/modules/es6.string.big.js"",""webpack:///./node_modules/react-is/cjs/react-is.production.min.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/linkedin.js"",""webpack:///./node_modules/styled-is/dist/styled-is.es.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/consts.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/pinterest.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/facebook.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/buttons/wrapper.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/mail.js"",""webpack:///./node_modules/styled-components/dist/styled-components.browser.esm.js"",""webpack:///./node_modules/moment/moment.js"",""webpack:///./node_modules/react-social-sharing/dist-es6/svg/hacker.js""],""names"":[""Object"",""defineProperty"",""exports"",""value"",""PinterestIconCircleSolid"",""PinterestIconCircle"",""PinterestIconFill"",""undefined"",""obj"",""_react"",""_react2"",""__esModule"",""createElement"",""xmlns"",""viewBox"",""d"",""cx"",""cy"",""r"",""TwitterIconCircle"",""TwitterIconFill"",""strings"",""raw"",""_extends"",""assign"",""target"",""i"",""arguments"",""length"",""source"",""key"",""prototype"",""hasOwnProperty"",""call"",""_templateObject"",""freeze"",""defineProperties"",""_interopRequireDefault"",""_styledComponents2"",""_factory2"",""_mail"",""_common"",""_consts2"",""Email"",""SharingButton"",""_ref"",""link"",""subject"",""body"",""props"",""keys"",""indexOf"",""_objectWithoutProperties"",""name"",""href"",""mail"",""buttonComponent"",""iconFill"",""EmailIconFill"",""iconCircle"",""EmailIconCircle"",""iconCircleSolid"",""EmailIconCircleSolid"",""_tumblr"",""Tumblr"",""tumblr"",""TumblrIconFill"",""TumblrIconCircle"",""createHTML"",""this"",""GoogleIconCircle"",""GoogleIconFill"",""reactPropsRegex"",""index"",""fn"",""cache"",""arg"",""prop"",""test"",""charCodeAt"",""_hacker"",""Hacker"",""message"",""hacker"",""HackerIconFill"",""HackerIconCircle"",""HackerIconCircleSolid"",""_reddit"",""Reddit"",""reddit"",""RedditIconFill"",""RedditIconCircle"",""RedditIconCircleSolid"",""getType"",""payload"",""toString"",""slice"",""isPlainObject"",""constructor"",""getPrototypeOf"",""isArray"",""isSymbol"",""__spreadArrays"",""s"",""il"",""Array"",""k"",""a"",""j"",""jl"",""assignProp"",""carry"",""newVal"",""originalObject"",""propType"",""propertyIsEnumerable"",""enumerable"",""writable"",""configurable"",""origin"",""newComers"",""_i"",""extensions"",""base"",""reduce"",""result"",""newComer"",""mergeRecursively"",""forEach"",""extend"",""newObject"",""getOwnPropertyNames"",""getOwnPropertySymbols"",""targetVal"",""includes"",""_wrapper2"",""small"",""solid"",""medium"",""big"",""circle"",""solidcircle"",""simple"",""simpleReverse"",""Button"",""IconFill"",""IconCircle"",""IconCircleSolid"",""ariaName"",""label"",""_ref$target"",""usedLabel"",""Link"",""rel"",""title"",""Icon"",""VKIconCircleSolid"",""VKIconCircle"",""VKIconFill"",""strokeWidth"",""Author"",""author"",""useSiteMetadata"",""className"",""styles"",""bio"",""Content"",""dangerouslySetInnerHTML"",""__html"",""Meta"",""date"",""moment"",""format"",""Tags"",""tags"",""tagSlugs"",""map"",""slug"",""to"",""Post"",""post"",""html"",""fields"",""frontmatter"",""url"",""query"",""PostTemplate"",""data"",""siteTitle"",""siteSubtitle"",""subtitle"",""markdownRemark"",""postTitle"",""postDescription"",""description"",""socialImage"",""metaDescription"",""Layout"",""_twitter"",""Twitter"",""twitter"",""TelegramIconCircleSolid"",""TelegramIconCircle"",""TelegramIconFill"",""fillRule"",""_telegram"",""Telegram"",""telegram"",""animationIterationCount"",""borderImageOutset"",""borderImageSlice"",""borderImageWidth"",""boxFlex"",""boxFlexGroup"",""boxOrdinalGroup"",""columnCount"",""columns"",""flex"",""flexGrow"",""flexPositive"",""flexShrink"",""flexNegative"",""flexOrder"",""gridRow"",""gridRowEnd"",""gridRowSpan"",""gridRowStart"",""gridColumn"",""gridColumnEnd"",""gridColumnSpan"",""gridColumnStart"",""msGridRow"",""msGridRowSpan"",""msGridColumn"",""msGridColumnSpan"",""fontWeight"",""lineHeight"",""opacity"",""order"",""orphans"",""tabSize"",""widows"",""zIndex"",""zoom"",""WebkitLineClamp"",""fillOpacity"",""floodOpacity"",""stopOpacity"",""strokeDasharray"",""strokeDashoffset"",""strokeMiterlimit"",""strokeOpacity"",""_taggedTemplateLiteral"",""_templateObject2"",""_templateObject3"",""_templateObject4"",""_templateObject5"",""_templateObject6"",""_templateObject7"",""_styledIs"",""_styledIs2"",""div"",""isOr"",""_whatsapp"",""Whatsapp"",""whatsapp"",""WhatsappIconFill"",""WhatsappIconCircle"",""WhatsappIconCircleSolid"",""module"",""insertRule"",""toSheet"",""block"",""e"",""context"",""content"",""selectors"",""parents"",""line"",""column"",""ns"",""depth"",""at"",""split"",""delimiter"",""factory"",""LinkedinIconCircleSolid"",""LinkedinIconCircle"",""LinkedinIconFill"",""version"",""x"",""y"",""width"",""height"",""enableBackground"",""xmlSpace"",""areInputsEqual"",""newInputs"",""lastInputs"",""resultFn"",""isEqual"",""lastThis"",""lastResult"",""lastArgs"",""calledOnce"",""newArgs"",""apply"",""_xing"",""Xing"",""xing"",""XingIconFill"",""XingIconCircle"",""XingIconCircleSolid"",""webpackPolyfill"",""deprecate"",""paths"",""children"",""get"",""l"",""c"",""t"",""f"",""n"",""o"",""h"",""u"",""b"",""p"",""g"",""A"",""C"",""w"",""v"",""m"",""$"",""O"",""z"",""N"",""S"",""F"",""W"",""q"",""B"",""D"",""E"",""G"",""H"",""I"",""J"",""K"",""L"",""M"",""P"",""Q"",""R"",""T"",""U"",""V"",""X"",""Y"",""Z"",""_"",""ee"",""ae"",""re"",""ce"",""se"",""te"",""ie"",""fe"",""ne"",""le"",""oe"",""he"",""ue"",""de"",""be"",""pe"",""ke"",""ge"",""Ae"",""Ce"",""we"",""ve"",""me"",""xe"",""$e"",""ye"",""Oe"",""je"",""ze"",""Ne"",""Se"",""Fe"",""We"",""qe"",""Be"",""De"",""Ee"",""Ge"",""He"",""Je"",""Re"",""Te"",""Ue"",""Ve"",""Xe"",""Ye"",""replace"",""trim"",""charAt"",""Qe"",""substring"",""Ie"",""Pe"",""join"",""Me"",""Le"",""Ke"",""isNaN"",""parseFloat"",""use"",""set"",""Facebook"",""Google"",""Mail"",""Pinterest"",""Linkedin"",""HackerNews"",""VK"",""_vk"",""vk"",""_facebook"",""facebook"",""FacebookIconFill"",""FacebookIconCircle"",""$export"",""toISOString"",""Date"",""fails"",""getTime"",""$toISOString"",""lz"",""num"",""NaN"",""isFinite"",""RangeError"",""getUTCFullYear"",""getUTCMilliseconds"",""Math"",""abs"",""getUTCMonth"",""getUTCDate"",""getUTCHours"",""getUTCMinutes"",""getUTCSeconds"",""_google"",""google"",""toIObject"",""toInteger"",""toLength"",""$native"",""lastIndexOf"",""NEGATIVE_ZERO"",""searchElement"",""min"",""rx"",""ry"",""Symbol"",""$$typeof"",""type"",""typeOf"",""AsyncMode"",""ConcurrentMode"",""ContextConsumer"",""ContextProvider"",""Element"",""ForwardRef"",""Fragment"",""Lazy"",""Memo"",""Portal"",""Profiler"",""StrictMode"",""Suspense"",""isValidElementType"",""isAsyncMode"",""isConcurrentMode"",""isContextConsumer"",""isContextProvider"",""isElement"",""isForwardRef"",""isFragment"",""isLazy"",""isMemo"",""isPortal"",""isProfiler"",""isStrictMode"",""isSuspense"",""_linkedin"",""linkedin"",""_toConsumableArray"",""arr"",""arr2"",""_arrayWithoutHoles"",""iter"",""iterator"",""from"",""_iterableToArray"",""TypeError"",""_nonIterableSpread"",""styledIf"",""method"",""condition"",""_len"",""names"",""_key"",""_len2"",""args"",""_key2"",""Boolean"",""handleFunctions"",""css"",""output"",""argCss"",""unshift"",""is"",""isNot"",""isSomeNot"",""match"",""encodeURIComponent"",""pinterest"",""_pinterest"",""Fill"",""Circle"",""CircleSolid"",""buttonLabel"",""interleave"",""interpolations"",""len"",""push"",""_typeof"",""classCallCheck"",""instance"",""Constructor"",""createClass"",""descriptor"",""protoProps"",""staticProps"",""inherits"",""subClass"",""superClass"",""create"",""setPrototypeOf"",""__proto__"",""objectWithoutProperties"",""possibleConstructorReturn"",""self"",""ReferenceError"",""EMPTY_ARRAY"",""EMPTY_OBJECT"",""isFunction"",""getComponentName"",""displayName"",""isStyledComponent"",""styledComponentId"",""SC_ATTR"",""process"",""REACT_APP_SC_ATTR"",""IS_BROWSER"",""window"",""DISABLE_SPEEDY"",""SC_DISABLE_SPEEDY"",""REACT_APP_SC_DISABLE_SPEEDY"",""STATIC_EXECUTION_CONTEXT"",""StyledComponentsError"",""_Error"",""code"",""_this"",""Error"",""SC_COMPONENT_ID"",""extractComps"",""maybeCSS"",""existingComponents"",""componentId"",""matchIndex"",""nextComp"",""cssFromDOM"",""COMMENT_REGEX"",""stylisSplitter"",""global"",""cascade"",""keyframe"",""prefix"",""compress"",""semicolon"",""stylis"",""parsingRules"",""returnRulesPlugin"",""parsedRules"",""parseRulesPlugin"",""rule"",""_componentId"",""_selector"",""_selectorRegexp"",""selfReferenceReplacer"",""offset"",""string"",""splitByRules"",""stringifyRules"",""rules"",""selector"",""flatCSS"",""cssStr"",""RegExp"",""getNonce"",""addNameForId"",""id"",""resetIdNames"",""hasNameForId"",""stringifyNames"",""str"",""sheetForTag"",""tag"",""sheet"",""size"",""ownerDocument"",""styleSheets"",""ownerNode"",""safeInsertRule"",""cssRule"",""maxIndex"",""cssRules"",""err"",""makeTextMarker"",""addUpUntilIndex"",""sizes"",""totalUpToIndex"",""wrapAsHtmlTag"",""additionalAttrs"",""nonce"",""SC_VERSION_ATTR"",""filter"",""wrapAsElement"",""_props"",""getIdsFromMarkersFactory"",""markers"",""makeTextNode"",""targetDocument"",""createTextNode"",""makeServerTag"",""namesArg"",""markersArg"",""insertMarker"",""prev"",""cssForId"",""clone"",""namesClone"",""cloneNames"",""markersClone"",""getIds"",""insertRules"",""removeRules"",""marker"",""sealed"",""styleTag"",""toElement"",""toHTML"",""makeTag"",""tagEl"",""forceServer"",""insertBefore"",""getImportRuleTag"",""el"",""document"",""setAttribute"",""appendChild"",""parentNode"",""nextSibling"",""makeStyleTag"",""extractImport"",""usedImportRuleTag"",""importRules"",""cssRulesSize"",""mayHaveImport"",""separator"",""appendData"",""newMarker"",""replaceChild"",""makeBrowserTag"",""end"",""cssText"",""insertIndex"",""injectedRules"",""isConnected"",""removalIndex"",""lowerBound"",""deleteRule"",""deleteRules"",""makeSpeedyTag"",""SPLIT_REGEX"",""MAX_SIZE"",""sheetRunningId"",""master"",""StyleSheet"",""head"",""importRuleTag"",""firstTag"",""tagMap"",""deferred"",""rehydratedNames"",""ignoreRehydratedNames"",""capacity"",""clones"",""rehydrate"",""els"",""extracted"",""isStreamed"",""nodes"",""querySelectorAll"",""nodesSize"",""getAttribute"",""elNames"",""elNamesSize"",""textContent"",""extractedSize"",""_extracted$i"",""removeChild"",""max"",""_j"",""reset"",""ids"",""newTag"",""sealAllTags"",""lastEl"",""getTagForId"",""hasId"",""deferredInject"",""inject"",""concat"",""remove"",""toReactElements"",""Keyframes"",""styleSheet"",""String"",""getName"",""uppercasePattern"",""msPattern"",""hyphenateStyleName"",""toLowerCase"",""isFalsish"",""chunk"",""objToCssArray"",""prevKey"",""flatten"",""executionContext"",""ruleSet"",""isReactComponent"",""murmurhash"",""charsLength"",""getAlphabeticChar"",""fromCharCode"",""generateAlphabeticName"",""floor"",""isStaticRules"",""attrs"",""some"",""hasFunctionObjectKey"",""_TYPE_STATICS"",""hasher"",""ComponentStyle"",""isStatic"",""generateAndInjectStyles"",""lastClassName"",""generateName"",""determineTheme"",""fallbackTheme"",""defaultProps"",""isDefaultTheme"",""theme"",""escapeRegex"",""dashesAtEnds"",""escape"",""isTag"",""REACT_STATICS"",""childContextTypes"",""contextTypes"",""getDerivedStateFromProps"",""propTypes"",""KNOWN_STATICS"",""caller"",""callee"",""arity"",""TYPE_STATICS"",""render"",""defineProperty$1"",""_Object$getOwnPropert"",""getOwnPropertyDescriptor"",""objectPrototype"",""arrayPrototype"",""hoistNonReactStatics"",""targetComponent"",""sourceComponent"",""blacklist"",""inheritedComponent"",""targetStatics"",""sourceStatics"",""ThemeContext"",""ThemeConsumer"",""Consumer"",""ThemeProvider"",""_Component"",""getContext"",""bind"",""renderInner"",""outerTheme"",""Provider"",""getTheme"",""ServerStyleSheet"",""masterSheet"",""seal"",""splice"",""collectStyles"",""StyleSheetManager"",""getStyleTags"",""getStyleElement"",""interleaveWithNodeStream"",""readableStream"",""StyleSheetContext"",""StyleSheetConsumer"",""identifiers"",""StyledComponent"",""renderOuter"",""forwardedComponent"",""componentStyle"",""_props$forwardedCompo"",""foldedComponentIds"",""generatedClassName"",""elementToBeCreated"",""as"",""isTargetTag"",""propsForElement"",""computedProps"",""ref"",""style"",""buildExecutionContext"",""_this2"",""attrDef"",""resolvedAttrDef"",""attrDefWasFn"",""attr"",""_props$forwardedCompo2"",""warnTooManyClasses"",""createStyledComponent"",""options"",""isTargetStyledComp"",""isClass"",""_options$displayName"",""generateDisplayName"",""_options$componentId"",""_ComponentStyle"",""_displayName"",""parentComponentId"",""nr"",""generateId"",""_options$ParentCompon"",""ParentComponent"",""_options$attrs"",""finalAttrs"",""WrappedStyledComponent"",""forwardRef"",""forwardedRef"",""withComponent"",""previousComponentId"",""optionsToCopy"",""newComponentId"",""_foldedDefaultProps"",""styled"",""constructWithOptions"",""componentConstructor"",""templateFunction"",""withConfig"",""config"",""domElement"",""GlobalStyle"",""createStyles"",""removeStyles"",""renderStyles"",""createGlobalStyle"",""JSON"",""stringify"",""GlobalStyleComponent"",""_React$Component"",""_this$constructor"",""globalStyle"",""scCGSHMRCache"",""state"",""componentWillUnmount"",""Component"",""replaceWhitespace"",""keyframes"",""withTheme"",""Component$$1"",""WithTheme"",""themeProp"",""__DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS"",""hookCallback"",""hooks"",""input"",""isObject"",""isUndefined"",""isNumber"",""isDate"",""res"",""hasOwnProp"",""valueOf"",""createUTC"",""locale"",""strict"",""createLocalOrUTC"",""utc"",""getParsingFlags"",""_pf"",""empty"",""unusedTokens"",""unusedInput"",""overflow"",""charsLeftOver"",""nullInput"",""invalidMonth"",""invalidFormat"",""userInvalidated"",""iso"",""parsedDateParts"",""meridiem"",""rfc2822"",""weekdayMismatch"",""isValid"",""_isValid"",""flags"",""parsedParts"",""isNowValid"",""_d"",""invalidWeekday"",""_strict"",""bigHour"",""isFrozen"",""createInvalid"",""fun"",""momentProperties"",""copyConfig"",""val"",""_isAMomentObject"",""_f"",""_l"",""_tzm"",""_isUTC"",""_offset"",""_locale"",""updateInProgress"",""Moment"",""updateOffset"",""isMoment"",""absFloor"",""number"",""ceil"",""toInt"",""argumentForCoercion"",""coercedNumber"",""compareArrays"",""array1"",""array2"",""dontConvert"",""lengthDiff"",""diffs"",""warn"",""msg"",""suppressDeprecationWarnings"",""console"",""firstTime"",""deprecationHandler"",""stack"",""deprecations"",""deprecateSimple"",""Function"",""mergeConfigs"",""parentConfig"",""childConfig"",""Locale"",""aliases"",""addUnitAlias"",""unit"",""shorthand"",""lowerCase"",""normalizeUnits"",""units"",""normalizeObjectUnits"",""inputObject"",""normalizedProp"",""normalizedInput"",""priorities"",""addUnitPriority"",""priority"",""zeroFill"",""targetLength"",""forceSign"",""absNumber"",""zerosToFill"",""pow"",""substr"",""formattingTokens"",""localFormattingTokens"",""formatFunctions"",""formatTokenFunctions"",""addFormatToken"",""token"",""padded"",""ordinal"",""callback"",""func"",""localeData"",""formatMoment"",""expandFormat"",""array"",""mom"",""makeFormatFunction"",""invalidDate"",""replaceLongDateFormatTokens"",""longDateFormat"",""lastIndex"",""match1"",""match2"",""match3"",""match4"",""match6"",""match1to2"",""match3to4"",""match5to6"",""match1to3"",""match1to4"",""match1to6"",""matchUnsigned"",""matchSigned"",""matchOffset"",""matchShortOffset"",""matchWord"",""regexes"",""addRegexToken"",""regex"",""strictRegex"",""isStrict"",""getParseRegexForToken"",""regexEscape"",""matched"",""p1"",""p2"",""p3"",""p4"",""tokens"",""addParseToken"",""addWeekParseToken"",""_w"",""addTimeToArrayFromToken"",""_a"",""YEAR"",""MONTH"",""DATE"",""HOUR"",""MINUTE"",""SECOND"",""MILLISECOND"",""WEEK"",""WEEKDAY"",""daysInYear"",""year"",""isLeapYear"",""parseTwoDigitYear"",""parseInt"",""getSetYear"",""makeGetSet"",""keepTime"",""set$1"",""month"",""daysInMonth"",""modMonth"",""monthsShort"",""months"",""monthsShortRegex"",""monthsRegex"",""monthsParse"",""MONTHS_IN_FORMAT"",""defaultLocaleMonths"",""defaultLocaleMonthsShort"",""handleStrictParse"",""monthName"",""ii"",""llc"",""toLocaleLowerCase"",""_monthsParse"",""_longMonthsParse"",""_shortMonthsParse"",""setMonth"",""dayOfMonth"",""getSetMonth"",""defaultMonthsShortRegex"",""defaultMonthsRegex"",""computeMonthsParse"",""cmpLenRev"",""shortPieces"",""longPieces"",""mixedPieces"",""sort"",""_monthsRegex"",""_monthsShortRegex"",""_monthsStrictRegex"",""_monthsShortStrictRegex"",""createDate"",""ms"",""getFullYear"",""setFullYear"",""createUTCDate"",""UTC"",""setUTCFullYear"",""firstWeekOffset"",""dow"",""doy"",""fwd"",""getUTCDay"",""dayOfYearFromWeeks"",""week"",""weekday"",""resYear"",""resDayOfYear"",""dayOfYear"",""weekOfYear"",""resWeek"",""weekOffset"",""weeksInYear"",""weekOffsetNext"",""shiftWeekdays"",""ws"",""weekdaysMin"",""weekdaysShort"",""weekdays"",""weekdaysMinRegex"",""weekdaysShortRegex"",""weekdaysRegex"",""weekdaysParse"",""defaultLocaleWeekdays"",""defaultLocaleWeekdaysShort"",""defaultLocaleWeekdaysMin"",""handleStrictParse$1"",""weekdayName"",""_weekdaysParse"",""_shortWeekdaysParse"",""_minWeekdaysParse"",""day"",""defaultWeekdaysRegex"",""defaultWeekdaysShortRegex"",""defaultWeekdaysMinRegex"",""computeWeekdaysParse"",""minp"",""shortp"",""longp"",""minPieces"",""_weekdaysRegex"",""_weekdaysShortRegex"",""_weekdaysMinRegex"",""_weekdaysStrictRegex"",""_weekdaysShortStrictRegex"",""_weekdaysMinStrictRegex"",""hFormat"",""hours"",""lowercase"",""minutes"",""matchMeridiem"",""_meridiemParse"",""seconds"",""kInput"",""_isPm"",""isPM"",""_meridiem"",""pos"",""pos1"",""pos2"",""globalLocale"",""getSetHour"",""baseConfig"",""calendar"",""sameDay"",""nextDay"",""nextWeek"",""lastDay"",""lastWeek"",""sameElse"",""LTS"",""LT"",""LL"",""LLL"",""LLLL"",""dayOfMonthOrdinalParse"",""relativeTime"",""future"",""past"",""ss"",""mm"",""hh"",""dd"",""MM"",""yy"",""meridiemParse"",""locales"",""localeFamilies"",""normalizeLocale"",""loadLocale"",""oldLocale"",""_abbr"",""getSetGlobalLocale"",""values"",""getLocale"",""defineLocale"",""abbr"",""_config"",""parentLocale"",""next"",""chooseLocale"",""checkOverflow"",""_overflowDayOfYear"",""_overflowWeeks"",""_overflowWeekday"",""defaults"",""configFromArray"",""currentDate"",""expectedWeekday"",""yearToUse"",""nowValue"",""now"",""_useUTC"",""getMonth"",""getDate"",""currentDateArray"",""weekYear"",""temp"",""weekdayOverflow"",""GG"",""createLocal"",""_week"",""curWeek"",""gg"",""_dayOfYear"",""dayOfYearFromWeekInfo"",""_nextDay"",""getDay"",""setUTCMinutes"",""extendedIsoRegex"",""basicIsoRegex"",""tzRegex"",""isoDates"",""isoTimes"",""aspNetJsonRegex"",""configFromISO"",""allowTime"",""dateFormat"",""timeFormat"",""tzFormat"",""exec"",""configFromStringAndFormat"",""untruncateYear"",""yearStr"",""obsOffsets"",""UT"",""GMT"",""EDT"",""EST"",""CDT"",""CST"",""MDT"",""MST"",""PDT"",""PST"",""configFromRFC2822"",""monthStr"",""dayStr"",""hourStr"",""minuteStr"",""secondStr"",""parsedArray"",""weekdayStr"",""parsedInput"",""checkWeekday"",""obsOffset"",""militaryOffset"",""numOffset"",""hm"",""calculateOffset"",""ISO_8601"",""RFC_2822"",""skipped"",""stringLength"",""totalParsedInputLength"",""hour"",""isPm"",""meridiemHour"",""meridiemFixWrap"",""prepareConfig"",""preparse"",""tempConfig"",""bestMoment"",""scoreToBeat"",""currentScore"",""score"",""configFromStringAndArray"",""createFromInputFallback"",""configFromString"",""minute"",""second"",""millisecond"",""configFromObject"",""configFromInput"",""isUTC"",""isObjectEmpty"",""add"",""prototypeMin"",""other"",""prototypeMax"",""pickBy"",""moments"",""ordering"",""Duration"",""duration"",""years"",""quarters"",""quarter"",""weeks"",""isoWeek"",""days"",""milliseconds"",""unitHasDecimal"",""isDurationValid"",""_milliseconds"",""_days"",""_months"",""_data"",""_bubble"",""isDuration"",""absRound"",""round"",""utcOffset"",""sign"",""offsetFromString"",""chunkOffset"",""matcher"",""matches"",""parts"",""cloneWithOffset"",""model"",""diff"",""setTime"",""local"",""getDateOffset"",""getTimezoneOffset"",""isUtc"",""aspNetRegex"",""isoRegex"",""createDuration"",""ret"",""diffRes"",""parseIso"",""isBefore"",""positiveMomentsDifference"",""inp"",""isAfter"",""createAdder"",""direction"",""period"",""tmp"",""addSubtract"",""isAdding"",""invalid"",""subtract"",""monthDiff"",""wholeMonthDiff"",""anchor"",""newLocaleData"",""defaultFormat"",""defaultFormatUtc"",""lang"",""MS_PER_SECOND"",""MS_PER_MINUTE"",""MS_PER_HOUR"",""MS_PER_400_YEARS"",""mod$1"",""dividend"",""divisor"",""localStartOfDate"",""utcStartOfDate"",""addWeekYearFormatToken"",""getter"",""getSetWeekYearHelper"",""weeksTarget"",""setWeekAll"",""dayOfYearData"",""isoWeekYear"",""_dayOfMonthOrdinalParse"",""_ordinalParse"",""_dayOfMonthOrdinalParseLenient"",""getSetDayOfMonth"",""getSetMinute"",""getSetSecond"",""parseMs"",""getSetMillisecond"",""proto"",""preParsePostFormat"",""time"",""formats"",""sod"",""startOf"",""calendarFormat"",""asFloat"",""that"",""zoneDelta"",""endOf"",""startOfDate"",""isoWeekday"",""inputString"",""postformat"",""withoutSuffix"",""humanize"",""fromNow"",""toNow"",""invalidAt"",""localInput"",""isBetween"",""inclusivity"",""localFrom"",""localTo"",""isSame"",""inputMs"",""isSameOrAfter"",""isSameOrBefore"",""parsingFlags"",""prioritized"",""unitsObj"",""getPrioritizedUnits"",""toArray"",""toObject"",""toDate"",""keepOffset"",""inspect"",""zone"",""isLocal"",""suffix"",""toJSON"",""unix"",""creationData"",""isoWeeks"",""weekInfo"",""isoWeeksInYear"",""parseWeekday"",""parseIsoWeekday"",""keepLocalTime"",""keepMinutes"",""localAdjust"",""_changeInProgress"",""parseZone"",""tZone"",""hasAlignedHourOffset"",""isDST"",""isUtcOffset"",""zoneAbbr"",""zoneName"",""dates"",""isDSTShifted"",""_isDSTShifted"",""proto$1"",""get$1"",""field"",""setter"",""listMonthsImpl"",""out"",""listWeekdaysImpl"",""localeSorted"",""shift"",""_calendar"",""_longDateFormat"",""formatUpper"",""toUpperCase"",""_invalidDate"",""_ordinal"",""isFuture"",""_relativeTime"",""pastFuture"",""isFormat"",""_monthsShort"",""_monthsParseExact"",""firstDayOfYear"",""firstDayOfWeek"",""_weekdays"",""_weekdaysMin"",""_weekdaysShort"",""_weekdaysParseExact"",""_fullWeekdaysParse"",""isLower"",""langData"",""mathAbs"",""addSubtract$1"",""absCeil"",""daysToMonths"",""monthsToDays"",""makeAs"",""alias"",""asMilliseconds"",""asSeconds"",""asMinutes"",""asHours"",""asDays"",""asWeeks"",""asMonths"",""asQuarters"",""asYears"",""makeGetter"",""thresholds"",""substituteTimeAgo"",""abs$1"",""toISOString$1"",""toFixed"",""total"",""totalSign"",""ymSign"",""daysSign"",""hmsSign"",""proto$2"",""monthsFromDays"",""withSuffix"",""posNegDuration"",""relativeTime$1"",""toIsoString"",""updateLocale"",""tmpLocale"",""relativeTimeRounding"",""roundingFunction"",""relativeTimeThreshold"",""threshold"",""limit"",""myMoment"",""HTML5_FMT"",""DATETIME_LOCAL"",""DATETIME_LOCAL_SECONDS"",""DATETIME_LOCAL_MS"",""TIME"",""TIME_SECONDS"",""TIME_MS""],""mappings"":""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"",""file"":""component---src-templates-post-template-js-f4cdaf7c12d816196ba8.js"",""sourcesContent"":[""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.PinterestIconCircleSolid = exports.PinterestIconCircle = exports.PinterestIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar PinterestIconFill = exports.PinterestIconFill = function PinterestIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12.14.5C5.86.5 2.7 5 2.7 8.75c0 2.27.86 4.3 2.7 5.05.3.12.57 0 .66-.33l.27-1.06c.1-.32.06-.44-.2-.73-.52-.62-.86-1.44-.86-2.6 0-3.33 2.5-6.32 6.5-6.32 3.55 0 5.5 2.17 5.5 5.07 0 3.8-1.7 7.02-4.2 7.02-1.37 0-2.4-1.14-2.07-2.54.4-1.68 1.16-3.48 1.16-4.7 0-1.07-.58-1.98-1.78-1.98-1.4 0-2.55 1.47-2.55 3.42 0 1.25.43 2.1.43 2.1l-1.7 7.2c-.5 2.13-.08 4.75-.04 5 .02.17.22.2.3.1.14-.18 1.82-2.26 2.4-4.33.16-.58.93-3.63.93-3.63.45.88 1.8 1.65 3.22 1.65 4.25 0 7.13-3.87 7.13-9.05C20.5 4.15 17.18.5 12.14.5z\""\n  }));\n};\n\nvar PinterestIconCircle = exports.PinterestIconCircle = function PinterestIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M8 11.2c-.15-.32-.25-.72-.25-1.22 0-2.32 1.74-4.4 4.53-4.4 2.47 0 3.82 1.5 3.82 3.52 0 2.64-1.17 4.88-2.9 4.88-.97 0-1.7-.8-1.46-1.77.28-1.14.8-2.4.8-3.23 0-.76-.4-1.38-1.23-1.38-.95 0-1.74 1-1.74 2.37 0 .86.3 1.45.3 1.45l-1.2 5c-.34 1.5-.04 3.33-.02 3.5.02.1.16.15.22.06.1-.12 1.26-1.56 1.66-3l.66-2.53c.32.6 1.25 1.14 2.24 1.14 2.95 0 4.95-2.7 4.95-6.3 0-2.73-2.3-5.27-5.82-5.27-4.36 0-6.57 3.14-6.57 5.75 0 .85.18 1.64.53 2.28l1.5-.8z\""\n  }));\n};\n\nvar PinterestIconCircleSolid = exports.PinterestIconCircleSolid = function PinterestIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12 0C5.38 0 0 5.38 0 12s5.38 12 12 12 12-5.38 12-12S18.62 0 12 0zm1.4 15.56c-1 0-1.94-.53-2.25-1.14l-.65 2.52c-.4 1.45-1.57 2.9-1.66 3-.06.1-.2.07-.22-.04-.02-.2-.32-2 .03-3.5l1.18-5s-.3-.6-.3-1.46c0-1.36.8-2.37 1.78-2.37.85 0 1.25.62 1.25 1.37 0 .85-.53 2.1-.8 3.27-.24.98.48 1.78 1.44 1.78 1.73 0 2.9-2.24 2.9-4.9 0-2-1.35-3.5-3.82-3.5-2.8 0-4.53 2.07-4.53 4.4 0 .5.1.9.25 1.23l-1.5.82c-.36-.64-.54-1.43-.54-2.28 0-2.6 2.2-5.74 6.57-5.74 3.5 0 5.82 2.54 5.82 5.27 0 3.6-2 6.3-4.96 6.3z\""\n  }));\n};"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.TwitterIconCircle = exports.TwitterIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar TwitterIconFill = exports.TwitterIconFill = function TwitterIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M23.44 4.83c-.8.37-1.5.38-2.22.02.93-.56.98-.96 1.32-2.02-.88.52-1.86.9-2.9 1.1-.82-.88-2-1.43-3.3-1.43-2.5 0-4.55 2.04-4.55 4.54 0 .36.03.7.1 1.04-3.77-.2-7.12-2-9.36-4.75-.4.67-.6 1.45-.6 2.3 0 1.56.8 2.95 2 3.77-.74-.03-1.44-.23-2.05-.57v.06c0 2.2 1.56 4.03 3.64 4.44-.67.2-1.37.2-2.06.08.58 1.8 2.26 3.12 4.25 3.16C5.78 18.1 3.37 18.74 1 18.46c2 1.3 4.4 2.04 6.97 2.04 8.35 0 12.92-6.92 12.92-12.93 0-.2 0-.4-.02-.6.9-.63 1.96-1.22 2.56-2.14z\""\n  }));\n};\n\nvar TwitterIconCircle = exports.TwitterIconCircle = function TwitterIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12 0C5.38 0 0 5.38 0 12s5.38 12 12 12 12-5.38 12-12S18.62 0 12 0zm5.26 9.38v.34c0 3.48-2.64 7.5-7.48 7.5-1.48 0-2.87-.44-4.03-1.2 1.37.17 2.77-.2 3.9-1.08-1.16-.02-2.13-.78-2.46-1.83.38.1.8.07 1.17-.03-1.2-.24-2.1-1.3-2.1-2.58v-.05c.35.2.75.32 1.18.33-.7-.47-1.17-1.28-1.17-2.2 0-.47.13-.92.36-1.3C7.94 8.85 9.88 9.9 12.06 10c-.04-.2-.06-.4-.06-.6 0-1.46 1.18-2.63 2.63-2.63.76 0 1.44.3 1.92.82.6-.12 1.95-.27 1.95-.27-.35.53-.72 1.66-1.24 2.04z\""\n  }));\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #777777;\\n  border-color: #777777;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #5e5e5e;\\n    border-color: #5e5e5e;\\n  }\\n'], ['\\n  background-color: #777777;\\n  border-color: #777777;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #5e5e5e;\\n    border-color: #5e5e5e;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _mail = require('../svg/mail.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Email = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      subject = _ref.subject,\n      body = _ref.body,\n      props = _objectWithoutProperties(_ref, ['link', 'subject', 'body']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'E-mail',\n    href: _consts2[\""default\""].mail(link, subject, body),\n    target: '_self',\n    buttonComponent: Email,\n    iconFill: _mail.EmailIconFill,\n    iconCircle: _mail.EmailIconCircle,\n    iconCircleSolid: _mail.EmailIconCircleSolid\n  }));\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #35465c;\\n  border-color: #35465c;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #222d3c;\\n    border-color: #222d3c;\\n  }\\n'], ['\\n  background-color: #35465c;\\n  border-color: #35465c;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #222d3c;\\n    border-color: #222d3c;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _tumblr = require('../svg/tumblr.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Tumblr = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      props = _objectWithoutProperties(_ref, ['link']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'Tumblr',\n    href: _consts2[\""default\""].tumblr(link),\n    buttonComponent: Tumblr,\n    iconFill: _tumblr.TumblrIconFill,\n    iconCircle: _tumblr.TumblrIconCircle,\n    iconCircleSolid: _tumblr.TumblrIconCircle\n  }));\n};"",""'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n  return function small() {\n    return createHTML(this, 'small', '', '');\n  };\n});\n"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.GoogleIconCircle = exports.GoogleIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar GoogleIconFill = exports.GoogleIconFill = function GoogleIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M11.37 12.93c-.73-.52-1.4-1.27-1.4-1.5 0-.43.03-.63.98-1.37 1.23-.97 1.9-2.23 1.9-3.57 0-1.22-.36-2.3-1-3.05h.5c.1 0 .2-.04.28-.1l1.36-.98c.16-.12.23-.34.17-.54-.07-.2-.25-.33-.46-.33H7.6c-.66 0-1.34.12-2 .35-2.23.76-3.78 2.66-3.78 4.6 0 2.76 2.13 4.85 5 4.9-.07.23-.1.45-.1.66 0 .43.1.83.33 1.22h-.08c-2.72 0-5.17 1.34-6.1 3.32-.25.52-.37 1.04-.37 1.56 0 .5.13.98.38 1.44.6 1.04 1.84 1.86 3.55 2.28.87.23 1.82.34 2.8.34.88 0 1.7-.1 2.5-.34 2.4-.7 3.97-2.48 3.97-4.54 0-1.97-.63-3.15-2.33-4.35zm-7.7 4.5c0-1.42 1.8-2.68 3.9-2.68h.05c.45 0 .9.07 1.3.2l.42.28c.96.66 1.6 1.1 1.77 1.8.05.16.07.33.07.5 0 1.8-1.33 2.7-3.96 2.7-1.98 0-3.54-1.23-3.54-2.8zM5.54 3.9c.33-.38.75-.58 1.23-.58h.05c1.35.05 2.64 1.55 2.88 3.35.14 1.02-.08 1.97-.6 2.55-.32.37-.74.56-1.23.56h-.03c-1.32-.04-2.63-1.6-2.87-3.4-.13-1 .08-1.92.58-2.5zM23.5 9.5h-3v-3h-2v3h-3v2h3v3h2v-3h3\""\n  }));\n};\n\nvar GoogleIconCircle = exports.GoogleIconCircle = function GoogleIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12.65 8.6c-.02-.66-.3-1.3-.8-1.8S10.67 6 9.98 6c-.63 0-1.2.25-1.64.68-.45.44-.68 1.05-.66 1.7.02.68.3 1.32.8 1.8.96.97 2.6 1.04 3.5.14.45-.45.7-1.05.67-1.7zm-2.5 5.63c-2.14 0-3.96.95-3.96 2.1 0 1.12 1.8 2.08 3.94 2.08s3.98-.93 3.98-2.06c0-1.14-1.82-2.1-3.98-2.1z\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12 0C5.38 0 0 5.38 0 12s5.38 12 12 12 12-5.38 12-12S18.62 0 12 0zm-1.84 19.4c-2.8 0-4.97-1.35-4.97-3.08s2.15-3.1 4.94-3.1c.84 0 1.6.14 2.28.36-.57-.4-1.25-.86-1.3-1.7-.26.06-.52.1-.8.1-.95 0-1.87-.38-2.57-1.08-.67-.68-1.06-1.55-1.1-2.48-.02-.94.32-1.8.96-2.45.65-.63 1.5-.93 2.4-.92V5h3.95v1h-1.53l.12.1c.67.67 1.06 1.55 1.1 2.48.02.93-.32 1.8-.97 2.45-.16.15-.33.3-.5.4-.2.6.05.8.83 1.33.9.6 2.1 1.42 2.1 3.56 0 1.73-2.17 3.1-4.96 3.1zM20 10h-2v2h-1v-2h-2V9h2V7h1v2h2v1z\""\n  }));\n};"",""function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport default memoize;"",""import memoize from '@emotion/memoize';\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\nexport default index;"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #ff6600;\\n  border-color: #ff6600;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #fb6200;\\n    border-color: #fb6200;\\n  }\\n'], ['\\n  background-color: #ff6600;\\n  border-color: #ff6600;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #fb6200;\\n    border-color: #fb6200;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _hacker = require('../svg/hacker.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Hacker = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      message = _ref.message,\n      props = _objectWithoutProperties(_ref, ['link', 'message']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'HackerNews',\n    href: _consts2[\""default\""].hacker(link, message),\n    buttonComponent: Hacker,\n    iconFill: _hacker.HackerIconFill,\n    iconCircle: _hacker.HackerIconCircle,\n    iconCircleSolid: _hacker.HackerIconCircleSolid\n  }));\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #5f99cf;\\n  border-color: #5f99cf;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #3a80c1;\\n    border-color: #3a80c1;\\n  }\\n'], ['\\n  background-color: #5f99cf;\\n  border-color: #5f99cf;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #3a80c1;\\n    border-color: #3a80c1;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _reddit = require('../svg/reddit.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Reddit = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      props = _objectWithoutProperties(_ref, ['link']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'Reddit',\n    href: _consts2[\""default\""].reddit(link),\n    buttonComponent: Reddit,\n    iconFill: _reddit.RedditIconFill,\n    iconCircle: _reddit.RedditIconCircle,\n    iconCircleSolid: _reddit.RedditIconCircleSolid\n  }));\n};"",""import \""core-js/modules/es6.function.name\"";\nimport \""core-js/modules/es6.regexp.to-string\"";\nimport \""core-js/modules/es6.date.to-string\"";\nimport \""core-js/modules/es6.object.to-string\"";\n\n/**\r\n * Returns the object type of the given payload\r\n *\r\n * @param {*} payload\r\n * @returns {string}\r\n */\nfunction getType(payload) {\n  return Object.prototype.toString.call(payload).slice(8, -1);\n}\n/**\r\n * Returns whether the payload is undefined\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\n\n\nfunction isUndefined(payload) {\n  return getType(payload) === 'Undefined';\n}\n/**\r\n * Returns whether the payload is null\r\n *\r\n * @param {*} payload\r\n * @returns {payload is null}\r\n */\n\n\nfunction isNull(payload) {\n  return getType(payload) === 'Null';\n}\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\n\n\nfunction isPlainObject(payload) {\n  if (getType(payload) !== 'Object') return false;\n  return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;\n}\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\n\n\nfunction isObject(payload) {\n  return isPlainObject(payload);\n}\n/**\r\n * Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\n\n\nfunction isAnyObject(payload) {\n  return getType(payload) === 'Object';\n}\n/**\r\n * Returns whether the payload is an object like a type passed in < >\r\n *\r\n * Usage: isObjectLike<{id: any}>(payload) // will make sure it's an object and has an `id` prop.\r\n *\r\n * @template T this must be passed in < >\r\n * @param {*} payload\r\n * @returns {payload is T}\r\n */\n\n\nfunction isObjectLike(payload) {\n  return isAnyObject(payload);\n}\n/**\r\n * Returns whether the payload is a function\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Function}\r\n */\n\n\nfunction isFunction(payload) {\n  return getType(payload) === 'Function';\n}\n/**\r\n * Returns whether the payload is an array\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\n\n\nfunction isArray(payload) {\n  return getType(payload) === 'Array';\n}\n/**\r\n * Returns whether the payload is a string\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\n\n\nfunction isString(payload) {\n  return getType(payload) === 'String';\n}\n/**\r\n * Returns whether the payload is a string, BUT returns false for ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\n\n\nfunction isFullString(payload) {\n  return isString(payload) && payload !== '';\n}\n/**\r\n * Returns whether the payload is ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\n\n\nfunction isEmptyString(payload) {\n  return payload === '';\n}\n/**\r\n * Returns whether the payload is a number\r\n *\r\n * This will return false for NaN\r\n *\r\n * @param {*} payload\r\n * @returns {payload is number}\r\n */\n\n\nfunction isNumber(payload) {\n  return getType(payload) === 'Number' && !isNaN(payload);\n}\n/**\r\n * Returns whether the payload is a boolean\r\n *\r\n * @param {*} payload\r\n * @returns {payload is boolean}\r\n */\n\n\nfunction isBoolean(payload) {\n  return getType(payload) === 'Boolean';\n}\n/**\r\n * Returns whether the payload is a regular expression\r\n *\r\n * @param {*} payload\r\n * @returns {payload is RegExp}\r\n */\n\n\nfunction isRegExp(payload) {\n  return getType(payload) === 'RegExp';\n}\n/**\r\n * Returns whether the payload is a Symbol\r\n *\r\n * @param {*} payload\r\n * @returns {payload is symbol}\r\n */\n\n\nfunction isSymbol(payload) {\n  return getType(payload) === 'Symbol';\n}\n/**\r\n * Returns whether the payload is a date, and that the date is Valid\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Date}\r\n */\n\n\nfunction isDate(payload) {\n  return getType(payload) === 'Date' && !isNaN(payload);\n}\n/**\r\n * Returns whether the payload is a blob\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Blob}\r\n */\n\n\nfunction isBlob(payload) {\n  return getType(payload) === 'Blob';\n}\n/**\r\n * Returns whether the payload is a file\r\n *\r\n * @param {*} payload\r\n * @returns {payload is File}\r\n */\n\n\nfunction isFile(payload) {\n  return getType(payload) === 'File';\n}\n/**\r\n * Returns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Number | String | Symbol)\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is boolean | null | undefined | number | string | symbol)}\r\n */\n\n\nfunction isPrimitive(payload) {\n  return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\n}\n/**\r\n * Returns true whether the payload is null or undefined\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is null | undefined)}\r\n */\n\n\nfunction isNullOrUndefined(payload) {\n  return isNull(payload) || isUndefined(payload);\n}\n/**\r\n * Does a generic check to check that the given payload is of a given type.\r\n * In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);\r\n * It will, however, differentiate between object and null\r\n *\r\n * @template T\r\n * @param {*} payload\r\n * @param {T} type\r\n * @throws {TypeError} Will throw type error if type is an invalid type\r\n * @returns {payload is T}\r\n */\n\n\nfunction isType(payload, type) {\n  if (!(type instanceof Function)) {\n    throw new TypeError('Type must be a function');\n  }\n\n  if (!type.hasOwnProperty('prototype')) {\n    throw new TypeError('Type is not a class');\n  } // Classes usually have names (as functions usually have names)\n\n\n  var name = type.name;\n  return getType(payload) === name || Boolean(payload && payload.constructor === type);\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyString, isFile, isFullString, isFunction, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isRegExp, isString, isSymbol, isType, isUndefined };"",""import \""core-js/modules/web.dom.iterable\"";\nimport \""core-js/modules/es6.array.iterator\"";\nimport \""core-js/modules/es6.object.to-string\"";\nimport \""core-js/modules/es6.object.keys\"";\nimport \""core-js/modules/es7.array.includes\"";\nimport \""core-js/modules/es6.string.includes\"";\nimport \""core-js/modules/es6.array.reduce\"";\nimport \""core-js/modules/es6.symbol\"";\nimport \""core-js/modules/es6.array.for-each\"";\nimport \""core-js/modules/es6.object.define-property\"";\nimport { isPlainObject, isArray, isSymbol } from 'is-what';\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \""License\""); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\nfunction __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n    s += arguments[i].length;\n  }\n\n  for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n    for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n      r[k] = a[j];\n    }\n  }\n\n  return r;\n}\n\nfunction assignProp(carry, key, newVal, originalObject) {\n  var propType = originalObject.propertyIsEnumerable(key) ? 'enumerable' : 'nonenumerable';\n  if (propType === 'enumerable') carry[key] = newVal;\n\n  if (propType === 'nonenumerable') {\n    Object.defineProperty(carry, key, {\n      value: newVal,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    });\n  }\n}\n\nfunction mergeRecursively(origin, newComer, extensions) {\n  // work directly on newComer if its not an object\n  if (!isPlainObject(newComer)) {\n    // extend merge rules\n    if (extensions && isArray(extensions)) {\n      extensions.forEach(function (extend) {\n        newComer = extend(origin, newComer);\n      });\n    }\n\n    return newComer;\n  } // define newObject to merge all values upon\n\n\n  var newObject = {};\n\n  if (isPlainObject(origin)) {\n    var props_1 = Object.getOwnPropertyNames(origin);\n    var symbols_1 = Object.getOwnPropertySymbols(origin);\n    newObject = __spreadArrays(props_1, symbols_1).reduce(function (carry, key) {\n      // @ts-ignore\n      var targetVal = origin[key];\n\n      if (!isSymbol(key) && !Object.getOwnPropertyNames(newComer).includes(key) || isSymbol(key) && !Object.getOwnPropertySymbols(newComer).includes(key)) {\n        assignProp(carry, key, targetVal, origin);\n      }\n\n      return carry;\n    }, {});\n  }\n\n  var props = Object.getOwnPropertyNames(newComer);\n  var symbols = Object.getOwnPropertySymbols(newComer);\n\n  var result = __spreadArrays(props, symbols).reduce(function (carry, key) {\n    // re-define the origin and newComer as targetVal and newVal\n    var newVal = newComer[key];\n    var targetVal = isPlainObject(origin) ? // @ts-ignore\n    origin[key] : undefined; // extend merge rules\n\n    if (extensions && isArray(extensions)) {\n      extensions.forEach(function (extend) {\n        newVal = extend(targetVal, newVal);\n      });\n    } // When newVal is an object do the merge recursively\n\n\n    if (targetVal !== undefined && isPlainObject(newVal)) {\n      newVal = mergeRecursively(targetVal, newVal, extensions);\n    }\n\n    assignProp(carry, key, newVal, newComer);\n    return carry;\n  }, newObject);\n\n  return result;\n}\n/**\r\n * Merge anything recursively.\r\n * Objects get merged, special objects (classes etc.) are re-assigned \""as is\"".\r\n * Basic types overwrite objects or other basic types.\r\n *\r\n * @param {(IConfig | any)} origin\r\n * @param {...any[]} newComers\r\n * @returns the result\r\n */\n\n\nfunction merge(origin) {\n  var newComers = [];\n\n  for (var _i = 1; _i < arguments.length; _i++) {\n    newComers[_i - 1] = arguments[_i];\n  }\n\n  var extensions = null;\n  var base = origin;\n\n  if (isPlainObject(origin) && origin.extensions && Object.keys(origin).length === 1) {\n    base = {};\n    extensions = origin.extensions;\n  }\n\n  return newComers.reduce(function (result, newComer) {\n    return mergeRecursively(result, newComer, extensions);\n  }, base);\n}\n\nfunction concatArrays(originVal, newVal) {\n  if (isArray(originVal) && isArray(newVal)) {\n    // concat logic\n    return originVal.concat(newVal);\n  }\n\n  return newVal; // always return newVal as fallback!!\n}\n\nexport default merge;\nexport { concatArrays, merge };"",""'use strict';\n\nrequire(\""core-js/modules/es6.function.name\"");\n\nrequire(\""core-js/modules/es6.string.big\"");\n\nrequire(\""core-js/modules/es6.string.small\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _common = require('../common');\n\nvar _wrapper = require('./wrapper');\n\nvar _wrapper2 = _interopRequireDefault(_wrapper);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nvar ButtonFactory = function ButtonFactory(_ref) {\n  var small = _ref.small,\n      solid = _ref.solid,\n      medium = _ref.medium,\n      big = _ref.big,\n      circle = _ref.circle,\n      solidcircle = _ref.solidcircle,\n      simple = _ref.simple,\n      simpleReverse = _ref.simpleReverse,\n      Button = _ref.buttonComponent,\n      IconFill = _ref.iconFill,\n      IconCircle = _ref.iconCircle,\n      IconCircleSolid = _ref.iconCircleSolid,\n      name = _ref.name,\n      ariaName = _ref.ariaName,\n      href = _ref.href,\n      label = _ref.label,\n      _ref$target = _ref.target,\n      target = _ref$target === undefined ? '_blank' : _ref$target,\n      props = _objectWithoutProperties(_ref, ['small', 'solid', 'medium', 'big', 'circle', 'solidcircle', 'simple', 'simpleReverse', 'buttonComponent', 'iconFill', 'iconCircle', 'iconCircleSolid', 'name', 'ariaName', 'href', 'label', 'target']);\n\n  var usedLabel = typeof label === 'function' ? label(ariaName || name) : 'Share on ' + (ariaName || name);\n  return _react2[\""default\""].createElement(_common.Link, {\n    href: href,\n    simple: simple,\n    simpleReverse: simpleReverse,\n    target: target,\n    rel: 'noreferrer noopener',\n    'aria-label': usedLabel,\n    title: usedLabel\n  }, simple || simpleReverse ? _react2[\""default\""].createElement(IconFill, props) : _react2[\""default\""].createElement(Button, _extends({\n    small: small,\n    solidcircle: solidcircle\n  }, props), _react2[\""default\""].createElement(_common.Icon, {\n    solid: !solid && !circle && !solidcircle || solid,\n    solidcircle: solidcircle,\n    'aria-hidden': 'true'\n  }, (0, _wrapper2[\""default\""])(small, solid, medium, big, circle, solidcircle, IconFill, IconCircle, IconCircleSolid, name))));\n};\n\nexports[\""default\""] = ButtonFactory;"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.VKIconCircleSolid = exports.VKIconCircle = exports.VKIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar VKIconFill = exports.VKIconFill = function VKIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M21.547 7h-3.29a.743.743 0 0 0-.655.392s-1.312 2.416-1.734 3.23C14.734 12.813 14 12.126 14 11.11V7.603A1.104 1.104 0 0 0 12.896 6.5h-2.474a1.982 1.982 0 0 0-1.75.813s1.255-.204 1.255 1.49c0 .42.022 1.626.04 2.64a.73.73 0 0 1-1.272.503 21.54 21.54 0 0 1-2.498-4.543.693.693 0 0 0-.63-.403h-2.99a.508.508 0 0 0-.48.685C3.005 10.175 6.918 18 11.38 18h1.878a.742.742 0 0 0 .742-.742v-1.135a.73.73 0 0 1 1.23-.53l2.247 2.112a1.09 1.09 0 0 0 .746.295h2.953c1.424 0 1.424-.988.647-1.753-.546-.538-2.518-2.617-2.518-2.617a1.02 1.02 0 0 1-.078-1.323c.637-.84 1.68-2.212 2.122-2.8.603-.804 1.697-2.507.197-2.507z\""\n  }));\n};\n\nvar VKIconCircle = exports.VKIconCircle = function VKIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    strokeWidth: \""1.5px\"",\n    d: \""M20.44 7.62h-2.9c-.24 0-.463.133-.577.347 0 0-1.156 2.13-1.528 2.848-1 1.932-1.647 1.326-1.647.43V8.152c0-.537-.436-.972-.973-.972h-2.182c-.604-.044-1.188.227-1.543.717 0 0 1.106-.18 1.106 1.313 0 .37.02 1.434.035 2.328.008.355-.274.65-.63.656-.187.003-.365-.074-.49-.213-.892-1.24-1.632-2.585-2.202-4.004-.1-.216-.316-.355-.556-.355H3.716c-.248 0-.45.198-.452.445 0 .055.01.108.028.16.8 2.195 4.25 9.094 8.185 9.094h1.655c.362 0 .654-.294.654-.655v-1c0-.356.29-.643.646-.643.162 0 .32.063.438.175l1.98 1.862c.18.166.413.26.658.26h2.604c1.255 0 1.255-.872.57-1.547-.48-.474-2.22-2.308-2.22-2.308-.307-.32-.336-.813-.07-1.166.563-.742 1.482-1.95 1.873-2.47.534-.707 1.498-2.21.176-2.21z\""\n  }));\n};\n\nvar VKIconCircleSolid = exports.VKIconCircleSolid = function VKIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12 .5C5.65.5.5 5.65.5 12c0 6.352 5.15 11.5 11.5 11.5 6.352 0 11.5-5.148 11.5-11.5C23.5 5.65 18.352.5 12 .5zm8.11 16.82h-2.603c-.244 0-.48-.094-.658-.26l-1.98-1.862c-.118-.112-.276-.175-.438-.175-.355 0-.646.287-.646.643v1c0 .36-.292.654-.654.654h-1.655c-3.935 0-7.385-6.898-8.185-9.093-.018-.052-.028-.105-.028-.16.002-.247.204-.445.452-.445h2.637c.24 0 .456.14.556.355.57 1.42 1.31 2.764 2.2 4.004.126.14.304.217.49.214.357-.006.64-.3.63-.656-.014-.894-.034-1.958-.034-2.328 0-1.493-1.106-1.313-1.106-1.313.355-.49.94-.76 1.543-.717h2.182c.537 0 .974.435.974.972v3.093c0 .896.646 1.502 1.646-.43.37-.718 1.527-2.848 1.527-2.848.114-.214.337-.347.577-.347h2.9c1.323 0 .358 1.502-.175 2.21-.392.52-1.31 1.727-1.873 2.47-.267.353-.238.845.07 1.165 0 0 1.74 1.834 2.22 2.31.685.673.685 1.545-.57 1.545z\""\n  }));\n};"",""// @flow strict\nimport React from 'react';\nimport styles from './Author.module.scss';\nimport { useSiteMetadata } from '../../../hooks';\n\nconst Author = () => {\n  const { author } = useSiteMetadata();\n\n  return (\n    <div className={styles['author']}>\n      <p className={styles['author__bio']}>\n        {author.bio} | Pianobin\n      </p>\n    </div>\n  );\n};\n\nexport default Author;\n"",""// @flow strict\nimport React from 'react';\nimport styles from './Content.module.scss';\n\ntype Props = {\n  body: string,\n  title: string\n};\n\nconst Content = ({ body, title }: Props) => (\n  <div className={styles['content']}>\n    <h1 className={styles['content__title']}>{title}</h1>\n    <div className={styles['content__body']} dangerouslySetInnerHTML={{ __html: body }} />\n  </div>\n);\n\nexport default Content;\n"",""// @flow strict\nimport React from 'react';\nimport moment from 'moment';\nimport styles from './Meta.module.scss';\n\ntype Props = {\n  date: string\n};\n\nconst Meta = ({ date }: Props) => (\n  <div className={styles['meta']}>\n    <p className={styles['meta__date']}>Published {moment(date).format('D MMM YYYY')}</p>\n  </div>\n);\n\nexport default Meta;\n"",""// @flow strict\nimport React from 'react';\nimport { Link } from 'gatsby';\nimport styles from './Tags.module.scss';\n\ntype Props = {\n  tags: string[],\n  tagSlugs: string[]\n};\n\nconst Tags = ({ tags, tagSlugs }: Props) => (\n  <div className={styles['tags']}>\n    <ul className={styles['tags__list']}>\n      {tagSlugs && tagSlugs.map((slug, i) => (\n        <li className={styles['tags__list-item']} key={tags[i]}>\n          <Link to={slug} className={styles['tags__list-item-link']}>\n            {tags[i]}\n          </Link>\n        </li>\n      ))}\n    </ul>\n  </div>\n);\n\nexport default Tags;\n"",""// @flow strict\nimport React from 'react';\nimport { Link } from 'gatsby';\nimport Author from './Author';\nimport Content from './Content';\nimport Meta from './Meta';\nimport Tags from './Tags';\nimport styles from './Post.module.scss';\nimport type { Node } from '../../types';\nimport { Facebook, Twitter, Mail, Pinterest, Reddit } from 'react-social-sharing'\n\ntype Props = {\n  post: Node\n};\n\nconst Post = ({ post }: Props) => {\n  const { html } = post;\n  const { tagSlugs, slug } = post.fields;\n  const { tags, title, date } = post.frontmatter;\n  const url = \""https://pianobin.com\"" + slug\n\n  return (\n    <div className={styles['post']}>\n      <Link className={styles['post__home-button']} to=\""/\"">All Articles</Link>\n\n      <div className={styles['post__content']}>\n        <Content body={html} title={title} />\n      </div>\n\n      <div className={styles['post__footer']}>\n        <Facebook solid medium link={url}/>\n        <Twitter solid medium link={url}/>\n        <Mail solid medium link={url}/>\n        <Pinterest solid medium link={url}/>\n        <Reddit solid medium link={url}/>\n        <Meta date={date} />\n        {tags && tagSlugs && <Tags tags={tags} tagSlugs={tagSlugs} />}\n        <Author />\n      </div>\n    </div>\n  );\n};\n\nexport default Post;\n"",""// @flow strict\nimport React from 'react';\nimport { graphql } from 'gatsby';\nimport Layout from '../components/Layout';\nimport Post from '../components/Post';\nimport { useSiteMetadata } from '../hooks';\nimport type { MarkdownRemark } from '../types';\n\ntype Props = {\n  data: {\n    markdownRemark: MarkdownRemark\n  }\n};\n\nconst PostTemplate = ({ data }: Props) => {\n  const { title: siteTitle, subtitle: siteSubtitle } = useSiteMetadata();\n  const { frontmatter } = data.markdownRemark;\n  const { title: postTitle, description: postDescription, socialImage } = frontmatter;\n  const metaDescription = postDescription !== null ? postDescription : siteSubtitle;\n\n  return (\n    <Layout title={`${postTitle} - ${siteTitle}`} description={metaDescription} socialImage={socialImage} >\n      <Post post={data.markdownRemark} />\n    </Layout>\n  );\n};\n\nexport const query = graphql`\n  query PostBySlug($slug: String!) {\n    markdownRemark(fields: { slug: { eq: $slug } }) {\n      id\n      html\n      fields {\n        slug\n        tagSlugs\n      }\n      frontmatter {\n        date\n        description\n        tags\n        title\n        socialImage\n      }\n    }\n  }\n`;\n\nexport default PostTemplate;\n"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #55acee;\\n  border-color: #55acee;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #2795e9;\\n    border-color: #2795e9;\\n  }\\n'], ['\\n  background-color: #55acee;\\n  border-color: #55acee;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #2795e9;\\n    border-color: #2795e9;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _twitter = require('../svg/twitter.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Twitter = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      message = _ref.message,\n      props = _objectWithoutProperties(_ref, ['link', 'message']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'Twitter',\n    href: _consts2[\""default\""].twitter(link, message),\n    buttonComponent: Twitter,\n    iconFill: _twitter.TwitterIconFill,\n    iconCircle: _twitter.TwitterIconCircle,\n    iconCircleSolid: _twitter.TwitterIconCircle\n  }));\n};"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.TelegramIconCircleSolid = exports.TelegramIconCircle = exports.TelegramIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar TelegramIconFill = exports.TelegramIconFill = function TelegramIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M.707 8.475C.275 8.64 0 9.508 0 9.508s.284.867.718 1.03l5.09 1.897 1.986 6.38a1.102 1.102 0 0 0 1.75.527l2.96-2.41a.405.405 0 0 1 .494-.013l5.34 3.87a1.1 1.1 0 0 0 1.046.135 1.1 1.1 0 0 0 .682-.803l3.91-18.795A1.102 1.102 0 0 0 22.5.075L.706 8.475z\""\n  }));\n};\n\nvar TelegramIconCircle = exports.TelegramIconCircle = function TelegramIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M2.505 11.053c-.31.118-.505.738-.505.738s.203.62.513.737l3.636 1.355 1.417 4.557a.787.787 0 0 0 1.25.375l2.115-1.72a.29.29 0 0 1 .353-.01L15.1 19.85a.786.786 0 0 0 .746.095.786.786 0 0 0 .487-.573l2.793-13.426a.787.787 0 0 0-1.054-.893l-15.568 6z\""\n  }));\n};\n\nvar TelegramIconCircleSolid = exports.TelegramIconCircleSolid = function TelegramIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12 23.5c6.35 0 11.5-5.15 11.5-11.5S18.35.5 12 .5.5 5.65.5 12 5.65 23.5 12 23.5zM2.505 11.053c-.31.118-.505.738-.505.738s.203.62.513.737l3.636 1.355 1.417 4.557a.787.787 0 0 0 1.25.375l2.115-1.72a.29.29 0 0 1 .353-.01L15.1 19.85a.786.786 0 0 0 .746.095.786.786 0 0 0 .487-.573l2.793-13.426a.787.787 0 0 0-1.054-.893l-15.568 6z\"",\n    fillRule: \""evenodd\""\n  }));\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #54a9eb;\\n  border-color: #54a9eb;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #4b97d1;\\n    border-color: #4b97d1;\\n  }\\n'], ['\\n  background-color: #54a9eb;\\n  border-color: #54a9eb;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #4b97d1;\\n    border-color: #4b97d1;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _telegram = require('../svg/telegram.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Telegram = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      props = _objectWithoutProperties(_ref, ['link']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'Telegram',\n    href: _consts2[\""default\""].telegram(link),\n    buttonComponent: Telegram,\n    iconFill: _telegram.TelegramIconFill,\n    iconCircle: _telegram.TelegramIconCircle,\n    iconCircleSolid: _telegram.TelegramIconCircleSolid\n  }));\n};"",""var unitlessKeys = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\nexport default unitlessKeys;"",""'use strict';\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.Icon = exports.Link = exports.SharingButton = undefined;\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  border-radius: 5px;\\n  transition: 25ms ease-out;\\n  padding: 0.5em 0.75em;\\n  font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\\n'], ['\\n  border-radius: 5px;\\n  transition: 25ms ease-out;\\n  padding: 0.5em 0.75em;\\n  font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\\n']),\n    _templateObject2 = _taggedTemplateLiteral(['\\n  text-decoration: none;\\n  color: #fff;\\n  margin: 0.5em;\\n  display: inline-block;\\n\\n  svg {\\n    width: 1em;\\n    height: 1em;\\n    vertical-align: top;\\n\\n    &:not(:only-child) {\\n      margin-right: 0.4em;\\n    }\\n  }\\n\\n  ', ';\\n\\n  ', ';\\n\\n  ', ';\\n'], ['\\n  text-decoration: none;\\n  color: #fff;\\n  margin: 0.5em;\\n  display: inline-block;\\n\\n  svg {\\n    width: 1em;\\n    height: 1em;\\n    vertical-align: top;\\n\\n    &:not(:only-child) {\\n      margin-right: 0.4em;\\n    }\\n  }\\n\\n  ', ';\\n\\n  ', ';\\n\\n  ', ';\\n']),\n    _templateObject3 = _taggedTemplateLiteral(['\\n    svg {\\n      vertical-align: middle;\\n    }\\n  '], ['\\n    svg {\\n      vertical-align: middle;\\n    }\\n  ']),\n    _templateObject4 = _taggedTemplateLiteral(['\\n    svg {\\n      stroke: #232323;\\n      fill: none;\\n    }\\n  '], ['\\n    svg {\\n      stroke: #232323;\\n      fill: none;\\n    }\\n  ']),\n    _templateObject5 = _taggedTemplateLiteral(['\\n    svg {\\n      stroke: #fff;\\n      fill: none;\\n    }\\n  '], ['\\n    svg {\\n      stroke: #fff;\\n      fill: none;\\n    }\\n  ']),\n    _templateObject6 = _taggedTemplateLiteral(['\\n  display: flex;\\n  align-items: center;\\n  fill: #fff;\\n  stroke: none;\\n\\n  ', ';\\n'], ['\\n  display: flex;\\n  align-items: center;\\n  fill: #fff;\\n  stroke: none;\\n\\n  ', ';\\n']),\n    _templateObject7 = _taggedTemplateLiteral(['\\n    fill: #fff;\\n    stroke: none\\n  '], ['\\n    fill: #fff;\\n    stroke: none\\n  ']);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _styledIs = require('styled-is');\n\nvar _styledIs2 = _interopRequireDefault(_styledIs);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar SharingButton = exports.SharingButton = _styledComponents2[\""default\""].div(_templateObject);\n\nvar Link = exports.Link = _styledComponents2[\""default\""].a(_templateObject2, (0, _styledIs2[\""default\""])('small')(_templateObject3), (0, _styledIs2[\""default\""])('simple')(_templateObject4), (0, _styledIs2[\""default\""])('simpleReverse')(_templateObject5));\n\nvar Icon = exports.Icon = _styledComponents2[\""default\""].div(_templateObject6, (0, _styledIs.isOr)('solid', 'solidcircle')(_templateObject7));"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #25d366;\\n  border-color: #25d366;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #1da851;\\n    border-color: #1da851;\\n  }\\n'], ['\\n  background-color: #25d366;\\n  border-color: #25d366;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #1da851;\\n    border-color: #1da851;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _whatsapp = require('../svg/whatsapp.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Whatsapp = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      message = _ref.message,\n      props = _objectWithoutProperties(_ref, ['link', 'message']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'WhatsApp',\n    href: _consts2[\""default\""].whatsapp(link, message),\n    buttonComponent: Whatsapp,\n    iconFill: _whatsapp.WhatsappIconFill,\n    iconCircle: _whatsapp.WhatsappIconCircle,\n    iconCircleSolid: _whatsapp.WhatsappIconCircleSolid\n  }));\n};"",""require(\""core-js/modules/es6.regexp.split\"");\n\nrequire(\""core-js/modules/es6.array.for-each\"");\n\n(function (factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module['exports'] = factory() : typeof define === 'function' && define['amd'] ? define(factory()) : window['stylisRuleSheet'] = factory();\n})(function () {\n  'use strict';\n\n  return function (insertRule) {\n    var delimiter = '/*|*/';\n    var needle = delimiter + '}';\n\n    function toSheet(block) {\n      if (block) try {\n        insertRule(block + '}');\n      } catch (e) {}\n    }\n\n    return function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {\n      switch (context) {\n        // property\n        case 1:\n          // @import\n          if (depth === 0 && content.charCodeAt(0) === 64) return insertRule(content + ';'), '';\n          break;\n        // selector\n\n        case 2:\n          if (ns === 0) return content + delimiter;\n          break;\n        // at-rule\n\n        case 3:\n          switch (ns) {\n            // @font-face, @page\n            case 102:\n            case 112:\n              return insertRule(selectors[0] + content), '';\n\n            default:\n              return content + (at === 0 ? delimiter : '');\n          }\n\n        case -2:\n          content.split(needle).forEach(toSheet);\n      }\n    };\n  };\n});"",""'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.LinkedinIconCircleSolid = exports.LinkedinIconCircle = exports.LinkedinIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar LinkedinIconFill = exports.LinkedinIconFill = function LinkedinIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M6.5 21.5h-5v-13h5v13zM4 6.5C2.5 6.5 1.5 5.3 1.5 4s1-2.4 2.5-2.4c1.6 0 2.5 1 2.6 2.5 0 1.4-1 2.5-2.6 2.5zm11.5 6c-1 0-2 1-2 2v7h-5v-13h5V10s1.6-1.5 4-1.5c3 0 5 2.2 5 6.3v6.7h-5v-7c0-1-1-2-2-2z\""\n  }));\n};\n\nvar LinkedinIconCircle = exports.LinkedinIconCircle = function LinkedinIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M15 12.5c-.28 0-.5.22-.5.5v3.5h-3s.03-6.48 0-7h3v.83s.46-.75 1.7-.75c1.56 0 2.3 1.12 2.3 3.3v3.62h-3V13c0-.28-.23-.5-.5-.5zm-7.5-3h2v7h-2z\""\n  }), _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""8.5\"",\n    cy: \""6.5\"",\n    r: \""1\""\n  }));\n};\n\nvar LinkedinIconCircleSolid = exports.LinkedinIconCircleSolid = function LinkedinIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    version: \""1.1\"",\n    x: \""0px\"",\n    y: \""0px\"",\n    width: \""24px\"",\n    height: \""24px\"",\n    viewBox: \""0 0 24 24\"",\n    enableBackground: \""new 0 0 24 24\"",\n    xmlSpace: \""preserve\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12,0C5.383,0,0,5.383,0,12s5.383,12,12,12s12-5.383,12-12S18.617,0,12,0z M9.5,16.5h-2v-7h2V16.5z M8.5,7.5 c-0.553,0-1-0.448-1-1c0-0.552,0.447-1,1-1s1,0.448,1,1C9.5,7.052,9.053,7.5,8.5,7.5z M18.5,16.5h-3V13c0-0.277-0.225-0.5-0.5-0.5 c-0.276,0-0.5,0.223-0.5,0.5v3.5h-3c0,0,0.031-6.478,0-7h3v0.835c0,0,0.457-0.753,1.707-0.753c1.55,0,2.293,1.12,2.293,3.296V16.5z\""\n  }));\n};"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.TumblrIconCircle = exports.TumblrIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar TumblrIconFill = exports.TumblrIconFill = function TumblrIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M13.5.5v5h5v4h-5V15c0 5 3.5 4.4 6 2.8v4.4c-6.7 3.2-12 0-12-4.2V9.5h-3V6.7c1-.3 2.2-.7 3-1.3.5-.5 1-1.2 1.4-2 .3-.7.6-1.7.7-3h3.8z\""\n  }));\n};\n\nvar TumblrIconCircle = exports.TumblrIconCircle = function TumblrIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    version: \""1.1\"",\n    x: \""0px\"",\n    y: \""0px\"",\n    width: \""24px\"",\n    height: \""24px\"",\n    viewBox: \""0 0 24 24\"",\n    enableBackground: \""new 0 0 24 24\"",\n    xmlSpace: \""preserve\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12,0C5.383,0,0,5.383,0,12s5.383,12,12,12s12-5.383,12-12S18.617,0,12,0z M15.492,17.616C11.401,19.544,9.5,17,9.5,14.031 V9.5h-2V8.142c0.549-0.178,1.236-0.435,1.627-0.768c0.393-0.334,0.707-0.733,0.943-1.2c0.238-0.467,0.401-0.954,0.49-1.675H12.5v3h2 v2h-2v3.719c0,2.468,1.484,2.692,2.992,1.701V17.616z\""\n  }));\n};"",""function areInputsEqual(newInputs, lastInputs) {\n  if (newInputs.length !== lastInputs.length) {\n    return false;\n  }\n\n  for (var i = 0; i < newInputs.length; i++) {\n    if (newInputs[i] !== lastInputs[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n  if (isEqual === void 0) {\n    isEqual = areInputsEqual;\n  }\n\n  var lastThis;\n  var lastArgs = [];\n  var lastResult;\n  var calledOnce = false;\n\n  function memoized() {\n    var newArgs = [];\n\n    for (var _i = 0; _i < arguments.length; _i++) {\n      newArgs[_i] = arguments[_i];\n    }\n\n    if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n      return lastResult;\n    }\n\n    lastResult = resultFn.apply(this, newArgs);\n    calledOnce = true;\n    lastThis = this;\n    lastArgs = newArgs;\n    return lastResult;\n  }\n\n  return memoized;\n}\n\nexport default memoizeOne;"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #1a7576;\\n  border-color: #1a7576;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #114c4c;\\n    border-color: #114c4c;\\n  }\\n'], ['\\n  background-color: #1a7576;\\n  border-color: #1a7576;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #114c4c;\\n    border-color: #114c4c;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _xing = require('../svg/xing.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Xing = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      message = _ref.message,\n      props = _objectWithoutProperties(_ref, ['link', 'message']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'Xing',\n    href: _consts2[\""default\""].xing(link, message),\n    buttonComponent: Xing,\n    iconFill: _xing.XingIconFill,\n    iconCircle: _xing.XingIconCircle,\n    iconCircleSolid: _xing.XingIconCircleSolid\n  }));\n};"",""require(\""core-js/modules/es6.object.define-property\"");\n\nmodule.exports = function (module) {\n  if (!module.webpackPolyfill) {\n    module.deprecate = function () {};\n\n    module.paths = []; // module.parent = undefined by default\n\n    if (!module.children) module.children = [];\n    Object.defineProperty(module, \""loaded\"", {\n      enumerable: true,\n      get: function get() {\n        return module.l;\n      }\n    });\n    Object.defineProperty(module, \""id\"", {\n      enumerable: true,\n      get: function get() {\n        return module.i;\n      }\n    });\n    module.webpackPolyfill = 1;\n  }\n\n  return module;\n};"",""require(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.regexp.split\"");\n\nrequire(\""core-js/modules/es6.string.trim\"");\n\nrequire(\""core-js/modules/es6.regexp.replace\"");\n\n!function (e) {\n  \""object\"" == typeof exports && \""undefined\"" != typeof module ? module.exports = e(null) : \""function\"" == typeof define && define.amd ? define(e(null)) : window.stylis = e(null);\n}(function e(a) {\n  \""use strict\"";\n\n  var r = /^\\0+/g,\n      c = /[\\0\\r\\f]/g,\n      s = /: */g,\n      t = /zoo|gra/,\n      i = /([,: ])(transform)/g,\n      f = /,+\\s*(?![^(]*[)])/g,\n      n = / +\\s*(?![^(]*[)])/g,\n      l = / *[\\0] */g,\n      o = /,\\r+?/g,\n      h = /([\\t\\r\\n ])*\\f?&/g,\n      u = /:global\\(((?:[^\\(\\)\\[\\]]*|\\[.*\\]|\\([^\\(\\)]*\\))*)\\)/g,\n      d = /\\W+/g,\n      b = /@(k\\w+)\\s*(\\S*)\\s*/,\n      p = /::(place)/g,\n      k = /:(read-only)/g,\n      g = /\\s+(?=[{\\];=:>])/g,\n      A = /([[}=:>])\\s+/g,\n      C = /(\\{[^{]+?);(?=\\})/g,\n      w = /\\s{2,}/g,\n      v = /([^\\(])(:+) */g,\n      m = /[svh]\\w+-[tblr]{2}/,\n      x = /\\(\\s*(.*)\\s*\\)/g,\n      $ = /([\\s\\S]*?);/g,\n      y = /-self|flex-/g,\n      O = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n      j = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n      z = /([^-])(image-set\\()/,\n      N = \""-webkit-\"",\n      S = \""-moz-\"",\n      F = \""-ms-\"",\n      W = 59,\n      q = 125,\n      B = 123,\n      D = 40,\n      E = 41,\n      G = 91,\n      H = 93,\n      I = 10,\n      J = 13,\n      K = 9,\n      L = 64,\n      M = 32,\n      P = 38,\n      Q = 45,\n      R = 95,\n      T = 42,\n      U = 44,\n      V = 58,\n      X = 39,\n      Y = 34,\n      Z = 47,\n      _ = 62,\n      ee = 43,\n      ae = 126,\n      re = 0,\n      ce = 12,\n      se = 11,\n      te = 107,\n      ie = 109,\n      fe = 115,\n      ne = 112,\n      le = 111,\n      oe = 105,\n      he = 99,\n      ue = 100,\n      de = 112,\n      be = 1,\n      pe = 1,\n      ke = 0,\n      ge = 1,\n      Ae = 1,\n      Ce = 1,\n      we = 0,\n      ve = 0,\n      me = 0,\n      xe = [],\n      $e = [],\n      ye = 0,\n      Oe = null,\n      je = -2,\n      ze = -1,\n      Ne = 0,\n      Se = 1,\n      Fe = 2,\n      We = 3,\n      qe = 0,\n      Be = 1,\n      De = \""\"",\n      Ee = \""\"",\n      Ge = \""\"";\n\n  function He(e, a, s, t, i) {\n    for (var f, n, o = 0, h = 0, u = 0, d = 0, g = 0, A = 0, C = 0, w = 0, m = 0, $ = 0, y = 0, O = 0, j = 0, z = 0, R = 0, we = 0, $e = 0, Oe = 0, je = 0, ze = s.length, Je = ze - 1, Re = \""\"", Te = \""\"", Ue = \""\"", Ve = \""\"", Xe = \""\"", Ye = \""\""; R < ze;) {\n      if (C = s.charCodeAt(R), R === Je) if (h + d + u + o !== 0) {\n        if (0 !== h) C = h === Z ? I : Z;\n        d = u = o = 0, ze++, Je++;\n      }\n\n      if (h + d + u + o === 0) {\n        if (R === Je) {\n          if (we > 0) Te = Te.replace(c, \""\"");\n\n          if (Te.trim().length > 0) {\n            switch (C) {\n              case M:\n              case K:\n              case W:\n              case J:\n              case I:\n                break;\n\n              default:\n                Te += s.charAt(R);\n            }\n\n            C = W;\n          }\n        }\n\n        if (1 === $e) switch (C) {\n          case B:\n          case q:\n          case W:\n          case Y:\n          case X:\n          case D:\n          case E:\n          case U:\n            $e = 0;\n\n          case K:\n          case J:\n          case I:\n          case M:\n            break;\n\n          default:\n            for ($e = 0, je = R, g = C, R--, C = W; je < ze;) {\n              switch (s.charCodeAt(je++)) {\n                case I:\n                case J:\n                case W:\n                  ++R, C = g, je = ze;\n                  break;\n\n                case V:\n                  if (we > 0) ++R, C = g;\n\n                case B:\n                  je = ze;\n              }\n            }\n\n        }\n\n        switch (C) {\n          case B:\n            for (g = (Te = Te.trim()).charCodeAt(0), y = 1, je = ++R; R < ze;) {\n              switch (C = s.charCodeAt(R)) {\n                case B:\n                  y++;\n                  break;\n\n                case q:\n                  y--;\n                  break;\n\n                case Z:\n                  switch (A = s.charCodeAt(R + 1)) {\n                    case T:\n                    case Z:\n                      R = Qe(A, R, Je, s);\n                  }\n\n                  break;\n\n                case G:\n                  C++;\n\n                case D:\n                  C++;\n\n                case Y:\n                case X:\n                  for (; R++ < Je && s.charCodeAt(R) !== C;) {\n                    ;\n                  }\n\n              }\n\n              if (0 === y) break;\n              R++;\n            }\n\n            if (Ue = s.substring(je, R), g === re) g = (Te = Te.replace(r, \""\"").trim()).charCodeAt(0);\n\n            switch (g) {\n              case L:\n                if (we > 0) Te = Te.replace(c, \""\"");\n\n                switch (A = Te.charCodeAt(1)) {\n                  case ue:\n                  case ie:\n                  case fe:\n                  case Q:\n                    f = a;\n                    break;\n\n                  default:\n                    f = xe;\n                }\n\n                if (je = (Ue = He(a, f, Ue, A, i + 1)).length, me > 0 && 0 === je) je = Te.length;\n                if (ye > 0) if (f = Ie(xe, Te, Oe), n = Pe(We, Ue, f, a, pe, be, je, A, i, t), Te = f.join(\""\""), void 0 !== n) if (0 === (je = (Ue = n.trim()).length)) A = 0, Ue = \""\"";\n                if (je > 0) switch (A) {\n                  case fe:\n                    Te = Te.replace(x, Me);\n\n                  case ue:\n                  case ie:\n                  case Q:\n                    Ue = Te + \""{\"" + Ue + \""}\"";\n                    break;\n\n                  case te:\n                    if (Ue = (Te = Te.replace(b, \""$1 $2\"" + (Be > 0 ? De : \""\""))) + \""{\"" + Ue + \""}\"", 1 === Ae || 2 === Ae && Le(\""@\"" + Ue, 3)) Ue = \""@\"" + N + Ue + \""@\"" + Ue;else Ue = \""@\"" + Ue;\n                    break;\n\n                  default:\n                    if (Ue = Te + Ue, t === de) Ve += Ue, Ue = \""\"";\n                } else Ue = \""\"";\n                break;\n\n              default:\n                Ue = He(a, Ie(a, Te, Oe), Ue, t, i + 1);\n            }\n\n            Xe += Ue, O = 0, $e = 0, z = 0, we = 0, Oe = 0, j = 0, Te = \""\"", Ue = \""\"", C = s.charCodeAt(++R);\n            break;\n\n          case q:\n          case W:\n            if ((je = (Te = (we > 0 ? Te.replace(c, \""\"") : Te).trim()).length) > 1) {\n              if (0 === z) if ((g = Te.charCodeAt(0)) === Q || g > 96 && g < 123) je = (Te = Te.replace(\"" \"", \"":\"")).length;\n              if (ye > 0) if (void 0 !== (n = Pe(Se, Te, a, e, pe, be, Ve.length, t, i, t))) if (0 === (je = (Te = n.trim()).length)) Te = \""\\0\\0\"";\n\n              switch (g = Te.charCodeAt(0), A = Te.charCodeAt(1), g) {\n                case re:\n                  break;\n\n                case L:\n                  if (A === oe || A === he) {\n                    Ye += Te + s.charAt(R);\n                    break;\n                  }\n\n                default:\n                  if (Te.charCodeAt(je - 1) === V) break;\n                  Ve += Ke(Te, g, A, Te.charCodeAt(2));\n              }\n            }\n\n            O = 0, $e = 0, z = 0, we = 0, Oe = 0, Te = \""\"", C = s.charCodeAt(++R);\n        }\n      }\n\n      switch (C) {\n        case J:\n        case I:\n          if (h + d + u + o + ve === 0) switch ($) {\n            case E:\n            case X:\n            case Y:\n            case L:\n            case ae:\n            case _:\n            case T:\n            case ee:\n            case Z:\n            case Q:\n            case V:\n            case U:\n            case W:\n            case B:\n            case q:\n              break;\n\n            default:\n              if (z > 0) $e = 1;\n          }\n          if (h === Z) h = 0;else if (ge + O === 0 && t !== te && Te.length > 0) we = 1, Te += \""\\0\"";\n          if (ye * qe > 0) Pe(Ne, Te, a, e, pe, be, Ve.length, t, i, t);\n          be = 1, pe++;\n          break;\n\n        case W:\n        case q:\n          if (h + d + u + o === 0) {\n            be++;\n            break;\n          }\n\n        default:\n          switch (be++, Re = s.charAt(R), C) {\n            case K:\n            case M:\n              if (d + o + h === 0) switch (w) {\n                case U:\n                case V:\n                case K:\n                case M:\n                  Re = \""\"";\n                  break;\n\n                default:\n                  if (C !== M) Re = \"" \"";\n              }\n              break;\n\n            case re:\n              Re = \""\\\\0\"";\n              break;\n\n            case ce:\n              Re = \""\\\\f\"";\n              break;\n\n            case se:\n              Re = \""\\\\v\"";\n              break;\n\n            case P:\n              if (d + h + o === 0 && ge > 0) Oe = 1, we = 1, Re = \""\\f\"" + Re;\n              break;\n\n            case 108:\n              if (d + h + o + ke === 0 && z > 0) switch (R - z) {\n                case 2:\n                  if (w === ne && s.charCodeAt(R - 3) === V) ke = w;\n\n                case 8:\n                  if (m === le) ke = m;\n              }\n              break;\n\n            case V:\n              if (d + h + o === 0) z = R;\n              break;\n\n            case U:\n              if (h + u + d + o === 0) we = 1, Re += \""\\r\"";\n              break;\n\n            case Y:\n            case X:\n              if (0 === h) d = d === C ? 0 : 0 === d ? C : d;\n              break;\n\n            case G:\n              if (d + h + u === 0) o++;\n              break;\n\n            case H:\n              if (d + h + u === 0) o--;\n              break;\n\n            case E:\n              if (d + h + o === 0) u--;\n              break;\n\n            case D:\n              if (d + h + o === 0) {\n                if (0 === O) switch (2 * w + 3 * m) {\n                  case 533:\n                    break;\n\n                  default:\n                    y = 0, O = 1;\n                }\n                u++;\n              }\n\n              break;\n\n            case L:\n              if (h + u + d + o + z + j === 0) j = 1;\n              break;\n\n            case T:\n            case Z:\n              if (d + o + u > 0) break;\n\n              switch (h) {\n                case 0:\n                  switch (2 * C + 3 * s.charCodeAt(R + 1)) {\n                    case 235:\n                      h = Z;\n                      break;\n\n                    case 220:\n                      je = R, h = T;\n                  }\n\n                  break;\n\n                case T:\n                  if (C === Z && w === T && je + 2 !== R) {\n                    if (33 === s.charCodeAt(je + 2)) Ve += s.substring(je, R + 1);\n                    Re = \""\"", h = 0;\n                  }\n\n              }\n\n          }\n\n          if (0 === h) {\n            if (ge + d + o + j === 0 && t !== te && C !== W) switch (C) {\n              case U:\n              case ae:\n              case _:\n              case ee:\n              case E:\n              case D:\n                if (0 === O) {\n                  switch (w) {\n                    case K:\n                    case M:\n                    case I:\n                    case J:\n                      Re += \""\\0\"";\n                      break;\n\n                    default:\n                      Re = \""\\0\"" + Re + (C === U ? \""\"" : \""\\0\"");\n                  }\n\n                  we = 1;\n                } else switch (C) {\n                  case D:\n                    if (z + 7 === R && 108 === w) z = 0;\n                    O = ++y;\n                    break;\n\n                  case E:\n                    if (0 == (O = --y)) we = 1, Re += \""\\0\"";\n                }\n\n                break;\n\n              case K:\n              case M:\n                switch (w) {\n                  case re:\n                  case B:\n                  case q:\n                  case W:\n                  case U:\n                  case ce:\n                  case K:\n                  case M:\n                  case I:\n                  case J:\n                    break;\n\n                  default:\n                    if (0 === O) we = 1, Re += \""\\0\"";\n                }\n\n            }\n            if (Te += Re, C !== M && C !== K) $ = C;\n          }\n\n      }\n\n      m = w, w = C, R++;\n    }\n\n    if (je = Ve.length, me > 0) if (0 === je && 0 === Xe.length && 0 === a[0].length == false) if (t !== ie || 1 === a.length && (ge > 0 ? Ee : Ge) === a[0]) je = a.join(\"",\"").length + 2;\n\n    if (je > 0) {\n      if (f = 0 === ge && t !== te ? function (e) {\n        for (var a, r, s = 0, t = e.length, i = Array(t); s < t; ++s) {\n          for (var f = e[s].split(l), n = \""\"", o = 0, h = 0, u = 0, d = 0, b = f.length; o < b; ++o) {\n            if (0 === (h = (r = f[o]).length) && b > 1) continue;\n            if (u = n.charCodeAt(n.length - 1), d = r.charCodeAt(0), a = \""\"", 0 !== o) switch (u) {\n              case T:\n              case ae:\n              case _:\n              case ee:\n              case M:\n              case D:\n                break;\n\n              default:\n                a = \"" \"";\n            }\n\n            switch (d) {\n              case P:\n                r = a + Ee;\n\n              case ae:\n              case _:\n              case ee:\n              case M:\n              case E:\n              case D:\n                break;\n\n              case G:\n                r = a + r + Ee;\n                break;\n\n              case V:\n                switch (2 * r.charCodeAt(1) + 3 * r.charCodeAt(2)) {\n                  case 530:\n                    if (Ce > 0) {\n                      r = a + r.substring(8, h - 1);\n                      break;\n                    }\n\n                  default:\n                    if (o < 1 || f[o - 1].length < 1) r = a + Ee + r;\n                }\n\n                break;\n\n              case U:\n                a = \""\"";\n\n              default:\n                if (h > 1 && r.indexOf(\"":\"") > 0) r = a + r.replace(v, \""$1\"" + Ee + \""$2\"");else r = a + r + Ee;\n            }\n\n            n += r;\n          }\n\n          i[s] = n.replace(c, \""\"").trim();\n        }\n\n        return i;\n      }(a) : a, ye > 0) if (void 0 !== (n = Pe(Fe, Ve, f, e, pe, be, je, t, i, t)) && 0 === (Ve = n).length) return Ye + Ve + Xe;\n\n      if (Ve = f.join(\"",\"") + \""{\"" + Ve + \""}\"", Ae * ke != 0) {\n        if (2 === Ae && !Le(Ve, 2)) ke = 0;\n\n        switch (ke) {\n          case le:\n            Ve = Ve.replace(k, \"":\"" + S + \""$1\"") + Ve;\n            break;\n\n          case ne:\n            Ve = Ve.replace(p, \""::\"" + N + \""input-$1\"") + Ve.replace(p, \""::\"" + S + \""$1\"") + Ve.replace(p, \"":\"" + F + \""input-$1\"") + Ve;\n        }\n\n        ke = 0;\n      }\n    }\n\n    return Ye + Ve + Xe;\n  }\n\n  function Ie(e, a, r) {\n    var c = a.trim().split(o),\n        s = c,\n        t = c.length,\n        i = e.length;\n\n    switch (i) {\n      case 0:\n      case 1:\n        for (var f = 0, n = 0 === i ? \""\"" : e[0] + \"" \""; f < t; ++f) {\n          s[f] = Je(n, s[f], r, i).trim();\n        }\n\n        break;\n\n      default:\n        f = 0;\n        var l = 0;\n\n        for (s = []; f < t; ++f) {\n          for (var h = 0; h < i; ++h) {\n            s[l++] = Je(e[h] + \"" \"", c[f], r, i).trim();\n          }\n        }\n\n    }\n\n    return s;\n  }\n\n  function Je(e, a, r, c) {\n    var s = a,\n        t = s.charCodeAt(0);\n    if (t < 33) t = (s = s.trim()).charCodeAt(0);\n\n    switch (t) {\n      case P:\n        switch (ge + c) {\n          case 0:\n          case 1:\n            if (0 === e.trim().length) break;\n\n          default:\n            return s.replace(h, \""$1\"" + e.trim());\n        }\n\n        break;\n\n      case V:\n        switch (s.charCodeAt(1)) {\n          case 103:\n            if (Ce > 0 && ge > 0) return s.replace(u, \""$1\"").replace(h, \""$1\"" + Ge);\n            break;\n\n          default:\n            return e.trim() + s.replace(h, \""$1\"" + e.trim());\n        }\n\n      default:\n        if (r * ge > 0 && s.indexOf(\""\\f\"") > 0) return s.replace(h, (e.charCodeAt(0) === V ? \""\"" : \""$1\"") + e.trim());\n    }\n\n    return e + s;\n  }\n\n  function Ke(e, a, r, c) {\n    var l,\n        o = 0,\n        h = e + \"";\"",\n        u = 2 * a + 3 * r + 4 * c;\n    if (944 === u) return function (e) {\n      var a = e.length,\n          r = e.indexOf(\"":\"", 9) + 1,\n          c = e.substring(0, r).trim(),\n          s = e.substring(r, a - 1).trim();\n\n      switch (e.charCodeAt(9) * Be) {\n        case 0:\n          break;\n\n        case Q:\n          if (110 !== e.charCodeAt(10)) break;\n\n        default:\n          for (var t = s.split((s = \""\"", f)), i = 0, r = 0, a = t.length; i < a; r = 0, ++i) {\n            for (var l = t[i], o = l.split(n); l = o[r];) {\n              var h = l.charCodeAt(0);\n              if (1 === Be && (h > L && h < 90 || h > 96 && h < 123 || h === R || h === Q && l.charCodeAt(1) !== Q)) switch (isNaN(parseFloat(l)) + (-1 !== l.indexOf(\""(\""))) {\n                case 1:\n                  switch (l) {\n                    case \""infinite\"":\n                    case \""alternate\"":\n                    case \""backwards\"":\n                    case \""running\"":\n                    case \""normal\"":\n                    case \""forwards\"":\n                    case \""both\"":\n                    case \""none\"":\n                    case \""linear\"":\n                    case \""ease\"":\n                    case \""ease-in\"":\n                    case \""ease-out\"":\n                    case \""ease-in-out\"":\n                    case \""paused\"":\n                    case \""reverse\"":\n                    case \""alternate-reverse\"":\n                    case \""inherit\"":\n                    case \""initial\"":\n                    case \""unset\"":\n                    case \""step-start\"":\n                    case \""step-end\"":\n                      break;\n\n                    default:\n                      l += De;\n                  }\n\n              }\n              o[r++] = l;\n            }\n\n            s += (0 === i ? \""\"" : \"",\"") + o.join(\"" \"");\n          }\n\n      }\n\n      if (s = c + s + \"";\"", 1 === Ae || 2 === Ae && Le(s, 1)) return N + s + s;\n      return s;\n    }(h);else if (0 === Ae || 2 === Ae && !Le(h, 1)) return h;\n\n    switch (u) {\n      case 1015:\n        return 97 === h.charCodeAt(10) ? N + h + h : h;\n\n      case 951:\n        return 116 === h.charCodeAt(3) ? N + h + h : h;\n\n      case 963:\n        return 110 === h.charCodeAt(5) ? N + h + h : h;\n\n      case 1009:\n        if (100 !== h.charCodeAt(4)) break;\n\n      case 969:\n      case 942:\n        return N + h + h;\n\n      case 978:\n        return N + h + S + h + h;\n\n      case 1019:\n      case 983:\n        return N + h + S + h + F + h + h;\n\n      case 883:\n        if (h.charCodeAt(8) === Q) return N + h + h;\n        if (h.indexOf(\""image-set(\"", 11) > 0) return h.replace(z, \""$1\"" + N + \""$2\"") + h;\n        return h;\n\n      case 932:\n        if (h.charCodeAt(4) === Q) switch (h.charCodeAt(5)) {\n          case 103:\n            return N + \""box-\"" + h.replace(\""-grow\"", \""\"") + N + h + F + h.replace(\""grow\"", \""positive\"") + h;\n\n          case 115:\n            return N + h + F + h.replace(\""shrink\"", \""negative\"") + h;\n\n          case 98:\n            return N + h + F + h.replace(\""basis\"", \""preferred-size\"") + h;\n        }\n        return N + h + F + h + h;\n\n      case 964:\n        return N + h + F + \""flex-\"" + h + h;\n\n      case 1023:\n        if (99 !== h.charCodeAt(8)) break;\n        return l = h.substring(h.indexOf(\"":\"", 15)).replace(\""flex-\"", \""\"").replace(\""space-between\"", \""justify\""), N + \""box-pack\"" + l + N + h + F + \""flex-pack\"" + l + h;\n\n      case 1005:\n        return t.test(h) ? h.replace(s, \"":\"" + N) + h.replace(s, \"":\"" + S) + h : h;\n\n      case 1e3:\n        switch (o = (l = h.substring(13).trim()).indexOf(\""-\"") + 1, l.charCodeAt(0) + l.charCodeAt(o)) {\n          case 226:\n            l = h.replace(m, \""tb\"");\n            break;\n\n          case 232:\n            l = h.replace(m, \""tb-rl\"");\n            break;\n\n          case 220:\n            l = h.replace(m, \""lr\"");\n            break;\n\n          default:\n            return h;\n        }\n\n        return N + h + F + l + h;\n\n      case 1017:\n        if (-1 === h.indexOf(\""sticky\"", 9)) return h;\n\n      case 975:\n        switch (o = (h = e).length - 10, u = (l = (33 === h.charCodeAt(o) ? h.substring(0, o) : h).substring(e.indexOf(\"":\"", 7) + 1).trim()).charCodeAt(0) + (0 | l.charCodeAt(7))) {\n          case 203:\n            if (l.charCodeAt(8) < 111) break;\n\n          case 115:\n            h = h.replace(l, N + l) + \"";\"" + h;\n            break;\n\n          case 207:\n          case 102:\n            h = h.replace(l, N + (u > 102 ? \""inline-\"" : \""\"") + \""box\"") + \"";\"" + h.replace(l, N + l) + \"";\"" + h.replace(l, F + l + \""box\"") + \"";\"" + h;\n        }\n\n        return h + \"";\"";\n\n      case 938:\n        if (h.charCodeAt(5) === Q) switch (h.charCodeAt(6)) {\n          case 105:\n            return l = h.replace(\""-items\"", \""\""), N + h + N + \""box-\"" + l + F + \""flex-\"" + l + h;\n\n          case 115:\n            return N + h + F + \""flex-item-\"" + h.replace(y, \""\"") + h;\n\n          default:\n            return N + h + F + \""flex-line-pack\"" + h.replace(\""align-content\"", \""\"").replace(y, \""\"") + h;\n        }\n        break;\n\n      case 973:\n      case 989:\n        if (h.charCodeAt(3) !== Q || 122 === h.charCodeAt(4)) break;\n\n      case 931:\n      case 953:\n        if (true === j.test(e)) if (115 === (l = e.substring(e.indexOf(\"":\"") + 1)).charCodeAt(0)) return Ke(e.replace(\""stretch\"", \""fill-available\""), a, r, c).replace(\"":fill-available\"", \"":stretch\"");else return h.replace(l, N + l) + h.replace(l, S + l.replace(\""fill-\"", \""\"")) + h;\n        break;\n\n      case 962:\n        if (h = N + h + (102 === h.charCodeAt(5) ? F + h : \""\"") + h, r + c === 211 && 105 === h.charCodeAt(13) && h.indexOf(\""transform\"", 10) > 0) return h.substring(0, h.indexOf(\"";\"", 27) + 1).replace(i, \""$1\"" + N + \""$2\"") + h;\n    }\n\n    return h;\n  }\n\n  function Le(e, a) {\n    var r = e.indexOf(1 === a ? \"":\"" : \""{\""),\n        c = e.substring(0, 3 !== a ? r : 10),\n        s = e.substring(r + 1, e.length - 1);\n    return Oe(2 !== a ? c : c.replace(O, \""$1\""), s, a);\n  }\n\n  function Me(e, a) {\n    var r = Ke(a, a.charCodeAt(0), a.charCodeAt(1), a.charCodeAt(2));\n    return r !== a + \"";\"" ? r.replace($, \"" or ($1)\"").substring(4) : \""(\"" + a + \"")\"";\n  }\n\n  function Pe(e, a, r, c, s, t, i, f, n, l) {\n    for (var o, h = 0, u = a; h < ye; ++h) {\n      switch (o = $e[h].call(Te, e, u, r, c, s, t, i, f, n, l)) {\n        case void 0:\n        case false:\n        case true:\n        case null:\n          break;\n\n        default:\n          u = o;\n      }\n    }\n\n    if (u !== a) return u;\n  }\n\n  function Qe(e, a, r, c) {\n    for (var s = a + 1; s < r; ++s) {\n      switch (c.charCodeAt(s)) {\n        case Z:\n          if (e === T) if (c.charCodeAt(s - 1) === T && a + 2 !== s) return s + 1;\n          break;\n\n        case I:\n          if (e === Z) return s + 1;\n      }\n    }\n\n    return s;\n  }\n\n  function Re(e) {\n    for (var a in e) {\n      var r = e[a];\n\n      switch (a) {\n        case \""keyframe\"":\n          Be = 0 | r;\n          break;\n\n        case \""global\"":\n          Ce = 0 | r;\n          break;\n\n        case \""cascade\"":\n          ge = 0 | r;\n          break;\n\n        case \""compress\"":\n          we = 0 | r;\n          break;\n\n        case \""semicolon\"":\n          ve = 0 | r;\n          break;\n\n        case \""preserve\"":\n          me = 0 | r;\n          break;\n\n        case \""prefix\"":\n          if (Oe = null, !r) Ae = 0;else if (\""function\"" != typeof r) Ae = 1;else Ae = 2, Oe = r;\n      }\n    }\n\n    return Re;\n  }\n\n  function Te(a, r) {\n    if (void 0 !== this && this.constructor === Te) return e(a);\n    var s = a,\n        t = s.charCodeAt(0);\n    if (t < 33) t = (s = s.trim()).charCodeAt(0);\n    if (Be > 0) De = s.replace(d, t === G ? \""\"" : \""-\"");\n    if (t = 1, 1 === ge) Ge = s;else Ee = s;\n    var i,\n        f = [Ge];\n    if (ye > 0) if (void 0 !== (i = Pe(ze, r, f, f, pe, be, 0, 0, 0, 0)) && \""string\"" == typeof i) r = i;\n    var n = He(xe, f, r, 0, 0);\n    if (ye > 0) if (void 0 !== (i = Pe(je, n, f, f, pe, be, n.length, 0, 0, 0)) && \""string\"" != typeof (n = i)) t = 0;\n    return De = \""\"", Ge = \""\"", Ee = \""\"", ke = 0, pe = 1, be = 1, we * t == 0 ? n : n.replace(c, \""\"").replace(g, \""\"").replace(A, \""$1\"").replace(C, \""$1\"").replace(w, \"" \"");\n  }\n\n  if (Te.use = function e(a) {\n    switch (a) {\n      case void 0:\n      case null:\n        ye = $e.length = 0;\n        break;\n\n      default:\n        if (\""function\"" == typeof a) $e[ye++] = a;else if (\""object\"" == typeof a) for (var r = 0, c = a.length; r < c; ++r) {\n          e(a[r]);\n        } else qe = 0 | !!a;\n    }\n\n    return e;\n  }, Te.set = Re, void 0 !== a) Re(a);\n  return Te;\n});"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.WhatsappIconCircleSolid = exports.WhatsappIconCircle = exports.WhatsappIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar WhatsappIconFill = exports.WhatsappIconFill = function WhatsappIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M20.1 3.9C17.9 1.7 15 .5 12 .5 5.8.5.7 5.6.7 11.9c0 2 .5 3.9 1.5 5.6L.6 23.4l6-1.6c1.6.9 3.5 1.3 5.4 1.3 6.3 0 11.4-5.1 11.4-11.4-.1-2.8-1.2-5.7-3.3-7.8zM12 21.4c-1.7 0-3.3-.5-4.8-1.3l-.4-.2-3.5 1 1-3.4L4 17c-1-1.5-1.4-3.2-1.4-5.1 0-5.2 4.2-9.4 9.4-9.4 2.5 0 4.9 1 6.7 2.8 1.8 1.8 2.8 4.2 2.8 6.7-.1 5.2-4.3 9.4-9.5 9.4zm5.1-7.1c-.3-.1-1.7-.9-1.9-1-.3-.1-.5-.1-.7.1-.2.3-.8 1-.9 1.1-.2.2-.3.2-.6.1s-1.2-.5-2.3-1.4c-.9-.8-1.4-1.7-1.6-2-.2-.3 0-.5.1-.6s.3-.3.4-.5c.2-.1.3-.3.4-.5.1-.2 0-.4 0-.5C10 9 9.3 7.6 9 7c-.1-.4-.4-.3-.5-.3h-.6s-.4.1-.7.3c-.3.3-1 1-1 2.4s1 2.8 1.1 3c.1.2 2 3.1 4.9 4.3.7.3 1.2.5 1.6.6.7.2 1.3.2 1.8.1.6-.1 1.7-.7 1.9-1.3.2-.7.2-1.2.2-1.3-.1-.3-.3-.4-.6-.5z\""\n  }));\n};\n\nvar WhatsappIconCircle = exports.WhatsappIconCircle = function WhatsappIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    strokeWidth: \""1px\"",\n    d: \""M17.6 6.2c-1.5-1.5-3.4-2.3-5.5-2.3-4.3 0-7.8 3.5-7.8 7.8 0 1.4.4 2.7 1 3.9l-1.1 4 4.1-1.1c1.1.6 2.4.9 3.7.9 4.3 0 7.8-3.5 7.8-7.8.1-2-.7-3.9-2.2-5.4zm-5.5 11.9c-1.2 0-2.3-.3-3.3-.9l-.2-.1-2.4.6.7-2.4-.2-.2c-.6-1-1-2.2-1-3.4 0-3.6 2.9-6.5 6.5-6.5 1.7 0 3.3.7 4.6 1.9 1.2 1.2 1.9 2.8 1.9 4.6-.1 3.5-3 6.4-6.6 6.4zm3.5-4.8c-.2-.1-1.1-.6-1.3-.6-.2-.1-.3-.1-.4.1-.1.2-.5.6-.6.8-.1.1-.2.1-.4 0s-.8-.3-1.6-1c-.6-.5-1-1.2-1.1-1.3-.1-.2 0-.3.1-.4l.3-.3s.1-.2.2-.3c.1-.1 0-.2 0-.3s-.4-1.1-.6-1.4c-.2-.4-.3-.3-.4-.3h-.4s-.3 0-.5.2-.7.7-.7 1.6c0 1 .7 1.9.8 2s1.4 2.1 3.3 2.9c.5.2.8.3 1.1.4.5.1.9.1 1.2.1.4-.1 1.1-.5 1.3-.9.2-.5.2-.8.1-.9 0-.2-.2-.3-.4-.4z\""\n  }));\n};\n\nvar WhatsappIconCircleSolid = exports.WhatsappIconCircleSolid = function WhatsappIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    height: \""24\"",\n    width: \""24\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""m12 0c-6.6 0-12 5.4-12 12s5.4 12 12 12 12-5.4 12-12-5.4-12-12-12zm0 3.8c2.2 0 4.2 0.9 5.7 2.4 1.6 1.5 2.4 3.6 2.5 5.7 0 4.5-3.6 8.1-8.1 8.1-1.4 0-2.7-0.4-3.9-1l-4.4 1.1 1.2-4.2c-0.8-1.2-1.1-2.6-1.1-4 0-4.5 3.6-8.1 8.1-8.1zm0.1 1.5c-3.7 0-6.7 3-6.7 6.7 0 1.3 0.3 2.5 1 3.6l0.1 0.3-0.7 2.4 2.5-0.7 0.3 0.099c1 0.7 2.2 1 3.4 1 3.7 0 6.8-3 6.9-6.6 0-1.8-0.7-3.5-2-4.8s-3-2-4.8-2zm-3 2.9h0.4c0.2 0 0.4-0.099 0.5 0.3s0.5 1.5 0.6 1.7 0.1 0.2 0 0.3-0.1 0.2-0.2 0.3l-0.3 0.3c-0.1 0.1-0.2 0.2-0.1 0.4 0.2 0.2 0.6 0.9 1.2 1.4 0.7 0.7 1.4 0.9 1.6 1 0.2 0 0.3 0.001 0.4-0.099s0.5-0.6 0.6-0.8c0.2-0.2 0.3-0.2 0.5-0.1l1.4 0.7c0.2 0.1 0.3 0.2 0.5 0.3 0 0.1 0.1 0.5-0.099 1s-1 0.9-1.4 1c-0.3 0-0.8 0.001-1.3-0.099-0.3-0.1-0.7-0.2-1.2-0.4-2.1-0.9-3.4-3-3.5-3.1s-0.8-1.1-0.8-2.1c0-1 0.5-1.5 0.7-1.7s0.4-0.3 0.5-0.3z\""\n  }));\n};"",""'use strict'; // this should be the entry point to your library\n\nmodule.exports = {\n  Twitter: require('./buttons/twitter')[\""default\""],\n  Facebook: require('./buttons/facebook')[\""default\""],\n  Google: require('./buttons/google')[\""default\""],\n  Tumblr: require('./buttons/tumblr')[\""default\""],\n  Mail: require('./buttons/mail')[\""default\""],\n  Pinterest: require('./buttons/pinterest')[\""default\""],\n  Linkedin: require('./buttons/linkedin')[\""default\""],\n  Reddit: require('./buttons/reddit')[\""default\""],\n  Xing: require('./buttons/xing')[\""default\""],\n  Whatsapp: require('./buttons/whatsapp')[\""default\""],\n  HackerNews: require('./buttons/hacker')[\""default\""],\n  VK: require('./buttons/vk')[\""default\""],\n  Telegram: require('./buttons/telegram')[\""default\""]\n};"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.XingIconCircleSolid = exports.XingIconCircle = exports.XingIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar XingIconFill = exports.XingIconFill = function XingIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M10.2 9.7l-3-5.4C7.2 4 7 4 6.8 4h-5c-.3 0-.4 0-.5.2v.5L4 10 .4 16v.5c0 .2.2.3.4.3h5c.3 0 .4 0 .5-.2l4-6.6v-.5zM24 .2l-.5-.2H18s-.2 0-.3.3l-8 14v.4l5.2 9c0 .2 0 .3.3.3h5.4s.3 0 .4-.2c.2-.2.2-.4 0-.5l-5-8.8L24 .7V.2z\""\n  }));\n};\n\nvar XingIconCircle = exports.XingIconCircle = function XingIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M8.4 8.5h-3L7 11.3l-2.2 3.2h3l2.3-3.2zm10-3h-3.2l-5 8.5 3.2 5.5h3.3l-3-5.5z\""\n  }));\n};\n\nvar XingIconCircleSolid = exports.XingIconCircleSolid = function XingIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.6 0 12 0zM7.8 14.5h-3L7 11.3 5.3 8.5h3l1.8 2.8L8 14.5zm9 5h-3.4l-3-5.5L15 5.5h3.2L13.6 14l3 5.5z\""\n  }));\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #507299;\\n  border-color: #507299;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #43648c;\\n    border-color: #43648c;\\n  }\\n'], ['\\n  background-color: #507299;\\n  border-color: #507299;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #43648c;\\n    border-color: #43648c;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _vk = require('../svg/vk.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar VK = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      message = _ref.message,\n      props = _objectWithoutProperties(_ref, ['link', 'message']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'VK',\n    href: _consts2[\""default\""].vk(link, message),\n    buttonComponent: VK,\n    iconFill: _vk.VKIconFill,\n    iconCircle: _vk.VKIconCircle,\n    iconCircleSolid: _vk.VKIconCircleSolid\n  }));\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #3b5998;\\n  border-color: #3b5998;\\n\\n  ', ';\\n\\n  &:hover,\\n  &:active {\\n    background-color: #2d4373;\\n    border-color: #2d4373;\\n  }\\n'], ['\\n  background-color: #3b5998;\\n  border-color: #3b5998;\\n\\n  ', ';\\n\\n  &:hover,\\n  &:active {\\n    background-color: #2d4373;\\n    border-color: #2d4373;\\n  }\\n']),\n    _templateObject2 = _taggedTemplateLiteral(['\\n    svg path { fill: #3b5998 };\\n  '], ['\\n    svg path { fill: #3b5998 };\\n  ']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _styledIs = require('styled-is');\n\nvar _styledIs2 = _interopRequireDefault(_styledIs);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _facebook = require('../svg/facebook.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Facebook = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject, (0, _styledIs2[\""default\""])('solidcircle')(_templateObject2));\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      props = _objectWithoutProperties(_ref, ['link']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'Facebook',\n    href: _consts2[\""default\""].facebook(link),\n    buttonComponent: Facebook,\n    iconFill: _facebook.FacebookIconFill,\n    iconCircle: _facebook.FacebookIconCircle,\n    iconCircleSolid: _facebook.FacebookIconCircle\n  }));\n};"",""// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n  toISOString: toISOString\n});\n"",""'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n  return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n  return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n  $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n  if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n  var d = this;\n  var y = d.getUTCFullYear();\n  var m = d.getUTCMilliseconds();\n  var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n  return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n    '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n    'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n    ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #dd4b39;\\n  border-color: #dd4b39;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #c23321;\\n    border-color: #c23321;\\n  }\\n'], ['\\n  background-color: #dd4b39;\\n  border-color: #dd4b39;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #c23321;\\n    border-color: #c23321;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _google = require('../svg/google.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Google = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      message = _ref.message,\n      props = _objectWithoutProperties(_ref, ['link', 'message']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'Google +',\n    ariaName: 'Google Plus',\n    href: _consts2[\""default\""].google(link, message),\n    buttonComponent: Google,\n    iconFill: _google.GoogleIconFill,\n    iconCircle: _google.GoogleIconCircle,\n    iconCircleSolid: _google.GoogleIconCircle\n  }));\n};"",""'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n  lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n    // convert -0 to +0\n    if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n    var O = toIObject(this);\n    var length = toLength(O.length);\n    var index = length - 1;\n    if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n    if (index < 0) index = length + index;\n    for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n    return -1;\n  }\n});\n"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.RedditIconCircleSolid = exports.RedditIconCircle = exports.RedditIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar RedditIconFill = exports.RedditIconFill = function RedditIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M24 11.5c0-1.65-1.35-3-3-3-.96 0-1.86.48-2.42 1.24-1.64-1-3.75-1.64-6.07-1.72.08-1.1.4-3.05 1.52-3.7.72-.4 1.73-.24 3 .5C17.2 6.3 18.46 7.5 20 7.5c1.65 0 3-1.35 3-3s-1.35-3-3-3c-1.38 0-2.54.94-2.88 2.22-1.43-.72-2.64-.8-3.6-.25-1.64.94-1.95 3.47-2 4.55-2.33.08-4.45.7-6.1 1.72C4.86 8.98 3.96 8.5 3 8.5c-1.65 0-3 1.35-3 3 0 1.32.84 2.44 2.05 2.84-.03.22-.05.44-.05.66 0 3.86 4.5 7 10 7s10-3.14 10-7c0-.22-.02-.44-.05-.66 1.2-.4 2.05-1.54 2.05-2.84zM2.3 13.37C1.5 13.07 1 12.35 1 11.5c0-1.1.9-2 2-2 .64 0 1.22.32 1.6.82-1.1.85-1.92 1.9-2.3 3.05zm3.7.13c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2zm9.8 4.8c-1.08.63-2.42.96-3.8.96-1.4 0-2.74-.34-3.8-.95-.24-.13-.32-.44-.2-.68.15-.24.46-.32.7-.18 1.83 1.06 4.76 1.06 6.6 0 .23-.13.53-.05.67.2.14.23.06.54-.18.67zm.2-2.8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm5.7-2.13c-.38-1.16-1.2-2.2-2.3-3.05.38-.5.97-.82 1.6-.82 1.1 0 2 .9 2 2 0 .84-.53 1.57-1.3 1.87z\""\n  }));\n};\n\nvar RedditIconCircle = exports.RedditIconCircle = function RedditIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""ellipse\"", {\n    cx: \""12\"",\n    cy: \""14.37\"",\n    rx: \""6.2\"",\n    ry: \""4.24\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M14.3 16.25c-.62.36-1.42.57-2.3.57-.88 0-1.7-.2-2.32-.58\""\n  }), _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""14.61\"",\n    cy: \""13.39\"",\n    r: \"".98\""\n  }), _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""9.39\"",\n    cy: \""13.39\"",\n    r: \"".98\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M16.4 11.38c.26-.55.82-.92 1.47-.92.9 0 1.63.73 1.63 1.63 0 .8-.6 1.47-1.38 1.6\""\n  }), _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""17.22\"",\n    cy: \""7.52\"",\n    r: \""1.63\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M7.6 11.38c-.26-.54-.82-.92-1.47-.92-.9 0-1.63.73-1.63 1.63 0 .8.6 1.47 1.38 1.6M12 10.12s-.08-4.82 3.6-2.6\""\n  }));\n};\n\nvar RedditIconCircleSolid = exports.RedditIconCircleSolid = function RedditIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""9.391\"",\n    cy: \""13.392\"",\n    r: \"".978\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M14.057 15.814c-1.14.66-2.987.655-4.122-.004-.238-.138-.545-.058-.684.182-.13.24-.05.545.19.685.72.417 1.63.646 2.568.646.93 0 1.84-.228 2.558-.642.24-.13.32-.44.185-.68-.14-.24-.445-.32-.683-.18zM5 12.086c0 .41.23.78.568.978.27-.662.735-1.264 1.353-1.774-.2-.207-.48-.334-.79-.334-.62 0-1.13.507-1.13 1.13z\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12 0C5.383 0 0 5.383 0 12s5.383 12 12 12 12-5.383 12-12S18.617 0 12 0zm6.673 14.055c.01.104.022.208.022.314 0 2.61-3.004 4.73-6.695 4.73s-6.695-2.126-6.695-4.74c0-.105.013-.21.022-.313C4.537 13.73 4 12.97 4 12.08c0-1.173.956-2.13 2.13-2.13.63 0 1.218.29 1.618.757 1.04-.607 2.345-.99 3.77-1.063.057-.803.308-2.33 1.388-2.95.633-.366 1.417-.323 2.322.085.302-.81 1.076-1.397 1.99-1.397 1.174 0 2.13.96 2.13 2.13 0 1.177-.956 2.133-2.13 2.133-1.065 0-1.942-.79-2.098-1.81-.734-.4-1.315-.506-1.716-.276-.6.346-.818 1.395-.88 2.087 1.407.08 2.697.46 3.728 1.065.4-.468.987-.756 1.617-.756 1.17 0 2.13.953 2.13 2.13 0 .89-.54 1.65-1.33 1.97z\""\n  }), _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""14.609\"",\n    cy: \""13.391\"",\n    r: \"".978\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M17.87 10.956c-.302 0-.583.128-.79.334.616.51 1.082 1.112 1.352 1.774.34-.197.568-.566.568-.978 0-.623-.507-1.13-1.13-1.13z\""\n  }));\n};"",""'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n  return function big() {\n    return createHTML(this, 'big', '', '');\n  };\n});\n"",""/** @license React v16.12.0\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nrequire(\""core-js/modules/es7.symbol.async-iterator\"");\n\nrequire(\""core-js/modules/es6.symbol\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: !0\n});\nvar b = \""function\"" === typeof Symbol && Symbol[\""for\""],\n    c = b ? Symbol[\""for\""](\""react.element\"") : 60103,\n    d = b ? Symbol[\""for\""](\""react.portal\"") : 60106,\n    e = b ? Symbol[\""for\""](\""react.fragment\"") : 60107,\n    f = b ? Symbol[\""for\""](\""react.strict_mode\"") : 60108,\n    g = b ? Symbol[\""for\""](\""react.profiler\"") : 60114,\n    h = b ? Symbol[\""for\""](\""react.provider\"") : 60109,\n    k = b ? Symbol[\""for\""](\""react.context\"") : 60110,\n    l = b ? Symbol[\""for\""](\""react.async_mode\"") : 60111,\n    m = b ? Symbol[\""for\""](\""react.concurrent_mode\"") : 60111,\n    n = b ? Symbol[\""for\""](\""react.forward_ref\"") : 60112,\n    p = b ? Symbol[\""for\""](\""react.suspense\"") : 60113,\n    q = b ? Symbol[\""for\""](\""react.suspense_list\"") : 60120,\n    r = b ? Symbol[\""for\""](\""react.memo\"") : 60115,\n    t = b ? Symbol[\""for\""](\""react.lazy\"") : 60116,\n    v = b ? Symbol[\""for\""](\""react.fundamental\"") : 60117,\n    w = b ? Symbol[\""for\""](\""react.responder\"") : 60118,\n    x = b ? Symbol[\""for\""](\""react.scope\"") : 60119;\n\nfunction y(a) {\n  if (\""object\"" === typeof a && null !== a) {\n    var u = a.$$typeof;\n\n    switch (u) {\n      case c:\n        switch (a = a.type, a) {\n          case l:\n          case m:\n          case e:\n          case g:\n          case f:\n          case p:\n            return a;\n\n          default:\n            switch (a = a && a.$$typeof, a) {\n              case k:\n              case n:\n              case t:\n              case r:\n              case h:\n                return a;\n\n              default:\n                return u;\n            }\n\n        }\n\n      case d:\n        return u;\n    }\n  }\n}\n\nfunction z(a) {\n  return y(a) === m;\n}\n\nexports.typeOf = y;\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isValidElementType = function (a) {\n  return \""string\"" === typeof a || \""function\"" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || \""object\"" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === v || a.$$typeof === w || a.$$typeof === x);\n};\n\nexports.isAsyncMode = function (a) {\n  return z(a) || y(a) === l;\n};\n\nexports.isConcurrentMode = z;\n\nexports.isContextConsumer = function (a) {\n  return y(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n  return y(a) === h;\n};\n\nexports.isElement = function (a) {\n  return \""object\"" === typeof a && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n  return y(a) === n;\n};\n\nexports.isFragment = function (a) {\n  return y(a) === e;\n};\n\nexports.isLazy = function (a) {\n  return y(a) === t;\n};\n\nexports.isMemo = function (a) {\n  return y(a) === r;\n};\n\nexports.isPortal = function (a) {\n  return y(a) === d;\n};\n\nexports.isProfiler = function (a) {\n  return y(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n  return y(a) === f;\n};\n\nexports.isSuspense = function (a) {\n  return y(a) === p;\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #0077b5;\\n  border-color: #0077b5;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #046293;\\n    border-color: #046293;\\n  }\\n'], ['\\n  background-color: #0077b5;\\n  border-color: #0077b5;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #046293;\\n    border-color: #046293;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _linkedin = require('../svg/linkedin.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Linkedin = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      message = _ref.message,\n      props = _objectWithoutProperties(_ref, ['link', 'message']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'LinkedIn',\n    href: _consts2[\""default\""].linkedin(link, message),\n    buttonComponent: Linkedin,\n    iconFill: _linkedin.LinkedinIconFill,\n    iconCircle: _linkedin.LinkedinIconCircle,\n    iconCircleSolid: _linkedin.LinkedinIconCircleSolid\n  }));\n};"",""import \""core-js/modules/es7.array.includes\"";\nimport \""core-js/modules/es6.string.includes\"";\nimport \""core-js/modules/es6.string.iterator\"";\nimport \""core-js/modules/es6.array.from\"";\nimport \""core-js/modules/es6.regexp.to-string\"";\nimport \""core-js/modules/es6.date.to-string\"";\nimport \""core-js/modules/es6.object.to-string\"";\nimport \""core-js/modules/es7.symbol.async-iterator\"";\nimport \""core-js/modules/es6.symbol\"";\nimport \""core-js/modules/web.dom.iterable\"";\nimport \""core-js/modules/es6.array.is-array\"";\nimport { css } from 'styled-components';\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  }\n}\n\nfunction _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \""[object Arguments]\"") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\""Invalid attempt to spread non-iterable instance\"");\n}\n\nvar styledIf = function styledIf(method, condition) {\n  return function () {\n    for (var _len = arguments.length, names = new Array(_len), _key = 0; _key < _len; _key++) {\n      names[_key] = arguments[_key];\n    }\n\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return function (props) {\n        return (method === 'match' ? props[names[0]] === names[1] : names[method](function (name) {\n          return Boolean(props[name]) === condition;\n        })) && css.apply(void 0, _toConsumableArray(handleFunctions(args, props)));\n      };\n    };\n  };\n};\n\nvar handleFunctions = function handleFunctions(args, props) {\n  var css = '';\n\n  for (var i = 1; i < args.length; i++) {\n    if (typeof args[i] === 'function') {\n      var output = args[i](props);\n\n      if (typeof output === \""string\"" && output.includes(':')) {\n        css += output;\n      }\n    }\n  }\n\n  if (css) {\n    var newArgs = args.slice(0);\n    var argCss = args[0].slice(1);\n    argCss.unshift(css + newArgs[0][0]);\n    newArgs[0] = argCss;\n    return newArgs;\n  }\n\n  return args;\n};\n\nvar is = styledIf('every', true);\nvar isNot = styledIf('every', false);\nvar isOr = styledIf('some', true);\nvar isSomeNot = styledIf('some', false);\nvar match = styledIf('match');\nexport default is;\nexport { isNot, isOr, isSomeNot, match };"",""'use strict';\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports[\""default\""] = {\n  twitter: function twitter() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return 'https://twitter.com/intent/tweet/?text=' + encodeURIComponent(message) + '&url=' + encodeURIComponent(link);\n  },\n  facebook: function facebook(link) {\n    return 'https://facebook.com/sharer/sharer.php?u=' + encodeURIComponent(link);\n  },\n  google: function google(link) {\n    return 'https://plus.google.com/share?url=' + encodeURIComponent(link);\n  },\n  tumblr: function tumblr(link) {\n    return 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + encodeURIComponent(link);\n  },\n  reddit: function reddit(link) {\n    return 'https://reddit.com/submit/?url=' + encodeURIComponent(link);\n  },\n  whatsapp: function whatsapp() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return 'whatsapp://send?text=' + encodeURIComponent(message) + '%20' + encodeURIComponent(link);\n  },\n  telegram: function telegram() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return 'https://telegram.me/share/url?text=' + encodeURIComponent(message) + '&url=' + encodeURIComponent(link);\n  },\n  vk: function vk() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return 'http://vk.com/share.php?title=' + encodeURIComponent(message) + '&url=' + encodeURIComponent(link);\n  },\n  hacker: function hacker() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return 'https://news.ycombinator.com/submitlink?u=' + encodeURIComponent(link) + '&t=' + encodeURIComponent(message);\n  },\n  xing: function xing() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return 'https://www.xing.com/app/user?op=share;url=' + encodeURIComponent(link) + ';title=' + encodeURIComponent(message) + '.';\n  },\n  mail: function mail() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var subject = arguments[1];\n    var body = arguments[2];\n    return 'mailto:?subject=' + encodeURIComponent(subject || '') + '&body=' + encodeURIComponent(body && body + '\\n\\n' + link || link);\n  },\n  pinterest: function pinterest() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return 'https://pinterest.com/pin/create/button/?url=' + encodeURIComponent(link) + '&media=' + encodeURIComponent(link) + '&description=' + encodeURIComponent(message);\n  },\n  linkedin: function linkedin() {\n    var link = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    return 'https://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(link) + '&title=' + encodeURIComponent(message) + '&summary=' + encodeURIComponent(message) + '&source=' + encodeURIComponent(link);\n  }\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.string.link\"");\n\nrequire(\""core-js/modules/es6.object.define-properties\"");\n\nrequire(\""core-js/modules/es6.object.freeze\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.object.assign\"");\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: #bd081c;\\n  border-color: #bd081c;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #8c0615;\\n    border-color: #8c0615;\\n  }\\n'], ['\\n  background-color: #bd081c;\\n  border-color: #bd081c;\\n\\n  &:hover,\\n  &:active {\\n    background-color: #8c0615;\\n    border-color: #8c0615;\\n  }\\n']);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _styledComponents = require('styled-components');\n\nvar _styledComponents2 = _interopRequireDefault(_styledComponents);\n\nvar _factory = require('./factory');\n\nvar _factory2 = _interopRequireDefault(_factory);\n\nvar _pinterest = require('../svg/pinterest.js');\n\nvar _common = require('../common');\n\nvar _consts = require('../consts');\n\nvar _consts2 = _interopRequireDefault(_consts);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _taggedTemplateLiteral(strings, raw) {\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nvar Pinterest = (0, _styledComponents2[\""default\""])(_common.SharingButton)(_templateObject);\n\nexports[\""default\""] = function (_ref) {\n  var link = _ref.link,\n      message = _ref.message,\n      props = _objectWithoutProperties(_ref, ['link', 'message']);\n\n  return _react2[\""default\""].createElement(_factory2[\""default\""], _extends({}, props, {\n    name: 'Pinterest',\n    href: _consts2[\""default\""].pinterest(link, message),\n    buttonComponent: Pinterest,\n    iconFill: _pinterest.PinterestIconFill,\n    iconCircle: _pinterest.PinterestIconCircle,\n    iconCircleSolid: _pinterest.PinterestIconCircleSolid\n  }));\n};"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.FacebookIconCircle = exports.FacebookIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar FacebookIconFill = exports.FacebookIconFill = function FacebookIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M18.77 7.46H14.5v-1.9c0-.9.6-1.1 1-1.1h3V.5h-4.33C10.24.5 9.5 3.44 9.5 5.32v2.15h-3v4h3v12h5v-12h3.85l.42-4z\""\n  }));\n};\n\nvar FacebookIconCircle = exports.FacebookIconCircle = function FacebookIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M15.84 9.5H13.5V8.48c0-.53.35-.65.6-.65h1.4v-2.3h-2.35c-2.3 0-2.65 1.7-2.65 2.8V9.5h-2v2h2v7h3v-7h2.1l.24-2z\""\n  }));\n};"",""'use strict';\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nexports[\""default\""] = function (small, solid, medium, big, circle, solidcircle, Fill, Circle, CircleSolid, name) {\n  var buttonLabel = !small ? _react2[\""default\""].createElement('span', null, !big ? name : 'Share on ' + name) : null;\n\n  if (solid) {\n    return _react2[\""default\""].createElement(_react.Fragment, null, Fill(), ' ', buttonLabel);\n  }\n\n  if (circle) {\n    return _react2[\""default\""].createElement(_react.Fragment, null, Circle(), ' ', buttonLabel);\n  }\n\n  if (solidcircle) {\n    return _react2[\""default\""].createElement(_react.Fragment, null, CircleSolid(), ' ', buttonLabel);\n  }\n\n  return _react2[\""default\""].createElement(_react.Fragment, null, Fill(), ' ', buttonLabel);\n};"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.EmailIconCircleSolid = exports.EmailIconCircle = exports.EmailIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar EmailIconFill = exports.EmailIconFill = function EmailIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M22 4H2C.9 4 0 4.9 0 6v12c0 1.1.9 2 2 2h20c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM7.25 14.43l-3.5 2c-.08.05-.17.07-.25.07-.17 0-.34-.1-.43-.25-.14-.24-.06-.55.18-.68l3.5-2c.24-.14.55-.06.68.18.14.24.06.55-.18.68zm4.75.07c-.1 0-.2-.03-.27-.08l-8.5-5.5c-.23-.15-.3-.46-.15-.7.15-.22.46-.3.7-.14L12 13.4l8.23-5.32c.23-.15.54-.08.7.15.14.23.07.54-.16.7l-8.5 5.5c-.08.04-.17.07-.27.07zm8.93 1.75c-.1.16-.26.25-.43.25-.08 0-.17-.02-.25-.07l-3.5-2c-.24-.13-.32-.44-.18-.68s.44-.32.68-.18l3.5 2c.24.13.32.44.18.68z\""\n  }));\n};\n\nvar EmailIconCircle = exports.EmailIconCircle = function EmailIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""12\"",\n    cy: \""12\"",\n    r: \""11.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M19.5 16c0 .8-.7 1.5-1.5 1.5H6c-.8 0-1.5-.7-1.5-1.5V8c0-.8.7-1.5 1.5-1.5h12c.8 0 1.5.7 1.5 1.5v8zm-2-7.5L12 13 6.5 8.5m11 6l-4-2.5m-7 2.5l4-2.5\""\n  }));\n};\n\nvar EmailIconCircleSolid = exports.EmailIconCircleSolid = function EmailIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 24 24\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    d: \""M12 0C5.38 0 0 5.38 0 12s5.38 12 12 12 12-5.38 12-12S18.62 0 12 0zm8 16c0 1.1-.9 2-2 2H6c-1.1 0-2-.9-2-2V8c0-1.1.9-2 2-2h12c1.1 0 2 .9 2 2v8z\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    d: \""M17.9 8.18c-.2-.2-.5-.24-.72-.07L12 12.38 6.82 8.1c-.22-.16-.53-.13-.7.08s-.15.53.06.7l3.62 2.97-3.57 2.23c-.23.14-.3.45-.15.7.1.14.25.22.42.22.1 0 .18-.02.27-.08l3.85-2.4 1.06.87c.1.04.2.1.32.1s.23-.06.32-.1l1.06-.9 3.86 2.4c.08.06.17.1.26.1.17 0 .33-.1.42-.25.15-.24.08-.55-.15-.7l-3.57-2.22 3.62-2.96c.2-.2.24-.5.07-.72z\""\n  }));\n};"",""import \""core-js/modules/es6.function.bind\"";\nimport \""core-js/modules/es6.array.some\"";\nimport \""core-js/modules/es6.array.is-array\"";\nimport \""core-js/modules/es6.regexp.to-string\"";\nimport \""core-js/modules/es6.date.to-string\"";\nimport \""core-js/modules/es6.regexp.split\"";\nimport \""core-js/modules/es6.array.filter\"";\nimport \""core-js/modules/web.dom.iterable\"";\nimport \""core-js/modules/es6.array.iterator\"";\nimport \""core-js/modules/es6.object.to-string\"";\nimport \""core-js/modules/es6.object.keys\"";\nimport \""core-js/modules/es6.regexp.constructor\"";\nimport \""core-js/modules/es6.array.last-index-of\"";\nimport \""core-js/modules/es6.array.map\"";\nimport \""core-js/modules/es6.string.trim\"";\nimport \""core-js/modules/es6.regexp.replace\"";\nimport \""core-js/modules/es6.array.for-each\"";\nimport \""core-js/modules/es6.function.name\"";\nimport \""core-js/modules/es6.object.freeze\"";\nimport \""core-js/modules/es6.array.index-of\"";\nimport \""core-js/modules/es6.object.set-prototype-of\"";\nimport \""core-js/modules/es6.object.create\"";\nimport \""core-js/modules/es6.object.assign\"";\nimport \""core-js/modules/es6.object.define-property\"";\nimport \""core-js/modules/es7.symbol.async-iterator\"";\nimport \""core-js/modules/es6.symbol\"";\nimport Stylis from 'stylis/stylis.min';\nimport _insertRulePlugin from 'stylis-rule-sheet';\nimport React, { cloneElement, createContext, Component, createElement } from 'react';\nimport unitless from '@emotion/unitless';\nimport { isElement, isValidElementType, ForwardRef } from 'react-is';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport validAttr from '@emotion/is-prop-valid';\nimport merge from 'merge-anything'; // \n\nvar interleave = function interleave(strings, interpolations) {\n  var result = [strings[0]];\n\n  for (var i = 0, len = interpolations.length; i < len; i += 1) {\n    result.push(interpolations[i], strings[i + 1]);\n  }\n\n  return result;\n};\n\nvar _typeof = typeof Symbol === \""function\"" && typeof Symbol.iterator === \""symbol\"" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \""function\"" && obj.constructor === Symbol && obj !== Symbol.prototype ? \""symbol\"" : typeof obj;\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\""Cannot call a class as a function\"");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\""value\"" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar inherits = function inherits(subClass, superClass) {\n  if (typeof superClass !== \""function\"" && superClass !== null) {\n    throw new TypeError(\""Super expression must either be null or a function, not \"" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\""this hasn't been initialised - super() hasn't been called\"");\n  }\n\n  return call && (typeof call === \""object\"" || typeof call === \""function\"") ? call : self;\n}; // \n\n\nvar isPlainObject = function isPlainObject(x) {\n  return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x.constructor === Object;\n}; // \n\n\nvar EMPTY_ARRAY = Object.freeze([]);\nvar EMPTY_OBJECT = Object.freeze({}); // \n\nfunction isFunction(test) {\n  return typeof test === 'function';\n} // \n\n\nfunction getComponentName(target) {\n  return (process.env.NODE_ENV !== 'production' ? typeof target === 'string' && target : false) || target.displayName || target.name || 'Component';\n} // \n\n\nfunction isStatelessFunction(test) {\n  return typeof test === 'function' && !(test.prototype && test.prototype.isReactComponent);\n} // \n\n\nfunction isStyledComponent(target) {\n  return target && typeof target.styledComponentId === 'string';\n} // \n\n\nvar SC_ATTR = typeof process !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled';\nvar SC_VERSION_ATTR = 'data-styled-version';\nvar SC_STREAM_ATTR = 'data-styled-streamed';\nvar IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;\nvar DISABLE_SPEEDY = typeof SC_DISABLE_SPEEDY === 'boolean' && SC_DISABLE_SPEEDY || typeof process !== 'undefined' && (process.env.REACT_APP_SC_DISABLE_SPEEDY || process.env.SC_DISABLE_SPEEDY) || process.env.NODE_ENV !== 'production'; // Shared empty execution context when generating static styles\n\nvar STATIC_EXECUTION_CONTEXT = {}; // \n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n */\n\nvar ERRORS = process.env.NODE_ENV !== 'production' ? {\n  \""1\"": \""Cannot create styled-component for component: %s.\\n\\n\"",\n  \""2\"": \""Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\"",\n  \""3\"": \""Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\"",\n  \""4\"": \""The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n\"",\n  \""5\"": \""The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n\"",\n  \""6\"": \""Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\"",\n  \""7\"": \""ThemeProvider: Please return an object from your \\\""theme\\\"" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n\"",\n  \""8\"": \""ThemeProvider: Please make your \\\""theme\\\"" prop an object.\\n\\n\"",\n  \""9\"": \""Missing document `<head>`\\n\\n\"",\n  \""10\"": \""Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\"",\n  \""11\"": \""_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\"",\n  \""12\"": \""It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\"",\n  \""13\"": \""%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\""\n} : {};\n/**\n * super basic version of sprintf\n */\n\nfunction format() {\n  var a = arguments.length <= 0 ? undefined : arguments[0];\n  var b = [];\n\n  for (var c = 1, len = arguments.length; c < len; c += 1) {\n    b.push(arguments.length <= c ? undefined : arguments[c]);\n  }\n\n  b.forEach(function (d) {\n    a = a.replace(/%[a-z]/, d);\n  });\n  return a;\n}\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n */\n\n\nvar StyledComponentsError = function (_Error) {\n  inherits(StyledComponentsError, _Error);\n\n  function StyledComponentsError(code) {\n    classCallCheck(this, StyledComponentsError);\n\n    for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      interpolations[_key - 1] = arguments[_key];\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      var _this = possibleConstructorReturn(this, _Error.call(this, 'An error occurred. See https://github.com/styled-components/styled-components/blob/master/packages/styled-components/src/utils/errors.md#' + code + ' for more information.' + (interpolations.length > 0 ? ' Additional arguments: ' + interpolations.join(', ') : '')));\n    } else {\n      var _this = possibleConstructorReturn(this, _Error.call(this, format.apply(undefined, [ERRORS[code]].concat(interpolations)).trim()));\n    }\n\n    return possibleConstructorReturn(_this);\n  }\n\n  return StyledComponentsError;\n}(Error); // \n\n\nvar SC_COMPONENT_ID = /^[^\\S\\n]*?\\/\\* sc-component-id:\\s*(\\S+)\\s+\\*\\//gm;\n\nvar extractComps = function extractComps(maybeCSS) {\n  var css = '' + (maybeCSS || ''); // Definitely a string, and a clone\n\n  var existingComponents = [];\n  css.replace(SC_COMPONENT_ID, function (match, componentId, matchIndex) {\n    existingComponents.push({\n      componentId: componentId,\n      matchIndex: matchIndex\n    });\n    return match;\n  });\n  return existingComponents.map(function (_ref, i) {\n    var componentId = _ref.componentId,\n        matchIndex = _ref.matchIndex;\n    var nextComp = existingComponents[i + 1];\n    var cssFromDOM = nextComp ? css.slice(matchIndex, nextComp.matchIndex) : css.slice(matchIndex);\n    return {\n      componentId: componentId,\n      cssFromDOM: cssFromDOM\n    };\n  });\n}; // \n\n\nvar COMMENT_REGEX = /^\\s*\\/\\/.*$/gm; // NOTE: This stylis instance is only used to split rules from SSR'd style tags\n\nvar stylisSplitter = new Stylis({\n  global: false,\n  cascade: true,\n  keyframe: false,\n  prefix: false,\n  compress: false,\n  semicolon: true\n});\nvar stylis = new Stylis({\n  global: false,\n  cascade: true,\n  keyframe: false,\n  prefix: true,\n  compress: false,\n  semicolon: false // NOTE: This means \""autocomplete missing semicolons\""\n\n}); // Wrap `insertRulePlugin to build a list of rules,\n// and then make our own plugin to return the rules. This\n// makes it easier to hook into the existing SSR architecture\n\nvar parsingRules = []; // eslint-disable-next-line consistent-return\n\nvar returnRulesPlugin = function returnRulesPlugin(context) {\n  if (context === -2) {\n    var parsedRules = parsingRules;\n    parsingRules = [];\n    return parsedRules;\n  }\n};\n\nvar parseRulesPlugin = _insertRulePlugin(function (rule) {\n  parsingRules.push(rule);\n});\n\nvar _componentId = void 0;\n\nvar _selector = void 0;\n\nvar _selectorRegexp = void 0;\n\nvar selfReferenceReplacer = function selfReferenceReplacer(match, offset, string) {\n  if ( // the first self-ref is always untouched\n  offset > 0 && // there should be at least two self-refs to do a replacement (.b > .b)\n  string.slice(0, offset).indexOf(_selector) !== -1 && // no consecutive self refs (.b.b); that is a precedence boost and treated differently\n  string.slice(offset - _selector.length, offset) !== _selector) {\n    return '.' + _componentId;\n  }\n\n  return match;\n};\n/**\n * When writing a style like\n *\n * & + & {\n *   color: red;\n * }\n *\n * The second ampersand should be a reference to the static component class. stylis\n * has no knowledge of static class so we have to intelligently replace the base selector.\n */\n\n\nvar selfReferenceReplacementPlugin = function selfReferenceReplacementPlugin(context, _, selectors) {\n  if (context === 2 && selectors.length && selectors[0].lastIndexOf(_selector) > 0) {\n    // eslint-disable-next-line no-param-reassign\n    selectors[0] = selectors[0].replace(_selectorRegexp, selfReferenceReplacer);\n  }\n};\n\nstylis.use([selfReferenceReplacementPlugin, parseRulesPlugin, returnRulesPlugin]);\nstylisSplitter.use([parseRulesPlugin, returnRulesPlugin]);\n\nvar splitByRules = function splitByRules(css) {\n  return stylisSplitter('', css);\n};\n\nfunction stringifyRules(rules, selector, prefix) {\n  var componentId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '&';\n  var flatCSS = rules.join('').replace(COMMENT_REGEX, ''); // replace JS comments\n\n  var cssStr = selector && prefix ? prefix + ' ' + selector + ' { ' + flatCSS + ' }' : flatCSS; // stylis has no concept of state to be passed to plugins\n  // but since JS is single=threaded, we can rely on that to ensure\n  // these properties stay in sync with the current stylis run\n\n  _componentId = componentId;\n  _selector = selector;\n  _selectorRegexp = new RegExp('\\\\' + _selector + '\\\\b', 'g');\n  return stylis(prefix || !selector ? '' : selector, cssStr);\n} // \n\n/* eslint-disable camelcase, no-undef */\n\n\nvar getNonce = function getNonce() {\n  return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n}; // \n\n/* These are helpers for the StyleTags to keep track of the injected\n * rule names for each (component) ID that they're keeping track of.\n * They're crucial for detecting whether a name has already been\n * injected.\n * (This excludes rehydrated names) */\n\n/* adds a new ID:name pairing to a names dictionary */\n\n\nvar addNameForId = function addNameForId(names, id, name) {\n  if (name) {\n    // eslint-disable-next-line no-param-reassign\n    var namesForId = names[id] || (names[id] = Object.create(null));\n    namesForId[name] = true;\n  }\n};\n/* resets an ID entirely by overwriting it in the dictionary */\n\n\nvar resetIdNames = function resetIdNames(names, id) {\n  // eslint-disable-next-line no-param-reassign\n  names[id] = Object.create(null);\n};\n/* factory for a names dictionary checking the existance of an ID:name pairing */\n\n\nvar hasNameForId = function hasNameForId(names) {\n  return function (id, name) {\n    return names[id] !== undefined && names[id][name];\n  };\n};\n/* stringifies names for the html/element output */\n\n\nvar stringifyNames = function stringifyNames(names) {\n  var str = ''; // eslint-disable-next-line guard-for-in\n\n  for (var id in names) {\n    str += Object.keys(names[id]).join(' ') + ' ';\n  }\n\n  return str.trim();\n};\n/* clones the nested names dictionary */\n\n\nvar cloneNames = function cloneNames(names) {\n  var clone = Object.create(null); // eslint-disable-next-line guard-for-in\n\n  for (var id in names) {\n    clone[id] = _extends({}, names[id]);\n  }\n\n  return clone;\n}; // \n\n/* These are helpers that deal with the insertRule (aka speedy) API\n * They are used in the StyleTags and specifically the speedy tag\n */\n\n/* retrieve a sheet for a given style tag */\n\n\nvar sheetForTag = function sheetForTag(tag) {\n  // $FlowFixMe\n  if (tag.sheet) return tag.sheet;\n  /* Firefox quirk requires us to step through all stylesheets to find one owned by the given tag */\n\n  var size = tag.ownerDocument.styleSheets.length;\n\n  for (var i = 0; i < size; i += 1) {\n    var sheet = tag.ownerDocument.styleSheets[i]; // $FlowFixMe\n\n    if (sheet.ownerNode === tag) return sheet;\n  }\n  /* we should always be able to find a tag */\n\n\n  throw new StyledComponentsError(10);\n};\n/* insert a rule safely and return whether it was actually injected */\n\n\nvar safeInsertRule = function safeInsertRule(sheet, cssRule, index) {\n  /* abort early if cssRule string is falsy */\n  if (!cssRule) return false;\n  var maxIndex = sheet.cssRules.length;\n\n  try {\n    /* use insertRule and cap passed index with maxIndex (no of cssRules) */\n    sheet.insertRule(cssRule, index <= maxIndex ? index : maxIndex);\n  } catch (err) {\n    /* any error indicates an invalid rule */\n    return false;\n  }\n\n  return true;\n};\n/* deletes `size` rules starting from `removalIndex` */\n\n\nvar deleteRules = function deleteRules(sheet, removalIndex, size) {\n  var lowerBound = removalIndex - size;\n\n  for (var i = removalIndex; i > lowerBound; i -= 1) {\n    sheet.deleteRule(i);\n  }\n}; // \n\n/* this marker separates component styles and is important for rehydration */\n\n\nvar makeTextMarker = function makeTextMarker(id) {\n  return '\\n/* sc-component-id: ' + id + ' */\\n';\n};\n/* add up all numbers in array up until and including the index */\n\n\nvar addUpUntilIndex = function addUpUntilIndex(sizes, index) {\n  var totalUpToIndex = 0;\n\n  for (var i = 0; i <= index; i += 1) {\n    totalUpToIndex += sizes[i];\n  }\n\n  return totalUpToIndex;\n};\n/* create a new style tag after lastEl */\n\n\nvar makeStyleTag = function makeStyleTag(target, tagEl, insertBefore) {\n  var targetDocument = document;\n  if (target) targetDocument = target.ownerDocument;else if (tagEl) targetDocument = tagEl.ownerDocument;\n  var el = targetDocument.createElement('style');\n  el.setAttribute(SC_ATTR, '');\n  el.setAttribute(SC_VERSION_ATTR, \""4.4.1\"");\n  var nonce = getNonce();\n\n  if (nonce) {\n    el.setAttribute('nonce', nonce);\n  }\n  /* Work around insertRule quirk in EdgeHTML */\n\n\n  el.appendChild(targetDocument.createTextNode(''));\n\n  if (target && !tagEl) {\n    /* Append to target when no previous element was passed */\n    target.appendChild(el);\n  } else {\n    if (!tagEl || !target || !tagEl.parentNode) {\n      throw new StyledComponentsError(6);\n    }\n    /* Insert new style tag after the previous one */\n\n\n    tagEl.parentNode.insertBefore(el, insertBefore ? tagEl : tagEl.nextSibling);\n  }\n\n  return el;\n};\n/* takes a css factory function and outputs an html styled tag factory */\n\n\nvar wrapAsHtmlTag = function wrapAsHtmlTag(css, names) {\n  return function (additionalAttrs) {\n    var nonce = getNonce();\n    var attrs = [nonce && 'nonce=\""' + nonce + '\""', SC_ATTR + '=\""' + stringifyNames(names) + '\""', SC_VERSION_ATTR + '=\""' + \""4.4.1\"" + '\""', additionalAttrs];\n    var htmlAttr = attrs.filter(Boolean).join(' ');\n    return '<style ' + htmlAttr + '>' + css() + '</style>';\n  };\n};\n/* takes a css factory function and outputs an element factory */\n\n\nvar wrapAsElement = function wrapAsElement(css, names) {\n  return function () {\n    var _props;\n\n    var props = (_props = {}, _props[SC_ATTR] = stringifyNames(names), _props[SC_VERSION_ATTR] = \""4.4.1\"", _props);\n    var nonce = getNonce();\n\n    if (nonce) {\n      // $FlowFixMe\n      props.nonce = nonce;\n    } // eslint-disable-next-line react/no-danger\n\n\n    return React.createElement('style', _extends({}, props, {\n      dangerouslySetInnerHTML: {\n        __html: css()\n      }\n    }));\n  };\n};\n\nvar getIdsFromMarkersFactory = function getIdsFromMarkersFactory(markers) {\n  return function () {\n    return Object.keys(markers);\n  };\n};\n/* speedy tags utilise insertRule */\n\n\nvar makeSpeedyTag = function makeSpeedyTag(el, getImportRuleTag) {\n  var names = Object.create(null);\n  var markers = Object.create(null);\n  var sizes = [];\n  var extractImport = getImportRuleTag !== undefined;\n  /* indicates whether getImportRuleTag was called */\n\n  var usedImportRuleTag = false;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = sizes.length;\n    sizes.push(0);\n    resetIdNames(names, id);\n    return markers[id];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    var sheet = sheetForTag(el);\n    var insertIndex = addUpUntilIndex(sizes, marker);\n    var injectedRules = 0;\n    var importRules = [];\n    var cssRulesSize = cssRules.length;\n\n    for (var i = 0; i < cssRulesSize; i += 1) {\n      var cssRule = cssRules[i];\n      var mayHaveImport = extractImport;\n      /* @import rules are reordered to appear first */\n\n      if (mayHaveImport && cssRule.indexOf('@import') !== -1) {\n        importRules.push(cssRule);\n      } else if (safeInsertRule(sheet, cssRule, insertIndex + injectedRules)) {\n        mayHaveImport = false;\n        injectedRules += 1;\n      }\n    }\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true; // $FlowFixMe\n\n      getImportRuleTag().insertRules(id + '-import', importRules);\n    }\n\n    sizes[marker] += injectedRules;\n    /* add up no of injected rules */\n\n    addNameForId(names, id, name);\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return; // $FlowFixMe\n\n    if (el.isConnected === false) return;\n    var size = sizes[marker];\n    var sheet = sheetForTag(el);\n    var removalIndex = addUpUntilIndex(sizes, marker) - 1;\n    deleteRules(sheet, removalIndex, size);\n    sizes[marker] = 0;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(id + '-import');\n    }\n  };\n\n  var css = function css() {\n    var _sheetForTag = sheetForTag(el),\n        cssRules = _sheetForTag.cssRules;\n\n    var str = ''; // eslint-disable-next-line guard-for-in\n\n    for (var id in markers) {\n      str += makeTextMarker(id);\n      var marker = markers[id];\n      var end = addUpUntilIndex(sizes, marker);\n      var size = sizes[marker];\n\n      for (var i = end - size; i < end; i += 1) {\n        var rule = cssRules[i];\n\n        if (rule !== undefined) {\n          str += rule.cssText;\n        }\n      }\n    }\n\n    return str;\n  };\n\n  return {\n    clone: function clone() {\n      throw new StyledComponentsError(5);\n    },\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n};\n\nvar makeTextNode = function makeTextNode(targetDocument, id) {\n  return targetDocument.createTextNode(makeTextMarker(id));\n};\n\nvar makeBrowserTag = function makeBrowserTag(el, getImportRuleTag) {\n  var names = Object.create(null);\n  var markers = Object.create(null);\n  var extractImport = getImportRuleTag !== undefined;\n  /* indicates whether getImportRuleTag was called */\n\n  var usedImportRuleTag = false;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = makeTextNode(el.ownerDocument, id);\n    el.appendChild(markers[id]);\n    names[id] = Object.create(null);\n    return markers[id];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    var importRules = [];\n    var cssRulesSize = cssRules.length;\n\n    for (var i = 0; i < cssRulesSize; i += 1) {\n      var rule = cssRules[i];\n      var mayHaveImport = extractImport;\n\n      if (mayHaveImport && rule.indexOf('@import') !== -1) {\n        importRules.push(rule);\n      } else {\n        mayHaveImport = false;\n        var separator = i === cssRulesSize - 1 ? '' : ' ';\n        marker.appendData('' + rule + separator);\n      }\n    }\n\n    addNameForId(names, id, name);\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true; // $FlowFixMe\n\n      getImportRuleTag().insertRules(id + '-import', importRules);\n    }\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n    /* create new empty text node and replace the current one */\n\n    var newMarker = makeTextNode(el.ownerDocument, id);\n    el.replaceChild(newMarker, marker);\n    markers[id] = newMarker;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(id + '-import');\n    }\n  };\n\n  var css = function css() {\n    var str = ''; // eslint-disable-next-line guard-for-in\n\n    for (var id in markers) {\n      str += markers[id].data;\n    }\n\n    return str;\n  };\n\n  return {\n    clone: function clone() {\n      throw new StyledComponentsError(5);\n    },\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n};\n\nvar makeServerTag = function makeServerTag(namesArg, markersArg) {\n  var names = namesArg === undefined ? Object.create(null) : namesArg;\n  var markers = markersArg === undefined ? Object.create(null) : markersArg;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    return markers[id] = [''];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    marker[0] += cssRules.join(' ');\n    addNameForId(names, id, name);\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n    marker[0] = '';\n    resetIdNames(names, id);\n  };\n\n  var css = function css() {\n    var str = ''; // eslint-disable-next-line guard-for-in\n\n    for (var id in markers) {\n      var cssForId = markers[id][0];\n\n      if (cssForId) {\n        str += makeTextMarker(id) + cssForId;\n      }\n    }\n\n    return str;\n  };\n\n  var clone = function clone() {\n    var namesClone = cloneNames(names);\n    var markersClone = Object.create(null); // eslint-disable-next-line guard-for-in\n\n    for (var id in markers) {\n      markersClone[id] = [markers[id][0]];\n    }\n\n    return makeServerTag(namesClone, markersClone);\n  };\n\n  var tag = {\n    clone: clone,\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: null,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n  return tag;\n};\n\nvar makeTag = function makeTag(target, tagEl, forceServer, insertBefore, getImportRuleTag) {\n  if (IS_BROWSER && !forceServer) {\n    var el = makeStyleTag(target, tagEl, insertBefore);\n\n    if (DISABLE_SPEEDY) {\n      return makeBrowserTag(el, getImportRuleTag);\n    } else {\n      return makeSpeedyTag(el, getImportRuleTag);\n    }\n  }\n\n  return makeServerTag();\n};\n\nvar rehydrate = function rehydrate(tag, els, extracted) {\n  /* add all extracted components to the new tag */\n  for (var i = 0, len = extracted.length; i < len; i += 1) {\n    var _extracted$i = extracted[i],\n        componentId = _extracted$i.componentId,\n        cssFromDOM = _extracted$i.cssFromDOM;\n    var cssRules = splitByRules(cssFromDOM);\n    tag.insertRules(componentId, cssRules);\n  }\n  /* remove old HTMLStyleElements, since they have been rehydrated */\n\n\n  for (var _i = 0, _len = els.length; _i < _len; _i += 1) {\n    var el = els[_i];\n\n    if (el.parentNode) {\n      el.parentNode.removeChild(el);\n    }\n  }\n}; // \n\n\nvar SPLIT_REGEX = /\\s+/;\n/* determine the maximum number of components before tags are sharded */\n\nvar MAX_SIZE = void 0;\n\nif (IS_BROWSER) {\n  /* in speedy mode we can keep a lot more rules in a sheet before a slowdown can be expected */\n  MAX_SIZE = DISABLE_SPEEDY ? 40 : 1000;\n} else {\n  /* for servers we do not need to shard at all */\n  MAX_SIZE = -1;\n}\n\nvar sheetRunningId = 0;\nvar master = void 0;\n\nvar StyleSheet = function () {\n  /* a map from ids to tags */\n\n  /* deferred rules for a given id */\n\n  /* this is used for not reinjecting rules via hasNameForId() */\n\n  /* when rules for an id are removed using remove() we have to ignore rehydratedNames for it */\n\n  /* a list of tags belonging to this StyleSheet */\n\n  /* a tag for import rules */\n\n  /* current capacity until a new tag must be created */\n\n  /* children (aka clones) of this StyleSheet inheriting all and future injections */\n  function StyleSheet() {\n    var _this = this;\n\n    var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : IS_BROWSER ? document.head : null;\n    var forceServer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    classCallCheck(this, StyleSheet);\n\n    this.getImportRuleTag = function () {\n      var importRuleTag = _this.importRuleTag;\n\n      if (importRuleTag !== undefined) {\n        return importRuleTag;\n      }\n\n      var firstTag = _this.tags[0];\n      var insertBefore = true;\n      return _this.importRuleTag = makeTag(_this.target, firstTag ? firstTag.styleTag : null, _this.forceServer, insertBefore);\n    };\n\n    sheetRunningId += 1;\n    this.id = sheetRunningId;\n    this.forceServer = forceServer;\n    this.target = forceServer ? null : target;\n    this.tagMap = {};\n    this.deferred = {};\n    this.rehydratedNames = {};\n    this.ignoreRehydratedNames = {};\n    this.tags = [];\n    this.capacity = 1;\n    this.clones = [];\n  }\n  /* rehydrate all SSR'd style tags */\n\n\n  StyleSheet.prototype.rehydrate = function rehydrate$$1() {\n    if (!IS_BROWSER || this.forceServer) return this;\n    var els = [];\n    var extracted = [];\n    var isStreamed = false;\n    /* retrieve all of our SSR style elements from the DOM */\n\n    var nodes = document.querySelectorAll('style[' + SC_ATTR + '][' + SC_VERSION_ATTR + '=\""' + \""4.4.1\"" + '\""]');\n    var nodesSize = nodes.length;\n    /* abort rehydration if no previous style tags were found */\n\n    if (!nodesSize) return this;\n\n    for (var i = 0; i < nodesSize; i += 1) {\n      var el = nodes[i];\n      /* check if style tag is a streamed tag */\n\n      if (!isStreamed) isStreamed = !!el.getAttribute(SC_STREAM_ATTR);\n      /* retrieve all component names */\n\n      var elNames = (el.getAttribute(SC_ATTR) || '').trim().split(SPLIT_REGEX);\n      var elNamesSize = elNames.length;\n\n      for (var j = 0, name; j < elNamesSize; j += 1) {\n        name = elNames[j];\n        /* add rehydrated name to sheet to avoid re-adding styles */\n\n        this.rehydratedNames[name] = true;\n      }\n      /* extract all components and their CSS */\n\n\n      extracted.push.apply(extracted, extractComps(el.textContent));\n      /* store original HTMLStyleElement */\n\n      els.push(el);\n    }\n    /* abort rehydration if nothing was extracted */\n\n\n    var extractedSize = extracted.length;\n    if (!extractedSize) return this;\n    /* create a tag to be used for rehydration */\n\n    var tag = this.makeTag(null);\n    rehydrate(tag, els, extracted);\n    /* reset capacity and adjust MAX_SIZE by the initial size of the rehydration */\n\n    this.capacity = Math.max(1, MAX_SIZE - extractedSize);\n    this.tags.push(tag);\n    /* retrieve all component ids */\n\n    for (var _j = 0; _j < extractedSize; _j += 1) {\n      this.tagMap[extracted[_j].componentId] = tag;\n    }\n\n    return this;\n  };\n  /* retrieve a \""master\"" instance of StyleSheet which is typically used when no other is available\n   * The master StyleSheet is targeted by createGlobalStyle, keyframes, and components outside of any\n    * StyleSheetManager's context */\n\n  /* reset the internal \""master\"" instance */\n\n\n  StyleSheet.reset = function reset() {\n    var forceServer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    master = new StyleSheet(undefined, forceServer).rehydrate();\n  };\n  /* adds \""children\"" to the StyleSheet that inherit all of the parents' rules\n   * while their own rules do not affect the parent */\n\n\n  StyleSheet.prototype.clone = function clone() {\n    var sheet = new StyleSheet(this.target, this.forceServer);\n    /* add to clone array */\n\n    this.clones.push(sheet);\n    /* clone all tags */\n\n    sheet.tags = this.tags.map(function (tag) {\n      var ids = tag.getIds();\n      var newTag = tag.clone();\n      /* reconstruct tagMap */\n\n      for (var i = 0; i < ids.length; i += 1) {\n        sheet.tagMap[ids[i]] = newTag;\n      }\n\n      return newTag;\n    });\n    /* clone other maps */\n\n    sheet.rehydratedNames = _extends({}, this.rehydratedNames);\n    sheet.deferred = _extends({}, this.deferred);\n    return sheet;\n  };\n  /* force StyleSheet to create a new tag on the next injection */\n\n\n  StyleSheet.prototype.sealAllTags = function sealAllTags() {\n    this.capacity = 1;\n    this.tags.forEach(function (tag) {\n      // eslint-disable-next-line no-param-reassign\n      tag.sealed = true;\n    });\n  };\n\n  StyleSheet.prototype.makeTag = function makeTag$$1(tag) {\n    var lastEl = tag ? tag.styleTag : null;\n    var insertBefore = false;\n    return makeTag(this.target, lastEl, this.forceServer, insertBefore, this.getImportRuleTag);\n  };\n  /* get a tag for a given componentId, assign the componentId to one, or shard */\n\n\n  StyleSheet.prototype.getTagForId = function getTagForId(id) {\n    /* simply return a tag, when the componentId was already assigned one */\n    var prev = this.tagMap[id];\n\n    if (prev !== undefined && !prev.sealed) {\n      return prev;\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n    /* shard (create a new tag) if the tag is exhausted (See MAX_SIZE) */\n\n    this.capacity -= 1;\n\n    if (this.capacity === 0) {\n      this.capacity = MAX_SIZE;\n      tag = this.makeTag(tag);\n      this.tags.push(tag);\n    }\n\n    return this.tagMap[id] = tag;\n  };\n  /* mainly for createGlobalStyle to check for its id */\n\n\n  StyleSheet.prototype.hasId = function hasId(id) {\n    return this.tagMap[id] !== undefined;\n  };\n  /* caching layer checking id+name to already have a corresponding tag and injected rules */\n\n\n  StyleSheet.prototype.hasNameForId = function hasNameForId(id, name) {\n    /* exception for rehydrated names which are checked separately */\n    if (this.ignoreRehydratedNames[id] === undefined && this.rehydratedNames[name]) {\n      return true;\n    }\n\n    var tag = this.tagMap[id];\n    return tag !== undefined && tag.hasNameForId(id, name);\n  };\n  /* registers a componentId and registers it on its tag */\n\n\n  StyleSheet.prototype.deferredInject = function deferredInject(id, cssRules) {\n    /* don't inject when the id is already registered */\n    if (this.tagMap[id] !== undefined) return;\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].deferredInject(id, cssRules);\n    }\n\n    this.getTagForId(id).insertMarker(id);\n    this.deferred[id] = cssRules;\n  };\n  /* injects rules for a given id with a name that will need to be cached */\n\n\n  StyleSheet.prototype.inject = function inject(id, cssRules, name) {\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].inject(id, cssRules, name);\n    }\n\n    var tag = this.getTagForId(id);\n    /* add deferred rules for component */\n\n    if (this.deferred[id] !== undefined) {\n      // Combine passed cssRules with previously deferred CSS rules\n      // NOTE: We cannot mutate the deferred array itself as all clones\n      // do the same (see clones[i].inject)\n      var rules = this.deferred[id].concat(cssRules);\n      tag.insertRules(id, rules, name);\n      this.deferred[id] = undefined;\n    } else {\n      tag.insertRules(id, cssRules, name);\n    }\n  };\n  /* removes all rules for a given id, which doesn't remove its marker but resets it */\n\n\n  StyleSheet.prototype.remove = function remove(id) {\n    var tag = this.tagMap[id];\n    if (tag === undefined) return;\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].remove(id);\n    }\n    /* remove all rules from the tag */\n\n\n    tag.removeRules(id);\n    /* ignore possible rehydrated names */\n\n    this.ignoreRehydratedNames[id] = true;\n    /* delete possible deferred rules */\n\n    this.deferred[id] = undefined;\n  };\n\n  StyleSheet.prototype.toHTML = function toHTML() {\n    return this.tags.map(function (tag) {\n      return tag.toHTML();\n    }).join('');\n  };\n\n  StyleSheet.prototype.toReactElements = function toReactElements() {\n    var id = this.id;\n    return this.tags.map(function (tag, i) {\n      var key = 'sc-' + id + '-' + i;\n      return cloneElement(tag.toElement(), {\n        key: key\n      });\n    });\n  };\n\n  createClass(StyleSheet, null, [{\n    key: 'master',\n    get: function get$$1() {\n      return master || (master = new StyleSheet().rehydrate());\n    }\n    /* NOTE: This is just for backwards-compatibility with jest-styled-components */\n\n  }, {\n    key: 'instance',\n    get: function get$$1() {\n      return StyleSheet.master;\n    }\n  }]);\n  return StyleSheet;\n}(); // \n\n\nvar Keyframes = function () {\n  function Keyframes(name, rules) {\n    var _this = this;\n\n    classCallCheck(this, Keyframes);\n\n    this.inject = function (styleSheet) {\n      if (!styleSheet.hasNameForId(_this.id, _this.name)) {\n        styleSheet.inject(_this.id, _this.rules, _this.name);\n      }\n    };\n\n    this.toString = function () {\n      throw new StyledComponentsError(12, String(_this.name));\n    };\n\n    this.name = name;\n    this.rules = rules;\n    this.id = 'sc-keyframes-' + name;\n  }\n\n  Keyframes.prototype.getName = function getName() {\n    return this.name;\n  };\n\n  return Keyframes;\n}(); // \n\n/**\n * inlined version of\n * https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/hyphenateStyleName.js\n */\n\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \""background-color\""\n *   > hyphenateStyleName('MozTransition')\n *   < \""-moz-transition\""\n *   > hyphenateStyleName('msTransition')\n *   < \""-ms-transition\""\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\n\nfunction hyphenateStyleName(string) {\n  return string.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n} // \n// Taken from https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/dangerousStyleValue.js\n\n\nfunction addUnitIfNeeded(name, value) {\n  // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133\n  // $FlowFixMe\n  if (value == null || typeof value === 'boolean' || value === '') {\n    return '';\n  }\n\n  if (typeof value === 'number' && value !== 0 && !(name in unitless)) {\n    return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n  }\n\n  return String(value).trim();\n} // \n\n/**\n * It's falsish not falsy because 0 is allowed.\n */\n\n\nvar isFalsish = function isFalsish(chunk) {\n  return chunk === undefined || chunk === null || chunk === false || chunk === '';\n};\n\nvar objToCssArray = function objToCssArray(obj, prevKey) {\n  var rules = [];\n  var keys = Object.keys(obj);\n  keys.forEach(function (key) {\n    if (!isFalsish(obj[key])) {\n      if (isPlainObject(obj[key])) {\n        rules.push.apply(rules, objToCssArray(obj[key], key));\n        return rules;\n      } else if (isFunction(obj[key])) {\n        rules.push(hyphenateStyleName(key) + ':', obj[key], ';');\n        return rules;\n      }\n\n      rules.push(hyphenateStyleName(key) + ': ' + addUnitIfNeeded(key, obj[key]) + ';');\n    }\n\n    return rules;\n  });\n  return prevKey ? [prevKey + ' {'].concat(rules, ['}']) : rules;\n};\n\nfunction flatten(chunk, executionContext, styleSheet) {\n  if (Array.isArray(chunk)) {\n    var ruleSet = [];\n\n    for (var i = 0, len = chunk.length, result; i < len; i += 1) {\n      result = flatten(chunk[i], executionContext, styleSheet);\n      if (result === null) continue;else if (Array.isArray(result)) ruleSet.push.apply(ruleSet, result);else ruleSet.push(result);\n    }\n\n    return ruleSet;\n  }\n\n  if (isFalsish(chunk)) {\n    return null;\n  }\n  /* Handle other components */\n\n\n  if (isStyledComponent(chunk)) {\n    return '.' + chunk.styledComponentId;\n  }\n  /* Either execute or defer the function */\n\n\n  if (isFunction(chunk)) {\n    if (isStatelessFunction(chunk) && executionContext) {\n      var _result = chunk(executionContext);\n\n      if (process.env.NODE_ENV !== 'production' && isElement(_result)) {\n        // eslint-disable-next-line no-console\n        console.warn(getComponentName(chunk) + ' is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.');\n      }\n\n      return flatten(_result, executionContext, styleSheet);\n    } else return chunk;\n  }\n\n  if (chunk instanceof Keyframes) {\n    if (styleSheet) {\n      chunk.inject(styleSheet);\n      return chunk.getName();\n    } else return chunk;\n  }\n  /* Handle objects */\n\n\n  return isPlainObject(chunk) ? objToCssArray(chunk) : chunk.toString();\n} // \n\n\nfunction css(styles) {\n  for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    interpolations[_key - 1] = arguments[_key];\n  }\n\n  if (isFunction(styles) || isPlainObject(styles)) {\n    // $FlowFixMe\n    return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations)));\n  } // $FlowFixMe\n\n\n  return flatten(interleave(styles, interpolations));\n} // \n\n\nfunction constructWithOptions(componentConstructor, tag) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT;\n\n  if (!isValidElementType(tag)) {\n    throw new StyledComponentsError(1, String(tag));\n  }\n  /* This is callable directly as a template function */\n  // $FlowFixMe: Not typed to avoid destructuring arguments\n\n\n  var templateFunction = function templateFunction() {\n    return componentConstructor(tag, options, css.apply(undefined, arguments));\n  };\n  /* If config methods are called, wrap up a new template function and merge options */\n\n\n  templateFunction.withConfig = function (config) {\n    return constructWithOptions(componentConstructor, tag, _extends({}, options, config));\n  };\n  /* Modify/inject new props at runtime */\n\n\n  templateFunction.attrs = function (attrs) {\n    return constructWithOptions(componentConstructor, tag, _extends({}, options, {\n      attrs: Array.prototype.concat(options.attrs, attrs).filter(Boolean)\n    }));\n  };\n\n  return templateFunction;\n} // \n// Source: https://github.com/garycourt/murmurhash-js/blob/master/murmurhash2_gc.js\n\n\nfunction murmurhash(c) {\n  for (var e = c.length | 0, a = e | 0, d = 0, b; e >= 4;) {\n    b = c.charCodeAt(d) & 255 | (c.charCodeAt(++d) & 255) << 8 | (c.charCodeAt(++d) & 255) << 16 | (c.charCodeAt(++d) & 255) << 24, b = 1540483477 * (b & 65535) + ((1540483477 * (b >>> 16) & 65535) << 16), b ^= b >>> 24, b = 1540483477 * (b & 65535) + ((1540483477 * (b >>> 16) & 65535) << 16), a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16) ^ b, e -= 4, ++d;\n  }\n\n  switch (e) {\n    case 3:\n      a ^= (c.charCodeAt(d + 2) & 255) << 16;\n\n    case 2:\n      a ^= (c.charCodeAt(d + 1) & 255) << 8;\n\n    case 1:\n      a ^= c.charCodeAt(d) & 255, a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16);\n  }\n\n  a ^= a >>> 13;\n  a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16);\n  return (a ^ a >>> 15) >>> 0;\n} // \n\n/* eslint-disable no-bitwise */\n\n/* This is the \""capacity\"" of our alphabet i.e. 2x26 for all letters plus their capitalised\n * counterparts */\n\n\nvar charsLength = 52;\n/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */\n\nvar getAlphabeticChar = function getAlphabeticChar(code) {\n  return String.fromCharCode(code + (code > 25 ? 39 : 97));\n};\n/* input a number, usually a hash and convert it to base-52 */\n\n\nfunction generateAlphabeticName(code) {\n  var name = '';\n  var x = void 0;\n  /* get a char and divide by alphabet-length */\n\n  for (x = code; x > charsLength; x = Math.floor(x / charsLength)) {\n    name = getAlphabeticChar(x % charsLength) + name;\n  }\n\n  return getAlphabeticChar(x % charsLength) + name;\n} // \n\n\nfunction hasFunctionObjectKey(obj) {\n  // eslint-disable-next-line guard-for-in, no-restricted-syntax\n  for (var key in obj) {\n    if (isFunction(obj[key])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction isStaticRules(rules, attrs) {\n  for (var i = 0; i < rules.length; i += 1) {\n    var rule = rules[i]; // recursive case\n\n    if (Array.isArray(rule) && !isStaticRules(rule, attrs)) {\n      return false;\n    } else if (isFunction(rule) && !isStyledComponent(rule)) {\n      // functions are allowed to be static if they're just being\n      // used to get the classname of a nested styled component\n      return false;\n    }\n  }\n\n  if (attrs.some(function (x) {\n    return isFunction(x) || hasFunctionObjectKey(x);\n  })) return false;\n  return true;\n} // \n\n/* combines hashStr (murmurhash) and nameGenerator for convenience */\n\n\nvar hasher = function hasher(str) {\n  return generateAlphabeticName(murmurhash(str));\n};\n/*\n ComponentStyle is all the CSS-specific stuff, not\n the React-specific stuff.\n */\n\n\nvar ComponentStyle = function () {\n  function ComponentStyle(rules, attrs, componentId) {\n    classCallCheck(this, ComponentStyle);\n    this.rules = rules;\n    this.isStatic = process.env.NODE_ENV === 'production' && isStaticRules(rules, attrs);\n    this.componentId = componentId;\n\n    if (!StyleSheet.master.hasId(componentId)) {\n      StyleSheet.master.deferredInject(componentId, []);\n    }\n  }\n  /*\n   * Flattens a rule set into valid CSS\n   * Hashes it, wraps the whole chunk in a .hash1234 {}\n   * Returns the hash to be injected on render()\n   * */\n\n\n  ComponentStyle.prototype.generateAndInjectStyles = function generateAndInjectStyles(executionContext, styleSheet) {\n    var isStatic = this.isStatic,\n        componentId = this.componentId,\n        lastClassName = this.lastClassName;\n\n    if (IS_BROWSER && isStatic && typeof lastClassName === 'string' && styleSheet.hasNameForId(componentId, lastClassName)) {\n      return lastClassName;\n    }\n\n    var flatCSS = flatten(this.rules, executionContext, styleSheet);\n    var name = hasher(this.componentId + flatCSS.join(''));\n\n    if (!styleSheet.hasNameForId(componentId, name)) {\n      styleSheet.inject(this.componentId, stringifyRules(flatCSS, '.' + name, undefined, componentId), name);\n    }\n\n    this.lastClassName = name;\n    return name;\n  };\n\n  ComponentStyle.generateName = function generateName(str) {\n    return hasher(str);\n  };\n\n  return ComponentStyle;\n}(); // \n\n\nvar LIMIT = 200;\n\nvar createWarnTooManyClasses = function createWarnTooManyClasses(displayName) {\n  var generatedClasses = {};\n  var warningSeen = false;\n  return function (className) {\n    if (!warningSeen) {\n      generatedClasses[className] = true;\n\n      if (Object.keys(generatedClasses).length >= LIMIT) {\n        // Unable to find latestRule in test environment.\n\n        /* eslint-disable no-console, prefer-template */\n        console.warn('Over ' + LIMIT + ' classes were generated for component ' + displayName + '. \\n' + 'Consider using the attrs method, together with a style object for frequently changed styles.\\n' + 'Example:\\n' + '  const Component = styled.div.attrs(props => ({\\n' + '    style: {\\n' + '      background: props.background,\\n' + '    },\\n' + '  }))`width: 100%;`\\n\\n' + '  <Component />');\n        warningSeen = true;\n        generatedClasses = {};\n      }\n    }\n  };\n}; // \n\n\nvar determineTheme = function determineTheme(props, fallbackTheme) {\n  var defaultProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT; // Props should take precedence over ThemeProvider, which should take precedence over\n  // defaultProps, but React automatically puts defaultProps on props.\n\n  /* eslint-disable react/prop-types, flowtype-errors/show-errors */\n\n  var isDefaultTheme = defaultProps ? props.theme === defaultProps.theme : false;\n  var theme = props.theme && !isDefaultTheme ? props.theme : fallbackTheme || defaultProps.theme;\n  /* eslint-enable */\n\n  return theme;\n}; // \n\n\nvar escapeRegex = /[[\\].#*$><+~=|^:(),\""'`-]+/g;\nvar dashesAtEnds = /(^-|-$)/g;\n/**\n * TODO: Explore using CSS.escape when it becomes more available\n * in evergreen browsers.\n */\n\nfunction escape(str) {\n  return str // Replace all possible CSS selectors\n  .replace(escapeRegex, '-') // Remove extraneous hyphens at the start and end\n  .replace(dashesAtEnds, '');\n} // \n\n\nfunction isTag(target) {\n  return typeof target === 'string' && (process.env.NODE_ENV !== 'production' ? target.charAt(0) === target.charAt(0).toLowerCase() : true);\n} // \n\n\nfunction generateDisplayName(target) {\n  // $FlowFixMe\n  return isTag(target) ? 'styled.' + target : 'Styled(' + getComponentName(target) + ')';\n}\n\nvar _TYPE_STATICS;\n\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDerivedStateFromProps: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar TYPE_STATICS = (_TYPE_STATICS = {}, _TYPE_STATICS[ForwardRef] = {\n  $$typeof: true,\n  render: true\n}, _TYPE_STATICS);\nvar defineProperty$1 = Object.defineProperty,\n    getOwnPropertyNames = Object.getOwnPropertyNames,\n    _Object$getOwnPropert = Object.getOwnPropertySymbols,\n    getOwnPropertySymbols = _Object$getOwnPropert === undefined ? function () {\n  return [];\n} : _Object$getOwnPropert,\n    getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor,\n    getPrototypeOf = Object.getPrototypeOf,\n    objectPrototype = Object.prototype;\nvar arrayPrototype = Array.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    var inheritedComponent = getPrototypeOf(sourceComponent);\n\n    if (inheritedComponent && inheritedComponent !== objectPrototype) {\n      hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n    }\n\n    var keys = arrayPrototype.concat(getOwnPropertyNames(sourceComponent), // $FlowFixMe\n    getOwnPropertySymbols(sourceComponent));\n    var targetStatics = TYPE_STATICS[targetComponent.$$typeof] || REACT_STATICS;\n    var sourceStatics = TYPE_STATICS[sourceComponent.$$typeof] || REACT_STATICS;\n    var i = keys.length;\n    var descriptor = void 0;\n    var key = void 0; // eslint-disable-next-line no-plusplus\n\n    while (i--) {\n      key = keys[i];\n\n      if ( // $FlowFixMe\n      !KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && // $FlowFixMe\n      !(targetStatics && targetStatics[key])) {\n        descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        if (descriptor) {\n          try {\n            // Avoid failures from read-only properties\n            defineProperty$1(targetComponent, key, descriptor);\n          } catch (e) {\n            /* fail silently */\n          }\n        }\n      }\n    }\n\n    return targetComponent;\n  }\n\n  return targetComponent;\n} // \n\n\nfunction isDerivedReactComponent(fn) {\n  return !!(fn && fn.prototype && fn.prototype.isReactComponent);\n} // \n// Helper to call a given function, only once\n\n\nvar once = function once(cb) {\n  var called = false;\n  return function () {\n    if (!called) {\n      called = true;\n      cb.apply(undefined, arguments);\n    }\n  };\n}; // \n\n\nvar ThemeContext = createContext();\nvar ThemeConsumer = ThemeContext.Consumer;\n/**\n * Provide a theme to an entire react component tree via context\n */\n\nvar ThemeProvider = function (_Component) {\n  inherits(ThemeProvider, _Component);\n\n  function ThemeProvider(props) {\n    classCallCheck(this, ThemeProvider);\n\n    var _this = possibleConstructorReturn(this, _Component.call(this, props));\n\n    _this.getContext = memoize(_this.getContext.bind(_this));\n    _this.renderInner = _this.renderInner.bind(_this);\n    return _this;\n  }\n\n  ThemeProvider.prototype.render = function render() {\n    if (!this.props.children) return null;\n    return React.createElement(ThemeContext.Consumer, null, this.renderInner);\n  };\n\n  ThemeProvider.prototype.renderInner = function renderInner(outerTheme) {\n    var context = this.getContext(this.props.theme, outerTheme);\n    return React.createElement(ThemeContext.Provider, {\n      value: context\n    }, this.props.children);\n  };\n  /**\n   * Get the theme from the props, supporting both (outerTheme) => {}\n   * as well as object notation\n   */\n\n\n  ThemeProvider.prototype.getTheme = function getTheme(theme, outerTheme) {\n    if (isFunction(theme)) {\n      var mergedTheme = theme(outerTheme);\n\n      if (process.env.NODE_ENV !== 'production' && (mergedTheme === null || Array.isArray(mergedTheme) || (typeof mergedTheme === 'undefined' ? 'undefined' : _typeof(mergedTheme)) !== 'object')) {\n        throw new StyledComponentsError(7);\n      }\n\n      return mergedTheme;\n    }\n\n    if (theme === null || Array.isArray(theme) || (typeof theme === 'undefined' ? 'undefined' : _typeof(theme)) !== 'object') {\n      throw new StyledComponentsError(8);\n    }\n\n    return _extends({}, outerTheme, theme);\n  };\n\n  ThemeProvider.prototype.getContext = function getContext(theme, outerTheme) {\n    return this.getTheme(theme, outerTheme);\n  };\n\n  return ThemeProvider;\n}(Component); // \n\n\nvar CLOSING_TAG_R = /^\\s*<\\/[a-z]/i;\n\nvar ServerStyleSheet = function () {\n  function ServerStyleSheet() {\n    classCallCheck(this, ServerStyleSheet);\n    /* The master sheet might be reset, so keep a reference here */\n\n    this.masterSheet = StyleSheet.master;\n    this.instance = this.masterSheet.clone();\n    this.sealed = false;\n  }\n  /**\n   * Mark the ServerStyleSheet as being fully emitted and manually GC it from the\n   * StyleSheet singleton.\n   */\n\n\n  ServerStyleSheet.prototype.seal = function seal() {\n    if (!this.sealed) {\n      /* Remove sealed StyleSheets from the master sheet */\n      var index = this.masterSheet.clones.indexOf(this.instance);\n      this.masterSheet.clones.splice(index, 1);\n      this.sealed = true;\n    }\n  };\n\n  ServerStyleSheet.prototype.collectStyles = function collectStyles(children) {\n    if (this.sealed) {\n      throw new StyledComponentsError(2);\n    }\n\n    return React.createElement(StyleSheetManager, {\n      sheet: this.instance\n    }, children);\n  };\n\n  ServerStyleSheet.prototype.getStyleTags = function getStyleTags() {\n    this.seal();\n    return this.instance.toHTML();\n  };\n\n  ServerStyleSheet.prototype.getStyleElement = function getStyleElement() {\n    this.seal();\n    return this.instance.toReactElements();\n  };\n\n  ServerStyleSheet.prototype.interleaveWithNodeStream = function interleaveWithNodeStream(readableStream) {\n    var _this = this;\n\n    {\n      throw new StyledComponentsError(3);\n    }\n    /* the tag index keeps track of which tags have already been emitted */\n\n    var instance = this.instance;\n    var instanceTagIndex = 0;\n    var streamAttr = SC_STREAM_ATTR + '=\""true\""';\n    var transformer = new stream.Transform({\n      transform: function appendStyleChunks(chunk,\n      /* encoding */\n      _, callback) {\n        var tags = instance.tags;\n        var html = '';\n        /* retrieve html for each new style tag */\n\n        for (; instanceTagIndex < tags.length; instanceTagIndex += 1) {\n          var tag = tags[instanceTagIndex];\n          html += tag.toHTML(streamAttr);\n        }\n        /* force our StyleSheets to emit entirely new tags */\n\n\n        instance.sealAllTags();\n        var renderedHtml = chunk.toString();\n        /* prepend style html to chunk, unless the start of the chunk is a closing tag in which case append right after that */\n\n        if (CLOSING_TAG_R.test(renderedHtml)) {\n          var endOfClosingTag = renderedHtml.indexOf('>');\n          this.push(renderedHtml.slice(0, endOfClosingTag + 1) + html + renderedHtml.slice(endOfClosingTag + 1));\n        } else this.push(html + renderedHtml);\n\n        callback();\n      }\n    });\n    readableStream.on('end', function () {\n      return _this.seal();\n    });\n    readableStream.on('error', function (err) {\n      _this.seal(); // forward the error to the transform stream\n\n\n      transformer.emit('error', err);\n    });\n    return readableStream.pipe(transformer);\n  };\n\n  return ServerStyleSheet;\n}(); // \n\n\nvar StyleSheetContext = createContext();\nvar StyleSheetConsumer = StyleSheetContext.Consumer;\n\nvar StyleSheetManager = function (_Component) {\n  inherits(StyleSheetManager, _Component);\n\n  function StyleSheetManager(props) {\n    classCallCheck(this, StyleSheetManager);\n\n    var _this = possibleConstructorReturn(this, _Component.call(this, props));\n\n    _this.getContext = memoize(_this.getContext);\n    return _this;\n  }\n\n  StyleSheetManager.prototype.getContext = function getContext(sheet, target) {\n    if (sheet) {\n      return sheet;\n    } else if (target) {\n      return new StyleSheet(target);\n    } else {\n      throw new StyledComponentsError(4);\n    }\n  };\n\n  StyleSheetManager.prototype.render = function render() {\n    var _props = this.props,\n        children = _props.children,\n        sheet = _props.sheet,\n        target = _props.target;\n    return React.createElement(StyleSheetContext.Provider, {\n      value: this.getContext(sheet, target)\n    }, process.env.NODE_ENV !== 'production' ? React.Children.only(children) : children);\n  };\n\n  return StyleSheetManager;\n}(Component);\n\nprocess.env.NODE_ENV !== \""production\"" ? StyleSheetManager.propTypes = {\n  sheet: PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]),\n  target: PropTypes.shape({\n    appendChild: PropTypes.func.isRequired\n  })\n} : void 0; // \n\nvar identifiers = {};\n/* We depend on components having unique IDs */\n\nfunction generateId(_ComponentStyle, _displayName, parentComponentId) {\n  var displayName = typeof _displayName !== 'string' ? 'sc' : escape(_displayName);\n  /**\n   * This ensures uniqueness if two components happen to share\n   * the same displayName.\n   */\n\n  var nr = (identifiers[displayName] || 0) + 1;\n  identifiers[displayName] = nr;\n\n  var componentId = displayName + '-' + _ComponentStyle.generateName(displayName + nr);\n\n  return parentComponentId ? parentComponentId + '-' + componentId : componentId;\n} // $FlowFixMe\n\n\nvar StyledComponent = function (_Component) {\n  inherits(StyledComponent, _Component);\n\n  function StyledComponent() {\n    classCallCheck(this, StyledComponent);\n\n    var _this = possibleConstructorReturn(this, _Component.call(this));\n\n    _this.attrs = {};\n    _this.renderOuter = _this.renderOuter.bind(_this);\n    _this.renderInner = _this.renderInner.bind(_this);\n\n    if (process.env.NODE_ENV !== 'production') {\n      _this.warnInnerRef = once(function (displayName) {\n        return (// eslint-disable-next-line no-console\n          console.warn('The \""innerRef\"" API has been removed in styled-components v4 in favor of React 16 ref forwarding, use \""ref\"" instead like a typical component. \""innerRef\"" was detected on component \""' + displayName + '\"".')\n        );\n      });\n      _this.warnAttrsFnObjectKeyDeprecated = once(function (key, displayName) {\n        return (// eslint-disable-next-line no-console\n          console.warn('Functions as object-form attrs({}) keys are now deprecated and will be removed in a future version of styled-components. Switch to the new attrs(props => ({})) syntax instead for easier and more powerful composition. The attrs key in question is \""' + key + '\"" on component \""' + displayName + '\"".', '\\n ' + new Error().stack)\n        );\n      });\n      _this.warnNonStyledComponentAttrsObjectKey = once(function (key, displayName) {\n        return (// eslint-disable-next-line no-console\n          console.warn('It looks like you\\'ve used a non styled-component as the value for the \""' + key + '\"" prop in an object-form attrs constructor of \""' + displayName + '\"".\\n' + 'You should use the new function-form attrs constructor which avoids this issue: attrs(props => ({ yourStuff }))\\n' + \""To continue using the deprecated object syntax, you'll need to wrap your component prop in a function to make it available inside the styled component (you'll still get the deprecation warning though.)\\n\"" + ('For example, { ' + key + ': () => InnerComponent } instead of { ' + key + ': InnerComponent }'))\n        );\n      });\n    }\n\n    return _this;\n  }\n\n  StyledComponent.prototype.render = function render() {\n    return React.createElement(StyleSheetConsumer, null, this.renderOuter);\n  };\n\n  StyledComponent.prototype.renderOuter = function renderOuter() {\n    var styleSheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : StyleSheet.master;\n    this.styleSheet = styleSheet; // No need to subscribe a static component to theme changes, it won't change anything\n\n    if (this.props.forwardedComponent.componentStyle.isStatic) return this.renderInner();\n    return React.createElement(ThemeConsumer, null, this.renderInner);\n  };\n\n  StyledComponent.prototype.renderInner = function renderInner(theme) {\n    var _props$forwardedCompo = this.props.forwardedComponent,\n        componentStyle = _props$forwardedCompo.componentStyle,\n        defaultProps = _props$forwardedCompo.defaultProps,\n        displayName = _props$forwardedCompo.displayName,\n        foldedComponentIds = _props$forwardedCompo.foldedComponentIds,\n        styledComponentId = _props$forwardedCompo.styledComponentId,\n        target = _props$forwardedCompo.target;\n    var generatedClassName = void 0;\n\n    if (componentStyle.isStatic) {\n      generatedClassName = this.generateAndInjectStyles(EMPTY_OBJECT, this.props);\n    } else {\n      generatedClassName = this.generateAndInjectStyles(determineTheme(this.props, theme, defaultProps) || EMPTY_OBJECT, this.props);\n    }\n\n    var elementToBeCreated = this.props.as || this.attrs.as || target;\n    var isTargetTag = isTag(elementToBeCreated);\n    var propsForElement = {};\n\n    var computedProps = _extends({}, this.props, this.attrs);\n\n    var key = void 0; // eslint-disable-next-line guard-for-in\n\n    for (key in computedProps) {\n      if (process.env.NODE_ENV !== 'production' && key === 'innerRef' && isTargetTag) {\n        this.warnInnerRef(displayName);\n      }\n\n      if (key === 'forwardedComponent' || key === 'as') {\n        continue;\n      } else if (key === 'forwardedRef') propsForElement.ref = computedProps[key];else if (key === 'forwardedAs') propsForElement.as = computedProps[key];else if (!isTargetTag || validAttr(key)) {\n        // Don't pass through non HTML tags through to HTML elements\n        propsForElement[key] = computedProps[key];\n      }\n    }\n\n    if (this.props.style && this.attrs.style) {\n      propsForElement.style = _extends({}, this.attrs.style, this.props.style);\n    }\n\n    propsForElement.className = Array.prototype.concat(foldedComponentIds, styledComponentId, generatedClassName !== styledComponentId ? generatedClassName : null, this.props.className, this.attrs.className).filter(Boolean).join(' ');\n    return createElement(elementToBeCreated, propsForElement);\n  };\n\n  StyledComponent.prototype.buildExecutionContext = function buildExecutionContext(theme, props, attrs) {\n    var _this2 = this;\n\n    var context = _extends({}, props, {\n      theme: theme\n    });\n\n    if (!attrs.length) return context;\n    this.attrs = {};\n    attrs.forEach(function (attrDef) {\n      var resolvedAttrDef = attrDef;\n      var attrDefWasFn = false;\n      var attr = void 0;\n      var key = void 0;\n\n      if (isFunction(resolvedAttrDef)) {\n        // $FlowFixMe\n        resolvedAttrDef = resolvedAttrDef(context);\n        attrDefWasFn = true;\n      }\n      /* eslint-disable guard-for-in */\n      // $FlowFixMe\n\n\n      for (key in resolvedAttrDef) {\n        attr = resolvedAttrDef[key];\n\n        if (!attrDefWasFn) {\n          if (isFunction(attr) && !isDerivedReactComponent(attr) && !isStyledComponent(attr)) {\n            if (process.env.NODE_ENV !== 'production') {\n              _this2.warnAttrsFnObjectKeyDeprecated(key, props.forwardedComponent.displayName);\n            }\n\n            attr = attr(context);\n\n            if (process.env.NODE_ENV !== 'production' && React.isValidElement(attr)) {\n              _this2.warnNonStyledComponentAttrsObjectKey(key, props.forwardedComponent.displayName);\n            }\n          }\n        }\n\n        _this2.attrs[key] = attr;\n        context[key] = attr;\n      }\n      /* eslint-enable */\n\n    });\n    return context;\n  };\n\n  StyledComponent.prototype.generateAndInjectStyles = function generateAndInjectStyles(theme, props) {\n    var _props$forwardedCompo2 = props.forwardedComponent,\n        attrs = _props$forwardedCompo2.attrs,\n        componentStyle = _props$forwardedCompo2.componentStyle,\n        warnTooManyClasses = _props$forwardedCompo2.warnTooManyClasses; // statically styled-components don't need to build an execution context object,\n    // and shouldn't be increasing the number of class names\n\n    if (componentStyle.isStatic && !attrs.length) {\n      return componentStyle.generateAndInjectStyles(EMPTY_OBJECT, this.styleSheet);\n    }\n\n    var className = componentStyle.generateAndInjectStyles(this.buildExecutionContext(theme, props, attrs), this.styleSheet);\n    if (process.env.NODE_ENV !== 'production' && warnTooManyClasses) warnTooManyClasses(className);\n    return className;\n  };\n\n  return StyledComponent;\n}(Component);\n\nfunction createStyledComponent(target, options, rules) {\n  var isTargetStyledComp = isStyledComponent(target);\n  var isClass = !isTag(target);\n  var _options$displayName = options.displayName,\n      displayName = _options$displayName === undefined ? generateDisplayName(target) : _options$displayName,\n      _options$componentId = options.componentId,\n      componentId = _options$componentId === undefined ? generateId(ComponentStyle, options.displayName, options.parentComponentId) : _options$componentId,\n      _options$ParentCompon = options.ParentComponent,\n      ParentComponent = _options$ParentCompon === undefined ? StyledComponent : _options$ParentCompon,\n      _options$attrs = options.attrs,\n      attrs = _options$attrs === undefined ? EMPTY_ARRAY : _options$attrs;\n  var styledComponentId = options.displayName && options.componentId ? escape(options.displayName) + '-' + options.componentId : options.componentId || componentId; // fold the underlying StyledComponent attrs up (implicit extend)\n\n  var finalAttrs = // $FlowFixMe\n  isTargetStyledComp && target.attrs ? Array.prototype.concat(target.attrs, attrs).filter(Boolean) : attrs;\n  var componentStyle = new ComponentStyle(isTargetStyledComp ? // fold the underlying StyledComponent rules up (implicit extend)\n  // $FlowFixMe\n  target.componentStyle.rules.concat(rules) : rules, finalAttrs, styledComponentId);\n  /**\n   * forwardRef creates a new interim component, which we'll take advantage of\n   * instead of extending ParentComponent to create _another_ interim class\n   */\n\n  var WrappedStyledComponent = void 0;\n\n  var forwardRef = function forwardRef(props, ref) {\n    return React.createElement(ParentComponent, _extends({}, props, {\n      forwardedComponent: WrappedStyledComponent,\n      forwardedRef: ref\n    }));\n  };\n\n  forwardRef.displayName = displayName;\n  WrappedStyledComponent = React.forwardRef(forwardRef);\n  WrappedStyledComponent.displayName = displayName; // $FlowFixMe\n\n  WrappedStyledComponent.attrs = finalAttrs; // $FlowFixMe\n\n  WrappedStyledComponent.componentStyle = componentStyle; // $FlowFixMe\n\n  WrappedStyledComponent.foldedComponentIds = isTargetStyledComp ? // $FlowFixMe\n  Array.prototype.concat(target.foldedComponentIds, target.styledComponentId) : EMPTY_ARRAY; // $FlowFixMe\n\n  WrappedStyledComponent.styledComponentId = styledComponentId; // fold the underlying StyledComponent target up since we folded the styles\n  // $FlowFixMe\n\n  WrappedStyledComponent.target = isTargetStyledComp ? target.target : target; // $FlowFixMe\n\n  WrappedStyledComponent.withComponent = function withComponent(tag) {\n    var previousComponentId = options.componentId,\n        optionsToCopy = objectWithoutProperties(options, ['componentId']);\n    var newComponentId = previousComponentId && previousComponentId + '-' + (isTag(tag) ? tag : escape(getComponentName(tag)));\n\n    var newOptions = _extends({}, optionsToCopy, {\n      attrs: finalAttrs,\n      componentId: newComponentId,\n      ParentComponent: ParentComponent\n    });\n\n    return createStyledComponent(tag, newOptions, rules);\n  }; // $FlowFixMe\n\n\n  Object.defineProperty(WrappedStyledComponent, 'defaultProps', {\n    get: function get$$1() {\n      return this._foldedDefaultProps;\n    },\n    set: function set$$1(obj) {\n      // $FlowFixMe\n      this._foldedDefaultProps = isTargetStyledComp ? merge(target.defaultProps, obj) : obj;\n    }\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe\n    WrappedStyledComponent.warnTooManyClasses = createWarnTooManyClasses(displayName);\n  } // $FlowFixMe\n\n\n  WrappedStyledComponent.toString = function () {\n    return '.' + WrappedStyledComponent.styledComponentId;\n  };\n\n  if (isClass) {\n    hoistNonReactStatics(WrappedStyledComponent, target, {\n      // all SC-specific things should not be hoisted\n      attrs: true,\n      componentStyle: true,\n      displayName: true,\n      foldedComponentIds: true,\n      styledComponentId: true,\n      target: true,\n      withComponent: true\n    });\n  }\n\n  return WrappedStyledComponent;\n} // \n// Thanks to ReactDOMFactories for this handy list!\n\n\nvar domElements = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'marker', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan']; // \n\nvar styled = function styled(tag) {\n  return constructWithOptions(createStyledComponent, tag);\n}; // Shorthands for all valid HTML Elements\n\n\ndomElements.forEach(function (domElement) {\n  styled[domElement] = styled(domElement);\n}); // \n\nvar GlobalStyle = function () {\n  function GlobalStyle(rules, componentId) {\n    classCallCheck(this, GlobalStyle);\n    this.rules = rules;\n    this.componentId = componentId;\n    this.isStatic = isStaticRules(rules, EMPTY_ARRAY);\n\n    if (!StyleSheet.master.hasId(componentId)) {\n      StyleSheet.master.deferredInject(componentId, []);\n    }\n  }\n\n  GlobalStyle.prototype.createStyles = function createStyles(executionContext, styleSheet) {\n    var flatCSS = flatten(this.rules, executionContext, styleSheet);\n    var css = stringifyRules(flatCSS, '');\n    styleSheet.inject(this.componentId, css);\n  };\n\n  GlobalStyle.prototype.removeStyles = function removeStyles(styleSheet) {\n    var componentId = this.componentId;\n\n    if (styleSheet.hasId(componentId)) {\n      styleSheet.remove(componentId);\n    }\n  }; // TODO: overwrite in-place instead of remove+create?\n\n\n  GlobalStyle.prototype.renderStyles = function renderStyles(executionContext, styleSheet) {\n    this.removeStyles(styleSheet);\n    this.createStyles(executionContext, styleSheet);\n  };\n\n  return GlobalStyle;\n}(); // \n// place our cache into shared context so it'll persist between HMRs\n\n\nif (IS_BROWSER) {\n  window.scCGSHMRCache = {};\n}\n\nfunction createGlobalStyle(strings) {\n  for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    interpolations[_key - 1] = arguments[_key];\n  }\n\n  var rules = css.apply(undefined, [strings].concat(interpolations));\n  var id = 'sc-global-' + murmurhash(JSON.stringify(rules));\n  var style = new GlobalStyle(rules, id);\n\n  var GlobalStyleComponent = function (_React$Component) {\n    inherits(GlobalStyleComponent, _React$Component);\n\n    function GlobalStyleComponent(props) {\n      classCallCheck(this, GlobalStyleComponent);\n\n      var _this = possibleConstructorReturn(this, _React$Component.call(this, props));\n\n      var _this$constructor = _this.constructor,\n          globalStyle = _this$constructor.globalStyle,\n          styledComponentId = _this$constructor.styledComponentId;\n\n      if (IS_BROWSER) {\n        window.scCGSHMRCache[styledComponentId] = (window.scCGSHMRCache[styledComponentId] || 0) + 1;\n      }\n      /**\n       * This fixes HMR compatibility. Don't ask me why, but this combination of\n       * caching the closure variables via statics and then persisting the statics in\n       * state works across HMR where no other combination did. ¯\\_(ツ)_/¯\n       */\n\n\n      _this.state = {\n        globalStyle: globalStyle,\n        styledComponentId: styledComponentId\n      };\n      return _this;\n    }\n\n    GlobalStyleComponent.prototype.componentWillUnmount = function componentWillUnmount() {\n      if (window.scCGSHMRCache[this.state.styledComponentId]) {\n        window.scCGSHMRCache[this.state.styledComponentId] -= 1;\n      }\n      /**\n       * Depending on the order \""render\"" is called this can cause the styles to be lost\n       * until the next render pass of the remaining instance, which may\n       * not be immediate.\n       */\n\n\n      if (window.scCGSHMRCache[this.state.styledComponentId] === 0) {\n        this.state.globalStyle.removeStyles(this.styleSheet);\n      }\n    };\n\n    GlobalStyleComponent.prototype.render = function render() {\n      var _this2 = this;\n\n      if (process.env.NODE_ENV !== 'production' && React.Children.count(this.props.children)) {\n        // eslint-disable-next-line no-console\n        console.warn('The global style component ' + this.state.styledComponentId + ' was given child JSX. createGlobalStyle does not render children.');\n      }\n\n      return React.createElement(StyleSheetConsumer, null, function (styleSheet) {\n        _this2.styleSheet = styleSheet || StyleSheet.master;\n        var globalStyle = _this2.state.globalStyle;\n\n        if (globalStyle.isStatic) {\n          globalStyle.renderStyles(STATIC_EXECUTION_CONTEXT, _this2.styleSheet);\n          return null;\n        } else {\n          return React.createElement(ThemeConsumer, null, function (theme) {\n            // $FlowFixMe\n            var defaultProps = _this2.constructor.defaultProps;\n\n            var context = _extends({}, _this2.props);\n\n            if (typeof theme !== 'undefined') {\n              context.theme = determineTheme(_this2.props, theme, defaultProps);\n            }\n\n            globalStyle.renderStyles(context, _this2.styleSheet);\n            return null;\n          });\n        }\n      });\n    };\n\n    return GlobalStyleComponent;\n  }(React.Component);\n\n  GlobalStyleComponent.globalStyle = style;\n  GlobalStyleComponent.styledComponentId = id;\n  return GlobalStyleComponent;\n} // \n\n\nvar replaceWhitespace = function replaceWhitespace(str) {\n  return str.replace(/\\s|\\\\n/g, '');\n};\n\nfunction keyframes(strings) {\n  /* Warning if you've used keyframes on React Native */\n  if (process.env.NODE_ENV !== 'production' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n    // eslint-disable-next-line no-console\n    console.warn('`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.');\n  }\n\n  for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    interpolations[_key - 1] = arguments[_key];\n  }\n\n  var rules = css.apply(undefined, [strings].concat(interpolations));\n  var name = generateAlphabeticName(murmurhash(replaceWhitespace(JSON.stringify(rules))));\n  return new Keyframes(name, stringifyRules(rules, name, '@keyframes'));\n} // \n\n\nvar withTheme = function withTheme(Component$$1) {\n  var WithTheme = React.forwardRef(function (props, ref) {\n    return React.createElement(ThemeConsumer, null, function (theme) {\n      // $FlowFixMe\n      var defaultProps = Component$$1.defaultProps;\n      var themeProp = determineTheme(props, theme, defaultProps);\n\n      if (process.env.NODE_ENV !== 'production' && themeProp === undefined) {\n        // eslint-disable-next-line no-console\n        console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \""' + getComponentName(Component$$1) + '\""');\n      }\n\n      return React.createElement(Component$$1, _extends({}, props, {\n        theme: themeProp,\n        ref: ref\n      }));\n    });\n  });\n  hoistNonReactStatics(WithTheme, Component$$1);\n  WithTheme.displayName = 'WithTheme(' + getComponentName(Component$$1) + ')';\n  return WithTheme;\n}; // \n\n/* eslint-disable */\n\n\nvar __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS = {\n  StyleSheet: StyleSheet\n}; // \n\n/* Warning if you've imported this file on React Native */\n\nif (process.env.NODE_ENV !== 'production' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n  // eslint-disable-next-line no-console\n  console.warn(\""It looks like you've imported 'styled-components' on React Native.\\n\"" + \""Perhaps you're looking to import 'styled-components/native'?\\n\"" + 'Read more about this at https://www.styled-components.com/docs/basics#react-native');\n}\n/* Warning if there are several instances of styled-components */\n\n\nif (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Node.js') === -1 && navigator.userAgent.indexOf('jsdom') === -1) {\n  window['__styled-components-init__'] = window['__styled-components-init__'] || 0;\n\n  if (window['__styled-components-init__'] === 1) {\n    // eslint-disable-next-line no-console\n    console.warn(\""It looks like there are several instances of 'styled-components' initialized in this application. \"" + 'This may cause dynamic styles not rendering properly, errors happening during rehydration process ' + 'and makes your application bigger without a good reason.\\n\\n' + 'See https://s-c.sh/2BAXzed for more info.');\n  }\n\n  window['__styled-components-init__'] += 1;\n} //\n\n\nexport default styled;\nexport { createGlobalStyle, css, isStyledComponent, keyframes, ServerStyleSheet, StyleSheetConsumer, StyleSheetContext, StyleSheetManager, ThemeConsumer, ThemeContext, ThemeProvider, withTheme, __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS };"",""require(\""core-js/modules/es6.date.to-json\"");\n\nrequire(\""core-js/modules/es6.date.to-iso-string\"");\n\nrequire(\""core-js/modules/es6.date.now\"");\n\nrequire(\""core-js/modules/es6.function.name\"");\n\nrequire(\""core-js/modules/es6.array.for-each\"");\n\nrequire(\""core-js/modules/es6.regexp.split\"");\n\nrequire(\""core-js/modules/es6.array.index-of\"");\n\nrequire(\""core-js/modules/es6.regexp.match\"");\n\nrequire(\""core-js/modules/es6.array.sort\"");\n\nrequire(\""core-js/modules/es6.regexp.replace\"");\n\nrequire(\""core-js/modules/web.dom.iterable\"");\n\nrequire(\""core-js/modules/es6.array.iterator\"");\n\nrequire(\""core-js/modules/es6.object.keys\"");\n\nrequire(\""core-js/modules/es6.regexp.constructor\"");\n\nrequire(\""core-js/modules/es6.object.is-frozen\"");\n\nrequire(\""core-js/modules/es6.array.some\"");\n\nrequire(\""core-js/modules/es6.regexp.to-string\"");\n\nrequire(\""core-js/modules/es6.date.to-string\"");\n\nrequire(\""core-js/modules/es6.object.to-string\"");\n\n//! moment.js\n;\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.moment = factory();\n})(this, function () {\n  'use strict';\n\n  var hookCallback;\n\n  function hooks() {\n    return hookCallback.apply(null, arguments);\n  } // This is done to register the method called with moment()\n  // without creating circular dependencies.\n\n\n  function setHookCallback(callback) {\n    hookCallback = callback;\n  }\n\n  function isArray(input) {\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n  }\n\n  function isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n  }\n\n  function isObjectEmpty(obj) {\n    if (Object.getOwnPropertyNames) {\n      return Object.getOwnPropertyNames(obj).length === 0;\n    } else {\n      var k;\n\n      for (k in obj) {\n        if (obj.hasOwnProperty(k)) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n  }\n\n  function isUndefined(input) {\n    return input === void 0;\n  }\n\n  function isNumber(input) {\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n  }\n\n  function isDate(input) {\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n  }\n\n  function map(arr, fn) {\n    var res = [],\n        i;\n\n    for (i = 0; i < arr.length; ++i) {\n      res.push(fn(arr[i], i));\n    }\n\n    return res;\n  }\n\n  function hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n  }\n\n  function extend(a, b) {\n    for (var i in b) {\n      if (hasOwnProp(b, i)) {\n        a[i] = b[i];\n      }\n    }\n\n    if (hasOwnProp(b, 'toString')) {\n      a.toString = b.toString;\n    }\n\n    if (hasOwnProp(b, 'valueOf')) {\n      a.valueOf = b.valueOf;\n    }\n\n    return a;\n  }\n\n  function createUTC(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n  }\n\n  function defaultParsingFlags() {\n    // We need to deep clone this object.\n    return {\n      empty: false,\n      unusedTokens: [],\n      unusedInput: [],\n      overflow: -2,\n      charsLeftOver: 0,\n      nullInput: false,\n      invalidMonth: null,\n      invalidFormat: false,\n      userInvalidated: false,\n      iso: false,\n      parsedDateParts: [],\n      meridiem: null,\n      rfc2822: false,\n      weekdayMismatch: false\n    };\n  }\n\n  function getParsingFlags(m) {\n    if (m._pf == null) {\n      m._pf = defaultParsingFlags();\n    }\n\n    return m._pf;\n  }\n\n  var some;\n\n  if (Array.prototype.some) {\n    some = Array.prototype.some;\n  } else {\n    some = function some(fun) {\n      var t = Object(this);\n      var len = t.length >>> 0;\n\n      for (var i = 0; i < len; i++) {\n        if (i in t && fun.call(this, t[i], i, t)) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n  }\n\n  function isValid(m) {\n    if (m._isValid == null) {\n      var flags = getParsingFlags(m);\n      var parsedParts = some.call(flags.parsedDateParts, function (i) {\n        return i != null;\n      });\n      var isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n\n      if (m._strict) {\n        isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;\n      }\n\n      if (Object.isFrozen == null || !Object.isFrozen(m)) {\n        m._isValid = isNowValid;\n      } else {\n        return isNowValid;\n      }\n    }\n\n    return m._isValid;\n  }\n\n  function createInvalid(flags) {\n    var m = createUTC(NaN);\n\n    if (flags != null) {\n      extend(getParsingFlags(m), flags);\n    } else {\n      getParsingFlags(m).userInvalidated = true;\n    }\n\n    return m;\n  } // Plugins that add properties should also add the key here (null value),\n  // so we can properly clone ourselves.\n\n\n  var momentProperties = hooks.momentProperties = [];\n\n  function copyConfig(to, from) {\n    var i, prop, val;\n\n    if (!isUndefined(from._isAMomentObject)) {\n      to._isAMomentObject = from._isAMomentObject;\n    }\n\n    if (!isUndefined(from._i)) {\n      to._i = from._i;\n    }\n\n    if (!isUndefined(from._f)) {\n      to._f = from._f;\n    }\n\n    if (!isUndefined(from._l)) {\n      to._l = from._l;\n    }\n\n    if (!isUndefined(from._strict)) {\n      to._strict = from._strict;\n    }\n\n    if (!isUndefined(from._tzm)) {\n      to._tzm = from._tzm;\n    }\n\n    if (!isUndefined(from._isUTC)) {\n      to._isUTC = from._isUTC;\n    }\n\n    if (!isUndefined(from._offset)) {\n      to._offset = from._offset;\n    }\n\n    if (!isUndefined(from._pf)) {\n      to._pf = getParsingFlags(from);\n    }\n\n    if (!isUndefined(from._locale)) {\n      to._locale = from._locale;\n    }\n\n    if (momentProperties.length > 0) {\n      for (i = 0; i < momentProperties.length; i++) {\n        prop = momentProperties[i];\n        val = from[prop];\n\n        if (!isUndefined(val)) {\n          to[prop] = val;\n        }\n      }\n    }\n\n    return to;\n  }\n\n  var updateInProgress = false; // Moment prototype object\n\n  function Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\n    if (!this.isValid()) {\n      this._d = new Date(NaN);\n    } // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n\n\n    if (updateInProgress === false) {\n      updateInProgress = true;\n      hooks.updateOffset(this);\n      updateInProgress = false;\n    }\n  }\n\n  function isMoment(obj) {\n    return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n  }\n\n  function absFloor(number) {\n    if (number < 0) {\n      // -0 -> 0\n      return Math.ceil(number) || 0;\n    } else {\n      return Math.floor(number);\n    }\n  }\n\n  function toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n        value = 0;\n\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n      value = absFloor(coercedNumber);\n    }\n\n    return value;\n  } // compare two arrays, return the number of differences\n\n\n  function compareArrays(array1, array2, dontConvert) {\n    var len = Math.min(array1.length, array2.length),\n        lengthDiff = Math.abs(array1.length - array2.length),\n        diffs = 0,\n        i;\n\n    for (i = 0; i < len; i++) {\n      if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\n        diffs++;\n      }\n    }\n\n    return diffs + lengthDiff;\n  }\n\n  function warn(msg) {\n    if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n      console.warn('Deprecation warning: ' + msg);\n    }\n  }\n\n  function deprecate(msg, fn) {\n    var firstTime = true;\n    return extend(function () {\n      if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(null, msg);\n      }\n\n      if (firstTime) {\n        var args = [];\n        var arg;\n\n        for (var i = 0; i < arguments.length; i++) {\n          arg = '';\n\n          if (typeof arguments[i] === 'object') {\n            arg += '\\n[' + i + '] ';\n\n            for (var key in arguments[0]) {\n              arg += key + ': ' + arguments[0][key] + ', ';\n            }\n\n            arg = arg.slice(0, -2); // Remove trailing comma and space\n          } else {\n            arg = arguments[i];\n          }\n\n          args.push(arg);\n        }\n\n        warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + new Error().stack);\n        firstTime = false;\n      }\n\n      return fn.apply(this, arguments);\n    }, fn);\n  }\n\n  var deprecations = {};\n\n  function deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n      hooks.deprecationHandler(name, msg);\n    }\n\n    if (!deprecations[name]) {\n      warn(msg);\n      deprecations[name] = true;\n    }\n  }\n\n  hooks.suppressDeprecationWarnings = false;\n  hooks.deprecationHandler = null;\n\n  function isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n  }\n\n  function set(config) {\n    var prop, i;\n\n    for (i in config) {\n      prop = config[i];\n\n      if (isFunction(prop)) {\n        this[i] = prop;\n      } else {\n        this['_' + i] = prop;\n      }\n    }\n\n    this._config = config; // Lenient ordinal parsing accepts just a number in addition to\n    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n    // TODO: Remove \""ordinalParse\"" fallback in next major release.\n\n    this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\d{1,2}/.source);\n  }\n\n  function mergeConfigs(parentConfig, childConfig) {\n    var res = extend({}, parentConfig),\n        prop;\n\n    for (prop in childConfig) {\n      if (hasOwnProp(childConfig, prop)) {\n        if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n          res[prop] = {};\n          extend(res[prop], parentConfig[prop]);\n          extend(res[prop], childConfig[prop]);\n        } else if (childConfig[prop] != null) {\n          res[prop] = childConfig[prop];\n        } else {\n          delete res[prop];\n        }\n      }\n    }\n\n    for (prop in parentConfig) {\n      if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n        // make sure changes to properties don't modify parent config\n        res[prop] = extend({}, res[prop]);\n      }\n    }\n\n    return res;\n  }\n\n  function Locale(config) {\n    if (config != null) {\n      this.set(config);\n    }\n  }\n\n  var keys;\n\n  if (Object.keys) {\n    keys = Object.keys;\n  } else {\n    keys = function keys(obj) {\n      var i,\n          res = [];\n\n      for (i in obj) {\n        if (hasOwnProp(obj, i)) {\n          res.push(i);\n        }\n      }\n\n      return res;\n    };\n  }\n\n  var defaultCalendar = {\n    sameDay: '[Today at] LT',\n    nextDay: '[Tomorrow at] LT',\n    nextWeek: 'dddd [at] LT',\n    lastDay: '[Yesterday at] LT',\n    lastWeek: '[Last] dddd [at] LT',\n    sameElse: 'L'\n  };\n\n  function calendar(key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n  }\n\n  var defaultLongDateFormat = {\n    LTS: 'h:mm:ss A',\n    LT: 'h:mm A',\n    L: 'MM/DD/YYYY',\n    LL: 'MMMM D, YYYY',\n    LLL: 'MMMM D, YYYY h:mm A',\n    LLLL: 'dddd, MMMM D, YYYY h:mm A'\n  };\n\n  function longDateFormat(key) {\n    var format = this._longDateFormat[key],\n        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n    if (format || !formatUpper) {\n      return format;\n    }\n\n    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n      return val.slice(1);\n    });\n    return this._longDateFormat[key];\n  }\n\n  var defaultInvalidDate = 'Invalid date';\n\n  function invalidDate() {\n    return this._invalidDate;\n  }\n\n  var defaultOrdinal = '%d';\n  var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n  function ordinal(number) {\n    return this._ordinal.replace('%d', number);\n  }\n\n  var defaultRelativeTime = {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    ss: '%d seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  };\n\n  function relativeTime(number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\n  }\n\n  function pastFuture(diff, output) {\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n  }\n\n  var aliases = {};\n\n  function addUnitAlias(unit, shorthand) {\n    var lowerCase = unit.toLowerCase();\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n  }\n\n  function normalizeUnits(units) {\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n  }\n\n  function normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n        normalizedProp,\n        prop;\n\n    for (prop in inputObject) {\n      if (hasOwnProp(inputObject, prop)) {\n        normalizedProp = normalizeUnits(prop);\n\n        if (normalizedProp) {\n          normalizedInput[normalizedProp] = inputObject[prop];\n        }\n      }\n    }\n\n    return normalizedInput;\n  }\n\n  var priorities = {};\n\n  function addUnitPriority(unit, priority) {\n    priorities[unit] = priority;\n  }\n\n  function getPrioritizedUnits(unitsObj) {\n    var units = [];\n\n    for (var u in unitsObj) {\n      units.push({\n        unit: u,\n        priority: priorities[u]\n      });\n    }\n\n    units.sort(function (a, b) {\n      return a.priority - b.priority;\n    });\n    return units;\n  }\n\n  function zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n        zerosToFill = targetLength - absNumber.length,\n        sign = number >= 0;\n    return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n  }\n\n  var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n  var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n  var formatFunctions = {};\n  var formatTokenFunctions = {}; // token:    'M'\n  // padded:   ['MM', 2]\n  // ordinal:  'Mo'\n  // callback: function () { this.month() + 1 }\n\n  function addFormatToken(token, padded, ordinal, callback) {\n    var func = callback;\n\n    if (typeof callback === 'string') {\n      func = function func() {\n        return this[callback]();\n      };\n    }\n\n    if (token) {\n      formatTokenFunctions[token] = func;\n    }\n\n    if (padded) {\n      formatTokenFunctions[padded[0]] = function () {\n        return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n      };\n    }\n\n    if (ordinal) {\n      formatTokenFunctions[ordinal] = function () {\n        return this.localeData().ordinal(func.apply(this, arguments), token);\n      };\n    }\n  }\n\n  function removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n      return input.replace(/^\\[|\\]$/g, '');\n    }\n\n    return input.replace(/\\\\/g, '');\n  }\n\n  function makeFormatFunction(format) {\n    var array = format.match(formattingTokens),\n        i,\n        length;\n\n    for (i = 0, length = array.length; i < length; i++) {\n      if (formatTokenFunctions[array[i]]) {\n        array[i] = formatTokenFunctions[array[i]];\n      } else {\n        array[i] = removeFormattingTokens(array[i]);\n      }\n    }\n\n    return function (mom) {\n      var output = '',\n          i;\n\n      for (i = 0; i < length; i++) {\n        output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n      }\n\n      return output;\n    };\n  } // format date using native date object\n\n\n  function formatMoment(m, format) {\n    if (!m.isValid()) {\n      return m.localeData().invalidDate();\n    }\n\n    format = expandFormat(format, m.localeData());\n    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n    return formatFunctions[format](m);\n  }\n\n  function expandFormat(format, locale) {\n    var i = 5;\n\n    function replaceLongDateFormatTokens(input) {\n      return locale.longDateFormat(input) || input;\n    }\n\n    localFormattingTokens.lastIndex = 0;\n\n    while (i >= 0 && localFormattingTokens.test(format)) {\n      format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n      localFormattingTokens.lastIndex = 0;\n      i -= 1;\n    }\n\n    return format;\n  }\n\n  var match1 = /\\d/; //       0 - 9\n\n  var match2 = /\\d\\d/; //      00 - 99\n\n  var match3 = /\\d{3}/; //     000 - 999\n\n  var match4 = /\\d{4}/; //    0000 - 9999\n\n  var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n\n  var match1to2 = /\\d\\d?/; //       0 - 99\n\n  var match3to4 = /\\d\\d\\d\\d?/; //     999 - 9999\n\n  var match5to6 = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n\n  var match1to3 = /\\d{1,3}/; //       0 - 999\n\n  var match1to4 = /\\d{1,4}/; //       0 - 9999\n\n  var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n  var matchUnsigned = /\\d+/; //       0 - inf\n\n  var matchSigned = /[+-]?\\d+/; //    -inf - inf\n\n  var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\n  var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n  var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n  // any word (or two) characters or numbers including two/three word month in arabic.\n  // includes scottish gaelic two word and hyphenated months\n\n  var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n  var regexes = {};\n\n  function addRegexToken(token, regex, strictRegex) {\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n      return isStrict && strictRegex ? strictRegex : regex;\n    };\n  }\n\n  function getParseRegexForToken(token, config) {\n    if (!hasOwnProp(regexes, token)) {\n      return new RegExp(unescapeFormat(token));\n    }\n\n    return regexes[token](config._strict, config._locale);\n  } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\n\n  function unescapeFormat(s) {\n    return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n      return p1 || p2 || p3 || p4;\n    }));\n  }\n\n  function regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n  }\n\n  var tokens = {};\n\n  function addParseToken(token, callback) {\n    var i,\n        func = callback;\n\n    if (typeof token === 'string') {\n      token = [token];\n    }\n\n    if (isNumber(callback)) {\n      func = function func(input, array) {\n        array[callback] = toInt(input);\n      };\n    }\n\n    for (i = 0; i < token.length; i++) {\n      tokens[token[i]] = func;\n    }\n  }\n\n  function addWeekParseToken(token, callback) {\n    addParseToken(token, function (input, array, config, token) {\n      config._w = config._w || {};\n      callback(input, config._w, config, token);\n    });\n  }\n\n  function addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n      tokens[token](input, config._a, config, token);\n    }\n  }\n\n  var YEAR = 0;\n  var MONTH = 1;\n  var DATE = 2;\n  var HOUR = 3;\n  var MINUTE = 4;\n  var SECOND = 5;\n  var MILLISECOND = 6;\n  var WEEK = 7;\n  var WEEKDAY = 8; // FORMATTING\n\n  addFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? '' + y : '+' + y;\n  });\n  addFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n  });\n  addFormatToken(0, ['YYYY', 4], 0, 'year');\n  addFormatToken(0, ['YYYYY', 5], 0, 'year');\n  addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // ALIASES\n\n  addUnitAlias('year', 'y'); // PRIORITIES\n\n  addUnitPriority('year', 1); // PARSING\n\n  addRegexToken('Y', matchSigned);\n  addRegexToken('YY', match1to2, match2);\n  addRegexToken('YYYY', match1to4, match4);\n  addRegexToken('YYYYY', match1to6, match6);\n  addRegexToken('YYYYYY', match1to6, match6);\n  addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n  addParseToken('YYYY', function (input, array) {\n    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n  });\n  addParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n  });\n  addParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n  }); // HELPERS\n\n  function daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n  }\n\n  function isLeapYear(year) {\n    return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n  } // HOOKS\n\n\n  hooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n  }; // MOMENTS\n\n\n  var getSetYear = makeGetSet('FullYear', true);\n\n  function getIsLeapYear() {\n    return isLeapYear(this.year());\n  }\n\n  function makeGetSet(unit, keepTime) {\n    return function (value) {\n      if (value != null) {\n        set$1(this, unit, value);\n        hooks.updateOffset(this, keepTime);\n        return this;\n      } else {\n        return get(this, unit);\n      }\n    };\n  }\n\n  function get(mom, unit) {\n    return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n  }\n\n  function set$1(mom, unit, value) {\n    if (mom.isValid() && !isNaN(value)) {\n      if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n      } else {\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n      }\n    }\n  } // MOMENTS\n\n\n  function stringGet(units) {\n    units = normalizeUnits(units);\n\n    if (isFunction(this[units])) {\n      return this[units]();\n    }\n\n    return this;\n  }\n\n  function stringSet(units, value) {\n    if (typeof units === 'object') {\n      units = normalizeObjectUnits(units);\n      var prioritized = getPrioritizedUnits(units);\n\n      for (var i = 0; i < prioritized.length; i++) {\n        this[prioritized[i].unit](units[prioritized[i].unit]);\n      }\n    } else {\n      units = normalizeUnits(units);\n\n      if (isFunction(this[units])) {\n        return this[units](value);\n      }\n    }\n\n    return this;\n  }\n\n  function mod(n, x) {\n    return (n % x + x) % x;\n  }\n\n  var indexOf;\n\n  if (Array.prototype.indexOf) {\n    indexOf = Array.prototype.indexOf;\n  } else {\n    indexOf = function indexOf(o) {\n      // I know\n      var i;\n\n      for (i = 0; i < this.length; ++i) {\n        if (this[i] === o) {\n          return i;\n        }\n      }\n\n      return -1;\n    };\n  }\n\n  function daysInMonth(year, month) {\n    if (isNaN(year) || isNaN(month)) {\n      return NaN;\n    }\n\n    var modMonth = mod(month, 12);\n    year += (month - modMonth) / 12;\n    return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n  } // FORMATTING\n\n\n  addFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n  });\n  addFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n  });\n  addFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n  }); // ALIASES\n\n  addUnitAlias('month', 'M'); // PRIORITY\n\n  addUnitPriority('month', 8); // PARSING\n\n  addRegexToken('M', match1to2);\n  addRegexToken('MM', match1to2, match2);\n  addRegexToken('MMM', function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n  });\n  addRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n  });\n  addParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n  });\n  addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n    var month = config._locale.monthsParse(input, token, config._strict); // if we didn't find a month name, mark the date as invalid.\n\n\n    if (month != null) {\n      array[MONTH] = month;\n    } else {\n      getParsingFlags(config).invalidMonth = input;\n    }\n  }); // LOCALES\n\n  var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n  var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n\n  function localeMonths(m, format) {\n    if (!m) {\n      return isArray(this._months) ? this._months : this._months['standalone'];\n    }\n\n    return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n  }\n\n  var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n\n  function localeMonthsShort(m, format) {\n    if (!m) {\n      return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\n    }\n\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n  }\n\n  function handleStrictParse(monthName, format, strict) {\n    var i,\n        ii,\n        mom,\n        llc = monthName.toLocaleLowerCase();\n\n    if (!this._monthsParse) {\n      // this is not used\n      this._monthsParse = [];\n      this._longMonthsParse = [];\n      this._shortMonthsParse = [];\n\n      for (i = 0; i < 12; ++i) {\n        mom = createUTC([2000, i]);\n        this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n        this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n      }\n    }\n\n    if (strict) {\n      if (format === 'MMM') {\n        ii = indexOf.call(this._shortMonthsParse, llc);\n        return ii !== -1 ? ii : null;\n      } else {\n        ii = indexOf.call(this._longMonthsParse, llc);\n        return ii !== -1 ? ii : null;\n      }\n    } else {\n      if (format === 'MMM') {\n        ii = indexOf.call(this._shortMonthsParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._longMonthsParse, llc);\n        return ii !== -1 ? ii : null;\n      } else {\n        ii = indexOf.call(this._longMonthsParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._shortMonthsParse, llc);\n        return ii !== -1 ? ii : null;\n      }\n    }\n  }\n\n  function localeMonthsParse(monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n      return handleStrictParse.call(this, monthName, format, strict);\n    }\n\n    if (!this._monthsParse) {\n      this._monthsParse = [];\n      this._longMonthsParse = [];\n      this._shortMonthsParse = [];\n    } // TODO: add sorting\n    // Sorting makes sure if one month (or abbr) is a prefix of another\n    // see sorting in computeMonthsParse\n\n\n    for (i = 0; i < 12; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, i]);\n\n      if (strict && !this._longMonthsParse[i]) {\n        this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n        this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n      }\n\n      if (!strict && !this._monthsParse[i]) {\n        regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n        this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n      } // test the regex\n\n\n      if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n        return i;\n      } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n        return i;\n      } else if (!strict && this._monthsParse[i].test(monthName)) {\n        return i;\n      }\n    }\n  } // MOMENTS\n\n\n  function setMonth(mom, value) {\n    var dayOfMonth;\n\n    if (!mom.isValid()) {\n      // No op\n      return mom;\n    }\n\n    if (typeof value === 'string') {\n      if (/^\\d+$/.test(value)) {\n        value = toInt(value);\n      } else {\n        value = mom.localeData().monthsParse(value); // TODO: Another silent failure?\n\n        if (!isNumber(value)) {\n          return mom;\n        }\n      }\n    }\n\n    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n\n    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n\n    return mom;\n  }\n\n  function getSetMonth(value) {\n    if (value != null) {\n      setMonth(this, value);\n      hooks.updateOffset(this, true);\n      return this;\n    } else {\n      return get(this, 'Month');\n    }\n  }\n\n  function getDaysInMonth() {\n    return daysInMonth(this.year(), this.month());\n  }\n\n  var defaultMonthsShortRegex = matchWord;\n\n  function monthsShortRegex(isStrict) {\n    if (this._monthsParseExact) {\n      if (!hasOwnProp(this, '_monthsRegex')) {\n        computeMonthsParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._monthsShortStrictRegex;\n      } else {\n        return this._monthsShortRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_monthsShortRegex')) {\n        this._monthsShortRegex = defaultMonthsShortRegex;\n      }\n\n      return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;\n    }\n  }\n\n  var defaultMonthsRegex = matchWord;\n\n  function monthsRegex(isStrict) {\n    if (this._monthsParseExact) {\n      if (!hasOwnProp(this, '_monthsRegex')) {\n        computeMonthsParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._monthsStrictRegex;\n      } else {\n        return this._monthsRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_monthsRegex')) {\n        this._monthsRegex = defaultMonthsRegex;\n      }\n\n      return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;\n    }\n  }\n\n  function computeMonthsParse() {\n    function cmpLenRev(a, b) {\n      return b.length - a.length;\n    }\n\n    var shortPieces = [],\n        longPieces = [],\n        mixedPieces = [],\n        i,\n        mom;\n\n    for (i = 0; i < 12; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, i]);\n      shortPieces.push(this.monthsShort(mom, ''));\n      longPieces.push(this.months(mom, ''));\n      mixedPieces.push(this.months(mom, ''));\n      mixedPieces.push(this.monthsShort(mom, ''));\n    } // Sorting makes sure if one month (or abbr) is a prefix of another it\n    // will match the longer piece.\n\n\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n\n    for (i = 0; i < 12; i++) {\n      shortPieces[i] = regexEscape(shortPieces[i]);\n      longPieces[i] = regexEscape(longPieces[i]);\n    }\n\n    for (i = 0; i < 24; i++) {\n      mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n  }\n\n  function createDate(y, m, d, h, M, s, ms) {\n    // can't just apply() to create a date:\n    // https://stackoverflow.com/q/181348\n    var date; // the date constructor remaps years 0-99 to 1900-1999\n\n    if (y < 100 && y >= 0) {\n      // preserve leap years using a full 400 year cycle, then reset\n      date = new Date(y + 400, m, d, h, M, s, ms);\n\n      if (isFinite(date.getFullYear())) {\n        date.setFullYear(y);\n      }\n    } else {\n      date = new Date(y, m, d, h, M, s, ms);\n    }\n\n    return date;\n  }\n\n  function createUTCDate(y) {\n    var date; // the Date.UTC function remaps years 0-99 to 1900-1999\n\n    if (y < 100 && y >= 0) {\n      var args = Array.prototype.slice.call(arguments); // preserve leap years using a full 400 year cycle, then reset\n\n      args[0] = y + 400;\n      date = new Date(Date.UTC.apply(null, args));\n\n      if (isFinite(date.getUTCFullYear())) {\n        date.setUTCFullYear(y);\n      }\n    } else {\n      date = new Date(Date.UTC.apply(null, arguments));\n    }\n\n    return date;\n  } // start-of-first-week - start-of-year\n\n\n  function firstWeekOffset(year, dow, doy) {\n    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n    fwd = 7 + dow - doy,\n        // first-week day local weekday -- which local weekday is fwd\n    fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n    return -fwdlw + fwd - 1;\n  } // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\n\n  function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n    var localWeekday = (7 + weekday - dow) % 7,\n        weekOffset = firstWeekOffset(year, dow, doy),\n        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n        resYear,\n        resDayOfYear;\n\n    if (dayOfYear <= 0) {\n      resYear = year - 1;\n      resDayOfYear = daysInYear(resYear) + dayOfYear;\n    } else if (dayOfYear > daysInYear(year)) {\n      resYear = year + 1;\n      resDayOfYear = dayOfYear - daysInYear(year);\n    } else {\n      resYear = year;\n      resDayOfYear = dayOfYear;\n    }\n\n    return {\n      year: resYear,\n      dayOfYear: resDayOfYear\n    };\n  }\n\n  function weekOfYear(mom, dow, doy) {\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n        resWeek,\n        resYear;\n\n    if (week < 1) {\n      resYear = mom.year() - 1;\n      resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n      resWeek = week - weeksInYear(mom.year(), dow, doy);\n      resYear = mom.year() + 1;\n    } else {\n      resYear = mom.year();\n      resWeek = week;\n    }\n\n    return {\n      week: resWeek,\n      year: resYear\n    };\n  }\n\n  function weeksInYear(year, dow, doy) {\n    var weekOffset = firstWeekOffset(year, dow, doy),\n        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n  } // FORMATTING\n\n\n  addFormatToken('w', ['ww', 2], 'wo', 'week');\n  addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // ALIASES\n\n  addUnitAlias('week', 'w');\n  addUnitAlias('isoWeek', 'W'); // PRIORITIES\n\n  addUnitPriority('week', 5);\n  addUnitPriority('isoWeek', 5); // PARSING\n\n  addRegexToken('w', match1to2);\n  addRegexToken('ww', match1to2, match2);\n  addRegexToken('W', match1to2);\n  addRegexToken('WW', match1to2, match2);\n  addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n    week[token.substr(0, 1)] = toInt(input);\n  }); // HELPERS\n  // LOCALES\n\n  function localeWeek(mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n  }\n\n  var defaultLocaleWeek = {\n    dow: 0,\n    // Sunday is the first day of the week.\n    doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n  };\n\n  function localeFirstDayOfWeek() {\n    return this._week.dow;\n  }\n\n  function localeFirstDayOfYear() {\n    return this._week.doy;\n  } // MOMENTS\n\n\n  function getSetWeek(input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n  }\n\n  function getSetISOWeek(input) {\n    var week = weekOfYear(this, 1, 4).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n  } // FORMATTING\n\n\n  addFormatToken('d', 0, 'do', 'day');\n  addFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n  });\n  addFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n  });\n  addFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n  });\n  addFormatToken('e', 0, 0, 'weekday');\n  addFormatToken('E', 0, 0, 'isoWeekday'); // ALIASES\n\n  addUnitAlias('day', 'd');\n  addUnitAlias('weekday', 'e');\n  addUnitAlias('isoWeekday', 'E'); // PRIORITY\n\n  addUnitPriority('day', 11);\n  addUnitPriority('weekday', 11);\n  addUnitPriority('isoWeekday', 11); // PARSING\n\n  addRegexToken('d', match1to2);\n  addRegexToken('e', match1to2);\n  addRegexToken('E', match1to2);\n  addRegexToken('dd', function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n  });\n  addRegexToken('ddd', function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n  });\n  addRegexToken('dddd', function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n  });\n  addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n    var weekday = config._locale.weekdaysParse(input, token, config._strict); // if we didn't get a weekday name, mark the date as invalid\n\n\n    if (weekday != null) {\n      week.d = weekday;\n    } else {\n      getParsingFlags(config).invalidWeekday = input;\n    }\n  });\n  addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n  }); // HELPERS\n\n  function parseWeekday(input, locale) {\n    if (typeof input !== 'string') {\n      return input;\n    }\n\n    if (!isNaN(input)) {\n      return parseInt(input, 10);\n    }\n\n    input = locale.weekdaysParse(input);\n\n    if (typeof input === 'number') {\n      return input;\n    }\n\n    return null;\n  }\n\n  function parseIsoWeekday(input, locale) {\n    if (typeof input === 'string') {\n      return locale.weekdaysParse(input) % 7 || 7;\n    }\n\n    return isNaN(input) ? null : input;\n  } // LOCALES\n\n\n  function shiftWeekdays(ws, n) {\n    return ws.slice(n, 7).concat(ws.slice(0, n));\n  }\n\n  var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n\n  function localeWeekdays(m, format) {\n    var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\n    return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n  }\n\n  var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n\n  function localeWeekdaysShort(m) {\n    return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n  }\n\n  var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n\n  function localeWeekdaysMin(m) {\n    return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n  }\n\n  function handleStrictParse$1(weekdayName, format, strict) {\n    var i,\n        ii,\n        mom,\n        llc = weekdayName.toLocaleLowerCase();\n\n    if (!this._weekdaysParse) {\n      this._weekdaysParse = [];\n      this._shortWeekdaysParse = [];\n      this._minWeekdaysParse = [];\n\n      for (i = 0; i < 7; ++i) {\n        mom = createUTC([2000, 1]).day(i);\n        this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n        this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n        this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n      }\n    }\n\n    if (strict) {\n      if (format === 'dddd') {\n        ii = indexOf.call(this._weekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      } else if (format === 'ddd') {\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      } else {\n        ii = indexOf.call(this._minWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      }\n    } else {\n      if (format === 'dddd') {\n        ii = indexOf.call(this._weekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._minWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      } else if (format === 'ddd') {\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._weekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._minWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      } else {\n        ii = indexOf.call(this._minWeekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._weekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      }\n    }\n  }\n\n  function localeWeekdaysParse(weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n      return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n\n    if (!this._weekdaysParse) {\n      this._weekdaysParse = [];\n      this._minWeekdaysParse = [];\n      this._shortWeekdaysParse = [];\n      this._fullWeekdaysParse = [];\n    }\n\n    for (i = 0; i < 7; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, 1]).day(i);\n\n      if (strict && !this._fullWeekdaysParse[i]) {\n        this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n        this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n        this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n      }\n\n      if (!this._weekdaysParse[i]) {\n        regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n        this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n      } // test the regex\n\n\n      if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n        return i;\n      } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n        return i;\n      } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n        return i;\n      } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n        return i;\n      }\n    }\n  } // MOMENTS\n\n\n  function getSetDayOfWeek(input) {\n    if (!this.isValid()) {\n      return input != null ? this : NaN;\n    }\n\n    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n\n    if (input != null) {\n      input = parseWeekday(input, this.localeData());\n      return this.add(input - day, 'd');\n    } else {\n      return day;\n    }\n  }\n\n  function getSetLocaleDayOfWeek(input) {\n    if (!this.isValid()) {\n      return input != null ? this : NaN;\n    }\n\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n    return input == null ? weekday : this.add(input - weekday, 'd');\n  }\n\n  function getSetISODayOfWeek(input) {\n    if (!this.isValid()) {\n      return input != null ? this : NaN;\n    } // behaves the same as moment#day except\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n    // as a setter, sunday should belong to the previous week.\n\n\n    if (input != null) {\n      var weekday = parseIsoWeekday(input, this.localeData());\n      return this.day(this.day() % 7 ? weekday : weekday - 7);\n    } else {\n      return this.day() || 7;\n    }\n  }\n\n  var defaultWeekdaysRegex = matchWord;\n\n  function weekdaysRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\n        computeWeekdaysParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._weekdaysStrictRegex;\n      } else {\n        return this._weekdaysRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\n        this._weekdaysRegex = defaultWeekdaysRegex;\n      }\n\n      return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;\n    }\n  }\n\n  var defaultWeekdaysShortRegex = matchWord;\n\n  function weekdaysShortRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\n        computeWeekdaysParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._weekdaysShortStrictRegex;\n      } else {\n        return this._weekdaysShortRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n        this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n      }\n\n      return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n    }\n  }\n\n  var defaultWeekdaysMinRegex = matchWord;\n\n  function weekdaysMinRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\n        computeWeekdaysParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._weekdaysMinStrictRegex;\n      } else {\n        return this._weekdaysMinRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n        this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n      }\n\n      return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n    }\n  }\n\n  function computeWeekdaysParse() {\n    function cmpLenRev(a, b) {\n      return b.length - a.length;\n    }\n\n    var minPieces = [],\n        shortPieces = [],\n        longPieces = [],\n        mixedPieces = [],\n        i,\n        mom,\n        minp,\n        shortp,\n        longp;\n\n    for (i = 0; i < 7; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, 1]).day(i);\n      minp = this.weekdaysMin(mom, '');\n      shortp = this.weekdaysShort(mom, '');\n      longp = this.weekdays(mom, '');\n      minPieces.push(minp);\n      shortPieces.push(shortp);\n      longPieces.push(longp);\n      mixedPieces.push(minp);\n      mixedPieces.push(shortp);\n      mixedPieces.push(longp);\n    } // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n    // will match the longer piece.\n\n\n    minPieces.sort(cmpLenRev);\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n\n    for (i = 0; i < 7; i++) {\n      shortPieces[i] = regexEscape(shortPieces[i]);\n      longPieces[i] = regexEscape(longPieces[i]);\n      mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n  } // FORMATTING\n\n\n  function hFormat() {\n    return this.hours() % 12 || 12;\n  }\n\n  function kFormat() {\n    return this.hours() || 24;\n  }\n\n  addFormatToken('H', ['HH', 2], 0, 'hour');\n  addFormatToken('h', ['hh', 2], 0, hFormat);\n  addFormatToken('k', ['kk', 2], 0, kFormat);\n  addFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n  });\n  addFormatToken('hmmss', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n  });\n  addFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n  });\n  addFormatToken('Hmmss', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n  });\n\n  function meridiem(token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n      return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n    });\n  }\n\n  meridiem('a', true);\n  meridiem('A', false); // ALIASES\n\n  addUnitAlias('hour', 'h'); // PRIORITY\n\n  addUnitPriority('hour', 13); // PARSING\n\n  function matchMeridiem(isStrict, locale) {\n    return locale._meridiemParse;\n  }\n\n  addRegexToken('a', matchMeridiem);\n  addRegexToken('A', matchMeridiem);\n  addRegexToken('H', match1to2);\n  addRegexToken('h', match1to2);\n  addRegexToken('k', match1to2);\n  addRegexToken('HH', match1to2, match2);\n  addRegexToken('hh', match1to2, match2);\n  addRegexToken('kk', match1to2, match2);\n  addRegexToken('hmm', match3to4);\n  addRegexToken('hmmss', match5to6);\n  addRegexToken('Hmm', match3to4);\n  addRegexToken('Hmmss', match5to6);\n  addParseToken(['H', 'HH'], HOUR);\n  addParseToken(['k', 'kk'], function (input, array, config) {\n    var kInput = toInt(input);\n    array[HOUR] = kInput === 24 ? 0 : kInput;\n  });\n  addParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n  });\n  addParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n  });\n  addParseToken('hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n    getParsingFlags(config).bigHour = true;\n  });\n  addParseToken('hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n    getParsingFlags(config).bigHour = true;\n  });\n  addParseToken('Hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n  });\n  addParseToken('Hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n  }); // LOCALES\n\n  function localeIsPM(input) {\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n    // Using charAt should be more compatible.\n    return (input + '').toLowerCase().charAt(0) === 'p';\n  }\n\n  var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n\n  function localeMeridiem(hours, minutes, isLower) {\n    if (hours > 11) {\n      return isLower ? 'pm' : 'PM';\n    } else {\n      return isLower ? 'am' : 'AM';\n    }\n  } // MOMENTS\n  // Setting the hour should keep the time, because the user explicitly\n  // specified which hour they want. So trying to maintain the same hour (in\n  // a new timezone) makes sense. Adding/subtracting hours does not follow\n  // this rule.\n\n\n  var getSetHour = makeGetSet('Hours', true);\n  var baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n    relativeTime: defaultRelativeTime,\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n    week: defaultLocaleWeek,\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n    meridiemParse: defaultLocaleMeridiemParse\n  }; // internal storage for locale config files\n\n  var locales = {};\n  var localeFamilies = {};\n  var globalLocale;\n\n  function normalizeLocale(key) {\n    return key ? key.toLowerCase().replace('_', '-') : key;\n  } // pick the locale from the array\n  // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n  // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\n\n  function chooseLocale(names) {\n    var i = 0,\n        j,\n        next,\n        locale,\n        split;\n\n    while (i < names.length) {\n      split = normalizeLocale(names[i]).split('-');\n      j = split.length;\n      next = normalizeLocale(names[i + 1]);\n      next = next ? next.split('-') : null;\n\n      while (j > 0) {\n        locale = loadLocale(split.slice(0, j).join('-'));\n\n        if (locale) {\n          return locale;\n        }\n\n        if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n          //the next array item is better than a shallower substring of this one\n          break;\n        }\n\n        j--;\n      }\n\n      i++;\n    }\n\n    return globalLocale;\n  }\n\n  function loadLocale(name) {\n    var oldLocale = null; // TODO: Find a better way to register and load all the locales in Node\n\n    if (!locales[name] && typeof module !== 'undefined' && module && module.exports) {\n      try {\n        oldLocale = globalLocale._abbr;\n        var aliasedRequire = require;\n        aliasedRequire('./locale/' + name);\n        getSetGlobalLocale(oldLocale);\n      } catch (e) {}\n    }\n\n    return locales[name];\n  } // This function will load locale and then set the global locale.  If\n  // no arguments are passed in, it will simply return the current global\n  // locale key.\n\n\n  function getSetGlobalLocale(key, values) {\n    var data;\n\n    if (key) {\n      if (isUndefined(values)) {\n        data = getLocale(key);\n      } else {\n        data = defineLocale(key, values);\n      }\n\n      if (data) {\n        // moment.duration._locale = moment._locale = data;\n        globalLocale = data;\n      } else {\n        if (typeof console !== 'undefined' && console.warn) {\n          //warn user if arguments are passed but the locale could not be set\n          console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n        }\n      }\n    }\n\n    return globalLocale._abbr;\n  }\n\n  function defineLocale(name, config) {\n    if (config !== null) {\n      var locale,\n          parentConfig = baseConfig;\n      config.abbr = name;\n\n      if (locales[name] != null) {\n        deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n        parentConfig = locales[name]._config;\n      } else if (config.parentLocale != null) {\n        if (locales[config.parentLocale] != null) {\n          parentConfig = locales[config.parentLocale]._config;\n        } else {\n          locale = loadLocale(config.parentLocale);\n\n          if (locale != null) {\n            parentConfig = locale._config;\n          } else {\n            if (!localeFamilies[config.parentLocale]) {\n              localeFamilies[config.parentLocale] = [];\n            }\n\n            localeFamilies[config.parentLocale].push({\n              name: name,\n              config: config\n            });\n            return null;\n          }\n        }\n      }\n\n      locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n      if (localeFamilies[name]) {\n        localeFamilies[name].forEach(function (x) {\n          defineLocale(x.name, x.config);\n        });\n      } // backwards compat for now: also set the locale\n      // make sure we set the locale AFTER all child locales have been\n      // created, so we won't end up with the child locale set.\n\n\n      getSetGlobalLocale(name);\n      return locales[name];\n    } else {\n      // useful for testing\n      delete locales[name];\n      return null;\n    }\n  }\n\n  function updateLocale(name, config) {\n    if (config != null) {\n      var locale,\n          tmpLocale,\n          parentConfig = baseConfig; // MERGE\n\n      tmpLocale = loadLocale(name);\n\n      if (tmpLocale != null) {\n        parentConfig = tmpLocale._config;\n      }\n\n      config = mergeConfigs(parentConfig, config);\n      locale = new Locale(config);\n      locale.parentLocale = locales[name];\n      locales[name] = locale; // backwards compat for now: also set the locale\n\n      getSetGlobalLocale(name);\n    } else {\n      // pass null for config to unupdate, useful for tests\n      if (locales[name] != null) {\n        if (locales[name].parentLocale != null) {\n          locales[name] = locales[name].parentLocale;\n        } else if (locales[name] != null) {\n          delete locales[name];\n        }\n      }\n    }\n\n    return locales[name];\n  } // returns locale data\n\n\n  function getLocale(key) {\n    var locale;\n\n    if (key && key._locale && key._locale._abbr) {\n      key = key._locale._abbr;\n    }\n\n    if (!key) {\n      return globalLocale;\n    }\n\n    if (!isArray(key)) {\n      //short-circuit everything else\n      locale = loadLocale(key);\n\n      if (locale) {\n        return locale;\n      }\n\n      key = [key];\n    }\n\n    return chooseLocale(key);\n  }\n\n  function listLocales() {\n    return keys(locales);\n  }\n\n  function checkOverflow(m) {\n    var overflow;\n    var a = m._a;\n\n    if (a && getParsingFlags(m).overflow === -2) {\n      overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n\n      if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n        overflow = DATE;\n      }\n\n      if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n        overflow = WEEK;\n      }\n\n      if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n        overflow = WEEKDAY;\n      }\n\n      getParsingFlags(m).overflow = overflow;\n    }\n\n    return m;\n  } // Pick the first defined of two or three arguments.\n\n\n  function defaults(a, b, c) {\n    if (a != null) {\n      return a;\n    }\n\n    if (b != null) {\n      return b;\n    }\n\n    return c;\n  }\n\n  function currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n\n    if (config._useUTC) {\n      return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n    }\n\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n  } // convert an array to a date.\n  // the array should mirror the parameters below\n  // note: all values past the year are optional and will default to the lowest possible value.\n  // [year, month, day , hour, minute, second, millisecond]\n\n\n  function configFromArray(config) {\n    var i,\n        date,\n        input = [],\n        currentDate,\n        expectedWeekday,\n        yearToUse;\n\n    if (config._d) {\n      return;\n    }\n\n    currentDate = currentDateArray(config); //compute day of the year from weeks and weekdays\n\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n      dayOfYearFromWeekInfo(config);\n    } //if the day of the year is set, figure out what it is\n\n\n    if (config._dayOfYear != null) {\n      yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n      if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n        getParsingFlags(config)._overflowDayOfYear = true;\n      }\n\n      date = createUTCDate(yearToUse, 0, config._dayOfYear);\n      config._a[MONTH] = date.getUTCMonth();\n      config._a[DATE] = date.getUTCDate();\n    } // Default to current date.\n    // * if no year, month, day of month are given, default to today\n    // * if day of month is given, default month and year\n    // * if month is given, default only year\n    // * if year is given, don't default anything\n\n\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n      config._a[i] = input[i] = currentDate[i];\n    } // Zero out whatever was not defaulted, including time\n\n\n    for (; i < 7; i++) {\n      config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n    } // Check for 24:00:00.000\n\n\n    if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n      config._nextDay = true;\n      config._a[HOUR] = 0;\n    }\n\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n    expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); // Apply timezone offset from input. The actual utcOffset can be changed\n    // with parseZone.\n\n    if (config._tzm != null) {\n      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n    }\n\n    if (config._nextDay) {\n      config._a[HOUR] = 24;\n    } // check for mismatching day of week\n\n\n    if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n      getParsingFlags(config).weekdayMismatch = true;\n    }\n  }\n\n  function dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n    w = config._w;\n\n    if (w.GG != null || w.W != null || w.E != null) {\n      dow = 1;\n      doy = 4; // TODO: We need to take the current isoWeekYear, but that depends on\n      // how we interpret now (local, utc, fixed offset). So create\n      // a now version of current config (take local/utc/offset flags, and\n      // create now).\n\n      weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n      week = defaults(w.W, 1);\n      weekday = defaults(w.E, 1);\n\n      if (weekday < 1 || weekday > 7) {\n        weekdayOverflow = true;\n      }\n    } else {\n      dow = config._locale._week.dow;\n      doy = config._locale._week.doy;\n      var curWeek = weekOfYear(createLocal(), dow, doy);\n      weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); // Default to current week.\n\n      week = defaults(w.w, curWeek.week);\n\n      if (w.d != null) {\n        // weekday -- low day numbers are considered next week\n        weekday = w.d;\n\n        if (weekday < 0 || weekday > 6) {\n          weekdayOverflow = true;\n        }\n      } else if (w.e != null) {\n        // local weekday -- counting starts from beginning of week\n        weekday = w.e + dow;\n\n        if (w.e < 0 || w.e > 6) {\n          weekdayOverflow = true;\n        }\n      } else {\n        // default to beginning of week\n        weekday = dow;\n      }\n    }\n\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n      getParsingFlags(config)._overflowWeeks = true;\n    } else if (weekdayOverflow != null) {\n      getParsingFlags(config)._overflowWeekday = true;\n    } else {\n      temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n      config._a[YEAR] = temp.year;\n      config._dayOfYear = temp.dayOfYear;\n    }\n  } // iso 8601 regex\n  // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\n\n  var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n  var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n  var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n  var isoDates = [['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/], ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/], ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/], ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false], ['YYYY-DDD', /\\d{4}-\\d{3}/], ['YYYY-MM', /\\d{4}-\\d\\d/, false], ['YYYYYYMMDD', /[+-]\\d{10}/], ['YYYYMMDD', /\\d{8}/], // YYYYMM is NOT allowed by the standard\n  ['GGGG[W]WWE', /\\d{4}W\\d{3}/], ['GGGG[W]WW', /\\d{4}W\\d{2}/, false], ['YYYYDDD', /\\d{7}/]]; // iso time formats and regexes\n\n  var isoTimes = [['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/], ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/], ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/], ['HH:mm', /\\d\\d:\\d\\d/], ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/], ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/], ['HHmmss', /\\d\\d\\d\\d\\d\\d/], ['HHmm', /\\d\\d\\d\\d/], ['HH', /\\d\\d/]];\n  var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i; // date from iso format\n\n  function configFromISO(config) {\n    var i,\n        l,\n        string = config._i,\n        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n        allowTime,\n        dateFormat,\n        timeFormat,\n        tzFormat;\n\n    if (match) {\n      getParsingFlags(config).iso = true;\n\n      for (i = 0, l = isoDates.length; i < l; i++) {\n        if (isoDates[i][1].exec(match[1])) {\n          dateFormat = isoDates[i][0];\n          allowTime = isoDates[i][2] !== false;\n          break;\n        }\n      }\n\n      if (dateFormat == null) {\n        config._isValid = false;\n        return;\n      }\n\n      if (match[3]) {\n        for (i = 0, l = isoTimes.length; i < l; i++) {\n          if (isoTimes[i][1].exec(match[3])) {\n            // match[2] should be 'T' or space\n            timeFormat = (match[2] || ' ') + isoTimes[i][0];\n            break;\n          }\n        }\n\n        if (timeFormat == null) {\n          config._isValid = false;\n          return;\n        }\n      }\n\n      if (!allowTime && timeFormat != null) {\n        config._isValid = false;\n        return;\n      }\n\n      if (match[4]) {\n        if (tzRegex.exec(match[4])) {\n          tzFormat = 'Z';\n        } else {\n          config._isValid = false;\n          return;\n        }\n      }\n\n      config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n      configFromStringAndFormat(config);\n    } else {\n      config._isValid = false;\n    }\n  } // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n\n\n  var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n  function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n    var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\n\n    if (secondStr) {\n      result.push(parseInt(secondStr, 10));\n    }\n\n    return result;\n  }\n\n  function untruncateYear(yearStr) {\n    var year = parseInt(yearStr, 10);\n\n    if (year <= 49) {\n      return 2000 + year;\n    } else if (year <= 999) {\n      return 1900 + year;\n    }\n\n    return year;\n  }\n\n  function preprocessRFC2822(s) {\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\n    return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n  }\n\n  function checkWeekday(weekdayStr, parsedInput, config) {\n    if (weekdayStr) {\n      // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n      var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n          weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n\n      if (weekdayProvided !== weekdayActual) {\n        getParsingFlags(config).weekdayMismatch = true;\n        config._isValid = false;\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  var obsOffsets = {\n    UT: 0,\n    GMT: 0,\n    EDT: -4 * 60,\n    EST: -5 * 60,\n    CDT: -5 * 60,\n    CST: -6 * 60,\n    MDT: -6 * 60,\n    MST: -7 * 60,\n    PDT: -7 * 60,\n    PST: -8 * 60\n  };\n\n  function calculateOffset(obsOffset, militaryOffset, numOffset) {\n    if (obsOffset) {\n      return obsOffsets[obsOffset];\n    } else if (militaryOffset) {\n      // the only allowed military tz is Z\n      return 0;\n    } else {\n      var hm = parseInt(numOffset, 10);\n      var m = hm % 100,\n          h = (hm - m) / 100;\n      return h * 60 + m;\n    }\n  } // date and time from ref 2822 format\n\n\n  function configFromRFC2822(config) {\n    var match = rfc2822.exec(preprocessRFC2822(config._i));\n\n    if (match) {\n      var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n\n      if (!checkWeekday(match[1], parsedArray, config)) {\n        return;\n      }\n\n      config._a = parsedArray;\n      config._tzm = calculateOffset(match[8], match[9], match[10]);\n      config._d = createUTCDate.apply(null, config._a);\n\n      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n      getParsingFlags(config).rfc2822 = true;\n    } else {\n      config._isValid = false;\n    }\n  } // date from iso format or fallback\n\n\n  function configFromString(config) {\n    var matched = aspNetJsonRegex.exec(config._i);\n\n    if (matched !== null) {\n      config._d = new Date(+matched[1]);\n      return;\n    }\n\n    configFromISO(config);\n\n    if (config._isValid === false) {\n      delete config._isValid;\n    } else {\n      return;\n    }\n\n    configFromRFC2822(config);\n\n    if (config._isValid === false) {\n      delete config._isValid;\n    } else {\n      return;\n    } // Final attempt, use Input Fallback\n\n\n    hooks.createFromInputFallback(config);\n  }\n\n  hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged and will be removed in an upcoming major release. Please refer to ' + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\n    config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n  }); // constant that refers to the ISO standard\n\n  hooks.ISO_8601 = function () {}; // constant that refers to the RFC 2822 form\n\n\n  hooks.RFC_2822 = function () {}; // date from string and format string\n\n\n  function configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n      configFromISO(config);\n      return;\n    }\n\n    if (config._f === hooks.RFC_2822) {\n      configFromRFC2822(config);\n      return;\n    }\n\n    config._a = [];\n    getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\n    var string = '' + config._i,\n        i,\n        parsedInput,\n        tokens,\n        token,\n        skipped,\n        stringLength = string.length,\n        totalParsedInputLength = 0;\n    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n    for (i = 0; i < tokens.length; i++) {\n      token = tokens[i];\n      parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; // console.log('token', token, 'parsedInput', parsedInput,\n      //         'regex', getParseRegexForToken(token, config));\n\n      if (parsedInput) {\n        skipped = string.substr(0, string.indexOf(parsedInput));\n\n        if (skipped.length > 0) {\n          getParsingFlags(config).unusedInput.push(skipped);\n        }\n\n        string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n        totalParsedInputLength += parsedInput.length;\n      } // don't parse if it's not a known token\n\n\n      if (formatTokenFunctions[token]) {\n        if (parsedInput) {\n          getParsingFlags(config).empty = false;\n        } else {\n          getParsingFlags(config).unusedTokens.push(token);\n        }\n\n        addTimeToArrayFromToken(token, parsedInput, config);\n      } else if (config._strict && !parsedInput) {\n        getParsingFlags(config).unusedTokens.push(token);\n      }\n    } // add remaining unparsed input length to the string\n\n\n    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n\n    if (string.length > 0) {\n      getParsingFlags(config).unusedInput.push(string);\n    } // clear _12h flag if hour is <= 12\n\n\n    if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n      getParsingFlags(config).bigHour = undefined;\n    }\n\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem; // handle meridiem\n\n    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n    configFromArray(config);\n    checkOverflow(config);\n  }\n\n  function meridiemFixWrap(locale, hour, meridiem) {\n    var isPm;\n\n    if (meridiem == null) {\n      // nothing to do\n      return hour;\n    }\n\n    if (locale.meridiemHour != null) {\n      return locale.meridiemHour(hour, meridiem);\n    } else if (locale.isPM != null) {\n      // Fallback\n      isPm = locale.isPM(meridiem);\n\n      if (isPm && hour < 12) {\n        hour += 12;\n      }\n\n      if (!isPm && hour === 12) {\n        hour = 0;\n      }\n\n      return hour;\n    } else {\n      // this is not supposed to happen\n      return hour;\n    }\n  } // date from string and array of format strings\n\n\n  function configFromStringAndArray(config) {\n    var tempConfig, bestMoment, scoreToBeat, i, currentScore;\n\n    if (config._f.length === 0) {\n      getParsingFlags(config).invalidFormat = true;\n      config._d = new Date(NaN);\n      return;\n    }\n\n    for (i = 0; i < config._f.length; i++) {\n      currentScore = 0;\n      tempConfig = copyConfig({}, config);\n\n      if (config._useUTC != null) {\n        tempConfig._useUTC = config._useUTC;\n      }\n\n      tempConfig._f = config._f[i];\n      configFromStringAndFormat(tempConfig);\n\n      if (!isValid(tempConfig)) {\n        continue;\n      } // if there is any input that was not parsed add a penalty for that format\n\n\n      currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens\n\n      currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n      getParsingFlags(tempConfig).score = currentScore;\n\n      if (scoreToBeat == null || currentScore < scoreToBeat) {\n        scoreToBeat = currentScore;\n        bestMoment = tempConfig;\n      }\n    }\n\n    extend(config, bestMoment || tempConfig);\n  }\n\n  function configFromObject(config) {\n    if (config._d) {\n      return;\n    }\n\n    var i = normalizeObjectUnits(config._i);\n    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n      return obj && parseInt(obj, 10);\n    });\n    configFromArray(config);\n  }\n\n  function createFromConfig(config) {\n    var res = new Moment(checkOverflow(prepareConfig(config)));\n\n    if (res._nextDay) {\n      // Adding is smart enough around DST\n      res.add(1, 'd');\n      res._nextDay = undefined;\n    }\n\n    return res;\n  }\n\n  function prepareConfig(config) {\n    var input = config._i,\n        format = config._f;\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || format === undefined && input === '') {\n      return createInvalid({\n        nullInput: true\n      });\n    }\n\n    if (typeof input === 'string') {\n      config._i = input = config._locale.preparse(input);\n    }\n\n    if (isMoment(input)) {\n      return new Moment(checkOverflow(input));\n    } else if (isDate(input)) {\n      config._d = input;\n    } else if (isArray(format)) {\n      configFromStringAndArray(config);\n    } else if (format) {\n      configFromStringAndFormat(config);\n    } else {\n      configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n      config._d = null;\n    }\n\n    return config;\n  }\n\n  function configFromInput(config) {\n    var input = config._i;\n\n    if (isUndefined(input)) {\n      config._d = new Date(hooks.now());\n    } else if (isDate(input)) {\n      config._d = new Date(input.valueOf());\n    } else if (typeof input === 'string') {\n      configFromString(config);\n    } else if (isArray(input)) {\n      config._a = map(input.slice(0), function (obj) {\n        return parseInt(obj, 10);\n      });\n      configFromArray(config);\n    } else if (isObject(input)) {\n      configFromObject(config);\n    } else if (isNumber(input)) {\n      // from milliseconds\n      config._d = new Date(input);\n    } else {\n      hooks.createFromInputFallback(config);\n    }\n  }\n\n  function createLocalOrUTC(input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (locale === true || locale === false) {\n      strict = locale;\n      locale = undefined;\n    }\n\n    if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\n      input = undefined;\n    } // object construction must be done this way.\n    // https://github.com/moment/moment/issues/1423\n\n\n    c._isAMomentObject = true;\n    c._useUTC = c._isUTC = isUTC;\n    c._l = locale;\n    c._i = input;\n    c._f = format;\n    c._strict = strict;\n    return createFromConfig(c);\n  }\n\n  function createLocal(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n  }\n\n  var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n    var other = createLocal.apply(null, arguments);\n\n    if (this.isValid() && other.isValid()) {\n      return other < this ? this : other;\n    } else {\n      return createInvalid();\n    }\n  });\n  var prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n    var other = createLocal.apply(null, arguments);\n\n    if (this.isValid() && other.isValid()) {\n      return other > this ? this : other;\n    } else {\n      return createInvalid();\n    }\n  }); // Pick a moment m from moments so that m[fn](other) is true for all\n  // other. This relies on the function fn to be transitive.\n  //\n  // moments should either be an array of moment objects or an array, whose\n  // first element is an array of moment objects.\n\n  function pickBy(fn, moments) {\n    var res, i;\n\n    if (moments.length === 1 && isArray(moments[0])) {\n      moments = moments[0];\n    }\n\n    if (!moments.length) {\n      return createLocal();\n    }\n\n    res = moments[0];\n\n    for (i = 1; i < moments.length; ++i) {\n      if (!moments[i].isValid() || moments[i][fn](res)) {\n        res = moments[i];\n      }\n    }\n\n    return res;\n  } // TODO: Use [].sort instead?\n\n\n  function min() {\n    var args = [].slice.call(arguments, 0);\n    return pickBy('isBefore', args);\n  }\n\n  function max() {\n    var args = [].slice.call(arguments, 0);\n    return pickBy('isAfter', args);\n  }\n\n  var now = function now() {\n    return Date.now ? Date.now() : +new Date();\n  };\n\n  var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n  function isDurationValid(m) {\n    for (var key in m) {\n      if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n        return false;\n      }\n    }\n\n    var unitHasDecimal = false;\n\n    for (var i = 0; i < ordering.length; ++i) {\n      if (m[ordering[i]]) {\n        if (unitHasDecimal) {\n          return false; // only allow non-integers for smallest unit\n        }\n\n        if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n          unitHasDecimal = true;\n        }\n      }\n    }\n\n    return true;\n  }\n\n  function isValid$1() {\n    return this._isValid;\n  }\n\n  function createInvalid$1() {\n    return createDuration(NaN);\n  }\n\n  function Duration(duration) {\n    var normalizedInput = normalizeObjectUnits(duration),\n        years = normalizedInput.year || 0,\n        quarters = normalizedInput.quarter || 0,\n        months = normalizedInput.month || 0,\n        weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n        days = normalizedInput.day || 0,\n        hours = normalizedInput.hour || 0,\n        minutes = normalizedInput.minute || 0,\n        seconds = normalizedInput.second || 0,\n        milliseconds = normalizedInput.millisecond || 0;\n    this._isValid = isDurationValid(normalizedInput); // representation for dateAddRemove\n\n    this._milliseconds = +milliseconds + seconds * 1e3 + // 1000\n    minutes * 6e4 + // 1000 * 60\n    hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n    // Because of dateAddRemove treats 24 hours as different from a\n    // day when working around DST, we need to store them separately\n\n    this._days = +days + weeks * 7; // It is impossible to translate months into days without knowing\n    // which months you are are talking about, so we have to store\n    // it separately.\n\n    this._months = +months + quarters * 3 + years * 12;\n    this._data = {};\n    this._locale = getLocale();\n\n    this._bubble();\n  }\n\n  function isDuration(obj) {\n    return obj instanceof Duration;\n  }\n\n  function absRound(number) {\n    if (number < 0) {\n      return Math.round(-1 * number) * -1;\n    } else {\n      return Math.round(number);\n    }\n  } // FORMATTING\n\n\n  function offset(token, separator) {\n    addFormatToken(token, 0, 0, function () {\n      var offset = this.utcOffset();\n      var sign = '+';\n\n      if (offset < 0) {\n        offset = -offset;\n        sign = '-';\n      }\n\n      return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\n    });\n  }\n\n  offset('Z', ':');\n  offset('ZZ', ''); // PARSING\n\n  addRegexToken('Z', matchShortOffset);\n  addRegexToken('ZZ', matchShortOffset);\n  addParseToken(['Z', 'ZZ'], function (input, array, config) {\n    config._useUTC = true;\n    config._tzm = offsetFromString(matchShortOffset, input);\n  }); // HELPERS\n  // timezone chunker\n  // '+10:00' > ['10',  '00']\n  // '-1530'  > ['-15', '30']\n\n  var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n  function offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher);\n\n    if (matches === null) {\n      return null;\n    }\n\n    var chunk = matches[matches.length - 1] || [];\n    var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    var minutes = +(parts[1] * 60) + toInt(parts[2]);\n    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n  } // Return a moment from input, that is local/utc/zone equivalent to model.\n\n\n  function cloneWithOffset(input, model) {\n    var res, diff;\n\n    if (model._isUTC) {\n      res = model.clone();\n      diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); // Use low-level api, because this fn is low-level api.\n\n      res._d.setTime(res._d.valueOf() + diff);\n\n      hooks.updateOffset(res, false);\n      return res;\n    } else {\n      return createLocal(input).local();\n    }\n  }\n\n  function getDateOffset(m) {\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n  } // HOOKS\n  // This function will be called whenever a moment is mutated.\n  // It is intended to keep the offset in sync with the timezone.\n\n\n  hooks.updateOffset = function () {}; // MOMENTS\n  // keepLocalTime = true means only change the timezone, without\n  // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n  // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n  // +0200, so we adjust the time as needed, to be valid.\n  //\n  // Keeping the time actually adds/subtracts (one hour)\n  // from the actual represented time. That is why we call updateOffset\n  // a second time. In case it wants us to change the offset again\n  // _changeInProgress == true case, then we have to adjust, because\n  // there is no such time in the given timezone.\n\n\n  function getSetOffset(input, keepLocalTime, keepMinutes) {\n    var offset = this._offset || 0,\n        localAdjust;\n\n    if (!this.isValid()) {\n      return input != null ? this : NaN;\n    }\n\n    if (input != null) {\n      if (typeof input === 'string') {\n        input = offsetFromString(matchShortOffset, input);\n\n        if (input === null) {\n          return this;\n        }\n      } else if (Math.abs(input) < 16 && !keepMinutes) {\n        input = input * 60;\n      }\n\n      if (!this._isUTC && keepLocalTime) {\n        localAdjust = getDateOffset(this);\n      }\n\n      this._offset = input;\n      this._isUTC = true;\n\n      if (localAdjust != null) {\n        this.add(localAdjust, 'm');\n      }\n\n      if (offset !== input) {\n        if (!keepLocalTime || this._changeInProgress) {\n          addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n        } else if (!this._changeInProgress) {\n          this._changeInProgress = true;\n          hooks.updateOffset(this, true);\n          this._changeInProgress = null;\n        }\n      }\n\n      return this;\n    } else {\n      return this._isUTC ? offset : getDateOffset(this);\n    }\n  }\n\n  function getSetZone(input, keepLocalTime) {\n    if (input != null) {\n      if (typeof input !== 'string') {\n        input = -input;\n      }\n\n      this.utcOffset(input, keepLocalTime);\n      return this;\n    } else {\n      return -this.utcOffset();\n    }\n  }\n\n  function setOffsetToUTC(keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n  }\n\n  function setOffsetToLocal(keepLocalTime) {\n    if (this._isUTC) {\n      this.utcOffset(0, keepLocalTime);\n      this._isUTC = false;\n\n      if (keepLocalTime) {\n        this.subtract(getDateOffset(this), 'm');\n      }\n    }\n\n    return this;\n  }\n\n  function setOffsetToParsedOffset() {\n    if (this._tzm != null) {\n      this.utcOffset(this._tzm, false, true);\n    } else if (typeof this._i === 'string') {\n      var tZone = offsetFromString(matchOffset, this._i);\n\n      if (tZone != null) {\n        this.utcOffset(tZone);\n      } else {\n        this.utcOffset(0, true);\n      }\n    }\n\n    return this;\n  }\n\n  function hasAlignedHourOffset(input) {\n    if (!this.isValid()) {\n      return false;\n    }\n\n    input = input ? createLocal(input).utcOffset() : 0;\n    return (this.utcOffset() - input) % 60 === 0;\n  }\n\n  function isDaylightSavingTime() {\n    return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n  }\n\n  function isDaylightSavingTimeShifted() {\n    if (!isUndefined(this._isDSTShifted)) {\n      return this._isDSTShifted;\n    }\n\n    var c = {};\n    copyConfig(c, this);\n    c = prepareConfig(c);\n\n    if (c._a) {\n      var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n      this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n    } else {\n      this._isDSTShifted = false;\n    }\n\n    return this._isDSTShifted;\n  }\n\n  function isLocal() {\n    return this.isValid() ? !this._isUTC : false;\n  }\n\n  function isUtcOffset() {\n    return this.isValid() ? this._isUTC : false;\n  }\n\n  function isUtc() {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n  } // ASP.NET json date format regex\n\n\n  var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/; // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n  // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n  // and further modified to allow for strings containing both week and day\n\n  var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n  function createDuration(input, key) {\n    var duration = input,\n        // matching against regexp is expensive, do it on demand\n    match = null,\n        sign,\n        ret,\n        diffRes;\n\n    if (isDuration(input)) {\n      duration = {\n        ms: input._milliseconds,\n        d: input._days,\n        M: input._months\n      };\n    } else if (isNumber(input)) {\n      duration = {};\n\n      if (key) {\n        duration[key] = input;\n      } else {\n        duration.milliseconds = input;\n      }\n    } else if (!!(match = aspNetRegex.exec(input))) {\n      sign = match[1] === '-' ? -1 : 1;\n      duration = {\n        y: 0,\n        d: toInt(match[DATE]) * sign,\n        h: toInt(match[HOUR]) * sign,\n        m: toInt(match[MINUTE]) * sign,\n        s: toInt(match[SECOND]) * sign,\n        ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n\n      };\n    } else if (!!(match = isoRegex.exec(input))) {\n      sign = match[1] === '-' ? -1 : 1;\n      duration = {\n        y: parseIso(match[2], sign),\n        M: parseIso(match[3], sign),\n        w: parseIso(match[4], sign),\n        d: parseIso(match[5], sign),\n        h: parseIso(match[6], sign),\n        m: parseIso(match[7], sign),\n        s: parseIso(match[8], sign)\n      };\n    } else if (duration == null) {\n      // checks for null or undefined\n      duration = {};\n    } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n      diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n      duration = {};\n      duration.ms = diffRes.milliseconds;\n      duration.M = diffRes.months;\n    }\n\n    ret = new Duration(duration);\n\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n      ret._locale = input._locale;\n    }\n\n    return ret;\n  }\n\n  createDuration.fn = Duration.prototype;\n  createDuration.invalid = createInvalid$1;\n\n  function parseIso(inp, sign) {\n    // We'd normally use ~~inp for this, but unfortunately it also\n    // converts floats to ints.\n    // inp may be undefined, so careful calling replace on it.\n    var res = inp && parseFloat(inp.replace(',', '.')); // apply sign while we're at it\n\n    return (isNaN(res) ? 0 : res) * sign;\n  }\n\n  function positiveMomentsDifference(base, other) {\n    var res = {};\n    res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n      --res.months;\n    }\n\n    res.milliseconds = +other - +base.clone().add(res.months, 'M');\n    return res;\n  }\n\n  function momentsDifference(base, other) {\n    var res;\n\n    if (!(base.isValid() && other.isValid())) {\n      return {\n        milliseconds: 0,\n        months: 0\n      };\n    }\n\n    other = cloneWithOffset(other, base);\n\n    if (base.isBefore(other)) {\n      res = positiveMomentsDifference(base, other);\n    } else {\n      res = positiveMomentsDifference(other, base);\n      res.milliseconds = -res.milliseconds;\n      res.months = -res.months;\n    }\n\n    return res;\n  } // TODO: remove 'name' arg after deprecation is removed\n\n\n  function createAdder(direction, name) {\n    return function (val, period) {\n      var dur, tmp; //invert the arguments, but complain about it\n\n      if (period !== null && !isNaN(+period)) {\n        deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n        tmp = val;\n        val = period;\n        period = tmp;\n      }\n\n      val = typeof val === 'string' ? +val : val;\n      dur = createDuration(val, period);\n      addSubtract(this, dur, direction);\n      return this;\n    };\n  }\n\n  function addSubtract(mom, duration, isAdding, updateOffset) {\n    var milliseconds = duration._milliseconds,\n        days = absRound(duration._days),\n        months = absRound(duration._months);\n\n    if (!mom.isValid()) {\n      // No op\n      return;\n    }\n\n    updateOffset = updateOffset == null ? true : updateOffset;\n\n    if (months) {\n      setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n\n    if (days) {\n      set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n\n    if (milliseconds) {\n      mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n\n    if (updateOffset) {\n      hooks.updateOffset(mom, days || months);\n    }\n  }\n\n  var add = createAdder(1, 'add');\n  var subtract = createAdder(-1, 'subtract');\n\n  function getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\n  }\n\n  function calendar$1(time, formats) {\n    // We want to compare the start of today, vs this.\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\n    var now = time || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = hooks.calendarFormat(this, sod) || 'sameElse';\n    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n  }\n\n  function clone() {\n    return new Moment(this);\n  }\n\n  function isAfter(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n\n    if (!(this.isValid() && localInput.isValid())) {\n      return false;\n    }\n\n    units = normalizeUnits(units) || 'millisecond';\n\n    if (units === 'millisecond') {\n      return this.valueOf() > localInput.valueOf();\n    } else {\n      return localInput.valueOf() < this.clone().startOf(units).valueOf();\n    }\n  }\n\n  function isBefore(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n\n    if (!(this.isValid() && localInput.isValid())) {\n      return false;\n    }\n\n    units = normalizeUnits(units) || 'millisecond';\n\n    if (units === 'millisecond') {\n      return this.valueOf() < localInput.valueOf();\n    } else {\n      return this.clone().endOf(units).valueOf() < localInput.valueOf();\n    }\n  }\n\n  function isBetween(from, to, units, inclusivity) {\n    var localFrom = isMoment(from) ? from : createLocal(from),\n        localTo = isMoment(to) ? to : createLocal(to);\n\n    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n      return false;\n    }\n\n    inclusivity = inclusivity || '()';\n    return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n  }\n\n  function isSame(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input),\n        inputMs;\n\n    if (!(this.isValid() && localInput.isValid())) {\n      return false;\n    }\n\n    units = normalizeUnits(units) || 'millisecond';\n\n    if (units === 'millisecond') {\n      return this.valueOf() === localInput.valueOf();\n    } else {\n      inputMs = localInput.valueOf();\n      return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n    }\n  }\n\n  function isSameOrAfter(input, units) {\n    return this.isSame(input, units) || this.isAfter(input, units);\n  }\n\n  function isSameOrBefore(input, units) {\n    return this.isSame(input, units) || this.isBefore(input, units);\n  }\n\n  function diff(input, units, asFloat) {\n    var that, zoneDelta, output;\n\n    if (!this.isValid()) {\n      return NaN;\n    }\n\n    that = cloneWithOffset(input, this);\n\n    if (!that.isValid()) {\n      return NaN;\n    }\n\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n    units = normalizeUnits(units);\n\n    switch (units) {\n      case 'year':\n        output = monthDiff(this, that) / 12;\n        break;\n\n      case 'month':\n        output = monthDiff(this, that);\n        break;\n\n      case 'quarter':\n        output = monthDiff(this, that) / 3;\n        break;\n\n      case 'second':\n        output = (this - that) / 1e3;\n        break;\n      // 1000\n\n      case 'minute':\n        output = (this - that) / 6e4;\n        break;\n      // 1000 * 60\n\n      case 'hour':\n        output = (this - that) / 36e5;\n        break;\n      // 1000 * 60 * 60\n\n      case 'day':\n        output = (this - that - zoneDelta) / 864e5;\n        break;\n      // 1000 * 60 * 60 * 24, negate dst\n\n      case 'week':\n        output = (this - that - zoneDelta) / 6048e5;\n        break;\n      // 1000 * 60 * 60 * 24 * 7, negate dst\n\n      default:\n        output = this - that;\n    }\n\n    return asFloat ? output : absFloor(output);\n  }\n\n  function monthDiff(a, b) {\n    // difference in months\n    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n        // b is in (anchor - 1 month, anchor + 1 month)\n    anchor = a.clone().add(wholeMonthDiff, 'months'),\n        anchor2,\n        adjust;\n\n    if (b - anchor < 0) {\n      anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); // linear across the month\n\n      adjust = (b - anchor) / (anchor - anchor2);\n    } else {\n      anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); // linear across the month\n\n      adjust = (b - anchor) / (anchor2 - anchor);\n    } //check for negative zero, return zero if negative zero\n\n\n    return -(wholeMonthDiff + adjust) || 0;\n  }\n\n  hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n  hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n  function toString() {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n  }\n\n  function toISOString(keepOffset) {\n    if (!this.isValid()) {\n      return null;\n    }\n\n    var utc = keepOffset !== true;\n    var m = utc ? this.clone().utc() : this;\n\n    if (m.year() < 0 || m.year() > 9999) {\n      return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    if (isFunction(Date.prototype.toISOString)) {\n      // native implementation is ~50x faster, use it when we can\n      if (utc) {\n        return this.toDate().toISOString();\n      } else {\n        return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n      }\n    }\n\n    return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n  }\n  /**\n   * Return a human readable representation of a moment that can\n   * also be evaluated to get a new moment which is the same\n   *\n   * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n   */\n\n\n  function inspect() {\n    if (!this.isValid()) {\n      return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n\n    var func = 'moment';\n    var zone = '';\n\n    if (!this.isLocal()) {\n      func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n      zone = 'Z';\n    }\n\n    var prefix = '[' + func + '(\""]';\n    var year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n    var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    var suffix = zone + '[\"")]';\n    return this.format(prefix + year + datetime + suffix);\n  }\n\n  function format(inputString) {\n    if (!inputString) {\n      inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n    }\n\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n  }\n\n  function from(time, withoutSuffix) {\n    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n      return createDuration({\n        to: this,\n        from: time\n      }).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n      return this.localeData().invalidDate();\n    }\n  }\n\n  function fromNow(withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n  }\n\n  function to(time, withoutSuffix) {\n    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n      return createDuration({\n        from: this,\n        to: time\n      }).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n      return this.localeData().invalidDate();\n    }\n  }\n\n  function toNow(withoutSuffix) {\n    return this.to(createLocal(), withoutSuffix);\n  } // If passed a locale key, it will set the locale for this\n  // instance.  Otherwise, it will return the locale configuration\n  // variables for this instance.\n\n\n  function locale(key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n      return this._locale._abbr;\n    } else {\n      newLocaleData = getLocale(key);\n\n      if (newLocaleData != null) {\n        this._locale = newLocaleData;\n      }\n\n      return this;\n    }\n  }\n\n  var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\n    if (key === undefined) {\n      return this.localeData();\n    } else {\n      return this.locale(key);\n    }\n  });\n\n  function localeData() {\n    return this._locale;\n  }\n\n  var MS_PER_SECOND = 1000;\n  var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n  var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n  var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; // actual modulo - handles negative numbers (for dates before 1970):\n\n  function mod$1(dividend, divisor) {\n    return (dividend % divisor + divisor) % divisor;\n  }\n\n  function localStartOfDate(y, m, d) {\n    // the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n      // preserve leap years using a full 400 year cycle, then reset\n      return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n    } else {\n      return new Date(y, m, d).valueOf();\n    }\n  }\n\n  function utcStartOfDate(y, m, d) {\n    // Date.UTC remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n      // preserve leap years using a full 400 year cycle, then reset\n      return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n    } else {\n      return Date.UTC(y, m, d);\n    }\n  }\n\n  function startOf(units) {\n    var time;\n    units = normalizeUnits(units);\n\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n      return this;\n    }\n\n    var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n    switch (units) {\n      case 'year':\n        time = startOfDate(this.year(), 0, 1);\n        break;\n\n      case 'quarter':\n        time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n        break;\n\n      case 'month':\n        time = startOfDate(this.year(), this.month(), 1);\n        break;\n\n      case 'week':\n        time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n        break;\n\n      case 'isoWeek':\n        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n        break;\n\n      case 'day':\n      case 'date':\n        time = startOfDate(this.year(), this.month(), this.date());\n        break;\n\n      case 'hour':\n        time = this._d.valueOf();\n        time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n        break;\n\n      case 'minute':\n        time = this._d.valueOf();\n        time -= mod$1(time, MS_PER_MINUTE);\n        break;\n\n      case 'second':\n        time = this._d.valueOf();\n        time -= mod$1(time, MS_PER_SECOND);\n        break;\n    }\n\n    this._d.setTime(time);\n\n    hooks.updateOffset(this, true);\n    return this;\n  }\n\n  function endOf(units) {\n    var time;\n    units = normalizeUnits(units);\n\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n      return this;\n    }\n\n    var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n    switch (units) {\n      case 'year':\n        time = startOfDate(this.year() + 1, 0, 1) - 1;\n        break;\n\n      case 'quarter':\n        time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n        break;\n\n      case 'month':\n        time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n        break;\n\n      case 'week':\n        time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n        break;\n\n      case 'isoWeek':\n        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n        break;\n\n      case 'day':\n      case 'date':\n        time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n        break;\n\n      case 'hour':\n        time = this._d.valueOf();\n        time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n        break;\n\n      case 'minute':\n        time = this._d.valueOf();\n        time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n        break;\n\n      case 'second':\n        time = this._d.valueOf();\n        time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n        break;\n    }\n\n    this._d.setTime(time);\n\n    hooks.updateOffset(this, true);\n    return this;\n  }\n\n  function valueOf() {\n    return this._d.valueOf() - (this._offset || 0) * 60000;\n  }\n\n  function unix() {\n    return Math.floor(this.valueOf() / 1000);\n  }\n\n  function toDate() {\n    return new Date(this.valueOf());\n  }\n\n  function toArray() {\n    var m = this;\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n  }\n\n  function toObject() {\n    var m = this;\n    return {\n      years: m.year(),\n      months: m.month(),\n      date: m.date(),\n      hours: m.hours(),\n      minutes: m.minutes(),\n      seconds: m.seconds(),\n      milliseconds: m.milliseconds()\n    };\n  }\n\n  function toJSON() {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n  }\n\n  function isValid$2() {\n    return isValid(this);\n  }\n\n  function parsingFlags() {\n    return extend({}, getParsingFlags(this));\n  }\n\n  function invalidAt() {\n    return getParsingFlags(this).overflow;\n  }\n\n  function creationData() {\n    return {\n      input: this._i,\n      format: this._f,\n      locale: this._locale,\n      isUTC: this._isUTC,\n      strict: this._strict\n    };\n  } // FORMATTING\n\n\n  addFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n  });\n  addFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n  });\n\n  function addWeekYearFormatToken(token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n  }\n\n  addWeekYearFormatToken('gggg', 'weekYear');\n  addWeekYearFormatToken('ggggg', 'weekYear');\n  addWeekYearFormatToken('GGGG', 'isoWeekYear');\n  addWeekYearFormatToken('GGGGG', 'isoWeekYear'); // ALIASES\n\n  addUnitAlias('weekYear', 'gg');\n  addUnitAlias('isoWeekYear', 'GG'); // PRIORITY\n\n  addUnitPriority('weekYear', 1);\n  addUnitPriority('isoWeekYear', 1); // PARSING\n\n  addRegexToken('G', matchSigned);\n  addRegexToken('g', matchSigned);\n  addRegexToken('GG', match1to2, match2);\n  addRegexToken('gg', match1to2, match2);\n  addRegexToken('GGGG', match1to4, match4);\n  addRegexToken('gggg', match1to4, match4);\n  addRegexToken('GGGGG', match1to6, match6);\n  addRegexToken('ggggg', match1to6, match6);\n  addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n    week[token.substr(0, 2)] = toInt(input);\n  });\n  addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n  }); // MOMENTS\n\n  function getSetWeekYear(input) {\n    return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);\n  }\n\n  function getSetISOWeekYear(input) {\n    return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\n  }\n\n  function getISOWeeksInYear() {\n    return weeksInYear(this.year(), 1, 4);\n  }\n\n  function getWeeksInYear() {\n    var weekInfo = this.localeData()._week;\n\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n  }\n\n  function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n    var weeksTarget;\n\n    if (input == null) {\n      return weekOfYear(this, dow, doy).year;\n    } else {\n      weeksTarget = weeksInYear(input, dow, doy);\n\n      if (week > weeksTarget) {\n        week = weeksTarget;\n      }\n\n      return setWeekAll.call(this, input, week, weekday, dow, doy);\n    }\n  }\n\n  function setWeekAll(weekYear, week, weekday, dow, doy) {\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n    this.year(date.getUTCFullYear());\n    this.month(date.getUTCMonth());\n    this.date(date.getUTCDate());\n    return this;\n  } // FORMATTING\n\n\n  addFormatToken('Q', 0, 'Qo', 'quarter'); // ALIASES\n\n  addUnitAlias('quarter', 'Q'); // PRIORITY\n\n  addUnitPriority('quarter', 7); // PARSING\n\n  addRegexToken('Q', match1);\n  addParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n  }); // MOMENTS\n\n  function getSetQuarter(input) {\n    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n  } // FORMATTING\n\n\n  addFormatToken('D', ['DD', 2], 'Do', 'date'); // ALIASES\n\n  addUnitAlias('date', 'D'); // PRIORITY\n\n  addUnitPriority('date', 9); // PARSING\n\n  addRegexToken('D', match1to2);\n  addRegexToken('DD', match1to2, match2);\n  addRegexToken('Do', function (isStrict, locale) {\n    // TODO: Remove \""ordinalParse\"" fallback in next major release.\n    return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\n  });\n  addParseToken(['D', 'DD'], DATE);\n  addParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0]);\n  }); // MOMENTS\n\n  var getSetDayOfMonth = makeGetSet('Date', true); // FORMATTING\n\n  addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); // ALIASES\n\n  addUnitAlias('dayOfYear', 'DDD'); // PRIORITY\n\n  addUnitPriority('dayOfYear', 4); // PARSING\n\n  addRegexToken('DDD', match1to3);\n  addRegexToken('DDDD', match3);\n  addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n  }); // HELPERS\n  // MOMENTS\n\n  function getSetDayOfYear(input) {\n    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n  } // FORMATTING\n\n\n  addFormatToken('m', ['mm', 2], 0, 'minute'); // ALIASES\n\n  addUnitAlias('minute', 'm'); // PRIORITY\n\n  addUnitPriority('minute', 14); // PARSING\n\n  addRegexToken('m', match1to2);\n  addRegexToken('mm', match1to2, match2);\n  addParseToken(['m', 'mm'], MINUTE); // MOMENTS\n\n  var getSetMinute = makeGetSet('Minutes', false); // FORMATTING\n\n  addFormatToken('s', ['ss', 2], 0, 'second'); // ALIASES\n\n  addUnitAlias('second', 's'); // PRIORITY\n\n  addUnitPriority('second', 15); // PARSING\n\n  addRegexToken('s', match1to2);\n  addRegexToken('ss', match1to2, match2);\n  addParseToken(['s', 'ss'], SECOND); // MOMENTS\n\n  var getSetSecond = makeGetSet('Seconds', false); // FORMATTING\n\n  addFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n  });\n  addFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n  });\n  addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n  addFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n  });\n  addFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n  });\n  addFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n  });\n  addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n  });\n  addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n  });\n  addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n  }); // ALIASES\n\n  addUnitAlias('millisecond', 'ms'); // PRIORITY\n\n  addUnitPriority('millisecond', 16); // PARSING\n\n  addRegexToken('S', match1to3, match1);\n  addRegexToken('SS', match1to3, match2);\n  addRegexToken('SSS', match1to3, match3);\n  var token;\n\n  for (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n  }\n\n  function parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n  }\n\n  for (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n  } // MOMENTS\n\n\n  var getSetMillisecond = makeGetSet('Milliseconds', false); // FORMATTING\n\n  addFormatToken('z', 0, 0, 'zoneAbbr');\n  addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS\n\n  function getZoneAbbr() {\n    return this._isUTC ? 'UTC' : '';\n  }\n\n  function getZoneName() {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n  }\n\n  var proto = Moment.prototype;\n  proto.add = add;\n  proto.calendar = calendar$1;\n  proto.clone = clone;\n  proto.diff = diff;\n  proto.endOf = endOf;\n  proto.format = format;\n  proto.from = from;\n  proto.fromNow = fromNow;\n  proto.to = to;\n  proto.toNow = toNow;\n  proto.get = stringGet;\n  proto.invalidAt = invalidAt;\n  proto.isAfter = isAfter;\n  proto.isBefore = isBefore;\n  proto.isBetween = isBetween;\n  proto.isSame = isSame;\n  proto.isSameOrAfter = isSameOrAfter;\n  proto.isSameOrBefore = isSameOrBefore;\n  proto.isValid = isValid$2;\n  proto.lang = lang;\n  proto.locale = locale;\n  proto.localeData = localeData;\n  proto.max = prototypeMax;\n  proto.min = prototypeMin;\n  proto.parsingFlags = parsingFlags;\n  proto.set = stringSet;\n  proto.startOf = startOf;\n  proto.subtract = subtract;\n  proto.toArray = toArray;\n  proto.toObject = toObject;\n  proto.toDate = toDate;\n  proto.toISOString = toISOString;\n  proto.inspect = inspect;\n  proto.toJSON = toJSON;\n  proto.toString = toString;\n  proto.unix = unix;\n  proto.valueOf = valueOf;\n  proto.creationData = creationData;\n  proto.year = getSetYear;\n  proto.isLeapYear = getIsLeapYear;\n  proto.weekYear = getSetWeekYear;\n  proto.isoWeekYear = getSetISOWeekYear;\n  proto.quarter = proto.quarters = getSetQuarter;\n  proto.month = getSetMonth;\n  proto.daysInMonth = getDaysInMonth;\n  proto.week = proto.weeks = getSetWeek;\n  proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n  proto.weeksInYear = getWeeksInYear;\n  proto.isoWeeksInYear = getISOWeeksInYear;\n  proto.date = getSetDayOfMonth;\n  proto.day = proto.days = getSetDayOfWeek;\n  proto.weekday = getSetLocaleDayOfWeek;\n  proto.isoWeekday = getSetISODayOfWeek;\n  proto.dayOfYear = getSetDayOfYear;\n  proto.hour = proto.hours = getSetHour;\n  proto.minute = proto.minutes = getSetMinute;\n  proto.second = proto.seconds = getSetSecond;\n  proto.millisecond = proto.milliseconds = getSetMillisecond;\n  proto.utcOffset = getSetOffset;\n  proto.utc = setOffsetToUTC;\n  proto.local = setOffsetToLocal;\n  proto.parseZone = setOffsetToParsedOffset;\n  proto.hasAlignedHourOffset = hasAlignedHourOffset;\n  proto.isDST = isDaylightSavingTime;\n  proto.isLocal = isLocal;\n  proto.isUtcOffset = isUtcOffset;\n  proto.isUtc = isUtc;\n  proto.isUTC = isUtc;\n  proto.zoneAbbr = getZoneAbbr;\n  proto.zoneName = getZoneName;\n  proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n  proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n  proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n  proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n  proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n  function createUnix(input) {\n    return createLocal(input * 1000);\n  }\n\n  function createInZone() {\n    return createLocal.apply(null, arguments).parseZone();\n  }\n\n  function preParsePostFormat(string) {\n    return string;\n  }\n\n  var proto$1 = Locale.prototype;\n  proto$1.calendar = calendar;\n  proto$1.longDateFormat = longDateFormat;\n  proto$1.invalidDate = invalidDate;\n  proto$1.ordinal = ordinal;\n  proto$1.preparse = preParsePostFormat;\n  proto$1.postformat = preParsePostFormat;\n  proto$1.relativeTime = relativeTime;\n  proto$1.pastFuture = pastFuture;\n  proto$1.set = set;\n  proto$1.months = localeMonths;\n  proto$1.monthsShort = localeMonthsShort;\n  proto$1.monthsParse = localeMonthsParse;\n  proto$1.monthsRegex = monthsRegex;\n  proto$1.monthsShortRegex = monthsShortRegex;\n  proto$1.week = localeWeek;\n  proto$1.firstDayOfYear = localeFirstDayOfYear;\n  proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n  proto$1.weekdays = localeWeekdays;\n  proto$1.weekdaysMin = localeWeekdaysMin;\n  proto$1.weekdaysShort = localeWeekdaysShort;\n  proto$1.weekdaysParse = localeWeekdaysParse;\n  proto$1.weekdaysRegex = weekdaysRegex;\n  proto$1.weekdaysShortRegex = weekdaysShortRegex;\n  proto$1.weekdaysMinRegex = weekdaysMinRegex;\n  proto$1.isPM = localeIsPM;\n  proto$1.meridiem = localeMeridiem;\n\n  function get$1(format, index, field, setter) {\n    var locale = getLocale();\n    var utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n  }\n\n  function listMonthsImpl(format, index, field) {\n    if (isNumber(format)) {\n      index = format;\n      format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n      return get$1(format, index, field, 'month');\n    }\n\n    var i;\n    var out = [];\n\n    for (i = 0; i < 12; i++) {\n      out[i] = get$1(format, i, field, 'month');\n    }\n\n    return out;\n  } // ()\n  // (5)\n  // (fmt, 5)\n  // (fmt)\n  // (true)\n  // (true, 5)\n  // (true, fmt, 5)\n  // (true, fmt)\n\n\n  function listWeekdaysImpl(localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n      if (isNumber(format)) {\n        index = format;\n        format = undefined;\n      }\n\n      format = format || '';\n    } else {\n      format = localeSorted;\n      index = format;\n      localeSorted = false;\n\n      if (isNumber(format)) {\n        index = format;\n        format = undefined;\n      }\n\n      format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0;\n\n    if (index != null) {\n      return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    var i;\n    var out = [];\n\n    for (i = 0; i < 7; i++) {\n      out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n\n    return out;\n  }\n\n  function listMonths(format, index) {\n    return listMonthsImpl(format, index, 'months');\n  }\n\n  function listMonthsShort(format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n  }\n\n  function listWeekdays(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n  }\n\n  function listWeekdaysShort(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n  }\n\n  function listWeekdaysMin(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n  }\n\n  getSetGlobalLocale('en', {\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    }\n  }); // Side effect imports\n\n  hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n  hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n  var mathAbs = Math.abs;\n\n  function abs() {\n    var data = this._data;\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days = mathAbs(this._days);\n    this._months = mathAbs(this._months);\n    data.milliseconds = mathAbs(data.milliseconds);\n    data.seconds = mathAbs(data.seconds);\n    data.minutes = mathAbs(data.minutes);\n    data.hours = mathAbs(data.hours);\n    data.months = mathAbs(data.months);\n    data.years = mathAbs(data.years);\n    return this;\n  }\n\n  function addSubtract$1(duration, input, value, direction) {\n    var other = createDuration(input, value);\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days += direction * other._days;\n    duration._months += direction * other._months;\n    return duration._bubble();\n  } // supports only 2.0-style add(1, 's') or add(duration)\n\n\n  function add$1(input, value) {\n    return addSubtract$1(this, input, value, 1);\n  } // supports only 2.0-style subtract(1, 's') or subtract(duration)\n\n\n  function subtract$1(input, value) {\n    return addSubtract$1(this, input, value, -1);\n  }\n\n  function absCeil(number) {\n    if (number < 0) {\n      return Math.floor(number);\n    } else {\n      return Math.ceil(number);\n    }\n  }\n\n  function bubble() {\n    var milliseconds = this._milliseconds;\n    var days = this._days;\n    var months = this._months;\n    var data = this._data;\n    var seconds, minutes, hours, years, monthsFromDays; // if we have a mix of positive and negative values, bubble down first\n    // check: https://github.com/moment/moment/issues/2166\n\n    if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\n      milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n      days = 0;\n      months = 0;\n    } // The following code bubbles up values, see the tests for\n    // examples of what that means.\n\n\n    data.milliseconds = milliseconds % 1000;\n    seconds = absFloor(milliseconds / 1000);\n    data.seconds = seconds % 60;\n    minutes = absFloor(seconds / 60);\n    data.minutes = minutes % 60;\n    hours = absFloor(minutes / 60);\n    data.hours = hours % 24;\n    days += absFloor(hours / 24); // convert days to months\n\n    monthsFromDays = absFloor(daysToMonths(days));\n    months += monthsFromDays;\n    days -= absCeil(monthsToDays(monthsFromDays)); // 12 months -> 1 year\n\n    years = absFloor(months / 12);\n    months %= 12;\n    data.days = days;\n    data.months = months;\n    data.years = years;\n    return this;\n  }\n\n  function daysToMonths(days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    // 400 years have 12 months === 4800\n    return days * 4800 / 146097;\n  }\n\n  function monthsToDays(months) {\n    // the reverse of daysToMonths\n    return months * 146097 / 4800;\n  }\n\n  function as(units) {\n    if (!this.isValid()) {\n      return NaN;\n    }\n\n    var days;\n    var months;\n    var milliseconds = this._milliseconds;\n    units = normalizeUnits(units);\n\n    if (units === 'month' || units === 'quarter' || units === 'year') {\n      days = this._days + milliseconds / 864e5;\n      months = this._months + daysToMonths(days);\n\n      switch (units) {\n        case 'month':\n          return months;\n\n        case 'quarter':\n          return months / 3;\n\n        case 'year':\n          return months / 12;\n      }\n    } else {\n      // handle milliseconds separately because of floating point math errors (issue #1867)\n      days = this._days + Math.round(monthsToDays(this._months));\n\n      switch (units) {\n        case 'week':\n          return days / 7 + milliseconds / 6048e5;\n\n        case 'day':\n          return days + milliseconds / 864e5;\n\n        case 'hour':\n          return days * 24 + milliseconds / 36e5;\n\n        case 'minute':\n          return days * 1440 + milliseconds / 6e4;\n\n        case 'second':\n          return days * 86400 + milliseconds / 1000;\n        // Math.floor prevents floating point math errors here\n\n        case 'millisecond':\n          return Math.floor(days * 864e5) + milliseconds;\n\n        default:\n          throw new Error('Unknown unit ' + units);\n      }\n    }\n  } // TODO: Use this.as('ms')?\n\n\n  function valueOf$1() {\n    if (!this.isValid()) {\n      return NaN;\n    }\n\n    return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;\n  }\n\n  function makeAs(alias) {\n    return function () {\n      return this.as(alias);\n    };\n  }\n\n  var asMilliseconds = makeAs('ms');\n  var asSeconds = makeAs('s');\n  var asMinutes = makeAs('m');\n  var asHours = makeAs('h');\n  var asDays = makeAs('d');\n  var asWeeks = makeAs('w');\n  var asMonths = makeAs('M');\n  var asQuarters = makeAs('Q');\n  var asYears = makeAs('y');\n\n  function clone$1() {\n    return createDuration(this);\n  }\n\n  function get$2(units) {\n    units = normalizeUnits(units);\n    return this.isValid() ? this[units + 's']() : NaN;\n  }\n\n  function makeGetter(name) {\n    return function () {\n      return this.isValid() ? this._data[name] : NaN;\n    };\n  }\n\n  var milliseconds = makeGetter('milliseconds');\n  var seconds = makeGetter('seconds');\n  var minutes = makeGetter('minutes');\n  var hours = makeGetter('hours');\n  var days = makeGetter('days');\n  var months = makeGetter('months');\n  var years = makeGetter('years');\n\n  function weeks() {\n    return absFloor(this.days() / 7);\n  }\n\n  var round = Math.round;\n  var thresholds = {\n    ss: 44,\n    // a few seconds to seconds\n    s: 45,\n    // seconds to minute\n    m: 45,\n    // minutes to hour\n    h: 22,\n    // hours to day\n    d: 26,\n    // days to month\n    M: 11 // months to year\n\n  }; // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\n  function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n  }\n\n  function relativeTime$1(posNegDuration, withoutSuffix, locale) {\n    var duration = createDuration(posNegDuration).abs();\n    var seconds = round(duration.as('s'));\n    var minutes = round(duration.as('m'));\n    var hours = round(duration.as('h'));\n    var days = round(duration.as('d'));\n    var months = round(duration.as('M'));\n    var years = round(duration.as('y'));\n    var a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days] || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\n    a[2] = withoutSuffix;\n    a[3] = +posNegDuration > 0;\n    a[4] = locale;\n    return substituteTimeAgo.apply(null, a);\n  } // This function allows you to set the rounding function for relative time strings\n\n\n  function getSetRelativeTimeRounding(roundingFunction) {\n    if (roundingFunction === undefined) {\n      return round;\n    }\n\n    if (typeof roundingFunction === 'function') {\n      round = roundingFunction;\n      return true;\n    }\n\n    return false;\n  } // This function allows you to set a threshold for relative time strings\n\n\n  function getSetRelativeTimeThreshold(threshold, limit) {\n    if (thresholds[threshold] === undefined) {\n      return false;\n    }\n\n    if (limit === undefined) {\n      return thresholds[threshold];\n    }\n\n    thresholds[threshold] = limit;\n\n    if (threshold === 's') {\n      thresholds.ss = limit - 1;\n    }\n\n    return true;\n  }\n\n  function humanize(withSuffix) {\n    if (!this.isValid()) {\n      return this.localeData().invalidDate();\n    }\n\n    var locale = this.localeData();\n    var output = relativeTime$1(this, !withSuffix, locale);\n\n    if (withSuffix) {\n      output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n  }\n\n  var abs$1 = Math.abs;\n\n  function sign(x) {\n    return (x > 0) - (x < 0) || +x;\n  }\n\n  function toISOString$1() {\n    // for ISO strings we do not use the normal bubbling rules:\n    //  * milliseconds bubble up until they become hours\n    //  * days do not bubble at all\n    //  * months bubble up until they become years\n    // This is because there is no context-free conversion between hours and days\n    // (think of clock changes)\n    // and also not between days and months (28-31 days per month)\n    if (!this.isValid()) {\n      return this.localeData().invalidDate();\n    }\n\n    var seconds = abs$1(this._milliseconds) / 1000;\n    var days = abs$1(this._days);\n    var months = abs$1(this._months);\n    var minutes, hours, years; // 3600 seconds -> 60 minutes -> 1 hour\n\n    minutes = absFloor(seconds / 60);\n    hours = absFloor(minutes / 60);\n    seconds %= 60;\n    minutes %= 60; // 12 months -> 1 year\n\n    years = absFloor(months / 12);\n    months %= 12; // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\n    var Y = years;\n    var M = months;\n    var D = days;\n    var h = hours;\n    var m = minutes;\n    var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n    var total = this.asSeconds();\n\n    if (!total) {\n      // this is the same as C#'s (Noda) and python (isodate)...\n      // but not other JS (goog.date)\n      return 'P0D';\n    }\n\n    var totalSign = total < 0 ? '-' : '';\n    var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n    var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n    var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n    return totalSign + 'P' + (Y ? ymSign + Y + 'Y' : '') + (M ? ymSign + M + 'M' : '') + (D ? daysSign + D + 'D' : '') + (h || m || s ? 'T' : '') + (h ? hmsSign + h + 'H' : '') + (m ? hmsSign + m + 'M' : '') + (s ? hmsSign + s + 'S' : '');\n  }\n\n  var proto$2 = Duration.prototype;\n  proto$2.isValid = isValid$1;\n  proto$2.abs = abs;\n  proto$2.add = add$1;\n  proto$2.subtract = subtract$1;\n  proto$2.as = as;\n  proto$2.asMilliseconds = asMilliseconds;\n  proto$2.asSeconds = asSeconds;\n  proto$2.asMinutes = asMinutes;\n  proto$2.asHours = asHours;\n  proto$2.asDays = asDays;\n  proto$2.asWeeks = asWeeks;\n  proto$2.asMonths = asMonths;\n  proto$2.asQuarters = asQuarters;\n  proto$2.asYears = asYears;\n  proto$2.valueOf = valueOf$1;\n  proto$2._bubble = bubble;\n  proto$2.clone = clone$1;\n  proto$2.get = get$2;\n  proto$2.milliseconds = milliseconds;\n  proto$2.seconds = seconds;\n  proto$2.minutes = minutes;\n  proto$2.hours = hours;\n  proto$2.days = days;\n  proto$2.weeks = weeks;\n  proto$2.months = months;\n  proto$2.years = years;\n  proto$2.humanize = humanize;\n  proto$2.toISOString = toISOString$1;\n  proto$2.toString = toISOString$1;\n  proto$2.toJSON = toISOString$1;\n  proto$2.locale = locale;\n  proto$2.localeData = localeData;\n  proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n  proto$2.lang = lang; // Side effect imports\n  // FORMATTING\n\n  addFormatToken('X', 0, 0, 'unix');\n  addFormatToken('x', 0, 0, 'valueOf'); // PARSING\n\n  addRegexToken('x', matchSigned);\n  addRegexToken('X', matchTimestamp);\n  addParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input, 10) * 1000);\n  });\n  addParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n  }); // Side effect imports\n\n  hooks.version = '2.24.0';\n  setHookCallback(createLocal);\n  hooks.fn = proto;\n  hooks.min = min;\n  hooks.max = max;\n  hooks.now = now;\n  hooks.utc = createUTC;\n  hooks.unix = createUnix;\n  hooks.months = listMonths;\n  hooks.isDate = isDate;\n  hooks.locale = getSetGlobalLocale;\n  hooks.invalid = createInvalid;\n  hooks.duration = createDuration;\n  hooks.isMoment = isMoment;\n  hooks.weekdays = listWeekdays;\n  hooks.parseZone = createInZone;\n  hooks.localeData = getLocale;\n  hooks.isDuration = isDuration;\n  hooks.monthsShort = listMonthsShort;\n  hooks.weekdaysMin = listWeekdaysMin;\n  hooks.defineLocale = defineLocale;\n  hooks.updateLocale = updateLocale;\n  hooks.locales = listLocales;\n  hooks.weekdaysShort = listWeekdaysShort;\n  hooks.normalizeUnits = normalizeUnits;\n  hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n  hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n  hooks.calendarFormat = getCalendarFormat;\n  hooks.prototype = proto; // currently HTML5 input type only supports 24-hour formats\n\n  hooks.HTML5_FMT = {\n    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',\n    // <input type=\""datetime-local\"" />\n    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\n    // <input type=\""datetime-local\"" step=\""1\"" />\n    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\n    // <input type=\""datetime-local\"" step=\""0.001\"" />\n    DATE: 'YYYY-MM-DD',\n    // <input type=\""date\"" />\n    TIME: 'HH:mm',\n    // <input type=\""time\"" />\n    TIME_SECONDS: 'HH:mm:ss',\n    // <input type=\""time\"" step=\""1\"" />\n    TIME_MS: 'HH:mm:ss.SSS',\n    // <input type=\""time\"" step=\""0.001\"" />\n    WEEK: 'GGGG-[W]WW',\n    // <input type=\""week\"" />\n    MONTH: 'YYYY-MM' // <input type=\""month\"" />\n\n  };\n  return hooks;\n});"",""\""use strict\"";\n\nrequire(\""core-js/modules/es6.object.define-property\"");\n\nObject.defineProperty(exports, \""__esModule\"", {\n  value: true\n});\nexports.HackerIconCircleSolid = exports.HackerIconCircle = exports.HackerIconFill = undefined;\n\nvar _react = require(\""react\"");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \""default\"": obj\n  };\n}\n\nvar HackerIconFill = exports.HackerIconFill = function HackerIconFill() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 140 140\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    fillRule: \""evenodd\"",\n    d: \""M60.94 82.314L17 0h20.08l25.85 52.093c.397.927.86 1.888 1.39 2.883.53.994.995 2.02 1.393 3.08.265.4.463.764.596 1.095.13.334.262.63.395.898.662 1.325 1.26 2.618 1.79 3.877.53 1.26.993 2.42 1.39 3.48 1.06-2.254 2.22-4.673 3.48-7.258 1.26-2.585 2.552-5.27 3.877-8.052L103.49 0h18.69L77.84 83.308v53.087h-16.9v-54.08z\""\n  }));\n};\n\nvar HackerIconCircle = exports.HackerIconCircle = function HackerIconCircle() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 256 256\""\n  }, _react2[\""default\""].createElement(\""circle\"", {\n    cx: \""128\"",\n    cy: \""128\"",\n    r: \""122.5\""\n  }), _react2[\""default\""].createElement(\""path\"", {\n    fillRule: \""evenodd\"",\n    strokeWidth: \""10px\"",\n    d: \""M128 256c70.692 0 128-57.308 128-128C256 57.308 198.692 0 128 0 57.308 0 0 57.308 0 128c0 70.692 57.308 128 128 128zm-9.06-113.686L75 60h20.08l25.85 52.093c.397.927.86 1.888 1.39 2.883.53.994.995 2.02 1.393 3.08.265.4.463.764.596 1.095.13.334.262.63.395.898.662 1.325 1.26 2.618 1.79 3.877.53 1.26.993 2.42 1.39 3.48 1.06-2.254 2.22-4.673 3.48-7.258 1.26-2.585 2.552-5.27 3.877-8.052L161.49 60h18.69l-44.34 83.308v53.087h-16.9v-54.08z\""\n  }));\n};\n\nvar HackerIconCircleSolid = exports.HackerIconCircleSolid = function HackerIconCircleSolid() {\n  return _react2[\""default\""].createElement(\""svg\"", {\n    xmlns: \""http://www.w3.org/2000/svg\"",\n    viewBox: \""0 0 256 256\""\n  }, _react2[\""default\""].createElement(\""path\"", {\n    fillRule: \""evenodd\"",\n    d: \""M128 256c70.692 0 128-57.308 128-128C256 57.308 198.692 0 128 0 57.308 0 0 57.308 0 128c0 70.692 57.308 128 128 128zm-9.06-113.686L75 60h20.08l25.85 52.093c.397.927.86 1.888 1.39 2.883.53.994.995 2.02 1.393 3.08.265.4.463.764.596 1.095.13.334.262.63.395.898.662 1.325 1.26 2.618 1.79 3.877.53 1.26.993 2.42 1.39 3.48 1.06-2.254 2.22-4.673 3.48-7.258 1.26-2.585 2.552-5.27 3.877-8.052L161.49 60h18.69l-44.34 83.308v53.087h-16.9v-54.08z\""\n  }));\n};""],""sourceRoot"":""""}"
ab678a8cf3f7f746c63184cfa6c1cc8abd8f2e39,398120,	    // is firebug? http://stackoverflow.com/a/398120/376773
6af609939a8681f97a2202317047fab4edce3201,260273,    Props: http://stackoverflow.com/questions/260273/most-efficient-way-to-search-the-last-x-lines-of-a-file-in-python
eee2a81b51fe1372d3037f7a6c8c8d9cc015f79a,449297,            // table in assembly. See http://stackoverflow.com/a/449297/4077294 for more info.
3e54a720ad63b45030568c959a63e2664c398e78,14731922,   * Source:  http://stackoverflow.com/a/14731922
b754ed3e8d3310c70af5cb8f4b7466d4661910c8,9191668,  // There is a known problem in libcurl (see http://stackoverflow.com/questions/9191668/error-longjmp-causes-uninitialized-stack-frame)
9a02ad1815512ad214e70e3c4ad9aaa0bea74cab,7610631,"	/// @see <a href=""http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod"">GLSL mod vs HLSL fmod</a>"
4b7a5cbe38b09c956dad96a8e9648dd20ea13be6,9382740,"	<pre><code>[Obsolete(""Use Dictionary&lt;TKey, TValue&gt;.TryGetValue() instead whiich emerged in .NET 3.5 (see https://stackoverflow.com/a/9382740/22944)."")]"
fc3f4fac8d258af5dced098056b2a2be43dc927a,5821125,    # code from http://stackoverflow.com/questions/5821125/how-to-plot-confusion-matrix-with-string-axis-rather-than-integer-in-python
1b9d9ee87f5b731f850c596f4d1e2c1f7b7488eb,3330919,        // http://stackoverflow.com/a/3330919)
ea296f1bd87ad4dcc57cf77d4ee532f538c9a57c,13673346,	/* WEBPACK VAR INJECTION */(function(setImmediate) {//  Import support https://stackoverflow.com/questions/13673346/supporting-both-commonjs-and-amd
0fbf2929dfac4cdb02196109dceb83f7bb3cb83d,1547899,     * http://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid
0a208e370d3e5c91f0c482af22f9b99cf9608775,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
719866cbf4d7aa273c3e944c0dc059d05405ec16,196972, * @see http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript
31e45adc5d520bdb69700fd166af1eb57ed68723,3330919,        // http://stackoverflow.com/a/3330919)
a136c8ec217b18e0cb0dd16c7ad8ec2bfd2de415,1950306,"        a(href=""http://stackoverflow.com/questions/1950306/pyyaml-dumping-without-tags"") yaml.safe_dump"
790b958cf42ac47cf88abd1aded7d2018f0ea1da,31343299,# http://stackoverflow.com/questions/31343299/mysql-improperly-configured-reason-unsafe-use-of-relative-path
dec984b0807b5ade509a094a875090aaaa97ab9d,18537762,A demo project for my answer to http://stackoverflow.com/questions/18537607/what-would-be-a-neater-way-of-writing-this-data/18537762#18537762
de3d463b849a90dc7870174d811678e7033b884a,27450072,// See also: http://stackoverflow.com/a/27450072/1782614
7a34e47f880c781aa9c0f1b8ee05d71acf5cbb89,24870464,    // workaround to use test resources (https://stackoverflow.com/q/24870464)
086ab02504b325ba74646417bf343bcf948a7688,3768895,# http://stackoverflow.com/questions/3768895/python-how-to-make-a-class-json-serializable
76f3c3e771726ebacb5a94ce339916c4ed3483f8,36607394,"          \ directly from browser\necho \""fix also this:\""\necho \""https://stackoverflow.com/questions/36607394/error-opening-robot-framework-log-failed\""\"
d97312ce33e71c91afdd4af975e84c41920e392a,2682745,given by a constant defined as a class variable (http://stackoverflow.com/questions/2682745/how-to-create-a-constant-in-python/[reference]). Once activated the camera enters
3a0ef05ec23c90eca02b0755236a24abb1dd6ba4,24161582,"       "" * http://stackoverflow.com/a/24161582/3208463\n"","
a3273f8eec4fce8434b9e12a386ab72318973bb8,10060500,"    # http://stackoverflow.com/questions/10060500/bash-how-to-evaluate-ps1-ps2,"
55fbf1cf9570609dd48ed67366fafaa327c9e706,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
8c45e286e642a288558318da9a59acc9776830d4,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
edc6398d10571603c164b800f935b9047387b0cd,2643533,   * @see http://stackoverflow.com/questions/2643533/php-getting-xpath-of-a-domnode
49e1ee18907a5f35afdffdaf0a55da13ec824311,20459262,http://stackoverflow.com/questions/20459262/distinct-subsequences-dp-explanation  
7726748f514947efe20574252ef9f8450cfca173,13695640, * https://stackoverflow.com/questions/13695640/how-to-make-a-c11-stdunordered-set-of-stdweak-ptr
6a17877702117ad6e3a00e60ea05082ff8677944,11204769,   * @see [DMG with Retina background support](http://stackoverflow.com/a/11204769/1910191).
0069d9a5e2129748a736786eaf44d6c2e0ca5ea8,4124220,    http://stackoverflow.com/questions/4124220/django-adding-css-classes-when-rendering-form-fields-in-a-template
324d59df231cf927bab218e1786dd1e3b14a0b13,28210364,    // http://stackoverflow.com/a/28210364/1070244
f208bd45a40b72c85f7b6e2881c145ddb636886a,10274476,http://stackoverflow.com/questions/10274476/how-to-export-hdf5-file-to-numpy-using-h5py
f66417d898b9206968895e0c27c6f7be97f7ad96,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
b4c4962acce011ba02031090769da796b34a7361,34015469,// http://stackoverflow.com/a/34015469/988941
eeba75671f6c44ca052b14f400eaffdf587ea5da,4406484,"                <a class=""btn btn-lg btn-secondary"" href=""{{ request.META.HTTP_REFERER }}"">Cancel</a>  <!-- http://stackoverflow.com/a/4406484 -->"
75164ed5aa6298c5bdf81155ac273b85205a219a,41132319,see: http://stackoverflow.com/questions/33829017/gssexception-no-valid-credentials-provided-mechanism-level-failed-to-find-any/41132319#41132319
f96e60c955353eb92fbd23c3af38063d6d90f732,3330919,        // http://stackoverflow.com/a/3330919)
5856dbf75a9853155493d77cb6de074d53b13fa2,105034, * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
9d2bde6bb53f701148876df25ec7ac385f6c49cd,8980550,	 *          This is taken from http://stackoverflow.com/a/8980550
c6b8984a715a9a515eb87bec5cb375c9d0f47764,21963136, @link http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
9d95b1805faa9581885a2888eaa82e5b4f039977,11642877,		 * 】 http://stackoverflow.com/questions/11642877/how-to-recognize-
ae2e5b38ab3c6671e110eee84cc90ec13b9189a3,47956005,- my [image rotation article](https://cristianpb.github.io/blog/image-rotation-opencv) is one of the most popular articles. It's because I wrote the article to solve a [stackoverflow question](https://stackoverflow.com/questions/42354804/find-x-y-rotated-coordinates-locations-in-image-opencv-python/47956005#47956005) and put the link to my article there. Stackoverflow is a very popular website!
a180a60f11310b700160704398c7b71ed0834983,16591175, * @see http://stackoverflow.com/a/16591175/113195
5856dbf75a9853155493d77cb6de074d53b13fa2,274094, * After https://stackoverflow.com/questions/273789/is-there-a-version-of-javascripts-string-indexof-that-allows-for-regular-expr/274094#274094
c52150301a0438492a955f52bf7bad2c1a08bc73,8144214,"			<p><a target=""_blank"" href=""http://expressjs.com/""> Express</a> is an app server. Check out <a target=""_blank"" href=""http://expressjs.com/guide.html"">The Express Guide</a> or <a target=""_blank"" href=""http://stackoverflow.com/questions/8144214/learning-express-for-node-js"">StackOverflow</a> for more info.</p>"
8d192384d06974be0d27f9a837527de82e121ac1,10168240,    /// http://stackoverflow.com/questions/10168240/encrypting-decrypting-a-string-in-c-sharp
2969e86f45a3384676ee73d89f5144522a47e481,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
10c95ff029c1e3e35c72e78bc7346dabb871d931,37628,0;72;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;reflection;1.0;0.06231454005934718;3.5;0;0
f2172eaeae5a12c527db6386bfb00cc802b261b2,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
1c2085f13dbf75ca13e155bb16b68e91d71612a6,494122,                // Escape endChar for RegExp (taken from http://stackoverflow.com/a/494122/526741)
1d662dc9b7c095ec16036d5c4b29d21222769bc9,12779184,http://stackoverflow.com/questions/12779184/how-to-deploy-a-scrapy-spider-on-heroku-cloud
9d914dc840da92cdcb9d823104320fe9ca87517d,1349404, * https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
4947a1ea8f41a6e000e66ab32dcd922067b21f81,257514,    	// stolen from http://stackoverflow.com/questions/257514/android-access-child-views-from-a-listview\
6088832de452443db2ed3a40edefc20b647d218d,424800," *      ""http://stackoverflow.com/questions/424800/what-is-the-best-way-to-get-the-minimum-or-maximum-value-from-an-array-of-number"">What"
79d29df5d79ac71844f5f2eab462e55ccec1f0d2,3646914,// Source: http://stackoverflow.com/questions/3646914/how-do-i-check-if-file-exists-in-jquery-or-javascript
18a270f6aea36410820a7505e48d487fa16b4174,26603875,			// http://stackoverflow.com/a/26603875
c820f5ed1e613b5b908f5996851cad3678938202,10828479,                // see stackoverflow for more details : http://stackoverflow.com/a/10828479/15619
9f53c3a8a6802c0c0d16307913d76e1f3f6239aa,13124359,[Does PyZMQ handle creating threads for each new client connection?](http://stackoverflow.com/questions/13124359/does-pyzmq-handle-creating-threads-for-each-new-client-connection)
94fba027e6d8171adc3d946b1f8ebdaa861fe4e7,8033655,"	 *      href=""http://stackoverflow.com/questions/8033655/java-find-longest-common-prefix-in-java"">http://stackoverflow.com/questions/8033655/java-find-longest-common-prefix-in-java</a>"
083392770f4b7a0cbf53430f1c1305b0ce4da645,3277182,        //   http://stackoverflow.com/questions/3277182/how-to-get-the-global-object-in-javascript
715dc153056106d9f5d0d9f73ef0cab85f19241f,4819886,// @credits: http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript/4819886#4819886
0a11e205aa472672a8fbece83597ced4ec1c38c6,14853974,                // ! @see http://stackoverflow.com/a/14853974
c8a1f746968b34971eeb3fa31b35707b0434932a,5223297,# .perspectivev3: http://stackoverflow.com/questions/5223297/xcode-projects-what-is-a-perspectivev3-file
3ee36c288473e1b2160995d65b8181260fe3b351,3330919,        // http://stackoverflow.com/a/3330919)
db5dd770641f0146b295ec5f47bc249797f3af14,839899,//http://stackoverflow.com/questions/839899/how-do-i-calculate-a-point-on-a-circles-circumference
c1932e4af47bc233b4cc5c61a08916fc06ed78c2,27366949,- [Marker Based Vs Merkerless AR](https://stackoverflow.com/a/27366949/5417164)
0d0d73c51c384354b53e0f4a4a40351e867e45f2,1207406,        http://stackoverflow.com/questions/1207406/remove-items-from-a-
c3e94b5a9b6f17108e2d19493917ad4dcbc67084,5411026, * http://stackoverflow.com/questions/5411026/list-of-css-vendor-prefixes
2f00923f4d08e13f583e68d37a31b7db3da7f74c,8724644,// http://stackoverflow.com/questions/8724644/how-do-i-implement-a-macro-that-creates-a-quoted-string-for-pragma
5c473ecb1f4d41205e080cd13db100af3b326d9b,716552,"    /// Taken from http://stackoverflow.com/questions/716552/can-you-create-a-simple-equalitycomparert-using-a-lamba-expression,"
f311854d797089c9bce358c24bc9088d45a0c64f,12463733,    //Run the main loop briefly to let it call the async block. https://stackoverflow.com/questions/12463733/objective-c-unit-testing-dispatch-async-block
05cc83de7525039b1bf803495def28f50019d140,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
95605c507d2dff4b9360cab585eb5f1837b7ae32,28412913,  # https://stackoverflow.com/questions/28412913/disable-automatic-retry-with-activejob-used-with-sidekiq
c1c96adb5a597dbb48c9576f9672ac8936c3fd68,30030031,"	  (0, _warning2['default'])('You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');"
557bef3c76df4b8bd3926d629da7fae55929b4f2,19295725,http://stackoverflow.com/questions/19295725/angle-less-than-180-between-two-segments-lines
5de2ff15654023700dbe45bc88995abe9f2ca9c6,51365037,"{""version"":3,""sources"":[""webpack://Tone/webpack/universalModuleDefinition"",""webpack://Tone/webpack/bootstrap"",""webpack://Tone/./Tone/core/context/AudioContext.ts"",""webpack://Tone/./Tone/core/clock/Ticker.ts"",""webpack://Tone/./Tone/core/util/TypeCheck.ts"",""webpack://Tone/./Tone/core/util/AdvancedTypeCheck.ts"",""webpack://Tone/./Tone/core/util/Defaults.ts"",""webpack://Tone/./Tone/core/util/Debug.ts"",""webpack://Tone/./Tone/core/Tone.ts"",""webpack://Tone/./Tone/version.ts"",""webpack://Tone/./Tone/core/util/Emitter.ts"",""webpack://Tone/./Tone/core/util/Timeline.ts"",""webpack://Tone/./Tone/core/context/ContextInitialization.ts"",""webpack://Tone/./Tone/core/context/Context.ts"",""webpack://Tone/./Tone/core/Global.ts"",""webpack://Tone/./Tone/core/type/Conversions.ts"",""webpack://Tone/./Tone/core/type/TimeBase.ts"",""webpack://Tone/./Tone/core/type/Time.ts"",""webpack://Tone/./Tone/core/type/Frequency.ts"",""webpack://Tone/./Tone/core/type/TransportTime.ts"",""webpack://Tone/./Tone/core/context/ToneWithContext.ts"",""webpack://Tone/./Tone/core/context/Param.ts"",""webpack://Tone/./Tone/core/context/ToneAudioNode.ts"",""webpack://Tone/./Tone/core/util/Interface.ts"",""webpack://Tone/./Tone/core/context/Gain.ts"",""webpack://Tone/./Tone/core/context/OfflineContext.ts"",""webpack://Tone/./Tone/core/context/ToneAudioBuffer.ts"",""webpack://Tone/./Tone/core/context/Offline.ts"",""webpack://Tone/./Tone/core/context/ToneAudioBuffers.ts"",""webpack://Tone/./Tone/core/context/Delay.ts"",""webpack://Tone/./Tone/core/util/StateTimeline.ts"",""webpack://Tone/./Tone/core/clock/TickSignal.ts"",""webpack://Tone/./Tone/core/clock/TickSource.ts"",""webpack://Tone/./Tone/core/clock/Clock.ts"",""webpack://Tone/./Tone/core/type/Ticks.ts"",""webpack://Tone/./Tone/core/type/Midi.ts"",""webpack://Tone/./Tone/core/util/Draw.ts"",""webpack://Tone/./Tone/core/util/IntervalTimeline.ts"",""webpack://Tone/./Tone/component/channel/Volume.ts"",""webpack://Tone/./Tone/core/context/Destination.ts"",""webpack://Tone/./Tone/core/clock/TransportEvent.ts"",""webpack://Tone/./Tone/core/clock/TransportRepeatEvent.ts"",""webpack://Tone/./Tone/core/clock/Transport.ts"",""webpack://Tone/./Tone/source/Source.ts"",""webpack://Tone/./Tone/source/OneShotSource.ts"",""webpack://Tone/./Tone/source/buffer/BufferSource.ts"",""webpack://Tone/./Tone/source/Noise.ts"",""webpack://Tone/./Tone/signal/Signal.ts"",""webpack://Tone/./Tone/source/oscillator/OscillatorNode.ts"",""webpack://Tone/./Tone/source/oscillator/Oscillator.ts"",""webpack://Tone/./Tone/signal/SignalOperator.ts"",""webpack://Tone/./Tone/signal/WaveShaper.ts"",""webpack://Tone/./Tone/signal/AudioToGain.ts"",""webpack://Tone/./Tone/signal/Multiply.ts"",""webpack://Tone/./Tone/source/oscillator/AMOscillator.ts"",""webpack://Tone/./Tone/source/oscillator/FMOscillator.ts"",""webpack://Tone/./Tone/source/oscillator/PulseOscillator.ts"",""webpack://Tone/./Tone/source/oscillator/FatOscillator.ts"",""webpack://Tone/./Tone/source/oscillator/PWMOscillator.ts"",""webpack://Tone/./Tone/source/oscillator/OmniOscillator.ts"",""webpack://Tone/./Tone/source/buffer/Player.ts"",""webpack://Tone/./Tone/signal/Add.ts"",""webpack://Tone/./Tone/signal/Abs.ts"",""webpack://Tone/./Tone/signal/GainToAudio.ts"",""webpack://Tone/./Tone/signal/Negate.ts"",""webpack://Tone/./Tone/signal/Subtract.ts"",""webpack://Tone/./Tone/signal/Zero.ts"",""webpack://Tone/./Tone/component/envelope/Envelope.ts"",""webpack://Tone/./Tone/component/envelope/AmplitudeEnvelope.ts"",""webpack://Tone/./Tone/instrument/Instrument.ts"",""webpack://Tone/./Tone/instrument/Monophonic.ts"",""webpack://Tone/./Tone/instrument/Synth.ts"",""webpack://Tone/./Tone/instrument/Sampler.ts"",""webpack://Tone/./Tone/instrument/PolySynth.ts"",""webpack://Tone/./Tone/instrument/MembraneSynth.ts"",""webpack://Tone/./Tone/event/ToneEvent.ts"",""webpack://Tone/./Tone/event/Part.ts"",""webpack://Tone/./Tone/event/Sequence.ts"",""webpack://Tone/./Tone/component/channel/CrossFade.ts"",""webpack://Tone/./Tone/effect/Effect.ts"",""webpack://Tone/./Tone/effect/FeedbackEffect.ts"",""webpack://Tone/./Tone/effect/FeedbackDelay.ts"",""webpack://Tone/./Tone/effect/Convolver.ts"",""webpack://Tone/./Tone/component/channel/Merge.ts"",""webpack://Tone/./Tone/effect/Reverb.ts"",""webpack://Tone/./Tone/component/analysis/Analyser.ts"",""webpack://Tone/./Tone/component/filter/Filter.ts"",""webpack://Tone/./Tone/component/channel/MultibandSplit.ts"",""webpack://Tone/./Tone/component/filter/EQ3.ts"",""webpack://Tone/./Tone/component/dynamics/Compressor.ts"",""webpack://Tone/./Tone/index.ts""],""names"":[""root"",""factory"",""exports"",""module"",""define"",""amd"",""self"",""this"",""installedModules"",""__webpack_require__"",""moduleId"",""i"",""l"",""modules"",""call"",""m"",""c"",""d"",""name"",""getter"",""o"",""Object"",""defineProperty"",""configurable"",""enumerable"",""get"",""r"",""value"",""n"",""__esModule"",""object"",""property"",""prototype"",""hasOwnProperty"",""p"",""s"",""globalContext"",""theWindow"",""hasAudioContext"",""getAudioContext"",""context"",""AudioContext"",""TONE_AUDIO_CONTEXT"",""Ticker"",""callback"",""type"",""updateInterval"",""_callback"",""_type"",""_updateInterval"",""_createClock"",""_createWorker"",""blob"",""Blob"",""toFixed"",""blobUrl"",""URL"",""createObjectURL"",""worker"",""Worker"",""onmessage"",""bind"",""_worker"",""_createTimeout"",""_this"",""_timeout"",""setTimeout"",""e"",""_disposeClock"",""clearTimeout"",""terminate"",""interval"",""Math"",""max"",""postMessage"",""dispose"",""isUndef"",""arg"",""isDefined"",""isFunction"",""isNumber"",""isObject"",""toString"",""constructor"",""isBoolean"",""isArray"",""Array"",""isString"",""isNote"",""test"",""isAudioParam"",""Reflect"",""has"",""setValueAtTime"",""isAudioNode"",""isAudioContext"",""isOfflineAudioContext"",""startRendering"",""close"",""resume"",""isAudioBuffer"",""load"",""noCopy"",""key"",""deepMerge"",""target"",""sources"",""_i"",""arguments"",""length"",""source"",""shift"",""assign"",""_a"",""_b"",""apply"",""concat"",""optionsFromArguments"",""defaults"",""argsArray"",""keys"",""objKey"",""opts"",""args"",""from"",""some"",""splice"",""indexOf"",""defaultArg"",""given"",""fallback"",""omitFromObject"",""obj"",""omit"",""forEach"",""prop"",""assert"",""statement"",""error"",""Error"",""Tone_Tone"",""Tone"",""debug"",""_wasDisposed"",""getDefaults"",""log"",""TONE_DEBUG_CLASS"",""unshift"",""console"",""version"",""Emitter_Emitter"",""_super"",""Emitter"",""__extends"",""on"",""event"",""split"",""eventName"",""_events"",""push"",""once"",""boundCallback"",""off"",""eventList"",""emit"",""slice"",""len"",""mixin"",""constr"",""getOwnPropertyDescriptor"",""undefined"",""Timeline_Timeline"",""Timeline"",""_timeline"",""options"",""memory"",""Timeline_extends"",""Infinity"",""add"",""time"",""valueOf"",""index"",""_search"",""diff"",""remove"",""param"",""peek"",""getAfter"",""getBefore"",""cancel"",""after"",""cancelBefore"",""previousEvent"",""beginning"",""end"",""midPoint"",""floor"",""event_1"",""nextEvent"",""_iterate"",""lowerBound"",""upperBound"",""forEachBefore"",""forEachAfter"",""forEachBetween"",""startTime"",""endTime"",""forEachFrom"",""forEachAtTime"",""notifyNewContext"",""onContextInit"",""cb"",""notifyCloseContext"",""onContextClose"",""Context_Context"",""Context"",""_constants"",""Map"",""_timeouts"",""_timeoutIds"",""_initialized"",""_context"",""_latencyHint"",""latencyHint"",""lookAhead"",""_ticker"",""clockSource"",""_timeoutLoop"",""addEventListener"",""state"",""Context_extends"",""initialize"",""ctx"",""createAnalyser"",""createOscillator"",""createBufferSource"",""createBiquadFilter"",""createBuffer"",""numberOfChannels"",""sampleRate"",""createChannelMerger"",""numberOfInputs"",""createChannelSplitter"",""numberOfOutputs"",""createConstantSource"",""createConvolver"",""createDelay"",""maxDelayTime"",""createDynamicsCompressor"",""createGain"",""createIIRFilter"",""feedforward"",""feedback"",""createPanner"",""createPeriodicWave"",""real"",""imag"",""constraints"",""createStereoPanner"",""createWaveShaper"",""decodeAudioData"",""audioData"",""currentTime"",""listener"",""_transport"",""t"",""_destination"",""hint"",""lookAheadValue"",""now"",""Promise"",""resolve"",""sent"",""getConstant"",""val"",""buffer"",""arr"",""getChannelData"",""constant"",""channelCount"",""channelCountMode"",""loop"",""start"",""set"",""map"",""disconnect"",""firstEvent"",""fn"",""timeout"",""id"",""dummyContext"",""destination"",""transport"",""Global_globalContext"",""getContext"",""setContext"",""Global_start"",""TONE_SILENCE_LOGGING"",""prefix"",""printString"",""dbToGain"",""db"",""pow"",""gainToDb"",""gain"",""LN10"",""intervalToFrequencyRatio"",""A4"",""ftom"",""frequency"",""round"",""log2"",""ftomf"",""mtof"",""midi"",""TimeBase_TimeBaseClass"",""TimeBaseClass"",""units"",""defaultUnits"",""_val"",""_units"",""_expressions"",""_getExpressions"",""TimeBase_extends"",""hz"",""method"",""_frequencyToUnits"",""parseFloat"",""regexp"",""_ticksToUnits"",""parseInt"",""_beatsToUnits"",""_getTimeSignature"",""dot"",""numericValue"",""scalar"",""number"",""_secondsToUnits"",""samples"",""tr"",""q"",""total"",""fromType"",""_noArg"",""trim"",""typeName"",""quantity"",""expr"",""matching"",""match"",""freq"",""beats"",""_getBpm"",""seconds"",""ticks"",""_getPPQ"",""_now"",""bpm"",""timeSignature"",""PPQ"",""toSeconds"",""toTicks"",""toFrequency"",""toMidi"",""toSamples"",""toMilliseconds"",""Time_TimeClass"",""TimeClass"",""Time_extends"",""capture"",""quantize"",""quantTo"",""nextSubdivision"",""subdiv"",""percent"",""subdivision"",""toNotation"",""testNotations"",""power"",""closest"",""closestSeconds"",""notation"",""notationSeconds"",""abs"",""toBarsBeatsSixteenths"",""quarterTime"",""quarters"",""measures"",""sixteenths"",""sixteenthString"",""join"",""Time"",""Frequency_FrequencyClass"",""FrequencyClass"",""Frequency_extends"",""setA4"",""note"",""pitch"",""octave"",""noteNumber"",""noteToScaleIndex"",""toLowerCase"",""transpose"",""harmonize"",""intervals"",""toNote"",""scaleIndexToNote"",""cbb"",""c#"",""cx"",""dbb"",""d#"",""dx"",""ebb"",""eb"",""e#"",""ex"",""fbb"",""fb"",""f"",""f#"",""fx"",""gbb"",""gb"",""g"",""g#"",""gx"",""abb"",""ab"",""a"",""a#"",""ax"",""bbb"",""bb"",""b"",""b#"",""bx"",""Frequency"",""TransportTimeClass"",""TransportTime_extends"",""TransportTime"",""ToneWithContext_ToneWithContext"",""ToneWithContext"",""defaultContext"",""ToneWithContext_extends"",""immediate"",""attribute"",""member"",""props"",""Param_Param"",""Param"",""overridden"",""_minOutput"",""_param"",""input"",""_initialValue"",""defaultValue"",""convert"",""_toType"",""Param_extends"",""getValueAtTime"",""_fromType"",""cancelScheduledValues"",""minValue"",""maxValue"",""_is"",""min"",""computedTime"",""isFinite"",""JSON"",""stringify"",""before"",""beforeValue"",""previous"",""_linearInterpolate"",""_exponentialInterpolate"",""previousVal"",""_exponentialApproach"",""setRampPoint"",""currentVal"",""cancelAndHoldAtTime"",""linearRampToValueAtTime"",""exponentialRampToValueAtTime"",""exponentialRampTo"",""rampTime"",""linearRampTo"",""targetRampTo"",""exponentialApproachValueAtTime"",""timeConstant"",""setTargetAtTime"",""setValueCurveAtTime"",""values"",""duration"",""scaling"",""startingValue"",""segTime"",""valueAtTime"",""sampleTime"",""rampTo"",""t0"",""v0"",""v1"",""exp"",""t1"",""ToneAudioNode_ToneAudioNode"",""ToneAudioNode"",""_internalChannels"",""ToneAudioNode_extends"",""output"",""_isAudioNode"",""node"",""_getInternalNodes"",""nodeList"",""_setChannelProperties"",""channelInterpretation"",""_getChannelProperties"",""connect"",""outputNum"",""inputNum"",""toDestination"",""toMaster"",""warn"",""chain"",""nodes"",""connectSeries"",""fan"",""first"",""reduce"",""prev"",""current"",""srcNode"",""dstNode"",""outputNumber"",""inputNumber"",""readOnly"",""str"",""writable"",""noOp"",""Gain_Gain"",""Gain"",""_gainNode"",""Gain_extends"",""OfflineContext_OfflineContext"",""OfflineContext"",""channels"",""OfflineAudioContext"",""_currentTime"",""_duration"",""OfflineContext_extends"",""render"",""ToneAudioBuffer_ToneAudioBuffer"",""ToneAudioBuffer"",""onload"",""reverse"",""url"",""catch"",""onerror"",""ToneAudioBuffer_extends"",""_buffer"",""loaded"",""_reversed"",""_reverse"",""promise"",""downloads"",""audioBuffer"",""e_1"",""fromArray"",""array"",""isMultidimensional"",""multiChannelArray"",""copyToChannel"",""toMono"",""chanNum"",""toArray"",""outputArray"",""Float32Array"",""numChannels_1"",""channel"",""channelArray"",""sample"",""ret"",""startSamples"",""endSamples"",""retBuffer"",""subarray"",""rev"",""fromUrl"",""matches"",""extensions"",""extension"",""extensions_1"",""ext"",""supportsType"",""replace"",""fetch"",""baseUrl"",""response"",""ok"",""arrayBuffer"",""document"",""createElement"",""canPlayType"",""Offline"",""originalContext"",""bufferPromise"",""ToneAudioBuffers_ToneAudioBuffers"",""ToneAudioBuffers"",""_buffers"",""_loadingCount"",""urls"",""_bufferLoaded"",""ToneAudioBuffers_extends"",""every"",""clear"",""Delay_Delay"",""Delay"",""maxDelayInSeconds"",""maxDelay"",""delayTime"",""_delayNode"",""Delay_extends"",""StateTimeline"",""initial"",""_initial"",""StateTimeline_extends"",""setStateAtTime"",""getLastState"",""getNextState"",""event_2"",""TickSignal_TickSignal"",""TickSignal"",""_sig"",""offset"",""_multiplier"",""multiplier"",""TickSignal_extends"",""computedValue"",""prevEvent"",""segments"",""rampVal"",""ticksUntilTime"",""_getTicksUntilEvent"",""computedVal"",""segmentDur"",""val0"",""val1"",""onTheLineEvent"",""getTicksAtTime"",""getDurationOfTicks"",""currentTick"",""getTimeOfTick"",""tick"",""delta"",""k"",""sqrt"",""sol1"",""ticksToTime"",""when"",""timeToTicks"",""computedDuration"",""startTicks"",""TickSource_TickSource"",""TickSource"",""_state"",""_tickOffset"",""setTicksAtTime"",""TickSource_extends"",""stop"",""pause"",""stopEvent"",""tmpEvent"",""lastState"",""elapsedTicks"",""periodStartTime"",""offsetEvent"",""getSecondsAtTime"",""elapsedSeconds"",""getStateAtTime"",""absoluteTicks"",""forEachTickBetween"",""computedStartTime"",""computedEndTime"",""lastStateEvent"",""maxStartTime"",""nextTickTime"",""Clock_Clock"",""Clock"",""_lastUpdate"",""_boundLoop"",""_loop"",""_tickSource"",""Clock_extends"",""ceil"",""TicksClass"",""Ticks_extends"",""Ticks"",""Midi_MidiClass"",""MidiClass"",""Midi_extends"",""Midi"",""Draw_Draw"",""Draw"",""expiration"",""anticipation"",""_boundDrawLoop"",""_drawLoop"",""_animationFrame"",""Draw_extends"",""schedule"",""requestAnimationFrame"",""cancelAnimationFrame"",""IntervalTimeline_IntervalTimeline"",""IntervalTimeline"",""_root"",""_length"",""IntervalTimeline_extends"",""IntervalNode"",""insert"",""updateHeight"",""updateMax"",""_rebalance"",""parent"",""results"",""search"",""results_1"",""_removeNode"",""_setRoot"",""_replaceNodeInParent"",""replacement"",""isLeftChild"",""left"",""right"",""temp"",""getBalance"",""_rotateLeft"",""pivotNode"",""_rotateRight"",""balance"",""low"",""allNodes_1"",""traverse"",""searchAfter"",""high"",""_left"",""_right"",""height"",""point"",""Volume_Volume"",""Volume"",""volume"",""_unmutedVolume"",""mute"",""Volume_extends"",""Destination_Destination"",""Destination"",""rawContext"",""Destination_extends"",""TransportEvent_TransportEvent"",""TransportEvent"",""_eventId"",""_once"",""invoke"",""TransportRepeatEvent_TransportRepeatEvent"",""TransportRepeatEvent"",""_currentId"",""_nextId"",""_nextTick"",""_boundRestart"",""_restart"",""_interval"",""TransportRepeatEvent_extends"",""_createEvents"",""scheduleOnce"",""Transport_Transport"",""Transport"",""_loopStart"",""_loopEnd"",""_scheduledEvents"",""_repeatedEvents"",""_syncedSignals"",""_swingAmount"",""_ppq"",""ppq"",""_clock"",""_processTick"",""_bindClockEvents"",""_timeSignature"",""_swingTicks"",""Transport_extends"",""loopEnd"",""loopStart"",""swing"",""swingSubdivision"",""tickTime"",""progress"",""amount"",""sin"",""PI"",""_addEvent"",""scheduleRepeat"",""eventId"",""item"",""timeline"",""computedAfter"",""offsetTicks"",""toggle"",""timeSig"",""startPosition"",""endPosition"",""setLoopPoints"",""remainingTicks"",""syncSignal"",""signal"",""ratio"",""computedFreq"",""ratioSignal"",""unsyncSignal"",""syncedSignal"",""Source_Source"",""Source"",""_synced"",""_scheduled"",""_syncedStart"",""_syncedStop"",""_volume"",""onstop"",""Source_extends"",""_clampToCurrentTime"",""restart"",""sched"",""_start"",""_stop"",""sync"",""stateEvent"",""startOffset"",""unsync"",""OneShotSource_OneShotSource"",""OneShotSource"",""onended"",""_startTime"",""_stopTime"",""_fadeIn"",""fadeIn"",""_fadeOut"",""fadeOut"",""_curve"",""curve"",""OneShotSource_extends"",""_startGain"",""fadeInTime"",""_stopGain"",""cancelStop"",""fadeOutTime"",""additionalTail"",""_stopSource"",""_onended"",""BufferSource_ToneBufferSource"",""ToneBufferSource"",""_source"",""_sourceStarted"",""_sourceStopped"",""playbackRate"",""BufferSource_extends"",""computedOffset"",""computedDur"",""Noise_Noise"",""Noise"",""_playbackRate"",""Noise_extends"",""_noiseBuffers"",""rate"",""random"",""_noiseCache"",""brown"",""pink"",""white"",""channelNum"",""lastOut"",""b0"",""b1"",""b2"",""b3"",""b4"",""b5"",""b6"",""Signal_Signal"",""Signal"",""override"",""_constantSource"",""Signal_extends"",""connectSignal"",""OscillatorNode_ToneOscillatorNode"",""ToneOscillatorNode"",""_oscillator"",""detune"",""OscillatorNode_extends"",""setPeriodicWave"",""periodicWave"",""Oscillator_Oscillator"",""Oscillator"",""_partials"",""partials"",""_partialCount"",""partialCount"",""baseType"",""phase"",""Oscillator_extends"",""oscillator"",""_wave"",""syncFrequency"",""unsyncFrequency"",""_getCachedPeriodicWave"",""oscProps"",""_periodicWaveCache"",""find"",""description"",""_phase"",""arrayA"",""arrayB"",""element"",""isBasicType"",""cache"",""_getRealImaginary"",""partial"",""exec"",""periodicWaveSize"",""fftSize"",""piFactor"",""TypeError"",""cos"",""_inverseFFT"",""sum"",""_getInitialValue"",""twoPi"",""SignalOperator_SignalOperator"",""SignalOperator"",""SignalOperator_extends"",""WaveShaper_WaveShaper"",""WaveShaper"",""_shaper"",""mapping"",""setMap"",""WaveShaper_extends"",""normalized"",""oversample"",""oversampling"",""isOverSampleType"",""includes"",""AudioToGain_AudioToGain"",""AudioToGain"",""_norm"",""x"",""AudioToGain_extends"",""Multiply_Multiply"",""Multiply"",""_mult"",""factor"",""Multiply_extends"",""AMOscillator_AMOscillator"",""AMOscillator"",""_modulationScale"",""_modulationNode"",""_carrier"",""_modulator"",""modulationType"",""harmonicity"",""AMOscillator_extends"",""FMOscillator_FMOscillator"",""FMOscillator"",""modulationIndex"",""FMOscillator_extends"",""PulseOscillator_PulseOscillator"",""PulseOscillator"",""_widthGate"",""_thresh"",""width"",""_sawtooth"",""PulseOscillator_extends"",""FatOscillator_FatOscillator"",""FatOscillator"",""_oscillators"",""_spread"",""spread"",""count"",""FatOscillator_extends"",""_forEach"",""osc"",""iterator"",""start_1"",""step_1"",""PWMOscillator_PWMOscillator"",""PWMOscillator"",""sourceType"",""_scale"",""_pulse"",""modulationFrequency"",""PWMOscillator_extends"",""OmniOscillatorSourceMap"",""am"",""fat"",""fm"",""pulse"",""pwm"",""OmniOscillator_OmniOscillator"",""OmniOscillator"",""OmniOscillator_extends"",""_sourceType"",""substr"",""_createNewOscillator"",""_getOscType"",""oscType"",""OscConstructor"",""oldOsc_1"",""blockTime"",""sType"",""mType"",""Player_Player"",""Player"",""_activeSources"",""Set"",""_onload"",""autostart"",""Player_extends"",""_onSourceEnd"",""delete"",""size"",""comptuedOffset"",""origDuration"",""implicitEnd"",""seek"",""Add_Add"",""Add"",""_sum"",""addend"",""Add_extends"",""Abs_Abs"",""Abs"",""_abs"",""Abs_extends"",""GainToAudio_GainToAudio"",""GainToAudio"",""GainToAudio_extends"",""Negate_Negate"",""Negate"",""_multiply"",""Negate_extends"",""Subtract_Subtract"",""Subtract"",""_neg"",""subtrahend"",""Subtract_extends"",""Zero_Zero"",""Zero"",""_gain"",""Zero_extends"",""Envelope_Envelope"",""Envelope"",""attack"",""decay"",""sustain"",""release"",""attackCurve"",""releaseCurve"",""decayCurve"",""Envelope_extends"",""_getCurve"",""direction"",""curveName"",""EnvelopeCurves"",""_setCurve"",""curveDef"",""_attackCurve"",""_releaseCurve"",""_decayCurve"",""triggerAttack"",""velocity"",""currentValue"",""decayValue"",""decayStart"",""triggerRelease"",""triggerAttackRelease"",""cosineCurve"",""rippleCurve"",""curveLen"",""sineWave"",""stairsCurve"",""sineCurve"",""bounceCurve"",""invertCurve"",""out"",""j"",""bounce"",""In"",""Out"",""cosine"",""exponential"",""linear"",""ripple"",""sine"",""step"",""AmplitudeEnvelope_AmplitudeEnvelope"",""AmplitudeEnvelope"",""AmplitudeEnvelope_extends"",""Instrument_Instrument"",""Instrument"",""_original_triggerAttack"",""_original_triggerRelease"",""Instrument_extends"",""_syncMethod"",""timePosition"",""originalMethod"",""Monophonic_Monophonic"",""Monophonic"",""portamento"",""onsilence"",""Monophonic_extends"",""_triggerEnvelopeAttack"",""setNote"",""_triggerEnvelopeRelease"",""getLevelAtTime"",""envelope"",""computedFrequency"",""portTime"",""Synth_Synth"",""Synth"",""Synth_extends"",""computedAttack"",""computedDecay"",""Sampler_Sampler"",""Sampler"",""urlMap"",""mid"",""Sampler_extends"",""_findClosest"",""notes"",""difference"",""closestNote"",""releaseAll"",""PolySynth_PolySynth"",""PolySynth"",""_availableVoices"",""_activeVoices"",""_voices"",""voice"",""polyphony"",""PolySynth_extends"",""_getActiveVoice"",""_makeVoiceAvailable"",""activeVoiceIndex"",""findIndex"",""_getNextAvailableVoice"",""_triggerAttack"",""midiNote"",""_triggerRelease"",""_scheduleEvent"",""disposed"",""durationSeconds"",""v"",""MembraneSynth_MembraneSynth"",""MembraneSynth"",""pitchDecay"",""octaves"",""MembraneSynth_extends"",""hertz"",""maxNote"",""ToneEvent_ToneEvent"",""ToneEvent"",""_startOffset"",""_probability"",""probability"",""_humanize"",""humanize"",""ToneEvent_extends"",""_rescheduleEvents"",""startTick"",""_getLoopDuration"",""_tick"",""prob"",""variation"",""reschedulTime"",""lastEvent"",""loopDuration"",""Part_Part"",""Part"",""events"",""Part_extends"",""computedOffset_1"",""_startNote"",""at"",""timeInTicks"",""result"",""next"",""done"",""_restartEvent"",""_setAll"",""attr"",""_testLoopBoundries"",""Sequence_Sequence"",""Sequence"",""_part"",""_seqCallback"",""_eventsArray"",""_subdivision"",""Sequence_extends"",""_createSequence"",""_eventsUpdated"",""_indexTime"",""Proxy"",""_rescheduleSequence"",""sequence"",""eventOffset"",""CrossFade_CrossFade"",""CrossFade"",""_panner"",""_split"",""_g2a"",""fade"",""pan"",""CrossFade_extends"",""Effect_Effect"",""Effect"",""_dryWet"",""wet"",""effectSend"",""effectReturn"",""Effect_extends"",""connectEffect"",""effect"",""FeedbackEffect_FeedbackEffect"",""FeedbackEffect"",""_feedbackGain"",""FeedbackEffect_extends"",""FeedbackDelay_FeedbackDelay"",""FeedbackDelay"",""FeedbackDelay_extends"",""Convolver_Convolver"",""Convolver"",""_convolver"",""normalize"",""Convolver_extends"",""buff"",""norm"",""Merge_Merge"",""Merge"",""_merger"",""Merge_extends"",""Reverb_Reverb"",""Reverb"",""preDelay"",""Reverb_extends"",""generate"",""noiseL"",""noiseR"",""merge"",""gainNode"",""Analyser_Analyser"",""Analyser"",""_analyser"",""Analyser_extends"",""smoothing"",""getValue"",""getFloatFrequencyData"",""getFloatTimeDomainData"",""frequencyBinCount"",""smoothingTimeConstant"",""Filter_Filter"",""Filter"",""_filters"",""Q"",""rolloff"",""Filter_extends"",""filter"",""_rolloff"",""rolloffNum"",""possibilities"",""cascadingCount"",""getFrequencyResponse"",""totalResponse"",""freqValues"",""magValues"",""phaseValues"",""filterClone"",""MultibandSplit_MultibandSplit"",""MultibandSplit"",""_lowMidFilter"",""lowFrequency"",""highFrequency"",""MultibandSplit_extends"",""EQ3_EQ3"",""EQ3"",""_multibandSplit"",""_lowGain"",""_midGain"",""_highGain"",""EQ3_extends"",""Compressor_Compressor"",""Compressor"",""_compressor"",""threshold"",""knee"",""Compressor_extends"",""reduction"",""Tone_now"",""Tone_Transport"",""Tone_Destination""],""mappings"":""CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,IACA,mBAAAG,eAAAC,IACAD,UAAAH,GACA,iBAAAC,QACAA,QAAA,KAAAD,IAEAD,EAAA,KAAAC,IARA,CASC,oBAAAK,UAAAC,KAAA,WACD,mBCTA,IAAAC,KAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAR,QAGA,IAAAC,EAAAK,EAAAE,IACAC,EAAAD,EACAE,GAAA,EACAV,YAUA,OANAW,EAAAH,GAAAI,KAAAX,EAAAD,QAAAC,IAAAD,QAAAO,GAGAN,EAAAS,GAAA,EAGAT,EAAAD,QA2CA,OAtCAO,EAAAM,EAAAF,EAGAJ,EAAAO,EAAAR,EAGAC,EAAAQ,EAAA,SAAAf,EAAAgB,EAAAC,GACAV,EAAAW,EAAAlB,EAAAgB,IACAG,OAAAC,eAAApB,EAAAgB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAxB,GACAmB,OAAAC,eAAApB,EAAA,cAAiDyB,OAAA,KAIjDlB,EAAAmB,EAAA,SAAAzB,GACA,IAAAgB,EAAAhB,KAAA0B,WACA,WAA2B,OAAA1B,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAM,EAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAU,EAAAC,GAAsD,OAAAV,OAAAW,UAAAC,eAAAnB,KAAAgB,EAAAC,IAGtDtB,EAAAyB,EAAA,GAIAzB,IAAA0B,EAAA,yDChCO,IAYHC,EAZSC,EAA+C,iBAAT/B,KAAoBA,KAAO,KAKjEgC,EAAkBD,IAC7BA,EAAUJ,eAAe,iBAAmBI,EAAUJ,eAAe,uBAiBjE,SAAUM,IAUV,IAA0BC,EAN/B,OAHKJ,GAAiBE,IASSE,EA5DxB,IAAIC,aA6DXL,EAAgBI,EACZH,IACHA,EAAUK,mBAAqBN,IATzBA,EAXJC,GAAaA,EAAUK,qBAC1BN,EAAgBC,EAAUK,oBC5C3B,IAAAC,EAAA,WA2BC,SAAAA,EAAYC,EAAsBC,EAAyBC,GAE1DvC,KAAKwC,UAAYH,EACjBrC,KAAKyC,MAAQH,EACbtC,KAAK0C,gBAAkBH,EAGvBvC,KAAK2C,eAwGP,OAlGSP,EAAAX,UAAAmB,cAAR,WAEC,IAAMC,EAAO,IAAIC,MAEhB,uBAA8C,IAAvB9C,KAAK0C,iBAAwBK,QAAQ,GAAE,6WAczDC,EAAUC,IAAIC,gBAAgBL,GAC9BM,EAAS,IAAIC,OAAOJ,GAE1BG,EAAOE,UAAYrD,KAAKwC,UAAUc,KAAKtD,MAEvCA,KAAKuD,QAAUJ,GAMRf,EAAAX,UAAA+B,eAAR,eAAAC,EAAAzD,KACCA,KAAK0D,SAAWC,WAAW,WAC1BF,EAAKD,iBACLC,EAAKjB,aACoB,IAAvBxC,KAAK0C,kBAMDN,EAAAX,UAAAkB,aAAR,WACC,GAAmB,WAAf3C,KAAKyC,MACR,IACCzC,KAAK4C,gBACJ,MAAOgB,GAER5D,KAAKyC,MAAQ,UACbzC,KAAK2C,mBAEmB,YAAf3C,KAAKyC,OACfzC,KAAKwD,kBAOCpB,EAAAX,UAAAoC,cAAR,WACK7D,KAAK0D,WACRI,aAAa9D,KAAK0D,UAClB1D,KAAK0D,SAAW,GAEb1D,KAAKuD,UACRvD,KAAKuD,QAAQQ,YACb/D,KAAKuD,QAAQF,UAAY,OAO3BvC,OAAAC,eAAIqB,EAAAX,UAAA,sBAAJ,WACC,OAAOzB,KAAK0C,qBAEb,SAAmBsB,GAClBhE,KAAK0C,gBAAkBuB,KAAKC,IAAIF,EAAU,IAAM,OAC7B,WAAfhE,KAAKyC,OACRzC,KAAKuD,QAAQY,YAAYF,KAAKC,IAAe,IAAXF,EAAiB,qCAOrDlD,OAAAC,eAAIqB,EAAAX,UAAA,YAAJ,WACC,OAAOzB,KAAKyC,WAEb,SAASH,GACRtC,KAAK6D,gBACL7D,KAAKyC,MAAQH,EACbtC,KAAK2C,gDAMNP,EAAAX,UAAA2C,QAAA,WACCpE,KAAK6D,iBAEPzB,EA1IA,GCHM,SAAUiC,EAAQC,GACvB,YAAsB,IAARA,EAMT,SAAUC,EAAaD,GAC5B,OAAQD,EAAQC,GAMX,SAAUE,EAAWF,GAC1B,MAAsB,mBAARA,EAMT,SAAUG,EAASH,GACxB,MAAuB,iBAARA,EAMV,SAAUI,EAASJ,GACxB,MAAgD,oBAAxCxD,OAAOW,UAAUkD,SAASpE,KAAK+D,IAA8BA,EAAIM,cAAgB9D,OAMpF,SAAU+D,EAAUP,GACzB,MAAuB,kBAARA,EAMV,SAAUQ,EAAQR,GACvB,OAAQS,MAAMD,QAAQR,GAMjB,SAAUU,EAASV,GACxB,MAAuB,iBAARA,EAOV,SAAUW,EAAOX,GACtB,OAAOU,EAASV,IAAQ,sCAAsCY,KAAKZ,GC1D9D,SAAUa,EAAab,GAC5B,OAAOA,aAAexD,QAAWsE,QAAQC,IAAIf,EAAK,WAChDc,QAAQC,IAAIf,EAAK,UAClBE,EAAWF,EAAIgB,gBAMX,SAAUC,EAAYjB,GAC3B,OAAOA,aAAexD,QAAUsE,QAAQC,IAAIf,EAAK,aAC/Cc,QAAQC,IAAIf,EAAK,WACjBkB,EAAelB,EAAIrC,UAAYwD,EAAsBnB,EAAIrC,UAMtD,SAAUwD,EAAsBnB,GACrC,OAAOA,aAAexD,QAAWsE,QAAQC,IAAIf,EAAK,gBACjDE,EAAWF,EAAIoB,kBAAoBN,QAAQC,IAAIf,EAAK,cAMhD,SAAUkB,EAAelB,GAC9B,OAAOA,aAAexD,QAAWsE,QAAQC,IAAIf,EAAK,gBACjDE,EAAWF,EAAIqB,QAAUnB,EAAWF,EAAIsB,UAAYR,QAAQC,IAAIf,EAAK,cAMjE,SAAUuB,EAAcvB,GAC7B,OAAOA,aAAexD,QAAWsE,QAAQC,IAAIf,EAAK,eAC9Cc,QAAQC,IAAIf,EAAK,cAAgBE,EAAWF,EAAIwB,MCjCrD,SAASC,EAAOC,EAAa1B,GAC5B,MAAe,UAAR0B,GAAmBb,EAAab,IAAQiB,EAAYjB,IAAQuB,EAAcvB,GAY5E,SAAU2B,EAAUC,eAAaC,KAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAD,EAAAC,EAAA,GAAAC,UAAAD,GACtC,IAAKD,EAAQG,OAAU,OAAOJ,EAC9B,IAAMK,EAASJ,EAAQK,QAEvB,GAAI9B,EAASwB,IAAWxB,EAAS6B,GAChC,IAAK,IAAMP,KAAOO,EACbR,EAAOC,EAAKO,EAAOP,IACtBE,EAAOF,GAAOO,EAAOP,GACXtB,EAAS6B,EAAOP,KACrBE,EAAOF,IAAQlF,OAAO2F,OAAOP,IAAMQ,MAAKV,MAAQU,IACrDT,EAAUC,EAAOF,GAAMO,EAAOP,KAE9BlF,OAAO2F,OAAOP,IAAMS,MAAKX,GAAMO,EAAOP,GAAWW,IAKpD,OAAOV,EAASW,WAAA,GAACV,GAAMW,OAAKV,IAavB,SAAUW,EACfC,EACAC,EACAC,EACAC,cADA,IAAAD,UAGA,IAAME,KACAC,EAAOrC,MAAMsC,KAAKL,GAEpBtC,EAAS0C,EAAK,KAAOF,IAAW9B,QAAQC,IAAI+B,EAAK,GAAIF,KAEjCpG,OAAOmG,KAAKG,EAAK,IAAIE,KAAK,SAAAtB,GAAO,OAAAZ,QAAQC,IAAI0B,EAAUf,OAG7EC,EAAUkB,IAAIT,MAAIQ,GAAUE,EAAK,GAAEV,IAEnCO,EAAKM,OAAON,EAAKO,QAAQN,GAAS,GAElCE,EAAKZ,UAGP,GAAoB,IAAhBY,EAAKd,QAAgB5B,EAAS0C,EAAK,IACtCnB,EAAUkB,EAAMC,EAAK,SAErB,IAAK,IAAIhH,EAAI,EAAGA,EAAI6G,EAAKX,OAAQlG,IAC5BmE,EAAU6C,EAAKhH,MAClB+G,EAAKF,EAAK7G,IAAMgH,EAAKhH,IAIxB,OAAO6F,EAAUc,EAAUI,GAmBtB,SAAUM,EAAcC,EAAUC,GACvC,OAAItD,EAAQqD,GACJC,EAEAD,EAOH,SAAUE,EAAqDC,EAAQC,GAM5E,OALAA,EAAKC,QAAQ,SAAAC,GACR5C,QAAQC,IAAIwC,EAAKG,WACbH,EAAIG,KAGNH,EClHF,SAAUI,EAAOC,EAAoBC,GAC1C,IAAKD,EACJ,MAAM,IAAIE,MAAMD;;;;;;;ACgBlB,MAAAE,EAAA,oBAAAC,IA0BCtI,KAAAuI,OAAiB,EAqCTvI,KAAAwI,cAAwB,EA4FjC,OA5IQF,EAAAG,YAAP,WACC,UAqBSH,EAAA7G,UAAAiH,IAAV,eAAc,IAAAtB,KAAAhB,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAgB,EAAAhB,GAAAC,UAAAD,IAGTpG,KAAKuI,OAAUzG,GAAa9B,KAAK2E,aAAe7C,EAAU6G,oBAC7DvB,EAAKwB,QAAQ5I,KAAK2E,WAAa,KDrD5B,eAAc,IAAAyC,KAAAhB,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAgB,EAAAhB,GAAAC,UAAAD,GAEnByC,QAAQH,IAAG9B,MAAXiC,QAAezB,ICoDVR,WAAA,EAAIQ,KAUCkB,EAAA7G,UAAAwG,OAAV,SAAiBC,EAAoBC,GACpCF,EAAOC,EAAWC,IAenBG,EAAA7G,UAAA2C,QAAA,WAEC,OADApE,KAAKwI,cAAe,EACbxI,MAQRc,OAAAC,eAAIuH,EAAA7G,UAAA,gBAAJ,WACC,OAAOzB,KAAKwI,8CA6DbF,EAAA7G,UAAAkD,SAAA,WACC,OAAO3E,KAAKW,MAxIN2H,EAAAQ,QC1BuB,UDgL/BR,EA3JA,uTERAS,EAAA,SAAAC,GAAA,SAAAC,IAAA,IAAAxF,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,YA4GR,OA9GgEuI,EAAAD,EAAAD,GAc/DC,EAAAxH,UAAA0H,GAAA,SAAGC,EAAkB/G,GAArB,IAAAoB,EAAAzD,KAYC,OAVeoJ,EAAMC,MAAM,OACpBtB,QAAQ,SAAAuB,GACVjF,EAAQZ,EAAK8F,WAChB9F,EAAK8F,YAED9F,EAAK8F,QAAQ7H,eAAe4H,KAChC7F,EAAK8F,QAAQD,OAEd7F,EAAK8F,QAAQD,GAAWE,KAAKnH,KAEvBrC,MAQRiJ,EAAAxH,UAAAgI,KAAA,SAAKL,EAAkB/G,GAAvB,IAAAoB,EAAAzD,KACO0J,EAAgB,eAAC,IAAAtC,KAAAhB,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAgB,EAAAhB,GAAAC,UAAAD,GAEtB/D,EAAQuE,WAAA,EAAIQ,GAEZ3D,EAAKkG,IAAIP,EAAOM,IAGjB,OADA1J,KAAKmJ,GAAGC,EAAOM,GACR1J,MASRiJ,EAAAxH,UAAAkI,IAAA,SAAIP,EAAkB/G,GAAtB,IAAAoB,EAAAzD,KAmBC,OAlBeoJ,EAAMC,MAAM,OACpBtB,QAAQ,SAAAuB,GAId,GAHIjF,EAAQZ,EAAK8F,WAChB9F,EAAK8F,YAEF9F,EAAK8F,QAAQ7H,eAAe0H,GAC/B,GAAI/E,EAAQhC,GACXoB,EAAK8F,QAAQH,WAGb,IADA,IAAMQ,EAAYnG,EAAK8F,QAAQH,GACtBhJ,EAAI,EAAGA,EAAIwJ,EAAUtD,OAAQlG,IACjCwJ,EAAUxJ,KAAOiC,GACpBuH,EAAUrC,OAAOnH,EAAG,KAMlBJ,MASRiJ,EAAAxH,UAAAoI,KAAA,SAAKT,OAAO,IAAAhC,KAAAhB,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAgB,EAAAhB,EAAA,GAAAC,UAAAD,GACX,GAAIpG,KAAKuJ,SACJvJ,KAAKuJ,QAAQ7H,eAAe0H,GAE/B,IADA,IAAMQ,EAAY5J,KAAKuJ,QAAQH,GAAOU,MAAM,GACnC1J,EAAI,EAAG2J,EAAMH,EAAUtD,OAAQlG,EAAI2J,EAAK3J,IAChDwJ,EAAUxJ,GAAGwG,MAAM5G,KAAMoH,GAI5B,OAAOpH,MAMDiJ,EAAAe,MAAP,SAAaC,IAEX,KAAM,OAAQ,MAAO,QAAQlC,QAAQ,SAAApH,GACrC,IAAMa,EAAWV,OAAOoJ,yBAAyBjB,EAAQxH,UAAWd,GACpEG,OAAOC,eAAekJ,EAAOxI,UAAWd,EAAMa,MAOhDyH,EAAAxH,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKuJ,aAAUY,EACRnK,MAETiJ,EA9GA,CAAgEZ,8UCahE+B,EAAA,SAAApB,GAkBC,SAAAqB,IAAA,IAAA5G,EACCuF,EAAAzI,KAAAP,OAAOA,KAjBRyD,EAAA9C,KAAO,WAWG8C,EAAA6G,aAOT,IAAMC,EAAUzD,EAAqBuD,EAAS5B,cAAepC,WAAY,kBAEzE5C,EAAK+G,OAASD,EAAQC,SAqUxB,OA3VkEC,EAAAJ,EAAArB,GAyB1DqB,EAAA5B,YAAP,WACC,OACC+B,OAAQE,MAOV5J,OAAAC,eAAIsJ,EAAA5I,UAAA,cAAJ,WACC,OAAOzB,KAAKsK,UAAUhE,wCAOvB+D,EAAA5I,UAAAkJ,IAAA,SAAIvB,GAEHpJ,KAAKiI,OAAO7C,QAAQC,IAAI+D,EAAO,QAAS,+CACxCA,EAAMwB,KAAOxB,EAAMwB,KAAKC,UACxB,IAAMC,EAAQ9K,KAAK+K,QAAQ3B,EAAMwB,MAGjC,GAFA5K,KAAKsK,UAAU/C,OAAOuD,EAAQ,EAAG,EAAG1B,GAEhCpJ,KAAKsG,OAAStG,KAAKwK,OAAQ,CAC9B,IAAMQ,EAAOhL,KAAKsG,OAAStG,KAAKwK,OAChCxK,KAAKsK,UAAU/C,OAAO,EAAGyD,GAE1B,OAAOhL,MAQRqK,EAAA5I,UAAAwJ,OAAA,SAAO7B,GACN,IAAM0B,EAAQ9K,KAAKsK,UAAU9C,QAAQ4B,GAIrC,OAHe,IAAX0B,GACH9K,KAAKsK,UAAU/C,OAAOuD,EAAO,GAEvB9K,MAORqK,EAAA5I,UAAAP,IAAA,SAAI0J,EAAcM,QAAA,IAAAA,MAAA,QACjB,IAAMJ,EAAQ9K,KAAK+K,QAAQH,EAAMM,GACjC,OAAe,IAAXJ,EACI9K,KAAKsK,UAAUQ,GAEf,MAQTT,EAAA5I,UAAA0J,KAAA,WACC,OAAOnL,KAAKsK,UAAU,IAMvBD,EAAA5I,UAAA+E,MAAA,WACC,OAAOxG,KAAKsK,UAAU9D,SAOvB6D,EAAA5I,UAAA2J,SAAA,SAASR,EAAcM,QAAA,IAAAA,MAAA,QACtB,IAAMJ,EAAQ9K,KAAK+K,QAAQH,EAAMM,GACjC,OAAIJ,EAAQ,EAAI9K,KAAKsK,UAAUhE,OACvBtG,KAAKsK,UAAUQ,EAAQ,GAEvB,MAQTT,EAAA5I,UAAA4J,UAAA,SAAUT,GACT,IAAMb,EAAM/J,KAAKsK,UAAUhE,OAE3B,GAAIyD,EAAM,GAAK/J,KAAKsK,UAAUP,EAAM,GAAGa,KAAOA,EAC7C,OAAO5K,KAAKsK,UAAUP,EAAM,GAE7B,IAAMe,EAAQ9K,KAAK+K,QAAQH,GAC3B,OAAIE,EAAQ,GAAK,EACT9K,KAAKsK,UAAUQ,EAAQ,GAEvB,MAQTT,EAAA5I,UAAA6J,OAAA,SAAOC,GACN,GAAIvL,KAAKsK,UAAUhE,OAAS,EAAG,CAC9B,IAAIwE,EAAQ9K,KAAK+K,QAAQQ,GACzB,GAAIT,GAAS,EACZ,GAAI9K,KAAKsK,UAAUQ,GAAOF,OAASW,EAAO,CAEzC,IAAK,IAAInL,EAAI0K,EAAO1K,GAAK,GACpBJ,KAAKsK,UAAUlK,GAAGwK,OAASW,EADJnL,IAE1B0K,EAAQ1K,EAKVJ,KAAKsK,UAAYtK,KAAKsK,UAAUR,MAAM,EAAGgB,QAEzC9K,KAAKsK,UAAYtK,KAAKsK,UAAUR,MAAM,EAAGgB,EAAQ,QAGlD9K,KAAKsK,kBAE8B,IAA1BtK,KAAKsK,UAAUhE,QAErBtG,KAAKsK,UAAU,GAAGM,MAAQW,IAC7BvL,KAAKsK,cAGP,OAAOtK,MAQRqK,EAAA5I,UAAA+J,aAAA,SAAaZ,GACZ,IAAME,EAAQ9K,KAAK+K,QAAQH,GAI3B,OAHIE,GAAS,IACZ9K,KAAKsK,UAAYtK,KAAKsK,UAAUR,MAAMgB,EAAQ,IAExC9K,MAQRqK,EAAA5I,UAAAgK,cAAA,SAAcrC,GACb,IAAM0B,EAAQ9K,KAAKsK,UAAU9C,QAAQ4B,GACrC,OAAI0B,EAAQ,EACJ9K,KAAKsK,UAAUQ,EAAQ,GAEvB,MAWCT,EAAA5I,UAAAsJ,QAAV,SAAkBH,EAAcM,GAC/B,QAD+B,IAAAA,MAAA,QACD,IAA1BlL,KAAKsK,UAAUhE,OAClB,OAAQ,EAET,IAAIoF,EAAY,EACV3B,EAAM/J,KAAKsK,UAAUhE,OACvBqF,EAAM5B,EACV,GAAIA,EAAM,GAAK/J,KAAKsK,UAAUP,EAAM,GAAGmB,IAAUN,EAChD,OAAOb,EAAM,EAEd,KAAO2B,EAAYC,GAAK,CAEvB,IAAIC,EAAW3H,KAAK4H,MAAMH,GAAaC,EAAMD,GAAa,GACpDI,EAAQ9L,KAAKsK,UAAUsB,GACvBG,EAAY/L,KAAKsK,UAAUsB,EAAW,GAC5C,GAAIE,EAAMZ,KAAWN,EAAM,CAE1B,IAAK,IAAIxK,EAAIwL,EAAUxL,EAAIJ,KAAKsK,UAAUhE,OAAQlG,IAAK,CACpCJ,KAAKsK,UAAUlK,GACnB8K,KAAWN,IACxBgB,EAAWxL,GAGb,OAAOwL,EACD,GAAIE,EAAMZ,GAASN,GAAQmB,EAAUb,GAASN,EACpD,OAAOgB,EACGE,EAAMZ,GAASN,EAEzBe,EAAMC,EAGNF,EAAYE,EAAW,EAGzB,OAAQ,GAODvB,EAAA5I,UAAAuK,SAAR,SACC3J,EACA4J,EAAgBC,QAAhB,IAAAD,MAAA,QAAgB,IAAAC,MAAalM,KAAKsK,UAAUhE,OAAS,GAErDtG,KAAKsK,UAAUR,MAAMmC,EAAYC,EAAa,GAAGnE,QAAQ1F,IAO1DgI,EAAA5I,UAAAsG,QAAA,SAAQ1F,GAEP,OADArC,KAAKgM,SAAS3J,GACPrC,MAQRqK,EAAA5I,UAAA0K,cAAA,SAAcvB,EAAMvI,GAEnB,IAAM6J,EAAalM,KAAK+K,QAAQH,GAIhC,OAHoB,IAAhBsB,GACHlM,KAAKgM,SAAS3J,EAAU,EAAG6J,GAErBlM,MAQRqK,EAAA5I,UAAA2K,aAAA,SAAaxB,EAAMvI,GAElB,IAAM4J,EAAajM,KAAK+K,QAAQH,GAEhC,OADA5K,KAAKgM,SAAS3J,EAAU4J,EAAa,GAC9BjM,MAWRqK,EAAA5I,UAAA4K,eAAA,SAAeC,EAAmBC,EAAiBlK,GAClD,IAAI4J,EAAajM,KAAK+K,QAAQuB,GAC1BJ,EAAalM,KAAK+K,QAAQwB,GAa9B,OAZoB,IAAhBN,IAAqC,IAAhBC,GACpBlM,KAAKsK,UAAU2B,GAAYrB,OAAS0B,IACvCL,GAAc,GAGXjM,KAAKsK,UAAU4B,GAAYtB,OAAS2B,IACvCL,GAAc,GAEflM,KAAKgM,SAAS3J,EAAU4J,EAAYC,KACV,IAAhBD,GACVjM,KAAKgM,SAAS3J,EAAU,EAAG6J,GAErBlM,MASRqK,EAAA5I,UAAA+K,YAAA,SAAY5B,EAAcvI,GAIzB,IAFA,IAAI4J,EAAajM,KAAK+K,QAAQH,GAEvBqB,GAAc,GAAKjM,KAAKsK,UAAU2B,GAAYrB,MAAQA,GAC5DqB,IAGD,OADAjM,KAAKgM,SAAS3J,EAAU4J,EAAa,GAC9BjM,MAQRqK,EAAA5I,UAAAgL,cAAA,SAAc7B,EAAcvI,GAE3B,IAAM6J,EAAalM,KAAK+K,QAAQH,GAQhC,OAPoB,IAAhBsB,GACHlM,KAAKgM,SAAS,SAAA5C,GACTA,EAAMwB,OAASA,GAClBvI,EAAS+G,IAER,EAAG8C,GAEAlM,MAMRqK,EAAA5I,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKsK,aACEtK,MAETqK,EA3VA,CAAkEhC,GCjB5DqE,KAKA,SAAUC,EAAcC,GAC7BF,EAAiBlD,KAAKoD,GAcvB,IAAMC,KAKA,SAAUC,EAAeF,GAC9BC,EAAmBrD,KAAKoD,8nDCOzBG,EAAA,SAAA/D,GA2DC,SAAAgE,IAAA,IAAAvJ,EACCuF,EAAAzI,KAAAP,OAAOA,KA1DRyD,EAAA9C,KAAO,UA2BC8C,EAAAwJ,WAAa,IAAIC,IAKjBzJ,EAAA0J,UAA2C,IAAI/C,EAK/C3G,EAAA2J,YAAc,EAed3J,EAAA4J,cAAwB,EAO/B,IAAM9C,EAAUzD,EAAqBkG,EAAQvE,cAAepC,WAAY,mBAExE5C,EAAK6J,SAAW/C,EAAQtI,QAExBwB,EAAK8J,aAAehD,EAAQiD,YAC5B/J,EAAKgK,UAAYlD,EAAQkD,UAEzBhK,EAAKiK,QAAU,IAAItL,EAAOqB,EAAKoG,KAAKvG,KAAKG,EAAM,QAAS8G,EAAQoD,YAAapD,EAAQhI,gBACrFkB,EAAK0F,GAAG,OAAQ1F,EAAKmK,aAAatK,KAAKG,IAGvCA,EAAK6J,SAASO,iBAAiB,cAAe,WAC7CpK,EAAKoG,KAAK,cAAepG,EAAKqK,WAuUjC,OAhZ6BC,EAAAf,EAAAhE,GA6ErBgE,EAAAvE,YAAP,WACC,OACCkF,YAAa,SACb1L,QAASD,IACTwL,YAAa,cACbC,UAAW,GACXlL,eAAgB,MAOlByK,EAAAvL,UAAAuM,WAAA,WD/GK,IAA4BC,ECqHhC,OALKjO,KAAKqN,eDhHsBY,ECkHbjO,KDhHpB0M,EAAiB3E,QAAQ,SAAA6E,GAAM,OAAAA,EAAGqB,KCiHhCjO,KAAKqN,cAAe,GAEdrN,MAORgN,EAAAvL,UAAAyM,eAAA,WACC,OAAOlO,KAAKsN,SAASY,kBAEtBlB,EAAAvL,UAAA0M,iBAAA,WACC,OAAOnO,KAAKsN,SAASa,oBAEtBnB,EAAAvL,UAAA2M,mBAAA,WACC,OAAOpO,KAAKsN,SAASc,sBAEtBpB,EAAAvL,UAAA4M,mBAAA,WACC,OAAOrO,KAAKsN,SAASe,sBAEtBrB,EAAAvL,UAAA6M,aAAA,SAAaC,EAA0BjI,EAAgBkI,GACtD,OAAOxO,KAAKsN,SAASgB,aAAaC,EAAkBjI,EAAQkI,IAE7DxB,EAAAvL,UAAAgN,oBAAA,SAAoBC,GACnB,OAAO1O,KAAKsN,SAASmB,oBAAoBC,IAE1C1B,EAAAvL,UAAAkN,sBAAA,SAAsBC,GACrB,OAAO5O,KAAKsN,SAASqB,sBAAsBC,IAE5C5B,EAAAvL,UAAAoN,qBAAA,WACC,OAAO7O,KAAKsN,SAASuB,wBAEtB7B,EAAAvL,UAAAqN,gBAAA,WACC,OAAO9O,KAAKsN,SAASwB,mBAEtB9B,EAAAvL,UAAAsN,YAAA,SAAYC,GACX,OAAOhP,KAAKsN,SAASyB,YAAYC,IAElChC,EAAAvL,UAAAwN,yBAAA,WACC,OAAOjP,KAAKsN,SAAS2B,4BAEtBjC,EAAAvL,UAAAyN,WAAA,WACC,OAAOlP,KAAKsN,SAAS4B,cAEtBlC,EAAAvL,UAAA0N,gBAAA,SAAgBC,EAAuBC,GACtC,OAAOrP,KAAKsN,SAAS6B,gBAAgBC,EAAaC,IAEnDrC,EAAAvL,UAAA6N,aAAA,WACC,OAAOtP,KAAKsN,SAASgC,gBAEtBtC,EAAAvL,UAAA8N,mBAAA,SACCC,EACAC,EACAC,GAEA,OAAO1P,KAAKsN,SAASiC,mBAAmBC,EAAMC,EAAMC,IAErD1C,EAAAvL,UAAAkO,mBAAA,WACC,OAAO3P,KAAKsN,SAASqC,sBAEtB3C,EAAAvL,UAAAmO,iBAAA,WACC,OAAO5P,KAAKsN,SAASsC,oBAEtB5C,EAAAvL,UAAAoO,gBAAA,SAAgBC,GACf,OAAO9P,KAAKsN,SAASuC,gBAAgBC,IAMtChP,OAAAC,eAAIiM,EAAAvL,UAAA,mBAAJ,WACC,OAAOzB,KAAKsN,SAASyC,6CAKtBjP,OAAAC,eAAIiM,EAAAvL,UAAA,aAAJ,WACC,OAAOzB,KAAKsN,SAASQ,uCAKtBhN,OAAAC,eAAIiM,EAAAvL,UAAA,kBAAJ,WACC,OAAOzB,KAAKsN,SAASkB,4CAKtB1N,OAAAC,eAAIiM,EAAAvL,UAAA,gBAAJ,WACC,OAAOzB,KAAKsN,SAAS0C,0CAMtBlP,OAAAC,eAAIiM,EAAAvL,UAAA,iBAAJ,WAEC,OADAzB,KAAKiI,OAAOjI,KAAKqN,aAAc,sFACxBrN,KAAKiQ,gBAEb,SAAcC,GACblQ,KAAKiI,QAAQjI,KAAKqN,aAAc,qDAChCrN,KAAKiQ,WAAaC,mCAMnBpP,OAAAC,eAAIiM,EAAAvL,UAAA,mBAAJ,WAEC,OADAzB,KAAKiI,OAAOjI,KAAKqN,aAAc,sFACxBrN,KAAKmQ,kBAEb,SAAgBzP,GACfV,KAAKiI,QAAQjI,KAAKqN,aAAc,qDAChCrN,KAAKmQ,aAAezP,mCAarBI,OAAAC,eAAIiM,EAAAvL,UAAA,sBAAJ,WACC,OAAOzB,KAAK0N,QAAQnL,oBAErB,SAAmByB,GAClBhE,KAAK0N,QAAQnL,eAAiByB,mCAO/BlD,OAAAC,eAAIiM,EAAAvL,UAAA,mBAAJ,WACC,OAAOzB,KAAK0N,QAAQpL,UAErB,SAAgBA,GACftC,KAAK0N,QAAQpL,KAAOA,mCAcrBxB,OAAAC,eAAIiM,EAAAvL,UAAA,mBAAJ,WACC,OAAOzB,KAAKuN,kBAEb,SAAgB6C,GACf,IAAIC,EAAiB,EAErB,GADArQ,KAAKuN,aAAe6C,EAChBpL,EAASoL,GACZ,OAAQA,GACP,IAAK,cACJC,EAAiB,GACjB,MACD,IAAK,WACJA,EAAiB,GACjB,MACD,IAAK,WACJA,EAAiB,IACjB,MACD,IAAK,UACJA,EAAiB,IAIpBrQ,KAAKyN,UAAY4C,EACjBrQ,KAAKuC,eAAiB8N,EAAiB,mCAMxCvP,OAAAC,eAAIiM,EAAAvL,UAAA,kBAAJ,WACC,OAAOzB,KAAKsN,0CAMbN,EAAAvL,UAAA6O,IAAA,WACC,OAAOtQ,KAAKsN,SAASyC,YAAc/P,KAAKyN,WAOzCT,EAAAvL,UAAAmE,OAAA,WACC,MAA4B,cAAxB5F,KAAKsN,SAASQ,OAAyBtI,EAAexF,KAAKsN,UACvDtN,KAAKsN,SAAS1H,SAEd2K,QAAQC,WAQXxD,EAAAvL,UAAAkE,MAAN,0GACKH,EAAexF,KAAKsN,WACvB,EAAMtN,KAAKsN,SAAS3H,UADjB,YACHe,EAAA+J,+BAEGzQ,KAAKqN,eD1TkBY,EC2TbjO,KDzTf6M,EAAmB9E,QAAQ,SAAA6E,GAAM,OAAAA,EAAGqB,UAF/B,IAAuBA,OCkU5BjB,EAAAvL,UAAAiP,YAAA,SAAYC,GACX,GAAI3Q,KAAKiN,WAAW5H,IAAIsL,GACvB,OAAO3Q,KAAKiN,WAAW/L,IAAIyP,GAI3B,IAFA,IAAMC,EAAS5Q,KAAKsN,SAASgB,aAAa,EAAG,IAAKtO,KAAKsN,SAASkB,YAC1DqC,EAAMD,EAAOE,eAAe,GACzB1Q,EAAI,EAAGA,EAAIyQ,EAAIvK,OAAQlG,IAC/ByQ,EAAIzQ,GAAKuQ,EAEV,IAAMI,EAAW/Q,KAAKsN,SAASc,qBAO/B,OANA2C,EAASC,aAAe,EACxBD,EAASE,iBAAmB,WAC5BF,EAASH,OAASA,EAClBG,EAASG,MAAO,EAChBH,EAASI,MAAM,GACfnR,KAAKiN,WAAWmE,IAAIT,EAAKI,GAClBA,GAOT/D,EAAAvL,UAAA2C,QAAA,eAAAX,EAAAzD,KAKC,OAJAgJ,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK0N,QAAQtJ,UACbpE,KAAKmN,UAAU/I,UACftD,OAAOmG,KAAKjH,KAAKiN,YAAYoE,IAAI,SAAAV,GAAO,OAAAlN,EAAKwJ,WAAW0D,GAAKW,eACtDtR,MAWAgN,EAAAvL,UAAAmM,aAAR,WAGC,IAFA,IAAM0C,EAAMtQ,KAAKsQ,MACbiB,EAAavR,KAAKmN,UAAUhC,OACzBnL,KAAKmN,UAAU7G,QAAUiL,GAAcA,EAAW3G,MAAQ0F,GAEhEiB,EAAWlP,WAEXrC,KAAKmN,UAAU3G,QAEf+K,EAAavR,KAAKmN,UAAUhC,QAW9B6B,EAAAvL,UAAAkC,WAAA,SAAW6N,EAA8BC,GACxCzR,KAAKoN,cACL,IAAMkD,EAAMtQ,KAAKsQ,MAMjB,OALAtQ,KAAKmN,UAAUxC,KACdtI,SAAWmP,EACXE,GAAK1R,KAAKoN,YACVxC,KAAO0F,EAAMmB,IAEPzR,KAAKoN,aAObJ,EAAAvL,UAAAqC,aAAA,SAAa4N,GAAb,IAAAjO,EAAAzD,KAMC,OALAA,KAAKmN,UAAUpF,QAAQ,SAAAqB,GAClBA,EAAMsI,KAAOA,GAChBjO,EAAK0J,UAAUlC,OAAO7B,KAGjBpJ,MAETgN,EAhZA,CAA6BjE,GCnCvB4I,GACLC,eACAC,cAOGC,EAAyBH,EAKvB,SAAUI,IAIf,OAHID,IAAkBH,GAAgB5P,GACrCiQ,EAAW,IAAIjF,GAET+E,EAMF,SAAUE,EAAW/P,GAC1B6P,EAAgB7P,EAChBA,EAAQ+L,aAYH,SAAUiE,IACf,OAAOH,EAAclM,SAMtB,GAAI9D,IAAcA,EAAUoQ,qBAAsB,CACjD,IAAIC,EAAS,IACTrJ,EAGJ,IAAMsJ,EAAc,cAAcD,ELzDJ,aK2D9BtJ,QAAQH,IAAI,KAAK0J,EAAe,iCC7C3B,SAAUC,EAASC,GACxB,OAAOrO,KAAKsO,IAAI,GAAID,EAAK,IAMpB,SAAUE,EAASC,GACxB,OAAaxO,KAAKyE,IAAI+J,GAAQxO,KAAKyO,KAA5B,GAWF,SAAUC,EAAyB3O,GACxC,OAAOC,KAAKsO,IAAI,EAAIvO,EAAW,IAOhC,IAAI4O,EAAY,IAgBV,SAAUC,EAAKC,GACpB,OAAO7O,KAAK8O,MAMP,SAAgBD,GACrB,OAAO,GAAK,GAAK7O,KAAK+O,KAAKF,EAAYF,GAPrBK,CAAMH,IAgBnB,SAAUI,GAAKC,GACpB,OAAOP,EAAK3O,KAAKsO,IAAI,GAAIY,EAAO,IAAM,oVCxCvCC,GAAA,SAAApK,GAwBC,SAAAqK,EAAYpR,EAAkBb,EAAmBkS,GAAjD,IAAA7P,EACCuF,EAAAzI,KAAAP,OAAOA,YAHCyD,EAAA8P,aAAqB,IAK7B9P,EAAK+P,KAAOpS,EACZqC,EAAKgQ,OAASH,EACd7P,EAAKxB,QAAUA,EACfwB,EAAKiQ,aAAejQ,EAAKkQ,oBAqQ3B,OAnSsFC,GAAAP,EAAArK,GAoC3EqK,EAAA5R,UAAAkS,gBAAV,eAAAlQ,EAAAzD,KACC,OACC6T,IACCC,OAAQ,SAAC1S,GACR,OAAOqC,EAAKsQ,kBAAkBC,WAAW5S,KAE1C6S,OAAQ,wBAET7T,GACC0T,OAAQ,SAAC1S,GACR,OAAOqC,EAAKyQ,cAAcC,SAAS/S,EAAO,MAE3C6S,OAAQ,aAETzT,GACCsT,OAAQ,SAAC1S,GACR,OAAOqC,EAAK2Q,cAAcD,SAAS/S,EAAO,IAAMqC,EAAK4Q,sBAEtDJ,OAAQ,aAET5S,GACCyS,OAAQ,SAAC1S,EAAOkT,GACf,IAAMC,EAAeJ,SAAS/S,EAAO,IAC/BoT,EAAiB,MAARF,EAAc,IAAM,EACnC,OAAqB,IAAjBC,EACI9Q,EAAK2Q,cAAc3Q,EAAK4Q,qBAAuBG,EAE/C/Q,EAAK2Q,cAAc,EAAIG,GAAgBC,GAGhDP,OAAQ,kBAETQ,QACCX,OAAQ,SAAC1S,GACR,OAAOqC,EAAKiQ,aAAajQ,EAAK8P,cAAcO,OAAOvT,KAAKkD,EAAMrC,IAE/D6S,OAAQ,qBAETrS,GACCkS,OAAQ,SAAC1S,GACR,OAAOqC,EAAKiR,gBAAgBV,WAAW5S,KAExC6S,OAAQ,sBAETU,SACCb,OAAQ,SAAC1S,GACR,OAAO+S,SAAS/S,EAAO,IAAMqC,EAAKxB,QAAQuM,YAE3CyF,OAAQ,kBAET/D,GACC4D,OAAQ,SAAC1S,GACR,IAAMmT,EAAeJ,SAAS/S,EAAO,IACrC,OAAOqC,EAAK2Q,cAAc,GAAgC,EAA3BnQ,KAAK4H,MAAM0I,MAE3CN,OAAQ,aAETW,IACCd,OAAQ,SAACtT,EAAGqU,EAAGjT,GACd,IAAIkT,EAAQ,EAUZ,OATItU,GAAW,MAANA,IACRsU,GAASrR,EAAK2Q,cAAc3Q,EAAK4Q,oBAAsBL,WAAWxT,KAE/DqU,GAAW,MAANA,IACRC,GAASrR,EAAK2Q,cAAcJ,WAAWa,KAEpCjT,GAAW,MAANA,IACRkT,GAASrR,EAAK2Q,cAAcJ,WAAWpS,GAAK,IAEtCkT,GAERb,OAAQ,yDAYXZ,EAAA5R,UAAAoJ,QAAA,WAIC,GAHI7K,KAAKwT,gBAAgBH,GACxBrT,KAAK+U,SAAS/U,KAAKwT,MAEhBnP,EAAQrE,KAAKwT,MAChB,OAAOxT,KAAKgV,SACN,GAAIhQ,EAAShF,KAAKwT,OAASnP,EAAQrE,KAAKyT,SAC9C,IAAK,IAAMH,KAAStT,KAAK0T,aACxB,GAAI1T,KAAK0T,aAAaJ,GAAOW,OAAO/O,KAAKlF,KAAKwT,KAAKyB,QAAS,CAC3DjV,KAAKyT,OAASH,EACd,YAGI,GAAI5O,EAAS1E,KAAKwT,MAAO,CAC/B,IAAIsB,EAAQ,EACZ,IAAK,IAAMI,KAAYlV,KAAKwT,KAC3B,GAAIjP,EAAUvE,KAAKwT,KAAK0B,IAAY,CACnC,IAAMC,EAAWnV,KAAKwT,KAAK0B,GAG3BJ,GADa,IAAK9U,KAAK4E,YAAY5E,KAAKiC,QAASiT,GAAWrK,UAAYsK,EAI1E,OAAOL,EAER,GAAIvQ,EAAUvE,KAAKyT,QAAS,CAC3B,IAAM2B,EAAOpV,KAAK0T,aAAa1T,KAAKyT,QAC9B4B,EAAWrV,KAAKwT,KAAK7O,WAAWsQ,OAAOK,MAAMF,EAAKnB,QACxD,OAAIoB,EACID,EAAKtB,OAAOlN,MAAM5G,KAAMqV,EAASvL,MAAM,IAEvCsL,EAAKtB,OAAOvT,KAAKP,KAAMA,KAAKwT,MAE9B,OAAIxO,EAAShF,KAAKwT,MACjBQ,WAAWhU,KAAKwT,MAEhBxT,KAAKwT,MAWJH,EAAA5R,UAAAsS,kBAAV,SAA4BwB,GAC3B,OAAO,EAAIA,GAMFlC,EAAA5R,UAAA2S,cAAV,SAAwBoB,GACvB,OAAQ,GAAKxV,KAAKyV,UAAaD,GAMtBnC,EAAA5R,UAAAiT,gBAAV,SAA0BgB,GACzB,OAAOA,GAOErC,EAAA5R,UAAAyS,cAAV,SAAwByB,GACvB,OAAQA,EAAS3V,KAAKoU,cAAc,GAAMpU,KAAK4V,WAMtCvC,EAAA5R,UAAAuT,OAAV,WACC,OAAOhV,KAAK6V,QAUHxC,EAAA5R,UAAAgU,QAAV,WACC,OAAOzV,KAAKiC,QAAQ4P,UAAUiE,IAAI1U,OAMzBiS,EAAA5R,UAAA4S,kBAAV,WACC,OAAOrU,KAAKiC,QAAQ4P,UAAUkE,eAMrB1C,EAAA5R,UAAAmU,QAAV,WACC,OAAO5V,KAAKiC,QAAQ4P,UAAUmE,KAgB/B3C,EAAA5R,UAAAsT,SAAA,SAASzS,GAER,OADAtC,KAAKyT,YAAStJ,EACNnK,KAAKuT,cACZ,IAAK,IACJvT,KAAKwT,KAAOlR,EAAK2T,YACjB,MACD,IAAK,IACJjW,KAAKwT,KAAOlR,EAAK4T,UACjB,MACD,IAAK,KACJlW,KAAKwT,KAAOlR,EAAK6T,cACjB,MACD,IAAK,OACJnW,KAAKwT,KAAOlR,EAAK8T,SAGnB,OAAOpW,MAqBRqT,EAAA5R,UAAA0U,YAAA,WACC,OAAO,EAAInW,KAAKiW,aAMjB5C,EAAA5R,UAAA4U,UAAA,WACC,OAAOrW,KAAKiW,YAAcjW,KAAKiC,QAAQuM,YAMxC6E,EAAA5R,UAAA6U,eAAA,WACC,OAA0B,IAAnBtW,KAAKiW,aAEd5C,EAnSA,CAAsFhL,+UCtBtFkO,GAAA,SAAAvN,GAAA,SAAAwN,IAAA,IAAA/S,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAGCyD,EAAA9C,KAAO,SAsHR,OAxHQ8V,GAAAD,EAAAxN,GAIGwN,EAAA/U,UAAAkS,gBAAV,eAAAlQ,EAAAzD,KACC,OAAOc,OAAO2F,OAAOuC,EAAAvH,UAAMkS,gBAAepT,KAAAP,OACzCsQ,KACCwD,OAAQ,SAAC4C,GACR,OAAOjT,EAAKoS,OAAS,IAAKpS,EAAKmB,YAAiCnB,EAAKxB,QAASyU,GAAS7L,WAExFoJ,OAAQ,WAET0C,UACC7C,OAAQ,SAAC4C,GACR,IAAME,EAAU,IAAIJ,EAAU/S,EAAKxB,QAASyU,GAAS7L,UACrD,OAAOpH,EAAKiR,gBAAgBjR,EAAKxB,QAAQ4P,UAAUgF,gBAAgBD,KAEpE3C,OAAQ,aAeXuC,EAAA/U,UAAAkV,SAAA,SAASG,EAAcC,QAAA,IAAAA,MAAA,GACtB,IAAMC,EAAc,IAAKhX,KAAK4E,YAAiC5E,KAAKiC,QAAS6U,GAAQjM,UAC/EzJ,EAAQpB,KAAK6K,UAInB,OAAOzJ,GAHU6C,KAAK8O,MAAM3R,EAAQ4V,GACXA,EACJ5V,GACC2V,GAcvBP,EAAA/U,UAAAwV,WAAA,WAGC,IAHD,IAAAxT,EAAAzD,KACO4K,EAAO5K,KAAKiW,YACZiB,GAAgC,MAC7BC,EAAQ,EAAGA,EAAQ,EAAGA,IAAS,CACvC,IAAML,EAAS7S,KAAKsO,IAAI,EAAG4E,GAC3BD,EAAc1N,KAAKsN,EAAS,MAC5BI,EAAc1N,KAAKsN,EAAS,KAC5BI,EAAc1N,KAAKsN,EAAS,KAE7BI,EAAc1N,KAAK,KAEnB,IAAI4N,EAAUF,EAAc,GACxBG,EAAiB,IAAIb,EAAUxW,KAAKiC,QAASiV,EAAc,IAAIjB,YAQnE,OAPAiB,EAAcnP,QAAQ,SAAAuP,GACrB,IAAMC,EAAkB,IAAIf,EAAU/S,EAAKxB,QAASqV,GAAUrB,YAC1DhS,KAAKuT,IAAID,EAAkB3M,GAAQ3G,KAAKuT,IAAIH,EAAiBzM,KAChEwM,EAAUE,EACVD,EAAiBE,KAGZH,GAMRZ,EAAA/U,UAAAgW,sBAAA,WACC,IAAMC,EAAc1X,KAAKoU,cAAc,GACnCuD,EAAW3X,KAAK6K,UAAY6M,EAChCC,EAAW3D,WAAW2D,EAAS5U,QAAQ,IACvC,IAAM6U,EAAW3T,KAAK4H,MAAM8L,EAAW3X,KAAKqU,qBACxCwD,EAAcF,EAAW,EAAK,EAClCA,EAAW1T,KAAK4H,MAAM8L,GAAY3X,KAAKqU,oBACvC,IAAMyD,EAAkBD,EAAWlT,WAMnC,OALImT,EAAgBxR,OAAS,IAE5BuR,EAAa7D,WAAWA,WAAW8D,GAAiB/U,QAAQ,MAE3C6U,EAAUD,EAAUE,GACtBE,KAAK,MAMtBvB,EAAA/U,UAAAyU,QAAA,WACC,IAAMwB,EAAc1X,KAAKoU,cAAc,GACjCuD,EAAW3X,KAAK6K,UAAY6M,EAClC,OAAOzT,KAAK8O,MAAM4E,EAAW3X,KAAK4V,YAMnCY,EAAA/U,UAAAwU,UAAA,WACC,OAAOjW,KAAK6K,WAMb2L,EAAA/U,UAAA2U,OAAA,WACC,OAAOvD,EAAK7S,KAAKmW,gBAGRK,EAAA/U,UAAAoU,KAAV,WACC,OAAO7V,KAAKiC,QAAQqO,OAEtBkG,EAzHA,CACQpD,IA+HF,SAAU4E,GAAK5W,EAAmBkS,GACvC,OAAO,IAAIiD,GAAUxE,IAAc3Q,EAAOkS,mVC7H3C2E,GAAA,SAAAjP,GAAA,SAAAkP,IAAA,IAAAzU,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,YAEE8C,EAAA8P,aAA8B,OAgMxC,OApMiE4E,GAAAD,EAAAlP,GAUhElI,OAAAC,eAAWmX,EAAA,UAAX,WACC,OHgBMtF,OGdP,SAAc2C,IHiBT,SAAgBA,GACrB3C,EAAK2C,EGjBJ6C,CAAM7C,oCAOG2C,EAAAzW,UAAAkS,gBAAV,WACC,OAAO7S,OAAO2F,UAAWuC,EAAAvH,UAAMkS,gBAAepT,KAAAP,OAC7CmT,MACCc,OAAS,uBACTH,OAAA,SAAO1S,GACN,MAA0B,SAAtBpB,KAAKuT,aACDnS,EAEA8W,EAAehF,KAAK9R,KAI9BiX,MACCpE,OAAS,sCACTH,OAAA,SAAOwE,EAAOC,GACb,IACMC,EADQC,GAAiBH,EAAMI,eACmB,IAA5BvE,SAASoE,EAAQ,IAAM,GACnD,MAA0B,SAAtBvY,KAAKuT,aACDiF,EAEAN,EAAehF,KAAKsF,KAI9B5D,IACCX,OAAS,qDACTH,OAAA,SAAOtT,EAAGqU,EAAGjT,GACZ,IAAIkT,EAAQ,EAUZ,OATItU,GAAW,MAANA,IACRsU,GAAS9U,KAAKoU,cAAcpU,KAAKqU,oBAAsBL,WAAWxT,KAE/DqU,GAAW,MAANA,IACRC,GAAS9U,KAAKoU,cAAcJ,WAAWa,KAEpCjT,GAAW,MAANA,IACRkT,GAAS9U,KAAKoU,cAAcJ,WAAWpS,GAAK,IAEtCkT,OAgBXoD,EAAAzW,UAAAkX,UAAA,SAAU3U,GACT,OAAO,IAAIkU,EAAelY,KAAKiC,QAASjC,KAAK6K,UAAY8H,EAAyB3O,KAUnFkU,EAAAzW,UAAAmX,UAAA,SAAUC,GAAV,IAAApV,EAAAzD,KACC,OAAO6Y,EAAUxH,IAAI,SAAArN,GACpB,OAAOP,EAAKkV,UAAU3U,MAaxBkU,EAAAzW,UAAA2U,OAAA,WACC,OAAOvD,EAAK7S,KAAK6K,YAQlBqN,EAAAzW,UAAAqX,OAAA,WACC,IAAMvD,EAAOvV,KAAKmW,cACZzN,EAAMzE,KAAK+O,KAAKuC,EAAO2C,EAAetF,IACxC4F,EAAavU,KAAK8O,MAAM,GAAKrK,GAAO,GAClC6P,EAAStU,KAAK4H,MAAM2M,EAAa,IAKvC,OAJID,EAAS,IACZC,IAAe,GAAKD,GAEJQ,GAAiBP,EAAa,IAC7BD,EAAO5T,YAM1BuT,EAAAzW,UAAAwU,UAAA,WACC,OAAO,EAAIjN,EAAAvH,UAAMwU,UAAS1V,KAAAP,OAM3BkY,EAAAzW,UAAAyU,QAAA,WACC,IAAMwB,EAAc1X,KAAKoU,cAAc,GACjCuD,EAAW3X,KAAK6K,UAAY6M,EAClC,OAAOzT,KAAK4H,MAAM8L,EAAW3X,KAAK4V,YAUzBsC,EAAAzW,UAAAuT,OAAV,WACC,OAAO,GAMEkD,EAAAzW,UAAAsS,kBAAV,SAA4BwB,GAC3B,OAAOA,GAME2C,EAAAzW,UAAAyS,cAAV,SAAwByB,GACvB,OAAO,GAAc,GAARA,GAAe3V,KAAKyV,UAAYzV,KAAK4V,aAMzCsC,EAAAzW,UAAA2S,cAAV,SAAwBoB,GACvB,OAAO,EAAIxM,EAAAvH,UAAM2S,cAAa7T,KAAAP,KAACwV,IAMtB0C,EAAAzW,UAAAiT,gBAAV,SAA0BgB,GACzB,OAAO,EAAIA,GAULwC,EAAAhF,KAAP,SAAYC,GACX,OAAOD,GAAKC,IASN+E,EAAArF,KAAP,SAAYC,GACX,OAAOD,EAAKC,IAEdoF,EApMA,CAAiE3B,IA+M3DkC,IAELO,KAAS,EAAGpM,IAAQ,EAAGnM,EAAM,EAAGwY,KAAO,EAAGC,GAAO,EACjDC,IAAQ,EAAG7G,GAAO,EAAG5R,EAAM,EAAG0Y,KAAO,EAAGC,GAAO,EAC/CC,IAAQ,EAAGC,GAAO,EAAG3V,EAAM,EAAG4V,KAAO,EAAGC,GAAO,EAC/CC,IAAQ,EAAGC,GAAO,EAAGC,EAAM,EAAGC,KAAO,EAAGC,GAAO,EAC/CC,IAAQ,EAAGC,GAAO,EAAGC,EAAM,EAAGC,KAAO,EAAGC,GAAO,EAC/CC,IAAQ,EAAGC,GAAO,EAAGC,EAAM,EAAGC,KAAO,GAAIC,GAAO,GAChDC,IAAQ,EAAGC,GAAO,GAAIC,EAAM,GAAIC,KAAO,GAAIC,GAAO,IAQ7C9B,IAAoB,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,KAKhF,SAAU+B,GAAU1Z,EAA+BkS,GACxD,OAAO,IAAI2E,GAAelG,IAAc3Q,EAAOkS,mVC3OhDyH,GAAA,SAAA/R,GAAA,SAAA+R,IAAA,IAAAtX,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,kBAQR,OAVgFqa,GAAAD,EAAA/R,GAOrE+R,EAAAtZ,UAAAoU,KAAV,WACC,OAAO7V,KAAKiC,QAAQ4P,UAAU6D,SAEhCqF,EAVA,CAAgFxE,IAkB1E,SAAU0E,GAAc7Z,EAAmBkS,GAChD,OAAO,IAAIyH,GAAmBhJ,IAAc3Q,EAAOkS,mVCTpD4H,GAAA,SAAAlS,GAYC,SAAAmS,EAAYlZ,GAAZ,IAAAwB,EAAAzD,KACOuK,EAAUzD,EAAqBqU,EAAgB1S,cAAepC,WAAY,mBAChF5C,EAAAuF,EAAAzI,KAAAP,OAAOA,MACEob,eACR3X,EAAKxB,QAAUwB,EAAK2X,eAEpB3X,EAAKxB,QAAUsI,EAAQtI,UA2H1B,OA7IsFoZ,GAAAF,EAAAnS,GAsB9EmS,EAAA1S,YAAP,WACC,OACCxG,QAAS8P,MAOXoJ,EAAA1Z,UAAA6O,IAAA,WACC,OAAOtQ,KAAKiC,QAAQ8N,YAAc/P,KAAKiC,QAAQwL,WAMhD0N,EAAA1Z,UAAA6Z,UAAA,WACC,OAAOtb,KAAKiC,QAAQ8N,aAMrBjP,OAAAC,eAAIoa,EAAA1Z,UAAA,kBAAJ,WACC,OAAO,EAAIzB,KAAKiC,QAAQuM,4CAMzB1N,OAAAC,eAAIoa,EAAA1Z,UAAA,iBAAJ,WACC,OAAO,IAAMzB,KAAKiC,QAAQuM,4CAM3B2M,EAAA1Z,UAAAwU,UAAA,SAAUrL,GACT,OAAO,IAAI2L,GAAUvW,KAAKiC,QAAS2I,GAAMqL,aAM1CkF,EAAA1Z,UAAA0U,YAAA,SAAYZ,GACX,OAAO,IAAI0C,GAAejY,KAAKiC,QAASsT,GAAMY,eAM/CgF,EAAA1Z,UAAAyU,QAAA,SAAQtL,GACP,OAAO,IAAImQ,GAAmB/a,KAAKiC,QAAS2I,GAAMsL,WAanDiF,EAAA1Z,UAAAP,IAAA,eAAAuC,EAAAzD,KACO+G,EAAmC/G,KdhBX4E,YAAY6D,cckC1C,OAjBA3H,OAAOmG,KAAKF,GAAUgB,QAAQ,SAAAwT,GAC7B,GAAInW,QAAQC,IAAI5B,EAAM8X,GAAY,CACjC,IAAMC,EAAS/X,EAAK8X,GAChBhX,EAAUiX,IAAWjX,EAAUiX,EAAOpa,QAAUmD,EAAUiX,EAAOlW,gBACpEyB,EAASwU,GAAaC,EAAOpa,MACnBoa,aAAkBL,EAC5BpU,EAASwU,GAAaC,EAAOta,MAEnB4D,EAAQ0W,IAAW/W,EAAS+W,IAAWxW,EAASwW,IAAW3W,EAAU2W,GAC/EzU,EAASwU,GAAaC,SAGfzU,EAASwU,MAKZxU,GAkBRoU,EAAA1Z,UAAA2P,IAAA,SAAIqK,GAAJ,IAAAhY,EAAAzD,KAeC,OAdAc,OAAOmG,KAAKwU,GAAO1T,QAAQ,SAAAwT,GACtBnW,QAAQC,IAAI5B,EAAM8X,IAAchX,EAAUd,EAAK8X,MAC9C9X,EAAK8X,IAAchX,EAAUd,EAAK8X,GAAWna,QAAUmD,EAAUd,EAAK8X,GAAWjW,gBAEhF7B,EAAK8X,GAAWna,QAAUqa,EAAMF,KACnC9X,EAAK8X,GAAWna,MAAQqa,EAAMF,IAErB9X,EAAK8X,aAAsBJ,EACrC1X,EAAK8X,GAAWnK,IAAIqK,EAAMF,IAE1B9X,EAAK8X,GAAaE,EAAMF,MAIpBvb,MAETmb,EA7IA,CAAsF9S,+UCgBtFqT,GAAA,SAAA1S,GA2CC,SAAA2S,IAAA,IAAAlY,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqB6U,EAAMlT,cAAepC,WAAY,QAAS,QAAS,cAAYrG,KAxC3FyD,EAAA9C,KAAO,QAeP8C,EAAAmY,YAAsB,EAoBdnY,EAAAoY,WAAa,KAOpB,IAAMtR,EAAUzD,EAAqB6U,EAAMlT,cAAepC,WAAY,QAAS,QAAS,mBAExF5C,EAAKwE,OAAO1D,EAAUgG,EAAQW,QAAU/F,EAAaoF,EAAQW,OAAQ,+BAGrEzH,EAAKqY,OAASrY,EAAKsY,MAAQxR,EAAQW,MACnCzH,EAAK8F,QAAU,IAAIa,EAA0B,KAC7C3G,EAAKuY,cAAgBvY,EAAKqY,OAAOG,aACjCxY,EAAK6P,MAAQ/I,EAAQ+I,MACrB7P,EAAKyY,QAAU3R,EAAQ2R,QAGnB3X,EAAUgG,EAAQnJ,QAAUmJ,EAAQnJ,QAAUqC,EAAK0Y,QAAQ1Y,EAAKuY,gBACnEvY,EAAK6B,eAAeiF,EAAQnJ,MAAO,KAiVtC,OA3YQgb,GAAAT,EAAA3S,GAKA2S,EAAAlT,YAAP,WACC,OAAO3H,OAAO2F,OAAOyU,GAAgBzS,eACpCyT,SAAS,EACT5I,MAAO,YAsDTxS,OAAAC,eAAI4a,EAAAla,UAAA,aAAJ,WACC,IAAM6O,EAAMtQ,KAAKsQ,MACjB,OAAOtQ,KAAKqc,eAAe/L,QAE5B,SAAUlP,GACTpB,KAAKgc,cAAgBhc,KAAKsc,UAAUlb,GACpCpB,KAAKuc,sBAAsBvc,KAAKsQ,OAChCtQ,KAAKsF,eAAelE,EAAOpB,KAAKsQ,wCAGjCxP,OAAAC,eAAI4a,EAAAla,UAAA,gBAAJ,WACC,MAAmB,SAAfzB,KAAKsT,OAAmC,cAAftT,KAAKsT,OAClB,gBAAftT,KAAKsT,OAA0C,aAAftT,KAAKsT,OACtB,kBAAftT,KAAKsT,OAA4C,UAAftT,KAAKsT,OACxB,QAAftT,KAAKsT,OAAkC,UAAftT,KAAKsT,OAAoC,YAAftT,KAAKsT,MAChD,EACkB,eAAftT,KAAKsT,OACP,EACiB,aAAftT,KAAKsT,OACP5I,IAED1K,KAAK8b,OAAOU,0CAIrB1b,OAAAC,eAAI4a,EAAAla,UAAA,gBAAJ,WACC,MAAmB,gBAAfzB,KAAKsT,OACO,eAAftT,KAAKsT,MACE,EAEAtT,KAAK8b,OAAOW,0CAObd,EAAAla,UAAAib,IAAR,SAAepY,EAAUhC,GACxB,OAAOtC,KAAKsT,QAAUhR,GAObqZ,EAAAla,UAAA6a,UAAV,SAAoB3L,GACnB,OAAI3Q,KAAKkc,UAAYlc,KAAK4b,WACrB5b,KAAK0c,IAAU/L,EAAK,QAChB3Q,KAAKiW,UAAUtF,GACZ3Q,KAAK0c,IAAc/L,EAAK,YAC3B0B,EAAS1B,GACN3Q,KAAK0c,IAAe/L,EAAK,aAC5B3Q,KAAKmW,YAAYxF,GACd3Q,KAAK0c,IAAiB/L,EAAK,eAC9B1M,KAAK0Y,IAAI1Y,KAAKC,IAAIyM,EAAK,GAAI,GACxB3Q,KAAK0c,IAAgB/L,EAAK,cAC7B1M,KAAK0Y,IAAI1Y,KAAKC,IAAIyM,GAAM,GAAI,GACzB3Q,KAAK0c,IAAc/L,EAAK,YAC3B1M,KAAKC,IAAIyM,EAAK,IACX3Q,KAAK0c,IAAY/L,EAAK,UACzBA,GAKDA,GAOCgL,EAAAla,UAAA0a,QAAV,SAAkBxL,GACjB,OAAI3Q,KAAKkc,SAA0B,aAAflc,KAAKsT,MACjBd,EAAS7B,GAETA,GASTgL,EAAAla,UAAA6D,eAAA,SAAelE,EAAawJ,GAC3B,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAC9B2J,EAAevU,KAAKsc,UAAUlb,GAWpC,OAVApB,KAAKiI,OAAO4U,SAAStI,IAAiBsI,SAASD,GAC9C,0CAA0CE,KAAKC,UAAU3b,GAAM,KAAK0b,KAAKC,UAAUnS,IAEpF5K,KAAK0I,IAAI1I,KAAKsT,MAAO,WAAYlS,EAAOwb,GACxC5c,KAAKuJ,QAAQoB,KACZC,KAAMgS,EACNta,KAAM,WACNlB,MAAOmT,IAERvU,KAAK8b,OAAOxW,eAAeiP,EAAcqI,GAClC5c,MAGR2b,EAAAla,UAAA4a,eAAA,SAAezR,GACd,IAAMgS,EAAe3Y,KAAKC,IAAIlE,KAAKiW,UAAUrL,GAAO,GAC9CW,EAAQvL,KAAKuJ,QAAQ6B,SAASwR,GAC9BI,EAAShd,KAAKuJ,QAAQrI,IAAI0b,GAC5Bxb,EAAQpB,KAAKgc,cAEjB,GAAe,OAAXgB,EACH5b,EAAQpB,KAAKgc,mBACP,GAAoB,cAAhBgB,EAAO1a,MAAmC,OAAViJ,GAAiC,aAAfA,EAAMjJ,KAW5D,GAAc,OAAViJ,EACVnK,EAAQ4b,EAAO5b,WACT,GAAmB,WAAfmK,EAAMjJ,MAAoC,gBAAfiJ,EAAMjJ,KAAwB,CACnE,IAAI2a,EAAcD,EAAO5b,MACzB,GAAoB,cAAhB4b,EAAO1a,KAGT2a,EADgB,QADXC,EAAWld,KAAKuJ,QAAQ8B,UAAU2R,EAAOpS,OAEhC5K,KAAKgc,cAELkB,EAAS9b,MAIxBA,EADkB,WAAfmK,EAAMjJ,KACDtC,KAAKmd,mBAAmBH,EAAOpS,KAAMqS,EAAa1R,EAAMX,KAAMW,EAAMnK,MAAOwb,GAE3E5c,KAAKod,wBAAwBJ,EAAOpS,KAAMqS,EAAa1R,EAAMX,KAAMW,EAAMnK,MAAOwb,QAGzFxb,EAAQ4b,EAAO5b,UA7ByE,CACxF,IAAM8b,EACFG,OAAW,EAEdA,EADgB,QAFXH,EAAWld,KAAKuJ,QAAQ8B,UAAU2R,EAAOpS,OAGhC5K,KAAKgc,cAELkB,EAAS9b,MAEpBmD,EAAUyY,EAAOjM,YACpB3P,EAAQpB,KAAKsd,qBAAqBN,EAAOpS,KAAMyS,EAAaL,EAAO5b,MAAO4b,EAAOjM,SAAU6L,IAsB7F,OAAO5c,KAAKmc,QAAQ/a,IAGrBua,EAAAla,UAAA8b,aAAA,SAAa3S,GACZA,EAAO5K,KAAKiW,UAAUrL,GACtB,IAAI4S,EAAaxd,KAAKqc,eAAezR,GAMrC,OALA5K,KAAKyd,oBAAoB7S,GACU,IAA/B5K,KAAKsc,UAAUkB,KAClBA,EAAaxd,KAAKmc,QAAQnc,KAAK6b,aAEhC7b,KAAKsF,eAAekY,EAAY5S,GACzB5K,MAGR2b,EAAAla,UAAAic,wBAAA,SAAwBtc,EAAamL,GACpC,IAAMgI,EAAevU,KAAKsc,UAAUlb,GAC9Bwb,EAAe5c,KAAKiW,UAAU1J,GAUpC,OATAvM,KAAKiI,OAAO4U,SAAStI,IAAiBsI,SAASD,GAC9C,mDAAmDE,KAAKC,UAAU3b,GAAM,KAAK0b,KAAKC,UAAUxQ,IAC7FvM,KAAKuJ,QAAQoB,KACZC,KAAMgS,EACNta,KAAM,SACNlB,MAAQmT,IAETvU,KAAK0I,IAAI1I,KAAKsT,MAAO,SAAUlS,EAAOwb,GACtC5c,KAAK8b,OAAO4B,wBAAwBnJ,EAAcqI,GAC3C5c,MAGR2b,EAAAla,UAAAkc,6BAAA,SAA6Bvc,EAAamL,GACzC,IAAIgI,EAAevU,KAAKsc,UAAUlb,GAClCmT,EAAetQ,KAAKC,IAAIlE,KAAK6b,WAAYtH,GACzC,IAAMqI,EAAe5c,KAAKiW,UAAU1J,GAWpC,OAVAvM,KAAKiI,OAAO4U,SAAStI,IAAiBsI,SAASD,GAC9C,wDAAwDE,KAAKC,UAAU3b,GAAM,KAAK0b,KAAKC,UAAUxQ,IAElGvM,KAAKuJ,QAAQoB,KACZC,KAAMgS,EACNta,KAAM,cACNlB,MAAQmT,IAETvU,KAAK0I,IAAI1I,KAAKsT,MAAO,cAAelS,EAAOwb,GAC3C5c,KAAK8b,OAAO6B,6BAA6BpJ,EAAcqI,GAChD5c,MAGR2b,EAAAla,UAAAmc,kBAAA,SAAkBxc,EAAayc,EAAgBvR,GAI9C,OAHAA,EAAYtM,KAAKiW,UAAU3J,GAC3BtM,KAAKud,aAAajR,GAClBtM,KAAK2d,6BAA6Bvc,EAAOkL,EAAYtM,KAAKiW,UAAU4H,IAC7D7d,MAGR2b,EAAAla,UAAAqc,aAAA,SAAa1c,EAAayc,EAAgBvR,GAIzC,OAHAA,EAAYtM,KAAKiW,UAAU3J,GAC3BtM,KAAKud,aAAajR,GAClBtM,KAAK0d,wBAAwBtc,EAAOkL,EAAYtM,KAAKiW,UAAU4H,IACxD7d,MAGR2b,EAAAla,UAAAsc,aAAA,SAAa3c,EAAayc,EAAgBvR,GAIzC,OAHAA,EAAYtM,KAAKiW,UAAU3J,GAC3BtM,KAAKud,aAAajR,GAClBtM,KAAKge,+BAA+B5c,EAAOkL,EAAWuR,GAC/C7d,MAGR2b,EAAAla,UAAAuc,+BAAA,SAA+B5c,EAAawJ,EAAYiT,GACvDjT,EAAO5K,KAAKiW,UAAUrL,GACtBiT,EAAW7d,KAAKiW,UAAU4H,GAC1B,IAAMI,EAAeha,KAAKyE,IAAImV,EAAW,GAAK5Z,KAAKyE,IAAI,KAKvD,OAJA1I,KAAKke,gBAAgB9c,EAAOwJ,EAAMqT,GAElCje,KAAKyd,oBAAoB7S,EAAkB,GAAXiT,GAChC7d,KAAK0d,wBAAwBtc,EAAOwJ,EAAOiT,GACpC7d,MAGR2b,EAAAla,UAAAyc,gBAAA,SAAgB9c,EAAakL,EAAiB2R,GAC7C,IAAM1J,EAAevU,KAAKsc,UAAUlb,GAEpCpB,KAAKiI,OAAO4U,SAASoB,IAAiBA,EAAe,EAAG,gDACxD,IAAMrB,EAAe5c,KAAKiW,UAAU3J,GAWpC,OAVAtM,KAAKiI,OAAO4U,SAAStI,IAAiBsI,SAASD,GAC9C,2CAA2CE,KAAKC,UAAU3b,GAAM,KAAK0b,KAAKC,UAAUzQ,IACrFtM,KAAKuJ,QAAQoB,KACZoG,SAAUkN,EACVrT,KAAMgS,EACNta,KAAM,YACNlB,MAAOmT,IAERvU,KAAK0I,IAAI1I,KAAKsT,MAAO,YAAalS,EAAOwb,EAAcqB,GACvDje,KAAK8b,OAAOoC,gBAAgB3J,EAAcqI,EAAcqB,GACjDje,MAGR2b,EAAAla,UAAA0c,oBAAA,SAAoBC,EAAgB9R,EAAiB+R,EAAgBC,QAAA,IAAAA,MAAA,GACpED,EAAWre,KAAKiW,UAAUoI,GAC1B/R,EAAYtM,KAAKiW,UAAU3J,GAC3B,IAAMiS,EAAgBve,KAAKsc,UAAU8B,EAAO,IAAME,EAClDte,KAAKsF,eAAetF,KAAKmc,QAAQoC,GAAgBjS,GAEjD,IADA,IAAMkS,EAAUH,GAAYD,EAAO9X,OAAS,GACnClG,EAAI,EAAGA,EAAIge,EAAO9X,OAAQlG,IAAK,CACvC,IAAMmU,EAAevU,KAAKsc,UAAU8B,EAAOhe,IAAMke,EACjDte,KAAK0d,wBAAwB1d,KAAKmc,QAAQ5H,GAAejI,EAAYlM,EAAIoe,GAE1E,OAAOxe,MAGR2b,EAAAla,UAAA8a,sBAAA,SAAsB3R,GACrB,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAKpC,OAJA5K,KAAKiI,OAAO4U,SAASD,GAAe,8CAA8CE,KAAKC,UAAUnS,IACjG5K,KAAKuJ,QAAQ+B,OAAOsR,GACpB5c,KAAK8b,OAAOS,sBAAsBK,GAClC5c,KAAK0I,IAAI1I,KAAKsT,MAAO,SAAUsJ,GACxB5c,MAGR2b,EAAAla,UAAAgc,oBAAA,SAAoB7S,GACnB,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAC9B6T,EAAcze,KAAKsc,UAAUtc,KAAKqc,eAAeO,IAEvD5c,KAAKiI,OAAO4U,SAASD,GAAe,4CAA4CE,KAAKC,UAAUnS,IAE/F5K,KAAK0I,IAAI1I,KAAKsT,MAAO,sBAAuBsJ,EAAc,SAAW6B,GAErEze,KAAK8b,OAAOS,sBAAsBK,GAIlC,IAAMI,EAAShd,KAAKuJ,QAAQrI,IAAI0b,GAC1BrR,EAAQvL,KAAKuJ,QAAQ6B,SAASwR,GAyBpC,OAxBII,GAAUA,EAAOpS,OAASgS,EAEzBrR,EACHvL,KAAKuJ,QAAQ+B,OAAOC,EAAMX,MAE1B5K,KAAKuJ,QAAQ+B,OAAOsR,EAAe5c,KAAK0e,YAE/BnT,IAEVvL,KAAKuJ,QAAQ+B,OAAOC,EAAMX,MACP,WAAfW,EAAMjJ,KACTtC,KAAK0d,wBAAwB1d,KAAKmc,QAAQsC,GAAc7B,GAC/B,gBAAfrR,EAAMjJ,MAChBtC,KAAK2d,6BAA6B3d,KAAKmc,QAAQsC,GAAc7B,IAK/D5c,KAAKuJ,QAAQoB,KACZC,KAAMgS,EACNta,KAAM,WACNlB,MAAOqd,IAERze,KAAK8b,OAAOxW,eAAemZ,EAAa7B,GACjC5c,MAGR2b,EAAAla,UAAAkd,OAAA,SAAOvd,EAAayc,EAAsBvR,GAMzC,YANmB,IAAAuR,MAAA,IACA,cAAf7d,KAAKsT,OAAwC,QAAftT,KAAKsT,OAAkC,aAAftT,KAAKsT,MAC9DtT,KAAK4d,kBAAkBxc,EAAOyc,EAAUvR,GAExCtM,KAAK8d,aAAa1c,EAAOyc,EAAUvR,GAE7BtM,MAGR2b,EAAAla,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKuJ,QAAQnF,UACNpE,MASE2b,EAAAla,UAAA6b,qBAAV,SAA+BsB,EAAYC,EAAYC,EAAYb,EAAsB/N,GACxF,OAAO4O,GAAMD,EAAKC,GAAM7a,KAAK8a,MAAM7O,EAAI0O,GAAMX,IAIpCtC,EAAAla,UAAA0b,mBAAV,SAA6ByB,EAAYC,EAAYG,EAAYF,EAAY5O,GAC5E,OAAO2O,GAAmB3O,EAAI0O,IAAOI,EAAKJ,IAA7BE,EAAKD,IAITlD,EAAAla,UAAA2b,wBAAV,SAAkCwB,EAAYC,EAAYG,EAAYF,EAAY5O,GACjF,OAAO2O,EAAK5a,KAAKsO,IAAIuM,EAAKD,GAAK3O,EAAI0O,IAAOI,EAAKJ,KAEjDjD,EA5YA,CACQT,gVCdR+D,GAAA,SAAAjW,GAAA,SAAAkW,IAAA,IAAAzb,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAGUyD,EAAA9C,KAAO,YA4CN8C,EAAA0b,uBA+LX,OA7OQC,GAAAF,EAAAlW,GAoBPlI,OAAAC,eAAIme,EAAAzd,UAAA,sBAAJ,WACC,OAAI8C,EAAUvE,KAAK+b,OACd5W,EAAanF,KAAK+b,QAAU/b,KAAK+b,iBAAiBL,GAC9C,EAEA1b,KAAK+b,MAAMrN,eAGZ,mCAOT5N,OAAAC,eAAIme,EAAAzd,UAAA,uBAAJ,WACC,OAAI8C,EAAUvE,KAAKqf,QACXrf,KAAKqf,OAAOzQ,gBAEZ,mCAgBDsQ,EAAAzd,UAAA6d,aAAR,SAAqBC,GACpB,OAAOhb,EAAUgb,KAAUA,aAAgBL,GAAiB3Z,EAAYga,KAOjEL,EAAAzd,UAAA+d,kBAAR,WACC,IAAMC,EAAWzf,KAAKmf,kBAAkBrV,MAAM,GAS9C,OARI9J,KAAKsf,aAAatf,KAAK+b,QAC1B0D,EAASjW,KAAKxJ,KAAK+b,OAEhB/b,KAAKsf,aAAatf,KAAKqf,SACtBrf,KAAK+b,QAAU/b,KAAKqf,QACvBI,EAASjW,KAAKxJ,KAAKqf,QAGdI,GAQAP,EAAAzd,UAAAie,sBAAR,SAA8BnV,GACZvK,KAAKwf,oBACbzX,QAAQ,SAAAwX,GAChBA,EAAKvO,aAAezG,EAAQyG,aAC5BuO,EAAKtO,iBAAmB1G,EAAQ0G,iBAChCsO,EAAKI,sBAAwBpV,EAAQoV,yBAQ/BT,EAAAzd,UAAAme,sBAAR,WACC,IAAMH,EAAWzf,KAAKwf,oBACtBxf,KAAKiI,OAAOwX,EAASnZ,OAAS,EAAG,kDAGjC,IAAMiZ,EAAOE,EAAS,GACtB,OACCzO,aAAcuO,EAAKvO,aACnBC,iBAAkBsO,EAAKtO,iBACvB0O,sBAAuBJ,EAAKI,wBAS9B7e,OAAAC,eAAIme,EAAAzd,UAAA,oBAAJ,WACC,OAAOzB,KAAK4f,wBAAwB5O,kBAErC,SAAiBA,GAChB,IAAMyK,EAAQzb,KAAK4f,wBAEnB5f,KAAK0f,sBAAsB5e,OAAO2F,OAAOgV,GAASzK,aAAYA,sCAa/DlQ,OAAAC,eAAIme,EAAAzd,UAAA,wBAAJ,WACC,OAAOzB,KAAK4f,wBAAwB3O,sBAErC,SAAqBA,GACpB,IAAMwK,EAAQzb,KAAK4f,wBAEnB5f,KAAK0f,sBAAsB5e,OAAO2F,OAAOgV,GAASxK,iBAAgBA,sCAQnEnQ,OAAAC,eAAIme,EAAAzd,UAAA,6BAAJ,WACC,OAAOzB,KAAK4f,wBAAwBD,2BAErC,SAA0BA,GACzB,IAAMlE,EAAQzb,KAAK4f,wBAEnB5f,KAAK0f,sBAAsB5e,OAAO2F,OAAOgV,GAASkE,sBAAqBA,sCAaxET,EAAAzd,UAAAoe,QAAA,SAAQjO,EAAwBkO,EAAeC,GAE9C,YAF+B,IAAAD,MAAA,QAAe,IAAAC,MAAA,GAC9CF,GAAQ7f,KAAM4R,EAAakO,EAAWC,GAC/B/f,MAMRkf,EAAAzd,UAAAue,cAAA,WAEC,OADAhgB,KAAK6f,QAAQ7f,KAAKiC,QAAQ2P,aACnB5R,MAQRkf,EAAAzd,UAAAwe,SAAA,WAEC,OADApX,QAAQqX,KAAK,+CACNlgB,KAAKggB,iBAObd,EAAAzd,UAAA6P,WAAA,SAAWM,EAAyBkO,EAAeC,GAElD,YAFmC,IAAAD,MAAA,QAAe,IAAAC,MAAA,GAClDzO,GAAWtR,KAAM4R,EAAakO,EAAWC,GAClC/f,MASRkf,EAAAzd,UAAA0e,MAAA,eAAM,IAAAC,KAAAha,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAga,EAAAha,GAAAC,UAAAD,GAEL,OADAia,GAAazZ,WAAA,GAAC5G,MAAI6G,OAAKuZ,IAChBpgB,MAMRkf,EAAAzd,UAAA6e,IAAA,mBAAA7c,EAAAzD,KAAIogB,KAAAha,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAga,EAAAha,GAAAC,UAAAD,GAEH,OADAga,EAAMrY,QAAQ,SAAAwX,GAAQ,OAAA9b,EAAKoc,QAAQN,KAC5Bvf,MAMRkf,EAAAzd,UAAA2C,QAAA,WAiBC,OAhBA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACTuE,EAAUvE,KAAK+b,SACd/b,KAAK+b,iBAAiBmD,EACzBlf,KAAK+b,MAAM3X,UACDmB,EAAYvF,KAAK+b,QAC3B/b,KAAK+b,MAAMzK,cAGT/M,EAAUvE,KAAKqf,UACdrf,KAAKqf,kBAAkBH,EAC1Blf,KAAKqf,OAAOjb,UACFmB,EAAYvF,KAAKqf,SAC3Brf,KAAKqf,OAAO/N,cAGdtR,KAAKmf,qBACEnf,MAETkf,EA9OA,CACQhE,IAuPF,SAAUmF,SAAc,IAAAD,KAAAha,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAga,EAAAha,GAAAC,UAAAD,GAC7B,IAAMma,EAAQH,EAAM5Z,QACpB4Z,EAAMI,OAAO,SAACC,EAAMC,GAMnB,OALID,aAAgBxB,GACnBwB,EAAKZ,QAAQa,GACHnb,EAAYkb,IACtBZ,GAAQY,EAAMC,GAERA,GACLH,GAWE,SAAUV,GAAQc,EAAqBC,EAAoBC,EAAkBC,GAWlF,SAXgE,IAAAD,MAAA,QAAkB,IAAAC,MAAA,GAElF7Y,EAAO1D,EAAUoc,GAAU,sCAC3B1Y,EAAO1D,EAAUqc,GAAU,qCAEvBA,aAAmB3B,IAAiB1Z,EAAYqb,KACnD3Y,EAAO2Y,EAAQlS,eAAiB,EAAG,yCAEpCzG,EAAO0Y,EAAQ/R,gBAAkB,EAAG,4CAG7BgS,aAAmB3B,IAAiB2B,aAAmBlF,IACzDnX,EAAUqc,EAAQ7E,SACrB6E,EAAUA,EAAQ7E,OAIpB,KAAO4E,aAAmB1B,IACrB1a,EAAUoc,EAAQtB,UACrBsB,EAAUA,EAAQtB,QAKhBla,EAAayb,GAChBD,EAAQd,QAAQe,EAAuBC,GAEvCF,EAAQd,QAAQe,EAASC,EAAcC,GAWnC,SAAUxP,GACfqP,EACAC,EACAC,EACAC,GAIA,QALA,IAAAD,MAAA,QACA,IAAAC,MAAA,GAIIvc,EAAUqc,GACb,KAAOA,aAAmB3B,IACrB2B,EAAQ7E,QACX6E,EAAUA,EAAQ7E,OAMrB,MAASxW,EAAYob,IAChBpc,EAAUoc,EAAQtB,UACrBsB,EAAUA,EAAQtB,QAIhBla,EAAayb,GAChBD,EAAQrP,WAAWsP,EAAuBC,GAChCtb,EAAYqb,GACtBD,EAAQrP,WAAWsP,EAASC,EAAcC,GAE1CH,EAAQrP,aC9VJ,SAAUyP,GAAS7a,EAAgB1E,GACpCsD,EAAQtD,GACXA,EAASuG,QAAQ,SAAAiZ,GAAO,OAAAD,GAAS7a,EAAQ8a,KAEzClgB,OAAOC,eAAemF,EAAQ1E,GAC7BP,YAAY,EACZggB,UAAU,IAQP,SAAUA,GAAS/a,EAAgB1E,GACpCsD,EAAQtD,GACXA,EAASuG,QAAQ,SAAAiZ,GAAO,OAAAC,GAAS/a,EAAQ8a,KAEzClgB,OAAOC,eAAemF,EAAQ1E,GAC7Byf,UAAU,IAKN,IAAMC,GAAgC,yVCb7CC,GAAA,SAAAnY,GAoBC,SAAAoY,IAAA,IAAA3d,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqBsa,EAAK3Y,cAAepC,WAAY,OAAQ,YAAUrG,KAnBrEyD,EAAA9C,KAAO,OAUR8C,EAAA4d,UAAsB5d,EAAKxB,QAAQiN,aAGlCzL,EAAAsY,MAAkBtY,EAAK4d,UACvB5d,EAAA4b,OAAmB5b,EAAK4d,UAMhC,IAAM9W,EAAUzD,EAAqBsa,EAAK3Y,cAAepC,WAAY,OAAQ,iBAE7E5C,EAAKgP,KAAO,IAAIiJ,IACfzZ,QAAUwB,EAAKxB,QACfia,QAAU3R,EAAQ2R,QAClBhR,MAAQzH,EAAK4d,UAAU5O,KACvBa,MAAQ/I,EAAQ+I,MAChBlS,MAAQmJ,EAAQkI,OAEjBsO,GAAStd,EAAM,UAoBjB,OAnD0D6d,GAAAF,EAAApY,GAkClDoY,EAAA3Y,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCyT,SAAU,EACVzJ,KAAO,EACPa,MAAQ,UAOV8N,EAAA3f,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKqhB,UAAU/P,aACftR,KAAKyS,KAAKrO,UACHpE,MAETohB,EAnDA,CAA0DnC,gVCR1DsC,GAAA,SAAAvY,GAwBC,SAAAwY,IAAA,IvBrByCC,EAAkBnb,EAAgBkI,EuBqB3E/K,EAECuF,EAAAzI,KAAAP,MACC2N,YAAa,UACb1L,QAASwD,EAAsBY,UAAU,IACxCA,UAAU,IvB1B4Bob,EuB0BGpb,UAAU,GvB1BKC,EuB0BDD,UAAU,GAAKA,UAAU,GvB1BRmI,EuB0BYnI,UAAU,GvBzB1F,IAAIqb,oBAAoBD,EAAUnb,EAAQkI,IuB0B/Cf,UAAW,EACXlL,eAAgBkD,EAAsBY,UAAU,IAC9C,IAAMA,UAAU,GAAGmI,WAAa,IAAMnI,UAAU,MACjDrG,YA/BHyD,EAAA9C,KAAO,iBAUC8C,EAAAke,aAAwB,EAuB/Ble,EAAKme,UAAYnc,EAAsBY,UAAU,IAChDA,UAAU,GAAGC,OAASD,UAAU,GAAGmI,WAAanI,UAAU,KAqC7D,OAzEoCwb,GAAAL,EAAAxY,GA0CnCwY,EAAA/f,UAAA6O,IAAA,WACC,OAAOtQ,KAAK2hB,cAMb7gB,OAAAC,eAAIygB,EAAA/f,UAAA,mBAAJ,WACC,OAAOzB,KAAK2hB,8CAMbH,EAAA/f,UAAAqgB,OAAA,WACC,KAAO9hB,KAAK4hB,UAAY5hB,KAAK2hB,cAAgB,GAE5C3hB,KAAK6J,KAAK,QAEV7J,KAAK2hB,cAAgB,IAAM3hB,KAAKwO,WAGjC,OAAOxO,KAAKsN,SAAS5H,kBAMtB8b,EAAA/f,UAAAkE,MAAA,WACC,OAAO4K,QAAQC,WAEjBgR,EAzEA,CAAoCzU,6nDC2BpCgV,GAAA,SAAA/Y,GAyBC,SAAAgZ,IAAA,IAAAve,EAECuF,EAAAzI,KAAAP,OAAOA,KAzBRyD,EAAA9C,KAAO,kBAeP8C,EAAAwe,OAA4Cf,GAY3C,IAAM3W,EAAUzD,EAAqBkb,EAAgBvZ,cAAepC,WAAY,MAAO,SAAU,mBAEjG5C,EAAKye,QAAU3X,EAAQ2X,QACvBze,EAAKwe,OAAS1X,EAAQ0X,OAElB1X,EAAQ4X,KAAOtc,EAAc0E,EAAQ4X,MAAQ5X,EAAQ4X,eAAeH,EACvEve,EAAK2N,IAAI7G,EAAQ4X,KACPnd,EAASuF,EAAQ4X,MAE3B1e,EAAKqC,KAAKyE,EAAQ4X,KAAKC,MAAM7X,EAAQ8X,WA8UxC,OApXqCC,GAAAN,EAAAhZ,GA0C7BgZ,EAAAvZ,YAAP,WACC,OACC4Z,QAASnB,GACTe,OAAQf,GACRgB,SAAS,IAOXphB,OAAAC,eAAIihB,EAAAvgB,UAAA,kBAAJ,WACC,OAAIzB,KAAKuiB,QACDviB,KAAKuiB,QAAQ/T,WAEbuD,IAAavD,4CAOtBwT,EAAAvgB,UAAA2P,IAAA,SAAIR,GAAJ,IAAAnN,EAAAzD,KAmBC,OAlBI4Q,aAAkBoR,EAEjBpR,EAAO4R,OACVxiB,KAAKuiB,QAAU3R,EAAO1P,MAGtB0P,EAAOqR,OAAS,WACfxe,EAAK2N,IAAIR,GACTnN,EAAKwe,OAAOxe,IAIdzD,KAAKuiB,QAAU3R,EAGZ5Q,KAAKyiB,WACRziB,KAAK0iB,WAEC1iB,MAMRgiB,EAAAvgB,UAAAP,IAAA,WACC,OAAOlB,KAAKuiB,SASPP,EAAAvgB,UAAAqE,KAAN,SAAWqc,yGACJQ,EAAUX,EAAgBlc,KAAKqc,GACrCH,EAAgBY,UAAUpZ,KAAKmZ,oBAEV,gCAAMA,iBAApBE,EAAcnc,EAAA+J,OACpBzQ,KAAKoR,IAAIyR,GAET7iB,KAAKiiB,OAAOjiB,mBAKZ,iBAFM8K,EAAQkX,EAAgBY,UAAUpb,QAAQmb,GAChDX,EAAgBY,UAAUrb,OAAOuD,EAAO,GAClCgY,SAEP,SAAO9iB,YAMRgiB,EAAAvgB,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKuiB,aAAUpY,EACRnK,MAQRgiB,EAAAvgB,UAAAshB,UAAA,SAAUC,GAST,IARA,IAAMC,EAAqBne,EAAQke,IAAUA,EAAM,GAAG1c,OAAS,EACzDmb,EAAWwB,EAAqBD,EAAM1c,OAAS,EAC/CyD,EAAMkZ,EAAsBD,EAAM,GAAoB1c,OAAS0c,EAAM1c,OACrErE,EAAU8P,IACVnB,EAAS3O,EAAQqM,aAAamT,EAAU1X,EAAK9H,EAAQuM,YACrD0U,EAAqCD,GAAmC,IAAbxB,EACtCuB,GAAzBA,GAEOviB,EAAI,EAAGA,EAAIghB,EAAUhhB,IAC7BmQ,EAAOuS,cAAcD,EAAkBziB,GAAIA,GAG5C,OADAT,KAAKuiB,QAAU3R,EACR5Q,MAORgiB,EAAAvgB,UAAA2hB,OAAA,SAAOC,GACN,GAAI5e,EAAS4e,GACZrjB,KAAK+iB,UAAU/iB,KAAKsjB,QAAQD,QACtB,CAGN,IAFA,IAAIE,EAAc,IAAIC,aAAaxjB,KAAKsG,QAClCmd,EAAczjB,KAAKuO,iBAChBmV,EAAU,EAAGA,EAAUD,EAAaC,IAE5C,IADA,IAAMC,EAAe3jB,KAAKsjB,QAAQI,GACzBtjB,EAAI,EAAGA,EAAIujB,EAAard,OAAQlG,IACxCmjB,EAAYnjB,IAAMujB,EAAavjB,GAIjCmjB,EAAcA,EAAYlS,IAAI,SAAAuS,GAAU,OAAAA,EAASH,IACjDzjB,KAAK+iB,UAAUQ,GAEhB,OAAOvjB,MAQRgiB,EAAAvgB,UAAA6hB,QAAA,SAAQI,GACP,GAAIjf,EAASif,GACZ,OAAO1jB,KAAK8Q,eAAe4S,GACrB,GAA8B,IAA1B1jB,KAAKuO,iBACf,OAAOvO,KAAKsjB,QAAQ,GAGpB,IADA,IAAMO,KACGpjB,EAAI,EAAGA,EAAIT,KAAKuO,iBAAkB9N,IAC1CojB,EAAIpjB,GAAKT,KAAK8Q,eAAerQ,GAE9B,OAAOojB,GAST7B,EAAAvgB,UAAAqP,eAAA,SAAe4S,GACd,OAAI1jB,KAAKuiB,QACDviB,KAAKuiB,QAAQzR,eAAe4S,GAE5B,IAAIF,aAAa,IAU1BxB,EAAAvgB,UAAAqI,MAAA,SAAMqH,EAAgBxF,QAAA,IAAAA,MAAe3L,KAAKqe,UACzC,IAAMyF,EAAe7f,KAAK4H,MAAMsF,EAAQnR,KAAKwO,YACvCuV,EAAa9f,KAAK4H,MAAMF,EAAM3L,KAAKwO,YACzCxO,KAAKiI,OAAO6b,EAAeC,EAAY,iDAGvC,IAFA,IAAMzd,EAASyd,EAAaD,EACtBE,EAAYjS,IAAazD,aAAatO,KAAKuO,iBAAkBjI,EAAQtG,KAAKwO,YACvEkV,EAAU,EAAGA,EAAU1jB,KAAKuO,iBAAkBmV,IACtDM,EAAUb,cAAcnjB,KAAK8Q,eAAe4S,GAASO,SAASH,EAAcC,GAAaL,GAE1F,OAAO,IAAI1B,EAAgBgC,IAMpBhC,EAAAvgB,UAAAihB,SAAR,WACC,GAAI1iB,KAAKwiB,OACR,IAAK,IAAIpiB,EAAI,EAAGA,EAAIJ,KAAKuO,iBAAkBnO,IAC1CJ,KAAK8Q,eAAe1Q,GAAG8hB,UAGzB,OAAOliB,MAMRc,OAAAC,eAAIihB,EAAAvgB,UAAA,cAAJ,WACC,OAAOzB,KAAKsG,OAAS,mCAMtBxF,OAAAC,eAAIihB,EAAAvgB,UAAA,gBAAJ,WACC,OAAIzB,KAAKuiB,QACDviB,KAAKuiB,QAAQlE,SAEb,mCAOTvd,OAAAC,eAAIihB,EAAAvgB,UAAA,cAAJ,WACC,OAAIzB,KAAKuiB,QACDviB,KAAKuiB,QAAQjc,OAEb,mCAOTxF,OAAAC,eAAIihB,EAAAvgB,UAAA,wBAAJ,WACC,OAAIzB,KAAKuiB,QACDviB,KAAKuiB,QAAQhU,iBAEb,mCAOTzN,OAAAC,eAAIihB,EAAAvgB,UAAA,eAAJ,WACC,OAAOzB,KAAKyiB,eAEb,SAAYyB,GACPlkB,KAAKyiB,YAAcyB,IACtBlkB,KAAKyiB,UAAYyB,EACjBlkB,KAAK0iB,6CAmBAV,EAAAe,UAAP,SAAiBC,GAChB,OAAO,IAAKhB,GAAmBe,UAAUC,IAQ7BhB,EAAAmC,QAAb,SAAqBhC,6FAEb,UADQ,IAAIH,GACClc,KAAKqc,WAAzB,SAAOzb,EAAA+J,cAWKuR,EAAAlc,KAAb,SAAkBqc,iHAIjB,GADMiC,EAAUjC,EAAI7M,MAAM,iBACb,CAGZ,IAFM+O,EAAaD,EAAQ,GAAG/a,MAAM,KAChCib,EAAYD,EAAW,GAC3Bje,EAAA,EAAkBme,EAAAF,EAAAje,EAAAme,EAAAje,OAAAF,IACjB,GADUoe,EAAGD,EAAAne,GACT4b,EAAgByC,aAAaD,GAAM,CACtCF,EAAYE,EACZ,MAGFrC,EAAMA,EAAIuC,QAAQN,EAAQ,GAAIE,GAGd,SAAMK,MAAM3C,EAAgB4C,QAAUzC,WACvD,KADM0C,EAAWne,EAAA+J,QACHqU,GACb,MAAM,IAAI1c,MAAM,uBAAuB+Z,GAEpB,SAAM0C,EAASE,sBAEf,OAFdA,EAAcre,EAAA+J,QAEA,EAAMsB,IAAalC,gBAAgBkV,WAEvD,SAFoBre,EAAA+J,cAcduR,EAAAyC,aAAP,SAAoBtC,GACnB,IAAMkC,EAAalC,EAAI9Y,MAAM,KACvBib,EAAYD,EAAWA,EAAW/d,OAAS,GAEjD,MAAoB,KADH0e,SAASC,cAAc,SAASC,YAAY,SAAWZ,IAO5DtC,EAAAQ,OAAb,iHACuB9b,EAAAsb,EAAgBY,kCAAhBxc,EAAAM,EAAAJ,QACrB,EADiBI,EAAAN,KAA6B,YAC9CO,EAAA8J,+BADqBrK,iCA7EhB4b,EAAA4C,QAAU,GAyBV5C,EAAAY,aAwDRZ,EApXA,CAAqC3Z,izCCA/B,SAAgB8c,GACrB9iB,EACAgc,EACAoD,EACAjT,eADA,IAAAiT,MAAA,QACA,IAAAjT,MAAqBuD,IAAavD,2GASlC,OANM4W,EAAkBrT,IAGxBC,EADM/P,EAAU,IAAIsf,GAAeE,EAAUpD,EAAU7P,KAIvD,EAAMnM,EAASJ,WASA,OATfyE,EAAA+J,OAGM4U,EAAgBpjB,EAAQ6f,SAG9B9P,EAAWoT,IAGI,EAAMC,UAGrB,OAHMzU,EAASlK,EAAA+J,QAGf,EAAO,IAAIsR,GAAgBnR,yVCpB5B0U,GAAA,SAAAtc,GAyBC,SAAAuc,IAAA,IAAA9hB,EAECuF,EAAAzI,KAAAP,OAAOA,KAzBRyD,EAAA9C,KAAO,mBAKC8C,EAAA+hB,SAAyC,IAAItY,IAU7CzJ,EAAAgiB,cAAwB,EAW/B,IAAMlb,EAAUzD,EACfye,EAAiB9c,cAAepC,WAAY,OAAQ,SAAU,WAAY,eAG3E5C,EAAKmhB,QAAUra,EAAQqa,QAGvB9jB,OAAOmG,KAAKsD,EAAQmb,MAAM3d,QAAQ,SAAApH,GACjC8C,EAAKgiB,gBACL,IAAMtD,EAAM5X,EAAQmb,KAAK/kB,GACzB8C,EAAKkH,IAAIhK,EAAMwhB,EAAK1e,EAAKkiB,cAAcriB,KAAKG,EAAM8G,EAAQ0X,aAiF7D,OAvHsC2D,GAAAL,EAAAvc,GA2C9Buc,EAAA9c,YAAP,WACC,OACCmc,QAAS,GACTvC,QAASnB,GACTe,OAAQf,GACRwE,UAQFH,EAAA9jB,UAAA4D,IAAA,SAAI1E,GACH,OAAOX,KAAKwlB,SAASngB,IAAI1E,EAAKgE,aAQ/B4gB,EAAA9jB,UAAAP,IAAA,SAAIP,GAEH,OADAX,KAAKiI,OAAOjI,KAAKqF,IAAI1E,GAAO,yCAAyCA,GAC9DX,KAAKwlB,SAAStkB,IAAIP,EAAKgE,aAMvB4gB,EAAA9jB,UAAAkkB,cAAR,SAAsBtjB,GACrBrC,KAAKylB,gBACsB,IAAvBzlB,KAAKylB,eAAuBpjB,GAC/BA,KAOFvB,OAAAC,eAAIwkB,EAAA9jB,UAAA,cAAJ,WACC,OAAOsD,MAAMsC,KAAKrH,KAAKwlB,UAAUK,MAAM,SAACnf,GAACA,EAAA,GAAkB,OAAZA,EAAA,GAAmB8b,0CASnE+C,EAAA9jB,UAAAkJ,IAAA,SACChK,EACAwhB,EACA9f,GAWA,YAXA,IAAAA,MAAA6e,IAEIiB,aAAeJ,IAClB/hB,KAAKwlB,SAASpU,IAAIzQ,EAAKgE,WAAYwd,GACnC9f,KACUwD,EAAcsc,IACxBniB,KAAKwlB,SAASpU,IAAIzQ,EAAKgE,WAAY,IAAIod,GAAgBI,IACvD9f,KACU2C,EAASmd,IACnBniB,KAAKwlB,SAASpU,IAAIzQ,EAAKgE,WAAY,IAAIod,GAAgB/hB,KAAK4kB,QAAUzC,EAAK9f,IAErErC,MAMRulB,EAAA9jB,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKwlB,SAASzd,QAAQ,SAAA6I,GAAU,OAAAA,EAAOxM,YACvCpE,KAAKwlB,SAASM,QACP9lB,MAETulB,EAvHA,CAAsCld,+UC3BtC0d,GAAA,SAAA/c,GAwBC,SAAAgd,IAAA,IAAAviB,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqBkf,EAAMvd,cAAepC,WAAY,YAAa,eAAarG,KAvB9EyD,EAAA9C,KAAO,QAyBf,IAAM4J,EAAUzD,EAAqBkf,EAAMvd,cAAepC,WAAY,YAAa,aAE7E4f,EAAoBxiB,EAAKwS,UAAU1L,EAAQ2b,iBACjDziB,EAAKyiB,SAAWjiB,KAAKC,IAAI+hB,EAAmBxiB,EAAKwS,UAAU1L,EAAQ4b,YAEnE1iB,EAAK2iB,WAAa3iB,EAAKsY,MAAQtY,EAAK4b,OAAS5b,EAAKxB,QAAQ8M,YAAYkX,GAEtExiB,EAAK0iB,UAAY,IAAIzK,IACpBzZ,QAASwB,EAAKxB,QACdiJ,MAAQzH,EAAK2iB,WAAWD,UACxB7S,MAAQ,OACRlS,MAAQmJ,EAAQ4b,YAGjBpF,GAAStd,EAAM,eAmBjB,OA5D2B4iB,GAAAL,EAAAhd,GA4CnBgd,EAAAvd,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClC0d,UAAY,EACZD,SAAU,KAOZF,EAAAvkB,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKomB,WAAW9U,aAChBtR,KAAKmmB,UAAU/hB,UACRpE,MAETgmB,EA5DA,CAA2B/G,gVCF3BqH,GAAA,SAAAtd,GAOC,SAAAsd,EAAYC,QAAA,IAAAA,MAAA,WAAZ,IAAA9iB,EACCuF,EAAAzI,KAAAP,OAAOA,YACPyD,EAAK+iB,SAAWD,IAqElB,OA9EsEE,GAAAH,EAAAtd,GAkBrEsd,EAAA7kB,UAAA4a,eAAA,SAAezR,GACd,IAAMxB,EAAQpJ,KAAKkB,IAAI0J,GACvB,OAAc,OAAVxB,EACIA,EAAM0E,MAEN9N,KAAKwmB,UAUdF,EAAA7kB,UAAAilB,eAAA,SAAe5Y,EAAsBlD,EAAeL,GAOnD,OAJAvK,KAAK2K,IAAI7J,OAAO2F,UAAW8D,GAC1BuD,MAAKA,EACLlD,KAAIA,KAEE5K,MASRsmB,EAAA7kB,UAAAklB,aAAA,SAAa7Y,EAAsBlD,GAGlC,IADA,IACSxK,EADKJ,KAAK+K,QAAQH,GACPxK,GAAK,EAAGA,IAAK,CAChC,IAAM0L,EAAQ9L,KAAKsK,UAAUlK,GAC7B,GAAI0L,EAAMgC,QAAUA,EACnB,OAAOhC,IAWVwa,EAAA7kB,UAAAmlB,aAAA,SAAa9Y,EAAsBlD,GAElC,IAAME,EAAQ9K,KAAK+K,QAAQH,GAC3B,IAAe,IAAXE,EACH,IAAK,IAAI1K,EAAI0K,EAAO1K,EAAIJ,KAAKsK,UAAUhE,OAAQlG,IAAK,CACnD,IAAMymB,EAAQ7mB,KAAKsK,UAAUlK,GAC7B,GAAIymB,EAAM/Y,QAAUA,EACnB,OAAO+Y,IAKZP,EA9EA,CAAsElc,+UCetE0c,GAAA,SAAA9d,GAcC,SAAA+d,IAAA,IAAAtjB,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBigB,EAAWte,cAAepC,WAAY,YAAUrG,KAd5EyD,EAAA9C,KAAO,aAEG8C,EAAA8F,QAAyC,IAAIa,EAASM,KAExDjH,EAAAujB,KAA2BvjB,EAAKxB,QAAQ4M,uBAEtCpL,EAAAqY,OAASrY,EAAKujB,KAAKC,OAErBxjB,EAAAyjB,YAAsB,EAO7B,IAAM3c,EAAUzD,EAAqBigB,EAAWte,cAAepC,WAAY,iBAE3E5C,EAAKujB,KAAOvjB,EAAKxB,QAAQ4M,uBACzBpL,EAAKujB,KAAK7V,MAAM,GAChB1N,EAAKqY,OAASrY,EAAKujB,KAAKC,OAGxBxjB,EAAKyjB,YAAc3c,EAAQ4c,WAG3B1jB,EAAK8F,QAAQ+B,OAAO,GAEpB7H,EAAK8F,QAAQoB,KACZgL,MAAO,EACP/K,KAAO,EACPtI,KAAO,WACPlB,MAAOqC,EAAK6Y,UAAU/R,EAAQnJ,SAE/BqC,EAAK6B,eAAeiF,EAAQnJ,MAAe,KA0N7C,OA7P0DgmB,GAAAL,EAAA/d,GAsClD+d,EAAAte,YAAP,WACC,OAAO3H,OAAO2F,OAAOiV,GAAMjT,eAC1B0e,WAAY,EACZjc,MAAO6G,IAAalD,uBAAuBoY,OAC3C3T,MAAO,QACPlS,MAAO,KAIT2lB,EAAAtlB,UAAAyc,gBAAA,SAAgB9c,EAAawJ,EAAYmG,GAExCnG,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAKud,aAAa3S,GAMlB,IALA,IAAMyc,EAAgBrnB,KAAKsc,UAAUlb,GAG/BkmB,EAAYtnB,KAAKuJ,QAAQrI,IAAI0J,GAC7B2c,EAAWtjB,KAAK8O,MAAM9O,KAAKC,IAAI,EAAI6M,EAAU,IAC1C3Q,EAAI,EAAGA,GAAKmnB,EAAUnnB,IAAK,CACnC,IAAMoe,EAAUzN,EAAW3Q,EAAIwK,EACzB4c,EAAUxnB,KAAKsd,qBAAqBgK,EAAU1c,KAAM0c,EAAUlmB,MAAOimB,EAAetW,EAAUyN,GACpGxe,KAAK0d,wBAAwB1d,KAAKmc,QAAQqL,GAAUhJ,GAErD,OAAOxe,MAGR+mB,EAAAtlB,UAAA6D,eAAA,SAAelE,EAAawJ,GAC3B,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GACpC5B,EAAAvH,UAAM6D,eAAc/E,KAAAP,KAACoB,EAAOwJ,GAC5B,IAAMxB,EAAQpJ,KAAKuJ,QAAQrI,IAAI0b,GACzBnR,EAAgBzL,KAAKuJ,QAAQkC,cAAcrC,GAC3Cqe,EAAiBznB,KAAK0nB,oBAAoBjc,EAAemR,GAE/D,OADAxT,EAAMuM,MAAQ1R,KAAKC,IAAIujB,EAAgB,GAChCznB,MAGR+mB,EAAAtlB,UAAAic,wBAAA,SAAwBtc,EAAawJ,GACpC,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GACpC5B,EAAAvH,UAAMic,wBAAuBnd,KAAAP,KAACoB,EAAOwJ,GACrC,IAAMxB,EAAQpJ,KAAKuJ,QAAQrI,IAAI0b,GACzBnR,EAAgBzL,KAAKuJ,QAAQkC,cAAcrC,GAC3Cqe,EAAiBznB,KAAK0nB,oBAAoBjc,EAAemR,GAE/D,OADAxT,EAAMuM,MAAQ1R,KAAKC,IAAIujB,EAAgB,GAChCznB,MAGR+mB,EAAAtlB,UAAAkc,6BAAA,SAA6Bvc,EAAawJ,GAEzCA,EAAO5K,KAAKiW,UAAUrL,GAQtB,IAPA,IAAM+c,EAAc3nB,KAAKsc,UAAUlb,GAG7BkmB,EAAYtnB,KAAKuJ,QAAQrI,IAAI0J,GAE7B2c,EAAWtjB,KAAK8O,MAAM9O,KAAKC,IAA8B,IAAzB0G,EAAO0c,EAAU1c,MAAY,IAC7Dgd,GAAehd,EAAO0c,EAAU1c,MAAQ2c,EACrCnnB,EAAI,EAAGA,GAAKmnB,EAAUnnB,IAAK,CACnC,IAAMoe,EAAUoJ,EAAaxnB,EAAIknB,EAAU1c,KACrC4c,EAAUxnB,KAAKod,wBAAwBkK,EAAU1c,KAAM0c,EAAUlmB,MAAOwJ,EAAM+c,EAAanJ,GACjGxe,KAAK0d,wBAAwB1d,KAAKmc,QAAQqL,GAAUhJ,GAErD,OAAOxe,MASA+mB,EAAAtlB,UAAAimB,oBAAR,SAA4Bte,EAAmCwB,GAC9D,GAAc,OAAVxB,EACHA,GACCuM,MAAQ,EACR/K,KAAO,EACPtI,KAAM,WACNlB,MAAO,QAEF,GAAIiD,EAAQ+E,EAAMuM,OAAQ,CAChC,IAAMlK,EAAgBzL,KAAKuJ,QAAQkC,cAAcrC,GACjDA,EAAMuM,MAAQ3V,KAAK0nB,oBAAoBjc,EAAerC,EAAMwB,MAE7D,IAAMid,EAAO7nB,KAAKsc,UAAUtc,KAAKqc,eAAejT,EAAMwB,OAClDkd,EAAO9nB,KAAKsc,UAAUtc,KAAKqc,eAAezR,IAExCmd,EAAiB/nB,KAAKuJ,QAAQrI,IAAI0J,GAIxC,OAHImd,GAAkBA,EAAend,OAASA,GAAgC,aAAxBmd,EAAezlB,OACpEwlB,EAAO9nB,KAAKsc,UAAUtc,KAAKqc,eAAezR,EAAO5K,KAAK0e,cAEhD,IAAO9T,EAAOxB,EAAMwB,OAASid,EAAOC,GAAQ1e,EAAMuM,OAS1DoR,EAAAtlB,UAAAumB,eAAA,SAAepd,GACd,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAC9BxB,EAAQpJ,KAAKuJ,QAAQrI,IAAI0b,GAC/B,OAAO3Y,KAAKC,IAAIlE,KAAK0nB,oBAAoBte,EAAOwT,GAAe,IAShEmK,EAAAtlB,UAAAwmB,mBAAA,SAAmBtS,EAAc/K,GAChC,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAC9Bsd,EAAcloB,KAAKgoB,eAAepd,GACxC,OAAO5K,KAAKmoB,cAAcD,EAAcvS,GAASiH,GAOlDmK,EAAAtlB,UAAA0mB,cAAA,SAAcC,GACb,IAAMpL,EAAShd,KAAKuJ,QAAQrI,IAAIknB,EAAM,SAChC7c,EAAQvL,KAAKuJ,QAAQ6B,SAASgd,EAAM,SAC1C,GAAIpL,GAAUA,EAAOrH,QAAUyS,EAC9B,OAAOpL,EAAOpS,KACR,GAAIoS,GAAUzR,GACL,WAAfA,EAAMjJ,MACN0a,EAAO5b,QAAUmK,EAAMnK,MAAO,CAC9B,IAAMymB,EAAO7nB,KAAKsc,UAAUtc,KAAKqc,eAAeW,EAAOpS,OAEjDyd,GADOroB,KAAKsc,UAAUtc,KAAKqc,eAAe9Q,EAAMX,OAChCid,IAAStc,EAAMX,KAAOoS,EAAOpS,MAC7C0d,EAAIrkB,KAAKskB,KAAKtkB,KAAKsO,IAAIsV,EAAM,GAAK,EAAIQ,GAASrL,EAAOrH,MAAQyS,IAC9DI,IAASX,EAAOS,GAAKD,EAE3B,OAAQG,EAAO,EAAIA,IADJX,EAAOS,GAAKD,GACOrL,EAAOpS,KACnC,OAAIoS,EACW,IAAjBA,EAAO5b,MACHsJ,IAEAsS,EAAOpS,MAAQwd,EAAOpL,EAAOrH,OAASqH,EAAO5b,MAG9CgnB,EAAOpoB,KAAKgc,eAWrB+K,EAAAtlB,UAAAgnB,YAAA,SAAY9S,EAAc+S,GACzB,OAAO1oB,KAAKioB,mBAAmBtS,EAAO+S,IAWvC3B,EAAAtlB,UAAAknB,YAAA,SAAYtK,EAAgBqK,GAC3B,IAAM9L,EAAe5c,KAAKiW,UAAUyS,GAC9BE,EAAmB5oB,KAAKiW,UAAUoI,GAClCwK,EAAa7oB,KAAKgoB,eAAepL,GAEvC,OADiB5c,KAAKgoB,eAAepL,EAAegM,GAClCC,GAMT9B,EAAAtlB,UAAA6a,UAAV,SAAoB3L,GACnB,MAAmB,QAAf3Q,KAAKsT,OAAmBtT,KAAKmnB,WACzB,GAAK,GAAKxW,EAAM3Q,KAAKmnB,YAErBne,EAAAvH,UAAM6a,UAAS/b,KAAAP,KAAC2Q,IAOfoW,EAAAtlB,UAAA0a,QAAV,SAAkBxL,GACjB,MAAmB,QAAf3Q,KAAKsT,OAAmBtT,KAAKmnB,WACxBxW,EAAM3Q,KAAKmnB,WAAc,GAE1Bne,EAAAvH,UAAM0a,QAAO5b,KAAAP,KAAC2Q,IAMvB7P,OAAAC,eAAIgmB,EAAAtlB,UAAA,kBAAJ,WACC,OAAOzB,KAAKknB,iBAEb,SAAe1mB,GAGd,IAAMgd,EAAaxd,KAAKoB,MACxBpB,KAAKknB,YAAc1mB,EACnBR,KAAKoB,MAAQoc,mCAMduJ,EAAAtlB,UAAAoe,QAAA,SAAQe,EAAoBC,EAAkBC,GAE7C,YAF2B,IAAAD,MAAA,QAAkB,IAAAC,MAAA,GAC7CjB,GAAQ7f,KAAKgnB,KAAMpG,EAASC,EAAcC,GACnC9gB,MAET+mB,EA7PA,CAA0DrL,gVCJ1DoN,GAAA,SAAA9f,GAsBC,SAAA+f,IAAA,IAAAtlB,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqBiiB,EAAWtgB,cAAepC,WAAY,gBAAcrG,KArBhFyD,EAAA9C,KAAO,aAUC8C,EAAAulB,OAAwB,IAAI1C,GAK5B7iB,EAAAwlB,YAA+C,IAAI7e,EAO1D,IAAMG,EAAUzD,EAAqBiiB,EAAWtgB,cAAepC,WAAY,qBAE3E5C,EAAKqP,UAAY,IAAIgU,IACpB7kB,QAASwB,EAAKxB,QACdqR,MAAO/I,EAAQ+I,MACflS,MAAOqC,EAAK0S,YAAY5L,EAAQuI,aAEjCiO,GAAStd,EAAM,aAGfA,EAAKulB,OAAOtC,eAAe,UAAW,GAEtCjjB,EAAKylB,eAAe,EAAG,KAmSzB,OAvU0DC,GAAAJ,EAAA/f,GAuClD+f,EAAAtgB,YAAP,WACC,OAAO3H,OAAO2F,QACbqM,UAAW,EACXQ,MAAO,SACL4H,GAAgBzS,gBAMpB3H,OAAAC,eAAIgoB,EAAAtnB,UAAA,aAAJ,WACC,OAAOzB,KAAKgpB,OAAO3M,eAAerc,KAAKsQ,wCASxCyY,EAAAtnB,UAAA0P,MAAA,SAAMvG,EAAYqc,GACjB,IAAMrK,EAAe5c,KAAKiW,UAAUrL,GAOpC,MANiD,YAA7C5K,KAAKgpB,OAAO3M,eAAeO,KAC9B5c,KAAKgpB,OAAOtC,eAAe,UAAW9J,GAClCrY,EAAU0iB,IACbjnB,KAAKkpB,eAAejC,EAAQrK,IAGvB5c,MAOR+oB,EAAAtnB,UAAA2nB,KAAA,SAAKxe,GACJ,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAEpC,GAAiD,YAA7C5K,KAAKgpB,OAAO3M,eAAeO,GAA6B,CAC3D,IAAM9Q,EAAQ9L,KAAKgpB,OAAO9nB,IAAI0b,GAC1B9Q,GAASA,EAAMlB,KAAO,IACzB5K,KAAKipB,YAAY3d,OAAOQ,EAAMlB,MAC9B5K,KAAKgpB,OAAO1d,OAAOQ,EAAMlB,OAM3B,OAHA5K,KAAKgpB,OAAO1d,OAAOsR,GACnB5c,KAAKgpB,OAAOtC,eAAe,UAAW9J,GACtC5c,KAAKkpB,eAAe,EAAGtM,GAChB5c,MAOR+oB,EAAAtnB,UAAA4nB,MAAA,SAAMze,GACL,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAIpC,MAHiD,YAA7C5K,KAAKgpB,OAAO3M,eAAeO,IAC9B5c,KAAKgpB,OAAOtC,eAAe,SAAU9J,GAE/B5c,MAOR+oB,EAAAtnB,UAAA6J,OAAA,SAAOV,GAIN,OAHAA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAKgpB,OAAO1d,OAAOV,GACnB5K,KAAKipB,YAAY3d,OAAOV,GACjB5K,MAQR+oB,EAAAtnB,UAAAumB,eAAA,SAAepd,GAAf,IAAAnH,EAAAzD,KACO4c,EAAe5c,KAAKiW,UAAUrL,GAC9B0e,EAAYtpB,KAAKgpB,OAAOrC,aAAa,UAAW/J,GACtD,IAAK0M,EACJ,OAAO,EAGR,IAAMC,GAAiCzb,MAAO,SAAUlD,KAAMgS,GAC9D5c,KAAKgpB,OAAOre,IAAI4e,GAGhB,IAAIC,EAAYF,EACZG,EAAe,EAqBnB,OAlBAzpB,KAAKgpB,OAAO3c,eAAeid,EAAU1e,KAAMgS,EAAe5c,KAAK0e,WAAY,SAAA9a,GAC1E,IAAI8lB,EAAkBF,EAAU5e,KAE1B+e,EAAclmB,EAAKwlB,YAAY/nB,IAAI0C,EAAEgH,MACvC+e,GAAeA,EAAY/e,MAAQ4e,EAAU5e,OAChD6e,EAAeE,EAAYhU,MAC3B+T,EAAkBC,EAAY/e,MAEP,YAApB4e,EAAU1b,OAAmC,YAAZlK,EAAEkK,QACtC2b,GAAgBhmB,EAAKqP,UAAUkV,eAAepkB,EAAEgH,MAAQnH,EAAKqP,UAAUkV,eAAe0B,IAEvFF,EAAY5lB,IAIb5D,KAAKgpB,OAAO/d,OAAOse,GAGZE,GAOR3oB,OAAAC,eAAIgoB,EAAAtnB,UAAA,aAAJ,WACC,OAAOzB,KAAKgoB,eAAehoB,KAAKsQ,YAGjC,SAAUJ,GACTlQ,KAAKkpB,eAAehZ,EAAGlQ,KAAKsQ,wCAO7BxP,OAAAC,eAAIgoB,EAAAtnB,UAAA,eAAJ,WACC,OAAOzB,KAAK4pB,iBAAiB5pB,KAAKsQ,YAGnC,SAAY1O,GACX,IAAM0O,EAAMtQ,KAAKsQ,MACXqF,EAAQ3V,KAAK8S,UAAU6V,YAAY/mB,EAAG0O,GAC5CtQ,KAAKkpB,eAAevT,EAAOrF,oCAQ5ByY,EAAAtnB,UAAAmoB,iBAAA,SAAiBhf,GAAjB,IAAAnH,EAAAzD,KACC4K,EAAO5K,KAAKiW,UAAUrL,GACtB,IAAM0e,EAAYtpB,KAAKgpB,OAAOrC,aAAa,UAAW/b,GACtD,IAAK0e,EACJ,OAAO,EAGR,IAAMC,GAAiCzb,MAAQ,SAAUlD,KAAIA,GAC7D5K,KAAKgpB,OAAOre,IAAI4e,GAGhB,IAAIC,EAAYF,EACZO,EAAiB,EAqBrB,OAlBA7pB,KAAKgpB,OAAO3c,eAAeid,EAAU1e,KAAMA,EAAO5K,KAAK0e,WAAY,SAAA9a,GAClE,IAAI8lB,EAAkBF,EAAU5e,KAE1B+e,EAAclmB,EAAKwlB,YAAY/nB,IAAI0C,EAAEgH,MACvC+e,GAAeA,EAAY/e,MAAQ4e,EAAU5e,OAChDif,EAAiBF,EAAYjU,QAC7BgU,EAAkBC,EAAY/e,MAEP,YAApB4e,EAAU1b,OAAmC,YAAZlK,EAAEkK,QACtC+b,GAAkBjmB,EAAEgH,KAAO8e,GAE5BF,EAAY5lB,IAIb5D,KAAKgpB,OAAO/d,OAAOse,GAGZM,GAQRd,EAAAtnB,UAAAynB,eAAA,SAAevT,EAAc/K,GAQ5B,OAPAA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAKipB,YAAY3d,OAAOV,GACxB5K,KAAKipB,YAAYte,KAChB+K,QAAU1V,KAAK8S,UAAUmV,mBAAmBtS,EAAO/K,GACnD+K,MAAKA,EACL/K,KAAIA,IAEE5K,MAUR+oB,EAAAtnB,UAAAqoB,eAAA,SAAelf,GAEd,OADAA,EAAO5K,KAAKiW,UAAUrL,GACf5K,KAAKgpB,OAAO3M,eAAezR,IAWnCme,EAAAtnB,UAAA0mB,cAAA,SAAcC,EAAapL,QAAA,IAAAA,MAAShd,KAAKsQ,OACxC,IAAM2W,EAASjnB,KAAKipB,YAAY/nB,IAAI8b,GAC9B5T,EAAQpJ,KAAKgpB,OAAO9nB,IAAI8b,GACxB1Q,EAAYrI,KAAKC,IAAI+iB,EAAOrc,KAAMxB,EAAMwB,MACxCmf,EAAgB/pB,KAAK8S,UAAUkV,eAAe1b,GAAa8b,EAAOnB,EAAOtR,MAC/E,OAAO3V,KAAK8S,UAAUqV,cAAc4B,IAUrChB,EAAAtnB,UAAAuoB,mBAAA,SAAmB1d,EAAiBC,EAAelK,GAAnD,IAAAoB,EAAAzD,KACOiqB,EAAoBjqB,KAAKiW,UAAU3J,GACnC4d,EAAkBlqB,KAAKiW,UAAU1J,GAEnC4d,EAAiBnqB,KAAKgpB,OAAO9nB,IAAI+oB,GACrCjqB,KAAKgpB,OAAO3c,eAAe4d,EAAmBC,EAAiB,SAAA9gB,GAC1D+gB,GAA2C,YAAzBA,EAAerc,OAAuC,YAAhB1E,EAAM0E,OACjErK,EAAKumB,mBAAmB/lB,KAAKC,IAAIimB,EAAevf,KAAMqf,GAAoB7gB,EAAMwB,KAAOnH,EAAKib,WAAYrc,GAEzG8nB,EAAiB/gB,IAGlB,IAAIjB,EAAQ,KAEZ,GAAIgiB,GAA2C,YAAzBA,EAAerc,OAAuB9N,KAAKgpB,OAAQ,CACxE,IAAMoB,EAAenmB,KAAKC,IAAIimB,EAAevf,KAAMqf,GAE7CpB,EAAa7oB,KAAK8S,UAAUkV,eAAeoC,GAG7CnD,GADS4B,EADQ7oB,KAAK8S,UAAUkV,eAAemC,EAAevf,OAE9C,EACL,IAAXqc,IACHA,EAAS,EAAIA,GAGd,IADA,IAAIoD,EAAerqB,KAAK8S,UAAUqV,cAAcU,EAAa5B,GACtDoD,EAAeH,GAAmBlqB,KAAKgpB,QAAQ,CACrD,IACC3mB,EAASgoB,EAAcpmB,KAAK8O,MAAM/S,KAAKgoB,eAAeqC,KACrD,MAAOzmB,GACRuE,EAAQvE,EACR,MAEG5D,KAAKgpB,SACRqB,GAAgBrqB,KAAK8S,UAAUmV,mBAAmB,EAAGoC,KAKxD,GAAIliB,EACH,MAAMA,EAGP,OAAOnI,MAMR+oB,EAAAtnB,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKgpB,OAAO5kB,UACZpE,KAAKipB,YAAY7kB,UACjBpE,KAAK8S,UAAU1O,UACRpE,MAET+oB,EAvUA,CAA0D7N,gVCU1DoP,GAAA,SAAAthB,GAsCC,SAAAuhB,IAAA,IAAA9mB,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqByjB,EAAM9hB,cAAepC,WAAY,WAAY,gBAAcrG,KArCvFyD,EAAA9C,KAAO,QAKP8C,EAAApB,SAA0B6e,GAUlBzd,EAAA+mB,YAAsB,EAKtB/mB,EAAAulB,OAAwB,IAAI1C,GAAc,WAM1C7iB,EAAAgnB,WAAyBhnB,EAAKinB,MAAMpnB,KAAKG,GAYhD,IAAM8G,EAAUzD,EAAqByjB,EAAM9hB,cAAepC,WAAY,WAAY,qBAElF5C,EAAKpB,SAAWkI,EAAQlI,SACxBoB,EAAKknB,YAAc,IAAI7B,IACtB7mB,QAASwB,EAAKxB,QACd6Q,UAAWvI,EAAQuI,UACnBQ,MAAO/I,EAAQ+I,QAEhB7P,EAAK+mB,YAAc,EACnB/mB,EAAKqP,UAAYrP,EAAKknB,YAAY7X,UAClCiO,GAAStd,EAAM,aAGfA,EAAKulB,OAAOtC,eAAe,UAAW,GAGtCjjB,EAAKxB,QAAQkH,GAAG,OAAQ1F,EAAKgnB,cAqM/B,OA7PQG,GAAAL,EAAAvhB,GA2DAuhB,EAAA9hB,YAAP,WACC,OAAO3H,OAAO2F,OAAOyU,GAAgBzS,eACpCpG,SAAU6e,GACVpO,UAAW,EACXQ,MAAO,WAOTxS,OAAAC,eAAIwpB,EAAA9oB,UAAA,aAAJ,WACC,OAAOzB,KAAKgpB,OAAO3M,eAAerc,KAAKsQ,wCASxCia,EAAA9oB,UAAA0P,MAAA,SAAMvG,EAAaqc,GAElBjnB,KAAKiC,QAAQ2D,SAEb,IAAMgX,EAAe5c,KAAKiW,UAAUrL,GAQpC,MAPiD,YAA7C5K,KAAKgpB,OAAO3M,eAAeO,KAC9B5c,KAAKgpB,OAAOtC,eAAe,UAAW9J,GACtC5c,KAAK2qB,YAAYxZ,MAAMyL,EAAcqK,GACjCrK,EAAe5c,KAAKwqB,aACvBxqB,KAAK6J,KAAK,QAAS+S,EAAcqK,IAG5BjnB,MASRuqB,EAAA9oB,UAAA2nB,KAAA,SAAKxe,GACJ,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAOpC,OANA5K,KAAKgpB,OAAO1d,OAAOsR,GACnB5c,KAAKgpB,OAAOtC,eAAe,UAAW9J,GACtC5c,KAAK2qB,YAAYvB,KAAKxM,GAClBA,EAAe5c,KAAKwqB,aACvBxqB,KAAK6J,KAAK,OAAQ+S,GAEZ5c,MAORuqB,EAAA9oB,UAAA4nB,MAAA,SAAMze,GACL,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAQpC,MAPiD,YAA7C5K,KAAKgpB,OAAO3M,eAAeO,KAC9B5c,KAAKgpB,OAAOtC,eAAe,SAAU9J,GACrC5c,KAAK2qB,YAAYtB,MAAMzM,GACnBA,EAAe5c,KAAKwqB,aACvBxqB,KAAK6J,KAAK,QAAS+S,IAGd5c,MAORc,OAAAC,eAAIwpB,EAAA9oB,UAAA,aAAJ,WACC,OAAOwC,KAAK4mB,KAAK7qB,KAAKgoB,eAAehoB,KAAKsQ,aAE3C,SAAUJ,GACTlQ,KAAK2qB,YAAYhV,MAAQzF,mCAM1BpP,OAAAC,eAAIwpB,EAAA9oB,UAAA,eAAJ,WACC,OAAOzB,KAAK2qB,YAAYjV,aAEzB,SAAY9T,GACX5B,KAAK2qB,YAAYjV,QAAU9T,mCAQ5B2oB,EAAA9oB,UAAAmoB,iBAAA,SAAiBhf,GAChB,OAAO5K,KAAK2qB,YAAYf,iBAAiBhf,IAQ1C2f,EAAA9oB,UAAAynB,eAAA,SAAevT,EAAc/K,GAE5B,OADA5K,KAAK2qB,YAAYzB,eAAevT,EAAO/K,GAChC5K,MAQRuqB,EAAA9oB,UAAAumB,eAAA,SAAepd,GACd,OAAO5K,KAAK2qB,YAAY3C,eAAepd,IAOxC2f,EAAA9oB,UAAA4oB,aAAA,SAAapD,EAAeyB,GAC3B,IAAM9L,EAAe5c,KAAKiW,UAAUyS,GAC9BR,EAAcloB,KAAKgoB,eAAepL,GACxC,OAAO5c,KAAK2qB,YAAYxC,cAAcD,EAAcjB,EAAQrK,IAMrD2N,EAAA9oB,UAAAipB,MAAR,eAAAjnB,EAAAzD,KAEOsM,EAAYtM,KAAKwqB,YACjBje,EAAUvM,KAAKsQ,MACrBtQ,KAAKwqB,YAAcje,EAEfD,IAAcC,IAEjBvM,KAAKgpB,OAAO3c,eAAeC,EAAWC,EAAS,SAAA3I,GAC9C,OAAQA,EAAEkK,OACT,IAAK,UACJ,IAAMmZ,EAASxjB,EAAKknB,YAAY3C,eAAepkB,EAAEgH,MACjDnH,EAAKoG,KAAK,QAASjG,EAAEgH,KAAMqc,GAC3B,MACD,IAAK,UACW,IAAXrjB,EAAEgH,MACLnH,EAAKoG,KAAK,OAAQjG,EAAEgH,MAErB,MACD,IAAK,SACJnH,EAAKoG,KAAK,QAASjG,EAAEgH,SAKxB5K,KAAK2qB,YAAYX,mBAAmB1d,EAAWC,EAAS,SAAC3B,EAAM+K,GAC9DlS,EAAKpB,SAASuI,EAAM+K,OAavB4U,EAAA9oB,UAAAqoB,eAAA,SAAelf,GACd,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GACpC,OAAO5K,KAAKgpB,OAAO3M,eAAeO,IAMnC2N,EAAA9oB,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKiC,QAAQ0H,IAAI,OAAQ3J,KAAKyqB,YAC9BzqB,KAAK2qB,YAAYvmB,UACjBpE,KAAKgpB,OAAO5kB,UACLpE,MAWTuqB,EA9PA,CACQrP,IA+PRnS,EAAQiB,MAAMsgB,oVCvRdQ,GAAA,SAAA9hB,GAAA,SAAA8hB,IAAA,IAAArnB,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,QAEE8C,EAAA8P,aAA6B,MA2CvC,OA/CgCwX,GAAAD,EAAA9hB,GASrB8hB,EAAArpB,UAAAoU,KAAV,WACC,OAAO7V,KAAKiC,QAAQ4P,UAAU8D,OAMrBmV,EAAArpB,UAAA2S,cAAV,SAAwBoB,GACvB,OAAOxV,KAAK4V,UAAYJ,GAMfsV,EAAArpB,UAAAiT,gBAAV,SAA0BgB,GACzB,OAAOzR,KAAK4H,MAAM6J,GAAW,GAAK1V,KAAKyV,WAAazV,KAAK4V,YAMhDkV,EAAArpB,UAAAyS,cAAV,SAAwByB,GACvB,OAAOA,GAMRmV,EAAArpB,UAAAyU,QAAA,WACC,OAAOlW,KAAK6K,WAMbigB,EAAArpB,UAAAwU,UAAA,WACC,OAAQjW,KAAK6K,UAAY7K,KAAK4V,WAAc,GAAK5V,KAAKyV,YAExDqV,EA/CA,CAAgC/P,IAiD1B,SAAUiQ,GAAM5pB,EAAmBkS,GACxC,OAAO,IAAIwX,GAAW/Y,IAAc3Q,EAAOkS,mVC7C5C2X,GAAA,SAAAjiB,GAAA,SAAAkiB,IAAA,IAAAznB,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,OAEE8C,EAAA8P,aAAe,SA2DzB,OA/D+B4X,GAAAD,EAAAliB,GASpBkiB,EAAAzpB,UAAAsS,kBAAV,SAA4BwB,GAC3B,OAAO1C,EAAK7J,EAAAvH,UAAMsS,kBAAiBxT,KAAAP,KAACuV,KAM3B2V,EAAAzpB,UAAAyS,cAAV,SAAwByB,GACvB,OAAO9C,EAAK7J,EAAAvH,UAAMyS,cAAa3T,KAAAP,KAAC2V,KAMvBuV,EAAAzpB,UAAA2S,cAAV,SAAwBoB,GACvB,OAAO3C,EAAK7J,EAAAvH,UAAM2S,cAAa7T,KAAAP,KAACwV,KAMvB0V,EAAAzpB,UAAAiT,gBAAV,SAA0BgB,GACzB,OAAO7C,EAAK7J,EAAAvH,UAAMiT,gBAAenU,KAAAP,KAAC0V,KASnCwV,EAAAzpB,UAAA2U,OAAA,WACC,OAAOpW,KAAK6K,WASbqgB,EAAAzpB,UAAA0U,YAAA,WACC,OAAOjD,GAAKlT,KAAKoW,WASlB8U,EAAAzpB,UAAAkX,UAAA,SAAU3U,GACT,OAAO,IAAIknB,EAAUlrB,KAAKiC,QAASjC,KAAKoW,SAAWpS,IAErDknB,EA/DA,CAA+BjT,IAoEzB,SAAUmT,GAAKhqB,EAAmBkS,GACvC,OAAO,IAAI2X,GAAUlZ,IAAc3Q,EAAOkS,mVC/D3C+X,GAAA,SAAAriB,GAAA,SAAAsiB,IAAA,IAAA7nB,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,OAKP8C,EAAA8nB,WAAsB,IAOtB9nB,EAAA+nB,aAAwB,KAKhB/nB,EAAA8F,QAA+B,IAAIa,EAKnC3G,EAAAgoB,eAAiBhoB,EAAKioB,UAAUpoB,KAAKG,GAKrCA,EAAAkoB,iBAA2B,IAmDpC,OAhF0BC,GAAAN,EAAAtiB,GAqCzBsiB,EAAA7pB,UAAAoqB,SAAA,SAASxpB,EAAsBuI,GAS9B,OARA5K,KAAKuJ,QAAQoB,KACZtI,SAAQA,EACRuI,KAAO5K,KAAKiW,UAAUrL,KAGK,IAAxB5K,KAAKuJ,QAAQjD,SAChBtG,KAAK2rB,gBAAkBG,sBAAsB9rB,KAAKyrB,iBAE5CzrB,MAORsrB,EAAA7pB,UAAA6J,OAAA,SAAOC,GAEN,OADAvL,KAAKuJ,QAAQ+B,OAAOtL,KAAKiW,UAAU1K,IAC5BvL,MAMAsrB,EAAA7pB,UAAAiqB,UAAR,WAEC,IADA,IAAMpb,EAAMtQ,KAAKiC,QAAQ8N,YAClB/P,KAAKuJ,QAAQjD,QAAWtG,KAAKuJ,QAAQ4B,OAAqBP,KAAO5K,KAAKwrB,cAAgBlb,GAAK,CACjG,IAAMxE,EAAQ9L,KAAKuJ,QAAQ/C,QACvBsF,GAASwE,EAAMxE,EAAMlB,MAAQ5K,KAAKurB,YACrCzf,EAAMzJ,WAGJrC,KAAKuJ,QAAQjD,OAAS,IACzBtG,KAAK2rB,gBAAkBG,sBAAsB9rB,KAAKyrB,kBAIpDH,EAAA7pB,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKuJ,QAAQnF,UACb2nB,qBAAqB/rB,KAAK2rB,iBACnB3rB,MAETsrB,EAhFA,CAA0BpQ,gVCD1B8Q,GAAA,SAAAhjB,GAAA,SAAAijB,IAAA,IAAAxoB,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,mBAKC8C,EAAAyoB,MAA6B,KAK7BzoB,EAAA0oB,QAAkB,IA0T3B,OAtUsCC,GAAAH,EAAAjjB,GAmBrCijB,EAAAxqB,UAAAkJ,IAAA,SAAIvB,GACHpJ,KAAKiI,OAAO1D,EAAU6E,EAAMwB,MAAO,oCACnC5K,KAAKiI,OAAO1D,EAAU6E,EAAMiV,UAAW,yCAEvCjV,EAAMwB,KAAOxB,EAAMwB,KAAKC,UACxB,IAAI0U,EAA4B,IAAI8M,GAAajjB,EAAMwB,KAAMxB,EAAMwB,KAAOxB,EAAMiV,SAAUjV,GAQ1F,IAPmB,OAAfpJ,KAAKksB,MACRlsB,KAAKksB,MAAQ3M,EAEbvf,KAAKksB,MAAMI,OAAO/M,GAEnBvf,KAAKmsB,UAEW,OAAT5M,GACNA,EAAKgN,eACLhN,EAAKiN,YACLxsB,KAAKysB,WAAWlN,GAChBA,EAAOA,EAAKmN,OAEb,OAAO1sB,MAORisB,EAAAxqB,UAAAwJ,OAAA,SAAO7B,GACN,GAAmB,OAAfpJ,KAAKksB,MAAgB,CACxB,IAAMS,KACN3sB,KAAKksB,MAAMU,OAAOxjB,EAAMwB,KAAM+hB,GAC9B,IAAmB,IAAAvmB,EAAA,EAAAymB,EAAAF,EAAAvmB,EAAAymB,EAAAvmB,OAAAF,IAAS,CAAvB,IAAMmZ,EAAIsN,EAAAzmB,GACd,GAAImZ,EAAKnW,QAAUA,EAAO,CACzBpJ,KAAK8sB,YAAYvN,GACjBvf,KAAKmsB,UACL,QAIH,OAAOnsB,MAORc,OAAAC,eAAIkrB,EAAAxqB,UAAA,cAAJ,WACC,OAAOzB,KAAKmsB,yCAObF,EAAAxqB,UAAA6J,OAAA,SAAOC,GAAP,IAAA9H,EAAAzD,KAEC,OADAA,KAAKwM,YAAYjB,EAAO,SAAAnC,GAAS,OAAA3F,EAAKwH,OAAO7B,KACtCpJ,MAMAisB,EAAAxqB,UAAAsrB,SAAR,SAAiBxN,GAChBvf,KAAKksB,MAAQ3M,EACM,OAAfvf,KAAKksB,QACRlsB,KAAKksB,MAAMQ,OAAS,OAQdT,EAAAxqB,UAAAurB,qBAAR,SAA6BzN,EAAoB0N,GAC5B,OAAhB1N,EAAKmN,QACJnN,EAAK2N,cACR3N,EAAKmN,OAAOS,KAAOF,EAEnB1N,EAAKmN,OAAOU,MAAQH,EAErBjtB,KAAKysB,WAAWlN,EAAKmN,SAErB1sB,KAAK+sB,SAASE,IAQRhB,EAAAxqB,UAAAqrB,YAAR,SAAoBvN,GACnB,GAAkB,OAAdA,EAAK4N,MAAgC,OAAf5N,EAAK6N,MAC9BptB,KAAKgtB,qBAAqBzN,EAAM,WAC1B,GAAmB,OAAfA,EAAK6N,MACfptB,KAAKgtB,qBAAqBzN,EAAMA,EAAK4N,WAC/B,GAAkB,OAAd5N,EAAK4N,KACfntB,KAAKgtB,qBAAqBzN,EAAMA,EAAK6N,WAC/B,CACN,IACIH,OAAW,EACXI,EAA4B,KAChC,GAHgB9N,EAAK+N,aAGP,EACb,GAAwB,OAApB/N,EAAK4N,KAAKC,OACbH,EAAc1N,EAAK4N,MACPC,MAAQ7N,EAAK6N,MACzBC,EAAOJ,MACD,CAEN,IADAA,EAAc1N,EAAK4N,KAAKC,MACK,OAAtBH,EAAYG,OAClBH,EAAcA,EAAYG,MAEvBH,EAAYP,SACfO,EAAYP,OAAOU,MAAQH,EAAYE,KACvCE,EAAOJ,EAAYP,OACnBO,EAAYE,KAAO5N,EAAK4N,KACxBF,EAAYG,MAAQ7N,EAAK6N,YAGrB,GAAwB,OAApB7N,EAAK6N,MAAMD,MACrBF,EAAc1N,EAAK6N,OACPD,KAAO5N,EAAK4N,KACxBE,EAAOJ,MACD,CAEN,IADAA,EAAc1N,EAAK6N,MAAMD,KACG,OAArBF,EAAYE,MAClBF,EAAcA,EAAYE,KAEvBF,EAAYP,SACfO,EAAYP,OAAOS,KAAOF,EAAYG,MACtCC,EAAOJ,EAAYP,OACnBO,EAAYE,KAAO5N,EAAK4N,KACxBF,EAAYG,MAAQ7N,EAAK6N,OAGP,OAAhB7N,EAAKmN,OACJnN,EAAK2N,cACR3N,EAAKmN,OAAOS,KAAOF,EAEnB1N,EAAKmN,OAAOU,MAAQH,EAGrBjtB,KAAK+sB,SAASE,GAEXI,GACHrtB,KAAKysB,WAAWY,GAGlB9N,EAAKnb,WAME6nB,EAAAxqB,UAAA8rB,YAAR,SAAoBhO,GACnB,IAAMmN,EAASnN,EAAKmN,OACdQ,EAAc3N,EAAK2N,cAGnBM,EAAYjO,EAAK6N,MACnBI,IACHjO,EAAK6N,MAAQI,EAAUL,KACvBK,EAAUL,KAAO5N,GAGH,OAAXmN,EACCQ,EACHR,EAAOS,KAAOK,EAEdd,EAAOU,MAAQI,EAGhBxtB,KAAK+sB,SAASS,IAORvB,EAAAxqB,UAAAgsB,aAAR,SAAqBlO,GACpB,IAAMmN,EAASnN,EAAKmN,OACdQ,EAAc3N,EAAK2N,cAGnBM,EAAYjO,EAAK4N,KACnBK,IACHjO,EAAK4N,KAAOK,EAAUJ,MACtBI,EAAUJ,MAAQ7N,GAGJ,OAAXmN,EACCQ,EACHR,EAAOS,KAAOK,EAEdd,EAAOU,MAAQI,EAGhBxtB,KAAK+sB,SAASS,IAORvB,EAAAxqB,UAAAgrB,WAAR,SAAmBlN,GAClB,IAAMmO,EAAUnO,EAAK+N,aACjBI,EAAU,GAAKnO,EAAK4N,KACnB5N,EAAK4N,KAAKG,aAAe,EAC5BttB,KAAKutB,YAAYhO,EAAK4N,MAEtBntB,KAAKytB,aAAalO,GAETmO,GAAW,GAAKnO,EAAK6N,QAC3B7N,EAAK6N,MAAME,aAAe,EAC7BttB,KAAKytB,aAAalO,EAAK6N,OAEvBptB,KAAKutB,YAAYhO,KAUpB0M,EAAAxqB,UAAAP,IAAA,SAAI0J,GACH,GAAmB,OAAf5K,KAAKksB,MAAgB,CACxB,IAAMS,KAEN,GADA3sB,KAAKksB,MAAMU,OAAOhiB,EAAM+hB,GACpBA,EAAQrmB,OAAS,EAAG,CAEvB,IADA,IAAIpC,EAAMyoB,EAAQ,GACTvsB,EAAI,EAAGA,EAAIusB,EAAQrmB,OAAQlG,IAC/BusB,EAAQvsB,GAAGutB,IAAMzpB,EAAIypB,MACxBzpB,EAAMyoB,EAAQvsB,IAGhB,OAAO8D,EAAIkF,OAGb,OAAO,MAOR6iB,EAAAxqB,UAAAsG,QAAA,SAAQ1F,GACP,GAAmB,OAAfrC,KAAKksB,MAAgB,CACxB,IAAM0B,KACN5tB,KAAKksB,MAAM2B,SAAS,SAAAtO,GAAQ,OAAAqO,EAASpkB,KAAK+V,KAC1CqO,EAAS7lB,QAAQ,SAAAwX,GACZA,EAAKnW,OACR/G,EAASkd,EAAKnW,SAIjB,OAAOpJ,MASRisB,EAAAxqB,UAAAgL,cAAA,SAAc7B,EAAcvI,GAC3B,GAAmB,OAAfrC,KAAKksB,MAAgB,CACxB,IAAMS,KACN3sB,KAAKksB,MAAMU,OAAOhiB,EAAM+hB,GACxBA,EAAQ5kB,QAAQ,SAAAwX,GACXA,EAAKnW,OACR/G,EAASkd,EAAKnW,SAIjB,OAAOpJ,MASRisB,EAAAxqB,UAAA+K,YAAA,SAAY5B,EAAcvI,GACzB,GAAmB,OAAfrC,KAAKksB,MAAgB,CACxB,IAAMS,KACN3sB,KAAKksB,MAAM4B,YAAYljB,EAAM+hB,GAC7BA,EAAQ5kB,QAAQ,SAAAwX,GACXA,EAAKnW,OACR/G,EAASkd,EAAKnW,SAIjB,OAAOpJ,MAMRisB,EAAAxqB,UAAA2C,QAAA,WAMC,OALA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACM,OAAfA,KAAKksB,OACRlsB,KAAKksB,MAAM2B,SAAS,SAAAtO,GAAQ,OAAAA,EAAKnb,YAElCpE,KAAKksB,MAAQ,KACNlsB,MAETisB,EAtUA,CAAsC5jB,GAuVtCgkB,GAAA,WAmBC,SAAAA,EAAYsB,EAAaI,EAAc3kB,GAR/BpJ,KAAAguB,MAA6B,KAE7BhuB,KAAAiuB,OAA8B,KAEtCjuB,KAAA0sB,OAA8B,KAE9B1sB,KAAAkuB,OAAiB,EAGhBluB,KAAKoJ,MAAQA,EAEbpJ,KAAK2tB,IAAMA,EAEX3tB,KAAK+tB,KAAOA,EAEZ/tB,KAAKkE,IAAMlE,KAAK+tB,KAiLlB,OA3KC1B,EAAA5qB,UAAA6qB,OAAA,SAAO/M,GACFA,EAAKoO,KAAO3tB,KAAK2tB,IACF,OAAd3tB,KAAKmtB,KACRntB,KAAKmtB,KAAO5N,EAEZvf,KAAKmtB,KAAKb,OAAO/M,GAEO,OAAfvf,KAAKotB,MACfptB,KAAKotB,MAAQ7N,EAEbvf,KAAKotB,MAAMd,OAAO/M,IAUpB8M,EAAA5qB,UAAAmrB,OAAA,SAAOuB,EAAexB,GAGjBwB,EAAQnuB,KAAKkE,MAIC,OAAdlE,KAAKmtB,MACRntB,KAAKmtB,KAAKP,OAAOuB,EAAOxB,GAGrB3sB,KAAK2tB,KAAOQ,GAASnuB,KAAK+tB,KAAOI,GACpCxB,EAAQnjB,KAAKxJ,MAIVA,KAAK2tB,IAAMQ,GAII,OAAfnuB,KAAKotB,OACRptB,KAAKotB,MAAMR,OAAOuB,EAAOxB,KAU3BN,EAAA5qB,UAAAqsB,YAAA,SAAYK,EAAexB,GAEtB3sB,KAAK2tB,KAAOQ,IACfxB,EAAQnjB,KAAKxJ,MACK,OAAdA,KAAKmtB,MACRntB,KAAKmtB,KAAKW,YAAYK,EAAOxB,IAIZ,OAAf3sB,KAAKotB,OACRptB,KAAKotB,MAAMU,YAAYK,EAAOxB,IAQhCN,EAAA5qB,UAAAosB,SAAA,SAASxrB,GACRA,EAASrC,MACS,OAAdA,KAAKmtB,MACRntB,KAAKmtB,KAAKU,SAASxrB,GAED,OAAfrC,KAAKotB,OACRptB,KAAKotB,MAAMS,SAASxrB,IAOtBgqB,EAAA5qB,UAAA8qB,aAAA,WACmB,OAAdvsB,KAAKmtB,MAAgC,OAAfntB,KAAKotB,MAC9BptB,KAAKkuB,OAASjqB,KAAKC,IAAIlE,KAAKmtB,KAAKe,OAAQluB,KAAKotB,MAAMc,QAAU,EACrC,OAAfluB,KAAKotB,MACfptB,KAAKkuB,OAASluB,KAAKotB,MAAMc,OAAS,EACV,OAAdluB,KAAKmtB,KACfntB,KAAKkuB,OAASluB,KAAKmtB,KAAKe,OAAS,EAEjCluB,KAAKkuB,OAAS,GAOhB7B,EAAA5qB,UAAA+qB,UAAA,WACCxsB,KAAKkE,IAAMlE,KAAK+tB,KACE,OAAd/tB,KAAKmtB,OACRntB,KAAKkE,IAAMD,KAAKC,IAAIlE,KAAKkE,IAAKlE,KAAKmtB,KAAKjpB,MAEtB,OAAflE,KAAKotB,QACRptB,KAAKkE,IAAMD,KAAKC,IAAIlE,KAAKkE,IAAKlE,KAAKotB,MAAMlpB,OAQ3CmoB,EAAA5qB,UAAA6rB,WAAA,WACC,IAAII,EAAU,EAQd,OAPkB,OAAd1tB,KAAKmtB,MAAgC,OAAfntB,KAAKotB,MAC9BM,EAAU1tB,KAAKmtB,KAAKe,OAASluB,KAAKotB,MAAMc,OAChB,OAAdluB,KAAKmtB,KACfO,EAAU1tB,KAAKmtB,KAAKe,OAAS,EACJ,OAAfluB,KAAKotB,QACfM,IAAY1tB,KAAKotB,MAAMc,OAAS,IAE1BR,GAMRrB,EAAA5qB,UAAAyrB,YAAA,WACC,OAAuB,OAAhBltB,KAAK0sB,QAAmB1sB,KAAK0sB,OAAOS,OAASntB,MAMrDc,OAAAC,eAAIsrB,EAAA5qB,UAAA,YAAJ,WACC,OAAOzB,KAAKguB,WAGb,SAASzO,GACRvf,KAAKguB,MAAQzO,EACA,OAATA,IACHA,EAAKmN,OAAS1sB,MAEfA,KAAKusB,eACLvsB,KAAKwsB,6CAMN1rB,OAAAC,eAAIsrB,EAAA5qB,UAAA,aAAJ,WACC,OAAOzB,KAAKiuB,YAGb,SAAU1O,GACTvf,KAAKiuB,OAAS1O,EACD,OAATA,IACHA,EAAKmN,OAAS1sB,MAEfA,KAAKusB,eACLvsB,KAAKwsB,6CAMNH,EAAA5qB,UAAA2C,QAAA,WACCpE,KAAK0sB,OAAS,KACd1sB,KAAKguB,MAAQ,KACbhuB,KAAKiuB,OAAS,KACdjuB,KAAKoJ,MAAQ,MAEfijB,EA3MA,+UCvVA+B,GAAA,SAAAplB,GAyBC,SAAAqlB,IAAA,IAAA5qB,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBunB,EAAO5lB,cAAepC,WAAY,aAAWrG,KAzBhEyD,EAAA9C,KAAO,SA0Bf,IAAM4J,EAAUzD,EAAqBunB,EAAO5lB,cAAepC,WAAY,kBAEvE5C,EAAKsY,MAAQtY,EAAK4b,OAAS,IAAI8B,IAC9Blf,QAASwB,EAAKxB,QACdwQ,KAAMlI,EAAQ+jB,OACdhb,MAAO,aAER7P,EAAK6qB,OAAS7qB,EAAK4b,OAAO5M,KAC1BsO,GAAStd,EAAM,UACfA,EAAK8qB,eAAiBhkB,EAAQ+jB,OAG9B7qB,EAAK+qB,KAAOjkB,EAAQikB,OAsCtB,OA9E4BC,GAAAJ,EAAArlB,GA2CpBqlB,EAAA5lB,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClC+lB,MAAM,EACNF,OAAQ,KAUVxtB,OAAAC,eAAIstB,EAAA5sB,UAAA,YAAJ,WACC,OAAOzB,KAAKsuB,OAAOltB,SAAWsJ,SAE/B,SAAS8jB,IACHxuB,KAAKwuB,MAAQA,GACjBxuB,KAAKuuB,eAAiBvuB,KAAKsuB,OAAOltB,MAElCpB,KAAKsuB,OAAOltB,OAASsJ,KACX1K,KAAKwuB,OAASA,IACxBxuB,KAAKsuB,OAAOltB,MAAQpB,KAAKuuB,iDAO3BF,EAAA5sB,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK+b,MAAM3X,UACXpE,KAAKsuB,OAAOlqB,UACLpE,MAETquB,EA9EA,CAA4BpP,gVCM5ByP,GAAA,SAAA1lB,GAaC,SAAA2lB,IAAA,IAAAlrB,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB6nB,EAAYlmB,cAAepC,aAAWrG,KAbzDyD,EAAA9C,KAAO,cAEhB8C,EAAAsY,MAAgB,IAAIqS,IAASnsB,QAASwB,EAAKxB,UAC3CwB,EAAA4b,OAAe,IAAI8B,IAAOlf,QAAUwB,EAAKxB,UAKzCwB,EAAA6qB,OAA0B7qB,EAAKsY,MAAMuS,OAMpC,IAAM/jB,EAAUzD,EAAqB6nB,EAAYlmB,cAAepC,kBAEhEga,GAAc5c,EAAKsY,MAAOtY,EAAK4b,OAAQ5b,EAAKxB,QAAQ2sB,WAAWhd,aAE/DnO,EAAK+qB,KAAOjkB,EAAQikB,OA2DtB,OA/EiCK,GAAAF,EAAA3lB,GAuBzB2lB,EAAAlmB,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClC+lB,MAAM,EACNF,OAAQ,KAUVxtB,OAAAC,eAAI4tB,EAAAltB,UAAA,YAAJ,WACC,OAAOzB,KAAK+b,MAAMyS,UAGnB,SAASA,GACRxuB,KAAK+b,MAAMyS,KAAOA,mCAsBnBG,EAAAltB,UAAA0e,MAAA,eAAM,IAAA/Y,KAAAhB,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAgB,EAAAhB,GAAAC,UAAAD,GAKL,OAJApG,KAAK+b,MAAMzK,aACXlK,EAAKwB,QAAQ5I,KAAK+b,OAClB3U,EAAKoC,KAAKxJ,KAAKqf,QACfgB,GAAazZ,WAAA,EAAIQ,GACVpH,MAMR2uB,EAAAltB,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKsuB,OAAOlqB,UACLpE,MAET2uB,EA/EA,CAAiC1P,IAqFjCtS,EAAc,SAAA1K,GACbA,EAAQ2P,YAAc,IAAI8c,IAAczsB,QAAOA,MAGhD6K,EAAe,SAAA7K,GACdA,EAAQ2P,YAAYxN,YCrGrB,IAAA0qB,GAAA,WA2BC,SAAAC,EAAYld,EAAsB1K,GAjBlCnH,KAAA0R,GAAaqd,EAAeC,WAmB3B,IAAMzkB,EAAiCzJ,OAAO2F,OAAOsoB,EAAetmB,cAAetB,GAEnFnH,KAAK6R,UAAYA,EACjB7R,KAAKqC,SAAWkI,EAAQlI,SACxBrC,KAAKivB,MAAQ1kB,EAAQd,KACrBzJ,KAAK4K,KAAOL,EAAQK,KAoCtB,OAjCQmkB,EAAAtmB,YAAP,WACC,OACCpG,SAAU6e,GACVzX,MAAM,EACNmB,KAAM,IAaRmkB,EAAAttB,UAAAytB,OAAA,SAAOtkB,GACF5K,KAAKqC,WACRrC,KAAKqC,SAASuI,GACV5K,KAAKivB,OACRjvB,KAAK6R,UAAUiU,MAAM9lB,KAAK0R,MAQ7Bqd,EAAAttB,UAAA2C,QAAA,WAEC,OADApE,KAAKqC,cAAW8H,EACTnK,MApBO+uB,EAAAC,SAAmB,EAsBnCD,EAtEA,+UCDAI,GAAA,SAAAnmB,GAqCC,SAAAomB,EAAYvd,EAAsB1K,GAAlC,IAAA1D,EAECuF,EAAAzI,KAAAP,KAAM6R,EAAW1K,IAAKnH,KAxBfyD,EAAA4rB,YAAsB,EAKtB5rB,EAAA6rB,SAAmB,EAKnB7rB,EAAA8rB,UAAY9rB,EAAKmH,KAKjBnH,EAAA+rB,cAAgB/rB,EAAKgsB,SAASnsB,KAAKG,GAW1C,IAAM8G,EAAUzJ,OAAO2F,OAAO2oB,EAAqB3mB,cAAetB,UAElE1D,EAAK4a,SAAY,IAAIyM,GAAWjZ,EAAU5P,QAASsI,EAAQ8T,UAAUxT,UACrEpH,EAAKisB,UAAY,IAAK5E,GAAWjZ,EAAU5P,QAASsI,EAAQvG,UAAU6G,UACtEpH,EAAK8rB,UAAYhlB,EAAQK,KACzBnH,EAAKoO,UAAU1I,GAAG,QAAS1F,EAAK+rB,eAChC/rB,EAAKoO,UAAU1I,GAAG,YAAa1F,EAAK+rB,eACpC/rB,EAAKxB,QAAUwB,EAAKoO,UAAU5P,QAC9BwB,EAAKgsB,aAkEP,OAnH0CE,GAAAP,EAAApmB,GAoDlComB,EAAA3mB,YAAP,WACC,OAAO3H,OAAO2F,UAAWqoB,GAAermB,eACvC4V,SAAU3T,IACV1G,SAAU,EACVyF,MAAM,KASR2lB,EAAA3tB,UAAAytB,OAAA,SAAOtkB,GAEN5K,KAAK4vB,cAAchlB,GAEnB5B,EAAAvH,UAAMytB,OAAM3uB,KAAAP,KAAC4K,IAMNwkB,EAAA3tB,UAAAmuB,cAAR,SAAsBhlB,GAErB,IAAM+K,EAAQ3V,KAAK6R,UAAUmW,eAAepd,GACxC+K,GAAS3V,KAAK4K,MAAQ+K,GAAS3V,KAAKuvB,WAAavvB,KAAKuvB,UAAYvvB,KAAK0vB,UAAY1vB,KAAK4K,KAAO5K,KAAKqe,WACvGre,KAAKuvB,WAAavvB,KAAK0vB,UACvB1vB,KAAKqvB,WAAarvB,KAAKsvB,QACvBtvB,KAAKsvB,QAAUtvB,KAAK6R,UAAUge,aAAa7vB,KAAKkvB,OAAO5rB,KAAKtD,MAC3D,IAAI8qB,GAAW9qB,KAAKiC,QAASjC,KAAKuvB,WAAWtZ,eAOxCmZ,EAAA3tB,UAAAguB,SAAR,SAAiB7kB,GAChB5K,KAAK6R,UAAUiU,MAAM9lB,KAAKqvB,YAC1BrvB,KAAK6R,UAAUiU,MAAM9lB,KAAKsvB,SAC1BtvB,KAAKuvB,UAAYvvB,KAAK4K,KACtB,IAAM+K,EAAQ3V,KAAK6R,UAAUmW,eAAepd,GACxC+K,EAAQ3V,KAAK4K,OAChB5K,KAAKuvB,UAAYvvB,KAAK4K,KAAO3G,KAAK4mB,MAAMlV,EAAQ3V,KAAK4K,MAAQ5K,KAAK0vB,WAAa1vB,KAAK0vB,WAErF1vB,KAAKqvB,WAAarvB,KAAK6R,UAAUge,aAAa7vB,KAAKkvB,OAAO5rB,KAAKtD,MAC9D,IAAI8qB,GAAW9qB,KAAKiC,QAASjC,KAAKuvB,WAAWtZ,aAC9CjW,KAAKuvB,WAAavvB,KAAK0vB,UACvB1vB,KAAKsvB,QAAUtvB,KAAK6R,UAAUge,aAAa7vB,KAAKkvB,OAAO5rB,KAAKtD,MAC3D,IAAI8qB,GAAW9qB,KAAKiC,QAASjC,KAAKuvB,WAAWtZ,cAM/CmZ,EAAA3tB,UAAA2C,QAAA,WAMC,OALA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK6R,UAAUiU,MAAM9lB,KAAKqvB,YAC1BrvB,KAAK6R,UAAUiU,MAAM9lB,KAAKsvB,SAC1BtvB,KAAK6R,UAAUlI,IAAI,QAAS3J,KAAKwvB,eACjCxvB,KAAK6R,UAAUlI,IAAI,YAAa3J,KAAKwvB,eAC9BxvB,MAETovB,EAnHA,CAA0CN,gVC+C1CgB,GAAA,SAAA9mB,GA4FC,SAAA+mB,IAAA,IAAAtsB,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBipB,EAAUtnB,cAAepC,aAAWrG,KA5FhEyD,EAAA9C,KAAO,YASP8C,EAAAyN,MAAgB,EAKRzN,EAAAusB,WAAoB,EAKpBvsB,EAAAwsB,SAAkB,EAuClBxsB,EAAAysB,oBAKAzsB,EAAA6G,UAAsC,IAAIF,EAK1C3G,EAAA0sB,gBAAoC,IAAInE,GAKxCvoB,EAAA2sB,kBAcA3sB,EAAA4sB,aAA4B,EAMnC,IAAM9lB,EAAUzD,EAAqBipB,EAAUtnB,cAAepC,kBAG9D5C,EAAK6sB,KAAO/lB,EAAQgmB,IACpB9sB,EAAK+sB,OAAS,IAAIlG,IACjBjoB,SAAWoB,EAAKgtB,aAAantB,KAAKG,GAClCxB,QAASwB,EAAKxB,QACd6Q,UAAY,EACZQ,MAAO,QAER7P,EAAKitB,mBACLjtB,EAAKqS,IAAMrS,EAAK+sB,OAAO1d,UACvBrP,EAAK+sB,OAAO1d,UAAUqU,WAAa5c,EAAQgmB,IAC3C9sB,EAAKqS,IAAI1U,MAAQmJ,EAAQuL,IACzBiL,GAAStd,EAAM,OACfA,EAAKktB,eAAiBpmB,EAAQwL,cAG9BtS,EAAKmtB,YAAcrmB,EAAQgmB,IAAM,IAigBnC,OAlnB+BM,GAAAd,EAAA/mB,GAoHvB+mB,EAAAtnB,YAAP,WACC,OAAO3H,OAAO2F,OAAOyU,GAAgBzS,eACpCqN,IAAK,IACLgb,QAAS,KACTC,UAAW,EACXR,IAAK,IACLS,MAAO,EACPC,iBAAkB,KAClBlb,cAAe,KAaTga,EAAAtuB,UAAAgvB,aAAR,SAAqBS,EAAmBvb,GAEvC,GAAI3V,KAAKqwB,aAAe,GACvB1a,EAAQ3V,KAAKswB,MAAS,GACtB3a,GAA4B,EAAnB3V,KAAK4wB,cAAqB,EAAG,CAEtC,IAAMO,EAAYxb,GAA4B,EAAnB3V,KAAK4wB,cAAwC,EAAnB5wB,KAAK4wB,aACpDQ,EAASntB,KAAKotB,IAAI,EAAaptB,KAAKqtB,IAAMtxB,KAAKqwB,aACrDa,GAAY,IAAIpG,GAAW9qB,KAAKiC,QAA4B,EAAnBjC,KAAK4wB,YAAkB,GAAG3a,YAAcmb,EAG9EpxB,KAAKkR,MACJyE,GAAS3V,KAAKiwB,WACjBjwB,KAAK6J,KAAK,UAAWqnB,GACrBlxB,KAAKwwB,OAAOtH,eAAelpB,KAAKgwB,WAAYkB,GAC5Cvb,EAAQ3V,KAAKgwB,WACbhwB,KAAK6J,KAAK,YAAaqnB,EAAUlxB,KAAKwwB,OAAO5G,iBAAiBsH,IAC9DlxB,KAAK6J,KAAK,OAAQqnB,IAIpBlxB,KAAKsK,UAAUmC,cAAckJ,EAAO,SAAAvM,GAAS,OAAAA,EAAM8lB,OAAOgC,MAkB3DnB,EAAAtuB,UAAAoqB,SAAA,SAASxpB,EAA6BuI,GACrC,IAAMxB,EAAQ,IAAI0lB,GAAe9uB,MAChCqC,SAAQA,EACRuI,KAAO,IAAImQ,GAAmB/a,KAAKiC,QAAS2I,GAAMsL,YAEnD,OAAOlW,KAAKuxB,UAAUnoB,EAAOpJ,KAAKsK,YAgBnCylB,EAAAtuB,UAAA+vB,eAAA,SACCnvB,EACA2B,EACAsI,EACA+R,QAAA,IAAAA,MAAA3T,KAEA,IAAMtB,EAAQ,IAAI+lB,GAAqBnvB,MACtCqC,SAAQA,EACRgc,SAAW,IAAI9H,GAAUvW,KAAKiC,QAASoc,GAAUnI,UACjDlS,SAAU,IAAIuS,GAAUvW,KAAKiC,QAAS+B,GAAUkS,UAChDtL,KAAO,IAAImQ,GAAmB/a,KAAKiC,QAASqK,GAAW4J,YAIxD,OAAOlW,KAAKuxB,UAAUnoB,EAAOpJ,KAAKmwB,kBASnCJ,EAAAtuB,UAAAouB,aAAA,SAAaxtB,EAA6BuI,GACzC,IAAMxB,EAAQ,IAAI0lB,GAAe9uB,MAChCqC,SAAQA,EACRoH,MAAO,EACPmB,KAAO,IAAImQ,GAAmB/a,KAAKiC,QAAS2I,GAAMsL,YAEnD,OAAOlW,KAAKuxB,UAAUnoB,EAAOpJ,KAAKsK,YAOnCylB,EAAAtuB,UAAAqkB,MAAA,SAAM2L,GACL,GAAIzxB,KAAKkwB,iBAAiBxuB,eAAe+vB,GAAU,CAClD,IAAMC,EAAO1xB,KAAKkwB,iBAAiBuB,EAAQ9sB,YAC3C+sB,EAAKC,SAAS1mB,OAAOymB,EAAKtoB,OAC1BsoB,EAAKtoB,MAAMhF,iBACJpE,KAAKkwB,iBAAiBuB,EAAQ9sB,YAEtC,OAAO3E,MAQA+vB,EAAAtuB,UAAA8vB,UAAR,SAAkBnoB,EAAuBuoB,GAMxC,OALA3xB,KAAKkwB,iBAAiB9mB,EAAMsI,GAAG/M,aAC9ByE,MAAKA,EACLuoB,SAAQA,GAETA,EAAShnB,IAAIvB,GACNA,EAAMsI,IASdqe,EAAAtuB,UAAA6J,OAAA,SAAOC,GAAP,IAAA9H,EAAAzD,UAAO,IAAAuL,MAAA,GACN,IAAMqmB,EAAgB5xB,KAAKkW,QAAQ3K,GAGnC,OAFAvL,KAAKsK,UAAUkC,YAAYolB,EAAe,SAAAxoB,GAAS,OAAA3F,EAAKqiB,MAAM1c,EAAMsI,MACpE1R,KAAKmwB,gBAAgB3jB,YAAYolB,EAAe,SAAAxoB,GAAS,OAAA3F,EAAKqiB,MAAM1c,EAAMsI,MACnE1R,MAUA+vB,EAAAtuB,UAAAivB,iBAAR,eAAAjtB,EAAAzD,KACCA,KAAKwwB,OAAOrnB,GAAG,QAAS,SAACyB,EAAMqc,GAC9BA,EAAS,IAAI6D,GAAWrnB,EAAKxB,QAASglB,GAAQhR,YAC9CxS,EAAKoG,KAAK,QAASe,EAAMqc,KAG1BjnB,KAAKwwB,OAAOrnB,GAAG,OAAQ,SAACyB,GACvBnH,EAAKoG,KAAK,OAAQe,KAGnB5K,KAAKwwB,OAAOrnB,GAAG,QAAS,SAACyB,GACxBnH,EAAKoG,KAAK,QAASe,MAOrB9J,OAAAC,eAAIgvB,EAAAtuB,UAAA,aAAJ,WACC,OAAOzB,KAAKwwB,OAAO1G,eAAe9pB,KAAKsQ,wCAWxCyf,EAAAtuB,UAAA0P,MAAA,SAAMvG,EAAaqc,GAClB,IAAI4K,EAMJ,OALIttB,EAAU0iB,KACb4K,EAAc7xB,KAAKkW,QAAQ+Q,IAG5BjnB,KAAKwwB,OAAOrf,MAAMvG,EAAMinB,GACjB7xB,MASR+vB,EAAAtuB,UAAA2nB,KAAA,SAAKxe,GAEJ,OADA5K,KAAKwwB,OAAOpH,KAAKxe,GACV5K,MAMR+vB,EAAAtuB,UAAA4nB,MAAA,SAAMze,GAEL,OADA5K,KAAKwwB,OAAOnH,MAAMze,GACX5K,MAQR+vB,EAAAtuB,UAAAqwB,OAAA,SAAOlnB,GAON,OANAA,EAAO5K,KAAKiW,UAAUrL,GACmB,YAArC5K,KAAKwwB,OAAO1G,eAAelf,GAC9B5K,KAAKmR,MAAMvG,GAEX5K,KAAKopB,KAAKxe,GAEJ5K,MAkBRc,OAAAC,eAAIgvB,EAAAtuB,UAAA,qBAAJ,WACC,OAAOzB,KAAK2wB,oBAEb,SAAkBoB,GACbjtB,EAAQitB,KACXA,EAAWA,EAAQ,GAAKA,EAAQ,GAAM,GAEvC/xB,KAAK2wB,eAAiBoB,mCAMvBjxB,OAAAC,eAAIgvB,EAAAtuB,UAAA,iBAAJ,WACC,OAAO,IAAI8U,GAAUvW,KAAKiC,QAASjC,KAAKgwB,WAAY,KAAK/Z,iBAE1D,SAAc+b,GACbhyB,KAAKgwB,WAAahwB,KAAKkW,QAAQ8b,oCAMhClxB,OAAAC,eAAIgvB,EAAAtuB,UAAA,eAAJ,WACC,OAAO,IAAI8U,GAAUvW,KAAKiC,QAASjC,KAAKiwB,SAAU,KAAKha,iBAExD,SAAYgc,GACXjyB,KAAKiwB,SAAWjwB,KAAKkW,QAAQ+b,oCAU9BlC,EAAAtuB,UAAAywB,cAAA,SAAcF,EAA8BC,GAG3C,OAFAjyB,KAAK+wB,UAAYiB,EACjBhyB,KAAK8wB,QAAUmB,EACRjyB,MAMRc,OAAAC,eAAIgvB,EAAAtuB,UAAA,aAAJ,WACC,OAAOzB,KAAKqwB,kBAEb,SAAUe,GAETpxB,KAAKqwB,aAAee,mCAQrBtwB,OAAAC,eAAIgvB,EAAAtuB,UAAA,wBAAJ,WACC,OAAO,IAAIqpB,GAAW9qB,KAAKiC,QAASjC,KAAK4wB,aAAa3Z,kBAEvD,SAAqBD,GACpBhX,KAAK4wB,YAAc5wB,KAAKkW,QAAQc,oCAOjClW,OAAAC,eAAIgvB,EAAAtuB,UAAA,gBAAJ,WACC,IAAM6O,EAAMtQ,KAAKsQ,MACXqF,EAAQ3V,KAAKwwB,OAAOxI,eAAe1X,GACzC,OAAO,IAAIwa,GAAW9qB,KAAKiC,QAAS0T,GAAO8B,6BAE5C,SAAa0Z,GACZ,IAAMxb,EAAQ3V,KAAKkW,QAAQib,GAC3BnxB,KAAK2V,MAAQA,mCAOd7U,OAAAC,eAAIgvB,EAAAtuB,UAAA,eAAJ,WACC,OAAOzB,KAAKwwB,OAAO9a,aAGpB,SAAY9T,GACX,IAAM0O,EAAMtQ,KAAKsQ,MACXqF,EAAQ3V,KAAKwwB,OAAO1d,UAAU6V,YAAY/mB,EAAG0O,GACnDtQ,KAAK2V,MAAQA,mCAOd7U,OAAAC,eAAIgvB,EAAAtuB,UAAA,gBAAJ,WACC,GAAIzB,KAAKkR,KAAM,CACd,IAAMZ,EAAMtQ,KAAKsQ,MAEjB,OADctQ,KAAKwwB,OAAOxI,eAAe1X,GACzBtQ,KAAKgwB,aAAehwB,KAAKiwB,SAAWjwB,KAAKgwB,YAEzD,OAAO,mCAOTlvB,OAAAC,eAAIgvB,EAAAtuB,UAAA,aAAJ,WACC,OAAOzB,KAAKwwB,OAAO7a,WAEpB,SAAUzF,GACT,GAAIlQ,KAAKwwB,OAAO7a,QAAUzF,EAAG,CAC5B,IAAMI,EAAMtQ,KAAKsQ,MAEE,YAAftQ,KAAK8N,OACR9N,KAAK6J,KAAK,OAAQyG,GAClBtQ,KAAKwwB,OAAOtH,eAAehZ,EAAGI,GAE9BtQ,KAAK6J,KAAK,QAASyG,EAAKtQ,KAAK0V,UAE7B1V,KAAKwwB,OAAOtH,eAAehZ,EAAGI,qCAUjCyf,EAAAtuB,UAAAumB,eAAA,SAAepd,GACd,OAAO3G,KAAK8O,MAAM/S,KAAKwwB,OAAOxI,eAAepd,KAQ9CmlB,EAAAtuB,UAAAmoB,iBAAA,SAAiBhf,GAChB,OAAO5K,KAAKwwB,OAAO5G,iBAAiBhf,IASrC9J,OAAAC,eAAIgvB,EAAAtuB,UAAA,WAAJ,WACC,OAAOzB,KAAKwwB,OAAO1d,UAAUqU,gBAE9B,SAAQoJ,GACPvwB,KAAKwwB,OAAO1d,UAAUqU,WAAaoJ,mCAkBpCR,EAAAtuB,UAAAoV,gBAAA,SAAgBG,GAEf,GADAA,EAAchX,KAAKkW,QAAQc,GACR,YAAfhX,KAAK8N,MAER,OAAO,EAEP,IAAMwC,EAAMtQ,KAAKsQ,MAGX6hB,EAAiBnb,EADFhX,KAAKgoB,eAAe1X,GACW0G,EACpD,OAAOhX,KAAKwwB,OAAOnG,aAAa8H,EAAgB7hB,IAalDyf,EAAAtuB,UAAA2wB,WAAA,SAAWC,EAAqBC,GAC/B,IAAKA,EAAO,CAEX,IAAMhiB,EAAMtQ,KAAKsQ,MACjB,GAAmC,IAA/B+hB,EAAOhW,eAAe/L,GAAY,CACrC,IACMiiB,EAAe,GAAK,GADdvyB,KAAK8V,IAAIuG,eAAe/L,GACCtQ,KAAKgW,KAC1Csc,EAAQD,EAAOhW,eAAe/L,GAAOiiB,OAErCD,EAAQ,EAGV,IAAME,EAAc,IAAIrR,GAAKmR,GAW7B,OATAtyB,KAAK8V,IAAI+J,QAAQ2S,GAEjBA,EAAY3S,QAAQwS,EAAOvW,QAC3B9b,KAAKowB,eAAe5mB,MACnB+c,QAAU8L,EAAOjxB,MACjBkxB,MAAQE,EACRH,OAAMA,IAEPA,EAAOjxB,MAAQ,EACRpB,MAOR+vB,EAAAtuB,UAAAgxB,aAAA,SAAaJ,GACZ,IAAK,IAAIjyB,EAAIJ,KAAKowB,eAAe9pB,OAAS,EAAGlG,GAAK,EAAGA,IAAK,CACzD,IAAMsyB,EAAe1yB,KAAKowB,eAAehwB,GACrCsyB,EAAaL,SAAWA,IAC3BK,EAAaJ,MAAMluB,UACnBsuB,EAAaL,OAAOjxB,MAAQsxB,EAAanM,QACzCvmB,KAAKowB,eAAe7oB,OAAOnH,EAAG,IAGhC,OAAOJ,MAMR+vB,EAAAtuB,UAAA2C,QAAA,WAMC,OALA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKwwB,OAAOpsB,UACZ6c,GAASjhB,KAAM,OACfA,KAAKsK,UAAUlG,UACfpE,KAAKmwB,gBAAgB/rB,UACdpE,MAWT+vB,EAlnBA,CAA+B7U,IAonB/BnS,EAAQiB,MAAM8lB,IAMdnjB,EAAc,SAAA1K,GACbA,EAAQ4P,UAAY,IAAIie,IAAY7tB,QAAOA,MAG5C6K,EAAe,SAAA7K,GACdA,EAAQ4P,UAAUzN,oWCtpBnBuuB,GAAA,SAAA3pB,GA4DC,SAAA4pB,EAAYroB,GAAZ,IAAA9G,EACCuF,EAAAzI,KAAAP,KAAMuK,IAAQvK,YA9CfyD,EAAAsY,WAAQ5R,EAiBE1G,EAAAulB,OAQL,IAAI1C,GAAc,WAOb7iB,EAAAovB,SAAU,EAKZpvB,EAAAqvB,cAKArvB,EAAAsvB,aAAyD7R,GACzDzd,EAAAuvB,YAAuC9R,GAI9Czd,EAAKulB,OAAOxe,OAAS,IAErB/G,EAAKwvB,QAAUxvB,EAAK4b,OAAS,IAAI+O,IAChCnsB,QAASwB,EAAKxB,QACdusB,KAAMjkB,EAAQikB,KACdF,OAAQ/jB,EAAQ+jB,SAEjB7qB,EAAK6qB,OAAS7qB,EAAKwvB,QAAQ3E,OAC3BvN,GAAStd,EAAM,UACfA,EAAKyvB,OAAS3oB,EAAQ2oB,SAyMxB,OAhRoEC,GAAAP,EAAA5pB,GA0E5D4pB,EAAAnqB,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClC+lB,MAAM,EACN0E,OAAQhS,GACRoN,OAAQ,KAOVxtB,OAAAC,eAAI6xB,EAAAnxB,UAAA,aAAJ,WACC,OAAIzB,KAAK6yB,QAC6B,YAAjC7yB,KAAKiC,QAAQ4P,UAAU/D,MACnB9N,KAAKgpB,OAAO3M,eAAerc,KAAKiC,QAAQ4P,UAAU6D,SAElD,UAGD1V,KAAKgpB,OAAO3M,eAAerc,KAAKsQ,wCAUzCxP,OAAAC,eAAI6xB,EAAAnxB,UAAA,YAAJ,WACC,OAAOzB,KAAKizB,QAAQzE,UAErB,SAASA,GACRxuB,KAAKizB,QAAQzE,KAAOA,mCAYboE,EAAAnxB,UAAA2xB,oBAAR,SAA4BxoB,GAC3B,OAAI5K,KAAK6yB,QACDjoB,EAEA3G,KAAKC,IAAI0G,EAAM5K,KAAKiC,QAAQ8N,cAWrC6iB,EAAAnxB,UAAA0P,MAAA,SAAMvG,EAAaqc,EAAe5I,GAAlC,IAAA5a,EAAAzD,KACK4c,EAAevY,EAAQuG,IAAS5K,KAAK6yB,QAAU7yB,KAAKiC,QAAQ4P,UAAU6D,QAAU1V,KAAKiW,UAAUrL,GAInG,GAHAgS,EAAe5c,KAAKozB,oBAAoBxW,GACxC5c,KAAK0I,IAAI,QAASkU,GAE+B,YAA7C5c,KAAKgpB,OAAO3M,eAAeO,GAC9B5c,KAAKgpB,OAAO1d,OAAOsR,GACnB5c,KAAKgpB,OAAOtC,eAAe,UAAW9J,GACtC5c,KAAKqzB,QAAQzW,EAAcqK,EAAQ5I,QAGnC,GADAre,KAAKgpB,OAAOtC,eAAe,UAAW9J,GAClC5c,KAAK6yB,QAAS,CAEjB,IAAM/mB,EAAQ9L,KAAKgpB,OAAO9nB,IAAI0b,GAC1B9Q,IACHA,EAAMmb,OAASjnB,KAAKiW,UAAUxO,EAAWwf,EAAQ,IACjDnb,EAAMuS,SAAWA,EAAWre,KAAKiW,UAAUoI,QAAYlU,GAExD,IAAMmpB,EAAQtzB,KAAKiC,QAAQ4P,UAAUga,SAAS,SAAA3b,GAC7CzM,EAAK8vB,OAAOrjB,EAAG+W,EAAQ5I,IACrBzB,GACH5c,KAAK8yB,WAAWtpB,KAAK8pB,GAGgB,YAAjCtzB,KAAKiC,QAAQ4P,UAAU/D,OAC1B9N,KAAK+yB,aAAa/yB,KAAKsQ,MAAOtQ,KAAKiC,QAAQ4P,UAAU6D,cAGtD1V,KAAKuzB,OAAO3W,EAAcqK,EAAQ5I,GAGpC,OAAOre,MAUR4yB,EAAAnxB,UAAA2nB,KAAA,SAAKxe,GACJ,IAAIgS,EAAevY,EAAQuG,IAAS5K,KAAK6yB,QAAU7yB,KAAKiC,QAAQ4P,UAAU6D,QAAU1V,KAAKiW,UAAUrL,GAGnG,GAFAgS,EAAe5c,KAAKozB,oBAAoBxW,GACxC5c,KAAK0I,IAAI,OAAQkU,GACZ5c,KAAK6yB,QAEH,CACN,IAAMS,EAAQtzB,KAAKiC,QAAQ4P,UAAUga,SAAS7rB,KAAKwzB,MAAMlwB,KAAKtD,MAAO4c,GACrE5c,KAAK8yB,WAAWtpB,KAAK8pB,QAHrBtzB,KAAKwzB,MAAM5W,GAOZ,OAFA5c,KAAKgpB,OAAO1d,OAAOsR,GACnB5c,KAAKgpB,OAAOtC,eAAe,UAAW9J,GAC/B5c,MAqBR4yB,EAAAnxB,UAAAgyB,KAAA,eAAAhwB,EAAAzD,KA+BC,OA9BKA,KAAK6yB,UACT7yB,KAAK6yB,SAAU,EACf7yB,KAAK+yB,aAAe,SAACnoB,EAAMqc,GAC1B,GAAIA,EAAS,EAAG,CAEf,IAAMyM,EAAajwB,EAAKulB,OAAO9nB,IAAI+lB,GAEnC,GAAIyM,GAAmC,YAArBA,EAAW5lB,OAAuB4lB,EAAW9oB,OAASqc,EAAQ,CAE/E,IAAM0M,EAAc1M,EAASxjB,EAAKwS,UAAUyd,EAAW9oB,MACnDyT,OAAQ,EACRqV,EAAWrV,WACdA,EAAW5a,EAAKwS,UAAUyd,EAAWrV,UAAYsV,GAElDlwB,EAAK8vB,OAAO3oB,EAAMnH,EAAKwS,UAAUyd,EAAWzM,QAAU0M,EAAatV,MAItEre,KAAKgzB,YAAc,SAAApoB,GAClB,IAAM8K,EAAUjS,EAAKxB,QAAQ4P,UAAU+X,iBAAiB3lB,KAAKC,IAAI0G,EAAOnH,EAAKib,WAAY,IAC7C,YAAxCjb,EAAKulB,OAAO3M,eAAe3G,IAC9BjS,EAAK+vB,MAAM5oB,IAGb5K,KAAKiC,QAAQ4P,UAAU1I,GAAG,QAASnJ,KAAK+yB,cACxC/yB,KAAKiC,QAAQ4P,UAAU1I,GAAG,YAAanJ,KAAK+yB,cAC5C/yB,KAAKiC,QAAQ4P,UAAU1I,GAAG,OAAQnJ,KAAKgzB,aACvChzB,KAAKiC,QAAQ4P,UAAU1I,GAAG,QAASnJ,KAAKgzB,aACxChzB,KAAKiC,QAAQ4P,UAAU1I,GAAG,UAAWnJ,KAAKgzB,cAEpChzB,MAMR4yB,EAAAnxB,UAAAmyB,OAAA,eAAAnwB,EAAAzD,KAaC,OAZIA,KAAK6yB,UACR7yB,KAAKiC,QAAQ4P,UAAUlI,IAAI,OAAQ3J,KAAKgzB,aACxChzB,KAAKiC,QAAQ4P,UAAUlI,IAAI,QAAS3J,KAAKgzB,aACzChzB,KAAKiC,QAAQ4P,UAAUlI,IAAI,UAAW3J,KAAKgzB,aAC3ChzB,KAAKiC,QAAQ4P,UAAUlI,IAAI,QAAS3J,KAAK+yB,cACzC/yB,KAAKiC,QAAQ4P,UAAUlI,IAAI,YAAa3J,KAAK+yB,eAE9C/yB,KAAK6yB,SAAU,EAEf7yB,KAAK8yB,WAAW/qB,QAAQ,SAAA2J,GAAM,OAAAjO,EAAKxB,QAAQ4P,UAAUiU,MAAMpU,KAC3D1R,KAAK8yB,cACL9yB,KAAKgpB,OAAO1d,OAAO,GACZtL,MAMR4yB,EAAAnxB,UAAA2C,QAAA,WAMC,OALA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKkzB,OAAShS,GACdlhB,KAAK4zB,SACL5zB,KAAKizB,QAAQ7uB,UACbpE,KAAKgpB,OAAO5kB,UACLpE,MAET4yB,EAhRA,CAAoE3T,gVCvBpE4U,GAAA,SAAA7qB,GAwDC,SAAA8qB,EAAYvpB,GAAZ,IAAA9G,EACCuF,EAAAzI,KAAAP,KAAMuK,IAAQvK,YAnDfyD,EAAAswB,QAA2B7S,GAUjBzd,EAAAuwB,YAAsB,EAKtBvwB,EAAAwwB,WAAqB,EAKvBxwB,EAAAC,UAAoB,EAK5BD,EAAA4b,OAAe,IAAI8B,IAClBlf,QAASwB,EAAKxB,QACdwQ,KAAO,IAMEhP,EAAA4d,UAAY5d,EAAK4b,OAuI3B5b,EAAAqmB,eAAiB,SAASlf,GACzB,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GACpC,OAAyB,IAArB5K,KAAKg0B,YAAqBpX,GAAgB5c,KAAKg0B,cAC7B,IAApBh0B,KAAKi0B,WAAoBrX,GAAgB5c,KAAKi0B,WACxC,UAEA,WAzHRxwB,EAAKywB,QAAU3pB,EAAQ4pB,OACvB1wB,EAAK2wB,SAAW7pB,EAAQ8pB,QACxB5wB,EAAK6wB,OAAS/pB,EAAQgqB,MACtB9wB,EAAKswB,QAAUxpB,EAAQwpB,UAmJzB,OAjNkFS,GAAAV,EAAA9qB,GAiE1E8qB,EAAArrB,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClC8rB,MAAO,SACPJ,OAAS,EACTE,QAAS,EACTN,QAAU7S,MAkBF4S,EAAAryB,UAAAgzB,WAAV,SAAqB7pB,EAAe6H,QAAA,IAAAA,MAAA,GACnCzS,KAAKiI,QAA4B,IAArBjI,KAAKg0B,WAAmB,2CAEpC,IAAMU,EAAa10B,KAAKiW,UAAUjW,KAAKk0B,SAiBvC,OAdAl0B,KAAKg0B,WAAappB,EAAO8pB,EACzB10B,KAAKg0B,WAAa/vB,KAAKC,IAAIlE,KAAKg0B,WAAYh0B,KAAKiC,QAAQ8N,aAGrD2kB,EAAa,GAChB10B,KAAKqhB,UAAU5O,KAAKnN,eAAe,EAAGsF,GAClB,WAAhB5K,KAAKs0B,OACRt0B,KAAKqhB,UAAU5O,KAAKiL,wBAAwBjL,EAAM7H,EAAO8pB,GAEzD10B,KAAKqhB,UAAU5O,KAAKuL,+BAA+BvL,EAAM7H,EAAM8pB,IAGhE10B,KAAKqhB,UAAU5O,KAAKnN,eAAemN,EAAM7H,GAEnC5K,MAOR8zB,EAAAryB,UAAA2nB,KAAA,SAAKxe,GAGJ,OAFA5K,KAAK0I,IAAI,OAAQkC,GACjB5K,KAAK20B,UAAU30B,KAAKiW,UAAUrL,IACvB5K,MAOE8zB,EAAAryB,UAAAkzB,UAAV,SAAoB/pB,GAApB,IAAAnH,EAAAzD,KACCA,KAAKiI,QAA4B,IAArBjI,KAAKg0B,WAAmB,wCAEpCh0B,KAAK40B,aAGL,IAAMC,EAAc70B,KAAKiW,UAAUjW,KAAKo0B,UAwBxC,OArBAp0B,KAAKi0B,UAAYj0B,KAAKiW,UAAUrL,GAAQiqB,EACxC70B,KAAKi0B,UAAYhwB,KAAKC,IAAIlE,KAAKi0B,UAAWj0B,KAAKiC,QAAQ8N,aACnD8kB,EAAc,EAEG,WAAhB70B,KAAKs0B,OACRt0B,KAAKqhB,UAAU5O,KAAKqL,aAAa,EAAG+W,EAAajqB,GAEjD5K,KAAKqhB,UAAU5O,KAAKsL,aAAa,EAAG8W,EAAajqB,IAIlD5K,KAAKqhB,UAAU5O,KAAKgL,oBAAoB7S,GACxC5K,KAAKqhB,UAAU5O,KAAKnN,eAAe,EAAGsF,IAEvC5K,KAAKiC,QAAQ6B,aAAa9D,KAAK0D,UAC/B1D,KAAK0D,SAAW1D,KAAKiC,QAAQ0B,WAAW,WAEvC,IAAMmxB,EAAiC,gBAAhBrxB,EAAK6wB,OAAyC,EAAdO,EAAkB,EACzEpxB,EAAKsxB,YAAYtxB,EAAK6M,MAAQwkB,GAC9BrxB,EAAKuxB,YACHh1B,KAAKi0B,UAAYj0B,KAAKiC,QAAQqO,OAC1BtQ,MAME8zB,EAAAryB,UAAAuzB,SAAV,eAAAvxB,EAAAzD,KACKA,KAAK+zB,UAAY7S,KACpBlhB,KAAK+zB,QAAQ/zB,MAEbA,KAAK+zB,QAAU7S,GAEfvd,WAAW,WAAM,OAAAF,EAAKW,WAAW,OAoBnCtD,OAAAC,eAAI+yB,EAAAryB,UAAA,aAAJ,WACC,OAAOzB,KAAK8pB,eAAe9pB,KAAKsQ,wCAMjCwjB,EAAAryB,UAAAmzB,WAAA,WAOC,OANA50B,KAAK0I,IAAI,cACT1I,KAAKiI,QAA4B,IAArBjI,KAAKg0B,WAAmB,yBAEpCh0B,KAAKqhB,UAAU5O,KAAK8J,sBAAsBvc,KAAKg0B,WAAah0B,KAAK0e,YACjE1e,KAAKiC,QAAQ6B,aAAa9D,KAAK0D,UAC/B1D,KAAKi0B,WAAa,EACXj0B,MAGR8zB,EAAAryB,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKqhB,UAAU/P,aACRtR,MAET8zB,EAjNA,CAAkF7U,gVCWlFgW,GAAA,SAAAjsB,GA4BC,SAAAksB,IAAA,IAAAzxB,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBouB,EAAiBzsB,cAAepC,WAAY,SAAU,aAAWrG,KA5B7FyD,EAAA9C,KAAO,mBAKC8C,EAAA0xB,QAAU1xB,EAAKxB,QAAQmM,qBACrB3K,EAAA0b,mBAAqB1b,EAAK0xB,SAe5B1xB,EAAA2xB,gBAA0B,EAC1B3xB,EAAA4xB,gBAA0B,EAOjC,IAAM9qB,EAAUzD,EAAqBouB,EAAiBzsB,cAAepC,WAAY,SAAU,kBAE3FwZ,GAAQpc,EAAK0xB,QAAS1xB,EAAK4d,WAC3B5d,EAAK0xB,QAAQpB,QAAU,WAAM,OAAAtwB,EAAKsxB,eAKlCtxB,EAAK6xB,aAAe,IAAI5Z,IACvBzZ,QAASwB,EAAKxB,QACdiJ,MAAQzH,EAAK0xB,QAAQG,aACrBhiB,MAAQ,WACRlS,MAAQmJ,EAAQ+qB,eAIjB7xB,EAAKyN,KAAO3G,EAAQ2G,KACpBzN,EAAKstB,UAAYxmB,EAAQwmB,UACzBttB,EAAKqtB,QAAUvmB,EAAQumB,QACvBrtB,EAAK8e,QAAU,IAAIR,GAAgBxX,EAAQqG,OAAQrG,EAAQ0X,QAE3Dxe,EAAK0b,kBAAkB3V,KAAK/F,EAAK0xB,WAmKnC,OAvNsCI,GAAAL,EAAAlsB,GAuD9BksB,EAAAzsB,YAAP,WACC,OAAO3H,OAAO2F,OAAOotB,GAAcprB,eAClCmI,OAAQ,IAAImR,GACZ7Q,MAAM,EACN4f,QAAU,EACVC,UAAY,EACZ9O,OAAQf,GACRoU,aAAe,KAOjBx0B,OAAAC,eAAIm0B,EAAAzzB,UAAA,cAAJ,WACC,OAAOzB,KAAKk0B,aAEb,SAAWhkB,GACVlQ,KAAKk0B,QAAUhkB,mCAMhBpP,OAAAC,eAAIm0B,EAAAzzB,UAAA,eAAJ,WACC,OAAOzB,KAAKo0B,cAEb,SAAYlkB,GACXlQ,KAAKo0B,SAAWlkB,mCAMjBpP,OAAAC,eAAIm0B,EAAAzzB,UAAA,aAAJ,WACC,OAAOzB,KAAKs0B,YAEb,SAAUpkB,GACTlQ,KAAKs0B,OAASpkB,mCAYfglB,EAAAzzB,UAAA0P,MAAA,SAAMvG,EAAaqc,EAAe5I,EAAiB5L,QAAA,IAAAA,MAAA,GAClDzS,KAAKiI,OAAOjI,KAAK4Q,OAAO4R,OAAQ,0CAChC,IAAM5F,EAAe5c,KAAKiW,UAAUrL,GAGpC5K,KAAKy0B,WAAW7X,EAAcnK,GAI7BwU,EADGjnB,KAAKkR,KACCzJ,EAAWwf,EAAQjnB,KAAK+wB,WAGxBtpB,EAAWwf,EAAQ,GAG7B,IAAIuO,EAAiBvxB,KAAKC,IAAIlE,KAAKiW,UAAUgR,GAAS,GAGtD,GAAIjnB,KAAKkR,KAAM,CAEd,IAAM4f,EAAU9wB,KAAKiW,UAAUjW,KAAK8wB,UAAY9wB,KAAK4Q,OAAOyN,SACtD0S,EAAY/wB,KAAKiW,UAAUjW,KAAK+wB,WAGlCyE,GAAkB1E,IACrB0E,GAAmBA,EAAiBzE,IAHhBD,EAAUC,GAGmCA,GAanE,GARA/wB,KAAKm1B,QAAQvkB,OAAS5Q,KAAK4Q,OAAO1P,MAClClB,KAAKm1B,QAAQrE,QAAU9wB,KAAKiW,UAAUjW,KAAK8wB,UAAY9wB,KAAK4Q,OAAOyN,SAC/DmX,EAAiBx1B,KAAK4Q,OAAOyN,WAChCre,KAAKo1B,gBAAiB,EACtBp1B,KAAKm1B,QAAQhkB,MAAMyL,EAAc4Y,IAI9BjxB,EAAU8Z,GAAW,CACxB,IAAIoX,EAAcz1B,KAAKiW,UAAUoI,GAEjCoX,EAAcxxB,KAAKC,IAAIuxB,EAAa,GACpCz1B,KAAKopB,KAAKxM,EAAe6Y,GAG1B,OAAOz1B,MAGEk1B,EAAAzzB,UAAAszB,YAAV,SAAsBnqB,GAChB5K,KAAKq1B,iBACTr1B,KAAKq1B,gBAAiB,EACtBr1B,KAAKm1B,QAAQ/L,KAAKppB,KAAKiW,UAAUrL,IACjC5K,KAAKg1B,aAOPl0B,OAAAC,eAAIm0B,EAAAzzB,UAAA,iBAAJ,WACC,OAAOzB,KAAKm1B,QAAQpE,eAErB,SAAcA,GACb/wB,KAAKm1B,QAAQpE,UAAY/wB,KAAKiW,UAAU8a,oCAMzCjwB,OAAAC,eAAIm0B,EAAAzzB,UAAA,eAAJ,WACC,OAAOzB,KAAKm1B,QAAQrE,aAErB,SAAYA,GACX9wB,KAAKm1B,QAAQrE,QAAU9wB,KAAKiW,UAAU6a,oCAMvChwB,OAAAC,eAAIm0B,EAAAzzB,UAAA,cAAJ,WACC,OAAOzB,KAAKuiB,aAEb,SAAW3R,GACV5Q,KAAKuiB,QAAQnR,IAAIR,oCAMlB9P,OAAAC,eAAIm0B,EAAAzzB,UAAA,YAAJ,WACC,OAAOzB,KAAKm1B,QAAQjkB,UAErB,SAASA,GACRlR,KAAKm1B,QAAQjkB,KAAOA,EAChBlR,KAAKo1B,gBACRp1B,KAAK40B,8CAOPM,EAAAzzB,UAAA2C,QAAA,WAMC,OALA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKm1B,QAAQpB,QAAU,KACvB/zB,KAAKm1B,QAAQ7jB,aACbtR,KAAKuiB,QAAQne,UACbpE,KAAKs1B,aAAalxB,UACXpE,MAETk1B,EAvNA,CAAsCrB,gVCUtC6B,GAAA,SAAA1sB,GAiCC,SAAA2sB,IAAA,IAAAlyB,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqB6uB,EAAMltB,cAAepC,WAAY,WAASrG,KAhC7DyD,EAAA9C,KAAO,QAKR8C,EAAA0xB,QAAmC,KA4B1C,IAAM5qB,EAAUzD,EAAqB6uB,EAAMltB,cAAepC,WAAY,gBAEtE5C,EAAKmyB,cAAgBrrB,EAAQ+qB,aAC7B7xB,EAAKnB,KAAOiI,EAAQjI,KACpBmB,EAAKywB,QAAU3pB,EAAQ4pB,OACvB1wB,EAAK2wB,SAAW7pB,EAAQ8pB,UA6H1B,OArK2BwB,GAAAF,EAAA3sB,GA2CnB2sB,EAAAltB,YAAP,WACC,OAAO3H,OAAO2F,OAAOksB,GAAOlqB,eAC3B0rB,OAAQ,EACRE,QAAS,EACTiB,aAAc,EACdhzB,KAAM,WASRxB,OAAAC,eAAI40B,EAAAl0B,UAAA,YAAJ,WACC,OAAOzB,KAAKyC,WAEb,SAASH,GAER,GADAtC,KAAKiI,OAAO3F,KAAQwzB,GAAe,wBAA0BxzB,GACzDtC,KAAKyC,QAAUH,IAClBtC,KAAKyC,MAAQH,EAEM,YAAftC,KAAK8N,OAAqB,CAC7B,IAAMwC,EAAMtQ,KAAKsQ,MACjBtQ,KAAKwzB,MAAMljB,GACXtQ,KAAKuzB,OAAOjjB,qCASfxP,OAAAC,eAAI40B,EAAAl0B,UAAA,oBAAJ,WACC,OAAOzB,KAAK41B,mBAEb,SAAiBG,GAChB/1B,KAAK41B,cAAgBG,EACjB/1B,KAAKm1B,UACRn1B,KAAKm1B,QAAQG,aAAal0B,MAAQ20B,oCAO1BJ,EAAAl0B,UAAA8xB,OAAV,SAAiB3oB,GAAjB,IAAAnH,EAAAzD,KACO4Q,EAASklB,GAAc91B,KAAKyC,OAClCzC,KAAKm1B,QAAU,IAAIF,IAClBrkB,OAAMA,EACN3O,QAASjC,KAAKiC,QACdkyB,OAAQn0B,KAAKk0B,QACbG,QAASr0B,KAAKo0B,SACdljB,MAAM,EACN6iB,QAAS,WAAM,OAAAtwB,EAAKyvB,OAAOzvB,IAC3B6xB,aAAct1B,KAAK41B,gBACjB/V,QAAQ7f,KAAKqf,QAChBrf,KAAKm1B,QAAQhkB,MAAMnR,KAAKiW,UAAUrL,GAAO3G,KAAK+xB,UAAYplB,EAAOyN,SAAW,QASnEsX,EAAAl0B,UAAA+xB,MAAV,SAAgB5oB,GACX5K,KAAKm1B,UACRn1B,KAAKm1B,QAAQ/L,KAAKppB,KAAKiW,UAAUrL,IACjC5K,KAAKm1B,QAAU,OAOjBr0B,OAAAC,eAAI40B,EAAAl0B,UAAA,cAAJ,WACC,OAAOzB,KAAKk0B,aAEb,SAAWtpB,GACV5K,KAAKk0B,QAAUtpB,EACX5K,KAAKm1B,UACRn1B,KAAKm1B,QAAQhB,OAASn0B,KAAKk0B,0CAO7BpzB,OAAAC,eAAI40B,EAAAl0B,UAAA,eAAJ,WACC,OAAOzB,KAAKo0B,cAEb,SAAYxpB,GACX5K,KAAKo0B,SAAWxpB,EACZ5K,KAAKm1B,UACRn1B,KAAKm1B,QAAQd,QAAUr0B,KAAKo0B,2CAQ9BuB,EAAAl0B,UAAA4xB,QAAA,SAAQzoB,GAKP,OAFA5K,KAAKwzB,MAAM5oB,GACX5K,KAAKuzB,OAAO3oB,GACL5K,MAMR21B,EAAAl0B,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACTA,KAAKm1B,SACRn1B,KAAKm1B,QAAQ7jB,aAEPtR,MAET21B,EArKA,CAA2BhD,IAyLrBsD,IACLC,MAAO,KACPC,KAAM,KACNC,MAAO,MAQFN,IACLI,YACC,IAAKD,GAAYC,MAAO,CAEvB,IADA,IAAMtlB,KACGylB,EAAa,EAAGA,EA3BP,EA2BkCA,IAAc,CACjE,IAAM3S,EAAU,IAAIF,aA7BF,QA8BlB5S,EAAOylB,GAAc3S,EAErB,IADA,IAAI4S,EAAU,EACLl2B,EAAI,EAAGA,EAhCE,OAgCiBA,IAAK,CACvC,IAAMg2B,EAAwB,EAAhBnyB,KAAK+xB,SAAe,EAClCtS,EAAQtjB,IAAMk2B,EAAW,IAAOF,GAAU,KAC1CE,EAAU5S,EAAQtjB,GAClBsjB,EAAQtjB,IAAM,KAGhB61B,GAAYC,OAAQ,IAAInU,IAAkBgB,UAAUnS,GAErD,OAAOqlB,GAAYC,OAGpBC,WACC,IAAKF,GAAYE,KAAM,CAEtB,IADA,IAAMvlB,KACGylB,EAAa,EAAGA,EA9CP,EA8CkCA,IAAc,CACjE,IAAM3S,EAAU,IAAIF,aAhDF,QAiDlB5S,EAAOylB,GAAc3S,EAErB,IAAI6S,OAAE,EAAEC,OAAE,EAAEC,OAAE,EAAEC,OAAE,EAAEC,OAAE,EAAEC,OAAE,EAAEC,OAAE,EAC9BN,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAK,EACnC,IAAK,IAAIz2B,EAAI,EAAGA,EArDE,OAqDiBA,IAAK,CACvC,IAAMg2B,EAAwB,EAAhBnyB,KAAK+xB,SAAe,EAClCO,EAAK,OAAUA,EAAa,SAARH,EACpBI,EAAK,OAAUA,EAAa,SAARJ,EACpBK,EAAK,KAAUA,EAAa,QAARL,EACpBM,EAAK,MAAUA,EAAa,SAARN,EACpBO,EAAK,IAAUA,EAAa,SAARP,EACpBQ,GAAM,MAASA,EAAa,QAARR,EACpB1S,EAAQtjB,GAAKm2B,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAa,MAART,EAChD1S,EAAQtjB,IAAM,IACdy2B,EAAa,QAART,GAGPH,GAAYE,MAAO,IAAIpU,IAAkBgB,UAAUnS,GAEpD,OAAOqlB,GAAYE,MAGpBC,YACC,IAAKH,GAAYG,MAAO,CAEvB,IADA,IAAMxlB,KACGylB,EAAa,EAAGA,EAzEP,EAyEkCA,IAAc,CACjE,IAAM3S,EAAU,IAAIF,aA3EF,QA4ElB5S,EAAOylB,GAAc3S,EACrB,IAAK,IAAItjB,EAAI,EAAGA,EA7EE,OA6EiBA,IAClCsjB,EAAQtjB,GAAqB,EAAhB6D,KAAK+xB,SAAe,EAGnCC,GAAYG,OAAQ,IAAIrU,IAAkBgB,UAAUnS,GAErD,OAAOqlB,GAAYG,oVC3QrBU,GAAA,SAAA9tB,GAoBC,SAAA+tB,IAAA,IAAAtzB,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBiwB,EAAOtuB,cAAepC,WAAY,QAAS,YAAUrG,KAnBxEyD,EAAA9C,KAAe,SAKf8C,EAAAuzB,UAAoB,EAKnBvzB,EAAAwzB,gBAAsCxzB,EAAKxB,QAAQ4M,uBACpDpL,EAAA4b,OAAqB5b,EAAKwzB,gBAUlC,IAAM1sB,EAAUzD,EAAqBiwB,EAAOtuB,cAAepC,WAAY,QAAS,iBAEhF5C,EAAKwzB,gBAAgB9lB,MAAM,GAC3B1N,EAAKsY,MAAQtY,EAAKqY,OAAS,IAAIJ,IAC9BzZ,QAASwB,EAAKxB,QACdia,QAAS3R,EAAQ2R,QACjBhR,MAAOzH,EAAKwzB,gBAAgBhQ,OAC5B3T,MAAO/I,EAAQ+I,MACflS,MAAOmJ,EAAQnJ,UAyHlB,OAzJwD81B,GAAAH,EAAA/tB,GAoChD+tB,EAAAtuB,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCuI,aAAc,EACdC,iBAAkB,WAClB0O,sBAAuB,WACvBzD,SAAS,EACT5I,MAAO,SACPlS,MAAO,KAIT21B,EAAAt1B,UAAAoe,QAAA,SAAQjO,EAAwBkO,EAAuBC,GAEtD,YAF+B,IAAAD,MAAA,QAAuB,IAAAC,MAAA,GACtDoX,GAAcn3B,KAAM4R,EAAakO,EAAWC,GACrC/f,MAGR+2B,EAAAt1B,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK8b,OAAO1X,UACZpE,KAAKi3B,gBAAgB7N,KAAKppB,KAAKsQ,OAC/BtQ,KAAKi3B,gBAAgB3lB,aACdtR,MASR+2B,EAAAt1B,UAAA6D,eAAA,SAAelE,EAAawJ,GAE3B,OADA5K,KAAK8b,OAAOxW,eAAelE,EAAOwJ,GAC3B5K,MAER+2B,EAAAt1B,UAAA4a,eAAA,SAAezR,GACd,OAAO5K,KAAK8b,OAAOO,eAAezR,IAEnCmsB,EAAAt1B,UAAA8b,aAAA,SAAa3S,GAEZ,OADA5K,KAAK8b,OAAOyB,aAAa3S,GAClB5K,MAER+2B,EAAAt1B,UAAAic,wBAAA,SAAwBtc,EAAawJ,GAEpC,OADA5K,KAAK8b,OAAO4B,wBAAwBtc,EAAOwJ,GACpC5K,MAER+2B,EAAAt1B,UAAAkc,6BAAA,SAA6Bvc,EAAawJ,GAEzC,OADA5K,KAAK8b,OAAO6B,6BAA6Bvc,EAAOwJ,GACzC5K,MAER+2B,EAAAt1B,UAAAmc,kBAAA,SAAkBxc,EAAayc,EAAgBvR,GAE9C,OADAtM,KAAK8b,OAAO8B,kBAAkBxc,EAAOyc,EAAUvR,GACxCtM,MAER+2B,EAAAt1B,UAAAqc,aAAA,SAAa1c,EAAayc,EAAgBvR,GAEzC,OADAtM,KAAK8b,OAAOgC,aAAa1c,EAAOyc,EAAUvR,GACnCtM,MAER+2B,EAAAt1B,UAAAsc,aAAA,SAAa3c,EAAayc,EAAgBvR,GAEzC,OADAtM,KAAK8b,OAAOiC,aAAa3c,EAAOyc,EAAUvR,GACnCtM,MAER+2B,EAAAt1B,UAAAuc,+BAAA,SAA+B5c,EAAawJ,EAAYiT,GAEvD,OADA7d,KAAK8b,OAAOkC,+BAA+B5c,EAAOwJ,EAAMiT,GACjD7d,MAER+2B,EAAAt1B,UAAAyc,gBAAA,SAAgB9c,EAAakL,EAAiB2R,GAE7C,OADAje,KAAK8b,OAAOoC,gBAAgB9c,EAAOkL,EAAW2R,GACvCje,MAER+2B,EAAAt1B,UAAA0c,oBAAA,SAAoBC,EAAgB9R,EAAiB+R,EAAgBC,GAEpE,OADAte,KAAK8b,OAAOqC,oBAAoBC,EAAQ9R,EAAW+R,EAAUC,GACtDte,MAER+2B,EAAAt1B,UAAA8a,sBAAA,SAAsB3R,GAErB,OADA5K,KAAK8b,OAAOS,sBAAsB3R,GAC3B5K,MAER+2B,EAAAt1B,UAAAgc,oBAAA,SAAoB7S,GAEnB,OADA5K,KAAK8b,OAAO2B,oBAAoB7S,GACzB5K,MAER+2B,EAAAt1B,UAAAkd,OAAA,SAAOvd,EAAayc,EAAgBvR,GAEnC,OADAtM,KAAK8b,OAAO6C,OAAOvd,EAAOyc,EAAUvR,GAC7BtM,MAGRc,OAAAC,eAAIg2B,EAAAt1B,UAAA,aAAJ,WACC,OAAOzB,KAAK8b,OAAO1a,WAEpB,SAAUA,GACTpB,KAAK8b,OAAO1a,MAAQA,mCAGrBN,OAAAC,eAAIg2B,EAAAt1B,UAAA,eAAJ,WACC,OAAOzB,KAAK8b,OAAOI,aAEpB,SAAYA,GACXlc,KAAK8b,OAAOI,QAAUA,mCAGvBpb,OAAAC,eAAIg2B,EAAAt1B,UAAA,aAAJ,WACC,OAAOzB,KAAK8b,OAAOxI,uCAGpBxS,OAAAC,eAAIg2B,EAAAt1B,UAAA,kBAAJ,WACC,OAAOzB,KAAK8b,OAAOF,gBAEpB,SAAeA,GACd5b,KAAK8b,OAAOF,WAAaA,mCAG1B9a,OAAAC,eAAIg2B,EAAAt1B,UAAA,gBAAJ,WACC,OAAOzB,KAAK8b,OAAOW,0CAEpB3b,OAAAC,eAAIg2B,EAAAt1B,UAAA,gBAAJ,WACC,OAAOzB,KAAK8b,OAAOU,0CAErBua,EAzJA,CAAwD9X,IAqKlD,SAAUkY,GAAc9E,EAAoBzgB,EAAwBkO,EAAoBC,IACzFnO,aAAuB8J,IAASvW,EAAayM,IAC/CA,aAAuBklB,IAAUllB,EAAYolB,YAE9CplB,EAAY2K,sBAAsB,GAElC3K,EAAYtM,eAAe,EAAG,GAE1BsM,aAAuBklB,KAC1BllB,EAAYgK,YAAa,IAG3BiE,GAAQwS,EAAQzgB,EAAakO,EAAWC,mVCtLzCqX,GAAA,SAAApuB,GAyBC,SAAAquB,IAAA,IAAA5zB,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBuwB,EAAmB5uB,cAAepC,WAAY,YAAa,WAASrG,KAzBvFyD,EAAA9C,KAAO,qBAKR8C,EAAA6zB,YAAc7zB,EAAKxB,QAAQkM,mBACzB1K,EAAA0b,mBAAqB1b,EAAK6zB,aAoBnC,IAAM/sB,EAAUzD,EAAqBuwB,EAAmB5uB,cAAepC,WAAY,YAAa,gBAEhGwZ,GAAQpc,EAAK6zB,YAAa7zB,EAAK4d,WAE/B5d,EAAKnB,KAAOiI,EAAQjI,KAEpBmB,EAAKqP,UAAY,IAAI4I,IACpBzZ,QAASwB,EAAKxB,QACdiJ,MAAQzH,EAAK6zB,YAAYxkB,UACzBQ,MAAQ,YACRlS,MAAQmJ,EAAQuI,YAGjBrP,EAAK8zB,OAAS,IAAI7b,IACjBzZ,QAASwB,EAAKxB,QACdiJ,MAAQzH,EAAK6zB,YAAYC,OACzBjkB,MAAQ,QACRlS,MAAQmJ,EAAQgtB,WA4DnB,OAzGwCC,GAAAH,EAAAruB,GAiDhCquB,EAAA5uB,YAAP,WACC,OAAO3H,OAAO2F,OAAOotB,GAAcprB,eAClC8uB,OAAQ,EACRzkB,UAAW,IACXxQ,KAAM,UAQR+0B,EAAA51B,UAAA0P,MAAA,SAAMvG,GACL,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAIpC,OAHA5K,KAAK0I,IAAI,QAASkU,GAClB5c,KAAKy0B,WAAW7X,GAChB5c,KAAKs3B,YAAYnmB,MAAMyL,GAChB5c,MAGEq3B,EAAA51B,UAAAszB,YAAV,SAAsBnqB,GACrB5K,KAAKs3B,YAAYlO,KAAKxe,IAOvBysB,EAAA51B,UAAAg2B,gBAAA,SAAgBC,GAEf,OADA13B,KAAKs3B,YAAYG,gBAAgBC,GAC1B13B,MAMRc,OAAAC,eAAIs2B,EAAA51B,UAAA,YAAJ,WACC,OAAOzB,KAAKs3B,YAAYh1B,UAEzB,SAASA,GACRtC,KAAKs3B,YAAYh1B,KAAOA,mCAMzB+0B,EAAA51B,UAAA2C,QAAA,WAQC,OAPA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACM,YAAfA,KAAK8N,OACR9N,KAAKopB,OAENppB,KAAKs3B,YAAYhmB,aACjBtR,KAAK8S,UAAU1O,UACfpE,KAAKu3B,OAAOnzB,UACLpE,MAETq3B,EAzGA,CAAwCxD,gVCAxC8D,GAAA,SAAA3uB,GAgDC,SAAA4uB,IAAA,IAAAn0B,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB8wB,EAAWnvB,cAAepC,WAAY,YAAa,WAASrG,KAhDxFyD,EAAA9C,KAAO,aAKC8C,EAAA6zB,YAAyC,KA4ChD,IAAM/sB,EAAUzD,EAAqB8wB,EAAWnvB,cAAepC,WAAY,YAAa,gBAExF5C,EAAKqP,UAAY,IAAIgkB,IACpB70B,QAASwB,EAAKxB,QACdqR,MAAO,YACPlS,MAAOmJ,EAAQuI,YAEhBiO,GAAStd,EAAM,aAEfA,EAAK8zB,OAAS,IAAIT,IACjB70B,QAASwB,EAAKxB,QACdqR,MAAO,QACPlS,MAAOmJ,EAAQgtB,SAEhBxW,GAAStd,EAAM,UAEfA,EAAKo0B,UAAYttB,EAAQutB,SACzBr0B,EAAKs0B,cAAgBxtB,EAAQytB,aAC7Bv0B,EAAKhB,MAAQ8H,EAAQjI,KAEjBiI,EAAQytB,cAAiC,WAAjBztB,EAAQjI,OACnCmB,EAAKhB,MAAQgB,EAAKw0B,SAAW1tB,EAAQytB,aAAarzB,YAEnDlB,EAAKy0B,MAAQ3tB,EAAQ2tB,QAiZvB,OA3dgCC,GAAAP,EAAA5uB,GA6ExB4uB,EAAAnvB,YAAP,WACC,OAAO3H,OAAO2F,OAAOksB,GAAOlqB,eAC3B8uB,OAAQ,EACRzkB,UAAW,IACXklB,aAAc,EACdF,YACAI,MAAO,EACP51B,KAAM,UAOEs1B,EAAAn2B,UAAA8xB,OAAV,SAAiB3oB,GAAjB,IAAAnH,EAAAzD,KACO4c,EAAe5c,KAAKiW,UAAUrL,GAE9BwtB,EAAa,IAAIhB,IACtBn1B,QAASjC,KAAKiC,QACd8xB,QAAS,WAAM,OAAAtwB,EAAKyvB,OAAOzvB,MAE5BzD,KAAKs3B,YAAcc,EACfp4B,KAAKq4B,MACRr4B,KAAKs3B,YAAYG,gBAAgBz3B,KAAKq4B,OAEtCr4B,KAAKs3B,YAAYh1B,KAAOtC,KAAKyC,MAG9BzC,KAAKs3B,YAAYzX,QAAQ7f,KAAKqf,QAC9Brf,KAAK8S,UAAU+M,QAAQ7f,KAAKs3B,YAAYxkB,WACxC9S,KAAKu3B,OAAO1X,QAAQ7f,KAAKs3B,YAAYC,QAGrCv3B,KAAKs3B,YAAYnmB,MAAMyL,IAMdgb,EAAAn2B,UAAA+xB,MAAV,SAAgB5oB,GACf,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAChC5K,KAAKs3B,aACRt3B,KAAKs3B,YAAYlO,KAAKxM,IAQxBgb,EAAAn2B,UAAA4xB,QAAA,SAAQzoB,GACP,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAMpC,OALA5K,KAAK0I,IAAI,UAAWkU,GAChB5c,KAAKs3B,aACRt3B,KAAKs3B,YAAY1C,aAElB50B,KAAKgpB,OAAO1d,OAAOsR,GACZ5c,MAcR43B,EAAAn2B,UAAA62B,cAAA,WAEC,OADAt4B,KAAKiC,QAAQ4P,UAAUugB,WAAWpyB,KAAK8S,WAChC9S,MAOR43B,EAAAn2B,UAAA82B,gBAAA,WAEC,OADAv4B,KAAKiC,QAAQ4P,UAAU4gB,aAAazyB,KAAK8S,WAClC9S,MAoBA43B,EAAAn2B,UAAA+2B,uBAAR,eAAA/0B,EAAAzD,KACC,GAAmB,WAAfA,KAAKyC,MAKR,OAJMg2B,EAAWb,EAAWc,mBAAmBC,KAAK,SAAAC,GACnD,OAAQA,EAAYV,QAAUz0B,EAAKo1B,S3C/JZC,E2CgKXF,EAAYd,S3ChK4BiB,E2CgKlBt1B,EAAKo0B,U3C/JnCiB,EAAOxyB,SAAWyyB,EAAOzyB,QAAUwyB,EAAOjT,MAAM,SAACmT,EAASluB,GAAU,OAAAiuB,EAAOjuB,KAAWkuB,KADxF,IAAqBF,EAA6BC,O2CkKjCN,EAASjpB,KAAMipB,EAAShpB,MAE5C,IAAMgpB,EAAWb,EAAWc,mBAAmBC,KAAK,SAAAC,GACnD,OAAQA,EAAYt2B,OAASmB,EAAKhB,OACjCm2B,EAAYV,QAAUz0B,EAAKo1B,SAG7B,OADA74B,KAAK+3B,cAAgBU,EAAWA,EAAST,aAAeh4B,KAAK+3B,cACtDU,IAAaA,EAASjpB,KAAMipB,EAAShpB,OA0B9C3O,OAAAC,eAAI62B,EAAAn2B,UAAA,YAAJ,WACC,OAAOzB,KAAKyC,WAEb,SAASH,GACRtC,KAAKyC,MAAQH,EACb,IAAM22B,GAA4E,KAA7D,OAAQ,SAAU,WAAY,YAAYzxB,QAAQlF,GACvE,GAAoB,IAAhBtC,KAAK64B,QAAgBI,EACxBj5B,KAAKq4B,WAAQluB,EACbnK,KAAK+3B,cAAgB,EAEI,OAArB/3B,KAAKs3B,cAERt3B,KAAKs3B,YAAYh1B,KAAOA,OAEnB,CAEN,IAAM42B,EAAQl5B,KAAKw4B,yBACnB,GAAIj0B,EAAU20B,GAAQ,CACd,IAAA1pB,EAAA0pB,EAAA,GAAMzpB,EAAAypB,EAAA,GACbl5B,KAAKq4B,MAAQr4B,KAAKiC,QAAQsN,mBAAmBC,EAAMC,GAC1B,OAArBzP,KAAKs3B,aACRt3B,KAAKs3B,YAAYG,gBAAgBz3B,KAAKq4B,WAEjC,CACA,IAAA3xB,EAAA1G,KAAAm5B,kBAAA72B,EAAAtC,KAAA64B,QACAnB,GADCloB,EAAA9I,EAAA,GAAM+I,EAAA/I,EAAA,GACQ1G,KAAKiC,QAAQsN,mBAAmBC,EAAMC,IAC3DzP,KAAKq4B,MAAQX,EACY,OAArB13B,KAAKs3B,aACRt3B,KAAKs3B,YAAYG,gBAAgBz3B,KAAKq4B,OAGvCT,EAAWc,mBAAmBlvB,MAC7BiG,KAAIA,EACJuoB,aAAch4B,KAAK+3B,cACnBD,SAAU93B,KAAK63B,UACfK,MAAOl4B,KAAK64B,OACZrpB,KAAIA,EACJlN,KAAMtC,KAAKyC,QAERm1B,EAAWc,mBAAmBpyB,OAAS,KAC1CsxB,EAAWc,mBAAmBlyB,2CAalC1F,OAAAC,eAAI62B,EAAAn2B,UAAA,gBAAJ,WACC,OAAOzB,KAAKyC,MAAMiiB,QAAQ1kB,KAAKg4B,aAAc,SAE9C,SAAaC,GACRj4B,KAAKg4B,cAA+B,WAAfh4B,KAAKyC,OAAmC,WAAbw1B,EACnDj4B,KAAKsC,KAAO21B,EAAWj4B,KAAKg4B,aAE5Bh4B,KAAKsC,KAAO21B,mCAedn3B,OAAAC,eAAI62B,EAAAn2B,UAAA,oBAAJ,WACC,OAAOzB,KAAK+3B,mBAEb,SAAiBp2B,GAChB,IAAIW,EAAOtC,KAAKyC,MACV22B,EAAU,yCAAyCC,KAAKr5B,KAAKyC,OAC/D22B,IACH92B,EAAO82B,EAAQ,IAEG,WAAfp5B,KAAKyC,QAEPzC,KAAKsC,KADI,IAANX,EACSW,EAEAA,EAAOX,EAAEgD,6CAUxBizB,EAAAn2B,UAAAP,IAAA,WACC,IAAMkd,EAASpV,EAAAvH,UAAMP,IAAGX,KAAAP,MAIxB,MAHoB,WAAhBoe,EAAO9b,aACH8b,EAAO0Z,SAER1Z,GASAwZ,EAAAn2B,UAAA03B,kBAAR,SAA0B72B,EAA0B41B,GACnD,IACIoB,EAAmBC,KAEjB/pB,EAAO,IAAIgU,aAAa8V,GACxB7pB,EAAO,IAAI+T,aAAa8V,GAE1BtB,EAAe,EACnB,GAAa,WAAT11B,GAKH,GAJA01B,EAAeh4B,KAAK63B,UAAUvxB,OAAS,EACvCtG,KAAK+3B,cAAgB/3B,KAAK63B,UAAUvxB,OACpCgzB,EAAmBtB,EAEW,IAA1Bh4B,KAAK63B,UAAUvxB,OAClB,OAAQkJ,EAAMC,OAET,CACN,IAAM2pB,EAAU,yCAAyCC,KAAK/2B,GAC1D82B,GACHpB,EAAe7jB,SAASilB,EAAQ,GAAI,IAAM,EAC1Cp5B,KAAK+3B,cAAgB5jB,SAASilB,EAAQ,GAAI,IAC1C92B,EAAO82B,EAAQ,GAEfE,EADAtB,EAAe/zB,KAAKC,IAAI8zB,EAAc,IAGtCh4B,KAAK+3B,cAAgB,EAEtB/3B,KAAK63B,aAIN,IAAK,IAAIx2B,EAAI,EAAGA,EAAIi4B,IAAoBj4B,EAAG,CAC1C,IAAMm4B,EAAW,GAAKn4B,EAAI4C,KAAKqtB,IAC3B3W,OAAC,EACL,OAAQrY,GACP,IAAK,OACJqY,EAAKtZ,GAAK22B,EAAgB,EAAI,EAC9Bh4B,KAAK63B,UAAUx2B,EAAI,GAAKsZ,EACxB,MACD,IAAK,SACJA,EAAS,EAAJtZ,EAAS,EAAIm4B,EAAW,EAC7Bx5B,KAAK63B,UAAUx2B,EAAI,GAAKsZ,EACxB,MACD,IAAK,WACJA,EAAI6e,GAAiB,EAAJn4B,EAAS,GAAK,GAC/BrB,KAAK63B,UAAUx2B,EAAI,GAAKsZ,EACxB,MACD,IAAK,WAEHA,EADO,EAAJtZ,EACMm4B,EAAWA,EAAhB,GAAgCn4B,EAAI,GAAM,EAAK,GAAM,EAAI,GAEzD,EAELrB,KAAK63B,UAAUx2B,EAAI,GAAKsZ,EACxB,MACD,IAAK,SACJA,EAAI3a,KAAK63B,UAAUx2B,EAAI,GACvB,MACD,QACC,MAAM,IAAIo4B,UAAU,6BAA+Bn3B,GAE3C,IAANqY,GACHnL,EAAKnO,IAAMsZ,EAAI1W,KAAKotB,IAAI6G,EAAQ72B,GAChCoO,EAAKpO,GAAKsZ,EAAI1W,KAAKy1B,IAAIxB,EAAQ72B,KAE/BmO,EAAKnO,GAAK,EACVoO,EAAKpO,GAAK,GAGZ,OAAQmO,EAAMC,IAMPmoB,EAAAn2B,UAAAk4B,YAAR,SAAoBnqB,EAAoBC,EAAoByoB,GAG3D,IAFA,IAAI0B,EAAM,EACJ7vB,EAAMyF,EAAKlJ,OACRlG,EAAI,EAAGA,EAAI2J,EAAK3J,IACxBw5B,GAAOpqB,EAAKpP,GAAK6D,KAAKy1B,IAAIt5B,EAAI83B,GAASzoB,EAAKrP,GAAK6D,KAAKotB,IAAIjxB,EAAI83B,GAE/D,OAAO0B,GAMEhC,EAAAn2B,UAAAo4B,iBAAV,WAKC,IAJM,IAAAnzB,EAAA1G,KAAAm5B,kBAAAn5B,KAAAyC,MAAA,GAAC+M,EAAA9I,EAAA,GAAM+I,EAAA/I,EAAA,GACT+V,EAAW,EACTqd,EAAkB,EAAV71B,KAAKqtB,GAEVlxB,EAAI,EAAGA,EAAI,EAAGA,IACtBqc,EAAWxY,KAAKC,IAAIlE,KAAK25B,YAAYnqB,EAAMC,EAAOrP,EAAI,EAAK05B,GAAQrd,GAEpE,OAAQzc,KAAK25B,YAAYnqB,EAAMC,EAAMzP,KAAK64B,QAAUpc,GAarD3b,OAAAC,eAAI62B,EAAAn2B,UAAA,gBAAJ,WACC,OAAOzB,KAAK63B,eAEb,SAAaC,GACZ93B,KAAK63B,UAAYC,EACbA,EAASxxB,SACZtG,KAAKsC,KAAO,2CASdxB,OAAAC,eAAI62B,EAAAn2B,UAAA,aAAJ,WACC,OAAOzB,KAAK64B,QAAU,IAAM50B,KAAKqtB,SAElC,SAAU4G,GACTl4B,KAAK64B,OAASX,EAAQj0B,KAAKqtB,GAAK,IAEhCtxB,KAAKsC,KAAOtC,KAAKyC,uCAMlBm1B,EAAAn2B,UAAA2C,QAAA,WAQC,OAPA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACY,OAArBA,KAAKs3B,aACRt3B,KAAKs3B,YAAYlzB,UAElBpE,KAAKq4B,WAAQluB,EACbnK,KAAK8S,UAAU1O,UACfpE,KAAKu3B,OAAOnzB,UACLpE,MApTO43B,EAAAc,sBAsThBd,EA3dA,CAAgCjF,gVCfhCoH,GAAA,SAAA/wB,GAGC,SAAAgxB,WACChxB,EAAAzI,KAAAP,KAAMc,OAAO2F,OAAOK,EAAqBkzB,EAAevxB,cAAepC,WAAY,eAAarG,KAOlG,OAXmFi6B,GAAAD,EAAAhxB,GAOlFgxB,EAAAv4B,UAAAoe,QAAA,SAAQjO,EAAwBkO,EAAuBC,GAEtD,YAF+B,IAAAD,MAAA,QAAuB,IAAAC,MAAA,GACtDoX,GAAcn3B,KAAM4R,EAAakO,EAAWC,GACrC/f,MAETg6B,EAXA,CAAmF/a,gVCgCnFib,GAAA,SAAAlxB,GAqBC,SAAAmxB,IAAA,IAAA12B,EACCuF,EAAAzI,KAAAP,KAAMc,OAAO2F,OAAOK,EAAqBqzB,EAAW1xB,cAAepC,WAAY,UAAW,cAAYrG,KApBvGyD,EAAA9C,KAAO,aAKC8C,EAAA22B,QAA0B32B,EAAKxB,QAAQ2N,mBAK/CnM,EAAAsY,MAAQtY,EAAK22B,QAKb32B,EAAA4b,OAAS5b,EAAK22B,QAMb,IAAM7vB,EAAUzD,EAAqBqzB,EAAW1xB,cAAepC,WAAY,UAAW,kBAElFvB,EAAQyF,EAAQ8vB,UAAY9vB,EAAQ8vB,mBAAmB7W,aAC1D/f,EAAK8wB,MAAQ/Q,aAAanc,KAAKkD,EAAQ8vB,SAC7B71B,EAAW+F,EAAQ8vB,UAC7B52B,EAAK62B,OAAO/vB,EAAQ8vB,QAAS9vB,EAAQjE,UAoExC,OAhGgCi0B,GAAAJ,EAAAnxB,GAgCxBmxB,EAAA1xB,YAAP,WACC,OAAO3H,OAAO2F,OAAOqwB,GAAOruB,eAC3BnC,OAAQ,QAiBV6zB,EAAA14B,UAAA64B,OAAA,SAAOD,EAA8B/zB,QAAA,IAAAA,MAAA,MAEpC,IADA,IAAM0c,EAAQ,IAAIQ,aAAald,GACtBlG,EAAI,EAAG2J,EAAMzD,EAAQlG,EAAI2J,EAAK3J,IAAK,CAC3C,IAAMo6B,EAAcp6B,GAAK2J,EAAM,GAAM,EAAI,EACzCiZ,EAAM5iB,GAAKi6B,EAAQG,EAAYp6B,GAGhC,OADAJ,KAAKu0B,MAAQvR,EACNhjB,MAQRc,OAAAC,eAAIo5B,EAAA14B,UAAA,aAAJ,WACC,OAAOzB,KAAKo6B,QAAQ7F,WAGrB,SAAU8F,GACTr6B,KAAKo6B,QAAQ7F,MAAQ8F,mCAOtBv5B,OAAAC,eAAIo5B,EAAA14B,UAAA,kBAAJ,WACC,OAAOzB,KAAKo6B,QAAQK,gBAGrB,SAAeC,GACd,IAAMC,GAAoB,OAAQ,KAAM,MAAMrzB,KAAK,SAAA0Z,GAAO,OAAAA,EAAI4Z,SAASF,KACvE16B,KAAKiI,OAAO0yB,EAAkB,qDAC9B36B,KAAKo6B,QAAQK,WAAaC,mCAM3BP,EAAA14B,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKo6B,QAAQ9oB,aACNtR,MAETm6B,EAhGA,CAAgCJ,gVC3BhCc,GAAA,SAAA7xB,GAAA,SAAA8xB,IAAA,IAAAr3B,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,cAKC8C,EAAAs3B,MAAQ,IAAIb,IACnBj4B,QAASwB,EAAKxB,QACdo4B,QAAS,SAAAW,GAAK,OAACA,EAAI,GAAK,KAMzBv3B,EAAAsY,MAAQtY,EAAKs3B,MAKbt3B,EAAA4b,OAAS5b,EAAKs3B,QAUf,OA9BiCE,GAAAH,EAAA9xB,GAyBhC8xB,EAAAr5B,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK+6B,MAAM32B,UACJpE,MAET86B,EA9BA,CAAiCf,gVCWjCmB,GAAA,SAAAlyB,GAgCC,SAAAmyB,IAAA,IAAA13B,EACCuF,EAAAzI,KAAAP,KAAMc,OAAO2F,OAAOK,EAAqBq0B,EAAS1yB,cAAepC,WAAY,aAAWrG,KA/BzFyD,EAAA9C,KAAO,WAKE8C,EAAAuzB,UAAW,EAKZvzB,EAAA23B,MAAc,IAAIja,IAAOlf,QAAUwB,EAAKxB,UAKhDwB,EAAAsY,MAAQtY,EAAK23B,MAKb33B,EAAA4b,OAAS5b,EAAK23B,MAYb,IAAM7wB,EAAUzD,EAAqBq0B,EAAS1yB,cAAepC,WAAY,iBAEzE5C,EAAK43B,OAAS53B,EAAKqY,OAASrY,EAAK23B,MAAM3oB,KACvChP,EAAK43B,OAAO/1B,eAAeiF,EAAQnJ,MAAO,KAiB5C,OAtD8Bk6B,GAAAH,EAAAnyB,GAwCtBmyB,EAAA1yB,YAAP,WACC,OAAO3H,OAAO2F,OAAOqwB,GAAOruB,eAC3BrH,MAAO,KAOT+5B,EAAA15B,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKo7B,MAAMh3B,UACJpE,MAETm7B,EAtDA,CAA8BrE,gVCY9ByE,GAAA,SAAAvyB,GAgDC,SAAAwyB,IAAA,IAAA/3B,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB00B,EAAa/yB,cAAepC,WAAY,YAAa,OAAQ,qBAAmBrG,KAhD5GyD,EAAA9C,KAAO,eAyBC8C,EAAAg4B,iBAAmB,IAAIZ,IAAc54B,QAASwB,EAAKxB,UAenDwB,EAAAi4B,gBAAkB,IAAIva,IAC7Blf,QAASwB,EAAKxB,UAQd,IAAMsI,EAAUzD,EAAqB00B,EAAa/yB,cAAepC,WAAY,YAAa,OAAQ,0BAElG5C,EAAKk4B,SAAY,IAAIhE,IACpB11B,QAAUwB,EAAKxB,QACfs1B,OAAQhtB,EAAQgtB,OAChBzkB,UAAWvI,EAAQuI,UACnBogB,OAAQ,WAAM,OAAAzvB,EAAKyvB,OAAOzvB,IAC1By0B,MAAO3tB,EAAQ2tB,MACf51B,KAAMiI,EAAQjI,OAEfmB,EAAKqP,UAAYrP,EAAKk4B,SAAS7oB,UAC/BrP,EAAK8zB,OAAS9zB,EAAKk4B,SAASpE,OAE5B9zB,EAAKm4B,WAAa,IAAIjE,IACrB11B,QAAUwB,EAAKxB,QACfi2B,MAAO3tB,EAAQ2tB,MACf51B,KAAMiI,EAAQsxB,iBAGfp4B,EAAKq4B,YAAc,IAAIZ,IACtBj5B,QAASwB,EAAKxB,QACdqR,MAAO,WACPlS,MAAOmJ,EAAQuxB,cAIhBr4B,EAAKqP,UAAUqN,MAAM1c,EAAKq4B,YAAar4B,EAAKm4B,WAAW9oB,WACvDrP,EAAKm4B,WAAWzb,MAAM1c,EAAKg4B,iBAAkBh4B,EAAKi4B,gBAAgBjpB,MAClEhP,EAAKk4B,SAASxb,MAAM1c,EAAKi4B,gBAAiBj4B,EAAK4b,QAE/C0B,GAAStd,GAAO,YAAa,SAAU,kBA8HzC,OA/MkCs4B,GAAAP,EAAAxyB,GAoF1BwyB,EAAA/yB,YAAP,WACC,OAAO3H,OAAO2F,OAAOkxB,GAAWlvB,eAC/BqzB,YAAa,EACbD,eAAgB,YAORL,EAAA/5B,UAAA8xB,OAAV,SAAiB3oB,GAChB5K,KAAK47B,WAAWzqB,MAAMvG,GACtB5K,KAAK27B,SAASxqB,MAAMvG,IAMX4wB,EAAA/5B,UAAA+xB,MAAV,SAAgB5oB,GACf5K,KAAK47B,WAAWxS,KAAKxe,GACrB5K,KAAK27B,SAASvS,KAAKxe,IAMpB4wB,EAAA/5B,UAAA4xB,QAAA,SAAQzoB,GAGP,OAFA5K,KAAK47B,WAAWvI,QAAQzoB,GACxB5K,KAAK27B,SAAStI,QAAQzoB,GACf5K,MAMRc,OAAAC,eAAIy6B,EAAA/5B,UAAA,YAAJ,WACC,OAAOzB,KAAK27B,SAASr5B,UAEtB,SAASA,GACRtC,KAAK27B,SAASr5B,KAAOA,mCAUtBxB,OAAAC,eAAIy6B,EAAA/5B,UAAA,gBAAJ,WACC,OAAOzB,KAAK27B,SAAS1D,cAEtB,SAAaA,GACZj4B,KAAK27B,SAAS1D,SAAWA,mCAS1Bn3B,OAAAC,eAAIy6B,EAAA/5B,UAAA,oBAAJ,WACC,OAAOzB,KAAK27B,SAAS3D,kBAGtB,SAAiBA,GAChBh4B,KAAK27B,SAAS3D,aAAeA,mCAM9Bl3B,OAAAC,eAAIy6B,EAAA/5B,UAAA,sBAAJ,WACC,OAAOzB,KAAK47B,WAAWt5B,UAGxB,SAAmBA,GAClBtC,KAAK47B,WAAWt5B,KAAOA,mCAMxBxB,OAAAC,eAAIy6B,EAAA/5B,UAAA,aAAJ,WACC,OAAOzB,KAAK27B,SAASzD,WAEtB,SAAUA,GACTl4B,KAAK27B,SAASzD,MAAQA,EACtBl4B,KAAK47B,WAAW1D,MAAQA,mCAazBp3B,OAAAC,eAAIy6B,EAAA/5B,UAAA,gBAAJ,WACC,OAAOzB,KAAK27B,SAAS7D,cAEtB,SAAaA,GACZ93B,KAAK27B,SAAS7D,SAAWA,mCAM1B0D,EAAA/5B,UAAA2C,QAAA,WASC,OARA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK8S,UAAU1O,UACfpE,KAAKu3B,OAAOnzB,UACZpE,KAAK87B,YAAY13B,UACjBpE,KAAK27B,SAASv3B,UACdpE,KAAK47B,WAAWx3B,UAChBpE,KAAK07B,gBAAgBt3B,UACrBpE,KAAKy7B,iBAAiBr3B,UACfpE,MAETw7B,EA/MA,CAAkC7I,gVCFlCqJ,GAAA,SAAAhzB,GAmDC,SAAAizB,IAAA,IAAAx4B,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBm1B,EAAaxzB,cAAepC,WAAY,YAAa,OAAQ,qBAAmBrG,KAnD5GyD,EAAA9C,KAAO,eA0CC8C,EAAAi4B,gBAAwB,IAAIva,IACnClf,QAASwB,EAAKxB,QACdwQ,KAAM,IAQN,IAAMlI,EAAUzD,EAAqBm1B,EAAaxzB,cAAepC,WAAY,YAAa,OAAQ,0BAElG5C,EAAKk4B,SAAW,IAAIhE,IACnB11B,QAAUwB,EAAKxB,QACfs1B,OAAQhtB,EAAQgtB,OAChBzkB,UAAW,EACXogB,OAAQ,WAAM,OAAAzvB,EAAKyvB,OAAOzvB,IAC1By0B,MAAO3tB,EAAQ2tB,MACf51B,KAAMiI,EAAQjI,OAGfmB,EAAK8zB,OAAS9zB,EAAKk4B,SAASpE,OAE5B9zB,EAAKqP,UAAY,IAAIgkB,IACpB70B,QAASwB,EAAKxB,QACdqR,MAAO,YACPlS,MAAOmJ,EAAQuI,YAGhBrP,EAAKm4B,WAAa,IAAIjE,IACrB11B,QAAUwB,EAAKxB,QACfi2B,MAAO3tB,EAAQ2tB,MACf51B,KAAMiI,EAAQsxB,iBAGfp4B,EAAKq4B,YAAc,IAAIZ,IACtBj5B,QAASwB,EAAKxB,QACdqR,MAAO,WACPlS,MAAOmJ,EAAQuxB,cAGhBr4B,EAAKy4B,gBAAkB,IAAIhB,IAC1Bj5B,QAASwB,EAAKxB,QACdqR,MAAO,WACPlS,MAAOmJ,EAAQ2xB,kBAIhBz4B,EAAKqP,UAAU+M,QAAQpc,EAAKk4B,SAAS7oB,WACrCrP,EAAKqP,UAAUqN,MAAM1c,EAAKq4B,YAAar4B,EAAKm4B,WAAW9oB,WACvDrP,EAAKqP,UAAUqN,MAAM1c,EAAKy4B,gBAAiBz4B,EAAKi4B,iBAChDj4B,EAAKm4B,WAAW/b,QAAQpc,EAAKi4B,gBAAgBjpB,MAC7ChP,EAAKi4B,gBAAgB7b,QAAQpc,EAAKk4B,SAAS7oB,WAC3CrP,EAAKk4B,SAAS9b,QAAQpc,EAAK4b,QAC3B5b,EAAK8zB,OAAO1X,QAAQpc,EAAKm4B,WAAWrE,QAEpCxW,GAAStd,GAAO,kBAAmB,YAAa,SAAU,kBA4H5D,OAhOkC04B,GAAAF,EAAAjzB,GAuG1BizB,EAAAxzB,YAAP,WACC,OAAO3H,OAAO2F,OAAOkxB,GAAWlvB,eAC/BqzB,YAAa,EACbI,gBAAiB,EACjBL,eAAgB,YAORI,EAAAx6B,UAAA8xB,OAAV,SAAiB3oB,GAChB5K,KAAK47B,WAAWzqB,MAAMvG,GACtB5K,KAAK27B,SAASxqB,MAAMvG,IAMXqxB,EAAAx6B,UAAA+xB,MAAV,SAAgB5oB,GACf5K,KAAK47B,WAAWxS,KAAKxe,GACrB5K,KAAK27B,SAASvS,KAAKxe,IAMpBqxB,EAAAx6B,UAAA4xB,QAAA,SAAQzoB,GAGP,OAFA5K,KAAK47B,WAAWvI,QAAQzoB,GACxB5K,KAAK27B,SAAStI,QAAQzoB,GACf5K,MAMRc,OAAAC,eAAIk7B,EAAAx6B,UAAA,YAAJ,WACC,OAAOzB,KAAK27B,SAASr5B,UAEtB,SAASA,GACRtC,KAAK27B,SAASr5B,KAAOA,mCAUtBxB,OAAAC,eAAIk7B,EAAAx6B,UAAA,gBAAJ,WACC,OAAOzB,KAAK27B,SAAS1D,cAEtB,SAAaA,GACZj4B,KAAK27B,SAAS1D,SAAWA,mCAS1Bn3B,OAAAC,eAAIk7B,EAAAx6B,UAAA,oBAAJ,WACC,OAAOzB,KAAK27B,SAAS3D,kBAEtB,SAAiBA,GAChBh4B,KAAK27B,SAAS3D,aAAeA,mCAM9Bl3B,OAAAC,eAAIk7B,EAAAx6B,UAAA,sBAAJ,WACC,OAAOzB,KAAK47B,WAAWt5B,UAExB,SAAmBA,GAClBtC,KAAK47B,WAAWt5B,KAAOA,mCAMxBxB,OAAAC,eAAIk7B,EAAAx6B,UAAA,aAAJ,WACC,OAAOzB,KAAK27B,SAASzD,WAEtB,SAAUA,GACTl4B,KAAK27B,SAASzD,MAAQA,EACtBl4B,KAAK47B,WAAW1D,MAAQA,mCAazBp3B,OAAAC,eAAIk7B,EAAAx6B,UAAA,gBAAJ,WACC,OAAOzB,KAAK27B,SAAS7D,cAEtB,SAAaA,GACZ93B,KAAK27B,SAAS7D,SAAWA,mCAM1BmE,EAAAx6B,UAAA2C,QAAA,WAQC,OAPA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK8S,UAAU1O,UACfpE,KAAK87B,YAAY13B,UACjBpE,KAAK27B,SAASv3B,UACdpE,KAAK47B,WAAWx3B,UAChBpE,KAAK07B,gBAAgBt3B,UACrBpE,KAAKk8B,gBAAgB93B,UACdpE,MAETi8B,EAhOA,CAAkCtJ,gVCYlCyJ,GAAA,SAAApzB,GA0CC,SAAAqzB,IAAA,IAAA54B,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBu1B,EAAgB5zB,cAAepC,WAAY,YAAa,YAAUrG,KA1C9FyD,EAAA9C,KAAO,kBAUC8C,EAAA64B,WAAmB,IAAInb,IAC9Blf,QAASwB,EAAKxB,QACdwQ,KAAM,IAqBChP,EAAA84B,QAAU,IAAIrC,IACrBj4B,QAASwB,EAAKxB,QACdo4B,QAAS,SAAA1pB,GAAO,OAAAA,GAAO,GAAK,EAAI,KAQhC,IAAMpG,EAAUzD,EAAqBu1B,EAAgB5zB,cAAepC,WAAY,YAAa,iBAE7F5C,EAAK+4B,MAAQ,IAAI1F,IAChB70B,QAASwB,EAAKxB,QACdqR,MAAO,aACPlS,MAAOmJ,EAAQiyB,QAGhB/4B,EAAKg5B,UAAY,IAAI9E,IACpB11B,QAASwB,EAAKxB,QACds1B,OAAQhtB,EAAQgtB,OAChBzkB,UAAWvI,EAAQuI,UACnBogB,OAAQ,WAAM,OAAAzvB,EAAKyvB,OAAOzvB,IAC1By0B,MAAO3tB,EAAQ2tB,MACf51B,KAAO,aAERmB,EAAKqP,UAAYrP,EAAKg5B,UAAU3pB,UAChCrP,EAAK8zB,OAAS9zB,EAAKg5B,UAAUlF,OAG7B9zB,EAAKg5B,UAAUtc,MAAM1c,EAAK84B,QAAS94B,EAAK4b,QACxC5b,EAAK+4B,MAAMrc,MAAM1c,EAAK64B,WAAY74B,EAAK84B,SACvCxb,GAAStd,GAAO,QAAS,YAAa,aA8FxC,OAjKqCi5B,GAAAL,EAAArzB,GAsE7BqzB,EAAA5zB,YAAP,WACC,OAAO3H,OAAO2F,OAAOksB,GAAOlqB,eAC3B8uB,OAAQ,EACRzkB,UAAW,IACXolB,MAAO,EACP51B,KAAM,QACNk6B,MAAO,MAOCH,EAAA56B,UAAA8xB,OAAV,SAAiB3oB,GAChBA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAKy8B,UAAUtrB,MAAMvG,GACrB5K,KAAKs8B,WAAW7pB,KAAKnN,eAAe,EAAGsF,IAM9ByxB,EAAA56B,UAAA+xB,MAAV,SAAgB5oB,GACfA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAKy8B,UAAUrT,KAAKxe,GAGpB5K,KAAKs8B,WAAW7pB,KAAK8J,sBAAsB3R,GAC3C5K,KAAKs8B,WAAW7pB,KAAKnN,eAAe,EAAGsF,IAMxCyxB,EAAA56B,UAAA4xB,QAAA,SAAQzoB,GACP,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAIpC,OAHA5K,KAAKy8B,UAAUpJ,QAAQzW,GACvB5c,KAAKs8B,WAAW7pB,KAAK8J,sBAAsBK,GAC3C5c,KAAKs8B,WAAW7pB,KAAKnN,eAAe,EAAGsX,GAChC5c,MAMRc,OAAAC,eAAIs7B,EAAA56B,UAAA,aAAJ,WACC,OAAOzB,KAAKy8B,UAAUvE,WAEvB,SAAUA,GACTl4B,KAAKy8B,UAAUvE,MAAQA,mCAMxBp3B,OAAAC,eAAIs7B,EAAA56B,UAAA,YAAJ,WACC,MAAO,yCAMRX,OAAAC,eAAIs7B,EAAA56B,UAAA,gBAAJ,WACC,MAAO,yCAMRX,OAAAC,eAAIs7B,EAAA56B,UAAA,gBAAJ,WACC,0CAMDX,OAAAC,eAAIs7B,EAAA56B,UAAA,oBAAJ,WACC,OAAO,mCAMR46B,EAAA56B,UAAA2C,QAAA,WAMC,OALA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKy8B,UAAUr4B,UACfpE,KAAKw8B,MAAMp4B,UACXpE,KAAKs8B,WAAWl4B,UAChBpE,KAAKu8B,QAAQn4B,UACNpE,MAETq8B,EAjKA,CAAqC1J,gVCzBrCgK,GAAA,SAAA3zB,GA8CC,SAAA4zB,IAAA,IAAAn5B,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB81B,EAAcn0B,cAAepC,WAAY,YAAa,OAAQ,aAAWrG,KA9CrGyD,EAAA9C,KAAO,gBAeC8C,EAAAo5B,gBAgCP,IAAMtyB,EAAUzD,EAAqB81B,EAAcn0B,cAAepC,WAAY,YAAa,OAAQ,kBAEnG5C,EAAKqP,UAAY,IAAIgkB,IACpB70B,QAASwB,EAAKxB,QACdqR,MAAO,YACPlS,MAAOmJ,EAAQuI,YAEhBrP,EAAK8zB,OAAS,IAAIT,IACjB70B,QAASwB,EAAKxB,QACdqR,MAAO,QACPlS,MAAOmJ,EAAQgtB,SAGhB9zB,EAAKq5B,QAAUvyB,EAAQwyB,OACvBt5B,EAAKhB,MAAQ8H,EAAQjI,KACrBmB,EAAKo1B,OAAStuB,EAAQ2tB,MACtBz0B,EAAKo0B,UAAYttB,EAAQutB,SACzBr0B,EAAKs0B,cAAgBxtB,EAAQytB,aAG7Bv0B,EAAKu5B,MAAQzyB,EAAQyyB,MAErBjc,GAAStd,GAAO,YAAa,aAgM/B,OAvQmCw5B,GAAAL,EAAA5zB,GA0E3B4zB,EAAAn0B,YAAP,WACC,OAAO3H,OAAO2F,OAAOkxB,GAAWlvB,eAC/Bu0B,MAAQ,EACRD,OAAS,GACTz6B,KAAO,cAOCs6B,EAAAn7B,UAAA8xB,OAAV,SAAiB3oB,GAChBA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAIhsB,MAAMvG,MAMtBgyB,EAAAn7B,UAAA+xB,MAAV,SAAgB5oB,GACfA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAI/T,KAAKxe,MAM/BgyB,EAAAn7B,UAAA4xB,QAAA,SAAQzoB,GAGP,OAFAA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAI9J,QAAQzoB,KAC1B5K,MAMA48B,EAAAn7B,UAAAy7B,SAAR,SAAiBE,GAChB,IAAK,IAAIh9B,EAAI,EAAGA,EAAIJ,KAAK68B,aAAav2B,OAAQlG,IAC7Cg9B,EAASp9B,KAAK68B,aAAaz8B,GAAIA,IAOjCU,OAAAC,eAAI67B,EAAAn7B,UAAA,YAAJ,WACC,OAAOzB,KAAKyC,WAGb,SAASH,GACRtC,KAAKyC,MAAQH,EACbtC,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAI76B,KAAOA,qCASjCxB,OAAAC,eAAI67B,EAAAn7B,UAAA,cAAJ,WACC,OAAOzB,KAAK88B,aAGb,SAAWC,GAEV,GADA/8B,KAAK88B,QAAUC,EACX/8B,KAAK68B,aAAav2B,OAAS,EAAG,CACjC,IAAM+2B,GAASN,EAAS,EAClBO,EAAOP,GAAU/8B,KAAK68B,aAAav2B,OAAS,GAClDtG,KAAKk9B,SAAS,SAACC,EAAK/8B,GAAM,OAAA+8B,EAAI5F,OAAOn2B,MAAQi8B,EAAQC,EAAOl9B,sCAO9DU,OAAAC,eAAI67B,EAAAn7B,UAAA,aAAJ,WACC,OAAOzB,KAAK68B,aAAav2B,YAE1B,SAAU02B,GAAV,IAAAv5B,EAAAzD,KAEC,GADAg9B,EAAQ/4B,KAAKC,IAAI84B,EAAO,GACpBh9B,KAAK68B,aAAav2B,SAAW02B,EAAO,CAEvCh9B,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAI/4B,YACzBpE,KAAK68B,gBACL,IAAK,IAAIz8B,EAAI,EAAGA,EAAI48B,EAAO58B,IAAK,CAC/B,IAAM+8B,EAAM,IAAIxF,IACf11B,QAAUjC,KAAKiC,QACfixB,OAAc,IAAN9yB,EAAU,WAAM,OAAAqD,EAAKyvB,OAAOzvB,IAAQyd,KAE3B,WAAdlhB,KAAKsC,KACR66B,EAAIrF,SAAW93B,KAAK63B,UAEpBsF,EAAI76B,KAAOtC,KAAKyC,MAEjB06B,EAAInF,aAAeh4B,KAAK+3B,cACxBoF,EAAIjF,MAAQl4B,KAAK64B,OAAUz4B,EAAI48B,EAAS,IACxCG,EAAI7O,OAAOltB,OAAS,EAAY,IAAR47B,EACxBh9B,KAAK8S,UAAU+M,QAAQsd,EAAIrqB,WAC3B9S,KAAKu3B,OAAO1X,QAAQsd,EAAI5F,QACxB4F,EAAItd,QAAQ7f,KAAKqf,QACjBrf,KAAK68B,aAAaz8B,GAAK+8B,EAGxBn9B,KAAK+8B,OAAS/8B,KAAK88B,QACA,YAAf98B,KAAK8N,OACR9N,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAIhsB,4CAQ5BrQ,OAAAC,eAAI67B,EAAAn7B,UAAA,aAAJ,WACC,OAAOzB,KAAK64B,YAEb,SAAUX,GACTl4B,KAAK64B,OAASX,EACdl4B,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAIjF,MAAQA,qCAUlCp3B,OAAAC,eAAI67B,EAAAn7B,UAAA,gBAAJ,WACC,OAAOzB,KAAK68B,aAAa,GAAG5E,cAE7B,SAAaA,GACZj4B,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAIlF,SAAWA,IACpCj4B,KAAKyC,MAAQzC,KAAK68B,aAAa,GAAGv6B,sCAgBnCxB,OAAAC,eAAI67B,EAAAn7B,UAAA,gBAAJ,WACC,OAAOzB,KAAK68B,aAAa,GAAG/E,cAE7B,SAAaA,GACZ93B,KAAK63B,UAAYC,EACbA,EAASxxB,SACZtG,KAAKyC,MAAQ,SACbzC,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAIrF,SAAWA,sCAatCh3B,OAAAC,eAAI67B,EAAAn7B,UAAA,oBAAJ,WACC,OAAOzB,KAAK68B,aAAa,GAAG7E,kBAE7B,SAAiBA,GAChBh4B,KAAK+3B,cAAgBC,EACrBh4B,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAInF,aAAeA,IACxCh4B,KAAKyC,MAAQzC,KAAK68B,aAAa,GAAGv6B,sCAMnCs6B,EAAAn7B,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK8S,UAAU1O,UACfpE,KAAKu3B,OAAOnzB,UACZpE,KAAKk9B,SAAS,SAAAC,GAAO,OAAAA,EAAI/4B,YAClBpE,MAET48B,EAvQA,CAAmCjK,gVCEnC4K,GAAA,SAAAv0B,GAyCC,SAAAw0B,IAAA,IAAA/5B,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqB02B,EAAc/0B,cAAepC,WAAY,YAAa,0BAAwBrG,KAxCjGyD,EAAA9C,KAAO,gBAEP8C,EAAAg6B,WAAa,MAedh6B,EAAAi6B,OAAmB,IAAIxC,IAC9Bj5B,QAASwB,EAAKxB,QACdb,MAAO,IAsBP,IAAMmJ,EAAUzD,EAAqB02B,EAAc/0B,cAAepC,WAAY,YAAa,+BAE3F5C,EAAKk6B,OAAS,IAAIvB,IACjBn6B,QAASwB,EAAKxB,QACd6Q,UAAWvI,EAAQqzB,sBAIpBn6B,EAAKk6B,OAAOlB,UAAUn6B,KAAO,OAE7BmB,EAAKm6B,oBAAuBn6B,EAAKk6B,OAAO7qB,UAExCrP,EAAKm4B,WAAa,IAAIjE,IACrB11B,QAASwB,EAAKxB,QACds1B,OAAQhtB,EAAQgtB,OAChBzkB,UAAWvI,EAAQuI,UACnBogB,OAAQ,WAAM,OAAAzvB,EAAKyvB,OAAOzvB,IAC1By0B,MAAO3tB,EAAQ2tB,QAGhBz0B,EAAKqP,UAAYrP,EAAKm4B,WAAW9oB,UACjCrP,EAAK8zB,OAAS9zB,EAAKm4B,WAAWrE,OAG9B9zB,EAAKm4B,WAAWzb,MAAM1c,EAAKi6B,OAAQj6B,EAAKk6B,OAAOnB,OAC/C/4B,EAAKk6B,OAAO9d,QAAQpc,EAAK4b,QACzB0B,GAAStd,GAAO,sBAAuB,YAAa,aAuFtD,OA5JmCo6B,GAAAL,EAAAx0B,GAwE3Bw0B,EAAA/0B,YAAP,WACC,OAAO3H,OAAO2F,OAAOksB,GAAOlqB,eAC3B8uB,OAAQ,EACRzkB,UAAW,IACX8qB,oBAAqB,GACrB1F,MAAO,EACP51B,KAAM,SAMEk7B,EAAA/7B,UAAA8xB,OAAV,SAAiB3oB,GAChBA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAK47B,WAAWzqB,MAAMvG,GACtB5K,KAAK29B,OAAOxsB,MAAMvG,IAMT4yB,EAAA/7B,UAAA+xB,MAAV,SAAgB5oB,GACfA,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAK47B,WAAWxS,KAAKxe,GACrB5K,KAAK29B,OAAOvU,KAAKxe,IAMlB4yB,EAAA/7B,UAAA4xB,QAAA,SAAQzoB,GAGP,OAFA5K,KAAK47B,WAAWvI,QAAQzoB,GACxB5K,KAAK29B,OAAOtK,QAAQzoB,GACb5K,MAMRc,OAAAC,eAAIy8B,EAAA/7B,UAAA,YAAJ,WACC,MAAO,uCAMRX,OAAAC,eAAIy8B,EAAA/7B,UAAA,gBAAJ,WACC,MAAO,uCAMRX,OAAAC,eAAIy8B,EAAA/7B,UAAA,gBAAJ,WACC,0CAMDX,OAAAC,eAAIy8B,EAAA/7B,UAAA,oBAAJ,WACC,OAAO,mCAMRX,OAAAC,eAAIy8B,EAAA/7B,UAAA,aAAJ,WACC,OAAOzB,KAAK47B,WAAW1D,WAExB,SAAUA,GACTl4B,KAAK47B,WAAW1D,MAAQA,mCAMzBsF,EAAA/7B,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK29B,OAAOv5B,UACZpE,KAAK09B,OAAOt5B,UACZpE,KAAK47B,WAAWx3B,UACTpE,MAETw9B,EA5JA,CAAmC7K,gVCkC7BmL,IAGLC,GAAIxC,GACJyC,IAAKrB,GACLsB,GAAIjC,GACJ5D,WAAYT,GACZuG,MAAO9B,GACP+B,IAAKZ,IAkBNa,GAAA,SAAAp1B,GA4BC,SAAAq1B,IAAA,IAAA56B,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBu3B,EAAe51B,cAAepC,WAAY,YAAa,WAASrG,KA1B5FyD,EAAA9C,KAAO,iBA2BN,IAAM4J,EAAUzD,EAAqBu3B,EAAe51B,cAAepC,WAAY,YAAa,gBAE5F5C,EAAKqP,UAAY,IAAIgkB,IACpB70B,QAASwB,EAAKxB,QACdqR,MAAO,YACPlS,MAAOmJ,EAAQuI,YAEhBrP,EAAK8zB,OAAS,IAAIT,IACjB70B,QAASwB,EAAKxB,QACdqR,MAAO,QACPlS,MAAOmJ,EAAQgtB,SAEhBxW,GAAStd,GAAO,YAAa,WAG7BA,EAAK2N,IAAI7G,KA+WX,OA5ZQ+zB,GAAAD,EAAAr1B,GAgDAq1B,EAAA51B,YAAP,WACC,OAAO3H,OAAO2F,OACbkxB,GAAWlvB,cACXuzB,GAAavzB,cACb8yB,GAAa9yB,cACbk0B,GAAcl0B,cACd2zB,GAAgB3zB,cAChB80B,GAAc90B,gBAON41B,EAAA58B,UAAA8xB,OAAV,SAAiB3oB,GAChB5K,KAAKs3B,YAAYnmB,MAAMvG,IAMdyzB,EAAA58B,UAAA+xB,MAAV,SAAgB5oB,GACf5K,KAAKs3B,YAAYlO,KAAKxe,IAGvByzB,EAAA58B,UAAA4xB,QAAA,SAAQzoB,GAEP,OADA5K,KAAKs3B,YAAYjE,QAAQzoB,GAClB5K,MAmBRc,OAAAC,eAAIs9B,EAAA58B,UAAA,YAAJ,eAAAgC,EAAAzD,KACKmS,EAAS,GAIb,OAHK,KAAM,KAAM,OAAO7K,KAAK,SAAA3F,GAAK,OAAA8B,EAAK86B,cAAgB58B,MACtDwQ,EAASnS,KAAKu+B,aAERpsB,EAASnS,KAAKs3B,YAAYh1B,UAElC,SAASA,GACkB,OAAtBA,EAAKk8B,OAAO,EAAG,IAClBx+B,KAAKy+B,qBAAqB,MAC1Bz+B,KAAKs3B,YAAct3B,KAAKs3B,YACxBt3B,KAAKs3B,YAAYh1B,KAAOA,EAAKk8B,OAAO,IACJ,OAAtBl8B,EAAKk8B,OAAO,EAAG,IACzBx+B,KAAKy+B,qBAAqB,MAC1Bz+B,KAAKs3B,YAAct3B,KAAKs3B,YACxBt3B,KAAKs3B,YAAYh1B,KAAOA,EAAKk8B,OAAO,IACJ,QAAtBl8B,EAAKk8B,OAAO,EAAG,IACzBx+B,KAAKy+B,qBAAqB,OAC1Bz+B,KAAKs3B,YAAct3B,KAAKs3B,YACxBt3B,KAAKs3B,YAAYh1B,KAAOA,EAAKk8B,OAAO,IACjB,QAATl8B,GACVtC,KAAKy+B,qBAAqB,OAC1Bz+B,KAAKs3B,YAAct3B,KAAKs3B,aACL,UAATh1B,EACVtC,KAAKy+B,qBAAqB,UAE1Bz+B,KAAKy+B,qBAAqB,cAC1Bz+B,KAAKs3B,YAAct3B,KAAKs3B,YACxBt3B,KAAKs3B,YAAYh1B,KAAQA,oCAe3BxB,OAAAC,eAAIs9B,EAAA58B,UAAA,gBAAJ,WACC,OAAOzB,KAAKs3B,YAAYQ,cAEzB,SAAaA,GACP93B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,UAAat3B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,SACvFt3B,KAAKs3B,YAAYQ,SAAWA,oCAU9Bh3B,OAAAC,eAAIs9B,EAAA58B,UAAA,oBAAJ,WACC,OAAOzB,KAAKs3B,YAAYU,kBAEzB,SAAiBA,GACXh4B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,UAAat3B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,SACvFt3B,KAAKs3B,YAAYU,aAAeA,oCAmBlCqG,EAAA58B,UAAA2P,IAAA,SAAIqK,GAQH,OANIrW,QAAQC,IAAIoW,EAAO,SAAWA,EAAMnZ,OACvCtC,KAAKsC,KAAOmZ,EAAMnZ,MAInB0G,EAAAvH,UAAM2P,IAAG7Q,KAAAP,KAACyb,GACHzb,MAGRq+B,EAAA58B,UAAAP,IAAA,WACC,IAAMqJ,EAAUvK,KAAKs3B,YAAYp2B,MAGjC,OADAqJ,EAAQjI,KAAOtC,KAAKsC,KACbiI,GAMA8zB,EAAA58B,UAAAg9B,qBAAR,SAA6BE,GAA7B,IAAAl7B,EAAAzD,KACC,GAAI2+B,IAAY3+B,KAAKu+B,YAAa,CACjCv+B,KAAKu+B,YAAcI,EAEnB,IAAMC,EAAiBd,GAAwBa,GAEzCruB,EAAMtQ,KAAKsQ,MACjB,GAAItQ,KAAKs3B,YAAa,CACrB,IAAMuH,EAAS7+B,KAAKs3B,YACpBuH,EAAOzV,KAAK9Y,GAEZtQ,KAAKiC,QAAQ0B,WAAW,WAAM,OAAAk7B,EAAOz6B,WAAWpE,KAAK8+B,WAEtD9+B,KAAKs3B,YAAc,IAAIsH,GACtB38B,QAAUjC,KAAKiC,UAEhBjC,KAAK8S,UAAU+M,QAAQ7f,KAAKs3B,YAAYxkB,WACxC9S,KAAKu3B,OAAO1X,QAAQ7f,KAAKs3B,YAAYC,QACrCv3B,KAAKs3B,YAAYzX,QAAQ7f,KAAKqf,QAC9Brf,KAAKs3B,YAAYpE,OAAS,WAAM,OAAAzvB,EAAKyvB,OAAOzvB,IACzB,YAAfzD,KAAK8N,OACR9N,KAAKs3B,YAAYnmB,MAAMb,KAQ1BxP,OAAAC,eAAIs9B,EAAA58B,UAAA,aAAJ,WACC,OAAOzB,KAAKs3B,YAAYY,WAEzB,SAAUA,GACTl4B,KAAKs3B,YAAYY,MAAQA,mCAS1Bp3B,OAAAC,eAAIs9B,EAAA58B,UAAA,kBAAJ,WACC,OAAOzB,KAAKu+B,iBAEb,SAAeQ,GAEd,IAAI9G,EAAW,OACe,QAA1Bj4B,KAAKs3B,YAAYh1B,MAA4C,UAA1BtC,KAAKs3B,YAAYh1B,OACvD21B,EAAWj4B,KAAKs3B,YAAYh1B,MAIf,OAAVy8B,EACH/+B,KAAKsC,KAAO,KAAO21B,EACC,OAAV8G,EACV/+B,KAAKsC,KAAO,KAAO21B,EACC,QAAV8G,EACV/+B,KAAKsC,KAAO,MAAQ21B,EACA,eAAV8G,EACV/+B,KAAKsC,KAAO21B,EACQ,UAAV8G,EACV/+B,KAAKsC,KAAO,QACQ,QAAVy8B,IACV/+B,KAAKsC,KAAO,wCAIN+7B,EAAA58B,UAAAi9B,YAAR,SACCvB,EACAM,GAEA,OAAON,aAAeW,GAAwBL,IAW/C38B,OAAAC,eAAIs9B,EAAA58B,UAAA,gBAAJ,WACC,OAAOzB,KAAKs3B,YAAYW,cAEzB,SAAaA,GACPj4B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,UACtCt3B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,QACvB,UAAbW,GAAqC,QAAbA,IACxBj4B,KAAKs3B,YAAYW,SAAWA,oCAW9Bn3B,OAAAC,eAAIs9B,EAAA58B,UAAA,aAAJ,WACC,OAAIzB,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,SAC/Bt3B,KAAKs3B,YAAYkF,WAExB,mCAOF17B,OAAAC,eAAIs9B,EAAA58B,UAAA,aAAJ,WACC,OAAIzB,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,OAC/Bt3B,KAAKs3B,YAAY0F,WAExB,OAGF,SAAUA,GACLh9B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,QAAU7yB,EAASu4B,KACzDh9B,KAAKs3B,YAAY0F,MAAQA,oCAW3Bl8B,OAAAC,eAAIs9B,EAAA58B,UAAA,cAAJ,WACC,OAAIzB,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,OAC/Bt3B,KAAKs3B,YAAYyF,YAExB,OAGF,SAAWA,GACN/8B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,QAAU7yB,EAASs4B,KACzD/8B,KAAKs3B,YAAYyF,OAASA,oCAS5Bj8B,OAAAC,eAAIs9B,EAAA58B,UAAA,sBAAJ,WACC,OAAIzB,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,OAASt3B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,MAC3Et3B,KAAKs3B,YAAYuE,oBAExB,OAGF,SAAmBmD,IACbh/B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,OAASt3B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,QAAUtyB,EAASg6B,KACtGh/B,KAAKs3B,YAAYuE,eAAiBmD,oCAUpCl+B,OAAAC,eAAIs9B,EAAA58B,UAAA,uBAAJ,WACC,OAAIzB,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,MAC/Bt3B,KAAKs3B,YAAY4E,qBAExB,mCAUFp7B,OAAAC,eAAIs9B,EAAA58B,UAAA,mBAAJ,WACC,OAAIzB,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,OAASt3B,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,MAC3Et3B,KAAKs3B,YAAYwE,iBAExB,mCAaFh7B,OAAAC,eAAIs9B,EAAA58B,UAAA,2BAAJ,WACC,OAAIzB,KAAK0+B,YAAY1+B,KAAKs3B,YAAa,OAC/Bt3B,KAAKs3B,YAAYsG,yBAExB,mCAIFS,EAAA58B,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKu3B,OAAOnzB,UACZpE,KAAK8S,UAAU1O,UACfpE,KAAKs3B,YAAYlzB,UACVpE,MAETq+B,EA7ZA,CACQ1L,8nDClDRsM,GAAA,SAAAj2B,GA0DC,SAAAk2B,IAAA,IAAAz7B,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBo4B,EAAOz2B,cAAepC,WAAY,MAAO,aAAWrG,KA1DhFyD,EAAA9C,KAAO,SA0CC8C,EAAA07B,eAAwC,IAAIC,IAiBnD,IAAM70B,EAAUzD,EAAqBo4B,EAAOz2B,cAAepC,WAAY,MAAO,kBAE9E5C,EAAK8e,QAAU,IAAIR,IAClBE,OAAQxe,EAAK47B,QAAQ/7B,KAAKG,EAAM8G,EAAQ0X,QACxCC,QAAS3X,EAAQ2X,QACjBC,IAAK5X,EAAQ4X,MAEd1e,EAAK67B,UAAY/0B,EAAQ+0B,UACzB77B,EAAKinB,MAAQngB,EAAQ2G,KACrBzN,EAAKusB,WAAazlB,EAAQwmB,UAC1BttB,EAAKwsB,SAAW1lB,EAAQumB,QACxBrtB,EAAKmyB,cAAgBrrB,EAAQ+qB,aAC7B7xB,EAAK0wB,OAAS5pB,EAAQ4pB,OACtB1wB,EAAK4wB,QAAU9pB,EAAQ8pB,UAmTzB,OA7X4BkL,GAAAL,EAAAl2B,GA6EpBk2B,EAAAz2B,YAAP,WACC,OAAO3H,OAAO2F,OAAOksB,GAAOlqB,eAC3B62B,WAAY,EACZnL,OAAS,EACTE,QAAU,EACVnjB,MAAO,EACP4f,QAAU,EACVC,UAAY,EACZ9O,OAASf,GACToU,aAAe,EACfpT,SAAU,KAaNgd,EAAAz9B,UAAAqE,KAAN,SAAWqc,6FACV,SAAMniB,KAAKuiB,QAAQzc,KAAKqc,WAExB,OAFAzb,EAAA+J,OACAzQ,KAAKq/B,WACL,EAAOr/B,YAMAk/B,EAAAz9B,UAAA49B,QAAR,SAAgBh9B,QAAA,IAAAA,MAAA6e,IACf7e,IACIrC,KAAKs/B,WACRt/B,KAAKmR,SAOC+tB,EAAAz9B,UAAA+9B,aAAR,SAAqBj5B,GAEpBvG,KAAKkzB,OAAOlzB,MAGZA,KAAKm/B,eAAeM,OAAOl5B,GACM,IAA7BvG,KAAKm/B,eAAeO,MAAe1/B,KAAK6yB,SAC3C7yB,KAAKgpB,OAAOtC,eAAe,UAAW1mB,KAAKsQ,QAe7C4uB,EAAAz9B,UAAA0P,MAAA,SAAMvG,EAAaqc,EAAe5I,GAEjC,OADArV,EAAAvH,UAAM0P,MAAK5Q,KAAAP,KAAC4K,EAAMqc,EAAQ5I,GACnBre,MAMEk/B,EAAAz9B,UAAA8xB,OAAV,SAAiBjnB,EAAkB2a,EAAe5I,GAGhD4I,EADGjnB,KAAK0qB,MACCjjB,EAAWwf,EAAQjnB,KAAKgwB,YAGxBvoB,EAAWwf,EAAQ,GAI7B,IAAI0Y,EAAiB3/B,KAAKiW,UAAUgR,GAGhCjnB,KAAK6yB,UACR8M,GAAkB3/B,KAAK41B,eAIxB,IAAMgK,EAAevhB,EACrBA,EAAW5W,EAAW4W,EAAUpa,KAAKC,IAAIlE,KAAKuiB,QAAQlE,SAAWshB,EAAgB,IACjF,IAAI/W,EAAmB5oB,KAAKiW,UAAUoI,GAGtCuK,GAAsC5oB,KAAK41B,cAG3CtpB,EAAYtM,KAAKiW,UAAU3J,GAG3B,IAAM/F,EAAS,IAAI0uB,IAClBrkB,OAAS5Q,KAAKuiB,QACdtgB,QAASjC,KAAKiC,QACdkyB,OAASn0B,KAAKm0B,OACdE,QAAUr0B,KAAKq0B,QACfnjB,KAAOlR,KAAK0qB,MACZoG,QAAU9wB,KAAKiwB,SACfc,UAAY/wB,KAAKgwB,WACjB+D,QAAU/zB,KAAKw/B,aAAal8B,KAAKtD,MACjCs1B,aAAet1B,KAAK41B,gBAClB/V,QAAQ7f,KAAKqf,QAGXrf,KAAK0qB,OAAU1qB,KAAK6yB,SAExB7yB,KAAKgpB,OAAOtC,eAAe,UAAWpa,EAAYsc,GACjDiX,aAAa,IAKf7/B,KAAKm/B,eAAex0B,IAAIpE,GAGpBvG,KAAK0qB,OAASrmB,EAAQu7B,GACzBr5B,EAAO4K,MAAM7E,EAAWqzB,GAGxBp5B,EAAO4K,MAAM7E,EAAWqzB,EAAgB/W,EAAmB5oB,KAAKiW,UAAUjW,KAAKq0B,WAOvE6K,EAAAz9B,UAAA+xB,MAAV,SAAgB5oB,GACf,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GACpC5K,KAAKm/B,eAAep3B,QAAQ,SAAAxB,GAAU,OAAAA,EAAO6iB,KAAKxM,MAUnDsiB,EAAAz9B,UAAA4xB,QAAA,SAAQzoB,EAAaqc,EAAe5I,GAGnC,OAFAre,KAAKwzB,MAAM5oB,GACX5K,KAAKuzB,OAAO3oB,EAAMqc,EAAQ5I,GACnBre,MAcRk/B,EAAAz9B,UAAAq+B,KAAA,SAAK7Y,EAAcyB,GAClB,IAAM9L,EAAe5c,KAAKiW,UAAUyS,GACpC,GAAiD,YAA7C1oB,KAAKgpB,OAAO3M,eAAeO,GAA6B,CAC3D,IAAM+iB,EAAiB3/B,KAAKiW,UAAUgR,GAEtCjnB,KAAKwzB,MAAM5W,GAEX5c,KAAKuzB,OAAO3W,EAAc+iB,GAE3B,OAAO3/B,MAYRk/B,EAAAz9B,UAAAywB,cAAA,SAAcnB,EAAiBD,GAG9B,OAFA9wB,KAAK+wB,UAAYA,EACjB/wB,KAAK8wB,QAAUA,EACR9wB,MAMRc,OAAAC,eAAIm+B,EAAAz9B,UAAA,iBAAJ,WACC,OAAOzB,KAAKgwB,gBAEb,SAAce,GACb/wB,KAAKgwB,WAAae,EAElB/wB,KAAKm/B,eAAep3B,QAAQ,SAAAxB,GAC3BA,EAAOwqB,UAAYA,qCAOrBjwB,OAAAC,eAAIm+B,EAAAz9B,UAAA,eAAJ,WACC,OAAOzB,KAAKiwB,cAEb,SAAYa,GACX9wB,KAAKiwB,SAAWa,EAEhB9wB,KAAKm/B,eAAep3B,QAAQ,SAAAxB,GAC3BA,EAAOuqB,QAAUA,qCAOnBhwB,OAAAC,eAAIm+B,EAAAz9B,UAAA,cAAJ,WACC,OAAOzB,KAAKuiB,aAEb,SAAW3R,GACV5Q,KAAKuiB,QAAQnR,IAAIR,oCAMlB9P,OAAAC,eAAIm+B,EAAAz9B,UAAA,YAAJ,WACC,OAAOzB,KAAK0qB,WAEb,SAASxZ,GAER,GAAIlR,KAAK0qB,QAAUxZ,IAGnBlR,KAAK0qB,MAAQxZ,EAEblR,KAAKm/B,eAAep3B,QAAQ,SAAAxB,GAC3BA,EAAO2K,KAAOA,IAEXA,GAAM,CAET,IAAMoY,EAAYtpB,KAAKgpB,OAAOpC,aAAa,UAAW5mB,KAAKsQ,OACvDgZ,GACHtpB,KAAKgpB,OAAO1d,OAAOge,EAAU1e,wCAShC9J,OAAAC,eAAIm+B,EAAAz9B,UAAA,oBAAJ,WACC,OAAOzB,KAAK41B,mBAEb,SAAiBG,GAChB/1B,KAAK41B,cAAgBG,EACrB,IAAMzlB,EAAMtQ,KAAKsQ,MAGXgZ,EAAYtpB,KAAKgpB,OAAOpC,aAAa,UAAWtW,GAClDgZ,GAAaA,EAAUuW,cAC1B7/B,KAAKgpB,OAAO1d,OAAOge,EAAU1e,MAC7B5K,KAAKm/B,eAAep3B,QAAQ,SAAAxB,GAAU,OAAAA,EAAOquB,gBAI9C50B,KAAKm/B,eAAep3B,QAAQ,SAAAxB,GAC3BA,EAAO+uB,aAAahwB,eAAeywB,EAAMzlB,sCAO3CxP,OAAAC,eAAIm+B,EAAAz9B,UAAA,eAAJ,WACC,OAAOzB,KAAKuiB,QAAQL,aAErB,SAAYgC,GACXlkB,KAAKuiB,QAAQL,QAAUgC,mCAMxBpjB,OAAAC,eAAIm+B,EAAAz9B,UAAA,cAAJ,WACC,OAAOzB,KAAKuiB,QAAQC,wCAGrB0c,EAAAz9B,UAAA2C,QAAA,WAMC,OALA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MAEbA,KAAKm/B,eAAep3B,QAAQ,SAAAxB,GAAU,OAAAA,EAAOnC,YAC7CpE,KAAKm/B,eAAerZ,QACpB9lB,KAAKuiB,QAAQne,UACNpE,MAETk/B,EA7XA,CAA4BvM,gVCP5BoN,GAAA,SAAA/2B,GAqBC,SAAAg3B,IAAA,IAAAv8B,EACCuF,EAAAzI,KAAAP,KAAMc,OAAO2F,OAAOK,EAAqBk5B,EAAIv3B,cAAepC,WAAY,aAAWrG,YApBpFyD,EAAAuzB,UAAW,EAEFvzB,EAAA9C,KAAO,MAKR8C,EAAAw8B,KAAa,IAAI9e,IAAOlf,QAASwB,EAAKxB,UACrCwB,EAAAsY,MAAQtY,EAAKw8B,KACbx8B,EAAA4b,OAAS5b,EAAKw8B,KAKdx8B,EAAAy8B,OAAwBz8B,EAAKqY,OAQrCuE,GAAc5c,EAAKwzB,gBAAiBxzB,EAAKw8B,QAc3C,OAtCyBE,GAAAH,EAAAh3B,GA2BjBg3B,EAAAv3B,YAAP,WACC,OAAO3H,OAAO2F,OAAOqwB,GAAOruB,eAC3BrH,MAAO,KAIT4+B,EAAAv+B,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKigC,KAAK77B,UACHpE,MAETggC,EAtCA,CAAyBlJ,gVCZzBsJ,GAAA,SAAAp3B,GAAA,SAAAq3B,IAAA,IAAA58B,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,MAKC8C,EAAA68B,KAAO,IAAIpG,IAClBj4B,QAASwB,EAAKxB,QACdo4B,QAAS,SAAA1pB,GACR,OAAI1M,KAAKuT,IAAI7G,GAAO,KACZ,EAEA1M,KAAKuT,IAAI7G,MAQnBlN,EAAAsY,MAAQtY,EAAK68B,KAKb78B,EAAA4b,OAAS5b,EAAK68B,OAUf,OApCyBC,GAAAF,EAAAr3B,GA+BxBq3B,EAAA5+B,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKsgC,KAAKl8B,UACHpE,MAETqgC,EApCA,CAAyBtG,gVCFzByG,GAAA,SAAAx3B,GAAA,SAAAy3B,IAAA,IAAAh9B,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,cAKC8C,EAAAs3B,MAAQ,IAAIb,IACnBj4B,QAASwB,EAAKxB,QACdo4B,QAAS,SAAAW,GAAK,OAAc,EAAd/2B,KAAKuT,IAAIwjB,GAAS,KAMjCv3B,EAAAsY,MAAQtY,EAAKs3B,MAKbt3B,EAAA4b,OAAS5b,EAAKs3B,QAUf,OA9BiC2F,GAAAD,EAAAz3B,GAyBhCy3B,EAAAh/B,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK+6B,MAAM32B,UACJpE,MAETygC,EA9BA,CAAiC1G,gVCIjC4G,GAAA,SAAA33B,GAAA,SAAA43B,IAAA,IAAAn9B,EAAA,OAAAuF,KAAApC,MAAA5G,KAAAqG,YAAArG,YAECyD,EAAA9C,KAAO,SAKC8C,EAAAo9B,UAAsB,IAAI3F,IACjCj5B,QAASwB,EAAKxB,QACdb,OAAQ,IAMTqC,EAAAsY,MAAQtY,EAAKo9B,UACbp9B,EAAA4b,OAAS5b,EAAKo9B,YAWf,OA3B4BC,GAAAF,EAAA53B,GAsB3B43B,EAAAn/B,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK6gC,UAAUz8B,UACRpE,MAET4gC,EA3BA,CAA4B7G,gVCU5BgH,GAAA,SAAA/3B,GA0BC,SAAAg4B,IAAA,IAAAv9B,EACCuF,EAAAzI,KAAAP,KAAMc,OAAO2F,OAAOK,EAAqBk6B,EAASv4B,cAAepC,WAAY,aAAWrG,YAzBzFyD,EAAAuzB,UAAW,EAEFvzB,EAAA9C,KAAO,WAKR8C,EAAAw8B,KAAa,IAAI9e,IAAOlf,QAASwB,EAAKxB,UAC9CwB,EAAAsY,MAAQtY,EAAKw8B,KACbx8B,EAAA4b,OAAS5b,EAAKw8B,KAKNx8B,EAAAw9B,KAAe,IAAIN,IAAS1+B,QAAUwB,EAAKxB,UAKnDwB,EAAAy9B,WAA4Bz9B,EAAKqY,OAQhCuE,GAAc5c,EAAKwzB,gBAAiBxzB,EAAKw9B,KAAMx9B,EAAKw8B,QAetD,OA5C8BkB,GAAAH,EAAAh4B,GAgCtBg4B,EAAAv4B,YAAP,WACC,OAAO3H,OAAO2F,OAAOqwB,GAAOruB,eAC3BrH,MAAO,KAIT4/B,EAAAv/B,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKihC,KAAK78B,UACVpE,KAAKigC,KAAK77B,UACHpE,MAETghC,EA5CA,CAA8BlK,gVCf9BsK,GAAA,SAAAp4B,GAmBC,SAAAq4B,IAAA,IAAA59B,EACCuF,EAAAzI,KAAAP,KAAMc,OAAO2F,OAAOK,EAAqBu6B,EAAK54B,cAAepC,cAAYrG,YAlBjEyD,EAAA9C,KAAO,OAKR8C,EAAA69B,MAAQ,IAAIngB,IAAOlf,QAAUwB,EAAKxB,UAK1CwB,EAAA4b,OAAS5b,EAAK69B,MAKd79B,EAAAsY,WAAQ5R,EAIP0V,GAAQpc,EAAKxB,QAAQyO,YAAY,GAAIjN,EAAK69B,SAW5C,OAhC0BC,GAAAF,EAAAr4B,GA2BzBq4B,EAAA5/B,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbsR,GAAWtR,KAAKiC,QAAQyO,YAAY,GAAI1Q,KAAKshC,OACtCthC,MAETqhC,EAhCA,CAA0BtH,gVC8C1ByH,GAAA,SAAAx4B,GA6GC,SAAAy4B,IAAA,IAAAh+B,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB26B,EAASh5B,cAAepC,WAAY,SAAU,QAAS,UAAW,cAAYrG,KA7GjGyD,EAAA9C,KAAe,WA0Fd8C,EAAAujB,KAA4B,IAAI8P,IACzC70B,QAASwB,EAAKxB,QACdb,MAAO,IAMRqC,EAAA4b,OAAqB5b,EAAKujB,KAK1BvjB,EAAAsY,WAA+B5R,EAO9B,IAAMI,EAAUzD,EAAqB26B,EAASh5B,cAAepC,WAAY,SAAU,QAAS,UAAW,mBAEvG5C,EAAKi+B,OAASn3B,EAAQm3B,OACtBj+B,EAAKk+B,MAAQp3B,EAAQo3B,MACrBl+B,EAAKm+B,QAAUr3B,EAAQq3B,QACvBn+B,EAAKo+B,QAAUt3B,EAAQs3B,QACvBp+B,EAAKq+B,YAAcv3B,EAAQu3B,YAC3Br+B,EAAKs+B,aAAex3B,EAAQw3B,aAC5Bt+B,EAAKu+B,WAAaz3B,EAAQy3B,aAqQ5B,OA7X8BC,GAAAR,EAAAz4B,GA2HtBy4B,EAAAh5B,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCi5B,OAAS,IACTI,YAAc,SACdH,MAAQ,GACRK,WAAa,cACbH,QAAU,EACVE,aAAe,cACfH,QAAU,MAQZ9gC,OAAAC,eAAI0gC,EAAAhgC,UAAA,aAAJ,WACC,OAAOzB,KAAKqc,eAAerc,KAAKsQ,wCAUzBmxB,EAAAhgC,UAAAygC,UAAR,SAAkB3N,EAA8B4N,GAC/C,GAAIn9B,EAASuvB,GACZ,OAAOA,EAGP,IAAI6N,OAAS,EACb,IAAKA,KAAaC,GACjB,GAAIA,GAAeD,GAAWD,KAAe5N,EAC5C,OAAO6N,EAIT,OAAO7N,GAUDkN,EAAAhgC,UAAA6gC,UAAR,SACC3hC,EACAwhC,EACA5N,GAGA,GAAIvvB,EAASuvB,IAAUnvB,QAAQC,IAAIg9B,GAAgB9N,GAAQ,CAC1D,IAAMgO,EAAWF,GAAe9N,GAC5B7vB,EAAS69B,GACC,gBAAT5hC,IACHX,KAAKW,GAAQ4hC,EAASJ,IAGvBniC,KAAKW,GAAQ4hC,MAER,KAAIz9B,EAAQyvB,IAAmB,gBAAT5zB,EAG5B,MAAM,IAAIyH,MAAM,4BAA8BmsB,GAF9Cv0B,KAAKW,GAAQ4zB,IA0BfzzB,OAAAC,eAAI0gC,EAAAhgC,UAAA,mBAAJ,WACC,OAAOzB,KAAKkiC,UAAUliC,KAAKwiC,aAAc,WAE1C,SAAgBjO,GACfv0B,KAAKsiC,UAAU,eAAgB,KAAM/N,oCAQtCzzB,OAAAC,eAAI0gC,EAAAhgC,UAAA,oBAAJ,WACC,OAAOzB,KAAKkiC,UAAUliC,KAAKyiC,cAAe,YAE3C,SAAiBlO,GAChBv0B,KAAKsiC,UAAU,gBAAiB,MAAO/N,oCAQxCzzB,OAAAC,eAAI0gC,EAAAhgC,UAAA,kBAAJ,WACC,OAAOzB,KAAK0iC,iBAEb,SAAenO,GACdv0B,KAAKiI,QAAQ,SAAU,eAAeX,KAAK,SAAA7G,GAAK,OAAAA,IAAM8zB,IAAQ,2BAA2BA,GACzFv0B,KAAK0iC,YAAcnO,mCAYpBkN,EAAAhgC,UAAAkhC,cAAA,SAAc/3B,EAAag4B,QAAA,IAAAA,MAAA,GAC1B5iC,KAAK0I,IAAI,gBAAiBkC,EAAMg4B,GAChCh4B,EAAO5K,KAAKiW,UAAUrL,GACtB,IACI82B,EADmB1hC,KAAKiW,UAAUjW,KAAK0hC,QAErCC,EAAQ3hC,KAAKiW,UAAUjW,KAAK2hC,OAE5BkB,EAAe7iC,KAAKqc,eAAezR,GACrCi4B,EAAe,IAKlBnB,GAF0B,EAAImB,IADX,EAAInB,IAMxB,GAAe,IAAXA,EAEH1hC,KAAKgnB,KAAK1hB,eAAes9B,EAAUh4B,QAC7B,GAA0B,WAAtB5K,KAAKwiC,aACfxiC,KAAKgnB,KAAKlJ,aAAa8kB,EAAUlB,EAAQ92B,QACnC,GAA0B,gBAAtB5K,KAAKwiC,aACfxiC,KAAKgnB,KAAKjJ,aAAa6kB,EAAUlB,EAAQ92B,OACnC,CACN5K,KAAKgnB,KAAKvJ,oBAAoB7S,GAG9B,IAFA,IAAI2pB,EAAQv0B,KAAKwiC,aAERpiC,EAAI,EAAGA,EAAIm0B,EAAMjuB,OAAQlG,IAEjC,GAAIm0B,EAAMn0B,EAAI,IAAMyiC,GAAgBA,GAAgBtO,EAAMn0B,GAAI,EAC7Dm0B,EAAQv0B,KAAKwiC,aAAa14B,MAAM1J,IAE1B,GAAKyiC,EACX,MAGF7iC,KAAKgnB,KAAK7I,oBAAoBoW,EAAO3pB,EAAM82B,EAAQkB,GAGpD,GAAIjB,EAAO,CACV,IAAMmB,EAAaF,EAAW5iC,KAAK4hC,QAC7BmB,EAAan4B,EAAO82B,EAC1B1hC,KAAK0I,IAAI,QAASq6B,GACO,WAArB/iC,KAAK0iC,YACR1iC,KAAKgnB,KAAKlJ,aAAaglB,EAAYnB,EAAOoB,EAAa/iC,KAAK0e,aAE5D1e,KAAKiI,OAA4B,gBAArBjI,KAAK0iC,YAChB,yDAAyD1iC,KAAK0iC,aAC/D1iC,KAAKgnB,KAAKhJ,+BAA+B8kB,EAAYC,EAAYpB,IAGnE,OAAO3hC,MAURyhC,EAAAhgC,UAAAuhC,eAAA,SAAep4B,GACd5K,KAAK0I,IAAI,iBAAkBkC,GAC3BA,EAAO5K,KAAKiW,UAAUrL,GACtB,IAAMi4B,EAAe7iC,KAAKqc,eAAezR,GACzC,GAAIi4B,EAAe,EAAG,CACrB,IAAMhB,EAAU7hC,KAAKiW,UAAUjW,KAAK6hC,SACT,WAAvB7hC,KAAKyiC,cACRziC,KAAKgnB,KAAKlJ,aAAa,EAAG+jB,EAASj3B,GACF,gBAAvB5K,KAAKyiC,cACfziC,KAAKgnB,KAAKjJ,aAAa,EAAG8jB,EAASj3B,IAEnC5K,KAAKiI,OAAOnD,EAAQ9E,KAAKyiC,eAAgB,mEACzCziC,KAAKgnB,KAAKvJ,oBAAoB7S,GAC9B5K,KAAKgnB,KAAK7I,oBAAoBne,KAAKyiC,cAAe73B,EAAMi3B,EAASgB,IAGnE,OAAO7iC,MAORyhC,EAAAhgC,UAAA4a,eAAA,SAAezR,GACd,OAAO5K,KAAKgnB,KAAK3K,eAAezR,IAajC62B,EAAAhgC,UAAAwhC,qBAAA,SAAqB5kB,EAAgBzT,EAAag4B,GAIjD,YAJiD,IAAAA,MAAA,GACjDh4B,EAAO5K,KAAKiW,UAAUrL,GACtB5K,KAAK2iC,cAAc/3B,EAAMg4B,GACzB5iC,KAAKgjC,eAAep4B,EAAO5K,KAAKiW,UAAUoI,IACnCre,MAMRyhC,EAAAhgC,UAAA6J,OAAA,SAAOC,GAEN,OADAvL,KAAKgnB,KAAKzK,sBAAsBvc,KAAKiW,UAAU1K,IACxCvL,MAMRyhC,EAAAhgC,UAAAoe,QAAA,SAAQjO,EAAwBiP,EAA0BC,GAEzD,YAF+B,IAAAD,MAAA,QAA0B,IAAAC,MAAA,GACzDqW,GAAcn3B,KAAM4R,EAAaiP,EAAcC,GACxC9gB,MAGRyhC,EAAAhgC,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKgnB,KAAK5iB,UACHpE,MAETyhC,EA7XA,CAA8BxiB,IAsZxBojB,GAAmC,WAExC,IAEIjiC,EACAkoB,EAGE4a,KACN,IAAK9iC,EAAI,EAAGA,EAPK,IAOSA,IACzB8iC,EAAY9iC,GAAK6D,KAAKotB,IAAKjxB,EAAI,KAAmB6D,KAAKqtB,GAAK,IAI7D,IAAM6R,KAEN,IAAK/iC,EAAI,EAAGA,EAAIgjC,IAAchjC,IAAK,CAClCkoB,EAAKloB,EAAI,IACT,IAAMijC,EAAWp/B,KAAKotB,IAAI/I,GAAe,EAAVrkB,KAAKqtB,IAHb,IAGyCrtB,KAAKqtB,GAAK,GAAK,EAC/E6R,EAAY/iC,GAAKijC,EAAW,GAAS,IAAJ/a,EAElC6a,EAAYC,KAAgB,EAG5B,IAAME,KAEN,IAAKljC,EAAI,EAAGA,EAxBK,IAwBSA,IACzBkjC,EAAYljC,GAAK6D,KAAK4mB,KAAMzqB,EAAI,IAFnB,KAMd,IAAMmjC,KACN,IAAKnjC,EAAI,EAAGA,EA9BK,IA8BSA,IACzBkoB,EAAIloB,EAAI,IACRmjC,EAAUnjC,GAAK,IAAO,EAAI6D,KAAKy1B,IAAIz1B,KAAKqtB,GAAKhJ,IAI9C,IAsBsBiM,EAtBhBiP,KACN,IAAKpjC,EAAI,EAAGA,EArCK,IAqCSA,IAAK,CAC9BkoB,EAAIloB,EAAI,IACR,IAAMmV,EAAwB,EAAjBtR,KAAKsO,IAAI+V,EAAG,GAAS,GAC5B3X,EAAM1M,KAAKy1B,IAAInkB,EAAOtR,KAAKqtB,GAAK,EAAIhJ,GAC1Ckb,EAAYpjC,GAAK6D,KAAKuT,IAAI7G,GAAO,EAAI2X,IAMtC,SAASmb,EAAYlP,GAEpB,IADA,IAAMmP,EAAM,IAAI3+B,MAAMwvB,EAAMjuB,QACnBq9B,EAAI,EAAGA,EAAIpP,EAAMjuB,OAAQq9B,IACjCD,EAAIC,GAAK,EAAIpP,EAAMoP,GAEpB,OAAOD,EAaR,OACCE,QACCC,GAAKJ,EAAYD,GACjBM,IAAMN,GAEPO,QACCF,GAAKX,EACLY,KAdoBvP,EAcD2O,EAbb3O,EAAMzqB,MAAM,GAAGoY,YAetB8hB,YAAc,cACdC,OAAS,SACTC,QACCL,GAAKV,EACLW,IAAML,EAAYN,IAEnBgB,MACCN,GAAKN,EACLO,IAAML,EAAYF,IAEnBa,MACCP,GAAKP,EACLQ,IAAML,EAAYH,KAxFoB,+UC/azCe,GAAA,SAAAr7B,GAaC,SAAAs7B,IAAA,IAAA7gC,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqBw9B,EAAkB77B,cAAepC,WAAY,SAAU,QAAS,UAAW,cAAYrG,YAZnHyD,EAAA9C,KAAO,oBAEC8C,EAAA4d,UAAkB,IAAIF,IAC7Blf,QAASwB,EAAKxB,QACdwQ,KAAM,IAEPhP,EAAA4b,OAAe5b,EAAK4d,UACpB5d,EAAAsY,MAActY,EAAK4d,UAMlB5d,EAAKujB,KAAKnH,QAAQpc,EAAK4d,UAAU5O,MACjChP,EAAK4b,OAAS5b,EAAK4d,UACnB5d,EAAKsY,MAAQtY,EAAK4d,YAWpB,OA5BuCkjB,GAAAD,EAAAt7B,GAuBtCs7B,EAAA7iC,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKqhB,UAAUjd,UACRpE,MAETskC,EA5BA,CAAuC9C,gVCjBvCgD,GAAA,SAAAx7B,GAgCC,SAAAy7B,IAAA,IAAAhhC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB29B,EAAWh8B,cAAepC,aAAWrG,KAVzDyD,EAAAysB,oBAKAzsB,EAAAovB,SAAmB,EAuGnBpvB,EAAAihC,wBAA0BjhC,EAAKk/B,cAQ/Bl/B,EAAAkhC,yBAA2BlhC,EAAKu/B,eAzGvC,IAAMz4B,EAAUzD,EAAqB29B,EAAWh8B,cAAepC,kBAE/D5C,EAAKwvB,QAAUxvB,EAAK4b,OAAS,IAAI+O,IAChCnsB,QAASwB,EAAKxB,QACdqsB,OAAQ/jB,EAAQ+jB,SAEjB7qB,EAAK6qB,OAAS7qB,EAAKwvB,QAAQ3E,OAC3BvN,GAAStd,EAAM,YA+GjB,OAzJ4EmhC,GAAAH,EAAAz7B,GA6CpEy7B,EAAAh8B,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClC6lB,OAAQ,KAkBVmW,EAAAhjC,UAAAgyB,KAAA,WAMC,OALKzzB,KAAK6yB,UACT7yB,KAAK6yB,SAAU,EACf7yB,KAAK6kC,YAAY,gBAAiB,GAClC7kC,KAAK6kC,YAAY,iBAAkB,IAE7B7kC,MAQEykC,EAAAhjC,UAAAojC,YAAV,SAAsB/wB,EAAgBgxB,GAAtC,IAAArhC,EAAAzD,KACO+kC,EAAiB/kC,KAAK,aAAe8T,GAAU9T,KAAK8T,GAC1D9T,KAAK8T,GAAU,eAAC,IAAA1M,KAAAhB,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAAgB,EAAAhB,GAAAC,UAAAD,GACf,IAAMwE,EAAOxD,EAAK09B,GACZpzB,EAAKjO,EAAKxB,QAAQ4P,UAAUga,SAAS,SAAC3b,GAC3C9I,EAAK09B,GAAgB50B,EACrB60B,EAAen+B,MAAMnD,EAAM2D,IACzBwD,GACHnH,EAAKysB,iBAAiB1mB,KAAKkI,KAO7B+yB,EAAAhjC,UAAAmyB,OAAA,eAAAnwB,EAAAzD,KAQC,OAPAA,KAAKkwB,iBAAiBnoB,QAAQ,SAAA2J,GAAM,OAAAjO,EAAKxB,QAAQ4P,UAAUiU,MAAMpU,KACjE1R,KAAKkwB,oBACDlwB,KAAK6yB,UACR7yB,KAAK6yB,SAAU,EACf7yB,KAAK2iC,cAAgB3iC,KAAK0kC,wBAC1B1kC,KAAKgjC,eAAiBhjC,KAAK2kC,0BAErB3kC,MAcRykC,EAAAhjC,UAAAwhC,qBAAA,SAAqB5qB,EAAiBgG,EAAgBzT,EAAag4B,GAClE,IAAMhmB,EAAe5c,KAAKiW,UAAUrL,GAC9Bge,EAAmB5oB,KAAKiW,UAAUoI,GAGxC,OAFAre,KAAK2iC,cAActqB,EAAMuE,EAAcgmB,GACvC5iC,KAAKgjC,eAAepmB,EAAegM,GAC5B5oB,MAyBRykC,EAAAhjC,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKizB,QAAQ7uB,UACbpE,KAAK4zB,SACL5zB,KAAKkwB,oBACElwB,MAETykC,EAzJA,CAA4ExlB,gVCI5E+lB,GAAA,SAAAh8B,GA4BC,SAAAi8B,IAAA,IAAAxhC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBm+B,EAAWx8B,cAAepC,aAAWrG,KAC1DuK,EAAUzD,EAAqBm+B,EAAWx8B,cAAepC,kBAE/D5C,EAAKyhC,WAAa36B,EAAQ26B,WAC1BzhC,EAAK0hC,UAAY56B,EAAQ46B,YAsF3B,OAxH4EC,GAAAH,EAAAj8B,GAqCpEi8B,EAAAx8B,YAAP,WACC,OAAO3H,OAAO2F,OAAO+9B,GAAW/7B,eAC/B08B,UAAWjkB,GACXgkB,WAAY,KAedD,EAAAxjC,UAAAkhC,cAAA,SAActqB,EAAkCzN,EAAag4B,QAAA,IAAAA,MAAA,GAC5D5iC,KAAK0I,IAAI,gBAAiB2P,EAAMzN,EAAMg4B,GACtC,IAAMltB,EAAU1V,KAAKiW,UAAUrL,GAG/B,OAFA5K,KAAKqlC,uBAAuB3vB,EAASktB,GACrC5iC,KAAKslC,QAAQjtB,EAAM3C,GACZ1V,MASRilC,EAAAxjC,UAAAuhC,eAAA,SAAep4B,GACd5K,KAAK0I,IAAI,iBAAkBkC,GAC3B,IAAM8K,EAAU1V,KAAKiW,UAAUrL,GAE/B,OADA5K,KAAKulC,wBAAwB7vB,GACtB1V,MAmBRilC,EAAAxjC,UAAA+jC,eAAA,SAAe56B,GAEd,OADAA,EAAO5K,KAAKiW,UAAUrL,GACf5K,KAAKylC,SAASppB,eAAezR,IAerCq6B,EAAAxjC,UAAA6jC,QAAA,SAAQjtB,EAAkCzN,GACzC,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAC9B86B,EAAoBrtB,aAAgBJ,GAAiBI,EAAKlC,cAAgBkC,EAChF,GAAIrY,KAAKklC,WAAa,GAAKllC,KAAKwlC,eAAe5oB,GAAgB,IAAM,CACpE,IAAM+oB,EAAW3lC,KAAKiW,UAAUjW,KAAKklC,YACrCllC,KAAK8S,UAAU8K,kBAAkB8nB,EAAmBC,EAAU/oB,QAE9D5c,KAAK8S,UAAUxN,eAAeogC,EAAmB9oB,GAElD,OAAO5c,MAETilC,EAxHA,CAA4ET,gVCY5EoB,GAAA,SAAA58B,GAyBC,SAAA68B,IAAA,IAAApiC,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqB++B,EAAMp9B,cAAepC,aAAWrG,KAxBnDyD,EAAA9C,KAAe,QAyBvB,IAAM4J,EAAUzD,EAAqB++B,EAAMp9B,cAAepC,kBAE1D5C,EAAK20B,WAAa,IAAIgG,GAAet9B,OAAO2F,QAC3CxE,QAASwB,EAAKxB,QACdixB,OAAQ,WAAM,OAAAzvB,EAAK0hC,UAAU1hC,KAC3B8G,EAAQ6tB,aAEX30B,EAAKqP,UAAYrP,EAAK20B,WAAWtlB,UACjCrP,EAAK8zB,OAAS9zB,EAAK20B,WAAWb,OAE9B9zB,EAAKgiC,SAAW,IAAIpB,GAAkBvjC,OAAO2F,QAC5CxE,QAASwB,EAAKxB,SACZsI,EAAQk7B,WAGXhiC,EAAK20B,WAAWjY,MAAM1c,EAAKgiC,SAAUhiC,EAAK4b,QAC1C0B,GAAStd,GAAO,aAAc,YAAa,SAAU,eA0DvD,OArGwEqiC,GAAAD,EAAA78B,GA8ChE68B,EAAAp9B,YAAP,WACC,OAAO3H,OAAO2F,OAAOu+B,GAAWv8B,eAC/Bg9B,SAAU3kC,OAAO2F,OAChBmB,EAAe45B,GAAS/4B,cAAe3H,OAAOmG,KAAKgY,GAAcxW,iBAEhEi5B,OAAS,KACTC,MAAQ,GACRE,QAAU,EACVD,QAAU,KAGZxJ,WAAYt3B,OAAO2F,OAClBmB,EAAew2B,GAAe31B,cAAmB3H,OAAOmG,KAAK0rB,GAAOlqB,eAAc5B,QAAE,YAAa,aAEhGvE,KAAM,gBAWAujC,EAAApkC,UAAA4jC,uBAAV,SAAiCz6B,EAAeg4B,GAK/C,GAHA5iC,KAAKylC,SAAS9C,cAAc/3B,EAAMg4B,GAClC5iC,KAAKo4B,WAAWjnB,MAAMvG,GAEQ,IAA1B5K,KAAKylC,SAAS7D,QAAe,CAChC,IAAMmE,EAAiB/lC,KAAKiW,UAAUjW,KAAKylC,SAAS/D,QAC9CsE,EAAgBhmC,KAAKiW,UAAUjW,KAAKylC,SAAS9D,OACnD3hC,KAAKo4B,WAAWhP,KAAKxe,EAAOm7B,EAAiBC,KAQrCH,EAAApkC,UAAA8jC,wBAAV,SAAkC36B,GACjC5K,KAAKylC,SAASzC,eAAep4B,GAC7B5K,KAAKo4B,WAAWhP,KAAKxe,EAAO5K,KAAKiW,UAAUjW,KAAKylC,SAAS5D,WAM1DgE,EAAApkC,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKo4B,WAAWh0B,UAChBpE,KAAKylC,SAASrhC,UACPpE,MAET6lC,EArGA,CAAwEb,gVCmBxEiB,GAAA,SAAAj9B,GAmCC,SAAAk9B,IAAA,IAAAziC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBo/B,EAAQz9B,cAAepC,WAAY,OAAQ,SAAU,WAAY,UAAQrG,KAnCrGyD,EAAA9C,KAAO,UAYC8C,EAAA07B,eAAoD,IAAIjyB,IAwB/D,IAAM3C,EAAUzD,EAAqBo/B,EAAQz9B,cAAepC,WAAY,OAAQ,SAAU,WAAY,QAEhG8/B,YACNrlC,OAAOmG,KAAKsD,EAAQmb,MAAM3d,QAAQ,SAACsQ,GAClC,IAAMG,EAAarE,SAASkE,EAAM,IAGlC,GAFA5U,EAAKwE,OAAOhD,EAAOoT,IACd5T,EAAS+T,IAAeqE,SAASrE,GAAc,4CAA4CH,GAC5FpT,EAAOoT,GAAO,CAEjB,IAAM+tB,EAAM,IAAInuB,GAAexU,EAAKxB,QAASoW,GAAMjC,SACnD+vB,EAAOC,GAAO77B,EAAQmb,KAAKrN,QACjB5T,EAAS+T,IAAeqE,SAASrE,KAE3C2tB,EAAO3tB,GAAcjO,EAAQmb,KAAKlN,MAIpC/U,EAAK+hB,SAAW,IAAIF,GAAiB6gB,EAAQ57B,EAAQ0X,OAAQ1X,EAAQqa,SACrEnhB,EAAKi+B,OAASn3B,EAAQm3B,OACtBj+B,EAAKo+B,QAAUt3B,EAAQs3B,QACvBp+B,EAAK8wB,MAAQhqB,EAAQgqB,QA4MvB,OAtQ6B8R,GAAAH,EAAAl9B,GA6DrBk9B,EAAAz9B,YAAP,WACC,OAAO3H,OAAO2F,OAAO+9B,GAAW/7B,eAC/Bi5B,OAAS,EACT9c,QAAU,GACV2P,MAAQ,cACRtS,OAASf,GACT2gB,QAAU,GACVnc,WAOMwgB,EAAAzkC,UAAA6kC,aAAR,SAAqBnzB,GAIpB,IAFA,IACInP,EAAW,EACRA,EAFc,IAEW,CAE/B,GAAIhE,KAAKwlB,SAASngB,IAAI8N,EAAOnP,GAC5B,OAAQA,EACF,GAAIhE,KAAKwlB,SAASngB,IAAI8N,EAAOnP,GACnC,OAAOA,EAERA,IAED,MAAM,IAAIoE,MAAM,kCAAkC+K,IAQnD+yB,EAAAzkC,UAAAkhC,cAAA,SAAc4D,EAAgC37B,EAAag4B,GAA3D,IAAAn/B,EAAAzD,KAuCC,YAvC0D,IAAA4iC,MAAA,GAC1D5iC,KAAK0I,IAAI,gBAAiB69B,EAAO37B,EAAMg4B,GAClC79B,MAAMD,QAAQyhC,KAClBA,GAASA,IAEVA,EAAMx+B,QAAQ,SAAAsQ,GACb,IAAMlF,EAAO,IAAI8E,GAAexU,EAAKxB,QAASoW,GAAMjC,SAE9CowB,EAAa/iC,EAAK6iC,aAAanzB,GAC/BszB,EAActzB,EAAOqzB,EACrB51B,EAASnN,EAAK+hB,SAAStkB,IAAIulC,GAC3BnR,EAAe3iB,EAAyB6zB,GAExCjgC,EAAS,IAAI0uB,IAClBrkB,OAAMA,EACN3O,QAASwB,EAAKxB,QACdsyB,MAAQ9wB,EAAK8wB,MACbJ,OAAS1wB,EAAKi+B,OACdrN,QAAU5wB,EAAKo+B,QACfvM,aAAYA,IACVzV,QAAQpc,EAAK4b,QAChB9Y,EAAO4K,MAAMvG,EAAM,EAAGgG,EAAOyN,SAAWiX,EAAcsN,GAEjD99B,EAAQrB,EAAK07B,eAAej+B,IAAIiS,KACpC1P,EAAK07B,eAAe/tB,IAAI+B,MAExB1P,EAAK07B,eAAej+B,IAAIiS,GAA6B3J,KAAKjD,GAG3DA,EAAOwtB,QAAU,WAChB,GAAItwB,EAAK07B,gBAAkB17B,EAAK07B,eAAe95B,IAAI8N,GAAO,CACzD,IAAMhN,EAAU1C,EAAK07B,eAAej+B,IAAIiS,GAClCrI,EAAQ3E,EAAQqB,QAAQjB,IACf,IAAXuE,GACH3E,EAAQoB,OAAOuD,EAAO,OAKnB9K,MAORkmC,EAAAzkC,UAAAuhC,eAAA,SAAeuD,EAAgC37B,GAA/C,IAAAnH,EAAAzD,KAiBC,OAhBAA,KAAK0I,IAAI,iBAAkB69B,EAAO37B,GAC7B7F,MAAMD,QAAQyhC,KAClBA,GAASA,IAEVA,EAAMx+B,QAAQ,SAAAsQ,GACb,IAAMlF,EAAO,IAAI8E,GAAexU,EAAKxB,QAASoW,GAAMjC,SAEpD,GAAI3S,EAAK07B,eAAe95B,IAAI8N,IAAU1P,EAAK07B,eAAej+B,IAAIiS,GAA6B7M,OAAQ,CAClG,IAAMH,EAAU1C,EAAK07B,eAAej+B,IAAIiS,GACxCvI,EAAOnH,EAAKwS,UAAUrL,GACtBzE,EAAQ4B,QAAQ,SAAAxB,GACfA,EAAO6iB,KAAKxe,KAEbnH,EAAK07B,eAAe/tB,IAAI+B,SAGnBnT,MAORkmC,EAAAzkC,UAAAilC,WAAA,SAAW97B,GACV,IAAMgS,EAAe5c,KAAKiW,UAAUrL,GAOpC,OANA5K,KAAKm/B,eAAep3B,QAAQ,SAAA5B,GAC3B,KAAOA,EAAQG,QAAQ,CACPH,EAAQK,QAChB4iB,KAAKxM,MAGP5c,MAiBRkmC,EAAAzkC,UAAAgyB,KAAA,WAGC,OAFAzzB,KAAK6kC,YAAY,gBAAiB,GAClC7kC,KAAK6kC,YAAY,iBAAkB,GAC5B7kC,MAURkmC,EAAAzkC,UAAAwhC,qBAAA,SACCsD,EACAloB,EACAzT,EACAg4B,GAJD,IAAAn/B,EAAAzD,UAIC,IAAA4iC,MAAA,GAEA,IAAMhmB,EAAe5c,KAAKiW,UAAUrL,GAWpC,OAVA5K,KAAK2iC,cAAc4D,EAAO3pB,EAAcgmB,GACpC99B,EAAQuZ,IACXre,KAAKiI,OAAOnD,EAAQyhC,GAAQ,iDAC3BA,EAAsBx+B,QAAQ,SAACsQ,EAAMvN,GACrC,IAAMpK,EAAI2d,EAASpa,KAAK0Y,IAAI7R,EAAOuT,EAAS/X,OAAS,IACrD7C,EAAKu/B,eAAe3qB,EAAMuE,EAAenZ,EAAKwS,UAAUvV,OAGzDV,KAAKgjC,eAAeuD,EAAO3pB,EAAe5c,KAAKiW,UAAUoI,IAEnDre,MASRkmC,EAAAzkC,UAAAkJ,IAAA,SAAI0N,EAAuB8J,EAA6C9f,GAEvE,GADArC,KAAKiI,OAAOhD,EAAOoT,IAASwE,SAASxE,GAAO,iCAAiCA,GACzEpT,EAAOoT,GAAO,CAEjB,IAAM+tB,EAAM,IAAInuB,GAAejY,KAAKiC,QAASoW,GAAMjC,SACnDpW,KAAKwlB,SAAS7a,IAAIy7B,EAAKjkB,EAAK9f,QAG5BrC,KAAKwlB,SAAS7a,IAAI0N,EAAM8J,EAAK9f,GAE9B,OAAOrC,MAMRc,OAAAC,eAAImlC,EAAAzkC,UAAA,cAAJ,WACC,OAAOzB,KAAKwlB,SAAShD,wCAMtB0jB,EAAAzkC,UAAA2C,QAAA,WAOC,OANA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKwlB,SAASphB,UACdpE,KAAKm/B,eAAep3B,QAAQ,SAAA5B,GAC3BA,EAAQ4B,QAAQ,SAAAxB,GAAU,OAAAA,EAAOnC,cAElCpE,KAAKm/B,eAAerZ,QACb9lB,MAETkmC,EAtQA,CAA6B1B,gVCS7BmC,GAAA,SAAA39B,GAqCC,SAAA49B,IAAA,IAAAnjC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB8/B,EAAUn+B,cAAepC,WAAY,YAAa,QAAS,cAAYrG,KArC1FyD,EAAA9C,KAAO,YAKR8C,EAAAojC,oBAKApjC,EAAAqjC,iBAKArjC,EAAAsjC,WAuBP,IAAMx8B,EAAUzD,EAAqB8/B,EAAUn+B,cAAepC,WAAY,YAAa,QAAS,YAE1FU,EAAWwD,EAAQy8B,MAAMv+B,qBAC/BhF,EAAK8G,QAAUzJ,OAAO2F,OAAOM,EAAUwD,EAAQA,SAC/C9G,EAAKujC,MAAQz8B,EAAQy8B,MACrBvjC,EAAKwjC,UAAY18B,EAAQ08B,YAuQ3B,OApTsEC,GAAAN,EAAA59B,GAgD9D49B,EAAAn+B,YAAP,WACC,OAAO3H,OAAO2F,OAAO+9B,GAAW/7B,eAC/B8B,WACA08B,UAAW,EACXD,MAAOpB,MAOT9kC,OAAAC,eAAI6lC,EAAAnlC,UAAA,oBAAJ,WACC,OAAOzB,KAAK8mC,cAAcxgC,wCAMnBsgC,EAAAnlC,UAAA0lC,gBAAR,SAAwB9uB,GACvB,IAAMjP,EAAQpJ,KAAK8mC,cAAcnO,KAAK,SAACjyB,GAAW,OAAVA,EAAAyM,OAAmBkF,IAC3D,GAAIjP,EACH,OAAOA,EAAM49B,OAQPJ,EAAAnlC,UAAA2lC,oBAAR,SAA4BJ,GAC3BhnC,KAAK6mC,iBAAiBr9B,KAAKw9B,GAE3B,IAAMK,EAAmBrnC,KAAK8mC,cAAcQ,UAAU,SAAC1jC,GAAM,OAAAA,EAAEojC,QAAUA,IACzEhnC,KAAK8mC,cAAcv/B,OAAO8/B,EAAkB,IAQrCT,EAAAnlC,UAAA8lC,uBAAR,WAEC,GAAIvnC,KAAK6mC,iBAAiBvgC,OACzB,OAAOtG,KAAK6mC,iBAAiBrgC,QACvB,GAAIxG,KAAK+mC,QAAQzgC,OAAStG,KAAKinC,UAAW,CAEhD,IAAMD,EAAQ,IAAIhnC,KAAKgnC,MAAMlmC,OAAO2F,OAAOzG,KAAKuK,SAC/CtI,QAASjC,KAAKiC,QACdkjC,UAAWnlC,KAAKonC,oBAAoB9jC,KAAKtD,SAI1C,OAFAgnC,EAAMnnB,QAAQ7f,KAAKqf,QACnBrf,KAAK+mC,QAAQv9B,KAAKw9B,GACXA,EAEPn+B,QAAQqX,KAAK,0CAOP0mB,EAAAnlC,UAAA+lC,eAAR,SAAuBjB,EAAoB37B,EAAeg4B,GAA1D,IAAAn/B,EAAAzD,KACCumC,EAAMx+B,QAAQ,SAAAsQ,GACb,IAAMovB,EAAW,IAAIxc,GAAUxnB,EAAKxB,QAASoW,GAAMjC,SAG/C4wB,EAAQvjC,EAAK0jC,gBAAgBM,GAEjC,GAAIT,GAASA,EAAMxB,eAAe56B,GAAQ,EAAG,CAC5C,IAAMy8B,EAAmB5jC,EAAKqjC,cAAcQ,UAAU,SAAC1jC,GAAM,OAAAA,EAAEojC,QAAUA,IACzEvjC,EAAKqjC,cAAcv/B,OAAO8/B,EAAkB,QAG5CL,EAAQvjC,EAAK8jC,yBAEVP,IACHA,EAAMrE,cAActqB,EAAMzN,EAAMg4B,GAChCn/B,EAAKqjC,cAAcl+B,SAClBuK,KAAMs0B,EAAUT,MAAKA,IAEtBvjC,EAAKiF,IAAI,gBAAiB2P,EAAMzN,OAQ3Bg8B,EAAAnlC,UAAAimC,gBAAR,SAAwBnB,EAAoB37B,GAA5C,IAAAnH,EAAAzD,KACCumC,EAAMx+B,QAAQ,SAAAsQ,GACb,IAAMovB,EAAW,IAAIxc,GAAUxnB,EAAKxB,QAASoW,GAAMjC,SAC7C4wB,EAAQvjC,EAAK0jC,gBAAgBM,GAC/BT,IAEHA,EAAMhE,eAAep4B,GACrBnH,EAAKiF,IAAI,iBAAkB2P,EAAMzN,OAS5Bg8B,EAAAnlC,UAAAkmC,eAAR,SAAuBrlC,EAA4BikC,EAAoB37B,EAAeg4B,GAAtF,IAAAn/B,EAAAzD,KACCA,KAAKiI,QAAQjI,KAAK4nC,SAAU,8BAExBh9B,GAAQ5K,KAAKsQ,MAEH,WAAThO,EACHtC,KAAKwnC,eAAejB,EAAO37B,EAAMg4B,GAEjC5iC,KAAK0nC,gBAAgBnB,EAAO37B,GAI7B5K,KAAKiC,QAAQ0B,WAAW,WACvBF,EAAKkkC,eAAerlC,EAAMikC,EAAO37B,EAAMg4B,IACrCh4B,EAAO5K,KAAKsQ,QAajBs2B,EAAAnlC,UAAAkhC,cAAA,SAAc4D,EAAgC37B,EAAag4B,GAErD79B,MAAMD,QAAQyhC,KAClBA,GAASA,IAEV,IAAM3pB,EAAe5c,KAAKiW,UAAUrL,GAEpC,OADA5K,KAAK2nC,eAAe,SAAUpB,EAAO3pB,EAAcgmB,GAC5C5iC,MAWR4mC,EAAAnlC,UAAAuhC,eAAA,SAAeuD,EAAgC37B,GACzC7F,MAAMD,QAAQyhC,KAClBA,GAASA,IAEV,IAAM3pB,EAAe5c,KAAKiW,UAAUrL,GAEpC,OADA5K,KAAK2nC,eAAe,UAAWpB,EAAO3pB,GAC/B5c,MAgBR4mC,EAAAnlC,UAAAwhC,qBAAA,SACCsD,EACAloB,EACAzT,EACAg4B,GAEA,IAAMhmB,EAAe5c,KAAKiW,UAAUrL,GAEpC,GADA5K,KAAK2iC,cAAc4D,EAAO3pB,EAAcgmB,GACpC99B,EAAQuZ,GAAW,CACtBre,KAAKiI,OAAOnD,EAAQyhC,GAAQ,gEAC5BA,EAAQA,EACR,IAAK,IAAInmC,EAAI,EAAGA,EAAImmC,EAAMjgC,OAAQlG,IAAK,CACtC,IAAMM,EAAI2d,EAASpa,KAAK0Y,IAAIvc,EAAGie,EAAS/X,OAAS,IAC3CuhC,EAAkB7nC,KAAKiW,UAAUvV,GACvCV,KAAKiI,OAAO4/B,EAAkB,EAAG,uCACjC7nC,KAAKgjC,eAAeuD,EAAMnmC,GAAIwc,EAAeirB,QAExC,CACAA,EAAkB7nC,KAAKiW,UAAUoI,GACvCre,KAAKiI,OAAO4/B,EAAkB,EAAG,uCACjC7nC,KAAKgjC,eAAeuD,EAAO3pB,EAAeirB,GAE3C,OAAO7nC,MAeR4mC,EAAAnlC,UAAAgyB,KAAA,WAGC,OAFAzzB,KAAK6kC,YAAY,gBAAiB,GAClC7kC,KAAK6kC,YAAY,iBAAkB,GAC5B7kC,MAeR4mC,EAAAnlC,UAAA2P,IAAA,SAAI7G,GAAJ,IAAA9G,EAAAzD,KAGC,OAFAA,KAAKuK,QAAUtE,EAAUjG,KAAKuK,QAASA,GACvCvK,KAAK+mC,QAAQh/B,QAAQ,SAAAi/B,GAAS,OAAAA,EAAM51B,IAAI3N,EAAK8G,WACtCvK,MAMR4mC,EAAAnlC,UAAAP,IAAA,WACC,OAAOlB,KAAKuK,SAObq8B,EAAAnlC,UAAAilC,WAAA,WACC,IAAMp2B,EAAMtQ,KAAKsQ,MAKjB,OAJAtQ,KAAK8mC,cAAc/+B,QAAQ,SAACrB,GAACA,EAAAsgC,MACtBhE,eAAe1yB,KAEtBtQ,KAAK8mC,iBACE9mC,MAGR4mC,EAAAnlC,UAAA2C,QAAA,WAKC,OAJA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK+mC,QAAQh/B,QAAQ,SAAA+/B,GAAK,OAAAA,EAAE1jC,YAC5BpE,KAAK8mC,iBACL9mC,KAAK6mC,oBACE7mC,MAET4mC,EApTA,CAAsEpC,gVCjCtEuD,GAAA,SAAA/+B,GAoBC,SAAAg/B,IAAA,IAAAvkC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqBkhC,EAAcv/B,cAAepC,aAAWrG,KApB3DyD,EAAA9C,KAAO,gBAeP8C,EAAAyhC,WAAa,EAMrB,IAAM36B,EAAUzD,EAAqBkhC,EAAcv/B,cAAepC,kBAElE5C,EAAKwkC,WAAa19B,EAAQ09B,WAC1BxkC,EAAKykC,QAAU39B,EAAQ29B,QACvBnnB,GAAStd,GAAO,aAAc,eAiChC,OA5DmC0kC,GAAAH,EAAAh/B,GA8B3Bg/B,EAAAv/B,YAAP,WACC,OAAOxC,EAAU++B,GAAWv8B,cAAem9B,GAAMn9B,eAChDg9B,UACC/D,OAAS,KACTI,YAAc,cACdH,MAAQ,GACRE,QAAU,IACVD,QAAU,KAEXsG,QAAS,GACT9P,YACC91B,KAAM,QAEP2lC,WAAY,OAIdD,EAAAvmC,UAAA6jC,QAAA,SAAQjtB,EAAkCzN,GACzC,IAAM8K,EAAU1V,KAAKiW,UAAUrL,GACzBw9B,EAAQpoC,KAAKmW,YAAYkC,aAAgBJ,GAAiBI,EAAKlC,cAAgBkC,GAC/EgwB,EAAUD,EAAQpoC,KAAKkoC,QAG7B,OAFAloC,KAAKo4B,WAAWtlB,UAAUxN,eAAe+iC,EAAS3yB,GAClD1V,KAAKo4B,WAAWtlB,UAAU6K,6BAA6ByqB,EAAO1yB,EAAU1V,KAAKiW,UAAUjW,KAAKioC,aACrFjoC,MAGRgoC,EAAAvmC,UAAA2C,QAAA,WAEC,OADA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACNA,MAETgoC,EA5DA,CAAmCpC,gVCgBnC0C,GAAA,SAAAt/B,GAiEC,SAAAu/B,IAAA,IAAA9kC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqByhC,EAAU9/B,cAAepC,WAAY,WAAY,YAAUrG,KAjEvFyD,EAAA9C,KAAO,YA+BG8C,EAAAulB,OAEL,IAAI1C,GAAc,WAWb7iB,EAAA+kC,aAAsB,EAsB/B,IAAMj+B,EAAUzD,EAAqByhC,EAAU9/B,cAAepC,WAAY,WAAY,iBAEtF5C,EAAKinB,MAAQngB,EAAQ2G,KACrBzN,EAAKpB,SAAWkI,EAAQlI,SACxBoB,EAAKrC,MAAQmJ,EAAQnJ,MACrBqC,EAAKusB,WAAavsB,EAAKyS,QAAQ3L,EAAQwmB,WACvCttB,EAAKwsB,SAAWxsB,EAAKyS,QAAQ3L,EAAQumB,SACrCrtB,EAAKmyB,cAAgBrrB,EAAQ+qB,aAC7B7xB,EAAKglC,aAAel+B,EAAQm+B,YAC5BjlC,EAAKklC,UAAYp+B,EAAQq+B,SACzBnlC,EAAK+qB,KAAOjkB,EAAQikB,KACpB/qB,EAAK6xB,aAAe/qB,EAAQ+qB,eAwQ9B,OAvVgDuT,GAAAN,EAAAv/B,GAkFxCu/B,EAAA9/B,YAAP,WACC,OAAO3H,OAAO2F,OAAOyU,GAAgBzS,eACpCpG,SAAW6e,GACX0nB,UAAW,EACX13B,MAAO,EACP4f,QAAU,KACVC,UAAY,EACZvC,MAAO,EACP8G,aAAe,EACfoT,YAAc,EACdtnC,MAAQ,QAUFmnC,EAAA9mC,UAAAqnC,kBAAR,SAA0Bv9B,GAA1B,IAAA9H,EAAAzD,UAA0B,IAAAuL,OAAgB,GAEzCvL,KAAKgpB,OAAOxc,YAAYjB,EAAO,SAAAnC,GAC9B,IAAIiV,EACJ,GAAoB,YAAhBjV,EAAM0E,MAAqB,EACZ,IAAd1E,EAAMsI,IACTjO,EAAKxB,QAAQ4P,UAAUiU,MAAM1c,EAAMsI,IAEpC,IAAMq3B,EAAY3/B,EAAMwB,KAAO3G,KAAK8O,MAAMtP,EAAKkwB,YAAclwB,EAAKmyB,eAClE,IAAmB,IAAfnyB,EAAKinB,OAAkBjmB,EAAShB,EAAKinB,QAAUjnB,EAAKinB,MAAQ,EAAG,CAClErM,EAAW3T,IACPjG,EAAShB,EAAKinB,SACjBrM,EAAY5a,EAAU,MAAIA,EAAKulC,oBAEhC,IAAMj9B,EAAYtI,EAAKulB,OAAO5d,SAAS29B,GACrB,OAAdh9B,IACHsS,EAAWpa,KAAK0Y,IAAI0B,EAAUtS,EAAUnB,KAAOm+B,IAE5C1qB,IAAa3T,MAEhBjH,EAAKulB,OAAOtC,eAAe,UAAWqiB,EAAY1qB,EAAW,GAAK3M,IAAM,IACxE2M,EAAW,IAAIyM,GAAWrnB,EAAKxB,QAASoc,IAEzC,IAAMra,EAAW,IAAI8mB,GAAWrnB,EAAKxB,QAASwB,EAAKulC,oBACnD5/B,EAAMsI,GAAKjO,EAAKxB,QAAQ4P,UAAU2f,eACjC/tB,EAAKwlC,MAAM3lC,KAAKG,GAAOO,EAAU,IAAI8mB,GAAWrnB,EAAKxB,QAAS8mC,GAAY1qB,QAE3EjV,EAAMsI,GAAKjO,EAAKxB,QAAQ4P,UAAUga,SAASpoB,EAAKwlC,MAAM3lC,KAAKG,GAAO,IAAIqnB,GAAWrnB,EAAKxB,QAAS8mC,QASnGjoC,OAAAC,eAAIwnC,EAAA9mC,UAAA,aAAJ,WACC,OAAOzB,KAAKgpB,OAAO3M,eAAerc,KAAKiC,QAAQ4P,UAAU8D,wCAM1D7U,OAAAC,eAAIwnC,EAAA9mC,UAAA,mBAAJ,WACC,OAAOzB,KAAKwoC,kBAEb,SAAgBvhB,GACfjnB,KAAKwoC,aAAevhB,mCAMrBnmB,OAAAC,eAAIwnC,EAAA9mC,UAAA,mBAAJ,WACC,OAAOzB,KAAKyoC,kBAEb,SAAgBS,GACflpC,KAAKyoC,aAAeS,mCAUrBpoC,OAAAC,eAAIwnC,EAAA9mC,UAAA,gBAAJ,WACC,OAAOzB,KAAK2oC,eAGb,SAAaQ,GACZnpC,KAAK2oC,UAAYQ,mCAOlBZ,EAAA9mC,UAAA0P,MAAA,SAAMvG,GACL,IAAM+K,EAAQ3V,KAAKkW,QAAQtL,GAS3B,MAR0C,YAAtC5K,KAAKgpB,OAAO3M,eAAe1G,KAC9B3V,KAAKgpB,OAAOre,KACX+G,IAAM,EACN5D,MAAQ,UACRlD,KAAM+K,IAEP3V,KAAK8oC,kBAAkBnzB,IAEjB3V,MAORuoC,EAAA9mC,UAAA2nB,KAAA,SAAKxe,GACJ5K,KAAKsL,OAAOV,GACZ,IAAM+K,EAAQ3V,KAAKkW,QAAQtL,GAC3B,GAA0C,YAAtC5K,KAAKgpB,OAAO3M,eAAe1G,GAAsB,CACpD3V,KAAKgpB,OAAOtC,eAAe,UAAW/Q,GAASjE,IAAK,IACpD,IAAMjG,EAAgBzL,KAAKgpB,OAAO3d,UAAUsK,GACxCyzB,EAAgBzzB,EACE,OAAlBlK,IACH29B,EAAgB39B,EAAcb,MAE/B5K,KAAK8oC,kBAAkBM,GAExB,OAAOppC,MAORuoC,EAAA9mC,UAAA6J,OAAA,SAAOV,GAAP,IAAAnH,EAAAzD,KACC4K,EAAOnD,EAAWmD,GAAOF,KACzB,IAAMiL,EAAQ3V,KAAKkW,QAAQtL,GAK3B,OAJA5K,KAAKgpB,OAAOxc,YAAYmJ,EAAO,SAAAvM,GAC9B3F,EAAKxB,QAAQ4P,UAAUiU,MAAM1c,EAAMsI,MAEpC1R,KAAKgpB,OAAO1d,OAAOqK,GACZ3V,MAQEuoC,EAAA9mC,UAAAwnC,MAAV,SAAgBr+B,GACf,IAAM+K,EAAQ3V,KAAKiC,QAAQ4P,UAAUmW,eAAepd,GACpD,IAAK5K,KAAKwuB,MAA8C,YAAtCxuB,KAAKgpB,OAAO3M,eAAe1G,GAAsB,CAClE,GAAI3V,KAAK0oC,YAAc,GAAKzkC,KAAK+xB,SAAWh2B,KAAK0oC,YAChD,OAED,GAAI1oC,KAAK4oC,SAAU,CAClB,IAAIO,EAAY,IACXtkC,EAAU7E,KAAK4oC,YACnBO,EAAYnpC,KAAKiW,UAAUjW,KAAK4oC,WAEjCh+B,IAAyB,EAAhB3G,KAAK+xB,SAAe,GAAKmT,EAEnCnpC,KAAKqC,SAASuI,EAAM5K,KAAKoB,SAOjBmnC,EAAA9mC,UAAAunC,iBAAV,WACC,OAAO/kC,KAAK8O,OAAO/S,KAAKiwB,SAAWjwB,KAAKgwB,YAAchwB,KAAK41B,gBAa5D90B,OAAAC,eAAIwnC,EAAA9mC,UAAA,YAAJ,WACC,OAAOzB,KAAK0qB,WAEb,SAASxZ,GACRlR,KAAK0qB,MAAQxZ,EACblR,KAAK8oC,qDAUNhoC,OAAAC,eAAIwnC,EAAA9mC,UAAA,oBAAJ,WACC,OAAOzB,KAAK41B,mBAEb,SAAiBG,GAChB/1B,KAAK41B,cAAgBG,EACrB/1B,KAAK8oC,qDAONhoC,OAAAC,eAAIwnC,EAAA9mC,UAAA,eAAJ,WACC,OAAO,IAAIqpB,GAAW9qB,KAAKiC,QAASjC,KAAKiwB,UAAUha,iBAEpD,SAAY6a,GACX9wB,KAAKiwB,SAAWjwB,KAAKkW,QAAQ4a,GACzB9wB,KAAK0qB,OACR1qB,KAAK8oC,qDAOPhoC,OAAAC,eAAIwnC,EAAA9mC,UAAA,iBAAJ,WACC,OAAO,IAAIqpB,GAAW9qB,KAAKiC,QAASjC,KAAKgwB,YAAY/Z,iBAEtD,SAAc8a,GACb/wB,KAAKgwB,WAAahwB,KAAKkW,QAAQ6a,GAC3B/wB,KAAK0qB,OACR1qB,KAAK8oC,qDASPhoC,OAAAC,eAAIwnC,EAAA9mC,UAAA,gBAAJ,WACC,GAAIzB,KAAK0qB,MAAO,CACf,IAAM/U,EAAQ3V,KAAKiC,QAAQ4P,UAAU8D,MAC/B0zB,EAAYrpC,KAAKgpB,OAAO9nB,IAAIyU,GAClC,GAAkB,OAAd0zB,GAA0C,YAApBA,EAAUv7B,MAAqB,CACxD,IAAMw7B,EAAetpC,KAAKgpC,mBAE1B,OADkBrzB,EAAQ0zB,EAAUz+B,MAAQ0+B,EAC1BA,EAElB,OAAO,EAGR,OAAO,mCAITf,EAAA9mC,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKsL,SACLtL,KAAKgpB,OAAO5kB,UACLpE,MAETuoC,EAvVA,CAAgDrtB,gVCDhDquB,GAAA,SAAAvgC,GAmBC,SAAAwgC,IAAA,IAAA/lC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB0iC,EAAK/gC,cAAepC,WAAY,WAAY,aAAWrG,YAnBnFyD,EAAA9C,KAAO,OAKG8C,EAAAulB,OAGL,IAAI1C,GAAc,WAKf7iB,EAAA8F,QAA0B,IAAI61B,IAOrBt4B,EAAqB0iC,EAAK/gC,cAAepC,WAAY,WAAY,WAGzEojC,OAAO1hC,QAAQ,SAAAqB,GAClBtE,EAAQsE,GACX3F,EAAKkH,IAAIvB,EAAM,GAAIA,EAAM,IAEzB3F,EAAKkH,IAAIvB,OAwZb,OArb2CsgC,GAAAF,EAAAxgC,GAkCnCwgC,EAAA/gC,YAAP,WACC,OAAO3H,OAAO2F,OAAO6hC,GAAU7/B,eAC9BghC,aASFD,EAAA/nC,UAAA0P,MAAA,SAAMvG,EAAsBqc,GAA5B,IAAAxjB,EAAAzD,KACO2V,EAAQ3V,KAAKkW,QAAQtL,GAC3B,GAA0C,YAAtC5K,KAAKgpB,OAAO3M,eAAe1G,GAAsB,CACpDsR,EAASxf,EAAWwf,EAAQjnB,KAAK0qB,MAAQ1qB,KAAKgwB,WAAa,GAE1D/I,EADGjnB,KAAK0qB,MACCjjB,EAAWwf,EAAQjnB,KAAKgwB,YAExBvoB,EAAWwf,EAAQ,GAE7B,IAAM0iB,EAAiB3pC,KAAKkW,QAAQ+Q,GACpCjnB,KAAKgpB,OAAOre,KACX+G,IAAM,EACNuV,OAAQ0iB,EACR77B,MAAQ,UACRlD,KAAO+K,IAER3V,KAAKk9B,SAAS,SAAA9zB,GACb3F,EAAKmmC,WAAWxgC,EAAOuM,EAAOg0B,KAGhC,OAAO3pC,MAUAwpC,EAAA/nC,UAAAmoC,WAAR,SAAmBxgC,EAAkBuM,EAAcsR,GAClDtR,GAASsR,EACLjnB,KAAK0qB,MACJthB,EAAMuqB,aAAe3zB,KAAKgwB,YAAc5mB,EAAMuqB,YAAc3zB,KAAKiwB,UAChE7mB,EAAMuqB,YAAc1M,IAEvBtR,GAAS3V,KAAKgpC,oBAEf5/B,EAAM+H,MAAM,IAAI2Z,GAAW9qB,KAAKiC,QAAS0T,KAC/BvM,EAAMuqB,YAAc3zB,KAAKgwB,YAAc5mB,EAAMuqB,aAAe1M,IACtE7d,EAAM8H,MAAO,EACb9H,EAAM+H,MAAM,IAAI2Z,GAAW9qB,KAAKiC,QAAS0T,KAEhCvM,EAAMuqB,aAAe1M,GAC/B7d,EAAM+H,MAAM,IAAI2Z,GAAW9qB,KAAKiC,QAAS0T,KAI3C7U,OAAAC,eAAIyoC,EAAA/nC,UAAA,mBAAJ,WACC,OAAOzB,KAAKwoC,kBAEb,SAAgBvhB,GAAhB,IAAAxjB,EAAAzD,KACCA,KAAKwoC,aAAevhB,EACpBjnB,KAAKk9B,SAAS,SAAA9zB,GACbA,EAAMuqB,aAAelwB,EAAK+kC,gDAQ5BgB,EAAA/nC,UAAA2nB,KAAA,SAAKxe,GACJ,IAAM+K,EAAQ3V,KAAKkW,QAAQtL,GAM3B,OALA5K,KAAKgpB,OAAO1d,OAAOqK,GACnB3V,KAAKgpB,OAAOtC,eAAe,UAAW/Q,GACtC3V,KAAKk9B,SAAS,SAAA9zB,GACbA,EAAMggB,KAAKxe,KAEL5K,MAgBRwpC,EAAA/nC,UAAAooC,GAAA,SAAGj/B,EAAYxJ,GAMd,IALA,IAAM0oC,EAAc,IAAI/uB,GAAmB/a,KAAKiC,QAAS2I,GAAMsL,UACzDgb,EAAW,IAAIpG,GAAW9qB,KAAKiC,QAAS,GAAGgU,YAE3CmnB,EAAWp9B,KAAKuJ,QAAQ6U,SAC1B2rB,EAAS3M,EAAS4M,QACdD,EAAOE,MAAM,CACpB,IAAMn+B,EAAQi+B,EAAO3oC,MACrB,GAAI6C,KAAKuT,IAAIsyB,EAAch+B,EAAM6nB,aAAezC,EAI/C,OAHI3sB,EAAUnD,KACb0K,EAAM1K,MAAQA,GAER0K,EAERi+B,EAAS3M,EAAS4M,OAGnB,OAAIzlC,EAAUnD,IACbpB,KAAK2K,IAAIC,EAAMxJ,GAERpB,KAAK6pC,GAAGj/B,IAER,MAsBT4+B,EAAA/nC,UAAAkJ,IAAA,SAAIC,EAAqBxJ,GAEpBwJ,aAAgB9J,QAAUsE,QAAQC,IAAIuF,EAAM,UAE/CA,GADAxJ,EAAQwJ,GACKA,MAEd,IACIxB,EADEuM,EAAQ3V,KAAKkW,QAAQtL,GA6B3B,OA3BIxJ,aAAiBknC,IACpBl/B,EAAQhI,GACFiB,SAAWrC,KAAKipC,MAAM3lC,KAAKtD,MAEjCoJ,EAAQ,IAAIk/B,IACXjmC,SAAWrC,KAAKipC,MAAM3lC,KAAKtD,MAC3BiC,QAASjC,KAAKiC,QACdb,MAAKA,IAIPgI,EAAMuqB,YAAche,EAGpBvM,EAAMgI,KACLw3B,SAAW5oC,KAAK4oC,SAChB13B,KAAOlR,KAAKkR,KACZ4f,QAAU9wB,KAAK8wB,QACfC,UAAY/wB,KAAK+wB,UACjBuE,aAAet1B,KAAKs1B,aACpBoT,YAAc1oC,KAAK0oC,cAGpB1oC,KAAKuJ,QAAQoB,IAAIvB,GAGjBpJ,KAAKkqC,cAAc9gC,GACZpJ,MAMAwpC,EAAA/nC,UAAAyoC,cAAR,SAAsB9gC,GAAtB,IAAA3F,EAAAzD,KACCA,KAAKgpB,OAAOjhB,QAAQ,SAAC2rB,GACK,YAArBA,EAAW5lB,MACdrK,EAAKmmC,WAAWxgC,EAAOsqB,EAAW9oB,KAAM8oB,EAAWzM,QAGnD7d,EAAMggB,KAAK,IAAI0B,GAAWrnB,EAAKxB,QAASyxB,EAAW9oB,UAgBtD4+B,EAAA/nC,UAAAwJ,OAAA,SAAOL,EAAqBxJ,GAA5B,IAAAqC,EAAAzD,KAeC,OAbI0E,EAASkG,IAASA,EAAKlJ,eAAe,UAEzCkJ,GADAxJ,EAAQwJ,GACKA,MAEdA,EAAO5K,KAAKkW,QAAQtL,GACpB5K,KAAKuJ,QAAQxB,QAAQ,SAAAqB,GAChBA,EAAMuqB,cAAgB/oB,IACrBvG,EAAQjD,IAAWmD,EAAUnD,IAAUgI,EAAMhI,QAAUA,KAC1DqC,EAAK8F,QAAQk2B,OAAOr2B,GACpBA,EAAMhF,aAIFpE,MAMRwpC,EAAA/nC,UAAAqkB,MAAA,WAGC,OAFA9lB,KAAKk9B,SAAS,SAAA9zB,GAAS,OAAAA,EAAMhF,YAC7BpE,KAAKuJ,QAAQuc,QACN9lB,MAORwpC,EAAA/nC,UAAA6J,OAAA,SAAOC,GAGN,OAFAvL,KAAKk9B,SAAS,SAAA9zB,GAAS,OAAAA,EAAMkC,OAAOC,KACpCvL,KAAKgpB,OAAO1d,OAAOtL,KAAKkW,QAAQ3K,IACzBvL,MAMAwpC,EAAA/nC,UAAAy7B,SAAR,SAAiB76B,GAUhB,OATIrC,KAAKuJ,SACRvJ,KAAKuJ,QAAQxB,QAAQ,SAAAqB,GAChBA,aAAiBogC,EACpBpgC,EAAM8zB,SAAS76B,GAEfA,EAAS+G,KAILpJ,MAQAwpC,EAAA/nC,UAAA0oC,QAAR,SAAgBC,EAAchpC,GAC7BpB,KAAKk9B,SAAS,SAAA9zB,GACbA,EAAMghC,GAAQhpC,KAQNooC,EAAA/nC,UAAAwnC,MAAV,SAAgBr+B,EAAexJ,GACzBpB,KAAKwuB,MACTxuB,KAAKqC,SAASuI,EAAMxJ,IASdooC,EAAA/nC,UAAA4oC,mBAAR,SAA2BjhC,GACtBpJ,KAAK0qB,QAAUthB,EAAMuqB,YAAc3zB,KAAKgwB,YAAc5mB,EAAMuqB,aAAe3zB,KAAKiwB,UACnF7mB,EAAMkC,OAAO,GACa,YAAhBlC,EAAM0E,OAEhB9N,KAAKkqC,cAAc9gC,IAOrBtI,OAAAC,eAAIyoC,EAAA/nC,UAAA,mBAAJ,WACC,OAAOzB,KAAKyoC,kBAEb,SAAgBS,GACflpC,KAAKyoC,aAAeS,EACpBlpC,KAAKmqC,QAAQ,cAAejB,oCAU7BpoC,OAAAC,eAAIyoC,EAAA/nC,UAAA,gBAAJ,WACC,OAAOzB,KAAK2oC,eAEb,SAAaQ,GACZnpC,KAAK2oC,UAAYQ,EACjBnpC,KAAKmqC,QAAQ,WAAYhB,oCAgB1BroC,OAAAC,eAAIyoC,EAAA/nC,UAAA,YAAJ,WACC,OAAOzB,KAAK0qB,WAEb,SAASxZ,GAAT,IAAAzN,EAAAzD,KACCA,KAAK0qB,MAAQxZ,EACblR,KAAKk9B,SAAS,SAAA9zB,GACbA,EAAM2nB,UAAYttB,EAAKstB,UACvB3nB,EAAM0nB,QAAUrtB,EAAKqtB,QACrB1nB,EAAM8H,KAAOA,EACbzN,EAAK4mC,mBAAmBjhC,sCAW1BtI,OAAAC,eAAIyoC,EAAA/nC,UAAA,eAAJ,WACC,OAAO,IAAIqpB,GAAW9qB,KAAKiC,QAASjC,KAAKiwB,UAAUha,iBAEpD,SAAY6a,GAAZ,IAAArtB,EAAAzD,KACCA,KAAKiwB,SAAWjwB,KAAKkW,QAAQ4a,GACzB9wB,KAAK0qB,OACR1qB,KAAKk9B,SAAS,SAAA9zB,GACbA,EAAM0nB,QAAUA,EAChBrtB,EAAK4mC,mBAAmBjhC,sCAS3BtI,OAAAC,eAAIyoC,EAAA/nC,UAAA,iBAAJ,WACC,OAAO,IAAIqpB,GAAW9qB,KAAKiC,QAASjC,KAAKgwB,YAAY/Z,iBAEtD,SAAc8a,GAAd,IAAAttB,EAAAzD,KACCA,KAAKgwB,WAAahwB,KAAKkW,QAAQ6a,GAC3B/wB,KAAK0qB,OACR1qB,KAAKk9B,SAAS,SAAA9zB,GACbA,EAAM2nB,UAAYttB,EAAKstB,UACvBttB,EAAK4mC,mBAAmBjhC,sCAQ3BtI,OAAAC,eAAIyoC,EAAA/nC,UAAA,oBAAJ,WACC,OAAOzB,KAAK41B,mBAEb,SAAiBG,GAChB/1B,KAAK41B,cAAgBG,EACrB/1B,KAAKmqC,QAAQ,eAAgBpU,oCAM9Bj1B,OAAAC,eAAIyoC,EAAA/nC,UAAA,cAAJ,WACC,OAAOzB,KAAKuJ,QAAQm2B,sCAGrB8J,EAAA/nC,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK8lB,QACE9lB,MAETwpC,EArbA,CAA2ClB,gVCH3CgC,GAAA,SAAAthC,GAiCC,SAAAuhC,IAAA,IAAA9mC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqByjC,EAAS9hC,cAAepC,WAAY,WAAY,SAAU,kBAAgBrG,KAjCtGyD,EAAA9C,KAAO,WAUC8C,EAAA+mC,MAAc,IAAIjB,IACzBlnC,SAAUoB,EAAKgnC,aAAannC,KAAKG,GACjCxB,QAASwB,EAAKxB,UAMPwB,EAAA8F,WAKA9F,EAAAinC,gBAWP,IAAMngC,EAAUzD,EAAqByjC,EAAS9hC,cAAepC,WAAY,WAAY,SAAU,uBAE/F5C,EAAKknC,aAAelnC,EAAKyS,QAAQ3L,EAAQyM,aAEzCvT,EAAKgmC,OAASl/B,EAAQk/B,OAGtBhmC,EAAKyN,KAAO3G,EAAQ2G,KACpBzN,EAAKstB,UAAYxmB,EAAQwmB,UACzBttB,EAAKqtB,QAAUvmB,EAAQumB,QACvBrtB,EAAK6xB,aAAe/qB,EAAQ+qB,aAC5B7xB,EAAKilC,YAAcn+B,EAAQm+B,YAC3BjlC,EAAKmlC,SAAWr+B,EAAQq+B,SACxBnlC,EAAK+qB,KAAOjkB,EAAQikB,KACpB/qB,EAAK6xB,aAAe/qB,EAAQ+qB,eAgO9B,OAlR+CsV,GAAAL,EAAAvhC,GAqDvCuhC,EAAA9hC,YAAP,WACC,OAAO3H,OAAO2F,OAAQmB,EAAe0gC,GAAU7/B,eAAgB,WAC9DghC,UACAv4B,MAAM,EACN4f,QAAU,EACVC,UAAW,EACX/Z,YAAa,QAOPuzB,EAAA9oC,UAAAgpC,aAAR,SAAqB7/B,EAAexJ,GACrB,OAAVA,GACHpB,KAAKqC,SAASuI,EAAMxJ,IAOtBN,OAAAC,eAAIwpC,EAAA9oC,UAAA,cAAJ,WACC,OAAOzB,KAAKuJ,aAEb,SAAW3H,GACV5B,KAAK8lB,QACL9lB,KAAK0qC,aAAe9oC,EACpB5B,KAAKuJ,QAAUvJ,KAAK6qC,gBAAgB7qC,KAAK0qC,cACzC1qC,KAAK8qC,kDAQNP,EAAA9oC,UAAA0P,MAAA,SAAMvG,EAAsBqc,GAE3B,OADAjnB,KAAKwqC,MAAMr5B,MAAMvG,EAAMqc,EAASjnB,KAAK+qC,WAAW9jB,GAAUA,GACnDjnB,MAORuqC,EAAA9oC,UAAA2nB,KAAA,SAAKxe,GAEJ,OADA5K,KAAKwqC,MAAMphB,KAAKxe,GACT5K,MAQRc,OAAAC,eAAIwpC,EAAA9oC,UAAA,mBAAJ,WACC,OAAO,IAAIqpB,GAAW9qB,KAAKiC,QAASjC,KAAK2qC,cAAc10B,6CAMhDs0B,EAAA9oC,UAAAopC,gBAAR,SAAwB7nB,GAAxB,IAAAvf,EAAAzD,KACC,OAAO,IAAIgrC,MAAMhoB,GAChB9hB,IAAK,SAACgF,EAAe1E,GAEpB,OAAO0E,EAAO1E,IAEf4P,IAAK,SAAClL,EAAe1E,EAAuBJ,GAC3C,GAAI4D,EAASxD,IAAaqb,SAAS1I,SAAS3S,EAAU,KAAM,CAC7C2S,SAAS3S,EAAU,IAC7BsD,EAAQ1D,GACX8E,EAAO1E,GAAYiC,EAAKonC,gBAAgBzpC,GAExC8E,EAAO1E,GAAYJ,OAGpB8E,EAAO1E,GAAYJ,EAIpB,OAFAqC,EAAKqnC,kBAEE,MAQFP,EAAA9oC,UAAAqpC,eAAR,WACC9qC,KAAKwqC,MAAM1kB,QACX9lB,KAAKirC,oBAAoBjrC,KAAK0qC,aAAc1qC,KAAK2qC,aAAc3qC,KAAK2zB,aAEpE3zB,KAAK8wB,QAAU9wB,KAAK8wB,SAMbyZ,EAAA9oC,UAAAwpC,oBAAR,SAA4BC,EAAiBl0B,EAAoB2c,GAAjE,IAAAlwB,EAAAzD,KACCkrC,EAASnjC,QAAQ,SAAC3G,EAAO0J,GACxB,IAAMqgC,EAAcrgC,EAAQ,EAAgB6oB,EAC5C,GAAI7uB,EAAQ1D,GACXqC,EAAKwnC,oBAAoB7pC,EAAO4V,EAAc5V,EAAMkF,OAAQ6kC,OACtD,CACN,IAAM7+B,EAAY,IAAIwe,GAAWrnB,EAAKxB,QAASkpC,EAAa,KAAKl1B,YACjExS,EAAK+mC,MAAM7/B,IAAI2B,EAAWlL,OAWrBmpC,EAAA9oC,UAAAspC,WAAR,SAAmBjgC,GAClB,OAAO,IAAIggB,GAAW9qB,KAAKiC,QAAS6I,EAAS9K,KAAiB,aAAIA,KAAK2zB,aAAa1d,aAMrFs0B,EAAA9oC,UAAAqkB,MAAA,WAEC,OADA9lB,KAAKwqC,MAAM1kB,QACJ9lB,MAGRuqC,EAAA9oC,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKwqC,MAAMpmC,UACJpE,MAORc,OAAAC,eAAIwpC,EAAA9oC,UAAA,YAAJ,WACC,OAAOzB,KAAKwqC,MAAMt5B,UAEnB,SAAS7Q,GACJL,KAAKwqC,QACRxqC,KAAKwqC,MAAMt5B,KAAO7Q,oCAOpBS,OAAAC,eAAIwpC,EAAA9oC,UAAA,iBAAJ,WACC,OAAOzB,KAAKgwB,gBAEb,SAAcllB,GACb9K,KAAKgwB,WAAallB,EACd9K,KAAKwqC,QACRxqC,KAAKwqC,MAAMzZ,UAAY/wB,KAAK+qC,WAAWjgC,qCAOzChK,OAAAC,eAAIwpC,EAAA9oC,UAAA,eAAJ,WACC,OAAOzB,KAAKiwB,cAEb,SAAYnlB,GACX9K,KAAKiwB,SAAWnlB,EACZ9K,KAAKwqC,QAEPxqC,KAAKwqC,MAAM1Z,QADE,IAAVhmB,EACkB9K,KAAK+qC,WAAW/qC,KAAK0qC,aAAapkC,QAElCtG,KAAK+qC,WAAWjgC,qCAKxChK,OAAAC,eAAIwpC,EAAA9oC,UAAA,mBAAJ,WACC,OAAOzB,KAAKwqC,MAAM7W,iBAEnB,SAAgBxiB,GACXnR,KAAKwqC,QACRxqC,KAAKwqC,MAAM7W,YAAcxiB,oCAI3BrQ,OAAAC,eAAIwpC,EAAA9oC,UAAA,oBAAJ,WACC,OAAOzB,KAAKwqC,MAAMlV,kBAEnB,SAAiBS,GACZ/1B,KAAKwqC,QACRxqC,KAAKwqC,MAAMlV,aAAeS,oCAI5Bj1B,OAAAC,eAAIwpC,EAAA9oC,UAAA,mBAAJ,WACC,OAAOzB,KAAKwqC,MAAM9B,iBAEnB,SAAgBQ,GACXlpC,KAAKwqC,QACRxqC,KAAKwqC,MAAM9B,YAAcQ,oCAI3BpoC,OAAAC,eAAIwpC,EAAA9oC,UAAA,gBAAJ,WACC,OAAOzB,KAAKwqC,MAAM5B,cAEnB,SAAaO,GACRnpC,KAAKwqC,QACRxqC,KAAKwqC,MAAM5B,SAAWO,oCAOxBroC,OAAAC,eAAIwpC,EAAA9oC,UAAA,cAAJ,WACC,OAAOzB,KAAKwqC,MAAMlkC,wCAEpBikC,EAlRA,CAA+CjC,gVCO/C8C,GAAA,SAAApiC,GA0DC,SAAAqiC,IAAA,IAAA5nC,EACCuF,EAAAzI,KAAAP,KAAMc,OAAO2F,OAAOK,EAAqBukC,EAAU5iC,cAAepC,WAAY,YAAUrG,KAzDhFyD,EAAA9C,KAAO,YAKR8C,EAAA6nC,QAA4B7nC,EAAKxB,QAAQ0N,qBAKzClM,EAAA8nC,OAA8B9nC,EAAKxB,QAAQ0M,sBAAsB,GAMjElL,EAAA+nC,KAAoB,IAAIhL,IAAcv+B,QAAUwB,EAAKxB,UAK7DwB,EAAA6W,EAAU,IAAI6G,IACblf,QAAUwB,EAAKxB,QACfwQ,KAAM,IAMPhP,EAAAkX,EAAU,IAAIwG,IACblf,QAAUwB,EAAKxB,QACfwQ,KAAM,IAMPhP,EAAA4b,OAAe,IAAI8B,IAAOlf,QAAUwB,EAAKxB,UAc/BwB,EAAA0b,mBAAqB1b,EAAK6W,EAAG7W,EAAKkX,GAO3C,IAAMpQ,EAAUzD,EAAqBukC,EAAU5iC,cAAepC,WAAY,gBAE1E5C,EAAKgoC,KAAO,IAAI3U,IACf70B,QAASwB,EAAKxB,QACdqR,MAAO,cACPlS,MAAOmJ,EAAQkhC,OAEhB1qB,GAAStd,EAAM,QAEfA,EAAKxB,QAAQyO,YAAY,GAAGmP,QAAQpc,EAAK6nC,SACzC7nC,EAAK6nC,QAAQzrB,QAAQpc,EAAK8nC,QAI1B9nC,EAAK6nC,QAAQt6B,aAAe,EAC5BvN,EAAK6nC,QAAQr6B,iBAAmB,WAChC4O,GAAQpc,EAAK8nC,OAAQ9nC,EAAK6W,EAAE7H,KAAM,GAClCoN,GAAQpc,EAAK8nC,OAAQ9nC,EAAKkX,EAAElI,KAAM,GAElChP,EAAKgoC,KAAKtrB,MAAM1c,EAAK+nC,KAAM/nC,EAAK6nC,QAAQI,KAExCjoC,EAAK6W,EAAEuF,QAAQpc,EAAK4b,QACpB5b,EAAKkX,EAAEkF,QAAQpc,EAAK4b,UAoBtB,OAtG+BssB,GAAAN,EAAAriC,GAqFvBqiC,EAAA5iC,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCgjC,KAAM,MAIRJ,EAAA5pC,UAAA2C,QAAA,WASC,OARA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKsa,EAAElW,UACPpE,KAAK2a,EAAEvW,UACPpE,KAAKqf,OAAOjb,UACZpE,KAAKyrC,KAAKrnC,UACVpE,KAAKwrC,KAAKpnC,UACVpE,KAAKsrC,QAAQh6B,aACbtR,KAAKurC,OAAOj6B,aACLtR,MAETqrC,EAtGA,CAA+BpsB,gVCzB/B2sB,GAAA,SAAA5iC,GAqCC,SAAA6iC,EAAYthC,GAAZ,IAAA9G,EACCuF,EAAAzI,KAAAP,KAAMuK,IAAQvK,YAnCNyD,EAAA9C,KAAe,SAKhB8C,EAAAqoC,QAAqB,IAAIV,IAAYnpC,QAAUwB,EAAKxB,UAO5DwB,EAAAsoC,IAA2BtoC,EAAKqoC,QAAQL,KAK9BhoC,EAAAuoC,WAAmB,IAAI7qB,IAAOlf,QAAUwB,EAAKxB,UAK7CwB,EAAAwoC,aAAqB,IAAI9qB,IAAOlf,QAAUwB,EAAKxB,UAKzDwB,EAAAsY,MAAc,IAAIoF,IAAOlf,QAAUwB,EAAKxB,UAKxCwB,EAAA4b,OAAS5b,EAAKqoC,QAMbroC,EAAKsY,MAAMuE,IAAI7c,EAAKqoC,QAAQxxB,EAAG7W,EAAKuoC,YACpCvoC,EAAKwoC,aAAapsB,QAAQpc,EAAKqoC,QAAQnxB,GACvClX,EAAKsoC,IAAIzmC,eAAeiF,EAAQwhC,IAAK,GACrCtoC,EAAK0b,mBAAqB1b,EAAKwoC,aAAcxoC,EAAKuoC,YAClDjrB,GAAStd,EAAM,SA2BjB,OAvEQyoC,GAAAL,EAAA7iC,GA+CA6iC,EAAApjC,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCsjC,IAAM,KAOEF,EAAApqC,UAAA0qC,cAAV,SAAwBC,GAIvB,OAFApsC,KAAKmf,kBAAkB3V,KAAK4iC,GAC5BpsC,KAAKgsC,WAAW7rB,MAAMisB,EAAQpsC,KAAKisC,cAC5BjsC,MAGR6rC,EAAApqC,UAAA2C,QAAA,WAMC,OALA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK8rC,QAAQ1nC,UACbpE,KAAKgsC,WAAW5nC,UAChBpE,KAAKisC,aAAa7nC,UAClBpE,KAAK+rC,IAAI3nC,UACFpE,MAET6rC,EAxEA,CACQ5sB,gVCIRotB,GAAA,SAAArjC,GAcC,SAAAsjC,EAAY/hC,GAAZ,IAAA9G,EAECuF,EAAAzI,KAAAP,KAAMuK,IAAQvK,YAdfyD,EAAA9C,KAAO,iBAgBN8C,EAAK8oC,cAAgB,IAAIprB,IACxBlf,QAASwB,EAAKxB,QACdwQ,KAAMlI,EAAQ8E,SACdiE,MAAO,gBAGR7P,EAAK4L,SAAW5L,EAAK8oC,cAAc95B,KACnCsO,GAAStd,EAAM,YAGfA,EAAKwoC,aAAa9rB,MAAM1c,EAAK8oC,cAAe9oC,EAAKuoC,cAenD,OA3CoFQ,GAAAF,EAAAtjC,GA+B5EsjC,EAAA7jC,YAAP,WACC,OAAO3H,OAAO2F,OAAOmlC,GAAOnjC,eAC3B4G,SAAU,QAIZi9B,EAAA7qC,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKusC,cAAcnoC,UACnBpE,KAAKqP,SAASjL,UACPpE,MAETssC,EA3CA,CAAoFV,gVCCpFa,GAAA,SAAAzjC,GAgBC,SAAA0jC,IAAA,IAAAjpC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB4lC,EAAcjkC,cAAepC,WAAY,YAAa,eAAarG,KAhB/FyD,EAAA9C,KAAO,gBAiBN,IAAM4J,EAAUzD,EAAqB4lC,EAAcjkC,cAAepC,WAAY,YAAa,oBAE3F5C,EAAK2iB,WAAa,IAAIL,IACrB9jB,QAASwB,EAAKxB,QACdkkB,UAAW5b,EAAQ4b,UACnBD,SAAU3b,EAAQ2b,WAEnBziB,EAAK0iB,UAAY1iB,EAAK2iB,WAAWD,UAGjC1iB,EAAK0oC,cAAc1oC,EAAK2iB,YACxBrF,GAAStd,EAAM,eAgBjB,OA9CmCkpC,GAAAD,EAAA1jC,GAiC3B0jC,EAAAjkC,YAAP,WACC,OAAO3H,OAAO2F,OAAO4lC,GAAe5jC,eACnC0d,UAAW,IACXD,SAAU,KAIZwmB,EAAAjrC,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKomB,WAAWhiB,UAChBpE,KAAKmmB,UAAU/hB,UACRpE,MAET0sC,EA9CA,CAAmCL,8nDCFnCO,GAAA,SAAA5jC,GAgBC,SAAA6jC,IAAA,IAAAppC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB+lC,EAAUpkC,cAAepC,WAAY,MAAO,aAAWrG,KAhBnFyD,EAAA9C,KAAO,YAKC8C,EAAAqpC,WAA4BrpC,EAAKxB,QAAQ6M,kBAYhD,IAAMvE,EAAUzD,EAAqB+lC,EAAUpkC,cAAepC,WAAY,MAAO,kBAEjF5C,EAAK8e,QAAU,IAAIR,GAAgBxX,EAAQ4X,IAAK,SAAAvR,GAC/CnN,EAAKmN,OAASA,EACdrG,EAAQ0X,WAILxe,EAAK8e,QAAQC,SAChB/e,EAAKmN,OAASnN,EAAK8e,SAIpB9e,EAAKspC,UAAYxiC,EAAQwiC,UAGzBtpC,EAAK0oC,cAAc1oC,EAAKqpC,cAiE1B,OApG+BE,GAAAH,EAAA7jC,GAsCvB6jC,EAAApkC,YAAP,WACC,OAAO3H,OAAO2F,OAAOmlC,GAAOnjC,eAC3BskC,WAAY,EACZ9qB,OAASf,MAUL2rB,EAAAprC,UAAAqE,KAAN,SAAWqc,mGACI,OAAdzb,EAAA1G,MAAc,EAAMA,KAAKuiB,QAAQzc,KAAKqc,kBAAtCzb,EAAKkK,OAASjK,EAAA8J,iBAMf3P,OAAAC,eAAI8rC,EAAAprC,UAAA,cAAJ,WACC,OAAIzB,KAAKuiB,QAAQjc,OACTtG,KAAKuiB,QAEL,UAGT,SAAW3R,GACNA,GACH5Q,KAAKuiB,QAAQnR,IAAIR,GAGd5Q,KAAK8sC,WAAWl8B,SAEnB5Q,KAAKgsC,WAAW16B,aAChBtR,KAAK8sC,WAAWx7B,aAEhBtR,KAAK8sC,WAAa9sC,KAAKiC,QAAQ6M,kBAC/B9O,KAAKmsC,cAAcnsC,KAAK8sC,aAEzB,IAAMG,EAAOjtC,KAAKuiB,QAAQrhB,MAC1BlB,KAAK8sC,WAAWl8B,OAASq8B,GAAc,sCAQxCnsC,OAAAC,eAAI8rC,EAAAprC,UAAA,iBAAJ,WACC,OAAOzB,KAAK8sC,WAAWC,eAExB,SAAcG,GACbltC,KAAK8sC,WAAWC,UAAYG,mCAG7BL,EAAAprC,UAAA2C,QAAA,WAIC,OAHA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKuiB,QAAQne,UACbpE,KAAK8sC,WAAWx7B,aACTtR,MAET6sC,EApGA,CAA+BjB,gVCD/BuB,GAAA,SAAAnkC,GAsBC,SAAAokC,IAAA,IAAA3pC,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqBsmC,EAAM3kC,cAAepC,WAAY,eAAarG,KArBjEyD,EAAA9C,KAAO,QAsBf,IAAM4J,EAAUzD,EAAqBsmC,EAAM3kC,cAAepC,WAAY,oBAEtE5C,EAAK4pC,QAAU5pC,EAAK4b,OAAS5b,EAAKsY,MAAQtY,EAAKxB,QAAQwM,oBAAoBlE,EAAQkX,YAcrF,OAxC2B6rB,GAAAF,EAAApkC,GA6BnBokC,EAAA3kC,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCgZ,SAAU,KAIZ2rB,EAAA3rC,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKqtC,QAAQ/7B,aACNtR,MAETotC,EAxCA,CAA2BnuB,8nDCG3BsuB,GAAA,SAAAvkC,GAsBC,SAAAwkC,IAAA,IAAA/pC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB0mC,EAAO/kC,cAAepC,WAAY,YAAUrG,KAtB/DyD,EAAA9C,KAAO,SAKR8C,EAAAqpC,WAA4BrpC,EAAKxB,QAAQ6M,kBAkBhD,IAAMvE,EAAUzD,EAAqB0mC,EAAO/kC,cAAepC,WAAY,iBAEvE5C,EAAKk+B,MAAQp3B,EAAQo3B,MACrBl+B,EAAKgqC,SAAWljC,EAAQkjC,SAExBhqC,EAAK0oC,cAAc1oC,EAAKqpC,cAyC1B,OAvE4BY,GAAAF,EAAAxkC,GAiCpBwkC,EAAA/kC,YAAP,WACC,OAAO3H,OAAO2F,OAAOmlC,GAAOnjC,eAC3Bk5B,MAAQ,IACR8L,SAAW,OAQPD,EAAA/rC,UAAAksC,SAAN,kHACgB,SAAMxoB,GAAQ,SAACljB,GAE7B,IAAM2rC,EAAS,IAAIlY,IAAQzzB,QAAOA,IAC5B4rC,EAAS,IAAInY,IAAQzzB,QAAOA,IAC5B6rC,EAAQ,IAAIX,IAAQlrC,QAAOA,IACjC2rC,EAAO/tB,QAAQiuB,EAAO,EAAG,GACzBD,EAAOhuB,QAAQiuB,EAAO,EAAG,GACzB,IAAMC,EAAW,IAAI5sB,IAAOlf,QAAOA,IAAI+d,gBACvC8tB,EAAMjuB,QAAQkuB,GACdH,EAAOz8B,MAAM,GACb08B,EAAO18B,MAAM,GAEb48B,EAASt7B,KAAKnN,eAAe,EAAG,GAChCyoC,EAASt7B,KAAKnN,eAAe,EAAG7B,EAAKgqC,UAErCM,EAASt7B,KAAKuL,+BAA+B,EAAGva,EAAKgqC,SAAUhqC,EAAKk+B,QAClE3hC,KAAK2hC,MAAQ3hC,KAAKytC,kBAErB,OAlBM78B,EAASlK,EAAA+J,OAiBfzQ,KAAK8sC,WAAWl8B,OAASA,EAAO1P,OAChC,EAAOlB,YAGRwtC,EAAA/rC,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK8sC,WAAWx7B,aACTtR,MAETwtC,EAvEA,CAA4B5B,gVCP5BoC,GAAA,SAAAhlC,GAwBC,SAAAilC,IAAA,IAAAxqC,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqBmnC,EAASxlC,cAAepC,WAAY,OAAQ,WAASrG,KAvBxEyD,EAAA9C,KAAO,WAQR8C,EAAAyqC,UAAYzqC,EAAKxB,QAAQiM,iBAgBhC,IAAM3D,EAAUzD,EAAqBmnC,EAASxlC,cAAepC,WAAY,OAAQ,gBAEjF5C,EAAKi8B,KAAOn1B,EAAQm1B,KACpBj8B,EAAKnB,KAAOiI,EAAQjI,KACpBmB,EAAKsY,MAAQtY,EAAK4b,OAAS5b,EAAKyqC,YAgElC,OA9F8BC,GAAAF,EAAAjlC,GAiCtBilC,EAAAxlC,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCi3B,KAAM,KACN0O,UAAW,GACX9rC,KAAM,SAOR2rC,EAAAxsC,UAAA4sC,SAAA,WAMC,MALmB,QAAfruC,KAAKyC,MACRzC,KAAKkuC,UAAUI,sBAAsBtuC,KAAKuiB,SACjB,aAAfviB,KAAKyC,OACfzC,KAAKkuC,UAAUK,uBAAuBvuC,KAAKuiB,SAErCviB,KAAKuiB,SAMbzhB,OAAAC,eAAIktC,EAAAxsC,UAAA,YAAJ,WACC,OAAOzB,KAAKkuC,UAAUM,uBAEvB,SAAS9O,GACR1/B,KAAKkuC,UAAU3U,QAAiB,EAAPmG,EACzB1/B,KAAKuiB,QAAU,IAAIiB,aAAakc,oCAMjC5+B,OAAAC,eAAIktC,EAAAxsC,UAAA,YAAJ,WACC,OAAOzB,KAAKyC,WAEb,SAASH,GACRtC,KAAKiI,OAAgB,aAAT3F,GAAgC,QAATA,EAAgB,2BAA2BA,GAC9EtC,KAAKyC,MAAQH,mCAMdxB,OAAAC,eAAIktC,EAAAxsC,UAAA,iBAAJ,WACC,OAAOzB,KAAKkuC,UAAUO,2BAGvB,SAAc99B,GACb3Q,KAAKkuC,UAAUO,sBAAwB99B,mCAMxCs9B,EAAAxsC,UAAA2C,QAAA,WAGC,OAFA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAKkuC,UAAU58B,aACRtR,MAETiuC,EA9FA,CAA8BhvB,gVCa9ByvB,GAAA,SAAA1lC,GAoCC,SAAA2lC,IAAA,IAAAlrC,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqB6nC,EAAOlmC,cAAepC,WAAY,YAAa,OAAQ,cAAYrG,KAnCtFyD,EAAA9C,KAAO,SAEP8C,EAAAsY,MAAQ,IAAIoF,IAAOlf,QAASwB,EAAKxB,UACjCwB,EAAA4b,OAAS,IAAI8B,IAAOlf,QAASwB,EAAKxB,UACnCwB,EAAAmrC,YAgCP,IAAMrkC,EAAUzD,EAAqB6nC,EAAOlmC,cAAepC,WAAY,YAAa,OAAQ,mBAE5F5C,EAAKmrC,YAELnrC,EAAKorC,EAAI,IAAI/X,IACZ70B,QAASwB,EAAKxB,QACdqR,MAAO,WACPlS,MAAOmJ,EAAQskC,IAEhBprC,EAAKqP,UAAY,IAAIgkB,IACpB70B,QAASwB,EAAKxB,QACdqR,MAAO,YACPlS,MAAOmJ,EAAQuI,YAEhBrP,EAAK8zB,OAAS,IAAIT,IACjB70B,QAASwB,EAAKxB,QACdqR,MAAO,QACPlS,MAAOmJ,EAAQgtB,SAEhB9zB,EAAKgP,KAAO,IAAIqkB,IACf70B,QAASwB,EAAKxB,QACdqR,MAAO,WACPlS,MAAOmJ,EAAQkI,OAEhBhP,EAAKhB,MAAQ8H,EAAQjI,KACrBmB,EAAKqrC,QAAUvkC,EAAQukC,QACvB/tB,GAAStd,GAAO,SAAU,YAAa,OAAQ,QA6GjD,OA7K4BsrC,GAAAJ,EAAA3lC,GAmEpB2lC,EAAAlmC,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClComC,EAAG,EACHtX,OAAQ,EACRzkB,UAAW,IACXL,KAAM,EACNq8B,SAAU,GACVxsC,KAAM,aAQRxB,OAAAC,eAAI4tC,EAAAltC,UAAA,YAAJ,WACC,OAAOzB,KAAKyC,WAEb,SAASH,GAGRtC,KAAKiI,QAAgC,KAFF,UAAW,WAAY,WACzD,WAAY,YAAa,QAAS,UAAW,WAC5BT,QAAQlF,GAAc,wBAAwBA,GAChEtC,KAAKyC,MAAQH,EACbtC,KAAK4uC,SAAS7mC,QAAQ,SAAAinC,GAAU,OAAAA,EAAO1sC,KAAOA,qCAQ/CxB,OAAAC,eAAI4tC,EAAAltC,UAAA,eAAJ,WACC,OAAOzB,KAAKivC,cAEb,SAAYH,GACX,IAAMI,EAAazqC,EAASqqC,GAAWA,EAAU36B,SAAS26B,EAAS,IAC7DK,IAAkB,IAAK,IAAK,IAAK,IACnCC,EAAiBD,EAAc3nC,QAAQ0nC,GAE3ClvC,KAAKiI,QAA2B,IAApBmnC,EAAuB,uBAAuBD,EAAcp3B,KAAK,OAC7Eq3B,GAAkB,EAElBpvC,KAAKivC,SAAWC,EAChBlvC,KAAK+b,MAAMzK,aACXtR,KAAK4uC,SAAS7mC,QAAQ,SAAAinC,GAAU,OAAAA,EAAO19B,eAEvCtR,KAAK4uC,SAAW,IAAI7pC,MAAMqqC,GAC1B,IAAK,IAAIpS,EAAQ,EAAGA,EAAQoS,EAAgBpS,IAAS,CACpD,IAAMgS,EAAShvC,KAAKiC,QAAQoM,qBAC5B2gC,EAAO1sC,KAAOtC,KAAKyC,MACnBzC,KAAK8S,UAAU+M,QAAQmvB,EAAOl8B,WAC9B9S,KAAKu3B,OAAO1X,QAAQmvB,EAAOzX,QAC3Bv3B,KAAK6uC,EAAEhvB,QAAQmvB,EAAOH,GACtB7uC,KAAKyS,KAAKoN,QAAQmvB,EAAOv8B,MACzBzS,KAAK4uC,SAAS5R,GAASgS,EAExBhvC,KAAKmf,kBAAoBnf,KAAK4uC,SAC9BvuB,GAAazZ,WAAA,GAAC5G,KAAK+b,OAAKlV,OAAK7G,KAAKmf,mBAAmBnf,KAAKqf,2CAS3DsvB,EAAAltC,UAAA4tC,qBAAA,SAAqBtlC,GAArB,IAAAtG,EAAAzD,UAAqB,IAAA+J,MAAA,KAIpB,IAFA,IAAMulC,EAAgB,IAAI9rB,aAAazZ,GAAKsH,IAAI,WAAM,WAChDk+B,EAAa,IAAI/rB,aAAazZ,GAC3B3J,EAAI,EAAGA,EAAI2J,EAAK3J,IAAK,CAC7B,IACMmV,EAAc,MADPtR,KAAKsO,IAAInS,EAAI2J,EAAK,GACI,GACnCwlC,EAAWnvC,GAAKmV,EAEjB,IAAMi6B,EAAY,IAAIhsB,aAAazZ,GAC7B0lC,EAAc,IAAIjsB,aAAazZ,GAYrC,OAXA/J,KAAK4uC,SAAS7mC,QAAQ,WACrB,IAAM2nC,EAAcjsC,EAAKxB,QAAQoM,qBACjCqhC,EAAYptC,KAAOmB,EAAKhB,MACxBitC,EAAYb,EAAEztC,MAAQqC,EAAKorC,EAAEztC,MAC7BsuC,EAAY58B,UAAU1R,MAAQqC,EAAKqP,UAAU1R,MAC7CsuC,EAAYj9B,KAAKrR,MAAQqC,EAAKgP,KAAKrR,MACnCsuC,EAAYL,qBAAqBE,EAAYC,EAAWC,GACxDD,EAAUznC,QAAQ,SAAC4I,EAAKvQ,GACvBkvC,EAAclvC,IAAMuQ,MAGf2+B,GAMRX,EAAAltC,UAAA2C,QAAA,WAUC,OATA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK4uC,SAAS7mC,QAAQ,SAAAinC,GACrBA,EAAO19B,eAER2P,GAASjhB,MAAO,SAAU,YAAa,OAAQ,MAC/CA,KAAK8S,UAAU1O,UACfpE,KAAK6uC,EAAEzqC,UACPpE,KAAKu3B,OAAOnzB,UACZpE,KAAKyS,KAAKrO,UACHpE,MAET2uC,EA7KA,CAA4B1vB,gVCG5B0wB,GAAA,SAAA3mC,GAqEC,SAAA4mC,IAAA,IAAAnsC,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqB8oC,EAAennC,cAAepC,WAAY,eAAgB,oBAAkBrG,KApE/FyD,EAAA9C,KAAO,iBAKP8C,EAAAsY,MAAQ,IAAIoF,IAAOlf,QAASwB,EAAKxB,UAKjCwB,EAAA4b,YAASlV,EAKT1G,EAAAkqB,IAAM,IAAI+gB,IAClBzsC,QAASwB,EAAKxB,QACd6Q,UAAW,EACXxQ,KAAM,YAMCmB,EAAAosC,cAAgB,IAAInB,IAC3BzsC,QAASwB,EAAKxB,QACd6Q,UAAW,EACXxQ,KAAM,aAMEmB,EAAA2iC,IAAM,IAAIsI,IAClBzsC,QAASwB,EAAKxB,QACd6Q,UAAW,EACXxQ,KAAM,YAMEmB,EAAAsqB,KAAO,IAAI2gB,IACnBzsC,QAASwB,EAAKxB,QACd6Q,UAAW,EACXxQ,KAAM,aAaGmB,EAAA0b,mBAAqB1b,EAAKkqB,IAAKlqB,EAAK2iC,IAAK3iC,EAAKsqB,MAWvD,IAAMxjB,EAAUzD,EAAqB8oC,EAAennC,cAAepC,WAAY,eAAgB,yBAE/F5C,EAAKqsC,aAAe,IAAIhZ,IACvB70B,QAASwB,EAAKxB,QACdqR,MAAO,YACPlS,MAAOmJ,EAAQulC,eAGhBrsC,EAAKssC,cAAgB,IAAIjZ,IACxB70B,QAASwB,EAAKxB,QACdqR,MAAO,YACPlS,MAAOmJ,EAAQwlC,gBAGhBtsC,EAAKorC,EAAI,IAAI/X,IACZ70B,QAASwB,EAAKxB,QACdqR,MAAO,WACPlS,MAAOmJ,EAAQskC,IAGhBprC,EAAKsY,MAAMuE,IAAI7c,EAAKkqB,IAAKlqB,EAAKsqB,MAC9BtqB,EAAKsY,MAAMoE,MAAM1c,EAAKosC,cAAepsC,EAAK2iC,KAE1C3iC,EAAKqsC,aAAaxvB,IAAI7c,EAAKkqB,IAAI7a,UAAWrP,EAAKosC,cAAc/8B,WAC7DrP,EAAKssC,cAAczvB,IAAI7c,EAAK2iC,IAAItzB,UAAWrP,EAAKsqB,KAAKjb,WAErDrP,EAAKorC,EAAEhvB,QAAQpc,EAAKkqB,IAAIkhB,GACxBprC,EAAKorC,EAAEhvB,QAAQpc,EAAKosC,cAAchB,GAClCprC,EAAKorC,EAAEhvB,QAAQpc,EAAK2iC,IAAIyI,GACxBprC,EAAKorC,EAAEhvB,QAAQpc,EAAKsqB,KAAK8gB,GAEzB9tB,GAAStd,GAAO,OAAQ,MAAO,MAAO,gBAAiB,mBA2BzD,OAjIoCusC,GAAAJ,EAAA5mC,GAyG5B4mC,EAAAnnC,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClComC,EAAG,EACHkB,cAAe,KACfD,aAAc,OAOhBF,EAAAnuC,UAAA2C,QAAA,WAUC,OATA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbihB,GAASjhB,MAAO,OAAQ,MAAO,MAAO,gBAAiB,iBACvDA,KAAK2tB,IAAIvpB,UACTpE,KAAK6vC,cAAczrC,UACnBpE,KAAKomC,IAAIhiC,UACTpE,KAAK+tB,KAAK3pB,UACVpE,KAAK8vC,aAAa1rC,UAClBpE,KAAK+vC,cAAc3rC,UACnBpE,KAAK6uC,EAAEzqC,UACApE,MAGT4vC,EAjIA,CAAoC3wB,gVCjBpCgxB,GAAA,SAAAjnC,GAiEC,SAAAknC,IAAA,IAAAzsC,EACCuF,EAAAzI,KAAAP,KAAM8G,EAAqBopC,EAAIznC,cAAepC,WAAY,MAAO,MAAO,WAASrG,KAhEzEyD,EAAA9C,KAAO,MAUP8C,EAAA4b,OAAS,IAAI8B,IAAOlf,QAASwB,EAAKxB,UAiDjCwB,EAAA0b,qBAMT,IAAM5U,EAAUzD,EAAqBopC,EAAIznC,cAAepC,WAAY,MAAO,MAAO,gBAElF5C,EAAKsY,MAAQtY,EAAK0sC,gBAAkB,IAAIR,IACvC1tC,QAASwB,EAAKxB,QACd8tC,cAAexlC,EAAQwlC,cACvBD,aAAcvlC,EAAQulC,eAGvBrsC,EAAK2sC,SAAW,IAAIjvB,IACnBlf,QAASwB,EAAKxB,QACdwQ,KAAMlI,EAAQojB,IACdra,MAAO,aAGR7P,EAAK4sC,SAAW,IAAIlvB,IACnBlf,QAASwB,EAAKxB,QACdwQ,KAAMlI,EAAQ67B,IACd9yB,MAAO,aAGR7P,EAAK6sC,UAAY,IAAInvB,IACpBlf,QAASwB,EAAKxB,QACdwQ,KAAMlI,EAAQwjB,KACdza,MAAO,aAGR7P,EAAKkqB,IAAMlqB,EAAK2sC,SAAS39B,KACzBhP,EAAK2iC,IAAM3iC,EAAK4sC,SAAS59B,KACzBhP,EAAKsqB,KAAOtqB,EAAK6sC,UAAU79B,KAC3BhP,EAAKorC,EAAIprC,EAAK0sC,gBAAgBtB,EAC9BprC,EAAKqsC,aAAersC,EAAK0sC,gBAAgBL,aACzCrsC,EAAKssC,cAAgBtsC,EAAK0sC,gBAAgBJ,cAG1CtsC,EAAK0sC,gBAAgBxiB,IAAIxN,MAAM1c,EAAK2sC,SAAU3sC,EAAK4b,QACnD5b,EAAK0sC,gBAAgB/J,IAAIjmB,MAAM1c,EAAK4sC,SAAU5sC,EAAK4b,QACnD5b,EAAK0sC,gBAAgBpiB,KAAK5N,MAAM1c,EAAK6sC,UAAW7sC,EAAK4b,QAErD0B,GAAStd,GAAO,MAAO,MAAO,OAAQ,eAAgB,kBACtDA,EAAK0b,mBAAqB1b,EAAK0sC,mBAgCjC,OA1IyBI,GAAAL,EAAAlnC,GA6GjBknC,EAAAznC,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCslB,KAAO,EACPgiB,cAAgB,KAChBpiB,IAAM,EACNmiB,aAAe,IACf1J,IAAM,KAOR8J,EAAAzuC,UAAA2C,QAAA,WAaC,OAZA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbihB,GAASjhB,MAAO,MAAO,MAAO,OAAQ,eAAgB,kBACtDA,KAAKmwC,gBAAgB/rC,UACrBpE,KAAK8vC,aAAa1rC,UAClBpE,KAAK+vC,cAAc3rC,UACnBpE,KAAKowC,SAAShsC,UACdpE,KAAKqwC,SAASjsC,UACdpE,KAAKswC,UAAUlsC,UACfpE,KAAK2tB,IAAIvpB,UACTpE,KAAKomC,IAAIhiC,UACTpE,KAAK+tB,KAAK3pB,UACVpE,KAAK6uC,EAAEzqC,UACApE,MAGTkwC,EA1IA,CAAyBjxB,gVCSzBuxB,GAAA,SAAAxnC,GAuCC,SAAAynC,IAAA,IAAAhtC,EAECuF,EAAAzI,KAAAP,KAAM8G,EAAqB2pC,EAAWhoC,cAAepC,WAAY,WAAY,YAAUrG,KAvC/EyD,EAAA9C,KAAO,aAKR8C,EAAAitC,YAAsCjtC,EAAKxB,QAAQgN,2BAC3DxL,EAAAsY,MAAQtY,EAAKitC,YACbjtC,EAAA4b,OAAS5b,EAAKitC,YAiCb,IAAMnmC,EAAUzD,EAAqB2pC,EAAWhoC,cAAepC,WAAY,WAAY,iBAEvF5C,EAAKktC,UAAY,IAAIj1B,IACpBzZ,QAASwB,EAAKxB,QACdia,SAAU,EACVhR,MAAQzH,EAAKitC,YAAYC,UACzBr9B,MAAQ,WACRlS,MAAOmJ,EAAQomC,YAGhBltC,EAAKi+B,OAAS,IAAIhmB,IACjBzZ,QAASwB,EAAKxB,QACdiJ,MAAOzH,EAAKitC,YAAYhP,OACxBpuB,MAAO,OACPlS,MAAOmJ,EAAQm3B,SAGhBj+B,EAAKo+B,QAAU,IAAInmB,IAClBzZ,QAASwB,EAAKxB,QACdiJ,MAAOzH,EAAKitC,YAAY7O,QACxBvuB,MAAO,OACPlS,MAAOmJ,EAAQs3B,UAGhBp+B,EAAKmtC,KAAO,IAAIl1B,IACfzZ,QAASwB,EAAKxB,QACdia,SAAU,EACVhR,MAAQzH,EAAKitC,YAAYE,KACzBt9B,MAAQ,WACRlS,MAAOmJ,EAAQqmC,OAGhBntC,EAAK6uB,MAAQ,IAAI5W,IAChBzZ,QAASwB,EAAKxB,QACdia,SAAU,EACVhR,MAAQzH,EAAKitC,YAAYpe,MACzBhf,MAAQ,WACRlS,MAAOmJ,EAAQ+nB,QAIhBvR,GAAStd,GAAO,OAAQ,UAAW,SAAU,QAAS,gBA+BxD,OAlHgCotC,GAAAJ,EAAAznC,GAsFxBynC,EAAAhoC,YAAP,WACC,OAAO3H,OAAO2F,OAAOwY,GAAcxW,eAClCi5B,OAAS,KACTkP,KAAO,GACPte,MAAQ,GACRuP,QAAU,IACV8O,WAAa,MAQf7vC,OAAAC,eAAI0vC,EAAAhvC,UAAA,iBAAJ,WACC,OAAOzB,KAAK0wC,YAAYI,2CAGzBL,EAAAhvC,UAAA2C,QAAA,WAQC,OAPA4E,EAAAvH,UAAM2C,QAAO7D,KAAAP,MACbA,KAAK0wC,YAAYp/B,aACjBtR,KAAK0hC,OAAOt9B,UACZpE,KAAK6hC,QAAQz9B,UACbpE,KAAK2wC,UAAUvsC,UACfpE,KAAKsyB,MAAMluB,UACXpE,KAAK4wC,KAAKxsC,UACHpE,MAETywC,EAlHA,CAAgCxxB,ICX1B,SAAU8xB,KACf,OAAOh/B,IAAazB,04GAOd,IAAM0gC,GAAYj/B,IAAaF,UAMzBo/B,GAAcl/B,IAAaH"",""file"":""Tone.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""Tone\""] = factory();\n\telse\n\t\troot[\""Tone\""] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n"",""// import { AudioContext as stdAudioContext,\n// \tOfflineAudioContext as stdOfflineAudioContext } from \""standardized-audio-context\"";\n\n/**\n * Create a new AudioContext\n */\nfunction createAudioContext(): AudioContext {\n\t// return new stdAudioContext() as unknown as AudioContext;\n\treturn new AudioContext();\n}\n\n/**\n * Create a new OfflineAudioContext\n */\nexport function createOfflineAudioContext(channels: number, length: number, sampleRate: number): OfflineAudioContext {\n\treturn new OfflineAudioContext(channels, length, sampleRate);\n}\n\n/**\n * Either the online or offline audio context\n */\nexport type AnyAudioContext = AudioContext | OfflineAudioContext;\n\n/**\n * Interface for things that Tone.js adds to the window\n */\ninterface ToneWindow extends Window {\n\tTONE_AUDIO_CONTEXT?: AnyAudioContext;\n\tTONE_SILENCE_LOGGING?: boolean;\n\tTONE_DEBUG_CLASS?: string;\n}\n\n/**\n * A reference to the window object\n */\nexport const theWindow: ToneWindow | null = typeof self === \""object\"" ? self : null;\n\n/**\n * If the browser has a window object which has an AudioContext\n */\nexport const hasAudioContext = theWindow &&\n\t(theWindow.hasOwnProperty(\""AudioContext\"") || theWindow.hasOwnProperty(\""webkitAudioContext\""));\n\n/**\n * The global audio context which is getable and assignable through\n * getAudioContext and setAudioContext\n */\nlet globalContext: AnyAudioContext;\n\n// if it was created already, use that one\n// this enables multiple versions of Tone.js to run on the same page.\nif (theWindow && theWindow.TONE_AUDIO_CONTEXT) {\n\tglobalContext = theWindow.TONE_AUDIO_CONTEXT;\n}\n\n/**\n * Returns the default system-wide AudioContext\n */\nexport function getAudioContext(): AnyAudioContext {\n\tif (!globalContext && hasAudioContext) {\n\t\tsetAudioContext(createAudioContext());\n\t}\n\treturn globalContext;\n}\n\n/**\n * Set the default audio context\n */\nexport function setAudioContext(context: AnyAudioContext): void {\n\tglobalContext = context;\n\tif (theWindow) {\n\t\ttheWindow.TONE_AUDIO_CONTEXT = globalContext;\n\t}\n}\n"",""import { Seconds } from \""../type/Units\"";\n\nexport type TickerClockSource = \""worker\"" | \""timeout\"" | \""offline\"";\n\n/**\n * A class which provides a reliable callback using either\n * a Web Worker, or if that isn't supported, falls back to setTimeout.\n */\nexport class Ticker {\n\n\t/**\n\t * Either \""worker\"" or \""timeout\"" or \""offline\""\n\t */\n\tprivate _type: TickerClockSource;\n\n\t/**\n\t * The update interval of the worker\n\t */\n\tprivate _updateInterval: Seconds;\n\n\t/**\n\t * The callback to invoke at regular intervals\n\t */\n\tprivate _callback: () => void;\n\n\t/**\n\t * track the callback interval\n\t */\n\tprivate _timeout!: number;\n\n\t/**\n\t * private reference to the worker\n\t */\n\tprivate _worker!: Worker;\n\n\tconstructor(callback: () => void, type: TickerClockSource, updateInterval: Seconds) {\n\n\t\tthis._callback = callback;\n\t\tthis._type = type;\n\t\tthis._updateInterval = updateInterval;\n\n\t\t// create the clock source for the first time\n\t\tthis._createClock();\n\t}\n\n\t/**\n\t *  Generate a web worker\n\t */\n\tprivate _createWorker(): void {\n\n\t\tconst blob = new Blob([\n\t\t\t// the initial timeout time\n\t\t\t`var timeoutTime =  ${(this._updateInterval * 1000).toFixed(1)};\n\t\t\t// onmessage callback\n\t\t\tself.onmessage = function(msg){\n\t\t\t\ttimeoutTime = parseInt(msg.data);\n\t\t\t};\n\t\t\t// the tick function which posts a message\n\t\t\t// and schedules a new tick\n\t\t\tfunction tick(){\n\t\t\t\tsetTimeout(tick, timeoutTime);\n\t\t\t\tself.postMessage('tick');\n\t\t\t}\n\t\t\t// call tick initially\n\t\t\ttick();`,\n\t\t]);\n\t\tconst blobUrl = URL.createObjectURL(blob);\n\t\tconst worker = new Worker(blobUrl);\n\n\t\tworker.onmessage = this._callback.bind(this);\n\n\t\tthis._worker = worker;\n\t}\n\n\t/**\n\t * Create a timeout loop\n\t */\n\tprivate _createTimeout(): void {\n\t\tthis._timeout = setTimeout(()  => {\n\t\t\tthis._createTimeout();\n\t\t\tthis._callback();\n\t\t}, this._updateInterval * 1000);\n\t}\n\n\t/**\n\t * Create the clock source.\n\t */\n\tprivate _createClock(): void {\n\t\tif (this._type === \""worker\"") {\n\t\t\ttry {\n\t\t\t\tthis._createWorker();\n\t\t\t} catch (e) {\n\t\t\t\t// workers not supported, fallback to timeout\n\t\t\t\tthis._type = \""timeout\"";\n\t\t\t\tthis._createClock();\n\t\t\t}\n\t\t} else if (this._type === \""timeout\"") {\n\t\t\tthis._createTimeout();\n\t\t}\n\t}\n\n\t/**\n\t * Clean up the current clock source\n\t */\n\tprivate _disposeClock(): void {\n\t\tif (this._timeout) {\n\t\t\tclearTimeout(this._timeout);\n\t\t\tthis._timeout = 0;\n\t\t}\n\t\tif (this._worker) {\n\t\t\tthis._worker.terminate();\n\t\t\tthis._worker.onmessage = null;\n\t\t}\n\t}\n\n\t/**\n\t * The rate in seconds the ticker will update\n\t */\n\tget updateInterval(): Seconds {\n\t\treturn this._updateInterval;\n\t}\n\tset updateInterval(interval: Seconds) {\n\t\tthis._updateInterval = Math.max(interval, 128 / 44100);\n\t\tif (this._type === \""worker\"") {\n\t\t\tthis._worker.postMessage(Math.max(interval * 1000, 1));\n\t\t}\n\t}\n\n\t/**\n\t * The type of the ticker, either a worker or a timeout\n\t */\n\tget type(): TickerClockSource {\n\t\treturn this._type;\n\t}\n\tset type(type: TickerClockSource) {\n\t\tthis._disposeClock();\n\t\tthis._type = type;\n\t\tthis._createClock();\n\t}\n\n\t/**\n\t * Clean up\n\t */\n\tdispose(): void {\n\t\tthis._disposeClock();\n\t}\n}\n"",""import { Note } from \""../type/Units\"";\n\n/**\n *  Test if the arg is undefined\n */\nexport function isUndef(arg: any): arg is undefined {\n\treturn typeof arg === \""undefined\"";\n}\n\n/**\n *  Test if the arg is not undefined\n */\nexport function isDefined<T>(arg: T | undefined): arg is T {\n\treturn !isUndef(arg);\n}\n\n/**\n *  Test if the arg is a function\n */\nexport function isFunction(arg: any): arg is (a: any) => any {\n\treturn typeof arg === \""function\"";\n}\n\n/**\n *  Test if the argument is a number.\n */\nexport function isNumber(arg: any): arg is number {\n\treturn (typeof arg === \""number\"");\n}\n\n/**\n *  Test if the given argument is an object literal (i.e. `{}`);\n */\nexport function isObject(arg: any): arg is object {\n\treturn (Object.prototype.toString.call(arg) === \""[object Object]\"" && arg.constructor === Object);\n}\n\n/**\n *  Test if the argument is a boolean.\n */\nexport function isBoolean(arg: any): arg is boolean {\n\treturn (typeof arg === \""boolean\"");\n}\n\n/**\n *  Test if the argument is an Array\n */\nexport function isArray(arg: any): arg is any[] {\n\treturn (Array.isArray(arg));\n}\n\n/**\n *  Test if the argument is a string.\n */\nexport function isString(arg: any): arg is string {\n\treturn (typeof arg === \""string\"");\n}\n\n/**\n *  Test if the argument is in the form of a note in scientific pitch notation.\n *  e.g. \""C4\""\n */\nexport function isNote(arg: any): arg is Note {\n\treturn isString(arg) && /^([a-g]{1}(?:b|#|x|bb)?)(-?[0-9]+)/i.test(arg);\n}\n"",""import { isFunction } from \""./TypeCheck\"";\n\n/**\n * Test if the given value is an instanceof AudioParam\n */\nexport function isAudioParam(arg: any): arg is AudioParam {\n\treturn arg instanceof Object &&  Reflect.has(arg, \""value\"") &&\n\t\t!Reflect.has(arg, \""input\"") &&\n\t\tisFunction(arg.setValueAtTime);\n}\n\n/**\n * Test if the given value is an instanceof AudioNode\n */\nexport function isAudioNode(arg: any): arg is AudioNode {\n\treturn arg instanceof Object && Reflect.has(arg, \""context\"") &&\n\t\t!Reflect.has(arg, \""input\"") &&\n\t\t(isAudioContext(arg.context) || isOfflineAudioContext(arg.context));\n}\n\n/**\n * Test if the arg is instanceof an OfflineAudioContext\n */\nexport function isOfflineAudioContext(arg: any): arg is OfflineAudioContext {\n\treturn arg instanceof Object &&  Reflect.has(arg, \""destination\"") &&\n\t\tisFunction(arg.startRendering) && !Reflect.has(arg, \""rawContext\"");\n}\n\n/**\n * Test if the arg is an instanceof AudioContext\n */\nexport function isAudioContext(arg: any): arg is AudioContext {\n\treturn arg instanceof Object &&  Reflect.has(arg, \""destination\"") &&\n\t\tisFunction(arg.close) && isFunction(arg.resume) && !Reflect.has(arg, \""rawContext\"");\n}\n\n/**\n * Test if the arg is instanceof an AudioBuffer\n */\nexport function isAudioBuffer(arg: any): arg is AudioBuffer {\n\treturn arg instanceof Object &&  Reflect.has(arg, \""sampleRate\"")\n\t\t&& Reflect.has(arg, \""duration\"") && !isFunction(arg.load);\n}\n"",""import { isAudioBuffer, isAudioNode, isAudioParam } from \""./AdvancedTypeCheck\"";\nimport { isDefined, isObject, isUndef } from \""./TypeCheck\"";\n\ntype BaseToneOptions = import(\""../Tone\"").BaseToneOptions;\n\n/**\n * Some objects should not be merged\n */\nfunction noCopy(key: string, arg: any): boolean {\n\treturn key === \""value\"" || isAudioParam(arg) || isAudioNode(arg) || isAudioBuffer(arg);\n}\n\n/**\n * Recursively merge an object\n * @param target the object to merge into\n * @param sources the source objects to merge\n */\nexport function deepMerge<T>(target: T): T;\nexport function deepMerge<T, U>(target: T, source1: U): T & U;\nexport function deepMerge<T, U, V>(target: T, source1: U, source2: V): T & U & V;\nexport function deepMerge<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\nexport function deepMerge(target: any, ...sources: any[]): any {\n\tif (!sources.length) { return target; }\n\tconst source = sources.shift();\n\n\tif (isObject(target) && isObject(source)) {\n\t\tfor (const key in source) {\n\t\t\tif (noCopy(key, source[key])) {\n\t\t\t\ttarget[key] = source[key];\n\t\t\t} else if (isObject(source[key])) {\n\t\t\t\tif (!target[key]) { Object.assign(target, { [key]: {} }); }\n\t\t\t\tdeepMerge(target[key], source[key] as any);\n\t\t\t} else {\n\t\t\t\tObject.assign(target, { [key]: source[key] as any });\n\t\t\t}\n\t\t}\n\t}\n\t// @ts-ignore\n\treturn deepMerge(target, ...sources);\n}\n\n/**\n * Returns true if the two arrays have the same value for each of the elements\n */\nexport function deepEquals(arrayA: number[] | string[], arrayB: number[] | string[]): boolean {\n\treturn arrayA.length === arrayB.length && arrayA.every((element, index) => arrayB[index] === element);\n}\n\n/**\n * Convert an args array into an object.\n */\nexport function optionsFromArguments<T extends object>(\n\tdefaults: T,\n\targsArray: IArguments,\n\tkeys: string[] = [],\n\tobjKey?: string,\n): T {\n\tconst opts: any = {};\n\tconst args = Array.from(argsArray);\n\t// if the first argument is an object and has an object key\n\tif (isObject(args[0]) && objKey && !Reflect.has(args[0], objKey)) {\n\t\t// if it's not part of the defaults\n\t\tconst partOfDefaults = Object.keys(args[0]).some(key => Reflect.has(defaults, key));\n\t\tif (!partOfDefaults) {\n\t\t\t// merge that key\n\t\t\tdeepMerge(opts, {[objKey] : args[0]});\n\t\t\t// remove the obj key from the keys\n\t\t\tkeys.splice(keys.indexOf(objKey), 1);\n\t\t\t// shift the first argument off\n\t\t\targs.shift();\n\t\t}\n\t}\n\tif (args.length === 1 && isObject(args[0])) {\n\t\tdeepMerge(opts, args[0]);\n\t} else {\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tif (isDefined(args[i])) {\n\t\t\t\topts[keys[i]] = args[i];\n\t\t\t}\n\t\t}\n\t}\n\treturn deepMerge(defaults, opts);\n}\n\n/**\n * Return this instances default values by calling Constructor.getDefaults()\n */\nexport function getDefaultsFromInstance<T>(instance: T): BaseToneOptions {\n\ttype ToneClass = {\n\t\tconstructor: ToneClass;\n\t\tgetDefaults: () => BaseToneOptions;\n\t} & T;\n\n\treturn (instance as ToneClass).constructor.getDefaults();\n}\n\n/**\n * Returns the fallback if the given object is undefined.\n * Take an array of arguments and return a formatted options object.\n */\nexport function defaultArg<T>(given: T, fallback: T): T {\n\tif (isUndef(given)) {\n\t\treturn fallback;\n\t} else {\n\t\treturn given;\n\t}\n}\n\n/**\n * Remove all of the properties belonging to omit from obj.\n */\nexport function omitFromObject<T extends object, O extends string[]>(obj: T, omit: O): Omit<T, keyof O> {\n\tomit.forEach(prop => {\n\t\tif (Reflect.has(obj, prop)) {\n\t\t\tdelete obj[prop];\n\t\t}\n\t});\n\treturn obj;\n}\n"",""/**\n *  Assert that the statement is true, otherwise invoke an error with the given message.\n */\nexport function assert(statement: boolean, error: string): void {\n\tif (!statement) {\n\t\tthrow new Error(error);\n\t}\n}\n\nexport function log(...args: any[]): void {\n\t// tslint:disable-next-line: no-console\n\tconsole.log(...args);\n}\n"",""/**\n *  Tone.js\n *  @author Yotam Mann\n *  @license http://opensource.org/licenses/MIT MIT License\n *  @copyright 2014-2019 Yotam Mann\n */\nimport { version } from \""../version\"";\nimport { theWindow } from \""./context/AudioContext\"";\nimport { assert, log } from \""./util/Debug\"";\n\n///////////////////////////////////////////////////////////////////////////\n// \tTONE\n///////////////////////////////////////////////////////////////////////////\n\n// tslint:disable-next-line: no-empty-interface\nexport interface BaseToneOptions {}\n\n/**\n *  @class  Tone is the base class of all other classes.\n *  @constructor\n */\nexport abstract class Tone {\n\n\t/**\n\t * The version number semver\n\t */\n\tstatic version: string = version;\n\n\t/**\n\t * The name of the class\n\t */\n\tprotected abstract name: string;\n\n\t/**\n\t * Takes a partial options an returns the completed options by filling in the defaults\n\t */\n\tstatic getDefaults(): BaseToneOptions {\n\t\treturn {};\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tDEBUGGING\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Set this debug flag to log all events that happen in this class.\n\t */\n\tdebug: boolean = false;\n\n\t/**\n\t * Prints the outputs to the console log for debugging purposes.\n\t * Prints the contents only if either the object has a property\n\t * called `debug` set to true, or a variable called TONE_DEBUG_CLASS\n\t * is set to the name of the class.\n\t * @example\n\t * //prints all logs originating from Tone.OscillatorNode\n\t * Tone.global.TONE_DEBUG_CLASS = \""OscillatorNode\""\n\t */\n\tprotected log(...args: any[]): void {\n\t\t// if the object is either set to debug = true\n\t\t// or if there is a string on the Tone.global.with the class name\n\t\tif (this.debug || (theWindow && this.toString() === theWindow.TONE_DEBUG_CLASS)) {\n\t\t\targs.unshift(this.toString() + \"":\"");\n\t\t\tlog(...args);\n\t\t}\n\t}\n\n\t/**\n\t *  Assert that the statement is true, otherwise invoke the error.\n\t *  @param {Boolean} statement\n\t *  @param {String} error The message which is passed into an Error\n\t *  @private\n\t */\n\tprotected assert(statement: boolean, error: string): void {\n\t\tassert(statement, error);\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tDISPOSING\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Indicates if the instance was disposed\n\t */\n\tprivate _wasDisposed: boolean = false;\n\n\t/**\n\t *  disconnect and dispose.\n\t */\n\tdispose(): this {\n\t\tthis._wasDisposed = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Indicates if the instance was disposed. 'Disposing' an\n\t * instance means that all of the Web Audio nodes that were\n\t * created for the instance are disconnected and freed for garbage collection.\n\t */\n\tget disposed(): boolean {\n\t\treturn this._wasDisposed;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tDEFAULTS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  If the `given` parameter is undefined, use the `fallback`.\n\t *  If both `given` and `fallback` are object literals, it will\n\t *  return a deep copy which includes all of the parameters from both\n\t *  objects. If a parameter is undefined in given, it will return\n\t *  the fallback property.\n\t *  <br><br>\n\t *  WARNING: if object is self referential, it will go into an an\n\t *  infinite recursive loop.\n\t *  @memberOf Tone\n\t *  @param  {*} given\n\t *  @param  {*} fallback\n\t *  @return {*}\n\t */\n\t// static defaultArg(given, fallback) {\n\t\t// if (isObject(given) && isObject(fallback)) {\n\t\t// \tconst ret = {};\n\t\t// \t// make a deep copy of the given object\n\t\t// \tfor (const givenProp in given) {\n\t\t// \t\tret[givenProp] = Tone.defaultArg(fallback[givenProp], given[givenProp]);\n\t\t// \t}\n\t\t// \tfor (const fallbackProp in fallback) {\n\t\t// \t\tret[fallbackProp] = Tone.defaultArg(given[fallbackProp], fallback[fallbackProp]);\n\t\t// \t}\n\t\t// \treturn ret;\n\t\t// } else {\n\t\t// \treturn isUndef(given) ? fallback : given;\n\t\t// }\n\t// }\n\n\t// protected options(argsArray: IArguments, keys: string[]): object {\n\t// \tlet options: any = {};\n\t// \tconst args = Array.from(argsArray);\n\t// \tif (args[0] instanceof BaseAudioContext) {\n\t// \t\toptions.context = args.shift();\n\t// \t}\n\t// \tif (args.length === 1 && isObject(args[0])) {\n\t// \t\toptions = Object.assign(options, args[0]);\n\t// \t} else {\n\t// \t\tfor (let i = 0; i < keys.length; i++) {\n\t// \t\t\tif (isDefined(args[i])) {\n\t// \t\t\t\toptions[keys[i]] = args[i];\n\t// \t\t\t}\n\t// \t\t}\n\t// \t}\n\t// \treturn deepMerge(this.getDefaults(), options);\n\t// }\n\n\t/**\n\t * Convert the class to a string\n\t * @example\n\t * const osc = new Oscillator()\n\t * osc.toString() // \""Oscillator\""\n\t */\n\ttoString(): string {\n\t\treturn this.name;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tSTATIC\n\t///////////////////////////////////////////////////////////////////////////\n\n\t// static get context(): import(\""./context/Context\"").Context {\n\t// \treturn getContext();\n\t// }\n\n\t// static now(): Seconds {\n\t// \treturn Tone.context.now();\n\t// }\n}\n"",""export const version: string = \""14.2.20\"";\n"",""import { Tone } from \""../Tone\"";\nimport { isUndef } from \""./TypeCheck\"";\n\nexport interface EmitterEventObject {\n\t[event: string]: Array<(...args: any[]) => void>;\n}\n\n/**\n * Emitter gives classes which extend it\n * the ability to listen for and emit events.\n * Inspiration and reference from Jerome Etienne's [MicroEvent](https://github.com/jeromeetienne/microevent.js).\n * MIT (c) 2011 Jerome Etienne.\n */\nexport class Emitter<EventType extends string = string> extends Tone {\n\n\tname = \""Emitter\"";\n\n\t/**\n\t * Private container for the events\n\t */\n\tprivate _events?: EmitterEventObject;\n\n\t/**\n\t *  Bind a callback to a specific event.\n\t *  @param  event     The name of the event to listen for.\n\t *  @param  callback  The callback to invoke when the event is emitted\n\t */\n\ton(event: EventType, callback: (...args: any[]) => void): this {\n\t\t// split the event\n\t\tconst events = event.split(/\\W+/);\n\t\tevents.forEach(eventName => {\n\t\t\tif (isUndef(this._events)) {\n\t\t\t\tthis._events = {};\n\t\t\t}\n\t\t\tif (!this._events.hasOwnProperty(eventName)) {\n\t\t\t\tthis._events[eventName] = [];\n\t\t\t}\n\t\t\tthis._events[eventName].push(callback);\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Bind a callback which is only invoked once\n\t *  @param  event     The name of the event to listen for.\n\t *  @param  callback  The callback to invoke when the event is emitted\n\t */\n\tonce(event: EventType, callback: (...args: any[]) => void): this {\n\t\tconst boundCallback = (...args: any[])  => {\n\t\t\t// invoke the callback\n\t\t\tcallback(...args);\n\t\t\t// remove the event\n\t\t\tthis.off(event, boundCallback);\n\t\t};\n\t\tthis.on(event, boundCallback);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Remove the event listener.\n\t *  @param  event     The event to stop listening to.\n\t *  @param  callback  The callback which was bound to the event with Emitter.on.\n\t *                    If no callback is given, all callbacks events are removed.\n\t */\n\toff(event: EventType, callback?: (...args: any[]) => void): this {\n\t\tconst events = event.split(/\\W+/);\n\t\tevents.forEach(eventName => {\n\t\t\tif (isUndef(this._events)) {\n\t\t\t\tthis._events = {};\n\t\t\t}\n\t\t\tif (this._events.hasOwnProperty(event)) {\n\t\t\t\tif (isUndef(callback)) {\n\t\t\t\t\tthis._events[event] = [];\n\t\t\t\t} else {\n\t\t\t\t\tconst eventList = this._events[event];\n\t\t\t\t\tfor (let i = 0; i < eventList.length; i++) {\n\t\t\t\t\t\tif (eventList[i] === callback) {\n\t\t\t\t\t\t\teventList.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Invoke all of the callbacks bound to the event\n\t *  with any arguments passed in.\n\t *  @param  event  The name of the event.\n\t *  @param args The arguments to pass to the functions listening.\n\t */\n\temit(event, ...args: any[]): this {\n\t\tif (this._events) {\n\t\t\tif (this._events.hasOwnProperty(event)) {\n\t\t\t\tconst eventList = this._events[event].slice(0);\n\t\t\t\tfor (let i = 0, len = eventList.length; i < len; i++) {\n\t\t\t\t\teventList[i].apply(this, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Add Emitter functions (on/off/emit) to the object\n\t */\n\tstatic mixin(constr: any): void {\n\t\t// instance._events = {};\n\t\t[\""on\"", \""once\"", \""off\"", \""emit\""].forEach(name => {\n\t\t\tconst property = Object.getOwnPropertyDescriptor(Emitter.prototype, name) as PropertyDescriptor;\n\t\t\tObject.defineProperty(constr.prototype, name, property);\n\t\t});\n\t}\n\n\t/**\n\t *  Clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._events = undefined;\n\t\treturn this;\n\t}\n}\n"",""import { Tone } from \""../Tone\"";\nimport { optionsFromArguments } from \""./Defaults\"";\n\ntype TimelineSearchParam = \""ticks\"" | \""time\"";\n\n/**\n * The options object for Timeline\n */\ninterface TimelineOptions {\n\tmemory: number;\n}\n\n/**\n * An event must have a time number\n */\nexport interface TimelineEvent {\n\ttime: number;\n}\n\n/**\n *  @class A Timeline class for scheduling and maintaining state\n *         along a timeline. All events must have a \""time\"" property.\n *         Internally, events are stored in time order for fast\n *         retrieval.\n *  @param memory The number of previous events that are retained.\n */\nexport class Timeline<GenericEvent extends TimelineEvent> extends Tone {\n\n\tname = \""Timeline\"";\n\n\t/**\n\t *  The memory of the timeline, i.e.\n\t *  how many events in the past it will retain\n\t */\n\tmemory: number;\n\n\t/**\n\t * The array of scheduled timeline events\n\t */\n\tprotected _timeline: GenericEvent[] = [];\n\n\tconstructor(options?: Partial<TimelineOptions>);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(memory?: number);\n\tconstructor() {\n\t\tsuper();\n\t\tconst options = optionsFromArguments(Timeline.getDefaults(), arguments, [\""memory\""]);\n\n\t\tthis.memory = options.memory;\n\t}\n\n\tstatic getDefaults(): TimelineOptions {\n\t\treturn {\n\t\t\tmemory: Infinity,\n\t\t};\n\t}\n\n\t/**\n\t *  The number of items in the timeline.\n\t */\n\tget length(): number {\n\t\treturn this._timeline.length;\n\t}\n\n\t/**\n\t *  Insert an event object onto the timeline. Events must have a \""time\"" attribute.\n\t *  @param event  The event object to insert into the timeline.\n\t */\n\tadd(event: GenericEvent): Timeline<GenericEvent> {\n\t\t// the event needs to have a time attribute\n\t\tthis.assert(Reflect.has(event, \""time\""), \""Timeline: events must have a time attribute\"");\n\t\tevent.time = event.time.valueOf();\n\t\tconst index = this._search(event.time);\n\t\tthis._timeline.splice(index + 1, 0, event);\n\t\t// if the length is more than the memory, remove the previous ones\n\t\tif (this.length > this.memory) {\n\t\t\tconst diff = this.length - this.memory;\n\t\t\tthis._timeline.splice(0, diff);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Remove an event from the timeline.\n\t *  @param  {Object}  event  The event object to remove from the list.\n\t *  @returns {Timeline} this\n\t */\n\tremove(event: GenericEvent): Timeline<GenericEvent> {\n\t\tconst index = this._timeline.indexOf(event);\n\t\tif (index !== -1) {\n\t\t\tthis._timeline.splice(index, 1);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Get the nearest event whose time is less than or equal to the given time.\n\t *  @param  time  The time to query.\n\t */\n\tget(time: number, param: TimelineSearchParam = \""time\""): GenericEvent | null {\n\t\tconst index = this._search(time, param);\n\t\tif (index !== -1) {\n\t\t\treturn this._timeline[index];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t *  Return the first event in the timeline without removing it\n\t *  @returns {Object} The first event object\n\t */\n\tpeek(): GenericEvent | undefined {\n\t\treturn this._timeline[0];\n\t}\n\n\t/**\n\t *  Return the first event in the timeline and remove it\n\t */\n\tshift(): GenericEvent | undefined {\n\t\treturn this._timeline.shift();\n\t}\n\n\t/**\n\t *  Get the event which is scheduled after the given time.\n\t *  @param  time  The time to query.\n\t */\n\tgetAfter(time: number, param: TimelineSearchParam = \""time\""): GenericEvent | null {\n\t\tconst index = this._search(time, param);\n\t\tif (index + 1 < this._timeline.length) {\n\t\t\treturn this._timeline[index + 1];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t *  Get the event before the event at the given time.\n\t *  @param  time  The time to query.\n\t */\n\tgetBefore(time: number): GenericEvent | null {\n\t\tconst len = this._timeline.length;\n\t\t// if it's after the last item, return the last item\n\t\tif (len > 0 && this._timeline[len - 1].time < time) {\n\t\t\treturn this._timeline[len - 1];\n\t\t}\n\t\tconst index = this._search(time);\n\t\tif (index - 1 >= 0) {\n\t\t\treturn this._timeline[index - 1];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t *  Cancel events at and after the given time\n\t *  @param  time  The time to query.\n\t */\n\tcancel(after: number): Timeline<GenericEvent> {\n\t\tif (this._timeline.length > 1) {\n\t\t\tlet index = this._search(after);\n\t\t\tif (index >= 0) {\n\t\t\t\tif (this._timeline[index].time === after) {\n\t\t\t\t\t// get the first item with that time\n\t\t\t\t\tfor (let i = index; i >= 0; i--) {\n\t\t\t\t\t\tif (this._timeline[i].time === after) {\n\t\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._timeline = this._timeline.slice(0, index);\n\t\t\t\t} else {\n\t\t\t\t\tthis._timeline = this._timeline.slice(0, index + 1);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._timeline = [];\n\t\t\t}\n\t\t} else if (this._timeline.length === 1) {\n\t\t\t// the first item's time\n\t\t\tif (this._timeline[0].time >= after) {\n\t\t\t\tthis._timeline = [];\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Cancel events before or equal to the given time.\n\t *  @param  {Number}  time  The time to cancel before.\n\t *  @returns {Timeline} this\n\t */\n\tcancelBefore(time): Timeline<GenericEvent> {\n\t\tconst index = this._search(time);\n\t\tif (index >= 0) {\n\t\t\tthis._timeline = this._timeline.slice(index + 1);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns the previous event if there is one. null otherwise\n\t * @param  {Object} event The event to find the previous one of\n\t * @return {Object}       The event right before the given event\n\t */\n\tpreviousEvent(event): GenericEvent | null {\n\t\tconst index = this._timeline.indexOf(event);\n\t\tif (index > 0) {\n\t\t\treturn this._timeline[index - 1];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t *  Does a binary search on the timeline array and returns the\n\t *  nearest event index whose time is after or equal to the given time.\n\t *  If a time is searched before the first index in the timeline, -1 is returned.\n\t *  If the time is after the end, the index of the last item is returned.\n\t *  @param  time\n\t */\n\tprotected _search(time: number, param: TimelineSearchParam = \""time\""): number {\n\t\tif (this._timeline.length === 0) {\n\t\t\treturn -1;\n\t\t}\n\t\tlet beginning = 0;\n\t\tconst len = this._timeline.length;\n\t\tlet end = len;\n\t\tif (len > 0 && this._timeline[len - 1][param] <= time) {\n\t\t\treturn len - 1;\n\t\t}\n\t\twhile (beginning < end) {\n\t\t\t// calculate the midpoint for roughly equal partition\n\t\t\tlet midPoint = Math.floor(beginning + (end - beginning) / 2);\n\t\t\tconst event = this._timeline[midPoint];\n\t\t\tconst nextEvent = this._timeline[midPoint + 1];\n\t\t\tif (event[param] === time) {\n\t\t\t\t// choose the last one that has the same time\n\t\t\t\tfor (let i = midPoint; i < this._timeline.length; i++) {\n\t\t\t\t\tconst testEvent = this._timeline[i];\n\t\t\t\t\tif (testEvent[param] === time) {\n\t\t\t\t\t\tmidPoint = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn midPoint;\n\t\t\t} else if (event[param] < time && nextEvent[param] > time) {\n\t\t\t\treturn midPoint;\n\t\t\t} else if (event[param] > time) {\n\t\t\t\t// search lower\n\t\t\t\tend = midPoint;\n\t\t\t} else {\n\t\t\t\t// search upper\n\t\t\t\tbeginning = midPoint + 1;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\t/**\n\t *  Internal iterator. Applies extra safety checks for\n\t *  removing items from the array.\n\t */\n\tprivate _iterate(\n\t\tcallback: (event: GenericEvent) => void,\n\t\tlowerBound = 0, upperBound = this._timeline.length - 1,\n\t): void {\n\t\tthis._timeline.slice(lowerBound, upperBound + 1).forEach(callback);\n\t}\n\n\t/**\n\t *  Iterate over everything in the array\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEach(callback: (event: GenericEvent) => void): Timeline<GenericEvent> {\n\t\tthis._iterate(callback);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over everything in the array at or before the given time.\n\t *  @param  time The time to check if items are before\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEachBefore(time, callback: (event: GenericEvent) => void): Timeline<GenericEvent> {\n\t\t// iterate over the items in reverse so that removing an item doesn't break things\n\t\tconst upperBound = this._search(time);\n\t\tif (upperBound !== -1) {\n\t\t\tthis._iterate(callback, 0, upperBound);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over everything in the array after the given time.\n\t *  @param  time The time to check if items are before\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEachAfter(time, callback: (event: GenericEvent) => void): Timeline<GenericEvent> {\n\t\t// iterate over the items in reverse so that removing an item doesn't break things\n\t\tconst lowerBound = this._search(time);\n\t\tthis._iterate(callback, lowerBound + 1);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over everything in the array between the startTime and endTime.\n\t *  The timerange is inclusive of the startTime, but exclusive of the endTime.\n\t *  range = [startTime, endTime).\n\t *  @param  startTime The time to check if items are before\n\t *  @param  endTime The end of the test interval.\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEachBetween(startTime: number, endTime: number, callback: (event: GenericEvent) => void): Timeline<GenericEvent> {\n\t\tlet lowerBound = this._search(startTime);\n\t\tlet upperBound = this._search(endTime);\n\t\tif (lowerBound !== -1 && upperBound !== -1) {\n\t\t\tif (this._timeline[lowerBound].time !== startTime) {\n\t\t\t\tlowerBound += 1;\n\t\t\t}\n\t\t\t// exclusive of the end time\n\t\t\tif (this._timeline[upperBound].time === endTime) {\n\t\t\t\tupperBound -= 1;\n\t\t\t}\n\t\t\tthis._iterate(callback, lowerBound, upperBound);\n\t\t} else if (lowerBound === -1) {\n\t\t\tthis._iterate(callback, 0, upperBound);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over everything in the array at or after the given time. Similar to\n\t *  forEachAfter, but includes the item(s) at the given time.\n\t *  @param  time The time to check if items are before\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEachFrom(time: number, callback: (event: GenericEvent) => void): Timeline<GenericEvent> {\n\t\t// iterate over the items in reverse so that removing an item doesn't break things\n\t\tlet lowerBound = this._search(time);\n\t\t// work backwards until the event time is less than time\n\t\twhile (lowerBound >= 0 && this._timeline[lowerBound].time >= time) {\n\t\t\tlowerBound--;\n\t\t}\n\t\tthis._iterate(callback, lowerBound + 1);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over everything in the array at the given time\n\t *  @param  time The time to check if items are before\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEachAtTime(time: number, callback: (event: GenericEvent) => void): Timeline<GenericEvent> {\n\t\t// iterate over the items in reverse so that removing an item doesn't break things\n\t\tconst upperBound = this._search(time);\n\t\tif (upperBound !== -1) {\n\t\t\tthis._iterate(event => {\n\t\t\t\tif (event.time === time) {\n\t\t\t\t\tcallback(event);\n\t\t\t\t}\n\t\t\t}, 0, upperBound);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._timeline = [];\n\t\treturn this;\n\t}\n}\n"",""///////////////////////////////////////////////////////////////////////////\n// INITIALIZING NEW CONTEXT\n///////////////////////////////////////////////////////////////////////////\n\ntype Context = import(\""./Context\"").Context;\n\n/**\n * Array of callbacks to invoke when a new context is created\n */\nconst notifyNewContext: Array<(ctx: Context) => void> = [];\n\n/**\n * Used internally to setup a new Context\n */\nexport function onContextInit(cb: (ctx: Context) => void): void {\n\tnotifyNewContext.push(cb);\n}\n\n/**\n * Invoke any classes which need to also be initialized when a new context is created.\n */\nexport function initializeContext(ctx: Context): void {\n\t// add any additional modules\n\tnotifyNewContext.forEach(cb => cb(ctx));\n}\n\n/**\n * Array of callbacks to invoke when a new context is created\n */\nconst notifyCloseContext: Array<(ctx: Context) => void> = [];\n\n/**\n * Used internally to tear down a Context\n */\nexport function onContextClose(cb: (ctx: Context) => void): void {\n\tnotifyCloseContext.push(cb);\n}\n\nexport function closeContext(ctx: Context): void {\n\t// add any additional modules\n\tnotifyCloseContext.forEach(cb => cb(ctx));\n}\n"",""import { Ticker, TickerClockSource } from \""../clock/Ticker\"";\nimport { Seconds } from \""../type/Units\"";\nimport { isAudioContext } from \""../util/AdvancedTypeCheck\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { Emitter } from \""../util/Emitter\"";\nimport { Omit } from \""../util/Interface\"";\nimport { Timeline } from \""../util/Timeline\"";\nimport { isString } from \""../util/TypeCheck\"";\nimport { AnyAudioContext, getAudioContext } from \""./AudioContext\"";\nimport { closeContext, initializeContext } from \""./ContextInitialization\"";\n\ntype Transport = import(\""../clock/Transport\"").Transport;\ntype Destination = import(\""./Destination\"").Destination;\n\nexport type ContextLatencyHint = AudioContextLatencyCategory | \""fastest\"";\n\n// these are either not used in Tone.js or deprecated and not implemented.\nexport type ExcludedFromBaseAudioContext = \""onstatechange\"" | \""addEventListener\"" |\n\t\""removeEventListener\"" | \""listener\"" | \""dispatchEvent\"" | \""audioWorklet\"" | \""destination\"" | \""createScriptProcessor\"";\n\t// \""createMediaStreamSource\"" | \""createMediaElementSource\"" | \""createMediaStreamTrackSource\"" |\n\t// \""baseLatency\"" | \""suspend\"" |\n\n// the subset of the BaseAudioContext which Tone.Context implements.\nexport type BaseAudioContextSubset = Omit<BaseAudioContext, ExcludedFromBaseAudioContext>;\n\nexport interface ContextOptions {\n\tclockSource: TickerClockSource;\n\tlatencyHint: ContextLatencyHint;\n\tlookAhead: Seconds;\n\tupdateInterval: Seconds;\n\tcontext: AnyAudioContext;\n}\n\nexport interface ContextTimeoutEvent {\n\tcallback: (...args: any[]) => void;\n\tid: number;\n\ttime: Seconds;\n}\n\n/**\n * Wrapper around the native AudioContext.\n */\nexport class Context extends Emitter<\""statechange\"" | \""tick\""> implements BaseAudioContextSubset {\n\n\tname = \""Context\"";\n\n\t/**\n\t * The amount of time into the future events are scheduled. Giving Web Audio\n\t * a short amount of time into the future to schedule events can reduce clicks and\n\t * improve performance. This value can be set to 0 to get the lowest latency.\n\t */\n\tlookAhead: Seconds;\n\n\t/**\n\t * private reference to the BaseAudioContext\n\t */\n\tprotected readonly _context: AnyAudioContext;\n\n\t/**\n\t * A reliable callback method\n\t */\n\tprivate readonly _ticker: Ticker;\n\n\t/**\n\t *  The default latency hint\n\t */\n\tprivate _latencyHint: ContextLatencyHint | Seconds;\n\n\t/**\n\t *  An object containing all of the constants AudioBufferSourceNodes\n\t */\n\tprivate _constants = new Map<number, AudioBufferSourceNode>();\n\n\t/**\n\t *  All of the setTimeout events.\n\t */\n\tprivate _timeouts: Timeline<ContextTimeoutEvent> = new Timeline();\n\n\t/**\n\t *  The timeout id counter\n\t */\n\tprivate _timeoutIds = 0;\n\n\t/**\n\t * A reference the Transport singleton belonging to this context\n\t */\n\tprivate _transport!: Transport;\n\n\t/**\n\t * A reference the Destination singleton belonging to this context\n\t */\n\tprivate _destination!: Destination;\n\n\t/**\n\t * Private indicator if the context has been initialized\n\t */\n\tprivate _initialized: boolean = false;\n\n\tconstructor(context?: AnyAudioContext);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(options?: Partial<ContextOptions>);\n\tconstructor() {\n\t\tsuper();\n\t\tconst options = optionsFromArguments(Context.getDefaults(), arguments, [\""context\""]);\n\n\t\tthis._context = options.context;\n\n\t\tthis._latencyHint = options.latencyHint;\n\t\tthis.lookAhead = options.lookAhead;\n\n\t\tthis._ticker = new Ticker(this.emit.bind(this, \""tick\""), options.clockSource, options.updateInterval);\n\t\tthis.on(\""tick\"", this._timeoutLoop.bind(this));\n\n\t\t// fwd events from the context\n\t\tthis._context.addEventListener(\""statechange\"", () => {\n\t\t\tthis.emit(\""statechange\"", this.state);\n\t\t});\n\t}\n\n\tstatic getDefaults(): ContextOptions {\n\t\treturn {\n\t\t\tclockSource: \""worker\"",\n\t\t\tcontext: getAudioContext(),\n\t\t\tlatencyHint: \""interactive\"",\n\t\t\tlookAhead: 0.1,\n\t\t\tupdateInterval: 0.03,\n\t\t};\n\t}\n\n\t/**\n\t * Finish setting up the context. **You usually do not need to do this manually.**\n\t */\n\tinitialize(): this {\n\t\tif (!this._initialized) {\n\t\t\t// add any additional modules\n\t\t\tinitializeContext(this);\n\t\t\tthis._initialized = true;\n\t\t}\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////\n\t// BASE AUDIO CONTEXT METHODS\n\t///////////////////////////////////////////////////////////////////////\n\n\tcreateAnalyser(): AnalyserNode {\n\t\treturn this._context.createAnalyser();\n\t}\n\tcreateOscillator(): OscillatorNode {\n\t\treturn this._context.createOscillator();\n\t}\n\tcreateBufferSource(): AudioBufferSourceNode {\n\t\treturn this._context.createBufferSource();\n\t}\n\tcreateBiquadFilter(): BiquadFilterNode {\n\t\treturn this._context.createBiquadFilter();\n\t}\n\tcreateBuffer(numberOfChannels: number, length: number, sampleRate: number): AudioBuffer {\n\t\treturn this._context.createBuffer(numberOfChannels, length, sampleRate);\n\t}\n\tcreateChannelMerger(numberOfInputs?: number | undefined): ChannelMergerNode {\n\t\treturn this._context.createChannelMerger(numberOfInputs);\n\t}\n\tcreateChannelSplitter(numberOfOutputs?: number | undefined): ChannelSplitterNode {\n\t\treturn this._context.createChannelSplitter(numberOfOutputs);\n\t}\n\tcreateConstantSource(): ConstantSourceNode {\n\t\treturn this._context.createConstantSource();\n\t}\n\tcreateConvolver(): ConvolverNode {\n\t\treturn this._context.createConvolver();\n\t}\n\tcreateDelay(maxDelayTime?: number | undefined): DelayNode {\n\t\treturn this._context.createDelay(maxDelayTime);\n\t}\n\tcreateDynamicsCompressor(): DynamicsCompressorNode {\n\t\treturn this._context.createDynamicsCompressor();\n\t}\n\tcreateGain(): GainNode {\n\t\treturn this._context.createGain();\n\t}\n\tcreateIIRFilter(feedforward: number[], feedback: number[]): IIRFilterNode {\n\t\treturn this._context.createIIRFilter(feedforward, feedback);\n\t}\n\tcreatePanner(): PannerNode {\n\t\treturn this._context.createPanner();\n\t}\n\tcreatePeriodicWave(\n\t\treal: number[] | Float32Array,\n\t\timag: number[] | Float32Array,\n\t\tconstraints?: PeriodicWaveConstraints | undefined,\n\t): PeriodicWave {\n\t\treturn this._context.createPeriodicWave(real, imag, constraints);\n\t}\n\tcreateStereoPanner(): StereoPannerNode {\n\t\treturn this._context.createStereoPanner();\n\t}\n\tcreateWaveShaper(): WaveShaperNode {\n\t\treturn this._context.createWaveShaper();\n\t}\n\tdecodeAudioData(audioData: ArrayBuffer): Promise<AudioBuffer> {\n\t\treturn this._context.decodeAudioData(audioData);\n\t}\n\n\t/**\n\t *  The current time in seconds of the AudioContext.\n\t */\n\tget currentTime(): Seconds {\n\t\treturn this._context.currentTime;\n\t}\n\t/**\n\t *  The current time in seconds of the AudioContext.\n\t */\n\tget state(): AudioContextState {\n\t\treturn this._context.state;\n\t}\n\t/**\n\t *  The current time in seconds of the AudioContext.\n\t */\n\tget sampleRate(): number {\n\t\treturn this._context.sampleRate;\n\t}\n\t/**\n\t *  The listener\n\t */\n\tget listener(): AudioListener {\n\t\treturn this._context.listener;\n\t}\n\n\t/**\n\t *  There is only one Transport per Context. It is created on initialization.\n\t */\n\tget transport(): Transport {\n\t\tthis.assert(this._initialized, \""The context must be initialized before being used by invoking context.initialize()\"");\n\t\treturn this._transport;\n\t}\n\tset transport(t: Transport) {\n\t\tthis.assert(!this._initialized, \""The transport cannot be set after initialization.\"");\n\t\tthis._transport = t;\n\t}\n\n\t/**\n\t *  A reference to the Context's destination node.\n\t */\n\tget destination(): Destination {\n\t\tthis.assert(this._initialized, \""The context must be initialized before being used by invoking context.initialize()\"");\n\t\treturn this._destination;\n\t}\n\tset destination(d: Destination) {\n\t\tthis.assert(!this._initialized, \""The transport cannot be set after initialization.\"");\n\t\tthis._destination = d;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////\n\t// TICKER\n\t///////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  How often the interval callback is invoked.\n\t *  This number corresponds to how responsive the scheduling\n\t *  can be. context.updateInterval + context.lookAhead gives you the\n\t *  total latency between scheduling an event and hearing it.\n\t */\n\tget updateInterval(): Seconds {\n\t\treturn this._ticker.updateInterval;\n\t}\n\tset updateInterval(interval: Seconds) {\n\t\tthis._ticker.updateInterval = interval;\n\t}\n\n\t/**\n\t *  What the source of the clock is, either \""worker\"" (default),\n\t *  \""timeout\"", or \""offline\"" (none).\n\t */\n\tget clockSource(): TickerClockSource {\n\t\treturn this._ticker.type;\n\t}\n\tset clockSource(type: TickerClockSource) {\n\t\tthis._ticker.type = type;\n\t}\n\n\t/**\n\t * The type of playback, which affects tradeoffs between audio\n\t * output latency and responsiveness.\n\t * In addition to setting the value in seconds, the latencyHint also\n\t * accepts the strings \""interactive\"" (prioritizes low latency),\n\t * \""playback\"" (prioritizes sustained playback), \""balanced\"" (balances\n\t * latency and performance), and \""fastest\"" (lowest latency, might glitch more often).\n\t * @example\n\t * //set the lookAhead to 0.3 seconds\n\t * Tone.context.latencyHint = 0.3;\n\t */\n\tget latencyHint(): ContextLatencyHint | Seconds {\n\t\treturn this._latencyHint;\n\t}\n\tset latencyHint(hint: ContextLatencyHint | Seconds) {\n\t\tlet lookAheadValue = 0;\n\t\tthis._latencyHint = hint;\n\t\tif (isString(hint)) {\n\t\t\tswitch (hint) {\n\t\t\t\tcase \""interactive\"":\n\t\t\t\t\tlookAheadValue = 0.1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \""playback\"":\n\t\t\t\t\tlookAheadValue = 0.8;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \""balanced\"":\n\t\t\t\t\tlookAheadValue = 0.25;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \""fastest\"":\n\t\t\t\t\tlookAheadValue = 0.01;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.lookAhead = lookAheadValue;\n\t\tthis.updateInterval = lookAheadValue / 3;\n\t}\n\n\t/**\n\t *  The unwrapped AudioContext.\n\t */\n\tget rawContext(): AnyAudioContext {\n\t\treturn this._context;\n\t}\n\n\t/**\n\t * The current audio context time plus a short {@link lookAhead}.\n\t */\n\tnow(): Seconds {\n\t\treturn this._context.currentTime + this.lookAhead;\n\t}\n\n\t/**\n\t *  Starts the audio context from a suspended state. This is required\n\t *  to initially start the AudioContext.\n\t */\n\tresume(): Promise<void> {\n\t\tif (this._context.state === \""suspended\"" && isAudioContext(this._context)) {\n\t\t\treturn this._context.resume();\n\t\t} else {\n\t\t\treturn Promise.resolve();\n\t\t}\n\t}\n\n\t/**\n\t *  Promise which is invoked when the context is running.\n\t *  Tries to resume the context if it's not started.\n\t */\n\tasync close(): Promise<void> {\n\t\tif (isAudioContext(this._context)) {\n\t\t\tawait this._context.close();\n\t\t}\n\t\tif (this._initialized) {\n\t\t\tcloseContext(this);\n\t\t}\n\t}\n\n\t/**\n\t *  Generate a looped buffer at some constant value.\n\t */\n\tgetConstant(val: number): AudioBufferSourceNode {\n\t\tif (this._constants.has(val)) {\n\t\t\treturn this._constants.get(val) as AudioBufferSourceNode;\n\t\t} else {\n\t\t\tconst buffer = this._context.createBuffer(1, 128, this._context.sampleRate);\n\t\t\tconst arr = buffer.getChannelData(0);\n\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\tarr[i] = val;\n\t\t\t}\n\t\t\tconst constant = this._context.createBufferSource();\n\t\t\tconstant.channelCount = 1;\n\t\t\tconstant.channelCountMode = \""explicit\"";\n\t\t\tconstant.buffer = buffer;\n\t\t\tconstant.loop = true;\n\t\t\tconstant.start(0);\n\t\t\tthis._constants.set(val, constant);\n\t\t\treturn constant;\n\t\t}\n\t}\n\n\t/**\n\t *  Clean up. Also closes the audio context.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._ticker.dispose();\n\t\tthis._timeouts.dispose();\n\t\tObject.keys(this._constants).map(val => this._constants[val].disconnect());\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////\n\t// TIMEOUTS\n\t///////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  The private loop which keeps track of the context scheduled timeouts\n\t *  Is invoked from the clock source\n\t */\n\tprivate _timeoutLoop(): void  {\n\t\tconst now = this.now();\n\t\tlet firstEvent = this._timeouts.peek();\n\t\twhile (this._timeouts.length && firstEvent && firstEvent.time <= now) {\n\t\t\t// invoke the callback\n\t\t\tfirstEvent.callback();\n\t\t\t// shift the first event off\n\t\t\tthis._timeouts.shift();\n\t\t\t// get the next one\n\t\t\tfirstEvent = this._timeouts.peek();\n\t\t}\n\t}\n\n\t/**\n\t *  A setTimeout which is guarented by the clock source.\n\t *  Also runs in the offline context.\n\t *  @param  fn       The callback to invoke\n\t *  @param  timeout  The timeout in seconds\n\t *  @returns ID to use when invoking Context.clearTimeout\n\t */\n\tsetTimeout(fn: (...args: any[]) => void, timeout: Seconds): number {\n\t\tthis._timeoutIds++;\n\t\tconst now = this.now();\n\t\tthis._timeouts.add({\n\t\t\tcallback : fn,\n\t\t\tid : this._timeoutIds,\n\t\t\ttime : now + timeout,\n\t\t});\n\t\treturn this._timeoutIds;\n\t}\n\n\t/**\n\t *  Clears a previously scheduled timeout with Tone.context.setTimeout\n\t *  @param  id  The ID returned from setTimeout\n\t */\n\tclearTimeout(id: number): Context {\n\t\tthis._timeouts.forEach(event => {\n\t\t\tif (event.id === id) {\n\t\t\t\tthis._timeouts.remove(event);\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n}\n"",""import { version } from \""../version\"";\nimport { hasAudioContext, theWindow } from \""./context/AudioContext\"";\nimport { Context } from \""./context/Context\"";\n\n/**\n * This dummy context is used to avoid throwing immediate errors when importing in Node.js\n */\nconst dummyContext: Context = {\n\tdestination: {},\n\ttransport: {},\n} as Context;\n\n/**\n * The global audio context which is getable and assignable through\n * getContext and setContext\n */\nlet globalContext: Context = dummyContext;\n\n/**\n * Returns the default system-wide AudioContext\n */\nexport function getContext(): Context {\n\tif (globalContext === dummyContext && hasAudioContext) {\n\t\tsetContext(new Context());\n\t}\n\treturn globalContext;\n}\n\n/**\n * Set the default audio context\n */\nexport function setContext(context: Context): void {\n\tglobalContext = context;\n\tcontext.initialize();\n}\n\n/**\n * Most browsers will not play _any_ audio until a user\n * clicks something (like a play button). Invoke this method\n * on a click or keypress event handler to start the audio context.\n * More about the Autoplay policy\n * [here](https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio)\n * @example\n * document.querySelector('#playbutton').addEventListener('click', () => Tone.start())\n */\nexport function start(): Promise <void> {\n\treturn globalContext.resume();\n}\n\n/**\n * Log Tone.js + version in the console.\n */\nif (theWindow && !theWindow.TONE_SILENCE_LOGGING) {\n\tlet prefix = \""v\"";\n\tif (version === \""dev\"") {\n\t\tprefix = \""\"";\n\t}\n\tconst printString = ` * Tone.js ${prefix}${version} * `;\n\t// tslint:disable-next-line: no-console\n\tconsole.log(`%c${printString}`, \""background: #000; color: #fff\"");\n}\n"",""import { Decibels, GainFactor, Hertz, Interval, MidiNote, NormalRange } from \""./Units\"";\n\n/**\n *  Equal power gain scale. Good for cross-fading.\n *  @param  percent (0-1)\n */\nexport function equalPowerScale(percent: NormalRange): number {\n\tconst piFactor = 0.5 * Math.PI;\n\treturn Math.sin(percent * piFactor);\n}\n\n/**\n *  Convert decibels into gain.\n */\nexport function dbToGain(db: Decibels): GainFactor {\n\treturn Math.pow(10, db / 20);\n}\n\n/**\n *  Convert gain to decibels.\n */\nexport function gainToDb(gain: GainFactor): Decibels {\n\treturn 20 * (Math.log(gain) / Math.LN10);\n}\n\n/**\n * Convert an interval (in semitones) to a frequency ratio.\n * @param interval the number of semitones above the base note\n * @example\n * tone.intervalToFrequencyRatio(0); // 1\n * tone.intervalToFrequencyRatio(12); // 2\n * tone.intervalToFrequencyRatio(-12); // 0.5\n */\nexport function intervalToFrequencyRatio(interval: Interval): number {\n\treturn Math.pow(2, (interval / 12));\n}\n\n/**\n * The Global [concert tuning pitch](https://en.wikipedia.org/wiki/Concert_pitch) which is used\n * to generate all the other pitch values from notes. A4's values in Hertz.\n */\nlet A4: Hertz = 440;\n\nexport function getA4(): Hertz {\n\treturn A4;\n}\n\nexport function setA4(freq: Hertz): void {\n\tA4 = freq;\n}\n\n/**\n * Convert a frequency value to a MIDI note.\n * @param frequency The value to frequency value to convert.\n * @example\n * ftom(440); // returns 69\n */\nexport function ftom(frequency: Hertz): MidiNote {\n\treturn Math.round(ftomf(frequency)) as MidiNote;\n}\n\n/**\n * Convert a frequency to a floating point midi value\n */\nexport function ftomf(frequency: Hertz): number {\n\treturn 69 + 12 * Math.log2(frequency / A4);\n}\n\n/**\n * Convert a MIDI note to frequency value.\n * @param  midi The midi number to convert.\n * @return The corresponding frequency value\n * @example\n */\nexport function mtof(midi: MidiNote): Hertz {\n\treturn A4 * Math.pow(2, (midi - 69) / 12);\n}\n"",""import { Context } from \""../context/Context\"";\nimport { Tone } from \""../Tone\"";\nimport { isDefined, isObject , isString, isUndef } from \""../util/TypeCheck\"";\nimport { BPM, Hertz, MidiNote, Milliseconds, Samples, Seconds, Ticks, Time } from \""./Units\"";\n\nexport type TimeValue = Time | TimeBaseClass<any, any>;\n\n/**\n * The units that the TimeBase can accept. extended by other classes\n */\nexport type TimeBaseUnit = \""s\"" | \""n\"" | \""t\"" | \""m\"" | \""i\"" | \""hz\"" | \""tr\"" | \""samples\"" | \""number\"";\n\nexport interface TypeFunction {\n\tregexp: RegExp;\n\tmethod: (value: string, ...args: string[]) => number;\n}\n\nexport interface TimeExpression<Type extends number> {\n\t[key: string]: {\n\t\tregexp: RegExp;\n\t\tmethod: (value: string, ...args: string[]) => Type;\n\t};\n}\n\n/**\n * TimeBase is a flexible encoding of time which can be evaluated to and from a string.\n * @param  val    The time value as a number, string or object\n * @param  units  Unit values\n * @example\n * new TimeBase(4, \""n\"")\n * new TimeBase(2, \""t\"")\n * new TimeBase(\""2t\"")\n * new TimeBase({\""2t\"" : 2})\n * new TimeBase(\""2t\"") + new TimeBase(\""4n\"");\n */\nexport abstract class TimeBaseClass<Type extends number, Unit extends string> extends Tone {\n\n\treadonly context: Context;\n\n\t/**\n\t * The value of the units\n\t */\n\tprotected _val?: TimeValue;\n\n\t/**\n\t * The units of time\n\t */\n\tprotected _units?: Unit;\n\n\t/**\n\t * All of the conversion expressions\n\t */\n\tprotected _expressions: TimeExpression<Type>;\n\n\t/**\n\t * The default units\n\t */\n\treadonly defaultUnits: Unit = \""s\"" as Unit;\n\n\tconstructor(context: Context, value?: TimeValue, units?: Unit) {\n\t\tsuper();\n\n\t\tthis._val = value;\n\t\tthis._units = units;\n\t\tthis.context = context;\n\t\tthis._expressions = this._getExpressions();\n\t}\n\n\t/**\n\t * All of the time encoding expressions\n\t */\n\tprotected _getExpressions(): TimeExpression<Type> {\n\t\treturn {\n\t\t\thz: {\n\t\t\t\tmethod: (value) => {\n\t\t\t\t\treturn this._frequencyToUnits(parseFloat(value));\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+(?:\\.\\d+)?)hz$/i,\n\t\t\t},\n\t\t\ti: {\n\t\t\t\tmethod: (value) => {\n\t\t\t\t\treturn this._ticksToUnits(parseInt(value, 10));\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+)i$/i,\n\t\t\t},\n\t\t\tm: {\n\t\t\t\tmethod: (value) => {\n\t\t\t\t\treturn this._beatsToUnits(parseInt(value, 10) * this._getTimeSignature());\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+)m$/i,\n\t\t\t},\n\t\t\tn: {\n\t\t\t\tmethod: (value, dot) => {\n\t\t\t\t\tconst numericValue = parseInt(value, 10);\n\t\t\t\t\tconst scalar = dot === \"".\"" ? 1.5 : 1;\n\t\t\t\t\tif (numericValue === 1) {\n\t\t\t\t\t\treturn this._beatsToUnits(this._getTimeSignature()) * scalar as Type;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn this._beatsToUnits(4 / numericValue) * scalar as Type;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+)n(\\.?)$/i,\n\t\t\t},\n\t\t\tnumber: {\n\t\t\t\tmethod: (value) => {\n\t\t\t\t\treturn this._expressions[this.defaultUnits].method.call(this, value);\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+(?:\\.\\d+)?)$/,\n\t\t\t},\n\t\t\ts: {\n\t\t\t\tmethod: (value): Type => {\n\t\t\t\t\treturn this._secondsToUnits(parseFloat(value));\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+(?:\\.\\d+)?)s$/,\n\t\t\t},\n\t\t\tsamples: {\n\t\t\t\tmethod: (value) => {\n\t\t\t\t\treturn parseInt(value, 10) / this.context.sampleRate as Type;\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+)samples$/,\n\t\t\t},\n\t\t\tt: {\n\t\t\t\tmethod: (value) => {\n\t\t\t\t\tconst numericValue = parseInt(value, 10);\n\t\t\t\t\treturn this._beatsToUnits(8 / (Math.floor(numericValue) * 3));\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+)t$/i,\n\t\t\t},\n\t\t\ttr: {\n\t\t\t\tmethod: (m, q, s) => {\n\t\t\t\t\tlet total = 0;\n\t\t\t\t\tif (m && m !== \""0\"") {\n\t\t\t\t\t\ttotal += this._beatsToUnits(this._getTimeSignature() * parseFloat(m));\n\t\t\t\t\t}\n\t\t\t\t\tif (q && q !== \""0\"") {\n\t\t\t\t\t\ttotal += this._beatsToUnits(parseFloat(q));\n\t\t\t\t\t}\n\t\t\t\t\tif (s && s !== \""0\"") {\n\t\t\t\t\t\ttotal += this._beatsToUnits(parseFloat(s) / 4);\n\t\t\t\t\t}\n\t\t\t\t\treturn total as Type;\n\t\t\t\t},\n\t\t\t\tregexp: /^(\\d+(?:\\.\\d+)?):(\\d+(?:\\.\\d+)?):?(\\d+(?:\\.\\d+)?)?$/,\n\t\t\t},\n\t\t};\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tVALUE OF\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  Evaluate the time value. Returns the time in seconds.\n\t */\n\tvalueOf(): Type {\n\t\tif (this._val instanceof TimeBaseClass) {\n\t\t\tthis.fromType(this._val);\n\t\t}\n\t\tif (isUndef(this._val)) {\n\t\t\treturn this._noArg();\n\t\t} else if (isString(this._val) && isUndef(this._units)) {\n\t\t\tfor (const units in this._expressions) {\n\t\t\t\tif (this._expressions[units].regexp.test(this._val.trim())) {\n\t\t\t\t\tthis._units = units as Unit;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isObject(this._val)) {\n\t\t\tlet total = 0;\n\t\t\tfor (const typeName in this._val) {\n\t\t\t\tif (isDefined(this._val[typeName])) {\n\t\t\t\t\tconst quantity = this._val[typeName];\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconst time = (new this.constructor(this.context, typeName)).valueOf() * quantity;\n\t\t\t\t\ttotal += time;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn total as Type;\n\t\t}\n\t\tif (isDefined(this._units)) {\n\t\t\tconst expr = this._expressions[this._units];\n\t\t\tconst matching = this._val.toString().trim().match(expr.regexp);\n\t\t\tif (matching) {\n\t\t\t\treturn expr.method.apply(this, matching.slice(1));\n\t\t\t} else {\n\t\t\t\treturn expr.method.call(this, this._val);\n\t\t\t}\n\t\t} else if (isString(this._val)) {\n\t\t\treturn parseFloat(this._val) as Type;\n\t\t} else {\n\t\t\treturn this._val as Type;\n\t\t}\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tUNIT CONVERSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  Returns the value of a frequency in the current units\n\t */\n\tprotected _frequencyToUnits(freq: Hertz): Type {\n\t\treturn 1 / freq as Type;\n\t}\n\n\t/**\n\t *  Return the value of the beats in the current units\n\t */\n\tprotected _beatsToUnits(beats: number): Type {\n\t\treturn (60 / this._getBpm()) * beats as Type;\n\t}\n\n\t/**\n\t *  Returns the value of a second in the current units\n\t */\n\tprotected _secondsToUnits(seconds: Seconds): Type {\n\t\treturn seconds as Type;\n\t}\n\n\t/**\n\t *  Returns the value of a tick in the current time units\n\t *  @private\n\t */\n\tprotected _ticksToUnits(ticks: Ticks): Type {\n\t\treturn (ticks * (this._beatsToUnits(1)) / this._getPPQ()) as Type;\n\t}\n\n\t/**\n\t *  With no arguments, return 'now'\n\t */\n\tprotected _noArg(): Type {\n\t\treturn this._now();\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tTEMPO CONVERSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Return the bpm\n\t */\n\tprotected _getBpm(): BPM {\n\t\treturn this.context.transport.bpm.value;\n\t}\n\n\t/**\n\t * Return the timeSignature\n\t */\n\tprotected _getTimeSignature(): number {\n\t\treturn this.context.transport.timeSignature as number;\n\t}\n\n\t/**\n\t * Return the PPQ or 192 if Transport is not available\n\t */\n\tprotected _getPPQ(): number {\n\t\treturn this.context.transport.PPQ;\n\t}\n\n\t/**\n\t * Return the current time in whichever context is relevant\n\t */\n\tprotected abstract _now(): Type;\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tCONVERSION INTERFACE\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Coerce a time type into this units type.\n\t * @param type Any time type units\n\t */\n\tfromType(type: TimeBaseClass<any, any>): this {\n\t\tthis._units = undefined;\n\t\tswitch (this.defaultUnits) {\n\t\t\tcase \""s\"":\n\t\t\t\tthis._val = type.toSeconds();\n\t\t\t\tbreak;\n\t\t\tcase \""i\"":\n\t\t\t\tthis._val = type.toTicks();\n\t\t\t\tbreak;\n\t\t\tcase \""hz\"":\n\t\t\t\tthis._val = type.toFrequency();\n\t\t\t\tbreak;\n\t\t\tcase \""midi\"":\n\t\t\t\tthis._val = type.toMidi();\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Return the value in seconds\n\t */\n\tabstract toSeconds(): Seconds;\n\n\t/**\n\t *  Return the value as a Midi note\n\t */\n\tabstract toMidi(): MidiNote;\n\n\t/**\n\t * Convert the value into ticks\n\t */\n\tabstract toTicks(): Ticks;\n\n\t/**\n\t *  Return the value in hertz\n\t */\n\ttoFrequency(): Hertz {\n\t\treturn 1 / this.toSeconds();\n\t}\n\n\t/**\n\t *  Return the time in samples\n\t */\n\ttoSamples(): Samples {\n\t\treturn this.toSeconds() * this.context.sampleRate;\n\t}\n\n\t/**\n\t *  Return the time in milliseconds.\n\t */\n\ttoMilliseconds(): Milliseconds {\n\t\treturn this.toSeconds() * 1000;\n\t}\n}\n"",""import { getContext } from \""../Global\"";\nimport { ftom } from \""./Conversions\"";\nimport { TimeBaseClass, TimeBaseUnit, TimeExpression, TimeValue } from \""./TimeBase\"";\nimport { BarsBeatsSixteenths, MidiNote, Seconds, Subdivision, Ticks, Time } from \""./Units\"";\n\n/**\n * TimeClass is a primitive type for encoding and decoding Time values.\n * TimeClass can be passed into the parameter of any method which takes time as an argument.\n * @param  val    The time value.\n * @param  units  The units of the value.\n * @example\n * var t = Time(\""4n\"");//a quarter note\n */\nexport class TimeClass<Type extends Seconds | Ticks = Seconds, Unit extends string = TimeBaseUnit>\nextends TimeBaseClass<Type, Unit> {\n\n\tname = \""Time\"";\n\n\tprotected _getExpressions(): TimeExpression<Type> {\n\t\treturn Object.assign(super._getExpressions(), {\n\t\t\tnow: {\n\t\t\t\tmethod: (capture: string): Type => {\n\t\t\t\t\treturn this._now() + new (this.constructor as typeof TimeClass)(this.context, capture).valueOf() as Type;\n\t\t\t\t},\n\t\t\t\tregexp: /^\\+(.+)/,\n\t\t\t},\n\t\t\tquantize: {\n\t\t\t\tmethod: (capture: string): Type => {\n\t\t\t\t\tconst quantTo = new TimeClass(this.context, capture).valueOf();\n\t\t\t\t\treturn this._secondsToUnits(this.context.transport.nextSubdivision(quantTo));\n\t\t\t\t},\n\t\t\t\tregexp: /^@(.+)/,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Quantize the time by the given subdivision. Optionally add a\n\t * percentage which will move the time value towards the ideal\n\t * quantized value by that percentage.\n\t * @param  val    The subdivision to quantize to\n\t * @param  percent  Move the time value towards the quantized value by a percentage.\n\t * @example\n\t * Time(21).quantize(2) //returns 22\n\t * Time(0.6).quantize(\""4n\"", 0.5) //returns 0.55\n\t */\n\tquantize(subdiv: Time, percent = 1): Type {\n\t\tconst subdivision = new (this.constructor as typeof TimeClass)(this.context, subdiv).valueOf();\n\t\tconst value = this.valueOf();\n\t\tconst multiple = Math.round(value / subdivision);\n\t\tconst ideal = multiple * subdivision;\n\t\tconst diff = ideal - value;\n\t\treturn value + diff * percent as Type;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// CONVERSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\t/**\n\t *  Convert a Time to Notation. The notation values are will be the\n\t *  closest representation between 1m to 128th note.\n\t *  @return {Notation}\n\t *  @example\n\t * //if the Transport is at 120bpm:\n\t * Time(2).toNotation();//returns \""1m\""\n\t */\n\ttoNotation(): Subdivision {\n\t\tconst time = this.toSeconds();\n\t\tconst testNotations: Subdivision[] = [\""1m\""];\n\t\tfor (let power = 1; power < 9; power++) {\n\t\t\tconst subdiv = Math.pow(2, power);\n\t\t\ttestNotations.push(subdiv + \""n.\"" as Subdivision);\n\t\t\ttestNotations.push(subdiv + \""n\"" as Subdivision);\n\t\t\ttestNotations.push(subdiv + \""t\"" as Subdivision);\n\t\t}\n\t\ttestNotations.push(\""0\"");\n\t\t// find the closets notation representation\n\t\tlet closest = testNotations[0];\n\t\tlet closestSeconds = new TimeClass(this.context, testNotations[0]).toSeconds();\n\t\ttestNotations.forEach(notation => {\n\t\t\tconst notationSeconds = new TimeClass(this.context, notation).toSeconds();\n\t\t\tif (Math.abs(notationSeconds - time) < Math.abs(closestSeconds - time)) {\n\t\t\t\tclosest = notation;\n\t\t\t\tclosestSeconds = notationSeconds;\n\t\t\t}\n\t\t});\n\t\treturn closest;\n\t}\n\n\t/**\n\t *  Return the time encoded as Bars:Beats:Sixteenths.\n\t */\n\ttoBarsBeatsSixteenths(): BarsBeatsSixteenths {\n\t\tconst quarterTime = this._beatsToUnits(1);\n\t\tlet quarters = this.valueOf() / quarterTime;\n\t\tquarters = parseFloat(quarters.toFixed(4));\n\t\tconst measures = Math.floor(quarters / this._getTimeSignature());\n\t\tlet sixteenths = (quarters % 1) * 4;\n\t\tquarters = Math.floor(quarters) % this._getTimeSignature();\n\t\tconst sixteenthString = sixteenths.toString();\n\t\tif (sixteenthString.length > 3) {\n\t\t\t// the additional parseFloat removes insignificant trailing zeroes\n\t\t\tsixteenths = parseFloat(parseFloat(sixteenthString).toFixed(3));\n\t\t}\n\t\tconst progress = [measures, quarters, sixteenths];\n\t\treturn progress.join(\"":\"");\n\t}\n\n\t/**\n\t *  Return the time in ticks.\n\t */\n\ttoTicks(): Ticks {\n\t\tconst quarterTime = this._beatsToUnits(1);\n\t\tconst quarters = this.valueOf() / quarterTime;\n\t\treturn Math.round(quarters * this._getPPQ());\n\t}\n\n\t/**\n\t *  Return the time in seconds.\n\t */\n\ttoSeconds(): Seconds {\n\t\treturn this.valueOf();\n\t}\n\n\t/**\n\t *  Return the value as a midi note.\n\t */\n\ttoMidi(): MidiNote {\n\t\treturn ftom(this.toFrequency());\n\t}\n\n\tprotected _now(): Type {\n\t\treturn this.context.now() as Type;\n\t}\n}\n\n/**\n * Create a TimeClass from a time string or number.\n * @param value A value which reprsents time\n * @param units The value's units if they can't be inferred by the value.\n */\nexport function Time(value?: TimeValue, units?: TimeBaseUnit): TimeClass<Seconds> {\n\treturn new TimeClass(getContext(), value, units);\n}\n"",""import { getContext } from \""../Global\"";\nimport { intervalToFrequencyRatio, mtof } from \""./Conversions\"";\nimport { ftom, getA4, setA4 } from \""./Conversions\"";\nimport { TimeClass } from \""./Time\"";\nimport { TimeBaseClass, TimeBaseUnit, TimeExpression, TimeValue } from \""./TimeBase\"";\nimport { Frequency, Hertz, Interval, MidiNote, Note, Seconds, Ticks } from \""./Units\"";\n\nexport type FrequencyUnit = TimeBaseUnit | \""midi\"";\n\n/**\n * Frequency is a primitive type for encoding Frequency values.\n * Eventually all time values are evaluated to hertz using the `eval` method.\n * @example\n * Frequency(\""C3\"") // 261\n * Frequency(38, \""midi\"") //\n * Frequency(\""C3\"").transpose(4);\n */\nexport class FrequencyClass<Type extends number = Hertz> extends TimeClass<Type, FrequencyUnit> {\n\n\tname = \""Frequency\"";\n\n\treadonly defaultUnits: FrequencyUnit = \""hz\"";\n\n\t/**\n\t * The [concert tuning pitch](https://en.wikipedia.org/wiki/Concert_pitch) which is used\n\t * to generate all the other pitch values from notes. A4's values in Hertz.\n\t */\n\tstatic get A4(): Hertz {\n\t\treturn getA4();\n\t}\n\tstatic set A4(freq: Hertz) {\n\t\tsetA4(freq);\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tAUGMENT BASE EXPRESSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\tprotected _getExpressions(): TimeExpression<Type> {\n\t\treturn Object.assign({}, super._getExpressions(), {\n\t\t\tmidi : {\n\t\t\t\tregexp : /^(\\d+(?:\\.\\d+)?midi)/,\n\t\t\t\tmethod(value): number {\n\t\t\t\t\tif (this.defaultUnits === \""midi\"") {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn FrequencyClass.mtof(value);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tnote : {\n\t\t\t\tregexp : /^([a-g]{1}(?:b|#|x|bb)?)(-?[0-9]+)/i,\n\t\t\t\tmethod(pitch, octave): number {\n\t\t\t\t\tconst index = noteToScaleIndex[pitch.toLowerCase()];\n\t\t\t\t\tconst noteNumber = index + (parseInt(octave, 10) + 1) * 12;\n\t\t\t\t\tif (this.defaultUnits === \""midi\"") {\n\t\t\t\t\t\treturn noteNumber;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn FrequencyClass.mtof(noteNumber);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\ttr : {\n\t\t\t\tregexp : /^(\\d+(?:\\.\\d+)?):(\\d+(?:\\.\\d+)?):?(\\d+(?:\\.\\d+)?)?/,\n\t\t\t\tmethod(m, q, s): number {\n\t\t\t\t\tlet total = 1;\n\t\t\t\t\tif (m && m !== \""0\"") {\n\t\t\t\t\t\ttotal *= this._beatsToUnits(this._getTimeSignature() * parseFloat(m));\n\t\t\t\t\t}\n\t\t\t\t\tif (q && q !== \""0\"") {\n\t\t\t\t\t\ttotal *= this._beatsToUnits(parseFloat(q));\n\t\t\t\t\t}\n\t\t\t\t\tif (s && s !== \""0\"") {\n\t\t\t\t\t\ttotal *= this._beatsToUnits(parseFloat(s) / 4);\n\t\t\t\t\t}\n\t\t\t\t\treturn total;\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tEXPRESSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  Transposes the frequency by the given number of semitones.\n\t *  @return  A new transposed frequency\n\t *  @example\n\t * Frequency(\""A4\"").transpose(3); //\""C5\""\n\t */\n\ttranspose(interval: Interval): FrequencyClass {\n\t\treturn new FrequencyClass(this.context, this.valueOf() * intervalToFrequencyRatio(interval));\n\t}\n\n\t/**\n\t *  Takes an array of semitone intervals and returns\n\t *  an array of frequencies transposed by those intervals.\n\t *  @return  Returns an array of Frequencies\n\t *  @example\n\t * Frequency(\""A4\"").harmonize([0, 3, 7]); //[\""A4\"", \""C5\"", \""E5\""]\n\t */\n\tharmonize(intervals: Interval[]): FrequencyClass[] {\n\t\treturn intervals.map(interval => {\n\t\t\treturn this.transpose(interval);\n\t\t});\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tUNIT CONVERSIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Return the value of the frequency as a MIDI note\n\t * @example\n\t * Frequency(\""C4\"").toMidi(); //60\n\t */\n\ttoMidi(): MidiNote {\n\t\treturn ftom(this.valueOf());\n\t}\n\n\t/**\n\t * Return the value of the frequency in Scientific Pitch Notation\n\t * @example\n\t * Frequency(69, \""midi\"").toNote(); //\""A4\""\n\t */\n\ttoNote(): Note {\n\t\tconst freq = this.toFrequency();\n\t\tconst log = Math.log2(freq / FrequencyClass.A4);\n\t\tlet noteNumber = Math.round(12 * log) + 57;\n\t\tconst octave = Math.floor(noteNumber / 12);\n\t\tif (octave < 0) {\n\t\t\tnoteNumber += -12 * octave;\n\t\t}\n\t\tconst noteName = scaleIndexToNote[noteNumber % 12];\n\t\treturn noteName + octave.toString() as Note;\n\t}\n\n\t/**\n\t *  Return the duration of one cycle in seconds.\n\t */\n\ttoSeconds(): Seconds {\n\t\treturn 1 / super.toSeconds();\n\t}\n\n\t/**\n\t *  Return the duration of one cycle in ticks\n\t */\n\ttoTicks(): Ticks {\n\t\tconst quarterTime = this._beatsToUnits(1);\n\t\tconst quarters = this.valueOf() / quarterTime;\n\t\treturn Math.floor(quarters * this._getPPQ());\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tUNIT CONVERSIONS HELPERS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  With no arguments, return 0\n\t */\n\tprotected _noArg(): Type {\n\t\treturn 0 as Type;\n\t}\n\n\t/**\n\t *  Returns the value of a frequency in the current units\n\t */\n\tprotected _frequencyToUnits(freq: Hertz): Type {\n\t\treturn freq as Type;\n\t}\n\n\t/**\n\t *  Returns the value of a tick in the current time units\n\t */\n\tprotected _ticksToUnits(ticks: Ticks): Type {\n\t\treturn 1 / ((ticks * 60) / (this._getBpm() * this._getPPQ())) as Type;\n\t}\n\n\t/**\n\t *  Return the value of the beats in the current units\n\t */\n\tprotected _beatsToUnits(beats: number): Type {\n\t\treturn 1 / super._beatsToUnits(beats) as Type;\n\t}\n\n\t/**\n\t *  Returns the value of a second in the current units\n\t */\n\tprotected _secondsToUnits(seconds: Seconds): Type {\n\t\treturn 1 / seconds as Type;\n\t}\n\n\t/**\n\t * Convert a MIDI note to frequency value.\n\t * @param  midi The midi number to convert.\n\t * @return The corresponding frequency value\n\t * @example\n\t * FrequencyClass.mtof(69); // returns 440\n\t */\n\tstatic mtof(midi: MidiNote): Hertz {\n\t\treturn mtof(midi);\n\t}\n\n\t/**\n\t * Convert a frequency value to a MIDI note.\n\t * @param frequency The value to frequency value to convert.\n\t * @example\n\t * Frequency.ftom(440); // returns 69\n\t */\n\tstatic ftom(frequency: Hertz): MidiNote {\n\t\treturn ftom(frequency);\n\t}\n}\n\n///////////////////////////////////////////////////////////////////////////\n// \tFREQUENCY CONVERSIONS\n///////////////////////////////////////////////////////////////////////////\n\n/**\n *  Note to scale index\n *  @type  {Object}\n *  @private\n */\nconst noteToScaleIndex = {\n\t// tslint:disable-next-line\n\t\""cbb\"" : -2, \""cb\"" : -1, \""c\"" : 0, \""c#\"" : 1, \""cx\"" : 2,\n\t\""dbb\"" : 0, \""db\"" : 1, \""d\"" : 2, \""d#\"" : 3, \""dx\"" : 4,\n\t\""ebb\"" : 2, \""eb\"" : 3, \""e\"" : 4, \""e#\"" : 5, \""ex\"" : 6,\n\t\""fbb\"" : 3, \""fb\"" : 4, \""f\"" : 5, \""f#\"" : 6, \""fx\"" : 7,\n\t\""gbb\"" : 5, \""gb\"" : 6, \""g\"" : 7, \""g#\"" : 8, \""gx\"" : 9,\n\t\""abb\"" : 7, \""ab\"" : 8, \""a\"" : 9, \""a#\"" : 10, \""ax\"" : 11,\n\t\""bbb\"" : 9, \""bb\"" : 10, \""b\"" : 11, \""b#\"" : 12, \""bx\"" : 13,\n};\n\n/**\n *  scale index to note (sharps)\n *  @type  {Array}\n *  @private\n */\nconst scaleIndexToNote = [\""C\"", \""C#\"", \""D\"", \""D#\"", \""E\"", \""F\"", \""F#\"", \""G\"", \""G#\"", \""A\"", \""A#\"", \""B\""];\n\n/**\n * Convert a value into a FrequencyClass object.\n */\nexport function Frequency(value?: TimeValue | Frequency, units?: FrequencyUnit): FrequencyClass {\n\treturn new FrequencyClass(getContext(), value, units);\n}\n"",""import { getContext } from \""../Global\"";\nimport { Seconds, Ticks } from \""../type/Units\"";\nimport { TimeClass } from \""./Time\"";\nimport { TimeBaseUnit, TimeValue } from \""./TimeBase\"";\n\n/**\n * TransportTime is a the time along the Transport's\n * timeline. It is similar to Tone.Time, but instead of evaluating\n * against the AudioContext's clock, it is evaluated against\n * the Transport's position. See [TransportTime wiki](https://github.com/Tonejs/Tone.js/wiki/TransportTime).\n */\nexport class TransportTimeClass<Type extends Seconds | Ticks = Seconds> extends TimeClass<Type> {\n\n\tname = \""TransportTime\"";\n\n\t/**\n\t * Return the current time in whichever context is relevant\n\t */\n\tprotected _now(): Type {\n\t\treturn this.context.transport.seconds as Type;\n\t}\n}\n\n/**\n * TransportTime is a the time along the Transport's\n * timeline. It is similar to Tone.Time, but instead of evaluating\n * against the AudioContext's clock, it is evaluated against\n * the Transport's position. See [TransportTime wiki](https://github.com/Tonejs/Tone.js/wiki/TransportTime).\n */\nexport function TransportTime(value?: TimeValue, units?: TimeBaseUnit): TransportTimeClass {\n\treturn new TransportTimeClass(getContext(), value, units);\n}\n"",""import { getContext } from \""../Global\"";\nimport { Tone } from \""../Tone\"";\nimport { FrequencyClass } from \""../type/Frequency\"";\nimport { TimeClass } from \""../type/Time\"";\nimport { TransportTimeClass } from \""../type/TransportTime\"";\nimport { Frequency, Hertz, Seconds, Ticks, Time } from \""../type/Units\"";\nimport { getDefaultsFromInstance, omitFromObject, optionsFromArguments } from \""../util/Defaults\"";\nimport { RecursivePartial } from \""../util/Interface\"";\nimport { isArray, isBoolean, isDefined, isNumber, isString, isUndef } from \""../util/TypeCheck\"";\nimport { Context } from \""./Context\"";\n\n/**\n * A unit which process audio\n */\nexport interface ToneWithContextOptions {\n\tcontext: Context;\n}\n\n/**\n * The Base class for all nodes that have an AudioContext.\n */\nexport abstract class ToneWithContext<Options extends ToneWithContextOptions> extends Tone {\n\n\t/**\n\t * The context belonging to the node.\n\t */\n\treadonly context: Context;\n\n\t/**\n\t * The default context to use if no AudioContext is passed in to the constructor\n\t */\n\treadonly defaultContext?: Context;\n\n\tconstructor(context?: Context | Partial<ToneWithContextOptions>) {\n\t\tconst options = optionsFromArguments(ToneWithContext.getDefaults(), arguments, [\""context\""]);\n\t\tsuper();\n\t\tif (this.defaultContext) {\n\t\t\tthis.context = this.defaultContext;\n\t\t} else {\n\t\t\tthis.context = options.context;\n\t\t}\n\t}\n\n\tstatic getDefaults(): ToneWithContextOptions {\n\t\treturn {\n\t\t\tcontext: getContext(),\n\t\t};\n\t}\n\n\t/**\n\t * Return the current time of the Context clock plus the lookAhead.\n\t */\n\tnow(): Seconds {\n\t\treturn this.context.currentTime + this.context.lookAhead;\n\t}\n\n\t/**\n\t * Return the current time of the Context clock without any lookAhead.\n\t */\n\timmediate(): Seconds {\n\t\treturn this.context.currentTime;\n\t}\n\n\t/**\n\t * The duration in seconds of one sample.\n\t */\n\tget sampleTime(): Seconds {\n\t\treturn 1 / this.context.sampleRate;\n\t}\n\n\t/**\n\t * The number of seconds of 1 processing block (128 samples)\n\t */\n\tget blockTime(): Seconds {\n\t\treturn 128 / this.context.sampleRate;\n\t}\n\n\t/**\n\t * Convert the incoming time to seconds\n\t */\n\ttoSeconds(time?: Time): Seconds {\n\t\treturn new TimeClass(this.context, time).toSeconds();\n\t}\n\n\t/**\n\t * Convert the input to a frequency number\n\t */\n\ttoFrequency(freq: Frequency): Hertz {\n\t\treturn new FrequencyClass(this.context, freq).toFrequency();\n\t}\n\n\t/**\n\t * Convert the input time into ticks\n\t */\n\ttoTicks(time?: Time | TimeClass): Ticks {\n\t\treturn new TransportTimeClass(this.context, time).toTicks();\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tGET/SET\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Get the object's attributes.\n\t * @example\n\t * osc.get();\n\t * //returns {\""type\"" : \""sine\"", \""frequency\"" : 440, ...etc}\n\t */\n\tget(): Options {\n\t\tconst defaults = getDefaultsFromInstance(this) as Options;\n\t\tObject.keys(defaults).forEach(attribute => {\n\t\t\tif (Reflect.has(this, attribute)) {\n\t\t\t\tconst member = this[attribute];\n\t\t\t\tif (isDefined(member) && isDefined(member.value) && isDefined(member.setValueAtTime)) {\n\t\t\t\t\tdefaults[attribute] = member.value;\n\t\t\t\t} else if (member instanceof ToneWithContext) {\n\t\t\t\t\tdefaults[attribute] = member.get();\n\t\t\t\t// otherwise make sure it's a serializable type\n\t\t\t\t} else if (isArray(member) || isNumber(member) || isString(member) || isBoolean(member)) {\n\t\t\t\t\tdefaults[attribute] = member;\n\t\t\t\t} else {\n\t\t\t\t\t// remove all undefined and unserializable attributes\n\t\t\t\t\tdelete defaults[attribute];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn defaults;\n\t}\n\n\t/**\n\t * Set the parameters at once. Either pass in an\n\t * object mapping parameters to values, or to set a\n\t * single parameter, by passing in a string and value.\n\t * The last argument is an optional ramp time which\n\t * will ramp any signal values to their destination value\n\t * over the duration of the rampTime.\n\t * @param  params\n\t * @example\n\t * //set values using an object\n\t * filter.set({\n\t * \t\""frequency\"" : 300,\n\t * \t\""type\"" : \""highpass\""\n\t * });\n\t */\n\tset(props: RecursivePartial<Options>): this {\n\t\tObject.keys(props).forEach(attribute => {\n\t\t\tif (Reflect.has(this, attribute) && isDefined(this[attribute])) {\n\t\t\t\tif (this[attribute] && isDefined(this[attribute].value) && isDefined(this[attribute].setValueAtTime)) {\n\t\t\t\t\t// small optimization\n\t\t\t\t\tif (this[attribute].value !== props[attribute]) {\n\t\t\t\t\t\tthis[attribute].value = props[attribute];\n\t\t\t\t\t}\n\t\t\t\t} else if (this[attribute] instanceof ToneWithContext) {\n\t\t\t\t\tthis[attribute].set(props[attribute]);\n\t\t\t\t} else {\n\t\t\t\t\tthis[attribute] = props[attribute];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n}\n"",""import { AbstractParam } from \""../context/AbstractParam\"";\nimport { dbToGain, gainToDb } from \""../type/Conversions\"";\nimport { AudioRange, Decibels, Frequency, NormalRange, Positive, Time, Unit, UnitName } from \""../type/Units\"";\nimport { isAudioParam } from \""../util/AdvancedTypeCheck\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { Timeline } from \""../util/Timeline\"";\nimport { isDefined } from \""../util/TypeCheck\"";\nimport { ToneWithContext, ToneWithContextOptions } from \""./ToneWithContext\"";\n\nexport interface ParamOptions extends ToneWithContextOptions {\n\tunits: UnitName;\n\tvalue?: any;\n\tparam: AudioParam;\n\tconvert: boolean;\n}\n\n/**\n * the possible automation types\n */\ntype AutomationType = \""linear\"" | \""exponential\"" | \""setValue\"" | \""setTarget\"" | \""cancel\"";\n\n/**\n * The events on the automation\n */\nexport interface AutomationEvent {\n\ttype: AutomationType;\n\ttime: number;\n\tvalue: number;\n\tconstant?: number;\n}\n\n/**\n *  Param wraps the native Web Audio's AudioParam to provide\n * additional unit conversion functionality. It also\n * serves as a base-class for classes which have a single,\n * automatable parameter.\n */\nexport class Param<Type extends Unit = number>\nextends ToneWithContext<ParamOptions>\nimplements AbstractParam<Type> {\n\n\tname = \""Param\"";\n\n\tstatic getDefaults(): ParamOptions {\n\t\treturn Object.assign(ToneWithContext.getDefaults(), {\n\t\t\tconvert: true,\n\t\t\tunits: \""number\"" as UnitName,\n\t\t} as ParamOptions);\n\t}\n\n\t/**\n\t * The input connection\n\t */\n\treadonly input: AudioParam;\n\treadonly units: UnitName;\n\tconvert: boolean;\n\toverridden: boolean = false;\n\n\t/**\n\t * The timeline which tracks all of the automations.\n\t */\n\tprotected _events: Timeline<AutomationEvent>;\n\n\t/**\n\t *  The native parameter to control\n\t */\n\tprotected _param: AudioParam;\n\n\t/**\n\t *  The default value before anything is assigned\n\t */\n\tprotected _initialValue: number;\n\n\t/**\n\t *  The minimum output value\n\t */\n\tprivate _minOutput = 1e-7;\n\n\tconstructor(param: AudioParam, units?: Unit, convert?: boolean);\n\tconstructor(options: Partial<ParamOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(Param.getDefaults(), arguments, [\""param\"", \""units\"", \""convert\""]));\n\n\t\tconst options = optionsFromArguments(Param.getDefaults(), arguments, [\""param\"", \""units\"", \""convert\""]);\n\n\t\tthis.assert(isDefined(options.param) && isAudioParam(options.param), \""param must be an AudioParam\"");\n\n\t\t// initialize\n\t\tthis._param = this.input = options.param;\n\t\tthis._events = new Timeline<AutomationEvent>(1000);\n\t\tthis._initialValue = this._param.defaultValue;\n\t\tthis.units = options.units;\n\t\tthis.convert = options.convert;\n\n\t\t// if the value is defined, set it immediately\n\t\tif (isDefined(options.value) && options.value !== this._toType(this._initialValue)) {\n\t\t\tthis.setValueAtTime(options.value, 0);\n\t\t}\n\t}\n\n\tget value(): Type {\n\t\tconst now = this.now();\n\t\treturn this.getValueAtTime(now);\n\t}\n\tset value(value: Type) {\n\t\tthis._initialValue = this._fromType(value);\n\t\tthis.cancelScheduledValues(this.now());\n\t\tthis.setValueAtTime(value, this.now());\n\t}\n\n\tget minValue(): number {\n\t\tif (this.units === \""time\"" || this.units === \""frequency\"" ||\n\t\t\tthis.units === \""normalRange\"" || this.units === \""positive\"" ||\n\t\t\tthis.units === \""transportTime\"" || this.units === \""ticks\"" ||\n\t\t\tthis.units === \""bpm\"" || this.units === \""hertz\"" || this.units === \""samples\"") {\n\t\t\treturn 0;\n\t\t} else if (this.units === \""audioRange\"") {\n\t\t\treturn -1;\n\t\t} else if (this.units === \""decibels\"") {\n\t\t\treturn -Infinity;\n\t\t} else {\n\t\t\treturn this._param.minValue;\n\t\t}\n\t}\n\n\tget maxValue(): number {\n\t\tif (this.units === \""normalRange\"" ||\n\t\t\tthis.units === \""audioRange\"") {\n\t\t\treturn 1;\n\t\t} else {\n\t\t\treturn this._param.maxValue;\n\t\t}\n\t}\n\n\t/**\n\t * Type guard based on the unit name\n\t */\n\tprivate _is<T>(arg: any, type: UnitName): arg is T {\n\t\treturn this.units === type;\n\t}\n\n\t/**\n\t *  Convert the given value from the type specified by Param.units\n\t *  into the destination value (such as Gain or Frequency).\n\t */\n\tprotected _fromType(val: Type): number {\n\t\tif (this.convert && !this.overridden) {\n\t\t\tif (this._is<Time>(val, \""time\"")) {\n\t\t\t\treturn this.toSeconds(val);\n\t\t\t} else if (this._is<Decibels>(val, \""decibels\"")) {\n\t\t\t\treturn dbToGain(val);\n\t\t\t} else if (this._is<Frequency>(val, \""frequency\"")) {\n\t\t\t\treturn this.toFrequency(val);\n\t\t\t} else if (this._is<NormalRange>(val, \""normalRange\"")) {\n\t\t\t\treturn Math.min(Math.max(val, 0), 1);\n\t\t\t} else if (this._is<AudioRange>(val, \""audioRange\"")) {\n\t\t\t\treturn Math.min(Math.max(val, -1), 1);\n\t\t\t} else if (this._is<Positive>(val, \""positive\"")) {\n\t\t\t\treturn Math.max(val, 0);\n\t\t\t} else if (this._is<number>(val, \""number\"")) {\n\t\t\t\treturn val;\n\t\t\t} else {\n\t\t\t\treturn val as number;\n\t\t\t}\n\t\t} else {\n\t\t\treturn val as number;\n\t\t}\n\t}\n\n\t/**\n\t * Convert the parameters value into the units specified by Param.units.\n\t */\n\tprotected _toType(val: number): Type {\n\t\tif (this.convert && this.units === \""decibels\"") {\n\t\t\treturn gainToDb(val) as Type;\n\t\t} else {\n\t\t\treturn val as Type;\n\t\t}\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// ABSTRACT PARAM INTERFACE\n\t// all docs are generated from ParamInterface.ts\n\t///////////////////////////////////////////////////////////////////////////\n\n\tsetValueAtTime(value: Type, time: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tconst numericValue = this._fromType(value);\n\t\tthis.assert(isFinite(numericValue) && isFinite(computedTime),\n\t\t\t`Invalid argument(s) to setValueAtTime: ${JSON.stringify(value)}, ${JSON.stringify(time)}`);\n\n\t\tthis.log(this.units, \""setValue\"", value, computedTime);\n\t\tthis._events.add({\n\t\t\ttime: computedTime,\n\t\t\ttype: \""setValue\"",\n\t\t\tvalue: numericValue,\n\t\t});\n\t\tthis._param.setValueAtTime(numericValue, computedTime);\n\t\treturn this;\n\t}\n\n\tgetValueAtTime(time: Time): Type {\n\t\tconst computedTime = Math.max(this.toSeconds(time), 0);\n\t\tconst after = this._events.getAfter(computedTime);\n\t\tconst before = this._events.get(computedTime);\n\t\tlet value = this._initialValue;\n\t\t// if it was set by\n\t\tif (before === null) {\n\t\t\tvalue = this._initialValue;\n\t\t} else if (before.type === \""setTarget\"" && (after === null || after.type === \""setValue\"")) {\n\t\t\tconst previous = this._events.getBefore(before.time);\n\t\t\tlet previousVal;\n\t\t\tif (previous === null) {\n\t\t\t\tpreviousVal = this._initialValue;\n\t\t\t} else {\n\t\t\t\tpreviousVal = previous.value;\n\t\t\t}\n\t\t\tif (isDefined(before.constant)) {\n\t\t\t\tvalue = this._exponentialApproach(before.time, previousVal, before.value, before.constant, computedTime);\n\t\t\t}\n\t\t} else if (after === null) {\n\t\t\tvalue = before.value;\n\t\t} else if (after.type === \""linear\"" || after.type === \""exponential\"") {\n\t\t\tlet beforeValue = before.value;\n\t\t\tif (before.type === \""setTarget\"") {\n\t\t\t\tconst previous = this._events.getBefore(before.time);\n\t\t\t\tif (previous === null) {\n\t\t\t\t\tbeforeValue = this._initialValue;\n\t\t\t\t} else {\n\t\t\t\t\tbeforeValue = previous.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (after.type === \""linear\"") {\n\t\t\t\tvalue = this._linearInterpolate(before.time, beforeValue, after.time, after.value, computedTime);\n\t\t\t} else {\n\t\t\t\tvalue = this._exponentialInterpolate(before.time, beforeValue, after.time, after.value, computedTime);\n\t\t\t}\n\t\t} else {\n\t\t\tvalue = before.value;\n\t\t}\n\t\treturn this._toType(value);\n\t}\n\n\tsetRampPoint(time: Time): this {\n\t\ttime = this.toSeconds(time);\n\t\tlet currentVal = this.getValueAtTime(time);\n\t\tthis.cancelAndHoldAtTime(time);\n\t\tif (this._fromType(currentVal) === 0) {\n\t\t\tcurrentVal = this._toType(this._minOutput);\n\t\t}\n\t\tthis.setValueAtTime(currentVal, time);\n\t\treturn this;\n\t}\n\n\tlinearRampToValueAtTime(value: Type, endTime: Time): this {\n\t\tconst numericValue = this._fromType(value);\n\t\tconst computedTime = this.toSeconds(endTime);\n\t\tthis.assert(isFinite(numericValue) && isFinite(computedTime),\n\t\t\t`Invalid argument(s) to linearRampToValueAtTime: ${JSON.stringify(value)}, ${JSON.stringify(endTime)}`);\n\t\tthis._events.add({\n\t\t\ttime: computedTime,\n\t\t\ttype: \""linear\"",\n\t\t\tvalue : numericValue,\n\t\t});\n\t\tthis.log(this.units, \""linear\"", value, computedTime);\n\t\tthis._param.linearRampToValueAtTime(numericValue, computedTime);\n\t\treturn this;\n\t}\n\n\texponentialRampToValueAtTime(value: Type, endTime: Time): this {\n\t\tlet numericValue = this._fromType(value);\n\t\tnumericValue = Math.max(this._minOutput, numericValue);\n\t\tconst computedTime = this.toSeconds(endTime);\n\t\tthis.assert(isFinite(numericValue) && isFinite(computedTime),\n\t\t\t`Invalid argument(s) to exponentialRampToValueAtTime: ${JSON.stringify(value)}, ${JSON.stringify(endTime)}`);\n\t\t// store the event\n\t\tthis._events.add({\n\t\t\ttime: computedTime,\n\t\t\ttype: \""exponential\"",\n\t\t\tvalue : numericValue,\n\t\t});\n\t\tthis.log(this.units, \""exponential\"", value, computedTime);\n\t\tthis._param.exponentialRampToValueAtTime(numericValue, computedTime);\n\t\treturn this;\n\t}\n\n\texponentialRampTo(value: Type, rampTime: Time, startTime?: Time): this {\n\t\tstartTime = this.toSeconds(startTime);\n\t\tthis.setRampPoint(startTime);\n\t\tthis.exponentialRampToValueAtTime(value, startTime + this.toSeconds(rampTime));\n\t\treturn this;\n\t}\n\n\tlinearRampTo(value: Type, rampTime: Time, startTime?: Time): this {\n\t\tstartTime = this.toSeconds(startTime);\n\t\tthis.setRampPoint(startTime);\n\t\tthis.linearRampToValueAtTime(value, startTime + this.toSeconds(rampTime));\n\t\treturn this;\n\t}\n\n\ttargetRampTo(value: Type, rampTime: Time, startTime?: Time): this {\n\t\tstartTime = this.toSeconds(startTime);\n\t\tthis.setRampPoint(startTime);\n\t\tthis.exponentialApproachValueAtTime(value, startTime, rampTime);\n\t\treturn this;\n\t}\n\n\texponentialApproachValueAtTime(value: Type, time: Time, rampTime: Time): this {\n\t\ttime = this.toSeconds(time);\n\t\trampTime = this.toSeconds(rampTime);\n\t\tconst timeConstant = Math.log(rampTime + 1) / Math.log(200);\n\t\tthis.setTargetAtTime(value, time, timeConstant);\n\t\t// at 90% start a linear ramp to the final value\n\t\tthis.cancelAndHoldAtTime(time + rampTime * 0.9);\n\t\tthis.linearRampToValueAtTime(value, time + rampTime);\n\t\treturn this;\n\t}\n\n\tsetTargetAtTime(value: Type, startTime: Time, timeConstant: Positive): this {\n\t\tconst numericValue = this._fromType(value);\n\t\t// The value will never be able to approach without timeConstant > 0.\n\t\tthis.assert(isFinite(timeConstant) && timeConstant > 0, \""timeConstant must be a number greater than 0\"");\n\t\tconst computedTime = this.toSeconds(startTime);\n\t\tthis.assert(isFinite(numericValue) && isFinite(computedTime),\n\t\t\t`Invalid argument(s) to setTargetAtTime: ${JSON.stringify(value)}, ${JSON.stringify(startTime)}`);\n\t\tthis._events.add({\n\t\t\tconstant: timeConstant,\n\t\t\ttime: computedTime,\n\t\t\ttype: \""setTarget\"",\n\t\t\tvalue: numericValue,\n\t\t});\n\t\tthis.log(this.units, \""setTarget\"", value, computedTime, timeConstant);\n\t\tthis._param.setTargetAtTime(numericValue, computedTime, timeConstant);\n\t\treturn this;\n\t}\n\n\tsetValueCurveAtTime(values: Type[], startTime: Time, duration: Time, scaling: number = 1): this {\n\t\tduration = this.toSeconds(duration);\n\t\tstartTime = this.toSeconds(startTime);\n\t\tconst startingValue = this._fromType(values[0]) * scaling;\n\t\tthis.setValueAtTime(this._toType(startingValue), startTime);\n\t\tconst segTime = duration / (values.length - 1);\n\t\tfor (let i = 1; i < values.length; i++) {\n\t\t\tconst numericValue = this._fromType(values[i]) * scaling;\n\t\t\tthis.linearRampToValueAtTime(this._toType(numericValue), startTime + i * segTime);\n\t\t}\n\t\treturn this;\n\t}\n\n\tcancelScheduledValues(time: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis.assert(isFinite(computedTime), `Invalid argument to cancelScheduledValues: ${JSON.stringify(time)}`);\n\t\tthis._events.cancel(computedTime);\n\t\tthis._param.cancelScheduledValues(computedTime);\n\t\tthis.log(this.units, \""cancel\"", computedTime);\n\t\treturn this;\n\t}\n\n\tcancelAndHoldAtTime(time: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tconst valueAtTime = this._fromType(this.getValueAtTime(computedTime));\n\t\t// remove the schedule events\n\t\tthis.assert(isFinite(computedTime), `Invalid argument to cancelAndHoldAtTime: ${JSON.stringify(time)}`);\n\n\t\tthis.log(this.units, \""cancelAndHoldAtTime\"", computedTime, \""value=\"" + valueAtTime);\n\n\t\tthis._param.cancelScheduledValues(computedTime);\n\n\t\t// if there is an event at the given computedTime\n\t\t// and that even is not a \""set\""\n\t\tconst before = this._events.get(computedTime);\n\t\tconst after = this._events.getAfter(computedTime);\n\t\tif (before && before.time === computedTime) {\n\t\t\t// remove everything after\n\t\t\tif (after) {\n\t\t\t\tthis._events.cancel(after.time);\n\t\t\t} else {\n\t\t\t\tthis._events.cancel(computedTime + this.sampleTime);\n\t\t\t}\n\t\t} else if (after) {\n\t\t\t// cancel the next event(s)\n\t\t\tthis._events.cancel(after.time);\n\t\t\tif (after.type === \""linear\"") {\n\t\t\t\tthis.linearRampToValueAtTime(this._toType(valueAtTime), computedTime);\n\t\t\t} else if (after.type === \""exponential\"") {\n\t\t\t\tthis.exponentialRampToValueAtTime(this._toType(valueAtTime), computedTime);\n\t\t\t}\n\t\t}\n\n\t\t// set the value at the given time\n\t\tthis._events.add({\n\t\t\ttime: computedTime,\n\t\t\ttype: \""setValue\"",\n\t\t\tvalue: valueAtTime,\n\t\t});\n\t\tthis._param.setValueAtTime(valueAtTime, computedTime);\n\t\treturn this;\n\t}\n\n\trampTo(value: Type, rampTime: Time = 0.1, startTime?: Time): this {\n\t\tif (this.units === \""frequency\"" || this.units === \""bpm\"" || this.units === \""decibels\"") {\n\t\t\tthis.exponentialRampTo(value, rampTime, startTime);\n\t\t} else {\n\t\t\tthis.linearRampTo(value, rampTime, startTime);\n\t\t}\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._events.dispose();\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// \tAUTOMATION CURVE CALCULATIONS\n\t// \tMIT License, copyright (c) 2014 Jordan Santell\n\t///////////////////////////////////////////////////////////////////////////\n\n\t// Calculates the the value along the curve produced by setTargetAtTime\n\tprotected _exponentialApproach(t0: number, v0: number, v1: number, timeConstant: number, t: number): number {\n\t\treturn v1 + (v0 - v1) * Math.exp(-(t - t0) / timeConstant);\n\t}\n\n\t// Calculates the the value along the curve produced by linearRampToValueAtTime\n\tprotected _linearInterpolate(t0: number, v0: number, t1: number, v1: number, t: number): number {\n\t\treturn v0 + (v1 - v0) * ((t - t0) / (t1 - t0));\n\t}\n\n\t// Calculates the the value along the curve produced by exponentialRampToValueAtTime\n\tprotected _exponentialInterpolate(t0: number, v0: number, t1: number, v1: number, t: number): number {\n\t\treturn v0 * Math.pow(v1 / v0, (t - t0) / (t1 - t0));\n\t}\n}\n"",""import { Unit } from \""../type/Units\"";\nimport { isAudioNode, isAudioParam } from \""../util/AdvancedTypeCheck\"";\nimport { assert } from \""../util/Debug\"";\nimport { isDefined } from \""../util/TypeCheck\"";\nimport { Param } from \""./Param\"";\nimport { ToneWithContext, ToneWithContextOptions } from \""./ToneWithContext\"";\n\nexport type InputNode = ToneAudioNode | AudioNode |  Param<Unit> | AudioParam;\nexport type OutputNode = ToneAudioNode | AudioNode;\n\ninterface ChannelProperties {\n\tchannelCount: number;\n\tchannelCountMode: ChannelCountMode;\n\tchannelInterpretation: ChannelInterpretation;\n}\n\n/**\n * The possible options for this node\n */\nexport type ToneAudioNodeOptions = ToneWithContextOptions;\n\n/**\n *  ToneAudioNode is the base class for classes which process audio.\n */\nexport abstract class ToneAudioNode<Options extends ToneAudioNodeOptions = ToneAudioNodeOptions>\nextends ToneWithContext<Options> {\n\n\tabstract name = \""AudioNode\"";\n\n\t/**\n\t * The input node or nodes. If the object is a source,\n\t * it does not have any input and this.input is undefined.\n\t */\n\tabstract input: InputNode | undefined;\n\n\t/**\n\t * The output nodes. If the object is a sink,\n\t * it does not have any output and this.output is undefined.\n\t */\n\tabstract output: OutputNode | undefined;\n\n\t/**\n\t *  The number of inputs feeding into the AudioNode.\n\t *  For source nodes, this will be 0.\n\t */\n\tget numberOfInputs(): number {\n\t\tif (isDefined(this.input)) {\n\t\t\tif (isAudioParam(this.input) || this.input instanceof Param) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn this.input.numberOfInputs;\n\t\t\t}\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t *  The number of outputs of the AudioNode.\n\t */\n\tget numberOfOutputs(): number {\n\t\tif (isDefined(this.output)) {\n\t\t\treturn this.output.numberOfOutputs;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t * List all of the node that must be set to match the ChannelProperties\n\t */\n\tprotected _internalChannels: OutputNode[] = [];\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// AUDIO PROPERTIES\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Used to decide which nodes to get/set properties on\n\t */\n\tprivate _isAudioNode(node: any): node is AudioNode | ToneAudioNode {\n\t\treturn isDefined(node) && (node instanceof ToneAudioNode || isAudioNode(node));\n\t}\n\n\t/**\n\t * Get all of the audio nodes (either internal or input/output) which together\n\t * make up how the class node responds to channel input/output\n\t */\n\tprivate _getInternalNodes(): OutputNode[] {\n\t\tconst nodeList = this._internalChannels.slice(0);\n\t\tif (this._isAudioNode(this.input)) {\n\t\t\tnodeList.push(this.input);\n\t\t}\n\t\tif (this._isAudioNode(this.output)) {\n\t\t\tif (this.input !== this.output) {\n\t\t\t\tnodeList.push(this.output);\n\t\t\t}\n\t\t}\n\t\treturn nodeList;\n\t}\n\n\t/**\n\t * Set the audio options for this node such as channelInterpretation\n\t * channelCount, etc.\n\t * @param options\n\t */\n\tprivate _setChannelProperties(options: ChannelProperties): void {\n\t\tconst nodeList = this._getInternalNodes();\n\t\tnodeList.forEach(node => {\n\t\t\tnode.channelCount = options.channelCount;\n\t\t\tnode.channelCountMode = options.channelCountMode;\n\t\t\tnode.channelInterpretation = options.channelInterpretation;\n\t\t});\n\t}\n\n\t/**\n\t * Get the current audio options for this node such as channelInterpretation\n\t * channelCount, etc.\n\t */\n\tprivate _getChannelProperties(): ChannelProperties {\n\t\tconst nodeList = this._getInternalNodes();\n\t\tthis.assert(nodeList.length > 0, \""ToneAudioNode does not have any internal nodes\"");\n\t\t// use the first node to get properties\n\t\t// they should all be the same\n\t\tconst node = nodeList[0];\n\t\treturn {\n\t\t\tchannelCount: node.channelCount,\n\t\t\tchannelCountMode: node.channelCountMode,\n\t\t\tchannelInterpretation: node.channelInterpretation,\n\t\t};\n\t}\n\n\t/**\n\t *  channelCount is the number of channels used when up-mixing and down-mixing\n\t *  connections to any inputs to the node. The default value is 2 except for\n\t *  specific nodes where its value is specially determined.\n\t */\n\tget channelCount(): number {\n\t\treturn this._getChannelProperties().channelCount;\n\t}\n\tset channelCount(channelCount) {\n\t\tconst props = this._getChannelProperties();\n\t\t// merge it with the other properties\n\t\tthis._setChannelProperties(Object.assign(props, { channelCount }));\n\t}\n\n\t/**\n\t *  channelCountMode determines how channels will be counted when up-mixing and\n\t *  down-mixing connections to any inputs to the node.\n\t *  The default value is \""max\"". This attribute has no effect for nodes with no inputs.\n\t * * \""max\"" - computedNumberOfChannels is the maximum of the number of channels of all\n\t * \t\tconnections to an input. In this mode channelCount is ignored.\n\t * * \""clamped-max\"" - computedNumberOfChannels is determined as for \""max\"" and then clamped\n\t * \t\tto a maximum value of the given channelCount.\n\t * * \""explicit\"" - computedNumberOfChannels is the exact value as specified by the channelCount.\n\t */\n\tget channelCountMode(): ChannelCountMode {\n\t\treturn this._getChannelProperties().channelCountMode;\n\t}\n\tset channelCountMode(channelCountMode) {\n\t\tconst props = this._getChannelProperties();\n\t\t// merge it with the other properties\n\t\tthis._setChannelProperties(Object.assign(props, { channelCountMode }));\n\t}\n\n\t/**\n\t *  channelInterpretation determines how individual channels will be treated\n\t *  when up-mixing and down-mixing connections to any inputs to the node.\n\t *  The default value is \""speakers\"".\n\t */\n\tget channelInterpretation(): ChannelInterpretation {\n\t\treturn this._getChannelProperties().channelInterpretation;\n\t}\n\tset channelInterpretation(channelInterpretation) {\n\t\tconst props = this._getChannelProperties();\n\t\t// merge it with the other properties\n\t\tthis._setChannelProperties(Object.assign(props, { channelInterpretation }));\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// CONNECTIONS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * connect the output of a ToneAudioNode to an AudioParam, AudioNode, or ToneAudioNode\n\t * @param unit The output to connect to\n\t * @param outputNum The output to connect from\n\t * @param inputNum The input to connect to\n\t */\n\tconnect(destination: InputNode, outputNum = 0, inputNum = 0): this {\n\t\tconnect(this, destination, outputNum, inputNum);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Connect the output to the context's destination node.\n\t */\n\ttoDestination(): this {\n\t\tthis.connect(this.context.destination);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Connect the output to the context's destination node.\n\t * alias for {@link toDestination}\n\t * @deprecated\n\t */\n\ttoMaster(): this {\n\t\tconsole.warn(\""toMaster() has been renamed toDestination()\"");\n\t\treturn this.toDestination();\n\t}\n\n\t/**\n\t *  disconnect the output\n\t *  @param output Either the output index to disconnect if the output is an array, or the node to disconnect from.\n\t */\n\tdisconnect(destination?: InputNode, outputNum = 0, inputNum = 0): this {\n\t\tdisconnect(this, destination, outputNum, inputNum);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Connect the output of this node to the rest of the nodes in series.\n\t *  @example\n\t *  //connect a node to an effect, panVol and then to the master output\n\t *  node.chain(effect, panVol, Tone.Destination);\n\t */\n\tchain(...nodes: InputNode[]): this {\n\t\tconnectSeries(this, ...nodes);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  connect the output of this node to the rest of the nodes in parallel.\n\t */\n\tfan(...nodes: InputNode[]): this {\n\t\tnodes.forEach(node => this.connect(node));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Dispose and disconnect\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tif (isDefined(this.input)) {\n\t\t\tif (this.input instanceof ToneAudioNode) {\n\t\t\t\tthis.input.dispose();\n\t\t\t} else if (isAudioNode(this.input)) {\n\t\t\t\tthis.input.disconnect();\n\t\t\t}\n\t\t}\n\t\tif (isDefined(this.output)) {\n\t\t\tif (this.output instanceof ToneAudioNode) {\n\t\t\t\tthis.output.dispose();\n\t\t\t} else if (isAudioNode(this.output)) {\n\t\t\t\tthis.output.disconnect();\n\t\t\t}\n\t\t}\n\t\tthis._internalChannels = [];\n\t\treturn this;\n\t}\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// CONNECTIONS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n *  connect together all of the arguments in series\n *  @param nodes\n */\nexport function connectSeries(...nodes: InputNode[]): void {\n\tconst first = nodes.shift();\n\tnodes.reduce((prev, current) => {\n\t\tif (prev instanceof ToneAudioNode) {\n\t\t\tprev.connect(current);\n\t\t} else if (isAudioNode(prev)) {\n\t\t\tconnect(prev, current);\n\t\t}\n\t\treturn current;\n\t}, first);\n}\n\n/**\n * Connect two nodes together so that signal flows from the\n * first node to the second. Optionally specify the input and output channels.\n * @param srcNode The source node\n * @param dstNode The destination node\n * @param outputNumber The output channel of the srcNode\n * @param inputNumber The input channel of the dstNode\n */\nexport function connect(srcNode: OutputNode, dstNode: InputNode, outputNumber = 0, inputNumber = 0): void {\n\n\tassert(isDefined(srcNode), \""Cannot connect from undefined node\"");\n\tassert(isDefined(dstNode), \""Cannot connect to undefined node\"");\n\n\tif (dstNode instanceof ToneAudioNode || isAudioNode(dstNode)) {\n\t\tassert(dstNode.numberOfInputs > 0, \""Cannot connect to node with no inputs\"");\n\t}\n\tassert(srcNode.numberOfOutputs > 0, \""Cannot connect from node with no outputs\"");\n\n\t// resolve the input of the dstNode\n\twhile (dstNode instanceof ToneAudioNode || dstNode instanceof Param) {\n\t\tif (isDefined(dstNode.input)) {\n\t\t\tdstNode = dstNode.input;\n\t\t}\n\t}\n\n\twhile (srcNode instanceof ToneAudioNode) {\n\t\tif (isDefined(srcNode.output)) {\n\t\t\tsrcNode = srcNode.output;\n\t\t}\n\t}\n\n\t// make the connection\n\tif (isAudioParam(dstNode)) {\n\t\tsrcNode.connect(dstNode as AudioParam, outputNumber);\n\t} else {\n\t\tsrcNode.connect(dstNode, outputNumber, inputNumber);\n\t}\n}\n\n/**\n * Disconnect a node from all nodes or optionally include a destination node and input/output channels.\n * @param srcNode The source node\n * @param dstNode The destination node\n * @param outputNumber The output channel of the srcNode\n * @param inputNumber The input channel of the dstNode\n */\nexport function disconnect(\n\tsrcNode: OutputNode,\n\tdstNode?: InputNode,\n\toutputNumber = 0,\n\tinputNumber = 0,\n): void {\n\n\t// resolve the destination node\n\tif (isDefined(dstNode)) {\n\t\twhile (dstNode instanceof ToneAudioNode) {\n\t\t\tif (dstNode.input) {\n\t\t\t\tdstNode = dstNode.input;\n\t\t\t}\n\t\t}\n\t}\n\n\t// resolve the src node\n\twhile (!(isAudioNode(srcNode))) {\n\t\tif (isDefined(srcNode.output)) {\n\t\t\tsrcNode = srcNode.output;\n\t\t}\n\t}\n\n\tif (isAudioParam(dstNode)) {\n\t\tsrcNode.disconnect(dstNode as AudioParam, outputNumber);\n\t} else if (isAudioNode(dstNode)) {\n\t\tsrcNode.disconnect(dstNode, outputNumber, inputNumber);\n\t} else {\n\t\tsrcNode.disconnect();\n\t}\n}\n"",""import { isArray } from \""./TypeCheck\"";\n\n// return an interface which excludes certain keys\nexport type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;\n\n/**\n *  Make the property not writable using `defineProperty`. Internal use only.\n */\nexport function readOnly(target: object, property: string | string[]): void {\n\tif (isArray(property)) {\n\t\tproperty.forEach(str => readOnly(target, str));\n\t} else {\n\t\tObject.defineProperty(target, property, {\n\t\t\tenumerable: true,\n\t\t\twritable: false,\n\t\t});\n\t}\n}\n\n/**\n *  Make an attribute writeable. Internal use only.\n */\nexport function writable(target: object, property: string | string[]): void {\n\tif (isArray(property)) {\n\t\tproperty.forEach(str => writable(target, str));\n\t} else {\n\t\tObject.defineProperty(target, property, {\n\t\t\twritable: true,\n\t\t});\n\t}\n}\n\nexport const noOp: (...args: any[]) => any = () => {\n\t// no op!\n};\n\n/**\n * Recursive Partial taken from here: https://stackoverflow.com/a/51365037\n */\nexport type RecursivePartial<T> = {\n\t[P in keyof T]?:\n\tT[P] extends Array<infer U> ? Array<RecursivePartial<U>> :\n\tT[P] extends object ? RecursivePartial<T[P]> :\n\tT[P];\n};\n"",""import { Param } from \""../context/Param\"";\nimport { GainFactor, Unit, UnitName } from \""../type/Units\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { readOnly } from \""../util/Interface\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""./ToneAudioNode\"";\n\ninterface GainOptions extends ToneAudioNodeOptions {\n\tgain: number;\n\tunits: UnitName;\n\tconvert: boolean;\n}\n\n/**\n * A thin wrapper around the Native Web Audio GainNode.\n * The GainNode is a basic building block of the Web Audio\n * API and is useful for routing audio and adjusting gains.\n * @param  gain The initial gain of the GainNode\n * @param units The units of the gain parameter.\n */\nexport class Gain<Type extends Unit = GainFactor> extends ToneAudioNode<GainOptions> {\n\n\treadonly name = \""Gain\"";\n\n\t/**\n\t *  The gain parameter of the gain node.\n\t */\n\treadonly gain: Param<Type>;\n\n\t/**\n\t * The wrapped GainNode.\n\t */\n\tprivate _gainNode: GainNode = this.context.createGain();\n\n\t// input = output\n\treadonly input: GainNode = this._gainNode;\n\treadonly output: GainNode = this._gainNode;\n\n\tconstructor(gain?: GainFactor, units?: Unit);\n\tconstructor(options?: Partial<GainOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(Gain.getDefaults(), arguments, [\""gain\"", \""units\""]));\n\t\tconst options = optionsFromArguments(Gain.getDefaults(), arguments, [\""gain\"", \""units\""]);\n\n\t\tthis.gain = new Param({\n\t\t\tcontext : this.context,\n\t\t\tconvert : options.convert,\n\t\t\tparam : this._gainNode.gain,\n\t\t\tunits : options.units,\n\t\t\tvalue : options.gain,\n\t\t});\n\t\treadOnly(this, \""gain\"");\n\t}\n\n\tstatic getDefaults(): GainOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tconvert : true,\n\t\t\tgain : 1,\n\t\t\tunits : \""gain\"" as UnitName,\n\t\t});\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._gainNode.disconnect();\n\t\tthis.gain.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { createOfflineAudioContext } from \""../context/AudioContext\"";\nimport { Context } from \""../context/Context\"";\nimport { Seconds } from \""../type/Units\"";\nimport { isOfflineAudioContext } from \""../util/AdvancedTypeCheck\"";\n\n/**\n *  Wrapper around the OfflineAudioContext\n *  @param  channels  The number of channels to render\n *  @param  duration  The duration to render in samples\n *  @param sampleRate the sample rate to render at\n */\nexport class OfflineContext extends Context {\n\n\tname = \""OfflineContext\"";\n\n\t/**\n\t *  A private reference to the duration\n\t */\n\tprivate readonly _duration: Seconds;\n\n\t/**\n\t *  An artificial clock source\n\t */\n\tprivate _currentTime: Seconds = 0;\n\n\t/**\n\t * Private reference to the OfflineAudioContext.\n\t */\n\tprotected _context!: OfflineAudioContext;\n\n\tconstructor(context: OfflineAudioContext);\n\tconstructor(\n\t\tchannels: number,\n\t\tduration: Seconds, sampleRate: number,\n\t);\n\tconstructor() {\n\n\t\tsuper({\n\t\t\tclockSource: \""offline\"",\n\t\t\tcontext: isOfflineAudioContext(arguments[0]) ?\n\t\t\t\targuments[0] : createOfflineAudioContext(arguments[0], arguments[1] * arguments[2], arguments[2]),\n\t\t\tlookAhead: 0,\n\t\t\tupdateInterval: isOfflineAudioContext(arguments[0]) ?\n\t\t\t\t\t128 / arguments[0].sampleRate : 128 / arguments[2],\n\t\t});\n\n\t\tthis._duration = isOfflineAudioContext(arguments[0]) ?\n\t\t\targuments[0].length / arguments[0].sampleRate : arguments[1];\n\t}\n\n\t/**\n\t *  Override the now method to point to the internal clock time\n\t */\n\tnow(): Seconds {\n\t\treturn this._currentTime;\n\t}\n\n\t/**\n\t * Same as this.now()\n\t */\n\tget currentTime(): Seconds {\n\t\treturn this._currentTime;\n\t}\n\n\t/**\n\t *  Render the output of the OfflineContext\n\t */\n\trender(): Promise<AudioBuffer> {\n\t\twhile (this._duration - this._currentTime >= 0) {\n\t\t\t// invoke all the callbacks on that time\n\t\t\tthis.emit(\""tick\"");\n\t\t\t// increment the clock in 5ms chunks\n\t\t\tthis._currentTime += 128 / this.sampleRate;\n\t\t}\n\n\t\treturn this._context.startRendering();\n\t}\n\n\t/**\n\t *  Close the context\n\t */\n\tclose(): Promise<void> {\n\t\treturn Promise.resolve();\n\t}\n}\n"",""import { getContext } from \""../Global\"";\nimport { Tone } from \""../Tone\"";\nimport { Samples, Seconds, Time } from \""../type/Units\"";\nimport { isAudioBuffer } from \""../util/AdvancedTypeCheck\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { noOp } from \""../util/Interface\"";\nimport { isArray, isNumber, isString } from \""../util/TypeCheck\"";\n\ninterface ToneAudioBufferOptions {\n\turl?: string | AudioBuffer | ToneAudioBuffer;\n\treverse: boolean;\n\tonload: (buffer?: ToneAudioBuffer) => void;\n\tonerror: (error: Error) => void;\n}\n\n/**\n * AudioBuffer loading and storage. ToneAudioBuffer is used internally by all\n * classes that make requests for audio files such as Tone.Player,\n * Tone.Sampler and Tone.Convolver.\n *\n * Aside from load callbacks from individual buffers, ToneAudioBuffer\n * provides events which keep track of the loading progress\n * of _all_ of the buffers. These are ToneAudioBuffer.on(\""load\"" / \""progress\"" / \""error\"")\n *\n * @param url The url to load, or the audio buffer to set.\n * @param onload A callback which is invoked after the buffer is loaded.\n *                            It's recommended to use `ToneAudioBuffer.on('load', callback)` instead\n *                            since it will give you a callback when _all_ buffers are loaded.\n * @param onerror The callback to invoke if there is an error\n * @example\n * var buffer = new ToneAudioBuffer(\""path/to/sound.mp3\"", function(){\n * \t//the buffer is now available.\n * \tvar buff = buffer.get();\n * });\n * @example\n * //can load provide fallback extension types if the first type is not supported.\n * var buffer = new ToneAudioBuffer(\""path/to/sound.[mp3|ogg|wav]\"");\n */\nexport class ToneAudioBuffer extends Tone {\n\n\tname = \""ToneAudioBuffer\"";\n\n\t/**\n\t *  stores the loaded AudioBuffer\n\t */\n\tprivate _buffer?: AudioBuffer;\n\n\t/**\n\t *  indicates if the buffer should be reversed or not\n\t */\n\tprivate _reversed!: boolean;\n\n\t/**\n\t * Callback when the buffer is loaded.\n\t */\n\tonload: (buffer: ToneAudioBuffer) => void = noOp;\n\n\tconstructor(options?: Partial<ToneAudioBufferOptions>);\n\tconstructor(\n\t\turl?: string | ToneAudioBuffer | AudioBuffer,\n\t\tonload?: (buffer: ToneAudioBuffer) => void,\n\t\tonerror?: (error: Error) => void,\n\t);\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tconst options = optionsFromArguments(ToneAudioBuffer.getDefaults(), arguments, [\""url\"", \""onload\"", \""onerror\""]);\n\n\t\tthis.reverse = options.reverse;\n\t\tthis.onload = options.onload;\n\n\t\tif (options.url && isAudioBuffer(options.url) || options.url instanceof ToneAudioBuffer) {\n\t\t\tthis.set(options.url);\n\t\t} else if (isString(options.url)) {\n\t\t\t// initiate the download\n\t\t\tthis.load(options.url).catch(options.onerror);\n\t\t}\n\t}\n\n\tstatic getDefaults(): ToneAudioBufferOptions {\n\t\treturn {\n\t\t\tonerror: noOp,\n\t\t\tonload: noOp,\n\t\t\treverse: false,\n\t\t};\n\t}\n\n\t/**\n\t * The sample rate of the AudioBuffer\n\t */\n\tget sampleRate(): number {\n\t\tif (this._buffer) {\n\t\t\treturn this._buffer.sampleRate;\n\t\t} else {\n\t\t\treturn getContext().sampleRate;\n\t\t}\n\t}\n\n\t/**\n\t *  Pass in an AudioBuffer or ToneAudioBuffer to set the value of this buffer.\n\t */\n\tset(buffer: AudioBuffer | ToneAudioBuffer): this {\n\t\tif (buffer instanceof ToneAudioBuffer) {\n\t\t\t// if it's loaded, set it\n\t\t\tif (buffer.loaded) {\n\t\t\t\tthis._buffer = buffer.get();\n\t\t\t} else {\n\t\t\t\t// otherwise when it's loaded, invoke it's callback\n\t\t\t\tbuffer.onload = () => {\n\t\t\t\t\tthis.set(buffer);\n\t\t\t\t\tthis.onload(this);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tthis._buffer = buffer;\n\t\t}\n\t\t// reverse it initially\n\t\tif (this._reversed) {\n\t\t\tthis._reverse();\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  The audio buffer stored in the object.\n\t */\n\tget(): AudioBuffer | undefined {\n\t\treturn this._buffer;\n\t}\n\n\t/**\n\t *  Makes an fetch request for the selected url then decodes the file as an audio buffer.\n\t * \tInvokes the callback once the audio buffer loads.\n\t *  @param url The url of the buffer to load. filetype support depends on the browser.\n\t *  @returns A Promise which resolves with this ToneAudioBuffer\n\t */\n\tasync load(url: string): Promise<this> {\n\t\tconst promise = ToneAudioBuffer.load(url);\n\t\tToneAudioBuffer.downloads.push(promise);\n\t\ttry {\n\t\t\tconst audioBuffer = await promise;\n\t\t\tthis.set(audioBuffer);\n\t\t\t// invoke the onload method\n\t\t\tthis.onload(this);\n\t\t} catch (e) {\n\t\t\t// remove the failed file before throwing error\n\t\t\tconst index = ToneAudioBuffer.downloads.indexOf(promise);\n\t\t\tToneAudioBuffer.downloads.splice(index, 1);\n\t\t\tthrow e;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._buffer = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the audio buffer from the array.\n\t * To create a multichannel AudioBuffer, pass in a multidimensional array.\n\t * @param array The array to fill the audio buffer\n\t */\n\tfromArray(array: Float32Array | Float32Array[]): this {\n\t\tconst isMultidimensional = isArray(array) && array[0].length > 0;\n\t\tconst channels = isMultidimensional ? array.length : 1;\n\t\tconst len = isMultidimensional ? (array[0] as Float32Array).length : array.length;\n\t\tconst context = getContext();\n\t\tconst buffer = context.createBuffer(channels, len, context.sampleRate);\n\t\tconst multiChannelArray: Float32Array[] = !isMultidimensional && channels === 1 ?\n\t\t\t[array as Float32Array] : array as Float32Array[];\n\n\t\tfor (let c = 0; c < channels; c++) {\n\t\t\tbuffer.copyToChannel(multiChannelArray[c], c);\n\t\t}\n\t\tthis._buffer = buffer;\n\t\treturn this;\n\t}\n\n\t/**\n\t * \tSums multiple channels into 1 channel\n\t *  @param channel Optionally only copy a single channel from the array.\n\t */\n\ttoMono(chanNum?: number): this {\n\t\tif (isNumber(chanNum)) {\n\t\t\tthis.fromArray(this.toArray(chanNum));\n\t\t} else {\n\t\t\tlet outputArray = new Float32Array(this.length as number);\n\t\t\tconst numChannels = this.numberOfChannels;\n\t\t\tfor (let channel = 0; channel < numChannels; channel++) {\n\t\t\t\tconst channelArray = this.toArray(channel) as Float32Array;\n\t\t\t\tfor (let i = 0; i < channelArray.length; i++) {\n\t\t\t\t\toutputArray[i] += channelArray[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\t// divide by the number of channels\n\t\t\toutputArray = outputArray.map(sample => sample / numChannels);\n\t\t\tthis.fromArray(outputArray);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * \tGet the buffer as an array. Single channel buffers will return a 1-dimensional\n\t * \tFloat32Array, and multichannel buffers will return multidimensional arrays.\n\t *  @param channel Optionally only copy a single channel from the array.\n\t */\n\ttoArray(channel?: number): Float32Array | Float32Array[] {\n\t\tif (isNumber(channel)) {\n\t\t\treturn this.getChannelData(channel);\n\t\t} else if (this.numberOfChannels === 1) {\n\t\t\treturn this.toArray(0);\n\t\t} else {\n\t\t\tconst ret: Float32Array[] = [];\n\t\t\tfor (let c = 0; c < this.numberOfChannels; c++) {\n\t\t\t\tret[c] = this.getChannelData(c);\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t}\n\n\t/**\n\t *  Returns the Float32Array representing the PCM audio data for the specific channel.\n\t *  @param  channel  The channel number to return\n\t *  @return The audio as a TypedArray\n\t */\n\tgetChannelData(channel: number): Float32Array {\n\t\tif (this._buffer) {\n\t\t\treturn this._buffer.getChannelData(channel);\n\t\t} else {\n\t\t\treturn new Float32Array(0);\n\t\t}\n\t}\n\n\t/**\n\t *  Cut a subsection of the array and return a buffer of the\n\t *  subsection. Does not modify the original buffer\n\t *  @param start The time to start the slice\n\t *  @param end The end time to slice. If none is given will default to the end of the buffer\n\t */\n\tslice(start: Seconds, end: Seconds = this.duration): ToneAudioBuffer {\n\t\tconst startSamples = Math.floor(start * this.sampleRate);\n\t\tconst endSamples = Math.floor(end * this.sampleRate);\n\t\tthis.assert(startSamples < endSamples, \""The start time must be less than the end time\"");\n\t\tconst length = endSamples - startSamples;\n\t\tconst retBuffer = getContext().createBuffer(this.numberOfChannels, length, this.sampleRate);\n\t\tfor (let channel = 0; channel < this.numberOfChannels; channel++) {\n\t\t\tretBuffer.copyToChannel(this.getChannelData(channel).subarray(startSamples, endSamples), channel);\n\t\t}\n\t\treturn new ToneAudioBuffer(retBuffer);\n\t}\n\n\t/**\n\t *  Reverse the buffer.\n\t */\n\tprivate _reverse(): this {\n\t\tif (this.loaded) {\n\t\t\tfor (let i = 0; i < this.numberOfChannels; i++) {\n\t\t\t\tthis.getChannelData(i).reverse();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * If the buffer is loaded or not\n\t */\n\tget loaded(): boolean {\n\t\treturn this.length > 0;\n\t}\n\n\t/**\n\t * The duration of the buffer in seconds.\n\t */\n\tget duration(): Seconds {\n\t\tif (this._buffer) {\n\t\t\treturn this._buffer.duration;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t * The length of the buffer in samples\n\t */\n\tget length(): Samples {\n\t\tif (this._buffer) {\n\t\t\treturn this._buffer.length;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t * The number of discrete audio channels. Returns 0 if no buffer is loaded.\n\t */\n\tget numberOfChannels(): number {\n\t\tif (this._buffer) {\n\t\t\treturn this._buffer.numberOfChannels;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t * Reverse the buffer.\n\t */\n\tget reverse(): boolean {\n\t\treturn this._reversed;\n\t}\n\tset reverse(rev: boolean) {\n\t\tif (this._reversed !== rev) {\n\t\t\tthis._reversed = rev;\n\t\t\tthis._reverse();\n\t\t}\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// STATIC METHODS\n\t///////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  A path which is prefixed before every url.\n\t */\n\tstatic baseUrl = \""\"";\n\n\t/**\n\t *  Create a ToneAudioBuffer from the array. To create a multichannel AudioBuffer,\n\t *  pass in a multidimensional array.\n\t *  @param array The array to fill the audio buffer\n\t *  @return A ToneAudioBuffer created from the array\n\t */\n\tstatic fromArray(array: Float32Array | Float32Array[]): ToneAudioBuffer {\n\t\treturn (new ToneAudioBuffer()).fromArray(array);\n\t}\n\n\t/**\n\t * Creates a ToneAudioBuffer from a URL, returns a promise which resolves to a ToneAudioBuffer\n\t * @param  url The url to load.\n\t * @return A promise which resolves to a ToneAudioBuffer\n\t */\n\tstatic async fromUrl(url: string): Promise<ToneAudioBuffer> {\n\t\tconst buffer = new ToneAudioBuffer();\n\t\treturn await buffer.load(url);\n\t}\n\n\t/**\n\t * All of the downloads\n\t */\n\tstatic downloads: Array<Promise<AudioBuffer>> = [];\n\n\t/**\n\t *  Loads a url using fetch and returns the AudioBuffer.\n\t */\n\tstatic async load(url: string): Promise<AudioBuffer> {\n\n\t\t// test if the url contains multiple extensions\n\t\tconst matches = url.match(/\\[(.+\\|?)+\\]$/);\n\t\tif (matches) {\n\t\t\tconst extensions = matches[1].split(\""|\"");\n\t\t\tlet extension = extensions[0];\n\t\t\tfor (const ext of extensions) {\n\t\t\t\tif (ToneAudioBuffer.supportsType(ext)) {\n\t\t\t\t\textension = ext;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\turl = url.replace(matches[0], extension);\n\t\t}\n\n\t\tconst response = await fetch(ToneAudioBuffer.baseUrl + url);\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`could not load url: ${url}`);\n\t\t}\n\t\tconst arrayBuffer = await response.arrayBuffer();\n\n\t\tconst audioBuffer = await getContext().decodeAudioData(arrayBuffer);\n\n\t\treturn audioBuffer;\n\t}\n\n\t/**\n\t *  Checks a url's extension to see if the current browser can play that file type.\n\t *  @param url The url/extension to test\n\t *  @return If the file extension can be played\n\t *  @static\n\t *  @example\n\t * ToneAudioBuffer.supportsType(\""wav\""); //returns true\n\t * ToneAudioBuffer.supportsType(\""path/to/file.wav\""); //returns true\n\t */\n\tstatic supportsType(url: string): boolean {\n\t\tconst extensions = url.split(\"".\"");\n\t\tconst extension = extensions[extensions.length - 1];\n\t\tconst response = document.createElement(\""audio\"").canPlayType(\""audio/\"" + extension);\n\t\treturn response !== \""\"";\n\t}\n\n\t/**\n\t *  Returns a Promise which resolves when all of the buffers have loaded\n\t */\n\tstatic async loaded(): Promise<void> {\n\t\tfor (const promise of ToneAudioBuffer.downloads) {\n\t\t\tawait promise;\n\t\t}\n\t}\n}\n"",""import { getContext, setContext } from \""../Global\"";\nimport { Seconds } from \""../type/Units\"";\nimport { OfflineContext } from \""./OfflineContext\"";\nimport { ToneAudioBuffer } from \""./ToneAudioBuffer\"";\n\n/**\n * Generate a buffer by rendering all of the Tone.js code within the callback using the OfflineAudioContext.\n * The OfflineAudioContext is capable of rendering much faster than real time in many cases.\n * The callback function also passes in an offline instance of Tone.Transport which can be used\n * to schedule events along the Transport. **NOTE** OfflineAudioContext has the same restrictions\n * as the AudioContext in that on certain platforms (like iOS) it must be invoked by an explicit\n * user action like a click or tap.\n * @param  callback  All Tone.js nodes which are created and scheduled\n * \t\t\t\t\twithin this callback are recorded into the output Buffer.\n * @param  duration     the amount of time to record for.\n * @return  The promise which is invoked with the Tone.Buffer of the recorded output.\n * @example\n * //render 2 seconds of the oscillator\n * Tone.Offline(function(){\n * \t//only nodes created in this callback will be recorded\n * \tvar oscillator = new Tone.Oscillator().toDestination().start(0)\n * \t//schedule their events\n * }, 2).then(function(buffer){\n * \t//do something with the output buffer\n * })\n * @example\n * //can also schedule events along the Transport\n * //using the passed in Offline Transport\n * Tone.Offline(function(Transport){\n * \tvar osc = new Tone.Oscillator().toDestination()\n * \tTransport.schedule(function(time){\n * \t\tosc.start(time).stop(time + 0.1)\n * \t}, 1)\n * \tTransport.start(0.2)\n * }, 4).then(function(buffer){\n * \t//do something with the output buffer\n * })\n */\nexport async function Offline(\n\tcallback: (context: OfflineContext) => Promise<void> | void,\n\tduration: Seconds,\n\tchannels: number = 2,\n\tsampleRate: number = getContext().sampleRate,\n): Promise<ToneAudioBuffer> {\n\t// set the OfflineAudioContext based on the current context\n\tconst originalContext = getContext();\n\n\tconst context = new OfflineContext(channels, duration, sampleRate);\n\tsetContext(context);\n\n\t// invoke the callback/scheduling\n\tawait callback(context);\n\n\t// then render the audio\n\tconst bufferPromise = context.render();\n\n\t// return the original AudioContext\n\tsetContext(originalContext);\n\n\t// await the rendering\n\tconst buffer = await bufferPromise;\n\n\t// return the audio\n\treturn new ToneAudioBuffer(buffer);\n}\n"",""import { Tone } from \""../Tone\"";\nimport { isAudioBuffer } from \""../util/AdvancedTypeCheck\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { noOp } from \""../util/Interface\"";\nimport { isString } from \""../util/TypeCheck\"";\nimport { ToneAudioBuffer } from \""./ToneAudioBuffer\"";\n\ninterface ToneAudioBuffersUrlMap {\n\t[name: string]: string | AudioBuffer | ToneAudioBuffer;\n\t[name: number]: string | AudioBuffer | ToneAudioBuffer;\n}\n\ninterface ToneAudioBuffersOptions {\n\turls: ToneAudioBuffersUrlMap;\n\tonload: () => void;\n\tonerror?: (error: Error) => void;\n\tbaseUrl: string;\n}\n\n/**\n * A data structure for holding multiple buffers in a Map-like datastructure.\n *\n * @param  urls      An object literal or array of urls to load.\n * @param onload  The callback to invoke when the buffers are loaded.\n * @example\n * //load a whole bank of piano samples\n * var pianoSamples = new ToneAudioBuffers({\n * \t\""C4\"" : \""path/to/C4.mp3\""\n * \t\""C#4\"" : \""path/to/C#4.mp3\""\n * \t\""D4\"" : \""path/to/D4.mp3\""\n * \t\""D#4\"" : \""path/to/D#4.mp3\""\n * }, function(){\n * \t//play one of the samples when they all load\n * \tplayer.buffer = pianoSamples.get(\""C4\"");\n * \tplayer.start();\n * });\n * @example\n * //To pass in additional parameters in the second parameter\n * var buffers = new ToneAudioBuffers(urls, {\n * \t\""onload\"" : callback,\n * \t\""baseUrl\"" : \""../path/to/audio/\""\n * })\n */\nexport class ToneAudioBuffers extends Tone {\n\n\tname = \""ToneAudioBuffers\"";\n\n\t/**\n\t *  All of the buffers\n\t */\n\tprivate _buffers: Map<string, ToneAudioBuffer> = new Map();\n\n\t/**\n\t *  A path which is prefixed before every url.\n\t */\n\tbaseUrl: string;\n\n\t/**\n\t * Keep track of the number of loaded buffers\n\t */\n\tprivate _loadingCount: number = 0;\n\n\tconstructor(\n\t\turls?: ToneAudioBuffersUrlMap,\n\t\tonload?: () => void,\n\t\tbaseUrl?: string,\n\t);\n\tconstructor(options?: Partial<ToneAudioBuffersOptions>);\n\tconstructor() {\n\n\t\tsuper();\n\t\tconst options = optionsFromArguments(\n\t\t\tToneAudioBuffers.getDefaults(), arguments, [\""urls\"", \""onload\"", \""baseUrl\""], \""urls\"",\n\t\t);\n\n\t\tthis.baseUrl = options.baseUrl;\n\t\tconst urlMap: ToneAudioBuffersUrlMap = {};\n\t\t// add each one\n\t\tObject.keys(options.urls).forEach(name => {\n\t\t\tthis._loadingCount++;\n\t\t\tconst url = options.urls[name];\n\t\t\tthis.add(name, url, this._bufferLoaded.bind(this, options.onload));\n\t\t});\n\n\t}\n\n\tstatic getDefaults(): ToneAudioBuffersOptions {\n\t\treturn {\n\t\t\tbaseUrl: \""\"",\n\t\t\tonerror: noOp,\n\t\t\tonload: noOp,\n\t\t\turls: {},\n\t\t};\n\t}\n\n\t/**\n\t *  True if the buffers object has a buffer by that name.\n\t *  @param  name  The key or index of the buffer.\n\t */\n\thas(name: string | number): boolean {\n\t\treturn this._buffers.has(name.toString());\n\t}\n\n\t/**\n\t *  Get a buffer by name. If an array was loaded,\n\t *  then use the array index.\n\t *  @param  name  The key or index of the buffer.\n\t */\n\tget(name: string | number): ToneAudioBuffer {\n\t\tthis.assert(this.has(name), `ToneAudioBuffers has no buffer named: ${name}`);\n\t\treturn this._buffers.get(name.toString()) as ToneAudioBuffer;\n\t}\n\n\t/**\n\t *  A buffer was loaded. decrement the counter.\n\t */\n\tprivate _bufferLoaded(callback: () => void): void {\n\t\tthis._loadingCount--;\n\t\tif (this._loadingCount === 0 && callback) {\n\t\t\tcallback();\n\t\t}\n\t}\n\n\t/**\n\t * If the buffers are loaded or not\n\t */\n\tget loaded(): boolean {\n\t\treturn Array.from(this._buffers).every(([name, buffer]) => buffer.loaded);\n\t}\n\n\t/**\n\t *  Add a buffer by name and url to the Buffers\n\t *  @param  name      A unique name to give the buffer\n\t *  @param  url  Either the url of the bufer, or a buffer which will be added with the given name.\n\t *  @param  callback  The callback to invoke when the url is loaded.\n\t */\n\tadd(\n\t\tname: string | number,\n\t\turl: string | AudioBuffer | ToneAudioBuffer,\n\t\tcallback: () => void = noOp,\n\t): this {\n\t\tif (url instanceof ToneAudioBuffer) {\n\t\t\tthis._buffers.set(name.toString(), url);\n\t\t\tcallback();\n\t\t} else if (isAudioBuffer(url)) {\n\t\t\tthis._buffers.set(name.toString(), new ToneAudioBuffer(url));\n\t\t\tcallback();\n\t\t} else if (isString(url)) {\n\t\t\tthis._buffers.set(name.toString(), new ToneAudioBuffer(this.baseUrl + url, callback));\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._buffers.forEach(buffer => buffer.dispose());\n\t\tthis._buffers.clear();\n\t\treturn this;\n\t}\n}\n"",""import { Param } from \""../context/Param\"";\nimport { Time } from \""../type/Units\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { readOnly } from \""../util/Interface\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""./ToneAudioNode\"";\n\nexport interface DelayOptions extends ToneAudioNodeOptions {\n\tdelayTime: Time;\n\tmaxDelay: Time;\n}\n\n/**\n *  Wrapper around Web Audio's native [DelayNode](http://webaudio.github.io/web-audio-api/#the-delaynode-interface).\n *  @param delayTime The delay applied to the incoming signal.\n *  @param maxDelay The maximum delay time.\n */\nexport class Delay extends ToneAudioNode<DelayOptions> {\n\n\treadonly name = \""Delay\"";\n\n\t/**\n\t * The maximum delay time. This cannot be changed after\n\t * the value is passed into the constructor.\n\t */\n\treadonly maxDelay: Time;\n\n\t/**\n\t *  The amount of time the incoming signal is delayed.\n\t */\n\treadonly delayTime: Param<Time>;\n\n\t/**\n\t * Private reference to the internal DelayNode\n\t */\n\tprivate _delayNode: DelayNode;\n\treadonly input: DelayNode;\n\treadonly output: DelayNode;\n\n\tconstructor(options?: Partial<DelayOptions>)\n\tconstructor(delayTime?: Time, maxDelay?: Time)\n\tconstructor() {\n\t\tsuper(optionsFromArguments(Delay.getDefaults(), arguments, [\""delayTime\"", \""maxDelay\""]));\n\n\t\tconst options = optionsFromArguments(Delay.getDefaults(), arguments, [\""delayTime\"", \""maxDelay\""]);\n\n\t\tconst maxDelayInSeconds = this.toSeconds(options.maxDelay);\n\t\tthis.maxDelay = Math.max(maxDelayInSeconds, this.toSeconds(options.delayTime));\n\n\t\tthis._delayNode = this.input = this.output = this.context.createDelay(maxDelayInSeconds);\n\n\t\tthis.delayTime = new Param({\n\t\t\tcontext: this.context,\n\t\t\tparam : this._delayNode.delayTime,\n\t\t\tunits : \""time\"",\n\t\t\tvalue : options.delayTime,\n\t\t});\n\n\t\treadOnly(this, \""delayTime\"");\n\t}\n\n\tstatic getDefaults(): DelayOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tdelayTime : 0,\n\t\t\tmaxDelay: 1,\n\t\t});\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._delayNode.disconnect();\n\t\tthis.delayTime.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Seconds } from \""../type/Units\"";\nimport { Timeline, TimelineEvent } from \""./Timeline\"";\n\nexport type BasicPlaybackState = \""started\"" | \""stopped\"";\nexport type PlaybackState = BasicPlaybackState | \""paused\"";\n\nexport interface StateTimelineEvent extends TimelineEvent {\n\tstate: PlaybackState;\n}\n\n/**\n *  A Timeline State. Provides the methods: `setStateAtTime(\""state\"", time)` and `getValueAtTime(time)`\n *  @param initial The initial state of the StateTimeline.  Defaults to `undefined`\n */\nexport class StateTimeline<AdditionalOptions extends {} = {}> extends Timeline<StateTimelineEvent & AdditionalOptions> {\n\n\t/**\n\t *  The initial state\n\t */\n\tprivate _initial: PlaybackState;\n\n\tconstructor(initial: PlaybackState = \""stopped\"") {\n\t\tsuper();\n\t\tthis._initial = initial;\n\t}\n\n\t/**\n\t *  Returns the scheduled state scheduled before or at\n\t *  the given time.\n\t *  @param  time  The time to query.\n\t *  @return  The name of the state input in setStateAtTime.\n\t */\n\tgetValueAtTime(time: Seconds): PlaybackState {\n\t\tconst event = this.get(time);\n\t\tif (event !== null) {\n\t\t\treturn event.state;\n\t\t} else {\n\t\t\treturn this._initial;\n\t\t}\n\t}\n\n\t/**\n\t *  Add a state to the timeline.\n\t * @param  state The name of the state to set.\n\t * @param  time  The time to query.\n\t * @param options Any additional options that are needed in the timeline.\n\t */\n\tsetStateAtTime(state: PlaybackState, time: Seconds, options?: AdditionalOptions): this {\n\t\t// all state changes need to be >= the previous state time\n\t\t// TODO throw error if time < the previous event time\n\t\tthis.add(Object.assign({}, options, {\n\t\t\tstate,\n\t\t\ttime,\n\t\t}));\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Return the event before the time with the given state\n\t *  @param  state The state to look for\n\t *  @param  time  When to check before\n\t *  @return  The event with the given state before the time\n\t */\n\tgetLastState(state: PlaybackState, time: number): StateTimelineEvent & AdditionalOptions | undefined {\n\t\t// time = this.toSeconds(time);\n\t\tconst index = this._search(time);\n\t\tfor (let i = index; i >= 0; i--) {\n\t\t\tconst event = this._timeline[i];\n\t\t\tif (event.state === state) {\n\t\t\t\treturn event;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *  Return the event after the time with the given state\n\t *  @param  state The state to look for\n\t *  @param  time  When to check from\n\t *  @return  The event with the given state after the time\n\t */\n\tgetNextState(state: PlaybackState, time: number): StateTimelineEvent & AdditionalOptions | undefined {\n\t\t// time = this.toSeconds(time);\n\t\tconst index = this._search(time);\n\t\tif (index !== -1) {\n\t\t\tfor (let i = index; i < this._timeline.length; i++) {\n\t\t\t\tconst event = this._timeline[i];\n\t\t\t\tif (event.state === state) {\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"",""import { connect } from \""../Connect\"";\nimport { AutomationEvent, Param, ParamOptions } from \""../context/Param\"";\nimport { InputNode } from \""../context/ToneAudioNode\"";\nimport { getContext } from \""../Global\"";\nimport { BPM, Hertz, Seconds, Ticks, Time } from \""../type/Units\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { Timeline } from \""../util/Timeline\"";\nimport { isUndef } from \""../util/TypeCheck\"";\n\ninterface TickAutomationEvent extends AutomationEvent {\n\tticks: number;\n}\n\ninterface TickSignalOptions extends ParamOptions {\n\tvalue: Hertz | BPM;\n\tmultiplier: number;\n}\n\n/**\n * TickSignal extends Tone.Signal, but adds the capability\n * to calculate the number of elapsed ticks. exponential and target curves\n * are approximated with multiple linear ramps.\n *\n * Thank you Bruno Dias, H. Sofia Pinto, and David M. Matos,\n * for your [WAC paper](https://smartech.gatech.edu/bitstream/handle/1853/54588/WAC2016-49.pdf)\n * describing integrating timing functions for tempo calculations.\n *\n * @param value The initial value of the signal\n */\nexport class TickSignal<Type extends Hertz | BPM> extends Param<Type> {\n\n\tname = \""TickSignal\"";\n\n\tprotected _events: Timeline<TickAutomationEvent> = new Timeline(Infinity);\n\n\tprivate _sig: ConstantSourceNode = this.context.createConstantSource();\n\n\tprotected _param = this._sig.offset;\n\n\tprivate _multiplier: number = 1;\n\n\tconstructor(options: Partial<TickSignalOptions>);\n\tconstructor(value?: number);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(TickSignal.getDefaults(), arguments, [\""value\""]));\n\t\tconst options = optionsFromArguments(TickSignal.getDefaults(), arguments, [\""value\""]);\n\n\t\tthis._sig = this.context.createConstantSource();\n\t\tthis._sig.start(0);\n\t\tthis._param = this._sig.offset;\n\n\t\t// set the multiplier\n\t\tthis._multiplier = options.multiplier;\n\n\t\t// clear the ticks from the beginning\n\t\tthis._events.cancel(0);\n\t\t// set an initial event\n\t\tthis._events.add({\n\t\t\tticks: 0,\n\t\t\ttime : 0,\n\t\t\ttype : \""setValue\"",\n\t\t\tvalue: this._fromType(options.value as Type),\n\t\t});\n\t\tthis.setValueAtTime(options.value as Type, 0);\n\t}\n\n\tstatic getDefaults(): TickSignalOptions {\n\t\treturn Object.assign(Param.getDefaults(), {\n\t\t\tmultiplier: 1,\n\t\t\tparam: getContext().createConstantSource().offset,\n\t\t\tunits: \""hertz\"",\n\t\t\tvalue: 1,\n\t\t});\n\t}\n\n\tsetTargetAtTime(value: Type, time: Time, constant: number): this {\n\t\t// approximate it with multiple linear ramps\n\t\ttime = this.toSeconds(time);\n\t\tthis.setRampPoint(time);\n\t\tconst computedValue = this._fromType(value);\n\n\t\t// start from previously scheduled value\n\t\tconst prevEvent = this._events.get(time) as TickAutomationEvent;\n\t\tconst segments = Math.round(Math.max(1 / constant, 1));\n\t\tfor (let i = 0; i <= segments; i++) {\n\t\t\tconst segTime = constant * i + time;\n\t\t\tconst rampVal = this._exponentialApproach(prevEvent.time, prevEvent.value, computedValue, constant, segTime);\n\t\t\tthis.linearRampToValueAtTime(this._toType(rampVal), segTime);\n\t\t}\n\t\treturn this;\n\t}\n\n\tsetValueAtTime(value: Type, time: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tsuper.setValueAtTime(value, time);\n\t\tconst event = this._events.get(computedTime) as TickAutomationEvent;\n\t\tconst previousEvent = this._events.previousEvent(event);\n\t\tconst ticksUntilTime = this._getTicksUntilEvent(previousEvent, computedTime);\n\t\tevent.ticks = Math.max(ticksUntilTime, 0);\n\t\treturn this;\n\t}\n\n\tlinearRampToValueAtTime(value: Type, time: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tsuper.linearRampToValueAtTime(value, time);\n\t\tconst event = this._events.get(computedTime) as TickAutomationEvent;\n\t\tconst previousEvent = this._events.previousEvent(event);\n\t\tconst ticksUntilTime = this._getTicksUntilEvent(previousEvent, computedTime);\n\t\tevent.ticks = Math.max(ticksUntilTime, 0);\n\t\treturn this;\n\t}\n\n\texponentialRampToValueAtTime(value: Type, time: Time): this {\n\t\t// aproximate it with multiple linear ramps\n\t\ttime = this.toSeconds(time);\n\t\tconst computedVal = this._fromType(value);\n\n\t\t// start from previously scheduled value\n\t\tconst prevEvent = this._events.get(time) as TickAutomationEvent;\n\t\t// approx 10 segments per second\n\t\tconst segments = Math.round(Math.max((time - prevEvent.time) * 10, 1));\n\t\tconst segmentDur = ((time - prevEvent.time) / segments);\n\t\tfor (let i = 0; i <= segments; i++) {\n\t\t\tconst segTime = segmentDur * i + prevEvent.time;\n\t\t\tconst rampVal = this._exponentialInterpolate(prevEvent.time, prevEvent.value, time, computedVal, segTime);\n\t\t\tthis.linearRampToValueAtTime(this._toType(rampVal), segTime);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns the tick value at the time. Takes into account\n\t * any automation curves scheduled on the signal.\n\t * @param  time The time to get the tick count at\n\t * @return The number of ticks which have elapsed at the time given any automations.\n\t */\n\tprivate _getTicksUntilEvent(event: TickAutomationEvent | null, time: number): Ticks {\n\t\tif (event === null) {\n\t\t\tevent = {\n\t\t\t\tticks : 0,\n\t\t\t\ttime : 0,\n\t\t\t\ttype: \""setValue\"",\n\t\t\t\tvalue: 0,\n\t\t\t};\n\t\t} else if (isUndef(event.ticks)) {\n\t\t\tconst previousEvent = this._events.previousEvent(event);\n\t\t\tevent.ticks = this._getTicksUntilEvent(previousEvent, event.time);\n\t\t}\n\t\tconst val0 = this._fromType(this.getValueAtTime(event.time));\n\t\tlet val1 = this._fromType(this.getValueAtTime(time));\n\t\t// if it's right on the line, take the previous value\n\t\tconst onTheLineEvent = this._events.get(time);\n\t\tif (onTheLineEvent && onTheLineEvent.time === time && onTheLineEvent.type === \""setValue\"") {\n\t\t\tval1 = this._fromType(this.getValueAtTime(time - this.sampleTime));\n\t\t}\n\t\treturn 0.5 * (time - event.time) * (val0 + val1) + event.ticks;\n\t}\n\n\t/**\n\t * Returns the tick value at the time. Takes into account\n\t * any automation curves scheduled on the signal.\n\t * @param  time The time to get the tick count at\n\t * @return The number of ticks which have elapsed at the time given any automations.\n\t */\n\tgetTicksAtTime(time: Time): Ticks {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tconst event = this._events.get(computedTime);\n\t\treturn Math.max(this._getTicksUntilEvent(event, computedTime), 0);\n\t}\n\n\t/**\n\t * Return the elapsed time of the number of ticks from the given time\n\t * @param ticks The number of ticks to calculate\n\t * @param  time The time to get the next tick from\n\t * @return The duration of the number of ticks from the given time in seconds\n\t */\n\tgetDurationOfTicks(ticks: Ticks, time: Time): Seconds {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tconst currentTick = this.getTicksAtTime(time);\n\t\treturn this.getTimeOfTick(currentTick + ticks) - computedTime;\n\t}\n\n\t/**\n\t * Given a tick, returns the time that tick occurs at.\n\t * @return The time that the tick occurs.\n\t */\n\tgetTimeOfTick(tick: Ticks): Seconds {\n\t\tconst before = this._events.get(tick, \""ticks\"");\n\t\tconst after = this._events.getAfter(tick, \""ticks\"");\n\t\tif (before && before.ticks === tick) {\n\t\t\treturn before.time;\n\t\t} else if (before && after &&\n\t\t\tafter.type === \""linear\"" &&\n\t\t\tbefore.value !== after.value) {\n\t\t\tconst val0 = this._fromType(this.getValueAtTime(before.time));\n\t\t\tconst val1 = this._fromType(this.getValueAtTime(after.time));\n\t\t\tconst delta = (val1 - val0) / (after.time - before.time);\n\t\t\tconst k = Math.sqrt(Math.pow(val0, 2) - 2 * delta * (before.ticks - tick));\n\t\t\tconst sol1 = (-val0 + k) / delta;\n\t\t\tconst sol2 = (-val0 - k) / delta;\n\t\t\treturn (sol1 > 0 ? sol1 : sol2) + before.time;\n\t\t} else if (before) {\n\t\t\tif (before.value === 0) {\n\t\t\t\treturn Infinity;\n\t\t\t} else {\n\t\t\t\treturn before.time + (tick - before.ticks) / before.value;\n\t\t\t}\n\t\t} else {\n\t\t\treturn tick / this._initialValue;\n\t\t}\n\t}\n\n\t/**\n\t * Convert some number of ticks their the duration in seconds accounting\n\t * for any automation curves starting at the given time.\n\t * @param  ticks The number of ticks to convert to seconds.\n\t * @param  when  When along the automation timeline to convert the ticks.\n\t * @return The duration in seconds of the ticks.\n\t */\n\tticksToTime(ticks: Ticks, when: Time): Seconds {\n\t\treturn this.getDurationOfTicks(ticks, when);\n\t}\n\n\t/**\n\t * The inverse of [ticksToTime](#tickstotime). Convert a duration in\n\t * seconds to the corresponding number of ticks accounting for any\n\t * automation curves starting at the given time.\n\t * @param  duration The time interval to convert to ticks.\n\t * @param  when When along the automation timeline to convert the ticks.\n\t * @return The duration in ticks.\n\t */\n\ttimeToTicks(duration: Time, when: Time): Ticks {\n\t\tconst computedTime = this.toSeconds(when);\n\t\tconst computedDuration = this.toSeconds(duration);\n\t\tconst startTicks = this.getTicksAtTime(computedTime);\n\t\tconst endTicks = this.getTicksAtTime(computedTime + computedDuration);\n\t\treturn endTicks - startTicks;\n\t}\n\n\t/**\n\t * Convert from the type when the unit value is BPM\n\t */\n\tprotected _fromType(val: Type): number {\n\t\tif (this.units === \""bpm\"" && this.multiplier) {\n\t\t\treturn 1 / (60 / val / this.multiplier);\n\t\t} else {\n\t\t\treturn super._fromType(val);\n\t\t}\n\t}\n\n\t/**\n\t * Special case of type conversion where the units === \""bpm\""\n\t */\n\tprotected _toType(val: number): Type {\n\t\tif (this.units === \""bpm\"" && this.multiplier) {\n\t\t\treturn (val / this.multiplier) * 60 as Type;\n\t\t} else {\n\t\t\treturn super._toType(val);\n\t\t}\n\t}\n\t/**\n\t * A multiplier on the bpm value. Useful for setting a PPQ relative to the base frequency value.\n\t */\n\tget multiplier(): number {\n\t\treturn this._multiplier;\n\t}\n\tset multiplier(m: number) {\n\t\t// get and reset the current value with the new multipler\n\t\t// might be necessary to clear all the previous values\n\t\tconst currentVal = this.value;\n\t\tthis._multiplier = m;\n\t\tthis.value = currentVal;\n\t}\n\n\t/**\n\t * Connect the output signal\n\t */\n\tconnect(dstNode: InputNode, outputNumber = 0, inputNumber = 0): this {\n\t\tconnect(this._sig, dstNode, outputNumber, inputNumber);\n\t\treturn this;\n\t}\n}\n"",""import { ToneWithContext, ToneWithContextOptions } from \""../context/ToneWithContext\"";\nimport { BPM, Frequency, Hertz, Seconds, Ticks, Time } from \""../type/Units\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { readOnly } from \""../util/Interface\"";\nimport { PlaybackState, StateTimeline, StateTimelineEvent } from \""../util/StateTimeline\"";\nimport { Timeline } from \""../util/Timeline\"";\nimport { isDefined } from \""../util/TypeCheck\"";\nimport { TickSignal } from \""./TickSignal\"";\n\ninterface TickSourceOptions extends ToneWithContextOptions {\n\tfrequency: Frequency;\n\tunits: \""hertz\"" | \""bpm\"";\n}\n\ninterface TickSourceOffsetEvent {\n\tticks: number;\n\ttime: number;\n\tseconds: number;\n}\n\n/**\n *  Uses [TickSignal](TickSignal) to track elapsed ticks with complex automation curves.\n *\n *  @param frequency The initial frequency that the signal ticks at\n */\nexport class TickSource<Type extends BPM | Hertz> extends ToneWithContext<TickSourceOptions> {\n\n\tname = \""TickSource\"";\n\n\t/**\n\t *  The frequency the callback function should be invoked.\n\t */\n\tfrequency: TickSignal<Type>;\n\n\t/**\n\t *  The state timeline\n\t */\n\tprivate _state: StateTimeline = new StateTimeline();\n\n\t/**\n\t * The offset values of the ticks\n\t */\n\tprivate _tickOffset: Timeline<TickSourceOffsetEvent> = new Timeline();\n\n\tconstructor(frequency?: Frequency);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(options?: Partial<TickSourceOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(TickSource.getDefaults(), arguments, [\""frequency\""]));\n\t\tconst options = optionsFromArguments(TickSource.getDefaults(), arguments, [\""frequency\""]);\n\n\t\tthis.frequency = new TickSignal({\n\t\t\tcontext: this.context,\n\t\t\tunits: options.units,\n\t\t\tvalue: this.toFrequency(options.frequency),\n\t\t});\n\t\treadOnly(this, \""frequency\"");\n\n\t\t// set the inital state\n\t\tthis._state.setStateAtTime(\""stopped\"", 0);\n\t\t// add the first event\n\t\tthis.setTicksAtTime(0, 0);\n\t}\n\n\tstatic getDefaults(): TickSourceOptions {\n\t\treturn Object.assign({\n\t\t\tfrequency: 1,\n\t\t\tunits: \""hertz\"" as \""hertz\"",\n\t\t}, ToneWithContext.getDefaults());\n\t}\n\n\t/**\n\t *  Returns the playback state of the source, either \""started\"", \""stopped\"" or \""paused\"".\n\t */\n\tget state(): PlaybackState {\n\t\treturn this._state.getValueAtTime(this.now());\n\t}\n\n\t/**\n\t *  Start the clock at the given time. Optionally pass in an offset\n\t *  of where to start the tick counter from.\n\t *  @param  time    The time the clock should start\n\t *  @param offset The number of ticks to start the source at\n\t */\n\tstart(time: Time, offset?: Ticks): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tif (this._state.getValueAtTime(computedTime) !== \""started\"") {\n\t\t\tthis._state.setStateAtTime(\""started\"", computedTime);\n\t\t\tif (isDefined(offset)) {\n\t\t\t\tthis.setTicksAtTime(offset, computedTime);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Stop the clock. Stopping the clock resets the tick counter to 0.\n\t * @param time The time when the clock should stop.\n\t */\n\tstop(time: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\t// cancel the previous stop\n\t\tif (this._state.getValueAtTime(computedTime) === \""stopped\"") {\n\t\t\tconst event = this._state.get(computedTime);\n\t\t\tif (event && event.time > 0) {\n\t\t\t\tthis._tickOffset.cancel(event.time);\n\t\t\t\tthis._state.cancel(event.time);\n\t\t\t}\n\t\t}\n\t\tthis._state.cancel(computedTime);\n\t\tthis._state.setStateAtTime(\""stopped\"", computedTime);\n\t\tthis.setTicksAtTime(0, computedTime);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Pause the clock. Pausing does not reset the tick counter.\n\t *  @param time The time when the clock should stop.\n\t */\n\tpause(time: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tif (this._state.getValueAtTime(computedTime) === \""started\"") {\n\t\t\tthis._state.setStateAtTime(\""paused\"", computedTime);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Cancel start/stop/pause and setTickAtTime events scheduled after the given time.\n\t *  @param time When to clear the events after\n\t */\n\tcancel(time: Time): this {\n\t\ttime = this.toSeconds(time);\n\t\tthis._state.cancel(time);\n\t\tthis._tickOffset.cancel(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Get the elapsed ticks at the given time\n\t * @param  time  When to get the tick value\n\t * @return The number of ticks\n\t */\n\tgetTicksAtTime(time?: Time): Ticks {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tconst stopEvent = this._state.getLastState(\""stopped\"", computedTime);\n\t\tif (!stopEvent) {\n\t\t\treturn 0;\n\t\t}\n\t\t// this event allows forEachBetween to iterate until the current time\n\t\tconst tmpEvent: StateTimelineEvent = { state: \""paused\"", time: computedTime};\n\t\tthis._state.add(tmpEvent);\n\n\t\t// keep track of the previous offset event\n\t\tlet lastState = stopEvent;\n\t\tlet elapsedTicks = 0;\n\n\t\t// iterate through all the events since the last stop\n\t\tthis._state.forEachBetween(stopEvent.time, computedTime + this.sampleTime, e => {\n\t\t\tlet periodStartTime = lastState.time;\n\t\t\t// if there is an offset event in this period use that\n\t\t\tconst offsetEvent = this._tickOffset.get(e.time);\n\t\t\tif (offsetEvent && offsetEvent.time >= lastState.time) {\n\t\t\t\telapsedTicks = offsetEvent.ticks;\n\t\t\t\tperiodStartTime = offsetEvent.time;\n\t\t\t}\n\t\t\tif (lastState.state === \""started\"" && e.state !== \""started\"") {\n\t\t\t\telapsedTicks += this.frequency.getTicksAtTime(e.time) - this.frequency.getTicksAtTime(periodStartTime);\n\t\t\t}\n\t\t\tlastState = e;\n\t\t});\n\n\t\t// remove the temporary event\n\t\tthis._state.remove(tmpEvent);\n\n\t\t// return the ticks\n\t\treturn elapsedTicks;\n\t}\n\n\t/**\n\t *  The number of times the callback was invoked. Starts counting at 0\n\t *  and increments after the callback was invoked. Returns -1 when stopped.\n\t */\n\tget ticks(): Ticks {\n\t\treturn this.getTicksAtTime(this.now());\n\t}\n\n\tset ticks(t: Ticks) {\n\t\tthis.setTicksAtTime(t, this.now());\n\t}\n\n\t/**\n\t *  The time since ticks=0 that the TickSource has been running. Accounts\n\t *  for tempo curves\n\t */\n\tget seconds(): Seconds {\n\t\treturn this.getSecondsAtTime(this.now());\n\t}\n\n\tset seconds(s: Seconds) {\n\t\tconst now = this.now();\n\t\tconst ticks = this.frequency.timeToTicks(s, now);\n\t\tthis.setTicksAtTime(ticks, now);\n\t}\n\n\t/**\n\t *  Return the elapsed seconds at the given time.\n\t *  @param  time  When to get the elapsed seconds\n\t *  @return  The number of elapsed seconds\n\t */\n\tgetSecondsAtTime(time: Time): Seconds {\n\t\ttime = this.toSeconds(time);\n\t\tconst stopEvent = this._state.getLastState(\""stopped\"", time);\n\t\tif (!stopEvent) {\n\t\t\treturn 0;\n\t\t}\n\t\t// this event allows forEachBetween to iterate until the current time\n\t\tconst tmpEvent: StateTimelineEvent = { state : \""paused\"", time };\n\t\tthis._state.add(tmpEvent);\n\n\t\t// keep track of the previous offset event\n\t\tlet lastState = stopEvent;\n\t\tlet elapsedSeconds = 0;\n\n\t\t// iterate through all the events since the last stop\n\t\tthis._state.forEachBetween(stopEvent.time, time + this.sampleTime, e => {\n\t\t\tlet periodStartTime = lastState.time;\n\t\t\t// if there is an offset event in this period use that\n\t\t\tconst offsetEvent = this._tickOffset.get(e.time);\n\t\t\tif (offsetEvent && offsetEvent.time >= lastState.time) {\n\t\t\t\telapsedSeconds = offsetEvent.seconds;\n\t\t\t\tperiodStartTime = offsetEvent.time;\n\t\t\t}\n\t\t\tif (lastState.state === \""started\"" && e.state !== \""started\"") {\n\t\t\t\telapsedSeconds += e.time - periodStartTime;\n\t\t\t}\n\t\t\tlastState = e;\n\t\t});\n\n\t\t// remove the temporary event\n\t\tthis._state.remove(tmpEvent);\n\n\t\t// return the ticks\n\t\treturn elapsedSeconds;\n\t}\n\n\t/**\n\t * Set the clock's ticks at the given time.\n\t * @param  ticks The tick value to set\n\t * @param  time  When to set the tick value\n\t */\n\tsetTicksAtTime(ticks: Ticks, time: Time): this {\n\t\ttime = this.toSeconds(time);\n\t\tthis._tickOffset.cancel(time);\n\t\tthis._tickOffset.add({\n\t\t\tseconds : this.frequency.getDurationOfTicks(ticks, time),\n\t\t\tticks,\n\t\t\ttime,\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Returns the scheduled state at the given time.\n\t *  @param  time  The time to query.\n\t *  @example\n\t * source.start(\""+0.1\"");\n\t * source.getStateAtTime(\""+0.1\""); //returns \""started\""\n\t */\n\tgetStateAtTime(time: Time): PlaybackState {\n\t\ttime = this.toSeconds(time);\n\t\treturn this._state.getValueAtTime(time);\n\t}\n\n\t/**\n\t * Get the time of the given tick. The second argument\n\t * is when to test before. Since ticks can be set (with setTicksAtTime)\n\t * there may be multiple times for a given tick value.\n\t * @param  ticks The tick number.\n\t * @param  before When to measure the tick value from.\n\t * @return The time of the tick\n\t */\n\tgetTimeOfTick(tick: Ticks, before = this.now()): Seconds {\n\t\tconst offset = this._tickOffset.get(before) as TickSourceOffsetEvent;\n\t\tconst event = this._state.get(before) as StateTimelineEvent;\n\t\tconst startTime = Math.max(offset.time, event.time);\n\t\tconst absoluteTicks = this.frequency.getTicksAtTime(startTime) + tick - offset.ticks;\n\t\treturn this.frequency.getTimeOfTick(absoluteTicks);\n\t}\n\n\t/**\n\t *  Invoke the callback event at all scheduled ticks between the\n\t *  start time and the end time\n\t *  @param  startTime  The beginning of the search range\n\t *  @param  endTime    The end of the search range\n\t *  @param  callback   The callback to invoke with each tick\n\t */\n\tforEachTickBetween(startTime: Time, endTime: Time, callback: (when: Seconds, ticks: Ticks) => void): this {\n\t\tconst computedStartTime = this.toSeconds(startTime);\n\t\tconst computedEndTime = this.toSeconds(endTime);\n\t\t// only iterate through the sections where it is \""started\""\n\t\tlet lastStateEvent = this._state.get(computedStartTime);\n\t\tthis._state.forEachBetween(computedStartTime, computedEndTime, event => {\n\t\t\tif (lastStateEvent && lastStateEvent.state === \""started\"" && event.state !== \""started\"") {\n\t\t\t\tthis.forEachTickBetween(Math.max(lastStateEvent.time, computedStartTime), event.time - this.sampleTime, callback);\n\t\t\t}\n\t\t\tlastStateEvent = event;\n\t\t});\n\n\t\tlet error = null;\n\n\t\tif (lastStateEvent && lastStateEvent.state === \""started\"" && this._state) {\n\t\t\tconst maxStartTime = Math.max(lastStateEvent.time, computedStartTime);\n\t\t\t// figure out the difference between the frequency ticks and the\n\t\t\tconst startTicks = this.frequency.getTicksAtTime(maxStartTime);\n\t\t\tconst ticksAtStart = this.frequency.getTicksAtTime(lastStateEvent.time);\n\t\t\tconst diff = startTicks - ticksAtStart;\n\t\t\tlet offset = diff % 1;\n\t\t\tif (offset !== 0) {\n\t\t\t\toffset = 1 - offset;\n\t\t\t}\n\t\t\tlet nextTickTime = this.frequency.getTimeOfTick(startTicks + offset);\n\t\t\twhile (nextTickTime < computedEndTime && this._state) {\n\t\t\t\ttry {\n\t\t\t\t\tcallback(nextTickTime, Math.round(this.getTicksAtTime(nextTickTime)));\n\t\t\t\t} catch (e) {\n\t\t\t\t\terror = e;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this._state) {\n\t\t\t\t\tnextTickTime += this.frequency.getDurationOfTicks(1, nextTickTime);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._state.dispose();\n\t\tthis._tickOffset.dispose();\n\t\tthis.frequency.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { ToneWithContext, ToneWithContextOptions } from \""../context/ToneWithContext\"";\nimport { BPM, Frequency, Hertz, Seconds, Ticks, Time } from \""../type/Units\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { Emitter, EmitterEventObject } from \""../util/Emitter\"";\nimport { noOp, readOnly } from \""../util/Interface\"";\nimport { PlaybackState, StateTimeline } from \""../util/StateTimeline\"";\nimport { TickSignal } from \""./TickSignal\"";\nimport { TickSource } from \""./TickSource\"";\n\ntype ClockCallback = (time: Time, ticks?: Ticks) => void;\n\ninterface ClockOptions extends ToneWithContextOptions {\n\tfrequency: number;\n\tcallback: ClockCallback;\n\tunits: \""hertz\"" | \""bpm\"";\n}\n\ntype ClockEvent = \""start\"" | \""stop\"" | \""pause\"";\n\n/**\n * A sample accurate clock which provides a callback at the given rate.\n * While the callback is not sample-accurate (it is still susceptible to\n * loose JS timing), the time passed in as the argument to the callback\n * is precise. For most applications, it is better to use Tone.Transport\n * instead of the Clock by itself since you can synchronize multiple callbacks.\n *\n * @param callback The callback to be invoked with the time of the audio event\n * @param frequency The rate of the callback\n * @example\n * //the callback will be invoked approximately once a second\n * //and will print the time exactly once a second apart.\n * const clock = new Clock(time => {\n * \tconsole.log(time);\n * }, 1);\n */\nexport class Clock<Type extends BPM | Hertz = Hertz>\nextends ToneWithContext<ClockOptions> implements Emitter<ClockEvent> {\n\n\tname = \""Clock\"";\n\n\t/**\n\t *  The callback function to invoke at the scheduled tick.\n\t */\n\tcallback: ClockCallback = noOp;\n\n\t/**\n\t *  The tick counter\n\t */\n\tprivate _tickSource: TickSource<Type>;\n\n\t/**\n\t *  The last time the loop callback was invoked\n\t */\n\tprivate _lastUpdate: number = 0;\n\n\t/**\n\t *  Keep track of the playback state\n\t */\n\tprivate _state: StateTimeline = new StateTimeline(\""stopped\"");\n\n\t/**\n\t * Context bound reference to the _loop method\n\t * This is necessary to remove the event in the end.\n\t */\n\tprivate _boundLoop: () => void = this._loop.bind(this);\n\n\t/**\n\t *  The rate the callback function should be invoked.\n\t */\n\tfrequency: TickSignal<Type>;\n\n\tconstructor(options: Partial<ClockOptions>);\n\tconstructor(callback?: ClockCallback, frequency?: Frequency);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Clock.getDefaults(), arguments, [\""callback\"", \""frequency\""]));\n\t\tconst options = optionsFromArguments(Clock.getDefaults(), arguments, [\""callback\"", \""frequency\""]);\n\n\t\tthis.callback = options.callback;\n\t\tthis._tickSource = new TickSource({\n\t\t\tcontext: this.context,\n\t\t\tfrequency: options.frequency,\n\t\t\tunits: options.units,\n\t\t});\n\t\tthis._lastUpdate = 0;\n\t\tthis.frequency = this._tickSource.frequency;\n\t\treadOnly(this, \""frequency\"");\n\n\t\t// add an initial state\n\t\tthis._state.setStateAtTime(\""stopped\"", 0);\n\n\t\t// bind a callback to the worker thread\n\t\tthis.context.on(\""tick\"", this._boundLoop);\n\t}\n\n\tstatic getDefaults(): ClockOptions {\n\t\treturn Object.assign(ToneWithContext.getDefaults(), {\n\t\t\tcallback: noOp as ClockCallback,\n\t\t\tfrequency: 1,\n\t\t\tunits: \""hertz\"",\n\t\t}) as ClockOptions;\n\t}\n\n\t/**\n\t *  Returns the playback state of the source, either \""started\"", \""stopped\"" or \""paused\"".\n\t */\n\tget state(): PlaybackState {\n\t\treturn this._state.getValueAtTime(this.now());\n\t}\n\n\t/**\n\t *  Start the clock at the given time. Optionally pass in an offset\n\t *  of where to start the tick counter from.\n\t *  @param  time    The time the clock should start\n\t *  @param offset  Where the tick counter starts counting from.\n\t */\n\tstart(time?: Time, offset?: Ticks): this {\n\t\t// make sure the context is started\n\t\tthis.context.resume();\n\t\t// start the loop\n\t\tconst computedTime = this.toSeconds(time);\n\t\tif (this._state.getValueAtTime(computedTime) !== \""started\"") {\n\t\t\tthis._state.setStateAtTime(\""started\"", computedTime);\n\t\t\tthis._tickSource.start(computedTime, offset);\n\t\t\tif (computedTime < this._lastUpdate) {\n\t\t\t\tthis.emit(\""start\"", computedTime, offset);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Stop the clock. Stopping the clock resets the tick counter to 0.\n\t *  @param time The time when the clock should stop.\n\t *  @example\n\t * clock.stop();\n\t */\n\tstop(time?: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis._state.cancel(computedTime);\n\t\tthis._state.setStateAtTime(\""stopped\"", computedTime);\n\t\tthis._tickSource.stop(computedTime);\n\t\tif (computedTime < this._lastUpdate) {\n\t\t\tthis.emit(\""stop\"", computedTime);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Pause the clock. Pausing does not reset the tick counter.\n\t *  @param time The time when the clock should stop.\n\t */\n\tpause(time?: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tif (this._state.getValueAtTime(computedTime) === \""started\"") {\n\t\t\tthis._state.setStateAtTime(\""paused\"", computedTime);\n\t\t\tthis._tickSource.pause(computedTime);\n\t\t\tif (computedTime < this._lastUpdate) {\n\t\t\t\tthis.emit(\""pause\"", computedTime);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  The number of times the callback was invoked. Starts counting at 0\n\t *  and increments after the callback was invoked.\n\t */\n\tget ticks(): Ticks {\n\t\treturn Math.ceil(this.getTicksAtTime(this.now()));\n\t}\n\tset ticks(t: Ticks) {\n\t\tthis._tickSource.ticks = t;\n\t}\n\n\t/**\n\t *  The time since ticks=0 that the Clock has been running. Accounts for tempo curves\n\t */\n\tget seconds(): Seconds {\n\t\treturn this._tickSource.seconds;\n\t}\n\tset seconds(s: Seconds) {\n\t\tthis._tickSource.seconds = s;\n\t}\n\n\t/**\n\t *  Return the elapsed seconds at the given time.\n\t *  @param  time  When to get the elapsed seconds\n\t *  @return  The number of elapsed seconds\n\t */\n\tgetSecondsAtTime(time: Time): Seconds {\n\t\treturn this._tickSource.getSecondsAtTime(time);\n\t}\n\n\t/**\n\t * Set the clock's ticks at the given time.\n\t * @param  ticks The tick value to set\n\t * @param  time  When to set the tick value\n\t */\n\tsetTicksAtTime(ticks: Ticks, time: Time): this {\n\t\tthis._tickSource.setTicksAtTime(ticks, time);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Get the clock's ticks at the given time.\n\t * @param  time  When to get the tick value\n\t * @return The tick value at the given time.\n\t */\n\tgetTicksAtTime(time?: Time): Ticks {\n\t\treturn this._tickSource.getTicksAtTime(time);\n\t}\n\n\t/**\n\t * Get the time of the next tick\n\t * @param  ticks The tick number.\n\t */\n\tnextTickTime(offset: Ticks, when: Time): Seconds {\n\t\tconst computedTime = this.toSeconds(when);\n\t\tconst currentTick = this.getTicksAtTime(computedTime);\n\t\treturn this._tickSource.getTimeOfTick(currentTick + offset, computedTime);\n\t}\n\n\t/**\n\t *  The scheduling loop.\n\t */\n\tprivate _loop(): void {\n\n\t\tconst startTime = this._lastUpdate;\n\t\tconst endTime = this.now();\n\t\tthis._lastUpdate = endTime;\n\n\t\tif (startTime !== endTime) {\n\t\t\t// the state change events\n\t\t\tthis._state.forEachBetween(startTime, endTime, e => {\n\t\t\t\tswitch (e.state) {\n\t\t\t\t\tcase \""started\"" :\n\t\t\t\t\t\tconst offset = this._tickSource.getTicksAtTime(e.time);\n\t\t\t\t\t\tthis.emit(\""start\"", e.time, offset);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \""stopped\"" :\n\t\t\t\t\t\tif (e.time !== 0) {\n\t\t\t\t\t\t\tthis.emit(\""stop\"", e.time);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \""paused\"" :\n\t\t\t\t\t\tthis.emit(\""pause\"", e.time);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// the tick callbacks\n\t\t\tthis._tickSource.forEachTickBetween(startTime, endTime, (time, ticks) => {\n\t\t\t\tthis.callback(time, ticks);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Returns the scheduled state at the given time.\n\t * @param  time  The time to query.\n\t * @return  The name of the state input in setStateAtTime.\n\t * @example\n\t * clock.start(\""+0.1\"");\n\t * clock.getStateAtTime(\""+0.1\""); //returns \""started\""\n\t */\n\tgetStateAtTime(time: Time): PlaybackState {\n\t\tconst computedTime = this.toSeconds(time);\n\t\treturn this._state.getValueAtTime(computedTime);\n\t}\n\n\t/**\n\t *  Clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.context.off(\""tick\"", this._boundLoop);\n\t\tthis._tickSource.dispose();\n\t\tthis._state.dispose();\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////\n\t// EMITTER MIXIN TO SATISFY COMPILER\n\t///////////////////////////////////////////////////////////////////////\n\n\ton!: (event: ClockEvent, callback: (...args: any[]) => void) => this;\n\tonce!: (event: ClockEvent, callback: (...args: any[]) => void) => this;\n\toff!: (event: ClockEvent, callback?: ((...args: any[]) => void) | undefined) => this;\n\temit!: (event: any, ...args: any[]) => this;\n}\n\nEmitter.mixin(Clock);\n"",""import { getContext } from \""../Global\"";\nimport { TimeBaseUnit, TimeValue } from \""./TimeBase\"";\nimport { TransportTimeClass } from \""./TransportTime\"";\nimport { Seconds, Ticks } from \""./Units\"";\n\n/**\n * Ticks is a primitive type for encoding Time values.\n * Ticks can be constructed with or without the `new` keyword. Ticks can be passed\n * into the parameter of any method which takes time as an argument.\n * @example\n * const t = Ticks(\""4n\""); //a quarter note as ticks\n */\nexport class TicksClass extends TransportTimeClass<Ticks> {\n\n\tname = \""Ticks\"";\n\n\treadonly defaultUnits: TimeBaseUnit = \""i\"";\n\n\t/**\n\t * Get the current time in the given units\n\t */\n\tprotected _now(): Ticks {\n\t\treturn this.context.transport.ticks;\n\t}\n\n\t/**\n\t *  Return the value of the beats in the current units\n\t */\n\tprotected _beatsToUnits(beats: number): Ticks {\n\t\treturn this._getPPQ() * beats;\n\t}\n\n\t/**\n\t *  Returns the value of a second in the current units\n\t */\n\tprotected _secondsToUnits(seconds: Seconds): Ticks {\n\t\treturn Math.floor(seconds / (60 / this._getBpm()) * this._getPPQ());\n\t}\n\n\t/**\n\t *  Returns the value of a tick in the current time units\n\t */\n\tprotected _ticksToUnits(ticks: Ticks): Ticks {\n\t\treturn ticks;\n\t}\n\n\t/**\n\t *  Return the time in ticks\n\t */\n\ttoTicks(): Ticks {\n\t\treturn this.valueOf() as Ticks;\n\t}\n\n\t/**\n\t *  Return the time in seconds\n\t */\n\ttoSeconds(): Seconds {\n\t\treturn (this.valueOf() / this._getPPQ()) * (60 / this._getBpm());\n\t}\n}\n\nexport function Ticks(value?: TimeValue, units?: TimeBaseUnit): TicksClass {\n\treturn new TicksClass(getContext(), value, units);\n}\n"",""import { getContext } from \""../Global\"";\nimport { ftom, mtof } from \""./Conversions\"";\nimport { FrequencyClass, FrequencyUnit } from \""./Frequency\"";\nimport { TimeValue } from \""./TimeBase\"";\nimport { Hertz, Interval, MidiNote, Seconds, Ticks } from \""./Units\"";\n\n/**\n *  @class Midi is a primitive type for encoding Time values.\n *         Midi can be constructed with or without the `new` keyword. Midi can be passed\n *         into the parameter of any method which takes time as an argument.\n *  @constructor\n *  @extends {Tone.Frequency}\n *  @param  {String|Number}  val    The time value.\n *  @param  {String=}  units  The units of the value.\n *  @example\n * var t = Midi(\""4n\"");//a quarter note\n */\nexport class MidiClass extends FrequencyClass<MidiNote> {\n\n\tname = \""Midi\"";\n\n\treadonly defaultUnits = \""midi\"";\n\n\t/**\n\t *  Returns the value of a frequency in the current units\n\t */\n\tprotected _frequencyToUnits(freq: Hertz): MidiNote {\n\t\treturn ftom(super._frequencyToUnits(freq));\n\t}\n\n\t/**\n\t *  Returns the value of a tick in the current time units\n\t */\n\tprotected _ticksToUnits(ticks: Ticks): MidiNote {\n\t\treturn ftom(super._ticksToUnits(ticks));\n\t}\n\n\t/**\n\t *  Return the value of the beats in the current units\n\t */\n\tprotected _beatsToUnits(beats: number): MidiNote {\n\t\treturn ftom(super._beatsToUnits(beats));\n\t}\n\n\t/**\n\t *  Returns the value of a second in the current units\n\t */\n\tprotected _secondsToUnits(seconds: Seconds): MidiNote {\n\t\treturn ftom(super._secondsToUnits(seconds));\n\t}\n\n\t/**\n\t *  Return the value of the frequency as a MIDI note\n\t *  @return  {MIDI}\n\t *  @example\n\t * Midi(60).toMidi(); //60\n\t */\n\ttoMidi(): MidiNote {\n\t\treturn this.valueOf();\n\t}\n\n\t/**\n\t *  Return the value of the frequency as a MIDI note\n\t *  @return  {MIDI}\n\t *  @example\n\t * Midi(60).toFrequency(); //261.6255653005986\n\t */\n\ttoFrequency(): Hertz {\n\t\treturn mtof(this.toMidi());\n\t}\n\n\t/**\n\t *  Transposes the frequency by the given number of semitones.\n\t *  @return A new transposed MidiClass\n\t *  @example\n\t * Midi(\""A4\"").transpose(3); //\""C5\""\n\t */\n\ttranspose(interval: Interval): MidiClass {\n\t\treturn new MidiClass(this.context, this.toMidi() + interval);\n\t}\n}\n\n/**\n * Convert a value into a FrequencyClass object.\n */\nexport function Midi(value?: TimeValue, units?: FrequencyUnit): MidiClass {\n\treturn new MidiClass(getContext(), value, units);\n}\n"",""import { ToneWithContext, ToneWithContextOptions } from \""../context/ToneWithContext\"";\nimport { Seconds, Time } from \""../type/Units\"";\nimport { Timeline, TimelineEvent } from \""./Timeline\"";\n\ninterface DrawEvent extends TimelineEvent {\n\tcallback: () => void;\n}\n\n/**\n * Draw is useful for synchronizing visuals and audio events.\n * Callbacks from Tone.Transport or any of the Tone.Event classes\n * always happen _before_ the scheduled time and are not synchronized\n * to the animation frame so they are not good for triggering tightly\n * synchronized visuals and sound. Draw makes it easy to schedule\n * callbacks using the AudioContext time and uses requestAnimationFrame.\n * @example\n * Tone.Transport.schedule(function(time){\n * \t//use the time argument to schedule a callback with Draw\n * \tDraw.schedule(function(){\n * \t\t//do drawing or DOM manipulation here\n * \t}, time)\n * }, \""+0.5\"")\n */\nexport class Draw extends ToneWithContext<ToneWithContextOptions> {\n\n\tname = \""Draw\"";\n\n\t/**\n\t *  The duration after which events are not invoked.\n\t */\n\texpiration: Seconds = 0.25;\n\n\t/**\n\t *  The amount of time before the scheduled time\n\t *  that the callback can be invoked. Default is\n\t *  half the time of an animation frame (0.008 seconds).\n\t */\n\tanticipation: Seconds = 0.008;\n\n\t/**\n\t *  All of the events.\n\t */\n\tprivate _events: Timeline<DrawEvent> = new Timeline();\n\n\t/**\n\t *  The draw loop\n\t */\n\tprivate _boundDrawLoop = this._drawLoop.bind(this);\n\n\t/**\n\t * The animation frame id\n\t */\n\tprivate _animationFrame: number = -1;\n\n\t/**\n\t *  Schedule a function at the given time to be invoked\n\t *  on the nearest animation frame.\n\t *  @param  callback  Callback is invoked at the given time.\n\t *  @param  time      The time relative to the AudioContext time to invoke the callback.\n\t */\n\tschedule(callback: () => void, time: Time): this {\n\t\tthis._events.add({\n\t\t\tcallback,\n\t\t\ttime : this.toSeconds(time),\n\t\t});\n\t\t// start the draw loop on the first event\n\t\tif (this._events.length === 1) {\n\t\t\tthis._animationFrame = requestAnimationFrame(this._boundDrawLoop);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Cancel events scheduled after the given time\n\t *  @param  after  Time after which scheduled events will be removed from the scheduling timeline.\n\t */\n\tcancel(after?: Time): this {\n\t\tthis._events.cancel(this.toSeconds(after));\n\t\treturn this;\n\t}\n\n\t/**\n\t *  The draw loop\n\t */\n\tprivate _drawLoop(): void {\n\t\tconst now = this.context.currentTime;\n\t\twhile (this._events.length && (this._events.peek() as DrawEvent).time - this.anticipation <= now) {\n\t\t\tconst event = this._events.shift();\n\t\t\tif (event && now - event.time <= this.expiration) {\n\t\t\t\tevent.callback();\n\t\t\t}\n\t\t}\n\t\tif (this._events.length > 0) {\n\t\t\tthis._animationFrame = requestAnimationFrame(this._boundDrawLoop);\n\t\t}\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._events.dispose();\n\t\tcancelAnimationFrame(this._animationFrame);\n\t\treturn this;\n\t}\n}\n"",""import { Tone } from \""../Tone\"";\nimport { isDefined } from \""./TypeCheck\"";\n\n/**\n * An IntervalTimeline event must have a time and duration\n */\nexport interface IntervalTimelineEvent {\n\ttime: number;\n\tduration: number;\n\t[propName: string]: any;\n}\n\ntype IteratorCallback = (event: IntervalTimelineEvent) => void;\n\n/**\n * Similar to Tone.Timeline, but all events represent\n * intervals with both \""time\"" and \""duration\"" times. The\n * events are placed in a tree structure optimized\n * for querying an intersection point with the timeline\n * events. Internally uses an [Interval Tree](https://en.wikipedia.org/wiki/Interval_tree)\n * to represent the data.\n */\nexport class IntervalTimeline extends Tone {\n\n\tname = \""IntervalTimeline\"";\n\n\t/**\n\t *  The root node of the inteval tree\n\t */\n\tprivate _root: IntervalNode | null = null;\n\n\t/**\n\t *  Keep track of the length of the timeline.\n\t */\n\tprivate _length: number = 0;\n\n\t/**\n\t *  The event to add to the timeline. All events must\n\t *  have a time and duration value\n\t *  @param  event  The event to add to the timeline\n\t */\n\tadd(event: IntervalTimelineEvent): this {\n\t\tthis.assert(isDefined(event.time), \""Events must have a time property\"");\n\t\tthis.assert(isDefined(event.duration), \""Events must have a duration parameter\"");\n\n\t\tevent.time = event.time.valueOf();\n\t\tlet node: IntervalNode | null = new IntervalNode(event.time, event.time + event.duration, event);\n\t\tif (this._root === null) {\n\t\t\tthis._root = node;\n\t\t} else {\n\t\t\tthis._root.insert(node);\n\t\t}\n\t\tthis._length++;\n\t\t// Restructure tree to be balanced\n\t\twhile (node !== null) {\n\t\t\tnode.updateHeight();\n\t\t\tnode.updateMax();\n\t\t\tthis._rebalance(node);\n\t\t\tnode = node.parent;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Remove an event from the timeline.\n\t *  @param  event  The event to remove from the timeline\n\t */\n\tremove(event: IntervalTimelineEvent): this {\n\t\tif (this._root !== null) {\n\t\t\tconst results: IntervalNode[] = [];\n\t\t\tthis._root.search(event.time, results);\n\t\t\tfor (const node of results) {\n\t\t\t\tif (node.event === event) {\n\t\t\t\t\tthis._removeNode(node);\n\t\t\t\t\tthis._length--;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  The number of items in the timeline.\n\t *  @readOnly\n\t */\n\tget length(): number {\n\t\treturn this._length;\n\t}\n\n\t/**\n\t *  Remove events whose time time is after the given time\n\t *  @param  time  The time to query.\n\t */\n\tcancel(after: number): this {\n\t\tthis.forEachFrom(after, event => this.remove(event));\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Set the root node as the given node\n\t */\n\tprivate _setRoot(node: IntervalNode | null): void {\n\t\tthis._root = node;\n\t\tif (this._root !== null) {\n\t\t\tthis._root.parent = null;\n\t\t}\n\t}\n\n\t/**\n\t *  Replace the references to the node in the node's parent\n\t *  with the replacement node.\n\t */\n\tprivate _replaceNodeInParent(node: IntervalNode, replacement: IntervalNode | null): void {\n\t\tif (node.parent !== null) {\n\t\t\tif (node.isLeftChild()) {\n\t\t\t\tnode.parent.left = replacement;\n\t\t\t} else {\n\t\t\t\tnode.parent.right = replacement;\n\t\t\t}\n\t\t\tthis._rebalance(node.parent);\n\t\t} else {\n\t\t\tthis._setRoot(replacement);\n\t\t}\n\t}\n\n\t/**\n\t *  Remove the node from the tree and replace it with\n\t *  a successor which follows the schema.\n\t */\n\tprivate _removeNode(node: IntervalNode): void {\n\t\tif (node.left === null && node.right === null) {\n\t\t\tthis._replaceNodeInParent(node, null);\n\t\t} else if (node.right === null) {\n\t\t\tthis._replaceNodeInParent(node, node.left);\n\t\t} else if (node.left === null) {\n\t\t\tthis._replaceNodeInParent(node, node.right);\n\t\t} else {\n\t\t\tconst balance = node.getBalance();\n\t\t\tlet replacement: IntervalNode;\n\t\t\tlet temp: IntervalNode | null = null;\n\t\t\tif (balance > 0) {\n\t\t\t\tif (node.left.right === null) {\n\t\t\t\t\treplacement = node.left;\n\t\t\t\t\treplacement.right = node.right;\n\t\t\t\t\ttemp = replacement;\n\t\t\t\t} else {\n\t\t\t\t\treplacement = node.left.right;\n\t\t\t\t\twhile (replacement.right !== null) {\n\t\t\t\t\t\treplacement = replacement.right;\n\t\t\t\t\t}\n\t\t\t\t\tif (replacement.parent) {\n\t\t\t\t\t\treplacement.parent.right = replacement.left;\n\t\t\t\t\t\ttemp = replacement.parent;\n\t\t\t\t\t\treplacement.left = node.left;\n\t\t\t\t\t\treplacement.right = node.right;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (node.right.left === null) {\n\t\t\t\treplacement = node.right;\n\t\t\t\treplacement.left = node.left;\n\t\t\t\ttemp = replacement;\n\t\t\t} else {\n\t\t\t\treplacement = node.right.left;\n\t\t\t\twhile (replacement.left !== null) {\n\t\t\t\t\treplacement = replacement.left;\n\t\t\t\t}\n\t\t\t\tif (replacement.parent) {\n\t\t\t\t\treplacement.parent.left = replacement.right;\n\t\t\t\t\ttemp = replacement.parent;\n\t\t\t\t\treplacement.left = node.left;\n\t\t\t\t\treplacement.right = node.right;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.parent !== null) {\n\t\t\t\tif (node.isLeftChild()) {\n\t\t\t\t\tnode.parent.left = replacement;\n\t\t\t\t} else {\n\t\t\t\t\tnode.parent.right = replacement;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._setRoot(replacement);\n\t\t\t}\n\t\t\tif (temp) {\n\t\t\t\tthis._rebalance(temp);\n\t\t\t}\n\t\t}\n\t\tnode.dispose();\n\t}\n\n\t/**\n\t *  Rotate the tree to the left\n\t */\n\tprivate _rotateLeft(node: IntervalNode): void {\n\t\tconst parent = node.parent;\n\t\tconst isLeftChild = node.isLeftChild();\n\n\t\t// Make node.right the new root of this sub tree (instead of node)\n\t\tconst pivotNode = node.right;\n\t\tif (pivotNode) {\n\t\t\tnode.right = pivotNode.left;\n\t\t\tpivotNode.left = node;\n\t\t}\n\n\t\tif (parent !== null) {\n\t\t\tif (isLeftChild) {\n\t\t\t\tparent.left = pivotNode;\n\t\t\t} else {\n\t\t\t\tparent.right = pivotNode;\n\t\t\t}\n\t\t} else {\n\t\t\tthis._setRoot(pivotNode);\n\t\t}\n\t}\n\n\t/**\n\t *  Rotate the tree to the right\n\t */\n\tprivate _rotateRight(node: IntervalNode): void {\n\t\tconst parent = node.parent;\n\t\tconst isLeftChild = node.isLeftChild();\n\n\t\t// Make node.left the new root of this sub tree (instead of node)\n\t\tconst pivotNode = node.left;\n\t\tif (pivotNode) {\n\t\t\tnode.left = pivotNode.right;\n\t\t\tpivotNode.right = node;\n\t\t}\n\n\t\tif (parent !== null) {\n\t\t\tif (isLeftChild) {\n\t\t\t\tparent.left = pivotNode;\n\t\t\t} else {\n\t\t\t\tparent.right = pivotNode;\n\t\t\t}\n\t\t} else {\n\t\t\tthis._setRoot(pivotNode);\n\t\t}\n\t}\n\n\t/**\n\t *  Balance the BST\n\t */\n\tprivate _rebalance(node: IntervalNode): void {\n\t\tconst balance = node.getBalance();\n\t\tif (balance > 1 && node.left) {\n\t\t\tif (node.left.getBalance() < 0) {\n\t\t\t\tthis._rotateLeft(node.left);\n\t\t\t} else {\n\t\t\t\tthis._rotateRight(node);\n\t\t\t}\n\t\t} else if (balance < -1 && node.right) {\n\t\t\tif (node.right.getBalance() > 0) {\n\t\t\t\tthis._rotateRight(node.right);\n\t\t\t} else {\n\t\t\t\tthis._rotateLeft(node);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *  Get an event whose time and duration span the give time. Will\n\t *  return the match whose \""time\"" value is closest to the given time.\n\t *  @return  The event which spans the desired time\n\t */\n\tget(time: number): IntervalTimelineEvent | null {\n\t\tif (this._root !== null) {\n\t\t\tconst results: IntervalNode[] = [];\n\t\t\tthis._root.search(time, results);\n\t\t\tif (results.length > 0) {\n\t\t\t\tlet max = results[0];\n\t\t\t\tfor (let i = 1; i < results.length; i++) {\n\t\t\t\t\tif (results[i].low > max.low) {\n\t\t\t\t\t\tmax = results[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn max.event;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t *  Iterate over everything in the timeline.\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEach(callback: IteratorCallback): this {\n\t\tif (this._root !== null) {\n\t\t\tconst allNodes: IntervalNode[] = [];\n\t\t\tthis._root.traverse(node => allNodes.push(node));\n\t\t\tallNodes.forEach(node => {\n\t\t\t\tif (node.event) {\n\t\t\t\t\tcallback(node.event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over everything in the array in which the given time\n\t *  overlaps with the time and duration time of the event.\n\t *  @param  time The time to check if items are overlapping\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEachAtTime(time: number, callback: IteratorCallback): this {\n\t\tif (this._root !== null) {\n\t\t\tconst results: IntervalNode[] = [];\n\t\t\tthis._root.search(time, results);\n\t\t\tresults.forEach(node => {\n\t\t\t\tif (node.event) {\n\t\t\t\t\tcallback(node.event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over everything in the array in which the time is greater\n\t *  than or equal to the given time.\n\t *  @param  time The time to check if items are before\n\t *  @param  callback The callback to invoke with every item\n\t */\n\tforEachFrom(time: number, callback: IteratorCallback): this {\n\t\tif (this._root !== null) {\n\t\t\tconst results: IntervalNode[] = [];\n\t\t\tthis._root.searchAfter(time, results);\n\t\t\tresults.forEach(node => {\n\t\t\t\tif (node.event) {\n\t\t\t\t\tcallback(node.event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tif (this._root !== null) {\n\t\t\tthis._root.traverse(node => node.dispose());\n\t\t}\n\t\tthis._root = null;\n\t\treturn this;\n\t}\n}\n\n///////////////////////////////////////////////////////////////////////////\n// \tINTERVAL NODE HELPER\n///////////////////////////////////////////////////////////////////////////\n\n/**\n *  Represents a node in the binary search tree, with the addition\n *  of a \""high\"" value which keeps track of the highest value of\n *  its children.\n *  References:\n *  https://brooknovak.wordpress.com/2013/12/07/augmented-interval-tree-in-c/\n *  http://www.mif.vu.lt/~valdas/ALGORITMAI/LITERATURA/Cormen/Cormen.pdf\n *  @param low\n *  @param high\n */\n// tslint:disable-next-line: max-classes-per-file\nclass IntervalNode {\n\n\t// the event container\n\tevent: IntervalTimelineEvent | null;\n\t// the low value\n\tlow: number;\n\t// the high value\n\thigh: number;\n\t// the high value for this and all child nodes\n\tmax: number;\n\t// the nodes to the left\n\tprivate _left: IntervalNode | null = null;\n\t// the nodes to the right\n\tprivate _right: IntervalNode | null = null;\n\t// the parent node\n\tparent: IntervalNode | null = null;\n\t// the number of child nodes\n\theight: number = 0;\n\n\tconstructor(low: number, high: number, event: IntervalTimelineEvent) {\n\t\tthis.event = event;\n\t\t// the low value\n\t\tthis.low = low;\n\t\t// the high value\n\t\tthis.high = high;\n\t\t// the high value for this and all child nodes\n\t\tthis.max = this.high;\n\t}\n\n\t/**\n\t *  Insert a node into the correct spot in the tree\n\t */\n\tinsert(node: IntervalNode): void {\n\t\tif (node.low <= this.low) {\n\t\t\tif (this.left === null) {\n\t\t\t\tthis.left = node;\n\t\t\t} else {\n\t\t\t\tthis.left.insert(node);\n\t\t\t}\n\t\t} else if (this.right === null) {\n\t\t\tthis.right = node;\n\t\t} else {\n\t\t\tthis.right.insert(node);\n\t\t}\n\t}\n\n\t/**\n\t *  Search the tree for nodes which overlap\n\t *  with the given point\n\t *  @param  point  The point to query\n\t *  @param  results  The array to put the results\n\t */\n\tsearch(point: number, results: IntervalNode[]): void {\n\t\t// If p is to the right of the rightmost point of any interval\n\t\t// in this node and all children, there won't be any matches.\n\t\tif (point > this.max) {\n\t\t\treturn;\n\t\t}\n\t\t// Search left children\n\t\tif (this.left !== null) {\n\t\t\tthis.left.search(point, results);\n\t\t}\n\t\t// Check this node\n\t\tif (this.low <= point && this.high > point) {\n\t\t\tresults.push(this);\n\t\t}\n\t\t// If p is to the left of the time of this interval,\n\t\t// then it can't be in any child to the right.\n\t\tif (this.low > point) {\n\t\t\treturn;\n\t\t}\n\t\t// Search right children\n\t\tif (this.right !== null) {\n\t\t\tthis.right.search(point, results);\n\t\t}\n\t}\n\n\t/**\n\t *  Search the tree for nodes which are less\n\t *  than the given point\n\t *  @param  point  The point to query\n\t *  @param  results  The array to put the results\n\t */\n\tsearchAfter(point: number, results: IntervalNode[]): void {\n\t\t// Check this node\n\t\tif (this.low >= point) {\n\t\t\tresults.push(this);\n\t\t\tif (this.left !== null) {\n\t\t\t\tthis.left.searchAfter(point, results);\n\t\t\t}\n\t\t}\n\t\t// search the right side\n\t\tif (this.right !== null) {\n\t\t\tthis.right.searchAfter(point, results);\n\t\t}\n\t}\n\n\t/**\n\t *  Invoke the callback on this element and both it's branches\n\t *  @param  {Function}  callback\n\t */\n\ttraverse(callback: (self: IntervalNode) => void): void {\n\t\tcallback(this);\n\t\tif (this.left !== null) {\n\t\t\tthis.left.traverse(callback);\n\t\t}\n\t\tif (this.right !== null) {\n\t\t\tthis.right.traverse(callback);\n\t\t}\n\t}\n\n\t/**\n\t *  Update the height of the node\n\t */\n\tupdateHeight(): void {\n\t\tif (this.left !== null && this.right !== null) {\n\t\t\tthis.height = Math.max(this.left.height, this.right.height) + 1;\n\t\t} else if (this.right !== null) {\n\t\t\tthis.height = this.right.height + 1;\n\t\t} else if (this.left !== null) {\n\t\t\tthis.height = this.left.height + 1;\n\t\t} else {\n\t\t\tthis.height = 0;\n\t\t}\n\t}\n\n\t/**\n\t *  Update the height of the node\n\t */\n\tupdateMax(): void {\n\t\tthis.max = this.high;\n\t\tif (this.left !== null) {\n\t\t\tthis.max = Math.max(this.max, this.left.max);\n\t\t}\n\t\tif (this.right !== null) {\n\t\t\tthis.max = Math.max(this.max, this.right.max);\n\t\t}\n\t}\n\n\t/**\n\t *  The balance is how the leafs are distributed on the node\n\t *  @return  Negative numbers are balanced to the right\n\t */\n\tgetBalance(): number {\n\t\tlet balance = 0;\n\t\tif (this.left !== null && this.right !== null) {\n\t\t\tbalance = this.left.height - this.right.height;\n\t\t} else if (this.left !== null) {\n\t\t\tbalance = this.left.height + 1;\n\t\t} else if (this.right !== null) {\n\t\t\tbalance = -(this.right.height + 1);\n\t\t}\n\t\treturn balance;\n\t}\n\n\t/**\n\t *  @returns true if this node is the left child of its parent\n\t */\n\tisLeftChild(): boolean {\n\t\treturn this.parent !== null && this.parent.left === this;\n\t}\n\n\t/**\n\t *  get/set the left node\n\t */\n\tget left(): IntervalNode | null {\n\t\treturn this._left;\n\t}\n\n\tset left(node: IntervalNode | null) {\n\t\tthis._left = node;\n\t\tif (node !== null) {\n\t\t\tnode.parent = this;\n\t\t}\n\t\tthis.updateHeight();\n\t\tthis.updateMax();\n\t}\n\n\t/**\n\t *  get/set the right node\n\t */\n\tget right(): IntervalNode | null {\n\t\treturn this._right;\n\t}\n\n\tset right(node: IntervalNode | null) {\n\t\tthis._right = node;\n\t\tif (node !== null) {\n\t\t\tnode.parent = this;\n\t\t}\n\t\tthis.updateHeight();\n\t\tthis.updateMax();\n\t}\n\n\t/**\n\t *  null out references.\n\t */\n\tdispose(): void {\n\t\tthis.parent = null;\n\t\tthis._left = null;\n\t\tthis._right = null;\n\t\tthis.event = null;\n\t}\n}\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { Param } from \""../../core/context/Param\"";\nimport { InputNode, ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { Decibels } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly } from \""../../core/util/Interface\"";\n\ninterface VolumeOptions extends ToneAudioNodeOptions {\n\tvolume: Decibels;\n\tmute: boolean;\n}\n\n/**\n *  @class Volume is a simple volume node, useful for creating a volume fader.\n *\n *  @extends {Tone.AudioNode}\n *  @constructor\n *  @param {Decibels} [volume=0] the initial volume\n *  @example\n * var vol = new Volume(-12);\n * instrument.chain(vol, Tone.Master);\n */\nexport class Volume extends ToneAudioNode<VolumeOptions> {\n\n\treadonly name = \""Volume\"";\n\n\t/**\n\t * the output node\n\t */\n\toutput: Gain<Decibels>;\n\n\t/**\n\t * Input and output are the same\n\t */\n\tinput: Gain;\n\n\t/**\n\t * The unmuted volume\n\t */\n\tprivate _unmutedVolume: Decibels;\n\n\t/**\n\t *  The volume control in decibels.\n\t */\n\tvolume: Param<Decibels>;\n\n\tconstructor(options?: Decibels | Partial<VolumeOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Volume.getDefaults(), arguments, [\""volume\""]));\n\t\tconst options = optionsFromArguments(Volume.getDefaults(), arguments, [\""volume\""]);\n\n\t\tthis.input = this.output = new Gain({\n\t\t\tcontext: this.context,\n\t\t\tgain: options.volume,\n\t\t\tunits: \""decibels\"",\n\t\t});\n\t\tthis.volume = this.output.gain;\n\t\treadOnly(this, \""volume\"");\n\t\tthis._unmutedVolume = options.volume;\n\n\t\t// set the mute initially\n\t\tthis.mute = options.mute;\n\t}\n\n\tstatic getDefaults(): VolumeOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tmute: false,\n\t\t\tvolume: 0,\n\t\t});\n\t}\n\n\t/**\n\t * Mute the output.\n\t * @example\n\t * //mute the output\n\t * volume.mute = true;\n\t */\n\tget mute(): boolean {\n\t\treturn this.volume.value === -Infinity;\n\t}\n\tset mute(mute: boolean) {\n\t\tif (!this.mute && mute) {\n\t\t\tthis._unmutedVolume = this.volume.value;\n\t\t\t// maybe it should ramp here?\n\t\t\tthis.volume.value = -Infinity;\n\t\t} else if (this.mute && !mute) {\n\t\t\tthis.volume.value = this._unmutedVolume;\n\t\t}\n\t}\n\n\t/**\n\t *  clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.input.dispose();\n\t\tthis.volume.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Volume } from \""../../component/channel/Volume\"";\nimport { connectSeries } from \""../Connect\"";\nimport { Decibels } from \""../type/Units\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { onContextClose, onContextInit } from \""./ContextInitialization\"";\nimport { Gain } from \""./Gain\"";\nimport { Param } from \""./Param\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""./ToneAudioNode\"";\n\ninterface DestinationOptions extends ToneAudioNodeOptions {\n\tvolume: Decibels;\n\tmute: boolean;\n}\n\n/**\n *  A single master output which is connected to the\n *  AudioDestinationNode (aka your speakers).\n *  It provides useful conveniences such as the ability\n *  to set the volume and mute the entire application.\n *  It also gives you the ability to apply master effects to your application.\n *\n *  @example\n * //the audio will go from the oscillator to the speakers\n * oscillator.connect(Destination);\n * //a convenience for connecting to the master output is also provided:\n * oscillator.toDestination();\n * //the above two examples are equivalent.\n */\nexport class Destination extends ToneAudioNode<DestinationOptions> {\n\n\treadonly name = \""Destination\"";\n\n\tinput: Volume = new Volume({ context: this.context });\n\toutput: Gain = new Gain({ context : this.context });\n\n\t/**\n\t * The volume of the master output.\n\t */\n\tvolume: Param<Decibels> = this.input.volume;\n\n\tconstructor(options: Partial<DestinationOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Destination.getDefaults(), arguments));\n\t\tconst options = optionsFromArguments(Destination.getDefaults(), arguments);\n\n\t\tconnectSeries(this.input, this.output, this.context.rawContext.destination);\n\n\t\tthis.mute = options.mute;\n\t}\n\n\tstatic getDefaults(): DestinationOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tmute: false,\n\t\t\tvolume: 0,\n\t\t});\n\t}\n\n\t/**\n\t * Mute the output.\n\t * @example\n\t * //mute the output\n\t * Destination.mute = true;\n\t */\n\tget mute(): boolean {\n\t\treturn this.input.mute;\n\t}\n\n\tset mute(mute: boolean) {\n\t\tthis.input.mute = mute;\n\t}\n\n\t/**\n\t *  Add a master effects chain. NOTE: this will disconnect any nodes which were previously\n\t *  chained in the master effects chain.\n\t *  @param nodes All arguments will be connected in a row and the Master will be routed through it.\n\t *  @return  {Destination}  this\n\t *  @example\n\t * //some overall compression to keep the levels in check\n\t * var masterCompressor = new Tone.Compressor({\n\t * \t\""threshold\"" : -6,\n\t * \t\""ratio\"" : 3,\n\t * \t\""attack\"" : 0.5,\n\t * \t\""release\"" : 0.1\n\t * });\n\t * //give a little boost to the lows\n\t * var lowBump = new Tone.Filter(200, \""lowshelf\"");\n\t * //route everything through the filter\n\t * //and compressor before going to the speakers\n\t * Destination.chain(lowBump, masterCompressor);\n\t */\n\tchain(...args: Array<AudioNode | ToneAudioNode>): this {\n\t\tthis.input.disconnect();\n\t\targs.unshift(this.input);\n\t\targs.push(this.output);\n\t\tconnectSeries(...args);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.volume.dispose();\n\t\treturn this;\n\t}\n}\n\n///////////////////////////////////////////////////////////////////////////\n// \tINITIALIZATION\n///////////////////////////////////////////////////////////////////////////\n\nonContextInit(context => {\n\tcontext.destination = new Destination({ context });\n});\n\nonContextClose(context => {\n\tcontext.destination.dispose();\n});\n"",""import { Seconds, Ticks } from \""../type/Units\"";\nimport { noOp } from \""../util/Interface\"";\n\ntype Transport = import(\""../clock/Transport\"").Transport;\n\nexport interface TransportEventOptions {\n\tcallback: (time: number) => void;\n\tonce: boolean;\n\ttime: Ticks;\n}\n\n/**\n * TransportEvent is an internal class used by (Tone.Transport)[Transport]\n * to schedule events. Do no invoke this class directly, it is\n * handled from within Tone.Transport.\n * @param Transport The transport object which the event belongs to\n */\nexport class TransportEvent {\n\n\t/**\n\t * Reference to the Transport that created it\n\t */\n\tprotected transport: Transport;\n\n\t/**\n\t * The unique id of the event\n\t */\n\tid: number = TransportEvent._eventId++;\n\n\t/**\n\t * The time the event starts\n\t */\n\ttime: Ticks;\n\n\t/**\n\t * The callback to invoke\n\t */\n\tprivate callback?: (time: Seconds) => void;\n\n\t/**\n\t * If the event should be removed after being invoked.\n\t */\n\tprivate _once: boolean;\n\n\tconstructor(transport: Transport, opts: Partial<TransportEventOptions>) {\n\n\t\tconst options: TransportEventOptions = Object.assign(TransportEvent.getDefaults(), opts);\n\n\t\tthis.transport = transport;\n\t\tthis.callback = options.callback;\n\t\tthis._once = options.once;\n\t\tthis.time = options.time;\n\t}\n\n\tstatic getDefaults(): TransportEventOptions {\n\t\treturn {\n\t\t\tcallback: noOp,\n\t\t\tonce: false,\n\t\t\ttime: 0,\n\t\t};\n\t}\n\n\t/**\n\t * Current ID counter\n\t */\n\tprivate static _eventId: number = 0;\n\n\t/**\n\t * Invoke the event callback.\n\t * @param  time  The AudioContext time in seconds of the event\n\t */\n\tinvoke(time: Seconds): void {\n\t\tif (this.callback) {\n\t\t\tthis.callback(time);\n\t\t\tif (this._once) {\n\t\t\t\tthis.transport.clear(this.id);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Clean up\n\t */\n\tdispose(): this {\n\t\tthis.callback = undefined;\n\t\treturn this;\n\t}\n}\n"",""import { Context } from \""../context/Context\"";\nimport { TicksClass } from \""../type/Ticks\"";\nimport { Seconds, Ticks, Time } from \""../type/Units\"";\nimport { TransportEvent, TransportEventOptions } from \""./TransportEvent\"";\n\ntype Transport = import(\""../clock/Transport\"").Transport;\n\ninterface TransportRepeatEventOptions extends TransportEventOptions {\n\tinterval: Ticks;\n\tduration: Ticks;\n}\n\n/**\n * TransportRepeatEvent is an internal class used by Tone.Transport\n * to schedule repeat events. This class should not be instantiated directly.\n */\nexport class TransportRepeatEvent extends TransportEvent {\n\n\t/**\n\t * When the event should stop repeating\n\t */\n\tprivate duration: Ticks;\n\n\t/**\n\t * The interval of the repeated event\n\t */\n\tprivate _interval: Ticks;\n\n\t/**\n\t * The ID of the current timeline event\n\t */\n\tprivate _currentId: number = -1;\n\n\t/**\n\t * The ID of the next timeline event\n\t */\n\tprivate _nextId: number = -1;\n\n\t/**\n\t * The time of the next event\n\t */\n\tprivate _nextTick = this.time;\n\n\t/**\n\t * a reference to the bound start method\n\t */\n\tprivate _boundRestart = this._restart.bind(this);\n\n\t/**\n\t * The audio context belonging to this event\n\t */\n\tprotected context: Context;\n\n\tconstructor(transport: Transport, opts: Partial<TransportRepeatEventOptions>) {\n\n\t\tsuper(transport, opts);\n\n\t\tconst options = Object.assign(TransportRepeatEvent.getDefaults(), opts);\n\n\t\tthis.duration =  new TicksClass(transport.context, options.duration).valueOf();\n\t\tthis._interval = new  TicksClass(transport.context, options.interval).valueOf();\n\t\tthis._nextTick = options.time;\n\t\tthis.transport.on(\""start\"", this._boundRestart);\n\t\tthis.transport.on(\""loopStart\"", this._boundRestart);\n\t\tthis.context = this.transport.context;\n\t\tthis._restart();\n\t}\n\n\tstatic getDefaults(): TransportRepeatEventOptions {\n\t\treturn Object.assign({}, TransportEvent.getDefaults(), {\n\t\t\tduration: Infinity,\n\t\t\tinterval: 1,\n\t\t\tonce: false,\n\t\t});\n\t}\n\n\t/**\n\t * Invoke the callback. Returns the tick time which\n\t * the next event should be scheduled at.\n\t * @param  time  The AudioContext time in seconds of the event\n\t */\n\tinvoke(time: Seconds): void {\n\t\t// create more events if necessary\n\t\tthis._createEvents(time);\n\t\t// call the super class\n\t\tsuper.invoke(time);\n\t}\n\n\t/**\n\t * Push more events onto the timeline to keep up with the position of the timeline\n\t */\n\tprivate _createEvents(time: Seconds): void {\n\t\t// schedule the next event\n\t\tconst ticks = this.transport.getTicksAtTime(time);\n\t\tif (ticks >= this.time && ticks >= this._nextTick && this._nextTick + this._interval < this.time + this.duration) {\n\t\t\tthis._nextTick += this._interval;\n\t\t\tthis._currentId = this._nextId;\n\t\t\tthis._nextId = this.transport.scheduleOnce(this.invoke.bind(this),\n\t\t\t\tnew TicksClass(this.context, this._nextTick).toSeconds());\n\t\t}\n\t}\n\n\t/**\n\t * Push more events onto the timeline to keep up with the position of the timeline\n\t */\n\tprivate _restart(time?: Time): void {\n\t\tthis.transport.clear(this._currentId);\n\t\tthis.transport.clear(this._nextId);\n\t\tthis._nextTick = this.time;\n\t\tconst ticks = this.transport.getTicksAtTime(time);\n\t\tif (ticks > this.time) {\n\t\t\tthis._nextTick = this.time + Math.ceil((ticks - this.time) / this._interval) * this._interval;\n\t\t}\n\t\tthis._currentId = this.transport.scheduleOnce(this.invoke.bind(this),\n\t\t\tnew TicksClass(this.context, this._nextTick).toSeconds());\n\t\tthis._nextTick += this._interval;\n\t\tthis._nextId = this.transport.scheduleOnce(this.invoke.bind(this),\n\t\t\tnew TicksClass(this.context, this._nextTick).toSeconds());\n\t}\n\n\t/**\n\t * Clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.transport.clear(this._currentId);\n\t\tthis.transport.clear(this._nextId);\n\t\tthis.transport.off(\""start\"", this._boundRestart);\n\t\tthis.transport.off(\""loopStart\"", this._boundRestart);\n\t\treturn this;\n\t}\n}\n"",""import { TimeClass } from \""../../core/type/Time\"";\nimport { PlaybackState } from \""../../core/util/StateTimeline\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { onContextClose, onContextInit } from \""../context/ContextInitialization\"";\nimport { Gain } from \""../context/Gain\"";\nimport { Param } from \""../context/Param\"";\nimport { ToneWithContext, ToneWithContextOptions } from \""../context/ToneWithContext\"";\nimport { TicksClass } from \""../type/Ticks\"";\nimport { TransportTimeClass } from \""../type/TransportTime\"";\nimport { BarsBeatsSixteenths, BPM, NormalRange, Seconds,\n\tSubdivision, Ticks, Time, TimeSignature, TransportTime } from \""../type/Units\"";\nimport { optionsFromArguments } from \""../util/Defaults\"";\nimport { Emitter } from \""../util/Emitter\"";\nimport { readOnly, writable } from \""../util/Interface\"";\nimport { IntervalTimeline } from \""../util/IntervalTimeline\"";\nimport { Timeline } from \""../util/Timeline\"";\nimport { isArray, isDefined } from \""../util/TypeCheck\"";\nimport { Clock } from \""./Clock\"";\nimport { TransportEvent } from \""./TransportEvent\"";\nimport { TransportRepeatEvent } from \""./TransportRepeatEvent\"";\n\ninterface TransportOptions extends ToneWithContextOptions {\n\tbpm: BPM;\n\tswing: NormalRange;\n\tswingSubdivision: Subdivision;\n\ttimeSignature: number;\n\tloopStart: Time;\n\tloopEnd: Time;\n\tppq: number;\n}\n\ntype TransportEventNames = \""start\"" | \""stop\"" | \""pause\"" | \""loop\"" | \""loopEnd\"" | \""loopStart\"";\n\ninterface SyncedSignalEvent {\n\tsignal: Signal;\n\tinitial: number;\n\tratio: Gain;\n}\n\ntype TransportCallback = (time: Seconds) => void;\n\n/**\n * Transport for timing musical events.\n * Supports tempo curves and time changes. Unlike browser-based timing (setInterval, requestAnimationFrame)\n * Transport timing events pass in the exact time of the scheduled event\n * in the argument of the callback function. Pass that time value to the object\n * you're scheduling. <br><br>\n * A single transport is created for you when the library is initialized.\n * <br><br>\n * The transport emits the events: \""start\"", \""stop\"", \""pause\"", and \""loop\"" which are\n * called with the time of that event as the argument.\n *\n * @example\n * //repeated event every 8th note\n * Transport.scheduleRepeat(function(time){\n * \t//do something with the time\n * }, \""8n\"");\n * @example\n * //schedule an event on the 16th measure\n * Transport.schedule(function(time){\n * \t//do something with the time\n * }, \""16:0:0\"");\n */\nexport class Transport extends ToneWithContext<TransportOptions> implements Emitter<TransportEventNames> {\n\n\tname = \""Transport\"";\n\n\t///////////////////////////////////////////////////////////////////////\n\t// \tLOOPING\n\t//////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * \tIf the transport loops or not.\n\t */\n\tloop: boolean = false;\n\n\t/**\n\t * \tThe loop start position in ticks\n\t */\n\tprivate _loopStart: Ticks = 0;\n\n\t/**\n\t * \tThe loop end position in ticks\n\t */\n\tprivate _loopEnd: Ticks = 0;\n\n\t///////////////////////////////////////////////////////////////////////\n\t// \tCLOCK/TEMPO\n\t//////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  Pulses per quarter is the number of ticks per quarter note.\n\t */\n\tprivate _ppq: number;\n\n\t/**\n\t *  watches the main oscillator for timing ticks\n\t *  initially starts at 120bpm\n\t */\n\tprivate _clock: Clock<BPM>;\n\n\t/**\n\t * The Beats Per Minute of the Transport.\n\t * @example\n\t * Transport.bpm.value = 80;\n\t * //ramp the bpm to 120 over 10 seconds\n\t * Transport.bpm.rampTo(120, 10);\n\t */\n\tbpm: Param<BPM>;\n\n\t/**\n\t *  The time signature, or more accurately the numerator\n\t *  of the time signature over a denominator of 4.\n\t */\n\tprivate _timeSignature: number;\n\n\t///////////////////////////////////////////////////////////////////////\n\t// \tTIMELINE EVENTS\n\t//////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  All the events in an object to keep track by ID\n\t */\n\tprivate _scheduledEvents = {};\n\n\t/**\n\t * \tThe scheduled events.\n\t */\n\tprivate _timeline: Timeline<TransportEvent> = new Timeline();\n\n\t/**\n\t *  Repeated events\n\t */\n\tprivate _repeatedEvents: IntervalTimeline = new IntervalTimeline();\n\n\t/**\n\t *  All of the synced Signals\n\t */\n\tprivate _syncedSignals: SyncedSignalEvent[] = [];\n\n\t///////////////////////////////////////////////////////////////////////\n\t// \tSWING\n\t//////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  The subdivision of the swing\n\t */\n\tprivate _swingTicks: Ticks;\n\n\t/**\n\t *  The swing amount\n\t */\n\tprivate _swingAmount: NormalRange = 0;\n\n\tconstructor(options?: Partial<TransportOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Transport.getDefaults(), arguments));\n\t\tconst options = optionsFromArguments(Transport.getDefaults(), arguments);\n\n\t\t// CLOCK/TEMPO\n\t\tthis._ppq = options.ppq;\n\t\tthis._clock = new Clock({\n\t\t\tcallback : this._processTick.bind(this),\n\t\t\tcontext: this.context,\n\t\t\tfrequency : 0,\n\t\t\tunits: \""bpm\"",\n\t\t});\n\t\tthis._bindClockEvents();\n\t\tthis.bpm = this._clock.frequency;\n\t\tthis._clock.frequency.multiplier = options.ppq;\n\t\tthis.bpm.value = options.bpm;\n\t\treadOnly(this, \""bpm\"");\n\t\tthis._timeSignature = options.timeSignature;\n\n\t\t// SWING\n\t\tthis._swingTicks = options.ppq / 2; // 8n\n\t}\n\n\tstatic getDefaults(): TransportOptions {\n\t\treturn Object.assign(ToneWithContext.getDefaults(), {\n\t\t\tbpm: 120,\n\t\t\tloopEnd: \""4m\"" as Subdivision,\n\t\t\tloopStart: 0,\n\t\t\tppq: 192,\n\t\t\tswing: 0,\n\t\t\tswingSubdivision: \""8n\"" as Subdivision,\n\t\t\ttimeSignature: 4,\n\t\t});\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////////\n\t// \tTICKS\n\t///////////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  called on every tick\n\t *  @param  tickTime clock relative tick time\n\t *  @private\n\t */\n\tprivate _processTick(tickTime: Seconds, ticks: Ticks): void {\n\t\t// handle swing\n\t\tif (this._swingAmount > 0 &&\n\t\t\tticks % this._ppq !== 0 && // not on a downbeat\n\t\t\tticks % (this._swingTicks * 2) !== 0) {\n\t\t\t// add some swing\n\t\t\tconst progress = (ticks % (this._swingTicks * 2)) / (this._swingTicks * 2);\n\t\t\tconst amount = Math.sin((progress) * Math.PI) * this._swingAmount;\n\t\t\ttickTime += new TicksClass(this.context, this._swingTicks * 2 / 3).toSeconds() * amount;\n\t\t}\n\t\t// do the loop test\n\t\tif (this.loop) {\n\t\t\tif (ticks >= this._loopEnd) {\n\t\t\t\tthis.emit(\""loopEnd\"", tickTime);\n\t\t\t\tthis._clock.setTicksAtTime(this._loopStart, tickTime);\n\t\t\t\tticks = this._loopStart;\n\t\t\t\tthis.emit(\""loopStart\"", tickTime, this._clock.getSecondsAtTime(tickTime));\n\t\t\t\tthis.emit(\""loop\"", tickTime);\n\t\t\t}\n\t\t}\n\t\t// invoke the timeline events scheduled on this tick\n\t\tthis._timeline.forEachAtTime(ticks, event => event.invoke(tickTime));\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////////\n\t// \tSCHEDULABLE EVENTS\n\t///////////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Schedule an event along the timeline.\n\t * @param callback The callback to be invoked at the time.\n\t * @param time The time to invoke the callback at.\n\t * @return The id of the event which can be used for canceling the event.\n\t * @example\n\t * //trigger the callback when the Transport reaches the desired time\n\t * Transport.schedule(function(time){\n\t * \tenvelope.triggerAttack(time);\n\t * }, \""128i\"");\n\t */\n\tschedule(callback: TransportCallback, time: TransportTime | TransportTimeClass): number {\n\t\tconst event = new TransportEvent(this, {\n\t\t\tcallback,\n\t\t\ttime : new TransportTimeClass(this.context, time).toTicks(),\n\t\t});\n\t\treturn this._addEvent(event, this._timeline);\n\t}\n\n\t/**\n\t * Schedule a repeated event along the timeline. The event will fire\n\t * at the `interval` starting at the `startTime` and for the specified\n\t * `duration`.\n\t * @param  callback   The callback to invoke.\n\t * @param  interval   The duration between successive callbacks. Must be a positive number.\n\t * @param  startTime  When along the timeline the events should start being invoked.\n\t * @param  duration How long the event should repeat.\n\t * @return  The ID of the scheduled event. Use this to cancel the event.\n\t * @example\n\t * //a callback invoked every eighth note after the first measure\n\t * Transport.scheduleRepeat(callback, \""8n\"", \""1m\"");\n\t */\n\tscheduleRepeat(\n\t\tcallback: TransportCallback,\n\t\tinterval: Time | TimeClass,\n\t\tstartTime?: TransportTime | TransportTimeClass,\n\t\tduration: Time = Infinity,\n\t): number {\n\t\tconst event = new TransportRepeatEvent(this, {\n\t\t\tcallback,\n\t\t\tduration : new TimeClass(this.context, duration).toTicks(),\n\t\t\tinterval: new TimeClass(this.context, interval).toTicks(),\n\t\t\ttime : new TransportTimeClass(this.context, startTime).toTicks(),\n\t\t});\n\t\t// kick it off if the Transport is started\n\t\t// @ts-ignore\n\t\treturn this._addEvent(event, this._repeatedEvents);\n\t}\n\n\t/**\n\t *  Schedule an event that will be removed after it is invoked.\n\t *  @param callback The callback to invoke once.\n\t *  @param time The time the callback should be invoked.\n\t *  @returns The ID of the scheduled event.\n\t */\n\tscheduleOnce(callback: TransportCallback, time: TransportTime | TransportTimeClass): number {\n\t\tconst event = new TransportEvent(this, {\n\t\t\tcallback,\n\t\t\tonce : true,\n\t\t\ttime : new TransportTimeClass(this.context, time).toTicks(),\n\t\t});\n\t\treturn this._addEvent(event, this._timeline);\n\t}\n\n\t/**\n\t * Clear the passed in event id from the timeline\n\t * @param eventId The id of the event.\n\t */\n\tclear(eventId: number): this {\n\t\tif (this._scheduledEvents.hasOwnProperty(eventId)) {\n\t\t\tconst item = this._scheduledEvents[eventId.toString()];\n\t\t\titem.timeline.remove(item.event);\n\t\t\titem.event.dispose();\n\t\t\tdelete this._scheduledEvents[eventId.toString()];\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add an event to the correct timeline. Keep track of the\n\t * timeline it was added to.\n\t * @returns the event id which was just added\n\t */\n\tprivate _addEvent(event: TransportEvent, timeline: Timeline<TransportEvent>): number {\n\t\tthis._scheduledEvents[event.id.toString()] = {\n\t\t\tevent,\n\t\t\ttimeline,\n\t\t};\n\t\ttimeline.add(event);\n\t\treturn event.id;\n\t}\n\n\t/**\n\t * Remove scheduled events from the timeline after\n\t * the given time. Repeated events will be removed\n\t * if their startTime is after the given time\n\t * @param after Clear all events after this time.\n\t */\n\tcancel(after: TransportTime = 0): this {\n\t\tconst computedAfter = this.toTicks(after);\n\t\tthis._timeline.forEachFrom(computedAfter, event => this.clear(event.id));\n\t\tthis._repeatedEvents.forEachFrom(computedAfter, event => this.clear(event.id));\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////////\n\t// \tSTART/STOP/PAUSE\n\t///////////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t *  Bind start/stop/pause events from the clock and emit them.\n\t */\n\tprivate _bindClockEvents(): void {\n\t\tthis._clock.on(\""start\"", (time, offset) => {\n\t\t\toffset = new TicksClass(this.context, offset).toSeconds();\n\t\t\tthis.emit(\""start\"", time, offset);\n\t\t});\n\n\t\tthis._clock.on(\""stop\"", (time) => {\n\t\t\tthis.emit(\""stop\"", time);\n\t\t});\n\n\t\tthis._clock.on(\""pause\"", (time) => {\n\t\t\tthis.emit(\""pause\"", time);\n\t\t});\n\t}\n\n\t/**\n\t *  Returns the playback state of the source, either \""started\"", \""stopped\"", or \""paused\""\n\t */\n\tget state(): PlaybackState {\n\t\treturn this._clock.getStateAtTime(this.now());\n\t}\n\n\t/**\n\t * Start the transport and all sources synced to the transport.\n\t * @param  time The time when the transport should start.\n\t * @param  offset The timeline offset to start the transport.\n\t * @example\n\t * //start the transport in one second starting at beginning of the 5th measure.\n\t * Transport.start(\""+1\"", \""4:0:0\"");\n\t */\n\tstart(time?: Time, offset?: TransportTime): this {\n\t\tlet offsetTicks;\n\t\tif (isDefined(offset)) {\n\t\t\toffsetTicks = this.toTicks(offset);\n\t\t}\n\t\t// start the clock\n\t\tthis._clock.start(time, offsetTicks);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Stop the transport and all sources synced to the transport.\n\t * @param time The time when the transport should stop.\n\t * @example\n\t * Transport.stop();\n\t */\n\tstop(time?: Time): this {\n\t\tthis._clock.stop(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Pause the transport and all sources synced to the transport.\n\t */\n\tpause(time?: Time): this {\n\t\tthis._clock.pause(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Toggle the current state of the transport. If it is\n\t * started, it will stop it, otherwise it will start the Transport.\n\t * @param  time The time of the event\n\t */\n\ttoggle(time?: Time): this {\n\t\ttime = this.toSeconds(time);\n\t\tif (this._clock.getStateAtTime(time) !== \""started\"") {\n\t\t\tthis.start(time);\n\t\t} else {\n\t\t\tthis.stop(time);\n\t\t}\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////////\n\t// \tSETTERS/GETTERS\n\t///////////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * The time signature as just the numerator over 4.\n\t * For example 4/4 would be just 4 and 6/8 would be 3.\n\t * @example\n\t * //common time\n\t * Transport.timeSignature = 4;\n\t * // 7/8\n\t * Transport.timeSignature = [7, 8];\n\t * //this will be reduced to a single number\n\t * Transport.timeSignature; //returns 3.5\n\t */\n\tget timeSignature(): TimeSignature {\n\t\treturn this._timeSignature;\n\t}\n\tset timeSignature(timeSig: TimeSignature) {\n\t\tif (isArray(timeSig)) {\n\t\t\ttimeSig = (timeSig[0] / timeSig[1]) * 4;\n\t\t}\n\t\tthis._timeSignature = timeSig;\n\t}\n\n\t/**\n\t * When the Transport.loop = true, this is the starting position of the loop.\n\t */\n\tget loopStart(): Time {\n\t\treturn new TimeClass(this.context, this._loopStart, \""i\"").toSeconds();\n\t}\n\tset loopStart(startPosition: Time) {\n\t\tthis._loopStart = this.toTicks(startPosition);\n\t}\n\n\t/**\n\t * When the Transport.loop = true, this is the ending position of the loop.\n\t */\n\tget loopEnd(): Time {\n\t\treturn new TimeClass(this.context, this._loopEnd, \""i\"").toSeconds();\n\t}\n\tset loopEnd(endPosition: Time) {\n\t\tthis._loopEnd = this.toTicks(endPosition);\n\t}\n\n\t/**\n\t * Set the loop start and stop at the same time.\n\t * @example\n\t * //loop over the first measure\n\t * Transport.setLoopPoints(0, \""1m\"");\n\t * Transport.loop = true;\n\t */\n\tsetLoopPoints(startPosition: TransportTime, endPosition: TransportTime): this {\n\t\tthis.loopStart = startPosition;\n\t\tthis.loopEnd = endPosition;\n\t\treturn this;\n\t}\n\n\t/**\n\t * The swing value. Between 0-1 where 1 equal to the note + half the subdivision.\n\t */\n\tget swing(): NormalRange {\n\t\treturn this._swingAmount;\n\t}\n\tset swing(amount: NormalRange) {\n\t\t// scale the values to a normal range\n\t\tthis._swingAmount = amount;\n\t}\n\n\t/**\n\t * Set the subdivision which the swing will be applied to.\n\t * The default value is an 8th note. Value must be less\n\t * than a quarter note.\n\t */\n\tget swingSubdivision(): Subdivision {\n\t\treturn new TicksClass(this.context, this._swingTicks).toNotation();\n\t}\n\tset swingSubdivision(subdivision: Subdivision) {\n\t\tthis._swingTicks = this.toTicks(subdivision);\n\t}\n\n\t/**\n\t *  The Transport's position in Bars:Beats:Sixteenths.\n\t *  Setting the value will jump to that position right away.\n\t */\n\tget position(): BarsBeatsSixteenths | Time {\n\t\tconst now = this.now();\n\t\tconst ticks = this._clock.getTicksAtTime(now);\n\t\treturn new TicksClass(this.context, ticks).toBarsBeatsSixteenths();\n\t}\n\tset position(progress: Time) {\n\t\tconst ticks = this.toTicks(progress);\n\t\tthis.ticks = ticks;\n\t}\n\n\t/**\n\t *  The Transport's position in seconds\n\t *  Setting the value will jump to that position right away.\n\t */\n\tget seconds(): Seconds {\n\t\treturn this._clock.seconds;\n\t}\n\n\tset seconds(s: Seconds) {\n\t\tconst now = this.now();\n\t\tconst ticks = this._clock.frequency.timeToTicks(s, now);\n\t\tthis.ticks = ticks;\n\t}\n\n\t/**\n\t *  The Transport's loop position as a normalized value. Always\n\t *  returns 0 if the transport if loop is not true.\n\t */\n\tget progress(): NormalRange {\n\t\tif (this.loop) {\n\t\t\tconst now = this.now();\n\t\t\tconst ticks = this._clock.getTicksAtTime(now);\n\t\t\treturn (ticks - this._loopStart) / (this._loopEnd - this._loopStart);\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t *  The transports current tick position.\n\t */\n\tget ticks(): Ticks {\n\t\treturn this._clock.ticks;\n\t}\n\tset ticks(t: Ticks) {\n\t\tif (this._clock.ticks !== t) {\n\t\t\tconst now = this.now();\n\t\t\t// stop everything synced to the transport\n\t\t\tif (this.state === \""started\"") {\n\t\t\t\tthis.emit(\""stop\"", now);\n\t\t\t\tthis._clock.setTicksAtTime(t, now);\n\t\t\t\t// restart it with the new time\n\t\t\t\tthis.emit(\""start\"", now, this.seconds);\n\t\t\t} else {\n\t\t\t\tthis._clock.setTicksAtTime(t, now);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Get the clock's ticks at the given time.\n\t * @param  time  When to get the tick value\n\t * @return The tick value at the given time.\n\t */\n\tgetTicksAtTime(time?: Time): Ticks {\n\t\treturn Math.round(this._clock.getTicksAtTime(time));\n\t}\n\n\t/**\n\t *  Return the elapsed seconds at the given time.\n\t *  @param  time  When to get the elapsed seconds\n\t *  @return  The number of elapsed seconds\n\t */\n\tgetSecondsAtTime(time: Time): Seconds {\n\t\treturn this._clock.getSecondsAtTime(time);\n\t}\n\n\t/**\n\t *  Pulses Per Quarter note. This is the smallest resolution\n\t *  the Transport timing supports. This should be set once\n\t *  on initialization and not set again. Changing this value\n\t *  after other objects have been created can cause problems.\n\t */\n\tget PPQ(): number {\n\t\treturn this._clock.frequency.multiplier;\n\t}\n\tset PPQ(ppq: number) {\n\t\tthis._clock.frequency.multiplier = ppq;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////////\n\t// \tSYNCING\n\t///////////////////////////////////////////////////////////////////////////////\n\n\t/**\n\t * Returns the time aligned to the next subdivision\n\t * of the Transport. If the Transport is not started,\n\t * it will return 0.\n\t * Note: this will not work precisely during tempo ramps.\n\t * @param  subdivision  The subdivision to quantize to\n\t * @return  The context time of the next subdivision.\n\t * @example\n\t * Transport.start(); //the transport must be started\n\t * Transport.nextSubdivision(\""4n\"");\n\t */\n\tnextSubdivision(subdivision?: Time): Seconds {\n\t\tsubdivision = this.toTicks(subdivision);\n\t\tif (this.state !== \""started\"") {\n\t\t\t// if the transport's not started, return 0\n\t\t\treturn 0;\n\t\t} else {\n\t\t\tconst now = this.now();\n\t\t\t// the remainder of the current ticks and the subdivision\n\t\t\tconst transportPos = this.getTicksAtTime(now);\n\t\t\tconst remainingTicks = subdivision - transportPos % subdivision;\n\t\t\treturn this._clock.nextTickTime(remainingTicks, now);\n\t\t}\n\t}\n\n\t/**\n\t *  Attaches the signal to the tempo control signal so that\n\t *  any changes in the tempo will change the signal in the same\n\t *  ratio.\n\t *\n\t *  @param signal\n\t *  @param ratio Optionally pass in the ratio between the two signals.\n\t * \t\t\t\tOtherwise it will be computed based on their current values.\n\t */\n\tsyncSignal(signal: Signal<any>, ratio?: number): this {\n\t\tif (!ratio) {\n\t\t\t// get the sync ratio\n\t\t\tconst now = this.now();\n\t\t\tif (signal.getValueAtTime(now) !== 0) {\n\t\t\t\tconst bpm = this.bpm.getValueAtTime(now);\n\t\t\t\tconst computedFreq = 1 / (60 / bpm / this.PPQ);\n\t\t\t\tratio = signal.getValueAtTime(now) / computedFreq;\n\t\t\t} else {\n\t\t\t\tratio = 0;\n\t\t\t}\n\t\t}\n\t\tconst ratioSignal = new Gain(ratio);\n\t\t// @ts-ignore\n\t\tthis.bpm.connect(ratioSignal);\n\t\t// @ts-ignore\n\t\tratioSignal.connect(signal._param);\n\t\tthis._syncedSignals.push({\n\t\t\tinitial : signal.value,\n\t\t\tratio : ratioSignal,\n\t\t\tsignal,\n\t\t});\n\t\tsignal.value = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Unsyncs a previously synced signal from the transport's control.\n\t *  See Transport.syncSignal.\n\t */\n\tunsyncSignal(signal: Signal<any>): this {\n\t\tfor (let i = this._syncedSignals.length - 1; i >= 0; i--) {\n\t\t\tconst syncedSignal = this._syncedSignals[i];\n\t\t\tif (syncedSignal.signal === signal) {\n\t\t\t\tsyncedSignal.ratio.dispose();\n\t\t\t\tsyncedSignal.signal.value = syncedSignal.initial;\n\t\t\t\tthis._syncedSignals.splice(i, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._clock.dispose();\n\t\twritable(this, \""bpm\"");\n\t\tthis._timeline.dispose();\n\t\tthis._repeatedEvents.dispose();\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////\n\t// EMITTER MIXIN TO SATISFY COMPILER\n\t///////////////////////////////////////////////////////////////////////\n\n\ton!: (event: TransportEventNames, callback: (...args: any[]) => void) => this;\n\tonce!: (event: TransportEventNames, callback: (...args: any[]) => void) => this;\n\toff!: (event: TransportEventNames, callback?: ((...args: any[]) => void) | undefined) => this;\n\temit!: (event: any, ...args: any[]) => this;\n}\n\nEmitter.mixin(Transport);\n\n///////////////////////////////////////////////////////////////////////////////\n// \tINITIALIZATION\n///////////////////////////////////////////////////////////////////////////////\n\nonContextInit(context => {\n\tcontext.transport = new Transport({ context });\n});\n\nonContextClose(context => {\n\tcontext.transport.dispose();\n});\n"",""import { Volume } from \""../component/channel/Volume\"";\nimport \""../core/context/Destination\"";\nimport { Param } from \""../core/context/Param\"";\nimport { OutputNode, ToneAudioNode, ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { Decibels, Seconds, Time } from \""../core/type/Units\"";\nimport { defaultArg } from \""../core/util/Defaults\"";\nimport { noOp, readOnly } from \""../core/util/Interface\"";\nimport { BasicPlaybackState, StateTimeline } from \""../core/util/StateTimeline\"";\nimport { isUndef } from \""../core/util/TypeCheck\"";\n\ntype onStopCallback = (source: Source<any>) => void;\n\nexport interface SourceOptions extends ToneAudioNodeOptions {\n\tvolume: Decibels;\n\tmute: boolean;\n\tonstop: onStopCallback;\n}\n\n/**\n *  @class  Base class for sources. Sources have start/stop methods\n *          and the ability to be synced to the\n *          start/stop of this.context.transport.\n *\n *  @constructor\n *  @extends {Tone.AudioNode}\n *  @example\n * //Multiple state change events can be chained together,\n * //but must be set in the correct order and with ascending times\n *\n * // OK\n * state.start().stop(\""+0.2\"");\n * // AND\n * state.start().stop(\""+0.2\"").start(\""+0.4\"").stop(\""+0.7\"")\n *\n * // BAD\n * state.stop(\""+0.2\"").start();\n * // OR\n * state.start(\""+0.3\"").stop(\""+0.2\"");\n *\n */\nexport abstract class Source<Options extends SourceOptions> extends ToneAudioNode<Options> {\n\n\t/**\n\t *  The output volume node\n\t */\n\tprivate _volume: Volume;\n\n\t/**\n\t * The output note\n\t */\n\toutput: OutputNode;\n\n\t/**\n\t * Sources have no inputs\n\t */\n\tinput = undefined;\n\n\t/**\n\t * The volume of the output in decibels.\n\t * @example\n\t * source.volume.value = -6;\n\t */\n\tvolume: Param<Decibels>;\n\n\t/**\n\t * The callback to invoke when the source is stopped.\n\t */\n\tonstop: onStopCallback;\n\n\t/**\n\t * \tKeep track of the scheduled state.\n\t */\n\tprotected _state: StateTimeline<{\n\t\tduration?: Seconds;\n\t\toffset?: Seconds;\n\t\t/**\n\t\t * Either the buffer is explicitly scheduled to end using the stop method,\n\t\t * or it's implicitly ended when the buffer is over.\n\t\t */\n\t\timplicitEnd?: boolean;\n\t}> = new StateTimeline(\""stopped\"");\n\n\t/**\n\t *  The synced `start` callback function from the transport\n\t *  @type {Function}\n\t *  @private\n\t */\n\tprotected _synced = false;\n\n\t/**\n\t *  Keep track of all of the scheduled event ids\n\t */\n\tprivate _scheduled: number[] = [];\n\n\t/**\n\t * Placeholder functions for syncing/unsyncing to transport\n\t */\n\tprivate _syncedStart: (time: Seconds, offset: Seconds) => void = noOp;\n\tprivate _syncedStop: (time: Seconds) => void = noOp;\n\n\tconstructor(options: SourceOptions) {\n\t\tsuper(options);\n\t\tthis._state.memory = 100;\n\n\t\tthis._volume = this.output = new Volume({\n\t\t\tcontext: this.context,\n\t\t\tmute: options.mute,\n\t\t\tvolume: options.volume,\n\t\t});\n\t\tthis.volume = this._volume.volume;\n\t\treadOnly(this, \""volume\"");\n\t\tthis.onstop = options.onstop;\n\t}\n\n\tstatic getDefaults(): SourceOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tmute: false,\n\t\t\tonstop: noOp,\n\t\t\tvolume: 0,\n\t\t});\n\t}\n\n\t/**\n\t *  Returns the playback state of the source, either \""started\"" or \""stopped\"".\n\t */\n\tget state(): BasicPlaybackState {\n\t\tif (this._synced) {\n\t\t\tif (this.context.transport.state === \""started\"") {\n\t\t\t\treturn this._state.getValueAtTime(this.context.transport.seconds) as BasicPlaybackState;\n\t\t\t} else {\n\t\t\t\treturn \""stopped\"";\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._state.getValueAtTime(this.now()) as BasicPlaybackState;\n\t\t}\n\t}\n\n\t/**\n\t * Mute the output.\n\t * @example\n\t * //mute the output\n\t * source.mute = true;\n\t */\n\tget mute(): boolean {\n\t\treturn this._volume.mute;\n\t}\n\tset mute(mute: boolean) {\n\t\tthis._volume.mute = mute;\n\t}\n\n\t// overwrite these functions\n\tprotected abstract _start(time: Time, offset?: Time, duration?: Time): void;\n\tprotected abstract _stop(time: Time): void;\n\tabstract restart(time: Time, offset?: Time, duration?: Time): this;\n\n\t/**\n\t * Ensure that the scheduled time is not before the current time.\n\t * Should only be used when scheduled unsynced.\n\t */\n\tprivate _clampToCurrentTime(time: Seconds): Seconds {\n\t\tif (this._synced) {\n\t\t\treturn time;\n\t\t} else {\n\t\t\treturn Math.max(time, this.context.currentTime);\n\t\t}\n\t}\n\n\t/**\n\t *  Start the source at the specified time. If no time is given,\n\t *  start the source now.\n\t *  @param  time When the source should be started.\n\t *  @example\n\t * source.start(\""+0.5\""); //starts the source 0.5 seconds from now\n\t */\n\tstart(time?: Time, offset?: Time, duration?: Time): this {\n\t\tlet computedTime = isUndef(time) && this._synced ? this.context.transport.seconds : this.toSeconds(time);\n\t\tcomputedTime = this._clampToCurrentTime(computedTime);\n\t\tthis.log(\""start\"", computedTime);\n\t\t// if it's started, stop it and restart it\n\t\tif (this._state.getValueAtTime(computedTime) === \""started\"") {\n\t\t\tthis._state.cancel(computedTime);\n\t\t\tthis._state.setStateAtTime(\""started\"", computedTime);\n\t\t\tthis.restart(computedTime, offset, duration);\n\t\t} else {\n\t\t\tthis._state.setStateAtTime(\""started\"", computedTime);\n\t\t\tif (this._synced) {\n\t\t\t\t// add the offset time to the event\n\t\t\t\tconst event = this._state.get(computedTime);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.offset = this.toSeconds(defaultArg(offset, 0));\n\t\t\t\t\tevent.duration = duration ? this.toSeconds(duration) : undefined;\n\t\t\t\t}\n\t\t\t\tconst sched = this.context.transport.schedule(t => {\n\t\t\t\t\tthis._start(t, offset, duration);\n\t\t\t\t}, computedTime);\n\t\t\t\tthis._scheduled.push(sched);\n\n\t\t\t\t// if it's already started\n\t\t\t\tif (this.context.transport.state === \""started\"") {\n\t\t\t\t\tthis._syncedStart(this.now(), this.context.transport.seconds);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._start(computedTime, offset, duration);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Stop the source at the specified time. If no time is given,\n\t *  stop the source now.\n\t *  @param  time When the source should be stopped.\n\t *  @example\n\t * source.stop(); // stops the source immediately\n\t */\n\tstop(time?: Time): this {\n\t\tlet computedTime = isUndef(time) && this._synced ? this.context.transport.seconds : this.toSeconds(time);\n\t\tcomputedTime = this._clampToCurrentTime(computedTime);\n\t\tthis.log(\""stop\"", computedTime);\n\t\tif (!this._synced) {\n\t\t\tthis._stop(computedTime);\n\t\t} else {\n\t\t\tconst sched = this.context.transport.schedule(this._stop.bind(this), computedTime);\n\t\t\tthis._scheduled.push(sched);\n\t\t}\n\t\tthis._state.cancel(computedTime);\n\t\tthis._state.setStateAtTime(\""stopped\"", computedTime);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Sync the source to the Transport so that all subsequent\n\t *  calls to `start` and `stop` are synced to the TransportTime\n\t *  instead of the AudioContext time.\n\t *\n\t * @example\n\t * //sync the source so that it plays between 0 and 0.3 on the Transport's timeline\n\t * source.sync().start(0).stop(0.3);\n\t * //start the transport.\n\t * this.context.transport.start();\n\t *\n\t * @example\n\t * //start the transport with an offset and the sync'ed sources\n\t * //will start in the correct position\n\t * source.sync().start(0.1);\n\t * //the source will be invoked with an offset of 0.4 = (0.5 - 0.1)\n\t * this.context.transport.start(\""+0.5\"", 0.5);\n\t */\n\tsync(): this {\n\t\tif (!this._synced) {\n\t\t\tthis._synced = true;\n\t\t\tthis._syncedStart = (time, offset) => {\n\t\t\t\tif (offset > 0) {\n\t\t\t\t\t// get the playback state at that time\n\t\t\t\t\tconst stateEvent = this._state.get(offset);\n\t\t\t\t\t// listen for start events which may occur in the middle of the sync'ed time\n\t\t\t\t\tif (stateEvent && stateEvent.state === \""started\"" && stateEvent.time !== offset) {\n\t\t\t\t\t\t// get the offset\n\t\t\t\t\t\tconst startOffset = offset - this.toSeconds(stateEvent.time);\n\t\t\t\t\t\tlet duration;\n\t\t\t\t\t\tif (stateEvent.duration) {\n\t\t\t\t\t\t\tduration = this.toSeconds(stateEvent.duration) - startOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._start(time, this.toSeconds(stateEvent.offset) + startOffset, duration);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._syncedStop = time => {\n\t\t\t\tconst seconds = this.context.transport.getSecondsAtTime(Math.max(time - this.sampleTime, 0));\n\t\t\t\tif (this._state.getValueAtTime(seconds) === \""started\"") {\n\t\t\t\t\tthis._stop(time);\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.context.transport.on(\""start\"", this._syncedStart);\n\t\t\tthis.context.transport.on(\""loopStart\"", this._syncedStart);\n\t\t\tthis.context.transport.on(\""stop\"", this._syncedStop);\n\t\t\tthis.context.transport.on(\""pause\"", this._syncedStop);\n\t\t\tthis.context.transport.on(\""loopEnd\"", this._syncedStop);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Unsync the source to the Transport. See Source.sync\n\t */\n\tunsync(): this {\n\t\tif (this._synced) {\n\t\t\tthis.context.transport.off(\""stop\"", this._syncedStop);\n\t\t\tthis.context.transport.off(\""pause\"", this._syncedStop);\n\t\t\tthis.context.transport.off(\""loopEnd\"", this._syncedStop);\n\t\t\tthis.context.transport.off(\""start\"", this._syncedStart);\n\t\t\tthis.context.transport.off(\""loopStart\"", this._syncedStart);\n\t\t}\n\t\tthis._synced = false;\n\t\t// clear all of the scheduled ids\n\t\tthis._scheduled.forEach(id => this.context.transport.clear(id));\n\t\tthis._scheduled = [];\n\t\tthis._state.cancel(0);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.onstop = noOp;\n\t\tthis.unsync();\n\t\tthis._volume.dispose();\n\t\tthis._state.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../core/context/Gain\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { GainFactor, Seconds, Time } from \""../core/type/Units\"";\nimport { noOp } from \""../core/util/Interface\"";\nimport { BasicPlaybackState } from \""../core/util/StateTimeline\"";\n\nexport type OneShotSourceCurve = \""linear\"" | \""exponential\"";\n\ntype onEndedCallback = (source: OneShotSource<any>) => void;\n\nexport interface OneShotSourceOptions extends ToneAudioNodeOptions {\n\tonended: onEndedCallback;\n\tfadeIn: Time;\n\tfadeOut: Time;\n\tcurve: OneShotSourceCurve;\n}\n\nexport abstract class OneShotSource<Options extends ToneAudioNodeOptions> extends ToneAudioNode<Options> {\n\n\t/**\n\t *  The callback to invoke after the\n\t *  source is done playing.\n\t */\n\tonended: onEndedCallback = noOp;\n\n\t/**\n\t * Sources do not have input nodes\n\t */\n\tinput: undefined;\n\n\t/**\n\t *  The start time\n\t */\n\tprotected _startTime: number = -1;\n\n\t/**\n\t *  The stop time\n\t */\n\tprotected _stopTime: number = -1;\n\n\t/**\n\t * The id of the timeout\n\t */\n\tprivate _timeout: number = -1;\n\n\t/**\n\t * The public output node\n\t */\n\toutput: Gain = new Gain({\n\t\tcontext: this.context,\n\t\tgain : 0,\n\t});\n\n\t/**\n\t *  The output gain node.\n\t */\n\tprotected _gainNode = this.output;\n\n\t/**\n\t *  The fadeIn time of the amplitude envelope.\n\t */\n\tprotected _fadeIn: Time;\n\n\t/**\n\t *  The fadeOut time of the amplitude envelope.\n\t */\n\tprotected _fadeOut: Time;\n\n\t/**\n\t * The curve applied to the fades, either \""linear\"" or \""exponential\""\n\t */\n\tprotected _curve: OneShotSourceCurve;\n\n\tconstructor(options: OneShotSourceOptions) {\n\t\tsuper(options);\n\n\t\tthis._fadeIn = options.fadeIn;\n\t\tthis._fadeOut = options.fadeOut;\n\t\tthis._curve = options.curve;\n\t\tthis.onended = options.onended;\n\t}\n\n\tstatic getDefaults(): OneShotSourceOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tcurve: \""linear\"" as OneShotSourceCurve,\n\t\t\tfadeIn : 0,\n\t\t\tfadeOut: 0,\n\t\t\tonended : noOp,\n\t\t});\n\t}\n\n\t/**\n\t * Stop the source node\n\t */\n\tprotected abstract _stopSource(time: Seconds): void;\n\n\t/**\n\t * Start the source node at the given time\n\t * @param  time When to start the node\n\t */\n\tprotected abstract start(time?: Time): this;\n\t/**\n\t * Start the source at the given time\n\t * @param  time When to start the source\n\t */\n\tprotected _startGain(time: Seconds, gain: GainFactor = 1): this {\n\t\tthis.assert(this._startTime === -1, \""Source cannot be started more than once\"");\n\t\t// apply a fade in envelope\n\t\tconst fadeInTime = this.toSeconds(this._fadeIn);\n\n\t\t// record the start time\n\t\tthis._startTime = time + fadeInTime;\n\t\tthis._startTime = Math.max(this._startTime, this.context.currentTime);\n\n\t\t// schedule the envelope\n\t\tif (fadeInTime > 0) {\n\t\t\tthis._gainNode.gain.setValueAtTime(0, time);\n\t\t\tif (this._curve === \""linear\"") {\n\t\t\t\tthis._gainNode.gain.linearRampToValueAtTime(gain, time + fadeInTime);\n\t\t\t} else {\n\t\t\t\tthis._gainNode.gain.exponentialApproachValueAtTime(gain, time, fadeInTime);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._gainNode.gain.setValueAtTime(gain, time);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Stop the source node at the given time.\n\t * @param time When to stop the source\n\t */\n\tstop(time?: Time): this {\n\t\tthis.log(\""stop\"", time);\n\t\tthis._stopGain(this.toSeconds(time));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Stop the source at the given time\n\t * @param  time When to stop the source\n\t */\n\tprotected _stopGain(time: Seconds): this {\n\t\tthis.assert(this._startTime !== -1, \""'start' must be called before 'stop'\"");\n\t\t// cancel the previous stop\n\t\tthis.cancelStop();\n\n\t\t// the fadeOut time\n\t\tconst fadeOutTime = this.toSeconds(this._fadeOut);\n\n\t\t// schedule the stop callback\n\t\tthis._stopTime = this.toSeconds(time) + fadeOutTime;\n\t\tthis._stopTime = Math.max(this._stopTime, this.context.currentTime);\n\t\tif (fadeOutTime > 0) {\n\t\t\t// start the fade out curve at the given time\n\t\t\tif (this._curve === \""linear\"") {\n\t\t\t\tthis._gainNode.gain.linearRampTo(0, fadeOutTime, time);\n\t\t\t} else {\n\t\t\t\tthis._gainNode.gain.targetRampTo(0, fadeOutTime, time);\n\t\t\t}\n\t\t} else {\n\t\t\t// stop any ongoing ramps, and set the value to 0\n\t\t\tthis._gainNode.gain.cancelAndHoldAtTime(time);\n\t\t\tthis._gainNode.gain.setValueAtTime(0, time);\n\t\t}\n\t\tthis.context.clearTimeout(this._timeout);\n\t\tthis._timeout = this.context.setTimeout(() => {\n\t\t\t// allow additional time for the exponential curve to fully decay\n\t\t\tconst additionalTail = this._curve === \""exponential\"" ? fadeOutTime * 2 : 0;\n\t\t\tthis._stopSource(this.now() + additionalTail);\n\t\t\tthis._onended();\n\t\t}, this._stopTime - this.context.now());\n\t\treturn this;\n\t}\n\n\t/**\n\t * Invoke the onended callback\n\t */\n\tprotected _onended(): void {\n\t\tif (this.onended !== noOp) {\n\t\t\tthis.onended(this);\n\t\t\t// overwrite onended to make sure it only is called once\n\t\t\tthis.onended = noOp;\n\t\t\t// dispose when it's ended to free up for garbage collection\n\t\t\tsetTimeout(() => this.dispose(), 1000);\n\t\t}\n\t}\n\n\t/**\n\t *  Get the playback state at the given time\n\t */\n\tgetStateAtTime = function(time: Time): BasicPlaybackState {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tif (this._startTime !== -1 && computedTime >= this._startTime &&\n\t\t\t(this._stopTime === -1 || computedTime <= this._stopTime)) {\n\t\t\treturn \""started\"";\n\t\t} else {\n\t\t\treturn \""stopped\"";\n\t\t}\n\t};\n\n\t/**\n\t * Get the playback state at the current time\n\t */\n\tget state(): BasicPlaybackState {\n\t\treturn this.getStateAtTime(this.now());\n\t}\n\n\t/**\n\t *  Cancel a scheduled stop event\n\t */\n\tcancelStop(): this {\n\t\tthis.log(\""cancelStop\"");\n\t\tthis.assert(this._startTime !== -1, \""Source is not started\"");\n\t\t// cancel the stop envelope\n\t\tthis._gainNode.gain.cancelScheduledValues(this._startTime + this.sampleTime);\n\t\tthis.context.clearTimeout(this._timeout);\n\t\tthis._stopTime = -1;\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._gainNode.disconnect();\n\t\treturn this;\n\t}\n}\n"",""import { connect } from \""../../core/Connect\"";\nimport { Param } from \""../../core/context/Param\"";\nimport { ToneAudioBuffer } from \""../../core/context/ToneAudioBuffer\"";\nimport { GainFactor, Positive, Seconds, Time } from \""../../core/type/Units\"";\nimport { defaultArg, optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { noOp } from \""../../core/util/Interface\"";\nimport { isDefined } from \""../../core/util/TypeCheck\"";\nimport { OneShotSource, OneShotSourceCurve, OneShotSourceOptions } from \""../OneShotSource\"";\n\nexport type ToneBufferSourceCurve = OneShotSourceCurve;\n\ninterface ToneBufferSourceOptions extends OneShotSourceOptions {\n\tbuffer: ToneAudioBuffer;\n\tcurve: ToneBufferSourceCurve;\n\tplaybackRate: Positive;\n\tfadeIn: Time;\n\tfadeOut: Time;\n\tloopStart: Time;\n\tloopEnd: Time;\n\tloop: boolean;\n\tonload: () => void;\n}\n\n/**\n *  Wrapper around the native BufferSourceNode.\n *  @param  buffer   The buffer to play\n *  @param  onended  The callback to invoke when the buffer is done playing.\n */\nexport class ToneBufferSource extends OneShotSource<ToneBufferSourceOptions> {\n\n\tname = \""ToneBufferSource\"";\n\n\t/**\n\t *  The oscillator\n\t */\n\tprivate _source = this.context.createBufferSource();\n\tprotected _internalChannels = [this._source];\n\n\t/**\n\t *  The frequency of the oscillator\n\t */\n\treadonly playbackRate: Param<Positive>;\n\n\t/**\n\t * The private instance of the buffer object\n\t */\n\tprivate _buffer: ToneAudioBuffer;\n\n\t/**\n\t * indicators if the source has started/stopped\n\t */\n\tprivate _sourceStarted: boolean = false;\n\tprivate _sourceStopped: boolean = false;\n\n\tconstructor(buffer?: ToneAudioBuffer | AudioBuffer | string, onload?: () => void);\n\tconstructor(options?: Partial<ToneBufferSourceOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(ToneBufferSource.getDefaults(), arguments, [\""buffer\"", \""onload\""]));\n\t\tconst options = optionsFromArguments(ToneBufferSource.getDefaults(), arguments, [\""buffer\"", \""onload\""]);\n\n\t\tconnect(this._source, this._gainNode);\n\t\tthis._source.onended = () => this._stopSource();\n\n\t\t/**\n\t\t *  The playbackRate of the buffer\n\t\t */\n\t\tthis.playbackRate = new Param({\n\t\t\tcontext: this.context,\n\t\t\tparam : this._source.playbackRate,\n\t\t\tunits : \""positive\"",\n\t\t\tvalue : options.playbackRate,\n\t\t});\n\n\t\t// set some values initially\n\t\tthis.loop = options.loop;\n\t\tthis.loopStart = options.loopStart;\n\t\tthis.loopEnd = options.loopEnd;\n\t\tthis._buffer = new ToneAudioBuffer(options.buffer, options.onload);\n\n\t\tthis._internalChannels.push(this._source);\n\t}\n\n\tstatic getDefaults(): ToneBufferSourceOptions {\n\t\treturn Object.assign(OneShotSource.getDefaults(), {\n\t\t\tbuffer: new ToneAudioBuffer(),\n\t\t\tloop: false,\n\t\t\tloopEnd : 0,\n\t\t\tloopStart : 0,\n\t\t\tonload: noOp,\n\t\t\tplaybackRate : 1,\n\t\t});\n\t}\n\n\t/**\n\t *  The fadeIn time of the amplitude envelope.\n\t */\n\tget fadeIn(): Time {\n\t\treturn this._fadeIn;\n\t}\n\tset fadeIn(t: Time) {\n\t\tthis._fadeIn = t;\n\t}\n\n\t/**\n\t *  The fadeOut time of the amplitude envelope.\n\t */\n\tget fadeOut(): Time {\n\t\treturn this._fadeOut;\n\t}\n\tset fadeOut(t: Time) {\n\t\tthis._fadeOut = t;\n\t}\n\n\t/**\n\t * The curve applied to the fades, either \""linear\"" or \""exponential\""\n\t */\n\tget curve(): ToneBufferSourceCurve {\n\t\treturn this._curve;\n\t}\n\tset curve(t) {\n\t\tthis._curve = t;\n\t}\n\n\t/**\n\t *  Start the buffer\n\t *  @param  time When the player should start.\n\t *  @param  offset The offset from the beginning of the sample to start at.\n\t *  @param  duration How long the sample should play. If no duration\n\t *                   is given, it will default to the full length\n\t *                   of the sample (minus any offset)\n\t *  @param  gain  The gain to play the buffer back at.\n\t */\n\tstart(time?: Time, offset?: Time, duration?: Time, gain: GainFactor = 1): this {\n\t\tthis.assert(this.buffer.loaded, \""buffer is either not set or not loaded\"");\n\t\tconst computedTime = this.toSeconds(time);\n\n\t\t// apply the gain envelope\n\t\tthis._startGain(computedTime, gain);\n\n\t\t// if it's a loop the default offset is the loopstart point\n\t\tif (this.loop) {\n\t\t\toffset = defaultArg(offset, this.loopStart);\n\t\t} else {\n\t\t\t// otherwise the default offset is 0\n\t\t\toffset = defaultArg(offset, 0);\n\t\t}\n\t\t// make sure the offset is not less than 0\n\t\tlet computedOffset = Math.max(this.toSeconds(offset), 0);\n\n\t\t// start the buffer source\n\t\tif (this.loop) {\n\t\t\t// modify the offset if it's greater than the loop time\n\t\t\tconst loopEnd = this.toSeconds(this.loopEnd) || this.buffer.duration;\n\t\t\tconst loopStart = this.toSeconds(this.loopStart);\n\t\t\tconst loopDuration = loopEnd - loopStart;\n\t\t\t// move the offset back\n\t\t\tif (computedOffset >= loopEnd) {\n\t\t\t\tcomputedOffset = ((computedOffset - loopStart) % loopDuration) + loopStart;\n\t\t\t}\n\t\t}\n\n\t\t// this.buffer.loaded would have return false if the AudioBuffer was undefined\n\t\tthis._source.buffer = this.buffer.get() as AudioBuffer;\n\t\tthis._source.loopEnd = this.toSeconds(this.loopEnd) || this.buffer.duration;\n\t\tif (computedOffset < this.buffer.duration) {\n\t\t\tthis._sourceStarted = true;\n\t\t\tthis._source.start(computedTime, computedOffset);\n\t\t}\n\n\t\t// if a duration is given, schedule a stop\n\t\tif (isDefined(duration)) {\n\t\t\tlet computedDur = this.toSeconds(duration);\n\t\t\t// make sure it's never negative\n\t\t\tcomputedDur = Math.max(computedDur, 0);\n\t\t\tthis.stop(computedTime + computedDur);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprotected _stopSource(time?: Seconds): void {\n\t\tif (!this._sourceStopped) {\n\t\t\tthis._sourceStopped = true;\n\t\t\tthis._source.stop(this.toSeconds(time));\n\t\t\tthis._onended();\n\t\t}\n\t}\n\n\t/**\n\t * If loop is true, the loop will start at this position.\n\t */\n\tget loopStart(): Time {\n\t\treturn this._source.loopStart;\n\t}\n\tset loopStart(loopStart: Time) {\n\t\tthis._source.loopStart = this.toSeconds(loopStart);\n\t}\n\n\t/**\n\t * If loop is true, the loop will end at this position.\n\t */\n\tget loopEnd(): Time {\n\t\treturn this._source.loopEnd;\n\t}\n\tset loopEnd(loopEnd: Time) {\n\t\tthis._source.loopEnd = this.toSeconds(loopEnd);\n\t}\n\n\t/**\n\t * The audio buffer belonging to the player.\n\t */\n\tget buffer(): ToneAudioBuffer {\n\t\treturn this._buffer;\n\t}\n\tset buffer(buffer: ToneAudioBuffer) {\n\t\tthis._buffer.set(buffer);\n\t}\n\n\t/**\n\t * If the buffer should loop once it's over.\n\t */\n\tget loop(): boolean {\n\t\treturn this._source.loop;\n\t}\n\tset loop(loop: boolean) {\n\t\tthis._source.loop = loop;\n\t\tif (this._sourceStarted) {\n\t\t\tthis.cancelStop();\n\t\t}\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._source.onended = null;\n\t\tthis._source.disconnect();\n\t\tthis._buffer.dispose();\n\t\tthis.playbackRate.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioBuffer } from \""../core/context/ToneAudioBuffer\"";\nimport { Positive, Time } from \""../core/type/Units\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { Source, SourceOptions } from \""../source/Source\"";\nimport { ToneBufferSource } from \""./buffer/BufferSource\"";\nimport { OneShotSourceCurve } from \""./OneShotSource\"";\n\ntype NoiseType = \""white\"" | \""brown\"" | \""pink\"";\n\ninterface NoiseOptions extends SourceOptions {\n\ttype: NoiseType;\n\tplaybackRate: Positive;\n\tfadeIn: Time;\n\tfadeOut: Time;\n}\n\n/**\n * Noise is a noise generator. It uses looped noise buffers to save on performance.\n * Noise supports the noise types: \""pink\"", \""white\"", and \""brown\"". Read more about\n * colors of noise on [Wikipedia](https://en.wikipedia.org/wiki/Colors_of_noise).\n *\n * @param type the noise type (white|pink|brown)\n * @example\n * //initialize the noise and start\n * var noise = new Noise(\""pink\"").start();\n *\n * //make an autofilter to shape the noise\n * var autoFilter = new Tone.AutoFilter({\n * \t\""frequency\"" : \""8m\"",\n * \t\""min\"" : 800,\n * \t\""max\"" : 15000\n * }).connect(Tone.Master);\n *\n * //connect the noise\n * noise.connect(autoFilter);\n * //start the autofilter LFO\n * autoFilter.start()\n */\nexport class Noise extends Source<NoiseOptions> {\n\n\treadonly name = \""Noise\"";\n\n\t/**\n\t * Private reference to the source\n\t */\n\tprivate _source: ToneBufferSource | null = null;\n\n\t/**\n\t * private reference to the type\n\t */\n\tprivate _type!: NoiseType;\n\n\t/**\n\t *  The playback rate of the noise. Affects\n\t *  the \""frequency\"" of the noise.\n\t */\n\tprivate _playbackRate: Positive;\n\n\t/**\n\t *  The fadeIn time of the amplitude envelope.\n\t */\n\tprotected _fadeIn: Time;\n\n\t/**\n\t *  The fadeOut time of the amplitude envelope.\n\t */\n\tprotected _fadeOut: Time;\n\n\tconstructor(type?: NoiseType);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(options?: Partial<NoiseOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(Noise.getDefaults(), arguments, [\""type\""]));\n\t\tconst options = optionsFromArguments(Noise.getDefaults(), arguments, [\""type\""]);\n\n\t\tthis._playbackRate = options.playbackRate;\n\t\tthis.type = options.type;\n\t\tthis._fadeIn = options.fadeIn;\n\t\tthis._fadeOut = options.fadeOut;\n\t}\n\n\tstatic getDefaults(): NoiseOptions {\n\t\treturn Object.assign(Source.getDefaults(), {\n\t\t\tfadeIn: 0,\n\t\t\tfadeOut: 0,\n\t\t\tplaybackRate: 1,\n\t\t\ttype: \""white\"" as NoiseType,\n\t\t});\n\t}\n\n\t/**\n\t * The type of the noise. Can be \""white\"", \""brown\"", or \""pink\"".\n\t * @example\n\t * noise.type = \""white\"";\n\t */\n\tget type(): NoiseType {\n\t\treturn this._type;\n\t}\n\tset type(type: NoiseType) {\n\t\tthis.assert(type in _noiseBuffers, \""Noise: invalid type: \"" + type);\n\t\tif (this._type !== type) {\n\t\t\tthis._type = type;\n\t\t\t// if it's playing, stop and restart it\n\t\t\tif (this.state === \""started\"") {\n\t\t\t\tconst now = this.now();\n\t\t\t\tthis._stop(now);\n\t\t\t\tthis._start(now);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *  The playback rate of the noise. Affects\n\t *  the \""frequency\"" of the noise.\n\t */\n\tget playbackRate(): Positive {\n\t\treturn this._playbackRate;\n\t}\n\tset playbackRate(rate: Positive) {\n\t\tthis._playbackRate = rate;\n\t\tif (this._source) {\n\t\t\tthis._source.playbackRate.value = rate;\n\t\t}\n\t}\n\n\t/**\n\t *  internal start method\n\t */\n\tprotected _start(time?: Time): void {\n\t\tconst buffer = _noiseBuffers[this._type];\n\t\tthis._source = new ToneBufferSource({\n\t\t\tbuffer,\n\t\t\tcontext: this.context,\n\t\t\tfadeIn: this._fadeIn,\n\t\t\tfadeOut: this._fadeOut,\n\t\t\tloop: true,\n\t\t\tonended: () => this.onstop(this),\n\t\t\tplaybackRate: this._playbackRate,\n\t\t}).connect(this.output);\n\t\tthis._source.start(this.toSeconds(time), Math.random() * (buffer.duration - 0.001));\n\t}\n\n\t/**\n\t *  internal stop method\n\t *\n\t *  @param {Time} time\n\t *  @private\n\t */\n\tprotected _stop(time?: Time): void {\n\t\tif (this._source) {\n\t\t\tthis._source.stop(this.toSeconds(time));\n\t\t\tthis._source = null;\n\t\t}\n\t}\n\n\t/**\n\t *  The fadeIn time of the amplitude envelope.\n\t */\n\tget fadeIn(): Time {\n\t\treturn this._fadeIn;\n\t}\n\tset fadeIn(time) {\n\t\tthis._fadeIn = time;\n\t\tif (this._source) {\n\t\t\tthis._source.fadeIn = this._fadeIn;\n\t\t}\n\t}\n\n\t/**\n\t *  The fadeOut time of the amplitude envelope.\n\t */\n\tget fadeOut(): Time {\n\t\treturn this._fadeOut;\n\t}\n\tset fadeOut(time) {\n\t\tthis._fadeOut = time;\n\t\tif (this._source) {\n\t\t\tthis._source.fadeOut = this._fadeOut;\n\t\t}\n\t}\n\n\t/**\n\t * Restarts the noise.\n\t * @param  time When to restart the noise.\n\t */\n\trestart(time?: Time): this {\n\t\t// TODO could be optimized by cancelling the buffer source 'stop'\n\t\t// stop and restart\n\t\tthis._stop(time);\n\t\tthis._start(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tif (this._source) {\n\t\t\tthis._source.disconnect();\n\t\t}\n\t\treturn this;\n\t}\n}\n\n///////////////////////////////////////////////////////////////////////////\n// THE NOISE BUFFERS\n///////////////////////////////////////////////////////////////////////////\n\n// Noise buffer stats\nconst BUFFER_LENGTH = 44100 * 5;\nconst NUM_CHANNELS = 2;\n\n/**\n * The cached noise buffers\n */\ninterface NoiseCache {\n\t[key: string]: ToneAudioBuffer | null;\n}\n\n/**\n * Cache the noise buffers\n */\nconst _noiseCache: NoiseCache = {\n\tbrown: null,\n\tpink: null,\n\twhite: null,\n};\n\n/**\n * The noise arrays. Generated on initialization.\n * borrowed heavily from https://github.com/zacharydenton/noise.js\n * (c) 2013 Zach Denton (MIT)\n */\nconst _noiseBuffers = {\n\tget brown(): ToneAudioBuffer {\n\t\tif (!_noiseCache.brown) {\n\t\t\tconst buffer: Float32Array[] = [];\n\t\t\tfor (let channelNum = 0; channelNum < NUM_CHANNELS; channelNum++) {\n\t\t\t\tconst channel = new Float32Array(BUFFER_LENGTH);\n\t\t\t\tbuffer[channelNum] = channel;\n\t\t\t\tlet lastOut = 0.0;\n\t\t\t\tfor (let i = 0; i < BUFFER_LENGTH; i++) {\n\t\t\t\t\tconst white = Math.random() * 2 - 1;\n\t\t\t\t\tchannel[i] = (lastOut + (0.02 * white)) / 1.02;\n\t\t\t\t\tlastOut = channel[i];\n\t\t\t\t\tchannel[i] *= 3.5; // (roughly) compensate for gain\n\t\t\t\t}\n\t\t\t}\n\t\t\t_noiseCache.brown = new ToneAudioBuffer().fromArray(buffer);\n\t\t}\n\t\treturn _noiseCache.brown;\n\t},\n\n\tget pink(): ToneAudioBuffer {\n\t\tif (!_noiseCache.pink) {\n\t\t\tconst buffer: Float32Array[] = [];\n\t\t\tfor (let channelNum = 0; channelNum < NUM_CHANNELS; channelNum++) {\n\t\t\t\tconst channel = new Float32Array(BUFFER_LENGTH);\n\t\t\t\tbuffer[channelNum] = channel;\n\t\t\t\t// tslint:disable-next-line: one-variable-per-declaration\n\t\t\t\tlet b0, b1, b2, b3, b4, b5, b6;\n\t\t\t\tb0 = b1 = b2 = b3 = b4 = b5 = b6 = 0.0;\n\t\t\t\tfor (let i = 0; i < BUFFER_LENGTH; i++) {\n\t\t\t\t\tconst white = Math.random() * 2 - 1;\n\t\t\t\t\tb0 = 0.99886 * b0 + white * 0.0555179;\n\t\t\t\t\tb1 = 0.99332 * b1 + white * 0.0750759;\n\t\t\t\t\tb2 = 0.96900 * b2 + white * 0.1538520;\n\t\t\t\t\tb3 = 0.86650 * b3 + white * 0.3104856;\n\t\t\t\t\tb4 = 0.55000 * b4 + white * 0.5329522;\n\t\t\t\t\tb5 = -0.7616 * b5 - white * 0.0168980;\n\t\t\t\t\tchannel[i] = b0 + b1 + b2 + b3 + b4 + b5 + b6 + white * 0.5362;\n\t\t\t\t\tchannel[i] *= 0.11; // (roughly) compensate for gain\n\t\t\t\t\tb6 = white * 0.115926;\n\t\t\t\t}\n\t\t\t}\n\t\t\t_noiseCache.pink = new ToneAudioBuffer().fromArray(buffer);\n\t\t}\n\t\treturn _noiseCache.pink;\n\t},\n\n\tget white(): ToneAudioBuffer {\n\t\tif (!_noiseCache.white) {\n\t\t\tconst buffer: Float32Array[] = [];\n\t\t\tfor (let channelNum = 0; channelNum < NUM_CHANNELS; channelNum++) {\n\t\t\t\tconst channel = new Float32Array(BUFFER_LENGTH);\n\t\t\t\tbuffer[channelNum] = channel;\n\t\t\t\tfor (let i = 0; i < BUFFER_LENGTH; i++) {\n\t\t\t\t\tchannel[i] = Math.random() * 2 - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t_noiseCache.white = new ToneAudioBuffer().fromArray(buffer);\n\t\t}\n\t\treturn _noiseCache.white;\n\t},\n};\n"",""import { AbstractParam } from \""../core/context/AbstractParam\"";\nimport { Param } from \""../core/context/Param\"";\nimport { InputNode, OutputNode, ToneAudioNode, ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { connect } from \""../core/context/ToneAudioNode\"";\nimport { Time, Unit, UnitName } from \""../core/type/Units\"";\nimport { isAudioParam } from \""../core/util/AdvancedTypeCheck\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\n\nexport interface SignalOptions<Type> extends ToneAudioNodeOptions {\n\tvalue: Type;\n\tunits: UnitName;\n\tconvert: boolean;\n}\n\n/**\n * A signal is an audio-rate value. Tone.Signal is a core component of the library.\n * Unlike a number, Signals can be scheduled with sample-level accuracy. Tone.Signal\n * has all of the methods available to native Web Audio\n * [AudioParam](http://webaudio.github.io/web-audio-api/#the-audioparam-interface)\n * as well as additional conveniences. Read more about working with signals\n * [here](https://github.com/Tonejs/Tone.js/wiki/Signals).\n *  @param value Initial value of the signal\n *  @param units unit The units the signal is in.\n * @example\n * const signal = new Tone.Signal(10);\n */\nexport class Signal<Type extends Unit = number> extends ToneAudioNode<SignalOptions<any>>\nimplements AbstractParam<Type> {\n\n\treadonly name: string = \""Signal\"";\n\n\t/**\n\t * Indicates if the value should be overridden on connection.\n\t */\n\treadonly override: boolean = true;\n\n\t/**\n\t * The constant source node which generates the signal\n\t */\n\tprotected _constantSource: ConstantSourceNode = this.context.createConstantSource();\n\treadonly output: OutputNode = this._constantSource;\n\tprotected _param: Param<Type>;\n\treadonly input: InputNode;\n\n\tconstructor(value?: Type, units?: UnitName);\n\tconstructor(options?: Partial<SignalOptions<Type>>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Signal.getDefaults(), arguments, [\""value\"", \""units\""]));\n\n\t\tconst options = optionsFromArguments(Signal.getDefaults(), arguments, [\""value\"", \""units\""]) as SignalOptions<Type>;\n\n\t\tthis._constantSource.start(0);\n\t\tthis.input = this._param = new Param({\n\t\t\tcontext: this.context,\n\t\t\tconvert: options.convert,\n\t\t\tparam: this._constantSource.offset,\n\t\t\tunits: options.units,\n\t\t\tvalue: options.value,\n\t\t});\n\t}\n\n\tstatic getDefaults(): SignalOptions<any> {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tchannelCount: 1,\n\t\t\tchannelCountMode: \""explicit\"",\n\t\t\tchannelInterpretation: \""discrete\"",\n\t\t\tconvert: true,\n\t\t\tunits: \""number\"" as UnitName,\n\t\t\tvalue: 0,\n\t\t}) as SignalOptions<any>;\n\t}\n\n\tconnect(destination: InputNode, outputNum: number = 0, inputNum: number = 0): this {\n\t\tconnectSignal(this, destination, outputNum, inputNum);\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._param.dispose();\n\t\tthis._constantSource.stop(this.now());\n\t\tthis._constantSource.disconnect();\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// ABSTRACT PARAM INTERFACE\n\t// just a proxy for the ConstantSourceNode's offset AudioParam\n\t// all docs are generated from AbstractParam.ts\n\t///////////////////////////////////////////////////////////////////////////\n\n\tsetValueAtTime(value: Type, time: Time): this {\n\t\tthis._param.setValueAtTime(value, time);\n\t\treturn this;\n\t}\n\tgetValueAtTime(time: Time): Type {\n\t\treturn this._param.getValueAtTime(time);\n\t}\n\tsetRampPoint(time: Time): this {\n\t\tthis._param.setRampPoint(time);\n\t\treturn this;\n\t}\n\tlinearRampToValueAtTime(value: Type, time: Time): this {\n\t\tthis._param.linearRampToValueAtTime(value, time);\n\t\treturn this;\n\t}\n\texponentialRampToValueAtTime(value: Type, time: Time): this {\n\t\tthis._param.exponentialRampToValueAtTime(value, time);\n\t\treturn this;\n\t}\n\texponentialRampTo(value: Type, rampTime: Time, startTime?: Time): this {\n\t\tthis._param.exponentialRampTo(value, rampTime, startTime);\n\t\treturn this;\n\t}\n\tlinearRampTo(value: Type, rampTime: Time, startTime?: Time): this {\n\t\tthis._param.linearRampTo(value, rampTime, startTime);\n\t\treturn this;\n\t}\n\ttargetRampTo(value: Type, rampTime: Time, startTime?: Time): this {\n\t\tthis._param.targetRampTo(value, rampTime, startTime);\n\t\treturn this;\n\t}\n\texponentialApproachValueAtTime(value: Type, time: Time, rampTime: Time): this {\n\t\tthis._param.exponentialApproachValueAtTime(value, time, rampTime);\n\t\treturn this;\n\t}\n\tsetTargetAtTime(value: Type, startTime: Time, timeConstant: number): this {\n\t\tthis._param.setTargetAtTime(value, startTime, timeConstant);\n\t\treturn this;\n\t}\n\tsetValueCurveAtTime(values: Type[], startTime: Time, duration: Time, scaling?: number): this {\n\t\tthis._param.setValueCurveAtTime(values, startTime, duration, scaling);\n\t\treturn this;\n\t}\n\tcancelScheduledValues(time: Time): this {\n\t\tthis._param.cancelScheduledValues(time);\n\t\treturn this;\n\t}\n\tcancelAndHoldAtTime(time: Time): this {\n\t\tthis._param.cancelAndHoldAtTime(time);\n\t\treturn this;\n\t}\n\trampTo(value: Type, rampTime: Time, startTime?: Time): this {\n\t\tthis._param.rampTo(value, rampTime, startTime);\n\t\treturn this;\n\t}\n\n\tget value(): Type {\n\t\treturn this._param.value;\n\t}\n\tset value(value: Type) {\n\t\tthis._param.value = value;\n\t}\n\n\tget convert(): boolean {\n\t\treturn this._param.convert;\n\t}\n\tset convert(convert: boolean) {\n\t\tthis._param.convert = convert;\n\t}\n\n\tget units(): UnitName {\n\t\treturn this._param.units;\n\t}\n\n\tget overridden(): boolean {\n\t\treturn this._param.overridden;\n\t}\n\tset overridden(overridden: boolean) {\n\t\tthis._param.overridden = overridden;\n\t}\n\n\tget maxValue(): number {\n\t\treturn this._param.maxValue;\n\t}\n\tget minValue(): number {\n\t\treturn this._param.minValue;\n\t}\n}\n\n/**\n * When connecting from a signal, it's necessary to zero out the node destination\n * node if that node is also a signal. If the destination is not 0, then the values\n * will be summed. This method insures that the output of the destination signal will\n * be the same as the source signal, making the destination signal a pass through node.\n * @param signal The output signal to connect from\n * @param destination the destination to connect to\n * @param outputNum the optional output number\n * @param inputNum the input number\n */\nexport function connectSignal(signal: OutputNode, destination: InputNode, outputNum?: number, inputNum?: number): void {\n\tif (destination instanceof Param || isAudioParam(destination) ||\n\t\t(destination instanceof Signal && destination.override)) {\n\t\t// cancel changes\n\t\tdestination.cancelScheduledValues(0);\n\t\t// reset the value\n\t\tdestination.setValueAtTime(0, 0);\n\t\t// mark the value as overridden\n\t\tif (destination instanceof Signal) {\n\t\t\tdestination.overridden = true;\n\t\t}\n\t}\n\tconnect(signal, destination, outputNum, inputNum);\n}\n"",""import { connect } from \""../../core/Connect\"";\nimport { Param } from \""../../core/context/Param\"";\nimport { Cents, Frequency, Seconds, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { OneShotSource, OneShotSourceOptions } from \""../OneShotSource\"";\n\ninterface ToneOscillatorNodeOptions extends OneShotSourceOptions {\n\tfrequency: Frequency;\n\tdetune: Cents;\n\ttype: OscillatorType;\n}\n\n/**\n * Wrapper around the native fire-and-forget OscillatorNode.\n * Adds the ability to reschedule the stop method.\n * ***[Tone.Oscillator](Oscillator) is better for most use-cases***\n *  @extends {Tone.AudioNode}\n *  @param  {AudioBuffer|Tone.Buffer}  buffer   The buffer to play\n *  @param  {Function}  onload  The callback to invoke when the\n *                               buffer is done playing.\n */\nexport class ToneOscillatorNode extends OneShotSource<ToneOscillatorNodeOptions> {\n\n\treadonly name = \""ToneOscillatorNode\"";\n\n\t/**\n\t *  The oscillator\n\t */\n\tprivate _oscillator = this.context.createOscillator();\n\tprotected _internalChannels = [this._oscillator];\n\n\t/**\n\t *  The frequency of the oscillator\n\t */\n\treadonly frequency: Param<Frequency>;\n\n\t/**\n\t *  The detune of the oscillator\n\t */\n\treadonly detune: Param<Cents>;\n\n\tconstructor(options?: Partial<ToneOscillatorNodeOptions>);\n\tconstructor(\n\t\tfrequency: Frequency,\n\t\ttype: OscillatorType,\n\t);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(ToneOscillatorNode.getDefaults(), arguments, [\""frequency\"", \""type\""]));\n\t\tconst options = optionsFromArguments(ToneOscillatorNode.getDefaults(), arguments, [\""frequency\"", \""type\""]);\n\n\t\tconnect(this._oscillator, this._gainNode);\n\n\t\tthis.type = options.type;\n\n\t\tthis.frequency = new Param({\n\t\t\tcontext: this.context,\n\t\t\tparam : this._oscillator.frequency,\n\t\t\tunits : \""frequency\"",\n\t\t\tvalue : options.frequency,\n\t\t});\n\n\t\tthis.detune = new Param({\n\t\t\tcontext: this.context,\n\t\t\tparam : this._oscillator.detune,\n\t\t\tunits : \""cents\"",\n\t\t\tvalue : options.detune,\n\t\t});\n\t}\n\n\tstatic getDefaults(): ToneOscillatorNodeOptions {\n\t\treturn Object.assign(OneShotSource.getDefaults(), {\n\t\t\tdetune: 0,\n\t\t\tfrequency: 440,\n\t\t\ttype: \""sine\"" as OscillatorType,\n\t\t});\n\t}\n\n\t/**\n\t * Start the oscillator node at the given time\n\t * @param  time When to start the oscillator\n\t */\n\tstart(time?: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis.log(\""start\"", computedTime);\n\t\tthis._startGain(computedTime);\n\t\tthis._oscillator.start(computedTime);\n\t\treturn this;\n\t}\n\n\tprotected _stopSource(time?: Seconds): void {\n\t\tthis._oscillator.stop(time);\n\t}\n\n\t/**\n\t * Sets an arbitrary custom periodic waveform given a PeriodicWave.\n\t * @param  periodicWave PeriodicWave should be created with context.createPeriodicWave\n\t */\n\tsetPeriodicWave(periodicWave: PeriodicWave): this {\n\t\tthis._oscillator.setPeriodicWave(periodicWave);\n\t\treturn this;\n\t}\n\n\t/**\n\t * The oscillator type. Either 'sine', 'sawtooth', 'square', or 'triangle'\n\t */\n\tget type(): OscillatorType {\n\t\treturn this._oscillator.type;\n\t}\n\tset type(type: OscillatorType) {\n\t\tthis._oscillator.type = type;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tif (this.state === \""started\"") {\n\t\t\tthis.stop();\n\t\t}\n\t\tthis._oscillator.disconnect();\n\t\tthis.frequency.dispose();\n\t\tthis.detune.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { AudioRange, Cents, Degrees, Frequency, Radians, Time } from \""../../core/type/Units\"";\nimport { deepEquals, optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { noOp, readOnly } from \""../../core/util/Interface\"";\nimport { isDefined } from \""../../core/util/TypeCheck\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { Source } from \""../Source\"";\nimport { ToneOscillatorConstructorOptions, ToneOscillatorInterface,\n\tToneOscillatorOptions, ToneOscillatorType } from \""./OscillatorInterface\"";\nimport { ToneOscillatorNode } from \""./OscillatorNode\"";\n\n/**\n *  Oscillator supports a number of features including\n *  phase rotation, multiple oscillator types (see Oscillator.type),\n *  and Transport syncing (see Oscillator.syncFrequency).\n *\n *  @param frequency Starting frequency\n *  @param type The oscillator type. Read more about type below.\n *  @example\n * //make and start a 440hz sine tone\n * var osc = new Oscillator(440, \""sine\"").toDestination().start();\n */\nexport class Oscillator extends Source<ToneOscillatorOptions> implements ToneOscillatorInterface {\n\n\tname = \""Oscillator\"";\n\n\t/**\n\t *  the main oscillator\n\t */\n\tprivate _oscillator: ToneOscillatorNode | null = null;\n\n\t/**\n\t *  The frequency control.\n\t */\n\tfrequency: Signal<Frequency>;\n\n\t/**\n\t *  The detune control signal.\n\t */\n\tdetune: Signal<Cents>;\n\n\t/**\n\t *  the periodic wave\n\t */\n\tprivate _wave?: PeriodicWave;\n\n\t/**\n\t *  The partials of the oscillator\n\t */\n\tprivate _partials: number[];\n\n\t/**\n\t *  The number of partials to limit or extend the periodic wave by\n\t */\n\tprivate _partialCount: number;\n\n\t/**\n\t *  the phase of the oscillator between 0 - 360\n\t */\n\tprivate _phase!: Radians;\n\n\t/**\n\t *  the type of the oscillator\n\t *  @type {string}\n\t *  @private\n\t */\n\tprivate _type;\n\n\tconstructor(options?: Partial<ToneOscillatorConstructorOptions>)\n\tconstructor(frequency?: Frequency, type?: ToneOscillatorType);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Oscillator.getDefaults(), arguments, [\""frequency\"", \""type\""]));\n\t\tconst options = optionsFromArguments(Oscillator.getDefaults(), arguments, [\""frequency\"", \""type\""]);\n\n\t\tthis.frequency = new Signal<Frequency>({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""frequency\"",\n\t\t\tvalue: options.frequency,\n\t\t});\n\t\treadOnly(this, \""frequency\"");\n\n\t\tthis.detune = new Signal<Cents>({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""cents\"",\n\t\t\tvalue: options.detune,\n\t\t});\n\t\treadOnly(this, \""detune\"");\n\n\t\tthis._partials = options.partials;\n\t\tthis._partialCount = options.partialCount;\n\t\tthis._type = options.type;\n\n\t\tif (options.partialCount && options.type !== \""custom\"") {\n\t\t\tthis._type = this.baseType + options.partialCount.toString();\n\t\t}\n\t\tthis.phase = options.phase;\n\t}\n\n\tstatic getDefaults(): ToneOscillatorOptions {\n\t\treturn Object.assign(Source.getDefaults(), {\n\t\t\tdetune: 0,\n\t\t\tfrequency: 440,\n\t\t\tpartialCount: 0,\n\t\t\tpartials: [],\n\t\t\tphase: 0,\n\t\t\ttype: \""sine\"",\n\t\t}) as ToneOscillatorOptions;\n\t}\n\n\t/**\n\t *  start the oscillator\n\t */\n\tprotected _start(time?: Time): void {\n\t\tconst computedTime = this.toSeconds(time);\n\t\t// new oscillator with previous values\n\t\tconst oscillator = new ToneOscillatorNode({\n\t\t\tcontext: this.context,\n\t\t\tonended: () => this.onstop(this),\n\t\t});\n\t\tthis._oscillator = oscillator;\n\t\tif (this._wave) {\n\t\t\tthis._oscillator.setPeriodicWave(this._wave);\n\t\t} else {\n\t\t\tthis._oscillator.type = this._type;\n\t\t}\n\t\t// connect the control signal to the oscillator frequency & detune\n\t\tthis._oscillator.connect(this.output);\n\t\tthis.frequency.connect(this._oscillator.frequency);\n\t\tthis.detune.connect(this._oscillator.detune);\n\n\t\t// start the oscillator\n\t\tthis._oscillator.start(computedTime);\n\t}\n\n\t/**\n\t *  stop the oscillator\n\t */\n\tprotected _stop(time?: Time): void {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tif (this._oscillator) {\n\t\t\tthis._oscillator.stop(computedTime);\n\t\t}\n\t}\n\n\t/**\n\t * Restart the oscillator. Does not stop the oscillator, but instead\n\t * just cancels any scheduled 'stop' from being invoked.\n\t */\n\trestart(time?: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis.log(\""restart\"", computedTime);\n\t\tif (this._oscillator) {\n\t\t\tthis._oscillator.cancelStop();\n\t\t}\n\t\tthis._state.cancel(computedTime);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Sync the signal to the Transport's bpm. Any changes to the transports bpm,\n\t *  will also affect the oscillators frequency.\n\t *  @example\n\t * Tone.Transport.bpm.value = 120;\n\t * osc.frequency.value = 440;\n\t * //the ration between the bpm and the frequency will be maintained\n\t * osc.syncFrequency();\n\t * Tone.Transport.bpm.value = 240;\n\t * // the frequency of the oscillator is doubled to 880\n\t */\n\tsyncFrequency(): this {\n\t\tthis.context.transport.syncSignal(this.frequency);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Unsync the oscillator's frequency from the Transport.\n\t *  See Oscillator.syncFrequency\n\t */\n\tunsyncFrequency(): this {\n\t\tthis.context.transport.unsyncSignal(this.frequency);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Cache the periodic waves to avoid having to redo computations\n\t */\n\tprivate static _periodicWaveCache: Array<{\n\t\tpartials: number[];\n\t\tphase: number;\n\t\ttype: string;\n\t\tpartialCount: number;\n\t\treal: Float32Array,\n\t\timag: Float32Array,\n\t}> = [];\n\n\t/**\n\t * Get a cached periodic wave. Avoids having to recompute\n\t * the oscillator values when they have already been computed\n\t * with the same values.\n\t */\n\tprivate _getCachedPeriodicWave(): [Float32Array, Float32Array] | undefined {\n\t\tif (this._type === \""custom\"") {\n\t\t\tconst oscProps = Oscillator._periodicWaveCache.find(description => {\n\t\t\t\treturn  description.phase === this._phase &&\n\t\t\t\t\tdeepEquals(description.partials, this._partials);\n\t\t\t});\n\t\t\treturn oscProps && [oscProps.real, oscProps.imag];\n\t\t} else {\n\t\t\tconst oscProps = Oscillator._periodicWaveCache.find(description => {\n\t\t\t\treturn  description.type === this._type &&\n\t\t\t\t\tdescription.phase === this._phase;\n\t\t\t});\n\t\t\tthis._partialCount = oscProps ? oscProps.partialCount : this._partialCount;\n\t\t\treturn oscProps && [oscProps.real, oscProps.imag];\n\t\t}\n\t}\n\n\t/* tslint:disable */\n\t/**\n\t * The type of the oscillator: either sine, square, triangle, or sawtooth. Also capable of\n\t * setting the first x number of partials of the oscillator. For example: \""sine4\"" would\n\t * set be the first 4 partials of the sine wave and \""triangle8\"" would set the first\n\t * 8 partials of the triangle wave.\n\t * <br><br>\n\t * Uses PeriodicWave internally even for native types so that it can set the phase.\n\t * PeriodicWave equations are from the\n\t * [Webkit Web Audio implementation](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp&sq=package:chromium).\n\t *\n\t * @memberOf Oscillator#\n\t * @type {string}\n\t * @name type\n\t * @example\n\t * //set it to a square wave\n\t * osc.type = \""square\"";\n\t * @example\n\t * //set the first 6 partials of a sawtooth wave\n\t * osc.type = \""sawtooth6\"";\n\t */\n\t/* tslint:enable */\n\tget type(): ToneOscillatorType {\n\t\treturn this._type;\n\t}\n\tset type(type: ToneOscillatorType) {\n\t\tthis._type = type;\n\t\tconst isBasicType = [\""sine\"", \""square\"", \""sawtooth\"", \""triangle\""].indexOf(type) !== -1;\n\t\tif (this._phase === 0 && isBasicType) {\n\t\t\tthis._wave = undefined;\n\t\t\tthis._partialCount = 0;\n\t\t\t// just go with the basic approach\n\t\t\tif (this._oscillator !== null) {\n\t\t\t\t// already tested that it's a basic type\n\t\t\t\tthis._oscillator.type = type as OscillatorType;\n\t\t\t}\n\t\t} else {\n\t\t\t// first check if the value is cached\n\t\t\tconst cache = this._getCachedPeriodicWave();\n\t\t\tif (isDefined(cache)) {\n\t\t\t\tconst [real, imag] = cache;\n\t\t\t\tthis._wave = this.context.createPeriodicWave(real, imag);\n\t\t\t\tif (this._oscillator !== null) {\n\t\t\t\t\tthis._oscillator.setPeriodicWave(this._wave);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst [real, imag] = this._getRealImaginary(type, this._phase);\n\t\t\t\tconst periodicWave = this.context.createPeriodicWave(real, imag);\n\t\t\t\tthis._wave = periodicWave;\n\t\t\t\tif (this._oscillator !== null) {\n\t\t\t\t\tthis._oscillator.setPeriodicWave(this._wave);\n\t\t\t\t}\n\t\t\t\t// set the cache\n\t\t\t\tOscillator._periodicWaveCache.push({\n\t\t\t\t\timag,\n\t\t\t\t\tpartialCount: this._partialCount,\n\t\t\t\t\tpartials: this._partials,\n\t\t\t\t\tphase: this._phase,\n\t\t\t\t\treal,\n\t\t\t\t\ttype: this._type,\n\t\t\t\t});\n\t\t\t\tif (Oscillator._periodicWaveCache.length > 100) {\n\t\t\t\t\tOscillator._periodicWaveCache.shift();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * The oscillator type without the partialsCount appended to the end\n\t * @example\n\t * osc.type = 'sine2'\n\t * osc.baseType //'sine'\n\t * osc.partialCount = 2\n\t */\n\tget baseType(): OscillatorType {\n\t\treturn this._type.replace(this.partialCount, \""\"");\n\t}\n\tset baseType(baseType: OscillatorType) {\n\t\tif (this.partialCount && this._type !== \""custom\"" && baseType !== \""custom\"") {\n\t\t\tthis.type = baseType + this.partialCount as ToneOscillatorType;\n\t\t} else {\n\t\t\tthis.type = baseType;\n\t\t}\n\t}\n\n\t/**\n\t * 'partialCount' offers an alternative way to set the number of used partials.\n\t * When partialCount is 0, the maximum number of partials are used when representing\n\t * the waveform using the periodicWave. When 'partials' is set, this value is\n\t * not settable, but equals the length of the partials array.\n\t * @example\n\t * osc.type = 'sine'\n\t * osc.partialCount = 3\n\t * //is equivalent to\n\t * osc.type = 'sine3'\n\t */\n\tget partialCount(): number {\n\t\treturn this._partialCount;\n\t}\n\tset partialCount(p: number) {\n\t\tlet type = this._type;\n\t\tconst partial = /^(sine|triangle|square|sawtooth)(\\d+)$/.exec(this._type);\n\t\tif (partial) {\n\t\t\ttype = partial[1];\n\t\t}\n\t\tif (this._type !== \""custom\"") {\n\t\t\tif (p === 0) {\n\t\t\t\tthis.type = type;\n\t\t\t} else {\n\t\t\t\tthis.type = type + p.toString() as ToneOscillatorType;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *  Get the object's attributes. Given no arguments get\n\t *  will return all available object properties and their corresponding\n\t *  values.\n\t */\n\tget(): ToneOscillatorOptions {\n\t\tconst values = super.get();\n\t\tif (values.type !== \""custom\"") {\n\t\t\tdelete values.partials;\n\t\t}\n\t\treturn values;\n\t}\n\n\t/**\n\t *  Returns the real and imaginary components based\n\t *  on the oscillator type.\n\t *  @returns [real: Float32Array, imaginary: Float32Array]\n\t *  @private\n\t */\n\tprivate _getRealImaginary(type: ToneOscillatorType, phase: Radians): Float32Array[] {\n\t\tconst fftSize = 4096;\n\t\tlet periodicWaveSize = fftSize / 2;\n\n\t\tconst real = new Float32Array(periodicWaveSize);\n\t\tconst imag = new Float32Array(periodicWaveSize);\n\n\t\tlet partialCount = 1;\n\t\tif (type === \""custom\"") {\n\t\t\tpartialCount = this._partials.length + 1;\n\t\t\tthis._partialCount = this._partials.length;\n\t\t\tperiodicWaveSize = partialCount;\n\t\t\t// if the partial count is 0, don't bother doing any computation\n\t\t\tif (this._partials.length === 0 ) {\n\t\t\t\treturn [real, imag];\n\t\t\t}\n\t\t} else {\n\t\t\tconst partial = /^(sine|triangle|square|sawtooth)(\\d+)$/.exec(type);\n\t\t\tif (partial) {\n\t\t\t\tpartialCount = parseInt(partial[2], 10) + 1;\n\t\t\t\tthis._partialCount = parseInt(partial[2], 10);\n\t\t\t\ttype = partial[1] as ToneOscillatorType;\n\t\t\t\tpartialCount = Math.max(partialCount, 2);\n\t\t\t\tperiodicWaveSize = partialCount;\n\t\t\t} else {\n\t\t\t\tthis._partialCount = 0;\n\t\t\t}\n\t\t\tthis._partials = [];\n\t\t}\n\n\t\t// tslint:disable: no-bitwise\n\t\tfor (let n = 1; n < periodicWaveSize; ++n) {\n\t\t\tconst piFactor = 2 / (n * Math.PI);\n\t\t\tlet b;\n\t\t\tswitch (type) {\n\t\t\t\tcase \""sine\"":\n\t\t\t\t\tb = (n <= partialCount) ? 1 : 0;\n\t\t\t\t\tthis._partials[n - 1] = b;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \""square\"":\n\t\t\t\t\tb = (n & 1) ? 2 * piFactor : 0;\n\t\t\t\t\tthis._partials[n - 1] = b;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \""sawtooth\"":\n\t\t\t\t\tb = piFactor * ((n & 1) ? 1 : -1);\n\t\t\t\t\tthis._partials[n - 1] = b;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \""triangle\"":\n\t\t\t\t\tif (n & 1) {\n\t\t\t\t\t\tb = 2 * (piFactor * piFactor) * ((((n - 1) >> 1) & 1) ? -1 : 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tb = 0;\n\t\t\t\t\t}\n\t\t\t\t\tthis._partials[n - 1] = b;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \""custom\"":\n\t\t\t\t\tb = this._partials[n - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new TypeError(\""Oscillator: invalid type: \"" + type);\n\t\t\t}\n\t\t\tif (b !== 0) {\n\t\t\t\treal[n] = -b * Math.sin(phase * n);\n\t\t\t\timag[n] = b * Math.cos(phase * n);\n\t\t\t} else {\n\t\t\t\treal[n] = 0;\n\t\t\t\timag[n] = 0;\n\t\t\t}\n\t\t}\n\t\treturn [real, imag];\n\t}\n\n\t/**\n\t *  Compute the inverse FFT for a given phase.\n\t */\n\tprivate _inverseFFT(real: Float32Array, imag: Float32Array, phase: Radians): number {\n\t\tlet sum = 0;\n\t\tconst len = real.length;\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tsum += real[i] * Math.cos(i * phase) + imag[i] * Math.sin(i * phase);\n\t\t}\n\t\treturn sum;\n\t}\n\n\t/**\n\t *  Returns the initial value of the oscillator.\n\t */\n\tprotected _getInitialValue(): AudioRange {\n\t\tconst [real, imag] = this._getRealImaginary(this._type, 0);\n\t\tlet maxValue = 0;\n\t\tconst twoPi = Math.PI * 2;\n\t\t// check for peaks in 8 places\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tmaxValue = Math.max(this._inverseFFT(real, imag, (i / 8) * twoPi), maxValue);\n\t\t}\n\t\treturn -this._inverseFFT(real, imag, this._phase) / maxValue;\n\t}\n\n\t/**\n\t * The partials of the waveform. A partial represents\n\t * the amplitude at a harmonic. The first harmonic is the\n\t * fundamental frequency, the second is the octave and so on\n\t * following the harmonic series.\n\t * Setting this value will automatically set the type to \""custom\"".\n\t * The value is an empty array when the type is not \""custom\"".\n\t * @example\n\t * osc.partials = [1, 0.2, 0.01];\n\t */\n\tget partials(): number[] {\n\t\treturn this._partials;\n\t}\n\tset partials(partials: number[]) {\n\t\tthis._partials = partials;\n\t\tif (partials.length) {\n\t\t\tthis.type = \""custom\"";\n\t\t}\n\t}\n\n\t/**\n\t * The phase of the oscillator in degrees.\n\t * @example\n\t * osc.phase = 180; //flips the phase of the oscillator\n\t */\n\tget phase(): Degrees {\n\t\treturn this._phase * (180 / Math.PI);\n\t}\n\tset phase(phase: Degrees) {\n\t\tthis._phase = phase * Math.PI / 180;\n\t\t// reset the type\n\t\tthis.type = this._type;\n\t}\n\n\t/**\n\t *  Dispose and disconnect.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tif (this._oscillator !== null) {\n\t\t\tthis._oscillator.dispose();\n\t\t}\n\t\tthis._wave = undefined;\n\t\tthis.frequency.dispose();\n\t\tthis.detune.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { optionsFromArguments } from \""..//core/util/Defaults\"";\nimport { InputNode, ToneAudioNode, ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { connectSignal } from \""./Signal\"";\n/**\n * A signal operator has an input and output and modifies the signal.\n */\nexport abstract class SignalOperator<Options extends ToneAudioNodeOptions> extends ToneAudioNode<Options> {\n\n\tconstructor(options?: Partial<Options>);\n\tconstructor() {\n\t\tsuper(Object.assign(optionsFromArguments(SignalOperator.getDefaults(), arguments, [\""context\""])));\n\t}\n\n\tconnect(destination: InputNode, outputNum: number = 0, inputNum: number = 0): this {\n\t\tconnectSignal(this, destination, outputNum, inputNum);\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { isArray, isFunction, isUndef } from \""../core/util/TypeCheck\"";\nimport { Signal, SignalOptions } from \""./Signal\"";\nimport { SignalOperator } from \""./SignalOperator\"";\n\ntype WaveShaperMappingFn = (value: number, index?: number) => number;\n\ntype WaveShaperMapping =  WaveShaperMappingFn | number[] | Float32Array;\n\ninterface WaveShaperOptions extends ToneAudioNodeOptions {\n\tmapping?: WaveShaperMapping;\n\tlength: number;\n\tcurve?: number[] | Float32Array;\n}\n\n/**\n * Wraps the native Web Audio API\n * [WaveShaperNode](http://webaudio.github.io/web-audio-api/#the-waveshapernode-interface).\n *\n *  @param mapping The function used to define the values.\n *                 The mapping function should take two arguments:\n *                 the first is the value at the current position\n *                 and the second is the array position.\n *                 If the argument is an array, that array will be\n *                 set as the wave shaping function. The input\n *                 signal is an AudioRange [-1, 1] value and the output\n *                 signal can take on any numerical values.\n *\n *  @param bufferLen The length of the WaveShaperNode buffer.\n *  @example\n * var timesTwo = new WaveShaper(function(val){\n * \treturn val * 2;\n * }, 2048);\n *  @example\n * //a waveshaper can also be constructed with an array of values\n * var invert = new WaveShaper([1, -1]);\n */\nexport class WaveShaper extends SignalOperator<WaveShaperOptions> {\n\n\tname = \""WaveShaper\"";\n\n\t/**\n\t *  the waveshaper node\n\t */\n\tprivate _shaper: WaveShaperNode = this.context.createWaveShaper();\n\n\t/**\n\t * The input to the waveshaper node.\n\t */\n\tinput = this._shaper;\n\n\t/**\n\t * The output from the waveshaper node\n\t */\n\toutput = this._shaper;\n\n\tconstructor(options?: Partial<WaveShaperOptions>);\n\tconstructor(mapping?: WaveShaperMapping , length?: number);\n\tconstructor() {\n\t\tsuper(Object.assign(optionsFromArguments(WaveShaper.getDefaults(), arguments, [\""mapping\"", \""length\""])));\n\t\tconst options = optionsFromArguments(WaveShaper.getDefaults(), arguments, [\""mapping\"", \""length\""]);\n\n\t\tif (isArray(options.mapping) || options.mapping instanceof Float32Array) {\n\t\t\tthis.curve = Float32Array.from(options.mapping);\n\t\t} else if (isFunction(options.mapping)) {\n\t\t\tthis.setMap(options.mapping, options.length);\n\t\t}\n\t}\n\n\tstatic getDefaults(): WaveShaperOptions {\n\t\treturn Object.assign(Signal.getDefaults(), {\n\t\t\tlength: 1024,\n\t\t});\n\t}\n\n\t/**\n\t *  Uses a mapping function to set the value of the curve.\n\t *  @param mapping The function used to define the values.\n\t *                 The mapping function take two arguments:\n\t *                 the first is the value at the current position\n\t *                 which goes from -1 to 1 over the number of elements\n\t *                 in the curve array. The second argument is the array position.\n\t * @example\n\t * //map the input signal from [-1, 1] to [0, 10]\n\t * shaper.setMap(function(val, index){\n\t * \treturn (val + 1) * 5;\n\t * })\n\t */\n\tsetMap(mapping: WaveShaperMappingFn, length: number = 1024): this {\n\t\tconst array = new Float32Array(length);\n\t\tfor (let i = 0, len = length; i < len; i++) {\n\t\t\tconst normalized = (i / (len - 1)) * 2 - 1;\n\t\t\tarray[i] = mapping(normalized, i);\n\t\t}\n\t\tthis.curve = array;\n\t\treturn this;\n\t}\n\n\t/**\n\t * The array to set as the waveshaper curve. For linear curves\n\t * array length does not make much difference, but for complex curves\n\t * longer arrays will provide smoother interpolation.\n\t */\n\tget curve(): Float32Array | null {\n\t\treturn this._shaper.curve;\n\t}\n\n\tset curve(mapping: Float32Array | null) {\n\t\tthis._shaper.curve = mapping;\n\t}\n\n\t/**\n\t * Specifies what type of oversampling (if any) should be used when\n\t * applying the shaping curve. Can either be \""none\"", \""2x\"" or \""4x\"".\n\t */\n\tget oversample(): OverSampleType {\n\t\treturn this._shaper.oversample;\n\t}\n\n\tset oversample(oversampling: OverSampleType) {\n\t\tconst isOverSampleType = [\""none\"", \""2x\"", \""4x\""].some(str => str.includes(oversampling));\n\t\tthis.assert(isOverSampleType, \""oversampling must be either 'none', '2x', or '4x'\"");\n\t\tthis._shaper.oversample = oversampling;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._shaper.disconnect();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { SignalOperator } from \""./SignalOperator\"";\nimport { WaveShaper } from \""./WaveShaper\"";\n\n/**\n * AudioToGain converts an input in AudioRange [-1,1] to NormalRange [0,1].\n * See {@link GainToAudio}.\n *\n * @example\n * var a2g = new AudioToGain();\n */\nexport class AudioToGain extends SignalOperator<ToneAudioNodeOptions> {\n\n\tname = \""AudioToGain\"";\n\n\t/**\n\t * The node which converts the audio ranges\n\t */\n\tprivate _norm = new WaveShaper({\n\t\tcontext: this.context,\n\t\tmapping: x => (x + 1) / 2,\n\t});\n\n\t/**\n\t * The AudioRange input [-1, 1]\n\t */\n\tinput = this._norm;\n\n\t/**\n\t * The GainRange output [0, 1]\n\t */\n\toutput = this._norm;\n\n\t/**\n\t *  clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._norm.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../core/context/Gain\"";\nimport { Param } from \""../core/context/Param\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { Signal, SignalOptions } from \""./Signal\"";\n\n/**\n * Multiply two incoming signals. Or, if a number is given in the constructor,\n * multiplies the incoming signal by that value.\n *\n * @param {number=} value Constant value to multiple\n * @example\n * const mult = new Multiply();\n * const sigA = new Tone.Signal(3);\n * const sigB = new Tone.Signal(4);\n * sigA.connect(mult);\n * sigB.connect(mult.factor);\n * //output of mult is 12.\n *  @example\n * const mult = new Multiply(10);\n * const sig = new Tone.Signal(2).connect(mult);\n * //the output of mult is 20.\n */\nexport class Multiply extends Signal<number> {\n\n\tname = \""Multiply\"";\n\n\t/**\n\t * Indicates if the value should be overridden on connection\n\t */\n\treadonly override = false;\n\n\t/**\n\t * the input gain node\n\t */\n\tprivate _mult: Gain = new Gain({ context : this.context });\n\n\t/**\n\t * The multiplcant input.\n\t */\n\tinput = this._mult;\n\n\t/**\n\t * The product of the input and {@link factor}\n\t */\n\toutput = this._mult;\n\n\t/**\n\t * The multiplication factor. Can be set directly or a signal can be connected to it.\n\t */\n\tfactor: Param<number>;\n\n\tconstructor(options?: Partial<SignalOptions<number>>);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(value?: number);\n\tconstructor() {\n\t\tsuper(Object.assign(optionsFromArguments(Multiply.getDefaults(), arguments, [\""value\""])));\n\t\tconst options = optionsFromArguments(Multiply.getDefaults(), arguments, [\""value\""]);\n\n\t\tthis.factor = this._param = this._mult.gain as unknown as Param<number>;\n\t\tthis.factor.setValueAtTime(options.value, 0);\n\t}\n\n\tstatic getDefaults(): SignalOptions<number> {\n\t\treturn Object.assign(Signal.getDefaults(), {\n\t\t\tvalue: 0,\n\t\t});\n\t}\n\n\t/**\n\t *  clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._mult.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { Cents, Degrees, Frequency, Positive, Seconds, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly } from \""../../core/util/Interface\"";\nimport { AudioToGain } from \""../../signal/AudioToGain\"";\nimport { Multiply } from \""../../signal/Multiply\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { Source } from \""../Source\"";\nimport { Oscillator } from \""./Oscillator\"";\nimport { AMConstructorOptions, AMOscillatorOptions,\n\tNonCustomOscillatorType, ToneOscillatorInterface,\n\tToneOscillatorType } from \""./OscillatorInterface\"";\n\n/**\n * An amplitude modulated oscillator node. It is implemented with\n * two oscillators, one which modulators the other's amplitude\n * through a gain node.\n * ```\n *    +-------------+       +----------+\n *    | Carrier Osc +>------> GainNode |\n *    +-------------+       |          +--->Output\n *                      +---> gain     |\n * +---------------+    |   +----------+\n * | Modulator Osc +>---+\n * +---------------+\n * ```\n *\n * @param frequency The starting frequency of the oscillator.\n * @param type The type of the carrier oscillator.\n * @param modulationType The type of the modulator oscillator.\n * @example\n * //a sine oscillator frequency-modulated by a square wave\n * var fmOsc = new AMOscillator(\""Ab3\"", \""sine\"", \""square\"").toDestination().start();\n */\nexport class AMOscillator extends Source<AMOscillatorOptions> implements ToneOscillatorInterface {\n\n\tname = \""AMOscillator\"";\n\n\t/**\n\t *  The carrier oscillator\n\t */\n\tprivate _carrier: Oscillator;\n\n\t/**\n\t *  The oscillator's frequency\n\t */\n\treadonly frequency: Signal<Frequency>;\n\n\t/**\n\t *  The detune control signal.\n\t */\n\treadonly detune: Signal<Cents>;\n\n\t/**\n\t *  The modulating oscillator\n\t */\n\tprivate _modulator: Oscillator;\n\n\t/**\n\t *  convert the -1,1 output to 0,1\n\t */\n\tprivate _modulationScale = new AudioToGain({ context: this.context });\n\n\t/**\n\t *  Harmonicity is the frequency ratio between the carrier and the modulator oscillators.\n\t *  A harmonicity of 1 gives both oscillators the same frequency.\n\t *  Harmonicity = 2 means a change of an octave.\n\t *  @example\n\t * //pitch the modulator an octave below carrier\n\t * synth.harmonicity.value = 0.5;\n\t */\n\treadonly harmonicity: Signal<Positive>;\n\n\t/**\n\t *  the node where the modulation happens\n\t */\n\tprivate _modulationNode = new Gain({\n\t\tcontext: this.context,\n\t});\n\n\tconstructor(options?: Partial<AMConstructorOptions>);\n\tconstructor(frequency?: Frequency, type?: ToneOscillatorType, modulationType?: ToneOscillatorType);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(AMOscillator.getDefaults(), arguments, [\""frequency\"", \""type\"", \""modulationType\""]));\n\t\tconst options = optionsFromArguments(AMOscillator.getDefaults(), arguments, [\""frequency\"", \""type\"", \""modulationType\""]);\n\n\t\tthis._carrier  = new Oscillator({\n\t\t\tcontext : this.context,\n\t\t\tdetune: options.detune,\n\t\t\tfrequency: options.frequency,\n\t\t\tonstop: () => this.onstop(this),\n\t\t\tphase: options.phase,\n\t\t\ttype: options.type,\n\t\t} as OscillatorOptions);\n\t\tthis.frequency = this._carrier.frequency,\n\t\tthis.detune = this._carrier.detune;\n\n\t\tthis._modulator = new Oscillator({\n\t\t\tcontext : this.context,\n\t\t\tphase: options.phase,\n\t\t\ttype: options.modulationType,\n\t\t} as OscillatorOptions);\n\n\t\tthis.harmonicity = new Multiply({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""positive\"",\n\t\t\tvalue: options.harmonicity,\n\t\t});\n\n\t\t// connections\n\t\tthis.frequency.chain(this.harmonicity, this._modulator.frequency);\n\t\tthis._modulator.chain(this._modulationScale, this._modulationNode.gain);\n\t\tthis._carrier.chain(this._modulationNode, this.output);\n\n\t\treadOnly(this, [\""frequency\"", \""detune\"", \""harmonicity\""]);\n\t}\n\n\tstatic getDefaults(): AMOscillatorOptions {\n\t\treturn Object.assign(Oscillator.getDefaults(), {\n\t\t\tharmonicity: 1,\n\t\t\tmodulationType: \""square\"" as NonCustomOscillatorType,\n\t\t});\n\t}\n\n\t/**\n\t *  start the oscillator\n\t */\n\tprotected _start(time: Seconds): void {\n\t\tthis._modulator.start(time);\n\t\tthis._carrier.start(time);\n\t}\n\n\t/**\n\t *  stop the oscillator\n\t */\n\tprotected _stop(time: Seconds): void {\n\t\tthis._modulator.stop(time);\n\t\tthis._carrier.stop(time);\n\t}\n\n\t/**\n\t *  restart the oscillator\n\t */\n\trestart(time?: Time): this {\n\t\tthis._modulator.restart(time);\n\t\tthis._carrier.restart(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t * The type of the carrier oscillator\n\t */\n\tget type(): ToneOscillatorType {\n\t\treturn this._carrier.type;\n\t}\n\tset type(type: ToneOscillatorType) {\n\t\tthis._carrier.type = type;\n\t}\n\n\t/**\n\t * The oscillator type without the partialsCount appended to the end\n\t * @example\n\t * osc.type = 'sine2'\n\t * osc.baseType //'sine'\n\t * osc.partialCount = 2\n\t */\n\tget baseType(): OscillatorType {\n\t\treturn this._carrier.baseType;\n\t}\n\tset baseType(baseType: OscillatorType) {\n\t\tthis._carrier.baseType = baseType;\n\t}\n\n\t/**\n\t * 'partialCount' offers an alternative way to set the number of used partials.\n\t * When partialCount is 0, the maximum number of partials are used when representing\n\t * the waveform using the periodicWave. When 'partials' is set, this value is\n\t * not settable, but equals the length of the partials array.\n\t */\n\tget partialCount(): number {\n\t\treturn this._carrier.partialCount;\n\t}\n\n\tset partialCount(partialCount: number) {\n\t\tthis._carrier.partialCount = partialCount;\n\t}\n\n\t/**\n\t * The type of the modulator oscillator\n\t */\n\tget modulationType(): ToneOscillatorType {\n\t\treturn this._modulator.type;\n\t}\n\n\tset modulationType(type: ToneOscillatorType) {\n\t\tthis._modulator.type = type;\n\t}\n\n\t/**\n\t * The phase of the oscillator in degrees.\n\t */\n\tget phase(): Degrees {\n\t\treturn this._carrier.phase;\n\t}\n\tset phase(phase: Degrees) {\n\t\tthis._carrier.phase = phase;\n\t\tthis._modulator.phase = phase;\n\t}\n\n\t/**\n\t * The partials of the carrier waveform. A partial represents\n\t * the amplitude at a harmonic. The first harmonic is the\n\t * fundamental frequency, the second is the octave and so on\n\t * following the harmonic series.\n\t * Setting this value will automatically set the type to \""custom\"".\n\t * The value is an empty array when the type is not \""custom\"".\n\t * @example\n\t * osc.partials = [1, 0.2, 0.01];\n\t */\n\tget partials(): number[] {\n\t\treturn this._carrier.partials;\n\t}\n\tset partials(partials: number[]) {\n\t\tthis._carrier.partials = partials;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.frequency.dispose();\n\t\tthis.detune.dispose();\n\t\tthis.harmonicity.dispose();\n\t\tthis._carrier.dispose();\n\t\tthis._modulator.dispose();\n\t\tthis._modulationNode.dispose();\n\t\tthis._modulationScale.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { AudioRange, Cents, Degrees, Frequency, Positive, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly } from \""../../core/util/Interface\"";\nimport { Multiply } from \""../../signal/Multiply\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { Source } from \""../Source\"";\nimport { Oscillator } from \""./Oscillator\"";\nimport { FMConstructorOptions, FMOscillatorOptions,\n\tNonCustomOscillatorType, ToneOscillatorInterface, ToneOscillatorType } from \""./OscillatorInterface\"";\n\n/**\n * FMOscillator implements a frequency modulation synthesis\n * ```\n *                                              +-------------+\n * +---------------+        +-------------+     | Carrier Osc |\n * | Modulator Osc +>-------> GainNode    |     |             +--->Output\n * +---------------+        |             +>----> frequency   |\n *                       +--> gain        |     +-------------+\n *                       |  +-------------+\n * +-----------------+   |\n * | modulationIndex +>--+\n * +-----------------+\n * ```\n *\n * @param frequency The starting frequency of the oscillator.\n * @param type The type of the carrier oscillator.\n * @param modulationType The type of the modulator oscillator.\n * @example\n * //a sine oscillator frequency-modulated by a square wave\n * var fmOsc = new FMOscillator(\""Ab3\"", \""sine\"", \""square\"").toDestination().start();\n */\nexport class FMOscillator extends Source<FMOscillatorOptions> implements ToneOscillatorInterface {\n\n\tname = \""FMOscillator\"";\n\n\t/**\n\t *  The carrier oscillator\n\t */\n\tprivate _carrier: Oscillator;\n\n\t/**\n\t *  The oscillator's frequency\n\t */\n\treadonly frequency: Signal<Frequency>;\n\n\t/**\n\t *  The detune control signal.\n\t */\n\treadonly detune: Signal<Cents>;\n\n\t/**\n\t *  The modulating oscillator\n\t */\n\tprivate _modulator: Oscillator;\n\n\t/**\n\t *  Harmonicity is the frequency ratio between the carrier and the modulator oscillators.\n\t *  A harmonicity of 1 gives both oscillators the same frequency.\n\t *  Harmonicity = 2 means a change of an octave.\n\t *  @example\n\t * //pitch the modulator an octave below carrier\n\t * synth.harmonicity.value = 0.5;\n\t */\n\treadonly harmonicity: Signal<Positive>;\n\n\t/**\n\t *  The modulation index which is in essence the depth or amount of the modulation. In other terms it is the\n\t *  ratio of the frequency of the modulating signal (mf) to the amplitude of the\n\t *  modulating signal (ma) -- as in ma/mf.\n\t */\n\treadonly modulationIndex: Signal<Positive>;\n\n\t/**\n\t *  the node where the modulation happens\n\t */\n\tprivate _modulationNode: Gain = new Gain({\n\t\tcontext: this.context,\n\t\tgain: 0,\n\t});\n\n\tconstructor(options?: Partial<FMConstructorOptions>);\n\tconstructor(frequency?: Frequency, type?: ToneOscillatorType, modulationType?: ToneOscillatorType);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(FMOscillator.getDefaults(), arguments, [\""frequency\"", \""type\"", \""modulationType\""]));\n\t\tconst options = optionsFromArguments(FMOscillator.getDefaults(), arguments, [\""frequency\"", \""type\"", \""modulationType\""]);\n\n\t\tthis._carrier = new Oscillator({\n\t\t\tcontext : this.context,\n\t\t\tdetune: options.detune,\n\t\t\tfrequency: 0,\n\t\t\tonstop: () => this.onstop(this),\n\t\t\tphase: options.phase,\n\t\t\ttype: options.type,\n\t\t} as OscillatorOptions);\n\n\t\tthis.detune = this._carrier.detune;\n\n\t\tthis.frequency = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""frequency\"",\n\t\t\tvalue: options.frequency,\n\t\t});\n\n\t\tthis._modulator = new Oscillator({\n\t\t\tcontext : this.context,\n\t\t\tphase: options.phase,\n\t\t\ttype: options.modulationType,\n\t\t} as OscillatorOptions);\n\n\t\tthis.harmonicity = new Multiply({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""positive\"",\n\t\t\tvalue: options.harmonicity,\n\t\t});\n\n\t\tthis.modulationIndex = new Multiply({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""positive\"",\n\t\t\tvalue: options.modulationIndex,\n\t\t});\n\n\t\t// connections\n\t\tthis.frequency.connect(this._carrier.frequency);\n\t\tthis.frequency.chain(this.harmonicity, this._modulator.frequency);\n\t\tthis.frequency.chain(this.modulationIndex, this._modulationNode);\n\t\tthis._modulator.connect(this._modulationNode.gain);\n\t\tthis._modulationNode.connect(this._carrier.frequency);\n\t\tthis._carrier.connect(this.output);\n\t\tthis.detune.connect(this._modulator.detune);\n\n\t\treadOnly(this, [\""modulationIndex\"", \""frequency\"", \""detune\"", \""harmonicity\""]);\n\t}\n\n\tstatic getDefaults(): FMOscillatorOptions {\n\t\treturn Object.assign(Oscillator.getDefaults(), {\n\t\t\tharmonicity: 1,\n\t\t\tmodulationIndex: 2,\n\t\t\tmodulationType: \""square\"" as NonCustomOscillatorType,\n\t\t});\n\t}\n\n\t/**\n\t *  start the oscillator\n\t */\n\tprotected _start(time: Time): void {\n\t\tthis._modulator.start(time);\n\t\tthis._carrier.start(time);\n\t}\n\n\t/**\n\t *  stop the oscillator\n\t */\n\tprotected _stop(time: Time): void {\n\t\tthis._modulator.stop(time);\n\t\tthis._carrier.stop(time);\n\t}\n\n\t/**\n\t *  stop and restart the oscillator\n\t */\n\trestart(time?: Time): this {\n\t\tthis._modulator.restart(time);\n\t\tthis._carrier.restart(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t * The type of the carrier oscillator\n\t */\n\tget type(): ToneOscillatorType {\n\t\treturn this._carrier.type;\n\t}\n\tset type(type: ToneOscillatorType) {\n\t\tthis._carrier.type = type;\n\t}\n\n\t/**\n\t * The oscillator type without the partialsCount appended to the end\n\t * @example\n\t * osc.type = 'sine2'\n\t * osc.baseType //'sine'\n\t * osc.partialCount = 2\n\t */\n\tget baseType(): OscillatorType {\n\t\treturn this._carrier.baseType;\n\t}\n\tset baseType(baseType: OscillatorType) {\n\t\tthis._carrier.baseType = baseType;\n\t}\n\n\t/**\n\t * 'partialCount' offers an alternative way to set the number of used partials.\n\t * When partialCount is 0, the maximum number of partials are used when representing\n\t * the waveform using the periodicWave. When 'partials' is set, this value is\n\t * not settable, but equals the length of the partials array.\n\t */\n\tget partialCount(): number {\n\t\treturn this._carrier.partialCount;\n\t}\n\tset partialCount(partialCount: number) {\n\t\tthis._carrier.partialCount = partialCount;\n\t}\n\n\t/**\n\t * The type of the modulator oscillator\n\t */\n\tget modulationType(): ToneOscillatorType {\n\t\treturn this._modulator.type;\n\t}\n\tset modulationType(type: ToneOscillatorType) {\n\t\tthis._modulator.type = type;\n\t}\n\n\t/**\n\t * The phase of the oscillator in degrees.\n\t */\n\tget phase(): Degrees {\n\t\treturn this._carrier.phase;\n\t}\n\tset phase(phase: Degrees) {\n\t\tthis._carrier.phase = phase;\n\t\tthis._modulator.phase = phase;\n\t}\n\n\t/**\n\t * The partials of the carrier waveform. A partial represents\n\t * the amplitude at a harmonic. The first harmonic is the\n\t * fundamental frequency, the second is the octave and so on\n\t * following the harmonic series.\n\t * Setting this value will automatically set the type to \""custom\"".\n\t * The value is an empty array when the type is not \""custom\"".\n\t * @example\n\t * osc.partials = [1, 0.2, 0.01];\n\t */\n\tget partials(): number[] {\n\t\treturn this._carrier.partials;\n\t}\n\tset partials(partials: number[]) {\n\t\tthis._carrier.partials = partials;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.frequency.dispose();\n\t\tthis.harmonicity.dispose();\n\t\tthis._carrier.dispose();\n\t\tthis._modulator.dispose();\n\t\tthis._modulationNode.dispose();\n\t\tthis.modulationIndex.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { AudioRange, Cents, Degrees, Frequency, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly } from \""../../core/util/Interface\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { WaveShaper } from \""../../signal/WaveShaper\"";\nimport { Source } from \""../Source\"";\nimport { Oscillator } from \""./Oscillator\"";\nimport { PulseOscillatorOptions, ToneOscillatorInterface } from \""./OscillatorInterface\"";\n\n/**\n * PulseOscillator is an oscillator with control over pulse width,\n * also known as the duty cycle. At 50% duty cycle (width = 0) the wave is\n * a square wave.\n * [Read more](https://wigglewave.wordpress.com/2014/08/16/pulse-waveforms-and-harmonics/).\n * ```\n *    width = -0.25        width = 0.0          width = 0.25\n *\n *   +-----+            +-------+       +    +-------+     +-+\n *   |     |            |       |       |            |     |\n *   |     |            |       |       |            |     |\n * +-+     +-------+    +       +-------+            +-----+\n *\n *\n *    width = -0.5                              width = 0.5\n *\n *     +---+                                 +-------+   +---+\n *     |   |                                         |   |\n *     |   |                                         |   |\n * +---+   +-------+                                 +---+\n *\n *\n *    width = -0.75                             width = 0.75\n *\n *       +-+                                 +-------+ +-----+\n *       | |                                         | |\n *       | |                                         | |\n * +-----+ +-------+                                 +-+\n * ```\n * @param frequency The frequency of the oscillator\n * @param width The width of the pulse\n * @example\n * var pulse = new PulseOscillator(\""E5\"", 0.4).toDestination().start();\n */\nexport class PulseOscillator extends Source<PulseOscillatorOptions> implements ToneOscillatorInterface {\n\n\tname = \""PulseOscillator\"";\n\n\t/**\n\t *  The width of the pulse.\n\t */\n\twidth: Signal<AudioRange>;\n\n\t/**\n\t *  gate the width amount\n\t */\n\tprivate _widthGate: Gain = new Gain({\n\t\tcontext: this.context,\n\t\tgain: 0,\n\t});\n\n\t/**\n\t *  the sawtooth oscillator\n\t */\n\tprivate _sawtooth: Oscillator;\n\n\t/**\n\t *  The frequency control.\n\t */\n\tfrequency: Signal<Frequency>;\n\n\t/**\n\t *  The detune in cents.\n\t */\n\tdetune: Signal<Cents>;\n\n\t/**\n\t *  Threshold the signal to turn it into a square\n\t */\n\tprivate _thresh = new WaveShaper({\n\t\tcontext: this.context,\n\t\tmapping: val => val <= 0 ? -1 : 1,\n\t});\n\n\tconstructor(options?: Partial<PulseOscillatorOptions>);\n\tconstructor(frequency?: Frequency, width?: AudioRange);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(PulseOscillator.getDefaults(), arguments, [\""frequency\"", \""width\""]));\n\t\tconst options = optionsFromArguments(PulseOscillator.getDefaults(), arguments, [\""frequency\"", \""width\""]);\n\n\t\tthis.width = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""audioRange\"",\n\t\t\tvalue: options.width,\n\t\t});\n\n\t\tthis._sawtooth = new Oscillator({\n\t\t\tcontext: this.context,\n\t\t\tdetune: options.detune,\n\t\t\tfrequency: options.frequency,\n\t\t\tonstop: () => this.onstop(this),\n\t\t\tphase: options.phase,\n\t\t\ttype : \""sawtooth\"",\n\t\t});\n\t\tthis.frequency = this._sawtooth.frequency;\n\t\tthis.detune = this._sawtooth.detune;\n\n\t\t// connections\n\t\tthis._sawtooth.chain(this._thresh, this.output);\n\t\tthis.width.chain(this._widthGate, this._thresh);\n\t\treadOnly(this, [\""width\"", \""frequency\"", \""detune\""]);\n\t}\n\n\tstatic getDefaults(): PulseOscillatorOptions {\n\t\treturn Object.assign(Source.getDefaults(), {\n\t\t\tdetune: 0,\n\t\t\tfrequency: 440,\n\t\t\tphase: 0,\n\t\t\ttype: \""pulse\"" as \""pulse\"",\n\t\t\twidth: 0.2,\n\t\t});\n\t}\n\n\t/**\n\t *  start the oscillator\n\t */\n\tprotected _start(time: Time): void {\n\t\ttime = this.toSeconds(time);\n\t\tthis._sawtooth.start(time);\n\t\tthis._widthGate.gain.setValueAtTime(1, time);\n\t}\n\n\t/**\n\t *  stop the oscillator\n\t */\n\tprotected _stop(time: Time): void {\n\t\ttime = this.toSeconds(time);\n\t\tthis._sawtooth.stop(time);\n\t\t// the width is still connected to the output.\n\t\t// that needs to be stopped also\n\t\tthis._widthGate.gain.cancelScheduledValues(time);\n\t\tthis._widthGate.gain.setValueAtTime(0, time);\n\t}\n\n\t/**\n\t *  Restart the oscillator\n\t */\n\trestart(time?: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis._sawtooth.restart(computedTime);\n\t\tthis._widthGate.gain.cancelScheduledValues(computedTime);\n\t\tthis._widthGate.gain.setValueAtTime(1, computedTime);\n\t\treturn this;\n\t}\n\n\t/**\n\t * The phase of the oscillator in degrees.\n\t */\n\tget phase(): Degrees {\n\t\treturn this._sawtooth.phase;\n\t}\n\tset phase(phase: Degrees) {\n\t\tthis._sawtooth.phase = phase;\n\t}\n\n\t/**\n\t * The type of the oscillator. Always returns \""pulse\"".\n\t */\n\tget type(): \""pulse\"" {\n\t\treturn \""pulse\"";\n\t}\n\n\t/**\n\t * The baseType of the oscillator. Always returns \""pulse\"".\n\t */\n\tget baseType(): \""pulse\"" {\n\t\treturn \""pulse\"";\n\t}\n\n\t/**\n\t * The partials of the waveform. Cannot set partials for this waveform type\n\t */\n\tget partials(): number[] {\n\t\treturn [];\n\t}\n\n\t/**\n\t * No partials for this waveform type.\n\t */\n\tget partialCount(): number {\n\t\treturn 0;\n\t}\n\n\t/**\n\t *  Clean up method.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._sawtooth.dispose();\n\t\tthis.width.dispose();\n\t\tthis._widthGate.dispose();\n\t\tthis._thresh.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { AudioRange, Cents, Degrees, Frequency, Positive, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { noOp, readOnly } from \""../../core/util/Interface\"";\nimport { AudioToGain } from \""../../signal/AudioToGain\"";\nimport { Multiply } from \""../../signal/Multiply\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { Source } from \""../Source\"";\nimport { Oscillator } from \""./Oscillator\"";\nimport { FatConstructorOptions, FatOscillatorOptions,\n\tToneOscillatorInterface, ToneOscillatorType } from \""./OscillatorInterface\"";\n\n/**\n *  FatOscillator is an array of oscillators with detune spread between the oscillators\n *  @param frequency The oscillator's frequency.\n *  @param type The type of the oscillator.\n *  @param spread The detune spread between the oscillators.\n *  @example\n * var fatOsc = new FatOscillator(\""Ab3\"", \""sine\"", 40).toDestination().start();\n */\nexport class FatOscillator extends Source<FatOscillatorOptions> implements ToneOscillatorInterface {\n\n\tname = \""FatOscillator\"";\n\n\t/**\n\t *  The oscillator's frequency\n\t */\n\treadonly frequency: Signal<Frequency>;\n\n\t/**\n\t *  The detune control signal.\n\t */\n\treadonly detune: Signal<Cents>;\n\n\t/**\n\t *  The array of oscillators\n\t */\n\tprivate _oscillators: Oscillator[] = [];\n\n\t/**\n\t *  The total spread of the oscillators\n\t */\n\tprivate _spread: Cents;\n\n\t/**\n\t *  The type of the oscillator\n\t */\n\tprivate _type: ToneOscillatorType;\n\n\t/**\n\t *  The phase of the oscillators\n\t */\n\tprivate _phase: Degrees;\n\n\t/**\n\t *  The partials array\n\t */\n\tprivate _partials: number[];\n\n\t/**\n\t *  The number of partials to use\n\t */\n\tprivate _partialCount: number;\n\n\tconstructor(options?: Partial<FatConstructorOptions>);\n\tconstructor(frequency?: Frequency, type?: ToneOscillatorType, modulationType?: ToneOscillatorType);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(FatOscillator.getDefaults(), arguments, [\""frequency\"", \""type\"", \""spread\""]));\n\t\tconst options = optionsFromArguments(FatOscillator.getDefaults(), arguments, [\""frequency\"", \""type\"", \""spread\""]);\n\n\t\tthis.frequency = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""frequency\"",\n\t\t\tvalue: options.frequency,\n\t\t});\n\t\tthis.detune = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""cents\"",\n\t\t\tvalue: options.detune,\n\t\t});\n\n\t\tthis._spread = options.spread;\n\t\tthis._type = options.type;\n\t\tthis._phase = options.phase;\n\t\tthis._partials = options.partials;\n\t\tthis._partialCount = options.partialCount;\n\n\t\t// set the count initially\n\t\tthis.count = options.count;\n\n\t\treadOnly(this, [\""frequency\"", \""detune\""]);\n\t}\n\n\tstatic getDefaults(): FatOscillatorOptions {\n\t\treturn Object.assign(Oscillator.getDefaults(), {\n\t\t\tcount : 3,\n\t\t\tspread : 20,\n\t\t\ttype : \""sawtooth\"",\n\t\t});\n\t}\n\n\t/**\n\t *  start the oscillator\n\t */\n\tprotected _start(time: Time): void {\n\t\ttime = this.toSeconds(time);\n\t\tthis._forEach(osc => osc.start(time));\n\t}\n\n\t/**\n\t *  stop the oscillator\n\t */\n\tprotected _stop(time: Time): void {\n\t\ttime = this.toSeconds(time);\n\t\tthis._forEach(osc => osc.stop(time));\n\t}\n\n\t/**\n\t *  restart the oscillator\n\t */\n\trestart(time): this {\n\t\ttime = this.toSeconds(time);\n\t\tthis._forEach(osc => osc.restart(time));\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over all of the oscillators\n\t */\n\tprivate _forEach(iterator: (osc: Oscillator, index: number) => void): void {\n\t\tfor (let i = 0; i < this._oscillators.length; i++) {\n\t\t\titerator(this._oscillators[i], i);\n\t\t}\n\t}\n\n\t/**\n\t * The type of the oscillator\n\t */\n\tget type(): ToneOscillatorType {\n\t\treturn this._type;\n\t}\n\n\tset type(type: ToneOscillatorType) {\n\t\tthis._type = type;\n\t\tthis._forEach(osc => osc.type = type);\n\t}\n\n\t/**\n\t * The detune spread between the oscillators. If \""count\"" is\n\t * set to 3 oscillators and the \""spread\"" is set to 40,\n\t * the three oscillators would be detuned like this: [-20, 0, 20]\n\t * for a total detune spread of 40 cents.\n\t */\n\tget spread(): Cents {\n\t\treturn this._spread;\n\t}\n\n\tset spread(spread: Cents) {\n\t\tthis._spread = spread;\n\t\tif (this._oscillators.length > 1) {\n\t\t\tconst start = -spread / 2;\n\t\t\tconst step = spread / (this._oscillators.length - 1);\n\t\t\tthis._forEach((osc, i) => osc.detune.value = start + step * i);\n\t\t}\n\t}\n\n\t/**\n\t * The number of detuned oscillators. Should be an integer greater than 1.\n\t */\n\tget count(): number {\n\t\treturn this._oscillators.length;\n\t}\n\tset count(count: number) {\n\t\tcount = Math.max(count, 1);\n\t\tif (this._oscillators.length !== count) {\n\t\t\t// dispose the previous oscillators\n\t\t\tthis._forEach(osc => osc.dispose());\n\t\t\tthis._oscillators = [];\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tconst osc = new Oscillator({\n\t\t\t\t\tcontext : this.context,\n\t\t\t\t\tonstop: i === 0 ? () => this.onstop(this) : noOp,\n\t\t\t\t});\n\t\t\t\tif (this.type === \""custom\"") {\n\t\t\t\t\tosc.partials = this._partials;\n\t\t\t\t} else {\n\t\t\t\t\tosc.type = this._type;\n\t\t\t\t}\n\t\t\t\tosc.partialCount = this._partialCount;\n\t\t\t\tosc.phase = this._phase + (i / count) * 360;\n\t\t\t\tosc.volume.value = -6 - count * 1.1;\n\t\t\t\tthis.frequency.connect(osc.frequency);\n\t\t\t\tthis.detune.connect(osc.detune);\n\t\t\t\tosc.connect(this.output);\n\t\t\t\tthis._oscillators[i] = osc;\n\t\t\t}\n\t\t\t// set the spread\n\t\t\tthis.spread = this._spread;\n\t\t\tif (this.state === \""started\"") {\n\t\t\t\tthis._forEach(osc => osc.start());\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * The phase of the oscillator in degrees.\n\t */\n\tget phase(): Degrees {\n\t\treturn this._phase;\n\t}\n\tset phase(phase: Degrees) {\n\t\tthis._phase = phase;\n\t\tthis._forEach(osc => osc.phase = phase);\n\t}\n\n\t/**\n\t * The oscillator type without the partialsCount appended to the end\n\t * @example\n\t * osc.type = 'sine2'\n\t * osc.baseType //'sine'\n\t * osc.partialCount = 2\n\t */\n\tget baseType(): OscillatorType {\n\t\treturn this._oscillators[0].baseType;\n\t}\n\tset baseType(baseType: OscillatorType) {\n\t\tthis._forEach(osc => osc.baseType = baseType);\n\t\tthis._type = this._oscillators[0].type;\n\t}\n\n\t/**\n\t * The partials of the carrier waveform. A partial represents\n\t * the amplitude at a harmonic. The first harmonic is the\n\t * fundamental frequency, the second is the octave and so on\n\t * following the harmonic series.\n\t * Setting this value will automatically set the type to \""custom\"".\n\t * The value is an empty array when the type is not \""custom\"".\n\t * @memberOf FatOscillator#\n\t * @type {Array}\n\t * @name partials\n\t * @example\n\t * osc.partials = [1, 0.2, 0.01];\n\t */\n\tget partials(): number[] {\n\t\treturn this._oscillators[0].partials;\n\t}\n\tset partials(partials: number[]) {\n\t\tthis._partials = partials;\n\t\tif (partials.length) {\n\t\t\tthis._type = \""custom\"";\n\t\t\tthis._forEach(osc => osc.partials = partials);\n\t\t}\n\t}\n\n\t/**\n\t * 'partialCount' offers an alternative way to set the number of used partials.\n\t * When partialCount is 0, the maximum number of partials are used when representing\n\t * the waveform using the periodicWave. When 'partials' is set, this value is\n\t * not settable, but equals the length of the partials array.\n\t * @memberOf FatOscillator#\n\t * @type {Number}\n\t * @name partialCount\n\t */\n\tget partialCount(): number {\n\t\treturn this._oscillators[0].partialCount;\n\t}\n\tset partialCount(partialCount: number) {\n\t\tthis._partialCount = partialCount;\n\t\tthis._forEach(osc => osc.partialCount = partialCount);\n\t\tthis._type = this._oscillators[0].type;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.frequency.dispose();\n\t\tthis.detune.dispose();\n\t\tthis._forEach(osc => osc.dispose());\n\t\treturn this;\n\t}\n}\n"",""import { Cents, Degrees, Frequency, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly } from \""../../core/util/Interface\"";\nimport { Multiply } from \""../../signal/Multiply\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { Source } from \""../Source\"";\nimport { Oscillator } from \""./Oscillator\"";\nimport { PWMOscillatorOptions, ToneOscillatorInterface } from \""./OscillatorInterface\"";\nimport { PulseOscillator } from \""./PulseOscillator\"";\n\n/**\n * PWMOscillator modulates the width of a Tone.PulseOscillator\n * at the modulationFrequency. This has the effect of continuously\n * changing the timbre of the oscillator by altering the harmonics\n * generated.\n *\n * @param {Frequency} frequency The starting frequency of the oscillator.\n * @param {Frequency} modulationFrequency The modulation frequency of the width of the pulse.\n * @example\n *  var pwm = new PWMOscillator(\""Ab3\"", 0.3).toDestination().start();\n */\nexport class PWMOscillator extends Source<PWMOscillatorOptions> implements ToneOscillatorInterface {\n\n\treadonly name = \""PWMOscillator\"";\n\n\treadonly sourceType = \""pwm\"";\n\n\t/**\n\t *  the pulse oscillator\n\t */\n\tprivate _pulse: PulseOscillator;\n\t/**\n\t *  the modulator\n\t */\n\tprivate _modulator: Oscillator;\n\n\t/**\n\t *  Scale the oscillator so it doesn't go silent\n\t *  at the extreme values.\n\t */\n\tprivate _scale: Multiply = new Multiply({\n\t\tcontext: this.context,\n\t\tvalue: 2,\n\t});\n\n\t/**\n\t *  The frequency control.\n\t */\n\treadonly frequency: Signal<Frequency>;\n\n\t/**\n\t *  The detune of the oscillator.\n\t */\n\treadonly detune: Signal<Cents>;\n\n\t/**\n\t *  The modulation rate of the oscillator.\n\t */\n\treadonly modulationFrequency: Signal<Frequency>;\n\n\tconstructor(options?: Partial<PWMOscillatorOptions>);\n\tconstructor(frequency?: Frequency, modulationFrequency?: Frequency);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(PWMOscillator.getDefaults(), arguments, [\""frequency\"", \""modulationFrequency\""]));\n\t\tconst options = optionsFromArguments(PWMOscillator.getDefaults(), arguments, [\""frequency\"", \""modulationFrequency\""]);\n\n\t\tthis._pulse = new PulseOscillator({\n\t\t\tcontext: this.context,\n\t\t\tfrequency: options.modulationFrequency,\n\t\t});\n\t\t// change the pulse oscillator type\n\t\t// @ts-ignore\n\t\tthis._pulse._sawtooth.type = \""sine\"";\n\n\t\tthis.modulationFrequency  = this._pulse.frequency;\n\n\t\tthis._modulator = new Oscillator({\n\t\t\tcontext: this.context,\n\t\t\tdetune: options.detune,\n\t\t\tfrequency: options.frequency,\n\t\t\tonstop: () => this.onstop(this),\n\t\t\tphase: options.phase,\n\t\t});\n\n\t\tthis.frequency = this._modulator.frequency;\n\t\tthis.detune = this._modulator.detune;\n\n\t\t// connections\n\t\tthis._modulator.chain(this._scale, this._pulse.width);\n\t\tthis._pulse.connect(this.output);\n\t\treadOnly(this, [\""modulationFrequency\"", \""frequency\"", \""detune\""]);\n\t}\n\n\tstatic getDefaults(): PWMOscillatorOptions {\n\t\treturn Object.assign(Source.getDefaults(), {\n\t\t\tdetune: 0,\n\t\t\tfrequency: 440,\n\t\t\tmodulationFrequency: 0.4,\n\t\t\tphase: 0,\n\t\t\ttype: \""pwm\"" as \""pwm\"",\n\t\t});\n\t}\n\t/**\n\t *  start the oscillator\n\t */\n\tprotected _start(time: Time): void {\n\t\ttime = this.toSeconds(time);\n\t\tthis._modulator.start(time);\n\t\tthis._pulse.start(time);\n\t}\n\n\t/**\n\t *  stop the oscillator\n\t */\n\tprotected _stop(time: Time): void {\n\t\ttime = this.toSeconds(time);\n\t\tthis._modulator.stop(time);\n\t\tthis._pulse.stop(time);\n\t}\n\n\t/**\n\t *  restart the oscillator\n\t */\n\trestart(time?: Time): this {\n\t\tthis._modulator.restart(time);\n\t\tthis._pulse.restart(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t * The type of the oscillator. Always returns \""pwm\"".\n\t */\n\tget type(): \""pwm\"" {\n\t\treturn \""pwm\"";\n\t}\n\n\t/**\n\t * The baseType of the oscillator. Always returns \""pwm\"".\n\t */\n\tget baseType(): \""pwm\"" {\n\t\treturn \""pwm\"";\n\t}\n\n\t/**\n\t * The partials of the waveform. Cannot set partials for this waveform type\n\t */\n\tget partials(): number[] {\n\t\treturn [];\n\t}\n\n\t/**\n\t * No partials for this waveform type.\n\t */\n\tget partialCount(): number {\n\t\treturn 0;\n\t}\n\n\t/**\n\t * The phase of the oscillator in degrees.\n\t */\n\tget phase(): Degrees {\n\t\treturn this._modulator.phase;\n\t}\n\tset phase(phase: Degrees) {\n\t\tthis._modulator.phase = phase;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._pulse.dispose();\n\t\tthis._scale.dispose();\n\t\tthis._modulator.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { AudioRange, Cents, Degrees, Frequency, Positive, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments  } from \""../../core/util/Defaults\"";\nimport { readOnly } from \""../../core/util/Interface\"";\nimport { isNumber, isString } from \""../../core/util/TypeCheck\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { Source } from \""../Source\"";\nimport { AMOscillator } from \""./AMOscillator\"";\nimport { FatOscillator } from \""./FatOscillator\"";\nimport { FMOscillator } from \""./FMOscillator\"";\nimport { Oscillator } from \""./Oscillator\"";\nimport { OmniOscillatorConstructorOptions,\n\tOmniOscillatorOptions, OmniOscillatorType,\n\tToneOscillatorInterface, ToneOscillatorType } from \""./OscillatorInterface\"";\nimport { PulseOscillator } from \""./PulseOscillator\"";\nimport { PWMOscillator } from \""./PWMOscillator\"";\n\n/**\n * All of the oscillator types that OmniOscillator can take on\n */\ntype AnyOscillator = Oscillator | PWMOscillator | PulseOscillator | FatOscillator | AMOscillator | FMOscillator;\n\n/**\n * The constructor of each of the OmniOscillator types\n */\ntype TypeofAnyOscillator = typeof Oscillator | typeof PWMOscillator |\n\ttypeof PulseOscillator | typeof FatOscillator |\n\ttypeof AMOscillator | typeof FMOscillator;\n\n/**\n * All of the Oscillator constructor types mapped to their name.\n */\ninterface OmniOscillatorSource {\n\t\""fm\"": FMOscillator;\n\t\""am\"": AMOscillator;\n\t\""pwm\"": PWMOscillator;\n\t\""pulse\"": PulseOscillator;\n\t\""oscillator\"": Oscillator;\n\t\""fat\"": FatOscillator;\n}\n\n/**\n * The available oscillator types.\n */\nexport type OmniOscSourceType = keyof OmniOscillatorSource;\n\n// Conditional Types\ntype IsAmOrFmOscillator<Osc, Ret> = Osc extends AMOscillator ? Ret : Osc extends FMOscillator ? Ret : undefined;\ntype IsFatOscillator<Osc, Ret> = Osc extends FatOscillator ? Ret : undefined;\ntype IsPWMOscillator<Osc, Ret> = Osc extends PWMOscillator ? Ret : undefined;\ntype IsPulseOscillator<Osc, Ret> = Osc extends PulseOscillator ? Ret : undefined;\ntype IsFMOscillator<Osc, Ret> = Osc extends FMOscillator ? Ret : undefined;\n\ntype AnyOscillatorConstructor = new (...args: any[]) => AnyOscillator;\n\n// tslint:disable-next-line: variable-name\nconst OmniOscillatorSourceMap: {\n\t[key in OmniOscSourceType] : AnyOscillatorConstructor\n} = {\n\tam: AMOscillator,\n\tfat: FatOscillator,\n\tfm: FMOscillator,\n\toscillator: Oscillator,\n\tpulse: PulseOscillator,\n\tpwm: PWMOscillator,\n};\n\n/**\n * OmniOscillator aggregates Tone.Oscillator, Tone.PulseOscillator,\n * Tone.PWMOscillator, Tone.FMOscillator, Tone.AMOscillator, and Tone.FatOscillator\n * into one class. The oscillator class can be changed by setting the `type`.\n * `omniOsc.type = \""pwm\""` will set it to the Tone.PWMOscillator. Prefixing\n * any of the basic types (\""sine\"", \""square4\"", etc.) with \""fm\"", \""am\"", or \""fat\""\n * will use the FMOscillator, AMOscillator or FatOscillator respectively.\n * For example: `omniOsc.type = \""fatsawtooth\""` will create set the oscillator\n * to a FatOscillator of type \""sawtooth\"".\n *\n * @param frequency The initial frequency of the oscillator.\n * @param type The type of the oscillator.\n * @example\n * var omniOsc = new OmniOscillator(\""C#4\"", \""pwm\"");\n */\nexport class OmniOscillator<OscType extends AnyOscillator>\nextends Source<OmniOscillatorConstructorOptions>\nimplements Omit<ToneOscillatorInterface, \""type\""> {\n\n\tname = \""OmniOscillator\"";\n\n\t/**\n\t *  The frequency control.\n\t */\n\treadonly frequency: Signal<Frequency>;\n\n\t/**\n\t *  The detune control.\n\t */\n\treadonly detune: Signal<Cents>;\n\n\t/**\n\t * The oscillator that can switch types\n\t */\n\tprivate _oscillator!: AnyOscillator;\n\n\t/**\n\t *  the type of the oscillator source\n\t */\n\tprivate _sourceType!: OmniOscSourceType;\n\n\tconstructor(options?: Partial<OmniOscillatorConstructorOptions>);\n\tconstructor(frequency?: Frequency, type?: OmniOscillatorType);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(OmniOscillator.getDefaults(), arguments, [\""frequency\"", \""type\""]));\n\t\tconst options = optionsFromArguments(OmniOscillator.getDefaults(), arguments, [\""frequency\"", \""type\""]);\n\n\t\tthis.frequency = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""frequency\"",\n\t\t\tvalue: options.frequency,\n\t\t});\n\t\tthis.detune = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""cents\"",\n\t\t\tvalue: options.detune,\n\t\t});\n\t\treadOnly(this, [\""frequency\"", \""detune\""]);\n\n\t\t// set the options\n\t\tthis.set(options);\n\t}\n\n\tstatic getDefaults(): OmniOscillatorOptions {\n\t\treturn Object.assign(\n\t\t\tOscillator.getDefaults(),\n\t\t\tFMOscillator.getDefaults(),\n\t\t\tAMOscillator.getDefaults(),\n\t\t\tFatOscillator.getDefaults(),\n\t\t\tPulseOscillator.getDefaults(),\n\t\t\tPWMOscillator.getDefaults(),\n\t\t);\n\t}\n\n\t/**\n\t *  start the oscillator\n\t */\n\tprotected _start(time: Time): void {\n\t\tthis._oscillator.start(time);\n\t}\n\n\t/**\n\t *  start the oscillator\n\t */\n\tprotected _stop(time: Time): void {\n\t\tthis._oscillator.stop(time);\n\t}\n\n\trestart(time?: Time): this {\n\t\tthis._oscillator.restart(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t * The type of the oscillator. Can be any of the basic types: sine, square, triangle, sawtooth. Or\n\t * prefix the basic types with \""fm\"", \""am\"", or \""fat\"" to use the FMOscillator, AMOscillator or FatOscillator\n\t * types. The oscillator could also be set to \""pwm\"" or \""pulse\"". All of the parameters of the\n\t * oscillator's class are accessible when the oscillator is set to that type, but throws an error\n\t * when it's not.\n\t * @example\n\t * omniOsc.type = \""pwm\"";\n\t * //modulationFrequency is parameter which is available\n\t * //only when the type is \""pwm\"".\n\t * omniOsc.modulationFrequency.value = 0.5;\n\t * @example\n\t * //an square wave frequency modulated by a sawtooth\n\t * omniOsc.type = \""fmsquare\"";\n\t * omniOsc.modulationType = \""sawtooth\"";\n\t */\n\tget type(): OmniOscillatorType {\n\t\tlet prefix = \""\"";\n\t\tif ([\""am\"", \""fm\"", \""fat\""].some(p => this._sourceType === p)) {\n\t\t\tprefix = this._sourceType;\n\t\t}\n\t\treturn prefix + this._oscillator.type as OmniOscillatorType;\n\t}\n\tset type(type) {\n\t\tif (type.substr(0, 2) === \""fm\"") {\n\t\t\tthis._createNewOscillator(\""fm\"");\n\t\t\tthis._oscillator = this._oscillator as FMOscillator;\n\t\t\tthis._oscillator.type = type.substr(2) as ToneOscillatorType;\n\t\t} else if (type.substr(0, 2) === \""am\"") {\n\t\t\tthis._createNewOscillator(\""am\"");\n\t\t\tthis._oscillator = this._oscillator as AMOscillator;\n\t\t\tthis._oscillator.type = type.substr(2)  as ToneOscillatorType;\n\t\t} else if (type.substr(0, 3) === \""fat\"") {\n\t\t\tthis._createNewOscillator(\""fat\"");\n\t\t\tthis._oscillator = this._oscillator as FatOscillator;\n\t\t\tthis._oscillator.type = type.substr(3)  as ToneOscillatorType;\n\t\t} else if (type === \""pwm\"") {\n\t\t\tthis._createNewOscillator(\""pwm\"");\n\t\t\tthis._oscillator = this._oscillator as PWMOscillator;\n\t\t} else if (type === \""pulse\"") {\n\t\t\tthis._createNewOscillator(\""pulse\"");\n\t\t} else {\n\t\t\tthis._createNewOscillator(\""oscillator\"");\n\t\t\tthis._oscillator = this._oscillator as Oscillator;\n\t\t\tthis._oscillator.type = (type as ToneOscillatorType);\n\t\t}\n\t}\n\n\t/**\n\t * The partials of the waveform. A partial represents\n\t * the amplitude at a harmonic. The first harmonic is the\n\t * fundamental frequency, the second is the octave and so on\n\t * following the harmonic series.\n\t * Setting this value will automatically set the type to \""custom\"".\n\t * The value is an empty array when the type is not \""custom\"".\n\t * This is not available on \""pwm\"" and \""pulse\"" oscillator types.\n\t * @example\n\t * osc.partials = [1, 0.2, 0.01];\n\t */\n\tget partials(): number[] {\n\t\treturn this._oscillator.partials;\n\t}\n\tset partials(partials) {\n\t\tif (!this._getOscType(this._oscillator, \""pulse\"") && !this._getOscType(this._oscillator, \""pwm\"")) {\n\t\t\tthis._oscillator.partials = partials;\n\t\t}\n\t}\n\n\t/**\n\t * The partial count of the oscillator. This is not available on \""pwm\"" and \""pulse\"" oscillator types.\n\t * @example\n\t * //set the maximum number of partials\n\t * osc.partialCount = 0;\n\t */\n\tget partialCount(): number {\n\t\treturn this._oscillator.partialCount;\n\t}\n\tset partialCount(partialCount) {\n\t\tif (!this._getOscType(this._oscillator, \""pulse\"") && !this._getOscType(this._oscillator, \""pwm\"")) {\n\t\t\tthis._oscillator.partialCount = partialCount;\n\t\t}\n\t}\n\n\t/**\n\t * Set the parameters at once. Either pass in an\n\t * object mapping parameters to values, or to set a\n\t * single parameter, by passing in a string and value.\n\t * The last argument is an optional ramp time which\n\t * will ramp any signal values to their destination value\n\t * over the duration of the rampTime.\n\t * @param  params\n\t * @example\n\t * //set values using an object\n\t * filter.set({\n\t * \t\""frequency\"" : 300,\n\t * \t\""type\"" : \""highpass\""\n\t * });\n\t */\n\tset(props: Partial<OmniOscillatorConstructorOptions>): this {\n\t\t// make sure the type is set first\n\t\tif (Reflect.has(props, \""type\"") && props.type) {\n\t\t\tthis.type = props.type;\n\t\t\t// delete props.type;\n\t\t}\n\t\t// then set the rest\n\t\tsuper.set(props);\n\t\treturn this;\n\t}\n\n\tget(): OmniOscillatorConstructorOptions {\n\t\tconst options = this._oscillator.get();\n\t\t// @ts-ignore\n\t\toptions.type = this.type;\n\t\treturn options as OmniOscillatorOptions;\n\t}\n\n\t/**\n\t *  connect the oscillator to the frequency and detune signals\n\t */\n\tprivate _createNewOscillator(oscType: OmniOscSourceType): void {\n\t\tif (oscType !== this._sourceType) {\n\t\t\tthis._sourceType = oscType;\n\t\t\t// tslint:disable-next-line: variable-name\n\t\t\tconst OscConstructor = OmniOscillatorSourceMap[oscType];\n\t\t\t// short delay to avoid clicks on the change\n\t\t\tconst now = this.now();\n\t\t\tif (this._oscillator) {\n\t\t\t\tconst oldOsc = this._oscillator;\n\t\t\t\toldOsc.stop(now);\n\t\t\t\t// dispose the old one\n\t\t\t\tthis.context.setTimeout(() => oldOsc.dispose(), this.blockTime);\n\t\t\t}\n\t\t\tthis._oscillator = new OscConstructor({\n\t\t\t\tcontext : this.context,\n\t\t\t});\n\t\t\tthis.frequency.connect(this._oscillator.frequency);\n\t\t\tthis.detune.connect(this._oscillator.detune);\n\t\t\tthis._oscillator.connect(this.output);\n\t\t\tthis._oscillator.onstop = () => this.onstop(this);\n\t\t\tif (this.state === \""started\"") {\n\t\t\t\tthis._oscillator.start(now);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * The phase of the oscillator in degrees.\n\t */\n\tget phase(): Degrees {\n\t\treturn this._oscillator.phase;\n\t}\n\tset phase(phase) {\n\t\tthis._oscillator.phase = phase;\n\t}\n\n\t/**\n\t * The source type of the oscillator.\n\t * @example\n\t * var omniOsc = new OmniOscillator(440, \""fmsquare\"");\n\t * omniOsc.sourceType // 'fm'\n\t */\n\tget sourceType(): OmniOscSourceType {\n\t\treturn this._sourceType;\n\t}\n\tset sourceType(sType) {\n\t\t// the basetype defaults to sine\n\t\tlet baseType = \""sine\"";\n\t\tif (this._oscillator.type !== \""pwm\"" && this._oscillator.type !== \""pulse\"") {\n\t\t\tbaseType = this._oscillator.type;\n\t\t}\n\n\t\t// set the type\n\t\tif (sType === \""fm\"") {\n\t\t\tthis.type = \""fm\"" + baseType as OmniOscillatorType;\n\t\t} else if (sType === \""am\"") {\n\t\t\tthis.type = \""am\"" + baseType as OmniOscillatorType;\n\t\t} else if (sType === \""fat\"") {\n\t\t\tthis.type = \""fat\"" + baseType as OmniOscillatorType;\n\t\t} else if (sType === \""oscillator\"") {\n\t\t\tthis.type = baseType as OmniOscillatorType;\n\t\t} else if (sType === \""pulse\"") {\n\t\t\tthis.type = \""pulse\"";\n\t\t} else if (sType === \""pwm\"") {\n\t\t\tthis.type = \""pwm\"";\n\t\t}\n\t}\n\n\tprivate _getOscType<SourceType extends OmniOscSourceType>(\n\t\tosc: AnyOscillator,\n\t\tsourceType: SourceType,\n\t): osc is OmniOscillatorSource[SourceType] {\n\t\treturn osc instanceof OmniOscillatorSourceMap[sourceType];\n\t}\n\n\t/**\n\t * The base type of the oscillator.\n\t * @example\n\t * var omniOsc = new OmniOscillator(440, \""fmsquare4\"");\n\t * omniOsc.sourceType // 'fm'\n\t * omniOsc.baseType //'square'\n\t * omniOsc.partialCount //4\n\t */\n\tget baseType(): OscillatorType | \""pwm\"" | \""pulse\"" {\n\t\treturn this._oscillator.baseType;\n\t}\n\tset baseType(baseType) {\n\t\tif (!this._getOscType(this._oscillator, \""pulse\"") &&\n\t\t\t!this._getOscType(this._oscillator, \""pwm\"") &&\n\t\t\tbaseType !== \""pulse\"" && baseType !== \""pwm\"") {\n\t\t\tthis._oscillator.baseType = baseType;\n\t\t}\n\t}\n\n\t/**\n\t * The width of the oscillator when sourceType === \""pulse\"".\n\t * @example\n\t * var omniOsc = new OmniOscillator(440, \""pulse\"");\n\t * //can access the width attribute only if type === \""pulse\""\n\t * omniOsc.width.value = 0.2;\n\t */\n\tget width(): IsPulseOscillator<OscType, Signal<AudioRange>> {\n\t\tif (this._getOscType(this._oscillator, \""pulse\"")) {\n\t\t\treturn this._oscillator.width as IsPulseOscillator<OscType, Signal<AudioRange>> ;\n\t\t} else {\n\t\t\treturn undefined as IsPulseOscillator<OscType, Signal<AudioRange>> ;\n\t\t}\n\t}\n\n\t/**\n\t * The number of detuned oscillators, when sourceType === \""fat\"".\n\t */\n\tget count(): IsFatOscillator<OscType, number> {\n\t\tif (this._getOscType(this._oscillator, \""fat\"")) {\n\t\t\treturn this._oscillator.count as IsFatOscillator<OscType, number>;\n\t\t} else {\n\t\t\treturn undefined as IsFatOscillator<OscType, number>;\n\t\t}\n\t}\n\tset count(count) {\n\t\tif (this._getOscType(this._oscillator, \""fat\"") && isNumber(count)) {\n\t\t\tthis._oscillator.count = count;\n\t\t}\n\t}\n\n\t/**\n\t * The detune spread between the oscillators. If \""count\"" is\n\t * set to 3 oscillators and the \""spread\"" is set to 40,\n\t * the three oscillators would be detuned like this: [-20, 0, 20]\n\t * for a total detune spread of 40 cents. See Tone.FatOscillator\n\t * for more info.\n\t */\n\tget spread(): IsFatOscillator<OscType, Cents> {\n\t\tif (this._getOscType(this._oscillator, \""fat\"")) {\n\t\t\treturn this._oscillator.spread as IsFatOscillator<OscType, Cents>;\n\t\t} else {\n\t\t\treturn undefined as IsFatOscillator<OscType, Cents>;\n\t\t}\n\t}\n\tset spread(spread) {\n\t\tif (this._getOscType(this._oscillator, \""fat\"") && isNumber(spread)) {\n\t\t\tthis._oscillator.spread = spread;\n\t\t}\n\t}\n\n\t/**\n\t * The type of the modulator oscillator. Only if the oscillator\n\t * is set to \""am\"" or \""fm\"" types. see. Tone.AMOscillator or Tone.FMOscillator\n\t * for more info.\n\t */\n\tget modulationType(): IsAmOrFmOscillator<OscType, ToneOscillatorType> {\n\t\tif (this._getOscType(this._oscillator, \""fm\"") || this._getOscType(this._oscillator, \""am\"")) {\n\t\t\treturn this._oscillator.modulationType as IsAmOrFmOscillator<OscType, ToneOscillatorType>;\n\t\t} else {\n\t\t\treturn undefined as IsAmOrFmOscillator<OscType, ToneOscillatorType>;\n\t\t}\n\t}\n\tset modulationType(mType) {\n\t\tif ((this._getOscType(this._oscillator, \""fm\"") || this._getOscType(this._oscillator, \""am\"")) && isString(mType)) {\n\t\t\tthis._oscillator.modulationType = mType;\n\t\t}\n\t}\n\n\t/**\n\t * The modulation index which is in essence the depth or amount of the modulation. In other terms it is the\n\t * ratio of the frequency of the modulating signal (mf) to the amplitude of the\n\t * modulating signal (ma) -- as in ma/mf.\n\t * See Tone.FMOscillator for more info.\n\t */\n\tget modulationIndex(): IsFMOscillator<OscType, Signal<Positive>> {\n\t\tif (this._getOscType(this._oscillator, \""fm\"")) {\n\t\t\treturn this._oscillator.modulationIndex as IsFMOscillator<OscType, Signal<Positive>>;\n\t\t} else {\n\t\t\treturn undefined as IsFMOscillator<OscType, Signal<Positive>>;\n\t\t}\n\t}\n\n\t/**\n\t *  Harmonicity is the frequency ratio between the carrier and the modulator oscillators.\n\t *  A harmonicity of 1 gives both oscillators the same frequency.\n\t *  Harmonicity = 2 means a change of an octave. See Tone.AMOscillator or Tone.FMOscillator\n\t *  for more info.\n\t */\n\tget harmonicity(): IsAmOrFmOscillator<OscType, Signal<Positive>> {\n\t\tif (this._getOscType(this._oscillator, \""fm\"") || this._getOscType(this._oscillator, \""am\"")) {\n\t\t\treturn this._oscillator.harmonicity as IsAmOrFmOscillator<OscType, Signal<Positive>>;\n\t\t} else {\n\t\t\treturn undefined as IsAmOrFmOscillator<OscType, Signal<Positive>>;\n\t\t}\n\t}\n\n\t/**\n\t * The modulationFrequency Signal of the oscillator\n\t * (only if the oscillator type is set to pwm). See\n\t * Tone.PWMOscillator for more info.\n\t * @example\n\t * var omniOsc = new OmniOscillator(440, \""pwm\"");\n\t * //can access the modulationFrequency attribute only if type === \""pwm\""\n\t * omniOsc.modulationFrequency.value = 0.2;\n\t */\n\tget modulationFrequency(): IsPWMOscillator<OscType, Signal<Frequency>> {\n\t\tif (this._getOscType(this._oscillator, \""pwm\"")) {\n\t\t\treturn this._oscillator.modulationFrequency as IsPWMOscillator<OscType, Signal<Frequency>>;\n\t\t} else {\n\t\t\treturn undefined as IsPWMOscillator<OscType, Signal<Frequency>>;\n\t\t}\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.detune.dispose();\n\t\tthis.frequency.dispose();\n\t\tthis._oscillator.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioBuffer } from \""../../core/context/ToneAudioBuffer\"";\nimport { Positive, Time } from \""../../core/type/Units\"";\nimport { defaultArg, optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { noOp } from \""../../core/util/Interface\"";\nimport { isUndef } from \""../../core/util/TypeCheck\"";\nimport { Source, SourceOptions } from \""../Source\"";\nimport { ToneBufferSource } from \""./BufferSource\"";\n\ninterface PlayerOptions extends SourceOptions {\n\tonload: () => void;\n\tplaybackRate: Positive;\n\tloop: boolean;\n\tautostart: boolean;\n\tloopStart: Time;\n\tloopEnd: Time;\n\treverse: boolean;\n\tfadeIn: Time;\n\tfadeOut: Time;\n\turl?: ToneAudioBuffer | string | AudioBuffer;\n}\n\n/**\n * Player is an audio file player with start, loop, and stop functions.\n *\n * @param url Either the AudioBuffer or the url from which to load the AudioBuffer\n * @param onload The function to invoke when the buffer is loaded.\n *                            Recommended to use Tone.Buffer.on('load') instead.\n * @example\n * var player = new Player(\""./path/to/sample.mp3\"").toDestination();\n * //play as soon as the buffer is loaded\n * player.autostart = true;\n */\nexport class Player extends Source<PlayerOptions> {\n\n\tname = \""Player\"";\n\n\t/**\n\t * If the file should play as soon\n\t * as the buffer is loaded.\n\t * @example\n\t * //will play as soon as it's loaded\n\t * var player = new Player({\n\t * \t\""url\"" : \""./path/to/sample.mp3\"",\n\t * \t\""autostart\"" : true,\n\t * }).toDestination();\n\t */\n\tautostart: boolean;\n\n\t/**\n\t *  The buffer\n\t */\n\tprivate _buffer: ToneAudioBuffer;\n\n\t/**\n\t *  if the buffer should loop once it's over\n\t */\n\tprivate _loop: boolean;\n\n\t/**\n\t *  if 'loop' is true, the loop will start at this position\n\t */\n\tprivate _loopStart: Time;\n\n\t/**\n\t *  if 'loop' is true, the loop will end at this position\n\t */\n\tprivate _loopEnd: Time;\n\n\t/**\n\t *  the playback rate\n\t */\n\tprivate _playbackRate: Positive;\n\n\t/**\n\t *  All of the active buffer source nodes\n\t */\n\tprivate _activeSources: Set<ToneBufferSource> = new Set();\n\n\t/**\n\t *  The fadeIn time of the amplitude envelope.\n\t */\n\tfadeIn: Time;\n\n\t/**\n\t *  The fadeOut time of the amplitude envelope.\n\t */\n\tfadeOut: Time;\n\n\tconstructor(options?: Partial<PlayerOptions>);\n\tconstructor(url?: string | AudioBuffer | ToneAudioBuffer, onload?: () => void);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Player.getDefaults(), arguments, [\""url\"", \""onload\""]));\n\t\tconst options = optionsFromArguments(Player.getDefaults(), arguments, [\""url\"", \""onload\""]);\n\n\t\tthis._buffer = new ToneAudioBuffer({\n\t\t\tonload: this._onload.bind(this, options.onload),\n\t\t\treverse: options.reverse,\n\t\t\turl: options.url,\n\t\t});\n\t\tthis.autostart = options.autostart;\n\t\tthis._loop = options.loop;\n\t\tthis._loopStart = options.loopStart;\n\t\tthis._loopEnd = options.loopEnd;\n\t\tthis._playbackRate = options.playbackRate;\n\t\tthis.fadeIn = options.fadeIn;\n\t\tthis.fadeOut = options.fadeOut;\n\t}\n\n\tstatic getDefaults(): PlayerOptions {\n\t\treturn Object.assign(Source.getDefaults(), {\n\t\t\tautostart : false,\n\t\t\tfadeIn : 0,\n\t\t\tfadeOut : 0,\n\t\t\tloop : false,\n\t\t\tloopEnd : 0,\n\t\t\tloopStart : 0,\n\t\t\tonload : noOp,\n\t\t\tplaybackRate : 1,\n\t\t\treverse : false,\n\t\t});\n\t}\n\n\t/**\n\t * Load the audio file as an audio buffer.\n\t * Decodes the audio asynchronously and invokes\n\t * the callback once the audio buffer loads.\n\t * Note: this does not need to be called if a url\n\t * was passed in to the constructor. Only use this\n\t * if you want to manually load a new url.\n\t * @param url The url of the buffer to load. Filetype support depends on the browser.\n\t */\n\tasync load(url: string): Promise<this> {\n\t\tawait this._buffer.load(url);\n\t\tthis._onload();\n\t\treturn this;\n\t}\n\n\t/**\n\t * Internal callback when the buffer is loaded.\n\t */\n\tprivate _onload(callback: () => void = noOp): void {\n\t\tcallback();\n\t\tif (this.autostart) {\n\t\t\tthis.start();\n\t\t}\n\t}\n\n\t/**\n\t * Internal callback when the buffer is done playing.\n\t */\n\tprivate _onSourceEnd(source: ToneBufferSource): void {\n\t\t// invoke the onstop function\n\t\tthis.onstop(this);\n\n\t\t// delete the source from the active sources\n\t\tthis._activeSources.delete(source);\n\t\tif (this._activeSources.size === 0 && !this._synced) {\n\t\t\tthis._state.setStateAtTime(\""stopped\"", this.now());\n\t\t}\n\t}\n\n\t/**\n\t *  Play the buffer at the given startTime. Optionally add an offset\n\t *  and/or duration which will play the buffer from a position\n\t *  within the buffer for the given duration.\n\t *\n\t *  @param  time When the player should start.\n\t *  @param  offset The offset from the beginning of the sample\n\t *                                 to start at.\n\t *  @param  duration How long the sample should play. If no duration is given, it will default to the full length\n\t *                   of the sample (minus any offset)\n\t */\n\tstart(time?: Time, offset?: Time, duration?: Time): this {\n\t\tsuper.start(time, offset, duration);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Internal start method\n\t */\n\tprotected _start(startTime?: Time, offset?: Time, duration?: Time): void {\n\t\t// if it's a loop the default offset is the loopstart point\n\t\tif (this._loop) {\n\t\t\toffset = defaultArg(offset, this._loopStart);\n\t\t} else {\n\t\t\t// otherwise the default offset is 0\n\t\t\toffset = defaultArg(offset, 0);\n\t\t}\n\n\t\t// compute the values in seconds\n\t\tlet comptuedOffset = this.toSeconds(offset);\n\n\t\t// if it's synced, it should factor in the playback rate for computing the offset\n\t\tif (this._synced) {\n\t\t\tcomptuedOffset *= this._playbackRate;\n\t\t}\n\n\t\t// compute the duration which is either the passed in duration of the buffer.duration - offset\n\t\tconst origDuration = duration;\n\t\tduration = defaultArg(duration, Math.max(this._buffer.duration - comptuedOffset, 0));\n\t\tlet computedDuration = this.toSeconds(duration);\n\n\t\t// scale it by the playback rate\n\t\tcomputedDuration = computedDuration / this._playbackRate;\n\n\t\t// get the start time\n\t\tstartTime = this.toSeconds(startTime);\n\n\t\t// make the source\n\t\tconst source = new ToneBufferSource({\n\t\t\tbuffer : this._buffer,\n\t\t\tcontext: this.context,\n\t\t\tfadeIn : this.fadeIn,\n\t\t\tfadeOut : this.fadeOut,\n\t\t\tloop : this._loop,\n\t\t\tloopEnd : this._loopEnd,\n\t\t\tloopStart : this._loopStart,\n\t\t\tonended : this._onSourceEnd.bind(this),\n\t\t\tplaybackRate : this._playbackRate,\n\t\t}).connect(this.output);\n\n\t\t// set the looping properties\n\t\tif (!this._loop && !this._synced) {\n\t\t\t// if it's not looping, set the state change at the end of the sample\n\t\t\tthis._state.setStateAtTime(\""stopped\"", startTime + computedDuration, {\n\t\t\t\timplicitEnd: true,\n\t\t\t});\n\t\t}\n\n\t\t// add it to the array of active sources\n\t\tthis._activeSources.add(source);\n\n\t\t// start it\n\t\tif (this._loop && isUndef(origDuration)) {\n\t\t\tsource.start(startTime, comptuedOffset);\n\t\t} else {\n\t\t\t// subtract the fade out time\n\t\t\tsource.start(startTime, comptuedOffset, computedDuration - this.toSeconds(this.fadeOut));\n\t\t}\n\t}\n\n\t/**\n\t *  Stop playback.\n\t */\n\tprotected _stop(time?: Time): void {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis._activeSources.forEach(source => source.stop(computedTime));\n\t}\n\n\t/**\n\t * Stop and then restart the player from the beginning (or offset)\n\t * @param  time When the player should start.\n\t * @param  offset The offset from the beginning of the sample to start at.\n\t * @param  duration How long the sample should play. If no duration is given,\n\t * \t\t\t\t\tit will default to the full length of the sample (minus any offset)\n\t */\n\trestart(time?: Time, offset?: Time, duration?: Time): this {\n\t\tthis._stop(time);\n\t\tthis._start(time, offset, duration);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Seek to a specific time in the player's buffer. If the\n\t *  source is no longer playing at that time, it will stop.\n\t *  If you seek to a time that\n\t *  @param {Time} offset The time to seek to.\n\t *  @param {Time=} time The time for the seek event to occur.\n\t *  @return {Player} this\n\t *  @example\n\t * source.start(0.2);\n\t * source.stop(0.4);\n\t */\n\tseek(offset: Time, when?: Time): this {\n\t\tconst computedTime = this.toSeconds(when);\n\t\tif (this._state.getValueAtTime(computedTime) === \""started\"") {\n\t\t\tconst comptuedOffset = this.toSeconds(offset);\n\t\t\t// if it's currently playing, stop it\n\t\t\tthis._stop(computedTime);\n\t\t\t// restart it at the given time\n\t\t\tthis._start(computedTime, comptuedOffset);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the loop start and end. Will only loop if loop is set to true.\n\t * @param loopStart The loop end time\n\t * @param loopEnd The loop end time\n\t * @example\n\t * //loop 0.1 seconds of the file.\n\t * player.setLoopPoints(0.2, 0.3);\n\t * player.loop = true;\n\t */\n\tsetLoopPoints(loopStart: Time, loopEnd: Time): this {\n\t\tthis.loopStart = loopStart;\n\t\tthis.loopEnd = loopEnd;\n\t\treturn this;\n\t}\n\n\t/**\n\t * If loop is true, the loop will start at this position.\n\t */\n\tget loopStart(): Time {\n\t\treturn this._loopStart;\n\t}\n\tset loopStart(loopStart) {\n\t\tthis._loopStart = loopStart;\n\t\t// get the current source\n\t\tthis._activeSources.forEach(source => {\n\t\t\tsource.loopStart = loopStart;\n\t\t});\n\t}\n\n\t/**\n\t * If loop is true, the loop will end at this position.\n\t */\n\tget loopEnd(): Time {\n\t\treturn this._loopEnd;\n\t}\n\tset loopEnd(loopEnd) {\n\t\tthis._loopEnd = loopEnd;\n\t\t// get the current source\n\t\tthis._activeSources.forEach(source => {\n\t\t\tsource.loopEnd = loopEnd;\n\t\t});\n\t}\n\n\t/**\n\t * The audio buffer belonging to the player.\n\t */\n\tget buffer(): ToneAudioBuffer {\n\t\treturn this._buffer;\n\t}\n\tset buffer(buffer) {\n\t\tthis._buffer.set(buffer);\n\t}\n\n\t/**\n\t * If the buffer should loop once it's over.\n\t */\n\tget loop(): boolean {\n\t\treturn this._loop;\n\t}\n\tset loop(loop) {\n\t\t// if no change, do nothing\n\t\tif (this._loop === loop) {\n\t\t\treturn;\n\t\t}\n\t\tthis._loop = loop;\n\t\t// set the loop of all of the sources\n\t\tthis._activeSources.forEach(source => {\n\t\t\tsource.loop = loop;\n\t\t});\n\t\tif (loop) {\n\t\t\t// remove the next stopEvent\n\t\t\tconst stopEvent = this._state.getNextState(\""stopped\"", this.now());\n\t\t\tif (stopEvent) {\n\t\t\t\tthis._state.cancel(stopEvent.time);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * The playback speed. 1 is normal speed. This is not a signal because\n\t * Safari and iOS currently don't support playbackRate as a signal.\n\t */\n\tget playbackRate(): Positive {\n\t\treturn this._playbackRate;\n\t}\n\tset playbackRate(rate) {\n\t\tthis._playbackRate = rate;\n\t\tconst now = this.now();\n\n\t\t// cancel the stop event since it's at a different time now\n\t\tconst stopEvent = this._state.getNextState(\""stopped\"", now);\n\t\tif (stopEvent && stopEvent.implicitEnd) {\n\t\t\tthis._state.cancel(stopEvent.time);\n\t\t\tthis._activeSources.forEach(source => source.cancelStop());\n\t\t}\n\n\t\t// set all the sources\n\t\tthis._activeSources.forEach(source => {\n\t\t\tsource.playbackRate.setValueAtTime(rate, now);\n\t\t});\n\t}\n\n\t/**\n\t * The direction the buffer should play in\n\t */\n\tget reverse(): boolean {\n\t\treturn this._buffer.reverse;\n\t}\n\tset reverse(rev) {\n\t\tthis._buffer.reverse = rev;\n\t}\n\n\t/**\n\t * If the buffer is loaded\n\t */\n\tget loaded(): boolean {\n\t\treturn this._buffer.loaded;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\t// disconnect all of the players\n\t\tthis._activeSources.forEach(source => source.dispose());\n\t\tthis._activeSources.clear();\n\t\tthis._buffer.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { connectSeries } from \""../core/Connect\"";\nimport { Gain } from \""../core/context/Gain\"";\nimport { Param } from \""../core/context/Param\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { Signal, SignalOptions } from \""./Signal\"";\n\n/**\n * Add a signal and a number or two signals. When no value is\n * passed into the constructor, Tone.Add will sum input and `addend`\n * If a value is passed into the constructor, the it will be added to the input.\n *\n * @param value If no value is provided, Tone.Add will sum the first  and second inputs.\n * @example\n * var signal = new Signal(2);\n * var add = new Add(2);\n * signal.connect(add);\n * //the output of add equals 4\n * @example\n * //if constructed with no arguments\n * //it will add the first and second inputs\n * var add = new Add();\n * var sig0 = new Signal(3).connect(add);\n * var sig1 = new Signal(4).connect(add.addend);\n * //the output of add equals 7.\n */\nexport class Add extends Signal {\n\n\toverride = false;\n\n\treadonly name = \""Add\"";\n\n\t/**\n\t *  the summing node\n\t */\n\tprivate _sum: Gain = new Gain({ context: this.context });\n\treadonly input = this._sum;\n\treadonly output = this._sum;\n\n\t/**\n\t * The value which is added to the input signal\n\t */\n\treadonly addend: Param<number> = this._param;\n\n\tconstructor(options?: Partial<SignalOptions<number>>);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(value?: number);\n\tconstructor() {\n\t\tsuper(Object.assign(optionsFromArguments(Add.getDefaults(), arguments, [\""value\""])));\n\n\t\tconnectSeries(this._constantSource, this._sum);\n\t}\n\n\tstatic getDefaults(): SignalOptions<number> {\n\t\treturn Object.assign(Signal.getDefaults(), {\n\t\t\tvalue: 0,\n\t\t});\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._sum.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { SignalOperator } from \""./SignalOperator\"";\nimport { WaveShaper } from \""./WaveShaper\"";\n\n/**\n *  Return the absolute value of an incoming signal.\n *\n *  @example\n * var signal = new Tone.Signal(-1);\n * var abs = new Tone.Abs();\n * signal.connect(abs);\n * //the output of abs is 1.\n */\nexport class Abs extends SignalOperator<ToneAudioNodeOptions> {\n\n\tname = \""Abs\"";\n\n\t/**\n\t * The node which converts the audio ranges\n\t */\n\tprivate _abs = new WaveShaper({\n\t\tcontext: this.context,\n\t\tmapping: val => {\n\t\t\tif (Math.abs(val) < 0.001) {\n\t\t\t\treturn 0;\n\t\t\t} else {\n\t\t\t\treturn Math.abs(val);\n\t\t\t}\n\t\t},\n\t});\n\n\t/**\n\t * The AudioRange input [-1, 1]\n\t */\n\tinput = this._abs;\n\n\t/**\n\t * The output range [0, 1]\n\t */\n\toutput = this._abs;\n\n\t/**\n\t *  clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._abs.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { SignalOperator } from \""./SignalOperator\"";\nimport { WaveShaper } from \""./WaveShaper\"";\n\n/**\n * GainToAudio converts an input in NormalRange [0,1] to AudioRange [-1,1].\n * See {@link AudioToGain}.\n *\n * @example\n * var a2g = new GainToAudio();\n */\nexport class GainToAudio extends SignalOperator<ToneAudioNodeOptions> {\n\n\tname = \""GainToAudio\"";\n\n\t/**\n\t * The node which converts the audio ranges\n\t */\n\tprivate _norm = new WaveShaper({\n\t\tcontext: this.context,\n\t\tmapping: x => Math.abs(x) * 2 - 1,\n\t});\n\n\t/**\n\t * The NormalRange input [0, 1]\n\t */\n\tinput = this._norm;\n\n\t/**\n\t * The AudioRange output [-1, 1]\n\t */\n\toutput = this._norm;\n\n\t/**\n\t *  clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._norm.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { Multiply } from \""./Multiply\"";\nimport { SignalOperator } from \""./SignalOperator\"";\n\n/**\n *  @class Negate the incoming signal. i.e. an input signal of 10 will output -10\n *\n *  @constructor\n *  @extends {Tone.SignalBase}\n *  @example\n * var neg = new Negate();\n * var sig = new Signal(-2).connect(neg);\n * //output of neg is positive 2.\n */\nexport class Negate extends SignalOperator<ToneAudioNodeOptions> {\n\n\tname = \""Negate\"";\n\n\t/**\n\t *  negation is done by multiplying by -1\n\t */\n\tprivate _multiply: Multiply = new Multiply({\n\t\tcontext: this.context,\n\t\tvalue: -1,\n\t});\n\n\t/**\n\t * The input and output are equal to the multiply node\n\t */\n\tinput = this._multiply;\n\toutput = this._multiply;\n\n\t/**\n\t *  clean up\n\t *  @returns {Negate} this\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._multiply.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { connectSeries } from \""../core/Connect\"";\nimport { Gain } from \""../core/context/Gain\"";\nimport { Param } from \""../core/context/Param\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { Negate } from \""../signal/Negate\"";\nimport { Signal, SignalOptions } from \""../signal/Signal\"";\n\n/**\n * Subtract the signal connected to the input is subtracted from the signal connected\n * The subtrahend.\n *\n * @param value The value to subtract from the incoming signal. If the value\n *                         is omitted, it will subtract the second signal from the first.\n * @example\n * var sub = new Subtract(1);\n * var sig = new Tone.Signal(4).connect(sub);\n * //the output of sub is 3.\n * @example\n * var sub = new Subtract();\n * var sigA = new Tone.Signal(10);\n * var sigB = new Tone.Signal(2.5);\n * sigA.connect(sub);\n * sigB.connect(sub.subtrahend);\n * //output of sub is 7.5\n */\nexport class Subtract extends Signal {\n\n\toverride = false;\n\n\treadonly name = \""Subtract\"";\n\n\t/**\n\t *  the summing node\n\t */\n\tprivate _sum: Gain = new Gain({ context: this.context });\n\tinput = this._sum;\n\toutput = this._sum;\n\n\t/**\n\t *  Negate the input of the second input before connecting it to the summing node.\n\t */\n\tprivate _neg: Negate = new Negate({ context : this.context });\n\n\t/**\n\t * The value which is subtracted from the main signal\n\t */\n\tsubtrahend: Param<number> = this._param;\n\n\tconstructor(options?: Partial<SignalOptions<number>>);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(value?: number);\n\tconstructor() {\n\t\tsuper(Object.assign(optionsFromArguments(Subtract.getDefaults(), arguments, [\""value\""])));\n\n\t\tconnectSeries(this._constantSource, this._neg, this._sum);\n\t}\n\n\tstatic getDefaults(): SignalOptions<number> {\n\t\treturn Object.assign(Signal.getDefaults(), {\n\t\t\tvalue: 0,\n\t\t});\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._neg.dispose();\n\t\tthis._sum.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../core/context/Gain\"";\nimport { connect, disconnect, ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { SignalOperator } from \""./SignalOperator\"";\n\n/**\n *  Tone.Zero outputs 0's at audio-rate. The reason this has to be\n *  it's own class is that many browsers optimize out Tone.Signal\n *  with a value of 0 and will not process nodes further down the graph.\n */\nexport class Zero extends SignalOperator<ToneAudioNodeOptions> {\n\n\treadonly name = \""Zero\"";\n\n\t/**\n\t * The gain node which connects the constant source to the output\n\t */\n\tprivate _gain = new Gain({ context : this.context });\n\n\t/**\n\t * Only outputs 0\n\t */\n\toutput = this._gain;\n\n\t/**\n\t * no input node\n\t */\n\tinput = undefined;\n\n\tconstructor() {\n\t\tsuper(Object.assign(optionsFromArguments(Zero.getDefaults(), arguments)));\n\t\tconnect(this.context.getConstant(0), this._gain);\n\t}\n\n\t/**\n\t * clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tdisconnect(this.context.getConstant(0), this._gain);\n\t\treturn this;\n\t}\n}\n"",""import { InputNode, OutputNode } from \""../../core/context/ToneAudioNode\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { NormalRange, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { isArray, isObject, isString } from \""../../core/util/TypeCheck\"";\nimport { connectSignal, Signal } from \""../../signal/Signal\"";\n\ntype BasicEnvelopeCurve = \""linear\"" | \""exponential\"";\ntype InternalEnvelopeCurve = BasicEnvelopeCurve | number[];\nexport type EnvelopeCurve = EnvelopeCurveName | number[];\n\nexport interface EnvelopeOptions extends ToneAudioNodeOptions {\n\tattack: Time;\n\tdecay: Time;\n\tsustain: NormalRange;\n\trelease: Time;\n\tattackCurve: EnvelopeCurve;\n\treleaseCurve: EnvelopeCurve;\n\tdecayCurve: BasicEnvelopeCurve;\n}\n\n/**\n *  Envelope is an [ADSR](https://en.wikipedia.org/wiki/Synthesizer#ADSR_envelope)\n *  envelope generator. Envelope outputs a signal which\n *  can be connected to an AudioParam or Tone.Signal.\n * ```\n *           /\\\n *          /  \\\n *         /    \\\n *        /      \\\n *       /        \\___________\n *      /                     \\\n *     /                       \\\n *    /                         \\\n *   /                           \\\n * ```\n *\n *  @param attack The amount of time it takes for the envelope to go from\n *                         0 to it's maximum value.\n *  @param decay\tThe period of time after the attack that it takes for the envelope\n *                       \tto fall to the sustain value. Value must be greater than 0.\n *  @param sustain\tThe percent of the maximum value that the envelope rests at until\n *                                \tthe release is triggered.\n *  @param release\tThe amount of time after the release is triggered it takes to reach 0.\n *                         \tValue must be greater than 0.\n *  @example\n * //an amplitude envelope\n * var gainNode = Tone.context.createGain();\n * var env = new Envelope({\n * \t\""attack\"" : 0.1,\n * \t\""decay\"" : 0.2,\n * \t\""sustain\"" : 1,\n * \t\""release\"" : 0.8,\n * });\n * env.connect(gainNode.gain);\n */\nexport class Envelope extends ToneAudioNode<EnvelopeOptions> {\n\n\treadonly name: string = \""Envelope\"";\n\n\t/**\n\t * When triggerAttack is called, the attack time is the amount of\n\t * time it takes for the envelope to reach it's maximum value.\n\t * ```\n\t *           /\\\n\t *          /X \\\n\t *         /XX  \\\n\t *        /XXX   \\\n\t *       /XXXX    \\___________\n\t *      /XXXXX                \\\n\t *     /XXXXXX                 \\\n\t *    /XXXXXXX                  \\\n\t *   /XXXXXXXX                   \\\n\t * ```\n\t */\n\tattack: Time;\n\n\t/**\n\t * After the attack portion of the envelope, the value will fall\n\t * over the duration of the decay time to it's sustain value.\n\t * ```\n\t *           /\\\n\t *          / X\\\n\t *         /  XX\\\n\t *        /   XXX\\\n\t *       /    XXXX\\___________\n\t *      /     XXXXX           \\\n\t *     /      XXXXX            \\\n\t *    /       XXXXX             \\\n\t *   /        XXXXX              \\\n\t * ```\n\t */\n\tdecay: Time;\n\n\t/**\n\t * \tThe sustain value is the value\n\t * \twhich the envelope rests at after triggerAttack is\n\t * \tcalled, but before triggerRelease is invoked.\n\t * ```\n\t *           /\\\n\t *          /  \\\n\t *         /    \\\n\t *        /      \\\n\t *       /        \\___________\n\t *      /          XXXXXXXXXXX\\\n\t *     /           XXXXXXXXXXX \\\n\t *    /            XXXXXXXXXXX  \\\n\t *   /             XXXXXXXXXXX   \\\n\t * ```\n\t */\n\tsustain: NormalRange;\n\n\t/**\n\t *  After triggerRelease is called, the envelope's\n\t *  value will fall to it's miminum value over the\n\t *  duration of the release time.\n\t * ```\n\t *           /\\\n\t *          /  \\\n\t *         /    \\\n\t *        /      \\\n\t *       /        \\___________\n\t *      /                    X\\\n\t *     /                     XX\\\n\t *    /                      XXX\\\n\t *   /                       XXXX\\\n\t * ```\n\t */\n\trelease: Time;\n\n\t/**\n\t *  The automation curve type for the attack\n\t */\n\tprivate _attackCurve!: InternalEnvelopeCurve;\n\n\t/**\n\t *  The automation curve type for the decay\n\t */\n\tprivate _decayCurve!: BasicEnvelopeCurve;\n\n\t/**\n\t *  The automation curve type for the release\n\t */\n\tprivate _releaseCurve!: InternalEnvelopeCurve;\n\n\t/**\n\t *  the signal which is output.\n\t */\n\tprotected _sig: Signal<NormalRange> = new Signal({\n\t\tcontext: this.context,\n\t\tvalue: 0,\n\t});\n\n\t/**\n\t * The output signal of the envelope\n\t */\n\toutput: OutputNode = this._sig;\n\n\t/**\n\t * Envelope has no input\n\t */\n\tinput: InputNode | undefined = undefined;\n\n\tconstructor(attack?: Time, decay?: Time, sustain?: NormalRange, release?: Time);\n\tconstructor(options?: Partial<EnvelopeOptions>)\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Envelope.getDefaults(), arguments, [\""attack\"", \""decay\"", \""sustain\"", \""release\""]));\n\t\tconst options = optionsFromArguments(Envelope.getDefaults(), arguments, [\""attack\"", \""decay\"", \""sustain\"", \""release\""]);\n\n\t\tthis.attack = options.attack;\n\t\tthis.decay = options.decay;\n\t\tthis.sustain = options.sustain;\n\t\tthis.release = options.release;\n\t\tthis.attackCurve = options.attackCurve;\n\t\tthis.releaseCurve = options.releaseCurve;\n\t\tthis.decayCurve = options.decayCurve;\n\t}\n\n\tstatic getDefaults(): EnvelopeOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tattack : 0.01,\n\t\t\tattackCurve : \""linear\"" as EnvelopeCurveName,\n\t\t\tdecay : 0.1,\n\t\t\tdecayCurve : \""exponential\"" as BasicEnvelopeCurve,\n\t\t\trelease : 1,\n\t\t\treleaseCurve : \""exponential\"" as EnvelopeCurveName,\n\t\t\tsustain : 0.5,\n\t\t});\n\t}\n\n\t/**\n\t * Read the current value of the envelope. Useful for\n\t * syncronizing visual output to the envelope.\n\t */\n\tget value(): NormalRange {\n\t\treturn this.getValueAtTime(this.now());\n\t}\n\n\t/**\n\t *  Get the curve\n\t *  @param  curve\n\t *  @param  direction  In/Out\n\t *  @return  {String}  The curve name\n\t *  @private\n\t */\n\tprivate _getCurve(curve: InternalEnvelopeCurve, direction: EnvelopeDirection): EnvelopeCurve {\n\t\tif (isString(curve)) {\n\t\t\treturn curve;\n\t\t} else {\n\t\t\t// look up the name in the curves array\n\t\t\tlet curveName: EnvelopeCurveName;\n\t\t\tfor (curveName in EnvelopeCurves) {\n\t\t\t\tif (EnvelopeCurves[curveName][direction] === curve) {\n\t\t\t\t\treturn curveName;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// return the custom curve\n\t\t\treturn curve;\n\t\t}\n\t}\n\n\t/**\n\t *  Assign a the curve to the given name using the direction\n\t *  @param  name\n\t *  @param  direction In/Out\n\t *  @param  curve\n\t */\n\tprivate _setCurve(\n\t\tname: \""_attackCurve\"" | \""_decayCurve\"" | \""_releaseCurve\"",\n\t\tdirection: EnvelopeDirection,\n\t\tcurve: EnvelopeCurve,\n\t): void {\n\t\t// check if it's a valid type\n\t\tif (isString(curve) && Reflect.has(EnvelopeCurves, curve)) {\n\t\t\tconst curveDef = EnvelopeCurves[curve];\n\t\t\tif (isObject(curveDef)) {\n\t\t\t\tif (name !== \""_decayCurve\"") {\n\t\t\t\t\tthis[name] = curveDef[direction];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis[name] = curveDef;\n\t\t\t}\n\t\t} else if (isArray(curve) && name !== \""_decayCurve\"") {\n\t\t\tthis[name] = curve;\n\t\t} else {\n\t\t\tthrow new Error(\""Envelope: invalid curve: \"" + curve);\n\t\t}\n\t}\n\n\t/**\n\t * The shape of the attack.\n\t * Can be any of these strings:\n\t * * \""linear\""\n\t * * \""exponential\""\n\t * * \""sine\""\n\t * * \""cosine\""\n\t * * \""bounce\""\n\t * * \""ripple\""\n\t * * \""step\""\n\t *\n\t * Can also be an array which describes the curve. Values\n\t * in the array are evenly subdivided and linearly\n\t * interpolated over the duration of the attack.\n\t * @example\n\t * env.attackCurve = \""linear\"";\n\t * @example\n\t * //can also be an array\n\t * env.attackCurve = [0, 0.2, 0.3, 0.4, 1]\n\t */\n\tget attackCurve(): EnvelopeCurve {\n\t\treturn this._getCurve(this._attackCurve, \""In\"");\n\t}\n\tset attackCurve(curve) {\n\t\tthis._setCurve(\""_attackCurve\"", \""In\"", curve);\n\t}\n\n\t/**\n\t * The shape of the release. See the attack curve types.\n\t * @example\n\t * env.releaseCurve = \""linear\"";\n\t */\n\tget releaseCurve(): EnvelopeCurve {\n\t\treturn this._getCurve(this._releaseCurve, \""Out\"");\n\t}\n\tset releaseCurve(curve) {\n\t\tthis._setCurve(\""_releaseCurve\"", \""Out\"", curve);\n\t}\n\n\t/**\n\t * The shape of the decay either \""linear\"" or \""exponential\""\n\t * @example\n\t * env.decayCurve = \""linear\"";\n\t */\n\tget decayCurve(): BasicEnvelopeCurve {\n\t\treturn this._decayCurve;\n\t}\n\tset decayCurve(curve) {\n\t\tthis.assert([\""linear\"", \""exponential\""].some(c => c === curve), `Invalid envelope curve: ${curve}`);\n\t\tthis._decayCurve = curve;\n\t}\n\n\t/**\n\t * Trigger the attack/decay portion of the ADSR envelope.\n\t * @param  time When the attack should start.\n\t * @param velocity The velocity of the envelope scales the vales.\n\t *                              number between 0-1\n\t * @example\n\t * //trigger the attack 0.5 seconds from now with a velocity of 0.2\n\t * env.triggerAttack(\""+0.5\"", 0.2);\n\t */\n\ttriggerAttack(time?: Time, velocity: NormalRange = 1): this {\n\t\tthis.log(\""triggerAttack\"", time, velocity);\n\t\ttime = this.toSeconds(time);\n\t\tconst originalAttack = this.toSeconds(this.attack);\n\t\tlet attack = originalAttack;\n\t\tconst decay = this.toSeconds(this.decay);\n\t\t// check if it's not a complete attack\n\t\tconst currentValue = this.getValueAtTime(time);\n\t\tif (currentValue > 0) {\n\t\t\t// subtract the current value from the attack time\n\t\t\tconst attackRate = 1 / attack;\n\t\t\tconst remainingDistance = 1 - currentValue;\n\t\t\t// the attack is now the remaining time\n\t\t\tattack = remainingDistance / attackRate;\n\t\t}\n\t\t// attack\n\t\tif (attack === 0) {\n\t\t\t// case where the attack time is 0 should set instantly\n\t\t\tthis._sig.setValueAtTime(velocity, time);\n\t\t} else if (this._attackCurve === \""linear\"") {\n\t\t\tthis._sig.linearRampTo(velocity, attack, time);\n\t\t} else if (this._attackCurve === \""exponential\"") {\n\t\t\tthis._sig.targetRampTo(velocity, attack, time);\n\t\t} else {\n\t\t\tthis._sig.cancelAndHoldAtTime(time);\n\t\t\tlet curve = this._attackCurve;\n\t\t\t// find the starting position in the curve\n\t\t\tfor (let i = 1; i < curve.length; i++) {\n\t\t\t\t// the starting index is between the two values\n\t\t\t\tif (curve[i - 1] <= currentValue && currentValue <= curve[i]) {\n\t\t\t\t\tcurve = this._attackCurve.slice(i);\n\t\t\t\t\t// the first index is the current value\n\t\t\t\t\tcurve[0] = currentValue;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._sig.setValueCurveAtTime(curve, time, attack, velocity);\n\t\t}\n\t\t// decay\n\t\tif (decay) {\n\t\t\tconst decayValue = velocity * this.sustain;\n\t\t\tconst decayStart = time + attack;\n\t\t\tthis.log(\""decay\"", decayStart);\n\t\t\tif (this._decayCurve === \""linear\"") {\n\t\t\t\tthis._sig.linearRampTo(decayValue, decay, decayStart + this.sampleTime);\n\t\t\t} else {\n\t\t\t\tthis.assert(this._decayCurve === \""exponential\"",\n\t\t\t\t\t`decayCurve can only be \""linear\"" or \""exponential\"", got ${this._decayCurve}`);\n\t\t\t\tthis._sig.exponentialApproachValueAtTime(decayValue, decayStart, decay);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Triggers the release of the envelope.\n\t *  @param  time When the release portion of the envelope should start.\n\t *  @example\n\t *  //trigger release immediately\n\t *  env.triggerRelease();\n\t */\n\ttriggerRelease(time?: Time): this {\n\t\tthis.log(\""triggerRelease\"", time);\n\t\ttime = this.toSeconds(time);\n\t\tconst currentValue = this.getValueAtTime(time);\n\t\tif (currentValue > 0) {\n\t\t\tconst release = this.toSeconds(this.release);\n\t\t\tif (this._releaseCurve === \""linear\"") {\n\t\t\t\tthis._sig.linearRampTo(0, release, time);\n\t\t\t} else if (this._releaseCurve === \""exponential\"") {\n\t\t\t\tthis._sig.targetRampTo(0, release, time);\n\t\t\t} else {\n\t\t\t\tthis.assert(isArray(this._releaseCurve), \""releaseCurve must be either 'linear', 'exponential' or an array\"");\n\t\t\t\tthis._sig.cancelAndHoldAtTime(time);\n\t\t\t\tthis._sig.setValueCurveAtTime(this._releaseCurve, time, release, currentValue);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Get the scheduled value at the given time. This will\n\t *  return the unconverted (raw) value.\n\t */\n\tgetValueAtTime(time: Time): NormalRange {\n\t\treturn this._sig.getValueAtTime(time);\n\t}\n\n\t/**\n\t *  triggerAttackRelease is shorthand for triggerAttack, then waiting\n\t *  some duration, then triggerRelease.\n\t *  @param duration The duration of the sustain.\n\t *  @param time When the attack should be triggered.\n\t *  @param velocity The velocity of the envelope.\n\t *  @example\n\t * //trigger the attack and then the release after 0.6 seconds.\n\t * env.triggerAttackRelease(0.6);\n\t */\n\ttriggerAttackRelease(duration: Time, time?: Time, velocity: NormalRange = 1): this {\n\t\ttime = this.toSeconds(time);\n\t\tthis.triggerAttack(time, velocity);\n\t\tthis.triggerRelease(time + this.toSeconds(duration));\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Cancels all scheduled envelope changes after the given time.\n\t */\n\tcancel(after?: Time): this {\n\t\tthis._sig.cancelScheduledValues(this.toSeconds(after));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Connect the envelope to a destination node.\n\t */\n\tconnect(destination: InputNode, outputNumber: number = 0, inputNumber: number = 0): this {\n\t\tconnectSignal(this, destination, outputNumber, inputNumber);\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._sig.dispose();\n\t\treturn this;\n\t}\n}\n\ninterface EnvelopeCurveObject {\n\tIn: number[];\n\tOut: number[];\n}\n\ntype EnvelopeDirection = keyof EnvelopeCurveObject;\n\ninterface EnvelopeCurveMap {\n\tlinear: \""linear\"";\n\texponential: \""exponential\"";\n\tbounce: EnvelopeCurveObject;\n\tcosine: EnvelopeCurveObject;\n\tsine: EnvelopeCurveObject;\n\tripple: EnvelopeCurveObject;\n\tstep: EnvelopeCurveObject;\n}\n\ntype EnvelopeCurveName =  keyof EnvelopeCurveMap;\n\n/**\n *  Generate some complex envelope curves.\n */\n// tslint:disable-next-line: variable-name\nconst EnvelopeCurves: EnvelopeCurveMap = (() => {\n\n\tconst curveLen = 128;\n\n\tlet i: number;\n\tlet k: number;\n\n\t// cosine curve\n\tconst cosineCurve: number[] = [];\n\tfor (i = 0; i < curveLen; i++) {\n\t\tcosineCurve[i] = Math.sin((i / (curveLen - 1)) * (Math.PI / 2));\n\t}\n\n\t// ripple curve\n\tconst rippleCurve: number[] = [];\n\tconst rippleCurveFreq = 6.4;\n\tfor (i = 0; i < curveLen - 1; i++) {\n\t\tk = (i / (curveLen - 1));\n\t\tconst sineWave = Math.sin(k * (Math.PI * 2) * rippleCurveFreq - Math.PI / 2) + 1;\n\t\trippleCurve[i] = sineWave / 10 + k * 0.83;\n\t}\n\trippleCurve[curveLen - 1] = 1;\n\n\t// stairs curve\n\tconst stairsCurve: number[] = [];\n\tconst steps = 5;\n\tfor (i = 0; i < curveLen; i++) {\n\t\tstairsCurve[i] = Math.ceil((i / (curveLen - 1)) * steps) / steps;\n\t}\n\n\t// in-out easing curve\n\tconst sineCurve: number[] = [];\n\tfor (i = 0; i < curveLen; i++) {\n\t\tk = i / (curveLen - 1);\n\t\tsineCurve[i] = 0.5 * (1 - Math.cos(Math.PI * k));\n\t}\n\n\t// a bounce curve\n\tconst bounceCurve: number[] = [];\n\tfor (i = 0; i < curveLen; i++) {\n\t\tk = i / (curveLen - 1);\n\t\tconst freq = Math.pow(k, 3) * 4 + 0.2;\n\t\tconst val = Math.cos(freq * Math.PI * 2 * k);\n\t\tbounceCurve[i] = Math.abs(val * (1 - k));\n\t}\n\n\t/**\n\t *  Invert a value curve to make it work for the release\n\t */\n\tfunction invertCurve(curve: number[]): number[] {\n\t\tconst out = new Array(curve.length);\n\t\tfor (let j = 0; j < curve.length; j++) {\n\t\t\tout[j] = 1 - curve[j];\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t *  reverse the curve\n\t */\n\tfunction reverseCurve(curve: number[]): number[] {\n\t\treturn curve.slice(0).reverse();\n\t}\n\n\t/**\n\t *  attack and release curve arrays\n\t */\n\treturn {\n\t\tbounce : {\n\t\t\tIn : invertCurve(bounceCurve),\n\t\t\tOut : bounceCurve,\n\t\t},\n\t\tcosine : {\n\t\t\tIn : cosineCurve,\n\t\t\tOut : reverseCurve(cosineCurve),\n\t\t},\n\t\texponential : \""exponential\"" as \""exponential\"",\n\t\tlinear : \""linear\"" as \""linear\"",\n\t\tripple : {\n\t\t\tIn : rippleCurve,\n\t\t\tOut : invertCurve(rippleCurve),\n\t\t},\n\t\tsine : {\n\t\t\tIn : sineCurve,\n\t\t\tOut : invertCurve(sineCurve),\n\t\t},\n\t\tstep : {\n\t\t\tIn : stairsCurve,\n\t\t\tOut : invertCurve(stairsCurve),\n\t\t},\n\t};\n})();\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { NormalRange, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { Envelope, EnvelopeOptions } from \""./Envelope\"";\n\n/**\n * AmplitudeEnvelope is a Tone.Envelope connected to a gain node.\n * Unlike Tone.Envelope, which outputs the envelope's value, AmplitudeEnvelope accepts\n * an audio signal as the input and will apply the envelope to the amplitude\n * of the signal.\n * Read more about ADSR Envelopes on [Wikipedia](https://en.wikipedia.org/wiki/Synthesizer#ADSR_envelope).\n *\n * @param attack The amount of time it takes for the envelope to go from 0 to it's maximum value.\n * @param decay\tThe period of time after the attack that it takes for the envelope\n *                       \tto fall to the sustain value. Value must be greater than 0.\n * @param sustain\tThe percent of the maximum value that the envelope rests at until\n *                                \tthe release is triggered.\n * @param release\tThe amount of time after the release is triggered it takes to reach 0.\n *                         \tValue must be greater than 0.\n *  @example\n * var ampEnv = new AmplitudeEnvelope({\n * \t\""attack\"": 0.1,\n * \t\""decay\"": 0.2,\n * \t\""sustain\"": 1.0,\n * \t\""release\"": 0.8\n * }).toDestination();\n * //create an oscillator and connect it\n * var osc = new Tone.Oscillator().connect(ampEnv).start();\n * //trigger the envelopes attack and release \""8t\"" apart\n * ampEnv.triggerAttackRelease(\""8t\"");\n */\nexport class AmplitudeEnvelope extends Envelope {\n\n\tname = \""AmplitudeEnvelope\"";\n\n\tprivate _gainNode: Gain = new Gain({\n\t\tcontext: this.context,\n\t\tgain: 0,\n\t});\n\toutput: Gain = this._gainNode;\n\tinput: Gain = this._gainNode;\n\n\tconstructor(attack?: Time, decay?: Time, sustain?: NormalRange, release?: Time);\n\tconstructor(options?: Partial<EnvelopeOptions>)\n\tconstructor() {\n\t\tsuper(optionsFromArguments(AmplitudeEnvelope.getDefaults(), arguments, [\""attack\"", \""decay\"", \""sustain\"", \""release\""]));\n\t\tthis._sig.connect(this._gainNode.gain);\n\t\tthis.output = this._gainNode;\n\t\tthis.input = this._gainNode;\n\t}\n\n\t/**\n\t * Clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._gainNode.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Volume } from \""../component/channel/Volume\"";\nimport { Param } from \""../core/context/Param\"";\nimport { OutputNode, ToneAudioNode, ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { Decibels, Frequency, NormalRange, Time } from \""../core/type/Units\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { readOnly } from \""../core/util/Interface\"";\n\nexport interface InstrumentOptions extends ToneAudioNodeOptions {\n\tvolume: Decibels;\n}\n\n/**\n *  Base-class for all instruments\n */\nexport abstract class Instrument<Options extends InstrumentOptions> extends ToneAudioNode<Options> {\n\n\t/**\n\t *  The output and volume triming node\n\t */\n\tprivate _volume: Volume;\n\toutput: OutputNode;\n\n\t/**\n\t * The instrument only has an output\n\t */\n\tinput: undefined;\n\n\t/**\n\t * The volume of the output in decibels.\n\t * @example\n\t * source.volume.value = -6;\n\t */\n\tvolume: Param<Decibels>;\n\n\t/**\n\t * Keep track of all events scheduled to the transport\n\t * when the instrument is 'synced'\n\t */\n\tprivate _scheduledEvents: number[] = [];\n\n\t/**\n\t * If the instrument is currently synced\n\t */\n\tprivate _synced: boolean = false;\n\n\tconstructor(options?: Partial<InstrumentOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Instrument.getDefaults(), arguments));\n\t\tconst options = optionsFromArguments(Instrument.getDefaults(), arguments);\n\n\t\tthis._volume = this.output = new Volume({\n\t\t\tcontext: this.context,\n\t\t\tvolume: options.volume,\n\t\t});\n\t\tthis.volume = this._volume.volume;\n\t\treadOnly(this, \""volume\"");\n\t}\n\n\tstatic getDefaults(): InstrumentOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tvolume: 0,\n\t\t});\n\t}\n\n\t/**\n\t * Sync the instrument to the Transport. All subsequent calls of\n\t * [triggerAttack](#triggerattack) and [triggerRelease](#triggerrelease)\n\t * will be scheduled along the transport.\n\t * @example\n\t * instrument.sync()\n\t * //schedule 3 notes when the transport first starts\n\t * instrument.triggerAttackRelease('C4', '8n', 0)\n\t * instrument.triggerAttackRelease('E4', '8n', '8n')\n\t * instrument.triggerAttackRelease('G4', '8n', '4n')\n\t * //start the transport to hear the notes\n\t * Transport.start()\n\t * @returns {Instrument} this\n\t */\n\tsync(): this {\n\t\tif (!this._synced) {\n\t\t\tthis._synced = true;\n\t\t\tthis._syncMethod(\""triggerAttack\"", 1);\n\t\t\tthis._syncMethod(\""triggerRelease\"", 0);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Wrap the given method so that it can be synchronized\n\t * @param method Which method to wrap and sync\n\t * @param  timePosition What position the time argument appears in\n\t */\n\tprotected _syncMethod(method: string, timePosition: number): void {\n\t\tconst originalMethod = this[\""_original_\"" + method] = this[method];\n\t\tthis[method] = (...args: any[]) => {\n\t\t\tconst time = args[timePosition];\n\t\t\tconst id = this.context.transport.schedule((t) => {\n\t\t\t\targs[timePosition] = t;\n\t\t\t\toriginalMethod.apply(this, args);\n\t\t\t}, time);\n\t\t\tthis._scheduledEvents.push(id);\n\t\t};\n\t}\n\n\t/**\n\t * Unsync the instrument from the Transport\n\t */\n\tunsync(): this {\n\t\tthis._scheduledEvents.forEach(id => this.context.transport.clear(id));\n\t\tthis._scheduledEvents = [];\n\t\tif (this._synced) {\n\t\t\tthis._synced = false;\n\t\t\tthis.triggerAttack = this._original_triggerAttack;\n\t\t\tthis.triggerRelease = this._original_triggerRelease;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Trigger the attack and then the release after the duration.\n\t *  @param  note     The note to trigger.\n\t *  @param  duration How long the note should be held for before\n\t *                          triggering the release. This value must be greater than 0.\n\t *  @param time  When the note should be triggered.\n\t *  @param  velocity The velocity the note should be triggered at.\n\t *  @example\n\t * //trigger \""C4\"" for the duration of an 8th note\n\t * synth.triggerAttackRelease(\""C4\"", \""8n\"");\n\t */\n\ttriggerAttackRelease(note: Frequency, duration: Time, time?: Time, velocity?: NormalRange): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tconst computedDuration = this.toSeconds(duration);\n\t\tthis.triggerAttack(note, computedTime, velocity);\n\t\tthis.triggerRelease(computedTime + computedDuration);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Start the instrument's note.\n\t * @param note the note to trigger\n\t * @param time the time to trigger the ntoe\n\t * @param velocity the velocity to trigger the note (betwee 0-1)\n\t */\n\tabstract triggerAttack(note: Frequency, time?: Time, velocity?: NormalRange): this;\n\t// tslint:disable-next-line: variable-name\n\tprivate _original_triggerAttack = this.triggerAttack;\n\n\t/**\n\t * Trigger the release phase of the current note.\n\t *  @param time when to trigger the release\n\t */\n\tabstract triggerRelease(...args: any[]): this;\n\t// tslint:disable-next-line: variable-name\n\tprivate _original_triggerRelease = this.triggerRelease;\n\n\t/**\n\t *  clean up\n\t *  @returns {Instrument} this\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._volume.dispose();\n\t\tthis.unsync();\n\t\tthis._scheduledEvents = [];\n\t\treturn this;\n\t}\n}\n"",""import { Envelope } from \""../component/envelope/Envelope\"";\nimport { FrequencyClass } from \""../core/type/Frequency\"";\nimport { Cents, Frequency, NormalRange, Seconds, Time } from \""../core/type/Units\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { noOp } from \""../core/util/Interface\"";\nimport { Instrument, InstrumentOptions } from \""../instrument/Instrument\"";\nimport { Signal } from \""../signal/Signal\"";\n\ntype onSilenceCallback = (instrument: Monophonic<any>) => void;\n\nexport interface MonophonicOptions extends InstrumentOptions {\n\tportamento: Seconds;\n\tonsilence: onSilenceCallback;\n}\n\n/**\n * Abstract base class for other monophonic instruments to extend.\n */\nexport abstract class Monophonic<Options extends MonophonicOptions> extends Instrument<Options> {\n\n\t/**\n\t *  The glide time between notes.\n\t */\n\tportamento: Seconds;\n\n\t/**\n\t * Invoked when the release has finished and the output is silent.\n\t */\n\tonsilence: onSilenceCallback;\n\n\t/**\n\t * The instrument's envelope\n\t */\n\tabstract envelope: Envelope;\n\n\t/**\n\t * The instrument's frequency signal.\n\t */\n\tabstract readonly frequency: Signal<Frequency>;\n\n\t/**\n\t * The instrument's detune control signal.\n\t */\n\tabstract readonly detune: Signal<Cents>;\n\n\tconstructor(options?: Partial<MonophonicOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Monophonic.getDefaults(), arguments));\n\t\tconst options = optionsFromArguments(Monophonic.getDefaults(), arguments);\n\n\t\tthis.portamento = options.portamento;\n\t\tthis.onsilence = options.onsilence;\n\t}\n\n\tstatic getDefaults(): MonophonicOptions {\n\t\treturn Object.assign(Instrument.getDefaults(), {\n\t\t\tonsilence: noOp,\n\t\t\tportamento: 0,\n\t\t});\n\t}\n\n\t/**\n\t * Trigger the attack of the note optionally with a given velocity.\n\t * @param  note The note to trigger.\n\t * @param  time When the note should start.\n\t * @param  velocity The velocity scaler determines how \""loud\"" the note will be triggered.\n\t * @example\n\t * synth.triggerAttack(\""C4\"");\n\t * @example\n\t * //trigger the note a half second from now at half velocity\n\t * synth.triggerAttack(\""C4\"", \""+0.5\"", 0.5);\n\t */\n\ttriggerAttack(note: Frequency | FrequencyClass, time?: Time, velocity: NormalRange = 1): this {\n\t\tthis.log(\""triggerAttack\"", note, time, velocity);\n\t\tconst seconds = this.toSeconds(time);\n\t\tthis._triggerEnvelopeAttack(seconds, velocity);\n\t\tthis.setNote(note, seconds);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Trigger the release portion of the envelope\n\t * @param  time If no time is given, the release happens immediatly\n\t * @example\n\t * synth.triggerRelease();\n\t */\n\ttriggerRelease(time?: Time): this {\n\t\tthis.log(\""triggerRelease\"", time);\n\t\tconst seconds = this.toSeconds(time);\n\t\tthis._triggerEnvelopeRelease(seconds);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Internal method which starts the envelope attack\n\t */\n\tprotected abstract _triggerEnvelopeAttack(time: Seconds, velocity: NormalRange): void;\n\n\t/**\n\t * Internal method which starts the envelope release\n\t */\n\tprotected abstract _triggerEnvelopeRelease(time: Seconds): void;\n\n\t/**\n\t * Get the level of the output at the given time. Measures\n\t * the envelope(s) value at the time.\n\t * @param time The time to query the envelope value\n\t * @return The output level between 0-1\n\t */\n\tgetLevelAtTime(time: Time): NormalRange {\n\t\ttime = this.toSeconds(time);\n\t\treturn this.envelope.getValueAtTime(time);\n\t}\n\n\t/**\n\t * Set the note at the given time. If no time is given, the note\n\t * will set immediately.\n\t * @param note The note to change to.\n\t * @param  time The time when the note should be set.\n\t * @example\n\t * //change to F#6 in one quarter note from now.\n\t * synth.setNote(\""F#6\"", \""+4n\"");\n\t * @example\n\t * //change to Bb4 right now\n\t * synth.setNote(\""Bb4\"");\n\t */\n\tsetNote(note: Frequency | FrequencyClass, time?: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tconst computedFrequency = note instanceof FrequencyClass ? note.toFrequency() : note;\n\t\tif (this.portamento > 0 && this.getLevelAtTime(computedTime) > 0.05) {\n\t\t\tconst portTime = this.toSeconds(this.portamento);\n\t\t\tthis.frequency.exponentialRampTo(computedFrequency, portTime, computedTime);\n\t\t} else {\n\t\t\tthis.frequency.setValueAtTime(computedFrequency, computedTime);\n\t\t}\n\t\treturn this;\n\t}\n}\n"",""import { AmplitudeEnvelope } from \""../component/envelope/AmplitudeEnvelope\"";\nimport { Envelope, EnvelopeOptions } from \""../component/envelope/Envelope\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { Cents, Frequency, Seconds } from \""../core/type/Units\"";\nimport { omitFromObject, optionsFromArguments } from \""../core/util/Defaults\"";\nimport { readOnly } from \""../core/util/Interface\"";\nimport { RecursivePartial } from \""../core/util/Interface\"";\nimport { Signal } from \""../signal/Signal\"";\nimport { OmniOscillator } from \""../source/oscillator/OmniOscillator\"";\nimport { OmniOscillatorConstructorOptions, OmniOscillatorSynthOptions } from \""../source/oscillator/OscillatorInterface\"";\nimport { Source, SourceOptions } from \""../source/Source\"";\nimport { Monophonic, MonophonicOptions } from \""./Monophonic\"";\n\nexport interface SynthOptions extends MonophonicOptions {\n\toscillator: OmniOscillatorSynthOptions;\n\tenvelope: Omit<EnvelopeOptions, keyof ToneAudioNodeOptions>;\n}\n\n/**\n * Synth is composed simply of a {@link OmniOscillator} routed through an {@link AmplitudeEnvelope}.\n * ```\n * +----------------+   +-------------------+\n * | OmniOscillator +>--> AmplitudeEnvelope +>--> Output\n * +----------------+   +-------------------+\n * ```\n * @param options the options available for the synth.\n * @example\n * var synth = new Synth().toDestination();\n * synth.triggerAttackRelease(\""C4\"", \""8n\"");\n */\nexport class Synth<Options extends SynthOptions = SynthOptions> extends Monophonic<Options> {\n\n\treadonly name: string = \""Synth\"";\n\n\t/**\n\t *  The oscillator.\n\t */\n\treadonly oscillator: OmniOscillator<any>;\n\n\t/**\n\t * The frequency signal\n\t */\n\treadonly frequency: Signal<Frequency>;\n\n\t/**\n\t * The detune signal\n\t */\n\treadonly detune: Signal<Cents>;\n\n\t/**\n\t * The envelope\n\t */\n\treadonly envelope: AmplitudeEnvelope;\n\n\tconstructor(options?: RecursivePartial<SynthOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(Synth.getDefaults(), arguments));\n\t\tconst options = optionsFromArguments(Synth.getDefaults(), arguments);\n\n\t\tthis.oscillator = new OmniOscillator(Object.assign({\n\t\t\tcontext: this.context,\n\t\t\tonstop: () => this.onsilence(this),\n\t\t}, options.oscillator));\n\n\t\tthis.frequency = this.oscillator.frequency;\n\t\tthis.detune = this.oscillator.detune;\n\n\t\tthis.envelope = new AmplitudeEnvelope(Object.assign({\n\t\t\tcontext: this.context,\n\t\t}, options.envelope));\n\n\t\t// connect the oscillators to the output\n\t\tthis.oscillator.chain(this.envelope, this.output);\n\t\treadOnly(this, [\""oscillator\"", \""frequency\"", \""detune\"", \""envelope\""]);\n\t}\n\n\tstatic getDefaults(): SynthOptions {\n\t\treturn Object.assign(Monophonic.getDefaults(), {\n\t\t\tenvelope: Object.assign(\n\t\t\t\tomitFromObject(Envelope.getDefaults(), Object.keys(ToneAudioNode.getDefaults())),\n\t\t\t\t{\n\t\t\t\t\tattack : 0.005,\n\t\t\t\t\tdecay : 0.1,\n\t\t\t\t\trelease : 1,\n\t\t\t\t\tsustain : 0.3,\n\t\t\t\t},\n\t\t\t),\n\t\t\toscillator: Object.assign(\n\t\t\t\tomitFromObject(OmniOscillator.getDefaults(), [...Object.keys(Source.getDefaults()), \""frequency\"", \""detune\""]),\n\t\t\t\t{\n\t\t\t\t\ttype: \""triangle\"",\n\t\t\t\t},\n\t\t\t),\n\t\t});\n\t}\n\n\t/**\n\t *  start the attack portion of the envelope\n\t *  @param time the time the attack should start\n\t *  @param velocity the velocity of the note (0-1)\n\t */\n\tprotected _triggerEnvelopeAttack(time: Seconds, velocity: number): void {\n\t\t// the envelopes\n\t\tthis.envelope.triggerAttack(time, velocity);\n\t\tthis.oscillator.start(time);\n\t\t// if there is no release portion, stop the oscillator\n\t\tif (this.envelope.sustain === 0) {\n\t\t\tconst computedAttack = this.toSeconds(this.envelope.attack);\n\t\t\tconst computedDecay = this.toSeconds(this.envelope.decay);\n\t\t\tthis.oscillator.stop(time + computedAttack + computedDecay);\n\t\t}\n\t}\n\n\t/**\n\t *  start the release portion of the envelope\n\t *  @param time the time the release should start\n\t */\n\tprotected _triggerEnvelopeRelease(time: Seconds): void {\n\t\tthis.envelope.triggerRelease(time);\n\t\tthis.oscillator.stop(time + this.toSeconds(this.envelope.release));\n\t}\n\n\t/**\n\t *  clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.oscillator.dispose();\n\t\tthis.envelope.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioBuffer } from \""../core/context/ToneAudioBuffer\"";\nimport { ToneAudioBuffers } from \""../core/context/ToneAudioBuffers\"";\nimport { intervalToFrequencyRatio } from \""../core/type/Conversions\"";\nimport { FrequencyClass } from \""../core/type/Frequency\"";\nimport { Frequency, Interval, MidiNote, NormalRange, Note, Time } from \""../core/type/Units\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { noOp } from \""../core/util/Interface\"";\nimport { isArray, isNote, isNumber, isString } from \""../core/util/TypeCheck\"";\nimport { Instrument, InstrumentOptions } from \""../instrument/Instrument\"";\nimport { ToneBufferSource, ToneBufferSourceCurve } from \""../source/buffer/BufferSource\"";\n\ninterface SamplesMap {\n\t[note: string]: ToneAudioBuffer | AudioBuffer | string;\n\t[midi: number]: ToneAudioBuffer | AudioBuffer | string;\n}\n\ninterface SamplerOptions extends InstrumentOptions {\n\tattack: Time;\n\trelease: Time;\n\tonload: () => void;\n\tbaseUrl: string;\n\tcurve: ToneBufferSourceCurve;\n\turls: SamplesMap;\n}\n\n/**\n * Pass in an object which maps the note's pitch or midi value to the url,\n * then you can trigger the attack and release of that note like other instruments.\n * By automatically repitching the samples, it is possible to play pitches which\n * were not explicitly included which can save loading time.\n *\n * For sample or buffer playback where repitching is not necessary,\n * use {@link Player}.\n * @param samples An object of samples mapping either Midi\n *                         Note Numbers or Scientific Pitch Notation\n *                         to the url of that sample.\n * @param onload The callback to invoke when all of the samples are loaded.\n * @param baseUrl The root URL of all of the samples, which is prepended to all the URLs.\n * @example\n * var sampler = new Sampler({\n * \t\""C3\"" : \""path/to/C3.mp3\"",\n * \t\""D#3\"" : \""path/to/Dsharp3.mp3\"",\n * \t\""F#3\"" : \""path/to/Fsharp3.mp3\"",\n * \t\""A3\"" : \""path/to/A3.mp3\"",\n * }, function(){\n * \t//sampler will repitch the closest sample\n * \tsampler.triggerAttack(\""D3\"")\n * })\n */\nexport class Sampler extends Instrument<SamplerOptions> {\n\n\tname = \""Sampler\"";\n\n\t/**\n\t * The stored and loaded buffers\n\t * @type {Tone.Buffers}\n\t * @private\n\t */\n\tprivate _buffers: ToneAudioBuffers;\n\n\t/**\n\t * The object of all currently playing BufferSources\n\t */\n\tprivate _activeSources: Map<MidiNote, ToneBufferSource[]> = new Map();\n\n\t/**\n\t * The envelope applied to the beginning of the sample.\n\t */\n\tattack: Time;\n\n\t/**\n\t * The envelope applied to the end of the envelope.\n\t */\n\trelease: Time;\n\n\t/**\n\t *  The shape of the attack/release curve.\n\t *  Either \""linear\"" or \""exponential\""\n\t */\n\tcurve: ToneBufferSourceCurve;\n\n\tconstructor(options?: Partial<SamplerOptions>);\n\tconstructor(samples?: SamplesMap, options?: Partial<Omit<SamplerOptions, \""urls\"">>);\n\tconstructor(samples?: SamplesMap, onload?: () => void, baseUrl?: string);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Sampler.getDefaults(), arguments, [\""urls\"", \""onload\"", \""baseUrl\""], \""urls\""));\n\t\tconst options = optionsFromArguments(Sampler.getDefaults(), arguments, [\""urls\"", \""onload\"", \""baseUrl\""], \""urls\"");\n\n\t\tconst urlMap = {};\n\t\tObject.keys(options.urls).forEach((note) => {\n\t\t\tconst noteNumber = parseInt(note, 10);\n\t\t\tthis.assert(isNote(note)\n\t\t\t\t|| (isNumber(noteNumber) && isFinite(noteNumber)), `url key is neither a note or midi pitch: ${note}`);\n\t\t\tif (isNote(note)) {\n\t\t\t\t// convert the note name to MIDI\n\t\t\t\tconst mid = new FrequencyClass(this.context, note).toMidi();\n\t\t\t\turlMap[mid] = options.urls[note];\n\t\t\t} else if (isNumber(noteNumber) && isFinite(noteNumber)) {\n\t\t\t\t// otherwise if it's numbers assume it's midi\n\t\t\t\turlMap[noteNumber] = options.urls[noteNumber];\n\t\t\t}\n\t\t});\n\n\t\tthis._buffers = new ToneAudioBuffers(urlMap, options.onload, options.baseUrl);\n\t\tthis.attack = options.attack;\n\t\tthis.release = options.release;\n\t\tthis.curve = options.curve;\n\t}\n\n\tstatic getDefaults(): SamplerOptions {\n\t\treturn Object.assign(Instrument.getDefaults(), {\n\t\t\tattack : 0,\n\t\t\tbaseUrl : \""\"",\n\t\t\tcurve : \""exponential\"" as \""exponential\"",\n\t\t\tonload : noOp,\n\t\t\trelease : 0.1,\n\t\t\turls: {},\n\t\t});\n\t}\n\n\t/**\n\t * Returns the difference in steps between the given midi note at the closets sample.\n\t */\n\tprivate _findClosest(midi: MidiNote): Interval {\n\t\t// searches within 8 octaves of the given midi note\n\t\tconst MAX_INTERVAL = 96;\n\t\tlet interval = 0;\n\t\twhile (interval < MAX_INTERVAL) {\n\t\t\t// check above and below\n\t\t\tif (this._buffers.has(midi + interval)) {\n\t\t\t\treturn -interval;\n\t\t\t} else if (this._buffers.has(midi - interval)) {\n\t\t\t\treturn interval;\n\t\t\t}\n\t\t\tinterval++;\n\t\t}\n\t\tthrow new Error(`No available buffers for note: ${midi}`);\n\t}\n\n\t/**\n\t * @param  notes\tThe note to play, or an array of notes.\n\t * @param  time     When to play the note\n\t * @param  velocity The velocity to play the sample back.\n\t */\n\ttriggerAttack(notes: Frequency | Frequency[], time?: Time, velocity: NormalRange = 1): this {\n\t\tthis.log(\""triggerAttack\"", notes, time, velocity);\n\t\tif (!Array.isArray(notes)) {\n\t\t\tnotes = [notes];\n\t\t}\n\t\tnotes.forEach(note => {\n\t\t\tconst midi = new FrequencyClass(this.context, note).toMidi();\n\t\t\t// find the closest note pitch\n\t\t\tconst difference = this._findClosest(midi);\n\t\t\tconst closestNote = midi - difference;\n\t\t\tconst buffer = this._buffers.get(closestNote);\n\t\t\tconst playbackRate = intervalToFrequencyRatio(difference);\n\t\t\t// play that note\n\t\t\tconst source = new ToneBufferSource({\n\t\t\t\tbuffer,\n\t\t\t\tcontext: this.context,\n\t\t\t\tcurve : this.curve,\n\t\t\t\tfadeIn : this.attack,\n\t\t\t\tfadeOut : this.release,\n\t\t\t\tplaybackRate,\n\t\t\t}).connect(this.output);\n\t\t\tsource.start(time, 0, buffer.duration / playbackRate, velocity);\n\t\t\t// add it to the active sources\n\t\t\tif (!isArray(this._activeSources.get(midi))) {\n\t\t\t\tthis._activeSources.set(midi, []);\n\t\t\t}\n\t\t\t(this._activeSources.get(midi) as ToneBufferSource[]).push(source);\n\n\t\t\t// remove it when it's done\n\t\t\tsource.onended = () => {\n\t\t\t\tif (this._activeSources && this._activeSources.has(midi)) {\n\t\t\t\t\tconst sources = this._activeSources.get(midi) as ToneBufferSource[];\n\t\t\t\t\tconst index = sources.indexOf(source);\n\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\tsources.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t * @param  notes\tThe note to release, or an array of notes.\n\t * @param  time     \tWhen to release the note.\n\t */\n\ttriggerRelease(notes: Frequency | Frequency[], time?: Time): this {\n\t\tthis.log(\""triggerRelease\"", notes, time);\n\t\tif (!Array.isArray(notes)) {\n\t\t\tnotes = [notes];\n\t\t}\n\t\tnotes.forEach(note => {\n\t\t\tconst midi = new FrequencyClass(this.context, note).toMidi();\n\t\t\t// find the note\n\t\t\tif (this._activeSources.has(midi) && (this._activeSources.get(midi) as ToneBufferSource[]).length) {\n\t\t\t\tconst sources = this._activeSources.get(midi) as ToneBufferSource[];\n\t\t\t\ttime = this.toSeconds(time);\n\t\t\t\tsources.forEach(source => {\n\t\t\t\t\tsource.stop(time);\n\t\t\t\t});\n\t\t\t\tthis._activeSources.set(midi, []);\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t * Release all currently active notes.\n\t * @param  time     \tWhen to release the notes.\n\t */\n\treleaseAll(time?: Time): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis._activeSources.forEach(sources => {\n\t\t\twhile (sources.length) {\n\t\t\t\tconst source = sources.shift() as ToneBufferSource;\n\t\t\t\tsource.stop(computedTime);\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sync the instrument to the Transport. All subsequent calls of\n\t * [triggerAttack](#triggerattack) and [triggerRelease](#triggerrelease)\n\t * will be scheduled along the transport.\n\t * @example\n\t * synth.sync()\n\t * //schedule 3 notes when the transport first starts\n\t * synth.triggerAttackRelease('8n', 0)\n\t * synth.triggerAttackRelease('8n', '8n')\n\t * synth.triggerAttackRelease('8n', '4n')\n\t * //start the transport to hear the notes\n\t * Transport.start()\n\t * @returns {Tone.Instrument} this\n\t */\n\tsync(): this {\n\t\tthis._syncMethod(\""triggerAttack\"", 1);\n\t\tthis._syncMethod(\""triggerRelease\"", 1);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Invoke the attack phase, then after the duration, invoke the release.\n\t * @param  notes\tThe note to play and release, or an array of notes.\n\t * @param  duration The time the note should be held\n\t * @param  time     When to start the attack\n\t * @param  velocity The velocity of the attack\n\t */\n\ttriggerAttackRelease(\n\t\tnotes: Frequency[] | Frequency,\n\t\tduration: Time | Time[],\n\t\ttime?: Time,\n\t\tvelocity: NormalRange = 1,\n\t): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis.triggerAttack(notes, computedTime, velocity);\n\t\tif (isArray(duration)) {\n\t\t\tthis.assert(isArray(notes), \""notes must be an array when duration is array\"");\n\t\t\t(notes as Frequency[]).forEach((note, index) => {\n\t\t\t\tconst d = duration[Math.min(index, duration.length - 1)];\n\t\t\t\tthis.triggerRelease(note, computedTime + this.toSeconds(d));\n\t\t\t});\n\t\t} else {\n\t\t\tthis.triggerRelease(notes, computedTime + this.toSeconds(duration));\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add a note to the sampler.\n\t * @param  note      The buffer's pitch.\n\t * @param  url  Either the url of the bufer, or a buffer which will be added with the given name.\n\t * @param  callback  The callback to invoke when the url is loaded.\n\t */\n\tadd(note: Note | MidiNote, url: string | ToneAudioBuffer | AudioBuffer, callback?: () => void): this {\n\t\tthis.assert(isNote(note) || isFinite(note), `note must be a pitch or midi: ${note}`);\n\t\tif (isNote(note)) {\n\t\t\t// convert the note name to MIDI\n\t\t\tconst mid = new FrequencyClass(this.context, note).toMidi();\n\t\t\tthis._buffers.add(mid, url, callback);\n\t\t} else {\n\t\t\t// otherwise if it's numbers assume it's midi\n\t\t\tthis._buffers.add(note, url, callback);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * If the buffers are loaded or not\n\t */\n\tget loaded(): boolean {\n\t\treturn this._buffers.loaded;\n\t}\n\n\t/**\n\t * Clean up\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._buffers.dispose();\n\t\tthis._activeSources.forEach(sources => {\n\t\t\tsources.forEach(source => source.dispose());\n\t\t});\n\t\tthis._activeSources.clear();\n\t\treturn this;\n\t}\n}\n"",""import { MidiClass } from \""../core/type/Midi\"";\nimport { Frequency, MidiNote, NormalRange, Seconds, Time } from \""../core/type/Units\"";\nimport { deepMerge, optionsFromArguments } from \""../core/util/Defaults\"";\nimport { RecursivePartial } from \""../core/util/Interface\"";\nimport { isArray } from \""../core/util/TypeCheck\"";\nimport { Instrument, InstrumentOptions } from \""./Instrument\"";\nimport { MembraneSynth, MembraneSynthOptions } from \""./MembraneSynth\"";\nimport { Monophonic } from \""./Monophonic\"";\nimport { Synth, SynthOptions } from \""./Synth\"";\n\ntype VoiceConstructor<V> = {\n\tgetDefaults: () => VoiceOptions<V>,\n} & (new (...args: any[]) => V);\n\ntype OmitMonophonicOptions<T> = Omit<T, \""context\"" | \""onsilence\"">;\n\ntype VoiceOptions<T> =\n\tT extends MembraneSynth ? MembraneSynthOptions :\n\tT extends Synth ? SynthOptions :\n\tnever;\n\n/**\n * The settable synth options. excludes monophonic options.\n */\ntype PartialVoiceOptions<T> = RecursivePartial<\n\tOmitMonophonicOptions<\n\t\tVoiceOptions<T>\n\t>\n>;\n\ninterface PolySynthOptions<Voice> extends InstrumentOptions {\n\tpolyphony: number;\n\tvoice: VoiceConstructor<Voice>;\n\toptions: PartialVoiceOptions<Voice>;\n}\n\n/**\n * PolySynth handles voice creation and allocation for any\n * instruments passed in as the second paramter. PolySynth is\n * not a synthesizer by itself, it merely manages voices of\n * one of the other types of synths, allowing any of the\n * monophonic synthesizers to be polyphonic.\n *\n *  @param polyphony The maximum polyphony of the synth\n *  @param voice The constructor of the voices\n *  @param options\tThe options object to set the synth voice\n *  @example\n * //a polysynth composed of 6 Voices of Synth\n * var synth = new PolySynth(6, Tone.Synth, {\n *   oscillator : {\n * \t\ttype : \""square\""\n * \t}\n * }).toMaster();\n * //set the attributes using the set interface\n * synth.set(\""detune\"", -1200);\n * //play a chord\n * synth.triggerAttackRelease([\""C4\"", \""E4\"", \""A4\""], \""4n\"");\n */\nexport class PolySynth<Voice extends Monophonic<any> = Synth> extends Instrument<VoiceOptions<Voice>> {\n\n\treadonly name = \""PolySynth\"";\n\n\t/**\n\t * The voices which are not currently in use\n\t */\n\tprivate _availableVoices: Voice[] = [];\n\n\t/**\n\t * The currently active voices\n\t */\n\tprivate _activeVoices: Array<{midi: MidiNote, voice: Voice}> = [];\n\n\t/**\n\t * All of the allocated voices for this synth.\n\t */\n\tprivate _voices: Voice[] = [];\n\n\t/**\n\t * The options that are set on the synth.\n\t */\n\tprivate options: VoiceOptions<Voice>;\n\n\t/**\n\t * The polyphony limit.\n\t */\n\tpolyphony: number;\n\n\tprivate readonly voice: VoiceConstructor<Voice>;\n\n\tconstructor(\n\t\tpolyphony?: number,\n\t\tvoice?: VoiceConstructor<Voice>,\n\t\toptions?: PartialVoiceOptions<Voice>,\n\t);\n\tconstructor(options?: Partial<PolySynthOptions<Voice>>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(PolySynth.getDefaults(), arguments, [\""polyphony\"", \""voice\"", \""options\""]));\n\t\tconst options = optionsFromArguments(PolySynth.getDefaults(), arguments, [\""polyphony\"", \""voice\"", \""options\""]);\n\n\t\tconst defaults = options.voice.getDefaults();\n\t\tthis.options = Object.assign(defaults, options.options) as VoiceOptions<Voice>;\n\t\tthis.voice = options.voice as unknown as VoiceConstructor<Voice>;\n\t\tthis.polyphony = options.polyphony;\n\t}\n\n\tstatic getDefaults(): PolySynthOptions<Synth> {\n\t\treturn Object.assign(Instrument.getDefaults(), {\n\t\t\toptions: {},\n\t\t\tpolyphony: 4,\n\t\t\tvoice: Synth,\n\t\t});\n\t}\n\n\t/**\n\t * The number of active voices.\n\t */\n\tget activeVoices(): number {\n\t\treturn this._activeVoices.length;\n\t}\n\n\t/**\n\t * If there is a voice active on that note, return it\n\t */\n\tprivate _getActiveVoice(note: MidiNote): Voice | undefined {\n\t\tconst event = this._activeVoices.find(({midi}) => midi === note);\n\t\tif (event) {\n\t\t\treturn event.voice;\n\t\t}\n\t}\n\n\t/**\n\t * Invoked when the source is done making sound, so that it can be\n\t * readded to the pool of available voices\n\t */\n\tprivate _makeVoiceAvailable(voice: Voice): void {\n\t\tthis._availableVoices.push(voice);\n\t\t// remove the midi note from 'active voices'\n\t\tconst activeVoiceIndex = this._activeVoices.findIndex((e) => e.voice === voice);\n\t\tthis._activeVoices.splice(activeVoiceIndex, 1);\n\t}\n\n\t/**\n\t * Get an available voice from the pool of available voices.\n\t * If one is not available and the polyphony limit is reached,\n\t * steal a voice, otherwise return null.\n\t */\n\tprivate _getNextAvailableVoice(): Voice | undefined {\n\t\t// if there are available voices, return the first one\n\t\tif (this._availableVoices.length) {\n\t\t\treturn this._availableVoices.shift();\n\t\t} else if (this._voices.length < this.polyphony) {\n\t\t\t// otherwise if there is still more polyphony, make a new voice\n\t\t\tconst voice = new this.voice(Object.assign(this.options, {\n\t\t\t\tcontext: this.context,\n\t\t\t\tonsilence: this._makeVoiceAvailable.bind(this),\n\t\t\t}));\n\t\t\tvoice.connect(this.output);\n\t\t\tthis._voices.push(voice);\n\t\t\treturn voice;\n\t\t} else {\n\t\t\tconsole.warn(\""Max polyphony exceeded. Note dropped.\"");\n\t\t}\n\t}\n\n\t/**\n\t * Internal method which triggers the attack\n\t */\n\tprivate _triggerAttack(notes: Frequency[], time: Seconds, velocity?: NormalRange): void {\n\t\tnotes.forEach(note => {\n\t\t\tconst midiNote = new MidiClass(this.context, note).toMidi();\n\t\t\t// let voice: Voice | undefined;\n\t\t\t// if there's already a note at that voice, reuse it\n\t\t\tlet voice = this._getActiveVoice(midiNote);\n\t\t\t// if it has a note, and that note is still active\n\t\t\tif (voice && voice.getLevelAtTime(time) > 0) {\n\t\t\t\tconst activeVoiceIndex = this._activeVoices.findIndex((e) => e.voice === voice);\n\t\t\t\tthis._activeVoices.splice(activeVoiceIndex, 1);\n\t\t\t} else {\n\t\t\t\t// otherwise get the next available voice\n\t\t\t\tvoice = this._getNextAvailableVoice();\n\t\t\t}\n\t\t\tif (voice) {\n\t\t\t\tvoice.triggerAttack(note, time, velocity);\n\t\t\t\tthis._activeVoices.unshift({\n\t\t\t\t\tmidi: midiNote, voice,\n\t\t\t\t});\n\t\t\t\tthis.log(\""triggerAttack\"", note, time);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Internal method which triggers the release\n\t */\n\tprivate _triggerRelease(notes: Frequency[], time: Seconds): void {\n\t\tnotes.forEach(note => {\n\t\t\tconst midiNote = new MidiClass(this.context, note).toMidi();\n\t\t\tconst voice = this._getActiveVoice(midiNote);\n\t\t\tif (voice) {\n\t\t\t\t// trigger release on that note\n\t\t\t\tvoice.triggerRelease(time);\n\t\t\t\tthis.log(\""triggerRelease\"", note, time);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Schedule the attack/release events. If the time is in the future, then it should set a timeout\n\t * to wait for just-in-time scheduling\n\t */\n\tprivate _scheduleEvent(type: \""attack\"" | \""release\"", notes: Frequency[], time: Seconds, velocity?: NormalRange): void {\n\t\tthis.assert(!this.disposed, \""Synth was already disposed\"");\n\t\t// if the notes are greater than this amount of time in the future, they should be scheduled with setTimeout\n\t\tif (time <= this.now()) {\n\t\t\t// do it immediately\n\t\t\tif (type === \""attack\"") {\n\t\t\t\tthis._triggerAttack(notes, time, velocity);\n\t\t\t} else {\n\t\t\t\tthis._triggerRelease(notes, time);\n\t\t\t}\n\t\t} else {\n\t\t\t// schedule it to start in the future\n\t\t\tthis.context.setTimeout(() => {\n\t\t\t\tthis._scheduleEvent(type, notes, time, velocity);\n\t\t\t}, time - this.now());\n\t\t}\n\t}\n\n\t/**\n\t * Trigger the attack portion of the note\n\t * @param  notes The notes to play. Accepts a single Frequency or an array of frequencies.\n\t * @param  time  The start time of the note.\n\t * @param velocity The velocity of the note.\n\t * @example\n\t * //trigger a chord immediately with a velocity of 0.2\n\t * poly.triggerAttack([\""Ab3\"", \""C4\"", \""F5\""], undefined, 0.2);\n\t */\n\ttriggerAttack(notes: Frequency | Frequency[], time?: Time, velocity?: NormalRange): this {\n\n\t\tif (!Array.isArray(notes)) {\n\t\t\tnotes = [notes];\n\t\t}\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis._scheduleEvent(\""attack\"", notes, computedTime, velocity);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Trigger the release of the note. Unlike monophonic instruments,\n\t * a note (or array of notes) needs to be passed in as the first argument.\n\t * @param  notes The notes to play. Accepts a single Frequency or an array of frequencies.\n\t * @param  time  When the release will be triggered.\n\t * @example\n\t * poly.triggerRelease([\""Ab3\"", \""C4\"", \""F5\""], \""+2n\"");\n\t */\n\ttriggerRelease(notes: Frequency | Frequency[], time?: Time): this {\n\t\tif (!Array.isArray(notes)) {\n\t\t\tnotes = [notes];\n\t\t}\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis._scheduleEvent(\""release\"", notes, computedTime);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Trigger the attack and release after the specified duration\n\t * @param  notes The notes to play. Accepts a single  Frequency or an array of frequencies.\n\t * @param  duration the duration of the note\n\t * @param  time  if no time is given, defaults to now\n\t * @param  velocity the velocity of the attack (0-1)\n\t * @example\n\t * //trigger a chord for a duration of a half note\n\t * poly.triggerAttackRelease([\""Eb3\"", \""G4\"", \""C5\""], \""2n\"");\n\t * @example\n\t * //can pass in an array of durations as well\n\t * poly.triggerAttackRelease([\""Eb3\"", \""G4\"", \""C5\""], [\""2n\"", \""4n\"", \""4n\""]);\n\t */\n\ttriggerAttackRelease(\n\t\tnotes: Frequency | Frequency[],\n\t\tduration: Time | Time[],\n\t\ttime?: Time,\n\t\tvelocity?: NormalRange,\n\t): this {\n\t\tconst computedTime = this.toSeconds(time);\n\t\tthis.triggerAttack(notes, computedTime, velocity);\n\t\tif (isArray(duration)) {\n\t\t\tthis.assert(isArray(notes), \""If the duration is an array, the notes must also be an array\"");\n\t\t\tnotes = notes as Frequency[];\n\t\t\tfor (let i = 0; i < notes.length; i++) {\n\t\t\t\tconst d = duration[Math.min(i, duration.length - 1)];\n\t\t\t\tconst durationSeconds = this.toSeconds(d);\n\t\t\t\tthis.assert(durationSeconds > 0, \""The duration must be greater than 0\"");\n\t\t\t\tthis.triggerRelease(notes[i], computedTime + durationSeconds);\n\t\t\t}\n\t\t} else {\n\t\t\tconst durationSeconds = this.toSeconds(duration);\n\t\t\tthis.assert(durationSeconds > 0, \""The duration must be greater than 0\"");\n\t\t\tthis.triggerRelease(notes, computedTime + durationSeconds);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sync the instrument to the Transport. All subsequent calls of\n\t * {@link triggerAttack} and {@link triggerRelease} will be scheduled along the transport.\n\t * @example\n\t * synth.sync()\n\t * //schedule 3 notes when the transport first starts\n\t * synth.triggerAttackRelease('8n', 0)\n\t * synth.triggerAttackRelease('8n', '8n')\n\t * synth.triggerAttackRelease('8n', '4n')\n\t * //start the transport to hear the notes\n\t * Transport.start()\n\t */\n\tsync(): this {\n\t\tthis._syncMethod(\""triggerAttack\"", 1);\n\t\tthis._syncMethod(\""triggerRelease\"", 1);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set a member/attribute of the voices\n\t * @example\n\t * poly.set({\n\t * \t\""filter\"" : {\n\t * \t\t\""type\"" : \""highpass\""\n\t * \t},\n\t * \t\""envelope\"" : {\n\t * \t\t\""attack\"" : 0.25\n\t * \t}\n\t * });\n\t */\n\tset(options: RecursivePartial<VoiceOptions<Voice>>): this {\n\t\tthis.options = deepMerge(this.options, options);\n\t\tthis._voices.forEach(voice => voice.set(this.options));\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Get the synth's attributes.\n\t */\n\tget(): VoiceOptions<Voice> {\n\t\treturn this.options;\n\t}\n\n\t/**\n\t * Trigger the release portion of all the currently active voices immediately.\n\t * Useful for silencing the synth.\n\t */\n\treleaseAll(): this {\n\t\tconst now = this.now();\n\t\tthis._activeVoices.forEach(({voice}) => {\n\t\t\tvoice.triggerRelease(now);\n\t\t});\n\t\tthis._activeVoices = [];\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._voices.forEach(v => v.dispose());\n\t\tthis._activeVoices = [];\n\t\tthis._availableVoices = [];\n\t\treturn this;\n\t}\n}\n"",""import { FrequencyClass } from \""../core/type/Frequency\"";\nimport { Frequency, Positive, Time } from \""../core/type/Units\"";\nimport { deepMerge, optionsFromArguments } from \""../core/util/Defaults\"";\nimport { readOnly, RecursivePartial } from \""../core/util/Interface\"";\nimport { Monophonic } from \""./Monophonic\"";\nimport { Synth, SynthOptions } from \""./Synth\"";\n\nexport interface MembraneSynthOptions extends SynthOptions {\n\tpitchDecay: Time;\n\toctaves: Positive;\n}\n\n/**\n * MembraneSynth makes kick and tom sounds using a single oscillator\n * with an amplitude envelope and frequency ramp. A Tone.OmniOscillator\n * is routed through a Tone.AmplitudeEnvelope to the output. The drum\n * quality of the sound comes from the frequency envelope applied\n * during MembraneSynth.triggerAttack(note). The frequency envelope\n * starts at <code>note * .octaves</code> and ramps to <code>note</code>\n * over the duration of <code>.pitchDecay</code>.\n * @param options the options available for the synth see defaults below\n * @example\n * var synth = new MembraneSynth().toMaster();\n * synth.triggerAttackRelease(\""C2\"", \""8n\"");\n */\nexport class MembraneSynth extends Synth<MembraneSynthOptions> {\n\n\treadonly name = \""MembraneSynth\"";\n\n\t/**\n\t *  The number of octaves the pitch envelope ramps.\n\t */\n\toctaves: Positive;\n\n\t/**\n\t *  The amount of time the frequency envelope takes.\n\t */\n\tpitchDecay: Time;\n\n\t/**\n\t * Portamento is ignored in this synth. use pitch decay instead.\n\t */\n\treadonly portamento = 0;\n\n\tconstructor(options?: RecursivePartial<MembraneSynthOptions>)\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(MembraneSynth.getDefaults(), arguments));\n\t\tconst options = optionsFromArguments(MembraneSynth.getDefaults(), arguments);\n\n\t\tthis.pitchDecay = options.pitchDecay;\n\t\tthis.octaves = options.octaves;\n\t\treadOnly(this, [\""oscillator\"", \""envelope\""]);\n\t}\n\n\tstatic getDefaults(): MembraneSynthOptions {\n\t\treturn deepMerge(Monophonic.getDefaults(), Synth.getDefaults(), {\n\t\t\tenvelope : {\n\t\t\t\tattack : 0.001,\n\t\t\t\tattackCurve : \""exponential\"",\n\t\t\t\tdecay : 0.4,\n\t\t\t\trelease : 1.4,\n\t\t\t\tsustain : 0.01,\n\t\t\t},\n\t\t\toctaves: 10,\n\t\t\toscillator: {\n\t\t\t\ttype: \""sine\"",\n\t\t\t},\n\t\t\tpitchDecay: 0.05,\n\t\t});\n\t}\n\n\tsetNote(note: Frequency | FrequencyClass, time?: Time): this {\n\t\tconst seconds = this.toSeconds(time);\n\t\tconst hertz = this.toFrequency(note instanceof FrequencyClass ? note.toFrequency() : note);\n\t\tconst maxNote = hertz * this.octaves;\n\t\tthis.oscillator.frequency.setValueAtTime(maxNote, seconds);\n\t\tthis.oscillator.frequency.exponentialRampToValueAtTime(hertz, seconds + this.toSeconds(this.pitchDecay));\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\treturn this;\n\t}\n}\n"",""import \""../core/clock/Transport\"";\nimport { ToneWithContext, ToneWithContextOptions } from \""../core/context/ToneWithContext\"";\nimport { TicksClass } from \""../core/type/Ticks\"";\nimport { TransportTimeClass } from \""../core/type/TransportTime\"";\nimport { NormalRange, Positive, Seconds, Ticks, Time, TransportTime } from \""../core/type/Units\"";\nimport { defaultArg, optionsFromArguments } from \""../core/util/Defaults\"";\nimport { noOp } from \""../core/util/Interface\"";\nimport { BasicPlaybackState, StateTimeline } from \""../core/util/StateTimeline\"";\nimport { isBoolean, isNumber } from \""../core/util/TypeCheck\"";\n\nexport type ToneEventCallback<T> = (time: Seconds, value: T) => void;\n\nexport interface ToneEventOptions<T> extends ToneWithContextOptions {\n\tcallback: ToneEventCallback<T>;\n\tloop: boolean | number;\n\tloopEnd: Time;\n\tloopStart: Time;\n\tplaybackRate: Positive;\n\tvalue?: T;\n\tprobability: NormalRange;\n\tmute: boolean;\n\thumanize: boolean | Time;\n}\n\n/**\n * ToneEvent abstracts away this.context.transport.schedule and provides a schedulable\n * callback for a single or repeatable events along the timeline.\n *\n * @param callback The callback to invoke at the time.\n * @param value The value or values which should be passed to the callback function on invocation.\n * @example\n * var chord = new ToneEvent(function(time, chord){\n * \t//the chord as well as the exact time of the event\n * \t//are passed in as arguments to the callback function\n * }, [\""D4\"", \""E4\"", \""F4\""]);\n * //start the chord at the beginning of the transport timeline\n * chord.start();\n * //loop it every measure for 8 measures\n * chord.loop = 8;\n * chord.loopEnd = \""1m\"";\n */\nexport class ToneEvent<ValueType = any> extends ToneWithContext<ToneEventOptions<ValueType>> {\n\n\tname = \""ToneEvent\"";\n\n\t/**\n\t *  Loop value\n\t */\n\tprotected _loop: boolean | number;\n\n\t/**\n\t *  The callback to invoke.\n\t */\n\tcallback: ToneEventCallback<ValueType>;\n\n\t/**\n\t *  The value which is passed to the\n\t *  callback function.\n\t */\n\tvalue: ValueType;\n\n\t/**\n\t *  When the note is scheduled to start.\n\t */\n\tprotected _loopStart: Ticks;\n\n\t/**\n\t *  When the note is scheduled to start.\n\t */\n\tprotected _loopEnd: Ticks;\n\n\t/**\n\t *  Tracks the scheduled events\n\t */\n\tprotected _state: StateTimeline<{\n\t\tid: number,\n\t}> = new StateTimeline(\""stopped\"");\n\n\t/**\n\t *  The playback speed of the note. A speed of 1\n\t *  is no change.\n\t */\n\tprotected _playbackRate: Positive;\n\n\t/**\n\t *  A delay time from when the event is scheduled to start\n\t */\n\tprotected _startOffset: Ticks = 0;\n\n\t/**\n\t *  private holder of probability value\n\t */\n\tprotected _probability: NormalRange;\n\n\t/**\n\t *  the amount of variation from the given time.\n\t */\n\tprotected _humanize: boolean | Time;\n\n\t/**\n\t *  If mute is true, the callback won't be invoked.\n\t */\n\tmute: boolean;\n\n\tconstructor(callback?: ToneEventCallback<ValueType>, value?: ValueType);\n\tconstructor(options?: Partial<ToneEventOptions<ValueType>>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(ToneEvent.getDefaults(), arguments, [\""callback\"", \""value\""]));\n\t\tconst options = optionsFromArguments(ToneEvent.getDefaults(), arguments, [\""callback\"", \""value\""]);\n\n\t\tthis._loop = options.loop;\n\t\tthis.callback = options.callback;\n\t\tthis.value = options.value;\n\t\tthis._loopStart = this.toTicks(options.loopStart);\n\t\tthis._loopEnd = this.toTicks(options.loopEnd);\n\t\tthis._playbackRate = options.playbackRate;\n\t\tthis._probability = options.probability;\n\t\tthis._humanize = options.humanize;\n\t\tthis.mute = options.mute;\n\t\tthis.playbackRate = options.playbackRate;\n\t}\n\n\tstatic getDefaults(): ToneEventOptions<any> {\n\t\treturn Object.assign(ToneWithContext.getDefaults(), {\n\t\t\tcallback : noOp,\n\t\t\thumanize : false,\n\t\t\tloop : false,\n\t\t\tloopEnd : \""1m\"",\n\t\t\tloopStart : 0,\n\t\t\tmute : false,\n\t\t\tplaybackRate : 1,\n\t\t\tprobability : 1,\n\t\t\tvalue : null,\n\t\t});\n\t}\n\n\t/**\n\t *  Reschedule all of the events along the timeline\n\t *  with the updated values.\n\t *  @param after Only reschedules events after the given time.\n\t *  @private\n\t */\n\tprivate _rescheduleEvents(after: Ticks = -1): void {\n\t\t// if no argument is given, schedules all of the events\n\t\tthis._state.forEachFrom(after, event => {\n\t\t\tlet duration;\n\t\t\tif (event.state === \""started\"") {\n\t\t\t\tif (event.id !== -1) {\n\t\t\t\t\tthis.context.transport.clear(event.id);\n\t\t\t\t}\n\t\t\t\tconst startTick = event.time + Math.round(this.startOffset / this._playbackRate);\n\t\t\t\tif (this._loop === true || isNumber(this._loop) && this._loop > 1) {\n\t\t\t\t\tduration = Infinity;\n\t\t\t\t\tif (isNumber(this._loop)) {\n\t\t\t\t\t\tduration = (this._loop) * this._getLoopDuration();\n\t\t\t\t\t}\n\t\t\t\t\tconst nextEvent = this._state.getAfter(startTick);\n\t\t\t\t\tif (nextEvent !== null) {\n\t\t\t\t\t\tduration = Math.min(duration, nextEvent.time - startTick);\n\t\t\t\t\t}\n\t\t\t\t\tif (duration !== Infinity) {\n\t\t\t\t\t\t// schedule a stop since it's finite duration\n\t\t\t\t\t\tthis._state.setStateAtTime(\""stopped\"", startTick + duration + 1, { id : -1 });\n\t\t\t\t\t\tduration = new TicksClass(this.context, duration);\n\t\t\t\t\t}\n\t\t\t\t\tconst interval = new TicksClass(this.context, this._getLoopDuration());\n\t\t\t\t\tevent.id = this.context.transport.scheduleRepeat(\n\t\t\t\t\t\tthis._tick.bind(this), interval, new TicksClass(this.context, startTick), duration);\n\t\t\t\t} else {\n\t\t\t\t\tevent.id = this.context.transport.schedule(this._tick.bind(this), new TicksClass(this.context, startTick));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t *  Returns the playback state of the note, either \""started\"" or \""stopped\"".\n\t */\n\tget state(): BasicPlaybackState {\n\t\treturn this._state.getValueAtTime(this.context.transport.ticks) as BasicPlaybackState;\n\t}\n\n\t/**\n\t * The start from the scheduled start time.\n\t */\n\tget startOffset(): Ticks {\n\t\treturn this._startOffset;\n\t}\n\tset startOffset(offset) {\n\t\tthis._startOffset = offset;\n\t}\n\n\t/**\n\t *  The probability of the notes being triggered.\n\t */\n\tget probability(): NormalRange {\n\t\treturn this._probability;\n\t}\n\tset probability(prob) {\n\t\tthis._probability = prob;\n\t}\n\n\t/**\n\t *  If set to true, will apply small random variation\n\t *  to the callback time. If the value is given as a time, it will randomize\n\t *  by that amount.\n\t * @example\n\t * event.humanize = true;\n\t */\n\tget humanize(): Time | boolean {\n\t\treturn this._humanize;\n\t}\n\n\tset humanize(variation) {\n\t\tthis._humanize = variation;\n\t}\n\n\t/**\n\t *  Start the note at the given time.\n\t *  @param  time  When the event should start.\n\t */\n\tstart(time?: TransportTime | TransportTimeClass): this {\n\t\tconst ticks = this.toTicks(time);\n\t\tif (this._state.getValueAtTime(ticks) === \""stopped\"") {\n\t\t\tthis._state.add({\n\t\t\t\tid : -1,\n\t\t\t\tstate : \""started\"",\n\t\t\t\ttime: ticks,\n\t\t\t});\n\t\t\tthis._rescheduleEvents(ticks);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Stop the Event at the given time.\n\t *  @param  time  When the event should stop.\n\t */\n\tstop(time?: TransportTime | TransportTimeClass): this {\n\t\tthis.cancel(time);\n\t\tconst ticks = this.toTicks(time);\n\t\tif (this._state.getValueAtTime(ticks) === \""started\"") {\n\t\t\tthis._state.setStateAtTime(\""stopped\"", ticks, { id: -1 });\n\t\t\tconst previousEvent = this._state.getBefore(ticks);\n\t\t\tlet reschedulTime = ticks;\n\t\t\tif (previousEvent !== null) {\n\t\t\t\treschedulTime = previousEvent.time;\n\t\t\t}\n\t\t\tthis._rescheduleEvents(reschedulTime);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Cancel all scheduled events greater than or equal to the given time\n\t *  @param  time  The time after which events will be cancel.\n\t */\n\tcancel(time?: TransportTime | TransportTimeClass): this {\n\t\ttime = defaultArg(time, -Infinity);\n\t\tconst ticks = this.toTicks(time);\n\t\tthis._state.forEachFrom(ticks, event => {\n\t\t\tthis.context.transport.clear(event.id);\n\t\t});\n\t\tthis._state.cancel(ticks);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  The callback function invoker. Also\n\t *  checks if the Event is done playing\n\t *  @param  time  The time of the event in seconds\n\t */\n\tprotected _tick(time: Seconds): void {\n\t\tconst ticks = this.context.transport.getTicksAtTime(time);\n\t\tif (!this.mute && this._state.getValueAtTime(ticks) === \""started\"") {\n\t\t\tif (this.probability < 1 && Math.random() > this.probability) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.humanize) {\n\t\t\t\tlet variation = 0.02;\n\t\t\t\tif (!isBoolean(this.humanize)) {\n\t\t\t\t\tvariation = this.toSeconds(this.humanize);\n\t\t\t\t}\n\t\t\t\ttime += (Math.random() * 2 - 1) * variation;\n\t\t\t}\n\t\t\tthis.callback(time, this.value);\n\t\t}\n\t}\n\n\t/**\n\t *  Get the duration of the loop.\n\t */\n\tprotected _getLoopDuration(): Ticks {\n\t\treturn Math.round((this._loopEnd - this._loopStart) / this._playbackRate);\n\t}\n\n\t/**\n\t *  If the note should loop or not\n\t *  between ToneEvent.loopStart and\n\t *  ToneEvent.loopEnd. If set to true,\n\t *  the event will loop indefinitely,\n\t *  if set to a number greater than 1\n\t *  it will play a specific number of\n\t *  times, if set to false, 0 or 1, the\n\t *  part will only play once.\n\t */\n\tget loop(): boolean | number {\n\t\treturn this._loop;\n\t}\n\tset loop(loop) {\n\t\tthis._loop = loop;\n\t\tthis._rescheduleEvents();\n\t}\n\n\t/**\n\t * \tThe playback rate of the note. Defaults to 1.\n\t *  @example\n\t * note.loop = true;\n\t * //repeat the note twice as fast\n\t * note.playbackRate = 2;\n\t */\n\tget playbackRate(): Positive {\n\t\treturn this._playbackRate;\n\t}\n\tset playbackRate(rate) {\n\t\tthis._playbackRate = rate;\n\t\tthis._rescheduleEvents();\n\t}\n\n\t/**\n\t *  The loopEnd point is the time the event will loop\n\t *  if ToneEvent.loop is true.\n\t */\n\tget loopEnd(): Time {\n\t\treturn new TicksClass(this.context, this._loopEnd).toSeconds();\n\t}\n\tset loopEnd(loopEnd) {\n\t\tthis._loopEnd = this.toTicks(loopEnd);\n\t\tif (this._loop) {\n\t\t\tthis._rescheduleEvents();\n\t\t}\n\t}\n\n\t/**\n\t *  The time when the loop should start.\n\t */\n\tget loopStart(): Time {\n\t\treturn new TicksClass(this.context, this._loopStart).toSeconds();\n\t}\n\tset loopStart(loopStart) {\n\t\tthis._loopStart = this.toTicks(loopStart);\n\t\tif (this._loop) {\n\t\t\tthis._rescheduleEvents();\n\t\t}\n\t}\n\n\t/**\n\t *  The current progress of the loop interval.\n\t *  Returns 0 if the event is not started yet or\n\t *  it is not set to loop.\n\t */\n\tget progress(): NormalRange {\n\t\tif (this._loop) {\n\t\t\tconst ticks = this.context.transport.ticks;\n\t\t\tconst lastEvent = this._state.get(ticks);\n\t\t\tif (lastEvent !== null && lastEvent.state === \""started\"") {\n\t\t\t\tconst loopDuration = this._getLoopDuration();\n\t\t\t\tconst progress = (ticks - lastEvent.time) % loopDuration;\n\t\t\t\treturn progress / loopDuration;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.cancel();\n\t\tthis._state.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { TicksClass } from \""../core/type/Ticks\"";\nimport { TransportTimeClass } from \""../core/type/TransportTime\"";\nimport { NormalRange, Positive, Seconds, Ticks, Time, TransportTime } from \""../core/type/Units\"";\nimport { defaultArg, optionsFromArguments } from \""../core/util/Defaults\"";\nimport { StateTimeline } from \""../core/util/StateTimeline\"";\nimport { isArray, isDefined, isObject, isUndef } from \""../core/util/TypeCheck\"";\nimport { ToneEvent, ToneEventCallback, ToneEventOptions } from \""./ToneEvent\"";\n\ntype CallbackType<T> =\n\tT extends {\n\t\ttime: Time;\n\t\t[key: string]: any,\n\t} ? T :\n\tT extends ArrayLike<any> ? T[1] :\n\tT extends Time ? null : never;\n\ninterface PartOptions<T> extends Omit<ToneEventOptions<CallbackType<T>>, \""value\""> {\n\tevents: T[];\n}\n\n/**\n *  Part is a collection ToneEvents which can be started/stopped and looped as a single unit.\n *\n *  @param callback The callback to invoke on each event\n *  @param events the array of events\n *  @example\n * var part = new Part(function(time, note){\n * \t//the notes given as the second element in the array\n * \t//will be passed in as the second argument\n * \tsynth.triggerAttackRelease(note, \""8n\"", time);\n * }, [[0, \""C2\""], [\""0:2\"", \""C3\""], [\""0:3:2\"", \""G2\""]]);\n *  @example\n * //use an array of objects as long as the object has a \""time\"" attribute\n * var part = new Part(function(time, value){\n * \t//the value is an object which contains both the note and the velocity\n * \tsynth.triggerAttackRelease(value.note, \""8n\"", time, value.velocity);\n * }, [{\""time\"" : 0, \""note\"" : \""C3\"", \""velocity\"": 0.9},\n * \t   {\""time\"" : \""0:2\"", \""note\"" : \""C4\"", \""velocity\"": 0.5}\n * ]).start(0);\n */\nexport class Part<ValueType = any> extends ToneEvent<ValueType> {\n\n\tname = \""Part\"";\n\n\t/**\n\t *  Tracks the scheduled events\n\t */\n\tprotected _state: StateTimeline<{\n\t\tid: number,\n\t\toffset: number,\n\t}> = new StateTimeline(\""stopped\"");\n\n\t/**\n\t * The events that belong to this part\n\t */\n\tprivate _events: Set<ToneEvent> = new Set();\n\n\tconstructor(options?: Partial<PartOptions<ValueType>>);\n\tconstructor(callback?: ToneEventCallback<CallbackType<ValueType>>, value?: ValueType[]);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Part.getDefaults(), arguments, [\""callback\"", \""events\""]));\n\t\tconst options = optionsFromArguments(Part.getDefaults(), arguments, [\""callback\"", \""events\""]);\n\n\t\t// add the events\n\t\toptions.events.forEach(event => {\n\t\t\tif (isArray(event)) {\n\t\t\t\tthis.add(event[0], event[1]);\n\t\t\t} else {\n\t\t\t\tthis.add(event);\n\t\t\t}\n\t\t});\n\t}\n\n\tstatic getDefaults(): PartOptions<any> {\n\t\treturn Object.assign(ToneEvent.getDefaults(), {\n\t\t\tevents: [],\n\t\t});\n\t}\n\n\t/**\n\t *  Start the part at the given time.\n\t *  @param  time    When to start the part.\n\t *  @param  offset  The offset from the start of the part to begin playing at.\n\t */\n\tstart(time?: TransportTime, offset?: Time): this {\n\t\tconst ticks = this.toTicks(time);\n\t\tif (this._state.getValueAtTime(ticks) !== \""started\"") {\n\t\t\toffset = defaultArg(offset, this._loop ? this._loopStart : 0);\n\t\t\tif (this._loop) {\n\t\t\t\toffset = defaultArg(offset, this._loopStart);\n\t\t\t} else {\n\t\t\t\toffset = defaultArg(offset, 0);\n\t\t\t}\n\t\t\tconst computedOffset = this.toTicks(offset);\n\t\t\tthis._state.add({\n\t\t\t\tid : -1,\n\t\t\t\toffset: computedOffset,\n\t\t\t\tstate : \""started\"",\n\t\t\t\ttime : ticks,\n\t\t\t});\n\t\t\tthis._forEach(event => {\n\t\t\t\tthis._startNote(event, ticks, computedOffset);\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Start the event in the given event at the correct time given\n\t *  the ticks and offset and looping.\n\t *  @param  event\n\t *  @param  ticks\n\t *  @param  offset\n\t */\n\tprivate _startNote(event: ToneEvent, ticks: Ticks, offset: Ticks): void {\n\t\tticks -= offset;\n\t\tif (this._loop) {\n\t\t\tif (event.startOffset >= this._loopStart && event.startOffset < this._loopEnd) {\n\t\t\t\tif (event.startOffset < offset) {\n\t\t\t\t\t// start it on the next loop\n\t\t\t\t\tticks += this._getLoopDuration();\n\t\t\t\t}\n\t\t\t\tevent.start(new TicksClass(this.context, ticks));\n\t\t\t} else if (event.startOffset < this._loopStart && event.startOffset >= offset) {\n\t\t\t\tevent.loop = false;\n\t\t\t\tevent.start(new TicksClass(this.context, ticks));\n\t\t\t}\n\t\t} else if (event.startOffset >= offset) {\n\t\t\tevent.start(new TicksClass(this.context, ticks));\n\t\t}\n\t}\n\n\tget startOffset(): Ticks {\n\t\treturn this._startOffset;\n\t}\n\tset startOffset(offset) {\n\t\tthis._startOffset = offset;\n\t\tthis._forEach(event => {\n\t\t\tevent.startOffset += this._startOffset;\n\t\t});\n\t}\n\n\t/**\n\t *  Stop the part at the given time.\n\t *  @param  time  When to stop the part.\n\t */\n\tstop(time?: TransportTime): this {\n\t\tconst ticks = this.toTicks(time);\n\t\tthis._state.cancel(ticks);\n\t\tthis._state.setStateAtTime(\""stopped\"", ticks);\n\t\tthis._forEach(event => {\n\t\t\tevent.stop(time);\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t * Get/Set an Event's value at the given time.\n\t * If a value is passed in and no event exists at\n\t * the given time, one will be created with that value.\n\t * If two events are at the same time, the first one will\n\t * be returned.\n\t * @example\n\t * part.at(\""1m\""); //returns the part at the first measure\n\t * part.at(\""2m\"", \""C2\""); //set the value at \""2m\"" to C2.\n\t * //if an event didn't exist at that time, it will be created.\n\t * @param time The time of the event to get or set.\n\t * @param value If a value is passed in, the value of the event at the given time will be set to it.\n\t */\n\tat(time: Time, value?: any): ToneEvent | null {\n\t\tconst timeInTicks = new TransportTimeClass(this.context, time).toTicks();\n\t\tconst tickTime = new TicksClass(this.context, 1).toSeconds();\n\n\t\tconst iterator = this._events.values();\n\t\tlet result = iterator.next();\n\t\twhile (!result.done) {\n\t\t\tconst event = result.value;\n\t\t\tif (Math.abs(timeInTicks - event.startOffset) < tickTime) {\n\t\t\t\tif (isDefined(value)) {\n\t\t\t\t\tevent.value = value;\n\t\t\t\t}\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\tresult = iterator.next();\n\t\t}\n\t\t// if there was no event at that time, create one\n\t\tif (isDefined(value)) {\n\t\t\tthis.add(time, value);\n\t\t\t// return the new event\n\t\t\treturn this.at(time);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t *  Add a an event to the part.\n\t *  @param time The time the note should start. If an object is passed in, it should\n\t *  \t\t\thave a 'time' attribute and the rest of the object will be used as the 'value'.\n\t *  @param  value\n\t * @example\n\t * part.add(\""1m\"", \""C#+11\"");\n\t * @example\n\t * part.add({\n\t * \ttime: \""1m\"",\n\t * \tnote: \""C#11\""\n\t * });\n\t */\n\tadd(obj: {\n\t\ttime: Time,\n\t\t[key: string]: any;\n\t}): this;\n\tadd(time: Time, value?: any): this;\n\tadd(time: Time | object, value?: any): this {\n\t\t// extract the parameters\n\t\tif (time instanceof Object && Reflect.has(time, \""time\"")) {\n\t\t\tvalue = time;\n\t\t\ttime = value.time;\n\t\t}\n\t\tconst ticks = this.toTicks(time);\n\t\tlet event: ToneEvent;\n\t\tif (value instanceof ToneEvent) {\n\t\t\tevent = value;\n\t\t\tevent.callback = this._tick.bind(this);\n\t\t} else {\n\t\t\tevent = new ToneEvent({\n\t\t\t\tcallback : this._tick.bind(this),\n\t\t\t\tcontext: this.context,\n\t\t\t\tvalue,\n\t\t\t});\n\t\t}\n\t\t// the start offset\n\t\tevent.startOffset = ticks;\n\n\t\t// initialize the values\n\t\tevent.set({\n\t\t\thumanize : this.humanize,\n\t\t\tloop : this.loop,\n\t\t\tloopEnd : this.loopEnd,\n\t\t\tloopStart : this.loopStart,\n\t\t\tplaybackRate : this.playbackRate,\n\t\t\tprobability : this.probability,\n\t\t});\n\n\t\tthis._events.add(event);\n\n\t\t// start the note if it should be played right now\n\t\tthis._restartEvent(event);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Restart the given event\n\t */\n\tprivate _restartEvent(event: ToneEvent): void {\n\t\tthis._state.forEach((stateEvent) => {\n\t\t\tif (stateEvent.state === \""started\"") {\n\t\t\t\tthis._startNote(event, stateEvent.time, stateEvent.offset);\n\t\t\t} else {\n\t\t\t\t// stop the note\n\t\t\t\tevent.stop(new TicksClass(this.context, stateEvent.time));\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t *  Remove an event from the part. If the event at that time is a Part,\n\t *  it will remove the entire part.\n\t *  @param time The time of the event\n\t *  @param value Optionally select only a specific event value\n\t */\n\tremove(obj: {\n\t\ttime: Time,\n\t\t[key: string]: any;\n\t}): this;\n\tremove(time: Time, value?: any): this;\n\tremove(time: Time | object, value?: any): this {\n\t\t// extract the parameters\n\t\tif (isObject(time) && time.hasOwnProperty(\""time\"")) {\n\t\t\tvalue = time;\n\t\t\ttime = value.time;\n\t\t}\n\t\ttime = this.toTicks(time);\n\t\tthis._events.forEach(event => {\n\t\t\tif (event.startOffset === time) {\n\t\t\t\tif (isUndef(value) || (isDefined(value) && event.value === value)) {\n\t\t\t\t\tthis._events.delete(event);\n\t\t\t\t\tevent.dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Remove all of the notes from the group.\n\t */\n\tclear(): this {\n\t\tthis._forEach(event => event.dispose());\n\t\tthis._events.clear();\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Cancel scheduled state change events: i.e. \""start\"" and \""stop\"".\n\t *  @param after The time after which to cancel the scheduled events.\n\t */\n\tcancel(after?: TransportTime | TransportTimeClass): this {\n\t\tthis._forEach(event => event.cancel(after));\n\t\tthis._state.cancel(this.toTicks(after));\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Iterate over all of the events\n\t */\n\tprivate _forEach(callback: (event: ToneEvent) => void): this {\n\t\tif (this._events) {\n\t\t\tthis._events.forEach(event => {\n\t\t\t\tif (event instanceof Part) {\n\t\t\t\t\tevent._forEach(callback);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Set the attribute of all of the events\n\t *  @param  attr  the attribute to set\n\t *  @param  value      The value to set it to\n\t */\n\tprivate _setAll(attr: string, value: any): void {\n\t\tthis._forEach(event => {\n\t\t\tevent[attr] = value;\n\t\t});\n\t}\n\n\t/**\n\t *  Internal tick method\n\t *  @param  time  The time of the event in seconds\n\t */\n\tprotected _tick(time: Seconds, value?: any): void {\n\t\tif (!this.mute) {\n\t\t\tthis.callback(time, value);\n\t\t}\n\t}\n\n\t/**\n\t *  Determine if the event should be currently looping\n\t *  given the loop boundries of this Part.\n\t *  @param  event  The event to test\n\t */\n\tprivate _testLoopBoundries(event: ToneEvent): void {\n\t\tif (this._loop && (event.startOffset < this._loopStart || event.startOffset >= this._loopEnd)) {\n\t\t\tevent.cancel(0);\n\t\t} else if (event.state === \""stopped\"") {\n\t\t\t// reschedule it if it's stopped\n\t\t\tthis._restartEvent(event);\n\t\t}\n\t}\n\n\t/**\n\t *  The probability of the notes being triggered.\n\t */\n\tget probability(): NormalRange {\n\t\treturn this._probability;\n\t}\n\tset probability(prob) {\n\t\tthis._probability = prob;\n\t\tthis._setAll(\""probability\"", prob);\n\t}\n\n\t/**\n\t * If set to true, will apply small random variation\n\t * to the callback time. If the value is given as a time, it will randomize\n\t * by that amount.\n\t * @example\n\t * event.humanize = true;\n\t */\n\tget humanize(): boolean | Time {\n\t\treturn this._humanize;\n\t}\n\tset humanize(variation) {\n\t\tthis._humanize = variation;\n\t\tthis._setAll(\""humanize\"", variation);\n\t}\n\n\t/**\n\t * If the part should loop or not\n\t * between Part.loopStart and\n\t * Part.loopEnd. If set to true,\n\t * the part will loop indefinitely,\n\t * if set to a number greater than 1\n\t * it will play a specific number of\n\t * times, if set to false, 0 or 1, the\n\t * part will only play once.\n\t * @example\n\t * //loop the part 8 times\n\t * part.loop = 8;\n\t */\n\tget loop(): boolean | number {\n\t\treturn this._loop;\n\t}\n\tset loop(loop) {\n\t\tthis._loop = loop;\n\t\tthis._forEach(event => {\n\t\t\tevent.loopStart = this.loopStart;\n\t\t\tevent.loopEnd = this.loopEnd;\n\t\t\tevent.loop = loop;\n\t\t\tthis._testLoopBoundries(event);\n\t\t});\n\t}\n\n\t/**\n\t *  The loopEnd point determines when it will\n\t *  loop if Part.loop is true.\n\t *  @memberOf Part#\n\t *  @type {Time}\n\t *  @name loopEnd\n\t */\n\tget loopEnd(): Time {\n\t\treturn new TicksClass(this.context, this._loopEnd).toSeconds();\n\t}\n\tset loopEnd(loopEnd) {\n\t\tthis._loopEnd = this.toTicks(loopEnd);\n\t\tif (this._loop) {\n\t\t\tthis._forEach(event => {\n\t\t\t\tevent.loopEnd = loopEnd;\n\t\t\t\tthis._testLoopBoundries(event);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t *  The loopStart point determines when it will\n\t *  loop if Part.loop is true.\n\t */\n\tget loopStart(): Time {\n\t\treturn new TicksClass(this.context, this._loopStart).toSeconds();\n\t}\n\tset loopStart(loopStart) {\n\t\tthis._loopStart = this.toTicks(loopStart);\n\t\tif (this._loop) {\n\t\t\tthis._forEach(event => {\n\t\t\t\tevent.loopStart = this.loopStart;\n\t\t\t\tthis._testLoopBoundries(event);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * \tThe playback rate of the part\n\t */\n\tget playbackRate(): Positive {\n\t\treturn this._playbackRate;\n\t}\n\tset playbackRate(rate) {\n\t\tthis._playbackRate = rate;\n\t\tthis._setAll(\""playbackRate\"", rate);\n\t}\n\n\t/**\n\t * \tThe number of scheduled notes in the part.\n\t */\n\tget length(): number {\n\t\treturn this._events.size;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t\treturn this;\n\t}\n}\n"",""import { TicksClass } from \""../core/type/Ticks\"";\nimport { NormalRange, Positive, Seconds, Ticks, Time, TransportTime } from \""../core/type/Units\"";\nimport { omitFromObject, optionsFromArguments } from \""../core/util/Defaults\"";\nimport { isArray, isString } from \""../core/util/TypeCheck\"";\nimport { Part } from \""./Part\"";\nimport { ToneEvent, ToneEventCallback, ToneEventOptions } from \""./ToneEvent\"";\n\ntype SequenceEventDescription<T> = Array<T | T[]>;\n\ninterface SequenceOptions<T> extends Omit<ToneEventOptions<T>, \""value\""> {\n\tloopStart: number;\n\tloopEnd: number;\n\tsubdivision: Time;\n\tevents: SequenceEventDescription<T>;\n}\n\n/**\n * A sequence is an alternate notation of a part. Instead\n * of passing in an array of [time, event] pairs, pass\n * in an array of events which will be spaced at the\n * given subdivision. Sub-arrays will subdivide that beat\n * by the number of items are in the array.\n * Sequence notation inspiration from [Tidal](http://yaxu.org/tidal/)\n * @param  callback  The callback to invoke with every note\n * @param  sequence  The sequence\n * @param  subdivision  The subdivision between which events are placed.\n * @example\n * var seq = new Sequence(function(time, note){\n * \tconsole.log(note);\n * //straight quater notes\n * }, [\""C4\"", \""E4\"", \""G4\"", \""A4\""], \""4n\"");\n * @example\n * var seq = new Sequence(function(time, note){\n * \tconsole.log(note);\n * //subdivisions are given as subarrays\n * }, [\""C4\"", [\""E4\"", \""D4\"", \""E4\""], \""G4\"", [\""A4\"", \""G4\""]]);\n */\nexport class Sequence<ValueType = any> extends ToneEvent<ValueType> {\n\n\tname = \""Sequence\"";\n\n\t/**\n\t *  The subdivison of each note\n\t */\n\tprivate _subdivision: Ticks;\n\n\t/**\n\t * The object responsible for scheduling all of the events\n\t */\n\tprivate _part: Part = new Part({\n\t\tcallback: this._seqCallback.bind(this),\n\t\tcontext: this.context,\n\t});\n\n\t/**\n\t * private reference to all of the sequence proxies\n\t */\n\tprivate _events: ValueType[] = [];\n\n\t/**\n\t * The proxied array\n\t */\n\tprivate _eventsArray: ValueType[] = [];\n\n\tconstructor(\n\t\tcallback?: ToneEventCallback<ValueType>,\n\t\tevents?: SequenceEventDescription<ValueType>,\n\t\tsubdivision?: Time,\n\t);\n\tconstructor(options?: Partial<SequenceOptions<ValueType>>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Sequence.getDefaults(), arguments, [\""callback\"", \""events\"", \""subdivision\""]));\n\t\tconst options = optionsFromArguments(Sequence.getDefaults(), arguments, [\""callback\"", \""events\"", \""subdivision\""]);\n\n\t\tthis._subdivision = this.toTicks(options.subdivision);\n\n\t\tthis.events = options.events;\n\n\t\t// set all of the values\n\t\tthis.loop = options.loop;\n\t\tthis.loopStart = options.loopStart;\n\t\tthis.loopEnd = options.loopEnd;\n\t\tthis.playbackRate = options.playbackRate;\n\t\tthis.probability = options.probability;\n\t\tthis.humanize = options.humanize;\n\t\tthis.mute = options.mute;\n\t\tthis.playbackRate = options.playbackRate;\n\t}\n\n\tstatic getDefaults(): SequenceOptions<any> {\n\t\treturn Object.assign( omitFromObject(ToneEvent.getDefaults(), [\""value\""]), {\n\t\t\tevents: [],\n\t\t\tloop: true,\n\t\t\tloopEnd : 0,\n\t\t\tloopStart: 0,\n\t\t\tsubdivision: \""8n\"",\n\t\t});\n\t}\n\n\t/**\n\t * The internal callback for when an event is invoked\n\t */\n\tprivate _seqCallback(time: Seconds, value: any): void {\n\t\tif (value !== null) {\n\t\t\tthis.callback(time, value);\n\t\t}\n\t}\n\n\t/**\n\t * The sequence\n\t */\n\tget events(): any[] {\n\t\treturn this._events;\n\t}\n\tset events(s) {\n\t\tthis.clear();\n\t\tthis._eventsArray = s;\n\t\tthis._events = this._createSequence(this._eventsArray);\n\t\tthis._eventsUpdated();\n\t}\n\n\t/**\n\t *  Start the part at the given time.\n\t *  @param  time    When to start the part.\n\t *  @param  offset  The offset index to start at\n\t */\n\tstart(time?: TransportTime, offset?: number): this {\n\t\tthis._part.start(time, offset ? this._indexTime(offset) : offset);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  Stop the part at the given time.\n\t *  @param  time  When to stop the part.\n\t */\n\tstop(time?: TransportTime): this {\n\t\tthis._part.stop(time);\n\t\treturn this;\n\t}\n\n\t/**\n\t *  The subdivision of the sequence. This can only be\n\t *  set in the constructor. The subdivision is the\n\t *  interval between successive steps.\n\t */\n\tget subdivision(): Seconds {\n\t\treturn new TicksClass(this.context, this._subdivision).toSeconds();\n\t}\n\n\t/**\n\t * Create a sequence proxy which can be monitored to create subsequences\n\t */\n\tprivate _createSequence(array: any[]): any[] {\n\t\treturn new Proxy(array, {\n\t\t\tget: (target: any[], property: PropertyKey): any => {\n\t\t\t\t// property is index in this case\n\t\t\t\treturn target[property];\n\t\t\t},\n\t\t\tset: (target: any[], property: PropertyKey, value: any): boolean => {\n\t\t\t\tif (isString(property) && isFinite(parseInt(property, 10))) {\n\t\t\t\t\tconst index = parseInt(property, 10);\n\t\t\t\t\tif (isArray(value)) {\n\t\t\t\t\t\ttarget[property] = this._createSequence(value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[property] = value;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttarget[property] = value;\n\t\t\t\t}\n\t\t\t\tthis._eventsUpdated();\n\t\t\t\t// return true to accept the changes\n\t\t\t\treturn true;\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * When the sequence has changed, all of the events need to be recreated\n\t */\n\tprivate _eventsUpdated(): void {\n\t\tthis._part.clear();\n\t\tthis._rescheduleSequence(this._eventsArray, this._subdivision, this.startOffset);\n\t\t// update the loopEnd\n\t\tthis.loopEnd = this.loopEnd;\n\t}\n\n\t/**\n\t * reschedule all of the events that need to be rescheduled\n\t */\n\tprivate _rescheduleSequence(sequence: any[], subdivision: Ticks, startOffset: Ticks): void {\n\t\tsequence.forEach((value, index) => {\n\t\t\tconst eventOffset = index * (subdivision) + startOffset;\n\t\t\tif (isArray(value)) {\n\t\t\t\tthis._rescheduleSequence(value, subdivision / value.length, eventOffset);\n\t\t\t} else {\n\t\t\t\tconst startTime = new TicksClass(this.context, eventOffset, \""i\"").toSeconds();\n\t\t\t\tthis._part.add(startTime, value);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t *  Get the time of the index given the Sequence's subdivision\n\t *  @param  index\n\t *  @return The time of that index\n\t *  @private\n\t */\n\tprivate _indexTime(index: number): Seconds {\n\t\treturn new TicksClass(this.context, index * (this._subdivision) + this.startOffset).toSeconds();\n\t}\n\n\t/**\n\t * Clear all of the events\n\t */\n\tclear(): this {\n\t\tthis._part.clear();\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._part.dispose();\n\t\treturn this;\n\t}\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// PROXY CALLS\n\t///////////////////////////////////////////////////////////////////////////\n\n\tget loop(): boolean | number {\n\t\treturn this._part.loop;\n\t}\n\tset loop(l) {\n\t\tif (this._part) {\n\t\t\tthis._part.loop = l;\n\t\t}\n\t}\n\n\t/**\n\t * The index at which the sequence should start looping\n\t */\n\tget loopStart(): number {\n\t\treturn this._loopStart;\n\t}\n\tset loopStart(index) {\n\t\tthis._loopStart = index;\n\t\tif (this._part) {\n\t\t\tthis._part.loopStart = this._indexTime(index);\n\t\t}\n\t}\n\n\t/**\n\t * The index at which the sequence should end looping\n\t */\n\tget loopEnd(): number {\n\t\treturn this._loopEnd;\n\t}\n\tset loopEnd(index) {\n\t\tthis._loopEnd = index;\n\t\tif (this._part) {\n\t\t\tif (index === 0) {\n\t\t\t\tthis._part.loopEnd = this._indexTime(this._eventsArray.length);\n\t\t\t} else {\n\t\t\t\tthis._part.loopEnd = this._indexTime(index);\n\t\t\t}\n\t\t}\n\t}\n\n\tget startOffset(): Ticks {\n\t\treturn this._part.startOffset;\n\t}\n\tset startOffset(start) {\n\t\tif (this._part) {\n\t\t\tthis._part.startOffset = start;\n\t\t}\n\t}\n\n\tget playbackRate(): Positive {\n\t\treturn this._part.playbackRate;\n\t}\n\tset playbackRate(rate) {\n\t\tif (this._part) {\n\t\t\tthis._part.playbackRate = rate;\n\t\t}\n\t}\n\n\tget probability(): NormalRange {\n\t\treturn this._part.probability;\n\t}\n\tset probability(prob) {\n\t\tif (this._part) {\n\t\t\tthis._part.probability = prob;\n\t\t}\n\t}\n\n\tget humanize(): boolean | Time {\n\t\treturn this._part.humanize;\n\t}\n\tset humanize(variation) {\n\t\tif (this._part) {\n\t\t\tthis._part.humanize = variation;\n\t\t}\n\t}\n\n\t/**\n\t * The number of scheduled events\n\t */\n\tget length(): number {\n\t\treturn this._part.length;\n\t}\n}\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { connect, ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { NormalRange } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly } from \""../../core/util/Interface\"";\nimport { GainToAudio } from \""../../signal/GainToAudio\"";\nimport { Signal } from \""../../signal/Signal\"";\n\ninterface CrossFadeOptions extends ToneAudioNodeOptions {\n\tfade: NormalRange;\n}\n\n/**\n * Tone.Crossfade provides equal power fading between two inputs.\n * More on crossfading technique [here](https://en.wikipedia.org/wiki/Fade_(audio_engineering)#Crossfading).\n * ```\n *                                             +---------+\n *                                            +> input a +>--+\n * +-----------+   +---------------------+     |         |   |\n * | 1s signal +>--> stereoPannerNode  L +>----> gain    |   |\n * +-----------+   |                     |     +---------+   |\n *               +-> pan               R +>-+                |   +--------+\n *               | +---------------------+  |                +---> output +>\n *  +------+     |                          |  +---------+   |   +--------+\n *  | fade +>----+                          | +> input b +>--+\n *  +------+                                |  |         |\n *                                          +--> gain    |\n *                                             +---------+\n * ```\n * @example\n * var crossFade = new CrossFade(0.5);\n * //connect effect A to crossfade from\n * //effect output 0 to crossfade input 0\n * effectA.connect(crossFade.a);\n * //connect effect B to crossfade from\n * //effect output 0 to crossfade input 1\n * effectB.connect(crossFade.b);\n * crossFade.fade.value = 0;\n * // ^ only effectA is output\n * crossFade.fade.value = 1;\n * // ^ only effectB is output\n * crossFade.fade.value = 0.5;\n * // ^ the two signals are mixed equally.\n */\nexport class CrossFade extends ToneAudioNode<CrossFadeOptions> {\n\n\treadonly name = \""CrossFade\"";\n\n\t/**\n\t * The crossfading is done by a StereoPannerNode\n\t */\n\tprivate _panner: StereoPannerNode = this.context.createStereoPanner();\n\n\t/**\n\t * Split the output of the panner node into two values used to control the gains.\n\t */\n\tprivate _split: ChannelSplitterNode = this.context.createChannelSplitter(2);\n\n\t/**\n\t * Convert the fade value into an audio range value so it can be connected\n\t * to the panner.pan AudioParam\n\t */\n\tprivate _g2a: GainToAudio = new GainToAudio({ context : this.context });\n\n\t/**\n\t * The input which is at full level when fade = 0\n\t */\n\ta: Gain = new Gain({\n\t\tcontext : this.context,\n\t\tgain: 0,\n\t});\n\n\t/**\n\t * The input which is at full level when fade = 1\n\t */\n\tb: Gain = new Gain({\n\t\tcontext : this.context,\n\t\tgain: 0,\n\t});\n\n\t/**\n\t * The output is a mix between `a` and `b` at the ratio of `fade`\n\t */\n\toutput: Gain = new Gain({ context : this.context });\n\n\t/**\n\t * CrossFade has no input, you must choose either `a` or `b`\n\t */\n\tinput: undefined;\n\n\t/**\n\t * \tThe mix between the two inputs. A fade value of 0\n\t * \twill output 100% crossFade.a and\n\t * \ta value of 1 will output 100% crossFade.b.\n\t */\n\treadonly fade: Signal<NormalRange>;\n\n\tprotected _internalChannels = [this.a, this.b];\n\n\tconstructor(options?: Partial<CrossFadeOptions>);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(fade?: NormalRange);\n\tconstructor() {\n\t\tsuper(Object.assign(optionsFromArguments(CrossFade.getDefaults(), arguments, [\""fade\""])));\n\t\tconst options = optionsFromArguments(CrossFade.getDefaults(), arguments, [\""fade\""]);\n\n\t\tthis.fade = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""normalRange\"",\n\t\t\tvalue: options.fade,\n\t\t});\n\t\treadOnly(this, \""fade\"");\n\n\t\tthis.context.getConstant(1).connect(this._panner);\n\t\tthis._panner.connect(this._split);\n\t\t// this is necessary for standardized-audio-context\n\t\t// doesn't make any difference for the native AudioContext\n\t\t// https://github.com/chrisguttandin/standardized-audio-context/issues/647\n\t\tthis._panner.channelCount = 1;\n\t\tthis._panner.channelCountMode = \""explicit\"";\n\t\tconnect(this._split, this.a.gain, 0);\n\t\tconnect(this._split, this.b.gain, 1);\n\n\t\tthis.fade.chain(this._g2a, this._panner.pan);\n\n\t\tthis.a.connect(this.output);\n\t\tthis.b.connect(this.output);\n\t}\n\n\tstatic getDefaults(): CrossFadeOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tfade: 0.5,\n\t\t});\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis.a.dispose();\n\t\tthis.b.dispose();\n\t\tthis.output.dispose();\n\t\tthis.fade.dispose();\n\t\tthis._g2a.dispose();\n\t\tthis._panner.disconnect();\n\t\tthis._split.disconnect();\n\t\treturn this;\n\t}\n}\n"",""import { CrossFade } from \""../component/channel/CrossFade\"";\nimport { Gain } from \""../core/context/Gain\"";\nimport { InputNode, OutputNode, ToneAudioNode, ToneAudioNodeOptions } from \""../core/context/ToneAudioNode\"";\nimport { NormalRange } from \""../core/type/Units\"";\nimport { readOnly } from \""../core/util/Interface\"";\nimport { Signal } from \""../signal/Signal\"";\n\nexport interface EffectOptions extends ToneAudioNodeOptions {\n\twet: NormalRange;\n}\n/**\n * \t@class  Effect is the base class for effects. Connect the effect between\n * \t        the effectSend and effectReturn GainNodes, then control the amount of\n * \t        effect which goes to the output using the wet control.\n *\n *  @constructor\n *  @extends {Tone.AudioNode}\n *  @param {NormalRange|Object} [wet] The starting wet value.\n */\nexport abstract class Effect<Options extends EffectOptions>\nextends ToneAudioNode<Options> {\n\n\treadonly name: string = \""Effect\"";\n\n\t/**\n\t *  the drywet knob to control the amount of effect\n\t */\n\tprivate _dryWet: CrossFade = new CrossFade({ context : this.context });\n\n\t/**\n\t *  The wet control is how much of the effected\n\t *  will pass through to the output. 1 = 100% effected\n\t *  signal, 0 = 100% dry signal.\n\t */\n\twet: Signal<NormalRange> = this._dryWet.fade;\n\n\t/**\n\t *  connect the effectSend to the input of hte effect\n\t */\n\tprotected effectSend: Gain = new Gain({ context : this.context });\n\n\t/**\n\t *  connect the output of the effect to the effectReturn\n\t */\n\tprotected effectReturn: Gain = new Gain({ context : this.context });\n\n\t/**\n\t * The effect input node\n\t */\n\tinput: Gain = new Gain({ context : this.context });\n\n\t/**\n\t * The effect output\n\t */\n\toutput = this._dryWet;\n\n\tconstructor(options: EffectOptions) {\n\t\tsuper(options);\n\n\t\t// connections\n\t\tthis.input.fan(this._dryWet.a, this.effectSend);\n\t\tthis.effectReturn.connect(this._dryWet.b);\n\t\tthis.wet.setValueAtTime(options.wet, 0);\n\t\tthis._internalChannels = [this.effectReturn, this.effectSend];\n\t\treadOnly(this, \""wet\"");\n\t}\n\n\tstatic getDefaults(): EffectOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\twet : 1,\n\t\t});\n\t}\n\n\t/**\n\t *  chains the effect in between the effectSend and effectReturn\n\t */\n\tprotected connectEffect(effect: ToneAudioNode | AudioNode): this {\n\t\t// add it to the internal channels\n\t\tthis._internalChannels.push(effect);\n\t\tthis.effectSend.chain(effect, this.effectReturn);\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._dryWet.dispose();\n\t\tthis.effectSend.dispose();\n\t\tthis.effectReturn.dispose();\n\t\tthis.wet.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../core/context/Gain\"";\nimport { Param } from \""../core/context/Param\"";\nimport { NormalRange } from \""../core/type/Units\"";\nimport { readOnly } from \""../core/util/Interface\"";\nimport { Effect, EffectOptions } from \""./Effect\"";\n\nexport interface FeedbackEffectOptions extends EffectOptions {\n\t/**\n\t * The feedback from the output back to the input\n\t * ```\n\t * +---<--------<---+\n\t * |                |\n\t * |  +----------+  |\n\t * +--> feedback +>-+\n\t *    +----------+\n\t * ```\n\t */\n\tfeedback: NormalRange;\n}\n\n/**\n * FeedbackEffect provides a loop between an audio source and its own output.\n * This is a base-class for feedback effects.\n */\nexport abstract class FeedbackEffect<Options extends FeedbackEffectOptions> extends Effect<Options> {\n\n\tname = \""FeedbackEffect\"";\n\n\t/**\n\t *  the gain which controls the feedback\n\t */\n\tprivate _feedbackGain: Gain<NormalRange>;\n\n\t/**\n\t *  The amount of signal which is fed back into the effect input.\n\t */\n\tfeedback: Param<NormalRange>;\n\n\tconstructor(options: FeedbackEffectOptions) {\n\n\t\tsuper(options);\n\n\t\tthis._feedbackGain = new Gain({\n\t\t\tcontext: this.context,\n\t\t\tgain: options.feedback,\n\t\t\tunits: \""normalRange\"",\n\t\t});\n\n\t\tthis.feedback = this._feedbackGain.gain;\n\t\treadOnly(this, \""feedback\"");\n\n\t\t// the feedback loop\n\t\tthis.effectReturn.chain(this._feedbackGain, this.effectSend);\n\t}\n\n\tstatic getDefaults(): FeedbackEffectOptions {\n\t\treturn Object.assign(Effect.getDefaults(), {\n\t\t\tfeedback: 0.125,\n\t\t});\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._feedbackGain.dispose();\n\t\tthis.feedback.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Delay } from \""../core/context/Delay\"";\nimport { Param } from \""../core/context/Param\"";\nimport { NormalRange, Time } from \""../core/type/Units\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { readOnly } from \""../core/util/Interface\"";\nimport { FeedbackEffect,  FeedbackEffectOptions } from \""./FeedbackEffect\"";\n\ninterface FeedbackDelayOptions extends FeedbackEffectOptions {\n\tdelayTime: Time;\n\tmaxDelay: Time;\n}\n\n/**\n * FeedbackDelay is a DelayNode in which part of output signal is fed back into the delay.\n *\n * @param delayTime The delay applied to the incoming signal.\n * @param feedback The amount of the effected signal which is fed back through the delay.\n * @example\n * var feedbackDelay = new FeedbackDelay(\""8n\"", 0.5).toDestination();\n * var tom = new Tone.MembraneSynth({\n * \t\""octaves\"" : 4,\n * \t\""pitchDecay\"" : 0.1\n * }).connect(feedbackDelay);\n * tom.triggerAttackRelease(\""A2\"",\""32n\"");\n */\nexport class FeedbackDelay extends FeedbackEffect<FeedbackDelayOptions> {\n\n\tname = \""FeedbackDelay\"";\n\n\t/**\n\t *  the delay node\n\t */\n\tprivate _delayNode: Delay;\n\n\t/**\n\t *  The delayTime of the FeedbackDelay.\n\t */\n\treadonly delayTime: Param<Time>;\n\n\tconstructor(delayTime?: Time, feedback?: NormalRange);\n\tconstructor(options?: Partial<FeedbackDelayOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(FeedbackDelay.getDefaults(), arguments, [\""delayTime\"", \""feedback\""]));\n\t\tconst options = optionsFromArguments(FeedbackDelay.getDefaults(), arguments, [\""delayTime\"", \""feedback\""]);\n\n\t\tthis._delayNode = new Delay({\n\t\t\tcontext: this.context,\n\t\t\tdelayTime: options.delayTime,\n\t\t\tmaxDelay: options.maxDelay,\n\t\t});\n\t\tthis.delayTime = this._delayNode.delayTime;\n\n\t\t// connect it up\n\t\tthis.connectEffect(this._delayNode);\n\t\treadOnly(this, \""delayTime\"");\n\t}\n\n\tstatic getDefaults(): FeedbackDelayOptions {\n\t\treturn Object.assign(FeedbackEffect.getDefaults(), {\n\t\t\tdelayTime: 0.25,\n\t\t\tmaxDelay: 1,\n\t\t});\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._delayNode.dispose();\n\t\tthis.delayTime.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioBuffer } from \""../core/context/ToneAudioBuffer\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { noOp } from \""../core/util/Interface\"";\nimport { Effect, EffectOptions } from \""./Effect\"";\n\ninterface ToneConvolverOptions extends EffectOptions {\n\tonload: () => void;\n\tnormalize: boolean;\n\turl?: string | AudioBuffer | ToneAudioBuffer;\n}\n\n/**\n * Convolver is a wrapper around the Native Web Audio\n * [ConvolverNode](http://webaudio.github.io/web-audio-api/#the-convolvernode-interface).\n * Convolution is useful for reverb and filter emulation. Read more about convolution reverb on\n * [Wikipedia](https://en.wikipedia.org/wiki/Convolution_reverb).\n *\n * @param url The URL of the impulse response or the Tone.Buffer contianing the impulse response.\n * @param onload The callback to invoke when the url is loaded.\n * @example\n * //initializing the convolver with an impulse response\n * var convolver = new Convolver(\""./path/to/ir.wav\"").toDestination();\n */\nexport class Convolver extends Effect<ToneConvolverOptions> {\n\n\tname = \""Convolver\"";\n\n\t/**\n\t *  The native ConvolverNode\n\t */\n\tprivate _convolver: ConvolverNode = this.context.createConvolver();\n\n\t/**\n\t *  The Buffer belonging to the convolver\n\t */\n\tprivate _buffer: ToneAudioBuffer;\n\n\tconstructor(url?: string | AudioBuffer | ToneAudioBuffer, onload?: () => void);\n\tconstructor(options?: Partial<ToneConvolverOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Convolver.getDefaults(), arguments, [\""url\"", \""onload\""]));\n\t\tconst options = optionsFromArguments(Convolver.getDefaults(), arguments, [\""url\"", \""onload\""]);\n\n\t\tthis._buffer = new ToneAudioBuffer(options.url, buffer => {\n\t\t\tthis.buffer = buffer;\n\t\t\toptions.onload();\n\t\t});\n\n\t\t// set if it's already loaded\n\t\tif (this._buffer.loaded) {\n\t\t\tthis.buffer = this._buffer;\n\t\t}\n\n\t\t// initially set normalization\n\t\tthis.normalize = options.normalize;\n\n\t\t// connect it up\n\t\tthis.connectEffect(this._convolver);\n\t}\n\n\tstatic getDefaults(): ToneConvolverOptions {\n\t\treturn Object.assign(Effect.getDefaults(), {\n\t\t\tnormalize : true,\n\t\t\tonload : noOp,\n\t\t});\n\t}\n\n\t/**\n\t * Load an impulse response url as an audio buffer.\n\t * Decodes the audio asynchronously and invokes\n\t * the callback once the audio buffer loads.\n\t * @param url The url of the buffer to load. filetype support depends on the browser.\n\t */\n\tasync load(url: string): Promise<void> {\n\t\tthis.buffer = await this._buffer.load(url);\n\t}\n\n\t/**\n\t *  The convolver's buffer\n\t */\n\tget buffer(): ToneAudioBuffer | null {\n\t\tif (this._buffer.length) {\n\t\t\treturn this._buffer;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\tset buffer(buffer) {\n\t\tif (buffer) {\n\t\t\tthis._buffer.set(buffer);\n\t\t}\n\t\t// if it's already got a buffer, create a new one\n\t\tif (this._convolver.buffer) {\n\t\t\t// disconnect the old one\n\t\t\tthis.effectSend.disconnect();\n\t\t\tthis._convolver.disconnect();\n\t\t\t// create and connect a new one\n\t\t\tthis._convolver = this.context.createConvolver();\n\t\t\tthis.connectEffect(this._convolver);\n\t\t}\n\t\tconst buff = this._buffer.get();\n\t\tthis._convolver.buffer = buff ? buff : null;\n\t}\n\n\t/**\n\t * The normalize property of the ConvolverNode interface is a boolean that\n\t * controls whether the impulse response from the buffer will be scaled by\n\t * an equal-power normalization when the buffer attribute is set, or not.\n\t */\n\tget normalize(): boolean {\n\t\treturn this._convolver.normalize;\n\t}\n\tset normalize(norm) {\n\t\tthis._convolver.normalize = norm;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._buffer.dispose();\n\t\tthis._convolver.disconnect();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { Positive } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\n\ninterface MergeOptions extends ToneAudioNodeOptions {\n\tchannels: Positive;\n}\n\n/**\n * Merge brings multiple mono input channels into a single multichannel output channel.\n *\n * @param channels The number of channels to merge.\n * @example\n * var merge = new Merge().toDestination();\n * //routing a sine tone in the left channel\n * //and noise in the right channel\n * var osc = new Tone.Oscillator().connect(merge.left);\n * var noise = new Tone.Noise().connect(merge.right);\n * //starting our oscillators\n * noise.start();\n * osc.start();\n */\nexport class Merge extends ToneAudioNode<MergeOptions> {\n\n\treadonly name = \""Merge\"";\n\n\t/**\n\t *  The merger node for the two channels.\n\t */\n\tprivate _merger: ChannelMergerNode;\n\n\t/**\n\t * The output is the input channels combined into a sigle (multichannel) output\n\t */\n\treadonly output: ChannelMergerNode;\n\n\t/**\n\t * Multiple input connections combine into a single output.\n\t */\n\treadonly input: ChannelMergerNode;\n\n\tconstructor(channels?: Positive);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(options?: Partial<MergeOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(Merge.getDefaults(), arguments, [\""channels\""]));\n\t\tconst options = optionsFromArguments(Merge.getDefaults(), arguments, [\""channels\""]);\n\n\t\tthis._merger = this.output = this.input = this.context.createChannelMerger(options.channels);\n\t}\n\n\tstatic getDefaults(): MergeOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tchannels: 2,\n\t\t});\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._merger.disconnect();\n\t\treturn this;\n\t}\n}\n"",""import { Merge } from \""../component/channel/Merge\"";\nimport { Gain } from \""../core/context/Gain\"";\nimport { Offline } from \""../core/context/Offline\"";\nimport { Seconds } from \""../core/type/Units\"";\nimport { optionsFromArguments } from \""../core/util/Defaults\"";\nimport { Noise } from \""../source/Noise\"";\nimport { Effect, EffectOptions } from \""./Effect\"";\n\ninterface ReverbOptions extends EffectOptions {\n\tdecay: Seconds;\n\tpreDelay: Seconds;\n}\n\n/**\n *  Simple convolution created with decaying noise.\n *  Generates an Impulse Response Buffer\n * \twith Tone.Offline then feeds the IR into ConvolverNode.\n * \tNote: the Reverb will not make any sound until [generate](#generate)\n * \thas been invoked and resolved.\n *\n * \tInspiration from [ReverbGen](https://github.com/adelespinasse/reverbGen).\n * \tCopyright (c) 2014 Alan deLespinasse Apache 2.0 License.\n *\n *  @param decay The amount of time it will reverberate for.\n */\nexport class Reverb extends Effect<ReverbOptions> {\n\n\treadonly name = \""Reverb\"";\n\n\t/**\n\t *  Convolver node\n\t */\n\tprivate _convolver: ConvolverNode = this.context.createConvolver();\n\n\t/**\n\t * The duration of the reverb\n\t */\n\tdecay: Seconds;\n\n\t/**\n\t * The amount of time before the reverb is fully ramped in.\n\t */\n\tpreDelay: Seconds;\n\n\tconstructor(decay?: Seconds);\n\t// tslint:disable-next-line: unified-signatures\n\tconstructor(options?: Partial<ReverbOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Reverb.getDefaults(), arguments, [\""decay\""]));\n\t\tconst options = optionsFromArguments(Reverb.getDefaults(), arguments, [\""decay\""]);\n\n\t\tthis.decay = options.decay;\n\t\tthis.preDelay = options.preDelay;\n\n\t\tthis.connectEffect(this._convolver);\n\t}\n\n\tstatic getDefaults(): ReverbOptions {\n\t\treturn Object.assign(Effect.getDefaults(), {\n\t\t\tdecay : 1.5,\n\t\t\tpreDelay : 0.01,\n\t\t});\n\t}\n\n\t/**\n\t * Generate the Impulse Response. Returns a promise while the IR is being generated.\n\t * @return Promise which returns this object.\n\t */\n\tasync generate(): Promise<this> {\n\t\tconst buffer = await Offline((context) => {\n\t\t\t// create a noise burst which decays over the duration\n\t\t\tconst noiseL = new Noise({ context });\n\t\t\tconst noiseR = new Noise({ context });\n\t\t\tconst merge = new Merge({ context });\n\t\t\tnoiseL.connect(merge, 0, 0);\n\t\t\tnoiseR.connect(merge, 0, 1);\n\t\t\tconst gainNode = new Gain({ context }).toDestination();\n\t\t\tmerge.connect(gainNode);\n\t\t\tnoiseL.start(0);\n\t\t\tnoiseR.start(0);\n\t\t\t// predelay\n\t\t\tgainNode.gain.setValueAtTime(0, 0);\n\t\t\tgainNode.gain.setValueAtTime(1, this.preDelay);\n\t\t\t// decay\n\t\t\tgainNode.gain.exponentialApproachValueAtTime(0, this.preDelay, this.decay);\n\t\t}, this.decay + this.preDelay);\n\t\tthis._convolver.buffer = buffer.get() as AudioBuffer;\n\t\treturn this;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._convolver.disconnect();\n\t\treturn this;\n\t}\n}\n"",""import { ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { NormalRange, PowerOfTwo } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\n\ntype AnalyserType = \""fft\"" | \""waveform\"";\n\ninterface AnalyserOptions extends ToneAudioNodeOptions {\n\tsize: PowerOfTwo;\n\ttype: AnalyserType;\n\tsmoothing: NormalRange;\n}\n\n/**\n *  Wrapper around the native Web Audio's [AnalyserNode](http://webaudio.github.io/web-audio-api/#idl-def-AnalyserNode).\n *  Extracts FFT or Waveform data from the incoming signal.\n *  @param type The return type of the analysis, either \""fft\"", or \""waveform\"".\n *  @param size The size of the FFT. This must be a power of two in the range 16 to 16384.\n */\nexport class Analyser extends ToneAudioNode<AnalyserOptions> {\n\n\treadonly name = \""Analyser\"";\n\n\tinput: AnalyserNode;\n\toutput: AnalyserNode;\n\n\t/**\n\t *  The analyser node.\n\t */\n\tprivate _analyser = this.context.createAnalyser();\n\n\t/**\n\t *  The analysis type\n\t */\n\tprivate _type!: AnalyserType;\n\n\t/**\n\t *  The buffer that the FFT data is written to\n\t */\n\tprivate _buffer!: Float32Array;\n\n\tconstructor(type?: AnalyserType, size?: number);\n\tconstructor(options?: Partial<AnalyserOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(Analyser.getDefaults(), arguments, [\""type\"", \""size\""]));\n\t\tconst options = optionsFromArguments(Analyser.getDefaults(), arguments, [\""type\"", \""size\""]);\n\t\t// set the values initially\n\t\tthis.size = options.size;\n\t\tthis.type = options.type;\n\t\tthis.input = this.output = this._analyser;\n\t}\n\n\tstatic getDefaults(): AnalyserOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tsize: 1024,\n\t\t\tsmoothing: 0.8,\n\t\t\ttype: \""fft\"" as AnalyserType,\n\t\t});\n\t}\n\n\t/**\n\t *  Run the analysis given the current settings and return the\n\t */\n\tgetValue(): Float32Array {\n\t\tif (this._type === \""fft\"") {\n\t\t\tthis._analyser.getFloatFrequencyData(this._buffer);\n\t\t} else if (this._type === \""waveform\"") {\n\t\t\tthis._analyser.getFloatTimeDomainData(this._buffer);\n\t\t}\n\t\treturn this._buffer;\n\t}\n\n\t/**\n\t *  The size of analysis. This must be a power of two in the range 16 to 16384.\n\t */\n\tget size(): PowerOfTwo {\n\t\treturn this._analyser.frequencyBinCount;\n\t}\n\tset size(size: PowerOfTwo) {\n\t\tthis._analyser.fftSize = size * 2;\n\t\tthis._buffer = new Float32Array(size);\n\t}\n\n\t/**\n\t *  The analysis function returned by analyser.getValue(), either \""fft\"" or \""waveform\"".\n\t */\n\tget type(): AnalyserType {\n\t\treturn this._type;\n\t}\n\tset type(type: AnalyserType) {\n\t\tthis.assert(type === \""waveform\"" || type === \""fft\"", `Analyser: invalid type: ${type}`);\n\t\tthis._type = type;\n\t}\n\n\t/**\n\t *  0 represents no time averaging with the last analysis frame.\n\t */\n\tget smoothing(): NormalRange {\n\t\treturn this._analyser.smoothingTimeConstant;\n\t}\n\n\tset smoothing(val: NormalRange) {\n\t\tthis._analyser.smoothingTimeConstant = val;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._analyser.disconnect();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { connectSeries, ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { Cents, Decibels, Frequency, GainFactor, Positive } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly, writable } from \""../../core/util/Interface\"";\nimport { isNumber } from \""../../core/util/TypeCheck\"";\nimport { Signal } from \""../../signal/Signal\"";\n\ninterface FilterOptions extends ToneAudioNodeOptions {\n\ttype: BiquadFilterType;\n\tfrequency: Frequency;\n\trolloff: number;\n\tQ: Positive;\n\tdetune: Cents;\n\tgain: GainFactor;\n}\n\n/**\n *  @class  Tone.Filter is a filter which allows for all of the same native methods\n *          as the [BiquadFilterNode](http://webaudio.github.io/web-audio-api/#the-biquadfilternode-interface).\n *          Tone.Filter has the added ability to set the filter rolloff at -12\n *          (default), -24 and -48.\n *\n *  @constructor\n *  @extends {Tone.AudioNode}\n *  @param frequency The cutoff frequency of the filter.\n *  @param type The type of filter.\n *  @param rolloff The drop in decibels per octave after the cutoff frequency\n *  @example\n *  var filter = new Filter(200, \""highpass\"");\n */\nexport class Filter extends ToneAudioNode<FilterOptions> {\n\n\treadonly name = \""Filter\"";\n\n\treadonly input = new Gain({ context: this.context });\n\treadonly output = new Gain({ context: this.context });\n\tprivate _filters: BiquadFilterNode[] = [];\n\n\t/**\n\t *  the rolloff value of the filter\n\t */\n\tprivate _rolloff!: number;\n\tprivate _type: BiquadFilterType;\n\n\t/**\n\t *  The Q or Quality of the filter\n\t */\n\treadonly Q: Signal<Positive>;\n\n\t/**\n\t *  The cutoff frequency of the filter.\n\t */\n\treadonly frequency: Signal<Frequency>;\n\n\t/**\n\t *  The detune parameter\n\t */\n\treadonly detune: Signal<Cents>;\n\n\t/**\n\t *  The gain of the filter, only used in certain filter types\n\t */\n\treadonly gain: Signal<Decibels>;\n\n\tconstructor(frequency?: Frequency, type?: BiquadFilterType, rolloff?: number);\n\tconstructor(options?: Partial<FilterOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(Filter.getDefaults(), arguments, [\""frequency\"", \""type\"", \""rolloff\""]));\n\t\tconst options = optionsFromArguments(Filter.getDefaults(), arguments, [\""frequency\"", \""type\"", \""rolloff\""]);\n\n\t\tthis._filters = [];\n\n\t\tthis.Q = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""positive\"",\n\t\t\tvalue: options.Q,\n\t\t});\n\t\tthis.frequency = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""frequency\"",\n\t\t\tvalue: options.frequency,\n\t\t});\n\t\tthis.detune = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""cents\"",\n\t\t\tvalue: options.detune,\n\t\t});\n\t\tthis.gain = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""decibels\"",\n\t\t\tvalue: options.gain,\n\t\t});\n\t\tthis._type = options.type;\n\t\tthis.rolloff = options.rolloff;\n\t\treadOnly(this, [\""detune\"", \""frequency\"", \""gain\"", \""Q\""]);\n\t}\n\n\tstatic getDefaults(): FilterOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tQ: 1,\n\t\t\tdetune: 0,\n\t\t\tfrequency: 350,\n\t\t\tgain: 0,\n\t\t\trolloff: -12,\n\t\t\ttype: \""lowpass\"" as BiquadFilterType,\n\t\t});\n\t}\n\n\t/**\n\t * The type of the filter. Types: \""lowpass\"", \""highpass\"",\n\t * \""bandpass\"", \""lowshelf\"", \""highshelf\"", \""notch\"", \""allpass\"", or \""peaking\"".\n\t */\n\tget type(): BiquadFilterType {\n\t\treturn this._type;\n\t}\n\tset type(type: BiquadFilterType) {\n\t\tconst types: BiquadFilterType[] = [\""lowpass\"", \""highpass\"", \""bandpass\"",\n\t\t\t\""lowshelf\"", \""highshelf\"", \""notch\"", \""allpass\"", \""peaking\""];\n\t\tthis.assert(types.indexOf(type) !== -1, `Invalid filter type: ${type}`);\n\t\tthis._type = type;\n\t\tthis._filters.forEach(filter => filter.type = type);\n\t}\n\n\t/**\n\t * The rolloff of the filter which is the drop in db\n\t * per octave. Implemented internally by cascading filters.\n\t * Only accepts the values -12, -24, -48 and -96.\n\t */\n\tget rolloff(): number | string {\n\t\treturn this._rolloff;\n\t}\n\tset rolloff(rolloff: number | string) {\n\t\tconst rolloffNum = isNumber(rolloff) ? rolloff : parseInt(rolloff, 10);\n\t\tconst possibilities = [-12, -24, -48, -96];\n\t\tlet cascadingCount = possibilities.indexOf(rolloffNum);\n\t\t// check the rolloff is valid\n\t\tthis.assert(cascadingCount !== -1, `rolloff can only be ${possibilities.join(\"", \"")}`);\n\t\tcascadingCount += 1;\n\n\t\tthis._rolloff = rolloffNum;\n\t\tthis.input.disconnect();\n\t\tthis._filters.forEach(filter => filter.disconnect());\n\n\t\tthis._filters = new Array(cascadingCount);\n\t\tfor (let count = 0; count < cascadingCount; count++) {\n\t\t\tconst filter = this.context.createBiquadFilter();\n\t\t\tfilter.type = this._type;\n\t\t\tthis.frequency.connect(filter.frequency);\n\t\t\tthis.detune.connect(filter.detune);\n\t\t\tthis.Q.connect(filter.Q);\n\t\t\tthis.gain.connect(filter.gain);\n\t\t\tthis._filters[count] = filter;\n\t\t}\n\t\tthis._internalChannels = this._filters;\n\t\tconnectSeries(this.input, ...this._internalChannels, this.output);\n\t}\n\n\t/**\n\t * Get the frequency response curve. This curve represents how the filter\n\t * responses to frequencies between 20hz-20khz.\n\t * @param  len The number of values to return\n\t * @return The frequency response curve between 20-20kHz\n\t */\n\tgetFrequencyResponse(len: number = 128): Float32Array {\n\t\t// start with all 1s\n\t\tconst totalResponse = new Float32Array(len).map(() => 1);\n\t\tconst freqValues = new Float32Array(len);\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tconst norm = Math.pow(i / len, 2);\n\t\t\tconst freq = norm * (20000 - 20) + 20;\n\t\t\tfreqValues[i] = freq;\n\t\t}\n\t\tconst magValues = new Float32Array(len);\n\t\tconst phaseValues = new Float32Array(len);\n\t\tthis._filters.forEach(() => {\n\t\t\tconst filterClone = this.context.createBiquadFilter();\n\t\t\tfilterClone.type = this._type;\n\t\t\tfilterClone.Q.value = this.Q.value;\n\t\t\tfilterClone.frequency.value = this.frequency.value as number;\n\t\t\tfilterClone.gain.value = this.gain.value as number;\n\t\t\tfilterClone.getFrequencyResponse(freqValues, magValues, phaseValues);\n\t\t\tmagValues.forEach((val, i) => {\n\t\t\t\ttotalResponse[i] *= val;\n\t\t\t});\n\t\t});\n\t\treturn totalResponse;\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._filters.forEach(filter => {\n\t\t\tfilter.disconnect();\n\t\t});\n\t\twritable(this, [\""detune\"", \""frequency\"", \""gain\"", \""Q\""]);\n\t\tthis.frequency.dispose();\n\t\tthis.Q.dispose();\n\t\tthis.detune.dispose();\n\t\tthis.gain.dispose();\n\t\treturn this;\n\t}\n}\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { Frequency, Positive } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly, writable } from \""../../core/util/Interface\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { Filter } from \""../filter/Filter\"";\n\ninterface MultibandSplitOptions extends ToneAudioNodeOptions {\n\tQ: Positive;\n\tlowFrequency: Frequency;\n\thighFrequency: Frequency;\n}\n\n/**\n *  Split the incoming signal into three bands (low, mid, high)\n *  with two crossover frequency controls.\n * ```\n *            +----------------------+\n *          +-> input < lowFrequency +------------------> low\n *          | +----------------------+\n *          |\n *          | +--------------------------------------+\n * input ---+-> lowFrequency < input < highFrequency +--> mid\n *          | +--------------------------------------+\n *          |\n *          | +-----------------------+\n *          +-> highFrequency < input +-----------------> high\n *            +-----------------------+\n * ```\n *\n *  @param lowFrequency the low/mid crossover frequency\n *  @param highFrequency the mid/high crossover frequency\n */\nexport class MultibandSplit extends ToneAudioNode<MultibandSplitOptions> {\n\n\treadonly name = \""MultibandSplit\"";\n\n\t/**\n\t *  the input\n\t */\n\treadonly input = new Gain({ context: this.context });\n\n\t/**\n\t * no output node, use either low, mid or high outputs\n\t */\n\treadonly output = undefined;\n\n\t/**\n\t *  The low band.\n\t */\n\treadonly low = new Filter({\n\t\tcontext: this.context,\n\t\tfrequency: 0,\n\t\ttype: \""lowpass\"",\n\t});\n\n\t/**\n\t *  the lower filter of the mid band\n\t */\n\tprivate _lowMidFilter = new Filter({\n\t\tcontext: this.context,\n\t\tfrequency: 0,\n\t\ttype: \""highpass\"",\n\t});\n\n\t/**\n\t *  The mid band output.\n\t */\n\treadonly mid = new Filter({\n\t\tcontext: this.context,\n\t\tfrequency: 0,\n\t\ttype: \""lowpass\"",\n\t});\n\n\t/**\n\t *  The high band output.\n\t */\n\treadonly high = new Filter({\n\t\tcontext: this.context,\n\t\tfrequency: 0,\n\t\ttype: \""highpass\"",\n\t});\n\n\t/**\n\t *  The low/mid crossover frequency.\n\t */\n\treadonly lowFrequency: Signal<Frequency>;\n\n\t/**\n\t *  The mid/high crossover frequency.\n\t */\n\treadonly highFrequency: Signal<Frequency>;\n\n\tprotected _internalChannels = [this.low, this.mid, this.high];\n\n\t/**\n\t *  The Q or Quality of the filter\n\t */\n\treadonly Q: Signal<Positive>;\n\n\tconstructor(lowFrequency?: Frequency, highFrequency?: Frequency);\n\tconstructor(options?: Partial<MultibandSplitOptions>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(MultibandSplit.getDefaults(), arguments, [\""lowFrequency\"", \""highFrequency\""]));\n\t\tconst options = optionsFromArguments(MultibandSplit.getDefaults(), arguments, [\""lowFrequency\"", \""highFrequency\""]);\n\n\t\tthis.lowFrequency = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""frequency\"",\n\t\t\tvalue: options.lowFrequency,\n\t\t});\n\n\t\tthis.highFrequency = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""frequency\"",\n\t\t\tvalue: options.highFrequency,\n\t\t});\n\n\t\tthis.Q = new Signal({\n\t\t\tcontext: this.context,\n\t\t\tunits: \""positive\"",\n\t\t\tvalue: options.Q,\n\t\t});\n\n\t\tthis.input.fan(this.low, this.high);\n\t\tthis.input.chain(this._lowMidFilter, this.mid);\n\t\t// the frequency control signal\n\t\tthis.lowFrequency.fan(this.low.frequency, this._lowMidFilter.frequency);\n\t\tthis.highFrequency.fan(this.mid.frequency, this.high.frequency);\n\t\t// the Q value\n\t\tthis.Q.connect(this.low.Q);\n\t\tthis.Q.connect(this._lowMidFilter.Q);\n\t\tthis.Q.connect(this.mid.Q);\n\t\tthis.Q.connect(this.high.Q);\n\n\t\treadOnly(this, [\""high\"", \""mid\"", \""low\"", \""highFrequency\"", \""lowFrequency\""]);\n\t}\n\n\tstatic getDefaults(): MultibandSplitOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tQ: 1,\n\t\t\thighFrequency: 2500,\n\t\t\tlowFrequency: 400,\n\t\t});\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\twritable(this, [\""high\"", \""mid\"", \""low\"", \""highFrequency\"", \""lowFrequency\""]);\n\t\tthis.low.dispose();\n\t\tthis._lowMidFilter.dispose();\n\t\tthis.mid.dispose();\n\t\tthis.high.dispose();\n\t\tthis.lowFrequency.dispose();\n\t\tthis.highFrequency.dispose();\n\t\tthis.Q.dispose();\n\t\treturn this;\n\t}\n\n}\n"",""import { Gain } from \""../../core/context/Gain\"";\nimport { Param } from \""../../core/context/Param\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { Cents, Decibels, Frequency, GainFactor, Positive } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly, writable } from \""../../core/util/Interface\"";\nimport { Signal } from \""../../signal/Signal\"";\nimport { MultibandSplit } from \""../channel/MultibandSplit\"";\n\ninterface EQ3Options extends ToneAudioNodeOptions {\n\tlow: Decibels;\n\tmid: Decibels;\n\thigh: Decibels;\n\tlowFrequency: Frequency;\n\thighFrequency: Frequency;\n}\n\nexport class EQ3 extends ToneAudioNode<EQ3Options> {\n\n\treadonly name = \""EQ3\"";\n\n\t/**\n\t *  the input\n\t */\n\treadonly input: MultibandSplit;\n\n\t/**\n\t *  the output\n\t */\n\treadonly output = new Gain({ context: this.context });\n\n\tprivate _multibandSplit: MultibandSplit;\n\n\t/**\n\t *  The gain for the lower signals\n\t */\n\tprivate _lowGain: Gain<Decibels>;\n\n\t/**\n\t *  The gain for the mid signals\n\t */\n\tprivate _midGain: Gain<Decibels>;\n\n\t/**\n\t *  The gain for the high signals\n\t */\n\tprivate _highGain: Gain<Decibels>;\n\n\t/**\n\t * The gain in decibels of the low part\n\t */\n\treadonly low: Param<Decibels>;\n\n\t/**\n\t * The gain in decibels of the mid part\n\t */\n\treadonly mid: Param<Decibels>;\n\n\t/**\n\t * The gain in decibels of the high part\n\t */\n\treadonly high: Param<Decibels>;\n\n\t/**\n\t *  The Q value for all of the filters.\n\t */\n\treadonly Q: Signal<Positive>;\n\n\t/**\n\t *  The low/mid crossover frequency.\n\t */\n\treadonly lowFrequency: Signal<Frequency>;\n\n\t/**\n\t *  The mid/high crossover frequency.\n\t */\n\treadonly highFrequency: Signal<Frequency>;\n\n\tprotected _internalChannels: ToneAudioNode[] = [];\n\n\tconstructor(lowLevel?: Decibels, midLevel?: Decibels, highLevel?: Decibels);\n\tconstructor(options: Partial<EQ3Options>);\n\tconstructor() {\n\t\tsuper(optionsFromArguments(EQ3.getDefaults(), arguments, [\""low\"", \""mid\"", \""high\""]));\n\t\tconst options = optionsFromArguments(EQ3.getDefaults(), arguments, [\""low\"", \""mid\"", \""high\""]);\n\n\t\tthis.input = this._multibandSplit = new MultibandSplit({\n\t\t\tcontext: this.context,\n\t\t\thighFrequency: options.highFrequency,\n\t\t\tlowFrequency: options.lowFrequency,\n\t\t});\n\n\t\tthis._lowGain = new Gain({\n\t\t\tcontext: this.context,\n\t\t\tgain: options.low,\n\t\t\tunits: \""decibels\"",\n\t\t});\n\n\t\tthis._midGain = new Gain({\n\t\t\tcontext: this.context,\n\t\t\tgain: options.mid,\n\t\t\tunits: \""decibels\"",\n\t\t});\n\n\t\tthis._highGain = new Gain({\n\t\t\tcontext: this.context,\n\t\t\tgain: options.high,\n\t\t\tunits: \""decibels\"",\n\t\t});\n\n\t\tthis.low = this._lowGain.gain;\n\t\tthis.mid = this._midGain.gain;\n\t\tthis.high = this._highGain.gain;\n\t\tthis.Q = this._multibandSplit.Q;\n\t\tthis.lowFrequency = this._multibandSplit.lowFrequency;\n\t\tthis.highFrequency\t= this._multibandSplit.highFrequency;\n\n\t\t// the frequency bands\n\t\tthis._multibandSplit.low.chain(this._lowGain, this.output);\n\t\tthis._multibandSplit.mid.chain(this._midGain, this.output);\n\t\tthis._multibandSplit.high.chain(this._highGain, this.output);\n\n\t\treadOnly(this, [\""low\"", \""mid\"", \""high\"", \""lowFrequency\"", \""highFrequency\""]);\n\t\tthis._internalChannels = [this._multibandSplit];\n\t}\n\n\tstatic getDefaults(): EQ3Options {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\thigh : 0,\n\t\t\thighFrequency : 2500,\n\t\t\tlow : 0,\n\t\t\tlowFrequency : 400,\n\t\t\tmid : 0,\n\t\t});\n\t}\n\n\t/**\n\t *  Clean up.\n\t */\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\twritable(this, [\""low\"", \""mid\"", \""high\"", \""lowFrequency\"", \""highFrequency\""]);\n\t\tthis._multibandSplit.dispose();\n\t\tthis.lowFrequency.dispose();\n\t\tthis.highFrequency.dispose();\n\t\tthis._lowGain.dispose();\n\t\tthis._midGain.dispose();\n\t\tthis._highGain.dispose();\n\t\tthis.low.dispose();\n\t\tthis.mid.dispose();\n\t\tthis.high.dispose();\n\t\tthis.Q.dispose();\n\t\treturn this;\n\t}\n\n}\n"",""import { Param } from \""../../core/context/Param\"";\nimport { ToneAudioNode, ToneAudioNodeOptions } from \""../../core/context/ToneAudioNode\"";\nimport { Decibels, Positive, Time } from \""../../core/type/Units\"";\nimport { optionsFromArguments } from \""../../core/util/Defaults\"";\nimport { readOnly } from \""../../core/util/Interface\"";\n\ninterface CompressorOptions extends ToneAudioNodeOptions {\n\tattack: Time;\n\tknee: Decibels;\n\tratio: Positive;\n\trelease: Time;\n\tthreshold: Decibels;\n}\n\n/**\n * Compressor is a thin wrapper around the Web Audio\n * [DynamicsCompressorNode](http://webaudio.github.io/web-audio-api/#the-dynamicscompressornode-interface).\n * Compression reduces the volume of loud sounds or amplifies quiet sounds\n * by narrowing or \""compressing\"" an audio signal's dynamic range.\n * Read more on [Wikipedia](https://en.wikipedia.org/wiki/Dynamic_range_compression).\n *\n * @param threshold The value above which the compression starts to be applied.\n * @param ratio The gain reduction ratio.\n * @example\n * var comp = new Compressor(-30, 3);\n */\nexport class Compressor extends ToneAudioNode<CompressorOptions> {\n\n\treadonly name = \""Compressor\"";\n\n\t/**\n\t *  the compressor node\n\t */\n\tprivate _compressor: DynamicsCompressorNode = this.context.createDynamicsCompressor();\n\tinput = this._compressor;\n\toutput = this._compressor;\n\n\t/**\n\t *  The decibel value above which the compression will start taking effect.\n\t */\n\treadonly threshold: Param<Decibels>;\n\n\t/**\n\t *  The amount of time (in seconds) to reduce the gain by 10dB.\n\t */\n\treadonly attack: Param<Time>;\n\n\t/**\n\t * The amount of time (in seconds) to increase the gain by 10dB.\n\t */\n\treadonly release: Param<Time>;\n\n\t/**\n\t * A decibel value representing the range above the threshold where the\n\t * curve smoothly transitions to the \""ratio\"" portion.\n\t */\n\treadonly knee: Param<Decibels>;\n\n\t/**\n\t * The amount of dB change in input for a 1 dB change in output.\n\t */\n\treadonly ratio: Param<Decibels>;\n\n\tconstructor(threshold?: Decibels, ratio?: Positive);\n\tconstructor(options?: Partial<CompressorOptions>);\n\tconstructor() {\n\n\t\tsuper(optionsFromArguments(Compressor.getDefaults(), arguments, [\""treshold\"", \""ratio\""]));\n\t\tconst options = optionsFromArguments(Compressor.getDefaults(), arguments, [\""treshold\"", \""ratio\""]);\n\n\t\tthis.threshold = new Param({\n\t\t\tcontext: this.context,\n\t\t\tconvert : false,\n\t\t\tparam : this._compressor.threshold,\n\t\t\tunits : \""decibels\"",\n\t\t\tvalue: options.threshold,\n\t\t});\n\n\t\tthis.attack = new Param({\n\t\t\tcontext: this.context,\n\t\t\tparam: this._compressor.attack,\n\t\t\tunits: \""time\"",\n\t\t\tvalue: options.attack,\n\t\t});\n\n\t\tthis.release = new Param({\n\t\t\tcontext: this.context,\n\t\t\tparam: this._compressor.release,\n\t\t\tunits: \""time\"",\n\t\t\tvalue: options.release,\n\t\t});\n\n\t\tthis.knee = new Param({\n\t\t\tcontext: this.context,\n\t\t\tconvert : false,\n\t\t\tparam : this._compressor.knee,\n\t\t\tunits : \""decibels\"",\n\t\t\tvalue: options.knee,\n\t\t});\n\n\t\tthis.ratio = new Param({\n\t\t\tcontext: this.context,\n\t\t\tconvert : false,\n\t\t\tparam : this._compressor.ratio,\n\t\t\tunits : \""positive\"",\n\t\t\tvalue: options.ratio,\n\t\t});\n\n\t\t// set the defaults\n\t\treadOnly(this, [\""knee\"", \""release\"", \""attack\"", \""ratio\"", \""threshold\""]);\n\t}\n\n\tstatic getDefaults(): CompressorOptions {\n\t\treturn Object.assign(ToneAudioNode.getDefaults(), {\n\t\t\tattack : 0.003,\n\t\t\tknee : 30,\n\t\t\tratio : 12,\n\t\t\trelease : 0.25,\n\t\t\tthreshold : -24,\n\t\t});\n\t}\n\n\t/**\n\t * A read-only decibel value for metering purposes, representing the current amount of gain\n\t * reduction that the compressor is applying to the signal. If fed no signal the value will be 0 (no gain reduction).\n\t */\n\tget reduction(): number {\n\t\treturn this._compressor.reduction;\n\t}\n\n\tdispose(): this {\n\t\tsuper.dispose();\n\t\tthis._compressor.disconnect();\n\t\tthis.attack.dispose();\n\t\tthis.release.dispose();\n\t\tthis.threshold.dispose();\n\t\tthis.ratio.dispose();\n\t\tthis.knee.dispose();\n\t\treturn this;\n\t}\n}\n"",""export { getContext, setContext } from \""./core/Global\"";\nexport * from \""./core/index\"";\nexport * from \""./source/index\"";\nexport * from \""./signal/index\"";\nexport * from \""./instrument/index\"";\nexport * from \""./event/index\"";\nexport * from \""./effect/index\"";\nexport * from \""./component/index\"";\nimport { Seconds } from \""./core/type/Units\"";\n\nimport { getContext } from \""./core/Global\"";\nexport { start } from \""./core/Global\"";\n/**\n *  The current audio context time\n */\nexport function now(): Seconds {\n\treturn getContext().now();\n}\n\n/**\n * The Transport object belonging to the global Tone.js Context\n */\n// tslint:disable-next-line: variable-name\nexport const Transport = getContext().transport;\n\n/**\n * The Destination (output) belonging to the global Tone.js Context\n */\n// tslint:disable-next-line: variable-name\nexport const Destination = getContext().destination;\n""],""sourceRoot"":""""}"
f5cbfef1c9f318a3a24dc8e71aabb6d60bf30c5c,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
a1a39117855765e570e481ef03118cc1fa5ac970,3720836,  // https://stackoverflow.com/questions/3720836/escaping-javascript-css-between-script-style-tags-insights-on-a-potenti
0840949b5ddc098df8460fd5d04afc13b92aaf39,103857,"<p>For more bash prompt hacking, this <a href=""http://www.reddit.com/r/programming/comments/697cu/bash_users_what_do_you_have_for_your_ps1/"">Reddit topic</a> contains a lot of good inspiration, and this <a href=""http://stackoverflow.com/questions/103857/what-is-your-favorite-bash-prompt"">Stack Overflow</a> too.</p>"
94fdaa313179e0a8d07438024a68285f50896d38,321370,        //https://stackoverflow.com/questions/321370/how-can-i-convert-a-hex-string-to-a-byte-array
d013e2e97f3c2a701f732e6d5eda48eba8920597,23278460,"{""version"":3,""sources"":[""?"",""../client/js/util.js"",""../client/js/export.js"",""../client/js/error/error.js"",""../client/js/version.js"",""../client/js/features.js"",""../client/js/promise.js"",""../client/js/blob-proxy.js"",""../client/js/button.js"",""../client/js/upload-data.js"",""../client/js/uploader.basic.api.js"",""../client/js/uploader.basic.js"",""../client/js/ajax.requester.js"",""../client/js/upload-handler/upload.handler.js"",""../client/js/upload-handler/upload.handler.controller.js"",""../client/js/window.receive.message.js"",""../client/js/upload-handler/form.upload.handler.js"",""../client/js/upload-handler/xhr.upload.handler.js"",""../client/js/deletefile.ajax.requester.js"",""../client/js/image-support/megapix-image.js"",""../client/js/image-support/image.js"",""../client/js/image-support/exif.js"",""../client/js/identify.js"",""../client/js/image-support/validation.image.js"",""../client/js/session.js"",""../client/js/session.ajax.requester.js"",""../client/js/image-support/scaler.js"",""../client/js/third-party/ExifRestorer.js"",""../client/js/total-progress.js"",""../client/js/paste.js"",""../client/js/form-support.js"",""../client/js/third-party/crypto-js/core.js"",""../client/js/third-party/crypto-js/enc-base64.js"",""../client/js/third-party/crypto-js/hmac.js"",""../client/js/third-party/crypto-js/sha1.js"",""../client/js/third-party/crypto-js/sha256.js"",""../client/js/third-party/crypto-js/lib-typedarrays.js"",""../client/js/s3/util.js"",""../client/js/non-traditional-common/uploader.basic.api.js"",""../client/js/s3/uploader.basic.js"",""../client/js/s3/request-signer.js"",""../client/js/uploadsuccess.ajax.requester.js"",""../client/js/s3/multipart.initiate.ajax.requester.js"",""../client/js/s3/multipart.complete.ajax.requester.js"",""../client/js/s3/multipart.abort.ajax.requester.js"",""../client/js/s3/s3.xhr.upload.handler.js"",""../client/js/s3/s3.form.upload.handler.js""],""names"":[""global"",""qq"",""element"",""hide"",""style"",""display"",""this"",""attach"",""type"",""fn"",""addEventListener"",""attachEvent"",""detach"",""removeEventListener"",""detachEvent"",""contains"",""descendant"",""compareDocumentPosition"",""insertBefore"",""elementB"",""parentNode"",""remove"",""removeChild"",""css"",""styles"",""Error"",""opacity"",""filter"",""Math"",""round"",""extend"",""hasClass"",""name"",""considerParent"",""re"",""RegExp"",""test"",""className"",""addClass"",""removeClass"",""replace"",""getByClass"",""first"",""candidates"",""result"",""querySelector"",""querySelectorAll"",""getElementsByTagName"",""each"",""idx"",""val"",""push"",""getFirstByClass"",""children"",""child"",""firstChild"",""nodeType"",""nextSibling"",""setText"",""text"",""innerText"",""textContent"",""clearText"",""hasAttribute"",""attrName"",""attrVal"",""exec"",""getAttribute"",""undefined"",""canvasToBlob"",""canvas"",""mime"",""quality"",""dataUriToBlob"",""toDataURL"",""dataUri"",""arrayBuffer"",""byteString"",""intArray"",""mimeString"",""createBlob"",""data"",""BlobBuilder"",""window"",""WebKitBlobBuilder"",""MozBlobBuilder"",""MSBlobBuilder"",""blobBuilder"",""append"",""getBlob"",""Blob"",""split"",""indexOf"",""atob"",""decodeURI"",""ArrayBuffer"",""length"",""Uint8Array"",""character"",""charCodeAt"",""log"",""message"",""level"",""console"",""isObject"",""variable"",""Object"",""prototype"",""toString"",""call"",""isFunction"",""isArray"",""value"",""buffer"",""constructor"",""isItemList"",""maybeItemList"",""isNodeList"",""maybeNodeList"",""item"",""namedItem"",""isString"",""maybeString"",""trimStr"",""string"",""String"",""trim"",""format"",""str"",""args"",""Array"",""slice"",""arguments"",""newStr"",""nextIdxToReplace"",""substring"",""isFile"",""maybeFile"",""File"",""isFileList"",""maybeFileList"",""FileList"",""isFileOrInput"",""maybeFileOrInput"",""isInput"",""maybeInput"",""notFile"",""evaluateType"",""normalizedType"",""toLowerCase"",""HTMLInputElement"",""tagName"",""isBlob"",""maybeBlob"",""isXhrUploadSupported"",""input"",""document"",""createElement"",""multiple"",""FormData"",""createXhrInstance"",""upload"",""XMLHttpRequest"",""ActiveXObject"",""error"",""isFolderDropSupported"",""dataTransfer"",""items"",""webkitGetAsEntry"",""isFileChunkingSupported"",""androidStock"",""webkitSlice"",""mozSlice"",""sliceBlob"",""fileOrBlob"",""start"",""end"",""arrayBufferToHex"",""bytesAsHex"",""bytes"",""byt"",""byteAsHexStr"",""readBlobToHex"",""blob"",""startOffset"",""initialBlob"",""fileReader"",""FileReader"",""promise"",""Promise"",""onload"",""success"",""onerror"",""failure"",""readAsArrayBuffer"",""second"",""extendNested"",""prop"",""override"",""target"",""sourceFn"",""super_"",""source"",""srcPropName"",""srcPropVal"",""arr"",""elt"",""from"",""len"",""hasOwnProperty"",""getUniqueId"",""c"",""r"",""random"",""ie"",""navigator"",""userAgent"",""ie7"",""ie8"",""ie10"",""ie11"",""edge"",""safari"",""vendor"",""chrome"",""opera"",""firefox"",""windows"",""platform"",""android"",""ios6"",""ios"",""ios7"",""ios8"",""ios800"",""iosChrome"",""iosSafari"",""iosSafariWebView"",""preventDefault"",""e"",""returnValue"",""toElement"",""div"",""html"",""innerHTML"",""iterableItem"",""callback"",""keyOrIndex"",""retVal"",""Storage"",""key"",""getItem"",""charAt"",""bind"",""oldFunc"",""context"",""newArgs"",""concat"",""apply"",""obj2url"",""obj"",""temp"",""prefixDone"",""uristrings"",""prefix"",""add"",""nextObj"",""i"",""nextTemp"",""encodeURIComponent"",""join"",""obj2FormData"",""formData"",""arrayKeyName"",""obj2Inputs"",""form"",""setAttribute"",""appendChild"",""parseJson"",""json"",""JSON"",""parse"",""eval"",""getExtension"",""filename"",""extIdx"",""lastIndexOf"",""substr"",""getFilename"",""blobOrFileInput"",""fileName"",""DisposeSupport"",""disposers"",""dispose"",""disposer"",""shift"",""addDisposer"",""disposeFunction"",""define"",""amd"",""module"",""exports"",""version"",""supportedFeatures"",""testSupportsFileInputElement"",""tempInput"",""supported"",""disabled"",""ex"",""isChrome14OrHigher"",""match"",""isCrossOriginXhrSupported"",""withCredentials"",""isXdrSupported"",""XDomainRequest"",""isCrossOriginAjaxSupported"",""isFolderSelectionSupported"",""webkitdirectory"",""isLocalStorageSupported"",""localStorage"",""setItem"",""isDragAndDropSupported"",""span"",""supportsUploading"",""supportsUploadingBlobs"",""supportsFileDrop"",""supportsAjaxFileUploading"",""supportsFolderDrop"",""supportsChunking"",""supportsResume"",""supportsUploadViaPaste"",""supportsUploadCors"",""supportsDeleteFileXdr"",""supportsDeleteFileCorsXhr"",""supportsDeleteFileCors"",""supportsFolderSelection"",""supportsImagePreviews"",""supportsUploadProgress"",""postMessage"",""ajaxUploading"",""blobUploading"",""canDetermineSize"",""chunking"",""deleteFileCors"",""deleteFileCorsXdr"",""deleteFileCorsXhr"",""dialogElement"",""HTMLDialogElement"",""fileDrop"",""folderDrop"",""folderSelection"",""imagePreviews"",""imageValidation"",""itemSizeValidation"",""pause"",""progressBar"",""resume"",""scaling"",""tiffPreviews"",""unlimitedScaledImageSize"",""uploading"",""uploadCors"",""uploadCustomHeaders"",""uploadNonMultipart"",""uploadViaPaste"",""isGenericPromise"",""maybePromise"",""then"",""successArgs"",""failureArgs"",""successCallbacks"",""failureCallbacks"",""doneCallbacks"",""state"",""onSuccess"",""onFailure"",""done"",""BlobProxy"",""referenceBlob"",""onCreate"",""create"",""UploadButton"",""o"",""createInput"",""BUTTON_ID_ATTR_NAME"",""buttonId"",""options"",""title"",""self"",""setMultiple"",""folders"",""acceptFiles"",""position"",""right"",""top"",""fontFamily"",""fontSize"",""margin"",""padding"",""cursor"",""height"",""disposeSupport"",""onChange"",""hoverClass"",""focusClass"",""ios8BrowserCrashWorkaround"",""overflow"",""direction"",""getInput"",""getButtonId"",""isMultiple"",""optInput"",""removeAttribute"",""setAcceptFiles"",""reset"",""UploadData"",""uploaderProxy"",""getDataByIds"",""idOrIds"",""entries"",""id"",""getDataByUuids"",""uuids"",""uuid"",""byUuid"",""getDataByStatus"",""status"",""statusResults"",""statuses"",""index"",""statusEnum"",""statusResultIndexes"",""byStatus"",""dataIndex"",""byProxyGroupId"",""byBatchId"",""addFile"",""spec"",""SUBMITTING"",""originalName"",""size"",""batchId"",""proxyGroupId"",""onBeforeStatusChange"",""onStatusChange"",""retrieve"",""optionalFilter"",""setStatus"",""newStatus"",""oldStatus"",""byStatusOldStatusIndex"",""splice"",""uuidChanged"",""newUuid"",""oldUuid"",""updateName"",""newName"",""updateSize"",""newSize"",""setParentId"",""targetId"",""parentId"",""getIdsInProxyGroup"",""getIdsInBatch"",""SUBMITTED"",""REJECTED"",""QUEUED"",""CANCELED"",""PAUSED"",""UPLOADING"",""UPLOAD_RETRYING"",""UPLOAD_SUCCESSFUL"",""UPLOAD_FAILED"",""DELETE_FAILED"",""DELETING"",""DELETED"",""basePublicApi"",""addBlobs"",""blobDataOrArray"",""params"",""endpoint"",""addFiles"",""addInitialFiles"",""cannedFileList"",""cannedFile"",""_addCannedFile"",""_maybeHandleIos8SafariWorkaround"",""_storedIds"",""_currentBatchId"",""processBlob"",""_handleNewFile"",""_options"",""blobs"",""defaultName"",""verifiedFiles"",""processBlobData"",""blobData"",""processCanvas"",""processCanvasData"",""canvasData"",""normalizedQuality"",""processFileOrInput"",""fileOrInput"",""files"",""file"",""normalizeData"",""fileContainer"",""_prepareItemsForUpload"",""cancel"",""_handler"",""cancelAll"",""storedIdsCopy"",""storedFileId"",""clearStoredFiles"",""continueUpload"",""uploadData"",""_uploadData"",""enabled"",""getName"",""_uploadFile"",""deleteFile"",""_onSubmitDelete"",""doesExist"",""fileOrBlobId"",""isValid"",""drawThumbnail"",""fileId"",""imgOrCanvas"",""maxSize"",""fromServer"",""customResizeFunction"",""fileOrUrl"",""promiseToReturn"",""_imageGenerator"",""_thumbnailUrls"",""scale"",""getFile"",""container"",""generate"",""modifiedContainer"",""reason"",""getButton"",""_getButton"",""_buttonIdsForFileIds"",""getEndpoint"",""_endpointStore"",""get"",""getInProgress"",""getParentId"",""uploadDataEntry"",""getUploads"",""getResumableFilesData"",""getSize"",""getNetUploads"",""_netUploaded"",""getRemainingAllowedItems"",""allowedItems"",""_currentItemLimit"",""_netUploadedOrQueued"",""getUuid"",""isResumable"",""hasResumeRecord"",""debug"",""pauseUpload"",""removeFileRef"",""expunge"",""_autoRetries"",""_retryTimeouts"",""_preventRetries"",""_buttons"",""button"",""_paramsStore"",""_pasteHandler"",""session"",""refreshOnReset"",""_refreshSessionData"",""_succeededSinceLastAllComplete"",""_failedSinceLastAllComplete"",""_totalProgress"",""_customResumeDataStore"",""retry"",""_manualRetry"",""scaleImage"",""specs"",""Scaler"",""setCustomHeaders"",""headers"",""_customHeadersStore"",""set"",""setCustomResumeData"",""setDeleteFileCustomHeaders"",""_deleteFileCustomHeadersStore"",""setDeleteFileEndpoint"",""_deleteFileEndpointStore"",""setDeleteFileParams"",""_deleteFileParamsStore"",""setEndpoint"",""setForm"",""elementOrId"",""_updateFormSupportAndParams"",""setItemLimit"",""newItemLimit"",""setName"",""setParams"",""setUuid"",""_onDeleteComplete"",""errorMessage"",""uploadStoredFiles"",""_itemError"",""_uploadStoredFiles"",""basePrivateApi"",""sessionData"",""deleteFileEndpoint"",""deleteFileParams"",""thumbnailUrl"",""_annotateWithButtonId"",""associatedInput"",""qqButtonId"",""_getButtonId"",""_batchError"",""callbacks"",""onError"",""_createDeleteHandler"",""DeleteFileAjaxRequester"",""method"",""toUpperCase"",""maxConnections"",""uuidParamName"",""request"",""uuidName"",""customHeaders"",""paramsStore"",""endpointStore"",""cors"",""onDelete"",""_onDelete"",""onDeleteComplete"",""xhrOrXdr"",""isError"",""_createPasteHandler"",""PasteSupport"",""targetElement"",""paste"",""pasteReceived"",""_handleCheckedCallback"",""onPasteReceived"",""_handlePasteSuccess"",""identifier"",""_createStore"",""initialValue"",""_readOnlyValues_"",""store"",""catchall"",""perIdReadOnlyValues"",""readOnlyValues"",""copy"",""orig"",""getReadOnlyValues"",""includeReadOnlyValues"",""existing"",""values"",""addReadOnly"",""_createUploadDataTracker"",""_onUploadStatusChange"",""_maybeAllComplete"",""setTimeout"",""_createUploadButton"",""allowMultiple"",""workarounds"",""iosEmptyVideos"",""_isAllowedExtension"",""allowedExtensions"",""accept"",""validation"",""classes"",""buttonFocus"",""buttonHover"",""ios8BrowserCrash"",""inputName"",""_onInputChange"",""fileInputTitle"",""_disposeSupport"",""_createUploadHandler"",""additionalOptions"",""namespace"",""lastOnProgress"",""preventRetryParam"",""preventRetryResponseProperty"",""onProgress"",""loaded"",""total"",""_onProgress"",""onComplete"",""xhr"",""_onComplete"",""onCancel"",""cancelFinalizationEffort"",""_onCancel"",""onUploadPrep"",""_onUploadPrep"",""onUpload"",""_onUpload"",""onUploadResult"",""onUploadChunk"",""chunkData"",""_onUploadChunk"",""onUploadChunkResult"",""partIndex"",""onUploadChunkSuccess"",""onResume"",""customResumeData"",""onAutoRetry"",""responseJSON"",""_onAutoRetry"",""onUuidChanged"",""setSize"",""_setSize"",""getDataByUuid"",""isQueued"",""isInProgress"",""getCustomResumeData"",""_getCustomResumeData"",""UploadHandlerController"",""_fileOrBlobRejected"",""_formatSize"",""sizeSymbols"",""max"",""toFixed"",""_generateExtraButtonSpecs"",""_extraButtonSpecs"",""extraButtons"",""extraButtonOptionEntry"",""extraButtonSpec"",""_initExtraButton"",""extraButtonsSpec"",""_defaultButtonId"",""buttonOrFileInputOrFile"",""inputs"",""fileInput"",""fileBlobOrInput"",""_getNotFinished"",""_getValidationBase"",""_getValidationDescriptor"",""fileWrapper"",""_getValidationDescriptors"",""fileWrappers"",""fileDescriptors"",""_handleCameraAccess"",""camera"",""optionRoot"",""details"",""callbackRetVal"",""successParam"",""newFileWrapperList"",""actualFile"",""handler"",""_customNewFileHandler"",""_handleNewFileGeneric"",""addFileToHandler"",""_trackButton"",""fileList"",""extSuppliedName"",""extension"",""_handleDeleteSuccess"",""_handleDeleteFailed"",""_initFormSupportAndParams"",""_formSupport"",""FormSupport"",""attachedToForm"",""getFormInputsAsObject"",""autoUpload"",""newAutoUpload"",""newEndpoint"",""_isDeletePossible"",""expected"",""allowXdr"",""allowed"",""valid"",""allowedExt"",""extRegex"",""code"",""maybeNameOrNames"",""replacement"",""extensionsForMessage"",""placeholderMatch"",""messages"",""names"",""validationBase"",""allowedExtension"",""formatFileName"",""sizeLimit"",""minSizeLimit"",""placeholder"",""_onBeforeManualRetry"",""notFinished"",""_onAllComplete"",""ios8SafariUploads"",""alert"",""unsupportedBrowserIos8Safari"",""_maybeParseAndSendUploadError"",""response"",""errorReason"",""defaultResponseError"",""_maybeProcessNextItemAfterOnValidateCallback"",""validItem"",""stopOnFirstInvalidFile"",""validationDescriptor"",""onValidate"",""_onValidateCallbackSuccess"",""_onValidateCallbackFailure"",""successful"",""failed"",""onAllComplete"",""_shouldAutoRetry"",""retryWaitPeriod"",""autoAttemptDelay"",""_onBeforeAutoRetry"",""itemLimit"",""onManualRetry"",""clearTimeout"",""storedItemIndex"",""fileIndex"",""onIndividualProgress"",""_onSubmit"",""_onSubmitCallbackSuccess"",""_onSubmitted"",""onSubmitted"",""_storeForLater"",""onSuccessCallback"",""additionalMandatedParams"",""adjustedOnSuccessCallback"",""onSubmitDelete"",""_deleteHandler"",""sendDelete"",""_onTotalProgress"",""onTotalProgress"",""_onValidateBatchCallbackFailure"",""_onValidateBatchCallbackSuccess"",""validationDescriptors"",""proposedNetFilesUploadedOrQueued"",""tooManyItemsError"",""nextIndex"",""_validateFileOrBlobData"",""_upload"",""onValidateBatch"",""_preventLeaveInProgress"",""event"",""onLeave"",""Session"",""_session"",""addFileRecord"",""refresh"",""_sessionRequestComplete"",""onSessionRequestComplete"",""onNewSize"",""enableAuto"",""maxAutoAttempts"",""formElementOrId"",""onSubmit"",""idToUpload"",""stillSubmitting"",""validityChecker"",""allowEmpty"",""ImageValidation"",""validate"",""image"",""errorCode"",""_wrapCallbacks"",""safeCallback"",""errorMsg"",""exception"",""callbackName"",""callbackFunc"",""FineUploaderBasic"",""disableCancelForFormUploads"",""warnBeforeUnload"",""filenameParam"",""forceMultipart"",""omitDefaultParams"",""paramsInBody"",""requireSuccessJson"",""totalFileSizeName"",""maxHeight"",""maxWidth"",""minHeight"",""minWidth"",""maybeXhr"",""maybeXhrOrXdr"",""attemptNumber"",""fileOrBlobData"",""typeError"",""sizeError"",""minSizeError"",""emptyError"",""noFilesError"",""maxHeightImageError"",""maxWidthImageError"",""minHeightImageError"",""minWidthImageError"",""retryFailTooManyItems"",""concurrent"",""mandatory"",""paramNames"",""partByteOffset"",""chunkSize"",""totalFileSize"",""totalParts"",""partSize"",""jsonPayload"",""resetOnStatus"",""recordsExpireIn"",""resuming"",""customKeys"",""fileOrBlobName"",""sendCredentials"",""interceptSubmit"",""customResizer"",""sendOriginal"",""orient"",""defaultType"",""defaultQuality"",""failureText"",""includeExif"",""sizes"",""ImageGenerator"",""_scaler"",""handleNewFile"",""TotalProgress"",""entry"",""AjaxRequester"",""isSimpleMethod"",""containsNonSimpleHeaders"",""containsNonSimple"",""header"",""isXdr"",""getCorsAjaxTransport"",""ontimeout"",""onprogress"",""getXhrOrXdr"",""suppliedXhr"",""requestData"",""dequeue"",""nextId"",""queue"",""sendRequest"",""xdrError"",""isResponseSuccessful"",""getParams"",""onDemandParams"",""additionalParams"",""mandatedParams"",""optXhr"",""url"",""payload"",""onSend"",""createUrl"",""additionalQueryParams"",""getXdrLoadHandler"",""getXdrErrorHandler"",""onreadystatechange"",""getXhrReadyStateChangeHandler"",""registerForUploadProgress"",""open"",""setHeaders"",""send"",""shouldParamsBeInQueryString"",""contentType"",""stringify"",""addToPath"",""readyState"",""lengthComputable"",""onDemandHeaders"",""additionalHeaders"",""allHeaders"",""acceptHeader"",""setRequestHeader"",""allowXRequestedWithAndCacheControl"",""responseCode"",""successfulResponseCodes"",""prepareToSend"",""validMethods"",""DELETE"",""PATCH"",""POST"",""PUT"",""GET"",""initTransport"",""path"",""cacheBuster"",""withPath"",""appendToPath"",""withParams"",""withQueryParams"",""_additionalQueryParams_"",""withHeaders"",""withPayload"",""thePayload"",""withCacheBuster"",""qqtimestamp"",""Date"",""getTime"",""canceled"",""UploadHandler"",""proxy"",""fileState"",""fileItem"",""getThirdPartyFileId"",""_getFileState"",""_setThirdPartyFileId"",""thirdPartyFileId"",""_wasCanceled"",""preventRetryResponse"",""controller"",""chunkingPossible"",""concurrentChunkingPossible"",""chunked"",""chunkIdx"",""_getChunkData"",""attemptingResume"",""chunkProgress"",""_getChunkDataForCallback"",""finalize"",""finalizeChunks"",""normaizedResponse"",""normalizeResponse"",""_maybeDeletePersistedChunkData"",""cleanup"",""normalizedResponse"",""handleFailure"",""clearCachedChunk"",""inProgressIdx"",""responseToReport"",""inProgress"",""remaining"",""unshift"",""ignoreFailure"",""keys"",""_getXhrs"",""ckid"",""ckXhr"",""abort"",""_cancelled"",""moveInProgressToRemaining"",""connectionManager"",""free"",""hasMoreParts"",""nextPart"",""nextIdx"",""_getTotalChunks"",""reevaluateChunking"",""sendNext"",""inProgressChunks"",""available"",""requestOverrides"",""uploadChunkData"",""overrides"",""uploadChunk"",""inProgressChunkIdx"",""_maybePersistChunkedState"",""clearXhr"",""_open"",""_openChunks"",""_waiting"",""openChunkEntriesCount"",""openChunksCount"",""openChunkIndexes"",""dontAllowNext"",""allowNext"",""waitingIndex"",""connectionsIndex"",""getProxyOrBlob"",""getWaitingOrConnected"",""waitingOrConnected"",""chunks"",""parseInt"",""isUsingConnection"",""pop"",""openChunksEntry"",""simple"",""uploadFile"",""maybeNewUuid"",""_clearXhrs"",""getProxy"",""initHandler"",""traditional"",""_removeExpiredChunkingRecords"",""isDeferredEligibleForUpload"",""maybeDefer"",""generatedBlob"",""updateBlob"",""maybeSendDeferredFiles"",""errorResponse"",""idsInGroup"",""uploadedThisId"",""idInGroup"",""now"",""originalResponse"",""_shouldChunkThisFile"",""blobToUpload"",""cancelRetVal"",""isProxied"",""_getLocalStorageId"",""isAttemptingResume"",""WindowReceiveMessage"",""callbackWrapperDetachers"",""receiveMessage"",""onMessageCallbackWrapper"",""stopReceivingMessages"",""detacher"",""FormUploadHandler"",""expungeFile"",""detachLoadEvents"",""isCors"",""postMessageCallbackTimers"",""corsMessageReceiver"",""iframe"",""getElementById"",""_getIframeName"",""getFileIdForIframeName"",""iframeName"",""initIframeForUpload"",""body"",""registerPostMessageCallback"",""onloadCallbacks"",""onloadCallback"",""_parseJsonResponse"",""_detachLoadEvent"",""formHandlerInstanceId"",""_attachLoadEvent"",""responseDescriptor"",""contentDocument"",""_createIframe"",""_initFormForUpload"",""targetName"",""innerHtmlOrMessage"",""XhrUploadHandler"",""xhrId"",""ajaxRequester"",""_getAjaxRequester"",""getChunkSize"",""chunkFiles"",""resumeEnabled"",""blobOrProxy"",""_initTempState"",""_maybePrepareForResume"",""cachedChunks"",""tempState"",""xhrs"",""ajaxRequesters"",""responseParser"",""lastChunkIdx"",""_getXhr"",""resumableFilesData"",""_iterateResumeRecords"",""notResumable"",""optInProgress"",""optRemaining"",""chunkingState"",""reverse"",""paused"",""totalChunks"",""parts"",""newBlob"",""chunkId"",""_createXhr"",""optChunkIdx"",""_registerXhr"",""chunkIndex"",""fileSize"",""startBytes"",""endBytes"",""part"",""count"",""startByte"",""endByte"",""localStorageId"",""forEach"",""_getMimeType"",""_getPersistableData"",""ceil"",""_markNotResumable"",""removeItem"",""persistedData"",""lastUpdated"",""_registerProgressHandler"",""progressCalculator"",""totalSuccessfullyLoadedForFile"",""loadedForRequest"",""totalForRequest"",""estActualChunkLoaded"",""totalLoadedForFile"",""chunkLoaded"",""optAjaxRequester"",""xhrsId"",""expirationDays"",""expirationDate"",""setDate"",""getDate"",""getMandatedParams"",""_method"",""requester"",""detectSubsampling"",""img"",""ctx"",""iw"",""naturalWidth"",""ih"",""naturalHeight"",""width"",""getContext"",""drawImage"",""getImageData"",""detectVerticalSquash"",""alpha"",""ratio"",""sy"",""ey"",""py"",""renderImageToDataURL"",""doSquash"",""renderImageToCanvas"",""maybeCalculateDownsampledDimensions"",""origHeight"",""origWidth"",""newHeight"",""sqrt"",""newWidth"",""modifiedDimensions"",""save"",""resize"",""renderImageToCanvasWithCustomResizer"",""imageHeight"",""imageWidth"",""orientation"",""targetHeight"",""targetWidth"",""transformCoordinate"",""tmpCtx"",""sx"",""dx"",""d"",""tmpCanvas"",""vertSquashRatio"",""dw"",""dh"",""dy"",""clearRect"",""restore"",""qqImageRendered"",""resizeInfo"",""sourceCanvas"",""sourceCanvasContext"",""targetCanvas"",""translate"",""rotate"",""PI"",""MegaPixImage"",""srcImage"",""errorCallback"",""Image"",""URL"",""createObjectURL"",""webkitURL"",""src"",""listeners"",""imageLoadListeners"",""render"",""opt"",""imgWidth"",""imgHeight"",""optionsKey"",""optionsValue"",""oldTargetSrc"",""onrender"",""isImg"",""el"",""isCanvas"",""isImgCorsSupported"",""crossOrigin"",""isCanvasSupported"",""determineMimeOfFileName"",""nameWithPath"",""pathSegments"",""isCrossOrigin"",""targetProtocol"",""targetHostname"",""targetPort"",""targetAnchor"",""href"",""protocol"",""port"",""hostname"",""location"",""registerImgLoadListeners"",""registerCanvasDrawImageListener"",""registerThumbnailRenderedListener"",""registered"",""draw"",""drawPreview"",""Identify"",""megapixErrorHandler"",""isPreviewable"",""dummyExif"",""exif"",""Exif"",""mpImg"",""Orientation"",""failureMsg"",""drawOnCanvasOrImgFromUrl"",""canvasOrImg"",""tempImg"",""tempImgRender"",""drawOnImgFromUrlWithCssScaling"",""drawFromUrl"",""fileBlobOrUrl"",""_testing"",""parseLittleEndian"",""hex"",""pow"",""seekToApp1"",""offset"",""theOffset"",""thePromise"",""segmentLength"",""getApp1Offset"",""isLittleEndian"",""app1Start"",""getDirEntryCount"",""littleEndian"",""getIfd"",""dirEntries"",""getDirEntries"",""ifdHex"",""getTagValues"",""tagsToFind"",""TAG_IDS"",""vals"",""tagValHex"",""tagValLength"",""idHex"",""tagsToFindIdx"",""TAG_INFO"",""274"",""parser"",""onParseFailure"",""app1Offset"",""dirEntryCount"",""tagValues"",""isIdentifiable"",""magicBytes"",""questionableBytes"",""identifiable"",""magicBytesEntries"",""magicBytesArrayEntry"",""previewable"",""isPreviewableSync"",""PREVIEWABLE_MIME_TYPES"",""fileMime"",""isRecognizedImage"",""image/jpeg"",""image/gif"",""image/png"",""image/bmp"",""image/tiff"",""hasNonZeroLimits"",""limits"",""atLeastOne"",""limit"",""getWidthHeight"",""sizeDetermination"",""getFailingLimit"",""dimensions"",""failingLimit"",""limitName"",""limitValue"",""limitMatcher"",""dimensionPropName"",""actualValue"",""validationEffort"",""isJsonResponseValid"",""handleFileItems"",""fileItems"",""someItemsIgnored"",""err"",""refreshEffort"",""refreshCompleteCallback"",""requesterOptions"",""SessionAjaxRequester"",""queryServer"",""responseText"",""includeOriginal"",""failedToScaleText"",""_getSortedSizes"",""getFileRecords"",""originalFileUuid"",""originalFileName"",""originalBlobOrBlobData"",""records"",""originalBlob"",""sizeRecord"",""outputType"",""_determineOutputType"",""requestedType"",""refType"",""_getName"",""_generateScaledImage"",""failedText"",""api"",""scaledIds"",""originalId"",""record"",""blobSize"",""scaledId"",""qqparentuuid"",""qqparentsize"",""param"",""scalingEffort"",""scalingOptions"",""scaler"",""referenceType"",""scaledVersionProperties"",""startOfExt"",""versionType"",""scaledName"",""scaledExt"",""nameAppendage"",""sort"",""a"",""b"",""sourceFile"",""imageGenerator"",""scaledImageDataUri"",""signalSuccess"",""_insertExifHeader"",""scaledImageDataUriWithExif"",""originalImage"",""reader"",""insertionEffort"",""originalImageDataUri"",""ExifRestorer"",""readAsDataURL"",""_dataUriToBlob"",""_createBlob"",""KEY_STR"",""encode64"",""chr1"",""chr2"",""enc1"",""enc2"",""enc3"",""output"",""chr3"",""enc4"",""isNaN"",""origFileBase64"",""resizedFileBase64"",""rawImage"",""decode64"",""segments"",""slice2Segments"",""exifManipulation"",""exifArray"",""getExifArray"",""newImageArray"",""insertExif"",""seg"",""x"",""imageData"",""buf"",""separatePoint"",""mae"",""ato"",""array"",""rawImageArray"",""head"",""endPoint"",""perFileProgress"",""totalLoaded"",""totalSize"",""lastLoadedSent"",""lastTotalSent"",""callbackProxy"",""noRetryableFiles"",""retryable"",""none"",""failedId"",""updateTotalProgress"",""onNew"",""newLoaded"",""newTotal"",""oldLoaded"",""oldTotal"",""isImage"",""registerPasteHandler"",""detachPasteHandler"",""clipboardData"",""getAsFile"",""unregisterPasteHandler"",""startUpload"",""determineNewEndpoint"",""formEl"",""validateForm"",""nativeSubmit"",""checkValidity"",""maybeUploadOnSubmit"",""submit"",""determineFormEl"",""_form2Obj"",""notIrrelevantType"",""irrelevantTypes"",""radioOrCheckbox"",""ignoreValue"",""checked"",""selectValue"",""select"",""selected"",""elements"",""CryptoJS"",""C"",""C_lib"",""lib"",""Base"",""F"",""subtype"",""mixIn"",""init"",""$super"",""instance"",""properties"",""propertyName"",""clone"",""WordArray"",""words"",""sigBytes"",""encoder"",""Hex"",""wordArray"",""thisWords"",""thatWords"",""thisSigBytes"",""thatSigBytes"",""clamp"",""thatByte"",""nBytes"",""C_enc"",""enc"",""hexChars"",""bite"",""hexStr"",""hexStrLength"",""Latin1"",""latin1Chars"",""fromCharCode"",""latin1Str"",""latin1StrLength"",""Utf8"",""decodeURIComponent"",""escape"",""utf8Str"",""unescape"",""BufferedBlockAlgorithm"",""_data"",""_nDataBytes"",""_append"",""_process"",""doFlush"",""dataWords"",""dataSigBytes"",""blockSize"",""blockSizeBytes"",""nBlocksReady"",""_minBufferSize"",""nWordsReady"",""nBytesReady"",""min"",""_doProcessBlock"",""processedWords"",""C_algo"",""Hasher"",""cfg"",""_doReset"",""update"",""messageUpdate"",""_doFinalize"",""_createHelper"",""hasher"",""_createHmacHelper"",""HMAC"",""algo"",""Base64"",""map"",""_map"",""base64Chars"",""byte1"",""byte2"",""byte3"",""triplet"",""j"",""paddingChar"",""base64Str"",""base64StrLength"",""paddingIndex"",""bits1"",""bits2"",""_hasher"",""hasherBlockSize"",""hasherBlockSizeBytes"",""oKey"",""_oKey"",""iKey"",""_iKey"",""oKeyWords"",""iKeyWords"",""innerHash"",""W"",""SHA1"",""_hash"",""M"",""H"",""n"",""t"",""nBitsTotal"",""nBitsLeft"",""floor"",""HmacSHA1"",""K"",""isPrime"",""sqrtN"",""factor"",""getFractionalBits"",""nPrime"",""SHA256"",""f"",""g"",""h"",""gamma0x"",""gamma0"",""gamma1x"",""gamma1"",""ch"",""maj"",""sigma0"",""sigma1"",""t1"",""t2"",""HmacSHA256"",""superInit"",""typedArray"",""Int8Array"",""Uint8ClampedArray"",""Int16Array"",""Uint16Array"",""Int32Array"",""Uint32Array"",""Float32Array"",""Float64Array"",""byteOffset"",""byteLength"",""typedArrayByteLength"",""s3"",""util"",""ALGORITHM_PARAM_NAME"",""AWS_PARAM_PREFIX"",""CREDENTIAL_PARAM_NAME"",""DATE_PARAM_NAME"",""REDUCED_REDUNDANCY_PARAM_NAME"",""REDUCED_REDUNDANCY_PARAM_VALUE"",""SERVER_SIDE_ENCRYPTION_PARAM_NAME"",""SERVER_SIDE_ENCRYPTION_PARAM_VALUE"",""SESSION_TOKEN_PARAM_NAME"",""V4_ALGORITHM_PARAM_VALUE"",""V4_SIGNATURE_PARAM_NAME"",""CASE_SENSITIVE_PARAM_NAMES"",""UNSIGNABLE_REST_HEADER_NAMES"",""UNPREFIXED_PARAM_NAMES"",""getBucket"",""bucket"",""patterns"",""pattern"",""_getPrefixedParamName"",""getPolicy"",""policy"",""conditions"",""date"",""drift"",""clockDrift"",""accessKey"",""acl"",""expectedStatus"",""sessionToken"",""successRedirectUrl"",""getSuccessRedirectAbsoluteUrl"",""minFileSize"",""maxFileSize"",""reducedRedundancy"",""region"",""serverSideEncryption"",""signatureVersion"",""expiration"",""getPolicyExpirationDate"",""Content-Type"",""success_action_status"",""success_action_redirect"",""getV4CredentialsString"",""getV4PolicyDate"",""awsParamName"",""enforceSizeLimits"",""refreshPolicyCredentials"",""newSessionToken"",""sessionTokenFound"",""oldCondIdx"",""oldCondObj"",""oldCondName"",""oldCondVal"",""generateAwsParams"",""signPolicyCallback"",""policyJson"",""awsParams"",""customParams"",""AWSAccessKeyId"",""policyAndSignature"",""updatedAccessKey"",""updatedSessionToken"",""signature"",""minSize"",""adjustedMinSize"",""adjustedMaxSize"",""adjustedDate"",""getPolicyDate"",""getCredentialsDate"",""getUTCFullYear"",""getUTCMonth"",""getUTCDate"",""_minutesToAdd_"",""pad"",""minutesToAdd"",""setMinutes"",""getMinutes"",""toISOString"",""number"",""getUTCHours"",""getUTCMinutes"",""getUTCSeconds"",""getUTCMilliseconds"",""parseIframeResponse"",""doc"",""contentWindow"",""queryString"",""search"",""etag"",""targetAnchorContainer"",""encodeQueryStringParam"",""percentEncoded"",""uriEscape"",""uriEscapePath"",""nonTraditionalBasePublicApi"",""setUploadSuccessParams"",""_uploadSuccessParamsStore"",""setUploadSuccessEndpoint"",""_uploadSuccessEndpointStore"",""nonTraditionalBasePrivateApi"",""submitSuccessRequest"",""successAjaxRequester"",""onCompleteArgs"",""successEndpoint"",""successCustomHeaders"",""uploadSuccess"",""successMethod"",""uploadSuccessParams"",""fileParams"",""onSuccessFromServer"",""successRequestResult"",""_failedSuccessRequestCallbacks"",""onFailureFromServer"",""UploadSuccessAjaxRequester"",""_getEndpointSpecificParams"",""sendSuccessRequest"",""successRequestCallback"",""objectProperties"",""host"",""credentials"",""secretKey"",""iframeSupport"",""localBlankPagePath"",""onCredentialsExpired"",""setCredentials"",""_currentCredentials"",""_aclStore"",""_cannedKeys"",""_cannedBuckets"",""_buckets"",""_hosts"",""getKey"",""ignoreEmpty"",""setAcl"",""aclStore"",""_determineBucket"",""getHost"",""_determineHost"",""getKeyName"",""_determineKeyName"",""maxSizeLimit"",""oldParams"",""modifiedParams"",""paramName"",""credentialsProvider"",""onExpired"",""updateCredentials"",""_determineObjectPropertyValue"",""property"",""maybe"",""keynameLogic"",""onGetKeynameFailure"",""onGetKeynameSuccess"",""keyname"",""keynameToUse"",""_handleKeynameFunction"",""keynameFunc"",""successCallback"",""failureCallback"",""getResponseHeader"",""s3Key"",""s3Bucket"",""RequestSigner"",""handleSignatureReceived"",""responseJson"",""pendingSignatureData"",""pendingSignatures"",""signatureConstructor"",""invalid"",""expectingPolicy"",""generateHeaders"",""getStringToSignArtifacts"",""requestInfo"",""endOfUrl"",""signatureSpec"",""toSign"",""headerNames"",""headersStr"",""generateStringToSign"",""contentMd5"",""headerIndexesToRemove"",""headerName"",""headerIdx"",""hashedContent"",""v2"",""getStringToSign"",""v4"",""signedHeaders"",""getSignedHeaders"",""hashed"",""toSignRaw"",""raw"",""thisSignatureRequester"",""REQUEST_TYPE"",""MULTIPART_ABORT"",""uploadId"",""MULTIPART_INITIATE"",""MULTIPART_COMPLETE"",""MULTIPART_UPLOAD"",""partNum"",""getEncodedHashedPayload"",""content"",""Host"",""determineSignatureClientSide"",""toBeSigned"",""signatureEffort"",""updatedHeaders"",""getHeaders"",""getToSign"",""signatureArtifacts"",""signApiRequest"",""stringToSign"",""signPolicy"",""Authorization"",""getRequestDate"",""getEndOfUrl"",""headersWordArray"",""headersHmacSha1"",""policyStr"",""policyWordArray"",""base64Policy"",""policyHmacSha1"",""policyHmacSha1Base64"",""getCanonicalQueryString"",""endOfUri"",""encodedQueryParams"",""encodedQueryParamNames"",""queryStrings"",""queryParamIdx"",""canonicalQueryString"",""nameAndVal"",""paramVal"",""encodedQueryParamName"",""getCanonicalRequest"",""getCanonicalUri"",""onloadend"",""DONE"",""getScope"",""canonicalRequest"",""hashedRequest"",""scope"",""dateKey"",""dateRegionKey"",""dateRegionServiceKey"",""signingKey"",""headersPattern"",""matches"",""credentialPattern"",""credentialCondition"",""credential"",""condition"",""getSignature"",""queryParams"",""stringToSignRaw"",""constructStringToSign"",""artifacts"",""theHeaders"",""withUploadId"",""theUploadId"",""withContent"",""theContent"",""withContentType"",""theContentType"",""withPartNum"",""thePartNum"",""toUTCString"",""_artifacts_"",""handleSuccessResponse"",""parsedResponse"",""pendingRequests"",""successIndicator"",""failureIndicator"",""InitiateMultipartAjaxRequester"",""getSignatureAjaxRequester"",""getContentType"",""handleInitiateRequestComplete"",""uploadIdElements"",""messageElements"",""pendingInitiateRequests"",""domParser"",""DOMParser"",""responseDoc"",""parseFromString"",""CompleteMultipartAjaxRequester"",""handleCompleteRequestComplete"",""pendingCompleteRequests"",""bucketEls"",""keyEls"",""getCompleteRequestBody"",""etagEntries"",""implementation"",""createDocument"",""etagEntry"",""partEl"",""partNumEl"",""partNumTextEl"",""createTextNode"",""etagTextEl"",""etagEl"",""XMLSerializer"",""serializeToString"",""AbortMultipartAjaxRequester"",""handleAbortRequestComplete"",""awsErrorMsg"",""errorEls"",""onGetBucket"",""onGetHost"",""onGetKeyName"",""combine"",""etagMap"",""etags"",""requesters"",""completeMultipart"",""initHeaders"",""urlSafe"",""restSignature"",""put"",""domain"",""track"",""hasContentType"",""setup"",""uploadIdPromise"",""initiateMultipart"",""abortMultipart"",""policySignature"",""initParams"",""toSend"",""cachedBucket"",""cachedHost"",""shouldReset"",""keyName"",""encodedKey"",""parsedErrorProps"",""parseError"",""awsResponseXml"",""codeEls"",""messageEls"",""parsedDoc"",""errorDetails"",""existedInLocalStorage"",""isValidResponse"",""responseData"",""createForm"",""handleFinishedUpload"",""handleUpload""],""mappings"":""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"",""file"":""s3.fine-uploader.core.min.js"",""sourcesContent"":[null,""/*globals window, navigator, document, FormData, File, HTMLInputElement, XMLHttpRequest, Blob, Storage, ActiveXObject */\n/* jshint -W079 */\nvar qq = function(element) {\n    \""use strict\"";\n\n    return {\n        hide: function() {\n            element.style.display = \""none\"";\n            return this;\n        },\n\n        /** Returns the function which detaches attached event */\n        attach: function(type, fn) {\n            if (element.addEventListener) {\n                element.addEventListener(type, fn, false);\n            } else if (element.attachEvent) {\n                element.attachEvent(\""on\"" + type, fn);\n            }\n            return function() {\n                qq(element).detach(type, fn);\n            };\n        },\n\n        detach: function(type, fn) {\n            if (element.removeEventListener) {\n                element.removeEventListener(type, fn, false);\n            } else if (element.attachEvent) {\n                element.detachEvent(\""on\"" + type, fn);\n            }\n            return this;\n        },\n\n        contains: function(descendant) {\n            // The [W3C spec](http://www.w3.org/TR/domcore/#dom-node-contains)\n            // says a `null` (or ostensibly `undefined`) parameter\n            // passed into `Node.contains` should result in a false return value.\n            // IE7 throws an exception if the parameter is `undefined` though.\n            if (!descendant) {\n                return false;\n            }\n\n            // compareposition returns false in this case\n            if (element === descendant) {\n                return true;\n            }\n\n            if (element.contains) {\n                return element.contains(descendant);\n            } else {\n                /*jslint bitwise: true*/\n                return !!(descendant.compareDocumentPosition(element) & 8);\n            }\n        },\n\n        /**\n         * Insert this element before elementB.\n         */\n        insertBefore: function(elementB) {\n            elementB.parentNode.insertBefore(element, elementB);\n            return this;\n        },\n\n        remove: function() {\n            element.parentNode.removeChild(element);\n            return this;\n        },\n\n        /**\n         * Sets styles for an element.\n         * Fixes opacity in IE6-8.\n         */\n        css: function(styles) {\n            /*jshint eqnull: true*/\n            if (element.style == null) {\n                throw new qq.Error(\""Can't apply style to node as it is not on the HTMLElement prototype chain!\"");\n            }\n\n            /*jshint -W116*/\n            if (styles.opacity != null) {\n                if (typeof element.style.opacity !== \""string\"" && typeof (element.filters) !== \""undefined\"") {\n                    styles.filter = \""alpha(opacity=\"" + Math.round(100 * styles.opacity) + \"")\"";\n                }\n            }\n            qq.extend(element.style, styles);\n\n            return this;\n        },\n\n        hasClass: function(name, considerParent) {\n            var re = new RegExp(\""(^| )\"" + name + \""( |$)\"");\n            return re.test(element.className) || !!(considerParent && re.test(element.parentNode.className));\n        },\n\n        addClass: function(name) {\n            if (!qq(element).hasClass(name)) {\n                element.className += \"" \"" + name;\n            }\n            return this;\n        },\n\n        removeClass: function(name) {\n            var re = new RegExp(\""(^| )\"" + name + \""( |$)\"");\n            element.className = element.className.replace(re, \"" \"").replace(/^\\s+|\\s+$/g, \""\"");\n            return this;\n        },\n\n        getByClass: function(className, first) {\n            var candidates,\n                result = [];\n\n            if (first && element.querySelector) {\n                return element.querySelector(\"".\"" + className);\n            }\n            else if (element.querySelectorAll) {\n                return element.querySelectorAll(\"".\"" + className);\n            }\n\n            candidates = element.getElementsByTagName(\""*\"");\n\n            qq.each(candidates, function(idx, val) {\n                if (qq(val).hasClass(className)) {\n                    result.push(val);\n                }\n            });\n            return first ? result[0] : result;\n        },\n\n        getFirstByClass: function(className) {\n            return qq(element).getByClass(className, true);\n        },\n\n        children: function() {\n            var children = [],\n                child = element.firstChild;\n\n            while (child) {\n                if (child.nodeType === 1) {\n                    children.push(child);\n                }\n                child = child.nextSibling;\n            }\n\n            return children;\n        },\n\n        setText: function(text) {\n            element.innerText = text;\n            element.textContent = text;\n            return this;\n        },\n\n        clearText: function() {\n            return qq(element).setText(\""\"");\n        },\n\n        // Returns true if the attribute exists on the element\n        // AND the value of the attribute is NOT \""false\"" (case-insensitive)\n        hasAttribute: function(attrName) {\n            var attrVal;\n\n            if (element.hasAttribute) {\n\n                if (!element.hasAttribute(attrName)) {\n                    return false;\n                }\n\n                /*jshint -W116*/\n                return (/^false$/i).exec(element.getAttribute(attrName)) == null;\n            }\n            else {\n                attrVal = element[attrName];\n\n                if (attrVal === undefined) {\n                    return false;\n                }\n\n                /*jshint -W116*/\n                return (/^false$/i).exec(attrVal) == null;\n            }\n        }\n    };\n};\n\n(function() {\n    \""use strict\"";\n\n    qq.canvasToBlob = function(canvas, mime, quality) {\n        return qq.dataUriToBlob(canvas.toDataURL(mime, quality));\n    };\n\n    qq.dataUriToBlob = function(dataUri) {\n        var arrayBuffer, byteString,\n            createBlob = function(data, mime) {\n                var BlobBuilder = window.BlobBuilder ||\n                        window.WebKitBlobBuilder ||\n                        window.MozBlobBuilder ||\n                        window.MSBlobBuilder,\n                    blobBuilder = BlobBuilder && new BlobBuilder();\n\n                if (blobBuilder) {\n                    blobBuilder.append(data);\n                    return blobBuilder.getBlob(mime);\n                }\n                else {\n                    return new Blob([data], {type: mime});\n                }\n            },\n            intArray, mimeString;\n\n        // convert base64 to raw binary data held in a string\n        if (dataUri.split(\"",\"")[0].indexOf(\""base64\"") >= 0) {\n            byteString = atob(dataUri.split(\"",\"")[1]);\n        }\n        else {\n            byteString = decodeURI(dataUri.split(\"",\"")[1]);\n        }\n\n        // extract the MIME\n        mimeString = dataUri.split(\"",\"")[0]\n            .split(\"":\"")[1]\n            .split(\"";\"")[0];\n\n        // write the bytes of the binary string to an ArrayBuffer\n        arrayBuffer = new ArrayBuffer(byteString.length);\n        intArray = new Uint8Array(arrayBuffer);\n        qq.each(byteString, function(idx, character) {\n            intArray[idx] = character.charCodeAt(0);\n        });\n\n        return createBlob(arrayBuffer, mimeString);\n    };\n\n    qq.log = function(message, level) {\n        if (window.console) {\n            if (!level || level === \""info\"") {\n                window.console.log(message);\n            }\n            else\n            {\n                if (window.console[level]) {\n                    window.console[level](message);\n                }\n                else {\n                    window.console.log(\""<\"" + level + \""> \"" + message);\n                }\n            }\n        }\n    };\n\n    qq.isObject = function(variable) {\n        return variable && !variable.nodeType && Object.prototype.toString.call(variable) === \""[object Object]\"";\n    };\n\n    qq.isFunction = function(variable) {\n        return typeof (variable) === \""function\"";\n    };\n\n    /**\n     * Check the type of a value.  Is it an \""array\""?\n     *\n     * @param value value to test.\n     * @returns true if the value is an array or associated with an `ArrayBuffer`\n     */\n    qq.isArray = function(value) {\n        return Object.prototype.toString.call(value) === \""[object Array]\"" ||\n            (value && window.ArrayBuffer && value.buffer && value.buffer.constructor === ArrayBuffer);\n    };\n\n    // Looks for an object on a `DataTransfer` object that is associated with drop events when utilizing the Filesystem API.\n    qq.isItemList = function(maybeItemList) {\n        return Object.prototype.toString.call(maybeItemList) === \""[object DataTransferItemList]\"";\n    };\n\n    // Looks for an object on a `NodeList` or an `HTMLCollection`|`HTMLFormElement`|`HTMLSelectElement`\n    // object that is associated with collections of Nodes.\n    qq.isNodeList = function(maybeNodeList) {\n        return Object.prototype.toString.call(maybeNodeList) === \""[object NodeList]\"" ||\n            // If `HTMLCollection` is the actual type of the object, we must determine this\n            // by checking for expected properties/methods on the object\n            (maybeNodeList.item && maybeNodeList.namedItem);\n    };\n\n    qq.isString = function(maybeString) {\n        return Object.prototype.toString.call(maybeString) === \""[object String]\"";\n    };\n\n    qq.trimStr = function(string) {\n        if (String.prototype.trim) {\n            return string.trim();\n        }\n\n        return string.replace(/^\\s+|\\s+$/g, \""\"");\n    };\n\n    /**\n     * @param str String to format.\n     * @returns {string} A string, swapping argument values with the associated occurrence of {} in the passed string.\n     */\n    qq.format = function(str) {\n\n        var args =  Array.prototype.slice.call(arguments, 1),\n            newStr = str,\n            nextIdxToReplace = newStr.indexOf(\""{}\"");\n\n        qq.each(args, function(idx, val) {\n            var strBefore = newStr.substring(0, nextIdxToReplace),\n                strAfter = newStr.substring(nextIdxToReplace + 2);\n\n            newStr = strBefore + val + strAfter;\n            nextIdxToReplace = newStr.indexOf(\""{}\"", nextIdxToReplace + val.length);\n\n            // End the loop if we have run out of tokens (when the arguments exceed the # of tokens)\n            if (nextIdxToReplace < 0) {\n                return false;\n            }\n        });\n\n        return newStr;\n    };\n\n    qq.isFile = function(maybeFile) {\n        return window.File && Object.prototype.toString.call(maybeFile) === \""[object File]\"";\n    };\n\n    qq.isFileList = function(maybeFileList) {\n        return window.FileList && Object.prototype.toString.call(maybeFileList) === \""[object FileList]\"";\n    };\n\n    qq.isFileOrInput = function(maybeFileOrInput) {\n        return qq.isFile(maybeFileOrInput) || qq.isInput(maybeFileOrInput);\n    };\n\n    qq.isInput = function(maybeInput, notFile) {\n        var evaluateType = function(type) {\n            var normalizedType = type.toLowerCase();\n\n            if (notFile) {\n                return normalizedType !== \""file\"";\n            }\n\n            return normalizedType === \""file\"";\n        };\n\n        if (window.HTMLInputElement) {\n            if (Object.prototype.toString.call(maybeInput) === \""[object HTMLInputElement]\"") {\n                if (maybeInput.type && evaluateType(maybeInput.type)) {\n                    return true;\n                }\n            }\n        }\n        if (maybeInput.tagName) {\n            if (maybeInput.tagName.toLowerCase() === \""input\"") {\n                if (maybeInput.type && evaluateType(maybeInput.type)) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    };\n\n    qq.isBlob = function(maybeBlob) {\n        if (window.Blob && Object.prototype.toString.call(maybeBlob) === \""[object Blob]\"") {\n            return true;\n        }\n    };\n\n    qq.isXhrUploadSupported = function() {\n        var input = document.createElement(\""input\"");\n        input.type = \""file\"";\n\n        return (\n            input.multiple !== undefined &&\n                typeof File !== \""undefined\"" &&\n                typeof FormData !== \""undefined\"" &&\n                typeof (qq.createXhrInstance()).upload !== \""undefined\"");\n    };\n\n    // Fall back to ActiveX is native XHR is disabled (possible in any version of IE).\n    qq.createXhrInstance = function() {\n        if (window.XMLHttpRequest) {\n            return new XMLHttpRequest();\n        }\n\n        try {\n            return new ActiveXObject(\""MSXML2.XMLHTTP.3.0\"");\n        }\n        catch (error) {\n            qq.log(\""Neither XHR or ActiveX are supported!\"", \""error\"");\n            return null;\n        }\n    };\n\n    qq.isFolderDropSupported = function(dataTransfer) {\n        return dataTransfer.items &&\n            dataTransfer.items.length > 0 &&\n            dataTransfer.items[0].webkitGetAsEntry;\n    };\n\n    qq.isFileChunkingSupported = function() {\n        return !qq.androidStock() && //Android's stock browser cannot upload Blobs correctly\n            qq.isXhrUploadSupported() &&\n            (File.prototype.slice !== undefined || File.prototype.webkitSlice !== undefined || File.prototype.mozSlice !== undefined);\n    };\n\n    qq.sliceBlob = function(fileOrBlob, start, end) {\n        var slicer = fileOrBlob.slice || fileOrBlob.mozSlice || fileOrBlob.webkitSlice;\n\n        return slicer.call(fileOrBlob, start, end);\n    };\n\n    qq.arrayBufferToHex = function(buffer) {\n        var bytesAsHex = \""\"",\n            bytes = new Uint8Array(buffer);\n\n        qq.each(bytes, function(idx, byt) {\n            var byteAsHexStr = byt.toString(16);\n\n            if (byteAsHexStr.length < 2) {\n                byteAsHexStr = \""0\"" + byteAsHexStr;\n            }\n\n            bytesAsHex += byteAsHexStr;\n        });\n\n        return bytesAsHex;\n    };\n\n    qq.readBlobToHex = function(blob, startOffset, length) {\n        var initialBlob = qq.sliceBlob(blob, startOffset, startOffset + length),\n            fileReader = new FileReader(),\n            promise = new qq.Promise();\n\n        fileReader.onload = function() {\n            promise.success(qq.arrayBufferToHex(fileReader.result));\n        };\n\n        fileReader.onerror = promise.failure;\n\n        fileReader.readAsArrayBuffer(initialBlob);\n\n        return promise;\n    };\n\n    qq.extend = function(first, second, extendNested) {\n        qq.each(second, function(prop, val) {\n            if (extendNested && qq.isObject(val)) {\n                if (first[prop] === undefined) {\n                    first[prop] = {};\n                }\n                qq.extend(first[prop], val, true);\n            }\n            else {\n                first[prop] = val;\n            }\n        });\n\n        return first;\n    };\n\n    /**\n     * Allow properties in one object to override properties in another,\n     * keeping track of the original values from the target object.\n     *\n     * Note that the pre-overriden properties to be overriden by the source will be passed into the `sourceFn` when it is invoked.\n     *\n     * @param target Update properties in this object from some source\n     * @param sourceFn A function that, when invoked, will return properties that will replace properties with the same name in the target.\n     * @returns {object} The target object\n     */\n    qq.override = function(target, sourceFn) {\n        var super_ = {},\n            source = sourceFn(super_);\n\n        qq.each(source, function(srcPropName, srcPropVal) {\n            if (target[srcPropName] !== undefined) {\n                super_[srcPropName] = target[srcPropName];\n            }\n\n            target[srcPropName] = srcPropVal;\n        });\n\n        return target;\n    };\n\n    /**\n     * Searches for a given element (elt) in the array, returns -1 if it is not present.\n     */\n    qq.indexOf = function(arr, elt, from) {\n        if (arr.indexOf) {\n            return arr.indexOf(elt, from);\n        }\n\n        from = from || 0;\n        var len = arr.length;\n\n        if (from < 0) {\n            from += len;\n        }\n\n        for (; from < len; from += 1) {\n            if (arr.hasOwnProperty(from) && arr[from] === elt) {\n                return from;\n            }\n        }\n        return -1;\n    };\n\n    //this is a version 4 UUID\n    qq.getUniqueId = function() {\n        return \""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"".replace(/[xy]/g, function(c) {\n            /*jslint eqeq: true, bitwise: true*/\n            var r = Math.random() * 16 | 0, v = c == \""x\"" ? r : (r & 0x3 | 0x8);\n            return v.toString(16);\n        });\n    };\n\n    //\n    // Browsers and platforms detection\n    qq.ie = function() {\n        return navigator.userAgent.indexOf(\""MSIE\"") !== -1 ||\n            navigator.userAgent.indexOf(\""Trident\"") !== -1;\n    };\n\n    qq.ie7 = function() {\n        return navigator.userAgent.indexOf(\""MSIE 7\"") !== -1;\n    };\n\n    qq.ie8 = function() {\n        return navigator.userAgent.indexOf(\""MSIE 8\"") !== -1;\n    };\n\n    qq.ie10 = function() {\n        return navigator.userAgent.indexOf(\""MSIE 10\"") !== -1;\n    };\n\n    qq.ie11 = function() {\n        return qq.ie() && navigator.userAgent.indexOf(\""rv:11\"") !== -1;\n    };\n\n    qq.edge = function() {\n        return navigator.userAgent.indexOf(\""Edge\"") >= 0;\n    };\n\n    qq.safari = function() {\n        return navigator.vendor !== undefined && navigator.vendor.indexOf(\""Apple\"") !== -1;\n    };\n\n    qq.chrome = function() {\n        return navigator.vendor !== undefined && navigator.vendor.indexOf(\""Google\"") !== -1;\n    };\n\n    qq.opera = function() {\n        return navigator.vendor !== undefined && navigator.vendor.indexOf(\""Opera\"") !== -1;\n    };\n\n    qq.firefox = function() {\n        return (!qq.edge() && !qq.ie11() && navigator.userAgent.indexOf(\""Mozilla\"") !== -1 && navigator.vendor !== undefined && navigator.vendor === \""\"");\n    };\n\n    qq.windows = function() {\n        return navigator.platform === \""Win32\"";\n    };\n\n    qq.android = function() {\n        return navigator.userAgent.toLowerCase().indexOf(\""android\"") !== -1;\n    };\n\n    // We need to identify the Android stock browser via the UA string to work around various bugs in this browser,\n    // such as the one that prevents a `Blob` from being uploaded.\n    qq.androidStock = function() {\n        return qq.android() && navigator.userAgent.toLowerCase().indexOf(\""chrome\"") < 0;\n    };\n\n    qq.ios6 = function() {\n        return qq.ios() && navigator.userAgent.indexOf(\"" OS 6_\"") !== -1;\n    };\n\n    qq.ios7 = function() {\n        return qq.ios() && navigator.userAgent.indexOf(\"" OS 7_\"") !== -1;\n    };\n\n    qq.ios8 = function() {\n        return qq.ios() && navigator.userAgent.indexOf(\"" OS 8_\"") !== -1;\n    };\n\n    // iOS 8.0.0\n    qq.ios800 = function() {\n        return qq.ios() && navigator.userAgent.indexOf(\"" OS 8_0 \"") !== -1;\n    };\n\n    qq.ios = function() {\n        /*jshint -W014 */\n        return navigator.userAgent.indexOf(\""iPad\"") !== -1\n            || navigator.userAgent.indexOf(\""iPod\"") !== -1\n            || navigator.userAgent.indexOf(\""iPhone\"") !== -1;\n    };\n\n    qq.iosChrome = function() {\n        return qq.ios() && navigator.userAgent.indexOf(\""CriOS\"") !== -1;\n    };\n\n    qq.iosSafari = function() {\n        return qq.ios() && !qq.iosChrome() && navigator.userAgent.indexOf(\""Safari\"") !== -1;\n    };\n\n    qq.iosSafariWebView = function() {\n        return qq.ios() && !qq.iosChrome() && !qq.iosSafari();\n    };\n\n    //\n    // Events\n\n    qq.preventDefault = function(e) {\n        if (e.preventDefault) {\n            e.preventDefault();\n        } else {\n            e.returnValue = false;\n        }\n    };\n\n    /**\n     * Creates and returns element from html string\n     * Uses innerHTML to create an element\n     */\n    qq.toElement = (function() {\n        var div = document.createElement(\""div\"");\n        return function(html) {\n            div.innerHTML = html;\n            var element = div.firstChild;\n            div.removeChild(element);\n            return element;\n        };\n    }());\n\n    //key and value are passed to callback for each entry in the iterable item\n    qq.each = function(iterableItem, callback) {\n        var keyOrIndex, retVal;\n\n        if (iterableItem) {\n            // Iterate through [`Storage`](http://www.w3.org/TR/webstorage/#the-storage-interface) items\n            if (window.Storage && iterableItem.constructor === window.Storage) {\n                for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n                    retVal = callback(iterableItem.key(keyOrIndex), iterableItem.getItem(iterableItem.key(keyOrIndex)));\n                    if (retVal === false) {\n                        break;\n                    }\n                }\n            }\n            // `DataTransferItemList` & `NodeList` objects are array-like and should be treated as arrays\n            // when iterating over items inside the object.\n            else if (qq.isArray(iterableItem) || qq.isItemList(iterableItem) || qq.isNodeList(iterableItem)) {\n                for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n                    retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n                    if (retVal === false) {\n                        break;\n                    }\n                }\n            }\n            else if (qq.isString(iterableItem)) {\n                for (keyOrIndex = 0; keyOrIndex < iterableItem.length; keyOrIndex++) {\n                    retVal = callback(keyOrIndex, iterableItem.charAt(keyOrIndex));\n                    if (retVal === false) {\n                        break;\n                    }\n                }\n            }\n            else {\n                for (keyOrIndex in iterableItem) {\n                    if (Object.prototype.hasOwnProperty.call(iterableItem, keyOrIndex)) {\n                        retVal = callback(keyOrIndex, iterableItem[keyOrIndex]);\n                        if (retVal === false) {\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n    };\n\n    //include any args that should be passed to the new function after the context arg\n    qq.bind = function(oldFunc, context) {\n        if (qq.isFunction(oldFunc)) {\n            var args =  Array.prototype.slice.call(arguments, 2);\n\n            return function() {\n                var newArgs = qq.extend([], args);\n                if (arguments.length) {\n                    newArgs = newArgs.concat(Array.prototype.slice.call(arguments));\n                }\n                return oldFunc.apply(context, newArgs);\n            };\n        }\n\n        throw new Error(\""first parameter must be a function!\"");\n    };\n\n    /**\n     * obj2url() takes a json-object as argument and generates\n     * a querystring. pretty much like jQuery.param()\n     *\n     * how to use:\n     *\n     *    `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\n     *\n     * will result in:\n     *\n     *    `http://any.url/upload?otherParam=value&a=b&c=d`\n     *\n     * @param  Object JSON-Object\n     * @param  String current querystring-part\n     * @return String encoded querystring\n     */\n    qq.obj2url = function(obj, temp, prefixDone) {\n        /*jshint laxbreak: true*/\n        var uristrings = [],\n            prefix = \""&\"",\n            add = function(nextObj, i) {\n                var nextTemp = temp\n                    ? (/\\[\\]$/.test(temp)) // prevent double-encoding\n                    ? temp\n                    : temp + \""[\"" + i + \""]\""\n                    : i;\n                if ((nextTemp !== \""undefined\"") && (i !== \""undefined\"")) {\n                    uristrings.push(\n                        (typeof nextObj === \""object\"")\n                            ? qq.obj2url(nextObj, nextTemp, true)\n                            : (Object.prototype.toString.call(nextObj) === \""[object Function]\"")\n                            ? encodeURIComponent(nextTemp) + \""=\"" + encodeURIComponent(nextObj())\n                            : encodeURIComponent(nextTemp) + \""=\"" + encodeURIComponent(nextObj)\n                    );\n                }\n            };\n\n        if (!prefixDone && temp) {\n            prefix = (/\\?/.test(temp)) ? (/\\?$/.test(temp)) ? \""\"" : \""&\"" : \""?\"";\n            uristrings.push(temp);\n            uristrings.push(qq.obj2url(obj));\n        } else if ((Object.prototype.toString.call(obj) === \""[object Array]\"") && (typeof obj !== \""undefined\"")) {\n            qq.each(obj, function(idx, val) {\n                add(val, idx);\n            });\n        } else if ((typeof obj !== \""undefined\"") && (obj !== null) && (typeof obj === \""object\"")) {\n            qq.each(obj, function(prop, val) {\n                add(val, prop);\n            });\n        } else {\n            uristrings.push(encodeURIComponent(temp) + \""=\"" + encodeURIComponent(obj));\n        }\n\n        if (temp) {\n            return uristrings.join(prefix);\n        } else {\n            return uristrings.join(prefix)\n                .replace(/^&/, \""\"")\n                .replace(/%20/g, \""+\"");\n        }\n    };\n\n    qq.obj2FormData = function(obj, formData, arrayKeyName) {\n        if (!formData) {\n            formData = new FormData();\n        }\n\n        qq.each(obj, function(key, val) {\n            key = arrayKeyName ? arrayKeyName + \""[\"" + key + \""]\"" : key;\n\n            if (qq.isObject(val)) {\n                qq.obj2FormData(val, formData, key);\n            }\n            else if (qq.isFunction(val)) {\n                formData.append(key, val());\n            }\n            else {\n                formData.append(key, val);\n            }\n        });\n\n        return formData;\n    };\n\n    qq.obj2Inputs = function(obj, form) {\n        var input;\n\n        if (!form) {\n            form = document.createElement(\""form\"");\n        }\n\n        qq.obj2FormData(obj, {\n            append: function(key, val) {\n                input = document.createElement(\""input\"");\n                input.setAttribute(\""name\"", key);\n                input.setAttribute(\""value\"", val);\n                form.appendChild(input);\n            }\n        });\n\n        return form;\n    };\n\n    /**\n     * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\n     * implemented.  For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\n     */\n    qq.parseJson = function(json) {\n        /*jshint evil: true*/\n        if (window.JSON && qq.isFunction(JSON.parse)) {\n            return JSON.parse(json);\n        } else {\n            return eval(\""(\"" + json + \"")\"");\n        }\n    };\n\n    /**\n     * Retrieve the extension of a file, if it exists.\n     *\n     * @param filename\n     * @returns {string || undefined}\n     */\n    qq.getExtension = function(filename) {\n        var extIdx = filename.lastIndexOf(\"".\"") + 1;\n\n        if (extIdx > 0) {\n            return filename.substr(extIdx, filename.length - extIdx);\n        }\n    };\n\n    qq.getFilename = function(blobOrFileInput) {\n        /*jslint regexp: true*/\n\n        if (qq.isInput(blobOrFileInput)) {\n            // get input value and remove path to normalize\n            return blobOrFileInput.value.replace(/.*(\\/|\\\\)/, \""\"");\n        }\n        else if (qq.isFile(blobOrFileInput)) {\n            if (blobOrFileInput.fileName !== null && blobOrFileInput.fileName !== undefined) {\n                return blobOrFileInput.fileName;\n            }\n        }\n\n        return blobOrFileInput.name;\n    };\n\n    /**\n     * A generic module which supports object disposing in dispose() method.\n     * */\n    qq.DisposeSupport = function() {\n        var disposers = [];\n\n        return {\n            /** Run all registered disposers */\n            dispose: function() {\n                var disposer;\n                do {\n                    disposer = disposers.shift();\n                    if (disposer) {\n                        disposer();\n                    }\n                }\n                while (disposer);\n            },\n\n            /** Attach event handler and register de-attacher as a disposer */\n            attach: function() {\n                var args = arguments;\n                /*jslint undef:true*/\n                this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n            },\n\n            /** Add disposer to the collection */\n            addDisposer: function(disposeFunction) {\n                disposers.push(disposeFunction);\n            }\n        };\n    };\n}());\n"",""/* globals define, module, global, qq */\n(function() {\n    \""use strict\"";\n    if (typeof define === \""function\"" && define.amd) {\n        define(function() {\n            return qq;\n        });\n    }\n    else if (typeof module !== \""undefined\"" && module.exports) {\n        module.exports = qq;\n    }\n    else {\n        global.qq = qq;\n    }\n}());\n"",""/* globals qq */\n/**\n * Fine Uploader top-level Error container.  Inherits from `Error`.\n */\n(function() {\n    \""use strict\"";\n\n    qq.Error = function(message) {\n        this.message = \""[Fine Uploader \"" + qq.version + \""] \"" + message;\n    };\n\n    qq.Error.prototype = new Error();\n}());\n"",""/*global qq */\nqq.version = \""5.16.0-alpha.16\"";\n"",""/* globals qq */\nqq.supportedFeatures = (function() {\n    \""use strict\"";\n\n    var supportsUploading,\n        supportsUploadingBlobs,\n        supportsFileDrop,\n        supportsAjaxFileUploading,\n        supportsFolderDrop,\n        supportsChunking,\n        supportsResume,\n        supportsUploadViaPaste,\n        supportsUploadCors,\n        supportsDeleteFileXdr,\n        supportsDeleteFileCorsXhr,\n        supportsDeleteFileCors,\n        supportsFolderSelection,\n        supportsImagePreviews,\n        supportsUploadProgress;\n\n    function testSupportsFileInputElement() {\n        var supported = true,\n            tempInput;\n\n        try {\n            tempInput = document.createElement(\""input\"");\n            tempInput.type = \""file\"";\n            qq(tempInput).hide();\n\n            if (tempInput.disabled) {\n                supported = false;\n            }\n        }\n        catch (ex) {\n            supported = false;\n        }\n\n        return supported;\n    }\n\n    //only way to test for complete Clipboard API support at this time\n    function isChrome14OrHigher() {\n        return (qq.chrome() || qq.opera()) &&\n            navigator.userAgent.match(/Chrome\\/[1][4-9]|Chrome\\/[2-9][0-9]/) !== undefined;\n    }\n\n    //Ensure we can send cross-origin `XMLHttpRequest`s\n    function isCrossOriginXhrSupported() {\n        if (window.XMLHttpRequest) {\n            var xhr = qq.createXhrInstance();\n\n            //Commonly accepted test for XHR CORS support.\n            return xhr.withCredentials !== undefined;\n        }\n\n        return false;\n    }\n\n    //Test for (terrible) cross-origin ajax transport fallback for IE9 and IE8\n    function isXdrSupported() {\n        return window.XDomainRequest !== undefined;\n    }\n\n    // CORS Ajax requests are supported if it is either possible to send credentialed `XMLHttpRequest`s,\n    // or if `XDomainRequest` is an available alternative.\n    function isCrossOriginAjaxSupported() {\n        if (isCrossOriginXhrSupported()) {\n            return true;\n        }\n\n        return isXdrSupported();\n    }\n\n    function isFolderSelectionSupported() {\n        // We know that folder selection is only supported in Chrome via this proprietary attribute for now\n        return document.createElement(\""input\"").webkitdirectory !== undefined;\n    }\n\n    function isLocalStorageSupported() {\n        try {\n            return !!window.localStorage &&\n                // unpatched versions of IE10/11 have buggy impls of localStorage where setItem is a string\n                qq.isFunction(window.localStorage.setItem);\n        }\n        catch (error) {\n            // probably caught a security exception, so no localStorage for you\n            return false;\n        }\n    }\n\n    function isDragAndDropSupported() {\n        var span = document.createElement(\""span\"");\n\n        return (\""draggable\"" in span || (\""ondragstart\"" in span && \""ondrop\"" in span)) &&\n            !qq.android() && !qq.ios();\n    }\n\n    supportsUploading = testSupportsFileInputElement();\n\n    supportsAjaxFileUploading = supportsUploading && qq.isXhrUploadSupported();\n\n    supportsUploadingBlobs = supportsAjaxFileUploading && !qq.androidStock();\n\n    supportsFileDrop = supportsAjaxFileUploading && isDragAndDropSupported();\n\n    // adapted from https://stackoverflow.com/a/23278460/486979\n    supportsFolderDrop = supportsFileDrop && (function() {\n        var input = document.createElement(\""input\"");\n\n        input.type = \""file\"";\n        return !!(\""webkitdirectory\"" in (input || document.querySelectorAll(\""input[type=file]\"")[0]));\n    }());\n\n    supportsChunking = supportsAjaxFileUploading && qq.isFileChunkingSupported();\n\n    supportsResume = supportsAjaxFileUploading && supportsChunking && isLocalStorageSupported();\n\n    supportsUploadViaPaste = supportsAjaxFileUploading && isChrome14OrHigher();\n\n    supportsUploadCors = supportsUploading && (window.postMessage !== undefined || supportsAjaxFileUploading);\n\n    supportsDeleteFileCorsXhr = isCrossOriginXhrSupported();\n\n    supportsDeleteFileXdr = isXdrSupported();\n\n    supportsDeleteFileCors = isCrossOriginAjaxSupported();\n\n    supportsFolderSelection = isFolderSelectionSupported();\n\n    supportsImagePreviews = supportsAjaxFileUploading && window.FileReader !== undefined;\n\n    supportsUploadProgress = (function() {\n        if (supportsAjaxFileUploading) {\n            return !qq.androidStock() && !qq.iosChrome();\n        }\n        return false;\n    }());\n\n    return {\n        ajaxUploading: supportsAjaxFileUploading,\n        blobUploading: supportsUploadingBlobs,\n        canDetermineSize: supportsAjaxFileUploading,\n        chunking: supportsChunking,\n        deleteFileCors: supportsDeleteFileCors,\n        deleteFileCorsXdr: supportsDeleteFileXdr, //NOTE: will also return true in IE10, where XDR is also supported\n        deleteFileCorsXhr: supportsDeleteFileCorsXhr,\n        dialogElement: !!window.HTMLDialogElement,\n        fileDrop: supportsFileDrop,\n        folderDrop: supportsFolderDrop,\n        folderSelection: supportsFolderSelection,\n        imagePreviews: supportsImagePreviews,\n        imageValidation: supportsImagePreviews,\n        itemSizeValidation: supportsAjaxFileUploading,\n        pause: supportsChunking,\n        progressBar: supportsUploadProgress,\n        resume: supportsResume,\n        scaling: supportsImagePreviews && supportsUploadingBlobs,\n        tiffPreviews: qq.safari(), // Not the best solution, but simple and probably accurate enough (for now)\n        unlimitedScaledImageSize: !qq.ios(), // false simply indicates that there is some known limit\n        uploading: supportsUploading,\n        uploadCors: supportsUploadCors,\n        uploadCustomHeaders: supportsAjaxFileUploading,\n        uploadNonMultipart: supportsAjaxFileUploading,\n        uploadViaPaste: supportsUploadViaPaste\n    };\n\n}());\n"",""/*globals qq*/\n\n// Is the passed object a promise instance?\nqq.isGenericPromise = function(maybePromise) {\n    \""use strict\"";\n    return !!(maybePromise && maybePromise.then && qq.isFunction(maybePromise.then));\n};\n\nqq.Promise = function() {\n    \""use strict\"";\n\n    var successArgs, failureArgs,\n        successCallbacks = [],\n        failureCallbacks = [],\n        doneCallbacks = [],\n        state = 0;\n\n    qq.extend(this, {\n        then: function(onSuccess, onFailure) {\n            if (state === 0) {\n                if (onSuccess) {\n                    successCallbacks.push(onSuccess);\n                }\n                if (onFailure) {\n                    failureCallbacks.push(onFailure);\n                }\n            }\n            else if (state === -1) {\n                onFailure && onFailure.apply(null, failureArgs);\n            }\n            else if (onSuccess) {\n                onSuccess.apply(null, successArgs);\n            }\n\n            return this;\n        },\n\n        done: function(callback) {\n            if (state === 0) {\n                doneCallbacks.push(callback);\n            }\n            else {\n                callback.apply(null, failureArgs === undefined ? successArgs : failureArgs);\n            }\n\n            return this;\n        },\n\n        success: function() {\n            state = 1;\n            successArgs = arguments;\n\n            if (successCallbacks.length) {\n                qq.each(successCallbacks, function(idx, callback) {\n                    callback.apply(null, successArgs);\n                });\n            }\n\n            if (doneCallbacks.length) {\n                qq.each(doneCallbacks, function(idx, callback) {\n                    callback.apply(null, successArgs);\n                });\n            }\n\n            return this;\n        },\n\n        failure: function() {\n            state = -1;\n            failureArgs = arguments;\n\n            if (failureCallbacks.length) {\n                qq.each(failureCallbacks, function(idx, callback) {\n                    callback.apply(null, failureArgs);\n                });\n            }\n\n            if (doneCallbacks.length) {\n                qq.each(doneCallbacks, function(idx, callback) {\n                    callback.apply(null, failureArgs);\n                });\n            }\n\n            return this;\n        }\n    });\n};\n"",""/* globals qq */\n/**\n * Placeholder for a Blob that will be generated on-demand.\n *\n * @param referenceBlob Parent of the generated blob\n * @param onCreate Function to invoke when the blob must be created.  Must be promissory.\n * @constructor\n */\nqq.BlobProxy = function(referenceBlob, onCreate) {\n    \""use strict\"";\n\n    qq.extend(this, {\n        referenceBlob: referenceBlob,\n\n        create: function() {\n            return onCreate(referenceBlob);\n        }\n    });\n};\n"",""/*globals qq*/\n\n/**\n * This module represents an upload or \""Select File(s)\"" button.  It's job is to embed an opaque `<input type=\""file\"">`\n * element as a child of a provided \""container\"" element.  This \""container\"" element (`options.element`) is used to provide\n * a custom style for the `<input type=\""file\"">` element.  The ability to change the style of the container element is also\n * provided here by adding CSS classes to the container on hover/focus.\n *\n * TODO Eliminate the mouseover and mouseout event handlers since the :hover CSS pseudo-class should now be\n * available on all supported browsers.\n *\n * @param o Options to override the default values\n */\nqq.UploadButton = function(o) {\n    \""use strict\"";\n\n    var self = this,\n\n        disposeSupport = new qq.DisposeSupport(),\n\n        options = {\n            // Corresponds to the `accept` attribute on the associated `<input type=\""file\"">`\n            acceptFiles: null,\n\n            // \""Container\"" element\n            element: null,\n\n            focusClass: \""qq-upload-button-focus\"",\n\n            // A true value allows folders to be selected, if supported by the UA\n            folders: false,\n\n            // **This option will be removed** in the future as the :hover CSS pseudo-class is available on all supported browsers\n            hoverClass: \""qq-upload-button-hover\"",\n\n            ios8BrowserCrashWorkaround: false,\n\n            // If true adds `multiple` attribute to `<input type=\""file\"">`\n            multiple: false,\n\n            // `name` attribute of `<input type=\""file\"">`\n            name: \""qqfile\"",\n\n            // Called when the browser invokes the onchange handler on the `<input type=\""file\"">`\n            onChange: function(input) {},\n\n            title: null\n        },\n        input, buttonId;\n\n    // Overrides any of the default option values with any option values passed in during construction.\n    qq.extend(options, o);\n\n    buttonId = qq.getUniqueId();\n\n    // Embed an opaque `<input type=\""file\"">` element as a child of `options.element`.\n    function createInput() {\n        var input = document.createElement(\""input\"");\n\n        input.setAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME, buttonId);\n        input.setAttribute(\""title\"", options.title);\n\n        self.setMultiple(options.multiple, input);\n\n        if (options.folders && qq.supportedFeatures.folderSelection) {\n            // selecting directories is only possible in Chrome now, via a vendor-specific prefixed attribute\n            input.setAttribute(\""webkitdirectory\"", \""\"");\n        }\n\n        if (options.acceptFiles) {\n            input.setAttribute(\""accept\"", options.acceptFiles);\n        }\n\n        input.setAttribute(\""type\"", \""file\"");\n        input.setAttribute(\""name\"", options.name);\n\n        qq(input).css({\n            position: \""absolute\"",\n            // in Opera only 'browse' button\n            // is clickable and it is located at\n            // the right side of the input\n            right: 0,\n            top: 0,\n            fontFamily: \""Arial\"",\n            // It's especially important to make this an arbitrarily large value\n            // to ensure the rendered input button in IE takes up the entire\n            // space of the container element.  Otherwise, the left side of the\n            // button will require a double-click to invoke the file chooser.\n            // In other browsers, this might cause other issues, so a large font-size\n            // is only used in IE.  There is a bug in IE8 where the opacity style is  ignored\n            // in some cases when the font-size is large.  So, this workaround is not applied\n            // to IE8.\n            fontSize: qq.ie() && !qq.ie8() ? \""3500px\"" : \""118px\"",\n            margin: 0,\n            padding: 0,\n            cursor: \""pointer\"",\n            opacity: 0\n        });\n\n        // Setting the file input's height to 100% in IE7 causes\n        // most of the visible button to be unclickable.\n        !qq.ie7() && qq(input).css({height: \""100%\""});\n\n        options.element.appendChild(input);\n\n        disposeSupport.attach(input, \""change\"", function() {\n            options.onChange(input);\n        });\n\n        // **These event handlers will be removed** in the future as the :hover CSS pseudo-class is available on all supported browsers\n        disposeSupport.attach(input, \""mouseover\"", function() {\n            qq(options.element).addClass(options.hoverClass);\n        });\n        disposeSupport.attach(input, \""mouseout\"", function() {\n            qq(options.element).removeClass(options.hoverClass);\n        });\n\n        disposeSupport.attach(input, \""focus\"", function() {\n            qq(options.element).addClass(options.focusClass);\n        });\n        disposeSupport.attach(input, \""blur\"", function() {\n            qq(options.element).removeClass(options.focusClass);\n        });\n\n        return input;\n    }\n\n    // Make button suitable container for input\n    qq(options.element).css({\n        position: \""relative\"",\n        overflow: \""hidden\"",\n        // Make sure browse button is in the right side in Internet Explorer\n        direction: \""ltr\""\n    });\n\n    // Exposed API\n    qq.extend(this, {\n        getInput: function() {\n            return input;\n        },\n\n        getButtonId: function() {\n            return buttonId;\n        },\n\n        setMultiple: function(isMultiple, optInput) {\n            var input = optInput || this.getInput();\n\n            // Temporary workaround for bug in in iOS8 UIWebView that causes the browser to crash\n            // before the file chooser appears if the file input doesn't contain a multiple attribute.\n            // See #1283.\n            if (options.ios8BrowserCrashWorkaround && qq.ios8() && (qq.iosChrome() || qq.iosSafariWebView())) {\n                input.setAttribute(\""multiple\"", \""\"");\n            }\n\n            else {\n                if (isMultiple) {\n                    input.setAttribute(\""multiple\"", \""\"");\n                }\n                else {\n                    input.removeAttribute(\""multiple\"");\n                }\n            }\n        },\n\n        setAcceptFiles: function(acceptFiles) {\n            if (acceptFiles !== options.acceptFiles) {\n                input.setAttribute(\""accept\"", acceptFiles);\n            }\n        },\n\n        reset: function() {\n            if (input.parentNode) {\n                qq(input).remove();\n            }\n\n            qq(options.element).removeClass(options.focusClass);\n            input = null;\n            input = createInput();\n        }\n    });\n\n    input = createInput();\n};\n\nqq.UploadButton.BUTTON_ID_ATTR_NAME = \""qq-button-id\"";\n"",""/*globals qq */\nqq.UploadData = function(uploaderProxy) {\n    \""use strict\"";\n\n    var data = [],\n        byUuid = {},\n        byStatus = {},\n        byProxyGroupId = {},\n        byBatchId = {};\n\n    function getDataByIds(idOrIds) {\n        if (qq.isArray(idOrIds)) {\n            var entries = [];\n\n            qq.each(idOrIds, function(idx, id) {\n                entries.push(data[id]);\n            });\n\n            return entries;\n        }\n\n        return data[idOrIds];\n    }\n\n    function getDataByUuids(uuids) {\n        if (qq.isArray(uuids)) {\n            var entries = [];\n\n            qq.each(uuids, function(idx, uuid) {\n                entries.push(data[byUuid[uuid]]);\n            });\n\n            return entries;\n        }\n\n        return data[byUuid[uuids]];\n    }\n\n    function getDataByStatus(status) {\n        var statusResults = [],\n            statuses = [].concat(status);\n\n        qq.each(statuses, function(index, statusEnum) {\n            var statusResultIndexes = byStatus[statusEnum];\n\n            if (statusResultIndexes !== undefined) {\n                qq.each(statusResultIndexes, function(i, dataIndex) {\n                    statusResults.push(data[dataIndex]);\n                });\n            }\n        });\n\n        return statusResults;\n    }\n\n    qq.extend(this, {\n        /**\n         * Adds a new file to the data cache for tracking purposes.\n         *\n         * @param spec Data that describes this file.  Possible properties are:\n         *\n         * - uuid: Initial UUID for this file.\n         * - name: Initial name of this file.\n         * - size: Size of this file, omit if this cannot be determined\n         * - status: Initial `qq.status` for this file.  Omit for `qq.status.SUBMITTING`.\n         * - batchId: ID of the batch this file belongs to\n         * - proxyGroupId: ID of the proxy group associated with this file\n         * - onBeforeStatusChange(fileId): callback that is executed before the status change is broadcast\n         *\n         * @returns {number} Internal ID for this file.\n         */\n        addFile: function(spec) {\n            var status = spec.status || qq.status.SUBMITTING,\n                id = data.push({\n                    name: spec.name,\n                    originalName: spec.name,\n                    uuid: spec.uuid,\n                    size: spec.size == null ? -1 : spec.size,\n                    status: status\n                }) - 1;\n\n            if (spec.batchId) {\n                data[id].batchId = spec.batchId;\n\n                if (byBatchId[spec.batchId] === undefined) {\n                    byBatchId[spec.batchId] = [];\n                }\n                byBatchId[spec.batchId].push(id);\n            }\n\n            if (spec.proxyGroupId) {\n                data[id].proxyGroupId = spec.proxyGroupId;\n\n                if (byProxyGroupId[spec.proxyGroupId] === undefined) {\n                    byProxyGroupId[spec.proxyGroupId] = [];\n                }\n                byProxyGroupId[spec.proxyGroupId].push(id);\n            }\n\n            data[id].id = id;\n            byUuid[spec.uuid] = id;\n\n            if (byStatus[status] === undefined) {\n                byStatus[status] = [];\n            }\n            byStatus[status].push(id);\n\n            spec.onBeforeStatusChange && spec.onBeforeStatusChange(id);\n            uploaderProxy.onStatusChange(id, null, status);\n\n            return id;\n        },\n\n        retrieve: function(optionalFilter) {\n            if (qq.isObject(optionalFilter) && data.length)  {\n                if (optionalFilter.id !== undefined) {\n                    return getDataByIds(optionalFilter.id);\n                }\n\n                else if (optionalFilter.uuid !== undefined) {\n                    return getDataByUuids(optionalFilter.uuid);\n                }\n\n                else if (optionalFilter.status) {\n                    return getDataByStatus(optionalFilter.status);\n                }\n            }\n            else {\n                return qq.extend([], data, true);\n            }\n        },\n\n        reset: function() {\n            data = [];\n            byUuid = {};\n            byStatus = {};\n            byBatchId = {};\n        },\n\n        setStatus: function(id, newStatus) {\n            var oldStatus = data[id].status,\n                byStatusOldStatusIndex = qq.indexOf(byStatus[oldStatus], id);\n\n            byStatus[oldStatus].splice(byStatusOldStatusIndex, 1);\n\n            data[id].status = newStatus;\n\n            if (byStatus[newStatus] === undefined) {\n                byStatus[newStatus] = [];\n            }\n            byStatus[newStatus].push(id);\n\n            uploaderProxy.onStatusChange(id, oldStatus, newStatus);\n        },\n\n        uuidChanged: function(id, newUuid) {\n            var oldUuid = data[id].uuid;\n\n            data[id].uuid = newUuid;\n            byUuid[newUuid] = id;\n            delete byUuid[oldUuid];\n        },\n\n        updateName: function(id, newName) {\n            data[id].name = newName;\n        },\n\n        updateSize: function(id, newSize) {\n            data[id].size = newSize;\n        },\n\n        // Only applicable if this file has a parent that we may want to reference later.\n        setParentId: function(targetId, parentId) {\n            data[targetId].parentId = parentId;\n        },\n\n        getIdsInProxyGroup: function(id) {\n            var proxyGroupId = data[id].proxyGroupId;\n\n            if (proxyGroupId) {\n                return byProxyGroupId[proxyGroupId];\n            }\n            return [];\n        },\n\n        getIdsInBatch: function(id) {\n            var batchId = data[id].batchId;\n\n            return byBatchId[batchId];\n        }\n    });\n};\n\nqq.status = {\n    SUBMITTING: \""submitting\"",\n    SUBMITTED: \""submitted\"",\n    REJECTED: \""rejected\"",\n    QUEUED: \""queued\"",\n    CANCELED: \""canceled\"",\n    PAUSED: \""paused\"",\n    UPLOADING: \""uploading\"",\n    UPLOAD_RETRYING: \""retrying upload\"",\n    UPLOAD_SUCCESSFUL: \""upload successful\"",\n    UPLOAD_FAILED: \""upload failed\"",\n    DELETE_FAILED: \""delete failed\"",\n    DELETING: \""deleting\"",\n    DELETED: \""deleted\""\n};\n"",""/*globals qq*/\n/**\n * Defines the public API for FineUploaderBasic mode.\n */\n(function() {\n    \""use strict\"";\n\n    qq.basePublicApi = {\n        // DEPRECATED - TODO REMOVE IN NEXT MAJOR RELEASE (replaced by addFiles)\n        addBlobs: function(blobDataOrArray, params, endpoint) {\n            this.addFiles(blobDataOrArray, params, endpoint);\n        },\n\n        addInitialFiles: function(cannedFileList) {\n            var self = this;\n\n            qq.each(cannedFileList, function(index, cannedFile) {\n                self._addCannedFile(cannedFile);\n            });\n        },\n\n        addFiles: function(data, params, endpoint) {\n            this._maybeHandleIos8SafariWorkaround();\n\n            var batchId = this._storedIds.length === 0 ? qq.getUniqueId() : this._currentBatchId,\n\n                processBlob = qq.bind(function(blob) {\n                    this._handleNewFile({\n                        blob: blob,\n                        name: this._options.blobs.defaultName\n                    }, batchId, verifiedFiles);\n                }, this),\n\n                processBlobData = qq.bind(function(blobData) {\n                    this._handleNewFile(blobData, batchId, verifiedFiles);\n                }, this),\n\n                processCanvas = qq.bind(function(canvas) {\n                    var blob = qq.canvasToBlob(canvas);\n\n                    this._handleNewFile({\n                        blob: blob,\n                        name: this._options.blobs.defaultName + \"".png\""\n                    }, batchId, verifiedFiles);\n                }, this),\n\n                processCanvasData = qq.bind(function(canvasData) {\n                    var normalizedQuality = canvasData.quality && canvasData.quality / 100,\n                        blob = qq.canvasToBlob(canvasData.canvas, canvasData.type, normalizedQuality);\n\n                    this._handleNewFile({\n                        blob: blob,\n                        name: canvasData.name\n                    }, batchId, verifiedFiles);\n                }, this),\n\n                processFileOrInput = qq.bind(function(fileOrInput) {\n                    if (qq.isInput(fileOrInput) && qq.supportedFeatures.ajaxUploading) {\n                        var files = Array.prototype.slice.call(fileOrInput.files),\n                            self = this;\n\n                        qq.each(files, function(idx, file) {\n                            self._handleNewFile(file, batchId, verifiedFiles);\n                        });\n                    }\n                    else {\n                        this._handleNewFile(fileOrInput, batchId, verifiedFiles);\n                    }\n                }, this),\n\n                normalizeData = function() {\n                    if (qq.isFileList(data)) {\n                        data = Array.prototype.slice.call(data);\n                    }\n                    data = [].concat(data);\n                },\n\n                self = this,\n                verifiedFiles = [];\n\n            this._currentBatchId = batchId;\n\n            if (data) {\n                normalizeData();\n\n                qq.each(data, function(idx, fileContainer) {\n                    if (qq.isFileOrInput(fileContainer)) {\n                        processFileOrInput(fileContainer);\n                    }\n                    else if (qq.isBlob(fileContainer)) {\n                        processBlob(fileContainer);\n                    }\n                    else if (qq.isObject(fileContainer)) {\n                        if (fileContainer.blob && fileContainer.name) {\n                            processBlobData(fileContainer);\n                        }\n                        else if (fileContainer.canvas && fileContainer.name) {\n                            processCanvasData(fileContainer);\n                        }\n                    }\n                    else if (fileContainer.tagName && fileContainer.tagName.toLowerCase() === \""canvas\"") {\n                        processCanvas(fileContainer);\n                    }\n                    else {\n                        self.log(fileContainer + \"" is not a valid file container!  Ignoring!\"", \""warn\"");\n                    }\n                });\n\n                this.log(\""Received \"" + verifiedFiles.length + \"" files.\"");\n                this._prepareItemsForUpload(verifiedFiles, params, endpoint);\n            }\n        },\n\n        cancel: function(id) {\n            this._handler.cancel(id);\n        },\n\n        cancelAll: function() {\n            var storedIdsCopy = [],\n                self = this;\n\n            qq.extend(storedIdsCopy, this._storedIds);\n            qq.each(storedIdsCopy, function(idx, storedFileId) {\n                self.cancel(storedFileId);\n            });\n\n            this._handler.cancelAll();\n        },\n\n        clearStoredFiles: function() {\n            this._storedIds = [];\n        },\n\n        continueUpload: function(id) {\n            var uploadData = this._uploadData.retrieve({id: id});\n\n            if (!qq.supportedFeatures.pause || !this._options.chunking.enabled) {\n                return false;\n            }\n\n            if (uploadData.status === qq.status.PAUSED) {\n                this.log(qq.format(\""Paused file ID {} ({}) will be continued.  Not paused.\"", id, this.getName(id)));\n                this._uploadFile(id);\n                return true;\n            }\n            else {\n                this.log(qq.format(\""Ignoring continue for file ID {} ({}).  Not paused.\"", id, this.getName(id)), \""error\"");\n            }\n\n            return false;\n        },\n\n        deleteFile: function(id) {\n            return this._onSubmitDelete(id);\n        },\n\n        // TODO document?\n        doesExist: function(fileOrBlobId) {\n            return this._handler.isValid(fileOrBlobId);\n        },\n\n        // Generate a variable size thumbnail on an img or canvas,\n        // returning a promise that is fulfilled when the attempt completes.\n        // Thumbnail can either be based off of a URL for an image returned\n        // by the server in the upload response, or the associated `Blob`.\n        drawThumbnail: function(fileId, imgOrCanvas, maxSize, fromServer, customResizeFunction) {\n            var promiseToReturn = new qq.Promise(),\n                fileOrUrl, options;\n\n            if (this._imageGenerator) {\n                fileOrUrl = this._thumbnailUrls[fileId];\n                options = {\n                    customResizeFunction: customResizeFunction,\n                    maxSize: maxSize > 0 ? maxSize : null,\n                    scale: maxSize > 0\n                };\n\n                // If client-side preview generation is possible\n                // and we are not specifically looking for the image URl returned by the server...\n                if (!fromServer && qq.supportedFeatures.imagePreviews) {\n                    fileOrUrl = this.getFile(fileId);\n                }\n\n                /* jshint eqeqeq:false,eqnull:true */\n                if (fileOrUrl == null) {\n                    promiseToReturn.failure({container: imgOrCanvas, error: \""File or URL not found.\""});\n                }\n                else {\n                    this._imageGenerator.generate(fileOrUrl, imgOrCanvas, options).then(\n                        function success(modifiedContainer) {\n                            promiseToReturn.success(modifiedContainer);\n                        },\n\n                        function failure(container, reason) {\n                            promiseToReturn.failure({container: container, error: reason || \""Problem generating thumbnail\""});\n                        }\n                    );\n                }\n            }\n            else {\n                promiseToReturn.failure({container: imgOrCanvas, error: \""Missing image generator module\""});\n            }\n\n            return promiseToReturn;\n        },\n\n        getButton: function(fileId) {\n            return this._getButton(this._buttonIdsForFileIds[fileId]);\n        },\n\n        getEndpoint: function(fileId) {\n            return this._endpointStore.get(fileId);\n        },\n\n        getFile: function(fileOrBlobId) {\n            return this._handler.getFile(fileOrBlobId) || null;\n        },\n\n        getInProgress: function() {\n            return this._uploadData.retrieve({\n                status: [\n                    qq.status.UPLOADING,\n                    qq.status.UPLOAD_RETRYING,\n                    qq.status.QUEUED\n                ]\n            }).length;\n        },\n\n        getName: function(id) {\n            return this._uploadData.retrieve({id: id}).name;\n        },\n\n        // Parent ID for a specific file, or null if this is the parent, or if it has no parent.\n        getParentId: function(id) {\n            var uploadDataEntry = this.getUploads({id: id}),\n                parentId = null;\n\n            if (uploadDataEntry) {\n                if (uploadDataEntry.parentId !== undefined) {\n                    parentId = uploadDataEntry.parentId;\n                }\n            }\n\n            return parentId;\n        },\n\n        getResumableFilesData: function() {\n            return this._handler.getResumableFilesData();\n        },\n\n        getSize: function(id) {\n            return this._uploadData.retrieve({id: id}).size;\n        },\n\n        getNetUploads: function() {\n            return this._netUploaded;\n        },\n\n        getRemainingAllowedItems: function() {\n            var allowedItems = this._currentItemLimit;\n\n            if (allowedItems > 0) {\n                return allowedItems - this._netUploadedOrQueued;\n            }\n\n            return null;\n        },\n\n        getUploads: function(optionalFilter) {\n            return this._uploadData.retrieve(optionalFilter);\n        },\n\n        getUuid: function(id) {\n            return this._uploadData.retrieve({id: id}).uuid;\n        },\n\n        isResumable: function(id) {\n            return this._handler.hasResumeRecord(id);\n        },\n\n        log: function(str, level) {\n            if (this._options.debug && (!level || level === \""info\"")) {\n                qq.log(\""[Fine Uploader \"" + qq.version + \""] \"" + str);\n            }\n            else if (level && level !== \""info\"") {\n                qq.log(\""[Fine Uploader \"" + qq.version + \""] \"" + str, level);\n\n            }\n        },\n\n        pauseUpload: function(id) {\n            var uploadData = this._uploadData.retrieve({id: id});\n\n            if (!qq.supportedFeatures.pause || !this._options.chunking.enabled) {\n                return false;\n            }\n\n            // Pause only really makes sense if the file is uploading or retrying\n            if (qq.indexOf([qq.status.UPLOADING, qq.status.UPLOAD_RETRYING], uploadData.status) >= 0) {\n                if (this._handler.pause(id)) {\n                    this._uploadData.setStatus(id, qq.status.PAUSED);\n                    return true;\n                }\n                else {\n                    this.log(qq.format(\""Unable to pause file ID {} ({}).\"", id, this.getName(id)), \""error\"");\n                }\n            }\n            else {\n                this.log(qq.format(\""Ignoring pause for file ID {} ({}).  Not in progress.\"", id, this.getName(id)), \""error\"");\n            }\n\n            return false;\n        },\n\n        removeFileRef: function(id) {\n            this._handler.expunge(id);\n        },\n\n        reset: function() {\n            this.log(\""Resetting uploader...\"");\n\n            this._handler.reset();\n            this._storedIds = [];\n            this._autoRetries = [];\n            this._retryTimeouts = [];\n            this._preventRetries = [];\n            this._thumbnailUrls = [];\n\n            qq.each(this._buttons, function(idx, button) {\n                button.reset();\n            });\n\n            this._paramsStore.reset();\n            this._endpointStore.reset();\n            this._netUploadedOrQueued = 0;\n            this._netUploaded = 0;\n            this._uploadData.reset();\n            this._buttonIdsForFileIds = [];\n\n            this._pasteHandler && this._pasteHandler.reset();\n            this._options.session.refreshOnReset && this._refreshSessionData();\n\n            this._succeededSinceLastAllComplete = [];\n            this._failedSinceLastAllComplete = [];\n\n            this._totalProgress && this._totalProgress.reset();\n\n            this._customResumeDataStore.reset();\n        },\n\n        retry: function(id) {\n            return this._manualRetry(id);\n        },\n\n        scaleImage: function(id, specs) {\n            var self = this;\n\n            return qq.Scaler.prototype.scaleImage(id, specs, {\n                log: qq.bind(self.log, self),\n                getFile: qq.bind(self.getFile, self),\n                uploadData: self._uploadData\n            });\n        },\n\n        setCustomHeaders: function(headers, id) {\n            this._customHeadersStore.set(headers, id);\n        },\n\n        setCustomResumeData: function(id, data) {\n            this._customResumeDataStore.set(data, id);\n        },\n\n        setDeleteFileCustomHeaders: function(headers, id) {\n            this._deleteFileCustomHeadersStore.set(headers, id);\n        },\n\n        setDeleteFileEndpoint: function(endpoint, id) {\n            this._deleteFileEndpointStore.set(endpoint, id);\n        },\n\n        setDeleteFileParams: function(params, id) {\n            this._deleteFileParamsStore.set(params, id);\n        },\n\n        // Re-sets the default endpoint, an endpoint for a specific file, or an endpoint for a specific button\n        setEndpoint: function(endpoint, id) {\n            this._endpointStore.set(endpoint, id);\n        },\n\n        setForm: function(elementOrId) {\n            this._updateFormSupportAndParams(elementOrId);\n        },\n\n        setItemLimit: function(newItemLimit) {\n            this._currentItemLimit = newItemLimit;\n        },\n\n        setName: function(id, newName) {\n            this._uploadData.updateName(id, newName);\n        },\n\n        setParams: function(params, id) {\n            this._paramsStore.set(params, id);\n        },\n\n        setUuid: function(id, newUuid) {\n            return this._uploadData.uuidChanged(id, newUuid);\n        },\n\n        /**\n         * Expose the internal status of a file id to the public api for manual state changes\n         * @public\n         *\n         * @param {Number} id,\n         * @param {String} newStatus\n         *\n         * @todo Implement the remaining methods\n         */\n        setStatus: function(id, newStatus) {\n            var fileRecord = this.getUploads({id: id});\n            if (!fileRecord) {\n                throw new qq.Error(id + \"" is not a valid file ID.\"");\n            }\n\n            switch (newStatus) {\n                case qq.status.DELETED:\n                    this._onDeleteComplete(id, null, false);\n                    break;\n                case qq.status.DELETE_FAILED:\n                    this._onDeleteComplete(id, null, true);\n                    break;\n                default:\n                    var errorMessage = \""Method setStatus called on '\"" + name + \""' not implemented yet for \"" + newStatus;\n                    this.log(errorMessage);\n                    throw new qq.Error(errorMessage);\n            }\n        },\n\n        uploadStoredFiles: function() {\n            if (this._storedIds.length === 0) {\n                this._itemError(\""noFilesError\"");\n            }\n            else {\n                this._uploadStoredFiles();\n            }\n        }\n    };\n\n    /**\n     * Defines the private (internal) API for FineUploaderBasic mode.\n     */\n    qq.basePrivateApi = {\n        // Updates internal state with a file record (not backed by a live file).  Returns the assigned ID.\n        _addCannedFile: function(sessionData) {\n            var self = this;\n\n            return this._uploadData.addFile({\n                uuid: sessionData.uuid,\n                name: sessionData.name,\n                size: sessionData.size,\n                status: qq.status.UPLOAD_SUCCESSFUL,\n                onBeforeStatusChange: function(id) {\n                    sessionData.deleteFileEndpoint && self.setDeleteFileEndpoint(sessionData.deleteFileEndpoint, id);\n                    sessionData.deleteFileParams && self.setDeleteFileParams(sessionData.deleteFileParams, id);\n\n                    if (sessionData.thumbnailUrl) {\n                        self._thumbnailUrls[id] = sessionData.thumbnailUrl;\n                    }\n\n                    self._netUploaded++;\n                    self._netUploadedOrQueued++;\n                }\n            });\n        },\n\n        _annotateWithButtonId: function(file, associatedInput) {\n            if (qq.isFile(file)) {\n                file.qqButtonId = this._getButtonId(associatedInput);\n            }\n        },\n\n        _batchError: function(message) {\n            this._options.callbacks.onError(null, null, message, undefined);\n        },\n\n        _createDeleteHandler: function() {\n            var self = this;\n\n            return new qq.DeleteFileAjaxRequester({\n                method: this._options.deleteFile.method.toUpperCase(),\n                maxConnections: this._options.maxConnections,\n                uuidParamName: this._options.request.uuidName,\n                customHeaders: this._deleteFileCustomHeadersStore,\n                paramsStore: this._deleteFileParamsStore,\n                endpointStore: this._deleteFileEndpointStore,\n                cors: this._options.cors,\n                log: qq.bind(self.log, self),\n                onDelete: function(id) {\n                    self._onDelete(id);\n                    self._options.callbacks.onDelete(id);\n                },\n                onDeleteComplete: function(id, xhrOrXdr, isError) {\n                    self._onDeleteComplete(id, xhrOrXdr, isError);\n                    self._options.callbacks.onDeleteComplete(id, xhrOrXdr, isError);\n                }\n\n            });\n        },\n\n        _createPasteHandler: function() {\n            var self = this;\n\n            return new qq.PasteSupport({\n                targetElement: this._options.paste.targetElement,\n                callbacks: {\n                    log: qq.bind(self.log, self),\n                    pasteReceived: function(blob) {\n                        self._handleCheckedCallback({\n                            name: \""onPasteReceived\"",\n                            callback: qq.bind(self._options.callbacks.onPasteReceived, self, blob),\n                            onSuccess: qq.bind(self._handlePasteSuccess, self, blob),\n                            identifier: \""pasted image\""\n                        });\n                    }\n                }\n            });\n        },\n\n        _createStore: function(initialValue, _readOnlyValues_) {\n            var store = {},\n                catchall = initialValue,\n                perIdReadOnlyValues = {},\n                readOnlyValues = _readOnlyValues_,\n                copy = function(orig) {\n                    if (qq.isObject(orig)) {\n                        return qq.extend({}, orig);\n                    }\n                    return orig;\n                },\n                getReadOnlyValues = function() {\n                    if (qq.isFunction(readOnlyValues)) {\n                        return readOnlyValues();\n                    }\n                    return readOnlyValues;\n                },\n                includeReadOnlyValues = function(id, existing) {\n                    if (readOnlyValues && qq.isObject(existing)) {\n                        qq.extend(existing, getReadOnlyValues());\n                    }\n\n                    if (perIdReadOnlyValues[id]) {\n                        qq.extend(existing, perIdReadOnlyValues[id]);\n                    }\n                };\n\n            return {\n                set: function(val, id) {\n                    /*jshint eqeqeq: true, eqnull: true*/\n                    if (id == null) {\n                        store = {};\n                        catchall = copy(val);\n                    }\n                    else {\n                        store[id] = copy(val);\n                    }\n                },\n\n                get: function(id) {\n                    var values;\n\n                    /*jshint eqeqeq: true, eqnull: true*/\n                    if (id != null && store[id]) {\n                        values = store[id];\n                    }\n                    else {\n                        values = copy(catchall);\n                    }\n\n                    includeReadOnlyValues(id, values);\n\n                    return copy(values);\n                },\n\n                addReadOnly: function(id, values) {\n                    // Only applicable to Object stores\n                    if (qq.isObject(store)) {\n                        // If null ID, apply readonly values to all files\n                        if (id === null) {\n                            if (qq.isFunction(values)) {\n                                readOnlyValues = values;\n                            }\n                            else {\n                                readOnlyValues = readOnlyValues || {};\n                                qq.extend(readOnlyValues, values);\n                            }\n                        }\n                        else {\n                            perIdReadOnlyValues[id] = perIdReadOnlyValues[id] || {};\n                            qq.extend(perIdReadOnlyValues[id], values);\n                        }\n                    }\n                },\n\n                remove: function(fileId) {\n                    return delete store[fileId];\n                },\n\n                reset: function() {\n                    store = {};\n                    perIdReadOnlyValues = {};\n                    catchall = initialValue;\n                }\n            };\n        },\n\n        _createUploadDataTracker: function() {\n            var self = this;\n\n            return new qq.UploadData({\n                getName: function(id) {\n                    return self.getName(id);\n                },\n                getUuid: function(id) {\n                    return self.getUuid(id);\n                },\n                getSize: function(id) {\n                    return self.getSize(id);\n                },\n                onStatusChange: function(id, oldStatus, newStatus) {\n                    self._onUploadStatusChange(id, oldStatus, newStatus);\n                    self._options.callbacks.onStatusChange(id, oldStatus, newStatus);\n                    self._maybeAllComplete(id, newStatus);\n\n                    if (self._totalProgress) {\n                        setTimeout(function() {\n                            self._totalProgress.onStatusChange(id, oldStatus, newStatus);\n                        }, 0);\n                    }\n                }\n            });\n        },\n\n        /**\n         * Generate a tracked upload button.\n         *\n         * @param spec Object containing a required `element` property\n         * along with optional `multiple`, `accept`, and `folders`.\n         * @returns {qq.UploadButton}\n         * @private\n         */\n        _createUploadButton: function(spec) {\n            var self = this,\n                acceptFiles = spec.accept || this._options.validation.acceptFiles,\n                allowedExtensions = spec.allowedExtensions || this._options.validation.allowedExtensions,\n                button;\n\n            function allowMultiple() {\n                if (qq.supportedFeatures.ajaxUploading) {\n                    // Workaround for bug in iOS7+ (see #1039)\n                    if (self._options.workarounds.iosEmptyVideos &&\n                        qq.ios() &&\n                        !qq.ios6() &&\n                        self._isAllowedExtension(allowedExtensions, \"".mov\"")) {\n\n                        return false;\n                    }\n\n                    if (spec.multiple === undefined) {\n                        return self._options.multiple;\n                    }\n\n                    return spec.multiple;\n                }\n\n                return false;\n            }\n\n            button = new qq.UploadButton({\n                acceptFiles: acceptFiles,\n                element: spec.element,\n                focusClass: this._options.classes.buttonFocus,\n                folders: spec.folders,\n                hoverClass: this._options.classes.buttonHover,\n                ios8BrowserCrashWorkaround: this._options.workarounds.ios8BrowserCrash,\n                multiple: allowMultiple(),\n                name: this._options.request.inputName,\n                onChange: function(input) {\n                    self._onInputChange(input);\n                },\n                title: spec.title == null ? this._options.text.fileInputTitle : spec.title\n            });\n\n            this._disposeSupport.addDisposer(function() {\n                button.dispose();\n            });\n\n            self._buttons.push(button);\n\n            return button;\n        },\n\n        _createUploadHandler: function(additionalOptions, namespace) {\n            var self = this,\n                lastOnProgress = {},\n                options = {\n                    debug: this._options.debug,\n                    maxConnections: this._options.maxConnections,\n                    cors: this._options.cors,\n                    paramsStore: this._paramsStore,\n                    endpointStore: this._endpointStore,\n                    chunking: this._options.chunking,\n                    resume: this._options.resume,\n                    blobs: this._options.blobs,\n                    log: qq.bind(self.log, self),\n                    preventRetryParam: this._options.retry.preventRetryResponseProperty,\n                    onProgress: function(id, name, loaded, total) {\n                        if (loaded < 0 || total < 0) {\n                            return;\n                        }\n\n                        if (lastOnProgress[id]) {\n                            if (lastOnProgress[id].loaded !== loaded || lastOnProgress[id].total !== total) {\n                                self._onProgress(id, name, loaded, total);\n                                self._options.callbacks.onProgress(id, name, loaded, total);\n                            }\n                        }\n                        else {\n                            self._onProgress(id, name, loaded, total);\n                            self._options.callbacks.onProgress(id, name, loaded, total);\n                        }\n\n                        lastOnProgress[id] = {loaded: loaded, total: total};\n\n                    },\n                    onComplete: function(id, name, result, xhr) {\n                        delete lastOnProgress[id];\n\n                        var status = self.getUploads({id: id}).status,\n                            retVal;\n\n                        // This is to deal with some observed cases where the XHR readyStateChange handler is\n                        // invoked by the browser multiple times for the same XHR instance with the same state\n                        // readyState value.  Higher level: don't invoke complete-related code if we've already\n                        // done this.\n                        if (status === qq.status.UPLOAD_SUCCESSFUL || status === qq.status.UPLOAD_FAILED) {\n                            return;\n                        }\n\n                        retVal = self._onComplete(id, name, result, xhr);\n\n                        // If the internal `_onComplete` handler returns a promise, don't invoke the `onComplete` callback\n                        // until the promise has been fulfilled.\n                        if (retVal instanceof  qq.Promise) {\n                            retVal.done(function() {\n                                self._options.callbacks.onComplete(id, name, result, xhr);\n                            });\n                        }\n                        else {\n                            self._options.callbacks.onComplete(id, name, result, xhr);\n                        }\n                    },\n                    onCancel: function(id, name, cancelFinalizationEffort) {\n                        var promise = new qq.Promise();\n\n                        self._handleCheckedCallback({\n                            name: \""onCancel\"",\n                            callback: qq.bind(self._options.callbacks.onCancel, self, id, name),\n                            onFailure: promise.failure,\n                            onSuccess: function() {\n                                cancelFinalizationEffort.then(function() {\n                                    self._onCancel(id, name);\n                                });\n\n                                promise.success();\n                            },\n                            identifier: id\n                        });\n\n                        return promise;\n                    },\n                    onUploadPrep: qq.bind(this._onUploadPrep, this),\n                    onUpload: function(id, name) {\n                        self._onUpload(id, name);\n                        var onUploadResult = self._options.callbacks.onUpload(id, name);\n\n                        if (qq.isGenericPromise(onUploadResult)) {\n                            self.log(qq.format(\""onUpload for {} returned a Promise - waiting for resolution.\"", id));\n                            return onUploadResult;\n                        }\n\n                        return new qq.Promise().success();\n                    },\n                    onUploadChunk: function(id, name, chunkData) {\n                        self._onUploadChunk(id, chunkData);\n                        var onUploadChunkResult = self._options.callbacks.onUploadChunk(id, name, chunkData);\n\n                        if (qq.isGenericPromise(onUploadChunkResult)) {\n                            self.log(qq.format(\""onUploadChunk for {}.{} returned a Promise - waiting for resolution.\"", id, chunkData.partIndex));\n                            return onUploadChunkResult;\n                        }\n\n                        return new qq.Promise().success();\n                    },\n                    onUploadChunkSuccess: function(id, chunkData, result, xhr) {\n                        self._options.callbacks.onUploadChunkSuccess.apply(self, arguments);\n                    },\n                    onResume: function(id, name, chunkData, customResumeData) {\n                        return self._options.callbacks.onResume(id, name, chunkData, customResumeData);\n                    },\n                    onAutoRetry: function(id, name, responseJSON, xhr) {\n                        return self._onAutoRetry.apply(self, arguments);\n                    },\n                    onUuidChanged: function(id, newUuid) {\n                        self.log(\""Server requested UUID change from '\"" + self.getUuid(id) + \""' to '\"" + newUuid + \""'\"");\n                        self.setUuid(id, newUuid);\n                    },\n                    getName: qq.bind(self.getName, self),\n                    getUuid: qq.bind(self.getUuid, self),\n                    getSize: qq.bind(self.getSize, self),\n                    setSize: qq.bind(self._setSize, self),\n                    getDataByUuid: function(uuid) {\n                        return self.getUploads({uuid: uuid});\n                    },\n                    isQueued: function(id) {\n                        var status = self.getUploads({id: id}).status;\n                        return status === qq.status.QUEUED ||\n                            status === qq.status.SUBMITTED ||\n                            status === qq.status.UPLOAD_RETRYING ||\n                            status === qq.status.PAUSED;\n                    },\n                    getIdsInProxyGroup: self._uploadData.getIdsInProxyGroup,\n                    getIdsInBatch: self._uploadData.getIdsInBatch,\n                    isInProgress: function(id) {\n                        return self.getUploads({id: id}).status === qq.status.UPLOADING;\n                    },\n                    getCustomResumeData: qq.bind(self._getCustomResumeData, self),\n                    setStatus: function(id, status) {\n                        self._uploadData.setStatus(id, status);\n                    }\n                };\n\n            qq.each(this._options.request, function(prop, val) {\n                options[prop] = val;\n            });\n\n            options.customHeaders = this._customHeadersStore;\n\n            if (additionalOptions) {\n                qq.each(additionalOptions, function(key, val) {\n                    options[key] = val;\n                });\n            }\n\n            return new qq.UploadHandlerController(options, namespace);\n        },\n\n        _fileOrBlobRejected: function(id) {\n            this._netUploadedOrQueued--;\n            this._uploadData.setStatus(id, qq.status.REJECTED);\n        },\n\n        _formatSize: function(bytes) {\n            if (bytes === 0) {\n                return bytes + this._options.text.sizeSymbols[0];\n            }\n            var i = -1;\n            do {\n                bytes = bytes / 1000;\n                i++;\n            } while (bytes > 999);\n\n            return Math.max(bytes, 0.1).toFixed(1) + this._options.text.sizeSymbols[i];\n        },\n\n        // Creates an internal object that tracks various properties of each extra button,\n        // and then actually creates the extra button.\n        _generateExtraButtonSpecs: function() {\n            var self = this;\n\n            this._extraButtonSpecs = {};\n\n            qq.each(this._options.extraButtons, function(idx, extraButtonOptionEntry) {\n                var multiple = extraButtonOptionEntry.multiple,\n                    validation = qq.extend({}, self._options.validation, true),\n                    extraButtonSpec = qq.extend({}, extraButtonOptionEntry);\n\n                if (multiple === undefined) {\n                    multiple = self._options.multiple;\n                }\n\n                if (extraButtonSpec.validation) {\n                    qq.extend(validation, extraButtonOptionEntry.validation, true);\n                }\n\n                qq.extend(extraButtonSpec, {\n                    multiple: multiple,\n                    validation: validation\n                }, true);\n\n                self._initExtraButton(extraButtonSpec);\n            });\n        },\n\n        _getButton: function(buttonId) {\n            var extraButtonsSpec = this._extraButtonSpecs[buttonId];\n\n            if (extraButtonsSpec) {\n                return extraButtonsSpec.element;\n            }\n            else if (buttonId === this._defaultButtonId) {\n                return this._options.button;\n            }\n        },\n\n        /**\n         * Gets the internally used tracking ID for a button.\n         *\n         * @param buttonOrFileInputOrFile `File`, `<input type=\""file\"">`, or a button container element\n         * @returns {*} The button's ID, or undefined if no ID is recoverable\n         * @private\n         */\n        _getButtonId: function(buttonOrFileInputOrFile) {\n            var inputs, fileInput,\n                fileBlobOrInput = buttonOrFileInputOrFile;\n\n            // We want the reference file/blob here if this is a proxy (a file that will be generated on-demand later)\n            if (fileBlobOrInput instanceof qq.BlobProxy) {\n                fileBlobOrInput = fileBlobOrInput.referenceBlob;\n            }\n\n            // If the item is a `Blob` it will never be associated with a button or drop zone.\n            if (fileBlobOrInput && !qq.isBlob(fileBlobOrInput)) {\n                if (qq.isFile(fileBlobOrInput)) {\n                    return fileBlobOrInput.qqButtonId;\n                }\n                else if (fileBlobOrInput.tagName.toLowerCase() === \""input\"" &&\n                    fileBlobOrInput.type.toLowerCase() === \""file\"") {\n\n                    return fileBlobOrInput.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);\n                }\n\n                inputs = fileBlobOrInput.getElementsByTagName(\""input\"");\n\n                qq.each(inputs, function(idx, input) {\n                    if (input.getAttribute(\""type\"") === \""file\"") {\n                        fileInput = input;\n                        return false;\n                    }\n                });\n\n                if (fileInput) {\n                    return fileInput.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);\n                }\n            }\n        },\n\n        _getCustomResumeData: function(fileId) {\n            return this._customResumeDataStore.get(fileId);\n        },\n\n        _getNotFinished: function() {\n            return this._uploadData.retrieve({\n                status: [\n                    qq.status.UPLOADING,\n                    qq.status.UPLOAD_RETRYING,\n                    qq.status.QUEUED,\n                    qq.status.SUBMITTING,\n                    qq.status.SUBMITTED,\n                    qq.status.PAUSED\n                ]\n            }).length;\n        },\n\n        // Get the validation options for this button.  Could be the default validation option\n        // or a specific one assigned to this particular button.\n        _getValidationBase: function(buttonId) {\n            var extraButtonSpec = this._extraButtonSpecs[buttonId];\n\n            return extraButtonSpec ? extraButtonSpec.validation : this._options.validation;\n        },\n\n        _getValidationDescriptor: function(fileWrapper) {\n            if (fileWrapper.file instanceof qq.BlobProxy) {\n                return {\n                    name: qq.getFilename(fileWrapper.file.referenceBlob),\n                    size: fileWrapper.file.referenceBlob.size\n                };\n            }\n\n            return {\n                name: this.getUploads({id: fileWrapper.id}).name,\n                size: this.getUploads({id: fileWrapper.id}).size\n            };\n        },\n\n        _getValidationDescriptors: function(fileWrappers) {\n            var self = this,\n                fileDescriptors = [];\n\n            qq.each(fileWrappers, function(idx, fileWrapper) {\n                fileDescriptors.push(self._getValidationDescriptor(fileWrapper));\n            });\n\n            return fileDescriptors;\n        },\n\n        // Allows camera access on either the default or an extra button for iOS devices.\n        _handleCameraAccess: function() {\n            if (this._options.camera.ios && qq.ios()) {\n                var acceptIosCamera = \""image/*;capture=camera\"",\n                    button = this._options.camera.button,\n                    buttonId = button ? this._getButtonId(button) : this._defaultButtonId,\n                    optionRoot = this._options;\n\n                // If we are not targeting the default button, it is an \""extra\"" button\n                if (buttonId && buttonId !== this._defaultButtonId) {\n                    optionRoot = this._extraButtonSpecs[buttonId];\n                }\n\n                // Camera access won't work in iOS if the `multiple` attribute is present on the file input\n                optionRoot.multiple = false;\n\n                // update the options\n                if (optionRoot.validation.acceptFiles === null) {\n                    optionRoot.validation.acceptFiles = acceptIosCamera;\n                }\n                else {\n                    optionRoot.validation.acceptFiles += \"",\"" + acceptIosCamera;\n                }\n\n                // update the already-created button\n                qq.each(this._buttons, function(idx, button) {\n                    if (button.getButtonId() === buttonId) {\n                        button.setMultiple(optionRoot.multiple);\n                        button.setAcceptFiles(optionRoot.acceptFiles);\n\n                        return false;\n                    }\n                });\n            }\n        },\n\n        _handleCheckedCallback: function(details) {\n            var self = this,\n                callbackRetVal = details.callback();\n\n            if (qq.isGenericPromise(callbackRetVal)) {\n                this.log(details.name + \"" - waiting for \"" + details.name + \"" promise to be fulfilled for \"" + details.identifier);\n                return callbackRetVal.then(\n                    function(successParam) {\n                        self.log(details.name + \"" promise success for \"" + details.identifier);\n                        details.onSuccess(successParam);\n                    },\n                    function() {\n                        if (details.onFailure) {\n                            self.log(details.name + \"" promise failure for \"" + details.identifier);\n                            details.onFailure();\n                        }\n                        else {\n                            self.log(details.name + \"" promise failure for \"" + details.identifier);\n                        }\n                    });\n            }\n\n            if (callbackRetVal !== false) {\n                details.onSuccess(callbackRetVal);\n            }\n            else {\n                if (details.onFailure) {\n                    this.log(details.name + \"" - return value was 'false' for \"" + details.identifier + \"".  Invoking failure callback.\"");\n                    details.onFailure();\n                }\n                else {\n                    this.log(details.name + \"" - return value was 'false' for \"" + details.identifier + \"".  Will not proceed.\"");\n                }\n            }\n\n            return callbackRetVal;\n        },\n\n        // Updates internal state when a new file has been received, and adds it along with its ID to a passed array.\n        _handleNewFile: function(file, batchId, newFileWrapperList) {\n            var self = this,\n                uuid = qq.getUniqueId(),\n                size = -1,\n                name = qq.getFilename(file),\n                actualFile = file.blob || file,\n                handler = this._customNewFileHandler ?\n                    this._customNewFileHandler :\n                    qq.bind(self._handleNewFileGeneric, self);\n\n            if (!qq.isInput(actualFile) && actualFile.size >= 0) {\n                size = actualFile.size;\n            }\n\n            handler(actualFile, name, uuid, size, newFileWrapperList, batchId, this._options.request.uuidName, {\n                uploadData: self._uploadData,\n                paramsStore: self._paramsStore,\n                addFileToHandler: function(id, file) {\n                    self._handler.add(id, file);\n                    self._netUploadedOrQueued++;\n                    self._trackButton(id);\n                }\n            });\n        },\n\n        _handleNewFileGeneric: function(file, name, uuid, size, fileList, batchId) {\n            var self = this;\n            var id = this._uploadData.addFile({\n                uuid: uuid,\n                name: name,\n                size: size,\n                batchId: batchId,\n\n                onBeforeStatusChange: function(id) {\n                    self._handler.add(id, file);\n                }\n            });\n\n            this._trackButton(id);\n\n            this._netUploadedOrQueued++;\n\n            fileList.push({id: id, file: file});\n        },\n\n        _handlePasteSuccess: function(blob, extSuppliedName) {\n            var extension = blob.type.split(\""/\"")[1],\n                name = extSuppliedName;\n\n            /*jshint eqeqeq: true, eqnull: true*/\n            if (name == null) {\n                name = this._options.paste.defaultName;\n            }\n\n            name += \"".\"" + extension;\n\n            this.addFiles({\n                name: name,\n                blob: blob\n            });\n        },\n\n        _handleDeleteSuccess: function(id) {\n            if (this.getUploads({id: id}).status !== qq.status.DELETED) {\n                var name = this.getName(id);\n\n                this._netUploadedOrQueued--;\n                this._netUploaded--;\n                this._handler.expunge(id);\n                this._uploadData.setStatus(id, qq.status.DELETED);\n                this.log(\""Delete request for '\"" + name + \""' has succeeded.\"");\n            }\n        },\n\n        _handleDeleteFailed: function(id, xhrOrXdr) {\n            var name = this.getName(id);\n\n            this._uploadData.setStatus(id, qq.status.DELETE_FAILED);\n            this.log(\""Delete request for '\"" + name + \""' has failed.\"", \""error\"");\n\n            // Check first if xhrOrXdr is actually passed or valid\n            // For error reporting, we only have access to the response status if this is not\n            // an `XDomainRequest`.\n            if (!xhrOrXdr || xhrOrXdr.withCredentials === undefined) {\n                this._options.callbacks.onError(id, name, \""Delete request failed\"", xhrOrXdr);\n            }\n            else {\n                this._options.callbacks.onError(id, name, \""Delete request failed with response code \"" + xhrOrXdr.status, xhrOrXdr);\n            }\n        },\n\n        // Creates an extra button element\n        _initExtraButton: function(spec) {\n            var button = this._createUploadButton({\n                accept: spec.validation.acceptFiles,\n                allowedExtensions: spec.validation.allowedExtensions,\n                element: spec.element,\n                folders: spec.folders,\n                multiple: spec.multiple,\n                title: spec.fileInputTitle\n            });\n\n            this._extraButtonSpecs[button.getButtonId()] = spec;\n        },\n\n        _initFormSupportAndParams: function() {\n            this._formSupport = qq.FormSupport && new qq.FormSupport(\n                this._options.form, qq.bind(this.uploadStoredFiles, this), qq.bind(this.log, this)\n            );\n\n            if (this._formSupport && this._formSupport.attachedToForm) {\n                this._paramsStore = this._createStore(\n                    this._options.request.params,  this._formSupport.getFormInputsAsObject\n                );\n\n                this._options.autoUpload = this._formSupport.newAutoUpload;\n                if (this._formSupport.newEndpoint) {\n                    this._options.request.endpoint = this._formSupport.newEndpoint;\n                }\n            }\n            else {\n                this._paramsStore = this._createStore(this._options.request.params);\n            }\n        },\n\n        _isDeletePossible: function() {\n            if (!qq.DeleteFileAjaxRequester || !this._options.deleteFile.enabled) {\n                return false;\n            }\n\n            if (this._options.cors.expected) {\n                if (qq.supportedFeatures.deleteFileCorsXhr) {\n                    return true;\n                }\n\n                if (qq.supportedFeatures.deleteFileCorsXdr && this._options.cors.allowXdr) {\n                    return true;\n                }\n\n                return false;\n            }\n\n            return true;\n        },\n\n        _isAllowedExtension: function(allowed, fileName) {\n            var valid = false;\n\n            if (!allowed.length) {\n                return true;\n            }\n\n            qq.each(allowed, function(idx, allowedExt) {\n                /**\n                 * If an argument is not a string, ignore it.  Added when a possible issue with MooTools hijacking the\n                 * `allowedExtensions` array was discovered.  See case #735 in the issue tracker for more details.\n                 */\n                if (qq.isString(allowedExt)) {\n                    /*jshint eqeqeq: true, eqnull: true*/\n                    var extRegex = new RegExp(\""\\\\.\"" + allowedExt + \""$\"", \""i\"");\n\n                    if (fileName.match(extRegex) != null) {\n                        valid = true;\n                        return false;\n                    }\n                }\n            });\n\n            return valid;\n        },\n\n        /**\n         * Constructs and returns a message that describes an item/file error.  Also calls `onError` callback.\n         *\n         * @param code REQUIRED - a code that corresponds to a stock message describing this type of error\n         * @param maybeNameOrNames names of the items that have failed, if applicable\n         * @param item `File`, `Blob`, or `<input type=\""file\"">`\n         * @private\n         */\n        _itemError: function(code, maybeNameOrNames, item) {\n            var message = this._options.messages[code],\n                allowedExtensions = [],\n                names = [].concat(maybeNameOrNames),\n                name = names[0],\n                buttonId = this._getButtonId(item),\n                validationBase = this._getValidationBase(buttonId),\n                extensionsForMessage, placeholderMatch;\n\n            function r(name, replacement) { message = message.replace(name, replacement); }\n\n            qq.each(validationBase.allowedExtensions, function(idx, allowedExtension) {\n                /**\n                 * If an argument is not a string, ignore it.  Added when a possible issue with MooTools hijacking the\n                 * `allowedExtensions` array was discovered.  See case #735 in the issue tracker for more details.\n                 */\n                if (qq.isString(allowedExtension)) {\n                    allowedExtensions.push(allowedExtension);\n                }\n            });\n\n            extensionsForMessage = allowedExtensions.join(\"", \"").toLowerCase();\n\n            r(\""{file}\"", this._options.formatFileName(name));\n            r(\""{extensions}\"", extensionsForMessage);\n            r(\""{sizeLimit}\"", this._formatSize(validationBase.sizeLimit));\n            r(\""{minSizeLimit}\"", this._formatSize(validationBase.minSizeLimit));\n\n            placeholderMatch = message.match(/(\\{\\w+\\})/g);\n            if (placeholderMatch !== null) {\n                qq.each(placeholderMatch, function(idx, placeholder) {\n                    r(placeholder, names[idx]);\n                });\n            }\n\n            this._options.callbacks.onError(null, name, message, undefined);\n\n            return message;\n        },\n\n        /**\n         * Conditionally orders a manual retry of a failed upload.\n         *\n         * @param id File ID of the failed upload\n         * @param callback Optional callback to invoke if a retry is prudent.\n         * In lieu of asking the upload handler to retry.\n         * @returns {boolean} true if a manual retry will occur\n         * @private\n         */\n        _manualRetry: function(id, callback) {\n            if (this._onBeforeManualRetry(id)) {\n                this._netUploadedOrQueued++;\n                this._uploadData.setStatus(id, qq.status.UPLOAD_RETRYING);\n\n                if (callback) {\n                    callback(id);\n                }\n                else {\n                    this._handler.retry(id);\n                }\n\n                return true;\n            }\n        },\n\n        _maybeAllComplete: function(id, status) {\n            var self = this,\n                notFinished = this._getNotFinished();\n\n            if (status === qq.status.UPLOAD_SUCCESSFUL) {\n                this._succeededSinceLastAllComplete.push(id);\n            }\n            else if (status === qq.status.UPLOAD_FAILED) {\n                this._failedSinceLastAllComplete.push(id);\n            }\n\n            if (notFinished === 0 &&\n                (this._succeededSinceLastAllComplete.length || this._failedSinceLastAllComplete.length)) {\n                // Attempt to ensure onAllComplete is not invoked before other callbacks, such as onCancel & onComplete\n                setTimeout(function() {\n                    self._onAllComplete(self._succeededSinceLastAllComplete, self._failedSinceLastAllComplete);\n                }, 0);\n            }\n        },\n\n        _maybeHandleIos8SafariWorkaround: function() {\n            var self = this;\n\n            if (this._options.workarounds.ios8SafariUploads && qq.ios800() && qq.iosSafari()) {\n                setTimeout(function() {\n                    window.alert(self._options.messages.unsupportedBrowserIos8Safari);\n                }, 0);\n                throw new qq.Error(this._options.messages.unsupportedBrowserIos8Safari);\n            }\n        },\n\n        _maybeParseAndSendUploadError: function(id, name, response, xhr) {\n            // Assuming no one will actually set the response code to something other than 200\n            // and still set 'success' to true...\n            if (!response.success) {\n                if (xhr && xhr.status !== 200 && !response.error) {\n                    this._options.callbacks.onError(id, name, \""XHR returned response code \"" + xhr.status, xhr);\n                }\n                else {\n                    var errorReason = response.error ? response.error : this._options.text.defaultResponseError;\n                    this._options.callbacks.onError(id, name, errorReason, xhr);\n                }\n            }\n        },\n\n        _maybeProcessNextItemAfterOnValidateCallback: function(validItem, items, index, params, endpoint) {\n            var self = this;\n\n            if (items.length > index) {\n                if (validItem || !this._options.validation.stopOnFirstInvalidFile) {\n                    //use setTimeout to prevent a stack overflow with a large number of files in the batch & non-promissory callbacks\n                    setTimeout(function() {\n                        var validationDescriptor = self._getValidationDescriptor(items[index]),\n                            buttonId = self._getButtonId(items[index].file),\n                            button = self._getButton(buttonId);\n\n                        self._handleCheckedCallback({\n                            name: \""onValidate\"",\n                            callback: qq.bind(self._options.callbacks.onValidate, self, validationDescriptor, button),\n                            onSuccess: qq.bind(self._onValidateCallbackSuccess, self, items, index, params, endpoint),\n                            onFailure: qq.bind(self._onValidateCallbackFailure, self, items, index, params, endpoint),\n                            identifier: \""Item '\"" + validationDescriptor.name + \""', size: \"" + validationDescriptor.size\n                        });\n                    }, 0);\n                }\n                else if (!validItem) {\n                    for (; index < items.length; index++) {\n                        self._fileOrBlobRejected(items[index].id);\n                    }\n                }\n            }\n        },\n\n        _onAllComplete: function(successful, failed) {\n            this._totalProgress && this._totalProgress.onAllComplete(successful, failed, this._preventRetries);\n\n            this._options.callbacks.onAllComplete(qq.extend([], successful), qq.extend([], failed));\n\n            this._succeededSinceLastAllComplete = [];\n            this._failedSinceLastAllComplete = [];\n        },\n\n        /**\n         * Attempt to automatically retry a failed upload.\n         *\n         * @param id The file ID of the failed upload\n         * @param name The name of the file associated with the failed upload\n         * @param responseJSON Response from the server, parsed into a javascript object\n         * @param xhr Ajax transport used to send the failed request\n         * @param callback Optional callback to be invoked if a retry is prudent.\n         * Invoked in lieu of asking the upload handler to retry.\n         * @returns {boolean} true if an auto-retry will occur\n         * @private\n         */\n        _onAutoRetry: function(id, name, responseJSON, xhr, callback) {\n            var self = this;\n\n            self._preventRetries[id] = responseJSON[self._options.retry.preventRetryResponseProperty];\n\n            if (self._shouldAutoRetry(id)) {\n                var retryWaitPeriod = self._options.retry.autoAttemptDelay * 1000;\n\n                self._maybeParseAndSendUploadError.apply(self, arguments);\n                self._options.callbacks.onAutoRetry(id, name, self._autoRetries[id]);\n                self._onBeforeAutoRetry(id, name);\n\n                self._uploadData.setStatus(id, qq.status.UPLOAD_RETRYING);\n                self._retryTimeouts[id] = setTimeout(function() {\n                    self.log(\""Starting retry for \"" + name + \""...\"");\n\n                    if (callback) {\n                        callback(id);\n                    }\n                    else {\n                        self._handler.retry(id);\n                    }\n                }, retryWaitPeriod);\n\n                return true;\n            }\n        },\n\n        _onBeforeAutoRetry: function(id, name) {\n            this.log(\""Waiting \"" + this._options.retry.autoAttemptDelay + \"" seconds before retrying \"" + name + \""...\"");\n        },\n\n        //return false if we should not attempt the requested retry\n        _onBeforeManualRetry: function(id) {\n            var itemLimit = this._currentItemLimit,\n                fileName;\n\n            if (this._preventRetries[id]) {\n                this.log(\""Retries are forbidden for id \"" + id, \""warn\"");\n                return false;\n            }\n            else if (this._handler.isValid(id)) {\n                fileName = this.getName(id);\n\n                if (this._options.callbacks.onManualRetry(id, fileName) === false) {\n                    return false;\n                }\n\n                if (itemLimit > 0 && this._netUploadedOrQueued + 1 > itemLimit) {\n                    this._itemError(\""retryFailTooManyItems\"");\n                    return false;\n                }\n\n                this.log(\""Retrying upload for '\"" + fileName + \""' (id: \"" + id + \"")...\"");\n                return true;\n            }\n            else {\n                this.log(\""'\"" + id + \""' is not a valid file ID\"", \""error\"");\n                return false;\n            }\n        },\n\n        _onCancel: function(id, name) {\n            this._netUploadedOrQueued--;\n\n            clearTimeout(this._retryTimeouts[id]);\n\n            var storedItemIndex = qq.indexOf(this._storedIds, id);\n            if (!this._options.autoUpload && storedItemIndex >= 0) {\n                this._storedIds.splice(storedItemIndex, 1);\n            }\n\n            this._uploadData.setStatus(id, qq.status.CANCELED);\n        },\n\n        _onComplete: function(id, name, result, xhr) {\n            if (!result.success) {\n                this._netUploadedOrQueued--;\n                this._uploadData.setStatus(id, qq.status.UPLOAD_FAILED);\n\n                if (result[this._options.retry.preventRetryResponseProperty] === true) {\n                    this._preventRetries[id] = true;\n                }\n            }\n            else {\n                if (result.thumbnailUrl) {\n                    this._thumbnailUrls[id] = result.thumbnailUrl;\n                }\n\n                this._netUploaded++;\n                this._uploadData.setStatus(id, qq.status.UPLOAD_SUCCESSFUL);\n            }\n\n            this._maybeParseAndSendUploadError(id, name, result, xhr);\n\n            return result.success ? true : false;\n        },\n\n        _onDelete: function(id) {\n            this._uploadData.setStatus(id, qq.status.DELETING);\n        },\n\n        _onDeleteComplete: function(id, xhrOrXdr, isError) {\n            var name = this.getName(id);\n\n            if (isError) {\n                this._handleDeleteFailed(id, xhrOrXdr);\n            }\n            else {\n                this._handleDeleteSuccess(id);\n            }\n        },\n\n        _onInputChange: function(input) {\n            var fileIndex;\n\n            if (qq.supportedFeatures.ajaxUploading) {\n                for (fileIndex = 0; fileIndex < input.files.length; fileIndex++) {\n                    this._annotateWithButtonId(input.files[fileIndex], input);\n                }\n\n                this.addFiles(input.files);\n            }\n            // Android 2.3.x will fire `onchange` even if no file has been selected\n            else if (input.value.length > 0) {\n                this.addFiles(input);\n            }\n\n            qq.each(this._buttons, function(idx, button) {\n                button.reset();\n            });\n        },\n\n        _onProgress: function(id, name, loaded, total) {\n            this._totalProgress && this._totalProgress.onIndividualProgress(id, loaded, total);\n        },\n\n        _onSubmit: function(id, name) {\n            //nothing to do yet in core uploader\n        },\n\n        _onSubmitCallbackSuccess: function(id, name) {\n            this._onSubmit.apply(this, arguments);\n            this._uploadData.setStatus(id, qq.status.SUBMITTED);\n            this._onSubmitted.apply(this, arguments);\n\n            if (this._options.autoUpload) {\n                this._options.callbacks.onSubmitted.apply(this, arguments);\n                this._uploadFile(id);\n            }\n            else {\n                this._storeForLater(id);\n                this._options.callbacks.onSubmitted.apply(this, arguments);\n            }\n        },\n\n        _onSubmitDelete: function(id, onSuccessCallback, additionalMandatedParams) {\n            var uuid = this.getUuid(id),\n                adjustedOnSuccessCallback;\n\n            if (onSuccessCallback) {\n                adjustedOnSuccessCallback = qq.bind(onSuccessCallback, this, id, uuid, additionalMandatedParams);\n            }\n\n            if (this._isDeletePossible()) {\n                this._handleCheckedCallback({\n                    name: \""onSubmitDelete\"",\n                    callback: qq.bind(this._options.callbacks.onSubmitDelete, this, id),\n                    onSuccess: adjustedOnSuccessCallback ||\n                        qq.bind(this._deleteHandler.sendDelete, this, id, uuid, additionalMandatedParams),\n                    identifier: id\n                });\n                return true;\n            }\n            else {\n                this.log(\""Delete request ignored for ID \"" + id + \"", delete feature is disabled or request not possible \"" +\n                    \""due to CORS on a user agent that does not support pre-flighting.\"", \""warn\"");\n                return false;\n            }\n        },\n\n        _onSubmitted: function(id) {\n            //nothing to do in the base uploader\n        },\n\n        _onTotalProgress: function(loaded, total) {\n            this._options.callbacks.onTotalProgress(loaded, total);\n        },\n\n        _onUploadPrep: function(id) {\n            // nothing to do in the core uploader for now\n        },\n\n        _onUpload: function(id, name) {\n            this._uploadData.setStatus(id, qq.status.UPLOADING);\n        },\n\n        _onUploadChunk: function(id, chunkData) {\n            //nothing to do in the base uploader\n        },\n\n        _onUploadStatusChange: function(id, oldStatus, newStatus) {\n            // Make sure a \""queued\"" retry attempt is canceled if the upload has been paused\n            if (newStatus === qq.status.PAUSED) {\n                clearTimeout(this._retryTimeouts[id]);\n            }\n        },\n\n        _onValidateBatchCallbackFailure: function(fileWrappers) {\n            var self = this;\n\n            qq.each(fileWrappers, function(idx, fileWrapper) {\n                self._fileOrBlobRejected(fileWrapper.id);\n            });\n        },\n\n        _onValidateBatchCallbackSuccess: function(validationDescriptors, items, params, endpoint, button) {\n            var errorMessage,\n                itemLimit = this._currentItemLimit,\n                proposedNetFilesUploadedOrQueued = this._netUploadedOrQueued;\n\n            if (itemLimit === 0 || proposedNetFilesUploadedOrQueued <= itemLimit) {\n                if (items.length > 0) {\n                    this._handleCheckedCallback({\n                        name: \""onValidate\"",\n                        callback: qq.bind(this._options.callbacks.onValidate, this, validationDescriptors[0], button),\n                        onSuccess: qq.bind(this._onValidateCallbackSuccess, this, items, 0, params, endpoint),\n                        onFailure: qq.bind(this._onValidateCallbackFailure, this, items, 0, params, endpoint),\n                        identifier: \""Item '\"" + items[0].file.name + \""', size: \"" + items[0].file.size\n                    });\n                }\n                else {\n                    this._itemError(\""noFilesError\"");\n                }\n            }\n            else {\n                this._onValidateBatchCallbackFailure(items);\n                errorMessage = this._options.messages.tooManyItemsError\n                    .replace(/\\{netItems\\}/g, proposedNetFilesUploadedOrQueued)\n                    .replace(/\\{itemLimit\\}/g, itemLimit);\n                this._batchError(errorMessage);\n            }\n        },\n\n        _onValidateCallbackFailure: function(items, index, params, endpoint) {\n            var nextIndex = index + 1;\n\n            this._fileOrBlobRejected(items[index].id, items[index].file.name);\n\n            this._maybeProcessNextItemAfterOnValidateCallback(false, items, nextIndex, params, endpoint);\n        },\n\n        _onValidateCallbackSuccess: function(items, index, params, endpoint) {\n            var self = this,\n                nextIndex = index + 1,\n                validationDescriptor = this._getValidationDescriptor(items[index]);\n\n            this._validateFileOrBlobData(items[index], validationDescriptor)\n                .then(\n                function() {\n                    self._upload(items[index].id, params, endpoint);\n                    self._maybeProcessNextItemAfterOnValidateCallback(true, items, nextIndex, params, endpoint);\n                },\n                function() {\n                    self._maybeProcessNextItemAfterOnValidateCallback(false, items, nextIndex, params, endpoint);\n                }\n            );\n        },\n\n        _prepareItemsForUpload: function(items, params, endpoint) {\n            if (items.length === 0) {\n                this._itemError(\""noFilesError\"");\n                return;\n            }\n\n            var validationDescriptors = this._getValidationDescriptors(items),\n                buttonId = this._getButtonId(items[0].file),\n                button = this._getButton(buttonId);\n\n            this._handleCheckedCallback({\n                name: \""onValidateBatch\"",\n                callback: qq.bind(this._options.callbacks.onValidateBatch, this, validationDescriptors, button),\n                onSuccess: qq.bind(this._onValidateBatchCallbackSuccess, this, validationDescriptors, items, params, endpoint, button),\n                onFailure: qq.bind(this._onValidateBatchCallbackFailure, this, items),\n                identifier: \""batch validation\""\n            });\n        },\n\n        _preventLeaveInProgress: function() {\n            var self = this;\n\n            this._disposeSupport.attach(window, \""beforeunload\"", function(e) {\n                if (self.getInProgress()) {\n                    e = e || window.event;\n                    // for ie, ff\n                    e.returnValue = self._options.messages.onLeave;\n                    // for webkit\n                    return self._options.messages.onLeave;\n                }\n            });\n        },\n\n        // Attempts to refresh session data only if the `qq.Session` module exists\n        // and a session endpoint has been specified.  The `onSessionRequestComplete`\n        // callback will be invoked once the refresh is complete.\n        _refreshSessionData: function() {\n            var self = this,\n                options = this._options.session;\n\n            /* jshint eqnull:true */\n            if (qq.Session && this._options.session.endpoint != null) {\n                if (!this._session) {\n                    qq.extend(options, {cors: this._options.cors});\n\n                    options.log = qq.bind(this.log, this);\n                    options.addFileRecord = qq.bind(this._addCannedFile, this);\n\n                    this._session = new qq.Session(options);\n                }\n\n                setTimeout(function() {\n                    self._session.refresh().then(function(response, xhrOrXdr) {\n                        self._sessionRequestComplete();\n                        self._options.callbacks.onSessionRequestComplete(response, true, xhrOrXdr);\n\n                    }, function(response, xhrOrXdr) {\n\n                        self._options.callbacks.onSessionRequestComplete(response, false, xhrOrXdr);\n                    });\n                }, 0);\n            }\n        },\n\n        _sessionRequestComplete: function() {},\n\n        _setSize: function(id, newSize) {\n            this._uploadData.updateSize(id, newSize);\n            this._totalProgress && this._totalProgress.onNewSize(id);\n        },\n\n        _shouldAutoRetry: function(id) {\n            var uploadData = this._uploadData.retrieve({id: id});\n\n            /*jshint laxbreak: true */\n            if (!this._preventRetries[id]\n                && this._options.retry.enableAuto\n                && uploadData.status !== qq.status.PAUSED) {\n\n                if (this._autoRetries[id] === undefined) {\n                    this._autoRetries[id] = 0;\n                }\n\n                if (this._autoRetries[id] < this._options.retry.maxAutoAttempts) {\n                    this._autoRetries[id] += 1;\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        _storeForLater: function(id) {\n            this._storedIds.push(id);\n        },\n\n        // Maps a file with the button that was used to select it.\n        _trackButton: function(id) {\n            var buttonId;\n\n            if (qq.supportedFeatures.ajaxUploading) {\n                buttonId = this._handler.getFile(id).qqButtonId;\n            }\n            else {\n                buttonId = this._getButtonId(this._handler.getInput(id));\n            }\n\n            if (buttonId) {\n                this._buttonIdsForFileIds[id] = buttonId;\n            }\n        },\n\n        _updateFormSupportAndParams: function(formElementOrId) {\n            this._options.form.element = formElementOrId;\n\n            this._formSupport = qq.FormSupport && new qq.FormSupport(\n                    this._options.form, qq.bind(this.uploadStoredFiles, this), qq.bind(this.log, this)\n                );\n\n            if (this._formSupport && this._formSupport.attachedToForm) {\n                this._paramsStore.addReadOnly(null, this._formSupport.getFormInputsAsObject);\n\n                this._options.autoUpload = this._formSupport.newAutoUpload;\n                if (this._formSupport.newEndpoint) {\n                    this.setEndpoint(this._formSupport.newEndpoint);\n                }\n            }\n        },\n\n        _upload: function(id, params, endpoint) {\n            var name = this.getName(id);\n\n            if (params) {\n                this.setParams(params, id);\n            }\n\n            if (endpoint) {\n                this.setEndpoint(endpoint, id);\n            }\n\n            this._handleCheckedCallback({\n                name: \""onSubmit\"",\n                callback: qq.bind(this._options.callbacks.onSubmit, this, id, name),\n                onSuccess: qq.bind(this._onSubmitCallbackSuccess, this, id, name),\n                onFailure: qq.bind(this._fileOrBlobRejected, this, id, name),\n                identifier: id\n            });\n        },\n\n        _uploadFile: function(id) {\n            if (!this._handler.upload(id)) {\n                this._uploadData.setStatus(id, qq.status.QUEUED);\n            }\n        },\n\n        _uploadStoredFiles: function() {\n            var idToUpload, stillSubmitting,\n                self = this;\n\n            while (this._storedIds.length) {\n                idToUpload = this._storedIds.shift();\n                this._uploadFile(idToUpload);\n            }\n\n            // If we are still waiting for some files to clear validation, attempt to upload these again in a bit\n            stillSubmitting = this.getUploads({status: qq.status.SUBMITTING}).length;\n            if (stillSubmitting) {\n                qq.log(\""Still waiting for \"" + stillSubmitting + \"" files to clear submit queue. Will re-parse stored IDs array shortly.\"");\n                setTimeout(function() {\n                    self._uploadStoredFiles();\n                }, 1000);\n            }\n        },\n\n        /**\n         * Performs some internal validation checks on an item, defined in the `validation` option.\n         *\n         * @param fileWrapper Wrapper containing a `file` along with an `id`\n         * @param validationDescriptor Normalized information about the item (`size`, `name`).\n         * @returns qq.Promise with appropriate callbacks invoked depending on the validity of the file\n         * @private\n         */\n        _validateFileOrBlobData: function(fileWrapper, validationDescriptor) {\n            var self = this,\n                file = (function() {\n                    if (fileWrapper.file instanceof qq.BlobProxy) {\n                        return fileWrapper.file.referenceBlob;\n                    }\n                    return fileWrapper.file;\n                }()),\n                name = validationDescriptor.name,\n                size = validationDescriptor.size,\n                buttonId = this._getButtonId(fileWrapper.file),\n                validationBase = this._getValidationBase(buttonId),\n                validityChecker = new qq.Promise();\n\n            validityChecker.then(\n                function() {},\n                function() {\n                    self._fileOrBlobRejected(fileWrapper.id, name);\n                });\n\n            if (qq.isFileOrInput(file) && !this._isAllowedExtension(validationBase.allowedExtensions, name)) {\n                this._itemError(\""typeError\"", name, file);\n                return validityChecker.failure();\n            }\n\n            if (!this._options.validation.allowEmpty && size === 0) {\n                this._itemError(\""emptyError\"", name, file);\n                return validityChecker.failure();\n            }\n\n            if (size > 0 && validationBase.sizeLimit && size > validationBase.sizeLimit) {\n                this._itemError(\""sizeError\"", name, file);\n                return validityChecker.failure();\n            }\n\n            if (size > 0 && size < validationBase.minSizeLimit) {\n                this._itemError(\""minSizeError\"", name, file);\n                return validityChecker.failure();\n            }\n\n            if (qq.ImageValidation && qq.supportedFeatures.imagePreviews && qq.isFile(file)) {\n                new qq.ImageValidation(file, qq.bind(self.log, self)).validate(validationBase.image).then(\n                    validityChecker.success,\n                    function(errorCode) {\n                        self._itemError(errorCode + \""ImageError\"", name, file);\n                        validityChecker.failure();\n                    }\n                );\n            }\n            else {\n                validityChecker.success();\n            }\n\n            return validityChecker;\n        },\n\n        _wrapCallbacks: function() {\n            var self, safeCallback, prop;\n\n            self = this;\n\n            safeCallback = function(name, callback, args) {\n                var errorMsg;\n\n                try {\n                    return callback.apply(self, args);\n                }\n                catch (exception) {\n                    errorMsg = exception.message || exception.toString();\n                    self.log(\""Caught exception in '\"" + name + \""' callback - \"" + errorMsg, \""error\"");\n                }\n            };\n\n            /* jshint forin: false, loopfunc: true */\n            for (prop in this._options.callbacks) {\n                (function() {\n                    var callbackName, callbackFunc;\n                    callbackName = prop;\n                    callbackFunc = self._options.callbacks[callbackName];\n                    self._options.callbacks[callbackName] = function() {\n                        return safeCallback(callbackName, callbackFunc, arguments);\n                    };\n                }());\n            }\n        }\n    };\n}());\n"",""/*globals qq*/\n(function() {\n    \""use strict\"";\n\n    qq.FineUploaderBasic = function(o) {\n        var self = this;\n\n        // These options define FineUploaderBasic mode.\n        this._options = {\n            debug: false,\n            button: null,\n            multiple: true,\n            maxConnections: 3,\n            disableCancelForFormUploads: false,\n            autoUpload: true,\n            warnBeforeUnload: true,\n\n            request: {\n                customHeaders: {},\n                endpoint: \""/server/upload\"",\n                filenameParam: \""qqfilename\"",\n                forceMultipart: true,\n                inputName: \""qqfile\"",\n                method: \""POST\"",\n                omitDefaultParams: false,\n                params: {},\n                paramsInBody: true,\n                requireSuccessJson: true,\n                totalFileSizeName: \""qqtotalfilesize\"",\n                uuidName: \""qquuid\""\n            },\n\n            validation: {\n                allowedExtensions: [],\n                sizeLimit: 0,\n                minSizeLimit: 0,\n                itemLimit: 0,\n                stopOnFirstInvalidFile: true,\n                acceptFiles: null,\n                image: {\n                    maxHeight: 0,\n                    maxWidth: 0,\n                    minHeight: 0,\n                    minWidth: 0\n                },\n                allowEmpty: false\n            },\n\n            callbacks: {\n                onSubmit: function(id, name) {},\n                onSubmitted: function(id, name) {},\n                onComplete: function(id, name, responseJSON, maybeXhr) {},\n                onAllComplete: function(successful, failed) {},\n                onCancel: function(id, name) {},\n                onUpload: function(id, name) {},\n                onUploadChunk: function(id, name, chunkData) {},\n                onUploadChunkSuccess: function(id, chunkData, responseJSON, xhr) {},\n                onResume: function(id, fileName, chunkData, customResumeData) {},\n                onProgress: function(id, name, loaded, total) {},\n                onTotalProgress: function(loaded, total) {},\n                onError: function(id, name, reason, maybeXhrOrXdr) {},\n                onAutoRetry: function(id, name, attemptNumber) {},\n                onManualRetry: function(id, name) {},\n                onValidateBatch: function(fileOrBlobData) {},\n                onValidate: function(fileOrBlobData) {},\n                onSubmitDelete: function(id) {},\n                onDelete: function(id) {},\n                onDeleteComplete: function(id, xhrOrXdr, isError) {},\n                onPasteReceived: function(blob) {},\n                onStatusChange: function(id, oldStatus, newStatus) {},\n                onSessionRequestComplete: function(response, success, xhrOrXdr) {}\n            },\n\n            messages: {\n                typeError: \""{file} has an invalid extension. Valid extension(s): {extensions}.\"",\n                sizeError: \""{file} is too large, maximum file size is {sizeLimit}.\"",\n                minSizeError: \""{file} is too small, minimum file size is {minSizeLimit}.\"",\n                emptyError: \""{file} is empty, please select files again without it.\"",\n                noFilesError: \""No files to upload.\"",\n                tooManyItemsError: \""Too many items ({netItems}) would be uploaded.  Item limit is {itemLimit}.\"",\n                maxHeightImageError: \""Image is too tall.\"",\n                maxWidthImageError: \""Image is too wide.\"",\n                minHeightImageError: \""Image is not tall enough.\"",\n                minWidthImageError: \""Image is not wide enough.\"",\n                retryFailTooManyItems: \""Retry failed - you have reached your file limit.\"",\n                onLeave: \""The files are being uploaded, if you leave now the upload will be canceled.\"",\n                unsupportedBrowserIos8Safari: \""Unrecoverable error - this browser does not permit file uploading of any kind due to serious bugs in iOS8 Safari.  Please use iOS8 Chrome until Apple fixes these issues.\""\n            },\n\n            retry: {\n                enableAuto: false,\n                maxAutoAttempts: 3,\n                autoAttemptDelay: 5,\n                preventRetryResponseProperty: \""preventRetry\""\n            },\n\n            classes: {\n                buttonHover: \""qq-upload-button-hover\"",\n                buttonFocus: \""qq-upload-button-focus\""\n            },\n\n            chunking: {\n                enabled: false,\n                concurrent: {\n                    enabled: false\n                },\n                mandatory: false,\n                paramNames: {\n                    partIndex: \""qqpartindex\"",\n                    partByteOffset: \""qqpartbyteoffset\"",\n                    chunkSize: \""qqchunksize\"",\n                    totalFileSize: \""qqtotalfilesize\"",\n                    totalParts: \""qqtotalparts\""\n                },\n                partSize: function(id) {\n                    return 2000000;\n                },\n                // only relevant for traditional endpoints, only required when concurrent.enabled === true\n                success: {\n                    endpoint: null,\n\n                    headers: function(id) {\n                        return null;\n                    },\n\n                    jsonPayload: false,\n\n                    method: \""POST\"",\n\n                    params: function(id) {\n                        return null;\n                    },\n\n                    resetOnStatus: []\n                }\n            },\n\n            resume: {\n                enabled: false,\n                recordsExpireIn: 7, //days\n                paramNames: {\n                    resuming: \""qqresume\""\n                },\n                customKeys: function(fileId) {\n                    return [];\n                }\n            },\n\n            formatFileName: function(fileOrBlobName) {\n                return fileOrBlobName;\n            },\n\n            text: {\n                defaultResponseError: \""Upload failure reason unknown\"",\n                fileInputTitle: \""file input\"",\n                sizeSymbols: [\""kB\"", \""MB\"", \""GB\"", \""TB\"", \""PB\"", \""EB\""]\n            },\n\n            deleteFile: {\n                enabled: false,\n                method: \""DELETE\"",\n                endpoint: \""/server/upload\"",\n                customHeaders: {},\n                params: {}\n            },\n\n            cors: {\n                expected: false,\n                sendCredentials: false,\n                allowXdr: false\n            },\n\n            blobs: {\n                defaultName: \""misc_data\""\n            },\n\n            paste: {\n                targetElement: null,\n                defaultName: \""pasted_image\""\n            },\n\n            camera: {\n                ios: false,\n\n                // if ios is true: button is null means target the default button, otherwise target the button specified\n                button: null\n            },\n\n            // This refers to additional upload buttons to be handled by Fine Uploader.\n            // Each element is an object, containing `element` as the only required\n            // property.  The `element` must be a container that will ultimately\n            // contain an invisible `<input type=\""file\"">` created by Fine Uploader.\n            // Optional properties of each object include `multiple`, `validation`,\n            // and `folders`.\n            extraButtons: [],\n\n            // Depends on the session module.  Used to query the server for an initial file list\n            // during initialization and optionally after a `reset`.\n            session: {\n                endpoint: null,\n                params: {},\n                customHeaders: {},\n                refreshOnReset: true\n            },\n\n            // Send parameters associated with an existing form along with the files\n            form: {\n                // Element ID, HTMLElement, or null\n                element: \""qq-form\"",\n\n                // Overrides the base `autoUpload`, unless `element` is null.\n                autoUpload: false,\n\n                // true = upload files on form submission (and squelch submit event)\n                interceptSubmit: true\n            },\n\n            // scale images client side, upload a new file for each scaled version\n            scaling: {\n                customResizer: null,\n\n                // send the original file as well\n                sendOriginal: true,\n\n                // fox orientation for scaled images\n                orient: true,\n\n                // If null, scaled image type will match reference image type.  This value will be referred to\n                // for any size record that does not specific a type.\n                defaultType: null,\n\n                defaultQuality: 80,\n\n                failureText: \""Failed to scale\"",\n\n                includeExif: false,\n\n                // metadata about each requested scaled version\n                sizes: []\n            },\n\n            workarounds: {\n                iosEmptyVideos: true,\n                ios8SafariUploads: true,\n                ios8BrowserCrash: false\n            }\n        };\n\n        // Replace any default options with user defined ones\n        qq.extend(this._options, o, true);\n\n        this._buttons = [];\n        this._extraButtonSpecs = {};\n        this._buttonIdsForFileIds = [];\n\n        this._wrapCallbacks();\n        this._disposeSupport =  new qq.DisposeSupport();\n\n        this._storedIds = [];\n        this._autoRetries = [];\n        this._retryTimeouts = [];\n        this._preventRetries = [];\n        this._thumbnailUrls = [];\n\n        this._netUploadedOrQueued = 0;\n        this._netUploaded = 0;\n        this._uploadData = this._createUploadDataTracker();\n\n        this._initFormSupportAndParams();\n\n        this._customHeadersStore = this._createStore(this._options.request.customHeaders);\n        this._deleteFileCustomHeadersStore = this._createStore(this._options.deleteFile.customHeaders);\n\n        this._deleteFileParamsStore = this._createStore(this._options.deleteFile.params);\n\n        this._endpointStore = this._createStore(this._options.request.endpoint);\n        this._deleteFileEndpointStore = this._createStore(this._options.deleteFile.endpoint);\n\n        this._handler = this._createUploadHandler();\n\n        this._deleteHandler = qq.DeleteFileAjaxRequester && this._createDeleteHandler();\n\n        if (this._options.button) {\n            this._defaultButtonId = this._createUploadButton({\n                element: this._options.button,\n                title: this._options.text.fileInputTitle\n            }).getButtonId();\n        }\n\n        this._generateExtraButtonSpecs();\n\n        this._handleCameraAccess();\n\n        if (this._options.paste.targetElement) {\n            if (qq.PasteSupport) {\n                this._pasteHandler = this._createPasteHandler();\n            }\n            else {\n                this.log(\""Paste support module not found\"", \""error\"");\n            }\n        }\n\n        this._options.warnBeforeUnload && this._preventLeaveInProgress();\n\n        this._imageGenerator = qq.ImageGenerator && new qq.ImageGenerator(qq.bind(this.log, this));\n        this._refreshSessionData();\n\n        this._succeededSinceLastAllComplete = [];\n        this._failedSinceLastAllComplete = [];\n\n        this._scaler = (qq.Scaler && new qq.Scaler(this._options.scaling, qq.bind(this.log, this))) || {};\n        if (this._scaler.enabled) {\n            this._customNewFileHandler = qq.bind(this._scaler.handleNewFile, this._scaler);\n        }\n\n        if (qq.TotalProgress && qq.supportedFeatures.progressBar) {\n            this._totalProgress = new qq.TotalProgress(\n                qq.bind(this._onTotalProgress, this),\n\n                function(id) {\n                    var entry = self._uploadData.retrieve({id: id});\n                    return (entry && entry.size) || 0;\n                }\n            );\n        }\n\n        this._currentItemLimit = this._options.validation.itemLimit;\n\n        this._customResumeDataStore = this._createStore();\n    };\n\n    // Define the private & public API methods.\n    qq.FineUploaderBasic.prototype = qq.basePublicApi;\n    qq.extend(qq.FineUploaderBasic.prototype, qq.basePrivateApi);\n}());\n"",""/*globals qq, XDomainRequest*/\n/** Generic class for sending non-upload ajax requests and handling the associated responses **/\nqq.AjaxRequester = function(o) {\n    \""use strict\"";\n\n    var log, shouldParamsBeInQueryString,\n        queue = [],\n        requestData = {},\n        options = {\n            acceptHeader: null,\n            validMethods: [\""PATCH\"", \""POST\"", \""PUT\""],\n            method: \""POST\"",\n            contentType: \""application/x-www-form-urlencoded\"",\n            maxConnections: 3,\n            customHeaders: {},\n            endpointStore: {},\n            paramsStore: {},\n            mandatedParams: {},\n            allowXRequestedWithAndCacheControl: true,\n            successfulResponseCodes: {\n                DELETE: [200, 202, 204],\n                PATCH: [200, 201, 202, 203, 204],\n                POST: [200, 201, 202, 203, 204],\n                PUT: [200, 201, 202, 203, 204],\n                GET: [200]\n            },\n            cors: {\n                expected: false,\n                sendCredentials: false\n            },\n            log: function(str, level) {},\n            onSend: function(id) {},\n            onComplete: function(id, xhrOrXdr, isError) {},\n            onProgress: null\n        };\n\n    qq.extend(options, o);\n    log = options.log;\n\n    if (qq.indexOf(options.validMethods, options.method) < 0) {\n        throw new Error(\""'\"" + options.method + \""' is not a supported method for this type of request!\"");\n    }\n\n    // [Simple methods](http://www.w3.org/TR/cors/#simple-method)\n    // are defined by the W3C in the CORS spec as a list of methods that, in part,\n    // make a CORS request eligible to be exempt from preflighting.\n    function isSimpleMethod() {\n        return qq.indexOf([\""GET\"", \""POST\"", \""HEAD\""], options.method) >= 0;\n    }\n\n    // [Simple headers](http://www.w3.org/TR/cors/#simple-header)\n    // are defined by the W3C in the CORS spec as a list of headers that, in part,\n    // make a CORS request eligible to be exempt from preflighting.\n    function containsNonSimpleHeaders(headers) {\n        var containsNonSimple = false;\n\n        qq.each(containsNonSimple, function(idx, header) {\n            if (qq.indexOf([\""Accept\"", \""Accept-Language\"", \""Content-Language\"", \""Content-Type\""], header) < 0) {\n                containsNonSimple = true;\n                return false;\n            }\n        });\n\n        return containsNonSimple;\n    }\n\n    function isXdr(xhr) {\n        //The `withCredentials` test is a commonly accepted way to determine if XHR supports CORS.\n        return options.cors.expected && xhr.withCredentials === undefined;\n    }\n\n    // Returns either a new `XMLHttpRequest` or `XDomainRequest` instance.\n    function getCorsAjaxTransport() {\n        var xhrOrXdr;\n\n        if (window.XMLHttpRequest || window.ActiveXObject) {\n            xhrOrXdr = qq.createXhrInstance();\n\n            if (xhrOrXdr.withCredentials === undefined) {\n                xhrOrXdr = new XDomainRequest();\n                // Workaround for XDR bug in IE9 - https://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified?forum=iewebdevelopment\n                xhrOrXdr.onload = function() {};\n                xhrOrXdr.onerror = function() {};\n                xhrOrXdr.ontimeout = function() {};\n                xhrOrXdr.onprogress = function() {};\n            }\n        }\n\n        return xhrOrXdr;\n    }\n\n    // Returns either a new XHR/XDR instance, or an existing one for the associated `File` or `Blob`.\n    function getXhrOrXdr(id, suppliedXhr) {\n        var xhrOrXdr = requestData[id].xhr;\n\n        if (!xhrOrXdr) {\n            if (suppliedXhr) {\n                xhrOrXdr = suppliedXhr;\n            }\n            else {\n                if (options.cors.expected) {\n                    xhrOrXdr = getCorsAjaxTransport();\n                }\n                else {\n                    xhrOrXdr = qq.createXhrInstance();\n                }\n            }\n\n            requestData[id].xhr = xhrOrXdr;\n        }\n\n        return xhrOrXdr;\n    }\n\n    // Removes element from queue, sends next request\n    function dequeue(id) {\n        var i = qq.indexOf(queue, id),\n            max = options.maxConnections,\n            nextId;\n\n        delete requestData[id];\n        queue.splice(i, 1);\n\n        if (queue.length >= max && i < max) {\n            nextId = queue[max - 1];\n            sendRequest(nextId);\n        }\n    }\n\n    function onComplete(id, xdrError) {\n        var xhr = getXhrOrXdr(id),\n            method = options.method,\n            isError = xdrError === true;\n\n        dequeue(id);\n\n        if (isError) {\n            log(method + \"" request for \"" + id + \"" has failed\"", \""error\"");\n        }\n        else if (!isXdr(xhr) && !isResponseSuccessful(xhr.status)) {\n            isError = true;\n            log(method + \"" request for \"" + id + \"" has failed - response code \"" + xhr.status, \""error\"");\n        }\n\n        options.onComplete(id, xhr, isError);\n    }\n\n    function getParams(id) {\n        var onDemandParams = requestData[id].additionalParams,\n            mandatedParams = options.mandatedParams,\n            params;\n\n        if (options.paramsStore.get) {\n            params = options.paramsStore.get(id);\n        }\n\n        if (onDemandParams) {\n            qq.each(onDemandParams, function(name, val) {\n                params = params || {};\n                params[name] = val;\n            });\n        }\n\n        if (mandatedParams) {\n            qq.each(mandatedParams, function(name, val) {\n                params = params || {};\n                params[name] = val;\n            });\n        }\n\n        return params;\n    }\n\n    function sendRequest(id, optXhr) {\n        var xhr = getXhrOrXdr(id, optXhr),\n            method = options.method,\n            params = getParams(id),\n            payload = requestData[id].payload,\n            url;\n\n        options.onSend(id);\n\n        url = createUrl(id, params, requestData[id].additionalQueryParams);\n\n        // XDR and XHR status detection APIs differ a bit.\n        if (isXdr(xhr)) {\n            xhr.onload = getXdrLoadHandler(id);\n            xhr.onerror = getXdrErrorHandler(id);\n        }\n        else {\n            xhr.onreadystatechange = getXhrReadyStateChangeHandler(id);\n        }\n\n        registerForUploadProgress(id);\n\n        // The last parameter is assumed to be ignored if we are actually using `XDomainRequest`.\n        xhr.open(method, url, true);\n\n        // Instruct the transport to send cookies along with the CORS request,\n        // unless we are using `XDomainRequest`, which is not capable of this.\n        if (options.cors.expected && options.cors.sendCredentials && !isXdr(xhr)) {\n            xhr.withCredentials = true;\n        }\n\n        setHeaders(id);\n\n        log(\""Sending \"" + method + \"" request for \"" + id);\n\n        if (payload) {\n            xhr.send(payload);\n        }\n        else if (shouldParamsBeInQueryString || !params) {\n            xhr.send();\n        }\n        else if (params && options.contentType && options.contentType.toLowerCase().indexOf(\""application/x-www-form-urlencoded\"") >= 0) {\n            xhr.send(qq.obj2url(params, \""\""));\n        }\n        else if (params && options.contentType && options.contentType.toLowerCase().indexOf(\""application/json\"") >= 0) {\n            xhr.send(JSON.stringify(params));\n        }\n        else {\n            xhr.send(params);\n        }\n\n        return xhr;\n    }\n\n    function createUrl(id, params, additionalQueryParams) {\n        var endpoint = options.endpointStore.get(id),\n            addToPath = requestData[id].addToPath;\n\n        /*jshint -W116,-W041 */\n        if (addToPath != undefined) {\n            endpoint += \""/\"" + addToPath;\n        }\n\n        if (shouldParamsBeInQueryString && params) {\n            endpoint = qq.obj2url(params, endpoint);\n        }\n\n        if (additionalQueryParams) {\n            endpoint = qq.obj2url(additionalQueryParams, endpoint);\n        }\n\n        return endpoint;\n    }\n\n    // Invoked by the UA to indicate a number of possible states that describe\n    // a live `XMLHttpRequest` transport.\n    function getXhrReadyStateChangeHandler(id) {\n        return function() {\n            if (getXhrOrXdr(id).readyState === 4) {\n                onComplete(id);\n            }\n        };\n    }\n\n    function registerForUploadProgress(id) {\n        var onProgress = options.onProgress;\n\n        if (onProgress) {\n            getXhrOrXdr(id).upload.onprogress = function(e) {\n                if (e.lengthComputable) {\n                    onProgress(id, e.loaded, e.total);\n                }\n            };\n        }\n    }\n\n    // This will be called by IE to indicate **success** for an associated\n    // `XDomainRequest` transported request.\n    function getXdrLoadHandler(id) {\n        return function() {\n            onComplete(id);\n        };\n    }\n\n    // This will be called by IE to indicate **failure** for an associated\n    // `XDomainRequest` transported request.\n    function getXdrErrorHandler(id) {\n        return function() {\n            onComplete(id, true);\n        };\n    }\n\n    function setHeaders(id) {\n        var xhr = getXhrOrXdr(id),\n            customHeaders = options.customHeaders,\n            onDemandHeaders = requestData[id].additionalHeaders || {},\n            method = options.method,\n            allHeaders = {};\n\n        // If XDomainRequest is being used, we can't set headers, so just ignore this block.\n        if (!isXdr(xhr)) {\n            options.acceptHeader && xhr.setRequestHeader(\""Accept\"", options.acceptHeader);\n\n            // Only attempt to add X-Requested-With & Cache-Control if permitted\n            if (options.allowXRequestedWithAndCacheControl) {\n                // Do not add X-Requested-With & Cache-Control if this is a cross-origin request\n                // OR the cross-origin request contains a non-simple method or header.\n                // This is done to ensure a preflight is not triggered exclusively based on the\n                // addition of these 2 non-simple headers.\n                if (!options.cors.expected || (!isSimpleMethod() || containsNonSimpleHeaders(customHeaders))) {\n                    xhr.setRequestHeader(\""X-Requested-With\"", \""XMLHttpRequest\"");\n                    xhr.setRequestHeader(\""Cache-Control\"", \""no-cache\"");\n                }\n            }\n\n            if (options.contentType && (method === \""POST\"" || method === \""PUT\"")) {\n                xhr.setRequestHeader(\""Content-Type\"", options.contentType);\n            }\n\n            qq.extend(allHeaders, qq.isFunction(customHeaders) ? customHeaders(id) : customHeaders);\n            qq.extend(allHeaders, onDemandHeaders);\n\n            qq.each(allHeaders, function(name, val) {\n                xhr.setRequestHeader(name, val);\n            });\n        }\n    }\n\n    function isResponseSuccessful(responseCode) {\n        return qq.indexOf(options.successfulResponseCodes[options.method], responseCode) >= 0;\n    }\n\n    function prepareToSend(id, optXhr, addToPath, additionalParams, additionalQueryParams, additionalHeaders, payload) {\n        requestData[id] = {\n            addToPath: addToPath,\n            additionalParams: additionalParams,\n            additionalQueryParams: additionalQueryParams,\n            additionalHeaders: additionalHeaders,\n            payload: payload\n        };\n\n        var len = queue.push(id);\n\n        // if too many active connections, wait...\n        if (len <= options.maxConnections) {\n            return sendRequest(id, optXhr);\n        }\n    }\n\n    shouldParamsBeInQueryString = options.method === \""GET\"" || options.method === \""DELETE\"";\n\n    qq.extend(this, {\n        // Start the process of sending the request.  The ID refers to the file associated with the request.\n        initTransport: function(id) {\n            var path, params, headers, payload, cacheBuster, additionalQueryParams;\n\n            return {\n                // Optionally specify the end of the endpoint path for the request.\n                withPath: function(appendToPath) {\n                    path = appendToPath;\n                    return this;\n                },\n\n                // Optionally specify additional parameters to send along with the request.\n                // These will be added to the query string for GET/DELETE requests or the payload\n                // for POST/PUT requests.  The Content-Type of the request will be used to determine\n                // how these parameters should be formatted as well.\n                withParams: function(additionalParams) {\n                    params = additionalParams;\n                    return this;\n                },\n\n                withQueryParams: function(_additionalQueryParams_) {\n                    additionalQueryParams = _additionalQueryParams_;\n                    return this;\n                },\n\n                // Optionally specify additional headers to send along with the request.\n                withHeaders: function(additionalHeaders) {\n                    headers = additionalHeaders;\n                    return this;\n                },\n\n                // Optionally specify a payload/body for the request.\n                withPayload: function(thePayload) {\n                    payload = thePayload;\n                    return this;\n                },\n\n                // Appends a cache buster (timestamp) to the request URL as a query parameter (only if GET or DELETE)\n                withCacheBuster: function() {\n                    cacheBuster = true;\n                    return this;\n                },\n\n                // Send the constructed request.\n                send: function(optXhr) {\n                    if (cacheBuster && qq.indexOf([\""GET\"", \""DELETE\""], options.method) >= 0) {\n                        params.qqtimestamp = new Date().getTime();\n                    }\n\n                    return prepareToSend(id, optXhr, path, params, additionalQueryParams, headers, payload);\n                }\n            };\n        },\n\n        canceled: function(id) {\n            dequeue(id);\n        }\n    });\n};\n"",""/* globals qq */\n/**\n * Common upload handler functions.\n *\n * @constructor\n */\nqq.UploadHandler = function(spec) {\n    \""use strict\"";\n\n    var proxy = spec.proxy,\n        fileState = {},\n        onCancel = proxy.onCancel,\n        getName = proxy.getName;\n\n    qq.extend(this, {\n        add: function(id, fileItem) {\n            fileState[id] = fileItem;\n            fileState[id].temp = {};\n        },\n\n        cancel: function(id) {\n            var self = this,\n                cancelFinalizationEffort = new qq.Promise(),\n                onCancelRetVal = onCancel(id, getName(id), cancelFinalizationEffort);\n\n            onCancelRetVal.then(function() {\n                if (self.isValid(id)) {\n                    fileState[id].canceled = true;\n                    self.expunge(id);\n                }\n                cancelFinalizationEffort.success();\n            });\n        },\n\n        expunge: function(id) {\n            delete fileState[id];\n        },\n\n        getThirdPartyFileId: function(id) {\n            return fileState[id].key;\n        },\n\n        isValid: function(id) {\n            return fileState[id] !== undefined;\n        },\n\n        reset: function() {\n            fileState = {};\n        },\n\n        _getFileState: function(id) {\n            return fileState[id];\n        },\n\n        _setThirdPartyFileId: function(id, thirdPartyFileId) {\n            fileState[id].key = thirdPartyFileId;\n        },\n\n        _wasCanceled: function(id) {\n            return !!fileState[id].canceled;\n        }\n    });\n};\n"",""/*globals qq*/\n/**\n * Base upload handler module.  Controls more specific handlers.\n *\n * @param o Options.  Passed along to the specific handler submodule as well.\n * @param namespace [optional] Namespace for the specific handler.\n */\nqq.UploadHandlerController = function(o, namespace) {\n    \""use strict\"";\n\n    var controller = this,\n        chunkingPossible = false,\n        concurrentChunkingPossible = false,\n        chunking, preventRetryResponse, log, handler,\n\n    options = {\n        paramsStore: {},\n        maxConnections: 3, // maximum number of concurrent uploads\n        chunking: {\n            enabled: false,\n            multiple: {\n                enabled: false\n            }\n        },\n        log: function(str, level) {},\n        onProgress: function(id, fileName, loaded, total) {},\n        onComplete: function(id, fileName, response, xhr) {},\n        onCancel: function(id, fileName) {},\n        onUploadPrep: function(id) {}, // Called if non-trivial operations will be performed before onUpload\n        onUpload: function(id, fileName) {},\n        onUploadChunk: function(id, fileName, chunkData) {},\n        onUploadChunkSuccess: function(id, chunkData, response, xhr) {},\n        onAutoRetry: function(id, fileName, response, xhr) {},\n        onResume: function(id, fileName, chunkData, customResumeData) {},\n        onUuidChanged: function(id, newUuid) {},\n        getName: function(id) {},\n        setSize: function(id, newSize) {},\n        isQueued: function(id) {},\n        getIdsInProxyGroup: function(id) {},\n        getIdsInBatch: function(id) {},\n        isInProgress: function(id) {}\n    },\n\n    chunked = {\n        // Called when each chunk has uploaded successfully\n        done: function(id, chunkIdx, response, xhr) {\n            var chunkData = handler._getChunkData(id, chunkIdx);\n\n            handler._getFileState(id).attemptingResume = false;\n\n            delete handler._getFileState(id).temp.chunkProgress[chunkIdx];\n            handler._getFileState(id).loaded += chunkData.size;\n\n            options.onUploadChunkSuccess(id, handler._getChunkDataForCallback(chunkData), response, xhr);\n        },\n\n        // Called when all chunks have been successfully uploaded and we want to ask the handler to perform any\n        // logic associated with closing out the file, such as combining the chunks.\n        finalize: function(id) {\n            var size = options.getSize(id),\n                name = options.getName(id);\n\n            log(\""All chunks have been uploaded for \"" + id + \"" - finalizing....\"");\n            handler.finalizeChunks(id).then(\n                function(response, xhr) {\n                    log(\""Finalize successful for \"" + id);\n\n                    var normaizedResponse = upload.normalizeResponse(response, true);\n\n                    options.onProgress(id, name, size, size);\n                    handler._maybeDeletePersistedChunkData(id);\n                    upload.cleanup(id, normaizedResponse, xhr);\n                },\n                function(response, xhr) {\n                    var normalizedResponse = upload.normalizeResponse(response, false);\n\n                    log(\""Problem finalizing chunks for file ID \"" + id + \"" - \"" + normalizedResponse.error, \""error\"");\n\n                    if (\n                        normalizedResponse.reset ||\n                        (xhr && options.chunking.success.resetOnStatus.indexOf(xhr.status) >= 0)\n                    ) {\n                        chunked.reset(id);\n                    }\n\n                    if (!options.onAutoRetry(id, name, normalizedResponse, xhr)) {\n                        upload.cleanup(id, normalizedResponse, xhr);\n                    }\n                }\n            );\n        },\n\n        handleFailure: function(chunkIdx, id, response, xhr) {\n            var name = options.getName(id);\n\n            log(\""Chunked upload request failed for \"" + id + \"", chunk \"" + chunkIdx);\n\n            handler.clearCachedChunk(id, chunkIdx);\n\n            var responseToReport = upload.normalizeResponse(response, false),\n                inProgressIdx;\n\n            if (responseToReport.reset) {\n                chunked.reset(id);\n            }\n            else {\n                inProgressIdx = qq.indexOf(handler._getFileState(id).chunking.inProgress, chunkIdx);\n                if (inProgressIdx >= 0) {\n                    handler._getFileState(id).chunking.inProgress.splice(inProgressIdx, 1);\n                    handler._getFileState(id).chunking.remaining.unshift(chunkIdx);\n                }\n            }\n\n            // We may have aborted all other in-progress chunks for this file due to a failure.\n            // If so, ignore the failures associated with those aborts.\n            if (!handler._getFileState(id).temp.ignoreFailure) {\n                // If this chunk has failed, we want to ignore all other failures of currently in-progress\n                // chunks since they will be explicitly aborted\n                if (concurrentChunkingPossible) {\n                    handler._getFileState(id).temp.ignoreFailure = true;\n\n                    log(qq.format(\""Going to attempt to abort these chunks: {}. These are currently in-progress: {}.\"", JSON.stringify(Object.keys(handler._getXhrs(id))), JSON.stringify(handler._getFileState(id).chunking.inProgress)));\n                    qq.each(handler._getXhrs(id), function(ckid, ckXhr) {\n                        log(qq.format(\""Attempting to abort file {}.{}. XHR readyState {}. \"", id, ckid, ckXhr.readyState));\n                        ckXhr.abort();\n                        // Flag the transport, in case we are waiting for some other async operation\n                        // to complete before attempting to upload the chunk\n                        ckXhr._cancelled = true;\n                    });\n\n                    // We must indicate that all aborted chunks are no longer in progress\n                    handler.moveInProgressToRemaining(id);\n\n                    // Free up any connections used by these chunks, but don't allow any\n                    // other files to take up the connections (until we have exhausted all auto-retries)\n                    connectionManager.free(id, true);\n                }\n\n                if (!options.onAutoRetry(id, name, responseToReport, xhr)) {\n                    // If one chunk fails, abort all of the others to avoid odd race conditions that occur\n                    // if a chunk succeeds immediately after one fails before we have determined if the upload\n                    // is a failure or not.\n                    upload.cleanup(id, responseToReport, xhr);\n                }\n            }\n        },\n\n        hasMoreParts: function(id) {\n            return !!handler._getFileState(id).chunking.remaining.length;\n        },\n\n        nextPart: function(id) {\n            var nextIdx = handler._getFileState(id).chunking.remaining.shift();\n\n            if (nextIdx >= handler._getTotalChunks(id)) {\n                nextIdx = null;\n            }\n\n            return nextIdx;\n        },\n\n        reset: function(id) {\n            log(\""Server or callback has ordered chunking effort to be restarted on next attempt for item ID \"" + id, \""error\"");\n\n            handler._maybeDeletePersistedChunkData(id);\n            handler.reevaluateChunking(id);\n            handler._getFileState(id).loaded = 0;\n            handler._getFileState(id).attemptingResume = false;\n        },\n\n        sendNext: function(id) {\n            var size = options.getSize(id),\n                name = options.getName(id),\n                chunkIdx = chunked.nextPart(id),\n                chunkData = handler._getChunkData(id, chunkIdx),\n                fileState = handler._getFileState(id),\n                resuming = fileState.attemptingResume,\n                inProgressChunks = fileState.chunking.inProgress || [];\n\n            if (fileState.loaded == null) {\n                fileState.loaded = 0;\n            }\n\n            // Don't follow-through with the resume attempt if the integrator returns false from onResume\n            if (resuming && options.onResume(id, name, chunkData, fileState.customResumeData) === false) {\n                chunked.reset(id);\n                chunkIdx = chunked.nextPart(id);\n                chunkData = handler._getChunkData(id, chunkIdx);\n                resuming = false;\n            }\n\n            // If all chunks have already uploaded successfully, we must be re-attempting the finalize step.\n            if (chunkIdx == null && inProgressChunks.length === 0) {\n                chunked.finalize(id);\n            }\n\n            // Send the next chunk\n            else {\n                inProgressChunks.push(chunkIdx);\n                handler._getFileState(id).chunking.inProgress = inProgressChunks;\n\n                if (concurrentChunkingPossible) {\n                    connectionManager.open(id, chunkIdx);\n                }\n\n                if (concurrentChunkingPossible && connectionManager.available() && handler._getFileState(id).chunking.remaining.length) {\n                    chunked.sendNext(id);\n                }\n\n                if (chunkData.blob.size === 0) {\n                    log(qq.format(\""Chunk {} for file {} will not be uploaded, zero sized chunk.\"", chunkIdx, id), \""error\"");\n                    chunked.handleFailure(chunkIdx, id, \""File is no longer available\"", null);\n                }\n\n                var onUploadChunkPromise = options.onUploadChunk(id, name, handler._getChunkDataForCallback(chunkData));\n\n                onUploadChunkPromise.then(\n                    function(requestOverrides) {\n                        if (!options.isInProgress(id)) {\n                            log(qq.format(\""Not sending chunked upload request for item {}.{} - no longer in progress.\"", id, chunkIdx));\n                        }\n                        else {\n                            log(qq.format(\""Sending chunked upload request for item {}.{}, bytes {}-{} of {}.\"", id, chunkIdx, chunkData.start + 1, chunkData.end, size));\n\n                            var uploadChunkData = {\n                                chunkIdx: chunkIdx,\n                                id: id,\n                                overrides: requestOverrides,\n                                resuming: resuming\n                            };\n\n                            handler.uploadChunk(uploadChunkData).then(\n                                // upload chunk success\n                                function success(response, xhr) {\n                                    log(\""Chunked upload request succeeded for \"" + id + \"", chunk \"" + chunkIdx);\n\n                                    handler.clearCachedChunk(id, chunkIdx);\n\n                                    var inProgressChunks = handler._getFileState(id).chunking.inProgress || [],\n                                        responseToReport = upload.normalizeResponse(response, true),\n                                        inProgressChunkIdx = qq.indexOf(inProgressChunks, chunkIdx);\n\n                                    log(qq.format(\""Chunk {} for file {} uploaded successfully.\"", chunkIdx, id));\n\n                                    chunked.done(id, chunkIdx, responseToReport, xhr);\n\n                                    if (inProgressChunkIdx >= 0) {\n                                        inProgressChunks.splice(inProgressChunkIdx, 1);\n                                    }\n\n                                    handler._maybePersistChunkedState(id);\n\n                                    if (!chunked.hasMoreParts(id) && inProgressChunks.length === 0) {\n                                        chunked.finalize(id);\n                                    }\n                                    else if (chunked.hasMoreParts(id)) {\n                                        chunked.sendNext(id);\n                                    }\n                                    else {\n                                        log(qq.format(\""File ID {} has no more chunks to send and these chunk indexes are still marked as in-progress: {}\"", id, JSON.stringify(inProgressChunks)));\n                                    }\n                                },\n\n                                // upload chunk failure\n                                function failure(response, xhr) {\n                                    chunked.handleFailure(chunkIdx, id, response, xhr);\n                                }\n                            )\n                                .done(function () {\n                                    handler.clearXhr(id, chunkIdx);\n                                });\n                        }\n                    },\n\n                    function(error) {\n                        chunked.handleFailure(chunkIdx, id, error, null);\n                    }\n                );\n            }\n        }\n    },\n\n    connectionManager = {\n        _open: [],\n        _openChunks: {},\n        _waiting: [],\n\n        available: function() {\n            var max = options.maxConnections,\n                openChunkEntriesCount = 0,\n                openChunksCount = 0;\n\n            qq.each(connectionManager._openChunks, function(fileId, openChunkIndexes) {\n                openChunkEntriesCount++;\n                openChunksCount += openChunkIndexes.length;\n            });\n\n            return max - (connectionManager._open.length - openChunkEntriesCount + openChunksCount);\n        },\n\n        /**\n         * Removes element from queue, starts upload of next\n         */\n        free: function(id, dontAllowNext) {\n            var allowNext = !dontAllowNext,\n                waitingIndex = qq.indexOf(connectionManager._waiting, id),\n                connectionsIndex = qq.indexOf(connectionManager._open, id),\n                nextId;\n\n            delete connectionManager._openChunks[id];\n\n            if (upload.getProxyOrBlob(id) instanceof qq.BlobProxy) {\n                log(\""Generated blob upload has ended for \"" + id + \"", disposing generated blob.\"");\n                delete handler._getFileState(id).file;\n            }\n\n            // If this file was not consuming a connection, it was just waiting, so remove it from the waiting array\n            if (waitingIndex >= 0) {\n                connectionManager._waiting.splice(waitingIndex, 1);\n            }\n            // If this file was consuming a connection, allow the next file to be uploaded\n            else if (allowNext && connectionsIndex >= 0) {\n                connectionManager._open.splice(connectionsIndex, 1);\n\n                nextId = connectionManager._waiting.shift();\n                if (nextId >= 0) {\n                    connectionManager._open.push(nextId);\n                    upload.start(nextId);\n                }\n            }\n        },\n\n        getWaitingOrConnected: function() {\n            var waitingOrConnected = [];\n\n            // Chunked files may have multiple connections open per chunk (if concurrent chunking is enabled)\n            // We need to grab the file ID of any file that has at least one chunk consuming a connection.\n            qq.each(connectionManager._openChunks, function(fileId, chunks) {\n                if (chunks && chunks.length) {\n                    waitingOrConnected.push(parseInt(fileId));\n                }\n            });\n\n            // For non-chunked files, only one connection will be consumed per file.\n            // This is where we aggregate those file IDs.\n            qq.each(connectionManager._open, function(idx, fileId) {\n                if (!connectionManager._openChunks[fileId]) {\n                    waitingOrConnected.push(parseInt(fileId));\n                }\n            });\n\n            // There may be files waiting for a connection.\n            waitingOrConnected = waitingOrConnected.concat(connectionManager._waiting);\n\n            return waitingOrConnected;\n        },\n\n        isUsingConnection: function(id) {\n            return qq.indexOf(connectionManager._open, id) >= 0;\n        },\n\n        open: function(id, chunkIdx) {\n            if (chunkIdx == null) {\n                connectionManager._waiting.push(id);\n            }\n\n            if (connectionManager.available()) {\n                if (chunkIdx == null) {\n                    connectionManager._waiting.pop();\n                    connectionManager._open.push(id);\n                }\n                else {\n                    (function() {\n                        var openChunksEntry = connectionManager._openChunks[id] || [];\n                        openChunksEntry.push(chunkIdx);\n                        connectionManager._openChunks[id] = openChunksEntry;\n                    }());\n                }\n\n                return true;\n            }\n\n            return false;\n        },\n\n        reset: function() {\n            connectionManager._waiting = [];\n            connectionManager._open = [];\n        }\n    },\n\n    simple = {\n        send: function(id, name) {\n            handler._getFileState(id).loaded = 0;\n\n            log(\""Sending simple upload request for \"" + id);\n            handler.uploadFile(id).then(\n                function(response, optXhr) {\n                    log(\""Simple upload request succeeded for \"" + id);\n\n                    var responseToReport = upload.normalizeResponse(response, true),\n                        size = options.getSize(id);\n\n                    options.onProgress(id, name, size, size);\n                    upload.maybeNewUuid(id, responseToReport);\n                    upload.cleanup(id, responseToReport, optXhr);\n                },\n\n                function(response, optXhr) {\n                    log(\""Simple upload request failed for \"" + id);\n\n                    var responseToReport = upload.normalizeResponse(response, false);\n\n                    if (!options.onAutoRetry(id, name, responseToReport, optXhr)) {\n                        upload.cleanup(id, responseToReport, optXhr);\n                    }\n                }\n            );\n        }\n    },\n\n    upload = {\n        cancel: function(id) {\n            log(\""Cancelling \"" + id);\n            options.paramsStore.remove(id);\n            connectionManager.free(id);\n        },\n\n        cleanup: function(id, response, optXhr) {\n            var name = options.getName(id);\n\n            options.onComplete(id, name, response, optXhr);\n\n            if (handler._getFileState(id)) {\n                handler._clearXhrs && handler._clearXhrs(id);\n            }\n\n            connectionManager.free(id);\n        },\n\n        // Returns a qq.BlobProxy, or an actual File/Blob if no proxy is involved, or undefined\n        // if none of these are available for the ID\n        getProxyOrBlob: function(id) {\n            return (handler.getProxy && handler.getProxy(id)) ||\n                (handler.getFile && handler.getFile(id));\n        },\n\n        initHandler: function() {\n            var handlerType = namespace ? qq[namespace] : qq.traditional,\n                handlerModuleSubtype = qq.supportedFeatures.ajaxUploading ? \""Xhr\"" : \""Form\"";\n\n            handler = new handlerType[handlerModuleSubtype + \""UploadHandler\""](\n                options,\n                {\n                    getCustomResumeData: options.getCustomResumeData,\n                    getDataByUuid: options.getDataByUuid,\n                    getName: options.getName,\n                    getSize: options.getSize,\n                    getUuid: options.getUuid,\n                    log: log,\n                    onCancel: options.onCancel,\n                    onProgress: options.onProgress,\n                    onUuidChanged: options.onUuidChanged\n                }\n            );\n\n            if (handler._removeExpiredChunkingRecords) {\n                handler._removeExpiredChunkingRecords();\n            }\n        },\n\n        isDeferredEligibleForUpload: function(id) {\n            return options.isQueued(id);\n        },\n\n        // For Blobs that are part of a group of generated images, along with a reference image,\n        // this will ensure the blobs in the group are uploaded in the order they were triggered,\n        // even if some async processing must be completed on one or more Blobs first.\n        maybeDefer: function(id, blob) {\n            // If we don't have a file/blob yet & no file/blob exists for this item, request it,\n            // and then submit the upload to the specific handler once the blob is available.\n            // ASSUMPTION: This condition will only ever be true if XHR uploading is supported.\n            if (blob && !handler.getFile(id) && blob instanceof qq.BlobProxy) {\n\n                // Blob creation may take some time, so the caller may want to update the\n                // UI to indicate that an operation is in progress, even before the actual\n                // upload begins and an onUpload callback is invoked.\n                options.onUploadPrep(id);\n\n                log(\""Attempting to generate a blob on-demand for \"" + id);\n                blob.create().then(function(generatedBlob) {\n                    log(\""Generated an on-demand blob for \"" + id);\n\n                    // Update record associated with this file by providing the generated Blob\n                    handler.updateBlob(id, generatedBlob);\n\n                    // Propagate the size for this generated Blob\n                    options.setSize(id, generatedBlob.size);\n\n                    // Order handler to recalculate chunking possibility, if applicable\n                    handler.reevaluateChunking(id);\n\n                    upload.maybeSendDeferredFiles(id);\n                },\n\n                // Blob could not be generated.  Fail the upload & attempt to prevent retries.  Also bubble error message.\n                function(errorMessage) {\n                    var errorResponse = {};\n\n                    if (errorMessage) {\n                        errorResponse.error = errorMessage;\n                    }\n\n                    log(qq.format(\""Failed to generate blob for ID {}.  Error message: {}.\"", id, errorMessage), \""error\"");\n\n                    options.onComplete(id, options.getName(id), qq.extend(errorResponse, preventRetryResponse), null);\n                    upload.maybeSendDeferredFiles(id);\n                    connectionManager.free(id);\n                });\n            }\n            else {\n                return upload.maybeSendDeferredFiles(id);\n            }\n\n            return false;\n        },\n\n        // Upload any grouped blobs, in the proper order, that are ready to be uploaded\n        maybeSendDeferredFiles: function(id) {\n            var idsInGroup = options.getIdsInProxyGroup(id),\n                uploadedThisId = false;\n\n            if (idsInGroup && idsInGroup.length) {\n                log(\""Maybe ready to upload proxy group file \"" + id);\n\n                qq.each(idsInGroup, function(idx, idInGroup) {\n                    if (upload.isDeferredEligibleForUpload(idInGroup) && !!handler.getFile(idInGroup)) {\n                        uploadedThisId = idInGroup === id;\n                        upload.now(idInGroup);\n                    }\n                    else if (upload.isDeferredEligibleForUpload(idInGroup)) {\n                        return false;\n                    }\n                });\n            }\n            else {\n                uploadedThisId = true;\n                upload.now(id);\n            }\n\n            return uploadedThisId;\n        },\n\n        maybeNewUuid: function(id, response) {\n            if (response.newUuid !== undefined) {\n                options.onUuidChanged(id, response.newUuid);\n            }\n        },\n\n        // The response coming from handler implementations may be in various formats.\n        // Instead of hoping a promise nested 5 levels deep will always return an object\n        // as its first param, let's just normalize the response here.\n        normalizeResponse: function(originalResponse, successful) {\n            var response = originalResponse;\n\n            // The passed \""response\"" param may not be a response at all.\n            // It could be a string, detailing the error, for example.\n            if (!qq.isObject(originalResponse)) {\n                response = {};\n\n                if (qq.isString(originalResponse) && !successful) {\n                    response.error = originalResponse;\n                }\n            }\n\n            response.success = successful;\n\n            return response;\n        },\n\n        now: function(id) {\n            var name = options.getName(id);\n\n            if (!controller.isValid(id)) {\n                throw new qq.Error(id + \"" is not a valid file ID to upload!\"");\n            }\n\n            options.onUpload(id, name).then(\n                function(response) {\n                    if (response && response.pause) {\n                        options.setStatus(id, qq.status.PAUSED);\n                        handler.pause(id);\n                        connectionManager.free(id);\n                    }\n                    else {\n                        if (chunkingPossible && handler._shouldChunkThisFile(id)) {\n                            chunked.sendNext(id);\n                        }\n                        else {\n                            simple.send(id, name);\n                        }\n                    }\n                },\n\n                function(error) {\n                    error = error || {};\n\n                    log(id + \"" upload start aborted due to rejected onUpload Promise - details: \"" + error, \""error\"");\n\n                    if (!options.onAutoRetry(id, name, error.responseJSON || {})) {\n                        var response = upload.normalizeResponse(error.responseJSON, false);\n                        upload.cleanup(id, response);\n                    }\n                }\n            );\n        },\n\n        start: function(id) {\n            var blobToUpload = upload.getProxyOrBlob(id);\n\n            if (blobToUpload) {\n                return upload.maybeDefer(id, blobToUpload);\n            }\n            else {\n                upload.now(id);\n                return true;\n            }\n        }\n    };\n\n    qq.extend(this, {\n        /**\n         * Adds file or file input to the queue\n         **/\n        add: function(id, file) {\n            handler.add.apply(this, arguments);\n        },\n\n        /**\n         * Sends the file identified by id\n         */\n        upload: function(id) {\n            if (connectionManager.open(id)) {\n                return upload.start(id);\n            }\n            return false;\n        },\n\n        retry: function(id) {\n            // On retry, if concurrent chunking has been enabled, we may have aborted all other in-progress chunks\n            // for a file when encountering a failed chunk upload.  We then signaled the controller to ignore\n            // all failures associated with these aborts.  We are now retrying, so we don't want to ignore\n            // any more failures at this point.\n            if (concurrentChunkingPossible) {\n                handler._getFileState(id).temp.ignoreFailure = false;\n            }\n\n            // If we are attempting to retry a file that is already consuming a connection, this is likely an auto-retry.\n            // Just go ahead and ask the handler to upload again.\n            if (connectionManager.isUsingConnection(id)) {\n                return upload.start(id);\n            }\n\n            // If we are attempting to retry a file that is not currently consuming a connection,\n            // this is likely a manual retry attempt.  We will need to ensure a connection is available\n            // before the retry commences.\n            else {\n                return controller.upload(id);\n            }\n        },\n\n        /**\n         * Cancels file upload by id\n         */\n        cancel: function(id) {\n            var cancelRetVal = handler.cancel(id);\n\n            if (qq.isGenericPromise(cancelRetVal)) {\n                cancelRetVal.then(function() {\n                    upload.cancel(id);\n                });\n            }\n            else if (cancelRetVal !== false) {\n                upload.cancel(id);\n            }\n        },\n\n        /**\n         * Cancels all queued or in-progress uploads\n         */\n        cancelAll: function() {\n            var waitingOrConnected = connectionManager.getWaitingOrConnected(),\n                i;\n\n            // ensure files are cancelled in reverse order which they were added\n            // to avoid a flash of time where a queued file begins to upload before it is canceled\n            if (waitingOrConnected.length) {\n                for (i = waitingOrConnected.length - 1; i >= 0; i--) {\n                    controller.cancel(waitingOrConnected[i]);\n                }\n            }\n\n            connectionManager.reset();\n        },\n\n        // Returns a File, Blob, or the Blob/File for the reference/parent file if the targeted blob is a proxy.\n        // Undefined if no file record is available.\n        getFile: function(id) {\n            if (handler.getProxy && handler.getProxy(id)) {\n                return handler.getProxy(id).referenceBlob;\n            }\n\n            return handler.getFile && handler.getFile(id);\n        },\n\n        // Returns true if the Blob associated with the ID is related to a proxy s\n        isProxied: function(id) {\n            return !!(handler.getProxy && handler.getProxy(id));\n        },\n\n        getInput: function(id) {\n            if (handler.getInput) {\n                return handler.getInput(id);\n            }\n        },\n\n        reset: function() {\n            log(\""Resetting upload handler\"");\n            controller.cancelAll();\n            connectionManager.reset();\n            handler.reset();\n        },\n\n        expunge: function(id) {\n            if (controller.isValid(id)) {\n                return handler.expunge(id);\n            }\n        },\n\n        /**\n         * Determine if the file exists.\n         */\n        isValid: function(id) {\n            return handler.isValid(id);\n        },\n\n        hasResumeRecord: function(id) {\n            var key = handler.isValid(id) &&\n                handler._getLocalStorageId &&\n                handler._getLocalStorageId(id);\n\n            if (key) {\n                return !!localStorage.getItem(key);\n            }\n\n            return false;\n        },\n\n        getResumableFilesData: function() {\n            if (handler.getResumableFilesData) {\n                return handler.getResumableFilesData();\n            }\n            return [];\n        },\n\n        /**\n         * This may or may not be implemented, depending on the handler.  For handlers where a third-party ID is\n         * available (such as the \""key\"" for Amazon S3), this will return that value.  Otherwise, the return value\n         * will be undefined.\n         *\n         * @param id Internal file ID\n         * @returns {*} Some identifier used by a 3rd-party service involved in the upload process\n         */\n        getThirdPartyFileId: function(id) {\n            if (controller.isValid(id)) {\n                return handler.getThirdPartyFileId(id);\n            }\n        },\n\n        /**\n         * Attempts to pause the associated upload if the specific handler supports this and the file is \""valid\"".\n         * @param id ID of the upload/file to pause\n         * @returns {boolean} true if the upload was paused\n         */\n        pause: function(id) {\n            if (controller.isResumable(id) && handler.pause && controller.isValid(id) && handler.pause(id)) {\n                connectionManager.free(id);\n                handler.moveInProgressToRemaining(id);\n                return true;\n            }\n            return false;\n        },\n\n        isAttemptingResume: function(id) {\n            return !!handler.isAttemptingResume && handler.isAttemptingResume(id);\n        },\n\n        // True if the file is eligible for pause/resume.\n        isResumable: function(id) {\n            return !!handler.isResumable && handler.isResumable(id);\n        }\n    });\n\n    qq.extend(options, o);\n    log = options.log;\n    chunkingPossible = options.chunking.enabled && qq.supportedFeatures.chunking;\n    concurrentChunkingPossible = chunkingPossible && options.chunking.concurrent.enabled;\n\n    preventRetryResponse = (function() {\n        var response = {};\n\n        response[options.preventRetryParam] = true;\n\n        return response;\n    }());\n\n    upload.initHandler();\n};\n"",""/*globals qq */\n/*jshint -W117 */\nqq.WindowReceiveMessage = function(o) {\n    \""use strict\"";\n\n    var options = {\n            log: function(message, level) {}\n        },\n        callbackWrapperDetachers = {};\n\n    qq.extend(options, o);\n\n    qq.extend(this, {\n        receiveMessage: function(id, callback) {\n            var onMessageCallbackWrapper = function(event) {\n                    callback(event.data);\n                };\n\n            if (window.postMessage) {\n                callbackWrapperDetachers[id] = qq(window).attach(\""message\"", onMessageCallbackWrapper);\n            }\n            else {\n                log(\""iframe message passing not supported in this browser!\"", \""error\"");\n            }\n        },\n\n        stopReceivingMessages: function(id) {\n            if (window.postMessage) {\n                var detacher = callbackWrapperDetachers[id];\n                if (detacher) {\n                    detacher();\n                }\n            }\n        }\n    });\n};\n"",""/* globals qq */\n/**\n * Common APIs exposed to creators of upload via form/iframe handlers.  This is reused and possibly overridden\n * in some cases by specific form upload handlers.\n *\n * @constructor\n */\nqq.FormUploadHandler = function(spec) {\n    \""use strict\"";\n\n    var options = spec.options,\n        handler = this,\n        proxy = spec.proxy,\n        formHandlerInstanceId = qq.getUniqueId(),\n        onloadCallbacks = {},\n        detachLoadEvents = {},\n        postMessageCallbackTimers = {},\n        isCors = options.isCors,\n        inputName = options.inputName,\n        getUuid = proxy.getUuid,\n        log = proxy.log,\n        corsMessageReceiver = new qq.WindowReceiveMessage({log: log});\n\n    /**\n     * Remove any trace of the file from the handler.\n     *\n     * @param id ID of the associated file\n     */\n    function expungeFile(id) {\n        delete detachLoadEvents[id];\n\n        // If we are dealing with CORS, we might still be waiting for a response from a loaded iframe.\n        // In that case, terminate the timer waiting for a message from the loaded iframe\n        // and stop listening for any more messages coming from this iframe.\n        if (isCors) {\n            clearTimeout(postMessageCallbackTimers[id]);\n            delete postMessageCallbackTimers[id];\n            corsMessageReceiver.stopReceivingMessages(id);\n        }\n\n        var iframe = document.getElementById(handler._getIframeName(id));\n        if (iframe) {\n            // To cancel request set src to something else.  We use src=\""javascript:false;\""\n            // because it doesn't trigger ie6 prompt on https\n            /* jshint scripturl:true */\n            iframe.setAttribute(\""src\"", \""javascript:false;\"");\n\n            qq(iframe).remove();\n        }\n    }\n\n    /**\n     * @param iframeName `document`-unique Name of the associated iframe\n     * @returns {*} ID of the associated file\n     */\n    function getFileIdForIframeName(iframeName) {\n        return iframeName.split(\""_\"")[0];\n    }\n\n    /**\n     * Generates an iframe to be used as a target for upload-related form submits.  This also adds the iframe\n     * to the current `document`.  Note that the iframe is hidden from view.\n     *\n     * @param name Name of the iframe.\n     * @returns {HTMLIFrameElement} The created iframe\n     */\n    function initIframeForUpload(name) {\n        var iframe = qq.toElement(\""<iframe src='javascript:false;' name='\"" + name + \""' />\"");\n\n        iframe.setAttribute(\""id\"", name);\n\n        iframe.style.display = \""none\"";\n        document.body.appendChild(iframe);\n\n        return iframe;\n    }\n\n    /**\n     * If we are in CORS mode, we must listen for messages (containing the server response) from the associated\n     * iframe, since we cannot directly parse the content of the iframe due to cross-origin restrictions.\n     *\n     * @param iframe Listen for messages on this iframe.\n     * @param callback Invoke this callback with the message from the iframe.\n     */\n    function registerPostMessageCallback(iframe, callback) {\n        var iframeName = iframe.id,\n            fileId = getFileIdForIframeName(iframeName),\n            uuid = getUuid(fileId);\n\n        onloadCallbacks[uuid] = callback;\n\n        // When the iframe has loaded (after the server responds to an upload request)\n        // declare the attempt a failure if we don't receive a valid message shortly after the response comes in.\n        detachLoadEvents[fileId] = qq(iframe).attach(\""load\"", function() {\n            if (handler.getInput(fileId)) {\n                log(\""Received iframe load event for CORS upload request (iframe name \"" + iframeName + \"")\"");\n\n                postMessageCallbackTimers[iframeName] = setTimeout(function() {\n                    var errorMessage = \""No valid message received from loaded iframe for iframe name \"" + iframeName;\n                    log(errorMessage, \""error\"");\n                    callback({\n                        error: errorMessage\n                    });\n                }, 1000);\n            }\n        });\n\n        // Listen for messages coming from this iframe.  When a message has been received, cancel the timer\n        // that declares the upload a failure if a message is not received within a reasonable amount of time.\n        corsMessageReceiver.receiveMessage(iframeName, function(message) {\n            log(\""Received the following window message: '\"" + message + \""'\"");\n            var fileId = getFileIdForIframeName(iframeName),\n                response = handler._parseJsonResponse(message),\n                uuid = response.uuid,\n                onloadCallback;\n\n            if (uuid && onloadCallbacks[uuid]) {\n                log(\""Handling response for iframe name \"" + iframeName);\n                clearTimeout(postMessageCallbackTimers[iframeName]);\n                delete postMessageCallbackTimers[iframeName];\n\n                handler._detachLoadEvent(iframeName);\n\n                onloadCallback = onloadCallbacks[uuid];\n\n                delete onloadCallbacks[uuid];\n                corsMessageReceiver.stopReceivingMessages(iframeName);\n                onloadCallback(response);\n            }\n            else if (!uuid) {\n                log(\""'\"" + message + \""' does not contain a UUID - ignoring.\"");\n            }\n        });\n    }\n\n    qq.extend(this, new qq.UploadHandler(spec));\n\n    qq.override(this, function(super_) {\n        return {\n            /**\n             * Adds File or Blob to the queue\n             **/\n            add: function(id, fileInput) {\n                super_.add(id, {input: fileInput});\n\n                fileInput.setAttribute(\""name\"", inputName);\n\n                // remove file input from DOM\n                if (fileInput.parentNode) {\n                    qq(fileInput).remove();\n                }\n            },\n\n            expunge: function(id) {\n                expungeFile(id);\n                super_.expunge(id);\n            },\n\n            isValid: function(id) {\n                return super_.isValid(id) &&\n                    handler._getFileState(id).input !== undefined;\n            }\n        };\n    });\n\n    qq.extend(this, {\n        getInput: function(id) {\n            return handler._getFileState(id).input;\n        },\n\n        /**\n         * This function either delegates to a more specific message handler if CORS is involved,\n         * or simply registers a callback when the iframe has been loaded that invokes the passed callback\n         * after determining if the content of the iframe is accessible.\n         *\n         * @param iframe Associated iframe\n         * @param callback Callback to invoke after we have determined if the iframe content is accessible.\n         */\n        _attachLoadEvent: function(iframe, callback) {\n            /*jslint eqeq: true*/\n            var responseDescriptor;\n\n            if (isCors) {\n                registerPostMessageCallback(iframe, callback);\n            }\n            else {\n                detachLoadEvents[iframe.id] = qq(iframe).attach(\""load\"", function() {\n                    log(\""Received response for \"" + iframe.id);\n\n                    // when we remove iframe from dom\n                    // the request stops, but in IE load\n                    // event fires\n                    if (!iframe.parentNode) {\n                        return;\n                    }\n\n                    try {\n                        // fixing Opera 10.53\n                        if (iframe.contentDocument &&\n                            iframe.contentDocument.body &&\n                            iframe.contentDocument.body.innerHTML == \""false\"") {\n                            // In Opera event is fired second time\n                            // when body.innerHTML changed from false\n                            // to server response approx. after 1 sec\n                            // when we upload file with iframe\n                            return;\n                        }\n                    }\n                    catch (error) {\n                        //IE may throw an \""access is denied\"" error when attempting to access contentDocument on the iframe in some cases\n                        log(\""Error when attempting to access iframe during handling of upload response (\"" + error.message + \"")\"", \""error\"");\n                        responseDescriptor = {success: false};\n                    }\n\n                    callback(responseDescriptor);\n                });\n            }\n        },\n\n        /**\n         * Creates an iframe with a specific document-unique name.\n         *\n         * @param id ID of the associated file\n         * @returns {HTMLIFrameElement}\n         */\n        _createIframe: function(id) {\n            var iframeName = handler._getIframeName(id);\n\n            return initIframeForUpload(iframeName);\n        },\n\n        /**\n         * Called when we are no longer interested in being notified when an iframe has loaded.\n         *\n         * @param id Associated file ID\n         */\n        _detachLoadEvent: function(id) {\n            if (detachLoadEvents[id] !== undefined) {\n                detachLoadEvents[id]();\n                delete detachLoadEvents[id];\n            }\n        },\n\n        /**\n         * @param fileId ID of the associated file\n         * @returns {string} The `document`-unique name of the iframe\n         */\n        _getIframeName: function(fileId) {\n            return fileId + \""_\"" + formHandlerInstanceId;\n        },\n\n        /**\n         * Generates a form element and appends it to the `document`.  When the form is submitted, a specific iframe is targeted.\n         * The name of the iframe is passed in as a property of the spec parameter, and must be unique in the `document`.  Note\n         * that the form is hidden from view.\n         *\n         * @param spec An object containing various properties to be used when constructing the form.  Required properties are\n         * currently: `method`, `endpoint`, `params`, `paramsInBody`, and `targetName`.\n         * @returns {HTMLFormElement} The created form\n         */\n        _initFormForUpload: function(spec) {\n            var method = spec.method,\n                endpoint = spec.endpoint,\n                params = spec.params,\n                paramsInBody = spec.paramsInBody,\n                targetName = spec.targetName,\n                form = qq.toElement(\""<form method='\"" + method + \""' enctype='multipart/form-data'></form>\""),\n                url = endpoint;\n\n            if (paramsInBody) {\n                qq.obj2Inputs(params, form);\n            }\n            else {\n                url = qq.obj2url(params, endpoint);\n            }\n\n            form.setAttribute(\""action\"", url);\n            form.setAttribute(\""target\"", targetName);\n            form.style.display = \""none\"";\n            document.body.appendChild(form);\n\n            return form;\n        },\n\n        /**\n         * @param innerHtmlOrMessage JSON message\n         * @returns {*} The parsed response, or an empty object if the response could not be parsed\n         */\n        _parseJsonResponse: function(innerHtmlOrMessage) {\n            var response = {};\n\n            try {\n                response = qq.parseJson(innerHtmlOrMessage);\n            }\n            catch (error) {\n                log(\""Error when attempting to parse iframe upload response (\"" + error.message + \"")\"", \""error\"");\n            }\n\n            return response;\n        }\n    });\n};\n"",""/* globals qq */\n/**\n * Common API exposed to creators of XHR handlers.  This is reused and possibly overriding in some cases by specific\n * XHR upload handlers.\n *\n * @constructor\n */\nqq.XhrUploadHandler = function(spec) {\n    \""use strict\"";\n\n    var handler = this,\n        namespace = spec.options.namespace,\n        proxy = spec.proxy,\n        chunking = spec.options.chunking,\n        getChunkSize = function(id) {\n            var fileState = handler._getFileState(id);\n\n            if (fileState.chunkSize) {\n                return fileState.chunkSize;\n            }\n\n            else {\n                var chunkSize = chunking.partSize;\n\n                if (qq.isFunction(chunkSize)) {\n                    chunkSize = chunkSize(id, getSize(id));\n                }\n\n                fileState.chunkSize = chunkSize;\n                return chunkSize;\n            }\n        },\n        resume = spec.options.resume,\n        chunkFiles = chunking && spec.options.chunking.enabled && qq.supportedFeatures.chunking,\n        resumeEnabled = resume && spec.options.resume.enabled && chunkFiles && qq.supportedFeatures.resume,\n        getName = proxy.getName,\n        getSize = proxy.getSize,\n        getUuid = proxy.getUuid,\n        getEndpoint = proxy.getEndpoint,\n        getDataByUuid = proxy.getDataByUuid,\n        onUuidChanged = proxy.onUuidChanged,\n        onProgress = proxy.onProgress,\n        log = proxy.log,\n        getCustomResumeData = proxy.getCustomResumeData;\n\n    function abort(id) {\n        qq.each(handler._getXhrs(id), function(xhrId, xhr) {\n            var ajaxRequester = handler._getAjaxRequester(id, xhrId);\n\n            xhr.onreadystatechange = null;\n            xhr.upload.onprogress = null;\n            xhr.abort();\n            ajaxRequester && ajaxRequester.canceled && ajaxRequester.canceled(id);\n        });\n    }\n\n    qq.extend(this, new qq.UploadHandler(spec));\n\n    qq.override(this, function(super_) {\n        return {\n            /**\n             * Adds File or Blob to the queue\n             **/\n            add: function(id, blobOrProxy) {\n                if (qq.isFile(blobOrProxy) || qq.isBlob(blobOrProxy)) {\n                    super_.add(id, {file: blobOrProxy});\n                }\n                else if (blobOrProxy instanceof qq.BlobProxy) {\n                    super_.add(id, {proxy: blobOrProxy});\n                }\n                else {\n                    throw new Error(\""Passed obj is not a File, Blob, or proxy\"");\n                }\n\n                handler._initTempState(id);\n                resumeEnabled && handler._maybePrepareForResume(id);\n            },\n\n            expunge: function(id) {\n                abort(id);\n                handler._maybeDeletePersistedChunkData(id);\n                handler._clearXhrs(id);\n                super_.expunge(id);\n            }\n        };\n    });\n\n    qq.extend(this, {\n        // Clear the cached chunk `Blob` after we are done with it, just in case the `Blob` bytes are stored in memory.\n        clearCachedChunk: function(id, chunkIdx) {\n            delete handler._getFileState(id).temp.cachedChunks[chunkIdx];\n        },\n\n        clearXhr: function(id, chunkIdx) {\n            var tempState = handler._getFileState(id).temp;\n\n            if (tempState.xhrs) {\n                delete tempState.xhrs[chunkIdx];\n            }\n            if (tempState.ajaxRequesters) {\n                delete tempState.ajaxRequesters[chunkIdx];\n            }\n        },\n\n        // Called when all chunks have been successfully uploaded.  Expected promissory return type.\n        // This defines the default behavior if nothing further is required when all chunks have been uploaded.\n        finalizeChunks: function(id, responseParser) {\n            var lastChunkIdx = handler._getTotalChunks(id) - 1,\n                xhr = handler._getXhr(id, lastChunkIdx);\n\n            if (responseParser) {\n                return new qq.Promise().success(responseParser(xhr), xhr);\n            }\n\n            return new qq.Promise().success({}, xhr);\n        },\n\n        getFile: function(id) {\n            return handler.isValid(id) && handler._getFileState(id).file;\n        },\n\n        getProxy: function(id) {\n            return handler.isValid(id) && handler._getFileState(id).proxy;\n        },\n\n        /**\n         * @returns {Array} Array of objects containing properties useful to integrators\n         * when it is important to determine which files are potentially resumable.\n         */\n        getResumableFilesData: function() {\n            var resumableFilesData = [];\n\n            handler._iterateResumeRecords(function(key, uploadData) {\n                handler.moveInProgressToRemaining(null, uploadData.chunking.inProgress,  uploadData.chunking.remaining);\n\n                var data = {\n                    name: uploadData.name,\n                    remaining: uploadData.chunking.remaining,\n                    size: uploadData.size,\n                    uuid: uploadData.uuid\n                };\n\n                if (uploadData.key) {\n                    data.key = uploadData.key;\n                }\n\n                if (uploadData.customResumeData) {\n                    data.customResumeData = uploadData.customResumeData;\n                }\n\n                resumableFilesData.push(data);\n            });\n\n            return resumableFilesData;\n        },\n\n        isAttemptingResume: function(id) {\n            return handler._getFileState(id).attemptingResume;\n        },\n\n        isResumable: function(id) {\n            return !!chunking && handler.isValid(id) &&\n                !handler._getFileState(id).notResumable;\n        },\n\n        moveInProgressToRemaining: function(id, optInProgress, optRemaining) {\n            var fileState = handler._getFileState(id) || {},\n                chunkingState =  fileState.chunking || {},\n                inProgress = optInProgress || chunkingState.inProgress,\n                remaining = optRemaining || chunkingState.remaining;\n\n            if (inProgress) {\n                log(qq.format(\""Moving these chunks from in-progress {}, to remaining.\"", JSON.stringify(inProgress)));\n                inProgress.reverse();\n                qq.each(inProgress, function(idx, chunkIdx) {\n                    remaining.unshift(chunkIdx);\n                });\n                inProgress.length = 0;\n            }\n        },\n\n        pause: function(id) {\n            if (handler.isValid(id)) {\n                log(qq.format(\""Aborting XHR upload for {} '{}' due to pause instruction.\"", id, getName(id)));\n                handler._getFileState(id).paused = true;\n                abort(id);\n                return true;\n            }\n        },\n\n        reevaluateChunking: function(id) {\n            if (chunking && handler.isValid(id)) {\n                var state = handler._getFileState(id),\n                    totalChunks,\n                    i;\n\n                delete state.chunking;\n\n                state.chunking = {};\n                totalChunks = handler._getTotalChunks(id);\n                if (totalChunks > 1 || chunking.mandatory) {\n                    state.chunking.enabled = true;\n                    state.chunking.parts = totalChunks;\n                    state.chunking.remaining = [];\n\n                    for (i = 0; i < totalChunks; i++) {\n                        state.chunking.remaining.push(i);\n                    }\n\n                    handler._initTempState(id);\n                }\n                else {\n                    state.chunking.enabled = false;\n                }\n            }\n        },\n\n        updateBlob: function(id, newBlob) {\n            if (handler.isValid(id)) {\n                handler._getFileState(id).file = newBlob;\n            }\n        },\n\n        _clearXhrs: function(id) {\n            var tempState = handler._getFileState(id).temp;\n\n            qq.each(tempState.ajaxRequesters, function(chunkId) {\n                delete tempState.ajaxRequesters[chunkId];\n            });\n\n            qq.each(tempState.xhrs, function(chunkId) {\n                delete tempState.xhrs[chunkId];\n            });\n        },\n\n        /**\n         * Creates an XHR instance for this file and stores it in the fileState.\n         *\n         * @param id File ID\n         * @param optChunkIdx The chunk index associated with this XHR, if applicable\n         * @returns {XMLHttpRequest}\n         */\n        _createXhr: function(id, optChunkIdx) {\n            return handler._registerXhr(id, optChunkIdx, qq.createXhrInstance());\n        },\n\n        _getAjaxRequester: function(id, optChunkIdx) {\n            var chunkIdx = optChunkIdx == null ? -1 : optChunkIdx;\n            return handler._getFileState(id).temp.ajaxRequesters[chunkIdx];\n        },\n\n        _getChunkData: function(id, chunkIndex) {\n            var chunkSize = getChunkSize(id),\n                fileSize = getSize(id),\n                fileOrBlob = handler.getFile(id),\n                startBytes = chunkSize * chunkIndex,\n                endBytes = startBytes + chunkSize >= fileSize ? fileSize : startBytes + chunkSize,\n                totalChunks = handler._getTotalChunks(id),\n                cachedChunks = this._getFileState(id).temp.cachedChunks,\n\n            // To work around a Webkit GC bug, we must keep each chunk `Blob` in scope until we are done with it.\n            // See https://github.com/Widen/fine-uploader/issues/937#issuecomment-41418760\n                blob = cachedChunks[chunkIndex] || qq.sliceBlob(fileOrBlob, startBytes, endBytes);\n\n            cachedChunks[chunkIndex] = blob;\n\n            return {\n                part: chunkIndex,\n                start: startBytes,\n                end: endBytes,\n                count: totalChunks,\n                blob: blob,\n                size: endBytes - startBytes\n            };\n        },\n\n        _getChunkDataForCallback: function(chunkData) {\n            return {\n                partIndex: chunkData.part,\n                startByte: chunkData.start + 1,\n                endByte: chunkData.end,\n                totalParts: chunkData.count\n            };\n        },\n\n        /**\n         * @param id File ID\n         * @returns {string} Identifier for this item that may appear in the browser's local storage\n         */\n        _getLocalStorageId: function(id) {\n            var formatVersion = \""5.0\"",\n                name = getName(id),\n                size = getSize(id),\n                chunkSize = getChunkSize(id),\n                endpoint = getEndpoint(id),\n                customKeys = resume.customKeys(id),\n                localStorageId = qq.format(\""qq{}resume{}-{}-{}-{}-{}\"", namespace, formatVersion, name, size, chunkSize, endpoint);\n\n            customKeys.forEach(function(key) {\n                localStorageId += \""-\"" + key;\n            });\n\n            return localStorageId;\n        },\n\n        _getMimeType: function(id) {\n            return handler.getFile(id).type;\n        },\n\n        _getPersistableData: function(id) {\n            return handler._getFileState(id).chunking;\n        },\n\n        /**\n         * @param id ID of the associated file\n         * @returns {number} Number of parts this file can be divided into, or undefined if chunking is not supported in this UA\n         */\n        _getTotalChunks: function(id) {\n            if (chunking) {\n                var fileSize = getSize(id),\n                    chunkSize = getChunkSize(id);\n\n                return Math.ceil(fileSize / chunkSize);\n            }\n        },\n\n        _getXhr: function(id, optChunkIdx) {\n            var chunkIdx = optChunkIdx == null ? -1 : optChunkIdx;\n            return handler._getFileState(id).temp.xhrs[chunkIdx];\n        },\n\n        _getXhrs: function(id) {\n            return handler._getFileState(id).temp.xhrs;\n        },\n\n        // Iterates through all XHR handler-created resume records (in local storage),\n        // invoking the passed callback and passing in the key and value of each local storage record.\n        _iterateResumeRecords: function(callback) {\n            if (resumeEnabled) {\n                qq.each(localStorage, function(key, item) {\n                    if (key.indexOf(qq.format(\""qq{}resume\"", namespace)) === 0) {\n                        var uploadData = JSON.parse(item);\n                        callback(key, uploadData);\n                    }\n                });\n            }\n        },\n\n        _initTempState: function(id) {\n            handler._getFileState(id).temp = {\n                ajaxRequesters: {},\n                chunkProgress: {},\n                xhrs: {},\n                cachedChunks: {}\n            };\n        },\n\n        _markNotResumable: function(id) {\n            handler._getFileState(id).notResumable = true;\n        },\n\n        // Removes a chunked upload record from local storage, if possible.\n        // Returns true if the item was removed, false otherwise.\n        _maybeDeletePersistedChunkData: function(id) {\n            var localStorageId;\n\n            if (resumeEnabled && handler.isResumable(id)) {\n                localStorageId = handler._getLocalStorageId(id);\n\n                if (localStorageId && localStorage.getItem(localStorageId)) {\n                    localStorage.removeItem(localStorageId);\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        // If this is a resumable upload, grab the relevant data from storage and items in memory that track this upload\n        // so we can pick up from where we left off.\n        _maybePrepareForResume: function(id) {\n            var state = handler._getFileState(id),\n                localStorageId, persistedData;\n\n            // Resume is enabled and possible and this is the first time we've tried to upload this file in this session,\n            // so prepare for a resume attempt.\n            if (resumeEnabled && state.key === undefined) {\n                localStorageId = handler._getLocalStorageId(id);\n                persistedData = localStorage.getItem(localStorageId);\n\n                // If we found this item in local storage, maybe we should resume it.\n                if (persistedData) {\n                    persistedData = JSON.parse(persistedData);\n\n                    // If we found a resume record but we have already handled this file in this session,\n                    // don't try to resume it & ensure we don't persist future check data\n                    if (getDataByUuid(persistedData.uuid)) {\n                        handler._markNotResumable(id);\n                    }\n                    else {\n                        log(qq.format(\""Identified file with ID {} and name of {} as resumable.\"", id, getName(id)));\n\n                        onUuidChanged(id, persistedData.uuid);\n\n                        state.key = persistedData.key;\n                        state.chunking = persistedData.chunking;\n                        state.loaded = persistedData.loaded;\n                        state.customResumeData = persistedData.customResumeData;\n                        state.attemptingResume = true;\n\n                        handler.moveInProgressToRemaining(id);\n                    }\n                }\n            }\n        },\n\n        // Persist any data needed to resume this upload in a new session.\n        _maybePersistChunkedState: function(id) {\n            var state = handler._getFileState(id),\n                localStorageId, persistedData;\n\n            // If local storage isn't supported by the browser, or if resume isn't enabled or possible, give up\n            if (resumeEnabled && handler.isResumable(id)) {\n                var customResumeData = getCustomResumeData(id);\n\n                localStorageId = handler._getLocalStorageId(id);\n\n                persistedData = {\n                    name: getName(id),\n                    size: getSize(id),\n                    uuid: getUuid(id),\n                    key: state.key,\n                    chunking: state.chunking,\n                    loaded: state.loaded,\n                    lastUpdated: Date.now(),\n                };\n\n                if (customResumeData) {\n                    persistedData.customResumeData = customResumeData;\n                }\n\n                try {\n                    localStorage.setItem(localStorageId, JSON.stringify(persistedData));\n                }\n                catch (error) {\n                    log(qq.format(\""Unable to save resume data for '{}' due to error: '{}'.\"", id, error.toString()), \""warn\"");\n                }\n            }\n        },\n\n        _registerProgressHandler: function(id, chunkIdx, chunkSize) {\n            var xhr = handler._getXhr(id, chunkIdx),\n                name = getName(id),\n                progressCalculator = {\n                    simple: function(loaded, total) {\n                        var fileSize = getSize(id);\n\n                        if (loaded === total) {\n                            onProgress(id, name, fileSize, fileSize);\n                        }\n                        else {\n                            onProgress(id, name, (loaded >= fileSize ? fileSize - 1 : loaded), fileSize);\n                        }\n                    },\n\n                    chunked: function(loaded, total) {\n                        var chunkProgress = handler._getFileState(id).temp.chunkProgress,\n                            totalSuccessfullyLoadedForFile = handler._getFileState(id).loaded,\n                            loadedForRequest = loaded,\n                            totalForRequest = total,\n                            totalFileSize = getSize(id),\n                            estActualChunkLoaded = loadedForRequest - (totalForRequest - chunkSize),\n                            totalLoadedForFile = totalSuccessfullyLoadedForFile;\n\n                        chunkProgress[chunkIdx] = estActualChunkLoaded;\n\n                        qq.each(chunkProgress, function(chunkIdx, chunkLoaded) {\n                            totalLoadedForFile += chunkLoaded;\n                        });\n\n                        onProgress(id, name, totalLoadedForFile, totalFileSize);\n                    }\n                };\n\n            xhr.upload.onprogress = function(e) {\n                if (e.lengthComputable) {\n                    /* jshint eqnull: true */\n                    var type = chunkSize == null ? \""simple\"" : \""chunked\"";\n                    progressCalculator[type](e.loaded, e.total);\n                }\n            };\n        },\n\n        /**\n         * Registers an XHR transport instance created elsewhere.\n         *\n         * @param id ID of the associated file\n         * @param optChunkIdx The chunk index associated with this XHR, if applicable\n         * @param xhr XMLHttpRequest object instance\n         * @param optAjaxRequester `qq.AjaxRequester` associated with this request, if applicable.\n         * @returns {XMLHttpRequest}\n         */\n        _registerXhr: function(id, optChunkIdx, xhr, optAjaxRequester) {\n            var xhrsId = optChunkIdx == null ? -1 : optChunkIdx,\n                tempState = handler._getFileState(id).temp;\n\n            tempState.xhrs = tempState.xhrs || {};\n            tempState.ajaxRequesters = tempState.ajaxRequesters || {};\n\n            tempState.xhrs[xhrsId] = xhr;\n\n            if (optAjaxRequester) {\n                tempState.ajaxRequesters[xhrsId] = optAjaxRequester;\n            }\n\n            return xhr;\n        },\n\n        // Deletes any local storage records that are \""expired\"".\n        _removeExpiredChunkingRecords: function() {\n            var expirationDays = resume.recordsExpireIn;\n\n            handler._iterateResumeRecords(function(key, uploadData) {\n                var expirationDate = new Date(uploadData.lastUpdated);\n\n                // transform updated date into expiration date\n                expirationDate.setDate(expirationDate.getDate() + expirationDays);\n\n                if (expirationDate.getTime() <= Date.now()) {\n                    log(\""Removing expired resume record with key \"" + key);\n                    localStorage.removeItem(key);\n                }\n            });\n        },\n\n        /**\n         * Determine if the associated file should be chunked.\n         *\n         * @param id ID of the associated file\n         * @returns {*} true if chunking is enabled, possible, and the file can be split into more than 1 part\n         */\n        _shouldChunkThisFile: function(id) {\n            var state = handler._getFileState(id);\n\n            if (!state.chunking) {\n                handler.reevaluateChunking(id);\n            }\n\n            return state.chunking.enabled;\n        }\n    });\n};\n"",""/*globals qq, XMLHttpRequest*/\nqq.DeleteFileAjaxRequester = function(o) {\n    \""use strict\"";\n\n    var requester,\n        options = {\n            method: \""DELETE\"",\n            uuidParamName: \""qquuid\"",\n            endpointStore: {},\n            maxConnections: 3,\n            customHeaders: function(id) {return {};},\n            paramsStore: {},\n            cors: {\n                expected: false,\n                sendCredentials: false\n            },\n            log: function(str, level) {},\n            onDelete: function(id) {},\n            onDeleteComplete: function(id, xhrOrXdr, isError) {}\n        };\n\n    qq.extend(options, o);\n\n    function getMandatedParams() {\n        if (options.method.toUpperCase() === \""POST\"") {\n            return {\n                _method: \""DELETE\""\n            };\n        }\n\n        return {};\n    }\n\n    requester = qq.extend(this, new qq.AjaxRequester({\n        acceptHeader: \""application/json\"",\n        validMethods: [\""POST\"", \""DELETE\""],\n        method: options.method,\n        endpointStore: options.endpointStore,\n        paramsStore: options.paramsStore,\n        mandatedParams: getMandatedParams(),\n        maxConnections: options.maxConnections,\n        customHeaders: function(id) {\n            return options.customHeaders.get(id);\n        },\n        log: options.log,\n        onSend: options.onDelete,\n        onComplete: options.onDeleteComplete,\n        cors: options.cors\n    }));\n\n    qq.extend(this, {\n        sendDelete: function(id, uuid, additionalMandatedParams) {\n            var additionalOptions = additionalMandatedParams || {};\n\n            options.log(\""Submitting delete file request for \"" + id);\n\n            if (options.method === \""DELETE\"") {\n                requester.initTransport(id)\n                    .withPath(uuid)\n                    .withParams(additionalOptions)\n                    .send();\n            }\n            else {\n                additionalOptions[options.uuidParamName] = uuid;\n                requester.initTransport(id)\n                    .withParams(additionalOptions)\n                    .send();\n            }\n        }\n    });\n};\n"",""/*global qq, define */\n/*jshint strict:false,bitwise:false,nonew:false,asi:true,-W064,-W116,-W089 */\n/**\n * Mega pixel image rendering library for iOS6+\n *\n * Fixes iOS6+'s image file rendering issue for large size image (over mega-pixel),\n * which causes unexpected subsampling when drawing it in canvas.\n * By using this library, you can safely render the image with proper stretching.\n *\n * Copyright (c) 2012 Shinichi Tomita <shinichi.tomita@gmail.com>\n * Released under the MIT license\n *\n * Heavily modified by Widen for Fine Uploader\n */\n(function() {\n\n    /**\n     * Detect subsampling in loaded image.\n     * In iOS, larger images than 2M pixels may be subsampled in rendering.\n     */\n    function detectSubsampling(img) {\n        var iw = img.naturalWidth,\n            ih = img.naturalHeight,\n            canvas = document.createElement(\""canvas\""),\n            ctx;\n\n        if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image\n            canvas.width = canvas.height = 1;\n            ctx = canvas.getContext(\""2d\"");\n            ctx.drawImage(img, -iw + 1, 0);\n            // subsampled image becomes half smaller in rendering size.\n            // check alpha channel value to confirm image is covering edge pixel or not.\n            // if alpha value is 0 image is not covering, hence subsampled.\n            return ctx.getImageData(0, 0, 1, 1).data[3] === 0;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Detecting vertical squash in loaded image.\n     * Fixes a bug which squash image vertically while drawing into canvas for some images.\n     */\n    function detectVerticalSquash(img, iw, ih) {\n        var canvas = document.createElement(\""canvas\""),\n            sy = 0,\n            ey = ih,\n            py = ih,\n            ctx, data, alpha, ratio;\n\n        canvas.width = 1;\n        canvas.height = ih;\n        ctx = canvas.getContext(\""2d\"");\n        ctx.drawImage(img, 0, 0);\n        data = ctx.getImageData(0, 0, 1, ih).data;\n\n        // search image edge pixel position in case it is squashed vertically.\n        while (py > sy) {\n            alpha = data[(py - 1) * 4 + 3];\n            if (alpha === 0) {\n                ey = py;\n            } else {\n                sy = py;\n            }\n            py = (ey + sy) >> 1;\n        }\n\n        ratio = (py / ih);\n        return (ratio === 0) ? 1 : ratio;\n    }\n\n    /**\n     * Rendering image element (with resizing) and get its data URL\n     */\n    function renderImageToDataURL(img, blob, options, doSquash) {\n        var canvas = document.createElement(\""canvas\""),\n            mime = options.mime || \""image/jpeg\"",\n            promise = new qq.Promise();\n\n        renderImageToCanvas(img, blob, canvas, options, doSquash)\n            .then(function() {\n                promise.success(\n                    canvas.toDataURL(mime, options.quality || 0.8)\n                );\n            });\n\n        return promise;\n    }\n\n    function maybeCalculateDownsampledDimensions(spec) {\n        var maxPixels = 5241000; //iOS specific value\n\n        if (!qq.ios()) {\n            throw new qq.Error(\""Downsampled dimensions can only be reliably calculated for iOS!\"");\n        }\n\n        if (spec.origHeight * spec.origWidth > maxPixels) {\n            return {\n                newHeight: Math.round(Math.sqrt(maxPixels * (spec.origHeight / spec.origWidth))),\n                newWidth: Math.round(Math.sqrt(maxPixels * (spec.origWidth / spec.origHeight)))\n            };\n        }\n    }\n\n    /**\n     * Rendering image element (with resizing) into the canvas element\n     */\n    function renderImageToCanvas(img, blob, canvas, options, doSquash) {\n        var iw = img.naturalWidth,\n            ih = img.naturalHeight,\n            width = options.width,\n            height = options.height,\n            ctx = canvas.getContext(\""2d\""),\n            promise = new qq.Promise(),\n            modifiedDimensions;\n\n        ctx.save();\n\n        if (options.resize) {\n            return renderImageToCanvasWithCustomResizer({\n                blob: blob,\n                canvas: canvas,\n                image: img,\n                imageHeight: ih,\n                imageWidth: iw,\n                orientation: options.orientation,\n                resize: options.resize,\n                targetHeight: height,\n                targetWidth: width\n            });\n        }\n\n        if (!qq.supportedFeatures.unlimitedScaledImageSize) {\n            modifiedDimensions = maybeCalculateDownsampledDimensions({\n                origWidth: width,\n                origHeight: height\n            });\n\n            if (modifiedDimensions) {\n                qq.log(qq.format(\""Had to reduce dimensions due to device limitations from {}w / {}h to {}w / {}h\"",\n                    width, height, modifiedDimensions.newWidth, modifiedDimensions.newHeight),\n                    \""warn\"");\n\n                width = modifiedDimensions.newWidth;\n                height = modifiedDimensions.newHeight;\n            }\n        }\n\n        transformCoordinate(canvas, width, height, options.orientation);\n\n        // Fine Uploader specific: Save some CPU cycles if not using iOS\n        // Assumption: This logic is only needed to overcome iOS image sampling issues\n        if (qq.ios()) {\n            (function() {\n                if (detectSubsampling(img)) {\n                    iw /= 2;\n                    ih /= 2;\n                }\n\n                var d = 1024, // size of tiling canvas\n                    tmpCanvas = document.createElement(\""canvas\""),\n                    vertSquashRatio = doSquash ? detectVerticalSquash(img, iw, ih) : 1,\n                    dw = Math.ceil(d * width / iw),\n                    dh = Math.ceil(d * height / ih / vertSquashRatio),\n                    sy = 0,\n                    dy = 0,\n                    tmpCtx, sx, dx;\n\n                tmpCanvas.width = tmpCanvas.height = d;\n                tmpCtx = tmpCanvas.getContext(\""2d\"");\n\n                while (sy < ih) {\n                    sx = 0;\n                    dx = 0;\n                    while (sx < iw) {\n                        tmpCtx.clearRect(0, 0, d, d);\n                        tmpCtx.drawImage(img, -sx, -sy);\n                        ctx.drawImage(tmpCanvas, 0, 0, d, d, dx, dy, dw, dh);\n                        sx += d;\n                        dx += dw;\n                    }\n                    sy += d;\n                    dy += dh;\n                }\n                ctx.restore();\n                tmpCanvas = tmpCtx = null;\n            }());\n        }\n        else {\n            ctx.drawImage(img, 0, 0, width, height);\n        }\n\n        canvas.qqImageRendered && canvas.qqImageRendered();\n        promise.success();\n\n        return promise;\n    }\n\n    function renderImageToCanvasWithCustomResizer(resizeInfo) {\n        var blob = resizeInfo.blob,\n            image = resizeInfo.image,\n            imageHeight = resizeInfo.imageHeight,\n            imageWidth = resizeInfo.imageWidth,\n            orientation = resizeInfo.orientation,\n            promise = new qq.Promise(),\n            resize = resizeInfo.resize,\n            sourceCanvas = document.createElement(\""canvas\""),\n            sourceCanvasContext = sourceCanvas.getContext(\""2d\""),\n            targetCanvas = resizeInfo.canvas,\n            targetHeight = resizeInfo.targetHeight,\n            targetWidth = resizeInfo.targetWidth;\n\n        transformCoordinate(sourceCanvas, imageWidth, imageHeight, orientation);\n\n        targetCanvas.height = targetHeight;\n        targetCanvas.width = targetWidth;\n\n        sourceCanvasContext.drawImage(image, 0, 0);\n\n        resize({\n            blob: blob,\n            height: targetHeight,\n            image: image,\n            sourceCanvas: sourceCanvas,\n            targetCanvas: targetCanvas,\n            width: targetWidth\n        })\n            .then(\n                function success() {\n                    targetCanvas.qqImageRendered && targetCanvas.qqImageRendered();\n                    promise.success();\n                },\n                promise.failure\n            );\n\n        return promise;\n    }\n\n    /**\n     * Transform canvas coordination according to specified frame size and orientation\n     * Orientation value is from EXIF tag\n     */\n    function transformCoordinate(canvas, width, height, orientation) {\n        switch (orientation) {\n            case 5:\n            case 6:\n            case 7:\n            case 8:\n                canvas.width = height;\n                canvas.height = width;\n                break;\n            default:\n                canvas.width = width;\n                canvas.height = height;\n        }\n        var ctx = canvas.getContext(\""2d\"");\n        switch (orientation) {\n            case 2:\n                // horizontal flip\n                ctx.translate(width, 0);\n                ctx.scale(-1, 1);\n                break;\n            case 3:\n                // 180 rotate left\n                ctx.translate(width, height);\n                ctx.rotate(Math.PI);\n                break;\n            case 4:\n                // vertical flip\n                ctx.translate(0, height);\n                ctx.scale(1, -1);\n                break;\n            case 5:\n                // vertical flip + 90 rotate right\n                ctx.rotate(0.5 * Math.PI);\n                ctx.scale(1, -1);\n                break;\n            case 6:\n                // 90 rotate right\n                ctx.rotate(0.5 * Math.PI);\n                ctx.translate(0, -height);\n                break;\n            case 7:\n                // horizontal flip + 90 rotate right\n                ctx.rotate(0.5 * Math.PI);\n                ctx.translate(width, -height);\n                ctx.scale(-1, 1);\n                break;\n            case 8:\n                // 90 rotate left\n                ctx.rotate(-0.5 * Math.PI);\n                ctx.translate(-width, 0);\n                break;\n            default:\n                break;\n        }\n    }\n\n    /**\n     * MegaPixImage class\n     */\n    function MegaPixImage(srcImage, errorCallback) {\n        var self = this;\n\n        if (window.Blob && srcImage instanceof Blob) {\n            (function() {\n                var img = new Image(),\n                    URL = window.URL && window.URL.createObjectURL ? window.URL :\n                        window.webkitURL && window.webkitURL.createObjectURL ? window.webkitURL : null;\n                if (!URL) { throw Error(\""No createObjectURL function found to create blob url\""); }\n                img.src = URL.createObjectURL(srcImage);\n                self.blob = srcImage;\n                srcImage = img;\n            }());\n        }\n        if (!srcImage.naturalWidth && !srcImage.naturalHeight) {\n            srcImage.onload = function() {\n                var listeners = self.imageLoadListeners;\n                if (listeners) {\n                    self.imageLoadListeners = null;\n                    // IE11 doesn't reliably report actual image dimensions immediately after onload for small files,\n                    // so let's push this to the end of the UI thread queue.\n                    setTimeout(function() {\n                        for (var i = 0, len = listeners.length; i < len; i++) {\n                            listeners[i]();\n                        }\n                    }, 0);\n                }\n            };\n            srcImage.onerror = errorCallback;\n            this.imageLoadListeners = [];\n        }\n        this.srcImage = srcImage;\n    }\n\n    /**\n     * Rendering megapix image into specified target element\n     */\n    MegaPixImage.prototype.render = function(target, options) {\n        options = options || {};\n\n        var self = this,\n            imgWidth = this.srcImage.naturalWidth,\n            imgHeight = this.srcImage.naturalHeight,\n            width = options.width,\n            height = options.height,\n            maxWidth = options.maxWidth,\n            maxHeight = options.maxHeight,\n            doSquash = !this.blob || this.blob.type === \""image/jpeg\"",\n            tagName = target.tagName.toLowerCase(),\n            opt;\n\n        if (this.imageLoadListeners) {\n            this.imageLoadListeners.push(function() { self.render(target, options); });\n            return;\n        }\n\n        if (width && !height) {\n            height = (imgHeight * width / imgWidth) << 0;\n        } else if (height && !width) {\n            width = (imgWidth * height / imgHeight) << 0;\n        } else {\n            width = imgWidth;\n            height = imgHeight;\n        }\n        if (maxWidth && width > maxWidth) {\n            width = maxWidth;\n            height = (imgHeight * width / imgWidth) << 0;\n        }\n        if (maxHeight && height > maxHeight) {\n            height = maxHeight;\n            width = (imgWidth * height / imgHeight) << 0;\n        }\n\n        opt = { width: width, height: height },\n        qq.each(options, function(optionsKey, optionsValue) {\n            opt[optionsKey] = optionsValue;\n        });\n\n        if (tagName === \""img\"") {\n            (function() {\n                var oldTargetSrc = target.src;\n                renderImageToDataURL(self.srcImage, self.blob, opt, doSquash)\n                    .then(function(dataUri) {\n                        target.src = dataUri;\n                        oldTargetSrc === target.src && target.onload();\n                    });\n            }());\n        } else if (tagName === \""canvas\"") {\n            renderImageToCanvas(this.srcImage, this.blob, target, opt, doSquash);\n        }\n        if (typeof this.onrender === \""function\"") {\n            this.onrender(target);\n        }\n    };\n\n    qq.MegaPixImage = MegaPixImage;\n})();\n"",""/*globals qq */\n/**\n * Draws a thumbnail of a Blob/File/URL onto an <img> or <canvas>.\n *\n * @constructor\n */\nqq.ImageGenerator = function(log) {\n    \""use strict\"";\n\n    function isImg(el) {\n        return el.tagName.toLowerCase() === \""img\"";\n    }\n\n    function isCanvas(el) {\n        return el.tagName.toLowerCase() === \""canvas\"";\n    }\n\n    function isImgCorsSupported() {\n        return new Image().crossOrigin !== undefined;\n    }\n\n    function isCanvasSupported() {\n        var canvas = document.createElement(\""canvas\"");\n\n        return canvas.getContext && canvas.getContext(\""2d\"");\n    }\n\n    // This is only meant to determine the MIME type of a renderable image file.\n    // It is used to ensure images drawn from a URL that have transparent backgrounds\n    // are rendered correctly, among other things.\n    function determineMimeOfFileName(nameWithPath) {\n        /*jshint -W015 */\n        var pathSegments = nameWithPath.split(\""/\""),\n            name = pathSegments[pathSegments.length - 1].split(\""?\"")[0],\n            extension = qq.getExtension(name);\n\n        extension = extension && extension.toLowerCase();\n\n        switch (extension) {\n            case \""jpeg\"":\n            case \""jpg\"":\n                return \""image/jpeg\"";\n            case \""png\"":\n                return \""image/png\"";\n            case \""bmp\"":\n                return \""image/bmp\"";\n            case \""gif\"":\n                return \""image/gif\"";\n            case \""tiff\"":\n            case \""tif\"":\n                return \""image/tiff\"";\n        }\n    }\n\n    // This will likely not work correctly in IE8 and older.\n    // It's only used as part of a formula to determine\n    // if a canvas can be used to scale a server-hosted thumbnail.\n    // If canvas isn't supported by the UA (IE8 and older)\n    // this method should not even be called.\n    function isCrossOrigin(url) {\n        var targetAnchor = document.createElement(\""a\""),\n            targetProtocol, targetHostname, targetPort;\n\n        targetAnchor.href = url;\n\n        targetProtocol = targetAnchor.protocol;\n        targetPort = targetAnchor.port;\n        targetHostname = targetAnchor.hostname;\n\n        if (targetProtocol.toLowerCase() !== window.location.protocol.toLowerCase()) {\n            return true;\n        }\n\n        if (targetHostname.toLowerCase() !== window.location.hostname.toLowerCase()) {\n            return true;\n        }\n\n        // IE doesn't take ports into consideration when determining if two endpoints are same origin.\n        if (targetPort !== window.location.port && !qq.ie()) {\n            return true;\n        }\n\n        return false;\n    }\n\n    function registerImgLoadListeners(img, promise) {\n        img.onload = function() {\n            img.onload = null;\n            img.onerror = null;\n            promise.success(img);\n        };\n\n        img.onerror = function() {\n            img.onload = null;\n            img.onerror = null;\n            log(\""Problem drawing thumbnail!\"", \""error\"");\n            promise.failure(img, \""Problem drawing thumbnail!\"");\n        };\n    }\n\n    function registerCanvasDrawImageListener(canvas, promise) {\n        // The image is drawn on the canvas by a third-party library,\n        // and we want to know when this is completed.  Since the library\n        // may invoke drawImage many times in a loop, we need to be called\n        // back when the image is fully rendered.  So, we are expecting the\n        // code that draws this image to follow a convention that involves a\n        // function attached to the canvas instance be invoked when it is done.\n        canvas.qqImageRendered = function() {\n            promise.success(canvas);\n        };\n    }\n\n    // Fulfills a `qq.Promise` when an image has been drawn onto the target,\n    // whether that is a <canvas> or an <img>.  The attempt is considered a\n    // failure if the target is not an <img> or a <canvas>, or if the drawing\n    // attempt was not successful.\n    function registerThumbnailRenderedListener(imgOrCanvas, promise) {\n        var registered = isImg(imgOrCanvas) || isCanvas(imgOrCanvas);\n\n        if (isImg(imgOrCanvas)) {\n            registerImgLoadListeners(imgOrCanvas, promise);\n        }\n        else if (isCanvas(imgOrCanvas)) {\n            registerCanvasDrawImageListener(imgOrCanvas, promise);\n        }\n        else {\n            promise.failure(imgOrCanvas);\n            log(qq.format(\""Element container of type {} is not supported!\"", imgOrCanvas.tagName), \""error\"");\n        }\n\n        return registered;\n    }\n\n    // Draw a preview iff the current UA can natively display it.\n    // Also rotate the image if necessary.\n    function draw(fileOrBlob, container, options) {\n        var drawPreview = new qq.Promise(),\n            identifier = new qq.Identify(fileOrBlob, log),\n            maxSize = options.maxSize,\n            // jshint eqnull:true\n            orient = options.orient == null ? true : options.orient,\n            megapixErrorHandler = function() {\n                container.onerror = null;\n                container.onload = null;\n                log(\""Could not render preview, file may be too large!\"", \""error\"");\n                drawPreview.failure(container, \""Browser cannot render image!\"");\n            };\n\n        identifier.isPreviewable().then(\n            function(mime) {\n                // If options explicitly specify that Orientation is not desired,\n                // replace the orient task with a dummy promise that \""succeeds\"" immediately.\n                var dummyExif = {\n                        parse: function() {\n                            return new qq.Promise().success();\n                        }\n                    },\n                    exif = orient ? new qq.Exif(fileOrBlob, log) : dummyExif,\n                    mpImg = new qq.MegaPixImage(fileOrBlob, megapixErrorHandler);\n\n                if (registerThumbnailRenderedListener(container, drawPreview)) {\n                    exif.parse().then(\n                        function(exif) {\n                            var orientation = exif && exif.Orientation;\n\n                            mpImg.render(container, {\n                                maxWidth: maxSize,\n                                maxHeight: maxSize,\n                                orientation: orientation,\n                                mime: mime,\n                                resize: options.customResizeFunction\n                            });\n                        },\n\n                        function(failureMsg) {\n                            log(qq.format(\""EXIF data could not be parsed ({}).  Assuming orientation = 1.\"", failureMsg));\n\n                            mpImg.render(container, {\n                                maxWidth: maxSize,\n                                maxHeight: maxSize,\n                                mime: mime,\n                                resize: options.customResizeFunction\n                            });\n                        }\n                    );\n                }\n            },\n\n            function() {\n                log(\""Not previewable\"");\n                drawPreview.failure(container, \""Not previewable\"");\n            }\n        );\n\n        return drawPreview;\n    }\n\n    function drawOnCanvasOrImgFromUrl(url, canvasOrImg, draw, maxSize, customResizeFunction) {\n        var tempImg = new Image(),\n            tempImgRender = new qq.Promise();\n\n        registerThumbnailRenderedListener(tempImg, tempImgRender);\n\n        if (isCrossOrigin(url)) {\n            tempImg.crossOrigin = \""anonymous\"";\n        }\n\n        tempImg.src = url;\n\n        tempImgRender.then(\n            function rendered() {\n                registerThumbnailRenderedListener(canvasOrImg, draw);\n\n                var mpImg = new qq.MegaPixImage(tempImg);\n                mpImg.render(canvasOrImg, {\n                    maxWidth: maxSize,\n                    maxHeight: maxSize,\n                    mime: determineMimeOfFileName(url),\n                    resize: customResizeFunction\n                });\n            },\n\n            draw.failure\n        );\n    }\n\n    function drawOnImgFromUrlWithCssScaling(url, img, draw, maxSize) {\n        registerThumbnailRenderedListener(img, draw);\n        // NOTE: The fact that maxWidth/height is set on the thumbnail for scaled images\n        // that must drop back to CSS is known and exploited by the templating module.\n        // In this module, we pre-render \""waiting\"" thumbs for all files immediately after they\n        // are submitted, and we must be sure to pass any style associated with the \""waiting\"" preview.\n        qq(img).css({\n            maxWidth: maxSize + \""px\"",\n            maxHeight: maxSize + \""px\""\n        });\n\n        img.src = url;\n    }\n\n    // Draw a (server-hosted) thumbnail given a URL.\n    // This will optionally scale the thumbnail as well.\n    // It attempts to use <canvas> to scale, but will fall back\n    // to max-width and max-height style properties if the UA\n    // doesn't support canvas or if the images is cross-domain and\n    // the UA doesn't support the crossorigin attribute on img tags,\n    // which is required to scale a cross-origin image using <canvas> &\n    // then export it back to an <img>.\n    function drawFromUrl(url, container, options) {\n        var draw = new qq.Promise(),\n            scale = options.scale,\n            maxSize = scale ? options.maxSize : null;\n\n        // container is an img, scaling needed\n        if (scale && isImg(container)) {\n            // Iff canvas is available in this UA, try to use it for scaling.\n            // Otherwise, fall back to CSS scaling\n            if (isCanvasSupported()) {\n                // Attempt to use <canvas> for image scaling,\n                // but we must fall back to scaling via CSS/styles\n                // if this is a cross-origin image and the UA doesn't support <img> CORS.\n                if (isCrossOrigin(url) && !isImgCorsSupported()) {\n                    drawOnImgFromUrlWithCssScaling(url, container, draw, maxSize);\n                }\n                else {\n                    drawOnCanvasOrImgFromUrl(url, container, draw, maxSize);\n                }\n            }\n            else {\n                drawOnImgFromUrlWithCssScaling(url, container, draw, maxSize);\n            }\n        }\n        // container is a canvas, scaling optional\n        else if (isCanvas(container)) {\n            drawOnCanvasOrImgFromUrl(url, container, draw, maxSize);\n        }\n        // container is an img & no scaling: just set the src attr to the passed url\n        else if (registerThumbnailRenderedListener(container, draw)) {\n            container.src = url;\n        }\n\n        return draw;\n    }\n\n    qq.extend(this, {\n        /**\n         * Generate a thumbnail.  Depending on the arguments, this may either result in\n         * a client-side rendering of an image (if a `Blob` is supplied) or a server-generated\n         * image that may optionally be scaled client-side using <canvas> or CSS/styles (as a fallback).\n         *\n         * @param fileBlobOrUrl a `File`, `Blob`, or a URL pointing to the image\n         * @param container <img> or <canvas> to contain the preview\n         * @param options possible properties include `maxSize` (int), `orient` (bool - default true), resize` (bool - default true), and `customResizeFunction`.\n         * @returns qq.Promise fulfilled when the preview has been drawn, or the attempt has failed\n         */\n        generate: function(fileBlobOrUrl, container, options) {\n            if (qq.isString(fileBlobOrUrl)) {\n                log(\""Attempting to update thumbnail based on server response.\"");\n                return drawFromUrl(fileBlobOrUrl, container, options || {});\n            }\n            else {\n                log(\""Attempting to draw client-side image preview.\"");\n                return draw(fileBlobOrUrl, container, options || {});\n            }\n        }\n    });\n\n    /*<testing>*/\n    this._testing = {};\n    this._testing.isImg = isImg;\n    this._testing.isCanvas = isCanvas;\n    this._testing.isCrossOrigin = isCrossOrigin;\n    this._testing.determineMimeOfFileName = determineMimeOfFileName;\n    /*</testing>*/\n};\n"",""/*globals qq */\n/**\n * EXIF image data parser.  Currently only parses the Orientation tag value,\n * but this may be expanded to other tags in the future.\n *\n * @param fileOrBlob Attempt to parse EXIF data in this `Blob`\n * @constructor\n */\nqq.Exif = function(fileOrBlob, log) {\n    \""use strict\"";\n\n    // Orientation is the only tag parsed here at this time.\n    var TAG_IDS = [274],\n        TAG_INFO = {\n            274: {\n                name: \""Orientation\"",\n                bytes: 2\n            }\n        };\n\n    // Convert a little endian (hex string) to big endian (decimal).\n    function parseLittleEndian(hex) {\n        var result = 0,\n            pow = 0;\n\n        while (hex.length > 0) {\n            result += parseInt(hex.substring(0, 2), 16) * Math.pow(2, pow);\n            hex = hex.substring(2, hex.length);\n            pow += 8;\n        }\n\n        return result;\n    }\n\n    // Find the byte offset, of Application Segment 1 (EXIF).\n    // External callers need not supply any arguments.\n    function seekToApp1(offset, promise) {\n        var theOffset = offset,\n            thePromise = promise;\n        if (theOffset === undefined) {\n            theOffset = 2;\n            thePromise = new qq.Promise();\n        }\n\n        qq.readBlobToHex(fileOrBlob, theOffset, 4).then(function(hex) {\n            var match = /^ffe([0-9])/.exec(hex),\n                segmentLength;\n\n            if (match) {\n                if (match[1] !== \""1\"") {\n                    segmentLength = parseInt(hex.slice(4, 8), 16);\n                    seekToApp1(theOffset + segmentLength + 2, thePromise);\n                }\n                else {\n                    thePromise.success(theOffset);\n                }\n            }\n            else {\n                thePromise.failure(\""No EXIF header to be found!\"");\n            }\n        });\n\n        return thePromise;\n    }\n\n    // Find the byte offset of Application Segment 1 (EXIF) for valid JPEGs only.\n    function getApp1Offset() {\n        var promise = new qq.Promise();\n\n        qq.readBlobToHex(fileOrBlob, 0, 6).then(function(hex) {\n            if (hex.indexOf(\""ffd8\"") !== 0) {\n                promise.failure(\""Not a valid JPEG!\"");\n            }\n            else {\n                seekToApp1().then(function(offset) {\n                    promise.success(offset);\n                },\n                function(error) {\n                    promise.failure(error);\n                });\n            }\n        });\n\n        return promise;\n    }\n\n    // Determine the byte ordering of the EXIF header.\n    function isLittleEndian(app1Start) {\n        var promise = new qq.Promise();\n\n        qq.readBlobToHex(fileOrBlob, app1Start + 10, 2).then(function(hex) {\n            promise.success(hex === \""4949\"");\n        });\n\n        return promise;\n    }\n\n    // Determine the number of directory entries in the EXIF header.\n    function getDirEntryCount(app1Start, littleEndian) {\n        var promise = new qq.Promise();\n\n        qq.readBlobToHex(fileOrBlob, app1Start + 18, 2).then(function(hex) {\n            if (littleEndian) {\n                return promise.success(parseLittleEndian(hex));\n            }\n            else {\n                promise.success(parseInt(hex, 16));\n            }\n        });\n\n        return promise;\n    }\n\n    // Get the IFD portion of the EXIF header as a hex string.\n    function getIfd(app1Start, dirEntries) {\n        var offset = app1Start + 20,\n            bytes = dirEntries * 12;\n\n        return qq.readBlobToHex(fileOrBlob, offset, bytes);\n    }\n\n    // Obtain an array of all directory entries (as hex strings) in the EXIF header.\n    function getDirEntries(ifdHex) {\n        var entries = [],\n            offset = 0;\n\n        while (offset + 24 <= ifdHex.length) {\n            entries.push(ifdHex.slice(offset, offset + 24));\n            offset += 24;\n        }\n\n        return entries;\n    }\n\n    // Obtain values for all relevant tags and return them.\n    function getTagValues(littleEndian, dirEntries) {\n        var TAG_VAL_OFFSET = 16,\n            tagsToFind = qq.extend([], TAG_IDS),\n            vals = {};\n\n        qq.each(dirEntries, function(idx, entry) {\n            var idHex = entry.slice(0, 4),\n                id = littleEndian ? parseLittleEndian(idHex) : parseInt(idHex, 16),\n                tagsToFindIdx = tagsToFind.indexOf(id),\n                tagValHex, tagName, tagValLength;\n\n            if (tagsToFindIdx >= 0) {\n                tagName = TAG_INFO[id].name;\n                tagValLength = TAG_INFO[id].bytes;\n                tagValHex = entry.slice(TAG_VAL_OFFSET, TAG_VAL_OFFSET + (tagValLength * 2));\n                vals[tagName] = littleEndian ? parseLittleEndian(tagValHex) : parseInt(tagValHex, 16);\n\n                tagsToFind.splice(tagsToFindIdx, 1);\n            }\n\n            if (tagsToFind.length === 0) {\n                return false;\n            }\n        });\n\n        return vals;\n    }\n\n    qq.extend(this, {\n        /**\n         * Attempt to parse the EXIF header for the `Blob` associated with this instance.\n         *\n         * @returns {qq.Promise} To be fulfilled when the parsing is complete.\n         * If successful, the parsed EXIF header as an object will be included.\n         */\n        parse: function() {\n            var parser = new qq.Promise(),\n                onParseFailure = function(message) {\n                    log(qq.format(\""EXIF header parse failed: '{}' \"", message));\n                    parser.failure(message);\n                };\n\n            getApp1Offset().then(function(app1Offset) {\n                log(qq.format(\""Moving forward with EXIF header parsing for '{}'\"", fileOrBlob.name === undefined ? \""blob\"" : fileOrBlob.name));\n\n                isLittleEndian(app1Offset).then(function(littleEndian) {\n\n                    log(qq.format(\""EXIF Byte order is {} endian\"", littleEndian ? \""little\"" : \""big\""));\n\n                    getDirEntryCount(app1Offset, littleEndian).then(function(dirEntryCount) {\n\n                        log(qq.format(\""Found {} APP1 directory entries\"", dirEntryCount));\n\n                        getIfd(app1Offset, dirEntryCount).then(function(ifdHex) {\n                            var dirEntries = getDirEntries(ifdHex),\n                                tagValues = getTagValues(littleEndian, dirEntries);\n\n                            log(\""Successfully parsed some EXIF tags\"");\n\n                            parser.success(tagValues);\n                        }, onParseFailure);\n                    }, onParseFailure);\n                }, onParseFailure);\n            }, onParseFailure);\n\n            return parser;\n        }\n    });\n\n    /*<testing>*/\n    this._testing = {};\n    this._testing.parseLittleEndian = parseLittleEndian;\n    /*</testing>*/\n};\n"",""/*globals qq */\nqq.Identify = function(fileOrBlob, log) {\n    \""use strict\"";\n\n    function isIdentifiable(magicBytes, questionableBytes) {\n        var identifiable = false,\n            magicBytesEntries = [].concat(magicBytes);\n\n        qq.each(magicBytesEntries, function(idx, magicBytesArrayEntry) {\n            if (questionableBytes.indexOf(magicBytesArrayEntry) === 0) {\n                identifiable = true;\n                return false;\n            }\n        });\n\n        return identifiable;\n    }\n\n    qq.extend(this, {\n        /**\n         * Determines if a Blob can be displayed natively in the current browser.  This is done by reading magic\n         * bytes in the beginning of the file, so this is an asynchronous operation.  Before we attempt to read the\n         * file, we will examine the blob's type attribute to save CPU cycles.\n         *\n         * @returns {qq.Promise} Promise that is fulfilled when identification is complete.\n         * If successful, the MIME string is passed to the success handler.\n         */\n        isPreviewable: function() {\n            var self = this,\n                identifier = new qq.Promise(),\n                previewable = false,\n                name = fileOrBlob.name === undefined ? \""blob\"" : fileOrBlob.name;\n\n            log(qq.format(\""Attempting to determine if {} can be rendered in this browser\"", name));\n\n            log(\""First pass: check type attribute of blob object.\"");\n\n            if (this.isPreviewableSync()) {\n                log(\""Second pass: check for magic bytes in file header.\"");\n\n                qq.readBlobToHex(fileOrBlob, 0, 4).then(function(hex) {\n                    qq.each(self.PREVIEWABLE_MIME_TYPES, function(mime, bytes) {\n                        if (isIdentifiable(bytes, hex)) {\n                            // Safari is the only supported browser that can deal with TIFFs natively,\n                            // so, if this is a TIFF and the UA isn't Safari, declare this file \""non-previewable\"".\n                            if (mime !== \""image/tiff\"" || qq.supportedFeatures.tiffPreviews) {\n                                previewable = true;\n                                identifier.success(mime);\n                            }\n\n                            return false;\n                        }\n                    });\n\n                    log(qq.format(\""'{}' is {} able to be rendered in this browser\"", name, previewable ? \""\"" : \""NOT\""));\n\n                    if (!previewable) {\n                        identifier.failure();\n                    }\n                },\n                function() {\n                    log(\""Error reading file w/ name '\"" + name + \""'.  Not able to be rendered in this browser.\"");\n                    identifier.failure();\n                });\n            }\n            else {\n                identifier.failure();\n            }\n\n            return identifier;\n        },\n\n        /**\n         * Determines if a Blob can be displayed natively in the current browser.  This is done by checking the\n         * blob's type attribute.  This is a synchronous operation, useful for situations where an asynchronous operation\n         * would be challenging to support.  Note that the blob's type property is not as accurate as reading the\n         * file's magic bytes.\n         *\n         * @returns {Boolean} true if the blob can be rendered in the current browser\n         */\n        isPreviewableSync: function() {\n            var fileMime = fileOrBlob.type,\n                // Assumption: This will only ever be executed in browsers that support `Object.keys`.\n                isRecognizedImage = qq.indexOf(Object.keys(this.PREVIEWABLE_MIME_TYPES), fileMime) >= 0,\n                previewable = false,\n                name = fileOrBlob.name === undefined ? \""blob\"" : fileOrBlob.name;\n\n            if (isRecognizedImage) {\n                if (fileMime === \""image/tiff\"") {\n                    previewable = qq.supportedFeatures.tiffPreviews;\n                }\n                else {\n                    previewable = true;\n                }\n            }\n\n            !previewable && log(name + \"" is not previewable in this browser per the blob's type attr\"");\n\n            return previewable;\n        }\n    });\n};\n\nqq.Identify.prototype.PREVIEWABLE_MIME_TYPES = {\n    \""image/jpeg\"": \""ffd8ff\"",\n    \""image/gif\"": \""474946\"",\n    \""image/png\"": \""89504e\"",\n    \""image/bmp\"": \""424d\"",\n    \""image/tiff\"": [\""49492a00\"", \""4d4d002a\""]\n};\n"",""/*globals qq*/\n/**\n * Attempts to validate an image, wherever possible.\n *\n * @param blob File or Blob representing a user-selecting image.\n * @param log Uses this to post log messages to the console.\n * @constructor\n */\nqq.ImageValidation = function(blob, log) {\n    \""use strict\"";\n\n    /**\n     * @param limits Object with possible image-related limits to enforce.\n     * @returns {boolean} true if at least one of the limits has a non-zero value\n     */\n    function hasNonZeroLimits(limits) {\n        var atLeastOne = false;\n\n        qq.each(limits, function(limit, value) {\n            if (value > 0) {\n                atLeastOne = true;\n                return false;\n            }\n        });\n\n        return atLeastOne;\n    }\n\n    /**\n     * @returns {qq.Promise} The promise is a failure if we can't obtain the width & height.\n     * Otherwise, `success` is called on the returned promise with an object containing\n     * `width` and `height` properties.\n     */\n    function getWidthHeight() {\n        var sizeDetermination = new qq.Promise();\n\n        new qq.Identify(blob, log).isPreviewable().then(function() {\n            var image = new Image(),\n                url = window.URL && window.URL.createObjectURL ? window.URL :\n                      window.webkitURL && window.webkitURL.createObjectURL ? window.webkitURL :\n                      null;\n\n            if (url) {\n                image.onerror = function() {\n                    log(\""Cannot determine dimensions for image.  May be too large.\"", \""error\"");\n                    sizeDetermination.failure();\n                };\n\n                image.onload = function() {\n                    sizeDetermination.success({\n                        width: this.width,\n                        height: this.height\n                    });\n                };\n\n                image.src = url.createObjectURL(blob);\n            }\n            else {\n                log(\""No createObjectURL function available to generate image URL!\"", \""error\"");\n                sizeDetermination.failure();\n            }\n        }, sizeDetermination.failure);\n\n        return sizeDetermination;\n    }\n\n    /**\n     *\n     * @param limits Object with possible image-related limits to enforce.\n     * @param dimensions Object containing `width` & `height` properties for the image to test.\n     * @returns {String || undefined} The name of the failing limit.  Undefined if no failing limits.\n     */\n    function getFailingLimit(limits, dimensions) {\n        var failingLimit;\n\n        qq.each(limits, function(limitName, limitValue) {\n            if (limitValue > 0) {\n                var limitMatcher = /(max|min)(Width|Height)/.exec(limitName),\n                    dimensionPropName = limitMatcher[2].charAt(0).toLowerCase() + limitMatcher[2].slice(1),\n                    actualValue = dimensions[dimensionPropName];\n\n                /*jshint -W015*/\n                switch (limitMatcher[1]) {\n                    case \""min\"":\n                        if (actualValue < limitValue) {\n                            failingLimit = limitName;\n                            return false;\n                        }\n                        break;\n                    case \""max\"":\n                        if (actualValue > limitValue) {\n                            failingLimit = limitName;\n                            return false;\n                        }\n                        break;\n                }\n            }\n        });\n\n        return failingLimit;\n    }\n\n    /**\n     * Validate the associated blob.\n     *\n     * @param limits\n     * @returns {qq.Promise} `success` is called on the promise is the image is valid or\n     * if the blob is not an image, or if the image is not verifiable.\n     * Otherwise, `failure` with the name of the failing limit.\n     */\n    this.validate = function(limits) {\n        var validationEffort = new qq.Promise();\n\n        log(\""Attempting to validate image.\"");\n\n        if (hasNonZeroLimits(limits)) {\n            getWidthHeight().then(function(dimensions) {\n                var failingLimit = getFailingLimit(limits, dimensions);\n\n                if (failingLimit) {\n                    validationEffort.failure(failingLimit);\n                }\n                else {\n                    validationEffort.success();\n                }\n            }, validationEffort.success);\n        }\n        else {\n            validationEffort.success();\n        }\n\n        return validationEffort;\n    };\n};\n"",""/* globals qq */\n/**\n * Module used to control populating the initial list of files.\n *\n * @constructor\n */\nqq.Session = function(spec) {\n    \""use strict\"";\n\n    var options = {\n        endpoint: null,\n        params: {},\n        customHeaders: {},\n        cors: {},\n        addFileRecord: function(sessionData) {},\n        log: function(message, level) {}\n    };\n\n    qq.extend(options, spec, true);\n\n    function isJsonResponseValid(response) {\n        if (qq.isArray(response)) {\n            return true;\n        }\n\n        options.log(\""Session response is not an array.\"", \""error\"");\n    }\n\n    function handleFileItems(fileItems, success, xhrOrXdr, promise) {\n        var someItemsIgnored = false;\n\n        success = success && isJsonResponseValid(fileItems);\n\n        if (success) {\n            qq.each(fileItems, function(idx, fileItem) {\n                /* jshint eqnull:true */\n                if (fileItem.uuid == null) {\n                    someItemsIgnored = true;\n                    options.log(qq.format(\""Session response item {} did not include a valid UUID - ignoring.\"", idx), \""error\"");\n                }\n                else if (fileItem.name == null) {\n                    someItemsIgnored = true;\n                    options.log(qq.format(\""Session response item {} did not include a valid name - ignoring.\"", idx), \""error\"");\n                }\n                else {\n                    try {\n                        options.addFileRecord(fileItem);\n                        return true;\n                    }\n                    catch (err) {\n                        someItemsIgnored = true;\n                        options.log(err.message, \""error\"");\n                    }\n                }\n\n                return false;\n            });\n        }\n\n        promise[success && !someItemsIgnored ? \""success\"" : \""failure\""](fileItems, xhrOrXdr);\n    }\n\n    // Initiate a call to the server that will be used to populate the initial file list.\n    // Returns a `qq.Promise`.\n    this.refresh = function() {\n        /*jshint indent:false */\n        var refreshEffort = new qq.Promise(),\n            refreshCompleteCallback = function(response, success, xhrOrXdr) {\n                handleFileItems(response, success, xhrOrXdr, refreshEffort);\n            },\n            requesterOptions = qq.extend({}, options),\n            requester = new qq.SessionAjaxRequester(\n                qq.extend(requesterOptions, {onComplete: refreshCompleteCallback})\n            );\n\n        requester.queryServer();\n\n        return refreshEffort;\n    };\n};\n"",""/*globals qq, XMLHttpRequest*/\n/**\n * Thin module used to send GET requests to the server, expecting information about session\n * data used to initialize an uploader instance.\n *\n * @param spec Various options used to influence the associated request.\n * @constructor\n */\nqq.SessionAjaxRequester = function(spec) {\n    \""use strict\"";\n\n    var requester,\n        options = {\n            endpoint: null,\n            customHeaders: {},\n            params: {},\n            cors: {\n                expected: false,\n                sendCredentials: false\n            },\n            onComplete: function(response, success, xhrOrXdr) {},\n            log: function(str, level) {}\n        };\n\n    qq.extend(options, spec);\n\n    function onComplete(id, xhrOrXdr, isError) {\n        var response = null;\n\n        /* jshint eqnull:true */\n        if (xhrOrXdr.responseText != null) {\n            try {\n                response = qq.parseJson(xhrOrXdr.responseText);\n            }\n            catch (err) {\n                options.log(\""Problem parsing session response: \"" + err.message, \""error\"");\n                isError = true;\n            }\n        }\n\n        options.onComplete(response, !isError, xhrOrXdr);\n    }\n\n    requester = qq.extend(this, new qq.AjaxRequester({\n        acceptHeader: \""application/json\"",\n        validMethods: [\""GET\""],\n        method: \""GET\"",\n        endpointStore: {\n            get: function() {\n                return options.endpoint;\n            }\n        },\n        customHeaders: options.customHeaders,\n        log: options.log,\n        onComplete: onComplete,\n        cors: options.cors\n    }));\n\n    qq.extend(this, {\n        queryServer: function() {\n            var params = qq.extend({}, options.params);\n\n            options.log(\""Session query request.\"");\n\n            requester.initTransport(\""sessionRefresh\"")\n                .withParams(params)\n                .withCacheBuster()\n                .send();\n        }\n    });\n};\n"",""/* globals qq, ExifRestorer */\n/**\n * Controls generation of scaled images based on a reference image encapsulated in a `File` or `Blob`.\n * Scaled images are generated and converted to blobs on-demand.\n * Multiple scaled images per reference image with varying sizes and other properties are supported.\n *\n * @param spec Information about the scaled images to generate.\n * @param log Logger instance\n * @constructor\n */\nqq.Scaler = function(spec, log) {\n    \""use strict\"";\n\n    var self = this,\n        customResizeFunction = spec.customResizer,\n        includeOriginal = spec.sendOriginal,\n        orient = spec.orient,\n        defaultType = spec.defaultType,\n        defaultQuality = spec.defaultQuality / 100,\n        failedToScaleText = spec.failureText,\n        includeExif = spec.includeExif,\n        sizes = this._getSortedSizes(spec.sizes);\n\n    // Revealed API for instances of this module\n    qq.extend(this, {\n        // If no targeted sizes have been declared or if this browser doesn't support\n        // client-side image preview generation, there is no scaling to do.\n        enabled: qq.supportedFeatures.scaling && sizes.length > 0,\n\n        getFileRecords: function(originalFileUuid, originalFileName, originalBlobOrBlobData) {\n            var self = this,\n                records = [],\n                originalBlob = originalBlobOrBlobData.blob ? originalBlobOrBlobData.blob : originalBlobOrBlobData,\n                identifier = new qq.Identify(originalBlob, log);\n\n            // If the reference file cannot be rendered natively, we can't create scaled versions.\n            if (identifier.isPreviewableSync()) {\n                // Create records for each scaled version & add them to the records array, smallest first.\n                qq.each(sizes, function(idx, sizeRecord) {\n                    var outputType = self._determineOutputType({\n                        defaultType: defaultType,\n                        requestedType: sizeRecord.type,\n                        refType: originalBlob.type\n                    });\n\n                    records.push({\n                        uuid: qq.getUniqueId(),\n                        name: self._getName(originalFileName, {\n                            name: sizeRecord.name,\n                            type: outputType,\n                            refType: originalBlob.type\n                        }),\n                        blob: new qq.BlobProxy(originalBlob,\n                        qq.bind(self._generateScaledImage, self, {\n                            customResizeFunction: customResizeFunction,\n                            maxSize: sizeRecord.maxSize,\n                            orient: orient,\n                            type: outputType,\n                            quality: defaultQuality,\n                            failedText: failedToScaleText,\n                            includeExif: includeExif,\n                            log: log\n                        }))\n                    });\n                });\n\n                records.push({\n                    uuid: originalFileUuid,\n                    name: originalFileName,\n                    size: originalBlob.size,\n                    blob: includeOriginal ? originalBlob : null\n                });\n            }\n            else {\n                records.push({\n                    uuid: originalFileUuid,\n                    name: originalFileName,\n                    size: originalBlob.size,\n                    blob: originalBlob\n                });\n            }\n\n            return records;\n        },\n\n        handleNewFile: function(file, name, uuid, size, fileList, batchId, uuidParamName, api) {\n            var self = this,\n                buttonId = file.qqButtonId || (file.blob && file.blob.qqButtonId),\n                scaledIds = [],\n                originalId = null,\n                addFileToHandler = api.addFileToHandler,\n                uploadData = api.uploadData,\n                paramsStore = api.paramsStore,\n                proxyGroupId = qq.getUniqueId();\n\n            qq.each(self.getFileRecords(uuid, name, file), function(idx, record) {\n                var blobSize = record.size,\n                    id;\n\n                if (record.blob instanceof qq.BlobProxy) {\n                    blobSize = -1;\n                }\n\n                id = uploadData.addFile({\n                    uuid: record.uuid,\n                    name: record.name,\n                    size: blobSize,\n                    batchId: batchId,\n                    proxyGroupId: proxyGroupId\n                });\n\n                if (record.blob instanceof qq.BlobProxy) {\n                    scaledIds.push(id);\n                }\n                else {\n                    originalId = id;\n                }\n\n                if (record.blob) {\n                    addFileToHandler(id, record.blob);\n                    fileList.push({id: id, file: record.blob});\n                }\n                else {\n                    uploadData.setStatus(id, qq.status.REJECTED);\n                }\n            });\n\n            // If we are potentially uploading an original file and some scaled versions,\n            // ensure the scaled versions include reference's to the parent's UUID and size\n            // in their associated upload requests.\n            if (originalId !== null) {\n                qq.each(scaledIds, function(idx, scaledId) {\n                    var params = {\n                        qqparentuuid: uploadData.retrieve({id: originalId}).uuid,\n                        qqparentsize: uploadData.retrieve({id: originalId}).size\n                    };\n\n                    // Make sure the UUID for each scaled image is sent with the upload request,\n                    // to be consistent (since we may need to ensure it is sent for the original file as well).\n                    params[uuidParamName] = uploadData.retrieve({id: scaledId}).uuid;\n\n                    uploadData.setParentId(scaledId, originalId);\n                    paramsStore.addReadOnly(scaledId, params);\n                });\n\n                // If any scaled images are tied to this parent image, be SURE we send its UUID as an upload request\n                // parameter as well.\n                if (scaledIds.length) {\n                    (function() {\n                        var param = {};\n                        param[uuidParamName] = uploadData.retrieve({id: originalId}).uuid;\n                        paramsStore.addReadOnly(originalId, param);\n                    }());\n                }\n            }\n        }\n    });\n};\n\nqq.extend(qq.Scaler.prototype, {\n    scaleImage: function(id, specs, api) {\n        \""use strict\"";\n\n        if (!qq.supportedFeatures.scaling) {\n            throw new qq.Error(\""Scaling is not supported in this browser!\"");\n        }\n\n        var scalingEffort = new qq.Promise(),\n            log = api.log,\n            file = api.getFile(id),\n            uploadData = api.uploadData.retrieve({id: id}),\n            name = uploadData && uploadData.name,\n            uuid = uploadData && uploadData.uuid,\n            scalingOptions = {\n                customResizer: specs.customResizer,\n                sendOriginal: false,\n                orient: specs.orient,\n                defaultType: specs.type || null,\n                defaultQuality: specs.quality,\n                failedToScaleText: \""Unable to scale\"",\n                sizes: [{name: \""\"", maxSize: specs.maxSize}]\n            },\n            scaler = new qq.Scaler(scalingOptions, log);\n\n        if (!qq.Scaler || !qq.supportedFeatures.imagePreviews || !file) {\n            scalingEffort.failure();\n\n            log(\""Could not generate requested scaled image for \"" + id + \"".  \"" +\n                \""Scaling is either not possible in this browser, or the file could not be located.\"", \""error\"");\n        }\n        else {\n            (qq.bind(function() {\n                // Assumption: There will never be more than one record\n                var record = scaler.getFileRecords(uuid, name, file)[0];\n\n                if (record && record.blob instanceof qq.BlobProxy) {\n                    record.blob.create().then(scalingEffort.success, scalingEffort.failure);\n                }\n                else {\n                    log(id + \"" is not a scalable image!\"", \""error\"");\n                    scalingEffort.failure();\n                }\n            }, this)());\n        }\n\n        return scalingEffort;\n    },\n\n    // NOTE: We cannot reliably determine at this time if the UA supports a specific MIME type for the target format.\n    // image/jpeg and image/png are the only safe choices at this time.\n    _determineOutputType: function(spec) {\n        \""use strict\"";\n\n        var requestedType = spec.requestedType,\n            defaultType = spec.defaultType,\n            referenceType = spec.refType;\n\n        // If a default type and requested type have not been specified, this should be a\n        // JPEG if the original type is a JPEG, otherwise, a PNG.\n        if (!defaultType && !requestedType) {\n            if (referenceType !== \""image/jpeg\"") {\n                return \""image/png\"";\n            }\n            return referenceType;\n        }\n\n        // A specified default type is used when a requested type is not specified.\n        if (!requestedType) {\n            return defaultType;\n        }\n\n        // If requested type is specified, use it, as long as this recognized type is supported by the current UA\n        if (qq.indexOf(Object.keys(qq.Identify.prototype.PREVIEWABLE_MIME_TYPES), requestedType) >= 0) {\n            if (requestedType === \""image/tiff\"") {\n                return qq.supportedFeatures.tiffPreviews ? requestedType : defaultType;\n            }\n\n            return requestedType;\n        }\n\n        return defaultType;\n    },\n\n    // Get a file name for a generated scaled file record, based on the provided scaled image description\n    _getName: function(originalName, scaledVersionProperties) {\n        \""use strict\"";\n\n        var startOfExt = originalName.lastIndexOf(\"".\""),\n            versionType = scaledVersionProperties.type || \""image/png\"",\n            referenceType = scaledVersionProperties.refType,\n            scaledName = \""\"",\n            scaledExt = qq.getExtension(originalName),\n            nameAppendage = \""\"";\n\n        if (scaledVersionProperties.name && scaledVersionProperties.name.trim().length) {\n            nameAppendage = \"" (\"" + scaledVersionProperties.name + \"")\"";\n        }\n\n        if (startOfExt >= 0) {\n            scaledName = originalName.substr(0, startOfExt);\n\n            if (referenceType !== versionType) {\n                scaledExt = versionType.split(\""/\"")[1];\n            }\n\n            scaledName += nameAppendage + \"".\"" + scaledExt;\n        }\n        else {\n            scaledName = originalName + nameAppendage;\n        }\n\n        return scaledName;\n    },\n\n    // We want the smallest scaled file to be uploaded first\n    _getSortedSizes: function(sizes) {\n        \""use strict\"";\n\n        sizes = qq.extend([], sizes);\n\n        return sizes.sort(function(a, b) {\n            if (a.maxSize > b.maxSize) {\n                return 1;\n            }\n            if (a.maxSize < b.maxSize) {\n                return -1;\n            }\n            return 0;\n        });\n    },\n\n    _generateScaledImage: function(spec, sourceFile) {\n        \""use strict\"";\n\n        var self = this,\n            customResizeFunction = spec.customResizeFunction,\n            log = spec.log,\n            maxSize = spec.maxSize,\n            orient = spec.orient,\n            type = spec.type,\n            quality = spec.quality,\n            failedText = spec.failedText,\n            includeExif = spec.includeExif && sourceFile.type === \""image/jpeg\"" && type === \""image/jpeg\"",\n            scalingEffort = new qq.Promise(),\n            imageGenerator = new qq.ImageGenerator(log),\n            canvas = document.createElement(\""canvas\"");\n\n        log(\""Attempting to generate scaled version for \"" + sourceFile.name);\n\n        imageGenerator.generate(sourceFile, canvas, {maxSize: maxSize, orient: orient, customResizeFunction: customResizeFunction}).then(function() {\n            var scaledImageDataUri = canvas.toDataURL(type, quality),\n                signalSuccess = function() {\n                    log(\""Success generating scaled version for \"" + sourceFile.name);\n                    var blob = qq.dataUriToBlob(scaledImageDataUri);\n                    scalingEffort.success(blob);\n                };\n\n            if (includeExif) {\n                self._insertExifHeader(sourceFile, scaledImageDataUri, log).then(function(scaledImageDataUriWithExif) {\n                    scaledImageDataUri = scaledImageDataUriWithExif;\n                    signalSuccess();\n                },\n                function() {\n                    log(\""Problem inserting EXIF header into scaled image.  Using scaled image w/out EXIF data.\"", \""error\"");\n                    signalSuccess();\n                });\n            }\n            else {\n                signalSuccess();\n            }\n        }, function() {\n            log(\""Failed attempt to generate scaled version for \"" + sourceFile.name, \""error\"");\n            scalingEffort.failure(failedText);\n        });\n\n        return scalingEffort;\n    },\n\n    // Attempt to insert the original image's EXIF header into a scaled version.\n    _insertExifHeader: function(originalImage, scaledImageDataUri, log) {\n        \""use strict\"";\n\n        var reader = new FileReader(),\n            insertionEffort = new qq.Promise(),\n            originalImageDataUri = \""\"";\n\n        reader.onload = function() {\n            originalImageDataUri = reader.result;\n            insertionEffort.success(qq.ExifRestorer.restore(originalImageDataUri, scaledImageDataUri));\n        };\n\n        reader.onerror = function() {\n            log(\""Problem reading \"" + originalImage.name + \"" during attempt to transfer EXIF data to scaled version.\"", \""error\"");\n            insertionEffort.failure();\n        };\n\n        reader.readAsDataURL(originalImage);\n\n        return insertionEffort;\n    },\n\n    _dataUriToBlob: function(dataUri) {\n        \""use strict\"";\n\n        var byteString, mimeString, arrayBuffer, intArray;\n\n        // convert base64 to raw binary data held in a string\n        if (dataUri.split(\"",\"")[0].indexOf(\""base64\"") >= 0) {\n            byteString = atob(dataUri.split(\"",\"")[1]);\n        }\n        else {\n            byteString = decodeURI(dataUri.split(\"",\"")[1]);\n        }\n\n        // extract the MIME\n        mimeString = dataUri.split(\"",\"")[0]\n            .split(\"":\"")[1]\n            .split(\"";\"")[0];\n\n        // write the bytes of the binary string to an ArrayBuffer\n        arrayBuffer = new ArrayBuffer(byteString.length);\n        intArray = new Uint8Array(arrayBuffer);\n        qq.each(byteString, function(idx, character) {\n            intArray[idx] = character.charCodeAt(0);\n        });\n\n        return this._createBlob(arrayBuffer, mimeString);\n    },\n\n    _createBlob: function(data, mime) {\n        \""use strict\"";\n\n        var BlobBuilder = window.BlobBuilder ||\n                window.WebKitBlobBuilder ||\n                window.MozBlobBuilder ||\n                window.MSBlobBuilder,\n            blobBuilder = BlobBuilder && new BlobBuilder();\n\n        if (blobBuilder) {\n            blobBuilder.append(data);\n            return blobBuilder.getBlob(mime);\n        }\n        else {\n            return new Blob([data], {type: mime});\n        }\n    }\n});\n"",""//Based on MinifyJpeg\n//http://elicon.blog57.fc2.com/blog-entry-206.html\n\nqq.ExifRestorer = (function()\n{\n   \n\tvar ExifRestorer = {};\n\t \n    ExifRestorer.KEY_STR = \""ABCDEFGHIJKLMNOP\"" +\n                         \""QRSTUVWXYZabcdef\"" +\n                         \""ghijklmnopqrstuv\"" +\n                         \""wxyz0123456789+/\"" +\n                         \""=\"";\n\n    ExifRestorer.encode64 = function(input)\n    {\n        var output = \""\"",\n            chr1, chr2, chr3 = \""\"",\n            enc1, enc2, enc3, enc4 = \""\"",\n            i = 0;\n\n        do {\n            chr1 = input[i++];\n            chr2 = input[i++];\n            chr3 = input[i++];\n\n            enc1 = chr1 >> 2;\n            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n            enc4 = chr3 & 63;\n\n            if (isNaN(chr2)) {\n               enc3 = enc4 = 64;\n            } else if (isNaN(chr3)) {\n               enc4 = 64;\n            }\n\n            output = output +\n               this.KEY_STR.charAt(enc1) +\n               this.KEY_STR.charAt(enc2) +\n               this.KEY_STR.charAt(enc3) +\n               this.KEY_STR.charAt(enc4);\n            chr1 = chr2 = chr3 = \""\"";\n            enc1 = enc2 = enc3 = enc4 = \""\"";\n        } while (i < input.length);\n\n        return output;\n    };\n    \n    ExifRestorer.restore = function(origFileBase64, resizedFileBase64)\n    {\n        var expectedBase64Header = \""data:image/jpeg;base64,\"";\n\n        if (!origFileBase64.match(expectedBase64Header))\n        {\n        \treturn resizedFileBase64;\n        }       \n        \n        var rawImage = this.decode64(origFileBase64.replace(expectedBase64Header, \""\""));\n        var segments = this.slice2Segments(rawImage);\n                \n        var image = this.exifManipulation(resizedFileBase64, segments);\n        \n        return expectedBase64Header + this.encode64(image);\n        \n    };\n\n\n    ExifRestorer.exifManipulation = function(resizedFileBase64, segments)\n    {\n            var exifArray = this.getExifArray(segments),\n                newImageArray = this.insertExif(resizedFileBase64, exifArray),\n                aBuffer = new Uint8Array(newImageArray);\n\n            return aBuffer;\n    };\n\n\n    ExifRestorer.getExifArray = function(segments)\n    {\n            var seg;\n            for (var x = 0; x < segments.length; x++)\n            {\n                seg = segments[x];\n                if (seg[0] == 255 & seg[1] == 225) //(ff e1)\n                {\n                    return seg;\n                }\n            }\n            return [];\n    };\n\n\n    ExifRestorer.insertExif = function(resizedFileBase64, exifArray)\n    {\n            var imageData = resizedFileBase64.replace(\""data:image/jpeg;base64,\"", \""\""),\n                buf = this.decode64(imageData),\n                separatePoint = buf.indexOf(255,3),\n                mae = buf.slice(0, separatePoint),\n                ato = buf.slice(separatePoint),\n                array = mae;\n\n            array = array.concat(exifArray);\n            array = array.concat(ato);\n           return array;\n    };\n\n\n    \n    ExifRestorer.slice2Segments = function(rawImageArray)\n    {\n        var head = 0,\n            segments = [];\n\n        while (1)\n        {\n            if (rawImageArray[head] == 255 & rawImageArray[head + 1] == 218){break;}\n            if (rawImageArray[head] == 255 & rawImageArray[head + 1] == 216)\n            {\n                head += 2;\n            }\n            else\n            {\n                var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3],\n                    endPoint = head + length + 2,\n                    seg = rawImageArray.slice(head, endPoint);\n                segments.push(seg);\n                head = endPoint;\n            }\n            if (head > rawImageArray.length){break;}\n        }\n\n        return segments;\n    };\n\n\n    \n    ExifRestorer.decode64 = function(input) \n    {\n        var output = \""\"",\n            chr1, chr2, chr3 = \""\"",\n            enc1, enc2, enc3, enc4 = \""\"",\n            i = 0,\n            buf = [];\n\n        // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (base64test.exec(input)) {\n            throw new Error(\""There were invalid base64 characters in the input text.  \"" +\n                \""Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\"");\n        }\n        input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \""\"");\n\n        do {\n            enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n            enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n            enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n            enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n            chr1 = (enc1 << 2) | (enc2 >> 4);\n            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n            chr3 = ((enc3 & 3) << 6) | enc4;\n\n            buf.push(chr1);\n\n            if (enc3 != 64) {\n               buf.push(chr2);\n            }\n            if (enc4 != 64) {\n               buf.push(chr3);\n            }\n\n            chr1 = chr2 = chr3 = \""\"";\n            enc1 = enc2 = enc3 = enc4 = \""\"";\n\n        } while (i < input.length);\n\n        return buf;\n    };\n\n    \n    return ExifRestorer;\n})();\n"",""/* globals qq */\n/**\n * Keeps a running tally of total upload progress for a batch of files.\n *\n * @param callback Invoked when total progress changes, passing calculated total loaded & total size values.\n * @param getSize Function that returns the size of a file given its ID\n * @constructor\n */\nqq.TotalProgress = function(callback, getSize) {\n    \""use strict\"";\n\n    var perFileProgress = {},\n        totalLoaded = 0,\n        totalSize = 0,\n\n        lastLoadedSent = -1,\n        lastTotalSent = -1,\n        callbackProxy = function(loaded, total) {\n            if (loaded !== lastLoadedSent || total !== lastTotalSent) {\n                callback(loaded, total);\n            }\n\n            lastLoadedSent = loaded;\n            lastTotalSent = total;\n        },\n\n        /**\n         * @param failed Array of file IDs that have failed\n         * @param retryable Array of file IDs that are retryable\n         * @returns true if none of the failed files are eligible for retry\n         */\n        noRetryableFiles = function(failed, retryable) {\n            var none = true;\n\n            qq.each(failed, function(idx, failedId) {\n                if (qq.indexOf(retryable, failedId) >= 0) {\n                    none = false;\n                    return false;\n                }\n            });\n\n            return none;\n        },\n\n        onCancel = function(id) {\n            updateTotalProgress(id, -1, -1);\n            delete perFileProgress[id];\n        },\n\n        onAllComplete = function(successful, failed, retryable) {\n            if (failed.length === 0 || noRetryableFiles(failed, retryable)) {\n                callbackProxy(totalSize, totalSize);\n                this.reset();\n            }\n        },\n\n        onNew = function(id) {\n            var size = getSize(id);\n\n            // We might not know the size yet, such as for blob proxies\n            if (size > 0) {\n                updateTotalProgress(id, 0, size);\n                perFileProgress[id] = {loaded: 0, total: size};\n            }\n        },\n\n        /**\n         * Invokes the callback with the current total progress of all files in the batch.  Called whenever it may\n         * be appropriate to re-calculate and disseminate this data.\n         *\n         * @param id ID of a file that has changed in some important way\n         * @param newLoaded New loaded value for this file.  -1 if this value should no longer be part of calculations\n         * @param newTotal New total size of the file.  -1 if this value should no longer be part of calculations\n         */\n        updateTotalProgress = function(id, newLoaded, newTotal) {\n            var oldLoaded = perFileProgress[id] ? perFileProgress[id].loaded : 0,\n                oldTotal = perFileProgress[id] ? perFileProgress[id].total : 0;\n\n            if (newLoaded === -1 && newTotal === -1) {\n                totalLoaded -= oldLoaded;\n                totalSize -= oldTotal;\n            }\n            else {\n                if (newLoaded) {\n                    totalLoaded += newLoaded - oldLoaded;\n                }\n                if (newTotal) {\n                    totalSize += newTotal - oldTotal;\n                }\n            }\n\n            callbackProxy(totalLoaded, totalSize);\n        };\n\n    qq.extend(this, {\n        // Called when a batch of files has completed uploading.\n        onAllComplete: onAllComplete,\n\n        // Called when the status of a file has changed.\n        onStatusChange: function(id, oldStatus, newStatus) {\n            if (newStatus === qq.status.CANCELED || newStatus === qq.status.REJECTED) {\n                onCancel(id);\n            }\n            else if (newStatus === qq.status.SUBMITTING) {\n                onNew(id);\n            }\n        },\n\n        // Called whenever the upload progress of an individual file has changed.\n        onIndividualProgress: function(id, loaded, total) {\n            updateTotalProgress(id, loaded, total);\n            perFileProgress[id] = {loaded: loaded, total: total};\n        },\n\n        // Called whenever the total size of a file has changed, such as when the size of a generated blob is known.\n        onNewSize: function(id) {\n            onNew(id);\n        },\n\n        reset: function() {\n            perFileProgress = {};\n            totalLoaded = 0;\n            totalSize = 0;\n        }\n    });\n};\n"",""/*globals qq*/\nqq.PasteSupport = function(o) {\n    \""use strict\"";\n\n    var options, detachPasteHandler;\n\n    options = {\n        targetElement: null,\n        callbacks: {\n            log: function(message, level) {},\n            pasteReceived: function(blob) {}\n        }\n    };\n\n    function isImage(item) {\n        return item.type &&\n            item.type.indexOf(\""image/\"") === 0;\n    }\n\n    function registerPasteHandler() {\n        detachPasteHandler = qq(options.targetElement).attach(\""paste\"", function(event) {\n            var clipboardData = event.clipboardData;\n\n            if (clipboardData) {\n                qq.each(clipboardData.items, function(idx, item) {\n                    if (isImage(item)) {\n                        var blob = item.getAsFile();\n                        options.callbacks.pasteReceived(blob);\n                    }\n                });\n            }\n        });\n    }\n\n    function unregisterPasteHandler() {\n        if (detachPasteHandler) {\n            detachPasteHandler();\n        }\n    }\n\n    qq.extend(options, o);\n    registerPasteHandler();\n\n    qq.extend(this, {\n        reset: function() {\n            unregisterPasteHandler();\n        }\n    });\n};\n"",""/* globals qq */\n/**\n * Module that handles support for existing forms.\n *\n * @param options Options passed from the integrator-supplied options related to form support.\n * @param startUpload Callback to invoke when files \""stored\"" should be uploaded.\n * @param log Proxy for the logger\n * @constructor\n */\nqq.FormSupport = function(options, startUpload, log) {\n    \""use strict\"";\n    var self  = this,\n        interceptSubmit = options.interceptSubmit,\n        formEl = options.element,\n        autoUpload = options.autoUpload;\n\n    // Available on the public API associated with this module.\n    qq.extend(this, {\n        // To be used by the caller to determine if the endpoint will be determined by some processing\n        // that occurs in this module, such as if the form has an action attribute.\n        // Ignore if `attachToForm === false`.\n        newEndpoint: null,\n\n        // To be used by the caller to determine if auto uploading should be allowed.\n        // Ignore if `attachToForm === false`.\n        newAutoUpload: autoUpload,\n\n        // true if a form was detected and is being tracked by this module\n        attachedToForm: false,\n\n        // Returns an object with names and values for all valid form elements associated with the attached form.\n        getFormInputsAsObject: function() {\n            /* jshint eqnull:true */\n            if (formEl == null) {\n                return null;\n            }\n\n            return self._form2Obj(formEl);\n        }\n    });\n\n    // If the form contains an action attribute, this should be the new upload endpoint.\n    function determineNewEndpoint(formEl) {\n        if (formEl.getAttribute(\""action\"")) {\n            self.newEndpoint = formEl.getAttribute(\""action\"");\n        }\n    }\n\n    // Return true only if the form is valid, or if we cannot make this determination.\n    // If the form is invalid, ensure invalid field(s) are highlighted in the UI.\n    function validateForm(formEl, nativeSubmit) {\n        if (formEl.checkValidity && !formEl.checkValidity()) {\n            log(\""Form did not pass validation checks - will not upload.\"", \""error\"");\n            nativeSubmit();\n        }\n        else {\n            return true;\n        }\n    }\n\n    // Intercept form submit attempts, unless the integrator has told us not to do this.\n    function maybeUploadOnSubmit(formEl) {\n        var nativeSubmit = formEl.submit;\n\n        // Intercept and squelch submit events.\n        qq(formEl).attach(\""submit\"", function(event) {\n            event = event || window.event;\n\n            if (event.preventDefault) {\n                event.preventDefault();\n            }\n            else {\n                event.returnValue = false;\n            }\n\n            validateForm(formEl, nativeSubmit) && startUpload();\n        });\n\n        // The form's `submit()` function may be called instead (i.e. via jQuery.submit()).\n        // Intercept that too.\n        formEl.submit = function() {\n            validateForm(formEl, nativeSubmit) && startUpload();\n        };\n    }\n\n    // If the element value passed from the uploader is a string, assume it is an element ID - select it.\n    // The rest of the code in this module depends on this being an HTMLElement.\n    function determineFormEl(formEl) {\n        if (formEl) {\n            if (qq.isString(formEl)) {\n                formEl = document.getElementById(formEl);\n            }\n\n            if (formEl) {\n                log(\""Attaching to form element.\"");\n                determineNewEndpoint(formEl);\n                interceptSubmit && maybeUploadOnSubmit(formEl);\n            }\n        }\n\n        return formEl;\n    }\n\n    formEl = determineFormEl(formEl);\n    this.attachedToForm = !!formEl;\n};\n\nqq.extend(qq.FormSupport.prototype, {\n    // Converts all relevant form fields to key/value pairs.  This is meant to mimic the data a browser will\n    // construct from a given form when the form is submitted.\n    _form2Obj: function(form) {\n        \""use strict\"";\n        var obj = {},\n            notIrrelevantType = function(type) {\n                var irrelevantTypes = [\n                    \""button\"",\n                    \""image\"",\n                    \""reset\"",\n                    \""submit\""\n                ];\n\n                return qq.indexOf(irrelevantTypes, type.toLowerCase()) < 0;\n            },\n            radioOrCheckbox = function(type) {\n                return qq.indexOf([\""checkbox\"", \""radio\""], type.toLowerCase()) >= 0;\n            },\n            ignoreValue = function(el) {\n                if (radioOrCheckbox(el.type) && !el.checked) {\n                    return true;\n                }\n\n                return el.disabled && el.type.toLowerCase() !== \""hidden\"";\n            },\n            selectValue = function(select) {\n                var value = null;\n\n                qq.each(qq(select).children(), function(idx, child) {\n                    if (child.tagName.toLowerCase() === \""option\"" && child.selected) {\n                        value = child.value;\n                        return false;\n                    }\n                });\n\n                return value;\n            };\n\n        qq.each(form.elements, function(idx, el) {\n            if ((qq.isInput(el, true) || el.tagName.toLowerCase() === \""textarea\"") &&\n                notIrrelevantType(el.type) &&\n                !ignoreValue(el)) {\n\n                obj[el.name] = el.value;\n            }\n            else if (el.tagName.toLowerCase() === \""select\"" && !ignoreValue(el)) {\n                var value = selectValue(el);\n\n                if (value !== null) {\n                    obj[el.name] = value;\n                }\n            }\n        });\n\n        return obj;\n    }\n});\n"",""/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n/**\n * CryptoJS core components.\n */\nqq.CryptoJS = (function (Math, undefined) {\n    /**\n     * CryptoJS namespace.\n     */\n    var C = {};\n\n    /**\n     * Library namespace.\n     */\n    var C_lib = C.lib = {};\n\n    /**\n     * Base object for prototypal inheritance.\n     */\n    var Base = C_lib.Base = (function () {\n        function F() {}\n\n        return {\n            /**\n             * Creates a new object that inherits from this object.\n             *\n             * @param {Object} overrides Properties to copy into the new object.\n             *\n             * @return {Object} The new object.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var MyType = CryptoJS.lib.Base.extend({\n             *         field: 'value',\n             *\n             *         method: function () {\n             *         }\n             *     });\n             */\n            extend: function (overrides) {\n                // Spawn\n                F.prototype = this;\n                var subtype = new F();\n\n                // Augment\n                if (overrides) {\n                    subtype.mixIn(overrides);\n                }\n\n                // Create default initializer\n                if (!subtype.hasOwnProperty('init')) {\n                    subtype.init = function () {\n                        subtype.$super.init.apply(this, arguments);\n                    };\n                }\n\n                // Initializer's prototype is the subtype object\n                subtype.init.prototype = subtype;\n\n                // Reference supertype\n                subtype.$super = this;\n\n                return subtype;\n            },\n\n            /**\n             * Extends this object and runs the init method.\n             * Arguments to create() will be passed to init().\n             *\n             * @return {Object} The new object.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var instance = MyType.create();\n             */\n            create: function () {\n                var instance = this.extend();\n                instance.init.apply(instance, arguments);\n\n                return instance;\n            },\n\n            /**\n             * Initializes a newly created object.\n             * Override this method to add some logic when your objects are created.\n             *\n             * @example\n             *\n             *     var MyType = CryptoJS.lib.Base.extend({\n             *         init: function () {\n             *             // ...\n             *         }\n             *     });\n             */\n            init: function () {\n            },\n\n            /**\n             * Copies properties into this object.\n             *\n             * @param {Object} properties The properties to mix in.\n             *\n             * @example\n             *\n             *     MyType.mixIn({\n             *         field: 'value'\n             *     });\n             */\n            mixIn: function (properties) {\n                for (var propertyName in properties) {\n                    if (properties.hasOwnProperty(propertyName)) {\n                        this[propertyName] = properties[propertyName];\n                    }\n                }\n\n                // IE won't copy toString using the loop above\n                if (properties.hasOwnProperty('toString')) {\n                    this.toString = properties.toString;\n                }\n            },\n\n            /**\n             * Creates a copy of this object.\n             *\n             * @return {Object} The clone.\n             *\n             * @example\n             *\n             *     var clone = instance.clone();\n             */\n            clone: function () {\n                return this.init.prototype.extend(this);\n            }\n        };\n    }());\n\n    /**\n     * An array of 32-bit words.\n     *\n     * @property {Array} words The array of 32-bit words.\n     * @property {number} sigBytes The number of significant bytes in this word array.\n     */\n    var WordArray = C_lib.WordArray = Base.extend({\n        /**\n         * Initializes a newly created word array.\n         *\n         * @param {Array} words (Optional) An array of 32-bit words.\n         * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n         *\n         * @example\n         *\n         *     var wordArray = CryptoJS.lib.WordArray.create();\n         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n         */\n        init: function (words, sigBytes) {\n            words = this.words = words || [];\n\n            if (sigBytes != undefined) {\n                this.sigBytes = sigBytes;\n            } else {\n                this.sigBytes = words.length * 4;\n            }\n        },\n\n        /**\n         * Converts this word array to a string.\n         *\n         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n         *\n         * @return {string} The stringified word array.\n         *\n         * @example\n         *\n         *     var string = wordArray + '';\n         *     var string = wordArray.toString();\n         *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n         */\n        toString: function (encoder) {\n            return (encoder || Hex).stringify(this);\n        },\n\n        /**\n         * Concatenates a word array to this word array.\n         *\n         * @param {WordArray} wordArray The word array to append.\n         *\n         * @return {WordArray} This word array.\n         *\n         * @example\n         *\n         *     wordArray1.concat(wordArray2);\n         */\n        concat: function (wordArray) {\n            // Shortcuts\n            var thisWords = this.words;\n            var thatWords = wordArray.words;\n            var thisSigBytes = this.sigBytes;\n            var thatSigBytes = wordArray.sigBytes;\n\n            // Clamp excess bits\n            this.clamp();\n\n            // Concat\n            if (thisSigBytes % 4) {\n                // Copy one byte at a time\n                for (var i = 0; i < thatSigBytes; i++) {\n                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n                }\n            } else if (thatWords.length > 0xffff) {\n                // Copy one word at a time\n                for (var i = 0; i < thatSigBytes; i += 4) {\n                    thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n                }\n            } else {\n                // Copy all words at once\n                thisWords.push.apply(thisWords, thatWords);\n            }\n            this.sigBytes += thatSigBytes;\n\n            // Chainable\n            return this;\n        },\n\n        /**\n         * Removes insignificant bits.\n         *\n         * @example\n         *\n         *     wordArray.clamp();\n         */\n        clamp: function () {\n            // Shortcuts\n            var words = this.words;\n            var sigBytes = this.sigBytes;\n\n            // Clamp\n            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n            words.length = Math.ceil(sigBytes / 4);\n        },\n\n        /**\n         * Creates a copy of this word array.\n         *\n         * @return {WordArray} The clone.\n         *\n         * @example\n         *\n         *     var clone = wordArray.clone();\n         */\n        clone: function () {\n            var clone = Base.clone.call(this);\n            clone.words = this.words.slice(0);\n\n            return clone;\n        },\n\n        /**\n         * Creates a word array filled with random bytes.\n         *\n         * @param {number} nBytes The number of random bytes to generate.\n         *\n         * @return {WordArray} The random word array.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var wordArray = CryptoJS.lib.WordArray.random(16);\n         */\n        random: function (nBytes) {\n            var words = [];\n            for (var i = 0; i < nBytes; i += 4) {\n                words.push((Math.random() * 0x100000000) | 0);\n            }\n\n            return new WordArray.init(words, nBytes);\n        }\n    });\n\n    /**\n     * Encoder namespace.\n     */\n    var C_enc = C.enc = {};\n\n    /**\n     * Hex encoding strategy.\n     */\n    var Hex = C_enc.Hex = {\n        /**\n         * Converts a word array to a hex string.\n         *\n         * @param {WordArray} wordArray The word array.\n         *\n         * @return {string} The hex string.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n         */\n        stringify: function (wordArray) {\n            // Shortcuts\n            var words = wordArray.words;\n            var sigBytes = wordArray.sigBytes;\n\n            // Convert\n            var hexChars = [];\n            for (var i = 0; i < sigBytes; i++) {\n                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n                hexChars.push((bite >>> 4).toString(16));\n                hexChars.push((bite & 0x0f).toString(16));\n            }\n\n            return hexChars.join('');\n        },\n\n        /**\n         * Converts a hex string to a word array.\n         *\n         * @param {string} hexStr The hex string.\n         *\n         * @return {WordArray} The word array.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n         */\n        parse: function (hexStr) {\n            // Shortcut\n            var hexStrLength = hexStr.length;\n\n            // Convert\n            var words = [];\n            for (var i = 0; i < hexStrLength; i += 2) {\n                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n            }\n\n            return new WordArray.init(words, hexStrLength / 2);\n        }\n    };\n\n    /**\n     * Latin1 encoding strategy.\n     */\n    var Latin1 = C_enc.Latin1 = {\n        /**\n         * Converts a word array to a Latin1 string.\n         *\n         * @param {WordArray} wordArray The word array.\n         *\n         * @return {string} The Latin1 string.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n         */\n        stringify: function (wordArray) {\n            // Shortcuts\n            var words = wordArray.words;\n            var sigBytes = wordArray.sigBytes;\n\n            // Convert\n            var latin1Chars = [];\n            for (var i = 0; i < sigBytes; i++) {\n                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n                latin1Chars.push(String.fromCharCode(bite));\n            }\n\n            return latin1Chars.join('');\n        },\n\n        /**\n         * Converts a Latin1 string to a word array.\n         *\n         * @param {string} latin1Str The Latin1 string.\n         *\n         * @return {WordArray} The word array.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n         */\n        parse: function (latin1Str) {\n            // Shortcut\n            var latin1StrLength = latin1Str.length;\n\n            // Convert\n            var words = [];\n            for (var i = 0; i < latin1StrLength; i++) {\n                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n            }\n\n            return new WordArray.init(words, latin1StrLength);\n        }\n    };\n\n    /**\n     * UTF-8 encoding strategy.\n     */\n    var Utf8 = C_enc.Utf8 = {\n        /**\n         * Converts a word array to a UTF-8 string.\n         *\n         * @param {WordArray} wordArray The word array.\n         *\n         * @return {string} The UTF-8 string.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n         */\n        stringify: function (wordArray) {\n            try {\n                return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n            } catch (e) {\n                throw new Error('Malformed UTF-8 data');\n            }\n        },\n\n        /**\n         * Converts a UTF-8 string to a word array.\n         *\n         * @param {string} utf8Str The UTF-8 string.\n         *\n         * @return {WordArray} The word array.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n         */\n        parse: function (utf8Str) {\n            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n        }\n    };\n\n    /**\n     * Abstract buffered block algorithm template.\n     *\n     * The property blockSize must be implemented in a concrete subtype.\n     *\n     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n     */\n    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n        /**\n         * Resets this block algorithm's data buffer to its initial state.\n         *\n         * @example\n         *\n         *     bufferedBlockAlgorithm.reset();\n         */\n        reset: function () {\n            // Initial values\n            this._data = new WordArray.init();\n            this._nDataBytes = 0;\n        },\n\n        /**\n         * Adds new data to this block algorithm's buffer.\n         *\n         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n         *\n         * @example\n         *\n         *     bufferedBlockAlgorithm._append('data');\n         *     bufferedBlockAlgorithm._append(wordArray);\n         */\n        _append: function (data) {\n            // Convert string to WordArray, else assume WordArray already\n            if (typeof data == 'string') {\n                data = Utf8.parse(data);\n            }\n\n            // Append\n            this._data.concat(data);\n            this._nDataBytes += data.sigBytes;\n        },\n\n        /**\n         * Processes available data blocks.\n         *\n         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n         *\n         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n         *\n         * @return {WordArray} The processed data.\n         *\n         * @example\n         *\n         *     var processedData = bufferedBlockAlgorithm._process();\n         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n         */\n        _process: function (doFlush) {\n            // Shortcuts\n            var data = this._data;\n            var dataWords = data.words;\n            var dataSigBytes = data.sigBytes;\n            var blockSize = this.blockSize;\n            var blockSizeBytes = blockSize * 4;\n\n            // Count blocks ready\n            var nBlocksReady = dataSigBytes / blockSizeBytes;\n            if (doFlush) {\n                // Round up to include partial blocks\n                nBlocksReady = Math.ceil(nBlocksReady);\n            } else {\n                // Round down to include only full blocks,\n                // less the number of blocks that must remain in the buffer\n                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n            }\n\n            // Count words ready\n            var nWordsReady = nBlocksReady * blockSize;\n\n            // Count bytes ready\n            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n            // Process blocks\n            if (nWordsReady) {\n                for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n                    // Perform concrete-algorithm logic\n                    this._doProcessBlock(dataWords, offset);\n                }\n\n                // Remove processed words\n                var processedWords = dataWords.splice(0, nWordsReady);\n                data.sigBytes -= nBytesReady;\n            }\n\n            // Return processed words\n            return new WordArray.init(processedWords, nBytesReady);\n        },\n\n        /**\n         * Creates a copy of this object.\n         *\n         * @return {Object} The clone.\n         *\n         * @example\n         *\n         *     var clone = bufferedBlockAlgorithm.clone();\n         */\n        clone: function () {\n            var clone = Base.clone.call(this);\n            clone._data = this._data.clone();\n\n            return clone;\n        },\n\n        _minBufferSize: 0\n    });\n\n    /**\n     * Abstract hasher template.\n     *\n     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n     */\n    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n        /**\n         * Configuration options.\n         */\n        cfg: Base.extend(),\n\n        /**\n         * Initializes a newly created hasher.\n         *\n         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n         *\n         * @example\n         *\n         *     var hasher = CryptoJS.algo.SHA256.create();\n         */\n        init: function (cfg) {\n            // Apply config defaults\n            this.cfg = this.cfg.extend(cfg);\n\n            // Set initial values\n            this.reset();\n        },\n\n        /**\n         * Resets this hasher to its initial state.\n         *\n         * @example\n         *\n         *     hasher.reset();\n         */\n        reset: function () {\n            // Reset data buffer\n            BufferedBlockAlgorithm.reset.call(this);\n\n            // Perform concrete-hasher logic\n            this._doReset();\n        },\n\n        /**\n         * Updates this hasher with a message.\n         *\n         * @param {WordArray|string} messageUpdate The message to append.\n         *\n         * @return {Hasher} This hasher.\n         *\n         * @example\n         *\n         *     hasher.update('message');\n         *     hasher.update(wordArray);\n         */\n        update: function (messageUpdate) {\n            // Append\n            this._append(messageUpdate);\n\n            // Update the hash\n            this._process();\n\n            // Chainable\n            return this;\n        },\n\n        /**\n         * Finalizes the hash computation.\n         * Note that the finalize operation is effectively a destructive, read-once operation.\n         *\n         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @example\n         *\n         *     var hash = hasher.finalize();\n         *     var hash = hasher.finalize('message');\n         *     var hash = hasher.finalize(wordArray);\n         */\n        finalize: function (messageUpdate) {\n            // Final message update\n            if (messageUpdate) {\n                this._append(messageUpdate);\n            }\n\n            // Perform concrete-hasher logic\n            var hash = this._doFinalize();\n\n            return hash;\n        },\n\n        blockSize: 512/32,\n\n        /**\n         * Creates a shortcut function to a hasher's object interface.\n         *\n         * @param {Hasher} hasher The hasher to create a helper for.\n         *\n         * @return {Function} The shortcut function.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n         */\n        _createHelper: function (hasher) {\n            return function (message, cfg) {\n                return new hasher.init(cfg).finalize(message);\n            };\n        },\n\n        /**\n         * Creates a shortcut function to the HMAC's object interface.\n         *\n         * @param {Hasher} hasher The hasher to use in this HMAC helper.\n         *\n         * @return {Function} The shortcut function.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n         */\n        _createHmacHelper: function (hasher) {\n            return function (message, key) {\n                return new C_algo.HMAC.init(hasher, key).finalize(message);\n            };\n        }\n    });\n\n    /**\n     * Algorithm namespace.\n     */\n    var C_algo = C.algo = {};\n\n    return C;\n}(Math));\n"",""/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n    // Shortcuts\n    var C = qq.CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_enc = C.enc;\n\n    /**\n     * Base64 encoding strategy.\n     */\n    var Base64 = C_enc.Base64 = {\n        /**\n         * Converts a word array to a Base64 string.\n         *\n         * @param {WordArray} wordArray The word array.\n         *\n         * @return {string} The Base64 string.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n         */\n        stringify: function (wordArray) {\n            // Shortcuts\n            var words = wordArray.words;\n            var sigBytes = wordArray.sigBytes;\n            var map = this._map;\n\n            // Clamp excess bits\n            wordArray.clamp();\n\n            // Convert\n            var base64Chars = [];\n            for (var i = 0; i < sigBytes; i += 3) {\n                var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff;\n                var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n                var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n                var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n                for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n                    base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n                }\n            }\n\n            // Add padding\n            var paddingChar = map.charAt(64);\n            if (paddingChar) {\n                while (base64Chars.length % 4) {\n                    base64Chars.push(paddingChar);\n                }\n            }\n\n            return base64Chars.join('');\n        },\n\n        /**\n         * Converts a Base64 string to a word array.\n         *\n         * @param {string} base64Str The Base64 string.\n         *\n         * @return {WordArray} The word array.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var wordArray = CryptoJS.enc.Base64.parse(base64String);\n         */\n        parse: function (base64Str) {\n            // Shortcuts\n            var base64StrLength = base64Str.length;\n            var map = this._map;\n\n            // Ignore padding\n            var paddingChar = map.charAt(64);\n            if (paddingChar) {\n                var paddingIndex = base64Str.indexOf(paddingChar);\n                if (paddingIndex != -1) {\n                    base64StrLength = paddingIndex;\n                }\n            }\n\n            // Convert\n            var words = [];\n            var nBytes = 0;\n            for (var i = 0; i < base64StrLength; i++) {\n                if (i % 4) {\n                    var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);\n                    var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);\n                    words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n                    nBytes++;\n                }\n            }\n\n            return WordArray.create(words, nBytes);\n        },\n\n        _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n    };\n}());\n"",""/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n    // Shortcuts\n    var C = qq.CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var C_enc = C.enc;\n    var Utf8 = C_enc.Utf8;\n    var C_algo = C.algo;\n\n    /**\n     * HMAC algorithm.\n     */\n    var HMAC = C_algo.HMAC = Base.extend({\n        /**\n         * Initializes a newly created HMAC.\n         *\n         * @param {Hasher} hasher The hash algorithm to use.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @example\n         *\n         *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n         */\n        init: function (hasher, key) {\n            // Init hasher\n            hasher = this._hasher = new hasher.init();\n\n            // Convert string to WordArray, else assume WordArray already\n            if (typeof key == 'string') {\n                key = Utf8.parse(key);\n            }\n\n            // Shortcuts\n            var hasherBlockSize = hasher.blockSize;\n            var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n            // Allow arbitrary length keys\n            if (key.sigBytes > hasherBlockSizeBytes) {\n                key = hasher.finalize(key);\n            }\n\n            // Clamp excess bits\n            key.clamp();\n\n            // Clone key for inner and outer pads\n            var oKey = this._oKey = key.clone();\n            var iKey = this._iKey = key.clone();\n\n            // Shortcuts\n            var oKeyWords = oKey.words;\n            var iKeyWords = iKey.words;\n\n            // XOR keys with pad constants\n            for (var i = 0; i < hasherBlockSize; i++) {\n                oKeyWords[i] ^= 0x5c5c5c5c;\n                iKeyWords[i] ^= 0x36363636;\n            }\n            oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n            // Set initial values\n            this.reset();\n        },\n\n        /**\n         * Resets this HMAC to its initial state.\n         *\n         * @example\n         *\n         *     hmacHasher.reset();\n         */\n        reset: function () {\n            // Shortcut\n            var hasher = this._hasher;\n\n            // Reset\n            hasher.reset();\n            hasher.update(this._iKey);\n        },\n\n        /**\n         * Updates this HMAC with a message.\n         *\n         * @param {WordArray|string} messageUpdate The message to append.\n         *\n         * @return {HMAC} This HMAC instance.\n         *\n         * @example\n         *\n         *     hmacHasher.update('message');\n         *     hmacHasher.update(wordArray);\n         */\n        update: function (messageUpdate) {\n            this._hasher.update(messageUpdate);\n\n            // Chainable\n            return this;\n        },\n\n        /**\n         * Finalizes the HMAC computation.\n         * Note that the finalize operation is effectively a destructive, read-once operation.\n         *\n         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @example\n         *\n         *     var hmac = hmacHasher.finalize();\n         *     var hmac = hmacHasher.finalize('message');\n         *     var hmac = hmacHasher.finalize(wordArray);\n         */\n        finalize: function (messageUpdate) {\n            // Shortcut\n            var hasher = this._hasher;\n\n            // Compute HMAC\n            var innerHash = hasher.finalize(messageUpdate);\n            hasher.reset();\n            var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n            return hmac;\n        }\n    });\n}());\n"",""/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n    // Shortcuts\n    var C = qq.CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Reusable object\n    var W = [];\n\n    /**\n     * SHA-1 hash algorithm.\n     */\n    var SHA1 = C_algo.SHA1 = Hasher.extend({\n        _doReset: function () {\n            this._hash = new WordArray.init([\n                0x67452301, 0xefcdab89,\n                0x98badcfe, 0x10325476,\n                0xc3d2e1f0\n            ]);\n        },\n\n        _doProcessBlock: function (M, offset) {\n            // Shortcut\n            var H = this._hash.words;\n\n            // Working variables\n            var a = H[0];\n            var b = H[1];\n            var c = H[2];\n            var d = H[3];\n            var e = H[4];\n\n            // Computation\n            for (var i = 0; i < 80; i++) {\n                if (i < 16) {\n                    W[i] = M[offset + i] | 0;\n                } else {\n                    var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n                    W[i] = (n << 1) | (n >>> 31);\n                }\n\n                var t = ((a << 5) | (a >>> 27)) + e + W[i];\n                if (i < 20) {\n                    t += ((b & c) | (~b & d)) + 0x5a827999;\n                } else if (i < 40) {\n                    t += (b ^ c ^ d) + 0x6ed9eba1;\n                } else if (i < 60) {\n                    t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n                } else /* if (i < 80) */ {\n                    t += (b ^ c ^ d) - 0x359d3e2a;\n                }\n\n                e = d;\n                d = c;\n                c = (b << 30) | (b >>> 2);\n                b = a;\n                a = t;\n            }\n\n            // Intermediate hash value\n            H[0] = (H[0] + a) | 0;\n            H[1] = (H[1] + b) | 0;\n            H[2] = (H[2] + c) | 0;\n            H[3] = (H[3] + d) | 0;\n            H[4] = (H[4] + e) | 0;\n        },\n\n        _doFinalize: function () {\n            // Shortcuts\n            var data = this._data;\n            var dataWords = data.words;\n\n            var nBitsTotal = this._nDataBytes * 8;\n            var nBitsLeft = data.sigBytes * 8;\n\n            // Add padding\n            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n            data.sigBytes = dataWords.length * 4;\n\n            // Hash final blocks\n            this._process();\n\n            // Return final computed hash\n            return this._hash;\n        },\n\n        clone: function () {\n            var clone = Hasher.clone.call(this);\n            clone._hash = this._hash.clone();\n\n            return clone;\n        }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA1('message');\n     *     var hash = CryptoJS.SHA1(wordArray);\n     */\n    C.SHA1 = Hasher._createHelper(SHA1);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA1(message, key);\n     */\n    C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n}());\n"",""/*\r\nCryptoJS v3.1.2\r\ncode.google.com/p/crypto-js\r\n(c) 2009-2013 by Jeff Mott. All rights reserved.\r\ncode.google.com/p/crypto-js/wiki/License\r\n*/\r\n(function (Math) {\r\n    // Shortcuts\r\n    var C = qq.CryptoJS;\r\n    var C_lib = C.lib;\r\n    var WordArray = C_lib.WordArray;\r\n    var Hasher = C_lib.Hasher;\r\n    var C_algo = C.algo;\r\n\r\n    // Initialization and round constants tables\r\n    var H = [];\r\n    var K = [];\r\n\r\n    // Compute constants\r\n    (function () {\r\n        function isPrime(n) {\r\n            var sqrtN = Math.sqrt(n);\r\n            for (var factor = 2; factor <= sqrtN; factor++) {\r\n                if (!(n % factor)) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        function getFractionalBits(n) {\r\n            return ((n - (n | 0)) * 0x100000000) | 0;\r\n        }\r\n\r\n        var n = 2;\r\n        var nPrime = 0;\r\n        while (nPrime < 64) {\r\n            if (isPrime(n)) {\r\n                if (nPrime < 8) {\r\n                    H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\r\n                }\r\n                K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\r\n\r\n                nPrime++;\r\n            }\r\n\r\n            n++;\r\n        }\r\n    }());\r\n\r\n    // Reusable object\r\n    var W = [];\r\n\r\n    /**\r\n     * SHA-256 hash algorithm.\r\n     */\r\n    var SHA256 = C_algo.SHA256 = Hasher.extend({\r\n        _doReset: function () {\r\n            this._hash = new WordArray.init(H.slice(0));\r\n        },\r\n\r\n        _doProcessBlock: function (M, offset) {\r\n            // Shortcut\r\n            var H = this._hash.words;\r\n\r\n            // Working variables\r\n            var a = H[0];\r\n            var b = H[1];\r\n            var c = H[2];\r\n            var d = H[3];\r\n            var e = H[4];\r\n            var f = H[5];\r\n            var g = H[6];\r\n            var h = H[7];\r\n\r\n            // Computation\r\n            for (var i = 0; i < 64; i++) {\r\n                if (i < 16) {\r\n                    W[i] = M[offset + i] | 0;\r\n                } else {\r\n                    var gamma0x = W[i - 15];\r\n                    var gamma0  = ((gamma0x << 25) | (gamma0x >>> 7))  ^\r\n                                  ((gamma0x << 14) | (gamma0x >>> 18)) ^\r\n                                   (gamma0x >>> 3);\r\n\r\n                    var gamma1x = W[i - 2];\r\n                    var gamma1  = ((gamma1x << 15) | (gamma1x >>> 17)) ^\r\n                                  ((gamma1x << 13) | (gamma1x >>> 19)) ^\r\n                                   (gamma1x >>> 10);\r\n\r\n                    W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\r\n                }\r\n\r\n                var ch  = (e & f) ^ (~e & g);\r\n                var maj = (a & b) ^ (a & c) ^ (b & c);\r\n\r\n                var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\r\n                var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7)  | (e >>> 25));\r\n\r\n                var t1 = h + sigma1 + ch + K[i] + W[i];\r\n                var t2 = sigma0 + maj;\r\n\r\n                h = g;\r\n                g = f;\r\n                f = e;\r\n                e = (d + t1) | 0;\r\n                d = c;\r\n                c = b;\r\n                b = a;\r\n                a = (t1 + t2) | 0;\r\n            }\r\n\r\n            // Intermediate hash value\r\n            H[0] = (H[0] + a) | 0;\r\n            H[1] = (H[1] + b) | 0;\r\n            H[2] = (H[2] + c) | 0;\r\n            H[3] = (H[3] + d) | 0;\r\n            H[4] = (H[4] + e) | 0;\r\n            H[5] = (H[5] + f) | 0;\r\n            H[6] = (H[6] + g) | 0;\r\n            H[7] = (H[7] + h) | 0;\r\n        },\r\n\r\n        _doFinalize: function () {\r\n            // Shortcuts\r\n            var data = this._data;\r\n            var dataWords = data.words;\r\n\r\n            var nBitsTotal = this._nDataBytes * 8;\r\n            var nBitsLeft = data.sigBytes * 8;\r\n\r\n            // Add padding\r\n            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\r\n            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\r\n            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\r\n            data.sigBytes = dataWords.length * 4;\r\n\r\n            // Hash final blocks\r\n            this._process();\r\n\r\n            // Return final computed hash\r\n            return this._hash;\r\n        },\r\n\r\n        clone: function () {\r\n            var clone = Hasher.clone.call(this);\r\n            clone._hash = this._hash.clone();\r\n\r\n            return clone;\r\n        }\r\n    });\r\n\r\n    /**\r\n     * Shortcut function to the hasher's object interface.\r\n     *\r\n     * @param {WordArray|string} message The message to hash.\r\n     *\r\n     * @return {WordArray} The hash.\r\n     *\r\n     * @static\r\n     *\r\n     * @example\r\n     *\r\n     *     var hash = CryptoJS.SHA256('message');\r\n     *     var hash = CryptoJS.SHA256(wordArray);\r\n     */\r\n    C.SHA256 = Hasher._createHelper(SHA256);\r\n\r\n    /**\r\n     * Shortcut function to the HMAC's object interface.\r\n     *\r\n     * @param {WordArray|string} message The message to hash.\r\n     * @param {WordArray|string} key The secret key.\r\n     *\r\n     * @return {WordArray} The HMAC.\r\n     *\r\n     * @static\r\n     *\r\n     * @example\r\n     *\r\n     *     var hmac = CryptoJS.HmacSHA256(message, key);\r\n     */\r\n    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\r\n}(Math));\r\n"",""/*\r\nCryptoJS v3.1.2\r\ncode.google.com/p/crypto-js\r\n(c) 2009-2013 by Jeff Mott. All rights reserved.\r\ncode.google.com/p/crypto-js/wiki/License\r\n*/\r\n(function () {\r\n    // Check if typed arrays are supported\r\n    if (typeof ArrayBuffer != 'function') {\r\n        return;\r\n    }\r\n\r\n    // Shortcuts\r\n    var C = qq.CryptoJS;\r\n    var C_lib = C.lib;\r\n    var WordArray = C_lib.WordArray;\r\n\r\n    // Reference original init\r\n    var superInit = WordArray.init;\r\n\r\n    // Augment WordArray.init to handle typed arrays\r\n    var subInit = WordArray.init = function (typedArray) {\r\n        // Convert buffers to uint8\r\n        if (typedArray instanceof ArrayBuffer) {\r\n            typedArray = new Uint8Array(typedArray);\r\n        }\r\n\r\n        // Convert other array views to uint8\r\n        if (\r\n            typedArray instanceof Int8Array ||\r\n            typedArray instanceof Uint8ClampedArray ||\r\n            typedArray instanceof Int16Array ||\r\n            typedArray instanceof Uint16Array ||\r\n            typedArray instanceof Int32Array ||\r\n            typedArray instanceof Uint32Array ||\r\n            typedArray instanceof Float32Array ||\r\n            typedArray instanceof Float64Array\r\n        ) {\r\n            typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\r\n        }\r\n\r\n        // Handle Uint8Array\r\n        if (typedArray instanceof Uint8Array) {\r\n            // Shortcut\r\n            var typedArrayByteLength = typedArray.byteLength;\r\n\r\n            // Extract bytes\r\n            var words = [];\r\n            for (var i = 0; i < typedArrayByteLength; i++) {\r\n                words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\r\n            }\r\n\r\n            // Initialize this word array\r\n            superInit.call(this, words, typedArrayByteLength);\r\n        } else {\r\n            // Else call normal init\r\n            superInit.apply(this, arguments);\r\n        }\r\n    };\r\n\r\n    subInit.prototype = WordArray;\r\n}());\r\n"",""/*globals qq */\nqq.s3 = qq.s3 || {};\n\nqq.s3.util = qq.s3.util || (function() {\n    \""use strict\"";\n\n    return {\n        ALGORITHM_PARAM_NAME: \""x-amz-algorithm\"",\n\n        AWS_PARAM_PREFIX: \""x-amz-meta-\"",\n\n        CREDENTIAL_PARAM_NAME: \""x-amz-credential\"",\n\n        DATE_PARAM_NAME: \""x-amz-date\"",\n\n        REDUCED_REDUNDANCY_PARAM_NAME: \""x-amz-storage-class\"",\n        REDUCED_REDUNDANCY_PARAM_VALUE: \""REDUCED_REDUNDANCY\"",\n\n        SERVER_SIDE_ENCRYPTION_PARAM_NAME: \""x-amz-server-side-encryption\"",\n        SERVER_SIDE_ENCRYPTION_PARAM_VALUE: \""AES256\"",\n\n        SESSION_TOKEN_PARAM_NAME: \""x-amz-security-token\"",\n\n        V4_ALGORITHM_PARAM_VALUE: \""AWS4-HMAC-SHA256\"",\n\n        V4_SIGNATURE_PARAM_NAME: \""x-amz-signature\"",\n\n        CASE_SENSITIVE_PARAM_NAMES: [\n            \""Cache-Control\"",\n            \""Content-Disposition\"",\n            \""Content-Encoding\"",\n            \""Content-MD5\""\n        ],\n\n        UNSIGNABLE_REST_HEADER_NAMES: [\n            \""Cache-Control\"",\n            \""Content-Disposition\"",\n            \""Content-Encoding\"",\n            \""Content-MD5\""\n        ],\n\n        UNPREFIXED_PARAM_NAMES: [\n            \""Cache-Control\"",\n            \""Content-Disposition\"",\n            \""Content-Encoding\"",\n            \""Content-MD5\"",\n            \""x-amz-server-side-encryption-customer-algorithm\"",\n            \""x-amz-server-side-encryption-customer-key\"",\n            \""x-amz-server-side-encryption-customer-key-MD5\""\n        ],\n\n        /**\n         * This allows for the region to be specified in the bucket's endpoint URL, or not.\n         *\n         * Examples of some valid endpoints are:\n         *     http://foo.s3.amazonaws.com\n         *     https://foo.s3.amazonaws.com\n         *     http://foo.s3-ap-northeast-1.amazonaws.com\n         *     foo.s3.amazonaws.com\n         *     http://foo.bar.com\n         *     http://s3.amazonaws.com/foo.bar.com\n         * ...etc\n         *\n         * @param endpoint The bucket's URL.\n         * @returns {String || undefined} The bucket name, or undefined if the URL cannot be parsed.\n         */\n        getBucket: function(endpoint) {\n            var patterns = [\n                    //bucket in domain\n                    /^(?:https?:\\/\\/)?([a-z0-9.\\-_]+)\\.s3(?:-[a-z0-9\\-]+)?\\.amazonaws\\.com/i,\n                    //bucket in path\n                    /^(?:https?:\\/\\/)?s3(?:-[a-z0-9\\-]+)?\\.amazonaws\\.com\\/([a-z0-9.\\-_]+)/i,\n                    //custom domain\n                    /^(?:https?:\\/\\/)?([a-z0-9.\\-_]+)/i\n                ],\n                bucket;\n\n            qq.each(patterns, function(idx, pattern) {\n                var match = pattern.exec(endpoint);\n\n                if (match) {\n                    bucket = match[1];\n                    return false;\n                }\n            });\n\n            return bucket;\n        },\n\n        /** Create Prefixed request headers which are appropriate for S3.\n         *\n         * If the request header is appropriate for S3 (e.g. Cache-Control) then pass\n         * it along without a metadata prefix. For all other request header parameter names,\n         * apply qq.s3.util.AWS_PARAM_PREFIX before the name.\n         * See: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html\n         */\n        _getPrefixedParamName: function(name) {\n            if (qq.indexOf(qq.s3.util.UNPREFIXED_PARAM_NAMES, name) >= 0) {\n                return name;\n            }\n            return qq.s3.util.AWS_PARAM_PREFIX + name;\n        },\n\n        /**\n         * Create a policy document to be signed and sent along with the S3 upload request.\n         *\n         * @param spec Object with properties use to construct the policy document.\n         * @returns {Object} Policy doc.\n         */\n        getPolicy: function(spec) {\n            var policy = {},\n                conditions = [],\n                bucket = spec.bucket,\n                date = spec.date,\n                drift = spec.clockDrift,\n                key = spec.key,\n                accessKey = spec.accessKey,\n                acl = spec.acl,\n                type = spec.type,\n                expectedStatus = spec.expectedStatus,\n                sessionToken = spec.sessionToken,\n                params = spec.params,\n                successRedirectUrl = qq.s3.util.getSuccessRedirectAbsoluteUrl(spec.successRedirectUrl),\n                minFileSize = spec.minFileSize,\n                maxFileSize = spec.maxFileSize,\n                reducedRedundancy = spec.reducedRedundancy,\n                region = spec.region,\n                serverSideEncryption = spec.serverSideEncryption,\n                signatureVersion = spec.signatureVersion;\n\n            policy.expiration = qq.s3.util.getPolicyExpirationDate(date, drift);\n\n            conditions.push({acl: acl});\n            conditions.push({bucket: bucket});\n\n            if (type) {\n                conditions.push({\""Content-Type\"": type});\n            }\n\n            // jscs:disable requireCamelCaseOrUpperCaseIdentifiers\n            if (expectedStatus) {\n                conditions.push({success_action_status: expectedStatus.toString()});\n            }\n\n            if (successRedirectUrl) {\n                conditions.push({success_action_redirect: successRedirectUrl});\n            }\n            // jscs:enable\n            if (reducedRedundancy) {\n                conditions.push({});\n                conditions[conditions.length - 1][qq.s3.util.REDUCED_REDUNDANCY_PARAM_NAME] = qq.s3.util.REDUCED_REDUNDANCY_PARAM_VALUE;\n            }\n\n            if (sessionToken) {\n                conditions.push({});\n                conditions[conditions.length - 1][qq.s3.util.SESSION_TOKEN_PARAM_NAME] = sessionToken;\n            }\n\n            if (serverSideEncryption) {\n                conditions.push({});\n                conditions[conditions.length - 1][qq.s3.util.SERVER_SIDE_ENCRYPTION_PARAM_NAME] = qq.s3.util.SERVER_SIDE_ENCRYPTION_PARAM_VALUE;\n            }\n\n            if (signatureVersion === 2) {\n                conditions.push({key: key});\n            }\n            else if (signatureVersion === 4) {\n                conditions.push({});\n                conditions[conditions.length - 1][qq.s3.util.ALGORITHM_PARAM_NAME] = qq.s3.util.V4_ALGORITHM_PARAM_VALUE;\n\n                conditions.push({});\n                conditions[conditions.length - 1].key = key;\n\n                conditions.push({});\n                conditions[conditions.length - 1][qq.s3.util.CREDENTIAL_PARAM_NAME] =\n                    qq.s3.util.getV4CredentialsString({date: date, key: accessKey, region: region});\n\n                conditions.push({});\n                conditions[conditions.length - 1][qq.s3.util.DATE_PARAM_NAME] =\n                    qq.s3.util.getV4PolicyDate(date, drift);\n            }\n\n            // user metadata\n            qq.each(params, function(name, val) {\n                var awsParamName = qq.s3.util._getPrefixedParamName(name),\n                    param = {};\n\n                if (qq.indexOf(qq.s3.util.UNPREFIXED_PARAM_NAMES, awsParamName) >= 0) {\n                    param[awsParamName] = val;\n                }\n                else {\n                    param[awsParamName] = encodeURIComponent(val);\n                }\n\n                conditions.push(param);\n            });\n\n            policy.conditions = conditions;\n\n            qq.s3.util.enforceSizeLimits(policy, minFileSize, maxFileSize);\n\n            return policy;\n        },\n\n        /**\n         * Update a previously constructed policy document with updated credentials.  Currently, this only requires we\n         * update the session token.  This is only relevant if requests are being signed client-side.\n         *\n         * @param policy Live policy document\n         * @param newSessionToken Updated session token.\n         */\n        refreshPolicyCredentials: function(policy, newSessionToken) {\n            var sessionTokenFound = false;\n\n            qq.each(policy.conditions, function(oldCondIdx, oldCondObj) {\n                qq.each(oldCondObj, function(oldCondName, oldCondVal) {\n                    if (oldCondName === qq.s3.util.SESSION_TOKEN_PARAM_NAME) {\n                        oldCondObj[oldCondName] = newSessionToken;\n                        sessionTokenFound = true;\n                    }\n                });\n            });\n\n            if (!sessionTokenFound) {\n                policy.conditions.push({});\n                policy.conditions[policy.conditions.length - 1][qq.s3.util.SESSION_TOKEN_PARAM_NAME] = newSessionToken;\n            }\n        },\n\n        /**\n         * Generates all parameters to be passed along with the S3 upload request.  This includes invoking a callback\n         * that is expected to asynchronously retrieve a signature for the policy document.  Note that the server\n         * signing the request should reject a \""tainted\"" policy document that includes unexpected values, since it is\n         * still possible for a malicious user to tamper with these values during policy document generation,\n         * before it is sent to the server for signing.\n         *\n         * @param spec Object with properties: `params`, `type`, `key`, `accessKey`, `acl`, `expectedStatus`, `successRedirectUrl`,\n         * `reducedRedundancy`, `region`, `serverSideEncryption`, `version`, and `log()`, along with any options associated with `qq.s3.util.getPolicy()`.\n         * @returns {qq.Promise} Promise that will be fulfilled once all parameters have been determined.\n         */\n        generateAwsParams: function(spec, signPolicyCallback) {\n            var awsParams = {},\n                customParams = spec.params,\n                promise = new qq.Promise(),\n                sessionToken = spec.sessionToken,\n                drift = spec.clockDrift,\n                type = spec.type,\n                key = spec.key,\n                accessKey = spec.accessKey,\n                acl = spec.acl,\n                expectedStatus = spec.expectedStatus,\n                successRedirectUrl = qq.s3.util.getSuccessRedirectAbsoluteUrl(spec.successRedirectUrl),\n                reducedRedundancy = spec.reducedRedundancy,\n                region = spec.region,\n                serverSideEncryption = spec.serverSideEncryption,\n                signatureVersion = spec.signatureVersion,\n                now = new Date(),\n                log = spec.log,\n                policyJson;\n\n            spec.date = now;\n            policyJson = qq.s3.util.getPolicy(spec);\n\n            awsParams.key = key;\n\n            if (type) {\n                awsParams[\""Content-Type\""] = type;\n            }\n            // jscs:disable requireCamelCaseOrUpperCaseIdentifiers\n            if (expectedStatus) {\n                awsParams.success_action_status = expectedStatus;\n            }\n\n            if (successRedirectUrl) {\n                awsParams.success_action_redirect = successRedirectUrl;\n            }\n            // jscs:enable\n            if (reducedRedundancy) {\n                awsParams[qq.s3.util.REDUCED_REDUNDANCY_PARAM_NAME] = qq.s3.util.REDUCED_REDUNDANCY_PARAM_VALUE;\n            }\n\n            if (serverSideEncryption) {\n                awsParams[qq.s3.util.SERVER_SIDE_ENCRYPTION_PARAM_NAME] = qq.s3.util.SERVER_SIDE_ENCRYPTION_PARAM_VALUE;\n            }\n\n            if (sessionToken) {\n                awsParams[qq.s3.util.SESSION_TOKEN_PARAM_NAME] = sessionToken;\n            }\n\n            awsParams.acl = acl;\n\n            // Custom (user-supplied) params must be prefixed with the value of `qq.s3.util.AWS_PARAM_PREFIX`.\n            // Params such as Cache-Control or Content-Disposition will not be prefixed.\n            // Prefixed param values will be URI encoded as well.\n            qq.each(customParams, function(name, val) {\n                var awsParamName = qq.s3.util._getPrefixedParamName(name);\n\n                if (qq.indexOf(qq.s3.util.UNPREFIXED_PARAM_NAMES, awsParamName) >= 0) {\n                    awsParams[awsParamName] = val;\n                }\n                else {\n                    awsParams[awsParamName] = encodeURIComponent(val);\n                }\n            });\n\n            if (signatureVersion === 2) {\n                awsParams.AWSAccessKeyId = accessKey;\n            }\n            else if (signatureVersion === 4) {\n                awsParams[qq.s3.util.ALGORITHM_PARAM_NAME] = qq.s3.util.V4_ALGORITHM_PARAM_VALUE;\n                awsParams[qq.s3.util.CREDENTIAL_PARAM_NAME] = qq.s3.util.getV4CredentialsString({date: now, key: accessKey, region: region});\n                awsParams[qq.s3.util.DATE_PARAM_NAME] = qq.s3.util.getV4PolicyDate(now, drift);\n            }\n\n            // Invoke a promissory callback that should provide us with a base64-encoded policy doc and an\n            // HMAC signature for the policy doc.\n            signPolicyCallback(policyJson).then(\n                function(policyAndSignature, updatedAccessKey, updatedSessionToken) {\n                    awsParams.policy = policyAndSignature.policy;\n\n                    if (spec.signatureVersion === 2) {\n                        awsParams.signature = policyAndSignature.signature;\n\n                        if (updatedAccessKey) {\n                            awsParams.AWSAccessKeyId = updatedAccessKey;\n                        }\n                    }\n                    else if (spec.signatureVersion === 4) {\n                        awsParams[qq.s3.util.V4_SIGNATURE_PARAM_NAME] = policyAndSignature.signature;\n                    }\n\n                    if (updatedSessionToken) {\n                        awsParams[qq.s3.util.SESSION_TOKEN_PARAM_NAME] = updatedSessionToken;\n                    }\n\n                    promise.success(awsParams);\n                },\n                function(errorMessage) {\n                    errorMessage = errorMessage || \""Can't continue further with request to S3 as we did not receive \"" +\n                                                   \""a valid signature and policy from the server.\"";\n\n                    log(\""Policy signing failed.  \"" + errorMessage, \""error\"");\n                    promise.failure(errorMessage);\n                }\n            );\n\n            return promise;\n        },\n\n        /**\n         * Add a condition to an existing S3 upload request policy document used to ensure AWS enforces any size\n         * restrictions placed on files server-side.  This is important to do, in case users mess with the client-side\n         * checks already in place.\n         *\n         * @param policy Policy document as an `Object`, with a `conditions` property already attached\n         * @param minSize Minimum acceptable size, in bytes\n         * @param maxSize Maximum acceptable size, in bytes (0 = unlimited)\n         */\n        enforceSizeLimits: function(policy, minSize, maxSize) {\n            var adjustedMinSize = minSize < 0 ? 0 : minSize,\n                // Adjust a maxSize of 0 to the largest possible integer, since we must specify a high and a low in the request\n                adjustedMaxSize = maxSize <= 0 ? 9007199254740992 : maxSize;\n\n            if (minSize > 0 || maxSize > 0) {\n                policy.conditions.push([\""content-length-range\"", adjustedMinSize.toString(), adjustedMaxSize.toString()]);\n            }\n        },\n\n        getPolicyExpirationDate: function(date, drift) {\n            var adjustedDate = new Date(date.getTime() + drift);\n            return qq.s3.util.getPolicyDate(adjustedDate, 5);\n        },\n\n        getCredentialsDate: function(date) {\n            return date.getUTCFullYear() + \""\"" +\n                (\""0\"" + (date.getUTCMonth() + 1)).slice(-2) +\n                (\""0\"" + date.getUTCDate()).slice(-2);\n        },\n\n        getPolicyDate: function(date, _minutesToAdd_) {\n            var minutesToAdd = _minutesToAdd_ || 0,\n                pad, r;\n\n            /*jshint -W014 */\n            // Is this going to be a problem if we encounter this moments before 2 AM just before daylight savings time ends?\n            date.setMinutes(date.getMinutes() + (minutesToAdd || 0));\n\n            if (Date.prototype.toISOString) {\n                return date.toISOString();\n            }\n            else {\n                pad = function(number) {\n                    r = String(number);\n\n                    if (r.length === 1) {\n                        r = \""0\"" + r;\n                    }\n\n                    return r;\n                };\n\n                return date.getUTCFullYear()\n                    + \""-\"" + pad(date.getUTCMonth() + 1)\n                    + \""-\"" + pad(date.getUTCDate())\n                    + \""T\"" + pad(date.getUTCHours())\n                    + \"":\"" + pad(date.getUTCMinutes())\n                    + \"":\"" + pad(date.getUTCSeconds())\n                    + \"".\"" + String((date.getUTCMilliseconds() / 1000).toFixed(3)).slice(2, 5)\n                    + \""Z\"";\n            }\n        },\n\n        /**\n         * Looks at a response from S3 contained in an iframe and parses the query string in an attempt to identify\n         * the associated resource.\n         *\n         * @param iframe Iframe containing response\n         * @returns {{bucket: *, key: *, etag: *}}\n         */\n        parseIframeResponse: function(iframe) {\n            var doc = iframe.contentDocument || iframe.contentWindow.document,\n                queryString = doc.location.search,\n                match = /bucket=(.+)&key=(.+)&etag=(.+)/.exec(queryString);\n\n            if (match) {\n                return {\n                    bucket: match[1],\n                    key: match[2],\n                    etag: match[3].replace(/%22/g, \""\"")\n                };\n            }\n        },\n\n        /**\n         * @param successRedirectUrl Relative or absolute location of success redirect page\n         * @returns {*|string} undefined if the parameter is undefined, otherwise the absolute location of the success redirect page\n         */\n        getSuccessRedirectAbsoluteUrl: function(successRedirectUrl) {\n            if (successRedirectUrl) {\n                var targetAnchorContainer = document.createElement(\""div\""),\n                    targetAnchor;\n\n                if (qq.ie7()) {\n                    // Note that we must make use of `innerHTML` for IE7 only instead of simply creating an anchor via\n                    // `document.createElement('a')` and setting the `href` attribute.  The latter approach does not allow us to\n                    // obtain an absolute URL in IE7 if the `endpoint` is a relative URL.\n                    targetAnchorContainer.innerHTML = \""<a href='\"" + successRedirectUrl + \""'></a>\"";\n                    targetAnchor = targetAnchorContainer.firstChild;\n                    return targetAnchor.href;\n                }\n                else {\n                    // IE8 and IE9 do not seem to derive an absolute URL from a relative URL using the `innerHTML`\n                    // approach above, so we'll just create an anchor this way and set it's `href` attribute.\n                    // Due to yet another quirk in IE8 and IE9, we have to set the `href` equal to itself\n                    // in order to ensure relative URLs will be properly parsed.\n                    targetAnchor = document.createElement(\""a\"");\n                    targetAnchor.href = successRedirectUrl;\n                    targetAnchor.href = targetAnchor.href;\n                    return targetAnchor.href;\n                }\n            }\n        },\n\n        getV4CredentialsString: function(spec) {\n            return spec.key + \""/\"" +\n                qq.s3.util.getCredentialsDate(spec.date) + \""/\"" +\n                spec.region + \""/s3/aws4_request\"";\n        },\n\n        getV4PolicyDate: function(date, drift) {\n            var adjustedDate = new Date(date.getTime() + drift);\n\n            return qq.s3.util.getCredentialsDate(adjustedDate) + \""T\"" +\n                    (\""0\"" + adjustedDate.getUTCHours()).slice(-2) +\n                    (\""0\"" + adjustedDate.getUTCMinutes()).slice(-2) +\n                    (\""0\"" + adjustedDate.getUTCSeconds()).slice(-2) +\n                    \""Z\"";\n        },\n\n        // AWS employs a strict interpretation of [RFC 3986](http://tools.ietf.org/html/rfc3986#page-12).\n        // So, we must ensure all reserved characters listed in the spec are percent-encoded,\n        // and spaces are replaced with \""+\"".\n        encodeQueryStringParam: function(param) {\n            var percentEncoded = encodeURIComponent(param);\n\n            // %-encode characters not handled by `encodeURIComponent` (to follow RFC 3986)\n            percentEncoded = percentEncoded.replace(/[!'()]/g, escape);\n\n            // %-encode characters not handled by `escape` (to follow RFC 3986)\n            percentEncoded = percentEncoded.replace(/\\*/g, \""%2A\"");\n\n            // replace percent-encoded spaces with a \""+\""\n            return percentEncoded.replace(/%20/g, \""+\"");\n        },\n        /**\n         * Escapes url part as for AWS requirements\n         * AWS uriEscapePath function pulled from aws-sdk-js licensed under Apache 2.0 - http://github.com/aws/aws-sdk-js\n         */\n        uriEscape: function(string) {\n            var output = encodeURIComponent(string);\n            output = output.replace(/[^A-Za-z0-9_.~\\-%]+/g, escape);\n            output = output.replace(/[*]/g, function(ch) {\n                return \""%\"" + ch.charCodeAt(0).toString(16).toUpperCase();\n            });\n            return output;\n        },\n        /**\n         * Escapes a path as for AWS requirement\n         * AWS uriEscapePath function pulled from aws-sdk-js licensed under Apache 2.0 - http://github.com/aws/aws-sdk-js\n         */\n        uriEscapePath: function(path) {\n            var parts = [];\n            qq.each(path.split(\""/\""), function(idx, item) {\n                parts.push(qq.s3.util.uriEscape(item));\n            });\n            return parts.join(\""/\"");\n        }\n    };\n}());\n"",""/*globals qq*/\n/**\n * Defines the public API for non-traditional FineUploaderBasic mode.\n */\n(function() {\n    \""use strict\"";\n\n    qq.nonTraditionalBasePublicApi = {\n        setUploadSuccessParams: function(params, id) {\n            this._uploadSuccessParamsStore.set(params, id);\n        },\n        setUploadSuccessEndpoint: function(endpoint, id) {\n            this._uploadSuccessEndpointStore.set(endpoint, id);\n        }\n    };\n\n    qq.nonTraditionalBasePrivateApi = {\n        /**\n         * When the upload has completed, if it is successful, send a request to the `successEndpoint` (if defined).\n         * This will hold up the call to the `onComplete` callback until we have determined success of the upload\n         * according to the local server, if a `successEndpoint` has been defined by the integrator.\n         *\n         * @param id ID of the completed upload\n         * @param name Name of the associated item\n         * @param result Object created from the server's parsed JSON response.\n         * @param xhr Associated XmlHttpRequest, if this was used to send the request.\n         * @returns {boolean || qq.Promise} true/false if success can be determined immediately, otherwise a `qq.Promise`\n         * if we need to ask the server.\n         * @private\n         */\n        _onComplete: function(id, name, result, xhr) {\n            var success = result.success ? true : false,\n                self = this,\n                onCompleteArgs = arguments,\n                successEndpoint = this._uploadSuccessEndpointStore.get(id),\n                successCustomHeaders = this._options.uploadSuccess.customHeaders,\n                successMethod = this._options.uploadSuccess.method,\n                cors = this._options.cors,\n                promise = new qq.Promise(),\n                uploadSuccessParams = this._uploadSuccessParamsStore.get(id),\n                fileParams = this._paramsStore.get(id),\n\n                // If we are waiting for confirmation from the local server, and have received it,\n                // include properties from the local server response in the `response` parameter\n                // sent to the `onComplete` callback, delegate to the parent `_onComplete`, and\n                // fulfill the associated promise.\n                onSuccessFromServer = function(successRequestResult) {\n                    delete self._failedSuccessRequestCallbacks[id];\n                    qq.extend(result, successRequestResult);\n                    qq.FineUploaderBasic.prototype._onComplete.apply(self, onCompleteArgs);\n                    promise.success(successRequestResult);\n                },\n\n                // If the upload success request fails, attempt to re-send the success request (via the core retry code).\n                // The entire upload may be restarted if the server returns a \""reset\"" property with a value of true as well.\n                onFailureFromServer = function(successRequestResult) {\n                    var callback = submitSuccessRequest;\n\n                    qq.extend(result, successRequestResult);\n\n                    if (result && result.reset) {\n                        callback = null;\n                    }\n\n                    if (!callback) {\n                        delete self._failedSuccessRequestCallbacks[id];\n                    }\n                    else {\n                        self._failedSuccessRequestCallbacks[id] = callback;\n                    }\n\n                    if (!self._onAutoRetry(id, name, result, xhr, callback)) {\n                        qq.FineUploaderBasic.prototype._onComplete.apply(self, onCompleteArgs);\n                        promise.failure(successRequestResult);\n                    }\n                },\n                submitSuccessRequest,\n                successAjaxRequester;\n\n            // Ask the local server if the file sent is ok.\n            if (success && successEndpoint) {\n                successAjaxRequester = new qq.UploadSuccessAjaxRequester({\n                    endpoint: successEndpoint,\n                    method: successMethod,\n                    customHeaders: successCustomHeaders,\n                    cors: cors,\n                    log: qq.bind(this.log, this)\n                });\n\n                // combine custom params and default params\n                qq.extend(uploadSuccessParams, self._getEndpointSpecificParams(id, result, xhr), true);\n\n                // include any params associated with the file\n                fileParams && qq.extend(uploadSuccessParams, fileParams, true);\n\n                submitSuccessRequest = qq.bind(function() {\n                    successAjaxRequester.sendSuccessRequest(id, uploadSuccessParams)\n                        .then(onSuccessFromServer, onFailureFromServer);\n                }, self);\n\n                submitSuccessRequest();\n\n                return promise;\n            }\n\n            // If we are not asking the local server about the file, just delegate to the parent `_onComplete`.\n            return qq.FineUploaderBasic.prototype._onComplete.apply(this, arguments);\n        },\n\n        // If the failure occurred on an upload success request (and a reset was not ordered), try to resend that instead.\n        _manualRetry: function(id) {\n            var successRequestCallback = this._failedSuccessRequestCallbacks[id];\n\n            return qq.FineUploaderBasic.prototype._manualRetry.call(this, id, successRequestCallback);\n        }\n    };\n}());\n"",""/*globals qq */\n/**\n * This defines FineUploaderBasic mode w/ support for uploading to S3, which provides all the basic\n * functionality of Fine Uploader Basic as well as code to handle uploads directly to S3.\n * Some inherited options and API methods have a special meaning in the context of the S3 uploader.\n */\n(function() {\n    \""use strict\"";\n\n    qq.s3.FineUploaderBasic = function(o) {\n        var options = {\n            request: {\n                // public key (required for server-side signing, ignored if `credentials` have been provided)\n                accessKey: null,\n\n                // padding, in milliseconds, to add to the x-amz-date header & the policy expiration date\n                clockDrift: 0\n            },\n\n            objectProperties: {\n                acl: \""private\"",\n\n                // string or a function which may be promissory\n                bucket: qq.bind(function(id) {\n                    return qq.s3.util.getBucket(this.getEndpoint(id));\n                }, this),\n\n                // string or a function which may be promissory - only used for V4 multipart uploads\n                host: qq.bind(function(id) {\n                    return (/(?:http|https):\\/\\/(.+)(?:\\/.+)?/).exec(this._endpointStore.get(id))[1];\n                }, this),\n\n                // 'uuid', 'filename', or a function which may be promissory\n                key: \""uuid\"",\n\n                reducedRedundancy: false,\n\n                // Defined at http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\n                region: \""us-east-1\"",\n\n                serverSideEncryption: false\n            },\n\n            credentials: {\n                // Public key (required).\n                accessKey: null,\n                // Private key (required).\n                secretKey: null,\n                // Expiration date for the credentials (required).  May be an ISO string or a `Date`.\n                expiration: null,\n                // Temporary credentials session token.\n                // Only required for temporary credentials obtained via AssumeRoleWithWebIdentity.\n                sessionToken: null\n            },\n\n            // All but `version` are ignored if `credentials` is provided.\n            signature: {\n                customHeaders: {},\n                endpoint: null,\n                version: 2\n            },\n\n            uploadSuccess: {\n                endpoint: null,\n\n                method: \""POST\"",\n\n                // In addition to the default params sent by Fine Uploader\n                params: {},\n\n                customHeaders: {}\n            },\n\n            // required if non-File-API browsers, such as IE9 and older, are used\n            iframeSupport: {\n                localBlankPagePath: null\n            },\n\n            chunking: {\n                // minimum part size is 5 MiB when uploading to S3\n                partSize: 5242880\n            },\n\n            cors: {\n                allowXdr: true\n            },\n\n            callbacks: {\n                onCredentialsExpired: function() {}\n            }\n        };\n\n        // Replace any default options with user defined ones\n        qq.extend(options, o, true);\n\n        if (!this.setCredentials(options.credentials, true)) {\n            this._currentCredentials.accessKey = options.request.accessKey;\n        }\n\n        this._aclStore = this._createStore(options.objectProperties.acl);\n\n        // Call base module\n        qq.FineUploaderBasic.call(this, options);\n\n        this._uploadSuccessParamsStore = this._createStore(this._options.uploadSuccess.params);\n        this._uploadSuccessEndpointStore = this._createStore(this._options.uploadSuccess.endpoint);\n\n        // This will hold callbacks for failed uploadSuccess requests that will be invoked on retry.\n        // Indexed by file ID.\n        this._failedSuccessRequestCallbacks = {};\n\n        // Holds S3 keys for file representations constructed from a session request.\n        this._cannedKeys = {};\n        // Holds S3 buckets for file representations constructed from a session request.\n        this._cannedBuckets = {};\n\n        this._buckets = {};\n        this._hosts = {};\n    };\n\n    // Inherit basic public & private API methods.\n    qq.extend(qq.s3.FineUploaderBasic.prototype, qq.basePublicApi);\n    qq.extend(qq.s3.FineUploaderBasic.prototype, qq.basePrivateApi);\n    qq.extend(qq.s3.FineUploaderBasic.prototype, qq.nonTraditionalBasePublicApi);\n    qq.extend(qq.s3.FineUploaderBasic.prototype, qq.nonTraditionalBasePrivateApi);\n\n    // Define public & private API methods for this module.\n    qq.extend(qq.s3.FineUploaderBasic.prototype, {\n        getBucket: function(id) {\n            if (this._cannedBuckets[id] == null) {\n                return this._buckets[id];\n            }\n            return this._cannedBuckets[id];\n        },\n\n        /**\n         * @param id File ID\n         * @returns {*} Key name associated w/ the file, if one exists\n         */\n        getKey: function(id) {\n            /* jshint eqnull:true */\n            if (this._cannedKeys[id] == null) {\n                return this._handler.getThirdPartyFileId(id);\n            }\n\n            return this._cannedKeys[id];\n        },\n\n        /**\n         * Override the parent's reset function to cleanup various S3-related items.\n         */\n        reset: function() {\n            qq.FineUploaderBasic.prototype.reset.call(this);\n            this._failedSuccessRequestCallbacks = [];\n            this._buckets = {};\n            this._hosts = {};\n        },\n\n        setCredentials: function(credentials, ignoreEmpty) {\n            if (credentials && credentials.secretKey) {\n                if (!credentials.accessKey) {\n                    throw new qq.Error(\""Invalid credentials: no accessKey\"");\n                }\n                else if (!credentials.expiration) {\n                    throw new qq.Error(\""Invalid credentials: no expiration\"");\n                }\n                else {\n                    this._currentCredentials = qq.extend({}, credentials);\n\n                    // Ensure expiration is a `Date`.  If initially a string, assuming it is in ISO format.\n                    if (qq.isString(credentials.expiration)) {\n                        this._currentCredentials.expiration = new Date(credentials.expiration);\n                    }\n                }\n\n                return true;\n            }\n            else if (!ignoreEmpty) {\n                throw new qq.Error(\""Invalid credentials parameter!\"");\n            }\n            else {\n                this._currentCredentials = {};\n            }\n        },\n\n        setAcl: function(acl, id) {\n            this._aclStore.set(acl, id);\n        },\n\n        /**\n         * Ensures the parent's upload handler creator passes any additional S3-specific options to the handler as well\n         * as information required to instantiate the specific handler based on the current browser's capabilities.\n         *\n         * @returns {qq.UploadHandlerController}\n         * @private\n         */\n        _createUploadHandler: function() {\n            var self = this,\n                additionalOptions = {\n                    aclStore: this._aclStore,\n                    getBucket: qq.bind(this._determineBucket, this),\n                    getHost: qq.bind(this._determineHost, this),\n                    getKeyName: qq.bind(this._determineKeyName, this),\n                    iframeSupport: this._options.iframeSupport,\n                    objectProperties: this._options.objectProperties,\n                    signature: this._options.signature,\n                    clockDrift: this._options.request.clockDrift,\n                    // pass size limit validation values to include in the request so AWS enforces this server-side\n                    validation: {\n                        minSizeLimit: this._options.validation.minSizeLimit,\n                        maxSizeLimit: this._options.validation.sizeLimit\n                    }\n                };\n\n            // We assume HTTP if it is missing from the start of the endpoint string.\n            qq.override(this._endpointStore, function(super_) {\n                return {\n                    get: function(id) {\n                        var endpoint = super_.get(id);\n\n                        if (endpoint.indexOf(\""http\"") < 0) {\n                            return \""http://\"" + endpoint;\n                        }\n\n                        return endpoint;\n                    }\n                };\n            });\n\n            // Some param names should be lower case to avoid signature mismatches\n            qq.override(this._paramsStore, function(super_) {\n                return {\n                    get: function(id) {\n                        var oldParams = super_.get(id),\n                            modifiedParams = {};\n\n                        qq.each(oldParams, function(name, val) {\n                            var paramName = name;\n\n                            if (qq.indexOf(qq.s3.util.CASE_SENSITIVE_PARAM_NAMES, paramName) < 0) {\n                                paramName = paramName.toLowerCase();\n                            }\n\n                            modifiedParams[paramName] = qq.isFunction(val) ? val() : val;\n                        });\n\n                        return modifiedParams;\n                    }\n                };\n            });\n\n            additionalOptions.signature.credentialsProvider = {\n                get: function() {\n                    return self._currentCredentials;\n                },\n\n                onExpired: function() {\n                    var updateCredentials = new qq.Promise(),\n                        callbackRetVal = self._options.callbacks.onCredentialsExpired();\n\n                    if (qq.isGenericPromise(callbackRetVal)) {\n                        callbackRetVal.then(function(credentials) {\n                            try {\n                                self.setCredentials(credentials);\n                                updateCredentials.success();\n                            }\n                            catch (error) {\n                                self.log(\""Invalid credentials returned from onCredentialsExpired callback! (\"" + error.message + \"")\"", \""error\"");\n                                updateCredentials.failure(\""onCredentialsExpired did not return valid credentials.\"");\n                            }\n                        }, function(errorMsg) {\n                            self.log(\""onCredentialsExpired callback indicated failure! (\"" + errorMsg + \"")\"", \""error\"");\n                            updateCredentials.failure(\""onCredentialsExpired callback failed.\"");\n                        });\n                    }\n                    else {\n                        self.log(\""onCredentialsExpired callback did not return a promise!\"", \""error\"");\n                        updateCredentials.failure(\""Unexpected return value for onCredentialsExpired.\"");\n                    }\n\n                    return updateCredentials;\n                }\n            };\n\n            return qq.FineUploaderBasic.prototype._createUploadHandler.call(this, additionalOptions, \""s3\"");\n        },\n\n        _determineObjectPropertyValue: function(id, property) {\n            var maybe = this._options.objectProperties[property],\n                promise = new qq.Promise(),\n                self = this;\n\n            if (qq.isFunction(maybe)) {\n                maybe = maybe(id);\n                if (qq.isGenericPromise(maybe)) {\n                    promise = maybe;\n                }\n                else {\n                    promise.success(maybe);\n                }\n            }\n            else if (qq.isString(maybe)) {\n                promise.success(maybe);\n            }\n\n            promise.then(\n                function success(value) {\n                    self[\""_\"" + property + \""s\""][id] = value;\n                },\n\n                function failure(errorMsg) {\n                    qq.log(\""Problem determining \"" + property + \"" for ID \"" + id + \"" (\"" + errorMsg + \"")\"", \""error\"");\n                }\n            );\n\n            return promise;\n        },\n\n        _determineBucket: function(id) {\n            return this._determineObjectPropertyValue(id, \""bucket\"");\n        },\n\n        _determineHost: function(id) {\n            return this._determineObjectPropertyValue(id, \""host\"");\n        },\n\n        /**\n         * Determine the file's key name and passes it to the caller via a promissory callback.  This also may\n         * delegate to an integrator-defined function that determines the file's key name on demand,\n         * which also may be promissory.\n         *\n         * @param id ID of the file\n         * @param filename Name of the file\n         * @returns {qq.Promise} A promise that will be fulfilled when the key name has been determined (and will be passed to the caller via the success callback).\n         * @private\n         */\n        _determineKeyName: function(id, filename) {\n            /*jshint -W015*/\n            var promise = new qq.Promise(),\n                keynameLogic = this._options.objectProperties.key,\n                extension = qq.getExtension(filename),\n                onGetKeynameFailure = promise.failure,\n                onGetKeynameSuccess = function(keyname, extension) {\n                    var keynameToUse = keyname;\n\n                    if (extension !== undefined) {\n                        keynameToUse += \"".\"" + extension;\n                    }\n\n                    promise.success(keynameToUse);\n                };\n\n            switch (keynameLogic) {\n                case \""uuid\"":\n                    onGetKeynameSuccess(this.getUuid(id), extension);\n                    break;\n                case \""filename\"":\n                    onGetKeynameSuccess(filename);\n                    break;\n                default:\n                    if (qq.isFunction(keynameLogic)) {\n                        this._handleKeynameFunction(keynameLogic, id, onGetKeynameSuccess, onGetKeynameFailure);\n                    }\n                    else {\n                        this.log(keynameLogic + \"" is not a valid value for the s3.keyname option!\"", \""error\"");\n                        onGetKeynameFailure();\n                    }\n            }\n\n            return promise;\n        },\n\n        /**\n         * Called by the internal onUpload handler if the integrator has supplied a function to determine\n         * the file's key name.  The integrator's function may be promissory.  We also need to fulfill\n         * the promise contract associated with the caller as well.\n         *\n         * @param keynameFunc Integrator-supplied function that must be executed to determine the key name.  May be promissory.\n         * @param id ID of the associated file\n         * @param successCallback Invoke this if key name retrieval is successful, passing in the key name.\n         * @param failureCallback Invoke this if key name retrieval was unsuccessful.\n         * @private\n         */\n        _handleKeynameFunction: function(keynameFunc, id, successCallback, failureCallback) {\n            var self = this,\n                onSuccess = function(keyname) {\n                    successCallback(keyname);\n                },\n                onFailure = function(reason) {\n                    self.log(qq.format(\""Failed to retrieve key name for {}.  Reason: {}\"", id, reason || \""null\""), \""error\"");\n                    failureCallback(reason);\n                },\n                keyname = keynameFunc.call(this, id);\n\n            if (qq.isGenericPromise(keyname)) {\n                keyname.then(onSuccess, onFailure);\n            }\n            /*jshint -W116*/\n            else if (keyname == null) {\n                onFailure();\n            }\n            else {\n                onSuccess(keyname);\n            }\n        },\n\n        _getEndpointSpecificParams: function(id, response, maybeXhr) {\n            var params = {\n                key: this.getKey(id),\n                uuid: this.getUuid(id),\n                name: this.getName(id),\n                bucket: this.getBucket(id)\n            };\n\n            if (maybeXhr && maybeXhr.getResponseHeader(\""ETag\"")) {\n                params.etag = maybeXhr.getResponseHeader(\""ETag\"");\n            }\n            else if (response.etag) {\n                params.etag = response.etag;\n            }\n\n            return params;\n        },\n\n        // Hooks into the base internal `_onSubmitDelete` to add key and bucket params to the delete file request.\n        _onSubmitDelete: function(id, onSuccessCallback) {\n            var additionalMandatedParams = {\n                key: this.getKey(id),\n                bucket: this.getBucket(id)\n            };\n\n            return qq.FineUploaderBasic.prototype._onSubmitDelete.call(this, id, onSuccessCallback, additionalMandatedParams);\n        },\n\n        _addCannedFile: function(sessionData) {\n            var id;\n\n            /* jshint eqnull:true */\n            if (sessionData.s3Key == null) {\n                throw new qq.Error(\""Did not find s3Key property in server session response.  This is required!\"");\n            }\n            else {\n                id = qq.FineUploaderBasic.prototype._addCannedFile.apply(this, arguments);\n                this._cannedKeys[id] = sessionData.s3Key;\n                this._cannedBuckets[id] = sessionData.s3Bucket;\n            }\n\n            return id;\n        }\n    });\n}());\n"",""/* globals qq, CryptoJS */\n\n// IE 10 does not support Uint8ClampedArray. We don't need it, but CryptoJS attempts to reference it\n// inside a conditional via an instanceof check, which breaks S3 v4 signatures for chunked uploads.\nif (!window.Uint8ClampedArray) {\n    window.Uint8ClampedArray = function() {};\n}\n/**\n * Handles signature determination for HTML Form Upload requests and Multipart Uploader requests (via the S3 REST API).\n *\n * If the S3 requests are to be signed server side, this module will send a POST request to the server in an attempt\n * to solicit signatures for various S3-related requests.  This module also parses the response and attempts\n * to determine if the effort was successful.\n *\n * If the S3 requests are to be signed client-side, without the help of a server, this module will utilize CryptoJS to\n * sign the requests directly in the browser and send them off to S3.\n *\n * @param o Options associated with all such requests\n * @returns {{getSignature: Function}} API method used to initiate the signature request.\n * @constructor\n */\nqq.s3.RequestSigner = function(o) {\n    \""use strict\"";\n\n    var requester,\n        thisSignatureRequester = this,\n        pendingSignatures = {},\n        options = {\n            expectingPolicy: false,\n            method: \""POST\"",\n            signatureSpec: {\n                drift: 0,\n                credentialsProvider: {},\n                endpoint: null,\n                customHeaders: {},\n                version: 2\n            },\n            maxConnections: 3,\n            endpointStore: {},\n            paramsStore: {},\n            cors: {\n                expected: false,\n                sendCredentials: false\n            },\n            log: function(str, level) {}\n        },\n        credentialsProvider,\n\n        generateHeaders = function(signatureConstructor, signature, promise) {\n            var headers = signatureConstructor.getHeaders();\n\n            if (options.signatureSpec.version === 4) {\n                headers.Authorization = qq.s3.util.V4_ALGORITHM_PARAM_VALUE +\n                    \"" Credential=\"" + options.signatureSpec.credentialsProvider.get().accessKey + \""/\"" +\n                    qq.s3.util.getCredentialsDate(signatureConstructor.getRequestDate()) + \""/\"" +\n                    options.signatureSpec.region + \""/\"" +\n                    \""s3/aws4_request,\"" +\n                    \""SignedHeaders=\"" + signatureConstructor.getSignedHeaders() + \"",\"" +\n                    \""Signature=\"" + signature;\n            }\n            else {\n                headers.Authorization = \""AWS \"" + options.signatureSpec.credentialsProvider.get().accessKey + \"":\"" + signature;\n            }\n\n            promise.success(headers, signatureConstructor.getEndOfUrl());\n        },\n\n        v2 = {\n            getStringToSign: function(signatureSpec) {\n                return qq.format(\""{}\\n{}\\n{}\\n\\n{}/{}/{}\"",\n                    signatureSpec.method,\n                    signatureSpec.contentMd5 || \""\"",\n                    signatureSpec.contentType || \""\"",\n                    signatureSpec.headersStr || \""\\n\"",\n                    signatureSpec.bucket,\n                    signatureSpec.endOfUrl);\n            },\n\n            signApiRequest: function(signatureConstructor, headersStr, signatureEffort) {\n                var headersWordArray = qq.CryptoJS.enc.Utf8.parse(headersStr),\n                    headersHmacSha1 = qq.CryptoJS.HmacSHA1(headersWordArray, credentialsProvider.get().secretKey),\n                    headersHmacSha1Base64 = qq.CryptoJS.enc.Base64.stringify(headersHmacSha1);\n\n                generateHeaders(signatureConstructor, headersHmacSha1Base64, signatureEffort);\n            },\n\n            signPolicy: function(policy, signatureEffort, updatedAccessKey, updatedSessionToken) {\n                var policyStr = JSON.stringify(policy),\n                    policyWordArray = qq.CryptoJS.enc.Utf8.parse(policyStr),\n                    base64Policy = qq.CryptoJS.enc.Base64.stringify(policyWordArray),\n                    policyHmacSha1 = qq.CryptoJS.HmacSHA1(base64Policy, credentialsProvider.get().secretKey),\n                    policyHmacSha1Base64 = qq.CryptoJS.enc.Base64.stringify(policyHmacSha1);\n\n                signatureEffort.success({\n                    policy: base64Policy,\n                    signature: policyHmacSha1Base64\n                }, updatedAccessKey, updatedSessionToken);\n            }\n        },\n\n        v4 = {\n            getCanonicalQueryString: function(endOfUri) {\n                var queryParamIdx = endOfUri.indexOf(\""?\""),\n                    canonicalQueryString = \""\"",\n                    encodedQueryParams, encodedQueryParamNames, queryStrings;\n\n                if (queryParamIdx >= 0) {\n                    encodedQueryParams = {};\n                    queryStrings = endOfUri.substr(queryParamIdx + 1).split(\""&\"");\n\n                    qq.each(queryStrings, function(idx, queryString) {\n                        var nameAndVal = queryString.split(\""=\""),\n                            paramVal = nameAndVal[1];\n\n                        if (paramVal == null) {\n                            paramVal = \""\"";\n                        }\n\n                        encodedQueryParams[encodeURIComponent(nameAndVal[0])] = encodeURIComponent(paramVal);\n                    });\n\n                    encodedQueryParamNames = Object.keys(encodedQueryParams).sort();\n                    encodedQueryParamNames.forEach(function(encodedQueryParamName, idx) {\n                        canonicalQueryString += encodedQueryParamName + \""=\"" + encodedQueryParams[encodedQueryParamName];\n                        if (idx < encodedQueryParamNames.length - 1) {\n                            canonicalQueryString += \""&\"";\n                        }\n                    });\n                }\n\n                return canonicalQueryString;\n            },\n\n            getCanonicalRequest: function(signatureSpec) {\n                return qq.format(\""{}\\n{}\\n{}\\n{}\\n{}\\n{}\"",\n                    signatureSpec.method,\n                    v4.getCanonicalUri(signatureSpec.endOfUrl),\n                    v4.getCanonicalQueryString(signatureSpec.endOfUrl),\n                    signatureSpec.headersStr || \""\\n\"",\n                    v4.getSignedHeaders(signatureSpec.headerNames),\n                    signatureSpec.hashedContent);\n            },\n\n            getCanonicalUri: function(endOfUri) {\n                var path = endOfUri,\n                    queryParamIdx = endOfUri.indexOf(\""?\"");\n\n                if (queryParamIdx > 0) {\n                    path = endOfUri.substr(0, queryParamIdx);\n                }\n                return \""/\"" + path;\n            },\n\n            getEncodedHashedPayload: function(body) {\n                var promise = new qq.Promise(),\n                    reader;\n\n                if (qq.isBlob(body)) {\n                    // TODO hash blob in webworker if this becomes a notable perf issue\n                    reader = new FileReader();\n                    reader.onloadend = function(e) {\n                        if (e.target.readyState === FileReader.DONE) {\n                            if (e.target.error) {\n                                promise.failure(e.target.error);\n                            }\n                            else {\n                                var wordArray = qq.CryptoJS.lib.WordArray.create(e.target.result);\n                                promise.success(qq.CryptoJS.SHA256(wordArray).toString());\n                            }\n                        }\n                    };\n                    reader.readAsArrayBuffer(body);\n                }\n                else {\n                    body = body || \""\"";\n                    promise.success(qq.CryptoJS.SHA256(body).toString());\n                }\n\n                return promise;\n            },\n\n            getScope: function(date, region) {\n                return qq.s3.util.getCredentialsDate(date) + \""/\"" +\n                    region + \""/s3/aws4_request\"";\n            },\n\n            getStringToSign: function(signatureSpec) {\n                var canonicalRequest = v4.getCanonicalRequest(signatureSpec),\n                    date = qq.s3.util.getV4PolicyDate(signatureSpec.date, signatureSpec.drift),\n                    hashedRequest = qq.CryptoJS.SHA256(canonicalRequest).toString(),\n                    scope = v4.getScope(signatureSpec.date, options.signatureSpec.region),\n                    stringToSignTemplate = \""AWS4-HMAC-SHA256\\n{}\\n{}\\n{}\"";\n\n                return {\n                    hashed: qq.format(stringToSignTemplate, date, scope, hashedRequest),\n                    raw: qq.format(stringToSignTemplate, date, scope, canonicalRequest)\n                };\n            },\n\n            getSignedHeaders: function(headerNames) {\n                var signedHeaders = \""\"";\n\n                headerNames.forEach(function(headerName, idx) {\n                    signedHeaders += headerName.toLowerCase();\n\n                    if (idx < headerNames.length - 1) {\n                        signedHeaders += \"";\"";\n                    }\n                });\n\n                return signedHeaders;\n            },\n\n            signApiRequest: function(signatureConstructor, headersStr, signatureEffort) {\n                var secretKey = credentialsProvider.get().secretKey,\n                    headersPattern = /.+\\n.+\\n(\\d+)\\/(.+)\\/s3\\/.+\\n(.+)/,\n                    matches = headersPattern.exec(headersStr),\n                    dateKey, dateRegionKey, dateRegionServiceKey, signingKey;\n\n                dateKey = qq.CryptoJS.HmacSHA256(matches[1], \""AWS4\"" + secretKey);\n                dateRegionKey = qq.CryptoJS.HmacSHA256(matches[2], dateKey);\n                dateRegionServiceKey = qq.CryptoJS.HmacSHA256(\""s3\"", dateRegionKey);\n                signingKey = qq.CryptoJS.HmacSHA256(\""aws4_request\"", dateRegionServiceKey);\n\n                generateHeaders(signatureConstructor, qq.CryptoJS.HmacSHA256(headersStr, signingKey), signatureEffort);\n            },\n\n            signPolicy: function(policy, signatureEffort, updatedAccessKey, updatedSessionToken) {\n                var policyStr = JSON.stringify(policy),\n                    policyWordArray = qq.CryptoJS.enc.Utf8.parse(policyStr),\n                    base64Policy = qq.CryptoJS.enc.Base64.stringify(policyWordArray),\n                    secretKey = credentialsProvider.get().secretKey,\n                    credentialPattern = /.+\\/(.+)\\/(.+)\\/s3\\/aws4_request/,\n                    credentialCondition = (function() {\n                        var credential = null;\n                        qq.each(policy.conditions, function(key, condition) {\n                            var val = condition[\""x-amz-credential\""];\n                            if (val) {\n                                credential = val;\n                                return false;\n                            }\n                        });\n                        return credential;\n                    }()),\n                    matches, dateKey, dateRegionKey, dateRegionServiceKey, signingKey;\n\n                matches = credentialPattern.exec(credentialCondition);\n                dateKey = qq.CryptoJS.HmacSHA256(matches[1], \""AWS4\"" + secretKey);\n                dateRegionKey = qq.CryptoJS.HmacSHA256(matches[2], dateKey);\n                dateRegionServiceKey = qq.CryptoJS.HmacSHA256(\""s3\"", dateRegionKey);\n                signingKey = qq.CryptoJS.HmacSHA256(\""aws4_request\"", dateRegionServiceKey);\n\n                signatureEffort.success({\n                    policy: base64Policy,\n                    signature: qq.CryptoJS.HmacSHA256(base64Policy, signingKey).toString()\n                }, updatedAccessKey, updatedSessionToken);\n            }\n        };\n\n    qq.extend(options, o, true);\n    credentialsProvider = options.signatureSpec.credentialsProvider;\n\n    function handleSignatureReceived(id, xhrOrXdr, isError) {\n        var responseJson = xhrOrXdr.responseText,\n            pendingSignatureData = pendingSignatures[id],\n            promise = pendingSignatureData.promise,\n            signatureConstructor = pendingSignatureData.signatureConstructor,\n            errorMessage, response;\n\n        delete pendingSignatures[id];\n\n        // Attempt to parse what we would expect to be a JSON response\n        if (responseJson) {\n            try {\n                response = qq.parseJson(responseJson);\n            }\n            catch (error) {\n                options.log(\""Error attempting to parse signature response: \"" + error, \""error\"");\n            }\n        }\n\n        // If the response is parsable and contains an `error` property, use it as the error message\n        if (response && response.error) {\n            isError = true;\n            errorMessage = response.error;\n        }\n        // If we have received a parsable response, and it has an `invalid` property,\n        // the policy document or request headers may have been tampered with client-side.\n        else if (response && response.invalid) {\n            isError = true;\n            errorMessage = \""Invalid policy document or request headers!\"";\n        }\n        // Make sure the response contains policy & signature properties\n        else if (response) {\n            if (options.expectingPolicy && !response.policy) {\n                isError = true;\n                errorMessage = \""Response does not include the base64 encoded policy!\"";\n            }\n            else if (!response.signature) {\n                isError = true;\n                errorMessage = \""Response does not include the signature!\"";\n            }\n        }\n        // Something unknown went wrong\n        else {\n            isError = true;\n            errorMessage = \""Received an empty or invalid response from the server!\"";\n        }\n\n        if (isError) {\n            if (errorMessage) {\n                options.log(errorMessage, \""error\"");\n            }\n\n            promise.failure(errorMessage);\n        }\n        else if (signatureConstructor) {\n            generateHeaders(signatureConstructor, response.signature, promise);\n        }\n        else {\n            promise.success(response);\n        }\n    }\n\n    function getStringToSignArtifacts(id, version, requestInfo) {\n        var promise = new qq.Promise(),\n            method = \""POST\"",\n            headerNames = [],\n            headersStr = \""\"",\n            now = new Date(),\n            endOfUrl, signatureSpec, toSign,\n\n            generateStringToSign = function(requestInfo) {\n                var contentMd5,\n                    headerIndexesToRemove = [];\n\n                qq.each(requestInfo.headers, function(name) {\n                    headerNames.push(name);\n                });\n                headerNames.sort();\n\n                qq.each(headerNames, function(idx, headerName) {\n                    if (qq.indexOf(qq.s3.util.UNSIGNABLE_REST_HEADER_NAMES, headerName) < 0) {\n                        headersStr += headerName.toLowerCase() + \"":\"" + requestInfo.headers[headerName].trim() + \""\\n\"";\n                    }\n                    else if (headerName === \""Content-MD5\"") {\n                        contentMd5 = requestInfo.headers[headerName];\n                    }\n                    else {\n                        headerIndexesToRemove.unshift(idx);\n                    }\n                });\n\n                qq.each(headerIndexesToRemove, function(idx, headerIdx) {\n                    headerNames.splice(headerIdx, 1);\n                });\n\n                signatureSpec = {\n                    bucket: requestInfo.bucket,\n                    contentMd5: contentMd5,\n                    contentType: requestInfo.contentType,\n                    date: now,\n                    drift: options.signatureSpec.drift,\n                    endOfUrl: endOfUrl,\n                    hashedContent: requestInfo.hashedContent,\n                    headerNames: headerNames,\n                    headersStr: headersStr,\n                    method: method\n                };\n\n                toSign = version === 2 ? v2.getStringToSign(signatureSpec) : v4.getStringToSign(signatureSpec);\n\n                return {\n                    date: now,\n                    endOfUrl: endOfUrl,\n                    signedHeaders: version === 4 ? v4.getSignedHeaders(signatureSpec.headerNames) : null,\n                    toSign: version === 4 ? toSign.hashed : toSign,\n                    toSignRaw: version === 4 ? toSign.raw : toSign\n                };\n            };\n\n        /*jshint indent:false */\n        switch (requestInfo.type) {\n            case thisSignatureRequester.REQUEST_TYPE.MULTIPART_ABORT:\n                method = \""DELETE\"";\n                endOfUrl = qq.format(\""uploadId={}\"", requestInfo.uploadId);\n                break;\n            case thisSignatureRequester.REQUEST_TYPE.MULTIPART_INITIATE:\n                endOfUrl = \""uploads\"";\n                break;\n            case thisSignatureRequester.REQUEST_TYPE.MULTIPART_COMPLETE:\n                endOfUrl = qq.format(\""uploadId={}\"", requestInfo.uploadId);\n                break;\n            case thisSignatureRequester.REQUEST_TYPE.MULTIPART_UPLOAD:\n                method = \""PUT\"";\n                endOfUrl = qq.format(\""partNumber={}&uploadId={}\"", requestInfo.partNum, requestInfo.uploadId);\n                break;\n        }\n\n        endOfUrl = requestInfo.key + \""?\"" + endOfUrl;\n\n        if (version === 4) {\n            v4.getEncodedHashedPayload(requestInfo.content).then(function(hashedContent) {\n                requestInfo.headers[\""x-amz-content-sha256\""] = hashedContent;\n                requestInfo.headers.Host = requestInfo.host;\n                requestInfo.headers[\""x-amz-date\""] = qq.s3.util.getV4PolicyDate(now, options.signatureSpec.drift);\n                requestInfo.hashedContent = hashedContent;\n\n                promise.success(generateStringToSign(requestInfo));\n            }, function (err) {\n                promise.failure(err);\n            });\n        }\n        else {\n            promise.success(generateStringToSign(requestInfo));\n        }\n\n        return promise;\n    }\n\n    function determineSignatureClientSide(id, toBeSigned, signatureEffort, updatedAccessKey, updatedSessionToken) {\n        var updatedHeaders;\n\n        // REST API request\n        if (toBeSigned.signatureConstructor) {\n            if (updatedSessionToken) {\n                updatedHeaders = toBeSigned.signatureConstructor.getHeaders();\n                updatedHeaders[qq.s3.util.SESSION_TOKEN_PARAM_NAME] = updatedSessionToken;\n                toBeSigned.signatureConstructor.withHeaders(updatedHeaders);\n            }\n\n            toBeSigned.signatureConstructor.getToSign(id).then(function(signatureArtifacts) {\n                signApiRequest(toBeSigned.signatureConstructor, signatureArtifacts.stringToSign, signatureEffort);\n            }, function (err) {\n                signatureEffort.failure(err);\n            });\n        }\n        // Form upload (w/ policy document)\n        else {\n            updatedSessionToken && qq.s3.util.refreshPolicyCredentials(toBeSigned, updatedSessionToken);\n            signPolicy(toBeSigned, signatureEffort, updatedAccessKey, updatedSessionToken);\n        }\n    }\n\n    function signPolicy(policy, signatureEffort, updatedAccessKey, updatedSessionToken) {\n        if (options.signatureSpec.version === 4) {\n            v4.signPolicy(policy, signatureEffort, updatedAccessKey, updatedSessionToken);\n        }\n        else {\n            v2.signPolicy(policy, signatureEffort, updatedAccessKey, updatedSessionToken);\n        }\n    }\n\n    function signApiRequest(signatureConstructor, headersStr, signatureEffort) {\n        if (options.signatureSpec.version === 4) {\n            v4.signApiRequest(signatureConstructor, headersStr, signatureEffort);\n        }\n        else {\n            v2.signApiRequest(signatureConstructor, headersStr, signatureEffort);\n        }\n    }\n\n    requester = qq.extend(this, new qq.AjaxRequester({\n        acceptHeader: \""application/json\"",\n        method: options.method,\n        contentType: \""application/json; charset=utf-8\"",\n        endpointStore: {\n            get: function() {\n                return options.signatureSpec.endpoint;\n            }\n        },\n        paramsStore: options.paramsStore,\n        maxConnections: options.maxConnections,\n        customHeaders: options.signatureSpec.customHeaders,\n        log: options.log,\n        onComplete: handleSignatureReceived,\n        cors: options.cors\n    }));\n\n    qq.extend(this, {\n        /**\n         * On success, an object containing the parsed JSON response will be passed into the success handler if the\n         * request succeeds.  Otherwise an error message will be passed into the failure method.\n         *\n         * @param id File ID.\n         * @param toBeSigned an Object that holds the item(s) to be signed\n         * @returns {qq.Promise} A promise that is fulfilled when the response has been received.\n         */\n        getSignature: function(id, toBeSigned) {\n            var params = toBeSigned,\n                signatureConstructor = toBeSigned.signatureConstructor,\n                signatureEffort = new qq.Promise(),\n                queryParams;\n\n            if (options.signatureSpec.version === 4) {\n                queryParams = {v4: true};\n            }\n\n            if (credentialsProvider.get().secretKey && qq.CryptoJS) {\n                if (credentialsProvider.get().expiration.getTime() > Date.now()) {\n                    determineSignatureClientSide(id, toBeSigned, signatureEffort);\n                }\n                // If credentials are expired, ask for new ones before attempting to sign request\n                else {\n                    credentialsProvider.onExpired().then(function() {\n                        determineSignatureClientSide(id, toBeSigned,\n                            signatureEffort,\n                            credentialsProvider.get().accessKey,\n                            credentialsProvider.get().sessionToken);\n                    }, function(errorMsg) {\n                        options.log(\""Attempt to update expired credentials apparently failed! Unable to sign request.  \"", \""error\"");\n                        signatureEffort.failure(\""Unable to sign request - expired credentials.\"");\n                    });\n                }\n            }\n            else {\n                options.log(\""Submitting S3 signature request for \"" + id);\n\n                if (signatureConstructor) {\n                    signatureConstructor.getToSign(id).then(function(signatureArtifacts) {\n                        params = {headers: signatureArtifacts.stringToSignRaw};\n                        requester.initTransport(id)\n                            .withParams(params)\n                            .withQueryParams(queryParams)\n                            .send();\n                    }, function (err) {\n                        options.log(\""Failed to construct signature. \"", \""error\"");\n                        signatureEffort.failure(\""Failed to construct signature.\"");\n                    });\n                }\n                else {\n                    requester.initTransport(id)\n                        .withParams(params)\n                        .withQueryParams(queryParams)\n                        .send();\n                }\n\n                pendingSignatures[id] = {\n                    promise: signatureEffort,\n                    signatureConstructor: signatureConstructor\n                };\n            }\n\n            return signatureEffort;\n        },\n\n        constructStringToSign: function(type, bucket, host, key) {\n            var headers = {},\n                uploadId, content, contentType, partNum, artifacts;\n\n            return {\n                withHeaders: function(theHeaders) {\n                    headers = theHeaders;\n                    return this;\n                },\n\n                withUploadId: function(theUploadId) {\n                    uploadId = theUploadId;\n                    return this;\n                },\n\n                withContent: function(theContent) {\n                    content = theContent;\n                    return this;\n                },\n\n                withContentType: function(theContentType) {\n                    contentType = theContentType;\n                    return this;\n                },\n\n                withPartNum: function(thePartNum) {\n                    partNum = thePartNum;\n                    return this;\n                },\n\n                getToSign: function(id) {\n                    var sessionToken = credentialsProvider.get().sessionToken,\n                        promise = new qq.Promise(),\n                        adjustedDate = new Date(Date.now() + options.signatureSpec.drift);\n\n                    headers[\""x-amz-date\""] = adjustedDate.toUTCString();\n\n                    if (sessionToken) {\n                        headers[qq.s3.util.SESSION_TOKEN_PARAM_NAME] = sessionToken;\n                    }\n\n                    getStringToSignArtifacts(id, options.signatureSpec.version, {\n                        bucket: bucket,\n                        content: content,\n                        contentType: contentType,\n                        headers: headers,\n                        host: host,\n                        key: key,\n                        partNum: partNum,\n                        type: type,\n                        uploadId: uploadId\n                    }).then(function(_artifacts_) {\n                        artifacts = _artifacts_;\n                        promise.success({\n                            headers: (function() {\n                                if (contentType) {\n                                    headers[\""Content-Type\""] = contentType;\n                                }\n\n                                delete headers.Host; // we don't want this to be set on the XHR-initiated request\n                                return headers;\n                            }()),\n                            date: artifacts.date,\n                            endOfUrl: artifacts.endOfUrl,\n                            signedHeaders: artifacts.signedHeaders,\n                            stringToSign: artifacts.toSign,\n                            stringToSignRaw: artifacts.toSignRaw\n                        });\n                    }, function (err) {\n                        promise.failure(err);\n                    });\n\n                    return promise;\n                },\n\n                getHeaders: function() {\n                    return qq.extend({}, headers);\n                },\n\n                getEndOfUrl: function() {\n                    return artifacts && artifacts.endOfUrl;\n                },\n\n                getRequestDate: function() {\n                    return artifacts && artifacts.date;\n                },\n\n                getSignedHeaders: function() {\n                    return artifacts && artifacts.signedHeaders;\n                }\n            };\n        }\n    });\n};\n\nqq.s3.RequestSigner.prototype.REQUEST_TYPE = {\n    MULTIPART_INITIATE: \""multipart_initiate\"",\n    MULTIPART_COMPLETE: \""multipart_complete\"",\n    MULTIPART_ABORT: \""multipart_abort\"",\n    MULTIPART_UPLOAD: \""multipart_upload\""\n};\n"",""/*globals qq, XMLHttpRequest*/\n/**\n * Sends a POST request to the server to notify it of a successful upload to an endpoint.  The server is expected to indicate success\n * or failure via the response status.  Specific information about the failure can be passed from the server via an `error`\n * property (by default) in an \""application/json\"" response.\n *\n * @param o Options associated with all requests.\n * @constructor\n */\nqq.UploadSuccessAjaxRequester = function(o) {\n    \""use strict\"";\n\n    var requester,\n        pendingRequests = [],\n        options = {\n            method: \""POST\"",\n            endpoint: null,\n            maxConnections: 3,\n            customHeaders: {},\n            paramsStore: {},\n            cors: {\n                expected: false,\n                sendCredentials: false\n            },\n            log: function(str, level) {}\n        };\n\n    qq.extend(options, o);\n\n    function handleSuccessResponse(id, xhrOrXdr, isError) {\n        var promise = pendingRequests[id],\n            responseJson = xhrOrXdr.responseText,\n            successIndicator = {success: true},\n            failureIndicator = {success: false},\n            parsedResponse;\n\n        delete pendingRequests[id];\n\n        options.log(qq.format(\""Received the following response body to an upload success request for id {}: {}\"", id, responseJson));\n\n        try {\n            parsedResponse = qq.parseJson(responseJson);\n\n            // If this is a cross-origin request, the server may return a 200 response w/ error or success properties\n            // in order to ensure any specific error message is picked up by Fine Uploader for all browsers,\n            // since XDomainRequest (used in IE9 and IE8) doesn't give you access to the\n            // response body for an \""error\"" response.\n            if (isError || (parsedResponse && (parsedResponse.error || parsedResponse.success === false))) {\n                options.log(\""Upload success request was rejected by the server.\"", \""error\"");\n                promise.failure(qq.extend(parsedResponse, failureIndicator));\n            }\n            else {\n                options.log(\""Upload success was acknowledged by the server.\"");\n                promise.success(qq.extend(parsedResponse, successIndicator));\n            }\n        }\n        catch (error) {\n            // This will be executed if a JSON response is not present.  This is not mandatory, so account for this properly.\n            if (isError) {\n                options.log(qq.format(\""Your server indicated failure in its upload success request response for id {}!\"", id), \""error\"");\n                promise.failure(failureIndicator);\n            }\n            else {\n                options.log(\""Upload success was acknowledged by the server.\"");\n                promise.success(successIndicator);\n            }\n        }\n    }\n\n    requester = qq.extend(this, new qq.AjaxRequester({\n        acceptHeader: \""application/json\"",\n        method: options.method,\n        endpointStore: {\n            get: function() {\n                return options.endpoint;\n            }\n        },\n        paramsStore: options.paramsStore,\n        maxConnections: options.maxConnections,\n        customHeaders: options.customHeaders,\n        log: options.log,\n        onComplete: handleSuccessResponse,\n        cors: options.cors\n    }));\n\n    qq.extend(this, {\n        /**\n         * Sends a request to the server, notifying it that a recently submitted file was successfully sent.\n         *\n         * @param id ID of the associated file\n         * @param spec `Object` with the properties that correspond to important values that we want to\n         * send to the server with this request.\n         * @returns {qq.Promise} A promise to be fulfilled when the response has been received and parsed.  The parsed\n         * payload of the response will be passed into the `failure` or `success` promise method.\n         */\n        sendSuccessRequest: function(id, spec) {\n            var promise = new qq.Promise();\n\n            options.log(\""Submitting upload success request/notification for \"" + id);\n\n            requester.initTransport(id)\n                .withParams(spec)\n                .send();\n\n            pendingRequests[id] = promise;\n\n            return promise;\n        }\n    });\n};\n"",""/*globals qq*/\n/**\n * Ajax requester used to send an [\""Initiate Multipart Upload\""](http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)\n * request to S3 via the REST API.\n *\n * @param o Options from the caller - will override the defaults.\n * @constructor\n */\nqq.s3.InitiateMultipartAjaxRequester = function(o) {\n    \""use strict\"";\n\n    var requester,\n        pendingInitiateRequests = {},\n        options = {\n            filenameParam: \""qqfilename\"",\n            method: \""POST\"",\n            endpointStore: null,\n            paramsStore: null,\n            signatureSpec: null,\n            aclStore: null,\n            reducedRedundancy: false,\n            serverSideEncryption: false,\n            maxConnections: 3,\n            getContentType: function(id) {},\n            getBucket: function(id) {},\n            getHost: function(id) {},\n            getKey: function(id) {},\n            getName: function(id) {},\n            log: function(str, level) {}\n        },\n        getSignatureAjaxRequester;\n\n    qq.extend(options, o);\n\n    getSignatureAjaxRequester = new qq.s3.RequestSigner({\n        endpointStore: options.endpointStore,\n        signatureSpec: options.signatureSpec,\n        cors: options.cors,\n        log: options.log\n    });\n\n    /**\n     * Determine all headers for the \""Initiate MPU\"" request, including the \""Authorization\"" header, which must be determined\n     * by the local server.  This is a promissory function.  If the server responds with a signature, the headers\n     * (including the Authorization header) will be passed into the success method of the promise.  Otherwise, the failure\n     * method on the promise will be called.\n     *\n     * @param id Associated file ID\n     * @returns {qq.Promise}\n     */\n    function getHeaders(id) {\n        var bucket = options.getBucket(id),\n            host = options.getHost(id),\n            headers = {},\n            promise = new qq.Promise(),\n            key = options.getKey(id),\n            signatureConstructor;\n\n        headers[\""x-amz-acl\""] = options.aclStore.get(id);\n\n        if (options.reducedRedundancy) {\n            headers[qq.s3.util.REDUCED_REDUNDANCY_PARAM_NAME] = qq.s3.util.REDUCED_REDUNDANCY_PARAM_VALUE;\n        }\n\n        if (options.serverSideEncryption) {\n            headers[qq.s3.util.SERVER_SIDE_ENCRYPTION_PARAM_NAME] = qq.s3.util.SERVER_SIDE_ENCRYPTION_PARAM_VALUE;\n        }\n\n        headers[qq.s3.util.AWS_PARAM_PREFIX + options.filenameParam] = encodeURIComponent(options.getName(id));\n\n        qq.each(options.paramsStore.get(id), function(name, val) {\n            if (qq.indexOf(qq.s3.util.UNPREFIXED_PARAM_NAMES, name) >= 0) {\n                headers[name] = val;\n            }\n            else {\n                headers[qq.s3.util.AWS_PARAM_PREFIX + name] = encodeURIComponent(val);\n            }\n        });\n\n        signatureConstructor = getSignatureAjaxRequester.constructStringToSign\n            (getSignatureAjaxRequester.REQUEST_TYPE.MULTIPART_INITIATE, bucket, host, key)\n            .withContentType(options.getContentType(id))\n            .withHeaders(headers);\n\n        // Ask the local server to sign the request.  Use this signature to form the Authorization header.\n        getSignatureAjaxRequester.getSignature(id, {signatureConstructor: signatureConstructor}).then(promise.success, promise.failure);\n\n        return promise;\n    }\n\n    /**\n     * Called by the base ajax requester when the response has been received.  We definitively determine here if the\n     * \""Initiate MPU\"" request has been a success or not.\n     *\n     * @param id ID associated with the file.\n     * @param xhr `XMLHttpRequest` object containing the response, among other things.\n     * @param isError A boolean indicating success or failure according to the base ajax requester (primarily based on status code).\n     */\n    function handleInitiateRequestComplete(id, xhr, isError) {\n        var promise = pendingInitiateRequests[id],\n            domParser = new DOMParser(),\n            responseDoc = domParser.parseFromString(xhr.responseText, \""application/xml\""),\n            uploadIdElements, messageElements, uploadId, errorMessage, status;\n\n        delete pendingInitiateRequests[id];\n\n        // The base ajax requester may declare the request to be a failure based on status code.\n        if (isError) {\n            status = xhr.status;\n\n            messageElements = responseDoc.getElementsByTagName(\""Message\"");\n            if (messageElements.length > 0) {\n                errorMessage = messageElements[0].textContent;\n            }\n        }\n        // If the base ajax requester has not declared this a failure, make sure we can retrieve the uploadId from the response.\n        else {\n            uploadIdElements = responseDoc.getElementsByTagName(\""UploadId\"");\n            if (uploadIdElements.length > 0) {\n                uploadId = uploadIdElements[0].textContent;\n            }\n            else {\n                errorMessage = \""Upload ID missing from request\"";\n            }\n        }\n\n        // Either fail the promise (passing a descriptive error message) or declare it a success (passing the upload ID)\n        if (uploadId === undefined) {\n            if (errorMessage) {\n                options.log(qq.format(\""Specific problem detected initiating multipart upload request for {}: '{}'.\"", id, errorMessage), \""error\"");\n            }\n            else {\n                options.log(qq.format(\""Unexplained error with initiate multipart upload request for {}.  Status code {}.\"", id, status), \""error\"");\n            }\n\n            promise.failure(\""Problem initiating upload request.\"", xhr);\n        }\n        else {\n            options.log(qq.format(\""Initiate multipart upload request successful for {}.  Upload ID is {}\"", id, uploadId));\n            promise.success(uploadId, xhr);\n        }\n    }\n\n    requester = qq.extend(this, new qq.AjaxRequester({\n        method: options.method,\n        contentType: null,\n        endpointStore: options.endpointStore,\n        maxConnections: options.maxConnections,\n        allowXRequestedWithAndCacheControl: false, //These headers are not necessary & would break some installations if added\n        log: options.log,\n        onComplete: handleInitiateRequestComplete,\n        successfulResponseCodes: {\n            POST: [200]\n        }\n    }));\n\n    qq.extend(this, {\n        /**\n         * Sends the \""Initiate MPU\"" request to AWS via the REST API.  First, though, we must get a signature from the\n         * local server for the request.  If all is successful, the uploadId from AWS will be passed into the promise's\n         * success handler. Otherwise, an error message will ultimately be passed into the failure method.\n         *\n         * @param id The ID associated with the file\n         * @returns {qq.Promise}\n         */\n        send: function(id) {\n            var promise = new qq.Promise();\n\n            getHeaders(id).then(function(headers, endOfUrl) {\n                options.log(\""Submitting S3 initiate multipart upload request for \"" + id);\n\n                pendingInitiateRequests[id] = promise;\n                requester.initTransport(id)\n                    .withPath(endOfUrl)\n                    .withHeaders(headers)\n                    .send();\n            }, promise.failure);\n\n            return promise;\n        }\n    });\n};\n"",""/*globals qq*/\n/**\n * Ajax requester used to send an [\""Complete Multipart Upload\""](http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)\n * request to S3 via the REST API.\n *\n * @param o Options passed by the creator, to overwrite any default option values.\n * @constructor\n */\nqq.s3.CompleteMultipartAjaxRequester = function(o) {\n    \""use strict\"";\n\n    var requester,\n        pendingCompleteRequests = {},\n        options = {\n            method: \""POST\"",\n            contentType: \""text/xml\"",\n            endpointStore: null,\n            signatureSpec: null,\n            maxConnections: 3,\n            getBucket: function(id) {},\n            getHost: function(id) {},\n            getKey: function(id) {},\n            log: function(str, level) {}\n        },\n        getSignatureAjaxRequester;\n\n    qq.extend(options, o);\n\n    // Transport for requesting signatures (for the \""Complete\"" requests) from the local server\n    getSignatureAjaxRequester = new qq.s3.RequestSigner({\n        endpointStore: options.endpointStore,\n        signatureSpec: options.signatureSpec,\n        cors: options.cors,\n        log: options.log\n    });\n\n    /**\n     * Attach all required headers (including Authorization) to the \""Complete\"" request.  This is a promissory function\n     * that will fulfill the associated promise once all headers have been attached or when an error has occurred that\n     * prevents headers from being attached.\n     *\n     * @returns {qq.Promise}\n     */\n    function getHeaders(id, uploadId, body) {\n        var headers = {},\n            promise = new qq.Promise(),\n            bucket = options.getBucket(id),\n            host = options.getHost(id),\n            signatureConstructor = getSignatureAjaxRequester.constructStringToSign\n                (getSignatureAjaxRequester.REQUEST_TYPE.MULTIPART_COMPLETE, bucket, host, options.getKey(id))\n                .withUploadId(uploadId)\n                .withContent(body)\n                .withContentType(\""application/xml; charset=UTF-8\"");\n\n        // Ask the local server to sign the request.  Use this signature to form the Authorization header.\n        getSignatureAjaxRequester.getSignature(id, {signatureConstructor: signatureConstructor}).then(promise.success, promise.failure);\n\n        return promise;\n    }\n\n    /**\n     * Called by the base ajax requester when the response has been received.  We definitively determine here if the\n     * \""Complete MPU\"" request has been a success or not.\n     *\n     * @param id ID associated with the file.\n     * @param xhr `XMLHttpRequest` object containing the response, among other things.\n     * @param isError A boolean indicating success or failure according to the base ajax requester (primarily based on status code).\n     */\n    function handleCompleteRequestComplete(id, xhr, isError) {\n        var promise = pendingCompleteRequests[id],\n            domParser = new DOMParser(),\n            bucket = options.getBucket(id),\n            key = options.getKey(id),\n            responseDoc = domParser.parseFromString(xhr.responseText, \""application/xml\""),\n            bucketEls = responseDoc.getElementsByTagName(\""Bucket\""),\n            keyEls = responseDoc.getElementsByTagName(\""Key\"");\n\n        delete pendingCompleteRequests[id];\n\n        options.log(qq.format(\""Complete response status {}, body = {}\"", xhr.status, xhr.responseText));\n\n        // If the base requester has determine this a failure, give up.\n        if (isError) {\n            options.log(qq.format(\""Complete Multipart Upload request for {} failed with status {}.\"", id, xhr.status), \""error\"");\n        }\n        else {\n            // Make sure the correct bucket and key has been specified in the XML response from AWS.\n            if (bucketEls.length && keyEls.length) {\n                if (bucketEls[0].textContent !== bucket) {\n                    isError = true;\n                    options.log(qq.format(\""Wrong bucket in response to Complete Multipart Upload request for {}.\"", id), \""error\"");\n                }\n\n                // TODO Compare key name from response w/ expected key name if AWS ever fixes the encoding of key names in this response.\n            }\n            else {\n                isError = true;\n                options.log(qq.format(\""Missing bucket and/or key in response to Complete Multipart Upload request for {}.\"", id), \""error\"");\n            }\n        }\n\n        if (isError) {\n            promise.failure(\""Problem combining the file parts!\"", xhr);\n        }\n        else {\n            promise.success({}, xhr);\n        }\n    }\n\n    /**\n     * @param etagEntries Array of objects containing `etag` values and their associated `part` numbers.\n     * @returns {string} XML string containing the body to send with the \""Complete\"" request\n     */\n    function getCompleteRequestBody(etagEntries) {\n        var doc = document.implementation.createDocument(null, \""CompleteMultipartUpload\"", null);\n\n        // The entries MUST be sorted by part number, per the AWS API spec.\n        etagEntries.sort(function(a, b) {\n            return a.part - b.part;\n        });\n\n        // Construct an XML document for each pair of etag/part values that correspond to part uploads.\n        qq.each(etagEntries, function(idx, etagEntry) {\n            var part = etagEntry.part,\n                etag = etagEntry.etag,\n                partEl = doc.createElement(\""Part\""),\n                partNumEl = doc.createElement(\""PartNumber\""),\n                partNumTextEl = doc.createTextNode(part),\n                etagTextEl = doc.createTextNode(etag),\n                etagEl = doc.createElement(\""ETag\"");\n\n            etagEl.appendChild(etagTextEl);\n            partNumEl.appendChild(partNumTextEl);\n            partEl.appendChild(partNumEl);\n            partEl.appendChild(etagEl);\n            qq(doc).children()[0].appendChild(partEl);\n        });\n\n        // Turn the resulting XML document into a string fit for transport.\n        return new XMLSerializer().serializeToString(doc);\n    }\n\n    requester = qq.extend(this, new qq.AjaxRequester({\n        method: options.method,\n        contentType: \""application/xml; charset=UTF-8\"",\n        endpointStore: options.endpointStore,\n        maxConnections: options.maxConnections,\n        allowXRequestedWithAndCacheControl: false, //These headers are not necessary & would break some installations if added\n        log: options.log,\n        onComplete: handleCompleteRequestComplete,\n        successfulResponseCodes: {\n            POST: [200]\n        }\n    }));\n\n    qq.extend(this, {\n        /**\n         * Sends the \""Complete\"" request and fulfills the returned promise when the success of this request is known.\n         *\n         * @param id ID associated with the file.\n         * @param uploadId AWS uploadId for this file\n         * @param etagEntries Array of objects containing `etag` values and their associated `part` numbers.\n         * @returns {qq.Promise}\n         */\n        send: function(id, uploadId, etagEntries) {\n            var promise = new qq.Promise(),\n                body = getCompleteRequestBody(etagEntries);\n\n            getHeaders(id, uploadId, body).then(function(headers, endOfUrl) {\n                options.log(\""Submitting S3 complete multipart upload request for \"" + id);\n\n                pendingCompleteRequests[id] = promise;\n                delete headers[\""Content-Type\""];\n\n                requester.initTransport(id)\n                    .withPath(endOfUrl)\n                    .withHeaders(headers)\n                    .withPayload(body)\n                    .send();\n            }, promise.failure);\n\n            return promise;\n        }\n    });\n};\n"",""/*globals qq */\n/**\n * Ajax requester used to send an [\""Abort Multipart Upload\""](http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadAbort.html)\n * request to S3 via the REST API.\n\n * @param o\n * @constructor\n */\nqq.s3.AbortMultipartAjaxRequester = function(o) {\n    \""use strict\"";\n\n    var requester,\n        options = {\n            method: \""DELETE\"",\n            endpointStore: null,\n            signatureSpec: null,\n            maxConnections: 3,\n            getBucket: function(id) {},\n            getHost: function(id) {},\n            getKey: function(id) {},\n            log: function(str, level) {}\n        },\n        getSignatureAjaxRequester;\n\n    qq.extend(options, o);\n\n    // Transport for requesting signatures (for the \""Complete\"" requests) from the local server\n    getSignatureAjaxRequester = new qq.s3.RequestSigner({\n        endpointStore: options.endpointStore,\n        signatureSpec: options.signatureSpec,\n        cors: options.cors,\n        log: options.log\n    });\n\n    /**\n     * Attach all required headers (including Authorization) to the \""Abort\"" request.  This is a promissory function\n     * that will fulfill the associated promise once all headers have been attached or when an error has occurred that\n     * prevents headers from being attached.\n     *\n     * @param id Associated file ID\n     * @param uploadId ID of the associated upload, according to AWS\n     * @returns {qq.Promise}\n     */\n    function getHeaders(id, uploadId) {\n        var headers = {},\n            promise = new qq.Promise(),\n            bucket = options.getBucket(id),\n            host = options.getHost(id),\n            signatureConstructor = getSignatureAjaxRequester.constructStringToSign\n                (getSignatureAjaxRequester.REQUEST_TYPE.MULTIPART_ABORT, bucket, host, options.getKey(id))\n                .withUploadId(uploadId);\n\n        // Ask the local server to sign the request.  Use this signature to form the Authorization header.\n        getSignatureAjaxRequester.getSignature(id, {signatureConstructor: signatureConstructor}).then(promise.success, promise.failure);\n\n        return promise;\n    }\n\n    /**\n     * Called by the base ajax requester when the response has been received.  We definitively determine here if the\n     * \""Abort MPU\"" request has been a success or not.\n     *\n     * @param id ID associated with the file.\n     * @param xhr `XMLHttpRequest` object containing the response, among other things.\n     * @param isError A boolean indicating success or failure according to the base ajax requester (primarily based on status code).\n     */\n    function handleAbortRequestComplete(id, xhr, isError) {\n        var domParser = new DOMParser(),\n            responseDoc = domParser.parseFromString(xhr.responseText, \""application/xml\""),\n            errorEls = responseDoc.getElementsByTagName(\""Error\""),\n            awsErrorMsg;\n\n        options.log(qq.format(\""Abort response status {}, body = {}\"", xhr.status, xhr.responseText));\n\n        // If the base requester has determine this a failure, give up.\n        if (isError) {\n            options.log(qq.format(\""Abort Multipart Upload request for {} failed with status {}.\"", id, xhr.status), \""error\"");\n        }\n        else {\n            // Make sure the correct bucket and key has been specified in the XML response from AWS.\n            if (errorEls.length) {\n                isError = true;\n                awsErrorMsg = responseDoc.getElementsByTagName(\""Message\"")[0].textContent;\n                options.log(qq.format(\""Failed to Abort Multipart Upload request for {}.  Error: {}\"", id, awsErrorMsg), \""error\"");\n            }\n            else {\n                options.log(qq.format(\""Abort MPU request succeeded for file ID {}.\"", id));\n            }\n        }\n    }\n\n    requester = qq.extend(this, new qq.AjaxRequester({\n        validMethods: [\""DELETE\""],\n        method: options.method,\n        contentType: null,\n        endpointStore: options.endpointStore,\n        maxConnections: options.maxConnections,\n        allowXRequestedWithAndCacheControl: false, //These headers are not necessary & would break some installations if added\n        log: options.log,\n        onComplete: handleAbortRequestComplete,\n        successfulResponseCodes: {\n            DELETE: [204]\n        }\n    }));\n\n    qq.extend(this, {\n        /**\n         * Sends the \""Abort\"" request.\n         *\n         * @param id ID associated with the file.\n         * @param uploadId AWS uploadId for this file\n         */\n        send: function(id, uploadId) {\n            getHeaders(id, uploadId).then(function(headers, endOfUrl) {\n                options.log(\""Submitting S3 Abort multipart upload request for \"" + id);\n                requester.initTransport(id)\n                    .withPath(endOfUrl)\n                    .withHeaders(headers)\n                    .send();\n            });\n        }\n    });\n};\n"",""/*globals qq */\n/**\n * Upload handler used by the upload to S3 module that depends on File API support, and, therefore, makes use of\n * `XMLHttpRequest` level 2 to upload `File`s and `Blob`s directly to S3 buckets via the associated AWS API.\n *\n * If chunking is supported and enabled, the S3 Multipart Upload REST API is utilized.\n *\n * @param spec Options passed from the base handler\n * @param proxy Callbacks & methods used to query for or push out data/changes\n */\nqq.s3.XhrUploadHandler = function(spec, proxy) {\n    \""use strict\"";\n\n    var getName = proxy.getName,\n        log = proxy.log,\n        clockDrift = spec.clockDrift,\n        expectedStatus = 200,\n        onGetBucket = spec.getBucket,\n        onGetHost = spec.getHost,\n        onGetKeyName = spec.getKeyName,\n        filenameParam = spec.filenameParam,\n        paramsStore = spec.paramsStore,\n        endpointStore = spec.endpointStore,\n        aclStore = spec.aclStore,\n        reducedRedundancy = spec.objectProperties.reducedRedundancy,\n        region = spec.objectProperties.region,\n        serverSideEncryption = spec.objectProperties.serverSideEncryption,\n        validation = spec.validation,\n        signature = qq.extend({region: region, drift: clockDrift}, spec.signature),\n        handler = this,\n        credentialsProvider = spec.signature.credentialsProvider,\n\n        chunked = {\n            // Sends a \""Complete Multipart Upload\"" request and then signals completion of the upload\n            // when the response to this request has been parsed.\n            combine: function(id) {\n                var uploadId = handler._getPersistableData(id).uploadId,\n                    etagMap = handler._getPersistableData(id).etags,\n                    result = new qq.Promise();\n\n                requesters.completeMultipart.send(id, uploadId, etagMap).then(\n                    result.success,\n\n                    function failure(reason, xhr) {\n                        result.failure(upload.done(id, xhr).response, xhr);\n                    }\n                );\n\n                return result;\n            },\n\n            // The last step in handling a chunked upload.  This is called after each chunk has been sent.\n            // The request may be successful, or not.  If it was successful, we must extract the \""ETag\"" element\n            // in the XML response and store that along with the associated part number.\n            // We need these items to \""Complete\"" the multipart upload after all chunks have been successfully sent.\n            done: function(id, xhr, chunkIdx) {\n                var response = upload.response.parse(id, xhr),\n                    etag;\n\n                if (response.success) {\n                    etag = xhr.getResponseHeader(\""ETag\"");\n\n                    if (!handler._getPersistableData(id).etags) {\n                        handler._getPersistableData(id).etags = [];\n                    }\n                    handler._getPersistableData(id).etags.push({part: chunkIdx + 1, etag: etag});\n                }\n            },\n\n            /**\n             * Determines headers that must be attached to the chunked (Multipart Upload) request.  One of these headers is an\n             * Authorization value, which must be determined by asking the local server to sign the request first.  So, this\n             * function returns a promise.  Once all headers are determined, the `success` method of the promise is called with\n             * the headers object.  If there was some problem determining the headers, we delegate to the caller's `failure`\n             * callback.\n             *\n             * @param id File ID\n             * @param chunkIdx Index of the chunk to PUT\n             * @returns {qq.Promise}\n             */\n            initHeaders: function(id, chunkIdx, blob) {\n                var headers = {},\n                    bucket = upload.bucket.getName(id),\n                    host = upload.host.getName(id),\n                    key = upload.key.urlSafe(id),\n                    promise = new qq.Promise(),\n                    signatureConstructor = requesters.restSignature.constructStringToSign\n                        (requesters.restSignature.REQUEST_TYPE.MULTIPART_UPLOAD, bucket, host, key)\n                        .withPartNum(chunkIdx + 1)\n                        .withContent(blob)\n                        .withUploadId(handler._getPersistableData(id).uploadId);\n\n                // Ask the local server to sign the request.  Use this signature to form the Authorization header.\n                requesters.restSignature.getSignature(id + \"".\"" + chunkIdx, {signatureConstructor: signatureConstructor}).then(promise.success, promise.failure);\n\n                return promise;\n            },\n\n            put: function(id, chunkIdx) {\n                var xhr = handler._createXhr(id, chunkIdx),\n                    chunkData = handler._getChunkData(id, chunkIdx),\n                    domain = spec.endpointStore.get(id),\n                    promise = new qq.Promise();\n\n                // Add appropriate headers to the multipart upload request.\n                // Once these have been determined (asynchronously) attach the headers and send the chunk.\n                chunked.initHeaders(id, chunkIdx, chunkData.blob).then(function(headers, endOfUrl) {\n                    if (xhr._cancelled) {\n                        log(qq.format(\""Upload of item {}.{} cancelled. Upload will not start after successful signature request.\"", id, chunkIdx));\n                        promise.failure({error: \""Chunk upload cancelled\""});\n                    }\n                    else {\n                        var url = domain + \""/\"" + endOfUrl;\n                        handler._registerProgressHandler(id, chunkIdx, chunkData.size);\n                        upload.track(id, xhr, chunkIdx).then(promise.success, promise.failure);\n                        xhr.open(\""PUT\"", url, true);\n\n                        var hasContentType = false;\n                        qq.each(headers, function(name, val) {\n                            if (name === \""Content-Type\"") {\n                                hasContentType = true;\n                            }\n\n                            xhr.setRequestHeader(name, val);\n                        });\n\n                        // Workaround for IE Edge\n                        if (!hasContentType) {\n                            xhr.setRequestHeader(\""Content-Type\"", \""\"");\n                        }\n\n                        xhr.send(chunkData.blob);\n                    }\n                }, function() {\n                    promise.failure({error: \""Problem signing the chunk!\""}, xhr);\n                });\n\n                return promise;\n            },\n\n            send: function(id, chunkIdx) {\n                var promise = new qq.Promise();\n\n                chunked.setup(id).then(\n                    // The \""Initiate\"" request succeeded.  We are ready to send the first chunk.\n                    function() {\n                        chunked.put(id, chunkIdx).then(promise.success, promise.failure);\n                    },\n\n                    // We were unable to initiate the chunked upload process.\n                    function(errorMessage, xhr) {\n                        promise.failure({error: errorMessage}, xhr);\n                    }\n                );\n\n                return promise;\n            },\n\n            /**\n             * Sends an \""Initiate Multipart Upload\"" request to S3 via the REST API, but only if the MPU has not already been\n             * initiated.\n             *\n             * @param id Associated file ID\n             * @returns {qq.Promise} A promise that is fulfilled when the initiate request has been sent and the response has been parsed.\n             */\n            setup: function(id) {\n                var promise = new qq.Promise(),\n                    uploadId = handler._getPersistableData(id).uploadId,\n                    uploadIdPromise = new qq.Promise();\n\n                if (!uploadId) {\n                    handler._getPersistableData(id).uploadId = uploadIdPromise;\n                    requesters.initiateMultipart.send(id).then(\n                        function(uploadId) {\n                            handler._getPersistableData(id).uploadId = uploadId;\n                            uploadIdPromise.success(uploadId);\n                            promise.success(uploadId);\n                        },\n                        function(errorMsg, xhr) {\n                            handler._getPersistableData(id).uploadId = null;\n                            promise.failure(errorMsg, xhr);\n                            uploadIdPromise.failure(errorMsg, xhr);\n                        }\n                    );\n                }\n                else if (uploadId instanceof qq.Promise) {\n                    uploadId.then(function(uploadId) {\n                        promise.success(uploadId);\n                    });\n                }\n                else {\n                    promise.success(uploadId);\n                }\n\n                return promise;\n            }\n        },\n\n        requesters = {\n            abortMultipart: new qq.s3.AbortMultipartAjaxRequester({\n                endpointStore: endpointStore,\n                signatureSpec: signature,\n                cors: spec.cors,\n                log: log,\n                getBucket: function(id) {\n                    return upload.bucket.getName(id);\n                },\n                getHost: function(id) {\n                    return upload.host.getName(id);\n                },\n                getKey: function(id) {\n                    return upload.key.urlSafe(id);\n                }\n            }),\n\n            completeMultipart: new qq.s3.CompleteMultipartAjaxRequester({\n                endpointStore: endpointStore,\n                signatureSpec: signature,\n                cors: spec.cors,\n                log: log,\n                getBucket: function(id) {\n                    return upload.bucket.getName(id);\n                },\n                getHost: function(id) {\n                    return upload.host.getName(id);\n                },\n                getKey: function(id) {\n                    return upload.key.urlSafe(id);\n                }\n            }),\n\n            initiateMultipart: new qq.s3.InitiateMultipartAjaxRequester({\n                filenameParam: filenameParam,\n                endpointStore: endpointStore,\n                paramsStore: paramsStore,\n                signatureSpec: signature,\n                aclStore: aclStore,\n                reducedRedundancy: reducedRedundancy,\n                serverSideEncryption: serverSideEncryption,\n                cors: spec.cors,\n                log: log,\n                getContentType: function(id) {\n                    return handler._getMimeType(id);\n                },\n                getBucket: function(id) {\n                    return upload.bucket.getName(id);\n                },\n                getHost: function(id) {\n                    return upload.host.getName(id);\n                },\n                getKey: function(id) {\n                    return upload.key.urlSafe(id);\n                },\n                getName: function(id) {\n                    return getName(id);\n                }\n            }),\n\n            policySignature: new qq.s3.RequestSigner({\n                expectingPolicy: true,\n                signatureSpec: signature,\n                cors: spec.cors,\n                log: log\n            }),\n\n            restSignature: new qq.s3.RequestSigner({\n                endpointStore: endpointStore,\n                signatureSpec: signature,\n                cors: spec.cors,\n                log: log\n            })\n        },\n\n        simple = {\n            /**\n             * Used for simple (non-chunked) uploads to determine the parameters to send along with the request.  Part of this\n             * process involves asking the local server to sign the request, so this function returns a promise.  The promise\n             * is fulfilled when all parameters are determined, or when we determine that all parameters cannot be calculated\n             * due to some error.\n             *\n             * @param id File ID\n             * @returns {qq.Promise}\n             */\n            initParams: function(id) {\n                /*jshint -W040 */\n                var customParams = paramsStore.get(id);\n                customParams[filenameParam] = getName(id);\n\n                return qq.s3.util.generateAwsParams({\n                    endpoint: endpointStore.get(id),\n                    clockDrift: clockDrift,\n                    params: customParams,\n                    type: handler._getMimeType(id),\n                    bucket: upload.bucket.getName(id),\n                    key: handler.getThirdPartyFileId(id),\n                    accessKey: credentialsProvider.get().accessKey,\n                    sessionToken: credentialsProvider.get().sessionToken,\n                    acl: aclStore.get(id),\n                    expectedStatus: expectedStatus,\n                    minFileSize: validation.minSizeLimit,\n                    maxFileSize: validation.maxSizeLimit,\n                    reducedRedundancy: reducedRedundancy,\n                    region: region,\n                    serverSideEncryption: serverSideEncryption,\n                    signatureVersion: signature.version,\n                    log: log\n                },\n                qq.bind(requesters.policySignature.getSignature, this, id));\n            },\n\n            send: function(id) {\n                var promise = new qq.Promise(),\n                    xhr = handler._createXhr(id),\n                    fileOrBlob = handler.getFile(id);\n\n                handler._registerProgressHandler(id);\n                upload.track(id, xhr).then(promise.success, promise.failure);\n\n                // Delegate to a function the sets up the XHR request and notifies us when it is ready to be sent, along w/ the payload.\n                simple.setup(id, xhr, fileOrBlob).then(function(toSend) {\n                    log(\""Sending upload request for \"" + id);\n                    xhr.send(toSend);\n                }, promise.failure);\n\n                return promise;\n            },\n\n            /**\n             * Starts the upload process by delegating to an async function that determine parameters to be attached to the\n             * request.  If all params can be determined, we are called back with the params and the caller of this function is\n             * informed by invoking the `success` method on the promise returned by this function, passing the payload of the\n             * request.  If some error occurs here, we delegate to a function that signals a failure for this upload attempt.\n             *\n             * Note that this is only used by the simple (non-chunked) upload process.\n             *\n             * @param id File ID\n             * @param xhr XMLHttpRequest to use for the upload\n             * @param fileOrBlob `File` or `Blob` to send\n             * @returns {qq.Promise}\n             */\n            setup: function(id, xhr, fileOrBlob) {\n                var formData = new FormData(),\n                    endpoint = endpointStore.get(id),\n                    url = endpoint,\n                    promise = new qq.Promise();\n\n                simple.initParams(id).then(\n                    // Success - all params determined\n                    function(awsParams) {\n                        xhr.open(\""POST\"", url, true);\n\n                        qq.obj2FormData(awsParams, formData);\n\n                        // AWS requires the file field be named \""file\"".\n                        formData.append(\""file\"", fileOrBlob);\n\n                        promise.success(formData);\n                    },\n\n                    // Failure - we couldn't determine some params (likely the signature)\n                    function(errorMessage) {\n                        promise.failure({error: errorMessage});\n                    }\n                );\n\n                return promise;\n            }\n        },\n\n        upload = {\n            /**\n             * Note that this is called when an upload has reached a termination point,\n             * regardless of success/failure.  For example, it is called when we have\n             * encountered an error during the upload or when the file may have uploaded successfully.\n             *\n             * @param id file ID\n             */\n            bucket: {\n                promise: function(id) {\n                    var promise = new qq.Promise(),\n                        cachedBucket = handler._getFileState(id).bucket;\n\n                    if (cachedBucket) {\n                        promise.success(cachedBucket);\n                    }\n                    else {\n                        onGetBucket(id).then(function(bucket) {\n                            handler._getFileState(id).bucket = bucket;\n                            promise.success(bucket);\n                        }, promise.failure);\n                    }\n\n                    return promise;\n                },\n\n                getName: function(id) {\n                    return handler._getFileState(id).bucket;\n                }\n            },\n\n            host: {\n                promise: function(id) {\n                    var promise = new qq.Promise(),\n                        cachedHost = handler._getFileState(id).host;\n\n                    if (cachedHost) {\n                        promise.success(cachedHost);\n                    }\n                    else {\n                        onGetHost(id).then(function(host) {\n                            handler._getFileState(id).host = host;\n                            promise.success(host);\n                        }, promise.failure);\n                    }\n\n                    return promise;\n                },\n\n                getName: function(id) {\n                    return handler._getFileState(id).host;\n                }\n            },\n\n            done: function(id, xhr) {\n                var response = upload.response.parse(id, xhr),\n                    isError = response.success !== true;\n\n                if (isError && upload.response.shouldReset(response.code)) {\n                    log(\""This is an unrecoverable error, we must restart the upload entirely on the next retry attempt.\"", \""error\"");\n                    response.reset = true;\n                }\n\n                return {\n                    success: !isError,\n                    response: response\n                };\n            },\n\n            key: {\n                promise: function(id) {\n                    var promise = new qq.Promise(),\n                        key = handler.getThirdPartyFileId(id);\n\n                    /* jshint eqnull:true */\n                    if (key == null) {\n                        handler._setThirdPartyFileId(id, promise);\n                        onGetKeyName(id, getName(id)).then(\n                            function(keyName) {\n                                handler._setThirdPartyFileId(id, keyName);\n                                promise.success(keyName);\n                            },\n                            function(errorReason) {\n                                handler._setThirdPartyFileId(id, null);\n                                promise.failure(errorReason);\n                            }\n                        );\n                    }\n                    else if (qq.isGenericPromise(key)) {\n                        key.then(promise.success, promise.failure);\n                    }\n                    else {\n                        promise.success(key);\n                    }\n\n                    return promise;\n                },\n\n                urlSafe: function(id) {\n                    var encodedKey = handler.getThirdPartyFileId(id);\n                    return qq.s3.util.uriEscapePath(encodedKey);\n                }\n            },\n\n            response: {\n                parse: function(id, xhr) {\n                    var response = {},\n                        parsedErrorProps;\n\n                    try {\n                        log(qq.format(\""Received response status {} with body: {}\"", xhr.status, xhr.responseText));\n\n                        if (xhr.status === expectedStatus) {\n                            response.success = true;\n                        }\n                        else {\n                            parsedErrorProps = upload.response.parseError(xhr.responseText);\n\n                            if (parsedErrorProps) {\n                                response.error = parsedErrorProps.message;\n                                response.code = parsedErrorProps.code;\n                            }\n                        }\n                    }\n                    catch (error) {\n                        log(\""Error when attempting to parse xhr response text (\"" + error.message + \"")\"", \""error\"");\n                    }\n\n                    return response;\n                },\n\n                /**\n                 * This parses an XML response by extracting the \""Message\"" and \""Code\"" elements that accompany AWS error responses.\n                 *\n                 * @param awsResponseXml XML response from AWS\n                 * @returns {object} Object w/ `code` and `message` properties, or undefined if we couldn't find error info in the XML document.\n                 */\n                parseError: function(awsResponseXml) {\n                    var parser = new DOMParser(),\n                        parsedDoc = parser.parseFromString(awsResponseXml, \""application/xml\""),\n                        errorEls = parsedDoc.getElementsByTagName(\""Error\""),\n                        errorDetails = {},\n                        codeEls, messageEls;\n\n                    if (errorEls.length) {\n                        codeEls = parsedDoc.getElementsByTagName(\""Code\"");\n                        messageEls = parsedDoc.getElementsByTagName(\""Message\"");\n\n                        if (messageEls.length) {\n                            errorDetails.message = messageEls[0].textContent;\n                        }\n\n                        if (codeEls.length) {\n                            errorDetails.code = codeEls[0].textContent;\n                        }\n\n                        return errorDetails;\n                    }\n                },\n\n                // Determine if the upload should be restarted on the next retry attempt\n                // based on the error code returned in the response from AWS.\n                shouldReset: function(errorCode) {\n                    /*jshint -W014 */\n                    return errorCode === \""EntityTooSmall\""\n                        || errorCode === \""InvalidPart\""\n                        || errorCode === \""InvalidPartOrder\""\n                        || errorCode === \""NoSuchUpload\"";\n                }\n            },\n\n            start: function(params) {\n                var id = params.id;\n                var optChunkIdx = params.chunkIdx;\n\n                var promise = new qq.Promise();\n\n                upload.key.promise(id).then(function() {\n                    upload.bucket.promise(id).then(function() {\n                        upload.host.promise(id).then(function() {\n                            /* jshint eqnull:true */\n                            if (optChunkIdx == null) {\n                                simple.send(id).then(promise.success, promise.failure);\n                            }\n                            else {\n                                chunked.send(id, optChunkIdx).then(promise.success, promise.failure);\n                            }\n                        });\n                    });\n                },\n                function(errorReason) {\n                    promise.failure({error: errorReason});\n                });\n\n                return promise;\n            },\n\n            track: function(id, xhr, optChunkIdx) {\n                var promise = new qq.Promise();\n\n                xhr.onreadystatechange = function() {\n                    if (xhr.readyState === 4) {\n                        var result;\n\n                        /* jshint eqnull:true */\n                        if (optChunkIdx == null) {\n                            result = upload.done(id, xhr);\n                            promise[result.success ? \""success\"" : \""failure\""](result.response, xhr);\n                        }\n                        else {\n                            chunked.done(id, xhr, optChunkIdx);\n                            result = upload.done(id, xhr);\n                            promise[result.success ? \""success\"" : \""failure\""](result.response, xhr);\n                        }\n                    }\n                };\n\n                return promise;\n            }\n        };\n\n    qq.extend(this, {\n        uploadChunk: upload.start,\n        uploadFile: function(id) {\n            return upload.start({ id: id });\n        }\n    });\n\n    qq.extend(this, new qq.XhrUploadHandler({\n        options: qq.extend({namespace: \""s3\""}, spec),\n        proxy: qq.extend({getEndpoint: spec.endpointStore.get}, proxy)\n    }));\n\n    qq.override(this, function(super_) {\n        return {\n            expunge: function(id) {\n                var uploadId = handler._getPersistableData(id) && handler._getPersistableData(id).uploadId,\n                    existedInLocalStorage = handler._maybeDeletePersistedChunkData(id);\n\n                if (uploadId !== undefined && existedInLocalStorage) {\n                    requesters.abortMultipart.send(id, uploadId);\n                }\n\n                super_.expunge(id);\n            },\n\n            finalizeChunks: function(id) {\n                return chunked.combine(id);\n            },\n\n            _getLocalStorageId: function(id) {\n                var baseStorageId = super_._getLocalStorageId(id),\n                    bucketName = upload.bucket.getName(id);\n\n                return baseStorageId + \""-\"" + bucketName;\n            }\n        };\n    });\n};\n"",""/*globals qq */\n/**\n * Upload handler used by the upload to S3 module that assumes the current user agent does not have any support for the\n * File API, and, therefore, makes use of iframes and forms to submit the files directly to S3 buckets via the associated\n * AWS API.\n *\n * @param options Options passed from the base handler\n * @param proxy Callbacks & methods used to query for or push out data/changes\n */\nqq.s3.FormUploadHandler = function(options, proxy) {\n    \""use strict\"";\n\n    var handler = this,\n        clockDrift = options.clockDrift,\n        onUuidChanged = proxy.onUuidChanged,\n        getName = proxy.getName,\n        getUuid = proxy.getUuid,\n        log = proxy.log,\n        onGetBucket = options.getBucket,\n        onGetKeyName = options.getKeyName,\n        filenameParam = options.filenameParam,\n        paramsStore = options.paramsStore,\n        endpointStore = options.endpointStore,\n        aclStore = options.aclStore,\n        reducedRedundancy = options.objectProperties.reducedRedundancy,\n        region = options.objectProperties.region,\n        serverSideEncryption = options.objectProperties.serverSideEncryption,\n        validation = options.validation,\n        signature = options.signature,\n        successRedirectUrl = options.iframeSupport.localBlankPagePath,\n        credentialsProvider = options.signature.credentialsProvider,\n        getSignatureAjaxRequester = new qq.s3.RequestSigner({\n            signatureSpec: signature,\n            cors: options.cors,\n            log: log\n        });\n\n    if (successRedirectUrl === undefined) {\n        throw new Error(\""successRedirectEndpoint MUST be defined if you intend to use browsers that do not support the File API!\"");\n    }\n\n    /**\n     * Attempt to parse the contents of an iframe after receiving a response from the server.  If the contents cannot be\n     * read (perhaps due to a security error) it is safe to assume that the upload was not successful since Amazon should\n     * have redirected to a known endpoint that should provide a parseable response.\n     *\n     * @param id ID of the associated file\n     * @param iframe target of the form submit\n     * @returns {boolean} true if the contents can be read, false otherwise\n     */\n    function isValidResponse(id, iframe) {\n        var response,\n            endpoint = options.endpointStore.get(id),\n            bucket = handler._getFileState(id).bucket,\n            doc,\n            innerHtml,\n            responseData;\n\n        //IE may throw an \""access is denied\"" error when attempting to access contentDocument on the iframe in some cases\n        try {\n            // iframe.contentWindow.document - for IE<7\n            doc = iframe.contentDocument || iframe.contentWindow.document;\n            innerHtml = doc.body.innerHTML;\n\n            responseData = qq.s3.util.parseIframeResponse(iframe);\n            if (responseData.bucket === bucket &&\n                responseData.key === qq.s3.util.encodeQueryStringParam(handler.getThirdPartyFileId(id))) {\n\n                return true;\n            }\n\n            log(\""Response from AWS included an unexpected bucket or key name.\"", \""error\"");\n\n        }\n        catch (error) {\n            log(\""Error when attempting to parse form upload response (\"" + error.message + \"")\"", \""error\"");\n        }\n\n        return false;\n    }\n\n    function generateAwsParams(id) {\n        /*jshint -W040 */\n        var customParams = paramsStore.get(id);\n\n        customParams[filenameParam] = getName(id);\n\n        return qq.s3.util.generateAwsParams({\n            endpoint: endpointStore.get(id),\n            clockDrift: clockDrift,\n            params: customParams,\n            bucket: handler._getFileState(id).bucket,\n            key: handler.getThirdPartyFileId(id),\n            accessKey: credentialsProvider.get().accessKey,\n            sessionToken: credentialsProvider.get().sessionToken,\n            acl: aclStore.get(id),\n            minFileSize: validation.minSizeLimit,\n            maxFileSize: validation.maxSizeLimit,\n            successRedirectUrl: successRedirectUrl,\n            reducedRedundancy: reducedRedundancy,\n            region: region,\n            serverSideEncryption: serverSideEncryption,\n            signatureVersion: signature.version,\n            log: log\n        },\n        qq.bind(getSignatureAjaxRequester.getSignature, this, id));\n    }\n\n    /**\n     * Creates form, that will be submitted to iframe\n     */\n    function createForm(id, iframe) {\n        var promise = new qq.Promise(),\n            method = \""POST\"",\n            endpoint = options.endpointStore.get(id),\n            fileName = getName(id);\n\n        generateAwsParams(id).then(function(params) {\n            var form = handler._initFormForUpload({\n                method: method,\n                endpoint: endpoint,\n                params: params,\n                paramsInBody: true,\n                targetName: iframe.name\n            });\n\n            promise.success(form);\n        }, function(errorMessage) {\n            promise.failure(errorMessage);\n            handleFinishedUpload(id, iframe, fileName, {error: errorMessage});\n        });\n\n        return promise;\n    }\n\n    function handleUpload(id) {\n        var iframe = handler._createIframe(id),\n            input = handler.getInput(id),\n            promise = new qq.Promise();\n\n        createForm(id, iframe).then(function(form) {\n            form.appendChild(input);\n\n            // Register a callback when the response comes in from S3\n            handler._attachLoadEvent(iframe, function(response) {\n                log(\""iframe loaded\"");\n\n                // If the common response handler has determined success or failure immediately\n                if (response) {\n                    // If there is something fundamentally wrong with the response (such as iframe content is not accessible)\n                    if (response.success === false) {\n                        log(\""Amazon likely rejected the upload request\"", \""error\"");\n                        promise.failure(response);\n                    }\n                }\n                // The generic response (iframe onload) handler was not able to make a determination regarding the success of the request\n                else {\n                    response = {};\n                    response.success = isValidResponse(id, iframe);\n\n                    // If the more specific response handle detected a problem with the response from S3\n                    if (response.success === false) {\n                        log(\""A success response was received by Amazon, but it was invalid in some way.\"", \""error\"");\n                        promise.failure(response);\n                    }\n                    else {\n                        qq.extend(response, qq.s3.util.parseIframeResponse(iframe));\n                        promise.success(response);\n                    }\n                }\n\n                handleFinishedUpload(id, iframe);\n            });\n\n            log(\""Sending upload request for \"" + id);\n            form.submit();\n            qq(form).remove();\n        }, promise.failure);\n\n        return promise;\n    }\n\n    function handleFinishedUpload(id, iframe) {\n        handler._detachLoadEvent(id);\n        iframe && qq(iframe).remove();\n    }\n\n    qq.extend(this, new qq.FormUploadHandler({\n        options: {\n            isCors: false,\n            inputName: \""file\""\n        },\n\n        proxy: {\n            onCancel: options.onCancel,\n            onUuidChanged: onUuidChanged,\n            getName: getName,\n            getUuid: getUuid,\n            log: log\n        }\n    }));\n\n    qq.extend(this, {\n        uploadFile: function(id) {\n            var name = getName(id),\n                promise = new qq.Promise();\n\n            if (handler.getThirdPartyFileId(id)) {\n                if (handler._getFileState(id).bucket) {\n                    handleUpload(id).then(promise.success, promise.failure);\n                }\n                else {\n                    onGetBucket(id).then(function(bucket) {\n                        handler._getFileState(id).bucket = bucket;\n                        handleUpload(id).then(promise.success, promise.failure);\n                    });\n                }\n            }\n            else {\n                // The S3 uploader module will either calculate the key or ask the server for it\n                // and will call us back once it is known.\n                onGetKeyName(id, name).then(function(key) {\n                    onGetBucket(id).then(function(bucket) {\n                        handler._getFileState(id).bucket = bucket;\n                        handler._setThirdPartyFileId(id, key);\n                        handleUpload(id).then(promise.success, promise.failure);\n                    }, function(errorReason) {\n                        promise.failure({error: errorReason});\n                    });\n                }, function(errorReason) {\n                    promise.failure({error: errorReason});\n                });\n            }\n\n            return promise;\n        }\n    });\n};\n""]}"
d15b8fef74bd447019adda9a1ed8f1532c7dc37a,3305710, Taken from http://stackoverflow.com/questions/3305059/how-do-you-calculate-log-base-2-in-java-for-integers#3305710
567fe9f11bc4fa7c42ed9860313fa690a0600d9d,2688817,"    // this map is shared between sessions and threads, so it needs to be thread-safe (http://stackoverflow.com/a/2688817)"
ced35ddcc041c3705b1138382eb0b0a9cabed035,846487,"            <seealso cref=""!:http://stackoverflow.com/questions/846487/how-to-get-uri-escapedatastring-to-comply-with-rfc-3986""/>"
f6a1be14c5be494968de727294ece3f5ed37a250,3300464,    # http://stackoverflow.com/questions/3300464/how-can-i-get-dict-from-sqlite-query
35b59447f97bda94d1301d63ca26a40a480b88c4,4984143,    /// http://stackoverflow.com/questions/4984143/how-add-my-imagebutton-to-toolstrip</para>
36a5deff75147d76d7fe77f94219604488ec8581,2477787,        /// http://stackoverflow.com/questions/2477787/difference-between-appdomain-getassemblies-and-buildmanager-getreferencedassembl
621d664980f1139ed996e445db66e4d06cf92d6a,21049890,//#     See: http://stackoverflow.com/a/21049890/235704 and https://docs.angularjs.org/guide/bootstrap
fe5843e05f8129a1037be552ec7bc415eec89140,4994799,            // See: <http://stackoverflow.com/a/4994799/1219741>
6ef28a865f99eff47422c28c095ecd5dab2e6c5f,2610741,// http://stackoverflow.com/questions/2610497/change-an-html5-inputs-placeholder-color-with-css#2610741
bf9d24fee531091f046333d03d1e9bd65a5ba3cb,7688070,* [1]: https://stackoverflow.com/questions/7688070/why-is-comparing-the-constructor-property-of-two-windows-unreliable
f03cf01ffcb317d0c8bbe7227970f4f20a37dee0,9847580,    // http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
12a1a943cf310f4453fa48ca30fe981497e15739,14759506,"5188748,story,,,1,0,krisk,""IOS - UITableView sticky search bar and section header behavior"",http://stackoverflow.com/questions/14759506/ios-native-contacts-app-sticky-search-bar-and-section-header-behavior,,1360342221"
4ed2326a3d9d9cf9b18d5846176ce0455b490a1e,4931721,	 * Modified from function at http://stackoverflow.com/questions/4931721/getting-list-ips-from-cidr-notation-in-php
54b336d1c73c855ed570d8984abd48f833b98bee,14691479,% Daniel Lyons@http://stackoverflow.com/questions/14691479/how-to-find-the-mode-of-a-list-in-prolog
be08f4090b743bb7ca68bcd8ac2846eee8c61c9f,1028250,"{""pageContext"":{""posts"":[{""excerpt"":""RXJS에서의 Pull 와 Push UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim\n 출처(일부 내용): http://reactivex.io/rxjs/manual/overview.html#observable Single Multiple Pull Push Pull  and  Push  are two different protocols that describe how a data  Producer…"",""html"":""<h1 id=\""rxjs에서의-pull-와-push\""><a href=\""#rxjs%EC%97%90%EC%84%9C%EC%9D%98-pull-%EC%99%80-push\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>RXJS에서의 Pull 와 Push</h1>\n<p>UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim\n<a href=\""http://reactivex.io/rxjs/manual/overview.html#observable\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">출처(일부 내용): http://reactivex.io/rxjs/manual/overview.html#observable</a></p>\n<hr>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Single</th>\n<th>Multiple</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Pull</strong></td>\n<td><a href=\""https://developer.mozilla.org/en-US/docs/Glossary/Function\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\""><code class=\""language-text\"">Function</code></a></td>\n<td><a href=\""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\""><code class=\""language-text\"">Iterator</code></a></td>\n</tr>\n<tr>\n<td><strong>Push</strong></td>\n<td><a href=\""https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\""><code class=\""language-text\"">Promise</code></a></td>\n<td><a href=\""../class/es6/Observable.js~Observable.html\""><code class=\""language-text\"">Observable</code></a></td>\n</tr>\n</tbody>\n</table>\n<p><em>Pull</em> and <em>Push</em> are two different protocols that describe how a data <em>Producer</em> can communicate with a data <em>Consumer</em>.</p>\n<p><em>Pull</em> 와 <em>Push</em>는 어떻게 데이터<em>공급자</em>와 데이터<em>생산자</em> 서로 작용할지를 표현하는 서로 다른 규약이다.</p>\n<p><strong>What is Pull?</strong> In Pull systems, the Consumer determines when it receives data from the data Producer. The Producer itself is unaware of when the data will be delivered to the Consumer.\n<strong>Pull은 무엇인가?</strong> Pull 체계에서, 소비자는 데이터 생산자로부터 데이터를 받을때를 결정한다. 공급자 자체는 언제 데이터가 소비자에게 전달되지를 알지 못한다.</p>\n<p>Every JavaScript Function is a Pull system. The function is a Producer of data, and the code that calls the function is consuming it by \""pulling\"" out a <em>single</em> return value from its call.\n모든 자바스트립트를 Pull 시스템입니다. 함수는 데이터의 공급자이고, 그리고 함수가 호출하는 코드는 <em>single</em>리턴 값을 \""pulling\"" 함으로써 소비하고 있다.</p>\n<p>ES2015 introduced <a href=\""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">generator functions and iterators</a> (<code class=\""language-text\"">function*</code>), another type of Pull system. Code that calls <code class=\""language-text\"">iterator.next()</code> is the Consumer, \""pulling\"" out <em>multiple</em> values from the iterator (the Producer).</p>\n<p>ES2015는 Pull 시스템의 또다른 타입 <a href=\""https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">제너레이터 함수 그리고  iterators</a> (<code class=\""language-text\"">function*</code>)을 도입했다. <code class=\""language-text\"">iterator.next()</code> 호출하는 코드는 소비자이고, iterator(생산자)로부터 <em>multiple</em> 값들을 \""pulling\"" 하면서</p>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Producer</th>\n<th>Consumer</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Pull</strong></td>\n<td><strong>Passive:</strong> 요청될때 데이터를 생산한다.</td>\n<td><strong>Active:</strong> 데이터가 요청될때를 결정한다.</td>\n</tr>\n<tr>\n<td><strong>Push</strong></td>\n<td><strong>Active:</strong> 자신의 페이스대로 데이터를 생산한다.</td>\n<td><strong>Passive:</strong> 받은 데이터에 받응한다.</td>\n</tr>\n</tbody>\n</table>\n<p><strong>What is Push?</strong> In Push systems, the Producer determines when to send data to the Consumer. The Consumer is unaware of when it will receive that data.</p>\n<p><strong>무엇이 Push인가?</strong> Push systems에서 , 공급자는 언제 소비자에게 데이터를 보낼지를 결정한다. 소비자는 언제 데이터가 받게 될지를 모른다.</p>\n<p>Promises are the most common type of Push system in JavaScript today. A Promise (the Producer) delivers a resolved value to registered callbacks (the Consumers), but unlike functions, it is the Promise which is in charge of determining precisely when that value is \""pushed\"" to the callbacks.</p>\n<p>Promises는 오늘날 자바스크립에서 가장 일반적인 Push 시스템 유형이다. Promise(생산자)는 등록된 콜백에게 resolved 값을 전달하지만, 이것은 함수와 같지는 않다.\n, 프로미스는 값이 콜백으로 \""pushed\""될때를 정확하게 결정하는 부분에 있다.</p>\n<p>RxJS introduces Observables, a new Push system for JavaScript. An Observable is a Producer of multiple values, \""pushing\"" them to Observers (Consumers).</p>\n<p>자바스크립트 위한 새로운 Push system인 RxJS는  Observables 도입했다. Observers(소비자)에게 pushing 하는 Observable는 다중 값 공급자이다.</p>\n<ul>\n<li>\n<p>A <strong>Function</strong> is a lazily evaluated computation that synchronously returns a single value on invocation.</p>\n</li>\n<li>\n<p>A <strong>Function</strong>은  동기적으로 실행에 대한 단일 값으로 리턴된 느리게 측정되는 연산이다.</p>\n</li>\n<li>\n<p>A <strong>generator</strong> is a lazily evaluated computation that synchronously returns zero to (potentially) infinite values on iteration.</p>\n</li>\n<li>\n<p>A <strong>generator</strong>는 동기적으로 iteration에 대한 0에서 (잠재적으로)무한한 값들을 리턴하는 느긋하게 측정되는 연산이다.</p>\n</li>\n<li>\n<p>A <strong>Promise</strong> is a computation that may (or may not) eventually return a single value.</p>\n</li>\n<li>\n<p><strong>Promise</strong>는 결국 단일값으로 리턴되거나 그렇지 않은 연산이다.</p>\n</li>\n<li>\n<p>An <strong>Observable</strong> is a lazily evaluated computation that can synchronously or asynchronously return zero to (potentially) infinite values from the time it's invoked onwards.</p>\n</li>\n<li>\n<p><strong>Observable</strong>은 동기적이거나 또는 비동기적으로 O 에서 (잠재적으로) 시간에 따라서 계속 발생하는 무한한 값들을 리턴할수 있는 느긋하게 측정할수 있는 연산이다. </p>\n</li>\n</ul>\n<hr>\n<h1 id=\""요약\""><a href=\""#%EC%9A%94%EC%95%BD\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>요약</h1>\n<ol>\n<li>\n<p>Pull - 소비자는 데이터를 생산자로부터 언제 받을지를 결정한다.</p>\n<ul>\n<li>소비자가 데이터가 필요하면 소비자에게 가져오는 방식</li>\n</ul>\n</li>\n<li>\n<p>Push - 생산자는 데이터를 공급할 시점을 결정하고 소비자에게 데이터를 전달한다.</p>\n<ul>\n<li>생산자가 데이터를 소비자에게 넘겨주는 방식 </li>\n</ul>\n</li>\n</ol>"",""id"":""2d1a5b6c-5725-57ee-9e87-ca7718bafb1d"",""fields"":{""slug"":""rxjs-pull과-push-차이""},""frontmatter"":{""date"":""2017-08-22"",""title"":""RXJS - PULL과 PUSH 차이"",""category"":null,""tags"":[""Rxjs""],""banner"":null},""timeToRead"":3},{""excerpt"":""UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim 원본 출처 링크 : http://xgrommx.github.io/rx-book/content/guidelines/introduction/index.html 2.1 Introduction(소개) This document describes guidelines that aid in developing applications and libraries…"",""html"":""<p>UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim</p>\n<p><a href=\""http://xgrommx.github.io/rx-book/content/guidelines/introduction/index.html\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">원본 출처 링크 : http://xgrommx.github.io/rx-book/content/guidelines/introduction/index.html</a></p>\n<h1 id=\""21-introduction소개\""><a href=\""#21-introduction%EC%86%8C%EA%B0%9C\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>2.1 Introduction(소개)</h1>\n<p>This document describes guidelines that aid in developing applications and libraries that use the Reactive Extensions for RxJS library.\n이 문서는 리액티브 익스텐션을 사용하는 라이브러리와 어플케이션 개발에 대한 도움을 주기위한 RXJS 라이브러리에 대한 가이드라인을 제공합니다. </p>\n<p>The guidelines listed in this document have evolved over time by the Rx team during the development of the RxJS library.\n이 문서에서 가이드라인은 Rx 라이브러리 개발하는 동안에  Rx 팀에 의해서 발전된 부분도 포함하고 있습니다.</p>\n<p>As RxJS continues to evolve, these guidelines will continue to evolve with it. Make sure you have the latest version of this document.\nRxJS 지속적으로 발전하기 위해서, 이 가이드라인들도 RSJS 에 대해서 지속적으로 발전할것 입니다. 이 문서의 버전이 최신 버전인지 확인하세요. </p>\n<p>All information described in this document is merely a set of guidelines to aid development. These guidelines do not constitute an absolute truth. They are patterns that the team found helpful; not rules that should be followed blindly. There are situations where certain guidelines do not apply. The team has tried to list known situations where this is the case. It is up to each individual developer to decide if a certain guideline makes sense in each specific situation. </p>\n<p>이 문서에 집필된 모든 정보는 개발에 도움을 주위한 개발 가이드들의 단순한 모음들입니다. 이 가이드라인은  절대적인 진리를 나타내지는 않습니다.\n이 가이드라인은 단지 팀이 도움을 줄만한 것을 발견한 패턴일 뿐입니다.</p>\n<p>The guidelines in this document are listed in no particular order. There is neither total nor partial ordering in these guidelines.\n이 문서에서 가이드라인은 특정 순서로 나열되지 않았습니다. 이 가이드라인에서는 전체또는 부분적인 순서는 없습니다.</p>\n<p>Please contact us through the <a href=\""https://github.com/Reactive-Extensions/RxJS\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">RxJS Issues</a> for feedback on the guidelines, as well as questions on whether certain guidelines are applicable in specific situations.\n이 가이드라인에 대해서 피드백은 <a href=\""https://github.com/Reactive-Extensions/RxJS\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">RxJS Issues</a>를 통해서 연락해주시거나, 물론 어떤 가이드라인에서 특정 상황에 적용되는 부분에 질문도 같이 주셔도 됩니다.</p>\n<h2 id=\""the-introduction-to-reactive-programming-youve-been-missing리액티브-프로그래밍에서-당신이-놓치는-부분에-대한-간략한-소개\""><a href=\""#the-introduction-to-reactive-programming-youve-been-missing%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%97%90%EC%84%9C-%EB%8B%B9%EC%8B%A0%EC%9D%B4-%EB%86%93%EC%B9%98%EB%8A%94-%EB%B6%80%EB%B6%84%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B0%84%EB%9E%B5%ED%95%9C-%EC%86%8C%EA%B0%9C\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>The introduction to Reactive Programming you've been missing(리액티브 프로그래밍에서 당신이 놓치는 부분에 대한 간략한 소개)</h2>\n<p>(by <a href=\""https://twitter.com/andrestaltz\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">@andrestaltz</a>)</p>\n<p>So you're curious in learning this new thing called Reactive Programming, particularly its variant comprising of Rx, Bacon.js, RAC, and others.\n부분적으로 Rx, Bacon.js, RAC 그리고 다른 것들을 다양한게 포함하는 리액티브 프로그래밍이라고 불리우는 Rx를 배우는 것에 걱정할수있다.</p>\n<p>Learning it is hard, even harder by the lack of good material. When I started, I tried looking for tutorials. I found only a handful of practical guides, but they just scratched the surface and never tackled the challenge of building the whole architecture around it. Library documentations often don't help when you're trying to understand some function. I mean, honestly, look at this:\n배우는 것은 어렵고, 좋은 자료의 부족도 더 크다. 내가 했을때, 나는 튜토리얼을 찾으려고했다. 나는 오로지 부분적인 가이드라인 한 부분만 발견했고, 그리고 이 가이드라인은\n표면적인 부분만 나와있고, 리액티브에 대한 전체적인 구조에 대한 이해에 대한 도전을 절대 할수없었다. 라이브러리 문서들은 당신이 뭔가 어떤 기능에 대해서 이해하려고 하면 보통 도움은 주지 않는다. 나는 정말로, 진짜로 , 이것을 찾았다:</p>\n<blockquote>\n<p><strong>Rx.Observable.prototype.flatMapLatest(selector, [thisArg])</strong></p>\n</blockquote>\n<blockquote>\n<p>Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. observable 시퀀스의 각각의 요소는 엘리멘트의 인덱스의 결합에 의해서 새로운 observable sequences의 시퀀스로 나오고 그리고 나면   observable sequences의 observable sequence는 가장 최근에 observable sequence로부터 오로지 값들을 주는 observable sequence로 변화된다.</p>\n</blockquote>\n<p>Holy cow.\n어익후(맙소사!)</p>\n<p>I've read two books, one just painted the big picture, while the other dived into how to use the Reactive library. I ended up learning Reactive Programming the hard way: figuring it out while building with it. At my work in <a href=\""https://www.futurice.com\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Futurice</a> I got to use it in a real project, and had the <a href=\""http://blog.futurice.com/top-7-tips-for-rxjava-on-android\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">support of some colleagues</a> when I ran into troubles.</p>\n<p>나는 책을 2권 읽었고, 한번 간단하게 큰그림을 그렸고, 어떻게 리액티브 라이브러리를 사용하지는 깊이 있게 분석했다. 나는 꾸준하게 리액티브 프로그래밍을 공부하는것으로 끝냈다:\n이해를 하는 동안에 나는 뭔가를 발견했다. <a href=\""https://www.futurice.com\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Futurice</a>에 작업에 나는 이것을 실제 프로젝트에 사용할수 있었고, 내가 문제에 직면했을때 <a href=\""http://blog.futurice.com/top-7-tips-for-rxjava-on-android\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">support of some colleagues</a>을 가질수 있다.</p>\n<p>The hardest part of the learning journey is <strong>thinking in Reactive</strong>. It's a lot about letting go of old imperative and stateful habits of typical programming, and forcing your brain to work in a different paradigm. I haven't found any guide on the internet in this aspect, and I think the world deserves a practical tutorial on how to think in Reactive, so that you can get started. Library documentation can light your way after that. I hope this helps you.</p>\n<p>배움의 여정에서 가장 큰 부분은  <strong>thinking in Reactive</strong> 이다. 이것은 일반적인 프로그래밍에서 오래되고 반드시해야하고 유지해야할 습관을 가질수 있도록 하는 하고 다른 패러다임에서 당신의 뇌가 동작하도록 한다. 이런한 관점을 나에서 어떤 가이드에서도 나는 찾지 못했고 , 어떻게 내가 리액티브하게 생각할지에 대한 실질적인 튜토리얼이 있어야 한다고 생각했고 나는 그래서 시작할수 있었다. 라이브러리 문서는 당신의 길을 안내할 것이다. 나는 이것이 당신에 도움을 주길 바란다.</p>\n<h2 id=\""what-is-reactive-programming무엇이-리액티브-프로그래밍인가\""><a href=\""#what-is-reactive-programming%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B8%EA%B0%80\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>\""What is Reactive Programming?\""(무엇이 리액티브 프로그래밍인가?)</h2>\n<p>There are plenty of bad explanations and definitions out there on the internet. <a href=\""https://en.wikipedia.org/wiki/Reactive_programming\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Wikipedia</a> is too generic and theoretical as usual. <a href=\""http://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Stackoverflow</a>'s canonical answer is obviously not suitable for newcomers. <a href=\""http://www.reactivemanifesto.org/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Reactive Manifesto</a> sounds like the kind of thing you show to your project manager or the businessmen at your company. Microsoft's <a href=\""https://rx.codeplex.com/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Rx terminology</a> \""Rx = Observables + LINQ + Schedulers\"" is so heavy and Microsoftish that most of us are left confused. Terms like \""reactive\"" and \""propagation of change\"" don't convey anything specifically different to what your typical MV* and favorite language already does. Of course my framework views react to the models. Of course change is propagated. If it wouldn't, nothing would be rendered.</p>\n<p>So let's cut the bullshit. </p>\n<p>많은 나쁜 설명과 정의들이 인터넷에 있다.<a href=\""https://en.wikipedia.org/wiki/Reactive_programming\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Wikipedia</a>는 흔히 너무 포괄적이거나 이론적이다.\n<a href=\""http://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Stackoverflow</a>의 표준적인 답변은 애매하게도 초심자에게는 적합하지는 않다.\n<a href=\""http://www.reactivemanifesto.org/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Reactive Manifesto</a>는 회사에서 비지니스맨이나 프로젝트 매니저에게 보보여주는 같은 이야길 해댄다.\nMicrosoft's <a href=\""https://rx.codeplex.com/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Rx terminology</a> \""Rx = Observables + LINQ + Schedulers\""는 너무 무겁고 우리가 여전히 혼동하기스런 마이크로소프트스럽다.\n<code class=\""language-text\"">리액티브</code> 그리고 <code class=\""language-text\"">변화의 전파</code> 같은 용어들은 무엇이 당신의 전형적인 MV*나 선호하는 언어로 이미 했었던 것과 어떤 명확한 차이를 있는지를 전달해주지 않는다.\n물론 나의 관점에서 뷰는 모델에 반응한다. 물론 변화도 전파된다. 만약 그렇지 않는다면, 어떤것도 되지 않을것이다.</p>\n<p>그래서 이제 허튼 소리 그만하고.</p>\n<h4 id=\""reactive-programming-is-programming-with-asynchronous-data-streams리액티브-프로그래밍은-비동기적인-데이터-스트림을-가지고-프로그래밍을-하는것이다\""><a href=\""#reactive-programming-is-programming-with-asynchronous-data-streams%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%A0%81%EC%9D%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%9D%84-%EA%B0%80%EC%A7%80%EA%B3%A0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%84-%ED%95%98%EB%8A%94%EA%B2%83%EC%9D%B4%EB%8B%A4\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Reactive programming is programming with asynchronous data streams.(리액티브 프로그래밍은 비동기적인 데이터 스트림을 가지고 프로그래밍을 하는것이다.)</h4>\n<p>In a way, this isn't anything new. Event buses or your typical click events are really an asynchronous event stream, on which you can observe and do some side effects. Reactive is that idea on steroids. You are able to create data streams of anything, not just from click and hover events. Streams are cheap and ubiquitous, anything can be a stream: variables, user inputs, properties, caches, data structures, etc. For example, imagine your Twitter feed would be a data stream in the same fashion that click events are. You can listen to that stream and react accordingly.\n이 관점에서, 이것은 전혀 새로운 것이 아니다. 이벤트 버스나 일반적으로 클릭 이벤트들은 실제로 당신이 볼수있는 몇몇 사이드 이펙트를 가지는 비동기적인 이벤트 스트림이다.\n리액티브는 아주 강력한 아이디어이다. 당신이  클릭또는 호버 이벤트 뿐만 아니라 어떤 데이터 스트림도 생성할수 있다. 스트림은 아주 흔한것이다, 어떤것도 스트림이 될수있다: 변수들,, 사용자의 입력, 속성들, 캐쉬, 데이터 구조 및 기타. 예를들면, 트위터 피드에서 클릭 이벤트로 어떤 선호에 관한 것도 데이터 스트림 될수 있음을 생각해봐라.\n당신은 스트림을 들을수 있고 , 거기에 맞쳐서 반응할수 있다.</p>\n<p><strong>On top of that, you are given an amazing toolbox of functions to combine, create and filter any of those streams.</strong> That's where the \""functional\"" magic kicks in. A stream can be used as an input to another one. Even multiple streams can be used as inputs to another stream. You can <em>merge</em> two streams. You can <em>filter</em> a stream to get another one that has only those events you are interested in. You can <em>map</em> data values from one stream to another new one.\n<strong>무엇보다도, 그러한 스트림들을 생성 하고 분류하는 것을 기능들의 놀라움 도구박스가 주어진다.</strong>  이것은  <code class=\""language-text\"">함수적인</code> 마법으로 나타나는 것에 있다. 스트림은 어떤 다른 것에 대한 입력에 사용할수가 있다. 심지어든 복함 스트림은 다른 스트립의 입력에서도 사용할수있다. 당신을 두개 스트림들을 <em>merge</em>할수있다. 당신은 당신이 관심이 특정 이벤트 가지는 또다른 것으부터 스트림을 필터링할 수있다.</p>\n<p>If streams are so central to Reactive, let's take a careful look at them, starting with our familiar \""clicks on a button\"" event stream.\n만약 스트림이 가장 핵심이라면, 우리에게 익숙한 <code class=\""language-text\"">버튼에 대한 클릭</code> 이벤트 스트림을 가지고서, 이것을 주위깊게 봐야한다.\n<img src=\""http://i.imgur.com/cL4MOsS.png\"" alt=\""Click event stream\""></p>\n<p>A stream is a sequence of <strong>ongoing events ordered in time</strong>. It can emit three different things: a value (of some type), an error, or a \""completed\"" signal. Consider that the \""completed\"" takes place, for instance, when the current window or view containing that button is closed.</p>\n<p>스트림은 <strong>시간 순서대로 계속 진행중인 이벤트</strong>의 연속이다. 스트림은 3가지 다른 것을 발산한다. 값 (다른 타입으로도), 에러, 또는 \""완료됨\"" 신호\n예들들면, 현재 화면이나 View에서 버튼이 닫히는것을 포함하고 있을때 ,\""완료됨\"" 일어날때를 생각해보자.</p>\n<p>We capture these emitted events only <strong>asynchronously</strong>, by defining a function that will execute when a value is emitted, another function when an error is emitted, and another function when 'completed' is emitted. Sometimes these last two can be omitted and you can just focus on defining the function for values. The \""listening\"" to the stream is called <strong>subscribing</strong>. The functions we are defining are observers. The stream is the subject (or \""observable\"") being observed. This is precisely the <a href=\""https://en.wikipedia.org/wiki/Observer_pattern\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Observer Design Pattern</a>.</p>\n<p>우리는 오로지 <strong>비동기적으로</strong> 이벤트를 발산하는것을 포착할수있다,  값을 발산할때 동작할 함수, 에러가 발생했을대 발산할 함수, 그리고 <code class=\""language-text\"">완료됨</code> 상태였을대 발상할 함수를 정의 함으로써 . 함수중 마지막 2개를 생략할수도 있고 당신은 단지 값에 대한 함수를 정의하는 것만 할수도 있다.\n스트림을 \""리스닝\"" 하나다는 것은 <strong>subscribing</strong> 하는 것이라고 부른다 그 함수들은 observers라고 정의할수있다. stream은 관찰할수 있는 subject(또는 \""observable\"")이다.</p>\n<p>An alternative way of drawing that diagram is with ASCII, which we will use in some parts of this tutorial:\n이 튜토리얼에서 우리가 사용할수 있는 아스키를 가지고 다이어그램을 대체한것이다.(역자: 아스키 코드 가지고 예를 들어보겠다는 이야기다.)</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">--a---b-c---d---X---|-&gt;\n\na, b, c, d 는 값은 발산된다.\nX 는 에러이다.\n| 는 &quot;완료&quot; 신호이다.\n---&gt; 이것은 타입라인이다.</code></pre></div>\n<p>Since this feels so familiar already, and I don't want you to get bored, let's do something new: we are going to create new click event streams transformed out of the original click event stream.</p>\n<p>이미 아주 친숙한 아주 느낌이기 때문에, 당신이 지루어 지길 바라지는 않는다, 새로운 예시를 들어보자: 우리는 본래의 클릭 이벤트 스트림에서 변형된  새로운 클릭 이벤트 스트림을 만들려고 한다.</p>\n<p>First, let's make a counter stream that indicates how many times a button was clicked. In common Reactive libraries, each stream has many functions attached to it, such as <code class=\""language-text\"">map</code>, <code class=\""language-text\"">filter</code>, <code class=\""language-text\"">scan</code>, etc. When you call one of these functions, such as <code class=\""language-text\"">clickStream.map(f)</code>, it returns a <strong>new stream</strong> based on the click stream. It does not modify the original click stream in any way. This is a property called <strong>immutability</strong>, and it goes together with Reactive streams just like pancakes are good with syrup. That allows us to chain functions like <code class=\""language-text\"">clickStream.map(f).scan(g)</code>:</p>\n<p>첫번째로, 얼마나 만힝 클릭 됬는지 가르키는 카운터 스트림을 만들어보자. 공통적으로 리액티브 라이브러리에서는, 각가의 스트림은 많은 함수들 , <code class=\""language-text\"">map</code>, <code class=\""language-text\"">filter</code>, <code class=\""language-text\"">scan</code>, 기타 등등을 가지고 있다. 만약 당신이 그 함수들중에 <code class=\""language-text\"">clickStream.map(f)</code> 같은 것을 호출한다면, 이것은 클릭 이벤트에 기반한 <strong>새로운 스트림</strong>을 리턴한다. 어떤 방법으로는 본래의 클릭 스트림을 수정하지는 않는다. 이것은 <strong>불변성</strong>이라고 불리우는 속성이고, 팬케이크에 좋은 시럽이 있는 것과 같이 리액티브 스트림을 포함한다. 이것은 <code class=\""language-text\"">clickStream.map(f).scan(g)</code> 같은 함수들의 체인닝을 허용한다.</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">  clickStream: ---c----c--c----c------c--&gt;\n               vvvvv map(c becomes 1) vvvv\n               ---1----1--1----1------1--&gt;\n               vvvvvvvvv scan(+) vvvvvvvvv\ncounterStream: ---1----2--3----4------5--&gt;</code></pre></div>\n<p>The <code class=\""language-text\"">map(f)</code> function replaces (into the new stream) each emitted value according to a function <code class=\""language-text\"">f</code> you provide. In our case, we mapped to the number 1 on each click. The <code class=\""language-text\"">scan(g)</code> function aggregates all previous values on the stream, producing value <code class=\""language-text\"">x = g(accumulated, current)</code>, where <code class=\""language-text\"">g</code> was simply the add function in this example. Then, <code class=\""language-text\"">counterStream</code> emits the total number of clicks whenever a click happens.</p>\n<p>To show the real power of Reactive, let's just say that you want to have a stream of \""double click\"" events. To make it even more interesting, let's say we want the new stream to consider triple clicks as double clicks, or in general, multiple clicks (two or more). Take a deep breath and imagine how you would do that in a traditional imperative and stateful fashion. I bet it sounds fairly nasty and involves some variables to keep state and some fiddling with time intervals.</p>\n<p>Well, in Reactive it's pretty simple. In fact, the logic is just <a href=\""http://jsfiddle.net/staltz/4gGgs/27/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">4 lines of code</a>.\nBut let's ignore code for now. Thinking in diagrams is the best way to understand and build streams, whether you're a beginner or an expert.</p>\n<p><img src=\""http://i.imgur.com/HMGWNO5.png\"" alt=\""Multiple clicks stream\""></p>\n<p>Grey boxes are functions transforming one stream into another. First we accumulate clicks in lists, whenever 250 milliseconds of \""event silence\"" has happened (that's what <code class=\""language-text\"">buffer(stream.throttle(250ms))</code> does, in a nutshell. Don't worry about understanding the details at this point, we are just demoing Reactive for now). The result is a stream of lists, from which we apply <code class=\""language-text\"">map()</code> to map each list to an integer matching the length of that list. Finally, we ignore <code class=\""language-text\"">1</code> integers using the <code class=\""language-text\"">filter(x &gt;= 2)</code> function. That's it: 3 operations to produce our intended stream. We can then subscribe (\""listen\"") to it to react accordingly how we wish.</p>\n<p>I hope you enjoy the beauty of this approach. This example is just the tip of the iceberg: you can apply the same operations on different kinds of streams, for instance, on a stream of API responses; on the other hand, there are many other functions available.</p>\n<h2 id=\""why-should-i-consider-adopting-rp\""><a href=\""#why-should-i-consider-adopting-rp\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>\""Why should I consider adopting RP?\""</h2>\n<p>Reactive Programming raises the level of abstraction of your code so you can focus on the interdependence of events that define the business logic, rather than having to constantly fiddle with a large amount of implementation details. Code in RP will likely be more concise.</p>\n<p>The benefit is more evident in modern webapps and mobile apps that are highly interactive with a multitude of UI events related to data events. 10 years ago, interaction with web pages was basically about submitting a long form to the backend and performing simple rendering to the frontend. Apps have evolved to be more real-time: modifying a single form field can automatically trigger a save to the backend, \""likes\"" to some content can be reflected in real time to other connected users, and so forth.</p>\n<p>Apps nowadays have an abundancy of real-time events of every kind that enable a highly interactive experience to the user. We need tools for properly dealing with that, and Reactive Programming is an answer.</p>\n<h2 id=\""thinking-in-rp-with-examples\""><a href=\""#thinking-in-rp-with-examples\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Thinking in RP, with examples</h2>\n<p>Let's dive into the real stuff. A real-world example with a step-by-step guide on how to think in RP. No synthetic examples, no half-explained concepts. By the end of this tutorial we will have produced real functioning code, while knowing why we did each thing.</p>\n<p>I picked <strong>JavaScript</strong> and <strong><a href=\""https://github.com/Reactive-Extensions/RxJS\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">RxJS</a></strong> as the tools for this, for a reason: JavaScript is the most familiar language out there at the moment, and the <a href=\""http://www.reactivex.io\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Rx* library family</a> is widely available for many languages and platforms (<a href=\""https://rx.codeplex.com/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">.NET</a>, <a href=\""https://github.com/Netflix/RxJava\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Java</a>, <a href=\""https://github.com/Netflix/RxJava/tree/master/language-adaptors/rxjava-scala\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Scala</a>, <a href=\""https://github.com/Netflix/RxJava/tree/master/language-adaptors/rxjava-clojure\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Clojure</a>,  <a href=\""https://github.com/Reactive-Extensions/RxJS\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">JavaScript</a>, <a href=\""https://github.com/Reactive-Extensions/Rx.rb\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Ruby</a>, <a href=\""https://github.com/Reactive-Extensions/RxPy\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Python</a>, <a href=\""https://github.com/Reactive-Extensions/RxCpp\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">C++</a>, <a href=\""https://github.com/ReactiveCocoa/ReactiveCocoa\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Objective-C/Cocoa</a>, <a href=\""https://github.com/Netflix/RxJava/tree/master/language-adaptors/rxjava-groovy\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Groovy</a>, etc). So whatever your tools are, you can concretely benefit by following this tutorial.</p>\n<h2 id=\""implementing-a-who-to-follow-suggestions-box\""><a href=\""#implementing-a-who-to-follow-suggestions-box\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Implementing a \""Who to follow\"" suggestions box</h2>\n<p>In Twitter there is this UI element that suggests other accounts you could follow:</p>\n<p><img src=\""http://i.imgur.com/eAlNb0j.png\"" alt=\""Twitter Who to follow suggestions box\""></p>\n<p>We are going to focus on imitating its core features, which are:</p>\n<ul>\n<li>On startup, load accounts data from the API and display 3 suggestions</li>\n<li>On clicking \""Refresh\"", load 3 other account suggestions into the 3 rows</li>\n<li>On click 'x' button on an account row, clear only that current account and display another</li>\n<li>Each row displays the account's avatar and links to their page</li>\n</ul>\n<p>We can leave out the other features and buttons because they are minor. And, instead of Twitter, which recently closed its API to the unauthorized public, let's build that UI for following people on Github. There's a <a href=\""https://developer.github.com/v3/users/#get-all-users\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Github API for getting users</a>.</p>\n<p>The complete code for this is ready at <a href=\""http://jsfiddle.net/staltz/8jFJH/48/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">http://jsfiddle.net/staltz/8jFJH/48/</a> in case you want to take a peak already.</p>\n<h2 id=\""request-and-response\""><a href=\""#request-and-response\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Request and response</h2>\n<p><strong>How do you approach this problem with Rx?</strong> Well, to start with, (almost) <em>everything can be a stream</em>. That's the Rx mantra. Let's start with the easiest feature: \""on startup, load 3 accounts data from the API\"". There is nothing special here, this is simply about (1) doing a request, (2) getting a response, (3) rendering the response. So let's go ahead and represent our requests as a stream. At first this will feel like overkill, but we need to start from the basics, right?</p>\n<p>On startup we need to do only one request, so if we model it as a data stream, it will be a stream with only one emitted value. Later, we know we will have many requests happening, but for now, it is just one.</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">--a------|-&gt;\n\nWhere a is the string &#39;https://api.github.com/users&#39;</code></pre></div>\n<p>This is a stream of URLs that we want to request. Whenever a request event happens, it tells us two things: when and what. \""When\"" the request should be executed is when the event is emitted. And \""what\"" should be requested is the value emitted: a string containing the URL.</p>\n<p>To create such stream with a single value is very simple in Rx*. The official terminology for a stream is \""Observable\"", for the fact that it can be observed, but I find it to be a silly name, so I call it <em>stream</em>.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">just</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'https://api.github.com/users'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>But now, that is just a stream of strings, doing no other operation, so we need to somehow make something happen when that value is emitted. That's done by <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypesubscribeobserver--onnext-onerror-oncompleted\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">subscribing</a> to the stream.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\"">requestStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// execute the request</span>\n  jQuery<span class=\""token punctuation\"">.</span><span class=\""token function\"">getJSON</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">,</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>responseData<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// ...</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span></code></pre></div>\n<p>Notice we are using a jQuery Ajax callback (which we assume you <a href=\""http://devdocs.io/jquery/jquery.getjson\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">should know already</a>) to handle the asynchronicity of the request operation. But wait a moment, Rx is for dealing with <strong>asynchronous</strong> data streams. Couldn't the response for that request be a stream containing the data arriving at some time in the future? Well, at a conceptual level, it sure looks like it, so let's try that.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\"">requestStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// execute the request</span>\n  <span class=\""token keyword\"">var</span> responseStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span> <span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    jQuery<span class=\""token punctuation\"">.</span><span class=\""token function\"">getJSON</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">done</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>response<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>response<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">fail</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>jqXHR<span class=\""token punctuation\"">,</span> status<span class=\""token punctuation\"">,</span> error<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onError</span><span class=\""token punctuation\"">(</span>error<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">always</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  \n  responseStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>response<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// do something with the response</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span></code></pre></div>\n<p>What <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablecreatesubscribe\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\""><code class=\""language-text\"">Rx.Observable.create()</code></a> does is create your own custom stream by explicitly informing each observer (or in other words, a \""subscriber\"") about data events (<code class=\""language-text\"">onNext()</code>) or errors (<code class=\""language-text\"">onError()</code>). What we did was just wrap that jQuery Ajax Promise. <strong>Excuse me, does this mean that a Promise is an Observable?</strong></p>\n<p> \n \n \n \n </p>\n<p><img src=\""http://www.myfacewhen.net/uploads/3324-amazed-face.gif\"" alt=\""Amazed\""></p>\n<p>Yes.</p>\n<p>Observable is Promise++. In Rx you can easily convert a Promise to an Observable by doing <code class=\""language-text\"">var stream = Rx.Observable.fromPromise(promise)</code>, so let's use that. The only difference is that Observables are not <a href=\""http://promises-aplus.github.io/promises-spec/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Promises/A+</a> compliant, but conceptually there is no clash. A Promise is simply an Observable with one single emitted value. Rx streams go beyond promises by allowing many returned values.</p>\n<p>This is pretty nice, and shows how Observables are at least as powerful as Promises. So if you believe the Promises hype, keep an eye on what Rx Observables are capable of.</p>\n<p>Now back to our example, if you were quick to notice, we have one <code class=\""language-text\"">subscribe()</code> call inside another, which is somewhat akin to callback hell. Also, the creation of <code class=\""language-text\"">responseStream</code> is dependent on <code class=\""language-text\"">requestStream</code>. As you heard before, in Rx there are simple mechanisms for transforming and creating new streams out of others, so we should be doing that. </p>\n<p>The one basic function that you should know by now is <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypemapselector-thisarg\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\""><code class=\""language-text\"">map(f)</code></a>, which takes each value of stream A, applies <code class=\""language-text\"">f()</code> on it, and produces a value on stream B. If we do that to our request and response streams, we can map request URLs to response Promises (disguised as streams). </p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> responseMetastream <span class=\""token operator\"">=</span> requestStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromPromise</span><span class=\""token punctuation\"">(</span>jQuery<span class=\""token punctuation\"">.</span><span class=\""token function\"">getJSON</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>Then we will have created a beast called \""<em>metastream</em>\"": a stream of streams. Don't panic yet. A metastream is a stream where each emitted value is yet another stream. You can think of it as <a href=\""https://en.wikipedia.org/wiki/Pointer_(computer_programming)\"">pointers</a>: each emitted value is a <em>pointer</em> to another stream. In our example, each request URL is mapped to a pointer to the promise stream containing the corresponding response.</p>\n<p><img src=\""http://i.imgur.com/HHnmlac.png\"" alt=\""Response metastream\""></p>\n<p>A metastream for responses looks confusing, and doesn't seem to help us at all. We just want a simple stream of responses, where each emitted value is a JSON object, not a 'Promise' of a JSON object. Say hi to <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypeflatmapselector-resultselector\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Mr. Flatmap</a>: a version of <code class=\""language-text\"">map()</code> that \""flattens\"" a metastream, by emitting on the \""trunk\"" stream everything that will be emitted on \""branch\"" streams. Flatmap is not a \""fix\"" and metastreams are not a bug, these are really the tools for dealing with asynchronous responses in Rx.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> responseStream <span class=\""token operator\"">=</span> requestStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">flatMap</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromPromise</span><span class=\""token punctuation\"">(</span>jQuery<span class=\""token punctuation\"">.</span><span class=\""token function\"">getJSON</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p><img src=\""http://i.imgur.com/Hi3zNzJ.png\"" alt=\""Response stream\""></p>\n<p>Nice. And because the response stream is defined according to request stream, <strong>if</strong> we have later on more events happening on request stream, we will have the corresponding response events happening on response stream, as expected:</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">requestStream:  --a-----b--c------------|-&gt;\nresponseStream: -----A--------B-----C---|-&gt;\n\n(lowercase is a request, uppercase is its response)</code></pre></div>\n<p>Now that we finally have a response stream, we can render the data we receive:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\"">responseStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>response<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// render `response` to the DOM however you wish</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>Joining all the code until now, we have:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">just</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'https://api.github.com/users'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token keyword\"">var</span> responseStream <span class=\""token operator\"">=</span> requestStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">flatMap</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromPromise</span><span class=\""token punctuation\"">(</span>jQuery<span class=\""token punctuation\"">.</span><span class=\""token function\"">getJSON</span><span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\nresponseStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>response<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// render `response` to the DOM however you wish</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<h2 id=\""the-refresh-button\""><a href=\""#the-refresh-button\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>The refresh button</h2>\n<p>I did not yet mention that the JSON in the response is a list with 100 users. The API only allows us to specify the page offset, and not the page size, so we're using just 3 data objects and wasting 97 others. We can ignore that problem for now, since later on we will see how to cache the responses.</p>\n<p>Everytime the refresh button is clicked, the request stream should emit a new URL, so that we can get a new response. We need two things: a stream of click events on the refresh button (mantra: anything can be a stream), and we need to change the request stream to depend on the refresh click stream. Gladly, RxJS comes with tools to make Observables from event listeners.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> refreshButton <span class=\""token operator\"">=</span> document<span class=\""token punctuation\"">.</span><span class=\""token function\"">querySelector</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'.refresh'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token keyword\"">var</span> refreshClickStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromEvent</span><span class=\""token punctuation\"">(</span>refreshButton<span class=\""token punctuation\"">,</span> <span class=\""token string\"">'click'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>Since the refresh click event doesn't itself carry any API URL, we need to map each click to an actual URL. Now we change the request stream to be the refresh click stream mapped to the API endpoint with a random offset parameter each time.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> refreshClickStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> randomOffset <span class=\""token operator\"">=</span> Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span><span class=\""token number\"">500</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> <span class=\""token string\"">'https://api.github.com/users?since='</span> <span class=\""token operator\"">+</span> randomOffset<span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>Because I'm dumb and I don't have automated tests, I just broke one of our previously built features. A request doesn't happen anymore on startup, it happens only when the refresh is clicked. Urgh. I need both behaviors: a request when <em>either</em> a refresh is clicked <em>or</em> the webpage was just opened.</p>\n<p>We know how to make a separate stream for each one of those cases:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> requestOnRefreshStream <span class=\""token operator\"">=</span> refreshClickStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> randomOffset <span class=\""token operator\"">=</span> Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span><span class=\""token number\"">500</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> <span class=\""token string\"">'https://api.github.com/users?since='</span> <span class=\""token operator\"">+</span> randomOffset<span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  \n<span class=\""token keyword\"">var</span> startupRequestStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">just</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'https://api.github.com/users'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>But how can we \""merge\"" these two into one? Well, there's <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypemergemaxconcurrent--other\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\""><code class=\""language-text\"">merge()</code></a>. Explained in the diagram dialect, this is what it does:</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">stream A: ---a--------e-----o-----&gt;\nstream B: -----B---C-----D--------&gt;\n          vvvvvvvvv merge vvvvvvvvv\n          ---a-B---C--e--D--o-----&gt;</code></pre></div>\n<p>It should be easy now:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> requestOnRefreshStream <span class=\""token operator\"">=</span> refreshClickStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> randomOffset <span class=\""token operator\"">=</span> Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span><span class=\""token number\"">500</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> <span class=\""token string\"">'https://api.github.com/users?since='</span> <span class=\""token operator\"">+</span> randomOffset<span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  \n<span class=\""token keyword\"">var</span> startupRequestStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">just</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'https://api.github.com/users'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>\n  requestOnRefreshStream<span class=\""token punctuation\"">,</span> startupRequestStream\n<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>There is an alternative and cleaner way of writing that, without the intermediate streams.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> refreshClickStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> randomOffset <span class=\""token operator\"">=</span> Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span><span class=\""token number\"">500</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> <span class=\""token string\"">'https://api.github.com/users?since='</span> <span class=\""token operator\"">+</span> randomOffset<span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">just</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'https://api.github.com/users'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>Even shorter, even more readable:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> refreshClickStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> randomOffset <span class=\""token operator\"">=</span> Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span><span class=\""token number\"">500</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> <span class=\""token string\"">'https://api.github.com/users?since='</span> <span class=\""token operator\"">+</span> randomOffset<span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'https://api.github.com/users'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>The <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypestartwithscheduler-args\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\""><code class=\""language-text\"">startWith()</code></a> function does exactly what you think it does. No matter how your input stream looks like, the output stream resulting of <code class=\""language-text\"">startWith(x)</code> will have <code class=\""language-text\"">x</code> at the beginning. But I'm not <a href=\""https://en.wikipedia.org/wiki/Don&#x27;t_repeat_yourself\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">DRY</a> enough, I'm repeating the API endpoint string. One way to fix this is by moving the <code class=\""language-text\"">startWith()</code> close to the <code class=\""language-text\"">refreshClickStream</code>, to essentially \""emulate\"" a refresh click on startup.  </p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'startup click'</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> randomOffset <span class=\""token operator\"">=</span> Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span><span class=\""token number\"">500</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> <span class=\""token string\"">'https://api.github.com/users?since='</span> <span class=\""token operator\"">+</span> randomOffset<span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>Nice. If you go back to the point where I \""broke the automated tests\"", you should see that the only difference with this last approach is that I added the <code class=\""language-text\"">startWith()</code>.</p>\n<h2 id=\""modelling-the-3-suggestions-with-streams\""><a href=\""#modelling-the-3-suggestions-with-streams\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Modelling the 3 suggestions with streams</h2>\n<p>Until now, we have only touched a <em>suggestion</em> UI element on the rendering step that happens in the responseStream's <code class=\""language-text\"">subscribe()</code>. Now with the refresh button, we have a problem: as soon as you click 'refresh', the current 3 suggestions are not cleared. New suggestions come in only after a response has arrived, but to make the UI look nice, we need to clean out the current suggestions when clicks happen on the refresh.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\"">refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// clear the 3 suggestion DOM elements </span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>No, not so fast, pal. This is bad, because we now have <strong>two</strong> subscribers that affect the suggestion DOM elements (the other one being <code class=\""language-text\"">responseStream.subscribe()</code>), and that doesn't really sound like <a href=\""https://en.wikipedia.org/wiki/Separation_of_concerns\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Separation of concerns</a>. Remember the Reactive mantra? </p>\n<p> \n \n \n </p>\n<p><img src=\""http://i.imgur.com/AIimQ8C.jpg\"" alt=\""Mantra\""></p>\n<p>So let's model a suggestion as a stream, where each emitted value is the JSON object containing the suggestion data. We will do this separately for each of the 3 suggestions. This is how the stream for suggestion #1 could look like:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> suggestion1Stream <span class=\""token operator\"">=</span> responseStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>listUsers<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// get one random user from the list</span>\n    <span class=\""token keyword\"">return</span> listUsers<span class=\""token punctuation\"">[</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span>listUsers<span class=\""token punctuation\"">.</span>length<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>The others, <code class=\""language-text\"">suggestion2Stream</code> and <code class=\""language-text\"">suggestion3Stream</code> can be simply copy pasted from <code class=\""language-text\"">suggestion1Stream</code>. This is not DRY, but it will keep our example simple for this tutorial, plus I think it's a good exercise to think how to avoid repetition in this case.</p>\n<p>Instead of having the rendering happen in responseStream's subscribe(), we do that here:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\"">suggestion1Stream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>suggestion<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// render the 1st suggestion to the DOM</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>Back to the \""on refresh, clear the suggestions\"", we can simply map refresh clicks to <code class=\""language-text\"">null</code> suggestion data, and include that in the <code class=\""language-text\"">suggestion1Stream</code>, as such:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> suggestion1Stream <span class=\""token operator\"">=</span> responseStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>listUsers<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// get one random user from the list</span>\n    <span class=\""token keyword\"">return</span> listUsers<span class=\""token punctuation\"">[</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span>listUsers<span class=\""token punctuation\"">.</span>length<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>\n    refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">{</span> <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>And when rendering, we interpret <code class=\""language-text\"">null</code> as \""no data\"", hence hiding its UI element.</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\"">suggestion1Stream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>suggestion<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>suggestion <span class=\""token operator\"">===</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// hide the first suggestion DOM element</span>\n  <span class=\""token punctuation\"">}</span>\n  <span class=\""token keyword\"">else</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// show the first suggestion DOM element</span>\n    <span class=\""token comment\"">// and render the data</span>\n  <span class=\""token punctuation\"">}</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>The big picture is now:</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">refreshClickStream: ----------o--------o----&gt;\n     requestStream: -r--------r--------r----&gt;\n    responseStream: ----R---------R------R--&gt;   \n suggestion1Stream: ----s-----N---s----N-s--&gt;\n suggestion2Stream: ----q-----N---q----N-q--&gt;\n suggestion3Stream: ----t-----N---t----N-t--&gt;</code></pre></div>\n<p>Where <code class=\""language-text\"">N</code> stands for <code class=\""language-text\"">null</code>.</p>\n<p>As a bonus, we can also render \""empty\"" suggestions on startup. That is done by adding <code class=\""language-text\"">startWith(null)</code> to the suggestion streams:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> suggestion1Stream <span class=\""token operator\"">=</span> responseStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>listUsers<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// get one random user from the list</span>\n    <span class=\""token keyword\"">return</span> listUsers<span class=\""token punctuation\"">[</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span>listUsers<span class=\""token punctuation\"">.</span>length<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>\n    refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">{</span> <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>Which results in:</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">refreshClickStream: ----------o---------o----&gt;\n     requestStream: -r--------r---------r----&gt;\n    responseStream: ----R----------R------R--&gt;   \n suggestion1Stream: -N--s-----N----s----N-s--&gt;\n suggestion2Stream: -N--q-----N----q----N-q--&gt;\n suggestion3Stream: -N--t-----N----t----N-t--&gt;</code></pre></div>\n<h2 id=\""closing-a-suggestion-and-using-cached-responses\""><a href=\""#closing-a-suggestion-and-using-cached-responses\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Closing a suggestion and using cached responses</h2>\n<p>There is one feature remaining to implement. Each suggestion should have its own 'x' button for closing it, and loading another in its place. At first thought, you could say it's enough to make a new request when any close button is clicked:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> close1Button <span class=\""token operator\"">=</span> document<span class=\""token punctuation\"">.</span><span class=\""token function\"">querySelector</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'.close1'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token keyword\"">var</span> close1ClickStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromEvent</span><span class=\""token punctuation\"">(</span>close1Button<span class=\""token punctuation\"">,</span> <span class=\""token string\"">'click'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token comment\"">// and the same for close2Button and close3Button</span>\n\n<span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'startup click'</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>close1ClickStream<span class=\""token punctuation\"">)</span> <span class=\""token comment\"">// we added this</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> randomOffset <span class=\""token operator\"">=</span> Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span><span class=\""token number\"">500</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> <span class=\""token string\"">'https://api.github.com/users?since='</span> <span class=\""token operator\"">+</span> randomOffset<span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>That does not work. It will close and reload <em>all</em> suggestions, rather than just only the one we clicked on. There are a couple of different ways of solving this, and to keep it interesting, we will solve it by reusing previous responses. The API's response page size is 100 users while we were using just 3 of those, so there is plenty of fresh data available. No need to request more.</p>\n<p>Again, let's think in streams. When a 'close1' click event happens, we want to use the <em>most recently emitted</em> response on <code class=\""language-text\"">responseStream</code> to get one random user from the list in the response. As such:</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">    requestStream: --r---------------&gt;\n   responseStream: ------R-----------&gt;\nclose1ClickStream: ------------c-----&gt;\nsuggestion1Stream: ------s-----s-----&gt;</code></pre></div>\n<p>In Rx* there is a combinator function called <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypecombinelatestargs-resultselector\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\""><code class=\""language-text\"">combineLatest</code></a> that seems to do what we need. It takes two streams A and B as inputs, and whenever either stream emits a value, <code class=\""language-text\"">combineLatest</code> joins the two most recently emitted values <code class=\""language-text\"">a</code> and <code class=\""language-text\"">b</code> from both streams and outputs a value <code class=\""language-text\"">c = f(x,y)</code>, where <code class=\""language-text\"">f</code> is a function you define. It is better explained with a diagram:</p>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">stream A: --a-----------e--------i--------&gt;\nstream B: -----b----c--------d-------q----&gt;\n          vvvvvvvv combineLatest(f) vvvvvvv\n          ----AB---AC--EC---ED--ID--IQ----&gt;\n\nwhere f is the uppercase function</code></pre></div>\n<p>We can apply combineLatest() on <code class=\""language-text\"">close1ClickStream</code> and <code class=\""language-text\"">responseStream</code>, so that whenever the close 1 button is clicked, we get the latest response emitted and produce a new value on <code class=\""language-text\"">suggestion1Stream</code>. On the other hand, combineLatest() is symmetric: whenever a new response is emitted on <code class=\""language-text\"">responseStream</code>, it will combine with the latest 'close 1' click to produce a new suggestion. That is interesting, because it allows us to simplify our previous code for <code class=\""language-text\"">suggestion1Stream</code>, like this:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> suggestion1Stream <span class=\""token operator\"">=</span> close1ClickStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">combineLatest</span><span class=\""token punctuation\"">(</span>responseStream<span class=\""token punctuation\"">,</span>             \n    <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>click<span class=\""token punctuation\"">,</span> listUsers<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n      <span class=\""token keyword\"">return</span> listUsers<span class=\""token punctuation\"">[</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span>listUsers<span class=\""token punctuation\"">.</span>length<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span>\n  <span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>\n    refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">{</span> <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>One piece is still missing in the puzzle. The combineLatest() uses the most recent of the two sources, but if one of those sources hasn't emitted anything yet, combineLatest() cannot produce a data event on the output stream. If you look at the ASCII diagram above, you will see that the output has nothing when the first stream emitted value <code class=\""language-text\"">a</code>. Only when the second stream emitted value <code class=\""language-text\"">b</code> could it produce an output value.</p>\n<p>There are different ways of solving this, and we will stay with the simplest one, which is simulating a click to the 'close 1' button on startup:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> suggestion1Stream <span class=\""token operator\"">=</span> close1ClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'startup click'</span><span class=\""token punctuation\"">)</span> <span class=\""token comment\"">// we added this</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">combineLatest</span><span class=\""token punctuation\"">(</span>responseStream<span class=\""token punctuation\"">,</span>             \n    <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>click<span class=\""token punctuation\"">,</span> listUsers<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n      <span class=\""token keyword\"">return</span> listUsers<span class=\""token punctuation\"">[</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span>listUsers<span class=\""token punctuation\"">.</span>length<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span>\n  <span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>\n    refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">{</span> <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<h2 id=\""wrapping-up\""><a href=\""#wrapping-up\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Wrapping up</h2>\n<p>And we're done. The complete code for all this was:</p>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token keyword\"">var</span> refreshButton <span class=\""token operator\"">=</span> document<span class=\""token punctuation\"">.</span><span class=\""token function\"">querySelector</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'.refresh'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token keyword\"">var</span> refreshClickStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromEvent</span><span class=\""token punctuation\"">(</span>refreshButton<span class=\""token punctuation\"">,</span> <span class=\""token string\"">'click'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token keyword\"">var</span> closeButton1 <span class=\""token operator\"">=</span> document<span class=\""token punctuation\"">.</span><span class=\""token function\"">querySelector</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'.close1'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token keyword\"">var</span> close1ClickStream <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromEvent</span><span class=\""token punctuation\"">(</span>closeButton1<span class=\""token punctuation\"">,</span> <span class=\""token string\"">'click'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token comment\"">// and the same logic for close2 and close3</span>\n\n<span class=\""token keyword\"">var</span> requestStream <span class=\""token operator\"">=</span> refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'startup click'</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> randomOffset <span class=\""token operator\"">=</span> Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span><span class=\""token number\"">500</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> <span class=\""token string\"">'https://api.github.com/users?since='</span> <span class=\""token operator\"">+</span> randomOffset<span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token keyword\"">var</span> responseStream <span class=\""token operator\"">=</span> requestStream\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">flatMap</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span> <span class=\""token punctuation\"">(</span>requestUrl<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromPromise</span><span class=\""token punctuation\"">(</span>$<span class=\""token punctuation\"">.</span><span class=\""token function\"">ajax</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">{</span>url<span class=\""token punctuation\"">:</span> requestUrl<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token keyword\"">var</span> suggestion1Stream <span class=\""token operator\"">=</span> close1ClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'startup click'</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">combineLatest</span><span class=\""token punctuation\"">(</span>responseStream<span class=\""token punctuation\"">,</span>             \n    <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>click<span class=\""token punctuation\"">,</span> listUsers<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n      <span class=\""token keyword\"">return</span> listUsers<span class=\""token punctuation\"">[</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">floor</span><span class=\""token punctuation\"">(</span>Math<span class=\""token punctuation\"">.</span><span class=\""token function\"">random</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token operator\"">*</span>listUsers<span class=\""token punctuation\"">.</span>length<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span>\n  <span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>\n    refreshClickStream<span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">{</span> <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">startWith</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token comment\"">// and the same logic for suggestion2Stream and suggestion3Stream</span>\n\nsuggestion1Stream<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>suggestion<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>suggestion <span class=\""token operator\"">===</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// hide the first suggestion DOM element</span>\n  <span class=\""token punctuation\"">}</span>\n  <span class=\""token keyword\"">else</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token comment\"">// show the first suggestion DOM element</span>\n    <span class=\""token comment\"">// and render the data</span>\n  <span class=\""token punctuation\"">}</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p><strong>You can see this working example at <a href=\""http://jsfiddle.net/staltz/8jFJH/48/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">http://jsfiddle.net/staltz/8jFJH/48/</a></strong></p>\n<p>That piece of code is small but dense: it features management of multiple events with proper separation of concerns, and even caching of responses. The functional style made the code look more declarative than imperative: we are not giving a sequence of instructions to execute, we are just <strong>telling what something is</strong> by defining relationships between streams. For instance, with Rx we told the computer that <em><code class=\""language-text\"">suggestion1Stream</code> <strong>is</strong> the 'close 1' stream combined with one user from the latest response, besides being <code class=\""language-text\"">null</code> when a refresh happens or program startup happened</em>.</p>\n<p>Notice also the impressive absence of control flow elements such as <code class=\""language-text\"">if</code>, <code class=\""language-text\"">for</code>, <code class=\""language-text\"">while</code>, and the typical callback-based control flow that you expect from a JavaScript application. You can even get rid of the <code class=\""language-text\"">if</code> and <code class=\""language-text\"">else</code> in the <code class=\""language-text\"">subscribe()</code> above by using <code class=\""language-text\"">filter()</code> if you want (I'll leave the implementation details to you as an exercise). In Rx, we have stream functions such as <code class=\""language-text\"">map</code>, <code class=\""language-text\"">filter</code>, <code class=\""language-text\"">scan</code>, <code class=\""language-text\"">merge</code>, <code class=\""language-text\"">combineLatest</code>, <code class=\""language-text\"">startWith</code>, and many more to control the flow of an event-driven program. This toolset of functions gives you more power in less code.</p>\n<h2 id=\""what-comes-next\""><a href=\""#what-comes-next\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>What comes next</h2>\n<p>If you think Rx* will be your preferred library for Reactive Programming, take a while to get acquainted with the <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">big list of functions</a> for transforming, combining, and creating Observables. If you want to understand those functions in diagrams of streams, take a look at <a href=\""https://github.com/Netflix/RxJava/wiki/Creating-Observables\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">RxJava's very useful documentation with marble diagrams</a>. Whenever you get stuck trying to do something, draw those diagrams, think on them, look at the long list of functions, and think more. This workflow has been effective in my experience.</p>\n<p>Once you start getting the hang of programming with Rx<em>, it is absolutely required to understand the concept of <a href=\""https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/creating.md#cold-vs-hot-observables\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Cold vs Hot Observables</a>. If you ignore this, it will come back and bite you brutally. You have been warned. Sharpen your skills further by learning real functional programming, and getting acquainted with issues such as side effects that affect Rx</em>.</p>\n<p>But Reactive Programming is not just Rx<em>. There is <a href=\""http://baconjs.github.io/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Bacon.js</a> which is intuitive to work with, without the quirks you sometimes encounter in Rx</em>. The <a href=\""http://elm-lang.org/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">Elm Language</a> lives in its own category: it's a Functional Reactive Programming <strong>language</strong> that compiles to JavaScript + HTML + CSS, and features a <a href=\""http://debug.elm-lang.org/\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">time travelling debugger</a>. Pretty awesome.</p>\n<p>Rx works great for event-heavy frontends and apps. But it is not just a client-side thing, it works great also in the backend and close to databases. In fact, <a href=\""http://techblog.netflix.com/2013/02/rxjava-netflix-api.html\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">RxJava is a key component for enabling server-side concurrency in Netflix's API</a>. Rx is not a framework restricted to one specific type of application or language. It really is a paradigm that you can use when programming any event-driven software.</p>\n<p>If this tutorial helped you, <a href=\""https://twitter.com/intent/tweet?original_referer=https%3A%2F%2Fgist.github.com%2Fstaltz%2F868e7e9bc2a7b8c1f754%2F&#x26;text=The%20introduction%20to%20Reactive%20Programming%20you%27ve%20been%20missing&#x26;tw_p=tweetbutton&#x26;url=https%3A%2F%2Fgist.github.com%2Fstaltz%2F868e7e9bc2a7b8c1f754&#x26;via=andrestaltz\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">tweet it forward</a>.</p>"",""id"":""7bafac49-2004-527c-8060-67b1c0665494"",""fields"":{""slug"":""rx-js-2-rx-js-design-guidelines-2-1-introduction""},""frontmatter"":{""date"":""2017-08-17"",""title"":""RxJS - 2. RxJS Design Guidelines(2.1 Introduction)"",""category"":""dev"",""tags"":[""Rxjs""],""banner"":null},""timeToRead"":31},{""excerpt"":""When to use RxJS(RxJS를 사용할때는) Use RxJS for orchestrating asynchronous and event-based computations(비동기적이고 이벤트 중심적 연산을 하려고 할때 사용하라) Code that deals with more than one event or asynchronous computation gets complicated quickly as it needs to build a…"",""html"":""<h1 id=\""when-to-use-rxjsrxjs를-사용할때는\""><a href=\""#when-to-use-rxjsrxjs%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%A0%EB%95%8C%EB%8A%94\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to use RxJS(RxJS를 사용할때는)</h1>\n<h3 id=\""use-rxjs-for-orchestrating-asynchronous-and-event-based-computations비동기적이고-이벤트-중심적-연산을-하려고-할때-사용하라\""><a href=\""#use-rxjs-for-orchestrating-asynchronous-and-event-based-computations%EB%B9%84%EB%8F%99%EA%B8%B0%EC%A0%81%EC%9D%B4%EA%B3%A0-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%A4%91%EC%8B%AC%EC%A0%81-%EC%97%B0%EC%82%B0%EC%9D%84-%ED%95%98%EB%A0%A4%EA%B3%A0-%ED%95%A0%EB%95%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%9D%BC\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Use RxJS for orchestrating asynchronous and event-based computations(비동기적이고 이벤트 중심적 연산을 하려고 할때 사용하라)</h3>\n<p>Code that deals with more than one event or asynchronous computation gets complicated quickly as it needs to build a state-machine to deal with ordering issues.\nNext to this, the code needs to deal with successful and failure termination of each separate computation. This leads to code that doesn’t follow normal control-flow, is hard to understand and hard to maintain.\n한가지 이상의 이벤트 또는 비동기적인 연산을 다루는 코드에서 빠르게 복잡하게 되기 때문에 순차적인 이슈를 다를 때 상태-머신을 만드는 것이 필요하다.\n이것 다음에는, 코드는  성공과 실패의 종료에 대해서 각각 분리된 연산으로 다루는 것이 필요한다. 이것은 보통의 컨트롤 흐름으로 가지 않도록 하고, 이것을 이해하는것도 어렵고 유지하는것도 어렵다. </p>\n<p>RxJS makes these computations first-class citizens. This provides a model that allows for readable and composable APIs to deal with these asynchronous computations.\nRxJS 그러한 연산들을 일급 객체로 만든다. 이는 비공기 연산시 다루는 읽기가능하고 구성가능한 API들을 다룰수 있는 모델을 제공한다. </p>\n<h4 id=\""sample\""><a href=\""#sample\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> input <span class=\""token operator\"">=</span> document<span class=\""token punctuation\"">.</span><span class=\""token function\"">getElementById</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'input'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token keyword\"">var</span> dictionarySuggest <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromEvent</span><span class=\""token punctuation\"">(</span>input<span class=\""token punctuation\"">,</span> <span class=\""token string\"">'keyup'</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> input<span class=\""token punctuation\"">.</span>value<span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">filter</span><span class=\""token punctuation\"">(</span>text <span class=\""token operator\"">=></span> <span class=\""token operator\"">!</span><span class=\""token operator\"">!</span>text<span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">distinctUntilChanged</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">throttle</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">250</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">flatMapLatest</span><span class=\""token punctuation\"">(</span>searchWikipedia<span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>\n    results <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n      list <span class=\""token operator\"">=</span> <span class=\""token punctuation\"">[</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n      list<span class=\""token punctuation\"">.</span><span class=\""token function\"">concat</span><span class=\""token punctuation\"">(</span>results<span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span>createItem<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span>\n    err <span class=\""token operator\"">=></span> <span class=\""token function\"">logError</span><span class=\""token punctuation\"">(</span>err<span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>This sample models a common UI paradigm of receiving completion suggestions while the user is typing input.\n이 예제는 사용자가 타이핑 입력을 할때 , 받아오는 완료 암시에 공통적인 UI 다이어그램을 모델링했다.</p>\n<p>RxJS creates an observable sequence that models an existing <code class=\""language-text\"">keyup</code> event on the input.\nRxJS 이 <code class=\""language-text\"">Keyup</code> 이벤트의 입력이 존재를 나타내는  observable sequence를 만든다.</p>\n<p>It then places several filters and projections on top of the event to make the event only fire if a unique value has come through. (The <code class=\""language-text\"">keyup</code> event fires for every key stroke, so also if the user presses left or right arrow, moving the cursor but not changing the input text).</p>\n<p>Next it makes sure the event only gets fired after 250 milliseconds of activity by using the <a href=\""../../observable/observable_instance_methods/throttle.html\""><code class=\""language-text\"">throttle</code></a> operator. (If the user is still typing characters, this saves a potentially expensive lookup that will be ignored immediately).</p>\n<p>In traditionally written programs, this throttling would introduce separate callbacks through a timer. This timer could potentially throw exceptions (certain timers have a maximum amount of operations in flight).</p>\n<p>Once the user input has been filtered down it is time to perform the dictionary lookup. As this is usually an expensive operation (e.g. a request to a server on the other side of the world), this operation is itself asynchronous as well.</p>\n<p>The <a href=\""../../observable/observable_instance_methods/flatmap.html\""><code class=\""language-text\"">flatMap</code>/<code class=\""language-text\"">selectMany</code></a> operator allows for easy combining of multiple asynchronous operations. It doesn’t only combine success values; it also tracks any exceptions that happen in each individual operation.</p>\n<p>In traditionally written programs, this would introduce separate callbacks and a place for exceptions occurring.</p>\n<p>If the user types a new character while the dictionary operation is still in progress, we do not want to see the results of that operation anymore. The user has typed more characters leading to a more specific word, seeing old results would be confusing.</p>\n<p>The <code class=\""language-text\"">flatMapLatest</code> operation makes sure that the dictionary operation is ignored once a new <code class=\""language-text\"">keyup</code> has been detected.</p>\n<p>Finally we subscribe to the resulting observable sequence. Only at this time our execution plan will be used. We pass two functions to the <code class=\""language-text\"">subscribe</code> call:\n마지막으로 우리는 observable sequence의 결과를 구독한다. </p>\n<ol>\n<li>Receives the result from our computation. 연산의 결과를 받아라.</li>\n<li>Receives exceptions in case of a failure occurring anywhere along the computation. 연산시에 어떤 곳에서도 실패가 발생한 케이스의 에러를 받아라.</li>\n</ol>\n<h4 id=\""when-to-ignore-this-guideline이-가이드라인에서-넘어가도-될때는\""><a href=\""#when-to-ignore-this-guideline%EC%9D%B4-%EA%B0%80%EC%9D%B4%EB%93%9C%EB%9D%BC%EC%9D%B8%EC%97%90%EC%84%9C-%EB%84%98%EC%96%B4%EA%B0%80%EB%8F%84-%EB%90%A0%EB%95%8C%EB%8A%94\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline(이 가이드라인에서 넘어가도 될때는)</h4>\n<p>If the application/library in question has very few asynchronous/event-based operations or has very few places where these operations need to be composed, the cost of depending on RxJS (redistributing the library as well as the learning curve) might outweigh the cost of manually coding these operations.</p>\n<p>만약  어플리케이션/라이브러리에 대한 질문중 너무 다중 메세지를 가지는 연산자들이 가진다면, RxJS에 대한 의존에 대한 비용(러닝 커브만큼 라이브러리의 재분배까지도)이\n수동적으로 그러한 연산자 코딩의 비용이 클지도 모른다. </p>\n<h3 id=\""use-rxjs-to-deal-with-asynchronous-sequences-of-data비동기적인-데이터의-시퀀스들을-다룰때-사용하라\""><a href=\""#use-rxjs-to-deal-with-asynchronous-sequences-of-data%EB%B9%84%EB%8F%99%EA%B8%B0%EC%A0%81%EC%9D%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%8B%9C%ED%80%80%EC%8A%A4%EB%93%A4%EC%9D%84-%EB%8B%A4%EB%A3%B0%EB%95%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%9D%BC\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Use RxJS to deal with asynchronous sequences of data(비동기적인 데이터의 시퀀스들을 다룰때 사용하라)</h3>\n<p>Several other libraries exist to aid asynchronous operations in the JavaScript ecosystem. Even though these libraries are powerful, they usually work best on operations that return a single message. They usually do not support operations that produce multiple messages over the lifetime of the operation.</p>\n<p>자바스크립트 생태계에서  몇몇 또다른 라이브러리들은 비동기 연산들을 지원하기 위해서 존재한다. 비록 그러한 라이브러리들이 강력할지라도, 보통 단일 메세지를 리턴하는 데에만 잘 돌아간다. 보통 그러한 라이브러리들은 연산자의 라이클 사이클 넘어서 다중 메세지를 제공하는 연산자를 제공하지는 않는다.</p>\n<p>RxJS follows the following grammar: <code class=\""language-text\"">onNext</code>* (<code class=\""language-text\"">onCompleted</code>|<code class=\""language-text\"">onError</code>)?. This allows for multiple messages to come in over time. This makes RxJS suitable for both operations that produce a single message, as well as operations that produce multiple messages.</p>\n<p>RxJS 다음 문법을 따른다: <code class=\""language-text\"">onNext</code>* (<code class=\""language-text\"">onCompleted</code>|<code class=\""language-text\"">onError</code>)?. 이것은 다중 메세지가 시간을 초과하여 오도록 허용한다. 이점은 RxJS가 단일 메세지를 제공하는 연산자, 다중 메세지를 공급하는 연산자까지도 제공하도록 한다.</p>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> fs <span class=\""token operator\"">=</span> <span class=\""token function\"">require</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'fs'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token keyword\"">var</span> Rx <span class=\""token operator\"">=</span> <span class=\""token function\"">require</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'rx'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token comment\"">// 읽기/쓰기 에 대한 스트림의 구현부 </span>\n<span class=\""token keyword\"">function</span> <span class=\""token function\"">readAsync</span><span class=\""token punctuation\"">(</span>fd<span class=\""token punctuation\"">,</span> chunkSize<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> <span class=\""token comment\"">/* impl */</span> <span class=\""token punctuation\"">}</span>\n<span class=\""token keyword\"">function</span> <span class=\""token function\"">appendAsync</span><span class=\""token punctuation\"">(</span>fd<span class=\""token punctuation\"">,</span> buffer<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> <span class=\""token comment\"">/* impl */</span> <span class=\""token punctuation\"">}</span>\n<span class=\""token keyword\"">function</span> <span class=\""token function\"">encrypt</span><span class=\""token punctuation\"">(</span>buffer<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> <span class=\""token comment\"">/* impl */</span><span class=\""token punctuation\"">}</span>\n\n<span class=\""token comment\"">// 64k 블록 단위로 비동기적으로 읽는 방식으로 4기가 파일을 열어라</span>\n<span class=\""token keyword\"">var</span> inFile <span class=\""token operator\"">=</span> fs<span class=\""token punctuation\"">.</span><span class=\""token function\"">openSync</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'4GBfile.txt'</span><span class=\""token punctuation\"">,</span> <span class=\""token string\"">'r+'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token keyword\"">var</span> outFile <span class=\""token operator\"">=</span> fs<span class=\""token punctuation\"">.</span><span class=\""token function\"">openSync</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'Encrypted.txt'</span><span class=\""token punctuation\"">,</span> <span class=\""token string\"">'w+'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token function\"">readAsync</span><span class=\""token punctuation\"">(</span>inFile<span class=\""token punctuation\"">,</span> <span class=\""token number\"">2</span> <span class=\""token operator\"">&lt;&lt;</span> <span class=\""token number\"">15</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span>encrypt<span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">flatMap</span><span class=\""token punctuation\"">(</span>data <span class=\""token operator\"">=></span> <span class=\""token function\"">appendAsync</span><span class=\""token punctuation\"">(</span>outFile<span class=\""token punctuation\"">,</span> data<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>\n    <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span><span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span>\n    err <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n      console<span class=\""token punctuation\"">.</span><span class=\""token function\"">log</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'An error occurred while encrypting the file: %s'</span><span class=\""token punctuation\"">,</span> err<span class=\""token punctuation\"">.</span>message<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      fs<span class=\""token punctuation\"">.</span><span class=\""token function\"">closeSync</span><span class=\""token punctuation\"">(</span>inFile<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      fs<span class=\""token punctuation\"">.</span><span class=\""token function\"">closeSync</span><span class=\""token punctuation\"">(</span>outFile<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span>\n    <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n      console<span class=\""token punctuation\"">.</span><span class=\""token function\"">log</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'Successfully encrypted the file.'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      fs<span class=\""token punctuation\"">.</span><span class=\""token function\"">closeSync</span><span class=\""token punctuation\"">(</span>inFile<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      fs<span class=\""token punctuation\"">.</span><span class=\""token function\"">closeSync</span><span class=\""token punctuation\"">(</span>outFile<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span>\n  <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, a 4 GB file is read in its entirety, encrypted and saved out to another file.</p>\n<p>이 샘플에서, 암호화되고 다른 파일로 저장된 4기가 파일 전체를 읽는다. </p>\n<p>Reading the whole file into memory, encrypting it and writing out the whole file would be an expensive operation.</p>\n<p>메모리에 전체 파일을 읽는것, 이것을 암호화하고, 전체 파일로 쓰기는 것은 고비용의 연산이다.</p>\n<p>Instead, we rely on the fact that RxJS can produce many messages.</p>\n<p>대신에, 우리는 RxJS는 많은 메세지를 준다는 사실에 집중해야한다.</p>\n<p>We read the file asynchronously in blocks of 64K. This produces an observable sequence of byte arrays. We then encrypt each block separately (for this sample we assume the encryption operation can work on separate parts of the file). Once the block is encrypted, it is immediately sent further down the pipeline to be saved to the other file.  The <code class=\""language-text\"">writeAsync</code> operation is an asynchronous operation that can process multiple messages.</p>\n<p>우리는 64K의 블록씩 비동기적으로 파일을 읽는다. 이것은 바이트 배열들의 observable 시퀀스를 준다. 그러고 나서 우리는 각각 블록을 개별적으로 암호화한다(이 샘플에서 우리는 암호화 연산은 파일에서 개별적인 부분들로 일어남을 가정한다.) 블록에서 암호화가 일어나면, 이는 즉시 빠르게 다른 파일의 저장되는 파이프라인으로 전달한다.\n<code class=\""language-text\"">writeAsync</code> 연산자는 다중 메세지를 처리할수 있는 비동기적인 연산이다.</p>\n<h4 id=\""when-to-ignore-this-guideline이-가이드라인에서-넘어가도-될때는-1\""><a href=\""#when-to-ignore-this-guideline%EC%9D%B4-%EA%B0%80%EC%9D%B4%EB%93%9C%EB%9D%BC%EC%9D%B8%EC%97%90%EC%84%9C-%EB%84%98%EC%96%B4%EA%B0%80%EB%8F%84-%EB%90%A0%EB%95%8C%EB%8A%94-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline(이 가이드라인에서 넘어가도 될때는)</h4>\n<p>If the application/library in question has very few operations with multiple messages, the cost of depending on RxJS (redistributing the library as well as the learning curve) might outweigh the cost of manually coding these operations.</p>\n<p>만약  어플리케이션/라이브러리에 대한 질문중 너무 다중 메세지를 가지는 연산자들이 가진다면, RxJS에 대한 의존에 대한 비용(러닝 커브만큼 라이브러리의 재분배까지도)이\n수동적으로 그러한 연산자 코딩의 비용이 클지도 모른다. </p>"",""id"":""1e78a34f-d889-500e-8b92-97e9f59c3374"",""fields"":{""slug"":""rx-js-2-rx-js-design-guidelines-2-2-when-to-use-rx-js""},""frontmatter"":{""date"":""2017-08-17"",""title"":""RxJS - 2. RxJS Design Guidelines(2.2 When to use RxJS)"",""category"":null,""tags"":[""Rxjs""],""banner"":null},""timeToRead"":7},{""excerpt"":""UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim The RxJS Contract Assume the RxJS Grammar Messages sent to instances of the   object follow the following grammar:\n    onNext* (onCompleted | onError)? This grammar allows observable sequences to…"",""html"":""<p>UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim</p>\n<h1 id=\""the-rxjs-contract\""><a href=\""#the-rxjs-contract\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>The RxJS Contract</h1>\n<h3 id=\""assume-the-rxjs-grammar\""><a href=\""#assume-the-rxjs-grammar\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Assume the RxJS Grammar</h3>\n<p>Messages sent to instances of the <code class=\""language-text\"">Observer</code> object follow the following grammar:\nonNext* (onCompleted | onError)?</p>\n<p>This grammar allows observable sequences to send any amount (0 or more) of <code class=\""language-text\"">onNext</code> messages to the subscribed observer instance, optionally followed by a single success (<code class=\""language-text\"">onCompleted</code>) or failure (<code class=\""language-text\"">onError</code>) message.</p>\n<p>The single message indicating that an observable sequence has finished ensures that consumers of the observable sequence can deterministically establish that it is safe to perform cleanup operations.</p>\n<p>A single failure further ensures that abort semantics can be maintained for operators that work on multiple observable sequences.</p>\n<h4 id=\""sample\""><a href=\""#sample\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> count <span class=\""token operator\"">=</span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">;</span>\nxs<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>\n  <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> count<span class=\""token operator\"">++</span><span class=\""token punctuation\"">,</span>\n  err <span class=\""token operator\"">=></span> console<span class=\""token punctuation\"">.</span><span class=\""token function\"">log</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'Error: %s'</span><span class=\""token punctuation\"">,</span> err<span class=\""token punctuation\"">.</span>message<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n  <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> console<span class=\""token punctuation\"">.</span><span class=\""token function\"">log</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'OnNext has been called %d times'</span><span class=\""token punctuation\"">,</span> count<span class=\""token punctuation\"">)</span>\n<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample we safely assume that the total amount of calls to the OnNext method won’t change once the OnCompleted method is called as the observable sequence follows the Rx grammar.</p>\n<h4 id=\""when-to-ignore-this-guideline\""><a href=\""#when-to-ignore-this-guideline\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Ignore this guideline only when working with a non-conforming implementation of the Observable object.</p>\n<h3 id=\""assume-resources-are-cleaned-up-after-an-code-classlanguage-textonerrorcode-or-code-classlanguage-textoncompletedcode-message\""><a href=\""#assume-resources-are-cleaned-up-after-an-code-classlanguage-textonerrorcode-or-code-classlanguage-textoncompletedcode-message\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Assume resources are cleaned up after an <code class=\""language-text\"">onError</code> or <code class=\""language-text\"">onCompleted</code> message</h3>\n<p>Paragraph 3.1 states that no more messages should arrive after an <code class=\""language-text\"">onError</code> or <code class=\""language-text\"">onCompleted</code> message. This makes it possible to cleanup any resource used by the subscription the moment an <code class=\""language-text\"">onError</code> or <code class=\""language-text\"">onCompleted</code> arrives. Cleaning up resources immediately will make sure that any side-effect occurs in a predictable fashion. It also makes sure that the runtime can reclaim these resources.</p>\n<h4 id=\""sample-1\""><a href=\""#sample-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> fs <span class=\""token operator\"">=</span> <span class=\""token function\"">require</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'fs'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token keyword\"">var</span> Rx <span class=\""token operator\"">=</span> <span class=\""token function\"">require</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'rx'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token keyword\"">function</span> <span class=\""token function\"">appendAsync</span><span class=\""token punctuation\"">(</span>fd<span class=\""token punctuation\"">,</span> buffer<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> <span class=\""token comment\"">/* impl */</span> <span class=\""token punctuation\"">}</span>\n\n<span class=\""token keyword\"">function</span> <span class=\""token function\"">openFile</span><span class=\""token punctuation\"">(</span>path<span class=\""token punctuation\"">,</span> flags<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">var</span> fd <span class=\""token operator\"">=</span> fs<span class=\""token punctuation\"">.</span><span class=\""token function\"">openSync</span><span class=\""token punctuation\"">(</span>path<span class=\""token punctuation\"">,</span> flags<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Disposable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> fs<span class=\""token punctuation\"">.</span><span class=\""token function\"">closeSync</span><span class=\""token punctuation\"">(</span>fd<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span>\n\nRx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span>\n  <span class=\""token function\"">using</span><span class=\""token punctuation\"">(</span>\n    <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token function\"">openFile</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'temp.txt'</span><span class=\""token punctuation\"">,</span> <span class=\""token string\"">'w+'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n    fd <span class=\""token operator\"">=></span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">range</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">0</span><span class=\""token punctuation\"">,</span> <span class=\""token number\"">10000</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span>v <span class=\""token operator\"">=></span> <span class=\""token function\"">Buffer</span><span class=\""token punctuation\"">(</span>v<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">flatMap</span><span class=\""token punctuation\"">(</span>buffer <span class=\""token operator\"">=></span> <span class=\""token function\"">appendAsync</span><span class=\""token punctuation\"">(</span>fd<span class=\""token punctuation\"">,</span> buffer<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample the <code class=\""language-text\"">using</code> operator creates a resource that will be disposed upon unsubscription. The Rx contract for cleanup ensures that unsubscription will be called automatically once an <code class=\""language-text\"">onError</code> or <code class=\""language-text\"">onCompleted</code> message is sent.</p>\n<h4 id=\""when-to-ignore-this-guideline-1\""><a href=\""#when-to-ignore-this-guideline-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>There are currently no known cases where to ignore this guideline.</p>\n<h3 id=\""assume-a-best-effort-to-stop-all-outstanding-work-on-unsubscribe\""><a href=\""#assume-a-best-effort-to-stop-all-outstanding-work-on-unsubscribe\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Assume a best effort to stop all outstanding work on Unsubscribe</h3>\n<p>When unsubscribe is called on an observable subscription, the observable sequence will make a best effort attempt to stop all outstanding work. This means that any queued work that has not been started will not start.</p>\n<p>Any work that is already in progress might still complete as it is not always safe to abort work that is in progress. Results from this work will not be signaled to any previously subscribed observer instances.</p>\n<h4 id=\""sample-1\""><a href=\""#sample-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample 1</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">timer</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">2000</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token operator\"">...</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">dispose</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span></code></pre></div>\n<p>In this sample subscribing to the observable sequence generated by Timer will queue an action on the <code class=\""language-text\"">Scheduler.timeout</code> scheduler to send out an <code class=\""language-text\"">onNext</code> message in 2 seconds. The subscription then gets canceled immediately. As the scheduled action has not started yet, it will be removed from the scheduler.</p>\n<h4 id=\""sample-2\""><a href=\""#sample-2\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample 2</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">startAsync</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token constant\"">Q</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">delay</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">2000</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token operator\"">...</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">dispose</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample the <code class=\""language-text\"">startAsync</code> operator will immediately schedule the execution of the lambda provided as its argument. The subscription registers the observer instance as a listener to this execution. As the lambda is already running once the subscription is disposed, it will keep running and its return value is ignored.</p>"",""id"":""f171b75c-dce7-506e-99c1-b8a869aef507"",""fields"":{""slug"":""rx-js-2-rx-js-design-guidelines-2-3-the-rx-js-contract""},""frontmatter"":{""date"":""2017-08-17"",""title"":""RxJS - 2. RxJS Design Guidelines(2.3 The RxJS Contract)"",""category"":null,""tags"":[""Rxjs""],""banner"":null},""timeToRead"":3},{""excerpt"":""UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim Using Rx Consider drawing a Marble-diagram Draw a marble-diagram of the observable sequence you want to create. By drawing the diagram, you will get a clearer picture on what operator(s) to use…"",""html"":""<p>UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim</p>\n<h1 id=\""using-rx\""><a href=\""#using-rx\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Using Rx</h1>\n<h3 id=\""consider-drawing-a-marble-diagram\""><a href=\""#consider-drawing-a-marble-diagram\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Consider drawing a Marble-diagram</h3>\n<p>Draw a marble-diagram of the observable sequence you want to create. By drawing the diagram, you will get a clearer picture on what operator(s) to use.</p>\n<p>A marble-diagram is a diagram that shows event occurring over time. A marble diagram contains both input and output sequences(s).</p>\n<img src=\""https://raw.githubusercontent.com/Reactive-Extensions/RxJS/master/doc/designguidelines/images/throttleWithTimeout.png\"" alt=\""throttleWithSelector\"">\n<p>By drawing the diagram we can see that we will need some kind of delay after the user input, before firing of another asynchronous call. The delay in this sample maps to the <code class=\""language-text\"">throttle</code> operator. To create another observable sequence from an observable sequence we will use the <code class=\""language-text\"">flatMap</code> or <code class=\""language-text\"">selectMany</code> operator. This\nwill lead to the following code:</p>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> dictionarySuggest <span class=\""token operator\"">=</span> userInput<span class=\""token punctuation\"">.</span><span class=\""token function\"">throttle</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">250</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">flatMap</span><span class=\""token punctuation\"">(</span>input <span class=\""token operator\"">=></span> <span class=\""token function\"">serverCall</span><span class=\""token punctuation\"">(</span>input<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<h4 id=\""when-to-ignore-this-guideline\""><a href=\""#when-to-ignore-this-guideline\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>This guideline can be ignored if you feel comfortable enough with the observable sequence you want to write. However, even the Rx team members will still grab the whiteboard to draw a marble-diagram once in a while.</p>\n<h3 id=\""consider-passing-multiple-arguments-to-code-classlanguage-textsubscribecode\""><a href=\""#consider-passing-multiple-arguments-to-code-classlanguage-textsubscribecode\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Consider passing multiple arguments to <code class=\""language-text\"">subscribe</code></h3>\n<p>For convenience, Rx provides an overload to the <code class=\""language-text\"">subscribe</code> method that takes functions instead of an Observer argument.</p>\n<p>The Observer object would require implementing all three methods (<code class=\""language-text\"">onNext</code>, <code class=\""language-text\"">onError</code> &#x26; <code class=\""language-text\"">onCompleted</code>). The extensions to the <code class=\""language-text\"">subscribe</code> method allow developers to use defaults chosen for each of these methods.</p>\n<p>E.g. when calling the <code class=\""language-text\"">subscribe</code> method that only has an <code class=\""language-text\"">onNext</code> argument, the <code class=\""language-text\"">onError</code> behavior will be to rethrow the exception on the thread that the message comes out from the observable sequence. The <code class=\""language-text\"">onCompleted</code> behavior in this case is to do nothing.</p>\n<p>In many situations, it is important to deal with the exception (either recover or abort the application gracefully).</p>\n<p>Often it is also important to know that the observable sequence has completed successfully. For example, the application notifies the user that the operation has completed.</p>\n<p>Because of this, it is best to provide all 3 arguments to the subscribe function.</p>\n<p>RxJS also provides three convenience methods which only subscribe to the part of the sequence that is desired. The other handlers will default to their original behaviors. There are three of such functions:</p>\n<ul>\n<li><code class=\""language-text\"">subscribeOnNext</code>: for <code class=\""language-text\"">onNext</code> messages only</li>\n<li><code class=\""language-text\"">subscribeOnError</code>: for <code class=\""language-text\"">onError</code> messages only</li>\n<li><code class=\""language-text\"">subscribeOnCompleted</code>: for <code class=\""language-text\"">onCompleted</code> messages only.</li>\n</ul>\n<h4 id=\""when-to-ignore-this-guideline-1\""><a href=\""#when-to-ignore-this-guideline-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<ul>\n<li>When the observable sequence is guaranteed not to complete, e.g. an event such as keyup.</li>\n<li>When the observable sequence is guaranteed not to have <code class=\""language-text\"">onError</code> messages (e.g. an event, a  materialized observable sequence etc…).</li>\n<li>When the default behavior is the desirable behavior.</li>\n</ul>\n<h3 id=\""consider-passing-a-specific-scheduler-to-concurrency-introducing-operators\""><a href=\""#consider-passing-a-specific-scheduler-to-concurrency-introducing-operators\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Consider passing a specific scheduler to concurrency introducing operators</h3>\n<p>Rather than using the <code class=\""language-text\"">observeOn</code> operator to change the execution context on which the observable sequence produces messages, it is better to create concurrency in the right place to begin with. As operators parameterize introduction of concurrency by providing a scheduler argument overload, passing the right scheduler will lead to fewer places where the ObserveOn operator has to be used.</p>\n<h4 id=\""sample\""><a href=\""#sample\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">range</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">0</span><span class=\""token punctuation\"">,</span> <span class=\""token number\"">90000</span><span class=\""token punctuation\"">,</span> Rx<span class=\""token punctuation\"">.</span>Scheduler<span class=\""token punctuation\"">.</span>requestAnimationFrame<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>draw<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, callbacks from the <code class=\""language-text\"">range</code> operator will arrive by calling <code class=\""language-text\"">window.requestAnimationFrame</code>.  The default overload of <code class=\""language-text\"">range</code> would place the <code class=\""language-text\"">onNext</code> call on the <code class=\""language-text\"">Rx.Scheduler.currentThread</code> which is used when recursive scheduling is required immediately.  By providing the <code class=\""language-text\"">Rx.Scheduler.requestAnimationFrame</code> scheduler, all messages from this observable sequence will originiate on the <code class=\""language-text\"">window.requestAnimationFrame</code> callback.</p>\n<h4 id=\""when-to-ignore-this-guideline-2\""><a href=\""#when-to-ignore-this-guideline-2\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>When combining several events that originate on different execution contexts, use guideline 4.4 to put  all messages on a specific execution context as late as possible.</p>\n<h3 id=\""call-the-code-classlanguage-textobserveoncode-operator-as-late-and-in-as-few-places-as-possible\""><a href=\""#call-the-code-classlanguage-textobserveoncode-operator-as-late-and-in-as-few-places-as-possible\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Call the <code class=\""language-text\"">observeOn</code> operator as late and in as few places as possible</h3>\n<p>By using the <code class=\""language-text\"">observeOn</code> operator, an action is scheduled for each message that comes through the original observable sequence. This potentially changes timing information as well as puts additional stress on the system. Placing this operator later in the query will reduce both concerns.</p>\n<h4 id=\""sample-1\""><a href=\""#sample-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> result <span class=\""token operator\"">=</span> xs<span class=\""token punctuation\"">.</span><span class=\""token function\"">throttle</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">1000</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">flatMap</span><span class=\""token punctuation\"">(</span>x <span class=\""token operator\"">=></span> ys<span class=\""token punctuation\"">.</span><span class=\""token function\"">takeUntil</span><span class=\""token punctuation\"">(</span>zs<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">sample</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">250</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span>y <span class=\""token operator\"">=></span> x <span class=\""token operator\"">+</span> y<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">merge</span><span class=\""token punctuation\"">(</span>ws<span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">filter</span><span class=\""token punctuation\"">(</span>x <span class=\""token operator\"">=></span> x <span class=\""token operator\"">&lt;</span> <span class=\""token number\"">10</span><span class=\""token punctuation\"">)</span>\n  <span class=\""token punctuation\"">.</span><span class=\""token function\"">observeOn</span><span class=\""token punctuation\"">(</span>Rx<span class=\""token punctuation\"">.</span>Scheduler<span class=\""token punctuation\"">.</span>requestAnimationFrame<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>This sample combines many observable sequences running on many different execution contexts. The query filters out a lot of messages. Placing the <code class=\""language-text\"">observeOn</code> operator earlier in the query would do extra work on messages that would be filtered out anyway. Calling the <code class=\""language-text\"">observeOn</code> operator at the end of the query will create the least performance impact.</p>\n<h4 id=\""when-to-ignore-this-guideline-3\""><a href=\""#when-to-ignore-this-guideline-3\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Ignore this guideline if your use of the observable sequence is not bound to a specific execution context. In that case do not use the <code class=\""language-text\"">observeOn</code> operator.</p>\n<h3 id=\""consider-limiting-buffers\""><a href=\""#consider-limiting-buffers\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Consider limiting buffers</h3>\n<p>RxJS comes with several operators and classes that create buffers over observable sequences, e.g. the <code class=\""language-text\"">replay</code> operator. As these buffers work on any observable sequence, the size of these buffers will depend on the observable sequence it is operating on. If the buffer is unbounded, this can lead to memory pressure. Many buffering operators provide policies to limit the buffer, either in time or size. Providing this limit will address memory pressure issues.</p>\n<h4 id=\""sample-2\""><a href=\""#sample-2\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> result <span class=\""token operator\"">=</span> xs<span class=\""token punctuation\"">.</span><span class=\""token function\"">replay</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">null</span><span class=\""token punctuation\"">,</span> <span class=\""token number\"">10000</span><span class=\""token punctuation\"">,</span> <span class=\""token number\"">1000</span> <span class=\""token operator\"">*</span> <span class=\""token number\"">60</span> <span class=\""token comment\"">/* 1 hr */</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">refCount</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, the <code class=\""language-text\"">replay</code> operator creates a buffer. We have limited that buffer to contain at most 10,000 messages and keep these messages around for a maximum of 1 hour.</p>\n<h4 id=\""when-to-ignore-this-guideline-4\""><a href=\""#when-to-ignore-this-guideline-4\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>When the amount of messages created by the observable sequence that populates the buffer is small or when the buffer size is limited.</p>\n<h3 id=\""make-side-effects-explicit-using-the-code-classlanguage-textdocodecode-classlanguage-texttapcode-operator\""><a href=\""#make-side-effects-explicit-using-the-code-classlanguage-textdocodecode-classlanguage-texttapcode-operator\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Make side-effects explicit using the <code class=\""language-text\"">do</code>/<code class=\""language-text\"">tap</code> operator</h3>\n<p>As many Rx operators take functions as arguments, it is possible to pass any valid user code in these arguments. This code can change global state (e.g. change global variables, write to disk etc...).</p>\n<p>The composition in Rx runs through each operator for each subscription (with the exception of the sharing operators, such as <code class=\""language-text\"">publish</code>). This will make every side-effect occur for each subscription.</p>\n<p>If this behavior is the desired behavior, it is best to make this explicit by putting the side-effecting code\nin a <code class=\""language-text\"">do</code>/<code class=\""language-text\"">tap</code> operator.  There are overloads to this method which call the specified method only, for example <code class=\""language-text\"">doOnNext</code>/<code class=\""language-text\"">tapOnNext</code>, <code class=\""language-text\"">doOnError</code>/<code class=\""language-text\"">tapOnError</code>,<code class=\""language-text\"">doOnCompleted</code>/<code class=\""language-text\"">tapOnCompleted</code></p>\n<h4 id=\""sample-3\""><a href=\""#sample-3\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> result <span class=\""token operator\"">=</span> xs<span class=\""token punctuation\"">.</span><span class=\""token function\"">filter</span><span class=\""token punctuation\"">(</span>x <span class=\""token operator\"">=></span> x<span class=\""token punctuation\"">.</span>failed<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">tap</span><span class=\""token punctuation\"">(</span>x <span class=\""token operator\"">=></span> <span class=\""token function\"">log</span><span class=\""token punctuation\"">(</span>x<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, messages are filtered for failure. The messages are logged before handing them out to the code subscribed to this observable sequence. The logging is a side-effect (e.g. placing the messages in the computer’s event log) and is explicitly done via a call to the <code class=\""language-text\"">do</code>/<code class=\""language-text\"">tap</code> operator.</p>\n<h3 id=\""assume-messages-can-come-through-until-unsubscribe-has-completed\""><a href=\""#assume-messages-can-come-through-until-unsubscribe-has-completed\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Assume messages can come through until unsubscribe has completed</h3>\n<p>As RxJS uses a push model, messages can be sent from different execution contexts. Messages can be in flight while calling unsubscribe. These messages can still come through while the call to unsubscribe is in progress. After control has returned, no more messages will arrive. The unsubscription process can still be in progress on a different context.</p>\n<h4 id=\""when-to-ignore-this-guideline-5\""><a href=\""#when-to-ignore-this-guideline-5\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Once the <code class=\""language-text\"">onCompleted</code> or <code class=\""language-text\"">onError</code> method has been received, the RxJS grammar guarantees that the subscription can be considered to be finished.</p>\n<h3 id=\""use-the-code-classlanguage-textpublishcode-operator-to-share-side-effects\""><a href=\""#use-the-code-classlanguage-textpublishcode-operator-to-share-side-effects\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Use the <code class=\""language-text\"">publish</code> operator to share side-effects</h3>\n<p>As many observable sequences are cold <a href=\""http://channel9.msdn.com/Blogs/J.Van.Gogh/Rx-API-in-depth-Hot-and-Cold-observables\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">(see cold vs. hot on Channel 9)</a>, each subscription will have a\nseparate set of side-effects. Certain situations require that these side-effects occur only once. The <code class=\""language-text\"">publish</code> operator provides a mechanism to share subscriptions by broadcasting a single subscription to multiple subscribers.</p>\n<p>There are several overloads of the <code class=\""language-text\"">publish</code> operator. The most convenient overloads are the ones that provide a function with a wrapped observable sequence argument that shares the side-effects.</p>\n<h4 id=\""sample-4\""><a href=\""#sample-4\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> xs <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n  console<span class=\""token punctuation\"">.</span><span class=\""token function\"">log</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'Side effect'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'hi!'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\nxs<span class=\""token punctuation\"">.</span><span class=\""token function\"">publish</span><span class=\""token punctuation\"">(</span>sharedXs <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n  sharedXs<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>console<span class=\""token punctuation\"">.</span>log<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  sharedXs<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>console<span class=\""token punctuation\"">.</span>log<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">return</span> sharedXs<span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, xs is an observable sequence that has side-effects (writing to the console). Normally each separate subscription will trigger these side-effects. The <code class=\""language-text\"">publish</code> operator uses a single subscription to xs for all subscribers to sharedXs.</p>\n<h4 id=\""when-to-ignore-this-guideline-6\""><a href=\""#when-to-ignore-this-guideline-6\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Only use the <code class=\""language-text\"">publish</code> operator to share side-effects when sharing is required. In most situations you can create separate subscriptions without any problems: either the subscriptions do not have side-effects or the side effects can execute multiple times without any issues.</p>"",""id"":""34e814c8-80b6-59ae-8307-4b3adbcf4b31"",""fields"":{""slug"":""rx-js-2-rx-js-design-guidelines-2-4-using-rx-js""},""frontmatter"":{""date"":""2017-08-17"",""title"":""RxJS - 2. RxJS Design Guidelines(2.4 Using RxJS)"",""category"":null,""tags"":[""Rxjs""],""banner"":null},""timeToRead"":8},{""excerpt"":""UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim Operator implementations Implement new operators by composing existing operators Many operations can be composed from existing operators. This will lead to smaller, easier to maintain code. The…"",""html"":""<p>UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim</p>\n<h1 id=\""operator-implementations\""><a href=\""#operator-implementations\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Operator implementations</h1>\n<h3 id=\""implement-new-operators-by-composing-existing-operators\""><a href=\""#implement-new-operators-by-composing-existing-operators\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Implement new operators by composing existing operators</h3>\n<p>Many operations can be composed from existing operators. This will lead to smaller, easier to maintain code. The Rx team has put a lot of effort in dealing with all corner cases in the base operators. By reusing these operators you’ll get all that work for free in your operator.</p>\n<h4 id=\""sample\""><a href=\""#sample\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span>prototype<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">flatMap</span> <span class=\""token operator\"">=</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>selector<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">this</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span>selector<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">mergeAll</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span></code></pre></div>\n<p>In this sample, the <code class=\""language-text\"">flatMap</code> operator uses two existing operators: <a href=\""../../observable/observable_instance_methods/map.html\""><code class=\""language-text\"">map</code></a> and <a href=\""../../observable/observable_instance_methods/mergeall.html\""><code class=\""language-text\"">mergeAll</code></a>. The <a href=\""../../observable/observable_instance_methods/map.html\""><code class=\""language-text\"">map</code></a> operator already deals with any issues around the selector function throwing an exception. The <a href=\""../../observable/observable_instance_methods/mergeall.html\""><code class=\""language-text\"">mergeAll</code></a> operator already deals with concurrency issues of multiple observable sequences firing at the same time.</p>\n<h4 id=\""when-to-ignore-this-guideline\""><a href=\""#when-to-ignore-this-guideline\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<ul>\n<li>No appropriate set of base operators is available to implement this operator.</li>\n<li>Performance analysis proves that the implementation using existing operators has performance issues.  Such can be caused by <a href=\""../../observable/observable_instance_methods/materialize.html\""><code class=\""language-text\"">materialize</code></a>.</li>\n</ul>\n<h3 id=\""implement-custom-operators-using-code-classlanguage-textobservablecreatecode\""><a href=\""#implement-custom-operators-using-code-classlanguage-textobservablecreatecode\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Implement custom operators using <a href=\""../../observable/observable_methods/create.html\""><code class=\""language-text\"">Observable.create</code></a></h3>\n<p>When it is not possible to follow guideline 5.1, use the Observable.Create(WithDisposable) method to create an observable sequence as it provides several protections make the observable sequence follow the RxJS contract.</p>\n<ul>\n<li>When the observable sequence has finished (either by firing <a href=\""../..observer/observer_instance_methods/onerror.html\""><code class=\""language-text\"">onError</code></a> or <a href=\""../../observer/observer_instance_methods/oncompleted.html\""><code class=\""language-text\"">onCompleted</code></a>), any subscription will automatically be unsubscribed.</li>\n<li>Any subscribed observer instance will only see a single OnError or OnCompleted message. No more messages are sent through. This ensures the Rx grammar of onNext* (onError|onCompleted)?</li>\n</ul>\n<h4 id=\""sample-1\""><a href=\""#sample-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span>prototype<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">map</span> <span class=\""token operator\"">=</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>selector<span class=\""token punctuation\"">,</span> thisArg<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">var</span> source <span class=\""token operator\"">=</span> <span class=\""token keyword\"">this</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> idx <span class=\""token operator\"">=</span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> source<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>\n      x <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n        <span class=\""token keyword\"">var</span> result<span class=\""token punctuation\"">;</span>\n        <span class=\""token keyword\"">try</span> <span class=\""token punctuation\"">{</span>\n          result <span class=\""token operator\"">=</span> selector<span class=\""token punctuation\"">.</span><span class=\""token function\"">call</span><span class=\""token punctuation\"">(</span>thisArg<span class=\""token punctuation\"">,</span> x<span class=\""token punctuation\"">,</span> idx<span class=\""token operator\"">++</span><span class=\""token punctuation\"">,</span> source<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span> <span class=\""token keyword\"">catch</span> <span class=\""token punctuation\"">(</span><span class=\""token class-name\"">e</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n          observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onError</span><span class=\""token punctuation\"">(</span>e<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n          <span class=\""token keyword\"">return</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span>\n\n        observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>result<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onError<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onCompleted<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, <code class=\""language-text\"">map</code> uses the <code class=\""language-text\"">Observable.create</code> operator to return a new instance of the Observable class. This ensures that no matter the implementation of the source observable sequence, the output observable sequence follows the Rx contract . It also ensures that the lifetime of subscriptions is a short as possible.</p>\n<h4 id=\""when-to-ignore-this-guideline-1\""><a href=\""#when-to-ignore-this-guideline-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<ul>\n<li>The operator needs to return an observable sequence that doesn’t follow the Rx contract. This should usually be avoided (except when writing tests to see how code behaves when the contract is broken)</li>\n<li>The object returned needs to implement more than the Observable class (e.g. Subject, or a custom class).</li>\n</ul>\n<h3 id=\""protect-calls-to-user-code-from-within-an-operator\""><a href=\""#protect-calls-to-user-code-from-within-an-operator\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Protect calls to user code from within an operator</h3>\n<p>When user code is called from within an operator, this is potentially happening outside of the execution context of the call to the operator (asynchronously). Any exception that happens here will cause the program to terminate unexpectedly. Instead it should be fed through to the subscribed observer instance so that the exception can be dealt with by the subscribers.</p>\n<p>Common kinds of user code that should be protected:</p>\n<ul>\n<li>Selector functions passed in to the operator.</li>\n<li>Comparer functions passed into the operator.</li>\n</ul>\n<p><strong>Note:</strong> calls to <code class=\""language-text\"">Scheduler</code> implementations are not considered for this guideline. The reason for this is that only a small set of issues would be caught as most schedulers deal with asynchronous calls. Instead, protect the arguments passed to schedulers inside each scheduler implementation.</p>\n<h4 id=\""sample-2\""><a href=\""#sample-2\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span>prototype<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">map</span> <span class=\""token operator\"">=</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>selector<span class=\""token punctuation\"">,</span> thisArg<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">var</span> source <span class=\""token operator\"">=</span> <span class=\""token keyword\"">this</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> idx <span class=\""token operator\"">=</span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> source<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>\n      x <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n        <span class=\""token keyword\"">var</span> result<span class=\""token punctuation\"">;</span>\n        <span class=\""token keyword\"">try</span> <span class=\""token punctuation\"">{</span>\n          result <span class=\""token operator\"">=</span> selector<span class=\""token punctuation\"">.</span><span class=\""token function\"">call</span><span class=\""token punctuation\"">(</span>thisArg<span class=\""token punctuation\"">,</span> x<span class=\""token punctuation\"">,</span> idx<span class=\""token operator\"">++</span><span class=\""token punctuation\"">,</span> source<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span> <span class=\""token keyword\"">catch</span> <span class=\""token punctuation\"">(</span><span class=\""token class-name\"">e</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n          observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onError</span><span class=\""token punctuation\"">(</span>e<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n          <span class=\""token keyword\"">return</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span>\n\n        observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>result<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onError<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onCompleted<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>This sample invokes a selector function which is user code. It catches any exception resulting from this call and transfers the exception to the subscribed observer instance through the <code class=\""language-text\"">onError</code> call.</p>\n<h4 id=\""when-to-ignore-this-guideline-2\""><a href=\""#when-to-ignore-this-guideline-2\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Ignore this guideline for calls to user code that are made before creating the observable sequence (outside of the <code class=\""language-text\"">Observable.create</code> call). These calls are on the current execution context and are allowed to follow normal control flow.</p>\n<p><strong>Note:</strong> do not protect calls to <code class=\""language-text\"">subscribe</code>, <code class=\""language-text\"">dispose</code>, <code class=\""language-text\"">onNext</code>, <code class=\""language-text\"">onError</code> and <code class=\""language-text\"">onCompleted</code> methods. These calls are on the edge of the monad. Calling the <code class=\""language-text\"">onError</code> method from these places will lead to unexpected behavior.</p>\n<h3 id=\""code-classlanguage-textsubscribecode-implementations-should-not-throw\""><a href=\""#code-classlanguage-textsubscribecode-implementations-should-not-throw\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a><code class=\""language-text\"">subscribe</code> implementations should not throw</h3>\n<p>As multiple observable sequences are composed, subscribe to a specific observable sequence might not happen at the time the user calls <code class=\""language-text\"">subscribe</code> (e.g. Within the <code class=\""language-text\"">concat</code> operator, the second observable sequence argument to <code class=\""language-text\"">concat</code> will only be subscribed to once the first observable sequence has completed). Throwing an exception would bring down the program. Instead exceptions in subscribe should be tunneled to the <code class=\""language-text\"">onError</code> method.</p>\n<h4 id=\""sample-3\""><a href=\""#sample-3\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> <span class=\""token constant\"">CLOSED</span> <span class=\""token operator\"">=</span> <span class=\""token number\"">3</span><span class=\""token punctuation\"">;</span>\n\n<span class=\""token keyword\"">function</span> <span class=\""token function\"">readWebSocket</span><span class=\""token punctuation\"">(</span>socket<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>socket<span class=\""token punctuation\"">.</span>readyState <span class=\""token operator\"">===</span> <span class=\""token constant\"">CLOSED</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onError</span><span class=\""token punctuation\"">(</span><span class=\""token keyword\"">new</span> <span class=\""token class-name\"">Error</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'The websocket is no longer open.'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token keyword\"">return</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span>\n    <span class=\""token comment\"">// Rest of the implementation goes here</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span></code></pre></div>\n<p>In this sample, an error condition is detected in the subscribe method implementation. An error is raised by calling the <code class=\""language-text\"">onError</code> method instead of throwing the exception. This allows for proper handling of the exception if <code class=\""language-text\"">subscribe</code> is called outside of the execution context of the original call to Subscribe by the user.</p>\n<h4 id=\""when-to-ignore-this-guideline-3\""><a href=\""#when-to-ignore-this-guideline-3\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>When a catastrophic error occurs that should bring down the whole program anyway.</p>\n<h3 id=\""code-classlanguage-textonerrorcode-messages-should-have-abort-semantics\""><a href=\""#code-classlanguage-textonerrorcode-messages-should-have-abort-semantics\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a><code class=\""language-text\"">onError</code> messages should have abort semantics</h3>\n<p>As normal control flow in JavaScript uses abort semantics for exceptions (the stack is unwound, current code path is interrupted), RxJS mimics this behavior. To ensure this behavior, no messages should be sent out by an operator once one of it sources has an error message or an exception is thrown within the operator.</p>\n<h4 id=\""sample-4\""><a href=\""#sample-4\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span>prototype<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">minimumBuffer</span> <span class=\""token operator\"">=</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>bufferSize<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">var</span> source <span class=\""token operator\"">=</span> <span class=\""token keyword\"">this</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> data <span class=\""token operator\"">=</span> <span class=\""token punctuation\"">[</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n\n    <span class=\""token keyword\"">return</span> source<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>\n      value <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n        data <span class=\""token operator\"">=</span> data<span class=\""token punctuation\"">.</span><span class=\""token function\"">concat</span><span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>data<span class=\""token punctuation\"">.</span>length <span class=\""token operator\"">></span> bufferSize<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n          observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>data<span class=\""token punctuation\"">.</span><span class=\""token function\"">slice</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">0</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n          data <span class=\""token operator\"">=</span> <span class=\""token punctuation\"">[</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span>\n      <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onError<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n      <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n        <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>data<span class=\""token punctuation\"">.</span>length <span class=\""token operator\"">></span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n          observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>data<span class=\""token punctuation\"">.</span><span class=\""token function\"">slice</span><span class=\""token punctuation\"">(</span><span class=\""token number\"">0</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span>\n        observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span>\n    <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, a buffering operator will abandon the observable sequence as soon as the subscription to source encounters an error. The current buffer is not sent to any subscribers, maintain abort semantics.</p>\n<h4 id=\""when-to-ignore-this-guideline-4\""><a href=\""#when-to-ignore-this-guideline-4\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>There are currently no known cases where to ignore this guideline.</p>\n<h3 id=\""parameterize-concurrency-by-providing-a-scheduler-argument\""><a href=\""#parameterize-concurrency-by-providing-a-scheduler-argument\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Parameterize concurrency by providing a scheduler argument</h3>\n<p>As there are many different notions of concurrency, and no scenario fits all, it is best to parameterize the concurrency an operator introduces. The notion of parameterizing concurrency in RxJS is abstracted through the <code class=\""language-text\"">Scheduler</code> class.</p>\n<h4 id=\""sample-5\""><a href=\""#sample-5\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">just</span> <span class=\""token operator\"">=</span> <span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">,</span> scheduler<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> scheduler<span class=\""token punctuation\"">.</span><span class=\""token function\"">schedule</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, the <code class=\""language-text\"">just</code> operator parameterizes the level of concurrency the operator has by providing a scheduler argument. It then uses this scheduler to schedule the firing of the <code class=\""language-text\"">onNext</code> and <code class=\""language-text\"">onCompleted</code> messages.</p>\n<h4 id=\""when-to-ignore-this-guideline-5\""><a href=\""#when-to-ignore-this-guideline-5\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<ul>\n<li>The operator is not in control of creating the concurrency (e.g. in an operator that converts an event into an observable sequence, the source event is in control of firing the messages, not the operator).</li>\n<li>The operator is in control, but needs to use a specific scheduler for introducing concurrency.</li>\n</ul>\n<h3 id=\""provide-a-default-scheduler\""><a href=\""#provide-a-default-scheduler\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Provide a default scheduler</h3>\n<p>In most cases there is a good default that can be chosen for an operator that has parameterized concurrency through guideline 5.6. This will make the code that uses this operator more succinct.</p>\n<p><strong>Note:</strong> Follow guideline 5.9 when choosing the default scheduler, using the immediate scheduler where possible, only choosing a scheduler with more concurrency when needed.</p>\n<h4 id=\""sample-6\""><a href=\""#sample-6\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">just</span> <span class=\""token operator\"">=</span> <span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">,</span> scheduler<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// Pick a default scheduler, in this case, immediately</span>\n  Rx<span class=\""token punctuation\"">.</span>helpers<span class=\""token punctuation\"">.</span><span class=\""token function\"">isScheduler</span><span class=\""token punctuation\"">(</span>scheduler<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">||</span> <span class=\""token punctuation\"">(</span>scheduler <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Scheduler<span class=\""token punctuation\"">.</span>immediate<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> scheduler<span class=\""token punctuation\"">.</span><span class=\""token function\"">schedule</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, we provided a default scheduler if not provided by the caller.</p>\n<h4 id=\""when-to-ignore-this-guideline-6\""><a href=\""#when-to-ignore-this-guideline-6\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Ignore this guideline when no good default can be chosen.</p>\n<h3 id=\""the-scheduler-should-be-the-last-argument-to-the-operator\""><a href=\""#the-scheduler-should-be-the-last-argument-to-the-operator\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>The scheduler should be the last argument to the operator</h3>\n<p>Adding the scheduler as the last argument is a must for all operators introducing concurrency.  This is to ensure that the schedulers are optional, and a default one can be chosen.  This also makes the programming experience much more predictable.</p>\n<h4 id=\""sample-7\""><a href=\""#sample-7\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">just</span> <span class=\""token operator\"">=</span> <span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">,</span> scheduler<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// Pick a default scheduler, in this case, immediately</span>\n  Rx<span class=\""token punctuation\"">.</span>helpers<span class=\""token punctuation\"">.</span><span class=\""token function\"">isScheduler</span><span class=\""token punctuation\"">(</span>scheduler<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">||</span> <span class=\""token punctuation\"">(</span>scheduler <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Scheduler<span class=\""token punctuation\"">.</span>immediate<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> scheduler<span class=\""token punctuation\"">.</span><span class=\""token function\"">schedule</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample the <code class=\""language-text\"">return</code> operator has two parameters, and the scheduler parameter defaults to the immediate scheduler if not provided. As the scheduler argument is the last argument, adding or omitting the argument is clearly visible.</p>\n<h4 id=\""when-to-ignore-this-guideline-7\""><a href=\""#when-to-ignore-this-guideline-7\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>JavaScript supports rest arguments syntax. With this syntax, the rest arguments has to be the last argument. Make the scheduler the final to last argument in this case.</p>\n<h3 id=\""avoid-introducing-concurrency\""><a href=\""#avoid-introducing-concurrency\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Avoid introducing concurrency</h3>\n<p>By adding concurrency, we change the timeliness of an observable sequence. Messages will be scheduled to arrive later. The time it takes to deliver a message is data itself, by adding concurrency we skew that data.  This includes not using such mechanisms as <code class=\""language-text\"">setTimeout</code>, <code class=\""language-text\"">setImmediate</code>, <code class=\""language-text\"">requestAnimationFrame</code>, <code class=\""language-text\"">process.nextTick</code>, etc which should be avoided directly in your code, and instead be wrapped by a <code class=\""language-text\"">Scheduler</code> class.</p>\n<h4 id=\""sample-1\""><a href=\""#sample-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample 1</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span>prototype<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">map</span> <span class=\""token operator\"">=</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>selector<span class=\""token punctuation\"">,</span> thisArg<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">var</span> source <span class=\""token operator\"">=</span> <span class=\""token keyword\"">this</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> idx <span class=\""token operator\"">=</span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> source<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>\n      x <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n        <span class=\""token keyword\"">var</span> result<span class=\""token punctuation\"">;</span>\n        <span class=\""token keyword\"">try</span> <span class=\""token punctuation\"">{</span>\n          result <span class=\""token operator\"">=</span> selector<span class=\""token punctuation\"">.</span><span class=\""token function\"">call</span><span class=\""token punctuation\"">(</span>thisArg<span class=\""token punctuation\"">,</span> x<span class=\""token punctuation\"">,</span> idx<span class=\""token operator\"">++</span><span class=\""token punctuation\"">,</span> source<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span> <span class=\""token keyword\"">catch</span> <span class=\""token punctuation\"">(</span><span class=\""token class-name\"">e</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n          observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onError</span><span class=\""token punctuation\"">(</span>e<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n          <span class=\""token keyword\"">return</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span>\n\n        observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>result<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onError<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onCompleted<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, the select operator does not use a scheduler to send out the <code class=\""language-text\"">onNext</code> message. Instead it uses the source observable sequence call to <code class=\""language-text\"">onNext</code> to process the message, hence staying in the same time-window.</p>\n<h4 id=\""sample-2\""><a href=\""#sample-2\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample 2</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">just</span> <span class=\""token operator\"">=</span> <span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">,</span> scheduler<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token comment\"">// Pick a default scheduler, in this case, immediately</span>\n  Rx<span class=\""token punctuation\"">.</span>helpers<span class=\""token punctuation\"">.</span><span class=\""token function\"">isScheduler</span><span class=\""token punctuation\"">(</span>scheduler<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">||</span> <span class=\""token punctuation\"">(</span>scheduler <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Scheduler<span class=\""token punctuation\"">.</span>immediate<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> scheduler<span class=\""token punctuation\"">.</span><span class=\""token function\"">schedule</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this case, the default scheduler for the <code class=\""language-text\"">just</code> operator is the immediate scheduler. This scheduler does not introduce concurrency.</p>\n<h4 id=\""when-to-ignore-this-guideline-8\""><a href=\""#when-to-ignore-this-guideline-8\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Ignore this guideline in situations where introduction of concurrency is an essential part of what the operator does.</p>\n<p><strong>NOTE:</strong> When we use the Immediate scheduler or call the observer directly from within the call to <code class=\""language-text\"">subscribe</code>, we make the <code class=\""language-text\"">subscribe</code> call blocking. Any expensive computation in this situation would indicate a candidate for introducing concurrency.</p>\n<h3 id=\""hand-out-all-disposables-instances-created-inside-the-operator-to-consumers\""><a href=\""#hand-out-all-disposables-instances-created-inside-the-operator-to-consumers\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Hand out all disposables instances created inside the operator to consumers</h3>\n<p><code class=\""language-text\"">Disposable</code> instances control lifetime of subscriptions as well as cancelation of scheduled actions. RxJS gives users an opportunity to unsubscribe from a subscription to the observable sequence using disposable instances.</p>\n<p>After a subscription has ended, no more messages are allowed through. At this point, leaving any state alive inside the observable sequence is inefficient and can lead to unexpected semantics.</p>\n<p>To aid composition of multiple disposable instances, RxJS provides a set of classes implementing <code class=\""language-text\"">Disposable</code> such as:</p>\n<table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>CompositeDisposable</td>\n<td>Composes and disposes a group of disposable instances together.</td>\n</tr>\n<tr>\n<td>SerialDisposable</td>\n<td>A place holder for changing instances of disposable instances. Once new disposable instance is placed, the old disposable instance is disposed.</td>\n</tr>\n<tr>\n<td>SingleAssignmentDisposable</td>\n<td>A place holder for a single instance of a disposable.</td>\n</tr>\n<tr>\n<td>ScheduledDisposable</td>\n<td>Uses a scheduler to dispose an underlying disposable instance.</td>\n</tr>\n</tbody>\n</table>\n<h4 id=\""sample-8\""><a href=\""#sample-8\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Observable<span class=\""token punctuation\"">.</span>prototype<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">zip</span> <span class=\""token operator\"">=</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">var</span> parent <span class=\""token operator\"">=</span> <span class=\""token keyword\"">this</span><span class=\""token punctuation\"">,</span>\n      sources <span class=\""token operator\"">=</span> slice<span class=\""token punctuation\"">.</span><span class=\""token function\"">call</span><span class=\""token punctuation\"">(</span>arguments<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n      resultSelector <span class=\""token operator\"">=</span> sources<span class=\""token punctuation\"">.</span><span class=\""token function\"">pop</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n  sources<span class=\""token punctuation\"">.</span><span class=\""token function\"">unshift</span><span class=\""token punctuation\"">(</span>parent<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">new</span> <span class=\""token class-name\"">AnonymousObservable</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> n <span class=\""token operator\"">=</span> sources<span class=\""token punctuation\"">.</span>length<span class=\""token punctuation\"">,</span>\n      queues <span class=\""token operator\"">=</span> <span class=\""token function\"">arrayInitialize</span><span class=\""token punctuation\"">(</span>n<span class=\""token punctuation\"">,</span> <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">[</span><span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n      isDone <span class=\""token operator\"">=</span> <span class=\""token function\"">arrayInitialize</span><span class=\""token punctuation\"">(</span>n<span class=\""token punctuation\"">,</span> <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token boolean\"">false</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n\n    <span class=\""token keyword\"">function</span> <span class=\""token function\"">next</span><span class=\""token punctuation\"">(</span>i<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n      <span class=\""token keyword\"">var</span> res<span class=\""token punctuation\"">,</span> queuedValues<span class=\""token punctuation\"">;</span>\n      <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>queues<span class=\""token punctuation\"">.</span><span class=\""token function\"">every</span><span class=\""token punctuation\"">(</span>x <span class=\""token operator\"">=></span> x<span class=\""token punctuation\"">.</span>length <span class=\""token operator\"">></span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n        <span class=\""token keyword\"">try</span> <span class=\""token punctuation\"">{</span>\n          queuedValues <span class=\""token operator\"">=</span> queues<span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span>x <span class=\""token operator\"">=></span> x<span class=\""token punctuation\"">.</span><span class=\""token function\"">shift</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n          res <span class=\""token operator\"">=</span> resultSelector<span class=\""token punctuation\"">.</span><span class=\""token function\"">apply</span><span class=\""token punctuation\"">(</span>parent<span class=\""token punctuation\"">,</span> queuedValues<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span> <span class=\""token keyword\"">catch</span> <span class=\""token punctuation\"">(</span><span class=\""token class-name\"">ex</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n          observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onError</span><span class=\""token punctuation\"">(</span>ex<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n          <span class=\""token keyword\"">return</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span>\n        observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>res<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span> <span class=\""token keyword\"">else</span> <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>isDone<span class=\""token punctuation\"">.</span><span class=\""token function\"">filter</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span>x<span class=\""token punctuation\"">,</span> j<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> j <span class=\""token operator\"">!==</span> i<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">every</span><span class=\""token punctuation\"">(</span>identity<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n        observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span>\n\n    <span class=\""token keyword\"">function</span> <span class=\""token function\"">done</span><span class=\""token punctuation\"">(</span>i<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n      isDone<span class=\""token punctuation\"">[</span>i<span class=\""token punctuation\"">]</span> <span class=\""token operator\"">=</span> <span class=\""token boolean\"">true</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>isDone<span class=\""token punctuation\"">.</span><span class=\""token function\"">every</span><span class=\""token punctuation\"">(</span>x <span class=\""token operator\"">=></span> x<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n        observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onCompleted</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span>\n    <span class=\""token punctuation\"">}</span>\n\n    <span class=\""token keyword\"">var</span> subscriptions <span class=\""token operator\"">=</span> <span class=\""token keyword\"">new</span> <span class=\""token class-name\"">Array</span><span class=\""token punctuation\"">(</span>n<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">for</span> <span class=\""token punctuation\"">(</span><span class=\""token keyword\"">var</span> idx <span class=\""token operator\"">=</span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">;</span> idx <span class=\""token operator\"">&lt;</span> n<span class=\""token punctuation\"">;</span> idx<span class=\""token operator\"">++</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n      <span class=\""token punctuation\"">(</span>i <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n        <span class=\""token keyword\"">var</span> source <span class=\""token operator\"">=</span> sources<span class=\""token punctuation\"">[</span>i<span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">,</span> sad <span class=\""token operator\"">=</span> <span class=\""token keyword\"">new</span> <span class=\""token class-name\"">SingleAssignmentDisposable</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        Rx<span class=\""token punctuation\"">.</span>helpers<span class=\""token punctuation\"">.</span><span class=\""token function\"">isPromise</span><span class=\""token punctuation\"">(</span>source<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">&amp;&amp;</span> <span class=\""token punctuation\"">(</span>source <span class=\""token operator\"">=</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">fromPromise</span><span class=\""token punctuation\"">(</span>source<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        sad<span class=\""token punctuation\"">.</span><span class=\""token function\"">setDisposable</span><span class=\""token punctuation\"">(</span>source<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>x <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n          queues<span class=\""token punctuation\"">[</span>i<span class=\""token punctuation\"">]</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">push</span><span class=\""token punctuation\"">(</span>x<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n          <span class=\""token function\"">next</span><span class=\""token punctuation\"">(</span>i<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span> observer<span class=\""token punctuation\"">.</span>onError<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span> <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n          <span class=\""token function\"">done</span><span class=\""token punctuation\"">(</span>i<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        subscriptions<span class=\""token punctuation\"">[</span>i<span class=\""token punctuation\"">]</span> <span class=\""token operator\"">=</span> sad<span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">(</span>idx<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span>\n\n    <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">new</span> <span class=\""token class-name\"">CompositeDisposable</span><span class=\""token punctuation\"">(</span>subscriptions<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, the operator groups all disposable instances controlling the various subscriptions together and returns the group as the result of subscribing to the outer observable sequence. When a user of this operator subscribes to the resulting observable sequence, he/she will get back a disposable instance that controls subscription to all underlying observable sequences.</p>\n<h4 id=\""when-to-ignore-this-guideline-9\""><a href=\""#when-to-ignore-this-guideline-9\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>There are currently no known instances where this guideline should be ignored.</p>\n<h3 id=\""operators-should-not-block\""><a href=\""#operators-should-not-block\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Operators should not block</h3>\n<p>RxJS is a library for composing asynchronous and event-based programs using observable collections.</p>\n<p>By making an operator blocking we lose these asynchronous characteristics. We also potentially lose composability (e.g. by returning a value typed as <code class=\""language-text\"">T</code> instead of <code class=\""language-text\"">Observable&lt;T&gt;</code>).  This is in contrast to the Array#extras such as <code class=\""language-text\"">sum</code>, <code class=\""language-text\"">reduce</code>, <code class=\""language-text\"">some</code> and <code class=\""language-text\"">every</code> which return a single value.</p>\n<h4 id=\""sample-9\""><a href=\""#sample-9\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span>prototype<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">sum</span> <span class=\""token operator\"">=</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> <span class=\""token keyword\"">return</span> <span class=\""token keyword\"">this</span><span class=\""token punctuation\"">.</span><span class=\""token function\"">reduce</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">(</span>acc<span class=\""token punctuation\"">,</span> x<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> acc <span class=\""token operator\"">+</span> x<span class=\""token punctuation\"">,</span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span></code></pre></div>\n<p>In this sample, the <code class=\""language-text\"">sum</code> operator has a return type of <code class=\""language-text\"">Observable&lt;Number&gt;</code> instead of <code class=\""language-text\"">Number</code>. By doing this, the operator does not block. It also allows the result value to be used in further composition.</p>\n<h4 id=\""when-to-ignore-this-guideline-10\""><a href=\""#when-to-ignore-this-guideline-10\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>There are currently no known instances where this guideline should be ignored.</p>\n<h3 id=\""avoid-deep-stacks-caused-by-recursion-in-operators\""><a href=\""#avoid-deep-stacks-caused-by-recursion-in-operators\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Avoid deep stacks caused by recursion in operators</h3>\n<p>As code inside Rx operators can be called from different execution context in many different scenarios, it is nearly impossible to establish how deep the stack is before the code is called. If the operator itself has a deep stack (e.g. because of recursion), the operator could trigger a stack overflow quicker than one might expect.</p>\n<p>There are two recommended ways to avoid this issue:</p>\n<ul>\n<li>Use the recursive <code class=\""language-text\"">scheduleRecursive</code> methods on the <code class=\""language-text\"">Scheduler</code></li>\n<li>Implement an infinite looping generator using the yield iterator pattern, convert it to an observable sequence using the <code class=\""language-text\"">from</code> operator.</li>\n</ul>\n<h4 id=\""sample-1-1\""><a href=\""#sample-1-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample 1</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">repeat</span> <span class=\""token operator\"">=</span> <span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">,</span> scheduler<span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">return</span> scheduler<span class=\""token punctuation\"">.</span><span class=\""token function\"">scheduleRecursive</span><span class=\""token punctuation\"">(</span>self <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n      observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>value<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token function\"">self</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, the recursive <code class=\""language-text\"">scheduleRecursive</code> method is used to allow the scheduler to schedule the next iteration of the recursive function. Schedulers such as the current thread scheduler do not rely on stack semantics. Using such a scheduler with this pattern will avoid stack overflow issues.</p>\n<h4 id=\""sample-2-1\""><a href=\""#sample-2-1\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample 2</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">repeat</span> <span class=\""token operator\"">=</span> value <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token keyword\"">from</span><span class=\""token punctuation\"">(</span>\n    <span class=\""token keyword\"">function</span><span class=\""token operator\"">*</span> <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n      <span class=\""token keyword\"">while</span><span class=\""token punctuation\"">(</span><span class=\""token boolean\"">true</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span> <span class=\""token keyword\"">yield</span> value<span class=\""token punctuation\"">;</span> <span class=\""token punctuation\"">}</span>\n    <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>The yield iterator pattern ensures that the stack depth does not increase drastically. By returning an infinite generator with the <code class=\""language-text\"">from</code> operator can build an infinite observable sequence.</p>\n<h4 id=\""when-to-ignore-this-guideline-11\""><a href=\""#when-to-ignore-this-guideline-11\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>There are currently no known instances where this guideline should be ignored.</p>\n<h3 id=\""argument-validation-should-occur-outside-code-classlanguage-textobservablecreatecode\""><a href=\""#argument-validation-should-occur-outside-code-classlanguage-textobservablecreatecode\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Argument validation should occur outside <code class=\""language-text\"">Observable.create</code></h3>\n<p>As guideline 5.3 specifies that the <code class=\""language-text\"">Observable.create</code> operator should not throw, any argument validation that potentially throws exceptions should be done outside the <code class=\""language-text\"">Observable.create</code> operator.</p>\n<h4 id=\""sample-10\""><a href=\""#sample-10\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\"">Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span>prototype<span class=\""token punctuation\"">.</span><span class=\""token function-variable function\"">map</span> <span class=\""token operator\"">=</span> <span class=\""token keyword\"">function</span><span class=\""token punctuation\"">(</span>selector<span class=\""token punctuation\"">,</span> thisArg<span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n  <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span><span class=\""token keyword\"">this</span> <span class=\""token operator\"">==</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">throw</span> <span class=\""token keyword\"">new</span> <span class=\""token class-name\"">TypeError</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'Must be an instance of an Observable'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span>\n  <span class=\""token keyword\"">if</span> <span class=\""token punctuation\"">(</span>selector <span class=\""token operator\"">==</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">throw</span> <span class=\""token keyword\"">new</span> <span class=\""token class-name\"">TypeError</span><span class=\""token punctuation\"">(</span><span class=\""token string\"">'selector cannot be null/undefined'</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span>\n  <span class=\""token keyword\"">var</span> selectorFn <span class=\""token operator\"">=</span> <span class=\""token keyword\"">typeof</span> selector <span class=\""token operator\"">!==</span> <span class=\""token string\"">'function'</span> <span class=\""token operator\"">?</span> <span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span> <span class=\""token operator\"">=></span> selector <span class=\""token punctuation\"">:</span> selector<span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">var</span> source <span class=\""token operator\"">=</span> <span class=\""token keyword\"">this</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token keyword\"">return</span> Rx<span class=\""token punctuation\"">.</span>Observable<span class=\""token punctuation\"">.</span><span class=\""token function\"">create</span><span class=\""token punctuation\"">(</span>observer <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n    <span class=\""token keyword\"">var</span> idx <span class=\""token operator\"">=</span> <span class=\""token number\"">0</span><span class=\""token punctuation\"">;</span>\n    <span class=\""token keyword\"">return</span> source<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>\n      x <span class=\""token operator\"">=></span> <span class=\""token punctuation\"">{</span>\n        <span class=\""token keyword\"">var</span> result<span class=\""token punctuation\"">;</span>\n        <span class=\""token keyword\"">try</span> <span class=\""token punctuation\"">{</span>\n          result <span class=\""token operator\"">=</span> selectorFn<span class=\""token punctuation\"">.</span><span class=\""token function\"">call</span><span class=\""token punctuation\"">(</span>thisArg<span class=\""token punctuation\"">,</span> x<span class=\""token punctuation\"">,</span> idx<span class=\""token operator\"">++</span><span class=\""token punctuation\"">,</span> source<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span> <span class=\""token keyword\"">catch</span> <span class=\""token punctuation\"">(</span><span class=\""token class-name\"">e</span><span class=\""token punctuation\"">)</span> <span class=\""token punctuation\"">{</span>\n          observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onError</span><span class=\""token punctuation\"">(</span>e<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n          <span class=\""token keyword\"">return</span><span class=\""token punctuation\"">;</span>\n        <span class=\""token punctuation\"">}</span>\n\n        observer<span class=\""token punctuation\"">.</span><span class=\""token function\"">onNext</span><span class=\""token punctuation\"">(</span>result<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n      <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onError<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">,</span>\n      observer<span class=\""token punctuation\"">.</span>onCompleted<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>observer<span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\n  <span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span>\n<span class=\""token punctuation\"">}</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, the arguments are checked for null values before the <code class=\""language-text\"">Observable.create</code> operator is called.</p>\n<h4 id=\""when-to-ignore-this-guideline-12\""><a href=\""#when-to-ignore-this-guideline-12\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Ignore this guideline if some aspect of the argument cannot be checked until the subscription is active.</p>\n<h3 id=\""unsubscription-should-be-idempotent\""><a href=\""#unsubscription-should-be-idempotent\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Unsubscription should be idempotent</h3>\n<p>The observable <code class=\""language-text\"">subscribe</code> method returns a <code class=\""language-text\"">Disposable</code> instance that can be used to clean up the subscription. The <code class=\""language-text\"">Disposable</code> instance doesn’t give any information about what the state of the subscription is. As consumers do not know the state of the subscription, calling the <code class=\""language-text\"">dispose</code> method multiple times should be allowed. Only the first call the side-effect of cleaning up the subscription should occur.</p>\n<h4 id=\""sample-11\""><a href=\""#sample-11\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Sample</h4>\n<div class=\""gatsby-highlight\"" data-language=\""js\""><pre class=\""language-js\""><code class=\""language-js\""><span class=\""token keyword\"">var</span> subscription <span class=\""token operator\"">=</span> xs<span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>console<span class=\""token punctuation\"">.</span>log<span class=\""token punctuation\"">.</span><span class=\""token function\"">bind</span><span class=\""token punctuation\"">(</span>console<span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\nsubscription<span class=\""token punctuation\"">.</span><span class=\""token function\"">dispose</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span>\nsubscription<span class=\""token punctuation\"">.</span><span class=\""token function\"">dispose</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">;</span></code></pre></div>\n<p>In this sample, the subscription is disposed twice, the first time the subscription will be cleaned up and the second call will be a no-op.</p>\n<h3 id=\""unsubscription-should-not-throw\""><a href=\""#unsubscription-should-not-throw\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Unsubscription should not throw</h3>\n<p>As the RxJS’s composition makes that subscriptions are chained, so are unsubscriptions. Because of this, any operator can call an unsubscription at any time. Because of this, just throwing an exception will lead to the application crashing unexpectedly. As the observer instance is already unsubscribed, it cannot be used for receiving the exception either. Because of this, exceptions in unsubscriptions should be avoided.</p>\n<h4 id=\""when-to-ignore-this-guideline-13\""><a href=\""#when-to-ignore-this-guideline-13\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>There are currently no known cases where to ignore this guideline.</p>\n<h3 id=\""custom-code-classlanguage-textobservablecode-implementations-should-follow-the-rxjs-contract\""><a href=\""#custom-code-classlanguage-textobservablecode-implementations-should-follow-the-rxjs-contract\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Custom <code class=\""language-text\"">Observable</code> implementations should follow the RxJS contract</h3>\n<p>When it is not possible to follow guideline 5.1, the custom implementation of the <code class=\""language-text\"">Observable</code> class should still follow the RxJS contract in order to get the right behavior from the RxJS operators.</p>\n<h4 id=\""when-to-ignore-this-guideline-14\""><a href=\""#when-to-ignore-this-guideline-14\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>Only ignore this guideline when writing observable sequences that need to break the contract on purpose (e.g. for testing).</p>\n<h3 id=\""operator-implementations-should-follow-guidelines-for-rxjs-usage\""><a href=\""#operator-implementations-should-follow-guidelines-for-rxjs-usage\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>Operator implementations should follow guidelines for RxJS usage</h3>\n<p>As Rx is a composable API, operator implementations often use other operators for their implementation (see paragraph 5.1). RxJS usage guidelines should be strongly considered when implementing these operators.</p>\n<h4 id=\""when-to-ignore-this-guideline-15\""><a href=\""#when-to-ignore-this-guideline-15\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>When to ignore this guideline</h4>\n<p>As described in the introduction, only follow a guideline if it makes sense in that specific situation.</p>"",""id"":""c2fbb6eb-bcf7-5dce-82c4-d7841957df67"",""fields"":{""slug"":""rx-js-2-rx-js-design-guidelines-2-5-operator-implementations""},""frontmatter"":{""date"":""2017-08-17"",""title"":""RxJS - 2. RxJS Design Guidelines(2.5 Operator Implementations)"",""category"":null,""tags"":[""Rxjs""],""banner"":null},""timeToRead"":16},{""excerpt"":""UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim 원본 출처 링크 : http://xgrommx.github.io/rx-book/content/guidelines/index.html 2.RxJS Design Guidelines(RxJS 설계 가이드라인) Introduction RxJS를 사용할때 비동기이고 이벤트 중심 연산을 조정하는 RxJS 사용하라  RxJS…"",""html"":""<p>UPDATE     : 2017.08.17 번역 시작\nTranslator : ByoengGiKim</p>\n<p><a href=\""http://xgrommx.github.io/rx-book/content/guidelines/index.html\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">원본 출처 링크 : http://xgrommx.github.io/rx-book/content/guidelines/index.html</a></p>\n<h1 id=\""2rxjs-design-guidelinesrxjs-설계-가이드라인\""><a href=\""#2rxjs-design-guidelinesrxjs-%EC%84%A4%EA%B3%84-%EA%B0%80%EC%9D%B4%EB%93%9C%EB%9D%BC%EC%9D%B8\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>2.RxJS Design Guidelines(RxJS 설계 가이드라인)</h1>\n<p><img style=\""display: block; margin: 0 auto; clear: right;\""\n  src=\""https://raw.githubusercontent.com/Reactive-Extensions/RxJS/master/doc/designguidelines/images/984368.png\""\n  alt=\""RxJS Logo\""></p>\n<ul>\n<li><a href=\""introduction/index.html\"">Introduction</a></li>\n<li>\n<p><a href=\""when/index.html\"">RxJS를 사용할때</a></p>\n<ul>\n<li><a href=\""when/index.html#use-rxjs-for-orchestrating-asynchronous-and-event-based-computations\"">비동기이고 이벤트 중심 연산을 조정하는 RxJS 사용하라 </a></li>\n<li><a href=\""when/index.html#use-rxjs-to-deal-with-asynchronous-sequences-of-data\"">RxJS는 비동기적인 데이터의 시퀀스 다룰때 사용하라</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\""contract/index.html\"">The RxJS contract</a></p>\n<ul>\n<li><a href=\""contract/index.html#assume-the-rxjs-grammar\"">Assume the RxJS Grammar</a></li>\n<li><a href=\""contract/index.html#assume-resources-are-cleaned-up-after-an-onerror-or-oncompleted-message\"">Assume resources are cleaned up after an <code class=\""language-text\"">onError</code> or <code class=\""language-text\"">onCompleted</code> messages</a></li>\n<li><a href=\""contract/index.html#assume-a-best-effort-to-stop-all-outstanding-work-on-unsubscribe\"">Assume a best effort to stop all outstanding work on Unsubscribe</a></li>\n</ul>\n</li>\n<li><a href=\""using/index.html\"">RxJS 사용하는법</a></li>\n<li><a href=\""implementations/index.html\"">Operator 구현</a></li>\n</ul>"",""id"":""fcd8a120-04ee-52cc-b633-feb89d6a5318"",""fields"":{""slug"":""rx-js-2-rx-js-design-guidelines""},""frontmatter"":{""date"":""2017-08-17"",""title"":""RxJS - 2. RxJS Design Guidelines"",""category"":null,""tags"":[""Rxjs""],""banner"":null},""timeToRead"":1},{""excerpt"":""UPDATE     : 2017.08.17\nTranslator : ByoengGiKim 원본 출처 링크 : http://xgrommx.github.io/rx-book/index.html 1.RxJS v4.0 Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style…"",""html"":""<p>UPDATE     : 2017.08.17\nTranslator : ByoengGiKim</p>\n<p><a href=\""http://xgrommx.github.io/rx-book/index.html\"" target=\""_blank\"" rel=\""nofollow noopener noreferrer\"">원본 출처 링크 : http://xgrommx.github.io/rx-book/index.html</a></p>\n<h1 id=\""1rxjs-v40\""><a href=\""#1rxjs-v40\"" aria-hidden=\""true\"" class=\""anchor\""><svg aria-hidden=\""true\"" height=\""16\"" version=\""1.1\"" viewBox=\""0 0 16 16\"" width=\""16\""><path fill-rule=\""evenodd\"" d=\""M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\""></path></svg></a>1.RxJS v4.0</h1>\n<p>Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators.\n리액티브 확장(Rx)는 Observable 시퀀스들과 LINQ-스타일 쿼리 연산자들을 사용하여 비동기적이고 결합과 이벤트 지향 프로그램에 대한 라이브러리이다.</p>\n<p>Data sequences can take many forms, such as a stream of data from a file or web service, web services requests, system notifications, or a series of events such as user input.\n데이터 시퀀스는 파일 , 웹서비스, 웹서비스 리퀘스트, 시스템알람, 또는 연속적인 사용자의 입력 같은 스트림과 같은 많은 형태를 취한다.</p>\n<p>Reactive Extensions represents all these data sequences as observable sequences. An application can subscribe to these observable sequences to receive asynchronous notifications as new data arrive.</p>\n<p>Reactive Extensions(Rx)은 observable 시퀀스들 같이 모든 데이터 시퀀스를 나타낸다. 어플리케이션은 새로운 데이터가 들어올때마다 비동기적인 알람을 받기 하기 위해서\nobservable sequences을 구독할수 있다.</p>\n<p>RxJS has no dependencies which complements and interoperates smoothly with both synchronous data streams such as iterable objects in JavaScript and single-value asynchronous computations such as Promises as the following diagram shows:</p>\n<p>다음 다이어그램과 같이 프로미스와 같은 하나의 single-value 비동기적인 연산과 자바스크립에서 iterable objects와 같은 동기적인 데이터 스트림을 가지면서 상호작용과 보완해주면서 RxJS는 동작한다. </p>\n<table>\n<thead>\n<tr>\n<th></th>\n<th align=\""center\"">Single return value</th>\n<th align=\""right\"">Mutiple return values</th>\n</tr>\n</thead>\n<tbody>\n</tbody>\n</table>\n<center>\n<table style=\""display: table\"">\n    <thead>\n        <tr>\n            <th></th>\n            <th>Single return value</th>\n            <th>Mutiple return values</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n          <td>Pull/Synchronous/Interactive</td>\n          <td>Object</td>\n          <td>Iterables (Array | Set | Map | Object)</td>\n        </tr>\n        <tr>\n          <td>Push/Asynchronous/Reactive</td>\n          <td>Promise</td>\n          <td>Observable</td>\n        </tr>\n    </tbody>\n</table>\n</center>\n<p>To put it more concretely, if you know how to program against Arrays using the Array#extras, then you already know how to use RxJS!</p>\n<center>\n<h3>Example code showing how similar high-order functions can be applied to an Array and an Observable</h3>\n<table style=\""display: table\"">\n    <thead>\n        <tr>\n            <th style=\""text-align:center;\"" colspan=\""2\"">Iterable</th>\n            <th style=\""text-align:center;\"" colspan=\""2\"">Observable</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td colspan=\""2\"">\n                <pre>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token function\"">getDataFromLocalMemory</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">filter</span> <span class=\""token punctuation\"">(</span>s <span class=\""token operator\"">=></span> s <span class=\""token operator\"">!=</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span>s <span class=\""token operator\"">=></span> <span class=\""token template-string\""><span class=\""token string\"">`</span><span class=\""token interpolation\""><span class=\""token interpolation-punctuation punctuation\"">${</span>s<span class=\""token interpolation-punctuation punctuation\"">}</span></span><span class=\""token string\""> transformed`</span></span><span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">forEach</span><span class=\""token punctuation\"">(</span>s <span class=\""token operator\"">=></span> console<span class=\""token punctuation\"">.</span><span class=\""token function\"">log</span><span class=\""token punctuation\"">(</span><span class=\""token template-string\""><span class=\""token string\"">`next => </span><span class=\""token interpolation\""><span class=\""token interpolation-punctuation punctuation\"">${</span>s<span class=\""token interpolation-punctuation punctuation\"">}</span></span><span class=\""token string\"">`</span></span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span></code></pre></div>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">            &lt;/pre&gt;\n        &lt;/td&gt;\n        &lt;td colspan=&quot;2&quot;&gt;\n            &lt;pre&gt;</code></pre></div>\n<div class=\""gatsby-highlight\"" data-language=\""javascript\""><pre class=\""language-javascript\""><code class=\""language-javascript\""><span class=\""token function\"">getDataFromNetwork</span><span class=\""token punctuation\"">(</span><span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">filter</span> <span class=\""token punctuation\"">(</span>s <span class=\""token operator\"">=></span> s <span class=\""token operator\"">!=</span> <span class=\""token keyword\"">null</span><span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">map</span><span class=\""token punctuation\"">(</span>s <span class=\""token operator\"">=></span> <span class=\""token template-string\""><span class=\""token string\"">`</span><span class=\""token interpolation\""><span class=\""token interpolation-punctuation punctuation\"">${</span>s<span class=\""token interpolation-punctuation punctuation\"">}</span></span><span class=\""token string\""> transformed`</span></span><span class=\""token punctuation\"">)</span>\n    <span class=\""token punctuation\"">.</span><span class=\""token function\"">subscribe</span><span class=\""token punctuation\"">(</span>s <span class=\""token operator\"">=></span> console<span class=\""token punctuation\"">.</span><span class=\""token function\"">log</span><span class=\""token punctuation\"">(</span><span class=\""token template-string\""><span class=\""token string\"">`next => </span><span class=\""token interpolation\""><span class=\""token interpolation-punctuation punctuation\"">${</span>s<span class=\""token interpolation-punctuation punctuation\"">}</span></span><span class=\""token string\"">`</span></span><span class=\""token punctuation\"">)</span><span class=\""token punctuation\"">)</span></code></pre></div>\n<div class=\""gatsby-highlight\"" data-language=\""text\""><pre class=\""language-text\""><code class=\""language-text\"">            &lt;/pre&gt;\n        &lt;/td&gt;\n    &lt;/tr&gt;\n&lt;/tbody&gt;</code></pre></div>\n</table>\n</center>"",""id"":""ea7fa30e-3b50-5944-b482-625e664df6e8"",""fields"":{""slug"":""rx-js-introduction""},""frontmatter"":{""date"":""2017-08-17"",""title"":""RxJS - Introduction"",""category"":null,""tags"":[""Rxjs""],""banner"":null},""timeToRead"":2}],""tagName"":""Rxjs""}}"
4fb9cd4a71765ed51dae461fc9bbdbc6c491291e,1197928,     * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
c5591b4afebdbc28bd34c72651eb126f8dfe55fe,22796520,    # See http://stackoverflow.com/questions/22796520/finding-the-center-of-leaflet-polygon
d80f46b7bb1f33b71f0b29184fd63612b56aab34,33623453,"  <td><a href=""https://stackoverflow.com/q/33623453"">33623453</a></td>"
d4697e8e41f16f2f55c0a685f1f10c92d0aecd3a,8203326,        // https://stackoverflow.com/a/8203326
bf98dc00ded3a3126369b7a581081cb5c5477f92,57803," * http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
e3f26a7eccdec0fd48697efe97c996a2935ee129,5389547,    Copied from: http://stackoverflow.com/a/5389547/3710392
6e9b7fefa3d060dae6dfffe18457e2775ced9689,2671151,  // http://stackoverflow.com/questions/2671151/who-frees-setvbuf-buffer
b26c6c9958c7ae1f5774c3681712e42605187bc5,28887680,      #see https://stackoverflow.com/questions/28887680/linking-boost-library-with-boost-use-static-lib-off-on-windows
0254c2b0520104d8d869a202e4bc033da10d388e,1877475,        return s + Array(k+1).join('\n')   # see http://stackoverflow.com/questions/1877475/repeat-character-n-times
aaa3c59f25d8e04ddbb561abc6ebbd41d15e9b2a,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
214bd41e2f3ae0fac9c2433ad1dc9b070f1ffca2,20058585,"  // the method as a block (see http://stackoverflow.com/a/20058585),"
9a03a0986df5950516593fabb801ee1fc9fbc1c4,18705686,    # !!!!!!!! this is a horrible hack to satisfy a bug in the EmberJS fixture loader. see http://stackoverflow.com/questions/18705686/emberjs-record-with-hasmany-relation-fails-to-load
4e04a76c89df4fa5eb11edc903e79288a32eaf06,2610497,Stack Overflow上的答案:[Change an input's HTML5 placeholder color with CSS](http://stackoverflow.com/questions/2610497/change-an-inputs-html5-placeholder-color-with-css)
1b14fd50819156fbbd844dd919604d878b559140,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
bab4ba3fbe9e7ce53bd7fe30d6c2936eda458000,14227981,//from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array
bd1a55d2c4380c84b006c36fd885931bc1add96b,25323753, * @link https://stackoverflow.com/questions/25323753/laravel-league-flysystem-getting-file-url-with-aws-s3
086b292e25ebe9db5ebe9bc1a00b2fe3dd32d8fb,8793684,            the implementation: http://stackoverflow.com/a/8793684/71522
8098689aa80ed3e846a443bf79e0c2ede43a4ad7,3531506,// https://stackoverflow.com/questions/3531506/using-public-key-from-authorized-keys-with-java-security
4bdcad1493812f509ca83275d37be19695a97328,10119793,                    //Possibly related to http://stackoverflow.com/questions/10119793/why-does-firefox-react-differently-from-webkit-and-ie-to-click-event-on-selec
e31f0c26a8d467fc0ff8b77ba895686e5f746ddd,6248722,                    /* see http://stackoverflow.com/a/6248722/2519373 */
069efdc524e87da5d5ea493923b84bea86e4261b,11602074,"4292464,story,,,1,0,hhimanshu,""Hadoop: job runs okay on smaller set of data but fails with large dataset"",http://stackoverflow.com/questions/11602074/hadoop-job-runs-okay-on-smaller-set-of-data-but-fails-with-large-dataset,,1343243265"
9b1fde318e0749fdd34cbac4817947b314c6baf2,4009756,# from http://stackoverflow.com/questions/4009756/how-to-count-string-occurrence-in-string via http://js2coffee.org/
93261c00837bfebb9ceaf839699bbdabaa9d54fe,14783947,       http://stackoverflow.com/questions/14783947/grouping-clustering-numbers-in-python
a65ee559b828794a44622e3ce6c0cf85ba392658,5614221,// 2. http://stackoverflow.com/questions/5614221/custom-attributes-for-a-dialogpreference
466a8130c3c36983e09a219ba01a289321241b3c,4263375,http://stackoverflow.com/questions/4263375/android-saving-created-bitmap-to-directory-on-sd-card
f13e5e67de07e6b250e2e7bfc43a6bc9b1d39cd4,14941366,<http://stackoverflow.com/questions/14941366/pandas-sort-by-group-aggregate-and-column>`__
30e169ed8de6f7fe5143a7e54988c315bf2b9c3c,6274339,    // http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript
5b3f946108fe7757e54a273d05c256261ee9e48e,196345,    http://stackoverflow.com/q/196345
dd3436daf2c76149ce52495a16d8ae55b7288cf6,901115,   * http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
112f53757b9f974c521479e79a20c6cb924b7668,2406058,    // http://stackoverflow.com/questions/1620847/how-can-i-get-visual-studio-2008-windows-forms-designer-to-render-a-form-that-im/2406058#2406058
6ad633ce0af0c9beece61d5c0db5f89d6ffb3fcb,14004308,"	<li><a href=""http://stackoverflow.com/questions/14004308/spring-autowiring-not-able-to-hit-my-dao-class-method"">http://stackoverflow.com/questions/14004308/spring-autowiring-not-able-to-hit-my-dao-class-method</a></li>"
2f8d32df4906ba6c9a39b5cb44ae986a6dccd87b,9986842,// Idea taken from http://stackoverflow.com/a/9986842/403425
7f57381ac55f10463fa805518785a510406fcb26,7822925,    // See http://stackoverflow.com/questions/7822925 for details/concerns.
7addf341b12d96ff24f64f2da2eb8de5ecae33fc,3330919,        // http://stackoverflow.com/a/3330919)
b794dcd0c4ebfc3cee58444d4e0ca86ba88c2250,16428065,	// Copied from http://stackoverflow.com/a/16428065/986533
2a3d0faa53ffd7c43ff3d72499240f7dc10b0a5c,9626535,        From : http://stackoverflow.com/questions/9626535/get-domain-name-from-url
46ac59640b8d4a8df3095fd12ee92d9c045735d3,5849139,"<a class=""h-link"" href=""http://stackoverflow.com/questions/5849139/levenshtein-distance-inferring-the-edit-operations-from-the-matrix"">"
635b1786085a31ad3b1496522b832231154fd583,6586145,	--refer to: http://stackoverflow.com/questions/6586145/lua-require-with-global-local
8aac9f1ed531599eba9e34daad73625cac470cc1,7781963,    // http://stackoverflow.com/questions/7781963/js-get-array-of-all-selected-nodes-in-contenteditable-div
e129495843c4bdcd38027af818be29380312b6da,13421317,     * @link https://stackoverflow.com/questions/13421317/finding-the-php-file-at-run-time-where-a-method-of-an-object-was-defined
531e1c2200a5f6fbc3d0ddae179e31ee839faf1d,5775469,          // http://stackoverflow.com/questions/5775469
bfb70b44ec768441d9e76f474eaba4d125b5b76f,34844845,http://stackoverflow.com/questions/34844845/docker-tooling-for-eclipse-how-to-connect-to-docker-daemon-running-inside-vm
18c1bb89e9a1382a5baee36e165bf86a1f899467,21198977,http://stackoverflow.com/questions/21198977/difference-between-grunt-npm-and-bower-package-json-vs-bower-json 
7502cc854734fd4f091de7665fc47f50584ead33,1134290,     *      @see http://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain
c6790ae16a18d22a193efe101f8b919cdadba0d3,16811173,# source: http://stackoverflow.com/questions/16811173/bash-inserting-one-files-content-into-another-file-after-the-pattern
618a73db89b95c7bef56737647be8cc68100fcd8,686217,		 * <a href='http://stackoverflow.com/questions/686217/maximum-on-http-header-values' target='_blank'>http://stackoverflow.com/questions/686217/maximum-on-http-header-values</a>).
10660baab704556428991ee37a808473c74f367a,2333728, * adapted from http://stackoverflow.com/questions/2333728/stdmap-default-value
ce5efb9f17603914c7d7a55b24c90f1ee6b66c28,1598823,# From: http://stackoverflow.com/questions/1598823/elegant-setup-of-python-logging-in-django
4d3497214a746a30968ffe6f8ce5f1bfad4b222b,29142487,"    ""[Grouping like Python's itertools.groupby method](https://stackoverflow.com/questions/29142487/calculating-the-number-of-specific-consecutive-equal-values-in-a-vectorized-way)"""
36a7b314e74a4cda40836388cf2f9fe3b04ad711,301287,"  ""readme"": ""# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.png?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.png)](https://gemnasium.com/bestiejs/punycode.js)\n\nA robust Punycode converter that fully complies to [RFC 3492](http://tools.ietf.org/html/rfc3492) and [RFC 5891](http://tools.ietf.org/html/rfc5891), and works on nearly all JavaScript platforms.\n\nThis JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm:\n\n* [The C example code from RFC 3492](http://tools.ietf.org/html/rfc3492#appendix-C)\n* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c)\n* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c)\n* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287)\n* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072))\n\nThis project is [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with [Node.js v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc).\n\n## Installation\n\nVia [npm](http://npmjs.org/) (only required for Node.js releases older than v0.6.2):\n\n```bash\nnpm install punycode\n```\n\nVia [Bower](http://bower.io/):\n\n```bash\nbower install punycode\n```\n\nVia [Component](https://github.com/component/component):\n\n```bash\ncomponent install bestiejs/punycode.js\n```\n\nIn a browser:\n\n```html\n<script src=\""punycode.js\""></script>\n```\n\nIn [Narwhal](http://narwhaljs.org/), [Node.js](http://nodejs.org/), and [RingoJS](http://ringojs.org/):\n\n```js\nvar punycode = require('punycode');\n```\n\nIn [Rhino](http://www.mozilla.org/rhino/):\n\n```js\nload('punycode.js');\n```\n\nUsing an AMD loader like [RequireJS](http://requirejs.org/):\n\n```js\nrequire(\n  {\n    'paths': {\n      'punycode': 'path/to/punycode'\n    }\n  },\n  ['punycode'],\n  function(punycode) {\n    console.log(punycode);\n  }\n);\n```\n\n## API\n\n### `punycode.decode(string)`\n\nConverts a Punycode string of ASCII symbols to a string of Unicode symbols.\n\n```js\n// decode domain name parts\npunycode.decode('maana-pta'); // 'mañana'\npunycode.decode('--dqo34k'); // '☃-⌘'\n```\n\n### `punycode.encode(string)`\n\nConverts a string of Unicode symbols to a Punycode string of ASCII symbols.\n\n```js\n// encode domain name parts\npunycode.encode('mañana'); // 'maana-pta'\npunycode.encode('☃-⌘'); // '--dqo34k'\n```\n\n### `punycode.toUnicode(domain)`\n\nConverts a Punycode string representing a domain name to Unicode. Only the Punycoded parts of the domain name will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode.\n\n```js\n// decode domain names\npunycode.toUnicode('xn--maana-pta.com'); // 'mañana.com'\npunycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com'\n```\n\n### `punycode.toASCII(domain)`\n\nConverts a Unicode string representing a domain name to Punycode. Only the non-ASCII parts of the domain name will be converted, i.e. it doesn’t matter if you call it with a domain that's already in ASCII.\n\n```js\n// encode domain names\npunycode.toASCII('mañana.com'); // 'xn--maana-pta.com'\npunycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com'\n```\n\n### `punycode.ucs2`\n\n#### `punycode.ucs2.decode(string)`\n\nCreates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](http://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16.\n\n```js\npunycode.ucs2.decode('abc'); // [0x61, 0x62, 0x63]\n// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE:\npunycode.ucs2.decode('\\uD834\\uDF06'); // [0x1D306]\n```\n\n#### `punycode.ucs2.encode(codePoints)`\n\nCreates a string based on an array of numeric code point values.\n\n```js\npunycode.ucs2.encode([0x61, 0x62, 0x63]); // 'abc'\npunycode.ucs2.encode([0x1D306]); // '\\uD834\\uDF06'\n```\n\n### `punycode.version`\n\nA string representing the current Punycode.js version number.\n\n[Full API documentation is available.](https://github.com/bestiejs/punycode.js/tree/master/docs#readme)\n\n## Unit tests & code coverage\n\nAfter cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`.\n\nOnce that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`.\n\nTo generate [the code coverage report](http://rawgithub.com/bestiejs/punycode.js/master/coverage/punycode.js/punycode.js.html), use `grunt cover`.\n\nFeel free to fork if you see possible improvements!\n\n## Author\n\n| [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](http://twitter.com/mathias \""Follow @mathias on Twitter\"") |\n|---|\n| [Mathias Bynens](http://mathiasbynens.be/) |\n\n## Contributors\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](http://twitter.com/jdalton \""Follow @jdalton on Twitter\"") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## License\n\nPunycode.js is dual licensed under the [MIT](http://mths.be/mit) and [GPL](http://mths.be/gpl) licenses.\n"","
f005d642f3e87c99dd9e7618d44e5868d867e6ed,3115559,[Exploitable Functions](http://stackoverflow.com/questions/3115559/exploitable-php-functions)
a33b83ea15018677829a8b183d6e1678b6544c84,7264899,"	// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr"
741af31b5bd6f69c3a07ffd7ef940fecb839ddf2,5440128,"<li><a href=""http://stackoverflow.com/questions/5440128/thread-context-switch-vs-process-context-switch"" style=""background: transparent; color: #1980e6; text-decoration: none;"" target=""_blank"">thread context switch vs process context switch</a></li>"
7b47f0de2051c86af84e5bffe86cf0bb83637261,3330919,        // http://stackoverflow.com/a/3330919)
db17b2c2760948c572a451d1c14dda2f4ca8bfd9,15147497,// mobile webkit smooth scrolling: http://stackoverflow.com/a/15147497/2363935
69ffe1162936657dafb65dde55086842931f4c94,4332264,  // https://stackoverflow.com/questions/4332264/wrapping-a-bytebuffer-with-an-inputstream
9aa0cc6a0cfe22cd57c34ddf8686aaf28e38af15,2039745,// http://stackoverflow.com/a/2039745/596065
b7f7e0f445ce174d3058aec65dfb7b2e14ed4f77,12848327,        for https://stackoverflow.com/questions/12848327/
8c9907a835963a989dd9e5036046e9c60856b091,22717428,参考连接:[Vagrant error : Failed to mount folders in Linux guest](http://stackoverflow.com/questions/22717428/vagrant-error-failed-to-mount-folders-in-linux-guest)
34f647a7367a37a5bc515e7ff9483b2844ae5765,9039885,    // Detect iOS: http://stackoverflow.com/questions/9038625/detect-if-device-is-ios/9039885#9039885
b5be55b6c150c7920101b2010cd025cc3c3acc64,1349404, * https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
578433137199a095167c300a6fa591ff3725f3ec,2450976, * @see	http://stackoverflow.com/a/2450976
635ce38b38104fa2d7ba4a875214b28f6606aa5f,1701898,// from http://stackoverflow.com/questions/1701898/how-to-detect-whether-a-string-is-in-url-format-using-javascript
706d3e9e99af571f20cc5edd37ce6ecfcd9745b8,10454552,            // credit: http://stackoverflow.com/a/10454552/677735
d0dcff092a64bb62c1e639e8317fdb1533711797,3148441,//   - http://stackoverflow.com/a/3148441/147079
5fb6a518121f73b0e1d5be3fd274a2a4d5cf0e5e,17782522, * from http://stackoverflow.com/a/17782522/1069444
b64667b4195af3c898efabe56a31841464015d18,899206,"  ""readme"": ""isBinaryFile\n============\n\nDetects if a file is binary in Node.js. Similar to [Perl's `-B` switch](http://stackoverflow.com/questions/899206/how-does-perl-know-a-file-is-binary), in that:\n\n* it reads the first few thousand bytes of a file\n* checks for a `null` byte; if it's found, it's binary\n* flags non-ASCII characters. After a certain number of \""weird\"" characters, the file is flagged as binary\n\nAll the logic is also pretty much ported from [ag](https://github.com/ggreer/the_silver_searcher).\n\nNote: if the file doesn't exist or it is empty, this function returns `false`.\n\n## Installation\n\n```\nnpm install isBinaryFile\n```\n\n## Usage\n\nIf you pass in one argument, this module assumes it's just the file path, and performs the appropriate file read and stat functionality internally:\n\n```javascript\nvar isBinaryFile = require(\""isbinaryfile\"");\n\nif (isBinaryFile(process.argv[2]))\n\tconsole.log(\""It is!\"")\nelse\n\tconsole.log(\""No.\"")\n```\n\nTa da. \n\n\nHowever, if you've already read and `stat()`-ed a file (for some other reason), you can pass in both the file's raw data and the stat's `size` info to save time:\n\n```javascript\nfs.readFile(process.argv[2], function(err, data) {\n\tfs.lstat(process.argv[2], function(err, stat) {\n\t\tif (isBinaryFile(data, stat))\n\t\t\tconsole.log(\""It is!\"")\n\t\telse\n\t\t\tconsole.log(\""No.\"")\n\t});\n});\n```\n\n## Testing\n\nInstall mocha on your machine:\n\n```\nnpm install mocha -g\n```\n\nThen go into the _tests_ directory, and type `mocha test.js`.\n"","
0b445dfc65e55fb1a2757171dcf9716136a3f296,1082378,        // http://stackoverflow.com/questions/1082378/what-is-the-basic-use-of-aligned-storage
882c3a1609e56cfbc6e5ec046b9a443888ccd093,12305667,"            byte[] data = future.get(30000, TimeUnit.MILLISECONDS); //http://stackoverflow.com/questions/12305667/how-is-exception-handling-done-in-a-callable"
793f76548b1165ef4f4543048529601f531942b4,18801404,/* http://stackoverflow.com/a/18801404/5415895 */
d61ed6a7462a1c6ffde06ca91fba9c096c819eff,8723823,"<a href=""http://stackoverflow.com/a/8723823/6017919"">if I add a ProjectReference Element to link to a native library, that I build errors deep inside of the MSBuild scripts.</a>"
bfe73cb467ac423c631cdb66be76db41d5807612,1723225,"	// of the string, see http://stackoverflow.com/a/1723225 for details):"
5feee07e24388485e80006b2fb853d4b3d404b5f,28757389,pandas的各种选取操作很容易让人搞混，[这里](http://stackoverflow.com/questions/28757389/loc-vs-iloc-vs-ix-vs-at-vs-iat)有人问了，总结起来就是：
b7c9ccd4cf6e03c45814aaed86d78e8563592ed6,16459606,  // is webkit? http://stackoverflow.com/a/16459606/376773
d15fcfe77147faddfef557da265fc031d56e0b14,8001065,"8888309,story,,,2,0,shawndumas,""What are all the uses of an underscore in Scala?"",http://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala/8001065?stw=2#8001065,,1421262663"
460fcbceed1450f548713fd175e21ea0854e63f9,2924671,        // http://stackoverflow.com/questions/2924671/mysql-delete-and-index-hint#answer-2924738
89e29b467032f1b8eeb56926617bca9406d724ce,16824853,            // http://stackoverflow.com/questions/16824853/way-to-ng-repeat-defined-number-of-times-instead-of-repeating-over-array
b1cf58e8342e32ce9d058157eaaf8c366290093d,14648442,"        libxml_use_internal_errors(true); // fix problem with ""&"" - http://stackoverflow.com/questions/14648442/domdocumentloadhtml-warning-htmlparseentityref-no-name-in-entity"
79ba1751dc8ad60616435d3255e287326869cf10,19556336,- You have to set up your in-app purchases in iTunes Connect first. Follow steps 1-13 in this [tutorial](http://stackoverflow.com/questions/19556336/how-do-you-add-an-in-app-purchase-to-an-ios-application) for an easy explanation.
a81d84f5cf269795fecc5712ee69fc16f3dc4e14,8331169,/* Solution to transition? https://stackoverflow.com/questions/3508605/how-can-i-transition-height-0-to-height-auto-using-css#8331169 */\
2be2f595e3a3c0ff60204ce9f5fa383cb3220e32,6938560, * http://stackoverflow.com/questions/6938560/android-fragments-setcontentview-
9278ddb347ca6fc239c79de03ae85853e5ba85eb,6169639,"        <link rel=""alternate"" href=""http://stackoverflow.com/questions/6169548/what-is-this-problem-in-j2me-with-eclipse/6169639#6169639"" />"
2b5e407125b0542254ce62add7d0cefad73c8a9f,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
26b30c764522638d430693d02a44eeae4878b9fa,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
121684cae9236cf50263ef51e8cac923e9cbe92e,16612061,    * [http://stackoverflow.com/questions/16612061/highstock-make-navigator-handles-move-a-fixed-distance-relative-to-eachother](http://stackoverflow.com/questions/16612061/highstock-make-navigator-handles-move-a-fixed-distance-relative-to-eachother)
af26b3143350be0107828b49190ac044537399e4,1633828,// http://stackoverflow.com/questions/1633828
0cb64813a78dd6e739acaca81c4777f3c833bb85,1296101,  // http://stackoverflow.com/a/1296101
b92f9c567e5066005da5d5fb35a0148ed166ebb2,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
7179f7b86b706bc39f00e315db9c1e70349461cb,19121854,"<p><a class=""reference external"" href=""http://stackoverflow.com/questions/19121854/using-rolling-apply-on-a-dataframe-object"">Rolling Apply with a DataFrame returning a Series</a></p>"
5b8b094dc17d6a1e1dd8d013b336b5ee8c9c576a,24228604,            //Source: https://stackoverflow.com/a/24228604
54cb0604b978374e145883dfb00a1b88c5f7ba71,23419322,"    ""We found this [Stack Overflow exchange](http://stackoverflow.com/questions/23419322/download-a-zip-file-and-extract-it-in-memory-using-python3) helpful. \n"","
dc313089c7cb8b27324e1bea39075c682c3ce919,12328603,#   https://stackoverflow.com/questions/12328603/how-to-pass-command-line-argument-to-gnuplot
b4a38bc76a5b7c7cec80cf6cad225908dc0bd5cf,1799099,https://stackoverflow.com/questions/1799099/advantages-and-disadvantages-of-ruby-on-rails-polymorphic-relationships
1b4f59231b00655bc704b43e78c550c40bad4e47,16861050,        // Multi Screen Popup Positioning (http://stackoverflow.com/a/16861050)
14210595fe63ecc5fc557869cfd5da84b7a77ab3,2900370,# http://stackoverflow.com/questions/2900370/why-does-ruby-1-9-2-remove-from-load-path-and-whats-the-alternative
b0dd5d9da3a00f8a3dfa6bf77a82c8b373ffb194,13131811,    # See: https://stackoverflow.com/a/13131811/6451879
f553d64229e8c33b5946ce148264e48f6c152ef8,5634528,    // http://stackoverflow.com/a/5634528/2280888
2681a4a3d7217718e0769e0c3cba72b29f906027,1251438,    * http://stackoverflow.com/questions/1251438
22e2e5ec614d681ad6cdbda5d691fac88a97d832,5763747,    // from http://stackoverflow.com/questions/5763747/h2-in-memory-database-what-am-i-missing
ebddbe2aa797b870b60d11802bdbb048711cda1e,18082 7167553,"{""version"":3,""file"":""ractive.min.js"",""sources"":[""ractive.js""],""sourcesContent"":[""/*\n\tRactive.js v0.9.0-edge\n\tSun Feb 05 2017 05:49:55 GMT+0000 (UTC) - commit 8beb8314d65f338223dfd43fbe60d6494683bd9f\n\n\thttp://ractivejs.org\n\thttp://twitter.com/RactiveJS\n\n\tReleased under the MIT License.\n*/\n\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t((function() { var current = global.Ractive; var next = factory(); next.noConflict = function() { global.Ractive = current; return next; }; return global.Ractive = next; })());\n}(this, (function () { 'use strict';\n\nvar defaults = {\n\t// render placement:\n\tel:                     void 0,\n\tappend:                 false,\n\tdelegate:               true,\n\n\t// template:\n\ttemplate:               null,\n\n\t// parse:\n\tdelimiters:             [ '{{', '}}' ],\n\ttripleDelimiters:       [ '{{{', '}}}' ],\n\tstaticDelimiters:       [ '[[', ']]' ],\n\tstaticTripleDelimiters: [ '[[[', ']]]' ],\n\tcsp:                    true,\n\tinterpolate:            false,\n\tpreserveWhitespace:     false,\n\tsanitize:               false,\n\tstripComments:          true,\n\tcontextLines:           0,\n\n\t// data & binding:\n\tdata:                   {},\n\tcomputed:               {},\n\tsyncComputedChildren:   false,\n\tresolveInstanceMembers: true,\n\twarnAboutAmbiguity:     false,\n\tmagic:                  false,\n\tmodifyArrays:           false,\n\tadapt:                  [],\n\tisolated:               false,\n\ttwoway:                 true,\n\tlazy:                   false,\n\n\t// transitions:\n\tnoIntro:                false,\n\tnoOutro:                false,\n\ttransitionsEnabled:     true,\n\tcomplete:               void 0,\n\tnestedTransitions:      true,\n\n\t// css:\n\tcss:                    null,\n\tnoCssTransform:         false\n};\n\n// These are a subset of the easing equations found at\n// https://raw.github.com/danro/easing-js - license info\n// follows:\n\n// --------------------------------------------------\n// easing.js v0.5.4\n// Generic set of easing functions with AMD support\n// https://github.com/danro/easing-js\n// This code may be freely distributed under the MIT license\n// http://danro.mit-license.org/\n// --------------------------------------------------\n// All functions adapted from Thomas Fuchs & Jeremy Kahn\n// Easing Equations (c) 2003 Robert Penner, BSD license\n// https://raw.github.com/danro/easing-js/master/LICENSE\n// --------------------------------------------------\n\n// In that library, the functions named easeIn, easeOut, and\n// easeInOut below are named easeInCubic, easeOutCubic, and\n// (you guessed it) easeInOutCubic.\n//\n// You can add additional easing functions to this list, and they\n// will be globally available.\n\n\nvar easing = {\n\tlinear: function linear ( pos ) { return pos; },\n\teaseIn: function easeIn ( pos ) { return Math.pow( pos, 3 ); },\n\teaseOut: function easeOut ( pos ) { return ( Math.pow( ( pos - 1 ), 3 ) + 1 ); },\n\teaseInOut: function easeInOut ( pos ) {\n\t\tif ( ( pos /= 0.5 ) < 1 ) { return ( 0.5 * Math.pow( pos, 3 ) ); }\n\t\treturn ( 0.5 * ( Math.pow( ( pos - 2 ), 3 ) + 2 ) );\n\t}\n};\n\nvar toString$1$1 = Object.prototype.toString;\n\n\nfunction isEqual ( a, b ) {\n\tif ( a === null && b === null ) {\n\t\treturn true;\n\t}\n\n\tif ( typeof a === 'object' || typeof b === 'object' ) {\n\t\treturn false;\n\t}\n\n\treturn a === b;\n}\n\n// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\nfunction isNumeric ( thing ) {\n\treturn !isNaN( parseFloat( thing ) ) && isFinite( thing );\n}\n\nfunction isObject ( thing ) {\n\treturn ( thing && toString$1$1.call( thing ) === '[object Object]' );\n}\n\nfunction isObjectLike ( thing ) {\n\tif ( !thing ) { return false; }\n\tvar type = typeof thing;\n\tif ( type === 'object' || type === 'function' ) { return true; }\n}\n\n/* eslint no-console:\""off\"" */\nvar win = typeof window !== 'undefined' ? window : null;\nvar doc = win ? document : null;\nvar isClient = !!doc;\nvar hasConsole = ( typeof console !== 'undefined' && typeof console.warn === 'function' && typeof console.warn.apply === 'function' );\n\nvar magic;\ntry {\n\tObject.defineProperty({}, 'test', { value: 0 });\n\tmagic = true;\n} catch ( e ) {\n\tmagic = false;\n}\n\nvar svg = doc ?\n\tdoc.implementation.hasFeature( 'http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1' ) :\n\tfalse;\n\nvar vendors = [ 'o', 'ms', 'moz', 'webkit' ];\n\nvar noop = function () {};\n\n/* global console */\n/* eslint no-console:\""off\"" */\n\nvar alreadyWarned = {};\nvar log;\nvar printWarning;\nvar welcome;\n\nif ( hasConsole ) {\n\tvar welcomeIntro = [\n\t\t\""%cRactive.js %c0.9.0-edge-8beb8314d65f338223dfd43fbe60d6494683bd9f %cin debug mode, %cmore...\"",\n\t\t'color: rgb(114, 157, 52); font-weight: normal;',\n\t\t'color: rgb(85, 85, 85); font-weight: normal;',\n\t\t'color: rgb(85, 85, 85); font-weight: normal;',\n\t\t'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n\t];\n\tvar welcomeMessage = \""You're running Ractive 0.9.0-edge-8beb8314d65f338223dfd43fbe60d6494683bd9f in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\\n\\nTo disable debug mode, add this line at the start of your app:\\n  Ractive.DEBUG = false;\\n\\nTo disable debug mode when your app is minified, add this snippet:\\n  Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\\n\\nGet help and support:\\n  http://docs.ractivejs.org\\n  http://stackoverflow.com/questions/tagged/ractivejs\\n  http://groups.google.com/forum/#!forum/ractive-js\\n  http://twitter.com/ractivejs\\n\\nFound a bug? Raise an issue:\\n  https://github.com/ractivejs/ractive/issues\\n\\n\"";\n\n\twelcome = function () {\n\t\tif ( Ractive.WELCOME_MESSAGE === false ) {\n\t\t\twelcome = noop;\n\t\t\treturn;\n\t\t}\n\t\tvar message = 'WELCOME_MESSAGE' in Ractive ? Ractive.WELCOME_MESSAGE : welcomeMessage;\n\t\tvar hasGroup = !!console.groupCollapsed;\n\t\tif ( hasGroup ) { console.groupCollapsed.apply( console, welcomeIntro ); }\n\t\tconsole.log( message );\n\t\tif ( hasGroup ) {\n\t\t\tconsole.groupEnd( welcomeIntro );\n\t\t}\n\n\t\twelcome = noop;\n\t};\n\n\tprintWarning = function ( message, args ) {\n\t\twelcome();\n\n\t\t// extract information about the instance this message pertains to, if applicable\n\t\tif ( typeof args[ args.length - 1 ] === 'object' ) {\n\t\t\tvar options = args.pop();\n\t\t\tvar ractive = options ? options.ractive : null;\n\n\t\t\tif ( ractive ) {\n\t\t\t\t// if this is an instance of a component that we know the name of, add\n\t\t\t\t// it to the message\n\t\t\t\tvar name;\n\t\t\t\tif ( ractive.component && ( name = ractive.component.name ) ) {\n\t\t\t\t\tmessage = \""<\"" + name + \""> \"" + message;\n\t\t\t\t}\n\n\t\t\t\tvar node;\n\t\t\t\tif ( node = ( options.node || ( ractive.fragment && ractive.fragment.rendered && ractive.find( '*' ) ) ) ) {\n\t\t\t\t\targs.push( node );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn.apply( console, [ '%cRactive.js: %c' + message, 'color: rgb(114, 157, 52);', 'color: rgb(85, 85, 85);' ].concat( args ) );\n\t};\n\n\tlog = function () {\n\t\tconsole.log.apply( console, arguments );\n\t};\n} else {\n\tprintWarning = log = welcome = noop;\n}\n\nfunction format ( message, args ) {\n\treturn message.replace( /%s/g, function () { return args.shift(); } );\n}\n\nfunction fatal ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\tthrow new Error( message );\n}\n\nfunction logIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\tlog.apply( null, arguments );\n\t}\n}\n\nfunction warn ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\tprintWarning( message, args );\n}\n\nfunction warnOnce ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\n\tif ( alreadyWarned[ message ] ) {\n\t\treturn;\n\t}\n\n\talreadyWarned[ message ] = true;\n\tprintWarning( message, args );\n}\n\nfunction warnIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\twarn.apply( null, arguments );\n\t}\n}\n\nfunction warnOnceIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\twarnOnce.apply( null, arguments );\n\t}\n}\n\n// Error messages that are used (or could be) in multiple places\nvar badArguments = 'Bad arguments';\nvar noRegistryFunctionReturn = 'A function was specified for \""%s\"" %s, but no %s was returned';\nvar missingPlugin = function ( name, type ) { return (\""Missing \\\""\"" + name + \""\\\"" \"" + type + \"" plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#\"" + type + \""s\""); };\n\nfunction findInViewHierarchy ( registryName, ractive, name ) {\n\tvar instance = findInstance( registryName, ractive, name );\n\treturn instance ? instance[ registryName ][ name ] : null;\n}\n\nfunction findInstance ( registryName, ractive, name ) {\n\twhile ( ractive ) {\n\t\tif ( name in ractive[ registryName ] ) {\n\t\t\treturn ractive;\n\t\t}\n\n\t\tif ( ractive.isolated ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tractive = ractive.parent;\n\t}\n}\n\nfunction interpolate ( from, to, ractive, type ) {\n\tif ( from === to ) { return null; }\n\n\tif ( type ) {\n\t\tvar interpol = findInViewHierarchy( 'interpolators', ractive, type );\n\t\tif ( interpol ) { return interpol( from, to ) || null; }\n\n\t\tfatal( missingPlugin( type, 'interpolator' ) );\n\t}\n\n\treturn interpolators.number( from, to ) ||\n\t       interpolators.array( from, to ) ||\n\t       interpolators.object( from, to ) ||\n\t       null;\n}\n\nfunction snap ( to ) {\n\treturn function () { return to; };\n}\n\nvar interpolators = {\n\tnumber: function number ( from, to ) {\n\t\tif ( !isNumeric( from ) || !isNumeric( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfrom = +from;\n\t\tto = +to;\n\n\t\tvar delta = to - from;\n\n\t\tif ( !delta ) {\n\t\t\treturn function () { return from; };\n\t\t}\n\n\t\treturn function ( t ) {\n\t\t\treturn from + ( t * delta );\n\t\t};\n\t},\n\n\tarray: function array ( from, to ) {\n\t\tvar len, i;\n\n\t\tif ( !Array.isArray( from ) || !Array.isArray( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar intermediate = [];\n\t\tvar interpolators = [];\n\n\t\ti = len = Math.min( from.length, to.length );\n\t\twhile ( i-- ) {\n\t\t\tinterpolators[i] = interpolate( from[i], to[i] );\n\t\t}\n\n\t\t// surplus values - don't interpolate, but don't exclude them either\n\t\tfor ( i=len; i<from.length; i+=1 ) {\n\t\t\tintermediate[i] = from[i];\n\t\t}\n\n\t\tfor ( i=len; i<to.length; i+=1 ) {\n\t\t\tintermediate[i] = to[i];\n\t\t}\n\n\t\treturn function ( t ) {\n\t\t\tvar i = len;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tintermediate[i] = interpolators[i]( t );\n\t\t\t}\n\n\t\t\treturn intermediate;\n\t\t};\n\t},\n\n\tobject: function object ( from, to ) {\n\t\tif ( !isObject( from ) || !isObject( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar properties = [];\n\t\tvar intermediate = {};\n\t\tvar interpolators = {};\n\n\t\tfor ( var prop in from ) {\n\t\t\tif ( from.hasOwnProperty( prop ) ) {\n\t\t\t\tif ( to.hasOwnProperty( prop ) ) {\n\t\t\t\t\tproperties.push( prop );\n\t\t\t\t\tinterpolators[ prop ] = interpolate( from[ prop ], to[ prop ] ) || snap( to[ prop ] );\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tintermediate[ prop ] = from[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( var prop$1 in to ) {\n\t\t\tif ( to.hasOwnProperty( prop$1 ) && !from.hasOwnProperty( prop$1 ) ) {\n\t\t\t\tintermediate[ prop$1 ] = to[ prop$1 ];\n\t\t\t}\n\t\t}\n\n\t\tvar len = properties.length;\n\n\t\treturn function ( t ) {\n\t\t\tvar i = len;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar prop = properties[i];\n\n\t\t\t\tintermediate[ prop ] = interpolators[ prop ]( t );\n\t\t\t}\n\n\t\t\treturn intermediate;\n\t\t};\n\t}\n};\n\nfunction addToArray ( array, value ) {\n\tvar index = array.indexOf( value );\n\n\tif ( index === -1 ) {\n\t\tarray.push( value );\n\t}\n}\n\nfunction arrayContains ( array, value ) {\n\tfor ( var i = 0, c = array.length; i < c; i++ ) {\n\t\tif ( array[i] == value ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction arrayContentsMatch ( a, b ) {\n\tvar i;\n\n\tif ( !Array.isArray( a ) || !Array.isArray( b ) ) {\n\t\treturn false;\n\t}\n\n\tif ( a.length !== b.length ) {\n\t\treturn false;\n\t}\n\n\ti = a.length;\n\twhile ( i-- ) {\n\t\tif ( a[i] !== b[i] ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction ensureArray ( x ) {\n\tif ( typeof x === 'string' ) {\n\t\treturn [ x ];\n\t}\n\n\tif ( x === undefined ) {\n\t\treturn [];\n\t}\n\n\treturn x;\n}\n\nfunction lastItem ( array ) {\n\treturn array[ array.length - 1 ];\n}\n\nfunction removeFromArray ( array, member ) {\n\tif ( !array ) {\n\t\treturn;\n\t}\n\n\tvar index = array.indexOf( member );\n\n\tif ( index !== -1 ) {\n\t\tarray.splice( index, 1 );\n\t}\n}\n\nfunction combine () {\n\tvar arrays = [], len = arguments.length;\n\twhile ( len-- ) arrays[ len ] = arguments[ len ];\n\n\tvar res = arrays.concat.apply( [], arrays );\n\tvar i = res.length;\n\twhile ( i-- ) {\n\t\tvar idx = res.indexOf( res[i] );\n\t\tif ( ~idx && idx < i ) { res.splice( i, 1 ); }\n\t}\n\n\treturn res;\n}\n\nfunction toArray ( arrayLike ) {\n\tvar array = [];\n\tvar i = arrayLike.length;\n\twhile ( i-- ) {\n\t\tarray[i] = arrayLike[i];\n\t}\n\n\treturn array;\n}\n\nfunction findMap ( array, fn ) {\n\tvar len = array.length;\n\tfor ( var i = 0; i < len; i++ ) {\n\t\tvar result = fn( array[i] );\n\t\tif ( result ) { return result; }\n\t}\n}\n\nvar TransitionManager = function TransitionManager ( callback, parent ) {\n\tthis.callback = callback;\n\tthis.parent = parent;\n\n\tthis.intros = [];\n\tthis.outros = [];\n\n\tthis.children = [];\n\tthis.totalChildren = this.outroChildren = 0;\n\n\tthis.detachQueue = [];\n\tthis.outrosComplete = false;\n\n\tif ( parent ) {\n\t\tparent.addChild( this );\n\t}\n};\n\nTransitionManager.prototype.add = function add ( transition ) {\n\tvar list = transition.isIntro ? this.intros : this.outros;\n\ttransition.starting = true;\n\tlist.push( transition );\n};\n\nTransitionManager.prototype.addChild = function addChild ( child ) {\n\tthis.children.push( child );\n\n\tthis.totalChildren += 1;\n\tthis.outroChildren += 1;\n};\n\nTransitionManager.prototype.decrementOutros = function decrementOutros () {\n\tthis.outroChildren -= 1;\n\tcheck( this );\n};\n\nTransitionManager.prototype.decrementTotal = function decrementTotal () {\n\tthis.totalChildren -= 1;\n\tcheck( this );\n};\n\nTransitionManager.prototype.detachNodes = function detachNodes () {\n\tthis.detachQueue.forEach( detach$1 );\n\tthis.children.forEach( _detachNodes );\n};\n\nTransitionManager.prototype.ready = function ready () {\n\tif ( this.detachQueue.length ) { detachImmediate( this ); }\n};\n\nTransitionManager.prototype.remove = function remove ( transition ) {\n\tvar list = transition.isIntro ? this.intros : this.outros;\n\tremoveFromArray( list, transition );\n\tcheck( this );\n};\n\nTransitionManager.prototype.start = function start () {\n\tthis.children.forEach( function (c) { return c.start(); } );\n\tthis.intros.concat( this.outros ).forEach( function (t) { return t.start(); } );\n\tthis.ready = true;\n\tcheck( this );\n};\n\nfunction detach$1 ( element ) {\n\telement.detach();\n}\n\nfunction _detachNodes ( tm ) { // _ to avoid transpiler quirk\n\ttm.detachNodes();\n}\n\nfunction check ( tm ) {\n\tif ( !tm.ready || tm.outros.length || tm.outroChildren ) { return; }\n\n\t// If all outros are complete, and we haven't already done this,\n\t// we notify the parent if there is one, otherwise\n\t// start detaching nodes\n\tif ( !tm.outrosComplete ) {\n\t\ttm.outrosComplete = true;\n\n\t\tif ( tm.parent && !tm.parent.outrosComplete ) {\n\t\t\ttm.parent.decrementOutros( tm );\n\t\t} else {\n\t\t\ttm.detachNodes();\n\t\t}\n\t}\n\n\t// Once everything is done, we can notify parent transition\n\t// manager and call the callback\n\tif ( !tm.intros.length && !tm.totalChildren ) {\n\t\tif ( typeof tm.callback === 'function' ) {\n\t\t\ttm.callback();\n\t\t}\n\n\t\tif ( tm.parent && !tm.notifiedTotal ) {\n\t\t\ttm.notifiedTotal = true;\n\t\t\ttm.parent.decrementTotal();\n\t\t}\n\t}\n}\n\n// check through the detach queue to see if a node is up or downstream from a\n// transition and if not, go ahead and detach it\nfunction detachImmediate ( manager ) {\n\tvar queue = manager.detachQueue;\n\tvar outros = collectAllOutros( manager );\n\n\tvar i = queue.length;\n\tvar j = 0;\n\tvar node, trans;\n\tstart: while ( i-- ) {\n\t\tnode = queue[i].node;\n\t\tj = outros.length;\n\t\twhile ( j-- ) {\n\t\t\ttrans = outros[j].element.node;\n\t\t\t// check to see if the node is, contains, or is contained by the transitioning node\n\t\t\tif ( trans === node || trans.contains( node ) || node.contains( trans ) ) { continue start; }\n\t\t}\n\n\t\t// no match, we can drop it\n\t\tqueue[i].detach();\n\t\tqueue.splice( i, 1 );\n\t}\n}\n\nfunction collectAllOutros ( manager, _list ) {\n\tvar list = _list;\n\n\t// if there's no list, we're starting at the root to build one\n\tif ( !list ) {\n\t\tlist = [];\n\t\tvar parent = manager;\n\t\twhile ( parent.parent ) { parent = parent.parent; }\n\t\treturn collectAllOutros( parent, list );\n\t} else {\n\t\t// grab all outros from child managers\n\t\tvar i = manager.children.length;\n\t\twhile ( i-- ) {\n\t\t\tlist = collectAllOutros( manager.children[i], list );\n\t\t}\n\n\t\t// grab any from this manager if there are any\n\t\tif ( manager.outros.length ) { list = list.concat( manager.outros ); }\n\n\t\treturn list;\n\t}\n}\n\nvar batch;\n\nvar runloop = {\n\tstart: function start ( instance ) {\n\t\tvar fulfilPromise;\n\t\tvar promise = new Promise( function (f) { return ( fulfilPromise = f ); } );\n\n\t\tbatch = {\n\t\t\tpreviousBatch: batch,\n\t\t\ttransitionManager: new TransitionManager( fulfilPromise, batch && batch.transitionManager ),\n\t\t\tfragments: [],\n\t\t\ttasks: [],\n\t\t\timmediateObservers: [],\n\t\t\tdeferredObservers: [],\n\t\t\tinstance: instance,\n\t\t\tpromise: promise\n\t\t};\n\n\t\treturn promise;\n\t},\n\n\tend: function end () {\n\t\tflushChanges();\n\n\t\tif ( !batch.previousBatch ) { batch.transitionManager.start(); }\n\n\t\tbatch = batch.previousBatch;\n\t},\n\n\taddFragment: function addFragment ( fragment ) {\n\t\taddToArray( batch.fragments, fragment );\n\t},\n\n\t// TODO: come up with a better way to handle fragments that trigger their own update\n\taddFragmentToRoot: function addFragmentToRoot ( fragment ) {\n\t\tif ( !batch ) { return; }\n\n\t\tvar b = batch;\n\t\twhile ( b.previousBatch ) {\n\t\t\tb = b.previousBatch;\n\t\t}\n\n\t\taddToArray( b.fragments, fragment );\n\t},\n\n\taddObserver: function addObserver ( observer, defer ) {\n\t\taddToArray( defer ? batch.deferredObservers : batch.immediateObservers, observer );\n\t},\n\n\tregisterTransition: function registerTransition ( transition ) {\n\t\ttransition._manager = batch.transitionManager;\n\t\tbatch.transitionManager.add( transition );\n\t},\n\n\t// synchronise node detachments with transition ends\n\tdetachWhenReady: function detachWhenReady ( thing ) {\n\t\tbatch.transitionManager.detachQueue.push( thing );\n\t},\n\n\tscheduleTask: function scheduleTask ( task, postRender ) {\n\t\tvar _batch;\n\n\t\tif ( !batch ) {\n\t\t\ttask();\n\t\t} else {\n\t\t\t_batch = batch;\n\t\t\twhile ( postRender && _batch.previousBatch ) {\n\t\t\t\t// this can't happen until the DOM has been fully updated\n\t\t\t\t// otherwise in some situations (with components inside elements)\n\t\t\t\t// transitions and decorators will initialise prematurely\n\t\t\t\t_batch = _batch.previousBatch;\n\t\t\t}\n\n\t\t\t_batch.tasks.push( task );\n\t\t}\n\t},\n\n\tpromise: function promise () {\n\t\tif ( !batch ) { return Promise.resolve(); }\n\n\t\tvar target = batch;\n\t\twhile ( target.previousBatch ) {\n\t\t\ttarget = target.previousBatch;\n\t\t}\n\n\t\treturn target.promise || Promise.resolve();\n\t}\n};\n\nfunction dispatch$1 ( observer ) {\n\tobserver.dispatch();\n}\n\nfunction flushChanges () {\n\tvar which = batch.immediateObservers;\n\tbatch.immediateObservers = [];\n\twhich.forEach( dispatch$1 );\n\n\t// Now that changes have been fully propagated, we can update the DOM\n\t// and complete other tasks\n\tvar i = batch.fragments.length;\n\tvar fragment;\n\n\twhich = batch.fragments;\n\tbatch.fragments = [];\n\n\twhile ( i-- ) {\n\t\tfragment = which[i];\n\t\tfragment.update();\n\t}\n\n\tbatch.transitionManager.ready();\n\n\twhich = batch.deferredObservers;\n\tbatch.deferredObservers = [];\n\twhich.forEach( dispatch$1 );\n\n\tvar tasks = batch.tasks;\n\tbatch.tasks = [];\n\n\tfor ( i = 0; i < tasks.length; i += 1 ) {\n\t\ttasks[i]();\n\t}\n\n\t// If updating the view caused some model blowback - e.g. a triple\n\t// containing <option> elements caused the binding on the <select>\n\t// to update - then we start over\n\tif ( batch.fragments.length || batch.immediateObservers.length || batch.deferredObservers.length || batch.tasks.length ) { return flushChanges(); }\n}\n\nvar refPattern = /\\[\\s*(\\*|[0-9]|[1-9][0-9]+)\\s*\\]/g;\nvar splitPattern = /([^\\\\](?:\\\\\\\\)*)\\./;\nvar escapeKeyPattern = /\\\\|\\./g;\nvar unescapeKeyPattern = /((?:\\\\)+)\\1|\\\\(\\.)/g;\n\nfunction escapeKey ( key ) {\n\tif ( typeof key === 'string' ) {\n\t\treturn key.replace( escapeKeyPattern, '\\\\$&' );\n\t}\n\n\treturn key;\n}\n\nfunction normalise ( ref ) {\n\treturn ref ? ref.replace( refPattern, '.$1' ) : '';\n}\n\nfunction splitKeypath ( keypath ) {\n\tvar result = [];\n\tvar match;\n\n\tkeypath = normalise( keypath );\n\n\twhile ( match = splitPattern.exec( keypath ) ) {\n\t\tvar index = match.index + match[1].length;\n\t\tresult.push( keypath.substr( 0, index ) );\n\t\tkeypath = keypath.substr( index + 1 );\n\t}\n\n\tresult.push( keypath );\n\n\treturn result;\n}\n\nfunction unescapeKey ( key ) {\n\tif ( typeof key === 'string' ) {\n\t\treturn key.replace( unescapeKeyPattern, '$1$2' );\n\t}\n\n\treturn key;\n}\n\nfunction set$1 ( ractive, pairs ) {\n\tvar promise = runloop.start( ractive, true );\n\n\tvar i = pairs.length;\n\twhile ( i-- ) {\n\t\tvar model = pairs[i][0];\n\t\tvar value = pairs[i][1];\n\t\tvar keypath = pairs[i][2];\n\n\t\tif ( !model ) {\n\t\t\trunloop.end();\n\t\t\tthrow new Error( (\""Failed to set invalid keypath '\"" + keypath + \""'\"") );\n\t\t}\n\n\t\tmodel.set( value );\n\t}\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nvar star = /\\*/;\nfunction gather ( ractive, keypath, base ) {\n\tif ( !base && keypath[0] === '.' ) {\n\t\twarnIfDebug( \""Attempted to set a relative keypath from a non-relative context. You can use a getNodeInfo or event object to set relative keypaths.\"" );\n\t\treturn [];\n\t}\n\n\tvar model = base || ractive.viewmodel;\n\tif ( star.test( keypath ) ) {\n\t\treturn model.findMatches( splitKeypath( keypath ) );\n\t} else {\n\t\treturn [ model.joinAll( splitKeypath( keypath ) ) ];\n\t}\n}\n\nfunction build ( ractive, keypath, value ) {\n\tvar sets = [];\n\n\t// set multiple keypaths in one go\n\tif ( isObject( keypath ) ) {\n\t\tvar loop = function ( k ) {\n\t\t\tif ( keypath.hasOwnProperty( k ) ) {\n\t\t\t\tsets.push.apply( sets, gather( ractive, k ).map( function (m) { return [ m, keypath[k], k ]; } ) );\n\t\t\t}\n\t\t};\n\n\t\tfor ( var k in keypath ) loop( k );\n\n\t}\n\t// set a single keypath\n\telse {\n\t\tsets.push.apply( sets, gather( ractive, keypath ).map( function (m) { return [ m, value, keypath ]; } ) );\n\t}\n\n\treturn sets;\n}\n\nvar errorMessage = 'Cannot add to a non-numeric value';\n\nfunction add$1 ( ractive, keypath, d ) {\n\tif ( typeof keypath !== 'string' || !isNumeric( d ) ) {\n\t\tthrow new Error( 'Bad arguments' );\n\t}\n\n\tvar sets = build( ractive, keypath, d );\n\n\treturn set$1( ractive, sets.map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar add = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( add ) || !isNumeric( value ) ) { throw new Error( errorMessage ); }\n\t\treturn [ model, value + add ];\n\t}));\n}\n\nfunction Ractive$add ( keypath, d ) {\n\treturn add$1( this, keypath, ( d === undefined ? 1 : +d ) );\n}\n\nvar noAnimation = Promise.resolve();\nObject.defineProperty( noAnimation, 'stop', { value: noop });\n\nvar linear$1 = easing.linear;\n\nfunction getOptions ( options, instance ) {\n\toptions = options || {};\n\n\tvar easing$$1;\n\tif ( options.easing ) {\n\t\teasing$$1 = typeof options.easing === 'function' ?\n\t\t\toptions.easing :\n\t\t\tinstance.easing[ options.easing ];\n\t}\n\n\treturn {\n\t\teasing: easing$$1 || linear$1,\n\t\tduration: 'duration' in options ? options.duration : 400,\n\t\tcomplete: options.complete || noop,\n\t\tstep: options.step || noop\n\t};\n}\n\nfunction animate$1 ( ractive, model, to, options ) {\n\toptions = getOptions( options, ractive );\n\tvar from = model.get();\n\n\t// don't bother animating values that stay the same\n\tif ( isEqual( from, to ) ) {\n\t\toptions.complete( options.to );\n\t\treturn noAnimation; // TODO should this have .then and .catch methods?\n\t}\n\n\tvar interpolator = interpolate( from, to, ractive, options.interpolator );\n\n\t// if we can't interpolate the value, set it immediately\n\tif ( !interpolator ) {\n\t\trunloop.start();\n\t\tmodel.set( to );\n\t\trunloop.end();\n\n\t\treturn noAnimation;\n\t}\n\n\treturn model.animate( from, to, options, interpolator );\n}\n\nfunction Ractive$animate ( keypath, to, options ) {\n\tif ( typeof keypath === 'object' ) {\n\t\tvar keys = Object.keys( keypath );\n\n\t\tthrow new Error( (\""ractive.animate(...) no longer supports objects. Instead of ractive.animate({\\n  \"" + (keys.map( function (key) { return (\""'\"" + key + \""': \"" + (keypath[ key ])); } ).join( '\\n  ' )) + \""\\n}, {...}), do\\n\\n\"" + (keys.map( function (key) { return (\""ractive.animate('\"" + key + \""', \"" + (keypath[ key ]) + \"", {...});\""); } ).join( '\\n' )) + \""\\n\"") );\n\t}\n\n\n\treturn animate$1( this, this.viewmodel.joinAll( splitKeypath( keypath ) ), to, options );\n}\n\nfunction enqueue ( ractive, event ) {\n\tif ( ractive.event ) {\n\t\tractive._eventQueue.push( ractive.event );\n\t}\n\n\tractive.event = event;\n}\n\nfunction dequeue ( ractive ) {\n\tif ( ractive._eventQueue.length ) {\n\t\tractive.event = ractive._eventQueue.pop();\n\t} else {\n\t\tractive.event = null;\n\t}\n}\n\nvar initStars = {};\nvar bubbleStars = {};\n\n// cartesian product of name parts and stars\n// adjusted appropriately for special cases\nfunction variants ( name, initial ) {\n\tvar map = initial ? initStars : bubbleStars;\n\tif ( map[ name ] ) { return map[ name ]; }\n\n\tvar parts = name.split( '.' );\n\tvar result = [];\n\tvar base = false;\n\n\t// initial events the implicit namespace of 'this'\n\tif ( initial ) {\n\t\tparts.unshift( 'this' );\n\t\tbase = true;\n\t}\n\n\t// use max - 1 bits as a bitmap to pick a part or a *\n\t// need to skip the full star case if the namespace is synthetic\n\tvar max = Math.pow( 2, parts.length ) - ( initial ? 1 : 0 );\n\tfor ( var i = 0; i < max; i++ ) {\n\t\tvar join = [];\n\t\tfor ( var j = 0; j < parts.length; j++ ) {\n\t\t\tjoin.push( 1 & ( i >> j ) ? '*' : parts[j] );\n\t\t}\n\t\tresult.unshift( join.join( '.' ) );\n\t}\n\n\tif ( base ) {\n\t\t// include non-this-namespaced versions\n\t\tif ( parts.length > 2 ) {\n\t\t\tresult.push.apply( result, variants( name, false ) );\n\t\t} else {\n\t\t\tresult.push( '*' );\n\t\t\tresult.push( name );\n\t\t}\n\t}\n\n\tmap[ name ] = result;\n\treturn result;\n}\n\nfunction fireEvent ( ractive, eventName, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( !eventName ) { return; }\n\n\tif ( !options.event ) {\n\t\toptions.event = {\n\t\t\tname: eventName,\n\t\t\t// until event not included as argument default\n\t\t\t_noArg: true\n\t\t};\n\t} else {\n\t\toptions.event.name = eventName;\n\t}\n\n\tvar eventNames = ractive._nsSubs ? variants( eventName, true ) : [ '*', eventName ];\n\n\treturn fireEventAs( ractive, eventNames, options.event, options.args, true );\n}\n\nfunction fireEventAs  ( ractive, eventNames, event, args, initialFire ) {\n\tif ( initialFire === void 0 ) initialFire = false;\n\n\tvar bubble = true;\n\n\tif ( initialFire || ractive._nsSubs ) {\n\t\tenqueue( ractive, event );\n\n\t\tvar i = eventNames.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( eventNames[ i ] in ractive._subs ) {\n\t\t\t\tbubble = notifySubscribers( ractive, ractive._subs[ eventNames[ i ] ], event, args ) && bubble;\n\t\t\t}\n\t\t}\n\n\t\tdequeue( ractive );\n\t}\n\n\tif ( ractive.parent && bubble ) {\n\n\t\tif ( initialFire && ractive.component ) {\n\t\t\tvar fullName = ractive.component.name + '.' + eventNames[ eventNames.length - 1 ];\n\t\t\teventNames = variants( fullName, false );\n\n\t\t\tif ( event && !event.component ) {\n\t\t\t\tevent.component = ractive;\n\t\t\t}\n\t\t}\n\n\t\tbubble = fireEventAs( ractive.parent, eventNames, event, args );\n\t}\n\n\treturn bubble;\n}\n\nfunction notifySubscribers ( ractive, subscribers, event, args ) {\n\tvar originalEvent = null;\n\tvar stopEvent = false;\n\n\tif ( event && !event._noArg ) {\n\t\targs = [ event ].concat( args );\n\t}\n\n\t// subscribers can be modified inflight, e.g. \""once\"" functionality\n\t// so we need to copy to make sure everyone gets called\n\tsubscribers = subscribers.slice();\n\n\tfor ( var i = 0, len = subscribers.length; i < len; i += 1 ) {\n\t\tif ( !subscribers[ i ].off && subscribers[ i ].apply( ractive, args ) === false ) {\n\t\t\tstopEvent = true;\n\t\t}\n\t}\n\n\tif ( event && !event._noArg && stopEvent && ( originalEvent = event.original ) ) {\n\t\toriginalEvent.preventDefault && originalEvent.preventDefault();\n\t\toriginalEvent.stopPropagation && originalEvent.stopPropagation();\n\t}\n\n\treturn !stopEvent;\n}\n\nvar Hook = function Hook ( event ) {\n\tthis.event = event;\n\tthis.method = 'on' + event;\n};\n\nHook.prototype.fire = function fire ( ractive, arg ) {\n\tif ( ractive[ this.method ] ) {\n\t\targ ? ractive[ this.method ]( arg ) : ractive[ this.method ]();\n\t}\n\n\tvar options = { args: [] };\n\tif ( arg ) { options.args.push( arg ); }\n\toptions.args.push( ractive );\n\tfireEvent( ractive, this.event, options );\n};\n\nfunction updateLiveQueries ( element ) {\n\t// Does this need to be added to any live queries?\n\tvar node = element.node;\n\tvar instance = element.ractive;\n\tvar queries = [];\n\tvar remotes = {};\n\tvar remote = instance.component && instance.component.target === false;\n\tvar i;\n\n\tdo {\n\t\tvar liveQueries = instance._liveQueries;\n\n\t\ti = liveQueries.length;\n\t\twhile ( i-- ) {\n\t\t\tvar query = liveQueries[i];\n\n\t\t\tif ( query.test( node ) ) {\n\t\t\t\tqueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( !remote && instance.component && instance.component.target === false ) { remote = true; }\n\t\tremotes[ instance._guid ] = remote;\n\t} while ( instance = instance.parent );\n\n\ti = queries.length;\n\twhile ( i-- ) {\n\t\tvar query$1 = queries[i];\n\t\tif ( query$1.remote || !remotes[ query$1.ractive._guid ] ) {\n\t\t\tquery$1.add( node );\n\t\t\t// keep register of applicable selectors, for when we teardown\n\t\t\telement.liveQueries.push( query$1 );\n\t\t}\n\t}\n}\n\n// TODO it's unfortunate that this has to run every time a\n// component is rendered... is there a better way?\nfunction updateLiveQueries$1 ( component ) {\n\t// Does this need to be added to any live queries?\n\tvar instance = component.ractive;\n\tvar queries = [];\n\tvar remotes = {};\n\tvar remote = component.target === false;\n\tvar i;\n\n\tdo {\n\t\tvar liveQueries = instance._liveComponentQueries;\n\n\t\ti = liveQueries.length;\n\t\twhile ( i-- ) {\n\t\t\tvar query = liveQueries[i];\n\n\t\t\tif ( query.test( component ) ) {\n\t\t\t\tqueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( !remote && instance.component && instance.component.target === false ) { remote = true; }\n\t\tremotes[ instance._guid ] = remote;\n\t} while ( instance = instance.parent );\n\n\ti = queries.length;\n\twhile ( i-- ) {\n\t\tvar query$1 = queries[i];\n\t\tif ( query$1.remote || !remotes[ query$1.ractive._guid ] ) {\n\t\t\tquery$1.add( component.instance );\n\t\t\t// keep register of applicable selectors, for when we teardown\n\t\t\tcomponent.liveQueries.push( query$1 );\n\t\t}\n\t}\n}\n\nfunction findAnchors ( fragment, name ) {\n\tif ( name === void 0 ) name = null;\n\n\tvar res = [];\n\n\tfindAnchorsIn( fragment, name, res );\n\n\treturn res;\n}\n\nfunction findAnchorsIn ( item, name, result ) {\n\tif ( item.isAnchor ) {\n\t\tif ( !name || item.name === name ) {\n\t\t\tresult.push( item );\n\t\t}\n\t} else if ( item.items ) {\n\t\titem.items.forEach( function (i) { return findAnchorsIn( i, name, result ); } );\n\t} else if ( item.iterations ) {\n\t\titem.iterations.forEach( function (i) { return findAnchorsIn( i, name, result ); } );\n\t} else if ( item.fragment && !item.component ) {\n\t\tfindAnchorsIn( item.fragment, name, result );\n\t}\n}\n\nfunction updateAnchors ( instance, name ) {\n\tif ( name === void 0 ) name = null;\n\n\tvar anchors = findAnchors( instance.fragment, name );\n\tvar idxs = {};\n\tvar children = instance._children.byName;\n\n\tanchors.forEach( function (a) {\n\t\tvar name = a.name;\n\t\tif ( !( name in idxs ) ) { idxs[name] = 0; }\n\t\tvar idx = idxs[name];\n\t\tvar child = ( children[name] || [] )[idx];\n\n\t\tif ( child && child.lastBound !== a ) {\n\t\t\tif ( child.lastBound ) { child.lastBound.removeChild( child ); }\n\t\t\ta.addChild( child );\n\t\t}\n\n\t\tidxs[name]++;\n\t});\n}\n\nfunction unrenderChild ( meta ) {\n\tif ( meta.instance.fragment.rendered ) {\n\t\tmeta.shouldDestroy = true;\n\t\tmeta.instance.unrender();\n\t}\n\tmeta.instance.el = null;\n}\n\nvar attachHook = new Hook( 'attachchild' );\n\nfunction attachChild ( child, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tvar children = this._children;\n\n\tif ( child.parent && child.parent !== this ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is already attached to a different instance \"" + (child.parent._guid) + \"". Please detach it from the other instance using detachChild first.\"") ); }\n\telse if ( child.parent ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is already attached to this instance.\"") ); }\n\n\tvar meta = {\n\t\tinstance: child,\n\t\tractive: this,\n\t\tname: options.name || child.constructor.name || 'Ractive',\n\t\tliveQueries: [],\n\t\ttarget: options.target || false,\n\t\tbubble: bubble$1,\n\t\tfindNextNode: findNextNode$1,\n\t\tremoveFromQuery: removeFromQuery$1\n\t};\n\tmeta.nameOption = options.name;\n\n\t// child is managing itself\n\tif ( !meta.target ) {\n\t\tmeta.parentFragment = this.fragment;\n\t\tmeta.external = true;\n\t} else {\n\t\tvar list;\n\t\tif ( !( list = children.byName[ meta.target ] ) ) {\n\t\t\tlist = [];\n\t\t\tthis.set( (\""@this.children.byName.\"" + (meta.target)), list );\n\t\t}\n\t\tvar idx = options.prepend ? 0 : options.insertAt || list.length;\n\t\tlist.splice( idx, 0, meta );\n\t}\n\n\tchild.set({\n\t\t'@this.parent': this,\n\t\t'@this.root': this.root\n\t});\n\tchild.component = meta;\n\tchildren.push( meta );\n\n\tattachHook.fire( child );\n\n\tvar promise = runloop.start( child, true );\n\n\tif ( meta.target ) {\n\t\tunrenderChild( meta );\n\t\tthis.merge( (\""@this.children.byName.\"" + (meta.target)) );\n\t\tupdateAnchors( this, meta.target );\n\t} else {\n\t\tif ( !child.isolated ) { child.viewmodel.attached( this.fragment ); }\n\t\tif ( child.fragment.rendered ) {\n\t\t\tchild.findAll( '*' ).forEach( function (el) { return updateLiveQueries( el._ractive.proxy ); } );\n\t\t\tchild.findAllComponents().forEach( function (cmp) { return updateLiveQueries$1( cmp.component ); } );\n\t\t\tupdateLiveQueries$1( meta );\n\t\t}\n\t}\n\n\trunloop.end();\n\n\tpromise.ractive = child;\n\treturn promise.then( function () { return child; } );\n}\n\nfunction bubble$1 () { runloop.addFragment( this.instance.fragment ); }\n\nfunction removeFromQuery$1 ( query ) {\n\tquery.remove( this.instance );\n\tremoveFromArray( this.liveQueries, query );\n}\n\nfunction findNextNode$1 () {\n\tif ( this.anchor ) { return this.anchor.findNextNode(); }\n}\n\nvar detachHook = new Hook( 'detach' );\n\nfunction Ractive$detach () {\n\tif ( this.isDetached ) {\n\t\treturn this.el;\n\t}\n\n\tif ( this.el ) {\n\t\tremoveFromArray( this.el.__ractive_instances__, this );\n\t}\n\n\tthis.el = this.fragment.detach();\n\tthis.isDetached = true;\n\n\tdetachHook.fire( this );\n\treturn this.el;\n}\n\nvar detachHook$1 = new Hook( 'detachchild' );\n\nfunction detachChild ( child ) {\n\tvar this$1 = this;\n\n\tvar children = this._children;\n\tvar meta, index;\n\n\tvar i = children.length;\n\twhile ( i-- ) {\n\t\tif ( children[i].instance === child ) {\n\t\t\tindex = i;\n\t\t\tmeta = children[i];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( !meta || child.parent !== this ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is not attached to this instance.\"") ); }\n\n\tvar promise = runloop.start( child, true );\n\n\tif ( meta.anchor ) { meta.anchor.removeChild( meta ); }\n\tif ( !child.isolated ) { child.viewmodel.detached(); }\n\n\trunloop.end();\n\n\tchildren.splice( index, 1 );\n\tif ( meta.target ) {\n\t\tvar list = children.byName[ meta.target ];\n\t\tlist.splice( list.indexOf( meta ), 1 );\n\t\tthis.merge( (\""@this.children.byName.\"" + (meta.target)) );\n\t\tupdateAnchors( this, meta.target );\n\t}\n\tchild.set({\n\t\t'@this.parent': undefined,\n\t\t'@this.root': child\n\t});\n\tchild.component = null;\n\n\tdetachHook$1.fire( child );\n\n\tif ( !meta.target && child.fragment.rendered ) {\n\t\t// keep live queries up to date\n\t\tchild.findAll( '*' ).forEach( function (el) {\n\t\t\tel._ractive.proxy.liveQueries.forEach( function (q) {\n\t\t\t\t// remove from non-self queries\n\t\t\t\tif ( isParent( this$1, q.ractive ) ) { el._ractive.proxy.removeFromQuery( q ); }\n\t\t\t});\n\t\t});\n\n\t\t// keep live component queries up to date\n\t\tchild.findAllComponents().forEach( function (cmp) {\n\t\t\tcmp.component.liveQueries.forEach( function (q) {\n\t\t\t\tif ( isParent( this$1, q.ractive ) ) { cmp.component.removeFromQuery( q ); }\n\t\t\t});\n\t\t});\n\n\t\tmeta.liveQueries.forEach( function (q) { return meta.removeFromQuery( q ); } );\n\t}\n\n\tpromise.ractive = child;\n\treturn promise.then( function () { return child; } );\n}\n\nfunction isParent ( target, check ) {\n\twhile ( target ) {\n\t\tif ( target === check ) { return true; }\n\t\ttarget = target.parent;\n\t}\n}\n\nfunction Ractive$find ( selector, options ) {\n\tvar this$1 = this;\n\tif ( options === void 0 ) options = {};\n\n\tif ( !this.el ) { throw new Error( (\""Cannot call ractive.find('\"" + selector + \""') unless instance is rendered to the DOM\"") ); }\n\n\tvar node = this.fragment.find( selector, options );\n\tif ( node ) { return node; }\n\n\tif ( options.remote ) {\n\t\tfor ( var i = 0; i < this._children.length; i++ ) {\n\t\t\tif ( !this$1._children[i].instance.fragment.rendered ) { continue; }\n\t\t\tnode = this$1._children[i].instance.find( selector, options );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n}\n\nvar html   = 'http://www.w3.org/1999/xhtml';\nvar mathml = 'http://www.w3.org/1998/Math/MathML';\nvar svg$1    = 'http://www.w3.org/2000/svg';\nvar xlink  = 'http://www.w3.org/1999/xlink';\nvar xml    = 'http://www.w3.org/XML/1998/namespace';\nvar xmlns  = 'http://www.w3.org/2000/xmlns';\n\nvar namespaces = { html: html, mathml: mathml, svg: svg$1, xlink: xlink, xml: xml, xmlns: xmlns };\n\nvar createElement;\nvar matches;\nvar div;\nvar methodNames;\nvar unprefixed;\nvar prefixed;\nvar i;\nvar j;\nvar makeFunction;\n\n// Test for SVG support\nif ( !svg ) {\n\tcreateElement = function ( type, ns, extend ) {\n\t\tif ( ns && ns !== html ) {\n\t\t\tthrow 'This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you\\'re trying to render SVG in an older browser. See http://docs.ractivejs.org/latest/svg-and-older-browsers for more information';\n\t\t}\n\n\t\treturn extend ?\n\t\t\tdoc.createElement( type, extend ) :\n\t\t\tdoc.createElement( type );\n\t};\n} else {\n\tcreateElement = function ( type, ns, extend ) {\n\t\tif ( !ns || ns === html ) {\n\t\t\treturn extend ?\n\t\t\t\tdoc.createElement( type, extend ) :\n\t\t\t\tdoc.createElement( type );\n\t\t}\n\n\t\treturn extend ?\n\t\t\tdoc.createElementNS( ns, type, extend ) :\n\t\t\tdoc.createElementNS( ns, type );\n\t};\n}\n\nfunction createDocumentFragment () {\n\treturn doc.createDocumentFragment();\n}\n\nfunction getElement ( input ) {\n\tvar output;\n\n\tif ( !input || typeof input === 'boolean' ) { return; }\n\n\tif ( !win || !doc || !input ) {\n\t\treturn null;\n\t}\n\n\t// We already have a DOM node - no work to do. (Duck typing alert!)\n\tif ( input.nodeType ) {\n\t\treturn input;\n\t}\n\n\t// Get node from string\n\tif ( typeof input === 'string' ) {\n\t\t// try ID first\n\t\toutput = doc.getElementById( input );\n\n\t\t// then as selector, if possible\n\t\tif ( !output && doc.querySelector ) {\n\t\t\toutput = doc.querySelector( input );\n\t\t}\n\n\t\t// did it work?\n\t\tif ( output && output.nodeType ) {\n\t\t\treturn output;\n\t\t}\n\t}\n\n\t// If we've been given a collection (jQuery, Zepto etc), extract the first item\n\tif ( input[0] && input[0].nodeType ) {\n\t\treturn input[0];\n\t}\n\n\treturn null;\n}\n\nif ( !isClient ) {\n\tmatches = null;\n} else {\n\tdiv = createElement( 'div' );\n\tmethodNames = [ 'matches', 'matchesSelector' ];\n\n\tmakeFunction = function ( methodName ) {\n\t\treturn function ( node, selector ) {\n\t\t\treturn node[ methodName ]( selector );\n\t\t};\n\t};\n\n\ti = methodNames.length;\n\n\twhile ( i-- && !matches ) {\n\t\tunprefixed = methodNames[i];\n\n\t\tif ( div[ unprefixed ] ) {\n\t\t\tmatches = makeFunction( unprefixed );\n\t\t} else {\n\t\t\tj = vendors.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\tprefixed = vendors[i] + unprefixed.substr( 0, 1 ).toUpperCase() + unprefixed.substring( 1 );\n\n\t\t\t\tif ( div[ prefixed ] ) {\n\t\t\t\t\tmatches = makeFunction( prefixed );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// IE8...\n\tif ( !matches ) {\n\t\tmatches = function ( node, selector ) {\n\t\t\tvar parentNode, i;\n\n\t\t\tparentNode = node.parentNode;\n\n\t\t\tif ( !parentNode ) {\n\t\t\t\t// empty dummy <div>\n\t\t\t\tdiv.innerHTML = '';\n\n\t\t\t\tparentNode = div;\n\t\t\t\tnode = node.cloneNode();\n\n\t\t\t\tdiv.appendChild( node );\n\t\t\t}\n\n\t\t\tvar nodes = parentNode.querySelectorAll( selector );\n\n\t\t\ti = nodes.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( nodes[i] === node ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nfunction detachNode ( node ) {\n\t// stupid ie\n\tif ( node && typeof node.parentNode !== 'unknown' && node.parentNode ) { // eslint-disable-line valid-typeof\n\t\tnode.parentNode.removeChild( node );\n\t}\n\n\treturn node;\n}\n\nfunction safeToStringValue ( value ) {\n\treturn ( value == null || !value.toString ) ? '' : '' + value;\n}\n\nfunction safeAttributeString ( string ) {\n\treturn safeToStringValue( string )\n\t\t.replace( /&/g, '&amp;' )\n\t\t.replace( /\""/g, '&quot;' )\n\t\t.replace( /'/g, '&#39;' );\n}\n\nfunction sortByDocumentPosition ( node, otherNode ) {\n\tif ( node.compareDocumentPosition ) {\n\t\tvar bitmask = node.compareDocumentPosition( otherNode );\n\t\treturn ( bitmask & 2 ) ? 1 : -1;\n\t}\n\n\t// In old IE, we can piggy back on the mechanism for\n\t// comparing component positions\n\treturn sortByItemPosition( node, otherNode );\n}\n\nfunction sortByItemPosition ( a, b ) {\n\tvar baseA = a.component || a._ractive.proxy;\n\tvar baseB = b.component || b._ractive.proxy;\n\n\t// allow for attached childdren outside the template\n\tif ( baseA.target === false && baseB.target === false ) { return 0; }\n\telse if ( baseA.target === false ) { return 1; }\n\telse if ( baseB.target === false ) { return -1; }\n\n\tvar ancestryA = getAncestry( baseA );\n\tvar ancestryB = getAncestry( baseB );\n\n\tvar oldestA = lastItem( ancestryA );\n\tvar oldestB = lastItem( ancestryB );\n\tvar mutualAncestor;\n\n\t// remove items from the end of both ancestries as long as they are identical\n\t// - the final one removed is the closest mutual ancestor\n\twhile ( oldestA && ( oldestA === oldestB ) ) {\n\t\tancestryA.pop();\n\t\tancestryB.pop();\n\n\t\tmutualAncestor = oldestA;\n\n\t\toldestA = lastItem( ancestryA );\n\t\toldestB = lastItem( ancestryB );\n\t}\n\n\t// now that we have the mutual ancestor, we can find which is earliest\n\toldestA = oldestA.component || oldestA;\n\toldestB = oldestB.component || oldestB;\n\n\tvar fragmentA = oldestA.parentFragment;\n\tvar fragmentB = oldestB.parentFragment;\n\n\t// if both items share a parent fragment, our job is easy\n\tif ( fragmentA === fragmentB ) {\n\t\tvar indexA = fragmentA.items.indexOf( oldestA );\n\t\tvar indexB = fragmentB.items.indexOf( oldestB );\n\n\t\t// if it's the same index, it means one contains the other,\n\t\t// so we see which has the longest ancestry\n\t\treturn ( indexA - indexB ) || ancestryA.length - ancestryB.length;\n\t}\n\n\t// if mutual ancestor is a section, we first test to see which section\n\t// fragment comes first\n\tvar fragments = mutualAncestor.iterations;\n\tif ( fragments ) {\n\t\tvar indexA$1 = fragments.indexOf( fragmentA );\n\t\tvar indexB$1 = fragments.indexOf( fragmentB );\n\n\t\treturn ( indexA$1 - indexB$1 ) || ancestryA.length - ancestryB.length;\n\t}\n\n\tthrow new Error( 'An unexpected condition was met while comparing the position of two components. Please file an issue at https://github.com/ractivejs/ractive/issues - thanks!' );\n}\n\nfunction getParent ( item ) {\n\tvar parentFragment = item.parentFragment;\n\n\tif ( parentFragment ) { return parentFragment.owner; }\n\n\tif ( item.component && ( parentFragment = item.component.parentFragment ) ) {\n\t\treturn parentFragment.owner;\n\t}\n}\n\nfunction getAncestry ( item ) {\n\tvar ancestry = [ item ];\n\tvar ancestor = getParent( item );\n\n\twhile ( ancestor ) {\n\t\tancestry.push( ancestor );\n\t\tancestor = getParent( ancestor );\n\t}\n\n\treturn ancestry;\n}\n\n\nvar Query = function Query ( ractive, selector, live, isComponentQuery ) {\n\tvar this$1 = this;\n\n\tthis.ractive = ractive;\n\tthis.selector = selector;\n\tthis.live = live;\n\tthis.isComponentQuery = isComponentQuery;\n\n\tthis.refs = 1;\n\n\tthis.result = [];\n\tthis.result.cancel = function () { return this$1.cancel(); };\n\n\tthis.dirty = true;\n};\n\nQuery.prototype.add = function add ( item ) {\n\tif ( !~this.result.indexOf( item ) ) {\n\t\tthis.result.push( item );\n\t\tthis.makeDirty();\n\t}\n};\n\nQuery.prototype.cancel = function cancel () {\n\t\tvar this$1 = this;\n\n\tif ( --this.refs ) { return; }\n\n\tthis.cancelled = true;\n\n\tvar liveQueries = this.ractive[ this.isComponentQuery ? '_liveComponentQueries' : '_liveQueries' ];\n\n\tvar index = liveQueries.indexOf( this );\n\n\tif ( index !== -1 ) {\n\t\tliveQueries.splice( index, 1 );\n\t}\n\n\tthis.result.forEach( function (item) {\n\t\titem = this$1.isComponentQuery ? item.component : item._ractive.proxy;\n\t\titem.removeFromQuery( this$1 );\n\t});\n};\n\nQuery.prototype.init = function init () {\n\tthis.dirty = false;\n};\n\nQuery.prototype.makeDirty = function makeDirty () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\n\t\t// Once the DOM has been updated, ensure the query\n\t\t// is correctly ordered\n\t\trunloop.scheduleTask( function () { return this$1.update(); } );\n\t}\n};\n\nQuery.prototype.remove = function remove ( item ) {\n\tif ( !this.cancelled ) {\n\t\tvar index = this.result.indexOf( item );\n\t\tif ( index !== -1 ) { this.result.splice( index, 1 ); }\n\t}\n};\n\nQuery.prototype.update = function update () {\n\tthis.result.sort( this.isComponentQuery ? sortByItemPosition : sortByDocumentPosition );\n\tthis.dirty = false;\n};\n\nQuery.prototype.test = function test ( item ) {\n\treturn this.isComponentQuery ?\n\t\t( !this.selector || item.name === this.selector ) :\n\t\t( item ? matches( item, this.selector ) : null );\n};\n\nfunction getQuery ( ractive, selector, options, component ) {\n\tvar liveQueries = ractive[(\""_live\"" + (component ? 'Component' : '') + \""Queries\"")];\n\tvar query;\n\n\t// Shortcut: if we're maintaining a live query with this\n\t// selector, we don't need to traverse the parallel DOM\n\tquery = liveQueries.find( function (q) { return q.selector === selector && q.remote === options.remote; } );\n\tif ( query ) {\n\t\tif ( options.live ) { query.refs++; }\n\t\t// Either return the exact same query, or (if not live) a snapshot\n\t\treturn { old: options.live ? query.result : query.result.slice() };\n\t}\n\n\tquery = new Query( ractive, selector, !!options.live, component );\n\toptions._query = query;\n\tquery.remote = options.remote;\n\n\t// Add this to the list of live queries Ractive needs to maintain,\n\t// if applicable\n\tif ( query.live ) {\n\t\tliveQueries.push( query );\n\t}\n\n\treturn query;\n}\n\nfunction Ractive$findAll ( selector, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( !this.el ) { throw new Error( (\""Cannot call ractive.findAll('\"" + selector + \""', ...) unless instance is rendered to the DOM\"") ); }\n\n\tvar query = options._query;\n\n\tif ( !query ) {\n\t\tquery = getQuery( this, selector, options, false );\n\t\tif ( query.old ) { return query.old; }\n\t}\n\n\tthis.fragment.findAll( selector, query );\n\n\tif ( query.remote ) {\n\t\t// seach non-fragment children\n\t\tthis._children.forEach( function (c) {\n\t\t\tif ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {\n\t\t\t\tc.instance.findAll( selector, options );\n\t\t\t}\n\t\t});\n\t}\n\n\tquery.init();\n\treturn query.result;\n}\n\nfunction Ractive$findAllComponents ( selector, options ) {\n\tif ( !options && typeof selector === 'object' ) {\n\t\toptions = selector;\n\t\tselector = '';\n\t}\n\n\toptions = options || {};\n\n\tvar query = options._query;\n\n\tif ( !query ) {\n\t\tquery = getQuery( this, selector, options, true );\n\t\tif ( query.old ) { return query.old; }\n\t}\n\n\tthis.fragment.findAllComponents( selector, query );\n\n\tif ( query.remote ) {\n\t\t// search non-fragment children\n\t\tthis._children.forEach( function (c) {\n\t\t\tif ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {\n\t\t\t\tif ( query.test( c ) ) {\n\t\t\t\t\tquery.add( c.instance );\n\t\t\t\t\tc.liveQueries.push( query );\n\t\t\t\t}\n\n\t\t\t\tc.instance.findAllComponents( selector, options );\n\t\t\t}\n\t\t});\n\t}\n\n\tquery.init();\n\treturn query.result;\n}\n\nfunction Ractive$findComponent ( selector, options ) {\n\tvar this$1 = this;\n\tif ( options === void 0 ) options = {};\n\n\tif ( typeof selector === 'object' ) {\n\t\toptions = selector;\n\t\tselector = '';\n\t}\n\n\tvar child = this.fragment.findComponent( selector, options );\n\tif ( child ) { return child; }\n\n\tif ( options.remote ) {\n\t\tif ( !selector && this._children.length ) { return this._children[0].instance; }\n\t\tfor ( var i = 0; i < this._children.length; i++ ) {\n\t\t\t// skip children that are or should be in an anchor\n\t\t\tif ( this$1._children[i].target ) { continue; }\n\t\t\tif ( this$1._children[i].name === selector ) { return this$1._children[i].instance; }\n\t\t\tchild = this$1._children[i].instance.findComponent( selector, options );\n\t\t\tif ( child ) { return child; }\n\t\t}\n\t}\n}\n\nfunction Ractive$findContainer ( selector ) {\n\tif ( this.container ) {\n\t\tif ( this.container.component && this.container.component.name === selector ) {\n\t\t\treturn this.container;\n\t\t} else {\n\t\t\treturn this.container.findContainer( selector );\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction Ractive$findParent ( selector ) {\n\n\tif ( this.parent ) {\n\t\tif ( this.parent.component && this.parent.component.name === selector ) {\n\t\t\treturn this.parent;\n\t\t} else {\n\t\t\treturn this.parent.findParent ( selector );\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction Ractive$fire ( eventName ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\treturn fireEvent( this, eventName, { args: args });\n}\n\nvar stack = [];\nvar captureGroup;\n\nfunction startCapturing () {\n\tstack.push( captureGroup = [] );\n}\n\nfunction stopCapturing () {\n\tvar dependencies = stack.pop();\n\tcaptureGroup = stack[ stack.length - 1 ];\n\treturn dependencies;\n}\n\nfunction capture ( model ) {\n\tif ( captureGroup ) {\n\t\tcaptureGroup.push( model );\n\t}\n}\n\nvar KeyModel = function KeyModel ( key, parent ) {\n\tthis.value = key;\n\tthis.isReadonly = this.isKey = true;\n\tthis.deps = [];\n\tthis.links = [];\n\tthis.parent = parent;\n};\n\nKeyModel.prototype.get = function get ( shouldCapture ) {\n\tif ( shouldCapture ) { capture( this ); }\n\treturn unescapeKey( this.value );\n};\n\nKeyModel.prototype.getKeypath = function getKeypath () {\n\treturn unescapeKey( this.value );\n};\n\nKeyModel.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tvar i = this.deps.length;\n\twhile ( i-- ) { this$1.deps[i].rebind( next, previous, false ); }\n\n\ti = this.links.length;\n\twhile ( i-- ) { this$1.links[i].rebind( next, previous, false ); }\n};\n\nKeyModel.prototype.register = function register ( dependant ) {\n\tthis.deps.push( dependant );\n};\n\nKeyModel.prototype.registerLink = function registerLink ( link ) {\n\taddToArray( this.links, link );\n};\n\nKeyModel.prototype.unregister = function unregister ( dependant ) {\n\tremoveFromArray( this.deps, dependant );\n};\n\nKeyModel.prototype.unregisterLink = function unregisterLink ( link ) {\n\tremoveFromArray( this.links, link );\n};\n\nfunction bind$1$1               ( x ) { x.bind(); }\nfunction cancel$1             ( x ) { x.cancel(); }\nfunction destroyed$1$1          ( x ) { x.destroyed(); }\nfunction handleChange$1$1       ( x ) { x.handleChange(); }\nfunction mark$1$1               ( x ) { x.mark(); }\nfunction marked             ( x ) { x.marked(); }\nfunction markedAll          ( x ) { x.markedAll(); }\nfunction render$1$1             ( x ) { x.render(); }\nfunction shuffled$1$1           ( x ) { x.shuffled(); }\nfunction teardown$1$1           ( x ) { x.teardown(); }\nfunction unbind$1$1             ( x ) { x.unbind(); }\nfunction unrender$1$1           ( x ) { x.unrender(); }\nfunction unrenderAndDestroy ( x ) { x.unrender( true ); }\nfunction update$1$1             ( x ) { x.update(); }\nfunction toString$2           ( x ) { return x.toString(); }\nfunction toEscapedString    ( x ) { return x.toString( true ); }\n\nvar KeypathModel = function KeypathModel ( parent, ractive ) {\n\tthis.parent = parent;\n\tthis.ractive = ractive;\n\tthis.value = ractive ? parent.getKeypath( ractive ) : parent.getKeypath();\n\tthis.deps = [];\n\tthis.children = {};\n\tthis.isReadonly = this.isKeypath = true;\n};\n\nKeypathModel.prototype.get = function get ( shouldCapture ) {\n\tif ( shouldCapture ) { capture( this ); }\n\treturn this.value;\n};\n\nKeypathModel.prototype.getChild = function getChild ( ractive ) {\n\tif ( !( ractive._guid in this.children ) ) {\n\t\tvar model = new KeypathModel( this.parent, ractive );\n\t\tthis.children[ ractive._guid ] = model;\n\t\tmodel.owner = this;\n\t}\n\treturn this.children[ ractive._guid ];\n};\n\nKeypathModel.prototype.getKeypath = function getKeypath () {\n\treturn this.value;\n};\n\nKeypathModel.prototype.handleChange = function handleChange$1 () {\n\t\tvar this$1 = this;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].handleChange();\n\t}\n\n\tthis.deps.forEach( handleChange$1$1 );\n};\n\nKeypathModel.prototype.rebindChildren = function rebindChildren ( next ) {\n\t\tvar this$1 = this;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tvar child = this$1.children[keys[i]];\n\t\tchild.value = next.getKeypath( child.ractive );\n\t\tchild.handleChange();\n\t}\n};\n\nKeypathModel.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tvar model = next ? next.getKeypathModel( this.ractive ) : undefined;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].rebind( next, previous, false );\n\t}\n\n\ti = this.deps.length;\n\twhile ( i-- ) {\n\t\tthis$1.deps[i].rebind( model, this$1, false );\n\t}\n};\n\nKeypathModel.prototype.register = function register ( dep ) {\n\tthis.deps.push( dep );\n};\n\nKeypathModel.prototype.removeChild = function removeChild ( model ) {\n\tif ( model.ractive ) { delete this.children[ model.ractive._guid ]; }\n};\n\nKeypathModel.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\tif ( this.owner ) { this.owner.removeChild( this ); }\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].teardown();\n\t}\n};\n\nKeypathModel.prototype.unregister = function unregister ( dep ) {\n\tremoveFromArray( this.deps, dep );\n\tif ( !this.deps.length ) { this.teardown(); }\n};\n\nfunction bind$2 ( fn, context ) {\n\tif ( !/this/.test( fn.toString() ) ) { return fn; }\n\n\tvar bound = fn.bind( context );\n\tfor ( var prop in fn ) { bound[ prop ] = fn[ prop ]; }\n\n\treturn bound;\n}\n\nvar hasProp = Object.prototype.hasOwnProperty;\n\nvar shuffleTasks = { early: [], mark: [] };\nvar registerQueue = { early: [], mark: [] };\n\nvar ModelBase = function ModelBase ( parent ) {\n\tthis.deps = [];\n\n\tthis.children = [];\n\tthis.childByKey = {};\n\tthis.links = [];\n\n\tthis.keyModels = {};\n\n\tthis.bindings = [];\n\tthis.patternObservers = [];\n\n\tif ( parent ) {\n\t\tthis.parent = parent;\n\t\tthis.root = parent.root;\n\t}\n};\n\nModelBase.prototype.addShuffleTask = function addShuffleTask ( task, stage ) {\n\tif ( stage === void 0 ) stage = 'early';\n shuffleTasks[stage].push( task ); };\nModelBase.prototype.addShuffleRegister = function addShuffleRegister ( item, stage ) {\n\tif ( stage === void 0 ) stage = 'early';\n registerQueue[stage].push({ model: this, item: item }); };\n\nModelBase.prototype.findMatches = function findMatches ( keys ) {\n\tvar len = keys.length;\n\n\tvar existingMatches = [ this ];\n\tvar matches;\n\tvar i;\n\n\tvar loop = function (  ) {\n\t\tvar key = keys[i];\n\n\t\tif ( key === '*' ) {\n\t\t\tmatches = [];\n\t\t\texistingMatches.forEach( function (model) {\n\t\t\t\tmatches.push.apply( matches, model.getValueChildren( model.get() ) );\n\t\t\t});\n\t\t} else {\n\t\t\tmatches = existingMatches.map( function (model) { return model.joinKey( key ); } );\n\t\t}\n\n\t\texistingMatches = matches;\n\t};\n\n\t\tfor ( i = 0; i < len; i += 1 ) loop(  );\n\n\treturn matches;\n};\n\nModelBase.prototype.getKeyModel = function getKeyModel ( key, skip ) {\n\tif ( key !== undefined && !skip ) { return this.parent.getKeyModel( key, true ); }\n\n\tif ( !( key in this.keyModels ) ) { this.keyModels[ key ] = new KeyModel( escapeKey( key ), this ); }\n\n\treturn this.keyModels[ key ];\n};\n\nModelBase.prototype.getKeypath = function getKeypath ( ractive ) {\n\tif ( ractive !== this.ractive && this._link ) { return this._link.target.getKeypath( ractive ); }\n\n\tif ( !this.keypath ) {\n\t\tvar parent = this.parent && this.parent.getKeypath( ractive );\n\t\tthis.keypath = parent ? ((this.parent.getKeypath( ractive )) + \"".\"" + (escapeKey( this.key ))) : escapeKey( this.key );\n\t}\n\n\treturn this.keypath;\n};\n\nModelBase.prototype.getValueChildren = function getValueChildren ( value ) {\n\t\tvar this$1 = this;\n\n\tvar children;\n\tif ( Array.isArray( value ) ) {\n\t\tchildren = [];\n\t\tif ( 'length' in this && this.length !== value.length ) {\n\t\t\tchildren.push( this.joinKey( 'length' ) );\n\t\t}\n\t\tvalue.forEach( function ( m, i ) {\n\t\t\tchildren.push( this$1.joinKey( i ) );\n\t\t});\n\t}\n\n\telse if ( isObject( value ) || typeof value === 'function' ) {\n\t\tchildren = Object.keys( value ).map( function (key) { return this$1.joinKey( key ); } );\n\t}\n\n\telse if ( value != null ) {\n\t\treturn [];\n\t}\n\n\treturn children;\n};\n\nModelBase.prototype.getVirtual = function getVirtual ( shouldCapture ) {\n\t\tvar this$1 = this;\n\n\tvar value = this.get( shouldCapture, { virtual: false } );\n\tif ( isObject( value ) ) {\n\t\tvar result = Array.isArray( value ) ? [] : {};\n\n\t\tvar keys = Object.keys( value );\n\t\tvar i = keys.length;\n\t\twhile ( i-- ) {\n\t\t\tvar child = this$1.childByKey[ keys[i] ];\n\t\t\tif ( !child ) { result[ keys[i] ] = value[ keys[i] ]; }\n\t\t\telse if ( child._link ) { result[ keys[i] ] = child._link.getVirtual(); }\n\t\t\telse { result[ keys[i] ] = child.getVirtual(); }\n\t\t}\n\n\t\ti = this.children.length;\n\t\twhile ( i-- ) {\n\t\t\tvar child$1 = this$1.children[i];\n\t\t\tif ( !( child$1.key in result ) && child$1._link ) {\n\t\t\t\tresult[ child$1.key ] = child$1._link.getVirtual();\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t} else { return value; }\n};\n\nModelBase.prototype.has = function has ( key ) {\n\tif ( this._link ) { return this._link.has( key ); }\n\n\tvar value = this.get();\n\tif ( !value ) { return false; }\n\n\tkey = unescapeKey( key );\n\tif ( hasProp.call( value, key ) ) { return true; }\n\n\t// We climb up the constructor chain to find if one of them contains the key\n\tvar constructor = value.constructor;\n\twhile ( constructor !== Function && constructor !== Array && constructor !== Object ) {\n\t\tif ( hasProp.call( constructor.prototype, key ) ) { return true; }\n\t\tconstructor = constructor.constructor;\n\t}\n\n\treturn false;\n};\n\nModelBase.prototype.joinAll = function joinAll ( keys, opts ) {\n\tvar model = this;\n\tfor ( var i = 0; i < keys.length; i += 1 ) {\n\t\tif ( opts && opts.lastLink === false && i + 1 === keys.length && model.childByKey[keys[i]] && model.childByKey[keys[i]]._link ) { return model.childByKey[keys[i]]; }\n\t\tmodel = model.joinKey( keys[i], opts );\n\t}\n\n\treturn model;\n};\n\nModelBase.prototype.notifyUpstream = function notifyUpstream ( startPath ) {\n\t\tvar this$1 = this;\n\n\tvar parent = this.parent;\n\tvar path = startPath || [ this.key ];\n\twhile ( parent ) {\n\t\tif ( parent.patternObservers.length ) { parent.patternObservers.forEach( function (o) { return o.notify( path.slice() ); } ); }\n\t\tpath.unshift( parent.key );\n\t\tparent.links.forEach( function (l) { return l.notifiedUpstream( path, this$1.root ); } );\n\t\tparent.deps.forEach( handleChange$1$1 );\n\t\tparent = parent.parent;\n\t}\n};\n\nModelBase.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tvar this$1 = this;\n\n\t// tell the deps to move to the new target\n\tvar i = this.deps.length;\n\twhile ( i-- ) {\n\t\tif ( this$1.deps[i].rebind ) { this$1.deps[i].rebind( next, previous, safe ); }\n\t}\n\n\ti = this.links.length;\n\twhile ( i-- ) {\n\t\tvar link = this$1.links[i];\n\t\t// only relink the root of the link tree\n\t\tif ( link.owner._link ) { link.relinking( next, safe ); }\n\t}\n\n\ti = this.children.length;\n\twhile ( i-- ) {\n\t\tvar child = this$1.children[i];\n\t\tchild.rebind( next ? next.joinKey( child.key ) : undefined, child, safe );\n\t}\n\n\tif ( this.keypathModel ) { this.keypathModel.rebind( next, previous, false ); }\n\n\ti = this.bindings.length;\n\twhile ( i-- ) {\n\t\tthis$1.bindings[i].rebind( next, previous, safe );\n\t}\n};\n\nModelBase.prototype.register = function register ( dep ) {\n\tthis.deps.push( dep );\n};\n\nModelBase.prototype.registerLink = function registerLink ( link ) {\n\taddToArray( this.links, link );\n};\n\nModelBase.prototype.registerPatternObserver = function registerPatternObserver ( observer ) {\n\tthis.patternObservers.push( observer );\n\tthis.register( observer );\n};\n\nModelBase.prototype.registerTwowayBinding = function registerTwowayBinding ( binding ) {\n\tthis.bindings.push( binding );\n};\n\nModelBase.prototype.unregister = function unregister ( dep ) {\n\tremoveFromArray( this.deps, dep );\n};\n\nModelBase.prototype.unregisterLink = function unregisterLink ( link ) {\n\tremoveFromArray( this.links, link );\n};\n\nModelBase.prototype.unregisterPatternObserver = function unregisterPatternObserver ( observer ) {\n\tremoveFromArray( this.patternObservers, observer );\n\tthis.unregister( observer );\n};\n\nModelBase.prototype.unregisterTwowayBinding = function unregisterTwowayBinding ( binding ) {\n\tremoveFromArray( this.bindings, binding );\n};\n\nModelBase.prototype.updateFromBindings = function updateFromBindings$1 ( cascade ) {\n\t\tvar this$1 = this;\n\n\tvar i = this.bindings.length;\n\twhile ( i-- ) {\n\t\tvar value = this$1.bindings[i].getValue();\n\t\tif ( value !== this$1.value ) { this$1.set( value ); }\n\t}\n\n\t// check for one-way bindings if there are no two-ways\n\tif ( !this.bindings.length ) {\n\t\tvar oneway = findBoundValue( this.deps );\n\t\tif ( oneway && oneway.value !== this.value ) { this.set( oneway.value ); }\n\t}\n\n\tif ( cascade ) {\n\t\tthis.children.forEach( updateFromBindings );\n\t\tthis.links.forEach( updateFromBindings );\n\t\tif ( this._link ) { this._link.updateFromBindings( cascade ); }\n\t}\n};\n\n// TODO: this may be better handled by overreiding `get` on models with a parent that isRoot\nfunction maybeBind ( model, value, shouldBind ) {\n\tif ( shouldBind && typeof value === 'function' && model.parent && model.parent.isRoot ) {\n\t\tif ( !model.boundValue ) {\n\t\t\tmodel.boundValue = bind$2( value._r_unbound || value, model.parent.ractive );\n\t\t}\n\n\t\treturn model.boundValue;\n\t}\n\n\treturn value;\n}\n\nfunction updateFromBindings ( model ) {\n\tmodel.updateFromBindings( true );\n}\n\nfunction findBoundValue( list ) {\n\tvar i = list.length;\n\twhile ( i-- ) {\n\t\tif ( list[i].bound ) {\n\t\t\tvar owner = list[i].owner;\n\t\t\tif ( owner ) {\n\t\t\t\tvar value = owner.name === 'checked' ?\n\t\t\t\t\towner.node.checked :\n\t\t\t\t\towner.node.value;\n\t\t\t\treturn { value: value };\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction fireShuffleTasks ( stage ) {\n\tif ( !stage ) {\n\t\tfireShuffleTasks( 'early' );\n\t\tfireShuffleTasks( 'mark' );\n\t} else {\n\t\tvar tasks = shuffleTasks[stage];\n\t\tshuffleTasks[stage] = [];\n\t\tvar i = tasks.length;\n\t\twhile ( i-- ) { tasks[i](); }\n\n\t\tvar register = registerQueue[stage];\n\t\tregisterQueue[stage] = [];\n\t\ti = register.length;\n\t\twhile ( i-- ) { register[i].model.register( register[i].item ); }\n\t}\n}\n\nfunction shuffle$1$1 ( model, newIndices, link ) {\n\tmodel.shuffling = true;\n\n\tvar i = newIndices.length;\n\twhile ( i-- ) {\n\t\tvar idx = newIndices[ i ];\n\t\t// nothing is actually changing, so move in the index and roll on\n\t\tif ( i === idx ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// rebind the children on i to idx\n\t\tif ( i in model.childByKey ) { model.childByKey[ i ].rebind( !~idx ? undefined : model.joinKey( idx ), model.childByKey[ i ], true ); }\n\n\t\tif ( !~idx && model.keyModels[ i ] ) {\n\t\t\tmodel.keyModels[i].rebind( undefined, model.keyModels[i], false );\n\t\t} else if ( ~idx && model.keyModels[ i ] ) {\n\t\t\tif ( !model.keyModels[ idx ] ) { model.childByKey[ idx ].getKeyModel( idx ); }\n\t\t\tmodel.keyModels[i].rebind( model.keyModels[ idx ], model.keyModels[i], false );\n\t\t}\n\t}\n\n\tvar upstream = model.source().length !== model.source().value.length;\n\n\tmodel.links.forEach( function (l) { return l.shuffle( newIndices ); } );\n\tif ( !link ) { fireShuffleTasks( 'early' ); }\n\n\ti = model.deps.length;\n\twhile ( i-- ) {\n\t\tif ( model.deps[i].shuffle ) { model.deps[i].shuffle( newIndices ); }\n\t}\n\n\tmodel[ link ? 'marked' : 'mark' ]();\n\tif ( !link ) { fireShuffleTasks( 'mark' ); }\n\n\tif ( upstream ) { model.notifyUpstream(); }\n\n\tmodel.shuffling = false;\n}\n\nKeyModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;\nKeyModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;\nKeypathModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;\nKeypathModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;\n\n// this is the dry method of checking to see if a rebind applies to\n// a particular keypath because in some cases, a dep may be bound\n// directly to a particular keypath e.g. foo.bars.0.baz and need\n// to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted\nfunction rebindMatch ( template, next, previous, fragment ) {\n\tvar keypath = template.r || template;\n\n\t// no valid keypath, go with next\n\tif ( !keypath || typeof keypath !== 'string' ) { return next; }\n\n\t// completely contextual ref, go with next\n\tif ( keypath === '.' || keypath[0] === '@' || ( next || previous ).isKey || ( next || previous ).isKeypath ) { return next; }\n\n\tvar parts = keypath.split( '/' );\n\tvar keys = splitKeypath( parts[ parts.length - 1 ] );\n\tvar last = keys[ keys.length - 1 ];\n\n\t// check the keypath against the model keypath to see if it matches\n\tvar model = next || previous;\n\n\t// check to see if this was an alias\n\tif ( model && keys.length === 1 && last !== model.key && fragment ) {\n\t\tkeys = findAlias( last, fragment ) || keys;\n\t}\n\n\tvar i = keys.length;\n\tvar match = true;\n\tvar shuffling = false;\n\n\twhile ( model && i-- ) {\n\t\tif ( model.shuffling ) { shuffling = true; }\n\t\t// non-strict comparison to account for indices in keypaths\n\t\tif ( keys[i] != model.key ) { match = false; }\n\t\tmodel = model.parent;\n\t}\n\n\t// next is undefined, but keypath is shuffling and previous matches\n\tif ( !next && match && shuffling ) { return previous; }\n\t// next is defined, but doesn't match the keypath\n\telse if ( next && !match && shuffling ) { return previous; }\n\telse { return next; }\n}\n\nfunction findAlias ( name, fragment ) {\n\twhile ( fragment ) {\n\t\tvar z = fragment.aliases;\n\t\tif ( z && z[ name ] ) {\n\t\t\tvar aliases = ( fragment.owner.iterations ? fragment.owner : fragment ).owner.template.z;\n\t\t\tfor ( var i = 0; i < aliases.length; i++ ) {\n\t\t\t\tif ( aliases[i].n === name ) {\n\t\t\t\t\tvar alias = aliases[i].x;\n\t\t\t\t\tif ( !alias.r ) { return false; }\n\t\t\t\t\tvar parts = alias.r.split( '/' );\n\t\t\t\t\treturn splitKeypath( parts[ parts.length - 1 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tfragment = fragment.componentParent || fragment.parent;\n\t}\n}\n\n// temporary placeholder target for detached implicit links\nvar Missing = {\n\tkey: '@missing',\n\tanimate: noop,\n\tapplyValue: noop,\n\tget: noop,\n\tgetKeypath: function getKeypath () { return this.key; },\n\tjoinAll: function joinAll () { return this; },\n\tjoinKey: function joinKey () { return this; },\n\tmark: noop,\n\tregisterLink: noop,\n\tshufle: noop,\n\tset: noop,\n\tunregisterLink: noop\n};\nMissing.parent = Missing;\n\nvar LinkModel = (function (ModelBase$$1) {\n\tfunction LinkModel ( parent, owner, target, key ) {\n\t\tModelBase$$1.call( this, parent );\n\n\t\tthis.owner = owner;\n\t\tthis.target = target;\n\t\tthis.key = key === undefined ? owner.key : key;\n\t\tif ( owner.isLink ) { this.sourcePath = (owner.sourcePath) + \"".\"" + (this.key); }\n\n\t\ttarget.registerLink( this );\n\n\t\tif ( parent ) { this.isReadonly = parent.isReadonly; }\n\n\t\tthis.isLink = true;\n\t}\n\n\tif ( ModelBase$$1 ) LinkModel.__proto__ = ModelBase$$1;\n\tLinkModel.prototype = Object.create( ModelBase$$1 && ModelBase$$1.prototype );\n\tLinkModel.prototype.constructor = LinkModel;\n\n\tLinkModel.prototype.animate = function animate ( from, to, options, interpolator ) {\n\t\treturn this.target.animate( from, to, options, interpolator );\n\t};\n\n\tLinkModel.prototype.applyValue = function applyValue ( value ) {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\t\tthis.target.applyValue( value );\n\t};\n\n\tLinkModel.prototype.attach = function attach ( fragment ) {\n\t\tvar model = resolveReference( fragment, this.key );\n\t\tif ( model ) {\n\t\t\tthis.relinking( model, false );\n\t\t} else { // if there is no link available, move everything here to real models\n\t\t\tthis.owner.unlink();\n\t\t}\n\t};\n\n\tLinkModel.prototype.detach = function detach () {\n\t\tthis.relinking( Missing, false );\n\t};\n\n\tLinkModel.prototype.get = function get ( shouldCapture, opts ) {\n\t\tif ( opts === void 0 ) opts = {};\n\n\t\tif ( shouldCapture ) {\n\t\t\tcapture( this );\n\n\t\t\t// may need to tell the target to unwrap\n\t\t\topts.unwrap = true;\n\t\t}\n\n\t\tvar bind$$1 = 'shouldBind' in opts ? opts.shouldBind : true;\n\t\topts.shouldBind = false;\n\n\t\treturn maybeBind( this, this.target.get( false, opts ), bind$$1 );\n\t};\n\n\tLinkModel.prototype.getKeypath = function getKeypath ( ractive ) {\n\t\tif ( ractive && ractive !== this.root.ractive ) { return this.target.getKeypath( ractive ); }\n\n\t\treturn ModelBase$$1.prototype.getKeypath.call( this, ractive );\n\t};\n\n\tLinkModel.prototype.getKeypathModel = function getKeypathModel ( ractive ) {\n\t\tif ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }\n\t\tif ( ractive && ractive !== this.root.ractive ) { return this.keypathModel.getChild( ractive ); }\n\t\treturn this.keypathModel;\n\t};\n\n\tLinkModel.prototype.handleChange = function handleChange$1 () {\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.links.forEach( handleChange$1$1 );\n\t\tthis.notifyUpstream();\n\t};\n\n\tLinkModel.prototype.isDetached = function isDetached () { return this.virtual && this.target === Missing; };\n\n\tLinkModel.prototype.joinKey = function joinKey ( key ) {\n\t\t// TODO: handle nested links\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new LinkModel( this, this, this.target.joinKey( key ), key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tLinkModel.prototype.mark = function mark () {\n\t\tthis.target.mark();\n\t};\n\n\tLinkModel.prototype.marked = function marked$1 () {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\tthis.links.forEach( marked );\n\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t};\n\n\tLinkModel.prototype.markedAll = function markedAll$1 () {\n\t\tthis.children.forEach( markedAll );\n\t\tthis.marked();\n\t};\n\n\tLinkModel.prototype.notifiedUpstream = function notifiedUpstream ( startPath, root ) {\n\t\tvar this$1 = this;\n\n\t\tthis.links.forEach( function (l) { return l.notifiedUpstream( startPath, this$1.root ); } );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tif ( startPath && this.rootLink && this.root !== root ) {\n\t\t\tvar path = startPath.slice( 1 );\n\t\t\tpath.unshift( this.key );\n\t\t\tthis.notifyUpstream( path );\n\t\t}\n\t};\n\n\tLinkModel.prototype.relinked = function relinked () {\n\t\tthis.target.registerLink( this );\n\t\tthis.children.forEach( function (c) { return c.relinked(); } );\n\t};\n\n\tLinkModel.prototype.relinking = function relinking ( target, safe ) {\n\t\tvar this$1 = this;\n\n\t\tif ( this.rootLink && this.sourcePath ) { target = rebindMatch( this.sourcePath, target, this.target ); }\n\t\tif ( !target || this.target === target ) { return; }\n\n\t\tthis.target.unregisterLink( this );\n\t\tif ( this.keypathModel ) { this.keypathModel.rebindChildren( target ); }\n\n\t\tthis.target = target;\n\t\tthis.children.forEach( function (c) {\n\t\t\tc.relinking( target.joinKey( c.key ), safe );\n\t\t});\n\n\t\tif ( this.rootLink ) { this.addShuffleTask( function () {\n\t\t\tthis$1.relinked();\n\t\t\tif ( !safe ) { this$1.notifyUpstream(); }\n\t\t}); }\n\t};\n\n\tLinkModel.prototype.set = function set ( value ) {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\t\tthis.target.set( value );\n\t};\n\n\tLinkModel.prototype.shuffle = function shuffle$1 ( newIndices ) {\n\t\t// watch for extra shuffles caused by a shuffle in a downstream link\n\t\tif ( this.shuffling ) { return; }\n\n\t\t// let the real model handle firing off shuffles\n\t\tif ( !this.target.shuffling ) {\n\t\t\tthis.target.shuffle( newIndices );\n\t\t} else {\n\t\t\tshuffle$1$1( this, newIndices, true );\n\t\t}\n\n\t};\n\n\tLinkModel.prototype.source = function source () {\n\t\tif ( this.target.source ) { return this.target.source(); }\n\t\telse { return this.target; }\n\t};\n\n\tLinkModel.prototype.teardown = function teardown$1 () {\n\t\tif ( this._link ) { this._link.teardown(); }\n\t\tthis.children.forEach( teardown$1$1 );\n\t};\n\n\treturn LinkModel;\n}(ModelBase));\n\nModelBase.prototype.link = function link ( model, keypath, options ) {\n\tvar lnk = this._link || new LinkModel( this.parent, this, model, this.key );\n\tlnk.implicit = options && options.implicit;\n\tlnk.sourcePath = keypath;\n\tlnk.rootLink = true;\n\tif ( this._link ) { this._link.relinking( model, true, false ); }\n\tthis.rebind( lnk, this, false );\n\tfireShuffleTasks();\n\n\tthis._link = lnk;\n\tlnk.markedAll();\n\treturn lnk;\n};\n\nModelBase.prototype.unlink = function unlink () {\n\tif ( this._link ) {\n\t\tvar ln = this._link;\n\t\tthis._link = undefined;\n\t\tln.rebind( this, this._link );\n\t\tfireShuffleTasks();\n\t\tln.teardown();\n\t}\n};\n\n// TODO what happens if a transition is aborted?\n\nvar tickers = [];\nvar running = false;\n\nfunction tick () {\n\trunloop.start();\n\n\tvar now = performance.now();\n\n\tvar i;\n\tvar ticker;\n\n\tfor ( i = 0; i < tickers.length; i += 1 ) {\n\t\tticker = tickers[i];\n\n\t\tif ( !ticker.tick( now ) ) {\n\t\t\t// ticker is complete, remove it from the stack, and decrement i so we don't miss one\n\t\t\ttickers.splice( i--, 1 );\n\t\t}\n\t}\n\n\trunloop.end();\n\n\tif ( tickers.length ) {\n\t\trequestAnimationFrame( tick );\n\t} else {\n\t\trunning = false;\n\t}\n}\n\nvar Ticker = function Ticker ( options ) {\n\tthis.duration = options.duration;\n\tthis.step = options.step;\n\tthis.complete = options.complete;\n\tthis.easing = options.easing;\n\n\tthis.start = performance.now();\n\tthis.end = this.start + this.duration;\n\n\tthis.running = true;\n\n\ttickers.push( this );\n\tif ( !running ) { requestAnimationFrame( tick ); }\n};\n\nTicker.prototype.tick = function tick$1 ( now ) {\n\tif ( !this.running ) { return false; }\n\n\tif ( now > this.end ) {\n\t\tif ( this.step ) { this.step( 1 ); }\n\t\tif ( this.complete ) { this.complete( 1 ); }\n\n\t\treturn false;\n\t}\n\n\tvar elapsed = now - this.start;\n\tvar eased = this.easing( elapsed / this.duration );\n\n\tif ( this.step ) { this.step( eased ); }\n\n\treturn true;\n};\n\nTicker.prototype.stop = function stop () {\n\tif ( this.abort ) { this.abort(); }\n\tthis.running = false;\n};\n\nvar prefixers = {};\n\n// TODO this is legacy. sooner we can replace the old adaptor API the better\nfunction prefixKeypath ( obj, prefix ) {\n\tvar prefixed = {};\n\n\tif ( !prefix ) {\n\t\treturn obj;\n\t}\n\n\tprefix += '.';\n\n\tfor ( var key in obj ) {\n\t\tif ( obj.hasOwnProperty( key ) ) {\n\t\t\tprefixed[ prefix + key ] = obj[ key ];\n\t\t}\n\t}\n\n\treturn prefixed;\n}\n\nfunction getPrefixer ( rootKeypath ) {\n\tvar rootDot;\n\n\tif ( !prefixers[ rootKeypath ] ) {\n\t\trootDot = rootKeypath ? rootKeypath + '.' : '';\n\n\t\tprefixers[ rootKeypath ] = function ( relativeKeypath, value ) {\n\t\t\tvar obj;\n\n\t\t\tif ( typeof relativeKeypath === 'string' ) {\n\t\t\t\tobj = {};\n\t\t\t\tobj[ rootDot + relativeKeypath ] = value;\n\t\t\t\treturn obj;\n\t\t\t}\n\n\t\t\tif ( typeof relativeKeypath === 'object' ) {\n\t\t\t\t// 'relativeKeypath' is in fact a hash, not a keypath\n\t\t\t\treturn rootDot ? prefixKeypath( relativeKeypath, rootKeypath ) : relativeKeypath;\n\t\t\t}\n\t\t};\n\t}\n\n\treturn prefixers[ rootKeypath ];\n}\n\nvar Model = (function (ModelBase$$1) {\n\tfunction Model ( parent, key ) {\n\t\tModelBase$$1.call( this, parent );\n\n\t\tthis.ticker = null;\n\n\t\tif ( parent ) {\n\t\t\tthis.key = unescapeKey( key );\n\t\t\tthis.isReadonly = parent.isReadonly;\n\n\t\t\tif ( parent.value ) {\n\t\t\t\tthis.value = parent.value[ this.key ];\n\t\t\t\tif ( Array.isArray( this.value ) ) { this.length = this.value.length; }\n\t\t\t\tthis.adapt();\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( ModelBase$$1 ) Model.__proto__ = ModelBase$$1;\n\tModel.prototype = Object.create( ModelBase$$1 && ModelBase$$1.prototype );\n\tModel.prototype.constructor = Model;\n\n\tModel.prototype.adapt = function adapt () {\n\t\tvar this$1 = this;\n\n\t\tvar adaptors = this.root.adaptors;\n\t\tvar len = adaptors.length;\n\n\t\tthis.rewrap = false;\n\n\t\t// Exit early if no adaptors\n\t\tif ( len === 0 ) { return; }\n\n\t\tvar value = this.wrapper ? ( 'newWrapperValue' in this ? this.newWrapperValue : this.wrapperValue ) : this.value;\n\n\t\t// TODO remove this legacy nonsense\n\t\tvar ractive = this.root.ractive;\n\t\tvar keypath = this.getKeypath();\n\n\t\t// tear previous adaptor down if present\n\t\tif ( this.wrapper ) {\n\t\t\tvar shouldTeardown = this.wrapperValue === value ? false : !this.wrapper.reset || this.wrapper.reset( value ) === false;\n\n\t\t\tif ( shouldTeardown ) {\n\t\t\t\tthis.wrapper.teardown();\n\t\t\t\tthis.wrapper = null;\n\n\t\t\t\t// don't branch for undefined values\n\t\t\t\tif ( this.value !== undefined ) {\n\t\t\t\t\tvar parentValue = this.parent.value || this.parent.createBranch( this.key );\n\t\t\t\t\tif ( parentValue[ this.key ] !== value ) { parentValue[ this.key ] = value; }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete this.newWrapperValue;\n\t\t\t\tthis.wrapperValue = value;\n\t\t\t\tthis.value = this.wrapper.get();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar adaptor = adaptors[i];\n\t\t\tif ( adaptor.filter( value, keypath, ractive ) ) {\n\t\t\t\tthis$1.wrapper = adaptor.wrap( ractive, value, keypath, getPrefixer( keypath ) );\n\t\t\t\tthis$1.wrapperValue = value;\n\t\t\t\tthis$1.wrapper.__model = this$1; // massive temporary hack to enable array adaptor\n\n\t\t\t\tthis$1.value = this$1.wrapper.get();\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tModel.prototype.animate = function animate ( from, to, options, interpolator ) {\n\t\tvar this$1 = this;\n\n\t\tif ( this.ticker ) { this.ticker.stop(); }\n\n\t\tvar fulfilPromise;\n\t\tvar promise = new Promise( function (fulfil) { return fulfilPromise = fulfil; } );\n\n\t\tthis.ticker = new Ticker({\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tstep: function (t) {\n\t\t\t\tvar value = interpolator( t );\n\t\t\t\tthis$1.applyValue( value );\n\t\t\t\tif ( options.step ) { options.step( t, value ); }\n\t\t\t},\n\t\t\tcomplete: function () {\n\t\t\t\tthis$1.applyValue( to );\n\t\t\t\tif ( options.complete ) { options.complete( to ); }\n\n\t\t\t\tthis$1.ticker = null;\n\t\t\t\tfulfilPromise();\n\t\t\t}\n\t\t});\n\n\t\tpromise.stop = this.ticker.stop;\n\t\treturn promise;\n\t};\n\n\tModel.prototype.applyValue = function applyValue ( value, notify ) {\n\t\tif ( notify === void 0 ) notify = true;\n\n\t\tif ( isEqual( value, this.value ) ) { return; }\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\tif ( this.parent.wrapper && this.parent.wrapper.set ) {\n\t\t\tthis.parent.wrapper.set( this.key, value );\n\t\t\tthis.parent.value = this.parent.wrapper.get();\n\n\t\t\tthis.value = this.parent.value[ this.key ];\n\t\t\tif ( this.wrapper ) { this.newWrapperValue = this.value; }\n\t\t\tthis.adapt();\n\t\t} else if ( this.wrapper ) {\n\t\t\tthis.newWrapperValue = value;\n\t\t\tthis.adapt();\n\t\t} else {\n\t\t\tvar parentValue = this.parent.value || this.parent.createBranch( this.key );\n\t\t\tif ( isObjectLike( parentValue ) ) {\n\t\t\t\tparentValue[ this.key ] = value;\n\t\t\t} else {\n\t\t\t\twarnIfDebug( (\""Attempted to set a property of a non-object '\"" + (this.getKeypath()) + \""'\"") );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.value = value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\t// keep track of array stuff\n\t\tif ( Array.isArray( value ) ) {\n\t\t\tthis.length = value.length;\n\t\t\tthis.isArray = true;\n\t\t} else {\n\t\t\tthis.isArray = false;\n\t\t}\n\n\t\t// notify dependants\n\t\tthis.links.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( mark$1$1 );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\n\t\tif ( notify ) { this.notifyUpstream(); }\n\n\t\tif ( this.parent.isArray ) {\n\t\t\tif ( this.key === 'length' ) { this.parent.length = value; }\n\t\t\telse { this.parent.joinKey( 'length' ).mark(); }\n\t\t}\n\t};\n\n\tModel.prototype.createBranch = function createBranch ( key ) {\n\t\tvar branch = isNumeric( key ) ? [] : {};\n\t\tthis.applyValue( branch, false );\n\n\t\treturn branch;\n\t};\n\n\tModel.prototype.get = function get ( shouldCapture, opts ) {\n\t\tif ( this._link ) { return this._link.get( shouldCapture, opts ); }\n\t\tif ( shouldCapture ) { capture( this ); }\n\t\t// if capturing, this value needs to be unwrapped because it's for external use\n\t\tif ( opts && opts.virtual ) { return this.getVirtual( false ); }\n\t\treturn maybeBind( this, ( ( opts && 'unwrap' in opts ) ? opts.unwrap !== false : shouldCapture ) && this.wrapper ? this.wrapperValue : this.value, !opts || opts.shouldBind !== false );\n\t};\n\n\tModel.prototype.getKeypathModel = function getKeypathModel () {\n\t\tif ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }\n\t\treturn this.keypathModel;\n\t};\n\n\tModel.prototype.joinKey = function joinKey ( key, opts ) {\n\t\tif ( this._link ) {\n\t\t\tif ( opts && opts.lastLink !== false && ( key === undefined || key === '' ) ) { return this; }\n\t\t\treturn this._link.joinKey( key );\n\t\t}\n\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new Model( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\tif ( this.childByKey[ key ]._link && ( !opts || opts.lastLink !== false ) ) { return this.childByKey[ key ]._link; }\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tModel.prototype.mark = function mark$1 () {\n\t\tif ( this._link ) { return this._link.mark(); }\n\n\t\tvar value = this.retrieve();\n\n\t\tif ( !isEqual( value, this.value ) ) {\n\t\t\tvar old = this.value;\n\t\t\tthis.value = value;\n\t\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\t\t// make sure the wrapper stays in sync\n\t\t\tif ( old !== value || this.rewrap ) {\n\t\t\t\tif ( this.wrapper ) { this.newWrapperValue = value; }\n\t\t\t\tthis.adapt();\n\t\t\t}\n\n\t\t\t// keep track of array stuff\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\tthis.length = value.length;\n\t\t\t\tthis.isArray = true;\n\t\t\t} else {\n\t\t\t\tthis.isArray = false;\n\t\t\t}\n\n\t\t\tthis.children.forEach( mark$1$1 );\n\t\t\tthis.links.forEach( marked );\n\n\t\t\tthis.deps.forEach( handleChange$1$1 );\n\t\t}\n\t};\n\n\tModel.prototype.merge = function merge ( array, comparator ) {\n\t\tvar oldArray = this.value;\n\t\tvar newArray = array;\n\t\tif ( oldArray === newArray ) { oldArray = recreateArray( this ); }\n\t\tif ( comparator ) {\n\t\t\toldArray = oldArray.map( comparator );\n\t\t\tnewArray = newArray.map( comparator );\n\t\t}\n\n\t\tvar oldLength = oldArray.length;\n\n\t\tvar usedIndices = {};\n\t\tvar firstUnusedIndex = 0;\n\n\t\tvar newIndices = oldArray.map( function (item) {\n\t\t\tvar index;\n\t\t\tvar start = firstUnusedIndex;\n\n\t\t\tdo {\n\t\t\t\tindex = newArray.indexOf( item, start );\n\n\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\n\t\t\t\tstart = index + 1;\n\t\t\t} while ( ( usedIndices[ index ] === true ) && start < oldLength );\n\n\t\t\t// keep track of the first unused index, so we don't search\n\t\t\t// the whole of newArray for each item in oldArray unnecessarily\n\t\t\tif ( index === firstUnusedIndex ) {\n\t\t\t\tfirstUnusedIndex += 1;\n\t\t\t}\n\t\t\t// allow next instance of next \""equal\"" to be found item\n\t\t\tusedIndices[ index ] = true;\n\t\t\treturn index;\n\t\t});\n\n\t\tthis.parent.value[ this.key ] = array;\n\t\tthis.shuffle( newIndices );\n\t};\n\n\tModel.prototype.retrieve = function retrieve () {\n\t\treturn this.parent.value ? this.parent.value[ this.key ] : undefined;\n\t};\n\n\tModel.prototype.set = function set ( value ) {\n\t\tif ( this.ticker ) { this.ticker.stop(); }\n\t\tthis.applyValue( value );\n\t};\n\n\tModel.prototype.shuffle = function shuffle$1 ( newIndices ) {\n\t\tshuffle$1$1( this, newIndices, false );\n\t};\n\n\tModel.prototype.source = function source () { return this; };\n\n\tModel.prototype.teardown = function teardown$1 () {\n\t\tif ( this._link ) { this._link.teardown(); }\n\t\tthis.children.forEach( teardown$1$1 );\n\t\tif ( this.wrapper ) { this.wrapper.teardown(); }\n\t\tif ( this.keypathModel ) { this.keypathModel.teardown(); }\n\t};\n\n\treturn Model;\n}(ModelBase));\n\nfunction recreateArray( model ) {\n\tvar array = [];\n\n\tfor ( var i = 0; i < model.length; i++ ) {\n\t\tarray[ i ] = (model.childByKey[i] || {}).value;\n\t}\n\n\treturn array;\n}\n\n/* global global */\nvar data = {};\n\nvar SharedModel = (function (Model$$1) {\n\tfunction SharedModel ( value, name ) {\n\t\tModel$$1.call( this, null, (\""@\"" + name) );\n\t\tthis.key = \""@\"" + name;\n\t\tthis.value = value;\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.adaptors = [];\n\t}\n\n\tif ( Model$$1 ) SharedModel.__proto__ = Model$$1;\n\tSharedModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tSharedModel.prototype.constructor = SharedModel;\n\n\tSharedModel.prototype.getKeypath = function getKeypath () {\n\t\treturn this.key;\n\t};\n\n\treturn SharedModel;\n}(Model));\n\nvar SharedModel$1 = new SharedModel( data, 'shared' );\n\nvar GlobalModel = new SharedModel( typeof global !== 'undefined' ? global : window, 'global' );\n\nfunction resolveReference ( fragment, ref ) {\n\tvar initialFragment = fragment;\n\t// current context ref\n\tif ( ref === '.' ) { return fragment.findContext(); }\n\n\t// ancestor references\n\tif ( ref[0] === '~' ) { return fragment.ractive.viewmodel.joinAll( splitKeypath( ref.slice( 2 ) ) ); }\n\n\t// scoped references\n\tif ( ref[0] === '.' || ref[0] === '^' ) {\n\t\tvar frag = fragment;\n\t\tvar parts = ref.split( '/' );\n\t\tvar explicitContext = parts[0] === '^^';\n\t\tvar context$1 = explicitContext ? null : fragment.findContext();\n\n\t\t// account for the first context hop\n\t\tif ( explicitContext ) { parts.unshift( '^^' ); }\n\n\t\t// walk up the context chain\n\t\twhile ( parts[0] === '^^' ) {\n\t\t\tparts.shift();\n\t\t\tcontext$1 = null;\n\t\t\twhile ( frag && !context$1 ) {\n\t\t\t\tcontext$1 = frag.context;\n\t\t\t\tfrag = frag.parent.component ? frag.parent.component.parentFragment : frag.parent;\n\t\t\t}\n\t\t}\n\n\t\tif ( !context$1 && explicitContext ) {\n\t\t\tthrow new Error( (\""Invalid context parent reference ('\"" + ref + \""'). There is not context at that level.\"") );\n\t\t}\n\n\t\t// walk up the context path\n\t\twhile ( parts[0] === '.' || parts[0] === '..' ) {\n\t\t\tvar part = parts.shift();\n\n\t\t\tif ( part === '..' ) {\n\t\t\t\tcontext$1 = context$1.parent;\n\t\t\t}\n\t\t}\n\n\t\tref = parts.join( '/' );\n\n\t\t// special case - `{{.foo}}` means the same as `{{./foo}}`\n\t\tif ( ref[0] === '.' ) { ref = ref.slice( 1 ); }\n\t\treturn context$1.joinAll( splitKeypath( ref ) );\n\t}\n\n\tvar keys = splitKeypath( ref );\n\tif ( !keys.length ) { return; }\n\tvar base = keys.shift();\n\n\t// special refs\n\tif ( base[0] === '@' ) {\n\t\t// shorthand from outside the template\n\t\t// @this referring to local ractive instance\n\t\tif ( base === '@this' || base === '@' ) {\n\t\t\treturn fragment.ractive.viewmodel.getRactiveModel().joinAll( keys );\n\t\t}\n\n\t\t// @index or @key referring to the nearest repeating index or key\n\t\telse if ( base === '@index' || base === '@key' ) {\n\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\tvar repeater = fragment.findRepeatingFragment();\n\t\t\t// make sure the found fragment is actually an iteration\n\t\t\tif ( !repeater.isIteration ) { return; }\n\t\t\treturn repeater.context.getKeyModel( repeater[ ref[1] === 'i' ? 'index' : 'key' ] );\n\t\t}\n\n\t\t// @global referring to window or global\n\t\telse if ( base === '@global' ) {\n\t\t\treturn GlobalModel.joinAll( keys );\n\t\t}\n\n\t\t// @global referring to window or global\n\t\telse if ( base === '@shared' ) {\n\t\t\treturn SharedModel$1.joinAll( keys );\n\t\t}\n\n\t\t// @keypath or @rootpath, the current keypath string, which may also be used to resolve relative keypaths\n\t\telse if ( base.indexOf( '@keypath' ) === 0 || base.indexOf( '@rootpath' ) === 0 ) {\n\t\t\tvar root = ref[1] === 'r' ? fragment.ractive.root : null;\n\t\t\tvar context$2 = fragment.findContext();\n\n\t\t\t// skip over component roots, which provide no context\n\t\t\twhile ( root && context$2.isRoot && context$2.ractive.component ) {\n\t\t\t\tcontext$2 = context$2.ractive.component.parentFragment.findContext();\n\t\t\t}\n\n\t\t\treturn context$2.getKeypathModel( root );\n\t\t}\n\n\t\t// nope\n\t\telse {\n\t\t\tthrow new Error( (\""Invalid special reference '\"" + base + \""'\"") );\n\t\t}\n\t}\n\n\tvar context = fragment.findContext();\n\n\t// check immediate context for a match\n\tif ( context.has( base ) ) {\n\t\treturn context.joinKey( base ).joinAll( keys );\n\t}\n\n\t// walk up the fragment hierarchy looking for a matching ref, alias, or key in a context\n\tvar crossedComponentBoundary;\n\tvar shouldWarn = fragment.ractive.warnAboutAmbiguity;\n\n\twhile ( fragment ) {\n\t\t// repeated fragments\n\t\tif ( fragment.isIteration ) {\n\t\t\tif ( base === fragment.parent.keyRef ) {\n\t\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\t\treturn fragment.context.getKeyModel( fragment.key );\n\t\t\t}\n\n\t\t\tif ( base === fragment.parent.indexRef ) {\n\t\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\t\treturn fragment.context.getKeyModel( fragment.index );\n\t\t\t}\n\t\t}\n\n\t\t// alias node or iteration\n\t\tif ( fragment.aliases  && fragment.aliases.hasOwnProperty( base ) ) {\n\t\t\tvar model = fragment.aliases[ base ];\n\n\t\t\tif ( keys.length === 0 ) { return model; }\n\t\t\telse if ( typeof model.joinAll === 'function' ) {\n\t\t\t\treturn model.joinAll( keys );\n\t\t\t}\n\t\t}\n\n\t\t// check fragment context to see if it has the key we need\n\t\tif ( fragment.context && fragment.context.has( base ) ) {\n\t\t\t// this is an implicit mapping\n\t\t\tif ( crossedComponentBoundary ) {\n\t\t\t\tif ( shouldWarn ) { warnIfDebug( (\""'\"" + ref + \""' resolved but is ambiguous and will create a mapping to a parent component.\"") ); }\n\t\t\t\treturn context.root.createLink( base, fragment.context.joinKey( base ), base, { implicit: true } ).joinAll( keys );\n\t\t\t}\n\n\t\t\tif ( shouldWarn ) { warnIfDebug( (\""'\"" + ref + \""' resolved but is ambiguous.\"") ); }\n\t\t\treturn fragment.context.joinKey( base ).joinAll( keys );\n\t\t}\n\n\t\tif ( ( fragment.componentParent || ( !fragment.parent && fragment.ractive.component ) ) && !fragment.ractive.isolated ) {\n\t\t\t// ascend through component boundary\n\t\t\tfragment = fragment.componentParent || fragment.ractive.component.parentFragment;\n\t\t\tcrossedComponentBoundary = true;\n\t\t} else {\n\t\t\tfragment = fragment.parent;\n\t\t}\n\t}\n\n\t// if enabled, check the instance for a match\n\tif ( initialFragment.ractive.resolveInstanceMembers ) {\n\t\tvar model$1 = initialFragment.ractive.viewmodel.getRactiveModel();\n\t\tif ( model$1.has( base ) ) {\n\t\t\treturn model$1.joinKey( base ).joinAll( keys );\n\t\t}\n\t}\n\n\tif ( shouldWarn ) {\n\t\twarnIfDebug( (\""'\"" + ref + \""' is ambiguous and did not resolve.\"") );\n\t}\n\n\t// didn't find anything, so go ahead and create the key on the local model\n\treturn context.joinKey( base ).joinAll( keys );\n}\n\nfunction badReference ( key ) {\n\tthrow new Error( (\""An index or key reference (\"" + key + \"") cannot have child properties\"") );\n}\n\nfunction Ractive$get ( keypath, opts ) {\n\tif ( typeof keypath !== 'string' ) { return this.viewmodel.get( true, keypath ); }\n\n\tvar keys = splitKeypath( keypath );\n\tvar key = keys[0];\n\n\tvar model;\n\n\tif ( !this.viewmodel.has( key ) ) {\n\t\t// if this is an inline component, we may need to create\n\t\t// an implicit mapping\n\t\tif ( this.component && !this.isolated ) {\n\t\t\tmodel = resolveReference( this.component.parentFragment, key );\n\n\t\t\tif ( model ) {\n\t\t\t\tthis.viewmodel.map( key, model, { implicit: true } );\n\t\t\t}\n\t\t}\n\t}\n\n\tmodel = this.viewmodel.joinAll( keys );\n\treturn model.get( true, opts );\n}\n\n// This function takes an array, the name of a mutator method, and the\n// arguments to call that mutator method with, and returns an array that\n// maps the old indices to their new indices.\n\n// So if you had something like this...\n//\n//     array = [ 'a', 'b', 'c', 'd' ];\n//     array.push( 'e' );\n//\n// ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices\n// have changed. If you then did this...\n//\n//     array.unshift( 'z' );\n//\n// ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved\n// one higher to make room for the 'z'. If you removed an item, the new index\n// would be -1...\n//\n//     array.splice( 2, 2 );\n//\n// ...this would result in [ 0, 1, -1, -1, 2, 3 ].\n//\n// This information is used to enable fast, non-destructive shuffling of list\n// sections when you do e.g. `ractive.splice( 'items', 2, 2 );\n\nfunction getNewIndices ( length, methodName, args ) {\n\tvar newIndices = [];\n\n\tvar spliceArguments = getSpliceEquivalent( length, methodName, args );\n\n\tif ( !spliceArguments ) {\n\t\treturn null; // TODO support reverse and sort?\n\t}\n\n\tvar balance = ( spliceArguments.length - 2 ) - spliceArguments[1];\n\n\tvar removeStart = Math.min( length, spliceArguments[0] );\n\tvar removeEnd = removeStart + spliceArguments[1];\n\tnewIndices.startIndex = removeStart;\n\n\tvar i;\n\tfor ( i = 0; i < removeStart; i += 1 ) {\n\t\tnewIndices.push( i );\n\t}\n\n\tfor ( ; i < removeEnd; i += 1 ) {\n\t\tnewIndices.push( -1 );\n\t}\n\n\tfor ( ; i < length; i += 1 ) {\n\t\tnewIndices.push( i + balance );\n\t}\n\n\t// there is a net shift for the rest of the array starting with index + balance\n\tif ( balance !== 0 ) {\n\t\tnewIndices.touchedFrom = spliceArguments[0];\n\t} else {\n\t\tnewIndices.touchedFrom = length;\n\t}\n\n\treturn newIndices;\n}\n\n\n// The pop, push, shift an unshift methods can all be represented\n// as an equivalent splice\nfunction getSpliceEquivalent ( length, methodName, args ) {\n\tswitch ( methodName ) {\n\t\tcase 'splice':\n\t\t\tif ( args[0] !== undefined && args[0] < 0 ) {\n\t\t\t\targs[0] = length + Math.max( args[0], -length );\n\t\t\t}\n\n\t\t\tif ( args[0] === undefined ) { args[0] = 0; }\n\n\t\t\twhile ( args.length < 2 ) {\n\t\t\t\targs.push( length - args[0] );\n\t\t\t}\n\n\t\t\tif ( typeof args[1] !== 'number' ) {\n\t\t\t\targs[1] = length - args[0];\n\t\t\t}\n\n\t\t\t// ensure we only remove elements that exist\n\t\t\targs[1] = Math.min( args[1], length - args[0] );\n\n\t\t\treturn args;\n\n\t\tcase 'sort':\n\t\tcase 'reverse':\n\t\t\treturn null;\n\n\t\tcase 'pop':\n\t\t\tif ( length ) {\n\t\t\t\treturn [ length - 1, 1 ];\n\t\t\t}\n\t\t\treturn [ 0, 0 ];\n\n\t\tcase 'push':\n\t\t\treturn [ length, 0 ].concat( args );\n\n\t\tcase 'shift':\n\t\t\treturn [ 0, length ? 1 : 0 ];\n\n\t\tcase 'unshift':\n\t\t\treturn [ 0, 0 ].concat( args );\n\t}\n}\n\nvar arrayProto = Array.prototype;\n\nvar makeArrayMethod = function ( methodName ) {\n\tfunction path ( keypath ) {\n\t\tvar args = [], len = arguments.length - 1;\n\t\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\t\treturn model( this.viewmodel.joinAll( splitKeypath( keypath ) ), args );\n\t}\n\n\tfunction model ( mdl, args ) {\n\t\tvar array = mdl.get();\n\n\t\tif ( !Array.isArray( array ) ) {\n\t\t\tif ( array === undefined ) {\n\t\t\t\tarray = [];\n\t\t\t\tvar result$1 = arrayProto[ methodName ].apply( array, args );\n\t\t\t\tvar promise$1 = runloop.start( this, true ).then( function () { return result$1; } );\n\t\t\t\tmdl.set( array );\n\t\t\t\trunloop.end();\n\t\t\t\treturn promise$1;\n\t\t\t} else {\n\t\t\t\tthrow new Error( (\""shuffle array method \"" + methodName + \"" called on non-array at \"" + (mdl.getKeypath())) );\n\t\t\t}\n\t\t}\n\n\t\tvar newIndices = getNewIndices( array.length, methodName, args );\n\t\tvar result = arrayProto[ methodName ].apply( array, args );\n\n\t\tvar promise = runloop.start( this, true ).then( function () { return result; } );\n\t\tpromise.result = result;\n\n\t\tif ( newIndices ) {\n\t\t\tmdl.shuffle( newIndices );\n\t\t} else {\n\t\t\tmdl.set( result );\n\t\t}\n\n\t\trunloop.end();\n\n\t\treturn promise;\n\t}\n\n\treturn { path: path, model: model };\n};\n\nvar comparators = {};\n\nfunction getComparator ( option ) {\n\tif ( !option ) { return null; } // use existing arrays\n\tif ( option === true ) { return JSON.stringify; }\n\tif ( typeof option === 'function' ) { return option; }\n\n\tif ( typeof option === 'string' ) {\n\t\treturn comparators[ option ] || ( comparators[ option ] = function (thing) { return thing[ option ]; } );\n\t}\n\n\tthrow new Error( 'If supplied, options.compare must be a string, function, or `true`' ); // TODO link to docs\n}\n\nfunction merge$2 ( ractive, model, array, options ) {\n\tvar promise = runloop.start( ractive, true );\n\tvar value = model.get();\n\tif ( array === undefined ) { array = value; }\n\n\tif ( !Array.isArray( value ) || !Array.isArray( array ) ) {\n\t\tthrow new Error( 'You cannot merge an array with a non-array' );\n\t}\n\n\tvar comparator = getComparator( options && options.compare );\n\tmodel.merge( array, comparator );\n\n\trunloop.end();\n\treturn promise;\n}\n\nfunction thisRactive$merge ( keypath, array, options ) {\n\treturn merge$2( this, this.viewmodel.joinAll( splitKeypath( keypath ) ), array, options );\n}\n\nvar updateHook = new Hook( 'update' );\n\nfunction update$3 ( ractive, model ) {\n\t// if the parent is wrapped, the adaptor will need to be updated before\n\t// updating on this keypath\n\tif ( model.parent && model.parent.wrapper ) {\n\t\tmodel.parent.adapt();\n\t}\n\n\tvar promise = runloop.start( ractive, true );\n\n\tmodel.mark();\n\n\t// notify upstream of changes\n\tmodel.notifyUpstream();\n\n\trunloop.end();\n\n\tupdateHook.fire( ractive, model );\n\n\treturn promise;\n}\n\nfunction Ractive$update ( keypath ) {\n\tif ( keypath ) { keypath = splitKeypath( keypath ); }\n\n\treturn update$3( this, keypath ? this.viewmodel.joinAll( keypath ) : this.viewmodel );\n}\n\nvar modelPush = makeArrayMethod( 'push' ).model;\nvar modelPop = makeArrayMethod( 'pop' ).model;\nvar modelShift = makeArrayMethod( 'shift' ).model;\nvar modelUnshift = makeArrayMethod( 'unshift' ).model;\nvar modelSort = makeArrayMethod( 'sort' ).model;\nvar modelSplice = makeArrayMethod( 'splice' ).model;\nvar modelReverse = makeArrayMethod( 'reverse' ).model;\n\n// TODO: at some point perhaps this could support relative * keypaths?\nfunction build$1 ( el, keypath, value ) {\n\tvar sets = [];\n\n\t// set multiple keypaths in one go\n\tif ( isObject( keypath ) ) {\n\t\tfor ( var k in keypath ) {\n\t\t\tif ( keypath.hasOwnProperty( k ) ) {\n\t\t\t\tsets.push( [ findModel( el, k ).model, keypath[k] ] );\n\t\t\t}\n\t\t}\n\n\t}\n\t// set a single keypath\n\telse {\n\t\tsets.push( [ findModel( el, keypath ).model, value ] );\n\t}\n\n\treturn sets;\n}\n\n// get relative keypaths and values\nfunction get$1$1 ( keypath ) {\n\tif ( !keypath ) { return this.proxy.parentFragment.findContext().get( true ); }\n\n\tvar model = resolveReference( this.proxy.parentFragment, keypath );\n\n\treturn model ? model.get( true ) : undefined;\n}\n\nfunction resolve ( path, ractive ) {\n\tvar ref = findModel( this, path );\n\tvar model = ref.model;\n\tvar instance = ref.instance;\n\treturn model ? model.getKeypath( ractive || instance ) : path;\n}\n\nfunction findModel ( el, path ) {\n\tvar frag = el.proxy.parentFragment;\n\n\tif ( typeof path !== 'string' ) {\n\t\treturn { model: frag.findContext(), instance: path };\n\t}\n\n\treturn { model: resolveReference( frag, path ), instance: frag.ractive };\n}\n\n// the usual mutation suspects\nfunction add$2 ( keypath, value ) {\n\tif ( value === undefined ) { value = 1; }\n\tif ( !isNumeric( value ) ) { throw new Error( 'Bad arguments' ); }\n\treturn set$1( this.ractive, build$1( this, keypath, value ).map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar val = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( val ) || !isNumeric( value ) ) { throw new Error( 'Cannot add non-numeric value' ); }\n\t\treturn [ model, value + val ];\n\t}) );\n}\n\nfunction animate$2 ( keypath, value, options ) {\n\tvar model = findModel( this, keypath ).model;\n\treturn animate$1( this.ractive, model, value, options );\n}\n\nfunction link$1 ( source, dest ) {\n\tvar there = findModel( this, source ).model;\n\tvar here = findModel( this, dest ).model;\n\tvar promise = runloop.start( this.ractive, true );\n\there.link( there, source );\n\trunloop.end();\n\treturn promise;\n}\n\nfunction merge$1 ( keypath, array, options ) {\n\treturn merge$2( this.ractive, findModel( this, keypath ).model, array, options );\n}\n\nfunction observe ( keypath, callback, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( isObject( keypath ) ) { options = callback || {}; }\n\toptions.fragment = this.proxy.parentFragment;\n\treturn this.ractive.observe( keypath, callback, options );\n}\n\nfunction observeOnce ( keypath, callback, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( isObject( keypath ) ) { options = callback || {}; }\n\toptions.fragment = this.proxy.parentFragment;\n\treturn this.ractive.observeOnce( keypath, callback, options );\n}\n\nfunction pop ( keypath ) {\n\treturn modelPop( findModel( this, keypath ).model, [] );\n}\n\nfunction push ( keypath ) {\n\tvar values = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];\n\n\treturn modelPush( findModel( this, keypath ).model, values );\n}\n\nfunction raise ( name, event ) {\n\tvar args = [], len = arguments.length - 2;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 2 ];\n\n\tvar element = this.proxy;\n\n\twhile ( element ) {\n\t\tvar events = element.events;\n\t\tfor ( var i = 0; i < events.length; i++ ) {\n\t\t\tvar event$1 = events[i];\n\t\t\tif ( ~event$1.template.n.indexOf( name ) ) {\n\t\t\t\tevent$1.fire( event$1, args );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\telement = element.parent;\n\t}\n}\n\nfunction readLink ( keypath, options ) {\n\treturn this.ractive.readLink( this.resolve( keypath ), options );\n}\n\nfunction reverse ( keypath ) {\n\treturn modelReverse( findModel( this, keypath ).model, [] );\n}\n\nfunction set$2 ( keypath, value ) {\n\treturn set$1( this.ractive, build$1( this, keypath, value ) );\n}\n\nfunction shift ( keypath ) {\n\treturn modelShift( findModel( this, keypath ).model, [] );\n}\n\nfunction splice ( keypath, index, drop ) {\n\tvar add = [], len = arguments.length - 3;\n\twhile ( len-- > 0 ) add[ len ] = arguments[ len + 3 ];\n\n\tadd.unshift( index, drop );\n\treturn modelSplice( findModel( this, keypath ).model, add );\n}\n\nfunction sort ( keypath ) {\n\treturn modelSort( findModel( this, keypath ).model, [] );\n}\n\nfunction subtract ( keypath, value ) {\n\tif ( value === undefined ) { value = 1; }\n\tif ( !isNumeric( value ) ) { throw new Error( 'Bad arguments' ); }\n\treturn set$1( this.ractive, build$1( this, keypath, value ).map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar val = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( val ) || !isNumeric( value ) ) { throw new Error( 'Cannot add non-numeric value' ); }\n\t\treturn [ model, value - val ];\n\t}) );\n}\n\nfunction toggle ( keypath ) {\n\tvar ref = findModel( this, keypath );\n\tvar model = ref.model;\n\treturn set$1( this.ractive, [ [ model, !model.get() ] ] );\n}\n\nfunction unlink$1 ( dest ) {\n\tvar here = findModel( this, dest ).model;\n\tvar promise = runloop.start( this.ractive, true );\n\tif ( here.owner && here.owner._link ) { here.owner.unlink(); }\n\trunloop.end();\n\treturn promise;\n}\n\nfunction unshift ( keypath ) {\n\tvar add = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) add[ len ] = arguments[ len + 1 ];\n\n\treturn modelUnshift( findModel( this, keypath ).model, add );\n}\n\nfunction update$2 ( keypath ) {\n\treturn update$3( this.ractive, findModel( this, keypath ).model );\n}\n\nfunction updateModel ( keypath, cascade ) {\n\tvar ref = findModel( this, keypath );\n\tvar model = ref.model;\n\tvar promise = runloop.start( this.ractive, true );\n\tmodel.updateFromBindings( cascade );\n\trunloop.end();\n\treturn promise;\n}\n\n// two-way binding related helpers\nfunction isBound () {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\treturn !!model;\n}\n\nfunction getBindingPath ( ractive ) {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\tvar instance = ref.instance;\n\tif ( model ) { return model.getKeypath( ractive || instance ); }\n}\n\nfunction getBinding () {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\tif ( model ) { return model.get( true ); }\n}\n\nfunction getBindingModel ( ctx ) {\n\tvar el = ctx.proxy;\n\treturn { model: el.binding && el.binding.model, instance: el.parentFragment.ractive };\n}\n\nfunction setBinding ( value ) {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\treturn set$1( this.ractive, [ [ model, value ] ] );\n}\n\nfunction addHelpers ( obj, element ) {\n\tObject.defineProperties( obj, {\n\t\tproxy: { value: element, writable: true },\n\t\tractive: { value: element.parentFragment.ractive },\n\t\tresolve: { value: resolve },\n\t\tget: { value: get$1$1 },\n\n\t\tadd: { value: add$2 },\n\t\tanimate: { value: animate$2 },\n\t\tlink: { value: link$1 },\n\t\tmerge: { value: merge$1 },\n\t\tobserve: { value: observe },\n\t\tobserveOnce: { value: observeOnce },\n\t\tpop: { value: pop },\n\t\tpush: { value: push },\n\t\traise: { value: raise },\n\t\treadLink: { value: readLink },\n\t\treverse: { value: reverse },\n\t\tset: { value: set$2 },\n\t\tshift: { value: shift },\n\t\tsort: { value: sort },\n\t\tsplice: { value: splice },\n\t\tsubtract: { value: subtract },\n\t\ttoggle: { value: toggle },\n\t\tunlink: { value: unlink$1 },\n\t\tunshift: { value: unshift },\n\t\tupdate: { value: update$2 },\n\t\tupdateModel: { value: updateModel },\n\n\t\tisBound: { value: isBound },\n\t\tgetBindingPath: { value: getBindingPath },\n\t\tgetBinding: { value: getBinding },\n\t\tsetBinding: { value: setBinding },\n\n\t\tdecorators: {\n\t\t\tget: function get$1 () {\n\t\t\t\tvar items = {};\n\t\t\t\telement.decorators.forEach( function (d) { return items[ d.name ] = d.intermediary; } );\n\t\t\t\treturn items;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn obj;\n}\n\nvar query = doc && doc.querySelector;\n\nvar staticInfo = function( node ) {\n\tif ( typeof node === 'string' && query ) {\n\t\tnode = query.call( document, node );\n\t}\n\n\tif ( !node || !node._ractive ) { return undefined; }\n\n\tvar storage = node._ractive;\n\n\treturn addHelpers( {}, storage.proxy );\n};\n\nfunction getNodeInfo( node, options ) {\n\tif ( typeof node === 'string' ) {\n\t\tnode = this.find( node, options );\n\t}\n\n\treturn staticInfo( node );\n}\n\nvar insertHook = new Hook( 'insert' );\n\nfunction Ractive$insert ( target, anchor ) {\n\tif ( !this.fragment.rendered ) {\n\t\t// TODO create, and link to, documentation explaining this\n\t\tthrow new Error( 'The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.' );\n\t}\n\n\ttarget = getElement( target );\n\tanchor = getElement( anchor ) || null;\n\n\tif ( !target ) {\n\t\tthrow new Error( 'You must specify a valid target to insert into' );\n\t}\n\n\ttarget.insertBefore( this.detach(), anchor );\n\tthis.el = target;\n\n\t( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( this );\n\tthis.isDetached = false;\n\n\tfireInsertHook( this );\n}\n\nfunction fireInsertHook( ractive ) {\n\tinsertHook.fire( ractive );\n\n\tractive.findAllComponents('*').forEach( function (child) {\n\t\tfireInsertHook( child.instance );\n\t});\n}\n\nfunction link$2( there, here, options ) {\n\tif ( here === there || (there + '.').indexOf( here + '.' ) === 0 || (here + '.').indexOf( there + '.' ) === 0 ) {\n\t\tthrow new Error( 'A keypath cannot be linked to itself.' );\n\t}\n\n\tvar promise = runloop.start();\n\tvar model;\n\tvar target = ( options && options.ractive ) || this;\n\n\t// may need to allow a mapping to resolve implicitly\n\tvar sourcePath = splitKeypath( there );\n\tif ( !target.viewmodel.has( sourcePath[0] ) && target.component ) {\n\t\tmodel = resolveReference( target.component.parentFragment, sourcePath[0] );\n\t\tmodel = model.joinAll( sourcePath.slice( 1 ) );\n\t}\n\n\tthis.viewmodel.joinAll( splitKeypath( here ), { lastLink: false } ).link( model || target.viewmodel.joinAll( sourcePath ), there );\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nvar Observer = function Observer ( ractive, model, callback, options ) {\n\tthis.context = options.context || ractive;\n\tthis.callback = callback;\n\tthis.ractive = ractive;\n\n\tif ( model ) { this.resolved( model ); }\n\n\tthis.options = options;\n\n\tif ( typeof options.old === 'function' ) {\n\t\tthis.oldContext = Object.create( ractive );\n\t\tthis.old = options.old;\n\t} else {\n\t\tthis.old = old;\n\t}\n\n\tif ( options.init !== false ) {\n\t\tthis.dirty = true;\n\t\tthis.dispatch();\n\t} else {\n\t\tthis.oldValue = this.old.call( this.oldContext, undefined, this.newValue );\n\t}\n\n\tthis.dirty = false;\n};\n\nObserver.prototype.cancel = function cancel () {\n\tthis.cancelled = true;\n\tif ( this.model ) {\n\t\tthis.model.unregister( this );\n\t} else {\n\t\tthis.resolver.unbind();\n\t}\n\tremoveFromArray( this.ractive._observers, this );\n};\n\nObserver.prototype.dispatch = function dispatch () {\n\tif ( !this.cancelled ) {\n\t\tthis.callback.call( this.context, this.newValue, this.oldValue, this.keypath );\n\t\tthis.oldValue = this.old.call( this.oldContext, this.oldValue, this.model ? this.model.get() : this.newValue );\n\t\tthis.dirty = false;\n\t}\n};\n\nObserver.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty ) {\n\t\tvar newValue = this.model.get();\n\t\tif ( isEqual( newValue, this.oldValue ) ) { return; }\n\n\t\tthis.newValue = newValue;\n\n\t\tif ( this.options.strict && this.newValue === this.oldValue ) { return; }\n\n\t\trunloop.addObserver( this, this.options.defer );\n\t\tthis.dirty = true;\n\n\t\tif ( this.options.once ) { runloop.scheduleTask( function () { return this$1.cancel(); } ); }\n\t}\n};\n\nObserver.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tnext = rebindMatch( this.keypath, next, previous );\n\t// TODO: set up a resolver if next is undefined?\n\tif ( next === this.model ) { return false; }\n\n\tif ( this.model ) { this.model.unregister( this ); }\n\tif ( next ) { next.addShuffleTask( function () { return this$1.resolved( next ); } ); }\n};\n\nObserver.prototype.resolved = function resolved ( model ) {\n\tthis.model = model;\n\tthis.keypath = model.getKeypath( this.ractive );\n\n\tthis.oldValue = undefined;\n\tthis.newValue = model.get();\n\n\tmodel.register( this );\n};\n\nfunction old ( previous, next ) {\n\treturn next;\n}\n\nvar star$1 = /\\*+/g;\n\nvar PatternObserver = function PatternObserver ( ractive, baseModel, keys, callback, options ) {\n\tvar this$1 = this;\n\n\tthis.context = options.context || ractive;\n\tthis.ractive = ractive;\n\tthis.baseModel = baseModel;\n\tthis.keys = keys;\n\tthis.callback = callback;\n\n\tvar pattern = keys.join( '\\\\.' ).replace( star$1, '(.+)' );\n\tvar baseKeypath = this.baseKeypath = baseModel.getKeypath( ractive );\n\tthis.pattern = new RegExp( (\""^\"" + (baseKeypath ? baseKeypath + '\\\\.' : '') + pattern + \""$\"") );\n\tthis.recursive = keys.length === 1 && keys[0] === '**';\n\tif ( this.recursive ) { this.keys = [ '*' ]; }\n\n\tthis.oldValues = {};\n\tthis.newValues = {};\n\n\tthis.defer = options.defer;\n\tthis.once = options.once;\n\tthis.strict = options.strict;\n\n\tthis.dirty = false;\n\tthis.changed = [];\n\tthis.partial = false;\n\tthis.links = options.links;\n\n\tvar models = baseModel.findMatches( this.keys );\n\n\tmodels.forEach( function (model) {\n\t\tthis$1.newValues[ model.getKeypath( this$1.ractive ) ] = model.get();\n\t});\n\n\tif ( options.init !== false ) {\n\t\tthis.dispatch();\n\t} else {\n\t\tthis.oldValues = this.newValues;\n\t}\n\n\tbaseModel.registerPatternObserver( this );\n};\n\nPatternObserver.prototype.cancel = function cancel () {\n\tthis.baseModel.unregisterPatternObserver( this );\n\tremoveFromArray( this.ractive._observers, this );\n};\n\nPatternObserver.prototype.dispatch = function dispatch () {\n\t\tvar this$1 = this;\n\n\tvar newValues = this.newValues;\n\tthis.newValues = {};\n\tObject.keys( newValues ).forEach( function (keypath) {\n\t\tif ( this$1.newKeys && !this$1.newKeys[ keypath ] ) { return; }\n\n\t\tvar newValue = newValues[ keypath ];\n\t\tvar oldValue = this$1.oldValues[ keypath ];\n\n\t\tif ( this$1.strict && newValue === oldValue ) { return; }\n\t\tif ( isEqual( newValue, oldValue ) ) { return; }\n\n\t\tvar args = [ newValue, oldValue, keypath ];\n\t\tif ( keypath ) {\n\t\t\tvar wildcards = this$1.pattern.exec( keypath );\n\t\t\tif ( wildcards ) {\n\t\t\t\targs = args.concat( wildcards.slice( 1 ) );\n\t\t\t}\n\t\t}\n\n\t\tthis$1.callback.apply( this$1.context, args );\n\t});\n\n\tif ( this.partial ) {\n\t\tfor ( var k in newValues ) {\n\t\t\tthis$1.oldValues[k] = newValues[k];\n\t\t}\n\t} else {\n\t\tthis.oldValues = newValues;\n\t}\n\n\tthis.newKeys = null;\n\tthis.dirty = false;\n};\n\nPatternObserver.prototype.notify = function notify ( key ) {\n\tthis.changed.push( key );\n};\n\nPatternObserver.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tif ( !Array.isArray( this.baseModel.value ) ) { return; }\n\n\tvar base = this.baseKeypath = this.baseModel.getKeypath( this.ractive );\n\tvar max = this.baseModel.value.length;\n\tvar suffix = this.keys.length > 1 ? '.' + this.keys.slice( 1 ).join( '.' ) : '';\n\n\tthis.newKeys = {};\n\tfor ( var i = 0; i < newIndices.length; i++ ) {\n\t\tif ( newIndices[ i ] === -1 || newIndices[ i ] === i ) { continue; }\n\t\tthis$1.newKeys[ (base + \"".\"" + i + suffix) ] = true;\n\t}\n\n\tfor ( var i$1 = newIndices.touchedFrom; i$1 < max; i$1++ ) {\n\t\tthis$1.newKeys[ (base + \"".\"" + i$1 + suffix) ] = true;\n\t}\n};\n\nPatternObserver.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty || this.changed.length ) {\n\t\tif ( !this.dirty ) { this.newValues = {}; }\n\n\t\tif ( !this.changed.length ) {\n\t\t\tthis.baseModel.findMatches( this.keys ).forEach( function (model) {\n\t\t\t\tvar keypath = model.getKeypath( this$1.ractive );\n\t\t\t\tthis$1.newValues[ keypath ] = model.get();\n\t\t\t});\n\t\t\tthis.partial = false;\n\t\t} else {\n\t\t\tvar count = 0;\n\n\t\t\tif ( this.recursive ) {\n\t\t\t\tthis.changed.forEach( function (keys) {\n\t\t\t\t\tvar model = this$1.baseModel.joinAll( keys );\n\t\t\t\t\tif ( model.isLink && !this$1.links ) { return; }\n\t\t\t\t\tcount++;\n\t\t\t\t\tthis$1.newValues[ model.getKeypath( this$1.ractive ) ] = model.get();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar ok = this.baseModel.isRoot ?\n\t\t\t\t\tthis.changed.map( function (keys) { return keys.map( escapeKey ).join( '.' ); } ) :\n\t\t\t\t\tthis.changed.map( function (keys) { return this$1.baseKeypath + '.' + keys.map( escapeKey ).join( '.' ); } );\n\n\t\t\t\tthis.baseModel.findMatches( this.keys ).forEach( function (model) {\n\t\t\t\t\tvar keypath = model.getKeypath( this$1.ractive );\n\t\t\t\t\tvar check = function (k) {\n\t\t\t\t\t\treturn ( k.indexOf( keypath ) === 0 && ( k.length === keypath.length || k[ keypath.length ] === '.' ) ) ||\n\t\t\t\t\t\t\t( keypath.indexOf( k ) === 0 && ( k.length === keypath.length || keypath[ k.length ] === '.' ) );\n\n\t\t\t\t\t};\n\n\t\t\t\t\t// is this model on a changed keypath?\n\t\t\t\t\tif ( ok.filter( check ).length ) {\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t\tthis$1.newValues[ keypath ] = model.get();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// no valid change triggered, so bail to avoid breakage\n\t\t\tif ( !count ) { return; }\n\n\t\t\tthis.partial = true;\n\t\t}\n\n\t\trunloop.addObserver( this, this.defer );\n\t\tthis.dirty = true;\n\t\tthis.changed.length = 0;\n\n\t\tif ( this.once ) { this.cancel(); }\n\t}\n};\n\nfunction negativeOne () {\n\treturn -1;\n}\n\nvar ArrayObserver = function ArrayObserver ( ractive, model, callback, options ) {\n\tthis.ractive = ractive;\n\tthis.model = model;\n\tthis.keypath = model.getKeypath();\n\tthis.callback = callback;\n\tthis.options = options;\n\n\tthis.pending = null;\n\n\tmodel.register( this );\n\n\tif ( options.init !== false ) {\n\t\tthis.sliced = [];\n\t\tthis.shuffle([]);\n\t\tthis.dispatch();\n\t} else {\n\t\tthis.sliced = this.slice();\n\t}\n};\n\nArrayObserver.prototype.cancel = function cancel () {\n\tthis.model.unregister( this );\n\tremoveFromArray( this.ractive._observers, this );\n};\n\nArrayObserver.prototype.dispatch = function dispatch () {\n\tthis.callback( this.pending );\n\tthis.pending = null;\n\tif ( this.options.once ) { this.cancel(); }\n};\n\nArrayObserver.prototype.handleChange = function handleChange () {\n\tif ( this.pending ) {\n\t\t// post-shuffle\n\t\trunloop.addObserver( this, this.options.defer );\n\t} else {\n\t\t// entire array changed\n\t\tthis.shuffle( this.sliced.map( negativeOne ) );\n\t\tthis.handleChange();\n\t}\n};\n\nArrayObserver.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tvar newValue = this.slice();\n\n\tvar inserted = [];\n\tvar deleted = [];\n\tvar start;\n\n\tvar hadIndex = {};\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\thadIndex[ newIndex ] = true;\n\n\t\tif ( newIndex !== oldIndex && start === undefined ) {\n\t\t\tstart = oldIndex;\n\t\t}\n\n\t\tif ( newIndex === -1 ) {\n\t\t\tdeleted.push( this$1.sliced[ oldIndex ] );\n\t\t}\n\t});\n\n\tif ( start === undefined ) { start = newIndices.length; }\n\n\tvar len = newValue.length;\n\tfor ( var i = 0; i < len; i += 1 ) {\n\t\tif ( !hadIndex[i] ) { inserted.push( newValue[i] ); }\n\t}\n\n\tthis.pending = { inserted: inserted, deleted: deleted, start: start };\n\tthis.sliced = newValue;\n};\n\nArrayObserver.prototype.slice = function slice () {\n\tvar value = this.model.get();\n\treturn Array.isArray( value ) ? value.slice() : [];\n};\n\nfunction observe$1 ( keypath, callback, options ) {\n\tvar this$1 = this;\n\n\tvar observers = [];\n\tvar map;\n\tvar opts;\n\n\tif ( isObject( keypath ) ) {\n\t\tmap = keypath;\n\t\topts = callback || {};\n\t} else {\n\t\tif ( typeof keypath === 'function' ) {\n\t\t\tmap = { '': keypath };\n\t\t\topts = callback || {};\n\t\t} else {\n\t\t\tmap = {};\n\t\t\tmap[ keypath ] = callback;\n\t\t\topts = options || {};\n\t\t}\n\t}\n\n\tvar silent = false;\n\tObject.keys( map ).forEach( function (keypath) {\n\t\tvar callback = map[ keypath ];\n\t\tvar caller = function () {\n\t\t\tvar args = [], len = arguments.length;\n\t\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\t\tif ( silent ) { return; }\n\t\t\treturn callback.apply( this, args );\n\t\t};\n\n\t\tvar keypaths = keypath.split( ' ' );\n\t\tif ( keypaths.length > 1 ) { keypaths = keypaths.filter( function (k) { return k; } ); }\n\n\t\tkeypaths.forEach( function (keypath) {\n\t\t\tvar observer = createObserver( this$1, keypath, caller, opts );\n\t\t\tif ( observer ) { observers.push( observer ); }\n\t\t});\n\t});\n\n\t// add observers to the Ractive instance, so they can be\n\t// cancelled on ractive.teardown()\n\tthis._observers.push.apply( this._observers, observers );\n\n\treturn {\n\t\tcancel: function () { return observers.forEach( function (o) { return o.cancel(); } ); },\n\t\tisSilenced: function () { return silent; },\n\t\tsilence: function () { return silent = true; },\n\t\tresume: function () { return silent = false; }\n\t};\n}\n\nfunction createObserver ( ractive, keypath, callback, options ) {\n\tvar keys = splitKeypath( keypath );\n\tvar wildcardIndex = keys.indexOf( '*' );\n\tif ( !~wildcardIndex ) { wildcardIndex = keys.indexOf( '**' ); }\n\n\toptions.fragment = options.fragment || ractive.fragment;\n\n\tvar model;\n\tif ( !options.fragment ) {\n\t\tmodel = ractive.viewmodel.joinKey( keys[0] );\n\t} else {\n\t\t// .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .\n\t\tif ( ~keys[0].indexOf( '.*' ) ) {\n\t\t\tmodel = options.fragment.findContext();\n\t\t\twildcardIndex = 0;\n\t\t\tkeys[0] = keys[0].slice( 1 );\n\t\t} else {\n\t\t\tmodel = wildcardIndex === 0 ? options.fragment.findContext() : resolveReference( options.fragment, keys[0] );\n\t\t}\n\t}\n\n\t// the model may not exist key\n\tif ( !model ) { model = ractive.viewmodel.joinKey( keys[0] ); }\n\n\tif ( !~wildcardIndex ) {\n\t\tmodel = model.joinAll( keys.slice( 1 ) );\n\t\tif ( options.array ) {\n\t\t\treturn new ArrayObserver( ractive, model, callback, options );\n\t\t} else {\n\t\t\treturn new Observer( ractive, model, callback, options );\n\t\t}\n\t} else {\n\t\tvar double = keys.indexOf( '**' );\n\t\tif ( ~double ) {\n\t\t\tif ( double + 1 !== keys.length || ~keys.indexOf( '*' ) ) {\n\t\t\t\twarnOnceIfDebug( \""Recursive observers may only specify a single '**' at the end of the path.\"" );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tmodel = model.joinAll( keys.slice( 1, wildcardIndex ) );\n\n\t\treturn new PatternObserver( ractive, model, keys.slice( wildcardIndex ), callback, options );\n\t}\n}\n\nvar onceOptions = { init: false, once: true };\n\nfunction observeOnce$1 ( keypath, callback, options ) {\n\tif ( isObject( keypath ) || typeof keypath === 'function' ) {\n\t\toptions = Object.assign( callback || {}, onceOptions );\n\t\treturn this.observe( keypath, options );\n\t}\n\n\toptions = Object.assign( options || {}, onceOptions );\n\treturn this.observe( keypath, callback, options );\n}\n\nvar trim = function (str) { return str.trim(); };\n\nvar notEmptyString = function (str) { return str !== ''; };\n\nfunction Ractive$off ( eventName, callback ) {\n\tvar this$1 = this;\n\n\t// if no event is specified, remove _all_ event listeners\n\tif ( !eventName ) {\n\t\tthis._subs = {};\n\t} else {\n\t\t// Handle multiple space-separated event names\n\t\tvar eventNames = eventName.split( ' ' ).map( trim ).filter( notEmptyString );\n\n\t\teventNames.forEach( function (event) {\n\t\t\tvar subs = this$1._subs[ event ];\n\t\t\t// if given a specific callback to remove, remove only it\n\t\t\tif ( subs && callback ) {\n\t\t\t\t// flag this callback as off so that any in-flight firings don't call\n\t\t\t\t// a cancelled handler - this is _slightly_ hacky\n\t\t\t\t( callback._proxy || callback ).off = true;\n\t\t\t\tremoveFromArray( subs, callback._proxy || callback );\n\t\t\t\tif ( event.indexOf( '.' ) ) { this$1._nsSubs--; }\n\t\t\t}\n\n\t\t\t// otherwise, remove all listeners for this event\n\t\t\telse if ( subs ) {\n\t\t\t\tif ( event.indexOf( '.' ) ) { this$1._nsSubs -= subs.length; }\n\t\t\t\tsubs.length = 0;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn this;\n}\n\nfunction Ractive$on ( eventName, callback ) {\n\tvar this$1 = this;\n\n\t// eventName may already be a map\n\tvar map = typeof eventName === 'object' ? eventName : {};\n\t// or it may be a string along with a callback\n\tif ( typeof eventName === 'string' ) { map[ eventName ] = callback; }\n\n\tvar silent = false;\n\tvar events = [];\n\n\tvar loop = function ( k ) {\n\t\tvar callback$1 = map[k];\n\t\tvar caller = function () {\n\t\t\tvar args = [], len = arguments.length;\n\t\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\t\tif ( !silent ) { return callback$1.apply( this, args ); }\n\t\t};\n\t\tcallback$1._proxy = caller;\n\n\t\tif ( map.hasOwnProperty( k ) ) {\n\t\t\tvar names = k.split( ' ' ).map( trim ).filter( notEmptyString );\n\t\t\tnames.forEach( function (n) {\n\t\t\t\t( this$1._subs[ n ] || ( this$1._subs[ n ] = [] ) ).push( caller );\n\t\t\t\tif ( n.indexOf( '.' ) ) { this$1._nsSubs++; }\n\t\t\t\tevents.push( [ n, caller ] );\n\t\t\t});\n\t\t}\n\t};\n\n\tfor ( var k in map ) loop( k );\n\n\treturn {\n\t\tcancel: function () { return events.forEach( function (e) { return this$1.off( e[0], e[1] ); } ); },\n\t\tisSilenced: function () { return silent; },\n\t\tsilence: function () { return silent = true; },\n\t\tresume: function () { return silent = false; }\n\t};\n}\n\nfunction Ractive$once ( eventName, handler ) {\n\tvar listener = this.on( eventName, function () {\n\t\thandler.apply( this, arguments );\n\t\tlistener.cancel();\n\t});\n\n\t// so we can still do listener.cancel() manually\n\treturn listener;\n}\n\nvar pop$1 = makeArrayMethod( 'pop' ).path;\n\nvar push$1 = makeArrayMethod( 'push' ).path;\n\nfunction readLink$1 ( keypath, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tvar path = splitKeypath( keypath );\n\n\tif ( this.viewmodel.has( path[0] ) ) {\n\t\tvar model = this.viewmodel.joinAll( path );\n\n\t\tif ( !model.isLink ) { return; }\n\n\t\twhile ( ( model = model.target ) && options.canonical !== false ) {\n\t\t\tif ( !model.isLink ) { break; }\n\t\t}\n\n\t\tif ( model ) { return { ractive: model.root.ractive, keypath: model.getKeypath() }; }\n\t}\n}\n\nvar PREFIX = '/* Ractive.js component styles */';\n\n// Holds current definitions of styles.\nvar styleDefinitions = [];\n\n// Flag to tell if we need to update the CSS\nvar isDirty = false;\n\n// These only make sense on the browser. See additional setup below.\nvar styleElement = null;\nvar useCssText = null;\n\nfunction addCSS( styleDefinition ) {\n\tstyleDefinitions.push( styleDefinition );\n\tisDirty = true;\n}\n\nfunction applyCSS() {\n\n\t// Apply only seems to make sense when we're in the DOM. Server-side renders\n\t// can call toCSS to get the updated CSS.\n\tif ( !doc || !isDirty ) { return; }\n\n\tif ( useCssText ) {\n\t\tstyleElement.styleSheet.cssText = getCSS( null );\n\t} else {\n\t\tstyleElement.innerHTML = getCSS( null );\n\t}\n\n\tisDirty = false;\n}\n\nfunction getCSS( cssIds ) {\n\n\tvar filteredStyleDefinitions = cssIds ? styleDefinitions.filter( function (style) { return ~cssIds.indexOf( style.id ); } ) : styleDefinitions;\n\n\treturn filteredStyleDefinitions.reduce( function ( styles, style ) { return (styles + \""\\n\\n/* {\"" + (style.id) + \""} */\\n\"" + (style.styles)); }, PREFIX );\n\n}\n\n// If we're on the browser, additional setup needed.\nif ( doc && ( !styleElement || !styleElement.parentNode ) ) {\n\n\tstyleElement = doc.createElement( 'style' );\n\tstyleElement.type = 'text/css';\n\n\tdoc.getElementsByTagName( 'head' )[ 0 ].appendChild( styleElement );\n\n\tuseCssText = !!styleElement.styleSheet;\n}\n\nfunction fillGaps ( target ) {\n\tvar sources = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n\n\tfor (var i = 0; i < sources.length; i++){\n\t\tvar source = sources[i];\n\t\tfor ( var key in source ) {\n\t\t\t// Source can be a prototype-less object.\n\t\t\tif ( key in target || !Object.prototype.hasOwnProperty.call( source, key ) ) { continue; }\n\t\t\ttarget[ key ] = source[ key ];\n\t\t}\n\t}\n\n\treturn target;\n}\n\nfunction toPairs ( obj ) {\n\tif ( obj === void 0 ) obj = {};\n\n\tvar pairs = [];\n\tfor ( var key in obj ) {\n\t\t// Source can be a prototype-less object.\n\t\tif ( !Object.prototype.hasOwnProperty.call( obj, key ) ) { continue; }\n\t\tpairs.push( [ key, obj[ key ] ] );\n\t}\n\treturn pairs;\n}\n\nvar adaptConfigurator = {\n\textend: function ( Parent, proto, options ) {\n\t\tproto.adapt = combine( proto.adapt, ensureArray( options.adapt ) );\n\t},\n\n\tinit: function init () {}\n};\n\nvar remove$1 = /\\/\\*(?:[\\s\\S]*?)\\*\\//g;\nvar escape = /url\\(\\s*(['\""])(?:\\\\[\\s\\S]|(?!\\1).)*\\1\\s*\\)|url\\((?:\\\\[\\s\\S]|[^)])*\\)|(['\""])(?:\\\\[\\s\\S]|(?!\\2).)*\\2/gi;\nvar value = /\\0(\\d+)/g;\n\n// Removes comments and strings from the given CSS to make it easier to parse.\n// Callback receives the cleaned CSS and a function which can be used to put\n// the removed strings back in place after parsing is done.\nvar cleanCss = function ( css, callback ) {\n\tvar values = [];\n\tvar reconstruct = function (css) { return css.replace( value, function ( match, n ) { return values[ n ]; } ); };\n\tcss = css.replace( escape, function (match) { return (\""\\u0000\"" + (values.push( match ) - 1)); }).replace( remove$1, '' );\n\n\treturn callback( css, reconstruct );\n};\n\nvar selectorsPattern = /(?:^|\\})?\\s*([^\\{\\}]+)\\s*\\{/g;\nvar commentsPattern = /\\/\\*[\\s\\S]*?\\*\\//g;\nvar selectorUnitPattern = /((?:(?:\\[[^\\]]+\\])|(?:[^\\s\\+\\>~:]))+)((?:::?[^\\s\\+\\>\\~\\(:]+(?:\\([^\\)]+\\))?)*\\s*[\\s\\+\\>\\~]?)\\s*/g;\nvar excludePattern = /^(?:@|\\d+%)/;\nvar dataRvcGuidPattern = /\\[data-ractive-css~=\""\\{[a-z0-9-]+\\}\""]/g;\n\nfunction trim$1 ( str ) {\n\treturn str.trim();\n}\n\nfunction extractString ( unit ) {\n\treturn unit.str;\n}\n\nfunction transformSelector ( selector, parent ) {\n\tvar selectorUnits = [];\n\tvar match;\n\n\tcleanCss( selector, function ( selector, reconstruct ) {\n\t\twhile ( match = selectorUnitPattern.exec( selector ) ) {\n\t\t\tselectorUnits.push({\n\t\t\t\tstr: reconstruct( match[0] ),\n\t\t\t\tbase: reconstruct( match[1] ),\n\t\t\t\tmodifiers: reconstruct( match[2] )\n\t\t\t});\n\t\t}\n\t});\n\n\t// For each simple selector within the selector, we need to create a version\n\t// that a) combines with the id, and b) is inside the id\n\tvar base = selectorUnits.map( extractString );\n\n\tvar transformed = [];\n\tvar i = selectorUnits.length;\n\n\twhile ( i-- ) {\n\t\tvar appended = base.slice();\n\n\t\t// Pseudo-selectors should go after the attribute selector\n\t\tvar unit = selectorUnits[i];\n\t\tappended[i] = unit.base + parent + unit.modifiers || '';\n\n\t\tvar prepended = base.slice();\n\t\tprepended[i] = parent + ' ' + prepended[i];\n\n\t\ttransformed.push( appended.join( ' ' ), prepended.join( ' ' ) );\n\t}\n\n\treturn transformed.join( ', ' );\n}\n\nfunction transformCss ( css, id ) {\n\tvar dataAttr = \""[data-ractive-css~=\\\""{\"" + id + \""}\\\""]\"";\n\n\tvar transformed;\n\n\tif ( dataRvcGuidPattern.test( css ) ) {\n\t\ttransformed = css.replace( dataRvcGuidPattern, dataAttr );\n\t} else {\n\t\ttransformed = css\n\t\t.replace( commentsPattern, '' )\n\t\t.replace( selectorsPattern, function ( match, $1 ) {\n\t\t\t// don't transform at-rules and keyframe declarations\n\t\t\tif ( excludePattern.test( $1 ) ) { return match; }\n\n\t\t\tvar selectors = $1.split( ',' ).map( trim$1 );\n\t\t\tvar transformed = selectors\n\t\t\t\t.map( function (selector) { return transformSelector( selector, dataAttr ); } )\n\t\t\t\t.join( ', ' ) + ' ';\n\n\t\t\treturn match.replace( $1, transformed );\n\t\t});\n\t}\n\n\treturn transformed;\n}\n\nfunction s4() {\n\treturn Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n}\n\nfunction uuid() {\n\treturn s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n\nvar cssConfigurator = {\n\tname: 'css',\n\n\t// Called when creating a new component definition\n\textend: function ( Parent, proto, options ) {\n\t\tif ( !options.css ) { return; }\n\n\t\tvar id = options.cssId || uuid();\n\t\tvar styles = options.noCssTransform ? options.css : transformCss( options.css, id );\n\n\t\tproto.cssId = id;\n\n\t\taddCSS( { id: id, styles: styles } );\n\n\t},\n\n\t// Called when creating a new component instance\n\tinit: function ( Parent, target, options ) {\n\t\tif ( !options.css ) { return; }\n\n\t\twarnIfDebug( \""\\nThe css option is currently not supported on a per-instance basis and will be discarded. Instead, we recommend instantiating from a component definition with a css option.\\n\\nconst Component = Ractive.extend({\\n\\t...\\n\\tcss: '/* your css */',\\n\\t...\\n});\\n\\nconst componentInstance = new Component({ ... })\\n\\t\\t\"" );\n\t}\n\n};\n\nfunction validate ( data ) {\n\t// Warn if userOptions.data is a non-POJO\n\tif ( data && data.constructor !== Object ) {\n\t\tif ( typeof data === 'function' ) {\n\t\t\t// TODO do we need to support this in the new Ractive() case?\n\t\t} else if ( typeof data !== 'object' ) {\n\t\t\tfatal( (\""data option must be an object or a function, `\"" + data + \""` is not valid\"") );\n\t\t} else {\n\t\t\twarnIfDebug( 'If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged' );\n\t\t}\n\t}\n}\n\nvar dataConfigurator = {\n\tname: 'data',\n\n\textend: function ( Parent, proto, options ) {\n\t\tvar key;\n\t\tvar value;\n\n\t\t// check for non-primitives, which could cause mutation-related bugs\n\t\tif ( options.data && isObject( options.data ) ) {\n\t\t\tfor ( key in options.data ) {\n\t\t\t\tvalue = options.data[ key ];\n\n\t\t\t\tif ( value && typeof value === 'object' ) {\n\t\t\t\t\tif ( isObject( value ) || Array.isArray( value ) ) {\n\t\t\t\t\t\twarnIfDebug( \""Passing a `data` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\\n\\n  // this...\\n  data: function () {\\n    return {\\n      myObject: {}\\n    };\\n  })\\n\\n  // instead of this:\\n  data: {\\n    myObject: {}\\n  }\"" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tproto.data = combine$1( proto.data, options.data );\n\t},\n\n\tinit: function ( Parent, ractive, options ) {\n\t\tvar result = combine$1( Parent.prototype.data, options.data );\n\n\t\tif ( typeof result === 'function' ) { result = result.call( ractive ); }\n\n\t\t// bind functions to the ractive instance at the top level,\n\t\t// unless it's a non-POJO (in which case alarm bells should ring)\n\t\tif ( result && result.constructor === Object ) {\n\t\t\tfor ( var prop in result ) {\n\t\t\t\tif ( typeof result[ prop ] === 'function' ) {\n\t\t\t\t\tvar value = result[ prop ];\n\t\t\t\t\tresult[ prop ] = bind$2( value, ractive );\n\t\t\t\t\tresult[ prop ]._r_unbound = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result || {};\n\t},\n\n\treset: function reset ( ractive ) {\n\t\tvar result = this.init( ractive.constructor, ractive, ractive.viewmodel );\n\t\tractive.viewmodel.root.set( result );\n\t\treturn true;\n\t}\n};\n\nfunction combine$1 ( parentValue, childValue ) {\n\tvalidate( childValue );\n\n\tvar parentIsFn = typeof parentValue === 'function';\n\tvar childIsFn = typeof childValue === 'function';\n\n\t// Very important, otherwise child instance can become\n\t// the default data object on Ractive or a component.\n\t// then ractive.set() ends up setting on the prototype!\n\tif ( !childValue && !parentIsFn ) {\n\t\tchildValue = {};\n\t}\n\n\t// Fast path, where we just need to copy properties from\n\t// parent to child\n\tif ( !parentIsFn && !childIsFn ) {\n\t\treturn fromProperties( childValue, parentValue );\n\t}\n\n\treturn function () {\n\t\tvar child = childIsFn ? callDataFunction( childValue, this ) : childValue;\n\t\tvar parent = parentIsFn ? callDataFunction( parentValue, this ) : parentValue;\n\n\t\treturn fromProperties( child, parent );\n\t};\n}\n\nfunction callDataFunction ( fn, context ) {\n\tvar data = fn.call( context );\n\n\tif ( !data ) { return; }\n\n\tif ( typeof data !== 'object' ) {\n\t\tfatal( 'Data function must return an object' );\n\t}\n\n\tif ( data.constructor !== Object ) {\n\t\twarnOnceIfDebug( 'Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged' );\n\t}\n\n\treturn data;\n}\n\nfunction fromProperties ( primary, secondary ) {\n\tif ( primary && secondary ) {\n\t\tfor ( var key in secondary ) {\n\t\t\tif ( !( key in primary ) ) {\n\t\t\t\tprimary[ key ] = secondary[ key ];\n\t\t\t}\n\t\t}\n\n\t\treturn primary;\n\t}\n\n\treturn primary || secondary;\n}\n\nvar TEMPLATE_VERSION = 4;\n\nvar pattern = /\\$\\{([^\\}]+)\\}/g;\n\nfunction fromExpression ( body, length ) {\n\tif ( length === void 0 ) length = 0;\n\n\tvar args = new Array( length );\n\n\twhile ( length-- ) {\n\t\targs[length] = \""_\"" + length;\n\t}\n\n\t// Functions created directly with new Function() look like this:\n\t//     function anonymous (_0 /**/) { return _0*2 }\n\t//\n\t// With this workaround, we get a little more compact:\n\t//     function (_0){return _0*2}\n\treturn new Function( [], (\""return function (\"" + (args.join(',')) + \""){return(\"" + body + \"");};\"") )();\n}\n\nfunction fromComputationString ( str, bindTo ) {\n\tvar hasThis;\n\n\tvar functionBody = 'return (' + str.replace( pattern, function ( match, keypath ) {\n\t\thasThis = true;\n\t\treturn (\""__ractive.get(\\\""\"" + keypath + \""\\\"")\"");\n\t}) + ');';\n\n\tif ( hasThis ) { functionBody = \""var __ractive = this; \"" + functionBody; }\n\tvar fn = new Function( functionBody );\n\treturn hasThis ? fn.bind( bindTo ) : fn;\n}\n\nvar functions = Object.create( null );\n\nfunction getFunction ( str, i ) {\n\tif ( functions[ str ] ) { return functions[ str ]; }\n\treturn functions[ str ] = createFunction( str, i );\n}\n\nfunction addFunctions( template ) {\n\tif ( !template ) { return; }\n\n\tvar exp = template.e;\n\n\tif ( !exp ) { return; }\n\n\tObject.keys( exp ).forEach( function ( str ) {\n\t\tif ( functions[ str ] ) { return; }\n\t\tfunctions[ str ] = exp[ str ];\n\t});\n}\n\nvar leadingWhitespace = /^\\s+/;\n\nvar ParseError = function ( message ) {\n\tthis.name = 'ParseError';\n\tthis.message = message;\n\ttry {\n\t\tthrow new Error(message);\n\t} catch (e) {\n\t\tthis.stack = e.stack;\n\t}\n};\n\nParseError.prototype = Error.prototype;\n\nvar Parser = function ( str, options ) {\n\tvar item;\n\tvar lineStart = 0;\n\n\tthis.str = str;\n\tthis.options = options || {};\n\tthis.pos = 0;\n\n\tthis.lines = this.str.split( '\\n' );\n\tthis.lineEnds = this.lines.map( function (line) {\n\t\tvar lineEnd = lineStart + line.length + 1; // +1 for the newline\n\n\t\tlineStart = lineEnd;\n\t\treturn lineEnd;\n\t}, 0 );\n\n\t// Custom init logic\n\tif ( this.init ) { this.init( str, options ); }\n\n\tvar items = [];\n\n\twhile ( ( this.pos < this.str.length ) && ( item = this.read() ) ) {\n\t\titems.push( item );\n\t}\n\n\tthis.leftover = this.remaining();\n\tthis.result = this.postProcess ? this.postProcess( items, options ) : items;\n};\n\nParser.prototype = {\n\tread: function read ( converters ) {\n\t\tvar this$1 = this;\n\n\t\tvar i, item;\n\n\t\tif ( !converters ) { converters = this.converters; }\n\n\t\tvar pos = this.pos;\n\n\t\tvar len = converters.length;\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tthis$1.pos = pos; // reset for each attempt\n\n\t\t\tif ( item = converters[i]( this$1 ) ) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\tgetContextMessage: function getContextMessage ( pos, message ) {\n\t\tvar ref = this.getLinePos( pos );\n\t\tvar lineNum = ref[0];\n\t\tvar columnNum = ref[1];\n\t\tif ( this.options.contextLines === -1 ) {\n\t\t\treturn [ lineNum, columnNum, (message + \"" at line \"" + lineNum + \"" character \"" + columnNum) ];\n\t\t}\n\n\t\tvar line = this.lines[ lineNum - 1 ];\n\n\t\tvar contextUp = '';\n\t\tvar contextDown = '';\n\t\tif ( this.options.contextLines ) {\n\t\t\tvar start = lineNum - 1 - this.options.contextLines < 0 ? 0 : lineNum - 1 - this.options.contextLines;\n\t\t\tcontextUp = this.lines.slice( start, lineNum - 1 - start ).join( '\\n' ).replace( /\\t/g, '  ' );\n\t\t\tcontextDown = this.lines.slice( lineNum, lineNum + this.options.contextLines ).join( '\\n' ).replace( /\\t/g, '  ' );\n\t\t\tif ( contextUp ) {\n\t\t\t\tcontextUp += '\\n';\n\t\t\t}\n\t\t\tif ( contextDown ) {\n\t\t\t\tcontextDown = '\\n' + contextDown;\n\t\t\t}\n\t\t}\n\n\t\tvar numTabs = 0;\n\t\tvar annotation = contextUp + line.replace( /\\t/g, function ( match, char ) {\n\t\t\tif ( char < columnNum ) {\n\t\t\t\tnumTabs += 1;\n\t\t\t}\n\n\t\t\treturn '  ';\n\t\t}) + '\\n' + new Array( columnNum + numTabs ).join( ' ' ) + '^----' + contextDown;\n\n\t\treturn [ lineNum, columnNum, (message + \"" at line \"" + lineNum + \"" character \"" + columnNum + \"":\\n\"" + annotation) ];\n\t},\n\n\tgetLinePos: function getLinePos ( char ) {\n\t\tvar this$1 = this;\n\n\t\tvar lineNum = 0;\n\t\tvar lineStart = 0;\n\n\t\twhile ( char >= this.lineEnds[ lineNum ] ) {\n\t\t\tlineStart = this$1.lineEnds[ lineNum ];\n\t\t\tlineNum += 1;\n\t\t}\n\n\t\tvar columnNum = char - lineStart;\n\t\treturn [ lineNum + 1, columnNum + 1, char ]; // line/col should be one-based, not zero-based!\n\t},\n\n\terror: function error ( message ) {\n\t\tvar ref = this.getContextMessage( this.pos, message );\n\t\tvar lineNum = ref[0];\n\t\tvar columnNum = ref[1];\n\t\tvar msg = ref[2];\n\n\t\tvar error = new ParseError( msg );\n\n\t\terror.line = lineNum;\n\t\terror.character = columnNum;\n\t\terror.shortMessage = message;\n\n\t\tthrow error;\n\t},\n\n\tmatchString: function matchString ( string ) {\n\t\tif ( this.str.substr( this.pos, string.length ) === string ) {\n\t\t\tthis.pos += string.length;\n\t\t\treturn string;\n\t\t}\n\t},\n\n\tmatchPattern: function matchPattern ( pattern ) {\n\t\tvar match;\n\n\t\tif ( match = pattern.exec( this.remaining() ) ) {\n\t\t\tthis.pos += match[0].length;\n\t\t\treturn match[1] || match[0];\n\t\t}\n\t},\n\n\tallowWhitespace: function allowWhitespace () {\n\t\tthis.matchPattern( leadingWhitespace );\n\t},\n\n\tremaining: function remaining () {\n\t\treturn this.str.substring( this.pos );\n\t},\n\n\tnextChar: function nextChar () {\n\t\treturn this.str.charAt( this.pos );\n\t}\n};\n\nParser.extend = function ( proto ) {\n\tvar Parent = this;\n\tvar Child = function ( str, options ) {\n\t\tParser.call( this, str, options );\n\t};\n\n\tChild.prototype = Object.create( Parent.prototype );\n\n\tfor ( var key in proto ) {\n\t\tif ( proto.hasOwnProperty( key ) ) {\n\t\t\tChild.prototype[ key ] = proto[ key ];\n\t\t}\n\t}\n\n\tChild.extend = Parser.extend;\n\treturn Child;\n};\n\nvar TEXT              = 1;\nvar INTERPOLATOR      = 2;\nvar TRIPLE            = 3;\nvar SECTION           = 4;\nvar INVERTED          = 5;\nvar CLOSING           = 6;\nvar ELEMENT           = 7;\nvar PARTIAL           = 8;\nvar COMMENT           = 9;\nvar DELIMCHANGE       = 10;\nvar ANCHOR            = 11;\nvar ATTRIBUTE         = 13;\nvar CLOSING_TAG       = 14;\nvar COMPONENT         = 15;\nvar YIELDER           = 16;\nvar INLINE_PARTIAL    = 17;\nvar DOCTYPE           = 18;\nvar ALIAS             = 19;\n\nvar NUMBER_LITERAL    = 20;\nvar STRING_LITERAL    = 21;\nvar ARRAY_LITERAL     = 22;\nvar OBJECT_LITERAL    = 23;\nvar BOOLEAN_LITERAL   = 24;\nvar REGEXP_LITERAL    = 25;\n\nvar GLOBAL            = 26;\nvar KEY_VALUE_PAIR    = 27;\n\n\nvar REFERENCE         = 30;\nvar REFINEMENT        = 31;\nvar MEMBER            = 32;\nvar PREFIX_OPERATOR   = 33;\nvar BRACKETED         = 34;\nvar CONDITIONAL       = 35;\nvar INFIX_OPERATOR    = 36;\n\nvar INVOCATION        = 40;\n\nvar SECTION_IF        = 50;\nvar SECTION_UNLESS    = 51;\nvar SECTION_EACH      = 52;\nvar SECTION_WITH      = 53;\nvar SECTION_IF_WITH   = 54;\n\nvar ELSE              = 60;\nvar ELSEIF            = 61;\n\nvar EVENT             = 70;\nvar DECORATOR         = 71;\nvar TRANSITION        = 72;\nvar BINDING_FLAG      = 73;\nvar DELEGATE_FLAG     = 74;\n\nvar delimiterChangePattern = /^[^\\s=]+/;\nvar whitespacePattern = /^\\s+/;\n\nfunction readDelimiterChange ( parser ) {\n\tif ( !parser.matchString( '=' ) ) {\n\t\treturn null;\n\t}\n\n\tvar start = parser.pos;\n\n\t// allow whitespace before new opening delimiter\n\tparser.allowWhitespace();\n\n\tvar opening = parser.matchPattern( delimiterChangePattern );\n\tif ( !opening ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace (in fact, it's necessary...)\n\tif ( !parser.matchPattern( whitespacePattern ) ) {\n\t\treturn null;\n\t}\n\n\tvar closing = parser.matchPattern( delimiterChangePattern );\n\tif ( !closing ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace before closing '='\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '=' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn [ opening, closing ];\n}\n\nvar regexpPattern = /^(\\/(?:[^\\n\\r\\u2028\\u2029/\\\\[]|\\\\.|\\[(?:[^\\n\\r\\u2028\\u2029\\]\\\\]|\\\\.)*])+\\/(?:([gimuy])(?![a-z]*\\2))*(?![a-zA-Z_$0-9]))/;\n\nfunction readNumberLiteral ( parser ) {\n\tvar result;\n\n\tif ( result = parser.matchPattern( regexpPattern ) ) {\n\t\treturn {\n\t\t\tt: REGEXP_LITERAL,\n\t\t\tv: result\n\t\t};\n\t}\n\n\treturn null;\n}\n\nvar pattern$1 = /[-/\\\\^$*+?.()|[\\]{}]/g;\n\nfunction escapeRegExp ( str ) {\n\treturn str.replace( pattern$1, '\\\\$&' );\n}\n\nvar regExpCache = {};\n\nvar getLowestIndex = function ( haystack, needles ) {\n\treturn haystack.search( regExpCache[needles.join()] || ( regExpCache[needles.join()] = new RegExp( needles.map( escapeRegExp ).join( '|' ) ) ) );\n};\n\n// https://github.com/kangax/html-minifier/issues/63#issuecomment-37763316\nvar booleanAttributes = /^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;\nvar voidElementNames = /^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i;\n\nvar htmlEntities = { quot: 34, amp: 38, apos: 39, lt: 60, gt: 62, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190, iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221, THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252, yacute: 253, thorn: 254, yuml: 255, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, fnof: 402, circ: 710, tilde: 732, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949, zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, bull: 8226, hellip: 8230, permil: 8240, prime: 8242, Prime: 8243, lsaquo: 8249, rsaquo: 8250, oline: 8254, frasl: 8260, euro: 8364, image: 8465, weierp: 8472, real: 8476, trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744, cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830\t};\nvar controlCharacters = [ 8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376 ];\nvar entityPattern = new RegExp( '&(#?(?:x[\\\\w\\\\d]+|\\\\d+|' + Object.keys( htmlEntities ).join( '|' ) + '));?', 'g' );\nvar codePointSupport = typeof String.fromCodePoint === 'function';\nvar codeToChar = codePointSupport ? String.fromCodePoint : String.fromCharCode;\n\nfunction decodeCharacterReferences ( html ) {\n\treturn html.replace( entityPattern, function ( match, entity ) {\n\t\tvar code;\n\n\t\t// Handle named entities\n\t\tif ( entity[0] !== '#' ) {\n\t\t\tcode = htmlEntities[ entity ];\n\t\t} else if ( entity[1] === 'x' ) {\n\t\t\tcode = parseInt( entity.substring( 2 ), 16 );\n\t\t} else {\n\t\t\tcode = parseInt( entity.substring( 1 ), 10 );\n\t\t}\n\n\t\tif ( !code ) {\n\t\t\treturn match;\n\t\t}\n\n\t\treturn codeToChar( validateCode( code ) );\n\t});\n}\n\nvar lessThan = /</g;\nvar greaterThan = />/g;\nvar amp = /&/g;\nvar invalid = 65533;\n\nfunction escapeHtml ( str ) {\n\treturn str\n\t\t.replace( amp, '&amp;' )\n\t\t.replace( lessThan, '&lt;' )\n\t\t.replace( greaterThan, '&gt;' );\n}\n\n// some code points are verboten. If we were inserting HTML, the browser would replace the illegal\n// code points with alternatives in some cases - since we're bypassing that mechanism, we need\n// to replace them ourselves\n//\n// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters\nfunction validateCode ( code ) {\n\tif ( !code ) {\n\t\treturn invalid;\n\t}\n\n\t// line feed becomes generic whitespace\n\tif ( code === 10 ) {\n\t\treturn 32;\n\t}\n\n\t// ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)\n\tif ( code < 128 ) {\n\t\treturn code;\n\t}\n\n\t// code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need\n\t// to correct the mistake or we'll end up with missing € signs and so on\n\tif ( code <= 159 ) {\n\t\treturn controlCharacters[ code - 128 ];\n\t}\n\n\t// basic multilingual plane\n\tif ( code < 55296 ) {\n\t\treturn code;\n\t}\n\n\t// UTF-16 surrogate halves\n\tif ( code <= 57343 ) {\n\t\treturn invalid;\n\t}\n\n\t// rest of the basic multilingual plane\n\tif ( code <= 65535 ) {\n\t\treturn code;\n\t} else if ( !codePointSupport ) {\n\t\treturn invalid;\n\t}\n\n\t// supplementary multilingual plane 0x10000 - 0x1ffff\n\tif ( code >= 65536 && code <= 131071 ) {\n\t\treturn code;\n\t}\n\n\t// supplementary ideographic plane 0x20000 - 0x2ffff\n\tif ( code >= 131072 && code <= 196607 ) {\n\t\treturn code;\n\t}\n\n\treturn invalid;\n}\n\nvar expectedExpression = 'Expected a JavaScript expression';\nvar expectedParen = 'Expected closing paren';\n\n// bulletproof number regex from https://gist.github.com/Rich-Harris/7544330\nvar numberPattern = /^(?:[+-]?)0*(?:(?:(?:[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\n\nfunction readNumberLiteral$1 ( parser ) {\n\tvar result;\n\n\tif ( result = parser.matchPattern( numberPattern ) ) {\n\t\treturn {\n\t\t\tt: NUMBER_LITERAL,\n\t\t\tv: result\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction readBooleanLiteral ( parser ) {\n\tvar remaining = parser.remaining();\n\n\tif ( remaining.substr( 0, 4 ) === 'true' ) {\n\t\tparser.pos += 4;\n\t\treturn {\n\t\t\tt: BOOLEAN_LITERAL,\n\t\t\tv: 'true'\n\t\t};\n\t}\n\n\tif ( remaining.substr( 0, 5 ) === 'false' ) {\n\t\tparser.pos += 5;\n\t\treturn {\n\t\t\tt: BOOLEAN_LITERAL,\n\t\t\tv: 'false'\n\t\t};\n\t}\n\n\treturn null;\n}\n\n// Match one or more characters until: \"", ', \\, or EOL/EOF.\n// EOL/EOF is written as (?!.) (meaning there's no non-newline char next).\nvar stringMiddlePattern = /^(?=.)[^\""'\\\\]+?(?:(?!.)|(?=[\""'\\\\]))/;\n\n// Match one escape sequence, including the backslash.\nvar escapeSequencePattern = /^\\\\(?:[`'\""\\\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/;\n\n// Match one ES5 line continuation (backslash + line terminator).\nvar lineContinuationPattern = /^\\\\(?:\\r\\n|[\\u000A\\u000D\\u2028\\u2029])/;\n\n// Helper for defining getDoubleQuotedString and getSingleQuotedString.\nvar makeQuotedStringMatcher = function ( okQuote ) {\n\treturn function ( parser ) {\n\t\tvar literal = '\""';\n\t\tvar done = false;\n\t\tvar next;\n\n\t\twhile ( !done ) {\n\t\t\tnext = ( parser.matchPattern( stringMiddlePattern ) || parser.matchPattern( escapeSequencePattern ) ||\n\t\t\t\tparser.matchString( okQuote ) );\n\t\t\tif ( next ) {\n\t\t\t\tif ( next === \""\\\""\"" ) {\n\t\t\t\t\tliteral += \""\\\\\\\""\"";\n\t\t\t\t} else if ( next === \""\\\\'\"" ) {\n\t\t\t\t\tliteral += \""'\"";\n\t\t\t\t} else {\n\t\t\t\t\tliteral += next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnext = parser.matchPattern( lineContinuationPattern );\n\t\t\t\tif ( next ) {\n\t\t\t\t\t// convert \\(newline-like) into a \\u escape, which is allowed in JSON\n\t\t\t\t\tliteral += '\\\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );\n\t\t\t\t} else {\n\t\t\t\t\tdone = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tliteral += '\""';\n\n\t\t// use JSON.parse to interpret escapes\n\t\treturn JSON.parse( literal );\n\t};\n};\n\nvar singleMatcher = makeQuotedStringMatcher( \""\\\""\"" );\nvar doubleMatcher = makeQuotedStringMatcher( \""'\"" );\n\nvar readStringLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\tvar quote = parser.matchString( \""'\"" ) || parser.matchString( \""\\\""\"" );\n\n\tif ( quote ) {\n\t\tvar string = ( quote === \""'\"" ? singleMatcher : doubleMatcher )( parser );\n\n\t\tif ( !parser.matchString( quote ) ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: STRING_LITERAL,\n\t\t\tv: string\n\t\t};\n\t}\n\n\treturn null;\n};\n\n// Match one or more characters until: \"", ', or \\\nvar stringMiddlePattern$1 = /^[^`\""\\\\\\$]+?(?:(?=[`\""\\\\\\$]))/;\n\nvar escapes = /[\\r\\n\\t\\b\\f]/g;\nfunction getString$1 ( literal ) {\n\treturn JSON.parse( (\""\\\""\"" + (literal.replace( escapes, escapeChar )) + \""\\\""\"") );\n}\n\nfunction escapeChar ( c ) {\n\tswitch ( c ) {\n\t\tcase '\\n': return '\\\\n';\n\t\tcase '\\r': return '\\\\r';\n\t\tcase '\\t': return '\\\\t';\n\t\tcase '\\b': return '\\\\b';\n\t\tcase '\\f': return '\\\\f';\n\t}\n}\n\nfunction readTemplateStringLiteral ( parser ) {\n\tif ( !parser.matchString( '`' ) ) { return null; }\n\n\tvar literal = '';\n\tvar done = false;\n\tvar next;\n\tvar parts = [];\n\n\twhile ( !done ) {\n\t\tnext = parser.matchPattern( stringMiddlePattern$1 ) || parser.matchPattern( escapeSequencePattern ) ||\n\t\t\tparser.matchString( '$' ) || parser.matchString( '\""' );\n\t\tif ( next ) {\n\t\t\tif ( next === \""\\\""\"" ) {\n\t\t\t\tliteral += \""\\\\\\\""\"";\n\t\t\t} else if ( next === '\\\\`' ) {\n\t\t\t\tliteral += '`';\n\t\t\t} else if ( next === '$' ) {\n\t\t\t\tif ( parser.matchString( '{' ) ) {\n\t\t\t\t\tparts.push({ t: STRING_LITERAL, v: getString$1( literal ) });\n\t\t\t\t\tliteral = '';\n\n\t\t\t\t\tparser.allowWhitespace();\n\t\t\t\t\tvar expr = readExpression( parser );\n\n\t\t\t\t\tif ( !expr ) { parser.error( 'Expected valid expression' ); }\n\n\t\t\t\t\tparts.push({ t: BRACKETED, x: expr });\n\n\t\t\t\t\tparser.allowWhitespace();\n\t\t\t\t\tif ( !parser.matchString( '}' ) ) { parser.error( \""Expected closing '}' after interpolated expression\"" ); }\n\t\t\t\t} else {\n\t\t\t\t\tliteral += '$';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tliteral += next;\n\t\t\t}\n\t\t} else {\n\t\t\tnext = parser.matchPattern( lineContinuationPattern );\n\t\t\tif ( next ) {\n\t\t\t\t// convert \\(newline-like) into a \\u escape, which is allowed in JSON\n\t\t\t\tliteral += '\\\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );\n\t\t\t} else {\n\t\t\t\tdone = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( literal.length ) { parts.push({ t: STRING_LITERAL, v: getString$1( literal ) }); }\n\n\tif ( !parser.matchString( '`' ) ) { parser.error( \""Expected closing '`'\"" ); }\n\n\tif ( parts.length === 1 ) {\n\t\treturn parts[0];\n\t} else {\n\t\tvar result = parts.pop();\n\t\tvar part;\n\n\t\twhile ( part = parts.pop() ) {\n\t\t\tresult = {\n\t\t\t\tt: INFIX_OPERATOR,\n\t\t\t\ts: '+',\n\t\t\t\to: [ part, result ]\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tt: BRACKETED,\n\t\t\tx: result\n\t\t};\n\t}\n}\n\nvar name = /^[a-zA-Z_$][a-zA-Z_$0-9]*/;\nvar spreadPattern = /^\\s*\\.{3}/;\nvar legalReference = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:\\.(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nvar relaxedName = /^[a-zA-Z_$][-\\/a-zA-Z_$0-9]*(?:\\.(?:[a-zA-Z_$][-\\/a-zA-Z_$0-9]*))*/;\n\nvar identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n// http://mathiasbynens.be/notes/javascript-properties\n// can be any name, string literal, or number literal\nfunction readKey ( parser ) {\n\tvar token;\n\n\tif ( token = readStringLiteral( parser ) ) {\n\t\treturn identifier.test( token.v ) ? token.v : '\""' + token.v.replace( /\""/g, '\\\\\""' ) + '\""';\n\t}\n\n\tif ( token = readNumberLiteral$1( parser ) ) {\n\t\treturn token.v;\n\t}\n\n\tif ( token = parser.matchPattern( name ) ) {\n\t\treturn token;\n\t}\n\n\treturn null;\n}\n\nfunction readKeyValuePair ( parser ) {\n\tvar spread;\n\tvar start = parser.pos;\n\n\t// allow whitespace between '{' and key\n\tparser.allowWhitespace();\n\n\tvar refKey = parser.nextChar() !== '\\'' && parser.nextChar() !== '\""';\n\tif ( refKey ) { spread = parser.matchPattern( spreadPattern ); }\n\n\tvar key = spread ? readExpression( parser ) : readKey( parser );\n\tif ( key === null ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace between key and ':'\n\tparser.allowWhitespace();\n\n\t// es2015 shorthand property\n\tif ( refKey && ( parser.nextChar() === ',' || parser.nextChar() === '}' ) ) {\n\t\tif ( !spread && !name.test( key ) ) {\n\t\t\tparser.error( (\""Expected a valid reference, but found '\"" + key + \""' instead.\"") );\n\t\t}\n\n\t\tvar pair = {\n\t\t\tt: KEY_VALUE_PAIR,\n\t\t\tk: key,\n\t\t\tv: {\n\t\t\t\tt: REFERENCE,\n\t\t\t\tn: key\n\t\t\t}\n\t\t};\n\n\t\tif ( spread ) {\n\t\t\tpair.p = true;\n\t\t}\n\n\t\treturn pair;\n\t}\n\n\n\t// next character must be ':'\n\tif ( !parser.matchString( ':' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace between ':' and value\n\tparser.allowWhitespace();\n\n\t// next expression must be a, well... expression\n\tvar value = readExpression( parser );\n\tif ( value === null ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: KEY_VALUE_PAIR,\n\t\tk: key,\n\t\tv: value\n\t};\n}\n\nfunction readKeyValuePairs ( parser ) {\n\tvar start = parser.pos;\n\n\tvar pair = readKeyValuePair( parser );\n\tif ( pair === null ) {\n\t\treturn null;\n\t}\n\n\tvar pairs = [ pair ];\n\n\tif ( parser.matchString( ',' ) ) {\n\t\tvar keyValuePairs = readKeyValuePairs( parser );\n\n\t\tif ( !keyValuePairs ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn pairs.concat( keyValuePairs );\n\t}\n\n\treturn pairs;\n}\n\nvar readObjectLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\n\t// allow whitespace\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '{' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar keyValuePairs = readKeyValuePairs( parser );\n\n\t// allow whitespace between final value and '}'\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '}' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: OBJECT_LITERAL,\n\t\tm: keyValuePairs\n\t};\n};\n\nvar readArrayLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\n\t// allow whitespace before '['\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '[' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar expressionList = readExpressionList( parser, true );\n\n\tif ( !parser.matchString( ']' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: ARRAY_LITERAL,\n\t\tm: expressionList\n\t};\n};\n\nfunction readLiteral ( parser ) {\n\treturn readNumberLiteral$1( parser )         ||\n\t       readBooleanLiteral( parser )        ||\n\t       readStringLiteral( parser )         ||\n\t       readTemplateStringLiteral( parser ) ||\n\t       readObjectLiteral( parser )         ||\n\t       readArrayLiteral( parser )          ||\n\t       readNumberLiteral( parser );\n}\n\n// if a reference is a browser global, we don't deference it later, so it needs special treatment\nvar globals = /^(?:Array|console|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null|Object|Number|String|Boolean)\\b/;\n\n// keywords are not valid references, with the exception of `this`\nvar keywords = /^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/;\n\nvar prefixPattern = /^(?:\\@\\.|\\@|~\\/|(?:\\^\\^\\/(?:\\^\\^\\/)*(?:\\.\\.\\/)*)|(?:\\.\\.\\/)+|\\.\\/(?:\\.\\.\\/)*|\\.)/;\nvar specials = /^(key|index|keypath|rootpath|this|global|shared)/;\n\nfunction readReference ( parser ) {\n\tvar prefix, name$$1, global, reference, lastDotIndex;\n\n\tvar startPos = parser.pos;\n\n\tprefix = parser.matchPattern( prefixPattern ) || '';\n\tname$$1 = ( !prefix && parser.relaxedNames && parser.matchPattern( relaxedName ) ) ||\n\t\t\tparser.matchPattern( legalReference );\n\tvar actual = prefix.length + ( ( name$$1 && name$$1.length ) || 0 );\n\n\tif ( prefix === '@.' ) {\n\t\tprefix = '@';\n\t\tif ( name$$1 ) { name$$1 = 'this.' + name$$1; }\n\t\telse { name$$1 = 'this'; }\n\t}\n\n\tif ( !name$$1 && prefix ) {\n\t\tname$$1 = prefix;\n\t\tprefix = '';\n\t}\n\n\tif ( !name$$1 ) {\n\t\treturn null;\n\t}\n\n\tif ( prefix === '@' && !specials.test( name$$1 ) ) {\n\t\tparser.error( (\""Unrecognized special reference @\"" + name$$1) );\n\t}\n\n\t// bug out if it's a keyword (exception for ancestor/restricted refs - see https://github.com/ractivejs/ractive/issues/1497)\n\tif ( !prefix && !parser.relaxedNames && keywords.test( name$$1 ) ) {\n\t\tparser.pos = startPos;\n\t\treturn null;\n\t}\n\n\t// if this is a browser global, stop here\n\tif ( !prefix && globals.test( name$$1 ) ) {\n\t\tglobal = globals.exec( name$$1 )[0];\n\t\tparser.pos = startPos + global.length;\n\n\t\treturn {\n\t\t\tt: GLOBAL,\n\t\t\tv: global\n\t\t};\n\t}\n\n\treference = ( prefix || '' ) + normalise( name$$1 );\n\n\tif ( parser.matchString( '(' ) ) {\n\t\t// if this is a method invocation (as opposed to a function) we need\n\t\t// to strip the method name from the reference combo, else the context\n\t\t// will be wrong\n\t\t// but only if the reference was actually a member and not a refinement\n\t\tlastDotIndex = reference.lastIndexOf( '.' );\n\t\tif ( lastDotIndex !== -1 && name$$1[ name$$1.length - 1 ] !== ']' ) {\n\t\t\tvar refLength = reference.length;\n\t\t\treference = reference.substr( 0, lastDotIndex );\n\t\t\tparser.pos = startPos + ( actual - ( refLength - lastDotIndex ) );\n\t\t} else {\n\t\t\tparser.pos -= 1;\n\t\t}\n\t}\n\n\treturn {\n\t\tt: REFERENCE,\n\t\tn: reference.replace( /^this\\./, './' ).replace( /^this$/, '.' )\n\t};\n}\n\nfunction readBracketedExpression ( parser ) {\n\tif ( !parser.matchString( '(' ) ) { return null; }\n\n\tparser.allowWhitespace();\n\n\tvar expr = readExpression( parser );\n\n\tif ( !expr ) { parser.error( expectedExpression ); }\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( ')' ) ) { parser.error( expectedParen ); }\n\n\treturn {\n\t\tt: BRACKETED,\n\t\tx: expr\n\t};\n}\n\nvar readPrimary = function ( parser ) {\n\treturn readLiteral( parser )\n\t\t|| readReference( parser )\n\t\t|| readBracketedExpression( parser );\n};\n\nfunction readRefinement ( parser ) {\n\t// some things call for strict refinement (partial names), meaning no space between reference and refinement\n\tif ( !parser.strictRefinement ) {\n\t\tparser.allowWhitespace();\n\t}\n\n\t// \"".\"" name\n\tif ( parser.matchString( '.' ) ) {\n\t\tparser.allowWhitespace();\n\n\t\tvar name$$1 = parser.matchPattern( name );\n\t\tif ( name$$1 ) {\n\t\t\treturn {\n\t\t\t\tt: REFINEMENT,\n\t\t\t\tn: name$$1\n\t\t\t};\n\t\t}\n\n\t\tparser.error( 'Expected a property name' );\n\t}\n\n\t// \""[\"" expression \""]\""\n\tif ( parser.matchString( '[' ) ) {\n\t\tparser.allowWhitespace();\n\n\t\tvar expr = readExpression( parser );\n\t\tif ( !expr ) { parser.error( expectedExpression ); }\n\n\t\tparser.allowWhitespace();\n\n\t\tif ( !parser.matchString( ']' ) ) { parser.error( \""Expected ']'\"" ); }\n\n\t\treturn {\n\t\t\tt: REFINEMENT,\n\t\t\tx: expr\n\t\t};\n\t}\n\n\treturn null;\n}\n\nvar readMemberOrInvocation = function ( parser ) {\n\tvar expression = readPrimary( parser );\n\n\tif ( !expression ) { return null; }\n\n\twhile ( expression ) {\n\t\tvar refinement = readRefinement( parser );\n\t\tif ( refinement ) {\n\t\t\texpression = {\n\t\t\t\tt: MEMBER,\n\t\t\t\tx: expression,\n\t\t\t\tr: refinement\n\t\t\t};\n\t\t}\n\n\t\telse if ( parser.matchString( '(' ) ) {\n\t\t\tparser.allowWhitespace();\n\t\t\tvar expressionList = readExpressionList( parser, true );\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( !parser.matchString( ')' ) ) {\n\t\t\t\tparser.error( expectedParen );\n\t\t\t}\n\n\t\t\texpression = {\n\t\t\t\tt: INVOCATION,\n\t\t\t\tx: expression\n\t\t\t};\n\n\t\t\tif ( expressionList ) { expression.o = expressionList; }\n\t\t}\n\n\t\telse {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn expression;\n};\n\nvar readTypeOf;\n\nvar makePrefixSequenceMatcher = function ( symbol, fallthrough ) {\n\treturn function ( parser ) {\n\t\tvar expression;\n\n\t\tif ( expression = fallthrough( parser ) ) {\n\t\t\treturn expression;\n\t\t}\n\n\t\tif ( !parser.matchString( symbol ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tparser.allowWhitespace();\n\n\t\texpression = readExpression( parser );\n\t\tif ( !expression ) {\n\t\t\tparser.error( expectedExpression );\n\t\t}\n\n\t\treturn {\n\t\t\ts: symbol,\n\t\t\to: expression,\n\t\t\tt: PREFIX_OPERATOR\n\t\t};\n\t};\n};\n\n// create all prefix sequence matchers, return readTypeOf\n(function() {\n\tvar i, len, matcher, fallthrough;\n\n\tvar prefixOperators = '! ~ + - typeof'.split( ' ' );\n\n\tfallthrough = readMemberOrInvocation;\n\tfor ( i = 0, len = prefixOperators.length; i < len; i += 1 ) {\n\t\tmatcher = makePrefixSequenceMatcher( prefixOperators[i], fallthrough );\n\t\tfallthrough = matcher;\n\t}\n\n\t// typeof operator is higher precedence than multiplication, so provides the\n\t// fallthrough for the multiplication sequence matcher we're about to create\n\t// (we're skipping void and delete)\n\treadTypeOf = fallthrough;\n}());\n\nvar readTypeof = readTypeOf;\n\nvar readLogicalOr;\n\nvar makeInfixSequenceMatcher = function ( symbol, fallthrough ) {\n\treturn function ( parser ) {\n\t\tvar start, left, right;\n\n\t\tleft = fallthrough( parser );\n\t\tif ( !left ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Loop to handle left-recursion in a case like `a * b * c` and produce\n\t\t// left association, i.e. `(a * b) * c`.  The matcher can't call itself\n\t\t// to parse `left` because that would be infinite regress.\n\t\twhile ( true ) {\n\t\t\tstart = parser.pos;\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( !parser.matchString( symbol ) ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\t// special case - in operator must not be followed by [a-zA-Z_$0-9]\n\t\t\tif ( symbol === 'in' && /[a-zA-Z_$0-9]/.test( parser.remaining().charAt( 0 ) ) ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\t// right operand must also consist of only higher-precedence operators\n\t\t\tright = fallthrough( parser );\n\t\t\tif ( !right ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\tleft = {\n\t\t\t\tt: INFIX_OPERATOR,\n\t\t\t\ts: symbol,\n\t\t\t\to: [ left, right ]\n\t\t\t};\n\n\t\t\t// Loop back around.  If we don't see another occurrence of the symbol,\n\t\t\t// we'll return left.\n\t\t}\n\t};\n};\n\n// create all infix sequence matchers, and return readLogicalOr\n(function() {\n\tvar i, len, matcher, fallthrough;\n\n\t// All the infix operators on order of precedence (source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)\n\t// Each sequence matcher will initially fall through to its higher precedence\n\t// neighbour, and only attempt to match if one of the higher precedence operators\n\t// (or, ultimately, a literal, reference, or bracketed expression) already matched\n\tvar infixOperators = '* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||'.split( ' ' );\n\n\t// A typeof operator is higher precedence than multiplication\n\tfallthrough = readTypeof;\n\tfor ( i = 0, len = infixOperators.length; i < len; i += 1 ) {\n\t\tmatcher = makeInfixSequenceMatcher( infixOperators[i], fallthrough );\n\t\tfallthrough = matcher;\n\t}\n\n\t// Logical OR is the fallthrough for the conditional matcher\n\treadLogicalOr = fallthrough;\n}());\n\nvar readLogicalOr$1 = readLogicalOr;\n\n// The conditional operator is the lowest precedence operator, so we start here\nfunction getConditional ( parser ) {\n\tvar expression = readLogicalOr$1( parser );\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '?' ) ) {\n\t\tparser.pos = start;\n\t\treturn expression;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar ifTrue = readExpression( parser );\n\tif ( !ifTrue ) {\n\t\tparser.error( expectedExpression );\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( ':' ) ) {\n\t\tparser.error( 'Expected \"":\""' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar ifFalse = readExpression( parser );\n\tif ( !ifFalse ) {\n\t\tparser.error( expectedExpression );\n\t}\n\n\treturn {\n\t\tt: CONDITIONAL,\n\t\to: [ expression, ifTrue, ifFalse ]\n\t};\n}\n\nfunction readExpression ( parser ) {\n\t// The conditional operator is the lowest precedence operator (except yield,\n\t// assignment operators, and commas, none of which are supported), so we\n\t// start there. If it doesn't match, it 'falls through' to progressively\n\t// higher precedence operators, until it eventually matches (or fails to\n\t// match) a 'primary' - a literal or a reference. This way, the abstract syntax\n\t// tree has everything in its proper place, i.e. 2 + 3 * 4 === 14, not 20.\n\treturn getConditional( parser );\n}\n\nfunction readExpressionList ( parser, spread ) {\n\tvar isSpread;\n\tvar expressions = [];\n\n\tvar pos = parser.pos;\n\n\tdo {\n\t\tparser.allowWhitespace();\n\n\t\tif ( spread ) {\n\t\t\tisSpread = parser.matchPattern( spreadPattern );\n\t\t}\n\n\t\tvar expr = readExpression( parser );\n\n\t\tif ( expr === null && expressions.length ) {\n\t\t\tparser.error( expectedExpression );\n\t\t} else if ( expr === null ) {\n\t\t\tparser.pos = pos;\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( isSpread ) {\n\t\t\texpr.p = true;\n\t\t}\n\n\t\texpressions.push( expr );\n\n\t\tparser.allowWhitespace();\n\t} while ( parser.matchString( ',' ) );\n\n\treturn expressions;\n}\n\nfunction flattenExpression ( expression ) {\n\tvar refs;\n\tvar count = 0;\n\n\textractRefs( expression, refs = [] );\n\tvar stringified = stringify( expression );\n\n\treturn {\n\t\tr: refs,\n\t\ts: getVars(stringified)\n\t};\n\n\tfunction getVars(expr) {\n\t\tvar vars = [];\n\t\tfor ( var i = count - 1; i >= 0; i-- ) {\n\t\t\tvars.push( (\""x$\"" + i) );\n\t\t}\n\t\treturn vars.length ? (\""(function(){var \"" + (vars.join(',')) + \"";return(\"" + expr + \"");})()\"") : expr;\n\t}\n\n\tfunction stringify ( node ) {\n\t\tif ( typeof node === 'string' ) {\n\t\t\treturn node;\n\t\t}\n\n\t\tswitch ( node.t ) {\n\t\t\tcase BOOLEAN_LITERAL:\n\t\t\tcase GLOBAL:\n\t\t\tcase NUMBER_LITERAL:\n\t\t\tcase REGEXP_LITERAL:\n\t\t\t\treturn node.v;\n\n\t\t\tcase STRING_LITERAL:\n\t\t\t\treturn JSON.stringify( String( node.v ) );\n\n\t\t\tcase ARRAY_LITERAL:\n\t\t\t\tif ( node.m && hasSpread( node.m )) {\n\t\t\t\t\treturn (\""[].concat(\"" + (makeSpread( node.m, '[', ']', stringify )) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn '[' + ( node.m ? node.m.map( stringify ).join( ',' ) : '' ) + ']';\n\t\t\t\t}\n\n\t\t\tcase OBJECT_LITERAL:\n\t\t\t\tif ( node.m && hasSpread( node.m ) ) {\n\t\t\t\t\treturn (\""Object.assign({},\"" + (makeSpread( node.m, '{', '}', stringifyPair)) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn '{' + ( node.m ? node.m.map( function (n) { return ((n.k) + \"":\"" + (stringify( n.v ))); } ).join( ',' ) : '' ) + '}';\n\t\t\t\t}\n\n\t\t\tcase PREFIX_OPERATOR:\n\t\t\t\treturn ( node.s === 'typeof' ? 'typeof ' : node.s ) + stringify( node.o );\n\n\t\t\tcase INFIX_OPERATOR:\n\t\t\t\treturn stringify( node.o[0] ) + ( node.s.substr( 0, 2 ) === 'in' ? ' ' + node.s + ' ' : node.s ) + stringify( node.o[1] );\n\n\t\t\tcase INVOCATION:\n\t\t\t\tif ( node.o && hasSpread( node.o ) ) {\n\t\t\t\t\tvar id = count++;\n\t\t\t\t\treturn (\""(x$\"" + id + \""=\"" + (stringify(node.x)) + \"").apply(x$\"" + id + \"",\"" + (stringify({ t: ARRAY_LITERAL, m: node.o })) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn stringify( node.x ) + '(' + ( node.o ? node.o.map( stringify ).join( ',' ) : '' ) + ')';\n\t\t\t\t}\n\n\t\t\tcase BRACKETED:\n\t\t\t\treturn '(' + stringify( node.x ) + ')';\n\n\t\t\tcase MEMBER:\n\t\t\t\treturn stringify( node.x ) + stringify( node.r );\n\n\t\t\tcase REFINEMENT:\n\t\t\t\treturn ( node.n ? '.' + node.n : '[' + stringify( node.x ) + ']' );\n\n\t\t\tcase CONDITIONAL:\n\t\t\t\treturn stringify( node.o[0] ) + '?' + stringify( node.o[1] ) + ':' + stringify( node.o[2] );\n\n\t\t\tcase REFERENCE:\n\t\t\t\treturn '_' + refs.indexOf( node.n );\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'Expected legal JavaScript' );\n\t\t}\n\t}\n\n\tfunction stringifyPair ( node ) { return node.p ? stringify( node.k ) : ((node.k) + \"":\"" + (stringify( node.v ))); }\n\n\tfunction makeSpread ( list, open, close, fn ) {\n\t\tvar out = list.reduce( function ( a, c ) {\n\t\t\tif ( c.p ) {\n\t\t\t\ta.str += \""\"" + (a.open ? close + ',' : a.str.length ? ',' : '') + (fn( c ));\n\t\t\t} else {\n\t\t\t\ta.str += \""\"" + (!a.str.length ? open : !a.open ? ',' + open : ',') + (fn( c ));\n\t\t\t}\n\t\t\ta.open = !c.p;\n\t\t\treturn a;\n\t\t}, { open: false, str: '' } );\n\t\tif ( out.open ) { out.str += close; }\n\t\treturn out.str;\n\t}\n}\n\nfunction hasSpread ( list ) {\n\tfor ( var i = 0; i < list.length; i++ ) {\n\t\tif ( list[i].p ) { return true; }\n\t}\n\n\treturn false;\n}\n\n// TODO maybe refactor this?\nfunction extractRefs ( node, refs ) {\n\tif ( node.t === REFERENCE && typeof node.n === 'string' ) {\n\t\tif ( !~refs.indexOf( node.n ) ) {\n\t\t\trefs.unshift( node.n );\n\t\t}\n\t}\n\n\tvar list = node.o || node.m;\n\tif ( list ) {\n\t\tif ( isObject( list ) ) {\n\t\t\textractRefs( list, refs );\n\t\t} else {\n\t\t\tvar i = list.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\textractRefs( list[i], refs );\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( node.k && node.t === KEY_VALUE_PAIR && typeof node.k !== 'string' ) {\n\t\textractRefs( node.k, refs );\n\t}\n\n\tif ( node.x ) {\n\t\textractRefs( node.x, refs );\n\t}\n\n\tif ( node.r ) {\n\t\textractRefs( node.r, refs );\n\t}\n\n\tif ( node.v ) {\n\t\textractRefs( node.v, refs );\n\t}\n}\n\nvar attributeNamePattern = /^[^\\s\""'>\\/=]+/;\nvar onPattern = /^on/;\nvar eventPattern = /^on-([a-zA-Z\\*\\.$_]((?:[a-zA-Z\\*\\.$_0-9\\-]|\\\\-)+))$/;\nvar reservedEventNames = /^(?:change|reset|teardown|update|construct|config|init|render|complete|unrender|detach|insert|destruct|attachchild|detachchild)$/;\nvar decoratorPattern = /^as-([a-z-A-Z][-a-zA-Z_0-9]*)$/;\nvar transitionPattern = /^([a-zA-Z](?:(?!-in-out)[-a-zA-Z_0-9])*)-(in|out|in-out)$/;\nvar directives = {\n\tlazy: { t: BINDING_FLAG, v: 'l' },\n\ttwoway: { t: BINDING_FLAG, v: 't' },\n\t'no-delegation': { t: DELEGATE_FLAG }\n};\nvar unquotedAttributeValueTextPattern = /^[^\\s\""'=<>\\/`]+/;\nvar proxyEvent = /^[^\\s\""'=<>@\\[\\]()]*/;\nvar whitespace = /^\\s+/;\n\nvar slashes = /\\\\/g;\nfunction splitEvent ( str ) {\n\tvar result = [];\n\tvar s = 0;\n\n\tfor ( var i = 0; i < str.length; i++ ) {\n\t\tif ( str[i] === '-' && str[ i - 1 ] !== '\\\\' ) {\n\t\t\tresult.push( str.substring( s, i ).replace( slashes, '' ) );\n\t\t\ts = i + 1;\n\t\t}\n\t}\n\n\tresult.push( str.substring( s ).replace( slashes, '' ) );\n\n\treturn result;\n}\n\nfunction readAttribute ( parser ) {\n\tvar name, i, nearest, idx;\n\n\tparser.allowWhitespace();\n\n\tname = parser.matchPattern( attributeNamePattern );\n\tif ( !name ) {\n\t\treturn null;\n\t}\n\n\t// check for accidental delimiter consumption e.g. <tag bool{{>attrs}} />\n\tnearest = name.length;\n\tfor ( i = 0; i < parser.tags.length; i++ ) {\n\t\tif ( ~( idx = name.indexOf( parser.tags[ i ].open ) ) ) {\n\t\t\tif ( idx < nearest ) { nearest = idx; }\n\t\t}\n\t}\n\tif ( nearest < name.length ) {\n\t\tparser.pos -= name.length - nearest;\n\t\tname = name.substr( 0, nearest );\n\t\tif ( !name ) { return null; }\n\t}\n\n\treturn { n: name };\n}\n\nfunction readAttributeValue ( parser ) {\n\tvar start = parser.pos;\n\n\t// next character must be `=`, `/`, `>` or whitespace\n\tif ( !/[=\\/>\\s]/.test( parser.nextChar() ) ) {\n\t\tparser.error( 'Expected `=`, `/`, `>` or whitespace' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '=' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar valueStart = parser.pos;\n\tvar startDepth = parser.sectionDepth;\n\n\tvar value = readQuotedAttributeValue( parser, \""'\"" ) ||\n\t\t\treadQuotedAttributeValue( parser, \""\\\""\"" ) ||\n\t\t\treadUnquotedAttributeValue( parser );\n\n\tif ( value === null ) {\n\t\tparser.error( 'Expected valid attribute value' );\n\t}\n\n\tif ( parser.sectionDepth !== startDepth ) {\n\t\tparser.pos = valueStart;\n\t\tparser.error( 'An attribute value must contain as many opening section tags as closing section tags' );\n\t}\n\n\tif ( !value.length ) {\n\t\treturn '';\n\t}\n\n\tif ( value.length === 1 && typeof value[0] === 'string' ) {\n\t\treturn decodeCharacterReferences( value[0] );\n\t}\n\n\treturn value;\n}\n\nfunction readUnquotedAttributeValueToken ( parser ) {\n\tvar text, index;\n\n\tvar start = parser.pos;\n\n\ttext = parser.matchPattern( unquotedAttributeValueTextPattern );\n\n\tif ( !text ) {\n\t\treturn null;\n\t}\n\n\tvar haystack = text;\n\tvar needles = parser.tags.map( function (t) { return t.open; } ); // TODO refactor... we do this in readText.js as well\n\n\tif ( ( index = getLowestIndex( haystack, needles ) ) !== -1 ) {\n\t\ttext = text.substr( 0, index );\n\t\tparser.pos = start + text.length;\n\t}\n\n\treturn text;\n}\n\nfunction readUnquotedAttributeValue ( parser ) {\n\tparser.inAttribute = true;\n\n\tvar tokens = [];\n\n\tvar token = readMustache( parser ) || readUnquotedAttributeValueToken( parser );\n\twhile ( token ) {\n\t\ttokens.push( token );\n\t\ttoken = readMustache( parser ) || readUnquotedAttributeValueToken( parser );\n\t}\n\n\tif ( !tokens.length ) {\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = false;\n\treturn tokens;\n}\n\nfunction readQuotedAttributeValue ( parser, quoteMark ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( quoteMark ) ) {\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = quoteMark;\n\n\tvar tokens = [];\n\n\tvar token = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );\n\twhile ( token !== null ) {\n\t\ttokens.push( token );\n\t\ttoken = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );\n\t}\n\n\tif ( !parser.matchString( quoteMark ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = false;\n\n\treturn tokens;\n}\n\nfunction readQuotedStringToken ( parser, quoteMark ) {\n\tvar haystack = parser.remaining();\n\n\tvar needles = parser.tags.map( function (t) { return t.open; } ); // TODO refactor... we do this in readText.js as well\n\tneedles.push( quoteMark );\n\n\tvar index = getLowestIndex( haystack, needles );\n\n\tif ( index === -1 ) {\n\t\tparser.error( 'Quoted attribute value must have a closing quote' );\n\t}\n\n\tif ( !index ) {\n\t\treturn null;\n\t}\n\n\tparser.pos += index;\n\treturn haystack.substr( 0, index );\n}\n\nfunction readAttributeOrDirective ( parser ) {\n\tvar match, directive;\n\n\tvar attribute = readAttribute( parser, false );\n\n\tif ( !attribute ) { return null; }\n\n\t\t// lazy, twoway\n\tif ( directive = directives[ attribute.n ] ) {\n\t\tattribute.t = directive.t;\n\t\tif ( directive.v ) { attribute.v = directive.v; }\n\t\tdelete attribute.n; // no name necessary\n\t\tparser.allowWhitespace();\n\t\tif ( parser.nextChar() === '=' ) { attribute.f = readAttributeValue( parser ); }\n\t}\n\n\t\t// decorators\n\telse if ( match = decoratorPattern.exec( attribute.n ) ) {\n\t\tattribute.n = match[1];\n\t\tattribute.t = DECORATOR;\n\t\treadArguments( parser, attribute );\n\t}\n\n\t\t// transitions\n\telse if ( match = transitionPattern.exec( attribute.n ) ) {\n\t\tattribute.n = match[1];\n\t\tattribute.t = TRANSITION;\n\t\treadArguments( parser, attribute );\n\t\tattribute.v = match[2] === 'in-out' ? 't0' : match[2] === 'in' ? 't1' : 't2';\n\t}\n\n\t\t// on-click etc\n\telse if ( match = eventPattern.exec( attribute.n ) ) {\n\n\t\tattribute.n = splitEvent( match[1] );\n\t\tattribute.t = EVENT;\n\n\t\t\t// check for a proxy event\n\t\tif ( !readProxyEvent( parser, attribute ) ) {\n\t\t\t\t// otherwise, it's an expression\n\t\t\treadArguments( parser, attribute, true );\n\t\t} else if ( reservedEventNames.test( attribute.f ) ) {\n\t\t\tparser.pos -= attribute.f.length;\n\t\t\tparser.error( 'Cannot use reserved event names (change, reset, teardown, update, construct, config, init, render, unrender, complete, detach, insert, destruct, attachchild, detachchild)' );\n\t\t}\n\t}\n\n\telse {\n\t\tparser.allowWhitespace();\n\t\tvar value = parser.nextChar() === '=' ? readAttributeValue( parser ) : null;\n\t\tattribute.f = value != null ? value : attribute.f;\n\n\t\tif ( parser.sanitizeEventAttributes && onPattern.test( attribute.n ) ) {\n\t\t\treturn { exclude: true };\n\t\t} else {\n\t\t\tattribute.f = attribute.f || ( attribute.f === '' ? '' : 0 );\n\t\t\tattribute.t = ATTRIBUTE;\n\t\t}\n\t}\n\n\treturn attribute;\n}\n\nfunction readProxyEvent ( parser, attribute ) {\n\tvar start = parser.pos;\n\tif ( !parser.matchString( '=' ) ) { parser.error( \""Missing required directive arguments\"" ); }\n\n\tvar quote = parser.matchString( \""'\"" ) || parser.matchString( \""\\\""\"" );\n\tparser.allowWhitespace();\n\tvar proxy = parser.matchPattern( proxyEvent );\n\n\tif ( proxy !== undefined ) {\n\t\tif ( quote ) {\n\t\t\tparser.allowWhitespace();\n\t\t\tif ( !parser.matchString( quote ) ) { parser.pos = start; }\n\t\t\telse { return ( attribute.f = proxy ) || true; }\n\t\t} else if ( !parser.matchPattern( whitespace ) ) {\n\t\t\tparser.pos = start;\n\t\t} else {\n\t\t\treturn ( attribute.f = proxy ) || true;\n\t\t}\n\t} else {\n\t\tparser.pos = start;\n\t}\n}\n\nfunction readArguments ( parser, attribute, required ) {\n\tif ( required === void 0 ) required = false;\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( '=' ) ) {\n\t\tif ( required ) { parser.error( \""Missing required directive arguments\"" ); }\n\t\treturn;\n\t}\n\tparser.allowWhitespace();\n\n\tvar quote = parser.matchString( '\""' ) || parser.matchString( \""'\"" );\n\tvar spread = parser.spreadArgs;\n\tparser.spreadArgs = true;\n\tvar exprs = readExpressionList( parser );\n\tparser.spreadArgs = spread;\n\n\tif ( quote ) {\n\t\tparser.allowWhitespace();\n\t\tif ( parser.matchString( quote ) !== quote ) { parser.error( (\""Expected matching quote '\"" + quote + \""'\"") ); }\n\t}\n\n\tattribute.f = flattenExpression({ m: exprs, t: 22 });\n}\n\nvar delimiterChangeToken = { t: DELIMCHANGE, exclude: true };\n\nfunction readMustache ( parser ) {\n\tvar mustache, i;\n\n\t// If we're inside a <script> or <style> tag, and we're not\n\t// interpolating, bug out\n\tif ( parser.interpolate[ parser.inside ] === false ) {\n\t\treturn null;\n\t}\n\n\tfor ( i = 0; i < parser.tags.length; i += 1 ) {\n\t\tif ( mustache = readMustacheOfType( parser, parser.tags[i] ) ) {\n\t\t\treturn mustache;\n\t\t}\n\t}\n\n\tif ( parser.inTag && !parser.inAttribute ) {\n\t\tmustache = readAttributeOrDirective( parser );\n\t\tif ( mustache ) {\n\t\t\tparser.allowWhitespace();\n\t\t\treturn mustache;\n\t\t}\n\t}\n}\n\nfunction readMustacheOfType ( parser, tag ) {\n\tvar mustache, reader, i;\n\n\tvar start = parser.pos;\n\n\tif ( parser.matchString( '\\\\' + tag.open ) ) {\n\t\tif ( start === 0 || parser.str[ start - 1 ] !== '\\\\' ) {\n\t\t\treturn tag.open;\n\t\t}\n\t} else if ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\t// delimiter change?\n\tif ( mustache = readDelimiterChange( parser ) ) {\n\t\t// find closing delimiter or abort...\n\t\tif ( !parser.matchString( tag.close ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// ...then make the switch\n\t\ttag.open = mustache[0];\n\t\ttag.close = mustache[1];\n\t\tparser.sortMustacheTags();\n\n\t\treturn delimiterChangeToken;\n\t}\n\n\tparser.allowWhitespace();\n\n\t// illegal section closer\n\tif ( parser.matchString( '/' ) ) {\n\t\tparser.pos -= 1;\n\t\tvar rewind = parser.pos;\n\t\tif ( !readNumberLiteral( parser ) ) {\n\t\t\tparser.pos = rewind - ( tag.close.length );\n\t\t\tif ( parser.inAttribute ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tparser.error( 'Attempted to close a section that wasn\\'t open' );\n\t\t\t}\n\t\t} else {\n\t\t\tparser.pos = rewind;\n\t\t}\n\t}\n\n\tfor ( i = 0; i < tag.readers.length; i += 1 ) {\n\t\treader = tag.readers[i];\n\n\t\tif ( mustache = reader( parser, tag ) ) {\n\t\t\tif ( tag.isStatic ) {\n\t\t\t\tmustache.s = true; // TODO make this `1` instead - more compact\n\t\t\t}\n\n\t\t\tif ( parser.includeLinePositions ) {\n\t\t\t\tmustache.p = parser.getLinePos( start );\n\t\t\t}\n\n\t\t\treturn mustache;\n\t\t}\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nfunction refineExpression ( expression, mustache ) {\n\tvar referenceExpression;\n\n\tif ( expression ) {\n\t\twhile ( expression.t === BRACKETED && expression.x ) {\n\t\t\texpression = expression.x;\n\t\t}\n\n\t\tif ( expression.t === REFERENCE ) {\n\t\t\tmustache.r = expression.n;\n\t\t} else {\n\t\t\tif ( referenceExpression = getReferenceExpression( expression ) ) {\n\t\t\t\tmustache.rx = referenceExpression;\n\t\t\t} else {\n\t\t\t\tmustache.x = flattenExpression( expression );\n\t\t\t}\n\t\t}\n\n\t\treturn mustache;\n\t}\n}\n\n// TODO refactor this! it's bewildering\nfunction getReferenceExpression ( expression ) {\n\tvar members = [];\n\tvar refinement;\n\n\twhile ( expression.t === MEMBER && expression.r.t === REFINEMENT ) {\n\t\trefinement = expression.r;\n\n\t\tif ( refinement.x ) {\n\t\t\tif ( refinement.x.t === REFERENCE ) {\n\t\t\t\tmembers.unshift( refinement.x );\n\t\t\t} else {\n\t\t\t\tmembers.unshift( flattenExpression( refinement.x ) );\n\t\t\t}\n\t\t} else {\n\t\t\tmembers.unshift( refinement.n );\n\t\t}\n\n\t\texpression = expression.x;\n\t}\n\n\tif ( expression.t !== REFERENCE ) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tr: expression.n,\n\t\tm: members\n\t};\n}\n\nfunction readTriple ( parser, tag ) {\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tvar triple = { t: TRIPLE };\n\trefineExpression( expression, triple ); // TODO handle this differently - it's mysterious\n\n\treturn triple;\n}\n\nfunction readUnescaped ( parser, tag ) {\n\tif ( !parser.matchString( '&' ) ) {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tvar triple = { t: TRIPLE };\n\trefineExpression( expression, triple ); // TODO handle this differently - it's mysterious\n\n\treturn triple;\n}\n\nvar legalAlias = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nvar asRE = /^as/i;\n\nfunction readAliases( parser ) {\n\tvar aliases = [];\n\tvar alias;\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\talias = readAlias( parser );\n\n\tif ( alias ) {\n\t\talias.x = refineExpression( alias.x, {} );\n\t\taliases.push( alias );\n\n\t\tparser.allowWhitespace();\n\n\t\twhile ( parser.matchString(',') ) {\n\t\t\talias = readAlias( parser );\n\n\t\t\tif ( !alias ) {\n\t\t\t\tparser.error( 'Expected another alias.' );\n\t\t\t}\n\n\t\t\talias.x = refineExpression( alias.x, {} );\n\t\t\taliases.push( alias );\n\n\t\t\tparser.allowWhitespace();\n\t\t}\n\n\t\treturn aliases;\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nfunction readAlias( parser ) {\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\tvar expr = readExpression( parser, [] );\n\n\tif ( !expr ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchPattern( asRE ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar alias = parser.matchPattern( legalAlias );\n\n\tif ( !alias ) {\n\t\tparser.error( 'Expected a legal alias name.' );\n\t}\n\n\treturn { n: alias, x: expr };\n}\n\nfunction readPartial ( parser, tag ) {\n\tvar type = parser.matchString( '>' ) || parser.matchString( 'yield' );\n\tvar partial = { t: type === '>' ? PARTIAL : YIELDER };\n\tvar aliases;\n\n\tif ( !type ) { return null; }\n\n\tparser.allowWhitespace();\n\n\tif ( type === '>' || !( aliases = parser.matchString( 'with' ) ) ) {\n\t\t// Partial names can include hyphens, so we can't use readExpression\n\t\t// blindly. Instead, we use the `relaxedNames` flag to indicate that\n\t\t// `foo-bar` should be read as a single name, rather than 'subtract\n\t\t// bar from foo'\n\t\tparser.relaxedNames = parser.strictRefinement = true;\n\t\tvar expression = readExpression( parser );\n\t\tparser.relaxedNames = parser.strictRefinement = false;\n\n\t\tif ( !expression && type === '>' ) { return null; }\n\n\t\tif ( expression ) {\n\t\t\trefineExpression( expression, partial ); // TODO...\n\t\t\tparser.allowWhitespace();\n\t\t\tif ( type !== '>' ) { aliases = parser.matchString( 'with' ); }\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\t// check for alias context e.g. `{{>foo bar as bat, bip as bop}}`\n\tif ( aliases || type === '>' ) {\n\t\taliases = readAliases( parser );\n\t\tif ( aliases && aliases.length ) {\n\t\t\tpartial.z = aliases;\n\t\t}\n\n\t\t// otherwise check for literal context e.g. `{{>foo bar}}` then\n\t\t// turn it into `{{#with bar}}{{>foo}}{{/with}}`\n\t\telse if ( type === '>' ) {\n\t\t\tvar context = readExpression( parser );\n\t\t\tif ( context) {\n\t\t\t\tpartial.c = {};\n\t\t\t\trefineExpression( context, partial.c );\n\t\t\t}\n\t\t}\n\n\t\telse {\n\t\t\t// {{yield with}} requires some aliases\n\t\t\tparser.error( \""Expected one or more aliases\"" );\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn partial;\n}\n\nfunction readComment ( parser, tag ) {\n\tif ( !parser.matchString( '!' ) ) {\n\t\treturn null;\n\t}\n\n\tvar index = parser.remaining().indexOf( tag.close );\n\n\tif ( index !== -1 ) {\n\t\tparser.pos += index + tag.close.length;\n\t\treturn { t: COMMENT };\n\t}\n}\n\nfunction readExpressionOrReference ( parser, expectedFollowers ) {\n\tvar start = parser.pos;\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\t// valid reference but invalid expression e.g. `{{new}}`?\n\t\tvar ref = parser.matchPattern( /^(\\w+)/ );\n\t\tif ( ref ) {\n\t\t\treturn {\n\t\t\t\tt: REFERENCE,\n\t\t\t\tn: ref\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfor ( var i = 0; i < expectedFollowers.length; i += 1 ) {\n\t\tif ( parser.remaining().substr( 0, expectedFollowers[i].length ) === expectedFollowers[i] ) {\n\t\t\treturn expression;\n\t\t}\n\t}\n\n\tparser.pos = start;\n\treturn readReference( parser );\n}\n\nfunction readInterpolator ( parser, tag ) {\n\tvar expression, err;\n\n\tvar start = parser.pos;\n\n\t// TODO would be good for perf if we could do away with the try-catch\n\ttry {\n\t\texpression = readExpressionOrReference( parser, [ tag.close ] );\n\t} catch ( e ) {\n\t\terr = e;\n\t}\n\n\tif ( !expression ) {\n\t\tif ( parser.str.charAt( start ) === '!' ) {\n\t\t\t// special case - comment\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( err ) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""' after reference\"") );\n\n\t\tif ( !expression ) {\n\t\t\t// special case - comment\n\t\t\tif ( parser.nextChar() === '!' ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tparser.error( \""Expected expression or legal reference\"" );\n\t\t}\n\t}\n\n\tvar interpolator = { t: INTERPOLATOR };\n\trefineExpression( expression, interpolator ); // TODO handle this differently - it's mysterious\n\n\treturn interpolator;\n}\n\nfunction readClosing ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '/' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar remaining = parser.remaining();\n\tvar index = remaining.indexOf( tag.close );\n\n\tif ( index !== -1 ) {\n\t\tvar closing = {\n\t\t\tt: CLOSING,\n\t\t\tr: remaining.substr( 0, index ).split( ' ' )[0]\n\t\t};\n\n\t\tparser.pos += index;\n\n\t\tif ( !parser.matchString( tag.close ) ) {\n\t\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t\t}\n\n\t\treturn closing;\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nvar elsePattern = /^\\s*else\\s*/;\n\nfunction readElse ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( elsePattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn {\n\t\tt: ELSE\n\t};\n}\n\nvar elsePattern$1 = /^\\s*elseif\\s+/;\n\nfunction readElseIf ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( elsePattern$1 ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar expression = readExpression( parser );\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn {\n\t\tt: ELSEIF,\n\t\tx: expression\n\t};\n}\n\nvar handlebarsBlockCodes = {\n\teach:    SECTION_EACH,\n\t'if':      SECTION_IF,\n\t'with':    SECTION_IF_WITH,\n\tunless:  SECTION_UNLESS\n};\n\nvar indexRefPattern = /^\\s*:\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nvar keyIndexRefPattern = /^\\s*,\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nvar handlebarsBlockPattern = new RegExp( '^(' + Object.keys( handlebarsBlockCodes ).join( '|' ) + ')\\\\b' );\n\nfunction readSection ( parser, tag ) {\n\tvar expression, section, child, children, hasElse, block, unlessBlock, closed, i, expectedClose;\n\tvar aliasOnly = false;\n\n\tvar start = parser.pos;\n\n\tif ( parser.matchString( '^' ) ) {\n\t\t// watch out for parent context refs - {{^^/^^/foo}}\n\t\tif ( parser.matchString( '^/' ) ){\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\t\tsection = { t: SECTION, f: [], n: SECTION_UNLESS };\n\t} else if ( parser.matchString( '#' ) ) {\n\t\tsection = { t: SECTION, f: [] };\n\n\t\tif ( parser.matchString( 'partial' ) ) {\n\t\t\tparser.pos = start - parser.standardDelimiters[0].length;\n\t\t\tparser.error( 'Partial definitions can only be at the top level of the template, or immediately inside components' );\n\t\t}\n\n\t\tif ( block = parser.matchPattern( handlebarsBlockPattern ) ) {\n\t\t\texpectedClose = block;\n\t\t\tsection.n = handlebarsBlockCodes[ block ];\n\t\t}\n\t} else {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( block === 'with' ) {\n\t\tvar aliases = readAliases( parser );\n\t\tif ( aliases ) {\n\t\t\taliasOnly = true;\n\t\t\tsection.z = aliases;\n\t\t\tsection.t = ALIAS;\n\t\t}\n\t} else if ( block === 'each' ) {\n\t\tvar alias = readAlias( parser );\n\t\tif ( alias ) {\n\t\t\tsection.z = [ { n: alias.n, x: { r: '.' } } ];\n\t\t\texpression = alias.x;\n\t\t}\n\t}\n\n\tif ( !aliasOnly ) {\n\t\tif ( !expression ) { expression = readExpression( parser ); }\n\n\t\tif ( !expression ) {\n\t\t\tparser.error( 'Expected expression' );\n\t\t}\n\n\t\t// optional index and key references\n\t\tif ( i = parser.matchPattern( indexRefPattern ) ) {\n\t\t\tvar extra;\n\n\t\t\tif ( extra = parser.matchPattern( keyIndexRefPattern ) ) {\n\t\t\t\tsection.i = i + ',' + extra;\n\t\t\t} else {\n\t\t\t\tsection.i = i;\n\t\t\t}\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tparser.sectionDepth += 1;\n\tchildren = section.f;\n\n\tvar pos;\n\tdo {\n\t\tpos = parser.pos;\n\t\tif ( child = readClosing( parser, tag ) ) {\n\t\t\tif ( expectedClose && child.r !== expectedClose ) {\n\t\t\t\tparser.pos = pos;\n\t\t\t\tparser.error( (\""Expected \"" + (tag.open) + \""/\"" + expectedClose + (tag.close)) );\n\t\t\t}\n\n\t\t\tparser.sectionDepth -= 1;\n\t\t\tclosed = true;\n\t\t}\n\n\t\telse if ( !aliasOnly && ( child = readElseIf( parser, tag ) ) ) {\n\t\t\tif ( section.n === SECTION_UNLESS ) {\n\t\t\t\tparser.error( '{{else}} not allowed in {{#unless}}' );\n\t\t\t}\n\n\t\t\tif ( hasElse ) {\n\t\t\t\tparser.error( 'illegal {{elseif...}} after {{else}}' );\n\t\t\t}\n\n\t\t\tif ( !unlessBlock ) {\n\t\t\t\tunlessBlock = [];\n\t\t\t}\n\n\t\t\tvar mustache = {\n\t\t\t\tt: SECTION,\n\t\t\t\tn: SECTION_IF,\n\t\t\t\tf: children = []\n\t\t\t};\n\t\t\trefineExpression( child.x, mustache );\n\n\t\t\tunlessBlock.push( mustache );\n\t\t}\n\n\t\telse if ( !aliasOnly && ( child = readElse( parser, tag ) ) ) {\n\t\t\tif ( section.n === SECTION_UNLESS ) {\n\t\t\t\tparser.error( '{{else}} not allowed in {{#unless}}' );\n\t\t\t}\n\n\t\t\tif ( hasElse ) {\n\t\t\t\tparser.error( 'there can only be one {{else}} block, at the end of a section' );\n\t\t\t}\n\n\t\t\thasElse = true;\n\n\t\t\t// use an unless block if there's no elseif\n\t\t\tif ( !unlessBlock ) {\n\t\t\t\tunlessBlock = [];\n\t\t\t}\n\n\t\t\tunlessBlock.push({\n\t\t\t\tt: SECTION,\n\t\t\t\tn: SECTION_UNLESS,\n\t\t\t\tf: children = []\n\t\t\t});\n\t\t}\n\n\t\telse {\n\t\t\tchild = parser.read( READERS );\n\n\t\t\tif ( !child ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchildren.push( child );\n\t\t}\n\t} while ( !closed );\n\n\tif ( unlessBlock ) {\n\t\tsection.l = unlessBlock;\n\t}\n\n\tif ( !aliasOnly ) {\n\t\trefineExpression( expression, section );\n\t}\n\n\t// TODO if a section is empty it should be discarded. Don't do\n\t// that here though - we need to clean everything up first, as\n\t// it may contain removeable whitespace. As a temporary measure,\n\t// to pass the existing tests, remove empty `f` arrays\n\tif ( !section.f.length ) {\n\t\tdelete section.f;\n\t}\n\n\treturn section;\n}\n\nvar OPEN_COMMENT = '<!--';\nvar CLOSE_COMMENT = '-->';\n\nfunction readHtmlComment ( parser ) {\n\tvar start = parser.pos;\n\n\tif ( parser.textOnlyMode || !parser.matchString( OPEN_COMMENT ) ) {\n\t\treturn null;\n\t}\n\n\tvar remaining = parser.remaining();\n\tvar endIndex = remaining.indexOf( CLOSE_COMMENT );\n\n\tif ( endIndex === -1 ) {\n\t\tparser.error( 'Illegal HTML - expected closing comment sequence (\\'-->\\')' );\n\t}\n\n\tvar content = remaining.substr( 0, endIndex );\n\tparser.pos += endIndex + 3;\n\n\tvar comment = {\n\t\tt: COMMENT,\n\t\tc: content\n\t};\n\n\tif ( parser.includeLinePositions ) {\n\t\tcomment.p = parser.getLinePos( start );\n\t}\n\n\treturn comment;\n}\n\nvar leadingLinebreak = /^[ \\t\\f\\r\\n]*\\r?\\n/;\nvar trailingLinebreak = /\\r?\\n[ \\t\\f\\r\\n]*$/;\n\nvar stripStandalones = function ( items ) {\n\tvar i, current, backOne, backTwo, lastSectionItem;\n\n\tfor ( i=1; i<items.length; i+=1 ) {\n\t\tcurrent = items[i];\n\t\tbackOne = items[i-1];\n\t\tbackTwo = items[i-2];\n\n\t\t// if we're at the end of a [text][comment][text] sequence...\n\t\tif ( isString( current ) && isComment( backOne ) && isString( backTwo ) ) {\n\n\t\t\t// ... and the comment is a standalone (i.e. line breaks either side)...\n\t\t\tif ( trailingLinebreak.test( backTwo ) && leadingLinebreak.test( current ) ) {\n\n\t\t\t\t// ... then we want to remove the whitespace after the first line break\n\t\t\t\titems[i-2] = backTwo.replace( trailingLinebreak, '\\n' );\n\n\t\t\t\t// and the leading line break of the second text token\n\t\t\t\titems[i] = current.replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\n\t\t// if the current item is a section, and it is preceded by a linebreak, and\n\t\t// its first item is a linebreak...\n\t\tif ( isSection( current ) && isString( backOne ) ) {\n\t\t\tif ( trailingLinebreak.test( backOne ) && isString( current.f[0] ) && leadingLinebreak.test( current.f[0] ) ) {\n\t\t\t\titems[i-1] = backOne.replace( trailingLinebreak, '\\n' );\n\t\t\t\tcurrent.f[0] = current.f[0].replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\n\t\t// if the last item was a section, and it is followed by a linebreak, and\n\t\t// its last item is a linebreak...\n\t\tif ( isString( current ) && isSection( backOne ) ) {\n\t\t\tlastSectionItem = lastItem( backOne.f );\n\n\t\t\tif ( isString( lastSectionItem ) && trailingLinebreak.test( lastSectionItem ) && leadingLinebreak.test( current ) ) {\n\t\t\t\tbackOne.f[ backOne.f.length - 1 ] = lastSectionItem.replace( trailingLinebreak, '\\n' );\n\t\t\t\titems[i] = current.replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn items;\n};\n\nfunction isString ( item ) {\n\treturn typeof item === 'string';\n}\n\nfunction isComment ( item ) {\n\treturn item.t === COMMENT || item.t === DELIMCHANGE;\n}\n\nfunction isSection ( item ) {\n\treturn ( item.t === SECTION || item.t === INVERTED ) && item.f;\n}\n\nvar trimWhitespace = function ( items, leadingPattern, trailingPattern ) {\n\tvar item;\n\n\tif ( leadingPattern ) {\n\t\titem = items[0];\n\t\tif ( typeof item === 'string' ) {\n\t\t\titem = item.replace( leadingPattern, '' );\n\n\t\t\tif ( !item ) {\n\t\t\t\titems.shift();\n\t\t\t} else {\n\t\t\t\titems[0] = item;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( trailingPattern ) {\n\t\titem = lastItem( items );\n\t\tif ( typeof item === 'string' ) {\n\t\t\titem = item.replace( trailingPattern, '' );\n\n\t\t\tif ( !item ) {\n\t\t\t\titems.pop();\n\t\t\t} else {\n\t\t\t\titems[ items.length - 1 ] = item;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar contiguousWhitespace = /[ \\t\\f\\r\\n]+/g;\nvar preserveWhitespaceElements = /^(?:pre|script|style|textarea)$/i;\nvar leadingWhitespace$1 = /^[ \\t\\f\\r\\n]+/;\nvar trailingWhitespace = /[ \\t\\f\\r\\n]+$/;\nvar leadingNewLine = /^(?:\\r\\n|\\r|\\n)/;\nvar trailingNewLine = /(?:\\r\\n|\\r|\\n)$/;\n\nfunction cleanup ( items, stripComments, preserveWhitespace, removeLeadingWhitespace, removeTrailingWhitespace ) {\n\tif ( typeof items === 'string' ) { return; }\n\n\tvar i,\n\t\titem,\n\t\tpreviousItem,\n\t\tnextItem,\n\t\tpreserveWhitespaceInsideFragment,\n\t\tremoveLeadingWhitespaceInsideFragment,\n\t\tremoveTrailingWhitespaceInsideFragment;\n\n\t// First pass - remove standalones and comments etc\n\tstripStandalones( items );\n\n\ti = items.length;\n\twhile ( i-- ) {\n\t\titem = items[i];\n\n\t\t// Remove delimiter changes, unsafe elements etc\n\t\tif ( item.exclude ) {\n\t\t\titems.splice( i, 1 );\n\t\t}\n\n\t\t// Remove comments, unless we want to keep them\n\t\telse if ( stripComments && item.t === COMMENT ) {\n\t\t\titems.splice( i, 1 );\n\t\t}\n\t}\n\n\t// If necessary, remove leading and trailing whitespace\n\ttrimWhitespace( items, removeLeadingWhitespace ? leadingWhitespace$1 : null, removeTrailingWhitespace ? trailingWhitespace : null );\n\n\ti = items.length;\n\twhile ( i-- ) {\n\t\titem = items[i];\n\n\t\t// Recurse\n\t\tif ( item.f ) {\n\t\t\tvar isPreserveWhitespaceElement = item.t === ELEMENT && preserveWhitespaceElements.test( item.e );\n\t\t\tpreserveWhitespaceInsideFragment = preserveWhitespace || isPreserveWhitespaceElement;\n\n\t\t\tif ( !preserveWhitespace && isPreserveWhitespaceElement ) {\n\t\t\t\ttrimWhitespace( item.f, leadingNewLine, trailingNewLine );\n\t\t\t}\n\n\t\t\tif ( !preserveWhitespaceInsideFragment ) {\n\t\t\t\tpreviousItem = items[ i - 1 ];\n\t\t\t\tnextItem = items[ i + 1 ];\n\n\t\t\t\t// if the previous item was a text item with trailing whitespace,\n\t\t\t\t// remove leading whitespace inside the fragment\n\t\t\t\tif ( !previousItem || ( typeof previousItem === 'string' && trailingWhitespace.test( previousItem ) ) ) {\n\t\t\t\t\tremoveLeadingWhitespaceInsideFragment = true;\n\t\t\t\t}\n\n\t\t\t\t// and vice versa\n\t\t\t\tif ( !nextItem || ( typeof nextItem === 'string' && leadingWhitespace$1.test( nextItem ) ) ) {\n\t\t\t\t\tremoveTrailingWhitespaceInsideFragment = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcleanup( item.f, stripComments, preserveWhitespaceInsideFragment, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\t\t}\n\n\t\t// Split if-else blocks into two (an if, and an unless)\n\t\tif ( item.l ) {\n\t\t\tcleanup( item.l, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\n\t\t\titem.l.forEach( function (s) { return s.l = 1; } );\n\t\t\titem.l.unshift( i + 1, 0 );\n\t\t\titems.splice.apply( items, item.l );\n\t\t\tdelete item.l; // TODO would be nice if there was a way around this\n\t\t}\n\n\t\t// Clean up conditional attributes\n\t\tif ( item.m ) {\n\t\t\tcleanup( item.m, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\t\t\tif ( item.m.length < 1 ) { delete item.m; }\n\t\t}\n\t}\n\n\t// final pass - fuse text nodes together\n\ti = items.length;\n\twhile ( i-- ) {\n\t\tif ( typeof items[i] === 'string' ) {\n\t\t\tif ( typeof items[i+1] === 'string' ) {\n\t\t\t\titems[i] = items[i] + items[i+1];\n\t\t\t\titems.splice( i + 1, 1 );\n\t\t\t}\n\n\t\t\tif ( !preserveWhitespace ) {\n\t\t\t\titems[i] = items[i].replace( contiguousWhitespace, ' ' );\n\t\t\t}\n\n\t\t\tif ( items[i] === '' ) {\n\t\t\t\titems.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar closingTagPattern = /^([a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*)\\s*\\>/;\n\nfunction readClosingTag ( parser ) {\n\tvar tag;\n\n\tvar start = parser.pos;\n\n\t// are we looking at a closing tag?\n\tif ( !parser.matchString( '</' ) ) {\n\t\treturn null;\n\t}\n\n\tif ( tag = parser.matchPattern( closingTagPattern ) ) {\n\t\tif ( parser.inside && tag !== parser.inside ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: CLOSING_TAG,\n\t\t\te: tag\n\t\t};\n\t}\n\n\t// We have an illegal closing tag, report it\n\tparser.pos -= 2;\n\tparser.error( 'Illegal closing tag' );\n}\n\nvar tagNamePattern = /^[a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*/;\nvar validTagNameFollower = /^[\\s\\n\\/>]/;\nvar exclude = { exclude: true };\n\n// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission\nvar disallowedContents = {\n\tli: [ 'li' ],\n\tdt: [ 'dt', 'dd' ],\n\tdd: [ 'dt', 'dd' ],\n\tp: 'address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul'.split( ' ' ),\n\trt: [ 'rt', 'rp' ],\n\trp: [ 'rt', 'rp' ],\n\toptgroup: [ 'optgroup' ],\n\toption: [ 'option', 'optgroup' ],\n\tthead: [ 'tbody', 'tfoot' ],\n\ttbody: [ 'tbody', 'tfoot' ],\n\ttfoot: [ 'tbody' ],\n\ttr: [ 'tr', 'tbody' ],\n\ttd: [ 'td', 'th', 'tr' ],\n\tth: [ 'td', 'th', 'tr' ]\n};\n\nfunction readElement$1 ( parser ) {\n\tvar attribute, selfClosing, children, partials, hasPartials, child, closed, pos, remaining, closingTag, anchor;\n\n\tvar start = parser.pos;\n\n\tif ( parser.inside || parser.inAttribute || parser.textOnlyMode ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( '<' ) ) {\n\t\treturn null;\n\t}\n\n\t// if this is a closing tag, abort straight away\n\tif ( parser.nextChar() === '/' ) {\n\t\treturn null;\n\t}\n\n\tvar element = {};\n\tif ( parser.includeLinePositions ) {\n\t\telement.p = parser.getLinePos( start );\n\t}\n\n\t// check for doctype decl\n\tif ( parser.matchString( '!' ) ) {\n\t\telement.t = DOCTYPE;\n\t\tif ( !parser.matchPattern( /^doctype/i ) ) {\n\t\t\tparser.error( 'Expected DOCTYPE declaration' );\n\t\t}\n\n\t\telement.a = parser.matchPattern( /^(.+?)>/ );\n\t\treturn element;\n\t}\n\t// check for anchor\n\telse if ( anchor = parser.matchString( '#' ) ) {\n\t\tparser.allowWhitespace();\n\t\telement.t = ANCHOR;\n\t\telement.n = parser.matchPattern( relaxedName );\n\t}\n\t// otherwise, it's an element/component\n\telse {\n\t\telement.t = ELEMENT;\n\n\t\t// element name\n\t\telement.e = parser.matchPattern( tagNamePattern );\n\t\tif ( !element.e ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// next character must be whitespace, closing solidus or '>'\n\tif ( !validTagNameFollower.test( parser.nextChar() ) ) {\n\t\tparser.error( 'Illegal tag name' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tparser.inTag = true;\n\n\t// directives and attributes\n\twhile ( attribute = readMustache( parser ) ) {\n\t\tif ( attribute !== false ) {\n\t\t\tif ( !element.m ) { element.m = []; }\n\t\t\telement.m.push( attribute );\n\t\t}\n\n\t\tparser.allowWhitespace();\n\t}\n\n\tparser.inTag = false;\n\n\t// allow whitespace before closing solidus\n\tparser.allowWhitespace();\n\n\t// self-closing solidus?\n\tif ( parser.matchString( '/' ) ) {\n\t\tselfClosing = true;\n\t}\n\n\t// closing angle bracket\n\tif ( !parser.matchString( '>' ) ) {\n\t\treturn null;\n\t}\n\n\tvar lowerCaseName = ( element.e || element.n ).toLowerCase();\n\tvar preserveWhitespace = parser.preserveWhitespace;\n\n\tif ( !selfClosing && ( anchor || !voidElementNames.test( element.e ) ) ) {\n\t\tif ( !anchor ) {\n\t\t\tparser.elementStack.push( lowerCaseName );\n\n\t\t\t// Special case - if we open a script element, further tags should\n\t\t\t// be ignored unless they're a closing script element\n\t\t\tif ( lowerCaseName in parser.interpolate ) {\n\t\t\t\tparser.inside = lowerCaseName;\n\t\t\t}\n\t\t}\n\n\t\tchildren = [];\n\t\tpartials = Object.create( null );\n\n\t\tdo {\n\t\t\tpos = parser.pos;\n\t\t\tremaining = parser.remaining();\n\n\t\t\tif ( !remaining ) {\n\t\t\t\tparser.error( (\""Missing end \"" + (parser.elementStack.length > 1 ? 'tags' : 'tag') + \"" (\"" + (parser.elementStack.reverse().map( function (x) { return (\""</\"" + x + \"">\""); } ).join( '' )) + \"")\"") );\n\t\t\t}\n\n\t\t\t// if for example we're in an <li> element, and we see another\n\t\t\t// <li> tag, close the first so they become siblings\n\t\t\tif ( !anchor && !canContain( lowerCaseName, remaining ) ) {\n\t\t\t\tclosed = true;\n\t\t\t}\n\n\t\t\t// closing tag\n\t\t\telse if ( !anchor && ( closingTag = readClosingTag( parser ) ) ) {\n\t\t\t\tclosed = true;\n\n\t\t\t\tvar closingTagName = closingTag.e.toLowerCase();\n\n\t\t\t\t// if this *isn't* the closing tag for the current element...\n\t\t\t\tif ( closingTagName !== lowerCaseName ) {\n\t\t\t\t\t// rewind parser\n\t\t\t\t\tparser.pos = pos;\n\n\t\t\t\t\t// if it doesn't close a parent tag, error\n\t\t\t\t\tif ( !~parser.elementStack.indexOf( closingTagName ) ) {\n\t\t\t\t\t\tvar errorMessage = 'Unexpected closing tag';\n\n\t\t\t\t\t\t// add additional help for void elements, since component names\n\t\t\t\t\t\t// might clash with them\n\t\t\t\t\t\tif ( voidElementNames.test( closingTagName ) ) {\n\t\t\t\t\t\t\terrorMessage += \"" (<\"" + closingTagName + \""> is a void element - it cannot contain children)\"";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparser.error( errorMessage );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if ( anchor && readAnchorClose( parser, element.n ) ) {\n\t\t\t\tclosed = true;\n\t\t\t}\n\n\t\t\t// implicit close by closing section tag. TODO clean this up\n\t\t\telse if ( child = readClosing( parser, { open: parser.standardDelimiters[0], close: parser.standardDelimiters[1] } ) ) {\n\t\t\t\tclosed = true;\n\t\t\t\tparser.pos = pos;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tif ( child = parser.read( PARTIAL_READERS ) ) {\n\t\t\t\t\tif ( partials[ child.n ] ) {\n\t\t\t\t\t\tparser.pos = pos;\n\t\t\t\t\t\tparser.error( 'Duplicate partial definition' );\n\t\t\t\t\t}\n\n\t\t\t\t\tcleanup( child.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );\n\n\t\t\t\t\tpartials[ child.n ] = child.f;\n\t\t\t\t\thasPartials = true;\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tif ( child = parser.read( READERS ) ) {\n\t\t\t\t\t\tchildren.push( child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} while ( !closed );\n\n\t\tif ( children.length ) {\n\t\t\telement.f = children;\n\t\t}\n\n\t\tif ( hasPartials ) {\n\t\t\telement.p = partials;\n\t\t}\n\n\t\tparser.elementStack.pop();\n\t}\n\n\tparser.inside = null;\n\n\tif ( parser.sanitizeElements && parser.sanitizeElements.indexOf( lowerCaseName ) !== -1 ) {\n\t\treturn exclude;\n\t}\n\n\treturn element;\n}\n\nfunction canContain ( name$$1, remaining ) {\n\tvar match = /^<([a-zA-Z][a-zA-Z0-9]*)/.exec( remaining );\n\tvar disallowed = disallowedContents[ name$$1 ];\n\n\tif ( !match || !disallowed ) {\n\t\treturn true;\n\t}\n\n\treturn !~disallowed.indexOf( match[1].toLowerCase() );\n}\n\nfunction readAnchorClose ( parser, name$$1 ) {\n\tvar pos = parser.pos;\n\tif ( !parser.matchString( '</' ) ) {\n\t\treturn null;\n\t}\n\n\tparser.matchString( '#' );\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( name$$1 ) ) {\n\t\tparser.pos = pos;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '>' ) ) {\n\t\tparser.pos = pos;\n\t\treturn null;\n\t}\n\n\treturn true;\n}\n\nfunction readText ( parser ) {\n\tvar index, disallowed, barrier;\n\n\tvar remaining = parser.remaining();\n\n\tif ( parser.textOnlyMode ) {\n\t\tdisallowed = parser.tags.map( function (t) { return t.open; } );\n\t\tdisallowed = disallowed.concat( parser.tags.map( function (t) { return '\\\\' + t.open; } ) );\n\n\t\tindex = getLowestIndex( remaining, disallowed );\n\t} else {\n\t\tbarrier = parser.inside ? '</' + parser.inside : '<';\n\n\t\tif ( parser.inside && !parser.interpolate[ parser.inside ] ) {\n\t\t\tindex = remaining.indexOf( barrier );\n\t\t} else {\n\t\t\tdisallowed = parser.tags.map( function (t) { return t.open; } );\n\t\t\tdisallowed = disallowed.concat( parser.tags.map( function (t) { return '\\\\' + t.open; } ) );\n\n\t\t\t// http://developers.whatwg.org/syntax.html#syntax-attributes\n\t\t\tif ( parser.inAttribute === true ) {\n\t\t\t\t// we're inside an unquoted attribute value\n\t\t\t\tdisallowed.push( \""\\\""\"", \""'\"", \""=\"", \""<\"", \"">\"", '`' );\n\t\t\t} else if ( parser.inAttribute ) {\n\t\t\t\t// quoted attribute value\n\t\t\t\tdisallowed.push( parser.inAttribute );\n\t\t\t} else {\n\t\t\t\tdisallowed.push( barrier );\n\t\t\t}\n\n\t\t\tindex = getLowestIndex( remaining, disallowed );\n\t\t}\n\t}\n\n\tif ( !index ) {\n\t\treturn null;\n\t}\n\n\tif ( index === -1 ) {\n\t\tindex = remaining.length;\n\t}\n\n\tparser.pos += index;\n\n\tif ( ( parser.inside && parser.inside !== 'textarea' ) || parser.textOnlyMode ) {\n\t\treturn remaining.substr( 0, index );\n\t} else {\n\t\treturn decodeCharacterReferences( remaining.substr( 0, index ) );\n\t}\n}\n\nvar partialDefinitionSectionPattern = /^\\s*#\\s*partial\\s+/;\n\nfunction readPartialDefinitionSection ( parser ) {\n\tvar child, closed;\n\n\tvar start = parser.pos;\n\n\tvar delimiters = parser.standardDelimiters;\n\n\tif ( !parser.matchString( delimiters[0] ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( partialDefinitionSectionPattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar name = parser.matchPattern( /^[a-zA-Z_$][a-zA-Z_$0-9\\-\\/]*/ );\n\n\tif ( !name ) {\n\t\tparser.error( 'expected legal partial name' );\n\t}\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( delimiters[1] ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (delimiters[1]) + \""'\"") );\n\t}\n\n\tvar content = [];\n\n\tvar open = delimiters[0];\n\tvar close = delimiters[1];\n\n\tdo {\n\t\tif ( child = readClosing( parser, { open: open, close: close }) ) {\n\t\t\tif ( child.r !== 'partial' ) {\n\t\t\t\tparser.error( (\""Expected \"" + open + \""/partial\"" + close) );\n\t\t\t}\n\n\t\t\tclosed = true;\n\t\t}\n\n\t\telse {\n\t\t\tchild = parser.read( READERS );\n\n\t\t\tif ( !child ) {\n\t\t\t\tparser.error( (\""Expected \"" + open + \""/partial\"" + close) );\n\t\t\t}\n\n\t\t\tcontent.push( child );\n\t\t}\n\t} while ( !closed );\n\n\treturn {\n\t\tt: INLINE_PARTIAL,\n\t\tn: name,\n\t\tf: content\n\t};\n}\n\nfunction readTemplate ( parser ) {\n\tvar fragment = [];\n\tvar partials = Object.create( null );\n\tvar hasPartials = false;\n\n\tvar preserveWhitespace = parser.preserveWhitespace;\n\n\twhile ( parser.pos < parser.str.length ) {\n\t\tvar pos = parser.pos;\n\t\tvar item = (void 0), partial = (void 0);\n\n\t\tif ( partial = parser.read( PARTIAL_READERS ) ) {\n\t\t\tif ( partials[ partial.n ] ) {\n\t\t\t\tparser.pos = pos;\n\t\t\t\tparser.error( 'Duplicated partial definition' );\n\t\t\t}\n\n\t\t\tcleanup( partial.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );\n\n\t\t\tpartials[ partial.n ] = partial.f;\n\t\t\thasPartials = true;\n\t\t} else if ( item = parser.read( READERS ) ) {\n\t\t\tfragment.push( item );\n\t\t} else  {\n\t\t\tparser.error( 'Unexpected template content' );\n\t\t}\n\t}\n\n\tvar result = {\n\t\tv: TEMPLATE_VERSION,\n\t\tt: fragment\n\t};\n\n\tif ( hasPartials ) {\n\t\tresult.p = partials;\n\t}\n\n\treturn result;\n}\n\nfunction insertExpressions ( obj, expr ) {\n\n\tObject.keys( obj ).forEach( function (key) {\n\t\tif  ( isExpression( key, obj ) ) { return addTo( obj, expr ); }\n\n\t\tvar ref = obj[ key ];\n\t\tif ( hasChildren( ref ) ) { insertExpressions( ref, expr ); }\n\t});\n}\n\nfunction isExpression( key, obj ) {\n\treturn key === 's' && Array.isArray( obj.r );\n}\n\nfunction addTo( obj, expr ) {\n\tvar s = obj.s;\n\tvar r = obj.r;\n\tif ( !expr[ s ] ) { expr[ s ] = fromExpression( s, r.length ); }\n}\n\nfunction hasChildren( ref ) {\n\treturn Array.isArray( ref ) || isObject( ref );\n}\n\n// See https://github.com/ractivejs/template-spec for information\n// about the Ractive template specification\n\nvar STANDARD_READERS = [ readPartial, readUnescaped, readSection, readInterpolator, readComment ];\nvar TRIPLE_READERS = [ readTriple ];\nvar STATIC_READERS = [ readUnescaped, readSection, readInterpolator ]; // TODO does it make sense to have a static section?\n\nvar READERS = [ readMustache, readHtmlComment, readElement$1, readText ];\nvar PARTIAL_READERS = [ readPartialDefinitionSection ];\n\nvar defaultInterpolate = [ 'script', 'style', 'template' ];\n\nvar StandardParser = Parser.extend({\n\tinit: function init ( str, options ) {\n\t\tvar this$1 = this;\n\n\t\tvar tripleDelimiters = options.tripleDelimiters || [ '{{{', '}}}' ];\n\t\tvar staticDelimiters = options.staticDelimiters || [ '[[', ']]' ];\n\t\tvar staticTripleDelimiters = options.staticTripleDelimiters || [ '[[[', ']]]' ];\n\n\t\tthis.standardDelimiters = options.delimiters || [ '{{', '}}' ];\n\n\t\tthis.tags = [\n\t\t\t{ isStatic: false, isTriple: false, open: this.standardDelimiters[0], close: this.standardDelimiters[1], readers: STANDARD_READERS },\n\t\t\t{ isStatic: false, isTriple: true,  open: tripleDelimiters[0],        close: tripleDelimiters[1],        readers: TRIPLE_READERS },\n\t\t\t{ isStatic: true,  isTriple: false, open: staticDelimiters[0],        close: staticDelimiters[1],        readers: STATIC_READERS },\n\t\t\t{ isStatic: true,  isTriple: true,  open: staticTripleDelimiters[0],  close: staticTripleDelimiters[1],  readers: TRIPLE_READERS }\n\t\t];\n\n\t\tthis.contextLines = options.contextLines || 0;\n\n\t\tthis.sortMustacheTags();\n\n\t\tthis.sectionDepth = 0;\n\t\tthis.elementStack = [];\n\n\t\tthis.interpolate = Object.create( options.interpolate || {} );\n\t\tthis.interpolate.textarea = true;\n\t\tdefaultInterpolate.forEach( function (t) { return this$1.interpolate[ t ] = !options.interpolate || options.interpolate[ t ] !== false; } );\n\n\t\tif ( options.sanitize === true ) {\n\t\t\toptions.sanitize = {\n\t\t\t\t// blacklist from https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/lang/html/html4-elements-whitelist.json\n\t\t\t\telements: 'applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title'.split( ' ' ),\n\t\t\t\teventAttributes: true\n\t\t\t};\n\t\t}\n\n\t\tthis.stripComments = options.stripComments !== false;\n\t\tthis.preserveWhitespace = options.preserveWhitespace;\n\t\tthis.sanitizeElements = options.sanitize && options.sanitize.elements;\n\t\tthis.sanitizeEventAttributes = options.sanitize && options.sanitize.eventAttributes;\n\t\tthis.includeLinePositions = options.includeLinePositions;\n\t\tthis.textOnlyMode = options.textOnlyMode;\n\t\tthis.csp = options.csp;\n\t},\n\n\tpostProcess: function postProcess ( result ) {\n\t\t// special case - empty string\n\t\tif ( !result.length ) {\n\t\t\treturn { t: [], v: TEMPLATE_VERSION };\n\t\t}\n\n\t\tif ( this.sectionDepth > 0 ) {\n\t\t\tthis.error( 'A section was left open' );\n\t\t}\n\n\t\tcleanup( result[0].t, this.stripComments, this.preserveWhitespace, !this.preserveWhitespace, !this.preserveWhitespace );\n\n\t\tif ( this.csp !== false ) {\n\t\t\tvar expr = {};\n\t\t\tinsertExpressions( result[0].t, expr );\n\t\t\tif ( Object.keys( expr ).length ) { result[0].e = expr; }\n\t\t}\n\n\t\treturn result[0];\n\t},\n\n\tconverters: [\n\t\treadTemplate\n\t],\n\n\tsortMustacheTags: function sortMustacheTags () {\n\t\t// Sort in order of descending opening delimiter length (longer first),\n\t\t// to protect against opening delimiters being substrings of each other\n\t\tthis.tags.sort( function ( a, b ) {\n\t\t\treturn b.open.length - a.open.length;\n\t\t});\n\t}\n});\n\nfunction parse$1$1 ( template, options ) {\n\treturn new StandardParser( template, options || {} ).result;\n}\n\nvar parseOptions = [\n\t'delimiters',\n\t'tripleDelimiters',\n\t'staticDelimiters',\n\t'staticTripleDelimiters',\n\t'csp',\n\t'interpolate',\n\t'preserveWhitespace',\n\t'sanitize',\n\t'stripComments',\n\t'contextLines'\n];\n\nvar TEMPLATE_INSTRUCTIONS = \""Either preparse or use a ractive runtime source that includes the parser. \"";\n\nvar COMPUTATION_INSTRUCTIONS = \""Either include a version of Ractive that can parse or convert your computation strings to functions.\"";\n\n\nfunction throwNoParse ( method, error, instructions ) {\n\tif ( !method ) {\n\t\tfatal( (\""Missing Ractive.parse - cannot parse \"" + error + \"". \"" + instructions) );\n\t}\n}\n\nfunction createFunction ( body, length ) {\n\tthrowNoParse( fromExpression, 'new expression function', TEMPLATE_INSTRUCTIONS );\n\treturn fromExpression( body, length );\n}\n\nfunction createFunctionFromString ( str, bindTo ) {\n\tthrowNoParse( fromComputationString, 'compution string \""${str}\""', COMPUTATION_INSTRUCTIONS );\n\treturn fromComputationString( str, bindTo );\n}\n\nvar parser = {\n\n\tfromId: function fromId ( id, options ) {\n\t\tif ( !doc ) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Cannot retrieve template #\"" + id + \"" as Ractive is not running in a browser.\"") );\n\t\t}\n\n\t\tif ( id ) { id = id.replace( /^#/, '' ); }\n\n\t\tvar template;\n\n\t\tif ( !( template = doc.getElementById( id ) )) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Could not find template element with id #\"" + id) );\n\t\t}\n\n\t\tif ( template.tagName.toUpperCase() !== 'SCRIPT' ) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Template element with id #\"" + id + \"", must be a <script> element\"") );\n\t\t}\n\n\t\treturn ( 'textContent' in template ? template.textContent : template.innerHTML );\n\n\t},\n\n\tisParsed: function isParsed ( template) {\n\t\treturn !( typeof template === 'string' );\n\t},\n\n\tgetParseOptions: function getParseOptions ( ractive ) {\n\t\t// Could be Ractive or a Component\n\t\tif ( ractive.defaults ) { ractive = ractive.defaults; }\n\n\t\treturn parseOptions.reduce( function ( val, key ) {\n\t\t\tval[ key ] = ractive[ key ];\n\t\t\treturn val;\n\t\t}, {});\n\t},\n\n\tparse: function parse$1 ( template, options ) {\n\t\tthrowNoParse( parse$1$1, 'template', TEMPLATE_INSTRUCTIONS );\n\t\tvar parsed = parse$1$1( template, options );\n\t\taddFunctions( parsed );\n\t\treturn parsed;\n\t},\n\n\tparseFor: function parseFor( template, ractive ) {\n\t\treturn this.parse( template, this.getParseOptions( ractive ) );\n\t}\n};\n\nvar templateConfigurator = {\n\tname: 'template',\n\n\textend: function extend ( Parent, proto, options ) {\n\t\t// only assign if exists\n\t\tif ( 'template' in options ) {\n\t\t\tvar template = options.template;\n\n\t\t\tif ( typeof template === 'function' ) {\n\t\t\t\tproto.template = template;\n\t\t\t} else {\n\t\t\t\tproto.template = parseTemplate( template, proto );\n\t\t\t}\n\t\t}\n\t},\n\n\tinit: function init ( Parent, ractive, options ) {\n\t\t// TODO because of prototypal inheritance, we might just be able to use\n\t\t// ractive.template, and not bother passing through the Parent object.\n\t\t// At present that breaks the test mocks' expectations\n\t\tvar template = 'template' in options ? options.template : Parent.prototype.template;\n\t\ttemplate = template || { v: TEMPLATE_VERSION, t: [] };\n\n\t\tif ( typeof template === 'function' ) {\n\t\t\tvar fn = template;\n\t\t\ttemplate = getDynamicTemplate( ractive, fn );\n\n\t\t\tractive._config.template = {\n\t\t\t\tfn: fn,\n\t\t\t\tresult: template\n\t\t\t};\n\t\t}\n\n\t\ttemplate = parseTemplate( template, ractive );\n\n\t\t// TODO the naming of this is confusing - ractive.template refers to [...],\n\t\t// but Component.prototype.template refers to {v:1,t:[],p:[]}...\n\t\t// it's unnecessary, because the developer never needs to access\n\t\t// ractive.template\n\t\tractive.template = template.t;\n\n\t\tif ( template.p ) {\n\t\t\textendPartials( ractive.partials, template.p );\n\t\t}\n\t},\n\n\treset: function reset ( ractive ) {\n\t\tvar result = resetValue( ractive );\n\n\t\tif ( result ) {\n\t\t\tvar parsed = parseTemplate( result, ractive );\n\n\t\t\tractive.template = parsed.t;\n\t\t\textendPartials( ractive.partials, parsed.p, true );\n\n\t\t\treturn true;\n\t\t}\n\t}\n};\n\nfunction resetValue ( ractive ) {\n\tvar initial = ractive._config.template;\n\n\t// If this isn't a dynamic template, there's nothing to do\n\tif ( !initial || !initial.fn ) {\n\t\treturn;\n\t}\n\n\tvar result = getDynamicTemplate( ractive, initial.fn );\n\n\t// TODO deep equality check to prevent unnecessary re-rendering\n\t// in the case of already-parsed templates\n\tif ( result !== initial.result ) {\n\t\tinitial.result = result;\n\t\treturn result;\n\t}\n}\n\nfunction getDynamicTemplate ( ractive, fn ) {\n\treturn fn.call( ractive, {\n\t\tfromId: parser.fromId,\n\t\tisParsed: parser.isParsed,\n\t\tparse: function parse ( template, options ) {\n\t\t\tif ( options === void 0 ) options = parser.getParseOptions( ractive );\n\n\t\t\treturn parser.parse( template, options );\n\t\t}\n\t});\n}\n\nfunction parseTemplate ( template, ractive ) {\n\tif ( typeof template === 'string' ) {\n\t\t// parse will validate and add expression functions\n\t\ttemplate = parseAsString( template, ractive );\n\t}\n\telse {\n\t\t// need to validate and add exp for already parsed template\n\t\tvalidate$1( template );\n\t\taddFunctions( template );\n\t}\n\n\treturn template;\n}\n\nfunction parseAsString ( template, ractive ) {\n\t// ID of an element containing the template?\n\tif ( template[0] === '#' ) {\n\t\ttemplate = parser.fromId( template );\n\t}\n\n\treturn parser.parseFor( template, ractive );\n}\n\nfunction validate$1( template ) {\n\n\t// Check that the template even exists\n\tif ( template == undefined ) {\n\t\tthrow new Error( (\""The template cannot be \"" + template + \"".\"") );\n\t}\n\n\t// Check the parsed template has a version at all\n\telse if ( typeof template.v !== 'number' ) {\n\t\tthrow new Error( 'The template parser was passed a non-string template, but the template doesn\\'t have a version.  Make sure you\\'re passing in the template you think you are.' );\n\t}\n\n\t// Check we're using the correct version\n\telse if ( template.v !== TEMPLATE_VERSION ) {\n\t\tthrow new Error( (\""Mismatched template version (expected \"" + TEMPLATE_VERSION + \"", got \"" + (template.v) + \"") Please ensure you are using the latest version of Ractive.js in your build process as well as in your app\"") );\n\t}\n}\n\nfunction extendPartials ( existingPartials, newPartials, overwrite ) {\n\tif ( !newPartials ) { return; }\n\n\t// TODO there's an ambiguity here - we need to overwrite in the `reset()`\n\t// case, but not initially...\n\n\tfor ( var key in newPartials ) {\n\t\tif ( overwrite || !existingPartials.hasOwnProperty( key ) ) {\n\t\t\texistingPartials[ key ] = newPartials[ key ];\n\t\t}\n\t}\n}\n\nvar registryNames = [\n\t'adaptors',\n\t'components',\n\t'computed',\n\t'decorators',\n\t'easing',\n\t'events',\n\t'interpolators',\n\t'partials',\n\t'transitions'\n];\n\nvar Registry = function Registry ( name, useDefaults ) {\n\tthis.name = name;\n\tthis.useDefaults = useDefaults;\n};\n\nRegistry.prototype.extend = function extend ( Parent, proto, options ) {\n\tthis.configure(\n\t\tthis.useDefaults ? Parent.defaults : Parent,\n\t\tthis.useDefaults ? proto : proto.constructor,\n\t\toptions );\n};\n\nRegistry.prototype.init = function init () {\n\t// noop\n};\n\nRegistry.prototype.configure = function configure ( Parent, target, options ) {\n\tvar name = this.name;\n\tvar option = options[ name ];\n\n\tvar registry = Object.create( Parent[name] );\n\n\tfor ( var key in option ) {\n\t\tregistry[ key ] = option[ key ];\n\t}\n\n\ttarget[ name ] = registry;\n};\n\nRegistry.prototype.reset = function reset ( ractive ) {\n\tvar registry = ractive[ this.name ];\n\tvar changed = false;\n\n\tObject.keys( registry ).forEach( function (key) {\n\t\tvar item = registry[ key ];\n\n\t\tif ( item._fn ) {\n\t\t\tif ( item._fn.isOwner ) {\n\t\t\t\tregistry[key] = item._fn;\n\t\t\t} else {\n\t\t\t\tdelete registry[key];\n\t\t\t}\n\t\t\tchanged = true;\n\t\t}\n\t});\n\n\treturn changed;\n};\n\nvar registries = registryNames.map( function (name) { return new Registry( name, name === 'computed' ); } );\n\nfunction wrap$1 ( parent, name, method ) {\n\tif ( !/_super/.test( method ) ) { return method; }\n\n\tfunction wrapper () {\n\t\tvar superMethod = getSuperMethod( wrapper._parent, name );\n\t\tvar hasSuper = '_super' in this;\n\t\tvar oldSuper = this._super;\n\n\t\tthis._super = superMethod;\n\n\t\tvar result = method.apply( this, arguments );\n\n\t\tif ( hasSuper ) {\n\t\t\tthis._super = oldSuper;\n\t\t} else {\n\t\t\tdelete this._super;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\twrapper._parent = parent;\n\twrapper._method = method;\n\n\treturn wrapper;\n}\n\nfunction getSuperMethod ( parent, name ) {\n\tif ( name in parent ) {\n\t\tvar value = parent[ name ];\n\n\t\treturn typeof value === 'function' ?\n\t\t\tvalue :\n\t\t\tfunction () { return value; };\n\t}\n\n\treturn noop;\n}\n\nfunction getMessage( deprecated, correct, isError ) {\n\treturn \""options.\"" + deprecated + \"" has been deprecated in favour of options.\"" + correct + \"".\""\n\t\t+ ( isError ? (\"" You cannot specify both options, please use options.\"" + correct + \"".\"") : '' );\n}\n\nfunction deprecateOption ( options, deprecatedOption, correct ) {\n\tif ( deprecatedOption in options ) {\n\t\tif( !( correct in options ) ) {\n\t\t\twarnIfDebug( getMessage( deprecatedOption, correct ) );\n\t\t\toptions[ correct ] = options[ deprecatedOption ];\n\t\t} else {\n\t\t\tthrow new Error( getMessage( deprecatedOption, correct, true ) );\n\t\t}\n\t}\n}\n\nfunction deprecate ( options ) {\n\tdeprecateOption( options, 'beforeInit', 'onconstruct' );\n\tdeprecateOption( options, 'init', 'onrender' );\n\tdeprecateOption( options, 'complete', 'oncomplete' );\n\tdeprecateOption( options, 'eventDefinitions', 'events' );\n\n\t// Using extend with Component instead of options,\n\t// like Human.extend( Spider ) means adaptors as a registry\n\t// gets copied to options. So we have to check if actually an array\n\tif ( Array.isArray( options.adaptors ) ) {\n\t\tdeprecateOption( options, 'adaptors', 'adapt' );\n\t}\n}\n\nvar custom = {\n\tadapt: adaptConfigurator,\n\tcss: cssConfigurator,\n\tdata: dataConfigurator,\n\ttemplate: templateConfigurator\n};\n\nvar defaultKeys = Object.keys( defaults );\n\nvar isStandardKey = makeObj( defaultKeys.filter( function (key) { return !custom[ key ]; } ) );\n\n// blacklisted keys that we don't double extend\nvar isBlacklisted = makeObj( defaultKeys.concat( registries.map( function (r) { return r.name; } ), [ 'on', 'observe', 'attributes' ] ) );\n\nvar order = [].concat(\n\tdefaultKeys.filter( function (key) { return !registries[ key ] && !custom[ key ]; } ),\n\tregistries,\n\t//custom.data,\n\tcustom.template,\n\tcustom.css\n);\n\nvar config = {\n\textend: function ( Parent, proto, options ) { return configure$1( 'extend', Parent, proto, options ); },\n\n\tinit: function ( Parent, ractive, options ) { return configure$1( 'init', Parent, ractive, options ); },\n\n\treset: function (ractive) {\n\t\treturn order.filter( function (c) {\n\t\t\treturn c.reset && c.reset( ractive );\n\t\t}).map( function (c) { return c.name; } );\n\t},\n\n\t// this defines the order. TODO this isn't used anywhere in the codebase,\n\t// only in the test suite - should get rid of it\n\torder: order\n};\n\nfunction configure$1 ( method, Parent, target, options ) {\n\tdeprecate( options );\n\n\tfor ( var key in options ) {\n\t\tif ( isStandardKey.hasOwnProperty( key ) ) {\n\t\t\tvar value = options[ key ];\n\n\t\t\t// warn the developer if they passed a function and ignore its value\n\n\t\t\t// NOTE: we allow some functions on \""el\"" because we duck type element lists\n\t\t\t// and some libraries or ef'ed-up virtual browsers (phantomJS) return a\n\t\t\t// function object as the result of querySelector methods\n\t\t\tif ( key !== 'el' && typeof value === 'function' ) {\n\t\t\t\twarnIfDebug( (key + \"" is a Ractive option that does not expect a function and will be ignored\""),\n\t\t\t\t\tmethod === 'init' ? target : null );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttarget[ key ] = value;\n\t\t\t}\n\t\t}\n\t}\n\n\t// disallow combination of `append` and `enhance`\n\tif ( options.append && options.enhance ) {\n\t\tthrow new Error( 'Cannot use append and enhance at the same time' );\n\t}\n\n\tregistries.forEach( function (registry) {\n\t\tregistry[ method ]( Parent, target, options );\n\t});\n\n\tadaptConfigurator[ method ]( Parent, target, options );\n\ttemplateConfigurator[ method ]( Parent, target, options );\n\tcssConfigurator[ method ]( Parent, target, options );\n\n\textendOtherMethods( Parent.prototype, target, options );\n}\n\nvar _super = /\\b_super\\b/;\nfunction extendOtherMethods ( parent, target, options ) {\n\tfor ( var key in options ) {\n\t\tif ( !isBlacklisted[ key ] && options.hasOwnProperty( key ) ) {\n\t\t\tvar member = options[ key ];\n\n\t\t\t// if this is a method that overwrites a method, wrap it:\n\t\t\tif ( typeof member === 'function' ) {\n\t\t\t\tif ( key in RactiveProto && !_super.test( member.toString() ) ) {\n\t\t\t\t\twarnIfDebug( (\""Overriding Ractive prototype function '\"" + key + \""' without calling the '\"" + _super + \""' method can be very dangerous.\"") );\n\t\t\t\t}\n\t\t\t\tmember = wrap$1( parent, key, member );\n\t\t\t}\n\n\t\t\ttarget[ key ] = member;\n\t\t}\n\t}\n}\n\nfunction makeObj ( array ) {\n\tvar obj = {};\n\tarray.forEach( function (x) { return obj[x] = true; } );\n\treturn obj;\n}\n\nvar Item = function Item ( options ) {\n\tthis.parentFragment = options.parentFragment;\n\tthis.ractive = options.parentFragment.ractive;\n\n\tthis.template = options.template;\n\tthis.index = options.index;\n\tthis.type = options.template.t;\n\n\tthis.dirty = false;\n};\n\nItem.prototype.bubble = function bubble () {\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\t\tthis.parentFragment.bubble();\n\t}\n};\n\nItem.prototype.destroyed = function destroyed () {\n\tif ( this.fragment ) { this.fragment.destroyed(); }\n};\n\nItem.prototype.find = function find () {\n\treturn null;\n};\n\nItem.prototype.findComponent = function findComponent () {\n\treturn null;\n};\n\nItem.prototype.findNextNode = function findNextNode () {\n\treturn this.parentFragment.findNextNode( this );\n};\n\nItem.prototype.shuffled = function shuffled () {\n\tif ( this.fragment ) { this.fragment.shuffled(); }\n};\n\nItem.prototype.valueOf = function valueOf () {\n\treturn this.toString();\n};\n\nItem.prototype.findAll = noop;\nItem.prototype.findAllComponents = noop;\n\nvar ContainerItem = (function (Item) {\n\tfunction ContainerItem ( options ) {\n\t\tItem.call( this, options );\n\t}\n\n\tif ( Item ) ContainerItem.__proto__ = Item;\n\tContainerItem.prototype = Object.create( Item && Item.prototype );\n\tContainerItem.prototype.constructor = ContainerItem;\n\n\tContainerItem.prototype.detach = function detach () {\n\t\treturn this.fragment ? this.fragment.detach() : createDocumentFragment();\n\t};\n\n\tContainerItem.prototype.find = function find ( selector ) {\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.find( selector );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findAll = function findAll ( selector, query ) {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAll( selector, query );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findComponent = function findComponent ( name ) {\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.findComponent( name );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAllComponents( name, query );\n\t\t}\n\t};\n\n\tContainerItem.prototype.firstNode = function firstNode ( skipParent ) {\n\t\treturn this.fragment && this.fragment.firstNode( skipParent );\n\t};\n\n\tContainerItem.prototype.toString = function toString ( escape ) {\n\t\treturn this.fragment ? this.fragment.toString( escape ) : '';\n\t};\n\n\treturn ContainerItem;\n}(Item));\n\nvar ComputationChild = (function (Model$$1) {\n\tfunction ComputationChild ( parent, key ) {\n\t\tModel$$1.call( this, parent, key );\n\n\t\tthis.isReadonly = !this.root.ractive.syncComputedChildren;\n\t\tthis.dirty = true;\n\t}\n\n\tif ( Model$$1 ) ComputationChild.__proto__ = Model$$1;\n\tComputationChild.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tComputationChild.prototype.constructor = ComputationChild;\n\n\tComputationChild.prototype.applyValue = function applyValue ( value ) {\n\t\tModel$$1.prototype.applyValue.call( this, value );\n\n\t\tif ( !this.isReadonly ) {\n\t\t\tvar source = this.parent;\n\t\t\t// computed models don't have a shuffle method\n\t\t\twhile ( source && source.shuffle ) {\n\t\t\t\tsource = source.parent;\n\t\t\t}\n\n\t\t\tif ( source ) {\n\t\t\t\tsource.dependencies.forEach( mark$1$1 );\n\t\t\t}\n\t\t}\n\t};\n\n\tComputationChild.prototype.get = function get ( shouldCapture ) {\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tvar parentValue = this.parent.get();\n\t\t\tthis.value = parentValue ? parentValue[ this.key ] : undefined;\n\t\t}\n\n\t\treturn this.value;\n\t};\n\n\tComputationChild.prototype.handleChange = function handleChange$1 () {\n\t\tthis.dirty = true;\n\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\tthis.links.forEach( marked );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( handleChange$1$1 );\n\t};\n\n\tComputationChild.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ComputationChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\treturn ComputationChild;\n}(Model));\n\n/* global console */\n/* eslint no-console:\""off\"" */\n\nvar Computation = (function (Model$$1) {\n\tfunction Computation ( viewmodel, signature, key ) {\n\t\tModel$$1.call( this, null, null );\n\n\t\tthis.root = this.parent = viewmodel;\n\t\tthis.signature = signature;\n\n\t\tthis.key = key; // not actually used, but helps with debugging\n\t\tthis.isExpression = key && key[0] === '@';\n\n\t\tthis.isReadonly = !this.signature.setter;\n\n\t\tthis.context = viewmodel.computationContext;\n\n\t\tthis.dependencies = [];\n\n\t\tthis.children = [];\n\t\tthis.childByKey = {};\n\n\t\tthis.deps = [];\n\n\t\tthis.dirty = true;\n\n\t\t// TODO: is there a less hackish way to do this?\n\t\tthis.shuffle = undefined;\n\t}\n\n\tif ( Model$$1 ) Computation.__proto__ = Model$$1;\n\tComputation.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tComputation.prototype.constructor = Computation;\n\n\tComputation.prototype.get = function get ( shouldCapture ) {\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tvar old = this.value;\n\t\t\tthis.value = this.getValue();\n\t\t\tif ( !isEqual( old, this.value ) ) { this.notifyUpstream(); }\n\t\t\tif ( this.wrapper ) { this.newWrapperValue = this.value; }\n\t\t\tthis.adapt();\n\t\t}\n\n\t\t// if capturing, this value needs to be unwrapped because it's for external use\n\t\treturn maybeBind( this, shouldCapture && this.wrapper ? this.wrapperValue : this.value );\n\t};\n\n\tComputation.prototype.getValue = function getValue () {\n\t\tstartCapturing();\n\t\tvar result;\n\n\t\ttry {\n\t\t\tresult = this.signature.getter.call( this.context );\n\t\t} catch ( err ) {\n\t\t\twarnIfDebug( (\""Failed to compute \"" + (this.getKeypath()) + \"": \"" + (err.message || err)) );\n\n\t\t\t// TODO this is all well and good in Chrome, but...\n\t\t\t// ...also, should encapsulate this stuff better, and only\n\t\t\t// show it if Ractive.DEBUG\n\t\t\tif ( hasConsole ) {\n\t\t\t\tif ( console.groupCollapsed ) { console.groupCollapsed( '%cshow details', 'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;' ); }\n\t\t\t\tvar sig = this.signature;\n\t\t\t\tconsole.error( ((err.name) + \"": \"" + (err.message) + \""\\n\\n\"" + (sig.getterString) + (sig.getterUseStack ? '\\n\\n' + err.stack : '')) );\n\t\t\t\tif ( console.groupCollapsed ) { console.groupEnd(); }\n\t\t\t}\n\t\t}\n\n\t\tvar dependencies = stopCapturing();\n\t\tthis.setDependencies( dependencies );\n\n\t\treturn result;\n\t};\n\n\tComputation.prototype.mark = function mark () {\n\t\tthis.handleChange();\n\t};\n\n\tComputation.prototype.rebind = function rebind ( next, previous ) {\n\t\t// computations will grab all of their deps again automagically\n\t\tif ( next !== previous ) { this.handleChange(); }\n\t};\n\n\tComputation.prototype.set = function set ( value ) {\n\t\tif ( this.isReadonly ) {\n\t\t\tthrow new Error( (\""Cannot set read-only computed value '\"" + (this.key) + \""'\"") );\n\t\t}\n\n\t\tthis.signature.setter( value );\n\t\tthis.mark();\n\t};\n\n\tComputation.prototype.setDependencies = function setDependencies ( dependencies ) {\n\t\tvar this$1 = this;\n\n\t\t// unregister any soft dependencies we no longer have\n\t\tvar i = this.dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tvar model = this$1.dependencies[i];\n\t\t\tif ( !~dependencies.indexOf( model ) ) { model.unregister( this$1 ); }\n\t\t}\n\n\t\t// and add any new ones\n\t\ti = dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tvar model$1 = dependencies[i];\n\t\t\tif ( !~this$1.dependencies.indexOf( model$1 ) ) { model$1.register( this$1 ); }\n\t\t}\n\n\t\tthis.dependencies = dependencies;\n\t};\n\n\tComputation.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tvar i = this.dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this$1.dependencies[i] ) { this$1.dependencies[i].unregister( this$1 ); }\n\t\t}\n\t\tif ( this.root.computations[this.key] === this ) { delete this.root.computations[this.key]; }\n\t\tModel$$1.prototype.teardown.call(this);\n\t};\n\n\treturn Computation;\n}(Model));\n\nvar prototype$1 = Computation.prototype;\nvar child = ComputationChild.prototype;\nprototype$1.handleChange = child.handleChange;\nprototype$1.joinKey = child.joinKey;\n\nvar ExpressionProxy = (function (Model$$1) {\n\tfunction ExpressionProxy ( fragment, template ) {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.call( this, fragment.ractive.viewmodel, null );\n\n\t\tthis.fragment = fragment;\n\t\tthis.template = template;\n\n\t\tthis.isReadonly = true;\n\t\tthis.dirty = true;\n\n\t\tthis.fn = getFunction( template.s, template.r.length );\n\n\t\tthis.models = this.template.r.map( function (ref) {\n\t\t\treturn resolveReference( this$1.fragment, ref );\n\t\t});\n\t\tthis.dependencies = [];\n\n\t\tthis.shuffle = undefined;\n\n\t\tthis.bubble();\n\t}\n\n\tif ( Model$$1 ) ExpressionProxy.__proto__ = Model$$1;\n\tExpressionProxy.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tExpressionProxy.prototype.constructor = ExpressionProxy;\n\n\tExpressionProxy.prototype.bubble = function bubble ( actuallyChanged ) {\n\t\tif ( actuallyChanged === void 0 ) actuallyChanged = true;\n\n\t\t// refresh the keypath\n\t\tthis.keypath = undefined;\n\n\t\tif ( actuallyChanged ) {\n\t\t\tthis.handleChange();\n\t\t}\n\t};\n\n\tExpressionProxy.prototype.getKeypath = function getKeypath () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.template ) { return '@undefined'; }\n\t\tif ( !this.keypath ) {\n\t\t\tthis.keypath = '@' + this.template.s.replace( /_(\\d+)/g, function ( match, i ) {\n\t\t\t\tif ( i >= this$1.models.length ) { return match; }\n\n\t\t\t\tvar model = this$1.models[i];\n\t\t\t\treturn model ? model.getKeypath() : '@undefined';\n\t\t\t});\n\t\t}\n\n\t\treturn this.keypath;\n\t};\n\n\tExpressionProxy.prototype.getValue = function getValue () {\n\t\tvar this$1 = this;\n\n\t\tstartCapturing();\n\t\tvar result;\n\n\t\ttry {\n\t\t\tvar params = this.models.map( function (m) { return m ? m.get( true ) : undefined; } );\n\t\t\tresult = this.fn.apply( this.fragment.ractive, params );\n\t\t} catch ( err ) {\n\t\t\twarnIfDebug( (\""Failed to compute \"" + (this.getKeypath()) + \"": \"" + (err.message || err)) );\n\t\t}\n\n\t\tvar dependencies = stopCapturing();\n\t\t// remove missing deps\n\t\tthis.dependencies.filter( function (d) { return !~dependencies.indexOf( d ); } ).forEach( function (d) {\n\t\t\td.unregister( this$1 );\n\t\t\tremoveFromArray( this$1.dependencies, d );\n\t\t});\n\t\t// register new deps\n\t\tdependencies.filter( function (d) { return !~this$1.dependencies.indexOf( d ); } ).forEach( function (d) {\n\t\t\td.register( this$1 );\n\t\t\tthis$1.dependencies.push( d );\n\t\t});\n\n\t\treturn result;\n\t};\n\n\tExpressionProxy.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tvar idx = this.models.indexOf( previous );\n\n\t\tif ( ~idx ) {\n\t\t\tnext = rebindMatch( this.template.r[idx], next, previous );\n\t\t\tif ( next !== previous ) {\n\t\t\t\tprevious.unregister( this );\n\t\t\t\tthis.models.splice( idx, 1, next );\n\t\t\t\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\t\t\t}\n\t\t}\n\t\tthis.bubble( !safe );\n\t};\n\n\tExpressionProxy.prototype.retrieve = function retrieve () {\n\t\treturn this.get();\n\t};\n\n\tExpressionProxy.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tthis.unbind();\n\t\tthis.fragment = undefined;\n\t\tif ( this.dependencies ) { this.dependencies.forEach( function (d) { return d.unregister( this$1 ); } ); }\n\t\tModel$$1.prototype.teardown.call(this);\n\t};\n\n\tExpressionProxy.prototype.unregister = function unregister ( dep ) {\n\t\tModel$$1.prototype.unregister.call( this, dep );\n\t\tif ( !this.deps.length ) { this.teardown(); }\n\t};\n\n\treturn ExpressionProxy;\n}(Model));\n\nvar prototype = ExpressionProxy.prototype;\nvar computation = Computation.prototype;\nprototype.get = computation.get;\nprototype.handleChange = computation.handleChange;\nprototype.joinKey = computation.joinKey;\nprototype.mark = computation.mark;\nprototype.unbind = noop;\n\nvar ReferenceExpressionChild = (function (Model$$1) {\n\tfunction ReferenceExpressionChild ( parent, key ) {\n\t\tModel$$1.call ( this, parent, key );\n\t}\n\n\tif ( Model$$1 ) ReferenceExpressionChild.__proto__ = Model$$1;\n\tReferenceExpressionChild.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tReferenceExpressionChild.prototype.constructor = ReferenceExpressionChild;\n\n\tReferenceExpressionChild.prototype.applyValue = function applyValue ( value ) {\n\t\tif ( isEqual( value, this.value ) ) { return; }\n\n\t\tvar parent = this.parent;\n\t\tvar keys = [ this.key ];\n\t\twhile ( parent ) {\n\t\t\tif ( parent.base ) {\n\t\t\t\tvar target = parent.model.joinAll( keys );\n\t\t\t\ttarget.applyValue( value );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tkeys.unshift( parent.key );\n\n\t\t\tparent = parent.parent;\n\t\t}\n\t};\n\n\tReferenceExpressionChild.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ReferenceExpressionChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tReferenceExpressionChild.prototype.retrieve = function retrieve () {\n\t\tvar parent = this.parent.get();\n\t\treturn parent && parent[ this.key ];\n\t};\n\n\treturn ReferenceExpressionChild;\n}(Model));\n\nvar ReferenceExpressionProxy = (function (Model$$1) {\n\tfunction ReferenceExpressionProxy ( fragment, template ) {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.call( this, null, null );\n\t\tthis.dirty = true;\n\t\tthis.root = fragment.ractive.viewmodel;\n\t\tthis.template = template;\n\n\t\tthis.base = resolve$1( fragment, template );\n\n\t\tvar intermediary = this.intermediary = {\n\t\t\thandleChange: function () { return this$1.handleChange(); },\n\t\t\trebind: function ( next, previous ) {\n\t\t\t\tif ( previous === this$1.base ) {\n\t\t\t\t\tnext = rebindMatch( template, next, previous );\n\t\t\t\t\tif ( next !== this$1.base ) {\n\t\t\t\t\t\tthis$1.base.unregister( intermediary );\n\t\t\t\t\t\tthis$1.base = next;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar idx = this$1.members.indexOf( previous );\n\t\t\t\t\tif ( ~idx ) {\n\t\t\t\t\t\t// only direct references will rebind... expressions handle themselves\n\t\t\t\t\t\tnext = rebindMatch( template.m[idx].n, next, previous );\n\t\t\t\t\t\tif ( next !== this$1.members[idx] ) {\n\t\t\t\t\t\t\tthis$1.members.splice( idx, 1, next );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( next !== previous ) { previous.unregister( intermediary ); }\n\t\t\t\tif ( next ) { next.addShuffleTask( function () { return next.register( intermediary ); } ); }\n\n\t\t\t\tthis$1.bubble();\n\t\t\t}\n\t\t};\n\n\t\tthis.members = template.m.map( function ( template ) {\n\t\t\tif ( typeof template === 'string' ) {\n\t\t\t\treturn { get: function () { return template; } };\n\t\t\t}\n\n\t\t\tvar model;\n\n\t\t\tif ( template.t === REFERENCE ) {\n\t\t\t\tmodel = resolveReference( fragment, template.n );\n\t\t\t\tmodel.register( intermediary );\n\n\t\t\t\treturn model;\n\t\t\t}\n\n\t\t\tmodel = new ExpressionProxy( fragment, template );\n\t\t\tmodel.register( intermediary );\n\t\t\treturn model;\n\t\t});\n\n\t\tthis.bubble();\n\t}\n\n\tif ( Model$$1 ) ReferenceExpressionProxy.__proto__ = Model$$1;\n\tReferenceExpressionProxy.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tReferenceExpressionProxy.prototype.constructor = ReferenceExpressionProxy;\n\n\tReferenceExpressionProxy.prototype.bubble = function bubble () {\n\t\tif ( !this.base ) { return; }\n\t\tif ( !this.dirty ) { this.handleChange(); }\n\t};\n\n\tReferenceExpressionProxy.prototype.get = function get ( shouldCapture ) {\n\t\tif ( this.dirty ) {\n\t\t\tthis.bubble();\n\n\t\t\tvar keys = this.members.map( function (m) { return escapeKey( String( m.get() ) ); } );\n\t\t\tvar model = this.base.joinAll( keys );\n\n\t\t\tif ( model !== this.model ) {\n\t\t\t\tif ( this.model ) {\n\t\t\t\t\tthis.model.unregister( this );\n\t\t\t\t\tthis.model.unregisterTwowayBinding( this );\n\t\t\t\t}\n\n\t\t\t\tthis.model = model;\n\t\t\t\tthis.parent = model.parent;\n\t\t\t\tthis.model.register( this );\n\t\t\t\tthis.model.registerTwowayBinding( this );\n\n\t\t\t\tif ( this.keypathModel ) { this.keypathModel.handleChange(); }\n\t\t\t}\n\n\t\t\tthis.value = this.model.get( shouldCapture );\n\t\t\tthis.dirty = false;\n\t\t\tthis.mark();\n\t\t\treturn this.value;\n\t\t} else {\n\t\t\treturn this.model ? this.model.get( shouldCapture ) : undefined;\n\t\t}\n\t};\n\n\t// indirect two-way bindings\n\tReferenceExpressionProxy.prototype.getValue = function getValue () {\n\t\tvar this$1 = this;\n\n\t\tthis.value = this.model ? this.model.get() : undefined;\n\n\t\tvar i = this.bindings.length;\n\t\twhile ( i-- ) {\n\t\t\tvar value = this$1.bindings[i].getValue();\n\t\t\tif ( value !== this$1.value ) { return value; }\n\t\t}\n\n\t\t// check one-way bindings\n\t\tvar oneway = findBoundValue( this.deps );\n\t\tif ( oneway ) { return oneway.value; }\n\n\t\treturn this.value;\n\t};\n\n\tReferenceExpressionProxy.prototype.getKeypath = function getKeypath () {\n\t\treturn this.model ? this.model.getKeypath() : '@undefined';\n\t};\n\n\tReferenceExpressionProxy.prototype.handleChange = function handleChange$1 () {\n\t\tthis.dirty = true;\n\t\tthis.mark();\n\t};\n\n\tReferenceExpressionProxy.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ReferenceExpressionChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tReferenceExpressionProxy.prototype.mark = function mark$1 () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.deps.forEach( handleChange$1$1 );\n\t\t}\n\n\t\tthis.links.forEach( marked );\n\t\tthis.children.forEach( mark$1$1 );\n\t};\n\n\tReferenceExpressionProxy.prototype.retrieve = function retrieve () {\n\t\treturn this.value;\n\t};\n\n\tReferenceExpressionProxy.prototype.set = function set ( value ) {\n\t\tthis.model.set( value );\n\t};\n\n\tReferenceExpressionProxy.prototype.unbind = function unbind () {\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t\tthis.model.unregisterTwowayBinding( this );\n\t\t}\n\t};\n\n\treturn ReferenceExpressionProxy;\n}(Model));\n\nReferenceExpressionProxy.prototype.rebind = noop;\n\nfunction resolve$1 ( fragment, template ) {\n\tif ( template.r ) {\n\t\treturn resolveReference( fragment, template.r );\n\t}\n\n\telse if ( template.x ) {\n\t\treturn new ExpressionProxy( fragment, template.x );\n\t}\n\n\telse if ( template.rx ) {\n\t\treturn new ReferenceExpressionProxy( fragment, template.rx );\n\t}\n}\n\nfunction resolveAliases( aliases, fragment ) {\n\tvar resolved = {};\n\n\tfor ( var i = 0; i < aliases.length; i++ ) {\n\t\tresolved[ aliases[i].n ] = resolve$1( fragment, aliases[i].x );\n\t}\n\n\treturn resolved;\n}\n\nvar Alias = (function (ContainerItem$$1) {\n\tfunction Alias ( options ) {\n\t\tContainerItem$$1.call( this, options );\n\n\t\tthis.fragment = null;\n\t}\n\n\tif ( ContainerItem$$1 ) Alias.__proto__ = ContainerItem$$1;\n\tAlias.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tAlias.prototype.constructor = Alias;\n\n\tAlias.prototype.bind = function bind () {\n\t\tthis.fragment = new Fragment({\n\t\t\towner: this,\n\t\t\ttemplate: this.template.f\n\t\t});\n\n\t\tthis.fragment.aliases = resolveAliases( this.template.z, this.parentFragment );\n\t\tthis.fragment.bind();\n\t};\n\n\tAlias.prototype.render = function render ( target ) {\n\t\tthis.rendered = true;\n\t\tif ( this.fragment ) { this.fragment.render( target ); }\n\t};\n\n\tAlias.prototype.unbind = function unbind () {\n\t\tthis.fragment.aliases = {};\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tAlias.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }\n\t\tthis.rendered = false;\n\t};\n\n\tAlias.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tthis.fragment.update();\n\t\t}\n\t};\n\n\treturn Alias;\n}(ContainerItem));\n\nfunction findElement( start, orComponent, name ) {\n\tif ( orComponent === void 0 ) orComponent = true;\n\n\twhile ( start && ( start.type !== ELEMENT || ( name && start.name !== name ) ) && ( !orComponent || ( start.type !== COMPONENT && start.type !== ANCHOR ) ) ) {\n\t\t// start is a fragment - look at the owner\n\t\tif ( start.owner ) { start = start.owner; }\n\t\t// start is a component or yielder - look at the container\n\t\telse if ( start.component ) { start = start.containerFragment || start.component.parentFragment; }\n\t\t// start is an item - look at the parent\n\t\telse if ( start.parent ) { start = start.parent; }\n\t\t// start is an item without a parent - look at the parent fragment\n\t\telse if ( start.parentFragment ) { start = start.parentFragment; }\n\n\t\telse { start = undefined; }\n\t}\n\n\treturn start;\n}\n\nvar space = /\\s+/;\n\nfunction readStyle ( css ) {\n\tif ( typeof css !== 'string' ) { return {}; }\n\n\treturn cleanCss( css, function ( css, reconstruct ) {\n\t\treturn css.split( ';' )\n\t\t\t.filter( function (rule) { return !!rule.trim(); } )\n\t\t\t.map( reconstruct )\n\t\t\t.reduce(function ( rules, rule ) {\n\t\t\t\tvar i = rule.indexOf(':');\n\t\t\t\tvar name = rule.substr( 0, i ).trim();\n\t\t\t\trules[ name ] = rule.substr( i + 1 ).trim();\n\t\t\t\treturn rules;\n\t\t\t}, {});\n\t});\n}\n\nfunction readClass ( str ) {\n\tvar list = str.split( space );\n\n  // remove any empty entries\n\tvar i = list.length;\n\twhile ( i-- ) {\n\t\tif ( !list[i] ) { list.splice( i, 1 ); }\n\t}\n\n\treturn list;\n}\n\nvar hyphenateCamel = function ( camelCaseStr ) {\n\treturn camelCaseStr.replace( /([A-Z])/g, function ( match, $1 ) {\n\t\treturn '-' + $1.toLowerCase();\n\t});\n};\n\nvar textTypes = [ undefined, 'text', 'search', 'url', 'email', 'hidden', 'password', 'search', 'reset', 'submit' ];\n\nfunction getUpdateDelegate ( attribute ) {\n\tvar element = attribute.element;\n\tvar name = attribute.name;\n\n\tif ( name === 'value' ) {\n\t\tif ( attribute.interpolator ) { attribute.interpolator.bound = true; }\n\n\t\t// special case - selects\n\t\tif ( element.name === 'select' && name === 'value' ) {\n\t\t\treturn element.getAttribute( 'multiple' ) ? updateMultipleSelectValue : updateSelectValue;\n\t\t}\n\n\t\tif ( element.name === 'textarea' ) { return updateStringValue; }\n\n\t\t// special case - contenteditable\n\t\tif ( element.getAttribute( 'contenteditable' ) != null ) { return updateContentEditableValue; }\n\n\t\t// special case - <input>\n\t\tif ( element.name === 'input' ) {\n\t\t\tvar type = element.getAttribute( 'type' );\n\n\t\t\t// type='file' value='{{fileList}}'>\n\t\t\tif ( type === 'file' ) { return noop; } // read-only\n\n\t\t\t// type='radio' name='{{twoway}}'\n\t\t\tif ( type === 'radio' && element.binding && element.binding.attribute.name === 'name' ) { return updateRadioValue; }\n\n\t\t\tif ( ~textTypes.indexOf( type ) ) { return updateStringValue; }\n\t\t}\n\n\t\treturn updateValue;\n\t}\n\n\tvar node = element.node;\n\n\t// special case - <input type='radio' name='{{twoway}}' value='foo'>\n\tif ( attribute.isTwoway && name === 'name' ) {\n\t\tif ( node.type === 'radio' ) { return updateRadioName; }\n\t\tif ( node.type === 'checkbox' ) { return updateCheckboxName; }\n\t}\n\n\tif ( name === 'style' ) { return updateStyleAttribute; }\n\n\tif ( name.indexOf( 'style-' ) === 0 ) { return updateInlineStyle; }\n\n\t// special case - class names. IE fucks things up, again\n\tif ( name === 'class' && ( !node.namespaceURI || node.namespaceURI === html ) ) { return updateClassName; }\n\n\tif ( name.indexOf( 'class-' ) === 0 ) { return updateInlineClass; }\n\n\tif ( attribute.isBoolean ) {\n\t\tvar type$1 = element.getAttribute( 'type' );\n\t\tif ( attribute.interpolator && name === 'checked' && ( type$1 === 'checkbox' || type$1 === 'radio' ) ) { attribute.interpolator.bound = true; }\n\t\treturn updateBoolean;\n\t}\n\n\tif ( attribute.namespace && attribute.namespace !== attribute.node.namespaceURI ) { return updateNamespacedAttribute; }\n\n\treturn updateAttribute;\n}\n\nfunction updateMultipleSelectValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !Array.isArray( value ) ) { value = [ value ]; }\n\n\tvar options = this.node.options;\n\tvar i = options.length;\n\n\tif ( reset ) {\n\t\twhile ( i-- ) { options[i].selected = false; }\n\t} else {\n\t\twhile ( i-- ) {\n\t\t\tvar option = options[i];\n\t\t\tvar optionValue = option._ractive ?\n\t\t\t\toption._ractive.value :\n\t\t\t\toption.value; // options inserted via a triple don't have _ractive\n\n\t\t\toption.selected = arrayContains( value, optionValue );\n\t\t}\n\t}\n}\n\nfunction updateSelectValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !this.locked ) { // TODO is locked still a thing?\n\t\tthis.node._ractive.value = value;\n\n\t\tvar options = this.node.options;\n\t\tvar i = options.length;\n\t\tvar wasSelected = false;\n\n\t\tif ( reset ) {\n\t\t\twhile ( i-- ) { options[i].selected = false; }\n\t\t} else {\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar option = options[i];\n\t\t\t\tvar optionValue = option._ractive ?\n\t\t\t\t\toption._ractive.value :\n\t\t\t\t\toption.value; // options inserted via a triple don't have _ractive\n\t\t\t\tif ( option.disabled && option.selected ) { wasSelected = true; }\n\n\t\t\t\tif ( optionValue == value ) { // double equals as we may be comparing numbers with strings\n\t\t\t\t\toption.selected = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !wasSelected ) { this.node.selectedIndex = -1; }\n\t}\n}\n\n\nfunction updateContentEditableValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !this.locked ) {\n\t\tif ( reset ) { this.node.innerHTML = ''; }\n\t\telse { this.node.innerHTML = value === undefined ? '' : value; }\n\t}\n}\n\nfunction updateRadioValue ( reset ) {\n\tvar node = this.node;\n\tvar wasChecked = node.checked;\n\n\tvar value = this.getValue();\n\n\tif ( reset ) { return node.checked = false; }\n\n\t//node.value = this.element.getAttribute( 'value' );\n\tnode.value = this.node._ractive.value = value;\n\tnode.checked = value === this.element.getAttribute( 'name' );\n\n\t// This is a special case - if the input was checked, and the value\n\t// changed so that it's no longer checked, the twoway binding is\n\t// most likely out of date. To fix it we have to jump through some\n\t// hoops... this is a little kludgy but it works\n\tif ( wasChecked && !node.checked && this.element.binding && this.element.binding.rendered ) {\n\t\tthis.element.binding.group.model.set( this.element.binding.group.getValue() );\n\t}\n}\n\nfunction updateValue ( reset ) {\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tthis.node.removeAttribute( 'value' );\n\t\t\tthis.node.value = this.node._ractive.value = null;\n\t\t} else {\n\t\t\tvar value = this.getValue();\n\n\t\t\tthis.node.value = this.node._ractive.value = value;\n\t\t\tthis.node.setAttribute( 'value', value );\n\t\t}\n\t}\n}\n\nfunction updateStringValue ( reset ) {\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tthis.node._ractive.value = '';\n\t\t\tthis.node.removeAttribute( 'value' );\n\t\t} else {\n\t\t\tvar value = this.getValue();\n\n\t\t\tthis.node._ractive.value = value;\n\n\t\t\tthis.node.value = safeToStringValue( value );\n\t\t\tthis.node.setAttribute( 'value', safeToStringValue( value ) );\n\t\t}\n\t}\n}\n\nfunction updateRadioName ( reset ) {\n\tif ( reset ) { this.node.checked = false; }\n\telse { this.node.checked = ( this.getValue() == this.node._ractive.value ); }\n}\n\nfunction updateCheckboxName ( reset ) {\n\tvar ref = this;\n\tvar element = ref.element;\n\tvar node = ref.node;\n\tvar binding = element.binding;\n\n\tvar value = this.getValue();\n\tvar valueAttribute = element.getAttribute( 'value' );\n\n\tif ( reset ) {\n\t\t// TODO: WAT?\n\t}\n\n\tif ( !Array.isArray( value ) ) {\n\t\tbinding.isChecked = node.checked = ( value == valueAttribute );\n\t} else {\n\t\tvar i = value.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( valueAttribute == value[i] ) {\n\t\t\t\tbinding.isChecked = node.checked = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tbinding.isChecked = node.checked = false;\n\t}\n}\n\nfunction updateStyleAttribute ( reset ) {\n\tvar props = reset ? {} : readStyle( this.getValue() || '' );\n\tvar style = this.node.style;\n\tvar keys = Object.keys( props );\n\tvar prev = this.previous || [];\n\n\tvar i = 0;\n\twhile ( i < keys.length ) {\n\t\tif ( keys[i] in style ) {\n\t\t\tvar safe = props[ keys[i] ].replace( '!important', '' );\n\t\t\tstyle.setProperty( keys[i], safe, safe.length !== props[ keys[i] ].length ? 'important' : '' );\n\t\t}\n\t\ti++;\n\t}\n\n\t// remove now-missing attrs\n\ti = prev.length;\n\twhile ( i-- ) {\n\t\tif ( !~keys.indexOf( prev[i] ) && prev[i] in style ) { style.setProperty( prev[i], '', '' ); }\n\t}\n\n\tthis.previous = keys;\n}\n\nfunction updateInlineStyle ( reset ) {\n\tif ( !this.style ) {\n\t\tthis.style = hyphenateCamel( this.name.substr( 6 ) );\n\t}\n\n\tvar value = reset ? '' : safeToStringValue( this.getValue() );\n\tvar safe = value.replace( '!important', '' );\n\tthis.node.style.setProperty( this.style, safe, safe.length !== value.length ? 'important' : '' );\n}\n\nfunction updateClassName ( reset ) {\n\tvar value = reset ? [] : readClass( safeToStringValue( this.getValue() ) );\n\tvar attr = readClass( this.node.className );\n\tvar prev = this.previous || attr.slice( 0 );\n\n\tvar i = 0;\n\twhile ( i < value.length ) {\n\t\tif ( !~attr.indexOf( value[i] ) ) { attr.push( value[i] ); }\n\t\ti++;\n\t}\n\n\t// remove now-missing classes\n\ti = prev.length;\n\twhile ( i-- ) {\n\t\tif ( !~value.indexOf( prev[i] ) ) {\n\t\t\tvar idx = attr.indexOf( prev[i] );\n\t\t\tif ( ~idx ) { attr.splice( idx, 1 ); }\n\t\t}\n\t}\n\n\tvar className = attr.join( ' ' );\n\n\tif ( className !== this.node.className ) {\n\t\tthis.node.className = className;\n\t}\n\n\tthis.previous = value;\n}\n\nfunction updateInlineClass ( reset ) {\n\tvar name = this.name.substr( 6 );\n\tvar attr = readClass( this.node.className );\n\tvar value = reset ? false : this.getValue();\n\n\tif ( !this.inlineClass ) { this.inlineClass = name; }\n\n\tif ( value && !~attr.indexOf( name ) ) { attr.push( name ); }\n\telse if ( !value && ~attr.indexOf( name ) ) { attr.splice( attr.indexOf( name ), 1 ); }\n\n\tthis.node.className = attr.join( ' ' );\n}\n\nfunction updateBoolean ( reset ) {\n\t// with two-way binding, only update if the change wasn't initiated by the user\n\t// otherwise the cursor will often be sent to the wrong place\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tif ( this.useProperty ) { this.node[ this.propertyName ] = false; }\n\t\t\tthis.node.removeAttribute( this.propertyName );\n\t\t} else {\n\t\t\tif ( this.useProperty ) {\n\t\t\t\tthis.node[ this.propertyName ] = this.getValue();\n\t\t\t} else {\n\t\t\t\tif ( this.getValue() ) {\n\t\t\t\t\tthis.node.setAttribute( this.propertyName, '' );\n\t\t\t\t} else {\n\t\t\t\t\tthis.node.removeAttribute( this.propertyName );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction updateAttribute ( reset ) {\n\tif ( reset ) { this.node.removeAttribute( this.name ); }\n\telse { this.node.setAttribute( this.name, safeToStringValue( this.getString() ) ); }\n}\n\nfunction updateNamespacedAttribute ( reset ) {\n\tif ( reset ) { this.node.removeAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ) ); }\n\telse { this.node.setAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ), safeToStringValue( this.getString() ) ); }\n}\n\nvar propertyNames = {\n\t'accept-charset': 'acceptCharset',\n\taccesskey: 'accessKey',\n\tbgcolor: 'bgColor',\n\t'class': 'className',\n\tcodebase: 'codeBase',\n\tcolspan: 'colSpan',\n\tcontenteditable: 'contentEditable',\n\tdatetime: 'dateTime',\n\tdirname: 'dirName',\n\t'for': 'htmlFor',\n\t'http-equiv': 'httpEquiv',\n\tismap: 'isMap',\n\tmaxlength: 'maxLength',\n\tnovalidate: 'noValidate',\n\tpubdate: 'pubDate',\n\treadonly: 'readOnly',\n\trowspan: 'rowSpan',\n\ttabindex: 'tabIndex',\n\tusemap: 'useMap'\n};\n\nvar div$1 = doc ? createElement( 'div' ) : null;\n\nvar attributes = false;\nfunction inAttributes() { return attributes; }\nfunction doInAttributes( fn ) {\n\tattributes = true;\n\tfn();\n\tattributes = false;\n}\n\nvar ConditionalAttribute = (function (Item$$1) {\n\tfunction ConditionalAttribute ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.attributes = [];\n\n\t\tthis.owner = options.owner;\n\n\t\tthis.fragment = new Fragment({\n\t\t\tractive: this.ractive,\n\t\t\towner: this,\n\t\t\ttemplate: this.template\n\t\t});\n\t\t// this fragment can't participate in node-y things\n\t\tthis.fragment.findNextNode = noop;\n\n\t\tthis.dirty = false;\n\t}\n\n\tif ( Item$$1 ) ConditionalAttribute.__proto__ = Item$$1;\n\tConditionalAttribute.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tConditionalAttribute.prototype.constructor = ConditionalAttribute;\n\n\tConditionalAttribute.prototype.bind = function bind () {\n\t\tthis.fragment.bind();\n\t};\n\n\tConditionalAttribute.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.owner.bubble();\n\t\t}\n\t};\n\n\tConditionalAttribute.prototype.render = function render () {\n\t\tthis.node = this.owner.node;\n\t\tif ( this.node ) {\n\t\t\tthis.isSvg = this.node.namespaceURI === svg$1;\n\t\t}\n\n\t\tattributes = true;\n\t\tif ( !this.rendered ) { this.fragment.render(); }\n\n\t\tthis.rendered = true;\n\t\tthis.dirty = true; // TODO this seems hacky, but necessary for tests to pass in browser AND node.js\n\t\tthis.update();\n\t\tattributes = false;\n\t};\n\n\tConditionalAttribute.prototype.toString = function toString () {\n\t\treturn this.fragment.toString();\n\t};\n\n\tConditionalAttribute.prototype.unbind = function unbind () {\n\t\tthis.fragment.unbind();\n\t};\n\n\tConditionalAttribute.prototype.unrender = function unrender () {\n\t\tthis.rendered = false;\n\t\tthis.fragment.unrender();\n\t};\n\n\tConditionalAttribute.prototype.update = function update () {\n\t\tvar this$1 = this;\n\n\t\tvar str;\n\t\tvar attrs;\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tvar current = attributes;\n\t\t\tattributes = true;\n\t\t\tthis.fragment.update();\n\t\t\tattributes = current || false;\n\n\t\t\tif ( this.rendered && this.node ) {\n\t\t\t\tstr = this.fragment.toString();\n\t\t\t\tattrs = parseAttributes( str, this.isSvg );\n\n\t\t\t\t// any attributes that previously existed but no longer do\n\t\t\t\t// must be removed\n\t\t\t\tthis.attributes.filter( function (a) { return notIn( attrs, a ); } ).forEach( function (a) {\n\t\t\t\t\tthis$1.node.removeAttribute( a.name );\n\t\t\t\t});\n\n\t\t\t\tattrs.forEach( function (a) {\n\t\t\t\t\tthis$1.node.setAttribute( a.name, a.value );\n\t\t\t\t});\n\n\t\t\t\tthis.attributes = attrs;\n\t\t\t}\n\t\t}\n\t};\n\n\treturn ConditionalAttribute;\n}(Item));\n\nfunction parseAttributes ( str, isSvg ) {\n\tvar tagName = isSvg ? 'svg' : 'div';\n\treturn str\n\t\t? (div$1.innerHTML = \""<\"" + tagName + \"" \"" + str + \""></\"" + tagName + \"">\"") &&\n\t\t\ttoArray(div$1.childNodes[0].attributes)\n\t\t: [];\n}\n\nfunction notIn ( haystack, needle ) {\n\tvar i = haystack.length;\n\n\twhile ( i-- ) {\n\t\tif ( haystack[i].name === needle.name ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction lookupNamespace ( node, prefix ) {\n\tvar qualified = \""xmlns:\"" + prefix;\n\n\twhile ( node ) {\n\t\tif ( node.hasAttribute && node.hasAttribute( qualified ) ) { return node.getAttribute( qualified ); }\n\t\tnode = node.parentNode;\n\t}\n\n\treturn namespaces[ prefix ];\n}\n\nvar Attribute = (function (Item$$1) {\n\tfunction Attribute ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.name = options.template.n;\n\t\tthis.namespace = null;\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || options.element || findElement( options.parentFragment );\n\t\tthis.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.parentFragment ) );\n\t\tthis.parentFragment = options.parentFragment; // shared\n\t\tthis.ractive = this.parentFragment.ractive;\n\n\t\tthis.rendered = false;\n\t\tthis.updateDelegate = null;\n\t\tthis.fragment = null;\n\n\t\tthis.element.attributeByName[ this.name ] = this;\n\n\t\tif ( !Array.isArray( options.template.f ) ) {\n\t\t\tthis.value = options.template.f;\n\t\t\tif ( this.value === 0 ) {\n\t\t\t\tthis.value = '';\n\t\t\t}\n\t\t} else {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\towner: this,\n\t\t\t\ttemplate: options.template.f\n\t\t\t});\n\t\t}\n\n\t\tthis.interpolator = this.fragment &&\n\t\t\tthis.fragment.items.length === 1 &&\n\t\t\tthis.fragment.items[0].type === INTERPOLATOR &&\n\t\t\tthis.fragment.items[0];\n\n\t\tif ( this.interpolator ) { this.interpolator.owner = this; }\n\t}\n\n\tif ( Item$$1 ) Attribute.__proto__ = Item$$1;\n\tAttribute.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tAttribute.prototype.constructor = Attribute;\n\n\tAttribute.prototype.bind = function bind () {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.bind();\n\t\t}\n\t};\n\n\tAttribute.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.parentFragment.bubble();\n\t\t\tthis.element.bubble();\n\t\t\tthis.dirty = true;\n\t\t}\n\t};\n\n\tAttribute.prototype.getString = function getString () {\n\t\treturn this.fragment ?\n\t\t\tthis.fragment.toString() :\n\t\t\tthis.value != null ? '' + this.value : '';\n\t};\n\n\t// TODO could getValue ever be called for a static attribute,\n\t// or can we assume that this.fragment exists?\n\tAttribute.prototype.getValue = function getValue () {\n\t\treturn this.fragment ? this.fragment.valueOf() : booleanAttributes.test( this.name ) ? true : this.value;\n\t};\n\n\tAttribute.prototype.render = function render () {\n\t\tvar node = this.element.node;\n\t\tthis.node = node;\n\n\t\t// should we use direct property access, or setAttribute?\n\t\tif ( !node.namespaceURI || node.namespaceURI === namespaces.html ) {\n\t\t\tthis.propertyName = propertyNames[ this.name ] || this.name;\n\n\t\t\tif ( node[ this.propertyName ] !== undefined ) {\n\t\t\t\tthis.useProperty = true;\n\t\t\t}\n\n\t\t\t// is attribute a boolean attribute or 'value'? If so we're better off doing e.g.\n\t\t\t// node.selected = true rather than node.setAttribute( 'selected', '' )\n\t\t\tif ( booleanAttributes.test( this.name ) || this.isTwoway ) {\n\t\t\t\tthis.isBoolean = true;\n\t\t\t}\n\n\t\t\tif ( this.propertyName === 'value' ) {\n\t\t\t\tnode._ractive.value = this.value;\n\t\t\t}\n\t\t}\n\n\t\tif ( node.namespaceURI ) {\n\t\t\tvar index = this.name.indexOf( ':' );\n\t\t\tif ( index !== -1 ) {\n\t\t\t\tthis.namespace = lookupNamespace( node, this.name.slice( 0, index ) );\n\t\t\t} else {\n\t\t\t\tthis.namespace = node.namespaceURI;\n\t\t\t}\n\t\t}\n\n\t\tthis.rendered = true;\n\t\tthis.updateDelegate = getUpdateDelegate( this );\n\t\tthis.updateDelegate();\n\t};\n\n\tAttribute.prototype.toString = function toString () {\n\t\tif ( inAttributes() ) { return ''; }\n\n\t\tvar value = this.getValue();\n\n\t\t// Special case - select and textarea values (should not be stringified)\n\t\tif ( this.name === 'value' && ( this.element.getAttribute( 'contenteditable' ) !== undefined || ( this.element.name === 'select' || this.element.name === 'textarea' ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Special case – bound radio `name` attributes\n\t\tif ( this.name === 'name' && this.element.name === 'input' && this.interpolator && this.element.getAttribute( 'type' ) === 'radio' ) {\n\t\t\treturn (\""name=\\\""{{\"" + (this.interpolator.model.getKeypath()) + \""}}\\\""\"");\n\t\t}\n\n\t\t// Special case - style and class attributes and directives\n\t\tif ( this.owner === this.element && ( this.name === 'style' || this.name === 'class' || this.style || this.inlineClass ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !this.rendered && this.owner === this.element && ( !this.name.indexOf( 'style-' ) || !this.name.indexOf( 'class-' ) ) ) {\n\t\t\tif ( !this.name.indexOf( 'style-' ) ) {\n\t\t\t\tthis.style = hyphenateCamel( this.name.substr( 6 ) );\n\t\t\t} else {\n\t\t\t\tthis.inlineClass = this.name.substr( 6 );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( booleanAttributes.test( this.name ) ) { return value ? this.name : ''; }\n\t\tif ( value == null ) { return ''; }\n\n\t\tvar str = safeAttributeString( this.getString() );\n\t\treturn str ?\n\t\t\t((this.name) + \""=\\\""\"" + str + \""\\\""\"") :\n\t\t\tthis.name;\n\t};\n\n\tAttribute.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tAttribute.prototype.unrender = function unrender () {\n\t\tthis.updateDelegate( true );\n\n\t\tthis.rendered = false;\n\t};\n\n\tAttribute.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tif ( this.rendered ) { this.updateDelegate(); }\n\t\t\tif ( this.isTwoway && !this.locked ) {\n\t\t\t\tthis.interpolator.twowayBinding.lastVal( true, this.interpolator.model.get() );\n\t\t\t}\n\t\t}\n\t};\n\n\treturn Attribute;\n}(Item));\n\nvar BindingFlag = (function (Item$$1) {\n\tfunction BindingFlag ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\t\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\t\tthis.flag = options.template.v === 'l' ? 'lazy' : 'twoway';\n\n\t\tif ( this.element.type === ELEMENT ) {\n\t\t\tif ( Array.isArray( options.template.f ) ) {\n\t\t\t\tthis.fragment = new Fragment({\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: options.template.f\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.interpolator = this.fragment &&\n\t\t\t\t\t\t\t\tthis.fragment.items.length === 1 &&\n\t\t\t\t\t\t\t\tthis.fragment.items[0].type === INTERPOLATOR &&\n\t\t\t\t\t\t\t\tthis.fragment.items[0];\n\t\t}\n\t}\n\n\tif ( Item$$1 ) BindingFlag.__proto__ = Item$$1;\n\tBindingFlag.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tBindingFlag.prototype.constructor = BindingFlag;\n\n\tBindingFlag.prototype.bind = function bind () {\n\t\tif ( this.fragment ) { this.fragment.bind(); }\n\t\tset$3( this, this.getValue(), true );\n\t};\n\n\tBindingFlag.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.element.bubble();\n\t\t\tthis.dirty = true;\n\t\t}\n\t};\n\n\tBindingFlag.prototype.getValue = function getValue () {\n\t\tif ( this.fragment ) { return this.fragment.valueOf(); }\n\t\telse if ( 'value' in this ) { return this.value; }\n\t\telse if ( 'f' in this.template ) { return this.template.f; }\n\t\telse { return true; }\n\t};\n\n\tBindingFlag.prototype.render = function render () {\n\t\tset$3( this, this.getValue(), true );\n\t};\n\n\tBindingFlag.prototype.toString = function toString () { return ''; };\n\n\tBindingFlag.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\n\t\tdelete this.element[ this.flag ];\n\t};\n\n\tBindingFlag.prototype.unrender = function unrender () {\n\t\tif ( this.element.rendered ) { this.element.recreateTwowayBinding(); }\n\t};\n\n\tBindingFlag.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tset$3( this, this.getValue(), true );\n\t\t}\n\t};\n\n\treturn BindingFlag;\n}(Item));\n\nfunction set$3 ( flag, value, update ) {\n\tif ( value === 0 ) {\n\t\tflag.value = true;\n\t} else if ( value === 'true' ) {\n\t\tflag.value = true;\n\t} else if ( value === 'false' || value === '0' ) {\n\t\tflag.value = false;\n\t} else {\n\t\tflag.value = value;\n\t}\n\n\tvar current = flag.element[ flag.flag ];\n\tflag.element[ flag.flag ] = flag.value;\n\tif ( update && !flag.element.attributes.binding && current !== flag.value ) {\n\t\tflag.element.recreateTwowayBinding();\n\t}\n\n\treturn flag.value;\n}\n\nvar processWrapper = function ( wrapper, array, methodName, newIndices ) {\n\tvar __model = wrapper.__model;\n\n\tif ( newIndices ) {\n\t\t__model.shuffle( newIndices );\n\t} else {\n\t\t// If this is a sort or reverse, we just do root.set()...\n\t\t// TODO use merge logic?\n\t\t//root.viewmodel.mark( keypath );\n\t}\n};\n\nvar mutatorMethods = [ 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift' ];\nvar patchedArrayProto = [];\n\nmutatorMethods.forEach( function (methodName) {\n\tvar method = function () {\n\t\tvar this$1 = this;\n\t\tvar args = [], len = arguments.length;\n\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\tvar newIndices = getNewIndices( this.length, methodName, args );\n\n\t\t// lock any magic array wrappers, so that things don't get fudged\n\t\tthis._ractive.wrappers.forEach( function (r) { if ( r.magic ) { r.magic.locked = true; } } );\n\n\t\t// apply the underlying method\n\t\tvar result = Array.prototype[ methodName ].apply( this, arguments );\n\n\t\t// trigger changes\n\t\trunloop.start();\n\n\t\tthis._ractive.setting = true;\n\t\tvar i = this._ractive.wrappers.length;\n\t\twhile ( i-- ) {\n\t\t\tprocessWrapper( this$1._ractive.wrappers[i], this$1, methodName, newIndices );\n\t\t}\n\n\t\trunloop.end();\n\n\t\tthis._ractive.setting = false;\n\n\t\t// unlock the magic arrays... magic... bah\n\t\tthis._ractive.wrappers.forEach( function (r) { if ( r.magic ) { r.magic.locked = false; } } );\n\n\t\treturn result;\n\t};\n\n\tObject.defineProperty( patchedArrayProto, methodName, {\n\t\tvalue: method,\n\t\tconfigurable: true\n\t});\n});\n\nvar patchArrayMethods;\nvar unpatchArrayMethods;\n\n// can we use prototype chain injection?\n// http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/#wrappers_prototype_chain_injection\nif ( ({}).__proto__ ) {\n\t// yes, we can\n\tpatchArrayMethods = function (array) { return array.__proto__ = patchedArrayProto; };\n\tunpatchArrayMethods = function (array) { return array.__proto__ = Array.prototype; };\n}\n\nelse {\n\t// no, we can't\n\tpatchArrayMethods = function (array) {\n\t\tvar i = mutatorMethods.length;\n\t\twhile ( i-- ) {\n\t\t\tvar methodName = mutatorMethods[i];\n\t\t\tObject.defineProperty( array, methodName, {\n\t\t\t\tvalue: patchedArrayProto[ methodName ],\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t}\n\t};\n\n\tunpatchArrayMethods = function (array) {\n\t\tvar i = mutatorMethods.length;\n\t\twhile ( i-- ) {\n\t\t\tdelete array[ mutatorMethods[i] ];\n\t\t}\n\t};\n}\n\npatchArrayMethods.unpatch = unpatchArrayMethods; // TODO export separately?\nvar patch = patchArrayMethods;\n\nvar errorMessage$1 = 'Something went wrong in a rather interesting way';\n\nvar arrayAdaptor = {\n\tfilter: function filter ( object ) {\n\t\t// wrap the array if a) b) it's an array, and b) either it hasn't been wrapped already,\n\t\t// or the array didn't trigger the get() itself\n\t\treturn Array.isArray( object ) && ( !object._ractive || !object._ractive.setting );\n\t},\n\twrap: function wrap ( ractive, array, keypath ) {\n\t\treturn new ArrayWrapper( ractive, array, keypath );\n\t}\n};\n\nvar ArrayWrapper = function ArrayWrapper ( ractive, array ) {\n\tthis.root = ractive;\n\tthis.value = array;\n\tthis.__model = null; // filled in later\n\n\t// if this array hasn't already been ractified, ractify it\n\tif ( !array._ractive ) {\n\t\t// define a non-enumerable _ractive property to store the wrappers\n\t\tObject.defineProperty( array, '_ractive', {\n\t\t\tvalue: {\n\t\t\t\twrappers: [],\n\t\t\t\tinstances: [],\n\t\t\t\tsetting: false\n\t\t\t},\n\t\t\tconfigurable: true\n\t\t});\n\n\t\tpatch( array );\n\t}\n\n\t// store the ractive instance, so we can handle transitions later\n\tif ( !array._ractive.instances[ ractive._guid ] ) {\n\t\tarray._ractive.instances[ ractive._guid ] = 0;\n\t\tarray._ractive.instances.push( ractive );\n\t}\n\n\tarray._ractive.instances[ ractive._guid ] += 1;\n\tarray._ractive.wrappers.push( this );\n};\n\nArrayWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nArrayWrapper.prototype.reset = function reset ( value ) {\n\treturn this.value === value;\n};\n\nArrayWrapper.prototype.teardown = function teardown () {\n\tvar array = this.value;\n\tvar storage = array._ractive;\n\tvar wrappers = storage.wrappers;\n\tvar instances = storage.instances;\n\n\t// if teardown() was invoked because we're clearing the cache as a result of\n\t// a change that the array itself triggered, we can save ourselves the teardown\n\t// and immediate setup\n\tif ( storage.setting ) {\n\t\treturn false; // so that we don't remove it from cached wrappers\n\t}\n\n\tvar index = wrappers.indexOf( this );\n\tif ( index === -1 ) {\n\t\tthrow new Error( errorMessage$1 );\n\t}\n\n\twrappers.splice( index, 1 );\n\n\t// if nothing else depends on this array, we can revert it to its\n\t// natural state\n\tif ( !wrappers.length ) {\n\t\tdelete array._ractive;\n\t\tpatch.unpatch( this.value );\n\t}\n\n\telse {\n\t\t// remove ractive instance if possible\n\t\tinstances[ this.root._guid ] -= 1;\n\t\tif ( !instances[ this.root._guid ] ) {\n\t\t\tindex = instances.indexOf( this.root );\n\n\t\t\tif ( index === -1 ) {\n\t\t\t\tthrow new Error( errorMessage$1 );\n\t\t\t}\n\n\t\t\tinstances.splice( index, 1 );\n\t\t}\n\t}\n};\n\nvar magicAdaptor;\n\ntry {\n\tObject.defineProperty({}, 'test', { get: function get() {}, set: function set() {} });\n\n\tmagicAdaptor = {\n\t\tfilter: function filter ( value ) {\n\t\t\treturn value && typeof value === 'object';\n\t\t},\n\t\twrap: function wrap ( ractive, value, keypath ) {\n\t\t\treturn new MagicWrapper( ractive, value, keypath );\n\t\t}\n\t};\n} catch ( err ) {\n\tmagicAdaptor = false;\n}\n\nvar magicAdaptor$1 = magicAdaptor;\n\nfunction createOrWrapDescriptor ( originalDescriptor, ractive, keypath, wrapper ) {\n\tif ( originalDescriptor.set && originalDescriptor.set.__magic ) {\n\t\toriginalDescriptor.set.__magic.dependants.push({ ractive: ractive, keypath: keypath });\n\t\treturn originalDescriptor;\n\t}\n\n\tvar setting;\n\n\tvar dependants = [{ ractive: ractive, keypath: keypath }];\n\n\tvar descriptor = {\n\t\tget: function get () {\n\t\t\treturn 'value' in originalDescriptor ? originalDescriptor.value : originalDescriptor.get.call( this );\n\t\t},\n\t\tset: function set (value) {\n\t\t\tif ( setting ) { return; }\n\n\t\t\tif ( 'value' in originalDescriptor ) {\n\t\t\t\toriginalDescriptor.value = value;\n\t\t\t} else {\n\t\t\t\toriginalDescriptor.set.call( this, value );\n\t\t\t}\n\n\t\t\tif ( wrapper.locked ) { return; }\n\t\t\tsetting = true;\n\t\t\tdependants.forEach( function (ref) {\n\t\t\t\tvar ractive = ref.ractive;\n\t\t\t\tvar keypath = ref.keypath;\n\n\t\t\t\tractive.set( keypath, value );\n\t\t\t});\n\t\t\tsetting = false;\n\t\t},\n\t\tenumerable: true\n\t};\n\n\tdescriptor.set.__magic = { dependants: dependants, originalDescriptor: originalDescriptor };\n\n\treturn descriptor;\n}\n\nfunction revert ( descriptor, ractive, keypath ) {\n\tif ( !descriptor.set || !descriptor.set.__magic ) { return true; }\n\n\tvar dependants = descriptor.set.__magic;\n\tvar i = dependants.length;\n\twhile ( i-- ) {\n\t\tvar dependant = dependants[i];\n\t\tif ( dependant.ractive === ractive && dependant.keypath === keypath ) {\n\t\t\tdependants.splice( i, 1 );\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nvar MagicWrapper = function MagicWrapper ( ractive, value, keypath ) {\n\tvar this$1 = this;\n\n\tthis.ractive = ractive;\n\tthis.value = value;\n\tthis.keypath = keypath;\n\n\tthis.originalDescriptors = {};\n\n\t// wrap all properties with getters\n\tObject.keys( value ).forEach( function (key) {\n\t\tvar originalDescriptor = Object.getOwnPropertyDescriptor( this$1.value, key );\n\t\tthis$1.originalDescriptors[ key ] = originalDescriptor;\n\n\t\tvar childKeypath = keypath ? (keypath + \"".\"" + (escapeKey( key ))) : escapeKey( key );\n\n\t\tvar descriptor = createOrWrapDescriptor( originalDescriptor, ractive, childKeypath, this$1 );\n\n\n\n\t\tObject.defineProperty( this$1.value, key, descriptor );\n\t});\n};\n\nMagicWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nMagicWrapper.prototype.reset = function reset ( value ) {\n\treturn this.value === value;\n};\n\nMagicWrapper.prototype.set = function set ( key, value ) {\n\tthis.value[ key ] = value;\n};\n\nMagicWrapper.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\tObject.keys( this.value ).forEach( function (key) {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor( this$1.value, key );\n\t\tif ( !descriptor.set || !descriptor.set.__magic ) { return; }\n\n\t\trevert( descriptor );\n\n\t\tif ( descriptor.set.__magic.dependants.length === 1 ) {\n\t\t\tObject.defineProperty( this$1.value, key, descriptor.set.__magic.originalDescriptor );\n\t\t}\n\t});\n};\n\nvar MagicArrayWrapper = function MagicArrayWrapper ( ractive, array, keypath ) {\n\tthis.value = array;\n\n\tthis.magic = true;\n\n\tthis.magicWrapper = magicAdaptor$1.wrap( ractive, array, keypath );\n\tthis.arrayWrapper = arrayAdaptor.wrap( ractive, array, keypath );\n\tthis.arrayWrapper.magic = this.magicWrapper;\n\n\t// ugh, this really is a terrible hack\n\tObject.defineProperty( this, '__model', {\n\t\tget: function get () {\n\t\t\treturn this.arrayWrapper.__model;\n\t\t},\n\t\tset: function set ( model ) {\n\t\t\tthis.arrayWrapper.__model = model;\n\t\t}\n\t});\n};\n\nMagicArrayWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nMagicArrayWrapper.prototype.teardown = function teardown () {\n\tthis.arrayWrapper.teardown();\n\tthis.magicWrapper.teardown();\n};\n\nMagicArrayWrapper.prototype.reset = function reset ( value ) {\n\treturn this.arrayWrapper.reset( value ) && this.magicWrapper.reset( value );\n};\n\nvar magicArrayAdaptor = {\n\tfilter: function filter ( object, keypath, ractive ) {\n\t\treturn magicAdaptor$1.filter( object, keypath, ractive ) && arrayAdaptor.filter( object );\n\t},\n\n\twrap: function wrap ( ractive, array, keypath ) {\n\t\treturn new MagicArrayWrapper( ractive, array, keypath );\n\t}\n};\n\nvar RactiveModel = (function (Model$$1) {\n\tfunction RactiveModel ( ractive ) {\n\t\tModel$$1.call( this, null, '' );\n\t\tthis.value = ractive;\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.adaptors = [];\n\t\tthis.ractive = ractive;\n\t}\n\n\tif ( Model$$1 ) RactiveModel.__proto__ = Model$$1;\n\tRactiveModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tRactiveModel.prototype.constructor = RactiveModel;\n\n\tRactiveModel.prototype.joinKey = function joinKey ( key ) {\n\t\tvar model = Model$$1.prototype.joinKey.call( this, key );\n\n\t\tif ( ( key === 'root' || key === 'parent' ) && !model.isLink ) { return initLink( model, key ); }\n\t\telse if ( key === 'data' ) { return this.ractive.viewmodel; }\n\n\t\treturn model;\n\t};\n\n\tRactiveModel.prototype.getKeypath = function getKeypath () {\n\t\treturn '@this';\n\t};\n\n\tRactiveModel.prototype.retrieve = function retrieve () {\n\t\treturn this.ractive;\n\t};\n\n\treturn RactiveModel;\n}(Model));\n\nfunction initLink ( model, key ) {\n\tmodel.applyValue = function ( value ) {\n\t\tthis.parent.value[ key ] = value;\n\t\tif ( value && value.viewmodel ) {\n\t\t\tthis.link( value.viewmodel.getRactiveModel(), key );\n\t\t\tthis._link.markedAll();\n\t\t} else {\n\t\t\tthis.link( Object.create( Missing ), key );\n\t\t\tthis._link.markedAll();\n\t\t}\n\t};\n\n\tmodel.applyValue( model.parent.ractive[ key ], key );\n\tmodel._link.set = function (v) { return model.applyValue( v ); };\n\tmodel._link.applyValue = function (v) { return model.applyValue( v ); };\n\treturn model._link;\n}\n\nvar hasProp$1 = Object.prototype.hasOwnProperty;\n\nvar RootModel = (function (Model$$1) {\n\tfunction RootModel ( options ) {\n\t\tModel$$1.call( this, null, null );\n\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.ractive = options.ractive; // TODO sever this link\n\n\t\tthis.value = options.data;\n\t\tthis.adaptors = options.adapt;\n\t\tthis.adapt();\n\n\t\tthis.computationContext = options.ractive;\n\t\tthis.computations = {};\n\t}\n\n\tif ( Model$$1 ) RootModel.__proto__ = Model$$1;\n\tRootModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tRootModel.prototype.constructor = RootModel;\n\n\tRootModel.prototype.attached = function attached ( fragment ) {\n\t\tattachImplicits( this, fragment );\n\t};\n\n\tRootModel.prototype.compute = function compute ( key, signature ) {\n\t\tvar computation = new Computation( this, signature, key );\n\t\tthis.computations[ escapeKey( key ) ] = computation;\n\n\t\treturn computation;\n\t};\n\n\tRootModel.prototype.createLink = function createLink ( keypath, target, targetPath, options ) {\n\t\tvar this$1 = this;\n\n\t\tvar keys = splitKeypath( keypath );\n\n\t\tvar model = this;\n\t\twhile ( keys.length ) {\n\t\t\tvar key = keys.shift();\n\t\t\tmodel = this$1.childByKey[ key ] || this$1.joinKey( key );\n\t\t}\n\n\t\treturn model.link( target, targetPath, options );\n\t};\n\n\tRootModel.prototype.detached = function detached () {\n\t\tdetachImplicits( this );\n\t};\n\n\tRootModel.prototype.get = function get ( shouldCapture, options ) {\n\t\tvar this$1 = this;\n\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( !options || options.virtual !== false ) {\n\t\t\tvar result = this.getVirtual();\n\t\t\tvar keys = Object.keys( this.computations );\n\t\t\tvar i = keys.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tresult[ keys[i] ] = this$1.computations[ keys[i] ].get();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn this.value;\n\t\t}\n\t};\n\n\tRootModel.prototype.getKeypath = function getKeypath () {\n\t\treturn '';\n\t};\n\n\tRootModel.prototype.getRactiveModel = function getRactiveModel () {\n\t\treturn this.ractiveModel || ( this.ractiveModel = new RactiveModel( this.ractive ) );\n\t};\n\n\tRootModel.prototype.getValueChildren = function getValueChildren () {\n\t\tvar this$1 = this;\n\n\t\tvar children = Model$$1.prototype.getValueChildren.call( this, this.value );\n\n\t\tthis.children.forEach( function (child) {\n\t\t\tif ( child._link ) {\n\t\t\t\tvar idx = children.indexOf( child );\n\t\t\t\tif ( ~idx ) { children.splice( idx, 1, child._link ); }\n\t\t\t\telse { children.push( child._link ); }\n\t\t\t}\n\t\t});\n\n\t\tfor ( var k in this.computations ) {\n\t\t\tchildren.push( this$1.computations[k] );\n\t\t}\n\n\t\treturn children;\n\t};\n\n\tRootModel.prototype.has = function has ( key ) {\n\t\tvar value = this.value;\n\t\tvar unescapedKey = unescapeKey( key );\n\n\t\tif ( unescapedKey === '@this' || unescapedKey === '@global' || unescapedKey === '@shared' ) { return true; }\n\t\tif ( unescapedKey[0] === '~' && unescapedKey[1] === '/' ) { unescapedKey = unescapedKey.slice( 2 ); }\n\t\tif ( hasProp$1.call( value, unescapedKey ) ) { return true; }\n\n\t\t// mappings/links and computations\n\t\tif ( key in this.computations || this.childByKey[unescapedKey] && this.childByKey[unescapedKey]._link ) { return true; }\n\n\t\t// We climb up the constructor chain to find if one of them contains the unescapedKey\n\t\tvar constructor = value.constructor;\n\t\twhile ( constructor !== Function && constructor !== Array && constructor !== Object ) {\n\t\t\tif ( hasProp$1.call( constructor.prototype, unescapedKey ) ) { return true; }\n\t\t\tconstructor = constructor.constructor;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tRootModel.prototype.joinKey = function joinKey ( key, opts ) {\n\t\tif ( key[0] === '@' ) {\n\t\t\tif ( key === '@this' || key === '@' ) { return this.getRactiveModel(); }\n\t\t\tif ( key === '@global' ) { return GlobalModel; }\n\t\t\tif ( key === '@shared' ) { return SharedModel$1; }\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key[0] === '~' && key[1] === '/' ) { key = key.slice( 2 ); }\n\n\t\treturn this.computations.hasOwnProperty( key ) ? this.computations[ key ] :\n\t\t       Model$$1.prototype.joinKey.call( this, key, opts );\n\t};\n\n\t// TODO: this should go away\n\tRootModel.prototype.map = function map ( localKey, origin, options ) {\n\t\tvar local = this.joinKey( localKey );\n\t\tlocal.link( origin, localKey, options );\n\t};\n\n\tRootModel.prototype.set = function set ( value ) {\n\t\t// TODO wrapping root node is a baaaad idea. We should prevent this\n\t\tvar wrapper = this.wrapper;\n\t\tif ( wrapper ) {\n\t\t\tvar shouldTeardown = !wrapper.reset || wrapper.reset( value ) === false;\n\n\t\t\tif ( shouldTeardown ) {\n\t\t\t\twrapper.teardown();\n\t\t\t\tthis.wrapper = null;\n\t\t\t\tthis.value = value;\n\t\t\t\tthis.adapt();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.value = value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( mark$1$1 );\n\t};\n\n\tRootModel.prototype.retrieve = function retrieve () {\n\t\treturn this.wrapper ? this.wrapper.get() : this.value;\n\t};\n\n\tRootModel.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.prototype.teardown.call(this);\n\t\tfor ( var k in this.computations ) {\n\t\t\tthis$1.computations[ k ].teardown();\n\t\t}\n\t};\n\n\treturn RootModel;\n}(Model));\n\nRootModel.prototype.update = noop;\n\nfunction attachImplicits ( model, fragment ) {\n\tif ( model._link && model._link.implicit && model._link.isDetached() ) {\n\t\tmodel.attach( fragment );\n\t}\n\n\t// look for virtual children to relink and cascade\n\tfor ( var k in model.childByKey ) {\n\t\tif ( k in model.value ) {\n\t\t\tattachImplicits( model.childByKey[k], fragment );\n\t\t} else if ( !model.childByKey[k]._link || model.childByKey[k]._link.isDetached() ) {\n\t\t\tvar mdl = resolveReference( fragment, k );\n\t\t\tif ( mdl ) {\n\t\t\t\tmodel.childByKey[k].link( mdl, k, { implicit: true } );\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction detachImplicits ( model ) {\n\tif ( model._link && model._link.implicit ) {\n\t\tmodel.unlink();\n\t}\n\n\tfor ( var k in model.childByKey ) {\n\t\tdetachImplicits( model.childByKey[k] );\n\t}\n}\n\nfunction getComputationSignature ( ractive, key, signature ) {\n\tvar getter;\n\tvar setter;\n\n\t// useful for debugging\n\tvar getterString;\n\tvar getterUseStack;\n\tvar setterString;\n\n\tif ( typeof signature === 'function' ) {\n\t\tgetter = bind$2( signature, ractive );\n\t\tgetterString = signature.toString();\n\t\tgetterUseStack = true;\n\t}\n\n\tif ( typeof signature === 'string' ) {\n\t\tgetter = createFunctionFromString( signature, ractive );\n\t\tgetterString = signature;\n\t}\n\n\tif ( typeof signature === 'object' ) {\n\t\tif ( typeof signature.get === 'string' ) {\n\t\t\tgetter = createFunctionFromString( signature.get, ractive );\n\t\t\tgetterString = signature.get;\n\t\t} else if ( typeof signature.get === 'function' ) {\n\t\t\tgetter = bind$2( signature.get, ractive );\n\t\t\tgetterString = signature.get.toString();\n\t\t\tgetterUseStack = true;\n\t\t} else {\n\t\t\tfatal( '`%s` computation must have a `get()` method', key );\n\t\t}\n\n\t\tif ( typeof signature.set === 'function' ) {\n\t\t\tsetter = bind$2( signature.set, ractive );\n\t\t\tsetterString = signature.set.toString();\n\t\t}\n\t}\n\n\treturn {\n\t\tgetter: getter,\n\t\tsetter: setter,\n\t\tgetterString: getterString,\n\t\tsetterString: setterString,\n\t\tgetterUseStack: getterUseStack\n\t};\n}\n\nvar constructHook = new Hook( 'construct' );\n\nvar registryNames$1 = [\n\t'adaptors',\n\t'components',\n\t'decorators',\n\t'easing',\n\t'events',\n\t'interpolators',\n\t'partials',\n\t'transitions'\n];\n\nvar uid = 0;\n\nfunction construct ( ractive, options ) {\n\tif ( Ractive.DEBUG ) { welcome(); }\n\n\tinitialiseProperties( ractive );\n\thandleAttributes( ractive );\n\n\t// if there's not a delegation setting, inherit from parent if it's not default\n\tif ( !options.hasOwnProperty( 'delegate' ) && ractive.parent && ractive.parent.delegate !== ractive.delegate ) {\n\t\tractive.delegate = false;\n\t}\n\n\t// TODO don't allow `onconstruct` with `new Ractive()`, there's no need for it\n\tconstructHook.fire( ractive, options );\n\n\t// Add registries\n\tvar i = registryNames$1.length;\n\twhile ( i-- ) {\n\t\tvar name = registryNames$1[ i ];\n\t\tractive[ name ] = Object.assign( Object.create( ractive.constructor[ name ] || null ), options[ name ] );\n\t}\n\n\tif ( ractive._attributePartial ) {\n\t\tractive.partials['extra-attributes'] = ractive._attributePartial;\n\t\tdelete ractive._attributePartial;\n\t}\n\n\t// Create a viewmodel\n\tvar viewmodel = new RootModel({\n\t\tadapt: getAdaptors( ractive, ractive.adapt, options ),\n\t\tdata: dataConfigurator.init( ractive.constructor, ractive, options ),\n\t\tractive: ractive\n\t});\n\n\tractive.viewmodel = viewmodel;\n\n\t// Add computed properties\n\tvar computed = Object.assign( Object.create( ractive.constructor.prototype.computed ), options.computed );\n\n\tfor ( var key in computed ) {\n\t\tif ( key === '__proto__' ) { continue; }\n\t\tvar signature = getComputationSignature( ractive, key, computed[ key ] );\n\t\tviewmodel.compute( key, signature );\n\t}\n}\n\nfunction getAdaptors ( ractive, protoAdapt, options ) {\n\tprotoAdapt = protoAdapt.map( lookup );\n\tvar adapt = ensureArray( options.adapt ).map( lookup );\n\n\tvar builtins = [];\n\tvar srcs = [ protoAdapt, adapt ];\n\tif ( ractive.parent && !ractive.isolated ) {\n\t\tsrcs.push( ractive.parent.viewmodel.adaptors );\n\t}\n\tsrcs.push( builtins );\n\n\tvar magic$$1 = 'magic' in options ? options.magic : ractive.magic;\n\tvar modifyArrays = 'modifyArrays' in options ? options.modifyArrays : ractive.modifyArrays;\n\n\tif ( magic$$1 ) {\n\t\tif ( !magic ) {\n\t\t\tthrow new Error( 'Getters and setters (magic mode) are not supported in this browser' );\n\t\t}\n\n\t\tif ( modifyArrays ) {\n\t\t\tbuiltins.push( magicArrayAdaptor );\n\t\t}\n\n\t\tbuiltins.push( magicAdaptor$1 );\n\t}\n\n\tif ( modifyArrays ) {\n\t\tbuiltins.push( arrayAdaptor );\n\t}\n\n\treturn combine.apply( null, srcs );\n\n\n\tfunction lookup ( adaptor ) {\n\t\tif ( typeof adaptor === 'string' ) {\n\t\t\tadaptor = findInViewHierarchy( 'adaptors', ractive, adaptor );\n\n\t\t\tif ( !adaptor ) {\n\t\t\t\tfatal( missingPlugin( adaptor, 'adaptor' ) );\n\t\t\t}\n\t\t}\n\n\t\treturn adaptor;\n\t}\n}\n\nfunction initialiseProperties ( ractive ) {\n\t// Generate a unique identifier, for places where you'd use a weak map if it\n\t// existed\n\tractive._guid = 'r-' + uid++;\n\n\t// events\n\tractive._subs = Object.create( null );\n\tractive._nsSubs = 0;\n\n\t// storage for item configuration from instantiation to reset,\n\t// like dynamic functions or original values\n\tractive._config = {};\n\n\t// events\n\tractive.event = null;\n\tractive._eventQueue = [];\n\n\t// live queries\n\tractive._liveQueries = [];\n\tractive._liveComponentQueries = [];\n\n\t// observers\n\tractive._observers = [];\n\n\t// external children\n\tractive._children = [];\n\tractive._children.byName = {};\n\tractive.children = ractive._children;\n\n\tif ( !ractive.component ) {\n\t\tractive.root = ractive;\n\t\tractive.parent = ractive.container = null; // TODO container still applicable?\n\t}\n}\n\nfunction handleAttributes ( ractive ) {\n\tvar component = ractive.component;\n\tvar attributes = ractive.constructor.attributes;\n\n\tif ( attributes && component ) {\n\t\tvar tpl = component.template;\n\t\tvar attrs = tpl.m ? tpl.m.slice() : [];\n\n\t\t// grab all of the passed attribute names\n\t\tvar props = attrs.filter( function (a) { return a.t === ATTRIBUTE; } ).map( function (a) { return a.n; } );\n\n\t\t// warn about missing requireds\n\t\tattributes.required.forEach( function (p) {\n\t\t\tif ( !~props.indexOf( p ) ) {\n\t\t\t\twarnIfDebug( (\""Component '\"" + (component.name) + \""' requires attribute '\"" + p + \""' to be provided\"") );\n\t\t\t}\n\t\t});\n\n\t\t// set up a partial containing non-property attributes\n\t\tvar all = attributes.optional.concat( attributes.required );\n\t\tvar partial = [];\n\t\tvar i = attrs.length;\n\t\twhile ( i-- ) {\n\t\t\tvar a = attrs[i];\n\t\t\tif ( a.t === ATTRIBUTE && !~all.indexOf( a.n ) ) {\n\t\t\t\tif ( attributes.mapAll ) {\n\t\t\t\t\t// map the attribute if requested and make the extra attribute in the partial refer to the mapping\n\t\t\t\t\tpartial.unshift({ t: ATTRIBUTE, n: a.n, f: [{ t: INTERPOLATOR, r: (\""~/\"" + (a.n)) }] });\n\t\t\t\t} else {\n\t\t\t\t\t// transfer the attribute to the extra attributes partal\n\t\t\t\t\tpartial.unshift( attrs.splice( i, 1 )[0] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( partial.length ) { component.template = { t: tpl.t, e: tpl.e, f: tpl.f, m: attrs, p: tpl.p }; }\n\t\tractive._attributePartial = partial;\n\t}\n}\n\nvar teardownHook = new Hook( 'teardown' );\nvar destructHook = new Hook( 'destruct' );\n\n// Teardown. This goes through the root fragment and all its children, removing observers\n// and generally cleaning up after itself\n\nfunction Ractive$teardown () {\n\tvar this$1 = this;\n\n\tif ( this.torndown ) {\n\t\twarnIfDebug( 'ractive.teardown() was called on a Ractive instance that was already torn down' );\n\t\treturn Promise.resolve();\n\t}\n\n\tthis.shouldDestroy = true;\n\treturn teardown$2( this, function () { return this$1.fragment.rendered ? this$1.unrender() : Promise.resolve(); } );\n}\n\nfunction teardown$2 ( instance, getPromise ) {\n\tinstance.torndown = true;\n\tinstance.viewmodel.teardown();\n\tinstance.fragment.unbind();\n\tinstance._observers.slice().forEach( cancel$1 );\n\n\tif ( instance.fragment.rendered && instance.el.__ractive_instances__ ) {\n\t\tremoveFromArray( instance.el.__ractive_instances__, instance );\n\t}\n\n\tvar promise = getPromise();\n\n\tteardownHook.fire( instance );\n\tpromise.then( function () { return destructHook.fire( instance ); } );\n\n\treturn promise;\n}\n\nfunction makeDirty$1 ( query ) {\n\tquery.makeDirty();\n}\n\nvar Component = (function (Item$$1) {\n\tfunction Component ( options, ComponentConstructor ) {\n\t\tvar this$1 = this;\n\n\t\tItem$$1.call( this, options );\n\t\tthis.isAnchor = this.template.t === ANCHOR;\n\t\tthis.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super\n\n\t\tvar partials = options.template.p || {};\n\t\tif ( !( 'content' in partials ) ) { partials.content = options.template.f || []; }\n\t\tthis._partials = partials; // TEMP\n\n\t\tif ( this.isAnchor ) {\n\t\t\tthis.name = options.template.n;\n\n\t\t\tthis.addChild = addChild$1;\n\t\t\tthis.removeChild = removeChild$1;\n\t\t} else {\n\t\t\tvar instance = Object.create( ComponentConstructor.prototype );\n\n\t\t\tthis.instance = instance;\n\t\t\tthis.name = options.template.e;\n\n\t\t\tif ( instance.el ) {\n\t\t\t\twarnIfDebug( (\""The <\"" + (this.name) + \""> component has a default 'el' property; it has been disregarded\"") );\n\t\t\t}\n\n\t\t\tthis.liveQueries = [];\n\n\t\t\t// find container\n\t\t\tvar fragment = options.parentFragment;\n\t\t\tvar container;\n\t\t\twhile ( fragment ) {\n\t\t\t\tif ( fragment.owner.type === YIELDER ) {\n\t\t\t\t\tcontainer = fragment.owner.container;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tfragment = fragment.parent;\n\t\t\t}\n\n\t\t\t// add component-instance-specific properties\n\t\t\tinstance.parent = this.parentFragment.ractive;\n\t\t\tinstance.container = container || null;\n\t\t\tinstance.root = instance.parent.root;\n\t\t\tinstance.component = this;\n\n\t\t\tconstruct( this.instance, { partials: partials });\n\n\t\t\t// for hackability, this could be an open option\n\t\t\t// for any ractive instance, but for now, just\n\t\t\t// for components and just for ractive...\n\t\t\tinstance._inlinePartials = partials;\n\t\t}\n\n\t\tthis.attributeByName = {};\n\n\t\tthis.events = [];\n\t\tthis.attributes = [];\n\t\tvar leftovers = [];\n\t\t( this.template.m || [] ).forEach( function (template) {\n\t\t\tswitch ( template.t ) {\n\t\t\t\tcase ATTRIBUTE:\n\t\t\t\tcase EVENT:\n\t\t\t\t\tthis$1.attributes.push( createItem({\n\t\t\t\t\t\towner: this$1,\n\t\t\t\t\t\tparentFragment: this$1.parentFragment,\n\t\t\t\t\t\ttemplate: template\n\t\t\t\t\t}) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TRANSITION:\n\t\t\t\tcase BINDING_FLAG:\n\t\t\t\tcase DECORATOR:\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tleftovers.push( template );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif ( leftovers.length ) {\n\t\t\tthis.attributes.push( new ConditionalAttribute({\n\t\t\t\towner: this,\n\t\t\t\tparentFragment: this.parentFragment,\n\t\t\t\ttemplate: leftovers\n\t\t\t}) );\n\t\t}\n\n\t\tthis.eventHandlers = [];\n\t}\n\n\tif ( Item$$1 ) Component.__proto__ = Item$$1;\n\tComponent.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tComponent.prototype.constructor = Component;\n\n\tComponent.prototype.bind = function bind$1 () {\n\t\tif ( !this.isAnchor ) {\n\t\t\tthis.attributes.forEach( bind$1$1 );\n\n\t\t\tinitialise( this.instance, {\n\t\t\t\tpartials: this._partials\n\t\t\t}, {\n\t\t\t\tcssIds: this.parentFragment.cssIds\n\t\t\t});\n\n\t\t\tthis.eventHandlers.forEach( bind$1$1 );\n\n\t\t\tthis.bound = true;\n\t\t}\n\t};\n\n\tComponent.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.parentFragment.bubble();\n\t\t}\n\t};\n\n\tComponent.prototype.destroyed = function destroyed () {\n\t\tif ( !this.isAnchor && this.instance.fragment ) { this.instance.fragment.destroyed(); }\n\t};\n\n\tComponent.prototype.detach = function detach () {\n\t\tif ( this.isAnchor ) {\n\t\t\tif ( this.instance ) { return this.instance.fragment.detach(); }\n\t\t\treturn createDocumentFragment();\n\t\t}\n\n\t\treturn this.instance.fragment.detach();\n\t};\n\n\tComponent.prototype.find = function find ( selector, options ) {\n\t\tif ( this.instance ) { return this.instance.fragment.find( selector, options ); }\n\t};\n\n\tComponent.prototype.findAll = function findAll ( selector, query ) {\n\t\tif ( this.instance ) { this.instance.fragment.findAll( selector, query ); }\n\t};\n\n\tComponent.prototype.findComponent = function findComponent ( name, options ) {\n\t\tif ( !name || this.name === name ) { return this.instance; }\n\n\t\tif ( this.instance.fragment ) {\n\t\t\treturn this.instance.fragment.findComponent( name, options );\n\t\t}\n\t};\n\n\tComponent.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\t\tif ( this.instance && query.test( this ) ) {\n\t\t\tquery.add( this.instance );\n\n\t\t\tif ( query.live ) {\n\t\t\t\tthis.liveQueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.instance ) { this.instance.findAllComponents( name, { _query: query } ); }\n\t};\n\n\tComponent.prototype.firstNode = function firstNode ( skipParent ) {\n\t\tif ( this.instance ) { return this.instance.fragment.firstNode( skipParent ); }\n\t};\n\n\tComponent.prototype.removeFromQuery = function removeFromQuery ( query ) {\n\t\tif ( this.instance ) { query.remove( this.instance ); }\n\t\tremoveFromArray( this.liveQueries, query );\n\t};\n\n\tComponent.prototype.render = function render$1 ( target, occupants ) {\n\t\tif ( this.isAnchor ) {\n\t\t\tthis.target = target;\n\t\t\tif ( !checking.length ) {\n\t\t\t\tchecking.push( this.ractive );\n\t\t\t\trunloop.scheduleTask( checkAnchors, true );\n\t\t\t}\n\t\t} else {\n\t\t\trender$2( this.instance, target, null, occupants );\n\n\t\t\tthis.attributes.forEach( render$1$1 );\n\t\t\tthis.eventHandlers.forEach( render$1$1 );\n\t\t\tupdateLiveQueries$1( this );\n\t\t}\n\t\tthis.rendered = true;\n\t};\n\n\tComponent.prototype.shuffled = function shuffled () {\n\t\tif ( this.instance ) { this.liveQueries.forEach( makeDirty$1 ); }\n\t\tItem$$1.prototype.shuffled.call(this);\n\t};\n\n\tComponent.prototype.toString = function toString () {\n\t\tif ( this.instance ) { return this.instance.toHTML(); }\n\t};\n\n\tComponent.prototype.unbind = function unbind$1 () {\n\t\tif ( !this.isAnchor ) {\n\t\t\tthis.bound = false;\n\n\t\t\tthis.attributes.forEach( unbind$1$1 );\n\n\t\t\tteardown$2( this.instance, function () { return runloop.promise(); } );\n\t\t}\n\t};\n\n\tComponent.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\t\tvar this$1 = this;\n\n\t\tthis.shouldDestroy = shouldDestroy;\n\n\t\tif ( this.isAnchor ) {\n\t\t\tif ( this.item ) { unrenderItem( this, this.item ); }\n\t\t\tthis.target = null;\n\t\t\tif ( !checking.length ) {\n\t\t\t\tchecking.push( this.ractive );\n\t\t\t\trunloop.scheduleTask( checkAnchors, true );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.instance.unrender();\n\t\t\tthis.instance.el = this.instance.target = null;\n\t\t\tthis.attributes.forEach( unrender$1$1 );\n\t\t\tthis.eventHandlers.forEach( unrender$1$1 );\n\n\t\t\tthis.liveQueries.forEach( function (query) { return query.remove( this$1.instance ); } );\n\t\t\tthis.liveQueries = [];\n\t\t}\n\n\t\tthis.rendered = false;\n\t};\n\n\tComponent.prototype.update = function update$1 () {\n\t\tthis.dirty = false;\n\t\tif ( this.instance ) {\n\t\t\tthis.instance.fragment.update();\n\t\t\tthis.attributes.forEach( update$1$1 );\n\t\t\tthis.eventHandlers.forEach( update$1$1 );\n\t\t}\n\t};\n\n\treturn Component;\n}(Item));\n\nfunction addChild$1 ( meta ) {\n\tif ( this.item ) { this.removeChild( this.item ); }\n\n\tvar child = meta.instance;\n\tmeta.anchor = this;\n\n\tmeta.parentFragment = this.parentFragment;\n\tmeta.name = meta.nameOption || this.name;\n\tthis.name = meta.name;\n\n\n\tif ( !child.isolated ) { child.viewmodel.attached( this.parentFragment ); }\n\n\t// render as necessary\n\tif ( this.rendered ) {\n\t\trenderItem( this, meta );\n\t}\n}\n\nfunction removeChild$1 ( meta ) {\n\t// unrender as necessary\n\tif ( this.item === meta ) {\n\t\tunrenderItem( this, meta );\n\t\tthis.name = this.template.n;\n\t}\n}\n\nfunction renderItem ( anchor, meta ) {\n\tif ( !anchor.rendered ) { return; }\n\n\tmeta.shouldDestroy = false;\n\tmeta.parentFragment = anchor.parentFragment;\n\n\tanchor.item = meta;\n\tanchor.instance = meta.instance;\n\tanchor.liveQueries = meta.liveQueries;\n\tvar nextNode = anchor.parentFragment.findNextNode( anchor );\n\n\tif ( meta.instance.fragment.rendered ) {\n\t\tmeta.instance.unrender();\n\t}\n\n\tmeta.partials = meta.instance.partials;\n\tmeta.instance.partials = Object.assign( {}, meta.partials, anchor._partials );\n\n\tmeta.instance.fragment.unbind();\n\tmeta.instance.fragment.bind( meta.instance.viewmodel );\n\n\tanchor.attributes.forEach( bind$1$1 );\n\tanchor.eventHandlers.forEach( bind$1$1 );\n\tanchor.attributes.forEach( render$1$1 );\n\tanchor.eventHandlers.forEach( render$1$1 );\n\n\tvar target = anchor.parentFragment.findParentNode();\n\trender$2( meta.instance, target, target.contains( nextNode ) ? nextNode : null );\n\n\tif ( meta.lastBound !== anchor ) {\n\t\tmeta.lastBound = anchor;\n\t}\n\n\tupdateLiveQueries$1( meta );\n}\n\nfunction unrenderItem ( anchor, meta ) {\n\tif ( !anchor.rendered ) { return; }\n\n\tmeta.shouldDestroy = true;\n\tmeta.instance.unrender();\n\n\tanchor.eventHandlers.forEach( unrender$1$1 );\n\tanchor.attributes.forEach( unrender$1$1 );\n\tanchor.eventHandlers.forEach( unbind$1$1 );\n\tanchor.attributes.forEach( unbind$1$1 );\n\n\tmeta.instance.el = meta.instance.anchor = null;\n\tmeta.parentFragment = null;\n\tmeta.anchor = null;\n\tanchor.item = null;\n\tanchor.instance = null;\n\n\tmeta.liveQueries.forEach( function (q) { return q.remove( meta.instance ); } );\n\tmeta.liveQueries = [];\n\tanchor.liveQueries = null;\n}\n\nvar checking = [];\nfunction checkAnchors () {\n\tvar list = checking;\n\tchecking = [];\n\n\tlist.forEach( updateAnchors );\n}\n\nfunction setupArgsFn ( item, template, fragment, opts ) {\n\tif ( opts === void 0 ) opts = {};\n\n\tif ( template && template.f && template.f.s ) {\n\t\titem.fn = getFunction( template.f.s, template.f.r.length );\n\t\tif ( opts.register === true ) {\n\t\t\titem.models = resolveArgs( item, template, fragment, opts );\n\t\t}\n\t}\n}\n\nfunction resolveArgs ( item, template, fragment, opts ) {\n\tif ( opts === void 0 ) opts = {};\n\n\treturn template.f.r.map( function ( ref, i ) {\n\t\tvar model;\n\n\t\tif ( opts.specialRef && ( model = opts.specialRef( ref, i ) ) ) { return model; }\n\n\t\tmodel = resolveReference( fragment, ref );\n\t\tif ( opts.register === true ) {\n\t\t\tmodel.register( item );\n\t\t}\n\n\t\treturn model;\n\t});\n}\n\nfunction teardownArgsFn ( item, template ) {\n\tif ( template && template.f && template.f.s ) {\n\t\tif ( item.models ) { item.models.forEach( function (m) {\n\t\t\tif ( m && m.unregister ) { m.unregister( item ); }\n\t\t}); }\n\t\titem.models = null;\n\t}\n}\n\nvar missingDecorator = {\n\tupdate: noop,\n\tteardown: noop\n};\n\nvar Decorator = function Decorator ( options ) {\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\tthis.parentFragment = this.owner.parentFragment;\n\tthis.ractive = this.owner.ractive;\n\tvar template = this.template = options.template;\n\n\tthis.name = template.n;\n\n\tthis.node = null;\n\tthis.intermediary = null;\n\n\tthis.element.decorators.push( this );\n};\n\nDecorator.prototype.bind = function bind () {\n\tsetupArgsFn( this, this.template, this.parentFragment, { register: true } );\n};\n\nDecorator.prototype.bubble = function bubble () {\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\t\tthis.owner.bubble();\n\t}\n};\n\nDecorator.prototype.destroyed = function destroyed () {\n\tif ( this.intermediary ) { this.intermediary.teardown(); }\n\tthis.shouldDestroy = true;\n};\n\nDecorator.prototype.handleChange = function handleChange () { this.bubble(); };\n\nDecorator.prototype.rebind = function rebind ( next, previous, safe ) {\n\tvar idx = this.models.indexOf( previous );\n\tif ( !~idx ) { return; }\n\n\tnext = rebindMatch( this.template.f.r[ idx ], next, previous );\n\tif ( next === previous ) { return; }\n\n\tprevious.unregister( this );\n\tthis.models.splice( idx, 1, next );\n\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\n\tif ( !safe ) { this.bubble(); }\n};\n\nDecorator.prototype.render = function render () {\n\t\tvar this$1 = this;\n\n\trunloop.scheduleTask( function () {\n\t\tvar fn = findInViewHierarchy( 'decorators', this$1.ractive, this$1.name );\n\n\t\tif ( !fn ) {\n\t\t\twarnOnce( missingPlugin( this$1.name, 'decorator' ) );\n\t\t\tthis$1.intermediary = missingDecorator;\n\t\t\treturn;\n\t\t}\n\n\t\tthis$1.node = this$1.element.node;\n\n\t\tvar args;\n\t\tif ( this$1.fn ) {\n\t\t\targs = this$1.models.map( function (model) {\n\t\t\t\tif ( !model ) { return undefined; }\n\n\t\t\t\treturn model.get();\n\t\t\t});\n\t\t\targs = this$1.fn.apply( this$1.ractive, args );\n\t\t}\n\n\t\tthis$1.intermediary = fn.apply( this$1.ractive, [ this$1.node ].concat( args ) );\n\n\t\tif ( !this$1.intermediary || !this$1.intermediary.teardown ) {\n\t\t\tthrow new Error( (\""The '\"" + (this$1.name) + \""' decorator must return an object with a teardown method\"") );\n\t\t}\n\n\t\t// watch out for decorators that cause their host element to be unrendered\n\t\tif ( this$1.shouldDestroy ) { this$1.destroyed(); }\n\t}, true );\n\tthis.rendered = true;\n};\n\nDecorator.prototype.toString = function toString () { return ''; };\n\nDecorator.prototype.unbind = function unbind () {\n\tteardownArgsFn( this, this.template );\n};\n\nDecorator.prototype.unrender = function unrender ( shouldDestroy ) {\n\tif ( ( !shouldDestroy || this.element.rendered ) && this.intermediary ) { this.intermediary.teardown(); }\n\tthis.rendered = false;\n};\n\nDecorator.prototype.update = function update () {\n\tif ( !this.dirty ) { return; }\n\n\tthis.dirty = false;\n\n\tif ( this.intermediary ) {\n\t\tif ( !this.intermediary.update ) {\n\t\t\tthis.unrender();\n\t\t\tthis.render();\n\t\t}\n\t\telse {\n\t\t\tvar args = this.models.map( function (model) { return model && model.get(); } );\n\t\t\tthis.intermediary.update.apply( this.ractive, this.fn.apply( this.ractive, args ) );\n\t\t}\n\t}\n};\n\nvar Doctype = (function (Item$$1) {\n\tfunction Doctype () {\n\t\tItem$$1.apply(this, arguments);\n\t}\n\n\tif ( Item$$1 ) Doctype.__proto__ = Item$$1;\n\tDoctype.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tDoctype.prototype.constructor = Doctype;\n\n\tDoctype.prototype.toString = function toString () {\n\t\treturn '<!DOCTYPE' + this.template.a + '>';\n\t};\n\n\treturn Doctype;\n}(Item));\n\nvar proto = Doctype.prototype;\nproto.bind = proto.render = proto.teardown = proto.unbind = proto.unrender = proto.update = noop;\n\nvar Binding = function Binding ( element, name ) {\n\tif ( name === void 0 ) name = 'value';\n\n\tthis.element = element;\n\tthis.ractive = element.ractive;\n\tthis.attribute = element.attributeByName[ name ];\n\n\tvar interpolator = this.attribute.interpolator;\n\tinterpolator.twowayBinding = this;\n\n\tvar model = interpolator.model;\n\n\tif ( model.isReadonly ) {\n\t\tvar keypath = model.getKeypath().replace( /^@/, '' );\n\t\twarnOnceIfDebug( (\""Cannot use two-way binding on <\"" + (element.name) + \""> element: \"" + keypath + \"" is read-only. To suppress this warning use <\"" + (element.name) + \"" twoway='false'...>\""), { ractive: this.ractive });\n\t\treturn false;\n\t}\n\n\tthis.attribute.isTwoway = true;\n\tthis.model = model;\n\n\t// initialise value, if it's undefined\n\tvar value = model.get();\n\tthis.wasUndefined = value === undefined;\n\n\tif ( value === undefined && this.getInitialValue ) {\n\t\tvalue = this.getInitialValue();\n\t\tmodel.set( value );\n\t}\n\tthis.lastVal( true, value );\n\n\tvar parentForm = findElement( this.element, false, 'form' );\n\tif ( parentForm ) {\n\t\tthis.resetValue = value;\n\t\tparentForm.formBindings.push( this );\n\t}\n};\n\nBinding.prototype.bind = function bind () {\n\tthis.model.registerTwowayBinding( this );\n};\n\nBinding.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tvar value = this.getValue();\n\tif ( this.lastVal() === value ) { return; }\n\n\trunloop.start( this.root );\n\t\tthis.attribute.locked = true;\n\tthis.model.set( value );\n\tthis.lastVal( true, value );\n\n\t\t// if the value changes before observers fire, unlock to be updatable cause something weird and potentially freezy is up\n\tif ( this.model.get() !== value ) { this.attribute.locked = false; }\n\telse { runloop.scheduleTask( function () { return this$1.attribute.locked = false; } ); }\n\n\trunloop.end();\n};\n\nBinding.prototype.lastVal = function lastVal ( setting, value ) {\n\tif ( setting ) { this.lastValue = value; }\n\telse { return this.lastValue; }\n};\n\nBinding.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tif ( this.model && this.model === previous ) { previous.unregisterTwowayBinding( this ); }\n\tif ( next ) {\n\t\tthis.model = next;\n\t\trunloop.scheduleTask( function () { return next.registerTwowayBinding( this$1 ); } );\n\t}\n};\n\nBinding.prototype.render = function render () {\n\tthis.node = this.element.node;\n\tthis.node._ractive.binding = this;\n\tthis.rendered = true; // TODO is this used anywhere?\n};\n\nBinding.prototype.setFromNode = function setFromNode ( node ) {\n\tthis.model.set( node.value );\n};\n\nBinding.prototype.unbind = function unbind () {\n\tthis.model.unregisterTwowayBinding( this );\n};\n\nBinding.prototype.unrender = noop;\n\n// This is the handler for DOM events that would lead to a change in the model\n// (i.e. change, sometimes, input, and occasionally click and keyup)\nfunction handleDomEvent () {\n\tthis._ractive.binding.handleChange();\n}\n\nvar CheckboxBinding = (function (Binding$$1) {\n\tfunction CheckboxBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'checked' );\n\t}\n\n\tif ( Binding$$1 ) CheckboxBinding.__proto__ = Binding$$1;\n\tCheckboxBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tCheckboxBinding.prototype.constructor = CheckboxBinding;\n\n\tCheckboxBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.node.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tCheckboxBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t\tthis.node.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\tCheckboxBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn !!this.element.getAttribute( 'checked' );\n\t};\n\n\tCheckboxBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.checked;\n\t};\n\n\tCheckboxBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.checked );\n\t};\n\n\treturn CheckboxBinding;\n}(Binding));\n\nfunction getBindingGroup ( group, model, getValue ) {\n\tvar hash = group + \""-bindingGroup\"";\n\treturn model[hash] || ( model[ hash ] = new BindingGroup( hash, model, getValue ) );\n}\n\nvar BindingGroup = function BindingGroup ( hash, model, getValue ) {\n\tvar this$1 = this;\n\n\tthis.model = model;\n\tthis.hash = hash;\n\tthis.getValue = function () {\n\t\tthis$1.value = getValue.call(this$1);\n\t\treturn this$1.value;\n\t};\n\n\tthis.bindings = [];\n};\n\nBindingGroup.prototype.add = function add ( binding ) {\n\tthis.bindings.push( binding );\n};\n\nBindingGroup.prototype.bind = function bind () {\n\tthis.value = this.model.get();\n\tthis.model.registerTwowayBinding( this );\n\tthis.bound = true;\n};\n\nBindingGroup.prototype.remove = function remove ( binding ) {\n\tremoveFromArray( this.bindings, binding );\n\tif ( !this.bindings.length ) {\n\t\tthis.unbind();\n\t}\n};\n\nBindingGroup.prototype.unbind = function unbind () {\n\tthis.model.unregisterTwowayBinding( this );\n\tthis.bound = false;\n\tdelete this.model[this.hash];\n};\n\nvar push$2 = [].push;\n\nfunction getValue$1$1() {\n\tvar all = this.bindings.filter(function (b) { return b.node && b.node.checked; }).map(function (b) { return b.element.getAttribute( 'value' ); });\n\tvar res = [];\n\tall.forEach(function (v) { if ( !arrayContains( res, v ) ) { res.push( v ); } });\n\treturn res;\n}\n\nvar CheckboxNameBinding = (function (Binding$$1) {\n\tfunction CheckboxNameBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'name' );\n\n\t\tthis.checkboxName = true; // so that ractive.updateModel() knows what to do with this\n\n\t\t// Each input has a reference to an array containing it and its\n\t\t// group, as two-way binding depends on being able to ascertain\n\t\t// the status of all inputs within the group\n\t\tthis.group = getBindingGroup( 'checkboxes', this.model, getValue$1$1 );\n\t\tthis.group.add( this );\n\n\t\tif ( this.noInitialValue ) {\n\t\t\tthis.group.noInitialValue = true;\n\t\t}\n\n\t\t// If no initial value was set, and this input is checked, we\n\t\t// update the model\n\t\tif ( this.group.noInitialValue && this.element.getAttribute( 'checked' ) ) {\n\t\t\tvar existingValue = this.model.get();\n\t\t\tvar bindingValue = this.element.getAttribute( 'value' );\n\n\t\t\tif ( !arrayContains( existingValue, bindingValue ) ) {\n\t\t\t\tpush$2.call( existingValue, bindingValue ); // to avoid triggering runloop with array adaptor\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( Binding$$1 ) CheckboxNameBinding.__proto__ = Binding$$1;\n\tCheckboxNameBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tCheckboxNameBinding.prototype.constructor = CheckboxNameBinding;\n\n\tCheckboxNameBinding.prototype.bind = function bind () {\n\t\tif ( !this.group.bound ) {\n\t\t\tthis.group.bind();\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.getInitialValue = function getInitialValue () {\n\t\t// This only gets called once per group (of inputs that\n\t\t// share a name), because it only gets called if there\n\t\t// isn't an initial value. By the same token, we can make\n\t\t// a note of that fact that there was no initial value,\n\t\t// and populate it using any `checked` attributes that\n\t\t// exist (which users should avoid, but which we should\n\t\t// support anyway to avoid breaking expectations)\n\t\tthis.noInitialValue = true; // TODO are noInitialValue and wasUndefined the same thing?\n\t\treturn [];\n\t};\n\n\tCheckboxNameBinding.prototype.getValue = function getValue$1 () {\n\t\treturn this.group.value;\n\t};\n\n\tCheckboxNameBinding.prototype.handleChange = function handleChange () {\n\t\tthis.isChecked = this.element.node.checked;\n\t\tthis.group.value = this.model.get();\n\t\tvar value = this.element.getAttribute( 'value' );\n\t\tif ( this.isChecked && !arrayContains( this.group.value, value ) ) {\n\t\t\tthis.group.value.push( value );\n\t\t} else if ( !this.isChecked && arrayContains( this.group.value, value ) ) {\n\t\t\tremoveFromArray( this.group.value, value );\n\t\t}\n\t\t// make sure super knows there's a change\n\t\tthis.lastValue = null;\n\t\tBinding$$1.prototype.handleChange.call(this);\n\t};\n\n\tCheckboxNameBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tvar existingValue = this.model.get();\n\t\tvar bindingValue = this.element.getAttribute( 'value' );\n\n\t\tif ( Array.isArray( existingValue ) ) {\n\t\t\tthis.isChecked = arrayContains( existingValue, bindingValue );\n\t\t} else {\n\t\t\tthis.isChecked = existingValue == bindingValue;\n\t\t}\n\n\t\tnode.name = '{{' + this.model.getKeypath() + '}}';\n\t\tnode.checked = this.isChecked;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\t// in case of IE emergency, bind to click event as well\n\t\tif ( node.attachEvent ) {\n\t\t\tnode.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.group.bindings.forEach( function (binding) { return binding.wasUndefined = true; } );\n\n\t\tif ( node.checked ) {\n\t\t\tvar valueSoFar = this.group.getValue();\n\t\t\tvalueSoFar.push( this.element.getAttribute( 'value' ) );\n\n\t\t\tthis.group.model.set( valueSoFar );\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.unbind = function unbind () {\n\t\tthis.group.remove( this );\n\t};\n\n\tCheckboxNameBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.element.node;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\treturn CheckboxNameBinding;\n}(Binding));\n\nvar ContentEditableBinding = (function (Binding$$1) {\n\tfunction ContentEditableBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) ContentEditableBinding.__proto__ = Binding$$1;\n\tContentEditableBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tContentEditableBinding.prototype.constructor = ContentEditableBinding;\n\n\tContentEditableBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn this.element.fragment ? this.element.fragment.toString() : '';\n\t};\n\n\tContentEditableBinding.prototype.getValue = function getValue () {\n\t\treturn this.element.node.innerHTML;\n\t};\n\n\tContentEditableBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\t\tnode.addEventListener( 'blur', handleDomEvent, false );\n\n\t\tif ( !this.ractive.lazy ) {\n\t\t\tnode.addEventListener( 'input', handleDomEvent, false );\n\n\t\t\tif ( node.attachEvent ) {\n\t\t\t\tnode.addEventListener( 'keyup', handleDomEvent, false );\n\t\t\t}\n\t\t}\n\t};\n\n\tContentEditableBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.innerHTML );\n\t};\n\n\tContentEditableBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.node;\n\n\t\tnode.removeEventListener( 'blur', handleDomEvent, false );\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'input', handleDomEvent, false );\n\t\tnode.removeEventListener( 'keyup', handleDomEvent, false );\n\t};\n\n\treturn ContentEditableBinding;\n}(Binding));\n\nfunction handleBlur () {\n\thandleDomEvent.call( this );\n\n\tvar value = this._ractive.binding.model.get();\n\tthis.value = value == undefined ? '' : value;\n}\n\nfunction handleDelay ( delay ) {\n\tvar timeout;\n\n\treturn function () {\n\t\tvar this$1 = this;\n\n\t\tif ( timeout ) { clearTimeout( timeout ); }\n\n\t\ttimeout = setTimeout( function () {\n\t\t\tvar binding = this$1._ractive.binding;\n\t\t\tif ( binding.rendered ) { handleDomEvent.call( this$1 ); }\n\t\t\ttimeout = null;\n\t\t}, delay );\n\t};\n}\n\nvar GenericBinding = (function (Binding$$1) {\n\tfunction GenericBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) GenericBinding.__proto__ = Binding$$1;\n\tGenericBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tGenericBinding.prototype.constructor = GenericBinding;\n\n\tGenericBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn '';\n\t};\n\n\tGenericBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.value;\n\t};\n\n\tGenericBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\t// any lazy setting for this element overrides the root\n\t\t// if the value is a number, it's a timeout\n\t\tvar lazy = this.ractive.lazy;\n\t\tvar timeout = false;\n\n\t\tif ( 'lazy' in this.element ) {\n\t\t\tlazy = this.element.lazy;\n\t\t}\n\n\t\tif ( isNumeric( lazy ) ) {\n\t\t\ttimeout = +lazy;\n\t\t\tlazy = false;\n\t\t}\n\n\t\tthis.handler = timeout ? handleDelay( timeout ) : handleDomEvent;\n\n\t\tvar node = this.node;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( !lazy ) {\n\t\t\tnode.addEventListener( 'input', this.handler, false );\n\n\t\t\tif ( node.attachEvent ) {\n\t\t\t\tnode.addEventListener( 'keyup', this.handler, false );\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener( 'blur', handleBlur, false );\n\t};\n\n\tGenericBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.element.node;\n\t\tthis.rendered = false;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'input', this.handler, false );\n\t\tnode.removeEventListener( 'keyup', this.handler, false );\n\t\tnode.removeEventListener( 'blur', handleBlur, false );\n\t};\n\n\treturn GenericBinding;\n}(Binding));\n\nvar FileBinding = (function (GenericBinding$$1) {\n\tfunction FileBinding () {\n\t\tGenericBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( GenericBinding$$1 ) FileBinding.__proto__ = GenericBinding$$1;\n\tFileBinding.prototype = Object.create( GenericBinding$$1 && GenericBinding$$1.prototype );\n\tFileBinding.prototype.constructor = FileBinding;\n\n\tFileBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn undefined;\n\t};\n\n\tFileBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.files;\n\t};\n\n\tFileBinding.prototype.render = function render () {\n\t\tthis.element.lazy = false;\n\t\tGenericBinding$$1.prototype.render.call(this);\n\t};\n\n\tFileBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.files );\n\t};\n\n\treturn FileBinding;\n}(GenericBinding));\n\nfunction getSelectedOptions ( select ) {\n\treturn select.selectedOptions\n\t\t? toArray( select.selectedOptions )\n\t\t: select.options\n\t\t\t? toArray( select.options ).filter( function (option) { return option.selected; } )\n\t\t\t: [];\n}\n\nvar MultipleSelectBinding = (function (Binding$$1) {\n\tfunction MultipleSelectBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) MultipleSelectBinding.__proto__ = Binding$$1;\n\tMultipleSelectBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tMultipleSelectBinding.prototype.constructor = MultipleSelectBinding;\n\n\tMultipleSelectBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn this.element.options\n\t\t\t.filter( function (option) { return option.getAttribute( 'selected' ); } )\n\t\t\t.map( function (option) { return option.getAttribute( 'value' ); } );\n\t};\n\n\tMultipleSelectBinding.prototype.getValue = function getValue () {\n\t\tvar options = this.element.node.options;\n\t\tvar len = options.length;\n\n\t\tvar selectedValues = [];\n\n\t\tfor ( var i = 0; i < len; i += 1 ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( option.selected ) {\n\t\t\t\tvar optionValue = option._ractive ? option._ractive.value : option.value;\n\t\t\t\tselectedValues.push( optionValue );\n\t\t\t}\n\t\t}\n\n\t\treturn selectedValues;\n\t};\n\n\tMultipleSelectBinding.prototype.handleChange = function handleChange () {\n\t\tvar attribute = this.attribute;\n\t\tvar previousValue = attribute.getValue();\n\n\t\tvar value = this.getValue();\n\n\t\tif ( previousValue === undefined || !arrayContentsMatch( value, previousValue ) ) {\n\t\t\tBinding$$1.prototype.handleChange.call(this);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tMultipleSelectBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.model.get() === undefined ) {\n\t\t\t// get value from DOM, if possible\n\t\t\tthis.handleChange();\n\t\t}\n\t};\n\n\tMultipleSelectBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar selectedOptions = getSelectedOptions( node );\n\t\tvar i = selectedOptions.length;\n\t\tvar result = new Array( i );\n\n\t\twhile ( i-- ) {\n\t\t\tvar option = selectedOptions[i];\n\t\t\tresult[i] = option._ractive ? option._ractive.value : option.value;\n\t\t}\n\n\t\tthis.model.set( result );\n\t};\n\n\tMultipleSelectBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t};\n\n\treturn MultipleSelectBinding;\n}(Binding));\n\nvar NumericBinding = (function (GenericBinding$$1) {\n\tfunction NumericBinding () {\n\t\tGenericBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( GenericBinding$$1 ) NumericBinding.__proto__ = GenericBinding$$1;\n\tNumericBinding.prototype = Object.create( GenericBinding$$1 && GenericBinding$$1.prototype );\n\tNumericBinding.prototype.constructor = NumericBinding;\n\n\tNumericBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn undefined;\n\t};\n\n\tNumericBinding.prototype.getValue = function getValue () {\n\t\tvar value = parseFloat( this.node.value );\n\t\treturn isNaN( value ) ? undefined : value;\n\t};\n\n\tNumericBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar value = parseFloat( node.value );\n\t\tif ( !isNaN( value ) ) { this.model.set( value ); }\n\t};\n\n\treturn NumericBinding;\n}(GenericBinding));\n\nvar siblings = {};\n\nfunction getSiblings ( hash ) {\n\treturn siblings[ hash ] || ( siblings[ hash ] = [] );\n}\n\nvar RadioBinding = (function (Binding$$1) {\n\tfunction RadioBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'checked' );\n\n\t\tthis.siblings = getSiblings( this.ractive._guid + this.element.getAttribute( 'name' ) );\n\t\tthis.siblings.push( this );\n\t}\n\n\tif ( Binding$$1 ) RadioBinding.__proto__ = Binding$$1;\n\tRadioBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tRadioBinding.prototype.constructor = RadioBinding;\n\n\tRadioBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.checked;\n\t};\n\n\tRadioBinding.prototype.handleChange = function handleChange () {\n\t\trunloop.start( this.root );\n\n\t\tthis.siblings.forEach( function (binding) {\n\t\t\tbinding.model.set( binding.getValue() );\n\t\t});\n\n\t\trunloop.end();\n\t};\n\n\tRadioBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.node.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tRadioBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.checked );\n\t};\n\n\tRadioBinding.prototype.unbind = function unbind () {\n\t\tremoveFromArray( this.siblings, this );\n\t};\n\n\tRadioBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t\tthis.node.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\treturn RadioBinding;\n}(Binding));\n\nfunction getValue$2() {\n\tvar checked = this.bindings.filter( function (b) { return b.node.checked; } );\n\tif ( checked.length > 0 ) {\n\t\treturn checked[0].element.getAttribute( 'value' );\n\t}\n}\n\nvar RadioNameBinding = (function (Binding$$1) {\n\tfunction RadioNameBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'name' );\n\n\t\tthis.group = getBindingGroup( 'radioname', this.model, getValue$2 );\n\t\tthis.group.add( this );\n\n\t\tif ( element.checked ) {\n\t\t\tthis.group.value = this.getValue();\n\t\t}\n\t}\n\n\tif ( Binding$$1 ) RadioNameBinding.__proto__ = Binding$$1;\n\tRadioNameBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tRadioNameBinding.prototype.constructor = RadioNameBinding;\n\n\tRadioNameBinding.prototype.bind = function bind () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.group.bound ) {\n\t\t\tthis.group.bind();\n\t\t}\n\n\t\t// update name keypath when necessary\n\t\tthis.nameAttributeBinding = {\n\t\t\thandleChange: function () { return this$1.node.name = \""{{\"" + (this$1.model.getKeypath()) + \""}}\""; }\n\t\t};\n\n\t\tthis.model.getKeypathModel().register( this.nameAttributeBinding );\n\t};\n\n\tRadioNameBinding.prototype.getInitialValue = function getInitialValue () {\n\t\tif ( this.element.getAttribute( 'checked' ) ) {\n\t\t\treturn this.element.getAttribute( 'value' );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.getValue = function getValue$1 () {\n\t\treturn this.element.getAttribute( 'value' );\n\t};\n\n\tRadioNameBinding.prototype.handleChange = function handleChange () {\n\t\t// If this <input> is the one that's checked, then the value of its\n\t\t// `name` model gets set to its value\n\t\tif ( this.node.checked ) {\n\t\t\tthis.group.value = this.getValue();\n\t\t\tBinding$$1.prototype.handleChange.call(this);\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.lastVal = function lastVal ( setting, value ) {\n\t\tif ( !this.group ) { return; }\n\t\tif ( setting ) { this.group.lastValue = value; }\n\t\telse { return this.group.lastValue; }\n\t};\n\n\tRadioNameBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tnode.name = \""{{\"" + (this.model.getKeypath()) + \""}}\"";\n\t\tnode.checked = this.model.get() == this.element.getAttribute( 'value' );\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( node.attachEvent ) {\n\t\t\tnode.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tif ( node.checked ) {\n\t\t\tthis.group.model.set( this.element.getAttribute( 'value' ) );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.unbind = function unbind () {\n\t\tthis.group.remove( this );\n\n\t\tthis.model.getKeypathModel().unregister( this.nameAttributeBinding );\n\t};\n\n\tRadioNameBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.node;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\treturn RadioNameBinding;\n}(Binding));\n\nvar SingleSelectBinding = (function (Binding$$1) {\n\tfunction SingleSelectBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) SingleSelectBinding.__proto__ = Binding$$1;\n\tSingleSelectBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tSingleSelectBinding.prototype.constructor = SingleSelectBinding;\n\n\tSingleSelectBinding.prototype.forceUpdate = function forceUpdate () {\n\t\tvar this$1 = this;\n\n\t\tvar value = this.getValue();\n\n\t\tif ( value !== undefined ) {\n\t\t\tthis.attribute.locked = true;\n\t\t\trunloop.scheduleTask( function () { return this$1.attribute.locked = false; } );\n\t\t\tthis.model.set( value );\n\t\t}\n\t};\n\n\tSingleSelectBinding.prototype.getInitialValue = function getInitialValue () {\n\t\tif ( this.element.getAttribute( 'value' ) !== undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar options = this.element.options;\n\t\tvar len = options.length;\n\n\t\tif ( !len ) { return; }\n\n\t\tvar value;\n\t\tvar optionWasSelected;\n\t\tvar i = len;\n\n\t\t// take the final selected option...\n\t\twhile ( i-- ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( option.getAttribute( 'selected' ) ) {\n\t\t\t\tif ( !option.getAttribute( 'disabled' ) ) {\n\t\t\t\t\tvalue = option.getAttribute( 'value' );\n\t\t\t\t}\n\n\t\t\t\toptionWasSelected = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// or the first non-disabled option, if none are selected\n\t\tif ( !optionWasSelected ) {\n\t\t\twhile ( ++i < len ) {\n\t\t\t\tif ( !options[i].getAttribute( 'disabled' ) ) {\n\t\t\t\t\tvalue = options[i].getAttribute( 'value' );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This is an optimisation (aka hack) that allows us to forgo some\n\t\t// other more expensive work\n\t\t// TODO does it still work? seems at odds with new architecture\n\t\tif ( value !== undefined ) {\n\t\t\tthis.element.attributeByName.value.value = value;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\tSingleSelectBinding.prototype.getValue = function getValue () {\n\t\tvar options = this.node.options;\n\t\tvar len = options.length;\n\n\t\tvar i;\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( options[i].selected && !options[i].disabled ) {\n\t\t\t\treturn option._ractive ? option._ractive.value : option.value;\n\t\t\t}\n\t\t}\n\t};\n\n\tSingleSelectBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\t};\n\n\tSingleSelectBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar option = getSelectedOptions( node )[0];\n\t\tthis.model.set( option._ractive ? option._ractive.value : option.value );\n\t};\n\n\tSingleSelectBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t};\n\n\treturn SingleSelectBinding;\n}(Binding));\n\nfunction isBindable ( attribute ) {\n\n\t// The fragment must be a single non-string fragment\n\tif ( !attribute || !attribute.template.f || !attribute.template.f.length === 1 || attribute.template.f[0].s ) { return false; }\n\n\t// A binding is an interpolator `{{ }}`, yey.\n\tif ( attribute.template.f[0].t === INTERPOLATOR ) { return true; }\n\n\t// The above is probably the only true case. For the rest, show an appropriate\n\t// warning before returning false.\n\n\t// You can't bind a triple curly. HTML values on an attribute makes no sense.\n\tif ( attribute.template.f[0].t === TRIPLE ) { warnIfDebug( 'It is not possible create a binding using a triple mustache.' ); }\n\n\treturn false;\n}\n\nfunction selectBinding ( element ) {\n\tvar name = element.name;\n\tvar attributes = element.attributeByName;\n\tvar isBindableByValue = isBindable( attributes.value );\n\tvar isBindableByContentEditable = isBindable( attributes.contenteditable );\n\tvar isContentEditable =  element.getAttribute( 'contenteditable' );\n\n\t// contenteditable\n\t// Bind if the contenteditable is true or a binding that may become true.\n\tif ( ( isContentEditable || isBindableByContentEditable ) && isBindableByValue ) { return ContentEditableBinding; }\n\n\t// <input>\n\tif ( name === 'input' ) {\n\t\tvar type = element.getAttribute( 'type' );\n\n\t\tif ( type === 'radio' ) {\n\t\t\tvar isBindableByName = isBindable( attributes.name );\n\t\t\tvar isBindableByChecked = isBindable( attributes.checked );\n\n\t\t\t// For radios we can either bind the name or checked, but not both.\n\t\t\t// Name binding is handed instead.\n\t\t\tif ( isBindableByName && isBindableByChecked ) {\n\t\t\t\twarnIfDebug( 'A radio input can have two-way binding on its name attribute, or its checked attribute - not both', { ractive: element.root });\n\t\t\t\treturn RadioNameBinding;\n\t\t\t}\n\n\t\t\tif ( isBindableByName ) { return RadioNameBinding; }\n\n\t\t\tif ( isBindableByChecked ) { return RadioBinding; }\n\n\t\t\t// Dead end. Unknown binding on radio input.\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type === 'checkbox' ) {\n\t\t\tvar isBindableByName$1 = isBindable( attributes.name );\n\t\t\tvar isBindableByChecked$1 = isBindable( attributes.checked );\n\n\t\t\t// A checkbox with bindings for both name and checked. Checked treated as\n\t\t\t// the checkbox value, name is treated as a regular binding.\n\t\t\t//\n\t\t\t// See https://github.com/ractivejs/ractive/issues/1749\n\t\t\tif ( isBindableByName$1 && isBindableByChecked$1 ) { return CheckboxBinding; }\n\n\t\t\tif ( isBindableByName$1 ) { return CheckboxNameBinding; }\n\n\t\t\tif ( isBindableByChecked$1 ) { return CheckboxBinding; }\n\n\t\t\t// Dead end. Unknown binding on checkbox input.\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type === 'file' && isBindableByValue ) { return FileBinding; }\n\n\t\tif ( type === 'number' && isBindableByValue ) { return NumericBinding; }\n\n\t\tif ( type === 'range' && isBindableByValue ) { return NumericBinding; }\n\n\t\t// Some input of unknown type (browser usually falls back to text).\n\t\tif ( isBindableByValue ) { return GenericBinding; }\n\n\t\t// Dead end. Some unknown input and an unbindable.\n\t\treturn null;\n\t}\n\n\t// <select>\n\tif ( name === 'select' && isBindableByValue ){\n\t\treturn element.getAttribute( 'multiple' ) ? MultipleSelectBinding : SingleSelectBinding;\n\t}\n\n\t// <textarea>\n\tif ( name === 'textarea' && isBindableByValue ) { return GenericBinding; }\n\n\t// Dead end. Some unbindable element.\n\treturn null;\n}\n\nvar DOMEvent = function DOMEvent ( name, owner ) {\n\tif ( name.indexOf( '*' ) !== -1 ) {\n\t\tfatal( (\""Only component proxy-events may contain \\\""*\\\"" wildcards, <\"" + (owner.name) + \"" on-\"" + name + \""=\\\""...\\\""/> is not valid\"") );\n\t}\n\n\tthis.name = name;\n\tthis.owner = owner;\n\tthis.node = null;\n\tthis.handler = null;\n};\n\nDOMEvent.prototype.listen = function listen ( directive ) {\n\t\tvar node = this.node = this.owner.node;\n\tvar name = this.name;\n\n\t// this is probably a custom event fired from a decorator or manually\n\t\tif ( !( (\""on\"" + name) in node ) ) { return; }\n\n\tnode.addEventListener( name, this.handler = function( event ) {\n\t\tdirective.fire({\n\t\t\tnode: node,\n\t\t\toriginal: event,\n\t\t\tname: name\n\t\t});\n\t}, false );\n};\n\nDOMEvent.prototype.unlisten = function unlisten () {\n\tif ( this.handler ) { this.node.removeEventListener( this.name, this.handler, false ); }\n};\n\nvar CustomEvent = function CustomEvent ( eventPlugin, owner, name ) {\n\tthis.eventPlugin = eventPlugin;\n\tthis.owner = owner;\n\tthis.name = name;\n\tthis.handler = null;\n};\n\nCustomEvent.prototype.listen = function listen ( directive ) {\n\t\tvar this$1 = this;\n\n\tvar node = this.owner.node;\n\n\tthis.handler = this.eventPlugin( node, function ( event ) {\n\t\t\tif ( event === void 0 ) event = {};\n\n\t\tevent.name = this$1.name;\n\t\t\tevent.node = event.node || node;\n\t\t\tdirective.fire( event );\n\t});\n};\n\nCustomEvent.prototype.unlisten = function unlisten () {\n\tthis.handler.teardown();\n};\n\nvar RactiveEvent = function RactiveEvent ( component, name ) {\n\tthis.component = component;\n\tthis.name = name;\n\tthis.handler = null;\n};\n\nRactiveEvent.prototype.listen = function listen ( directive ) {\n\tvar ractive = this.component.instance;\n\n\tthis.handler = ractive.on( this.name, function () {\n\t\tvar event;\n\n\t\t// semi-weak test, but what else? tag the event obj ._isEvent ?\n\t\tif ( arguments.length && arguments[0] && arguments[0].node ) {\n\t\t\tevent = Array.prototype.shift.call( arguments );\n\t\t\tevent.component = ractive;\n\t\t}\n\n\t\tvar args = Array.prototype.slice.call( arguments );\n\t\tdirective.fire( event, args );\n\n\t\t// cancel bubbling\n\t\treturn false;\n\t});\n};\n\nRactiveEvent.prototype.unlisten = function unlisten () {\n\tthis.handler.cancel();\n};\n\nvar specialPattern = /^(event|arguments)(\\..+)?$/;\nvar dollarArgsPattern = /^\\$(\\d+)(\\..+)?$/;\n\nvar DelegateProxy = {\n\tfire: function fire ( event, passedArgs ) {\n\t\tif ( passedArgs === void 0 ) passedArgs = [];\n\n\t\tif ( event && event.original ) {\n\t\t\tvar ev = event.original;\n\n\t\t\t// TODO if IE<9 needs to be supported here, could probably walk to the element with a ractive proxy with a delegates property\n\t\t\tvar end = ev.currentTarget;\n\t\t\tvar node = ev.target;\n\t\t\tvar name = event.name;\n\t\t\tvar bubble = true;\n\n\t\t\t// starting with the origin node, walk up the DOM looking for ractive nodes with a matching event listener\n\t\t\twhile ( bubble && node !== end ) {\n\t\t\t\tvar el = node._ractive && node._ractive.proxy;\n\t\t\t\tif ( el ) {\n\n\t\t\t\t\t// set up the context for the handler\n\t\t\t\t\tevent.node = el.node;\n\t\t\t\t\tevent.name = name;\n\n\t\t\t\t\tel.events.forEach( function (ev) {\n\t\t\t\t\t\tif ( ~ev.template.n.indexOf( name ) ) {\n\t\t\t\t\t\t\tbubble = ev.fire( event, passedArgs ) !== false && bubble;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tnode = node.parentNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn bubble;\n\t\t}\n\t}\n};\n\nvar EventDirective = function EventDirective ( options ) {\n\tvar this$1 = this;\n\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment, true );\n\tthis.template = options.template;\n\tthis.parentFragment = options.parentFragment;\n\tthis.ractive = options.parentFragment.ractive;\n\tvar delegate = this.delegate = this.ractive.delegate && options.parentFragment.delegate;\n\tthis.events = [];\n\n\tif ( this.element.type === COMPONENT || this.element.type === ANCHOR ) {\n\t\tthis.template.n.forEach( function (n) {\n\t\t\tthis$1.events.push( new RactiveEvent( this$1.element, n ) );\n\t\t});\n\t} else {\n\t\t// make sure the delegate element has a storag object\n\t\tif ( delegate && !delegate.delegates ) { delegate.delegates = {}; }\n\n\t\tthis.template.n.forEach( function (n) {\n\t\t\tvar fn = findInViewHierarchy( 'events', this$1.ractive, n );\n\t\t\tif ( fn ) {\n\t\t\t\tthis$1.events.push( new CustomEvent( fn, this$1.element, n ) );\n\t\t\t} else {\n\t\t\t\tif ( delegate ) {\n\t\t\t\t\tif ( !delegate.delegates[n] ) {\n\t\t\t\t\t\tvar ev = new DOMEvent( n, delegate );\n\t\t\t\t\t\tdelegate.delegates[n] = ev;\n\t\t\t\t\t\t// if the element is already rendered, render the event too\n\t\t\t\t\t\tif ( delegate.rendered ) { ev.listen( DelegateProxy ); }\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis$1.events.push( new DOMEvent( n, this$1.element ) );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// method calls\n\tthis.models = null;\n};\n\nEventDirective.prototype.bind = function bind () {\n\taddToArray( this.element.events, this );\n\n\tsetupArgsFn( this, this.template );\n\tif ( !this.fn ) { this.action = this.template.f; }\n};\n\nEventDirective.prototype.destroyed = function destroyed () {\n\tthis.events.forEach( function (e) { return e.unlisten(); } );\n};\n\nEventDirective.prototype.fire = function fire ( event, passedArgs ) {\n\t\tif ( passedArgs === void 0 ) passedArgs = [];\n\n\t// augment event object\n\tif ( event ) {\n\t\t   if ( !event.hasOwnProperty( 'proxy' ) ) { addHelpers( event, this.owner ); }\n\t\t   else { event.proxy = this.owner; }\n\t}\n\n\tif ( this.fn ) {\n\t\tvar values = [];\n\n\t\tif ( event ) { passedArgs.unshift( event ); }\n\n\t\tvar models = resolveArgs( this, this.template, this.parentFragment, {\n\t\t\tspecialRef: function specialRef ( ref ) {\n\t\t\t\tvar specialMatch = specialPattern.exec( ref );\n\t\t\t\tif ( specialMatch ) {\n\t\t\t\t\t// on-click=\""foo(event.node)\""\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspecial: specialMatch[1],\n\t\t\t\t\t\tkeys: specialMatch[2] ? splitKeypath( specialMatch[2].substr(1) ) : []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvar dollarMatch = dollarArgsPattern.exec( ref );\n\t\t\t\tif ( dollarMatch ) {\n\t\t\t\t\t// on-click=\""foo($1)\""\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspecial: 'arguments',\n\t\t\t\t\t\tkeys: [ dollarMatch[1] - 1 ].concat( dollarMatch[2] ? splitKeypath( dollarMatch[2].substr( 1 ) ) : [] )\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( models ) {\n\t\t\tmodels.forEach( function (model) {\n\t\t\t\tif ( !model ) { return values.push( undefined ); }\n\n\t\t\t\tif ( model.special ) {\n\t\t\t\t\tvar obj = model.special === 'event' ? event : passedArgs;\n\t\t\t\t\tvar keys = model.keys.slice();\n\n\t\t\t\t\twhile ( keys.length ) { obj = obj[ keys.shift() ]; }\n\t\t\t\t\treturn values.push( obj );\n\t\t\t\t}\n\n\t\t\t\tif ( model.wrapper ) {\n\t\t\t\t\treturn values.push( model.wrapperValue );\n\t\t\t\t}\n\n\t\t\t\tvalues.push( model.get() );\n\t\t\t});\n\t\t}\n\n\t\t// make event available as `this.event`\n\t\tvar ractive = this.ractive;\n\t\tvar oldEvent = ractive.event;\n\n\t\tractive.event = event;\n\t\tvar result = this.fn.apply( ractive, values ).pop();\n\n\t\t// Auto prevent and stop if return is explicitly false\n\t\tif ( result === false ) {\n\t\t\tvar original = event ? event.original : undefined;\n\t\t\tif ( original ) {\n\t\t\t\toriginal.preventDefault && original.preventDefault();\n\t\t\t\toriginal.stopPropagation && original.stopPropagation();\n\t\t\t} else {\n\t\t\t\twarnOnceIfDebug( (\""handler '\"" + (this.template.n.join( ' ' )) + \""' returned false, but there is no event available to cancel\"") );\n\t\t\t}\n\t\t}\n\n\t\tractive.event = oldEvent;\n\n\t\treturn result;\n\t}\n\n\telse {\n\t\tvar args = [];\n\t\tif ( passedArgs.length ) { args = args.concat( passedArgs ); }\n\t\tif ( event ) { event.name = this.action; }\n\n\t\treturn fireEvent( this.ractive, this.action, {\n\t\t\tevent: event,\n\t\t\targs: args\n\t\t});\n\t}\n};\n\nEventDirective.prototype.handleChange = function handleChange () {};\n\nEventDirective.prototype.render = function render () {\n\t\tvar this$1 = this;\n\n\t// render events after everything else, so they fire after bindings\n\trunloop.scheduleTask( function () { return this$1.events.forEach( function (e) { return e.listen( this$1 ); }, true ); } );\n};\n\nEventDirective.prototype.toString = function toString () { return ''; };\n\nEventDirective.prototype.unbind = function unbind () {\n\tremoveFromArray( this.element.events, this );\n};\n\nEventDirective.prototype.unrender = function unrender () {\n\tthis.events.forEach( function (e) { return e.unlisten(); } );\n};\n\nEventDirective.prototype.update = noop;\n\nfunction makeDirty$2 ( query ) {\n\tquery.makeDirty();\n}\n\nvar endsWithSemi = /;\\s*$/;\n\nvar Element = (function (ContainerItem$$1) {\n\tfunction Element ( options ) {\n\t\tvar this$1 = this;\n\n\t\tContainerItem$$1.call( this, options );\n\n\t\tthis.liveQueries = []; // TODO rare case. can we handle differently?\n\n\t\tthis.name = options.template.e.toLowerCase();\n\t\tthis.isVoid = voidElementNames.test( this.name );\n\n\t\t// find parent element\n\t\tthis.parent = findElement( this.parentFragment, false );\n\n\t\tif ( this.parent && this.parent.name === 'option' ) {\n\t\t\tthrow new Error( (\""An <option> element cannot contain other elements (encountered <\"" + (this.name) + \"">)\"") );\n\t\t}\n\n\t\tthis.decorators = [];\n\t\tthis.events = [];\n\n\t\t// create attributes\n\t\tthis.attributeByName = {};\n\n\t\tthis.attributes = [];\n\t\tvar leftovers = [];\n\t\t( this.template.m || [] ).forEach( function (template) {\n\t\t\tswitch ( template.t ) {\n\t\t\t\tcase ATTRIBUTE:\n\t\t\t\tcase BINDING_FLAG:\n\t\t\t\tcase DECORATOR:\n\t\t\t\tcase EVENT:\n\t\t\t\tcase TRANSITION:\n\t\t\t\t\tthis$1.attributes.push( createItem({\n\t\t\t\t\t\towner: this$1,\n\t\t\t\t\t\tparentFragment: this$1.parentFragment,\n\t\t\t\t\t\ttemplate: template\n\t\t\t\t\t}) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase DELEGATE_FLAG:\n\t\t\t\t  this$1.delegate = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tleftovers.push( template );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif ( leftovers.length ) {\n\t\t\tthis.attributes.push( new ConditionalAttribute({\n\t\t\t\towner: this,\n\t\t\t\tparentFragment: this.parentFragment,\n\t\t\t\ttemplate: leftovers\n\t\t\t}) );\n\t\t}\n\n\t\tthis.attributes.sort( sortAttributes );\n\n\t\t// create children\n\t\tif ( options.template.f && !options.deferContent ) {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\ttemplate: options.template.f,\n\t\t\t\towner: this,\n\t\t\t\tcssIds: null\n\t\t\t});\n\t\t}\n\n\t\tthis.binding = null; // filled in later\n\t}\n\n\tif ( ContainerItem$$1 ) Element.__proto__ = ContainerItem$$1;\n\tElement.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tElement.prototype.constructor = Element;\n\n\tElement.prototype.bind = function bind$1 () {\n\t\tthis.attributes.binding = true;\n\t\tthis.attributes.forEach( bind$1$1 );\n\t\tthis.attributes.binding = false;\n\n\t\tif ( this.fragment ) { this.fragment.bind(); }\n\n\t\t// create two-way binding if necessary\n\t\tif ( !this.binding ) { this.recreateTwowayBinding(); }\n\t};\n\n\tElement.prototype.createTwowayBinding = function createTwowayBinding () {\n\t\tif ( 'twoway' in this ? this.twoway : this.ractive.twoway ) {\n\t\t\tvar Binding = selectBinding( this );\n\t\t\tif ( Binding ) {\n\t\t\t\tvar binding = new Binding( this );\n\t\t\t\tif ( binding && binding.model ) { return binding; }\n\t\t\t}\n\t\t}\n\t};\n\n\tElement.prototype.destroyed = function destroyed$1 () {\n\t\tvar this$1 = this;\n\n\t\tthis.attributes.forEach( destroyed$1$1 );\n\t\tfor ( var ev in this.delegates ) {\n\t\t\tthis$1.delegates[ev].unlisten();\n\t\t}\n\t\tif ( this.fragment ) { this.fragment.destroyed(); }\n\t};\n\n\tElement.prototype.detach = function detach () {\n\t\t// if this element is no longer rendered, the transitions are complete and the attributes can be torn down\n\t\tif ( !this.rendered ) { this.destroyed(); }\n\n\t\treturn detachNode( this.node );\n\t};\n\n\tElement.prototype.find = function find ( selector, options ) {\n\t\tif ( this.node && matches( this.node, selector ) ) { return this.node; }\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.find( selector, options );\n\t\t}\n\t};\n\n\tElement.prototype.findAll = function findAll ( selector, query ) {\n\t\t// Add this node to the query, if applicable, and register the\n\t\t// query on this element\n\t\tvar matches$$1 = query.test( this.node );\n\t\tif ( matches$$1 ) {\n\t\t\tquery.add( this.node );\n\t\t\tif ( query.live ) { this.liveQueries.push( query ); }\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAll( selector, query );\n\t\t}\n\t};\n\n\tElement.prototype.findNextNode = function findNextNode () {\n\t\treturn null;\n\t};\n\n\tElement.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tElement.prototype.getAttribute = function getAttribute ( name ) {\n\t\tvar attribute = this.attributeByName[ name ];\n\t\treturn attribute ? attribute.getValue() : undefined;\n\t};\n\n\tElement.prototype.recreateTwowayBinding = function recreateTwowayBinding () {\n\t\tif ( this.binding ) {\n\t\t\tthis.binding.unbind();\n\t\t\tthis.binding.unrender();\n\t\t}\n\n\t\tif ( this.binding = this.createTwowayBinding() ) {\n\t\t\tthis.binding.bind();\n\t\t\tif ( this.rendered ) { this.binding.render(); }\n\t\t}\n\t};\n\n\tElement.prototype.removeFromQuery = function removeFromQuery ( query ) {\n\t\tquery.remove( this.node );\n\t\tremoveFromArray( this.liveQueries, query );\n\t};\n\n\tElement.prototype.render = function render$1 ( target, occupants ) {\n\t\tvar this$1 = this;\n\n\t\t// TODO determine correct namespace\n\t\tthis.namespace = getNamespace( this );\n\n\t\tvar node;\n\t\tvar existing = false;\n\n\t\tif ( occupants ) {\n\t\t\tvar n;\n\t\t\twhile ( ( n = occupants.shift() ) ) {\n\t\t\t\tif ( n.nodeName.toUpperCase() === this$1.template.e.toUpperCase() && n.namespaceURI === this$1.namespace ) {\n\t\t\t\t\tthis$1.node = node = n;\n\t\t\t\t\texisting = true;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tdetachNode( n );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !node ) {\n\t\t\tvar name = this.template.e;\n\t\t\tnode = createElement( this.namespace === html ? name.toLowerCase() : name, this.namespace, this.getAttribute( 'is' ) );\n\t\t\tthis.node = node;\n\t\t}\n\n\t\t// tie the node to this vdom element\n\t\tObject.defineProperty( node, '_ractive', {\n\t\t\tvalue: {\n\t\t\t\tproxy: this\n\t\t\t}\n\t\t});\n\n\t\t// Is this a top-level node of a component? If so, we may need to add\n\t\t// a data-ractive-css attribute, for CSS encapsulation\n\t\tif ( this.parentFragment.cssIds ) {\n\t\t\tnode.setAttribute( 'data-ractive-css', this.parentFragment.cssIds.map( function (x) { return (\""{\"" + x + \""}\""); } ).join( ' ' ) );\n\t\t}\n\n\t\tif ( existing && this.foundNode ) { this.foundNode( node ); }\n\n\t\t// register intro before rendering content so children can find the intro\n\t\tvar intro = this.intro;\n\t\tif ( intro && intro.shouldFire( 'intro' ) ) {\n\t\t\tintro.isIntro = true;\n\t\t\tintro.isOutro = false;\n\t\t\trunloop.registerTransition( intro );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tvar children = existing ? toArray( node.childNodes ) : undefined;\n\n\t\t\tthis.fragment.render( node, children );\n\n\t\t\t// clean up leftover children\n\t\t\tif ( children ) {\n\t\t\t\tchildren.forEach( detachNode );\n\t\t\t}\n\t\t}\n\n\t\tif ( existing ) {\n\t\t\t// store initial values for two-way binding\n\t\t\tif ( this.binding && this.binding.wasUndefined ) { this.binding.setFromNode( node ); }\n\t\t\t// remove unused attributes\n\t\t\tvar i = node.attributes.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar name$1 = node.attributes[i].name;\n\t\t\t\tif ( !( name$1 in this$1.attributeByName ) ){ node.removeAttribute( name$1 ); }\n\t\t\t}\n\t\t}\n\n\t\tthis.attributes.forEach( render$1$1 );\n\t\tif ( this.delegates ) {\n\t\t\tfor ( var ev in this.delegates ) {\n\t\t\t\tthis$1.delegates[ev].listen( DelegateProxy );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.binding ) { this.binding.render(); }\n\n\t\tupdateLiveQueries( this );\n\n\t\tif ( !existing ) {\n\t\t\ttarget.appendChild( node );\n\t\t}\n\n\t\tthis.rendered = true;\n\t};\n\n\tElement.prototype.shuffled = function shuffled () {\n\t\tthis.liveQueries.forEach( makeDirty$2 );\n\t\tContainerItem$$1.prototype.shuffled.call(this);\n\t};\n\n\tElement.prototype.toString = function toString () {\n\t\tvar tagName = this.template.e;\n\n\t\tvar attrs = this.attributes.map( stringifyAttribute ).join( '' );\n\n\t\t// Special case - selected options\n\t\tif ( this.name === 'option' && this.isSelected() ) {\n\t\t\tattrs += ' selected';\n\t\t}\n\n\t\t// Special case - two-way radio name bindings\n\t\tif ( this.name === 'input' && inputIsCheckedRadio( this ) ) {\n\t\t\tattrs += ' checked';\n\t\t}\n\n\t\t// Special case style and class attributes and directives\n\t\tvar style, cls;\n\t\tthis.attributes.forEach( function (attr) {\n\t\t\tif ( attr.name === 'class' ) {\n\t\t\t\tcls = ( cls || '' ) + ( cls ? ' ' : '' ) + safeAttributeString( attr.getString() );\n\t\t\t} else if ( attr.name === 'style' ) {\n\t\t\t\tstyle = ( style || '' ) + ( style ? ' ' : '' ) + safeAttributeString( attr.getString() );\n\t\t\t\tif ( style && !endsWithSemi.test( style ) ) { style += ';'; }\n\t\t\t} else if ( attr.style ) {\n\t\t\t\tstyle = ( style || '' ) + ( style ? ' ' : '' ) +  (attr.style) + \"": \"" + (safeAttributeString( attr.getString() )) + \"";\"";\n\t\t\t} else if ( attr.inlineClass && attr.getValue() ) {\n\t\t\t\tcls = ( cls || '' ) + ( cls ? ' ' : '' ) + attr.inlineClass;\n\t\t\t}\n\t\t});\n\t\t// put classes first, then inline style\n\t\tif ( style !== undefined ) { attrs = ' style' + ( style ? (\""=\\\""\"" + style + \""\\\""\"") : '' ) + attrs; }\n\t\tif ( cls !== undefined ) { attrs = ' class' + (cls ? (\""=\\\""\"" + cls + \""\\\""\"") : '') + attrs; }\n\n\t\tif ( this.parentFragment.cssIds ) {\n\t\t\tattrs += \"" data-ractive-css=\\\""\"" + (this.parentFragment.cssIds.map( function (x) { return (\""{\"" + x + \""}\""); } ).join( ' ' )) + \""\\\""\"";\n\t\t}\n\n\t\tvar str = \""<\"" + tagName + attrs + \"">\"";\n\n\t\tif ( this.isVoid ) { return str; }\n\n\t\t// Special case - textarea\n\t\tif ( this.name === 'textarea' && this.getAttribute( 'value' ) !== undefined ) {\n\t\t\tstr += escapeHtml( this.getAttribute( 'value' ) );\n\t\t}\n\n\t\t// Special case - contenteditable\n\t\telse if ( this.getAttribute( 'contenteditable' ) !== undefined ) {\n\t\t\tstr += ( this.getAttribute( 'value' ) || '' );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tstr += this.fragment.toString( !/^(?:script|style)$/i.test( this.template.e ) ); // escape text unless script/style\n\t\t}\n\n\t\tstr += \""</\"" + tagName + \"">\"";\n\t\treturn str;\n\t};\n\n\tElement.prototype.unbind = function unbind$1 () {\n\t\tthis.attributes.unbinding = true;\n\t\tthis.attributes.forEach( unbind$1$1 );\n\t\tthis.attributes.unbinding = false;\n\n\t\tif ( this.binding ) { this.binding.unbind(); }\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tElement.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.rendered ) { return; }\n\t\tthis.rendered = false;\n\n\t\t// unrendering before intro completed? complete it now\n\t\t// TODO should be an API for aborting transitions\n\t\tvar transition = this.intro;\n\t\tif ( transition && transition.complete ) { transition.complete(); }\n\n\t\t// Detach as soon as we can\n\t\tif ( this.name === 'option' ) {\n\t\t\t// <option> elements detach immediately, so that\n\t\t\t// their parent <select> element syncs correctly, and\n\t\t\t// since option elements can't have transitions anyway\n\t\t\tthis.detach();\n\t\t} else if ( shouldDestroy ) {\n\t\t\trunloop.detachWhenReady( this );\n\t\t}\n\n\t\t// outro transition\n\t\tvar outro = this.outro;\n\t\tif ( outro && outro.shouldFire( 'outro' ) ) {\n\t\t\toutro.isIntro = false;\n\t\t\toutro.isOutro = true;\n\t\t\trunloop.registerTransition( outro );\n\t\t}\n\n\t\tif ( this.fragment ) { this.fragment.unrender(); }\n\n\t\tif ( this.binding ) { this.binding.unrender(); }\n\n\t\tthis.liveQueries.forEach( function (query) { return query.remove( this$1.node ); } );\n\t\tthis.liveQueries = [];\n\t\t// TODO forms are a special case\n\t};\n\n\tElement.prototype.update = function update$1 () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tthis.attributes.forEach( update$1$1 );\n\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t}\n\t};\n\n\treturn Element;\n}(ContainerItem));\n\nvar toFront = [ 'min', 'max', 'class', 'type' ];\nfunction sortAttributes ( left, right ) {\n\tleft = left.name;\n\tright = right.name;\n\tvar l = left === 'value' ? 1 : ~toFront.indexOf( left );\n\tvar r = right === 'value' ? 1 : ~toFront.indexOf( right );\n\treturn l < r ? -1 : l > r ? 1 : 0;\n}\n\nfunction inputIsCheckedRadio ( element ) {\n\tvar nameAttr = element.attributeByName.name;\n\treturn element.getAttribute( 'type' ) === 'radio' &&\n\t\t( nameAttr || {} ).interpolator &&\n\t\telement.getAttribute( 'value' ) === nameAttr.interpolator.model.get();\n}\n\nfunction stringifyAttribute ( attribute ) {\n\tvar str = attribute.toString();\n\treturn str ? ' ' + str : '';\n}\n\nfunction getNamespace ( element ) {\n\t// Use specified namespace...\n\tvar xmlns$$1 = element.getAttribute( 'xmlns' );\n\tif ( xmlns$$1 ) { return xmlns$$1; }\n\n\t// ...or SVG namespace, if this is an <svg> element\n\tif ( element.name === 'svg' ) { return svg$1; }\n\n\tvar parent = element.parent;\n\n\tif ( parent ) {\n\t\t// ...or HTML, if the parent is a <foreignObject>\n\t\tif ( parent.name === 'foreignobject' ) { return html; }\n\n\t\t// ...or inherit from the parent node\n\t\treturn parent.node.namespaceURI;\n\t}\n\n\treturn element.ractive.el.namespaceURI;\n}\n\nvar Form = (function (Element$$1) {\n\tfunction Form ( options ) {\n\t\tElement$$1.call( this, options );\n\t\tthis.formBindings = [];\n\t}\n\n\tif ( Element$$1 ) Form.__proto__ = Element$$1;\n\tForm.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tForm.prototype.constructor = Form;\n\n\tForm.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.node.addEventListener( 'reset', handleReset, false );\n\t};\n\n\tForm.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tthis.node.removeEventListener( 'reset', handleReset, false );\n\t\tElement$$1.prototype.unrender.call( this, shouldDestroy );\n\t};\n\n\treturn Form;\n}(Element));\n\nfunction handleReset () {\n\tvar element = this._ractive.proxy;\n\n\trunloop.start();\n\telement.formBindings.forEach( updateModel$1 );\n\trunloop.end();\n}\n\nfunction updateModel$1 ( binding ) {\n\tbinding.model.set( binding.resetValue );\n}\n\nvar Mustache = (function (Item$$1) {\n\tfunction Mustache ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.parentFragment = options.parentFragment;\n\t\tthis.template = options.template;\n\t\tthis.index = options.index;\n\t\tif ( options.owner ) { this.parent = options.owner; }\n\n\t\tthis.isStatic = !!options.template.s;\n\n\t\tthis.model = null;\n\t\tthis.dirty = false;\n\t}\n\n\tif ( Item$$1 ) Mustache.__proto__ = Item$$1;\n\tMustache.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tMustache.prototype.constructor = Mustache;\n\n\tMustache.prototype.bind = function bind () {\n\t\t// yield mustaches should resolve in container context\n\t\tvar start = this.containerFragment || this.parentFragment;\n\t\t// try to find a model for this view\n\t\tvar model = resolve$1( start, this.template );\n\n\t\tif ( model ) {\n\t\t\tvar value = model.get();\n\n\t\t\tif ( this.isStatic ) {\n\t\t\t\tthis.model = { get: function () { return value; } };\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmodel.register( this );\n\t\t\tthis.model = model;\n\t\t}\n\t};\n\n\tMustache.prototype.handleChange = function handleChange () {\n\t\tthis.bubble();\n\t};\n\n\tMustache.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tnext = rebindMatch( this.template, next, previous, this.parentFragment );\n\t\tif ( next === this.model ) { return false; }\n\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t}\n\t\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\t\tthis.model = next;\n\t\tif ( !safe ) { this.handleChange(); }\n\t\treturn true;\n\t};\n\n\tMustache.prototype.unbind = function unbind () {\n\t\tif ( !this.isStatic ) {\n\t\t\tthis.model && this.model.unregister( this );\n\t\t\tthis.model = undefined;\n\t\t}\n\t};\n\n\treturn Mustache;\n}(Item));\n\nvar MustacheContainer = (function (ContainerItem$$1) {\n\tfunction MustacheContainer ( options ) {\n\t\tContainerItem$$1.call( this, options );\n\t}\n\n\tif ( ContainerItem$$1 ) MustacheContainer.__proto__ = ContainerItem$$1;\n\tMustacheContainer.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tMustacheContainer.prototype.constructor = MustacheContainer;\n\n\treturn MustacheContainer;\n}(ContainerItem));\nvar proto$1 = MustacheContainer.prototype;\nvar mustache = Mustache.prototype;\nproto$1.bind = mustache.bind;\nproto$1.handleChange = mustache.handleChange;\nproto$1.rebind = mustache.rebind;\nproto$1.unbind = mustache.unbind;\n\nvar Interpolator = (function (Mustache$$1) {\n\tfunction Interpolator () {\n\t\tMustache$$1.apply(this, arguments);\n\t}\n\n\tif ( Mustache$$1 ) Interpolator.__proto__ = Mustache$$1;\n\tInterpolator.prototype = Object.create( Mustache$$1 && Mustache$$1.prototype );\n\tInterpolator.prototype.constructor = Interpolator;\n\n\tInterpolator.prototype.bubble = function bubble () {\n\t\tif ( this.owner ) { this.owner.bubble(); }\n\t\tMustache$$1.prototype.bubble.call(this);\n\t};\n\n\tInterpolator.prototype.detach = function detach () {\n\t\treturn detachNode( this.node );\n\t};\n\n\tInterpolator.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tInterpolator.prototype.getString = function getString () {\n\t\treturn this.model ? safeToStringValue( this.model.get() ) : '';\n\t};\n\n\tInterpolator.prototype.render = function render ( target, occupants ) {\n\t\tif ( inAttributes() ) { return; }\n\t\tvar value = this.getString();\n\n\t\tthis.rendered = true;\n\n\t\tif ( occupants ) {\n\t\t\tvar n = occupants[0];\n\t\t\tif ( n && n.nodeType === 3 ) {\n\t\t\t\toccupants.shift();\n\t\t\t\tif ( n.nodeValue !== value ) {\n\t\t\t\t\tn.nodeValue = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tn = this.node = doc.createTextNode( value );\n\t\t\t\tif ( occupants[0] ) {\n\t\t\t\t\ttarget.insertBefore( n, occupants[0] );\n\t\t\t\t} else {\n\t\t\t\t\ttarget.appendChild( n );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.node = n;\n\t\t} else {\n\t\t\tthis.node = doc.createTextNode( value );\n\t\t\ttarget.appendChild( this.node );\n\t\t}\n\t};\n\n\tInterpolator.prototype.toString = function toString ( escape ) {\n\t\tvar string = this.getString();\n\t\treturn escape ? escapeHtml( string ) : string;\n\t};\n\n\tInterpolator.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( shouldDestroy ) { this.detach(); }\n\t\tthis.rendered = false;\n\t};\n\n\tInterpolator.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.rendered ) {\n\t\t\t\tthis.node.data = this.getString();\n\t\t\t}\n\t\t}\n\t};\n\n\tInterpolator.prototype.valueOf = function valueOf () {\n\t\treturn this.model ? this.model.get() : undefined;\n\t};\n\n\treturn Interpolator;\n}(Mustache));\n\nvar Input = (function (Element$$1) {\n\tfunction Input () {\n\t\tElement$$1.apply(this, arguments);\n\t}\n\n\tif ( Element$$1 ) Input.__proto__ = Element$$1;\n\tInput.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tInput.prototype.constructor = Input;\n\n\tInput.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.node.defaultValue = this.node.value;\n\t};\n\n\treturn Input;\n}(Element));\n\n// simple JSON parser, without the restrictions of JSON parse\n// (i.e. having to double-quote keys).\n//\n// If passed a hash of values as the second argument, ${placeholders}\n// will be replaced with those values\n\nvar specials$1 = {\n\t'true': true,\n\t'false': false,\n\t'null': null,\n\tundefined: undefined\n};\n\nvar specialsPattern = new RegExp( '^(?:' + Object.keys( specials$1 ).join( '|' ) + ')' );\nvar numberPattern$1 = /^(?:[+-]?)(?:(?:(?:0|[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\nvar placeholderPattern = /\\$\\{([^\\}]+)\\}/g;\nvar placeholderAtStartPattern = /^\\$\\{([^\\}]+)\\}/;\nvar onlyWhitespace = /^\\s*$/;\n\nvar JsonParser = Parser.extend({\n\tinit: function init ( str, options ) {\n\t\tthis.values = options.values;\n\t\tthis.allowWhitespace();\n\t},\n\n\tpostProcess: function postProcess ( result ) {\n\t\tif ( result.length !== 1 || !onlyWhitespace.test( this.leftover ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { value: result[0].v };\n\t},\n\n\tconverters: [\n\t\tfunction getPlaceholder ( parser ) {\n\t\t\tif ( !parser.values ) { return null; }\n\n\t\t\tvar placeholder = parser.matchPattern( placeholderAtStartPattern );\n\n\t\t\tif ( placeholder && ( parser.values.hasOwnProperty( placeholder ) ) ) {\n\t\t\t\treturn { v: parser.values[ placeholder ] };\n\t\t\t}\n\t\t},\n\n\t\tfunction getSpecial ( parser ) {\n\t\t\tvar special = parser.matchPattern( specialsPattern );\n\t\t\tif ( special ) { return { v: specials$1[ special ] }; }\n\t\t},\n\n\t\tfunction getNumber ( parser ) {\n\t\t\tvar number = parser.matchPattern( numberPattern$1 );\n\t\t\tif ( number ) { return { v: +number }; }\n\t\t},\n\n\t\tfunction getString ( parser ) {\n\t\t\tvar stringLiteral = readStringLiteral( parser );\n\t\t\tvar values = parser.values;\n\n\t\t\tif ( stringLiteral && values ) {\n\t\t\t\treturn {\n\t\t\t\t\tv: stringLiteral.v.replace( placeholderPattern, function ( match, $1 ) { return ( $1 in values ? values[ $1 ] : $1 ); } )\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn stringLiteral;\n\t\t},\n\n\t\tfunction getObject ( parser ) {\n\t\t\tif ( !parser.matchString( '{' ) ) { return null; }\n\n\t\t\tvar result = {};\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( parser.matchString( '}' ) ) {\n\t\t\t\treturn { v: result };\n\t\t\t}\n\n\t\t\tvar pair;\n\t\t\twhile ( pair = getKeyValuePair( parser ) ) {\n\t\t\t\tresult[ pair.key ] = pair.value;\n\n\t\t\t\tparser.allowWhitespace();\n\n\t\t\t\tif ( parser.matchString( '}' ) ) {\n\t\t\t\t\treturn { v: result };\n\t\t\t\t}\n\n\t\t\t\tif ( !parser.matchString( ',' ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\tfunction getArray ( parser ) {\n\t\t\tif ( !parser.matchString( '[' ) ) { return null; }\n\n\t\t\tvar result = [];\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( parser.matchString( ']' ) ) {\n\t\t\t\treturn { v: result };\n\t\t\t}\n\n\t\t\tvar valueToken;\n\t\t\twhile ( valueToken = parser.read() ) {\n\t\t\t\tresult.push( valueToken.v );\n\n\t\t\t\tparser.allowWhitespace();\n\n\t\t\t\tif ( parser.matchString( ']' ) ) {\n\t\t\t\t\treturn { v: result };\n\t\t\t\t}\n\n\t\t\t\tif ( !parser.matchString( ',' ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tparser.allowWhitespace();\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t]\n});\n\nfunction getKeyValuePair ( parser ) {\n\tparser.allowWhitespace();\n\n\tvar key = readKey( parser );\n\n\tif ( !key ) { return null; }\n\n\tvar pair = { key: key };\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( ':' ) ) {\n\t\treturn null;\n\t}\n\tparser.allowWhitespace();\n\n\tvar valueToken = parser.read();\n\n\tif ( !valueToken ) { return null; }\n\n\tpair.value = valueToken.v;\n\treturn pair;\n}\n\nvar parseJSON = function ( str, values ) {\n\tvar parser = new JsonParser( str, { values: values });\n\treturn parser.result;\n};\n\nvar Mapping = (function (Item$$1) {\n\tfunction Mapping ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.name = options.template.n;\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || options.element || findElement( options.parentFragment );\n\t\tthis.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.parentFragment ) );\n\t\tthis.parentFragment = this.element.parentFragment; // shared\n\t\tthis.ractive = this.parentFragment.ractive;\n\n\t\tthis.fragment = null;\n\n\t\tthis.element.attributeByName[ this.name ] = this;\n\n\t\tthis.value = options.template.f;\n\t}\n\n\tif ( Item$$1 ) Mapping.__proto__ = Item$$1;\n\tMapping.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tMapping.prototype.constructor = Mapping;\n\n\tMapping.prototype.bind = function bind () {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.bind();\n\t\t}\n\n\t\tvar template = this.template.f;\n\t\tvar viewmodel = this.element.instance.viewmodel;\n\n\t\tif ( template === 0 ) {\n\t\t\t// empty attributes are `true`\n\t\t\tviewmodel.joinKey( this.name ).set( true );\n\t\t}\n\n\t\telse if ( typeof template === 'string' ) {\n\t\t\tvar parsed = parseJSON( template );\n\t\t\tviewmodel.joinKey( this.name ).set( parsed ? parsed.value : template );\n\t\t}\n\n\t\telse if ( Array.isArray( template ) ) {\n\t\t\tcreateMapping( this, true );\n\t\t}\n\t};\n\n\tMapping.prototype.render = function render () {};\n\n\tMapping.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t\tif ( this.boundFragment ) { this.boundFragment.unbind(); }\n\n\t\tif ( this.element.bound ) {\n\t\t\tif ( this.link.target === this.model ) { this.link.owner.unlink(); }\n\t\t}\n\t};\n\n\tMapping.prototype.unrender = function unrender () {};\n\n\tMapping.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tif ( this.boundFragment ) { this.boundFragment.update(); }\n\t\t\tif ( this.rendered ) { this.updateDelegate(); }\n\t\t}\n\t};\n\n\treturn Mapping;\n}(Item));\n\nfunction createMapping ( item ) {\n\tvar template = item.template.f;\n\tvar viewmodel = item.element.instance.viewmodel;\n\tvar childData = viewmodel.value;\n\n\tif ( template.length === 1 && template[0].t === INTERPOLATOR ) {\n\t\titem.model = resolve$1( item.parentFragment, template[0] );\n\n\t\tif ( !item.model ) {\n\t\t\twarnOnceIfDebug( (\""The \"" + (item.name) + \""='{{\"" + (template[0].r) + \""}}' mapping is ambiguous, and may cause unexpected results. Consider initialising your data to eliminate the ambiguity\""), { ractive: item.element.instance }); // TODO add docs page explaining item\n\t\t\titem.parentFragment.ractive.get( item.name ); // side-effect: create mappings as necessary\n\t\t\titem.model = item.parentFragment.findContext().joinKey( item.name );\n\t\t}\n\n\t\titem.link = viewmodel.createLink( item.name, item.model, template[0].r );\n\n\t\tif ( item.model.get() === undefined && item.name in childData ) {\n\t\t\titem.model.set( childData[ item.name ] );\n\t\t}\n\t}\n\n\telse {\n\t\titem.boundFragment = new Fragment({\n\t\t\towner: item,\n\t\t\ttemplate: template\n\t\t}).bind();\n\n\t\titem.model = viewmodel.joinKey( item.name );\n\t\titem.model.set( item.boundFragment.valueOf() );\n\n\t\t// item is a *bit* of a hack\n\t\titem.boundFragment.bubble = function () {\n\t\t\tFragment.prototype.bubble.call( item.boundFragment );\n\t\t\t// defer this to avoid mucking around model deps if there happens to be an expression involved\n\t\t\trunloop.scheduleTask(function () {\n\t\t\t\titem.boundFragment.update();\n\t\t\t\titem.model.set( item.boundFragment.valueOf() );\n\t\t\t});\n\t\t};\n\t}\n}\n\nvar Option = (function (Element$$1) {\n\tfunction Option ( options ) {\n\t\tvar template = options.template;\n\t\tif ( !template.a ) { template.a = {}; }\n\n\t\t// If the value attribute is missing, use the element's content,\n\t\t// as long as it isn't disabled\n\t\tif ( template.a.value === undefined && !( 'disabled' in template.a ) ) {\n\t\t\ttemplate.a.value = template.f || '';\n\t\t}\n\n\t\tElement$$1.call( this, options );\n\n\t\tthis.select = findElement( this.parent || this.parentFragment, false, 'select' );\n\t}\n\n\tif ( Element$$1 ) Option.__proto__ = Element$$1;\n\tOption.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tOption.prototype.constructor = Option;\n\n\tOption.prototype.bind = function bind () {\n\t\tif ( !this.select ) {\n\t\t\tElement$$1.prototype.bind.call(this);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the select has a value, it overrides the `selected` attribute on\n\t\t// this option - so we delete the attribute\n\t\tvar selectedAttribute = this.attributeByName.selected;\n\t\tif ( selectedAttribute && this.select.getAttribute( 'value' ) !== undefined ) {\n\t\t\tvar index = this.attributes.indexOf( selectedAttribute );\n\t\t\tthis.attributes.splice( index, 1 );\n\t\t\tdelete this.attributeByName.selected;\n\t\t}\n\n\t\tElement$$1.prototype.bind.call(this);\n\t\tthis.select.options.push( this );\n\t};\n\n\tOption.prototype.bubble = function bubble () {\n\t\t// if we're using content as value, may need to update here\n\t\tvar value = this.getAttribute( 'value' );\n\t\tif ( this.node && this.node.value !== value ) {\n\t\t\tthis.node._ractive.value = value;\n\t\t}\n\t\tElement$$1.prototype.bubble.call(this);\n\t};\n\n\tOption.prototype.getAttribute = function getAttribute ( name ) {\n\t\tvar attribute = this.attributeByName[ name ];\n\t\treturn attribute ? attribute.getValue() : name === 'value' && this.fragment ? this.fragment.valueOf() : undefined;\n\t};\n\n\tOption.prototype.isSelected = function isSelected () {\n\t\tvar optionValue = this.getAttribute( 'value' );\n\n\t\tif ( optionValue === undefined || !this.select ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar selectValue = this.select.getAttribute( 'value' );\n\n\t\tif ( selectValue == optionValue ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( this.select.getAttribute( 'multiple' ) && Array.isArray( selectValue ) ) {\n\t\t\tvar i = selectValue.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( selectValue[i] == optionValue ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tOption.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\n\t\tif ( !this.attributeByName.value ) {\n\t\t\tthis.node._ractive.value = this.getAttribute( 'value' );\n\t\t}\n\t};\n\n\tOption.prototype.unbind = function unbind () {\n\t\tElement$$1.prototype.unbind.call(this);\n\n\t\tif ( this.select ) {\n\t\t\tremoveFromArray( this.select.options, this );\n\t\t}\n\t};\n\n\treturn Option;\n}(Element));\n\nfunction getPartialTemplate ( ractive, name, parentFragment ) {\n\t// If the partial in instance or view heirarchy instances, great\n\tvar partial = getPartialFromRegistry( ractive, name, parentFragment || {} );\n\tif ( partial ) { return partial; }\n\n\t// Does it exist on the page as a script tag?\n\tpartial = parser.fromId( name, { noThrow: true } );\n\tif ( partial ) {\n\t\t// parse and register to this ractive instance\n\t\tvar parsed = parser.parseFor( partial, ractive );\n\n\t\t// register extra partials on the ractive instance if they don't already exist\n\t\tif ( parsed.p ) { fillGaps( ractive.partials, parsed.p ); }\n\n\t\t// register (and return main partial if there are others in the template)\n\t\treturn ractive.partials[ name ] = parsed.t;\n\t}\n}\n\nfunction getPartialFromRegistry ( ractive, name, parentFragment ) {\n\t// if there was an instance up-hierarchy, cool\n\tvar partial = findParentPartial( name, parentFragment.owner );\n\tif ( partial ) { return partial; }\n\n\t// find first instance in the ractive or view hierarchy that has this partial\n\tvar instance = findInstance( 'partials', ractive, name );\n\n\tif ( !instance ) { return; }\n\n\tpartial = instance.partials[ name ];\n\n\t// partial is a function?\n\tvar fn;\n\tif ( typeof partial === 'function' ) {\n\t\tfn = partial.bind( instance );\n\t\tfn.isOwner = instance.partials.hasOwnProperty(name);\n\t\tpartial = fn.call( ractive, parser );\n\t}\n\n\tif ( !partial && partial !== '' ) {\n\t\twarnIfDebug( noRegistryFunctionReturn, name, 'partial', 'partial', { ractive: ractive });\n\t\treturn;\n\t}\n\n\t// If this was added manually to the registry,\n\t// but hasn't been parsed, parse it now\n\tif ( !parser.isParsed( partial ) ) {\n\t\t// use the parseOptions of the ractive instance on which it was found\n\t\tvar parsed = parser.parseFor( partial, instance );\n\n\t\t// Partials cannot contain nested partials!\n\t\t// TODO add a test for this\n\t\tif ( parsed.p ) {\n\t\t\twarnIfDebug( 'Partials ({{>%s}}) cannot contain nested inline partials', name, { ractive: ractive });\n\t\t}\n\n\t\t// if fn, use instance to store result, otherwise needs to go\n\t\t// in the correct point in prototype chain on instance or constructor\n\t\tvar target = fn ? instance : findOwner( instance, name );\n\n\t\t// may be a template with partials, which need to be registered and main template extracted\n\t\ttarget.partials[ name ] = partial = parsed.t;\n\t}\n\n\t// store for reset\n\tif ( fn ) { partial._fn = fn; }\n\n\treturn partial.v ? partial.t : partial;\n}\n\nfunction findOwner ( ractive, key ) {\n\treturn ractive.partials.hasOwnProperty( key )\n\t\t? ractive\n\t\t: findConstructor( ractive.constructor, key);\n}\n\nfunction findConstructor ( constructor, key ) {\n\tif ( !constructor ) { return; }\n\treturn constructor.partials.hasOwnProperty( key )\n\t\t? constructor\n\t\t: findConstructor( constructor._Parent, key );\n}\n\nfunction findParentPartial( name, parent ) {\n\tif ( parent ) {\n\t\tif ( parent.template && parent.template.p && parent.template.p[name] ) {\n\t\t\treturn parent.template.p[name];\n\t\t} else if ( parent.parentFragment && parent.parentFragment.owner ) {\n\t\t\treturn findParentPartial( name, parent.parentFragment.owner );\n\t\t}\n\t}\n}\n\nvar Partial = (function (MustacheContainer$$1) {\n\tfunction Partial ( options ) {\n\t\tMustacheContainer$$1.call( this, options );\n\n\t\tthis.yielder = options.template.t === YIELDER;\n\n\t\tif ( this.yielder ) {\n\t\t\tthis.container = options.parentFragment.ractive;\n\t\t\tthis.component = this.container.component;\n\n\t\t\tthis.containerFragment = options.parentFragment;\n\t\t\tthis.parentFragment = this.component.parentFragment;\n\n\t\t\t// {{yield}} is equivalent to {{yield content}}\n\t\t\tif ( !options.template.r && !options.template.rx && !options.template.x ) { options.template.r = 'content'; }\n\t\t}\n\t}\n\n\tif ( MustacheContainer$$1 ) Partial.__proto__ = MustacheContainer$$1;\n\tPartial.prototype = Object.create( MustacheContainer$$1 && MustacheContainer$$1.prototype );\n\tPartial.prototype.constructor = Partial;\n\n\tPartial.prototype.bind = function bind () {\n\t\tvar this$1 = this;\n\n\t\t// keep track of the reference name for future resets\n\t\tthis.refName = this.template.r;\n\n\t\t// name matches take priority over expressions\n\t\tvar template = this.refName ? getPartialTemplate( this.ractive, this.refName, this.parentFragment ) || null : null;\n\t\tvar templateObj;\n\n\t\tif ( template ) {\n\t\t\tthis.named = true;\n\t\t\tthis.setTemplate( this.template.r, template );\n\t\t}\n\n\t\tif ( !template ) {\n\t\t\tMustacheContainer$$1.prototype.bind.call(this);\n\t\t\tif ( this.model && ( templateObj = this.model.get() ) && typeof templateObj === 'object' && ( typeof templateObj.template === 'string' || Array.isArray( templateObj.t ) ) ) {\n\t\t\t\tif ( templateObj.template ) {\n\t\t\t\t\tthis.source = templateObj.template;\n\t\t\t\t\ttemplateObj = parsePartial( this.template.r, templateObj.template, this.ractive );\n\t\t\t\t} else {\n\t\t\t\t\tthis.source = templateObj.t;\n\t\t\t\t}\n\t\t\t\tthis.setTemplate( this.template.r, templateObj.t );\n\t\t\t} else if ( ( !this.model || typeof this.model.get() !== 'string' ) && this.refName ) {\n\t\t\t\tthis.setTemplate( this.refName, template );\n\t\t\t} else {\n\t\t\t\tthis.setTemplate( this.model.get() );\n\t\t\t}\n\t\t}\n\n\t\tvar options = {\n\t\t\towner: this,\n\t\t\ttemplate: this.partialTemplate\n\t\t};\n\n\t\tif ( this.template.c ) {\n\t\t\toptions.template = [{ t: SECTION, n: SECTION_WITH, f: options.template }];\n\t\t\tfor ( var k in this.template.c ) {\n\t\t\t\toptions.template[0][k] = this$1.template.c[k];\n\t\t\t}\n\t\t}\n\n\t\tif ( this.yielder ) {\n\t\t\toptions.ractive = this.container.parent;\n\t\t}\n\n\t\tthis.fragment = new Fragment(options);\n\t\tif ( this.template.z ) {\n\t\t\tthis.fragment.aliases = resolveAliases( this.template.z, this.yielder ? this.containerFragment : this.parentFragment );\n\t\t}\n\t\tthis.fragment.bind();\n\t};\n\n\tPartial.prototype.bubble = function bubble () {\n\t\tif ( this.yielder && !this.dirty ) {\n\t\t\tthis.containerFragment.bubble();\n\t\t\tthis.dirty = true;\n\t\t} else {\n\t\t\tMustacheContainer$$1.prototype.bubble.call(this);\n\t\t}\n\t};\n\n\tPartial.prototype.findNextNode = function findNextNode () {\n\t\treturn this.yielder ? this.containerFragment.findNextNode( this ) : MustacheContainer$$1.prototype.findNextNode.call(this);\n\t};\n\n\tPartial.prototype.forceResetTemplate = function forceResetTemplate () {\n\t\tvar this$1 = this;\n\n\t\tthis.partialTemplate = undefined;\n\n\t\t// on reset, check for the reference name first\n\t\tif ( this.refName ) {\n\t\t\tthis.partialTemplate = getPartialTemplate( this.ractive, this.refName, this.parentFragment );\n\t\t}\n\n\t\t// then look for the resolved name\n\t\tif ( !this.partialTemplate ) {\n\t\t\tthis.partialTemplate = getPartialTemplate( this.ractive, this.name, this.parentFragment );\n\t\t}\n\n\t\tif ( !this.partialTemplate ) {\n\t\t\twarnOnceIfDebug( (\""Could not find template for partial '\"" + (this.name) + \""'\"") );\n\t\t\tthis.partialTemplate = [];\n\t\t}\n\n\t\tif ( this.inAttribute ) {\n\t\t\tdoInAttributes( function () { return this$1.fragment.resetTemplate( this$1.partialTemplate ); } );\n\t\t} else {\n\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t}\n\n\t\tthis.bubble();\n\t};\n\n\tPartial.prototype.render = function render ( target, occupants ) {\n\t\treturn this.fragment.render( target, occupants );\n\t};\n\n\tPartial.prototype.setTemplate = function setTemplate ( name, template ) {\n\t\tthis.name = name;\n\n\t\tif ( !template && template !== null ) { template = getPartialTemplate( this.ractive, name, this.parentFragment ); }\n\n\t\tif ( !template ) {\n\t\t\twarnOnceIfDebug( (\""Could not find template for partial '\"" + name + \""'\"") );\n\t\t}\n\n\t\tthis.partialTemplate = template || [];\n\t};\n\n\tPartial.prototype.unbind = function unbind () {\n\t\tMustacheContainer$$1.prototype.unbind.call(this);\n\t\tthis.fragment.aliases = {};\n\t\tthis.fragment.unbind();\n\t};\n\n\tPartial.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tthis.fragment.unrender( shouldDestroy );\n\t};\n\n\tPartial.prototype.update = function update () {\n\t\tvar template;\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tif ( !this.named ) {\n\t\t\t\tif ( this.model ) {\n\t\t\t\t\ttemplate = this.model.get();\n\t\t\t\t}\n\n\t\t\t\tif ( template && typeof template === 'string' && template !== this.name ) {\n\t\t\t\t\tthis.setTemplate( template );\n\t\t\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t\t\t} else if ( template && typeof template === 'object' && ( typeof template.template === 'string' || Array.isArray( template.t ) ) ) {\n\t\t\t\t\tif ( template.t !== this.source && template.template !== this.source ) {\n\t\t\t\t\t\tif ( template.template ) {\n\t\t\t\t\t\t\tthis.source = template.template;\n\t\t\t\t\t\t\ttemplate = parsePartial( this.name, template.template, this.ractive );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.source = template.t;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.setTemplate( this.name, template.t );\n\t\t\t\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.fragment.update();\n\t\t}\n\t};\n\n\treturn Partial;\n}(MustacheContainer));\n\nfunction parsePartial( name, partial, ractive ) {\n\tvar parsed;\n\n\ttry {\n\t\tparsed = parser.parse( partial, parser.getParseOptions( ractive ) );\n\t} catch (e) {\n\t\twarnIfDebug( (\""Could not parse partial from expression '\"" + name + \""'\\n\"" + (e.message)) );\n\t}\n\n\treturn parsed || { t: [] };\n}\n\nvar RepeatedFragment = function RepeatedFragment ( options ) {\n\tthis.parent = options.owner.parentFragment;\n\n\t// bit of a hack, so reference resolution works without another\n\t// layer of indirection\n\tthis.parentFragment = this;\n\tthis.owner = options.owner;\n\tthis.ractive = this.parent.ractive;\n\tthis.delegate = this.parent.delegate || findElement( options.owner );\n\t// delegation disabled by directive\n\tif ( this.delegate && this.delegate.delegate === false ) { this.delegate = false; }\n\n\t// encapsulated styles should be inherited until they get applied by an element\n\tthis.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );\n\n\tthis.context = null;\n\tthis.rendered = false;\n\tthis.iterations = [];\n\n\tthis.template = options.template;\n\n\tthis.indexRef = options.indexRef;\n\tthis.keyRef = options.keyRef;\n\n\tthis.pendingNewIndices = null;\n\tthis.previousIterations = null;\n\n\t// track array versus object so updates of type rest\n\tthis.isArray = false;\n};\n\nRepeatedFragment.prototype.bind = function bind ( context ) {\n\t\tvar this$1 = this;\n\n\tthis.context = context;\n\tvar value = context.get();\n\n\t// {{#each array}}...\n\tif ( this.isArray = Array.isArray( value ) ) {\n\t\t// we can't use map, because of sparse arrays\n\t\tthis.iterations = [];\n\t\tvar max = value.length;\n\t\tfor ( var i = 0; i < max; i += 1 ) {\n\t\t\tthis$1.iterations[i] = this$1.createIteration( i, i );\n\t\t}\n\t}\n\n\t// {{#each object}}...\n\telse if ( isObject( value ) ) {\n\t\tthis.isArray = false;\n\n\t\t// TODO this is a dreadful hack. There must be a neater way\n\t\tif ( this.indexRef ) {\n\t\t\tvar refs = this.indexRef.split( ',' );\n\t\t\tthis.keyRef = refs[0];\n\t\t\tthis.indexRef = refs[1];\n\t\t}\n\n\t\tthis.iterations = Object.keys( value ).map( function ( key, index ) {\n\t\t\treturn this$1.createIteration( key, index );\n\t\t});\n\t}\n\n\treturn this;\n};\n\nRepeatedFragment.prototype.bubble = function bubble ( index ) {\n\tif  ( !this.bubbled ) { this.bubbled = []; }\n\tthis.bubbled.push( index );\n\n\tthis.owner.bubble();\n};\n\nRepeatedFragment.prototype.createIteration = function createIteration ( key, index ) {\n\tvar fragment = new Fragment({\n\t\towner: this,\n\t\ttemplate: this.template\n\t});\n\n\tfragment.key = key;\n\tfragment.index = index;\n\tfragment.isIteration = true;\n\tfragment.delegate = this.delegate;\n\n\tvar model = this.context.joinKey( key );\n\n\t// set up an iteration alias if there is one\n\tif ( this.owner.template.z ) {\n\t\tfragment.aliases = {};\n\t\tfragment.aliases[ this.owner.template.z[0].n ] = model;\n\t}\n\n\treturn fragment.bind( model );\n};\n\nRepeatedFragment.prototype.destroyed = function destroyed$1 () {\n\tthis.iterations.forEach( destroyed$1$1 );\n};\n\nRepeatedFragment.prototype.detach = function detach () {\n\tvar docFrag = createDocumentFragment();\n\tthis.iterations.forEach( function (fragment) { return docFrag.appendChild( fragment.detach() ); } );\n\treturn docFrag;\n};\n\nRepeatedFragment.prototype.find = function find ( selector, options ) {\n\treturn findMap( this.iterations, function (i) { return i.find( selector, options ); } );\n};\n\nRepeatedFragment.prototype.findAll = function findAll ( selector, query ) {\n\treturn this.iterations.forEach( function (i) { return i.findAll( selector, query ); } );\n};\n\nRepeatedFragment.prototype.findComponent = function findComponent ( name, options ) {\n\treturn findMap( this.iterations, function (i) { return i.findComponent( name, options ); } );\n};\n\nRepeatedFragment.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\treturn this.iterations.forEach( function (i) { return i.findAllComponents( name, query ); } );\n};\n\nRepeatedFragment.prototype.findNextNode = function findNextNode ( iteration ) {\n\t\tvar this$1 = this;\n\n\tif ( iteration.index < this.iterations.length - 1 ) {\n\t\tfor ( var i = iteration.index + 1; i < this.iterations.length; i++ ) {\n\t\t\tvar node = this$1.iterations[ i ].firstNode( true );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n\n\treturn this.owner.findNextNode();\n};\n\nRepeatedFragment.prototype.firstNode = function firstNode ( skipParent ) {\n\treturn this.iterations[0] ? this.iterations[0].firstNode( skipParent ) : null;\n};\n\nRepeatedFragment.prototype.rebinding = function rebinding ( next ) {\n\t\tvar this$1 = this;\n\n\tthis.context = next;\n\tthis.iterations.forEach( function (fragment) {\n\t\tvar model = next ? next.joinKey( fragment.key ) : undefined;\n\t\tfragment.context = model;\n\t\tif ( this$1.owner.template.z ) {\n\t\t\tfragment.aliases = {};\n\t\t\tfragment.aliases[ this$1.owner.template.z[0].n ] = model;\n\t\t}\n\t});\n};\n\nRepeatedFragment.prototype.render = function render ( target, occupants ) {\n\t// TODO use docFrag.cloneNode...\n\n\tif ( this.iterations ) {\n\t\tthis.iterations.forEach( function (fragment) { return fragment.render( target, occupants ); } );\n\t}\n\n\tthis.rendered = true;\n};\n\nRepeatedFragment.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tif ( !this.pendingNewIndices ) { this.previousIterations = this.iterations.slice(); }\n\n\tif ( !this.pendingNewIndices ) { this.pendingNewIndices = []; }\n\n\tthis.pendingNewIndices.push( newIndices );\n\n\tvar iterations = [];\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\tif ( newIndex === -1 ) { return; }\n\n\t\tvar fragment = this$1.iterations[ oldIndex ];\n\t\titerations[ newIndex ] = fragment;\n\n\t\tif ( newIndex !== oldIndex && fragment ) { fragment.dirty = true; }\n\t});\n\n\tthis.iterations = iterations;\n\n\tthis.bubble();\n};\n\nRepeatedFragment.prototype.shuffled = function shuffled$1 () {\n\tthis.iterations.forEach( shuffled$1$1 );\n};\n\nRepeatedFragment.prototype.toString = function toString$1 ( escape ) {\n\treturn this.iterations ?\n\t\tthis.iterations.map( escape ? toEscapedString : toString$2 ).join( '' ) :\n\t\t'';\n};\n\nRepeatedFragment.prototype.unbind = function unbind$1 () {\n\tthis.iterations.forEach( unbind$1$1 );\n\treturn this;\n};\n\nRepeatedFragment.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\tthis.iterations.forEach( shouldDestroy ? unrenderAndDestroy : unrender$1$1 );\n\tif ( this.pendingNewIndices && this.previousIterations ) {\n\t\tthis.previousIterations.forEach( function (fragment) {\n\t\t\tif ( fragment.rendered ) { shouldDestroy ? unrenderAndDestroy( fragment ) : unrender$1$1( fragment ); }\n\t\t});\n\t}\n\tthis.rendered = false;\n};\n\n// TODO smart update\nRepeatedFragment.prototype.update = function update$1 () {\n\t\tvar this$1 = this;\n\n\t// skip dirty check, since this is basically just a facade\n\n\tif ( this.pendingNewIndices ) {\n\t\tthis.bubbled.length = 0;\n\t\tthis.updatePostShuffle();\n\t\treturn;\n\t}\n\n\tif ( this.updating ) { return; }\n\tthis.updating = true;\n\n\tvar value = this.context.get();\n\tvar wasArray = this.isArray;\n\n\tvar toRemove;\n\tvar oldKeys;\n\tvar reset = true;\n\tvar i;\n\n\tif ( this.isArray = Array.isArray( value ) ) {\n\t\tif ( wasArray ) {\n\t\t\treset = false;\n\t\t\tif ( this.iterations.length > value.length ) {\n\t\t\t\ttoRemove = this.iterations.splice( value.length );\n\t\t\t}\n\t\t}\n\t} else if ( isObject( value ) && !wasArray ) {\n\t\treset = false;\n\t\ttoRemove = [];\n\t\toldKeys = {};\n\t\ti = this.iterations.length;\n\n\t\twhile ( i-- ) {\n\t\t\tvar fragment$1 = this$1.iterations[i];\n\t\t\tif ( fragment$1.key in value ) {\n\t\t\t\toldKeys[ fragment$1.key ] = true;\n\t\t\t} else {\n\t\t\t\tthis$1.iterations.splice( i, 1 );\n\t\t\t\ttoRemove.push( fragment$1 );\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( reset ) {\n\t\ttoRemove = this.iterations;\n\t\tthis.iterations = [];\n\t}\n\n\tif ( toRemove ) {\n\t\ttoRemove.forEach( function (fragment) {\n\t\t\tfragment.unbind();\n\t\t\tfragment.unrender( true );\n\t\t});\n\t}\n\n\t// update the remaining ones\n\tif ( !reset && this.isArray && this.bubbled && this.bubbled.length ) {\n\t\tthis.bubbled.forEach( function (i) { return this$1.iterations[i] && this$1.iterations[i].update(); } );\n\t} else {\n\t\tthis.iterations.forEach( update$1$1 );\n\t}\n\n\tif ( this.bubbled ) { this.bubbled.length = 0; }\n\n\t// add new iterations\n\tvar newLength = Array.isArray( value ) ?\n\t\tvalue.length :\n\t\tisObject( value ) ?\n\t\t\tObject.keys( value ).length :\n\t\t\t0;\n\n\tvar docFrag;\n\tvar fragment;\n\n\tif ( newLength > this.iterations.length ) {\n\t\tdocFrag = this.rendered ? createDocumentFragment() : null;\n\t\ti = this.iterations.length;\n\n\t\tif ( Array.isArray( value ) ) {\n\t\t\twhile ( i < value.length ) {\n\t\t\t\tfragment = this$1.createIteration( i, i );\n\n\t\t\t\tthis$1.iterations.push( fragment );\n\t\t\t\tif ( this$1.rendered ) { fragment.render( docFrag ); }\n\n\t\t\t\ti += 1;\n\t\t\t}\n\t\t}\n\n\t\telse if ( isObject( value ) ) {\n\t\t\t// TODO this is a dreadful hack. There must be a neater way\n\t\t\tif ( this.indexRef && !this.keyRef ) {\n\t\t\t\tvar refs = this.indexRef.split( ',' );\n\t\t\t\tthis.keyRef = refs[0];\n\t\t\t\tthis.indexRef = refs[1];\n\t\t\t}\n\n\t\t\tObject.keys( value ).forEach( function (key) {\n\t\t\t\tif ( !oldKeys || !( key in oldKeys ) ) {\n\t\t\t\t\tfragment = this$1.createIteration( key, i );\n\n\t\t\t\t\tthis$1.iterations.push( fragment );\n\t\t\t\t\tif ( this$1.rendered ) { fragment.render( docFrag ); }\n\n\t\t\t\t\ti += 1;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif ( this.rendered ) {\n\t\t\tvar parentNode = this.parent.findParentNode();\n\t\t\tvar anchor = this.parent.findNextNode( this.owner );\n\n\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t}\n\t}\n\n\tthis.updating = false;\n};\n\nRepeatedFragment.prototype.updatePostShuffle = function updatePostShuffle () {\n\t\tvar this$1 = this;\n\n\tvar newIndices = this.pendingNewIndices[ 0 ];\n\n\t// map first shuffle through\n\tthis.pendingNewIndices.slice( 1 ).forEach( function (indices) {\n\t\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\t\tnewIndices[ oldIndex ] = indices[ newIndex ];\n\t\t});\n\t});\n\n\t// This algorithm (for detaching incorrectly-ordered fragments from the DOM and\n\t// storing them in a document fragment for later reinsertion) seems a bit hokey,\n\t// but it seems to work for now\n\tvar len = this.context.get().length;\n\tvar oldLen = this.previousIterations.length;\n\tvar removed = {};\n\tvar i;\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\tvar fragment = this$1.previousIterations[ oldIndex ];\n\t\tthis$1.previousIterations[ oldIndex ] = null;\n\n\t\tif ( newIndex === -1 ) {\n\t\t\tremoved[ oldIndex ] = fragment;\n\t\t} else if ( fragment.index !== newIndex ) {\n\t\t\tvar model = this$1.context.joinKey( newIndex );\n\t\t\tfragment.index = newIndex;\n\t\t\tfragment.context = model;\n\t\t\tif ( this$1.owner.template.z ) {\n\t\t\t\tfragment.aliases = {};\n\t\t\t\tfragment.aliases[ this$1.owner.template.z[0].n ] = model;\n\t\t\t}\n\t\t}\n\t});\n\n\t// if the array was spliced outside of ractive, sometimes there are leftover fragments not in the newIndices\n\tthis.previousIterations.forEach( function ( frag, i ) {\n\t\tif ( frag ) { removed[ i ] = frag; }\n\t});\n\n\t// create new/move existing iterations\n\tvar docFrag = this.rendered ? createDocumentFragment() : null;\n\tvar parentNode = this.rendered ? this.parent.findParentNode() : null;\n\n\tvar contiguous = 'startIndex' in newIndices;\n\ti = contiguous ? newIndices.startIndex : 0;\n\n\tfor ( i; i < len; i++ ) {\n\t\tvar frag = this$1.iterations[i];\n\n\t\tif ( frag && contiguous ) {\n\t\t\t// attach any built-up iterations\n\t\t\tif ( this$1.rendered ) {\n\t\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\t\t\t\tif ( docFrag.childNodes.length  ) { parentNode.insertBefore( docFrag, frag.firstNode() ); }\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( !frag ) { this$1.iterations[i] = this$1.createIteration( i, i ); }\n\n\t\tif ( this$1.rendered ) {\n\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\n\t\t\tif ( frag ) { docFrag.appendChild( frag.detach() ); }\n\t\t\telse {\n\t\t\t\tthis$1.iterations[i].render( docFrag );\n\t\t\t}\n\t\t}\n\t}\n\n\t// append any leftovers\n\tif ( this.rendered ) {\n\t\tfor ( i = len; i < oldLen; i++ ) {\n\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\t\t}\n\n\t\tif ( docFrag.childNodes.length ) {\n\t\t\tparentNode.insertBefore( docFrag, this.owner.findNextNode() );\n\t\t}\n\t}\n\n\t// trigger removal on old nodes\n\tObject.keys( removed ).forEach( function (k) { return removed[k].unbind().unrender( true ); } );\n\n\tthis.iterations.forEach( update$1$1 );\n\n\tthis.pendingNewIndices = null;\n\n\tthis.shuffled();\n};\n\nfunction isEmpty ( value ) {\n\treturn !value ||\n\t       ( Array.isArray( value ) && value.length === 0 ) ||\n\t\t   ( isObject( value ) && Object.keys( value ).length === 0 );\n}\n\nfunction getType ( value, hasIndexRef ) {\n\tif ( hasIndexRef || Array.isArray( value ) ) { return SECTION_EACH; }\n\tif ( isObject( value ) || typeof value === 'function' ) { return SECTION_IF_WITH; }\n\tif ( value === undefined ) { return null; }\n\treturn SECTION_IF;\n}\n\nvar Section = (function (MustacheContainer$$1) {\n\tfunction Section ( options ) {\n\t\tMustacheContainer$$1.call( this, options );\n\n\t\tthis.sectionType = options.template.n || null;\n\t\tthis.templateSectionType = this.sectionType;\n\t\tthis.subordinate = options.template.l === 1;\n\t\tthis.fragment = null;\n\t}\n\n\tif ( MustacheContainer$$1 ) Section.__proto__ = MustacheContainer$$1;\n\tSection.prototype = Object.create( MustacheContainer$$1 && MustacheContainer$$1.prototype );\n\tSection.prototype.constructor = Section;\n\n\tSection.prototype.bind = function bind () {\n\t\tMustacheContainer$$1.prototype.bind.call(this);\n\n\t\tif ( this.subordinate ) {\n\t\t\tthis.sibling = this.parentFragment.items[ this.parentFragment.items.indexOf( this ) - 1 ];\n\t\t\tthis.sibling.nextSibling = this;\n\t\t}\n\n\t\t// if we managed to bind, we need to create children\n\t\tif ( this.model ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.update();\n\t\t} else if ( this.sectionType && this.sectionType === SECTION_UNLESS && ( !this.sibling || !this.sibling.isTruthy() ) ) {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\towner: this,\n\t\t\t\ttemplate: this.template.f\n\t\t\t}).bind();\n\t\t}\n\t};\n\n\tSection.prototype.isTruthy = function isTruthy () {\n\t\tif ( this.subordinate && this.sibling.isTruthy() ) { return true; }\n\t\tvar value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n\t\treturn !!value && ( this.templateSectionType === SECTION_IF_WITH || !isEmpty( value ) );\n\t};\n\n\tSection.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tif ( MustacheContainer$$1.prototype.rebind.call( this, next, previous, safe ) ) {\n\t\t\tif ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {\n\t\t\t\tthis.fragment.rebinding( next );\n\t\t\t}\n\t\t}\n\t};\n\n\tSection.prototype.render = function render ( target, occupants ) {\n\t\tthis.rendered = true;\n\t\tif ( this.fragment ) { this.fragment.render( target, occupants ); }\n\t};\n\n\tSection.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tif ( this.fragment && this.sectionType === SECTION_EACH ) {\n\t\t\tthis.fragment.shuffle( newIndices );\n\t\t}\n\t};\n\n\tSection.prototype.unbind = function unbind () {\n\t\tMustacheContainer$$1.prototype.unbind.call(this);\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tSection.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }\n\t\tthis.rendered = false;\n\t};\n\n\tSection.prototype.update = function update () {\n\t\tif ( !this.dirty ) { return; }\n\n\t\tif ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {\n\t\t\tthis.fragment.context = this.model;\n\t\t}\n\n\t\tif ( !this.model && this.sectionType !== SECTION_UNLESS ) { return; }\n\n\t\tthis.dirty = false;\n\n\t\tvar value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n\t\tvar siblingFalsey = !this.subordinate || !this.sibling.isTruthy();\n\t\tvar lastType = this.sectionType;\n\n\t\t// watch for switching section types\n\t\tif ( this.sectionType === null || this.templateSectionType === null ) { this.sectionType = getType( value, this.template.i ); }\n\t\tif ( lastType && lastType !== this.sectionType && this.fragment ) {\n\t\t\tif ( this.rendered ) {\n\t\t\t\tthis.fragment.unbind().unrender( true );\n\t\t\t}\n\n\t\t\tthis.fragment = null;\n\t\t}\n\n\t\tvar newFragment;\n\n\t\tvar fragmentShouldExist = this.sectionType === SECTION_EACH || // each always gets a fragment, which may have no iterations\n\t\t                            this.sectionType === SECTION_WITH || // with (partial context) always gets a fragment\n\t\t                            ( siblingFalsey && ( this.sectionType === SECTION_UNLESS ? !this.isTruthy() : this.isTruthy() ) ); // if, unless, and if-with depend on siblings and the condition\n\n\t\tif ( fragmentShouldExist ) {\n\t\t\tif ( this.fragment ) {\n\t\t\t\tthis.fragment.update();\n\t\t\t} else {\n\t\t\t\tif ( this.sectionType === SECTION_EACH ) {\n\t\t\t\t\tnewFragment = new RepeatedFragment({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\ttemplate: this.template.f,\n\t\t\t\t\t\tindexRef: this.template.i\n\t\t\t\t\t}).bind( this.model );\n\t\t\t\t} else {\n\t\t\t\t\t// only with and if-with provide context - if and unless do not\n\t\t\t\t\tvar context = this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ? this.model : null;\n\t\t\t\t\tnewFragment = new Fragment({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\ttemplate: this.template.f\n\t\t\t\t\t}).bind( context );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.fragment && this.rendered ) {\n\t\t\t\tthis.fragment.unbind().unrender( true );\n\t\t\t}\n\n\t\t\tthis.fragment = null;\n\t\t}\n\n\t\tif ( newFragment ) {\n\t\t\tif ( this.rendered ) {\n\t\t\t\tvar parentNode = this.parentFragment.findParentNode();\n\t\t\t\tvar anchor = this.parentFragment.findNextNode( this );\n\n\t\t\t\tif ( anchor ) {\n\t\t\t\t\tvar docFrag = createDocumentFragment();\n\t\t\t\t\tnewFragment.render( docFrag );\n\n\t\t\t\t\t// we use anchor.parentNode, not parentNode, because the sibling\n\t\t\t\t\t// may be temporarily detached as a result of a shuffle\n\t\t\t\t\tanchor.parentNode.insertBefore( docFrag, anchor );\n\t\t\t\t} else {\n\t\t\t\t\tnewFragment.render( parentNode );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.fragment = newFragment;\n\t\t}\n\n\t\tif ( this.nextSibling ) {\n\t\t\tthis.nextSibling.dirty = true;\n\t\t\tthis.nextSibling.update();\n\t\t}\n\t};\n\n\treturn Section;\n}(MustacheContainer));\n\nfunction valueContains ( selectValue, optionValue ) {\n\tvar i = selectValue.length;\n\twhile ( i-- ) {\n\t\tif ( selectValue[i] == optionValue ) { return true; }\n\t}\n}\n\nvar Select = (function (Element$$1) {\n\tfunction Select ( options ) {\n\t\tElement$$1.call( this, options );\n\t\tthis.options = [];\n\t}\n\n\tif ( Element$$1 ) Select.__proto__ = Element$$1;\n\tSelect.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tSelect.prototype.constructor = Select;\n\n\tSelect.prototype.foundNode = function foundNode ( node ) {\n\t\tif ( this.binding ) {\n\t\t\tvar selectedOptions = getSelectedOptions( node );\n\n\t\t\tif ( selectedOptions.length > 0 ) {\n\t\t\t\tthis.selectedOptions = selectedOptions;\n\t\t\t}\n\t\t}\n\t};\n\n\tSelect.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.sync();\n\n\t\tvar node = this.node;\n\n\t\tvar i = node.options.length;\n\t\twhile ( i-- ) {\n\t\t\tnode.options[i].defaultSelected = node.options[i].selected;\n\t\t}\n\n\t\tthis.rendered = true;\n\t};\n\n\tSelect.prototype.sync = function sync () {\n\t\tvar this$1 = this;\n\n\t\tvar selectNode = this.node;\n\n\t\tif ( !selectNode ) { return; }\n\n\t\tvar options = toArray( selectNode.options );\n\n\t\tif ( this.selectedOptions ) {\n\t\t\toptions.forEach( function (o) {\n\t\t\t\tif ( this$1.selectedOptions.indexOf( o ) >= 0 ) { o.selected = true; }\n\t\t\t\telse { o.selected = false; }\n\t\t\t});\n\t\t\tthis.binding.setFromNode( selectNode );\n\t\t\tdelete this.selectedOptions;\n\t\t\treturn;\n\t\t}\n\n\t\tvar selectValue = this.getAttribute( 'value' );\n\t\tvar isMultiple = this.getAttribute( 'multiple' );\n\t\tvar array = isMultiple && Array.isArray( selectValue );\n\n\t\t// If the <select> has a specified value, that should override\n\t\t// these options\n\t\tif ( selectValue !== undefined ) {\n\t\t\tvar optionWasSelected;\n\n\t\t\toptions.forEach( function (o) {\n\t\t\t\tvar optionValue = o._ractive ? o._ractive.value : o.value;\n\t\t\t\tvar shouldSelect = isMultiple ? array && valueContains( selectValue, optionValue ) : selectValue == optionValue;\n\n\t\t\t\tif ( shouldSelect ) {\n\t\t\t\t\toptionWasSelected = true;\n\t\t\t\t}\n\n\t\t\t\to.selected = shouldSelect;\n\t\t\t});\n\n\t\t\tif ( !optionWasSelected && !isMultiple ) {\n\t\t\t\tif ( this.binding ) {\n\t\t\t\t\tthis.binding.forceUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Otherwise the value should be initialised according to which\n\t\t// <option> element is selected, if twoway binding is in effect\n\t\telse if ( this.binding ) {\n\t\t\tthis.binding.forceUpdate();\n\t\t}\n\t};\n\n\tSelect.prototype.update = function update () {\n\t\tElement$$1.prototype.update.call(this);\n\t\tthis.sync();\n\t};\n\n\treturn Select;\n}(Element));\n\nvar Textarea = (function (Input$$1) {\n\tfunction Textarea( options ) {\n\t\tvar template = options.template;\n\n\t\toptions.deferContent = true;\n\n\t\tInput$$1.call( this, options );\n\n\t\t// check for single interpolator binding\n\t\tif ( !this.attributeByName.value ) {\n\t\t\tif ( template.f && isBindable( { template: template } ) ) {\n\t\t\t\tthis.attributes.push( createItem( {\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: { t: ATTRIBUTE, f: template.f, n: 'value' },\n\t\t\t\t\tparentFragment: this.parentFragment\n\t\t\t\t} ) );\n\t\t\t} else {\n\t\t\t\tthis.fragment = new Fragment({ owner: this, cssIds: null, template: template.f });\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( Input$$1 ) Textarea.__proto__ = Input$$1;\n\tTextarea.prototype = Object.create( Input$$1 && Input$$1.prototype );\n\tTextarea.prototype.constructor = Textarea;\n\n\tTextarea.prototype.bubble = function bubble () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\n\t\t\tif ( this.rendered && !this.binding && this.fragment ) {\n\t\t\t\trunloop.scheduleTask( function () {\n\t\t\t\t\tthis$1.dirty = false;\n\t\t\t\t\tthis$1.node.value = this$1.fragment.toString();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.parentFragment.bubble(); // default behaviour\n\t\t}\n\t};\n\n\treturn Textarea;\n}(Input));\n\nvar Text = (function (Item$$1) {\n\tfunction Text ( options ) {\n\t\tItem$$1.call( this, options );\n\t\tthis.type = TEXT;\n\t}\n\n\tif ( Item$$1 ) Text.__proto__ = Item$$1;\n\tText.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tText.prototype.constructor = Text;\n\n\tText.prototype.detach = function detach () {\n\t\treturn detachNode( this.node );\n\t};\n\n\tText.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tText.prototype.render = function render ( target, occupants ) {\n\t\tif ( inAttributes() ) { return; }\n\t\tthis.rendered = true;\n\n\t\tif ( occupants ) {\n\t\t\tvar n = occupants[0];\n\t\t\tif ( n && n.nodeType === 3 ) {\n\t\t\t\toccupants.shift();\n\t\t\t\tif ( n.nodeValue !== this.template ) {\n\t\t\t\t\tn.nodeValue = this.template;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tn = this.node = doc.createTextNode( this.template );\n\t\t\t\tif ( occupants[0] ) {\n\t\t\t\t\ttarget.insertBefore( n, occupants[0] );\n\t\t\t\t} else {\n\t\t\t\t\ttarget.appendChild( n );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.node = n;\n\t\t} else {\n\t\t\tthis.node = doc.createTextNode( this.template );\n\t\t\ttarget.appendChild( this.node );\n\t\t}\n\t};\n\n\tText.prototype.toString = function toString ( escape ) {\n\t\treturn escape ? escapeHtml( this.template ) : this.template;\n\t};\n\n\tText.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && shouldDestroy ) { this.detach(); }\n\t\tthis.rendered = false;\n\t};\n\n\tText.prototype.valueOf = function valueOf () {\n\t\treturn this.template;\n\t};\n\n\treturn Text;\n}(Item));\n\nvar proto$2 = Text.prototype;\nproto$2.bind = proto$2.unbind = proto$2.update = noop;\n\nvar camelizeHyphenated = function ( hyphenatedStr ) {\n\treturn hyphenatedStr.replace( /-([a-zA-Z])/g, function ( match, $1 ) {\n\t\treturn $1.toUpperCase();\n\t});\n};\n\nvar prefix;\n\nif ( !isClient ) {\n\tprefix = null;\n} else {\n\tvar prefixCache = {};\n\tvar testStyle = createElement( 'div' ).style;\n\n\tprefix = function ( prop ) {\n\t\tprop = camelizeHyphenated( prop );\n\n\t\tif ( !prefixCache[ prop ] ) {\n\t\t\tif ( testStyle[ prop ] !== undefined ) {\n\t\t\t\tprefixCache[ prop ] = prop;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\t// test vendors...\n\t\t\t\tvar capped = prop.charAt( 0 ).toUpperCase() + prop.substring( 1 );\n\n\t\t\t\tvar i = vendors.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tvar vendor = vendors[i];\n\t\t\t\t\tif ( testStyle[ vendor + capped ] !== undefined ) {\n\t\t\t\t\t\tprefixCache[ prop ] = vendor + capped;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn prefixCache[ prop ];\n\t};\n}\n\nvar prefix$1 = prefix;\n\nvar visible;\nvar hidden = 'hidden';\n\nif ( doc ) {\n\tvar prefix$2;\n\n\tif ( hidden in doc ) {\n\t\tprefix$2 = '';\n\t} else {\n\t\tvar i$1 = vendors.length;\n\t\twhile ( i$1-- ) {\n\t\t\tvar vendor = vendors[i$1];\n\t\t\thidden = vendor + 'Hidden';\n\n\t\t\tif ( hidden in doc ) {\n\t\t\t\tprefix$2 = vendor;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( prefix$2 !== undefined ) {\n\t\tdoc.addEventListener( prefix$2 + 'visibilitychange', onChange );\n\t\tonChange();\n\t} else {\n\t\t// gah, we're in an old browser\n\t\tif ( 'onfocusout' in doc ) {\n\t\t\tdoc.addEventListener( 'focusout', onHide );\n\t\t\tdoc.addEventListener( 'focusin', onShow );\n\t\t}\n\n\t\telse {\n\t\t\twin.addEventListener( 'pagehide', onHide );\n\t\t\twin.addEventListener( 'blur', onHide );\n\n\t\t\twin.addEventListener( 'pageshow', onShow );\n\t\t\twin.addEventListener( 'focus', onShow );\n\t\t}\n\n\t\tvisible = true; // until proven otherwise. Not ideal but hey\n\t}\n}\n\nfunction onChange () {\n\tvisible = !doc[ hidden ];\n}\n\nfunction onHide () {\n\tvisible = false;\n}\n\nfunction onShow () {\n\tvisible = true;\n}\n\nvar unprefixPattern = new RegExp( '^-(?:' + vendors.join( '|' ) + ')-' );\n\nvar unprefix = function ( prop ) {\n\treturn prop.replace( unprefixPattern, '' );\n};\n\nvar vendorPattern = new RegExp( '^(?:' + vendors.join( '|' ) + ')([A-Z])' );\n\nvar hyphenate = function ( str ) {\n\tif ( !str ) { return ''; } // edge case\n\n\tif ( vendorPattern.test( str ) ) { str = '-' + str; }\n\n\treturn str.replace( /[A-Z]/g, function (match) { return '-' + match.toLowerCase(); } );\n};\n\nvar createTransitions;\n\nif ( !isClient ) {\n\tcreateTransitions = null;\n} else {\n\tvar testStyle$1 = createElement( 'div' ).style;\n\tvar linear$2 = function (x) { return x; };\n\n\tvar canUseCssTransitions = {};\n\tvar cannotUseCssTransitions = {};\n\n\t// determine some facts about our environment\n\tvar TRANSITION$1;\n\tvar TRANSITIONEND;\n\tvar CSS_TRANSITIONS_ENABLED;\n\tvar TRANSITION_DURATION;\n\tvar TRANSITION_PROPERTY;\n\tvar TRANSITION_TIMING_FUNCTION;\n\n\tif ( testStyle$1.transition !== undefined ) {\n\t\tTRANSITION$1 = 'transition';\n\t\tTRANSITIONEND = 'transitionend';\n\t\tCSS_TRANSITIONS_ENABLED = true;\n\t} else if ( testStyle$1.webkitTransition !== undefined ) {\n\t\tTRANSITION$1 = 'webkitTransition';\n\t\tTRANSITIONEND = 'webkitTransitionEnd';\n\t\tCSS_TRANSITIONS_ENABLED = true;\n\t} else {\n\t\tCSS_TRANSITIONS_ENABLED = false;\n\t}\n\n\tif ( TRANSITION$1 ) {\n\t\tTRANSITION_DURATION = TRANSITION$1 + 'Duration';\n\t\tTRANSITION_PROPERTY = TRANSITION$1 + 'Property';\n\t\tTRANSITION_TIMING_FUNCTION = TRANSITION$1 + 'TimingFunction';\n\t}\n\n\tcreateTransitions = function ( t, to, options, changedProperties, resolve ) {\n\n\t\t// Wait a beat (otherwise the target styles will be applied immediately)\n\t\t// TODO use a fastdom-style mechanism?\n\t\tsetTimeout( function () {\n\t\t\tvar jsTransitionsComplete;\n\t\t\tvar cssTransitionsComplete;\n\t\t\tvar cssTimeout; // eslint-disable-line prefer-const\n\n\t\t\tfunction transitionDone () { clearTimeout( cssTimeout ); }\n\n\t\t\tfunction checkComplete () {\n\t\t\t\tif ( jsTransitionsComplete && cssTransitionsComplete ) {\n\t\t\t\t\tt.unregisterCompleteHandler( transitionDone );\n\t\t\t\t\t// will changes to events and fire have an unexpected consequence here?\n\t\t\t\t\tt.ractive.fire( t.name + ':end', t.node, t.isIntro );\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// this is used to keep track of which elements can use CSS to animate\n\t\t\t// which properties\n\t\t\tvar hashPrefix = ( t.node.namespaceURI || '' ) + t.node.tagName;\n\n\t\t\t// need to reset transition properties\n\t\t\tvar style = t.node.style;\n\t\t\tvar previous = {\n\t\t\t\tproperty: style[ TRANSITION_PROPERTY ],\n\t\t\t\ttiming: style[ TRANSITION_TIMING_FUNCTION ],\n\t\t\t\tduration: style[ TRANSITION_DURATION ]\n\t\t\t};\n\n\t\t\tstyle[ TRANSITION_PROPERTY ] = changedProperties.map( prefix$1 ).map( hyphenate ).join( ',' );\n\t\t\tvar easingName = hyphenate( options.easing || 'linear' );\n\t\t\tstyle[ TRANSITION_TIMING_FUNCTION ] = easingName;\n\t\t\tvar cssTiming = style[ TRANSITION_TIMING_FUNCTION ] === easingName;\n\t\t\tstyle[ TRANSITION_DURATION ] = ( options.duration / 1000 ) + 's';\n\n\t\t\tfunction transitionEndHandler ( event ) {\n\t\t\t\tvar index = changedProperties.indexOf( camelizeHyphenated( unprefix( event.propertyName ) ) );\n\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\tchangedProperties.splice( index, 1 );\n\t\t\t\t}\n\n\t\t\t\tif ( changedProperties.length ) {\n\t\t\t\t\t// still transitioning...\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( cssTimeout );\n\t\t\t\tcssTransitionsDone();\n\t\t\t}\n\n\t\t\tfunction cssTransitionsDone () {\n\t\t\t\tstyle[ TRANSITION_PROPERTY ] = previous.property;\n\t\t\t\tstyle[ TRANSITION_TIMING_FUNCTION ] = previous.duration;\n\t\t\t\tstyle[ TRANSITION_DURATION ] = previous.timing;\n\n\t\t\t\tt.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );\n\n\t\t\t\tcssTransitionsComplete = true;\n\t\t\t\tcheckComplete();\n\t\t\t}\n\n\t\t\tt.node.addEventListener( TRANSITIONEND, transitionEndHandler, false );\n\n\t\t\t// safety net in case transitionend never fires\n\t\t\tcssTimeout = setTimeout( function () {\n\t\t\t\tchangedProperties = [];\n\t\t\t\tcssTransitionsDone();\n\t\t\t}, options.duration + ( options.delay || 0 ) + 50 );\n\t\t\tt.registerCompleteHandler( transitionDone );\n\n\t\t\tsetTimeout( function () {\n\t\t\t\tvar i = changedProperties.length;\n\t\t\t\tvar hash;\n\t\t\t\tvar originalValue;\n\t\t\t\tvar index;\n\t\t\t\tvar propertiesToTransitionInJs = [];\n\t\t\t\tvar prop;\n\t\t\t\tvar suffix;\n\t\t\t\tvar interpolator;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tprop = changedProperties[i];\n\t\t\t\t\thash = hashPrefix + prop;\n\n\t\t\t\t\tif ( cssTiming && CSS_TRANSITIONS_ENABLED && !cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\tstyle[ prefix$1( prop ) ] = to[ prop ];\n\n\t\t\t\t\t\t// If we're not sure if CSS transitions are supported for\n\t\t\t\t\t\t// this tag/property combo, find out now\n\t\t\t\t\t\tif ( !canUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t\toriginalValue = t.getStyle( prop );\n\n\t\t\t\t\t\t\t// if this property is transitionable in this browser,\n\t\t\t\t\t\t\t// the current style will be different from the target style\n\t\t\t\t\t\t\tcanUseCssTransitions[ hash ] = ( t.getStyle( prop ) != to[ prop ] );\n\t\t\t\t\t\t\tcannotUseCssTransitions[ hash ] = !canUseCssTransitions[ hash ];\n\n\t\t\t\t\t\t\t// Reset, if we're going to use timers after all\n\t\t\t\t\t\t\tif ( cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t\t\tstyle[ prefix$1( prop ) ] = originalValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !cssTiming || !CSS_TRANSITIONS_ENABLED || cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t// we need to fall back to timer-based stuff\n\t\t\t\t\t\tif ( originalValue === undefined ) {\n\t\t\t\t\t\t\toriginalValue = t.getStyle( prop );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// need to remove this from changedProperties, otherwise transitionEndHandler\n\t\t\t\t\t\t// will get confused\n\t\t\t\t\t\tindex = changedProperties.indexOf( prop );\n\t\t\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\t\t\twarnIfDebug( 'Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!', { node: t.node });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchangedProperties.splice( index, 1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// TODO Determine whether this property is animatable at all\n\n\t\t\t\t\t\tsuffix = /[^\\d]*$/.exec( to[ prop ] )[0];\n\t\t\t\t\t\tinterpolator = interpolate( parseFloat( originalValue ), parseFloat( to[ prop ] ) ) || ( function () { return to[ prop ]; } );\n\n\t\t\t\t\t\t// ...then kick off a timer-based transition\n\t\t\t\t\t\tpropertiesToTransitionInJs.push({\n\t\t\t\t\t\t\tname: prefix$1( prop ),\n\t\t\t\t\t\t\tinterpolator: interpolator,\n\t\t\t\t\t\t\tsuffix: suffix\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// javascript transitions\n\t\t\t\tif ( propertiesToTransitionInJs.length ) {\n\t\t\t\t\tvar easing;\n\n\t\t\t\t\tif ( typeof options.easing === 'string' ) {\n\t\t\t\t\t\teasing = t.ractive.easing[ options.easing ];\n\n\t\t\t\t\t\tif ( !easing ) {\n\t\t\t\t\t\t\twarnOnceIfDebug( missingPlugin( options.easing, 'easing' ) );\n\t\t\t\t\t\t\teasing = linear$2;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( typeof options.easing === 'function' ) {\n\t\t\t\t\t\teasing = options.easing;\n\t\t\t\t\t} else {\n\t\t\t\t\t\teasing = linear$2;\n\t\t\t\t\t}\n\n\t\t\t\t\tnew Ticker({\n\t\t\t\t\t\tduration: options.duration,\n\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t\tstep: function step ( pos ) {\n\t\t\t\t\t\t\tvar i = propertiesToTransitionInJs.length;\n\t\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\t\tvar prop = propertiesToTransitionInJs[i];\n\t\t\t\t\t\t\t\tt.node.style[ prop.name ] = prop.interpolator( pos ) + prop.suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: function complete () {\n\t\t\t\t\t\t\tjsTransitionsComplete = true;\n\t\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tjsTransitionsComplete = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !changedProperties.length ) {\n\t\t\t\t\t// We need to cancel the transitionEndHandler, and deal with\n\t\t\t\t\t// the fact that it will never fire\n\t\t\t\t\tt.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );\n\t\t\t\t\tcssTransitionsComplete = true;\n\t\t\t\t\tcheckComplete();\n\t\t\t\t}\n\t\t\t}, 0 );\n\t\t}, options.delay || 0 );\n\t};\n}\n\nvar createTransitions$1 = createTransitions;\n\nfunction resetStyle ( node, style ) {\n\tif ( style ) {\n\t\tnode.setAttribute( 'style', style );\n\t} else {\n\t\t// Next line is necessary, to remove empty style attribute!\n\t\t// See http://stackoverflow.com/a/7167553\n\t\tnode.getAttribute( 'style' );\n\t\tnode.removeAttribute( 'style' );\n\t}\n}\n\nvar getComputedStyle = win && win.getComputedStyle;\nvar resolved$1 = Promise.resolve();\n\nvar names = {\n\tt0: 'intro-outro',\n\tt1: 'intro',\n\tt2: 'outro'\n};\n\nvar Transition = function Transition ( options ) {\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\tthis.ractive = this.owner.ractive;\n\tthis.template = options.template;\n\tthis.parentFragment = options.parentFragment;\n\tthis.options = options;\n\tthis.onComplete = [];\n};\n\nTransition.prototype.animateStyle = function animateStyle ( style, value, options ) {\n\t\tvar this$1 = this;\n\n\tif ( arguments.length === 4 ) {\n\t\tthrow new Error( 't.animateStyle() returns a promise - use .then() instead of passing a callback' );\n\t}\n\n\t// Special case - page isn't visible. Don't animate anything, because\n\t// that way you'll never get CSS transitionend events\n\tif ( !visible ) {\n\t\tthis.setStyle( style, value );\n\t\treturn resolved$1;\n\t}\n\n\tvar to;\n\n\tif ( typeof style === 'string' ) {\n\t\tto = {};\n\t\tto[ style ] = value;\n\t} else {\n\t\tto = style;\n\n\t\t// shuffle arguments\n\t\toptions = value;\n\t}\n\n\t// As of 0.3.9, transition authors should supply an `option` object with\n\t// `duration` and `easing` properties (and optional `delay`), plus a\n\t// callback function that gets called after the animation completes\n\n\t// TODO remove this check in a future version\n\tif ( !options ) {\n\t\twarnOnceIfDebug( 'The \""%s\"" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340', this.name );\n\t\toptions = this;\n\t}\n\n\treturn new Promise( function (fulfil) {\n\t\t// Edge case - if duration is zero, set style synchronously and complete\n\t\tif ( !options.duration ) {\n\t\t\tthis$1.setStyle( to );\n\t\t\tfulfil();\n\t\t\treturn;\n\t\t}\n\n\t\t// Get a list of the properties we're animating\n\t\tvar propertyNames = Object.keys( to );\n\t\tvar changedProperties = [];\n\n\t\t// Store the current styles\n\t\tvar computedStyle = getComputedStyle( this$1.node );\n\n\t\tvar i = propertyNames.length;\n\t\twhile ( i-- ) {\n\t\t\tvar prop = propertyNames[i];\n\t\t\tvar current = computedStyle[ prefix$1( prop ) ];\n\n\t\t\tif ( current === '0px' ) { current = 0; }\n\n\t\t\t// we need to know if we're actually changing anything\n\t\t\tif ( current != to[ prop ] ) { // use != instead of !==, so we can compare strings with numbers\n\t\t\t\tchangedProperties.push( prop );\n\n\t\t\t\t// make the computed style explicit, so we can animate where\n\t\t\t\t// e.g. height='auto'\n\t\t\t\tthis$1.node.style[ prefix$1( prop ) ] = current;\n\t\t\t}\n\t\t}\n\n\t\t// If we're not actually changing anything, the transitionend event\n\t\t// will never fire! So we complete early\n\t\tif ( !changedProperties.length ) {\n\t\t\tfulfil();\n\t\t\treturn;\n\t\t}\n\n\t\tcreateTransitions$1( this$1, to, options, changedProperties, fulfil );\n\t});\n};\n\nTransition.prototype.bind = function bind () {\n\tvar options = this.options;\n\tvar type = options.template && options.template.v;\n\tif ( type ) {\n\t\tif ( type === 't0' || type === 't1' ) { this.element.intro = this; }\n\t\tif ( type === 't0' || type === 't2' ) { this.element.outro = this; }\n\t\tthis.eventName = names[ type ];\n\t}\n\n\tvar ractive = this.owner.ractive;\n\n\tthis.name = options.name || options.template.n;\n\n\tif ( options.params ) {\n\t\tthis.params = options.params;\n\t}\n\n\tif ( typeof this.name === 'function' ) {\n\t\tthis._fn = this.name;\n\t\tthis.name = this._fn.name;\n\t} else {\n\t\tthis._fn = findInViewHierarchy( 'transitions', ractive, this.name );\n\t}\n\n\tif ( !this._fn ) {\n\t\twarnOnceIfDebug( missingPlugin( this.name, 'transition' ), { ractive: ractive });\n\t}\n\n\tsetupArgsFn( this, options.template );\n};\n\nTransition.prototype.getParams = function getParams () {\n\tif ( this.params ) { return this.params; }\n\n\t// get expression args if supplied\n\tif ( this.fn ) {\n\t\tvar values = resolveArgs( this, this.template, this.parentFragment ).map( function (model) {\n\t\t\tif ( !model ) { return undefined; }\n\n\t\t\treturn model.get();\n\t\t});\n\t\treturn this.fn.apply( this.ractive, values );\n\t}\n};\n\nTransition.prototype.getStyle = function getStyle ( props ) {\n\tvar computedStyle = getComputedStyle( this.node );\n\n\tif ( typeof props === 'string' ) {\n\t\tvar value = computedStyle[ prefix$1( props ) ];\n\t\treturn value === '0px' ? 0 : value;\n\t}\n\n\tif ( !Array.isArray( props ) ) {\n\t\tthrow new Error( 'Transition$getStyle must be passed a string, or an array of strings representing CSS properties' );\n\t}\n\n\tvar styles = {};\n\n\tvar i = props.length;\n\twhile ( i-- ) {\n\t\tvar prop = props[i];\n\t\tvar value$1 = computedStyle[ prefix$1( prop ) ];\n\n\t\tif ( value$1 === '0px' ) { value$1 = 0; }\n\t\tstyles[ prop ] = value$1;\n\t}\n\n\treturn styles;\n};\n\nTransition.prototype.processParams = function processParams ( params, defaults ) {\n\tif ( typeof params === 'number' ) {\n\t\tparams = { duration: params };\n\t}\n\n\telse if ( typeof params === 'string' ) {\n\t\tif ( params === 'slow' ) {\n\t\t\tparams = { duration: 600 };\n\t\t} else if ( params === 'fast' ) {\n\t\t\tparams = { duration: 200 };\n\t\t} else {\n\t\t\tparams = { duration: 400 };\n\t\t}\n\t} else if ( !params ) {\n\t\tparams = {};\n\t}\n\n\treturn Object.assign( {}, defaults, params );\n};\n\nTransition.prototype.registerCompleteHandler = function registerCompleteHandler ( fn ) {\n\taddToArray( this.onComplete, fn );\n};\n\nTransition.prototype.setStyle = function setStyle ( style, value ) {\n\t\tvar this$1 = this;\n\n\tif ( typeof style === 'string' ) {\n\t\tthis.node.style[ prefix$1( style ) ] = value;\n\t}\n\n\telse {\n\t\tvar prop;\n\t\tfor ( prop in style ) {\n\t\t\tif ( style.hasOwnProperty( prop ) ) {\n\t\t\t\tthis$1.node.style[ prefix$1( prop ) ] = style[ prop ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\nTransition.prototype.shouldFire = function shouldFire ( type ) {\n\tif ( !this.ractive.transitionsEnabled ) { return false; }\n\n\t// check for noIntro and noOutro cases, which only apply when the owner ractive is rendering and unrendering, respectively\n\tif ( type === 'intro' && this.ractive.rendering && nearestProp( 'noIntro', this.ractive, true ) ) { return false; }\n\tif ( type === 'outro' && this.ractive.unrendering && nearestProp( 'noOutro', this.ractive, false ) ) { return false; }\n\n\tvar params = this.getParams(); // this is an array, the params object should be the first member\n\t// if there's not a parent element, this can't be nested, so roll on\n\tif ( !this.element.parent ) { return true; }\n\n\t// if there is a local param, it takes precedent\n\tif ( params && params[0] && 'nested' in params[0] ) {\n\t\tif ( params[0].nested !== false ) { return true; }\n\t} else { // use the nearest instance setting\n\t\t// find the nearest instance that actually has a nested setting\n\t\tif ( nearestProp( 'nestedTransitions', this.ractive ) !== false ) { return true; }\n\t}\n\n\t// check to see if this is actually a nested transition\n\tvar el = this.element.parent;\n\twhile ( el ) {\n\t\tif ( el[type] && el[type].starting ) { return false; }\n\t\tel = el.parent;\n\t}\n\n\treturn true;\n};\n\nTransition.prototype.start = function start () {\n\t\tvar this$1 = this;\n\n\tvar node = this.node = this.element.node;\n\tvar originalStyle = node.getAttribute( 'style' );\n\n\tvar completed;\n\tvar args = this.getParams();\n\n\t// create t.complete() - we don't want this on the prototype,\n\t// because we don't want `this` silliness when passing it as\n\t// an argument\n\tthis.complete = function (noReset) {\n\t\tthis$1.starting = false;\n\t\tif ( completed ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis$1.onComplete.forEach( function (fn) { return fn(); } );\n\t\tif ( !noReset && this$1.isIntro ) {\n\t\t\tresetStyle( node, originalStyle);\n\t\t}\n\n\t\tthis$1._manager.remove( this$1 );\n\n\t\tcompleted = true;\n\t};\n\n\t// If the transition function doesn't exist, abort\n\tif ( !this._fn ) {\n\t\tthis.complete();\n\t\treturn;\n\t}\n\n\tvar promise = this._fn.apply( this.ractive, [ this ].concat( args ) );\n\tif ( promise ) { promise.then( this.complete ); }\n};\n\nTransition.prototype.toString = function toString () { return ''; };\n\nTransition.prototype.unbind = function unbind () {\n\tif ( !this.element.attributes.unbinding ) {\n\t\tvar type = this.options && this.options.template && this.options.template.v;\n\t\tif ( type === 't0' || type === 't1' ) { this.element.intro = null; }\n\t\tif ( type === 't0' || type === 't2' ) { this.element.outro = null; }\n\t}\n};\n\nTransition.prototype.unregisterCompleteHandler = function unregisterCompleteHandler ( fn ) {\n\tremoveFromArray( this.onComplete, fn );\n};\n\nvar proto$3 = Transition.prototype;\nproto$3.destroyed = proto$3.render = proto$3.unrender = proto$3.update = noop;\n\nfunction nearestProp ( prop, ractive, rendering ) {\n\tvar instance = ractive;\n\twhile ( instance ) {\n\t\tif ( instance.hasOwnProperty( prop ) && ( rendering === undefined || rendering ? instance.rendering : instance.unrendering ) ) { return instance[ prop ]; }\n\t\tinstance = instance.component && instance.component.ractive;\n\t}\n\n\treturn ractive[ prop ];\n}\n\nvar elementCache = {};\n\nvar ieBug;\nvar ieBlacklist;\n\ntry {\n\tcreateElement( 'table' ).innerHTML = 'foo';\n} catch ( err ) {\n\tieBug = true;\n\n\tieBlacklist = {\n\t\tTABLE:  [ '<table class=\""x\"">', '</table>' ],\n\t\tTHEAD:  [ '<table><thead class=\""x\"">', '</thead></table>' ],\n\t\tTBODY:  [ '<table><tbody class=\""x\"">', '</tbody></table>' ],\n\t\tTR:     [ '<table><tr class=\""x\"">', '</tr></table>' ],\n\t\tSELECT: [ '<select class=\""x\"">', '</select>' ]\n\t};\n}\n\nvar insertHtml = function ( html$$1, node, docFrag ) {\n\tvar nodes = [];\n\n\t// render 0 and false\n\tif ( html$$1 == null || html$$1 === '' ) { return nodes; }\n\n\tvar container;\n\tvar wrapper;\n\tvar selectedOption;\n\n\tif ( ieBug && ( wrapper = ieBlacklist[ node.tagName ] ) ) {\n\t\tcontainer = element( 'DIV' );\n\t\tcontainer.innerHTML = wrapper[0] + html$$1 + wrapper[1];\n\t\tcontainer = container.querySelector( '.x' );\n\n\t\tif ( container.tagName === 'SELECT' ) {\n\t\t\tselectedOption = container.options[ container.selectedIndex ];\n\t\t}\n\t}\n\n\telse if ( node.namespaceURI === svg$1 ) {\n\t\tcontainer = element( 'DIV' );\n\t\tcontainer.innerHTML = '<svg class=\""x\"">' + html$$1 + '</svg>';\n\t\tcontainer = container.querySelector( '.x' );\n\t}\n\n\telse if ( node.tagName === 'TEXTAREA' ) {\n\t\tcontainer = createElement( 'div' );\n\n\t\tif ( typeof container.textContent !== 'undefined' ) {\n\t\t\tcontainer.textContent = html$$1;\n\t\t} else {\n\t\t\tcontainer.innerHTML = html$$1;\n\t\t}\n\t}\n\n\telse {\n\t\tcontainer = element( node.tagName );\n\t\tcontainer.innerHTML = html$$1;\n\n\t\tif ( container.tagName === 'SELECT' ) {\n\t\t\tselectedOption = container.options[ container.selectedIndex ];\n\t\t}\n\t}\n\n\tvar child;\n\twhile ( child = container.firstChild ) {\n\t\tnodes.push( child );\n\t\tdocFrag.appendChild( child );\n\t}\n\n\t// This is really annoying. Extracting <option> nodes from the\n\t// temporary container <select> causes the remaining ones to\n\t// become selected. So now we have to deselect them. IE8, you\n\t// amaze me. You really do\n\t// ...and now Chrome too\n\tvar i;\n\tif ( node.tagName === 'SELECT' ) {\n\t\ti = nodes.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( nodes[i] !== selectedOption ) {\n\t\t\t\tnodes[i].selected = false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nodes;\n};\n\nfunction element ( tagName ) {\n\treturn elementCache[ tagName ] || ( elementCache[ tagName ] = createElement( tagName ) );\n}\n\nvar Triple = (function (Mustache$$1) {\n\tfunction Triple ( options ) {\n\t\tMustache$$1.call( this, options );\n\t}\n\n\tif ( Mustache$$1 ) Triple.__proto__ = Mustache$$1;\n\tTriple.prototype = Object.create( Mustache$$1 && Mustache$$1.prototype );\n\tTriple.prototype.constructor = Triple;\n\n\tTriple.prototype.detach = function detach () {\n\t\tvar docFrag = createDocumentFragment();\n\t\tthis.nodes.forEach( function (node) { return docFrag.appendChild( node ); } );\n\t\treturn docFrag;\n\t};\n\n\tTriple.prototype.find = function find ( selector ) {\n\t\tvar this$1 = this;\n\n\t\tvar len = this.nodes.length;\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar node = this$1.nodes[i];\n\n\t\t\tif ( node.nodeType !== 1 ) { continue; }\n\n\t\t\tif ( matches( node, selector ) ) { return node; }\n\n\t\t\tvar queryResult = node.querySelector( selector );\n\t\t\tif ( queryResult ) { return queryResult; }\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tTriple.prototype.findAll = function findAll ( selector, query ) {\n\t\tvar this$1 = this;\n\n\t\tvar len = this.nodes.length;\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar node = this$1.nodes[i];\n\n\t\t\tif ( node.nodeType !== 1 ) { continue; }\n\n\t\t\tif ( query.test( node ) ) { query.add( node ); }\n\n\t\t\tvar queryAllResult = node.querySelectorAll( selector );\n\t\t\tif ( queryAllResult ) {\n\t\t\t\tvar numNodes = queryAllResult.length;\n\t\t\t\tvar j = (void 0);\n\n\t\t\t\tfor ( j = 0; j < numNodes; j += 1 ) {\n\t\t\t\t\tquery.add( queryAllResult[j] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tTriple.prototype.findComponent = function findComponent () {\n\t\treturn null;\n\t};\n\n\tTriple.prototype.firstNode = function firstNode () {\n\t\treturn this.nodes[0];\n\t};\n\n\tTriple.prototype.render = function render ( target ) {\n\t\tvar html = this.model ? this.model.get() : '';\n\t\tthis.nodes = insertHtml( html, this.parentFragment.findParentNode(), target );\n\t\tthis.rendered = true;\n\t};\n\n\tTriple.prototype.toString = function toString () {\n\t\treturn this.model && this.model.get() != null ? decodeCharacterReferences( '' + this.model.get() ) : '';\n\t};\n\n\tTriple.prototype.unrender = function unrender () {\n\t\tif ( this.nodes ) { this.nodes.forEach( function (node) { return detachNode( node ); } ); }\n\t\tthis.rendered = false;\n\t};\n\n\tTriple.prototype.update = function update () {\n\t\tif ( this.rendered && this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tthis.unrender();\n\t\t\tvar docFrag = createDocumentFragment();\n\t\t\tthis.render( docFrag );\n\n\t\t\tvar parentNode = this.parentFragment.findParentNode();\n\t\t\tvar anchor = this.parentFragment.findNextNode( this );\n\n\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t} else {\n\t\t\t// make sure to reset the dirty flag even if not rendered\n\t\t\tthis.dirty = false;\n\t\t}\n\t};\n\n\treturn Triple;\n}(Mustache));\n\n// finds the component constructor in the registry or view hierarchy registries\nfunction getComponentConstructor ( ractive, name ) {\n\tvar instance = findInstance( 'components', ractive, name );\n\tvar Component;\n\n\tif ( instance ) {\n\t\tComponent = instance.components[ name ];\n\n\t\t// best test we have for not Ractive.extend\n\t\tif ( Component && !Component._Parent ) {\n\t\t\t// function option, execute and store for reset\n\t\t\tvar fn = Component.bind( instance );\n\t\t\tfn.isOwner = instance.components.hasOwnProperty( name );\n\t\t\tComponent = fn();\n\n\t\t\tif ( !Component ) {\n\t\t\t\twarnIfDebug( noRegistryFunctionReturn, name, 'component', 'component', { ractive: ractive });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( typeof Component === 'string' ) {\n\t\t\t\t// allow string lookup\n\t\t\t\tComponent = getComponentConstructor( ractive, Component );\n\t\t\t}\n\n\t\t\tComponent._fn = fn;\n\t\t\tinstance.components[ name ] = Component;\n\t\t}\n\t}\n\n\treturn Component;\n}\n\n//import Yielder from './Yielder';\nvar constructors = {};\nconstructors[ ALIAS ] = Alias;\nconstructors[ ANCHOR ] = Component;\nconstructors[ DOCTYPE ] = Doctype;\nconstructors[ INTERPOLATOR ] = Interpolator;\nconstructors[ PARTIAL ] = Partial;\nconstructors[ SECTION ] = Section;\nconstructors[ TRIPLE ] = Triple;\nconstructors[ YIELDER ] = Partial;\n\nconstructors[ ATTRIBUTE ] = Attribute;\nconstructors[ BINDING_FLAG ] = BindingFlag;\nconstructors[ DECORATOR ] = Decorator;\nconstructors[ EVENT ] = EventDirective;\nconstructors[ TRANSITION ] = Transition;\n\nvar specialElements = {\n\tdoctype: Doctype,\n\tform: Form,\n\tinput: Input,\n\toption: Option,\n\tselect: Select,\n\ttextarea: Textarea\n};\n\nfunction createItem ( options ) {\n\tif ( typeof options.template === 'string' ) {\n\t\treturn new Text( options );\n\t}\n\n\tif ( options.template.t === ELEMENT ) {\n\t\t// could be component or element\n\t\tvar ComponentConstructor = getComponentConstructor( options.parentFragment.ractive, options.template.e );\n\t\tif ( ComponentConstructor ) {\n\t\t\treturn new Component( options, ComponentConstructor );\n\t\t}\n\n\t\tvar tagName = options.template.e.toLowerCase();\n\n\t\tvar ElementConstructor = specialElements[ tagName ] || Element;\n\t\treturn new ElementConstructor( options );\n\t}\n\n\tvar Item;\n\n\t// component mappings are a special case of attribute\n\tif ( options.template.t === ATTRIBUTE ) {\n\t\tvar el = options.owner;\n\t\tif ( !el || ( el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT ) ) {\n\t\t\tel = findElement( options.parentFragment );\n\t\t}\n\t\toptions.element = el;\n\n\t\tItem = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;\n\t} else {\n\t\tItem = constructors[ options.template.t ];\n\t}\n\n\tif ( !Item ) { throw new Error( (\""Unrecognised item type \"" + (options.template.t)) ); }\n\n\treturn new Item( options );\n}\n\n// TODO all this code needs to die\nfunction processItems ( items, values, guid, counter ) {\n\tif ( counter === void 0 ) counter = 0;\n\n\treturn items.map( function (item) {\n\t\tif ( item.type === TEXT ) {\n\t\t\treturn item.template;\n\t\t}\n\n\t\tif ( item.fragment ) {\n\t\t\tif ( item.fragment.iterations ) {\n\t\t\t\treturn item.fragment.iterations.map( function (fragment) {\n\t\t\t\t\treturn processItems( fragment.items, values, guid, counter );\n\t\t\t\t}).join( '' );\n\t\t\t} else {\n\t\t\t\treturn processItems( item.fragment.items, values, guid, counter );\n\t\t\t}\n\t\t}\n\n\t\tvar placeholderId = guid + \""-\"" + (counter++);\n\t\tvar model = item.model || item.newModel;\n\n\t\tvalues[ placeholderId ] = model ?\n\t\t\tmodel.wrapper ?\n\t\t\t\tmodel.wrapperValue :\n\t\t\t\tmodel.get() :\n\t\t\tundefined;\n\n\t\treturn '${' + placeholderId + '}';\n\t}).join( '' );\n}\n\nfunction unrenderAndDestroy$1 ( item ) {\n\titem.unrender( true );\n}\n\nvar Fragment = function Fragment ( options ) {\n\tthis.owner = options.owner; // The item that owns this fragment - an element, section, partial, or attribute\n\n\tthis.isRoot = !options.owner.parentFragment;\n\tthis.parent = this.isRoot ? null : this.owner.parentFragment;\n\tthis.ractive = options.ractive || ( this.isRoot ? options.owner : this.parent.ractive );\n\n\tthis.componentParent = ( this.isRoot && this.ractive.component ) ? this.ractive.component.parentFragment : null;\n\tthis.delegate = this.parent ? this.parent.delegate : ( this.componentParent && this.componentParent.delegate );\n\n\tthis.context = null;\n\tthis.rendered = false;\n\n\t// encapsulated styles should be inherited until they get applied by an element\n\tthis.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );\n\n\tthis.dirty = false;\n\tthis.dirtyValue = true; // used for attribute values\n\n\tthis.template = options.template || [];\n\tthis.createItems();\n};\n\nFragment.prototype.bind = function bind$1 ( context ) {\n\tthis.context = context;\n\tthis.items.forEach( bind$1$1 );\n\tthis.bound = true;\n\n\t// in rare cases, a forced resolution (or similar) will cause the\n\t// fragment to be dirty before it's even finished binding. In those\n\t// cases we update immediately\n\tif ( this.dirty ) { this.update(); }\n\n\treturn this;\n};\n\nFragment.prototype.bubble = function bubble () {\n\tthis.dirtyValue = true;\n\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\n\t\tif ( this.isRoot ) { // TODO encapsulate 'is component root, but not overall root' check?\n\t\t\tif ( this.ractive.component ) {\n\t\t\t\tthis.ractive.component.bubble();\n\t\t\t} else if ( this.bound ) {\n\t\t\t\trunloop.addFragment( this );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.owner.bubble( this.index );\n\t\t}\n\t}\n};\n\nFragment.prototype.createItems = function createItems () {\n\t\tvar this$1 = this;\n\n\t// this is a hot code path\n\tvar max = this.template.length;\n\tthis.items = [];\n\tfor ( var i = 0; i < max; i++ ) {\n\t\tthis$1.items[i] = createItem({ parentFragment: this$1, template: this$1.template[i], index: i });\n\t}\n};\n\nFragment.prototype.destroyed = function destroyed$1 () {\n\tthis.items.forEach( destroyed$1$1 );\n};\n\nFragment.prototype.detach = function detach () {\n\tvar docFrag = createDocumentFragment();\n\tthis.items.forEach( function (item) { return docFrag.appendChild( item.detach() ); } );\n\treturn docFrag;\n};\n\nFragment.prototype.find = function find ( selector, options ) {\n\treturn findMap( this.items, function (i) { return i.find( selector, options ); } );\n};\n\nFragment.prototype.findAll = function findAll ( selector, query ) {\n\tif ( this.items ) {\n\t\tthis.items.forEach( function (i) { return i.findAll && i.findAll( selector, query ); } );\n\t}\n};\n\nFragment.prototype.findComponent = function findComponent ( name, options ) {\n\treturn findMap( this.items, function (i) { return i.findComponent( name, options ); } );\n};\n\nFragment.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\tif ( this.items ) {\n\t\tthis.items.forEach( function (i) { return i.findAllComponents && i.findAllComponents( name, query ); } );\n\t}\n};\n\nFragment.prototype.findContext = function findContext () {\n\tvar fragment = this;\n\twhile ( fragment && !fragment.context ) { fragment = fragment.parent; }\n\tif ( !fragment ) { return this.ractive.viewmodel; }\n\telse { return fragment.context; }\n};\n\nFragment.prototype.findNextNode = function findNextNode ( item ) {\n\t\tvar this$1 = this;\n\n\t// search for the next node going forward\n\tif ( item ) {\n\t\tfor ( var i = item.index + 1; i < this.items.length; i++ ) {\n\t\t\tif ( !this$1.items[ i ] ) { continue; }\n\n\t\t\tvar node = this$1.items[ i ].firstNode( true );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n\n\t// if this is the root fragment, and there are no more items,\n\t// it means we're at the end...\n\tif ( this.isRoot ) {\n\t\tif ( this.ractive.component ) {\n\t\t\treturn this.ractive.component.parentFragment.findNextNode( this.ractive.component );\n\t\t}\n\n\t\t// TODO possible edge case with other content\n\t\t// appended to this.ractive.el?\n\t\treturn null;\n\t}\n\n\tif ( this.parent ) { return this.owner.findNextNode( this ); } // the argument is in case the parent is a RepeatedFragment\n};\n\nFragment.prototype.findParentNode = function findParentNode () {\n\tvar fragment = this;\n\n\tdo {\n\t\tif ( fragment.owner.type === ELEMENT ) {\n\t\t\treturn fragment.owner.node;\n\t\t}\n\n\t\tif ( fragment.isRoot && !fragment.ractive.component ) { // TODO encapsulate check\n\t\t\treturn fragment.ractive.el;\n\t\t}\n\n\t\tif ( fragment.owner.type === YIELDER ) {\n\t\t\tfragment = fragment.owner.containerFragment;\n\t\t} else {\n\t\t\tfragment = fragment.componentParent || fragment.parent; // TODO ugh\n\t\t}\n\t} while ( fragment );\n\n\tthrow new Error( 'Could not find parent node' ); // TODO link to issue tracker\n};\n\nFragment.prototype.findRepeatingFragment = function findRepeatingFragment () {\n\tvar fragment = this;\n\t// TODO better check than fragment.parent.iterations\n\twhile ( ( fragment.parent || fragment.componentParent ) && !fragment.isIteration ) {\n\t\tfragment = fragment.parent || fragment.componentParent;\n\t}\n\n\treturn fragment;\n};\n\nFragment.prototype.firstNode = function firstNode ( skipParent ) {\n\tvar node = findMap( this.items, function (i) { return i.firstNode( true ); } );\n\tif ( node ) { return node; }\n\tif ( skipParent ) { return null; }\n\n\treturn this.parent.findNextNode( this.owner );\n};\n\nFragment.prototype.rebinding = function rebinding ( next ) {\n\tthis.context = next;\n};\n\nFragment.prototype.render = function render ( target, occupants ) {\n\tif ( this.rendered ) { throw new Error( 'Fragment is already rendered!' ); }\n\tthis.rendered = true;\n\n\tthis.items.forEach( function (item) { return item.render( target, occupants ); } );\n};\n\nFragment.prototype.resetTemplate = function resetTemplate ( template ) {\n\tvar wasBound = this.bound;\n\tvar wasRendered = this.rendered;\n\n\t// TODO ensure transitions are disabled globally during reset\n\n\tif ( wasBound ) {\n\t\tif ( wasRendered ) { this.unrender( true ); }\n\t\tthis.unbind();\n\t}\n\n\tthis.template = template;\n\tthis.createItems();\n\n\tif ( wasBound ) {\n\t\tthis.bind( this.context );\n\n\t\tif ( wasRendered ) {\n\t\t\tvar parentNode = this.findParentNode();\n\t\t\tvar anchor = this.findNextNode();\n\n\t\t\tif ( anchor ) {\n\t\t\t\tvar docFrag = createDocumentFragment();\n\t\t\t\tthis.render( docFrag );\n\t\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t\t} else {\n\t\t\t\tthis.render( parentNode );\n\t\t\t}\n\t\t}\n\t}\n};\n\nFragment.prototype.shuffled = function shuffled$1 () {\n\tthis.items.forEach( shuffled$1$1 );\n};\n\nFragment.prototype.toString = function toString$1 ( escape ) {\n\treturn this.items.map( escape ? toEscapedString : toString$2 ).join( '' );\n};\n\nFragment.prototype.unbind = function unbind$1 () {\n\tthis.context = null;\n\tthis.items.forEach( unbind$1$1 );\n\tthis.bound = false;\n\n\treturn this;\n};\n\nFragment.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\tthis.items.forEach( shouldDestroy ? unrenderAndDestroy$1 : unrender$1$1 );\n\tthis.rendered = false;\n};\n\nFragment.prototype.update = function update$1 () {\n\tif ( this.dirty ) {\n\t\tif ( !this.updating ) {\n\t\t\tthis.dirty = false;\n\t\t\tthis.updating = true;\n\t\t\tthis.items.forEach( update$1$1 );\n\t\t\tthis.updating = false;\n\t\t} else if ( this.isRoot ) {\n\t\t\trunloop.addFragmentToRoot( this );\n\t\t}\n\t}\n};\n\nFragment.prototype.valueOf = function valueOf () {\n\tif ( this.items.length === 1 ) {\n\t\treturn this.items[0].valueOf();\n\t}\n\n\tif ( this.dirtyValue ) {\n\t\tvar values = {};\n\t\tvar source = processItems( this.items, values, this.ractive._guid );\n\t\tvar parsed = parseJSON( source, values );\n\n\t\tthis.value = parsed ?\n\t\t\tparsed.value :\n\t\t\tthis.toString();\n\n\t\tthis.dirtyValue = false;\n\t}\n\n\treturn this.value;\n};\n\nfunction getChildQueue ( queue, ractive ) {\n\treturn queue[ ractive._guid ] || ( queue[ ractive._guid ] = [] );\n}\n\nfunction fire$1 ( hookQueue, ractive ) {\n\tvar childQueue = getChildQueue( hookQueue.queue, ractive );\n\n\thookQueue.hook.fire( ractive );\n\n\t// queue is \""live\"" because components can end up being\n\t// added while hooks fire on parents that modify data values.\n\twhile ( childQueue.length ) {\n\t\tfire$1( hookQueue, childQueue.shift() );\n\t}\n\n\tdelete hookQueue.queue[ ractive._guid ];\n}\n\nvar HookQueue = function HookQueue ( event ) {\n\tthis.hook = new Hook( event );\n\tthis.inProcess = {};\n\tthis.queue = {};\n};\n\nHookQueue.prototype.begin = function begin ( ractive ) {\n\tthis.inProcess[ ractive._guid ] = true;\n};\n\nHookQueue.prototype.end = function end ( ractive ) {\n\tvar parent = ractive.parent;\n\n\t// If this is *isn't* a child of a component that's in process,\n\t// it should call methods or fire at this point\n\tif ( !parent || !this.inProcess[ parent._guid ] ) {\n\t\tfire$1( this, ractive );\n\t}\n\t// elsewise, handoff to parent to fire when ready\n\telse {\n\t\tgetChildQueue( this.queue, parent ).push( ractive );\n\t}\n\n\tdelete this.inProcess[ ractive._guid ];\n};\n\nvar configHook = new Hook( 'config' );\nvar initHook = new HookQueue( 'init' );\n\nfunction initialise ( ractive, userOptions, options ) {\n\tObject.keys( ractive.viewmodel.computations ).forEach( function (key) {\n\t\tvar computation = ractive.viewmodel.computations[ key ];\n\n\t\tif ( ractive.viewmodel.value.hasOwnProperty( key ) ) {\n\t\t\tcomputation.set( ractive.viewmodel.value[ key ] );\n\t\t}\n\t});\n\n\t// set up event subscribers\n\tsubscribe( ractive, userOptions, 'on' );\n\n\t// init config from Parent and options\n\tconfig.init( ractive.constructor, ractive, userOptions );\n\n\tconfigHook.fire( ractive );\n\n\t// general config done, set up observers\n\tsubscribe( ractive, userOptions, 'observe' );\n\n\tinitHook.begin( ractive );\n\n\tvar fragment = ractive.fragment = createFragment( ractive, options );\n\tif ( fragment ) { fragment.bind( ractive.viewmodel ); }\n\n\tinitHook.end( ractive );\n\n\tif ( fragment ) {\n\t\t// render automatically ( if `el` is specified )\n\t\tvar el = getElement( ractive.el || ractive.target );\n\t\tif ( el ) {\n\t\t\tvar promise = ractive.render( el, ractive.append );\n\n\t\t\tif ( Ractive.DEBUG_PROMISES ) {\n\t\t\t\tpromise['catch']( function (err) {\n\t\t\t\t\twarnOnceIfDebug( 'Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\\n  Ractive.DEBUG_PROMISES = false;' );\n\t\t\t\t\twarnIfDebug( 'An error happened during rendering', { ractive: ractive });\n\t\t\t\t\tlogIfDebug( err );\n\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction createFragment ( ractive, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( ractive.template ) {\n\t\tvar cssIds;\n\n\t\tif ( options.cssIds || ractive.cssId ) {\n\t\t\tcssIds = options.cssIds ? options.cssIds.slice() : [];\n\n\t\t\tif ( ractive.cssId ) {\n\t\t\t\tcssIds.push( ractive.cssId );\n\t\t\t}\n\t\t}\n\n\t\treturn new Fragment({\n\t\t\towner: ractive,\n\t\t\ttemplate: ractive.template,\n\t\t\tcssIds: cssIds\n\t\t});\n\t}\n}\n\nfunction subscribe ( instance, options, type ) {\n\tvar subs = ( instance.constructor[ (\""_\"" + type) ] || [] ).concat( toPairs( options[ type ] || [] ) );\n\tvar single = type === 'on' ? 'once' : (type + \""Once\"");\n\n\tsubs.forEach( function (ref) {\n\t\tvar target = ref[0];\n\t\tvar config$$1 = ref[1];\n\n\t\tif ( typeof config$$1 === 'function' ) {\n\t\t\tinstance[type]( target, config$$1 );\n\t\t} else if ( typeof config$$1 === 'object' && typeof config$$1.handler === 'function' ) {\n\t\t\tinstance[ config$$1.once ? single : type ]( target, config$$1.handler, config$$1 );\n\t\t}\n\t});\n}\n\nvar renderHook = new Hook( 'render' );\nvar completeHook = new Hook( 'complete' );\n\nfunction render$2 ( ractive, target, anchor, occupants ) {\n\t// set a flag to let any transitions know that this instance is currently rendering\n\tractive.rendering = true;\n\n\tvar promise = runloop.start( ractive, true );\n\trunloop.scheduleTask( function () { return renderHook.fire( ractive ); }, true );\n\n\tif ( ractive.fragment.rendered ) {\n\t\tthrow new Error( 'You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first' );\n\t}\n\n\tif ( ractive.destroyed ) {\n\t\tractive.destroyed = false;\n\t\tractive.fragment = createFragment( ractive ).bind( ractive.viewmodel );\n\t}\n\n\tanchor = getElement( anchor ) || ractive.anchor;\n\n\tractive.el = ractive.target = target;\n\tractive.anchor = anchor;\n\n\t// ensure encapsulated CSS is up-to-date\n\tif ( ractive.cssId ) { applyCSS(); }\n\n\tif ( target ) {\n\t\t( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( ractive );\n\n\t\tif ( anchor ) {\n\t\t\tvar docFrag = doc.createDocumentFragment();\n\t\t\tractive.fragment.render( docFrag );\n\t\t\ttarget.insertBefore( docFrag, anchor );\n\t\t} else {\n\t\t\tractive.fragment.render( target, occupants );\n\t\t}\n\t}\n\n\trunloop.end();\n\tractive.rendering = false;\n\n\treturn promise.then( function () { return completeHook.fire( ractive ); } );\n}\n\nfunction Ractive$render ( target, anchor ) {\n\tif ( this.torndown ) {\n\t\twarnIfDebug( 'ractive.render() was called on a Ractive instance that was already torn down' );\n\t\treturn Promise.resolve();\n\t}\n\n\ttarget = getElement( target ) || this.el;\n\n\tif ( !this.append && target ) {\n\t\t// Teardown any existing instances *before* trying to set up the new one -\n\t\t// avoids certain weird bugs\n\t\tvar others = target.__ractive_instances__;\n\t\tif ( others ) { others.forEach( teardown$1$1 ); }\n\n\t\t// make sure we are the only occupants\n\t\tif ( !this.enhance ) {\n\t\t\ttarget.innerHTML = ''; // TODO is this quicker than removeChild? Initial research inconclusive\n\t\t}\n\t}\n\n\tvar occupants = this.enhance ? toArray( target.childNodes ) : null;\n\tvar promise = render$2( this, target, anchor, occupants );\n\n\tif ( occupants ) {\n\t\twhile ( occupants.length ) { target.removeChild( occupants.pop() ); }\n\t}\n\n\treturn promise;\n}\n\nvar shouldRerender = [ 'template', 'partials', 'components', 'decorators', 'events' ];\n\nvar completeHook$1 = new Hook( 'complete' );\nvar resetHook = new Hook( 'reset' );\nvar renderHook$1 = new Hook( 'render' );\nvar unrenderHook = new Hook( 'unrender' );\n\nfunction Ractive$reset ( data ) {\n\tdata = data || {};\n\n\tif ( typeof data !== 'object' ) {\n\t\tthrow new Error( 'The reset method takes either no arguments, or an object containing new data' );\n\t}\n\n\t// TEMP need to tidy this up\n\tdata = dataConfigurator.init( this.constructor, this, { data: data });\n\n\tvar promise = runloop.start( this, true );\n\n\t// If the root object is wrapped, try and use the wrapper's reset value\n\tvar wrapper = this.viewmodel.wrapper;\n\tif ( wrapper && wrapper.reset ) {\n\t\tif ( wrapper.reset( data ) === false ) {\n\t\t\t// reset was rejected, we need to replace the object\n\t\t\tthis.viewmodel.set( data );\n\t\t}\n\t} else {\n\t\tthis.viewmodel.set( data );\n\t}\n\n\t// reset config items and track if need to rerender\n\tvar changes = config.reset( this );\n\tvar rerender;\n\n\tvar i = changes.length;\n\twhile ( i-- ) {\n\t\tif ( shouldRerender.indexOf( changes[i] ) > -1 ) {\n\t\t\trerender = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( rerender ) {\n\t\tunrenderHook.fire( this );\n\t\tthis.fragment.resetTemplate( this.template );\n\t\trenderHook$1.fire( this );\n\t\tcompleteHook$1.fire( this );\n\t}\n\n\trunloop.end();\n\n\tresetHook.fire( this, data );\n\n\treturn promise;\n}\n\nfunction collect( source, name, attr, dest ) {\n\tsource.forEach( function (item) {\n\t\t// queue to rerender if the item is a partial and the current name matches\n\t\tif ( item.type === PARTIAL && ( item.refName ===  name || item.name === name ) ) {\n\t\t\titem.inAttribute = attr;\n\t\t\tdest.push( item );\n\t\t\treturn; // go no further\n\t\t}\n\n\t\t// if it has a fragment, process its items\n\t\tif ( item.fragment ) {\n\t\t\tcollect( item.fragment.iterations || item.fragment.items, name, attr, dest );\n\t\t}\n\n\t\t// or if it is itself a fragment, process its items\n\t\telse if ( Array.isArray( item.items ) ) {\n\t\t\tcollect( item.items, name, attr, dest );\n\t\t}\n\n\t\t// or if it is a component, step in and process its items\n\t\telse if ( item.type === COMPONENT && item.instance ) {\n\t\t\t// ...unless the partial is shadowed\n\t\t\tif ( item.instance.partials[ name ] ) { return; }\n\t\t\tcollect( item.instance.fragment.items, name, attr, dest );\n\t\t}\n\n\t\t// if the item is an element, process its attributes too\n\t\tif ( item.type === ELEMENT ) {\n\t\t\tif ( Array.isArray( item.attributes ) ) {\n\t\t\t\tcollect( item.attributes, name, true, dest );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction forceResetTemplate$1 ( partial ) {\n\tpartial.forceResetTemplate();\n}\n\nvar resetPartial = function ( name, partial ) {\n\tvar collection = [];\n\tcollect( this.fragment.items, name, false, collection );\n\n\tvar promise = runloop.start( this, true );\n\n\tthis.partials[ name ] = partial;\n\tcollection.forEach( forceResetTemplate$1 );\n\n\trunloop.end();\n\n\treturn promise;\n};\n\n// TODO should resetTemplate be asynchronous? i.e. should it be a case\n// of outro, update template, intro? I reckon probably not, since that\n// could be achieved with unrender-resetTemplate-render. Also, it should\n// conceptually be similar to resetPartial, which couldn't be async\n\nfunction Ractive$resetTemplate ( template ) {\n\ttemplateConfigurator.init( null, this, { template: template });\n\n\tvar transitionsEnabled = this.transitionsEnabled;\n\tthis.transitionsEnabled = false;\n\n\t// Is this is a component, we need to set the `shouldDestroy`\n\t// flag, otherwise it will assume by default that a parent node\n\t// will be detached, and therefore it doesn't need to bother\n\t// detaching its own nodes\n\tvar component = this.component;\n\tif ( component ) { component.shouldDestroy = true; }\n\tthis.unrender();\n\tif ( component ) { component.shouldDestroy = false; }\n\n\tvar promise = runloop.start();\n\n\t// remove existing fragment and create new one\n\tthis.fragment.unbind().unrender( true );\n\n\tthis.fragment = new Fragment({\n\t\ttemplate: this.template,\n\t\troot: this,\n\t\towner: this\n\t});\n\n\tvar docFrag = createDocumentFragment();\n\tthis.fragment.bind( this.viewmodel ).render( docFrag );\n\n\t// if this is a component, its el may not be valid, so find a\n\t// target based on the component container\n\tif ( component && !component.external ) {\n\t\tthis.fragment.findParentNode().insertBefore( docFrag, component.findNextNode() );\n\t} else {\n\t\tthis.el.insertBefore( docFrag, this.anchor );\n\t}\n\n\trunloop.end();\n\n\tthis.transitionsEnabled = transitionsEnabled;\n\n\treturn promise;\n}\n\nvar reverse$1 = makeArrayMethod( 'reverse' ).path;\n\nfunction Ractive$set ( keypath, value ) {\n\tvar ractive = this;\n\n\treturn set$1( ractive, build( ractive, keypath, value ) );\n}\n\nvar shift$1 = makeArrayMethod( 'shift' ).path;\n\nvar sort$1 = makeArrayMethod( 'sort' ).path;\n\nvar splice$1 = makeArrayMethod( 'splice' ).path;\n\nfunction Ractive$subtract ( keypath, d ) {\n\treturn add$1( this, keypath, ( d === undefined ? -1 : -d ) );\n}\n\nfunction Ractive$toggle ( keypath ) {\n\tif ( typeof keypath !== 'string' ) {\n\t\tthrow new TypeError( badArguments );\n\t}\n\n\treturn set$1( this, gather( this, keypath ).map( function (m) { return [ m, !m.get() ]; } ) );\n}\n\nfunction Ractive$toCSS() {\n\tvar cssIds = [ this.cssId ].concat( this.findAllComponents().map( function (c) { return c.cssId; } ) );\n\tvar uniqueCssIds = Object.keys(cssIds.reduce( function ( ids, id ) { return (ids[id] = true, ids); }, {}));\n\treturn getCSS( uniqueCssIds );\n}\n\nfunction Ractive$toHTML () {\n\treturn this.fragment.toString( true );\n}\n\nfunction toText () {\n\treturn this.fragment.toString( false );\n}\n\nfunction Ractive$transition ( name, node, params ) {\n\n\tif ( node instanceof HTMLElement ) {\n\t\t// good to go\n\t}\n\telse if ( isObject( node ) ) {\n\t\t// omitted, use event node\n\t\tparams = node;\n\t}\n\n\t// if we allow query selector, then it won't work\n\t// simple params like \""fast\""\n\n\t// else if ( typeof node === 'string' ) {\n\t// \t// query selector\n\t// \tnode = this.find( node )\n\t// }\n\n\tnode = node || this.event.node;\n\n\tif ( !node || !node._ractive ) {\n\t\tfatal( (\""No node was supplied for transition \"" + name) );\n\t}\n\n\tparams = params || {};\n\tvar owner = node._ractive.proxy;\n\tvar transition = new Transition({ owner: owner, parentFragment: owner.parentFragment, name: name, params: params });\n\ttransition.bind();\n\n\tvar promise = runloop.start( this, true );\n\trunloop.registerTransition( transition );\n\trunloop.end();\n\n\tpromise.then( function () { return transition.unbind(); } );\n\treturn promise;\n}\n\nfunction unlink$2( here ) {\n\tvar promise = runloop.start();\n\tthis.viewmodel.joinAll( splitKeypath( here ), { lastLink: false } ).unlink();\n\trunloop.end();\n\treturn promise;\n}\n\nvar unrenderHook$1 = new Hook( 'unrender' );\n\nfunction Ractive$unrender () {\n\tif ( !this.fragment.rendered ) {\n\t\twarnIfDebug( 'ractive.unrender() was called on a Ractive instance that was not rendered' );\n\t\treturn Promise.resolve();\n\t}\n\n\tthis.unrendering = true;\n\tvar promise = runloop.start( this, true );\n\n\t// If this is a component, and the component isn't marked for destruction,\n\t// don't detach nodes from the DOM unnecessarily\n\tvar shouldDestroy = !this.component || ( this.component.anchor || {} ).shouldDestroy || this.component.shouldDestroy || this.shouldDestroy;\n\tthis.fragment.unrender( shouldDestroy );\n\tif ( shouldDestroy ) { this.destroyed = true; }\n\n\tremoveFromArray( this.el.__ractive_instances__, this );\n\n\tunrenderHook$1.fire( this );\n\n\trunloop.end();\n\tthis.unrendering = false;\n\n\treturn promise;\n}\n\nvar unshift$1 = makeArrayMethod( 'unshift' ).path;\n\nfunction Ractive$updateModel ( keypath, cascade ) {\n\tvar promise = runloop.start( this, true );\n\n\tif ( !keypath ) {\n\t\tthis.viewmodel.updateFromBindings( true );\n\t} else {\n\t\tthis.viewmodel.joinAll( splitKeypath( keypath ) ).updateFromBindings( cascade !== false );\n\t}\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nvar RactiveProto = {\n\tadd: Ractive$add,\n\tanimate: Ractive$animate,\n\tattachChild: attachChild,\n\tdetach: Ractive$detach,\n\tdetachChild: detachChild,\n\tfind: Ractive$find,\n\tfindAll: Ractive$findAll,\n\tfindAllComponents: Ractive$findAllComponents,\n\tfindComponent: Ractive$findComponent,\n\tfindContainer: Ractive$findContainer,\n\tfindParent: Ractive$findParent,\n\tfire: Ractive$fire,\n\tget: Ractive$get,\n\tgetNodeInfo: getNodeInfo,\n\tinsert: Ractive$insert,\n\tlink: link$2,\n\tmerge: thisRactive$merge,\n\tobserve: observe$1,\n\tobserveOnce: observeOnce$1,\n\toff: Ractive$off,\n\ton: Ractive$on,\n\tonce: Ractive$once,\n\tpop: pop$1,\n\tpush: push$1,\n\treadLink: readLink$1,\n\trender: Ractive$render,\n\treset: Ractive$reset,\n\tresetPartial: resetPartial,\n\tresetTemplate: Ractive$resetTemplate,\n\treverse: reverse$1,\n\tset: Ractive$set,\n\tshift: shift$1,\n\tsort: sort$1,\n\tsplice: splice$1,\n\tsubtract: Ractive$subtract,\n\tteardown: Ractive$teardown,\n\ttoggle: Ractive$toggle,\n\ttoCSS: Ractive$toCSS,\n\ttoCss: Ractive$toCSS,\n\ttoHTML: Ractive$toHTML,\n\ttoHtml: Ractive$toHTML,\n\ttoText: toText,\n\ttransition: Ractive$transition,\n\tunlink: unlink$2,\n\tunrender: Ractive$unrender,\n\tunshift: unshift$1,\n\tupdate: Ractive$update,\n\tupdateModel: Ractive$updateModel\n};\n\nvar wrap$2 = function ( method, superMethod, force ) {\n\n\tif ( force || needsSuper( method, superMethod ) )  {\n\n\t\treturn function () {\n\n\t\t\tvar hasSuper = ( '_super' in this );\n\t\t\tvar _super = this._super;\n\n\t\t\tthis._super = superMethod;\n\n\t\t\tvar result = method.apply( this, arguments );\n\n\t\t\tif ( hasSuper ) {\n\t\t\t\tthis._super = _super;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\telse {\n\t\treturn method;\n\t}\n};\n\nfunction needsSuper ( method, superMethod ) {\n\treturn typeof superMethod === 'function' && /_super/.test( method );\n}\n\nfunction unwrap ( Child ) {\n\tvar options = {};\n\n\twhile ( Child ) {\n\t\taddRegistries( Child, options );\n\t\taddOtherOptions( Child, options );\n\n\t\tif ( Child._Parent !== Ractive ) {\n\t\t\tChild = Child._Parent;\n\t\t} else {\n\t\t\tChild = false;\n\t\t}\n\t}\n\n\treturn options;\n}\n\nfunction addRegistries ( Child, options ) {\n\tregistries.forEach( function (r) {\n\t\taddRegistry(\n\t\t\tr.useDefaults ? Child.prototype : Child,\n\t\t\toptions, r.name );\n\t});\n}\n\nfunction addRegistry ( target, options, name ) {\n\tvar registry;\n\tvar keys = Object.keys( target[ name ] );\n\n\tif ( !keys.length ) { return; }\n\n\tif ( !( registry = options[ name ] ) ) {\n\t\tregistry = options[ name ] = {};\n\t}\n\n\tkeys\n\t\t.filter( function (key) { return !( key in registry ); } )\n\t\t.forEach( function (key) { return registry[ key ] = target[ name ][ key ]; } );\n}\n\nfunction addOtherOptions ( Child, options ) {\n\tObject.keys( Child.prototype ).forEach( function (key) {\n\t\tif ( key === 'computed' ) { return; }\n\n\t\tvar value = Child.prototype[ key ];\n\n\t\tif ( !( key in options ) ) {\n\t\t\toptions[ key ] = value._method ? value._method : value;\n\t\t}\n\n\t\t// is it a wrapped function?\n\t\telse if ( typeof options[ key ] === 'function'\n\t\t\t\t&& typeof value === 'function'\n\t\t\t\t&& options[ key ]._method ) {\n\n\t\t\tvar needsSuper = value._method;\n\n\t\t\tif ( needsSuper ) { value = value._method; }\n\n\t\t\t// rewrap bound directly to parent fn\n\t\t\tvar result = wrap$2( options[ key ]._method, value );\n\n\t\t\tif ( needsSuper ) { result._method = result; }\n\n\t\t\toptions[ key ] = result;\n\t\t}\n\t});\n}\n\nfunction extend$2 () {\n\tvar options = [], len = arguments.length;\n\twhile ( len-- ) options[ len ] = arguments[ len ];\n\n\tif( !options.length ) {\n\t\treturn extendOne( this );\n\t} else {\n\t\treturn options.reduce( extendOne, this );\n\t}\n}\n\nfunction extendOne ( Parent, options ) {\n\tif ( options === void 0 ) options = {};\n\n\t// if we're extending with another Ractive instance...\n\t//\n\t//   var Human = Ractive.extend(...), Spider = Ractive.extend(...);\n\t//   var Spiderman = Human.extend( Spider );\n\t//\n\t// ...inherit prototype methods and default options as well\n\tif ( options.prototype instanceof Ractive ) {\n\t\toptions = unwrap( options );\n\t}\n\n\tvar Child = function ( options ) {\n\t\tif ( !( this instanceof Child ) ) { return new Child( options ); }\n\n\t\tconstruct( this, options || {} );\n\t\tinitialise( this, options || {}, {} );\n\t};\n\n\tvar proto = Object.create( Parent.prototype );\n\tproto.constructor = Child;\n\n\t// Static properties\n\tObject.defineProperties( Child, {\n\t\t// alias prototype as defaults\n\t\tdefaults: { value: proto },\n\n\t\t// extendable\n\t\textend: { value: extend$2, writable: true, configurable: true },\n\n\t\t// Parent - for IE8, can't use Object.getPrototypeOf\n\t\t_Parent: { value: Parent }\n\t});\n\n\t// extend configuration\n\tconfig.extend( Parent, proto, options );\n\n\t// store event and observer registries on the constructor when extending\n\tChild._on = ( Parent._on || [] ).concat( toPairs( options.on ) );\n\tChild._observe = ( Parent._observe || [] ).concat( toPairs( options.observe ) );\n\n\t// attribute defs are not inherited, but they need to be stored\n\tif ( options.attributes ) {\n\t\tvar attrs;\n\n\t\t// allow an array of optional props or an object with arrays for optional and required props\n\t\tif ( Array.isArray( options.attributes ) ) {\n\t\t\tattrs = { optional: options.attributes, required: [] };\n\t\t} else {\n\t\t\tattrs = options.attributes;\n\t\t}\n\n\t\t// make sure the requisite keys actually store arrays\n\t\tif ( !Array.isArray( attrs.required ) ) { attrs.required = []; }\n\t\tif ( !Array.isArray( attrs.optional ) ) { attrs.optional = []; }\n\n\t\tChild.attributes = attrs;\n\t}\n\n\tdataConfigurator.extend( Parent, proto, options );\n\n\tif ( options.computed ) {\n\t\tproto.computed = Object.assign( Object.create( Parent.prototype.computed ), options.computed );\n\t}\n\n\tChild.prototype = proto;\n\n\treturn Child;\n}\n\nfunction joinKeys () {\n\tvar keys = [], len = arguments.length;\n\twhile ( len-- ) keys[ len ] = arguments[ len ];\n\n\treturn keys.map( escapeKey ).join( '.' );\n}\n\nfunction splitKeypath$1 ( keypath ) {\n\treturn splitKeypath( keypath ).map( unescapeKey );\n}\n\nfunction Ractive ( options ) {\n\tif ( !( this instanceof Ractive ) ) { return new Ractive( options ); }\n\n\tconstruct( this, options || {} );\n\tinitialise( this, options || {}, {} );\n}\n\n// check to see if we're being asked to force Ractive as a global for some weird environments\nif ( win && !win.Ractive ) {\n\tvar opts = '';\n\tvar script = document.currentScript || document.querySelector( 'script[data-ractive-options]' );\n\n\tif ( script ) {\n\t\topts = script.getAttribute( 'data-ractive-options' ) || '';\n\t}\n\n\tif ( ~opts.indexOf( 'ForceGlobal' ) ) {\n\t\twin.Ractive = Ractive;\n\t}\n}\n\nObject.assign( Ractive.prototype, RactiveProto, defaults );\nRactive.prototype.constructor = Ractive;\n\n// alias prototype as `defaults`\nRactive.defaults = Ractive.prototype;\n\n// static properties\nObject.defineProperties( Ractive, {\n\n\t// debug flag\n\tDEBUG:          { writable: true, value: true },\n\tDEBUG_PROMISES: { writable: true, value: true },\n\n\t// static methods:\n\textend:         { value: extend$2 },\n\tescapeKey:      { value: escapeKey },\n\tgetNodeInfo:    { value: staticInfo },\n\tjoinKeys:       { value: joinKeys },\n\tparse:          { value: parse$1$1 },\n\tsplitKeypath:   { value: splitKeypath$1 },\n\tunescapeKey:    { value: unescapeKey },\n\tgetCSS:         { value: getCSS },\n\n\t// support\n\tenhance:        { writable: true, value: false },\n\tsvg:            { value: svg },\n\tmagic:          { value: magic },\n\n\t// version\n\tVERSION:        { value: '0.9.0-edge-8beb8314d65f338223dfd43fbe60d6494683bd9f' },\n\n\t// plugins\n\tadaptors:       { writable: true, value: {} },\n\tcomponents:     { writable: true, value: {} },\n\tdecorators:     { writable: true, value: {} },\n\teasing:         { writable: true, value: easing },\n\tevents:         { writable: true, value: {} },\n\tinterpolators:  { writable: true, value: interpolators },\n\tpartials:       { writable: true, value: {} },\n\ttransitions:    { writable: true, value: {} }\n});\n\nreturn Ractive;\n\n})));\n""],""names"":[""value"",""this"",""model"",""isRoot"",""get"",""undefined"",""templateSectionType"",""SECTION_IF_WITH"",""isEmpty"",""Section"",""prototype"",""rebind"",""next"",""previous"",""safe"",""MustacheContainer$$1"",""call"",""fragment"",""sectionType"",""SECTION_IF"",""SECTION_UNLESS"",""rebinding"",""render"",""target"",""occupants"",""rendered"",""shuffle"",""newIndices"",""SECTION_EACH"",""unbind"",""unrender"",""shouldDestroy"",""update"",""dirty"",""context"",""siblingFalsey"",""subordinate"",""sibling"",""isTruthy"",""lastType"",""getType"",""template"",""i"",""newFragment"",""fragmentShouldExist"",""SECTION_WITH"",""RepeatedFragment"",""owner"",""f"",""indexRef"",""bind"",""Fragment"",""parentNode"",""parentFragment"",""findParentNode"",""anchor"",""findNextNode"",""docFrag"",""createDocumentFragment"",""insertBefore"",""nextSibling"",""MustacheContainer"",""Select"",""Element$$1"",""options"",""__proto__"",""Object"",""create"",""constructor"",""foundNode"",""node"",""binding"",""selectedOptions"",""getSelectedOptions"",""length"",""sync"",""defaultSelected"",""selected"",""this$1"",""selectNode"",""toArray"",""forEach"",""o"",""indexOf"",""setFromNode"",""selectValue"",""getAttribute"",""isMultiple"",""array"",""Array"",""isArray"",""optionWasSelected"",""optionValue"",""_ractive"",""shouldSelect"",""valueContains"",""forceUpdate"",""Element"",""Textarea"",""Input$$1"",""deferContent"",""attributeByName"",""isBindable"",""attributes"",""push"",""createItem"",""t"",""ATTRIBUTE"",""n"",""cssIds"",""bubble"",""runloop"",""scheduleTask"",""toString"",""Input"",""Text"",""Item$$1"",""type"",""TEXT"",""detach"",""detachNode"",""firstNode"",""inAttributes"",""nodeType"",""shift"",""nodeValue"",""doc"",""createTextNode"",""appendChild"",""escape"",""escapeHtml"",""valueOf"",""Item"",""proto$2"",""noop"",""prefix"",""camelizeHyphenated"",""hyphenatedStr"",""replace"",""match"",""$1"",""toUpperCase"",""isClient"",""prefixCache"",""testStyle"",""createElement"",""style"",""prop"",""capped"",""charAt"",""substring"",""vendors"",""vendor"",""visible"",""prefix$1"",""hidden"",""prefix$2"",""i$1"",""addEventListener"",""onChange"",""onHide"",""onShow"",""win"",""createTransitions"",""unprefixPattern"",""RegExp"",""join"",""unprefix"",""vendorPattern"",""hyphenate"",""str"",""test"",""toLowerCase"",""TRANSITION$1"",""TRANSITIONEND"",""CSS_TRANSITIONS_ENABLED"",""TRANSITION_DURATION"",""TRANSITION_PROPERTY"",""TRANSITION_TIMING_FUNCTION"",""testStyle$1"",""linear$2"",""x"",""canUseCssTransitions"",""cannotUseCssTransitions"",""transition"",""webkitTransition"",""to"",""changedProperties"",""resolve"",""setTimeout"",""transitionDone"",""clearTimeout"",""cssTimeout"",""checkComplete"",""jsTransitionsComplete"",""cssTransitionsComplete"",""unregisterCompleteHandler"",""ractive"",""fire"",""name"",""isIntro"",""transitionEndHandler"",""event"",""index"",""propertyName"",""splice"",""cssTransitionsDone"",""property"",""duration"",""timing"",""removeEventListener"",""hashPrefix"",""namespaceURI"",""tagName"",""map"",""easingName"",""easing"",""cssTiming"",""delay"",""registerCompleteHandler"",""hash"",""originalValue"",""suffix"",""interpolator"",""propertiesToTransitionInJs"",""getStyle"",""warnIfDebug"",""exec"",""interpolate"",""parseFloat"",""warnOnceIfDebug"",""missingPlugin"",""Ticker"",""step"",""pos"",""complete"",""createTransitions$1"",""getComputedStyle"",""resolved$1"",""Promise"",""names"",""t0"",""t1"",""t2"",""Transition"",""findElement"",""element"",""onComplete"",""animateStyle"",""arguments"",""Error"",""setStyle"",""fulfil"",""propertyNames"",""keys"",""computedStyle"",""current"",""v"",""intro"",""outro"",""eventName"",""params"",""_fn"",""findInViewHierarchy"",""setupArgsFn"",""getParams"",""fn"",""values"",""resolveArgs"",""apply"",""props"",""styles"",""value$1"",""processParams"",""defaults"",""assign"",""addToArray"",""hasOwnProperty"",""shouldFire"",""transitionsEnabled"",""rendering"",""nearestProp"",""unrendering"",""parent"",""nested"",""el"",""starting"",""start"",""completed"",""originalStyle"",""args"",""noReset"",""resetStyle"",""_manager"",""remove"",""promise"",""concat"",""then"",""unbinding"",""removeFromArray"",""proto$3"",""destroyed"",""ieBug"",""ieBlacklist"",""elementCache"",""innerHTML"",""err"",""TABLE"",""THEAD"",""TBODY"",""TR"",""SELECT"",""insertHtml"",""html$$1"",""nodes"",""container"",""wrapper"",""selectedOption"",""querySelector"",""selectedIndex"",""svg$1"",""textContent"",""child"",""firstChild"",""Triple"",""Mustache$$1"",""find"",""selector"",""len"",""matches"",""queryResult"",""findAll"",""query"",""add"",""queryAllResult"",""querySelectorAll"",""numNodes"",""j"",""findComponent"",""html"",""decodeCharacterReferences"",""Mustache"",""constructors"",""ALIAS"",""Alias"",""ANCHOR"",""Component"",""DOCTYPE"",""Doctype"",""INTERPOLATOR"",""Interpolator"",""PARTIAL"",""Partial"",""SECTION"",""TRIPLE"",""YIELDER"",""Attribute"",""BINDING_FLAG"",""BindingFlag"",""DECORATOR"",""Decorator"",""EVENT"",""EventDirective"",""TRANSITION"",""specialElements"",""doctype"",""form"",""Form"",""input"",""option"",""Option"",""select"",""textarea"",""componentParent"",""component"",""delegate"",""dirtyValue"",""createItems"",""items"",""bind$1$1"",""bound"",""addFragment"",""max"",""destroyed$1$1"",""item"",""findMap"",""findAllComponents"",""findContext"",""viewmodel"",""ELEMENT"",""containerFragment"",""findRepeatingFragment"",""isIteration"",""skipParent"",""resetTemplate"",""wasBound"",""wasRendered"",""shuffled"",""shuffled$1$1"",""toEscapedString"",""toString$2"",""unbind$1$1"",""unrenderAndDestroy$1"",""unrender$1$1"",""updating"",""addFragmentToRoot"",""update$1$1"",""source"",""processItems"",""_guid"",""parsed"",""parseJSON"",""HookQueue"",""hook"",""Hook"",""inProcess"",""queue"",""begin"",""end"",""getChildQueue"",""fire$1"",""configHook"",""initHook"",""renderHook"",""completeHook"",""shouldRerender"",""completeHook$1"",""resetHook"",""renderHook$1"",""unrenderHook"",""resetPartial"",""partial"",""collection"",""collect"",""partials"",""forceResetTemplate$1"",""reverse$1"",""makeArrayMethod"",""path"",""shift$1"",""sort$1"",""splice$1"",""unrenderHook$1"",""unshift$1"",""RactiveProto"",""Ractive$add"",""animate"",""Ractive$animate"",""attachChild"",""Ractive$detach"",""detachChild"",""Ractive$find"",""Ractive$findAll"",""Ractive$findAllComponents"",""Ractive$findComponent"",""findContainer"",""Ractive$findContainer"",""findParent"",""Ractive$findParent"",""Ractive$fire"",""Ractive$get"",""getNodeInfo"",""insert"",""Ractive$insert"",""link"",""link$2"",""merge"",""thisRactive$merge"",""observe"",""observe$1"",""observeOnce"",""observeOnce$1"",""off"",""Ractive$off"",""on"",""Ractive$on"",""once"",""Ractive$once"",""pop"",""pop$1"",""push$1"",""readLink"",""readLink$1"",""Ractive$render"",""reset"",""Ractive$reset"",""Ractive$resetTemplate"",""reverse"",""set"",""Ractive$set"",""sort"",""subtract"",""Ractive$subtract"",""teardown"",""Ractive$teardown"",""toggle"",""Ractive$toggle"",""toCSS"",""Ractive$toCSS"",""toCss"",""toHTML"",""Ractive$toHTML"",""toHtml"",""toText"",""Ractive$transition"",""unlink"",""unlink$2"",""Ractive$unrender"",""unshift"",""Ractive$update"",""updateModel"",""Ractive$updateModel"",""wrap$2"",""method"",""superMethod"",""force"",""needsSuper"",""hasSuper"",""_super"",""result"",""Ractive"",""opts"",""script"",""document"",""currentScript"",""defineProperties"",""DEBUG"",""writable"",""DEBUG_PROMISES"",""extend"",""extend$2"",""escapeKey"",""staticInfo"",""joinKeys"",""parse"",""parse$1$1"",""splitKeypath"",""splitKeypath$1"",""unescapeKey"",""getCSS"",""enhance"",""svg"",""magic"",""VERSION"",""adaptors"",""components"",""decorators"",""events"",""interpolators"",""transitions"",""lazy"",""handler"",""attachEvent"",""handleBlur"",""GenericBinding"",""handleDomEvent"",""Binding"",""FileBinding"",""GenericBinding$$1"",""getInitialValue"",""getValue"",""files"",""MultipleSelectBinding"",""Binding$$1"",""filter"",""selectedValues"",""handleChange"",""attribute"",""previousValue"",""arrayContentsMatch"",""NumericBinding"",""isNaN"",""siblings"",""RadioBinding"",""getSiblings"",""checked"",""root"",""RadioNameBinding"",""group"",""getBindingGroup"",""getValue$2"",""nameAttributeBinding"",""getKeypath"",""getKeypathModel"",""register"",""lastVal"",""setting"",""lastValue"",""unregister"",""SingleSelectBinding"",""locked"",""disabled"",""DOMEvent"",""fatal"",""listen"",""directive"",""original"",""unlisten"",""CustomEvent"",""eventPlugin"",""RactiveEvent"",""instance"",""slice"",""cancel"",""specialPattern"",""dollarArgsPattern"",""DelegateProxy"",""passedArgs"",""ev"",""currentTarget"",""proxy"",""COMPONENT"",""delegates"",""models"",""action"",""e"",""addHelpers"",""specialRef"",""ref"",""specialMatch"",""special"",""substr"",""dollarMatch"",""obj"",""wrapperValue"",""oldEvent"",""preventDefault"",""stopPropagation"",""fireEvent"",""endsWithSemi"",""ContainerItem$$1"",""liveQueries"",""isVoid"",""voidElementNames"",""leftovers"",""m"",""DELEGATE_FLAG"",""ConditionalAttribute"",""sortAttributes"",""recreateTwowayBinding"",""createTwowayBinding"",""twoway"",""selectBinding"",""matches$$1"",""live"",""removeFromQuery"",""namespace"",""getNamespace"",""existing"",""nodeName"",""defineProperty"",""setAttribute"",""isOutro"",""registerTransition"",""children"",""childNodes"",""wasUndefined"",""name$1"",""removeAttribute"",""render$1$1"",""updateLiveQueries"",""makeDirty$2"",""attrs"",""stringifyAttribute"",""isSelected"",""inputIsCheckedRadio"",""cls"",""attr"",""safeAttributeString"",""getString"",""inlineClass"",""detachWhenReady"",""ContainerItem"",""toFront"",""formBindings"",""handleReset"",""isStatic"",""s"",""resolve$1"",""rebindMatch"",""addShuffleRegister"",""proto$1"",""mustache"",""safeToStringValue"",""string"",""data"",""defaultValue"",""specials$1"",""true"",""false"",""null"",""specialsPattern"",""numberPattern$1"",""placeholderPattern"",""placeholderAtStartPattern"",""onlyWhitespace"",""JsonParser"",""Parser"",""init"",""allowWhitespace"",""postProcess"",""leftover"",""converters"",""parser"",""placeholder"",""matchPattern"",""number"",""stringLiteral"",""readStringLiteral"",""matchString"",""pair"",""getKeyValuePair"",""key"",""valueToken"",""read"",""Mapping"",""joinKey"",""createMapping"",""boundFragment"",""updateDelegate"",""a"",""selectedAttribute"",""yielder"",""r"",""rx"",""refName"",""templateObj"",""getPartialTemplate"",""named"",""setTemplate"",""parsePartial"",""partialTemplate"",""c"",""k"",""z"",""aliases"",""resolveAliases"",""forceResetTemplate"",""inAttribute"",""doInAttributes"",""iterations"",""keyRef"",""pendingNewIndices"",""previousIterations"",""createIteration"",""isObject"",""refs"",""split"",""bubbled"",""iteration"",""newIndex"",""oldIndex"",""unrenderAndDestroy"",""updatePostShuffle"",""toRemove"",""oldKeys"",""wasArray"",""fragment$1"",""newLength"",""indices"",""oldLen"",""removed"",""frag"",""contiguous"",""startIndex"",""l"",""childByKey"",""ComputationChild"",""Model"",""Computation"",""Model$$1"",""signature"",""isExpression"",""isReadonly"",""setter"",""computationContext"",""dependencies"",""deps"",""shouldCapture"",""capture"",""old"",""isEqual"",""notifyUpstream"",""newWrapperValue"",""adapt"",""maybeBind"",""startCapturing"",""getter"",""message"",""hasConsole"",""console"",""groupCollapsed"",""sig"",""error"",""getterUseStack"",""stack"",""groupEnd"",""stopCapturing"",""setDependencies"",""mark"",""model$1"",""computations"",""prototype$1"",""ExpressionProxy"",""getFunction"",""resolveReference"",""actuallyChanged"",""keypath"",""d"",""idx"",""retrieve"",""dep"",""computation"",""ReferenceExpressionChild"",""applyValue"",""base"",""joinAll"",""ReferenceExpressionProxy"",""intermediary"",""members"",""addShuffleTask"",""REFERENCE"",""String"",""unregisterTwowayBinding"",""registerTwowayBinding"",""keypathModel"",""bindings"",""oneway"",""findBoundValue"",""handleChange$1$1"",""links"",""marked"",""mark$1$1"",""space"",""hyphenateCamel"",""camelCaseStr"",""textTypes"",""accept-charset"",""accesskey"",""bgcolor"",""class"",""codebase"",""colspan"",""contenteditable"",""datetime"",""dirname"",""for"",""http-equiv"",""ismap"",""maxlength"",""novalidate"",""pubdate"",""readonly"",""rowspan"",""tabindex"",""usemap"",""div$1"",""isSvg"",""parseAttributes"",""notIn"",""booleanAttributes"",""namespaces"",""useProperty"",""isTwoway"",""isBoolean"",""lookupNamespace"",""getUpdateDelegate"",""twowayBinding"",""flag"",""set$3"",""processWrapper"",""methodName"",""__model"",""mutatorMethods"",""patchedArrayProto"",""getNewIndices"",""wrappers"",""configurable"",""patchArrayMethods"",""unpatchArrayMethods"",""unpatch"",""patch"",""errorMessage$1"",""arrayAdaptor"",""object"",""wrap"",""ArrayWrapper"",""instances"",""storage"",""magicAdaptor"",""MagicWrapper"",""magicAdaptor$1"",""originalDescriptors"",""originalDescriptor"",""getOwnPropertyDescriptor"",""childKeypath"",""descriptor"",""createOrWrapDescriptor"",""__magic"",""revert"",""dependants"",""MagicArrayWrapper"",""magicWrapper"",""arrayWrapper"",""magicArrayAdaptor"",""RactiveModel"",""isLink"",""initLink"",""hasProp$1"",""RootModel"",""attached"",""attachImplicits"",""compute"",""createLink"",""targetPath"",""detached"",""detachImplicits"",""virtual"",""getVirtual"",""getRactiveModel"",""ractiveModel"",""getValueChildren"",""_link"",""has"",""unescapedKey"",""Function"",""GlobalModel"",""SharedModel$1"",""localKey"",""origin"",""local"",""shouldTeardown"",""constructHook"",""registryNames$1"",""uid"",""teardownHook"",""destructHook"",""ComponentConstructor"",""isAnchor"",""p"",""content"",""_partials"",""addChild"",""addChild$1"",""removeChild"",""removeChild$1"",""construct"",""_inlinePartials"",""eventHandlers"",""initialise"",""_query"",""checking"",""checkAnchors"",""render$2"",""updateLiveQueries$1"",""makeDirty$1"",""teardown$2"",""unrenderItem"",""missingDecorator"",""warnOnce"",""teardownArgsFn"",""proto"",""parentForm"",""resetValue"",""CheckboxBinding"",""BindingGroup"",""push$2"",""CheckboxNameBinding"",""checkboxName"",""getValue$1$1"",""noInitialValue"",""existingValue"",""bindingValue"",""arrayContains"",""isChecked"",""valueSoFar"",""ContentEditableBinding"",""timeout"",""isNumeric"",""handleDelay"",""rootLink"",""relinked"",""LinkModel"",""boundValue"",""shuffling"",""shuffle$1$1"",""teardown$1$1"",""ModelBase"",""lnk"",""implicit"",""sourcePath"",""relinking"",""fireShuffleTasks"",""markedAll"",""ln"",""tickers"",""running"",""performance"",""now"",""requestAnimationFrame"",""tick"",""elapsed"",""eased"",""stop"",""abort"",""prefixers"",""ModelBase$$1"",""ticker"",""rewrap"",""parentValue"",""createBranch"",""adaptor"",""getPrefixer"",""from"",""fulfilPromise"",""notify"",""isObjectLike"",""branch"",""unwrap"",""shouldBind"",""KeypathModel"",""lastLink"",""comparator"",""oldArray"",""newArray"",""recreateArray"",""oldLength"",""usedIndices"",""firstUnusedIndex"",""SharedModel"",""global"",""window"",""arrayProto"",""mdl"",""result$1"",""promise$1"",""comparators"",""updateHook"",""modelPush"",""modelPop"",""modelShift"",""modelUnshift"",""modelSort"",""modelSplice"",""modelReverse"",""insertHook"",""Observer"",""callback"",""resolved"",""oldContext"",""dispatch"",""oldValue"",""newValue"",""cancelled"",""resolver"",""_observers"",""strict"",""addObserver"",""defer"",""star$1"",""PatternObserver"",""baseModel"",""pattern"",""baseKeypath"",""recursive"",""oldValues"",""newValues"",""changed"",""findMatches"",""registerPatternObserver"",""unregisterPatternObserver"",""newKeys"",""wildcards"",""touchedFrom"",""count"",""ok"",""check"",""ArrayObserver"",""pending"",""sliced"",""negativeOne"",""inserted"",""deleted"",""hadIndex"",""onceOptions"",""trim"",""notEmptyString"",""PREFIX"",""styleDefinitions"",""isDirty"",""styleElement"",""useCssText"",""getElementsByTagName"",""styleSheet"",""adaptConfigurator"",""Parent"",""combine"",""ensureArray"",""remove$1"",""cleanCss"",""css"",""reconstruct"",""selectorsPattern"",""commentsPattern"",""selectorUnitPattern"",""excludePattern"",""dataRvcGuidPattern"",""cssConfigurator"",""id"",""cssId"",""uuid"",""noCssTransform"",""transformCss"",""addCSS"",""dataConfigurator"",""combine$1"",""bind$2"",""_r_unbound"",""TEMPLATE_VERSION"",""functions"",""leadingWhitespace"",""ParseError"",""lineStart"",""lines"",""lineEnds"",""line"",""lineEnd"",""remaining"",""getContextMessage"",""getLinePos"",""lineNum"",""columnNum"",""contextLines"",""contextUp"",""contextDown"",""numTabs"",""annotation"",""char"",""msg"",""character"",""shortMessage"",""nextChar"",""Child"",""readTypeOf"",""INVERTED"",""CLOSING"",""COMMENT"",""DELIMCHANGE"",""CLOSING_TAG"",""INLINE_PARTIAL"",""NUMBER_LITERAL"",""STRING_LITERAL"",""ARRAY_LITERAL"",""OBJECT_LITERAL"",""BOOLEAN_LITERAL"",""REGEXP_LITERAL"",""GLOBAL"",""KEY_VALUE_PAIR"",""REFINEMENT"",""MEMBER"",""PREFIX_OPERATOR"",""BRACKETED"",""CONDITIONAL"",""INFIX_OPERATOR"",""INVOCATION"",""ELSE"",""ELSEIF"",""delimiterChangePattern"",""whitespacePattern"",""regexpPattern"",""pattern$1"",""regExpCache"",""getLowestIndex"",""haystack"",""needles"",""search"",""escapeRegExp"",""htmlEntities"",""quot"",""amp"",""apos"",""lt"",""gt"",""nbsp"",""iexcl"",""cent"",""pound"",""curren"",""yen"",""brvbar"",""sect"",""uml"",""copy"",""ordf"",""laquo"",""not"",""shy"",""reg"",""macr"",""deg"",""plusmn"",""sup2"",""sup3"",""acute"",""micro"",""para"",""middot"",""cedil"",""sup1"",""ordm"",""raquo"",""frac14"",""frac12"",""frac34"",""iquest"",""Agrave"",""Aacute"",""Acirc"",""Atilde"",""Auml"",""Aring"",""AElig"",""Ccedil"",""Egrave"",""Eacute"",""Ecirc"",""Euml"",""Igrave"",""Iacute"",""Icirc"",""Iuml"",""ETH"",""Ntilde"",""Ograve"",""Oacute"",""Ocirc"",""Otilde"",""Ouml"",""times"",""Oslash"",""Ugrave"",""Uacute"",""Ucirc"",""Uuml"",""Yacute"",""THORN"",""szlig"",""agrave"",""aacute"",""acirc"",""atilde"",""auml"",""aring"",""aelig"",""ccedil"",""egrave"",""eacute"",""ecirc"",""euml"",""igrave"",""iacute"",""icirc"",""iuml"",""eth"",""ntilde"",""ograve"",""oacute"",""ocirc"",""otilde"",""ouml"",""divide"",""oslash"",""ugrave"",""uacute"",""ucirc"",""uuml"",""yacute"",""thorn"",""yuml"",""OElig"",""oelig"",""Scaron"",""scaron"",""Yuml"",""fnof"",""circ"",""tilde"",""Alpha"",""Beta"",""Gamma"",""Delta"",""Epsilon"",""Zeta"",""Eta"",""Theta"",""Iota"",""Kappa"",""Lambda"",""Mu"",""Nu"",""Xi"",""Omicron"",""Pi"",""Rho"",""Sigma"",""Tau"",""Upsilon"",""Phi"",""Chi"",""Psi"",""Omega"",""alpha"",""beta"",""gamma"",""delta"",""epsilon"",""zeta"",""eta"",""theta"",""iota"",""kappa"",""lambda"",""mu"",""nu"",""xi"",""omicron"",""pi"",""rho"",""sigmaf"",""sigma"",""tau"",""upsilon"",""phi"",""chi"",""psi"",""omega"",""thetasym"",""upsih"",""piv"",""ensp"",""emsp"",""thinsp"",""zwnj"",""zwj"",""lrm"",""rlm"",""ndash"",""mdash"",""lsquo"",""rsquo"",""sbquo"",""ldquo"",""rdquo"",""bdquo"",""dagger"",""Dagger"",""bull"",""hellip"",""permil"",""prime"",""Prime"",""lsaquo"",""rsaquo"",""oline"",""frasl"",""euro"",""image"",""weierp"",""real"",""trade"",""alefsym"",""larr"",""uarr"",""rarr"",""darr"",""harr"",""crarr"",""lArr"",""uArr"",""rArr"",""dArr"",""hArr"",""forall"",""part"",""exist"",""empty"",""nabla"",""isin"",""notin"",""ni"",""prod"",""sum"",""minus"",""lowast"",""radic"",""infin"",""ang"",""and"",""or"",""cap"",""cup"",""int"",""there4"",""sim"",""cong"",""asymp"",""ne"",""equiv"",""le"",""ge"",""sub"",""sup"",""nsub"",""sube"",""supe"",""oplus"",""otimes"",""perp"",""sdot"",""lceil"",""rceil"",""lfloor"",""rfloor"",""lang"",""rang"",""loz"",""spades"",""clubs"",""hearts"",""diams"",""controlCharacters"",""entityPattern"",""codePointSupport"",""fromCodePoint"",""codeToChar"",""fromCharCode"",""lessThan"",""greaterThan"",""invalid"",""expectedExpression"",""expectedParen"",""numberPattern"",""stringMiddlePattern"",""escapeSequencePattern"",""lineContinuationPattern"",""makeQuotedStringMatcher"",""okQuote"",""literal"",""done"",""charCodeAt"",""JSON"",""singleMatcher"",""doubleMatcher"",""quote"",""stringMiddlePattern$1"",""escapes"",""spreadPattern"",""legalReference"",""relaxedName"",""identifier"",""readObjectLiteral"",""keyValuePairs"",""readKeyValuePairs"",""readArrayLiteral"",""expressionList"",""readExpressionList"",""globals"",""keywords"",""prefixPattern"",""specials"",""readPrimary"",""readLiteral"",""readReference"",""readBracketedExpression"",""readMemberOrInvocation"",""expression"",""refinement"",""readRefinement"",""makePrefixSequenceMatcher"",""symbol"",""fallthrough"",""readExpression"",""matcher"",""prefixOperators"",""readLogicalOr"",""readTypeof"",""makeInfixSequenceMatcher"",""left"",""right"",""infixOperators"",""readLogicalOr$1"",""attributeNamePattern"",""onPattern"",""eventPattern"",""reservedEventNames"",""decoratorPattern"",""transitionPattern"",""directives"",""no-delegation"",""unquotedAttributeValueTextPattern"",""proxyEvent"",""whitespace"",""slashes"",""delimiterChangeToken"",""exclude"",""legalAlias"",""asRE"",""elsePattern"",""elsePattern$1"",""handlebarsBlockCodes"",""each"",""if"",""with"",""unless"",""indexRefPattern"",""keyIndexRefPattern"",""handlebarsBlockPattern"",""OPEN_COMMENT"",""CLOSE_COMMENT"",""leadingLinebreak"",""trailingLinebreak"",""stripStandalones"",""backOne"",""backTwo"",""lastSectionItem"",""isString"",""isComment"",""isSection"",""lastItem"",""trimWhitespace"",""leadingPattern"",""trailingPattern"",""contiguousWhitespace"",""preserveWhitespaceElements"",""leadingWhitespace$1"",""trailingWhitespace"",""leadingNewLine"",""trailingNewLine"",""closingTagPattern"",""tagNamePattern"",""validTagNameFollower"",""disallowedContents"",""li"",""dt"",""dd"",""rt"",""rp"",""optgroup"",""thead"",""tbody"",""tfoot"",""tr"",""td"",""th"",""partialDefinitionSectionPattern"",""STANDARD_READERS"",""readPartial"",""readUnescaped"",""readSection"",""readInterpolator"",""readComment"",""TRIPLE_READERS"",""readTriple"",""STATIC_READERS"",""READERS"",""readMustache"",""readHtmlComment"",""readElement$1"",""readText"",""PARTIAL_READERS"",""readPartialDefinitionSection"",""defaultInterpolate"",""StandardParser"",""tripleDelimiters"",""staticDelimiters"",""staticTripleDelimiters"",""standardDelimiters"",""delimiters"",""tags"",""isTriple"",""open"",""close"",""readers"",""sortMustacheTags"",""sectionDepth"",""elementStack"",""sanitize"",""elements"",""eventAttributes"",""stripComments"",""preserveWhitespace"",""sanitizeElements"",""sanitizeEventAttributes"",""includeLinePositions"",""textOnlyMode"",""csp"",""cleanup"",""expr"",""insertExpressions"",""readTemplate"",""b"",""parseOptions"",""TEMPLATE_INSTRUCTIONS"",""COMPUTATION_INSTRUCTIONS"",""fromId"",""noThrow"",""getElementById"",""isParsed"",""getParseOptions"",""reduce"",""val"",""throwNoParse"",""addFunctions"",""parseFor"",""templateConfigurator"",""parseTemplate"",""getDynamicTemplate"",""_config"",""extendPartials"",""registryNames"",""Registry"",""useDefaults"",""configure"",""registry"",""isOwner"",""registries"",""custom"",""defaultKeys"",""isStandardKey"",""makeObj"",""isBlacklisted"",""order"",""config"",""configure$1"",""syncComputedChildren"",""meta"",""nextNode"",""contains"",""lastBound"",""q"",""list"",""updateAnchors"",""all"",""res"",""isBindableByValue"",""isBindableByContentEditable"",""isContentEditable"",""isBindableByName"",""isBindableByChecked"",""isBindableByName$1"",""isBindableByChecked$1"",""makeDirty"",""nameAttr"",""xmlns$$1"",""updateModel$1"",""readKey"",""childData"",""getPartialFromRegistry"",""fillGaps"",""findParentPartial"",""findInstance"",""noRegistryFunctionReturn"",""findOwner"",""findConstructor"",""_Parent"",""hasIndexRef"",""getComponentConstructor"",""ElementConstructor"",""guid"",""counter"",""placeholderId"",""newModel"",""hookQueue"",""childQueue"",""userOptions"",""subscribe"",""createFragment"",""getElement"",""append"",""logIfDebug"",""subs"",""toPairs"",""single"",""config$$1"",""applyCSS"",""__ractive_instances__"",""torndown"",""others"",""rerender"",""changes"",""dest"",""external"",""set$1"",""build"",""add$1"",""TypeError"",""badArguments"",""gather"",""uniqueCssIds"",""ids"",""HTMLElement"",""here"",""cascade"",""updateFromBindings"",""addRegistries"",""addOtherOptions"",""addRegistry"",""_method"",""extendOne"",""_on"",""_observe"",""optional"",""required"",""computed"",""resolveInstanceMembers"",""warnAboutAmbiguity"",""modifyArrays"",""isolated"",""noIntro"",""noOutro"",""nestedTransitions"",""linear"",""easeIn"",""Math"",""pow"",""easeOut"",""easeInOut"",""toString$1$1"",""warn"",""log"",""printWarning"",""welcome"",""implementation"",""hasFeature"",""alreadyWarned"",""welcomeIntro"",""welcomeMessage"",""WELCOME_MESSAGE"",""hasGroup"",""intermediate"",""min"",""properties"",""snap"",""prop$1"",""TransitionManager"",""intros"",""outros"",""totalChildren"",""outroChildren"",""detachQueue"",""outrosComplete"",""decrementOutros"",""decrementTotal"",""detachNodes"",""detach$1"",""_detachNodes"",""ready"",""detachImmediate"",""batch"",""previousBatch"",""transitionManager"",""fragments"",""tasks"",""immediateObservers"",""deferredObservers"",""flushChanges"",""observer"",""thing"",""task"",""postRender"",""_batch"",""refPattern"",""splitPattern"",""escapeKeyPattern"",""unescapeKeyPattern"",""star"",""errorMessage"",""noAnimation"",""linear$1"",""initStars"",""bubbleStars"",""arg"",""div"",""methodNames"",""unprefixed"",""prefixed"",""makeFunction"",""attachHook"",""detachHook"",""detachHook$1"",""mathml"",""xlink"",""xml"",""xmlns"",""ns"",""createElementNS"",""cloneNode"",""Query"",""isComponentQuery"",""sortByItemPosition"",""sortByDocumentPosition"",""captureGroup"",""KeyModel"",""isKey"",""dependant"",""registerLink"",""unregisterLink"",""isKeypath"",""getChild"",""rebindChildren"",""hasProp"",""shuffleTasks"",""early"",""registerQueue"",""keyModels"",""patternObservers"",""stage"",""existingMatches"",""loop"",""getKeyModel"",""skip"",""child$1"",""startPath"",""notifiedUpstream"",""Missing"",""shufle"",""attach"",""bind$$1"",""isDetached"",""readBooleanLiteral"",""getString$1"",""escapeChar"",""readTemplateStringLiteral"",""parts"",""token"",""readNumberLiteral$1"",""readKeyValuePair"",""spread"",""refKey"",""pairs"",""readNumberLiteral"",""name$$1"",""reference"",""lastDotIndex"",""startPos"",""relaxedNames"",""actual"",""normalise"",""lastIndexOf"",""refLength"",""strictRefinement"",""getConditional"",""ifTrue"",""ifFalse"",""isSpread"",""expressions"",""flattenExpression"",""getVars"",""vars"",""stringify"",""hasSpread"",""makeSpread"",""stringifyPair"",""out"",""extractRefs"",""stringified"",""splitEvent"",""readAttribute"",""nearest"",""readAttributeValue"",""valueStart"",""startDepth"",""readQuotedAttributeValue"",""readUnquotedAttributeValue"",""readUnquotedAttributeValueToken"",""text"",""tokens"",""quoteMark"",""readQuotedStringToken"",""readAttributeOrDirective"",""readArguments"",""readProxyEvent"",""spreadArgs"",""exprs"",""inside"",""readMustacheOfType"",""inTag"",""tag"",""reader"",""readDelimiterChange"",""rewind"",""refineExpression"",""referenceExpression"",""getReferenceExpression"",""triple"",""readAliases"",""alias"",""readAlias"",""readExpressionOrReference"",""expectedFollowers"",""readClosing"",""closing"",""readElse"",""readElseIf"",""section"",""hasElse"",""block"",""unlessBlock"",""closed"",""expectedClose"",""aliasOnly"",""extra"",""endIndex"",""comment"",""removeLeadingWhitespace"",""removeTrailingWhitespace"",""previousItem"",""nextItem"",""preserveWhitespaceInsideFragment"",""removeLeadingWhitespaceInsideFragment"",""removeTrailingWhitespaceInsideFragment"",""isPreserveWhitespaceElement"",""readClosingTag"",""selfClosing"",""hasPartials"",""closingTag"",""lowerCaseName"",""canContain"",""closingTagName"",""readAnchorClose"",""disallowed"",""barrier"",""addTo"",""hasChildren"",""fromExpression"",""instructions"",""createFunction"",""body"",""createFunctionFromString"",""bindTo"",""fromComputationString"",""initial"",""parseAsString"",""validate$1"",""existingPartials"",""newPartials"",""overwrite"",""wrap$1"",""getSuperMethod"",""_parent"",""oldSuper"",""getMessage"",""deprecated"",""correct"",""isError"",""deprecateOption"",""deprecatedOption"",""deprecate"",""extendOtherMethods"",""member"",""orComponent"",""readStyle"",""rule"",""rules"",""readClass"",""updateMultipleSelectValue"",""updateSelectValue"",""updateStringValue"",""updateContentEditableValue"",""updateRadioValue"",""updateValue"",""updateRadioName"",""updateCheckboxName"",""updateStyleAttribute"",""updateInlineStyle"",""updateClassName"",""updateInlineClass"",""type$1"",""updateBoolean"",""updateNamespacedAttribute"",""updateAttribute"",""wasSelected"",""wasChecked"",""valueAttribute"",""prev"",""setProperty"",""className"",""removeAttributeNS"",""setAttributeNS"",""needle"",""qualified"",""hasAttribute"",""enumerable"",""getComputationSignature"",""getterString"",""setterString"",""initialiseProperties"",""handleAttributes"",""_attributePartial"",""getAdaptors"",""protoAdapt"",""lookup"",""builtins"",""srcs"",""magic$$1"",""_subs"",""_nsSubs"",""_eventQueue"",""_liveQueries"",""_liveComponentQueries"",""_children"",""byName"",""tpl"",""mapAll"",""getPromise"",""cancel$1"",""nameOption"",""renderItem"",""factory"",""exports"",""module"",""define"",""amd"",""noConflict"",""isFinite"",""format"",""registryName"",""interpol"",""arrays"",""arrayLike"",""tm"",""notifiedTotal"",""manager"",""trans"",""collectAllOutros"",""_list"",""dispatch$1"",""which"",""sets"",""getOptions"",""easing$$1"",""animate$1"",""enqueue"",""dequeue"",""variants"",""_noArg"",""eventNames"",""fireEventAs"",""initialFire"",""notifySubscribers"",""fullName"",""subscribers"",""originalEvent"",""stopEvent"",""queries"",""remotes"",""remote"",""query$1"",""findAnchors"",""findAnchorsIn"",""anchors"",""idxs"",""unrenderChild"",""bubble$1"",""findNextNode$1"",""removeFromQuery$1"",""prepend"",""insertAt"",""@this.parent"",""@this.root"",""cmp"",""isParent"",""output"",""otherNode"",""compareDocumentPosition"",""bitmask"",""baseA"",""baseB"",""mutualAncestor"",""ancestryA"",""getAncestry"",""ancestryB"",""oldestA"",""oldestB"",""fragmentA"",""fragmentB"",""indexA"",""indexB"",""indexA$1"",""indexB$1"",""getParent"",""ancestry"",""ancestor"",""getQuery"",""upstream"",""last"",""findAlias"",""prefixKeypath"",""rootKeypath"",""rootDot"",""relativeKeypath"",""initialFragment"",""explicitContext"",""context$1"",""badReference"",""repeater"",""context$2"",""crossedComponentBoundary"",""shouldWarn"",""spliceArguments"",""getSpliceEquivalent"",""balance"",""removeStart"",""removeEnd"",""getComparator"",""merge$2"",""compare"",""update$3"",""build$1"",""findModel"",""get$1$1"",""add$2"",""animate$2"",""link$1"",""there"",""merge$1"",""raise"",""event$1"",""set$2"",""drop"",""unlink$1"",""update$2"",""isBound"",""getBindingModel"",""getBindingPath"",""getBinding"",""ctx"",""setBinding"",""fireInsertHook"",""observers"",""silent"",""caller"",""keypaths"",""createObserver"",""isSilenced"",""silence"",""resume"",""wildcardIndex"",""double"",""_proxy"",""callback$1"",""listener"",""canonical"",""styleDefinition"",""cssText"",""filteredStyleDefinitions"",""sources"",""trim$1"",""extractString"",""unit"",""transformSelector"",""selectorUnits"",""modifiers"",""transformed"",""appended"",""prepended"",""dataAttr"",""selectors"",""s4"",""floor"",""random"",""validate"",""childValue"",""parentIsFn"",""childIsFn"",""callDataFunction"",""fromProperties"",""primary"",""secondary"",""hasThis"",""functionBody"",""exp"",""opening"",""entity"",""code"",""parseInt"",""validateCode""],""mappings"":""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AAO,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,KAAM,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,KAAM,IAAKC,IAAK,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,KAAM,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,KAAM,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,OAAQ,IAAKC,KAAM,IAAKC,KAAM,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,QAAS,IAAKC,KAAM,IAAKC,IAAK,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,GAAI,IAAKC,GAAI,IAAKC,GAAI,IAAKC,QAAS,IAAKC,GAAI,IAAKC,IAAK,IAAKC,MAAO,IAAKC,IAAK,IAAKC,QAAS,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,MAAO,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,MAAO,IAAKC,QAAS,IAAKC,KAAM,IAAKC,IAAK,IAAKC,MAAO,IAAKC,KAAM,IAAKC,MAAO,IAAKC,OAAQ,IAAKC,GAAI,IAAKC,GAAI,IAAKC,GAAI,IAAKC,QAAS,IAAKC,GAAI,IAAKC,IAAK,IAAKC,OAAQ,IAAKC,MAAO,IAAKC,IAAK,IAAKC,QAAS,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,MAAO,IAAKC,SAAU,IAAKC,MAAO,IAAKC,IAAK,IAAKC,KAAM,KAAMC,KAAM,KAAMC,OAAQ,KAAMC,KAAM,KAAMC,IAAK,KAAMC,IAAK,KAAMC,IAAK,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,MAAO,KAAMC,OAAQ,KAAMC,OA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""}"
4a0de98e39483515d602c241c208c5a366a8d66d,3330919,        // http://stackoverflow.com/a/3330919)
aed2456c7cb8ada14d4c8e63b0182b81f3abe6f8,494122,      // Escape endChar for RegExp (taken from http://stackoverflow.com/a/494122/526741)
6236671986ac5588b7cad3e8847bbf137881c282,41249464,"If you’re using [Apache Tomcat](http://tomcat.apache.org/), you need to follow [this Stack Overflow answer](https://stackoverflow.com/a/41249464/4878474)."
8dcbaa4a4efa6cefc052e3871f14c4a947131544,38748186,	/* Use the hack presented in http://stackoverflow.com/a/38748186/1156119 to get opacity transitions working on the scrollbar */
df42c2b307a7a8e960901dc519732e0169519d50,2007103,    C.f. https://stackoverflow.com/questions/2007103/how-can-i-disable-clear-of-clipboard-on-exit-of-pyqt4-application
5a0baa361fea87d71c0e0cfce8cfa6f6a76966e2,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
9a0563dc966fbb4ae80f8bee1f89eb4404c89951,3330919,        // http://stackoverflow.com/a/3330919)
ce41ced7c07b4577a00c18bb19c14e9292caa535,263416,            // credit: http://stackoverflow.com/a/263416/677735
8f382f1300e1b52fb92724937e530b0523c1c534,3561493,    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
ac901a654c31950ecd4eefa2ab3d3ad9884ec98f,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
f296d9e75077eaf0a93f5bbc1c18dc9237e9a390,2200494,    * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom
6fa7450b282c496891f2490ae1408e608f1e08a3,25259,        /// http://stackoverflow.com/questions/25259/how-does-stack-overflow-generate-its-seo-friendly-urls/25486.
868b087c76d75191dbc735534e620493289a8f6b,6913512,    // https://stackoverflow.com/questions/6913512/how-to-sort-an-array-of-objects-by-multiple-fields
bcfab0c674add68a1fb6b9af424977cf44224a28,9439256,"# globals to pass NOTE from R CMD check, see http://stackoverflow.com/questions/9439256"
efb4afce64640e92aa5e7a369e732c01264a395a,18020326,// Object.create monkey patch ie8 http://stackoverflow.com/a/18020326
f8faeec6d31d5ba8f85fea619cd5f0c1222db420,19580116,"<span class=""sd"">   http://stackoverflow.com/questions/19580116/plotting-candlestick-data-from-a-dataframe-in-python</span>"
56e555a4385f93c4c6164ce0bbac91e609eb0bcd,6262682,    //http://stackoverflow.com/a/6262682
ae719531867b2f7f8ad46c90f9627423489e157a,12094484,# using https://stackoverflow.com/questions/12094484/rails-ruby-calculate-new-coordinates-using-given-distance-and-bearing-from-a-sta
c9d3bc3a28c7044142c4ed889697dc60660ca8dc,15432659,<http://stackoverflow.com/questions/15432659/how-to-rearrange-a-python-pandas-dataframe>`__
a303320fc3d3a14ddf61326d9032b3510617b535,826782,  //http://stackoverflow.com/questions/826782/how-to-disable-text-selection-highlighting-using-css
30b4c90667a413461f3248a57f183c422f7dbae2,616645,# https://stackoverflow.com/questions/616645/how-do-i-duplicate-sys-stdout-to-a-log-file-in-python
315f0dbb92882887e76661f8bae7cf7244489b60,7266558,        time.sleep(0.1)  # http://stackoverflow.com/questions/7266558/pyserial-buffer-wont-flush
6de9685e69ca8af103042ea8a54d5e07c797a41d,1833588,"{""version"":3,""file"":""generated.js"",""sources"":[""node_modules/browser-pack/_prelude.js"",""lib/domned.js"",""lib/hyperscript.js"",""lib/raf.js"",""lib/vnodes/comment.js"",""lib/vnodes/element.js"",""lib/vnodes/fragment.js"",""lib/vnodes/html.js"",""lib/vnodes/index.js"",""lib/vnodes/text.js"",""lib/vnodes/types.js"",""node_modules/cito/src/vdom.js"",""node_modules/xtend/mutable.js""],""names"":[""f"",""exports"",""module"",""define"",""amd"",""g"",""window"",""global"",""self"",""this"",""domned"",""e"",""t"",""n"",""r"",""s"",""o"",""u"",""a"",""require"",""i"",""Error"",""code"",""l"",""call"",""length"",1,""mount"",""target"",""render"",""renderTree"",""h"",""repaint"",""vnode"",""cito"",""vdom"",""update"",""document"",""querySelector"",""Element"",""raf"",""throttle"",""Hyperscript"",""create"",""parentNode"",""replaceChild"",""dom"",""cloneFunction"",""bind"",""extend"",""text"",""Text"",""html"",""Html"",""comment"",""Comment"",""fragment"",""Fragment"",""vnodes"",""func"",""execute"",""_callbacks"",""callbacks"",""pending"",""forEach"",""callback"",""throttled"",""done"",""push"",""requestAnimationFrame"",""webkitRequestAnimationFrame"",""mozRequestAnimationFrame"",""previousDate"",""Date"",""getTime"",""currentDate"",""ms"",""Math"",""max"",""req"",""setTimeout"",""key"",""tag"",""children"",""isOptions"",""types"",""isPlainObject"",""undefined"",""parseTag"",""data"",""."",""#"",""replace"",""match"",""type"",""name"",""ids"",""classes"",""options"",""tagInfo"",""asArray"",""Object"",""ElementPrototype"",""attrs"",""id"",""class_"",""join"",""map"",""child"",""isVNode"",""isFunction"",""String"",""events"",""on"",""event"",""handler"",""handlers"",""toString"",""value"",""isArray"",""Array"",""prototype"",""root"",""factory"",""isString"",""norm"",""node"",""oldNode"",""normOnly"",""origChild"",""oldChild"",""normOnlyOld"",""childrenType"",""domElement"",""getOnlyChild"",""firstChild"",""domLength"",""childNodes"",""normIndex"",""normChildren"",""oldChildren"",""moveChild"",""nextChild"",""domNextChild"",""domChild"",""domRefChild"",""nextSibling"",""insertBefore"",""appendChild"",""emptyTextNode"",""createTextNode"",""insertAdjacentHTML"",""position"",""htmlContent"",""prevText"",""prevTextLength"",""prevTextEmpty"",""iah_normalizes"",""iah_ignoresEmptyText"",""prevNode"",""previousSibling"",""lastChild"",""nodeType"",""nodeValue"",""splitText"",""helperDiv"",""innerHTML"",""insertChild"",""domParent"",""domNode"",""destroyNode"",""removeChild"",""createNode"",""parentNs"",""isOnlyDomChild"",""isTrident"",""insertNodeHTML"",""createFragment"",""setTextContent"",""createComment"",""domChildren"",""prevLength"",""domPrevChild"",""ns"",""is"",""createElementNS"",""createElement"",""createAllChildren"",""updateAttributes"",""updateEvents"",""createdHandlers"",""$created"",""triggerLight"",""extraProp"",""extraPropValue"",""virtualNode"",""createNodeHTML"",""hasChildNodes"",""initVirtualDOM"",""context"",""escapeContent"",""endOfText"",""escapeComment"",""selectedIndex"",""optionIndex"",""selected"",""attrName"",""attrValue"",""style"",""propName"",""escapedAttr"",""getChildrenType"",""childrenLength"",""endIndex"",""indexOf"",""substr"",""nextDomNode"",""childDomNode"",""initVirtualDOMFragment"",""isWebKit"",""innerText"",""isFirefox"",""split"",""oldAttrs"",""recordChanges"",""changes"",""changed"",""oldAttrValue"",""updateStyle"",""isInputProperty"",""updateAttribute"",""className"",""removeAttribute"",""colonIndex"",""prefix"",""setAttributeNS"",""setAttribute"",""oldStyle"",""supportsCssSetProperty"",""styleStr"",""domStyle"",""cssText"",""propValue"",""importantIndex"",""setProperty"",""oldPropValue"",""removeProperty"",""element"",""oldEvents"",""eventType"",""addEventHandler"",""removeEventHandler"",""supportsEventListener"",""addEventListener"",""eventHandler"",""onType"",""attachEvent"",""removeEventListener"",""detachEvent"",""inFragment"",""removeAllChildren"",""removeChildren"",""to"",""supportsTextContent"",""textContent"",""updateChildren"",""outerNextChild"",""oldChildrenType"",""destroyNodes"",""updateNode"",""oldChildrenLength"",""oldEndIndex"",""oldStartIndex"",""startIndex"",""successful"",""outer"",""oldStartChild"",""oldEndChild"",""startChild"",""endChild"",""oldNextChild"",""oldChildrenMap"",""next"",""getFixedEvent"",""currentTarget"",""eventHandlers"",""len"",""callEventHandler"",""stopImmediate"",""preventDefault"",""defaultPrevented"",""returnValue"",""stopPropagation"",""cancelBubble"",""stopImmediatePropagation"",""thisArg"",""srcElement"",""console"",""error"",""stack"",""nextChildChildren"",""nextChildIndex"",""updateFragment"",""changedHandlers"",""$changed"",""destroyedHandlers"",""$destroyed"",""nodes"",""nodesType"",""copyObjectProps"",""source"",""maintainFocus"",""previousActiveElement"",""body"",""activeElement"",""focus"",""navigator"",""noop"",""warn"",""userAgent"",""supportsRange"",""iah_el"",""createRange"",""append"",""remove"",""arguments"",""hasOwnProperty""],""mappings"":""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AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"",""sourcesContent"":[""(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\""function\""&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\""Cannot find module '\""+o+\""'\"");throw f.code=\""MODULE_NOT_FOUND\"",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\""function\""&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})"",""/**\n * DOMned Library\n * https://github.com/sprat/domned\n *\n * Copyright 2015 Sylvain Prat\n * Released under the MIT licence.\n * @license\n */\n\nvar cito = require('cito');\nvar Hyperscript = require('./hyperscript');\nvar raf = require('./raf');\n\n\n/**\n * Mount a component in a target element\n */\nfunction mount(target, render) {\n    if (typeof target === 'string') {\n        target = document.querySelector(target);\n    }\n\n    if (!target instanceof Element) {\n        throw new Error('target should be a DOM Element or a CSS selector');\n    }\n\n    if (typeof render !== 'function') {\n        throw new Error('render should be a function');\n    }\n\n    function renderTree(/*oldVnode*/) {\n        return render(h);\n    }\n\n    function repaint() {\n        vnode = cito.vdom.update(vnode, renderTree);\n    }\n\n    // update = schedule a repaint in the next animation frame\n    var update = raf.throttle(repaint);\n    var h = Hyperscript(update);\n    var vnode = cito.vdom.create(renderTree);\n\n    target.parentNode.replaceChild(vnode.dom, target);\n\n    // TODO: return the vnode so we can attach event handlers? or a method to attach handlers?\n    return {\n        update: update\n    };\n}\n\nmodule.exports = {\n    mount: mount\n};\n"",""var extend = require('xtend/mutable');\nvar vnodes = require('./vnodes');\nvar Element = vnodes.Element;\nvar Text = vnodes.Text;\nvar Html = vnodes.Html;\nvar Comment = vnodes.Comment;\nvar Fragment = vnodes.Fragment;\n\nfunction cloneFunction(f) {\n    // clone a function: see http://stackoverflow.com/questions/1833588\n    return f.bind(null);\n}\n\nfunction Hyperscript(update) {\n    var self = cloneFunction(Element);\n\n    extend(self, {\n        text: Text,\n        html: Html,\n        comment: Comment,\n        fragment: Fragment,\n        update: update\n    });\n\n    // TODO: generateId\n\n    return self;\n}\n\nmodule.exports = Hyperscript;\n"",""/**\n * RAF implementation or a fallback using setTimeout\n * @param func function that will be called in the next animation frame\n */\nvar raf = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || (function (func) {\n    // initial date\n    var previousDate = new Date().getTime();\n\n    // return the fallback function\n    return function rafFallback() {\n        var currentDate = new Date().getTime();\n        var ms = Math.max(0, 16 - (currentDate - previousDate));\n        var req = setTimeout(func, ms);\n        previousDate = currentDate;\n        return req;\n    };\n}());\n\n/**\n * Throttle a function with requestAnimationFrame. The returned function accepts\n * a done callback as parameter, called when the throttled function has finished\n * executing\n * @param func function that will be throttled\n */\nfunction throttle(func) {\n    var callbacks = [];\n    var pending;\n\n    function execute() {\n        // execute the wrapped function\n        func();\n\n        // reset the state before executing the done callbacks, because they can\n        // eventually call the throttled function. So we delay them until the next\n        // animation frame, otherwise we may have an endless loop.\n        var _callbacks = callbacks;\n        callbacks = [];\n        pending = null;\n\n        // execute the done callbacks\n        // TODO: if the callbacks executes slowly, we may run out of resources: fix that!\n        _callbacks.forEach(function (callback) {\n            callback();\n        });\n    }\n\n    function throttled(done) {\n        if (done) {\n            callbacks.push(done);\n        }\n\n        if (!pending) {\n            pending = raf(execute);\n        }\n    }\n\n    return throttled;\n}\n\nmodule.exports = {\n    raf: raf,\n    throttle: throttle\n};\n"",""function Comment(comment, key) {\n    return {\n        tag: '!',\n        key: key,\n        children: comment\n    };\n}\n\nmodule.exports = Comment;\n"",""var extend = require('xtend/mutable');\nvar types = require('./types');\n\nfunction isOptions(o) {\n    return types.isPlainObject(o) && o.children === undefined;\n}\n\nfunction parseTag(tag) {\n    var data = {\n        '.': [],\n        '#': []\n    };\n\n    // extract id and classes from tag string\n    tag = tag.replace(/([#\\.])([^#\\.]+)/g, function(match, type, name) {\n        data[type].push(name);\n        return '';\n    });\n\n    return {\n        'name': tag || 'div',\n        'ids': data['#'],\n        'classes': data['.']\n    };\n}\n\n//TODO: add event registration shortcut methods?\nvar ElementPrototype = {\n    on: function on(event, handler) {\n        var events = this.events = this.events || {};\n        var handlers = events[event] = events[event] || [];\n        handlers.push(handler);\n        // TODO: call update automatically when a handler is called?\n        return this;\n    }\n};\n\n// TODO: or pass options only via modifier methods on the ElementNodePrototype?\nfunction Element(tag, options, children) {\n    var tagInfo = parseTag(tag);\n    tag = tagInfo.name;\n\n    // handle children passed in the options parameter\n    if (children === undefined && !isOptions(options)) {\n        children = options;\n        options = undefined;\n    }\n\n    children = types.asArray(children);\n    options = options || {};\n\n    var self = Object.create(ElementPrototype);\n    var attrs = extend({}, options.attrs);\n\n    // TODO: check no more than 1 id\n    var id = attrs.id || tagInfo.ids[0];\n    if (id) {\n        attrs.id = id;\n    }\n\n    // TODO: handle class/classes from options...\n    var class_ = tagInfo.classes.join(' ');\n    if (class_) {\n        attrs['class'] = class_;\n    }\n\n    // convert children to string when necessary\n    children = children.map(function (child) {\n        // functions (views) and vnodes are kept as is, all other types are\n        // converted to string\n        // TODO: be more specific for functions?\n        if (types.isVNode(child) || types.isFunction(child)) {\n            return child;\n        }\n        return String(child);\n    });\n\n    extend(self, {\n        tag: tag,\n        key: options.key,\n        events: options.events,\n        attrs: attrs,\n        children: children\n    });\n\n    return self;\n}\n\nmodule.exports = Element;\n"",""function Fragment(children, key) {\n    return {\n        key: key,\n        children: children\n    };\n}\n\nmodule.exports = Fragment;\n"",""function Html(html, key) {\n    return {\n        tag: '<',\n        key: key,\n        children: html\n    };\n}\n\nmodule.exports = Html;\n"",""module.exports = {\n    Element: require('./element'),\n    Text: require('./text'),\n    Html: require('./html'),\n    Comment: require('./comment'),\n    Fragment: require('./fragment')\n};\n"",""function Text(text, key) {\n    return {\n        tag: '#',\n        key: key,\n        children: text\n    };\n}\n\nmodule.exports = Text;\n"",""var isArray = Array.isArray;\nvar toString = Object.prototype.toString;\n\nfunction isPlainObject(o) {\n    return toString.call(o) === '[object Object]';\n}\n\nfunction isFunction(o) {\n    return typeof o === 'function';\n}\n\nfunction isVNode(o) {\n    return isPlainObject(o) && (o.tag !== undefined || o.children !== undefined);\n}\n\nfunction asArray(value) {\n    if (value === undefined || value === null) {\n        return [];\n    }\n\n    if (isArray(value)) {\n        return value;\n    }\n\n    return [value];\n}\n\nmodule.exports = {\n    isArray: isArray,\n    isPlainObject: isPlainObject,\n    isFunction: isFunction,\n    isVNode: isVNode,\n    asArray: asArray\n};\n"",""/*\n * Copyright (c) 2015, Joel Richard\n *\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n */\n(function (root, factory) {\n    if (typeof define === 'function' && define.amd) {\n        define([], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        module.exports = factory();\n    } else {\n        root.cito = factory();\n    }\n}(this, function () {\n    'use strict';\n\n    // TODO implement parse utility which leverages createContextualFragment\n\n    var document = window.document,\n        navigator = window.navigator,\n        noop = function () {},\n        console = window.console || {warn: noop, error: noop};\n\n    var userAgent = navigator.userAgent,\n        isWebKit = userAgent.indexOf('WebKit') !== -1,\n        isFirefox = userAgent.indexOf('Firefox') !== -1,\n        isTrident = userAgent.indexOf('Trident') !== -1;\n\n    var helperDiv = document.createElement('div'),\n        supportsTextContent = 'textContent' in document,\n        supportsEventListener = 'addEventListener' in document,\n        supportsRange = 'createRange' in document,\n        supportsCssSetProperty = 'setProperty' in helperDiv.style;\n\n    function isString(value) {\n        return typeof value === 'string';\n    }\n\n    function isArray(value) {\n        return value instanceof Array;\n    }\n\n    function isFunction(value) {\n        return typeof value === 'function';\n    }\n\n    function norm(node, oldNode) {\n        var type = typeof node;\n        if (type === 'string') {\n            node = {tag: '#', children: node};\n        } else if (type === 'function') {\n            node = node(oldNode);\n            node = (node === undefined) ? oldNode : norm(node, oldNode);\n        }\n        return node;\n    }\n\n    function normOnly(node, origChild, oldChild) {\n        var child = norm(origChild, oldChild);\n        if (origChild !== child && node) {\n            node.children = child;\n        }\n        return child;\n    }\n\n    function normOnlyOld(children, childrenType, domElement) {\n        var child = normOnly(null, getOnlyChild(children, childrenType));\n        if (!child.dom) {\n            child.dom = domElement.firstChild;\n            if (child.tag === '<') {\n                child.domLength = domElement.childNodes.length;\n            }\n        }\n        return child;\n    }\n\n    function normIndex(children, i, oldChild) {\n        var origChild = children[i],\n            child = norm(origChild, oldChild);\n        if (origChild !== child) {\n            children[i] = child;\n        }\n        return child;\n    }\n\n    function normChildren(node, children, oldChildren) {\n        if (isFunction(children)) {\n            children = children(oldChildren);\n            if (children === undefined) {\n                children = oldChildren;\n            }\n            node.children = children;\n        }\n        return children;\n    }\n\n    function getOnlyChild(children, childrenType) {\n        return (childrenType === 1) ? children[0] : children;\n    }\n\n    function moveChild(domElement, child, nextChild) {\n        var domChild = child.dom, domLength = child.domLength || 1,\n            domNextChild,\n            domRefChild = nextChild && nextChild.dom;\n        if (domChild !== domRefChild) {\n            while (domLength--) {\n                domNextChild = (domLength > 0) ? domChild.nextSibling : null;\n                if (domRefChild) {\n                    domElement.insertBefore(domChild, domRefChild);\n                } else {\n                    domElement.appendChild(domChild);\n                }\n                domChild = domNextChild;\n            }\n        }\n    }\n    \n    // TODO find solution without empty text placeholders\n    function emptyTextNode() {\n        return document.createTextNode('');\n    }\n\n    var iah_el = document.createElement('p'), iah_normalizes, iah_ignoresEmptyText;\n    if (iah_el.insertAdjacentHTML) {\n        iah_el.appendChild(document.createTextNode('a'));\n        iah_el.insertAdjacentHTML('beforeend', 'b');\n        iah_normalizes = (iah_el.childNodes.length === 1);\n\n        iah_el = document.createElement('p');\n        iah_el.appendChild(emptyTextNode());\n        iah_el.insertAdjacentHTML('beforeend', '<b>');\n        iah_ignoresEmptyText = (iah_el.firstChild.nodeType !== 3);\n    }\n\n    function insertAdjacentHTML(node, position, htmlContent) {\n        if (node.insertAdjacentHTML) {\n            var prevText, prevTextLength, prevTextEmpty;\n            if (iah_normalizes || iah_ignoresEmptyText) {\n                var prevNode = (position === 'beforebegin') ? node.previousSibling\n                    : (position === 'beforeend') ? node.lastChild : null;\n                if (prevNode && prevNode.nodeType === 3) {\n                    prevText = prevNode;\n                    if (iah_ignoresEmptyText && prevNode.length === 0) {\n                        prevTextEmpty = true;\n                        prevNode.nodeValue = ' ';\n                    }\n                    if (iah_normalizes) {\n                        prevTextLength = prevNode.length;\n                    }\n                }\n            }\n            node.insertAdjacentHTML(position, htmlContent);\n            if (prevText) {\n                // Split previous text node if it was updated instead of a new one inserted (IE/FF)\n                if (iah_normalizes && prevText.length !== prevTextLength) {\n                    prevText.splitText(prevTextLength);\n                }\n                if (iah_ignoresEmptyText && prevTextEmpty) {\n                    prevText.nodeValue = '';\n                }\n            }\n        } else {\n            helperDiv.innerHTML = htmlContent;\n            if (position === 'beforebegin') {\n                var parentNode = node.parentNode;\n                while (helperDiv.firstChild) {\n                    parentNode.insertBefore(helperDiv.firstChild, node);\n                }\n            } else if (position === 'beforeend') {\n                while (helperDiv.firstChild) {\n                    node.appendChild(helperDiv.firstChild);\n                }\n            }\n        }\n    }\n\n    function insertChild(domParent, domNode, nextChild, replace) {\n        if (nextChild) {\n            var domNextChild = nextChild.dom;\n            if (replace) {\n                var domLength = nextChild.domLength || 1;\n                if (domLength === 1) {\n                    destroyNode(nextChild);\n                    domParent.replaceChild(domNode, domNextChild);\n                } else {\n                    domParent.insertBefore(domNode, domNextChild);\n                    removeChild(domParent, nextChild);\n                }\n            } else {\n                domParent.insertBefore(domNode, domNextChild);\n            }\n        } else {\n            domParent.appendChild(domNode);\n        }\n    }\n\n    function createNode(node, domParent, parentNs, nextChild, replace, isOnlyDomChild) {\n        if (isTrident) {\n            return insertNodeHTML(node, domParent, nextChild, replace);\n        }\n\n        var domNode, tag = node.tag, children = node.children;\n        switch (tag) {\n            case undefined:\n                return createFragment(node, children, domParent, parentNs, nextChild, replace);\n            case '#':\n                if (isOnlyDomChild) {\n                    setTextContent(domParent, children);\n                    return;\n                } else {\n                    domNode = document.createTextNode(children);\n                }\n                break;\n            case '!':\n                domNode = document.createComment(children);\n                break;\n            case '<':\n                if (children) {\n                    if (isOnlyDomChild) {\n                        domParent.innerHTML = children;\n                    } else {\n                        var domChildren = domParent.childNodes,\n                            prevLength = domChildren.length;\n                        if (nextChild) {\n                            var domNextChild = nextChild.dom,\n                                domPrevChild = domNextChild.previousSibling;\n                            insertAdjacentHTML(domNextChild, 'beforebegin', children);\n                            domNode = domPrevChild ? domPrevChild.nextSibling : domParent.firstChild;\n                        } else {\n                            insertAdjacentHTML(domParent, 'beforeend', children);\n                            domNode = domChildren[prevLength];\n                        }\n                        node.dom = domNode;\n                        node.domLength = domChildren.length - prevLength;\n                        if (replace && nextChild) {\n                            // TODO use outerHTML instead\n                            removeChild(domParent, nextChild);\n                        }\n                    }\n                    return;\n                } else {\n                    domNode = emptyTextNode();\n                }\n                break;\n            default:\n                var ns;\n                switch (tag) {\n                    case 'svg': ns = 'http://www.w3.org/2000/svg'; break;\n                    case 'math': ns = 'http://www.w3.org/1998/Math/MathML'; break;\n                    default: ns = parentNs; break;\n                }\n\n                var attrs = node.attrs,\n                    is = attrs && attrs.is;\n                if (ns) {\n                    node.ns = ns;\n                    domNode = is ? document.createElementNS(ns, tag, is) : document.createElementNS(ns, tag);\n                } else {\n                    domNode = is ? document.createElement(tag, is) : document.createElement(tag);\n                }\n                node.dom = domNode;\n                if (isTrident && domParent) {\n                    insertChild(domParent, domNode, nextChild, replace);\n                }\n\n                if (typeof children === 'string') {\n                    setTextContent(domNode, children, false);\n                } else {\n                    createAllChildren(domNode, node, ns, children, false);\n                }\n\n                if (attrs) {\n                    updateAttributes(domNode, tag, ns, attrs);\n                }\n                var events = node.events;\n                if (events) {\n                    updateEvents(domNode, node, events);\n                }\n                if (!isTrident && domParent) {\n                    insertChild(domParent, domNode, nextChild, replace);\n                }\n\n                var createdHandlers = events && events.$created;\n                if (createdHandlers) {\n                    triggerLight(createdHandlers, '$created', domNode, node);\n                }\n                return;\n        }\n        node.dom = domNode;\n        if (domParent) {\n            insertChild(domParent, domNode, nextChild, replace);\n        }\n    }\n\n    function triggerLight(handlers, type, domNode, node, extraProp, extraPropValue) {\n        var event = {type: type, target: domNode, virtualNode: node};\n        if (extraProp) {\n            event[extraProp] = extraPropValue;\n        }\n        if (isArray(handlers)) {\n            for (var i = 0; i < handlers.length; i++) {\n                if (handlers[i].call(domNode, event) === false) {\n                    return;\n                }\n            }\n        } else {\n            handlers.call(domNode, event);\n        }\n    }\n\n    function insertNodeHTML(node, domParent, nextChild, replace) {\n        var html = createNodeHTML(node), domNode;\n        if (domParent) {\n            var prevNode;\n            if (!nextChild && !domParent.hasChildNodes()) {\n                domParent.innerHTML = html;\n                domNode = domParent.firstChild;\n            } else {\n                if (nextChild) {\n                    prevNode = nextChild.dom.previousSibling;\n                    insertAdjacentHTML(nextChild.dom, 'beforebegin', html);\n                    if (replace) {\n                        // TODO use outerHTML instead\n                        removeChild(domParent, nextChild);\n                    }\n                } else {\n                    prevNode = domParent.lastChild;\n                    insertAdjacentHTML(domParent, 'beforeend', html);\n                }\n                domNode = prevNode ? prevNode.nextSibling : domParent.firstChild;\n            }\n        } else {\n            helperDiv.innerHTML = html;\n            domNode = helperDiv.removeChild(helperDiv.firstChild);\n        }\n        initVirtualDOM(domNode, node);\n    }\n\n    var endOfText = '\\u0003';\n\n    // FIXME namespace issue in FF\n    // TODO omit all unnecessary endOfText\n    function createNodeHTML(node, context) {\n        var tag = node.tag, children = node.children;\n        switch (tag) {\n            case '#':\n                return escapeContent(children) + endOfText;\n            case '!':\n                return '<!--' + escapeComment(children) + '-->';\n            case '<':\n                return children + endOfText;\n            default:\n                var html;\n                if (tag) {\n                    var attrs = node.attrs;\n                    if (tag === 'select' && attrs) {\n                        context = {selectedIndex: attrs.selectedIndex, value: attrs.value, optionIndex: 0};\n                    } else if (tag === 'option' && context) {\n                        if ((context.value && context.value === attrs.value) ||\n                            (context.selectedIndex !== undefined && context.selectedIndex === context.optionIndex)) {\n                            attrs.selected = true;\n                        }\n                        context.optionIndex++;\n                    }\n                    // TODO validate tag name\n                    html = '<' + tag;\n                    if (attrs) {\n                        html += ' ';\n                        for (var attrName in attrs) {\n                            var attrValue = attrs[attrName];\n                            if (attrValue === false ||\n                                (tag === 'select' && (attrName === 'value' || attrName === 'selectedIndex'))) {\n                                continue;\n                            } else if (tag === 'textarea' && attrName === 'value') {\n                                children = attrValue;\n                                continue;\n                            } else if (attrValue === true) {\n                                attrValue = '';\n                            } else if (attrName === 'style' && !isString(attrValue)) {\n                                var style = '';\n                                for (var propName in attrValue) {\n                                    style += propName + ': ' + attrValue[propName] + '; ';\n                                }\n                                attrValue = style;\n                            }\n                            html += ' ' + escapedAttr(attrName, attrValue);\n                        }\n                    }\n                } else {\n                    html = '';\n                }\n                if (tag) {\n                    html += '>';\n                }\n\n                children = normChildren(node, children);\n                var childrenType = getChildrenType(children);\n                if (childrenType > 1) {\n                    for (var i = 0, childrenLength = children.length; i < childrenLength; i++) {\n                        html += createNodeHTML(normIndex(children, i), context);\n                    }\n                } else if (childrenType !== 0) {\n                    var child = getOnlyChild(children, childrenType);\n                    if (isString(child)) {\n                        html += escapeContent(child);\n                        if (!tag || !child) {\n                            html += endOfText;\n                        }\n                    } else {\n                        html += createNodeHTML(normOnly(node, child), context);\n                    }\n                } else if (!tag) {\n                    html += endOfText;\n                }\n                if (tag) {\n                    // TODO close only required tags explicitly\n                    html += '</' + tag + '>';\n                }\n                return html;\n        }\n    }\n\n    // TODO only use indexOf + splitText when necessary\n    function initVirtualDOM(domNode, node) {\n        var tag = node.tag;\n        if (tag) {\n            node.dom = domNode;\n            var text, endIndex;\n            switch (tag) {\n                case '#':\n                    text = domNode.nodeValue;\n                    endIndex = text.indexOf(endOfText);\n                    if (endIndex !== -1) {\n                        if (endIndex + 1 < text.length) {\n                            domNode.splitText(endIndex + 1);\n                        }\n                        domNode.nodeValue = text.substr(0, endIndex);\n                    }\n                    break;\n                case '!': break;\n                case '<':\n                    var domLength = 0, nextDomNode;\n                    for (; domNode; domNode = domNode.nextSibling) {\n                        domLength++;\n                        if (domNode.nodeType === 3) {\n                            text = domNode.nodeValue;\n                            if (domLength > 1 && text === endOfText) {\n                                nextDomNode = domNode.nextSibling;\n                                domNode.parentNode.removeChild(domNode);\n                                domLength--;\n                                break;\n                            } else {\n                                endIndex = text.indexOf(endOfText);\n                                if (endIndex !== -1) {\n                                    if (endIndex + 1 < text.length) {\n                                        domNode.splitText(endIndex + 1);\n                                    }\n                                    domNode.nodeValue = text.substr(0, endIndex);\n                                    nextDomNode = domNode.nextSibling;\n                                    break;\n                                }\n                            }\n                        }\n                    }\n                    node.domLength = domLength;\n                    return nextDomNode;\n                default:\n                    var children = node.children,\n                        childrenType = getChildrenType(children);\n                    if (childrenType > 1) {\n                        children = node.children;\n                        var childDomNode = domNode.firstChild;\n                        for (var i = 0, childrenLength = children.length; i < childrenLength; i++) {\n                            childDomNode = initVirtualDOM(childDomNode, children[i]);\n                        }\n                    } else if (childrenType !== 0) {\n                        var child = getOnlyChild(children, childrenType);\n                        if (!isString(child)) {\n                            initVirtualDOM(domNode.firstChild, child);\n                        } else if (!child) {\n                            domNode.firstChild.nodeValue = '';\n                        }\n                    }\n\n                    var events = node.events;\n                    if (events) {\n                        updateEvents(domNode, node, events);\n\n                        var createdHandlers = events.$created;\n                        if (createdHandlers) {\n                            triggerLight(createdHandlers, '$created', domNode, node);\n                        }\n                    }\n                    break;\n            }\n            return domNode.nextSibling;\n        } else {\n            return initVirtualDOMFragment(domNode, node);\n        }\n    }\n\n    function initVirtualDOMFragment(domNode, node) {\n        var children = node.children,\n            childrenType = getChildrenType(children),\n            nextDomNode;\n        if (childrenType === 0) {\n            if (domNode.length > 1) {\n                domNode.splitText(1);\n            }\n            domNode.nodeValue = '';\n            node.dom = domNode;\n            nextDomNode = domNode.nextSibling;\n        } else {\n            if (childrenType > 1) {\n                nextDomNode = domNode;\n                for (var i = 0; i < children.length; i++) {\n                    nextDomNode = initVirtualDOM(nextDomNode, children[i]);\n                }\n                domNode = children[0].dom;\n            } else {\n                var child = normOnly(node, getOnlyChild(children, childrenType));\n                nextDomNode = initVirtualDOM(domNode, child);\n                domNode = child.dom;\n            }\n            node.dom = domNode;\n\n            var domLength = 0;\n            while (domNode !== nextDomNode) {\n                domLength++;\n                domNode = domNode.nextSibling;\n            }\n            node.domLength = domLength;\n        }\n        return nextDomNode;\n    }\n\n    function escapeContent(value) {\n        value = '' + value;\n        if (isWebKit) {\n            helperDiv.innerText = value;\n            value = helperDiv.innerHTML;\n        } else if (isFirefox) {\n            value = value.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;');\n        } else {\n            value = value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n        }\n        return value;\n    }\n\n    function escapeComment(value) {\n        value = '' + value;\n        return value.replace(/-{2,}/g, '-');\n    }\n\n    function escapedAttr(name, value) {\n        var type = typeof value;\n        value = '' + value;\n        if (type !== 'number') {\n            if (isFirefox) {\n                value = value.split('&').join('&amp;').split('\""').join('&quot;');\n            } else {\n                value = value.replace(/&/g, '&amp;').replace(/\""/g, '&quot;');\n            }\n        }\n        // TODO validate attribute name\n        return name + '=\""' + value + '\""';\n    }\n\n    function createFragment(node, children, domParent, parentNs, nextChild, replace) {\n        children = normChildren(node, children);\n        var childrenType = getChildrenType(children);\n\n        var domNode, domLength, child;\n        if (parentNs) {\n            node.ns = parentNs;\n        }\n        if (childrenType === 0) {\n            domNode = emptyTextNode();\n            insertChild(domParent, domNode, nextChild, replace);\n        } else if (childrenType > 1) {\n            domLength = 0;\n            for (var i = 0, childrenLength = children.length; i < childrenLength; i++) {\n                child = normIndex(children, i);\n                createNode(child, domParent, parentNs, nextChild, false);\n                domLength += child.domLength || 1;\n            }\n            domNode = children[0].dom;\n            if (replace) {\n                removeChild(domParent, nextChild);\n            }\n        } else {\n            child = normOnly(node, getOnlyChild(children, childrenType));\n            createNode(child, domParent, parentNs, nextChild, replace);\n            domNode = child.dom;\n            domLength = child.domLength;\n        }\n        node.dom = domNode;\n        node.domLength = domLength;\n    }\n\n    function updateAttributes(domElement, tag, ns, attrs, oldAttrs, recordChanges) {\n        var changes, attrName;\n        if (attrs) {\n            for (attrName in attrs) {\n                var changed = false,\n                    attrValue = attrs[attrName];\n                if (attrName === 'style') {\n                    var oldAttrValue = oldAttrs && oldAttrs[attrName];\n                    if (oldAttrValue !== attrValue) {\n                        changed = updateStyle(domElement, oldAttrValue, attrs, attrValue);\n                    }\n                } else if (isInputProperty(tag, attrName)) {\n                    if (domElement[attrName] !== attrValue) {\n                        domElement[attrName] = attrValue;\n                        changed = true;\n                    }\n                } else if (!oldAttrs || oldAttrs[attrName] !== attrValue) {\n                    if (attrName === 'class' && !ns) {\n                        domElement.className = attrValue;\n                    } else {\n                        updateAttribute(domElement, attrName, attrValue);\n                    }\n                    changed = true;\n                }\n                if (changed && recordChanges) {\n                    (changes || (changes = [])).push(attrName);\n                }\n            }\n        }\n        if (oldAttrs) {\n            for (attrName in oldAttrs) {\n                if ((!attrs || attrs[attrName] === undefined)) {\n                    if (attrName === 'class' && !ns) {\n                        domElement.className = '';\n                    } else if (!isInputProperty(tag, attrName)) {\n                        domElement.removeAttribute(attrName);\n                    }\n                    if (recordChanges) {\n                        (changes || (changes = [])).push(attrName);\n                    }\n                }\n            }\n        }\n        return changes;\n    }\n\n    function updateAttribute(domElement, name, value) {\n        if (value === false) {\n            domElement.removeAttribute(name);\n        } else {\n            if (value === true) {\n                value = '';\n            }\n            var colonIndex = name.indexOf(':'), ns;\n            if (colonIndex !== -1) {\n                var prefix = name.substr(0, colonIndex);\n                switch (prefix) {\n                    case 'xlink':\n                        ns = 'http://www.w3.org/1999/xlink';\n                        break;\n                }\n            }\n            if (ns) {\n                domElement.setAttributeNS(ns, name, value);\n            } else {\n                domElement.setAttribute(name, value);\n            }\n        }\n    }\n\n    function updateStyle(domElement, oldStyle, attrs, style) {\n        var changed = false,\n            propName;\n        if (!isString(style) && (!supportsCssSetProperty || !oldStyle || isString(oldStyle))) {\n            var styleStr = '';\n            if (style) {\n                for (propName in style) {\n                    styleStr += propName + ': ' + style[propName] + '; ';\n                }\n            }\n            style = styleStr;\n            if (!supportsCssSetProperty) {\n                attrs.style = style;\n            }\n        }\n        var domStyle = domElement.style;\n        if (isString(style)) {\n            domStyle.cssText = style;\n            changed = true;\n        } else {\n            if (style) {\n                for (propName in style) {\n                    // TODO should important properties even be supported?\n                    var propValue = style[propName];\n                    if (!oldStyle || oldStyle[propName] !== propValue) {\n                        var importantIndex = propValue.indexOf('!important');\n                        if (importantIndex !== -1) {\n                            domStyle.setProperty(propName, propValue.substr(0, importantIndex), 'important');\n                        } else {\n                            if (oldStyle) {\n                                var oldPropValue = oldStyle[propName];\n                                if (oldPropValue && oldPropValue.indexOf('!important') !== -1) {\n                                    domStyle.removeProperty(propName);\n                                }\n                            }\n                            domStyle.setProperty(propName, propValue, '');\n                        }\n                        changed = true;\n                    }\n                }\n            }\n            if (oldStyle) {\n                for (propName in oldStyle) {\n                    if (!style || style[propName] === undefined) {\n                        domStyle.removeProperty(propName);\n                        changed = true;\n                    }\n                }\n            }\n        }\n        return changed;\n    }\n\n    function updateEvents(domElement, element, events, oldEvents) {\n        var eventType;\n        if (events) {\n            domElement.virtualNode = element;\n            for (eventType in events) {\n                if (!oldEvents || !oldEvents[eventType]) {\n                    addEventHandler(domElement, eventType);\n                }\n            }\n        }\n        if (oldEvents) {\n            for (eventType in oldEvents) {\n                if (!events || !events[eventType]) {\n                    removeEventHandler(domElement, eventType);\n                }\n            }\n        }\n    }\n\n    function isInputProperty(tag, attrName) {\n        switch (tag) {\n            case 'input':\n                return attrName === 'value' || attrName === 'checked';\n            case 'textarea':\n                return attrName === 'value';\n            case 'select':\n                return attrName === 'value' || attrName === 'selectedIndex';\n            case 'option':\n                return attrName === 'selected';\n        }\n    }\n\n    function addEventHandler(domElement, type) {\n        if (type[0] !== '$') {\n            if (supportsEventListener) {\n                domElement.addEventListener(type, eventHandler, false);\n            } else {\n                var onType = 'on' + type;\n                if (onType in domElement) {\n                    domElement[onType] = eventHandler;\n                } else {\n                    // TODO bind element to event handler + tests\n                    domElement.attachEvent(onType, eventHandler);\n                }\n            }\n        }\n    }\n\n    function removeEventHandler(domElement, type) {\n        if (type[0] !== '$') {\n            if (supportsEventListener) {\n                domElement.removeEventListener(type, eventHandler, false);\n            } else {\n                var onType = 'on' + type;\n                if (onType in domElement) {\n                    domElement[onType] = null;\n                } else {\n                    domElement.detachEvent(onType, eventHandler);\n                }\n            }\n        }\n    }\n\n    function createAllChildren(domNode, node, ns, children, inFragment) {\n        children = normChildren(node, children);\n        var childrenType = getChildrenType(children);\n        if (childrenType > 1) {\n            for (var i = 0, childrenLength = children.length; i < childrenLength; i++) {\n                createNode(normIndex(children, i), domNode, ns);\n            }\n        } else if (childrenType !== 0) {\n            var child = getOnlyChild(children, childrenType);\n            if (!inFragment && isString(child)) {\n                setTextContent(domNode, child);\n            } else {\n                child = normOnly(node, child);\n                createNode(child, domNode, ns, null, false, !inFragment);\n            }\n        }\n    }\n\n    function getChildrenType(children) {\n        if (isArray(children)) {\n            return children.length;\n        } else {\n            return (children || isString(children)) ? -1 : 0;\n        }\n    }\n\n    var range = supportsRange ? document.createRange() : null;\n\n    function removeAllChildren(domElement, children, childrenType) {\n        if (childrenType > 1) {\n            removeChildren(domElement, children, 0, children.length);\n        } else if (childrenType !== 0) {\n            if (isString(children)) {\n                domElement.removeChild(domElement.firstChild);\n            } else {\n                removeChild(domElement, normOnlyOld(children, childrenType, domElement));\n            }\n        }\n    }\n\n    function removeChildren(domElement, children, i, to) {\n        for (; i < to; i++) {\n            removeChild(domElement, children[i]);\n        }\n        // TODO use range for better performance with many children\n        // TODO use setStartBefore/setEndAfter for faster range delete\n        /*\n         } else if (hasRange && count === children.length) {\n            for (i = from; i < to; i++) {\n                destroyNode(children[i]);\n            }\n            range.selectNodeContents(domElement);\n            range.deleteContents();\n         */\n    }\n\n    function removeChild(domElement, child) {\n        destroyNode(child);\n        var domChild = child.dom, domLength = child.domLength || 1,\n            domNextChild;\n        while (domLength--) {\n            domNextChild = (domLength > 0) ? domChild.nextSibling : null;\n            domElement.removeChild(domChild);\n            domChild = domNextChild;\n        }\n    }\n\n    function setTextContent(domElement, text, update) {\n        if (text) {\n            if (supportsTextContent) {\n                domElement.textContent = text;\n            } else {\n                domElement.innerText = text;\n            }\n        } else {\n            if (update) {\n                while (domElement.firstChild) {\n                    domElement.removeChild(domElement.firstChild);\n                }\n            }\n            domElement.appendChild(emptyTextNode());\n        }\n    }\n\n    function updateChildren(domElement, element, ns, oldChildren, children, inFragment, outerNextChild) {\n        children = normChildren(element, children, oldChildren);\n        if (children === oldChildren) {\n            return;\n        }\n\n        var oldChildrenType = getChildrenType(oldChildren);\n        if (oldChildrenType === 0) {\n            createAllChildren(domElement, element, ns, children, false);\n            return;\n        }\n\n        var childrenType = getChildrenType(children),\n            oldChild, child;\n        if (childrenType === 0) {\n            removeAllChildren(domElement, oldChildren, oldChildrenType);\n            return;\n        } else if (childrenType < 2) {\n            child = getOnlyChild(children, childrenType);\n            if (!inFragment && isString(child)) {\n                if (childrenType === oldChildrenType) {\n                    oldChild = getOnlyChild(oldChildren, oldChildrenType);\n                    if (child === oldChild) {\n                        return;\n                    } else if (isString(oldChild)) {\n                        domElement.firstChild.nodeValue = child;\n                        return;\n                    }\n                }\n                destroyNodes(oldChildren, oldChildrenType);\n                setTextContent(domElement, child, true);\n                return;\n            } else if (oldChildrenType < 2) {\n                oldChild = normOnlyOld(oldChildren, oldChildrenType, domElement);\n                child = normOnly(element, child, oldChild);\n                updateNode(oldChild, child, domElement, ns, null, 0, outerNextChild, !inFragment);\n                return;\n            }\n        }\n\n        if (childrenType === -1) {\n            element.children = children = [children];\n        }\n        if (oldChildrenType < 2) {\n            oldChild = normOnlyOld(oldChildren, oldChildrenType, domElement);\n            if (oldChildrenType === 1) {\n                oldChildren[0] = oldChild;\n            } else {\n                oldChildren = [oldChild];\n            }\n        }\n\n        var oldChildrenLength = oldChildren.length,\n            childrenLength = children.length,\n            oldEndIndex = oldChildrenLength - 1,\n            endIndex = children.length - 1;\n\n        var oldStartIndex = 0, startIndex = 0,\n            successful = true,\n            nextChild;\n        outer: while (successful && oldStartIndex <= oldEndIndex && startIndex <= endIndex) {\n            successful = false;\n            var oldStartChild, oldEndChild, startChild, endChild;\n\n            oldStartChild = oldChildren[oldStartIndex];\n            startChild = normIndex(children, startIndex, oldStartChild);\n            while (oldStartChild.key === startChild.key) {\n                updateNode(oldStartChild, startChild, domElement, ns, oldChildren, oldStartIndex + 1, outerNextChild);\n                oldStartIndex++; startIndex++;\n                if (oldStartIndex > oldEndIndex || startIndex > endIndex) {\n                    break outer;\n                }\n                oldStartChild = oldChildren[oldStartIndex];\n                startChild = normIndex(children, startIndex, oldStartChild);\n                successful = true;\n            }\n            oldEndChild = oldChildren[oldEndIndex];\n            endChild = normIndex(children, endIndex);\n            while (oldEndChild.key === endChild.key) {\n                updateNode(oldEndChild, endChild, domElement, ns, children, endIndex + 1, outerNextChild);\n                oldEndIndex--; endIndex--;\n                if (oldStartIndex > oldEndIndex || startIndex > endIndex) {\n                    break outer;\n                }\n                oldEndChild = oldChildren[oldEndIndex];\n                endChild = normIndex(children, endIndex);\n                successful = true;\n            }\n            while (oldStartChild.key === endChild.key) {\n                nextChild = (endIndex + 1 < childrenLength) ? children[endIndex + 1] : outerNextChild;\n                updateNode(oldStartChild, endChild, domElement, ns, null, 0, nextChild);\n                moveChild(domElement, endChild, nextChild);\n                oldStartIndex++; endIndex--;\n                if (oldStartIndex > oldEndIndex || startIndex > endIndex) {\n                    break outer;\n                }\n                oldStartChild = oldChildren[oldStartIndex];\n                endChild = normIndex(children, endIndex);\n                successful = true;\n            }\n            while (oldEndChild.key === startChild.key) {\n                nextChild = (oldStartIndex < oldChildrenLength) ? oldChildren[oldStartIndex] : outerNextChild;\n                updateNode(oldEndChild, startChild, domElement, ns, null, 0, nextChild);\n                moveChild(domElement, startChild, nextChild);\n                oldEndIndex--; startIndex++;\n                if (oldStartIndex > oldEndIndex || startIndex > endIndex) {\n                    break outer;\n                }\n                oldEndChild = oldChildren[oldEndIndex];\n                startChild = normIndex(children, startIndex);\n                successful = true;\n            }\n        }\n\n        if (oldStartIndex > oldEndIndex) {\n            nextChild = (endIndex + 1 < childrenLength) ? normIndex(children, endIndex + 1) : outerNextChild;\n            // TODO create single html string in IE for better performance\n            for (i = startIndex; i <= endIndex; i++) {\n                createNode(normIndex(children, i), domElement, ns, nextChild);\n            }\n        } else if (startIndex > endIndex) {\n            removeChildren(domElement, oldChildren, oldStartIndex, oldEndIndex + 1);\n        } else {\n            var i, oldNextChild = oldChildren[oldEndIndex + 1],\n                oldChildrenMap = {};\n            for (i = oldEndIndex; i >= oldStartIndex; i--) {\n                oldChild = oldChildren[i];\n                oldChild.next = oldNextChild;\n                oldChildrenMap[oldChild.key] = oldChild;\n                oldNextChild = oldChild;\n            }\n            nextChild = (endIndex + 1 < childrenLength) ? normIndex(children, endIndex + 1) : outerNextChild;\n            for (i = endIndex; i >= startIndex; i--) {\n                child = children[i];\n                var key = child.key;\n                oldChild = oldChildrenMap[key];\n                if (oldChild) {\n                    oldChildrenMap[key] = null;\n                    oldNextChild = oldChild.next;\n                    updateNode(oldChild, child, domElement, ns, null, 0, nextChild);\n                    // TODO find solution without checking the dom\n                    if (domElement.nextSibling != (nextChild && nextChild.dom)) {\n                        moveChild(domElement, child, nextChild);\n                    }\n                } else {\n                    createNode(child, domElement, ns, nextChild);\n                }\n                nextChild = child;\n            }\n            for (i = oldStartIndex; i <= oldEndIndex; i++) {\n                oldChild = oldChildren[i];\n                if (oldChildrenMap[oldChild.key] !== null) {\n                    removeChild(domElement, oldChild);\n                }\n            }\n        }\n    }\n\n    var stopImmediate = false;\n\n    function eventHandler(event) {\n        event = getFixedEvent(event, this); // jshint ignore:line\n        var currentTarget = event.currentTarget,\n            eventHandlers = currentTarget.virtualNode.events[event.type];\n        if (isArray(eventHandlers)) {\n            for (var i = 0, len = eventHandlers.length; i < len; i++) {\n                callEventHandler(eventHandlers[i], currentTarget, event);\n                if (stopImmediate) {\n                    stopImmediate = false;\n                    break;\n                }\n            }\n        } else {\n            callEventHandler(eventHandlers, currentTarget, event);\n        }\n    }\n\n    // jshint ignore:start\n    function preventDefault() {\n        this.defaultPrevented = true;\n        this.returnValue = false;\n    }\n    function stopPropagation() {\n        this.cancelBubble = true;\n    }\n    function stopImmediatePropagation() {\n        stopImmediate = true;\n        this.stopPropagation();\n    }\n    // jshint ignore:end\n\n    function getFixedEvent(event, thisArg) {\n        if (!event) {\n            event = window.event;\n            if (!event.preventDefault) {\n                event.preventDefault = preventDefault;\n                event.stopPropagation = stopPropagation;\n                event.defaultPrevented = (event.returnValue === false);\n                event.target = event.srcElement;\n            }\n            event.currentTarget = thisArg.nodeType ? thisArg : event.target; // jshint ignore:line\n            // TODO further event normalization\n        }\n        event.stopImmediatePropagation = stopImmediatePropagation;\n        return event;\n    }\n\n    function callEventHandler(eventHandler, currentTarget, event) {\n        try {\n            if (eventHandler.call(currentTarget, event) === false) {\n                event.preventDefault();\n            }\n        } catch (e) {\n            console.error(e.stack || e);\n        }\n    }\n\n    function updateNode(oldNode, node, domParent, parentNs, nextChildChildren, nextChildIndex, outerNextChild, isOnlyDomChild) {\n        if (node === oldNode) {\n            return;\n        }\n        var tag = node.tag;\n        if (oldNode.tag !== tag) {\n            createNode(node, domParent, parentNs, oldNode, true);\n        } else {\n            var domNode = oldNode.dom,\n                oldChildren = oldNode.children, children = node.children;\n            switch (tag) {\n                case undefined:\n                    var nextChild = (nextChildChildren && nextChildIndex < nextChildChildren.length) ? nextChildChildren[nextChildIndex] : outerNextChild;\n                    updateFragment(oldNode, oldChildren, node, children, domParent, parentNs, nextChild);\n                    break;\n                case '#':\n                case '!':\n                    if (oldChildren !== children) {\n                        domNode.nodeValue = children;\n                    }\n                    node.dom = domNode;\n                    break;\n                case '<':\n                    if (oldChildren !== children) {\n                        createNode(node, domParent, null, oldNode, true, isOnlyDomChild);\n                    } else {\n                        node.dom = oldNode.dom;\n                        node.domLength = oldNode.domLength;\n                    }\n                    break;\n                default:\n                    var attrs = node.attrs, oldAttrs = oldNode.attrs;\n                    if ((attrs && attrs.is) !== (oldAttrs && oldAttrs.is)) {\n                        createNode(node, domParent, parentNs, oldNode, true);\n                        return;\n                    }\n\n                    var ns = oldNode.ns;\n                    if (ns) node.ns = ns;\n                    node.dom = domNode;\n                    if (children !== oldChildren) {\n                        updateChildren(domNode, node, ns, oldChildren, children, false);\n                    }\n\n                    var events = node.events, oldEvents = oldNode.events;\n                    if (attrs !== oldAttrs) {\n                        var changedHandlers = events && events.$changed;\n                        var changes = updateAttributes(domNode, tag, ns, attrs, oldAttrs, !!changedHandlers);\n                        if (changes) {\n                            triggerLight(changedHandlers, '$changed', domNode, node, 'changes', changes);\n                        }\n                    }\n                    if (events !== oldEvents) {\n                        updateEvents(domNode, node, events, oldEvents);\n                    }\n                    break;\n            }\n        }\n    }\n\n    function updateFragment(oldNode, oldChildren, node, children, domParent, parentNs, nextChild) {\n        children = normChildren(node, children, oldChildren);\n        if (children === oldChildren) {\n            return;\n        }\n        var childrenType = getChildrenType(children),\n            oldChildrenType = getChildrenType(oldChildren),\n            domNode, domLength;\n        if (parentNs) {\n            node.ns = parentNs;\n        }\n        if (childrenType === 0) {\n            if (oldChildrenType === 0) {\n                domNode = oldNode.dom;\n            } else {\n                removeAllChildren(domParent, oldChildren, oldChildrenType);\n                domNode = emptyTextNode();\n                insertChild(domParent, domNode, nextChild);\n            }\n        } else if (oldChildrenType === 0) {\n            domParent.removeChild(oldNode.dom);\n            createFragment(node, children, domParent, parentNs, nextChild);\n            return;\n        } else {\n            updateChildren(domParent, node, parentNs, oldChildren, children, true, nextChild);\n            children = node.children;\n            if (isArray(children)) {\n                domNode = children[0].dom;\n                domLength = 0;\n                // TODO should be done without extra loop/lazy\n                for (var i = 0, childrenLength = children.length; i < childrenLength; i++) {\n                    domLength += children[i].domLength || 1;\n                }\n            } else {\n                domNode = children.dom;\n                domLength = children.domLength;\n            }\n        }\n        node.dom = domNode;\n        node.domLength = domLength;\n    }\n\n    function destroyNode(node) {\n        if (!isString(node)) {\n            var domNode = node.dom;\n            if (domNode) {\n                var events = node.events;\n                if (events) {\n                    for (var eventType in events) {\n                        removeEventHandler(domNode, eventType);\n                    }\n                    var destroyedHandlers = events.$destroyed;\n                    if (destroyedHandlers) {\n                        triggerLight(destroyedHandlers, '$destroyed', domNode, node);\n                    }\n                }\n                if (domNode.virtualNode) {\n                    domNode.virtualNode = undefined;\n                }\n            }\n            var children = node.children;\n            if (children) {\n                destroyNodes(children, getChildrenType(children));\n            }\n        }\n    }\n\n    function destroyNodes(nodes, nodesType) {\n        if (nodesType > 1) {\n            for (var i = 0, len = nodes.length; i < len; i++) {\n                destroyNode(nodes[i]);\n            }\n        } else if (nodesType !== 0) {\n            destroyNode(getOnlyChild(nodes, nodesType));\n        }\n    }\n\n    function copyObjectProps(source, target) {\n        var key;\n        for (key in source) {\n            target[key] = source[key];\n        }\n        for (key in target) {\n            if (source[key] === undefined) {\n                target[key] = undefined;\n            }\n        }\n    }\n\n    function maintainFocus(previousActiveElement) {\n        if (previousActiveElement && previousActiveElement != document.body && previousActiveElement != document.activeElement) {\n            previousActiveElement.focus();\n        }\n    }\n\n    var vdom = {\n        create: function (node) {\n            node = norm(node);\n            createNode(node);\n            return node;\n        },\n        append: function (domParent, node) {\n            node = norm(node);\n            createNode(node, domParent);\n            return node;\n        },\n        update: function (oldNode, node) {\n            var activeElement = document.activeElement;\n            node = norm(node, oldNode);\n            updateNode(oldNode, node, oldNode.dom.parentNode);\n            copyObjectProps(node, oldNode);\n            maintainFocus(activeElement);\n            return oldNode;\n        },\n        updateChildren: function (element, children) {\n            var activeElement = document.activeElement;\n            var oldChildren = element.children;\n            if (oldChildren !== children) {\n                updateChildren(element.dom, element, element.ns, oldChildren, children, !element.tag);\n            }\n            maintainFocus(activeElement);\n        },\n        remove: function (node) {\n            var domParent = node.dom.parentNode;\n            removeChild(domParent, node);\n        }\n    };\n\n    // TODO create promise utility\n    /*\n    function isPromise(value) {\n        return value.then !== undefined;\n    }\n\n    if (origChild && isPromise(origChild)) {\n        child = {};\n        var immediate = true;\n        origChild.then(function (newChild) {\n            if (immediate) {\n                child = norm(newChild, oldChild);\n            } else if (children[i] === child) {\n                vdom.update(child, newChild);\n            }\n        });\n        immediate = false;\n    }\n\n    if (isPromise(children)) {\n        children = [];\n        var immediate = true;\n        origChildren.then(function (newChildren) {\n            if (immediate) {\n                children = normChildren(node, newChildren, oldChildren);\n            }\n            // TODO if the parent has been updated too, then this is misleading\n            else if (node.children === children) {\n                vdom.updateChildren(node, newChildren);\n            }\n        });\n        immediate = false;\n    }\n    */\n\n    return {\n        vdom: vdom\n    };\n}));\n"",""module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n""]}"
75d10a7018437a437e6b4717d72eff39398f6f16,2300285,		// http://stackoverflow.com/questions/2300285/how-do-i-escape-in-sql-server
0d0e5cd89e01be3de7d502391476755a38d29fb8,13728392,http://stackoverflow.com/questions/13728392/moving-average-or-running-mean
bfdeaee4e79b757e133a2902277f0b64bdb01939,10819959,# [^1]: http://stackoverflow.com/questions/10819959/diagnosing-r-package-build-warning-latex-errors-when-creating-pdf-version
3232576470ef98dfc407fad719a3ba52d1f3ade8,6005066,- https://stackoverflow.com/questions/6005066/adding-dictionaries-together-python
681039c3da37cee3a82e222ac36e0c3f440ef030,25105269,#http://stackoverflow.com/questions/25105269/silent-install-qt-run-installer-on-ubuntu-server
2e3f393a3073a93cad295772ceb224e2f1a75ac5,1869973,        # (http://stackoverflow.com/questions/1869973/recreating-postgres-copy-directly-in-python)
0ba3720499f51e0ea3395d2ea7976cee1b54c42d,263416,            // credit: http://stackoverflow.com/a/263416/677735
4a63977f574746223ed5904e87c3c5132b784e27,3944122,    // got from https://stackoverflow.com/questions/3944122/detect-left-mouse-button-press
80d9f56be7c10048b916ee91e211febcb259d823,2486901,    // Also tried a method from stackoverflow that caused a security error in all browsers. http://stackoverflow.com/questions/2486901/how-to-set-document-domain-for-a-dynamically-generated-iframe
704e06adf8a3186b639fea7640ecb461bf77d97d,20864892,//  http://stackoverflow.com/questions/20864892/is-it-a-good-practice-to-point-to-a-new-address-on-free-store-when-dynamicly-all
8a7ff9225eef68b0ea3ef7f6eb72e2a33cd47545,1729054,"- Your app must be packaged to a runnable jar file. That means, that all of your dependencies must be packaged in that jar file too and a main class must be defined in the jars manifest (See [this](http://stackoverflow.com/questions/1729054/including-dependencies-in-a-jar-with-maven) and [this](http://www.avajava.com/tutorials/lessons/how-do-i-specify-a-main-class-in-the-manifest-of-my-generated-jar-file.html) for help)"
19f72e03a680a90e0da476c1c91fa269685f19ee,6862770,        # See: http://stackoverflow.com/questions/6862770/python-3-let-json-object-accept-bytes-or-let-urlopen-output-strings
aae3f048aa6d6d88c4080be982920b3b6a99b164,35252888,"  <td><a href=""https://stackoverflow.com/q/35252888"">35252888</a></td>"
c2a2d75d89578c962bc70dd7b7ad3b1c14ee4c3e,51816807,# https://stackoverflow.com/questions/51816807/in-cmake-how-do-i-make-target-link-libraries-suppress-warnings-from-3rd-party
a1c72c89005f8aa2dd0eb05dd99f432b70f9ba18,16245767,      // al gore rhythm via http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript
f128bffda630d8f60a7c5dba8fe9fbcbbdfbbd41,10454518,				Source: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number
452a5416266cb0559c3991044ed83db1902952e3,34133809,// http://stackoverflow.com/questions/34133808/webpack-ots-parsing-error-loading-fonts/34133809#34133809
c9345b137a4334e3f89052869eaa79134dae7e6d,5661671, * Adapted from http://stackoverflow.com/q/5661671/130442
c39b2013ecc986990fdd4d316e68c5cbe7df2806,3330919,        // http://stackoverflow.com/a/3330919)
41e072d2612f3e5465d0f7e6100baa0215646f95,18704609,// mostly copied from: http://stackoverflow.com/questions/18701798/building-and-accessing-a-list-of-types-at-compile-time/18704609#18704609
8a7248ec66205270f6b55519e4e2aea49d1da96d,43216659,"{""version"":3,""file"":""infinitegrid.gridlayout.js"",""sources"":[""../node_modules/@egjs/component/dist/component.esm.js"",""../src/browser.ts"",""../src/consts.ts"",""../src/utils.ts"",""../src/ItemManager.ts"",""../src/DOMRenderer.ts"",""../src/Watcher.ts"",""../src/Infinite.ts"",""../src/AutoSizer.ts"",""../src/ImageLoaded.ts"",""../src/LayoutManager.ts"",""../src/InfiniteGrid.ts"",""../src/layouts/GridLayout.ts"",""../src/index.gridlayout.ts""],""sourcesContent"":[""/*\nCopyright (c) 2017 NAVER Corp.\n@egjs/component project is licensed under the MIT license\n\n@egjs/component JavaScript library\nhttps://naver.github.io/egjs-component\n\n@version 2.1.2\n*/\n/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nfunction isUndefined(value) {\n  return typeof value === \""undefined\"";\n}\n/**\n * A class used to manage events in a component\n * @ko 컴포넌트의 이벤트을 관리할 수 있게 하는 클래스\n * @alias eg.Component\n */\n\n\nvar Component =\n/*#__PURE__*/\nfunction () {\n  var Component =\n  /*#__PURE__*/\n  function () {\n    /**\n    * Version info string\n    * @ko 버전정보 문자열\n    * @name VERSION\n    * @static\n    * @type {String}\n    * @example\n    * eg.Component.VERSION;  // ex) 2.0.0\n    * @memberof eg.Component\n    */\n\n    /**\n     * @support {\""ie\"": \""7+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n     */\n    function Component() {\n      this._eventHandler = {};\n      this.options = {};\n    }\n    /**\n     * Triggers a custom event.\n     * @ko 커스텀 이벤트를 발생시킨다\n     * @param {String} eventName The name of the custom event to be triggered <ko>발생할 커스텀 이벤트의 이름</ko>\n     * @param {Object} customEvent Event data to be sent when triggering a custom event <ko>커스텀 이벤트가 발생할 때 전달할 데이터</ko>\n     * @return {Boolean} Indicates whether the event has occurred. If the stop() method is called by a custom event handler, it will return false and prevent the event from occurring. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">Ref</a> <ko>이벤트 발생 여부. 커스텀 이벤트 핸들러에서 stop() 메서드를 호출하면 'false'를 반환하고 이벤트 발생을 중단한다. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">참고</a></ko>\n     * @example\n    class Some extends eg.Component {\n     some(){\n     \tif(this.trigger(\""beforeHi\"")){ // When event call to stop return false.\n    \tthis.trigger(\""hi\"");// fire hi event.\n     \t}\n     }\n    }\n    const some = new Some();\n    some.on(\""beforeHi\"", (e) => {\n    if(condition){\n    \te.stop(); // When event call to stop, `hi` event not call.\n    }\n    });\n    some.on(\""hi\"", (e) => {\n    // `currentTarget` is component instance.\n    console.log(some === e.currentTarget); // true\n    });\n    // If you want to more know event design. You can see article.\n    // https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\n     */\n\n\n    var _proto = Component.prototype;\n\n    _proto.trigger = function trigger(eventName, customEvent) {\n      if (customEvent === void 0) {\n        customEvent = {};\n      }\n\n      var handlerList = this._eventHandler[eventName] || [];\n      var hasHandlerList = handlerList.length > 0;\n\n      if (!hasHandlerList) {\n        return true;\n      } // If detach method call in handler in first time then handler list calls.\n\n\n      handlerList = handlerList.concat();\n      customEvent.eventType = eventName;\n      var isCanceled = false;\n      var arg = [customEvent];\n      var i = 0;\n\n      customEvent.stop = function () {\n        isCanceled = true;\n      };\n\n      customEvent.currentTarget = this;\n\n      for (var _len = arguments.length, restParam = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        restParam[_key - 2] = arguments[_key];\n      }\n\n      if (restParam.length >= 1) {\n        arg = arg.concat(restParam);\n      }\n\n      for (i = 0; handlerList[i]; i++) {\n        handlerList[i].apply(this, arg);\n      }\n\n      return !isCanceled;\n    };\n    /**\n     * Executed event just one time.\n     * @ko 이벤트가 한번만 실행된다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       alert(\""hi\"");\n     }\n     thing() {\n       this.once(\""hi\"", this.hi);\n     }\n    }\n    var some = new Some();\n    some.thing();\n    some.trigger(\""hi\"");\n    // fire alert(\""hi\"");\n    some.trigger(\""hi\"");\n    // Nothing happens\n     */\n\n\n    _proto.once = function once(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var i;\n\n        for (i in eventHash) {\n          this.once(i, eventHash[i]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var self = this;\n        this.on(eventName, function listener() {\n          for (var _len2 = arguments.length, arg = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            arg[_key2] = arguments[_key2];\n          }\n\n          handlerToAttach.apply(self, arg);\n          self.off(eventName, listener);\n        });\n      }\n\n      return this;\n    };\n    /**\n     * Checks whether an event has been attached to a component.\n     * @ko 컴포넌트에 이벤트가 등록됐는지 확인한다.\n     * @param {String} eventName The name of the event to be attached <ko>등록 여부를 확인할 이벤트의 이름</ko>\n     * @return {Boolean} Indicates whether the event is attached. <ko>이벤트 등록 여부</ko>\n     * @example\n    class Some extends eg.Component {\n     some() {\n       this.hasOn(\""hi\"");// check hi event.\n     }\n    }\n     */\n\n\n    _proto.hasOn = function hasOn(eventName) {\n      return !!this._eventHandler[eventName];\n    };\n    /**\n     * Attaches an event to a component.\n     * @ko 컴포넌트에 이벤트를 등록한다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.on(\""hi\"",this.hi); //attach event\n     }\n    }\n    */\n\n\n    _proto.on = function on(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var name;\n\n        for (name in eventHash) {\n          this.on(name, eventHash[name]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var handlerList = this._eventHandler[eventName];\n\n        if (isUndefined(handlerList)) {\n          this._eventHandler[eventName] = [];\n          handlerList = this._eventHandler[eventName];\n        }\n\n        handlerList.push(handlerToAttach);\n      }\n\n      return this;\n    };\n    /**\n     * Detaches an event from the component.\n     * @ko 컴포넌트에 등록된 이벤트를 해제한다\n     * @param {eventName} eventName The name of the event to be detached <ko>해제할 이벤트의 이름</ko>\n     * @param {Function} handlerToDetach The handler function of the event to be detached <ko>해제할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself <ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.off(\""hi\"",this.hi); //detach event\n     }\n    }\n     */\n\n\n    _proto.off = function off(eventName, handlerToDetach) {\n      // All event detach.\n      if (isUndefined(eventName)) {\n        this._eventHandler = {};\n        return this;\n      } // All handler of specific event detach.\n\n\n      if (isUndefined(handlerToDetach)) {\n        if (typeof eventName === \""string\"") {\n          this._eventHandler[eventName] = undefined;\n          return this;\n        } else {\n          var eventHash = eventName;\n          var name;\n\n          for (name in eventHash) {\n            this.off(name, eventHash[name]);\n          }\n\n          return this;\n        }\n      } // The handler of specific event detach.\n\n\n      var handlerList = this._eventHandler[eventName];\n\n      if (handlerList) {\n        var k;\n        var handlerFunction;\n\n        for (k = 0; (handlerFunction = handlerList[k]) !== undefined; k++) {\n          if (handlerFunction === handlerToDetach) {\n            handlerList = handlerList.splice(k, 1);\n            break;\n          }\n        }\n      }\n\n      return this;\n    };\n\n    return Component;\n  }();\n\n  Component.VERSION = \""2.1.2\"";\n  return Component;\n}();\n\nexport default Component;\n//# sourceMappingURL=component.esm.js.map\n"",""import { WindowMockType } from \""./types\"";\n\nlet win: WindowMockType;\n\nif (typeof window === \""undefined\"") {\n\t// window is undefined in node.js\n\twin = {\n\t\tdocument: {},\n\t\tnavigator: {\n\t\t\tuserAgent: \""\"",\n\t\t},\n\t};\n} else {\n\twin = window;\n}\n\nexport { win as window };\nexport const document = win.document;\n"",""import { window, document } from \""./browser\"";\nimport { IAlign } from \""./types\"";\n\nconst ua = window.navigator.userAgent;\n\nexport const SUPPORT_COMPUTEDSTYLE = !!(\""getComputedStyle\"" in window);\nexport const SUPPORT_ADDEVENTLISTENER = !!(\""addEventListener\"" in document);\nexport const SUPPORT_PASSIVE = (() => {\n\tlet supportsPassiveOption = false;\n\n\ttry {\n\t\tif (SUPPORT_ADDEVENTLISTENER && Object.defineProperty) {\n\t\t\tdocument.addEventListener(\""test\"", null, Object.defineProperty({},\n\t\t\t\t\""passive\"", {\n\t\t\t\t\tget() {\n\t\t\t\t\t\tsupportsPassiveOption = true;\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t}\n\t} catch (e) {\n\t\t//\n\t}\n\treturn supportsPassiveOption;\n})();\n\nexport const IS_IE = /MSIE|Trident|Windows Phone|Edge/.test(ua);\nexport const IS_IOS = /iPhone|iPad/.test(ua);\nexport const IS_ANDROID2 = /Android 2\\./.test(ua);\nexport const CONTAINER_CLASSNAME = \""_eg-infinitegrid-container_\"";\nexport const IGNORE_CLASSNAME = \""_eg-infinitegrid-ignore_\"";\nexport const TRANSITION_NAME = \""_INFINITEGRID_TRANSITION\"";\n\nexport const APPEND = true;\nexport const PREPEND = false;\nexport const VERTICAL = \""vertical\"";\nexport const HORIZONTAL = \""horizontal\"";\nexport const CACHE = true;\nexport const NO_CACHE = false;\nexport const TRUSTED = true;\nexport const NO_TRUSTED = false;\nexport const MULTI = true;\nexport const SINGLE = false;\nexport const DUMMY_POSITION = -100000;\nexport const GROUPKEY_ATT = \""data-groupkey\"";\n\nexport const DEFAULT_OPTIONS = {\n\thorizontal: false,\n\tmargin: 0,\n};\n\nexport const agent = ua.toLowerCase();\nexport const isMobile = /mobi|ios|android/.test(agent);\n\nexport const ALIGN: IAlign = {\n\tSTART: \""start\"",\n\tCENTER: \""center\"",\n\tEND: \""end\"",\n\tJUSTIFY: \""justify\"",\n};\n\nexport const IDLE = 0;\nexport const LOADING_APPEND = 1;\nexport const LOADING_PREPEND = 2;\nexport const PROCESSING = 4;\n\nconst webkit = /applewebkit\\/([\\d|.]*)/g.exec(agent);\n\nexport const WEBKIT_VERSION = (webkit && parseInt(webkit[1], 10)) || 0;\nexport const DEFENSE_BROWSER = (WEBKIT_VERSION && WEBKIT_VERSION < 537);\n\ninterface ITransitionEnd {\n\ttransitionend: string;\n\twebkitTransitionEnd: string;\n\tMSTransitionEnd: string;\n\toTransitionEnd: string;\n\tmozTransitionEnd: string;\n}\n\nexport const [TRANSFORM, TRANSITION, TRANSITION_END] = (() => {\n\tconst properties: ITransitionEnd = {\n\t\ttransitionend: \""\"",\n\t\twebkitTransitionEnd: \""-webkit-\"",\n\t\tMSTransitionEnd: \""-ms-\"",\n\t\toTransitionEnd: \""-o-\"",\n\t\tmozTransitionEnd: \""-moz-\"",\n\t};\n\n\tfor (const property in properties) {\n\t\tconst prefix = properties[property as keyof ITransitionEnd];\n\n\t\tif (`on${property.toLowerCase()}` in window) {\n\t\t\treturn [`${prefix}transform`, `${prefix}transition`, property];\n\t\t}\n\t}\n\treturn [];\n})() as [\""transform\"", \""transition\"", \""transitionend\""];\n"",""\nimport { window, document } from \""./browser\"";\nimport {\n\tSUPPORT_COMPUTEDSTYLE,\n\tSUPPORT_ADDEVENTLISTENER,\n\tSUPPORT_PASSIVE,\n\tVERTICAL,\n\tHORIZONTAL,\n\tDEFAULT_OPTIONS,\n} from \""./consts\"";\nimport { IJQuery, IRectlProperties, InnerSizeType, ClientSizeType, ScrollSizeType, OffsetSizeType, WindowMockType } from \""./types\"";\n\nexport function toArray(nodes: HTMLCollection): HTMLElement[];\nexport function toArray<T extends Node>(nodes: T[] | NodeListOf<T>): T[];\nexport function toArray<T extends Node>(nodes: T[] | NodeListOf<T> | HTMLCollection) {\n\t// SCRIPT5014 in IE8\n\tconst array = [];\n\n\tif (nodes) {\n\t\tfor (let i = 0, len = nodes.length; i < len; i++) {\n\t\t\tarray.push(nodes[i]);\n\t\t}\n\t}\n\treturn array;\n}\nexport function matchHTML(html: string) {\n\treturn html.match(/^<([A-z]+)\\s*([^>]*)>/);\n}\n/**\n * Select or create element\n * @param {String|HTMLElement|jQuery} param\n *  when string given is as HTML tag, then create element\n *  otherwise it returns selected elements\n * @param {Boolean} multi\n * @returns {HTMLElement}\n */\nexport function $(param: WindowMockType, multi?: false): WindowMockType;\nexport function $(\n\tparam: string | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti: true,\n): HTMLElement[];\nexport function $(\n\tparam: string | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti?: false,\n): HTMLElement;\nexport function $(\n\tparam: string | HTMLElement | WindowMockType | IJQuery,\n\tmulti?: false,\n): HTMLElement | WindowMockType;\nexport function $(\n\tparam: string | WindowMockType | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti = false,\n): HTMLElement | WindowMockType | HTMLElement[] {\n\tlet el: WindowMockType | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>;\n\n\tif (typeof param === \""string\"") { // String (HTML, Selector)\n\t\t// check if string is HTML tag format\n\t\tconst match = matchHTML(param);\n\n\t\t// creating element\n\t\tif (match) { // HTML\n\t\t\tconst dummy = document.createElement(\""div\"");\n\n\t\t\tdummy.innerHTML = param;\n\t\t\tel = dummy.childNodes as NodeListOf<HTMLElement>;\n\t\t} else { // Selector\n\t\t\tel = document.querySelectorAll(param);\n\t\t}\n\t\tif (multi) {\n\t\t\treturn toArray(el as NodeListOf<HTMLElement>);\n\t\t} else {\n\t\t\treturn el && (el as NodeListOf<HTMLElement>)[0];\n\t\t}\n\t} else if (isWindow(param)) { // window\n\t\tel = param;\n\t} else if (isJQuery(param)) { // jQuery\n\t\tel = multi ? $(param.toArray(), true) :\n\t\t\t$(param.get(0), false);\n\t} else if (Array.isArray(param)) {\n\t\tel = param.map(v => $(v));\n\t\tif (!multi) {\n\t\t\tel = el.length >= 1 ? (el as HTMLElement[])[0] : undefined;\n\t\t}\n\t} else if (param.nodeName &&\n\t\t(param.nodeType === 1 || param.nodeType === 9)) { // HTMLElement, Document\n\t\tel = param;\n\t}\n\treturn el;\n}\nexport function addEvent(\n\telement: Element | WindowMockType,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n\teventListenerOptions?: boolean | { [key: string]: any },\n) {\n\tif (SUPPORT_ADDEVENTLISTENER) {\n\t\tlet options = eventListenerOptions || false;\n\n\t\tif (typeof eventListenerOptions === \""object\"") {\n\t\t\toptions = SUPPORT_PASSIVE ? eventListenerOptions : false;\n\t\t}\n\t\telement.addEventListener(type, handler, options);\n\t} else if ((element as any).attachEvent) {\n\t\t(element as any).attachEvent(`on${type}`, handler);\n\t} else {\n\t\t(element as any)[`on${type}`] = handler;\n\t}\n}\nexport function removeEvent(\n\telement: Element | WindowMockType,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n) {\n\tif (element.removeEventListener) {\n\t\telement.removeEventListener(type, handler, false);\n\t} else if ((element as any).detachEvent) {\n\t\t(element as any).detachEvent(`on${type}`, handler);\n\t} else {\n\t\t(element as any)[`on${type}`] = null;\n\t}\n}\nexport function addOnceEvent(\n\telement: Element,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n\teventListenerOptions?: boolean | { [key: string]: any },\n) {\n\tconst callback = (e: any) => {\n\t\tremoveEvent(element, type, callback);\n\t\thandler(e);\n\t};\n\n\taddEvent(element, type, callback, eventListenerOptions);\n}\nexport function scroll(el: HTMLElement | WindowMockType, horizontal = false) {\n\tconst prop = `scroll${horizontal ? \""Left\"" : \""Top\""}` as \""scrollLeft\"" | \""scrollTop\"";\n\n\tif (isWindow(el)) {\n\t\treturn window[horizontal ? \""pageXOffset\"" : \""pageYOffset\""] || document.body[prop] || document.documentElement[prop];\n\t} else {\n\t\treturn el[prop];\n\t}\n}\nexport function scrollTo(el: WindowMockType | Element, x: number, y: number) {\n\tif (isWindow(el)) {\n\t\tel.scroll(x, y);\n\t} else {\n\t\tel.scrollLeft = x;\n\t\tel.scrollTop = y;\n\t}\n}\nexport function scrollBy(el: WindowMockType | Element, x: number, y: number) {\n\tif (isWindow(el)) {\n\t\tel.scrollBy(x, y);\n\t} else {\n\t\tel.scrollLeft += x;\n\t\tel.scrollTop += y;\n\t}\n}\nexport function getStyles(el: Element) {\n\treturn (SUPPORT_COMPUTEDSTYLE ?\n\t\twindow.getComputedStyle(el) : (el as any).currentStyle) || {};\n}\nfunction _getSize(el: WindowMockType | Document | HTMLElement, name: \""Width\"" | \""Height\"", isOffset?: boolean) {\n\tif (isWindow(el)) { // WINDOW\n\t\treturn window[`inner${name}` as InnerSizeType] || document.body[`client${name}` as ClientSizeType];\n\t} else if (isDocument(el)) { // DOCUMENT_NODE\n\t\tconst doc = (el as Document).documentElement;\n\t\tconst body = (el as Document).body;\n\n\t\treturn Math.max(\n\t\t\tbody[`scroll${name}` as ScrollSizeType], doc[`scroll${name}` as ScrollSizeType],\n\t\t\tbody[`offset${name}` as OffsetSizeType], doc[`offset${name}` as OffsetSizeType],\n\t\t\tdoc[`client${name}` as ClientSizeType],\n\t\t);\n\t} else { // NODE\n\t\tlet size = 0;\n\n\t\tif (isOffset) {\n\t\t\tconst clientRect = el.getBoundingClientRect();\n\n\t\t\tsize = name === \""Width\"" ? clientRect.right - clientRect.left : clientRect.bottom - clientRect.top;\n\t\t} else {\n\t\t\tsize = el[`client${name}` as ClientSizeType] || el[`offset${name}` as OffsetSizeType];\n\t\t}\n\t\tif (size) {\n\t\t\treturn size;\n\t\t}\n\t\tconst cssSize = getStyles(el)[name.toLowerCase()];\n\n\t\treturn (~cssSize.indexOf(\""px\"") && parseFloat(cssSize)) || 0;\n\t}\n}\n\nexport function innerWidth(el: WindowMockType | Document | HTMLElement) {\n\treturn _getSize(el, \""Width\"", false);\n}\nexport function innerHeight(el: WindowMockType | Document | HTMLElement) {\n\treturn _getSize(el, \""Height\"", false);\n}\nexport function outerWidth(el: WindowMockType | Document | HTMLElement) {\n\treturn _getSize(el, \""Width\"", true);\n}\nexport function outerHeight(el: WindowMockType | Document | HTMLElement) {\n\treturn _getSize(el, \""Height\"", true);\n}\nexport function getSize(el: HTMLElement) {\n\treturn {\n\t\twidth: outerWidth(el),\n\t\theight: outerHeight(el),\n\t};\n}\nexport const STYLE: {\n\tvertical: IRectlProperties,\n\thorizontal: IRectlProperties,\n} = {\n\tvertical: {\n\t\tstartPos1: \""top\"",\n\t\tendPos1: \""bottom\"",\n\t\tsize1: \""height\"",\n\t\tstartPos2: \""left\"",\n\t\tendPos2: \""right\"",\n\t\tsize2: \""width\"",\n\t},\n\thorizontal: {\n\t\tstartPos1: \""left\"",\n\t\tendPos1: \""right\"",\n\t\tsize1: \""width\"",\n\t\tstartPos2: \""top\"",\n\t\tendPos2: \""bottom\"",\n\t\tsize2: \""height\"",\n\t},\n};\n\nexport function getStyleNames(isHorizontal: boolean): IRectlProperties {\n\treturn STYLE[isHorizontal ? HORIZONTAL : VERTICAL];\n}\nexport function assign<A, B>(target: A, source: B): A & B;\nexport function assign<A, B, C>(target: A, source1: B, source2: C): A & B & C;\nexport function assign<A, B, C, D>(target: A, source1: B, source2: C, source3: D): A & B & C & D;\nexport function assign(target: { [key: string]: any }, ...sources: Array<{ [key: string]: any }>): { [key: string]: any };\nexport function assign(target: { [key: string]: any }, ...sources: Array<{ [key: string]: any }>) {\n\tsources.forEach(source => {\n\t\tfor (const key in source) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t});\n\treturn target;\n}\nexport function assignOptions<A extends { [key: string]: any }, B extends { [key: string]: any }>(\n\tdefaultOptions: A, options: B): typeof DEFAULT_OPTIONS & A & B {\n\treturn assign({},\n\t\tDEFAULT_OPTIONS,\n\t\tdefaultOptions,\n\t\toptions);\n}\n\nexport function toZeroArray(outline?: number[]) {\n\tif (!outline || !outline.length) {\n\t\treturn [0];\n\t}\n\treturn outline;\n}\nexport function cloneItems<T extends { [key: string]: any }>(items: T[]) {\n\treturn items.map(item => assign({}, item));\n}\nexport function isJQuery(el: any): el is IJQuery {\n\treturn (typeof (window as any).jQuery === \""function\"" && el instanceof (window as any).jQuery) ||\n\t\tel.constructor.prototype.jquery && el.toArray;\n}\nexport function isWindow(el: any): el is WindowMockType {\n\treturn el === window;\n}\nexport function isDocument(el: Node): el is Document {\n\treturn el.nodeType === 9;\n}\n\nexport function fill<T>(arr: T[], value: T) {\n\tconst length = arr.length;\n\n\tfor (let i = length - 1; i >= 0; --i) {\n\t\tarr[i] = value;\n\t}\n\n\treturn arr;\n}\n\nexport function isUndefined(target: any): target is undefined {\n\treturn typeof target === \""undefined\"";\n}\n"",""import { MULTI, GROUPKEY_ATT, IGNORE_CLASSNAME, DUMMY_POSITION } from \""./consts\"";\nimport { $, toArray, isUndefined, assign } from \""./utils\"";\nimport { CursorType, IJQuery, IInfiniteGridGroup, IInfiniteGridItem, IItemManagerStatus } from \""./types\"";\n\nexport default class ItemManager {\n\tpublic static from(\n\t\telements: HTMLElement[] | string | string[] | IJQuery, selector: string,\n\t\t{ groupKey }: { groupKey: string | number }) {\n\t\tconst filted = ItemManager.selectItems($(elements, MULTI), selector);\n\n\t\t// Item Structure\n\t\treturn toArray(filted).map(el => ({\n\t\t\tel,\n\t\t\tgroupKey,\n\t\t\tcontent: el.outerHTML,\n\t\t\trect: {\n\t\t\t\ttop: DUMMY_POSITION,\n\t\t\t\tleft: DUMMY_POSITION,\n\t\t\t},\n\t\t}));\n\t}\n\tpublic static selectItems(elements: HTMLElement[], selector?: string) {\n\t\treturn elements.filter(v => {\n\t\t\tconst classNames = v.className.split(\"" \"");\n\n\t\t\tif (classNames.some(c => c === IGNORE_CLASSNAME)) {\n\t\t\t\treturn false;\n\t\t\t} else if (!selector || selector === \""*\"") {\n\t\t\t\treturn v;\n\t\t\t} else {\n\t\t\t\treturn classNames.some(c => c === selector);\n\t\t\t}\n\t\t});\n\t}\n\tpublic static pluck<A extends { [key: string]: any }, B extends keyof A>(data: A[], property: B):\n\t\tA[B] extends any[] ? A[B] : Array<A[B]> {\n\t\treturn data.reduce((acc, v) => acc.concat(v[property]), []) as any;\n\t}\n\tpublic _data: IInfiniteGridGroup[];\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\tpublic getStatus(startKey?: string | number, endKey?: string | number): IItemManagerStatus {\n\t\tconst datas = this._data;\n\t\tconst startIndex = Math.max(this.indexOf(startKey), 0);\n\t\tconst endIndex = this.indexOf(endKey) + 1 || datas.length;\n\n\t\treturn {\n\t\t\t_data: datas.slice(startIndex, endIndex).map(data => {\n\t\t\t\tconst items = data.items.map(item => {\n\t\t\t\t\tconst item2 = assign({}, item);\n\n\t\t\t\t\tdelete item2.el;\n\t\t\t\t\treturn item2;\n\t\t\t\t});\n\t\t\t\tconst data2 = assign({}, data);\n\n\t\t\t\tdata2.items = items;\n\t\t\t\treturn data2;\n\t\t\t}),\n\t\t};\n\t}\n\tpublic setStatus(status: IItemManagerStatus) {\n\t\tconst data = status._data;\n\n\t\tthis.set(data);\n\t}\n\tpublic size() {\n\t\treturn this._data.length;\n\t}\n\tpublic fit(base: number, horizontal: boolean) {\n\t\tif (!this._data.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst property = horizontal ? \""left\"" : \""top\"";\n\n\t\tif (base !== 0) {\n\t\t\tthis._data = this._data.map(v => {\n\t\t\t\tv.items = v.items.map(item => {\n\t\t\t\t\titem.rect[property] -= base;\n\t\t\t\t\treturn item;\n\t\t\t\t});\n\t\t\t\tv.outlines.start = v.outlines.start.map(start => start - base);\n\t\t\t\tv.outlines.end = v.outlines.end.map(end => end - base);\n\t\t\t\treturn v;\n\t\t\t});\n\t\t}\n\t}\n\tpublic pluck<T extends keyof IInfiniteGridGroup>(property: T, start?: number, end?: number) {\n\t\tconst data = isUndefined(start) ? this._data :\n\t\t\tthis._data.slice(start, (isUndefined(end) ? start : end) + 1);\n\n\t\treturn ItemManager.pluck(data, property);\n\t}\n\tpublic getOutline(index: number, property: keyof IInfiniteGridGroup[\""outlines\""]) {\n\t\tconst data = this._data[index];\n\n\t\treturn data ? data.outlines[property] : [];\n\t}\n\tpublic getEdgeIndex(cursor: CursorType, start: number, end: number) {\n\t\tconst prop = cursor === \""start\"" ? \""min\"" : \""max\"";\n\t\tlet index = -1;\n\t\tlet targetValue = cursor === \""start\"" ? Infinity : -Infinity;\n\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tconst value = Math[prop](...this.getOutline(i, cursor));\n\n\t\t\tif ((cursor === \""start\"" && targetValue > value) ||\n\t\t\t\t(cursor === \""end\"" && targetValue < value)) {\n\t\t\t\ttargetValue = value;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\tpublic getEdgeValue(cursor: CursorType, start: number, end: number) {\n\t\tconst outlines = this.pluck(\""outlines\"", this.getEdgeIndex(cursor, start, end))\n\t\t\t.reduce<number[]>((acc, v) => acc.concat(v[cursor]), []);\n\n\t\treturn outlines.length ? Math[cursor === \""start\"" ? \""min\"" : \""max\""](...outlines) : 0;\n\t}\n\tpublic clearOutlines(startCursor = -1, endCursor = -1) {\n\t\tconst datas = this.get();\n\n\t\tdatas.forEach((group, cursor) => {\n\t\t\tif (startCursor <= cursor && cursor <= endCursor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgroup.items.forEach(item => {\n\t\t\t\titem.rect.top = DUMMY_POSITION;\n\t\t\t\titem.rect.left = DUMMY_POSITION;\n\t\t\t});\n\t\t\tgroup.outlines.start = [];\n\t\t\tgroup.outlines.end = [];\n\t\t});\n\t}\n\tpublic getMaxEdgeValue() {\n\t\tconst groups = this.get();\n\t\tconst length = groups.length;\n\n\t\tfor (let i = length - 1; i >= 0; --i) {\n\t\t\tconst end = groups[i].outlines.end;\n\n\t\t\tif (end.length) {\n\t\t\t\tconst pos = Math.max(...end);\n\n\t\t\t\treturn pos;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\tpublic append(layouted: IInfiniteGridGroup) {\n\t\tthis._data.push(layouted);\n\t\treturn layouted.items;\n\t}\n\tpublic prepend(layouted: IInfiniteGridGroup) {\n\t\tthis._data.unshift(layouted);\n\t\treturn layouted.items;\n\t}\n\tpublic clear() {\n\t\tthis._data = [];\n\t}\n\tpublic remove(element: HTMLElement, start: number, end: number) {\n\t\tlet items: IInfiniteGridItem[] = [];\n\t\tlet groups: IInfiniteGridGroup[] = [];\n\t\tconst key = element.getAttribute(GROUPKEY_ATT);\n\t\tconst datas = this.get(start, end)\n\t\t\t.filter(v => String(v.groupKey) === key);\n\n\t\tif (!datas.length) {\n\t\t\treturn { items, groups };\n\t\t}\n\t\tconst data = datas[0];\n\n\t\tconst length = data.items.length;\n\t\tlet idx = -1;\n\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tif (data.items[i].el === element) {\n\t\t\t\tidx = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (idx >= 0) {\n\t\t\t// remove item information\n\t\t\titems = data.items.splice(idx, 1);\n\n\t\t\tif (!data.items.length) {\n\t\t\t\tthis._data.splice(this.indexOf(data), 1);\n\t\t\t\tgroups = [data];\n\t\t\t} else {\n\t\t\t\tthis.set(data, key);\n\t\t\t}\n\t\t}\n\t\treturn { items, groups };\n\t}\n\tpublic indexOf(data: IInfiniteGridGroup | string | number) {\n\t\tconst groupKey = typeof data === \""object\"" ? data.groupKey : data;\n\t\tconst datas = this._data;\n\t\tconst length = datas.length;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tif (groupKey === datas[i].groupKey) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tpublic get(start?: number, end?: number) {\n\t\treturn isUndefined(start) ? this._data :\n\t\t\tthis._data.slice(start, (isUndefined(end) ? start : end) + 1);\n\t}\n\tpublic set(data: IInfiniteGridGroup | IInfiniteGridGroup[], key?: string | number) {\n\t\tif (!Array.isArray(data)) {\n\t\t\tif (!isUndefined(key)) {\n\t\t\t\tconst len = this._data.length;\n\t\t\t\tlet idx = -1;\n\n\t\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\t\tif (this._data[i].groupKey === key) {\n\t\t\t\t\t\tidx = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tidx > 0 && (this._data[idx] = data);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._data = data.concat();\n\t\t}\n\t}\n\tpublic getData(index: number) {\n\t\treturn this._data[index];\n\t}\n}\n"",""import {\n\tAPPEND,\n\tPREPEND,\n\tDUMMY_POSITION,\n\tMULTI,\n\tGROUPKEY_ATT,\n\tCONTAINER_CLASSNAME,\n\tTRANSITION_NAME,\n\tTRANSITION,\n\tTRANSITION_END,\n\tTRANSFORM,\n} from \""./consts\"";\nimport { window, document } from \""./browser\"";\nimport {\n\t$,\n\tinnerHeight,\n\tinnerWidth,\n\tgetSize,\n\tgetStyles,\n\taddOnceEvent,\n\tassign,\n} from \""./utils\"";\nimport { RectType, IPosition, ISize, IJQuery, IInfiniteGridItem, WindowMockType, IDOMRendererStatus, IDOMRendererSize } from \""./types\"";\n\nexport function resetSize(item: IInfiniteGridItem) {\n\titem.orgSize = null;\n\titem.size = null;\n}\nexport interface IDOMRendererOptions {\n\tisEqualSize: boolean;\n\tisConstantSize: boolean;\n\thorizontal: boolean;\n\tcontainer: boolean | HTMLElement;\n}\n\nexport interface IDOMRendererOrgStyle {\n\tposition?: CSSStyleDeclaration[\""position\""];\n\toverflowX?: CSSStyleDeclaration[\""overflowX\""];\n\toverflowY?: CSSStyleDeclaration[\""overflowY\""];\n}\n\nfunction createContainer(element: HTMLElement) {\n\tconst container = document.createElement(\""div\"");\n\n\tcontainer.className = CONTAINER_CLASSNAME;\n\tcontainer.style.position = \""relative\"";\n\tcontainer.style.height = \""100%\"";\n\n\tconst children = element.children;\n\tconst length = children.length;\t// for IE8\n\n\tfor (let i = 0; i < length; i++) {\n\t\tcontainer.appendChild(children[0]);\n\t}\n\telement.appendChild(container);\n\treturn container;\n}\nfunction render(properties: RectType[], rect: IInfiniteGridItem[\""rect\""], styles: HTMLElement[\""style\""]) {\n\tproperties.forEach(p => {\n\t\t(p in rect) && (styles[p] = `${rect[p]}px`);\n\t});\n}\nfunction setTransition(styles: HTMLElement[\""style\""], transitionDuration?: number, pos1?: IPosition, pos2?: IPosition) {\n\tstyles[`${TRANSITION}-property`] = transitionDuration ? `${TRANSFORM},width,height` : \""\"";\n\tstyles[`${TRANSITION}-duration`] = transitionDuration ? `${transitionDuration}s` : \""\"";\n\tstyles[`${TRANSITION}-delay`] = transitionDuration ? `0s` : \""\"";\n\tstyles[TRANSFORM] = transitionDuration ? `translate(${pos1.left - pos2.left}px,${pos1.top - pos2.top}px)` : \""\"";\n}\n\nexport default class DOMRenderer {\n\tpublic static renderItem(item: IInfiniteGridItem, rect: IInfiniteGridItem[\""rect\""], transitionDuration?: number) {\n\t\tif (!item.el) {\n\t\t\treturn;\n\t\t}\n\t\tconst { el, prevRect } = item;\n\t\tconst styles = el.style;\n\n\t\t// for debugging\n\t\tel.setAttribute(GROUPKEY_ATT, `${item.groupKey}`);\n\t\tstyles.position = \""absolute\"";\n\t\trender([\""width\"", \""height\""], rect, styles);\n\t\tif (transitionDuration && TRANSITION && prevRect) {\n\t\t\tsetTransition(styles, transitionDuration, rect as IPosition, prevRect as IPosition);\n\t\t\tif ((el as any)[TRANSITION_NAME]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tel[TRANSITION_NAME] = true;\n\t\t\taddOnceEvent(el, TRANSITION_END, () => {\n\t\t\t\tconst itemRect = item.rect;\n\n\t\t\t\tsetTransition(styles);\n\t\t\t\trender([\""left\"", \""top\""], itemRect, styles);\n\t\t\t\titem.prevRect = itemRect;\n\t\t\t\tel[TRANSITION_NAME] = false;\n\t\t\t});\n\t\t} else {\n\t\t\trender([\""left\"", \""top\""], rect, styles);\n\t\t\titem.prevRect = rect;\n\t\t}\n\t}\n\tpublic static renderItems(items: IInfiniteGridItem[], transitionDuration?: number) {\n\t\titems.forEach(item => {\n\t\t\tDOMRenderer.renderItem(item, item.rect, transitionDuration);\n\t\t});\n\t}\n\tpublic static removeItems(items: IInfiniteGridItem[]) {\n\t\titems.forEach(item => {\n\t\t\tif (item.el) {\n\t\t\t\tDOMRenderer.removeElement(item.el);\n\t\t\t\titem.el = null;\n\t\t\t}\n\t\t});\n\t}\n\tpublic static removeElement(element: HTMLElement) {\n\t\tconst parentNode = element && element.parentNode;\n\n\t\tif (!parentNode) {\n\t\t\treturn;\n\t\t}\n\t\tparentNode.removeChild(element);\n\t}\n\tpublic static createElements(items: IInfiniteGridItem[]) {\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst noElementItems = items.filter(item => !item.el);\n\n\t\tif (!noElementItems.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst elements = $(noElementItems.map(({ content }) =>\n\t\t\tcontent.replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, \""\"")).join(\""\""), MULTI);\n\n\t\tnoElementItems.forEach((item, index) => {\n\t\t\titem.el = elements[index];\n\t\t});\n\t}\n\tpublic container: HTMLElement;\n\tpublic view: WindowMockType | HTMLElement;\n\tpublic options: IDOMRendererOptions = {\n\t\tisEqualSize: false,\n\t\tisConstantSize: false,\n\t\thorizontal: false,\n\t\tcontainer: false,\n\t};\n\tpublic _size: IDOMRendererSize = {\n\t\tcontainer: -1,\n\t\tview: -1,\n\t\tviewport: -1,\n\t\titem: null,\n\t};\n\tpublic _orgStyle: IDOMRendererOrgStyle = {};\n\tconstructor(element: string | HTMLElement | IJQuery, options: IDOMRendererOptions) {\n\t\tassign(this.options, options);\n\t\tthis._init(element);\n\t\tthis.resize();\n\t}\n\tpublic getStatus() {\n\t\treturn {\n\t\t\tcssText: this.container.style.cssText,\n\t\t\t_size: assign({}, this._size),\n\t\t};\n\t}\n\tpublic setStatus(status: IDOMRendererStatus) {\n\t\tthis.container.style.cssText = status.cssText;\n\t\tassign(this._size, status._size);\n\t}\n\tpublic updateSize(items: IInfiniteGridItem[]) {\n\t\tconst { isEqualSize, isConstantSize } = this.options;\n\t\tconst size = this._size;\n\n\t\treturn items.map(item => {\n\t\t\tif (!item.el) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t\tif (isEqualSize && !size.item) {\n\t\t\t\tsize.item = getSize(item.el);\n\t\t\t}\n\t\t\titem.size = (isEqualSize && assign({}, size.item)) ||\n\t\t\t\t(isConstantSize && item.orgSize && assign({}, item.orgSize)) ||\n\t\t\t\tgetSize(item.el);\n\t\t\tif (!item.orgSize) {\n\t\t\t\titem.orgSize = assign({}, item.size);\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t}\n\tpublic append(items: IInfiniteGridItem[]) {\n\t\tthis._insert(items, APPEND, {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t});\n\t}\n\tpublic prepend(items: IInfiniteGridItem[]) {\n\t\tthis._insert(items, PREPEND, {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t});\n\t}\n\tpublic createAndInsert(items: IInfiniteGridItem[], isAppend?: boolean) {\n\t\tDOMRenderer.createElements(items);\n\n\t\tDOMRenderer.renderItems(items);\n\t\tthis._insert(items, isAppend);\n\t}\n\tpublic getViewSize() {\n\t\treturn this._size.view;\n\t}\n\tpublic getViewportSize() {\n\t\treturn this._size.viewport;\n\t}\n\tpublic getContainerSize() {\n\t\treturn this._size.container;\n\t}\n\tpublic setContainerSize(size: number) {\n\t\tthis._size.container = size;\n\t\tthis.container.style[this.options.horizontal ? \""width\"" : \""height\""] = `${size}px`;\n\t}\n\tpublic resize() {\n\t\tconst horizontal = this.options.horizontal;\n\t\tconst view = this.view;\n\t\tconst size = this._calcSize();\n\n\t\tif (size === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst isResize = size !== this._size.viewport;\n\n\t\tif (isResize) {\n\t\t\tthis._size = {\n\t\t\t\tviewport: size,\n\t\t\t\titem: null,\n\t\t\t};\n\t\t}\n\t\tthis._size.view = horizontal ? innerWidth(view) : innerHeight(view);\n\t\treturn isResize;\n\t}\n\tpublic isNeededResize() {\n\t\treturn this._calcSize() !== this._size.viewport;\n\t}\n\tpublic clear() {\n\t\tthis.container.innerHTML = \""\"";\n\t\tthis.container.style[this.options.horizontal ? \""width\"" : \""height\""] = \""\"";\n\n\t\tthis._size = {\n\t\t\titem: null,\n\t\t\tviewport: -1,\n\t\t\tcontainer: -1,\n\t\t\tview: -1,\n\t\t};\n\t}\n\tpublic destroy() {\n\t\tthis.clear();\n\t\tconst container = this.options.container;\n\n\t\tfor (const p in this._orgStyle) {\n\t\t\t(this[container ? \""view\"" : \""container\""] as HTMLElement).style[p as keyof IDOMRendererOrgStyle] =\n\t\t\t\tthis._orgStyle[p as keyof IDOMRendererOrgStyle];\n\t\t}\n\t\tcontainer && this.container.parentNode.removeChild(this.container);\n\t}\n\tprivate _init(el: HTMLElement | IJQuery | string) {\n\t\tconst element = $(el);\n\t\tconst style = getStyles(element);\n\t\tconst { container, horizontal } = this.options;\n\n\t\tif (style.position === \""static\"") {\n\t\t\tthis._orgStyle.position = element.style.position;\n\t\t\telement.style.position = \""relative\"";\n\t\t}\n\t\tif (container) {\n\t\t\tconst target = horizontal ? [\""X\"", \""Y\""] : [\""Y\"", \""X\""];\n\n\t\t\tthis._orgStyle.overflowX = element.style.overflowX;\n\t\t\tthis._orgStyle.overflowY = element.style.overflowY;\n\t\t\telement.style[`overflow${target[0]}` as \""overflowX\"" | \""overflowY\""] = \""scroll\"";\n\t\t\telement.style[`overflow${target[1]}` as \""overflowX\"" | \""overflowY\""] = \""hidden\"";\n\t\t\tthis.view = element;\n\t\t\tthis.container = container === true ? createContainer(this.view as HTMLElement) : container;\n\t\t} else {\n\t\t\tthis.view = window;\n\t\t\tthis.container = element;\n\t\t}\n\t}\n\tprivate _insert(items: IInfiniteGridItem[], isAppend?: boolean, styles?: IInfiniteGridItem[\""rect\""]) {\n\t\tconst container = this.container;\n\t\tconst df = document.createDocumentFragment();\n\n\t\titems.forEach(item => {\n\t\t\tstyles && DOMRenderer.renderItem(item, styles);\n\t\t\tisAppend ? df.appendChild(item.el) : df.insertBefore(item.el, df.firstChild);\n\t\t});\n\t\tisAppend ?\n\t\t\tcontainer.appendChild(df) :\n\t\t\tcontainer.insertBefore(df, container.firstChild);\n\t}\n\tprivate _calcSize() {\n\t\treturn this.options.horizontal ?\n\t\t\tinnerHeight(this.container) : innerWidth(this.container);\n\t}\n}\n"",""import {\n\tIS_IOS,\n} from \""./consts\"";\nimport {\n\twindow,\n} from \""./browser\"";\nimport {\n\taddEvent,\n\tremoveEvent,\n\tscroll,\n\tscrollTo,\n\tscrollBy,\n\tassign,\n} from \""./utils\"";\nimport { WindowMockType, IWatchStatus } from \""./types\"";\n\nexport interface IWatcherOptions {\n\tcontainer: HTMLElement;\n\tisOverflowScroll: boolean;\n\thorizontal: boolean;\n\tresize: () => void;\n\tcheck: (e?: {\n\t\tisForward: boolean,\n\t\tscrollPos: number,\n\t\torgScrollPos: number,\n\t\thorizontal: boolean,\n\t}) => void;\n}\n\nexport default class Watcher {\n\tpublic options: IWatcherOptions;\n\tprivate _timer: {\n\t\tresize: any;\n\t};\n\tprivate _containerOffset: number;\n\tprivate _view: WindowMockType | HTMLElement;\n\tprivate _isScrollIssue: boolean;\n\tprivate _prevPos: number;\n\tconstructor(view: WindowMockType | HTMLElement, options: Partial<IWatcherOptions> = {}) {\n\t\tassign(this.options = {\n\t\t\tcontainer: view as HTMLElement,\n\t\t\tresize: () => void 0,\n\t\t\tcheck: () => void 0,\n\t\t\tisOverflowScroll: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\t\tthis._timer = {\n\t\t\tresize: null,\n\t\t};\n\t\tthis.reset();\n\t\tthis._containerOffset = 0;\n\t\tthis._view = view;\n\t\tthis._isScrollIssue = IS_IOS;\n\t\tthis._onCheck = this._onCheck.bind(this);\n\t\tthis._onResize = this._onResize.bind(this);\n\t\tthis.attachEvent();\n\t\tthis.resize();\n\t\tthis.setScrollPos();\n\t}\n\tpublic getStatus(): IWatchStatus {\n\t\treturn {\n\t\t\t_prevPos: this._prevPos,\n\t\t\tscrollPos: this.getOrgScrollPos(),\n\t\t};\n\t}\n\tpublic setStatus(status: IWatchStatus, applyScrollPos = true) {\n\t\tthis._prevPos = status._prevPos;\n\t\tapplyScrollPos && this.scrollTo(status.scrollPos);\n\t}\n\tpublic scrollBy(pos: number) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollBy(this._view, arrPos[0], arrPos[1]);\n\t\tthis.setScrollPos();\n\t}\n\tpublic scrollTo(pos: number) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollTo(this._view, arrPos[0], arrPos[1]);\n\t}\n\tpublic getScrollPos() {\n\t\treturn this._prevPos;\n\t}\n\tpublic setScrollPos(pos = this.getOrgScrollPos()) {\n\t\tlet rawPos = pos;\n\n\t\tif (typeof pos === \""undefined\"") {\n\t\t\trawPos = this.getOrgScrollPos();\n\t\t}\n\t\tthis._prevPos = rawPos - this.getContainerOffset();\n\t}\n\tpublic attachEvent() {\n\t\taddEvent(this._view, \""scroll\"", this._onCheck);\n\t\taddEvent(window, \""resize\"", this._onResize);\n\t}\n\tpublic getOrgScrollPos() {\n\t\treturn scroll(this._view, this.options.horizontal);\n\t}\n\tpublic reset() {\n\t\tthis._prevPos = null;\n\t}\n\tpublic getContainerOffset() {\n\t\treturn this._containerOffset;\n\t}\n\tpublic resize() {\n\t\tthis._containerOffset = this.options.isOverflowScroll ? 0 : this._getOffset();\n\t}\n\tpublic detachEvent() {\n\t\tremoveEvent(this._view, \""scroll\"", this._onCheck);\n\t\tremoveEvent(window, \""resize\"", this._onResize);\n\t}\n\tpublic destroy() {\n\t\tthis.detachEvent();\n\t\tthis.reset();\n\t}\n\tprivate _onCheck() {\n\t\tconst prevPos = this.getScrollPos();\n\t\tconst orgScrollPos = this.getOrgScrollPos();\n\n\t\tthis.setScrollPos(orgScrollPos);\n\t\tconst scrollPos = this.getScrollPos();\n\n\t\tif (prevPos === null || (this._isScrollIssue && orgScrollPos === 0) || prevPos === scrollPos) {\n\t\t\torgScrollPos && (this._isScrollIssue = false);\n\t\t\treturn;\n\t\t}\n\t\tthis._isScrollIssue = false;\n\t\tthis.options.check({\n\t\t\tisForward: prevPos < scrollPos,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t\thorizontal: this.options.horizontal,\n\t\t});\n\t}\n\tprivate _getOffset() {\n\t\tconst { container, horizontal } = this.options;\n\t\tconst rect = container.getBoundingClientRect();\n\n\t\treturn rect[horizontal ? \""left\"" : \""top\""] + this.getOrgScrollPos();\n\t}\n\tprivate _onResize() {\n\t\tif (this._timer.resize) {\n\t\t\tclearTimeout(this._timer.resize);\n\t\t}\n\t\tthis._timer.resize = setTimeout(() => {\n\t\t\tthis.resize();\n\t\t\tthis.options.resize();\n\t\t\tthis._timer.resize = null;\n\t\t\tthis.reset();\n\t\t}, 100);\n\t}\n\n}\n"",""import ItemManager from \""./ItemManager\"";\nimport { assign } from \""./utils\"";\nimport { CursorType, IInfiniteGridItem, IInfiniteGridGroup, IInfiniteStatus } from \""./types\"";\n\nfunction isVisible(group: IInfiniteGridGroup, threshold: number, scrollPos: number, endScrollPos: number) {\n\tconst { items, outlines } = group;\n\tconst start = outlines.start;\n\tconst end = outlines.end;\n\n\tif (start.length === 0 || end.length === 0 || !items.length || !items[0].el) {\n\t\treturn 2;\n\t}\n\tconst min = Math.min(...start);\n\tconst max = Math.max(...end);\n\n\tif ((endScrollPos + threshold < min)) {\n\t\treturn +1;\n\t} else if ((scrollPos - threshold > max)) {\n\t\treturn -1;\n\t}\n\treturn 0;\n}\n\nexport interface IInfiniteOptions {\n\tuseRecycle?: boolean;\n\tthreshold?: number;\n\tappend?: (e?: { cache: IInfiniteGridGroup[] }) => void;\n\tprepend?: (e?: { cache: IInfiniteGridGroup[] }) => void;\n\trecycle?: (e?: { start: number, end: number }) => void;\n}\nclass Infinite {\n\tpublic options: Required<IInfiniteOptions>;\n\tprivate _items: ItemManager;\n\tprivate _status: IInfiniteStatus;\n\tconstructor(itemManger: ItemManager, options: IInfiniteOptions) {\n\t\tthis.options = assign({\n\t\t\tuseRecycle: true,\n\t\t\tthreshold: 100,\n\t\t\tappend: () => void 0,\n\t\t\tprepend: () => void 0,\n\t\t\trecycle: () => void 0,\n\t\t}, options);\n\n\t\tthis._items = itemManger;\n\t\tthis.clear();\n\t}\n\tpublic setSize(size: number) {\n\t\tthis._status.size = size;\n\t}\n\tpublic recycle(scrollPos: number, isForward?: boolean) {\n\t\tif (!this.options.useRecycle) {\n\t\t\treturn;\n\t\t}\n\t\tconst { startCursor, endCursor, size } = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn;\n\t\t}\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst { threshold, recycle } = this.options;\n\t\tconst visibles = this._items.get(startCursor, endCursor)\n\t\t\t.map(group => isVisible(group, threshold, scrollPos, endScrollPos));\n\t\tconst length = visibles.length;\n\t\tlet start = isForward ? 0 : visibles.lastIndexOf(0);\n\t\tlet end = isForward ? visibles.indexOf(0) - 1 : visibles.length - 1;\n\n\t\tif (!isForward && start !== -1) {\n\t\t\tstart += 1;\n\t\t}\n\t\tif (start < 0 || end < 0 || start > end || end - start + 1 >= length) {\n\t\t\treturn;\n\t\t}\n\t\tstart = startCursor + start;\n\t\tend = startCursor + end;\n\n\t\trecycle({ start, end });\n\t\tif (isForward) {\n\t\t\tthis.setCursor(\""start\"", end + 1);\n\t\t} else {\n\t\t\tthis.setCursor(\""end\"", start - 1);\n\t\t}\n\t}\n\tpublic scroll(scrollPos: number) {\n\t\tconst startCursor = this.getCursor(\""start\"");\n\t\tconst endCursor = this.getCursor(\""end\"");\n\t\tconst items = this._items;\n\n\t\tif (typeof scrollPos !== \""number\"" || startCursor === -1 ||\n\t\t\tendCursor === -1 || !items.size()) {\n\t\t\treturn;\n\t\t}\n\t\tconst size = this._status.size;\n\t\tconst { threshold, append, prepend } = this.options;\n\t\tconst datas = items.get();\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst startEdgePos = Math.max(...datas[startCursor].outlines.start);\n\t\tconst endEdgePos = Math.min(...datas[endCursor].outlines.end);\n\t\tconst visibles = datas.map((group, i) => {\n\t\t\tconst { start, end } = group.outlines;\n\n\t\t\tif (!start.length || !end.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst startPos = Math.min(...start);\n\t\t\tconst endPos = Math.max(...end);\n\n\t\t\tif (startPos - threshold <= endScrollPos && scrollPos <= endPos + threshold) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tconst startIndex = visibles.indexOf(true);\n\t\tconst endIndex = visibles.lastIndexOf(true);\n\n\t\tif (~startIndex && startIndex < startCursor) {\n\t\t\tprepend({ cache: datas.slice(startIndex, Math.min(startCursor, endIndex + 1)) });\n\t\t} else if (endCursor < endIndex) {\n\t\t\tappend({ cache: datas.slice(Math.max(startIndex, endCursor + 1), endIndex + 1) });\n\t\t} else {\n\t\t\t// if you have data(no cachedAppendData, has cachedPrependData) to pepend, request it.\n\t\t\tconst cachedAppendData = datas.slice(endCursor + 1, endCursor + 2);\n\t\t\tconst cachedPrependData = datas.slice(startCursor - 1, startCursor);\n\t\t\tconst isPrepend = scrollPos <= startEdgePos + threshold;\n\n\t\t\tif (\n\t\t\t\tendScrollPos >= endEdgePos - threshold\n\t\t\t\t&& (!isPrepend || cachedAppendData.length || !cachedPrependData.length)\n\t\t\t) {\n\t\t\t\tappend({ cache: cachedAppendData });\n\t\t\t} else if (isPrepend) {\n\t\t\t\tprepend({ cache: cachedPrependData });\n\t\t\t}\n\t\t}\n\t}\n\tpublic setCursor(cursor: CursorType, index: number) {\n\t\tconst status = this._status;\n\t\tconst items = this._items;\n\t\tconst size = items.size();\n\n\t\tif (!this.options.useRecycle) {\n\t\t\tstatus.startCursor = 0;\n\t\t\tif (items.getOutline(size - 1, \""end\"").length) {\n\t\t\t\tstatus.endCursor = size - 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cursor !== \""end\"") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (cursor === \""start\"") {\n\t\t\tstatus.startCursor = index;\n\t\t} else {\n\t\t\tstatus.endCursor = Math.min(size - 1, index);\n\t\t}\n\t\tstatus.startCursor = Math.max(0, status.startCursor);\n\t}\n\tpublic setStatus(status: IInfiniteStatus) {\n\t\tthis._status = assign(this._status, status);\n\t}\n\tpublic getStatus(startKey: string | number, endKey: string | number): IInfiniteStatus {\n\t\tconst { startCursor, endCursor, size } = this._status;\n\t\tconst startIndex = Math.max(this._items.indexOf(startKey), 0);\n\t\tconst endIndex = (this._items.indexOf(endKey) + 1 || this._items.size()) - 1;\n\t\tconst start = Math.max(startCursor - startIndex, ~startCursor ? 0 : -1);\n\t\tconst end = Math.max(Math.min(endCursor - startIndex, endIndex - startIndex), start);\n\n\t\treturn {\n\t\t\tstartCursor: start,\n\t\t\tendCursor: end,\n\t\t\tsize,\n\t\t};\n\t}\n\tpublic getEdgeOutline(cursor: CursorType) {\n\t\tconst { startCursor, endCursor } = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._items.getOutline(cursor === \""start\"" ? startCursor : endCursor, cursor);\n\t}\n\tpublic getEdgeValue(cursor: CursorType) {\n\t\tconst outlines = this.getEdgeOutline(cursor);\n\n\t\treturn outlines.length ? Math[cursor === \""start\"" ? \""min\"" : \""max\""](...outlines) : 0;\n\t}\n\tpublic getVisibleItems() {\n\t\treturn this._items.pluck(\""items\"", this._status.startCursor, this._status.endCursor);\n\t}\n\tpublic getCursor(cursor: CursorType) {\n\t\treturn this._status[cursor === \""start\"" ? \""startCursor\"" : \""endCursor\""];\n\t}\n\tpublic getVisibleData() {\n\t\treturn this._items.get(this._status.startCursor, this._status.endCursor);\n\t}\n\tpublic remove(element: HTMLElement): {\n\t\titems: IInfiniteGridItem[],\n\t\tgroups: IInfiniteGridGroup[],\n\t} {\n\t\tconst { startCursor, endCursor } = this._status;\n\t\tconst result =\n\t\t\tthis._items.remove(element, startCursor, endCursor);\n\n\t\tif (result.groups.length) {\n\t\t\tthis.setCursor(\""end\"", endCursor - 1);\n\t\t}\n\t\tif (!this._items.size()) {\n\t\t\tthis._status.startCursor = -1;\n\t\t\tthis._status.endCursor = -1;\n\t\t}\n\t\treturn result;\n\t}\n\tpublic clear() {\n\t\tthis._status = {\n\t\t\tstartCursor: -1,\n\t\t\tendCursor: -1,\n\t\t\tsize: -1,\n\t\t};\n\t}\n}\n\nexport default Infinite;\n"",""import { window } from \""./browser\"";\nimport { addEvent, removeEvent, innerWidth, innerHeight } from \""./utils\"";\n\nconst elements: HTMLElement[] = [];\n\nfunction onResize() {\n\tAutoSizer.resizeAll();\n}\nexport interface IAutoSizierElemenet extends HTMLElement {\n\t__PREFIX__?: string;\n}\nexport default class AutoSizer {\n\tpublic static add(element: IAutoSizierElemenet, prefix = \""data-\"") {\n\t\tif (!elements.length) {\n\t\t\taddEvent(window, \""resize\"", onResize);\n\t\t}\n\t\telement.__PREFIX__ = prefix;\n\t\telements.push(element);\n\t\tAutoSizer.resize(element);\n\t}\n\tpublic static remove(element: IAutoSizierElemenet, isFixed = false) {\n\t\tconst fixed = element.getAttribute(`${element.__PREFIX__}fixed`) || \""width\"";\n\n\t\tif (!isFixed) {\n\t\t\telement.style[fixed === \""width\"" ? \""height\"" : \""width\""] = \""\"";\n\t\t}\n\t\tconst index = elements.indexOf(element);\n\n\t\tif (index < 0) {\n\t\t\treturn;\n\t\t}\n\t\telements.splice(index, 1);\n\t\tif (!elements.length) {\n\t\t\tremoveEvent(window, \""reisze\"", onResize);\n\t\t}\n\t}\n\tpublic static resize(element: IAutoSizierElemenet, prefix = \""data-\"") {\n\t\tconst elementPrefix = typeof element.__PREFIX__ === \""string\"" ? element.__PREFIX__ : prefix;\n\t\tconst dataWidth = parseInt(element.getAttribute(`${elementPrefix}width`), 10) || 0;\n\t\tconst dataHeight = parseInt(element.getAttribute(`${elementPrefix}height`), 10) || 0;\n\t\tconst fixed = element.getAttribute(`${elementPrefix}fixed`);\n\n\t\tif (fixed === \""height\"") {\n\t\t\tconst size = innerHeight(element) || dataHeight;\n\n\t\t\telement.style.width = `${dataWidth / dataHeight * size}px`;\n\t\t} else {\n\t\t\tconst size = innerWidth(element) || dataWidth;\n\n\t\t\telement.style.height = `${dataHeight / dataWidth * size}px`;\n\t\t}\n\t}\n\tpublic static resizeAll() {\n\t\telements.forEach(element => AutoSizer.resize(element));\n\t}\n}\n"",""import { IS_IE } from \""./consts\"";\nimport { addEvent, removeEvent, toArray } from \""./utils\"";\nimport AutoSizer from \""./AutoSizer\"";\n\nexport const CHECK_ALL: 1 = 1;\nexport const CHECK_ONLY_ERROR: 2 = 2;\n\nexport interface IImageLoadedOptions {\n\tprefix?: string;\n\tlength?: number;\n\ttype?: 1 | 2;\n\tcomplete?: () => void;\n\tend?: () => void;\n\terror?: (e: { target: LoadingImageElement, itemIndex: number }) => void;\n}\nexport interface LoadingImageElement extends HTMLImageElement {\n\t__ITEM_INDEX__?: number;\n}\n\nfunction isDataAttribute(target: HTMLElement, prefix: string) {\n\treturn !!target.getAttribute(`${prefix}width`);\n}\n\nclass ImageLoaded {\n\tpublic static CHECK_ALL = 1;\n\tpublic static CHECK_ONLY_ERROR = 2;\n\tpublic static waitImageLoaded(\n\t\tchecklist: LoadingImageElement[][],\n\t\t{ prefix = \""\"", length, type, complete, error, end }: IImageLoadedOptions,\n\t) {\n\t\tlet checkCount = 0;\n\t\tlet endCount = length;\n\n\t\tif (type !== CHECK_ONLY_ERROR) {\n\t\t\tcheckCount = endCount;\n\t\t}\n\t\tconst checkEnd = () => {\n\t\t\tif (--endCount !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tend && end();\n\t\t};\n\t\tconst checkImage = () => {\n\t\t\tcheckCount--;\n\t\t\tif (checkCount !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcomplete && complete();\n\t\t};\n\t\tconst onError = (target: LoadingImageElement, itemIndex = target.__ITEM_INDEX__) => {\n\t\t\terror && error({\n\t\t\t\ttarget,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t};\n\t\tconst onCheck = (e: Event) => {\n\t\t\tconst target = (e.target || e.srcElement) as LoadingImageElement;\n\n\t\t\tremoveEvent(target, \""error\"", onCheck);\n\t\t\tremoveEvent(target, \""load\"", onCheck);\n\n\t\t\tif (type === CHECK_ALL && isDataAttribute(target, prefix)) {\n\t\t\t\tAutoSizer.remove(target, e.type === \""error\"");\n\t\t\t} else {\n\t\t\t\tcheckImage();\n\t\t\t}\n\t\t\tif (e.type === \""error\"") {\n\t\t\t\tonError(target);\n\t\t\t}\n\t\t\tdelete target.__ITEM_INDEX__;\n\t\t\tcheckEnd();\n\t\t};\n\n\t\tchecklist.forEach((images, i) => {\n\t\t\timages.forEach(v => {\n\t\t\t\t// workaround for IE\n\t\t\t\tif (v.complete && (!IS_IE || (IS_IE && v.naturalWidth))) {\n\t\t\t\t\tif (!v.naturalWidth) {\n\t\t\t\t\t\tonError(v, i);\n\t\t\t\t\t}\n\t\t\t\t\tcheckImage();\n\t\t\t\t\tcheckEnd();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tv.__ITEM_INDEX__ = i;\n\t\t\t\tif (type === CHECK_ALL && isDataAttribute(v, prefix)) {\n\t\t\t\t\tAutoSizer.add(v, prefix);\n\t\t\t\t\tcheckImage();\n\t\t\t\t}\n\t\t\t\taddEvent(v, \""load\"", onCheck);\n\t\t\t\taddEvent(v, \""error\"", onCheck);\n\n\t\t\t\tIS_IE && v.setAttribute(\""src\"", v.getAttribute(\""src\""));\n\t\t\t});\n\t\t});\n\t}\n\tpublic static checkImageLoaded(el: HTMLElement) {\n\t\tif (el.tagName === \""IMG\"") {\n\t\t\treturn (el as HTMLImageElement).complete ? [] : [(el as HTMLImageElement)];\n\t\t} else {\n\t\t\treturn toArray(el.querySelectorAll(\""img\""));\n\t\t}\n\t}\n\tpublic static check(\n\t\telements: HTMLElement[],\n\t\t{ prefix, type = CHECK_ALL, complete, error, end }: IImageLoadedOptions,\n\t) {\n\t\tconst images = elements.map(element => this.checkImageLoaded(element));\n\t\tconst length = images.reduce((sum, element) => sum + element.length, 0);\n\n\t\tif (type === CHECK_ONLY_ERROR || length === 0) {\n\t\t\t// convert to async\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomplete && complete();\n\t\t\t\tif (length === 0) {\n\t\t\t\t\tend && end();\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t}\n\t\tif (length > 0) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.waitImageLoaded(images, { prefix, length, type, complete, error, end });\n\t\t\t}, 0);\n\t\t}\n\t}\n}\n\nexport default ImageLoaded;\n"",""import AutoSizer from \""./AutoSizer\"";\nimport ImageLoaded, { CHECK_ALL, CHECK_ONLY_ERROR } from \""./ImageLoaded\"";\nimport ItemManager from \""./ItemManager\"";\nimport { matchHTML, $, assign } from \""./utils\"";\nimport { DUMMY_POSITION } from \""./consts\"";\nimport DOMRenderer from \""./DOMRenderer\"";\nimport { ILayout, ILayoutResult, IInfiniteGridItem, IInfiniteGridGroup, IErrorCallbackOptions } from \""./types\"";\n\nfunction hasTarget<T>(target: T[], value: T) {\n\treturn ~target.indexOf(value);\n}\n\nexport interface ILayoutManagerOptions {\n\tattributePrefix?: string;\n\tisEqualSize?: boolean;\n\tisConstantSize?: boolean;\n\thorizontal?: boolean;\n}\n\nexport interface ICompleteCallbackOptions {\n\tgroups?: ILayoutResult[];\n\titems?: IInfiniteGridItem[];\n\tisAppend?: boolean;\n}\nexport interface IEndCallbackOptions {\n\tremove: HTMLElement[];\n\tlayout?: boolean;\n}\nexport interface ILayoutManagerCallbacks {\n\tcomplete: (e: ICompleteCallbackOptions) => void;\n\terror: (e: IErrorCallbackOptions) => void;\n\tend: (e: IEndCallbackOptions) => void;\n}\n\nexport default class LayoutMananger {\n\tpublic options: Required<ILayoutManagerOptions>;\n\tpublic _items: ItemManager;\n\tpublic _renderer: DOMRenderer;\n\tpublic _layout: ILayout;\n\tconstructor(items: ItemManager, renderer: DOMRenderer, options: ILayoutManagerOptions = {}) {\n\t\tassign(this.options = {\n\t\t\tattributePrefix: \""data-\"",\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\n\t\tthis._items = items;\n\t\tthis._renderer = renderer;\n\t\tthis._layout = null;\n\t}\n\tpublic setLayout(layout: ILayout) {\n\t\tthis._layout = layout;\n\t}\n\tpublic setSize(size: number) {\n\t\tthis._layout.setSize(size);\n\t}\n\tpublic append(\n\t\t{\n\t\t\tgroups,\n\t\t\titems,\n\t\t\tisUpdate,\n\t\t}: {\n\t\t\tgroups: IInfiniteGridGroup[],\n\t\t\titems: IInfiniteGridItem[],\n\t\t\tisUpdate?: boolean,\n\t\t},\n\t\tcallbacks: Partial<ILayoutManagerCallbacks>,\n\t) {\n\t\tthis._insert({ groups, items, isUpdate, isAppend: true }, callbacks);\n\t}\n\tpublic prepend(\n\t\t{\n\t\t\tgroups,\n\t\t\titems,\n\t\t\tisUpdate,\n\t\t}: {\n\t\t\tgroups: IInfiniteGridGroup[],\n\t\t\titems: IInfiniteGridItem[],\n\t\t\tisUpdate?: boolean,\n\t\t},\n\t\tcallbacks: Partial<ILayoutManagerCallbacks>,\n\t) {\n\t\tthis._insert({ groups, items, isUpdate, isAppend: false }, callbacks);\n\t}\n\tpublic layout(isRelayout: boolean, groups: IInfiniteGridGroup[], items: IInfiniteGridItem[]) {\n\t\tconst renderer = this._renderer;\n\t\tconst { isEqualSize, isConstantSize } = renderer.options;\n\t\tconst layoutGroups = groups.filter(group => {\n\t\t\tconst item = group.items[0];\n\n\t\t\treturn item.orgSize && item.rect.top > DUMMY_POSITION / 10;\n\t\t});\n\n\t\tif (!layoutGroups.length) {\n\t\t\treturn [];\n\t\t}\n\t\tlet outline = layoutGroups[0].outlines.start;\n\n\t\tif (isRelayout) {\n\t\t\toutline = [outline.length ? Math.min(...outline) : 0];\n\t\t\tif (!isConstantSize && items.length) {\n\t\t\t\trenderer.updateSize(items);\n\n\t\t\t\t// update invisible items' size\n\t\t\t\tif (isEqualSize && items[0].size) {\n\t\t\t\t\tItemManager.pluck(layoutGroups, \""items\"").forEach(item => {\n\t\t\t\t\t\titem.size = assign({}, items[0].size);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._layout.layout(layoutGroups, outline);\n\t\treturn layoutGroups;\n\t}\n\tpublic destroy() {\n\t\tthis._items = null;\n\t\tthis._renderer = null;\n\t}\n\tprivate _complete(\n\t\tgroups: IInfiniteGridGroup[],\n\t\titems: IInfiniteGridItem[],\n\t\tisAppend: boolean,\n\t\tisUpdate: boolean,\n\t\tcallback: ILayoutManagerCallbacks[\""complete\""],\n\t) {\n\t\tconst itemManager = this._items;\n\t\tconst cursor = isAppend ? \""end\"" : \""start\"";\n\t\tconst groupIndex = itemManager.indexOf(groups[0]);\n\t\tconst prevGroup = itemManager.getData(groupIndex + (isAppend ? -1 : 1));\n\t\tlet outline = prevGroup ? prevGroup.outlines[cursor] : [0];\n\n\t\tthis._renderer.updateSize(items);\n\n\t\tconst groupInfos = groups.map(group => {\n\t\t\tconst groupOutline = group.outlines[isAppend ? \""start\"" : \""end\""];\n\t\t\tconst isRelayout = isUpdate || !outline.length || (outline.length === groupOutline.length ?\n\t\t\t\t!outline.every((v, index) => v === groupOutline[index]) : true);\n\n\t\t\tif (!isRelayout) {\n\t\t\t\toutline = group.outlines[isAppend ? \""end\"" : \""start\""];\n\t\t\t\tDOMRenderer.renderItems(group.items);\n\t\t\t\treturn group;\n\t\t\t}\n\t\t\tconst groupItems = group.items;\n\t\t\tconst groupInfo = this._layout[isAppend ? \""append\"" : \""prepend\""](groupItems, outline, true);\n\n\t\t\tassign(group, groupInfo);\n\t\t\tDOMRenderer.renderItems(groupInfo.items);\n\t\t\toutline = groupInfo.outlines[isAppend ? \""end\"" : \""start\""];\n\n\t\t\treturn groupInfo;\n\t\t});\n\n\t\tcallback({\n\t\t\tgroups: groupInfos,\n\t\t\titems,\n\t\t\tisAppend,\n\t\t});\n\t}\n\tprivate _error(\n\t\tremoveTarget: HTMLElement[],\n\t\treplaceTarget: number[],\n\t\ttarget: HTMLImageElement,\n\t\titems: IInfiniteGridItem[],\n\t\terrorIndex: number,\n\t\tcallback: ILayoutManagerCallbacks[\""error\""],\n\t) {\n\t\tconst item = items[errorIndex];\n\t\tconst element = item.el;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\t// remove item\n\t\tconst removeItem = () => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tremoveTarget.push(element);\n\t\t\tconst index = replaceTarget.indexOf(errorIndex);\n\n\t\t\tindex !== -1 && replaceTarget.splice(index, 1);\n\t\t};\n\t\t// remove image\n\t\tconst remove = () => {\n\t\t\tif (target === element) {\n\t\t\t\tremoveItem();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttarget.parentNode.removeChild(target);\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace image\n\t\tconst replace = (src: string) => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (src) {\n\t\t\t\tif (matchHTML(src) || typeof src === \""object\"") {\n\t\t\t\t\tconst parentNode = target.parentNode;\n\n\t\t\t\t\tparentNode.insertBefore($(src), target);\n\t\t\t\t\tparentNode.removeChild(target);\n\t\t\t\t\titem.content = element.outerHTML;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.src = src;\n\t\t\t\t\tif (target.getAttribute(`${prefix}width`)) {\n\t\t\t\t\t\tAutoSizer.remove(target);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}width`);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}height`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace item\n\t\tconst replaceItem = (content: string) => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telement.innerHTML = content;\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\n\t\tcallback({\n\t\t\ttarget,\n\t\t\telement,\n\t\t\titems,\n\t\t\titem,\n\t\t\titemIndex: errorIndex,\n\t\t\treplace,\n\t\t\treplaceItem,\n\t\t\tremove,\n\t\t\tremoveItem,\n\t\t});\n\t}\n\tprivate _end(\n\t\tremoveTarget: HTMLElement[],\n\t\treplaceTarget: number[],\n\t\titems: IInfiniteGridItem[],\n\t\tcallback: ILayoutManagerCallbacks[\""end\""],\n\t) {\n\t\tconst { attributePrefix } = this.options;\n\n\t\tconst removeTargetLength = removeTarget.length;\n\t\tconst replaceTargetLength = replaceTarget.length;\n\n\t\tif (!removeTargetLength && !replaceTargetLength) {\n\t\t\tcallback({ remove: [] });\n\t\t\treturn;\n\t\t}\n\t\tconst layoutedItems = replaceTarget.map(itemIndex => items[itemIndex]);\n\n\t\tif (!replaceTargetLength) {\n\t\t\tcallback({ remove: removeTarget, layout: true });\n\t\t\treturn;\n\t\t}\n\t\t// wait layoutComplete beacause of error event.\n\t\tImageLoaded.check(layoutedItems.map(v => v.el), {\n\t\t\tprefix: attributePrefix,\n\t\t\tcomplete: () => {\n\t\t\t\tthis._renderer.updateSize(layoutedItems);\n\t\t\t\tcallback({ remove: removeTarget, layout: true });\n\t\t\t},\n\t\t});\n\t}\n\tprivate _insert(\n\t\t{\n\t\t\tgroups,\n\t\t\titems = ItemManager.pluck(groups, \""items\""),\n\t\t\tisAppend,\n\t\t\tisUpdate,\n\t\t}: {\n\t\t\tgroups: IInfiniteGridGroup[],\n\t\t\titems: IInfiniteGridItem[],\n\t\t\tisAppend: boolean,\n\t\t\tisUpdate: boolean,\n\t\t},\n\t\t{\n\t\t\terror = () => void 0,\n\t\t\tcomplete = () => void 0,\n\t\t\tend = () => void 0,\n\t\t}: Partial<ILayoutManagerCallbacks>,\n\t) {\n\t\tif (!groups.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst checkGroups = isAppend ? groups : groups.reverse();\n\t\tconst replaceTarget: number[] = [];\n\t\tconst removeTarget: HTMLElement[] = [];\n\t\tconst elements = items.map(item => item.el);\n\t\tconst type = this.options.isEqualSize && this._renderer._size.item ? CHECK_ONLY_ERROR : CHECK_ALL;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\tImageLoaded.check(elements, {\n\t\t\tprefix,\n\t\t\ttype,\n\t\t\tcomplete: () => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._complete(checkGroups, items, isAppend, isUpdate, complete);\n\t\t\t},\n\t\t\terror: ({ target, itemIndex }) => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._error(removeTarget, replaceTarget, target, items, itemIndex, error);\n\t\t\t},\n\t\t\tend: () => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._end(removeTarget, replaceTarget, items, end);\n\t\t\t},\n\t\t});\n\t}\n}\n"",""/**\n * Copyright (c) 2017 NAVER Corp.\n * egjs projects are licensed under the MIT license\n*/\nimport Component from \""@egjs/component\"";\nimport ItemManager from \""./ItemManager\"";\nimport DOMRenderer, { resetSize } from \""./DOMRenderer\"";\nimport Watcher from \""./Watcher\"";\nimport {\n\tAPPEND,\n\tPREPEND,\n\tCACHE,\n\tNO_CACHE,\n\tTRUSTED,\n\tNO_TRUSTED,\n\tIS_ANDROID2,\n\tIDLE,\n\tLOADING_APPEND,\n\tLOADING_PREPEND,\n\tPROCESSING,\n\tDEFENSE_BROWSER,\n\tIGNORE_CLASSNAME,\n\tDUMMY_POSITION,\n\tIS_IOS,\n} from \""./consts\"";\nimport Infinite from \""./Infinite\"";\nimport { toArray, $, outerHeight, outerWidth, assign } from \""./utils\"";\nimport LayoutMananger from \""./LayoutManager\"";\nimport {\n\tIJQuery, ILayout,\n\tCursorType, StyleType,\n\tIItemManagerStatus, IInfiniteGridItem,\n\tIInfiniteGridGroup, IErrorCallbackOptions, IDOMRendererStatus, IWatchStatus, IInfiniteStatus, IInfiniteGridStatus\n} from \""./types\"";\n\n// IE8\n// https://stackoverflow.com/questions/43216659/babel-ie8-inherit-issue-with-object-create\n/* eslint-disable */\n// if (typeof Object.create !== \""function\"") {\n//   // tslint:disable\n//   Object.create = (o: any, properties: any) => {\n//     if (typeof o !== \""object\"" && typeof o !== \""function\"") {\n//       throw new TypeError(\""Object prototype may only be an Object: \"" + o);\n//     } else if (o === null) {\n//       throw new Error(\""This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.\"");\n//     }\n//     function F() { }\n//     F.prototype = o;\n//     return new F();\n//   };\n//   // tslint:enable\n// }\n/* eslint-enable */\n\nexport interface IInfiniteGridOptions {\n\titemSelector: string;\n\tisOverflowScroll: boolean;\n\tthreshold: number;\n\tisEqualSize: boolean;\n\tisConstantSize: boolean;\n\tuseRecycle: boolean;\n\thorizontal: boolean;\n\ttransitionDuration: number;\n\tuseFit: boolean;\n\tattributePrefix: string;\n}\n\n/**\n * A module used to arrange card elements including content infinitely according to layout type. With this module, you can implement various layouts composed of different card elements whose sizes vary. It guarantees performance by maintaining the number of DOMs the module is handling under any circumstance\n * @ko 콘텐츠가 있는 카드 엘리먼트를 레이아웃 타입에 따라 무한으로 배치하는 모듈. 다양한 크기의 카드 엘리먼트를 다양한 레이아웃으로 배치할 수 있다. 카드 엘리먼트의 개수가 계속 늘어나도 모듈이 처리하는 DOM의 개수를 일정하게 유지해 최적의 성능을 보장한다\n * @alias eg.InfiniteGrid\n * @extends eg.Component\n *\n * @example\n```\n<ul id=\""grid\"">\n  <li class=\""card\"">\n    <div>test1</div>\n  </li>\n  <li class=\""card\"">\n    <div>test2</div>\n  </li>\n  <li class=\""card\"">\n    <div>test3</div>\n  </li>\n  <li class=\""card\"">\n    <div>test4</div>\n  </li>\n  <li class=\""card\"">\n    <div>test5</div>\n  </li>\n  <li class=\""card\"">\n    <div>test6</div>\n  </li>\n</ul>\n<script>\nvar some = new eg.InfiniteGrid(\""#grid\"").on(\""layoutComplete\"", function(e) {\n  // ...\n});\n\n// If you already have items in the container, call \""layout\"" method.\nsome.layout();\n</script>\n```\n *\n * @support {\""ie\"": \""8+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n **/\nclass InfiniteGrid extends Component {\n\t/**\n\t * Version info string\n\t * @ko 버전정보 문자열\n\t * @name VERSION\n\t * @static\n\t * @type {String}\n\t * @example\n\t * eg.InfiniteGrid.VERSION;  // ex) 3.3.3\n\t * @memberof eg.InfiniteGrid\n\t */\n\tpublic static VERSION = \""#__VERSION__#\"";\n\n\tpublic options: IInfiniteGridOptions;\n\tprivate _loadingBar: {\n\t\tappend?: HTMLElement,\n\t\tprepend?: HTMLElement,\n\t};\n\tprivate _items: ItemManager;\n\tprivate _renderer: DOMRenderer;\n\tprivate _manager: LayoutMananger;\n\tprivate _watcher: Watcher;\n\tprivate _infinite: Infinite;\n\tprivate _status: IInfiniteGridStatus[\""_status\""];\n\n\t/**\n\t * @param {HTMLElement|String|jQuery} element A base element for a module <ko>모듈을 적용할 기준 엘리먼트</ko>\n\t * @param {Object} [options] The option object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid 모듈의 옵션 객체</ko>\n\t * @param {String} [options.itemSelector] A selector to select card elements that make up the layout<ko>레이아웃을 구성하는 카드 엘리먼트를 선택할 선택자(selector)</ko>\n\t * @param {Boolean} [options.useRecycle=true] Indicates whether keep the number of DOMs is maintained. If the useRecycle value is 'true', keep the number of DOMs is maintained. If the useRecycle value is 'false', the number of DOMs will increase as card elements are added. <ko>DOM의 수를 유지할지 여부를 나타낸다. useRecycle 값이 'true'이면 DOM 개수를 일정하게 유지한다. useRecycle 값이 'false' 이면 카드 엘리먼트가 추가될수록 DOM 개수가 계속 증가한다.</ko>\n\t * @param {Boolean} [options.isOverflowScroll=false] Indicates whether overflow:scroll is applied<ko>overflow:scroll 적용여부를 결정한다.</ko>\n\t * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (true: horizontal, false: vertical) <ko>스크롤 이동 방향 (true 가로방향, false 세로방향)</ko>\n\t * @param {Boolean} [options.useFit=true] The useFit option scrolls upwards so that no space is visible until an item is added <ko>위로 스크롤할 시 아이템을 추가하는 동안 보이는 빈 공간을 안보이게 한다.</ko>\n\t * @param {Boolean} [options.isEqualSize=false] Indicates whether sizes of all card elements are equal to one another. If sizes of card elements to be arranged are all equal and this option is set to \""true\"", the performance of layout arrangement can be improved. <ko>카드 엘리먼트의 크기가 동일한지 여부. 배치될 카드 엘리먼트의 크기가 모두 동일할 때 이 옵션을 'true'로 설정하면 레이아웃 배치 성능을 높일 수 있다</ko>\n\t * @param {Boolean} [options.isConstantSize=false] Indicates whether sizes of all card elements does not change, the performance of layout arrangement can be improved. <ko>모든 카드 엘리먼트의 크기가 불변일 때 이 옵션을 'true'로 설정하면 레이아웃 배치 성능을 높일 수 있다</ko>\n\t * @param {Number} [options.transitionDruation=0] Indicates how many seconds a transition effect takes to complete. <ko>트랜지션 효과를 완료하는데 걸리는 시간을 나타낸다.</ko>\n\t * @param {Number} [options.threshold=100] The threshold size of an event area where card elements are added to a layout.<ko>레이아웃에 카드 엘리먼트를 추가하는 이벤트가 발생하는 기준 영역의 크기.</ko>\n\t * @param {String} [options.attributePrefix=\""data-\""] The prefix to use element's data attribute.<ko>엘리먼트의 데이타 속성에 사용할 접두사.</ko>\n\t */\n\tconstructor(element: HTMLElement | string | IJQuery, options?: Partial<IInfiniteGridOptions>) {\n\t\tsuper();\n\t\tassign(this.options = {\n\t\t\titemSelector: \""*\"",\n\t\t\tisOverflowScroll: false,\n\t\t\tthreshold: 100,\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\tuseRecycle: true,\n\t\t\thorizontal: false,\n\t\t\ttransitionDuration: 0,\n\t\t\tuseFit: true,\n\t\t\tattributePrefix: \""data-\"",\n\t\t}, options);\n\t\tDEFENSE_BROWSER && (this.options.useFit = false);\n\t\tIS_ANDROID2 && (this.options.isOverflowScroll = false);\n\t\tthis._reset();\n\t\tthis._loadingBar = {};\n\n\t\tconst {\n\t\t\tisOverflowScroll,\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tthreshold,\n\t\t\tuseRecycle,\n\t\t} = this.options;\n\n\t\tthis._items = new ItemManager();\n\t\tthis._renderer = new DOMRenderer(element, {\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tcontainer: isOverflowScroll,\n\t\t});\n\t\tthis._watcher = new Watcher(\n\t\t\tthis._renderer.view,\n\t\t\t{\n\t\t\t\tisOverflowScroll,\n\t\t\t\thorizontal,\n\t\t\t\tcontainer: this._renderer.container,\n\t\t\t\tresize: () => this._onResize(),\n\t\t\t\tcheck: param => this._onCheck(param),\n\t\t\t});\n\n\t\tthis._infinite = new Infinite(this._items, {\n\t\t\tuseRecycle,\n\t\t\tthreshold,\n\t\t\tappend: param => this._requestAppend(param),\n\t\t\tprepend: param => this._requestPrepend(param),\n\t\t\trecycle: param => this._recycle(param),\n\t\t});\n\t}\n\t/**\n\t * Adds a card element at the bottom of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko 카드 엘리먼트를 레이아웃 아래에 추가한다. isProcessing() 메서드의 반환값이 'false'일 때만 이 메서드를 사용할 수 있다\n\t * 이 메소드는 isProcessing()의 반환값이 false일 경우에만 사용 가능하다.\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>추가할 카드 엘리먼트의 배열</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>추가할 카드 엘리먼트에 설정할 그룹 키. 생략하면 값이 자동으로 생성된다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.append(\""&lt;div class='item'&gt;test1&lt;/div&gt;&lt;div class='item'&gt;test2&lt;/div&gt;\"");\n\t * infinitegrid.append([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]);\n\t * infinitegrid.append([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.append(jQuery([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]));\n\t */\n\tpublic append(elements: HTMLElement[] | IJQuery | string[] | string, groupKey?: string | number) {\n\t\tthis._manager && this._insert({\n\t\t\telements,\n\t\t\tisAppend: APPEND,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Adds a card element at the top of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko 카드 엘리먼트를 레이아웃의 위에 추가한다. isProcessing() 메서드의 반환값이 'false'일 때만 이 메서드를 사용할 수 있다\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>추가할 카드 엘리먼트 배열</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>추가할 카드 엘리먼트에 설정할 그룹 키. 생략하면 값이 자동으로 생성된다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.prepend(\""&lt;div class='item'&gt;test1&lt;/div&gt;&lt;div class='item'&gt;test2&lt;/div&gt;\"");\n\t * infinitegrid.prepend([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]);\n\t * infinitegrid.prepend([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.prepend(jQuery([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]));\n\t */\n\tpublic prepend(elements: HTMLElement[] | IJQuery | string[] | string, groupKey?: string | number) {\n\t\tthis._manager && this._insert({\n\t\t\telements,\n\t\t\tisAppend: PREPEND,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Layout class to use.\n\t * @ko 사용할 Layout 클래스를 지정한다.\n\t * @param {Class|Object} LayoutKlass The Layout class to use or an instance of a layout moudle<ko>사용할 Layout 클래스 또는 레이아웃 모듈의 인스턴스</ko>\n\t * @param {Object} options Options to apply to the Layout.<ko>Layout에 적용할 옵션</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.setLayout(eg.InfiniteGrid.GridLayout, {\n\t *  margin: 10,\n\t *  align: \""start\""\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.JustifiedLayout, {\n\t *  margin: 10,\n\t *  minSize: 100,\n\t *  maxSize: 200\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.SquareLayout, {\n\t *  margin: 10,\n\t *  column: 2\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.FrameLayout, {\n\t *  margin: 10,\n\t *  frame: [\n\t *   [1, 2],\n\t *   [4, 3],\n\t *  ]\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.PackingLayout, {\n\t *  margin: 10,\n\t *  aspectRatio: 1.5\n\t * });\n\t * var layout = new eg.InfiniteGrid.GridLayout({\n\t *   margin: 10,\n\t *  align: \""start\""\n\t * });\n\t * infinitegrid.setLayout(layout);\n\t */\n\tpublic setLayout(LayoutKlass: ILayout | (new (...args: any[]) => ILayout), options = {}) {\n\t\tconst { isEqualSize, isConstantSize, attributePrefix, horizontal } = this.options;\n\n\t\tif (!this._manager) {\n\t\t\tthis._manager = new LayoutMananger(this._items, this._renderer, {\n\t\t\t\tattributePrefix,\n\t\t\t\tisEqualSize,\n\t\t\t\tisConstantSize,\n\t\t\t});\n\t\t}\n\t\tif (typeof LayoutKlass === \""function\"") {\n\t\t\tthis._manager.setLayout(new LayoutKlass(assign(options, {\n\t\t\t\thorizontal,\n\t\t\t})));\n\t\t} else {\n\t\t\tLayoutKlass.options.horizontal = horizontal;\n\t\t\tthis._manager.setLayout(LayoutKlass);\n\t\t}\n\t\tthis._renderer.resize();\n\t\tthis._setSize(this._renderer.getViewportSize());\n\t\treturn this;\n\t}\n\t/**\n\t * Returns the layouted items.\n\t * @ko 레이아웃된 아이템들을 반환한다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached items. <ko>캐싱된 아이템을 포함할지 여부를 나타낸다.</ko>\n\t * @returns List of items <ko>아이템의 목록</ko>\n\t */\n\tpublic getItems(includeCached = false): IInfiniteGridItem[] {\n\t\treturn includeCached ? this._items.pluck(\""items\"") : this._infinite.getVisibleItems();\n\t}\n\t/**\n\t * Rearranges a layout.\n\t * @ko 레이아웃을 다시 배치한다.\n\t * @param {Boolean} [isRelayout=true] Indicates whether a card element is being relayouted <ko>카드 엘리먼트 재배치 여부</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic layout(isRelayout = true) {\n\t\tif (!this._manager) {\n\t\t\treturn this;\n\t\t}\n\t\tconst renderer = this._renderer;\n\t\tconst itemManager = this._items;\n\t\tconst infinite = this._infinite;\n\t\tconst isResize = renderer.resize();\n\t\tconst items = this.getItems();\n\t\tconst { isEqualSize, isConstantSize, transitionDuration } = this.options;\n\t\tconst isLayoutAll = isRelayout && (isEqualSize || isConstantSize);\n\t\tconst size = itemManager.size();\n\n\t\tif (isRelayout) {\n\t\t\tthis._watcher.resize();\n\t\t\tif (isResize) {\n\t\t\t\tthis._setSize(renderer.getViewportSize());\n\t\t\t}\n\t\t}\n\t\t// check childElement\n\t\tif (!size || !items.length) {\n\t\t\tconst children = toArray(renderer.container.children);\n\n\t\t\tif (children.length) {\n\t\t\t\tthis._insert({\n\t\t\t\t\telements: children,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisChildren: true,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (renderer.getContainerSize()) {\n\t\t\t\t\trenderer.setContainerSize(0);\n\t\t\t\t}\n\t\t\t\tthis._requestAppend({});\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\t// layout datas\n\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\tconst endCursor = infinite.getCursor(\""end\"");\n\t\tconst data = isLayoutAll || !(isRelayout && isResize) ? itemManager.get() :\n\t\t\titemManager.get(startCursor, endCursor);\n\n\t\t// LayoutManger interface\n\t\tthis._manager.layout(isRelayout, data, isResize ? items : []);\n\t\tif (isLayoutAll) {\n\t\t\tthis._fit();\n\t\t} else if (isRelayout && isResize) {\n\t\t\titemManager.clearOutlines(startCursor, endCursor);\n\t\t}\n\t\tDOMRenderer.renderItems(items, transitionDuration);\n\t\tisRelayout && this._watcher.setScrollPos();\n\t\tthis._onLayoutComplete({\n\t\t\titems,\n\t\t\tisAppend: APPEND,\n\t\t\tfromCache: CACHE,\n\t\t\tisTrusted: NO_TRUSTED,\n\t\t\tuseRecycle: false,\n\t\t\tisLayout: true,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Removes a item element on a grid layout.\n\t * @ko 그리드 레이아웃의 카드 엘리먼트를 삭제한다.\n\t * @param {HTMLElement} item element to be removed <ko>삭제될 아이템 엘리먼트</ko>\n\t * @return {Object}  Removed item element <ko>삭제된 아이템 엘리먼트 정보</ko>\n\t */\n\tpublic remove(element: HTMLElement, isLayout = true) {\n\t\tif (element) {\n\t\t\tconst {items, groups} = this._infinite.remove(element);\n\n\t\t\titems && DOMRenderer.removeElement(element);\n\t\t\tisLayout && this.layout(groups.length > 0);\n\t\t\treturn items;\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t * Returns the list of group keys which belongs to card elements currently being maintained. You can use the append() or prepend() method to configure group keys so that multiple card elements can be managed at once. If you do not use these methods to configure group keys, groupkey is automatically generated.\n\t * @ko 현재 유지하고 있는 카드 엘리먼트의 그룹 키 목록을 반환한다. 여러 개의 카드 엘리먼트를 묶어서 관리할 수 있도록 append() 메서드나 prepend() 메서드에서 그룹 키를 지정할 수 있다. append() 메서드나 prepend() 메서드에서 그룹 키를 지정하지 않았다면 자동으로 그룹키가 생성된다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached groups. <ko>캐싱된 그룹을 포함할지 여부를 나타낸다.</ko>\n\t * @return {Array} List of group keys <ko>그룹 키의 목록</ko>\n\t */\n\tpublic getGroupKeys(includeCached?: boolean) {\n\t\tconst data = includeCached ?\n\t\t\tthis._items.get() : this._infinite.getVisibleData();\n\n\t\treturn data.map(v => v.groupKey);\n\t}\n\t/**\n\t * Returns the current state of a module such as location information. You can use the setStatus() method to restore the information returned through a call to this method.\n\t * @ko 카드의 위치 정보 등 모듈의 현재 상태 정보를 반환한다. 이 메서드가 반환한 정보를 저장해 두었다가 setStatus() 메서드로 복원할 수 있다\n\t * @return {Object} State object of the eg.InfiniteGrid module<ko>eg.InfiniteGrid 모듈의 상태 객체</ko>\n\t */\n\tpublic getStatus(startKey?: string | number, endKey?: string | number): IInfiniteGridStatus {\n\t\treturn {\n\t\t\t_status: assign({}, this._status),\n\t\t\t_items: this._items.getStatus(startKey, endKey),\n\t\t\t_renderer: this._renderer.getStatus(),\n\t\t\t_watcher: this._watcher.getStatus(),\n\t\t\t_infinite: this._infinite.getStatus(startKey, endKey),\n\t\t};\n\t}\n\t/**\n\t * Sets the state of the eg.InfiniteGrid module with the information returned through a call to the getStatue() method.\n\t * @ko getStatue() 메서드가 저장한 정보로 eg.InfiniteGrid 모듈의 상태를 설정한다.\n\t * @param {Object} status State object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid 모듈의 상태 객체</ko>\n\t * @param {boolean} [applyScrollPos=true] Checks whether to scroll<ko>스크롤의 위치를 복원할지 결정한다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic setStatus(status: IInfiniteGridStatus, applyScrollPos = true) {\n\t\tif (!status) {\n\t\t\treturn this;\n\t\t}\n\t\tconst { _status, _renderer, _items, _watcher, _infinite } = status;\n\n\t\tif (!_status ||\n\t\t\t!_renderer || !_items || !_watcher || !_infinite) {\n\t\t\treturn this;\n\t\t}\n\t\tconst items = this._items;\n\t\tconst renderer = this._renderer;\n\t\tconst watcher = this._watcher;\n\t\tconst infinite = this._infinite;\n\n\t\twatcher.detachEvent();\n\t\tassign(this._status, _status);\n\t\tthis._status.processingStatus = IDLE;\n\t\titems.setStatus(_items);\n\t\trenderer.setStatus(_renderer);\n\t\tinfinite.setStatus(_infinite);\n\n\t\tconst visibleItems = this.getItems();\n\t\tconst length = visibleItems.length;\n\n\t\trenderer.createAndInsert(visibleItems, true);\n\n\t\tconst isReLayout = renderer.isNeededResize();\n\n\t\twatcher.setStatus(_watcher, applyScrollPos);\n\t\twatcher.attachEvent();\n\n\t\tconst { isConstantSize, isEqualSize } = this.options;\n\n\t\tif (!length) {\n\t\t\tthis._requestAppend({ cache: [] });\n\t\t} else if (isReLayout) {\n\t\t\trenderer.resize();\n\t\t\tthis._setSize(renderer.getViewportSize());\n\n\t\t\tif (isConstantSize) {\n\t\t\t\tthis.layout(true);\n\t\t\t} else {\n\t\t\t\tthis._items.clearOutlines();\n\t\t\t\tthis._postLayout({\n\t\t\t\t\tfromCache: true,\n\t\t\t\t\tgroups: isEqualSize ? items.get() : infinite.getVisibleData(),\n\t\t\t\t\titems: visibleItems,\n\t\t\t\t\tnewItems: visibleItems,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisTrusted: false,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis.layout(false);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Clears added card elements and data.\n\t * @ko 추가된 카드 엘리먼트와 데이터를 모두 지운다.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic clear() {\n\t\tthis._items.clear();\n\t\tthis._renderer.clear();\n\t\tthis._infinite.clear();\n\t\tthis._reset();\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Loading Bar to use for append or prepend items.\n\t * @ko 아이템을 append 또는 prepend 하기 위해 사용할 로딩 바를 지정한다.\n\t * @param {String|Object} [userLoadingBar={}] The loading bar HTML markup or element or element selector <ko> 로딩 바 HTML 또는 element 또는 selector </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic setLoadingBar(userLoadingBar: {\n\t\tappend?: string | HTMLElement,\n\t\tprepepnd?: string | HTMLElement,\n\t} | string = {}) {\n\t\tconst loadingBarObj: {\n\t\t\tappend?: string | HTMLElement,\n\t\t\tprepend?: string | HTMLElement,\n\t\t} = typeof userLoadingBar === \""object\"" ? userLoadingBar : {\n\t\t\tappend: userLoadingBar,\n\t\t\tprepend: userLoadingBar,\n\t\t};\n\n\t\tthis._status.loadingSize = 0;\n\t\tthis._status.loadingStyle = {};\n\t\tconst loadingBar = this._loadingBar;\n\n\t\tfor (const type in loadingBarObj) {\n\t\t\tloadingBar[type as \""append\"" | \""prepend\""] = $(loadingBarObj[type as \""append\"" | \""prepend\""]);\n\t\t\tloadingBar[type as \""append\"" | \""prepend\""].className += ` ${IGNORE_CLASSNAME}`;\n\t\t}\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t/**\n\t * Checks whether a card element or data is being added.\n\t * @ko 카드 엘리먼트 추가 또는 데이터 로딩이 진행 중인지 확인한다\n\t * @return {Boolean} Indicates whether a card element or data is being added <ko>카드 엘리먼트 추가 또는 데이터 로딩 진행 중 여부</ko>\n\t */\n\tpublic isProcessing() {\n\t\treturn this._isProcessing() || this._isLoading();\n\t}\n\t/**\n\t * Returns the element of loading bar.\n\t * @ko 로딩 바의 element를 반환한다.\n\t * @param {Boolean} [isAppend=currentLoadingBar|true] Checks whether the card element is added to the append () method. <ko>카드 엘리먼트가 append() 메서드로 추가 할 것인지 확인한다.</ko>\n\t * @return {Element} The element of loading bar. <ko>로딩 바의 element</ko>\n\t */\n\tpublic getLoadingBar(isAppend = this._getLoadingStatus() !== LOADING_PREPEND) {\n\t\treturn this._loadingBar[isAppend ? \""append\"" : \""prepend\""];\n\t}\n\t/**\n\t * Start loading for append/prepend during loading data.\n\t * @ko 데이터가 로딩되는 동안 append/prepend하길 위해 로딩을 시작한다.\n\t * @param {Boolean} [isAppend=true] Checks whether the card element is added to the append () method. <ko>카드 엘리먼트가 append() 메서드로 추가 할 것인지 확인한다.</ko>\n\t * @param {Object} [userStyle = {display: \""block\""}] custom style to apply to this loading bar for start. <ko> 로딩 시작을 위한 로딩 바에 적용할 커스텀 스타일 </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic startLoading(isAppend?: boolean, userStyle: StyleType = { display: \""block\"" }) {\n\t\tif (this._isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst type = isAppend ? \""append\"" : \""prepend\"";\n\n\t\tthis._process(isAppend ? LOADING_APPEND : LOADING_PREPEND);\n\t\tif (!this._loadingBar[type]) {\n\t\t\treturn this;\n\t\t}\n\t\tthis._renderLoading(userStyle);\n\t\tthis._status.loadingStyle = userStyle;\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis._setContainerSize(this._getEdgeValue(\""end\"") + this._status.loadingSize);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * End loading after startLoading() for append/prepend\n\t * @ko  append/prepend하길 위해 startLoading() 호출해선 걸었던 로딩을 끝낸다.\n\t * @param {Object} [userStyle = {display: \""none\""}] custom style to apply to this loading bar for end <ko> 로딩 시작을 위한 로딩 바에 적용할 커스텀 스타일 </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic endLoading(userStyle: StyleType = { display: \""none\"" }) {\n\t\tif (!this._isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst type = isAppend ? \""append\"" : \""prepend\"";\n\t\tconst el = this._loadingBar[type];\n\t\tconst status = this._status;\n\t\tconst size = status.loadingSize;\n\n\t\tthis._process(LOADING_APPEND | LOADING_PREPEND, false);\n\t\tstatus.loadingSize = 0;\n\t\tstatus.loadingStyle = {};\n\t\tif (el) {\n\t\t\tconst style: StyleType = assign({\n\t\t\t\t[this.options.horizontal ? \""left\"" : \""top\""]: `${-size}px`,\n\t\t\t}, userStyle);\n\n\t\t\tfor (const property in style) {\n\t\t\t\tel.style[property as keyof StyleType] = style[property as keyof StyleType];\n\t\t\t}\n\t\t\tif (!isAppend) {\n\t\t\t\tthis._fitItems(size);\n\t\t\t} else {\n\t\t\t\tthis._setContainerSize(this._getEdgeValue(\""end\""));\n\t\t\t}\n\t\t}\n\t\tif (this.options.useRecycle && !this.isProcessing()) {\n\t\t\tthis._infinite.recycle(this._watcher.getScrollPos(), isAppend);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Retrieves the item via index or the element.\n\t * @ko index 또는 element를 통해 아이템을 가져온다.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> item에 해당하는 element 또는 해당 item이 있는 group의 index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 사용할 경우 해당 group에 있는 Item의 index </ko>\n\t * @return The item containing the content, size and position,etc<ko>content, size, position 등이 담겨있는 item 정보</ko>\n\t * @example\n\n\t ig.getItem(0, 0);\n\t ig.getItem(element);\n\n\t {\n\t  el: HTMLElement,\n\t  content: \""<div>...</div>\"",\n\t  size: {width: ..., height: ...},\n\t  rect: {top: ..., left: ..., width: ..., height: ...},\n\t }\n\t */\n\tpublic getItem(groupIndex = 0, itemIndex?: number): IInfiniteGridItem {\n\t\tif (itemIndex == null && typeof groupIndex === \""object\"") {\n\t\t\tif (!groupIndex) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst items = this.getItems();\n\t\t\tconst length = items.length;\n\n\t\t\tfor (let i = 0; i < length; ++i) {\n\t\t\t\tif (items[i].el === groupIndex) {\n\t\t\t\t\treturn items[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tconst group = this._items.getData(groupIndex);\n\n\t\t\treturn group && group.items[itemIndex || 0];\n\t\t}\n\t}\n\t/**\n\t * Updates the item via index or the element.\n\t * @ko index 또는 element를 통해 아이템을 업데이트한다.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> item에 해당하는 element 또는 해당 item이 있는 group의 index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 사용할 경우 해당 group에 있는 Item의 index </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\telement.innerHTML = \""2\"";\n\telement.style.height = \""400px\"";\n\tig.updateItem(element);\n\tig.updateItem(0, 0);\n\t */\n\tpublic updateItem(groupIndex?: number, itemIndex?: number) {\n\t\tconst item = this.getItem(groupIndex, itemIndex);\n\n\t\tthis._updateItem(item) && this.layout(false);\n\n\t\treturn this;\n\t}\n\t/**\n\t * Update the currently displayed items.\n\t * @ko 현재보여주는 아이템들을 업데이트한다.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\telement.innerHTML = \""2\"";\n\telement.style.height = \""400px\"";\n\n\telement2.innerHTML = \""2\"";\n\telement2.style.height = \""400px\"";\n\n\tig.updateItems();\n\t */\n\tpublic updateItems() {\n\t\tthis.getItems().forEach(item => {\n\t\t\tthis._updateItem(item);\n\t\t});\n\t\tthis.layout(false);\n\t\treturn this;\n\t}\n\t/**\n\t * Move to some group or item position.\n\t * @ko 해당하는 그룹 또는 아이템의 위치로 이동한다.\n\t * @param {Number} [index] group's index <ko> 그룹의 index</ko>\n\t * @param {Number} [itemIndex=-1] item's index <ko> 그룹의 index</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tpublic moveTo(index?: number, itemIndex = 0) {\n\t\tif (this.isProcessing()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst data = this._items.getData(index);\n\n\t\tif (!data) {\n\t\t\treturn this;\n\t\t}\n\t\tconst infinite = this._infinite;\n\t\tconst outlines = data.outlines;\n\t\tconst items = data.items;\n\t\tconst item = items[itemIndex];\n\t\tconst isResize = outlines.start && (outlines.start.length === 0);\n\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\tconst endCursor = infinite.getCursor(\""end\"");\n\t\tconst isInCursor = startCursor <= index && index <= endCursor;\n\t\tconst { useRecycle, horizontal } = this.options;\n\n\t\tif (isInCursor || !useRecycle || !isResize) {\n\t\t\tlet pos = item ? item.rect[horizontal ? \""left\"" : \""top\""] : Math.max(...outlines.start);\n\t\t\tconst fit = Math.min(...outlines.start);\n\n\t\t\tif (fit < 0) {\n\t\t\t\t// base < 0\n\t\t\t\tthis._fitItems(fit, 0);\n\t\t\t\tpos -= fit;\n\t\t\t}\n\t\t\tconst isAppend = index > startCursor;\n\n\t\t\tif (isInCursor || isAppend) {\n\t\t\t\tthis._scrollTo(pos);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis._postLayout({\n\t\t\t\tfromCache: true,\n\t\t\t\tgroups: [data],\n\t\t\t\titems,\n\t\t\t\tnewItems: [],\n\t\t\t\tisAppend,\n\t\t\t\tisTrusted: false,\n\t\t\t\tmoveCache: true,\n\t\t\t\tmoveItem: itemIndex,\n\t\t\t});\n\t\t\treturn this;\n\t\t} else {\n\t\t\tconst isAppend = index > endCursor || index < startCursor - 1;\n\n\t\t\tthis._postCache({\n\t\t\t\tisAppend,\n\t\t\t\tcache: [data],\n\t\t\t\tisTrusted: false,\n\t\t\t\tmoveItem: itemIndex,\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n   * Destroys elements, properties, and events used on a grid layout.\n   * @ko 그리드 레이아웃에 사용한 엘리먼트와 속성, 이벤트를 해제한다\n   */\n\tpublic destroy() {\n\t\tthis._infinite.clear();\n\t\tthis._watcher.destroy();\n\t\tthis._manager.destroy();\n\t\tthis._reset();\n\t\tthis._items.clear();\n\t\tthis._renderer.destroy();\n\t}\n\tprivate _setContainerSize(size: number) {\n\t\tthis._renderer.setContainerSize(Math.max(this._items.getMaxEdgeValue(), size));\n\t}\n\tprivate _appendLoadingBar() {\n\t\tconst loadingBar = this._loadingBar;\n\t\tconst container = this._renderer.container;\n\n\t\tfor (const type in loadingBar) {\n\t\t\tcontainer.appendChild(loadingBar[type as \""append\"" | \""prepend\""]);\n\t\t}\n\t}\n\tprivate _setSize(size: number) {\n\t\tthis._infinite.setSize(this._renderer.getViewSize());\n\t\tthis._manager.setSize(size);\n\t}\n\tprivate _fitItems(base: number, margin = 0) {\n\t\tbase > 0 && this._watcher.scrollBy(-base);\n\t\tthis._items.fit(base, this.options.horizontal);\n\t\tDOMRenderer.renderItems(this.getItems());\n\t\tthis._setContainerSize(this._getEdgeValue(\""end\"") || margin);\n\t\tbase < 0 && this._watcher.scrollBy(-base);\n\t}\n\t// called by visible\n\tprivate _fit(useFit = this.options.useFit) {\n\t\tlet base = this._getEdgeValue(\""start\"");\n\t\tconst margin = (this._getLoadingStatus() === LOADING_PREPEND && this._status.loadingSize) || 0;\n\t\tconst { isConstantSize, isEqualSize, useRecycle } = this.options;\n\n\t\tif (!useRecycle || !useFit || isConstantSize || isEqualSize) {\n\t\t\tif (base < margin) {\n\t\t\t\tthis._fitItems(base - margin, margin);\n\t\t\t}\n\t\t\tbase = 0;\n\t\t} else if (base !== 0 || margin) {\n\t\t\tthis._fitItems(base - margin, margin);\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t\tthis._isLoading() && this._renderLoading();\n\t\treturn base;\n\t}\n\tprivate _getEdgeValue(cursor: CursorType) {\n\t\treturn this._infinite.getEdgeValue(cursor);\n\t}\n\tprivate _isProcessing() {\n\t\treturn (this._status.processingStatus & PROCESSING) > 0;\n\t}\n\tprivate _isLoading() {\n\t\treturn this._getLoadingStatus() > 0;\n\t}\n\tprivate _getLoadingStatus() {\n\t\treturn this._status.processingStatus & (LOADING_APPEND | LOADING_PREPEND);\n\t}\n\tprivate _process(status: number, isAdd = true) {\n\t\tif (isAdd) {\n\t\t\tthis._status.processingStatus |= status;\n\t\t} else {\n\t\t\tthis._status.processingStatus -= this._status.processingStatus & status;\n\t\t}\n\t}\n\tprivate _insert({\n\t\telements,\n\t\tisAppend,\n\t\tisChildren,\n\t\tgroupKey = new Date().getTime() + Math.floor(Math.random() * 1000),\n\t}: {\n\t\telements: string | string[] | HTMLElement[] | IJQuery,\n\t\tisAppend?: boolean,\n\t\tisChildren?: boolean,\n\t\tgroupKey?: string | number,\n\t}) {\n\t\tif (this._isProcessing() || elements.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst items = ItemManager.from(elements, this.options.itemSelector, {\n\t\t\tgroupKey,\n\t\t});\n\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group: IInfiniteGridGroup = {\n\t\t\tgroupKey,\n\t\t\titems,\n\t\t\toutlines: { start: [], end: [] },\n\t\t};\n\t\tconst method = isAppend ? \""append\"" : \""prepend\"";\n\n\t\tthis._items[method](group);\n\n\t\tif (!isAppend) {\n\t\t\tconst infinite = this._infinite;\n\t\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\t\tconst endCursor = infinite.getCursor(\""end\"");\n\n\t\t\tinfinite.setCursor(\""start\"", startCursor + 1);\n\t\t\tinfinite.setCursor(\""end\"", endCursor + 1);\n\t\t}\n\t\tthis._postLayout({\n\t\t\tfromCache: NO_CACHE,\n\t\t\tgroups: [group],\n\t\t\titems,\n\t\t\tnewItems: items,\n\t\t\tisAppend,\n\t\t\tisChildren,\n\t\t\tisTrusted: NO_TRUSTED,\n\t\t});\n\t}\n\t// add items, and remove items for recycling\n\tprivate _recycle({ start, end }: { start: number, end: number }) {\n\t\tif (!this.options.useRecycle) {\n\t\t\treturn;\n\t\t}\n\t\tDOMRenderer.removeItems(this._items.pluck(\""items\"", start, end));\n\t}\n\tprivate _renderLoading(userStyle = this._status.loadingStyle) {\n\t\tif (!this._isLoading()) {\n\t\t\treturn;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst el = this._loadingBar[isAppend ? \""append\"" : \""prepend\""];\n\n\t\tif (!el) {\n\t\t\treturn;\n\t\t}\n\t\tconst style = assign({\n\t\t\tposition: \""absolute\"",\n\t\t}, userStyle);\n\n\t\tfor (const property in style) {\n\t\t\tel.style[property as keyof StyleType] = style[property as keyof StyleType];\n\t\t}\n\t\tthis._status.loadingSize = this.options.horizontal ? outerWidth(el) : outerHeight(el);\n\t\tconst posName = this.options.horizontal ? \""left\"" : \""top\"";\n\n\t\tif (!(posName in style)) {\n\t\t\tconst pos = isAppend ? this._getEdgeValue(\""end\"") : this._getEdgeValue(\""start\"") - this._status.loadingSize;\n\n\t\t\tel.style[posName] = `${pos}px`;\n\t\t}\n\t}\n\tprivate _updateItem(item: IInfiniteGridItem) {\n\t\tif (item && item.el) {\n\t\t\titem.content = item.el.outerHTML;\n\n\t\t\t!this.options.isEqualSize && resetSize(item);\n\t\t\tthis._renderer.updateSize([item]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate _setScrollPos(pos: number) {\n\t\tthis._watcher.setScrollPos(this._watcher.getContainerOffset() + pos);\n\t}\n\tprivate _scrollTo(pos: number) {\n\t\tthis._watcher.scrollTo(this._watcher.getContainerOffset() + pos);\n\t}\n\tprivate _onImageError(e: IErrorCallbackOptions) {\n\t\t/**\n\t\t * This event is fired when an error occurs in the image.\n\t\t * @ko 이미지 로드에 에러가 날 때 발생하는 이벤트.\n\t\t * @event eg.InfiniteGrid#imageError\n\t\t * @param {eg.InfiniteGrid.IErrorCallbackOptions} e The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @example\n\tig.on(\""imageError\"", e => {\n\t  e.remove();\n\t  e.removeItem();\n\t  e.replace(\""http://...jpg\"");\n\t  e.replace(imageElement);\n\t  e.replaceItem(\""item html\"");\n\t});\n\t\t */\n\t\tthis.trigger(\""imageError\"", assign(e, { element: e.item.el }));\n\t}\n\tprivate _postCache({\n\t\tcache,\n\t\tisAppend,\n\t\tisTrusted = true,\n\t\tmoveItem = -1,\n\t}: {\n\t\tcache: IInfiniteGridGroup[],\n\t\tisAppend?: boolean,\n\t\tisTrusted?: boolean,\n\t\tmoveItem?: number,\n\t}) {\n\t\tconst { isConstantSize } = this.options;\n\t\tconst items = ItemManager.pluck(cache, \""items\"");\n\t\tlet fromCache = true;\n\t\tconst newItems = items.filter(item => {\n\t\t\tif (!item.orgSize) {\n\t\t\t\tfromCache = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !isConstantSize && item.rect.top < DUMMY_POSITION / 10;\n\t\t});\n\n\t\tthis._postLayout({\n\t\t\tfromCache,\n\t\t\tgroups: cache,\n\t\t\titems,\n\t\t\tnewItems,\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t\tmoveItem,\n\t\t});\n\t}\n\tprivate _postLayout({\n\t\tfromCache,\n\t\tgroups,\n\t\titems = ItemManager.pluck(groups, \""items\""),\n\t\tnewItems,\n\t\tisAppend,\n\t\tisChildren,\n\t\tisTrusted,\n\t\tmoveCache,\n\t\tmoveItem = -2,\n\t}: {\n\t\tfromCache: boolean,\n\t\tgroups: IInfiniteGridGroup[],\n\t\titems: IInfiniteGridItem[],\n\t\tnewItems?: IInfiniteGridItem[],\n\t\tisAppend: boolean,\n\t\tisChildren?: boolean,\n\t\tisTrusted?: boolean,\n\t\tmoveCache?: boolean,\n\t\tmoveItem?: number,\n\t}) {\n\t\tthis._process(PROCESSING);\n\t\tconst method = isAppend ? \""append\"" : \""prepend\"";\n\t\tconst itemManager = this._items;\n\t\tconst horizontal = this.options.horizontal;\n\n\t\t// If container has children, it does not render first.\n\t\tif (!isChildren) {\n\t\t\tDOMRenderer.createElements(items);\n\t\t\tthis._renderer[method](items);\n\t\t}\n\t\tthis._manager[method]({\n\t\t\tgroups,\n\t\t\titems: newItems,\n\t\t}, {\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tconst infinite = this._infinite;\n\t\t\t\t\tconst startCursor = Math.max(infinite.getCursor(\""start\""), 0);\n\t\t\t\t\tconst endCursor = Math.max(infinite.getCursor(\""end\""), 0);\n\t\t\t\t\tlet requestStartCursor = itemManager.indexOf(groups[0].groupKey);\n\t\t\t\t\tlet requestEndCursor = itemManager.indexOf(groups[groups.length - 1].groupKey);\n\t\t\t\t\tlet isInCursor = true;\n\n\t\t\t\t\tif (requestStartCursor > endCursor + 1 || requestEndCursor < startCursor - 1) {\n\t\t\t\t\t\tisInCursor = false;\n\t\t\t\t\t}\n\t\t\t\t\tif (isInCursor) {\n\t\t\t\t\t\tif (isAppend) {\n\t\t\t\t\t\t\trequestStartCursor = startCursor;\n\t\t\t\t\t\t\trequestEndCursor = Math.max(endCursor, requestEndCursor);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequestStartCursor = Math.max(Math.min(startCursor, requestStartCursor), 0);\n\t\t\t\t\t\t\trequestEndCursor = endCursor;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t!isInCursor && this._recycle({ start: startCursor, end: endCursor });\n\t\t\t\t\tinfinite.setCursor(\""start\"", requestStartCursor);\n\t\t\t\t\tinfinite.setCursor(\""end\"", requestEndCursor);\n\n\t\t\t\t\tif (moveItem > -1) {\n\t\t\t\t\t\tconst pos = items[moveItem].rect[horizontal ? \""left\"" : \""top\""];\n\n\t\t\t\t\t\tif (!isInCursor && !moveCache) {\n\t\t\t\t\t\t\titemManager.clearOutlines(requestStartCursor, requestEndCursor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._scrollTo(pos);\n\t\t\t\t\t\tthis._setScrollPos(pos);\n\t\t\t\t\t}\n\t\t\t\t\tthis._onLayoutComplete({\n\t\t\t\t\t\titems,\n\t\t\t\t\t\tisAppend,\n\t\t\t\t\t\tfromCache,\n\t\t\t\t\t\tisTrusted,\n\t\t\t\t\t\tuseRecycle: false,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\terror: e => this._onImageError(e),\n\t\t\t\tend: ({ remove, layout }) => {\n\t\t\t\t\tremove.forEach(el => this.remove(el, false));\n\t\t\t\t\tif (layout) {\n\t\t\t\t\t\tthis.layout(false);\n\t\t\t\t\t} else if (!this.isProcessing() && this.options.useRecycle) {\n\t\t\t\t\t\tconst watcher = this._watcher;\n\t\t\t\t\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t\t\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\treturn this;\n\t}\n\t// called by visible\n\tprivate _requestAppend({ cache }: { cache?: IInfiniteGridGroup[] }) {\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({ cache, isAppend: APPEND });\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the bottom or right of a layout because there is no card to be displayed on screen when a user scrolls near bottom or right.\n\t\t\t * @ko 카드 엘리먼트가 레이아웃의 아래나 오른쪽에 추가돼야 할 때 발생하는 이벤트. 사용자가 아래나 오른쪽으로 스크롤해서 화면에 표시될 카드가 없을 때 발생한다\n\t\t\t * @event eg.InfiniteGrid#append\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>화면에 보여지는 마지막 그룹의 그룹키</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for append loading data. <ko> 뒷쪽에 추가되는 데이터 로딩을 시작한다. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩을 시작할 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t */\n\t\t\tthis.trigger(\""append\"", {\n\t\t\t\tisTrusted: TRUSTED,\n\t\t\t\tgroupKey: this.getGroupKeys().pop() || \""\"",\n\t\t\t\tstartLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.startLoading(true, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\t// called by visible\n\tprivate _requestPrepend({ cache }: { cache?: IInfiniteGridGroup[] }) {\n\t\tthis._fit(this.options.useFit || !cache.length);\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({ cache, isAppend: PREPEND });\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the top or left of a layout because there is no card to be displayed on screen when a user scrolls near top or left.\n\t\t\t * @ko 카드가 레이아웃의 위나 왼쪽에 추가돼야 할 때 발생하는 이벤트. 사용자가 위나 왼쪽으로 스크롤해서 화면에 표시될 카드가 없을 때 발생한다.\n\t\t\t * @event eg.InfiniteGrid#prepend\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>화면에 보여지는 첫번째 그룹의 그룹키</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for prepend loading data. <ko> 앞쪽에 추가되는 데이터 로딩을 시작한다. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩을 시작할 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t */\n\t\t\tthis.trigger(\""prepend\"", {\n\t\t\t\tisTrusted: TRUSTED,\n\t\t\t\tgroupKey: this.getGroupKeys().shift(),\n\t\t\t\tstartLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.startLoading(false, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\tprivate _onResize() {\n\t\tthis.layout(true);\n\t}\n\tprivate _onCheck({\n\t\tisForward,\n\t\tscrollPos,\n\t\thorizontal,\n\t\torgScrollPos,\n\t}: {\n\t\tisForward: boolean,\n\t\tscrollPos: number,\n\t\thorizontal: boolean,\n\t\torgScrollPos: number,\n\t}) {\n\t\t/**\n\t\t * This event is fired when the user scrolls.\n\t\t * @ko 사용자가 스크롤 할 경우 발생하는 이벤트.\n\t\t * @event eg.InfiniteGrid#change\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Boolean} param.isForward Indicates whether the scroll progression direction is forward or backword. <ko>스크롤 진행방향이 앞쪽으로 진행하는 지, 뒤쪽으로 진행하는지를 나타낸다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테이너 엘리먼트 기준의 현재 스크롤 위치값</ko>\n\t\t * @param {Boolean} param.orgScrollPos Current position of the scroll <ko>현재 스크롤 위치값</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t * @param {Boolean} options.horizontal Direction of the scroll movement (true: horizontal, false: vertical) <ko>스크롤 이동 방향 (true 가로방향, false 세로방향</ko>\n\t\t */\n\t\tthis.trigger(\""change\"", {\n\t\t\tisForward,\n\t\t\thorizontal,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t});\n\t\tthis._infinite.scroll(scrollPos);\n\t}\n\tprivate _onLayoutComplete({\n\t\titems,\n\t\tisAppend,\n\t\tisTrusted = false,\n\t\tuseRecycle = this.options.useRecycle,\n\t\tfromCache = false,\n\t\tisLayout = false,\n\t}: {\n\t\titems: IInfiniteGridItem[],\n\t\tisAppend: boolean,\n\t\tisTrusted: boolean,\n\t\tuseRecycle: boolean,\n\t\tfromCache: boolean,\n\t\tisLayout?: boolean,\n\t}) {\n\t\tconst viewSize = this._renderer.getViewSize();\n\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis._isLoading() && this._renderLoading();\n\t\t}\n\n\t\tconst watcher = this._watcher;\n\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t// recycle after _fit beacause prepend and append are occured simultaneously by scroll.\n\t\tif (!isLayout && useRecycle && !this._isLoading()) {\n\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t}\n\n\t\tconst size = this._getEdgeValue(\""end\"");\n\n\t\tif (isAppend) {\n\t\t\tthis._setContainerSize(size + this._status.loadingSize || 0);\n\t\t\tif (scrollPos > 0) {\n\t\t\t\t!IS_IOS && this._scrollTo(scrollPos);\n\t\t\t}\n\t\t}\n\t\t!isLayout && this._process(PROCESSING, false);\n\n\t\t/**\n\t\t * This event is fired when layout is successfully arranged through a call to the append(), prepend(), or layout() method.\n\t\t * @ko 레이아웃 배치가 완료됐을 때 발생하는 이벤트. append() 메서드나 prepend() 메서드, layout() 메서드 호출 후 카드의 배치가 완료됐을 때 발생한다\n\t\t * @event eg.InfiniteGrid#layoutComplete\n\t\t *\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Array} param.target Rearranged card elements<ko>재배치된 카드 엘리먼트들</ko>\n\t\t * @param {Boolean} param.fromCache Check whether these items are cache or not <ko>해당 아이템들이 캐시인지 아닌지 확인한다.</ko>\n\t\t * @param {Boolean} param.isLayout Returns true if this is an event called by resize event or layout method. Returns false if this is an event called by adding an item. <ko>해당 이벤트가 리사이즈 이벤트 또는 layout() 메서드를 통해 호출됐으면 true, 아이템 추가로 호출됐으면 false를 반환한다.</ko>\n\t\t * @param {Boolean} param.isAppend Checks whether the append() method is used to add a card element. It returns true even though the layoutComplete event is fired after the layout() method is called. <ko>카드 엘리먼트가 append() 메서드로 추가됐는지 확인한다. layout() 메서드가 호출된 후 layoutComplete 이벤트가 발생해도 'true'를 반환한다.</ko>\n\t\t * @param {Boolean} param.isScroll Checks whether scrolling has occurred after the append(), prepend(), ..., etc method is called <ko>append, prend 등 호출 후 스크롤이 생겼는지 확인한다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테이너 엘리먼트 기준의 현재 스크롤 위치값</ko>\n\t\t * @param {Number} param.orgScrollPos Current position of the scroll <ko>현재 스크롤 위치값</ko>\n\t\t * @param {Number} param.size The size of container element <ko>컨테이너 엘리먼트의 크기</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t */\n\t\tthis.trigger(\""layoutComplete\"", {\n\t\t\ttarget: items.concat(),\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t\tfromCache,\n\t\t\tisLayout,\n\t\t\tisScroll: viewSize < watcher.getContainerOffset() + size,\n\t\t\tscrollPos,\n\t\t\torgScrollPos: watcher.getOrgScrollPos(),\n\t\t\tsize,\n\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\tthis.endLoading(userStyle);\n\t\t\t},\n\t\t});\n\t\tthis._infinite.scroll(scrollPos);\n\t}\n\tprivate _reset() {\n\t\tthis._status = {\n\t\t\tprocessingStatus: IDLE,\n\t\t\tloadingSize: 0,\n\t\t\tloadingStyle: {},\n\t\t};\n\t}\n}\n\nexport default InfiniteGrid;\n"",""import { ALIGN, APPEND, PREPEND } from \""../consts\"";\nimport { getStyleNames, assignOptions, fill, cloneItems } from \""../utils\"";\nimport { ILayout, IAlign, IRectlProperties, IInfiniteGridItem, IInfiniteGridGroup } from \""../types\"";\n\n// ALIGN\nconst { START, CENTER, END, JUSTIFY } = ALIGN;\n\n/**\n * @classdesc The GridLayout is a layout that stacks cards with the same width as a stack of bricks. Adjust the width of all images to the same size, find the lowest height column, and insert a new card.\n * @ko GridLayout는 벽돌을 쌓아 올린 모양처럼 동일한 너비를 가진 카드를 쌓는 레이아웃이다. 모든 이미지의 너비를 동일한 크기로 조정하고, 가장 높이가 낮은 열을 찾아 새로운 이미지를 삽입한다. 따라서 배치된 카드 사이에 빈 공간이 생기지는 않지만 배치된 레이아웃의 아래쪽은 울퉁불퉁해진다.\n * @class eg.InfiniteGrid.GridLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.GridLayout module <ko>eg.InfiniteGrid.GridLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.align=START] Align of the position of the items (START, CENTER, END, JUSTIFY) <ko>아이템들의 위치의 정렬 (START, CENTER, END, JUSTIFY)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n  horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.GridLayout, {\n  margin: 10,\n  align: \""start\"",\n  itemSize: 200\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.GridLayout({\n  margin: 10,\n  align: \""center\"",\n  itemSize: 200,\n  horizontal: true,\n});\n\n</script>\n```\n **/\nclass GridLayout implements ILayout {\n\tpublic options: {\n\t\thorizontal: boolean,\n\t\tmargin: number,\n\t\talign: IAlign[keyof IAlign],\n\t\titemSize: number,\n\t};\n\tprivate _size: number;\n\tprivate _columnSize: number;\n\tprivate _columnLength: number;\n\tprivate _style: IRectlProperties;\n\tconstructor(options: Partial<GridLayout[\""options\""]> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\talign: START,\n\t\t\titemSize: 0,\n\t\t}, options);\n\t\tthis._size = 0;\n\t\tthis._columnSize = 0;\n\t\tthis._columnLength = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100, 200, 300, 400]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100, 200, 300, 400]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.GridLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.GridLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst firstItem = (groups.length && groups[0].items.length && groups[0].items[0]);\n\n\t\tthis.checkColumn(firstItem);\n\n\t\t// if outlines' length and columns' length are now same, re-caculate outlines.\n\t\tlet startOutline: number[];\n\n\t\tif (outline.length !== this._columnLength) {\n\t\t\tconst pos = outline.length === 0 ? 0 : Math.min(...outline);\n\n\t\t\t// re-layout items.\n\t\t\tstartOutline = fill(new Array(this._columnLength), pos);\n\t\t} else {\n\t\t\tstartOutline = outline.slice();\n\t\t}\n\t\tgroups.forEach(group => {\n\t\t\tconst items = group.items;\n\t\t\tconst result = this._layout(items, startOutline, APPEND);\n\n\t\t\tgroup.outlines = result;\n\t\t\tstartOutline = result.end;\n\t\t});\n\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.GridLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.GridLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\tprivate checkColumn(item: IInfiniteGridItem) {\n\t\tconst { itemSize, margin, horizontal } = this.options;\n\t\tconst sizeName = horizontal ? \""height\"" : \""width\"";\n\t\tconst columnSize = Math.floor(itemSize || (item && item.size[sizeName]) || 0) || 0;\n\n\t\tthis._columnSize = columnSize;\n\t\tif (!columnSize) {\n\t\t\tthis._columnLength = 1;\n\t\t\treturn;\n\t\t}\n\t\tthis._columnLength = Math.max(Math.floor((this._size + margin) / (columnSize + margin)), 1);\n\t}\n\tprivate _layout(items: IInfiniteGridItem[], outline: number[], isAppend?: boolean) {\n\t\tconst length = items.length;\n\t\tconst margin = this.options.margin;\n\t\tconst align = this.options.align;\n\t\tconst style = this._style;\n\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst pos2Name = style.startPos2;\n\t\tconst columnSize = this._columnSize;\n\t\tconst columnLength = this._columnLength;\n\n\t\tconst size = this._size;\n\t\tconst viewDist = (size - (columnSize + margin) * columnLength + margin);\n\n\t\tconst pointCaculateName = isAppend ? \""min\"" : \""max\"";\n\t\tconst startOutline = outline.slice();\n\t\tconst endOutline = outline.slice();\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst point = Math[pointCaculateName](...endOutline) || 0;\n\t\t\tlet index = endOutline.indexOf(point);\n\t\t\tconst item = items[isAppend ? i : length - 1 - i];\n\t\t\tconst size1 = item.size[size1Name];\n\t\t\tconst size2 = item.size[size2Name];\n\t\t\tconst pos1 = isAppend ? point : point - margin - size1;\n\t\t\tconst endPos1 = pos1 + size1 + margin;\n\n\t\t\tif (index === -1) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tlet pos2 = (columnSize + margin) * index;\n\n\t\t\t// ALIGN\n\t\t\tif (align === CENTER) {\n\t\t\t\tpos2 += viewDist / 2;\n\t\t\t} else if (align === END) {\n\t\t\t\tpos2 += viewDist + columnSize - size2;\n\t\t\t} else if (align === JUSTIFY) {\n\t\t\t\tif (columnLength <= 1) {\n\t\t\t\t\tpos2 += viewDist / 2;\n\t\t\t\t} else {\n\t\t\t\t\tpos2 = (size - columnSize) / (columnLength - 1) * index;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// tetris\n\t\t\titem.rect = {\n\t\t\t\t[pos1Name as \""top\""]: pos1,\n\t\t\t\t[pos2Name as \""left\""]: pos2,\n\t\t\t};\n\t\t\titem.column = index;\n\t\t\tendOutline[index] = isAppend ? endPos1 : pos1;\n\t\t}\n\t\tif (!isAppend) {\n\t\t\titems.sort((a, b) => {\n\t\t\t\tconst item1pos1 = a.rect[pos1Name];\n\t\t\t\tconst item1pos2 = a.rect[pos2Name];\n\t\t\t\tconst item2pos1 = b.rect[pos1Name];\n\t\t\t\tconst item2pos2 = b.rect[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t}\n\t\t// if append items, startOutline is low, endOutline is high\n\t\t// if prepend items, startOutline is high, endOutline is low\n\t\treturn {\n\t\t\tstart: isAppend ? startOutline : endOutline,\n\t\t\tend: isAppend ? endOutline : startOutline,\n\t\t};\n\t}\n\tprivate _insert(\n\t\titems: IInfiniteGridItem[] = [],\n\t\toutline: number[] = [],\n\t\tisAppend?: boolean,\n\t\tcache?: boolean,\n\t) {\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\tlet startOutline = outline;\n\n\t\tif (!this._columnLength) {\n\t\t\tthis.checkColumn(items[0]);\n\t\t}\n\t\tif (outline.length !== this._columnLength) {\n\t\t\tstartOutline = fill(new Array(this._columnLength), outline.length ? (Math[isAppend ? \""min\"" : \""max\""](...outline) || 0) : 0);\n\t\t}\n\n\t\tconst result = this._layout(clone, startOutline, isAppend);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: result,\n\t\t};\n\t}\n}\n\nexport default GridLayout;\n"",""/**\n * Copyright (c) NAVER Corp.\n * egjs-infinitegrid projects are licensed under the MIT license\n */\nimport InfiniteGrid from \""./InfiniteGrid\"";\nimport GridLayout from \""./layouts/GridLayout\"";\n\n(InfiniteGrid as any).GridLayout = GridLayout;\n\nexport default InfiniteGrid;\n""],""names"":[""isUndefined"",""value"",""Component"",""_eventHandler"",""options"",""_proto"",""prototype"",""trigger"",""eventName"",""customEvent"",""handlerList"",""hasHandlerList"",""length"",""concat"",""eventType"",""isCanceled"",""arg"",""i"",""stop"",""currentTarget"",""_len"",""arguments"",""restParam"",""Array"",""_key"",""apply"",""once"",""handlerToAttach"",""eventHash"",""self"",""on"",""listener"",""_len2"",""_key2"",""off"",""hasOn"",""name"",""push"",""handlerToDetach"",""undefined"",""k"",""handlerFunction"",""splice"",""VERSION"",""win"",""window"",""document"",""navigator"",""userAgent"",""ua"",""SUPPORT_COMPUTEDSTYLE"",""SUPPORT_ADDEVENTLISTENER"",""SUPPORT_PASSIVE"",""supportsPassiveOption"",""Object"",""defineProperty"",""addEventListener"",""get"",""e"",""IS_IE"",""test"",""IS_IOS"",""IS_ANDROID2"",""CONTAINER_CLASSNAME"",""IGNORE_CLASSNAME"",""TRANSITION_NAME"",""APPEND"",""PREPEND"",""VERTICAL"",""HORIZONTAL"",""CACHE"",""NO_CACHE"",""TRUSTED"",""NO_TRUSTED"",""MULTI"",""DUMMY_POSITION"",""GROUPKEY_ATT"",""DEFAULT_OPTIONS"",""horizontal"",""margin"",""agent"",""toLowerCase"",""isMobile"",""ALIGN"",""START"",""CENTER"",""END"",""JUSTIFY"",""IDLE"",""LOADING_APPEND"",""LOADING_PREPEND"",""PROCESSING"",""webkit"",""exec"",""WEBKIT_VERSION"",""parseInt"",""DEFENSE_BROWSER"",""TRANSFORM"",""TRANSITION"",""TRANSITION_END"",""nodes"",""array"",""len"",""html"",""match"",""param"",""multi"",""el"",""matchHTML"",""dummy"",""createElement"",""innerHTML"",""childNodes"",""querySelectorAll"",""toArray"",""isWindow"",""isJQuery"",""$"",""isArray"",""map"",""v"",""nodeName"",""nodeType"",""element"",""type"",""handler"",""eventListenerOptions"",""attachEvent"",""removeEventListener"",""detachEvent"",""callback"",""removeEvent"",""addEvent"",""prop"",""body"",""documentElement"",""x"",""y"",""scroll"",""scrollLeft"",""scrollTop"",""scrollBy"",""getComputedStyle"",""currentStyle"",""isOffset"",""isDocument"",""doc"",""Math"",""max"",""size"",""clientRect"",""getBoundingClientRect"",""right"",""left"",""bottom"",""top"",""cssSize"",""getStyles"",""indexOf"",""parseFloat"",""_getSize"",""width"",""outerWidth"",""height"",""outerHeight"",""STYLE"",""vertical"",""startPos1"",""endPos1"",""size1"",""startPos2"",""endPos2"",""size2"",""isHorizontal"",""target"",""_i"",""sources"",""forEach"",""source"",""key"",""defaultOptions"",""assign"",""items"",""item"",""jQuery"",""constructor"",""jquery"",""arr"",""clear"",""ItemManager"",""elements"",""selector"",""_a"",""groupKey"",""filted"",""selectItems"",""content"",""outerHTML"",""rect"",""filter"",""classNames"",""className"",""split"",""some"",""c"",""data"",""property"",""reduce"",""acc"",""startKey"",""endKey"",""datas"",""_data"",""startIndex"",""endIndex"",""slice"",""item2"",""data2"",""status"",""set"",""base"",""outlines"",""start"",""end"",""pluck"",""index"",""cursor"",""targetValue"",""Infinity"",""getOutline"",""getEdgeIndex"",""startCursor"",""endCursor"",""group"",""groups"",""pos"",""layouted"",""unshift"",""getAttribute"",""String"",""idx"",""orgSize"",""container"",""style"",""position"",""children"",""appendChild"",""properties"",""styles"",""p"",""transitionDuration"",""pos1"",""pos2"",""isEqualSize"",""isConstantSize"",""view"",""viewport"",""_init"",""resize"",""DOMRenderer"",""prevRect"",""setAttribute"",""render"",""setTransition"",""addOnceEvent"",""itemRect"",""renderItem"",""removeElement"",""parentNode"",""removeChild"",""noElementItems"",""replace"",""join"",""cssText"",""_size"",""getSize"",""_insert"",""isAppend"",""createElements"",""renderItems"",""_calcSize"",""isResize"",""innerWidth"",""innerHeight"",""_orgStyle"",""overflowX"",""overflowY"",""createContainer"",""df"",""createDocumentFragment"",""insertBefore"",""firstChild"",""check"",""isOverflowScroll"",""_timer"",""reset"",""_containerOffset"",""_view"",""_isScrollIssue"",""_onCheck"",""bind"",""_onResize"",""setScrollPos"",""_prevPos"",""scrollPos"",""getOrgScrollPos"",""applyScrollPos"",""scrollTo"",""arrPos"",""rawPos"",""getContainerOffset"",""_getOffset"",""prevPos"",""getScrollPos"",""orgScrollPos"",""isForward"",""clearTimeout"",""setTimeout"",""_this"",""threshold"",""endScrollPos"",""min"",""itemManger"",""useRecycle"",""append"",""prepend"",""recycle"",""_items"",""_status"",""_b"",""visibles"",""isVisible"",""lastIndexOf"",""setCursor"",""getCursor"",""startEdgePos"",""endEdgePos"",""startPos"",""endPos"",""cache"",""cachedAppendData"",""cachedPrependData"",""isPrepend"",""getEdgeOutline"",""result"",""remove"",""AutoSizer"",""resizeAll"",""prefix"",""onResize"",""__PREFIX__"",""isFixed"",""fixed"",""elementPrefix"",""dataWidth"",""dataHeight"",""CHECK_ALL"",""CHECK_ONLY_ERROR"",""ImageLoaded"",""checklist"",""complete"",""error"",""checkCount"",""endCount"",""checkEnd"",""checkImage"",""onError"",""itemIndex"",""__ITEM_INDEX__"",""onCheck"",""srcElement"",""isDataAttribute"",""images"",""naturalWidth"",""add"",""tagName"",""checkImageLoaded"",""sum"",""waitImageLoaded"",""renderer"",""attributePrefix"",""_renderer"",""_layout"",""layout"",""setSize"",""callbacks"",""isUpdate"",""isRelayout"",""layoutGroups"",""outline"",""updateSize"",""itemManager"",""groupIndex"",""prevGroup"",""getData"",""groupInfos"",""groupOutline"",""every"",""groupItems"",""groupInfo"",""removeTarget"",""replaceTarget"",""errorIndex"",""removeItem"",""hasTarget"",""src"",""removeAttribute"",""replaceItem"",""removeTargetLength"",""replaceTargetLength"",""layoutedItems"",""_c"",""_d"",""_e"",""_f"",""checkGroups"",""reverse"",""_complete"",""_error"",""_end"",""tslib_1"",""_super"",""itemSelector"",""useFit"",""_reset"",""_loadingBar"",""_watcher"",""Watcher"",""_infinite"",""Infinite"",""_requestAppend"",""_requestPrepend"",""_recycle"",""_manager"",""LayoutKlass"",""LayoutMananger"",""setLayout"",""_setSize"",""getViewportSize"",""includeCached"",""getVisibleItems"",""infinite"",""getItems"",""isLayoutAll"",""isChildren"",""getContainerSize"",""setContainerSize"",""_fit"",""clearOutlines"",""_onLayoutComplete"",""fromCache"",""isTrusted"",""isLayout"",""getVisibleData"",""getStatus"",""watcher"",""processingStatus"",""setStatus"",""visibleItems"",""createAndInsert"",""isReLayout"",""isNeededResize"",""_postLayout"",""newItems"",""_appendLoadingBar"",""userLoadingBar"",""loadingBarObj"",""loadingSize"",""loadingStyle"",""loadingBar"",""_isProcessing"",""_isLoading"",""_getLoadingStatus"",""userStyle"",""display"",""_process"",""_renderLoading"",""_setContainerSize"",""_getEdgeValue"",""_fitItems"",""isProcessing"",""getItem"",""_updateItem"",""isInCursor"",""fit"",""_scrollTo"",""moveCache"",""moveItem"",""_postCache"",""destroy"",""getMaxEdgeValue"",""getViewSize"",""getEdgeValue"",""isAdd"",""from"",""method"",""removeItems"",""posName"",""resetSize"",""requestStartCursor"",""requestEndCursor"",""_setScrollPos"",""_onImageError"",""getGroupKeys"",""pop"",""startLoading"",""endLoading"",""shift"",""viewSize"",""isScroll"",""InfiniteGrid"",""assignOptions"",""align"",""itemSize"",""_columnSize"",""_columnLength"",""_style"",""getStyleNames"",""firstItem"",""checkColumn"",""startOutline"",""fill"",""sizeName"",""columnSize"",""floor"",""size1Name"",""size2Name"",""pos1Name"",""pos2Name"",""columnLength"",""viewDist"",""pointCaculateName"",""endOutline"",""point"",""column"",""sort"",""a"",""b"",""item1pos1"",""item1pos2"",""item2pos1"",""item2pos2"",""clone"",""cloneItems"",""GridLayout""],""mappings"":""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""}"
0bdc52c54f6a7d90fde2aa908b00dce23aad9110,18681824,    - Implement youtube tags (http://stackoverflow.com/a/18681824)
795147d10faebe001e0927ee574b5efdcc1f1443,17443163,	// http://stackoverflow.com/questions/17443163/insert-content-in-static-containers-of-a-templated-class-prior-to-main
301f175fc07e4bfc7c27d34d19f670cfebcf219a,37628,0;57;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;servlet_class;0.6;0.006974248927038626;1.0;1.6069742489270387;0.0;0;be_create_through
6bae3c03d1cb98435c0ee38c3c8fe0c9acfae45e,42009190,"  <td><a href=""http://stackoverflow.com/q/42009190"">42009190</a></td>"
33e39e6e4ce46358cd33f5501d8b26bb5b8378f0,8174415,# http://stackoverflow.com/questions/8174415/is-it-possible-to-assert-template-or-render-template-against-the-same-partial-wi
9f571666b057f3aedf5a94a21e207f08dd96297d,24119684,      // http://stackoverflow.com/questions/24119684
58f6f216ab63a5dae806f5ace6721df98be8d46b,7422072,    // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
c62f5f29bd721940162427eabd1abed85084945f,1498777,"        how to show schema of a table: describe TABLENAME in mysql <a href=""http://stackoverflow.com/questions/1498777/how-do-i-show-the-schema-of-a-table-in-a-mysql-database"">REF</a>"
ba6952a88ac1b8ef1fb4814662dc73776524ba94,17253457,"{""version"":3,""sources"":[""webpack:///webpack:///components/style/index.less"",""webpack:///webpack:///components/style/core/normalize.less"",""webpack:///webpack:///components/style/core/base.less"",""webpack:///webpack:///components/style/mixins/size.less"",""webpack:///webpack:///components/style/mixins/clearfix.less"",""webpack:///webpack:///components/style/core/iconfont.less"",""webpack:///webpack:///components/style/mixins/iconfont.less"",""webpack:///webpack:///components/style/mixins/motion.less"",""webpack:///webpack:///components/style/core/motion/fade.less"",""webpack:///webpack:///components/style/core/motion/move.less"",""webpack:///webpack:///components/style/themes/default.less"",""webpack:///webpack:///components/style/core/motion/other.less"",""webpack:///webpack:///components/style/core/motion/slide.less"",""webpack:///webpack:///components/style/core/motion/swing.less"",""webpack:///webpack:///components/style/core/motion/zoom.less"",""webpack:///webpack:///components/style/core/motion.less"",""webpack:///webpack:///components/affix/style/index.less"",""webpack:///webpack:///components/alert/style/index.less"",""webpack:///webpack:///components/anchor/style/index.less"",""webpack:///webpack:///components/select/style/index.less"",""webpack:///webpack:///components/style/mixins/compatibility.less"",""webpack:///webpack:///components/input/style/mixin.less"",""webpack:///webpack:///components/input/style/search-input.less"",""webpack:///webpack:///components/button/style/mixin.less"",""webpack:///webpack:///components/input/style/index.less"",""webpack:///webpack:///components/back-top/style/index.less"",""webpack:///webpack:///components/badge/style/index.less"",""webpack:///webpack:///components/breadcrumb/style/index.less"",""webpack:///webpack:///components/button/style/index.less"",""webpack:///webpack:///components/calendar/style/index.less"",""webpack:///webpack:///components/radio/style/index.less"",""webpack:///webpack:///components/style/mixins/opacity.less"",""webpack:///webpack:///components/card/style/index.less"",""webpack:///webpack:///components/carousel/style/index.less"",""webpack:///webpack:///components/cascader/style/index.less"",""webpack:///webpack:///components/checkbox/style/mixin.less"",""webpack:///webpack:///components/grid/style/index.less"",""webpack:///webpack:///components/grid/style/mixin.less"",""webpack:///webpack:///components/collapse/style/index.less"",""webpack:///webpack:///components/date-picker/style/Picker.less"",""webpack:///webpack:///components/date-picker/style/Calendar.less"",""webpack:///webpack:///components/date-picker/style/RangePicker.less"",""webpack:///webpack:///components/date-picker/style/TimePicker.less"",""webpack:///webpack:///components/date-picker/style/MonthPanel.less"",""webpack:///webpack:///components/date-picker/style/YearPanel.less"",""webpack:///webpack:///components/date-picker/style/DecadePanel.less"",""webpack:///webpack:///components/date-picker/style/MonthPicker.less"",""webpack:///webpack:///components/time-picker/style/index.less"",""webpack:///webpack:///components/dropdown/style/index.less"",""webpack:///webpack:///components/form/style/mixin.less"",""webpack:///webpack:///components/form/style/index.less"",""webpack:///webpack:///components/input-number/style/index.less"",""webpack:///webpack:///components/mention/style/index.less"",""webpack:///webpack:///components/menu/style/index.less"",""webpack:///webpack:///components/message/style/index.less"",""webpack:///webpack:///components/modal/style/modal.less"",""webpack:///webpack:///components/modal/style/confirm.less"",""webpack:///webpack:///components/notification/style/index.less"",""webpack:///webpack:///components/pagination/style/index.less"",""webpack:///webpack:///components/popover/style/index.less"",""webpack:///webpack:///components/progress/style/index.less"",""webpack:///webpack:///components/rate/style/index.less"",""webpack:///webpack:///components/slider/style/index.less"",""webpack:///webpack:///components/tooltip/style/index.less"",""webpack:///webpack:///components/spin/style/index.less"",""webpack:///webpack:///components/steps/style/index.less"",""webpack:///webpack:///components/switch/style/index.less"",""webpack:///webpack:///components/table/style/index.less"",""webpack:///webpack:///components/tabs/style/index.less"",""webpack:///webpack:///components/tag/style/index.less"",""webpack:///webpack:///components/timeline/style/index.less"",""webpack:///webpack:///components/transfer/style/index.less"",""webpack:///webpack:///components/tree-select/style/index.less"",""webpack:///webpack:///components/tree/style/mixin.less"",""webpack:///webpack:///components/tree/style/index.less"",""webpack:///webpack:///components/upload/style/index.less""],""names"":[],""mappings"":"";;;;;;AAAA,4ECYA,KACE,uBACA,iBACA,0BACA,8BAUF,KACE,SAOF,wCAME,cAQF,GACE,cACA,eAWF,uBAGE,cAOF,OACE,gBAQF,GACE,uBACA,SACA,iBAQF,IACE,gCACA,cAWF,EACE,6BACA,qCAQF,iBAEE,gBAQF,YACE,mBACA,0BACA,iCAOF,SAEE,oBASA,mBAQF,cAGE,gCACA,cAOF,IACE,kBAOF,KACE,sBACA,WAOF,MACE,cAQF,QAEE,cACA,cACA,kBACA,wBAGF,IACE,cAGF,IACE,UAUF,YAEE,qBAOF,sBACE,aACA,SAOF,IACE,kBAOF,eACE,gBAWF,sCAKE,uBACA,eACA,iBACA,SAQF,aAEE,iBAQF,cAEE,oBASF,qDAIE,0BAOF,wHAIE,kBACA,UAOF,4GAIE,8BAOF,SACE,wBACA,aACA,2BAUF,OACE,sBACA,cACA,cACA,eACA,UACA,mBAQF,SACE,qBACA,wBAOF,SACE,cAQF,6BAEE,sBACA,UAOF,kFAEE,YAQF,cACE,6BACA,oBAOF,qFAEE,wBAQF,6BACE,0BACA,aAWF,aAEE,cAOF,QACE,kBAUF,OACE,qBAkBF,kBACE,aCzcF,EAEE,0CAGF,iBAJE,qBACA,CASF,UCVE,WACA,YDaF,KACE,qJACA,eACA,gBACA,WACA,sBAIF,qMACE,SACA,UAIF,6BACE,oBACA,kBACA,oBACA,cAGF,MAEE,gBAIF,mCACE,aAGF,iBACE,mBACA,WAFF,YACE,mBACA,WAIF,EACE,cACA,uBACA,qBACA,aACA,eACA,4DAEA,QACE,cAGF,SACE,cAGF,iBAEE,UACA,qBAGF,YACE,WACA,mBACA,oBAIJ,aACE,aACA,WACA,qBACA,WACA,UACA,gBAGF,kBAIE,6CAIF,UElGE,OACA,iCAEE,YACA,cAEF,gBACE,WACA,kBACA,YACA,SCXJ,WACE,oBACA,2DACA,4TAGuC,CAGzC,SCVE,qBACA,kBACA,wBACA,kBACA,oBACA,oBACA,cACA,kCACA,mCACA,kCACA,gBACE,cACA,8BDEJ,6BAA8C,eAAS,CACvD,8BAA+C,eAAS,CACxD,wBAAyC,eAAS,CAClD,yBA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W,EATf,0BACE,GACE,UACA,kDACA,6DAAW,CAEb,GACE,UACA,kDACA,uDAAW,EAIf,mCACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,8DACA,WATJ,2BACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,8DACA,WAIJ,+BACE,GACE,kDACA,gEACA,UAEF,GACE,kDACA,wDACA,WATJ,uBACE,GACE,kDACA,gEACA,UAEF,GACE,kDACA,wDACA,WAIJ,gCACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,gEACA,WATJ,wBACE,GACE,kDACA,wDACA,UAEF,GACE,kDACA,gEACA,WErHJ,iCACE,GACE,0DACA,qDAAW,CAEb,GACE,0DACA,uDAAW,EJMb,yBIZA,GACE,0DACA,qDAAW,CAEb,GACE,0DACA,uDAAW,EJWb,iDAVA,sDACA,0DAWE,gEAEF,8EAEE,gEACA,kEAEF,sCACE,kEACA,kEK3BF,iCAEE,UACA,4DFuCmB,oDErCrB,gBACE,kEFqCmB,0DH3BrB,uDAVA,sDACA,0DAWE,gEAEF,sFAEE,oEACA,kEAEF,0CACE,sEACA,kEK3BF,qCAEE,UACA,4DFuCmB,oDErCrB,kBACE,kEFqCmB,0DH3BrB,uDAVA,sDACA,0DAWE,gEAEF,sFAEE,oEACA,kEAEF,0CACE,sEACA,kEK3BF,qCAEE,UACA,4DFuCmB,oDErCrB,kBACE,kEFqCmB,0DH3BrB,0DAVA,sDACA,0DAWE,gEAEF,0FAEE,sEACA,kEAEF,4CACE,wEACA,kEK3BF,uCAEE,UACA,4DFuCmB,oDErCrB,mBACE,kEFqCmB,0DE5BvB,gCACE,GACE,UACA,kDACA,iDAAW,CAEb,GACE,UACA,kDACA,+CAAW,EATf,wBACE,GACE,UACA,kDACA,iDAAW,CAEb,GACE,UACA,kDACA,+CAAW,EAIf,iCACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,iDAAW,EATf,yBACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,iDAAW,EAIf,kCACE,GACE,UACA,8DACA,iDAAW,CAEb,GACE,UACA,8DACA,+CAAW,EATf,0BACE,GACE,UACA,8DACA,iDAAW,CAEb,GACE,UACA,8DACA,+CAAW,EAIf,mCACE,GACE,UACA,8DACA,+CAAW,CAEb,GACE,UACA,8DACA,iDAAW,EATf,2BACE,GACE,UACA,8DACA,+CAAW,CAEb,GACE,UACA,8DACA,iDAAW,EAIf,kCACE,GACE,UACA,kDACA,iDAAW,CAEb,GACE,UACA,kDACA,+CAAW,EATf,0BACE,GACE,UACA,kDACA,iDAAW,CAEb,GACE,UACA,kDACA,+CAAW,EAIf,mCACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,iDAAW,EATf,2BACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,iDAAW,EAIf,mCACE,GACE,UACA,wDACA,iDAAW,CAEb,GACE,UACA,wDACA,+CAAW,EATf,2BACE,GACE,UACA,wDACA,iDAAW,CAEb,GACE,UACA,wDACA,+CAAW,EAIf,oCACE,GACE,UACA,wDACA,+CAAW,CAEb,GACE,UACA,wDACA,iDAAW,EATf,4BACE,GACE,UACA,wDACA,+CAAW,CAEb,GACE,UACA,wDACA,iDAAW,ECpHb,2BNEA,sDACA,0DMAE,gEAEF,kEAEE,4DACA,kEAMJ,8BACE,MAEE,uDAAW,CAEb,IACE,+DAAW,CAEb,IACE,6DAAW,CAEb,IACE,6DAAW,CAEb,IACE,2DAAW,ENjBb,sBMGA,MAEE,uDAAW,CAEb,IACE,+DAAW,CAEb,IACE,6DAAW,CAEb,IACE,6DAAW,CAEb,IACE,2DAAW,ENZb,qCAVA,sDACA,0DAWE,gEAEF,8DAEE,0DACA,kEAEF,8BACE,4DACA,kEO3BF,yBAEE,qEACA,8DJoCmB,sDIlCrB,YACE,gEJmCmB,wDHzBrB,iDAVA,sDACA,0DAWE,gEAEF,8EAEE,gEACA,kEAEF,sCACE,kEACA,kEO3BF,iCAEE,qEACA,8DJoCmB,sDIlCrB,gBACE,gEJmCmB,wDHzBrB,gEAVA,sDACA,0DAWE,gEAEF,kGAEE,gEACA,kEAEF,gDACE,kEACA,kEO3BF,2CAEE,qEACA,8DJoCmB,sDIlCrB,qBACE,gEJmCmB,wDHzBrB,8CAVA,sDACA,0DAWE,gEAEF,0EAEE,8DACA,kEAEF,oCACE,gEACA,kEO3BF,+BAEE,qEACA,8DJoCmB,sDIlCrB,eACE,gEJmCmB,wDHzBrB,oDAVA,sDACA,0DAWE,gEAEF,kFAEE,kEACA,kEAEF,wCACE,oEACA,kEO3BF,mCAEE,qEACA,8DJoCmB,sDIlCrB,iBACE,gEJmCmB,wDHzBrB,oDAVA,sDACA,0DAWE,gEAEF,kFAEE,kEACA,kEAEF,wCACE,oEACA,kEO3BF,mCAEE,qEACA,8DJoCmB,sDIlCrB,iBACE,gEJmCmB,wDHzBrB,uDAVA,sDACA,0DAWE,gEAEF,sFAEE,oEACA,kEAEF,0CACE,sEACA,kEO3BF,qCAEE,qEACA,8DJoCmB,sDIlCrB,kBACE,gEJmCmB,wDInBvB,6BACE,GACE,UACA,+CAAW,CAEb,GACE,UACA,6CAAW,EAPf,qBACE,GACE,UACA,+CAAW,CAEb,GACE,UACA,6CAAW,EAIf,8BACE,GACE,6CAAW,CAEb,GACE,UACA,+CAAW,EANf,sBACE,GACE,6CAAW,CAEb,GACE,UACA,+CAAW,EAIf,gCACE,GACE,UACA,+CAAW,CAEb,GACE,6CAAW,EANf,wBACE,GACE,UACA,+CAAW,CAEb,GACE,6CAAW,EAIf,iCACE,GACE,6CAAW,CAEb,GACE,UACA,+CAAW,EANf,yBACE,GACE,6CAAW,CAEb,GACE,UACA,+CAAW,EAIf,+BACE,GACE,UACA,sDACA,+CAAW,CAEb,GACE,sDACA,6CAAW,EARf,uBACE,GACE,UACA,sDACA,+CAAW,CAEb,GACE,sDACA,6CAAW,EAIf,gCACE,GACE,sDACA,6CAAW,CAEb,GACE,UACA,sDACA,+CAAW,EARf,wBACE,GACE,sDACA,6CAAW,CAEb,GACE,UACA,sDACA,+CAAW,EAIf,iCACE,GACE,UACA,sDACA,+CAAW,CAEb,GACE,sDACA,6CAAW,EARf,yBACE,GACE,UACA,sDACA,+CAAW,CAEb,GACE,sDACA,6CAAW,EAIf,kCACE,GACE,sDACA,6CAAW,CAEb,GACE,UACA,sDACA,+CAAW,EARf,0BACE,GACE,sDACA,6CAAW,CAEb,GACE,UACA,sDACA,+CAAW,EAIf,kCACE,GACE,UACA,4DACA,+CAAW,CAEb,GACE,4DACA,6CAAW,EARf,0BACE,GACE,UACA,4DACA,+CAAW,CAEb,GACE,4DACA,6CAAW,EAIf,mCACE,GACE,4DACA,6CAAW,CAEb,GACE,UACA,4DACA,+CAAW,EARf,2BACE,GACE,4DACA,6CAAW,CAEb,GACE,UACA,4DACA,+CAAW,EAIf,iCACE,GACE,UACA,4DACA,+CAAW,CAEb,GACE,4DACA,6CAAW,EARf,yBACE,GACE,UACA,4DACA,+CAAW,CAEb,GACE,4DACA,6CAAW,EAIf,kCACE,GACE,4DACA,6CAAW,CAEb,GACE,UACA,4DACA,+CAAW,EARf,0BACE,GACE,4DACA,6CAAW,CAEb,GACE,UACA,4DACA,+CAAW,ECpJf,qBACE,gBACA,4BACE,4DLuBmB,oDMjCvB,WACE,eACA,WCAF,WACE,kBACA,0BACA,kBACA,WACA,eACA,iBACA,mBAEA,6BACE,0BAGF,gBACE,eACA,UACA,UACA,kBAGF,uBACE,eACA,iBACA,aAGF,mBACE,yBACA,yBAFF,mCAII,cAIJ,gBACE,yBACA,yBAFF,gCAII,cAIJ,mBACE,sBACA,yBAFF,mCAII,WAIJ,iBACE,sBACA,yBAFF,iCAII,WAIJ,sBACE,eACA,kBACA,WACA,SACA,YACA,iBACA,gBACA,eARF,qCAWI,WACA,4DACA,2CACE,cAKN,sBACE,kBACA,WAGF,4BACE,4BACA,kBACA,kBACA,mBACA,WACA,gBAGF,8CACE,aAGF,4CACE,kBACA,SACA,UACA,eAGF,kDACE,kBACA,SACA,WACA,eACA,eAGF,+CACE,eACA,cACA,cACA,kBAGF,mDACE,cAGF,2BACE,mBACA,SACA,cACA,iBACA,0GACA,iFAGF,0BACE,sIACA,0DAGF,kBACE,gBACA,SACA,gBAIJ,qCACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,+CAAW,EATf,6BACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,+CAAW,EAIf,sCACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,+CAAW,EATf,8BACE,GACE,UACA,kDACA,+CAAW,CAEb,GACE,UACA,kDACA,+CAAW,ECrKb,YACE,kBACA,oBACE,sBAGF,gBACE,kBACA,YACA,OACA,MACA,uBACE,YACA,kBACA,UACA,YACA,cACA,yBACA,cAEF,qBACE,aACA,kBACA,UACA,WACA,kBACA,yBACA,sBACA,SACA,sEACA,4FAAW,CACX,6BACE,qBAKN,uDACE,aAIJ,iBACE,uBACA,cAEA,kCACE,gBACA,mBAGF,uBACE,cACA,kBACA,8CACA,WACA,mBACA,gBACA,uBACA,kBAGF,kCACE,gBAGF,+CACE,cAGF,kCACE,eCtCN,YACE,sBACA,qBACA,kBACA,WACA,eALF,oBAQI,UACA,sBAIF,kBb/CA,kBACA,wBACA,kBACA,oBACA,oBAEA,kCACA,mCACA,kCayCE,kBACA,QACA,UACA,cACA,gBb3BF,qBAEA,eACA,gBACA,kHcjBA,8GACA,OdLA,yBACE,cACA,8BcKF,wBACE,8CdgBA,CADF,oBayBI,aAGF,yBACE,gBACA,2KAIJ,sBACE,aACA,qFAEA,sBACA,cAEA,sBACA,kBACA,yBACA,2GTzCmB,CS2CnB,4BEvDF,qBF2DE,mGElEF,qBACA,UACA,yCFsEE,6BAnFF,qBACA,kBACA,wBACA,kBACA,oBACA,oBACA,UACA,kBACA,UACA,UACA,gBACA,QACA,eACA,WACA,WACA,YACA,gBACA,iBACA,eACA,gGACA,oCACE,cbVF,oBACA,kCACA,mCACA,kCACA,eaOiB,CAEjB,mCACE,WA8DA,yDACE,UAGF,qCACE,WACA,gBACA,uBACA,mBACA,eACA,mBAIJ,qBACE,WAGF,2CACE,mBACA,mBACA,oJAGE,qBACA,gBAGF,kDACE,aACA,kBACA,oBAIJ,mFACE,mBACA,WACA,mBACA,2FACE,aAIJ,8BACE,YACA,kBACA,eAGF,gCACE,cACA,gBACA,iBACA,kBACA,iBAEA,sCACE,YACA,kBACA,oBACA,qBACA,QAIJ,6CAEI,YAFJ,+CAKI,iBALJ,+CAQI,gBARJ,kFAWQ,YACA,iBAMR,qCAEI,kBAFJ,6CAKI,YALJ,+CAQI,iBARJ,+CAWI,gBAXJ,kFAcQ,YACA,iBAMR,2DACE,WACA,eACA,iEACE,WAIJ,gCACE,qBACA,kBAGF,0EAEE,kBACA,QACA,OACA,UACA,WACA,iBACA,YACA,eACA,iBACA,gBACA,uBACA,mBAGF,uCACE,SAGF,2BACE,kBACA,YAEA,2DACE,WACA,gBANJ,2DAUI,WACA,YAXJ,qDAeI,SACA,eACA,YACA,WACA,uBACA,UACA,kBArBJ,6DAyBI,kBACA,MACA,aACA,gBACA,oBA7BJ,6BAiCI,YAIJ,gCACE,gBACA,YACA,mBf7QF,OACA,6EAEE,YACA,cAEF,sCACE,WACA,kBACA,YACA,SegQF,2DAOI,WACA,UARJ,qFAUM,YAVN,gEAeI,gBACA,mBACA,YAjBJ,4GAsBI,eACA,YACA,iBAxBJ,8DA4BI,yBACA,kBACA,eACA,WACA,eACA,iBACA,cACA,kBACA,gBACA,oHACA,sBACA,wEACE,eAxCN,uEA6CI,qBACA,mBACA,gBACA,uBACA,eACA,iHT1RiB,CSwOrB,sEb3QA,kBACA,wBACA,kBACA,oBACA,oBACA,cACA,kCACA,mCACA,kCa0TI,WACA,oBACA,eAEA,gBACA,4Gb7SJ,qBAEA,eACA,gBACA,oIcjBA,8GACA,OD2TI,kBACA,UACA,kBblUJ,6EACE,cACA,8BcKF,4EACE,8CdgBA,CADF,4Ea6SM,cAEF,6EACE,eAAS,CAKf,mCCnVA,sEDsVI,4BAAe,CACf,0CACE,sFAAW,CALjB,uCErUA,qBACA,UACA,yCFgVA,uCAEI,aAFJ,gDAKI,YACA,WACA,WAPJ,qDAUI,WACA,YAXJ,+CAcI,WACA,YACA,kBACA,UACA,4GACA,gBAKN,qBAuBE,sBACA,oCACA,kBACA,sBACA,aACA,aACA,YACA,kBACA,aACA,gBACA,eAhCA,wMAEE,gEAGF,kMAEE,oEAGF,mGACE,kEAGF,gGACE,sEAGF,4BACE,aAeF,0BACE,aACA,gBACA,eACA,gBACA,iBACA,cAEA,0CACE,SACA,UAFF,yEAKI,kBAIJ,2CACE,WACA,gBACA,iBAGF,+BACE,kBACA,cACA,iBACA,gBACA,WAEA,eACA,mBACA,gBACA,sEAEA,2EAEE,yBAGF,wCACE,WACA,mBAEA,8CACE,WACA,sBACA,mBAKF,sFAEE,yBACA,gBACA,WAIJ,uCACE,WACA,aACA,gBACA,yBACA,cAOF,wFbrdJ,oBACA,kCACA,mCACA,kCACA,gBamdM,kBb7cN,qBAEA,eACA,iBACA,oIcjBA,8GACA,OD2dM,wDACA,kBACA,QACA,6FACA,WACA,gBACA,gDC/dN,8FACE,8CdgBA,CADF,8FamdM,WAGF,iGACE,aAGF,wMAEE,cACA,qBAKN,wGAGI,cGlgBN,0BACE,qBACA,kBAIE,6FADA,wDAWE,iDATA,kBACA,UACA,eAEA,eACA,YACA,iBACA,QACA,iBACA,uDACE,cAKN,gEACE,yBAMJ,0BACE,qBACA,sBAIA,mHAEE,kBACA,kBACA,SACA,WAGF,yDACE,mBAVJ,kCCeE,WACA,yBACA,qBDFE,0BACA,UACA,kBACA,uBACA,UACA,iBACA,kBArBJ,+CCqBI,mBACA,qDACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA5BJ,gFAcA,cACA,yBACA,qBAhBA,0GAoBE,mBACA,sHACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAvBJ,kFASA,cACA,yBACA,qBAXA,4GAeE,mBACA,wHACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzDF,ueA2CF,WACA,yBACA,qBA7CE,ymBAiDA,mBACA,qqBACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA8FJ,kKAIE,gBDzGA,wCACE,qBAGJ,iHCXA,WACA,yBACA,qBDSA,2ICLE,mBACA,uJACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA5CJ,0PA8BA,WACA,yBACA,qBAhCA,8SAoCE,mBACA,sUACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAvCJ,8PAyBA,WACA,yBACA,qBA3BA,kTA+BE,mBACA,0UACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzDF,g5CA2CF,WACA,yBACA,qBA7CE,opDAiDA,mBACA,4wDACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBD7BN,uEAgCM,kBEjEN,WHkCE,kBACA,qBACA,gBACA,WACA,YACA,YACA,eACA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,ySXjBqB,CULrB,6BACE,WACA,UAGF,iCACE,WAGF,sCACE,WCkBF,kCAnCA,qBAuCA,iBA7CA,UACA,yCA4CA,qBAnCA,yBACA,UACA,mBACA,WACA,2BARA,qBA4CA,mBACE,eACA,YACA,sBAIF,cAvEA,gBACA,YA0EA,cAtEA,gBACA,YACA,kBGDF,iBH6FE,kBACA,cACA,yBACA,WAGA,8BACE,WACA,eACA,gBGtGJ,+BH0GI,kBAGF,yEAGE,mBAEA,kLACE,gBAIJ,6CAEE,UACA,mBACA,sBAGF,wBACE,wBG/HJ,4BHmII,kBACA,UACA,WACA,WACA,gBAGF,uBACE,gBACA,eACA,gBACA,cACA,WACA,kBACA,sBACA,yBACA,kBACA,kBAVF,mCAcI,iBAdJ,yDAiBM,yBACA,SACA,YACA,6BACA,gBAGF,+HAGI,cA3BR,0CAmCI,kBACA,WACA,MACA,OACA,QACA,SGlLN,sVH+LM,6BACA,0BAIJ,mCACE,eAEF,kCACE,cGxMJ,sNHkNM,4BACA,yBAKJ,0EA9NA,gBACA,YAkOA,0EA9NA,gBACA,YACA,kBIRF,cACE,WACA,eACA,YACA,YACA,YACA,WACA,eAEA,sBACE,YACA,WACA,mBACA,mCACA,WACA,iBACA,CAEA,kDAFA,2GfiBmB,CeTrB,4BALI,kCACA,CAIJ,mBACE,eACA,gBCzBJ,WACE,kBACA,qBACA,cACA,sBAEA,iBACE,kBACA,6FACA,UACA,YACA,mBACA,eACA,gBACA,6BACA,WACA,iBACA,kBACA,cACA,eACA,mBACA,mGACA,mBACA,0BAjBF,4CAoBI,WAIJ,eACE,kBACA,6FACA,0FACA,SACA,WACA,UACA,mBACA,gBACA,WACA,0BAGF,kBACE,oBACA,wBAEA,sBACE,UACA,WACA,qBACA,kBAEF,0BACE,yBAEF,6BACE,yBACA,wHAEF,0BACE,yBAEF,wBACE,sBAEF,0BACE,sBAEF,uBACE,WACA,eACA,gBAIJ,6CAEE,8HACA,0DAGF,sBACE,gIACA,0DAGF,0CACE,SACA,cACA,kBACA,uFAIJ,uCACE,MAEE,UAEF,IACE,WANJ,+BACE,MAEE,UAEF,IACE,WAIJ,mBACE,gBACA,wBACE,qBACA,4ShB7EmB,CgBgFrB,uEAEI,aACA,+EACE,cAMR,kCACE,GACE,UACA,+EAAoB,CAEtB,GACE,+EAAoB,EANxB,0BACE,GACE,UACA,+EAAoB,CAEtB,GACE,+EAAoB,EAIxB,mCACE,GACE,+EAAoB,CAEtB,GACE,UACA,+EAAoB,EANxB,2BACE,GACE,+EAAoB,CAEtB,GACE,UACA,+EAAoB,EC3IxB,gBACE,WACA,eAFF,kBAKI,WACA,kDACA,wBACE,cAIJ,gCACE,gBACA,WAGF,0DACE,aAGF,0BACE,aACA,cAGF,mCAEI,gBCxBN,SL+FE,qBACA,gBACA,gBACA,kBACA,wDACA,eACA,sBACA,6BACA,mBACA,gBA7GA,iBACA,eACA,kBA6GA,qFACA,4GACA,kBA9DA,WACA,yBACA,qBKhDF,kBL+GI,cAGF,wCAGE,UAGF,+BACE,qBAGF,gCACE,UACA,wCAGF,qCAEE,mBAFF,yCAII,oBAIJ,YA9IA,qBACA,eACA,kBAgJA,YAlJA,gBACA,eACA,kBKGF,sBLoDI,mBACA,4BACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA5BJ,8BAcA,cACA,yBACA,qBAhBA,wDAoBE,mBACA,oEACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAvBJ,gCASA,cACA,yBACA,qBAXA,0DAeE,mBACA,sEACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzDF,6OA2CF,WACA,yBACA,qBA7CE,+WAiDA,mBACA,2aACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA8FJ,8DAIE,gBK1JF,iBL0CA,WACA,yBACA,qBK5CA,8BLgDE,mBACA,oCACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA5CJ,8CA8BA,WACA,yBACA,qBAhCA,wEAoCE,mBACA,oFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAvCJ,gDAyBA,WACA,yBACA,qBA3BA,0EA+BE,mBACA,sFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzDF,6TA2CF,WACA,yBACA,qBA7CE,+bAiDA,mBACA,2fACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBKrDF,mEACE,2BACA,0BAIA,6DACE,2BACA,uEACE,2BAKN,sGAEE,0BACA,0HACE,0BAKN,eLgBA,WACA,6BACA,qBKlBA,4BLsBE,mBACA,kCACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA5BJ,0CAcA,cACA,6BACA,qBAhBA,oEAoBE,mBACA,gFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAvBJ,4CASA,cACA,6BACA,qBAXA,sEAeE,mBACA,kFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzDF,ySA2CF,WACA,yBACA,qBA7CE,2aAiDA,mBACA,ueACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBK1BJ,gBLYA,WACA,6BACA,qBA0HA,oBKxIA,6BLkBE,mBACA,mCACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA5BJ,4CAcA,cACA,6BACA,qBAhBA,sEAoBE,mBACA,kFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAvBJ,8CASA,cACA,6BACA,qBAXA,wEAeE,mBACA,oFACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzDF,mTA2CF,WACA,yBACA,qBA7CE,qbAiDA,mBACA,ifACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBKtBJ,wCzB3CA,WACA,YoBDA,UACA,eACA,kBAqLA,8DpBvLA,WACA,YoBDA,UACA,eACA,kBA0LA,8DpB5LA,WACA,YoBDA,UACA,eACA,kBK8CA,gBACE,kBACA,SACA,UACA,YACA,WACA,gBACA,YACA,WACA,sBACA,UACA,sDACA,oBACA,aAGF,yBACE,kBACA,oBACA,kBAHF,kCAKI,kBACA,2GlBpCiB,CkBsCnB,gCACE,cAIJ,4BACE,kBADF,qCAGI,kBAIJ,eLZA,qBACA,sBKWA,uCLbA,iBACA,CAIE,0HAIE,UAKJ,2BArFA,qBACA,eACA,kBAuFA,2BAzFA,gBACA,eACA,kBAuFA,oCAGI,eKRJ,+GLuHE,iBKvHF,2DL2HE,gBACA,iBACA,kBK7HF,oCLiIE,cACA,qDACE,6BACA,0BACA,kBKrIJ,qDL0IE,4BACA,yBACA,iBAGF,8BACE,WAGF,0EACE,gBAGF,+EAEI,6BACA,0BACA,kBAIJ,gFACE,4BACA,yBACA,iBK9JF,6EACE,iBACA,kBArFJ,8CA2FI,iBAGF,uBACC,WACA,kBACA,SACA,UACA,YACA,WACA,sBACC,uBACD,WACC,oGACA,cAIJ,gCACC,GACC,UACE,SACD,UACA,YACA,WACC,kBAPJ,wBACC,GACC,UACE,SACD,UACA,YACA,WACC,kBCxHJ,kBACE,eACA,gBACA,aACA,6BAEA,+BACE,gBAGF,yBACE,yBACA,iBAFF,qCAKI,gBALJ,0CASI,gBACA,gBAVJ,gDAcI,YACA,iBACA,eAIJ,6BACE,kBACA,aAGF,gCACE,qBApCJ,wBAwCI,yBACA,eACA,6BACA,WACA,aA5CJ,kEAkDI,SAlDJ,qBAsDI,kBAGF,iCACE,iBACA,gBAGF,gCACE,iBACA,UACA,WACA,kBAJF,sEAMI,cACA,gBAIJ,2EAEI,aAIJ,+CAEE,kBAGF,wBACE,cACA,cACA,WACA,kBACA,WACA,YACA,UACA,uBACA,iBAEA,8BACE,mBACA,eAIJ,2DACE,WAGF,mHAEE,mBACA,WAGF,wDACE,mBACA,cACA,mBACA,gBACA,WAEA,8DACE,mBAIJ,qEACE,2BACA,8BAGF,oEACE,4BACA,+BAGF,uHAEE,WAGF,oCACE,mBACA,WACA,yBAGF,0BACE,kBACA,WACA,OACA,YAGF,6BACE,aAGF,qDACE,mBAGF,uEAEI,iBAFJ,6EAKI,YACA,iBAIJ,yGAEE,gBACA,aACA,cACA,WACA,aACA,gBACA,0BACA,sEAEA,qHACE,mBACA,eAIJ,6DACE,iBACA,mBACA,mBAGF,qDACE,iBACA,uBACA,WAGF,6EACE,WAIF,4KAEE,yBACA,yBACA,cAEF,gGACE,cAEF,+KAEE,WAGF,uDACE,YACA,gBACA,gBACA,WACA,UACA,YC3NJ,iBACE,qBACA,eAIF,mBACE,eAKA,gBACA,CAGF,8BARE,sBACA,qBACA,kBACA,mBAEA,eAWA,WANA,aAGA,aACA,CAEA,2HAII,qBAGJ,iBAkBE,kBACA,MACA,OACA,qBACA,WACA,YAGA,mBACA,yBACA,sBACA,8CA5BA,uBACE,kBACA,UACA,WACA,SACA,QACA,kBACA,cACA,aACA,cACA,YACA,yBACA,UACA,qEACA,yGpBXiB,CoB4BrB,iBACE,kBACA,OACA,UACA,eACA,UACA,MACA,SACA,QAKJ,oCAEI,qBACA,0CACE,qEACA,UACA,yGpB/CiB,CoBoDvB,qCAEI,+BACA,yBACA,2CACE,sBAIJ,yBACE,WACA,mBAIJ,iBACE,iBACA,kBAGF,0BACE,SACA,YACA,iBACA,WACA,qBACA,wDACA,eACA,yBACA,cACA,gBACA,eAXF,4BAcI,WAdJ,4CAkBI,cACA,cACA,QACA,SAGF,iDACE,YACA,iBAGF,iDACE,YACA,iBACA,eACA,6DACE,0BAEF,4DACE,0BAIJ,sCACE,0BACA,8BAGF,qCACE,0BAGF,iDACE,kBAGF,kEAEE,cACA,kBAzDJ,sIChHE,UAGA,wBD6KE,QACA,SAGF,kCACE,gBACA,qBACA,cACA,8BAEA,8CACE,qBACA,0BAGF,wCACE,qBACA,8BACA,cAGF,yCACE,qBACA,8BACA,cAIJ,mCAGE,kBACA,CAEA,2HALA,qBACA,yBAEA,WAQA,+CACE,0BAIJ,oEACE,WACA,yBACA,qBE/NJ,UACE,gBACA,kBACA,eACA,kBACA,gBACA,8CAEA,gBACE,oCACA,yBACA,UAGF,mBACE,yBAGF,eACE,YACA,iBACA,gCACA,eAEA,qBACE,eACA,qBACA,uBACA,WACA,gBACA,mBAIJ,gBACE,kBACA,WACA,SAGF,eACE,aAGF,iCACE,oBACA,WACA,iBAGF,mCACE,qBACA,iBACA,eACA,YACA,kBACA,gBACA,qBACA,qFACA,cC5DJ,4BAEI,kBACA,cACA,sBACA,2BACA,2BACA,qFACA,uBACA,mBACA,wCAVJ,0BAaI,kBACA,gBACA,cACA,SACA,UAEA,gCACE,aAGF,mCACE,eACA,YAzBN,iFA8BI,uDAAW,CA9Bf,2BAkCI,kBACA,OACA,MACA,cAEA,mEAEE,WACA,cAGF,iCACE,WAGF,0CACE,kBAlDN,2BAsDI,WACA,YACA,eAWA,aAVA,qCACE,YA1DN,+BA6DM,cAEF,6CACE,aAKF,wCACE,oBAtEN,8CA2EI,cA3EJ,0CA+EI,kBA/EJ,2CAmFI,cACA,YACA,6BArFJ,wCAwFI,aAxFJ,oDA8FI,kBACA,cACA,YACA,WACA,cACA,YACA,eAGA,QACA,iBACA,UACA,QACA,CACA,oLAPA,uBACA,kBAKA,aAME,4JACE,UAGJ,gGACE,YAtHN,0BA2HI,WACA,iCACE,eAAS,CA7Hf,0BAkII,YACA,iCACE,eAAS,CApIf,0BA0II,kBACA,WACA,gBACA,cACA,kBACA,UACA,WAhJJ,6BAkJM,kBACA,qBACA,YACA,WACA,iBACA,kBACA,aACA,UAzJN,oCA2JQ,SAEA,gBACA,WACA,qBACA,UACA,WACA,kBACA,aACA,YACA,kBACA,eACA,8CACA,oFAEE,YAGJ,iDACE,gBACA,UACA,mCACA,8GAEE,UAOV,mCAEI,WACA,YACA,UACA,QACA,4FAAW,CC9Lf,cACE,eACA,8BACE,6BACA,cACA,eACA,WACA,UAEF,qBACE,kBACA,qBACA,eACA,sBACA,eACA,sBACA,kBAEA,2DACE,kBAGF,gFAII,mBAIJ,2BACE,kBACA,OACA,YACA,iBACA,QACA,iBACA,mBACA,uBACA,gBACA,WACA,qBAGF,2BACE,UACA,kBACA,UACA,UACA,gBACA,QACA,eACA,WACA,WACA,YACA,gBACA,iBACA,eACA,gGACA,iCACE,WAIJ,sDACE,UAIF,2BACE,kBACA,UACA,QACA,UACA,WACA,YACA,gBACA,iBACA,W5BvDJ,qBAEA,eACA,gBACA,kHcjBA,8GACA,OAEA,iCACE,8CdgBA,CADF,kC4BoDM,2KAEF,4DdpFJ,qEAAY,CcsFN,mEACE,sFAAW,CAKnB,oBACE,eACA,gBACA,kBACA,aACA,kBACA,oCACA,mBACA,qDAEE,aAEF,oMAEE,gEAGF,8LAEE,oEAGF,iGACE,kEAGF,8FACE,sEAGJ,mBACE,qBACA,mBACA,gBACA,aACA,gBACA,SACA,UACA,+BACA,cACA,+BACE,0BAEF,8BACE,+BACA,kBACA,0BAEF,8BACE,kBAGJ,wBACE,0BACA,eACA,mBACA,wDACA,8BACE,mBAEF,iCACE,mBACA,WACA,uCACE,uBAIF,gJAEE,yBACA,gBAGJ,+BACE,kBACA,qC5B1JJ,oBACA,kCACA,mCACA,kCACA,gBAMA,qBAEA,eACA,gBACA,oIcjBA,8GACA,Oc+JM,WACA,kBACA,Wd/JN,2CACE,8CdgBA,CADF,wD4BoJI,WCjLJ,cACE,mBACA,eACA,aACA,qBACA,cACA,kBACA,sBAEA,gJAII,qBAIJ,oBACE,kBACA,MACA,OACA,qBACA,WACA,YACA,yBACA,kBACA,sBACA,8CAEA,0BACE,+GACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,yGzBPe,CyBWnB,oBACE,kBACA,OACA,UACA,eJnDJ,UAGA,wBIkDI,MACA,SACA,QACA,WACA,YAKJ,sDACE,YACA,qEACA,kBACA,SACA,QACA,UACA,WAIF,gDACE,+GACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,iHzBlDmB,CyBqDrB,0FAGI,yBACA,qBAKF,sEAEI,gDACA,kBAJN,2CASI,+BACA,yBACA,iDACE,gDACA,qBAIJ,4BACE,WACA,mBAIJ,sBACE,eACA,eACA,qBACA,uCACE,iBAIJ,8CAEE,iBACA,kBAGF,oBACE,eACA,yBACE,qBAoBN,gBAZI,iG7BlIF,oBACA,kCACA,mCACA,kCACA,gB6BiII,gBACA,cACA,SACA,WACA,SACA,QACA,mBCxJN,SCAE,kBACA,cACA,eACA,YjCLA,OgCIA,chCHA,+BAEE,YACA,cAEF,eACE,WACA,kBACA,YACA,SgCHJ,cAEE,gIACA,yDAEA,uDAJA,yEACA,CAUF,oBACE,yGAIF,qBACE,mGAIF,kBACE,iGAIF,4BACE,mHAIF,2BACE,2FAIF,kBACE,mGAIF,qBACE,6FAIF,qBACE,2FAGF,SACE,kBACA,cCzCE,mpDACE,kBAEA,eACA,eACA,gBAgBF,uRACE,WACA,yEAQJ,YACE,cACA,WAEF,iBACE,UAEF,iBACE,WAEF,mBACE,iBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,YAEF,iBACE,WAEF,iBACE,YAEF,mBACE,kBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,UAEF,iBACE,SAEF,iBACE,UAEF,mBACE,gBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,YAEF,iBACE,WAEF,iBACE,YAEF,mBACE,kBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,UAEF,iBACE,SAEF,iBACE,UAEF,mBACE,gBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,YACE,cACA,mBAEF,iBACE,kBAEF,iBACE,mBAEF,mBACE,yBAEF,kBACE,yEAdF,WACE,cACA,YAEF,gBACE,WAEF,gBACE,YAEF,kBACE,kBAEF,iBACE,sEAdF,WACE,cACA,mBAEF,gBACE,kBAEF,gBACE,mBAEF,kBACE,yBAEF,iBACE,qEAdF,WACE,cACA,mBAEF,gBACE,kBAEF,gBACE,mBAEF,kBACE,yBAEF,iBACE,qEAdF,WACE,cACA,UAEF,gBACE,SAEF,gBACE,UAEF,kBACE,gBAEF,iBACE,qEAdF,WACE,cACA,mBAEF,gBACE,kBAEF,gBACE,mBAEF,kBACE,yBAEF,iBACE,qEAdF,WACE,cACA,mBAEF,gBACE,kBAEF,gBACE,mBAEF,kBACE,yBAEF,iBACE,qEAdF,WACE,cACA,YAEF,gBACE,WAEF,gBACE,YAEF,kBACE,kBAEF,iBACE,qEAdF,WACE,cACA,kBAEF,gBACE,iBAEF,gBACE,kBAEF,kBACE,wBAEF,iBACE,qEAdF,WACE,cACA,kBAEF,gBACE,iBAEF,gBACE,kBAEF,kBACE,wBAEF,iBACE,qEAMF,WACE,aAEF,+VAhCI,WACA,yEAQJ,eACE,cACA,WAEF,oBACE,UAEF,oBACE,WAEF,sBACE,iBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,sEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,UAEF,mBACE,SAEF,mBACE,UAEF,qBACE,gBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,qEAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qEAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qEAMF,cACE,aAEF,gBACE,UAEF,gBACE,WDUJ,yBC/CI,+VACE,WACA,yEAQJ,eACE,cACA,WAEF,oBACE,UAEF,oBACE,WAEF,sBACE,iBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,sEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,UAEF,mBACE,SAEF,mBACE,UAEF,qBACE,gBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,qEAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qEAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qEAMF,cACE,aAEF,gBACE,UAEF,gBACE,YDmBJ,yBCxDI,+VACE,WACA,yEAQJ,eACE,cACA,WAEF,oBACE,UAEF,oBACE,WAEF,sBACE,iBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,sEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,UAEF,mBACE,SAEF,mBACE,UAEF,qBACE,gBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,qEAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qEAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qEAMF,cACE,aAEF,gBACE,UAEF,gBACE,YDuBJ,0BC5DI,+VACE,WACA,yEAQJ,eACE,cACA,WAEF,oBACE,UAEF,oBACE,WAEF,sBACE,iBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,YAEF,oBACE,WAEF,oBACE,YAEF,sBACE,kBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,UAEF,oBACE,SAEF,oBACE,UAEF,sBACE,gBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,eACE,cACA,mBAEF,oBACE,kBAEF,oBACE,mBAEF,sBACE,yBAEF,qBACE,yEAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,sEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,UAEF,mBACE,SAEF,mBACE,UAEF,qBACE,gBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,mBAEF,mBACE,kBAEF,mBACE,mBAEF,qBACE,yBAEF,oBACE,qEAdF,cACE,cACA,YAEF,mBACE,WAEF,mBACE,YAEF,qBACE,kBAEF,oBACE,qEAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qEAdF,cACE,cACA,kBAEF,mBACE,iBAEF,mBACE,kBAEF,qBACE,wBAEF,oBACE,qEAMF,cACE,aAEF,gBACE,UAEF,gBACE,YCpEJ,cACE,yBACA,kBACA,yBAEA,iCACE,6BACA,6CACE,aAHJ,sDAOI,YACA,iBACA,kBACA,WACA,eACA,kBAZJ,6DhCaA,eACA,gBACA,0IcjBA,yJACA,OddA,kBACA,wBACA,kBACA,oBACA,oBACA,cACA,kCACA,mCACA,kCgCwBM,kBACA,WACA,qBACA,iBACA,iBACA,gBACA,sBACA,gLACA,MACA,UACA,WACA,SlB3BN,mEACE,8CdgBA,CADF,oEAtBE,cACA,6CgCkCe,CAMjB,0BACE,+G5BnBmB,C4BsBrB,sBACE,gBACA,WACA,eACA,sBAEA,gDACE,iBACA,oBAGF,+BACE,aAIJ,oDAEI,0BAIJ,iFhCnDA,qBAEA,eACA,gBACA,uIcjBA,yJACA,OAEA,uFACE,8CdgBA,CADF,yBgCoDE,sBACA,SAGF,4CACE,SAGF,iEACE,gCACA,8CACA,kCACA,uEACE,yBCnGN,+BACE,kBACA,aAEA,sdAIE,oEAGF,keAIE,gEAGF,yOAEE,sEAGF,+OAEE,kEAIJ,qBACE,kBACA,qBACA,aACA,eACA,gEALF,2BAQI,aAEF,2BACE,UACA,WACA,kBACA,UACA,gBACA,QACA,eACA,WACA,WACA,YACA,gBACA,iBACA,eACA,gGACA,iCACE,WAIJ,sDACE,UACA,UAEF,0BACE,kBACA,qFACA,4GACA,WACA,YACA,iBACA,UACA,WACA,QACA,gBACA,gCACE,gBACA,oBACA,eACA,WACA,qBACA,cACA,sBCGN,cACE,kBACA,aACA,YACA,sBACA,gBACA,eACA,gBACA,sBACA,kBACA,oCACA,4BACA,gBAEA,yBACE,YACA,YACA,gCAGF,oBACE,SACA,WACA,YACA,UACA,YAGF,0BACE,YAEA,+BACE,kBAIJ,qBAvHA,YACA,iBACA,kBACA,qFACA,gCAmHA,6BAhHE,cAgHF,kMAzGE,cACA,gBACA,qBACA,WACA,iBAqGF,0NA9FE,aA8FF,oZAnFE,kBACA,MACA,WACA,mFACA,cACA,eACA,qBACA,iBA4EF,wJAtEE,SAEA,0KACE,aAAS,CAmEb,wJA5DE,UAEA,0KACE,aAAS,CAyDb,kDApDE,UAEA,wDACE,eAAS,CAiDb,kDA5CE,WAEA,wDACE,eAAS,CA6Cb,mBACE,gBAzCJ,oBA6CI,yBACA,eACA,6BACA,WAhDJ,sDAsDI,SAGF,6BACE,iBACA,gBAGF,4BACE,iBACA,WACA,cACA,kBAJF,8DAMI,cACA,gBAIJ,mEAEI,aAIJ,mBACE,cAGF,mBACE,cACA,cACA,WACA,kBACA,WACA,YACA,iBACA,6BACA,UACA,uBACA,kBACA,sEAEA,yBACE,kBAGF,yBACE,mBACA,eAGF,0BACE,WACA,mBAIJ,uCACE,qBACA,gBACA,cAGF,qGAEE,WAGF,8CACE,mBACA,WACA,6BAEA,oDACE,mBAIJ,+CACE,mBACA,cACA,mBACA,gBACA,WACA,6BAEA,qDACE,mBAIJ,4DACE,2BACA,8BAGF,2DACE,4BACA,+BAGF,qBACE,6BAGF,yBACE,kBACA,cACA,iBAGF,yBACE,qBAvKJ,4EA4KI,qBACA,kBACA,iBACA,8FACE,WACA,mBAjLN,sCAsLI,aACA,kBACA,UACA,kBACA,gBACA,WACA,YACA,kBACA,iBACA,QACA,SAhMJ,4ClClEE,oBACA,kCACA,mCACA,kCACA,gBkCmQE,eACA,WACA,qBACA,cACA,WACA,iBACA,4DA3MJ,kDA+MI,WA/MJ,mCjBmBE,qBACA,gBACA,gBACA,kBACA,wDACA,eACA,sBACA,6BACA,mBACA,gBA7GA,iBAEA,kBA6GA,qFACA,4GACA,kBA9DA,WACA,yBACA,qBArDA,gBACA,eACA,kBiBqSE,kBACA,WACA,UAxNJ,4CjBmCI,cAGF,sHAGE,UAGF,yDACE,qBAGF,0DACE,UACA,wCAGF,yFAEE,mBAFF,6FAII,oBAIJ,sCA9IA,qBACA,eACA,kBAgJA,sCAlJA,gBACA,eACA,kBiB+EF,gDjBxBI,mBACA,sDACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBA5CJ,kFA8BA,WACA,yBACA,qBAhCA,4GAoCE,mBACA,wHACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAvCJ,oFAyBA,WACA,yBACA,qBA3BA,8GA+BE,mBACA,0HACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBAzDF,ifA2CF,WACA,yBACA,qBA7CE,mnBAiDA,mBACA,+qBACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBiB0OF,4CjBxPF,WACA,yBACA,qBiBwPI,mBAFF,yDjBlPA,mBACA,+DACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBiB6OA,kDjB3PJ,WACA,yBACA,qBiByPI,+DjBrPF,mBACA,qEACE,WACA,kBACA,MACA,OACA,SACA,QACA,uBkBlEN,qCACE,mBAGF,iCACE,6BACA,SACA,YACA,iBACA,UACA,UACA,kBAEA,2CACE,mBAIJ,qCACE,WAGF,oBACE,YACA,gBAGE,mDACE,YACA,cACA,SACA,WACA,kBAGJ,yBACE,UACA,kBAGF,yBACE,WAEE,yDACE,+BAKN,0BACE,YAEE,0DACE,8BAKN,2BACE,kBACA,SACA,WACA,mBACA,kBACA,YACA,iBACA,WAGF,wDACE,mBAGF,iEACE,kBAGF,8FACE,cAxDJ,6CA4DI,kBACA,YA7DJ,4FpBgBE,kBACA,qBACA,gBACA,WACA,YACA,YACA,eACA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,yJoBqCE,mKACA,YACA,SACA,gBrB9DF,gIACE,WACA,UAGF,wIACE,WAGF,kJACE,WCcF,wGA/BA,qBAmCA,wGA1CA,qBACA,UACA,yCA4CA,gHAnCA,yBACA,UACA,mBACA,WACA,4HARA,qBA4CA,4GACE,eACA,YACA,sBAIF,kGAvEA,gBACA,YA0EA,kGAtEA,gBACA,YACA,kBoBoFE,wGACE,gBAzEN,mDA8EI,aAGF,6CACE,YADF,sEAII,YArFN,2FA2FI,SA3FJ,uEA8FI,MA9FJ,4JAmGI,aAnGJ,gDAuGI,gBACA,kBAxGJ,oDA0GM,kBACA,UAEF,uDACE,WACA,cACA,mBACA,gBACA,SACA,kBACA,QACA,WACA,OACA,QAIJ,2BACE,iBADF,oDAII,mBAIJ,sCACE,cACA,gBACA,gCACA,oBAJF,wCAOI,kBAOF,kJACE,gBAEF,4IACE,6BAIJ,gEAEI,aACA,WACA,SACA,UACA,sEACE,aACA,iBAGF,sEACE,iBACA,YACA,gBAGF,yEACE,qBACA,YACA,sBACA,6BAEF,uEACE,YADF,0EAGI,gBA1BR,+DA+BI,uBACA,crC9MJ,OACA,2IAEE,YACA,cAEF,qEACE,WACA,kBACA,YACA,SqCoKF,2DAoCI,gBACA,YArCJ,yFAwCI,kBAxCJ,8DA2CI,gBACA,YACA,iBAIJ,4EACE,aACA,kFACE,aAKN,qEAEI,6BC5OJ,0BACE,kBACA,WACA,SACA,sBACA,aAEA,gCACE,aACA,kBACA,WAGF,gCACE,qBACA,kBACA,aACA,gBACA,eACA,gBACA,sBACA,4BACA,gBACA,gBACA,WAMF,0IAEE,WAEF,qEACE,UAEF,+IAGI,UACA,kBAIJ,qCACE,aAGF,iCACE,WACA,eACA,yBACA,mBACA,iBACA,sBACA,YACA,gBACA,kBAEA,uCACE,gBAGF,6CACE,cACA,cAGF,4CACE,eArBJ,oCAyBI,gBACA,sBACA,SACA,UACA,WACA,iBA9BJ,oCAkCI,mBACA,gBACA,uBACA,SACA,WACA,YACA,iBACA,eACA,qFACA,sEA3CJ,qDA+CI,WACA,aACA,cAjDJ,0CAqDI,mBAGF,mDACE,mBACA,gBAGF,mDACE,WACA,yDACE,uBACA,mBAMR,4CAEI,cACA,gBACA,qBACA,WACA,iBANJ,wCAUI,6BACA,iBACA,kBACA,YACA,iBAEA,4CACE,eACA,gBACA,iBAnBN,gEAuBM,WACA,SACA,kBAzBN,sEA6BM,qBACA,kBACA,kBAEA,+EACE,WC1JR,0BACE,OACA,QACA,SACA,QACA,gBACA,WACA,kBACA,aACA,kBAGF,iCACE,aAGF,iCHfE,YACA,iBACA,kBACA,qFACA,gCGWF,yCHRI,cGQJ,kSHDI,cACA,gBACA,qBACA,WACA,iBGHJ,0THUI,aGVJ,olBHqBI,kBACA,MACA,WACA,mFACA,cACA,eACA,qBACA,iBG5BJ,gOHkCI,SAEA,kPACE,aAAS,CGrCf,gOH4CI,UAEA,kPACE,aAAS,CG/Cf,0EHoDI,UAEA,gFACE,eAAS,CGvDf,0EH4DI,WAEA,gFACE,eAAS,CG3Df,gCACE,mBACA,WACA,aACA,yBAOA,sJACE,mBACA,WAIJ,+BACE,kBAGE,sJAEE,mBACA,cACA,mBAKN,gCACE,qBACA,cACA,WACA,uBACA,kBACA,YACA,iBACA,cACA,kBACA,sEAEA,sCACE,mBACA,eChEJ,yBACE,OACA,QACA,SACA,QACA,gBACA,WACA,kBACA,aACA,kBAGF,gCACE,aAGF,gCJfE,YACA,iBACA,kBACA,qFACA,gCIWF,wCJRI,cIQJ,0RJDI,cACA,gBACA,qBACA,WACA,iBIHJ,kTJUI,aIVJ,okBJqBI,kBACA,MACA,WACA,mFACA,cACA,eACA,qBACA,iBI5BJ,0NJkCI,SAEA,4OACE,aAAS,CIrCf,0NJ4CI,UAEA,4OACE,aAAS,CI/Cf,wEJoDI,UAEA,8EACE,eAAS,CIvDf,wEJ4DI,WAEA,8EACE,eAAS,CI3Df,+BACE,mBACA,WACA,aACA,yBAGF,8BACE,kBAGF,8BACE,qBACA,cACA,WACA,uBACA,kBACA,YACA,iBACA,cACA,kBACA,sEAEA,oCACE,mBACA,eAQF,gJACE,mBACA,WAIJ,gJAGI,qFAHJ,8JAMI,gBACA,8BAIJ,+EAEI,eAAS,CCxEb,2BACE,OACA,MACA,SACA,QACA,gBACA,WACA,kBACA,aACA,kBAGF,kCACE,aAGF,kCLfE,YACA,iBACA,kBACA,qFACA,gCKWF,0CLRI,cKQJ,0SLDI,cACA,gBACA,qBACA,WACA,iBKHJ,kULUI,aKVJ,omBLqBI,kBACA,MACA,WACA,mFACA,cACA,eACA,qBACA,iBK5BJ,sOLkCI,SAEA,wPACE,aAAS,CKrCf,sOL4CI,UAEA,wPACE,aAAS,CK/Cf,4ELoDI,UAEA,kFACE,eAAS,CKvDf,4EL4DI,WAEA,kFACE,eAAS,CK3Df,iCACE,mBACA,WACA,aACA,yBAGF,gCACE,kBAGF,kCACE,qBACA,cACA,WACA,uBACA,kBACA,YACA,iBACA,cACA,kBACA,sEAEA,wCACE,mBACA,eAQF,4JACE,mBACA,WAIJ,8JAGI,qFAHJ,4KAMI,gBACA,8BAIJ,sFAEI,eAAS,CCxEb,2FAGI,MCGJ,uBACE,gBACA,aACA,kBAEA,6BACE,qBACA,kBACA,aACA,gBACA,eACA,gBACA,sBACA,kBACA,oCACA,4BACA,gBACA,gBACA,UAGF,6BACE,SACA,UACA,SACA,WACA,YACA,gBACA,UAEA,kCACE,sBACA,kBACA,YACA,gCAGF,qCACE,iBAIJ,iCACE,kBACA,UACA,eACA,gBACA,WACA,YACA,kBACA,iBACA,QACA,SAGF,uCACE,eACA,WACA,qBACA,cACA,WACA,4DzCjDF,oBACA,kCACA,mCACA,kCACA,eyC8CiB,CAGjB,6CACE,WAGF,gEACE,gBAGF,8BACE,WACA,eACA,8BACA,sBACA,WACA,gBACA,kBACA,iBAEA,oCACE,gBAGF,0CACE,cACA,cAGF,yCACE,eAGF,yCACE,WAxBJ,iCA4BI,gBACA,sBACA,SACA,kBACA,WAhCJ,iCAoCI,gBACA,uBACA,SACA,mBACA,WACA,YACA,iBACA,gBACA,eACA,qFACA,sEA9CJ,uCAkDI,mBAGF,gDACE,mBACA,gBAGF,gDACE,WACA,sDACE,uBACA,mBAKN,gC3C/IA,OACA,6EAEE,YACA,cAEF,sCACE,WACA,kBACA,YACA,S2CyIF,6BACE,YACA,6BAGF,sZAIE,oEAGF,kaAIE,gEAGF,yMAEE,sEAGF,+MAEE,kEAIJ,iBAGE,aAEA,gEAEA,wCANA,kBACA,qBAEA,cACA,C3BzJA,uBCUA,gBACA,WACA,YACA,YAEA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,yJ0BuIE,6J3B7JF,yCACE,WACA,UAGF,6CACE,WAGF,kDACE,WCcF,6BA/BA,qBAmCA,6BA1CA,qBACA,UACA,yCA4CA,iCAnCA,yBACA,UACA,mBACA,WACA,uCARA,qBA4CA,+BACE,eACA,YACA,sBAIF,0BAvEA,gBACA,YA0EA,0BAtEA,gBACA,YACA,kB0BoLA,8C1B3LA,gBACA,Y0B8LA,8C1B1LA,gBACA,YACA,kB0B4LA,sBACE,UAGF,sBACE,kBACA,qFACA,4GACA,WACA,YACA,iBACA,UACA,WACA,QACA,gBACA,4BACE,gBACA,oBACA,eACA,WACA,qBACA,cACA,sBCzNN,cACE,kBACA,aACA,YACA,aACA,cACA,eACA,gBACA,gBAEA,mBACE,kBADF,0C1CaA,qBAEA,eACA,gBACA,kHcjBA,8GACA,OAEA,gDACE,8CdgBA,CADF,wC0CXI,2KAIJ,6CAEI,sFAAW,CAIf,+CAEE,aAGF,mBACE,aACA,kBACA,qBACA,UACA,SACA,gBACA,sBACA,kBACA,oCACA,4BAEA,yDAEE,iBACA,SACA,WACA,eACA,gBACA,WACA,mBACA,eACA,sEAVF,6DAaI,WACA,cACA,iBACA,kBAGF,qEACE,yBAGF,2EACE,WACA,mBACA,oBAEA,uFACE,WACA,sBACA,mBAIJ,iFACE,0BAGF,+EACE,0BAGF,+EACE,kBAGF,yEACE,WACA,gBACA,yBACA,cAIJ,uCACE,8BACA,kBACA,gBACA,WACA,W1ClFJ,qBAEA,eACA,gBACA,kHcjBA,8GACA,OAEA,6CACE,8CdgBA,CADF,oC0CiFI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sBACA,sBAIA,yJ8BxCA,0JACA,UACA,eACA,YACA,qBACA,yBACA,kBACA,W/BWA,oCACE,WACA,UAGF,wCACE,WAGF,6CACE,WCkBF,wBA1CA,qBACA,UACA,yCA4CA,4BAnCA,yBACA,UACA,mBACA,WACA,kCARA,qBA4CA,0BACE,eACA,YACA,sBAIF,qBAvEA,gBACA,YA0EA,qBAtEA,gBACA,YACA,kB8BWA,0BACE,kBACA,cACA,WACA,gBACA,WACA,kBACA,4DACA,cACA,WACA,gBACA,iCACE,mBAEF,wIAEE,cAIJ,wE7CzCA,kBACA,wBACA,kBACA,oBACA,oBACA,cACA,kCACA,mCACA,kC6CoCE,iBACA,qFACA,kBACA,WACA,YACA,4D7CvBF,qBAEA,eACA,gBACA,gDcjBA,kMACA,O+BqCE,UACA,W7C3CF,sFACE,cACA,8BcKF,oFACE,gCdgBA,eADF,wBeTA,qB8BoCA,0B9B3CA,qBACA,UACA,yC8B6CA,2B9BpCA,yBACA,UACA,mBACA,WACA,iCARA,qB8B4CA,wBACE,WACA,gBACA,UACA,0BACA,iBACA,YACA,4DACA,WACA,SACA,kBACA,cAEA,kC9BrDF,yBACA,UACA,mBACA,WACA,wCARA,qB8B8DA,qBACE,UADF,+CAGI,YAHJ,2BAOI,YACA,iBARJ,wDAYI,QAZJ,0DAeI,WAfJ,wDAkBI,YAIJ,qBACE,UADF,+CAGI,YAHJ,2BAOI,YACA,iBARJ,wDAYI,SAZJ,0DAeI,YAfJ,wDAkBI,YAlBJ,+FAqBI,WAIJ,+BACE,8BACA,WACA,YACA,gBACA,kBACA,MACA,QACA,UACA,0BACA,8EAGF,uDACE,UAGF,6BACE,eACA,mCACE,QACA,0CACE,kBACA,eAAS,CAGb,mCACE,YAEF,sEACE,eAIJ,+BACE,6BACA,SACA,eAEE,4CACE,kBACA,eAAS,CAGb,qCACE,YACA,gBAIJ,0aAjLA,YACA,qBACA,mBAwLA,mDAEI,YACA,mBACA,yBAJJ,0DAOI,aAPJ,qDA1LA,YACA,qBACA,mBCLF,qBACE,kBACA,qBACA,WACA,sBACA,gD/BSA,qBACA,UACA,yC+BhBF,yC/BoCE,kBACA,qBACA,gBACA,WACA,YACA,YACA,eACA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,yJ+BxCC,2JACA,chCiBD,2DACE,WACA,UAGF,+DACE,WAGF,oEACE,WCcF,+CA/BA,qBAmCA,+CA1CA,qBACA,UACA,yCA4CA,mDAnCA,yBACA,UACA,mBACA,WACA,yDARA,qBA4CA,iDACE,eACA,YACA,sBAIF,4CAvEA,gBACA,YA0EA,4CAtEA,gBACA,YACA,kB+BRF,iDAcI,gBACA,YAfJ,yDAkBI,kBAlBJ,8FAoBM,WACA,UACA,aACA,qBACA,qBACA,YACA,gBA1BN,8EA8BI,YACA,gBAIJ,sBACE,iBACA,iBACA,gBACA,sBACA,oCACA,kBACA,sBACA,aACA,aACA,YACA,kBACA,aACA,kBACA,gBACA,eACA,yDACE,WADF,0EAII,cACA,kBACA,cAGJ,2BACE,kBACA,cACA,iBACA,gBACA,WAEA,eACA,mBACA,uBACA,gBACA,sEAEA,oGAGE,yBAGF,oCACE,WACA,mBAEA,0CACE,WACA,sBACA,mBAKF,8EAEE,yBACA,gBACA,WAIJ,mCACE,WACA,aACA,gBACA,yBACA,cCtGN,UACE,aACA,gBACA,eACA,gBACA,aACA,oCACA,WACA,gBACA,iBAEA,iBACE,aAGF,0BACE,SACA,UAGF,2BACE,WACA,eACA,gBACA,iBAGF,yDAGE,eACA,wDAGF,gCACE,YAGF,iBACE,cACA,WACA,uBACE,WAEF,wBACE,kBACA,6BACA,WACA,YACA,MACA,OACA,SACA,QACA,UAAS,CAIb,uBACE,WACA,gBACA,yBACA,cAGF,kGAIE,yBAGF,2EAEE,gBAGF,0JAGE,6BAGF,wBACE,cAEA,uDAAW,CAHb,0DAMI,cAIJ,yDAGE,aAGF,oCAEE,+BAFF,kEAII,+BACA,iBACA,SACA,kBACA,UAIJ,iFAGI,eAIJ,6EAGI,+BACA,uDAAW,CAIf,uCACE,SACA,OACA,kBACA,eACA,eACA,aAGF,2BACE,UAGF,qCACE,MACA,UACA,kBACA,gBACA,gBACA,aAGF,uCAEE,SACA,eACA,kBACA,cACA,mBAGA,gLAEE,qBACA,mBACA,gBAJF,wLAMI,qBACA,oBAhBN,yDAqBI,eACA,iBAIJ,iCACE,WACA,aACA,gBACA,UACA,cACA,yBAGF,kBACE,kBADF,4BAII,sBACA,kBAGF,yDjChMF,sEiC4MI,uHAA0B,CAG5B,gHAdE,8BACA,kBACA,wBACA,kBACA,oBACA,oBACA,kBACA,2KACA,gBACA,UjC1MJ,CAcA,uDiC4MI,M/ClMJ,qBAEA,eACA,gBACA,gDcjBA,kMACA,OAEA,6DACE,gCdgBA,eADF,6Ec9BA,sEiCiOM,uHAA0B,CAKhC,8FAGI,cAIJ,qBACE,SACA,gCACA,gBACA,UAJF,2EAQI,kBACA,QACA,WACA,oCAEA,6QAGE,gCACA,cAjBN,+EAqBM,cACA,WACA,2FACE,cAKN,2BACE,YACA,cACA,SACA,WAOF,uSAEE,sBACA,eACA,iBACA,YACA,gBACA,uBAIJ,gCACE,SACA,CACA,iIADA,2EAOF,gEAEE,gBAGF,8BACE,UACA,SACA,gBACA,gBACA,qHAEE,iBACA,YACA,qBACA,2BAGF,yDACE,kBAQJ,4CAEE,WACA,mBAGF,6CACE,gBAGF,mCACE,4BAGF,uGAEE,qBACA,gBACA,MAGF,8DAEE,WAGF,gEAEE,eAGF,8FAEE,eACA,cACA,OAGF,+OAME,6BACA,WAPF,2PASI,WAIJ,uCACE,eACA,WAFF,wFAKI,WAIJ,uDACE,yBCjYJ,aACE,eACA,eACA,aACA,WACA,SACA,OAEA,oBACE,WACA,sBACA,kBACA,SAGF,4BACE,kBACA,UACA,iBACA,kBACA,oCACA,gBACA,cAGF,8BACE,cAGF,4BACE,WAGF,8BACE,WAGF,yDAEE,cAvCJ,sBA2CI,iBACA,eACA,QACA,kBChDJ,WACE,kBACA,WACA,cACA,UACA,oBAEA,gBACE,eACA,cACA,MACA,QACA,SACA,OACA,aACA,iCACA,UAGF,iBACE,SACA,eACA,iBACA,gBAGF,mBACE,kBACA,sBACA,SACA,kBACA,4BACA,oCAGF,iBACE,eACA,SACA,uBACA,kBACA,WACA,SACA,WACA,gBACA,cACA,qBACA,4DACA,WACA,UAEA,mBACE,cACA,kBACA,wBACA,kBACA,oBACA,oBACA,WACA,YACA,eACA,cAEA,0BACE,gBACA,cACA,8BAIJ,8CAEE,WACA,qBAIJ,kBACE,kBACA,0BACA,gBACA,WACA,gCAGF,gBACE,aACA,eACA,gBAGF,kBACE,6BACA,4BACA,iBACA,0BAJF,gCAMI,gBACA,gBAIJ,6CAEE,sDACA,yDACA,UAGF,gBACE,eACA,MACA,QACA,OACA,SACA,yBACA,mCACA,YACA,aACA,yBAEA,uBACE,aAIJ,gBACE,gBAgBJ,yBAVE,WACE,qBACA,YAEF,kCAEI,qDCxIN,6DAMI,aANJ,6BAUI,kBAGF,0BpDdA,OACA,iEAEE,YACA,cAEF,gCACE,WACA,kBACA,YACA,SoDQF,qCAEI,WACA,gBACA,eAJJ,uCAQI,iBACA,eACA,WACA,eAXJ,2BAeI,eACA,kBACA,cACA,WAnCN,+BAwCI,gBACA,YAzCJ,6CA4CM,iBACA,gBAIJ,8CACE,WAGF,gGAEE,WAGF,6CACE,cAGF,gDACE,cC3DJ,kBACE,eACA,aACA,YACA,kBAEA,yBACE,aACA,kBACA,oCACA,gBACA,gBACA,kBACA,mBACA,gBAEA,iCACE,eACA,cACA,kBACA,mBACA,uBACA,gBACA,iBAGF,qCACE,eAGF,mEACE,mBAGF,oEACE,eACA,iBACA,kBAGF,wEACE,iBACA,eAGF,8BACE,kBACA,UACA,SACA,eACA,iBAEA,sCACE,cAEF,mCACE,cAEF,sCACE,WAEF,oCACE,WAIJ,uCACE,eACA,gBACA,oBACA,eAGF,+BACE,kBACA,WACA,SACA,WACA,aACA,qCACE,cAIJ,6BACE,YACA,gBAtFN,4CA2FI,wDACA,0DACA,yH/ChEmB,C+CmErB,2DAEE,UAEA,gEAGF,wFAZE,wDACA,0DACA,yHAOA,CASF,6BAJE,sDACA,gEAGF,kIAEE,4EACA,kEAGF,gEACE,8EACA,kEAIJ,sCACE,GACE,UACA,WAEF,GACE,OACA,WAPJ,8BACE,GACE,UACA,WAEF,GACE,OACA,WAIJ,uCACE,GACE,UACA,mBACA,iBACA,oBACA,iBAEF,GACE,UACA,gBACA,cACA,iBACA,cAbJ,+BACE,GACE,UACA,mBACA,iBACA,oBACA,iBAEF,GACE,UACA,gBACA,cACA,iBACA,cCnJJ,gBACE,eAEA,sBACE,YACA,cACA,SACA,WACA,gBACA,kBAGF,2BACE,WACA,YACA,iBACA,kBAGF,qBACE,eACA,kBACA,qFACA,eACA,YACA,iBACA,kBACA,gBACA,WACA,yBACA,sBACA,iBACA,kBAbF,uBAgBI,qBACA,WACA,wCACA,aAGF,2BACE,wDACA,qBAFF,6BAII,cAIJ,4BACE,yBACA,qBAFF,kEAMI,WAOJ,gEACE,0BACA,cACA,mBACA,WACA,kBAIA,4EACE,cpDlDN,qBAEA,eACA,gBACA,oIcjBA,8GACA,OsCgEM,oBACA,mBAAa,CtC/DnB,wFACE,8CdgBA,CADF,sCoDwDM,oBAAS,CAOX,sCACE,oBAAS,CAKf,yEAGE,iBAEF,8FAIE,kBACA,eACA,WACA,kBACA,gBACA,eACA,YACA,iBACA,WACA,kBACA,wDACA,qBAGF,0CAEE,yBACA,sBAHF,8CAMI,WAEA,0DpD1GJ,qBAEA,eACA,gBACA,oIcjBA,8GACA,OsCwHM,cACA,YACA,iBACA,oBACA,kBtC1HN,sEACE,8CdgBA,CADF,sDoDgHI,qBADF,0DAII,cAOF,6BACE,iBACA,gBACA,cAOF,6BACE,gBACA,cAKN,yBAQE,mBAPA,+BACE,qBADF,iCAGI,WACA,mBALN,2BAUI,WAIJ,sBACE,oBAGF,wBACE,WACA,iBACA,qCACE,WACA,kBAGF,qCACE,WACA,YACA,iBAHF,2CrC/JF,kBACA,qBACA,gBACA,WACA,YACA,YACA,eACA,gBACA,WACA,sBACA,sBACA,yBACA,kBAEA,yJqCwJM,8JACA,WtC/KN,6DACE,WACA,UAGF,iEACE,WAGF,sEACE,WCcF,iDA/BA,qBAmCA,iDA1CA,qBACA,UACA,yCA4CA,qDAnCA,yBACA,UACA,mBACA,WACA,2DARA,qBA4CA,mDACE,eACA,YACA,sBAIF,8CAvEA,gBACA,YA0EA,8CAtEA,gBACA,YACA,kBqCwMA,wFAEE,SACA,YACA,iBACA,SACA,eAGF,oDACE,WACA,iBAFF,0DAKI,aACA,sBACA,sBACA,kBACA,yBACA,aACA,gBACA,WACA,YACA,kBACA,0EAEA,gEACE,qBAON,gDACI,YACA,iBAWJ,8HAPE,SACA,SACA,eACA,YACA,iBAmBF,kMAEE,YACA,iBAGF,6CACE,gBACA,0DACE,YACA,iBAFF,gErCjRF,gBACA,YACA,kBqCqRM,WC5RR,aACE,kBACA,MACA,OACA,aACA,YACA,qFACA,mBACA,eACA,gBACA,gBACA,gBAEA,mBACE,WACA,kBACA,+BAGF,oBACE,aAIF,0FAGE,mBAGF,gGAGE,iBAGF,mGAGE,gBAGF,6FAGE,kBAGF,mBACE,sBACA,4BACA,kBACA,oCAGF,mBACE,gBACA,SACA,eACA,iBACA,YACA,gCACA,WAGF,2BACE,iBACA,WAGF,qBACE,mBACA,eACA,WAHF,8BAKI,WACA,iBACA,kBAEF,2BACE,kBAIJ,qBACE,iBACA,kBAFF,4BAII,gBAQF,4CAEE,kBACA,cACA,QACA,SACA,yBACA,mBAIJ,mBACE,iBAGF,yBACE,iBACA,UAAS,CAGX,kNAGE,sBACA,mCACA,YACA,oOACE,YACA,WACA,iBACA,sBACA,sBAGJ,mEACE,SACA,iBAEF,uEACE,UAEF,wEACE,WAGF,wNAGE,UACA,oBACA,qCACA,0OACE,YACA,SACA,YACA,oBACA,wBAGJ,qEACE,QACA,gBAEF,wEACE,SAEF,2EACE,YAGF,2NAGE,mBACA,sCACA,SACA,6OACE,YACA,QACA,iBACA,mBACA,yBAGJ,sEACE,SACA,iBAEF,0EACE,UAEF,2EACE,WAGF,qNAGE,WACA,qBACA,oCACA,uOACE,YACA,UACA,qBACA,uBACA,YAGJ,oEACE,QACA,gBAEF,uEACE,SAEF,0EACE,YCrNJ,cACE,qBAEA,mBACE,WACA,eACA,kBAGF,oBACE,qBACA,WACA,eACA,gBACA,4CACE,mBACA,mBAIJ,oBACE,qBACA,WACA,yBACA,oBACA,sBAGF,iBACE,oBACA,yBACA,4GACA,kBAGF,mBACE,WACA,gBACA,cACA,iBACA,sBACA,qBACA,mBACA,kBACA,SATF,4BAWI,eAIJ,oDAEI,WACA,UACA,kBACA,MACA,OACA,QACA,SACA,gBACA,mBACA,+IlDtBiB,CkD0BrB,gDAEI,sBAFJ,kDAKI,WAIJ,8CAEI,yBAFJ,gDAKI,cAIJ,yCACE,kBACA,cACA,6BAGF,wCACE,cACA,kBACA,WACA,kBACA,cACA,QACA,6FACA,OACA,mBACA,SAVF,iDAaI,uBAIJ,uEAEI,WAGJ,qEAEI,cAKN,uCACE,GACE,WACA,QAEF,GACE,UACA,YAPJ,+BACE,GACE,WACA,QAEF,GACE,UACA,YC5HJ,UACE,SACA,UACA,gBACA,eACA,qBACA,sBACA,oBACA,gBACA,kBAGE,0FAEE,eAEF,wCACE,oEAAW,CAIf,eACE,SACA,UACA,qBACA,iBACA,kBACA,wDAEA,qBACE,0EAAW,CAGb,oDAEE,cACA,eACA,gBACA,wDACA,cAGF,uBACE,kBACA,OACA,MACA,UACA,YACA,gBACA,8BACE,kBAIJ,6EAEE,cAGF,yFAEE,cAIJ,eACE,gBACA,sBACA,qBACA,eC9DJ,YACE,kBACA,gBACA,YACA,kBACA,yBACA,eACA,0BACA,6BACA,kFAEA,uBACE,mBAGF,kBACE,kBACA,OACA,WACA,kBACA,yBACA,UACA,kFAGF,kBACE,yBADF,qCAGI,qBAIJ,oCACE,yBAGF,mBACE,kBACA,iBACA,gBACA,WACA,YACA,eACA,kBACA,yBACA,sBACA,UACA,oYAAkD,CAElD,yBACE,qBACA,2EACA,yGAGF,0BACE,yCAIJ,iBACE,kBACA,SACA,OACA,WACA,eACA,UAGF,sBACE,kBACA,qBACA,sBACA,kBACA,eACA,WAEA,6BACE,WAIJ,iBACE,kBACA,WACA,WACA,uBACA,UAGF,gBACE,kBACA,SAEA,UACA,WACA,yBACA,sBACA,eACA,kBACA,sBAIA,uEACE,iBAEF,uBACE,qBAIJ,qBACE,mCADF,uCAII,gCAJJ,6EASI,4BACA,sBACA,mBAXJ,gFAgBI,6BCvIN,aACE,kBACA,aACA,cACA,mBACA,eACA,gBAEA,oBACE,aAGF,0FAGE,kBAEF,gGAGE,oBAEF,mGAGE,kBAEF,6FAGE,oBAKJ,mBACE,gBACA,iBACA,WACA,gBACA,qBACA,oCACA,kBACA,oCACA,gBAIF,mBACE,kBACA,QACA,SACA,yBACA,mBAIA,mJAGE,WACA,uBACA,oCAGF,8CACE,SACA,iBAGF,kDACE,UAGF,mDACE,WAGF,yJAGE,SACA,2BACA,sCAGF,gDACE,QACA,gBAGF,mDACE,QAGF,sDACE,WAGF,sJAGE,UACA,2BACA,qCAGF,+CACE,QACA,gBAGF,kDACE,QAGF,qDACE,WAGF,4JAGE,QACA,uBACA,uCAGF,iDACE,SACA,iBAGF,qDACE,UAGF,sDACE,WCvIJ,UACE,cACA,sBACA,kBACA,UACA,kBACA,wSACA,eACA,aAEA,mBACE,UACA,gBACA,qBAGF,yBACE,kBAGF,mCACE,kBACA,YACA,WACA,UACA,uCACE,kBACA,QACA,SACA,aAGF,oDACE,YAEF,oDACE,aAGF,2DACE,aAGF,uEACE,aAGF,uEACE,aAGF,wCACE,kBACA,QACA,WACA,gBAEF,qDACE,gBAEF,qDACE,gBAGJ,oBACE,4GACA,kBAGF,eACE,WACA,yBACA,iBACA,8KACA,qBACE,WACA,kBACA,OACA,QACA,MACA,SACA,uBAMJ,cACE,WAMF,cACE,kBACA,c7DtGF,WACA,Y6DuGE,oFACA,0FALF,gBAOI,UACA,WACA,kBACA,yBACA,wEACA,cACA,kBACA,WACA,gHACA,2EACA,6BACE,OACA,MAEF,6BACE,QACA,MACA,gDAEF,6BACE,QACA,SACA,gDAEF,6BACE,OACA,SACA,kDAQN,2B7D9IA,WACA,Y6D6IA,6BAGI,UACA,WAKJ,2B7DvJA,WACA,Y6DsJA,6BAGI,WACA,YAIJ,4CACE,cAYJ,mEANE,eACE,gBACA,YAIJ,+BACE,GACE,8CACA,WAHJ,uBACE,GACE,8CACA,WAIJ,6BACE,GACE,yDAAW,EAFf,qBACE,GACE,yDAAW,ECnKf,WACE,YACA,WACA,gBAHF,2BAKI,kBACA,qBACA,mBAEA,uEAEI,kBACA,sBAHJ,uFAKM,WALN,0IAYI,WAZJ,mEAeI,yBAGJ,0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CA,gBACA,0BACA,4GACA,mBACA,iBAGA,oBACA,CAEF,2DACE,gBACA,wDACA,qBACA,cAGA,kBACA,CAEF,yDACE,gBAEF,mEACE,eACA,WACA,4G9D1TF,qBAEA,eACA,gBACA,kHcjBA,8GACA,OgDwUE,0FACA,QACA,iBACA,sBACA,gBhD1UF,yEACE,8CdgBA,CADF,yE8D4TI,cACA,gBAIJ,6FACE,iBACA,kBAGF,mJAEE,WACA,uDAAW,CAGb,wBACE,YACA,iBAFF,0CAKI,WACA,YACA,iBACA,kBACA,eACA,kBACA,yB9D7VJ,qBAEA,eACA,iBACA,oIcjBA,8GACA,OgD4WI,WACA,4DhD3WJ,gDACE,8CdgBA,CADF,gD8D6VM,cAUJ,oIACE,uFALN,0LASM,aCzYN,SACE,qBACA,iBACA,YACA,cACA,kBACA,yBACA,mBACA,eACA,0GACA,sBACA,UACA,gBACA,qBACA,eAEA,eACE,YAGF,qCAGE,WAGF,uCAEI,qBACA,cACA,cA9BN,wB/DuBE,qBAEA,eACA,iBACA,oIcjBA,8GACA,OiDyBE,eACA,gBACA,gBACA,WACA,wDACA,YjD5BF,8BACE,8CdgBA,CADF,8B+DeI,UAIJ,mBACE,yBACA,6IAKE,WAIJ,cACE,mBAGF,eACE,mBAGF,gBACE,gBAGF,aACE,gBAGF,mBACE,6BACA,yBAEA,8EAGE,WAEF,yBACE,yBAEF,qDAEE,yBAIJ,eACE,kBACA,UACA,SAGF,yCAEE,oHACA,0DAGF,oBACE,sHACA,0DC1GJ,cACE,gBACA,SACA,UAEA,mBACE,kBACA,iBACA,gBACA,SAEA,wBACE,kBACA,SACA,MACA,YACA,8BAGF,mDACE,aAGF,wBACE,kBACA,WACA,YACA,sBACA,oBACA,6BACA,6BACE,qBACA,cAEF,4BACE,kBACA,WAEF,8BACE,qBACA,cAIJ,+BACE,kBACA,kBACA,WACA,WACA,cACA,eACA,SACA,YACA,gBACA,cACA,eACA,4FAAW,CAGb,2BACE,sBACA,eACA,kBACA,SAGF,gDAEI,+BACA,aAHJ,mDAMI,gBAKN,mFACE,cnC/EF,uBACE,mBACA,eACA,aACA,qBACA,cACA,kBACA,sBAEA,+MAII,qBAIJ,6BACE,kBACA,MACA,OACA,qBACA,WACA,YACA,yBACA,kBACA,sBACA,8CAEA,mCACE,+GACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,yGzBPe,CyBWnB,6BACE,kBACA,OACA,UACA,eJnDJ,UAGA,wBIkDI,MACA,SACA,QACA,WACA,YAKJ,wEACE,YACA,qEACA,kBACA,SACA,QACA,UACA,WAIF,kEACE,+GACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,iHzBlDmB,CyBqDrB,8HAGI,yBACA,qBAKF,iGAEI,gDACA,kBAJN,6DASI,+BACA,yBACA,mEACE,gDACA,qBAIJ,qCACE,WACA,mBAIJ,+BACE,eACA,eACA,qBACA,gDACE,iBAIJ,gEAEE,iBACA,kBAGF,6BACE,eACA,kCACE,qBAoBN,gBAZI,qI7BlIF,oBACA,kCACA,mCACA,kCACA,gB6BiII,gBACA,cACA,SACA,WACA,SACA,QACA,mBoCtJN,cACE,kBACA,gBAEA,mBACE,eACA,yBACA,qBACA,kBACA,sBACA,kBACA,YACA,aACA,iBAEA,+BACE,oBAIA,iCACE,WACA,kBACA,QACA,UACA,WACA,YACA,iBACA,kBACA,eATF,0CAWI,8CACA,eACA,WACA,gDACE,WAMR,0BACE,iBACA,0BACA,gBACA,WACA,gCACA,gBACA,kBACA,MACA,OACA,WAEA,gCACE,kBACA,WAIJ,wBACE,eACA,kBACA,YAEA,uCACE,kBACA,MACA,OACA,YACA,YACA,WAIJ,oCACE,iBAGF,2BACE,YACA,cACA,gCACE,gBACA,mBACA,uBACA,iBACA,gBACA,wDAGF,oFACE,eACA,yBAGF,yCACE,mBACA,WAGF,gDACE,oFACA,wCAIJ,kCACE,cACA,WACA,kBACA,aACA,kBACA,QACA,WACA,iBAGF,mEACE,cAGF,0BACE,6BACA,0BACA,kBACA,SACA,OACA,WAIJ,wBACE,qBACA,gBACA,aACA,sBAJF,iCAOI,cAEA,6CACE,kBAVN,0CjE9GA,qBAEA,eACA,iBACA,oIcjBA,8GACA,OAEA,gDACE,8CdgBA,CiE2HJ,uCACE,GACE,mBAEF,GACE,wBALJ,+BACE,GACE,mBAEF,GACE,wBpC9JF,0BACE,mBACA,eACA,aACA,qBACA,cACA,kBACA,sBAEA,oOAII,qBAIJ,gCACE,kBACA,MACA,OACA,qBACA,WACA,YACA,yBACA,kBACA,sBACA,8CAEA,sCACE,+GACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,yGzBPe,CyBWnB,gCACE,kBACA,OACA,UACA,eJnDJ,UAGA,wBIkDI,MACA,SACA,QACA,WACA,YAKJ,8EACE,YACA,qEACA,kBACA,SACA,QACA,UACA,WAIF,wEACE,+GACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,iHzBlDmB,CyBqDrB,0IAGI,yBACA,qBAKF,0GAEI,gDACA,kBAJN,mEASI,+BACA,yBACA,yEACE,gDACA,qBAIJ,wCACE,WACA,mBAIJ,kCACE,eACA,eACA,qBACA,mDACE,iBAIJ,sEAEE,iBACA,kBAGF,gCACE,eACA,qCACE,qBAoBN,gBAZI,iJ7BlIF,oBACA,kCACA,mCACA,kCACA,gB6BiII,gBACA,cACA,SACA,WACA,SACA,QACA,mBqCnJN,iBACE,SACA,YACA,eAHF,oBAKI,UACA,aACA,gBACA,mBACA,UACA,kCAEI,0BAZR,uBAgBM,SACA,mBAjBN,sBAoBM,qBACA,gBACA,kBACA,SACA,eACA,qBACA,mBACA,WACA,wDACA,4BACE,yBAEF,oDACE,yBAIF,kDACE,mBAEF,mGAEE,SACA,WACA,YACA,iBACA,qBACA,sBACA,cACA,eACA,aAGA,4DACE,qBlE9CR,oBACA,kCACA,mCACA,kCACA,gBkE4CQ,gBACA,8FACA,eAIF,gFACE,YAEF,uTCxEN,kBACA,+UnE0BA,eACA,gBACA,oIcjBA,8GACA,OqDVE,qBnEYF,oBACA,kCACA,mCACA,kCACA,gBmEdE,gBACA,kBACA,MACA,UACA,WACA,2KrDKF,uWACE,8CdgBA,CkE8CI,2TC9EN,kBrDCA,qEAAY,CqDAZ,mVnE0BA,eACA,gBACA,oIcjBA,8GACA,OqDVE,qBnEYF,oBACA,kCACA,mCACA,kCACA,gBmEdE,gBACA,kBACA,MACA,UACA,WACA,2KrDKF,2WACE,8CdgBA,CkEoDM,mVACE,oHAA0B,CAMpC,4BACE,aACA,iCACE,cAGJ,uHAII,WACA,mBAOJ,yDACE,iBACA,mBAIJ,sDAEI,cACA,YAHJ,sFAKM,WALN,gFAQM,gBACA,WACA,sBACA,yBACA,kBACA,aAEF,8EACE,aAhBN,gDAoBI,mBACA,WACA,iBACA,crCxIF,mBACE,mBACA,eACA,aACA,qBACA,cACA,kBACA,sBAEA,mLAII,qBAIJ,yBACE,kBACA,MACA,OACA,qBACA,WACA,YACA,yBACA,kBACA,sBACA,8CAEA,+BACE,+GACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,yGzBPe,CyBWnB,yBACE,kBACA,OACA,UACA,eJnDJ,UAGA,wBIkDI,MACA,SACA,QACA,WACA,YAKJ,gEACE,YACA,qEACA,kBACA,SACA,QACA,UACA,WAIF,0DACE,+GACA,kBACA,SACA,QACA,cACA,UACA,WACA,sBACA,aACA,cACA,YACA,iHzBlDmB,CyBqDrB,8GAGI,yBACA,qBAKF,qFAEI,gDACA,kBAJN,qDASI,+BACA,yBACA,2DACE,gDACA,qBAIJ,iCACE,WACA,mBAIJ,2BACE,eACA,eACA,qBACA,4CACE,iBAIJ,wDAEE,iBACA,kBAGF,yBACE,eACA,8BACE,qBAoBN,gBAZI,qH7BlIF,oBACA,kCACA,mCACA,kCACA,gB6BiII,gBACA,cACA,SACA,WACA,SACA,QACA,mBuCrJN,UACE,SACA,YACA,eAHF,aAKI,UACA,aACA,gBACA,mBACA,UATJ,yDAYM,qFAEA,yBACA,0BAEF,oCAEI,yBACA,WACA,WAGJ,4CAEI,6BAGJ,+CAEI,gCAGJ,2BAEI,qBACA,0BArCR,gBAyCM,SACA,mBA1CN,eA6CM,qBACA,gBACA,kBACA,SACA,eACA,qBACA,mBACA,WACA,wDACA,qBACE,yBAEF,sCACE,yBAIF,oCACE,mBAEF,uEAEE,SACA,WACA,YACA,iBACA,qBACA,sBACA,cACA,eACA,aAGA,8CACE,qBpErER,oBACA,kCACA,mCACA,kCACA,gBoEmEQ,8FACA,cAIF,2DACE,YAEF,mOD9FN,kBACA,2PnE0BA,eACA,gBACA,oIcjBA,8GACA,OqDVE,qBnEYF,oBACA,kCACA,mCACA,kCACA,gBmEdE,gBACA,kBACA,MACA,UACA,WACA,2KrDKF,mRACE,8CdgBA,CoEoEI,uODpGN,kBrDCA,qEAAY,CqDAZ,+PnE0BA,eACA,gBACA,oIcjBA,8GACA,OqDVE,qBnEYF,oBACA,kCACA,mCACA,kCACA,gBmEdE,gBACA,kBACA,MACA,UACA,WACA,2KrDKF,uRACE,8CdgBA,CoE0EM,+PACE,oHAA0B,CAMpC,qBACE,aACA,0BACE,cAGJ,kGAII,WACA,mBAOJ,2CACE,iBACA,mBCjIJ,YACE,eACA,UAEA,gBACE,cACA,WACA,aAPJ,6BAWI,eAGF,8BACE,qBAGF,2CACE,0BACA,WACA,YACA,kBACA,yBACA,kBACA,eACA,0EACA,qBACA,mBACA,iBACA,kBAZF,uDAeI,cACA,WACA,YACA,eAGF,iDACE,qBAIJ,4BACE,0BACA,0EACA,eACA,kBACA,kBACA,WACA,YACA,kBAEA,4EACE,0BAGF,gDACE,mBAfJ,4CAmBI,cACA,YApBJ,uDAwBI,mBACA,sBAGF,4DACE,qBA7BJ,mDAsCI,YACA,mBAvCJ,4DAkCM,eACA,gBACA,cApCN,8CA0CI,eA1CJ,8CA6CI,eACA,WA9CJ,0CAiDI,eACA,wDACA,WAKF,gGACE,WAKN,iBACE,gBACA,sBACE,gBACA,eACA,eAEA,2BACE,YACA,iBACA,cACA,kFAJF,+CAOI,iBACA,eACA,WATJ,0CrE5FF,qBAEA,eACA,iBACA,oIcjBA,8GACA,OuDqHM,wDACA,UACA,eACA,YACA,WACA,iBvDxHN,gDACE,8CdgBA,CADF,gDqE0GQ,WAKN,uDACE,yBAGF,2CACE,UAGF,4EAEE,WAGF,2CACE,UAGF,+BACE,qBACA,gBACA,kBACA,eAJF,wDAMI,sBAKN,mGAGI,YACA,kBACA,yBACA,YACA,kBACA,+GACE,uBATN,6GAcI,UAdJ,qKAkBI,uBAlBJ,uHAsBI,oBAtBJ,uHA0BI,WACA,YACA,kBACA,QACA,SA9BJ,+HAkCI,WACA,YACA,cACA,gBACA,kBAtCJ,qJA0CI,iBACA,eACA,WA5CJ,6GAgDI,gBACA,uBACA,mBACA,iBACA,iBACA,wDACA,kBACA,kBACA,eACA,qBACA,sBA1DJ,6KA8DI,iBA9DJ,qHAkEI,kBACA,aAnEJ,qFAuEI,kBACA,UACA,QACA,cAIJ,8BACE,eADF,oDAII,qBACA,WACA,YACA,mBAPJ,yDAWI,YACA,kBAEA,gEACE,YACA,kBACA,UACA,sBACA,wDACA,UACA,WACA,YAtBN,iJA2BM,kBACA,SACA,QACA,WACA,gCACA,wBACA,eACA,eACA,WACA,cACA,WACA,UACA,gBACA,kBACA,6JACE,WA1CR,yEA+CM,SACA,gBAIA,sEACE,WAFJ,6JAOI,UA1DR,gIAiEI,cACA,WACA,YACA,gBApEJ,yDAwEI,aAIA,mFACE,yBA7EN,yFAiFM,YACA,iTAGE,aAIJ,mEACE,gBACA,WA3FN,6DAgGI,eA1ON,0CA+OI,cACA,gBAhPJ,8CAoPI,mIjE1TmB,CiEsEvB,8CAwPI,qIjE9TmB,CiEkUvB,qCACE,GACE,iBACA,WAHJ,6BACE,GACE,iBACA,WAIJ,sCACE,GACE,iBACA,WAHJ,8BACE,GACE,iBACA"",""file"":""antd.min.css"",""sourcesContent"":[""/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type=\""button\""],[type=\""reset\""],[type=\""submit\""]{-webkit-appearance:button}button::-moz-focus-inner,[type=\""button\""]::-moz-focus-inner,[type=\""reset\""]::-moz-focus-inner,[type=\""submit\""]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=\""button\""]:-moz-focusring,[type=\""reset\""]:-moz-focusring,[type=\""submit\""]:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=\""checkbox\""],[type=\""radio\""]{box-sizing:border-box;padding:0}[type=\""number\""]::-webkit-inner-spin-button,[type=\""number\""]::-webkit-outer-spin-button{height:auto}[type=\""search\""]{-webkit-appearance:textfield;outline-offset:-2px}[type=\""search\""]::-webkit-search-cancel-button,[type=\""search\""]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}*:before,*:after{box-sizing:border-box}html,body{width:100%;height:100%}body{font-family:-apple-system,BlinkMacSystemFont,\""Segoe UI\"",Roboto,\""Helvetica Neue\"",Helvetica,\""PingFang SC\"",\""Hiragino Sans GB\"",\""Microsoft YaHei\"",SimSun,sans-serif;font-size:12px;line-height:1.5;color:#666;background-color:#fff}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{margin:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}ul,ol{list-style:none}input::-ms-clear,input::-ms-reveal{display:none}::selection{background:#108ee9;color:#fff}a{color:#108ee9;background:transparent;text-decoration:none;outline:none;cursor:pointer;transition:color .3s ease}a:hover{color:#40a5ed}a:active{color:#0f87dd}a:active,a:hover{outline:0;text-decoration:none}a[disabled]{color:#ccc;cursor:not-allowed;pointer-events:none}.ant-divider{margin:0 4px;color:#999;display:inline-block;height:8px;width:1px;background:#ccc}code,kbd,pre,samp{font-family:Consolas,Menlo,Courier,monospace}.clearfix{zoom:1}.clearfix:before,.clearfix:after{content:\"" \"";display:table}.clearfix:after{clear:both;visibility:hidden;font-size:0;height:0}@font-face{font-family:'anticon';src:url('https://at.alicdn.com/t/font_r5u29ls31bgldi.eot');src:url('https://at.alicdn.com/t/font_r5u29ls31bgldi.eot?#iefix') format('embedded-opentype'),url('https://at.alicdn.com/t/font_r5u29ls31bgldi.woff') format('woff'),url('https://at.alicdn.com/t/font_r5u29ls31bgldi.ttf') format('truetype'),url('https://at.alicdn.com/t/font_r5u29ls31bgldi.svg#iconfont') format('svg')}.anticon{display:inline-block;font-style:normal;vertical-align:baseline;text-align:center;text-transform:none;text-rendering:auto;line-height:1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon:before{display:block;font-family:\""anticon\"" !important}.anticon-step-forward:before{content:\""\\e600\""}.anticon-step-backward:before{content:\""\\e601\""}.anticon-forward:before{content:\""\\e602\""}.anticon-backward:before{content:\""\\e603\""}.anticon-caret-right:before{content:\""\\e604\""}.anticon-caret-left:before{content:\""\\e605\""}.anticon-caret-down:before{content:\""\\e606\""}.anticon-caret-up:before{content:\""\\e607\""}.anticon-right-circle:before{content:\""\\e608\""}.anticon-circle-right:before{content:\""\\e608\""}.anticon-caret-circle-right:before{content:\""\\e608\""}.anticon-left-circle:before{content:\""\\e609\""}.anticon-circle-left:before{content:\""\\e609\""}.anticon-caret-circle-left:before{content:\""\\e609\""}.anticon-up-circle:before{content:\""\\e60a\""}.anticon-circle-up:before{content:\""\\e60a\""}.anticon-caret-circle-up:before{content:\""\\e60a\""}.anticon-down-circle:before{content:\""\\e60b\""}.anticon-circle-down:before{content:\""\\e60b\""}.anticon-caret-circle-down:before{content:\""\\e60b\""}.anticon-right-circle-o:before{content:\""\\e60c\""}.anticon-circle-o-right:before{content:\""\\e60c\""}.anticon-caret-circle-o-right:before{content:\""\\e60c\""}.anticon-left-circle-o:before{content:\""\\e60d\""}.anticon-circle-o-left:before{content:\""\\e60d\""}.anticon-caret-circle-o-left:before{content:\""\\e60d\""}.anticon-up-circle-o:before{content:\""\\e60e\""}.anticon-circle-o-up:before{content:\""\\e60e\""}.anticon-caret-circle-o-up:before{content:\""\\e60e\""}.anticon-down-circle-o:before{content:\""\\e60f\""}.anticon-circle-o-down:before{content:\""\\e60f\""}.anticon-caret-circle-o-down:before{content:\""\\e60f\""}.anticon-verticle-left:before{content:\""\\e610\""}.anticon-verticle-right:before{content:\""\\e611\""}.anticon-rollback:before{content:\""\\e612\""}.anticon-retweet:before{content:\""\\e613\""}.anticon-shrink:before{content:\""\\e614\""}.anticon-arrows-alt:before{content:\""\\e615\""}.anticon-arrow-salt:before{content:\""\\e615\""}.anticon-reload:before{content:\""\\e616\""}.anticon-double-right:before{content:\""\\e617\""}.anticon-double-left:before{content:\""\\e618\""}.anticon-arrow-down:before{content:\""\\e619\""}.anticon-arrow-up:before{content:\""\\e61a\""}.anticon-arrow-right:before{content:\""\\e61b\""}.anticon-arrow-left:before{content:\""\\e61c\""}.anticon-down:before{content:\""\\e61d\""}.anticon-up:before{content:\""\\e61e\""}.anticon-right:before{content:\""\\e61f\""}.anticon-left:before{content:\""\\e620\""}.anticon-minus-square-o:before{content:\""\\e621\""}.anticon-minus-circle:before{content:\""\\e622\""}.anticon-minus-circle-o:before{content:\""\\e623\""}.anticon-minus:before{content:\""\\e624\""}.anticon-plus-circle-o:before{content:\""\\e625\""}.anticon-plus-circle:before{content:\""\\e626\""}.anticon-plus:before{content:\""\\e627\""}.anticon-info-circle:before{content:\""\\e628\""}.anticon-info-circle-o:before{content:\""\\e629\""}.anticon-info:before{content:\""\\e62a\""}.anticon-exclamation:before{content:\""\\e62b\""}.anticon-exclamation-circle:before{content:\""\\e62c\""}.anticon-exclamation-circle-o:before{content:\""\\e62d\""}.anticon-close-circle:before{content:\""\\e62e\""}.anticon-cross-circle:before{content:\""\\e62e\""}.anticon-close-circle-o:before{content:\""\\e62f\""}.anticon-cross-circle-o:before{content:\""\\e62f\""}.anticon-check-circle:before{content:\""\\e630\""}.anticon-check-circle-o:before{content:\""\\e631\""}.anticon-check:before{content:\""\\e632\""}.anticon-close:before{content:\""\\e633\""}.anticon-cross:before{content:\""\\e633\""}.anticon-customer-service:before{content:\""\\e634\""}.anticon-customerservice:before{content:\""\\e634\""}.anticon-credit-card:before{content:\""\\e635\""}.anticon-code-o:before{content:\""\\e636\""}.anticon-book:before{content:\""\\e637\""}.anticon-bar-chart:before{content:\""\\e638\""}.anticon-bars:before{content:\""\\e639\""}.anticon-question:before{content:\""\\e63a\""}.anticon-question-circle:before{content:\""\\e63b\""}.anticon-question-circle-o:before{content:\""\\e63c\""}.anticon-pause:before{content:\""\\e63d\""}.anticon-pause-circle:before{content:\""\\e63e\""}.anticon-pause-circle-o:before{content:\""\\e63f\""}.anticon-clock-circle:before{content:\""\\e640\""}.anticon-clock-circle-o:before{content:\""\\e641\""}.anticon-swap:before{content:\""\\e642\""}.anticon-swap-left:before{content:\""\\e643\""}.anticon-swap-right:before{content:\""\\e644\""}.anticon-plus-square-o:before{content:\""\\e645\""}.anticon-frown:before{content:\""\\e646\""}.anticon-frown-circle:before{content:\""\\e646\""}.anticon-ellipsis:before{content:\""\\e647\""}.anticon-copy:before{content:\""\\e648\""}.anticon-menu-fold:before{content:\""\\e658\""}.anticon-mail:before{content:\""\\e659\""}.anticon-logout:before{content:\""\\e65a\""}.anticon-link:before{content:\""\\e65b\""}.anticon-area-chart:before{content:\""\\e65c\""}.anticon-line-chart:before{content:\""\\e65d\""}.anticon-home:before{content:\""\\e65e\""}.anticon-laptop:before{content:\""\\e65f\""}.anticon-star:before{content:\""\\e660\""}.anticon-star-o:before{content:\""\\e661\""}.anticon-folder:before{content:\""\\e662\""}.anticon-filter:before{content:\""\\e663\""}.anticon-file:before{content:\""\\e664\""}.anticon-exception:before{content:\""\\e665\""}.anticon-meh:before{content:\""\\e666\""}.anticon-meh-circle:before{content:\""\\e666\""}.anticon-meh-o:before{content:\""\\e667\""}.anticon-shopping-cart:before{content:\""\\e668\""}.anticon-save:before{content:\""\\e669\""}.anticon-user:before{content:\""\\e66a\""}.anticon-video-camera:before{content:\""\\e66b\""}.anticon-to-top:before{content:\""\\e66c\""}.anticon-team:before{content:\""\\e66d\""}.anticon-tablet:before{content:\""\\e66e\""}.anticon-solution:before{content:\""\\e66f\""}.anticon-search:before{content:\""\\e670\""}.anticon-share-alt:before{content:\""\\e671\""}.anticon-setting:before{content:\""\\e672\""}.anticon-poweroff:before{content:\""\\e6d5\""}.anticon-picture:before{content:\""\\e674\""}.anticon-phone:before{content:\""\\e675\""}.anticon-paper-clip:before{content:\""\\e676\""}.anticon-notification:before{content:\""\\e677\""}.anticon-mobile:before{content:\""\\e678\""}.anticon-menu-unfold:before{content:\""\\e679\""}.anticon-inbox:before{content:\""\\e67a\""}.anticon-lock:before{content:\""\\e67b\""}.anticon-qrcode:before{content:\""\\e67c\""}.anticon-play-circle:before{content:\""\\e6d0\""}.anticon-play-circle-o:before{content:\""\\e6d1\""}.anticon-tag:before{content:\""\\e6d2\""}.anticon-tag-o:before{content:\""\\e6d3\""}.anticon-tags:before{content:\""\\e67d\""}.anticon-tags-o:before{content:\""\\e67e\""}.anticon-cloud-o:before{content:\""\\e67f\""}.anticon-cloud:before{content:\""\\e680\""}.anticon-cloud-upload:before{content:\""\\e681\""}.anticon-cloud-download:before{content:\""\\e682\""}.anticon-cloud-download-o:before{content:\""\\e683\""}.anticon-cloud-upload-o:before{content:\""\\e684\""}.anticon-environment:before{content:\""\\e685\""}.anticon-environment-o:before{content:\""\\e686\""}.anticon-eye:before{content:\""\\e687\""}.anticon-eye-o:before{content:\""\\e688\""}.anticon-camera:before{content:\""\\e689\""}.anticon-camera-o:before{content:\""\\e68a\""}.anticon-windows:before{content:\""\\e68b\""}.anticon-apple:before{content:\""\\e68c\""}.anticon-apple-o:before{content:\""\\e6d4\""}.anticon-android:before{content:\""\\e68d\""}.anticon-aliwangwang:before{content:\""\\e68e\""}.anticon-aliwangwang-o:before{content:\""\\e68f\""}.anticon-export:before{content:\""\\e691\""}.anticon-edit:before{content:\""\\e692\""}.anticon-circle-down-o:before{content:\""\\e693\""}.anticon-circle-down-:before{content:\""\\e694\""}.anticon-appstore-o:before{content:\""\\e695\""}.anticon-appstore:before{content:\""\\e696\""}.anticon-scan:before{content:\""\\e697\""}.anticon-file-text:before{content:\""\\e698\""}.anticon-folder-open:before{content:\""\\e699\""}.anticon-hdd:before{content:\""\\e69a\""}.anticon-ie:before{content:\""\\e69b\""}.anticon-file-jpg:before{content:\""\\e69c\""}.anticon-like:before{content:\""\\e64c\""}.anticon-like-o:before{content:\""\\e69d\""}.anticon-dislike:before{content:\""\\e64b\""}.anticon-dislike-o:before{content:\""\\e69e\""}.anticon-delete:before{content:\""\\e69f\""}.anticon-enter:before{content:\""\\e6a0\""}.anticon-pushpin-o:before{content:\""\\e6a1\""}.anticon-pushpin:before{content:\""\\e6a2\""}.anticon-heart:before{content:\""\\e6a3\""}.anticon-heart-o:before{content:\""\\e6a4\""}.anticon-pay-circle:before{content:\""\\e6a5\""}.anticon-pay-circle-o:before{content:\""\\e6a6\""}.anticon-smile:before{content:\""\\e6a7\""}.anticon-smile-circle:before{content:\""\\e6a7\""}.anticon-smile-o:before{content:\""\\e6a8\""}.anticon-frown-o:before{content:\""\\e6a9\""}.anticon-calculator:before{content:\""\\e6aa\""}.anticon-message:before{content:\""\\e6ab\""}.anticon-chrome:before{content:\""\\e6ac\""}.anticon-github:before{content:\""\\e6ad\""}.anticon-file-unknown:before{content:\""\\e6af\""}.anticon-file-excel:before{content:\""\\e6b0\""}.anticon-file-ppt:before{content:\""\\e6b1\""}.anticon-file-word:before{content:\""\\e6b2\""}.anticon-file-pdf:before{content:\""\\e6b3\""}.anticon-desktop:before{content:\""\\e6b4\""}.anticon-upload:before{content:\""\\e6b6\""}.anticon-download:before{content:\""\\e6b7\""}.anticon-pie-chart:before{content:\""\\e6b8\""}.anticon-unlock:before{content:\""\\e6ba\""}.anticon-calendar:before{content:\""\\e6bb\""}.anticon-windows-o:before{content:\""\\e6bc\""}.anticon-dot-chart:before{content:\""\\e6bd\""}.anticon-bar-chart:before{content:\""\\e6be\""}.anticon-code:before{content:\""\\e6bf\""}.anticon-plus-square:before{content:\""\\e6c0\""}.anticon-minus-square:before{content:\""\\e6c1\""}.anticon-close-square:before{content:\""\\e6c2\""}.anticon-close-square-o:before{content:\""\\e6c3\""}.anticon-check-square:before{content:\""\\e6c4\""}.anticon-check-square-o:before{content:\""\\e6c5\""}.anticon-fast-backward:before{content:\""\\e6c6\""}.anticon-fast-forward:before{content:\""\\e6c7\""}.anticon-up-square:before{content:\""\\e6c8\""}.anticon-down-square:before{content:\""\\e6c9\""}.anticon-left-square:before{content:\""\\e6ca\""}.anticon-right-square:before{content:\""\\e6cb\""}.anticon-right-square-o:before{content:\""\\e6cc\""}.anticon-left-square-o:before{content:\""\\e6cd\""}.anticon-down-square-o:before{content:\""\\e6ce\""}.anticon-up-square-o:before{content:\""\\e6cf\""}.anticon-loading:before{content:\""\\e6ae\""}.anticon-bulb:before{content:\""\\e649\""}.anticon-select:before{content:\""\\e64a\""}.anticon-addfile:before{content:\""\\e910\""}.anticon-addfolder:before{content:\""\\e914\""}.anticon-switcher:before{content:\""\\e913\""}.anticon-rocket:before{content:\""\\e90f\""}.anticon-dingding:before{content:\""\\e923\""}.anticon-dingding-o:before{content:\""\\e925\""}.anticon-spin{display:inline-block;animation:loadingCircle .8s infinite linear}.fade-enter,.fade-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.fade-enter.fade-enter-active,.fade-appear.fade-appear-active{animation-name:antFadeIn;animation-play-state:running}.fade-leave.fade-leave-active{animation-name:antFadeOut;animation-play-state:running}.fade-enter,.fade-appear{opacity:0;animation-timing-function:linear}.fade-leave{animation-timing-function:linear}@keyframes antFadeIn{0%{opacity:0}100%{opacity:1}}@keyframes antFadeOut{0%{opacity:1}100%{opacity:0}}.move-up-enter,.move-up-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-up-enter.move-up-enter-active,.move-up-appear.move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running}.move-up-leave.move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running}.move-up-enter,.move-up-appear{opacity:0;animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.move-up-leave{animation-timing-function:cubic-bezier(.6, .04, .98, .34)}.move-down-enter,.move-down-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-down-enter.move-down-enter-active,.move-down-appear.move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running}.move-down-leave.move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running}.move-down-enter,.move-down-appear{opacity:0;animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.move-down-leave{animation-timing-function:cubic-bezier(.6, .04, .98, .34)}.move-left-enter,.move-left-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-left-enter.move-left-enter-active,.move-left-appear.move-left-appear-active{animation-name:antMoveLeftIn;animation-play-state:running}.move-left-leave.move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running}.move-left-enter,.move-left-appear{opacity:0;animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.move-left-leave{animation-timing-function:cubic-bezier(.6, .04, .98, .34)}.move-right-enter,.move-right-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-right-enter.move-right-enter-active,.move-right-appear.move-right-appear-active{animation-name:antMoveRightIn;animation-play-state:running}.move-right-leave.move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running}.move-right-enter,.move-right-appear{opacity:0;animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.move-right-leave{animation-timing-function:cubic-bezier(.6, .04, .98, .34)}@keyframes antMoveDownIn{0%{transform-origin:0 0;transform:translateY(100%);opacity:0}100%{transform-origin:0 0;transform:translateY(0);opacity:1}}@keyframes antMoveDownOut{0%{transform-origin:0 0;transform:translateY(0);opacity:1}100%{transform-origin:0 0;transform:translateY(100%);opacity:0}}@keyframes antMoveLeftIn{0%{transform-origin:0 0;transform:translateX(-100%);opacity:0}100%{transform-origin:0 0;transform:translateX(0);opacity:1}}@keyframes antMoveLeftOut{0%{transform-origin:0 0;transform:translateX(0);opacity:1}100%{transform-origin:0 0;transform:translateX(-100%);opacity:0}}@keyframes antMoveRightIn{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}100%{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes antMoveRightOut{0%{transform-origin:0 0;transform:translateX(0);opacity:1}100%{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes antMoveUpIn{0%{transform-origin:0 0;transform:translateY(-100%);opacity:0}100%{transform-origin:0 0;transform:translateY(0);opacity:1}}@keyframes antMoveUpOut{0%{transform-origin:0 0;transform:translateY(0);opacity:1}100%{transform-origin:0 0;transform:translateY(-100%);opacity:0}}@keyframes loadingCircle{0%{transform-origin:50% 50%;transform:rotate(0deg)}100%{transform-origin:50% 50%;transform:rotate(360deg)}}.slide-up-enter,.slide-up-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-up-enter.slide-up-enter-active,.slide-up-appear.slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running}.slide-up-leave.slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running}.slide-up-enter,.slide-up-appear{opacity:0;animation-timing-function:cubic-bezier(.23, 1, .32, 1)}.slide-up-leave{animation-timing-function:cubic-bezier(.755, .05, .855, .06)}.slide-down-enter,.slide-down-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-down-enter.slide-down-enter-active,.slide-down-appear.slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running}.slide-down-leave.slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running}.slide-down-enter,.slide-down-appear{opacity:0;animation-timing-function:cubic-bezier(.23, 1, .32, 1)}.slide-down-leave{animation-timing-function:cubic-bezier(.755, .05, .855, .06)}.slide-left-enter,.slide-left-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-left-enter.slide-left-enter-active,.slide-left-appear.slide-left-appear-active{animation-name:antSlideLeftIn;animation-play-state:running}.slide-left-leave.slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running}.slide-left-enter,.slide-left-appear{opacity:0;animation-timing-function:cubic-bezier(.23, 1, .32, 1)}.slide-left-leave{animation-timing-function:cubic-bezier(.755, .05, .855, .06)}.slide-right-enter,.slide-right-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-right-enter.slide-right-enter-active,.slide-right-appear.slide-right-appear-active{animation-name:antSlideRightIn;animation-play-state:running}.slide-right-leave.slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running}.slide-right-enter,.slide-right-appear{opacity:0;animation-timing-function:cubic-bezier(.23, 1, .32, 1)}.slide-right-leave{animation-timing-function:cubic-bezier(.755, .05, .855, .06)}@keyframes antSlideUpIn{0%{opacity:0;transform-origin:0 0;transform:scaleY(.8)}100%{opacity:1;transform-origin:0 0;transform:scaleY(1)}}@keyframes antSlideUpOut{0%{opacity:1;transform-origin:0 0;transform:scaleY(1)}100%{opacity:0;transform-origin:0 0;transform:scaleY(.8)}}@keyframes antSlideDownIn{0%{opacity:0;transform-origin:100% 100%;transform:scaleY(.8)}100%{opacity:1;transform-origin:100% 100%;transform:scaleY(1)}}@keyframes antSlideDownOut{0%{opacity:1;transform-origin:100% 100%;transform:scaleY(1)}100%{opacity:0;transform-origin:100% 100%;transform:scaleY(.8)}}@keyframes antSlideLeftIn{0%{opacity:0;transform-origin:0 0;transform:scaleX(.8)}100%{opacity:1;transform-origin:0 0;transform:scaleX(1)}}@keyframes antSlideLeftOut{0%{opacity:1;transform-origin:0 0;transform:scaleX(1)}100%{opacity:0;transform-origin:0 0;transform:scaleX(.8)}}@keyframes antSlideRightIn{0%{opacity:0;transform-origin:100% 0;transform:scaleX(.8)}100%{opacity:1;transform-origin:100% 0;transform:scaleX(1)}}@keyframes antSlideRightOut{0%{opacity:1;transform-origin:100% 0;transform:scaleX(1)}100%{opacity:0;transform-origin:100% 0;transform:scaleX(.8)}}.swing-enter,.swing-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.swing-enter.swing-enter-active,.swing-appear.swing-appear-active{animation-name:antSwingIn;animation-play-state:running}@keyframes antSwingIn{0%,100%{transform:translateX(0)}20%{transform:translateX(-10px)}40%{transform:translateX(10px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}.zoom-enter,.zoom-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-enter.zoom-enter-active,.zoom-appear.zoom-appear-active{animation-name:antZoomIn;animation-play-state:running}.zoom-leave.zoom-leave-active{animation-name:antZoomOut;animation-play-state:running}.zoom-enter,.zoom-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-big-enter,.zoom-big-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-enter.zoom-big-enter-active,.zoom-big-appear.zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running}.zoom-big-enter,.zoom-big-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-big-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-big-fast-enter,.zoom-big-fast-appear{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-fast-enter.zoom-big-fast-enter-active,.zoom-big-fast-appear.zoom-big-fast-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running}.zoom-big-fast-enter,.zoom-big-fast-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-big-fast-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-up-enter,.zoom-up-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-up-enter.zoom-up-enter-active,.zoom-up-appear.zoom-up-appear-active{animation-name:antZoomUpIn;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running}.zoom-up-enter,.zoom-up-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-up-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-down-enter,.zoom-down-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-down-enter.zoom-down-enter-active,.zoom-down-appear.zoom-down-appear-active{animation-name:antZoomDownIn;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running}.zoom-down-enter,.zoom-down-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-down-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-left-enter,.zoom-left-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-left-enter.zoom-left-enter-active,.zoom-left-appear.zoom-left-appear-active{animation-name:antZoomLeftIn;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running}.zoom-left-enter,.zoom-left-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-left-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}.zoom-right-enter,.zoom-right-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-right-enter.zoom-right-enter-active,.zoom-right-appear.zoom-right-appear-active{animation-name:antZoomRightIn;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running}.zoom-right-enter,.zoom-right-appear{transform:scale(0);animation-timing-function:cubic-bezier(.08, .82, .17, 1)}.zoom-right-leave{animation-timing-function:cubic-bezier(.78, .14, .15, .86)}@keyframes antZoomIn{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:scale(1)}}@keyframes antZoomOut{0%{transform:scale(1)}100%{opacity:0;transform:scale(.2)}}@keyframes antZoomBigIn{0%{opacity:0;transform:scale(.8)}100%{transform:scale(1)}}@keyframes antZoomBigOut{0%{transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes antZoomUpIn{0%{opacity:0;transform-origin:50% 0;transform:scale(.8)}100%{transform-origin:50% 0;transform:scale(1)}}@keyframes antZoomUpOut{0%{transform-origin:50% 0;transform:scale(1)}100%{opacity:0;transform-origin:50% 0;transform:scale(.8)}}@keyframes antZoomLeftIn{0%{opacity:0;transform-origin:0 50%;transform:scale(.8)}100%{transform-origin:0 50%;transform:scale(1)}}@keyframes antZoomLeftOut{0%{transform-origin:0 50%;transform:scale(1)}100%{opacity:0;transform-origin:0 50%;transform:scale(.8)}}@keyframes antZoomRightIn{0%{opacity:0;transform-origin:100% 50%;transform:scale(.8)}100%{transform-origin:100% 50%;transform:scale(1)}}@keyframes antZoomRightOut{0%{transform-origin:100% 50%;transform:scale(1)}100%{opacity:0;transform-origin:100% 50%;transform:scale(.8)}}@keyframes antZoomDownIn{0%{opacity:0;transform-origin:50% 100%;transform:scale(.8)}100%{transform-origin:50% 100%;transform:scale(1)}}@keyframes antZoomDownOut{0%{transform-origin:50% 100%;transform:scale(1)}100%{opacity:0;transform-origin:50% 100%;transform:scale(.8)}}.ant-motion-collapse{overflow:hidden}.ant-motion-collapse-active{transition:height .2s cubic-bezier(.215, .61, .355, 1)}\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/index.less\n **/"",""/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Correct the line height in all browsers.\n * 3. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\n\n/* Document\n   ========================================================================== */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  line-height: 1.15; /* 2 */\n  -ms-text-size-adjust: 100%; /* 3 */\n  -webkit-text-size-adjust: 100%; /* 3 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n  margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent; /* 1 */\n  -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n  outline-width: 0;\n}\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: sans-serif; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: 1.15; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\""button\""], /* 1 */\n[type=\""reset\""],\n[type=\""submit\""] {\n  -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\""button\""]::-moz-focus-inner,\n[type=\""reset\""]::-moz-focus-inner,\n[type=\""submit\""]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\""button\""]:-moz-focusring,\n[type=\""reset\""]:-moz-focusring,\n[type=\""submit\""]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\""checkbox\""],\n[type=\""radio\""] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\""number\""]::-webkit-inner-spin-button,\n[type=\""number\""]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\""search\""] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\""search\""]::-webkit-search-cancel-button,\n[type=\""search\""]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n  display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n  display: none;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/normalize.less\n **/"",""@import \""./normalize.less\"";\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); //  remove tap highlight color for mobile safari\n}\n\n*:before,\n*:after {\n  box-sizing: border-box;\n}\n\n// HTML & Body reset\nhtml, body {\n  .square(100%);\n}\n\nbody {\n  font-family: @font-family;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-background;\n}\n\n// unify the setting of elements's margin and padding for browsers\nbody,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section {\n  margin: 0;\n  padding: 0;\n}\n\n// Reset fonts for relevant elements\nbutton,input,select,textarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n  color: inherit;\n}\n\nul,\nol {\n  list-style: none;\n}\n\n// Remove the clear button of a text input control in IE10+\ninput::-ms-clear, input::-ms-reveal {\n  display: none;\n}\n\n::selection {\n  background: @primary-color;\n  color: #fff;\n}\n\n// Links\na {\n  color: @link-color;\n  background: transparent;\n  text-decoration: none;\n  outline: none;\n  cursor: pointer;\n  transition: color .3s ease;\n\n  &:hover {\n    color: @link-hover-color;\n  }\n\n  &:active {\n    color: @link-active-color;\n  }\n\n  &:active,\n  &:hover {\n    outline: 0;\n    text-decoration: none;\n  }\n\n  &[disabled] {\n    color: #ccc;\n    cursor: not-allowed;\n    pointer-events: none;\n  }\n}\n\n.@{ant-prefix}-divider {\n  margin: 0 4px;\n  color: @text-color-secondary;\n  display: inline-block;\n  height: 8px;\n  width: 1px;\n  background: #ccc;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: @code-family;\n}\n\n// Utility classes\n.clearfix {\n  .clearfix();\n}\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/base.less\n **/"",""// Sizing shortcuts\n\n.size(@width; @height) {\n  width: @width;\n  height: @height;\n}\n\n.square(@size) {\n  .size(@size; @size);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/size.less\n **/"",""// mixins for clearfix\n// ------------------------\n.clearfix() {\n  zoom: 1;\n  &:before,\n  &:after {\n    content: \"" \"";\n    display: table;\n  }\n  &:after {\n    clear: both;\n    visibility: hidden;\n    font-size: 0;\n    height: 0;\n  }\n}\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/clearfix.less\n **/"",""// font-face\n// @icon-url： 字体源文件的地址\n@font-face {\n  font-family: 'anticon';\n  src: url('@{icon-url}.eot'); /* IE9*/\n  src: url('@{icon-url}.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n  url('@{icon-url}.woff') format('woff'), /* chrome、firefox */\n  url('@{icon-url}.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/\n  url('@{icon-url}.svg#iconfont') format('svg'); /* iOS 4.1- */\n}\n\n.@{iconfont-css-prefix} {\n .iconfont-mixin();\n}\n\n.@{iconfont-css-prefix}-step-forward:before { content: \""\\e600\""; }\n.@{iconfont-css-prefix}-step-backward:before { content: \""\\e601\""; }\n.@{iconfont-css-prefix}-forward:before { content: \""\\e602\""; }\n.@{iconfont-css-prefix}-backward:before { content: \""\\e603\""; }\n.@{iconfont-css-prefix}-caret-right:before { content: \""\\e604\""; }\n.@{iconfont-css-prefix}-caret-left:before { content: \""\\e605\""; }\n.@{iconfont-css-prefix}-caret-down:before { content: \""\\e606\""; }\n.@{iconfont-css-prefix}-caret-up:before { content: \""\\e607\""; }\n.@{iconfont-css-prefix}-right-circle:before { content: \""\\e608\""; }\n.@{iconfont-css-prefix}-circle-right:before { content: \""\\e608\""; } // antd@1.x compatibility alias: right-circle\n.@{iconfont-css-prefix}-caret-circle-right:before { content: \""\\e608\""; } // antd@1.x compatibility alias: right-circle\n.@{iconfont-css-prefix}-left-circle:before { content: \""\\e609\""; }\n.@{iconfont-css-prefix}-circle-left:before { content: \""\\e609\""; } // antd@1.x compatibility alias: left-circle\n.@{iconfont-css-prefix}-caret-circle-left:before { content: \""\\e609\""; } // antd@1.x compatibility alias: left-circle\n.@{iconfont-css-prefix}-up-circle:before { content: \""\\e60a\""; }\n.@{iconfont-css-prefix}-circle-up:before { content: \""\\e60a\""; } // antd@1.x compatibility alias: up-circle\n.@{iconfont-css-prefix}-caret-circle-up:before { content: \""\\e60a\""; } // antd@1.x compatibility alias: up-circle\n.@{iconfont-css-prefix}-down-circle:before { content: \""\\e60b\""; }\n.@{iconfont-css-prefix}-circle-down:before { content: \""\\e60b\""; } // antd@1.x compatibility alias: down-circle\n.@{iconfont-css-prefix}-caret-circle-down:before { content: \""\\e60b\""; } // antd@1.x compatibility alias: down-circle\n.@{iconfont-css-prefix}-right-circle-o:before { content: \""\\e60c\""; }\n.@{iconfont-css-prefix}-circle-o-right:before { content: \""\\e60c\""; } // antd@1.x compatibility alias: right-circle-o\n.@{iconfont-css-prefix}-caret-circle-o-right:before { content: \""\\e60c\""; } // antd@1.x compatibility alias: right-circle-o\n.@{iconfont-css-prefix}-left-circle-o:before { content: \""\\e60d\""; }\n.@{iconfont-css-prefix}-circle-o-left:before { content: \""\\e60d\""; } // antd@1.x compatibility alias: left-circle-o\n.@{iconfont-css-prefix}-caret-circle-o-left:before { content: \""\\e60d\""; } // antd@1.x compatibility alias: left-circle-o\n.@{iconfont-css-prefix}-up-circle-o:before { content: \""\\e60e\""; }\n.@{iconfont-css-prefix}-circle-o-up:before { content: \""\\e60e\""; } // antd@1.x compatibility alias: up-circle-o\n.@{iconfont-css-prefix}-caret-circle-o-up:before { content: \""\\e60e\""; } // antd@1.x compatibility alias: up-circle-o\n.@{iconfont-css-prefix}-down-circle-o:before { content: \""\\e60f\""; }\n.@{iconfont-css-prefix}-circle-o-down:before { content: \""\\e60f\""; } // antd@1.x compatibility alias: down-circle-o\n.@{iconfont-css-prefix}-caret-circle-o-down:before { content: \""\\e60f\""; } // antd@1.x compatibility alias: down-circle-o\n.@{iconfont-css-prefix}-verticle-left:before { content: \""\\e610\""; }\n.@{iconfont-css-prefix}-verticle-right:before { content: \""\\e611\""; }\n.@{iconfont-css-prefix}-rollback:before { content: \""\\e612\""; }\n.@{iconfont-css-prefix}-retweet:before { content: \""\\e613\""; }\n.@{iconfont-css-prefix}-shrink:before { content: \""\\e614\""; }\n.@{iconfont-css-prefix}-arrows-alt:before { content: \""\\e615\""; }\n.@{iconfont-css-prefix}-arrow-salt:before { content: \""\\e615\""; } // antd@1.x compatibility alias: arrows-alt\n.@{iconfont-css-prefix}-reload:before { content: \""\\e616\""; }\n.@{iconfont-css-prefix}-double-right:before { content: \""\\e617\""; }\n.@{iconfont-css-prefix}-double-left:before { content: \""\\e618\""; }\n.@{iconfont-css-prefix}-arrow-down:before { content: \""\\e619\""; }\n.@{iconfont-css-prefix}-arrow-up:before { content: \""\\e61a\""; }\n.@{iconfont-css-prefix}-arrow-right:before { content: \""\\e61b\""; }\n.@{iconfont-css-prefix}-arrow-left:before { content: \""\\e61c\""; }\n.@{iconfont-css-prefix}-down:before { content: \""\\e61d\""; }\n.@{iconfont-css-prefix}-up:before { content: \""\\e61e\""; }\n.@{iconfont-css-prefix}-right:before { content: \""\\e61f\""; }\n.@{iconfont-css-prefix}-left:before { content: \""\\e620\""; }\n.@{iconfont-css-prefix}-minus-square-o:before { content: \""\\e621\""; }\n.@{iconfont-css-prefix}-minus-circle:before { content: \""\\e622\""; }\n.@{iconfont-css-prefix}-minus-circle-o:before { content: \""\\e623\""; }\n.@{iconfont-css-prefix}-minus:before { content: \""\\e624\""; }\n.@{iconfont-css-prefix}-plus-circle-o:before { content: \""\\e625\""; }\n.@{iconfont-css-prefix}-plus-circle:before { content: \""\\e626\""; }\n.@{iconfont-css-prefix}-plus:before { content: \""\\e627\""; }\n.@{iconfont-css-prefix}-info-circle:before { content: \""\\e628\""; }\n.@{iconfont-css-prefix}-info-circle-o:before { content: \""\\e629\""; }\n.@{iconfont-css-prefix}-info:before { content: \""\\e62a\""; }\n.@{iconfont-css-prefix}-exclamation:before { content: \""\\e62b\""; }\n.@{iconfont-css-prefix}-exclamation-circle:before { content: \""\\e62c\""; }\n.@{iconfont-css-prefix}-exclamation-circle-o:before { content: \""\\e62d\""; }\n.@{iconfont-css-prefix}-close-circle:before { content: \""\\e62e\""; }\n.@{iconfont-css-prefix}-cross-circle:before { content: \""\\e62e\""; } // antd@1.x compatibility alias: close-circle\n.@{iconfont-css-prefix}-close-circle-o:before { content: \""\\e62f\""; }\n.@{iconfont-css-prefix}-cross-circle-o:before { content: \""\\e62f\""; } // antd@1.x compatibility alias: close-circle-o\n.@{iconfont-css-prefix}-check-circle:before { content: \""\\e630\""; }\n.@{iconfont-css-prefix}-check-circle-o:before { content: \""\\e631\""; }\n.@{iconfont-css-prefix}-check:before { content: \""\\e632\""; }\n.@{iconfont-css-prefix}-close:before { content: \""\\e633\""; }\n.@{iconfont-css-prefix}-cross:before { content: \""\\e633\""; } // antd@1.x compatibility alias: close\n.@{iconfont-css-prefix}-customer-service:before { content: \""\\e634\""; }\n.@{iconfont-css-prefix}-customerservice:before { content: \""\\e634\""; } // antd@1.x compatibility alias: customer-service\n.@{iconfont-css-prefix}-credit-card:before { content: \""\\e635\""; }\n.@{iconfont-css-prefix}-code-o:before { content: \""\\e636\""; }\n.@{iconfont-css-prefix}-book:before { content: \""\\e637\""; }\n.@{iconfont-css-prefix}-bar-chart:before { content: \""\\e638\""; }\n.@{iconfont-css-prefix}-bars:before { content: \""\\e639\""; }\n.@{iconfont-css-prefix}-question:before { content: \""\\e63a\""; }\n.@{iconfont-css-prefix}-question-circle:before { content: \""\\e63b\""; }\n.@{iconfont-css-prefix}-question-circle-o:before { content: \""\\e63c\""; }\n.@{iconfont-css-prefix}-pause:before { content: \""\\e63d\""; }\n.@{iconfont-css-prefix}-pause-circle:before { content: \""\\e63e\""; }\n.@{iconfont-css-prefix}-pause-circle-o:before { content: \""\\e63f\""; }\n.@{iconfont-css-prefix}-clock-circle:before { content: \""\\e640\""; }\n.@{iconfont-css-prefix}-clock-circle-o:before { content: \""\\e641\""; }\n.@{iconfont-css-prefix}-swap:before { content: \""\\e642\""; }\n.@{iconfont-css-prefix}-swap-left:before { content: \""\\e643\""; }\n.@{iconfont-css-prefix}-swap-right:before { content: \""\\e644\""; }\n.@{iconfont-css-prefix}-plus-square-o:before { content: \""\\e645\""; }\n.@{iconfont-css-prefix}-frown:before { content: \""\\e646\""; }\n.@{iconfont-css-prefix}-frown-circle:before { content: \""\\e646\""; } // antd@1.x compatibility alias: frown\n.@{iconfont-css-prefix}-ellipsis:before { content: \""\\e647\""; }\n.@{iconfont-css-prefix}-copy:before { content: \""\\e648\""; }\n.@{iconfont-css-prefix}-menu-fold:before { content: \""\\e658\""; }\n.@{iconfont-css-prefix}-mail:before { content: \""\\e659\""; }\n.@{iconfont-css-prefix}-logout:before { content: \""\\e65a\""; }\n.@{iconfont-css-prefix}-link:before { content: \""\\e65b\""; }\n.@{iconfont-css-prefix}-area-chart:before { content: \""\\e65c\""; }\n.@{iconfont-css-prefix}-line-chart:before { content: \""\\e65d\""; }\n.@{iconfont-css-prefix}-home:before { content: \""\\e65e\""; }\n.@{iconfont-css-prefix}-laptop:before { content: \""\\e65f\""; }\n.@{iconfont-css-prefix}-star:before { content: \""\\e660\""; }\n.@{iconfont-css-prefix}-star-o:before { content: \""\\e661\""; }\n.@{iconfont-css-prefix}-folder:before { content: \""\\e662\""; }\n.@{iconfont-css-prefix}-filter:before { content: \""\\e663\""; }\n.@{iconfont-css-prefix}-file:before { content: \""\\e664\""; }\n.@{iconfont-css-prefix}-exception:before { content: \""\\e665\""; }\n.@{iconfont-css-prefix}-meh:before { content: \""\\e666\""; }\n.@{iconfont-css-prefix}-meh-circle:before { content: \""\\e666\""; } // antd@1.x compatibility alias: meh\n.@{iconfont-css-prefix}-meh-o:before { content: \""\\e667\""; }\n.@{iconfont-css-prefix}-shopping-cart:before { content: \""\\e668\""; }\n.@{iconfont-css-prefix}-save:before { content: \""\\e669\""; }\n.@{iconfont-css-prefix}-user:before { content: \""\\e66a\""; }\n.@{iconfont-css-prefix}-video-camera:before { content: \""\\e66b\""; }\n.@{iconfont-css-prefix}-to-top:before { content: \""\\e66c\""; }\n.@{iconfont-css-prefix}-team:before { content: \""\\e66d\""; }\n.@{iconfont-css-prefix}-tablet:before { content: \""\\e66e\""; }\n.@{iconfont-css-prefix}-solution:before { content: \""\\e66f\""; }\n.@{iconfont-css-prefix}-search:before { content: \""\\e670\""; }\n.@{iconfont-css-prefix}-share-alt:before { content: \""\\e671\""; }\n.@{iconfont-css-prefix}-setting:before { content: \""\\e672\""; }\n.@{iconfont-css-prefix}-poweroff:before { content: \""\\e6d5\""; }\n.@{iconfont-css-prefix}-picture:before { content: \""\\e674\""; }\n.@{iconfont-css-prefix}-phone:before { content: \""\\e675\""; }\n.@{iconfont-css-prefix}-paper-clip:before { content: \""\\e676\""; }\n.@{iconfont-css-prefix}-notification:before { content: \""\\e677\""; }\n.@{iconfont-css-prefix}-mobile:before { content: \""\\e678\""; }\n.@{iconfont-css-prefix}-menu-unfold:before { content: \""\\e679\""; }\n.@{iconfont-css-prefix}-inbox:before { content: \""\\e67a\""; }\n.@{iconfont-css-prefix}-lock:before { content: \""\\e67b\""; }\n.@{iconfont-css-prefix}-qrcode:before { content: \""\\e67c\""; }\n.@{iconfont-css-prefix}-play-circle:before { content: \""\\e6d0\""; }\n.@{iconfont-css-prefix}-play-circle-o:before { content: \""\\e6d1\""; }\n.@{iconfont-css-prefix}-tag:before { content: \""\\e6d2\""; }\n.@{iconfont-css-prefix}-tag-o:before { content: \""\\e6d3\""; }\n.@{iconfont-css-prefix}-tags:before { content: \""\\e67d\""; }\n.@{iconfont-css-prefix}-tags-o:before { content: \""\\e67e\""; }\n.@{iconfont-css-prefix}-cloud-o:before { content: \""\\e67f\""; }\n.@{iconfont-css-prefix}-cloud:before { content: \""\\e680\""; }\n.@{iconfont-css-prefix}-cloud-upload:before { content: \""\\e681\""; }\n.@{iconfont-css-prefix}-cloud-download:before { content: \""\\e682\""; }\n.@{iconfont-css-prefix}-cloud-download-o:before { content: \""\\e683\""; }\n.@{iconfont-css-prefix}-cloud-upload-o:before { content: \""\\e684\""; }\n.@{iconfont-css-prefix}-environment:before { content: \""\\e685\""; }\n.@{iconfont-css-prefix}-environment-o:before { content: \""\\e686\""; }\n.@{iconfont-css-prefix}-eye:before { content: \""\\e687\""; }\n.@{iconfont-css-prefix}-eye-o:before { content: \""\\e688\""; }\n.@{iconfont-css-prefix}-camera:before { content: \""\\e689\""; }\n.@{iconfont-css-prefix}-camera-o:before { content: \""\\e68a\""; }\n.@{iconfont-css-prefix}-windows:before { content: \""\\e68b\""; }\n.@{iconfont-css-prefix}-apple:before { content: \""\\e68c\""; }\n.@{iconfont-css-prefix}-apple-o:before { content: \""\\e6d4\""; }\n.@{iconfont-css-prefix}-android:before { content: \""\\e68d\""; }\n.@{iconfont-css-prefix}-aliwangwang:before { content: \""\\e68e\""; }\n.@{iconfont-css-prefix}-aliwangwang-o:before { content: \""\\e68f\""; }\n.@{iconfont-css-prefix}-export:before { content: \""\\e691\""; }\n.@{iconfont-css-prefix}-edit:before { content: \""\\e692\""; }\n.@{iconfont-css-prefix}-circle-down-o:before { content: \""\\e693\""; }\n.@{iconfont-css-prefix}-circle-down-:before { content: \""\\e694\""; }\n.@{iconfont-css-prefix}-appstore-o:before { content: \""\\e695\""; }\n.@{iconfont-css-prefix}-appstore:before { content: \""\\e696\""; }\n.@{iconfont-css-prefix}-scan:before { content: \""\\e697\""; }\n.@{iconfont-css-prefix}-file-text:before { content: \""\\e698\""; }\n.@{iconfont-css-prefix}-folder-open:before { content: \""\\e699\""; }\n.@{iconfont-css-prefix}-hdd:before { content: \""\\e69a\""; }\n.@{iconfont-css-prefix}-ie:before { content: \""\\e69b\""; }\n.@{iconfont-css-prefix}-file-jpg:before { content: \""\\e69c\""; }\n.@{iconfont-css-prefix}-like:before { content: \""\\e64c\""; }\n.@{iconfont-css-prefix}-like-o:before { content: \""\\e69d\""; }\n.@{iconfont-css-prefix}-dislike:before { content: \""\\e64b\""; }\n.@{iconfont-css-prefix}-dislike-o:before { content: \""\\e69e\""; }\n.@{iconfont-css-prefix}-delete:before { content: \""\\e69f\""; }\n.@{iconfont-css-prefix}-enter:before { content: \""\\e6a0\""; }\n.@{iconfont-css-prefix}-pushpin-o:before { content: \""\\e6a1\""; }\n.@{iconfont-css-prefix}-pushpin:before { content: \""\\e6a2\""; }\n.@{iconfont-css-prefix}-heart:before { content: \""\\e6a3\""; }\n.@{iconfont-css-prefix}-heart-o:before { content: \""\\e6a4\""; }\n.@{iconfont-css-prefix}-pay-circle:before { content: \""\\e6a5\""; }\n.@{iconfont-css-prefix}-pay-circle-o:before { content: \""\\e6a6\""; }\n.@{iconfont-css-prefix}-smile:before { content: \""\\e6a7\""; }\n.@{iconfont-css-prefix}-smile-circle:before { content: \""\\e6a7\""; }  // antd@1.x compatibility alias: smile\n.@{iconfont-css-prefix}-smile-o:before { content: \""\\e6a8\""; }\n.@{iconfont-css-prefix}-frown-o:before { content: \""\\e6a9\""; }\n.@{iconfont-css-prefix}-calculator:before { content: \""\\e6aa\""; }\n.@{iconfont-css-prefix}-message:before { content: \""\\e6ab\""; }\n.@{iconfont-css-prefix}-chrome:before { content: \""\\e6ac\""; }\n.@{iconfont-css-prefix}-github:before { content: \""\\e6ad\""; }\n.@{iconfont-css-prefix}-file-unknown:before { content: \""\\e6af\""; }\n.@{iconfont-css-prefix}-file-excel:before { content: \""\\e6b0\""; }\n.@{iconfont-css-prefix}-file-ppt:before { content: \""\\e6b1\""; }\n.@{iconfont-css-prefix}-file-word:before { content: \""\\e6b2\""; }\n.@{iconfont-css-prefix}-file-pdf:before { content: \""\\e6b3\""; }\n.@{iconfont-css-prefix}-desktop:before { content: \""\\e6b4\""; }\n.@{iconfont-css-prefix}-upload:before { content: \""\\e6b6\""; }\n.@{iconfont-css-prefix}-download:before { content: \""\\e6b7\""; }\n.@{iconfont-css-prefix}-pie-chart:before { content: \""\\e6b8\""; }\n.@{iconfont-css-prefix}-unlock:before { content: \""\\e6ba\""; }\n.@{iconfont-css-prefix}-calendar:before { content: \""\\e6bb\""; }\n.@{iconfont-css-prefix}-windows-o:before { content: \""\\e6bc\""; }\n.@{iconfont-css-prefix}-dot-chart:before { content: \""\\e6bd\""; }\n.@{iconfont-css-prefix}-bar-chart:before { content: \""\\e6be\""; }\n.@{iconfont-css-prefix}-code:before { content: \""\\e6bf\""; }\n.@{iconfont-css-prefix}-plus-square:before { content: \""\\e6c0\""; }\n.@{iconfont-css-prefix}-minus-square:before { content: \""\\e6c1\""; }\n.@{iconfont-css-prefix}-close-square:before { content: \""\\e6c2\""; }\n.@{iconfont-css-prefix}-close-square-o:before { content: \""\\e6c3\""; }\n.@{iconfont-css-prefix}-check-square:before { content: \""\\e6c4\""; }\n.@{iconfont-css-prefix}-check-square-o:before { content: \""\\e6c5\""; }\n.@{iconfont-css-prefix}-fast-backward:before { content: \""\\e6c6\""; }\n.@{iconfont-css-prefix}-fast-forward:before { content: \""\\e6c7\""; }\n.@{iconfont-css-prefix}-up-square:before { content: \""\\e6c8\""; }\n.@{iconfont-css-prefix}-down-square:before { content: \""\\e6c9\""; }\n.@{iconfont-css-prefix}-left-square:before { content: \""\\e6ca\""; }\n.@{iconfont-css-prefix}-right-square:before { content: \""\\e6cb\""; }\n.@{iconfont-css-prefix}-right-square-o:before { content: \""\\e6cc\""; }\n.@{iconfont-css-prefix}-left-square-o:before { content: \""\\e6cd\""; }\n.@{iconfont-css-prefix}-down-square-o:before { content: \""\\e6ce\""; }\n.@{iconfont-css-prefix}-up-square-o:before { content: \""\\e6cf\""; }\n.@{iconfont-css-prefix}-loading:before { content: \""\\e6ae\""; }\n.@{iconfont-css-prefix}-bulb:before { content: \""\\e649\""; }\n.@{iconfont-css-prefix}-select:before { content: \""\\e64a\""; }\n.@{iconfont-css-prefix}-addfile:before { content: \""\\e910\""; }\n.@{iconfont-css-prefix}-addfolder:before { content: \""\\e914\""; }\n.@{iconfont-css-prefix}-switcher:before { content: \""\\e913\""; }\n.@{iconfont-css-prefix}-rocket:before { content: \""\\e90f\""; }\n.@{iconfont-css-prefix}-dingding:before { content: \""\\e923\""; }\n.@{iconfont-css-prefix}-dingding-o:before { content: \""\\e925\""; }\n\n.@{iconfont-css-prefix}-spin {\n  display: inline-block;\n  animation: loadingCircle 0.8s infinite linear;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/iconfont.less\n **/"","".iconfont-mixin() {\n  display: inline-block;\n  font-style: normal;\n  vertical-align: baseline;\n  text-align: center;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  &:before {\n    display: block;\n    font-family: \""anticon\"" !important;\n  }\n}\n\n.iconfont-font(@content) {\n  font-family: 'anticon';\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  content: @content;\n}\n\n// for iconfont font size\n// fix chrome 12px bug, support ie\n.iconfont-size-under-12px(@size, @rotate: 0deg) {\n  display: inline-block;\n  @font-scale: unit(@size / 12px);\n  font-size: @font-size-base;\n  font-size: ~\""@{size} \\9\""; // ie8-9\n  transform: scale(@font-scale) rotate(@rotate);\n  .ie-rotate-via-degrees(@rotate);\n  :root & {\n    font-size: @font-size-base; // reset ie9 and above\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/iconfont.less\n **/"",""@import '../themes/default';\n\n.motion-common(@duration: @animation-duration-base) {\n  animation-duration: @duration;\n  animation-fill-mode: both;\n}\n\n.motion-common-leave(@duration: @animation-duration-base) {\n  animation-duration: @duration;\n  animation-fill-mode: both;\n}\n\n.make-motion(@className, @keyframeName, @duration: @animation-duration-base) {\n  .@{className}-enter,\n  .@{className}-appear {\n    .motion-common(@duration);\n    animation-play-state: paused;\n  }\n  .@{className}-leave {\n    .motion-common-leave(@duration);\n    animation-play-state: paused;\n  }\n  .@{className}-enter.@{className}-enter-active,\n  .@{className}-appear.@{className}-appear-active {\n    animation-name: ~\""@{keyframeName}In\"";\n    animation-play-state: running;\n  }\n  .@{className}-leave.@{className}-leave-active {\n    animation-name: ~\""@{keyframeName}Out\"";\n    animation-play-state: running;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/motion.less\n **/"","".fade-motion(@className, @keyframeName) {\n  .make-motion(@className, @keyframeName);\n  .@{className}-enter,\n  .@{className}-appear {\n    opacity: 0;\n    animation-timing-function: linear;\n  }\n  .@{className}-leave {\n    animation-timing-function: linear;\n  }\n}\n\n.fade-motion(fade, antFade);\n\n@keyframes antFadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes antFadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/fade.less\n **/"","".move-motion(@className, @keyframeName) {\n  .make-motion(@className, @keyframeName);\n  .@{className}-enter,\n  .@{className}-appear {\n    opacity: 0;\n    animation-timing-function: @ease-out-circ;\n  }\n  .@{className}-leave {\n    animation-timing-function: @ease-in-circ;\n  }\n}\n\n.move-motion(move-up, antMoveUp);\n.move-motion(move-down, antMoveDown);\n.move-motion(move-left, antMoveLeft);\n.move-motion(move-right, antMoveRight);\n\n@keyframes antMoveDownIn {\n  0% {\n    transform-origin: 0 0;\n    transform: translateY(100%);\n    opacity: 0;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n\n@keyframes antMoveDownOut {\n  0% {\n    transform-origin: 0 0;\n    transform: translateY(0%);\n    opacity: 1;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateY(100%);\n    opacity: 0;\n  }\n}\n\n@keyframes antMoveLeftIn {\n  0% {\n    transform-origin: 0 0;\n    transform: translateX(-100%);\n    opacity: 0;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateX(0%);\n    opacity: 1;\n  }\n}\n\n@keyframes antMoveLeftOut {\n  0% {\n    transform-origin: 0 0;\n    transform: translateX(0%);\n    opacity: 1;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateX(-100%);\n    opacity: 0;\n  }\n}\n\n@keyframes antMoveRightIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0 0;\n    transform: translateX(100%);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 0 0;\n    transform: translateX(0%);\n  }\n}\n\n@keyframes antMoveRightOut {\n  0% {\n    transform-origin: 0 0;\n    transform: translateX(0%);\n    opacity: 1;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateX(100%);\n    opacity: 0;\n  }\n}\n\n@keyframes antMoveUpIn {\n  0% {\n    transform-origin: 0 0;\n    transform: translateY(-100%);\n    opacity: 0;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n\n@keyframes antMoveUpOut {\n  0% {\n    transform-origin: 0 0;\n    transform: translateY(0%);\n    opacity: 1;\n  }\n  100% {\n    transform-origin: 0 0;\n    transform: translateY(-100%);\n    opacity: 0;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/move.less\n **/"",""// Prefix\n@ant-prefix             : ant;\n\n// Color\n@primary-color          : #108ee9;\n@success-color          : #87d068;\n@error-color            : #f50;\n@highlight-color        : #f50;\n@warning-color          : #fa0;\n@normal-color           : #d9d9d9;\n\n// ------ Base & Require ------\n@body-background        : #fff;\n@font-family            : -apple-system, BlinkMacSystemFont, \""Segoe UI\"", Roboto, \""Helvetica Neue\"", Helvetica, \""PingFang SC\"", \""Hiragino Sans GB\"", \""Microsoft YaHei\"", SimSun, sans-serif;\n@code-family            : Consolas,Menlo,Courier,monospace;\n@text-color             : #666;\n@heading-color          : #404040;\n@text-color-secondary   : #999;\n@font-size-base         : 12px;\n@font-size-lg           : @font-size-base + 2px;\n@line-height-base       : 1.5;\n@border-radius-base     : 4px;\n@border-radius-sm       : 2px;\n\n// ICONFONT\n@iconfont-css-prefix    : anticon;\n@icon-url               : \""https://at.alicdn.com/t/font_r5u29ls31bgldi\"";\n\n// LINK\n@link-color             : #108ee9;\n@link-hover-color       : tint(@link-color, 20%);\n@link-active-color      : shade(@link-color, 5%);\n@link-hover-decoration  : none;\n\n// Animation\n@ease-out            : cubic-bezier(0.215, 0.61, 0.355, 1);\n@ease-in             : cubic-bezier(0.55, 0.055, 0.675, 0.19);\n@ease-in-out         : cubic-bezier(0.645, 0.045, 0.355, 1);\n@ease-out-back       : cubic-bezier(0.12, 0.4, 0.29, 1.46);\n@ease-in-back        : cubic-bezier(0.71, -0.46, 0.88, 0.6);\n@ease-in-out-back    : cubic-bezier(0.71, -0.46, 0.29, 1.46);\n@ease-out-circ       : cubic-bezier(0.08, 0.82, 0.17, 1);\n@ease-in-circ        : cubic-bezier(0.6, 0.04, 0.98, 0.34);\n@ease-in-out-circ    : cubic-bezier(0.78, 0.14, 0.15, 0.86);\n@ease-out-quint      : cubic-bezier(0.23, 1, 0.32, 1);\n@ease-in-quint       : cubic-bezier(0.755, 0.05, 0.855, 0.06);\n@ease-in-out-quint   : cubic-bezier(0.86, 0, 0.07, 1);\n\n// Border color\n@border-color-base      : #d9d9d9;        // base border outline a component\n@border-color-split     : #e9e9e9;        // split border inside a component\n\n// Outline\n@outline-blur-size      : 0;\n@outline-width          : 2px;\n@outline-color          : @primary-color;\n\n// Background color\n@background-color-base  : #f7f7f7;        // basic gray background\n\n// Shadow\n@shadow-color           : rgba(0, 0, 0, .2);\n@box-shadow-base        : @shadow-1-down;\n@shadow-1-up            : 0 -1px 6px @shadow-color;\n@shadow-1-down          : 0 1px 6px @shadow-color;\n@shadow-1-left          : -1px 0 6px @shadow-color;\n@shadow-1-right         : 1px 0 6px @shadow-color;\n@shadow-2               : 0 2px 8px @shadow-color;\n\n// Buttons\n@btn-font-weight        : 500;\n@btn-border-radius-base : @border-radius-base;\n@btn-border-radius-sm   : @border-radius-sm;\n\n@btn-primary-color      : #fff;\n@btn-primary-bg         : @primary-color;\n@btn-group-border       : shade(@primary-color, 5%);\n\n@btn-default-color      : @text-color;\n@btn-default-bg         : @background-color-base;\n@btn-default-border     : @border-color-base;\n\n@btn-ghost-color        : @text-color;\n@btn-ghost-bg           : transparent;\n@btn-ghost-border       : @border-color-base;\n\n@btn-disable-color      : #ccc;\n@btn-disable-bg         : @background-color-base;\n@btn-disable-border     : @border-color-base;\n\n@btn-padding-base       : 4px 15px;\n@btn-font-size-lg       : @font-size-lg;\n@btn-padding-lg         : 4px 15px 5px 15px;\n@btn-padding-sm         : 1px 7px;\n\n@btn-circle-size        : 28px;\n@btn-circle-size-lg     : 32px;\n@btn-circle-size-sm     : 22px;\n\n// Media queries breakpoints\n// Extra small screen / phone\n@screen-xs              : 480px;\n@screen-xs-min          : @screen-xs;\n@screen-xs-max          : (@screen-xs-min - 1);\n\n// Small screen / tablet\n@screen-sm              : 768px;\n@screen-sm-min          : @screen-sm;\n@screen-sm-max          : (@screen-sm-min - 1);\n\n// Medium screen / desktop\n@screen-md              : 992px;\n@screen-md-min          : @screen-md;\n@screen-md-max          : (@screen-md-min - 1);\n\n// Large screen / wide desktop\n@screen-lg              : 1200px;\n@screen-lg-min          : @screen-lg;\n@screen-lg-max          : (@screen-lg-min - 1);\n\n// Layout and Grid system\n@grid-columns           : 24;\n@grid-gutter-width      : 0;\n\n// z-index list\n@zindex-affix           : 10;\n@zindex-back-top        : 10;\n@zindex-modal-mask      : 1000;\n@zindex-modal           : 1000;\n@zindex-notification    : 1010;\n@zindex-message         : 1010;\n@zindex-popover         : 1030;\n@zindex-picker          : 1050;\n@zindex-dropdown        : 1050;\n@zindex-tooltip         : 1060;\n\n// Animation\n@animation-duration-slow: .3s; // Modal\n@animation-duration-base: .2s;\n@animation-duration-fast: .1s; // Tooltip\n\n// Form\n// ---\n@label-required-color        : @highlight-color;\n@label-color                 : @text-color;\n@form-item-margin-bottom     : 24px;\n\n// Input\n// ---\n@input-height-base           : 28px;\n@input-height-lg             : 32px;\n@input-height-sm             : 22px;\n@input-padding-horizontal    : 7px;\n@input-padding-vertical-base : 4px;\n@input-padding-vertical-sm   : 1px;\n@input-padding-vertical-lg   : 6px;\n@input-placeholder-color     : #ccc;\n@input-color                 : @text-color;\n@input-border-color          : @border-color-base;\n@input-bg                    : #fff;\n@input-hover-border-color    : @primary-color;\n@input-disabled-bg           : @background-color-base;\n\n// Tooltip\n// ---\n//* Tooltip max width\n@tooltip-max-width: 250px;\n//** Tooltip text color\n@tooltip-color: #fff;\n//** Tooltip background color\n@tooltip-bg: rgba(64, 64, 64, .85);\n//** Tooltip arrow width\n@tooltip-arrow-width: 5px;\n//** Tooltip distance with trigger\n@tooltip-distance: @tooltip-arrow-width - 1 + 4;\n//** Tooltip arrow color\n@tooltip-arrow-color: @tooltip-bg;\n\n// Popover\n// ---\n//** Popover body background color\n@popover-bg: #fff;\n//** Popover maximum width\n@popover-min-width: 177px;\n//** Popover arrow width\n@popover-arrow-width: 4px;\n//** Popover arrow color\n@popover-arrow-color: @popover-bg;\n//** Popover outer arrow width\n@popover-arrow-outer-width: (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color: fadeout(@border-color-base, 30%);\n\n// Progress\n// --\n@process-default-color: @primary-color;\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/themes/default.less\n **/"",""@keyframes loadingCircle {\n  0% {\n    transform-origin: 50% 50%;\n    transform: rotate(0deg);\n  }\n  100% {\n    transform-origin: 50% 50%;\n    transform: rotate(360deg);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/other.less\n **/"","".slide-motion(@className, @keyframeName) {\n  .make-motion(@className, @keyframeName);\n  .@{className}-enter,\n  .@{className}-appear {\n    opacity: 0;\n    animation-timing-function: @ease-out-quint;\n  }\n  .@{className}-leave {\n    animation-timing-function: @ease-in-quint;\n  }\n}\n\n.slide-motion(slide-up, antSlideUp);\n.slide-motion(slide-down, antSlideDown);\n.slide-motion(slide-left, antSlideLeft);\n.slide-motion(slide-right, antSlideRight);\n\n@keyframes antSlideUpIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleY(.8);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleY(1);\n  }\n}\n\n@keyframes antSlideUpOut {\n  0% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleY(.8);\n  }\n}\n\n@keyframes antSlideDownIn {\n  0% {\n    opacity: 0;\n    transform-origin: 100% 100%;\n    transform: scaleY(.8);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 100% 100%;\n    transform: scaleY(1);\n  }\n}\n\n@keyframes antSlideDownOut {\n  0% {\n    opacity: 1;\n    transform-origin: 100% 100%;\n    transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 100% 100%;\n    transform: scaleY(.8);\n  }\n}\n\n@keyframes antSlideLeftIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleX(.8);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleX(1);\n  }\n}\n\n@keyframes antSlideLeftOut {\n  0% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleX(.8);\n  }\n}\n\n@keyframes antSlideRightIn {\n  0% {\n    opacity: 0;\n    transform-origin: 100% 0%;\n    transform: scaleX(.8);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 100% 0%;\n    transform: scaleX(1);\n  }\n}\n\n@keyframes antSlideRightOut {\n  0% {\n    opacity: 1;\n    transform-origin: 100% 0%;\n    transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 100% 0%;\n    transform: scaleX(.8);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/slide.less\n **/"","".swing-motion(@className, @keyframeName) {\n  .@{className}-enter,\n  .@{className}-appear {\n    .motion-common();\n    animation-play-state: paused;\n  }\n  .@{className}-enter.@{className}-enter-active,\n  .@{className}-appear.@{className}-appear-active {\n    animation-name: ~\""@{keyframeName}In\"";\n    animation-play-state: running;\n  }\n}\n\n.swing-motion(swing, antSwing);\n\n@keyframes antSwingIn {\n  0%,\n  100% {\n    transform: translateX(0px);\n  }\n  20% {\n    transform: translateX(-10px);\n  }\n  40% {\n    transform: translateX(10px);\n  }\n  60% {\n    transform: translateX(-5px);\n  }\n  80% {\n    transform: translateX(5px);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/swing.less\n **/"","".zoom-motion(@className, @keyframeName, @duration: @animation-duration-base) {\n  .make-motion(@className, @keyframeName, @duration);\n  .@{className}-enter,\n  .@{className}-appear {\n    transform: scale(0); // need this by yiminghe\n    animation-timing-function: @ease-out-circ;\n  }\n  .@{className}-leave {\n    animation-timing-function: @ease-in-out-circ;\n  }\n}\n\n// For Modal, Select choosen item\n.zoom-motion(zoom, antZoom);\n// For Popover, Popconfirm, Dropdown\n.zoom-motion(zoom-big, antZoomBig);\n// For Tooltip\n.zoom-motion(zoom-big-fast, antZoomBig, @animation-duration-fast);\n\n.zoom-motion(zoom-up, antZoomUp);\n.zoom-motion(zoom-down, antZoomDown);\n.zoom-motion(zoom-left, antZoomLeft);\n.zoom-motion(zoom-right, antZoomRight);\n\n@keyframes antZoomIn {\n  0% {\n    opacity: 0;\n    transform: scale(0.2);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomOut {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(0.2);\n  }\n}\n\n@keyframes antZoomBigIn {\n  0% {\n    opacity: 0;\n    transform: scale(.8);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomBigOut {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(.8);\n  }\n}\n\n@keyframes antZoomUpIn {\n  0% {\n    opacity: 0;\n    transform-origin: 50% 0%;\n    transform: scale(.8);\n  }\n  100% {\n    transform-origin: 50% 0%;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomUpOut {\n  0% {\n    transform-origin: 50% 0%;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 50% 0%;\n    transform: scale(.8);\n  }\n}\n\n@keyframes antZoomLeftIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0% 50%;\n    transform: scale(.8);\n  }\n  100% {\n    transform-origin: 0% 50%;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomLeftOut {\n  0% {\n    transform-origin: 0% 50%;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 0% 50%;\n    transform: scale(.8);\n  }\n}\n\n@keyframes antZoomRightIn {\n  0% {\n    opacity: 0;\n    transform-origin: 100% 50%;\n    transform: scale(.8);\n  }\n  100% {\n    transform-origin: 100% 50%;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomRightOut {\n  0% {\n    transform-origin: 100% 50%;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 100% 50%;\n    transform: scale(.8);\n  }\n}\n\n@keyframes antZoomDownIn {\n  0% {\n    opacity: 0;\n    transform-origin: 50% 100%;\n    transform: scale(.8);\n  }\n  100% {\n    transform-origin: 50% 100%;\n    transform: scale(1);\n  }\n}\n\n@keyframes antZoomDownOut {\n  0% {\n    transform-origin: 50% 100%;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 50% 100%;\n    transform: scale(.8);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion/zoom.less\n **/"",""@import \""../mixins/motion\"";\n@import \""motion/fade\"";\n@import \""motion/move\"";\n@import \""motion/other\"";\n@import \""motion/slide\"";\n@import \""motion/swing\"";\n@import \""motion/zoom\"";\n\n// For common/openAnimation\n.ant-motion-collapse {\n  overflow: hidden;\n  &-active {\n    transition: height .2s @ease-out;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/core/motion.less\n **/"",""@import \""../../style/themes/default\"";\n\n.@{ant-prefix}-affix {\n  position: fixed;\n  z-index: @zindex-affix;\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/affix/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@alert-prefix-cls: ~\""@{ant-prefix}-alert\"";\n\n.@{alert-prefix-cls} {\n  position: relative;\n  padding: 8px 48px 8px 38px;\n  border-radius: @border-radius-base;\n  color: @text-color;\n  font-size: @font-size-base;\n  line-height: 16px;\n  margin-bottom: 10px;\n\n  &&-no-icon {\n    padding: 8px 48px 8px 16px;\n  }\n\n  &-icon {\n    font-size: @font-size-lg;\n    top: 9.5px;\n    left: 16px;\n    position: absolute;\n  }\n\n  &-description {\n    font-size: @font-size-base;\n    line-height: 21px;\n    display: none;\n  }\n\n  &-success {\n    border: 1px solid tint(@success-color, 80%);\n    background-color: tint(@success-color, 90%);\n    .@{alert-prefix-cls}-icon {\n      color: @success-color;\n    }\n  }\n\n  &-info {\n    border: 1px solid tint(@primary-color, 80%);\n    background-color: tint(@primary-color, 90%);\n    .@{alert-prefix-cls}-icon {\n      color: @primary-color;\n    }\n  }\n\n  &-warning {\n    border: 1px solid tint(@warning-color, 80%);\n    background-color: tint(@warning-color, 90%);\n    .@{alert-prefix-cls}-icon {\n      color: @warning-color;\n    }\n  }\n\n  &-error {\n    border: 1px solid tint(@error-color, 80%);\n    background-color: tint(@error-color, 90%);\n    .@{alert-prefix-cls}-icon {\n      color: @error-color;\n    }\n  }\n\n  &-close-icon {\n    font-size: @font-size-base;\n    position: absolute;\n    right: 16px;\n    top: 10px;\n    height: 12px;\n    line-height: 12px;\n    overflow: hidden;\n    cursor: pointer;\n\n    .@{iconfont-css-prefix}-cross {\n      color: @text-color-secondary;\n      transition: color .3s ease;\n      &:hover {\n        color: #404040;\n      }\n    }\n  }\n\n  &-close-text {\n    position: absolute;\n    right: 16px;\n  }\n\n  &-with-description {\n    padding: 16px 16px 16px 60px;\n    position: relative;\n    border-radius: @border-radius-base;\n    margin-bottom: 10px;\n    color: @text-color;\n    line-height: 1.5;\n  }\n\n  &-with-description&-no-icon {\n    padding: 16px;\n  }\n\n  &-with-description &-icon {\n    position: absolute;\n    top: 16px;\n    left: 20px;\n    font-size: 24px;\n  }\n\n  &-with-description &-close-icon {\n    position: absolute;\n    top: 16px;\n    right: 16px;\n    cursor: pointer;\n    font-size: @font-size-base;\n  }\n\n  &-with-description &-message {\n    font-size: @font-size-lg;\n    color: @heading-color;\n    display: block;\n    margin-bottom: 4px;\n  }\n\n  &-with-description &-description {\n    display: block;\n  }\n\n  &&-close {\n    height: 0 !important;\n    margin: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    transition: all .3s @ease-in-out-circ;\n    transform-origin: 50% 0;\n  }\n\n  &-slide-up-leave {\n    animation: antAlertSlideUpOut .3s @ease-in-out-circ;\n    animation-fill-mode: both;\n  }\n\n  &-banner {\n    border-radius: 0;\n    border: 0;\n    margin-bottom: 0;\n  }\n}\n\n@keyframes antAlertSlideUpIn {\n  0% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleY(0);\n  }\n  100% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleY(1);\n  }\n}\n\n@keyframes antAlertSlideUpOut {\n  0% {\n    opacity: 1;\n    transform-origin: 0% 0%;\n    transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    transform-origin: 0% 0%;\n    transform: scaleY(0);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/alert/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n.@{ant-prefix} {\n  &-anchor {\n    position: relative;\n    &-wrapper {\n      background-color: white;\n    }\n\n    &-ink {\n      position: absolute;\n      height: 100%;\n      left: 0;\n      top: 0;\n      &:before {\n        content: ' ';\n        position: relative;\n        width: 2px;\n        height: 100%;\n        display: block;\n        background-color: @border-color-split;\n        margin: 0 auto;\n      }\n      &-ball {\n        display: none;\n        position: absolute;\n        width: 9px;\n        height: 9px;\n        border-radius: 9px;\n        border: 3px solid @primary-color;\n        background-color: white;\n        left: 50%;\n        transition: top .3s ease-in-out;\n        transform: translateX(-50%);\n        &.visible {\n          display: inline-block;\n        }\n      }\n    }\n\n    &.fixed &-ink &-ink-ball {\n      display: none;\n    }\n  }\n\n  &-anchor-link {\n    padding: 8px 0 8px 18px;\n    line-height: 1;\n\n    & & {\n      padding-top: 6px;\n      padding-bottom: 6px;\n    }\n\n    &-title {\n      display: block;\n      position: relative;\n      transition: all .3s;\n      color: @text-color;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      margin-bottom: 8px;\n    }\n\n    &-title:only-child {\n      margin-bottom: 0;\n    }\n\n    &-active > &-title {\n      color: @primary-color;\n    }\n\n    & > & {\n      font-size: @font-size-base;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/anchor/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n\n@select-prefix-cls: ~\""@{ant-prefix}-select\"";\n\n.selection__clear() {\n  display: inline-block;\n  font-style: normal;\n  vertical-align: baseline;\n  text-align: center;\n  text-transform: none;\n  text-rendering: auto;\n  opacity: 0;\n  position: absolute;\n  right: 8px;\n  z-index: 1;\n  background: #fff;\n  top: 50%;\n  font-size: @font-size-base;\n  color: #ccc;\n  width: 12px;\n  height: 12px;\n  margin-top: -6px;\n  line-height: 12px;\n  cursor: pointer;\n  transition: color 0.3s ease, opacity 0.15s ease;\n  &:before {\n    display: block;\n    .iconfont-font(\""\\e62e\"");\n  }\n  &:hover {\n    color: @text-color-secondary;\n  }\n}\n\n.@{select-prefix-cls} {\n  box-sizing: border-box;\n  display: inline-block;\n  position: relative;\n  color: @text-color;\n  font-size: @font-size-base;\n\n  > ul > li > a {\n    padding: 0;\n    background-color: #fff;\n  }\n\n  // arrow\n  &-arrow {\n    .iconfont-mixin();\n    position: absolute;\n    top: 50%;\n    right: 8px;\n    line-height: 1;\n    margin-top: -6px;\n    .iconfont-size-under-12px(9px);\n\n    * {\n      display: none;\n    }\n\n    &:before {\n      content: '\\e61d';\n      transition: transform 0.2s ease;\n    }\n  }\n\n  &-selection {\n    outline: none;\n    user-select: none;\n\n    box-sizing: border-box;\n    display: block;\n\n    background-color: #fff;\n    border-radius: @border-radius-base;\n    border: 1px solid @border-color-base;\n    transition: all .3s @ease-in-out;\n\n    &:hover {\n      .hover;\n    }\n\n    .@{select-prefix-cls}-focused &,\n    &:focus,\n    &:active {\n      .active;\n    }\n\n    &__clear {\n      .selection__clear();\n    }\n\n    &:hover &__clear {\n      opacity: 1;\n    }\n\n    &-selected-value {\n      float: left;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      max-width: 100%;\n      padding-right: 14px;\n    }\n  }\n\n  &-disabled {\n    color: #ccc;\n  }\n\n  &-disabled &-selection {\n    background: @background-color-base;\n    cursor: not-allowed;\n    &:hover,\n    &:focus,\n    &:active {\n      border-color: @border-color-base;\n      box-shadow: none;\n    }\n\n    &__clear {\n      display: none;\n      visibility: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &-disabled &-selection--multiple &-selection__choice {\n    background: #e9e9e9;\n    color: #aaa;\n    padding-right: 10px;\n    &__remove {\n      display: none;\n    }\n  }\n\n  &-selection--single {\n    height: 28px;\n    position: relative;\n    cursor: pointer;\n  }\n\n  &-selection__rendered {\n    display: block;\n    margin-left: 8px;\n    margin-right: 8px;\n    position: relative;\n    line-height: 26px;\n    // https://github.com/ant-design/ant-design/issues/3481#issuecomment-254721026\n    &:after {\n      content: '.';\n      visibility: hidden;\n      pointer-events: none;\n      display: inline-block;\n      width: 0;\n    }\n  }\n\n  &-lg {\n    .@{select-prefix-cls}-selection--single {\n      height: 32px;\n    }\n    .@{select-prefix-cls}-selection__rendered {\n      line-height: 30px;\n    }\n    .@{select-prefix-cls}-selection--multiple {\n      min-height: 32px;\n      .@{select-prefix-cls}-selection__rendered {\n        li {\n          height: 24px;\n          line-height: 24px;\n        }\n      }\n    }\n  }\n\n  &-sm {\n    .@{select-prefix-cls}-selection {\n      border-radius: @border-radius-sm;\n    }\n    .@{select-prefix-cls}-selection--single {\n      height: 22px;\n    }\n    .@{select-prefix-cls}-selection__rendered {\n      line-height: 20px;\n    }\n    .@{select-prefix-cls}-selection--multiple {\n      min-height: 22px;\n      .@{select-prefix-cls}-selection__rendered {\n        li {\n          height: 14px;\n          line-height: 14px;\n        }\n      }\n    }\n  }\n\n  &-disabled &-selection__choice__remove {\n    color: #ccc;\n    cursor: default;\n    &:hover {\n      color: #ccc;\n    }\n  }\n\n  &-search__field__wrap {\n    display: inline-block;\n    position: relative;\n  }\n\n  &-selection__placeholder,\n  &-search__field__placeholder { // for TreeSelect compatibility\n    position: absolute;\n    top: 50%;\n    left: 0;\n    right: 9px;\n    color: @input-placeholder-color;\n    line-height: 20px;\n    height: 20px;\n    max-width: 100%;\n    margin-top: -10px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  &-search__field__placeholder {\n    left: 8px;\n  }\n\n  &-search--inline {\n    position: absolute;\n    height: 100%;\n\n    .@{select-prefix-cls}-selection--multiple & {\n      float: left;\n      position: static;\n    }\n\n    .@{select-prefix-cls}-search__field__wrap {\n      width: 100%;\n      height: 100%;\n    }\n\n    .@{select-prefix-cls}-search__field {\n      border: 0;\n      font-size: 100%;\n      height: 100%;\n      width: 100%;\n      background: transparent;\n      outline: 0;\n      border-radius: @border-radius-base;\n    }\n\n    .@{select-prefix-cls}-search__field__mirror {\n      position: absolute;\n      top: 0;\n      left: -9999px;\n      white-space: pre;\n      pointer-events: none;\n    }\n\n    > i {\n      float: right;\n    }\n  }\n\n  &-selection--multiple {\n    min-height: 28px;\n    cursor: text;\n    padding-bottom: 3px;\n    .clearfix;\n\n    .@{select-prefix-cls}-search--inline {\n      width: auto;\n      padding: 0;\n      .@{select-prefix-cls}-search__field {\n        width: 0.75em;\n      }\n    }\n\n    .@{select-prefix-cls}-selection__rendered {\n      margin-left: 5px;\n      margin-bottom: -3px;\n      height: auto;\n    }\n\n    > ul > li,\n    .@{select-prefix-cls}-selection__rendered > ul > li {  // for tree-select\n      margin-top: 3px;\n      height: 20px;\n      line-height: 20px;\n    }\n\n    .@{select-prefix-cls}-selection__choice {\n      background-color: #f3f3f3;\n      border-radius: 4px;\n      cursor: default;\n      float: left;\n      padding: 0 16px;\n      margin-right: 4px;\n      max-width: 99%;\n      position: relative;\n      overflow: hidden;\n      transition: padding .3s @ease-in-out;\n      padding: 0 20px 0 10px;\n      &__disabled {\n        padding: 0 10px;\n      }\n    }\n\n    .@{select-prefix-cls}-selection__choice__content {\n      display: inline-block;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      max-width: 100%;\n      transition: margin .3s @ease-in-out;\n    }\n\n    .@{select-prefix-cls}-selection__choice__remove {\n      .iconfont-mixin();\n      color: @text-color-secondary;\n      line-height: inherit;\n      cursor: pointer;\n      display: inline-block;\n      font-weight: bold;\n      transition: all 0.3s @ease-in-out;\n      .iconfont-size-under-12px(8px);\n      position: absolute;\n      right: 4px;\n      padding: 0 0 0 8px;\n      &:hover {\n        color: #404040;\n      }\n      &:before {\n        content: \""\\e633\"";\n      }\n    }\n  }\n\n  &-open {\n    .@{select-prefix-cls}-arrow {\n      .ie-rotate(2);\n      -ms-transform: rotate(180deg);\n      &:before {\n        transform: rotate(180deg);\n      }\n    }\n    .@{select-prefix-cls}-selection {\n      .active();\n    }\n  }\n\n  &-combobox {\n    .@{select-prefix-cls}-arrow {\n      display: none;\n    }\n    .@{select-prefix-cls}-search--inline {\n      height: 100%;\n      width: 100%;\n      float: none;\n    }\n    .@{select-prefix-cls}-search__field__wrap {\n      width: 100%;\n      height: 100%;\n    }\n    .@{select-prefix-cls}-search__field {\n      width: 100%;\n      height: 100%;\n      position: relative;\n      z-index: 1;\n      transition: all .3s @ease-in-out;\n      box-shadow: none;\n    }\n  }\n}\n\n.@{select-prefix-cls}-dropdown {\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft {\n    animation-name: antSlideUpIn;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-topLeft {\n    animation-name: antSlideDownIn;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft {\n    animation-name: antSlideUpOut;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-topLeft {\n    animation-name: antSlideDownOut;\n  }\n\n  &-hidden {\n    display: none;\n  }\n\n  background-color: white;\n  box-shadow: @box-shadow-base;\n  border-radius: @border-radius-base;\n  box-sizing: border-box;\n  z-index: @zindex-dropdown;\n  left: -9999px;\n  top: -9999px;\n  position: absolute;\n  outline: none;\n  overflow: hidden;\n  font-size: @font-size-base;\n\n  &-menu {\n    outline: none;\n    margin-bottom: 0;\n    padding-left: 0; // Override default ul/ol\n    list-style: none;\n    max-height: 250px;\n    overflow: auto;\n\n    &-item-group-list {\n      margin: 0;\n      padding: 0;\n\n      > .@{select-prefix-cls}-dropdown-menu-item {\n        padding-left: 24px;\n      }\n    }\n\n    &-item-group-title {\n      color: @text-color-secondary;\n      line-height: 1.5;\n      padding: 8px 16px;\n    }\n\n    &-item {\n      position: relative;\n      display: block;\n      padding: 7px 16px;\n      font-weight: normal;\n      color: @text-color;\n      white-space: nowrap;\n      cursor: pointer;\n      white-space: nowrap;\n      overflow: hidden;\n      transition: background 0.3s ease;\n\n      &:hover,\n      &-active {\n        background-color: tint(@primary-color, 90%);\n      }\n\n      &-disabled {\n        color: #ccc;\n        cursor: not-allowed;\n\n        &:hover {\n          color: #ccc;\n          background-color: #fff;\n          cursor: not-allowed;\n        }\n      }\n\n      &-selected {\n        &,\n        &:hover {\n          background-color: @background-color-base;\n          font-weight: bold;\n          color: @text-color;\n        }\n      }\n\n      &-divider {\n        height: 1px;\n        margin: 1px 0;\n        overflow: hidden;\n        background-color: #e5e5e5;\n        line-height: 0;\n      }\n    }\n  }\n\n  &&--multiple {\n    .@{select-prefix-cls}-dropdown-menu-item {\n      &:after {\n        .iconfont-font(\""\\e632\"");\n        color: transparent;\n        .iconfont-size-under-12px(10px);\n        transition: all 0.2s ease;\n        position: absolute;\n        top: 50%;\n        transform: translateY(-50%);\n        right: 16px;\n        font-weight: bold;\n        text-shadow: 0 0.1px 0, 0.1px 0 0, 0 -0.1px 0, -0.1px 0;\n      }\n\n      &:hover:after {\n        color: #ddd;\n      }\n\n      &-disabled:after {\n        display: none;\n      }\n\n      &-selected:after,\n      &-selected:hover:after {\n        color: @primary-color;\n        display: inline-block;\n      }\n    }\n  }\n\n  &-container-open,\n  &-open {\n    .@{select-prefix-cls}-dropdown {\n      display: block;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/select/style/index.less\n **/"",""// Compatibility for browsers.\n\n// rotate for ie8 and blow\n.ie-rotate(@rotation) {\n  -ms-filter: \""progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})\"";\n}\n\n// rotate for ie8 and blow\n// degrees unit\n.ie-rotate-via-degrees(@degrees) {\n  /* IE6-IE8 */\n  @radians: ~`parseInt(\""@{degrees}\"") * Math.PI * 2 / 360`;\n  @costheta: ~`Math.cos(\""@{radians}\"")`;\n  @sintheta: ~`Math.sin(\""@{radians}\"")`;\n  @negsintheta: ~`\""@{sintheta}\"" * -1`;\n  -ms-filter: \""progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=@{costheta}, M12=@{negsintheta}, M21=@{sintheta}, M22=@{costheta})\"";\n  zoom: 1;\n\n  :root & {\n    filter: none;\n  }\n}\n\n// support rotate for all browsers\n.cross-rotate(@degrees) {\n  .rotate(@degrees);\n  .ie-rotate-via-degrees(@degrees);\n}\n\n// Placeholder text\n.placeholder(@color: @input-placeholder-color) {\n  // Firefox\n  &::-moz-placeholder {\n    color: @color;\n    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n  }\n  // Internet Explorer 10+\n  &:-ms-input-placeholder {\n    color: @color;\n  }\n  // Safari and Chrome\n  &::-webkit-input-placeholder {\n    color: @color;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/compatibility.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n// size mixins for input\n.input-lg() {\n  padding: @input-padding-vertical-lg @input-padding-horizontal;\n  height: @input-height-lg;\n}\n\n.input-sm() {\n  padding: @input-padding-vertical-sm @input-padding-horizontal;\n  height: @input-height-sm;\n  border-radius: @border-radius-sm;\n}\n\n// input status\n// == when focus or actived\n.active(@color: @outline-color) {\n  border-color: tint(@color, 20%);\n  outline: 0;\n  box-shadow: 0 0 @outline-blur-size @outline-width fade(@color, 20%);\n}\n\n// == when hoverd\n.hover(@color: @input-hover-border-color) {\n  border-color: tint(@color, 20%);\n}\n\n.disabled() {\n  background-color: @input-disabled-bg;\n  opacity: 1;\n  cursor: not-allowed;\n  color: #ccc;\n  &:hover {\n    .hover(@input-border-color);\n  }\n}\n\n// Basic style for input\n.input() {\n  position: relative;\n  display: inline-block;\n  padding: @input-padding-vertical-base @input-padding-horizontal;\n  width: 100%;\n  height: @input-height-base;\n  cursor: text;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none;\n  border: 1px solid @input-border-color;\n  border-radius: @border-radius-base;\n  .placeholder(); // Reset placeholder\n  transition: border .2s @ease-in-out, background .2s @ease-in-out, box-shadow .2s @ease-in-out;\n\n  &:hover {\n    .hover();\n  }\n\n  &:focus {\n    .active();\n  }\n\n  &[disabled] {\n    .disabled();\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    max-width: 100%; // prevent textearea resize from coming out of its container\n    height: auto;\n    vertical-align: bottom;\n  }\n\n  // Size\n  &-lg {\n    .input-lg();\n  }\n\n  &-sm {\n    .input-sm();\n  }\n}\n\n// Input with icons, you can define @height if you wish to change the input size\n.input-with-icon(@height: @input-height-base) {\n  position: relative;\n\n  .@{iconfont-css-prefix} {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    z-index: 2;\n    .square(@height);\n    font-size: @font-size-lg;\n    line-height: @height;\n    text-align: center;\n    pointer-events: none;\n  }\n}\n\n// label input\n.input-group(@inputClass) {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n  width: 100%;\n\n  // Undo padding and float of grid classes\n  &[class*=\""col-\""] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  > [class*=\""col-\""] {\n    padding-right: 8px;\n  }\n\n  &-addon,\n  &-wrap,\n  > .@{inputClass} {\n    display: table-cell;\n\n    &:not(:first-child):not(:last-child) {\n      border-radius: 0;\n    }\n  }\n\n  &-addon,\n  &-wrap {\n    width: 1px; // To make addon/wrap as small as possible\n    white-space: nowrap;\n    vertical-align: middle;\n  }\n\n  &-wrap > * {\n    display: block !important;\n  }\n\n  .@{inputClass} {\n    position: relative;\n    z-index: 2;\n    float: left;\n    width: 100%;\n    margin-bottom: 0;\n  }\n\n  &-addon {\n    padding: @input-padding-vertical-base @input-padding-horizontal;\n    font-size: @font-size-base;\n    font-weight: normal;\n    line-height: 1;\n    color: @input-color;\n    text-align: center;\n    background-color: #eee;\n    border: 1px solid @input-border-color;\n    border-radius: @border-radius-base;\n    position: relative;\n\n    // Reset Select's style in addon\n    .@{ant-prefix}-select {\n      margin: -(@input-padding-vertical-base + 1) (-@input-padding-horizontal);  // lesshint spaceAroundOperator: false\n\n      .@{ant-prefix}-select-selection {\n        background-color: inherit;\n        border: 0;\n        margin: -1px;\n        border: 1px solid transparent;\n        box-shadow: none;\n      }\n\n      &-open,\n      &-focused {\n        .@{ant-prefix}-select-selection {\n          color: @primary-color;\n        }\n      }\n    }\n\n    // Expand addon icon click area\n    // https://github.com/ant-design/ant-design/issues/3714\n    > i:only-child:after {\n      position: absolute;\n      content: '';\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n    }\n  }\n\n  // Reset rounded corners\n  > span > .@{inputClass}:first-child,\n  > .@{inputClass}:first-child,\n  &-addon:first-child {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0;\n\n    // Reset Select's style in addon\n    .@{ant-prefix}-select .@{ant-prefix}-select-selection {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0;\n    }\n  }\n\n  &-addon:first-child {\n    border-right: 0;\n  }\n  &-addon:last-child {\n    border-left: 0;\n  }\n\n  > .@{inputClass}:last-child,\n  &-addon:last-child {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n\n    // Reset Select's style in addon\n    .@{ant-prefix}-select .@{ant-prefix}-select-selection {\n      border-bottom-left-radius: 0;\n      border-top-left-radius: 0;\n    }\n  }\n\n  // Sizing options\n  &-lg .@{inputClass},\n  &-lg > &-addon {\n    .input-lg();\n  }\n\n  &-sm .@{inputClass},\n  &-sm > &-addon {\n    .input-sm();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/input/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../button/style/mixin\"";\n@import \""./mixin\"";\n\n.@{ant-prefix}-input-search-wrapper {\n  display: inline-block;\n  position: relative;\n\n  .@{ant-prefix}-input-search {\n    transition: all .3s ease;\n    &-icon {\n      position: absolute;\n      right: 8px;\n      cursor: pointer;\n      transition: all .3s ease;\n      font-size: 14px;\n      height: 20px;\n      line-height: 20px;\n      top: 50%;\n      margin-top: -10px;\n      &:hover {\n        color: @input-hover-border-color;\n      }\n    }\n  }\n\n  &:hover .@{ant-prefix}-input-search:not[disabled] {\n    border: 1px solid @input-hover-border-color;\n  }\n}\n\n// code blow is keeped for compatibility\n// do not delete until 3.x\n.@{ant-prefix}-search-input-wrapper {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.@{ant-prefix}-search-input {\n  &.@{ant-prefix}-input-group .@{ant-prefix}-input:first-child,\n  &.@{ant-prefix}-input-group .@{ant-prefix}-select:first-child {\n    border-radius: @border-radius-base;\n    position: absolute;\n    top: -1px;\n    width: 100%;\n  }\n\n  &.@{ant-prefix}-input-group .@{ant-prefix}-input:first-child {\n    padding-right: 36px;\n  }\n\n  .@{ant-prefix}-search-btn {\n    .btn-default;\n    border-radius: 0 @border-radius-base - 1 @border-radius-base - 1 0;\n    left: -1px;\n    position: relative;\n    border-width: 0 0 0 1px;\n    z-index: 2;\n    padding-left: 8px;\n    padding-right: 8px;\n    &:hover {\n      border-color: @border-color-base;\n    }\n  }\n  &&-focus .@{ant-prefix}-search-btn-noempty,\n  &:hover .@{ant-prefix}-search-btn-noempty {\n    .btn-primary;\n  }\n  .@{ant-prefix}-select-combobox {\n    .@{ant-prefix}-select-selection__rendered {\n      margin-right: 29px;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/input/style/search-input.less\n **/"",""// mixins for button\n// ------------------------\n.button-size(@padding; @font-size; @border-radius) {\n  padding: @padding;\n  font-size: @font-size;\n  border-radius: @border-radius;\n}\n\n.button-disabled() {\n  &.disabled,\n  &[disabled] {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      .button-color(@btn-disable-color; @btn-disable-bg; @btn-disable-border);\n    }\n  }\n}\n\n.button-variant-primary(@color; @background) {\n  .button-color(@color; @background; @background);\n\n  &:hover,\n  &:focus {\n    .button-color(@color; tint(@background, 20%); tint(@background, 20%));\n  }\n\n  &:active,\n  &.active {\n    .button-color(@color; shade(@background, 5%); shade(@background, 5%));\n  }\n\n  .button-disabled();\n}\n\n.button-variant-other(@color; @background; @border) {\n  .button-color(@color; @background; @border);\n\n  &:hover,\n  &:focus {\n    .button-color(tint(@primary-color, 20%); @background; tint(@primary-color, 20%));\n  }\n\n  &:active,\n  &.active {\n    .button-color(shade(@primary-color, 5%); @background; shade(@primary-color, 5%));\n  }\n\n  .button-disabled();\n}\n\n.button-color(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n  // a inside Button which only work in Chrome\n  // http://stackoverflow.com/a/17253457\n  > a:only-child {\n    color: currentColor;\n    &:after {\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n      background: transparent;\n    }\n  }\n}\n\n.button-group-base(@btnClassName) {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  > .@{btnClassName} {\n    position: relative;\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n  }\n\n  // size\n  &-lg > .@{btnClassName} {\n    .button-size(@btn-padding-lg; @btn-font-size-lg; @btn-border-radius-base);\n  }\n\n  &-sm > .@{btnClassName} {\n    .button-size(@btn-padding-sm; @font-size-base; @btn-border-radius-sm);\n    > .@{iconfont-css-prefix} {\n      font-size: @font-size-base;\n    }\n  }\n}\n\n// Base styles of buttons\n// --------------------------------------------------\n.btn() {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: @btn-font-weight;\n  text-align: center;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  line-height: @line-height-base;\n  .button-size(@btn-padding-base; @font-size-base; @btn-border-radius-base);\n  user-select: none;\n  transition: all .3s @ease-in-out;\n  position: relative;\n\n  > .@{iconfont-css-prefix} {\n    line-height: 1;\n  }\n\n  &,\n  &:active,\n  &:focus {\n    outline: 0;\n  }\n\n  &:not([disabled]):hover {\n    text-decoration: none;\n  }\n\n  &:not([disabled]):active {\n    outline: 0;\n    transition: none;\n  }\n\n  &.disabled,\n  &[disabled] {\n    cursor: not-allowed;\n    > * {\n      pointer-events: none;\n    }\n  }\n\n  &-lg {\n    .button-size(@btn-padding-lg; @btn-font-size-lg; @btn-border-radius-base);\n  }\n\n  &-sm {\n    .button-size(@btn-padding-sm; @font-size-base; @btn-border-radius-sm);\n  }\n}\n\n// primary button style\n.btn-primary() {\n  .button-variant-primary(@btn-primary-color; @btn-primary-bg);\n}\n\n// default button style\n.btn-default() {\n  .button-variant-other(@btn-default-color; @btn-default-bg; @btn-default-border);\n  &:hover,\n  &:focus,\n  &:active,\n  &.active {\n    background: #fff;\n  }\n}\n\n// ghost button style\n.btn-ghost() {\n  .button-variant-other(@btn-ghost-color, @btn-ghost-bg, @btn-ghost-border);\n}\n\n// ghost button style\n.btn-dashed() {\n  .button-variant-other(@btn-ghost-color, @btn-ghost-bg, @btn-ghost-border);\n  border-style: dashed;\n}\n\n// circle button: the content only contains icon\n.btn-circle(@btnClassName: btn) {\n  .square(@btn-circle-size);\n  .button-size(0; @font-size-base + 2; 50%);\n\n  &.@{btnClassName}-lg {\n    .square(@btn-circle-size-lg);\n    .button-size(0; @btn-font-size-lg + 2; 50%);\n  }\n\n  &.@{btnClassName}-sm {\n    .square(@btn-circle-size-sm);\n    .button-size(0; @font-size-base; 50%);\n  }\n}\n\n// Horizontal button groups styl\n// --------------------------------------------------\n.btn-group(@btnClassName: btn) {\n  .button-group-base(@btnClassName);\n\n  .@{btnClassName} + .@{btnClassName},\n  .@{btnClassName} + &,\n  & + .@{btnClassName},\n  & + & {\n    margin-left: -1px;\n  }\n\n  .@{btnClassName}:not(:first-child):not(:last-child) {\n    border-radius: 0;\n    padding-left: 8px;\n    padding-right: 8px;\n  }\n\n  > .@{btnClassName}:first-child {\n    margin-left: 0;\n    &:not(:last-child) {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0;\n      padding-right: 8px;\n    }\n  }\n\n  > .@{btnClassName}:last-child:not(:first-child) {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n    padding-left: 8px;\n  }\n\n  & > & {\n    float: left;\n  }\n\n  & > &:not(:first-child):not(:last-child) > .@{btnClassName} {\n    border-radius: 0;\n  }\n\n  & > &:first-child:not(:last-child) {\n    > .@{btnClassName}:last-child {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0;\n      padding-right: 8px;\n    }\n  }\n\n  & > &:last-child:not(:first-child) > .@{btnClassName}:first-child {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n    padding-left: 8px;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/button/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""./mixin\"";\n@import \""./search-input\"";\n\n// Input styles\n.@{ant-prefix}-input {\n  .input;\n}\n\n//== Style for input-group: input with label, with button or dropdown...\n.@{ant-prefix}-input-group {\n  .input-group(~\""@{ant-prefix}-input\"");\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/input/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@backtop-prefix-cls: ~\""@{ant-prefix}-back-top\"";\n\n.@{backtop-prefix-cls} {\n  z-index: @zindex-back-top;\n  position: fixed;\n  right: 100px;\n  bottom: 50px;\n  height: 40px;\n  width: 40px;\n  cursor: pointer;\n\n  &-content {\n    height: 40px;\n    width: 40px;\n    border-radius: 20px;\n    background-color: rgba(64, 64, 64, 0.4);\n    color: #fff;\n    text-align: center;\n    transition: all .3s @ease-in-out;\n\n    &:hover {\n      background-color: rgba(64, 64, 64, 0.6);\n      transition: all .3s @ease-in-out;\n    }\n  }\n\n  &-icon {\n    font-size: 20px;\n    margin-top: 10px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/back-top/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@badge-prefix-cls: ~\""@{ant-prefix}-badge\"";\n@number-prefix-cls: ~\""@{ant-prefix}-scroll-number\"";\n\n.@{badge-prefix-cls} {\n  position: relative;\n  display: inline-block;\n  line-height: 1;\n  vertical-align: middle;\n\n  &-count {\n    position: absolute;\n    transform: translateX(-50%);\n    top: -10px;\n    height: 20px;\n    border-radius: 10px;\n    min-width: 20px;\n    background: @highlight-color;\n    border: 1px solid transparent;\n    color: #fff;\n    line-height: 18px;\n    text-align: center;\n    padding: 0 6px;\n    font-size: @font-size-base;\n    white-space: nowrap;\n    transform-origin: -10% center;\n    font-family: tahoma;\n    box-shadow: 0 0 0 1px #fff;\n    a,\n    a:hover {\n      color: #fff;\n    }\n  }\n\n  &-dot {\n    position: absolute;\n    transform: translateX(-50%);\n    transform-origin: 0px center;\n    top: -4px;\n    height: 8px;\n    width: 8px;\n    border-radius: 100%;\n    background: @highlight-color;\n    z-index: 10;\n    box-shadow: 0 0 0 1px #fff;\n  }\n\n  &-status {\n    line-height: inherit;\n    vertical-align: baseline;\n\n    &-dot {\n      width: 8px;\n      height: 8px;\n      display: inline-block;\n      border-radius: 50%;\n    }\n    &-success {\n      background-color: @success-color;\n    }\n    &-processing {\n      background-color: @primary-color;\n      animation: antStatusProcessing 1.2s infinite ease-in-out;\n    }\n    &-default {\n      background-color: @normal-color;\n    }\n    &-error {\n      background-color: @error-color;\n    }\n    &-warning {\n      background-color: @warning-color;\n    }\n    &-text {\n      color: @text-color;\n      font-size: @font-size-base;\n      margin-left: 8px;\n    }\n  }\n\n  &-zoom-appear,\n  &-zoom-enter {\n    animation: antZoomBadgeIn .3s @ease-out-back;\n    animation-fill-mode: both;\n  }\n\n  &-zoom-leave {\n    animation: antZoomBadgeOut .3s @ease-in-back;\n    animation-fill-mode: both;\n  }\n\n  &-not-a-wrapper &-count {\n    top: auto;\n    display: block;\n    position: relative;\n    transform: none!important;\n  }\n}\n\n@keyframes antStatusProcessing {\n  0%,\n  100% {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0;\n  }\n}\n\n.@{number-prefix-cls} {\n  overflow: hidden;\n  &-only {\n    display: inline-block;\n    transition: transform .3s @ease-in-out;\n  }\n  // for IE8/9 display\n  &.not-support-css-animation &-only {\n    > p {\n      display: none;\n      &.current {\n        display: block;\n      }\n    }\n  }\n}\n\n@keyframes antZoomBadgeIn {\n  0% {\n    opacity: 0;\n    transform: scale(0) translateX(-50%);\n  }\n  100% {\n    transform: scale(1) translateX(-50%);\n  }\n}\n\n@keyframes antZoomBadgeOut {\n  0% {\n    transform: scale(1) translateX(-50%);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(0) translateX(-50%);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/badge/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@breadcrumb-prefix-cls: ~\""@{ant-prefix}-breadcrumb\"";\n\n.@{breadcrumb-prefix-cls} {\n  color: @text-color-secondary;\n  font-size: @font-size-base;\n\n  a {\n    color: @text-color;\n    transition: color .3s;\n    &:hover {\n      color: tint(@primary-color, 20%);\n    }\n  }\n\n  & > span:last-child {\n    font-weight: bold;\n    color: @text-color;\n  }\n\n  & > span:last-child &-separator {\n    display: none;\n  }\n\n  &-separator {\n    margin: 0 8px;\n    color: @border-color-base;\n  }\n\n  &-link {\n    > .@{iconfont-css-prefix} + span {\n      margin-left: 4px;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/breadcrumb/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""./mixin\"";\n\n@btn-prefix-cls: ~\""@{ant-prefix}-btn\"";\n\n// Button styles\n// -----------------------------\n.@{btn-prefix-cls} {\n  .btn;\n  .btn-default;\n\n  &-primary {\n    .btn-primary;\n\n    .@{btn-prefix-cls}-group &:not(:first-child):not(:last-child) {\n      border-right-color: @btn-group-border;\n      border-left-color: @btn-group-border;\n    }\n\n    .@{btn-prefix-cls}-group &:first-child {\n      &:not(:last-child) {\n        border-right-color: @btn-group-border;\n        &[disabled] {\n          border-right-color: @btn-default-border;\n        }\n      }\n    }\n\n    .@{btn-prefix-cls}-group &:last-child:not(:first-child),\n    .@{btn-prefix-cls}-group & + .@{btn-prefix-cls} {\n      border-left-color: @btn-group-border;\n      &[disabled] {\n        border-left-color: @btn-default-border;\n      }\n    }\n  }\n\n  &-ghost {\n    .btn-ghost;\n  }\n\n  &-dashed {\n    .btn-dashed;\n  }\n\n  &-circle,\n  &-circle-outline {\n    .btn-circle(@btn-prefix-cls);\n  }\n\n  &:before {\n    position: absolute;\n    top: -1px;\n    left: -1px;\n    bottom: -1px;\n    right: -1px;\n    background: #fff;\n    opacity: 0.35;\n    content: '';\n    border-radius: inherit;\n    z-index: 1;\n    transition: opacity .2s;\n    pointer-events: none;\n    display: none;\n  }\n\n  &&-loading {\n    padding-left: 29px;\n    pointer-events: none;\n    position: relative;\n    .@{iconfont-css-prefix} {\n      margin-left: -14px;\n      transition: all .3s @ease-in-out;\n    }\n    &:before {\n      display: block;\n    }\n  }\n\n  &-sm&-loading {\n    padding-left: 24px;\n    .@{iconfont-css-prefix} {\n      margin-left: -17px;\n    }\n  }\n\n  &-group {\n    .btn-group(@btn-prefix-cls);\n  }\n\n  &:not(&-circle):not(&-circle-outline)&-icon-only {\n    padding-left: 8px;\n    padding-right: 8px;\n  }\n\n  // To ensure that a space will be placed between character and `Icon`.\n  > .@{iconfont-css-prefix} + span,\n  > span + .@{iconfont-css-prefix} {\n    margin-left: 0.5em;\n  }\n\n  &-clicked:after {\n  \tcontent: '';\n  \tposition: absolute;\n  \ttop: -1px;\n  \tleft: -1px;\n  \tbottom: -1px;\n  \tright: -1px;\n  \tborder-radius: inherit;\n    border: 0 solid @primary-color;\n  \topacity: 0.4;\n    animation: buttonEffect 0.36s ease-out forwards;\n    display: block;\n  }\n}\n\n@keyframes buttonEffect {\n\tto {\n\t\topacity: 0;\n    top: -6px;\n  \tleft: -6px;\n  \tbottom: -6px;\n  \tright: -6px;\n    border-width: 6px;\n\t}\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/button/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@full-calendar-prefix-cls: ~\""@{ant-prefix}-fullcalendar\"";\n\n.@{full-calendar-prefix-cls} {\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  outline: none;\n  border-top: 1px solid @border-color-base;\n\n  &-month-select {\n    margin-left: 5px;\n  }\n\n  &-header {\n    padding: 11px 16px 11px 0;\n    text-align: right;\n\n    .@{ant-prefix}-select {\n      text-align: left;\n    }\n\n    .@{ant-prefix}-radio-group {\n      margin-left: 8px;\n      text-align: left;\n    }\n\n    label.@{ant-prefix}-radio-button {\n      height: 22px;\n      line-height: 20px;\n      padding: 0 10px;\n    }\n  }\n\n  &-date-panel {\n    position: relative;\n    outline: none;\n  }\n\n  &-calendar-body {\n    padding: 8px 8px 14px;\n  }\n\n  table {\n    border-collapse: collapse;\n    max-width: 100%;\n    background-color: transparent;\n    width: 100%;\n    height: 246px;\n  }\n\n  table,\n  th,\n  td {\n    border: 0;\n  }\n\n  td {\n    position: relative;\n  }\n\n  &-calendar-table {\n    border-spacing: 0;\n    margin-bottom: 0;\n  }\n\n  &-column-header {\n    line-height: 18px;\n    padding: 0;\n    width: 33px;\n    text-align: center;\n    .@{full-calendar-prefix-cls}-column-header-inner {\n      display: block;\n      font-weight: normal;\n    }\n  }\n\n  &-week-number-header {\n    .@{full-calendar-prefix-cls}-column-header-inner {\n      display: none;\n    }\n  }\n\n  &-month,\n  &-date {\n    text-align: center;\n  }\n\n  &-value {\n    display: block;\n    margin: 0 auto;\n    color: @text-color;\n    border-radius: 4px;\n    width: 22px;\n    height: 22px;\n    padding: 0;\n    background: transparent;\n    line-height: 22px;\n\n    &:hover {\n      background: tint(@primary-color, 90%);\n      cursor: pointer;\n    }\n  }\n\n  &-month-panel-cell &-value {\n    width: 48px;\n  }\n\n  &-today &-value,\n  &-month-panel-current-cell &-value {\n    background: @primary-color;\n    color: #fff;\n  }\n\n  &-disabled-cell &-value {\n    cursor: not-allowed;\n    color: #bcbcbc;\n    background: #f3f3f3;\n    border-radius: 0;\n    width: auto;\n\n    &:hover {\n      background: #f3f3f3;\n    }\n  }\n\n  &-disabled-cell-first-of-row &-value {\n    border-top-left-radius: 4px;\n    border-bottom-left-radius: 4px;\n  }\n\n  &-disabled-cell-last-of-row &-value {\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n  }\n\n  &-last-month-cell &-value,\n  &-next-month-btn-day &-value {\n    color: #ccc;\n  }\n\n  &-month-panel-table {\n    table-layout: fixed;\n    width: 100%;\n    border-collapse: separate;\n  }\n\n  &-content {\n    position: absolute;\n    width: 100%;\n    left: 0;\n    bottom: -9px;\n  }\n\n  &-fullscreen {\n    border-top: 0;\n  }\n\n  &-fullscreen &-table {\n    table-layout: fixed;\n  }\n\n  &-fullscreen &-header {\n    .@{ant-prefix}-radio-group {\n      margin-left: 16px;\n    }\n    label.@{ant-prefix}-radio-button {\n      height: 28px;\n      line-height: 26px;\n    }\n  }\n\n  &-fullscreen &-month,\n  &-fullscreen &-date {\n    text-align: left;\n    margin: 0 4px;\n    display: block;\n    color: @text-color;\n    height: 116px;\n    padding: 4px 8px;\n    border-top: 2px solid #eee;\n    transition: background 0.3s ease;\n\n    &:hover {\n      background: tint(@primary-color, 90%);\n      cursor: pointer;\n    }\n  }\n\n  &-fullscreen &-column-header {\n    text-align: right;\n    padding-right: 12px;\n    padding-bottom: 5px;\n  }\n\n  &-fullscreen &-value {\n    text-align: right;\n    background: transparent;\n    width: auto;\n  }\n\n  &-fullscreen &-today &-value {\n    color: @text-color;\n  }\n\n\n  &-fullscreen &-month-panel-current-cell &-month,\n  &-fullscreen &-today &-date {\n    border-top-color: @primary-color;\n    background-color: tint(@primary-color, 90%);\n    color: @primary-color;\n  }\n  &-fullscreen &-month-panel-current-cell &-value {\n    color: @primary-color;\n  }\n  &-fullscreen &-last-month-cell &-date,\n  &-fullscreen &-next-month-btn-day &-date {\n    color: #ccc;\n  }\n\n  &-fullscreen &-content {\n    height: 90px;\n    overflow-y: auto;\n    position: static;\n    width: auto;\n    left: auto;\n    bottom: auto;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/calendar/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@radio-prefix-cls: ~\""@{ant-prefix}-radio\"";\n@radio-group-prefix-cls: ~\""@{radio-prefix-cls}-group\"";\n@radio-inner-prefix-cls: ~\""@{radio-prefix-cls}-inner\"";\n@radio-duration: .3s;\n\n.@{radio-group-prefix-cls} {\n  display: inline-block;\n  font-size: @font-size-base;\n}\n\n// 一般状态\n.@{radio-prefix-cls}-wrapper {\n  font-size: @font-size-base;\n  vertical-align: middle;\n  display: inline-block;\n  position: relative;\n  white-space: nowrap;\n  margin-right: 8px;\n  cursor: pointer;\n}\n\n.@{radio-prefix-cls} {\n  white-space: nowrap;\n  outline: none;\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n  vertical-align: middle;\n  cursor: pointer;\n  .@{radio-prefix-cls}-wrapper:hover &,\n  &:hover,\n  &-focused {\n    .@{radio-inner-prefix-cls} {\n      border-color: @primary-color;\n    }\n  }\n  &-inner {\n    &:after {\n      position: absolute;\n      width: 6px;\n      height: 6px;\n      left: 3px;\n      top: 3px;\n      border-radius: @border-radius-base;\n      display: table;\n      border-top: 0;\n      border-left: 0;\n      content: ' ';\n      background-color: @primary-color;\n      opacity: 0;\n      transform: scale(0);\n      transition: all @radio-duration @ease-in-out-circ;\n    }\n\n    position: relative;\n    top: 0;\n    left: 0;\n    display: inline-block;\n    width: 14px;\n    height: 14px;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 14px;\n    border-color: @border-color-base;\n    background-color: #fff;\n    transition: all @radio-duration;\n  }\n\n  &-input {\n    position: absolute;\n    left: 0;\n    z-index: 1;\n    cursor: pointer;\n    opacity: 0;\n    top: 0;\n    bottom: 0;\n    right: 0;\n  }\n}\n\n// 选中状态\n.@{radio-prefix-cls}-checked {\n  .@{radio-inner-prefix-cls} {\n    border-color: @primary-color;\n    &:after {\n      transform: scale(1);\n      opacity: 1;\n      transition: all @radio-duration @ease-in-out-circ;\n    }\n  }\n}\n\n.@{radio-prefix-cls}-disabled {\n  .@{radio-inner-prefix-cls} {\n    border-color: @border-color-base!important;\n    background-color: #f3f3f3;\n    &:after {\n      background-color: #cccccc;\n    }\n  }\n\n  & + span {\n    color: #ccc;\n    cursor: not-allowed;\n  }\n}\n\nspan.@{radio-prefix-cls} + * {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n\n.@{radio-prefix-cls}-button-wrapper {\n  margin: 0;\n  height: 28px;\n  line-height: 26px;\n  color: @btn-default-color;\n  display: inline-block;\n  transition: all 0.3s ease;\n  cursor: pointer;\n  border: 1px solid @border-color-base;\n  border-left: 0;\n  background: #fff;\n  padding: 0 16px;\n\n  a {\n    color: @btn-default-color;\n  }\n\n  > .@{radio-prefix-cls}-button {\n    margin-left: 0;\n    display: block;\n    width: 0;\n    height: 0;\n  }\n\n  .@{radio-group-prefix-cls}-large & {\n    height: 32px;\n    line-height: 30px;\n  }\n\n  .@{radio-group-prefix-cls}-small & {\n    height: 22px;\n    line-height: 20px;\n    padding: 0 12px;\n    &:first-child {\n      border-radius: @border-radius-sm 0 0 @border-radius-sm;\n    }\n    &:last-child {\n      border-radius: 0 @border-radius-sm @border-radius-sm 0;\n    }\n  }\n\n  &:first-child {\n    border-radius: @border-radius-base 0 0 @border-radius-base;\n    border-left: 1px solid @border-color-base;\n  }\n\n  &:last-child {\n    border-radius: 0 @border-radius-base @border-radius-base 0;\n  }\n\n  &:first-child:last-child {\n    border-radius: @border-radius-base;\n  }\n\n  &:hover,\n  &-focused {\n    color: @primary-color;\n    position: relative;\n  }\n\n  .@{radio-prefix-cls}-inner,\n  input[type=\""checkbox\""],\n  input[type=\""radio\""] {\n    .opacity(0);\n    width: 0;\n    height: 0;\n  }\n\n  &-checked {\n    background: #fff;\n    border-color: @primary-color;\n    color: @primary-color;\n    box-shadow: -1px 0 0 0 @primary-color;\n\n    &:first-child {\n      border-color: @primary-color;\n      box-shadow: none!important;\n    }\n\n    &:hover {\n      border-color: tint(@primary-color, 20%);\n      box-shadow: -1px 0 0 0 tint(@primary-color, 20%);\n      color: tint(@primary-color, 20%);\n    }\n\n    &:active {\n      border-color: shade(@primary-color, 5%);\n      box-shadow: -1px 0 0 0 shade(@primary-color, 5%);\n      color: shade(@primary-color, 5%);\n    }\n  }\n\n  &-disabled {\n    border-color: @border-color-base;\n    background-color: @background-color-base;\n    cursor: not-allowed;\n    color: #ccc;\n\n    &:first-child,\n    &:hover {\n      border-color: @border-color-base;\n      background-color: @background-color-base;\n      color: #ccc;\n    }\n    &:first-child {\n      border-left-color: @border-color-base;\n    }\n  }\n\n  &-disabled&-checked {\n    color: #fff;\n    background-color: #e6e6e6;\n    border-color: @border-color-base;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/radio/style/index.less\n **/"",""// Opacity\n\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\""alpha(opacity=@{opacity-ie})\"";\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/style/mixins/opacity.less\n **/"",""@import \""../../style/themes/default\"";\n\n@card-prefix-cls: ~\""@{ant-prefix}-card\"";\n\n.@{card-prefix-cls} {\n  background: #fff;\n  border-radius: @border-radius-sm;\n  font-size: @font-size-base;\n  position: relative;\n  overflow: hidden;\n  transition: all .3s;\n\n  &:hover {\n    box-shadow: @box-shadow-base;\n    border-color: transparent;\n    z-index: 1;\n  }\n\n  &-bordered {\n    border: 1px solid @border-color-split;\n  }\n\n  &-head {\n    height: 48px;\n    line-height: 48px;\n    border-bottom: 1px solid @border-color-split;\n    padding: 0 24px;\n\n    &-title {\n      font-size: @font-size-lg;\n      display: inline-block;\n      text-overflow: ellipsis;\n      width: 100%;\n      overflow: hidden;\n      white-space: nowrap;\n    }\n  }\n\n  &-extra {\n    position: absolute;\n    right: 24px;\n    top: 14px;\n  }\n\n  &-body {\n    padding: 24px;\n  }\n\n  &-loading &-body {\n    letter-spacing: -2px;\n    color: #eee;\n    font-size: 0.75rem;\n  }\n\n  &-loading &-body p {\n    word-break: break-all;\n    line-height: 10px;\n    margin: 5px 0 0;\n    height: 10px;\n    border-radius: @border-radius-base;\n    overflow: hidden;\n    display: inline-block;\n    user-select: none;\n    color: #f3f5f8;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/card/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n.@{ant-prefix}-carousel {\n  .slick-slider {\n    position: relative;\n    display: block;\n    box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    -webkit-touch-callout: none;\n    user-select: none;\n    -ms-touch-action: pan-y;\n    touch-action: pan-y;\n    -webkit-tap-highlight-color: transparent;\n  }\n  .slick-list {\n    position: relative;\n    overflow: hidden;\n    display: block;\n    margin: 0;\n    padding: 0;\n\n    &:focus {\n      outline: none;\n    }\n\n    &.dragging {\n      cursor: pointer;\n      cursor: hand;\n    }\n  }\n  .slick-slider .slick-track,\n  .slick-slider .slick-list {\n    transform: translate3d(0, 0, 0);\n  }\n\n  .slick-track {\n    position: relative;\n    left: 0;\n    top: 0;\n    display: block;\n\n    &:before,\n    &:after {\n      content: \""\"";\n      display: table;\n    }\n\n    &:after {\n      clear: both;\n    }\n\n    .slick-loading & {\n      visibility: hidden;\n    }\n  }\n  .slick-slide {\n    float: left;\n    height: 100%;\n    min-height: 1px;\n    [dir=\""rtl\""] & {\n      float: right;\n    }\n    img {\n      display: block;\n    }\n    &.slick-loading img {\n      display: none;\n    }\n\n    display: none;\n\n    &.dragging img {\n      pointer-events: none;\n    }\n  }\n\n  .slick-initialized .slick-slide {\n    display: block;\n  }\n\n  .slick-loading .slick-slide {\n    visibility: hidden;\n  }\n\n  .slick-vertical .slick-slide {\n    display: block;\n    height: auto;\n    border: 1px solid transparent;\n  }\n  .slick-arrow.slick-hidden {\n    display: none;\n  }\n\n  // Arrows\n  .slick-prev,\n  .slick-next {\n    position: absolute;\n    display: block;\n    height: 20px;\n    width: 20px;\n    line-height: 0;\n    font-size: 0;\n    cursor: pointer;\n    background: transparent;\n    color: transparent;\n    top: 50%;\n    margin-top: -10px;\n    padding: 0;\n    border: 0;\n    outline: none;\n    &:hover,\n    &:focus {\n      outline: none;\n      background: transparent;\n      color: transparent;\n      &:before {\n        opacity: 1;\n      }\n    }\n    &.slick-disabled:before {\n      opacity: 0.25;\n    }\n  }\n\n  .slick-prev {\n    left: -25px;\n    &:before {\n      content: \""←\"";\n    }\n  }\n\n  .slick-next {\n    right: -25px;\n    &:before {\n      content: \""→\"";\n    }\n  }\n\n  // Dots\n  .slick-dots {\n    position: absolute;\n    bottom: 6px;\n    list-style: none;\n    display: block;\n    text-align: center;\n    padding: 0;\n    width: 100%;\n    li {\n      position: relative;\n      display: inline-block;\n      height: 20px;\n      width: 20px;\n      line-height: 20px;\n      text-align: center;\n      margin: 0 2px;\n      padding: 0;\n      button {\n        border: 0;\n        cursor: pointer;\n        background: #000;\n        opacity: 0.3;\n        display: inline-block;\n        width: 7px;\n        height: 7px;\n        border-radius: 7px;\n        outline: none;\n        font-size: 0;\n        color: transparent;\n        cursor: pointer;\n        transition: all .3s;\n        &:hover,\n        &:focus {\n          opacity: 0.75;\n        }\n      }\n      &.slick-active button {\n        background: #fff;\n        opacity: 1;\n        box-shadow: 0 0 3px rgba(0, 0, 0, .25);\n        &:hover,\n        &:focus {\n          opacity: 1;\n        }\n      }\n    }\n  }\n}\n\n.@{ant-prefix}-carousel-vertical {\n  .slick-dots {\n    width: 20px;\n    bottom: auto;\n    right: 8px;\n    top: 50%;\n    transform: translateY(-50%);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/carousel/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@cascader-prefix-cls: ~\""@{ant-prefix}-cascader\"";\n\n.@{cascader-prefix-cls} {\n  font-size: @font-size-base;\n  &-input.@{ant-prefix}-input {\n    background-color: transparent;\n    display: block;\n    cursor: pointer;\n    width: 100%;\n    z-index: 1;\n  }\n  &-picker {\n    position: relative;\n    display: inline-block;\n    cursor: pointer;\n    vertical-align: middle;\n    font-size: @font-size-base;\n    background-color: #fff;\n    border-radius: @border-radius-base;\n\n    &-with-value &-label {\n      color: transparent;\n    }\n\n    &-disabled {\n      cursor: not-allowed;\n\n      .@{cascader-prefix-cls}-input {\n        cursor: not-allowed;\n      }\n    }\n\n    &-label {\n      position: absolute;\n      left: 0;\n      height: 20px;\n      line-height: 20px;\n      top: 50%;\n      margin-top: -10px;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n      overflow: hidden;\n      width: 100%;\n      padding: 0 12px 0 8px;\n    }\n\n    &-clear {\n      opacity: 0;\n      position: absolute;\n      right: 8px;\n      z-index: 2;\n      background: #fff;\n      top: 50%;\n      font-size: @font-size-base;\n      color: #ccc;\n      width: 12px;\n      height: 12px;\n      margin-top: -6px;\n      line-height: 12px;\n      cursor: pointer;\n      transition: color 0.3s ease, opacity 0.15s ease;\n      &:hover {\n        color: @text-color-secondary;\n      }\n    }\n\n    &:hover &-clear {\n      opacity: 1;\n    }\n\n    // arrow\n    &-arrow {\n      position: absolute;\n      z-index: 1;\n      top: 50%;\n      right: 8px;\n      width: 12px;\n      height: 12px;\n      margin-top: -6px;\n      line-height: 12px;\n      color: @text-color-secondary;\n      .iconfont-size-under-12px(9px);\n      &:before {\n        transition: transform 0.2s ease;\n      }\n      &&-expand {\n        .ie-rotate(2);\n        &:before {\n          transform: rotate(180deg);\n        }\n      }\n    }\n  }\n  &-menus {\n    font-size: @font-size-base;\n    background: #fff;\n    position: absolute;\n    z-index: @zindex-dropdown;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n    white-space: nowrap;\n    &-empty,\n    &-hidden {\n      display: none;\n    }\n    &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n    &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft {\n      animation-name: antSlideUpIn;\n    }\n\n    &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n    &.slide-up-appear.slide-up-appear-active&-placement-topLeft {\n      animation-name: antSlideDownIn;\n    }\n\n    &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft {\n      animation-name: antSlideUpOut;\n    }\n\n    &.slide-up-leave.slide-up-leave-active&-placement-topLeft {\n      animation-name: antSlideDownOut;\n    }\n  }\n  &-menu {\n    display: inline-block;\n    vertical-align: top;\n    min-width: 111px;\n    height: 180px;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    border-right: 1px solid @border-color-split;\n    overflow: auto;\n    &:first-child {\n      border-radius: @border-radius-base 0 0 @border-radius-base;\n    }\n    &:last-child {\n      border-right-color: transparent;\n      margin-right: -1px;\n      border-radius: 0 @border-radius-base @border-radius-base 0;\n    }\n    &:only-child {\n      border-radius: @border-radius-base;\n    }\n  }\n  &-menu-item {\n    padding: 7px 26px 7px 16px;\n    cursor: pointer;\n    white-space: nowrap;\n    transition: all 0.3s ease;\n    &:hover {\n      background: tint(@primary-color, 90%);\n    }\n    &-disabled {\n      cursor: not-allowed;\n      color: #ccc;\n      &:hover {\n        background: transparent;\n      }\n    }\n    &-active:not(&-disabled) {\n      &,\n      &:hover {\n        background-color: @background-color-base;\n        font-weight: bold;\n      }\n    }\n    &-expand {\n      position: relative;\n      &:after {\n        .iconfont-font(\""\\e61f\"");\n        .iconfont-size-under-12px(8px);\n        color: @text-color-secondary;\n        position: absolute;\n        right: 15px;\n      }\n    }\n\n    & &-keyword {\n      color: @highlight-color;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/cascader/style/index.less\n **/"",""@import \""../../style/mixins/index\"";\n\n.antCheckboxFn(@checkbox-prefix-cls: ~\""@{ant-prefix}-checkbox\"") {\n  @checkbox-inner-prefix-cls: ~\""@{checkbox-prefix-cls}-inner\"";\n  // 一般状态\n  .@{checkbox-prefix-cls} {\n    white-space: nowrap;\n    cursor: pointer;\n    outline: none;\n    display: inline-block;\n    line-height: 1;\n    position: relative;\n    vertical-align: middle;\n\n    .@{checkbox-prefix-cls}-wrapper:hover &,\n    &:hover,\n    &-focused {\n      .@{checkbox-inner-prefix-cls} {\n        border-color: @primary-color;\n      }\n    }\n\n    &-inner {\n      position: relative;\n      top: 0;\n      left: 0;\n      display: inline-block;\n      width: 14px;\n      height: 14px;\n      border: 1px solid @border-color-base;\n      border-radius: 3px;\n      background-color: #fff;\n      transition: all .3s;\n\n      &:after {\n        transform: rotate(45deg) scale(0);\n        position: absolute;\n        left: 4px;\n        top: 1px;\n        display: table;\n        width: 5px;\n        height: 8px;\n        border: 2px solid #fff;\n        border-top: 0;\n        border-left: 0;\n        content: ' ';\n        transition: all .1s @ease-in-back;\n      }\n    }\n\n    &-input {\n      position: absolute;\n      left: 0;\n      z-index: 1;\n      cursor: pointer;\n      .opacity(0);\n      top: 0;\n      bottom: 0;\n      right: 0;\n      width: 100%;\n      height: 100%;\n    }\n  }\n\n  // 半选状态\n  .@{checkbox-prefix-cls}-indeterminate .@{checkbox-inner-prefix-cls}:after {\n    content: ' ';\n    transform: scale(1);\n    position: absolute;\n    left: 2px;\n    top: 5px;\n    width: 8px;\n    height: 1px;\n  }\n\n  // 选中状态\n  .@{checkbox-prefix-cls}-checked .@{checkbox-inner-prefix-cls}:after {\n    transform: rotate(45deg) scale(1);\n    position: absolute;\n    left: 4px;\n    top: 1px;\n    display: table;\n    width: 5px;\n    height: 8px;\n    border: 2px solid #fff;\n    border-top: 0;\n    border-left: 0;\n    content: ' ';\n    transition: all .2s @ease-out-back .1s;\n  }\n\n  .@{checkbox-prefix-cls}-checked,\n  .@{checkbox-prefix-cls}-indeterminate {\n    .@{checkbox-inner-prefix-cls} {\n      background-color: @primary-color;\n      border-color: @primary-color;\n    }\n  }\n\n  .@{checkbox-prefix-cls}-disabled {\n    &.@{checkbox-prefix-cls}-checked {\n      .@{checkbox-inner-prefix-cls}:after {\n        animation-name: none;\n        border-color: #ccc;\n      }\n    }\n\n    .@{checkbox-inner-prefix-cls} {\n      border-color: @border-color-base!important;\n      background-color: #f3f3f3;\n      &:after {\n        animation-name: none;\n        border-color: #f3f3f3;\n      }\n    }\n\n    & + span {\n      color: #ccc;\n      cursor: not-allowed;\n    }\n  }\n\n  .@{checkbox-prefix-cls}-wrapper {\n    cursor: pointer;\n    font-size: @font-size-base;\n    display: inline-block;\n    &:not(:last-child) {\n      margin-right: 8px;\n    }\n  }\n\n  .@{checkbox-prefix-cls}-wrapper + span,\n  .@{checkbox-prefix-cls} + span {\n    padding-left: 8px;\n    padding-right: 8px;\n  }\n\n  .@{checkbox-prefix-cls}-group {\n    font-size: @font-size-base;\n    &-item {\n      display: inline-block;\n    }\n  }\n\n  @ie8: \\0screen;\n\n  // IE8 hack for https://github.com/ant-design/ant-design/issues/2148\n  @media @ie8 {\n    .@{checkbox-prefix-cls}-checked .@{checkbox-prefix-cls}-inner:before,\n    .@{checkbox-prefix-cls}-checked .@{checkbox-prefix-cls}-inner:after {\n      .iconfont-font(\""\\e632\"");\n      font-weight: bold;\n      font-size: 8px;\n      border: 0;\n      color: #fff;\n      left: 2px;\n      top: 3px;\n      position: absolute;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/checkbox/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""./mixin\"";\n\n// Grid system\n.@{ant-prefix}-row {\n  .make-row();\n  display: block;\n}\n\n.@{ant-prefix}-row-flex {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n\n  &:before,\n  &:after {\n    display: flex;\n  }\n}\n\n// x轴原点\n.@{ant-prefix}-row-flex-start {\n  justify-content: flex-start;\n}\n\n// x轴居中\n.@{ant-prefix}-row-flex-center {\n  justify-content: center;\n}\n\n// x轴反方向\n.@{ant-prefix}-row-flex-end {\n  justify-content: flex-end;\n}\n\n// x轴平分\n.@{ant-prefix}-row-flex-space-between {\n  justify-content: space-between;\n}\n\n// x轴有间隔地平分\n.@{ant-prefix}-row-flex-space-around {\n  justify-content: space-around;\n}\n\n// 顶部对齐\n.@{ant-prefix}-row-flex-top {\n  align-items: flex-start;\n}\n\n// 居中对齐\n.@{ant-prefix}-row-flex-middle {\n  align-items: center;\n}\n\n// 底部对齐\n.@{ant-prefix}-row-flex-bottom {\n  align-items: flex-end;\n}\n\n.@{ant-prefix}-col {\n  position: relative;\n  display: block;\n}\n\n.make-grid-columns();\n.make-grid();\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(-xs);\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(-sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(-md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(-lg);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/grid/style/index.less\n **/"",""@import \""../../style/mixins/index\"";\n\n// mixins for grid system\n// ------------------------\n.make-row(@gutter: @grid-gutter-width) {\n  position: relative;\n  margin-left: (@gutter / -2);\n  margin-right: (@gutter / -2);\n  height: auto;\n  .clearfix;\n}\n\n.make-grid-columns() {\n  .col(@index) {\n    @item: ~\"".@{ant-prefix}-col-@{index}, .@{ant-prefix}-col-xs-@{index}, .@{ant-prefix}-col-sm-@{index}, .@{ant-prefix}-col-md-@{index}, .@{ant-prefix}-col-lg-@{index}\"";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) {\n    @item: ~\"".@{ant-prefix}-col-@{index}, .@{ant-prefix}-col-xs-@{index}, .@{ant-prefix}-col-sm-@{index}, .@{ant-prefix}-col-md-@{index}, .@{ant-prefix}-col-lg-@{index}\"";\n    .col((@index + 1), ~\""@{list}, @{item}\"");\n  }\n  .col(@index, @list) when (@index > @grid-columns) {\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      padding-left:  (@grid-gutter-width / 2);\n      padding-right: (@grid-gutter-width / 2);\n    }\n  }\n  .col(1);\n}\n\n.float-grid-columns(@class) {\n  .col(@index) { // initial\n    @item: ~\"".@{ant-prefix}-col@{class}-@{index}\"";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\"".@{ant-prefix}-col@{class}-@{index}\"";\n    .col((@index + 1), ~\""@{list}, @{item}\"");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n      flex: 0 0 auto;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n// lesshint false\n.loop-grid-columns(@index, @class) when (@index > 0) {\n  .@{ant-prefix}-col@{class}-@{index} {\n    display: block;\n    width: percentage((@index / @grid-columns));\n  }\n  .@{ant-prefix}-col@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n  .@{ant-prefix}-col@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n  .@{ant-prefix}-col@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n  .@{ant-prefix}-col@{class}-order-@{index} {\n    order: @index;\n  }\n  .loop-grid-columns((@index - 1), @class);\n}\n\n.loop-grid-columns(@index, @class) when (@index = 0) {\n  .@{ant-prefix}-col@{class}-@{index} {\n    display: none;\n  }\n  .@{ant-prefix}-col-push-@{index} {\n    left: auto;\n  }\n  .@{ant-prefix}-col-pull-@{index} {\n    right: auto;\n  }\n}\n\n.make-grid(@class: ~'') {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/grid/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@collapse-prefix-cls: ~\""@{ant-prefix}-collapse\"";\n\n.collapse-close() {\n  .iconfont-size-under-12px(7px, 270deg);\n}\n.collapse-open() {\n  .iconfont-size-under-12px(7px, 360deg);\n}\n\n.@{collapse-prefix-cls} {\n  background-color: @background-color-base;\n  border-radius: 3px;\n  border: 1px solid @border-color-base;\n\n  & > &-item {\n    border-top: 1px solid @border-color-base;\n    &:first-child {\n      border-top: 0;\n    }\n\n    > .@{collapse-prefix-cls}-header {\n      height: 38px;\n      line-height: 38px;\n      padding-left: 32px;\n      color: @text-color;\n      cursor: pointer;\n      position: relative;\n\n      .arrow {\n        .collapse-close();\n        .iconfont-mixin();\n        position: absolute;\n        color: @text-color;\n        display: inline-block;\n        margin-right: 8px;\n        line-height: 40px;\n        content: \""\\e606\"";\n        vertical-align: middle;\n        transition: transform 0.24s ease;\n        top: 0;\n        left: 16px;\n        top: ~\""16px \\9\"";\n        left: ~\""0 \\9\"";\n        &:before {\n          content: \""\\e606\"";\n        }\n      }\n    }\n  }\n\n  &-anim-active {\n    transition: height .2s @ease-out;\n  }\n\n  &-content {\n    overflow: hidden;\n    color: @text-color;\n    padding: 0 16px;\n    background-color: #fff;\n\n    & > &-box {\n      padding-top: 16px;\n      padding-bottom: 16px;\n    }\n\n    &-inactive {\n      display: none;\n    }\n  }\n\n  &-item:last-child {\n    > .@{collapse-prefix-cls}-content {\n      border-radius: 0 0 3px 3px;\n    }\n  }\n\n  & > &-item > &-header[aria-expanded=\""true\""] {\n    .arrow {\n      .collapse-open();\n    }\n  }\n\n  &-borderless {\n    background-color: #fff;\n    border: 0;\n  }\n\n  &-borderless > &-item {\n    border: 0;\n  }\n\n  &-borderless > &-item > &-header {\n    border-bottom: 1px solid @border-color-base;\n    transition: all .3s;\n    border-radius: @border-color-base @border-color-base 0 0;\n    &:hover {\n      background-color: #fcfcfc;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/collapse/style/index.less\n **/"","".@{calendar-prefix-cls}-picker-container {\n  position: absolute;\n  z-index: @zindex-picker;\n\n  &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n  &.slide-up-enter.slide-up-enter-active&-placement-topRight,\n  &.slide-up-appear.slide-up-appear-active&-placement-topLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-topRight {\n    animation-name: antSlideDownIn;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomRight,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomRight {\n    animation-name: antSlideUpIn;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-topLeft,\n  &.slide-up-leave.slide-up-leave-active&-placement-topRight {\n    animation-name: antSlideDownOut;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft,\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomRight {\n    animation-name: antSlideUpOut;\n  }\n}\n\n.@{calendar-prefix-cls}-picker {\n  position: relative;\n  display: inline-block;\n  outline: none;\n  font-size: @font-size-base;\n  transition: opacity 0.3s ease;\n\n  > input {\n    outline: none;\n  }\n  &-clear {\n    opacity: 0;\n    z-index: -1;\n    position: absolute;\n    right: 7px;\n    background: #fff;\n    top: 50%;\n    font-size: @font-size-base;\n    color: #ccc;\n    width: 14px;\n    height: 14px;\n    margin-top: -7px;\n    line-height: 14px;\n    cursor: pointer;\n    transition: color 0.3s ease, opacity 0.15s ease;\n    &:hover {\n      color: @text-color-secondary;\n    }\n  }\n\n  &:hover &-clear {\n    opacity: 1;\n    z-index: 1;\n  }\n  &-icon {\n    position: absolute;\n    user-select: none;\n    transition: all .3s @ease-in-out;\n    width: 12px;\n    height: 12px;\n    line-height: 12px;\n    right: 8px;\n    color: @text-color-secondary;\n    top: 50%;\n    margin-top: -6px;\n    &:after {\n      content: \""\\e6bb\"";\n      font-family: \""anticon\"";\n      font-size: @font-size-base;\n      color: @text-color-secondary;\n      display: inline-block;\n      line-height: 1;\n      vertical-align: bottom;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/Picker.less\n **/"","".calendarPanelHeader(@calendar-prefix-cls) {\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  user-select: none;\n  border-bottom: 1px solid @border-color-split;\n\n  a:hover {\n    color: @link-hover-color;\n  }\n\n  .@{calendar-prefix-cls}-century-select,\n  .@{calendar-prefix-cls}-decade-select,\n  .@{calendar-prefix-cls}-year-select,\n  .@{calendar-prefix-cls}-month-select {\n    padding: 0 2px;\n    font-weight: bold;\n    display: inline-block;\n    color: @text-color;\n    line-height: 34px;\n  }\n\n  .@{calendar-prefix-cls}-century-select-arrow,\n  .@{calendar-prefix-cls}-decade-select-arrow,\n  .@{calendar-prefix-cls}-year-select-arrow,\n  .@{calendar-prefix-cls}-month-select-arrow {\n    display: none;\n  }\n\n  .@{calendar-prefix-cls}-prev-century-btn,\n  .@{calendar-prefix-cls}-next-century-btn,\n  .@{calendar-prefix-cls}-prev-decade-btn,\n  .@{calendar-prefix-cls}-next-decade-btn,\n  .@{calendar-prefix-cls}-prev-month-btn,\n  .@{calendar-prefix-cls}-next-month-btn,\n  .@{calendar-prefix-cls}-prev-year-btn,\n  .@{calendar-prefix-cls}-next-year-btn {\n    position: absolute;\n    top: 0;\n    color: @text-color-secondary;\n    font-family: Arial, \""Hiragino Sans GB\"", \""Microsoft Yahei\"", \""Microsoft Sans Serif\"", sans-serif;\n    padding: 0 5px;\n    font-size: 16px;\n    display: inline-block;\n    line-height: 34px;\n  }\n\n  .@{calendar-prefix-cls}-prev-century-btn,\n  .@{calendar-prefix-cls}-prev-decade-btn,\n  .@{calendar-prefix-cls}-prev-year-btn {\n    left: 7px;\n\n    &:after {\n      content: '«';\n    }\n  }\n\n  .@{calendar-prefix-cls}-next-century-btn,\n  .@{calendar-prefix-cls}-next-decade-btn,\n  .@{calendar-prefix-cls}-next-year-btn {\n    right: 7px;\n\n    &:after {\n      content: '»';\n    }\n  }\n\n  .@{calendar-prefix-cls}-prev-month-btn {\n    left: 29px;\n\n    &:after {\n      content: '‹';\n    }\n  }\n\n  .@{calendar-prefix-cls}-next-month-btn {\n    right: 29px;\n\n    &:after {\n      content: '›';\n    }\n  }\n}\n\n.@{calendar-prefix-cls} {\n  position: relative;\n  outline: none;\n  width: 231px;\n  border: 1px solid #fff;\n  list-style: none;\n  font-size: @font-size-base;\n  text-align: left;\n  background-color: #fff;\n  border-radius: @border-radius-base;\n  box-shadow: @box-shadow-base;\n  background-clip: padding-box;\n  line-height: @line-height-base;\n\n  &-input-wrap {\n    height: 34px;\n    padding: 6px;\n    border-bottom: 1px solid @border-color-split;\n  }\n\n  &-input {\n    border: 0;\n    width: 100%;\n    cursor: auto;\n    outline: 0;\n    height: 22px;\n  }\n\n  &-week-number {\n    width: 286px;\n\n    &-cell {\n      text-align: center;\n    }\n  }\n\n  &-header {\n    .calendarPanelHeader(@calendar-prefix-cls);\n  }\n\n  &-body {\n    padding: 4px 8px;\n  }\n\n  table {\n    border-collapse: collapse;\n    max-width: 100%;\n    background-color: transparent;\n    width: 100%;\n  }\n\n  table,\n  th,\n  td {\n    border: 0;\n  }\n\n  &-calendar-table {\n    border-spacing: 0;\n    margin-bottom: 0;\n  }\n\n  &-column-header {\n    line-height: 18px;\n    width: 33px;\n    padding: 6px 0;\n    text-align: center;\n    .@{calendar-prefix-cls}-column-header-inner {\n      display: block;\n      font-weight: normal;\n    }\n  }\n\n  &-week-number-header {\n    .@{calendar-prefix-cls}-column-header-inner {\n      display: none;\n    }\n  }\n\n  &-cell {\n    padding: 4px 0;\n  }\n\n  &-date {\n    display: block;\n    margin: 0 auto;\n    color: @text-color;\n    border-radius: @border-radius-sm;\n    width: 20px;\n    height: 20px;\n    line-height: 18px;\n    border: 1px solid transparent;\n    padding: 0;\n    background: transparent;\n    text-align: center;\n    transition: background 0.3s ease;\n\n    &-panel {\n      position: relative;\n    }\n\n    &:hover {\n      background: tint(@primary-color, 90%);\n      cursor: pointer;\n    }\n\n    &:active {\n      color: #fff;\n      background: tint(@primary-color, 20%);\n    }\n  }\n\n  &-today &-date {\n    border-color: @primary-color;\n    font-weight: bold;\n    color: @primary-color;\n  }\n\n  &-last-month-cell &-date,\n  &-next-month-btn-day &-date {\n    color: #ccc;\n  }\n\n  &-selected-day &-date {\n    background: @primary-color;\n    color: #fff;\n    border: 1px solid transparent;\n\n    &:hover {\n      background: @primary-color;\n    }\n  }\n\n  &-disabled-cell &-date {\n    cursor: not-allowed;\n    color: #bcbcbc;\n    background: #f3f3f3;\n    border-radius: 0;\n    width: auto;\n    border: 1px solid transparent;\n\n    &:hover {\n      background: #f3f3f3;\n    }\n  }\n\n  &-disabled-cell-first-of-row &-date {\n    border-top-left-radius: 4px;\n    border-bottom-left-radius: 4px;\n  }\n\n  &-disabled-cell-last-of-row &-date {\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n  }\n\n  &-footer {\n    border-top: 1px solid @border-color-split;\n  }\n\n  &-footer-btn {\n    text-align: center;\n    display: block;\n    line-height: 38px;\n  }\n\n  &-footer > div {\n    display: inline-block;\n  }\n\n  .@{calendar-prefix-cls}-today-btn,\n  .@{calendar-prefix-cls}-clear-btn {\n    display: inline-block;\n    text-align: center;\n    margin: 0 0 0 8px;\n    &-disabled {\n      color: #ccc;\n      cursor: not-allowed;\n    }\n  }\n\n  .@{calendar-prefix-cls}-clear-btn {\n    display: none;\n    position: absolute;\n    right: 5px;\n    text-indent: -76px;\n    overflow: hidden;\n    width: 20px;\n    height: 20px;\n    text-align: center;\n    line-height: 20px;\n    top: 7px;\n    margin: 0;\n  }\n\n  .@{calendar-prefix-cls}-clear-btn:after {\n    .iconfont-font(\""\\e62e\"");\n    font-size: @font-size-base;\n    color: #ccc;\n    display: inline-block;\n    line-height: 1;\n    width: 20px;\n    text-indent: 43px;\n    transition: color 0.3s ease;\n  }\n\n  .@{calendar-prefix-cls}-clear-btn:hover:after {\n    color: @text-color-secondary;\n  }\n\n  .@{calendar-prefix-cls}-ok-btn {\n    .btn;\n    .btn-primary;\n    .button-size(@btn-padding-sm; @font-size-base; @border-radius-sm);\n    position: absolute;\n    bottom: 8px;\n    right: 9px;\n\n    &-disabled {\n      .button-color(@btn-disable-color; @btn-disable-bg; @btn-disable-border);\n      cursor: not-allowed;\n      &:hover {\n        .button-color(@btn-disable-color; @btn-disable-bg; @btn-disable-border);\n      }\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/Calendar.less\n **/"",""@input-box-height: 34px;\n\n.@{calendar-prefix-cls}-range-picker.@{ant-prefix}-input {\n  padding-right: 26px;\n}\n\n.@{calendar-prefix-cls}-range-picker-input {\n  background-color: transparent;\n  border: 0;\n  height: 18px;\n  line-height: 18px;\n  outline: 0;\n  width: 43%;\n  text-align: center;\n\n  &[disabled] {\n    cursor: not-allowed;\n  }\n}\n\n.@{calendar-prefix-cls}-range-picker-separator {\n  color: @text-color-secondary;\n}\n\n.@{calendar-prefix-cls}-range {\n  width: 470px;\n  overflow: hidden;\n\n  .@{calendar-prefix-cls}-date-panel {\n    &::after {\n      content: \"".\"";\n      display: block;\n      height: 0;\n      clear: both;\n      visibility: hidden;\n    }\n  }\n  &-part {\n    width: 50%;\n    position: relative;\n  }\n\n  &-left {\n    float: left;\n    .@{calendar-prefix-cls} {\n      &-time-picker-inner {\n        border-right: 2px solid @border-color-split;\n      }\n    }\n  }\n\n  &-right {\n    float: right;\n    .@{calendar-prefix-cls} {\n      &-time-picker-inner {\n        border-left: 2px solid @border-color-split;\n      }\n    }\n  }\n\n  &-middle {\n    position: absolute;\n    left: 50%;\n    width: 20px;\n    margin-left: -132px;\n    text-align: center;\n    height: @input-box-height;\n    line-height: @input-box-height;\n    color: @text-color-secondary;\n  }\n\n  &-right .@{calendar-prefix-cls}-date-input-wrap {\n    margin-left: -118px;\n  }\n\n  &.@{calendar-prefix-cls}-time &-middle {\n    margin-left: -12px;\n  }\n\n  &.@{calendar-prefix-cls}-time &-right .@{calendar-prefix-cls}-date-input-wrap {\n    margin-left: 0;\n  }\n\n  .@{calendar-prefix-cls}-input-wrap {\n    position: relative;\n    height: @input-box-height;\n  }\n\n  .@{calendar-prefix-cls}-input,\n  .@{calendar-timepicker-prefix-cls}-input {\n    .input;\n    border-radius: @border-radius-sm;\n    height: @input-height-sm;\n    border: 0;\n    box-shadow: none;\n\n    &:focus {\n      box-shadow: none;\n    }\n  }\n\n  .@{calendar-timepicker-prefix-cls}-icon {\n    display: none;\n  }\n\n  &.@{calendar-prefix-cls}-week-number {\n    width: 574px;\n\n    .@{calendar-prefix-cls}-range-part {\n      width: 286px;\n    }\n  }\n\n  .@{calendar-prefix-cls}-year-panel,\n  .@{calendar-prefix-cls}-month-panel {\n    top: @input-box-height;\n  }\n  .@{calendar-prefix-cls}-month-panel .@{calendar-prefix-cls}-year-panel {\n    top: 0;\n  }\n  .@{calendar-prefix-cls}-decade-panel-table,\n  .@{calendar-prefix-cls}-year-panel-table,\n  .@{calendar-prefix-cls}-month-panel-table {\n    height: 208px;\n  }\n\n  .@{calendar-prefix-cls}-in-range-cell {\n    border-radius: 0;\n    position: relative;\n    > div {\n      position: relative;\n      z-index: 1;\n    }\n    &:before {\n      content: '';\n      display: block;\n      background: tint(@primary-color, 90%);\n      border-radius: 0;\n      border: 0;\n      position: absolute;\n      top: 4px;\n      bottom: 4px;\n      left: 0;\n      right: 0;\n    }\n  }\n\n  &-bottom {\n    text-align: right;\n\n    .@{calendar-prefix-cls}-footer-btn {\n      padding-right: 16px;\n    }\n  }\n\n  div&-quick-selector {\n    display: block;\n    text-align: left;\n    border-bottom: 1px solid @border-color-split;\n    padding: 10.5px 10px;\n\n    > a {\n      margin-right: 16px;\n    }\n  }\n\n  .@{calendar-prefix-cls},\n  .@{calendar-prefix-cls}-month-panel,\n  .@{calendar-prefix-cls}-year-panel {\n    &-header {\n      border-bottom: 0;\n    }\n    &-body {\n      border-top: 1px solid @border-color-split;\n    }\n  }\n\n  &.@{calendar-prefix-cls}-time {\n    .@{calendar-timepicker-prefix-cls} {\n      height: 207px;\n      width: 100%;\n      top: 68px;\n      z-index: 2; // cover .ant-calendar-range .ant-calendar-in-range-cell > div (z-index: 1)\n      &-panel {\n        height: 241px;\n        margin-top: -34px;\n      }\n\n      &-inner {\n        padding-top: 34px;\n        height: 100%;\n        background: none;\n      }\n\n      &-combobox {\n        display: inline-block;\n        height: 100%;\n        background-color: white;\n        border-top: 1px solid @border-color-split;\n      }\n      &-select {\n        height: 100%;\n        ul {\n          max-height: 100%;\n        }\n      }\n    }\n    .@{calendar-prefix-cls}-footer-btn {\n      padding: 9px 12px 9px 0;\n      display: block;\n      .clearfix;\n    }\n    .@{calendar-prefix-cls}-ok-btn {\n      position: static;\n      height: 22px;\n    }\n    .@{calendar-prefix-cls}-footer .@{calendar-prefix-cls}-time-picker-btn {\n      margin-right: 12px;\n    }\n    .@{calendar-prefix-cls}-today-btn {\n      margin: 8px 12px;\n      height: 22px;\n      line-height: 22px;\n    }\n  }\n\n  &-with-ranges.@{calendar-prefix-cls}-time .@{calendar-timepicker-prefix-cls} {\n    height: 247px;\n    &-panel {\n      height: 281px;\n    }\n  }\n}\n\n.@{calendar-prefix-cls}-range.@{calendar-prefix-cls}-show-time-picker {\n  .@{calendar-prefix-cls}-body {\n    border-top-color: transparent;\n  }\n}\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/RangePicker.less\n **/"","".@{calendar-timepicker-prefix-cls} {\n  position: absolute;\n  width: 100%;\n  top: 34px;\n  background-color: #fff;\n  height: 206px;\n\n  &-panel {\n    z-index: @zindex-picker;\n    position: absolute;\n    width: 100%;\n  }\n\n  &-inner {\n    display: inline-block;\n    position: relative;\n    outline: none;\n    list-style: none;\n    font-size: @font-size-base;\n    text-align: left;\n    background-color: #fff;\n    background-clip: padding-box;\n    line-height: 1.5;\n    overflow: hidden;\n    width: 100%;\n  }\n  &-combobox {\n    width: 100%;\n  }\n\n  &-1-column,\n  &-1-column &-select {\n    width: 100%;\n  }\n  &-2-columns &-select {\n    width: 50%;\n  }\n  &-1-column &-select,\n  &-2-columns &-select {\n    li {\n      padding: 0;\n      text-align: center;\n    }\n  }\n\n  &-input-wrap {\n    display: none;\n  }\n\n  &-select {\n    float: left;\n    font-size: @font-size-base;\n    border: 1px solid @border-color-split;\n    border-width: 0 1px;\n    margin-left: -1px;\n    box-sizing: border-box;\n    width: 33.6%;\n    overflow: hidden;\n    position: relative; // Fix chrome weird render bug\n\n    &:hover {\n      overflow-y: auto;\n    }\n\n    &:first-child {\n      border-left: 0;\n      margin-left: 0;\n    }\n\n    &:last-child {\n      border-right: 0;\n    }\n\n    ul {\n      list-style: none;\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0;\n      width: 100%;\n      max-height: 206px;\n    }\n\n    li {\n      padding: 0 0 0 28px;\n      list-style: none;\n      box-sizing: content-box;\n      margin: 0;\n      width: 100%;\n      height: 24px;\n      line-height: 24px;\n      cursor: pointer;\n      user-select: none;\n      transition: background 0.3s ease;\n    }\n\n    li:last-child:after {\n      content: '';\n      height: 182px;\n      display: block;\n    }\n\n    li:hover {\n      background: tint(@primary-color, 90%);\n    }\n\n    li&-option-selected {\n      background: @background-color-base;\n      font-weight: bold;\n    }\n\n    li&-option-disabled {\n      color: @btn-disable-color;\n      &:hover {\n        background: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n}\n\n.@{calendar-prefix-cls}-time {\n  .@{calendar-prefix-cls}-day-select {\n    padding: 0 2px;\n    font-weight: bold;\n    display: inline-block;\n    color: @text-color;\n    line-height: 34px;\n  }\n\n  .@{calendar-prefix-cls}-footer {\n    border-top: 1px solid @border-color-split;\n    text-align: right;\n    position: relative;\n    height: auto;\n    line-height: auto;\n\n    &-btn {\n      padding: 10px 0;\n      line-height: 1.5;\n      text-align: right;\n    }\n\n    .@{calendar-prefix-cls}-today-btn {\n      float: left;\n      margin: 0;\n      padding-left: 12px;\n    }\n\n    .@{calendar-prefix-cls}-time-picker-btn {\n      display: inline-block;\n      text-align: center;\n      margin-right: 60px;\n\n      &-disabled {\n        color: #ccc;\n      }\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/TimePicker.less\n **/"","".@{calendar-prefix-cls}-month-panel {\n  left: 0;\n  top: 1px;\n  bottom: 0;\n  right: 0;\n  background: #fff;\n  z-index: 10;\n  position: absolute;\n  outline: none;\n  border-radius: @border-radius-base;\n}\n\n.@{calendar-prefix-cls}-month-panel-hidden {\n  display: none;\n}\n\n.@{calendar-prefix-cls}-month-panel-header {\n  .calendarPanelHeader(~\""@{calendar-prefix-cls}-month-panel\"");\n}\n\n.@{calendar-prefix-cls}-month-panel-table {\n  table-layout: fixed;\n  width: 100%;\n  height: 248px;\n  border-collapse: separate;\n}\n\n.@{calendar-prefix-cls}-month-panel-selected-cell .@{calendar-prefix-cls}-month-panel-month {\n  background: @primary-color;\n  color: #fff;\n\n  &:hover {\n    background: @primary-color;\n    color: #fff;\n  }\n}\n\n.@{calendar-prefix-cls}-month-panel-cell {\n  text-align: center;\n\n  &-disabled .@{calendar-prefix-cls}-month-panel-month {\n    &,\n    &:hover {\n      cursor: not-allowed;\n      color: #bcbcbc;\n      background: #f3f3f3;\n    }\n  }\n}\n\n.@{calendar-prefix-cls}-month-panel-month {\n  display: inline-block;\n  margin: 0 auto;\n  color: @text-color;\n  background: transparent;\n  text-align: center;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 6px;\n  border-radius: 4px;\n  transition: background 0.3s ease;\n\n  &:hover {\n    background: tint(@primary-color, 90%);\n    cursor: pointer;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/MonthPanel.less\n **/"","".@{calendar-prefix-cls}-year-panel {\n  left: 0;\n  top: 1px;\n  bottom: 0;\n  right: 0;\n  background: #fff;\n  z-index: 10;\n  position: absolute;\n  outline: none;\n  border-radius: @border-radius-base;\n}\n\n.@{calendar-prefix-cls}-year-panel-hidden {\n  display: none;\n}\n\n.@{calendar-prefix-cls}-year-panel-header {\n  .calendarPanelHeader(~\""@{calendar-prefix-cls}-year-panel\"");\n}\n\n.@{calendar-prefix-cls}-year-panel-table {\n  table-layout: fixed;\n  width: 100%;\n  height: 248px;\n  border-collapse: separate;\n}\n\n.@{calendar-prefix-cls}-year-panel-cell {\n  text-align: center;\n}\n\n.@{calendar-prefix-cls}-year-panel-year {\n  display: inline-block;\n  margin: 0 auto;\n  color: @text-color;\n  background: transparent;\n  text-align: center;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 6px;\n  border-radius: 4px;\n  transition: background 0.3s ease;\n\n  &:hover {\n    background: tint(@primary-color, 90%);\n    cursor: pointer;\n  }\n}\n\n.@{calendar-prefix-cls}-year-panel-selected-cell .@{calendar-prefix-cls}-year-panel-year {\n  background: @primary-color;\n  color: #fff;\n\n  &:hover {\n    background: @primary-color;\n    color: #fff;\n  }\n}\n\n.@{calendar-prefix-cls}-year-panel-last-decade-cell,\n.@{calendar-prefix-cls}-year-panel-next-decade-cell {\n  .@{calendar-prefix-cls}-year-panel-year {\n    user-select: none;\n  }\n  .@{calendar-prefix-cls}-year-panel-year:before {\n    content: \""\\e61f\"";\n    font-family: \""anticon\"" !important;\n  }\n}\n\n.@{calendar-prefix-cls}-year-panel-last-decade-cell {\n  .@{calendar-prefix-cls}-year-panel-year:before {\n    content: \""\\e620\"";\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/YearPanel.less\n **/"","".@{calendar-prefix-cls}-decade-panel {\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  background: #fff;\n  z-index: 10;\n  position: absolute;\n  outline: none;\n  border-radius: @border-radius-base;\n}\n\n.@{calendar-prefix-cls}-decade-panel-hidden {\n  display: none;\n}\n\n.@{calendar-prefix-cls}-decade-panel-header {\n  .calendarPanelHeader(~\""@{calendar-prefix-cls}-decade-panel\"");\n}\n\n.@{calendar-prefix-cls}-decade-panel-table {\n  table-layout: fixed;\n  width: 100%;\n  height: 248px;\n  border-collapse: separate;\n}\n\n.@{calendar-prefix-cls}-decade-panel-cell {\n  text-align: center;\n}\n\n.@{calendar-prefix-cls}-decade-panel-decade {\n  display: inline-block;\n  margin: 0 auto;\n  color: @text-color;\n  background: transparent;\n  text-align: center;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 6px;\n  border-radius: 4px;\n  transition: background 0.3s ease;\n\n  &:hover {\n    background: tint(@primary-color, 90%);\n    cursor: pointer;\n  }\n}\n\n.@{calendar-prefix-cls}-decade-panel-selected-cell .@{calendar-prefix-cls}-decade-panel-decade {\n  background: @primary-color;\n  color: #fff;\n\n  &:hover {\n    background: @primary-color;\n    color: #fff;\n  }\n}\n\n.@{calendar-prefix-cls}-decade-panel-last-century-cell,\n.@{calendar-prefix-cls}-decade-panel-next-century-cell {\n  .@{calendar-prefix-cls}-decade-panel-decade {\n    user-select: none;\n  }\n  .@{calendar-prefix-cls}-decade-panel-decade:before {\n    content: \""\\e61f\"";\n    font-family: \""anticon\"" !important;\n  }\n}\n\n.@{calendar-prefix-cls}-decade-panel-last-century-cell {\n  .@{calendar-prefix-cls}-decade-panel-decade:before {\n    content: \""\\e620\"";\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/DecadePanel.less\n **/"","".@{calendar-prefix-cls}-month {\n  .@{calendar-prefix-cls}-month-panel,\n  .@{calendar-prefix-cls}-year-panel {\n    top: 0;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/date-picker/style/MonthPicker.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n\n@timepicker-prefix-cls: ~\""@{ant-prefix}-time-picker\"";\n\n.@{timepicker-prefix-cls}-panel {\n  max-width: 168px;\n  z-index: @zindex-picker;\n  position: absolute;\n\n  &-inner {\n    display: inline-block;\n    position: relative;\n    outline: none;\n    list-style: none;\n    font-size: @font-size-base;\n    text-align: left;\n    background-color: #fff;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n    background-clip: padding-box;\n    line-height: 1.5;\n    overflow: hidden;\n    left: -2px;\n  }\n\n  &-input {\n    margin: 0;\n    padding: 0;\n    border: 0;\n    width: 100%;\n    cursor: auto;\n    line-height: 1.5;\n    outline: 0;\n\n    &-wrap {\n      box-sizing: border-box;\n      position: relative;\n      padding: 6px;\n      border-bottom: 1px solid @border-color-split;\n    }\n\n    &-invalid {\n      border-color: red;\n    }\n  }\n\n  &-clear-btn {\n    position: absolute;\n    right: 5px;\n    cursor: pointer;\n    overflow: hidden;\n    width: 20px;\n    height: 20px;\n    text-align: center;\n    line-height: 20px;\n    top: 5px;\n    margin: 0;\n  }\n\n  &-clear-btn:after {\n    font-size: @font-size-base;\n    color: #ccc;\n    display: inline-block;\n    line-height: 1;\n    width: 20px;\n    transition: color 0.3s ease;\n    .iconfont-font(\""\\e62e\"");\n  }\n\n  &-clear-btn:hover:after {\n    color: @text-color-secondary;\n  }\n\n  &-narrow &-input-wrap {\n    max-width: 111px;\n  }\n\n  &-select {\n    float: left;\n    font-size: @font-size-base;\n    border-left: 1px solid @border-color-split;\n    box-sizing: border-box;\n    width: 56px;\n    overflow: hidden;\n    position: relative; // Fix chrome weird render bug\n    max-height: 144px;\n\n    &:hover {\n      overflow-y: auto;\n    }\n\n    &:first-child {\n      border-left: 0;\n      margin-left: 0;\n    }\n\n    &:last-child {\n      border-right: 0;\n    }\n\n    &:only-child {\n      width: 100%;\n    }\n\n    ul {\n      list-style: none;\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0 0 120px 0;\n      width: 100%;\n    }\n\n    li {\n      list-style: none;\n      box-sizing: content-box;\n      margin: 0;\n      padding: 0 0 0 16px;\n      width: 100%;\n      height: 24px;\n      line-height: 24px;\n      text-align: left;\n      cursor: pointer;\n      user-select: none;\n      transition: background 0.3s ease;\n    }\n\n    li:hover {\n      background: tint(@primary-color, 90%);\n    }\n\n    li&-option-selected {\n      background: @background-color-base;\n      font-weight: bold;\n    }\n\n    li&-option-disabled {\n      color: @btn-disable-color;\n      &:hover {\n        background: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  &-combobox {\n    .clearfix;\n  }\n\n  &-addon {\n    padding: 8px;\n    border-top: 1px solid @border-color-split;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n  &.slide-up-enter.slide-up-enter-active&-placement-topRight,\n  &.slide-up-appear.slide-up-appear-active&-placement-topLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-topRight {\n    animation-name: antSlideDownIn;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomRight,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomRight {\n    animation-name: antSlideUpIn;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-topLeft,\n  &.slide-up-leave.slide-up-leave-active&-placement-topRight {\n    animation-name: antSlideDownOut;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft,\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomRight {\n    animation-name: antSlideUpOut;\n  }\n}\n\n.@{timepicker-prefix-cls} {\n  position: relative;\n  display: inline-block;\n  outline: none;\n  font-size: @font-size-base;\n  transition: opacity 0.3s ease;\n\n  &-input {\n    .input;\n    width: 100px;\n  }\n\n  &-large &-input {\n    .input-lg;\n  }\n\n  &-small &-input {\n    .input-sm;\n  }\n\n  &-open {\n    opacity: 0;\n  }\n\n  &-icon {\n    position: absolute;\n    user-select: none;\n    transition: all .3s @ease-in-out;\n    width: 12px;\n    height: 12px;\n    line-height: 12px;\n    right: 8px;\n    color: @text-color-secondary;\n    top: 50%;\n    margin-top: -6px;\n    &:after {\n      content: \""\\e641\"";\n      font-family: \""anticon\"";\n      font-size: @font-size-base;\n      color: @text-color-secondary;\n      display: inline-block;\n      line-height: 1;\n      vertical-align: bottom;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/time-picker/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@dropdown-prefix-cls: ~\""@{ant-prefix}-dropdown\"";\n\n.@{dropdown-prefix-cls} {\n  position: absolute;\n  left: -9999px;\n  top: -9999px;\n  z-index: @zindex-dropdown;\n  display: block;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1.5;\n\n  &-wrap {\n    position: relative;\n\n    .@{ant-prefix}-btn > .@{iconfont-css-prefix}-down {\n      .iconfont-size-under-12px(9px);\n    }\n\n    .@{iconfont-css-prefix}-down:before {\n      transition: transform 0.2s ease;\n    }\n  }\n\n  &-wrap-open {\n    .@{iconfont-css-prefix}-down:before {\n      transform: rotate(180deg);\n    }\n  }\n\n  &-hidden,\n  &-menu-hidden {\n    display: none;\n  }\n\n  &-menu {\n    outline: none;\n    position: relative;\n    list-style-type: none;\n    padding: 0;\n    margin: 0;\n    text-align: left;\n    background-color: #fff;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n    background-clip: padding-box;\n\n    &-item,\n    &-submenu-title {\n      padding: 7px 16px;\n      margin: 0;\n      clear: both;\n      font-size: @font-size-base;\n      font-weight: normal;\n      color: @text-color;\n      white-space: nowrap;\n      cursor: pointer;\n      transition: background 0.3s ease;\n\n      > a {\n        color: @text-color;\n        display: block;\n        padding: 7px 16px;\n        margin: -7px -16px;\n      }\n\n      &:hover {\n        background-color: tint(@primary-color, 90%);\n      }\n\n      &-disabled {\n        color: #ccc;\n        cursor: not-allowed;\n        pointer-events: none;\n\n        &:hover {\n          color: #ccc;\n          background-color: #fff;\n          cursor: not-allowed;\n        }\n      }\n\n      &:first-child {\n        border-radius: @border-radius-base @border-radius-base 0 0;\n      }\n\n      &:last-child {\n        border-radius: 0 0 @border-radius-base @border-radius-base;\n      }\n\n      &:only-child {\n        border-radius: @border-radius-base;\n      }\n\n      &-divider {\n        height: 1px;\n        overflow: hidden;\n        background-color: @border-color-split;\n        line-height: 0;\n      }\n    }\n\n    &-submenu-title:after {\n      font-family: \""anticon\"" !important;\n      position: absolute;\n      content: \""\\e61f\"";\n      right: 16px;\n      color: @text-color-secondary;\n      .iconfont-size-under-12px(9px);\n    }\n\n    &-submenu-vertical {\n      position: relative;\n    }\n\n    &-submenu-vertical > & {\n      top: 0;\n      left: 100%;\n      position: absolute;\n      min-width: 100%;\n      margin-left: 4px;\n      transform-origin: 0 0;\n    }\n\n    &-submenu:first-child &-submenu-title {\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n\n    &-submenu:last-child &-submenu-title {\n      border-radius: 0 0 @border-radius-base @border-radius-base;\n    }\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft {\n    animation-name: antSlideUpIn;\n  }\n\n  &.slide-up-enter.slide-up-enter-active&-placement-topLeft,\n  &.slide-up-appear.slide-up-appear-active&-placement-topLeft {\n    animation-name: antSlideDownIn;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft {\n    animation-name: antSlideUpOut;\n  }\n\n  &.slide-up-leave.slide-up-leave-active&-placement-topLeft {\n    animation-name: antSlideDownOut;\n  }\n}\n\n.@{dropdown-prefix-cls}-link {\n  font-size: @font-size-base;\n  .@{iconfont-css-prefix}-down {\n    .iconfont-size-under-12px(9px);\n  }\n}\n\n.@{dropdown-prefix-cls}-button {\n  &.@{ant-prefix}-btn-group > .@{ant-prefix}-btn:last-child:not(:first-child) {\n    padding-right: 7px;\n  }\n  .@{iconfont-css-prefix}-down {\n    .iconfont-size-under-12px(9px);\n  }\n}\n\n.ant-btn .anticon-down {\n  .iconfont-size-under-12px(9px);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/dropdown/style/index.less\n **/"",""@import \""../../input/style/mixin\"";\n\n.form-control-validation(@text-color: @input-color; @border-color: @input-border-color; @background-color: @input-bg) {\n  .@{ant-prefix}-form-explain,\n  .@{ant-prefix}-form-split {\n    color: @text-color;\n  }\n  // 输入框的不同校验状态\n  .@{ant-prefix}-input {\n    &,\n    &:hover {\n      border-color: @border-color;\n    }\n\n    &:focus {\n      .active(@border-color);\n    }\n\n    &:not([disabled]):hover {\n      border-color: @border-color;\n    }\n  }\n\n  .@{ant-prefix}-calendar-picker-open .@{ant-prefix}-calendar-picker-input {\n    .active(@border-color);\n  }\n\n  .@{ant-prefix}-input-group-addon {\n    color: @text-color;\n    border-color: @border-color;\n    background-color: @background-color;\n  }\n\n  .has-feedback {\n    color: @text-color;\n  }\n}\n\n// Reset form styles\n// -----------------------------\n// Based on Bootstrap framework\n.reset-form() {\n  fieldset {\n    padding: 0;\n    margin: 0;\n    border: 0;\n    min-width: 0;\n  }\n\n  legend {\n    display: block;\n    width: 100%;\n    padding: 0;\n    margin-bottom: 20px;\n    font-size: @font-size-lg;\n    line-height: inherit;\n    color: @text-color-secondary;\n    border: 0;\n    border-bottom: 1px solid @border-color-base;\n  }\n\n  label {\n    font-size: @font-size-base;\n  }\n\n  input[type=\""search\""] {\n    box-sizing: border-box;\n  }\n\n  // Position radios and checkboxes better\n  input[type=\""radio\""],\n  input[type=\""checkbox\""] {\n    line-height: normal;\n  }\n\n  input[type=\""file\""] {\n    display: block;\n  }\n\n  // Make range inputs behave like textual form controls\n  input[type=\""range\""] {\n    display: block;\n    width: 100%;\n  }\n\n  // Make multiple select elements height not fixed\n  select[multiple],\n  select[size] {\n    height: auto;\n  }\n\n  // Focus for file, radio, and checkbox\n  input[type=\""file\""]:focus,\n  input[type=\""radio\""]:focus,\n  input[type=\""checkbox\""]:focus {\n    outline: thin dotted;\n    outline: 5px auto -webkit-focus-ring-color; // lesshint spaceAroundOperator: false\n    outline-offset: -2px;\n  }\n\n  // Adjust output element\n  output {\n    display: block;\n    padding-top: 15px;\n    font-size: @font-size-base;\n    line-height: @line-height-base;\n    color: @input-color;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/form/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n@import \""../../button/style/mixin\"";\n@import \""../../grid/style/mixin\"";\n@import \""./mixin\"";\n\n@form-prefix-cls: ~\""@{ant-prefix}-form\"";\n\n.reset-form();\n\nlabel {\n  position: relative;\n\n  > .@{iconfont-css-prefix} {\n    vertical-align: top;\n    font-size: @font-size-base;\n  }\n}\n\n.@{form-prefix-cls}-item-required:before {\n  display: inline-block;\n  margin-right: 4px;\n  content: \""*\"";\n  font-family: SimSun;\n  font-size: @font-size-base;\n  color: @label-required-color;\n}\n\n// Radio && Checkbox\ninput[type=\""radio\""],\ninput[type=\""checkbox\""] {\n  &[disabled],\n  &.disabled {\n    cursor: not-allowed;\n  }\n}\n\n// These classes are used directly on <label>s\n.@{ant-prefix}-radio-inline,\n.@{ant-prefix}-radio-vertical,\n.@{ant-prefix}-checkbox-inline,\n.@{ant-prefix}-checkbox-vertical {\n  &.disabled {\n    cursor: not-allowed;\n  }\n}\n\n// These classes are used on elements with <label> descendants\n.@{ant-prefix}-radio,\n.@{ant-prefix}-checkbox {\n  &.disabled {\n    label {\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Form items\n// You should wrap labels and controls in .@{form-prefix-cls}-item for optimum spacing\n.@{form-prefix-cls}-item {\n  font-size: @font-size-base;\n  margin-bottom: @form-item-margin-bottom;\n  color: @text-color;\n  vertical-align: top;\n\n  // nested FormItem\n  & > &,\n  & :not(.@{form-prefix-cls}) > & {\n    margin-bottom: -@form-item-margin-bottom;\n  }\n\n  &-control {\n    line-height: 32px;\n    position: relative;\n    .clearfix;\n  }\n\n  &-with-help {\n    margin-bottom: @form-item-margin-bottom - @font-size-base * @line-height-base;\n  }\n\n  &-label {\n    text-align: right;\n    vertical-align: middle;\n    padding: 7px 0;\n    display: inline-block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n\n    label {\n      color: @label-color;\n\n      &:after {\n        content: \"":\"";\n        margin: 0 8px 0 2px;\n        position: relative;\n        top: -0.5px;\n      }\n    }\n  }\n\n  .@{ant-prefix}-switch {\n    margin: 4px 0;\n  }\n\n  &-no-colon &-label label:after {\n    content: \"" \"";\n  }\n}\n\n.@{form-prefix-cls}-explain {\n  line-height: 1.5;\n}\n\n.@{form-prefix-cls}-explain,\n.@{form-prefix-cls}-extra {\n  color: @text-color-secondary;\n}\n\n.@{form-prefix-cls}-text {\n  display: inline-block;\n  padding-right: 8px;\n}\n\n.@{form-prefix-cls}-split {\n  display: block;\n  text-align: center;\n}\n\n// 表单下的输入框尺寸唯一: 大尺寸\nform {\n  .has-feedback {\n    .@{ant-prefix}-input {\n      padding-right: 24px;\n    }\n  }\n\n  textarea.@{ant-prefix}-input {\n    height: auto;\n  }\n\n  // input[type=file]\n  .@{ant-prefix}-upload {\n    background: transparent;\n  }\n\n  input[type=\""radio\""],\n  input[type=\""checkbox\""] {\n    width: 14px;\n    height: 14px;\n  }\n\n  // Radios and checkboxes on same line\n  .@{ant-prefix}-radio-inline,\n  .@{ant-prefix}-checkbox-inline {\n    display: inline-block;\n    vertical-align: middle;\n    font-weight: normal;\n    cursor: pointer;\n    margin-left: 8px;\n\n    &:first-child {\n      margin-left: 0;\n    }\n  }\n\n  .@{ant-prefix}-checkbox-vertical,\n  .@{ant-prefix}-radio-vertical {\n    display: block;\n  }\n\n  .@{ant-prefix}-checkbox-vertical + .@{ant-prefix}-checkbox-vertical,\n  .@{ant-prefix}-radio-vertical + .@{ant-prefix}-radio-vertical {\n    margin-left: 0;\n  }\n\n  .@{ant-prefix}-input-number {\n    margin-top: -1px;\n    margin-right: 8px;\n  }\n\n  .@{ant-prefix}-select,\n  .@{ant-prefix}-cascader-picker {\n    width: 100%;\n  }\n}\n\n// Input combined with select\n.@{ant-prefix}-input-group-wrap {\n  .@{ant-prefix}-select-selection {\n    border-bottom-left-radius: 0;\n    border-top-left-radius: 0;\n    &:hover {\n      border-color: @border-color-base;\n    }\n  }\n\n  .@{ant-prefix}-select-selection--single {\n    margin-left: -1px;\n    height: @input-height-lg;\n    background-color: #eee;\n    .@{ant-prefix}-select-selection__rendered {\n      padding-left: 8px;\n      padding-right: 25px;\n      line-height: 30px;\n    }\n  }\n\n  .@{ant-prefix}-select-open .@{ant-prefix}-select-selection {\n    border-color: @border-color-base;\n    box-shadow: none;\n  }\n}\n\n// Form layout\n//== Horizontal Form\n.@{form-prefix-cls}-horizontal {\n  .@{form-prefix-cls}-item {\n    .make-row;\n  }\n\n  .@{ant-prefix}-radio-inline,\n  .@{ant-prefix}-checkbox-inline {\n    vertical-align: baseline;\n  }\n}\n\n// Form layout\n//== Vertical Form\n.@{form-prefix-cls}-vertical {\n  .@{form-prefix-cls}-item-label {\n    padding: 0 0 8px;\n\n    label:after {\n      content: '';\n    }\n  }\n}\n\n//== Inline Form\n.@{form-prefix-cls}-inline {\n  .@{form-prefix-cls}-item {\n    display: inline-block;\n    margin-right: 10px;\n    margin-bottom: 0;\n\n    &-with-help {\n      margin-bottom: 24px;\n    }\n\n    > div {\n      display: inline-block;\n      vertical-align: middle;\n    }\n  }\n\n  .@{form-prefix-cls}-text {\n    display: inline-block;\n  }\n\n  .has-feedback {\n    display: inline-block;\n  }\n\n  // Fix https://github.comdesigndesign/issues/1040\n  .@{form-prefix-cls}-explain {\n    position: absolute;\n  }\n}\n\n.@{form-prefix-cls}-horizontal,\n.@{form-prefix-cls}-inline {\n  label {\n    > input[type=\""radio\""],\n    > input[type=\""checkbox\""] {\n      margin-right: 4px;\n    }\n  }\n}\n\n// Validation state\n.has-success,\n.has-warning,\n.has-error,\n.is-validating {\n  &.has-feedback:after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    visibility: visible;\n    pointer-events: none;\n    .square(@input-height-lg);\n    line-height: @input-height-lg;\n    text-align: center;\n    font-size: @font-size-lg;\n    animation: zoomIn .3s @ease-out-back;\n    .iconfont-font(\""\"");\n  }\n}\n\n.has-success {\n  &.has-feedback:after {\n    animation-name: diffZoomIn1 !important;\n  }\n}\n\n.has-error {\n  &.has-feedback:after {\n    animation-name: diffZoomIn2 !important;\n  }\n}\n\n.has-warning {\n  &.has-feedback:after {\n    animation-name: diffZoomIn3 !important;\n  }\n}\n\n.has-success {\n  .@{ant-prefix}-input {\n    border-color: @input-border-color;\n    box-shadow: none;\n  }\n\n  &.has-feedback:after {\n    content: '\\e630';\n    color: @success-color;\n  }\n}\n\n.has-warning {\n  .form-control-validation(@warning-color; @warning-color;);\n\n  &.has-feedback:after {\n    content: '\\e62c';\n    color: @warning-color;\n  }\n\n  //select\n  .@{ant-prefix}-select {\n    &-selection {\n      border-color: @warning-color;\n    }\n    &-open .@{ant-prefix}-select-selection,\n    &-focused .@{ant-prefix}-select-selection {\n      .active(@warning-color);\n    }\n  }\n\n  // arrow and icon\n  .@{ant-prefix}-calendar-picker-icon:after,\n  .@{ant-prefix}-picker-icon:after,\n  .@{ant-prefix}-select-arrow,\n  .@{ant-prefix}-cascader-picker-arrow {\n    color: @warning-color;\n  }\n\n  //input-number, timepicker\n  .@{ant-prefix}-input-number,\n  .@{ant-prefix}-time-picker-input {\n    border-color: @warning-color;\n    &-focused,\n    &:focus {\n      .active(@warning-color);\n    }\n    &:not([disabled]):hover {\n      border-color: @warning-color;\n    }\n  }\n}\n\n.has-error {\n  .form-control-validation(@error-color; @error-color;);\n\n  &.has-feedback:after {\n    content: '\\e62e';\n    color: @error-color;\n  }\n\n  //select\n  .@{ant-prefix}-select {\n    &-selection {\n      border-color: @error-color;\n    }\n    &-open .@{ant-prefix}-select-selection,\n    &-focused .@{ant-prefix}-select-selection {\n      .active(@error-color);\n    }\n  }\n\n  // arrow and icon\n  .@{ant-prefix}-calendar-picker-icon:after,\n  .@{ant-prefix}-picker-icon:after,\n  .@{ant-prefix}-select-arrow,\n  .@{ant-prefix}-cascader-picker-arrow {\n    color: @error-color;\n  }\n\n  //input-number, timepicker\n  .@{ant-prefix}-input-number,\n  .@{ant-prefix}-time-picker-input {\n    border-color: @error-color;\n    &-focused,\n    &:focus {\n      .active(@error-color);\n    }\n    &:not([disabled]):hover {\n      border-color: @error-color;\n    }\n  }\n  .@{ant-prefix}-mention-wrapper {\n    .@{ant-prefix}-mention-editor {\n      &,\n      &:not([disabled]):hover {\n        border-color: @error-color;\n      }\n    }\n    &.active .@{ant-prefix}-mention-editor,\n    .@{ant-prefix}-mention-editor:not([disabled]):focus {\n      .active(@error-color);\n    }\n  }\n}\n\n.is-validating {\n  &.has-feedback:after {\n    display: inline-block;\n    animation: loadingCircle 1s infinite linear;\n    content: \""\\e6ae\"";\n    color: @text-color-secondary;\n  }\n}\n\n.@{ant-prefix}-advanced-search-form {\n  .@{form-prefix-cls}-item {\n    margin-bottom: 16px;\n  }\n  .@{ant-prefix}-input,\n  .@{ant-prefix}-input-group .@{ant-prefix}-input,\n  .@{ant-prefix}-input-group .@{ant-prefix}-input-group-addon {\n    height: 28px;\n  }\n}\n\n// need there different zoom animation\n// otherwise won't trigger anim\n@keyframes diffZoomIn1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n@keyframes diffZoomIn2 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n@keyframes diffZoomIn3 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/form/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n\n@input-number-prefix-cls: ~\""@{ant-prefix}-input-number\"";\n\n.handler-disabled() {\n  opacity: 0.72;\n  color: #ccc !important;\n  cursor: not-allowed;\n}\n\n.@{input-number-prefix-cls} {\n  .input();\n  margin: 0;\n  padding: 0;\n  font-size: @font-size-base;\n  height: 28px;\n  display: inline-block;\n  border: 1px solid @border-color-base;\n  border-radius: @border-radius-base;\n  width: 80px;\n\n  &-handler {\n    text-align: center;\n    line-height: 0;\n    height: 50%;\n    overflow: hidden;\n    color: @text-color-secondary;\n    position: relative;\n    transition: all 0.1s linear;\n    display: block;\n    width: 100%;\n    font-weight: bold;\n    &:active {\n      background: #f4f4f4;\n    }\n    &:hover &-up-inner,\n    &:hover &-down-inner {\n      color: tint(@primary-color, 20%);\n    }\n  }\n\n  &-handler-up-inner,\n  &-handler-down-inner {\n    .iconfont-mixin();\n    line-height: 12px;\n    user-select: none;\n    position: absolute;\n    width: 12px;\n    height: 12px;\n    transition: all 0.1s linear;\n    .iconfont-size-under-12px(7px);\n    right: 4px;\n    color: @text-color-secondary;\n  }\n\n  &:hover {\n    .hover();\n  }\n\n  &-focused {\n    .active();\n  }\n\n  &-disabled {\n    .disabled();\n  }\n\n  &-input {\n    width: 100%;\n    text-align: left;\n    outline: 0;\n    -moz-appearance: textfield;\n    line-height: 26px;\n    height: 26px;\n    transition: all 0.3s linear;\n    color: @text-color;\n    border: 0;\n    border-radius: @border-radius-base;\n    padding: 0 7px;\n\n    &[disabled] {\n      .disabled();\n    }\n  }\n\n  &-lg {\n    padding: 0;\n    .@{input-number-prefix-cls}-handler {\n      height: 16px;\n    }\n\n    input {\n      height: 30px;\n      line-height: 30px;\n    }\n\n    .@{input-number-prefix-cls}-handler-up-inner {\n      top: 2px;\n    }\n    .@{input-number-prefix-cls}-handler-down-inner {\n      bottom: 2px;\n    }\n    .@{input-number-prefix-cls}-handler-up:hover {\n      height: 18px;\n    }\n  }\n\n  &-sm {\n    padding: 0;\n    .@{input-number-prefix-cls}-handler {\n      height: 11px;\n    }\n\n    input {\n      height: 20px;\n      line-height: 20px;\n    }\n\n    .@{input-number-prefix-cls}-handler-up-inner {\n      top: -1px;\n    }\n    .@{input-number-prefix-cls}-handler-down-inner {\n      bottom: -1px;\n    }\n    .@{input-number-prefix-cls}-handler-up:hover {\n      height: 13px;\n    }\n    .@{input-number-prefix-cls}-handler-down:hover .@{input-number-prefix-cls}-handler-down-inner {\n      bottom: 4px;\n    }\n  }\n\n  &-handler-wrap {\n    border-left: 1px solid @border-color-base;\n    width: 22px;\n    height: 100%;\n    background: #fff;\n    position: absolute;\n    top: 0;\n    right: 0;\n    opacity: 0;\n    border-radius: 0 @border-radius-base @border-radius-base 0;\n    transition: opacity 0.24s linear 0.1s;\n  }\n\n  &:hover &-handler-wrap {\n    opacity: 1;\n  }\n\n  &-handler-up {\n    cursor: pointer;\n    &-inner {\n      top: 1px;\n      &:before {\n        text-align: center;\n        content: \""\\e61e\"";\n      }\n    }\n    &:hover {\n      height: 16px;\n    }\n    &:hover &-inner {\n      margin-top: 2px;\n    }\n  }\n\n  &-handler-down {\n    border-top: 1px solid @border-color-base;\n    top: -1px;\n    cursor: pointer;\n    &-inner {\n      &:before {\n        text-align: center;\n        content: \""\\e61d\"";\n      }\n    }\n    &:hover {\n      height: 16px;\n      margin-top: -2px;\n    }\n  }\n\n  &-handler-down-disabled,\n  &-handler-up-disabled,\n  &-disabled {\n    .@{input-number-prefix-cls}-handler-down-inner,\n    .@{input-number-prefix-cls}-handler-up-inner {\n      .handler-disabled();\n    }\n  }\n\n  &-disabled {\n    .@{input-number-prefix-cls}-input {\n      opacity: 0.72;\n      cursor: not-allowed;\n      background-color: #f3f3f3;\n    }\n    .@{input-number-prefix-cls}-handler-wrap {\n      display: none;\n    }\n    .@{input-number-prefix-cls}-handler {\n      .handler-disabled();\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/input-number/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import '../../input/style/mixin.less';\n\n.@{ant-prefix}-mention-wrapper {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  vertical-align: middle;\n  &-active .@{ant-prefix}-mention-editor {\n    .active;\n  }\n  .@{ant-prefix}-mention-editor {\n   .input;\n   padding: 0;\n   display: block;\n  }\n  .@{ant-prefix}-mention-editor-wrapper {\n    overflow-y: auto;\n    height: auto;\n  }\n  .public-DraftEditorPlaceholder-root {\n    position: absolute;\n    .public-DraftEditorPlaceholder-inner {\n      color: @input-placeholder-color;\n      opacity: 1;\n      outline: none;\n      white-space: pre-wrap;\n      word-wrap: break-word;\n      height: auto;\n      padding: 4px 7px;\n    }\n  }\n  .DraftEditor-editorContainer .public-DraftEditor-content {\n    height: auto;\n    padding: 4px 7px;\n  }\n}\n\n.@{ant-prefix}-mention-dropdown {\n  margin-top: 1.5em;\n  max-height: 250px;\n  min-width: 120px;\n  background-color: white;\n  box-shadow: @box-shadow-base;\n  border-radius: @border-radius-base;\n  box-sizing: border-box;\n  z-index: @zindex-dropdown;\n  left: -9999px;\n  top: -9999px;\n  position: absolute;\n  outline: none;\n  overflow-x: hidden;\n  overflow-y: auto;\n  font-size: @font-size-base;\n  &-notfound.@{ant-prefix}-mention-dropdown-item {\n    color: #ccc;\n\n    .@{iconfont-css-prefix}-loading {\n      color: @primary-color;\n      text-align: center;\n      display: block;\n    }\n  }\n  &-item {\n    position: relative;\n    display: block;\n    padding: 7px 16px;\n    font-weight: normal;\n    color: @text-color;\n    white-space: nowrap;\n    cursor: pointer;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    transition: background 0.3s ease;\n\n    &:hover,\n    &.focus,\n    &-active {\n      background-color: tint(@primary-color, 90%);\n    }\n\n    &-disabled {\n      color: #ccc;\n      cursor: not-allowed;\n\n      &:hover {\n        color: #ccc;\n        background-color: #fff;\n        cursor: not-allowed;\n      }\n    }\n\n    &-selected {\n      &,\n      &:hover {\n        background-color: @background-color-base;\n        font-weight: bold;\n        color: @text-color;\n      }\n    }\n\n    &-divider {\n      height: 1px;\n      margin: 1px 0;\n      overflow: hidden;\n      background-color: @border-color-split;\n      line-height: 0;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/mention/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@menu-prefix-cls: ~\""@{ant-prefix}-menu\"";\n\n// default theme\n.@{menu-prefix-cls} {\n  outline: none;\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  z-index: @zindex-dropdown;\n  box-shadow: @box-shadow-base;\n  color: @text-color;\n  background: #fff;\n  line-height: 46px;\n\n  &-hidden {\n    display: none;\n  }\n\n  &-item-group-list {\n    margin: 0;\n    padding: 0;\n  }\n\n  &-item-group-title {\n    color: @text-color-secondary;\n    font-size: @font-size-base;\n    line-height: 1.5;\n    padding: 8px 16px;\n  }\n\n  &-item,\n  &-submenu,\n  &-submenu-title {\n    cursor: pointer;\n    transition: all 0.3s ease;\n  }\n\n  &-submenu &-sub {\n    cursor: initial;\n  }\n\n  &-item > a {\n    display: block;\n    color: @text-color;\n    &:hover {\n      color: @text-color;\n    }\n    &:before {\n      position: absolute;\n      background-color: transparent;\n      width: 100%;\n      height: 100%;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n      content: '';\n    }\n  }\n\n  &-item-divider {\n    height: 1px;\n    overflow: hidden;\n    background-color: @border-color-split;\n    line-height: 0;\n  }\n\n  &-item:hover,\n  &-item-active,\n  &-submenu-active,\n  &-submenu-title:hover {\n    background-color: tint(@primary-color, 90%);\n  }\n\n  &-horizontal &-item,\n  &-horizontal &-submenu {\n    margin-top: -1px;\n  }\n\n  &-horizontal > &-item:hover,\n  &-horizontal > &-item-active,\n  &-horizontal > &-submenu &-submenu-title:hover {\n    background-color: transparent;\n  }\n\n  &-item-selected {\n    color: @primary-color;\n    // fix chrome render bug\n    transform: translateZ(0);\n    > a,\n    > a:hover {\n      color: @primary-color;\n    }\n  }\n\n  &-horizontal,\n  &-inline,\n  &-vertical {\n    z-index: auto;\n  }\n\n  &-inline,\n  &-vertical {\n    border-right: 1px solid @border-color-split;\n    .@{menu-prefix-cls}-item {\n      border-right: 1px solid @border-color-split;\n      margin-left: -1px;\n      left: 1px;\n      position: relative;\n      z-index: 1;\n    }\n  }\n\n  &-vertical &-sub {\n    border-right: 0;\n    .@{menu-prefix-cls}-item {\n      border-right: 0;\n    }\n  }\n\n  &-inline {\n    .@{menu-prefix-cls}-selected,\n    .@{menu-prefix-cls}-item-selected {\n      border-right: 2px solid @primary-color;\n      transform: translateZ(0);\n    }\n  }\n\n  &-submenu-horizontal > & {\n    top: 100%;\n    left: 0;\n    position: absolute;\n    min-width: 100%;\n    margin-top: 7px;\n    z-index: @zindex-dropdown;\n  }\n\n  &-submenu-vertical {\n    z-index: 1;\n  }\n\n  &-submenu-vertical > & {\n    top: 0;\n    left: 100%;\n    position: absolute;\n    min-width: 160px;\n    margin-left: 4px;\n    z-index: @zindex-dropdown;\n  }\n\n  &-item,\n  &-submenu-title {\n    margin: 0;\n    padding: 0 20px;\n    position: relative;\n    display: block;\n    white-space: nowrap;\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.@{menu-prefix-cls}-item-disabled,\n    &.@{menu-prefix-cls}-submenu-disabled {\n      color: @text-color-secondary !important;\n      cursor: not-allowed;\n      background: none;\n      > a {\n        color: @text-color-secondary !important;\n        pointer-events: none;\n      }\n    }\n\n    .@{iconfont-css-prefix} {\n      min-width: 14px;\n      margin-right: 8px;\n    }\n  }\n\n  & > &-item-divider {\n    height: 1px;\n    margin: 1px 0;\n    overflow: hidden;\n    padding: 0;\n    line-height: 0;\n    background-color: #e5e5e5;\n  }\n\n  &-submenu {\n    position: relative;\n\n    > .@{menu-prefix-cls} {\n      background-color: #fff;\n      border-radius: 4px;\n    }\n\n    &-vertical > .@{menu-prefix-cls}-submenu-title:after {\n      font-family: \""anticon\"" !important;\n      font-style: normal;\n      vertical-align: baseline;\n      text-align: center;\n      text-transform: none;\n      text-rendering: auto;\n      position: absolute;\n      transition: transform .3s ease;\n      content: \""\\e61d\"";\n      right: 16px;\n      .ie-rotate(3);\n      transform: rotate(270deg) scale(0.75);\n    }\n\n    &-inline > .@{menu-prefix-cls}-submenu-title:after {\n      font-family: \""anticon\"" !important;\n      font-style: normal;\n      vertical-align: baseline;\n      text-align: center;\n      text-transform: none;\n      text-rendering: auto;\n      position: absolute;\n      transition: transform .3s ease;\n      content: \""\\e61d\"";\n      right: 16px;\n      top: 0;\n      .iconfont-size-under-12px(8px);\n    }\n\n    &-open {\n      &.@{menu-prefix-cls}-submenu-inline > .@{menu-prefix-cls}-submenu-title:after {\n        .ie-rotate(1);\n        transform: rotate(180deg) scale(0.75);\n      }\n    }\n  }\n\n  &-vertical &-submenu-selected {\n    color: @primary-color;\n    > a {\n      color: @primary-color;\n    }\n  }\n\n  &-horizontal {\n    border: 0;\n    border-bottom: 1px solid @border-color-split;\n    box-shadow: none;\n    z-index: 0;\n\n    > .@{menu-prefix-cls}-item,\n    > .@{menu-prefix-cls}-submenu {\n      position: relative;\n      top: 1px;\n      float: left;\n      border-bottom: 2px solid transparent;\n\n      &:hover,\n      &-active,\n      &-selected {\n        border-bottom: 2px solid @primary-color;\n        color: @primary-color;\n      }\n\n      > a {\n        display: block;\n        color: @text-color;\n        &:hover {\n          color: @primary-color;\n        }\n      }\n    }\n\n    &:after {\n      content: \""\\20\"";\n      display: block;\n      height: 0;\n      clear: both;\n    }\n  }\n\n  &-vertical,\n  &-inline,\n  &-item-group-list {\n    & > .@{menu-prefix-cls}-item,\n    & > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n      padding: 0px 16px 0 28px;\n      font-size: @font-size-base;\n      line-height: 42px;\n      height: 42px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n  }\n\n  &-vertical&-sub {\n    padding: 0;\n    transform-origin: 0 0;\n    & > .@{menu-prefix-cls}-item,\n    & > .@{menu-prefix-cls}-submenu {\n      transform-origin: 0 0;\n    }\n  }\n\n  &-root&-vertical,\n  &-root&-inline {\n    box-shadow: none;\n  }\n\n  &-sub&-inline {\n    padding: 0;\n    border: 0;\n    box-shadow: none;\n    border-radius: 0;\n    & > .@{menu-prefix-cls}-item,\n    & > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n      line-height: 42px;\n      height: 42px;\n      list-style-type: disc;\n      list-style-position: inside;\n    }\n\n    & .@{menu-prefix-cls}-item-group-title {\n      padding-left: 32px;\n    }\n  }\n}\n\n\n// dark theme\n.@{menu-prefix-cls} {\n  &-dark,\n  &-dark &-sub {\n    color: @text-color-secondary;\n    background: #404040;\n  }\n\n  &-dark &-inline&-sub {\n    background: #333;\n  }\n\n  &-dark&-horizontal {\n    border-bottom-color: #404040;\n  }\n\n  &-dark&-horizontal > &-item,\n  &-dark&-horizontal > &-submenu {\n    border-color: #404040;\n    border-bottom: 0;\n    top: 0;\n  }\n\n  &-dark &-item,\n  &-dark &-item > a {\n    color: @text-color-secondary;\n  }\n\n  &-dark&-inline,\n  &-dark&-vertical {\n    border-right: 0;\n  }\n\n  &-dark&-inline &-item,\n  &-dark&-vertical &-item {\n    border-right: 0;\n    margin-left: 0;\n    left: 0;\n  }\n\n  &-dark &-item:hover,\n  &-dark &-item-active,\n  &-dark &-submenu-active,\n  &-dark &-submenu-selected,\n  &-dark &-submenu:hover,\n  &-dark &-submenu-title:hover {\n    background-color: transparent;\n    color: #fff;\n    > a {\n      color: #fff;\n    }\n  }\n\n  &-dark &-item-selected {\n    border-right: 0;\n    color: #fff;\n    > a,\n    > a:hover {\n      color: #fff;\n    }\n  }\n\n  &-dark&-inline &-item-selected {\n    background-color: @primary-color;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/menu/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n\n@message-prefix-cls: ~\""@{ant-prefix}-message\"";\n\n.@{message-prefix-cls} {\n  font-size: @font-size-base;\n  position: fixed;\n  z-index: @zindex-message;\n  width: 100%;\n  top: 16px;\n  left: 0;\n\n  &-notice {\n    width: auto;\n    vertical-align: middle;\n    position: absolute;\n    left: 50%;\n  }\n\n  &-notice-content {\n    position: relative;\n    right: 50%;\n    padding: 8px 16px;\n    border-radius: @border-radius-base;\n    box-shadow: @shadow-2;\n    background: #fff;\n    display: block;\n  }\n\n  &-success .@{iconfont-css-prefix} {\n    color: @success-color;\n  }\n\n  &-error .@{iconfont-css-prefix} {\n    color: @error-color;\n  }\n\n  &-warning .@{iconfont-css-prefix} {\n    color: @warning-color;\n  }\n\n  &-info .@{iconfont-css-prefix},\n  &-loading .@{iconfont-css-prefix} {\n    color: @primary-color;\n  }\n\n  .@{iconfont-css-prefix} {\n    margin-right: 8px;\n    font-size: @font-size-lg;\n    top: 1px;\n    position: relative;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/message/style/index.less\n **/"",""@dialog-prefix-cls: ~\""@{ant-prefix}-modal\"";\n\n.@{dialog-prefix-cls} {\n  position: relative;\n  width: auto;\n  margin: 0 auto;\n  top: 100px;\n  padding-bottom: 24px;\n\n  &-wrap {\n    position: fixed;\n    overflow: auto;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: @zindex-modal;\n    -webkit-overflow-scrolling: touch;\n    outline: 0;\n  }\n\n  &-title {\n    margin: 0;\n    font-size: @font-size-lg;\n    line-height: 21px;\n    font-weight: bold;\n  }\n\n  &-content {\n    position: relative;\n    background-color: #fff;\n    border: 0;\n    border-radius: @border-radius-base;\n    background-clip: padding-box;\n    box-shadow: @shadow-2;\n  }\n\n  &-close {\n    cursor: pointer;\n    border: 0;\n    background: transparent;\n    position: absolute;\n    right: 18px;\n    top: 16px;\n    z-index: 10;\n    font-weight: 700;\n    line-height: 1;\n    text-decoration: none;\n    transition: color .3s ease;\n    color: @text-color-secondary;\n    outline: 0;\n\n    &-x {\n      display: block;\n      font-style: normal;\n      vertical-align: baseline;\n      text-align: center;\n      text-transform: none;\n      text-rendering: auto;\n      width: 14px;\n      height: 14px;\n      font-size: @font-size-lg;\n      line-height: 1;\n\n      &:before {\n        content: \""\\e633\"";\n        display: block;\n        font-family: \""anticon\"" !important;\n      }\n    }\n\n    &:focus,\n    &:hover {\n      color: #444;\n      text-decoration: none;\n    }\n  }\n\n  &-header {\n    padding: 14px 16px;\n    border-radius: @border-radius-base @border-radius-base 0 0;\n    background: #fff;\n    color: @text-color;\n    border-bottom: 1px solid @border-color-split;\n  }\n\n  &-body {\n    padding: 16px;\n    font-size: @font-size-base;\n    line-height: 1.5;\n  }\n\n  &-footer {\n    border-top: 1px solid @border-color-split;\n    padding: 10px 18px 10px 10px;\n    text-align: right;\n    border-radius: 0 0 @border-radius-base @border-radius-base;\n    button + button {\n      margin-left: 8px;\n      margin-bottom: 0;\n    }\n  }\n\n  &.zoom-enter,\n  &.zoom-appear {\n    animation-duration: @animation-duration-slow;\n    transform: none; // reset scale avoid mousePosition bug\n    opacity: 0;\n  }\n\n  &-mask {\n    position: fixed;\n    top: 0;\n    right: 0;\n    left: 0;\n    bottom: 0;\n    background-color: #373737;\n    background-color: rgba(55, 55, 55, 0.6);\n    height: 100%;\n    z-index: @zindex-modal-mask;\n    filter: ~\""alpha(opacity=50)\"";\n\n    &-hidden {\n      display: none;\n    }\n  }\n\n  &-open {\n    overflow: hidden;\n  }\n}\n\n\n@media (max-width: 768px) {\n  .@{dialog-prefix-cls} {\n    width: auto !important;\n    margin: 10px;\n  }\n  .vertical-center-modal {\n    .@{dialog-prefix-cls} {\n      flex: 1;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/modal/style/modal.less\n **/"",""@import \""../../style/mixins/index\"";\n\n@confirm-prefix-cls: ~\""@{ant-prefix}-confirm\"";\n\n.@{confirm-prefix-cls} {\n  .@{ant-prefix}-modal-header {\n    display: none;\n  }\n\n  .@{ant-prefix}-modal-close {\n    display: none;\n  }\n\n  .@{ant-prefix}-modal-body {\n    padding: 30px 40px;\n  }\n\n  &-body-wrapper {\n    .clearfix();\n  }\n\n  &-body {\n    .@{confirm-prefix-cls}-title {\n      color: @text-color;\n      font-weight: bold;\n      font-size: @font-size-lg;\n    }\n\n    .@{confirm-prefix-cls}-content {\n      margin-left: 42px;\n      font-size: @font-size-base;\n      color: @text-color;\n      margin-top: 8px;\n    }\n\n    > .@{iconfont-css-prefix} {\n      font-size: 24px;\n      margin-right: 16px;\n      padding: 0 1px;\n      float: left;\n    }\n  }\n\n  .@{confirm-prefix-cls}-btns {\n    margin-top: 30px;\n    float: right;\n\n    button + button {\n      margin-left: 10px;\n      margin-bottom: 0;\n    }\n  }\n\n  &-error &-body > .@{iconfont-css-prefix} {\n    color: @error-color;\n  }\n\n  &-warning &-body > .@{iconfont-css-prefix},\n  &-confirm &-body > .@{iconfont-css-prefix} {\n    color: @warning-color;\n  }\n\n  &-info &-body > .@{iconfont-css-prefix} {\n    color: @primary-color;\n  }\n\n  &-success &-body > .@{iconfont-css-prefix} {\n    color: @success-color;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/modal/style/confirm.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@notification-prefix-cls: ~\""@{ant-prefix}-notification\"";\n@notification-width: 335px;\n@notification-padding: 16px;\n@notification-margin-bottom: 10px;\n\n.@{notification-prefix-cls} {\n  position: fixed;\n  z-index: @zindex-notification;\n  width: @notification-width;\n  margin-right: 24px;\n\n  &-notice {\n    padding: @notification-padding;\n    border-radius: @border-radius-base;\n    box-shadow: @shadow-2;\n    background: #fff;\n    line-height: 1.5;\n    position: relative;\n    margin-bottom: @notification-margin-bottom;\n    overflow: hidden;\n\n    &-message {\n      font-size: @font-size-lg;\n      color: @heading-color;\n      margin-bottom: 4px;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n      overflow: hidden;\n      line-height: 20px;\n    }\n\n    &-description {\n      font-size: @font-size-base;\n    }\n\n    &-closable &-message {\n      padding-right: 24px;\n    }\n\n    &-with-icon &-message {\n      font-size: @font-size-lg;\n      margin-left: 48px;\n      margin-bottom: 4px;\n    }\n\n    &-with-icon &-description {\n      margin-left: 48px;\n      font-size: @font-size-base;\n    }\n\n    &-icon {\n      position: absolute;\n      left: 16px;\n      top: 17px;\n      font-size: 32px;\n      line-height: 32px;\n\n      &-success {\n        color: @success-color;\n      }\n      &-info {\n        color: @primary-color;\n      }\n      &-warning {\n        color: @warning-color;\n      }\n      &-error {\n        color: @error-color;\n      }\n    }\n\n    &-close-x:after {\n      font-size: @font-size-base;\n      content: \""\\e633\"";\n      font-family: \""anticon\"";\n      cursor: pointer;\n    }\n\n    &-close {\n      position: absolute;\n      right: 16px;\n      top: 10px;\n      color: @text-color-secondary;\n      outline: none;\n      &:hover {\n        color: #404040;\n      }\n    }\n\n    &-btn {\n      float: right;\n      margin-top: 16px;\n    }\n  }\n\n  .notification-fade-effect {\n    animation-duration: 0.24s;\n    animation-fill-mode: both;\n    animation-timing-function: @ease-in-out;\n  }\n\n  &-fade-enter,\n  &-fade-appear {\n    opacity: 0;\n    .notification-fade-effect();\n    animation-play-state: paused;\n  }\n\n  &-fade-leave {\n    .notification-fade-effect();\n    animation-duration: 0.2s;\n    animation-play-state: paused;\n  }\n\n  &-fade-enter&-fade-enter-active,\n  &-fade-appear&-fade-appear-active {\n    animation-name: NotificationFadeIn;\n    animation-play-state: running;\n  }\n\n  &-fade-leave&-fade-leave-active {\n    animation-name: NotificationFadeOut;\n    animation-play-state: running;\n  }\n}\n\n@keyframes NotificationFadeIn {\n  0% {\n    opacity: 0;\n    left: @notification-width;\n  }\n  100% {\n    left: 0;\n    opacity: 1;\n  }\n}\n\n@keyframes NotificationFadeOut {\n  0% {\n    opacity: 1;\n    margin-bottom: @notification-margin-bottom;\n    padding-top: @notification-padding;\n    padding-bottom: @notification-padding;\n    max-height: 150px;\n  }\n  100% {\n    opacity: 0;\n    margin-bottom: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    max-height: 0;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/notification/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../input/style/mixin\"";\n\n@pagination-prefix-cls: ~\""@{ant-prefix}-pagination\"";\n\n.@{pagination-prefix-cls} {\n  font-size: @font-size-base;\n\n  &:after {\n    content: \"" \"";\n    display: block;\n    height: 0;\n    clear: both;\n    overflow: hidden;\n    visibility: hidden;\n  }\n\n  &-total-text {\n    float: left;\n    height: 30px;\n    line-height: 30px;\n    margin-right: 10px;\n  }\n\n  &-item {\n    cursor: pointer;\n    border-radius: @border-radius-base;\n    user-select: none;\n    min-width: 28px;\n    height: 28px;\n    line-height: 28px;\n    text-align: center;\n    list-style: none;\n    float: left;\n    border: 1px solid @border-color-base;\n    background-color: #fff;\n    margin-right: 8px;\n    font-family: Arial;\n\n    a {\n      text-decoration: none;\n      color: @text-color;\n      transition: none;\n      margin: 0 6px;\n    }\n\n    &:hover {\n      transition: all 0.3s ease;\n      border-color: @primary-color;\n      a {\n        color: @primary-color;\n      }\n    }\n\n    &-active {\n      background-color: @primary-color;\n      border-color: @primary-color;\n\n      a,\n      &:hover a {\n        color: #fff;\n      }\n    }\n  }\n\n  &-jump-prev,\n  &-jump-next {\n    &:after {\n      content: \""•••\"";\n      display: block;\n      letter-spacing: 2px;\n      color: #ccc;\n      text-align: center;\n    }\n\n    &:hover {\n      &:after {\n        color: @primary-color;\n        .iconfont-size-under-12px(8px);\n        letter-spacing: -1px;\n        font-family: \""anticon\"";\n      }\n    }\n\n  }\n\n  &-jump-prev {\n    &:hover {\n      &:after {\n        content: \""\\e620\\e620\"";\n      }\n    }\n  }\n\n  &-jump-next {\n    &:hover {\n      &:after {\n        content: \""\\e61f\\e61f\"";\n      }\n    }\n  }\n\n  &-prev,\n  &-jump-prev,\n  &-jump-next {\n    margin-right: 8px;\n  }\n  &-prev,\n  &-next,\n  &-jump-prev,\n  &-jump-next {\n    font-family: Arial;\n    cursor: pointer;\n    color: @text-color;\n    border-radius: @border-radius-base;\n    list-style: none;\n    min-width: 28px;\n    height: 28px;\n    line-height: 28px;\n    float: left;\n    text-align: center;\n    transition: all 0.3s ease;\n    display: inline-block;\n  }\n\n  &-prev,\n  &-next {\n    border: 1px solid @border-color-base;\n    background-color: #fff;\n\n    a {\n      color: @text-color;\n\n      &:after {\n        .iconfont-size-under-12px(8px);\n        display: block;\n        height: 26px;\n        line-height: 26px;\n        font-family: \""anticon\"";\n        text-align: center;\n      }\n\n    }\n\n    &:hover {\n      border-color: @primary-color;\n\n      a {\n        color: @primary-color;\n      }\n    }\n  }\n\n  &-prev {\n    a {\n      &:after {\n        margin-top: -.5px;\n        content: \""\\e620\"";\n        display: block;\n      }\n    }\n  }\n\n  &-next {\n    a {\n      &:after {\n        content: \""\\e61f\"";\n        display: block;\n      }\n    }\n  }\n\n  &-disabled {\n    &:hover {\n      border-color: @border-color-base;\n      a {\n        color: #ccc;\n        cursor: not-allowed;\n      }\n    }\n    cursor: not-allowed;\n    a {\n      color: #ccc;\n    }\n  }\n\n  &-slash {\n    margin: 0 10px 0 5px;\n  }\n\n  &-options {\n    float: left;\n    margin-left: 15px;\n    &-size-changer {\n      float: left;\n      margin-right: 10px;\n    }\n\n    &-quick-jumper {\n      float: left;\n      height: 28px;\n      line-height: 28px;\n\n      input {\n        .input;\n        margin: 0 8px;\n        width: 50px;\n      }\n    }\n  }\n\n  &-simple &-prev,\n  &-simple &-next {\n    border: 0;\n    height: 24px;\n    line-height: 24px;\n    margin: 0;\n    font-size: 18px;\n  }\n\n  &-simple &-simple-pager {\n    float: left;\n    margin-right: 8px;\n\n    input {\n      margin: 0 8px;\n      box-sizing: border-box;\n      background-color: #fff;\n      border-radius: @border-radius-base;\n      border: 1px solid @border-color-base;\n      outline: none;\n      padding: 5px 8px;\n      width: 30px;\n      height: 24px;\n      text-align: center;\n      transition: border-color 0.3s ease;\n\n      &:hover {\n        border-color: @primary-color;\n      }\n    }\n  }\n}\n\n.@{pagination-prefix-cls} {\n  &.mini &-total-text {\n      height: 20px;\n      line-height: 20px;\n  }\n\n  &.mini &-item {\n    border: 0;\n    margin: 0;\n    min-width: 20px;\n    height: 20px;\n    line-height: 20px;\n  }\n\n  &.mini &-prev,\n  &.mini &-next {\n    margin: 0;\n    min-width: 20px;\n    height: 20px;\n    line-height: 20px;\n    border: 0;\n\n    a {\n      &:after {\n        height: 20px;\n        line-height: 20px;\n      }\n    }\n  }\n\n  &.mini &-jump-prev,\n  &.mini &-jump-next {\n    height: 20px;\n    line-height: 20px;\n  }\n\n  &.mini &-options {\n    margin-left: 8px;\n    &-quick-jumper {\n      height: 20px;\n      line-height: 20px;\n\n      input {\n        .input-sm;\n        width: 44px;\n      }\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/pagination/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@popover-prefix-cls: ~\""@{ant-prefix}-popover\"";\n\n.@{popover-prefix-cls} {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: @zindex-popover;\n  cursor: auto;\n  user-select: text;\n  white-space: normal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  font-weight: normal;\n  text-align: left;\n\n  &:after {\n    content: \""\"";\n    position: absolute;\n    background: rgba(255, 255, 255, 0.01);\n  }\n\n  &-hidden {\n    display: none;\n  }\n\n  // Offset the popover to account for the popover arrow\n  &-placement-top,\n  &-placement-topLeft,\n  &-placement-topRight {\n    padding-bottom: @popover-arrow-width;\n  }\n\n  &-placement-right,\n  &-placement-rightTop,\n  &-placement-rightBottom {\n    padding-left: @popover-arrow-width;\n  }\n\n  &-placement-bottom,\n  &-placement-bottomLeft,\n  &-placement-bottomRight {\n    padding-top: @popover-arrow-width;\n  }\n\n  &-placement-left,\n  &-placement-leftTop,\n  &-placement-leftBottom {\n    padding-right: @popover-arrow-width;\n  }\n\n  &-inner {\n    background-color: @popover-bg;\n    background-clip: padding-box;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n  }\n\n  &-title {\n    min-width: @popover-min-width;\n    margin: 0; // reset heading margin\n    padding: 0 16px;\n    line-height: 32px;\n    height: 32px;\n    border-bottom: 1px solid @border-color-split;\n    color: @text-color;\n  }\n\n  &-inner-content {\n    padding: 8px 16px;\n    color: @text-color;\n  }\n\n  &-message {\n    padding: 8px 0 16px;\n    font-size: @font-size-base;\n    color: @text-color;\n    > .@{iconfont-css-prefix} {\n      color: @warning-color;\n      line-height: 17px;\n      position: absolute;\n    }\n    &-title {\n      padding-left: 20px;\n    }\n  }\n\n  &-buttons {\n    text-align: right;\n    margin-bottom: 8px;\n    button {\n      margin-left: 8px;\n    }\n  }\n\n  // Arrows\n  // .popover-arrow is outer, .popover-arrow:after is inner\n\n  &-arrow {\n    &,\n    &:after {\n      position: absolute;\n      display: block;\n      width: 0;\n      height: 0;\n      border-color: transparent;\n      border-style: solid;\n    }\n  }\n\n  &-arrow {\n    border-width: @popover-arrow-outer-width;\n  }\n\n  &-arrow:after {\n    border-width: @popover-arrow-width;\n    content: \""\"";\n  }\n\n  &-placement-top > &-content > &-arrow,\n  &-placement-topLeft > &-content >  &-arrow,\n  &-placement-topRight > &-content >  &-arrow {\n    border-bottom-width: 0;\n    border-top-color: @popover-arrow-outer-color;\n    bottom: -1px;\n    &:after {\n      content: \"" \"";\n      bottom: 1px;\n      margin-left: -@popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: @popover-arrow-color;\n    }\n  }\n  &-placement-top > &-content >  &-arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n  }\n  &-placement-topLeft > &-content >  &-arrow {\n    left: 16px;\n  }\n  &-placement-topRight > &-content >  &-arrow {\n    right: 16px;\n  }\n\n  &-placement-right > &-content >  &-arrow,\n  &-placement-rightTop > &-content >  &-arrow,\n  &-placement-rightBottom > &-content >  &-arrow {\n    left: -1px;\n    border-left-width: 0;\n    border-right-color: @popover-arrow-outer-color;\n    &:after {\n      content: \"" \"";\n      left: 1px;\n      bottom: -@popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: @popover-arrow-color;\n    }\n  }\n  &-placement-right > &-content >  &-arrow {\n    top: 50%;\n    margin-top: -@popover-arrow-outer-width;\n  }\n  &-placement-rightTop > &-content >  &-arrow {\n    top: 12px;\n  }\n  &-placement-rightBottom > &-content >  &-arrow {\n    bottom: 12px;\n  }\n\n  &-placement-bottom > &-content >  &-arrow,\n  &-placement-bottomLeft > &-content >  &-arrow,\n  &-placement-bottomRight > &-content >  &-arrow {\n    border-top-width: 0;\n    border-bottom-color: @popover-arrow-outer-color;\n    top: -1px;\n    &:after {\n      content: \"" \"";\n      top: 1px;\n      margin-left: -@popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: @popover-arrow-color;\n    }\n  }\n  &-placement-bottom > &-content >  &-arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n  }\n  &-placement-bottomLeft > &-content >  &-arrow {\n    left: 16px;\n  }\n  &-placement-bottomRight > &-content >  &-arrow {\n    right: 16px;\n  }\n\n  &-placement-left > &-content >  &-arrow,\n  &-placement-leftTop > &-content >  &-arrow,\n  &-placement-leftBottom > &-content >  &-arrow {\n    right: -1px;\n    border-right-width: 0;\n    border-left-color: @popover-arrow-outer-color;\n    &:after {\n      content: \"" \"";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: @popover-arrow-color;\n      bottom: -@popover-arrow-width;\n    }\n  }\n  &-placement-left > &-content >  &-arrow {\n    top: 50%;\n    margin-top: -@popover-arrow-outer-width;\n  }\n  &-placement-leftTop > &-content >  &-arrow {\n    top: 12px;\n  }\n  &-placement-leftBottom > &-content >  &-arrow {\n    bottom: 12px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/popover/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@progress-prefix-cls: ~\""@{ant-prefix}-progress\"";\n\n.@{progress-prefix-cls} {\n  display: inline-block;\n\n  &-line {\n    width: 100%;\n    font-size: @font-size-base;\n    position: relative;\n  }\n\n  &-outer {\n    display: inline-block;\n    width: 100%;\n    margin-right: 0;\n    padding-right: 0;\n    .@{progress-prefix-cls}-show-info & {\n      padding-right: 45px;\n      margin-right: -45px;\n    }\n  }\n\n  &-inner {\n    display: inline-block;\n    width: 100%;\n    background-color: #f3f3f3;\n    border-radius: 100px;\n    vertical-align: middle;\n  }\n\n  &-bg {\n    border-radius: 100px;\n    background-color: @process-default-color;\n    transition: all .4s @ease-out-circ 0s;\n    position: relative;\n  }\n\n  &-text {\n    width: 35px;\n    text-align: left;\n    font-size: 1em;\n    margin-left: 10px;\n    vertical-align: middle;\n    display: inline-block;\n    font-family: tahoma;\n    position: relative;\n    top: -1px;\n    .@{iconfont-css-prefix} {\n      font-size: @font-size-base;\n    }\n  }\n\n  &-status-active {\n    .@{progress-prefix-cls}-bg:before {\n      content: \""\"";\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      background: #fff;\n      border-radius: 10px;\n      animation: ~\""@{ant-prefix}-progress-active\"" 2s @ease-out-quint infinite;\n    }\n  }\n\n  &-status-exception {\n    .@{progress-prefix-cls}-bg {\n      background-color: @error-color;\n    }\n    .@{progress-prefix-cls}-text {\n      color: @error-color;\n    }\n  }\n\n  &-status-success {\n    .@{progress-prefix-cls}-bg {\n      background-color: @success-color;\n    }\n    .@{progress-prefix-cls}-text {\n      color: @success-color;\n    }\n  }\n\n  &-circle &-inner {\n    position: relative;\n    line-height: 1;\n    background-color: transparent;\n  }\n\n  &-circle &-text {\n    display: block;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    line-height: 1;\n    top: 50%;\n    transform: translateY(-50%);\n    left: 0;\n    font-family: tahoma;\n    margin: 0;\n\n    .@{iconfont-css-prefix} {\n      font-size: 14 / 12em;\n    }\n  }\n\n  &-circle &-status-exception {\n    .@{progress-prefix-cls}-text {\n      color: @error-color;\n    }\n  }\n  &-circle &-status-success {\n    .@{progress-prefix-cls}-text {\n      color: @success-color;\n    }\n  }\n}\n\n@keyframes ~\""@{ant-prefix}-progress-active\"" {\n  0% {\n    opacity: 0.8;\n    width: 0;\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/progress/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@rate-prefix-cls: ~\""@{ant-prefix}-rate\"";\n@rate-star-color: #f5a623;\n\n.@{rate-prefix-cls} {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  font-size: 20px;\n  display: inline-block;\n  vertical-align: middle;\n  font-family: 'anticon';\n  font-weight: normal;\n  font-style: normal;\n\n  &-disabled &-star {\n    &:before,\n    &-content:before {\n      cursor: default;\n    }\n    &:hover {\n      transform: scale(1);\n    }\n  }\n\n  &-star {\n    margin: 0;\n    padding: 0;\n    display: inline-block;\n    margin-right: 8px;\n    position: relative;\n    transition: all 0.3s ease;\n\n    &:hover {\n      transform: scale(1.1);\n    }\n\n    &:before,\n    &-content:before {\n      color: #e9e9e9;\n      cursor: pointer;\n      content: \""\\e660\"";\n      transition: all 0.3s ease;\n      display: block;\n    }\n\n    &-content {\n      position: absolute;\n      left: 0;\n      top: 0;\n      width: 50%;\n      height: 100%;\n      overflow: hidden;\n      &:before {\n        color: transparent;\n      }\n    }\n\n    &-half &-content:before,\n    &-full:before {\n      color: @rate-star-color;\n    }\n\n    &-half:hover &-content:before,\n    &-full:hover:before {\n      color: tint(@rate-star-color, 20%);\n    }\n  }\n\n  &-text {\n    margin-left: 8px;\n    vertical-align: middle;\n    display: inline-block;\n    font-size: @font-size-base;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/rate/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@slider-prefix-cls: ~\""@{ant-prefix}-slider\"";\n// slider color\n@slider-disabled-color: #ccc;\n// tooltip\n@slider-tooltip-color: #fff;\n@slider-tooltip-bg: tint(@text-color, 4%);\n@slider-tooltip-arrow-width: 4px;\n@slider-tooltip-distance: @slider-tooltip-arrow-width + 4;\n@slider-tooltip-arrow-color: @slider-tooltip-bg;\n\n.@{slider-prefix-cls} {\n  position: relative;\n  margin: 10px 6px;\n  height: 12px;\n  border-radius: 5px;\n  background-color: #e9e9e9;\n  cursor: pointer;\n  border-top: 4px solid #fff;\n  border-bottom: 4px solid #fff;\n  transition: background-color 0.3s ease;\n\n  &-with-marks {\n    margin-bottom: 28px;\n  }\n\n  &-track {\n    position: absolute;\n    left: 0;\n    height: 4px;\n    border-radius: @border-radius-base;\n    background-color: tint(@primary-color, 60%);\n    z-index: 1;\n    transition: background-color 0.3s ease;\n  }\n\n  &:hover {\n    background-color: #e1e1e1;\n    .@{slider-prefix-cls}-handle {\n      border-color: tint(@primary-color, 20%);\n    }\n  }\n\n  &:hover &-track {\n    background-color: tint(@primary-color, 40%);\n  }\n\n  &-handle {\n    position: absolute;\n    margin-left: -7px;\n    margin-top: -5px;\n    width: 14px;\n    height: 14px;\n    cursor: pointer;\n    border-radius: 50%;\n    border: solid 2px tint(@primary-color, 50%);\n    background-color: #fff;\n    z-index: 2;\n    transition: border-color 0.3s ease, transform .3s cubic-bezier(0.18, 0.89, 0.32, 1.28);\n\n    &:hover {\n      border-color: tint(@primary-color, 20%);\n      transform: scale(1.2);\n      transform-origin: center center;\n    }\n\n    &:active {\n      box-shadow: 0 0 0 2px fadeout(@primary-color, 80%);\n    }\n  }\n\n  &-mark {\n    position: absolute;\n    top: 10px;\n    left: 0;\n    width: 100%;\n    font-size: @font-size-base;\n    z-index: 3;\n  }\n\n  &-mark-text {\n    position: absolute;\n    display: inline-block;\n    vertical-align: middle;\n    text-align: center;\n    cursor: pointer;\n    color: @text-color-secondary;\n\n    &-active {\n      color: @text-color;\n    }\n  }\n\n  &-step {\n    position: absolute;\n    width: 100%;\n    height: 4px;\n    background: transparent;\n    z-index: 1;\n  }\n\n  &-dot {\n    position: absolute;\n    top: -2px;\n    margin-left: -4px;\n    width: 8px;\n    height: 8px;\n    border: 2px solid #e9e9e9;\n    background-color: #fff;\n    cursor: pointer;\n    border-radius: 50%;\n    vertical-align: middle;\n    &:first-child {\n      margin-left: -4px;\n    }\n    &:last-child {\n      margin-left: -4px;\n    }\n    &-active {\n      border-color: tint(@primary-color, 50%);\n    }\n  }\n\n  &-disabled {\n    background-color: #e9e9e9 !important;\n\n    .@{slider-prefix-cls}-track {\n      background-color: @slider-disabled-color !important;\n    }\n\n    .@{slider-prefix-cls}-handle,\n    .@{slider-prefix-cls}-dot {\n      border-color: @slider-disabled-color!important;\n      background-color: #fff;\n      cursor: not-allowed;\n    }\n\n    .@{slider-prefix-cls}-mark-text,\n    .@{slider-prefix-cls}-dot {\n      cursor: not-allowed!important;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/slider/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@tooltip-prefix-cls: ~\""@{ant-prefix}-tooltip\"";\n\n// Base class\n.@{tooltip-prefix-cls} {\n  position: absolute;\n  z-index: @zindex-tooltip;\n  display: block;\n  visibility: visible;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n\n  &-hidden {\n    display: none;\n  }\n\n  &-placement-top,\n  &-placement-topLeft,\n  &-placement-topRight {\n    padding: @tooltip-arrow-width 0 @tooltip-distance 0;\n  }\n  &-placement-right,\n  &-placement-rightTop,\n  &-placement-rightBottom {\n    padding: 0 @tooltip-arrow-width 0 @tooltip-distance;\n  }\n  &-placement-bottom,\n  &-placement-bottomLeft,\n  &-placement-bottomRight {\n    padding: @tooltip-distance 0 @tooltip-arrow-width 0;\n  }\n  &-placement-left,\n  &-placement-leftTop,\n  &-placement-leftBottom {\n    padding: 0 @tooltip-distance 0 @tooltip-arrow-width;\n  }\n}\n\n// Wrapper for the tooltip content\n.@{tooltip-prefix-cls}-inner {\n  max-width: @tooltip-max-width;\n  padding: 8px 10px;\n  color: @tooltip-color;\n  text-align: left;\n  text-decoration: none;\n  background-color: @tooltip-bg;\n  border-radius: @border-radius-base;\n  box-shadow: @box-shadow-base;\n  min-height: 34px;\n}\n\n// Arrows\n.@{tooltip-prefix-cls}-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.@{tooltip-prefix-cls} {\n  &-placement-top &-arrow,\n  &-placement-topLeft &-arrow,\n  &-placement-topRight &-arrow {\n    bottom: @tooltip-distance - @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n\n  &-placement-top &-arrow {\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n  }\n\n  &-placement-topLeft &-arrow {\n    left: 16px;\n  }\n\n  &-placement-topRight &-arrow {\n    right: 16px;\n  }\n\n  &-placement-right &-arrow,\n  &-placement-rightTop &-arrow,\n  &-placement-rightBottom &-arrow {\n    left: @tooltip-distance - @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-right-color: @tooltip-arrow-color;\n  }\n\n  &-placement-right &-arrow {\n    top: 50%;\n    margin-top: -@tooltip-arrow-width;\n  }\n\n  &-placement-rightTop &-arrow {\n    top: 8px;\n  }\n\n  &-placement-rightBottom &-arrow {\n    bottom: 8px;\n  }\n\n  &-placement-left &-arrow,\n  &-placement-leftTop &-arrow,\n  &-placement-leftBottom &-arrow {\n    right: @tooltip-distance - @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-left-color: @tooltip-arrow-color;\n  }\n\n  &-placement-left &-arrow {\n    top: 50%;\n    margin-top: -@tooltip-arrow-width;\n  }\n\n  &-placement-leftTop &-arrow {\n    top: 8px;\n  }\n\n  &-placement-leftBottom &-arrow {\n    bottom: 8px;\n  }\n\n  &-placement-bottom &-arrow,\n  &-placement-bottomLeft &-arrow,\n  &-placement-bottomRight &-arrow {\n    top: @tooltip-distance - @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n\n  &-placement-bottom &-arrow {\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n  }\n\n  &-placement-bottomLeft &-arrow {\n    left: 16px;\n  }\n\n  &-placement-bottomRight &-arrow {\n    right: 16px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tooltip/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@spin-prefix-cls: ~\""@{ant-prefix}-spin\"";\n@spin-dot-default: @text-color-secondary;\n@spin-dot-size-sm: 14px;\n@spin-dot-size: 20px;\n@spin-dot-size-lg: 30px;\n\n.@{spin-prefix-cls} {\n  color: @primary-color;\n  vertical-align: middle;\n  text-align: center;\n  opacity: 0;\n  position: absolute;\n  transition: transform 0.3s @ease-in-out-circ;\n  font-size: @font-size-base;\n  display: none;\n\n  &-spinning {\n    opacity: 1;\n    position: static;\n    display: inline-block;\n  }\n\n  &-nested-loading {\n    position: relative;\n  }\n\n  &-nested-loading & {\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    z-index: 4;\n    &-dot {\n      position: absolute;\n      top: 50%;\n      left: 50%;\n      margin: -@spin-dot-size / 2;\n    }\n\n    &-sm .@{spin-prefix-cls}-dot {\n      margin: -@spin-dot-size-sm / 2;\n    }\n    &-lg .@{spin-prefix-cls}-dot {\n      margin: -@spin-dot-size-lg / 2;\n    }\n\n    &-show-text .@{spin-prefix-cls}-dot {\n      margin: -@spin-dot-size / 2 - @font-size-base / 2;\n    }\n\n    &-show-text.@{spin-prefix-cls}-sm .@{spin-prefix-cls}-dot {\n      margin: -@spin-dot-size-sm / 2 - @font-size-base / 2;\n    }\n\n    &-show-text.@{spin-prefix-cls}-lg .@{spin-prefix-cls}-dot {\n      margin: -@spin-dot-size-lg / 2 - @font-size-base / 2;\n    }\n\n    &-text {\n      position: absolute;\n      top: 50%;\n      width: 100%;\n      padding-top: (@spin-dot-size - @font-size-base) / 2;\n    }\n    &-sm .@{spin-prefix-cls}-text {\n      padding-top: (@spin-dot-size-sm - @font-size-base) / 2;\n    }\n    &-lg .@{spin-prefix-cls}-text {\n      padding-top: (@spin-dot-size-lg - @font-size-base) / 2;\n    }\n  }\n  &-container {\n    transition: all 0.3s @ease-in-out;\n    position: relative;\n  }\n\n  &-blur {\n    opacity: 0.7;\n    -webkit-filter: blur(1px);\n    filter: blur(1px);\n    filter: ~\""progid\\:DXImageTransform\\.Microsoft\\.Blur(PixelRadius\\=1, MakeShadow\\=false)\""; /* IE6~IE9 */\n    &:after {\n      content: '';\n      position: absolute;\n      left: 0;\n      right: 0;\n      top: 0;\n      bottom: 0;\n      background: transparent;\n    }\n  }\n\n  // tip\n  // ------------------------------\n  &-tip {\n    color: @spin-dot-default;\n  }\n\n  // dots\n  // ------------------------------\n\n  &-dot {\n    position: relative;\n    display: block;\n    .square(@spin-dot-size);\n    transform: rotate(45deg);\n    animation: antRotate 3.2s infinite linear;\n    i {\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      background-color: @primary-color;\n      transform: scale(0.6);\n      display: block;\n      position: absolute;\n      opacity: 0.3;\n      animation: antSpinMove .8s infinite linear alternate;\n      transform-origin: 0 0;\n      &:nth-child(1) {\n        left: 0;\n        top: 0;\n      }\n      &:nth-child(2) {\n        right: 0;\n        top: 0;\n        animation-delay: 0.4s;\n      }\n      &:nth-child(3) {\n        right: 0;\n        bottom: 0;\n        animation-delay: 0.8s;\n      }\n      &:nth-child(4) {\n        left: 0;\n        bottom: 0;\n        animation-delay: 1.2s;\n      }\n    }\n  }\n\n  // Sizes\n  // ------------------------------\n  // small\n  &-sm &-dot {\n    .square(@spin-dot-size-sm);\n    i {\n      width: 6px;\n      height: 6px;\n    }\n  }\n\n  // large\n  &-lg &-dot {\n    .square(@spin-dot-size-lg);\n    i {\n      width: 12px;\n      height: 12px;\n    }\n  }\n\n  &&-show-text &-text {\n    display: block;\n  }\n}\n\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  /* IE10+ */\n  .@{spin-prefix-cls}-blur {\n    background: #fff;\n    opacity: 0.5;\n  }\n}\n\n@keyframes antSpinMove {\n  to {\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n@keyframes antRotate {\n  to {\n    transform: rotate(405deg);\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/spin/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@steps-prefix-cls: ~\""@{ant-prefix}-steps\"";\n@process-icon-color: @primary-color;\n@process-title-color: @text-color;\n@process-description-color: @process-title-color;\n@process-tail-color: @border-color-split;\n@wait-icon-color: #ccc;\n@wait-title-color: @text-color-secondary;\n@wait-description-color: @wait-title-color;\n@wait-tail-color: @process-tail-color;\n@finish-icon-color: @process-icon-color;\n@finish-title-color: @wait-title-color;\n@finish-description-color: @finish-title-color;\n@finish-tail-color: @process-icon-color;\n@error-icon-color: @error-color;\n@error-title-color: @error-color;\n@error-description-color: @error-color;\n@error-tail-color: @error-color;\n\n.@{steps-prefix-cls} {\n  font-size: 0;\n  width: 100%;\n  line-height: 1.5;\n  .@{steps-prefix-cls}-item {\n    position: relative;\n    display: inline-block;\n    vertical-align: top;\n\n    &.@{steps-prefix-cls}-status-wait {\n      .@{steps-prefix-cls}-head-inner {\n        border-color: @wait-icon-color;\n        background-color: #fff;\n        > .@{steps-prefix-cls}-icon {\n          color: @wait-icon-color;\n        }\n      }\n      .@{steps-prefix-cls}-title {\n        color: @wait-title-color;\n      }\n      .@{steps-prefix-cls}-description {\n        color: @wait-description-color;\n      }\n      .@{steps-prefix-cls}-tail > i {\n        background-color: @wait-tail-color;\n      }\n    }\n    &.@{steps-prefix-cls}-status-process {\n      .@{steps-prefix-cls}-head-inner {\n        border-color: @process-icon-color;\n        background-color: @process-icon-color;\n        > .@{steps-prefix-cls}-icon {\n          color: #fff;\n        }\n      }\n      .@{steps-prefix-cls}-title {\n        color: @process-title-color;\n      }\n      .@{steps-prefix-cls}-description {\n        color: @process-description-color;\n      }\n      .@{steps-prefix-cls}-tail > i {\n        background-color: @process-tail-color;\n      }\n    }\n    &.@{steps-prefix-cls}-status-finish {\n      .@{steps-prefix-cls}-head-inner {\n        border-color: @finish-icon-color;\n        background-color: #fff;\n        > .@{steps-prefix-cls}-icon {\n          color: @finish-icon-color;\n        }\n      }\n      .@{steps-prefix-cls}-tail > i:after {\n        width: 100%;\n        background: @finish-tail-color;\n        transition: all 0.4s ease;\n        opacity: 1;\n      }\n      .@{steps-prefix-cls}-title {\n        color: @finish-title-color;\n      }\n      .@{steps-prefix-cls}-description {\n        color: @finish-description-color;\n      }\n    }\n\n    &.@{steps-prefix-cls}-status-error {\n      .@{steps-prefix-cls}-head-inner {\n        border-color: @error-icon-color;\n        background-color: #fff;\n        > .@{steps-prefix-cls}-icon {\n          color: @error-icon-color;\n        }\n      }\n      .@{steps-prefix-cls}-title {\n        color: @error-title-color;\n      }\n      .@{steps-prefix-cls}-description {\n        color: @error-description-color;\n      }\n      .@{steps-prefix-cls}-tail > i {\n        background-color: @process-tail-color;\n      }\n    }\n\n    &.@{steps-prefix-cls}-next-error {\n      .@{steps-prefix-cls}-tail > i,\n      .@{steps-prefix-cls}-tail > i:after {\n        background-color: @error-tail-color;\n      }\n    }\n\n    &.@{steps-prefix-cls}-custom {\n      .@{steps-prefix-cls}-head-inner {\n        background: none;\n        border: 0;\n        width: auto;\n        height: auto;\n        > .@{steps-prefix-cls}-icon {\n          font-size: 20px;\n          top: 2px;\n          width: 20px;\n          height: 20px;\n        }\n      }\n      &.@{steps-prefix-cls}-status-process {\n        .@{steps-prefix-cls}-head-inner > .@{steps-prefix-cls}-icon {\n          color: @process-icon-color;\n        }\n      }\n    }\n  }\n\n  .@{steps-prefix-cls}-head,\n  .@{steps-prefix-cls}-main {\n    position: relative;\n    display: inline-block;\n    vertical-align: top;\n  }\n  .@{steps-prefix-cls}-head {\n    background: #fff;\n  }\n\n  .@{steps-prefix-cls}-head-inner {\n    display: block;\n    border: 1px solid @wait-icon-color;\n    width: 26px;\n    height: 26px;\n    line-height: 23px;\n    text-align: center;\n    border-radius: 26px;\n    font-size: @font-size-lg;\n    margin-right: 8px;\n    transition: background-color 0.3s ease, border-color 0.3s ease;\n\n    > .@{steps-prefix-cls}-icon {\n      line-height: 1;\n      color: @primary-color;\n      position: relative;\n      &.@{iconfont-css-prefix} {\n        font-size: @font-size-base;\n        &-cross,\n        &-check {\n          font-weight: bold;\n        }\n      }\n    }\n  }\n  .@{steps-prefix-cls}-main {\n    margin-top: 2.5px;\n  }\n  .@{steps-prefix-cls}-title {\n    font-size: @font-size-lg;\n    margin-bottom: 4px;\n    color: @text-color;\n    font-weight: bold;\n    background: #fff;\n    display: inline-block;\n    padding-right: 10px;\n    > a:first-child:last-child {\n      color: @text-color;\n    }\n  }\n  .@{steps-prefix-cls}-item-last {\n    .@{steps-prefix-cls}-title {\n      padding-right: 0;\n      width: 100%;\n    }\n  }\n  .@{steps-prefix-cls}-description {\n    font-size: @font-size-base;\n    color: @text-color-secondary;\n  }\n  .@{steps-prefix-cls}-tail {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    top: 13px;\n    padding: 0 10px;\n    > i {\n      display: inline-block;\n      vertical-align: top;\n      background: @wait-tail-color;\n      height: 1px;\n      border-radius: 1px;\n      width: 100%;\n      position: relative;\n      &:after {\n        position: absolute;\n        content: '';\n        top: 0;\n        width: 0;\n        background: @border-color-split;\n        height: 100%;\n        opacity: 0;\n      }\n    }\n  }\n\n  &.@{steps-prefix-cls}-small {\n    .@{steps-prefix-cls}-head-inner {\n      border: 1px solid @wait-icon-color;\n      width: 18px;\n      height: 18px;\n      line-height: 15px;\n      text-align: center;\n      border-radius: 18px;\n      font-size: @font-size-base;\n      margin-right: 10px;\n      > .@{steps-prefix-cls}-icon.@{iconfont-css-prefix} {\n        .iconfont-size-under-12px(9px);\n        top: 0;\n      }\n    }\n    .@{steps-prefix-cls}-main {\n      margin-top: 0;\n    }\n    .@{steps-prefix-cls}-title {\n      font-size: @font-size-base;\n      margin-bottom: 4px;\n      color: @text-color;\n      font-weight: bold;\n    }\n    .@{steps-prefix-cls}-description {\n      font-size: @font-size-base;\n      color: @text-color-secondary;\n    }\n    .@{steps-prefix-cls}-tail {\n      top: 8px;\n      padding: 0 8px;\n      > i {\n        height: 1px;\n        border-radius: 1px;\n        width: 100%;\n      }\n    }\n  }\n\n  &.@{steps-prefix-cls}-small .@{steps-prefix-cls}-item.@{steps-prefix-cls}-custom .@{steps-prefix-cls}-head-inner,\n  .@{steps-prefix-cls}-item.@{steps-prefix-cls}-custom .@{steps-prefix-cls}-head-inner {\n    width: inherit;\n    height: inherit;\n    line-height: inherit;\n    border-radius: 0;\n    border: 0;\n    background: none;\n  }\n}\n\n.@{steps-prefix-cls}-vertical {\n  .@{steps-prefix-cls}-item {\n    display: block;\n  }\n\n  .@{steps-prefix-cls}-tail {\n    position: absolute;\n    left: 13px;\n    top: 0;\n    height: 100%;\n    width: 1px;\n    padding: 30px 0 4px 0;\n    > i {\n      height: 100%;\n      width: 1px;\n      &:after {\n        height: 0;\n        width: 100%;\n      }\n    }\n  }\n\n  .@{steps-prefix-cls}-status-finish {\n    .@{steps-prefix-cls}-tail > i:after {\n      height: 100%;\n    }\n  }\n\n  .@{steps-prefix-cls}-head {\n    float: left;\n    &-inner {\n      margin-right: 16px;\n    }\n  }\n\n  .@{steps-prefix-cls}-main {\n    min-height: 47px;\n    overflow: hidden;\n    display: block;\n    .@{steps-prefix-cls}-title {\n      line-height: 26px;\n    }\n    .@{steps-prefix-cls}-description {\n      padding-bottom: 12px;\n    }\n  }\n}\n\n.@{steps-prefix-cls}-vertical.@{steps-prefix-cls}-small {\n  .@{steps-prefix-cls}-tail {\n    position: absolute;\n    left: 9px;\n    top: 0;\n    padding: 22px 0 4px 0;\n    > i {\n      height: 100%;\n    }\n  }\n\n  .@{steps-prefix-cls}-title {\n    line-height: 18px;\n  }\n}\n\n.@{steps-prefix-cls}-horizontal {\n   &.@{steps-prefix-cls}-hidden {\n     visibility: hidden;\n  }\n  .@{steps-prefix-cls}-description {\n    max-width: 100px;\n  }\n  .@{steps-prefix-cls}-item:not(:first-child) .@{steps-prefix-cls}-head {\n    padding-left: 10px;\n    margin-left: -10px;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/steps/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@switch-prefix-cls: ~\""@{ant-prefix}-switch\"";\n@switch-duration: .3s;\n\n.@{switch-prefix-cls} {\n  position: relative;\n  display: inline-block;\n  box-sizing: border-box;\n  height: 22px;\n  min-width: 44px;\n  line-height: 20px;\n  vertical-align: middle;\n  border-radius: 20px;\n  border: 1px solid #ccc;\n  background-color: #ccc;\n  cursor: pointer;\n  transition: all @switch-duration;\n  user-select: none;\n\n  &-inner {\n    color: #fff;\n    font-size: @font-size-base;\n    margin-left: 24px;\n    margin-right: 6px;\n    display: block;\n  }\n\n  &:after {\n    position: absolute;\n    width: 18px;\n    height: 18px;\n    left: 1px;\n    top: 1px;\n\n    border-radius: 18px;\n    background-color: #fff;\n    content: \"" \"";\n    cursor: pointer;\n    transition: all @switch-duration, width @switch-duration;\n  }\n\n  &:active:after {\n    width: 24px;\n  }\n\n  &:focus {\n    box-shadow: 0 0 0 2px fade(@primary-color, 20%);\n    outline: 0;\n  }\n\n  &:focus:hover {\n    box-shadow: none;\n  }\n\n  &-small {\n    height: 14px;\n    min-width: 28px;\n    line-height: 12px;\n\n    .@{switch-prefix-cls}-inner {\n      margin-left: 18px;\n      margin-right: 3px;\n    }\n\n    &:after {\n      width: 12px;\n      height: 12px;\n      top: 0;\n      left: 0.5px;\n    }\n\n    &:active:after {\n      width: 16px;\n    }\n  }\n\n  &-small&-checked {\n    &:after {\n      left: 100%;\n      margin-left: -12.5px;\n    }\n\n    .@{switch-prefix-cls}-inner {\n      margin-left: 3px;\n      margin-right: 18px;\n    }\n  }\n\n  &-small:active&-checked:after {\n    margin-left: -16.5px;\n  }\n\n  &-checked {\n    border-color: @primary-color;\n    background-color: @primary-color;\n\n    .@{switch-prefix-cls}-inner {\n      margin-left: 6px;\n      margin-right: 24px;\n    }\n\n    &:after {\n      left: 100%;\n      margin-left: -19px;\n    }\n\n    &:active:after {\n      margin-left: -25px;\n    }\n  }\n\n  &-disabled {\n    cursor: not-allowed;\n    background: #f4f4f4;\n    border-color: #f4f4f4;\n\n    &:after {\n      background: #ccc;\n      cursor: not-allowed;\n    }\n\n    .@{switch-prefix-cls}-inner {\n      color: #ccc;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/switch/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@table-prefix-cls: ~\""@{ant-prefix}-table\"";\n@table-head-background-color: @background-color-base;\n\n.@{table-prefix-cls} {\n  font-size: @font-size-base;\n  color: @text-color;\n  overflow: hidden;\n  position: relative;\n  border-radius: @border-radius-base @border-radius-base 0 0;\n  overflow: hidden;\n\n  &-body {\n    transition: opacity 0.3s ease;\n  }\n\n  table {\n    width: 100%;\n    border-collapse: separate;\n    border-spacing: 0;\n    text-align: left;\n    border-radius: @border-radius-base @border-radius-base 0 0;\n    overflow: hidden;\n  }\n\n  &-thead > tr > th {\n    background: @table-head-background-color;\n    font-weight: bold;\n    transition: background .3s ease;\n    text-align: left;\n\n    .@{iconfont-css-prefix}-filter {\n      margin-left: 4px;\n      font-size: @font-size-base;\n      cursor: pointer;\n      color: #aaa;\n      transition: all 0.3s ease;\n      &:hover {\n        color: @text-color;\n      }\n    }\n\n    .@{table-prefix-cls}-filter-selected.@{iconfont-css-prefix}-filter {\n      color: @primary-color;\n    }\n  }\n\n  &-tbody > tr > td {\n    border-bottom: 1px solid @border-color-split;\n    position: relative;\n  }\n\n  &-thead > tr,\n  &-tbody > tr {\n    transition: all .3s ease;\n    &.@{table-prefix-cls}-row-hover,\n    &:hover {\n      background: tint(@primary-color, 90%);\n    }\n  }\n\n  &-thead > tr:hover {\n    background: none;\n  }\n\n  &-footer {\n    padding: 16px 8px;\n    background: @table-head-background-color;\n    border-radius: 0 0 @border-radius-base @border-radius-base;\n    position: relative;\n    &:before {\n      content: '';\n      height: 1px;\n      background: @table-head-background-color;\n      position: absolute;\n      top: -1px;\n      width: 100%;\n      left: 0;\n    }\n  }\n\n  &.@{table-prefix-cls}-bordered &-footer {\n    border: 1px solid @border-color-split;\n  }\n\n  &-title {\n    padding: 16px 8px;\n    position: relative;\n    top: 1px;\n    border-radius: @border-radius-base @border-radius-base 0 0;\n  }\n\n  &.@{table-prefix-cls}-bordered &-title {\n    border: 1px solid @border-color-split;\n  }\n\n  &-title + &-content {\n    position: relative;\n    border-radius: 6px 6px 0 0;\n    overflow: hidden;\n    .@{table-prefix-cls}-bordered & {\n      &,\n      table {\n        border-radius: 0;\n      }\n    }\n  }\n\n  &-tbody > tr.@{table-prefix-cls}-row-selected {\n    background: #fafafa;\n  }\n\n  &-thead > tr > th.@{table-prefix-cls}-column-sort {\n    background: #eaeaea;\n  }\n\n  &-thead > tr > th,\n  &-tbody > tr > td {\n    padding: 16px 8px;\n    word-break: break-all;\n  }\n\n  &-thead > tr > th.@{table-prefix-cls}-selection-column,\n  &-tbody > tr > td.@{table-prefix-cls}-selection-column {\n    text-align: center;\n    width: 40px;\n  }\n\n  &-header {\n    background: @table-head-background-color;\n    overflow: hidden;\n  }\n\n  &-header table {\n    border-radius: @border-radius-base @border-radius-base 0 0;\n  }\n\n  &-loading {\n    position: relative;\n    .@{table-prefix-cls}-body {\n      background: #fff;\n      opacity: 0.5;\n    }\n    .@{table-prefix-cls}-spin-holder {\n      height: 20px;\n      line-height: 20px;\n      left: 50%;\n      top: 50%;\n      margin-left: -30px;\n      position: absolute;\n    }\n    .@{table-prefix-cls}-with-pagination {\n      margin-top: -20px;\n    }\n    .@{table-prefix-cls}-without-pagination {\n      margin-top: 10px;\n    }\n  }\n\n  &-middle {\n    .@{table-prefix-cls}-thead > tr > th,\n    .@{table-prefix-cls}-tbody > tr > td {\n      padding: 10px 8px;\n    }\n\n    .@{table-prefix-cls}-title,\n    .@{table-prefix-cls}-footer {\n      padding: 10px 8px;\n    }\n  }\n\n  &-small {\n    border: 1px solid @border-color-split;\n    border-radius: @border-radius-base;\n\n    .@{table-prefix-cls}-header > table,\n    .@{table-prefix-cls}-body > table {\n      border: 0;\n      padding: 0 8px;\n    }\n\n    .@{table-prefix-cls}-thead > tr > th {\n      background: #fff;\n      border-bottom: 1px solid @border-color-split;\n    }\n\n    .@{table-prefix-cls}-tbody > tr > td {\n      padding: 6px 8px;\n    }\n\n    .@{table-prefix-cls}-title,\n    .@{table-prefix-cls}-footer,\n    .@{table-prefix-cls}-thead > tr > th {\n      padding: 10px 8px;\n    }\n\n    .@{table-prefix-cls}-title {\n      border-bottom: 1px solid @border-color-split;\n      top: 0;\n    }\n\n    .@{table-prefix-cls}-header {\n      background: #fff;\n      table {\n        border-bottom: 1px solid @border-color-split;\n      }\n      .@{table-prefix-cls}-thead > tr > th {\n        border-bottom: 0;\n      }\n    }\n\n    .@{table-prefix-cls}-row:last-child td {\n      border-bottom: 0;\n    }\n  }\n\n  &-column-sorter {\n    margin-left: 4px;\n    display: inline-block;\n    width: 12px;\n    height: 14px;\n    vertical-align: middle;\n    text-align: center;\n    &-up,\n    &-down {\n      line-height: 4px;\n      height: 5px;\n      display: block;\n      width: 12px;\n      cursor: pointer;\n      &:hover .@{iconfont-css-prefix} {\n        color: @text-color;\n      }\n      &.on {\n        .@{iconfont-css-prefix}-caret-up,\n        .@{iconfont-css-prefix}-caret-down {\n          color: @primary-color;\n        }\n      }\n    }\n    .@{iconfont-css-prefix}-caret-up,\n    .@{iconfont-css-prefix}-caret-down {\n      .iconfont-size-under-12px(7px);\n      line-height: 6px;\n      height: 6px;\n      color: #aaa;\n      &:before {\n        -moz-transform-origin: 53% 50%; /* fix firefox position */\n      }\n    }\n  }\n\n  &-bordered {\n    .@{table-prefix-cls}-header > table,\n    .@{table-prefix-cls}-body > table,\n    .@{table-prefix-cls}-fixed-left table,\n    .@{table-prefix-cls}-fixed-right table {\n      border: 1px solid @border-color-split;\n      border-right: 0;\n      border-bottom: 0;\n    }\n\n    &.@{table-prefix-cls}-fixed-header {\n      .@{table-prefix-cls}-header > table {\n        border-bottom: 0;\n      }\n\n      .@{table-prefix-cls}-body > table {\n        border-top: 0;\n        border-top-left-radius: 0;\n        border-top-right-radius: 0;\n      }\n\n      .@{table-prefix-cls}-body-inner > table {\n        border-top: 0;\n      }\n\n      .@{table-prefix-cls}-placeholder {\n        border-bottom: 0;\n      }\n    }\n\n    .@{table-prefix-cls}-thead > tr > th {\n      border-bottom: 1px solid @border-color-split;\n    }\n\n    &.@{table-prefix-cls}-empty .@{table-prefix-cls}-thead > tr > th {\n      border-bottom: 0;\n    }\n\n    .@{table-prefix-cls}-thead > tr > th,\n    .@{table-prefix-cls}-tbody > tr > td {\n      border-right: 1px solid @border-color-split;\n    }\n\n    &.@{table-prefix-cls}-small {\n      border-right: 0;\n\n      .@{table-prefix-cls}-header > table,\n      .@{table-prefix-cls}-body > table,\n      .@{table-prefix-cls}-fixed-left table,\n      .@{table-prefix-cls}-fixed-right table {\n        border: 0;\n        padding: 0;\n      }\n\n      .@{table-prefix-cls}-title {\n        border: 0;\n        border-bottom: 1px solid @border-color-split;\n      }\n\n      .@{table-prefix-cls}-footer {\n        border: 0;\n        border-top: 1px solid @border-color-split;\n      }\n    }\n  }\n\n  &-placeholder {\n    padding: 16px 8px;\n    background: #fff;\n    border-bottom: 1px solid @border-color-split;;\n    text-align: center;\n    position: relative;\n    z-index: 2;\n    font-size: @font-size-base;\n    color: @text-color-secondary;\n    .@{iconfont-css-prefix} {\n      margin-right: 4px;\n    }\n  }\n\n  &-pagination {\n    margin: 16px 0;\n    float: right;\n  }\n\n  &-filter-dropdown {\n    min-width: 96px;\n    margin-left: -8px;\n    background: #fff;\n    border-radius: @border-radius-base;\n    box-shadow: @box-shadow-base;\n\n    .@{ant-prefix}-dropdown-menu {\n      border: 0;\n      box-shadow: none;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n\n      &-item > label + span {\n        margin-left: 8px;\n      }\n\n      &-sub {\n        border-radius: @border-radius-base;\n        box-shadow: @box-shadow-base;\n      }\n\n      .@{ant-prefix}-dropdown-submenu-contain-selected {\n        .@{ant-prefix}-dropdown-menu-submenu-title:after {\n          color: @primary-color;\n          font-weight: bold;\n          text-shadow: 0 0 2px tint(@primary-color, 80%);\n        }\n      }\n    }\n\n    .@{ant-prefix}-dropdown-menu-item {\n      overflow: hidden;\n    }\n\n    > .@{ant-prefix}-dropdown-menu > .@{ant-prefix}-dropdown-menu-item:last-child,\n    > .@{ant-prefix}-dropdown-menu > .@{ant-prefix}-dropdown-menu-submenu:last-child .@{ant-prefix}-dropdown-menu-submenu-title {\n      border-radius: 0;\n    }\n\n    &-btns {\n      overflow: hidden;\n      padding: 7px 16px;\n      border-top: 1px solid @border-color-split;\n    }\n\n    &-link {\n      color: @link-color;\n      &:hover {\n        color: @link-hover-color;\n      }\n      &:active {\n        color: @link-active-color;\n      }\n      &.confirm {\n        float: left;\n      }\n      &.clear {\n        float: right;\n      }\n    }\n  }\n\n  &-expand-icon-th {\n    width: 40px;\n  }\n\n  &-row {\n    &-expand-icon {\n      cursor: pointer;\n      display: inline-block;\n      width: 17px;\n      height: 17px;\n      text-align: center;\n      line-height: 14px;\n      border: 1px solid @border-color-split;\n      user-select: none;\n      background: #fff;\n      &-cell {\n        width: 18px;\n      }\n    }\n\n    &-expanded:after {\n      content: '-';\n    }\n\n    &-collapsed:after {\n      content: '+';\n    }\n\n    &-spaced {\n      visibility: hidden;\n      &:after {\n        content: '.';\n      }\n    }\n\n    &[class*=\""@{table-prefix-cls}-row-level-0\""] .@{table-prefix-cls}-selection-column > span {\n      display: inline-block;\n    }\n  }\n\n  tr&-expanded-row {\n    &,\n    &:hover {\n      background: #fbfbfb;\n    }\n  }\n\n  .@{table-prefix-cls}-row-indent + .@{table-prefix-cls}-row-expand-icon {\n    margin-right: 8px;\n  }\n\n  &-scroll {\n    overflow: auto;\n    table {\n      width: auto;\n      min-width: 100%;\n    }\n  }\n\n  &-body-inner {\n    height: 100%;\n  }\n\n  &-fixed-header &-body {\n    position: relative;\n    background: #fff;\n  }\n\n  &-fixed-header &-body-inner {\n    overflow: scroll;\n  }\n\n  &-fixed-header &-scroll &-header {\n    overflow: scroll;\n    padding-bottom: 20px;\n    margin-bottom: -20px;\n  }\n\n  /* fix firefox scrollbar bug */\n  &-fixed-header&-empty &-scroll &-body {\n    padding-bottom: 20px;\n    margin-bottom: -20px;\n  }\n\n  &-fixed-left,\n  &-fixed-right {\n    position: absolute;\n    top: 0;\n    overflow: hidden;\n    z-index: 1;\n    transition: box-shadow .3s ease;\n    border-radius: 0;\n    table {\n      width: auto;\n      background: #fff;\n    }\n  }\n\n  &-fixed-header &-fixed-left &-body-outer &-fixed,\n  &-fixed-header &-fixed-right &-body-outer &-fixed {\n    border-radius: 0;\n  }\n\n  &-fixed-left {\n    left: 0;\n    box-shadow: @shadow-1-right;\n    .@{table-prefix-cls}-header {\n      overflow-y: hidden;\n    }\n    // hide scrollbar in left fixed columns\n    .@{table-prefix-cls}-body-inner {\n      margin-right: -20px;\n      padding-right: 20px;\n    }\n    .@{table-prefix-cls}-fixed-header & .@{table-prefix-cls}-body-inner {\n      padding-right: 0;\n    }\n    &,\n    table {\n      border-radius: @border-radius-base 0 0 0;\n    }\n  }\n\n  &-fixed-right {\n    right: 0;\n    box-shadow: @shadow-1-left;\n    &,\n    table {\n      border-radius: 0 @border-radius-base 0 0;\n    }\n    // hide expand row content in right-fixed Table\n    // https://github.com/ant-design/ant-design/issues/1898\n    .@{table-prefix-cls}-expanded-row {\n      color: transparent;\n      pointer-events: none;\n    }\n  }\n\n  &&-scroll-position-left &-fixed-left {\n    box-shadow: none;\n  }\n\n  &&-scroll-position-right &-fixed-right {\n    box-shadow: none;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/table/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@tab-prefix-cls: ~\""@{ant-prefix}-tabs\"";\n\n.@{tab-prefix-cls} {\n  box-sizing: border-box;\n  position: relative;\n  overflow: hidden;\n  .clearfix;\n  color: @text-color;\n\n  &-bar {\n    outline: none;\n  }\n\n  &-ink-bar {\n    z-index: 1;\n    position: absolute;\n    left: 0;\n    bottom: 1px;\n    box-sizing: border-box;\n    height: 2px;\n    background-color: @primary-color;\n    transition: transform 0.3s @ease-in-out;\n    transform-origin: 0 0;\n  }\n\n  &-bar {\n    border-bottom: 1px solid @border-color-base;\n    margin-bottom: 16px;\n  }\n\n  &-nav-container {\n    overflow: hidden;\n    font-size: @font-size-lg;\n    line-height: @line-height-base;\n    box-sizing: border-box;\n    position: relative;\n    white-space: nowrap;\n    margin-bottom: -1px;\n    .clearfix;\n  }\n\n  &-nav-container-scrolling {\n    padding-left: 32px;\n    padding-right: 32px;\n  }\n\n  &-tab-prev,\n  &-tab-next {\n    user-select: none;\n    z-index: 2;\n    margin-right: -2px;\n    margin-top: 3px;\n    width: 32px;\n    height: 100%;\n    line-height: 32px;\n    cursor: pointer;\n    border: 0;\n    background-color: transparent;\n    position: absolute;\n    text-align: center;\n    color: @text-color-secondary;\n    transition: color 0.3s ease;\n\n    &:hover {\n      color: @text-color;\n    }\n\n    &-icon {\n      position: relative;\n      display: inline-block;\n      font-style: normal;\n      font-weight: bold;\n      font-variant: normal;\n      line-height: inherit;\n      vertical-align: baseline;\n      text-align: center;\n      text-transform: none;\n      font-family: sans-serif;\n      .iconfont-size-under-12px(10px);\n\n      &:before {\n        display: block;\n        font-family: \""anticon\"" !important;\n      }\n    }\n  }\n\n  &-tab-btn-disabled {\n    cursor: not-allowed;\n    &,\n    &:hover {\n      color: #ccc;\n    }\n  }\n\n  &-tab-next {\n    right: 2px;\n\n    &-icon:before {\n      content: \""\\e61f\"";\n    }\n  }\n\n  &-tab-prev {\n    left: 0;\n    &-icon:before {\n      content: \""\\e620\"";\n    }\n    :root & {\n      filter: none;\n    }\n  }\n\n  &-nav-wrap {\n    overflow: hidden;\n    margin-bottom: -1px;\n  }\n\n  &-nav-scroll {\n    overflow: hidden;\n    white-space: nowrap;\n  }\n\n  &-nav {\n    box-sizing: border-box;\n    padding-left: 0;\n    transition: transform 0.5s @ease-in-out;\n    position: relative;\n    margin: 0;\n    list-style: none;\n    float: left;\n\n    &:before,\n    &:after {\n      display: table;\n      content: \"" \"";\n    }\n\n    &:after {\n      clear: both;\n    }\n\n    .@{tab-prefix-cls}-tab-disabled {\n      pointer-events: none;\n      cursor: default;\n      color: #ccc;\n    }\n\n    .@{tab-prefix-cls}-tab {\n      display: inline-block;\n      height: 100%;\n      margin-right: 24px;\n      box-sizing: border-box;\n      position: relative;\n\n      padding: 8px 20px;\n      transition: color 0.3s @ease-in-out;\n      cursor: pointer;\n      text-decoration: none;\n\n      &:hover {\n        color: tint(@primary-color, 20%);\n      }\n\n      &:active {\n        color: shade(@primary-color, 5%);\n      }\n      .@{iconfont-css-prefix} {\n        width: 14px;\n        height: 14px;\n        margin-right: 8px;\n      }\n    }\n\n    .@{tab-prefix-cls}-tab-active {\n      color: @primary-color;\n    }\n  }\n\n  &-mini &-nav-container {\n    font-size: @font-size-base;\n  }\n\n  &-mini &-tab {\n    margin-right: 0;\n    padding: 8px 16px;\n  }\n\n  &:not(&-vertical) {\n    .@{tab-prefix-cls}-content-animated {\n      display: flex;\n      flex-direction: row;\n      will-change: transform;\n      transition: transform 0.3s @ease-in-out;\n    }\n\n    .@{tab-prefix-cls}-tabpane {\n      flex-shrink: 0;\n      width: 100%;\n      transition: opacity 0.3s;\n      opacity: 1;\n    }\n\n    .@{tab-prefix-cls}-tabpane-inactive {\n      opacity: 0;\n      height: 0;\n    }\n  }\n\n  &-vertical {\n    > .@{tab-prefix-cls}-bar {\n      border-bottom: 0;\n\n      .@{tab-prefix-cls}-tab {\n        float: none;\n        margin-right: 0;\n        margin-bottom: 16px;\n        display: block;\n        padding: 8px 24px;\n\n        &:last-child {\n          margin-bottom: 0;\n        }\n      }\n\n      .@{tab-prefix-cls}-nav-scroll {\n        width: auto;\n      }\n\n      .@{tab-prefix-cls}-nav-container {\n        margin-bottom: 0;\n      }\n\n      .@{tab-prefix-cls}-nav-wrap {\n        margin-bottom: 0;\n      }\n\n      .@{tab-prefix-cls}-ink-bar {\n        width: 2px;\n        left: auto;\n        height: auto;\n        top: 0;\n      }\n    }\n\n    > .@{tab-prefix-cls}-content {\n      overflow: hidden;\n      width: auto;\n    }\n  }\n\n  &-vertical&-left {\n    > .@{tab-prefix-cls}-bar {\n      float: left;\n      border-right: 1px solid @border-color-split;\n      margin-right: -1px;\n      margin-bottom: 0;\n      .@{tab-prefix-cls}-tab {\n        text-align: right;\n      }\n      .@{tab-prefix-cls}-nav-container {\n        margin-right: -1px;\n      }\n      .@{tab-prefix-cls}-nav-wrap {\n        margin-right: -1px;\n      }\n      .@{tab-prefix-cls}-ink-bar {\n        right: 1px;\n      }\n    }\n    > .@{tab-prefix-cls}-content {\n      padding-left: 24px;\n      border-left: 1px solid @border-color-split;\n    }\n  }\n\n  &-vertical&-right {\n    > .@{tab-prefix-cls}-bar {\n      float: right;\n      border-left: 1px solid @border-color-split;\n      margin-left: -1px;\n      margin-bottom: 0;\n      .@{tab-prefix-cls}-nav-container {\n        margin-left: -1px;\n      }\n      .@{tab-prefix-cls}-nav-wrap {\n        margin-left: -1px;\n      }\n      .@{tab-prefix-cls}-ink-bar {\n        left: 1px;\n      }\n    }\n    > .@{tab-prefix-cls}-content {\n      padding-right: 24px;\n      border-right: 1px solid @border-color-split;\n    }\n  }\n\n  &-bottom > &-bar {\n    margin-bottom: 0;\n    margin-top: 16px;\n  }\n\n  // card style\n  &&-card > &-bar &-nav-container {\n    height: 32px;\n  }\n  &&-card > &-bar &-ink-bar {\n    visibility: hidden;\n  }\n  &&-card > &-bar &-tab {\n    margin: 0;\n    border: 1px solid @border-color-base;\n    border-bottom: 0;\n    border-radius: 6px 6px 0 0;\n    transition: all 0.3s @ease-in-out;\n    background: #f9f9f9;\n    margin-right: 2px;\n  }\n  &&-card > &-bar &-tab {\n    padding: 5px 16px 4px;\n    transition: all 0.3s @ease-in-out;\n  }\n  &&-card > &-bar &-tab-active {\n    background: #fff;\n    transform: translateZ(0);\n    border-color: @border-color-base;\n    color: @primary-color;\n  }\n  &&-card > &-bar &-tab-active {\n    padding-bottom: 5px;\n    transform: translateZ(0);\n  }\n  &&-card > &-bar &-nav-wrap {\n    margin-bottom: 0;\n  }\n  &&-card > &-bar &-tab .@{iconfont-css-prefix}-close {\n    margin-right: 0;\n    color: @text-color-secondary;\n    transition: all 0.3s @ease-in-out;\n    .iconfont-size-under-12px(9px);\n    transform-origin: 100% 50%;\n    width: 0;\n    text-align: right;\n    vertical-align: middle;\n    overflow: hidden;\n    &:hover {\n      color: #404040;\n      font-weight: bold;\n    }\n  }\n\n  &&-editable-card > &-bar &-tab:not(&-tab-active):hover {\n    padding-left: 8px;\n    padding-right: 8px;\n  }\n\n  &&-card > &-bar &-tab-active .@{iconfont-css-prefix}-close,\n  &&-card > &-bar &-tab:hover .@{iconfont-css-prefix}-close {\n    width: 16px;\n    transform: translateZ(0);\n  }\n\n  &-extra-content {\n    float: right;\n    line-height: 32px;\n\n    .@{tab-prefix-cls}-new-tab {\n      width: 20px;\n      height: 20px;\n      line-height: 20px;\n      text-align: center;\n      cursor: pointer;\n      border-radius: 3px;\n      border: 1px solid @border-color-base;\n      font-size: @font-size-base;\n      .iconfont-size-under-12px(10px);\n      color: @text-color-secondary;\n      transition: color 0.3s ease;\n      &:hover {\n        color: #404040;\n      }\n    }\n  }\n}\n\n.no-flex,\n.@{tab-prefix-cls}-no-animation,\n.@{tab-prefix-cls}-vertical {\n  .@{tab-prefix-cls}-content {\n    &-animated {\n      transform: none!important;\n    }\n\n    > .@{tab-prefix-cls}-tabpane-inactive {\n      display: none;\n    }\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tabs/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@tag-prefix-cls: ~\""@{ant-prefix}-tag\"";\n\n.@{tag-prefix-cls} {\n  display: inline-block;\n  line-height: 20px;\n  height: 22px;\n  padding: 0 8px;\n  border-radius: @border-radius-base;\n  border: 1px solid @border-color-split;\n  background: @background-color-base;\n  font-size: @font-size-base;\n  transition: all 0.3s @ease-in-out-circ;\n  vertical-align: middle;\n  opacity: 1;\n  overflow: hidden;\n  margin: 4px 8px 4px 0;\n  cursor: pointer;\n\n  &:hover {\n    opacity: 0.85;\n  }\n\n  &,\n  a,\n  a:hover {\n    color: @text-color;\n  }\n\n  &-text {\n    a:first-child:last-child {\n      display: inline-block;\n      margin: 0 -8px;\n      padding: 0 8px;\n    }\n  }\n\n  .@{iconfont-css-prefix}-cross {\n    .iconfont-size-under-12px(10px);\n    cursor: pointer;\n    font-weight: bold;\n    margin-left: 3px;\n    color: @text-color;\n    transition: all 0.3s ease;\n    opacity: 0.66;\n\n    &:hover {\n      opacity: 1;\n    }\n  }\n\n  &-has-color {\n    border-color: transparent;\n    &,\n    a,\n    a:hover,\n    .@{iconfont-css-prefix}-cross,\n    .@{iconfont-css-prefix}-cross:hover {\n      color: #fff;\n    }\n  }\n\n  &-blue {\n    background: @link-color;\n  }\n\n  &-green {\n    background: @success-color;\n  }\n\n  &-yellow {\n    background: @warning-color;\n  }\n\n  &-red {\n    background: @error-color;\n  }\n\n  &-checkable {\n    background-color: transparent;\n    border-color: transparent;\n\n    &:hover,\n    &:active,\n    &-checked {\n      color: #fff;\n    }\n    &:hover {\n      background-color: tint(@primary-color, 20%);\n    }\n    &:active,\n    &-checked {\n      background-color: shade(@primary-color, 5%);\n    }\n  }\n\n  &-close {\n    width: 0 !important;\n    padding: 0;\n    margin: 0;\n  }\n\n  &-zoom-enter,\n  &-zoom-appear {\n    animation: antFadeIn .2s @ease-in-out-circ;\n    animation-fill-mode: both;\n  }\n\n  &-zoom-leave {\n    animation: antZoomOut .3s @ease-in-out-circ;\n    animation-fill-mode: both;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tag/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@timeline-prefix-cls: ~\""@{ant-prefix}-timeline\"";\n@timeline-color: @border-color-split;\n\n.@{timeline-prefix-cls} {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n\n  &-item {\n    position: relative;\n    padding: 0 0 12px 0;\n    list-style: none;\n    margin: 0;\n\n    &-tail {\n      position: absolute;\n      left: 5px;\n      top: 0;\n      height: 100%;\n      border-left: 2px solid @timeline-color;\n    }\n\n    &-pending &-tail {\n      display: none;\n    }\n\n    &-head {\n      position: absolute;\n      width: 12px;\n      height: 12px;\n      background-color: #fff;\n      border-radius: 100px;\n      border: 2px solid transparent;\n      &-blue {\n        border-color: @primary-color;\n        color: @primary-color;\n      }\n      &-red {\n        border-color: @error-color;\n        color: @error-color;\n      }\n      &-green {\n        border-color: @success-color;\n        color: @success-color;\n      }\n    }\n\n    &-head-custom {\n      position: absolute;\n      text-align: center;\n      width: 40px;\n      left: -14px;\n      line-height: 1;\n      margin-top: 6px;\n      border: 0;\n      height: auto;\n      border-radius: 0;\n      padding: 3px 0;\n      font-size: @font-size-base;\n      transform: translateY(-50%);\n    }\n\n    &-content {\n      padding: 0 0 10px 24px;\n      font-size: @font-size-base;\n      position: relative;\n      top: -3px;\n    }\n\n    &-last {\n      .@{timeline-prefix-cls}-item-tail {\n        border-left: 2px dotted @timeline-color;\n        display: none;\n      }\n      .@{timeline-prefix-cls}-item-content {\n        min-height: 48px;\n      }\n    }\n  }\n\n  &&-pending &-item-last &-item-tail {\n    display: block;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/timeline/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../checkbox/style/mixin\"";\n\n@transfer-prefix-cls: ~\""@{ant-prefix}-transfer\"";\n.antCheckboxFn(@checkbox-prefix-cls: ~\""@{ant-prefix}-transfer-checkbox\"");\n\n.@{transfer-prefix-cls} {\n  position: relative;\n  line-height: @line-height-base;\n\n  &-list {\n    font-size: @font-size-base;\n    border: 1px solid @border-color-base;\n    display: inline-block;\n    border-radius: @border-radius-base;\n    vertical-align: middle;\n    position: relative;\n    width: 180px;\n    height: 200px;\n    padding-top: 33px;\n\n    &-with-footer {\n      padding-bottom: 33px;\n    }\n\n    &-search {\n      &-action {\n        color: #ccc;\n        position: absolute;\n        top: 2px;\n        right: 2px;\n        width: 32px;\n        height: 32px;\n        line-height: 32px;\n        text-align: center;\n        font-size: @font-size-lg;\n        .@{iconfont-css-prefix} {\n          transition: all .3s;\n          font-size: @font-size-base;\n          color: #ccc;\n          &:hover {\n            color: @text-color-secondary;\n          }\n        }\n      }\n    }\n\n    &-header {\n      padding: 7px 15px;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      background: #fff;\n      color: @text-color;\n      border-bottom: 1px solid @border-color-split;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n\n      &-title {\n        position: absolute;\n        right: 15px;\n      }\n    }\n\n    &-body {\n      font-size: @font-size-base;\n      position: relative;\n      height: 100%;\n\n      &-search-wrapper {\n        position: absolute;\n        top: 0;\n        left: 0;\n        height: 28px;\n        padding: 4px;\n        width: 100%;\n      }\n    }\n\n    &-body-with-search {\n      padding-top: 34px;\n    }\n\n    &-content {\n      height: 100%;\n      overflow: auto;\n      &-item {\n        overflow: hidden;\n        white-space: nowrap;\n        text-overflow: ellipsis;\n        padding: 7px 15px;\n        min-height: 32px;\n        transition: all 0.3s ease;\n      }\n\n      &-item:not(&-item-disabled):hover {\n        cursor: pointer;\n        background-color: tint(@primary-color, 90%);\n      }\n\n      &-item-disabled {\n        cursor: not-allowed;\n        color: @btn-disable-color;\n      }\n\n      &-item-highlight-enter {\n        animation: transferHighlightIn 1s ease;\n        transition: none;\n      }\n    }\n\n    &-body-not-found {\n      padding-top: 0;\n      color: #ccc;\n      text-align: center;\n      display: none;\n      position: absolute;\n      top: 50%;\n      width: 100%;\n      margin-top: -10px;\n    }\n\n    &-content:empty + &-body-not-found {\n      display: block;\n    }\n\n    &-footer {\n      border-top: 1px solid @border-color-split;\n      border-radius: 0 0 @border-radius-base @border-radius-base;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      width: 100%;\n    }\n  }\n\n  &-operation {\n    display: inline-block;\n    overflow: hidden;\n    margin: 0 8px;\n    vertical-align: middle;\n\n    .@{ant-prefix}-btn {\n      display: block;\n\n      &:first-child {\n        margin-bottom: 4px;\n      }\n\n      .@{iconfont-css-prefix} {\n        .iconfont-size-under-12px(10px);\n      }\n    }\n  }\n}\n\n@keyframes transferHighlightIn {\n  0% {\n    background: tint(@primary-color, 80%);\n  }\n  100% {\n    background: transparent;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/transfer/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../tree/style/mixin\"";\n@import \""../../checkbox/style/mixin\"";\n\n@select-prefix-cls: ~\""@{ant-prefix}-select\"";\n@select-tree-prefix-cls: ~\""@{ant-prefix}-select-tree\"";\n\n.antCheckboxFn(@checkbox-prefix-cls: ~\""@{ant-prefix}-select-tree-checkbox\"");\n\n.@{select-tree-prefix-cls} {\n  margin: 0;\n  padding: 8px;\n  font-size: @font-size-base;\n  li {\n    padding: 0;\n    margin: 8px 0;\n    list-style: none;\n    white-space: nowrap;\n    outline: 0;\n    &.filter-node {\n      > a {\n        font-weight: bold !important;\n      }\n    }\n    ul {\n      margin: 0;\n      padding: 0 0 0 18px;\n    }\n    a {\n      display: inline-block;\n      padding: 1px 5px;\n      border-radius: 2px;\n      margin: 0;\n      cursor: pointer;\n      text-decoration: none;\n      vertical-align: top;\n      color: @text-color;\n      transition: all 0.3s ease;\n      &:hover {\n        background-color: tint(@primary-color, 90%);\n      }\n      &.@{select-tree-prefix-cls}-node-selected {\n        background-color: tint(@primary-color, 80%);\n      }\n    }\n    span {\n      &.@{select-tree-prefix-cls}-checkbox {\n        margin: 2px 4px 0 0;\n      }\n      &.@{select-tree-prefix-cls}-switcher,\n      &.@{select-tree-prefix-cls}-iconEle {\n        margin: 0;\n        width: 16px;\n        height: 16px;\n        line-height: 16px;\n        display: inline-block;\n        vertical-align: middle;\n        border: 0 none;\n        cursor: pointer;\n        outline: none;\n      }\n      &.@{select-tree-prefix-cls}-icon_loading {\n        &:after {\n          display: inline-block;\n          .iconfont-font(\""\\e6a1\"");\n          font-weight: bold;\n          animation: loadingCircle 1s infinite linear;\n          margin-top: 8px;\n        }\n      }\n      &.@{select-tree-prefix-cls}-switcher {\n        &.@{select-tree-prefix-cls}-switcher-noop {\n          cursor: auto;\n        }\n        &.@{select-tree-prefix-cls}-roots_open,\n        &.@{select-tree-prefix-cls}-center_open,\n        &.@{select-tree-prefix-cls}-bottom_open,\n        &.@{select-tree-prefix-cls}-noline_open {\n          .antTreeSwitcherIcon();\n        }\n        &.@{select-tree-prefix-cls}-roots_close,\n        &.@{select-tree-prefix-cls}-center_close,\n        &.@{select-tree-prefix-cls}-bottom_close,\n        &.@{select-tree-prefix-cls}-noline_close {\n          .antTreeSwitcherIcon();\n          .ie-rotate(3);\n          &:after {\n            transform: rotate(270deg) scale(0.5);\n          }\n        }\n      }\n    }\n  }\n  &-child-tree {\n    display: none;\n    &-open {\n      display: block;\n    }\n  }\n  &-treenode-disabled {\n    > span,\n    > a,\n    > a span {\n      color: #ccc;\n      cursor: not-allowed;\n    }\n  }\n  &-icon__open {\n    margin-right: 2px;\n    vertical-align: top;\n  }\n  &-icon__close {\n    margin-right: 2px;\n    vertical-align: top;\n  }\n}\n\n.@{select-prefix-cls}-tree-dropdown {\n  .@{select-prefix-cls}-dropdown-search {\n    display: block;\n    padding: 4px;\n    .@{select-prefix-cls}-search__field__wrap {\n      width: 100%;\n    }\n    .@{select-prefix-cls}-search__field {\n      padding: 4px 7px;\n      width: 100%;\n      box-sizing: border-box;\n      border: 1px solid @border-color-base;\n      border-radius: 4px;\n      outline: none;\n    }\n    &.@{select-prefix-cls}-search--hide {\n      display: none;\n    }\n  }\n  .@{select-prefix-cls}-not-found {\n    cursor: not-allowed;\n    color: #ccc;\n    padding: 7px 16px;\n    display: block;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tree-select/style/index.less\n **/"",""@import \""../../style/mixins/index\"";\n\n.antTreeSwitcherIcon() {\n  position: relative;\n  &:after {\n    .iconfont-size-under-12px(7px);\n    display: inline-block;\n    .iconfont-font(\""\\e606\"");\n    font-weight: bold;\n    position: absolute;\n    top: 0;\n    right: 4px;\n    color: @text-color;\n    transition: transform .3s ease;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tree/style/mixin.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n@import \""../../checkbox/style/mixin\"";\n@import \""./mixin\"";\n\n@tree-prefix-cls: ~\""@{ant-prefix}-tree\"";\n.antCheckboxFn(@checkbox-prefix-cls: ~\""@{ant-prefix}-tree-checkbox\"");\n\n.@{tree-prefix-cls} {\n  margin: 0;\n  padding: 5px;\n  font-size: @font-size-base;\n  li {\n    padding: 0;\n    margin: 7px 0;\n    list-style: none;\n    white-space: nowrap;\n    outline: 0;\n    a[draggable],\n    a[draggable=\""true\""] {\n      user-select: none;\n      /* Required to make elements draggable in old WebKit */\n      -khtml-user-drag: element;\n      -webkit-user-drag: element;\n    }\n    &.drag-over {\n      > a[draggable] {\n        background-color: @primary-color;\n        color: white;\n        opacity: 0.8;\n      }\n    }\n    &.drag-over-gap-top {\n      > a[draggable] {\n        border-top: 2px @primary-color solid;\n      }\n    }\n    &.drag-over-gap-bottom {\n      > a[draggable] {\n        border-bottom: 2px @primary-color solid;\n      }\n    }\n    &.filter-node {\n      > a {\n        color: @highlight-color!important;\n        font-weight: bold!important;\n      }\n    }\n    ul {\n      margin: 0;\n      padding: 0 0 0 18px;\n    }\n    a {\n      display: inline-block;\n      padding: 1px 5px;\n      border-radius: 2px;\n      margin: 0;\n      cursor: pointer;\n      text-decoration: none;\n      vertical-align: top;\n      color: @text-color;\n      transition: all 0.3s ease;\n      &:hover {\n        background-color: tint(@primary-color, 90%);\n      }\n      &.@{tree-prefix-cls}-node-selected {\n        background-color: tint(@primary-color, 80%);\n      }\n    }\n    span {\n      &.@{tree-prefix-cls}-checkbox {\n        margin: 2px 4px 0 0;\n      }\n      &.@{tree-prefix-cls}-switcher,\n      &.@{tree-prefix-cls}-iconEle {\n        margin: 0;\n        width: 16px;\n        height: 16px;\n        line-height: 16px;\n        display: inline-block;\n        vertical-align: middle;\n        border: 0 none;\n        cursor: pointer;\n        outline: none;\n      }\n      &.@{tree-prefix-cls}-icon_loading {\n        &:after {\n          display: inline-block;\n          .iconfont-font(\""\\e6ae\"");\n          animation: loadingCircle 1s infinite linear;\n          color: @primary-color;\n        }\n      }\n      &.@{tree-prefix-cls}-switcher {\n        &.@{tree-prefix-cls}-switcher-noop {\n          cursor: auto;\n        }\n        &.@{tree-prefix-cls}-roots_open,\n        &.@{tree-prefix-cls}-center_open,\n        &.@{tree-prefix-cls}-bottom_open,\n        &.@{tree-prefix-cls}-noline_open {\n          .antTreeSwitcherIcon();\n        }\n        &.@{tree-prefix-cls}-roots_close,\n        &.@{tree-prefix-cls}-center_close,\n        &.@{tree-prefix-cls}-bottom_close,\n        &.@{tree-prefix-cls}-noline_close {\n          .antTreeSwitcherIcon();\n          .ie-rotate(3);\n          &:after {\n            transform: rotate(270deg) scale(0.6);\n          }\n        }\n      }\n    }\n  }\n  &-child-tree {\n    display: none;\n    &-open {\n      display: block;\n    }\n  }\n  &-treenode-disabled {\n    >span,\n    >a,\n    >a span {\n      color: #ccc;\n      cursor: not-allowed;\n    }\n  }\n  &-icon__open {\n    margin-right: 2px;\n    vertical-align: top;\n  }\n  &-icon__close {\n    margin-right: 2px;\n    vertical-align: top;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/tree/style/index.less\n **/"",""@import \""../../style/themes/default\"";\n@import \""../../style/mixins/index\"";\n\n@upload-prefix-cls: ~\""@{ant-prefix}-upload\"";\n@upload-item: ~\""@{ant-prefix}-upload-list-item\"";\n@upload-pictrue-card-size: 96px;\n\n.@{upload-prefix-cls} {\n  font-size: @font-size-base;\n  outline: 0;\n\n  &-btn {\n    display: block;\n    width: 100%;\n    outline: none;\n  }\n\n  input[type=\""file\""] {\n    cursor: pointer;\n  }\n\n  &&-select {\n    display: inline-block;\n  }\n\n  &&-select-picture-card {\n    border: 1px dashed @border-color-base;\n    width: @upload-pictrue-card-size;\n    height: @upload-pictrue-card-size;\n    border-radius: @border-radius-base;\n    background-color: #fbfbfb;\n    text-align: center;\n    cursor: pointer;\n    transition: border-color 0.3s ease;\n    display: inline-block;\n    vertical-align: top;\n    margin-right: 8px;\n    margin-bottom: 8px;\n\n    > .@{upload-prefix-cls} {\n      display: block;\n      width: 100%;\n      height: 100%;\n      padding: 20px 0;\n    }\n\n    &:hover {\n      border-color: @primary-color;\n    }\n  }\n\n  &&-drag {\n    border: 1px dashed @border-color-base;\n    transition: border-color 0.3s ease;\n    cursor: pointer;\n    border-radius: @border-radius-base;\n    text-align: center;\n    width: 100%;\n    height: 100%;\n    position: relative;\n\n    &.@{upload-prefix-cls}-drag-hover:not(.@{upload-prefix-cls}-disabled) {\n      border: 2px dashed tint(@primary-color, 20%);\n    }\n\n    &.@{upload-prefix-cls}-disabled {\n      cursor: not-allowed;\n    }\n\n    .@{upload-prefix-cls}-btn {\n      display: table;\n      height: 100%;\n    }\n\n    .@{upload-prefix-cls}-drag-container {\n      display: table-cell;\n      vertical-align: middle;\n    }\n\n    &:not(.@{upload-prefix-cls}-disabled):hover {\n      border-color: tint(@primary-color, 20%);\n    }\n\n    p.@{upload-prefix-cls}-drag-icon {\n      .@{iconfont-css-prefix} {\n        font-size: 80px;\n        margin-top: -5px;\n        color: tint(@primary-color, 20%);\n      }\n      height: 60px;\n      margin-bottom: 24px;\n    }\n    p.@{upload-prefix-cls}-text {\n      font-size: @font-size-lg;\n    }\n    p.@{upload-prefix-cls}-hint {\n      font-size: @font-size-base;\n      color: @text-color-secondary;\n    }\n    .@{iconfont-css-prefix}-plus {\n      font-size: 30px;\n      transition: all 0.3s ease;\n      color: #ccc;\n      &:hover {\n        color: @text-color-secondary;\n      }\n    }\n    &:hover .@{iconfont-css-prefix}-plus {\n      color: @text-color-secondary;\n    }\n  }\n}\n\n.@{upload-prefix-cls}-list {\n  overflow: hidden;\n  &-item {\n    overflow: hidden;\n    margin-top: 8px;\n    font-size: @font-size-base;\n\n    &-info {\n      height: 22px;\n      line-height: 22px;\n      padding: 0 4px;\n      transition: background-color 0.3s ease;\n\n      .@{iconfont-css-prefix}-paper-clip {\n        margin-right: 4px;\n        font-size: @font-size-base;\n        color: @text-color-secondary;\n      }\n      .@{iconfont-css-prefix}-cross {\n        .iconfont-size-under-12px(10px);\n        transition: all 0.3s ease;\n        opacity: 0;\n        cursor: pointer;\n        float: right;\n        color: @text-color-secondary;\n        line-height: 22px;\n        &:hover {\n          color: @text-color;\n        }\n      }\n    }\n\n    &:hover &-info {\n      background-color: tint(@primary-color, 90%);\n    }\n\n    &:hover .@{iconfont-css-prefix}-cross {\n      opacity: 1;\n    }\n\n    &-error,\n    &-error .@{iconfont-css-prefix}-paper-clip {\n      color: @error-color;\n    }\n\n    &-error .@{iconfont-css-prefix}-cross {\n      opacity: 1;\n    }\n\n    &-progress {\n      padding: 0 8px 0 20px;\n      margin-top: -2px;\n      margin-bottom: 1px;\n      font-size: @font-size-base;\n      .@{ant-prefix}-progress-line-inner {\n        vertical-align: middle;\n      }\n    }\n  }\n\n  &-picture,\n  &-picture-card {\n    .@{upload-item} {\n      padding: 8px;\n      border-radius: @border-radius-base;\n      border: 1px solid @border-color-base;\n      height: 66px;\n      position: relative;\n      &:hover {\n        background: transparent;\n      }\n    }\n\n    .@{upload-item}-info {\n      padding: 0;\n    }\n\n    .@{upload-item}:hover .@{upload-item}-info {\n      background: transparent;\n    }\n\n    .@{upload-item}-uploading {\n      border-style: dashed;\n    }\n\n    .@{upload-item}-thumbnail {\n      width: 48px;\n      height: 48px;\n      position: absolute;\n      top: 8px;\n      left: 8px;\n    }\n\n    .@{upload-item}-thumbnail img {\n      width: 48px;\n      height: 48px;\n      display: block;\n      overflow: hidden;\n      border-radius: @border-radius-sm;\n    }\n\n    .@{upload-item}-thumbnail.@{iconfont-css-prefix}:before {\n      line-height: 48px;\n      font-size: 24px;\n      color: @text-color-secondary;\n    }\n\n    .@{upload-item}-name {\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      margin: 0 0 0 8px;\n      line-height: 44px;\n      transition: all 0.3s ease;\n      padding-left: 48px;\n      padding-right: 8px;\n      max-width: 100%;\n      display: inline-block;\n      box-sizing: border-box;\n    }\n\n    .@{upload-item}-uploading .@{upload-item}-name {\n      line-height: 28px;\n    }\n\n    .@{upload-item}-progress {\n      padding-left: 56px;\n      margin-top: 0;\n    }\n\n    .@{iconfont-css-prefix}-cross {\n      position: absolute;\n      right: 8px;\n      top: 8px;\n      line-height: 1;\n    }\n  }\n\n  &-picture-card {\n    display: inline;\n\n    .@{upload-item} {\n      display: inline-block;\n      width: @upload-pictrue-card-size;\n      height: @upload-pictrue-card-size;\n      margin: 0 8px 8px 0;\n    }\n\n    .@{upload-item}-info {\n      height: 100%;\n      position: relative;\n\n      &:before {\n        content: ' ';\n        position: absolute;\n        z-index: 1;\n        background-color: #808080;\n        transition: all 0.3s ease;\n        opacity: 0;\n        width: 100%;\n        height: 100%;\n      }\n\n      .@{iconfont-css-prefix}-eye-o,\n      .@{iconfont-css-prefix}-delete {\n        position: absolute;\n        left: 50%;\n        top: 50%;\n        z-index: 10;\n        -webkit-transition: all 0.3s ease;\n        transition: all 0.3s ease;\n        cursor: pointer;\n        font-size: 16px;\n        width: 16px;\n        line-height: 1;\n        color: #eee;\n        opacity: 0;\n        margin-top: -8px;\n        margin-left: -22px;\n        &:hover {\n          color: #fff;\n        }\n      }\n\n      .@{iconfont-css-prefix}-delete {\n        left: 50%;\n        margin-left: 6px;\n      }\n\n      &:hover {\n        &:before {\n          opacity: .8;\n        }\n\n        .@{iconfont-css-prefix}-eye-o,\n        .@{iconfont-css-prefix}-delete {\n          opacity: 1;\n        }\n      }\n    }\n\n    .@{upload-item}-thumbnail,\n    .@{upload-item}-thumbnail img {\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: static;\n    }\n\n    .@{upload-item}-name {\n      display: none;\n    }\n\n    .@{upload-item}-uploading {\n      &.@{upload-item} {\n        background-color: #fbfbfb;\n      }\n\n      .@{upload-item}-info {\n        height: auto;\n        &:before,\n        .@{iconfont-css-prefix}-eye-o,\n        .@{iconfont-css-prefix}-delete {\n          display: none;\n        }\n      }\n\n      &-text {\n        margin-top: 18px;\n        color: @text-color-secondary;\n      }\n    }\n\n    .@{upload-item}-progress {\n      padding-left: 0;\n    }\n  }\n\n  .@{upload-prefix-cls}-success-icon {\n    color: @success-color;\n    font-weight: bold;\n  }\n\n  .@{upload-prefix-cls}-margin-top-enter {\n    animation: uploadMarginTopIn .3s @ease-in-out-circ;\n  }\n\n  .@{upload-prefix-cls}-margin-top-leave {\n    animation: uploadMarginTopOut .3s @ease-in-out-circ;\n  }\n}\n\n@keyframes uploadMarginTopIn {\n  from {\n    margin-top: -25px;\n    opacity: 0;\n  }\n}\n\n@keyframes uploadMarginTopOut {\n  to {\n    margin-top: -25px;\n    opacity: 0;\n  }\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** webpack:///components/upload/style/index.less\n **/""],""sourceRoot"":""""}"
746029cc493464cefa0839a78721223d5fad45bb,37628,0;77;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;sections;1.0;0.002145922746781116;27.0;0.0;0
2479873644793fe1b97bf492016246492f886f49,38061773,"	""Inspired by: http://stackoverflow.com/questions/38061773/add-linked-org-files-to-org-agenda-files"""
5f2ab9796ff1c4c69dac6953e4746c59f297d085,7422204,    # http://stackoverflow.com/questions/7422204/intensity-normalization-of-image-using-pythonpil-speed-issues
4cba485a3f7f5ecec9f668da9b16e77aef4a2866,3330919,        // http://stackoverflow.com/a/3330919)
895fc75faa592d06c50f625694ecda1abd115d3c,24708649,		// FileReader is better than FileReaderSync (even in worker) - see http://stackoverflow.com/q/24708649/1048862
1ec9fec2faffef879bde3357be504d5539ba49cc,3421923,	// http://stackoverflow.com/a/3421923/551548
2805cb7c6046846889eb9eab465a137e4592f667,16072709,"The Farmhash algorithm operates on a sequence of bytes. A string is a sequence of characters. These two seem fundamentally at odds. Googling ""C# string to bytes"" will yield the [top Stackoverflow question](https://stackoverflow.com/q/16072709/433785) and [dot net perls](https://www.dotnetperls.com/convert-string-byte-array) as the second result. Both of these pages instruct one to decode the string according to a [character encoding](https://en.wikipedia.org/wiki/Character_encoding). This would be bad advice for Farmhash.Sharp for two reasons:"
a779cd3eea17f638603d13329afd4cd5e51c7e57,29137024,"</a><a href=""http://stackoverflow.com/questions/29137024/comic-balloon-detection-how-can-i-count-white-pixels-inside-a-vectorrotatedrec?rq=1"" class=""question-hyperlink"">Comic Balloon Detection: How can I count white pixels inside a vector&lt;RotatedRect&gt; Ellipse in OpenCV?</a>"
554c1447d0f4477963e0f7923fe64661cef371f9,9556393,;; From http://stackoverflow.com/questions/9556393/clojure-tail-recursion-with-prime-factors
16eed458e945627fe5261cf2e568845776bc08fb,3222375,16;http://stackoverflow.com/questions/3222375/what-is-message-passing;called;1.0;0.015625;4.0;0
f9fb223b5e964b45f2eb0be8d1f6f2178c82c34a,8898794,"6023546,comment,6013102,6021393,1,0,krapp,,,""I was playing around with Slim framework recently and I &#x27;discovered&#x27; the option in the PDO driver to fetch into a class. Add a parent class to the data classes (with magic setters and getters, having the getter wrap everything in htmlspecialchars)[1] and you really can, probably, accomplish most of what a lot of templating systems do (and a good chunk of MVC with the serial numbers filed off) with a fraction of the code in most frameworks and, say, Twig.<p>Even static caching probably, using output buffering.<p>[1]<a href=""""http://stackoverflow.com/questions/8898794/using-pdofetch-class-with-magic-methods"""" rel=""""nofollow"""">http://stackoverflow.com/questions/8898794/using-pdofetch-cl...</a>"",1373499219"
d61fd8ed2b342a94b6e3db08c4e1b60c6b30e672,195975,// http://stackoverflow.com/questions/195975/how-to-make-a-char-string-from-a-c-macros-value
b7ad0651435e077c7d719559dc50a04e9847e97b,11508164,    // Credit: http://stackoverflow.com/a/11508164/1190235
1d61af63a48ab377f05170526d7016846b451262,263416,            // credit: http://stackoverflow.com/a/263416/677735
e0853c61a8bb3c980cb7856d44d871f346e3fa37,1644,"1337385,comment,1337300,1337300,0,0,scorchin,,,""<a href=""""http://stackoverflow.com/questions/1644/what-good-technology-podcasts-are-out-there"""" rel=""""nofollow"""">http://stackoverflow.com/questions/1644/what-good-technology...</a>"",1273572174"
56cf9671e7ac2fb6cf8297d41f2d835e2c4b9939,40060131,		// see https://stackoverflow.com/questions/40060131/reflect-assign-a-pointer-struct-value
54bde83dfd810a3d5b10d7588fa8564e791199ed,21443625,    // http://stackoverflow.com/questions/21443625/core-text-calculate-letter-frame-in-ios
906dcc4f0359196eada3e87875b0a5a0e0960a11,2182246,			//some code ripped from http://stackoverflow.com/questions/2182246/javascript-dates-in-ie-nan-firefox-chrome-ok
bc667a560c84f688d685124d3ff26df7c95da1b8,3080509,- http://stackoverflow.com/questions/3080509/git-list-commits-not-pushed-to-the-origin-yet
454cac289ec66217028c1eb37ddde6cd21fa7926,2138427,# http://stackoverflow.com/questions/2138427/can-i-get-my-readme-textile-into-my-rdoc-with-proper-formatting
9f4a570a5a8183268b2fb14f00fe78081e689705,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
7933c3bde17b530b1eef3fb7b06ab9c68a588a85,16512303,* https://stackoverflow.com/questions/1911015/how-do-i-debug-node-js-applications/16512303#16512303
26cc9922c614afd0aa5c35e422f06e28279ecbca,37628,0;180;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;constructors;0.4;0.0;1.0;1.4;0.0;0
02842472916a7fcecaf604d854c15fbf54e6b926,37628,0;41;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;actual_classes;0.6;0.012858555885262116;1.0;1.612858555885262;0.7071067811865475;0.0
5e01df96dc3a49757d1c812e48d24683761e30da,6122571, * From: https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript
c2fe19c4dd151d2102fc9f47076321d2b624b91d,2952386,        // ugly hack via http://stackoverflow.com/a/2952386/188039
f36ed84193667e0a3756e1b436e3a0c6b596e241,6883049,    # https://stackoverflow.com/questions/6883049/regex-to-find-urls-in-string-in-python
fbd59d6926ddf579f0489cdc5ec60ad89c86c718,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
fbcb2fb985a7ffce8bf1345ec64ef7bb722c5b8a,2412981,"        IBasicHandle, // ('IDisposable' will not box in a ""using"" statement: http://stackoverflow.com/questions/2412981/if-my-struct-implements-idisposable-will-it-be-boxed-when-used-in-a-using-statem)"
4b8a294220cce3f709e32d47d74baa0fd98b0449,54593816,# Found at:  https://stackoverflow.com/questions/54593816/scraping-through-python-selenium-or-beautifulsoup
f811655789e52d37b103fb06127d170539266d7e,57803," * http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
91e224d3ddc48d01d2087ee62e9c08a9ca570ff0,470832, * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
b296f970a5759fd26203b43b28439efd4a6c8594,7346105,             http://stackoverflow.com/a/7346105/2081507
81dedb34726584baaad515f757f96928c57643c8,43305403,            // https://stackoverflow.com/questions/43305403/number-min-value-and-tostring
898302884929d1c96777532fd776425df0850ddb,28955526,// [Overloading of operator new in C++](http://stackoverflow.com/questions/28955526/overloading-of-operator-new-in-c)
03ff16ac794944589b939c534f4a03289408bb1b,33732110,     * http://stackoverflow.com/questions/33732110/file-upload-using-httphandler
146a64740ab26dbe726ce36b5736112d163a87a6,2117523,                // @src: http://stackoverflow.com/a/2117523
6d0e0bd915ff378a3432ae2251df7e5cb097ea08,10300743,  // based on http://stackoverflow.com/a/10300743/280842
72d32667164c7d08f113fb85bd8dd5d2f83aa75a,12474738,"8431526,story,,,2,0,yiedyie,""Python comment as a NOOP replacement"",http://stackoverflow.com/q/12474738,,1412849489"
e21b94180ee3358f0fecf8231798b033321e11df,924388,# http://stackoverflow.com/questions/924388/sh-read-command-eats-slashes-in-input
ec56785c5213bb734f418b2f35172472a9ad4001,21692646 14994391,"{""status"":1,""complete"":1,""list"":[{""item_id"":""95593"",""favorite"":""0"",""status"":""0"",""time_added"":""1406816601"",""time_updated"":""1411370574"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":674,""resolved_title"":""Eloquent JavaScript"",""resolved_url"":""http://eloquentjavascript.net"",""excerpt"":""This is a book about JavaScript, programming, and the wonders of the digital. You can read it online here, and a paper version is about to start shipping.  Written by Marijn Haverbeke."",""word_count"":""168""},{""item_id"":""1001539"",""favorite"":""0"",""status"":""1"",""time_added"":""1401876876"",""time_updated"":""1402228328"",""time_read"":""1402137051"",""time_favorited"":""0"",""sort_id"":838,""resolved_title"":""Javascript Best Practices"",""resolved_url"":""http://www.javascripttoolbox.com/bestpractices/"",""excerpt"":""This document is a list of best practices and preferred ways of developing javascript code, based on opinions and experience from many developers in the javascript community."",""word_count"":""2539""},{""item_id"":""3613056"",""favorite"":""0"",""status"":""0"",""time_added"":""1417617249"",""time_updated"":""1417724875"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":11,""resolved_title"":""The Philosophy of Computer Science"",""resolved_url"":""http://plato.stanford.edu/entries/computer-science/"",""excerpt"":""For nearly every field of study, there is a branch of philosophy, called the philosophy of that field. …Since the main purpose of a given field of study is to contribute to knowledge, the philosophy of X is, at least in part, a branch of epistemology."",""word_count"":""16540""},{""item_id"":""8343902"",""favorite"":""0"",""status"":""1"",""time_added"":""1410417498"",""time_updated"":""1410417988"",""time_read"":""1410417981"",""time_favorited"":""0"",""sort_id"":416,""resolved_title"":""The JavaScript Trap"",""resolved_url"":""https://www.gnu.org/philosophy/javascript-trap.html"",""excerpt"":""You may be running nonfree programs on your computer every day without realizing it—through your web browser.  In the free software community, the idea that nonfree programs mistreat their users is familiar."",""word_count"":""1755""},{""item_id"":""11426397"",""favorite"":""0"",""status"":""1"",""time_added"":""1413984164"",""time_updated"":""1414631367"",""time_read"":""1414631364"",""time_favorited"":""0"",""sort_id"":176,""resolved_title"":""ECMAScript 5 Strict Mode, JSON, and More"",""resolved_url"":""http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/"",""excerpt"":""Previously I analyzed ECMAScript 5′s Object and Property system. This is a huge new aspect of the language and deserved its special consideration.  There are a number of other new features and APIs that need attention, as well. The largest of which are Strict Mode and native JSON support."",""word_count"":""1443""},{""item_id"":""50189282"",""favorite"":""0"",""status"":""1"",""time_added"":""1417431146"",""time_updated"":""1417515135"",""time_read"":""1417515130"",""time_favorited"":""0"",""sort_id"":24,""resolved_title"":""The Economics of Seinfeld"",""resolved_url"":""http://yadayadayadaecon.com/"",""excerpt"":""Seinfeld ran for nine seasons on NBC and became famous as a “show about nothing.” Basically, the show allows viewers to follow the antics of Jerry, George, Elaine, and Kramer as they move through their daily lives, often encountering interesting people or dealing with special circumstances."",""word_count"":""121""},{""item_id"":""64784556"",""favorite"":""0"",""status"":""1"",""time_added"":""1392467824"",""time_updated"":""1393231166"",""time_read"":""1393147482"",""time_favorited"":""0"",""sort_id"":1249,""resolved_title"":""Did English ever have a formal version of “you”?"",""resolved_url"":""http://english.stackexchange.com/questions/9780/did-english-ever-have-a-formal-version-of-you"",""excerpt"":""From the top of my head, Danish \""de\"" (practically never used), German \""Sie\"", Chinese \""您\"", French \""vous\"", Spanish \""usted\"" are a formal way of addressing someone, especially if one isn't familiar with the addressee."",""word_count"":""1673""},{""item_id"":""66370167"",""favorite"":""0"",""status"":""1"",""time_added"":""1389787421"",""time_updated"":""1389983349"",""time_read"":""1389978285"",""time_favorited"":""0"",""sort_id"":1511,""resolved_title"":""Why is a minute divided into 60 seconds, an hour into 60 minutes, yet there are only 24 hours in a day?"",""resolved_url"":""http://www.scientificamerican.com/article.cfm?id=experts-time-division-days-hours-minutes"",""excerpt"":""Michael A. Lombardi, a metrologist in the Time and Frequency Division at the National Institute of Standards and Technology in Boulder, Colo., takes the case."",""word_count"":""1142""},{""item_id"":""68850066"",""favorite"":""1"",""status"":""1"",""time_added"":""1409848511"",""time_updated"":""1410110509"",""time_read"":""1410110507"",""time_favorited"":""1410110506"",""sort_id"":438,""resolved_title"":""The tax haven in the heart of Britain"",""resolved_url"":""http://www.newstatesman.com/economy/2011/02/london-corporation-city"",""excerpt"":""On 7 October 2002, an Anglican priest, William Campbell-Taylor, and an English-Jewish academic, Maurice Glasman, came to the law lords to challenge a parliamentary bill."",""word_count"":""2881""},{""item_id"":""74922341"",""favorite"":""0"",""status"":""1"",""time_added"":""1401399373"",""time_updated"":""1401532783"",""time_read"":""1401532780"",""time_favorited"":""0"",""sort_id"":848,""resolved_title"":""Convert XML to JSON with JavaScript"",""resolved_url"":""http://davidwalsh.name/convert-xml-json"",""excerpt"":""If you follow me on Twitter, you know that I've been working on a super top secret mobile application using Appcelerator Titanium.  The experience has been great:  using JavaScript to create easy to write, easy to test, native mobile apps has been fun."",""word_count"":""448""},{""item_id"":""86862621"",""favorite"":""0"",""status"":""1"",""time_added"":""1400188192"",""time_updated"":""1400225740"",""time_read"":""1400225737"",""time_favorited"":""0"",""sort_id"":867,""resolved_title"":""How Javascript Loading Works - DOMContentLoaded and OnLoad"",""resolved_url"":""http://ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload/"",""excerpt"":""There are actually three different windows of time during a web request in which we can load and execute javascript. These windows are delineated by the DOMContentLoaded event and the OnLoad event. We can load our scripts before DOMContentLoaded, after DOMContentLoad, and after OnLoad."",""word_count"":""764""},{""item_id"":""100353627"",""favorite"":""0"",""status"":""1"",""time_added"":""1403032811"",""time_updated"":""1403250851"",""time_read"":""1403250815"",""time_favorited"":""0"",""sort_id"":791,""resolved_title"":""Javascript Cryptography Considered Harmful"",""resolved_url"":""http://matasano.com/articles/javascript-cryptography/"",""excerpt"":""What do you mean, \""Javascript cryptography\""? We mean attempts to implement security features in browsers using cryptographic algoritms implemented in whole or in part in Javascript. You may now be asking yourself, \""What about Node.js? What about non-browser Javascript?\""."",""word_count"":""3042""},{""item_id"":""109629062"",""favorite"":""0"",""status"":""1"",""time_added"":""1391253646"",""time_updated"":""1392133305"",""time_read"":""1392061330"",""time_favorited"":""0"",""sort_id"":1364,""resolved_title"":""A Visual Ethnography of the World’s Last Living Nomads"",""resolved_url"":""http://www.brainpickings.org/index.php/2011/10/14/jeroen-toirkens-nomad-book/"",""excerpt"":""From Morocco to Mongolia, or what we can learn about climate change from Inuit whale hunters."",""word_count"":""367""},{""item_id"":""110223458"",""favorite"":""0"",""status"":""1"",""time_added"":""1413402444"",""time_updated"":""1413468676"",""time_read"":""1413468669"",""time_favorited"":""0"",""sort_id"":209,""resolved_title"":""THE DESIGN OF BROWSING AND BERRYPICKING TECHNIQUES FOR THE ONLINE SEARCH INTERFACE"",""resolved_url"":""http://pages.gseis.ucla.edu/faculty/bates/berrypicking.html"",""excerpt"":""������ First, a new model of searching in online and other information systems, called \""berrypicking,\"" is discussed."",""word_count"":""416""},{""item_id"":""119721713"",""favorite"":""0"",""status"":""1"",""time_added"":""1389190166"",""time_updated"":""1389256531"",""time_read"":""1389231827"",""time_favorited"":""0"",""sort_id"":1547,""resolved_title"":""VOD Rides to the Rescue of Indie Film"",""resolved_url"":""http://www.thewrap.com/movies/article/vod-rescue-how-one-format-saving-indie-film-33085"",""excerpt"":""Updated, 12:58 p.m. PST  The indie film industry has found a life preserver -- and it's not floating in movie theaters."",""word_count"":""912""},{""item_id"":""119988330"",""favorite"":""0"",""status"":""1"",""time_added"":""1389190006"",""time_updated"":""1389354238"",""time_read"":""1389345245"",""time_favorited"":""0"",""sort_id"":1548,""resolved_title"":""The Perils of VOD, or Why \""Melancholia\"" Should Be Seen on the Big Screen"",""resolved_url"":""http://blogs.indiewire.com/anthony/the-perils-of-vod-or-why-melancholia-should-be-seen-on-the-big-screen"",""excerpt"":""There are compelling reasons why VOD is a great new weapon in the arsenal of indie filmmakers and distributors. As recounted in a solid new reported piece at The Wrap/Reuters, \""the indie film industry has found a life preserver\"" in day-and date theatrical and video-on-demand simultaneous releases."",""word_count"":""484""},{""item_id"":""143542519"",""favorite"":""0"",""status"":""1"",""time_added"":""1414403851"",""time_updated"":""1414579154"",""time_read"":""1414579148"",""time_favorited"":""0"",""sort_id"":157,""resolved_title"":""1984 v. Brave New World"",""resolved_url"":""http://www.lettersofnote.com/2012/03/1984-v-brave-new-world.html"",""excerpt"":""In October of 1949, a few months after the release of George Orwell's dystopian masterpiece, Nineteen Eighty-Four, he received a fascinating letter from fellow author Aldous Huxley — a man who, 17 years previous, had seen his own nightmarish vision of society published, in the form of Brave New Wo"",""word_count"":""674""},{""item_id"":""144455930"",""favorite"":""0"",""status"":""1"",""time_added"":""1395060258"",""time_updated"":""1395138943"",""time_read"":""1395138918"",""time_favorited"":""0"",""sort_id"":1093,""resolved_title"":""A Survival Guide for Beating Information Addiction"",""resolved_url"":""http://zenhabits.net/infoholic/"",""excerpt"":""Are you suffering from information addiction? It’s a growing problem as people spend more and more of their time online — and while online tools are amazing, being addicted to checking them can steal most of your day."",""word_count"":""1413""},{""item_id"":""153297694"",""favorite"":""0"",""status"":""1"",""time_added"":""1389219680"",""time_updated"":""1389354276"",""time_read"":""1389345538"",""time_favorited"":""0"",""sort_id"":1543,""resolved_title"":""The price is right for VoD"",""resolved_url"":""http://www.broadcastnow.co.uk/news/analysis/the-price-is-right-for-vod/5039298.article"",""excerpt"":""Indies are set to cash in this year as on-demand rivals such as Lovefilm, Netflix and Hulu try to outbid each other for content. But how long will this bonanza last."",""word_count"":""31""},{""item_id"":""155855601"",""favorite"":""0"",""status"":""1"",""time_added"":""1409845277"",""time_updated"":""1410417989"",""time_read"":""1410417985"",""time_favorited"":""0"",""sort_id"":460,""resolved_title"":""Free Software Foundation"",""resolved_url"":""https://www.gnu.org/software/librejs/"",""excerpt"":""GNU LibreJS aims to address the JavaScript problem described in Richard Stallman's article The JavaScript Trap. LibreJS is a free add-on for GNU IceCat and other Mozilla-based browsers. It blocks nonfree nontrivial JavaScript while allowing JavaScript that is free and/or trivial."",""word_count"":""408""},{""item_id"":""164235298"",""favorite"":""0"",""status"":""1"",""time_added"":""1400331886"",""time_updated"":""1402954778"",""time_read"":""1402954778"",""time_favorited"":""0"",""sort_id"":863,""resolved_title"":""Claude Shannon Demonstrates Machine Learning"",""resolved_url"":""http://techchannel.att.com/play-video.cfm/2010/3/16/In-Their-Own-Words-Claude-Shannon-Demonstrates-Machine-Learning"",""excerpt"":""In this film from the early 1950s, Claude Shannon, The Father of Information Theory, demonstrates how \""Theseus,\"" a life-sized magnetic mouse controlled by relay circuits, learns its way around a maze."",""word_count"":""42"",""tags"":{""video"":{""item_id"":""164235298"",""tag"":""video""}}},{""item_id"":""164844832"",""favorite"":""0"",""status"":""1"",""time_added"":""1415318737"",""time_updated"":""1417336970"",""time_read"":""1417336967"",""time_favorited"":""0"",""sort_id"":126,""resolved_title"":""Coolest jobs in tech (literally): running a South Pole data center"",""resolved_url"":""http://arstechnica.com/business/2012/04/coolest-jobs-in-tech-literally-running-a-south-pole-data-center/"",""excerpt"":""Steve Barnet is hiring, but not for an ordinary IT job. His ideal candidate \""will be willing to travel to Polar and high altitude sites.\"""",""word_count"":""3850""},{""item_id"":""166844503"",""favorite"":""0"",""status"":""1"",""time_added"":""1401906406"",""time_updated"":""1402042242"",""time_read"":""1402015902"",""time_favorited"":""0"",""sort_id"":830,""resolved_title"":""Why is 80 characters the 'standard' limit for code width?"",""resolved_url"":""http://programmers.stackexchange.com/questions/148677/why-is-80-characters-the-standard-limit-for-code-width"",""excerpt"":""Why is 80 characters the \""standard\"" limit for code width? Why 80 and not 79, 81 or 100? What is the origin of this particular value?"",""word_count"":""1268""},{""item_id"":""172189361"",""favorite"":""0"",""status"":""0"",""time_added"":""1404396556"",""time_updated"":""1404396557"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":711,""resolved_title"":""JavaScript CustomEvent"",""resolved_url"":""http://davidwalsh.name/customevent"",""excerpt"":""JavaScript events have been the gateway to user interaction within the browser since its inception. Not only do events tell us when an interaction happens, but events tell us type of interaction, the nodes involved, and provide us methods for working with the event."",""word_count"":""312""},{""item_id"":""179613035"",""favorite"":""0"",""status"":""1"",""time_added"":""1392667747"",""time_updated"":""1393056676"",""time_read"":""1393027666"",""time_favorited"":""0"",""sort_id"":1208,""resolved_title"":""It’s OK to eat alone: Q&A with Susan Cain"",""resolved_url"":""http://blog.ted.com/2012/06/15/its-ok-to-eat-alone-qa-with-susan-cain/"",""excerpt"":""By far the most viewed talk from TED2012 was given by an introvert who doesn’t like talking."",""word_count"":""4392""},{""item_id"":""199725325"",""favorite"":""0"",""status"":""1"",""time_added"":""1398807638"",""time_updated"":""1398848428"",""time_read"":""1398848427"",""time_favorited"":""0"",""sort_id"":919,""resolved_title"":""Why CPUs Aren't Getting Any Faster"",""resolved_url"":""http://www.technologyreview.com/view/421186/why-cpus-arent-getting-any-faster/"",""excerpt"":""The Central Processing Unit (CPU)–the component that has defined the performance of your computer for many years–has hit a wall."",""word_count"":""551""},{""item_id"":""225055261"",""favorite"":""0"",""status"":""1"",""time_added"":""1397341615"",""time_updated"":""1402228327"",""time_read"":""1402135155"",""time_favorited"":""0"",""sort_id"":1029,""resolved_title"":""Q: Do physicists really believe in true randomness?"",""resolved_url"":""http://www.askamathematician.com/2009/12/q-do-physicists-really-believe-in-true-randomness/"",""excerpt"":""Physicist: With very few exceptions, yes.  What we normally call “random” is not truly random, but only appears so.  The randomness is a reflection of our ignorance about the thing being observed, rather than something inherent to it."",""word_count"":""979""},{""item_id"":""262363249"",""favorite"":""0"",""status"":""1"",""time_added"":""1393074464"",""time_updated"":""1393241332"",""time_read"":""1393231368"",""time_favorited"":""0"",""sort_id"":1178,""resolved_title"":""Javascript Timeline Libaries - A Review"",""resolved_url"":""http://okfnlabs.org/blog/2012/12/04/javascript-timeline-libaries-a-review.html"",""excerpt"":""This post is a rough and ready overview of various javascript timeline libraries that arose from research in creating a timeline view for Recline JS. Note this material hung around on my hard disk for a few months so some of it may already be a little bit out of date!"",""word_count"":""486""},{""item_id"":""273883169"",""favorite"":""0"",""status"":""1"",""time_added"":""1401906407"",""time_updated"":""1402042241"",""time_read"":""1402015859"",""time_favorited"":""0"",""sort_id"":829,""resolved_title"":""Introduction: Haters Gonna Hate, Or Why You Still Need SQL"",""resolved_url"":""http://sql.learncodethehardway.org/book/introduction.html"",""excerpt"":""This book teaches SQL to anyone, but it helps you can code already. The concepts in SQL are taught assuming you at least know how to do some programming even if it's just a tiny bit."",""word_count"":""1051""},{""item_id"":""276970547"",""favorite"":""0"",""status"":""1"",""time_added"":""1391105681"",""time_updated"":""1392133305"",""time_read"":""1392061991"",""time_favorited"":""0"",""sort_id"":1407,""resolved_title"":""50 Open Source Replacements for Really Expensive Software"",""resolved_url"":""http://www.datamation.com/article.php/3898906"",""excerpt"":""The \""Great Recession\"" has businesses and consumers alike looking for ways to cut costs. That includes looking for cheaper alternatives to expensive software. In most cases, open source applications offer much lower prices, even if you need to purchase paid support."",""word_count"":""758""},{""item_id"":""323698614"",""favorite"":""0"",""status"":""1"",""time_added"":""1396345887"",""time_updated"":""1403476796"",""time_read"":""1403475310"",""time_favorited"":""0"",""sort_id"":1053,""resolved_title"":""The Best Data Mining Tools You Can Use for Free in Your Company"",""resolved_url"":""http://www.siliconafrica.com/the-best-data-minning-tools-you-can-use-for-free-in-your-company/"",""excerpt"":""Data mining or “Knowledge Discovery in Databases” is the  process of discovering patterns in large data sets with artificial intelligence, machine learning, statistics, and database systems."",""word_count"":""902""},{""item_id"":""333977309"",""favorite"":""0"",""status"":""1"",""time_added"":""1390306768"",""time_updated"":""1390330871"",""time_read"":""1390330793"",""time_favorited"":""0"",""sort_id"":1480,""resolved_title"":""Why 3D doesn't work and never will. Case closed."",""resolved_url"":""http://www.rogerebert.com/rogers-journal/why-3d-doesnt-work-and-never-will-case-closed"",""excerpt"":""I received a letter that ends, as far as I am concerned, the discussion about 3D. It doesn't work with our brains and it never will.  The notion that we are asked to pay a premium to witness an inferior and inherently brain-confusing image is outrageous. The case is closed."",""word_count"":""833""},{""item_id"":""336345161"",""favorite"":""0"",""status"":""1"",""time_added"":""1399455631"",""time_updated"":""1399823308"",""time_read"":""1399764898"",""time_favorited"":""0"",""sort_id"":902,""resolved_title"":""Stop writing code, start drawing it."",""resolved_url"":""http://macaw.co"",""excerpt"":""Set breakpoints and optimize your site for all devices.  Pull in web fonts or use system fonts like never before."",""word_count"":""294""},{""item_id"":""352867881"",""favorite"":""0"",""status"":""1"",""time_added"":""1414430916"",""time_updated"":""1414521224"",""time_read"":""1414521222"",""time_favorited"":""0"",""sort_id"":154,""resolved_title"":""Unobtrusive JavaScript vs. Declarative Templates"",""resolved_url"":""http://stackoverflow.com/questions/14994391/how-do-i-think-in-angularjs-if-i-have-a-jquery-background?rq=1"",""excerpt"":""Sign up or log in to customize your list."",""word_count"":""18""},{""item_id"":""353896524"",""favorite"":""0"",""status"":""1"",""time_added"":""1397732850"",""time_updated"":""1399496887"",""time_read"":""1399455228"",""time_favorited"":""0"",""sort_id"":975,""resolved_title"":""Global video site Viki is bringing social back, as it reintroduces improved real-time commenting system"",""resolved_url"":""http://thenextweb.com/media/2013/05/09/global-video-site-viki-is-bringing-back-social-rolls-out-improved-real-time-commenting-system/"",""excerpt"":""Viki is bringing social back to its global video service after it reintroduced its ‘timed comment’ feature that allows users to place real-time comments about movies and TV shows within its media player."",""word_count"":""680""},{""item_id"":""364222947"",""favorite"":""0"",""status"":""1"",""time_added"":""1413755310"",""time_updated"":""1413878683"",""time_read"":""1413878681"",""time_favorited"":""0"",""sort_id"":187,""resolved_title"":""The World's Leading Graph Database"",""resolved_url"":""http://www.neo4j.org/develop/javascript"",""excerpt"":""Johnny Luu walks through the steps of creating a Node."",""word_count"":""19""},{""item_id"":""370171157"",""favorite"":""0"",""status"":""1"",""time_added"":""1391166548"",""time_updated"":""1391857241"",""time_read"":""1391848629"",""time_favorited"":""0"",""sort_id"":1395,""resolved_title"":""The Banality of ‘Don’t Be Evil’"",""resolved_url"":""http://mobile.nytimes.com/2013/06/02/opinion/sunday/the-banality-of-googles-dont-be-evil.html"",""excerpt"":""“THE New Digital Age” is a startlingly clear and provocative blueprint for technocratic imperialism, from two of its leading witch doctors, Eric Schmidt and Jared Cohen, who construct a new idiom for United States global power in the 21st century."",""word_count"":""1287""},{""item_id"":""374316282"",""favorite"":""0"",""status"":""1"",""time_added"":""1391114518"",""time_updated"":""1392133306"",""time_read"":""1392064008"",""time_favorited"":""0"",""sort_id"":1398,""resolved_title"":""William Binney (U.S. intelligence official)"",""resolved_url"":""http://en.wikipedia.org/wiki/William_Binney_(U.S._intelligence_official)#Whistleblowing"",""excerpt"":""William Edward Binney[2] is a former highly placed intelligence official with the United States National Security Agency (NSA)[3] turned whistleblower who resigned on October 31, 2001, after more than 30 years with the agency. He was a high-profile critic of his former employers during the George W."",""word_count"":""1588""},{""item_id"":""378330123"",""favorite"":""0"",""status"":""1"",""time_added"":""1391448239"",""time_updated"":""1391531924"",""time_read"":""1391450450"",""time_favorited"":""0"",""sort_id"":1334,""resolved_title"":""Why I open-sourced cures to my cancer: Salvatore Iaconesi at TEDGlobal 2013"",""resolved_url"":""http://blog.ted.com/2013/06/14/why-i-opensourced-cures-for-my-cancer-salvatore-iaconesi-at-tedglobal-2013/"",""excerpt"":""Since the moment Iaconesi heard the word “cancer” come out of his doctors’ mouth, he noticed something — that the way people related to him turned on a dime.  “When you have something as serious as cancer, your life disappears and you are replaced by a disease,” he says."",""word_count"":""490""},{""item_id"":""381473276"",""favorite"":""0"",""status"":""1"",""time_added"":""1403001474"",""time_updated"":""1403438966"",""time_read"":""1403421893"",""time_favorited"":""0"",""sort_id"":793,""resolved_title"":""Free SSL Certificates for Open Source Projects"",""resolved_url"":""https://www.globalsign.com/ssl/ssl-open-source/"",""excerpt"":""We love open source and we know you do too!  While we support the open source community in a number of ways one natural way for us to do so is by helping increase the adoption of SSL within."",""word_count"":""216""},{""item_id"":""390642416"",""favorite"":""0"",""status"":""1"",""time_added"":""1403732086"",""time_updated"":""1403769515"",""time_read"":""1403769512"",""time_favorited"":""0"",""sort_id"":734,""resolved_title"":""U.S. Postal Service Logging All Mail for Law Enforcement"",""resolved_url"":""http://www.nytimes.com/2013/07/04/us/monitoring-of-snail-mail.html?pagewanted=all&_r=1&"",""excerpt"":""Leslie James Pickering, the owner of a bookstore in Buffalo, was targeted by a tracking program from the United States Postal Service."",""word_count"":""1657""},{""item_id"":""412846799"",""favorite"":""0"",""status"":""1"",""time_added"":""1390513517"",""time_updated"":""1391085339"",""time_read"":""1391079228"",""time_favorited"":""0"",""sort_id"":1457,""resolved_title"":""Eastern Germany: the most godless place on Earth"",""resolved_url"":""http://www.theguardian.com/commentisfree/belief/2012/sep/22/atheism-east-germany-godless-place"",""excerpt"":""They are sending missionaries to eastern Germany. A recent study called Beliefs About God Across Time and Countries found that 52.1% of people asked whether they believed in God identified themselves as atheists. This compared with only 10.3% in western Germany."",""word_count"":""734""},{""item_id"":""422261148"",""favorite"":""0"",""status"":""1"",""time_added"":""1409693949"",""time_updated"":""1410775054"",""time_read"":""1410726555"",""time_favorited"":""0"",""sort_id"":502,""resolved_title"":""C3.js | D3-based reusable chart library"",""resolved_url"":""http://c3js.org/"",""excerpt"":""C3 makes it easy to generate D3-based charts by wrapping the code required to construct the entire chart. We don't need to write D3 code any more."",""word_count"":""268""},{""item_id"":""426836894"",""favorite"":""0"",""status"":""1"",""time_added"":""1392805167"",""time_updated"":""1393056676"",""time_read"":""1393026948"",""time_favorited"":""0"",""sort_id"":1201,""resolved_title"":""Videre: the secretive group on a mission to film human-rights abuses"",""resolved_url"":""http://www.wired.co.uk/magazine/archive/2013/09/features/videre"",""excerpt"":""Having served his time, he was released from the army and, increasingly aware of the social and political troubles in Israel, decided to become a film maker. He thought he could change the world, but also meet girls. \""I thought it was a very cool thing to do..."",""word_count"":""2910""},{""item_id"":""430255195"",""favorite"":""1"",""status"":""1"",""time_added"":""1413104632"",""time_updated"":""1413139867"",""time_read"":""1413139867"",""time_favorited"":""1413139867"",""sort_id"":218,""resolved_title"":""The Open Source Data Science Masters"",""resolved_url"":""http://datasciencemasters.org/"",""excerpt"":""Build Machine Learning applications with us at Mattermark --> email me!  The open-source curriculum for learning Data Science. Foundational in both theory and technologies, the OSDSM breaks down the core competencies necessary to make data useful."",""word_count"":""937""},{""item_id"":""435466695"",""favorite"":""0"",""status"":""1"",""time_added"":""1389353968"",""time_updated"":""1389353971"",""time_read"":""1389353971"",""time_favorited"":""0"",""sort_id"":1528,""resolved_title"":""My technique for snowflakes shooting"",""resolved_url"":""http://chaoticmind75.blogspot.ru/2013/08/my-technique-for-snowflakes-shooting.html"",""excerpt"":""My main focus is macro photography of natural snowflakes. I do this with low cost variation of well-known reverse lens macro technique: compact camera Canon Powershot A650 at maximum optical zoom shoots through reversed lens Helios 44M-5 (this is lens from old film camera Zenit, made in USSR."",""word_count"":""1626""},{""item_id"":""439400783"",""favorite"":""0"",""status"":""1"",""time_added"":""1411401933"",""time_updated"":""1412159694"",""time_read"":""1412155774"",""time_favorited"":""0"",""sort_id"":397,""resolved_title"":""Moving Around Without Losing Your Roots"",""resolved_url"":""http://blogs.hbr.org/2012/10/moving-around-without-losing-your-roots/"",""excerpt"":""Big questions always strike unexpectedly, when our guard is down. I was watching my toddlers splash in the pool last summer when a fellow dad plunged me into revisiting the meaning of home in a globalized world.  He didn’t mean to. He just asked where we were from."",""word_count"":""1156""},{""item_id"":""456477123"",""favorite"":""0"",""status"":""1"",""time_added"":""1392467834"",""time_updated"":""1402299685"",""time_read"":""1402299673"",""time_favorited"":""0"",""sort_id"":1243,""resolved_title"":""Interview: Adrian Cockcroft on High Availability, Best Practices, and Lessons Learned in the Cloud"",""resolved_url"":""http://www.infoq.com/articles/cockcroft-high-availability"",""excerpt"":""Netflix is a widely referenced case study for how to effectively operate a cloud application at scale."",""word_count"":""1498""},{""item_id"":""456782717"",""favorite"":""0"",""status"":""1"",""time_added"":""1391254881"",""time_updated"":""1392133304"",""time_read"":""1392061031"",""time_favorited"":""0"",""sort_id"":1363,""resolved_title"":""The Geology of Media"",""resolved_url"":""http://www.theatlantic.com/technology/archive/2013/10/the-geology-of-media/280523/"",""excerpt"":""Future archaeologists will have a lot of material to dig through. An Object Lesson. Thinking about the Earth as an object requires some imagination. As far as objects go, it is a really big one: The Earth’s diameter is about 8,000 miles (with a bit of variation when measured at the poles)."",""word_count"":""1284""},{""item_id"":""464735545"",""favorite"":""0"",""status"":""1"",""time_added"":""1395650411"",""time_updated"":""1395654180"",""time_read"":""1395650416"",""time_favorited"":""0"",""sort_id"":1077,""resolved_title"":""Confessions of a Drone Warrior"",""resolved_url"":""http://www.gq.com/news-politics/big-issues/201311/drone-uav-pilot-assassination"",""excerpt"":""Editor's Note: On March 10, 2014, journalist Matthew Power lost his life pursuing a story along the Nile River in Uganda. He left behind a body of work as diverse and compelling as the adventures, tragedies, and passions of his subjects."",""word_count"":""6637""},{""item_id"":""472880625"",""favorite"":""0"",""status"":""1"",""time_added"":""1389084195"",""time_updated"":""1389796977"",""time_read"":""1389796969"",""time_favorited"":""0"",""sort_id"":1567,""resolved_title"":""We're About to Lose Net Neutrality — And the Internet as We Know It | WIRED"",""resolved_url"":""http://www.wired.com/opinion/2013/11/so-the-internets-about-to-lose-its-net-neutrality/"",""excerpt"":""Net neutrality is a dead man walking. The execution date isn’t set, but it could be days, or months (at best)."",""word_count"":""1365""},{""item_id"":""476841661"",""favorite"":""0"",""status"":""1"",""time_added"":""1411594509"",""time_updated"":""1412159695"",""time_read"":""1412157717"",""time_favorited"":""0"",""sort_id"":369,""resolved_title"":""Design"",""resolved_url"":""https://www.joyent.com/developers/node/design"",""excerpt"":""Node.js is JavaScript, so everything you already know about JavaScript applies to your Node application as well. The patterns you use to write your front-end client code can be used when writing your server-side application logic."",""word_count"":""2362""},{""item_id"":""478656505"",""favorite"":""0"",""status"":""0"",""time_added"":""1418392133"",""time_updated"":""1418392137"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":1,""resolved_title"":""Join the Apps for Europe Competition"",""resolved_url"":""http://appsforeurope.eu/competition"",""excerpt"":""Are you making an open data based app? Apps for Europe runs an annual competition to find the best new apps across Europe that we can help scale into viable businesses."",""word_count"":""478""},{""item_id"":""484064639"",""favorite"":""0"",""status"":""1"",""time_added"":""1409847532"",""time_updated"":""1410416761"",""time_read"":""1410416737"",""time_favorited"":""0"",""sort_id"":449,""resolved_title"":""p5.js"",""resolved_url"":""http://p5js.org/"",""excerpt"":""Hello! p5.js is a JavaScript library that starts with the original goal of Processing, to make coding accessible for artists, designers, educators, and beginners, and reinterprets this for today’s web.  Using the original metaphor of a software sketchbook, p5."",""word_count"":""126""},{""item_id"":""485180593"",""favorite"":""0"",""status"":""1"",""time_added"":""1398468824"",""time_updated"":""1398765277"",""time_read"":""1398765275"",""time_favorited"":""0"",""sort_id"":940,""resolved_title"":""The ticking time-bomb at the bottom of the Baltic Sea"",""resolved_url"":""http://www.economist.com/blogs/easternapproaches/2013/11/baltic-sea"",""excerpt"":""THERE IS something dangerous lurking in the shallow waters of the Baltic Sea."",""word_count"":""534""},{""item_id"":""485744470"",""favorite"":""0"",""status"":""0"",""time_added"":""1412595836"",""time_updated"":""1417340863"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":276,""resolved_title"":""Welcome to a community of AngularJS experts"",""resolved_url"":""http://www.airpair.com/angularjs"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""485829345"",""favorite"":""0"",""status"":""1"",""time_added"":""1391689938"",""time_updated"":""1391857242"",""time_read"":""1391850169"",""time_favorited"":""0"",""sort_id"":1321,""resolved_title"":""Could Mozilla become a branch of Google?"",""resolved_url"":""http://www.zdnet.com/could-mozilla-become-a-branch-of-google-7000023495/"",""excerpt"":""When you think of Google and Mozilla you probably think of them as Web browser rivals. On the one side, you have Google with Chrome; on the other, Mozilla with Firefox. Or, looking ahead, you might see them as mobile operating system competitors with Google's Android vs. Mozilla's Firefox OS."",""word_count"":""491""},{""item_id"":""489899042"",""favorite"":""0"",""status"":""1"",""time_added"":""1392194866"",""time_updated"":""1393231169"",""time_read"":""1393152230"",""time_favorited"":""0"",""sort_id"":1291,""resolved_title"":""I challenged hackers to investigate me and what they found out is chilling"",""resolved_url"":""http://pando.com/2013/10/26/i-challenged-hackers-to-investigate-me-and-what-they-found-out-is-chilling/"",""excerpt"":""It’s my first class of the semester at New York University. I’m discussing the evils of plagiarism and falsifying sources with 11 graduate journalism students when, without warning, my computer freezes. I fruitlessly tap on the keyboard as my laptop takes on a life of its own and reboots."",""word_count"":""5076""},{""item_id"":""490817424"",""favorite"":""0"",""status"":""0"",""time_added"":""1409762654"",""time_updated"":""1410458429"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":475,""resolved_title"":""READ THREE UNPUBLISHED SHORT STORIES BY JD SALINGER"",""resolved_url"":""http://www.alwayssometimesanytime.com/always/2013/11/read-three-unpublished-short-stories-by-jd-salinger"",""excerpt"":""Three Stories is a collection of three, previously unreleased short stories by JD Salinger - \""Birthday Boy\"", \""Paula\"" and \""The Ocean Full of Bowling Balls\"" - and it has just leaked online."",""word_count"":""159""},{""item_id"":""507829871"",""favorite"":""0"",""status"":""1"",""time_added"":""1409766298"",""time_updated"":""1410458428"",""time_read"":""1410434634"",""time_favorited"":""0"",""sort_id"":470,""resolved_title"":""gulp.js - the streaming build system"",""resolved_url"":""http://gulpjs.com/"",""excerpt"":""By preferring code over configuration, gulp keeps simple things simple and makes complex tasks manageable.  By harnessing the power of node's streams you get fast builds that don't write intermediary files to disk."",""word_count"":""120""},{""item_id"":""511866159"",""favorite"":""0"",""status"":""1"",""time_added"":""1389084197"",""time_updated"":""1389256782"",""time_read"":""1389256770"",""time_favorited"":""0"",""sort_id"":1566,""resolved_title"":""British government porn filters block tech sites"",""resolved_url"":""http://www.tgdaily.com/security-brief/83701-british-government-porn-filters-block-tech-sites"",""excerpt"":""It is just as we predicted, British Prime Minister, David Cameron's wonderful \""save the children\"" porn filter is just another attempt by the Tories to prevent people finding out information."",""word_count"":""362""},{""item_id"":""512358622"",""favorite"":""0"",""status"":""1"",""time_added"":""1389021514"",""time_updated"":""1389617775"",""time_read"":""1389382668"",""time_favorited"":""0"",""sort_id"":1580,""resolved_title"":""Hey, Academy: Here's Why the Best Cinematography Oscar Should Be Divided Into Two Awards"",""resolved_url"":""http://www.indiewire.com/article/hey-academy-heres-why-the-best-cinematography-oscar-should-be-divided-into-two-awards"",""excerpt"":""The cinematography of 2013 represented a hodgepodge of capture formats with one thing in common: it was all distributed digitally. Whether a movie was shot on 35mm, RED Epic 5k or RED One 4k, ARRI Alexa 2."",""word_count"":""696""},{""item_id"":""512501283"",""favorite"":""0"",""status"":""1"",""time_added"":""1389021512"",""time_updated"":""1390295873"",""time_read"":""1390295867"",""time_favorited"":""0"",""sort_id"":1581,""resolved_title"":""Reverse Shot Unveils Their Top Ten Films of 2013"",""resolved_url"":""http://blogs.indiewire.com/thompsononhollywood/reverse-shot-top-ten-films-2013"",""excerpt"":""Independent film journal Reverse Shot named their ten best films of 2013 Monday morning via Twitter."",""word_count"":""227""},{""item_id"":""512996654"",""favorite"":""0"",""status"":""1"",""time_added"":""1389058417"",""time_updated"":""1389291952"",""time_read"":""1389291322"",""time_favorited"":""0"",""sort_id"":1569,""resolved_title"":""CMS Trends for 2014"",""resolved_url"":""http://despreneur.com/cms-trends-for-2014/"",""excerpt"":""As one year ends everyone turns to the next trying to guess or predict the future. And it’s a really good tradition. If you strongly believe in it, it may become self fulfilling prophecy."",""word_count"":""937""},{""item_id"":""513009203"",""favorite"":""0"",""status"":""1"",""time_added"":""1389058409"",""time_updated"":""1389297198"",""time_read"":""1389296227"",""time_favorited"":""0"",""sort_id"":1573,""resolved_title"":""The Perils of Plastic: The Problems With Debit And Credit Cards Are Deeper Than We Thought"",""resolved_url"":""http://readwrite.com/2013/12/31/atm-cards-debit-cards-credit-cards-hackers-skimmers"",""excerpt"":""One night, a decade ago, I was on a sales trip. My wife called me up to complain about the $1,700 dinner that I had enjoyed in Bangkok. Of course she was mostly concerned because she knew that I was in Washington, DC, not Thailand. A copy of my credit card had made it there, however. The next day."",""word_count"":""1430""},{""item_id"":""513108315"",""favorite"":""1"",""status"":""1"",""time_added"":""1389020535"",""time_updated"":""1389110497"",""time_read"":""1389106798"",""time_favorited"":""1389106784"",""sort_id"":1582,""resolved_title"":""'The Act of Killing' Releases BitTorrent Bundle with Exclusive Content"",""resolved_url"":""http://www.indiewire.com/article/the-act-of-killing-releases-bittorrent-bundle-with-exclusive-content"",""excerpt"":""Today, just as the Director's Cut of the film is made available on iTunes for the first time, via distributor Drafthouse Films, \""The Act of Killing\"" has released a BitTorrent Bundle with exclusive content."",""word_count"":""389""},{""item_id"":""513184520"",""favorite"":""0"",""status"":""1"",""time_added"":""1389058413"",""time_updated"":""1389291952"",""time_read"":""1389291424"",""time_favorited"":""0"",""sort_id"":1570,""resolved_title"":""5 Tips for Getting Started With AWS"",""resolved_url"":""http://jamescarl.us/blog/5-tips-for-getting-started-with-aws/"",""excerpt"":""If you’re new to amazon web services (AWS) you’ll inevitably make some mistakes or learn some things as you get more comfortable with linux and the command line environment in general."",""word_count"":""544""},{""item_id"":""513228783"",""favorite"":""0"",""status"":""1"",""time_added"":""1389058411"",""time_updated"":""1390222818"",""time_read"":""1390222813"",""time_favorited"":""0"",""sort_id"":1571,""resolved_title"":""The Mac Pro Review (Late 2013)"",""resolved_url"":""http://www.anandtech.com/show/7603/mac-pro-review-late-2013"",""excerpt"":""The year was 2004. I was enrolled in ECE 466 at NCSU, a compiler optimization/scheduling class. I remember walking into the lecture hall and seeing far too many PowerBooks and white iBooks."",""word_count"":""18140""},{""item_id"":""513357775"",""favorite"":""0"",""status"":""1"",""time_added"":""1389020534"",""time_updated"":""1390127629"",""time_read"":""1390127625"",""time_favorited"":""0"",""sort_id"":1583,""resolved_title"":""Netflix Testing $6.99/Month and $9.99/Month Streaming Plans"",""resolved_url"":""http://www.slashfilm.com/netflix-testing-6-99month-and-9-99month-streaming-plans/"",""excerpt"":""At $7.99/month, Netflix‘s basic streaming package isn’t a bank-breaker for most folks. But if you really want to cut your entertainment expenditures to the bone, you may be in luck. The service is now testing a standard-def $6.99/month option for certain users."",""word_count"":""352""},{""item_id"":""513522587"",""favorite"":""0"",""status"":""1"",""time_added"":""1389058410"",""time_updated"":""1389110497"",""time_read"":""1389106581"",""time_favorited"":""0"",""sort_id"":1572,""resolved_title"":""The Profits and Pitfalls of Streaming Pirate Movies and TV Shows"",""resolved_url"":""http://torrentfreak.com/the-profits-and-pitfalls-of-streaming-pirate-movies-and-tv-shows-140101/"",""excerpt"":""Earlier this year TorrentFreak interviewed a guy making a living from the illegal streaming of movies and TV shows."",""word_count"":""1304""},{""item_id"":""513565432"",""favorite"":""0"",""status"":""1"",""time_added"":""1389213410"",""time_updated"":""1389256531"",""time_read"":""1389230878"",""time_favorited"":""0"",""sort_id"":1545,""resolved_title"":""Isaac Asimov Predicts in 1964 What the World Will Look Like Today — in 2014"",""resolved_url"":""http://www.openculture.com/2014/01/isaac-asimov-predicts-what-the-world-will-look-in-2014.html"",""excerpt"":""When New York City hosted The World’s Fair in 1964, Isaac Asimov, the prolific sci-fi author and professor of biochemistry at Boston University, took the opportunity to wonder what the world would look like 50 years hence — assuming the world survived the nuclear threats of the Cold War."",""word_count"":""766""},{""item_id"":""513602062"",""favorite"":""0"",""status"":""1"",""time_added"":""1388651080"",""time_updated"":""1389001279"",""time_read"":""1388926300"",""time_favorited"":""0"",""sort_id"":1597,""resolved_title"":""Frontiers in Zoology"",""resolved_url"":""http://www.frontiersinzoology.com/content/10/1/80/abstract"",""excerpt"":""Vlastimil Hart1, Petra Nováková1, Erich Pascal Malkemper2†, Sabine Begall2†, Vladimír Hanzal1, Miloš Ježek1, Tomáš Kušta1, Veronika Němcová1, Jana Adámková1, Kateřina Benediktová1, Jaroslav Červený1 and Hynek Burda12*"",""word_count"":""334""},{""item_id"":""514140580"",""favorite"":""0"",""status"":""1"",""time_added"":""1388792730"",""time_updated"":""1389001281"",""time_read"":""1388952572"",""time_favorited"":""0"",""sort_id"":1592,""resolved_title"":""Body maps show where we feel emotion"",""resolved_url"":""http://flowingdata.com/2014/01/02/body-maps-show-where-we-feel-emotion/"",""excerpt"":""Engineering and psychology researchers in Finland investigated where we feel and don't feel.  The team showed the volunteers two blank silhouettes of person on a screen and then told the subjects to think about one of 14 emotions: love, disgust, anger, pride, etc."",""word_count"":""133""},{""item_id"":""514371180"",""favorite"":""0"",""status"":""1"",""time_added"":""1388789319"",""time_updated"":""1390297154"",""time_read"":""1390297103"",""time_favorited"":""0"",""sort_id"":1595,""resolved_title"":""The Dark Side of Emotional Intelligence"",""resolved_url"":""http://www.theatlantic.com/health/archive/2014/01/the-dark-side-of-emotional-intelligence/282720/"",""excerpt"":""In some jobs, being in touch with emotions is essential. In others, it seems to be a detriment. And like any skill, being able to read people can be used for good or evil. Some of the greatest moments in human history were fueled by emotional intelligence. When Martin Luther King, Jr."",""word_count"":""2879""},{""item_id"":""514437736"",""favorite"":""0"",""status"":""1"",""time_added"":""1389023684"",""time_updated"":""1390295680"",""time_read"":""1390295675"",""time_favorited"":""0"",""sort_id"":1577,""resolved_title"":""1: Smartphones versus DSLRs versus film"",""resolved_url"":""http://connect.dpreview.com/post/5533410947/smartphones-versus-dslr-versus-film/"",""excerpt"":""With a deluge of three new cameras released every week, I'd completely lost perspective."",""word_count"":""877""},{""item_id"":""514470638"",""favorite"":""0"",""status"":""1"",""time_added"":""1388789326"",""time_updated"":""1390295266"",""time_read"":""1390295259"",""time_favorited"":""0"",""sort_id"":1594,""resolved_title"":""Netflix Built Its Microgenres By Staring Into The American Soul"",""resolved_url"":""http://www.npr.org/blogs/alltechconsidered/2014/01/02/259128268/netflix-built-its-microgenres-by-staring-into-the-american-soul"",""excerpt"":""In the old days, a movie genre was a simple, communal category: Action/Adventure, Comedy, Drama. One had to locate oneself in the Drama aisle at the video store and then look for just the right thing: A dark road trip movie with a strong female lead? Aha, Thelma & Louise."",""word_count"":""793""},{""item_id"":""514514350"",""favorite"":""0"",""status"":""1"",""time_added"":""1389020533"",""time_updated"":""1390295257"",""time_read"":""1390295251"",""time_favorited"":""0"",""sort_id"":1584,""resolved_title"":""Vince Gilligan Talks 'Breaking Bad' Regret, Hints at Mike's Return in 'Better Call Saul'"",""resolved_url"":""http://www.slashfilm.com/vince-gilligan-talks-breaking-bad-regret-hints-at-mikes-return-in-better-call-saul/"",""excerpt"":""We know Saul Goodman (Bob Odenkirk) will be back for Better Call Saul, obviously. And potential appearances by Walt (Bryan Cranston) and Jesse (Aaron Paul) have been teased as well."",""word_count"":""757""},{""item_id"":""514576193"",""favorite"":""0"",""status"":""1"",""time_added"":""1389020532"",""time_updated"":""1389110498"",""time_read"":""1389107641"",""time_favorited"":""0"",""sort_id"":1585,""resolved_title"":""Beyond Comedy and Drama: Netflix Has 76,897 Unique Microgenres"",""resolved_url"":""http://www.slashfilm.com/beyond-comedy-and-drama-netflix-has-76897-unique-microgenres/"",""excerpt"":""Among the Netflix faithful, the service’s hyper-specificity is something of an affectionate joke."",""word_count"":""449""},{""item_id"":""514835376"",""favorite"":""0"",""status"":""1"",""time_added"":""1388952393"",""time_updated"":""1390295876"",""time_read"":""1390295870"",""time_favorited"":""0"",""sort_id"":1589,""resolved_title"":""How Netflix creates movie micro-genres"",""resolved_url"":""http://flowingdata.com/2014/01/03/how-netflix-creates-movie-micro-genres/"",""excerpt"":""Alexis Madrigal and Ian Bogost for The Atlantic reverse engineered the Netflix genre generator, analyzed the data, and then made their own. Then they talked to Todd Yellin, the guy at Netflix who created the micro-genre system."",""word_count"":""201""},{""item_id"":""514877774"",""favorite"":""1"",""status"":""1"",""time_added"":""1388789298"",""time_updated"":""1389354240"",""time_read"":""1389354199"",""time_favorited"":""1389354166"",""sort_id"":1596,""resolved_title"":""How Netflix Reverse Engineered Hollywood"",""resolved_url"":""http://www.theatlantic.com/technology/archive/2014/01/how-netflix-reverse-engineered-hollywood/282679/"",""excerpt"":""To understand how people look for movies, the video service created 76,897 micro-genres. We took the genre descriptions, broke them down to their key words, … and built our own new-genre generator. If you use Netflix, you've probably wondered about the specific genres that it suggests to you."",""word_count"":""5917""},{""item_id"":""515245137"",""favorite"":""0"",""status"":""1"",""time_added"":""1388954573"",""time_updated"":""1389110497"",""time_read"":""1389106849"",""time_favorited"":""0"",""sort_id"":1588,""resolved_title"":""Netflix Now Offers Director Commentary on ‘House of Cards’ First Season"",""resolved_url"":""http://www.slashfilm.com/netflix-now-offers-director-commentary-on-house-of-cards-first-season/"",""excerpt"":""Briefly: Some of the best director commentaries out there are from David Fincher, whose discussions about each of his films are super-detailed and free of the “you had to be there” stories that make some commentaries little more than a genial hangout session with the filmmakers."",""word_count"":""173""},{""item_id"":""515261496"",""favorite"":""0"",""status"":""1"",""time_added"":""1389023684"",""time_updated"":""1390127652"",""time_read"":""1390127648"",""time_favorited"":""0"",""sort_id"":1576,""resolved_title"":""The Mathematics of Gamification"",""resolved_url"":""http://engineering.foursquare.com/2014/01/03/the-mathematics-of-gamification/"",""excerpt"":""At Foursquare, we maintain a database of 60 million venues. And like the world it represents, our database is ever-changing, with users from all over the world submitting updates on everything from the hours of a restaurant to the address of a new barbershop."",""word_count"":""1281""},{""item_id"":""516122144"",""favorite"":""0"",""status"":""1"",""time_added"":""1389023683"",""time_updated"":""1389354239"",""time_read"":""1389346530"",""time_favorited"":""0"",""sort_id"":1578,""resolved_title"":""On Software Quality and Building a Better Evernote in 2014"",""resolved_url"":""http://blog.evernote.com/blog/2014/01/04/on-software-quality/"",""excerpt"":""I got the wrong sort of birthday present yesterday: a sincerely-written post by Jason Kincaid lamenting a perceived decline in the quality of Evernote software over the past few months."",""word_count"":""1211""},{""item_id"":""516301575"",""favorite"":""0"",""status"":""1"",""time_added"":""1389085458"",""time_updated"":""1389256532"",""time_read"":""1389232048"",""time_favorited"":""0"",""sort_id"":1561,""resolved_title"":""UK must end dependency on low-wage foreign labour, says Ed Miliband"",""resolved_url"":""http://www.theguardian.com/uk-news/2014/jan/05/uk-dependency-foreign-labour-miliband"",""excerpt"":""Labour has clashed with big employers over plans to stop companies hiring tens of thousands of foreign workers through agencies at cheap rates."",""word_count"":""726""},{""item_id"":""516411202"",""favorite"":""0"",""status"":""1"",""time_added"":""1389008552"",""time_updated"":""1389110497"",""time_read"":""1389107414"",""time_favorited"":""0"",""sort_id"":1586,""resolved_title"":""Jerry Seinfeld on how to be funny without sex and swearing"",""resolved_url"":""http://www.theguardian.com/culture/2014/jan/05/jerry-seinfeld-funny-sex-swearing-sitcom-comedy"",""excerpt"":""Once or twice a week, towards the end of the day, Jerry Seinfeld leaves the Manhattan office where he spends his afternoons writing, but he doesn't head home to his family."",""word_count"":""2753""},{""item_id"":""516577089"",""favorite"":""0"",""status"":""1"",""time_added"":""1389085456"",""time_updated"":""1389257097"",""time_read"":""1389257091"",""time_favorited"":""0"",""sort_id"":1563,""resolved_title"":""Evernote to focus on fixing bugs after complaints"",""resolved_url"":""http://www.bbc.co.uk/news/technology-25617451#sa-ns_mchannel=rss%26ns_source=PublicRSS20-sa"",""excerpt"":""Evernote has promised to focus on tackling stability problems rather than adding new features after complaints about its record-keeping apps."",""word_count"":""667""},{""item_id"":""516603366"",""favorite"":""0"",""status"":""1"",""time_added"":""1389085457"",""time_updated"":""1389256532"",""time_read"":""1389232444"",""time_favorited"":""0"",""sort_id"":1562,""resolved_title"":""The Mint countries: Next economic giants?"",""resolved_url"":""http://www.bbc.co.uk/news/magazine-25548060"",""excerpt"":""In 2001 the world began talking about the Bric countries - Brazil, Russia, India and China - as potential powerhouses of the world economy. The term was coined by economist Jim O'Neill, who has now identified the \""Mint\"" countries - Mexico, Indonesia, Nigeria and Turkey - as emerging economic giants."",""word_count"":""1383""},{""item_id"":""516902916"",""favorite"":""0"",""status"":""1"",""time_added"":""1389090753"",""time_updated"":""1389171959"",""time_read"":""1389140151"",""time_favorited"":""0"",""sort_id"":1560,""resolved_title"":""Practical Math Shortcuts For Everyday Life"",""resolved_url"":""http://lifehacker.com/practical-math-shortcuts-for-everyday-life-1495337792"",""excerpt"":""'; if (google_ads[0].bidtype == 'CPC') { /* insert this snippet for each ad call */ google_adnum = google_adnum + google_ads.length; } document."",""word_count"":""804""},{""item_id"":""517305821"",""favorite"":""0"",""status"":""1"",""time_added"":""1389051729"",""time_updated"":""1398200641"",""time_read"":""1389106725"",""time_favorited"":""0"",""sort_id"":1574,""resolved_title"":""5 Myths Everyone Believes about Arduino (that aren’t true)"",""resolved_url"":""http://www.baldengineer.com/blog/2014/01/01/5-arduino-myths/"",""excerpt"":""Having spent the past 6 years writing code for the Arduino platform, I’ve noticed a trend in myths from both new-comers and veteran users.  Here are the Top 5 Myths I see come up on forums, in classes, and on IRC.  This myth isn’t helped by the Arduino."",""word_count"":""544""},{""item_id"":""517821118"",""favorite"":""0"",""status"":""1"",""time_added"":""1389120852"",""time_updated"":""1389617775"",""time_read"":""1389382798"",""time_favorited"":""0"",""sort_id"":1552,""resolved_title"":""Vimeo Launches Rebuilt Faster Video Player and Other Filmmaker-Friendly Tools"",""resolved_url"":""http://www.indiewire.com/article/vimeo-launches-rebuilt-faster-video-player-which-defaults-to-html5"",""excerpt"":""Vimeo has introduced a completely rebuilt video player, which is 50% faster to load and defaults to HTML5, the company announced today."",""word_count"":""283""},{""item_id"":""517966896"",""favorite"":""0"",""status"":""1"",""time_added"":""1389117252"",""time_updated"":""1389983350"",""time_read"":""1389980915"",""time_favorited"":""0"",""sort_id"":1557,""resolved_title"":""8K is not the future of TV. We think 21:9 Ultra Widescreen is instead. Here's why..."",""resolved_url"":""http://www.redsharknews.com/technology/item/1370-8k-is-not-the-future-of-tv-we-think-21-9-ultra-widescreen-is-instead?utm_source=www.lwks.com+subscribers&utm_campaign=d329943d4c-RSN_Jan07_2014&utm_medium=email&utm_term=0_079aaa3026-d329943d4c-75349817"",""excerpt"":""Screens are getting wider: wider than widescreen. And this is a good thing  The next logical thing after 4K is 8K, or so we're told. But I think there's a better alternative, that will give a nicer visual experience, and which doesn't need the almost impossibly high bandwidth demanded by 8K."",""word_count"":""2925""},{""item_id"":""518179925"",""favorite"":""0"",""status"":""1"",""time_added"":""1389226744"",""time_updated"":""1389230284"",""time_read"":""1389230279"",""time_favorited"":""0"",""sort_id"":1536,""resolved_title"":""'Legal Issues' Made Valve Swap Ubuntu for Debian in SteamOS"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/01/valve-based-steam-os-debian-ubuntu?utm_source=rss&utm_medium=rss&utm_campaign=valve-based-steam-os-debian-ubuntu"",""excerpt"":""Ever since Valve announced Steam OS last year one small detail has left many in the Linux community a little confused: why is the gaming OS based on Debian rather than Ubuntu?  The question may sound presumptive, but it is not without merit."",""word_count"":""451""},{""item_id"":""518238811"",""favorite"":""0"",""status"":""1"",""time_added"":""1389227776"",""time_updated"":""1389230083"",""time_read"":""1389230079"",""time_favorited"":""0"",""sort_id"":1534,""resolved_title"":""Details Emerge About the Wachowskis’ Globe-Spanning Netflix Series ‘Sense8′"",""resolved_url"":""http://www.slashfilm.com/details-emerge-about-the-wachowskis-globe-spanning-netflix-series-sense8/"",""excerpt"":""Andy and Lana Wachowski‘s Jupiter Ascending has been getting a lot of attention lately, because that’s what happens when you turn America’s Sweetheart into Jacobim Mugatu. But it’s just one of two major sci-fi projects due from the pair this year. The Wachowskis are also teaming with J."",""word_count"":""353""},{""item_id"":""518362965"",""favorite"":""0"",""status"":""1"",""time_added"":""1389229113"",""time_updated"":""1389229750"",""time_read"":""1389229746"",""time_favorited"":""0"",""sort_id"":1532,""resolved_title"":""Digital Ocean vs. Linode"",""resolved_url"":""http://blog.schneidmaster.com/digital-ocean-vs-linode/"",""excerpt"":""After two years as a Linode customer, I've just finished switching and migrating the sites/apps I manage over to Digital Ocean. While both services provide fantastic offerings and I'd recommend either, I found Digital Ocean to be more modern and flexible, with better features for the cost."",""word_count"":""593""},{""item_id"":""518508724"",""favorite"":""0"",""status"":""1"",""time_added"":""1389191774"",""time_updated"":""1389256531"",""time_read"":""1389231375"",""time_favorited"":""0"",""sort_id"":1546,""resolved_title"":""TED isn't a recipe for 'civilisational disaster'"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/jan/08/ted-not-civilisational-disaster-but-wikipedia"",""excerpt"":""Seven years ago, when TED Talks debuted online, the blogosphere buzzed contentedly over this new free form of intellectual food. The Guardian once published an op ed titled In Praise of … TED ."",""word_count"":""1667""},{""item_id"":""518869900"",""favorite"":""0"",""status"":""1"",""time_added"":""1389226744"",""time_updated"":""1389230162"",""time_read"":""1389230158"",""time_favorited"":""0"",""sort_id"":1537,""resolved_title"":""Shocker: David Cronenberg's 'Maps To The Stars\"" Rated R For Violence, Sex, Nudity & Drugs"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/shocker-david-cronenbergs-maps-to-the-stars-rated-r-for-violence-sex-nudity-drugs-20140108"",""excerpt"":""With Jane Campion named as the jury president for 67th Cannes Film Festival earlier this week, so begins the forward look to the events on the Croisette in May."",""word_count"":""320""},{""item_id"":""519005025"",""favorite"":""0"",""status"":""1"",""time_added"":""1389227775"",""time_updated"":""1389256531"",""time_read"":""1389230865"",""time_favorited"":""0"",""sort_id"":1535,""resolved_title"":""Martin Scorsese Writes Open Letter Discussing the Future of Cinema"",""resolved_url"":""http://www.slashfilm.com/martin-scorsese-writes-open-letter-discussing-the-future-of-cinema/"",""excerpt"":""Depending on who you talk to in Hollywood, the future of the film industry is in question. Steven Spielberg and George Lucas said last year they think the machine will eventually break because of the massive budgets relied upon for major blockbusters."",""word_count"":""978""},{""item_id"":""519049077"",""favorite"":""0"",""status"":""1"",""time_added"":""1389226742"",""time_updated"":""1389354239"",""time_read"":""1389346056"",""time_favorited"":""0"",""sort_id"":1539,""resolved_title"":""Should you buy a new Mac Pro now or wait? Here's a detailed guide"",""resolved_url"":""http://www.redsharknews.com/technology/item/1378-sould-you-buy-a-new-mac-pro-now-or-wait-here-s-a-detailed-guide"",""excerpt"":""The Mac Pro's (sort of) available now. Assuming you can lay your hands on one, should you get one now, or should you wait. A lot depends on your NLE  We're publishing a few articles on different aspects of possibly the most important new computer for a decade: the new Mac Pro."",""word_count"":""2556""},{""item_id"":""519537682"",""favorite"":""0"",""status"":""1"",""time_added"":""1389289344"",""time_updated"":""1389354238"",""time_read"":""1389345110"",""time_favorited"":""0"",""sort_id"":1530,""resolved_title"":""Viewing Pirated Streams is Not Illegal, German Govt Says"",""resolved_url"":""http://torrentfreak.com/viewing-pirated-streams-is-not-illegal-german-govt-says-140109/"",""excerpt"":""The controversial RedTube case in Germany has provoked an interesting response from the Ministry of Justice."",""word_count"":""390""},{""item_id"":""519581648"",""favorite"":""0"",""status"":""1"",""time_added"":""1389636135"",""time_updated"":""1390033473"",""time_read"":""1390033469"",""time_favorited"":""0"",""sort_id"":1519,""resolved_title"":""Googles Ray Kurzweil predicts how the world will change"",""resolved_url"":""http://slumz.boxden.com/f244/google-s-ray-kurzweil-predicts-how-world-will-change-2023326/"",""excerpt"":""Kurzweil doesnt just foretell the future, though  he is also responsible for helping to shape it."",""word_count"":""2643""},{""item_id"":""520282091"",""favorite"":""0"",""status"":""1"",""time_added"":""1390306769"",""time_updated"":""1392133309"",""time_read"":""1392066649"",""time_favorited"":""0"",""sort_id"":1479,""resolved_title"":""voices.yahoo.com"",""resolved_url"":""http://voices.yahoo.com/bitcoin-20-explained-colored-coins-vs-mastercoin-vs-12475857.html"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""520559109"",""favorite"":""0"",""status"":""1"",""time_added"":""1389399510"",""time_updated"":""1389793589"",""time_read"":""1389784206"",""time_favorited"":""0"",""sort_id"":1527,""resolved_title"":""Pebble Smartwatch Review: A Useful Dumbwatch"",""resolved_url"":""http://programmingzen.com/2014/01/10/pebble-smartwatch-review-a-useful-dumbwatch/"",""excerpt"":""Just before Christmas I received a Pebble Smartwatch (Manufacturer | Amazon). This is a brief review, but I’ll try to share everything that you realistically need to know before deciding on whether to get this gadget."",""word_count"":""787""},{""item_id"":""522203908"",""favorite"":""0"",""status"":""1"",""time_added"":""1389636134"",""time_updated"":""1389696794"",""time_read"":""1389696792"",""time_favorited"":""0"",""sort_id"":1520,""resolved_title"":""EU Offers Public a Chance to Fix Copyright Law"",""resolved_url"":""http://torrentfreak.com/eu-offers-public-a-chance-to-fix-copyright-law-140113/"",""excerpt"":""Copyright and the Internet have been struggling to get along for many years and some feel we are now due a comprehensive update of the former in order for it to work more harmoniously with the latter."",""word_count"":""645""},{""item_id"":""522207348"",""favorite"":""0"",""status"":""1"",""time_added"":""1389787443"",""time_updated"":""1389983350"",""time_read"":""1389979755"",""time_favorited"":""0"",""sort_id"":1509,""resolved_title"":""Why Her Will Dominate UI Design Even More Than Minority Report"",""resolved_url"":""http://www.wired.com/design/2014/01/will-influential-ui-design-minority-report/"",""excerpt"":""A few weeks into the making of Her, Spike Jonze’s new flick about romance in the age of artificial intelligence, the director had something of a breakthrough."",""word_count"":""2241""},{""item_id"":""522270504"",""favorite"":""0"",""status"":""1"",""time_added"":""1389636136"",""time_updated"":""1389696627"",""time_read"":""1389696625"",""time_favorited"":""0"",""sort_id"":1518,""resolved_title"":""Windows 9 to be unveiled in April, distances itself from Windows 8 - Report"",""resolved_url"":""http://www.gamespot.com/articles/windows-9-to-be-unveiled-in-april-distances-itself-from-windows-8-report/1100-6417095/"",""excerpt"":""Microsoft will attempt to distance itself from Windows 8 by announcing its successor, Windows 9, at the company's annual Build conference in April, according to prominent Microsoft blogger Paul Thurrott."",""word_count"":""190""},{""item_id"":""522280763"",""favorite"":""0"",""status"":""1"",""time_added"":""1389637116"",""time_updated"":""1389696572"",""time_read"":""1389696570"",""time_favorited"":""0"",""sort_id"":1517,""resolved_title"":""An ultrasonic eye for the visually impaired – #ArduinoMicroMonday"",""resolved_url"":""http://blog.arduino.cc/2014/01/13/an-ultrasonic-eye-for-the-visually-impaired-arduinomicromonday/"",""excerpt"":""Dhavalis  lives in Surat (India) and grew up watching Sci-Fi and Super Hero Movies which made him believe that technology can overcome human weaknesses.  He wrote us to share Netra (it  means “eye” in Sanskrit), a project done during his second year of undergraduate engineering studies:"",""word_count"":""100""},{""item_id"":""522608584"",""favorite"":""1"",""status"":""1"",""time_added"":""1390309468"",""time_updated"":""1390812644"",""time_read"":""1390642170"",""time_favorited"":""1390402735"",""sort_id"":1474,""resolved_title"":""Technology for Artists: An Interview with Clive Thompson"",""resolved_url"":""http://tribecafilm.com/features/interview-clive-thompson-jess-kimball-leslie"",""excerpt"":""In late December I interviewed Clive Thompson, author of Smarter Than You Think: How Technology is Changing Our Minds for the Better.  Clive Thompson: I think that epiphany comes from conversations that I had with Cathy Marshall."",""word_count"":""3379""},{""item_id"":""522631922"",""favorite"":""0"",""status"":""1"",""time_added"":""1389788349"",""time_updated"":""1389886936"",""time_read"":""1389874414"",""time_favorited"":""0"",""sort_id"":1503,""resolved_title"":""Upcoming Third Season of 'The Newsroom' Will Be Its Last; Plus Aaron Sorkin Completes Steve Jobs Script"",""resolved_url"":""http://www.slashfilm.com/upcoming-third-season-of-the-newsroom-will-be-its-last-plus-aaron-sorkin-completes-steve-jobs-script/"",""excerpt"":""When it comes to HBO’s series The Newsroom, people either love it or hate it. Knowing that, today everyone got some good news. For fans, a third season of the show has officially been announced. That third season will also be the series’ last."",""word_count"":""209""},{""item_id"":""523243463"",""favorite"":""0"",""status"":""1"",""time_added"":""1389782894"",""time_updated"":""1389983349"",""time_read"":""1389978964"",""time_favorited"":""0"",""sort_id"":1514,""resolved_title"":""Notes on CES 2014"",""resolved_url"":""http://www.tigoe.net/blog/category/networks/452/"",""excerpt"":""Last week I went to the Consumer Electronics Show in Las Vegas, mostly to see interesting connected devices. What follows is a summary of some of the highlights, for me.  If you’re in the motion tracker business, you’re in trouble. There were several dozen of your competitors on display."",""word_count"":""1689""},{""item_id"":""523377313"",""favorite"":""0"",""status"":""1"",""time_added"":""1389783311"",""time_updated"":""1389983349"",""time_read"":""1389978767"",""time_favorited"":""0"",""sort_id"":1512,""resolved_title"":""The battle’s been lost, but we can win the war."",""resolved_url"":""http://www.slate.com/articles/technology/future_tense/2014/01/net_neutrality_d_c_circuit_court_ruling_the_battle_s_been_lost_but_we_can.html"",""excerpt"":""The D.C. Circuit Court of Appeals just issued its long-awaited decision striking down the FCC’s network neutrality rule. This is the second time in four years that this court struck down the FCC’s attempt to adopt a network neutrality rule."",""word_count"":""4380""},{""item_id"":""523398762"",""favorite"":""0"",""status"":""1"",""time_added"":""1389788349"",""time_updated"":""1389886936"",""time_read"":""1389874391"",""time_favorited"":""0"",""sort_id"":1502,""resolved_title"":""WTF: ‘Breaking Bad’ Blue Meth Actually Circulating in New Mexico"",""resolved_url"":""http://www.slashfilm.com/wtf-breaking-bad-blue-meth-actually-circulating-in-new-mexico/"",""excerpt"":""Briefly: Call it a sick case of life imitating art, but ABC News is reporting methamphetamine tinted the color blue has begun circulating in the Four Corners section of New Mexico. Blue meth, of course, was the signature drug created by Walter White in Breaking Bad."",""word_count"":""105""},{""item_id"":""523407497"",""favorite"":""0"",""status"":""1"",""time_added"":""1389788348"",""time_updated"":""1390032558"",""time_read"":""1390032554"",""time_favorited"":""0"",""sort_id"":1504,""resolved_title"":""Berlinale 2014. International Jury on Notebook"",""resolved_url"":""http://mubi.com/notebook/posts/berlinale-2014-international-jury"",""excerpt"":""The Palme d’Or winner is much more than its sex scenes—it’s all the pieces around them that define the film."",""word_count"":""27""},{""item_id"":""524687412"",""favorite"":""0"",""status"":""1"",""time_added"":""1412951618"",""time_updated"":""1412981289"",""time_read"":""1412981282"",""time_favorited"":""0"",""sort_id"":227,""resolved_title"":""Books go online for free in Norway"",""resolved_url"":""http://www.telegraph.co.uk/culture/books/booknews/10575900/Books-go-online-for-free-in-Norway.html"",""excerpt"":""National Library of Norway puts more than 135,000 copyright-protected books    online for free – and pays authors and publishers     More than 135,000 books still in copyright are going online for free in Norway    after an innovative scheme by the National Library ensured that publishers    and"",""word_count"":""454""},{""item_id"":""524942997"",""favorite"":""0"",""status"":""1"",""time_added"":""1392124056"",""time_updated"":""1393491725"",""time_read"":""1393491722"",""time_favorited"":""0"",""sort_id"":1299,""resolved_title"":""Why Can’t We Stop Working?"",""resolved_url"":""http://blogs.hbr.org/2014/01/why-cant-we-stop-working/"",""excerpt"":""I hadn’t seen Jim in two years. When we reconnected recently, I was shocked. The handsome, dapper professional I knew had gained 30 pounds and started smoking."",""word_count"":""807""},{""item_id"":""525611248"",""favorite"":""0"",""status"":""1"",""time_added"":""1390905487"",""time_updated"":""1391071213"",""time_read"":""1391066547"",""time_favorited"":""0"",""sort_id"":1434,""resolved_title"":""The Death Of Expertise"",""resolved_url"":""http://thefederalist.com/2014/01/17/the-death-of-expertise/"",""excerpt"":""We can all stipulate: the expert isn’t always right. But an expert is far more likely to be right than you are. On a question of factual interpretation or evaluation, it shouldn’t engender insecurity or anxiety to think that an expert’s view is likely to be better-informed than yours."",""word_count"":""214""},{""item_id"":""525932337"",""favorite"":""0"",""status"":""1"",""time_added"":""1390002154"",""time_updated"":""1390032938"",""time_read"":""1390032935"",""time_favorited"":""0"",""sort_id"":1490,""resolved_title"":""How Can I Fall Asleep Faster?"",""resolved_url"":""http://lifehacker.com/how-can-i-fall-asleep-faster-1503720985"",""excerpt"":""The latest sleep research has revealed a good night's rest is more important than we ever thought. Sleep doesn't just reinforce memories and make you feel alert the next day—it flushes dangerous proteins from your brain, maintaining your mental health into old age."",""word_count"":""62""},{""item_id"":""526028404"",""favorite"":""0"",""status"":""1"",""time_added"":""1390140398"",""time_updated"":""1390295234"",""time_read"":""1390295228"",""time_favorited"":""0"",""sort_id"":1486,""resolved_title"":""Netflix Streaming Debuts Egyptian Revolution Oscar Contender Doc 'The Square' Today"",""resolved_url"":""http://blogs.indiewire.com/shadowandact/netflix-streaming-debuts-egyptian-revolution-oscar-contender-doc-the-square-today"",""excerpt"":""After successful screenings at the Toronto International Film Festival and the New York Film Festival, The Square (Al Midan) from director Jehane Noujaim, opened theatrically at the Film Forum theaters here in NYC and in LA in the last months (a self-financed Oscar-qualifying run), and was soon af"",""word_count"":""328""},{""item_id"":""526483388"",""favorite"":""0"",""status"":""1"",""time_added"":""1390140396"",""time_updated"":""1390209176"",""time_read"":""1390209166"",""time_favorited"":""0"",""sort_id"":1488,""resolved_title"":""Thirty Years Since Betamax, and Movies Are Still Being Made"",""resolved_url"":""http://torrentfreak.com/thirty-years-since-betamax-and-movies-are-still-being-made-140118/"",""excerpt"":""Thirty years ago yesterday the US Supreme Court (SCOTUS) ruled that time-shifting of TV shows using video recorders was legal. The ‘Betamax’ case, or Universal v Sony for its real name, has proven one thing for certain."",""word_count"":""711""},{""item_id"":""526567540"",""favorite"":""0"",""status"":""1"",""time_added"":""1390306770"",""time_updated"":""1390330871"",""time_read"":""1390330499"",""time_favorited"":""0"",""sort_id"":1478,""resolved_title"":""Feedly Found a New Way to Steal Page Views From Publishers"",""resolved_url"":""http://www.the-digital-reader.com/2014/01/18/feedly-found-new-way-steal-page-views-publishers/#.Ut3WTXGQGc0"",""excerpt"":""Feedly announced their new URL shortening service this week, and it turns out that they are much more subtle scoundrels than I expected.  Not only is this new service opt-out, it also siphons away page views from mobile visitors."",""word_count"":""793""},{""item_id"":""527684148"",""favorite"":""0"",""status"":""1"",""time_added"":""1390306773"",""time_updated"":""1390314574"",""time_read"":""1390314567"",""time_favorited"":""0"",""sort_id"":1477,""resolved_title"":""The End of 35mm film distribution. Cinema will never be the same: It will actually be better."",""resolved_url"":""http://www.redsharknews.com/distribution/item/1407-the-end-of-35mm-film-distribution-cinema-will-never-be-the-same-it-will-actually-be-better"",""excerpt"":""If you live in the US and want to see a Paramount movie on 35mm, you're going to have to go and watch Anchorman 2. Well, it is described as “nearly as funny as its predecessor” on Rotten Tomatoes"",""word_count"":""520""},{""item_id"":""528032368"",""favorite"":""0"",""status"":""1"",""time_added"":""1390345576"",""time_updated"":""1390379306"",""time_read"":""1390379300"",""time_favorited"":""0"",""sort_id"":1466,""resolved_title"":""The rise of the part-time vegans"",""resolved_url"":""http://www.bbc.co.uk/news/magazine-25644903"",""excerpt"":""Once veganism was widely associated with animal rights activists, the health conscious and the religious. But now more and more people are dabbling with a vegan diet, albeit temporarily. Why?"",""word_count"":""1301""},{""item_id"":""528343855"",""favorite"":""0"",""status"":""1"",""time_added"":""1390344521"",""time_updated"":""1391085340"",""time_read"":""1391079579"",""time_favorited"":""0"",""sort_id"":1470,""resolved_title"":""In flight: see the planes in the sky right now"",""resolved_url"":""http://www.theguardian.com/world/ng-interactive/2014/aviation-100-years"",""excerpt"":""To mark 100 years of passenger air travel, our stunning interactive uses live data from FlightStats to show every one of the thousands of commercial planes currently in the air, charts the history of aviation since 1914, and asks what comes next for the industry"",""word_count"":""43""},{""item_id"":""528569856"",""favorite"":""0"",""status"":""1"",""time_added"":""1390344522"",""time_updated"":""1390378962"",""time_read"":""1390378955"",""time_favorited"":""0"",""sort_id"":1469,""resolved_title"":""The Most (and Least) Reliable Hard Drive Brands"",""resolved_url"":""http://lifehacker.com/the-most-and-least-reliable-hard-drive-brands-1505797966"",""excerpt"":""Backblaze uses 25,000 hard drives for its online backup service. This has provided some interesting information, such as how long hard drives are likely to last and the difference in reliability between enterprise and consumer drives."",""word_count"":""241""},{""item_id"":""528688277"",""favorite"":""0"",""status"":""1"",""time_added"":""1390344520"",""time_updated"":""1390464741"",""time_read"":""1390383877"",""time_favorited"":""0"",""sort_id"":1471,""resolved_title"":""Will There Be Any Poor Countries Left in the World in 20 Years?"",""resolved_url"":""http://www.theatlantic.com/international/archive/2014/01/will-there-be-any-poor-countries-left-in-the-world-in-20-years/283223/"",""excerpt"":""We hear these myths raised at international conferences and at social gatherings. We get asked about them by politicians, reporters, students, and CEOs. All three reflect a dim view of the future, one that says the world isn’t improving but staying poor and sick, and getting overcrowded."",""word_count"":""494""},{""item_id"":""530133224"",""favorite"":""0"",""status"":""1"",""time_added"":""1390905645"",""time_updated"":""1391071213"",""time_read"":""1391066773"",""time_favorited"":""0"",""sort_id"":1433,""resolved_title"":""5 Common Mistakes You’re Making With Your Email Signature"",""resolved_url"":""http://www.fastcompany.com/3025208/how-to-be-a-success-at-everything/5-common-mistakes-youre-making-with-your-email-signature"",""excerpt"":""If your subject line is lame, your email doesn’t get read. The average person receives more than 50 emails a day and a quarter of us receive more than 100, according to a 2012 study by the software company Varonis Systems."",""word_count"":""751""},{""item_id"":""530198537"",""favorite"":""0"",""status"":""1"",""time_added"":""1390565109"",""time_updated"":""1391085339"",""time_read"":""1391078742"",""time_favorited"":""0"",""sort_id"":1452,""resolved_title"":""All library audiobooks going to DRM-free MP3s"",""resolved_url"":""http://boingboing.net/2014/01/23/all-library-audiobooks-going-t.html"",""excerpt"":""This is a big deal. Audiobooks are the last holdouts for DRM in audio, and one company, Audible, controls the vast majority of the market and insists upon DRM in all of its catalog (even when authors and publishers object)."",""word_count"":""452""},{""item_id"":""530236805"",""favorite"":""0"",""status"":""1"",""time_added"":""1390563909"",""time_updated"":""1391085339"",""time_read"":""1391078942"",""time_favorited"":""0"",""sort_id"":1453,""resolved_title"":""‘Twin Peaks’ Star Sherilyn Fenn Talks The Show’s Ending & Her Character Audrey’s Ties To ‘Mulholland Drive’"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/twin-peaks-star-sherilyn-fenn-talks-the-shows-ending-her-character-audreys-ties-to-mulholland-drive-20140123"",""excerpt"":""Communication has proven itself somewhat scrambled lately at “Twin Peaks” HQ — or at least as mysteriously messy as befits the David Lynch/Mark Frost-created show."",""word_count"":""493""},{""item_id"":""530449422"",""favorite"":""0"",""status"":""1"",""time_added"":""1390904482"",""time_updated"":""1391085336"",""time_read"":""1391073468"",""time_favorited"":""0"",""sort_id"":1435,""resolved_title"":""Work-life haven: why entrepreneurs and digital nomads are settling in Bali"",""resolved_url"":""http://blog.thefetch.com/2014/01/23/work-life-haven-why-entrepreneurs-and-digital-nomads-are-settling-in-bali/"",""excerpt"":""“I’ve never been as productive as I have been living in Bali. There’s an opportunity here to access yoga, healthy food and fresh air that’s more difficult to come by in a city. It’s a place people come to get perspective on their lives… a unique opportunity to get perspective and focus."",""word_count"":""1192""},{""item_id"":""530481009"",""favorite"":""0"",""status"":""1"",""time_added"":""1390563908"",""time_updated"":""1391085339"",""time_read"":""1391079018"",""time_favorited"":""0"",""sort_id"":1454,""resolved_title"":""SeaWorld Says 'Blackfish' is 'Propaganda.' The Filmmakers Say They Want a Public Debate."",""resolved_url"":""http://www.indiewire.com/article/blackfish-filmmakers-challenge-seaworld-to-a-debate-after-they-call-the-doc-propaganda"",""excerpt"":""Back in July, SeaWorld attempted some spin control -- responding to Gabriela Cowperthwaite's documentary \""Blackfish\"" with a list of 8 problems they had with the film."",""word_count"":""333""},{""item_id"":""530952282"",""favorite"":""0"",""status"":""1"",""time_added"":""1390659881"",""time_updated"":""1390848489"",""time_read"":""1390819343"",""time_favorited"":""0"",""sort_id"":1445,""resolved_title"":""The Best Time and Time of Day to Book Airline Tickets"",""resolved_url"":""http://lifehacker.com/the-best-time-and-time-of-day-to-book-airline-tickets-1507704370"",""excerpt"":""If you're looking for a deal on airfare, common wisdom is to book early and be flexible with your dates. While flexibility is good, the advance part may cost you money. Peter Greenberg, CBS News' travel editor, shared some of his tips to save money and avoid costly mistakes when booking airfare."",""word_count"":""625""},{""item_id"":""531093274"",""favorite"":""0"",""status"":""1"",""time_added"":""1390643692"",""time_updated"":""1391085338"",""time_read"":""1391078145"",""time_favorited"":""0"",""sort_id"":1448,""resolved_title"":""VPN, privacy and anonymity"",""resolved_url"":""https://spideroak.com/blog/20140124105217-vpn-privacy-anonymity"",""excerpt"":""There is a common misconception when it comes to anonymity and privacy for users and VPNs that we felt we should try to clarify."",""word_count"":""1518""},{""item_id"":""531323217"",""favorite"":""0"",""status"":""1"",""time_added"":""1390659879"",""time_updated"":""1391192282"",""time_read"":""1391077848"",""time_favorited"":""0"",""sort_id"":1447,""resolved_title"":""Lessons from the World's Most Tech-Savvy Government"",""resolved_url"":""http://www.theatlantic.com/international/archive/2014/01/lessons-from-the-worlds-most-tech-savvy-government/283341/"",""excerpt"":""An Estonian shares his country's strategy for navigating the digital world. Lately, I have been getting a lot of questions about Healthcare.gov. People want to know why it cost between two and four times as much money to create a broken website than to build the original iPhone."",""word_count"":""2651""},{""item_id"":""531666788"",""favorite"":""0"",""status"":""1"",""time_added"":""1390659881"",""time_updated"":""1390812978"",""time_read"":""1390812976"",""time_favorited"":""0"",""sort_id"":1446,""resolved_title"":""Hitmen for hire: academics unlock the secret behaviour of Britain's contract killers"",""resolved_url"":""http://www.theguardian.com/uk-news/2014/jan/25/hitmen-for-hire-secrets-contract-killers"",""excerpt"":""They are classified as novices, journeymen, dilettantes or masters. They are Britain's hitmen – killers who ply their deadly trade in return for cash, and who for the first time have become the subject of a major academic study."",""word_count"":""964""},{""item_id"":""532397549"",""favorite"":""0"",""status"":""1"",""time_added"":""1391425149"",""time_updated"":""1391509021"",""time_read"":""1391450811"",""time_favorited"":""0"",""sort_id"":1337,""resolved_title"":""Who needs a computer anymore?"",""resolved_url"":""https://medium.com/ux-usability/b8e1f24b9d13"",""excerpt"":""People have iPads now. It’s pretty cool.  Most of your day must be writing or reading then, and if so, that’s awesome. My wife’s a writer. If this were the past, you’d be arguing that a clean desk and a single sheet of paper is all you need."",""word_count"":""733""},{""item_id"":""532646300"",""favorite"":""0"",""status"":""1"",""time_added"":""1390997924"",""time_updated"":""1391071210"",""time_read"":""1391063046"",""time_favorited"":""0"",""sort_id"":1411,""resolved_title"":""Stratasys launches multi-material colour 3D printer"",""resolved_url"":""http://www.bbc.co.uk/news/technology-25878078"",""excerpt"":""The world's first multi-material full-colour 3D printer has been launched by Stratasys, the owner of the MakerBot range of printers.  It features \""triple-jetting\"" technology that combines droplets of three base materials, reducing the need for separate print runs and painting."",""word_count"":""304""},{""item_id"":""532671497"",""favorite"":""0"",""status"":""1"",""time_added"":""1390824178"",""time_updated"":""1390985105"",""time_read"":""1390917784"",""time_favorited"":""0"",""sort_id"":1438,""resolved_title"":""Why “Simple” Websites Are Scientifically Superior"",""resolved_url"":""http://soshitech.com/2014/01/27/why-simple-websites-are-scientifically-superior/"",""excerpt"":""Originally found on ConversionXL."",""word_count"":""1890""},{""item_id"":""532828324"",""favorite"":""0"",""status"":""1"",""time_added"":""1390822793"",""time_updated"":""1391085338"",""time_read"":""1391077269"",""time_favorited"":""0"",""sort_id"":1440,""resolved_title"":""Google Found an Artificial Brain to Power Its Robot Army"",""resolved_url"":""http://gizmodo.com/googles-buying-an-ai-startup-called-deepmind-for-500m-1509664408"",""excerpt"":""Clearly not content with buying a terrifying robot army, Google is now purchasing a London-based artificial intelligence company to go with it—for a cool $500 million."",""word_count"":""225""},{""item_id"":""532876214"",""favorite"":""0"",""status"":""1"",""time_added"":""1390865067"",""time_updated"":""1391071214"",""time_read"":""1391067080"",""time_favorited"":""0"",""sort_id"":1436,""resolved_title"":""The Coworking Forecast 2014"",""resolved_url"":""http://www.deskmag.com/en/the-coworking-market-report-forecast-2014"",""excerpt"":""The overall expansion plans for coworking spaces has stalled over the past three years. Does this slight downturn forecast the end of coworking’s golden age? Absolutely not!"",""word_count"":""963""},{""item_id"":""532951360"",""favorite"":""0"",""status"":""1"",""time_added"":""1390997919"",""time_updated"":""1391071211"",""time_read"":""1391064229"",""time_favorited"":""0"",""sort_id"":1414,""resolved_title"":""The X-Files is 20: six ways that Scully and Mulder changed TV"",""resolved_url"":""http://www.theguardian.com/tv-and-radio/tvandradioblog/2014/jan/27/the-x-files-20-scully-mulder-changed-tv"",""excerpt"":""The X-Files beamed down to the UK 20 years ago yesterday, first screening on Sky1 on 26 January in 1994 (and coming to BBC2 nine months later)."",""word_count"":""779""},{""item_id"":""532997363"",""favorite"":""0"",""status"":""1"",""time_added"":""1390950218"",""time_updated"":""1391071211"",""time_read"":""1391063836"",""time_favorited"":""0"",""sort_id"":1418,""resolved_title"":""Start-ups challenge big banks' technology"",""resolved_url"":""http://www.bbc.co.uk/news/business-25911784"",""excerpt"":""Big banks beware - innovative technology challengers are coming to eat your lunch.  That was the key message emerging last week from FinTech City London, a series of events for financial services technology professionals organised by the CEO Agenda and Icon Corporate Finance."",""word_count"":""972""},{""item_id"":""533083989"",""favorite"":""0"",""status"":""1"",""time_added"":""1390865065"",""time_updated"":""1391071214"",""time_read"":""1391067128"",""time_favorited"":""0"",""sort_id"":1437,""resolved_title"":""Guest Post: Can you trust a VPN to protect your privacy?"",""resolved_url"":""https://spideroak.com/blog/20140127094154-can-trust-vpn-protect-your-privacy"",""excerpt"":""Privacy by policy vs. privacy by design: At SpiderOak we always preach privacy by design, we don’t *choose* to not see your data, we just *can’t*.  Sadly, a lot of online services cannot take on that philosophy, simply because of how the internet works right now. This is the case of VPN."",""word_count"":""985""},{""item_id"":""533216045"",""favorite"":""0"",""status"":""1"",""time_added"":""1390916036"",""time_updated"":""1391009929"",""time_read"":""1390996622"",""time_favorited"":""0"",""sort_id"":1430,""resolved_title"":""Dark lands: the grim truth behind the 'Scandinavian miracle'"",""resolved_url"":""http://www.theguardian.com/world/2014/jan/27/scandinavian-miracle-brutal-truth-denmark-norway-sweden"",""excerpt"":""For the past few years the world has been in thrall to all things Nordic (for which purpose we must of course add Iceland and Finland to the Viking nations of Denmark, Norway and Sweden)."",""word_count"":""2352""},{""item_id"":""533300869"",""favorite"":""0"",""status"":""1"",""time_added"":""1390950215"",""time_updated"":""1391071212"",""time_read"":""1391064481"",""time_favorited"":""0"",""sort_id"":1421,""resolved_title"":""Germany: loss of trust in EU is 'great danger'"",""resolved_url"":""http://www.theguardian.com/world/2014/jan/27/first-world-war-eu-german-minister"",""excerpt"":""The loss of trust in the European Union presents a \""great danger\"" as opponents resort to \""nationalist rhetoric sung to the catchy tune of criticism of Europe\"", the German foreign minister has warned."",""word_count"":""786""},{""item_id"":""533321076"",""favorite"":""0"",""status"":""1"",""time_added"":""1391425052"",""time_updated"":""1391509022"",""time_read"":""1391452947"",""time_favorited"":""0"",""sort_id"":1339,""resolved_title"":""7 Ways To Stay Balanced And Happy Even When You’re Extremely Busy"",""resolved_url"":""http://www.lifehack.org/articles/communication/7-ways-stay-balanced-and-happy-even-when-youre-extremely-busy.html"",""excerpt"":""People are living busier and busier lives these days, taking on more and more with every passing month‒more work commitments, relationship commitments, family commitments, social commitments, the list goes on… therefore staying happy and relatively balanced seems a task of Sisyphus (the man in"",""word_count"":""1325""},{""item_id"":""533905042"",""favorite"":""0"",""status"":""1"",""time_added"":""1390948378"",""time_updated"":""1391085337"",""time_read"":""1391077203"",""time_favorited"":""0"",""sort_id"":1426,""resolved_title"":""Attention, Filmmakers: The Tribeca Film Festival Launches Interactive Music Video Contest"",""resolved_url"":""http://www.indiewire.com/article/the-tribeca-film-festival-launches-tribeca-interactive-interlude-a-music-film-challenge"",""excerpt"":""The Tribeca Film Festival will launch \""Tribeca Interactive & Interlude: A Music Film Challenge in collaboration with The Lincoln Motor Company,\"" a new contest for digital storytellers to create interactive music films, the festival announced today."",""word_count"":""685""},{""item_id"":""533931381"",""favorite"":""0"",""status"":""1"",""time_added"":""1390948379"",""time_updated"":""1391071212"",""time_read"":""1391066275"",""time_favorited"":""0"",""sort_id"":1425,""resolved_title"":""Her"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/jan/28/spike-jonze-her-movie-internet-addict-sex-phone"",""excerpt"":""I have lived in Britain long enough to know that enthusiasm and cheerleading will never get you much credibility here – deprecation, misanthropy and a dash of inverse snobbery are the far cooler attitudes to adopt – so I apologise for the upcoming expression of total and unabashed positivity: t"",""word_count"":""1015""},{""item_id"":""534006324"",""favorite"":""0"",""status"":""1"",""time_added"":""1390950214"",""time_updated"":""1391071212"",""time_read"":""1391064663"",""time_favorited"":""0"",""sort_id"":1422,""resolved_title"":""'Confusion' led to BBC digital project failure"",""resolved_url"":""http://www.bbc.co.uk/news/entertainment-arts-25925357"",""excerpt"":""Confusion and a lack of planning were the reasons behind the failure of the BBC's £98.4m Digital Media Initiative (DMI), according to a report.  The BBC's technology chief John Linwood was sacked in July over the project's demise."",""word_count"":""660""},{""item_id"":""534038896"",""favorite"":""0"",""status"":""1"",""time_added"":""1390950213"",""time_updated"":""1391085337"",""time_read"":""1391076993"",""time_favorited"":""0"",""sort_id"":1423,""resolved_title"":""On Nollywood's Domestic & International Piracy Problems & Lost Revenues..."",""resolved_url"":""http://blogs.indiewire.com/shadowandact/nollywood-a-thing-or-two-about-domestic-international-piracy-lost-revenues"",""excerpt"":""Piracy - a problem that we here in the USA frequently lament, as one of a number of ills harming black cinema in this country, is also very much a problem in one of the other largest film industries in the world, Nigeria's Nollywood."",""word_count"":""448""},{""item_id"":""534215647"",""favorite"":""0"",""status"":""1"",""time_added"":""1391005995"",""time_updated"":""1391071210"",""time_read"":""1391062926"",""time_favorited"":""0"",""sort_id"":1409,""resolved_title"":""Makerspaces and libraries: two great tastes that taste great together"",""resolved_url"":""http://boingboing.net/2014/01/28/makerspaces-and-libraries-two.html"",""excerpt"":""Alex Duner describes the rise and rise of makerspaces in libraries, rattling off an impressive list of public libraries that have taken the mission of turning knowledge into action to the next step."",""word_count"":""227""},{""item_id"":""534250233"",""favorite"":""0"",""status"":""1"",""time_added"":""1390997917"",""time_updated"":""1391071210"",""time_read"":""1391063238"",""time_favorited"":""0"",""sort_id"":1415,""resolved_title"":""Apple's iPod: is the end nigh?"",""resolved_url"":""http://www.bbc.co.uk/news/technology-25927366"",""excerpt"":""Few pieces of technology can genuinely claim to be iconic. But Apple's iPod, first launched in 2001, arguably fits the bill."",""word_count"":""777""},{""item_id"":""534468026"",""favorite"":""0"",""status"":""1"",""time_added"":""1390995791"",""time_updated"":""1391071214"",""time_read"":""1391071020"",""time_favorited"":""0"",""sort_id"":1417,""resolved_title"":""UK government plans switch from Microsoft Office to open source"",""resolved_url"":""http://www.theguardian.com/technology/2014/jan/29/uk-government-plans-switch-to-open-source-from-microsoft-office-suite"",""excerpt"":""Ministers are looking at saving tens of millions of pounds a year by abandoning expensive software produced by firms such as Microsoft.  Some £200m has been spent by the public sector on the computer giant's Office suite alone since 2010."",""word_count"":""512""},{""item_id"":""535131780"",""favorite"":""0"",""status"":""1"",""time_added"":""1391170432"",""time_updated"":""1392133306"",""time_read"":""1392064517"",""time_favorited"":""0"",""sort_id"":1392,""resolved_title"":""Snowden Docs: U.S. Spied On Negotiators At 2009 Climate Summit"",""resolved_url"":""http://www.huffingtonpost.com/2014/01/29/snowden-nsa-surveillance-_n_4681362.html"",""excerpt"":""WASHINGTON -- The National Security Agency monitored the communications of other governments ahead of and during the 2009 United Nations climate negotiations in Copenhagen, Denmark, according to the latest document from whistleblower Edward Snowden."",""word_count"":""1501""},{""item_id"":""535314375"",""favorite"":""0"",""status"":""1"",""time_added"":""1391171196"",""time_updated"":""1392133306"",""time_read"":""1392064672"",""time_favorited"":""0"",""sort_id"":1390,""resolved_title"":""Theresa May presses ahead with power to make Brits stateless"",""resolved_url"":""http://politics.co.uk/news/2014/01/30/theresa-may-presses-ahead-with-power-to-make-brits-stateless"",""excerpt"":""British subjects could be stripped of their citizenship and left stateless, under plans being brought forward by Theresa May."",""word_count"":""604""},{""item_id"":""535327408"",""favorite"":""0"",""status"":""1"",""time_added"":""1414626090"",""time_updated"":""1414667527"",""time_read"":""1414631622"",""time_favorited"":""0"",""sort_id"":152,""resolved_title"":""Cryptography Hacks - Hash Encryption using DuckDuckGo Search Engine"",""resolved_url"":""http://thehackernews.com/2014/01/cryptography-hacks-hash-encryption.html"",""excerpt"":""Over the past several months, it has become clear that the Internet and our Privacy have been fundamentally compromised."",""word_count"":""515""},{""item_id"":""535399793"",""favorite"":""0"",""status"":""1"",""time_added"":""1391193413"",""time_updated"":""1391247334"",""time_read"":""1391219833"",""time_favorited"":""0"",""sort_id"":1373,""resolved_title"":""History through the president’s words"",""resolved_url"":""http://flowingdata.com/2014/01/30/history-through-the-presidents-words/"",""excerpt"":""The Washington Post visualized the use of specific words throughout the years during State of the Union addresses.  Since 1900, there have been 116 State of the Union addresses, given by 20 presidents, with some presidents giving two addresses a year."",""word_count"":""152""},{""item_id"":""535467642"",""favorite"":""0"",""status"":""1"",""time_added"":""1391191391"",""time_updated"":""1391255030"",""time_read"":""1391249646"",""time_favorited"":""0"",""sort_id"":1380,""resolved_title"":""Making Time for Side Projects"",""resolved_url"":""http://alistapart.com/column/making-time-for-side-projects"",""excerpt"":""A note from the editors: Rachel Andrew knows a thing or two about launching products. Read more of her insights in her March 2014 cover story for net magazine.  Last time, I encouraged you to think about creating side projects as a way to diversify your income."",""word_count"":""1862""},{""item_id"":""535517129"",""favorite"":""0"",""status"":""1"",""time_added"":""1391180547"",""time_updated"":""1391247334"",""time_read"":""1391219906"",""time_favorited"":""0"",""sort_id"":1382,""resolved_title"":""LibreOffice 4.2 Arrives With New Icon Theme, OpenGL Support And More"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/01/libreoffice-4-2-new-icon-theme?utm_source=rss&utm_medium=rss&utm_campaign=libreoffice-4-2-new-icon-theme"",""excerpt"":""The Document Foundation say the update features “a large number of performance and interoperability improvements“. Take a quick glance over the change log and you’ll learn that that quote is an understatement!  Let’s dive on in."",""word_count"":""252""},{""item_id"":""535592167"",""favorite"":""0"",""status"":""1"",""time_added"":""1391608420"",""time_updated"":""1391681350"",""time_read"":""1391681342"",""time_favorited"":""0"",""sort_id"":1329,""resolved_title"":""The radicalism of fools: the rise of the new anti-Semitism"",""resolved_url"":""http://www.newstatesman.com/politics/2014/01/radicalism-fools-rise-new-anti-semitism"",""excerpt"":""Mixed signals: fans do the quenelle outside a Nantes venue where Dieudonné was due to give a show on 9 January that was banned by the supreme court Arnaud Journois/photoshot."",""word_count"":""2329""},{""item_id"":""535651517"",""favorite"":""0"",""status"":""1"",""time_added"":""1391371713"",""time_updated"":""1391509023"",""time_read"":""1391469125"",""time_favorited"":""0"",""sort_id"":1343,""resolved_title"":""Marx Was Right: Five Surprising Ways Karl Marx Predicted 2014"",""resolved_url"":""http://www.rollingstone.com/music/news/marx-was-right-five-surprising-ways-karl-marx-predicted-2014-20140130"",""excerpt"":""There's a lot of talk of Karl Marx in the air these days – from Rush Limbaugh accusing Pope Francis of promoting \""pure Marxism\"" to a Washington Times writer claiming that New York City Mayor Bill de Blasio is an \""unrepentant Marxist."",""word_count"":""1111""},{""item_id"":""535716584"",""favorite"":""0"",""status"":""1"",""time_added"":""1391180538"",""time_updated"":""1391247335"",""time_read"":""1391220747"",""time_favorited"":""0"",""sort_id"":1388,""resolved_title"":""Unbabel Blog — Translation API"",""resolved_url"":""http://blog.unbabel.com/post/75063388957/translation-api"",""excerpt"":""If you just want the goods here they are. For more info, keep on reading.  For most companies, translation is a growing cost of being online."",""word_count"":""561""},{""item_id"":""535746059"",""favorite"":""0"",""status"":""1"",""time_added"":""1391252485"",""time_updated"":""1392133305"",""time_read"":""1392061789"",""time_favorited"":""0"",""sort_id"":1370,""resolved_title"":""Cameron: UK public is fine with domestic spying"",""resolved_url"":""http://www.theregister.co.uk/2014/01/30/cameron_public_is_cool_with_domestic_spying/"",""excerpt"":""Privacy? Meh. PM thinks the man on the street is past all that Recent disclosures over domestic surveillance and GCHQ spying on citizens aren't much of an issue to the public, according to Prime Minister David Cameron."",""word_count"":""393""},{""item_id"":""535840251"",""favorite"":""0"",""status"":""1"",""time_added"":""1391254955"",""time_updated"":""1391346943"",""time_read"":""1391346938"",""time_favorited"":""0"",""sort_id"":1357,""resolved_title"":""Why do credit card forms ask for Visa, MasterCard, etc.?"",""resolved_url"":""http://ux.stackexchange.com/questions/51346/why-do-credit-card-forms-ask-for-visa-mastercard-etc"",""excerpt"":""You can tell if it's a Visa or MasterCard based on the number it starts with, i.e. 4 for Visa, 5 for MasterCard. Why do most billing forms request the type of card?  \""Wait, why wasn't I asked what type of card I had? Everyone always asks that! Something's fishy here.\"""",""word_count"":""2861""},{""item_id"":""536045259"",""favorite"":""0"",""status"":""1"",""time_added"":""1391425157"",""time_updated"":""1391509021"",""time_read"":""1391450606"",""time_favorited"":""0"",""sort_id"":1336,""resolved_title"":""ParisLemon — The Age Of The Social Network Is Ending"",""resolved_url"":""http://parislemon.com/post/75128375844/the-age-of-the-social-network-is-ending"",""excerpt"":""Just basically curious as to why you’re interested in Secret — why this after we have so many “social” apps — how different, etc.  This seems to be a common question both amongst journalists and investors. And it’s certainly a fair one."",""word_count"":""616""},{""item_id"":""536185209"",""favorite"":""0"",""status"":""1"",""time_added"":""1391194034"",""time_updated"":""1391252413"",""time_read"":""1391219009"",""time_favorited"":""0"",""sort_id"":1372,""resolved_title"":""Are Fitbit, Nike, and Garmin Planning to Sell Your Personal Fitness Data?"",""resolved_url"":""http://www.motherjones.com/politics/2014/01/are-fitbit-nike-and-garmin-selling-your-personal-fitness-data"",""excerpt"":""Lately, fitness-minded Americans have started wearing sporty wrist-band devices that track tons of data: Weight, mile splits, steps taken per day, sleep quality, sexual activity, calories burned—sometimes, even GPS location."",""word_count"":""837""},{""item_id"":""536249624"",""favorite"":""0"",""status"":""1"",""time_added"":""1391192279"",""time_updated"":""1391247334"",""time_read"":""1391220209"",""time_favorited"":""0"",""sort_id"":1379,""resolved_title"":""Footage released of Guardian editors destroying Snowden hard drives"",""resolved_url"":""http://www.theguardian.com/uk-news/2014/jan/31/footage-released-guardian-editors-snowden-hard-drives-gchq"",""excerpt"":""New video footage has been released for the first time of the moment Guardian editors destroyed computers used to store top-secret documents leaked by the NSA whistleblower Edward Snowden."",""word_count"":""1095""},{""item_id"":""536338837"",""favorite"":""0"",""status"":""1"",""time_added"":""1391252412"",""time_updated"":""1392133307"",""time_read"":""1392064689"",""time_favorited"":""0"",""sort_id"":1371,""resolved_title"":""Twitter snaps up 900 patents from IBM for undisclosed sum"",""resolved_url"":""http://thenextweb.com/twitter/2014/01/31/twitter-avoids-courtroom-snaps-900-patents-ibm/"",""excerpt"":""Twitter has agreed to buy 900 patents from IBM, with the two tech titans steering clear of courtrooms to reach the cross-license agreement."",""word_count"":""124""},{""item_id"":""536363418"",""favorite"":""0"",""status"":""1"",""time_added"":""1391192288"",""time_updated"":""1391255030"",""time_read"":""1391249720"",""time_favorited"":""0"",""sort_id"":1378,""resolved_title"":""Why diversity matters in the web design industry"",""resolved_url"":""http://www.creativebloq.com/netmag/why-diversity-matters-web-design-industry-11410554"",""excerpt"":""There's one topic in the tech industry that comes around every so often, gets everyone up in arms and then disappears again for a while. For the most part, we have tended to just observe it and do what we consider to be right, but it's time to speak up: diversity matters."",""word_count"":""994""},{""item_id"":""536429370"",""favorite"":""0"",""status"":""1"",""time_added"":""1391373980"",""time_updated"":""1391509022"",""time_read"":""1391453061"",""time_favorited"":""0"",""sort_id"":1341,""resolved_title"":""Exclusive: Jennifer Connelly Has A Visitor In Clip From Claudia Llosa's 'Aloft' Premiering At The Berlin Film Festival"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/exclusive-jennifer-connelly-has-a-visitor-in-clip-from-claudia-llosas-aloft-premiering-at-the-berlin-film-festival-20140131"",""excerpt"":""For those who have been keeping an ear to the ground, Claudia Llosa is a filmmaker that has been making some serious noise. Her debut \""Madinusa\"" first made a splash at the Sundance Film Festival in 2006, going on to play around the world, picking up prizes along the way."",""word_count"":""260""},{""item_id"":""536469130"",""favorite"":""0"",""status"":""1"",""time_added"":""1391254953"",""time_updated"":""1392133304"",""time_read"":""1392059896"",""time_favorited"":""0"",""sort_id"":1360,""resolved_title"":""Reinventing explanation"",""resolved_url"":""http://michaelnielsen.org/reinventing_explanation/index.html"",""excerpt"":""The Babylonian Map of the World is one of the world's oldest extant maps, dating to 600 BCE."",""word_count"":""6596""},{""item_id"":""536557174"",""favorite"":""0"",""status"":""1"",""time_added"":""1391277960"",""time_updated"":""1392133304"",""time_read"":""1392060795"",""time_favorited"":""0"",""sort_id"":1353,""resolved_title"":""Green is the new red: Will Potter on the problem of treating environmentalists like terrorists"",""resolved_url"":""http://blog.ted.com/2014/01/31/will-potter-on-of-treating-environmentalists-like-terrorists/"",""excerpt"":""When Chicago Tribune reporter Will Potter went to pass out animal rights leaflets, he had no idea the FBI would single him out and pressure him to become an anti-activism informant, threatening his future if he refused."",""word_count"":""3597""},{""item_id"":""536563864"",""favorite"":""0"",""status"":""1"",""time_added"":""1391254951"",""time_updated"":""1391447631"",""time_read"":""1391366000"",""time_favorited"":""0"",""sort_id"":1362,""resolved_title"":""Academics Launch Torrent Site to Share Papers and Datasets"",""resolved_url"":""https://torrentfreak.com/academics-launch-torrent-site-to-share-papers-and-datasets-140131/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""536591367"",""favorite"":""1"",""status"":""1"",""time_added"":""1391253457"",""time_updated"":""1391857242"",""time_read"":""1391850006"",""time_favorited"":""1391850006"",""sort_id"":1365,""resolved_title"":""TSA whistleblower describes life in the pornoscanner room"",""resolved_url"":""http://boingboing.net/2014/01/31/tsa-whistleblower-describes-li.html"",""excerpt"":""In Jason Edward Harrington's Dear America, I Saw You Naked, he reveals that he was the anonymous TSA agent who wrote the Taking Sense Away tell-all/whistleblower blog."",""word_count"":""433""},{""item_id"":""536591933"",""favorite"":""0"",""status"":""1"",""time_added"":""1391254954"",""time_updated"":""1392133308"",""time_read"":""1392066556"",""time_favorited"":""0"",""sort_id"":1359,""resolved_title"":""or: do you really know JavaScript?"",""resolved_url"":""http://javascript-puzzlers.herokuapp.com/"",""excerpt"":""Hi Internet! This page wasn't ready yet, but a bunch of people are coming in, so sorry you caught us in underwear. You can follow @JSPuzzlers to know when this is ready, write me or tip some DogeCoins ^_^.  This is a JavaScript quiz based on the behaviour as of ECMA 262 (5."",""word_count"":""100""},{""item_id"":""536637445"",""favorite"":""0"",""status"":""1"",""time_added"":""1391254954"",""time_updated"":""1391347066"",""time_read"":""1391347062"",""time_favorited"":""0"",""sort_id"":1358,""resolved_title"":""Voice Chat API — free audio conferencing powered by Plivo.com."",""resolved_url"":""http://voicechatapi.com/?hn"",""excerpt"":""Voice Chat API is a free, open-source, out-of-the-box audio conferencing app exposed via an API. Talk with your teammates, friends, and others at the push of a button.  1. Create a conference room via the button below, through one of our integrations or build your own integration via our API."",""word_count"":""371""},{""item_id"":""536880673"",""favorite"":""0"",""status"":""1"",""time_added"":""1391253257"",""time_updated"":""1392133307"",""time_read"":""1392064828"",""time_favorited"":""0"",""sort_id"":1367,""resolved_title"":""The Internet of Vegetables: How Cyborg Plants Can Monitor Our World"",""resolved_url"":""http://www.wired.com/wiredenterprise/2014/01/internet-plants/"",""excerpt"":""In the not too distant future, we could see cyborg plants that tell us when they need more water, what chemicals they’ve been exposed to, and what parasites are eating their roots. These part-organic, part-electronic creations may even tell us how much pollution is in the air."",""word_count"":""770""},{""item_id"":""536890215"",""favorite"":""0"",""status"":""1"",""time_added"":""1391352726"",""time_updated"":""1391509023"",""time_read"":""1391469576"",""time_favorited"":""0"",""sort_id"":1345,""resolved_title"":""NSA and GCHQ spoofed LinkedIn to hack Belgian cryptography professor — Tech News and Analysis"",""resolved_url"":""http://gigaom.com/2014/02/01/nsa-and-gchq-hacked-belgian-cryptographer-report/"",""excerpt"":""Correction (2 February): This story originally and erroneously said Quisquater had fallen victim to a quantum insert attack. This was based on the original report stating that he was targeted using the same technique or a similar one to that used on Belgacom, which also used LinkedIn as a vector."",""word_count"":""326""},{""item_id"":""536900888"",""favorite"":""0"",""status"":""1"",""time_added"":""1391278756"",""time_updated"":""1391509023"",""time_read"":""1391472023"",""time_favorited"":""0"",""sort_id"":1352,""resolved_title"":""How Edward Snowden went from loyal NSA contractor to whistleblower"",""resolved_url"":""http://www.theguardian.com/world/2014/feb/01/edward-snowden-intelligence-leak-nsa-contractor-extract"",""excerpt"":""In late December 2001, someone calling themselves TheTrueHOOHA had a question. He was an 18-year-old American male with impressive IT skills and a sharp intelligence. His real identity was unknown. Everyone who posted on Ars Technica, a popular technology website, did so anonymously."",""word_count"":""5438""},{""item_id"":""536908647"",""favorite"":""0"",""status"":""1"",""time_added"":""1391253454"",""time_updated"":""1392133307"",""time_read"":""1392065665"",""time_favorited"":""0"",""sort_id"":1366,""resolved_title"":""Kansas cable lobbyist writes bill outlawing Google Fiber and municipal broadband, gets it introduced in Kansas legislature"",""resolved_url"":""http://boingboing.net/2014/01/31/kansas-cable-lobbyist-writes-b.html"",""excerpt"":""When Kansas lawmakers introduced a bill outlawing municipal broadband network, there was no sponsor's name on it: rumor has it that's because it was written by a lobbyist called John Federico, who is president of Kansas Cable Telecommunications Association."",""word_count"":""314""},{""item_id"":""537174072"",""favorite"":""0"",""status"":""1"",""time_added"":""1391371625"",""time_updated"":""1391509022"",""time_read"":""1391459394"",""time_favorited"":""0"",""sort_id"":1344,""resolved_title"":""Homophobia: defy Putin with a same-sex kiss at Sochi"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/feb/01/homophobia-putin-sex-kiss-sochi-olympics-russia-gay-rights"",""excerpt"":""On Friday, the most expensive Olympic Games ever open in Sochi."",""word_count"":""1075""},{""item_id"":""538252159"",""favorite"":""0"",""status"":""1"",""time_added"":""1391694504"",""time_updated"":""1392032876"",""time_read"":""1392023358"",""time_favorited"":""0"",""sort_id"":1313,""resolved_title"":""Why we love Mozilla Persona. And why you should, too."",""resolved_url"":""http://blog.zonino.co.uk/why-we-love-mozilla-persona-and-why-you-should-too/"",""excerpt"":""In a nutshell, Persona is great for us because it means that we don't have to store anyone's passwords and nobody has to create a new account to log in to Zonino.  Persona makes signing in really easy for developers and users. You can reuse your Persona account on many websites."",""word_count"":""371""},{""item_id"":""538359938"",""favorite"":""0"",""status"":""1"",""time_added"":""1391539823"",""time_updated"":""1391604240"",""time_read"":""1391604226"",""time_favorited"":""0"",""sort_id"":1332,""resolved_title"":""The Pope's Sex Problem: Catholic Survey Reveals Frustrated Flock"",""resolved_url"":""http://www.spiegel.de/international/world/catholic-survey-shows-deep-frustration-within-the-church-a-946069.html"",""excerpt"":""The Vatican last year sent out a survey to Catholics around the world focusing on attitudes to sex and sexuality. The responses are now in -- and they show that the Church is badly in need of reform. Can Pope Francis meet such expectations?"",""word_count"":""6946""},{""item_id"":""538510499"",""favorite"":""0"",""status"":""1"",""time_added"":""1391694500"",""time_updated"":""1392133302"",""time_read"":""1392049401"",""time_favorited"":""0"",""sort_id"":1315,""resolved_title"":""Facebook, LinkedIn, Yahoo, Google and Microsoft disclose new data about number of NSA requests received"",""resolved_url"":""http://thenextweb.com/insider/2014/02/03/facebook-linkedin-google-microsoft-reveal-data-showing-range-accounts-requested-nsa/"",""excerpt"":""Facebook, LinkedIn, Yahoo, Google, and Microsoft have all released new data about the national security requests they’ve received."",""word_count"":""634""},{""item_id"":""538516858"",""favorite"":""0"",""status"":""1"",""time_added"":""1392646016"",""time_updated"":""1392711465"",""time_read"":""1392682288"",""time_favorited"":""0"",""sort_id"":1213,""resolved_title"":""The 10 Indies to Watch on VOD This February"",""resolved_url"":""http://www.indiewire.com/article/the-10-indies-to-watch-on-vod-this-february"",""excerpt"":""To help you sift through an endless VOD selection, we've compiled a list of 10 new indies coming to VOD this month. Click on the films' titles to learn more.  Soctt Coffey's feature premiered at the 2013 Tribeca Film Festival."",""word_count"":""532""},{""item_id"":""538676020"",""favorite"":""0"",""status"":""1"",""time_added"":""1391615310"",""time_updated"":""1392133303"",""time_read"":""1392054365"",""time_favorited"":""0"",""sort_id"":1328,""resolved_title"":""How the ‘sharing economy’ undermines workers’ rights"",""resolved_url"":""http://blog.p2pfoundation.net/how-the-sharing-economy-undermines-workers-rights/2014/02/04"",""excerpt"":""“The “sharing economy” has many fans but Eric Schneiderman, New York State’s attorney-general, is not one of them."",""word_count"":""804""},{""item_id"":""539220549"",""favorite"":""0"",""status"":""1"",""time_added"":""1391693556"",""time_updated"":""1391767688"",""time_read"":""1391767451"",""time_favorited"":""0"",""sort_id"":1316,""resolved_title"":""BitTorrent Sync Used to Create Decentralized Web Browser"",""resolved_url"":""http://torrentfreak.com/bittorrent-sync-used-to-create-decentralized-web-browser-140204/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""539231110"",""favorite"":""0"",""status"":""1"",""time_added"":""1391531922"",""time_updated"":""1391610323"",""time_read"":""1391610317"",""time_favorited"":""0"",""sort_id"":1333,""resolved_title"":""Electric Dreams"",""resolved_url"":""http://www.redsharknews.com/audio/item/1441-electric-dreams"",""excerpt"":""I can't wait to see this. It almost feels like the film I've been waiting for all my life. The reason? I've always loved making inappropriate noises from strange artefacts"",""word_count"":""451""},{""item_id"":""539658259"",""favorite"":""1"",""status"":""1"",""time_added"":""1391615321"",""time_updated"":""1391857242"",""time_read"":""1391849848"",""time_favorited"":""1391849846"",""sort_id"":1327,""resolved_title"":""War on Anonymous: British Spies Attacked Hackers, Snowden Docs Show"",""resolved_url"":""http://www.nbcnews.com/news/investigations/war-anonymous-british-spies-attacked-hackers-snowden-docs-show-n21361"",""excerpt"":""A secret British spy unit created to mount cyber attacks on Britain’s enemies has waged war on the hacktivists of Anonymous and LulzSec, according to documents taken from the National Security Agency by Edward Snowden and obtained by NBC News."",""word_count"":""2380""},{""item_id"":""539844934"",""favorite"":""0"",""status"":""1"",""time_added"":""1392124194"",""time_updated"":""1393231168"",""time_read"":""1393150550"",""time_favorited"":""0"",""sort_id"":1295,""resolved_title"":""Your work-life balance hangs in these four quadrants – Quartz"",""resolved_url"":""http://qz.com/173703/your-work-life-balance-hangs-in-these-four-quadrants/"",""excerpt"":""I find most “work-life balance” conversations challenging."",""word_count"":""1830""},{""item_id"":""540081175"",""favorite"":""0"",""status"":""1"",""time_added"":""1391769310"",""time_updated"":""1393231167"",""time_read"":""1393149536"",""time_favorited"":""0"",""sort_id"":1309,""resolved_title"":""Dual Citizenship: Merkel Government Ponders Who Is a German"",""resolved_url"":""http://www.spiegel.de/international/germany/german-efforts-at-dual-citizenship-hit-crossroads-a-951626.html"",""excerpt"":""Chancellor Angela Merkel's new government has promised to introduce dual citizenship for children born to immigrants in Germany. Now, though, the left and right are fighting over what exactly that means. A new integration debate could result.  Aydan Özoguz has come a long way."",""word_count"":""975""},{""item_id"":""540112746"",""favorite"":""0"",""status"":""1"",""time_added"":""1392646015"",""time_updated"":""1392711465"",""time_read"":""1392682380"",""time_favorited"":""0"",""sort_id"":1215,""resolved_title"":""Berlin 2014: The 10 Films Indiewire Wants to See"",""resolved_url"":""http://www.indiewire.com/article/berlin-2014-the-10-films-we-want-to-see"",""excerpt"":""The 64th Berlin International Film Festival kicks off tomorrow, offering dozens (and dozens) of world premieres across multiple sections."",""word_count"":""711""},{""item_id"":""540236628"",""favorite"":""0"",""status"":""1"",""time_added"":""1392646015"",""time_updated"":""1392711464"",""time_read"":""1392682067"",""time_favorited"":""0"",""sort_id"":1214,""resolved_title"":""Emma Watson Joins Alejandro Amenábar's Thriller 'Regression' With Ethan Hawke"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/emma-watson-joins-alejandro-amenabars-thriller-regression-with-ethan-hawke-20140205"",""excerpt"":""Emma Watson hasn't rushed into making any really big moves post-\""Harry Potter,\"" instead seemingly careful in considering each choice."",""word_count"":""184""},{""item_id"":""540491577"",""favorite"":""0"",""status"":""1"",""time_added"":""1392646014"",""time_updated"":""1393056676"",""time_read"":""1393027790"",""time_favorited"":""0"",""sort_id"":1216,""resolved_title"":""Darren Aronofsky’s ‘Noah’ to Open in 3D — But Only Outside the U.S."",""resolved_url"":""http://www.slashfilm.com/darren-aronofskys-noah-to-open-in-3d-but-only-outside-the-u-s/"",""excerpt"":""Darren Aronofsky‘s Biblical epic Noah will be sweeping across the screen in 3D this year — but only if you’re watching from outside the U.S."",""word_count"":""358""},{""item_id"":""540530473"",""favorite"":""0"",""status"":""1"",""time_added"":""1391693549"",""time_updated"":""1391775186"",""time_read"":""1391775184"",""time_favorited"":""0"",""sort_id"":1318,""resolved_title"":""Sony sells its VAIO PC business, is splitting TV arm into a separate company"",""resolved_url"":""http://www.engadget.com/2014/02/06/sony-sells-vaio/"",""excerpt"":""Sony said it was \""addressing various options\"" as recently as yesterday when it came to its VAIO PC and laptop arm, and while announcing its financial results for Q3 2013, it's apparently come to a decision."",""word_count"":""431""},{""item_id"":""540672652"",""favorite"":""0"",""status"":""1"",""time_added"":""1391694509"",""time_updated"":""1393231167"",""time_read"":""1393149641"",""time_favorited"":""0"",""sort_id"":1311,""resolved_title"":""A film of your life - a script with no writer"",""resolved_url"":""http://www.redsharknews.com/technology/item/1448-a-film-of-your-life-a-script-with-no-writer"",""excerpt"":""It's Facebook's tenth anniversary, and to celebrate, everyone, it seems, has had a biographical movie made of their life. It is, of course, a gimmick. But there are some powerful techniques that we may see cropping up in more serious film work in future"",""word_count"":""425""},{""item_id"":""540783906"",""favorite"":""0"",""status"":""1"",""time_added"":""1391732505"",""time_updated"":""1392032877"",""time_read"":""1392023531"",""time_favorited"":""0"",""sort_id"":1310,""resolved_title"":""Tim Berners-Lee: we need to re-decentralise the web"",""resolved_url"":""http://www.wired.co.uk/news/archive/2014-02/06/tim-berners-lee-reclaim-the-web"",""excerpt"":""Twenty-five years on from the web's inception, its creator has urged the public to re-engage with its original design: a decentralised internet that at its very core, remains open to all."",""word_count"":""547""},{""item_id"":""540801131"",""favorite"":""0"",""status"":""1"",""time_added"":""1392642978"",""time_updated"":""1393283082"",""time_read"":""1393240721"",""time_favorited"":""0"",""sort_id"":1220,""resolved_title"":""Who Says Libraries Are Going Extinct?"",""resolved_url"":""http://www.psmag.com/navigation/books-and-culture/says-libraries-going-extinct-73029/"",""excerpt"":""With nearly 2.5 billion materials circulated through more than 16,000 public branches, 2013 was one of the strongest years for libraries in the past decade. And things are looking up.  America’s network of public libraries is older than America itself."",""word_count"":""1185""},{""item_id"":""541123055"",""favorite"":""0"",""status"":""1"",""time_added"":""1392646013"",""time_updated"":""1393240634"",""time_read"":""1393240631"",""time_favorited"":""0"",""sort_id"":1217,""resolved_title"":""Goldfrapp is Bringing Their Film 'Tales of Us' to Theaters for One Night Only"",""resolved_url"":""http://www.indiewire.com/article/poster-and-trailer-for-goldfrapps-tales-of-us-in-theaters-one-night-only"",""excerpt"":""Fans of the eclectic English electronic duo Goldfrapp might want to mark their calendars for this next event. The group has a new film, \""Goldfrapp: Tales of Us,\"" a 30-minute feature following the stories of five of the ten songs on their recent album \""Tales of Us."",""word_count"":""129""},{""item_id"":""541205068"",""favorite"":""0"",""status"":""1"",""time_added"":""1392468898"",""time_updated"":""1392625509"",""time_read"":""1392470183"",""time_favorited"":""0"",""sort_id"":1240,""resolved_title"":""That NBC story 100% fraudulent"",""resolved_url"":""http://blog.erratasec.com/2014/02/that-nbc-story-100-fraudulent.html"",""excerpt"":""Yesterday (Feb 5 2014) On February 4th, NBC News ran a story claiming that if you bring your mobile phone or laptop to the Sochi Olympics, it'll immediately be hacked the moment you turn it on. The story was fabricated."",""word_count"":""557""},{""item_id"":""541231410"",""favorite"":""0"",""status"":""1"",""time_added"":""1392124751"",""time_updated"":""1394700669"",""time_read"":""1394700662"",""time_favorited"":""0"",""sort_id"":1294,""resolved_title"":""As Technology Gets Better, Will Society Get Worse?"",""resolved_url"":""http://www.newyorker.com/online/blogs/elements/2014/02/as-technology-gets-better-will-society-get-worse.html"",""excerpt"":""Imagine that two people are carving a six-foot slab of wood at the same time. One is using a hand-chisel, the other, a chainsaw. If you are interested in the future of that slab, whom would you watch?"",""word_count"":""1150""},{""item_id"":""541798178"",""favorite"":""0"",""status"":""1"",""time_added"":""1392124180"",""time_updated"":""1393231168"",""time_read"":""1393150246"",""time_favorited"":""0"",""sort_id"":1296,""resolved_title"":""No One Likes a Critic"",""resolved_url"":""https://medium.com/p/cc2b2e4cd98d"",""excerpt"":""There I sat, in a plaid couch in the Writers’ Room in the middle of Coventry, England listening to my peers eviscerate a short-story I had submitted for critique.  This went on for another 30 minutes. After class I sulked back to my dorm room and binge-watched Star Trek for seven hours."",""word_count"":""1598""},{""item_id"":""541939763"",""favorite"":""0"",""status"":""1"",""time_added"":""1392124093"",""time_updated"":""1392798462"",""time_read"":""1392798459"",""time_favorited"":""0"",""sort_id"":1298,""resolved_title"":""Our Love Affair With the Tablet is Over"",""resolved_url"":""http://a16z.com/2014/02/07/love-affair-with-tablet-is-over/"",""excerpt"":""Back in 2011, I was having an all-consuming love affair with tablets. At the time, I was the first-ever head of mobile at Netflix. I saw tablets in my sleep, running apps that would control homes, entertain billions and dutifully chug away at work."",""word_count"":""1149""},{""item_id"":""541947539"",""favorite"":""0"",""status"":""1"",""time_added"":""1392468895"",""time_updated"":""1392625510"",""time_read"":""1392536420"",""time_favorited"":""0"",""sort_id"":1242,""resolved_title"":""Introducing Mozilla Firefox Accounts"",""resolved_url"":""https://blog.mozilla.org/blog/2014/02/07/introducing-mozilla-firefox-accounts/"",""excerpt"":""Mozilla is a trusted organization, founded on a mission to promote openness, innovation and opportunity online. We move the Web forward as a platform for developers and the industry by building technology in the open to evolve and promote standards that benefit everyone."",""word_count"":""428""},{""item_id"":""541992304"",""favorite"":""0"",""status"":""1"",""time_added"":""1391865165"",""time_updated"":""1396192240"",""time_read"":""1396175908"",""time_favorited"":""0"",""sort_id"":1308,""resolved_title"":""Netflix to Spend $3bn on Content in 2014"",""resolved_url"":""http://www.redsharknews.com/distribution/item/1452-netflix-to-spend-$3bn-on-content-in-2014"",""excerpt"":""Netflix have just published their annual report and have laid out their plans for the year, including spending nearly $3bn on programming and further expansion into Europe Netflix is doing well. According to their annual report they took $4."",""word_count"":""269""},{""item_id"":""542176503"",""favorite"":""0"",""status"":""1"",""time_added"":""1392124165"",""time_updated"":""1393231168"",""time_read"":""1393150057"",""time_favorited"":""0"",""sort_id"":1297,""resolved_title"":""Washing the Bowl: The Beauty of Doing Only One Thing"",""resolved_url"":""http://jamesshelley.net/2014/02/washing-the-bowl"",""excerpt"":""Thích Nhất Hạnh (b. 1926), the Vietnamese Buddhist monk, teaches that when you are washing the dishes, the only thing you should be thinking about is washing the dishes. It is a “wondrous reality” he says, to be standing before a sink, washing a bowl, in full consciousness of the moment."",""word_count"":""378""},{""item_id"":""543218076"",""favorite"":""0"",""status"":""1"",""time_added"":""1392020652"",""time_updated"":""1392760279"",""time_read"":""1392760278"",""time_favorited"":""0"",""sort_id"":1300,""resolved_title"":""When Random Isn't Random Enough: Lessons from an Online Poker Exploit"",""resolved_url"":""http://www.lauradhamilton.com/random-lessons-online-poker-exploit"",""excerpt"":""Today I am going to retell a story from 1999, a story in which developers of a popular online poker platform implemented card-shuffling software with a handle of subtle but critical bugs.  Although this story is 15 years old, the lessons it holds for algorithm developers are still relevant."",""word_count"":""684""},{""item_id"":""543256567"",""favorite"":""0"",""status"":""1"",""time_added"":""1392020651"",""time_updated"":""1393231168"",""time_read"":""1393149880"",""time_favorited"":""0"",""sort_id"":1302,""resolved_title"":""Berlin Review: Why the Shorter Version of 'Nymphomaniac Volume I' Is Better Than Lars Von Trier's Director's Cut"",""resolved_url"":""http://www.indiewire.com/article/berlin-review-why-the-shorter-version-of-nymphomaniac-part-1-is-better-than-lars-von-triers-directors-cut"",""excerpt"":""However high a ceiling Lars Von Trier had previously built on his controversy scale, a project like \""Nymphomaniac\"" was always going to shatter it. The word “pornography” was being liberally bandied around prior to the film's premiere."",""word_count"":""723""},{""item_id"":""543316005"",""favorite"":""0"",""status"":""1"",""time_added"":""1392632679"",""time_updated"":""1394453714"",""time_read"":""1394453708"",""time_favorited"":""0"",""sort_id"":1222,""resolved_title"":""7 Little Mistakes that Steal Your Happiness"",""resolved_url"":""http://www.marcandangel.com/2014/02/09/7-little-mistakes-that-steal-your-happiness/"",""excerpt"":""As the Shrink for Entrepreneurs I work with people who are notorious seekers of freedom and happiness.  They march to the beat of their own drum and have figured out ingenious strategies for being the masters of their own destinies."",""word_count"":""1604""},{""item_id"":""543404054"",""favorite"":""0"",""status"":""1"",""time_added"":""1392134077"",""time_updated"":""1393231169"",""time_read"":""1393150574"",""time_favorited"":""0"",""sort_id"":1292,""resolved_title"":""The Intercept"",""resolved_url"":""https://firstlook.org/theintercept/"",""excerpt"":""The New York Times Pulitzer Prize winner sounds off on the government’s attempt to imprison him, profiteering in the War on Terror, and his radicalization process."",""word_count"":""721""},{""item_id"":""543475821"",""favorite"":""1"",""status"":""1"",""time_added"":""1392467833"",""time_updated"":""1392625510"",""time_read"":""1392542357"",""time_favorited"":""1392542352"",""sort_id"":1244,""resolved_title"":""Two million British people emigrated to EU, figures show"",""resolved_url"":""http://euobserver.com/social/123066"",""excerpt"":""BRUSSELS - British figures indicate that just as many UK citizens live in the EU as vice-versa, despite popular perceptions.  The numbers, covering 2010, were put forward last week in a government response to a parliamentary question by Matthew Oakeshott, a Liberal member of the House of Lords."",""word_count"":""367""},{""item_id"":""543883117"",""favorite"":""0"",""status"":""1"",""time_added"":""1392467825"",""time_updated"":""1393231166"",""time_read"":""1393147331"",""time_favorited"":""0"",""sort_id"":1248,""resolved_title"":""Anonymity"",""resolved_url"":""http://blog.samaltman.com/anonymity"",""excerpt"":""I, like everyone else in Silicon Valley, downloaded Secret last week.  It's incredibly well done, certainly the best yet of any of the gossip/anonymous apps."",""word_count"":""292""},{""item_id"":""544189926"",""favorite"":""0"",""status"":""1"",""time_added"":""1392465795"",""time_updated"":""1392625512"",""time_read"":""1392543655"",""time_favorited"":""0"",""sort_id"":1258,""resolved_title"":""How does Facebook disable the browser's integrated Developer Tools?"",""resolved_url"":""http://stackoverflow.com/questions/21692646/how-does-facebook-disable-developer-tools"",""excerpt"":""So apparently because of the recent scams, the developer tools is exploited by people to post spam and even used to \""hack\"" accounts. Facebook has blocked the developer tools, and I can't even use the console."",""word_count"":""100""},{""item_id"":""544418471"",""favorite"":""0"",""status"":""1"",""time_added"":""1392134075"",""time_updated"":""1393231168"",""time_read"":""1393150420"",""time_favorited"":""0"",""sort_id"":1293,""resolved_title"":""Looking on the bright side of the euro crisis"",""resolved_url"":""http://euobserver.com/opinion/123076"",""excerpt"":""BERLIN - As the European Parliament elections approach many cite the lack of a European public sphere as the reason for the disinterest in European politics and the inevitable low voters’ turnout."",""word_count"":""758""},{""item_id"":""544652329"",""favorite"":""0"",""status"":""1"",""time_added"":""1392466723"",""time_updated"":""1392625511"",""time_read"":""1392543458"",""time_favorited"":""0"",""sort_id"":1254,""resolved_title"":""CSS source map support, network performance analysis & more – Firefox Developer Tools Episode 29"",""resolved_url"":""https://hacks.mozilla.org/2014/02/css-source-map-support-network-performance-analysis-more-firefox-developer-tools-episode-29/"",""excerpt"":""Firefox 29 was just uplifted to the Aurora release channel. This means that it is time to report some of the major changes that you can expect to see inside of the Developer Tools for this release.  In addition to new features, we have been updating the look and feel of our dark and light themes."",""word_count"":""613""},{""item_id"":""544738961"",""favorite"":""0"",""status"":""1"",""time_added"":""1392199963"",""time_updated"":""1396192240"",""time_read"":""1396176203"",""time_favorited"":""0"",""sort_id"":1287,""resolved_title"":""Radiohead: Polyfauna – An immersive, expansive world of primitive life"",""resolved_url"":""http://www.creativeapplications.net/featured/radiohead-polyfauna-an-immersive-expansive-world-of-primitive-life/"",""excerpt"":""Inspired by atmospheric landscape painting from JW Turner to Peter Doig and the computational lifeforms of Carl Sims, Radiohead – Polyfauna is a collaboration between Radiohead, Nigel Godrich, Stanley Donwood and Universal Everything."",""word_count"":""512""},{""item_id"":""544754376"",""favorite"":""0"",""status"":""1"",""time_added"":""1392217355"",""time_updated"":""1394584891"",""time_read"":""1394584884"",""time_favorited"":""0"",""sort_id"":1281,""resolved_title"":""Publisher Transformation with Users at the Center"",""resolved_url"":""https://blog.mozilla.org/advancingcontent/2014/02/11/publisher-transformation-with-users-at-the-center/"",""excerpt"":""We believe that if you put the user front and center, you can make every experience for them richer and more meaningful. The Content Services team has embraced this, and today I wanted to share some of our thinking and explain our first steps for putting it into practice."",""word_count"":""473""},{""item_id"":""545116739"",""favorite"":""0"",""status"":""1"",""time_added"":""1392467821"",""time_updated"":""1392625511"",""time_read"":""1392543240"",""time_favorited"":""0"",""sort_id"":1252,""resolved_title"":""Swiss result sharpens EU immigration debate"",""resolved_url"":""http://euobserver.com/justice/123090"",""excerpt"":""BRUSSELS - As EU governments consider how to react to the Swiss referendum, opponents of immigration inside the Union claim the result represents widespread feeling in Europe."",""word_count"":""712""},{""item_id"":""545280201"",""favorite"":""0"",""status"":""1"",""time_added"":""1392216248"",""time_updated"":""1392625515"",""time_read"":""1392564213"",""time_favorited"":""0"",""sort_id"":1284,""resolved_title"":""Guide to the 2014 European Elections"",""resolved_url"":""http://euobserver.com/eu-elections/123080"",""excerpt"":""BRUSSELS - The next European Parliament election, the eighth one since direct voting began in 1979, will take place from 22-25 May."",""word_count"":""1099""},{""item_id"":""545523561"",""favorite"":""1"",""status"":""1"",""time_added"":""1397347073"",""time_updated"":""1399823309"",""time_read"":""1399766568"",""time_favorited"":""1399766568"",""sort_id"":1016,""resolved_title"":""Is npm worth $2.6MM?"",""resolved_url"":""http://words.steveklabnik.com/is-npm-worth-26mm"",""excerpt"":""Yesterday, npm, Inc. announced that it had closed a $2.6MM round of funding. This was met with a bunch of derision on Twitter."",""word_count"":""2669""},{""item_id"":""545576739"",""favorite"":""0"",""status"":""1"",""time_added"":""1392465794"",""time_updated"":""1392625513"",""time_read"":""1392544916"",""time_favorited"":""0"",""sort_id"":1259,""resolved_title"":""Asana Engineering Blog"",""resolved_url"":""http://eng.asana.com/2014/02/scaling-asana-com/"",""excerpt"":""This post isn’t about the Asana app – it’s about Asana.com, our “content site” – the place where we sign up new users, market the app & ecosystem, publish help and other content, recruit new Asanas, and more. Ultimately, it is the place where we tell our story to the world."",""word_count"":""988""},{""item_id"":""546247677"",""favorite"":""0"",""status"":""1"",""time_added"":""1392302188"",""time_updated"":""1396192241"",""time_read"":""1396176568"",""time_favorited"":""0"",""sort_id"":1278,""resolved_title"":""afterglow: 27th transmediale, a nonlinear report By Mario Margani"",""resolved_url"":""http://www.digicult.it/it/news/afterglow-27th-transmediale-a-nonlinear-report/"",""excerpt"":""Commissioned works, performances, conferences, talks, and an Internet black market have spiced up afterglow, the 27th transmediale that has taken place between 29.01 and 02.02 as usual at Haus der Kulturen der Welt in Berlin."",""word_count"":""2331""},{""item_id"":""546257696"",""favorite"":""0"",""status"":""1"",""time_added"":""1392465787"",""time_updated"":""1392625512"",""time_read"":""1392543750"",""time_favorited"":""0"",""sort_id"":1263,""resolved_title"":""Hyperlinking is Not Copyright Infringement, EU Court Rules"",""resolved_url"":""https://torrentfreak.com/hyperlinking-is-not-copyright-infringement-eu-court-rules-140213/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""546275891"",""favorite"":""0"",""status"":""1"",""time_added"":""1392466360"",""time_updated"":""1396192241"",""time_read"":""1396176910"",""time_favorited"":""0"",""sort_id"":1256,""resolved_title"":""Facebook Deal on Privacy Is Under Attack"",""resolved_url"":""http://www.nytimes.com/2014/02/13/technology/facebook-deal-on-privacy-is-under-attack.html"",""excerpt"":""SAN FRANCISCO —  Despite a class-action settlement in August that was supposed to ensure that Facebook users clearly consent to their comments, images and “likes” being used in ads, it has been business as usual on the service.  If you are among Facebook’s 1."",""word_count"":""909""},{""item_id"":""546300512"",""favorite"":""0"",""status"":""1"",""time_added"":""1392466365"",""time_updated"":""1392632682"",""time_read"":""1392543593"",""time_favorited"":""0"",""sort_id"":1255,""resolved_title"":""Why Vancouver Has Crack Pipe Vending Machines"",""resolved_url"":""http://www.theatlanticcities.com/technology/2014/02/why-vancouver-has-crack-pipe-vending-machines/8381/"",""excerpt"":""Vancouver's Downtown Eastside neighborhood, long hampered by poverty and substance abuse, now has vending machines that sell crack pipes for cheap.  They were installed six months ago by local non-profit Portland Hotel Society."",""word_count"":""376""},{""item_id"":""546573126"",""favorite"":""0"",""status"":""1"",""time_added"":""1392465781"",""time_updated"":""1392625512"",""time_read"":""1392544153"",""time_favorited"":""0"",""sort_id"":1265,""resolved_title"":""February 11th, 2014 was The Day We Fought Back against mass surveillance"",""resolved_url"":""https://thedaywefightback.org/the-results/"",""excerpt"":""Thanks to everyone who participated on Tuesday. Together we demonstrated that activists, organizations, and companies can work in unison to fight mass surveillance, and laid a foundation for escalation over months to come.  Below are some numbers that quantify how we did* on Tuesday."",""word_count"":""76""},{""item_id"":""546875417"",""favorite"":""0"",""status"":""1"",""time_added"":""1392461354"",""time_updated"":""1392625513"",""time_read"":""1392544656"",""time_favorited"":""0"",""sort_id"":1268,""resolved_title"":""EU bids to end US dominance in internet control"",""resolved_url"":""http://euobserver.com/news/123109"",""excerpt"":""BRUSSELS - The European Commission wants to end US control over the governance of the internet, according to a report published Wednesday (12 February)."",""word_count"":""463""},{""item_id"":""547131174"",""favorite"":""0"",""status"":""1"",""time_added"":""1392504504"",""time_updated"":""1392711717"",""time_read"":""1392711714"",""time_favorited"":""0"",""sort_id"":1226,""resolved_title"":""10 Stubborn Sex Myths That Just Won't Die, Debunked"",""resolved_url"":""http://afterhours.lifehacker.com/10-stubborn-sex-myths-that-just-wont-die-debunked-by-1522576378"",""excerpt"":""Perhaps you've heard that size matters, women are naturally more bisexual than men, or that tantric sex means everlasting orgasms. The fact is, none of these things are quite true. Sex has been around forever, but we're just starting to understand it."",""word_count"":""3356""},{""item_id"":""547175112"",""favorite"":""0"",""status"":""1"",""time_added"":""1392460341"",""time_updated"":""1392625514"",""time_read"":""1392545243"",""time_favorited"":""0"",""sort_id"":1273,""resolved_title"":""Interlacing is dead"",""resolved_url"":""http://www.redsharknews.com/technology/item/1465-interlacing-is-dead"",""excerpt"":""When I started in this business in the 1970s we shot film and we shot it happily and merrily and we did it progressively – frame by intermittent frame."",""word_count"":""351""},{""item_id"":""547189142"",""favorite"":""0"",""status"":""1"",""time_added"":""1392460338"",""time_updated"":""1392625514"",""time_read"":""1392545392"",""time_favorited"":""0"",""sort_id"":1274,""resolved_title"":""Most Europeans Download and Stream Pirated Movies"",""resolved_url"":""http://torrentfreak.com/most-europeans-download-and-stream-pirated-movies-140214/"",""excerpt"":""Nearly 70% of all Europeans download or stream films for free, a new study from the European Commission reveals. The high costs of legal alternatives such as movie tickets and DVDs are the main justification, with release lags and limited availability also among the top reasons."",""word_count"":""582""},{""item_id"":""547299069"",""favorite"":""0"",""status"":""1"",""time_added"":""1392461353"",""time_updated"":""1393231167"",""time_read"":""1393147710"",""time_favorited"":""0"",""sort_id"":1269,""resolved_title"":""Identity/Persona AAR"",""resolved_url"":""https://wiki.mozilla.org/Identity/Persona_AAR"",""excerpt"":""Here's a summary of what we got right and what we could have done better with Persona, distilled from a lot of different conversations with people inside and outside of the core team."",""word_count"":""318""},{""item_id"":""547645587"",""favorite"":""0"",""status"":""1"",""time_added"":""1392459959"",""time_updated"":""1392625514"",""time_read"":""1392545727"",""time_favorited"":""0"",""sort_id"":1275,""resolved_title"":""The Weather Company takes to Sony's Cloud"",""resolved_url"":""http://www.redsharknews.com/business/item/1461-the-weather-company-takes-to-sony-s-cloud"",""excerpt"":""\""The Cloud\"" is a big and current topic in the broadcast industry. The term covers a wide range of products and when you look closer at the multitude of cloud offerings, you start to see that they do differ in fundamental ways."",""word_count"":""564""},{""item_id"":""547686292"",""favorite"":""0"",""status"":""1"",""time_added"":""1392465910"",""time_updated"":""1392625509"",""time_read"":""1392475258"",""time_favorited"":""0"",""sort_id"":1257,""resolved_title"":""The digital heart of Berlinale beats in Colt's data centre"",""resolved_url"":""http://www.colt.net/uk/en/news/the-digital-heart-of-berlinale-beats-in-colts-data-centre-en.htm"",""excerpt"":""Colt is taking part in a technological premiere at this year´s International Berlin Film Festival, the 64th Berlinale, running February 6 – 16th, which, for the first time will make use of digitalised films across the entire event."",""word_count"":""839""},{""item_id"":""547700416"",""favorite"":""0"",""status"":""1"",""time_added"":""1392467832"",""time_updated"":""1392625510"",""time_read"":""1392542377"",""time_favorited"":""0"",""sort_id"":1246,""resolved_title"":""EU starts work on new Cuba agreement"",""resolved_url"":""http://euobserver.com/tickers/123072"",""excerpt"":""EU countries Monday in Brussels opted to launch talks on a new \""bilateral Political Dialogue and Co-operation Agreement\"" with Cuba. EU foreign affairs chief Ashton said: \""I hope Cuba will do what is necessary on its side, especially on ... human rights."",""word_count"":""49""},{""item_id"":""547883420"",""favorite"":""0"",""status"":""1"",""time_added"":""1392682193"",""time_updated"":""1392711465"",""time_read"":""1392682194"",""time_favorited"":""0"",""sort_id"":1207,""resolved_title"":""Berlinale 2014. Impressions Part III: Time as Depth & Cinema-Space"",""resolved_url"":""https://mubi.com/notebook/posts/berlinale-2014-impressions-part-iii-time-as-depth-cinema-space"",""excerpt"":""Ken Jacobs' The Guests, a 3D-remix of an 1896 Lumière brothers' film of a group of people walking towards the camera into a church wedding (and, in a sense, into the audience of the cinema), exploits an optical phenomenon in which the lateral movement within the image can be used to create 3D by pu"",""word_count"":""1073""},{""item_id"":""548262997"",""favorite"":""0"",""status"":""1"",""time_added"":""1392557585"",""time_updated"":""1393056677"",""time_read"":""1393028089"",""time_favorited"":""0"",""sort_id"":1224,""resolved_title"":""Scottish independence: Barroso says joining EU would be 'difficult'"",""resolved_url"":""http://www.bbc.co.uk/news/uk-scotland-scotland-politics-26215963"",""excerpt"":""European Commission President Jose Manuel Barroso has said it would be \""extremely difficult, if not impossible\"" for an independent Scotland to join the European Union."",""word_count"":""799""},{""item_id"":""548834522"",""favorite"":""0"",""status"":""1"",""time_added"":""1392649416"",""time_updated"":""1393231170"",""time_read"":""1393153823"",""time_favorited"":""0"",""sort_id"":1212,""resolved_title"":""What's happening in Syria is an abomination"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/feb/17/syria-abomination-human-intelligence-end-war"",""excerpt"":""The Greek philosopher Aristotle believed that the universe had existed for ever. The reason humanity was not more developed, he believed, was that floods or other natural disasters repeatedly set civilisation back to the beginning.  Today, humans are developing ever faster."",""word_count"":""518""},{""item_id"":""549059613"",""favorite"":""0"",""status"":""1"",""time_added"":""1392656826"",""time_updated"":""1392711464"",""time_read"":""1392682015"",""time_favorited"":""0"",""sort_id"":1211,""resolved_title"":""Why is the mouse cursor slightly tilted and not straight?"",""resolved_url"":""http://ux.stackexchange.com/questions/52336/why-is-the-mouse-cursor-slightly-tilted-and-not-straight"",""excerpt"":""Is this a legacy thing or does a tilted cursor serves a purpose? I can tell that, the angle provides a totally vertical left edge which helps when highlighting text but what else apart from that?"",""word_count"":""889""},{""item_id"":""549088894"",""favorite"":""0"",""status"":""1"",""time_added"":""1392656827"",""time_updated"":""1392711465"",""time_read"":""1392682878"",""time_favorited"":""0"",""sort_id"":1210,""resolved_title"":""Whatever happened to the IPv4 address crisis?"",""resolved_url"":""http://www.networkworld.com/news/2014/021714-ipv4-278692.html"",""excerpt"":""In February 2011, the global Internet Assigned Numbers Authority (IANA) allocated the last blocks of IPv4 address space to the five regional Internet registries. At the time, experts warned that within months all available IPv4 addresses in the world would be distributed to ISPs."",""word_count"":""1636""},{""item_id"":""550055561"",""favorite"":""0"",""status"":""1"",""time_added"":""1392982956"",""time_updated"":""1393231170"",""time_read"":""1393153522"",""time_favorited"":""0"",""sort_id"":1181,""resolved_title"":""Using Bootstrap the Right (Semantic) Way"",""resolved_url"":""https://www.ostraining.com/blog/coding/bootstrap-right-way/"",""excerpt"":""Back in the year 2000, when I first started learning web development, tables were my best friend.  The web was filled with <tr> and <td> and semantics were non-existent. Images were broken down and placed in bits & pieces inside different table cells."",""word_count"":""646""},{""item_id"":""550157488"",""favorite"":""0"",""status"":""1"",""time_added"":""1392936519"",""time_updated"":""1393056675"",""time_read"":""1393025774"",""time_favorited"":""0"",""sort_id"":1184,""resolved_title"":""The Best (and Worst) Foods to Help You Recover When You're Sick"",""resolved_url"":""http://lifehacker.com/the-best-and-worst-foods-to-help-you-recover-when-you-1525205284"",""excerpt"":""When you've got a cold (very popular around this time of year!) or stomach problems, eating might be the last thing you feel like doing. To recover as fast as possible, though, you need to nourish your body even more than when you're healthy."",""word_count"":""381""},{""item_id"":""550359622"",""favorite"":""0"",""status"":""1"",""time_added"":""1392837135"",""time_updated"":""1393231169"",""time_read"":""1393152736"",""time_favorited"":""0"",""sort_id"":1196,""resolved_title"":""Berlinale 2014. Impressions Part IV: On the Periphery"",""resolved_url"":""https://mubi.com/notebook/posts/berlinale-2014-impressions-part-iv-on-the-periphery"",""excerpt"":""The tail-end of a film festival, that last stretch of endurance-testing early mornings and packed days, tends to make taking in the last bundle of films all the more difficult."",""word_count"":""684""},{""item_id"":""550404783"",""favorite"":""1"",""status"":""1"",""time_added"":""1392982958"",""time_updated"":""1393056674"",""time_read"":""1393025042"",""time_favorited"":""1393025041"",""sort_id"":1180,""resolved_title"":""Can Europe End the Death Penalty in America?"",""resolved_url"":""http://www.theatlantic.com/international/archive/2014/02/can-europe-end-the-death-penalty-in-america/283790/"",""excerpt"":""An EU export ban on lethal-injection drugs is making U.S. executions more difficult to perform. On January 19, Dennis McGuire died gasping and choking during a lethal injection administered by the Ohio Department of Rehabilitation and Correction."",""word_count"":""3130""},{""item_id"":""550933385"",""favorite"":""0"",""status"":""1"",""time_added"":""1392837133"",""time_updated"":""1392899738"",""time_read"":""1392885706"",""time_favorited"":""0"",""sort_id"":1198,""resolved_title"":""Two Ubuntu Smartphones Will Launch This Year, And This Is Who's Making Them"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/02/bq-meizu-ubuntu-smartphones-confirmed-for-2014-release?utm_source=rss&utm_medium=rss&utm_campaign=bq-meizu-ubuntu-smartphones-confirmed-for-2014-release"",""excerpt"":""The first Ubuntu smartphones will launch later this year, Mark Shuttleworth has confirmed.  Devices made by more established manufacturers with ‘household names’ are, we’re told, expected to follow 2015."",""word_count"":""599""},{""item_id"":""550940805"",""favorite"":""0"",""status"":""1"",""time_added"":""1392936518"",""time_updated"":""1392984470"",""time_read"":""1392984462"",""time_favorited"":""0"",""sort_id"":1185,""resolved_title"":""8 Tricks and Downloads that Make Netflix Even More Awesome"",""resolved_url"":""http://lifehacker.com/8-tricks-and-downloads-to-make-netflix-even-more-awesom-1526017078"",""excerpt"":""'; if (google_ads[0].bidtype == 'CPC') { /* insert this snippet for each ad call */ google_adnum = google_adnum + google_ads.length; } document."",""word_count"":""759""},{""item_id"":""551117542"",""favorite"":""0"",""status"":""1"",""time_added"":""1392895458"",""time_updated"":""1392970016"",""time_read"":""1392937562"",""time_favorited"":""0"",""sort_id"":1194,""resolved_title"":""Sequoia Capital — Four Numbers That Explain Why Facebook Acquired..."",""resolved_url"":""http://sequoiacapital.tumblr.com/post/77211282835/four-numbers-that-explain-why-facebook-acquired"",""excerpt"":""Earlier today, Facebook announced its acquisition of WhatsApp for $16 billion. It’s a spectacular milestone for the company’s co-founders Jan Koum and Brian Acton, and their remarkable team.  From the moment they opened the doors of WhatsApp, Jan and Brian wanted a different kind of company."",""word_count"":""1164""},{""item_id"":""551530747"",""favorite"":""0"",""status"":""1"",""time_added"":""1395060264"",""time_updated"":""1395226402"",""time_read"":""1395226280"",""time_favorited"":""0"",""sort_id"":1092,""resolved_title"":""How to Afford Travel When You Want to Travel EVERYWHERE"",""resolved_url"":""http://blog.readyforzero.com/how-to-afford-travel-when-you-want-to-travel-everywhere/"",""excerpt"":""Over the past few years, I’ve been lucky enough to traverse many parts of the globe. The opportunity to travel had the same effect on me that it has had on many people: the more I saw, the more I wanted to see."",""word_count"":""1321""},{""item_id"":""551539020"",""favorite"":""0"",""status"":""1"",""time_added"":""1392933300"",""time_updated"":""1393056674"",""time_read"":""1393025506"",""time_favorited"":""0"",""sort_id"":1188,""resolved_title"":""Nymphomaniac (Volumes 1 and 2) – review"",""resolved_url"":""http://www.theguardian.com/film/2014/feb/20/nymphomaniac-volumes-1-and-2-von-trier-bradshaw-review"",""excerpt"":""Link to video: Nymphomaniac: 'Contains sex in abundance, but is often rigorously unsexy' To recap: Lars von Trier makes an explicit film called Nymphomaniac; he orchestrates some traditional tongue-in-cheek Trier publicity about \""hardcore\"" and \""softcore\"" versions; he even induces excitable critics"",""word_count"":""889""},{""item_id"":""551739861"",""favorite"":""0"",""status"":""1"",""time_added"":""1392933299"",""time_updated"":""1393056675"",""time_read"":""1393025866"",""time_favorited"":""0"",""sort_id"":1189,""resolved_title"":""The strange subculture of rubber duck racing"",""resolved_url"":""http://www.bbc.co.uk/news/blogs-magazine-monitor-26270603"",""excerpt"":""The governor of Wisconsin is due to set into law a bill which will legalise rubber duck racing in the US state. But what is this strange subculture of bath toy racing, asks Vanessa Barford."",""word_count"":""335""},{""item_id"":""552339688"",""favorite"":""0"",""status"":""1"",""time_added"":""1392978741"",""time_updated"":""1393056675"",""time_read"":""1393026284"",""time_favorited"":""0"",""sort_id"":1183,""resolved_title"":""MEPs vote to abolish secret company ownership"",""resolved_url"":""http://euobserver.com/justice/123221"",""excerpt"":""BRUSSELS - A European Parliament vote on Thursday (20 February) to set up public registers to identify company owners has been hailed as ground-breaking by pro-transparency groups."",""word_count"":""543""},{""item_id"":""552386287"",""favorite"":""0"",""status"":""1"",""time_added"":""1392985709"",""time_updated"":""1393056674"",""time_read"":""1393025159"",""time_favorited"":""0"",""sort_id"":1179,""resolved_title"":""Learn How DuckDuckGo Search Engine helps you to be a Good Programmer"",""resolved_url"":""http://thehackernews.com/2014/02/programming-tutorials-with-DuckDuckGo_21.html"",""excerpt"":""So you want to be a Programmer? Want to learn - How to code, Debug, and Program? The Web is full of free resources that can turn you into a programmer in no time, but never knew Where to start or How to troubleshoot your programs."",""word_count"":""114""},{""item_id"":""552937626"",""favorite"":""0"",""status"":""1"",""time_added"":""1394450643"",""time_updated"":""1394501796"",""time_read"":""1394501792"",""time_favorited"":""0"",""sort_id"":1119,""resolved_title"":""What I Really Do When I Work from Home  "",""resolved_url"":""https://medium.com/philosophy-logic/68d1846ddc41"",""excerpt"":""When I first started working from home full-time four and a half years ago, people's reactions were pretty interesting. The first and most common reaction was something like, “Oh my God, I want to work from home!”"",""word_count"":""1019""},{""item_id"":""554440815"",""favorite"":""0"",""status"":""1"",""time_added"":""1393241336"",""time_updated"":""1393406132"",""time_read"":""1393406128"",""time_favorited"":""0"",""sort_id"":1175,""resolved_title"":""Why You need to Stop using WhatsApp?"",""resolved_url"":""http://thehackernews.com/2014/02/why-you-need-to-stop-using-whatsapp.html"",""excerpt"":""WhatsApp is allowing its backend servers to use weak 40-bit and 56-bit encryption schemes, which can be easily cracked using brute force attack. 'This is the kind of stuff the NSA would love,' researchers said."",""word_count"":""195""},{""item_id"":""555061870"",""favorite"":""0"",""status"":""1"",""time_added"":""1394304904"",""time_updated"":""1395045505"",""time_read"":""1395045494"",""time_favorited"":""0"",""sort_id"":1129,""resolved_title"":""The Coinbase Blog — Joint Statement Regarding MtGox"",""resolved_url"":""http://blog.coinbase.com/post/77766809700/joint-statement-regarding-mtgox"",""excerpt"":""The purpose of this document is to summarize a joint statement to the Bitcoin community regarding Mt.Gox.  This tragic violation of the trust of users of Mt.Gox was the result of one company’s actions and does not reflect the resilience or value of bitcoin and the digital currency industry."",""word_count"":""384""},{""item_id"":""555168437"",""favorite"":""0"",""status"":""0"",""time_added"":""1415277448"",""time_updated"":""1415280834"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":134,""resolved_title"":""Best node.js CMS"",""resolved_url"":""http://blog.innovsystems.com/nodejs/best-nodejs-cms"",""excerpt"":""Difference between abstract class and interface Post: Sunday, March, 2014      Difference Between InnoDB and MyISAM Post: Tuesday, March, 2014      POST data to URL using cURL Post: Wednesday, February, 2014      Difference between SOAP and REST Post: Monday, February, 2014"",""word_count"":""34""},{""item_id"":""557167197"",""favorite"":""0"",""status"":""1"",""time_added"":""1394450386"",""time_updated"":""1394502056"",""time_read"":""1394502054"",""time_favorited"":""0"",""sort_id"":1120,""resolved_title"":""How Busy People Make Time To Read—And You Can Too"",""resolved_url"":""http://www.fastcompany.com/3026923/how-busy-people-make-time-to-read-and-you-can-too"",""excerpt"":""Reading is one of the most pleasurable activities out there. On a scale of human enjoyment I once found in a reference book, where respondents ranked activities from getting their car repaired (4.6) to sex (9.3), reading books scored an 8.3. That’s better than TV."",""word_count"":""900""},{""item_id"":""557984888"",""favorite"":""0"",""status"":""1"",""time_added"":""1393756431"",""time_updated"":""1396192242"",""time_read"":""1396177791"",""time_favorited"":""0"",""sort_id"":1167,""resolved_title"":""Fractal Film – Exploring concepts of generative art with the language of cinema"",""resolved_url"":""http://www.creativeapplications.net/openframeworks/fractal-film-exploring-concepts-of-generative-art-with-the-language-of-cinema/"",""excerpt"":""Exploring the concepts of generative art with the language of cinema, Fractal Film is a collaboration between video artist Delphine Doukhan and generative artist Antoine Schmitt."",""word_count"":""321""},{""item_id"":""558746168"",""favorite"":""0"",""status"":""1"",""time_added"":""1394966697"",""time_updated"":""1394966707"",""time_read"":""1394966707"",""time_favorited"":""0"",""sort_id"":1097,""resolved_title"":""The Best Time To Book A Plane Ticket, According To New Study"",""resolved_url"":""http://www.huffingtonpost.com/2014/03/01/best-time-to-book-a-flight_n_4875266.html"",""excerpt"":""Finally, there’s a scientific answer to that magic number of days before a flight when tickets are at their cheapest.  The answer? Are you ready? Are you reeeally ready?"",""word_count"":""428""},{""item_id"":""559346955"",""favorite"":""0"",""status"":""1"",""time_added"":""1395054273"",""time_updated"":""1395226402"",""time_read"":""1395226371"",""time_favorited"":""0"",""sort_id"":1094,""resolved_title"":""Networking for Dummies: 4 Habits Your Contacts Hate"",""resolved_url"":""http://www.inc.com/maya-townsend/networking-habits-better-connections.html"",""excerpt"":""I attend a lot of networking events--so many that I can now spot a disingenuous, disinterested, unsuccessful networker from across the room. And I'm not alone in my avoidance of those people."",""word_count"":""794""},{""item_id"":""559912288"",""favorite"":""0"",""status"":""1"",""time_added"":""1394140892"",""time_updated"":""1394195048"",""time_read"":""1394195042"",""time_favorited"":""0"",""sort_id"":1154,""resolved_title"":""Brian Eno’s Reading List : 20 Essential Books for Sustaining Civilization"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/03/03/brian-eno-reading-list/"",""excerpt"":""Deconstructing a magnificent mind through his reading diet for intellectual survival.  UPDATE: The folks from the Long Now have kindly asked me to contribute to the Manual for Civilization library — here is my own reading list."",""word_count"":""469""},{""item_id"":""560308469"",""favorite"":""0"",""status"":""1"",""time_added"":""1393978986"",""time_updated"":""1395649314"",""time_read"":""1395618163"",""time_favorited"":""0"",""sort_id"":1161,""resolved_title"":""Arduino Cofounder Has Some Advice For You, Hacker ⚙ Co.Labs ⚙ code + community"",""resolved_url"":""http://www.fastcolabs.com/3027178/arduino-cofounder-has-some-advice-for-you-hacker"",""excerpt"":""The cofounder of the open source microcontroller Arduino, Massimo Banzi, doesn’t mince words. “Italy is the kind of a country where if you are young, you don't exist,” he says. “It's a country run by old farts.” Banzi decided not to accept the status quo."",""word_count"":""894""},{""item_id"":""560421242"",""favorite"":""0"",""status"":""1"",""time_added"":""1394308108"",""time_updated"":""1394530907"",""time_read"":""1394530904"",""time_favorited"":""0"",""sort_id"":1123,""resolved_title"":""The Netflix Signup Flow - Our Journey to a Responsive Design"",""resolved_url"":""http://techblog.netflix.com/2014/03/the-netflix-signup-flow-our-journey-to.html"",""excerpt"":""In the Spring of 2013, the User Experience team was gearing up for the impending Netherlands country launch scheduled for September. To reduce barriers to adoption, we wanted to launch with a smooth signup experience on smartphones and tablets."",""word_count"":""892""},{""item_id"":""560874986"",""favorite"":""0"",""status"":""1"",""time_added"":""1409759581"",""time_updated"":""1410777496"",""time_read"":""1410777488"",""time_favorited"":""0"",""sort_id"":481,""resolved_title"":""Welcome to Paradise"",""resolved_url"":""http://s.telegraph.co.uk/graphics/projects/welcome-to-paradise/"",""excerpt"":""Paradise is a brothel in Stuttgart. It’s one of Germany’s “mega-brothels” and, like a lot of those establishments, it has a Moroccan theme."",""word_count"":""5403""},{""item_id"":""560904476"",""favorite"":""0"",""status"":""1"",""time_added"":""1393981719"",""time_updated"":""1395649314"",""time_read"":""1395618003"",""time_favorited"":""0"",""sort_id"":1160,""resolved_title"":""The new PHP"",""resolved_url"":""http://programming.oreilly.com/2014/03/the-new-php.html"",""excerpt"":""The programming language many love to hate is experiencing a renaissance. This is not your parents’ PHP. The new PHP is a more mature language with community standards, a growing affinity for interoperable components, and a passionate movement to improve performance."",""word_count"":""801""},{""item_id"":""561241746"",""favorite"":""0"",""status"":""1"",""time_added"":""1394190399"",""time_updated"":""1395324801"",""time_read"":""1395324793"",""time_favorited"":""0"",""sort_id"":1152,""resolved_title"":""7 New Features In Ubuntu 14.04 LTS That You're Going To Love"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/03/7-ubuntu-14-04-lts-improvements-youll-love"",""excerpt"":""For a while Ubuntu 14.04 LTS was looking like it would be launching a few features short of noteworthy. As a ‘Long Term Support’ release that would’ve been an understandable, if disappointing, decision."",""word_count"":""883""},{""item_id"":""561510304"",""favorite"":""0"",""status"":""1"",""time_added"":""1394191560"",""time_updated"":""1394470960"",""time_read"":""1394470956"",""time_favorited"":""0"",""sort_id"":1150,""resolved_title"":""This Insane New App Will Allow You To Read Novels In Under 90 Minutes"",""resolved_url"":""http://elitedaily.com/news/technology/this-insane-new-app-will-allow-you-to-read-novels-in-under-90-minutes/"",""excerpt"":""The reading game is about to change forever. Boston-based software developer Spritz has been in “stealth mode” for three years, tinkering with their program and leasing it out to different ebooks, apps, and other platforms."",""word_count"":""212""},{""item_id"":""562200923"",""favorite"":""0"",""status"":""1"",""time_added"":""1394123561"",""time_updated"":""1395649314"",""time_read"":""1395617795"",""time_favorited"":""0"",""sort_id"":1156,""resolved_title"":""An Introduction to Securing your Linux VPS"",""resolved_url"":""https://www.digitalocean.com/community/articles/an-introduction-to-securing-your-linux-vps"",""excerpt"":""Taking control of your own Linux server is an opportunity to try new things and leverage the power and flexibility of a great platform. However, Linux server administrators must take the same caution that is appropriate with any network-connected machine to keep it secure and safe."",""word_count"":""3238""},{""item_id"":""562350345"",""favorite"":""0"",""status"":""1"",""time_added"":""1394450366"",""time_updated"":""1394531261"",""time_read"":""1394531258"",""time_favorited"":""0"",""sort_id"":1121,""resolved_title"":""28 Ways to Uncomplicate Your Relationships"",""resolved_url"":""http://www.marcandangel.com/2014/03/05/28-ways-to-uncomplicate-your-relationships/"",""excerpt"":""Almost two decades ago, when I asked my grandfather for some relationship advice, he said, “Honestly, the moment I stopped trying to find the right woman, and started trying to become the right man, your grandmother walked up to me and said, ‘Hello.’”"",""word_count"":""1508""},{""item_id"":""562910799"",""favorite"":""0"",""status"":""1"",""time_added"":""1394190399"",""time_updated"":""1395649314"",""time_read"":""1395617417"",""time_favorited"":""0"",""sort_id"":1151,""resolved_title"":""The Card Players – Playing cards as a method for designing and developing games"",""resolved_url"":""http://www.creativeapplications.net/games/the-card-players-playing-cards-as-a-method-for-designing-and-developing-games/"",""excerpt"":""Over the past few months, in preparation for our Book of Eniarof crowdfunding campaign, we have been exploring the use of playing cards as a method for designing and developing games, concepts, attractions, and playful art objects of various ilk."",""word_count"":""3012""},{""item_id"":""563145917"",""favorite"":""1"",""status"":""1"",""time_added"":""1394199012"",""time_updated"":""1395479366"",""time_read"":""1395479364"",""time_favorited"":""1395479357"",""sort_id"":1147,""resolved_title"":""The History of Kissing"",""resolved_url"":""http://www.psychologytoday.com/blog/hide-and-seek/201402/the-history-kissing"",""excerpt"":""Whatever the case, kissing behavior is not unique to human beings. Primates such as Bonobo apes frequently kiss one another; dogs and cats lick and nuzzle one another, and members of other species; even snails and insects engage in antennal play."",""word_count"":""923""},{""item_id"":""563352571"",""favorite"":""0"",""status"":""1"",""time_added"":""1394198487"",""time_updated"":""1394997664"",""time_read"":""1394997650"",""time_favorited"":""0"",""sort_id"":1148,""resolved_title"":""The Satoshi Paradox"",""resolved_url"":""http://blogs.reuters.com/felix-salmon/2014/03/07/the-satoshi-paradox/"",""excerpt"":""Newsweek wanted a scoop for its relaunch cover story, and boy did it deliver: it uncovered the identity of Satoshi Nakamoto, the inventor of bitcoin. Who then promptly came out and denied everything."",""word_count"":""1978""},{""item_id"":""563374687"",""favorite"":""0"",""status"":""1"",""time_added"":""1394190397"",""time_updated"":""1395649314"",""time_read"":""1395617477"",""time_favorited"":""0"",""sort_id"":1153,""resolved_title"":""Richard Feynman Explains How Rubber Bands Work"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/03/07/richard-feynman-rubber-bands/"",""excerpt"":""“The world is a dynamic mess of jiggling things, if you look at it right."",""word_count"":""244""},{""item_id"":""563506604"",""favorite"":""0"",""status"":""1"",""time_added"":""1395060272"",""time_updated"":""1395144989"",""time_read"":""1395144814"",""time_favorited"":""0"",""sort_id"":1091,""resolved_title"":""Stop Using Your Inbox as a To-Do List"",""resolved_url"":""http://blogs.hbr.org/2014/03/stop-using-your-inbox-as-a-to-do-list/"",""excerpt"":""Do you leave emails in your inbox so that you remember to read or tackle them? If so, you’re using your email to manage your tasks—and those are actually two very different things."",""word_count"":""1574""},{""item_id"":""563691754"",""favorite"":""0"",""status"":""1"",""time_added"":""1394213149"",""time_updated"":""1395318509"",""time_read"":""1395318171"",""time_favorited"":""0"",""sort_id"":1143,""resolved_title"":""Autodesk Shuts Down Softimage"",""resolved_url"":""http://www.redsharknews.com/post/item/1517-autodesk-shuts-down-softimage"",""excerpt"":""With the announcement that the upcoming Softimage 2015 release, due to ship mid-April, will be the last one for the Softimage product line, Autodesk has pulled the plug on one of the defining names of the industry; a truly pioneering 3D package that changed the shape of visual effects."",""word_count"":""481""},{""item_id"":""563735833"",""favorite"":""0"",""status"":""1"",""time_added"":""1394300576"",""time_updated"":""1395318509"",""time_read"":""1395318420"",""time_favorited"":""0"",""sort_id"":1140,""resolved_title"":""Privacy Disaster: Type IP Address, Get Internet User’s Phone Number"",""resolved_url"":""http://torrentfreak.com/privacy-disaster-type-ip-address-get-internet-users-phone-number-140307/"",""excerpt"":""While an Internet user's IP address is often visible, significant effort is required to convert that into a real-life identity. So imagine what would happen if you could type the IP address of an Internet user into a web browser and receive his phone number in return."",""word_count"":""538""},{""item_id"":""564232482"",""favorite"":""0"",""status"":""1"",""time_added"":""1394300574"",""time_updated"":""1395318508"",""time_read"":""1395317793"",""time_favorited"":""0"",""sort_id"":1141,""resolved_title"":""Edward Snowden wants asylum in EU"",""resolved_url"":""http://euobserver.com/justice/123398"",""excerpt"":""BRUSSELS - Former US intelligence contractor Edward Snowden wants asylum in Europe.  In a series of responses delivered to the European Parliament ahead of next week’s debate on mass surveillance, Snowden told euro-deputies he wants protection in the EU."",""word_count"":""585""},{""item_id"":""564385798"",""favorite"":""0"",""status"":""1"",""time_added"":""1394300581"",""time_updated"":""1395318508"",""time_read"":""1395317349"",""time_favorited"":""0"",""sort_id"":1138,""resolved_title"":""Transparency group pushes for stronger whistleblower laws"",""resolved_url"":""http://euobserver.com/justice/123387"",""excerpt"":""BRUSSELS - The harsh treatment of people who expose corruption is a deterrent for others to step forward, says Transparency International (TI)."",""word_count"":""568""},{""item_id"":""564402651"",""favorite"":""0"",""status"":""1"",""time_added"":""1394302754"",""time_updated"":""1394531525"",""time_read"":""1394531524"",""time_favorited"":""0"",""sort_id"":1135,""resolved_title"":""City of London richest EU region"",""resolved_url"":""http://euobserver.com/economic/123306"",""excerpt"":""With wealth three times greater than the EU average, inner London - home to the EU's largest financial sector- is the bloc's richest region."",""word_count"":""256""},{""item_id"":""564402687"",""favorite"":""0"",""status"":""1"",""time_added"":""1394302760"",""time_updated"":""1394531349"",""time_read"":""1394531348"",""time_favorited"":""0"",""sort_id"":1132,""resolved_title"":""EU parliament endorses 'Nordic model' on prostitution"",""resolved_url"":""http://euobserver.com/tickers/123285"",""excerpt"":""MEPs have backed a report by British centre-left MEP Mary Honeyball saying EU countries should legalise prostitution, but criminalise clients who buy sex."",""word_count"":""45""},{""item_id"":""565376118"",""favorite"":""1"",""status"":""1"",""time_added"":""1394455104"",""time_updated"":""1394501336"",""time_read"":""1394501330"",""time_favorited"":""1394501329"",""sort_id"":1118,""resolved_title"":""The slow death of Silicon Roundabout"",""resolved_url"":""http://www.theguardian.com/cities/2014/mar/10/slow-death-of-silicon-roundabout"",""excerpt"":""I live in a neighbourhood in London that, for its sins, has been dubbed Silicon Roundabout. This is a particularly weird bit of humour-come-home-to-roost. The term was coined by Matt Biddulph in 2008, while he was working on Dopplr, a startup around the corner from us."",""word_count"":""1456""},{""item_id"":""566164106"",""favorite"":""0"",""status"":""1"",""time_added"":""1395051107"",""time_updated"":""1395308939"",""time_read"":""1395308696"",""time_favorited"":""0"",""sort_id"":1096,""resolved_title"":""Agile Is Dead (Long Live Agility)"",""resolved_url"":""http://pragdave.me/blog/2014/03/04/time-to-kill-agile/"",""excerpt"":""Thirteen years ago, I was among seventeen middle-aged white guys who gathered at Snowbird, Utah. We were there because we shared common beliefs about developing software, and we wondered if there was a way to describe what we believed.  It took less than a day to come up with a short list of values."",""word_count"":""1033""},{""item_id"":""566581680"",""favorite"":""0"",""status"":""1"",""time_added"":""1394581457"",""time_updated"":""1394700347"",""time_read"":""1394664644"",""time_favorited"":""0"",""sort_id"":1108,""resolved_title"":""The Flight of the Birdman: Flappy Bird Creator Dong Nguyen Speaks Out"",""resolved_url"":""http://www.rollingstone.com/culture/news/the-flight-of-the-birdman-flappy-bird-creator-dong-nguyen-speaks-out-20140311"",""excerpt"":""Last April, Dong Nguyen, a quiet 28-year-old who lived with his parents in Hanoi, Vietnam, and had a day job programming location devices for taxis, spent a holiday weekend making a mobile game. He wanted it to be simple but challenging, in the spirit of the Nintendo games he grew up playing."",""word_count"":""2437""},{""item_id"":""566618590"",""favorite"":""0"",""status"":""1"",""time_added"":""1394630028"",""time_updated"":""1395043256"",""time_read"":""1395016509"",""time_favorited"":""0"",""sort_id"":1103,""resolved_title"":""Sony and Panasonic working together on Archive Disc Format"",""resolved_url"":""http://www.redsharknews.com/technology/item/1523-sony-and-panasonic-working-together-on-archive-disc-format"",""excerpt"":""Last year I wrote about Sony's Optical Disc Archive systems as an alternative to LTO tape archive solutions. Now Sony have announced that they are working together with Panasonic to develop the next generation of Optical Discs to be used in their archive systems"",""word_count"":""402""},{""item_id"":""567188436"",""favorite"":""0"",""status"":""1"",""time_added"":""1394720823"",""time_updated"":""1395531678"",""time_read"":""1395531675"",""time_favorited"":""0"",""sort_id"":1101,""resolved_title"":""How people really read and share online"",""resolved_url"":""http://flowingdata.com/2014/03/12/how-people-really-read-and-share-online/"",""excerpt"":""Tony Haile discusses how we read and share online, based on actual data. It's not as click- and pageview-based as you might think.  A widespread assumption is that the more content is liked or shared, the more engaging it must be, the more willing people are to devote their attention to it."",""word_count"":""147""},{""item_id"":""567210875"",""favorite"":""0"",""status"":""1"",""time_added"":""1394630027"",""time_updated"":""1395045321"",""time_read"":""1395045313"",""time_favorited"":""0"",""sort_id"":1104,""resolved_title"":""In the future, we'll be renting our computers and GPUs as well as software  Featured"",""resolved_url"":""http://www.redsharknews.com/technology/item/1526-in-the-future,-we-ll-be-renting-our-computers-and-gpus-as-well-as-software"",""excerpt"":""I've just spent a day in Dell's headquarters in Austin, Texas. There's some stuff going on there that, in time, could shake up the Post Production and animation industries  As a European, the US always seems supersized to me, but in Texas, you just loose perspective completely."",""word_count"":""840""},{""item_id"":""567489331"",""favorite"":""0"",""status"":""1"",""time_added"":""1404376764"",""time_updated"":""1404484837"",""time_read"":""1404394242"",""time_favorited"":""0"",""sort_id"":712,""resolved_title"":""Node.js Handbook - Understanding Error-First Callbacks"",""resolved_url"":""http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/"",""excerpt"":""Recently I’ve noticed a lack of resources on advanced Node.js topics. There are plenty of tutorials on the basics, but you’ll find very little written on maintainable design or scaleable architecture. I created The Node.js Handbook to address this gap. You can read all past topics here."",""word_count"":""861""},{""item_id"":""568117377"",""favorite"":""0"",""status"":""1"",""time_added"":""1396266449"",""time_updated"":""1396420919"",""time_read"":""1396420916"",""time_favorited"":""0"",""sort_id"":1057,""resolved_title"":""Why Good Managers Are So Rare"",""resolved_url"":""http://blogs.hbr.org/2014/03/why-good-managers-are-so-rare/"",""excerpt"":""Gallup has found that one of the most important decisions companies make is simply whom they name manager. Yet our analysis suggests that they usually get it wrong. In fact, Gallup finds that companies fail to choose the candidate with the right talent for the job 82% of the time."",""word_count"":""1193""},{""item_id"":""568515224"",""favorite"":""0"",""status"":""1"",""time_added"":""1397381935"",""time_updated"":""1399823310"",""time_read"":""1399792925"",""time_favorited"":""0"",""sort_id"":1014,""resolved_title"":""Netflix VP of IT on the Future of InfrastructureMarch 12, 2014"",""resolved_url"":""http://www.amplifypartners.com/interviews/netflix-vp-of-it-on-the-future-of-infrastructure/"",""excerpt"":""We recently conducted an interview with Mike D. Kail (@mdkail)."",""word_count"":""1262""},{""item_id"":""570984715"",""favorite"":""0"",""status"":""1"",""time_added"":""1395093551"",""time_updated"":""1395308939"",""time_read"":""1395308224"",""time_favorited"":""0"",""sort_id"":1090,""resolved_title"":""Inside Airbnb's Grand Hotel Plans"",""resolved_url"":""http://www.fastcompany.com/3027107/punk-meet-rock-airbnb-brian-chesky-chip-conley"",""excerpt"":""When I first heard of \""the sheet,\"" I assumed it was bogus. Word was that Airbnb CEO Brian Chesky had boiled down his strategic road map—all of Airbnb's secret plans for 2014—onto a single piece of paper."",""word_count"":""4246""},{""item_id"":""572015923"",""favorite"":""0"",""status"":""1"",""time_added"":""1395166953"",""time_updated"":""1395220324"",""time_read"":""1395220320"",""time_favorited"":""0"",""sort_id"":1087,""resolved_title"":""Why the Big Bang Discovery Is Even More Important Than You Think"",""resolved_url"":""http://gizmodo.com/why-the-big-bang-proof-is-even-more-important-than-you-1546284818"",""excerpt"":""'; if (google_ads[0].bidtype == 'CPC') { /* insert this snippet for each ad call */ google_adnum = google_adnum + google_ads.length; } document."",""word_count"":""942""},{""item_id"":""573872035"",""favorite"":""0"",""status"":""1"",""time_added"":""1395417348"",""time_updated"":""1395532377"",""time_read"":""1395532375"",""time_favorited"":""0"",""sort_id"":1081,""resolved_title"":""Google CEO Larry Page : Elon Musk would get my inheritance over charity."",""resolved_url"":""http://www.slate.com/blogs/business_insider/2014/03/20/google_ceo_larry_page_elon_musk_would_get_my_inheritance_over_charity.html"",""excerpt"":""This post originally appeared in Business Insider.  Google CEO Larry Page has an unusual idea about what should happen to his billions should he die."",""word_count"":""225""},{""item_id"":""574182943"",""favorite"":""0"",""status"":""1"",""time_added"":""1395480494"",""time_updated"":""1395649313"",""time_read"":""1395616033"",""time_favorited"":""0"",""sort_id"":1080,""resolved_title"":""Louis Theroux: Moving to Los Angeles"",""resolved_url"":""http://www.bbc.co.uk/news/magazine-26661688"",""excerpt"":""For his new series of documentaries about Los Angeles, Louis Theroux and his family relocated to the city, where they found themselves gradually embracing the Angeleno way of life."",""word_count"":""1801""},{""item_id"":""574263214"",""favorite"":""0"",""status"":""1"",""time_added"":""1396266429"",""time_updated"":""1396425442"",""time_read"":""1396424487"",""time_favorited"":""0"",""sort_id"":1060,""resolved_title"":""Which Professions Have the Most Psychopaths? The Fewest?"",""resolved_url"":""http://time.com/32647/which-professions-have-the-most-psychopaths-the-fewest/"",""excerpt"":""CEO is the profession with the most psychopaths.  But first off, psychopath doesn’t just mean someone who cuts you up with a chainsaw — though the majority of people who do things like that are psychopaths. What’s the definition?"",""word_count"":""266""},{""item_id"":""575563348"",""favorite"":""0"",""status"":""1"",""time_added"":""1397347072"",""time_updated"":""1398161394"",""time_read"":""1398161292"",""time_favorited"":""0"",""sort_id"":1017,""resolved_title"":""After WhatsApp: An Insider’s View On What’s Next In Messaging"",""resolved_url"":""http://techcrunch.com/2014/03/22/after-whatsapp-an-insiders-view-on-whats-next-in-messaging/"",""excerpt"":""Editor’s note: Ted Livingston is the Founder and CEO of Kik, a mobile-first company with over 120 million registered users all over the world. Ted started working in mobile in 2007, while he was still studying at the University of Waterloo."",""word_count"":""1830""},{""item_id"":""576021848"",""favorite"":""0"",""status"":""1"",""time_added"":""1399452498"",""time_updated"":""1399823309"",""time_read"":""1399791740"",""time_favorited"":""0"",""sort_id"":903,""resolved_title"":""Recovering files using /proc (and spying, too!)"",""resolved_url"":""http://jvns.ca/blog/2014/03/23/recovering-files-using-slash-proc-and-other-useful-facts/"",""excerpt"":""I’ve had a vague idea for years that /proc was a way the Linux kernel exposed its internals, and that I could look there to find things.  TIL!!! If you accidentally delete a file that a process still has open, you can recover it with cat /proc/$pid/fd/$file_descriptor. so easy!"",""word_count"":""693""},{""item_id"":""576113655"",""favorite"":""1"",""status"":""1"",""time_added"":""1397347071"",""time_updated"":""1403476796"",""time_read"":""1403468444"",""time_favorited"":""1403468443"",""sort_id"":1018,""resolved_title"":""Principles of good data analysis"",""resolved_url"":""http://www.gregreda.com/2014/03/23/principles-of-good-data-analysis/"",""excerpt"":""Data analysis is hard.  What makes it hard is the intuitive aspect of it - knowing the direction you want to take based on the limited information you have at the moment."",""word_count"":""1079""},{""item_id"":""576159792"",""favorite"":""0"",""status"":""1"",""time_added"":""1397347070"",""time_updated"":""1402228324"",""time_read"":""1402125173"",""time_favorited"":""0"",""sort_id"":1019,""resolved_title"":""Digital Ocean’s Journey From TechStars Reject To Cloud-Hosting Darling"",""resolved_url"":""http://techcrunch.com/2014/03/23/digital-oceans-journey-from-techstars-reject-to-cloud-hosting-darling/"",""excerpt"":""The cloud hosting service DigitalOcean is one of the big startup success stories of the last year. Earlier this month, the company announced that it had raised a $37 million funding round led by Andreesen Horowitz, just a few months after raising a $3.2 million seed round."",""word_count"":""1093""},{""item_id"":""576579441"",""favorite"":""0"",""status"":""1"",""time_added"":""1395755360"",""time_updated"":""1395823444"",""time_read"":""1395823442"",""time_favorited"":""0"",""sort_id"":1068,""resolved_title"":""1TB SSDs just got affordable"",""resolved_url"":""http://www.redsharknews.com/technology/item/1549-1tb-ssds-just-got-affordable"",""excerpt"":""Just a few years ago 1TB of HDD in a PC seemed over the top. But now, you can have nearly a TB of SSD for a price that won't give you sleepless nights  In amongst the daily deluge of emails, we saw an offer from a UK company, Ebuyer, for an SSD."",""word_count"":""284""},{""item_id"":""576742558"",""favorite"":""0"",""status"":""1"",""time_added"":""1395745658"",""time_updated"":""1396192239"",""time_read"":""1396175468"",""time_favorited"":""0"",""sort_id"":1075,""resolved_title"":""The NSA is burning down the web, but what if we rebuilt a spy-proof internet?"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/mar/24/david-byrne-nsa-rebuild-secure-internet#start-of-comments"",""excerpt"":""What will life be like after the internet? Thanks to the mass surveillance undertaken by the National Security Agency and the general creepiness of companies like Google and Facebook, I've found myself considering this question. I mean, nothing lasts forever, right?"",""word_count"":""2446""},{""item_id"":""576776375"",""favorite"":""0"",""status"":""1"",""time_added"":""1395743543"",""time_updated"":""1403476796"",""time_read"":""1403475497"",""time_favorited"":""0"",""sort_id"":1076,""resolved_title"":""The future of the past: why the end of Yugoslavia is still important"",""resolved_url"":""http://www.opendemocracy.net/can-europe-make-it/ljubica-spaskovska/future-of-past-why-end-of-yugoslavia-is-still-important#.UzBI8SVB0fU.twitter"",""excerpt"":""A new socialist model is emerging in the western Balkans. Can its political vocabulary transcend the ethno-national dividing lines in the region?"",""word_count"":""1411""},{""item_id"":""576822727"",""favorite"":""0"",""status"":""1"",""time_added"":""1396266445"",""time_updated"":""1396435923"",""time_read"":""1396435920"",""time_favorited"":""0"",""sort_id"":1058,""resolved_title"":""15 Things Highly Focused People Don’t Do"",""resolved_url"":""http://www.lifehack.org/articles/productivity/15-things-highly-focused-people-dont.html"",""excerpt"":""Focus is key to success and happiness in life. The most successful people on this planet are highly focused. They pay attention to the present moment and present tasks. This habit ensures they are fully engaged in activities, get more done properly and deal with adverse life events better."",""word_count"":""1208""},{""item_id"":""576948637"",""favorite"":""0"",""status"":""1"",""time_added"":""1395746677"",""time_updated"":""1396173549"",""time_read"":""1396173545"",""time_favorited"":""0"",""sort_id"":1074,""resolved_title"":""U.S. Withdraws from ICANN : Why It's No Big Deal"",""resolved_url"":""http://www.newrepublic.com/article/117093/us-withdraws-icann-why-its-no-big-deal"",""excerpt"":""On March 14, the U.S. government announced that it would seek to relinquish a privileged role in the management of Internet names and numbers."",""word_count"":""2440""},{""item_id"":""576976734"",""favorite"":""0"",""status"":""1"",""time_added"":""1397345205"",""time_updated"":""1403520121"",""time_read"":""1403520000"",""time_favorited"":""0"",""sort_id"":1020,""resolved_title"":""“Creativity is not a team sport”: Interview Vincent Walsh, Prof Neuroscience UCL"",""resolved_url"":""http://www.improvides.com/2014/03/24/creativity-team-sport-interview-vincent-walsh-prof-neuroscience-ucl/"",""excerpt"":""Today’s interview makes me feel quite honoured. It’s with Prof Vincent Walsh of UCL, one of the world’s preeminent cognitive neuroscientists with a strong interest in the study of creativity."",""word_count"":""1575""},{""item_id"":""577206484"",""favorite"":""0"",""status"":""1"",""time_added"":""1397345204"",""time_updated"":""1402228324"",""time_read"":""1402125349"",""time_favorited"":""0"",""sort_id"":1021,""resolved_title"":""WPA2 wireless security cracked"",""resolved_url"":""http://sciencespot.co.uk/wpa2-wireless-security-cracked.html"",""excerpt"":""There are various ways to protect a wireless network. Some are generally considered to be more secure than others. Some, such as WEP (Wired Equivalent Privacy), were broken several years ago and are not recommended as a way to keep intruders away from private networks."",""word_count"":""597""},{""item_id"":""577546038"",""favorite"":""0"",""status"":""1"",""time_added"":""1396266503"",""time_updated"":""1396435923"",""time_read"":""1396435729"",""time_favorited"":""0"",""sort_id"":1056,""resolved_title"":""Bookworms Do It Better: 12 Compelling Reasons to Read More Books"",""resolved_url"":""http://www.lifehack.org/articles/lifestyle/bookworms-better-12-compelling-reasons-read-more-books.html"",""excerpt"":""The more books you read, the better your life will be. If you don’t believe me, please consider these twelve compelling reasons to read more books.  This shouldn’t come as a shock, but studies suggest reading makes you smart."",""word_count"":""893""},{""item_id"":""577908657"",""favorite"":""0"",""status"":""1"",""time_added"":""1396451176"",""time_updated"":""1396859818"",""time_read"":""1396859677"",""time_favorited"":""0"",""sort_id"":1048,""resolved_title"":""How Russians Are Outsmarting Internet Censorship"",""resolved_url"":""http://advocacy.globalvoicesonline.org/2014/03/25/how-russians-are-outsmarting-internet-censorship/"",""excerpt"":""Pro-Navalny bloggers troll Internet regulators."",""word_count"":""607""},{""item_id"":""578677603"",""favorite"":""0"",""status"":""1"",""time_added"":""1396517610"",""time_updated"":""1396793667"",""time_read"":""1396793609"",""time_favorited"":""0"",""sort_id"":1047,""resolved_title"":""Museums make you happier and less lonely, studies find"",""resolved_url"":""https://www.freelancersunion.org/blog/2014/03/26/museums-good-for-you-happier-community/"",""excerpt"":""One of the greatest things about freelancing is that although we’re often very busy, we can choose to be “off” during 9-5 hours. This means that we can visit uncrowded museums and attend other midday events, which are often hellish on the weekends.  1."",""word_count"":""383""},{""item_id"":""578868062"",""favorite"":""0"",""status"":""1"",""time_added"":""1395878802"",""time_updated"":""1396173256"",""time_read"":""1396173246"",""time_favorited"":""0"",""sort_id"":1062,""resolved_title"":""How to Make GIMP Work More Like Photoshop"",""resolved_url"":""http://lifehacker.com/how-to-make-the-gimp-work-more-like-photoshop-1551318983"",""excerpt"":""'; if (google_ads[0].bidtype == 'CPC') { /* insert this snippet for each ad call */ google_adnum = google_adnum + google_ads.length; } document."",""word_count"":""1691""},{""item_id"":""579827936"",""favorite"":""0"",""status"":""1"",""time_added"":""1396266514"",""time_updated"":""1396420276"",""time_read"":""1396420274"",""time_favorited"":""0"",""sort_id"":1055,""resolved_title"":""Bacon Sriracha Unicorn Diaries"",""resolved_url"":""http://blog.eat24hours.com/breakup-letter-to-facebook-from-eat24/"",""excerpt"":""Hey. It’s Eat24. Look, we need to talk. This isn’t easy to say since we’ve been together so long, but we need to break up.  We’d love to say “It’s not you, it’s us” but it’s totally you."",""word_count"":""1477""},{""item_id"":""580374358"",""favorite"":""0"",""status"":""1"",""time_added"":""1396211293"",""time_updated"":""1396861428"",""time_read"":""1396861410"",""time_favorited"":""0"",""sort_id"":1061,""resolved_title"":""Big data: are we making a big mistake?"",""resolved_url"":""http://www.ft.com/cms/s/2/21a6e7d8-b479-11e3-a09a-00144feabdc0.html#axzz2xvrzLURw"",""excerpt"":""Five years ago, a team of researchers from Google announced a remarkable achievement in one of the world’s top scientific journals, Nature. Without needing the results of a single medical check-up, they were nevertheless able to track the spread of influenza across the US."",""word_count"":""3186""},{""item_id"":""580641744"",""favorite"":""0"",""status"":""0"",""time_added"":""1404236046"",""time_updated"":""1404247244"",""time_read"":""1400745716"",""time_favorited"":""0"",""sort_id"":719,""resolved_title"":""Error Handling in Nodejs : Developer Center"",""resolved_url"":""https://www.joyent.com/developers/node/design/errors"",""excerpt"":""Error handling is a pain, and it's easy to get by for a long time in Node.js without dealing with many errors correctly. But building robust Node.js apps requires dealing properly with errors, and it's not hard to learn how. If you're really impatient, skip down to the \""Summary\"" section for a tl;dr."",""word_count"":""6995""},{""item_id"":""581914145"",""favorite"":""0"",""status"":""1"",""time_added"":""1396343828"",""time_updated"":""1396419882"",""time_read"":""1396419877"",""time_favorited"":""0"",""sort_id"":1054,""resolved_title"":""How Dropbox Knows When You’re Sharing Copyrighted Stuff (Without Actually Looking At Your Stuff)"",""resolved_url"":""http://techcrunch.com/2014/03/30/how-dropbox-knows-when-youre-sharing-copyrighted-stuff-without-actually-looking-at-your-stuff/"",""excerpt"":""Late last night, a tweet was spread far and wide showing that a DMCA notice had blocked a file from being shared on a Dropbox user’s account.  As of this afternoon, it’s seen just shy of 3 thousand retweets."",""word_count"":""1068""},{""item_id"":""581996472"",""favorite"":""0"",""status"":""1"",""time_added"":""1396897551"",""time_updated"":""1402228326"",""time_read"":""1402134402"",""time_favorited"":""0"",""sort_id"":1044,""resolved_title"":""Next Silicon Valley? Berlin's battle to be a tech hub"",""resolved_url"":""http://www.bbc.co.uk/news/technology-26770568"",""excerpt"":""The world is full of Silicon Valley wannabes, invariably dubbed \""Silicon Something\"", from Silicon Glen in Scotland to Silicon Savannah in East Africa to Silicon Gulf in the Philippines, but none of them approaches the real deal in northern California."",""word_count"":""788""},{""item_id"":""582686126"",""favorite"":""0"",""status"":""1"",""time_added"":""1398468822"",""time_updated"":""1399534210"",""time_read"":""1399500308"",""time_favorited"":""0"",""sort_id"":943,""resolved_title"":""Debugging Asynchronous JavaScript with Chrome DevTools"",""resolved_url"":""http://www.html5rocks.com/en/tutorials/developertools/async-call-stack/"",""excerpt"":""A powerful feature that makes JavaScript unique is its ability to work asynchronously via callback functions. Assigning async callbacks let you write event-driven code but it also makes tracking down bugs a hair pulling experience since the JavaScript is not executing in a linear fashion."",""word_count"":""1130""},{""item_id"":""582894006"",""favorite"":""0"",""status"":""1"",""time_added"":""1396447570"",""time_updated"":""1396793719"",""time_read"":""1396793670"",""time_favorited"":""0"",""sort_id"":1051,""resolved_title"":""Going Reactive - Asynchronous JavaScript at Netflix"",""resolved_url"":""http://techblog.netflix.com/2014/03/going-reactive-asynchronous-javascript.html"",""excerpt"":""By Matt Marenghi  We held the first in a series of JavaScript talks at our Los Gatos, Calif. headquarters on March 19th. Our own Jafar Husain shared how we’re using the Reactive Extensions (Rx) library to build responsive UIs across our device experiences."",""word_count"":""158""},{""item_id"":""583034860"",""favorite"":""0"",""status"":""1"",""time_added"":""1397341619"",""time_updated"":""1399498178"",""time_read"":""1399498172"",""time_favorited"":""0"",""sort_id"":1026,""resolved_title"":""How Gmail Happened: The Inside Story of Its Launch 10 Years Ago"",""resolved_url"":""http://time.com/43263/gmail-10th-anniversary/"",""excerpt"":""Google's email breakthrough was almost three years in the making."",""word_count"":""3589""},{""item_id"":""583080127"",""favorite"":""0"",""status"":""1"",""time_added"":""1403001470"",""time_updated"":""1403467507"",""time_read"":""1403441449"",""time_favorited"":""0"",""sort_id"":796,""resolved_title"":""5 Myths About elementaryby Cassidy James"",""resolved_url"":""http://elementaryos.org/journal/5-myths-about-elementary"",""excerpt"":""Whether I'm browsing Google+, responding to tweets from @elementary, or telling friends about elementary in the flesh, I'm bound to hear some random myth about elementary that is just plain false. I've noticed a few (five, to be exact) that seem to keep cropping up."",""word_count"":""807""},{""item_id"":""584153007"",""favorite"":""0"",""status"":""1"",""time_added"":""1396451175"",""time_updated"":""1396669528"",""time_read"":""1396669525"",""time_favorited"":""0"",""sort_id"":1049,""resolved_title"":""These Tips Will Make Your Software Engineer Resume World Famous"",""resolved_url"":""http://www.doesnotcompute.biz/5-dos-and-donts-to-make-your-software-engineer-resume-world-famous?utm_campaign=Technology%20List%20Builder&amp;utm_medium=hackernews&amp;utm_source=social"",""excerpt"":""What does it take to make a top-notch software engineer resume? It's easy to ignore the issue, but resumes still matters for engineers. Think about these tips and your resume won't let you down...even when you're interviewing with the best tech companies on Earth."",""word_count"":""721""},{""item_id"":""584459150"",""favorite"":""0"",""status"":""1"",""time_added"":""1397341618"",""time_updated"":""1402228325"",""time_read"":""1402125529"",""time_favorited"":""0"",""sort_id"":1027,""resolved_title"":""European Parliament calls for Magnitsky blacklist"",""resolved_url"":""http://euobserver.com/tickers/123735"",""excerpt"":""The European Parliament Wednesday adopted a resolution proposing a visa ban and asset freeze for 32 Russian individuals responsible for the death of whistleblower Sergei Magnitsky, as well as the cover-up of his murder and the ongoing harassment of his family. The US banned 16 people on this list."",""word_count"":""47""},{""item_id"":""585379302"",""favorite"":""1"",""status"":""1"",""time_added"":""1397341615"",""time_updated"":""1401710160"",""time_read"":""1401710155"",""time_favorited"":""1401710145"",""sort_id"":1030,""resolved_title"":""The Woman Behind Apple's First Icons"",""resolved_url"":""http://priceonomics.com/the-woman-behind-apples-first-icons/"",""excerpt"":""Thirty years ago, as tech titans battled for real estate in the personal computer market, an inconspicuous young artist gave the Macintosh a smile.  Susan Kare “was the type of kid who always loved art."",""word_count"":""2096""},{""item_id"":""585414183"",""favorite"":""0"",""status"":""1"",""time_added"":""1397341617"",""time_updated"":""1402228325"",""time_read"":""1402125468"",""time_favorited"":""0"",""sort_id"":1028,""resolved_title"":""Brendan Eich Steps Down as Mozilla CEO"",""resolved_url"":""https://blog.mozilla.org/press/2014/04/brendan-eich-steps-down-as-mozilla-ceo/"",""excerpt"":""Mozilla prides itself on being held to a different standard and, this past week, we didn’t live up to it. We know why people are hurt and angry, and they are right: it’s because we haven’t stayed true to ourselves.  We didn’t act like you’d expect Mozilla to act."",""word_count"":""386""},{""item_id"":""585988778"",""favorite"":""0"",""status"":""1"",""time_added"":""1398468822"",""time_updated"":""1399496885"",""time_read"":""1399453781"",""time_favorited"":""0"",""sort_id"":942,""resolved_title"":""How the Internet Is Taking Away America’s Religion"",""resolved_url"":""http://www.technologyreview.com/view/526111/how-the-internet-is-taking-away-americas-religion/"",""excerpt"":""Back in 1990, about 8 percent of the U.S. population had no religious preference. By 2010, this percentage had more than doubled to 18 percent. That’s a difference of about 25 million people, all of whom have somehow lost their religion."",""word_count"":""1022""},{""item_id"":""587894250"",""favorite"":""0"",""status"":""1"",""time_added"":""1397339804"",""time_updated"":""1402228328"",""time_read"":""1402135568"",""time_favorited"":""0"",""sort_id"":1031,""resolved_title"":""Rwanda accuses France of having role in genocide"",""resolved_url"":""http://euobserver.com/tickers/123764"",""excerpt"":""The French government will not attend the 20th anniversary of the Rwandan genocide after President Kagame accused France of a \""direct role\"" in the 1994 atrocities which killed 800,000 people. Kagame added that France hadn't \""done enough to save lives\""."",""word_count"":""48""},{""item_id"":""587902766"",""favorite"":""0"",""status"":""1"",""time_added"":""1397339803"",""time_updated"":""1401111430"",""time_read"":""1401111419"",""time_favorited"":""0"",""sort_id"":1033,""resolved_title"":""Isaac Asimov on the Thrill of Lifelong Learning, Science vs. Religion, and the Role of Science Fiction in Advancing Society"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/04/07/isaac-asimov-bill-moyers-education-science-religion/"",""excerpt"":""“It’s insulting to imply that only a system of rewards and punishments can keep you a decent human being."",""word_count"":""4123""},{""item_id"":""588794909"",""favorite"":""0"",""status"":""1"",""time_added"":""1397554183"",""time_updated"":""1399496887"",""time_read"":""1399455413"",""time_favorited"":""0"",""sort_id"":987,""resolved_title"":""Unbreakable Encryption inspired by Human Biology"",""resolved_url"":""http://thehackernews.com/2014/04/unbreakable-encryption-inspired-by.html"",""excerpt"":""When we talk about security, only one thing cames to our mind – ENCRYPTION."",""word_count"":""519""},{""item_id"":""588851215"",""favorite"":""0"",""status"":""1"",""time_added"":""1397338141"",""time_updated"":""1401111457"",""time_read"":""1401111451"",""time_favorited"":""0"",""sort_id"":1041,""resolved_title"":""Extract CSV data from PDF files with Tabula"",""resolved_url"":""http://flowingdata.com/2014/04/08/extract-csv-data-from-pdf-files-with-tabula-2/"",""excerpt"":""If you've ever tried to do anything with data provided to you in PDFs, you know how painful this is — you can't easily copy-and-paste rows of data out of PDF files. Tabula allows you to extract that data in CSV format, through a simple interface."",""word_count"":""113""},{""item_id"":""589022474"",""favorite"":""0"",""status"":""1"",""time_added"":""1397339803"",""time_updated"":""1402228327"",""time_read"":""1402134705"",""time_favorited"":""0"",""sort_id"":1032,""resolved_title"":""European ISPs Can Stop Logging User Data, Court Rules"",""resolved_url"":""http://torrentfreak.com/eu-court-overturns-data-retention-directive-140408/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""589274701"",""favorite"":""0"",""status"":""1"",""time_added"":""1397338151"",""time_updated"":""1402228327"",""time_read"":""1402134744"",""time_favorited"":""0"",""sort_id"":1035,""resolved_title"":""#CILDC : sheetsee.js - a tool for visualizing data"",""resolved_url"":""http://hurstassociates.blogspot.com/2014/04/cildc-sheetseejs-tool-for-visualizing.html"",""excerpt"":""\""Sheetsee.js is a client-side library for connecting Google Spreadsheets to a website and visualizing the information in tables, maps and charts. \""Google Spreadsheets can be used as simple and collaborative databases, they make getting a data driven site going much easier than traditional databases."",""word_count"":""74""},{""item_id"":""589668936"",""favorite"":""0"",""status"":""1"",""time_added"":""1397339801"",""time_updated"":""1398600692"",""time_read"":""1398555537"",""time_favorited"":""0"",""sort_id"":1034,""resolved_title"":""What does the death of the EU data directive mean?"",""resolved_url"":""http://euobserver.com/news/123791"",""excerpt"":""BRUSSELS - The EU's data retention directive was agreed in 2006, in the wake of terrorist attacks in Madrid and London in 2004 and 2005 respectively, as governments attempted to tighten national security rules."",""word_count"":""781""},{""item_id"":""590114520"",""favorite"":""0"",""status"":""1"",""time_added"":""1397338148"",""time_updated"":""1402228327"",""time_read"":""1402134944"",""time_favorited"":""0"",""sort_id"":1038,""resolved_title"":""#CILDC : Hacking the Librarian: Evolving Personal & Career Development - Jennifer Koerber"",""resolved_url"":""http://hurstassociates.blogspot.com/2014/04/cildc-hacking-librarian-evolving.html"",""excerpt"":""Description: It's old news that librarianship is changing as a profession, and we understand that library professionals need to change with it."",""word_count"":""433""},{""item_id"":""591234809"",""favorite"":""0"",""status"":""1"",""time_added"":""1397338150"",""time_updated"":""1398555849"",""time_read"":""1398555848"",""time_favorited"":""0"",""sort_id"":1036,""resolved_title"":""The great 1980s Dungeons & Dragons panic"",""resolved_url"":""http://www.bbc.co.uk/news/magazine-26328105#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa"",""excerpt"":""In an era of potent concern over internet pornography, cyber-bullying, and drugs, it is hard to imagine a game being controversial. But 30 years ago Dungeons & Dragons was the subject of a full-on moral panic, writes Peter Ray Allison."",""word_count"":""1058""},{""item_id"":""591527022"",""favorite"":""0"",""status"":""1"",""time_added"":""1397555010"",""time_updated"":""1399823309"",""time_read"":""1399792378"",""time_favorited"":""0"",""sort_id"":986,""resolved_title"":""The top 6 skills today’s employers want"",""resolved_url"":""http://iloblog.org/2014/04/11/the-top-6-skills-todays-employers-want/"",""excerpt"":""After four years of college, my son is about to graduate with a degree in Environmental Politics. We are both aware that he is entering the job market at a time when more and more young people cannot find work."",""word_count"":""647""},{""item_id"":""591537974"",""favorite"":""0"",""status"":""1"",""time_added"":""1397338147"",""time_updated"":""1402228326"",""time_read"":""1402133838"",""time_favorited"":""0"",""sort_id"":1039,""resolved_title"":""Blender's Project Gooseberry – A Sheep in an Open Cloud"",""resolved_url"":""http://www.redsharknews.com/production/item/1613-project-gooseberry-"",""excerpt"":""Normally when a content creation software adds cloud features, that basically means that restrictions are employed. The software might not work anymore without internet access and options like storing assets in the cloud are meant to further bind a customer to the software."",""word_count"":""503""},{""item_id"":""591555328"",""favorite"":""0"",""status"":""1"",""time_added"":""1397215598"",""time_updated"":""1402228326"",""time_read"":""1402134598"",""time_favorited"":""0"",""sort_id"":1043,""resolved_title"":""Jaws drop, Earth stops spinning. Blackmagic's astonishing new 4K modular camera"",""resolved_url"":""http://www.redsharknews.com/production/item/1593-nab-2014-blackmagic-announces-the-ursa?utm_source=www.lwks.com+subscribers&utm_campaign=56d8072f49-RSN_April08_2014&utm_medium=email&utm_term=0_079aaa3026-56d8072f49-75349817"",""excerpt"":""As a company Blackmagic Design certainly likes putting the cat amongst the pigeons and NAB 2014 is no exception. Prepare to meet the URSA, the world’s first user upgradable 4K digital film camera."",""word_count"":""510""},{""item_id"":""591774185"",""favorite"":""0"",""status"":""1"",""time_added"":""1397338149"",""time_updated"":""1402228326"",""time_read"":""1402126286"",""time_favorited"":""0"",""sort_id"":1037,""resolved_title"":""From Burger Flipper to Bürgermeister? Immigrant Could Become Next Berlin Mayor"",""resolved_url"":""http://www.spiegel.de/international/germany/the-meteoric-political-rise-ofmpalestinian-immigrant-raed-saleh-a-963384.html"",""excerpt"":""With Berlin Mayor Klaus Wowereit facing his political Waterloo, all eyes have turned to Raed Saleh, who could become the first mayor of a major German city with foreign roots. The German capital's changing demographics could help him."",""word_count"":""2150""},{""item_id"":""591932946"",""favorite"":""0"",""status"":""1"",""time_added"":""1397249040"",""time_updated"":""1402228326"",""time_read"":""1402134170"",""time_favorited"":""0"",""sort_id"":1042,""resolved_title"":""Blackmagic release low cost Studio Cameras!"",""resolved_url"":""http://www.redsharknews.com/production/item/1594-blackmagic-release-studio-cameras"",""excerpt"":""Analysis: Blackmagic has designed what looks like an incredibly versatile and credible-looking studio camera.  I’m sure nobody was expecting a new camera from Blackmagic at NAB this year after so many amazing cameras from them in such a short time but it turns out we were wrong."",""word_count"":""1130""},{""item_id"":""592914595"",""favorite"":""0"",""status"":""1"",""time_added"":""1397489564"",""time_updated"":""1397547159"",""time_read"":""1397547156"",""time_favorited"":""0"",""sort_id"":990,""resolved_title"":""Why Are Porn Perfomers Scared to Talk About Internet Piracy?"",""resolved_url"":""http://torrentfreak.com/why-are-porn-perfomers-scared-to-talk-about-internet-piracy-140413/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""593397445"",""favorite"":""0"",""status"":""1"",""time_added"":""1398155272"",""time_updated"":""1403120495"",""time_read"":""1403089903"",""time_favorited"":""0"",""sort_id"":972,""resolved_title"":""Beyond Words: Writing for Readability"",""resolved_url"":""https://medium.com/p/8a09ef94ee5e"",""excerpt"":""Treat your reader with respect. Do not underestimate their intelligence or willingness to go on a journey with you. They want to go with you, but you need to give them a compelling enough reason to follow you."",""word_count"":""1885""},{""item_id"":""593657591"",""favorite"":""0"",""status"":""1"",""time_added"":""1397648159"",""time_updated"":""1397721271"",""time_read"":""1397721269"",""time_favorited"":""0"",""sort_id"":981,""resolved_title"":""Out in the Open: Inside the Operating System Edward Snowden Used to Evade the NSA"",""resolved_url"":""http://www.wired.com/2014/04/tails/"",""excerpt"":""When NSA whistle-blower Edward Snowden first emailed Glenn Greenwald, he insisted on using email encryption software called PGP for all communications. But this month, we learned that Snowden used another technology to keep his communications out of the NSA’s prying eyes. It’s called Tails."",""word_count"":""1037""},{""item_id"":""593774995"",""favorite"":""0"",""status"":""1"",""time_added"":""1398471909"",""time_updated"":""1398552983"",""time_read"":""1398552982"",""time_favorited"":""0"",""sort_id"":933,""resolved_title"":""Write Better JavaScript with Promises"",""resolved_url"":""http://davidwalsh.name/write-javascript-promises"",""excerpt"":""You've probably heard the talk around the water cooler about how promises are the future. All of the cool kids are using them, but you don't see what makes them so special."",""word_count"":""902""},{""item_id"":""593782145"",""favorite"":""0"",""status"":""1"",""time_added"":""1397576319"",""time_updated"":""1397655751"",""time_read"":""1397655746"",""time_favorited"":""0"",""sort_id"":985,""resolved_title"":""Napster co-founder Sean Parker to lead civic startup"",""resolved_url"":""http://www.politico.com/story/2014/04/napster-co-founder-sean-parker-startup-brigade-105673.html"",""excerpt"":""Big tech-industry players want to help get out the vote and are pouring millions into a new startup to boost American civic engagement."",""word_count"":""388""},{""item_id"":""594028577"",""favorite"":""0"",""status"":""1"",""time_added"":""1397648162"",""time_updated"":""1398328398"",""time_read"":""1398294279"",""time_favorited"":""0"",""sort_id"":977,""resolved_title"":""How to Lie with Data Visualization"",""resolved_url"":""http://data.heapanalytics.com/how-to-lie-with-data-visualization/"",""excerpt"":""Data visualization is one of the most important tools we have to analyze data. But it’s just as easy to mislead as it is to educate using charts and graphs. In this article we’ll take a look at 3 of the most common ways in which visualizations can be misleading."",""word_count"":""667""},{""item_id"":""594030691"",""favorite"":""0"",""status"":""1"",""time_added"":""1397648162"",""time_updated"":""1398161394"",""time_read"":""1398161354"",""time_favorited"":""0"",""sort_id"":978,""resolved_title"":""Cinefi Streams Movie and TV-Torrents Straight to Your Browser"",""resolved_url"":""http://torrentfreak.com/cinefi-streams-movie-and-tv-torrents-straight-to-your-browser-140414/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""594057982"",""favorite"":""0"",""status"":""1"",""time_added"":""1398853774"",""time_updated"":""1399018519"",""time_read"":""1399018516"",""time_favorited"":""0"",""sort_id"":917,""resolved_title"":""React.js vs traditional MVC (Backbone, Angular)"",""resolved_url"":""http://www.code-experience.com/react-js-vs-traditional-mvc-backbone-ember-angular/"",""excerpt"":""I've been working with React for the last two weeks, and I think it's quite a revolutionary library. In this blog, I will tell you why.  If you don't know what React is, visit the doc and read up on it. The basic idea is this:"",""word_count"":""1008""},{""item_id"":""594768248"",""favorite"":""0"",""status"":""1"",""time_added"":""1397648159"",""time_updated"":""1397721577"",""time_read"":""1397721573"",""time_favorited"":""0"",""sort_id"":980,""resolved_title"":""How 'DevOps' is Killing the Developer"",""resolved_url"":""http://jeffknupp.com/blog/2014/04/15/how-devops-is-killing-the-developer/"",""excerpt"":""There are two recent trends I really hate: DevOps and the notion of the \""full-stack\"" developer. The DevOps movement is so popular that I may as well say I hate the x86 architecture or monolithic kernels. But it's true: I can't stand it."",""word_count"":""1286""},{""item_id"":""595655839"",""favorite"":""0"",""status"":""1"",""time_added"":""1398548295"",""time_updated"":""1398760960"",""time_read"":""1398760959"",""time_favorited"":""0"",""sort_id"":927,""resolved_title"":""Street View and reCAPTCHA technology just got smarter"",""resolved_url"":""http://googleonlinesecurity.blogspot.com/2014/04/street-view-and-recaptcha-technology.html"",""excerpt"":""Have you ever wondered how Google Maps knows the exact location of your neighborhood coffee shop? Or of the hotel you’re staying at next month? Translating a street address to an exact location on a map is harder than it seems."",""word_count"":""419""},{""item_id"":""595787892"",""favorite"":""0"",""status"":""1"",""time_added"":""1398548294"",""time_updated"":""1398551183"",""time_read"":""1398551183"",""time_favorited"":""0"",""sort_id"":928,""resolved_title"":""Spotify Starts Shutting Down Its Massive P2P Network"",""resolved_url"":""http://torrentfreak.com/spotify-starts-shutting-down-its-massive-p2p-network-140416/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""596286603"",""favorite"":""0"",""status"":""1"",""time_added"":""1397868559"",""time_updated"":""1399496886"",""time_read"":""1399455085"",""time_favorited"":""0"",""sort_id"":974,""resolved_title"":""Artists 'have structurally different brains'"",""resolved_url"":""http://www.bbc.co.uk/news/science-environment-26925271#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa"",""excerpt"":""Artists have structurally different brains compared with non-artists, a study has found.  Participants' brain scans revealed that artists had increased neural matter in areas relating to fine motor movements and visual imagery."",""word_count"":""629""},{""item_id"":""596594795"",""favorite"":""1"",""status"":""1"",""time_added"":""1398488323"",""time_updated"":""1398552442"",""time_read"":""1398552442"",""time_favorited"":""1398552441"",""sort_id"":932,""resolved_title"":""The Citicorp tower design flaw that could have wiped out the skyscraper : 99% Invisible by Roman Mars."",""resolved_url"":""http://www.slate.com/blogs/the_eye/2014/04/17/the_citicorp_tower_design_flaw_that_could_have_wiped_out_the_skyscraper.html"",""excerpt"":""Roman Mars’ podcast 99% Invisible covers design questions large and small, from his fascination with rebar to the history of slot machines to the great Los Angeles Red Car conspiracy."",""word_count"":""897""},{""item_id"":""596842725"",""favorite"":""0"",""status"":""1"",""time_added"":""1398471906"",""time_updated"":""1398600692"",""time_read"":""1398553228"",""time_favorited"":""0"",""sort_id"":937,""resolved_title"":""H G Wells: “It seems to me that I am more to the Left than you, Mr Stalin”"",""resolved_url"":""http://www.newstatesman.com/politics/2014/04/h-g-wells-it-seems-me-i-am-more-left-you-mr-stalin"",""excerpt"":""In 1934, H G Wells arrived in Moscow to meet Soviet writers interested in joining the international PEN Club, of which he was then president. While there, Stalin granted him an interview."",""word_count"":""6270""},{""item_id"":""597352632"",""favorite"":""0"",""status"":""1"",""time_added"":""1397868598"",""time_updated"":""1398328398"",""time_read"":""1398294306"",""time_favorited"":""0"",""sort_id"":973,""resolved_title"":""The Lies Edward Snowden Tells"",""resolved_url"":""http://www.theatlantic.com/international/archive/2014/04/the-lies-edward-snowden-tells/360893/"",""excerpt"":""The former NSA contractor claims he challenged Vladimir Putin on government surveillance. That couldn't be further from the truth. Edward Snowden disappointed even his admirers on Thursday by participating in the annual propaganda ritual of Russia’s phony “ask Putin” call-in show."",""word_count"":""733""},{""item_id"":""597970503"",""favorite"":""0"",""status"":""1"",""time_added"":""1398471906"",""time_updated"":""1399316164"",""time_read"":""1399114242"",""time_favorited"":""0"",""sort_id"":936,""resolved_title"":""When the internet dies, meet the meshnet that survives"",""resolved_url"":""http://www.newscientist.com/article/mg22229653.700-when-the-internet-dies-meet-the-meshnet-that-survives.html#.U1Q8NdQazCQ"",""excerpt"":""IN THE heart of one of the most connected cities in the world, the internet has gone down. Amid the blackout, a group of New Yorkers scrambles to set up a local network and get vital information as the situation unfolds."",""word_count"":""735""},{""item_id"":""598147470"",""favorite"":""0"",""status"":""1"",""time_added"":""1398471908"",""time_updated"":""1398765094"",""time_read"":""1398765091"",""time_favorited"":""0"",""sort_id"":934,""resolved_title"":""Is Your VPN / Proxy Working? Check Your Torrent IP-Address"",""resolved_url"":""http://torrentfreak.com/vpn-proxy-working-check-torrent-ip-address-140419/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""598876920"",""favorite"":""0"",""status"":""1"",""time_added"":""1398468825"",""time_updated"":""1399496885"",""time_read"":""1399452623"",""time_favorited"":""0"",""sort_id"":939,""resolved_title"":""Debug your programs like they're closed source!"",""resolved_url"":""http://jvns.ca/blog/2014/04/20/debug-your-programs-like-theyre-closed-source/"",""excerpt"":""I’ve started sometimes debugging a new way. With this method, I don’t look at the source code, don’t edit the source code, and don’t use a debugger. I don’t even need to have the program’s source available to me!"",""word_count"":""1463""},{""item_id"":""599176527"",""favorite"":""0"",""status"":""1"",""time_added"":""1398468825"",""time_updated"":""1398765167"",""time_read"":""1398765166"",""time_favorited"":""0"",""sort_id"":938,""resolved_title"":""Nokia phones to be renamed Microsoft Mobile"",""resolved_url"":""http://zeenews.india.com/business/news/technology/nokia-phones-to-be-renamed-microsoft-mobile_98151.html"",""excerpt"":""Zee Media Bureau/Rd. Alexander New Delhi: When the USD 7.2 billion Nokia-Microsoft deal officially comes to a close by end of April, the once leading mobile phone of the world, Nokia mobile, will be renamed Microsoft Mobile."",""word_count"":""269""},{""item_id"":""599379365"",""favorite"":""0"",""status"":""1"",""time_added"":""1398698240"",""time_updated"":""1399496885"",""time_read"":""1399448306"",""time_favorited"":""0"",""sort_id"":922,""resolved_title"":""You, Yes You, Can Analyze Data, Too"",""resolved_url"":""http://www.psmag.com/navigation/business-economics/yes-can-analyze-data-79419/"",""excerpt"":""What does it take to break into the growing field of data analysis? To start, you’ll need the Internet, a computer, and some basic math skills.  Big data is everywhere. You probably hear people talking about data on the subway, or the radio, or by the water cooler."",""word_count"":""1246""},{""item_id"":""599381202"",""favorite"":""0"",""status"":""1"",""time_added"":""1398468821"",""time_updated"":""1398600692"",""time_read"":""1398553705"",""time_favorited"":""0"",""sort_id"":944,""resolved_title"":""EU E-ID"",""resolved_url"":""http://electronic-id.eu/"",""excerpt"":""EU E-ID A proposition for a standard digital signature in every EU citizen's identity card, allowing for easy, fast, secure and privacy-preserving electronic authentication  Tweet   Support the idea by sharing it              How to implement it? Using highly secure public-key infrastructure"",""word_count"":""115""},{""item_id"":""599529454"",""favorite"":""0"",""status"":""1"",""time_added"":""1398468823"",""time_updated"":""1399534210"",""time_read"":""1399500175"",""time_favorited"":""0"",""sort_id"":941,""resolved_title"":""Functional Programming in Javascript === Garbage"",""resolved_url"":""http://awardwinningfjords.com/2014/04/21/functional-programming-in-javascript-equals-garbage.html"",""excerpt"":""Functional Programming is great. It allows for simpler programs which are easy to test and reason about. Unfortunately, not all languages are created equal. I've been writing a bit of Clojure and really enjoying myself."",""word_count"":""1124""},{""item_id"":""600597424"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433114"",""time_updated"":""1398848282"",""time_read"":""1398782367"",""time_favorited"":""0"",""sort_id"":951,""resolved_title"":""The Face Recognition Algorithm That Finally Outperforms Humans"",""resolved_url"":""https://medium.com/the-physics-arxiv-blog/2c567adbf7fc"",""excerpt"":""Everybody has had the experience of not recognising someone they know—changes in pose, illumination and expression all make the task tricky. So it’s not surprising that computer vision systems have similar problems."",""word_count"":""794""},{""item_id"":""600615081"",""favorite"":""0"",""status"":""1"",""time_added"":""1398548297"",""time_updated"":""1398760829"",""time_read"":""1398760828"",""time_favorited"":""0"",""sort_id"":925,""resolved_title"":""Camera 3.0: did the future of cameras just change direction? Here's the new Lytro Illum"",""resolved_url"":""http://www.redsharknews.com/technology/item/1632-camera-3-0-did-the-future-of-cameras-just-change-direction-here-s-the-new-lytro-illum"",""excerpt"":""Lytro's new Light Field camera is out and it's light years ahead of where we expected to be. Great industrial design, and a very much more powerful lens/sensor combination. You might be able to do serious work with this. And it might just have legitimised a completely new type of photography"",""word_count"":""1709""},{""item_id"":""600991221"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433119"",""time_updated"":""1398848281"",""time_read"":""1398781528"",""time_favorited"":""0"",""sort_id"":947,""resolved_title"":""Go back in time with Street View"",""resolved_url"":""http://googleblog.blogspot.com/2014/04/go-back-in-time-with-street-view.html"",""excerpt"":""If you’ve ever dreamt of being a time traveler like Doc Brown, now’s your chance. Starting today, you can travel to the past to see how a place has changed over the years by exploring Street View imagery in Google Maps for desktop."",""word_count"":""209""},{""item_id"":""601080463"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433115"",""time_updated"":""1398848282"",""time_read"":""1398785191"",""time_favorited"":""0"",""sort_id"":949,""resolved_title"":""Viewing Pirated Material Is Not Direct Copyright Infringement, Judge Tells Tarantino"",""resolved_url"":""http://torrentfreak.com/viewing-pirated-material-is-not-direct-copyright-infringement-judge-tells-tarantino-140423/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""601104110"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433116"",""time_updated"":""1398848281"",""time_read"":""1398781665"",""time_favorited"":""0"",""sort_id"":948,""resolved_title"":""Start-up investor bets on biotech"",""resolved_url"":""http://www.nature.com/news/start-up-investor-bets-on-biotech-1.15096"",""excerpt"":""Y Combinator, a company that backs technology start-ups, is famous for its early support of successful online services such as Airbnb and Dropbox."",""word_count"":""1392""},{""item_id"":""601143287"",""favorite"":""0"",""status"":""1"",""time_added"":""1398425272"",""time_updated"":""1399496886"",""time_read"":""1399454605"",""time_favorited"":""0"",""sort_id"":961,""resolved_title"":""Can anything topple the Macbook Pro as the go-to workstation laptop for professionals in the media business? We look at Dell's M3800"",""resolved_url"":""http://www.redsharknews.com/technology/item/1633-can-anything-topple-the-macbook-pro-as-the-go-to-workstation-laptop-for-professionals-in-the-media-business-we-look-at-dell-s-m3800"",""excerpt"":""The Dell M3800 is a groundbreaking workstation-class laptop with a near-4K screen. We've been using it."",""word_count"":""3244""},{""item_id"":""601298443"",""favorite"":""0"",""status"":""1"",""time_added"":""1398338164"",""time_updated"":""1403476796"",""time_read"":""1403468108"",""time_favorited"":""0"",""sort_id"":969,""resolved_title"":""F.C.C., in a Shift, Backs Fast Lanes for Web Traffic"",""resolved_url"":""http://www.nytimes.com/2014/04/24/technology/fcc-new-net-neutrality-rules.html"",""excerpt"":""WASHINGTON —  The principle that all Internet content should be treated equally as it flows through cables and pipes to consumers looks all but dead."",""word_count"":""992""},{""item_id"":""601442938"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433114"",""time_updated"":""1399496885"",""time_read"":""1399452150"",""time_favorited"":""0"",""sort_id"":950,""resolved_title"":""Testing for Developers: why you should be doing Unit, Integration and QA Testing"",""resolved_url"":""https://blog.rainforestqa.com/2014-04-23-why-unit-integration-and-qa-testing/"",""excerpt"":""At Rainforest, we spend a considerable amount of time thinking about what the ultimate testing workflow is. Let me start by saying that the current state of affairs is much better than it ever was. Developers, for the most part, now understand that automated testing is important."",""word_count"":""1144""},{""item_id"":""601672889"",""favorite"":""0"",""status"":""1"",""time_added"":""1398344427"",""time_updated"":""1399823309"",""time_read"":""1399792252"",""time_favorited"":""0"",""sort_id"":968,""resolved_title"":""9 Tricks Elon Musk, Jeff Bezos, And Other Top Execs Use To Run Meetings"",""resolved_url"":""http://www.businessinsider.com/how-elon-musk-jeff-bezos-run-meetings-2014-4?op=1&utm_content=buffer1c56f&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer"",""excerpt"":""Since we've already looked at the most egregious meeting mistakes, we decided to explore how the most successful executives run effective meetings."",""word_count"":""1093""},{""item_id"":""601728119"",""favorite"":""0"",""status"":""1"",""time_added"":""1398808631"",""time_updated"":""1398882763"",""time_read"":""1398882755"",""time_favorited"":""0"",""sort_id"":918,""resolved_title"":""Inside the ‘DarkMarket’ Prototype, a Silk Road the FBI Can Never Seize"",""resolved_url"":""http://www.wired.com/2014/04/darkmarket/"",""excerpt"":""The Silk Road, for all its clever uses of security protections like Tor and Bitcoin to protect the site’s lucrative drug trade, still offered its enemies a single point of failure."",""word_count"":""1329""},{""item_id"":""601728918"",""favorite"":""0"",""status"":""1"",""time_added"":""1398336013"",""time_updated"":""1399496886"",""time_read"":""1399454797"",""time_favorited"":""0"",""sort_id"":970,""resolved_title"":""Anti-Corruption Group Finds Fault With European Union"",""resolved_url"":""http://www.nytimes.com/2014/04/24/business/international/anti-corruption-group-finds-fault-with-european-union.html"",""excerpt"":""BRUSSELS — A prominent anti-corruption group on Thursday plans to report serious shortcomings in the management and governance of the European Union’s core institutions, as public confidence in Brussels remains at a low before elections next month."",""word_count"":""1179""},{""item_id"":""602026824"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433112"",""time_updated"":""1398848282"",""time_read"":""1398782102"",""time_favorited"":""0"",""sort_id"":953,""resolved_title"":""Google+ Head Vic Gundotra Leaving Company"",""resolved_url"":""http://recode.net/2014/04/24/exclusive-google-head-vic-gundotra-leaving-company/"",""excerpt"":""Vic Gundotra, who aggressively led Google into the social world with the creation of Google+, is leaving the company.  Page praised Gundotra, whose departure is immediate."",""word_count"":""889""},{""item_id"":""602427466"",""favorite"":""0"",""status"":""1"",""time_added"":""1398423350"",""time_updated"":""1399496887"",""time_read"":""1399455502"",""time_favorited"":""0"",""sort_id"":963,""resolved_title"":""The RedShark interview with Grant Petty, CEO of Blackmagic"",""resolved_url"":""http://www.redsharknews.com/business/item/1640-the-redshark-interview-with-grant-petty,-ceo-of-blackmagic"",""excerpt"":""He's the CEO of the most talked-about company in the industry. His NAB booth is the size of an airport terminal. He doesn't give many interviews. How does the mind behind Blackmagic Design work? Dave Shapton finds out  OK, here it is at last, a little later than we'd hoped for."",""word_count"":""238""},{""item_id"":""602429866"",""favorite"":""0"",""status"":""1"",""time_added"":""1398430522"",""time_updated"":""1399496887"",""time_read"":""1399455684"",""time_favorited"":""0"",""sort_id"":960,""resolved_title"":""The Way We Build The Web is Changing"",""resolved_url"":""http://inside.envato.com/the-way-we-build-the-internet-is-changing/"",""excerpt"":""By Natasha Postolovski, writer, maker, traveller.  Front-end development exists in a constant state of evolution."",""word_count"":""1054""},{""item_id"":""602440327"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433111"",""time_updated"":""1399496885"",""time_read"":""1399453925"",""time_favorited"":""0"",""sort_id"":955,""resolved_title"":""A totally simple way Google could have avoided f***ing up Google+ at Scott Porad"",""resolved_url"":""http://www.scottporad.com/2014/04/24/a-totally-simply-way-google-could-have-avoided-fing-up-google/"",""excerpt"":""I’ve been meaning to write this blog post for a year, and I might as well get it out there now that I’ve just read that Google is backing away from Google+.  It’s not surprising that Google is getting away from Google+."",""word_count"":""371""},{""item_id"":""602595224"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433109"",""time_updated"":""1398554282"",""time_read"":""1398554281"",""time_favorited"":""0"",""sort_id"":957,""resolved_title"":""2014-04-25What’s left of NoSQL?"",""resolved_url"":""http://use-the-index-luke.com/blog/2013-04/whats-left-of-nosql"",""excerpt"":""This is my own and very loose translation of an article I wrote for the Austrian newspaper derStandard.at in October 2013. As this article was very well received and the SQL vs. NoSQL discussion is currently hot again, I though it might be a good time for a translation."",""word_count"":""1532""},{""item_id"":""602612367"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433108"",""time_updated"":""1398848282"",""time_read"":""1398785087"",""time_favorited"":""0"",""sort_id"":958,""resolved_title"":""4 things huge sites are allowed to do but you’re not …because you’re a small player"",""resolved_url"":""http://nenadseo.com/big-dogs/"",""excerpt"":""Hello and welcome. Long time no read. We have been busy – and even though we have several good case studies for you, we didn’t have time to publish them, until now. So I’ve decided to write a report where we will cover several topics at once."",""word_count"":""2799""},{""item_id"":""602720277"",""favorite"":""0"",""status"":""1"",""time_added"":""1398433110"",""time_updated"":""1399496887"",""time_read"":""1399455894"",""time_favorited"":""0"",""sort_id"":956,""resolved_title"":""Danes the happiest EU workers, survey finds"",""resolved_url"":""http://euobserver.com/news/123932"",""excerpt"":""BRUSSELS - Denmark has the EU's happiest workforce, according to research published Thursday (25 April) by Eurobarometer.  Ninety-four percent of Danish workers are satisfied with their own conditions at work, the survey found, closely followed by Austrians and Belgians."",""word_count"":""354""},{""item_id"":""602743975"",""favorite"":""0"",""status"":""1"",""time_added"":""1398506075"",""time_updated"":""1399823308"",""time_read"":""1399765728"",""time_favorited"":""0"",""sort_id"":931,""resolved_title"":""The Downfall of Rome: Can a New Mayor Stop the City's Decline?"",""resolved_url"":""http://www.spiegel.de/international/europe/new-mayor-in-rome-seeks-to-prevent-further-decline-in-city-a-965806.html"",""excerpt"":""Pilgrims from around the world are expected in Rome this weekend for the canonization of two former popes. They will find an Italian capital that is increasingly squalid and close to bankruptcy. The city's new mayor is hoping he can turn it around."",""word_count"":""5030""},{""item_id"":""602970045"",""favorite"":""0"",""status"":""1"",""time_added"":""1398546693"",""time_updated"":""1398552341"",""time_read"":""1398552341"",""time_favorited"":""0"",""sort_id"":929,""resolved_title"":""This hilarious graph of Netflix speeds shows the importance of net neutrality"",""resolved_url"":""http://knowmore.washingtonpost.com/2014/04/25/this-hilarious-graph-of-netflix-speeds-shows-the-importance-of-net-neutrality/"",""excerpt"":""A graph that shows when it’s O.K. to date someone younger than you"",""word_count"":""0""},{""item_id"":""603636699"",""favorite"":""0"",""status"":""1"",""time_added"":""1398546691"",""time_updated"":""1398551315"",""time_read"":""1398551315"",""time_favorited"":""0"",""sort_id"":930,""resolved_title"":""Netflix Considers P2P-Powered Streaming Technology"",""resolved_url"":""http://torrentfreak.com/netflix-considers-p2p-powered-streaming-technology-140426/"",""excerpt"":""Video streaming giant Netflix is considering a move to peer-to-peer assisted streaming. The company has put up a job posting for a Senior Software Engineer tasked with integrating P2P technology into its streaming services. Could a BitTorrent-powered Netflix be coming soon?"",""word_count"":""433""},{""item_id"":""603658665"",""favorite"":""0"",""status"":""1"",""time_added"":""1398600707"",""time_updated"":""1398759622"",""time_read"":""1398759614"",""time_favorited"":""0"",""sort_id"":923,""resolved_title"":""Microsoft Just Solved One Of The Biggest Mysteries In Video Game History"",""resolved_url"":""http://www.businessinsider.com/microsoft-digs-up-et-atari-cartridges-2014-4"",""excerpt"":""Microsoft dug up a bunch of \""E.T.\"" Atari video game cartridges in the New Mexico desert Saturday afternoon that had been buried there for over 30 years."",""word_count"":""222""},{""item_id"":""604969048"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500724"",""time_updated"":""1410783345"",""time_read"":""1410783052"",""time_favorited"":""0"",""sort_id"":581,""resolved_title"":""If Putin ever had to flee Russia, what country might he ask for asylum?"",""resolved_url"":""http://ricks.foreignpolicy.com/posts/2014/04/28/if_putin_ever_had_to_flee_russia_what_country_might_he_ask_for_asylum"",""excerpt"":""Best Defense is in summer re-runs. This item originally ran on April 28, 2014. \r   \r And which country would accept him, especially if he\r wanted to bring along his riches?"",""word_count"":""76""},{""item_id"":""605417662"",""favorite"":""0"",""status"":""1"",""time_added"":""1398897002"",""time_updated"":""1399358886"",""time_read"":""1399358882"",""time_favorited"":""0"",""sort_id"":914,""resolved_title"":""How Studying or Working Abroad Makes You Smarter"",""resolved_url"":""http://time.com/79937/how-studying-or-working-abroad-makes-you-smarter/"",""excerpt"":""Research shows that experience in other countries makes us more flexible, creative, and complex thinkers. How does studying or working abroad change you? You return with a photo album full of memories and a suitcase full of souvenirs, sure."",""word_count"":""591""},{""item_id"":""605766298"",""favorite"":""0"",""status"":""1"",""time_added"":""1398799730"",""time_updated"":""1398852698"",""time_read"":""1398852695"",""time_favorited"":""0"",""sort_id"":921,""resolved_title"":""On the future of Web publishing in Unity"",""resolved_url"":""http://blogs.unity3d.com/2014/04/29/on-the-future-of-web-publishing-in-unity/"",""excerpt"":""A few weeks ago at GDC, we announced support for WebGL publishing for Unity 5. Now I’d like to share some more information on what this is all about, and what you can expect from it."",""word_count"":""860""},{""item_id"":""605870253"",""favorite"":""0"",""status"":""1"",""time_added"":""1398853779"",""time_updated"":""1402228328"",""time_read"":""1402136032"",""time_favorited"":""0"",""sort_id"":916,""resolved_title"":""Why you might not need MVC with React.js"",""resolved_url"":""http://www.code-experience.com/why-you-might-not-need-mvc-with-reactjs/"",""excerpt"":""I've compared React to tradional MVC in this blogpost.  I covered one important point: re-rendering everything is nice. But I also claimed all kinds of other things (like not needing MVC patterns), but didn't actually reason about them. This caused me to write this follow up."",""word_count"":""1836""},{""item_id"":""606526568"",""favorite"":""0"",""status"":""1"",""time_added"":""1403001469"",""time_updated"":""1403467507"",""time_read"":""1403465759"",""time_favorited"":""0"",""sort_id"":797,""resolved_title"":""Why Canada’s banks have weaker passwords than Twitter or Google Add to ..."",""resolved_url"":""http://www.theglobeandmail.com/technology/digital-culture/why-canadas-banks-have-weaker-passwords-than-twitter-or-google/article18325257/"",""excerpt"":""It’s not without worry that I log into my online account with the Bank of Montreal. My password is a mere six characters long, no symbols or special characters allowed. It’s not exactly the sort of password I’ve been conditioned to think is secure."",""word_count"":""1127""},{""item_id"":""607905074"",""favorite"":""0"",""status"":""1"",""time_added"":""1399334941"",""time_updated"":""1399496884"",""time_read"":""1399447000"",""time_favorited"":""0"",""sort_id"":906,""resolved_title"":""Laser Projectors. Here's how they work and why they're good - especially for 3D"",""resolved_url"":""http://www.redsharknews.com/distribution/item/1647-laser-projectors-here-s-how-they-work-and-why-they-re-good-especially-for-3d"",""excerpt"":""Lasers seem ideal for projection: pinpoint sharp and with the purest, most controllable of colours. And yet it's only now that we're seeing them in reality. And they don't work quite the way you might think, either"",""word_count"":""1617""},{""item_id"":""610289975"",""favorite"":""0"",""status"":""1"",""time_added"":""1399330237"",""time_updated"":""1399496884"",""time_read"":""1399446489"",""time_favorited"":""0"",""sort_id"":910,""resolved_title"":""24: Live Another Day – Jack Bauer is as unrealistic as ever, and that's ... OK"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/may/05/24-live-another-day-jack-bauer-returns"",""excerpt"":""To which I reply, with a sigh: \""It's a TV show, stop your reality-check, and just enjoy the ride. Also, do I really look like someone who would kill? I drive a Prius.\"""",""word_count"":""1148""},{""item_id"":""610369663"",""favorite"":""0"",""status"":""1"",""time_added"":""1399334942"",""time_updated"":""1399359028"",""time_read"":""1399359012"",""time_favorited"":""0"",""sort_id"":905,""resolved_title"":""Sony tape smashes storage record"",""resolved_url"":""http://www.bbc.co.uk/news/technology-27282732"",""excerpt"":""Sony has developed a new storage tape that is able to hold up to 185 terabytes (TB) of data per cartridge.  Created with the help of IBM, Sony's technology allows for tapes that can store the equivalent of 3,700 Blu-ray discs."",""word_count"":""354""},{""item_id"":""611375968"",""favorite"":""0"",""status"":""1"",""time_added"":""1399594184"",""time_updated"":""1402954773"",""time_read"":""1402954773"",""time_favorited"":""0"",""sort_id"":900,""resolved_title"":""And for my next trick, a robot"",""resolved_url"":""http://www.ted.com/talks/marco_tempest_maybe_the_best_robot_demo_ever"",""excerpt"":""Marco Tempest uses charming stagecraft to demo EDI, the multi-purpose robot designed to work very closely with humans. Less a magic trick than an intricately choreographed performance, Tempest shows off the robot’s sensing technology, safety features and strength, and makes the case for a closer human-robot relationship. (Okay, there’s a little magic, too.)"",""word_count"":""0"",""tags"":{""video"":{""item_id"":""611375968"",""tag"":""video""}}},{""item_id"":""611517675"",""favorite"":""0"",""status"":""1"",""time_added"":""1399817441"",""time_updated"":""1399976576"",""time_read"":""1399936084"",""time_favorited"":""0"",""sort_id"":895,""resolved_title"":""The Big Idea Behind Big Data"",""resolved_url"":""http://blog.mendeley.com/news/the-big-idea-behind-big-data/"",""excerpt"":""Next Tuesday the 13th May, Mendeley and Elsevier will be joining a day of lively debating around Big Data and education."",""word_count"":""419""},{""item_id"":""612261017"",""favorite"":""0"",""status"":""1"",""time_added"":""1399813887"",""time_updated"":""1402954774"",""time_read"":""1402954774"",""time_favorited"":""0"",""sort_id"":896,""resolved_title"":""The military case for sharing knowledge"",""resolved_url"":""http://www.ted.com/talks/stanley_mcchrystal_the_military_case_for_sharing_knowledge"",""excerpt"":""When General Stanley McChrystal started fighting al Qaeda in 2003, information and secrets were the lifeblood of his operations. But as the unconventional battle waged on, he began to think that the culture of keeping important information classified was misguided and actually counterproductive. In a short but powerful talk McChrystal makes the case for actively sharing knowledge."",""word_count"":""0"",""tags"":{""video"":{""item_id"":""612261017"",""tag"":""video""}}},{""item_id"":""612602987"",""favorite"":""0"",""status"":""1"",""time_added"":""1399998146"",""time_updated"":""1400072073"",""time_read"":""1400071943"",""time_favorited"":""0"",""sort_id"":879,""resolved_title"":""The Scraping Problem and Ethics"",""resolved_url"":""http://blog.osvdb.org/2014/05/07/the-scraping-problem-and-ethics/"",""excerpt"":""[2014-05-09 Update: We'd like to thank both McAfee and S21sec for promptly reaching out to work with us and to inform us that they are both investigating the incident, and taking steps to ensure that future access and data use complies with our license."",""word_count"":""1205""},{""item_id"":""613200497"",""favorite"":""0"",""status"":""1"",""time_added"":""1399820511"",""time_updated"":""1399976575"",""time_read"":""1399935947"",""time_favorited"":""0"",""sort_id"":889,""resolved_title"":""How fast is PDF.js?"",""resolved_url"":""https://hacks.mozilla.org/2014/05/how-fast-is-pdf-js/"",""excerpt"":""Hi, my name is Thorben and I work at Opera Software in Oslo, not at Mozilla. So, how did I end up writing for Mozilla Hacks? Maybe you know that there is no default PDF viewer in the Opera Browser, something we would like to change."",""word_count"":""959""},{""item_id"":""613279581"",""favorite"":""0"",""status"":""1"",""time_added"":""1399820510"",""time_updated"":""1399976576"",""time_read"":""1399936301"",""time_favorited"":""0"",""sort_id"":890,""resolved_title"":""All the Western companies you’d have to combine to get something like Alibaba – Quartz"",""resolved_url"":""http://qz.com/206283/all-the-western-companies-youd-have-to-combine-to-get-something-like-alibaba/"",""excerpt"":""Alibaba, which filed for its IPO on May 6, isn’t just the “Amazon of China”—it’s also the Dropbox, PayPal, Uber, Hulu, ING Direct, and more. Though Google has its fingers in a similarly high volume of pies, its enterprises, unlike Alibaba’s, are exclusively digital."",""word_count"":""1312""},{""item_id"":""613929402"",""favorite"":""0"",""status"":""1"",""time_added"":""1399817442"",""time_updated"":""1399976603"",""time_read"":""1399976597"",""time_favorited"":""0"",""sort_id"":894,""resolved_title"":""David Lynch on Where Ideas Come From and the Fragmentary Nature of Creativity"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/05/09/david-lynch-interview-ideas-creativity/"",""excerpt"":""How to throw bait in the river of ideation.  As soon as we ask what creativity is, we invariably ponder the essential question of where good ideas come from and how we can coax them into manifesting."",""word_count"":""357""},{""item_id"":""613997623"",""favorite"":""0"",""status"":""1"",""time_added"":""1399817443"",""time_updated"":""1399976576"",""time_read"":""1399936043"",""time_favorited"":""0"",""sort_id"":893,""resolved_title"":""New Green party shakes up Croatia's political landscape"",""resolved_url"":""http://euobserver.com/eu-elections/124009"",""excerpt"":""Zagreb - With just weeks to go until the EU elections, opinion polls for the first time suggest that more Croatians will vote in favour of the centre-right opposition than the government centre-left coalition.  The most recent polls, published in April, indicate that 25."",""word_count"":""911""},{""item_id"":""614196101"",""favorite"":""0"",""status"":""1"",""time_added"":""1399817444"",""time_updated"":""1399976576"",""time_read"":""1399935963"",""time_favorited"":""0"",""sort_id"":892,""resolved_title"":""UK is EU's 'special' case, Barroso says"",""resolved_url"":""http://euobserver.com/news/124063"",""excerpt"":""BRUSSELS - The UK is Europe's \""special\"" case, and EU leaders should find ways to accommodate its \""specificity\"", Jose Manuel Barroso has said."",""word_count"":""378""},{""item_id"":""615364043"",""favorite"":""0"",""status"":""1"",""time_added"":""1399820507"",""time_updated"":""1399976576"",""time_read"":""1399936120"",""time_favorited"":""0"",""sort_id"":891,""resolved_title"":""Convicted fraudster Berlusconi begins community service"",""resolved_url"":""http://euobserver.com/tickers/124068"",""excerpt"":""Italy's former PM Silvio Berlusconi started his community service on Thursday after having his prison sentence commuted to four-hours work a week at an elderly home, reports the BBC. Italy's justice system spared Berlusconi prison time because of his advanced age."",""word_count"":""50""},{""item_id"":""615904064"",""favorite"":""0"",""status"":""1"",""time_added"":""1399998142"",""time_updated"":""1400831990"",""time_read"":""1400831988"",""time_favorited"":""0"",""sort_id"":882,""resolved_title"":""Kurt Vonnegut on Reading, Boredom, Belonging, and Hate"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/05/12/kurt-vonnegut-if-this-isnt-nice-fredonia/"",""excerpt"":""“Hate, in the long run, is about as nourishing as cyanide."",""word_count"":""1512""},{""item_id"":""616185161"",""favorite"":""0"",""status"":""1"",""time_added"":""1399978264"",""time_updated"":""1402954776"",""time_read"":""1402954776"",""time_favorited"":""0"",""sort_id"":885,""resolved_title"":""How to rob a bank (from the inside, that is)"",""resolved_url"":""http://www.ted.com/talks/william_black_how_to_rob_a_bank_from_the_inside_that_is"",""excerpt"":""William Black is a former bank regulator who’s seen firsthand how banking systems can be used to commit fraud — and how “liar's loans” and other tricky tactics led to the 2008 US banking crisis that threatened the international economy. In this engaging talk, Black, now an academic, reveals the best way to rob a bank — from the inside."",""word_count"":""0"",""tags"":{""video"":{""item_id"":""616185161"",""tag"":""video""}}},{""item_id"":""616311985"",""favorite"":""0"",""status"":""1"",""time_added"":""1400520906"",""time_updated"":""1400659616"",""time_read"":""1400612697"",""time_favorited"":""0"",""sort_id"":856,""resolved_title"":""Extraordinary Functions ~ Learning to Write Well Structured JavaScript"",""resolved_url"":""http://infinitemonkeys.influitive.com/extraordinary-functions-learning-to-write-well-structured-javascript"",""excerpt"":""If you are a web developer looking to broaden your horizons regarding JavaScript, to take the leap from using it for simple DOM scripting, to writing complex, well structured programs, I offer some modest advice."",""word_count"":""644""},{""item_id"":""616730580"",""favorite"":""0"",""status"":""1"",""time_added"":""1400155071"",""time_updated"":""1400831501"",""time_read"":""1400831498"",""time_favorited"":""0"",""sort_id"":874,""resolved_title"":""Understanding the four layers of JavaScript OOP"",""resolved_url"":""http://www.2ality.com/2014/05/oop-layers.html"",""excerpt"":""JavaScript OOP is baffling: on one hand, there is a simple core, on the other hand, there are some really weird things going on."",""word_count"":""84""},{""item_id"":""617042694"",""favorite"":""0"",""status"":""1"",""time_added"":""1400010679"",""time_updated"":""1400746015"",""time_read"":""1400746007"",""time_favorited"":""0"",""sort_id"":878,""resolved_title"":""Lars von Trier is Writing a Horror Movie Set in Detroit"",""resolved_url"":""http://www.indiewire.com/article/lars-von-trier-is-writing-a-horror-movie-set-in-detroit"",""excerpt"":""How do you get Lars von Trier to write a horror movie for you? According to Kristian Levring, who will premiere his out of competition title 'The Salvation' at the Cannes Film Festival, the secret is to keep talking until von Trier gets sick of hearing about it."",""word_count"":""284""},{""item_id"":""617081314"",""favorite"":""0"",""status"":""1"",""time_added"":""1399996900"",""time_updated"":""1402954777"",""time_read"":""1402954777"",""time_favorited"":""0"",""sort_id"":883,""resolved_title"":""What ants teach us about the brain, cancer and the Internet"",""resolved_url"":""http://www.ted.com/talks/deborah_gordon_what_ants_teach_us_about_the_brain_cancer_and_the_internet"",""excerpt"":""Ecologist Deborah Gordon studies ants wherever she can find them -- in the desert, in the tropics, in her kitchen ... In this fascinating talk, she explains her obsession with insects most of us would happily swat away without a second thought. She argues that ant life provides a useful model for learning about many other topics, including disease, technology and the human brain."",""word_count"":""0"",""tags"":{""video"":{""item_id"":""617081314"",""tag"":""video""}}},{""item_id"":""618303571"",""favorite"":""0"",""status"":""1"",""time_added"":""1400155070"",""time_updated"":""1400659618"",""time_read"":""1400625686"",""time_favorited"":""0"",""sort_id"":875,""resolved_title"":""Usability challenges on privacy-preserving systems (Part 1)"",""resolved_url"":""https://blog.spideroak.com/20140514172420-usability-challenges-privacy-preserving-systems-part-1"",""excerpt"":""User experience or UX is always a challenge when developing any kind of system. You can choose to mimic some of the well-established systems, taking advantage of the fact that millions of users are used to it."",""word_count"":""1055""},{""item_id"":""618354585"",""favorite"":""0"",""status"":""1"",""time_added"":""1400162874"",""time_updated"":""1400520909"",""time_read"":""1400274323"",""time_favorited"":""0"",""sort_id"":868,""resolved_title"":""Don’t Force Google to ‘Forget’"",""resolved_url"":""http://www.nytimes.com/2014/05/15/opinion/dont-force-google-to-forget.html"",""excerpt"":""CAMBRIDGE, Mass. — THE European Court of Justice ruled on Tuesday that Europeans have a limited “right to be forgotten” by search engines like Google."",""word_count"":""807""},{""item_id"":""618578052"",""favorite"":""0"",""status"":""1"",""time_added"":""1400521662"",""time_updated"":""1400745730"",""time_read"":""1400745727"",""time_favorited"":""0"",""sort_id"":855,""resolved_title"":""What Do Animals See in a Mirror?"",""resolved_url"":""http://nautil.us/issue/13/symmetry/what-do-animals-see-in-a-mirror"",""excerpt"":""The idea for a tool to probe the basis of consciousness came to Gordon G. Gallup, Jr. while shaving. “It just occurred to me,” he says, “wouldn’t it be interesting to see if other creatures could recognize themselves in mirrors?”"",""word_count"":""1924""},{""item_id"":""618924880"",""favorite"":""0"",""status"":""1"",""time_added"":""1400330674"",""time_updated"":""1400659617"",""time_read"":""1400624697"",""time_favorited"":""0"",""sort_id"":865,""resolved_title"":""Evaluating Possible Uses of a Raspberry Pi in an Academic Library Environment"",""resolved_url"":""http://www.dlib.org/dlib/may14/cooper/05cooper.html"",""excerpt"":""Jason L. Cooper and Jon P. Knight Loughborough University {j.l.cooper, j.p.knight}@lboro.ac.uk  Loughborough University's Library Systems Team investigated two potential uses for Raspberry Pis."",""word_count"":""2774""},{""item_id"":""619173681"",""favorite"":""0"",""status"":""1"",""time_added"":""1400493945"",""time_updated"":""1400544566"",""time_read"":""1400544565"",""time_favorited"":""0"",""sort_id"":858,""resolved_title"":""The leaked New York Times innovation report is one of the key documents of this media age"",""resolved_url"":""http://www.niemanlab.org/2014/05/the-leaked-new-york-times-innovation-report-is-one-of-the-key-documents-of-this-media-age/"",""excerpt"":""The value of the homepage is decreasing. “Only a third of our readers ever visit it. And those who do visit are spending less time: page views and minutes spent per reader dropped by double-digit percentages last year."",""word_count"":""4301""},{""item_id"":""619250387"",""favorite"":""0"",""status"":""1"",""time_added"":""1400267816"",""time_updated"":""1400270956"",""time_read"":""1400270950"",""time_favorited"":""0"",""sort_id"":866,""resolved_title"":""No such thing as work-life balance"",""resolved_url"":""http://www.bbc.com/capital/story/20140515-work-life-balance-is-dead"",""excerpt"":""Think about your workweek. How many times have you traded off something important in your life for something important in your job?"",""word_count"":""833""},{""item_id"":""620423629"",""favorite"":""0"",""status"":""1"",""time_added"":""1400398635"",""time_updated"":""1400659616"",""time_read"":""1400613588"",""time_favorited"":""0"",""sort_id"":862,""resolved_title"":""This Is How The UK Piracy Warnings Will Work"",""resolved_url"":""http://torrentfreak.com/how-uk-piracy-warnings-work-140517/"",""excerpt"":""Last week news broke that UK ISPs are teaming up with copyright holders to notify Internet subscribers caught sharing pirated material. The plan has been widely covered in the media, but unfortunately fact and fiction are often intertwined."",""word_count"":""881""},{""item_id"":""620948062"",""favorite"":""0"",""status"":""1"",""time_added"":""1400446373"",""time_updated"":""1400544920"",""time_read"":""1400544917"",""time_favorited"":""0"",""sort_id"":859,""resolved_title"":""Better logging in Node.js"",""resolved_url"":""https://medium.com/@garychambers108/b3cc6fd0dafd"",""excerpt"":""Logging in Node.js via console."",""word_count"":""567""},{""item_id"":""621603878"",""favorite"":""0"",""status"":""1"",""time_added"":""1400520817"",""time_updated"":""1400544766"",""time_read"":""1400544762"",""time_favorited"":""0"",""sort_id"":857,""resolved_title"":""New pro-EU party appears on British right"",""resolved_url"":""http://euobserver.com/eu-elections/124139"",""excerpt"":""BRUSSELS - A new UK political party, the 4 Freedoms party, is hoping to win a seat in the European Parliament with a pro-EU stance.  Its name takes its inspiration from the EU's freedoms of movement for people, goods, services and capital."",""word_count"":""519""},{""item_id"":""622557167"",""favorite"":""0"",""status"":""1"",""time_added"":""1400583719"",""time_updated"":""1400660220"",""time_read"":""1400660209"",""time_favorited"":""0"",""sort_id"":853,""resolved_title"":""Erasmus – little more than an EU-subsidised party?"",""resolved_url"":""http://euobserver.com/opinion/124190"",""excerpt"":""BRUSSELS - With the European elections fast approaching it is time to consider the policy changes we want from the next five years.  Although the new Erasmus+ is barely starting life, the elections mean that it is time to look into the next negotiations about Erasmus, starting in 2017."",""word_count"":""831""},{""item_id"":""624387852"",""favorite"":""0"",""status"":""1"",""time_added"":""1411401938"",""time_updated"":""1412159694"",""time_read"":""1412155471"",""time_favorited"":""0"",""sort_id"":396,""resolved_title"":""How to Edit PDF Files for Free on (Almost) Any Platform"",""resolved_url"":""http://gadgets.ndtv.com/apps/features/how-to-edit-pdf-files-for-free-on-almost-any-platform-528080"",""excerpt"":""Ever received a pdf file as an attachment, and wondered how to append your signature without printing it out and scanning the final copy? Or how to fix that one typo before sending it back? Of course you have."",""word_count"":""1389""},{""item_id"":""624394958"",""favorite"":""0"",""status"":""1"",""time_added"":""1401968082"",""time_updated"":""1402307477"",""time_read"":""1402307258"",""time_favorited"":""0"",""sort_id"":818,""resolved_title"":""Meet the People Behind the Wayback Machine, One of Our Favorite Things About the Internet"",""resolved_url"":""http://www.motherjones.com/media/2014/05/internet-archive-wayback-machine-brewster-kahle"",""excerpt"":""Brewster Kahle is quick to point out that we are not standing inside a former Scientology church."",""word_count"":""1283""},{""item_id"":""624967027"",""favorite"":""0"",""status"":""1"",""time_added"":""1401010040"",""time_updated"":""1402228323"",""time_read"":""1402093568"",""time_favorited"":""0"",""sort_id"":851,""resolved_title"":""The Strange Elite Politics Behind Thailand’s Military Coup"",""resolved_url"":""http://blog.foreignpolicy.com/posts/2014/05/22/the_strange_elite_politics_behind_thailand_s_military_coup"",""excerpt"":""Thailand's modern era has now seen so many coups that scholars have lost count. On Thursday, the Thai military once more overthrew the government, marking the 12th coup since the end of the absolute monarchy in 1932."",""word_count"":""1144""},{""item_id"":""625697782"",""favorite"":""0"",""status"":""1"",""time_added"":""1401962730"",""time_updated"":""1402471322"",""time_read"":""1402014841"",""time_favorited"":""0"",""sort_id"":821,""resolved_title"":""London is Ukip's worst nightmare"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/may/23/london-ukip-nightmare-labout-tories-local-elections-farage"",""excerpt"":""The past is a foreign country, we've long known that. Scotland is another country, that's the theme of the dominant political battle of the year. But the results of Thursday's elections make you wonder: is London another country too?  Even to ask the question prompts embarrassment."",""word_count"":""1124""},{""item_id"":""626369120"",""favorite"":""0"",""status"":""1"",""time_added"":""1403698321"",""time_updated"":""1404679521"",""time_read"":""1404679518"",""time_favorited"":""0"",""sort_id"":758,""resolved_title"":""'Unbeatable' Cinavia Anti-Piracy Technology Cracked by DVD-Ranger"",""resolved_url"":""http://torrentfreak.com/dvd-ranger-cracks-unbeatable-cinavia-anti-piracy-system-140524/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""628094186"",""favorite"":""1"",""status"":""1"",""time_added"":""1403724189"",""time_updated"":""1403952387"",""time_read"":""1403944383"",""time_favorited"":""1403944382"",""sort_id"":740,""resolved_title"":""How Soviet Kitchens Became Hotbeds Of Dissent And Culture"",""resolved_url"":""http://www.npr.org/blogs/thesalt/2014/05/27/314961287/how-soviet-kitchens-became-hotbeds-of-dissent-and-culture"",""excerpt"":""When Nikita Khrushchev emerged as the leader of the Soviet Union after Stalin's death in 1953, one of the first things he addressed was the housing shortage and the need for more food."",""word_count"":""1425""},{""item_id"":""629377490"",""favorite"":""0"",""status"":""1"",""time_added"":""1401399374"",""time_updated"":""1402954782"",""time_read"":""1402954782"",""time_favorited"":""0"",""sort_id"":847,""resolved_title"":""A glimpse of life on the road"",""resolved_url"":""http://www.ted.com/talks/kitra_cahana_stories_of_the_homeless_and_hidden"",""excerpt"":""As a young girl, photojournalist and TED Fellow Kitra Cahana dreamed about running away from home to live freely on the road. Now as an adult and self-proclaimed vagabond, she follows modern nomads into their homes -- boxcars, bus stops, parking lots, rest stop bathrooms -- giving a glimpse into a culture on the margins."",""word_count"":""0"",""tags"":{""video"":{""item_id"":""629377490"",""tag"":""video""}}},{""item_id"":""630059731"",""favorite"":""0"",""status"":""1"",""time_added"":""1403698319"",""time_updated"":""1404286296"",""time_read"":""1404264837"",""time_favorited"":""0"",""sort_id"":759,""resolved_title"":""Has Europe turned fascist, really?"",""resolved_url"":""http://www.voxeurop.eu/en/content/blog/4770241-has-europe-turned-fascist-really"",""excerpt"":""Europe hasn’t turned fascist, but the wave of nationalism sweeping the continent does tell an important story.  Europe has voted for fascists. It’s the end of the world as we know it—except it’s not."",""word_count"":""1275""},{""item_id"":""630532051"",""favorite"":""0"",""status"":""0"",""time_added"":""1403709246"",""time_updated"":""1404380813"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":748,""resolved_title"":""Beer Locker: Building a RESTful API With Node - Passport"",""resolved_url"":""http://scottksmith.com/blog/2014/05/29/beer-locker-building-a-restful-api-with-node-passport/"",""excerpt"":""In our previous article we ended wtih a fairly functional API capable of adding, removing, updating, and viewing beer.  In this part we will dive into creating user accounts and authentication using Passport."",""word_count"":""1612""},{""item_id"":""630613004"",""favorite"":""0"",""status"":""1"",""time_added"":""1403803278"",""time_updated"":""1404212519"",""time_read"":""1404212498"",""time_favorited"":""0"",""sort_id"":724,""resolved_title"":""GRC's : TrueCrypt, the final release, archive"",""resolved_url"":""https://www.grc.com/misc/truecrypt/truecrypt.htm"",""excerpt"":""Although the disappearance of the TrueCrypt site, whose ever-presence the Internet community long ago grew to take for granted, shocked and surprised many, it clearly came as no surprise to the developers who maintained the site and its namesake code for the past ten years."",""word_count"":""1188""},{""item_id"":""630849951"",""favorite"":""0"",""status"":""1"",""time_added"":""1403698314"",""time_updated"":""1404287045"",""time_read"":""1404287031"",""time_favorited"":""0"",""sort_id"":760,""resolved_title"":""Languages: Euro-globish, the EU’s speak?"",""resolved_url"":""http://www.voxeurop.eu/en/content/news-brief/4770401-euro-globish-eu-s-speak"",""excerpt"":""So, what language does the European Union speak? Until a decade ago, the answer would probably have been \""mostly French\"", though English was already gaining ground."",""word_count"":""289""},{""item_id"":""631919678"",""favorite"":""0"",""status"":""1"",""time_added"":""1401905297"",""time_updated"":""1402042242"",""time_read"":""1402016326"",""time_favorited"":""0"",""sort_id"":832,""resolved_title"":""My journey into the Berlin startup scene — Wandering CTO — Medium"",""resolved_url"":""https://medium.com/wandering-cto/my-journey-into-the-berlin-startup-scene-4dc8faecd305"",""excerpt"":""On January 2, 2014, I boarded a one-way flight to Germany.  I’ve never lived outside the US, and my career, professional network, and friends are based in San Francisco. My intention: to connect with startup people in Europe."",""word_count"":""1491""},{""item_id"":""632235415"",""favorite"":""0"",""status"":""1"",""time_added"":""1401906411"",""time_updated"":""1402042241"",""time_read"":""1402015165"",""time_favorited"":""0"",""sort_id"":827,""resolved_title"":""Could Bitcoin Miners Help Pay For Pirated Games?"",""resolved_url"":""http://torrentfreak.com/could-bitcoin-miners-help-pay-for-pirated-games-140601/"",""excerpt"":""Multiple reports this week suggested that a pirate release of the game Watch Dogs contained a Bitcoin miner."",""word_count"":""618""},{""item_id"":""632518291"",""favorite"":""0"",""status"":""1"",""time_added"":""1401876867"",""time_updated"":""1402092896"",""time_read"":""1402092884"",""time_favorited"":""0"",""sort_id"":839,""resolved_title"":""How Google is redefining web development (and Backbone.js getting obsolete)"",""resolved_url"":""http://rudyonweb.net/google-redefines-web-development-backbone-obsolete/"",""excerpt"":""Very lately, Google made announcements that have rightfully excited the web developers’ community; but after talking around, I feel that not everyone realizes how those moves may entirely redefine how web development is done."",""word_count"":""1649""},{""item_id"":""632660001"",""favorite"":""0"",""status"":""1"",""time_added"":""1401830521"",""time_updated"":""1402228324"",""time_read"":""1402124172"",""time_favorited"":""0"",""sort_id"":841,""resolved_title"":""How Different Cultures Understand Time"",""resolved_url"":""http://www.businessinsider.com/how-different-cultures-understand-time-2014-5"",""excerpt"":""Time is seen in a particularly different light by Eastern and Western cultures, and even within these groupings assumes quite dissimilar aspects from country to country."",""word_count"":""3259""},{""item_id"":""632705704"",""favorite"":""0"",""status"":""1"",""time_added"":""1401906405"",""time_updated"":""1402042242"",""time_read"":""1402015979"",""time_favorited"":""0"",""sort_id"":831,""resolved_title"":""German villagers build own broadband network"",""resolved_url"":""http://www.thelocal.de/20140601/german-villagers-build-own-broadband-network"",""excerpt"":""Too isolated and with few inhabitants, the tiny village of Löwenstedt in northern Germany is simply too small to show up on the radars of national Internet operators.  So the villagers took their digital fate into their own hands and built a broadband Internet network of their own."",""word_count"":""621""},{""item_id"":""632748171"",""favorite"":""0"",""status"":""1"",""time_added"":""1401876856"",""time_updated"":""1402228328"",""time_read"":""1402136324"",""time_favorited"":""0"",""sort_id"":840,""resolved_title"":""Build a RESTful API Using Node and Express 4 ♥ Scotch"",""resolved_url"":""http://scotch.io/tutorials/javascript/build-a-restful-api-using-node-and-express-4"",""excerpt"":""With the release of Express 4.0 just a few days ago, lots of our Node apps will have some changes in how they handle routing. With the changes in the Express Router, we have more flexibility in how we can define the routes for our applications."",""word_count"":""2612""},{""item_id"":""632876557"",""favorite"":""0"",""status"":""1"",""time_added"":""1403697105"",""time_updated"":""1404286296"",""time_read"":""1404264910"",""time_favorited"":""0"",""sort_id"":763,""resolved_title"":""Asus's 4K ultrabook might be ideal for mobile editors and animators"",""resolved_url"":""http://www.redsharknews.com/technology/item/1727-asus-s-4k-ultrabook-might-be-ideal-for-mobile-editors-and-animators"",""excerpt"":""Until recently if you were a video creative you might have dismissed the idea of an \""Ultrabook\"" computer as being a bit feeble for any serious work."",""word_count"":""318""},{""item_id"":""633010914"",""favorite"":""0"",""status"":""1"",""time_added"":""1401897565"",""time_updated"":""1402042243"",""time_read"":""1402016548"",""time_favorited"":""0"",""sort_id"":834,""resolved_title"":""How great would Sweden’s proposed six-hour workday be? This great."",""resolved_url"":""http://www.washingtonpost.com/blogs/worldviews/wp/2014/06/02/how-great-would-swedens-proposed-six-hour-workday-be-this-great"",""excerpt"":""Gothenburg, Sweden's second largest city, will begin its experiment with six-hour working days this summer, hopefully proving that the shorter work hours can make up for what they lose in time with more efficient work."",""word_count"":""458""},{""item_id"":""633127431"",""favorite"":""0"",""status"":""1"",""time_added"":""1403697094"",""time_updated"":""1404679674"",""time_read"":""1404679672"",""time_favorited"":""0"",""sort_id"":766,""resolved_title"":""Building Netflix Playback with Self-Assembling Components"",""resolved_url"":""http://techblog.netflix.com/2014/06/building-netflix-playback-with-self.html"",""excerpt"":""by: Nicholas Eddy Our 48 million members are accustomed to seeing a screen like this, whether on their TV or one of the 1000+ other Netflix devices they enjoy watching on."",""word_count"":""1401""},{""item_id"":""633357009"",""favorite"":""0"",""status"":""1"",""time_added"":""1401897567"",""time_updated"":""1402042243"",""time_read"":""1402016456"",""time_favorited"":""0"",""sort_id"":833,""resolved_title"":""This URL shortener situation is officially out of control"",""resolved_url"":""http://www.hanselman.com/blog/ThisURLShortenerSituationIsOfficiallyOutOfControl.aspx"",""excerpt"":""I saw a URL today on Twitter to an article on Slate.com. It was a custom short URL - http://slate.me/1h0svt8 but since I was visiting it via Twitter, it was wrapped with Twitter's t.co URL, so I really started at http://t.co/sxSvcJnT2L."",""word_count"":""394""},{""item_id"":""633629321"",""favorite"":""0"",""status"":""1"",""time_added"":""1401960165"",""time_updated"":""1402042241"",""time_read"":""1402014995"",""time_favorited"":""0"",""sort_id"":825,""resolved_title"":""Action started by TfL in Uber taxi app row"",""resolved_url"":""http://www.bbc.co.uk/news/technology-27674773#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa"",""excerpt"":""Action has been started by Transport for London (TfL) to secure a High Court ruling on the legality of an app which calculates the costs of taxi journeys.  TfL wants to know whether using GPS to calculate fares complies with laws which state only black cabs can have meters."",""word_count"":""234""},{""item_id"":""633786699"",""favorite"":""0"",""status"":""1"",""time_added"":""1401960179"",""time_updated"":""1402042241"",""time_read"":""1402015611"",""time_favorited"":""0"",""sort_id"":824,""resolved_title"":""On Patrol with North London's Crime-Fighting Orthodox Jews"",""resolved_url"":""http://www.vice.com/en_uk/read/on-patrol-with-north-londons-orthodox-jewish-patrol-group?utm_source=vicetwitteruk"",""excerpt"":""It’s a wet Tuesday night in Stamford Hill and I’m on an impromptu stakeout with two Orthodox Jewish men wearing police-issue stab vests.  Shulem Stern’s roomy people carrier has three child seats in the back to accommodate his large young family."",""word_count"":""1709""},{""item_id"":""634018907"",""favorite"":""0"",""status"":""1"",""time_added"":""1401960187"",""time_updated"":""1402042240"",""time_read"":""1402014906"",""time_favorited"":""0"",""sort_id"":823,""resolved_title"":""China push to make Royal Albert Dock ‘rival the City’"",""resolved_url"":""http://www.standard.co.uk/business/business-news/china-push-to-make-royal-albert-dock-rival-the-city-9477752.html"",""excerpt"":""The developer behind the planned £1 billion overhaul of the Royal Albert Dock today gathered hundreds of Chinese businessmen and financiers in east London in efforts to create the capital’s “third great business district”."",""word_count"":""203""},{""item_id"":""634175819"",""favorite"":""0"",""status"":""1"",""time_added"":""1401896423"",""time_updated"":""1402042589"",""time_read"":""1402042586"",""time_favorited"":""0"",""sort_id"":836,""resolved_title"":""Why Using the Greedy .* in Regular Expressions Is Almost Never What You Actually Want"",""resolved_url"":""http://blog.mariusschulz.com/2014/06/03/why-using-in-regular-expressions-is-almost-never-what-you-actually-want"",""excerpt"":""In the above example, the expected match would be [c1,d1] with two capturing groups holding the values c1 and d1, respectively. One user answering the question suggested the use of .* in their pattern, which is pretty much never what you want. Here's why."",""word_count"":""1130""},{""item_id"":""634439434"",""favorite"":""0"",""status"":""1"",""time_added"":""1401876891"",""time_updated"":""1402431682"",""time_read"":""1402431146"",""time_favorited"":""0"",""sort_id"":837,""resolved_title"":""A Full Javascript Architecture, Part One - NodeJS"",""resolved_url"":""http://blog.zenika.com/index.php?post/2011/04/10/NodeJS&utm_content=bufferc9168&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer"",""excerpt"":""To illustrate our architecture we are going to create a Node application that will track tweets about the “What’s Next” event and broadcast them in real time to the clients."",""word_count"":""1733""},{""item_id"":""634774391"",""favorite"":""0"",""status"":""1"",""time_added"":""1411631655"",""time_updated"":""1412159695"",""time_read"":""1412158017"",""time_favorited"":""0"",""sort_id"":364,""resolved_title"":""JavaScript for Automation Release Notes"",""resolved_url"":""https://developer.apple.com/library/prerelease/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/index.html"",""excerpt"":""This is a preliminary document for an API or technology in development. Apple is supplying this information to help you plan for the adoption of the technologies and programming interfaces described herein for use on Apple-branded products."",""word_count"":""3259""},{""item_id"":""634877352"",""favorite"":""1"",""status"":""1"",""time_added"":""1401968082"",""time_updated"":""1402042239"",""time_read"":""1402014462"",""time_favorited"":""1402014461"",""sort_id"":817,""resolved_title"":""Krebs on Security"",""resolved_url"":""http://krebsonsecurity.com/2014/06/peek-inside-a-professional-carding-shop/"",""excerpt"":""Over the past year, I’ve spent a great deal of time trolling a variety of underground stores that sell “dumps” — street slang for stolen credit card data that buyers can use to counterfeit new cards and go shopping in big-box stores for high-dollar merchandise that can be resold quickly fo"",""word_count"":""1301""},{""item_id"":""635142664"",""favorite"":""0"",""status"":""1"",""time_added"":""1401968080"",""time_updated"":""1402307478"",""time_read"":""1402307268"",""time_favorited"":""0"",""sort_id"":819,""resolved_title"":""Using Basic and Tween Transitions in d3.js"",""resolved_url"":""http://4waisenkinder.de/blog/2014/05/11/d3-dot-js-tween-in-detail/"",""excerpt"":""Playing around at CodePen is one of my favourite activities, when doing ‘nothing’ lately. Especially the combination of dribbble and CodePen is super nice. Browsing for beautiful designs and ideas on dribbble and putting them into code became a nice activity for me."",""word_count"":""1599""},{""item_id"":""635438142"",""favorite"":""0"",""status"":""1"",""time_added"":""1403697103"",""time_updated"":""1404286296"",""time_read"":""1404265011"",""time_favorited"":""0"",""sort_id"":764,""resolved_title"":""Pixar to give away RenderMan"",""resolved_url"":""http://www.redsharknews.com/post/item/1735-pixar-to-give-away-renderman"",""excerpt"":""Yes, that’s pretty much the industry-leading rendering software behind numerous animation blockbusters yours for free as long as you’re planning non-commercial use."",""word_count"":""445""},{""item_id"":""635870417"",""favorite"":""0"",""status"":""1"",""time_added"":""1403803276"",""time_updated"":""1404372667"",""time_read"":""1404372663"",""time_favorited"":""0"",""sort_id"":725,""resolved_title"":""Why the New Obamacare Website Is Going to Work This Time"",""resolved_url"":""http://www.wired.com/2014/06/healthcare-gov-revamp/"",""excerpt"":""The drama of the HealthCare.gov Ad Hoc team is now a modern tech fable: a small cadre of young geeks from Silicon Valley and President Obama’s election campaign parachute into the federal bureaucracy to rescue the site and help exceed the goal of 8 million insured households nationwide."",""word_count"":""2157""},{""item_id"":""636094687"",""favorite"":""0"",""status"":""1"",""time_added"":""1403001475"",""time_updated"":""1403438966"",""time_read"":""1403421850"",""time_favorited"":""0"",""sort_id"":792,""resolved_title"":""It happened: Git 2.0 is here and it’s full of goodies"",""resolved_url"":""http://blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies/"",""excerpt"":""This major release of git has been brewing for a long time and I am excited to go on the hunt in the Changelog to find cool bits of awesomeness. As usual if you want to catch up with past git releases, I’ve been doing this exercise for a while, check them out: 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.9."",""word_count"":""794""},{""item_id"":""636262363"",""favorite"":""0"",""status"":""1"",""time_added"":""1409848507"",""time_updated"":""1410340767"",""time_read"":""1410327012"",""time_favorited"":""0"",""sort_id"":441,""resolved_title"":""Secure Encryption Software"",""resolved_url"":""https://ciphershed.org"",""excerpt"":""CipherShed is free (as in free-of-charge and free-speech) encryption software for keeping your data secure and private. It started as a fork of the now-discontinued TrueCrypt Project. Learn more about how CipherShed works and the project behind it."",""word_count"":""123""},{""item_id"":""636521092"",""favorite"":""0"",""status"":""1"",""time_added"":""1403697093"",""time_updated"":""1404679711"",""time_read"":""1404679709"",""time_favorited"":""0"",""sort_id"":767,""resolved_title"":""Scale and Performance of a Large JavaScript Application"",""resolved_url"":""http://techblog.netflix.com/2014/06/scale-and-performance-of-large.html"",""excerpt"":""By Matt Marenghi  We recently held our second JavaScript Talks event at our Netflix headquarters in Los Gatos, Calif. Matt Seeley discussed the development approaches we use at Netflix to build the JavaScript applications which run on TV-connected devices, phones and tablets."",""word_count"":""114""},{""item_id"":""637033822"",""favorite"":""0"",""status"":""1"",""time_added"":""1403001472"",""time_updated"":""1403438966"",""time_read"":""1403422059"",""time_favorited"":""0"",""sort_id"":794,""resolved_title"":""How Kim Dotcom's $5m Whistleblower Bounty Will Work"",""resolved_url"":""http://torrentfreak.com/how-kim-dotcoms-5m-whistleblower-bounty-will-work-140607/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""637300906"",""favorite"":""0"",""status"":""1"",""time_added"":""1403001471"",""time_updated"":""1403438966"",""time_read"":""1403422163"",""time_favorited"":""0"",""sort_id"":795,""resolved_title"":""'Popcorn Time' Gives Users Anonymity With a Free Built-In VPN"",""resolved_url"":""http://torrentfreak.com/popcorn-time-gives-users-anonymity-with-a-free-built-in-vpn-140607/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""638540213"",""favorite"":""0"",""status"":""1"",""time_added"":""1402329148"",""time_updated"":""1402954782"",""time_read"":""1402954782"",""time_favorited"":""0"",""sort_id"":816,""resolved_title"":""I’m not your inspiration, thank you very much"",""resolved_url"":""http://www.ted.com/talks/stella_young_i_m_not_your_inspiration_thank_you_very_much?utm_campaign=&utm_medium=on.ted.com-facebook-share&utm_content=awesm-bookmarklet&utm_source=l.facebook.com&awesm=on.ted.com_g0HBD"",""excerpt"":""Stella Young is a comedian and journalist who happens to go about her day in a wheelchair — a fact that doesn’t, she’d like to make clear, automatically turn her into a noble inspiration to all humanity. In this very funny talk, Young breaks down society's habit of turning disabled people into “inspiration porn.”"",""word_count"":""0"",""tags"":{""video"":{""item_id"":""638540213"",""tag"":""video""}}},{""item_id"":""638785499"",""favorite"":""0"",""status"":""1"",""time_added"":""1403000301"",""time_updated"":""1403004936"",""time_read"":""1403004927"",""time_favorited"":""0"",""sort_id"":798,""resolved_title"":""When to use semicolons in JavaScript"",""resolved_url"":""http://www.choskim.me/when-to-use-semicolons-in-javascript/"",""excerpt"":""The usage of semicolons in JavaScript is an enigma for many developers. Many of us—especially when we are still learning a lot about the language—will read code that uses them inconsistently. In turn, when we write code in JavaScript, we find that our code works both with and without semicolons."",""word_count"":""735""},{""item_id"":""639374918"",""favorite"":""0"",""status"":""1"",""time_added"":""1402417817"",""time_updated"":""1403727014"",""time_read"":""1402954781"",""time_favorited"":""0"",""sort_id"":814,""resolved_title"":""Hackers: the Internet's immune system"",""resolved_url"":""http://www.ted.com/talks/keren_elazari_hackers_the_internet_s_immune_system?utm_content=awesm-publisher&utm_source=l.facebook.com&utm_campaign=&utm_medium=on.ted.com-facebook-share&awesm=on.ted.com_suh8"",""excerpt"":""The beauty of hackers, says cybersecurity expert Keren Elazari, is that they force us to evolve and improve. Yes, some hackers are bad guys, but many are working to fight government corruption and advocate for our rights. By exposing vulnerabilities, they push the Internet to become stronger and healthier, wielding their power to create a better world."",""word_count"":""0"",""tags"":{""video"":{""item_id"":""639374918"",""tag"":""video""}}},{""item_id"":""639404079"",""favorite"":""0"",""status"":""1"",""time_added"":""1402998183"",""time_updated"":""1403467507"",""time_read"":""1403465794"",""time_favorited"":""0"",""sort_id"":801,""resolved_title"":""Five Labs predicts personality by analyzing your language,\nusing an artificial intelligence engine."",""resolved_url"":""http://labs.five.com/"",""excerpt"":""By logging into our application, you consent to your predicted personality being accessible by web visitors who have your private URL.  Please contact us with your Facebook ID if you would like your personality data removed."",""word_count"":""410""},{""item_id"":""639484820"",""favorite"":""0"",""status"":""1"",""time_added"":""1402777285"",""time_updated"":""1403476796"",""time_read"":""1403467859"",""time_favorited"":""0"",""sort_id"":811,""resolved_title"":""#SLA2014 : Amy Affelt - The Accidental Data Scientist: A new role for librarians and information professionals "",""resolved_url"":""http://hurstassociates.blogspot.com/2014/06/amy-affelt-accidental-data-scientist.html"",""excerpt"":""What is big data? You know it when you see it.  McKinsey: amount of data collected will grow by 40% per year. 15 out of 17 industries will have more data than the information stored in the Library of Congress."",""word_count"":""400""},{""item_id"":""639530680"",""favorite"":""0"",""status"":""1"",""time_added"":""1402998184"",""time_updated"":""1403517386"",""time_read"":""1403516418"",""time_favorited"":""0"",""sort_id"":800,""resolved_title"":""Stack Overflow survey of 20,000 developers"",""resolved_url"":""https://www.statwing.com/demos/dev-survey-2#workspaces/18726"",""excerpt"":""Stack Overflow surveyed 20,000 developers over the past three years about the technologies they use, their jobs, their companies, and more.  We've loaded the results into Statwing to make them easy to explore."",""word_count"":""33""},{""item_id"":""639736024"",""favorite"":""0"",""status"":""1"",""time_added"":""1402489873"",""time_updated"":""1403727014"",""time_read"":""1402566849"",""time_favorited"":""0"",""sort_id"":813,""resolved_title"":""What Causes Weight Gain"",""resolved_url"":""http://www.nytimes.com/2014/06/11/opinion/what-causes-weight-gain.html"",""excerpt"":""If I ask you what constitutes “bad” eating, the kind that leads to obesity and a variety of connected diseases, you’re likely to answer, “Salt, fat and sugar.” This trilogy of evil has been drilled into us for decades, yet that’s not an adequate answer."",""word_count"":""804""},{""item_id"":""640003961"",""favorite"":""0"",""status"":""1"",""time_added"":""1402940332"",""time_updated"":""1405125582"",""time_read"":""1405125575"",""time_favorited"":""0"",""sort_id"":808,""resolved_title"":""Shepard Fairey on Capitalism, Freedom, Selling Out, and What Makes Great Art"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/06/11/shepard-fairey-capitalism-selling-out/"",""excerpt"":""In 1989, street artist, graphic designer, and activist Shepard Fairey created his famous Obey Giant sticker campaign, which spread like wildfire to amass a massive following and take on the characteristics of a singular semi-secret subculture."",""word_count"":""1208""},{""item_id"":""640163504"",""favorite"":""0"",""status"":""1"",""time_added"":""1402958441"",""time_updated"":""1403467507"",""time_read"":""1403466780"",""time_favorited"":""0"",""sort_id"":806,""resolved_title"":""EU to launch corporate tax probe into Ireland and others"",""resolved_url"":""http://euobserver.com/news/124548"",""excerpt"":""BRUSSELS - The European Commission is to launch a formal investigation into whether tax breaks used to attract international companies breach the EU’s state aid rules."",""word_count"":""466""},{""item_id"":""640230519"",""favorite"":""0"",""status"":""1"",""time_added"":""1402696622"",""time_updated"":""1402954784"",""time_read"":""1402954784"",""time_favorited"":""0"",""sort_id"":812,""resolved_title"":""The shocking move to criminalize nonviolent protest"",""resolved_url"":""http://www.ted.com/talks/will_potter_the_shocking_move_to_criminalize_non_violent_protest"",""excerpt"":""In 2002, investigative journalist and TED Fellow Will Potter took a break from his regular beat, writing about shootings and murders for the Chicago Tribune. He went to help a local group campaigning against animal testing: \""I thought it would be a safe way to do something positive,\"" he says. Instead, he was arrested, and so began his ongoing journey into a world in which peaceful protest is branded as terrorism."",""word_count"":""0"",""tags"":{""video"":{""item_id"":""640230519"",""tag"":""video""}}},{""item_id"":""640647735"",""favorite"":""0"",""status"":""1"",""time_added"":""1403697092"",""time_updated"":""1405151613"",""time_read"":""1405151606"",""time_favorited"":""0"",""sort_id"":768,""resolved_title"":""Optimizing the Netflix Streaming Experience with Data Science"",""resolved_url"":""http://techblog.netflix.com/2014/06/optimizing-netflix-streaming-experience.html"",""excerpt"":""By Nirmal Govind  On January 16, 2007, Netflix started rolling out a new feature: members could now stream movies directly on their browser without having to wait for the red envelope in the mail. This event marked a substantial shift for Netflix and the entertainment industry."",""word_count"":""1268""},{""item_id"":""641683656"",""favorite"":""0"",""status"":""1"",""time_added"":""1402995875"",""time_updated"":""1403467507"",""time_read"":""1403466475"",""time_favorited"":""0"",""sort_id"":802,""resolved_title"":""Inside Shenzhen: China's Silicon Valley"",""resolved_url"":""http://www.theguardian.com/cities/2014/jun/13/inside-shenzen-china-silicon-valley-tech-nirvana-pearl-river"",""excerpt"":""Just 30 years ago this Pearl River Delta megacity was a mere fishing village. Now home to up to 15 million people it hopes to become a tech nirvana for the world's hardware startups  Everywhere you look, there is enterprise."",""word_count"":""1456""},{""item_id"":""641998182"",""favorite"":""0"",""status"":""1"",""time_added"":""1402777292"",""time_updated"":""1403467507"",""time_read"":""1403467451"",""time_favorited"":""0"",""sort_id"":810,""resolved_title"":""The Return of the Bonapartes"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/06/12/the_return_of_the_bonapartes_marine_le_pen_national_front_france"",""excerpt"":""France's National\r Front (FN) has provided shock after shock in recent months. First came a\r runaway success in March's municipal elections, where the far-right party came in\r second."",""word_count"":""1618""},{""item_id"":""642211048"",""favorite"":""0"",""status"":""1"",""time_added"":""1402918074"",""time_updated"":""1405151705"",""time_read"":""1405151685"",""time_favorited"":""0"",""sort_id"":809,""resolved_title"":""Understanding Error Messages in JavaScript"",""resolved_url"":""http://www.choskim.me/understanding-error-messages-in-javascript/"",""excerpt"":""When I began coding, error messages used to induce fear in me. I was afraid that each message was informing me of a convoluted problem; moreover, I was afraid that I couldn't resolve these problems. Where would I even begin?"",""word_count"":""797""},{""item_id"":""643617464"",""favorite"":""0"",""status"":""1"",""time_added"":""1402991291"",""time_updated"":""1403467507"",""time_read"":""1403467066"",""time_favorited"":""0"",""sort_id"":805,""resolved_title"":""Don't wash chicken before cooking it, warns Food Standards Agency"",""resolved_url"":""http://www.theguardian.com/lifeandstyle/2014/jun/16/do-not-wash-chicken-advises-fsa"",""excerpt"":""The government's food watchdog has urged consumers to stop washing chicken before they cook it to avoid contaminating their kitchen with Campylobacter – the most common type of food poisoning in the UK – which can cause death as well as serious health problems."",""word_count"":""339""},{""item_id"":""644091772"",""favorite"":""0"",""status"":""1"",""time_added"":""1402992250"",""time_updated"":""1405125246"",""time_read"":""1405125242"",""time_favorited"":""0"",""sort_id"":804,""resolved_title"":""The terrifying rise of Isis: $2bn in loot, online killings and an army on the run"",""resolved_url"":""http://www.theguardian.com/world/2014/jun/16/terrifying-rise-of-isis-iraq-executions"",""excerpt"":""Link to video: What is Isis and what are its aims? 1."",""word_count"":""2180""},{""item_id"":""644175359"",""favorite"":""0"",""status"":""1"",""time_added"":""1402998451"",""time_updated"":""1403009916"",""time_read"":""1403008508"",""time_favorited"":""0"",""sort_id"":799,""resolved_title"":""Tesla's Clever Patent Move Is Already Paying Off"",""resolved_url"":""http://www.huffingtonpost.com/2014/06/16/tesla-patent-supercharger-station_n_5500724.html"",""excerpt"":""Tesla may already be reaping the rewards of freeing up its patents."",""word_count"":""473""},{""item_id"":""644226216"",""favorite"":""0"",""status"":""1"",""time_added"":""1402958440"",""time_updated"":""1403467507"",""time_read"":""1403466933"",""time_favorited"":""0"",""sort_id"":807,""resolved_title"":""Danes the highest taxed in Europe, reveals Eurostat"",""resolved_url"":""http://euobserver.com/news/124616"",""excerpt"":""BRUSSELS - Denmark, Belgium and France are the highest taxed EU countries according to research by the bloc’s statistical agency Eurostat.  The data in Eurostat’s report on ‘Taxation trends’ in the EU, published on Monday (16 June), found that the Danish government collected tax worth 48."",""word_count"":""444""},{""item_id"":""644788860"",""favorite"":""0"",""status"":""1"",""time_added"":""1403032814"",""time_updated"":""1403174686"",""time_read"":""1403174625"",""time_favorited"":""0"",""sort_id"":789,""resolved_title"":""YouTube to block indie labels as subscription service launches"",""resolved_url"":""http://www.bbc.co.uk/news/technology-27891883"",""excerpt"":""YouTube will remove music videos by artists such as Adele, Arctic Monkeys and Radiohead, because the independent labels to which they belong have refused to agree terms with the site.  Google, which owns YouTube, has been renegotiating contracts as it prepares to launch a music subscription service."",""word_count"":""520""},{""item_id"":""644790790"",""favorite"":""0"",""status"":""1"",""time_added"":""1403032813"",""time_updated"":""1403167789"",""time_read"":""1403167561"",""time_favorited"":""0"",""sort_id"":790,""resolved_title"":""These are indeed strange times: Panasonic licenses ProRes from Atomos for their new 4K Varicam"",""resolved_url"":""http://www.redsharknews.com/technology/item/1770-these-are-indeed-strange-times-panasonic-licenses-prores-from-atomos-for-their-new-4k-varicam"",""excerpt"":""This was announced some time ago but we've just looked at it again and on reflection, it does seem really surprising - if completely plausible.  This in itself was surprising - every bit as much as Sony's revaluation that their F5 and F55 cameras were going to be 4K - capable as well."",""word_count"":""399""},{""item_id"":""644812186"",""favorite"":""0"",""status"":""1"",""time_added"":""1403032815"",""time_updated"":""1405126389"",""time_read"":""1405126384"",""time_favorited"":""0"",""sort_id"":788,""resolved_title"":""A Country Implodes: ISIS Pushes Iraq to the Brink"",""resolved_url"":""http://www.spiegel.de/international/world/the-implosion-of-iraq-at-the-hands-of-the-isis-islamists-a-975541.html"",""excerpt"":""The terror group ISIS has occupied vast portions of Syria and Iraq in the hopes of establishing a caliphate. The jihadists' success lays bare Iraq's disintegration and could ignite yet another civil war between Shiites and Sunnis in the country."",""word_count"":""3013""},{""item_id"":""644935860"",""favorite"":""0"",""status"":""1"",""time_added"":""1403048387"",""time_updated"":""1403517386"",""time_read"":""1403516706"",""time_favorited"":""0"",""sort_id"":787,""resolved_title"":""ISIS and the Long-Term Threat to Iraqi Oil"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/06/17/isis_and_the_long_term_threat_to_iraqi_oil"",""excerpt"":""Auditors for the office that oversees the approval of all federal security clearances have apparently located the most productive federal contractor in America.\r   \r An unnamed employee at U.S."",""word_count"":""660""},{""item_id"":""644972091"",""favorite"":""0"",""status"":""1"",""time_added"":""1403048388"",""time_updated"":""1403089833"",""time_read"":""1403089805"",""time_favorited"":""0"",""sort_id"":786,""resolved_title"":""NHS comes top in healthcare survey"",""resolved_url"":""http://www.theguardian.com/society/2014/jun/17/nhs-health"",""excerpt"":""The NHS has been declared the best healthcare system by an international panel of experts who rated its care superior to countries which spend far more on health.  The same study also castigated healthcare provision in the US as the worst of the 11 countries it looked at."",""word_count"":""597""},{""item_id"":""645752458"",""favorite"":""0"",""status"":""1"",""time_added"":""1403165952"",""time_updated"":""1403516361"",""time_read"":""1403516358"",""time_favorited"":""0"",""sort_id"":783,""resolved_title"":""Introducing the Web Audio Editor in Firefox Developer Tools"",""resolved_url"":""https://hacks.mozilla.org/2014/06/introducing-the-web-audio-editor-in-firefox-developer-tools/"",""excerpt"":""In Firefox 32, the Web Audio Editor joins the Shader Editor and Canvas Debugger in Firefox Developer Tools for debugging media-rich content on the web."",""word_count"":""447""},{""item_id"":""645894382"",""favorite"":""0"",""status"":""1"",""time_added"":""1403137986"",""time_updated"":""1403438966"",""time_read"":""1403421608"",""time_favorited"":""0"",""sort_id"":784,""resolved_title"":""How Millennials Are Changing Travel"",""resolved_url"":""http://www.theatlantic.com/international/archive/2014/06/how-millennials-are-changing-international-travel/373007/"",""excerpt"":""A disillusioned, recession-battered generation is investing in overseas experience—and hoping the bet pays off. In the summer of 2012, at age 24, I left home to travel the world. In just over a year, I backpacked through South America, South Asia, Western Europe, and the western United States."",""word_count"":""2635""},{""item_id"":""647175368"",""favorite"":""0"",""status"":""1"",""time_added"":""1407169369"",""time_updated"":""1407256296"",""time_read"":""1407256289"",""time_favorited"":""0"",""sort_id"":634,""resolved_title"":""How to understand the north Germans"",""resolved_url"":""http://www.thelocal.de/20140620/deciphering-the-north-germans-thelocalive-hambrett#.U997hEgiaF4.facebook"",""excerpt"":""Way back when, when SG was but a brand new flickering flame of romance, my flatmate said to me upon meeting him, \""he is a typical north German.\"" I didn’t quite know what that meant because I didn’t know any other north Germans, just a lot of Westphalins."",""word_count"":""1037""},{""item_id"":""647407135"",""favorite"":""0"",""status"":""0"",""time_added"":""1403704312"",""time_updated"":""1405281081"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":749,""resolved_title"":""Snark Hunting: Force Directed Graphs in D3"",""resolved_url"":""http://www.delimited.io/blog/2014/6/17/force-directed-graphs-in-d3"",""excerpt"":""Is it possible to write a blog post that combines d3.js, pseudo-classical JavaScript, graph theory, and Lewis Carroll? Yes, THAT Lewis Carroll. The one who wrote Alice in Wonderland. We are going to try it here."",""word_count"":""2651""},{""item_id"":""648373951"",""favorite"":""0"",""status"":""1"",""time_added"":""1403618244"",""time_updated"":""1405125139"",""time_read"":""1405125134"",""time_favorited"":""0"",""sort_id"":779,""resolved_title"":""Sepp Blatter: why football deserves better than Fifa's toxic president"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/jun/22/sepp-blatter-football-deserves-better-world-cup-brazil"",""excerpt"":""For England fans, last week was all about the traditional World Cup Groundhog Day. Same old story, then? For England maybe."",""word_count"":""1127""},{""item_id"":""648775282"",""favorite"":""0"",""status"":""1"",""time_added"":""1403727063"",""time_updated"":""1403952387"",""time_read"":""1403944081"",""time_favorited"":""0"",""sort_id"":737,""resolved_title"":""Elon Musk, Stephen Hawking and fearing the machine"",""resolved_url"":""http://www.cnbc.com/id/101774267?__source=yahoo%7Cfinance%7Cheadline%7Cheadline%7Cstory&amp;par=yahoo&amp;doc=101774267%7CWhat%20Elon%20Musk%20and%20Stephe"",""excerpt"":""When the man at the forefront of some of the most cutting-edge enterprises in the world warns you about, well, some potentially disastrous technological dangers, you should probably listen, right?  So pay attention to a warning from Elon Musk, the founder of Tesla, Paypal and SpaceX."",""word_count"":""643""},{""item_id"":""648991404"",""favorite"":""0"",""status"":""1"",""time_added"":""1403718183"",""time_updated"":""1404323107"",""time_read"":""1404323104"",""time_favorited"":""0"",""sort_id"":745,""resolved_title"":""What D3.js is Not"",""resolved_url"":""http://ruoyusun.com/2014/05/26/what-d3js-is-not.html"",""excerpt"":""I have played with D3.js quite a bit recently. After exploring its API and building a rather complex chart, I come to realize that I have misunderstood D3 for a long time. It’s not only me, after talking to my friends, they also have misconceptions regarding D3."",""word_count"":""478""},{""item_id"":""649114492"",""favorite"":""0"",""status"":""1"",""time_added"":""1403727061"",""time_updated"":""1403784605"",""time_read"":""1403784601"",""time_favorited"":""0"",""sort_id"":738,""resolved_title"":""Microsoft Surface Pro 3 Review"",""resolved_url"":""http://www.anandtech.com/show/8077/microsoft-surface-pro-3-review"",""excerpt"":""I can't believe it's only been sixteen months since I published our review of the original Microsoft Surface Pro. It feels like longer but that's likely because Surface RT made its sale debut a few months prior to that, and both devices were announced in the Summer of 2012."",""word_count"":""8753""},{""item_id"":""649174283"",""favorite"":""0"",""status"":""1"",""time_added"":""1403732082"",""time_updated"":""1403784655"",""time_read"":""1403784636"",""time_favorited"":""0"",""sort_id"":736,""resolved_title"":""Polish FM says 'organised criminal group' behind leak scandal"",""resolved_url"":""http://euobserver.com/tickers/124700"",""excerpt"":""Polish FM Radek Sikorski said in Luxembourg Monday his government has been \""attacked by an organised criminal group\"" following the leak of his and other ministers' private conversations."",""word_count"":""50""},{""item_id"":""649197708"",""favorite"":""0"",""status"":""1"",""time_added"":""1403690248"",""time_updated"":""1404991093"",""time_read"":""1404991087"",""time_favorited"":""0"",""sort_id"":777,""resolved_title"":""What Everyone Gets Wrong in the Debate Over Net Neutrality"",""resolved_url"":""http://www.wired.com/2014/06/net_neutrality_missing/"",""excerpt"":""Even Sunday night HBO watchers are worried the Federal Communications Commission will soon put an end to net neutrality. Earlier this month, on the HBO comedy news show “Last Week Tonight,” host John Oliver went on a 13-minute rant against the new set of internet rules proposed by the FCC."",""word_count"":""2061""},{""item_id"":""649224174"",""favorite"":""0"",""status"":""1"",""time_added"":""1403803264"",""time_updated"":""1404248562"",""time_read"":""1404248553"",""time_favorited"":""0"",""sort_id"":732,""resolved_title"":""Uber isn’t the problem; taxi regulations are"",""resolved_url"":""http://www.bostonglobe.com/opinion/2014/06/22/uber-isn-problem-taxi-regulations-are/5tBvAe8rcnGFcDYDT0jx3N/story.html"",""excerpt"":""Uber has plenty of enemies. The Web-based taxi service opened for business just five years ago, but recently its reputation has instilled enough fear in competitors to tie up traffic not just in Boston but in London, Paris, and a dozen other European cities."",""word_count"":""770""},{""item_id"":""649276440"",""favorite"":""0"",""status"":""1"",""time_added"":""1403602117"",""time_updated"":""1405125235"",""time_read"":""1405125228"",""time_favorited"":""0"",""sort_id"":780,""resolved_title"":""Why Steve Jobs replaced the Mac’s  key with ⌘"",""resolved_url"":""http://www.cultofmac.com/284700/steve-jobs-replaced-macs--key-⌘/"",""excerpt"":""Graphic designer Susan Kare is iconic — literally. The mastermind behind the friendly 32 x 32 and 16 x 16 icons used in the original Mac operating system, Kare’s work has reached more people than almost any other graphic designer on Earth."",""word_count"":""351""},{""item_id"":""649318033"",""favorite"":""0"",""status"":""1"",""time_added"":""1403704311"",""time_updated"":""1405124812"",""time_read"":""1405124805"",""time_favorited"":""0"",""sort_id"":750,""resolved_title"":""Using Node.js in Production"",""resolved_url"":""http://flippinawesome.org/2014/06/23/using-node-js-in-production/"",""excerpt"":""When running a node application in production, you need to keep stability, performance, security, and maintainability in mind. In this article, I’ll outline what I think are the best practices for putting Node.js into production."",""word_count"":""2007""},{""item_id"":""649398180"",""favorite"":""0"",""status"":""1"",""time_added"":""1403727011"",""time_updated"":""1404456688"",""time_read"":""1404456685"",""time_favorited"":""0"",""sort_id"":739,""resolved_title"":""WebIDE Lands in Nightly"",""resolved_url"":""https://hacks.mozilla.org/2014/06/webide-lands-in-nightly/"",""excerpt"":""Editor’s note: if you want to help test it on a recent nightly you can toggle the devtools.webide.enabled preference in about:config. The WebIDE is available today under Tools>Web Developer>App Manager and will be renamed in tomorrow’s Nightly into WebIDE."",""word_count"":""804""},{""item_id"":""649728998"",""favorite"":""0"",""status"":""1"",""time_added"":""1403697099"",""time_updated"":""1405089459"",""time_read"":""1405088721"",""time_favorited"":""0"",""sort_id"":765,""resolved_title"":""Betamax vs VHS. Here's a good explanation about what happened"",""resolved_url"":""http://www.redsharknews.com/business/item/1783-betamax-vs-vhs-here-s-a-good-explanation-about-what-happened"",""excerpt"":""It's the oldest business anecdote in the book. Well, maybe not the oldest, because it happened in the seventies..."",""word_count"":""130""},{""item_id"":""649770980"",""favorite"":""0"",""status"":""1"",""time_added"":""1403724188"",""time_updated"":""1403952387"",""time_read"":""1403944450"",""time_favorited"":""0"",""sort_id"":741,""resolved_title"":""Every C99.php Shell Is Backdoored (A.K.A. Free Shells for Everyone!)"",""resolved_url"":""http://thehackerblog.com/every-c99-php-shell-is-backdoored-aka-free-shells/"",""excerpt"":""Earlier I made a post calling out the wrong people for backdooring the C99.php shell hosted on r57.gen.tr. They look to possibly be only exploiting an already existing vulnerability in the C99 shell. The truth is the C99 shell is just plain backdoored."",""word_count"":""191""},{""item_id"":""649910239"",""favorite"":""0"",""status"":""1"",""time_added"":""1403691415"",""time_updated"":""1404426858"",""time_read"":""1404426855"",""time_favorited"":""0"",""sort_id"":776,""resolved_title"":""London's Garden bridge: 'It feels like we're trying to pull off a crime'"",""resolved_url"":""http://www.theguardian.com/artanddesign/2014/jun/24/garden-bridge-london-thomas-heatherwick-joanna-lumley"",""excerpt"":""The river Thames has long inspired a kind of architectural madness, the looping grey serpent driving many to attempt to leap its great breadth in ever more elaborate ways."",""word_count"":""1442""},{""item_id"":""649959738"",""favorite"":""0"",""status"":""1"",""time_added"":""1403724187"",""time_updated"":""1403952387"",""time_read"":""1403944571"",""time_favorited"":""0"",""sort_id"":742,""resolved_title"":""Le Pen fails to create far-right EP faction"",""resolved_url"":""http://euobserver.com/institutional/124719"",""excerpt"":""BRUSSELS - Far-right duo Marine Le Pen and Geert Wilders have failed to form a group in the European Parliament.  Wilders told Dutch media outlet ANP on Monday (23 June) they were unable to meet the minimum parliament criteria of having members from at least seven different member states."",""word_count"":""409""},{""item_id"":""650165498"",""favorite"":""0"",""status"":""1"",""time_added"":""1403724185"",""time_updated"":""1403952387"",""time_read"":""1403944606"",""time_favorited"":""0"",""sort_id"":743,""resolved_title"":""Run a background check on yourself for free"",""resolved_url"":""https://checkr.io/free-background-check"",""excerpt"":""Checkr is a new service offering fast and accurate background checks to the sharing economy. Try it on yourself for free."",""word_count"":""26""},{""item_id"":""650279772"",""favorite"":""0"",""status"":""1"",""time_added"":""1403724182"",""time_updated"":""1403952387"",""time_read"":""1403944850"",""time_favorited"":""0"",""sort_id"":744,""resolved_title"":""Nigel Farage renames EP political group"",""resolved_url"":""http://euobserver.com/tickers/124733"",""excerpt"":""Ukip leader Nigel Farage on Tuesday announced a name change for his eurosceptic European Parliament group. \""It was called the Europe of Freedom and Democracy group in the last parliament, it will be called the Europe of Freedom and Direct Democracy in this parliament,\"" he told reporters in Brussels."",""word_count"":""49""},{""item_id"":""650514711"",""favorite"":""0"",""status"":""1"",""time_added"":""1403716401"",""time_updated"":""1403952388"",""time_read"":""1403945305"",""time_favorited"":""0"",""sort_id"":747,""resolved_title"":""London housing crisis: what price bold policies?"",""resolved_url"":""http://www.theguardian.com/uk-news/davehillblog/2014/jun/24/london-housing-crisis-what-price-bold-policies"",""excerpt"":""A new survey has found that around one third of Londoners are worried about being able to pay their mortgages or rents and fear that high housing costs will force them to move from the area where they live. This, of course, is no surprise."",""word_count"":""690""},{""item_id"":""650941983"",""favorite"":""0"",""status"":""1"",""time_added"":""1403695757"",""time_updated"":""1404426039"",""time_read"":""1404426036"",""time_favorited"":""0"",""sort_id"":772,""resolved_title"":""See Robert the tank engine at Stratford station"",""resolved_url"":""http://www.tiredoflondontiredoflife.com/2014/06/see-robert-tank-engine-at-stratford.html"",""excerpt"":""Looking for things to do in London? Tired of London, Tired of Life suggests one thing a day. Tired of London, Tired of Life is a website about London which explores the city, suggesting things to do every day."",""word_count"":""245""},{""item_id"":""651180517"",""favorite"":""0"",""status"":""1"",""time_added"":""1403718183"",""time_updated"":""1403952387"",""time_read"":""1403944823"",""time_favorited"":""0"",""sort_id"":746,""resolved_title"":""US to extend privacy rights to EU citizens"",""resolved_url"":""http://euobserver.com/justice/124753"",""excerpt"":""BRUSSELS - The US plans to extend the same rights as Americans have to EU citizens whose data has been breached or misused in the US.  The news was announced at an EU meeting of home affairs ministers in Athenson Wednesday (25 June) by US attorney general Erik Holder."",""word_count"":""369""},{""item_id"":""651486824"",""favorite"":""0"",""status"":""1"",""time_added"":""1403803271"",""time_updated"":""1404247666"",""time_read"":""1404247663"",""time_favorited"":""0"",""sort_id"":728,""resolved_title"":""The Elephant was a Trojan Horse: On the Death of Map-Reduce at Google"",""resolved_url"":""http://the-paper-trail.org/blog/the-elephant-was-a-trojan-horse-on-the-death-of-map-reduce-at-google/"",""excerpt"":""Map-Reduce is on its way out. But we shouldn’t measure its importance in the number of bytes it crunches, but the fundamental shift in data processing architectures it helped popularise."",""word_count"":""705""},{""item_id"":""652019725"",""favorite"":""0"",""status"":""1"",""time_added"":""1403803266"",""time_updated"":""1404248273"",""time_read"":""1404248271"",""time_favorited"":""0"",""sort_id"":731,""resolved_title"":""Independent Scotland would face £500 million EU bill"",""resolved_url"":""http://euobserver.com/news/124767"",""excerpt"":""BRUSSELS - An independent Scotland would pay an extra £500 million a year to stay in the European Union, former UK prime minister Gordon Brown has told MEPs."",""word_count"":""426""},{""item_id"":""655142467"",""favorite"":""0"",""status"":""1"",""time_added"":""1404236053"",""time_updated"":""1404247441"",""time_read"":""1404247437"",""time_favorited"":""0"",""sort_id"":717,""resolved_title"":""ISIS Is Dead, Long Live the Islamic State"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/06/30/isis_is_dead_long_live_the_islamic_state_iraq_syria"",""excerpt"":""Will the declaration of a new caliphate unite the world’s jihadists -- or tear them apart? \r \t \t     \t\t \t\t   \r On the first night of\r Ramadan, the spokesman for the Islamic State of Iraq and al-Sham (ISIS)\r announced a step that he described as \""a dream that lives in the depths of\r every Muslim"",""word_count"":""1792""},{""item_id"":""655649421"",""favorite"":""0"",""status"":""1"",""time_added"":""1404236051"",""time_updated"":""1404247475"",""time_read"":""1404247474"",""time_favorited"":""0"",""sort_id"":718,""resolved_title"":""All you need to know about ProRes: Direct from Apple"",""resolved_url"":""http://www.redsharknews.com/technology/item/1808-all-you-need-to-know-about-prores-direct-from-apple"",""excerpt"":""We've written about that here (in our article about the announcement of XQ and ARRI's adoption of it) and here, where we talk about the reasons for using ProRes and Avid's functional equivalent to it, DNxHD."",""word_count"":""94""},{""item_id"":""655957445"",""favorite"":""0"",""status"":""1"",""time_added"":""1404331537"",""time_updated"":""1404373033"",""time_read"":""1404373029"",""time_favorited"":""0"",""sort_id"":715,""resolved_title"":""Here's the Lawless Hellscape Colorado Has Become Six Months After Legalizing Weed"",""resolved_url"":""http://mic.com/articles/92449/six-months-after-legalizing-marijuana-two-big-things-have-happened-in-colorado"",""excerpt"":""It's now been six months since Colorado enacted its historic marijuana legalization policy, and two big things have already happened:  1. Colorado's cash crop is turning out to be even more profitable than the state could have hoped."",""word_count"":""884""},{""item_id"":""656077183"",""favorite"":""0"",""status"":""1"",""time_added"":""1404767219"",""time_updated"":""1405001213"",""time_read"":""1405001208"",""time_favorited"":""0"",""sort_id"":695,""resolved_title"":""Exclusive: Russia Vetoes House of Cards"",""resolved_url"":""http://thecable.foreignpolicy.com/posts/2014/07/01/russia_vetoes_house_of_cards"",""excerpt"":""Vladimir Putin's government has vetoed House of Cards.\r   \r Russia's United Nations delegation on Tuesday blocked a request by the producers of the popular Netflix political drama to film two episodes in the U.N."",""word_count"":""1052""},{""item_id"":""656213821"",""favorite"":""0"",""status"":""1"",""time_added"":""1404333313"",""time_updated"":""1404340015"",""time_read"":""1404340013"",""time_favorited"":""0"",""sort_id"":713,""resolved_title"":""How to Get Rich: Paul Graham on Money vs. Wealth"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/07/02/how-to-make-wealth-paul-graham-hackers-painters/"",""excerpt"":""Debunking the pie fallacy, or why there’s more to success than giving people what they want."",""word_count"":""1772""},{""item_id"":""656418259"",""favorite"":""0"",""status"":""1"",""time_added"":""1404604351"",""time_updated"":""1412804182"",""time_read"":""1404678804"",""time_favorited"":""0"",""sort_id"":707,""resolved_title"":""Don't Be Scared Of Functional Programming"",""resolved_url"":""http://www.smashingmagazine.com/2014/07/02/dont-be-scared-of-functional-programming/"",""excerpt"":""Functional programming is the mustachioed hipster of programming paradigms."",""word_count"":""3358""},{""item_id"":""656533649"",""favorite"":""0"",""status"":""1"",""time_added"":""1404331537"",""time_updated"":""1404339260"",""time_read"":""1404339256"",""time_favorited"":""0"",""sort_id"":714,""resolved_title"":""UK \""Porn Filter\"" Triggers Widespread Internet Censorship"",""resolved_url"":""http://torrentfreak.com/uk-porn-filter-triggers-widespread-internet-censorship-140702/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""656712499"",""favorite"":""0"",""status"":""1"",""time_added"":""1404767217"",""time_updated"":""1404915302"",""time_read"":""1404915297"",""time_favorited"":""0"",""sort_id"":696,""resolved_title"":""One Billion Drinkers Can Be Wrong"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/07/02/baijiu_america_china_vomit_alcohol"",""excerpt"":""China's most popular spirit is coming to the U.S. Here's why you shouldn't drink it.  Imagine discomfort. It's 3 a.m., and you're sitting in the\r back row of a long-distance bus. The man sitting next to you scratches his\r whale-sized belly and giggles as he sleeps."",""word_count"":""1724""},{""item_id"":""657409142"",""favorite"":""0"",""status"":""1"",""time_added"":""1404513705"",""time_updated"":""1404552582"",""time_read"":""1404552579"",""time_favorited"":""0"",""sort_id"":708,""resolved_title"":""Don't Just Learn to Code, Learn How to Think Like a Computer Scientist"",""resolved_url"":""http://lifehacker.com/dont-just-learn-to-code-learn-how-to-think-from-comput-1598683903"",""excerpt"":""Recently, there's been much debate over whether or not everyone should learn to code. Software engineer Yevgeniy Brikman says that this is the wrong question: there's a huge difference between learning programming and learning computer science, which is the more valuable skill."",""word_count"":""526""},{""item_id"":""658106632"",""favorite"":""0"",""status"":""1"",""time_added"":""1404484834"",""time_updated"":""1404604353"",""time_read"":""1404556940"",""time_favorited"":""0"",""sort_id"":710,""resolved_title"":""Why historians should learn how to code (at least a bit)"",""resolved_url"":""http://doinghistoryinpublic.org/2014/07/03/why-historians-should-learn-how-to-code/"",""excerpt"":""Historians spend hours and hours in front of computer screens and paper sources from other centuries trying to create a cohesive narrative. Mostly we use Microsoft Word to write down our ideas and the internet to browse for information. But our computers can offer us way more than that."",""word_count"":""1041""},{""item_id"":""659810253"",""favorite"":""0"",""status"":""1"",""time_added"":""1404767214"",""time_updated"":""1405076893"",""time_read"":""1405076887"",""time_favorited"":""0"",""sort_id"":698,""resolved_title"":""EUobserver / German-US relations strained by new spy scandal"",""resolved_url"":""http://euobserver.com/foreign/124877"",""excerpt"":""BRUSSELS - Relations between Germany and the US are being strained by a new scandal after the arrest of a German spy who was allegedly also working for the American intelligence services."",""word_count"":""385""},{""item_id"":""659846671"",""favorite"":""0"",""status"":""1"",""time_added"":""1404759275"",""time_updated"":""1405001470"",""time_read"":""1405001464"",""time_favorited"":""0"",""sort_id"":702,""resolved_title"":""Buddhist Economics: How to Stop Prioritizing Goods Over People and Consumption Over Creative Activity"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/07/07/buddhist-economics-schumacher/"",""excerpt"":""“Work and leisure are complementary parts of the same living process and cannot be separated without destroying the joy of work and the bliss of leisure."",""word_count"":""1597""},{""item_id"":""659852735"",""favorite"":""0"",""status"":""1"",""time_added"":""1404759277"",""time_updated"":""1405076766"",""time_read"":""1405076761"",""time_favorited"":""0"",""sort_id"":701,""resolved_title"":""EUobserver / Several EU states impose arms ban on Russia"",""resolved_url"":""http://euobserver.com/investigations/124883"",""excerpt"":""BRUSSELS - Most of the EU’s top arms exporters have imposed a quiet ban on sales to Russia, but Ukraine’s military embargo is likely to have a bigger impact on the crisis."",""word_count"":""1007""},{""item_id"":""659891829"",""favorite"":""0"",""status"":""1"",""time_added"":""1404759278"",""time_updated"":""1404981454"",""time_read"":""1404981447"",""time_favorited"":""0"",""sort_id"":700,""resolved_title"":""How Google Map Hackers Can Destroy a Business at Will"",""resolved_url"":""http://www.wired.com/2014/07/hacking-google-maps/"",""excerpt"":""Washington DC-area residents with a hankering for lion meat lost a valuable source of the (yes, legal) delicacy last year when a restaurant called the Serbian Crown closed its doors after nearly 40 years in the same location."",""word_count"":""1522""},{""item_id"":""659955919"",""favorite"":""0"",""status"":""1"",""time_added"":""1404745823"",""time_updated"":""1404981044"",""time_read"":""1404981037"",""time_favorited"":""0"",""sort_id"":706,""resolved_title"":""The Next Big Programming Language You’ve Never Heard Of"",""resolved_url"":""http://www.wired.com/2014/07/d-programming-language/"",""excerpt"":""Andrei Alexandrescu didn’t stand much of a chance. And neither did Walter Bright.  When the two men met for beers at a Seattle bar in 2005, each was in the midst of building a new programming language, trying to remake the way the world creates and runs its computer software."",""word_count"":""1733""},{""item_id"":""660151946"",""favorite"":""0"",""status"":""1"",""time_added"":""1404767220"",""time_updated"":""1404808857"",""time_read"":""1404808852"",""time_favorited"":""0"",""sort_id"":694,""resolved_title"":""'Remote control' contraceptive chip available 'by 2018'"",""resolved_url"":""http://www.bbc.co.uk/news/technology-28193720"",""excerpt"":""The chip is implanted under a woman's skin, releasing a small dose of levonorgestrel, a hormone.  This will happen every day for 16 years, but can be stopped at any time by using a wireless remote control."",""word_count"":""396""},{""item_id"":""660167357"",""favorite"":""0"",""status"":""1"",""time_added"":""1404759274"",""time_updated"":""1404915466"",""time_read"":""1404915462"",""time_favorited"":""0"",""sort_id"":703,""resolved_title"":""MIT And Dropbox Alums Launch Inbox, A Next-Generation Email Platform"",""resolved_url"":""http://techcrunch.com/2014/07/07/mit-and-dropbox-alums-launch-inbox-a-next-generation-email-platform/"",""excerpt"":""Founded by Dropbox and MIT alums, a new startup called Inbox is launching out of stealth today, hoping to power the next generation of email applications. Similar to the newly launched Gmail API, Inbox offers a more modern way to build apps that access end users’ inboxes."",""word_count"":""619""},{""item_id"":""660176294"",""favorite"":""0"",""status"":""1"",""time_added"":""1404759269"",""time_updated"":""1405076973"",""time_read"":""1405076965"",""time_favorited"":""0"",""sort_id"":705,""resolved_title"":""Node.js on the Arduino Yún via the Bridge library"",""resolved_url"":""http://blog.arduino.cc/2014/07/07/node-js-on-the-arduino-yun/"",""excerpt"":""Tom Igoe some days ago wrote an interesting post about Arduino Yún on his blog.  We post it here as it could be useful to the Arduino Community.  Recently, Federico Fissore added node.js to the package repository for the Arduino Yún."",""word_count"":""324""},{""item_id"":""660787033"",""favorite"":""0"",""status"":""1"",""time_added"":""1404864282"",""time_updated"":""1404915607"",""time_read"":""1404915605"",""time_favorited"":""0"",""sort_id"":692,""resolved_title"":""MIT finger device reads to the blind in real time"",""resolved_url"":""http://www.washingtonpost.com/national/health-science/mit-finger-device-reads-to-the-blind-in-real-time/2014/07/08/6f7841f8-0660-11e4-a7ef-9ed5d8510e81_story.html"",""excerpt"":""CAMBRIDGE, Mass. — Scientists at the Massachusetts Institute of Technology are developing an audio reading device to be worn on the index finger of people whose vision is impaired, giving them affordable and immediate access to printed words."",""word_count"":""686""},{""item_id"":""661240091"",""favorite"":""0"",""status"":""0"",""time_added"":""1416662939"",""time_updated"":""1416662939"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":63,""resolved_title"":""Fighting Poverty with Code"",""resolved_url"":""https://medium.com/@dilvie/fighting-poverty-with-code-d1ed3ebd982d"",""excerpt"":""In 2008 I lost everything. By spring, 2009 I had to sell my house. I was penniless and couch surfing with friends. JavaScript turned that all around. Fast forward to 2010, I had a great job, and I was commuting through downtown San Francisco."",""word_count"":""2203""},{""item_id"":""663374384"",""favorite"":""0"",""status"":""1"",""time_added"":""1406744365"",""time_updated"":""1409755248"",""time_read"":""1409755243"",""time_favorited"":""0"",""sort_id"":683,""resolved_title"":""Need Microsoft Office on Ubuntu? Install the Official Web Apps"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/07/run-microsoft-office-web-apps-ubuntu-desktop"",""excerpt"":""It’s not everyone’s cup of joe, but Microsoft Office and its family of finicky file formats are a mainstay of many working and educational environments — for better or worse."",""word_count"":""390""},{""item_id"":""663822242"",""favorite"":""0"",""status"":""1"",""time_added"":""1408613159"",""time_updated"":""1409521067"",""time_read"":""1409486489"",""time_favorited"":""0"",""sort_id"":606,""resolved_title"":""How we end up marrying the wrong people"",""resolved_url"":""http://thephilosophersmail.com/relationships/how-we-end-up-marrying-the-wrong-people/"",""excerpt"":""Anyone we could marry would, of course, be a little wrong for us. It is wise to be appropriately pessimistic here. Perfection is not on the cards. Unhappiness is a constant."",""word_count"":""3228""},{""item_id"":""666661511"",""favorite"":""0"",""status"":""1"",""time_added"":""1406480256"",""time_updated"":""1411370574"",""time_read"":""1411331367"",""time_favorited"":""0"",""sort_id"":688,""resolved_title"":""D-Lib Magazine In Brief and In the News"",""resolved_url"":""http://www.dlib.org/dlib/july14/07inbrief.html#MORRIS"",""excerpt"":""Contributed by Cassidy R. Sugimoto Assistant Professor Department of Information and Library Science School of Informatics and Computing Indiana University Bloomington Bloomington, Indiana, USA sugimoto [at] indiana.edu"",""word_count"":""4894""},{""item_id"":""667230976"",""favorite"":""0"",""status"":""1"",""time_added"":""1406731712"",""time_updated"":""1409865820"",""time_read"":""1409865817"",""time_favorited"":""0"",""sort_id"":684,""resolved_title"":""Why Spotify Ditching Debian for Ubuntu Offers Opportunities for Both"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/07/spotify-switches-5000-servers-ubuntu?utm_source=rss&utm_medium=rss&utm_campaign=spotify-switches-5000-servers-ubuntu"",""excerpt"":""One of the world’s most popular music streaming services has migrated 5000 of its servers over to Ubuntu.  Spotify says it switched its backend server deployments away from Debian and onto 14.04 to take advantage of the latter’s ‘predictable release cycle and long term support’."",""word_count"":""334""},{""item_id"":""667474969"",""favorite"":""0"",""status"":""1"",""time_added"":""1406731710"",""time_updated"":""1411370574"",""time_read"":""1411332521"",""time_favorited"":""0"",""sort_id"":685,""resolved_title"":""How DreamHost is reinventing itself with OpenStack"",""resolved_url"":""http://www.dreamhost.com/dreamscape/2014/07/16/how-dreamhost-is-reinventing-itself-with-openstack/"",""excerpt"":""Founded in 1997, DreamHost is a seasoned internet business home to over 400,000 happy customers, 1.5 million sites and applications, and hundreds of thousands of installs of WordPress, the dominant open source CMS."",""word_count"":""1345""},{""item_id"":""670485806"",""favorite"":""0"",""status"":""1"",""time_added"":""1409847534"",""time_updated"":""1410775053"",""time_read"":""1410724853"",""time_favorited"":""0"",""sort_id"":448,""resolved_title"":""The Web Audio API - From Node/Express to Your Browser"",""resolved_url"":""http://www.willvillanueva.com/the-web-audio-api-from-nodeexpress-to-your-browser/"",""excerpt"":""If you're like me, then you're probably pretty excited about the web audio API. In my opinion, it is one of the most interesting developments in the evolution of the web. Up until recently, you could not natively synthesize or edit sounds within the browser."",""word_count"":""949""},{""item_id"":""671000549"",""favorite"":""1"",""status"":""1"",""time_added"":""1412614493"",""time_updated"":""1413317794"",""time_read"":""1413317790"",""time_favorited"":""1413317790"",""sort_id"":255,""resolved_title"":""Netflix and the future of television."",""resolved_url"":""http://www.newyorker.com/magazine/2014/02/03/outside-the-box-2"",""excerpt"":""In the spring of 2000, Reed Hastings, the C.E.O. of Netflix, hired a private plane and flew from San Jose to Dallas for a summit meeting with Blockbuster, the video-rental giant that had seventy-seven hundred stores worldwide handling mostly VCR tapes."",""word_count"":""6161""},{""item_id"":""671427049"",""favorite"":""0"",""status"":""1"",""time_added"":""1411764966"",""time_updated"":""1412117684"",""time_read"":""1412117679"",""time_favorited"":""0"",""sort_id"":352,""resolved_title"":""How Chris McCandless Died"",""resolved_url"":""http://www.newyorker.com/books/page-turner/how-chris-mccandless-died"",""excerpt"":""Twenty-one years ago this month, on September 6, 1992, the decomposed body of Christopher McCandless was discovered by moose hunters just outside the northern boundary of Denali National Park."",""word_count"":""2637""},{""item_id"":""672123257"",""favorite"":""0"",""status"":""1"",""time_added"":""1406987650"",""time_updated"":""1407223346"",""time_read"":""1407223342"",""time_favorited"":""0"",""sort_id"":636,""resolved_title"":""Vuze Releases Leap, a Simple and Lightweight Torrent Client"",""resolved_url"":""http://torrentfreak.com/vuze-releases-leap-a-simple-and-lightweight-torrent-client-140722/"",""excerpt"":""The makers of the popular file-sharing software Vuze have released a brand new BitTorrent client. Vuze Leap is a dummy-proof application with a simple interface, which uses minimal resources. According to the company there is a massive demand for a clean and straightforward BitTorrent client."",""word_count"":""498""},{""item_id"":""672490445"",""favorite"":""0"",""status"":""1"",""time_added"":""1406985030"",""time_updated"":""1407223420"",""time_read"":""1407223418"",""time_favorited"":""0"",""sort_id"":638,""resolved_title"":""Deutsche Bank under fire in the US"",""resolved_url"":""http://euobserver.com/economic/125081"",""excerpt"":""BRUSSELS - Two separate reports by the US central bank and the Senate have criticised Deutsche Bank for having internal irregularities and for helping investment funds to avoid taxes."",""word_count"":""216""},{""item_id"":""672505981"",""favorite"":""0"",""status"":""1"",""time_added"":""1406985029"",""time_updated"":""1407223436"",""time_read"":""1407223433"",""time_favorited"":""0"",""sort_id"":639,""resolved_title"":""Russian oligarchs moving money out of London"",""resolved_url"":""http://euobserver.com/tickers/125083"",""excerpt"":""Russian oligarchs are moving money from London following threats of tough financial sanctions after the attack on Flight MH17, reports the Daily Telegraph."",""word_count"":""49""},{""item_id"":""672531217"",""favorite"":""0"",""status"":""1"",""time_added"":""1406985027"",""time_updated"":""1407225767"",""time_read"":""1407225762"",""time_favorited"":""0"",""sort_id"":641,""resolved_title"":""The UK Did *NOT* Just Decriminalize File-Sharing"",""resolved_url"":""http://torrentfreak.com/the-uk-did-not-just-decriminalize-file-sharing-140723/"",""excerpt"":""All it took yesterday was a single article to trigger off a tidal wave of copycat reports across dozens of sites including the mainstream RT.com. Just to be absolutely clear - Britain HAS NOT decriminalized file-sharing and to suggest otherwise only puts people at unnecessary risk."",""word_count"":""851""},{""item_id"":""672945574"",""favorite"":""0"",""status"":""1"",""time_added"":""1406914447"",""time_updated"":""1418088769"",""time_read"":""1418088768"",""time_favorited"":""0"",""sort_id"":655,""resolved_title"":""Creating a Sentiment Analysis Application Using Node.js"",""resolved_url"":""http://www.sitepoint.com/creating-sentiment-analysis-application-using-node-js/"",""excerpt"":""Sentiment analysis helps you in understanding what people think about a certain topic. The sentiment analysis app we are going to build will take in a keyword(s) and will fetch the matching tweets from Twitter. Then, it will run each tweet through an AFINN powered sentiment analysis Node module."",""word_count"":""2155""},{""item_id"":""673833225"",""favorite"":""0"",""status"":""1"",""time_added"":""1406919117"",""time_updated"":""1407265913"",""time_read"":""1407265907"",""time_favorited"":""0"",""sort_id"":650,""resolved_title"":""EU blacklists more Russians, prepares economic sanctions"",""resolved_url"":""http://euobserver.com/foreign/125100"",""excerpt"":""BRUSSELS - EU ambassadors in a marathon meeting on Thursday (24 July) added 15 more individuals, nine companies and nine institutions from Russia and east Ukraine to an existing blacklist of 72 individuals and two firms linked to the annexation of Crimea."",""word_count"":""762""},{""item_id"":""674202526"",""favorite"":""0"",""status"":""1"",""time_added"":""1406919113"",""time_updated"":""1407258257"",""time_read"":""1407258253"",""time_favorited"":""0"",""sort_id"":652,""resolved_title"":""Migrant: An Alice in Wonderland for the Modern Immigrant Experience"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/07/25/migrant-trottier-arsenault/"",""excerpt"":""Having spent my entire adult life as an immigrant, with all the relocations, bureaucracies, and social strain implied, I have tremendous respect for any effort to capture the complexities of the immigrant experience, its joys and its struggles, without robbing it of dimension."",""word_count"":""595""},{""item_id"":""674300188"",""favorite"":""0"",""status"":""1"",""time_added"":""1406914449"",""time_updated"":""1407265977"",""time_read"":""1407265973"",""time_favorited"":""0"",""sort_id"":653,""resolved_title"":""Economic Recovery: ‘UK has fastest-growing economy’"",""resolved_url"":""http://www.voxeurop.eu/en/content/news-brief/4798825-uk-has-fastest-growing-economy"",""excerpt"":""Britain’s economy is recovering more quickly than those of every other major developed country, writes The Daily Telegraph after the International Monetary Fund upgraded its growth forecast to 3.2 per cent this year and 2.7 per cent in 2015."",""word_count"":""184""},{""item_id"":""674573792"",""favorite"":""0"",""status"":""1"",""time_added"":""1406906514"",""time_updated"":""1408840256"",""time_read"":""1408840254"",""time_favorited"":""0"",""sort_id"":662,""resolved_title"":""Using Firebase Simple Login with Ionic and PhoneGap"",""resolved_url"":""https://www.firebase.com/blog/2014-07-25-ionic-simple-login.html"",""excerpt"":""On the surface PhoneGap looks like the holy grail of app development. Write the app’s code once, and deploy to multiple platforms. Unfortunately, it’s not always that straightforward. Developing with PhoneGap can be tricky at times."",""word_count"":""2255""},{""item_id"":""674604664"",""favorite"":""0"",""status"":""1"",""time_added"":""1406914448"",""time_updated"":""1407266268"",""time_read"":""1407266263"",""time_favorited"":""0"",""sort_id"":654,""resolved_title"":""US Wants to Criminalize Movie and Music Streaming"",""resolved_url"":""http://torrentfreak.com/obama-administration-wants-criminalize-movie-streaming-140725/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""676291374"",""favorite"":""0"",""status"":""1"",""time_added"":""1406906532"",""time_updated"":""1407320004"",""time_read"":""1407319984"",""time_favorited"":""0"",""sort_id"":657,""resolved_title"":""Multi-billion losses expected from Russia sanctions"",""resolved_url"":""http://euobserver.com/economic/125118"",""excerpt"":""BRUSSELS - EU diplomats on Monday (28 July) are to pour over the legal texts drafted by the EU commission for imposing sectoral economic sanctions on Russia for its role in the Ukrainian conflict. The sanctions are expected to be approved on Tuesday."",""word_count"":""602""},{""item_id"":""676388275"",""favorite"":""0"",""status"":""1"",""time_added"":""1406906530"",""time_updated"":""1407320127"",""time_read"":""1407320109"",""time_favorited"":""0"",""sort_id"":658,""resolved_title"":""How to keep up with the Javascript Landscape Trends"",""resolved_url"":""http://orizens.com/wp/topics/how-to-keep-up-with-the-javascript-landscape-trends/"",""excerpt"":""Often, friends ask me how I keep up with all the news and trends in the javascript world. They wonder about the extensive knowledge, answers and information I have about web development today, and specifically – front end web development."",""word_count"":""530""},{""item_id"":""676609170"",""favorite"":""0"",""status"":""1"",""time_added"":""1406906517"",""time_updated"":""1407321005"",""time_read"":""1407320987"",""time_favorited"":""0"",""sort_id"":660,""resolved_title"":""Orban wants to build 'illiberal state'"",""resolved_url"":""http://euobserver.com/political/125128"",""excerpt"":""BRUSSELS - Hungary leader Viktor Orban has said he wants to build an illiberal state based on national foundations, citing Russia and China as examples."",""word_count"":""413""},{""item_id"":""676609196"",""favorite"":""0"",""status"":""1"",""time_added"":""1406906516"",""time_updated"":""1411370574"",""time_read"":""1411332847"",""time_favorited"":""0"",""sort_id"":661,""resolved_title"":""Denmark, Germany benefit most from EU market"",""resolved_url"":""http://euobserver.com/economic/125125"",""excerpt"":""BRUSSELS - The Danish and German economies have benefited most among 14 EU countries from the expansion of the bloc's single market between 1992-2012, according to a study published Monday (28 July) by the Bertelsmann Stiftung, a German foundation."",""word_count"":""330""},{""item_id"":""677331329"",""favorite"":""0"",""status"":""1"",""time_added"":""1406640481"",""time_updated"":""1411370574"",""time_read"":""1411331905"",""time_favorited"":""0"",""sort_id"":686,""resolved_title"":""Spending Big to Fight Big Donors in Campaigns"",""resolved_url"":""http://www.nytimes.com/2014/07/29/us/spending-big-to-fight-big-donors.html"",""excerpt"":""An unlikely alliance of liberal intellectuals, big donors and Republican strategists has hit on a solution to the influence of big money in politics: even more money."",""word_count"":""1158""},{""item_id"":""677400293"",""favorite"":""0"",""status"":""1"",""time_added"":""1406897914"",""time_updated"":""1409521067"",""time_read"":""1409487589"",""time_favorited"":""0"",""sort_id"":664,""resolved_title"":""Towards PhantomJS 2"",""resolved_url"":""http://ariya.ofilabs.com/2014/07/towards-phantomjs-2.html"",""excerpt"":""It is been a while since PhantomJS received a facelift. This is about to change, the current master branch is now running the unstable version of PhantomJS 2. Among others, thing brings the fresher Qt 5.3 and its updated QtWebKit module."",""word_count"":""247""},{""item_id"":""677984743"",""favorite"":""0"",""status"":""1"",""time_added"":""1406891601"",""time_updated"":""1409521067"",""time_read"":""1409488293"",""time_favorited"":""0"",""sort_id"":666,""resolved_title"":""EU to 'scrutinise' Cameron's migrant benefits plans"",""resolved_url"":""http://euobserver.com/justice/125144"",""excerpt"":""BRUSSELS - The British government announced on Tuesday (29 July) it will tighten benefits for unemployed migrants from the EU in plans the European Commission has said it will examine closely."",""word_count"":""448""},{""item_id"":""678047409"",""favorite"":""0"",""status"":""1"",""time_added"":""1406805001"",""time_updated"":""1409521067"",""time_read"":""1409488673"",""time_favorited"":""0"",""sort_id"":677,""resolved_title"":""Popcorn Time Adds Apple TV Support, iOS App Coming Soon"",""resolved_url"":""http://torrentfreak.com/popcorn-time-adds-apple-tv-support-ios-app-coming-soon-140730/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""678113968"",""favorite"":""0"",""status"":""1"",""time_added"":""1406989567"",""time_updated"":""1407238701"",""time_read"":""1407238697"",""time_favorited"":""0"",""sort_id"":635,""resolved_title"":""The NSA's Patents, in One Searchable Database"",""resolved_url"":""http://complex.foreignpolicy.com/posts/2014/07/30/the_nsas_patents_in_one_searchable_database_0"",""excerpt"":""What do a voice identifier, an automated translator, a \""tamper-indicating\"" document tube, and a supersecure manhole cover have in common? They're all technologies for which the secretive National Security Agency (NSA) has been granted patents by the U.S."",""word_count"":""708""},{""item_id"":""678479029"",""favorite"":""0"",""status"":""1"",""time_added"":""1406805000"",""time_updated"":""1411370574"",""time_read"":""1411332932"",""time_favorited"":""0"",""sort_id"":678,""resolved_title"":""EU blacklists three Putin 'cronies'"",""resolved_url"":""http://euobserver.com/foreign/125157"",""excerpt"":""BRUSSELS - The EU on Wednesday (30 July) for the first time included three of Vladimir Putin's loyal oligarchs and his propaganda chief on an existing blacklist in response to Russia's continued \""destabilisation\"" of Ukraine."",""word_count"":""968""},{""item_id"":""678518947"",""favorite"":""0"",""status"":""1"",""time_added"":""1406804997"",""time_updated"":""1409521067"",""time_read"":""1409488619"",""time_favorited"":""0"",""sort_id"":679,""resolved_title"":""Bleep... BitTorrent Unveils Serverless & Encrypted Chat Client"",""resolved_url"":""http://torrentfreak.com/bleep-bittorrent-unveils-serverless-chat-client-140730/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""678550776"",""favorite"":""0"",""status"":""1"",""time_added"":""1406817890"",""time_updated"":""1412333108"",""time_read"":""1412333100"",""time_favorited"":""0"",""sort_id"":672,""resolved_title"":""The United States Has Outspent the Marshall Plan to Rebuild Afghanistan"",""resolved_url"":""http://blog.foreignpolicy.com/posts/2014/07/30/the_united_states_has_outspent_the_marshall_plan_to_rebuild_afghanistan"",""excerpt"":""In June of 1947, Secretary of State George Marshall delivered a wholly unexpected commencement speech to the newly minted graduates of Harvard University."",""word_count"":""991""},{""item_id"":""678833541"",""favorite"":""0"",""status"":""1"",""time_added"":""1406817888"",""time_updated"":""1409521067"",""time_read"":""1409488458"",""time_favorited"":""0"",""sort_id"":673,""resolved_title"":""Network visualization game to understand how a disease spreads"",""resolved_url"":""http://flowingdata.com/2014/07/31/network-visualization-game-to-understand-how-a-disease-spreads/"",""excerpt"":""Vax, a game by Ellsworth Campbell and Isaac Bromley, explores how a disease spreads through a network, starting with just one infected person. It's a simple concept that works well.  When you start the game, you have a network of uninfected people."",""word_count"":""89""},{""item_id"":""678865028"",""favorite"":""0"",""status"":""1"",""time_added"":""1406803975"",""time_updated"":""1411370574"",""time_read"":""1411332695"",""time_favorited"":""0"",""sort_id"":680,""resolved_title"":""EU-US Free trade agreement: TTIP in danger as Berlin might refuse agreement with Canada"",""resolved_url"":""http://www.voxeurop.eu/en/content/news-brief/4801039-ttip-danger-berlin-might-refuse-agreement-canada"",""excerpt"":""The German Government might refuse the fully negotiated free trade agreement between the European Union and Canada (CETA) amidst “fears, foreign firms might get too much power”, according to a report by Cerstin Gammelin, EU correspondent for the Südddeutsche Zeitung."",""word_count"":""343""},{""item_id"":""678865516"",""favorite"":""0"",""status"":""1"",""time_added"":""1406795650"",""time_updated"":""1411370574"",""time_read"":""1411332004"",""time_favorited"":""0"",""sort_id"":682,""resolved_title"":""Functional requirements for integrated news room systems"",""resolved_url"":""https://tech.ebu.ch/Jahia/site/tech/cache/offonce/news/functional-requirements-for-integrated-n-22jul14"",""excerpt"":""Newsroom systems have been around for a long time, but their focus is shifting. In order to cope with the ever-changing way that consumers take in information, new room systems now place more focus on integrated production for TV, radio and online."",""word_count"":""196""},{""item_id"":""678873187"",""favorite"":""0"",""status"":""1"",""time_added"":""1406803972"",""time_updated"":""1411370574"",""time_read"":""1411332599"",""time_favorited"":""0"",""sort_id"":681,""resolved_title"":""Piracy Fight Needs Content Available at a Fair Price, Minister Says"",""resolved_url"":""http://torrentfreak.com/piracy-fight-needs-content-available-at-a-fair-price-minister-says-140731/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""679243770"",""favorite"":""0"",""status"":""1"",""time_added"":""1406978539"",""time_updated"":""1407223620"",""time_read"":""1407223616"",""time_favorited"":""0"",""sort_id"":642,""resolved_title"":""The Chinese Zoo Restaurant That Served Zoo Animals"",""resolved_url"":""http://blog.foreignpolicy.com/posts/2014/07/30/the_chinese_zoo_restaurant_that_served_zoo_animals"",""excerpt"":""In\r China, just as in the United States, people see zoos as breeding grounds for\r animals, not corruption. So it was with great mirth that Beijing papers\r announced the investigation of Xiao Shaoxiang, a former deputy director of the\r Beijing Zoo, suspected of embezzling $2.26 million."",""word_count"":""691""},{""item_id"":""679647481"",""favorite"":""0"",""status"":""1"",""time_added"":""1407510708"",""time_updated"":""1408241799"",""time_read"":""1407672491"",""time_favorited"":""0"",""sort_id"":624,""resolved_title"":""What you should know before starting node-webkit"",""resolved_url"":""http://yedingding.com/2014/08/01/node-webkit-intro-en.html"",""excerpt"":""This article is translated by Wendy of my article 开始 NODE-WEBKIT 前，你应该知道的. Wendy now lives in Toronto, Canada and is looking to join a startup in US or Canada as backend developer to build innovative products that make people’s lives easier and more efficient."",""word_count"":""1051""},{""item_id"":""680081404"",""favorite"":""0"",""status"":""1"",""time_added"":""1406965006"",""time_updated"":""1407257899"",""time_read"":""1407256780"",""time_favorited"":""0"",""sort_id"":646,""resolved_title"":""Exclusive: Hackers Infiltrate Chinese TV Station"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/08/01/exclusive_pro_democracy_hackers_hijack_chinese_tv_station"",""excerpt"":""Messages denouncing the \""Communist Party bandits\"" parade across Chinese televisions in Wenzhou. This story has been updated. Friday evening television viewers in Wenzhou, a city in eastern Zhejiang province, saw their normal programming interrupted by anti-Communist Party messages."",""word_count"":""600""},{""item_id"":""680236418"",""favorite"":""1"",""status"":""1"",""time_added"":""1406965012"",""time_updated"":""1409521067"",""time_read"":""1409487422"",""time_favorited"":""1409487421"",""sort_id"":643,""resolved_title"":""Become a Better Storyteller Through Dungeons & Dragons"",""resolved_url"":""http://lifehacker.com/become-a-better-storyteller-through-dungeons-dragons-1614615213"",""excerpt"":""As a storyteller of any kind, the way you weave your narrative decides whether people keep reading, watching, or listening. The classic role-playing game Dungeons & Dragons can teach you how to construct strong narrative and how to collaborate with others in a way that's a whole lot of fun."",""word_count"":""366""},{""item_id"":""683514859"",""favorite"":""0"",""status"":""1"",""time_added"":""1409862046"",""time_updated"":""1410070735"",""time_read"":""1410070720"",""time_favorited"":""0"",""sort_id"":425,""resolved_title"":""What is it that makes GoPro so successful?"",""resolved_url"":""http://www.redsharknews.com/business/item/1881-what-is-it-that-makes-gopro-so-successful"",""excerpt"":""You’ve got to search for the hero inside yourself. A new internal video, GoPro Our Story, provides a good jumping off point to assess exactly what it is that make GoPro so dominant when it comes to POV.  If we go back a few years there were a few companies making cheap POV cameras."",""word_count"":""406""},{""item_id"":""684427916"",""favorite"":""0"",""status"":""1"",""time_added"":""1409862040"",""time_updated"":""1409984839"",""time_read"":""1409984835"",""time_favorited"":""0"",""sort_id"":426,""resolved_title"":""The average media company has 100,000 undigitised tapes. Sony's here to help."",""resolved_url"":""http://www.redsharknews.com/business/item/1892-the-average-media-company-has-100,000-undigitised-tapes-sony-s-here-to-help"",""excerpt"":""Sony says that its new Media Lifecycle Service wraps its expertise in digitisation, storage and archiving, digital content distribution and asset monetisation all into a single business.  According to research Sony has undertaken ,the average media company has 100,000 undigitised tapes."",""word_count"":""378""},{""item_id"":""685258565"",""favorite"":""0"",""status"":""1"",""time_added"":""1407509076"",""time_updated"":""1409521067"",""time_read"":""1409486828"",""time_favorited"":""0"",""sort_id"":630,""resolved_title"":""Economic sanctions: ‘Russia launches trade war with EU and US’"",""resolved_url"":""http://www.voxeurop.eu/en/content/news-brief/4805995-russia-launches-trade-war-eu-and-us"",""excerpt"":""In response to sanctions imposed over the Ukraine crisis, Russia has banned food imports from the European Union and the United States in a move that could affect £50m (€63m) worth of Scottish goods and leave shelves empty in Russian cities, writes The Scotsman."",""word_count"":""168""},{""item_id"":""685297152"",""favorite"":""0"",""status"":""1"",""time_added"":""1412614490"",""time_updated"":""1413021283"",""time_read"":""1413021274"",""time_favorited"":""0"",""sort_id"":258,""resolved_title"":""For London's Cabbies, Job Entails World's Hardest Geography Test"",""resolved_url"":""http://news.nationalgeographic.com/news/special-features/2014/08/140808-london-cabbies-knowledge-cabs-hansom-uber-hippocampus-livery/"",""excerpt"":""LONDON—Steve Scotland had better reason than most for thinking he knew London like the back of his hand."",""word_count"":""4025""},{""item_id"":""685350942"",""favorite"":""0"",""status"":""0"",""time_added"":""1407509092"",""time_updated"":""1409521067"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":626,""resolved_title"":""Markov Chains explained visually"",""resolved_url"":""http://flowingdata.com/2014/08/08/markov-chains-explained-visually/"",""excerpt"":""Adding on to their series of graphics to explain statistical concepts, Victor Powell and Lewis Lehe use a set of interactives to describe Markov Chains."",""word_count"":""64""},{""item_id"":""685377619"",""favorite"":""0"",""status"":""1"",""time_added"":""1407508417"",""time_updated"":""1409521067"",""time_read"":""1409487157"",""time_favorited"":""0"",""sort_id"":631,""resolved_title"":""Apple macs might be getting a massive change"",""resolved_url"":""http://www.redsharknews.com/business/item/1900-apple-macs-might-be-getting-a-massive-change"",""excerpt"":""Could Apple possibly ditch Intel as its processor chip supplier? What would that mean? And how could it happen?  Ever since Apple started to make its own processor chips for iPhones and iPads there has been speculation that, eventually, these components would end up powering Macs."",""word_count"":""777""},{""item_id"":""685955029"",""favorite"":""0"",""status"":""1"",""time_added"":""1407596950"",""time_updated"":""1409521067"",""time_read"":""1409485128"",""time_favorited"":""0"",""sort_id"":622,""resolved_title"":""Exploring the Legal Basis for the New 'Pirate' Proxy War"",""resolved_url"":""http://torrentfreak.com/exploring-the-legal-basis-for-the-new-pirate-proxy-war-140809/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""686351339"",""favorite"":""0"",""status"":""1"",""time_added"":""1407849065"",""time_updated"":""1409521067"",""time_read"":""1409487350"",""time_favorited"":""0"",""sort_id"":621,""resolved_title"":""Istanbul's Gentrification Wars"",""resolved_url"":""https://news.vice.com/video/istanbuls-gentrification-wars"",""excerpt"":""The mass protests surrounding Gezi Park, the corruption scandals, the Soma mining accident — none of these incidents will stop the majority of Turks from electing Recep Tayyip Erdogan as president."",""word_count"":""254""},{""item_id"":""686850959"",""favorite"":""0"",""status"":""1"",""time_added"":""1407944936"",""time_updated"":""1408840103"",""time_read"":""1408840100"",""time_favorited"":""0"",""sort_id"":616,""resolved_title"":""Watch Netflix on Ubuntu Linux using HTML5 and Chrome"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/08/netflix-linux-html5-support-plugins"",""excerpt"":""Native Netflix Linux playback can be enabled in the latest beta and development builds of Google Chrome — no Wine-wrapped Silverlight plugin required."",""word_count"":""1029""},{""item_id"":""687466427"",""favorite"":""0"",""status"":""1"",""time_added"":""1407849161"",""time_updated"":""1409521067"",""time_read"":""1409460973"",""time_favorited"":""0"",""sort_id"":620,""resolved_title"":""Guardian publisher defends decision to publish anti-Hamas advertisement"",""resolved_url"":""http://www.theguardian.com/media/2014/aug/11/guardian-publisher-defends-anti-hamas-advert-decision"",""excerpt"":""The publisher of the Guardian has defended its decision to run a newspaper advertisement about the conflict in Gaza that called on David Cameron and other political leaders \""to condemn Hamas' use of children as human shields\""."",""word_count"":""602""},{""item_id"":""687594811"",""favorite"":""0"",""status"":""0"",""time_added"":""1409847531"",""time_updated"":""1409847531"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":450,""resolved_title"":""Authenticating Node.js Applications With Passport"",""resolved_url"":""https://code.tutsplus.com/tutorials/authenticating-nodejs-applications-with-passport--cms-21619"",""excerpt"":""Implementing robust authentication strategies for any application can be a daunting task and Node.js applications are no exception to this.  In this tutorial, we will develop a Node."",""word_count"":""2309""},{""item_id"":""688011156"",""favorite"":""0"",""status"":""1"",""time_added"":""1409848509"",""time_updated"":""1410034121"",""time_read"":""1410034102"",""time_favorited"":""0"",""sort_id"":440,""resolved_title"":""Let's Take a Trip Inside a Power Strip!"",""resolved_url"":""http://www.tomshardware.com/picturestory/661-power-strip-bar-surge-protection.html#xtor=RSS-182"",""excerpt"":""!"",""word_count"":""0""},{""item_id"":""688101319"",""favorite"":""0"",""status"":""1"",""time_added"":""1408456152"",""time_updated"":""1409521067"",""time_read"":""1409485705"",""time_favorited"":""0"",""sort_id"":608,""resolved_title"":""Siri’s Inventors Are Building a Radical New AI That Does Anything You Ask"",""resolved_url"":""http://www.wired.com/2014/08/viv/"",""excerpt"":""When Apple announced the iPhone 4S on October 4, 2011, the headlines were not about its speedy A5 chip or improved camera. Instead they focused on an unusual new feature: an intelligent assistant, dubbed Siri."",""word_count"":""2881""},{""item_id"":""688670527"",""favorite"":""0"",""status"":""1"",""time_added"":""1407947405"",""time_updated"":""1409521066"",""time_read"":""1409460367"",""time_favorited"":""0"",""sort_id"":611,""resolved_title"":""Lauren Bacall, cinema icon of Hollywood's golden age, 1924-2014"",""resolved_url"":""http://boingboing.net/2014/08/12/lauren-bacall-leading-lady-of.html"",""excerpt"":""Lauren Bacall, the great actor who became best known as Humphrey Bogart's on and offscreen partner, has died. She was 89, and died Tuesday morning of a stroke at her longtime home at the Dakota, a famous building in New York City overlooking Central Park.  The Bogart Estate first tweeted the news."",""word_count"":""55""},{""item_id"":""688709644"",""favorite"":""0"",""status"":""1"",""time_added"":""1407947404"",""time_updated"":""1408583876"",""time_read"":""1408579792"",""time_favorited"":""0"",""sort_id"":612,""resolved_title"":""Fields Medal mathematics prize won by woman for first time in its history"",""resolved_url"":""http://www.theguardian.com/science/2014/aug/13/fields-medal-mathematics-prize-woman-maryam-mirzakhani"",""excerpt"":""It will go down in history as the moment one of the last bastions of male dominance fell. A woman has won the world's most prestigious mathematics prize for the first time since the award was established nearly 80 years ago."",""word_count"":""1162""},{""item_id"":""689107074"",""favorite"":""0"",""status"":""1"",""time_added"":""1409848512"",""time_updated"":""1410416538"",""time_read"":""1410380452"",""time_favorited"":""0"",""sort_id"":437,""resolved_title"":""Why Can't the United States Build a High-Speed Rail System?"",""resolved_url"":""http://www.citylab.com/politics/2014/08/why-cant-the-united-states-build-a-high-speed-rail-system/375980/"",""excerpt"":""Virtually every wealthy nation in the world has invested in a high-speed rail network—with the striking exception of the United States."",""word_count"":""1145""},{""item_id"":""689140608"",""favorite"":""0"",""status"":""1"",""time_added"":""1407944935"",""time_updated"":""1409521066"",""time_read"":""1409460701"",""time_favorited"":""0"",""sort_id"":617,""resolved_title"":""Ubuntu Can: Answering 4 Questions Asked by New Users"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/08/ubuntu-can-play-games-replace-windows-questions?utm_source=rss&utm_medium=rss&utm_campaign=ubuntu-can-play-games-replace-windows-questions"",""excerpt"":""Type ‘Can Ubuntu’ into Google and you’ll see a stream of auto suggested terms based on the queries being asked most by searchers.  For long-time Linux users these queries all have rather obvious answers."",""word_count"":""673""},{""item_id"":""689213430"",""favorite"":""0"",""status"":""1"",""time_added"":""1407944934"",""time_updated"":""1409521067"",""time_read"":""1409460735"",""time_favorited"":""0"",""sort_id"":618,""resolved_title"":""The Redesign of DreamHost.com: Ain’t Nobody Got Time for That!"",""resolved_url"":""http://www.dreamhost.com/dreamscape/2014/08/11/the-redesign-of-dreamhost-com-aint-nobody-got-time-for-that/"",""excerpt"":""Howdy, Internet. My name is Jason W. Brown, and thanks to all of the experimenting my parents did while I was in the womb, I am what some people would call a creative person."",""word_count"":""331""},{""item_id"":""689245140"",""favorite"":""0"",""status"":""1"",""time_added"":""1408877882"",""time_updated"":""1409521066"",""time_read"":""1409458800"",""time_favorited"":""0"",""sort_id"":600,""resolved_title"":""Amazon invests in Acquia"",""resolved_url"":""http://buytaert.net/amazon-invests-in-acquia"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""689291626"",""favorite"":""1"",""status"":""1"",""time_added"":""1409769410"",""time_updated"":""1410458428"",""time_read"":""1410436501"",""time_favorited"":""1410436493"",""sort_id"":467,""resolved_title"":""Data visualization rules, 1915"",""resolved_url"":""http://sappingattention.blogspot.co.uk/2014/08/data-visualization-rules-1915.html"",""excerpt"":""Right now people in data visualization tend to be interested in their field’s history, and people in digital humanities tend to be fascinated by data visualization."",""word_count"":""510""},{""item_id"":""689308302"",""favorite"":""0"",""status"":""1"",""time_added"":""1409848516"",""time_updated"":""1410340767"",""time_read"":""1410296537"",""time_favorited"":""0"",""sort_id"":434,""resolved_title"":""What's the matter with PGP?"",""resolved_url"":""http://blog.cryptographyengineering.com/2014/08/whats-matter-with-pgp.html"",""excerpt"":""Before we can communicate via PGP, we first need to exchange keys. PGP makes this downright unpleasant. In some cases, dangerously so. Part of the problem lies in the nature of PGP public keys themselves."",""word_count"":""771""},{""item_id"":""689372897"",""favorite"":""0"",""status"":""1"",""time_added"":""1409848515"",""time_updated"":""1410034052"",""time_read"":""1410033941"",""time_favorited"":""0"",""sort_id"":435,""resolved_title"":""What Do Blind People Actually See?"",""resolved_url"":""http://nautil.us/blog/what-do-blind-people-actually-see"",""excerpt"":""In 2004 Peter König made a special belt: one that always vibrated on the side of it facing north. Put on the belt and face north, and it would vibrate in the front; turn to face west and it vibrated on the right side."",""word_count"":""703""},{""item_id"":""689931663"",""favorite"":""0"",""status"":""1"",""time_added"":""1408877878"",""time_updated"":""1409521066"",""time_read"":""1409458921"",""time_favorited"":""0"",""sort_id"":601,""resolved_title"":""FuelBand Fibers – Visualizing training data with Plask"",""resolved_url"":""http://www.creativeapplications.net/javascript-2/fuelband-fibers-visualizing-training-data-with-plask/"",""excerpt"":""Created by Variable, a studio set up by Marcin Ignac in 2012, Fibers is a visualization of Nike FuelBand data from the trainings preceding We Own The Night – Nike Women’s 10K run. To celebrate effort of preparing for the run 7 influential runners equipped with FuelBands were chosen."",""word_count"":""178""},{""item_id"":""691594740"",""favorite"":""0"",""status"":""1"",""time_added"":""1409846236"",""time_updated"":""1410417098"",""time_read"":""1410417089"",""time_favorited"":""0"",""sort_id"":453,""resolved_title"":""PhantomJS 2 and JavaScript Goodies"",""resolved_url"":""http://ariya.ofilabs.com/2014/08/phantomjs-2-and-javascript-goodies.html"",""excerpt"":""As I mentioned in my earlier blog post, we are now working torward stabilizing the development version of PhantomJS. One thing I would like to elaborate here with respect to the features of this forthcoming PhantomJS 2 is its improved JavaScript support.  With the fresher WebKit (thanks to Qt 5."",""word_count"":""316""},{""item_id"":""692406633"",""favorite"":""0"",""status"":""1"",""time_added"":""1408846593"",""time_updated"":""1412333017"",""time_read"":""1412333010"",""time_favorited"":""0"",""sort_id"":604,""resolved_title"":""Living in: The world’s most visited cities"",""resolved_url"":""http://www.bbc.com/travel/feature/20140815-living-in-the-worlds-most-visited-cities"",""excerpt"":""The same attractions that prompt people to love visiting a city – top-ranked restaurants, vibrant nightlife, diverse neighbourhoods, iconic sights – can entice them into staying longer term."",""word_count"":""2476""},{""item_id"":""692412827"",""favorite"":""0"",""status"":""1"",""time_added"":""1409848502"",""time_updated"":""1410034692"",""time_read"":""1410034665"",""time_favorited"":""0"",""sort_id"":442,""resolved_title"":""A brief history of USB, what it replaced, and what has failed to replace it"",""resolved_url"":""http://arstechnica.com/gadgets/2014/08/a-brief-history-of-usb-what-it-replaced-and-what-has-failed-to-replace-it/"",""excerpt"":""Like all technology, USB has evolved over time. Despite being a “Universal” Serial Bus, in its 18-or-so years on the market it has spawned multiple versions with different connection speeds and many, many types of cables."",""word_count"":""2864""},{""item_id"":""692417648"",""favorite"":""0"",""status"":""1"",""time_added"":""1408382294"",""time_updated"":""1409521066"",""time_read"":""1409460343"",""time_favorited"":""0"",""sort_id"":609,""resolved_title"":""Here’s Why Stealing Cars Went Out of Fashion"",""resolved_url"":""http://www.nytimes.com/2014/08/12/upshot/heres-why-stealing-cars-went-out-of-fashion.html"",""excerpt"":""Auto theft isn’t much of a problem anymore in New York City. In 1990, the city had 147,000 reported auto thefts, one for every 50 residents; last year, there were just 7,400, or one per 1,100. That’s a 96 percent drop in the rate of car theft."",""word_count"":""924""},{""item_id"":""692437603"",""favorite"":""0"",""status"":""1"",""time_added"":""1409849462"",""time_updated"":""1410340767"",""time_read"":""1410296222"",""time_favorited"":""0"",""sort_id"":427,""resolved_title"":""The fastest camera in the world: 4.4 trillion FPS"",""resolved_url"":""http://www.redsharknews.com/technology/item/1925-the-fastest-camera-in-the-world-4-4-trillion-fps"",""excerpt"":""Researchers in Japan have developed a special use camera that records at an incomprehensibly high frame rate."",""word_count"":""285""},{""item_id"":""692660267"",""favorite"":""0"",""status"":""1"",""time_added"":""1409845285"",""time_updated"":""1412501778"",""time_read"":""1412501776"",""time_favorited"":""0"",""sort_id"":455,""resolved_title"":""How We Think"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/08/18/how-we-think-john-dewey/"",""excerpt"":""How We Think is a magnificent read in its entirety, exploring everything from the defects and potential reform of the education system to how we can train ourselves to interpret facts and create meaning out of them. It is available as a free ebook.  Brain Pickings has a free weekly newsletter."",""word_count"":""227""},{""item_id"":""692674071"",""favorite"":""0"",""status"":""1"",""time_added"":""1409845284"",""time_updated"":""1412237717"",""time_read"":""1412237713"",""time_favorited"":""0"",""sort_id"":456,""resolved_title"":""An Atlas of Alternative Maps by Tim Berners-Lee, Ed Ruscha, Yoko Ono, Damien Hirst, John Maeda, Kevin Kelly, John Baldessari, and More"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/08/18/mapping-it-out-obrist/"",""excerpt"":""For all the spiritual benefits of getting lost, we humans are habitually driven to orient ourselves to the world and find our place in it. It is no surprise, then, that maps captivate our imagination so powerfully."",""word_count"":""1080""},{""item_id"":""692977706"",""favorite"":""0"",""status"":""1"",""time_added"":""1408869351"",""time_updated"":""1412333781"",""time_read"":""1412333776"",""time_favorited"":""0"",""sort_id"":602,""resolved_title"":""A Magna Carta for the web"",""resolved_url"":""http://www.ted.com/talks/tim_berners_lee_a_magna_carta_for_the_web"",""excerpt"":""Sir Tim Berners-Lee invented the World Wide Web 25 years ago. So it’s worth a listen when he warns us: There’s a battle ahead. Eroding net neutrality, filter bubbles and centralizing corporate control all threaten the web’s wide-open spaces. It’s up to users to fight for the right to access and openness. The question is, What kind of Internet do we want?"",""word_count"":""0""},{""item_id"":""693634273"",""favorite"":""0"",""status"":""1"",""time_added"":""1408468355"",""time_updated"":""1408667689"",""time_read"":""1408667682"",""time_favorited"":""0"",""sort_id"":607,""resolved_title"":""Cryptography Expert Says, 'PGP Encryption is Fundamentally Broken, Time for PGP to Die'"",""resolved_url"":""http://thehackernews.com/2014/08/cryptography-expert-pgp-encryption-is_19.html"",""excerpt"":""A Senior cryptography expert has claimed multiple issues with PGP email encryption - an open source end-to-end encryption to secure email."",""word_count"":""431""},{""item_id"":""693673873"",""favorite"":""0"",""status"":""1"",""time_added"":""1408847555"",""time_updated"":""1410649292"",""time_read"":""1410588973"",""time_favorited"":""0"",""sort_id"":603,""resolved_title"":""Munich May Reverse Linux Migration and Return to Windows"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/08/munich-city-linux-switching-back-windows?utm_source=rss&utm_medium=rss&utm_campaign=munich-city-linux-switching-back-windows"",""excerpt"":""Munich’s much vaunted migration to Linux could be about to unravel, sending the city back into the fee-driven bosom of Microsoft."",""word_count"":""366""},{""item_id"":""694403134"",""favorite"":""0"",""status"":""1"",""time_added"":""1409845283"",""time_updated"":""1410703725"",""time_read"":""1410703720"",""time_favorited"":""0"",""sort_id"":458,""resolved_title"":""Inside, Outside, Upside-Down: A Sweet Children’s Book About Understanding the World Through Relative Positions"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/08/20/inside-outside-upside-down-yasmeen-ismail/"",""excerpt"":""A gentle reminder that everything is a matter of perspective."",""word_count"":""161""},{""item_id"":""694694376"",""favorite"":""0"",""status"":""1"",""time_added"":""1409845278"",""time_updated"":""1410417427"",""time_read"":""1410417420"",""time_favorited"":""0"",""sort_id"":459,""resolved_title"":""Touching a Laptop Can Break Its Encryption"",""resolved_url"":""http://www.technologyreview.com/news/530251/how-to-break-cryptography-with-your-bare-hands/"",""excerpt"":""With enough technical savvy, simply touching a laptop can suffice to extract the cryptographic keys used to secure data stored on it."",""word_count"":""440""},{""item_id"":""694803926"",""favorite"":""0"",""status"":""1"",""time_added"":""1409845276"",""time_updated"":""1410419216"",""time_read"":""1410419205"",""time_favorited"":""0"",""sort_id"":462,""resolved_title"":""Navigation: RadSec"",""resolved_url"":""https://radsec.org/"",""excerpt"":""Full-body scanners (also known as “advanced imaging technology”) are used as the primary passenger screening mechanism in airports across the United States and many other countries."",""word_count"":""273""},{""item_id"":""694964021"",""favorite"":""0"",""status"":""1"",""time_added"":""1409845276"",""time_updated"":""1410775287"",""time_read"":""1410775277"",""time_favorited"":""0"",""sort_id"":461,""resolved_title"":""GNU hackers discover HACIENDA government surveillance and give us a way to fight back — Free Software Foundation — working together for free software"",""resolved_url"":""http://www.fsf.org/blogs/community/gnu-hackers-discover-hacienda-government-surveillance-and-give-us-a-way-to-fight-back"",""excerpt"":""According to Heise online, the intelligence agencies of the United States, Canada, United Kingdom, Australia, and New Zealand, have used HACIENDA to map every server in twenty-seven countries, employing a technique known as port scanning."",""word_count"":""366""},{""item_id"":""695033686"",""favorite"":""0"",""status"":""1"",""time_added"":""1409845275"",""time_updated"":""1410952124"",""time_read"":""1410816464"",""time_favorited"":""0"",""sort_id"":463,""resolved_title"":""At Burning Man, the Tech Elite One-Up One Another"",""resolved_url"":""http://www.nytimes.com/2014/08/21/fashion/at-burning-man-the-tech-elite-one-up-one-another.html"",""excerpt"":""There are two disciplines in which Silicon Valley entrepreneurs excel above almost everyone else. The first is making exorbitant amounts of money. The second is pretending they don’t care about that money."",""word_count"":""1266""},{""item_id"":""695286003"",""favorite"":""0"",""status"":""1"",""time_added"":""1409828934"",""time_updated"":""1411505439"",""time_read"":""1410434438"",""time_favorited"":""0"",""sort_id"":466,""resolved_title"":""Maurice Sendak’s Rare, Sensual Illustrations for Herman Melville’s Greatest Commercial Failure and Most Personally Beloved Book"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/08/21/maurice-sendak-pierre-herman-melville/"",""excerpt"":""“The strongest and fieriest emotions of life defy all analytical insight."",""word_count"":""1106""},{""item_id"":""695555582"",""favorite"":""0"",""status"":""1"",""time_added"":""1409759587"",""time_updated"":""1412548934"",""time_read"":""1412548932"",""time_favorited"":""0"",""sort_id"":477,""resolved_title"":""Essay · CHINA'S FUTURE"",""resolved_url"":""http://www.economist.com/news/essays/21609649-china-becomes-again-worlds-largest-economy-it-wants-respect-it-enjoyed-centuries-past-it-does-not"",""excerpt"":""As China becomes, again, the world's largest economy, it wants the respect it enjoyed in centuries past. But it does not know how to achieve or deserve it"",""word_count"":""5542""},{""item_id"":""695562040"",""favorite"":""0"",""status"":""1"",""time_added"":""1409766298"",""time_updated"":""1412582813"",""time_read"":""1412582811"",""time_favorited"":""0"",""sort_id"":469,""resolved_title"":""AngularJS vs. Backbone.js vs. Ember.js"",""resolved_url"":""http://www.airpair.com/js/javascript-framework-comparison"",""excerpt"":""In this article we are going to compare three popular MV* frameworks for the web: AngularJS vs. Backbone vs. Ember. Choosing the right framework for your project can have a huge impact on your ability to deliver on time, and your ability to maintain your code in the future."",""word_count"":""2629""},{""item_id"":""695609286"",""favorite"":""0"",""status"":""1"",""time_added"":""1409757851"",""time_updated"":""1410952124"",""time_read"":""1410906477"",""time_favorited"":""0"",""sort_id"":483,""resolved_title"":""An Introduction To PouchDB"",""resolved_url"":""https://blog.engineyard.com/2014/an-introduction-to-pouchdb"",""excerpt"":""PouchDB is a great way to replicate data from a remote source in the browser. Once you’ve replicated the data, you can then query and process it. In this series of articles, we give a gentle introduction to PouchDB, including code to get you up and running."",""word_count"":""1356""},{""item_id"":""695856401"",""favorite"":""0"",""status"":""1"",""time_added"":""1408694095"",""time_updated"":""1409069403"",""time_read"":""1409009606"",""time_favorited"":""0"",""sort_id"":605,""resolved_title"":""Selene – An audio/video converter"",""resolved_url"":""http://www.ubuntugeek.com/selene-an-audiovideo-converter.html"",""excerpt"":""Sponsored Link  Selene is an audio/video converter for converting files to OGG/OGV/ MKV/MP4/WEBM/OPUS/AAC/FLAC/MP3/WAV formats. It aims to provide a simple GUI for converting files to popular formats along with powerful command-line options for automated/unattended encoding."",""word_count"":""206""},{""item_id"":""696376840"",""favorite"":""0"",""status"":""1"",""time_added"":""1409759587"",""time_updated"":""1414977699"",""time_read"":""1414977696"",""time_favorited"":""0"",""sort_id"":476,""resolved_title"":""THE LEGEND OF JOHN VON NEUMANN"",""resolved_url"":""http://stepanov.lk.net/mnemo/legende.html"",""excerpt"":""Youth. He was born December 28, 1903, in Budapest, Hungary. He was the eldest of three sons in a well-to-do Jewish family."",""word_count"":""595""},{""item_id"":""696426716"",""favorite"":""0"",""status"":""1"",""time_added"":""1409719985"",""time_updated"":""1410775053"",""time_read"":""1410725464"",""time_favorited"":""0"",""sort_id"":496,""resolved_title"":""China's 'Hormone Economy': Monetizing Male Loneliness"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/08/22/cashing_in_chinas_hormone_economy_yy_online_hostesses"",""excerpt"":""Online hostesses are making hundreds of thousands of dollars in hard cash as men buy virtual Ferraris, flowers, and even titles of nobility to impress them."",""word_count"":""1369""},{""item_id"":""696630707"",""favorite"":""0"",""status"":""1"",""time_added"":""1409759586"",""time_updated"":""1410952124"",""time_read"":""1410816657"",""time_favorited"":""0"",""sort_id"":478,""resolved_title"":""Oregon sues Oracle, claiming fraud over failed Obamacare website"",""resolved_url"":""http://news.yahoo.com/oregon-sues-oracle-claiming-fraud-over-failed-obamacare-213323763--finance.html"",""excerpt"":""PORTLAND Ore. (Reuters) - The state of Oregon sued Oracle America Inc. and six of its top executives Friday, accusing the software giant of fraud for failing to deliver a working website for the Affordable Care Act program."",""word_count"":""332""},{""item_id"":""696949200"",""favorite"":""0"",""status"":""1"",""time_added"":""1409759583"",""time_updated"":""1410721418"",""time_read"":""1410721372"",""time_favorited"":""0"",""sort_id"":479,""resolved_title"":""How I work as a digital nomad"",""resolved_url"":""http://typicalprogrammer.com/how-i-work-as-a-digital-nomad/"",""excerpt"":""I was asked today on Twitter about how to find work as a digital nomad. My comments are too long for a Twitter reply and may be interesting to people who don’t follow me on Twitter, so here goes.  @MethyleneGaming Be flexible. Line up work in advance. Get banking set up."",""word_count"":""3282""},{""item_id"":""697154007"",""favorite"":""0"",""status"":""1"",""time_added"":""1409672394"",""time_updated"":""1410649291"",""time_read"":""1410552101"",""time_favorited"":""0"",""sort_id"":527,""resolved_title"":""Is London such a terrible place to live?"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/aug/23/is-london-a-good-place-to-live"",""excerpt"":""According to the Economist Intelligence Unit's annual index, London is among Europe's least \""livable\"" cities. The index looks at a number of factors, including stability, healthcare, environment, education and social unrest.   London is a cruel city."",""word_count"":""1292""},{""item_id"":""697203068"",""favorite"":""0"",""status"":""1"",""time_added"":""1409759581"",""time_updated"":""1410952124"",""time_read"":""1410891730"",""time_favorited"":""0"",""sort_id"":480,""resolved_title"":""Why Are PC Sales Up And Tablet Sales Down?"",""resolved_url"":""http://techcrunch.com/2014/08/23/why-are-pcs-up-and-tablets-down/"",""excerpt"":""Editor’s note: Peter Yared is the founder and CTO of Sapho and was formerly the CTO/CIO of CBS Interactive.  When iPads first came out, they were hailed as the undoing of the PC. Finally, a cheap and reliable computing device for the average user instead of the complicated, quirky PC."",""word_count"":""1506""},{""item_id"":""698350952"",""favorite"":""0"",""status"":""1"",""time_added"":""1409658666"",""time_updated"":""1411282752"",""time_read"":""1411282742"",""time_favorited"":""0"",""sort_id"":552,""resolved_title"":""Looking for a Simplenote Linux App? One Could Be On The Way"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/08/simplenote-linux-app-happen-help?utm_source=rss&utm_medium=rss&utm_campaign=simplenote-linux-app-happen-help"",""excerpt"":""Simplenote does it exactly what it says: takes notes, simply.  Could this be about to change? If you have the skills, yes."",""word_count"":""643""},{""item_id"":""698468983"",""favorite"":""0"",""status"":""1"",""time_added"":""1412117723"",""time_updated"":""1412208628"",""time_read"":""1412208623"",""time_favorited"":""0"",""sort_id"":325,""resolved_title"":""For God's Sake, Stop Digitizing Paper"",""resolved_url"":""http://www.avpreserve.com/blog/for-gods-sake-stop-digitizing-paper-2/"",""excerpt"":""We are all aware of the expectation from the general public that EverythingEver is digitized and available online already."",""word_count"":""1160""},{""item_id"":""698562165"",""favorite"":""0"",""status"":""1"",""time_added"":""1409693945"",""time_updated"":""1410520005"",""time_read"":""1410519992"",""time_favorited"":""0"",""sort_id"":505,""resolved_title"":""What Happened to Motorola"",""resolved_url"":""http://www.chicagomag.com/Chicago-Magazine/September-2014/What-Happened-to-Motorola/"",""excerpt"":""On the 18th floor of the Merchandise Mart, in a soaring two-story space underneath a vast industrial-looking stairway, a small crowd of business types, pols, and journalists gathers."",""word_count"":""5842""},{""item_id"":""698563291"",""favorite"":""0"",""status"":""1"",""time_added"":""1409848518"",""time_updated"":""1409985064"",""time_read"":""1409985061"",""time_favorited"":""0"",""sort_id"":432,""resolved_title"":""Announcing Scumblr and Sketchy - Search, Screenshot, and Reclaim the Internet"",""resolved_url"":""http://techblog.netflix.com/2014/08/announcing-scumblr-and-sketchy-search.html"",""excerpt"":""Netflix is pleased to announce the open source release of two security-related web applications: Scumblr and Sketchy! Many security teams need to stay on the lookout for Internet-based discussions, posts, and other bits that may be of impact to the organizations they are protecting."",""word_count"":""681""},{""item_id"":""698679889"",""favorite"":""0"",""status"":""1"",""time_added"":""1409011812"",""time_updated"":""1409521066"",""time_read"":""1409459225"",""time_favorited"":""0"",""sort_id"":598,""resolved_title"":""Lingotto: The factory that launched a million Fiats"",""resolved_url"":""http://www.bbc.com/autos/story/20140825-a-racetrack-in-the-sky"",""excerpt"":""Each specially reinforced Cooper carries a heavy, illicit cargo of gold bullion, and each is having trouble giving the police-liveried Alfa Romeo Giulias the slip.  Bursting out from a tunnel, the red, white and blue Minis are chased across the roof of a building."",""word_count"":""846""},{""item_id"":""698797682"",""favorite"":""0"",""status"":""1"",""time_added"":""1409719984"",""time_updated"":""1410952124"",""time_read"":""1410936421"",""time_favorited"":""0"",""sort_id"":497,""resolved_title"":""Release of American Journalist Shows Qatar Playing Both Sides"",""resolved_url"":""http://blog.foreignpolicy.com/posts/2014/08/25/release_of_american_journalist_shows_qatar_playing_both_sides"",""excerpt"":""Those are the words of Amy Rosen, a cousin of Peter Theo Curtis, the American journalist who was released from his captivity in Syria over the weekend."",""word_count"":""488""},{""item_id"":""699001004"",""favorite"":""0"",""status"":""1"",""time_added"":""1409758615"",""time_updated"":""1410952124"",""time_read"":""1410816748"",""time_favorited"":""0"",""sort_id"":482,""resolved_title"":""How William Gibson Coined “Cyberspace”"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/08/26/how-william-gibson-coined-cyberspace/"",""excerpt"":""The moment when fragments of reality were “mushed together” to describe a new realm.  In 1982, writer William Gibson, thirty-four at the time, used a strange new word in his short story “Burning Chrome” to describe — presage, really — the emerging ecosystem sprouted by computer networks."",""word_count"":""191""},{""item_id"":""699250323"",""favorite"":""0"",""status"":""1"",""time_added"":""1409757849"",""time_updated"":""1417213197"",""time_read"":""1417213196"",""time_favorited"":""0"",""sort_id"":484,""resolved_title"":""Building Interactive HTML5 Videos"",""resolved_url"":""https://hacks.mozilla.org/2014/08/building-interactive-html5-videos/"",""excerpt"":""The HTML5 <video> element makes embedding videos into your site as easy as embedding images. And since all major browsers support <video> since 2011, it’s also the most reliable way to get your moving pictures seen by people.  A more recent addition to the HTML5 family is the <track> element."",""word_count"":""1026""},{""item_id"":""699607353"",""favorite"":""0"",""status"":""1"",""time_added"":""1409502295"",""time_updated"":""1410649292"",""time_read"":""1410588789"",""time_favorited"":""0"",""sort_id"":566,""resolved_title"":""Lady al Qaeda: The World's Most Wanted Woman"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/08/26/lady_al_qaeda_the_worlds_most_wanted_woman"",""excerpt"":""The Taliban wanted to trade Bergdahl for her. The Islamic State offered to swap Foley. Why does every jihadi group want the U.S. to free Aafia Siddiqui?  Two years ago, a group of senior U.S. national security officials received a tantalizing proposal from officials in Pakistan."",""word_count"":""1511""},{""item_id"":""699682989"",""favorite"":""0"",""status"":""1"",""time_added"":""1409669313"",""time_updated"":""1410469471"",""time_read"":""1410469466"",""time_favorited"":""0"",""sort_id"":530,""resolved_title"":""Campaigners Want to Block a Statue of 'Sexual Weirdo' Gandhi Being Built in London"",""resolved_url"":""http://www.vice.com/en_uk/read/anti-gandhi-statue-protest-dr-kusoom-vadgama-196"",""excerpt"":""On a visit to India in July, Chancellor George Osborne announced that a statue of Mahatma Gandhi would be erected in Parliament Square."",""word_count"":""1005""},{""item_id"":""699982793"",""favorite"":""0"",""status"":""1"",""time_added"":""1409693951"",""time_updated"":""1410775053"",""time_read"":""1410725727"",""time_favorited"":""0"",""sort_id"":501,""resolved_title"":""Anne Truitt on Resisting the Label “Artist” and the Difference Between Doing Art and Being an Artist"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/08/27/anne-truitt-daybook-artist/"",""excerpt"":""At the age of fifty-three, the influential artist Anne Truitt (March 16, 1921–December 23, 2004) confronted the existential discomfort any creative person feels in facing a major retrospective of his or her work — the Corcoran Gallery of Art had just staged one of Truitt’s."",""word_count"":""1454""},{""item_id"":""700283502"",""favorite"":""0"",""status"":""1"",""time_added"":""1409693947"",""time_updated"":""1410775054"",""time_read"":""1410726519"",""time_favorited"":""0"",""sort_id"":503,""resolved_title"":""Germany to ban EU citizens who abuse social systems"",""resolved_url"":""http://euobserver.com/social/125368"",""excerpt"":""BRUSSELS - The German government on Wednesday (27 August) approved draft legislation aimed at curbing 'welfare abuse' by other EU citizens coming to the country.  \""Freedom of movement is an indispensable element of European integration, which we fully support."",""word_count"":""567""},{""item_id"":""700324234"",""favorite"":""0"",""status"":""1"",""time_added"":""1409693946"",""time_updated"":""1410775054"",""time_read"":""1410726805"",""time_favorited"":""0"",""sort_id"":504,""resolved_title"":""The Technology behind Hyperlapse from Instagram"",""resolved_url"":""http://instagram-engineering.tumblr.com/post/95922900787/hyperlapse"",""excerpt"":""Yesterday we released Hyperlapse from Instagram—a new app that lets you capture and share moving time lapse videos. Time lapse photography is a technique in which frames are played back at a much faster rate than that at which they’re captured."",""word_count"":""1123""},{""item_id"":""700368642"",""favorite"":""0"",""status"":""1"",""time_added"":""1409686392"",""time_updated"":""1410649292"",""time_read"":""1410554558"",""time_favorited"":""0"",""sort_id"":513,""resolved_title"":""Inside one of the world's largest bitcoin mines"",""resolved_url"":""http://www.thecoinsman.com/2014/08/bitcoin/inside-one-worlds-largest-bitcoin-mines/"",""excerpt"":""A week after I visited the last bitcoin mine in northeast China, I was able to arrange a trip to a larger, even more secretive operation. These exclusive photos provide a glimpse inside one of China’s largest bitcoin mines.  Arriving at the site, I did not expect it to be so busy."",""word_count"":""491""},{""item_id"":""700435876"",""favorite"":""0"",""status"":""1"",""time_added"":""1409693944"",""time_updated"":""1412166661"",""time_read"":""1412166652"",""time_favorited"":""0"",""sort_id"":506,""resolved_title"":""High level key distribution / key discovery plans."",""resolved_url"":""https://code.google.com/p/end-to-end/wiki/KeyDistribution"",""excerpt"":""Key distribution is the hardest problem in end-to-end encryption. That is, how to allow Alice to fetch the necessary keys to encrypt messages that only Bob can read."",""word_count"":""2280""},{""item_id"":""700590130"",""favorite"":""0"",""status"":""1"",""time_added"":""1409502294"",""time_updated"":""1410649292"",""time_read"":""1410588873"",""time_favorited"":""0"",""sort_id"":567,""resolved_title"":""8 TB drives now exist!"",""resolved_url"":""http://www.redsharknews.com/technology/item/1957-8-tb-drives-now-exist"",""excerpt"":""You can tell how old someone is by how small a drive they remember buying. Actually, we're old enough to remember wax cylinders, but let's not talk about that.  Even those of us who are young enough to barely remember the last century probably recall buying drives in the low tens of gigabytes."",""word_count"":""260""},{""item_id"":""700849546"",""favorite"":""0"",""status"":""1"",""time_added"":""1409693941"",""time_updated"":""1414977587"",""time_read"":""1414977583"",""time_favorited"":""0"",""sort_id"":508,""resolved_title"":""Darwin’s Battle with Anxiety"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/08/28/darwin-anxiety/"",""excerpt"":""Charles Darwin was undoubtedly among the most significant thinkers humanity has ever produced. But he was also a man of peculiar mental habits, from his stringent daily routine to his despairingly despondent moods to his obsessive list of the pros and cons of marriage."",""word_count"":""1120""},{""item_id"":""700919296"",""favorite"":""0"",""status"":""1"",""time_added"":""1409502299"",""time_updated"":""1410649292"",""time_read"":""1410555977"",""time_favorited"":""0"",""sort_id"":565,""resolved_title"":""ioGates release version 4.6"",""resolved_url"":""http://www.redsharknews.com/post/item/1952-iogates-release-version-4-6"",""excerpt"":""ioGates, who are based in Denmark, first started working on a web based video management tool in 2003, so they have plenty of experience in dealing with video sharing and transcoding."",""word_count"":""759""},{""item_id"":""700935537"",""favorite"":""0"",""status"":""1"",""time_added"":""1409686400"",""time_updated"":""1410649292"",""time_read"":""1410554025"",""time_favorited"":""0"",""sort_id"":509,""resolved_title"":""What would a UK flag look like without Scotland?"",""resolved_url"":""http://www.creativereview.co.uk/cr-blog/2014/august/what-the-fuk"",""excerpt"":""On September 18, Scotland will hold a vote on independence which could herald the break-up of the UK as we know it. If the Scots vote yes, will the UK need a new flag? If so, what would it look like? Atelier Works' Quentin Newark and Kevin Denoual have some suggestions"",""word_count"":""1605""},{""item_id"":""701062529"",""favorite"":""0"",""status"":""1"",""time_added"":""1409686395"",""time_updated"":""1411547557"",""time_read"":""1411547551"",""time_favorited"":""0"",""sort_id"":511,""resolved_title"":""What People Cured of Blindness See"",""resolved_url"":""http://www.newyorker.com/tech/elements/people-cured-blindness-see"",""excerpt"":""In 2011, Dr. Pawan Sinha, a professor of vision and computational neuroscience at M.I.T., published his answer to an almost-four-hundred-year-old philosophical problem."",""word_count"":""1091""},{""item_id"":""701074346"",""favorite"":""0"",""status"":""0"",""time_added"":""1409500717"",""time_updated"":""1409500717"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":586,""resolved_title"":""ECMAScript 6: what’s next for JavaScript? (June 2014)"",""resolved_url"":""https://speakerdeck.com/rauschma/ecmascript-6-whats-next-for-javascript-august-2014"",""excerpt"":""Other Presentations by this Speaker        Other Presentations in Programming        Featured Presentations"",""word_count"":""11""},{""item_id"":""701095450"",""favorite"":""0"",""status"":""1"",""time_added"":""1409686389"",""time_updated"":""1410649292"",""time_read"":""1410555093"",""time_favorited"":""0"",""sort_id"":515,""resolved_title"":""View jQuery and jQuery Live events in Firefox DevTools"",""resolved_url"":""http://flailingmonkey.com/view-jquery-and-jquery-live-events-in-firefox-devtools/"",""excerpt"":""A little while back we landed a feature that made it possible to interact with events from the markup panel of Firefox developer tools."",""word_count"":""318""},{""item_id"":""701196658"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500714"",""time_updated"":""1414977336"",""time_read"":""1414977328"",""time_favorited"":""0"",""sort_id"":589,""resolved_title"":""Watch: First Trailer For Jon Stewart's 'Rosewater' Starring Gael Garcia Bernal"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/watch-first-trailer-for-jon-stewarts-rosewater-starring-gael-garcia-bernal-20140828"",""excerpt"":""He's got numerous Emmys, a Grammy, and a Peabody award to his name, among many other accolades. So will Jon Stewart put an Oscar on his mantle come next year? Well, \""The Daily Show\"" host is going to try."",""word_count"":""167""},{""item_id"":""701626913"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500716"",""time_updated"":""1412324562"",""time_read"":""1412324556"",""time_favorited"":""0"",""sort_id"":587,""resolved_title"":""Cause of ALS is found, Northwestern team says"",""resolved_url"":""http://www.chicagotribune.com/lifestyles/health/ct-met-northwestern-als-breakthrough-20110822-story.html"",""excerpt"":""Researchers at Northwestern University say they have discovered a common cause behind the mysterious and deadly affliction of amyotrophic lateral sclerosis, or Lou Gehrig's disease, that could open the door to an effective treatment.  Dr."",""word_count"":""743""},{""item_id"":""702054873"",""favorite"":""0"",""status"":""1"",""time_added"":""1409499198"",""time_updated"":""1410649928"",""time_read"":""1410649926"",""time_favorited"":""0"",""sort_id"":591,""resolved_title"":""Experimental Ebola drug cured 100% of monkeys tested"",""resolved_url"":""http://www.usatoday.com/story/news/nation/2014/08/29/ebola-zmapp-success-monkeys/14793487/"",""excerpt"":""In what scientists are calling a \""monumental achievement,\"" an experimental medication called ZMapp — given on a compassionate basis to a handful of Ebola victims in the current outbreak — cured 100% of monkeys treated in a Canadian study, researchers announced Friday."",""word_count"":""962""},{""item_id"":""702173557"",""favorite"":""0"",""status"":""1"",""time_added"":""1409686391"",""time_updated"":""1411196653"",""time_read"":""1411196644"",""time_favorited"":""0"",""sort_id"":514,""resolved_title"":""UN issues warning over new EU sea patrol"",""resolved_url"":""http://euobserver.com/tickers/125401"",""excerpt"":""The UNCHR has warned an EU sea border patrol could lead to more migrants dying trying to cross the Mediterranean Sea if it does not match resources put in by Italy. The European Commission announced plans for a Frontex plus mission to replace Italy's Mare Nostrum programme on Tuesday."",""word_count"":""49""},{""item_id"":""702414320"",""favorite"":""0"",""status"":""1"",""time_added"":""1409502301"",""time_updated"":""1411505274"",""time_read"":""1411483547"",""time_favorited"":""0"",""sort_id"":563,""resolved_title"":""Downshifting from Ocado to Lidl to try and save money ... but at what price?"",""resolved_url"":""http://www.theguardian.com/money/2014/aug/30/lidl-tesco-ocado-save-cost-shopping-everyday-value"",""excerpt"":""Since moving to the countryside and having a second child, my shopping habits have altered dramatically. I used to do the big weekly shop at Tesco and then my husband would do a deli shop on Friday night for a weekend treat. But once we moved, I developed an Ocado habit."",""word_count"":""1542""},{""item_id"":""702439182"",""favorite"":""0"",""status"":""1"",""time_added"":""1409502291"",""time_updated"":""1412583129"",""time_read"":""1412583128"",""time_favorited"":""0"",""sort_id"":568,""resolved_title"":""Getting started with Jenkins and Node — RisingStack Blog — Medium"",""resolved_url"":""https://medium.com/p/getting-started-with-jenkins-and-node-f859934d0249"",""excerpt"":""Jenkins is an application that monitors executions of repeated jobs, such as building a software project. Jenkins focuses on two main areas:  Jenkins is great for setting up continuous integration/deployment."",""word_count"":""335""},{""item_id"":""702584342"",""favorite"":""0"",""status"":""1"",""time_added"":""1409502302"",""time_updated"":""1412166767"",""time_read"":""1412166746"",""time_favorited"":""0"",""sort_id"":562,""resolved_title"":""Burning Man festival – in pictures"",""resolved_url"":""http://www.theguardian.com/culture/gallery/2014/aug/30/burning-man-festival-in-pictures"",""excerpt"":""An aerial view of the festival and camps. Photograph: Jim Urquart/Reuters"",""word_count"":""0""},{""item_id"":""702616116"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500731"",""time_updated"":""1412322981"",""time_read"":""1412322976"",""time_favorited"":""0"",""sort_id"":576,""resolved_title"":""Tusk and Mogherini are EU 'dynamic duo'"",""resolved_url"":""http://euobserver.com/tickers/125408"",""excerpt"":""Finnish PM Stubb said in Brussels on Saturday that Polish PM Tusk and Italian FM Mogherini are a \""probably the dynamic duo which will lead Europe in the future\"", referring to the EU posts of Council head and foreign affairs chief, respectively, up for grabs at a summit later today."",""word_count"":""50""},{""item_id"":""702688252"",""favorite"":""0"",""status"":""1"",""time_added"":""1409414147"",""time_updated"":""1412332838"",""time_read"":""1412332831"",""time_favorited"":""0"",""sort_id"":596,""resolved_title"":""David Fincher's new movie shot and post produced at 6K and used 36 TB of SSDs!"",""resolved_url"":""http://www.redsharknews.com/post/item/1940-david-finchers-new-movie-shot-and-post-produced-at-6k-and-used-36-tb-of-ssds"",""excerpt"":""Working wtih 6K material from a Red Dragon calls for epic computing resources!"",""word_count"":""405""},{""item_id"":""702774959"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500737"",""time_updated"":""1410469841"",""time_read"":""1410469834"",""time_favorited"":""0"",""sort_id"":571,""resolved_title"":""A portrait of Federica Mogherini, the EU's next foreign policy chief"",""resolved_url"":""http://www.theguardian.com/global/2014/aug/30/portrait-federica-mogherini-eu-foreign-policy-chief"",""excerpt"":""In late November 2012, while Matteo Renzi was making an ill-fated bid for leadership of the Italian centre-left, a young MP from his Democratic Party (PD) piped up on Twitter to remark: \""OK, Renzi has quite a lot to learn about foreign policy … He won't make the pass mark, I fear #thirdgrade."",""word_count"":""879""},{""item_id"":""702811278"",""favorite"":""0"",""status"":""1"",""time_added"":""1409499195"",""time_updated"":""1412332682"",""time_read"":""1412332676"",""time_favorited"":""0"",""sort_id"":594,""resolved_title"":""EU leaders pick Tusk, Mogherini for top posts"",""resolved_url"":""http://euobserver.com/institutional/125412"",""excerpt"":""BRUSSELS - EU leaders on Saturday (30 August) agreed to appoint Polish PM Donald Tusk for the EU Council presidency and Italian minister Federica Mogherini as the bloc's foreign affairs chief."",""word_count"":""700""},{""item_id"":""702862930"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500735"",""time_updated"":""1410470482"",""time_read"":""1410470476"",""time_favorited"":""0"",""sort_id"":573,""resolved_title"":""Will Brazil elect Marina Silva as the world's first Green president?"",""resolved_url"":""http://www.theguardian.com/world/2014/aug/30/brazil-marina-silva-first-green-president-election-dilma-rousseff"",""excerpt"":""It started with the national anthem and ended with a rap. In between came a poignant minute's silence, politicised football chants and a call to action by the woman tipped to become the first Green national leader on the planet."",""word_count"":""2046""},{""item_id"":""702884926"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500726"",""time_updated"":""1412323533"",""time_read"":""1412323525"",""time_favorited"":""0"",""sort_id"":579,""resolved_title"":""Joan Baez: Singer, activist, peacenik, lover, legend"",""resolved_url"":""http://www.theguardian.com/music/2014/aug/31/joan-baez-singer-activist-peacenik-lover-legend-royal-festival-hall"",""excerpt"":""Angry wasps are swarming in the eaves of Joan Baez’s Californian home, but otherwise all is as it should be in the life of a woman who has devoted herself to the cause of peace. The breeze is warm, the incense sticks are billowing out smoke and the conversation is mellow."",""word_count"":""2355""},{""item_id"":""702926783"",""favorite"":""0"",""status"":""1"",""time_added"":""1409499194"",""time_updated"":""1412332693"",""time_read"":""1412332689"",""time_favorited"":""0"",""sort_id"":595,""resolved_title"":""EU leaders give Putin one-week deadline"",""resolved_url"":""http://euobserver.com/foreign/125417"",""excerpt"":""BRUSSELS - EU leaders have given Russia one week to stop attacking Ukraine or face more sanctions."",""word_count"":""437""},{""item_id"":""703038757"",""favorite"":""0"",""status"":""0"",""time_added"":""1409499198"",""time_updated"":""1417852427"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":590,""resolved_title"":""Avoiding Event Chains in Single Page Applications"",""resolved_url"":""http://www.code-experience.com/avoiding-event-chains-in-single-page-applications/"",""excerpt"":""At my company, we recently finished the fifth iteration over a medium sized, but very interactive and graphical web-app.  We started a first prototype with Backbone and as the project got bigger, expanded to Chaplin with d3.js."",""word_count"":""1529""},{""item_id"":""703094388"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500736"",""time_updated"":""1412322671"",""time_read"":""1412322666"",""time_favorited"":""0"",""sort_id"":572,""resolved_title"":""China rules out open Hong Kong chief executive poll"",""resolved_url"":""http://www.bbc.co.uk/news/world-asia-china-29002162"",""excerpt"":""Chinese authorities have ruled out open nominations for elections to choose Hong Kong's leader.  Authorities said two to three candidates will be nominated by a \""broadly representative\"" committee."",""word_count"":""456""},{""item_id"":""703141000"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500725"",""time_updated"":""1412323591"",""time_read"":""1412323586"",""time_favorited"":""0"",""sort_id"":580,""resolved_title"":""Iceland issues new Bardarbunga volcano lava alert"",""resolved_url"":""http://www.bbc.co.uk/news/world-europe-29003031"",""excerpt"":""Iceland has raised its aviation warning level after a fresh eruption from a fissure near the Bardarbunga volcano.  However, Iceland's Met Office described the eruption as \""a very calm lava eruption\"" which could \""hardly be seen on seismometers\""."",""word_count"":""187""},{""item_id"":""703227228"",""favorite"":""0"",""status"":""1"",""time_added"":""1409502290"",""time_updated"":""1411556400"",""time_read"":""1411556395"",""time_favorited"":""0"",""sort_id"":569,""resolved_title"":""Blogging History: NSA spied on Al Jazeera; Dick Cheney, proud torturer; Soros v \""drug lord\"" accusation"",""resolved_url"":""http://boingboing.net/2014/08/31/blogging-history-nsa-spied-on.html"",""excerpt"":""Five yearsDick Cheney, proud torturer: Former US Vice President Dick Cheney proclaimed once again over the weekend that he believes torture applied to war-on-terror detainees in U.S."",""word_count"":""117""},{""item_id"":""703255396"",""favorite"":""0"",""status"":""1"",""time_added"":""1409502305"",""time_updated"":""1409601739"",""time_read"":""1409551104"",""time_favorited"":""0"",""sort_id"":560,""resolved_title"":""Hong Kong: Occupy Central anger over Beijing ruling"",""resolved_url"":""http://www.bbc.co.uk/news/world-asia-china-29004025"",""excerpt"":""Democratic groups in Hong Kong have vowed to fight a Chinese government ruling that effectively gives China control over the candidates for the next leadership election.  The election, due in 2017, will be the first in which the Hong Kong chief executive is directly chosen by voters."",""word_count"":""696""},{""item_id"":""703320863"",""favorite"":""0"",""status"":""1"",""time_added"":""1409500739"",""time_updated"":""1412322967"",""time_read"":""1412322962"",""time_favorited"":""0"",""sort_id"":570,""resolved_title"":""New Poll: Netherlands Best Place In The World To Be Gay or Lesbian"",""resolved_url"":""http://blogs.indiewire.com/bent/new-poll-netherlands-best-place-in-the-world-to-be-gay-or-lesbian-20140828"",""excerpt"":""There's not especially surprising about a new Gallop Poll that asked adults across 123 countries whether their city or area was a \""good place\"" for gay and lesbians to live: The Netherlands narrowly beat out Iceland and Canada, with a pretty impressive 83% in the country saying yes, it's goed om ho"",""word_count"":""274""},{""item_id"":""703462976"",""favorite"":""0"",""status"":""1"",""time_added"":""1409686369"",""time_updated"":""1410649292"",""time_read"":""1410554681"",""time_favorited"":""0"",""sort_id"":516,""resolved_title"":""Notes on bookmarks from 1997"",""resolved_url"":""https://notes.pinboard.in/u%3Avitorio/05dec9f04909d9b6edff"",""excerpt"":""On August 30, 2014, I imported 264 bookmarks into Pinboard. The source was a file named \""bookmark.htm\"" with a last modified date of October 12, 1997.  These bookmarks date between January 1995 and October 1997."",""word_count"":""657""},{""item_id"":""703818957"",""favorite"":""0"",""status"":""1"",""time_added"":""1412113883"",""time_updated"":""1412115286"",""time_read"":""1412115277"",""time_favorited"":""0"",""sort_id"":329,""resolved_title"":""3 LinkedIn Tips for Startup Job-Seekers"",""resolved_url"":""http://www.ukstartupjobs.com/career-advice/3-linkedin-tips-startup-job-seekers/"",""excerpt"":""We’ve all seen good LinkedIn profiles, and conversely, bad ones. Today, being a professional without a LinkedIn profile is like being a company without a website, especially within the tech world."",""word_count"":""490""},{""item_id"":""703868892"",""favorite"":""0"",""status"":""1"",""time_added"":""1409663453"",""time_updated"":""1411253527"",""time_read"":""1411253515"",""time_favorited"":""0"",""sort_id"":541,""resolved_title"":""Out in the Open: Hackers Build a Skype That’s Not Controlled by Microsoft"",""resolved_url"":""http://www.wired.com/2014/09/tox/"",""excerpt"":""The web forum 4chan is known mostly as a place to share juvenile and, to put it mildly, politically incorrect images. But it’s also the birthplace of one of the latest attempts to subvert the NSA’s mass surveillance program."",""word_count"":""1305""},{""item_id"":""704078455"",""favorite"":""0"",""status"":""1"",""time_added"":""1409658665"",""time_updated"":""1411327253"",""time_read"":""1411327109"",""time_favorited"":""0"",""sort_id"":553,""resolved_title"":""Ubuntu 14.10 (Utopic Unicorn) beta-1 released"",""resolved_url"":""http://www.ubuntugeek.com/ubuntu-14-10-utopic-unicorn-beta-1-released.html"",""excerpt"":""Sponsored Link  The first beta of the Utopic Unicorn (to become 14.10) has now been released! This beta features images for Kubuntu, Lubuntu, Ubuntu GNOME,UbuntuKylin, Xubuntu and the Ubuntu Cloud images."",""word_count"":""413""},{""item_id"":""704122757"",""favorite"":""0"",""status"":""1"",""time_added"":""1409663457"",""time_updated"":""1411253296"",""time_read"":""1411253289"",""time_favorited"":""0"",""sort_id"":539,""resolved_title"":""EUobserver / Who is Tusk and what does he mean for the EU?"",""resolved_url"":""http://euobserver.com/institutional/125427"",""excerpt"":""BRUSSELS - Quiet, pragmatic, tenacious - some compare Donald Tusk, the Polish prime minister and newly-chosen EU Council chief, to German chancellor Angela Merkel. But unlike her, he has “given up” on Moscow, with Russia relations set to make or break his EU tenure."",""word_count"":""1292""},{""item_id"":""704132980"",""favorite"":""0"",""status"":""1"",""time_added"":""1409663454"",""time_updated"":""1411280241"",""time_read"":""1411280232"",""time_favorited"":""0"",""sort_id"":540,""resolved_title"":""EUobserver / Putin told Barroso he could 'take Kiev in two weeks'"",""resolved_url"":""http://euobserver.com/tickers/125429"",""excerpt"":""Italian daily La Repubblica reports that when EU commission chief Jose Manuel Barroso spoke with Russian leader Vladimir Putin by phone on Friday, Putin told him: \""I can take Kiev in two weeks if I want\"". Barroso's spokeswoman declined to comment on the report when asked by EUobserver."",""word_count"":""59""},{""item_id"":""704156877"",""favorite"":""0"",""status"":""1"",""time_added"":""1409669323"",""time_updated"":""1410649291"",""time_read"":""1410552323"",""time_favorited"":""0"",""sort_id"":529,""resolved_title"":""Campaign to convert abandoned fort in River Thames into 24 hour party venue"",""resolved_url"":""http://www.standard.co.uk/news/london/dreams-to-convert-abandoned-fort-in-river-thames-into-24-hour-party-venue-9692506.html"",""excerpt"":""Club promoters Minival have aspirations to turn the fort, which went on the market last month, into the “go-to haven for celebration of British music, arts and culture” with the help of funding from other music fans."",""word_count"":""229""},{""item_id"":""704196978"",""favorite"":""1"",""status"":""1"",""time_added"":""1409663451"",""time_updated"":""1411281112"",""time_read"":""1411281112"",""time_favorited"":""1411281063"",""sort_id"":543,""resolved_title"":""Shenzhen trip report - visiting the world's manufacturing ecosystem »"",""resolved_url"":""http://joi.ito.com/weblog/2014/09/01/shenzhen-trip-r.html"",""excerpt"":""Last year, a group of Media Lab students visited Shenzhen with, bunnie, an old friend and my hardware guru. He's probably best known for hacking the Xbox, the chumby, an open source networked hardware appliance, and for helping so many people with their hardware, firmware and software designs."",""word_count"":""2326""},{""item_id"":""704284732"",""favorite"":""0"",""status"":""1"",""time_added"":""1409665371"",""time_updated"":""1411252940"",""time_read"":""1411252932"",""time_favorited"":""0"",""sort_id"":538,""resolved_title"":""Watch: First Trailer For Abel Ferrara's 'Pasolini' Starring Willem Dafoe"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/watch-first-trailer-for-abel-ferraras-pasolini-starring-willem-dafoe-20140901"",""excerpt"":""Abel Ferrara has always been known for creating characters and stories that delve into extreme human behaviour, but his last couple of films have concerned events that he did not have to dream up."",""word_count"":""213""},{""item_id"":""704377829"",""favorite"":""0"",""status"":""1"",""time_added"":""1409662513"",""time_updated"":""1411282340"",""time_read"":""1411282330"",""time_favorited"":""0"",""sort_id"":544,""resolved_title"":""How a new HTML element will make the Web faster"",""resolved_url"":""http://arstechnica.com/information-technology/2014/09/how-a-new-html-element-will-make-the-web-faster/"",""excerpt"":""The Web is going to get faster in the very near future. And sadly, this is rare enough to be news.  The speed bump won't be because our devices are getting faster, but they are. It won't be because some giant company created something great, though they probably have."",""word_count"":""4616""},{""item_id"":""704525168"",""favorite"":""0"",""status"":""1"",""time_added"":""1409666340"",""time_updated"":""1411199177"",""time_read"":""1411199170"",""time_favorited"":""0"",""sort_id"":533,""resolved_title"":""Boris Johnson says airport plan not dead despite rejection"",""resolved_url"":""http://www.bbc.co.uk/news/business-29026484"",""excerpt"":""London Mayor Boris Johnson has said his proposal for an island airport in the Thames estuary is not dead, despite the Airports Commission rejecting the idea.  Commission chairman Sir Howard Davies said the huge cost, economic disruption and environmental concerns made the proposal unviable."",""word_count"":""724""},{""item_id"":""704550106"",""favorite"":""0"",""status"":""1"",""time_added"":""1409662512"",""time_updated"":""1411282448"",""time_read"":""1411282442"",""time_favorited"":""0"",""sort_id"":545,""resolved_title"":""UK Police Make Third 'Pirate' Streaming Arrest"",""resolved_url"":""https://torrentfreak.com/uk-police-make-third-pirate-streaming-arrest-140902/"",""excerpt"":""The UK's Police Intellectual Property Crime Unit arrested a man yesterday believed to have operated streaming sites that provided illegal access to subscription-only sports TV services. The arrest marks the third carried out by PIPCU in the streaming sector."",""word_count"":""546""},{""item_id"":""704601565"",""favorite"":""0"",""status"":""1"",""time_added"":""1409662509"",""time_updated"":""1412583095"",""time_read"":""1412583093"",""time_favorited"":""0"",""sort_id"":548,""resolved_title"":""The Science of Finding Your Soul Mate"",""resolved_url"":""http://www.brainpickings.org/index.php/2014/09/02/the-science-of-soul-mates-xkcd/"",""excerpt"":""Breaking down the mathematical odds of winning at SoulMateRoulette.  It’s been argued that the secret of lasting love is giving up the myth of “the one” — and yet the notion of a perfect soul mate is irresistibly alluring to most of us."",""word_count"":""1014""},{""item_id"":""704608081"",""favorite"":""0"",""status"":""1"",""time_added"":""1409649350"",""time_updated"":""1410649292"",""time_read"":""1410555729"",""time_favorited"":""0"",""sort_id"":555,""resolved_title"":""Reported Apple iCloud Hack Leaked Hundreds of Nude Celebrity Photos"",""resolved_url"":""http://thehackernews.com/2014/09/reported-apple-icloud-hack-leaked_1.html"",""excerpt"":""Now this gonna be the height of Privacy Breach! Nude images of several high-profile persona including actors, models, singers and presenters have been made available online in a blatant hacking leak linked to the Apple iCloud service."",""word_count"":""785""},{""item_id"":""704702439"",""favorite"":""0"",""status"":""1"",""time_added"":""1409658667"",""time_updated"":""1411548139"",""time_read"":""1411548132"",""time_favorited"":""0"",""sort_id"":551,""resolved_title"":""Finding Better Ways of Mining Scientific Publications"",""resolved_url"":""http://blog.mendeley.com/elsevier/finding-better-ways-of-mining-scientific-publications/"",""excerpt"":""Mendeley is supporting the 3rd edition of the International Workshop on Mining Scientific Publications, which will take place on the 12th September 2014 in London."",""word_count"":""631""},{""item_id"":""704706592"",""favorite"":""0"",""status"":""1"",""time_added"":""1409662509"",""time_updated"":""1411547903"",""time_read"":""1411547896"",""time_favorited"":""0"",""sort_id"":547,""resolved_title"":""A Call for a Low-Carb Diet That Embraces Fat"",""resolved_url"":""http://www.nytimes.com/2014/09/02/health/low-carb-vs-low-fat-diet.html"",""excerpt"":""People who avoid carbohydrates and eat more fat, even saturated fat, lose more body fat and have fewer cardiovascular risks than people who follow the low-fat diet that health authorities have favored for decades, a major new study shows."",""word_count"":""1212""},{""item_id"":""704955384"",""favorite"":""0"",""status"":""1"",""time_added"":""1409729638"",""time_updated"":""1410503347"",""time_read"":""1410503134"",""time_favorited"":""0"",""sort_id"":493,""resolved_title"":""The Best Body Hacks to Boost Your Productivity at Work"",""resolved_url"":""http://lifehacker.com/the-best-body-hacks-to-boost-your-productivity-at-work-1629589572"",""excerpt"":""'; if (google_ads[0].bidtype == 'CPC') { /* insert this snippet for each ad call */ google_adnum = google_adnum + google_ads.length; } document."",""word_count"":""951""},{""item_id"":""704967766"",""favorite"":""0"",""status"":""1"",""time_added"":""1409729636"",""time_updated"":""1410775053"",""time_read"":""1410725595"",""time_favorited"":""0"",""sort_id"":494,""resolved_title"":""Islamic State 'beheads US hostage Steven Sotloff'"",""resolved_url"":""http://www.bbc.co.uk/news/world-middle-east-29038217"",""excerpt"":""An Islamic State video has appeared which purports to show the beheading of Steven Sotloff, a US journalist being held hostage by the militants.  Mr Sotloff, 31, was abducted in Syria in 2013. He appeared at the end of a video last month which showed fellow US journalist James Foley being killed."",""word_count"":""849""},{""item_id"":""705034651"",""favorite"":""0"",""status"":""1"",""time_added"":""1409685287"",""time_updated"":""1411196823"",""time_read"":""1411196812"",""time_favorited"":""0"",""sort_id"":517,""resolved_title"":""EUobserver / Mogherini backs Western Balkan enlargement"",""resolved_url"":""http://euobserver.com/enlargement/125442"",""excerpt"":""BRUSSELS - Italian foreign minister and incoming EU foreign relations chief Federica Mogherini has called for progress on Western Balkan enlargement, while saying Russia is no longer an EU “strategic partner”."",""word_count"":""539""},{""item_id"":""705055229"",""favorite"":""0"",""status"":""1"",""time_added"":""1409730596"",""time_updated"":""1410649292"",""time_read"":""1410552559"",""time_favorited"":""0"",""sort_id"":486,""resolved_title"":""Pocket for Android Adds Storage Control, Quick Deleting, and More"",""resolved_url"":""http://lifehacker.com/pocket-for-android-adds-storage-control-quick-deleting-1629660232"",""excerpt"":""Android: The Pocket app for Android was updated today with some handy new features, including the new ability to set your offline storage limits, a new quick delete mode, and improved Evernote integration."",""word_count"":""189""},{""item_id"":""705083989"",""favorite"":""1"",""status"":""1"",""time_added"":""1409764932"",""time_updated"":""1410458429"",""time_read"":""1410451014"",""time_favorited"":""1410451013"",""sort_id"":474,""resolved_title"":""Dropping Science: 'XKCD' Cartoonist Randall Munroe on His New Book"",""resolved_url"":""http://www.rollingstone.com/culture/features/xkcd-cartoonist-randall-munroe-what-if-20140902"",""excerpt"":""\""Stand back, I'm going to try science\"" is one of the enduring mottos of the XKCD webcomic. That's exactly what cartoonist Randall Munroe has done: applied his physics degree (he's a former employee of NASA) to brilliant stick-figure comics about the Internet, eBay feedback, romance, and bacon."",""word_count"":""2050""},{""item_id"":""705224306"",""favorite"":""0"",""status"":""1"",""time_added"":""1409729640"",""time_updated"":""1410775053"",""time_read"":""1410725819"",""time_favorited"":""0"",""sort_id"":490,""resolved_title"":""Corruption 'impoverishes and kills millions'"",""resolved_url"":""http://www.bbc.co.uk/news/world-29040793#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa"",""excerpt"":""An estimated $1tn (£600bn) a year is being taken out of poor countries and millions of lives are lost because of corruption, according to campaigners.  Corrupt activities include the use of phantom firms and money laundering."",""word_count"":""336""},{""item_id"":""705370333"",""favorite"":""0"",""status"":""1"",""time_added"":""1409719984"",""time_updated"":""1410503347"",""time_read"":""1410503282"",""time_favorited"":""0"",""sort_id"":498,""resolved_title"":""UK Government Hires First Woman Head of BBC"",""resolved_url"":""http://blogs.indiewire.com/womenandhollywood/uk-government-hires-first-woman-head-of-bbc-20140902"",""excerpt"":""And yet here we are with the rather welcome news that Rona Fairhead has been hired by the British government as the first female chief of the BBC Trust."",""word_count"":""161""},{""item_id"":""705374845"",""favorite"":""0"",""status"":""1"",""time_added"":""1409730593"",""time_updated"":""1410775053"",""time_read"":""1410725087"",""time_favorited"":""0"",""sort_id"":488,""resolved_title"":""How easy is it to crack into an Apple iCloud account? We tried to find out"",""resolved_url"":""http://www.theguardian.com/world/blog/2014/sep/03/after-nude-celebrity-photos-i-tried-to-hack-my-colleagues-apple-icloud-account"",""excerpt"":""Accessing someone’s Apple account requires only three things: their email address, their date of birth, and the answers to two out of three security questions. This is assuming they don’t have two-step verification enabled."",""word_count"":""968""},{""item_id"":""705430920"",""favorite"":""0"",""status"":""1"",""time_added"":""1409729641"",""time_updated"":""1410649291"",""time_read"":""1410552528"",""time_favorited"":""0"",""sort_id"":489,""resolved_title"":""If Comic Sans ruled the web"",""resolved_url"":""http://www.theguardian.com/artanddesign/gallery/2014/sep/03/the-worlds-websites-in-comic-sans"",""excerpt"":""Here’s Guardian Australia’s homepage in Comic Sans"",""word_count"":""0""},{""item_id"":""706514465"",""favorite"":""0"",""status"":""1"",""time_added"":""1410650040"",""time_updated"":""1412209060"",""time_read"":""1412209057"",""time_favorited"":""0"",""sort_id"":414,""resolved_title"":""Most Popular Node.js Frameworks for App Development"",""resolved_url"":""http://www.algoworks.com/blog/most-popular-node-js-frameworks-for-app-development/"",""excerpt"":""Fast and scalable. High performing and robust. Node.js was every web application developer’s dream come true. But like every new technology, coding in Node.js from scratch is a little time-consuming and requires a lot of repetitive programming."",""word_count"":""984""},{""item_id"":""706523356"",""favorite"":""0"",""status"":""1"",""time_added"":""1409838587"",""time_updated"":""1410458428"",""time_read"":""1410434003"",""time_favorited"":""0"",""sort_id"":465,""resolved_title"":""Hipster Village: Berlin Nightlife Grows Up"",""resolved_url"":""http://www.spiegel.de/international/zeitgeist/nightclub-owners-plan-latest-berlin-city-quarter-a-989359.html"",""excerpt"":""For a decade, Bar 25 was one of Berlin's wildest clubs. Now, its founders want to create a new development on the site. It is to cater to former clubbers and preserve an element of 1990s Berlin. But the hurdles are high."",""word_count"":""4785""},{""item_id"":""706650644"",""favorite"":""0"",""status"":""1"",""time_added"":""1410650042"",""time_updated"":""1412208132"",""time_read"":""1412208129"",""time_favorited"":""0"",""sort_id"":413,""resolved_title"":""Best Practices for Deploying Node.js in Production"",""resolved_url"":""http://strongloop.com/strongblog/node-js-deploy-production-best-practice/"",""excerpt"":""One of the struggles developers face when moving to Node.js is the lack of best practices for automated deployment of Node applications. The challenges are many-fold – packaging and dependency management, single step deploy, and start/re-start without bringing down the house!"",""word_count"":""1698""},{""item_id"":""706708230"",""favorite"":""0"",""status"":""1"",""time_added"":""1409848101"",""time_updated"":""1411396971"",""time_read"":""1410035336"",""time_favorited"":""0"",""sort_id"":444,""resolved_title"":""David Lammy: ‘You can’t be Mayor and an MP ... that’s the pickle Boris is in’"",""resolved_url"":""http://www.standard.co.uk/news/politics/you-cant-be-mayor-and-an-mp--thats-the-pickle-boris-is-in-9711035.html"",""excerpt"":""David Lammy is up and running. He has a team in place, claims he has donors ready, is slimmer and fitter, with a collection of starched white shirts, and today begins his campaign to be London Mayor with a thumping report on the capital’s housing crisis."",""word_count"":""1300""},{""item_id"":""706728358"",""favorite"":""0"",""status"":""1"",""time_added"":""1412596935"",""time_updated"":""1414861833"",""time_read"":""1414861829"",""time_favorited"":""0"",""sort_id"":273,""resolved_title"":""Testing Elasticsearch With Node.js"",""resolved_url"":""http://faiq.me/testing-elasticsearch-node/"",""excerpt"":""Any good engineeer would tell you that writing tests for code is an extremely integral part of the software development process. However, when writing unit tests for a feature that interacts with an external API, things tend to get a little tricky."",""word_count"":""427""},{""item_id"":""707536753"",""favorite"":""0"",""status"":""1"",""time_added"":""1412614494"",""time_updated"":""1413422605"",""time_read"":""1413422603"",""time_favorited"":""0"",""sort_id"":253,""resolved_title"":""Why Amazon Has No Profits (And Why It Works)"",""resolved_url"":""http://a16z.com/2014/09/05/why-amazon-has-no-profits-and-why-it-works/"",""excerpt"":""Amazon has a tendency to polarize people. On one hand, there is the ruthless, relentless, ferociously efficient company that’s building the Sears Roebuck of the 21st Century. But on the other, there is the fact that almost 20 years after it was launched, it has yet to report a meaningful profit."",""word_count"":""2272""},{""item_id"":""707694788"",""favorite"":""1"",""status"":""1"",""time_added"":""1412613648"",""time_updated"":""1412849110"",""time_read"":""1412849110"",""time_favorited"":""1412849109"",""sort_id"":261,""resolved_title"":""Cryptomarkets Are Gentrifying the Drug Trade, and That’s Probably a Good Thing"",""resolved_url"":""https://news.vice.com/article/cryptomarkets-are-gentrifying-the-drug-trade-and-thats-probably-a-good-thing"",""excerpt"":""Had Walter White sold his blue meth on Silk Road rather than through drug kingpins and criminal gangs, there wouldn't have been much to Breaking Bad, but he would have made plenty of money and probably avoided a violent death."",""word_count"":""2864""},{""item_id"":""707749129"",""favorite"":""0"",""status"":""1"",""time_added"":""1410180625"",""time_updated"":""1412497692"",""time_read"":""1412497689"",""time_favorited"":""0"",""sort_id"":417,""resolved_title"":""Diplomacy by Design"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/09/05/diplomacy_by_design_peace_war_conflict_architecture"",""excerpt"":""A new generation of architects is using rail lines, shopping centers, and football\r fields to keep the peace from Belfast to Baghdad."",""word_count"":""3551""},{""item_id"":""707815010"",""favorite"":""0"",""status"":""1"",""time_added"":""1412614493"",""time_updated"":""1413423462"",""time_read"":""1413423460"",""time_favorited"":""0"",""sort_id"":254,""resolved_title"":""The FBI Finally Says How It ‘Legally’ Pinpointed Silk Road’s Server"",""resolved_url"":""http://www.wired.com/2014/09/the-fbi-finally-says-how-it-legally-pinpointed-silk-roads-server/"",""excerpt"":""As the trial of alleged Silk Road drug market creator Ross Ulbricht approaches, the defense has highlighted the mystery of how law enforcement first located the main Silk Road server in an Icelandic data center, despite the computer being hidden by the formidable anonymity software Tor."",""word_count"":""1322""},{""item_id"":""708444850"",""favorite"":""0"",""status"":""1"",""time_added"":""1410109458"",""time_updated"":""1410250812"",""time_read"":""1410250807"",""time_favorited"":""0"",""sort_id"":420,""resolved_title"":""The phantom menace of militant atheism"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/sep/07/militant-atheism-religious-apologists-intellectuals"",""excerpt"":""My family went into central London last week. After they'd gone, I found myself checking the web for reports of bomb blasts. Absurd and paranoid of me, of course. Rationally, I know that a motorist is more likely to kill you than a terrorist."",""word_count"":""1008""},{""item_id"":""708483898"",""favorite"":""0"",""status"":""1"",""time_added"":""1410110328"",""time_updated"":""1410775170"",""time_read"":""1410775164"",""time_favorited"":""0"",""sort_id"":419,""resolved_title"":""Deep math of the folded pizza slice"",""resolved_url"":""http://boingboing.net/2014/09/06/deep-math-of-the-folded-pizza.html"",""excerpt"":""Why does a flat pizza slice flop over unless you bend it into a curve? Thank Gaussian curvature, the 19th century mathematical principle that underpins everything from corrugated cardboard to eggshells to Pringles chips."",""word_count"":""290""},{""item_id"":""708748305"",""favorite"":""1"",""status"":""1"",""time_added"":""1410650042"",""time_updated"":""1411370574"",""time_read"":""1411331324"",""time_favorited"":""1411331323"",""sort_id"":412,""resolved_title"":""ECMAScript 6 modules: the final syntax"",""resolved_url"":""http://www.2ality.com/2014/09/es6-modules-final.html"",""excerpt"":""At the end of July 2014, TC39 [1] had another meeting, during which the last details of the ECMAScript 6 (ES6) module syntax were finalized. This blog post gives an overview of the complete ES6 module system."",""word_count"":""3621""},{""item_id"":""709518893"",""favorite"":""0"",""status"":""1"",""time_added"":""1411479534"",""time_updated"":""1412159694"",""time_read"":""1412155201"",""time_favorited"":""0"",""sort_id"":392,""resolved_title"":""Dual Boot: Fix Time Differences Between Ubuntu And Windows"",""resolved_url"":""http://www.webupd8.org/2014/09/dual-boot-fix-time-differences-between.html"",""excerpt"":""Quick tip for users who dual boot Ubuntu and Windows: if the time is off on your computer when you reboot and switch between Ubuntu and Windows, here's how to fix it."",""word_count"":""241""},{""item_id"":""709687643"",""favorite"":""0"",""status"":""1"",""time_added"":""1412614492"",""time_updated"":""1413423073"",""time_read"":""1413423070"",""time_favorited"":""0"",""sort_id"":256,""resolved_title"":""Writing Extensions for Firefox Is Barely Worth the Trouble"",""resolved_url"":""http://omniref.com/blog/blog/2014/09/08/writing-extensions-for-firefox-is-barely-worth-the-trouble/"",""excerpt"":""It really hurts me to say what I’m about to say. I’m an old-school Mozilla fanboy. I was the guy obsessively reloading the Navigator source code webpage in anticipation of its release."",""word_count"":""1574""},{""item_id"":""709987688"",""favorite"":""0"",""status"":""1"",""time_added"":""1412614491"",""time_updated"":""1413423795"",""time_read"":""1413423789"",""time_favorited"":""0"",""sort_id"":257,""resolved_title"":""Someone’s Threatening to Expose Bitcoin Founder Satoshi Nakamoto"",""resolved_url"":""http://www.wired.com/2014/09/satoshi/"",""excerpt"":""Someone has taken over the email account belonging to bitcoin’s secretive creator, Satoshi Nakamoto, saying he will sell Nakamoto’s secrets for money."",""word_count"":""485""},{""item_id"":""710165164"",""favorite"":""0"",""status"":""1"",""time_added"":""1412594887"",""time_updated"":""1413454529"",""time_read"":""1413454527"",""time_favorited"":""0"",""sort_id"":278,""resolved_title"":""Finland set to break EU stability pact"",""resolved_url"":""http://euobserver.com/tickers/125525"",""excerpt"":""Finland is set to break the EU's rules on budget deficits after estimates suggested that the country will fall short of the yearly objective for structural deficit both in 2014 and 2015. Finland's structural deficit is set to clear one percent this year, above the 0.5 percent limit."",""word_count"":""45""},{""item_id"":""710562638"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593713"",""time_updated"":""1415004134"",""time_read"":""1415004129"",""time_favorited"":""0"",""sort_id"":282,""resolved_title"":""One in three Europeans more educated than parents, research finds"",""resolved_url"":""http://euobserver.com/news/125536"",""excerpt"":""BRUSSELS - One in every three young Europeans has a higher level of education than their parents, according to new research."",""word_count"":""399""},{""item_id"":""711125287"",""favorite"":""0"",""status"":""1"",""time_added"":""1411859561"",""time_updated"":""1412117640"",""time_read"":""1412117632"",""time_favorited"":""0"",""sort_id"":345,""resolved_title"":""Apple Watch, at last, and iPhones go (really) big"",""resolved_url"":""http://www.redsharknews.com/technology/item/2000-apple-watch,-at-last,-and-iphones-go-really-big"",""excerpt"":""On the stage where Steve Jobs first launched the Mac and then kicked off Apple’s Lazarus-like rebirth with the original iMac, Tim Cook finally played the ‘one more thing’ card with Apple’s most personal computer yet. Not the iWatch, but the Apple Watch. K.Stewart was there."",""word_count"":""599""},{""item_id"":""711142787"",""favorite"":""0"",""status"":""1"",""time_added"":""1417121548"",""time_updated"":""1417121557"",""time_read"":""1417121550"",""time_favorited"":""0"",""sort_id"":40,""resolved_title"":""Project to Turn Bitcoin Into an All-Powerful Programming Language Raises $15M"",""resolved_url"":""http://www.wired.com/2014/09/ethereum-backers-raise-15-million/"",""excerpt"":""A year ago, Vitalik Buterin was a teenaged college dropout dabbling in the bitcoin digital currency. Now, he’s the founder of a futuristic programming project that just got backed to the tune of $15 million."",""word_count"":""544""},{""item_id"":""711433761"",""favorite"":""0"",""status"":""1"",""time_added"":""1412613652"",""time_updated"":""1413489539"",""time_read"":""1413489533"",""time_favorited"":""0"",""sort_id"":259,""resolved_title"":""A Watch Guy's Thoughts On The Apple Watch After Seeing It In The Metal (Tons Of Live Photos)"",""resolved_url"":""http://www.hodinkee.com/blog/hodinkee-apple-watch-review"",""excerpt"":""I'm not even sure we can call it a watch. Okay, it goes on the wrist, and it happens to tell the time, but that's about where the similarities between Apple's just announced watch and the hand-assembled, often painstakingly finished mechanical watches we write about, and obsess over, end."",""word_count"":""3203""},{""item_id"":""711520917"",""favorite"":""0"",""status"":""1"",""time_added"":""1411582751"",""time_updated"":""1412159693"",""time_read"":""1412153772"",""time_favorited"":""0"",""sort_id"":379,""resolved_title"":""What are hedge funds, and what social functions do they serve?"",""resolved_url"":""http://danwang.co/what-are-hedge-funds-and-what-social-functions-do-they-serve/"",""excerpt"":""J. Pierpont Morgan died in 1913 with a fortune of about $1.5 billion in today’s dollars. For his sway over Wall Street he was nicknamed “Jupiter,” after the Roman king of the gods.  In 2013, four hedge fund managers took home over $2 billion as income each, with the top manager pocketing $3."",""word_count"":""2399""},{""item_id"":""711915347"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593704"",""time_updated"":""1414861876"",""time_read"":""1414861872"",""time_favorited"":""0"",""sort_id"":287,""resolved_title"":""Most Europeans, but not France, keen to keep UK in EU"",""resolved_url"":""http://euobserver.com/tickers/125568"",""excerpt"":""Fifty one percent of people surveyed by the GMF think tank say the EU should accommodate British concerns to keep it in the Union. But 52 percent of French people said Britain should leave, indicating that British PM Cameron will have a hard time getting a consensus on pro-UK reforms."",""word_count"":""49""},{""item_id"":""711945724"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593706"",""time_updated"":""1413540141"",""time_read"":""1413540139"",""time_favorited"":""0"",""sort_id"":286,""resolved_title"":""MasterCard fee illegal says EU court"",""resolved_url"":""http://euobserver.com/tickers/125571"",""excerpt"":""The EU Court of Justice ruled on Thursday that interchange fees applied by MasterCard are contrary to EU competition law. The fees correspond to a proportion of any payment with the cost getting paid by the retailers."",""word_count"":""49""},{""item_id"":""712210618"",""favorite"":""0"",""status"":""1"",""time_added"":""1414403850"",""time_updated"":""1414451617"",""time_read"":""1414451600"",""time_favorited"":""0"",""sort_id"":158,""resolved_title"":""Firefox Add-on Enables Web Development Across Browsers and Devices"",""resolved_url"":""https://hacks.mozilla.org/2014/09/firefox-tools-adapter/"",""excerpt"":""Developing across multiple browsers and devices is the main issue developers have when building applications."",""word_count"":""398""},{""item_id"":""712778300"",""favorite"":""0"",""status"":""1"",""time_added"":""1410650044"",""time_updated"":""1412159695"",""time_read"":""1412156727"",""time_favorited"":""0"",""sort_id"":411,""resolved_title"":""Catalans turn out en masse to ask for independence vote"",""resolved_url"":""http://euobserver.com/news/125585"",""excerpt"":""BARCELONA - Around 1.8 million Catalans took to the streets of Barcelona on Thursday (12 September) calling for the right to vote on independence.  The demonstration marks the beginning of a critical period in Barcelona-Madrid relations."",""word_count"":""481""},{""item_id"":""712911921"",""favorite"":""0"",""status"":""1"",""time_added"":""1410651416"",""time_updated"":""1412159695"",""time_read"":""1412157364"",""time_favorited"":""0"",""sort_id"":407,""resolved_title"":""The Oscar Pistorius verdict exposes South Africa’s fraught racial history"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/sep/12/oscar-pistorius-verdict-reeva-steenkamp-defence-implausible"",""excerpt"":""Last Valentine’s Day, Oscar Pistorius killed his girlfriend Reeva Steenkamp after firing four times through a locked bathroom door in the middle of the night. He thought Steenkamp was still in bed next to him."",""word_count"":""726""},{""item_id"":""713051974"",""favorite"":""1"",""status"":""1"",""time_added"":""1411859556"",""time_updated"":""1412159693"",""time_read"":""1412151483"",""time_favorited"":""1412151411"",""sort_id"":346,""resolved_title"":""SMPTE Publishes a New Archiving Standard"",""resolved_url"":""http://www.redsharknews.com/post/item/2011-smpte-publish-a-new-archiving-standard"",""excerpt"":""SMPTE, the Society of Motion Picture and Television Engineers, are the creators and guardians of standards in the media industry and they have now turned their attentions to archiving  SMPTE was founded in 1916 and since then it has done an excellent job of standardising the many different formats"",""word_count"":""389""},{""item_id"":""713173106"",""favorite"":""0"",""status"":""1"",""time_added"":""1410651415"",""time_updated"":""1410775053"",""time_read"":""1410724598"",""time_favorited"":""0"",""sort_id"":408,""resolved_title"":""The Pornography of Jihadism"",""resolved_url"":""http://www.theatlantic.com/international/archive/2014/09/isis-jihadist-propaganda-videos-porn/380117/"",""excerpt"":""In his 2008 book Blood and Rage: A Cultural History of Terrorism, the historian Michael Burleigh observes in passing that jihadist martyrdom videos have a similar structure to porn movies."",""word_count"":""2520""},{""item_id"":""713339556"",""favorite"":""0"",""status"":""1"",""time_added"":""1410651414"",""time_updated"":""1410952123"",""time_read"":""1410816013"",""time_favorited"":""0"",""sort_id"":409,""resolved_title"":""Scotland's Democratic Revolution"",""resolved_url"":""http://www.theatlantic.com/international/archive/2014/09/scotland-independence-referendum-constitution/373611/"",""excerpt"":""The Scottish bid for independence could set a new precedent for separatist movements around the world. These are grim times for liberal democracy."",""word_count"":""2224""},{""item_id"":""713697441"",""favorite"":""0"",""status"":""1"",""time_added"":""1411597522"",""time_updated"":""1411739859"",""time_read"":""1411739852"",""time_favorited"":""0"",""sort_id"":368,""resolved_title"":""Unhappy Medium: The Challenges With Archiving Digital Video"",""resolved_url"":""http://www.washingtonian.com/articles/people/unhappy-medium-the-challenges-with-archiving-digital-video/"",""excerpt"":""If you’ve been to the movies in the past decade, chances are you haven’t seen a film."",""word_count"":""1415""},{""item_id"":""714909612"",""favorite"":""0"",""status"":""1"",""time_added"":""1411652309"",""time_updated"":""1411802745"",""time_read"":""1411802740"",""time_favorited"":""0"",""sort_id"":360,""resolved_title"":""Sweden swings to left, far-right party surges to third place"",""resolved_url"":""http://euobserver.com/political/125615"",""excerpt"":""Stockholm - Sweden woke up to political instability on Monday morning. After a tight election race, the Scandinavian nation faces a shift in power, with Social Democrat party leader Stefan Lofven now having to form a government based on one of the worst election results (31."",""word_count"":""426""},{""item_id"":""715046062"",""favorite"":""0"",""status"":""1"",""time_added"":""1411479533"",""time_updated"":""1412159694"",""time_read"":""1412155515"",""time_favorited"":""0"",""sort_id"":393,""resolved_title"":""Opera 25 Beta Adds Linux Support, New Bookmarking Feature"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/09/opera-25-beta-adds-linux-support-new-bookmarking-feature"",""excerpt"":""Opera has announced a beta release of its Chromium-based web browser — the first to support Linux.  The Norwegian software company kickstarted its love for Linux back in June with the launch of dedicated development builds. Now, almost three months on, Opera 25 has graduated to beta status."",""word_count"":""154""},{""item_id"":""715063943"",""favorite"":""0"",""status"":""1"",""time_added"":""1411631652"",""time_updated"":""1412274073"",""time_read"":""1412273990"",""time_favorited"":""0"",""sort_id"":366,""resolved_title"":""ng-admin: Add an AngularJS admin GUI to any RESTful API"",""resolved_url"":""http://marmelab.com/blog/2014/09/15/easy-backend-for-your-restful-api.html"",""excerpt"":""Plenty of applications require a backend admin tool. At marmelab, we have built several such interfaces using the Sonata Project (which is great by the way)."",""word_count"":""632""},{""item_id"":""715124231"",""favorite"":""0"",""status"":""1"",""time_added"":""1411631656"",""time_updated"":""1411802449"",""time_read"":""1411802443"",""time_favorited"":""0"",""sort_id"":363,""resolved_title"":""Why Apple Didn't Use Sapphire for the iPhone Screens"",""resolved_url"":""http://time.com/3377972/why-apple-didnt-use-sapphire-iphone-screens/"",""excerpt"":""Early last month when I was on my weekend hike, I accidentally dropped my iPhone face down on the cement.  As you might expect, the screen broke and made it unusable."",""word_count"":""1537""},{""item_id"":""715793733"",""favorite"":""0"",""status"":""1"",""time_added"":""1411647069"",""time_updated"":""1411802593"",""time_read"":""1411802587"",""time_favorited"":""0"",""sort_id"":361,""resolved_title"":""How Publisher Harper Collins Tackles eBook Piracy"",""resolved_url"":""http://torrentfreak.com/how-publisher-harper-collins-tackles-ebook-piracy-140916/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""716027018"",""favorite"":""0"",""status"":""1"",""time_added"":""1411859552"",""time_updated"":""1412150204"",""time_read"":""1412150200"",""time_favorited"":""0"",""sort_id"":347,""resolved_title"":""Canon 7D Mark II debuts, but what does it mean?"",""resolved_url"":""http://www.redsharknews.com/business/item/2038-canon-7d-mark-ii-debuts,-but-what-does-it-mean"",""excerpt"":""Canon finally shows off its long-awaited successor to the 7D, the 7D Mark II. But what does its confirmed spec list say about the company's intentions?"",""word_count"":""458""},{""item_id"":""716980287"",""favorite"":""0"",""status"":""1"",""time_added"":""1411631654"",""time_updated"":""1411740118"",""time_read"":""1411740095"",""time_favorited"":""0"",""sort_id"":365,""resolved_title"":""Apple’s Biggest Announcement Yet Isn’t About Phones Or Watches"",""resolved_url"":""http://developer.telerik.com/featured/apples-biggest-announcement-yet-isnt-phones-watches/"",""excerpt"":""In case you happen to have missed it, an Apple announcement has claimed the number one spot on Hacker News this morning. As tired as we all are of Apple and the endless speculating and PR barrage, this one is different from most all of the others."",""word_count"":""1003""},{""item_id"":""717038733"",""favorite"":""0"",""status"":""1"",""time_added"":""1417121381"",""time_updated"":""1417121388"",""time_read"":""1417121383"",""time_favorited"":""0"",""sort_id"":41,""resolved_title"":""Out in the Open: A Blogging Tool That Lets You Actually Own What You Post on Facebook"",""resolved_url"":""http://www.wired.com/2014/09/known/"",""excerpt"":""All that stuff you post to Facebook and Twitter and so many other social media sites? Ben Werdmuller and Erin Richey want put it back in your hands."",""word_count"":""776""},{""item_id"":""717072399"",""favorite"":""0"",""status"":""1"",""time_added"":""1411401133"",""time_updated"":""1412159695"",""time_read"":""1412157188"",""time_favorited"":""0"",""sort_id"":401,""resolved_title"":""Guido van Rossum on finding his way — Dropbox Makers — Medium"",""resolved_url"":""https://medium.com/dropbox-makers/guido-van-rossum-on-finding-his-way-e018e8b5f6b1"",""excerpt"":""Guido van Rossum is the creator and benevolent dictator for life (a.k.a. BDFL) of the Python programming language. Here he reflects on his path and shares what he’s been working on since joining Dropbox."",""word_count"":""2086""},{""item_id"":""718132125"",""favorite"":""0"",""status"":""1"",""time_added"":""1411859549"",""time_updated"":""1412117653"",""time_read"":""1412117649"",""time_favorited"":""0"",""sort_id"":348,""resolved_title"":""All the best bits from Europe's biggest broadcast show"",""resolved_url"":""http://www.redsharknews.com/technology/item/2043-redshark-ibc2014"",""excerpt"":""There was a lot of news at IBC2014, particularly on the camera and camera accessory front, and we published a lot of stories as a result (with more still in the pipeline). Here, in case you’ve missed any of our coverage, are the highlights so far (with added Photokina)."",""word_count"":""49""},{""item_id"":""718136484"",""favorite"":""0"",""status"":""1"",""time_added"":""1411479531"",""time_updated"":""1412159695"",""time_read"":""1412157479"",""time_favorited"":""0"",""sort_id"":395,""resolved_title"":""Netflix Works with Ubuntu to Bring Native Playback to All (Updated)"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/09/netflix-linux-html5-nss-change-request"",""excerpt"":""We saw last month just how close native Netflix support for Linux is to arriving, with now only a few simple steps required to enable HTML5 video streaming on Ubuntu desktops.  Now Netflix wants to go one step further. It wants to bring true, out-of-the-box Netflix playback to all Ubuntu users."",""word_count"":""368""},{""item_id"":""718511169"",""favorite"":""0"",""status"":""1"",""time_added"":""1411401060"",""time_updated"":""1412159694"",""time_read"":""1412156014"",""time_favorited"":""0"",""sort_id"":402,""resolved_title"":""Russia cries foul over Scottish independence vote"",""resolved_url"":""http://www.theguardian.com/politics/2014/sep/19/russia-calls-foul-scottish-referendum"",""excerpt"":""Russia has said the conduct of the Scottish referendum \""did not meet international standards\"", with its observers complaining the count took place in rooms that were too big and that the procedure was badly flawed."",""word_count"":""644""},{""item_id"":""718648528"",""favorite"":""0"",""status"":""1"",""time_added"":""1411593508"",""time_updated"":""1412159695"",""time_read"":""1412158400"",""time_favorited"":""0"",""sort_id"":371,""resolved_title"":""World Wide Web inventor slams Internet fast lanes: ‘It’s bribery.’"",""resolved_url"":""http://www.washingtonpost.com/blogs/the-switch/wp/2014/09/19/world-wide-web-inventor-lashes-out-at-internet-fast-lanes-its-bribery/"",""excerpt"":""A quarter-century ago, Timothy Berners-Lee designed the world's first Web browser and server, kicking off a thing that people started calling the World Wide Web."",""word_count"":""504""},{""item_id"":""718663910"",""favorite"":""0"",""status"":""1"",""time_added"":""1411479532"",""time_updated"":""1412159694"",""time_read"":""1412155358"",""time_favorited"":""0"",""sort_id"":394,""resolved_title"":""Arduino and Bruce Sterling Launching an Open-Source Apartment"",""resolved_url"":""http://blog.arduino.cc/2014/09/19/arduino-open-source-apartment/"",""excerpt"":""Arduino co-founder Massimo Banzi, announced at MakerCon the collaboration between the open-source microcontroller and futurist Bruce Sterling."",""word_count"":""114""},{""item_id"":""718705999"",""favorite"":""0"",""status"":""1"",""time_added"":""1411400260"",""time_updated"":""1412159694"",""time_read"":""1412156665"",""time_favorited"":""0"",""sort_id"":404,""resolved_title"":""25+ apps to make your everyday life easier"",""resolved_url"":""http://blog.ted.com/2014/09/19/25-apps-to-make-your-everyday-life-easier"",""excerpt"":""At our small, fast-moving nonprofit company, everyone does a couple of jobs — and productivity apps help us manage roles that shift between coding, writing/designing and running a full-scale conference twice a year. We asked the TED staff what apps they can’t live without."",""word_count"":""2024""},{""item_id"":""719167286"",""favorite"":""0"",""status"":""1"",""time_added"":""1411400265"",""time_updated"":""1412117955"",""time_read"":""1412117943"",""time_favorited"":""0"",""sort_id"":403,""resolved_title"":""Irvine Welsh: this glorious failure could yet be Scotland's finest hour"",""resolved_url"":""http://www.theguardian.com/commentisfree/2014/sep/20/irvine-welsh-scottish-independence-glorious-failure"",""excerpt"":""They came out in their droves, in a last-ditch, stoic defence of the union, to staunch the seemingly irresistible tide towards independence."",""word_count"":""1977""},{""item_id"":""719208972"",""favorite"":""0"",""status"":""1"",""time_added"":""1411593511"",""time_updated"":""1412180438"",""time_read"":""1412180430"",""time_favorited"":""0"",""sort_id"":370,""resolved_title"":""A Journey From Require.js to Browserify"",""resolved_url"":""http://orizens.com/wp/topics/a-journey-from-require-js-to-browserify/"",""excerpt"":""A couple of years ago I started developing Echoes Player with Backbone.js, Underscore.js, Bootstrap and Require.js. Recently I migrated the code to use browserify, and i’d like to share the insights from this process.  Back then, I saw require."",""word_count"":""944""},{""item_id"":""720183883"",""favorite"":""0"",""status"":""1"",""time_added"":""1412106467"",""time_updated"":""1412115164"",""time_read"":""1412115160"",""time_favorited"":""0"",""sort_id"":330,""resolved_title"":""German universities scrap all tuition fees"",""resolved_url"":""http://www.thetimes.co.uk/tto/news/world/europe/article4213550.ece"",""excerpt"":""All German universities will be free of charge when term starts next week after fees were abandoned in Lower Saxony, the last of seven states to charge."",""word_count"":""98""},{""item_id"":""720421959"",""favorite"":""0"",""status"":""1"",""time_added"":""1411583877"",""time_updated"":""1412159693"",""time_read"":""1412151722"",""time_favorited"":""0"",""sort_id"":373,""resolved_title"":""Architecting a Secure RESTful Node.js app"",""resolved_url"":""http://thejackalofjavascript.com/architecting-a-restful-node-js-app/"",""excerpt"":""In this post, we will take a look at architecting a Node.js app that will act as a REST API server for all of our clients. We will be implementing a Token Based Authentication to authenticate and authorize the client to access the application data."",""word_count"":""2675""},{""item_id"":""720522743"",""favorite"":""0"",""status"":""1"",""time_added"":""1411583875"",""time_updated"":""1412180503"",""time_read"":""1412180500"",""time_favorited"":""0"",""sort_id"":374,""resolved_title"":""Police uncover plot to attack EU Commisson HQ"",""resolved_url"":""http://euobserver.com/justice/125709"",""excerpt"":""BRUSSELS - The European Commission headquarters in Brussels was going to be the target of an alleged terrorist plot, according to media reports.  Flemish newspaper Het Laatste Nieuws on Monday (22 September) say police found a cache of weapons and explosives in an apartment in Brussels."",""word_count"":""341""},{""item_id"":""720534106"",""favorite"":""0"",""status"":""1"",""time_added"":""1411401925"",""time_updated"":""1412207883"",""time_read"":""1412207880"",""time_favorited"":""0"",""sort_id"":398,""resolved_title"":""How To Run Almost Any Android App On Windows, OS X, Linux with Chrome"",""resolved_url"":""http://thehackernews.com/2014/09/how-to-run-almost-any-android-app-on_21.html"",""excerpt"":""From last week, Google began paving the way to run Android apps on Chrome Operating System through the project named \""App Runtime for Chrome\"", but the release came with a lot of limitations – it only supported certain Android apps and on Chrome OS only."",""word_count"":""412""},{""item_id"":""720562157"",""favorite"":""0"",""status"":""1"",""time_added"":""1411583873"",""time_updated"":""1412159693"",""time_read"":""1412152250"",""time_favorited"":""0"",""sort_id"":375,""resolved_title"":""A Life Worth Living: Albert Camus on Our Search for Meaning and Why Happiness Is Our Moral Obligation"",""resolved_url"":""http://www.brainpickings.org/2014/09/22/a-life-worth-living-albert-camus/"",""excerpt"":""Why “the demand for happiness and the patient quest for it” isn’t a luxury or a mere need but our existential duty."",""word_count"":""1012""},{""item_id"":""720634760"",""favorite"":""0"",""status"":""1"",""time_added"":""1411583872"",""time_updated"":""1412207801"",""time_read"":""1412207797"",""time_favorited"":""0"",""sort_id"":376,""resolved_title"":""Money Is Pouring Into Tech Like It’s 1999—And That’s Not Good"",""resolved_url"":""http://www.wired.com/2014/09/money-pouring-tech-like-1999and-thats-good/"",""excerpt"":""When respected venture capitalist Bill Gurley said tech startup investors are taking on a level of risk not seen since the dotcom bubble days, the reaction in Silicon Valley was a collective sigh of relief: Finally, someone was saying what everyone was thinking."",""word_count"":""921""},{""item_id"":""720715427"",""favorite"":""0"",""status"":""1"",""time_added"":""1411544214"",""time_updated"":""1412159695"",""time_read"":""1412157602"",""time_favorited"":""0"",""sort_id"":385,""resolved_title"":""Is this finally the end for film?"",""resolved_url"":""http://www.redsharknews.com/technology/item/2051-is-this-finally-the-end-for-film"",""excerpt"":""This is a question that will seemingly never go away. It certainly should do, because we can far exceed the specifications of film now with digital cameras. The argument from cost and convenience was settled a long time ago, but there's still a sizable number of filmmakers who won't let go."",""word_count"":""569""},{""item_id"":""720733949"",""favorite"":""0"",""status"":""1"",""time_added"":""1411544225"",""time_updated"":""1412159694"",""time_read"":""1412154267"",""time_favorited"":""0"",""sort_id"":380,""resolved_title"":""First, Mostly Rave Reviews Arrive For David Fincher's 'Gone Girl'"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/first-mostly-rave-reviews-arrive-for-david-finchers-gone-girl-20140922"",""excerpt"":""The countdown continues for \""Gone Girl,\"" with the world premiere of the film this Friday at the New York Film Festival. But the buzz for that screening just got a bit louder as the week is kicking off with the first reviews for David Fincher's sprawling procedural (it runs 145 minutes) coming in."",""word_count"":""915""},{""item_id"":""720810864"",""favorite"":""0"",""status"":""1"",""time_added"":""1411583870"",""time_updated"":""1412159694"",""time_read"":""1412153931"",""time_favorited"":""0"",""sort_id"":377,""resolved_title"":""The video player that gets out of your way."",""resolved_url"":""http://www.customplayer.io/"",""excerpt"":""Customplayer.io Login  The video player that gets out of your way. Build a video player that matches your branding in minutes Here are some of the amazing features  Call To Action Drive viewers to your desired online location.  Customisable Easily create a custom player that matches your branding."",""word_count"":""73""},{""item_id"":""721573390"",""favorite"":""0"",""status"":""1"",""time_added"":""1411542360"",""time_updated"":""1412159694"",""time_read"":""1412154753"",""time_favorited"":""0"",""sort_id"":388,""resolved_title"":""Hackers are trying to silence Emma Watson by leaking nude photos - but they only made her voice louder"",""resolved_url"":""http://www.theguardian.com/women-in-leadership/2014/sep/23/hackers-tried-silence-emma-watson-naked-photos-but-made-her-voice-louder"",""excerpt"":""It’s amazing how quickly your Twitter feed can turn. One minute mine was filled with people congratulating Emma Watson on her UN speech, urging men to join the fight for gender equality. The next, all I saw were retweets of this:"",""word_count"":""676""},{""item_id"":""721701997"",""favorite"":""0"",""status"":""1"",""time_added"":""1411542356"",""time_updated"":""1412159694"",""time_read"":""1412155070"",""time_favorited"":""0"",""sort_id"":390,""resolved_title"":""Erasmus students find love and jobs, EU research finds"",""resolved_url"":""http://euobserver.com/education/125728"",""excerpt"":""BRUSSELS - If you are looking for love and a good job then you need to use the Erasmus student exchange programme, according to new research published by the European Commission."",""word_count"":""492""},{""item_id"":""721852578"",""favorite"":""0"",""status"":""1"",""time_added"":""1416662940"",""time_updated"":""1417169295"",""time_read"":""1417169291"",""time_favorited"":""0"",""sort_id"":62,""resolved_title"":""ParseHub: Extract data from dynamic websites in minutes, without writing code."",""resolved_url"":""https://www.parsehub.com"",""excerpt"":""You can extract data from anywhere. ParseHub works with single-page apps, multi-page apps and just about any other modern web technology.  ParseHub can handle Javascript, AJAX, cookies, sessions and redirects."",""word_count"":""248""},{""item_id"":""721887129"",""favorite"":""0"",""status"":""1"",""time_added"":""1411542359"",""time_updated"":""1412159694"",""time_read"":""1412155140"",""time_favorited"":""0"",""sort_id"":389,""resolved_title"":""Vince Vaughn Confirmed For 'True Detective' Season 2, Official Logline Revealed & Justin Lin To Direct First 2 Episodes"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/vince-vaughn-confirmed-for-true-detective-official-logline-revealed-justin-lin-to-direct-first-2-episodes-20140923"",""excerpt"":""Joining Farrell will be the long rumored Vince Vaughn, with the official logline revealing the basic outline of the story: Three police officers and a career criminal must navigate a web of conspiracy in the aftermath of a murder."",""word_count"":""193""},{""item_id"":""722071644"",""favorite"":""0"",""status"":""1"",""time_added"":""1411542362"",""time_updated"":""1412159694"",""time_read"":""1412154584"",""time_favorited"":""0"",""sort_id"":387,""resolved_title"":""Seattle to fine residents and businesses for wasting food"",""resolved_url"":""http://www.bbc.co.uk/news/world-us-canada-29336968#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa"",""excerpt"":""The Seattle city council has voted to fine businesses and residents that waste too much food.  Under the new rules, households will be fined $1 (£0.61) if their rubbish bins contain more than 10% food waste, and businesses and apartment buildings $50."",""word_count"":""280""},{""item_id"":""722522188"",""favorite"":""0"",""status"":""1"",""time_added"":""1411591980"",""time_updated"":""1411735673"",""time_read"":""1411722173"",""time_favorited"":""0"",""sort_id"":372,""resolved_title"":""TripAdvisor's Viator Hit by Massive Data Breach Affecting 1.4 Customers"",""resolved_url"":""http://thehackernews.com/2014/09/tripadvisors-viator-hit-by-massive-14_24.html"",""excerpt"":""TripAdvisor's Online travel booking and review website Viator has reportedly been hit by a massive data breach at its  that may have exposed payment card details and account credentials of its customers, affecting an estimated 1.4 million of its customers."",""word_count"":""374""},{""item_id"":""722772636"",""favorite"":""0"",""status"":""1"",""time_added"":""1411582753"",""time_updated"":""1412159693"",""time_read"":""1412152262"",""time_favorited"":""0"",""sort_id"":378,""resolved_title"":""Four million to study under new Erasmus programme"",""resolved_url"":""http://euobserver.com/tickers/125720"",""excerpt"":""The new \""Erasmus+\"" programme will offer EU grants to nearly 4 million people between 2014 and 2020, allowing them to experience life in another country through studies, education commissioner Androulla Vassiliou announced on Monday."",""word_count"":""46""},{""item_id"":""723226484"",""favorite"":""0"",""status"":""1"",""time_added"":""1411631650"",""time_updated"":""1411739883"",""time_read"":""1411739876"",""time_favorited"":""0"",""sort_id"":367,""resolved_title"":""EU warns Serbia on South Stream"",""resolved_url"":""http://euobserver.com/tickers/125660"",""excerpt"":""The European Commission has said it has no power to stop Serbia from building Russia's South Stream gas pipeline. But it warned that the pipe will not be allowed to ship gas into the EU until it complies with EU law and that construction could hurt Serbia's EU entry attempts."",""word_count"":""50""},{""item_id"":""723511207"",""favorite"":""0"",""status"":""1"",""time_added"":""1411657272"",""time_updated"":""1412180193"",""time_read"":""1412180190"",""time_favorited"":""0"",""sort_id"":356,""resolved_title"":""Understanding ISO: In digital cameras, it's not what you think it is  Featured"",""resolved_url"":""http://www.redsharknews.com/technology/item/1966-understanding-iso-in-digital-cameras,-it-s-not-what-you-think-it-is"",""excerpt"":""ISO ratings made perfect sense in the days of photochemical film but only serve to muddy the waters when it comes to assessing camera performance in the digital age."",""word_count"":""682""},{""item_id"":""723629457"",""favorite"":""0"",""status"":""1"",""time_added"":""1411670797"",""time_updated"":""1411735673"",""time_read"":""1411721641"",""time_favorited"":""0"",""sort_id"":354,""resolved_title"":""Review: iPhone 6 Apple"",""resolved_url"":""http://www.wired.com/2014/09/iphone-6-review/"",""excerpt"":""For the first time, the big question for Apple fans isn’t “are you getting a new iPhone?” It’s which iPhone are you getting. A 6 or the ginormous 6 Plus?  Yes, the 5 came in two flavors too, but let’s be real—no one debated whether to get a 5c or a 5s at launch last year."",""word_count"":""1201""},{""item_id"":""723862916"",""favorite"":""0"",""status"":""1"",""time_added"":""1412595838"",""time_updated"":""1413454512"",""time_read"":""1413454510"",""time_favorited"":""0"",""sort_id"":275,""resolved_title"":""JavaScript Obsessive-Compulsive disorder"",""resolved_url"":""http://berzniz.com/post/98422338286/ocd-js-javascript-obsessive-compulsive-disorder"",""excerpt"":""Yes, I may look fine on the outside, but I have a terrible disorder: The . Also known as the ocd.js disorder.  The ocd.js disorder is isn’t genetic. It only attacks developers who’ve been around JavaScript for a while and started to like it. node.js users are prone to this disorder as well."",""word_count"":""411""},{""item_id"":""724334614"",""favorite"":""0"",""status"":""1"",""time_added"":""1411859545"",""time_updated"":""1412117668"",""time_read"":""1412117662"",""time_favorited"":""0"",""sort_id"":349,""resolved_title"":""Nvidia proves the Moon Landings were not a hoax"",""resolved_url"":""http://www.redsharknews.com/technology/item/2050-nvidia-prove-the-moon-landings-were-not-a-hoax"",""excerpt"":""45 years after the Apollo 11 astronauts landed on the moon, Nvidia has used its new \""Maxwell\"" GPUs to prove that the images were not faked  Nvidia has just launched its latest family of GPUs, the GTX970 and GTX980 based on the new \""Maxwell\"" processors, and it has chosen a very interesting way to sh"",""word_count"":""407""},{""item_id"":""724579863"",""favorite"":""0"",""status"":""0"",""time_added"":""1412084655"",""time_updated"":""1412084655"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":335,""resolved_title"":""Watch: Trailer For Jacques Tati's Restored Masterpiece 'Playtime,' Shot On 70mm"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/watch-trailer-for-jacques-tatis-restored-masterpiece-playtime-shot-on-70mm-20140926"",""excerpt"":""Directors like Alfred Hitchcock and Stanley Kubrick are notorious for the meticulous manner in which they constructed their films, shooting and reshooting to an incredible extent in order to get exactly what they wanted."",""word_count"":""309""},{""item_id"":""725357816"",""favorite"":""0"",""status"":""1"",""time_added"":""1412613645"",""time_updated"":""1412807963"",""time_read"":""1412807958"",""time_favorited"":""0"",""sort_id"":262,""resolved_title"":""At CIA Starbucks, even the baristas are covert"",""resolved_url"":""http://www.washingtonpost.com/politics/at-cia-starbucks-even-the-baristas-are-covert/2014/09/27/5a04cd28-43f5-11e4-9a15-137aa0153527_story.html"",""excerpt"":""The new supervisor thought his idea was innocent enough. He wanted the baristas to write the names of customers on their cups to speed up lines and ease confusion, just like other Starbucks do around the world.  But these aren’t just any customers. They are regulars at the CIA Starbucks."",""word_count"":""911""},{""item_id"":""725455761"",""favorite"":""0"",""status"":""1"",""time_added"":""1412613644"",""time_updated"":""1413423625"",""time_read"":""1413423621"",""time_favorited"":""0"",""sort_id"":263,""resolved_title"":""How does SQLite work? Part 1: pages!"",""resolved_url"":""http://jvns.ca/blog/2014/09/27/how-does-sqlite-work-part-1-pages/"",""excerpt"":""This evening the fantastic Kamal and I sat down to learn a little more about databases than we did before.  Just a primary key and a string! What could be simpler? I then wrote a little Python script to put the contents of /usr/share/dict/words in the database:"",""word_count"":""643""},{""item_id"":""726090414"",""favorite"":""0"",""status"":""1"",""time_added"":""1412613643"",""time_updated"":""1414454264"",""time_read"":""1414454256"",""time_favorited"":""0"",""sort_id"":264,""resolved_title"":""With New Ad Platform, Facebook Opens Gates to Its Vault of User Data"",""resolved_url"":""http://www.nytimes.com/2014/09/29/business/with-new-ad-platform-facebook-opens-the-gates-to-its-vault-of-consumer-data.html"",""excerpt"":""SAN FRANCISCO —  Facebook built itself into the No. 2 digital advertising platform in the world by analyzing the vast amount of data it had on each of its 1.3 billion users to sell individually targeted ads on its social network."",""word_count"":""798""},{""item_id"":""726278054"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593699"",""time_updated"":""1414862005"",""time_read"":""1414861994"",""time_favorited"":""0"",""sort_id"":290,""resolved_title"":""Belgrade gay pride a 'milestone'"",""resolved_url"":""http://euobserver.com/social/125795"",""excerpt"":""BRUSSELS - Gay people in Serbia held a march in Belgrade on Sunday (28 September) in what has been described as a “milestone” in the country's history."",""word_count"":""369""},{""item_id"":""726613924"",""favorite"":""0"",""status"":""1"",""time_added"":""1412082746"",""time_updated"":""1412149981"",""time_read"":""1412149942"",""time_favorited"":""0"",""sort_id"":340,""resolved_title"":""How Hong Kong Protesters Are Connecting, Without Cell Or Wi-Fi Networks"",""resolved_url"":""http://www.npr.org/blogs/alltechconsidered/2014/09/29/352476454/how-hong-kong-protesters-are-connecting-without-cell-or-wi-fi-networks"",""excerpt"":""As throngs of pro-democracy protesters continue to organize in Hong Kong's central business district, many of them are messaging one another through a network that doesn't require cell towers or Wi-Fi nodes."",""word_count"":""486""},{""item_id"":""726681873"",""favorite"":""0"",""status"":""1"",""time_added"":""1412100586"",""time_updated"":""1412159695"",""time_read"":""1412158827"",""time_favorited"":""0"",""sort_id"":332,""resolved_title"":""Former Rwandan Official Worries That Kagame's Adminis­tration is Back­sliding into Mass Murder"",""resolved_url"":""http://blog.foreignpolicy.com/posts/2014/09/29/former_rwandan_official_worries_that_kagames_administration_is_backsliding"",""excerpt"":""When Burundian fishermen first discovered bodies in Lake Wreru on the border of Rwanda this July, the Rwandan government quickly denied involvement in the apparent murders."",""word_count"":""1204""},{""item_id"":""726703875"",""favorite"":""0"",""status"":""1"",""time_added"":""1412114642"",""time_updated"":""1412208075"",""time_read"":""1412208071"",""time_favorited"":""0"",""sort_id"":328,""resolved_title"":""Libraries: The physical + digital = new space for learning"",""resolved_url"":""http://www.knightfoundation.org/blogs/knightblog/2014/9/29/libraries-physical-digital-new-space-learning/"",""excerpt"":""Knight News Challenge: Libraries offers applicants a chance to share in $2."",""word_count"":""973""},{""item_id"":""726745402"",""favorite"":""0"",""status"":""1"",""time_added"":""1412613642"",""time_updated"":""1413423987"",""time_read"":""1413423986"",""time_favorited"":""0"",""sort_id"":265,""resolved_title"":""Analyzing Trends in the Silk Road 2.0"",""resolved_url"":""http://lau.im/articles/analyzing-silk-road-2-0-part-1/"",""excerpt"":""This sounded pretty cool to me, though not necessarily applicable because the current Silk Road 2.0 (I’ll just be calling it SR from now on) isn’t using anything nearly as sophisticated.  The following information is for educational purposes only, I have no affiliation with the Silk Road 2."",""word_count"":""1201""},{""item_id"":""727215789"",""favorite"":""0"",""status"":""1"",""time_added"":""1412082748"",""time_updated"":""1412117156"",""time_read"":""1412117144"",""time_favorited"":""0"",""sort_id"":339,""resolved_title"":""Could Putin’s troops ‘be in Warsaw in two days’?"",""resolved_url"":""http://euobserver.com/defence/125807"",""excerpt"":""BRUSSELS - “If I wanted, in two days I could have Russian troops not only in Kiev, but also in Riga, Vilnius, Tallinn, Warsaw, and Bucharest”, Russian leader Vladimir Putin said, according to a report in Germany’s Suddeutsche Zeitung on 18 September."",""word_count"":""1257""},{""item_id"":""727233364"",""favorite"":""0"",""status"":""1"",""time_added"":""1412082749"",""time_updated"":""1412117336"",""time_read"":""1412117328"",""time_favorited"":""0"",""sort_id"":338,""resolved_title"":""Professional Video Editor `Lightworks` v12 Available For Download"",""resolved_url"":""http://www.webupd8.org/2014/09/professional-video-editor-lightworks.html"",""excerpt"":""\""The release of Lightworks version 12 marks a unique milestone in that for the first time, the same version runs on the Windows, Linux and Macintosh platforms - a unique achievement for a professional, fully featured NLE."",""word_count"":""602""},{""item_id"":""727380002"",""favorite"":""1"",""status"":""1"",""time_added"":""1412634599"",""time_updated"":""1412817465"",""time_read"":""1412817461"",""time_favorited"":""1412817237"",""sort_id"":247,""resolved_title"":""Brave New World of File based Delivery. The UK is first to switch over"",""resolved_url"":""http://www.redsharknews.com/distribution/item/2059-brave-new-world-of-file-delivery"",""excerpt"":""Guest author Neal Romanek examines UK's switch-over from tape to one standard file format, DPP AS-11, and how it challenges the broadcast industry at home and abroad.  The first day of October is a landmark day for UK broadcasting and perhaps a step forward for the rest of the broadcast world."",""word_count"":""853""},{""item_id"":""727532452"",""favorite"":""0"",""status"":""1"",""time_added"":""1412105525"",""time_updated"":""1412115906"",""time_read"":""1412115896"",""time_favorited"":""0"",""sort_id"":331,""resolved_title"":""Windows 10: One Operating System To Rule PCs, Phones, Tablets"",""resolved_url"":""http://gizmodo.com/windows-10-microsoft-skips-a-digit-with-latest-operati-1640805626"",""excerpt"":""Microsoft just announced the newest version of Windows. It's called Windows 10. Yes, there's no Windows 9 — Microsoft has decided to skip a digit in search of the perfect name."",""word_count"":""719""},{""item_id"":""727564419"",""favorite"":""0"",""status"":""1"",""time_added"":""1412099668"",""time_updated"":""1412116663"",""time_read"":""1412116645"",""time_favorited"":""0"",""sort_id"":333,""resolved_title"":""PCs have just received a big speed boost. Here's our guide to the new chipsets"",""resolved_url"":""http://www.redsharknews.com/technology/item/2061-pcs-have-just-received-a-big-speed-boost-here-s-our-guide-to-the-new-chipsets?utm_source=www.lwks.com+subscribers&utm_campaign=726b8dd4c5-RSN_Sept30_2014&utm_medium=email&utm_term=0_079aaa3026-726b8dd4c5-75349817"",""excerpt"":""Haswell, Xeon & Core Demystified - Part One. Guest author Rakesh Malik sheds light on the latest Intel chipsets, their capabilities and their suitability for video applications.  There seems to be quite a bit of confusion about what the differences are between Core and Xeon processors."",""word_count"":""840""},{""item_id"":""727620019"",""favorite"":""0"",""status"":""1"",""time_added"":""1412147122"",""time_updated"":""1412165443"",""time_read"":""1412165437"",""time_favorited"":""0"",""sort_id"":323,""resolved_title"":""The Case Against Qatar"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/09/30/the_case_against_qatar_funding_extremists_salafi_syria_uae_jihad_muslim_brotherhood_taliban"",""excerpt"":""The tiny, gas-rich\r emirate has pumped tens of millions of dollars through obscure funding networks to hard-line Syrian rebels and extremist Salafists, building a foreign policy that punches above its weight."",""word_count"":""5632""},{""item_id"":""728065228"",""favorite"":""0"",""status"":""1"",""time_added"":""1412202909"",""time_updated"":""1412203373"",""time_read"":""1412203366"",""time_favorited"":""0"",""sort_id"":322,""resolved_title"":""Drupal 8.0.0 beta 1 released"",""resolved_url"":""https://www.drupal.org/drupal-8.0.0-beta1"",""excerpt"":""Drupal 8.0.0-beta1 has just been released for testing and feedback! This key milestone is the work of over 2,300 people who have contributed more than 11,500 committed patches to 15 alpha releases, and especially the 234 contributors who fixed 177 \""beta blocker\"" issues."",""word_count"":""519""},{""item_id"":""728480042"",""favorite"":""1"",""status"":""1"",""time_added"":""1412252515"",""time_updated"":""1412284883"",""time_read"":""1412280578"",""time_favorited"":""1412280576"",""sort_id"":320,""resolved_title"":""Seriously, Nobody Wants To Host The 2022 Olympics"",""resolved_url"":""http://deadspin.com/nobody-wants-to-host-the-2022-olympics-1582151092/1641262594/+barryap?utm_campaign=socialflow_deadspin_facebook&utm_source=deadspin_facebook&utm_medium=socialflow"",""excerpt"":""Norway's ruling party just voted against funding Oslo's 2022 Winter Olympics bid, essentially forcing the city to drop out of the race. It's just the latest in a long series of cities and countries who have given an emphatic \""no\"" to hosting the Olympic quagmire."",""word_count"":""325""},{""item_id"":""728658560"",""favorite"":""0"",""status"":""1"",""time_added"":""1412613641"",""time_updated"":""1413424071"",""time_read"":""1413424069"",""time_favorited"":""0"",""sort_id"":266,""resolved_title"":""MemSQL Does Oracle’s Own Demo Ten Times As Fast, Sixty Times Cheaper"",""resolved_url"":""http://blog.memsql.com/memsql-does-oracles-own-demo-ten-times-as-fast-sixty-times-cheaper/"",""excerpt"":""In preparation for Open World, I asked some of our engineers to recreate a demo that Oracle has been using over the last year to show off their “in-memory option."",""word_count"":""309""},{""item_id"":""728767060"",""favorite"":""0"",""status"":""1"",""time_added"":""1412613640"",""time_updated"":""1413454069"",""time_read"":""1413454066"",""time_favorited"":""0"",""sort_id"":267,""resolved_title"":""Re: MemSQL the \""world's fastest database\""?"",""resolved_url"":""http://www.postgresql.org/message-id/4FE8A2DE.5050806@agliodbs.com"",""excerpt"":""On 6/25/12 10:23 AM, Kevin Grittner wrote: > Craig James <cjames(at)emolecules(dot)com> wrote: > >> It claims to be \""the world's fastest database."",""word_count"":""239""},{""item_id"":""728991274"",""favorite"":""0"",""status"":""1"",""time_added"":""1412624252"",""time_updated"":""1415023206"",""time_read"":""1415023198"",""time_favorited"":""0"",""sort_id"":251,""resolved_title"":""The Merkel Effect: What Today's Germany Owes to Its Once-Communist East"",""resolved_url"":""http://www.spiegel.de/international/germany/how-east-germany-influences-modern-day-german-politics-a-994410.html#ref=rss"",""excerpt"":""East Germany ceased to exist following the 1989 revolution and the fall of the Berlin Wall. But did the former communist country help shape today's Germany? The answer is yes, and Chancellor Merkel is a big reason why."",""word_count"":""2745""},{""item_id"":""729014979"",""favorite"":""0"",""status"":""1"",""time_added"":""1412634594"",""time_updated"":""1413194365"",""time_read"":""1413194361"",""time_favorited"":""0"",""sort_id"":248,""resolved_title"":""Interstellar is Christopher Nolan's latest blockbuster - and it was shot on film!"",""resolved_url"":""http://www.redsharknews.com/production/item/2071-interstellar-is-christopher-nolan-s-latest-blockbuster-and-it-was-shot-on-film"",""excerpt"":""The trailer for Interstellar, the new Christopher Nolan film is pretty stunning, and we’re all excited about the movie because we’re all SciFi fans. We love a bit of ground-breaking CGI and the latest in digital cinematography."",""word_count"":""236""},{""item_id"":""729505569"",""favorite"":""0"",""status"":""1"",""time_added"":""1412286641"",""time_updated"":""1412513950"",""time_read"":""1412324505"",""time_favorited"":""0"",""sort_id"":319,""resolved_title"":""Should we repeal the Human Rights Act?"",""resolved_url"":""http://www.totalpolitics.com/print/160582/should-we-repeal-the-human-rights-act.thtml"",""excerpt"":""With discussions ongoing about the need for a British Bill of Rights, Bill Cash and Julian Huppert disagree on whether the UK’s current legislation should be replaced   Bill Cash MP says yes When I was shadow attorney general, I recommended – and my party accepted – that we repeal the Human"",""word_count"":""1476""},{""item_id"":""729594418"",""favorite"":""0"",""status"":""1"",""time_added"":""1412591404"",""time_updated"":""1412969396"",""time_read"":""1412969390"",""time_favorited"":""0"",""sort_id"":316,""resolved_title"":""Ubuntu 14.10 (Utopic Unicorn) Desktop Screenshots"",""resolved_url"":""http://www.ubuntugeek.com/ubuntu-14-10-utopic-unicorn-desktop-screenshots.html"",""excerpt"":""Sponsored Link  The Ubuntu team is pleased to announce the final beta release of Ubuntu 14.10 Desktop, Server, Cloud, and Core products. Codenamed \""Utopic Unicorn\"", 14."",""word_count"":""146""},{""item_id"":""730791134"",""favorite"":""0"",""status"":""1"",""time_added"":""1413052487"",""time_updated"":""1413468520"",""time_read"":""1413468516"",""time_favorited"":""0"",""sort_id"":224,""resolved_title"":""JavaScript unit testing: guiding principles and common excuses"",""resolved_url"":""http://blogs.msdn.com/b/matt-harrington/archive/2014/10/03/javascript-unit-testing-guiding-principles-and-common-excuses.aspx"",""excerpt"":""There's a lot of interest in JavaScript at Microsoft. Did you know that:  As a consequence, Visual Studio is an excellent tool for writing JavaScript, even if you're just writing a web app and not a Windows app."",""word_count"":""317""},{""item_id"":""731059472"",""favorite"":""0"",""status"":""1"",""time_added"":""1412607867"",""time_updated"":""1412682004"",""time_read"":""1412681993"",""time_favorited"":""0"",""sort_id"":269,""resolved_title"":""Why Apple's iPhone encryption won't stop NSA (or any other intelligence agency)"",""resolved_url"":""http://siliconexposed.blogspot.com/2014/10/why-apples-iphone-encryption-wont-stop.html"",""excerpt"":""Recent news headlines have made a big deal of Apple encrypting more of the storage on their handsets, and claiming to not have a key. Depending on who you ask this is either a huge win for privacy, or a massive blow to intelligence collection and law enforcement capabilities."",""word_count"":""1226""},{""item_id"":""731185167"",""favorite"":""0"",""status"":""1"",""time_added"":""1412607866"",""time_updated"":""1414454634"",""time_read"":""1414454632"",""time_favorited"":""0"",""sort_id"":270,""resolved_title"":""firechat and nearby communication"",""resolved_url"":""http://breizh-entropy.org/~nameless/random/posts/firechat_and_nearby_communication/"",""excerpt"":""I recently discovered the existence of Firechat when I heard that it was being used by thousands of protester during the ongoing \""Umbrella Revolution\"" in Hong Kong."",""word_count"":""2346""},{""item_id"":""731548543"",""favorite"":""0"",""status"":""1"",""time_added"":""1412591125"",""time_updated"":""1414968809"",""time_read"":""1414968803"",""time_favorited"":""0"",""sort_id"":318,""resolved_title"":""Top 10 Reasons Not to Eat Chicken"",""resolved_url"":""http://www.peta.org/living/other/top-10-reasons-eat-chickens/"",""excerpt"":""Quite simply, chickens are the most abused animals on the planet. More than 55 times as many chickens are slaughtered each year as pigs and cows combined!"",""word_count"":""1075""},{""item_id"":""731865985"",""favorite"":""0"",""status"":""1"",""time_added"":""1412591401"",""time_updated"":""1413647582"",""time_read"":""1413647576"",""time_favorited"":""0"",""sort_id"":317,""resolved_title"":""The Best New Features of Linux Kernel 3.17"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/10/linux-kernel-3-17-whats-new-improved"",""excerpt"":""Linus Torvalds has announced the latest stable release of the Linux kernel, version 3.17.  As with every new release, Linux 3.17 sees the kernel loaded up on the latest improvements, hardware support, fixes and so on. These range from the bamboozling – e.g."",""word_count"":""337""},{""item_id"":""731880125"",""favorite"":""0"",""status"":""0"",""time_added"":""1413277686"",""time_updated"":""1415023365"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":213,""resolved_title"":""The Socialist Origins of Big Data"",""resolved_url"":""http://www.newyorker.com/magazine/2014/10/13/planning-machine"",""excerpt"":""In June, 1972, Ángel Parra, Chile’s leading folksinger, wrote a song titled “Litany for a Computer and a Baby About to Be Born.” Computers are like children, he sang, and Chilean bureaucrats must not abandon them."",""word_count"":""4171""},{""item_id"":""731945052"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593692"",""time_updated"":""1413540349"",""time_read"":""1413540345"",""time_favorited"":""0"",""sort_id"":295,""resolved_title"":""Helmut Kohl embarrassed by new book"",""resolved_url"":""http://euobserver.com/tickers/125897"",""excerpt"":""A book of interviews with former Chancellor Helmut Kohl recorded in 2001 is to be published against his will at the Frankfurt Book Fair on Wednesday. According to the book, \""Legacy - the Kohl Transcripts\"", Angela Merkel \""couldn't eat with a knife and fork,\"" and Gorbachev left a forgettable legacy."",""word_count"":""48""},{""item_id"":""731979083"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593685"",""time_updated"":""1413540401"",""time_read"":""1413540397"",""time_favorited"":""0"",""sort_id"":299,""resolved_title"":""Catalonia passes historic anti-homophobia law"",""resolved_url"":""http://euobserver.com/justice/125904"",""excerpt"":""BRUSSELS - Catalonia’s new anti-homophobe legislation could see offenders fined up to €14,000 for attacks carried out against lesbians, gays, bisexuals and transsexuals (LGTB).  The Catalan chamber passed the bill on Thursday (2 October) in what has been described as a first in Spain."",""word_count"":""369""},{""item_id"":""731980368"",""favorite"":""0"",""status"":""1"",""time_added"":""1412592718"",""time_updated"":""1414860507"",""time_read"":""1414860502"",""time_favorited"":""0"",""sort_id"":301,""resolved_title"":""Karl Marx’s Life and Legacy, in a Comic"",""resolved_url"":""http://www.brainpickings.org/2014/10/06/marx-nobrow-maier-simon/"",""excerpt"":""From the opium of the masses to the downfall of capitalism, by way of love and revolution."",""word_count"":""336""},{""item_id"":""732070181"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593687"",""time_updated"":""1413540426"",""time_read"":""1413540424"",""time_favorited"":""0"",""sort_id"":298,""resolved_title"":""Austria to sue EU if it backs UK nuclear plant"",""resolved_url"":""http://euobserver.com/tickers/125906"",""excerpt"":""Austria will take the European Commission to the EU's top court if it approves Britain's plans for a new €20 billion nuclear plant, the Chancellor said Saturday. A number of EU countries say the plan to guarantee the price of power produced in the plant breaches EU state aid rules."",""word_count"":""49""},{""item_id"":""732070205"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593688"",""time_updated"":""1413540368"",""time_read"":""1413540364"",""time_favorited"":""0"",""sort_id"":297,""resolved_title"":""Farage - countries leaving EU 'inevitable'"",""resolved_url"":""http://euobserver.com/tickers/125905"",""excerpt"":""It is \""inevitable\"" that countries will soon leave the euro and the EU, Ukip leader Nigel Farage said Sunday. Speaking in Switzerland, Farage said divisions between rich and poor countries would doom the eurozone. He added that promises by David Cameron to curb EU migration were \""a gross deception\""."",""word_count"":""49""},{""item_id"":""732070231"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593690"",""time_updated"":""1413540438"",""time_read"":""1413540436"",""time_favorited"":""0"",""sort_id"":296,""resolved_title"":""Rajoy urges talks over Catalonia referendum"",""resolved_url"":""http://euobserver.com/tickers/125899"",""excerpt"":""Spanish PM Rajoy has called for talks with the Catalan regional authorities over plans to go ahead with an independence referendum on 9 November despite the Spanish Constitutional Court ruling that it would be illegal."",""word_count"":""49""},{""item_id"":""732070293"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593696"",""time_updated"":""1413540334"",""time_read"":""1413540331"",""time_favorited"":""0"",""sort_id"":292,""resolved_title"":""EU cracks down on Ryanair"",""resolved_url"":""http://euobserver.com/tickers/125849"",""excerpt"":""EU regulators on Wednesday ordered Ryanair and Lufthansa's Germanwings, along with two airports, to pay back millions of euros in illegal subsidies, reports the Wall Street Journal. Illegal subsidies amount to €500,000 for Ryanair, €1."",""word_count"":""46""},{""item_id"":""732070309"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593697"",""time_updated"":""1413540608"",""time_read"":""1413540605"",""time_favorited"":""0"",""sort_id"":291,""resolved_title"":""Apple's tax deal illegal, EU commission tells Ireland"",""resolved_url"":""http://euobserver.com/news/125806"",""excerpt"":""BRUSSELS - Ireland's tax arrangement with software giant Apple constitutes illegal state subsidy, the European Commission has said."",""word_count"":""460""},{""item_id"":""732070343"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593700"",""time_updated"":""1413540162"",""time_read"":""1413540159"",""time_favorited"":""0"",""sort_id"":289,""resolved_title"":""EU bans party drug called 'bath salts'"",""resolved_url"":""http://euobserver.com/tickers/125771"",""excerpt"":""The EU on Thursday banned a party drug also known as \""bath salts\"", a synthetic stimulant that can spark psychotic episodes. In the US, the drug was linked to an attack where a man chewed off another's face. Four other synthetic drugs were also banned: MDPV, Methoxetamine, AH-7921 and 25I-NBOMe."",""word_count"":""50""},{""item_id"":""732070370"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593702"",""time_updated"":""1415004075"",""time_read"":""1415004071"",""time_favorited"":""0"",""sort_id"":288,""resolved_title"":""German commissioner wants to limit Google near-monopoly"",""resolved_url"":""http://euobserver.com/tickers/125774"",""excerpt"":""Incoming digital commissioner Guenther Oettinger is demanding tough action against the near-monopoly of internet search firm Google, even though competition is the remit of his Danish colleague, Margrethe Vestager. Google has a 90% market share among search engines."",""word_count"":""37""},{""item_id"":""732070496"",""favorite"":""0"",""status"":""1"",""time_added"":""1412593716"",""time_updated"":""1413540032"",""time_read"":""1413540028"",""time_favorited"":""0"",""sort_id"":280,""resolved_title"":""Hungary orders new raids on NGOs"",""resolved_url"":""http://euobserver.com/tickers/125528"",""excerpt"":""Hungarian police Monday raided the offices of two NGOs, Demnet and Okotars, seizing computers and accusing them of financial wrongdoing. The raid comes after similar sweeps in May."",""word_count"":""49""},{""item_id"":""732101690"",""favorite"":""0"",""status"":""1"",""time_added"":""1412804179"",""time_updated"":""1413037547"",""time_read"":""1413037240"",""time_favorited"":""0"",""sort_id"":229,""resolved_title"":""iPhone Encryption and the Return of the Crypto Wars"",""resolved_url"":""https://www.schneier.com/blog/archives/2014/10/iphone_encrypti_1.html"",""excerpt"":""Last week, Apple announced that it is closing a serious security vulnerability in the iPhone. It used to be that the phone's encryption only protected a small amount of the data, and Apple had the ability to bypass security on the rest of it.  From now on, all the phone's data is protected."",""word_count"":""1071""},{""item_id"":""732158218"",""favorite"":""0"",""status"":""1"",""time_added"":""1412604006"",""time_updated"":""1413454361"",""time_read"":""1413454359"",""time_favorited"":""0"",""sort_id"":271,""resolved_title"":""Over 17000 Mac Machines Affected by 'iWorm' Botnet Malware"",""resolved_url"":""http://thehackernews.com/2014/10/over-17000-mac-machines-affected-by_6.html"",""excerpt"":""According to a survey of traffic conducted in September by researchers at Dr. Web, over 17,000 Macs globally are part of the Mac.BackDoor.iWorm botnet, which creates a backdoor on machines running OS X. Researchers say almost a quarter of iWorm botnet are located in the US."",""word_count"":""359""},{""item_id"":""732226629"",""favorite"":""1"",""status"":""1"",""time_added"":""1413757216"",""time_updated"":""1413920878"",""time_read"":""1413920876"",""time_favorited"":""1413920876"",""sort_id"":182,""resolved_title"":""Our cities' water systems are becoming obsolete. What will replace them?"",""resolved_url"":""http://www.vox.com/2014/10/6/6900959/water-systems-pollution-drinking-water-desalination"",""excerpt"":""Most of us in the United States don’t give much thought to our drinking water. When we turn on our faucets, clean drinking water comes out. When we flush our toilets, the waste goes away. Simple, right?  But as David Sedlak explains in his fascinating book, Water 4."",""word_count"":""2998""},{""item_id"":""732244310"",""favorite"":""0"",""status"":""1"",""time_added"":""1412665008"",""time_updated"":""1412855642"",""time_read"":""1412855635"",""time_favorited"":""0"",""sort_id"":240,""resolved_title"":""The Coolest Windows 10 Features Microsoft Didn't Announce"",""resolved_url"":""http://lifehacker.com/the-coolest-windows-10-features-microsoft-didnt-announc-1642802880"",""excerpt"":""'; if (google_ads[0].bidtype == 'CPC') { /* insert this snippet for each ad call */ google_adnum = google_adnum + google_ads.length; } document."",""word_count"":""1265""},{""item_id"":""732322311"",""favorite"":""0"",""status"":""1"",""time_added"":""1412613639"",""time_updated"":""1413454315"",""time_read"":""1413454313"",""time_favorited"":""0"",""sort_id"":268,""resolved_title"":""UK faces 'nuclear option' if it scraps European rights charter"",""resolved_url"":""http://euobserver.com/justice/125910"",""excerpt"":""BRUSSELS - The European Commission may seek to suspend the UK's voting rights at the EU level should it withdraw from the European convention of human rights."",""word_count"":""660""},{""item_id"":""732331662"",""favorite"":""0"",""status"":""1"",""time_added"":""1412614495"",""time_updated"":""1413194429"",""time_read"":""1413194426"",""time_favorited"":""0"",""sort_id"":252,""resolved_title"":""Twin Peaks to return with new series"",""resolved_url"":""http://www.bbc.co.uk/news/entertainment-arts-29503952#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa"",""excerpt"":""Cult 1990s TV series Twin Peaks is to return with a new series after 25 years, creator David Lynch has said.  Lynch tweeted a link to a teaser video along with the message: \""Dear Twitter Friends... it is happening again.\"""",""word_count"":""206""},{""item_id"":""732336831"",""favorite"":""0"",""status"":""1"",""time_added"":""1413241229"",""time_updated"":""1413364930"",""time_read"":""1413364927"",""time_favorited"":""0"",""sort_id"":214,""resolved_title"":""How John Oliver won the Internet"",""resolved_url"":""http://www.dailydot.com/opinion/john-oliver-last-week-tonight-won-internet/"",""excerpt"":""The Hollywood Reporter recently announced that John Oliver’s smash hit Last Week Tonight has already marginally surpassed the long-running Real Time with Bill Maher in ratings."",""word_count"":""1053""},{""item_id"":""732420015"",""favorite"":""0"",""status"":""1"",""time_added"":""1412754054"",""time_updated"":""1412981148"",""time_read"":""1412981140"",""time_favorited"":""0"",""sort_id"":234,""resolved_title"":""What 50 Years of Bullet Trains Have Done for Japan"",""resolved_url"":""http://www.theatlantic.com/business/archive/2014/10/what-50-years-of-bullet-trains-have-done-for-japan/381143/"",""excerpt"":""Fifty years ago this month, Japan’s bullet trains completed their first trips and were welcomed by hundreds of people who had waited overnight in the terminals."",""word_count"":""606""},{""item_id"":""732487163"",""favorite"":""0"",""status"":""1"",""time_added"":""1412635515"",""time_updated"":""1414861663"",""time_read"":""1414861659"",""time_favorited"":""0"",""sort_id"":241,""resolved_title"":""How the Hong Kong Protesters Can Win"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/10/06/how_the_hong_kong_protesters_can_win"",""excerpt"":""Over a century's worth of\r data shows that the Umbrella Revolution needs business, satire, and a whole lot\r of patience.   \""Don't think that this will be over soon."",""word_count"":""1448""},{""item_id"":""732516549"",""favorite"":""0"",""status"":""1"",""time_added"":""1412635512"",""time_updated"":""1413140338"",""time_read"":""1413140335"",""time_favorited"":""0"",""sort_id"":242,""resolved_title"":""Read the Anti-Hong Kong Rant That's Going Viral in China"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/10/06/read_the_anti_hong_kong_rant_that_s_going_viral_in_china"",""excerpt"":""It's the article that many in the Chinese mainland are reading to help them understand -- or, depending on one's viewpoint, misunderstand -- what Hong Kong is all about."",""word_count"":""1131""},{""item_id"":""732538864"",""favorite"":""0"",""status"":""1"",""time_added"":""1412635511"",""time_updated"":""1413146261"",""time_read"":""1413146248"",""time_favorited"":""0"",""sort_id"":243,""resolved_title"":""Where Does the Islamic State Get Its Weapons?"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/10/06/the_source_of_the_islamic_state_s_weapons_united_states_russia_syria_iraq"",""excerpt"":""Many\r of the weapons the militant group fights with in Iraq and Syria came from the\r United States."",""word_count"":""2203""},{""item_id"":""732882162"",""favorite"":""0"",""status"":""1"",""time_added"":""1412674574"",""time_updated"":""1413487349"",""time_read"":""1413487341"",""time_favorited"":""0"",""sort_id"":237,""resolved_title"":""Pen & Ink: An Illustrated Collection of Unusual, Deeply Human Stories Behind People’s Tattoos"",""resolved_url"":""http://www.brainpickings.org/2014/10/07/pen-and-ink-tattoos-wendy-macnaughton/"",""excerpt"":""We wear the stories of our lives — sometimes through our clothes, sometimes even more deeply, through the innermost physical membrane that separates self from world."",""word_count"":""1826""},{""item_id"":""732895576"",""favorite"":""0"",""status"":""1"",""time_added"":""1412674573"",""time_updated"":""1414861355"",""time_read"":""1414861352"",""time_favorited"":""0"",""sort_id"":238,""resolved_title"":""The Mystery of Personal Identity: What Makes You and Your Childhood Self the Same Person Despite a Lifetime of Change"",""resolved_url"":""http://www.brainpickings.org/2014/10/07/rebecca-goldstein-personal-identity/"",""excerpt"":""Dissecting the philosophical conundrum of our “integrity of identity that persists over time, undergoing changes and yet still continuing to be."",""word_count"":""850""},{""item_id"":""733052823"",""favorite"":""0"",""status"":""1"",""time_added"":""1413669105"",""time_updated"":""1417338189"",""time_read"":""1417338186"",""time_favorited"":""0"",""sort_id"":203,""resolved_title"":""An Introduction To Unit Testing In AngularJS Applications"",""resolved_url"":""http://www.smashingmagazine.com/2014/10/07/introduction-to-unit-testing-in-angularjs/"",""excerpt"":""AngularJS1 has grown to become one of the most popular single-page application frameworks. Developed by a dedicated team at Google, the outcome is substantial and widely used in both community and industry projects."",""word_count"":""3969""},{""item_id"":""733163452"",""favorite"":""0"",""status"":""1"",""time_added"":""1412754054"",""time_updated"":""1412855399"",""time_read"":""1412855394"",""time_favorited"":""0"",""sort_id"":235,""resolved_title"":""Critics be damned – here's why The Big Bang Theory is an unstoppable force with fans"",""resolved_url"":""http://www.theguardian.com/tv-and-radio/tvandradioblog/2014/oct/07/the-big-bang-theory-critics-fans"",""excerpt"":""To some, the success of the show is a mystery, but to others it’s obvious. TV experts and fans explain what makes it great  To call The Big Bang Theory popular is an understatement."",""word_count"":""1171""},{""item_id"":""733453910"",""favorite"":""0"",""status"":""1"",""time_added"":""1412765469"",""time_updated"":""1412814848"",""time_read"":""1412814842"",""time_favorited"":""0"",""sort_id"":230,""resolved_title"":""How To Stay Warm When It's Cold Outside"",""resolved_url"":""http://indefinitelywild.gizmodo.com/how-to-stay-warm-when-its-cold-outside-1643473572/+whitsongordon"",""excerpt"":""'; if (google_ads[0].bidtype == 'CPC') { /* insert this snippet for each ad call */ google_adnum = google_adnum + google_ads.length; } document."",""word_count"":""2132""},{""item_id"":""733459898"",""favorite"":""0"",""status"":""1"",""time_added"":""1412808754"",""time_updated"":""1413302172"",""time_read"":""1413036960"",""time_favorited"":""0"",""sort_id"":228,""resolved_title"":""Adobe Spyware Reveals (Again) the Price of DRM: Your Privacy and Security"",""resolved_url"":""https://www.eff.org/deeplinks/2014/10/adobe-spyware-reveals-again-price-drm-your-privacy-and-security"",""excerpt"":""The publishing world may finally be facing its “rootkit scandal."",""word_count"":""594""},{""item_id"":""733713532"",""favorite"":""0"",""status"":""1"",""time_added"":""1412764547"",""time_updated"":""1412848166"",""time_read"":""1412848157"",""time_favorited"":""0"",""sort_id"":232,""resolved_title"":""EU launches probe into Amazon's Luxembourg tax deal"",""resolved_url"":""http://euobserver.com/news/125948"",""excerpt"":""BRUSSELS - The European Commission will launch a probe into Amazon's tax arrangements in Luxembourg, the EU's competition chief has confirmed."",""word_count"":""431""},{""item_id"":""734860873"",""favorite"":""0"",""status"":""1"",""time_added"":""1413065148"",""time_updated"":""1413140047"",""time_read"":""1413140046"",""time_favorited"":""0"",""sort_id"":223,""resolved_title"":""South Stream could stop Serbia joining EU, energy chief says"",""resolved_url"":""http://euobserver.com/foreign/125968"",""excerpt"":""BRUSSELS - Serbia has defied EU calls to change the terms of its gas pipeline deal with Russia, but the European Energy Community (EEC) says it “cannot” join the EU unless it does so."",""word_count"":""664""},{""item_id"":""736058961"",""favorite"":""0"",""status"":""1"",""time_added"":""1413052484"",""time_updated"":""1413366359"",""time_read"":""1413366356"",""time_favorited"":""0"",""sort_id"":225,""resolved_title"":""How does a fighter jet lock onto and keep track of an enemy aircraft?"",""resolved_url"":""http://www.quora.com/How-does-a-fighter-jet-lock-onto-and-keep-track-of-an-enemy-aircraft?share=1"",""excerpt"":""There are updates to this page that haven't been applied because you've entered text. Refresh this page to see updates."",""word_count"":""2681""},{""item_id"":""736123230"",""favorite"":""0"",""status"":""1"",""time_added"":""1413066197"",""time_updated"":""1413139694"",""time_read"":""1413139694"",""time_favorited"":""0"",""sort_id"":220,""resolved_title"":""Security services monitoring 'thousands' of terrorism suspects in London, says Boris Johnson"",""resolved_url"":""http://www.telegraph.co.uk/news/uknews/terrorism-in-the-uk/11154733/Security-services-monitoring-thousands-of-terrorism-suspects-in-London-says-Boris-Johnson.html"",""excerpt"":""The security services are monitoring “thousands” of terrorist suspects in    London, Boris Johnson has disclosed, suggesting the threat from Islamist    extremists may be far greater than has previously been admitted."",""word_count"":""453""},{""item_id"":""737085333"",""favorite"":""0"",""status"":""1"",""time_added"":""1413104631"",""time_updated"":""1413139875"",""time_read"":""1413139875"",""time_favorited"":""0"",""sort_id"":219,""resolved_title"":""British opposition party calls for language tests for EU migrants"",""resolved_url"":""http://euobserver.com/tickers/126020"",""excerpt"":""Ed Miliband, the leader of UK opposition party Labour, has said in an op-ed for The Observer Britain should impose language tests on EU migrants who want to claim benefits. He added \""we understand many of the people turning to Ukip\"", the British eurosceptic party, which is making electoral gains."",""word_count"":""50""},{""item_id"":""738679259"",""favorite"":""0"",""status"":""1"",""time_added"":""1413756262"",""time_updated"":""1414452858"",""time_read"":""1414452857"",""time_favorited"":""0"",""sort_id"":185,""resolved_title"":""The Best Infographics of the Year: Nate Silver on the 3 Keys to Great Information Design and the Line Between Editing and Censorship"",""resolved_url"":""http://www.brainpickings.org/2014/10/14/best-american-infographics-2014-nate-silver/"",""excerpt"":""“More isn’t always better: no more in information design than in poetry…” Once again this year, I was delighted to serve on the “Brain Trust” for an annual project by Pulitzer-Prize-winning journalist, New Yorker writer, and Scientific American neuroscience blog editor Gareth Cook,"",""word_count"":""1322""},{""item_id"":""738712876"",""favorite"":""0"",""status"":""1"",""time_added"":""1413756262"",""time_updated"":""1414579714"",""time_read"":""1414579708"",""time_favorited"":""0"",""sort_id"":184,""resolved_title"":""Hannah Arendt on Memory, the Elasticity of Time, and What Free Will Really Means"",""resolved_url"":""http://www.brainpickings.org/2014/10/14/hannah-arendt-life-of-the-mind-free-will/"",""excerpt"":""“Before we raise such questions as What is happiness, what is justice, what is knowledge, and so on, we must have seen happy and unhappy people, witnessed just and unjust deeds, experienced the desire to know and its fulfillment or frustration.”"",""word_count"":""1728""},{""item_id"":""738803288"",""favorite"":""0"",""status"":""1"",""time_added"":""1414399999"",""time_updated"":""1414539922"",""time_read"":""1414539918"",""time_favorited"":""0"",""sort_id"":162,""resolved_title"":""Fxos on RaspberryPi"",""resolved_url"":""https://wiki.mozilla.org/Fxos_on_RaspberryPi"",""excerpt"":""We are looking to demonstrate that Firefox OS can be a viable and valuable operating system for Raspberry Pi boards, and for the wide variety of use cases that are being imagined today by the Webmakers of tomorrow."",""word_count"":""593""},{""item_id"":""738965047"",""favorite"":""0"",""status"":""1"",""time_added"":""1413755310"",""time_updated"":""1413985766"",""time_read"":""1413985763"",""time_favorited"":""0"",""sort_id"":186,""resolved_title"":""Ireland to Phase Out ‘Double Irish’ Tax Break Used by Tech Giants"",""resolved_url"":""http://www.nytimes.com/2014/10/15/business/international/ireland-to-phase-out-tax-advantage-used-by-technology-firms.html"",""excerpt"":""LONDON —  Ireland’s government on Tuesday responded to the clamorous criticism of its business-friendly tax arrangements by closing a loophole used by multinational giants like Google."",""word_count"":""1092""},{""item_id"":""739704054"",""favorite"":""0"",""status"":""1"",""time_added"":""1413374394"",""time_updated"":""1413422019"",""time_read"":""1413422018"",""time_favorited"":""0"",""sort_id"":211,""resolved_title"":""POODLE SSL 3.0 Attack Exploits Widely-used Web Encryption Standard"",""resolved_url"":""http://thehackernews.com/2014/10/poodle-ssl-30-attack-exploits-widely_14.html"",""excerpt"":""Another Heartbleed-like vulnerability has been discovered in the decade old but still widely used Secure Sockets Layer (SSL) 3.0 cryptographic protocol that could allow an attacker to decrypt contents of encrypted connections to websites."",""word_count"":""562""},{""item_id"":""739704149"",""favorite"":""0"",""status"":""1"",""time_added"":""1413409106"",""time_updated"":""1413558154"",""time_read"":""1413468412"",""time_favorited"":""0"",""sort_id"":207,""resolved_title"":""How Bitcoin's Block Chain Could Stop History Being Rewritten"",""resolved_url"":""http://www.coindesk.com/block-chain-aid-fight-free-speech/"",""excerpt"":""Despite the recent drop in bitcoin's price, cryptocurrency startups are now attracting more investment than ever and stories about major developments in the bitcoin ecosystem are being picked up by mainstream media on a regular basis."",""word_count"":""1160""},{""item_id"":""739823070"",""favorite"":""0"",""status"":""1"",""time_added"":""1413755307"",""time_updated"":""1413878890"",""time_read"":""1413878884"",""time_favorited"":""0"",""sort_id"":189,""resolved_title"":""Lockheed Claims Breakthrough on Fusion Energy"",""resolved_url"":""http://www.scientificamerican.com/article/lockheed-claims-breakthrough-on-fusion-energy/"",""excerpt"":""WASHINGTON (Reuters) - Lockheed Martin Corp said on Wednesday it had made a technological breakthrough in developing a power source based on nuclear fusion, and the first reactors, small enough to fit on the back of a truck, could be ready in a decade."",""word_count"":""455""},{""item_id"":""739880251"",""favorite"":""0"",""status"":""1"",""time_added"":""1413755309"",""time_updated"":""1413878805"",""time_read"":""1413878798"",""time_favorited"":""0"",""sort_id"":188,""resolved_title"":""Dublin to scrap 'double Irish' tax loophole"",""resolved_url"":""http://euobserver.com/news/126070"",""excerpt"":""BRUSSELS - Ireland will scrap a controversial tax instrument which allows companies to legally shift huge profits from Ireland to countries with low taxes, the country's budget minister has announced."",""word_count"":""448""},{""item_id"":""740054144"",""favorite"":""0"",""status"":""1"",""time_added"":""1413558151"",""time_updated"":""1414631856"",""time_read"":""1414631853"",""time_favorited"":""0"",""sort_id"":206,""resolved_title"":""Laura Poitras on the Crypto Tools That Made Her Snowden Film Possible"",""resolved_url"":""http://www.wired.com/2014/10/laura-poitras-crypto-tools-made-snowden-film-possible/"",""excerpt"":""As a journalist, Laura Poitras was the quiet mastermind behind the publication of Edward Snowden’s unprecedented NSA leak. As a filmmaker, her new movie Citizenfour makes clear she’s one of the most important directors working in documentary today."",""word_count"":""1254""},{""item_id"":""741009295"",""favorite"":""0"",""status"":""1"",""time_added"":""1413665681"",""time_updated"":""1413710135"",""time_read"":""1413710130"",""time_favorited"":""0"",""sort_id"":204,""resolved_title"":""Dutch Motorcycle Gang Members Fight the Islamic State in Iraq"",""resolved_url"":""https://news.vice.com/article/dutch-motorcycle-gang-members-fight-the-islamic-state-in-iraq"",""excerpt"":""Three Dutch bikers from the No Surrender gang have traveled to northern Iraq to join the fight against the Islamic State."",""word_count"":""410""},{""item_id"":""741046287"",""favorite"":""0"",""status"":""1"",""time_added"":""1413630456"",""time_updated"":""1414667239"",""time_read"":""1414667235"",""time_favorited"":""0"",""sort_id"":205,""resolved_title"":""Why Germany Is So Much Better at Training Its Workers"",""resolved_url"":""http://www.theatlantic.com/business/archive/2014/10/why-germany-is-so-much-better-at-training-its-workers/381550/?single_page=true"",""excerpt"":""America rarely uses an apprenticeship model to teach young people a trade. Could such a system help the unemployed? At last, unemployment is easing."",""word_count"":""1495""},{""item_id"":""741063677"",""favorite"":""0"",""status"":""1"",""time_added"":""1413757217"",""time_updated"":""1413974006"",""time_read"":""1413974003"",""time_favorited"":""0"",""sort_id"":181,""resolved_title"":""How to Buy Banned Chinese Books on Alibaba"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/10/16/how_i_buy_banned_chinese_books_on_alibaba"",""excerpt"":""Customers and vendors use an elaborate system of code words and end runs on Taobao, Alibaba's massive digital marketplace. On Oct."",""word_count"":""739""},{""item_id"":""741562767"",""favorite"":""0"",""status"":""1"",""time_added"":""1413671031"",""time_updated"":""1414077988"",""time_read"":""1414077984"",""time_favorited"":""0"",""sort_id"":199,""resolved_title"":""Sex and drugs drive EU growth surge"",""resolved_url"":""http://euobserver.com/news/126110"",""excerpt"":""BRUSSELS - Ask a politician in any EU country what they would give for an extra 2 percent on their nation's economic output without any policy changes, and you are likely to be offered a couple of limbs and a body part."",""word_count"":""472""},{""item_id"":""741716043"",""favorite"":""0"",""status"":""1"",""time_added"":""1413738260"",""time_updated"":""1413986249"",""time_read"":""1413986247"",""time_favorited"":""0"",""sort_id"":194,""resolved_title"":""SimCity That I Used to Know"",""resolved_url"":""https://medium.com/re-form/simcity-that-i-used-to-know-d5d8c49e3e1d"",""excerpt"":""Regardless of its precise birthday, SimCity was a hugely influential game."",""word_count"":""1478""},{""item_id"":""741859473"",""favorite"":""1"",""status"":""1"",""time_added"":""1413753499"",""time_updated"":""1413921961"",""time_read"":""1413921959"",""time_favorited"":""1413921958"",""sort_id"":192,""resolved_title"":""How marijuana legalization in Colorado and Washington is making the world a better place"",""resolved_url"":""http://www.washingtonpost.com/blogs/wonkblog/wp/2014/10/17/how-marijuana-legalization-in-colorado-and-washington-is-making-the-world-a-better-place/"",""excerpt"":""No pressure, Colorado and Washington, but the world is scrutinizing your every move.  That was the take-home message of an event today at the Brookings Institution, discussing the international impact of the move toward marijuana legalization at the state-level in the U.S."",""word_count"":""863""},{""item_id"":""742584514"",""favorite"":""0"",""status"":""1"",""time_added"":""1413671030"",""time_updated"":""1417337692"",""time_read"":""1417337689"",""time_favorited"":""0"",""sort_id"":200,""resolved_title"":""Data Visualization with JavaScript"",""resolved_url"":""http://jsdatav.is/intro.html"",""excerpt"":""It’s getting hard to ignore the importance of data in our lives. Data is critical to the largest social organizations in human history. It can affect even the least consequential of our everyday decisions. And its collection has widespread geopolitical implications."",""word_count"":""1107""},{""item_id"":""744012637"",""favorite"":""0"",""status"":""1"",""time_added"":""1414061240"",""time_updated"":""1414452135"",""time_read"":""1414452134"",""time_favorited"":""0"",""sort_id"":173,""resolved_title"":""Published for the First Time : a 1959 Essay by Isaac Asimov on Creativity"",""resolved_url"":""http://www.technologyreview.com/view/531911/isaac-asimov-mulls-how-do-people-get-new-ideas/"",""excerpt"":""In 1959, I worked as a scientist at Allied Research Associates in Boston. The company was an MIT spinoff that originally focused on the effects of nuclear weapons on aircraft structures."",""word_count"":""1890""},{""item_id"":""744148530"",""favorite"":""0"",""status"":""1"",""time_added"":""1413976801"",""time_updated"":""1413985870"",""time_read"":""1413985868"",""time_favorited"":""0"",""sort_id"":177,""resolved_title"":""Cuba’s Impressive Role on Ebola"",""resolved_url"":""http://www.nytimes.com/2014/10/20/opinion/cubas-impressive-role-on-ebola.html"",""excerpt"":""Cuba is an impoverished island that remains largely cut off from the world and lies about 4,500 miles from the West African nations where Ebola is spreading at an alarming rate."",""word_count"":""740""},{""item_id"":""744770147"",""favorite"":""0"",""status"":""1"",""time_added"":""1414399998"",""time_updated"":""1414540040"",""time_read"":""1414540036"",""time_favorited"":""0"",""sort_id"":163,""resolved_title"":""The Banksy of Donetsk Documents His Torture"",""resolved_url"":""http://blog.foreignpolicy.com/posts/2014/10/21/the_banksy_of_donetsk_documents_his_torture"",""excerpt"":""He also provided a set of drawings depicting his experience in the custody of eastern Ukraine’s rebels. They show the artist being apprehended and beaten and confined to miserable quarters."",""word_count"":""833""},{""item_id"":""745752258"",""favorite"":""0"",""status"":""1"",""time_added"":""1413985205"",""time_updated"":""1414965282"",""time_read"":""1414438836"",""time_favorited"":""0"",""sort_id"":175,""resolved_title"":""3 Content Management Systems for Node.js"",""resolved_url"":""http://codecondo.com/cms-built-with-node-js/"",""excerpt"":""You can rest assured that there are at least over a thousand different content management systems available, and 90% of them are probably written in PHP! You wouldn’t think that many people are focusing on Node."",""word_count"":""708""},{""item_id"":""746013994"",""favorite"":""0"",""status"":""1"",""time_added"":""1414399997"",""time_updated"":""1414572214"",""time_read"":""1414572209"",""time_favorited"":""0"",""sort_id"":164,""resolved_title"":""Does Laura Poitras's New Film Solve the Snowden Riddle?"",""resolved_url"":""http://blog.foreignpolicy.com/posts/2014/10/22/does_laura_poitras_new_film_solve_the_snowden_riddle"",""excerpt"":""The filmmaker Laura Poitras is concerned with the human effects of surveillance. She wants to understand what pervasive and sometimes aggressive American intelligence gathering does to people."",""word_count"":""1457""},{""item_id"":""746609023"",""favorite"":""1"",""status"":""1"",""time_added"":""1414403852"",""time_updated"":""1414442616"",""time_read"":""1414442606"",""time_favorited"":""1414442572"",""sort_id"":156,""resolved_title"":""Poll shows UK support for EU at 20-year high"",""resolved_url"":""http://euobserver.com/news/126208"",""excerpt"":""BRUSSELS - The rise of the UK Independence party has coincided with increased support for Britain remaining part of the EU, according to a survey published on Wednesday (22 October)."",""word_count"":""424""},{""item_id"":""747465809"",""favorite"":""0"",""status"":""1"",""time_added"":""1414401915"",""time_updated"":""1414539828"",""time_read"":""1414539824"",""time_favorited"":""0"",""sort_id"":161,""resolved_title"":""Nginx has big plans for JavaScript"",""resolved_url"":""http://www.infoworld.com/article/2838008/javascript/nginx-has-big-plans-for-javascript.html"",""excerpt"":""Nginx (pronounced \""engine x\"") has become so popular as a Web server, with an estimated installed base of 140 million websites, that it now runs 38.8 percent of the top 1,000 websites as ranked by Alexa this spring, surpassing Microsoft and Apache servers."",""word_count"":""701""},{""item_id"":""747783437"",""favorite"":""0"",""status"":""1"",""time_added"":""1414401917"",""time_updated"":""1414539746"",""time_read"":""1414539742"",""time_favorited"":""0"",""sort_id"":160,""resolved_title"":""Hungary's Orban stonewalls US corruption allegations"",""resolved_url"":""http://euobserver.com/justice/126244"",""excerpt"":""BRUSSELS - Hungary is demanding the US hand over evidence after the Americans placed an entry ban on six officials close to Viktor Orban’s government last week."",""word_count"":""602""},{""item_id"":""748607006"",""favorite"":""0"",""status"":""1"",""time_added"":""1414497589"",""time_updated"":""1414626093"",""time_read"":""1414521373"",""time_favorited"":""0"",""sort_id"":153,""resolved_title"":""Harvey Weinstein on Netflix, ‘Snowpiercer’ Editing"",""resolved_url"":""http://variety.com/2014/film/news/harvey-weinstein-netflix-is-winning-because-it-has-vision-1201339276/"",""excerpt"":""Harvey Weinstein came out swinging in defense of Netflix at the Produced By: New York conference on Saturday.  The company’s recent forays into the film business cast a shadow over the gathering of producers, but Weinstein welcomed the company’s encroachment."",""word_count"":""497""},{""item_id"":""749921277"",""favorite"":""0"",""status"":""1"",""time_added"":""1414424821"",""time_updated"":""1414439285"",""time_read"":""1414439276"",""time_favorited"":""0"",""sort_id"":155,""resolved_title"":""Review: Christopher Nolan's 'Interstellar' is Smart Sentimentalism as We've Never Seen It Before"",""resolved_url"":""http://www.indiewire.com/article/review-christopher-nolans-interstellar-is-smart-sentimentalism-as-weve-never-seen-it-before-20141027"",""excerpt"":""Matthew McConaughey stars in this tale of journeying the cosmos, and the science adds up -- but that's not the only virtue of Nolan's impressive big scale accomplishment."",""word_count"":""1633""},{""item_id"":""751632011"",""favorite"":""0"",""status"":""1"",""time_added"":""1415016331"",""time_updated"":""1415017379"",""time_read"":""1415017375"",""time_favorited"":""0"",""sort_id"":147,""resolved_title"":""W3C declares HTML5 standard final"",""resolved_url"":""http://buytaert.net/w3c-declares-html5-standard-final"",""excerpt"":""After 10 years of development, the W3C has promoted HTML5 to \""Recommendation\"" yesterday: http://www.w3.org/blog/news/archives/4167. W3C's \""Recommendation\"" status is the highest level of maturation, effectively making the markup language a formal standard."",""word_count"":""190""},{""item_id"":""751698691"",""favorite"":""0"",""status"":""0"",""time_added"":""1415014420"",""time_updated"":""1415794610"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":149,""resolved_title"":""Whose side is Turkey on?"",""resolved_url"":""http://www.lrb.co.uk/v36/n21/patrick-cockburn/whose-side-is-turkey-on"",""excerpt"":""Over the summer Isis – the Islamic State of Iraq and Syria – defeated the Iraqi army, the Syrian army, the Syrian rebels and the Iraqi Kurdish peshmerga; it established a state stretching from Baghdad to Aleppo and from Syria’s northern border to the deserts of Iraq in the south."",""word_count"":""3208""},{""item_id"":""751711461"",""favorite"":""0"",""status"":""1"",""time_added"":""1416663881"",""time_updated"":""1417169219"",""time_read"":""1417169211"",""time_favorited"":""0"",""sort_id"":61,""resolved_title"":""Joker is Cool But Not the New Popcorn Time"",""resolved_url"":""http://torrentfreak.com/joker-is-cool-but-not-the-new-popcorn-time-141029/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""753178490"",""favorite"":""0"",""status"":""1"",""time_added"":""1415014653"",""time_updated"":""1415017334"",""time_read"":""1415017329"",""time_favorited"":""0"",""sort_id"":148,""resolved_title"":""Russia's 'Yandex Browser' Launches First Linux Beta, Is No Chrome Clone"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/10/russian-yandex-web-browser-linux-beta-release"",""excerpt"":""You don’t need to be Russian to have heard of Yandex, the country’s leading internet company, but you will need to speak the language to use its branded web browser, which has just launched in beta on Linux."",""word_count"":""418""},{""item_id"":""754451942"",""favorite"":""0"",""status"":""0"",""time_added"":""1416662937"",""time_updated"":""1417776586"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":65,""resolved_title"":""Utilities for Everyday Node.js Development"",""resolved_url"":""https://www.airpair.com/node.js/posts/utilities-for-everyday-node-development"",""excerpt"":""One of the things which makes working with Node fundamentally different from other server-side scripting languages is the functional paradigm provided by JavaScript, which structurally allows for asynchronous, non-blocking transactions through the use of callbacks."",""word_count"":""3038""},{""item_id"":""754948630"",""favorite"":""0"",""status"":""1"",""time_added"":""1415031783"",""time_updated"":""1415192569"",""time_read"":""1415188278"",""time_favorited"":""0"",""sort_id"":146,""resolved_title"":""Citizenfour"",""resolved_url"":""http://lessig.tumblr.com/post/101577251732/citizenfour"",""excerpt"":""Yesterday, my wife and I squeezed into a sold-out matinee of Citizenfour, the film by Laura Poitras telling the story of Edward Snowden’s NSA leak."",""word_count"":""909""},{""item_id"":""755073728"",""favorite"":""0"",""status"":""0"",""time_added"":""1415280831"",""time_updated"":""1415282963"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":133,""resolved_title"":""The Expected Specifications of HTML6"",""resolved_url"":""http://www.realcombiz.com/2014/10/the-expected-specifications-of-html6.html"",""excerpt"":""HTML5 has most definitely proven to be a transformational platform, giving abundant room to web developers to spread their wings (it rather has given them some blockbuster wings)."",""word_count"":""1153""},{""item_id"":""755580711"",""favorite"":""0"",""status"":""1"",""time_added"":""1416786980"",""time_updated"":""1417119169"",""time_read"":""1417119165"",""time_favorited"":""0"",""sort_id"":49,""resolved_title"":""Merkel: UK exit better than restricting free movement"",""resolved_url"":""http://euobserver.com/justice/126351"",""excerpt"":""BRUSSELS - German chancellor Angela Merkel would reportedly prefer the UK to leave the EU than have Downing Street limit the free movement of people."",""word_count"":""469""},{""item_id"":""755736523"",""favorite"":""0"",""status"":""1"",""time_added"":""1415318736"",""time_updated"":""1417337058"",""time_read"":""1417337055"",""time_favorited"":""0"",""sort_id"":127,""resolved_title"":""Mozilla to Launch Brand New Browser Solely for Developers"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/11/mozilla-launch-brand-new-developer-focused-web-browser"",""excerpt"":""When you woke up this morning you probably didn’t expect to come online and see the words ‘Mozilla’, ‘New’, and ‘Web Browser’ writ large across the web.  But that my bed-headed compadre is precisely what you’re looking at."",""word_count"":""276""},{""item_id"":""755760841"",""favorite"":""0"",""status"":""0"",""time_added"":""1415320028"",""time_updated"":""1415320028"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":121,""resolved_title"":""Article: The Internet Archive, Trying to Encompass All Creation"",""resolved_url"":""http://hurstassociates.blogspot.com/2014/11/article-internet-archive-trying-to.html"",""excerpt"":""In a New York Times article, Brewster Kahle talks about expanding what the Internet Archive can do, if anyone (and everyone) can become a curator."",""word_count"":""120""},{""item_id"":""756709563"",""favorite"":""0"",""status"":""1"",""time_added"":""1415318733"",""time_updated"":""1415574397"",""time_read"":""1415574379"",""time_favorited"":""0"",""sort_id"":130,""resolved_title"":""FSF-Endorsed Linux Distro 'Trisquel 7.0' Released"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/11/download-trisquel-7-0-kernel-3-13"",""excerpt"":""Like your Ubuntu-based Linux distributions a little more free?  There’s a brand new LTS release of Trisquel ready for download."",""word_count"":""206""},{""item_id"":""756717944"",""favorite"":""0"",""status"":""1"",""time_added"":""1415197936"",""time_updated"":""1417337619"",""time_read"":""1417337616"",""time_favorited"":""0"",""sort_id"":143,""resolved_title"":""The Pirate Bay's 3rd and the Last Founder Arrested After 4 Years On The Run"",""resolved_url"":""http://thehackernews.com/2014/11/pirate-bay-Fredrik-Neij-arrested.html"",""excerpt"":""The 36-year-old fugitive Fredrik Neij was convicted by a Swedish court in 2009 of aiding copyright infringement and now he has been arrested under an Interpol warrant after four years on the run."",""word_count"":""253""},{""item_id"":""756783032"",""favorite"":""0"",""status"":""1"",""time_added"":""1415522951"",""time_updated"":""1416320962"",""time_read"":""1416320959"",""time_favorited"":""0"",""sort_id"":113,""resolved_title"":""The Best Hidden Features of VLC"",""resolved_url"":""http://lifehacker.com/the-best-hidden-features-of-vlc-1654434241"",""excerpt"":""'; if (google_ads[0].bidtype == 'CPC') { /* insert this snippet for each ad call */ google_adnum = google_adnum + google_ads.length; } document."",""word_count"":""1071""},{""item_id"":""757406328"",""favorite"":""0"",""status"":""1"",""time_added"":""1415192556"",""time_updated"":""1415734947"",""time_read"":""1415734943"",""time_favorited"":""0"",""sort_id"":145,""resolved_title"":""Hackers Can Steal $999,999.99 from Visa Contactless Payment Cards"",""resolved_url"":""http://thehackernews.com/2014/11/hackers-can-steal-99999999-from-visa.html"",""excerpt"":""Security researchers from Newcastle University in the UK have found a way to steal larger amounts of money from people's pockets using just a mobile phone, due to a security glitch Visa’s contactless payment cards."",""word_count"":""398""},{""item_id"":""757507476"",""favorite"":""0"",""status"":""1"",""time_added"":""1416786979"",""time_updated"":""1417166344"",""time_read"":""1417166337"",""time_favorited"":""0"",""sort_id"":50,""resolved_title"":""EUobserver / The state of Europe’s democracy 25 years after the Wall"",""resolved_url"":""http://euobserver.com/opinion/126383"",""excerpt"":""BRUSSELS - The fall of the Berlin Wall 25 years ago this week swept away the most glaring gaps in political and economic opportunity between Western and East Central Europe."",""word_count"":""749""},{""item_id"":""757750578"",""favorite"":""0"",""status"":""1"",""time_added"":""1416786977"",""time_updated"":""1417119663"",""time_read"":""1417119658"",""time_favorited"":""0"",""sort_id"":51,""resolved_title"":""EUobserver / UK makes €25 billion profit from EU migrants"",""resolved_url"":""http://euobserver.com/news/126389"",""excerpt"":""BRUSSELS - EU migrants paid €25 billion more in tax to the UK treasury than they received in welfare benefits, according to new research.  The €25 billion was accumulated between 2001 and 2011 the paper, published in the Economic Journal on Wednesday (5 November), said."",""word_count"":""407""},{""item_id"":""757789645"",""favorite"":""0"",""status"":""0"",""time_added"":""1415209261"",""time_updated"":""1415209298"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":140,""resolved_title"":""Hungary’s Internet tax postponed but not yet abolished"",""resolved_url"":""https://edri.org/hungarys-internet-tax-postponed-but-not-yet-abolished/"",""excerpt"":""On 28 October about 100,000 Hungarians gathered to protest a planned introduction of a tax on Internet data transfers. The new tax would have required Internet Service Providers (ISPs) to pay 150 forints (0,48 euro) per gigabyte of data traffic."",""word_count"":""752""},{""item_id"":""757790097"",""favorite"":""0"",""status"":""1"",""time_added"":""1415209294"",""time_updated"":""1417337394"",""time_read"":""1417337391"",""time_favorited"":""0"",""sort_id"":139,""resolved_title"":""Finland: Web service to request verifying of secret registry data"",""resolved_url"":""https://edri.org/finland-web-service-to-request-verifying-of-secret-registry-data/"",""excerpt"":""EDRi-member Effi ry has launched a web service for citizens to request the data protection authorities to verify that any records in various law enforcement and secret services registries are filed according to the relevant regulations."",""word_count"":""636""},{""item_id"":""757790098"",""favorite"":""0"",""status"":""0"",""time_added"":""1415209296"",""time_updated"":""1415209332"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":138,""resolved_title"":""The “Google tax” that is not a Google tax"",""resolved_url"":""https://edri.org/google-tax-that-is-not-google-tax/"",""excerpt"":""The new European Commissioner with responsibility for “digital agenda” issues, Guenther Oettinger caused a stir in the media recently when he raised the possibility of introducing “ancillary copyright” payments, requiring search engine providers to pay for displaying copyrighted materials"",""word_count"":""420""},{""item_id"":""757790588"",""favorite"":""0"",""status"":""0"",""time_added"":""1415209329"",""time_updated"":""1415209354"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":137,""resolved_title"":""FTDI: Is the law criminal?"",""resolved_url"":""https://edri.org/ftdi-law-criminal/"",""excerpt"":""The EDRi-gram has previously reported on the general silliness, if not active harmfulness to an open society, of certain copying controls that are generically referred to as Digital Rights Management (DRM)."",""word_count"":""491""},{""item_id"":""757941001"",""favorite"":""0"",""status"":""0"",""time_added"":""1415282960"",""time_updated"":""1417335639"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":132,""resolved_title"":""Luxembourg tax files: how tiny state rubber-stamped tax avoidance on an industrial scale"",""resolved_url"":""http://www.theguardian.com/business/2014/nov/05/-sp-luxembourg-tax-files-tax-avoidance-industrial-scale"",""excerpt"":""An unprecedented international investigation into tax deals struck with Luxembourg has uncovered the multi-billion dollar tax secrets of some of the world’s largest multinational corporations."",""word_count"":""5509""},{""item_id"":""758397193"",""favorite"":""0"",""status"":""1"",""time_added"":""1415318731"",""time_updated"":""1415734788"",""time_read"":""1415734776"",""time_favorited"":""0"",""sort_id"":131,""resolved_title"":""Popcorn Time Now \""Impossible\"" to Shut Down"",""resolved_url"":""http://torrentfreak.com/popcorn-time-now-impossible-shut-141106/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""758499424"",""favorite"":""0"",""status"":""0"",""time_added"":""1415318733"",""time_updated"":""1415318733"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":129,""resolved_title"":""EUobserver / Juncker in spotlight after Luxembourg tax revelations"",""resolved_url"":""http://euobserver.com/news/126404"",""excerpt"":""Brussels - Governments in Europe and all over the world have missed out on billions of euros of potential tax income because companies channeled their profits through Luxembourg, an investigation by the International Consortium of Investigative Journalists and media across 32 countries has found."",""word_count"":""526""},{""item_id"":""758560841"",""favorite"":""0"",""status"":""1"",""time_added"":""1415320027"",""time_updated"":""1417427622"",""time_read"":""1417427622"",""time_favorited"":""0"",""sort_id"":122,""resolved_title"":""Neil Gaiman: How I learned to stop worrying and love the duplicator machines"",""resolved_url"":""http://boingboing.net/2014/11/06/neil-gaiman-how-i-learned-to.html"",""excerpt"":""George shook his head slowly. \""You're wrong, John. Not back to where we were. This morning, we had an economy of scarcity. Tonight, we have an economy of abundance. This morning, we had a money economy—it was a money economy, even if credit was important."",""word_count"":""1177""},{""item_id"":""758675265"",""favorite"":""0"",""status"":""1"",""time_added"":""1415321519"",""time_updated"":""1415459810"",""time_read"":""1415428479"",""time_favorited"":""0"",""sort_id"":118,""resolved_title"":""Oliver Stone Has Met With Edward Snowden About Biopic, Wants To Make Vladimir Putin Doc"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/oliver-stone-has-met-with-edward-snowden-about-biopic-wants-to-make-vladmir-putin-doc-20141106"",""excerpt"":""It would be an off day for Oliver Stone if he didn't do something to court controversy. So, it's just another Thursday for the director."",""word_count"":""319""},{""item_id"":""758724556"",""favorite"":""0"",""status"":""1"",""time_added"":""1415318736"",""time_updated"":""1417382914"",""time_read"":""1417382911"",""time_favorited"":""0"",""sort_id"":128,""resolved_title"":""'Star Wars: Episode 7' Title Officially Revealed"",""resolved_url"":""http://blogs.indiewire.com/theplaylist/star-wars-episode-7-title-officially-revealed-20141106"",""excerpt"":""We are 406 days from \""Star Wars: Episode 7\"" landing in theaters, and fans are already salivating. Some, in fact, have been complaining that, even this far out, there have been few official morsels from the production, which has officially wrapped."",""word_count"":""285""},{""item_id"":""758729730"",""favorite"":""0"",""status"":""1"",""time_added"":""1415321520"",""time_updated"":""1415459810"",""time_read"":""1415414468"",""time_favorited"":""0"",""sort_id"":117,""resolved_title"":""Fing Shows You All the Devices Connected to Your Network"",""resolved_url"":""http://lifehacker.com/fing-shows-you-all-the-devices-connected-to-your-networ-1655438240"",""excerpt"":""Android/iOS: Fing shows you all of the devices on your network, down to the device type and manufacturer for each. Best of all, it puts all of that data in the palm of your hand."",""word_count"":""206""},{""item_id"":""758733122"",""favorite"":""0"",""status"":""1"",""time_added"":""1415321525"",""time_updated"":""1415459810"",""time_read"":""1415414428"",""time_favorited"":""0"",""sort_id"":115,""resolved_title"":""Bono defends Spotify and calls for more transparency from record labels"",""resolved_url"":""http://www.theguardian.com/technology/2014/nov/06/bono-spotify-transparency-record-labels"",""excerpt"":""U2 frontman Bono has praised streaming music services as a way for musicians to get their music heard, and defended Spotify from criticism of the amount it pays out to artists and songwriters."",""word_count"":""913""},{""item_id"":""759424470"",""favorite"":""0"",""status"":""1"",""time_added"":""1415534203"",""time_updated"":""1416390795"",""time_read"":""1416390790"",""time_favorited"":""0"",""sort_id"":109,""resolved_title"":""Press Reaction to Ubuntu 14.10 'Utopic Unicorn'"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/11/press-reaction-ubuntu-14-10-utopic-unicorn"",""excerpt"":""Ubuntu 14.10 ‘Utopic Unicorn’ went public two weeks ago, giving the mainstream tech press ample time to cast  a critical once over.  As one might expect for this release, the coverage receiving it has been overwhelmingly ambivalent."",""word_count"":""528""},{""item_id"":""759492692"",""favorite"":""0"",""status"":""1"",""time_added"":""1415522958"",""time_updated"":""1416483375"",""time_read"":""1416483176"",""time_favorited"":""0"",""sort_id"":112,""resolved_title"":""How Prezi Helped Turn Budapest Into Europe's Newest Startup Hub"",""resolved_url"":""http://www.forbes.com/sites/alisoncoleman/2014/11/07/how-prezi-hungarys-vc-trojan-horse-helped-turn-budapest-into-europes-newest-start-up-hub/"",""excerpt"":""Talk of the hottest startup scenes invariably revolves around cities like Berlin, Stockholm, or London. Rarely does it touch on Central Europe, yet it is from here that a new generation of entrepreneurs has been emerging and creating some extraordinary startup success stories like Prezi."",""word_count"":""405""},{""item_id"":""759718625"",""favorite"":""0"",""status"":""0"",""time_added"":""1415522966"",""time_updated"":""1415523100"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":111,""resolved_title"":""From Focal Elements to Fibonacci: A 30-Minute In-Depth Study of Composition"",""resolved_url"":""http://nofilmschool.com/2014/11/focal-elements-fibonacci-30-minute-depth-study-composition"",""excerpt"":""And Fibonacci's not an opera singer. (You're thinking of Pavaratti -- or of Bocelli -- or of no opera singers because why would you be?) The composition is the frame and the arrangement of the elements in that frame."",""word_count"":""256""},{""item_id"":""760369489"",""favorite"":""0"",""status"":""1"",""time_added"":""1415534204"",""time_updated"":""1416321059"",""time_read"":""1416321054"",""time_favorited"":""0"",""sort_id"":107,""resolved_title"":""Night Time Eiffel Tower Photos Are a Copyright Violation"",""resolved_url"":""https://torrentfreak.com/night-time-eiffel-tower-photos-are-a-copyright-violation-141108/"",""excerpt"":"""",""word_count"":""0""},{""item_id"":""760799089"",""favorite"":""1"",""status"":""1"",""time_added"":""1415578379"",""time_updated"":""1416320683"",""time_read"":""1416320677"",""time_favorited"":""1416320676"",""sort_id"":106,""resolved_title"":""Berlin’s digital exiles: where tech activists go to escape the NSA"",""resolved_url"":""http://www.theguardian.com/world/2014/nov/09/berlins-digital-exiles-tech-activists-escape-nsa"",""excerpt"":""It’s the not knowing that’s the hardest thing, Laura Poitras tells me. “Not knowing whether I’m in a private place or not.” Not knowing if someone’s watching or not. Though she’s under surveillance, she knows that. It makes working as a journalist “hard but not impossible”."",""word_count"":""4668""},{""item_id"":""761312595"",""favorite"":""0"",""status"":""0"",""time_added"":""1415706250"",""time_updated"":""1415710338"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":104,""resolved_title"":""Happy 100th birthday Hedy Lamarr, the inventor who made the wireless internet possible"",""resolved_url"":""http://www.adafruit.com/blog/2014/11/09/happy-100th-birthday-hedy-lamarr-the-inventor-who-made-the-wireless-internet-possible/"",""excerpt"":""Happy 100th birthday Hedy Lamarr, the inventor who made the wireless internet possible.  Hedy Lamarr, whose acting career spanned Hollywood’s golden age of the forties and fifties, was widely regarded as one of the most beautiful women to grace the silver screen."",""word_count"":""176""},{""item_id"":""762584763"",""favorite"":""0"",""status"":""1"",""time_added"":""1415706056"",""time_updated"":""1417336197"",""time_read"":""1417336194"",""time_favorited"":""0"",""sort_id"":105,""resolved_title"":""Darkhotel APT Malware Targets Global CEOs Using Hotel Internet"",""resolved_url"":""http://thehackernews.com/2014/11/darkhotel-apt-malware-targets-global.html"",""excerpt"":""The researchers at Moscow-based security firm Kaspersky Lab dubbed the threat as \""DarkHotel APT,\"" appear to have the ability to know in advance when a targeted executive checks in and checks out of a hotel."",""word_count"":""509""},{""item_id"":""762603377"",""favorite"":""0"",""status"":""1"",""time_added"":""1416786983"",""time_updated"":""1416996102"",""time_read"":""1416996098"",""time_favorited"":""0"",""sort_id"":47,""resolved_title"":""Open-Source Vs Groupon: GNOME Battle To Protect Their Trademark"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/11/gnome-groupon-trademark-battle"",""excerpt"":""GNOME is a name synonymous with open-source software, but if the billion-dollar company Groupon has its way it could soon mean something different."",""word_count"":""356""},{""item_id"":""762819898"",""favorite"":""0"",""status"":""1"",""time_added"":""1416789224"",""time_updated"":""1416995991"",""time_read"":""1416995987"",""time_favorited"":""0"",""sort_id"":46,""resolved_title"":""Migrating to the Ghost Blogging Platform"",""resolved_url"":""http://blog.cloudflare.com/migrating-to-ghost-blogging-platform/"",""excerpt"":""For those of you that follow the CloudFlare blog, you’ll know that we try to be prolific. We have industry leaders like Matthew Prince, John Graham-Cumming, Nick Sullivan, and others publishing pieces weekly from the front lines of internet performance and security."",""word_count"":""242""},{""item_id"":""763581195"",""favorite"":""0"",""status"":""1"",""time_added"":""1416662938"",""time_updated"":""1417334856"",""time_read"":""1417334853"",""time_favorited"":""0"",""sort_id"":64,""resolved_title"":""Underscore vs Lo-Dash"",""resolved_url"":""http://benmccormick.org/2014/11/12/underscore-vs-lodash/"",""excerpt"":""Last week was the time for my team's quarterly \""dependency update\"" where we go through all the third party libraries we're using and keep up on any updates or maintenance that need to happen."",""word_count"":""1880""},{""item_id"":""764254713"",""favorite"":""0"",""status"":""1"",""time_added"":""1416543131"",""time_updated"":""1417335135"",""time_read"":""1417335133"",""time_favorited"":""0"",""sort_id"":75,""resolved_title"":""It’s ok to use JavaScript generated GUID in a browser? — Este.js Framework — Medium"",""resolved_url"":""https://medium.com/este-js-framework/its-ok-to-use-javascript-generated-guid-in-a-browser-373ca6431cf7"",""excerpt"":""No. But we live in distributed and disconnected world. And we also like optimistic UI’s. Why should I wait for “foo created” server response anytime internet isn’t available or is terribly slow? Therefore every sane web apps must maintain client side model."",""word_count"":""220""},{""item_id"":""764418282"",""favorite"":""0"",""status"":""0"",""time_added"":""1417388548"",""time_updated"":""1417388548"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":30,""resolved_title"":""Wireless networks translated to sound"",""resolved_url"":""http://flowingdata.com/2014/11/13/wireless-networks-translated-to-sound/"",""excerpt"":""Wi-fi is embedded in our everyday lives so much that we don't pay much attention unless it's not around. We've seen it translated visually a couple of times. But this time, Phantom Terrains, by Frank Swain and Daniel Jones and visualization by Stefanie Posavec, translates networks into sound."",""word_count"":""136""},{""item_id"":""765090626"",""favorite"":""0"",""status"":""1"",""time_added"":""1416101279"",""time_updated"":""1416329684"",""time_read"":""1416320827"",""time_favorited"":""0"",""sort_id"":100,""resolved_title"":""Managed VPS, now all SSD and more awesome"",""resolved_url"":""https://www.dreamhost.com/dreamscape/2014/11/13/managed-vps-now-all-ssd-and-more-awesome/"",""excerpt"":""We first launched our unique take on Virtual Private Servers (VPS) in mid-2007 as “DreamHost P.S.” and we’ve always offered something a bit different from the other guys."",""word_count"":""577""},{""item_id"":""765687330"",""favorite"":""0"",""status"":""0"",""time_added"":""1416101277"",""time_updated"":""1417104443"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":101,""resolved_title"":""Why Whole Foods is moving into one of the poorest neighborhoods in Chicago"",""resolved_url"":""http://www.washingtonpost.com/blogs/wonkblog/wp/2014/11/14/why-whole-foods-is-moving-into-one-of-the-poorest-neighborhoods-in-chicago/"",""excerpt"":""CHICAGO—The center of Englewood has been vacant for so long that many people in the neighborhood can’t quite recall when it became that way."",""word_count"":""3055""},{""item_id"":""767230161"",""favorite"":""0"",""status"":""1"",""time_added"":""1416544071"",""time_updated"":""1417334430"",""time_read"":""1417334427"",""time_favorited"":""0"",""sort_id"":74,""resolved_title"":""Can FIFA’s Corruption Be Stopped?"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/11/16/fifa_corruption_scandal_be_stopped_russia_qatar_bribes_investigation"",""excerpt"":""Fans of American football have weathered a season of scandal, with claims of willfully disregarding knowledge of concussion damage and a culture of domestic abuse battering the National Football League’s top officials."",""word_count"":""1507""},{""item_id"":""767650448"",""favorite"":""0"",""status"":""0"",""time_added"":""1416543128"",""time_updated"":""1416543129"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":78,""resolved_title"":""Casual visualization books for the coffee table"",""resolved_url"":""http://flowingdata.com/2014/11/17/casual-visualization-books-for-the-coffee-table/"",""excerpt"":""Since my son was born, it's been a challenge to focus on a single book for any prolonged amount of time. He's in perpetual motion, as my mom often likes to say. Data Fluency is the only book I've read cover-to-cover in the past year (and you should too)."",""word_count"":""631""},{""item_id"":""768478862"",""favorite"":""0"",""status"":""1"",""time_added"":""1416702091"",""time_updated"":""1417430380"",""time_read"":""1417430379"",""time_favorited"":""0"",""sort_id"":59,""resolved_title"":""The Best Children’s Books of 2014"",""resolved_url"":""http://www.brainpickings.org/2014/11/18/best-childrens-books-2014/"",""excerpt"":""Intelligent and imaginative tales of love, loneliness, loyalty, loss, friendship, and everything in between.   wrote J.R.R."",""word_count"":""8236""},{""item_id"":""768739601"",""favorite"":""0"",""status"":""1"",""time_added"":""1416329686"",""time_updated"":""1417335885"",""time_read"":""1417335883"",""time_favorited"":""0"",""sort_id"":96,""resolved_title"":""Launching in 2015: A Certificate Authority to Encrypt the Entire Web"",""resolved_url"":""https://www.eff.org/deeplinks/2014/11/certificate-authority-encrypt-entire-web"",""excerpt"":""Today EFF is pleased to announce Let’s Encrypt, a new certificate authority (CA) initiative that we have put together with Mozilla, Cisco, Akamai, IdenTrust, and researchers at the University of Michigan that aims to clear the remaining roadblocks to transition the Web from HTTP to HTTPS."",""word_count"":""493""},{""item_id"":""769742696"",""favorite"":""0"",""status"":""1"",""time_added"":""1416468235"",""time_updated"":""1417335871"",""time_read"":""1417335869"",""time_favorited"":""0"",""sort_id"":92,""resolved_title"":""Node.js in Flames"",""resolved_url"":""http://techblog.netflix.com/2014/11/nodejs-in-flames.html"",""excerpt"":""We’ve been busy building our next-generation Netflix.com web application using Node.js. You can learn more about our approach from the presentation we delivered at NodeConf.eu a few months ago. Today, I want to share some recent learnings from performance tuning this new application stack."",""word_count"":""1589""},{""item_id"":""769939094"",""favorite"":""0"",""status"":""1"",""time_added"":""1416543128"",""time_updated"":""1417335039"",""time_read"":""1417335037"",""time_favorited"":""0"",""sort_id"":79,""resolved_title"":""The Orchard Acquires Comic Documentary 'The Yes Men Are Revolting'"",""resolved_url"":""http://www.indiewire.com/article/the-orchard-acquires-comic-documentary-the-yes-men-are-revolting-20141119"",""excerpt"":""The third entry in the \""Yes Men\"" documentary series premiered earlier this year at the Toronto International Film Festival."",""word_count"":""228""},{""item_id"":""770026467"",""favorite"":""0"",""status"":""1"",""time_added"":""1416496013"",""time_updated"":""1417165449"",""time_read"":""1417165443"",""time_favorited"":""0"",""sort_id"":89,""resolved_title"":""Mozilla ends Google relationship, Firefox will now default to Yahoo in the US"",""resolved_url"":""http://arstechnica.com/information-technology/2014/11/mozilla-ends-google-relationship-firefox-will-now-default-to-yahoo/"",""excerpt"":""Since 2004, Google has been paying Mozilla a ton of money each year—estimated at around $100 million—for the privilege of being the default search engine used in the Firefox browser. This contribution represented the lion's share of Mozilla's income, something in the ballpark of 85 percent."",""word_count"":""181""},{""item_id"":""770185431"",""favorite"":""0"",""status"":""0"",""time_added"":""1416496139"",""time_updated"":""1416754765"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":88,""resolved_title"":""All of Last Year's Oscar-Nominated Documentaries are Streaming on Netflix"",""resolved_url"":""http://www.indiewire.com/article/all-of-last-years-oscar-nominated-documentaries-are-streaming-on-netflix-20141119?utm_campaign=all-of-last-years-oscar-nominated-documentaries-are-streaming-on-netflix-20141119&utm_medium=social&utm_source=Facebook&utm_content=all-of-last-years-oscar-nominated-documentaries-are-streaming-on-netflix-20141119"",""excerpt"":""Good news for fans of documentaries. All of last year's Academy Award-nominated documentaries are now available to stream. The 87th Academy Award nominations won't be announced until January 15th, 2015."",""word_count"":""398""},{""item_id"":""770196215"",""favorite"":""0"",""status"":""0"",""time_added"":""1417175247"",""time_updated"":""1417374625"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":39,""resolved_title"":""The Secret Life of Passwords"",""resolved_url"":""http://www.nytimes.com/2014/11/19/magazine/the-secret-life-of-passwords.html"",""excerpt"":""Howard Lutnick, the chief executive of Cantor Fitzgerald, one of the world’s largest financial-services firms, still cries when he talks about it."",""word_count"":""4980""},{""item_id"":""770363388"",""favorite"":""0"",""status"":""0"",""time_added"":""1416526948"",""time_updated"":""1416526948"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":87,""resolved_title"":""EU-US Free Trade Agreement: The silent revolution of the TTIP"",""resolved_url"":""http://www.voxeurop.eu/en/content/news-brief/4853915-silent-revolution-ttip?xtor=RSS-9"",""excerpt"":""VoxEurop is currently produced by a team of volunteer journalists and translators, but it has certain operating costs which are unavoidable. Help us to keep the site on line and to guarantee its future by making a donation to the project. Thank you!"",""word_count"":""43""},{""item_id"":""770692461"",""favorite"":""0"",""status"":""1"",""time_added"":""1416543130"",""time_updated"":""1417334917"",""time_read"":""1417334914"",""time_favorited"":""0"",""sort_id"":76,""resolved_title"":""Detekt: A New Malware Detection Tool That Can Expose Illegitimate State Surveillance"",""resolved_url"":""https://www.eff.org/deeplinks/2014/11/detekt-new-malware-detection-tool-can-expose-illegitimate-state-surveillance"",""excerpt"":""Recent years have seen a boom in the adoption of surveillance technology by governments around the world, including spyware that provides its purchasers the unchecked ability to target remote Internet users' computers, to read their personal emails, listen in on private audio calls, record keystrok"",""word_count"":""327""},{""item_id"":""770727257"",""favorite"":""0"",""status"":""1"",""time_added"":""1416526952"",""time_updated"":""1417335646"",""time_read"":""1417335643"",""time_favorited"":""0"",""sort_id"":84,""resolved_title"":""Weather.com using Drupal"",""resolved_url"":""http://buytaert.net/weather-com-using-drupal"",""excerpt"":""One of the world's most trafficked websites, with more than 100 million unique visitors every month and more than 20 million different pages of content, is now using Drupal. Weather.com is a top 20 U.S. site according to comScore."",""word_count"":""227""},{""item_id"":""770979272"",""favorite"":""0"",""status"":""1"",""time_added"":""1416526953"",""time_updated"":""1417335558"",""time_read"":""1417335555"",""time_favorited"":""0"",""sort_id"":83,""resolved_title"":""Lady Gaga’s Lead Keyboardist Develops Circular 294-Key Keyboard For Exceptional Performances"",""resolved_url"":""http://www.demilked.com/piano-arc-circular-keyboard-brockettship-brockett-parsons/"",""excerpt"":""This is not a scene from a sci-fi movie about futuristic musicians, this is happening now."",""word_count"":""138""},{""item_id"":""771080732"",""favorite"":""0"",""status"":""1"",""time_added"":""1416543129"",""time_updated"":""1417334926"",""time_read"":""1417334924"",""time_favorited"":""0"",""sort_id"":77,""resolved_title"":""Why Ghost Put Wordpress in My Rear-view Mirror"",""resolved_url"":""http://innoarchitech.com/why-ghost-put-wordpress-in-my-rearview-mirror/"",""excerpt"":""Introduction I recently migrated my blog, InnoArchiTech, from Worpress to Ghost and will not be looking back. I wrote this article to highlight the reasons for the switch, some differences between Wordpress and Ghost, and why I love Ghost as a blogging platform."",""word_count"":""1227""},{""item_id"":""771331432"",""favorite"":""0"",""status"":""1"",""time_added"":""1416768759"",""time_updated"":""1417121603"",""time_read"":""1417121598"",""time_favorited"":""0"",""sort_id"":53,""resolved_title"":""Liberate your online identity from Google with Indie Hosters"",""resolved_url"":""http://www.wired.co.uk/news/archive/2014-11/21/new-service-wrest-online-identity-from-google"",""excerpt"":""Google and Facebook don't just run your email and your social network. So often, they're a core part of your online identity. They help you log in to countless other services across the net.  This is a handy thing. You don't have to remember as many usernames and passwords, but it's also dangerous."",""word_count"":""923""},{""item_id"":""771410180"",""favorite"":""0"",""status"":""1"",""time_added"":""1416644399"",""time_updated"":""1417165578"",""time_read"":""1417165572"",""time_favorited"":""0"",""sort_id"":71,""resolved_title"":""Build Mental Toughness In Under Two Minutes with this Mental Workout"",""resolved_url"":""http://lifehacker.com/build-mental-toughness-in-under-two-minutes-with-this-m-1661399954"",""excerpt"":""In order to strengthen your mind and build mental toughness, you need to work it the same way you would work your muscles in the gym.  This mental workout helps you refocus and visualize success in tough times, and only takes 100 seconds of your day to complete."",""word_count"":""405""},{""item_id"":""771692551"",""favorite"":""0"",""status"":""1"",""time_added"":""1416661009"",""time_updated"":""1417185352"",""time_read"":""1417185344"",""time_favorited"":""0"",""sort_id"":68,""resolved_title"":""Why Ghost Put Wordpress in My Rearview Mirror"",""resolved_url"":""https://medium.com/@innoarchitech/why-ghost-put-wordpress-in-my-rearview-mirror-f3529782968f"",""excerpt"":""This article was originally published on the InnoArchiTech blog here.  Note that this is my personal opinion as to why Ghost works better for my needs, but is not meant to indicate that Wordpress is inadequate in any way."",""word_count"":""1275""},{""item_id"":""772200136"",""favorite"":""0"",""status"":""1"",""time_added"":""1416660110"",""time_updated"":""1417185455"",""time_read"":""1417185451"",""time_favorited"":""0"",""sort_id"":69,""resolved_title"":""Jowell plans to run for London mayor"",""resolved_url"":""http://www.bbc.co.uk/news/uk-england-london-30159049#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa"",""excerpt"":""Labour's former culture secretary Tessa Jowell is planning to run for mayor of London in 2016.  She told the BBC she is \""certainly planning to run\"" to become Labour's candidate to replace the conservative incumbent Boris Johnson, but said now \""isn't time for a formal declaration\""."",""word_count"":""45""},{""item_id"":""775799378"",""favorite"":""0"",""status"":""1"",""time_added"":""1417342857"",""time_updated"":""1417382589"",""time_read"":""1417382581"",""time_favorited"":""0"",""sort_id"":36,""resolved_title"":""11 Useful Utilities To Supercharge Your Ubuntu Experience"",""resolved_url"":""http://www.omgubuntu.co.uk/2014/11/useful-tools-for-ubuntu-do-you-use-them"",""excerpt"":""Whether you’re a relative novice or a seasoned pro, we all want to get the most from our operating system. Ubuntu, like most modern OSes, has more to offer than what is presented at first blush."",""word_count"":""1228""},{""item_id"":""776991270"",""favorite"":""1"",""status"":""1"",""time_added"":""1417431150"",""time_updated"":""1417469440"",""time_read"":""1417469431"",""time_favorited"":""1417469431"",""sort_id"":23,""resolved_title"":""Why I don’t like hackathons, by Alex Bayley aged 39 1/2"",""resolved_url"":""http://infotrope.net/2014/11/28/why-i-dont-like-hackathons-by-alex-bayley-aged-39-12/"",""excerpt"":""I seem to have had this discussion a few times lately, so I’m going to save myself the trouble of repeating it and just write down all the problems I have with hackathons."",""word_count"":""1541""},{""item_id"":""777662024"",""favorite"":""0"",""status"":""0"",""time_added"":""1417534360"",""time_updated"":""1418485948"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":17,""resolved_title"":""The Cretan Method"",""resolved_url"":""http://hintjens.com/blog:81"",""excerpt"":""The search for truth is an ancient, and difficult pursuit. Modern society still swims in a sea of lies, in politics, business, and especially the software industry, where grand lies breed like cults. My work is to cut through the lies to develop better theories of the truth."",""word_count"":""7489""},{""item_id"":""777966452"",""favorite"":""0"",""status"":""0"",""time_added"":""1417342856"",""time_updated"":""1417342856"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":37,""resolved_title"":""How to Fight Corruption With Game Theory"",""resolved_url"":""http://www.thedailybeast.com/articles/2014/11/29/how-to-fight-corruption-with-game-theory.html"",""excerpt"":""Asking Congress to reform money in politics is like asking professional athletes to reform the use of performance enhancing drugs and painkillers."",""word_count"":""1049""},{""item_id"":""778087213"",""favorite"":""0"",""status"":""1"",""time_added"":""1417388246"",""time_updated"":""1417514477"",""time_read"":""1417514467"",""time_favorited"":""0"",""sort_id"":31,""resolved_title"":""UN criticises Sweden's 'prison' children"",""resolved_url"":""http://www.thelocal.se/20141128/un-criticises-swedens-prison-children"",""excerpt"":""The UN report called on Sweden to abolish the policy of keeping some child suspects and young offenders in isolation in police cells and juvenile detention centres."",""word_count"":""307""},{""item_id"":""778532339"",""favorite"":""0"",""status"":""1"",""time_added"":""1417384121"",""time_updated"":""1417514769"",""time_read"":""1417514763"",""time_favorited"":""0"",""sort_id"":32,""resolved_title"":""Athens 1944: Britain’s dirty secret"",""resolved_url"":""http://www.theguardian.com/world/2014/nov/30/athens-1944-britains-dirty-secret"",""excerpt"":""“I can still see it very clearly, I have not forgotten,” says Títos Patríkios. “The Athens police firing on the crowd from the roof of the parliament in Syntagma Square. The young men and women lying in pools of blood, everyone rushing down the stairs in total shock, total panic."",""word_count"":""6243""},{""item_id"":""778876007"",""favorite"":""0"",""status"":""1"",""time_added"":""1417445732"",""time_updated"":""1417908571"",""time_read"":""1417908566"",""time_favorited"":""0"",""sort_id"":22,""resolved_title"":""How the EU VAT rules make EU startups and digital businesses uncompetitive in a global market."",""resolved_url"":""http://rachelandrew.co.uk/archives/2014/11/30/how-the-eu-vat-rules-make-eu-startups-and-digital-businesses-uncompetitive-in-a-global-market/"",""excerpt"":""Unless you have been residing under a rock for the last month (and I’m starting to wish I had been) you’ll be aware of the impending EU VAT Place of Supply change. Much of the noise has been made by those businesses who will be forced into VAT Registration because of it, and rightly so."",""word_count"":""1675""},{""item_id"":""778883403"",""favorite"":""0"",""status"":""1"",""time_added"":""1417374616"",""time_updated"":""1418052977"",""time_read"":""1418052930"",""time_favorited"":""0"",""sort_id"":33,""resolved_title"":""DIGITAL REVOLUTION: How far we’ve come"",""resolved_url"":""http://www.cybersalon.org/digital-revolution-how-far-weve-come/"",""excerpt"":""I was lucky enough to be involved with Digital Revolution this summer, an exhibition at the Barbican that celebrated the transformation of the arts through digital technology."",""word_count"":""600""},{""item_id"":""779753551"",""favorite"":""0"",""status"":""1"",""time_added"":""1417522476"",""time_updated"":""1418292427"",""time_read"":""1418292423"",""time_favorited"":""0"",""sort_id"":20,""resolved_title"":""The Firestarter of Berlin"",""resolved_url"":""http://www.foreignpolicy.com/articles/2014/12/01/the_firestarter_of_berlin_imam_kamouss_islam_germany"",""excerpt"":""Meet Imam\r Kamouss, the handsome, popular, self-proclaimed moderate Muslim preacher who has\r become the face of intolerance and terror across Germany."",""word_count"":""1828""},{""item_id"":""780377137"",""favorite"":""0"",""status"":""1"",""time_added"":""1417616370"",""time_updated"":""1417738659"",""time_read"":""1417738657"",""time_favorited"":""0"",""sort_id"":13,""resolved_title"":""Stephen Hawking's new speech system is free and open-source"",""resolved_url"":""http://www.wired.co.uk/news/archive/2014-12/02/stephen-hawking-intel-communication-system"",""excerpt"":""Intel has today unveiled a new open-source communication system created especially for Professor Stephen Hawking, which can be adapted for the three million people worldwide who suffer from quadriplegia and motor neurone disease."",""word_count"":""359""},{""item_id"":""782373085"",""favorite"":""0"",""status"":""1"",""time_added"":""1418122936"",""time_updated"":""1418291669"",""time_read"":""1418291666"",""time_favorited"":""0"",""sort_id"":5,""resolved_title"":""William Gibson Interview—The Arcade"",""resolved_url"":""http://www.creativeapplications.net/news/william-gibson-interview-the-arcade/"",""excerpt"":""With the release of his much-anticipated novel The Peripheral about a month ago, William Gibson has  been making the rounds to promote the work—but not all media appearances are equal."",""word_count"":""313""},{""item_id"":""782735296"",""favorite"":""0"",""status"":""1"",""time_added"":""1417737758"",""time_updated"":""1418121907"",""time_read"":""1417738564"",""time_favorited"":""0"",""sort_id"":9,""resolved_title"":""Drupal 8 in a Changing CMS Landscape"",""resolved_url"":""http://www.phase2technology.com/blog/drupal-in-a-changing-cms-landscape/"",""excerpt"":""Recently, I’ve noticed certain trends in our industry which I believe will greatly impact the evolution of Drupal. It’s undeniable: the CMS landscape is changing as the future of the web gears toward content APIs and other ways of interacting with a content storage system."",""word_count"":""693""},{""item_id"":""785871092"",""favorite"":""0"",""status"":""1"",""time_added"":""1418122935"",""time_updated"":""1418291517"",""time_read"":""1418291512"",""time_favorited"":""0"",""sort_id"":6,""resolved_title"":""The Fascination of Coworking - New Study Released"",""resolved_url"":""http://www.deskmag.com/en/the-fascination-of-coworking-new-study-released-fraunhofer-912"",""excerpt"":""This is a guest article by the authors of the book \""The Fascination Of Coworking\"".  Coworking has arisen as a result of outsourcing trends found over the past 15 to 20 years."",""word_count"":""2120""},{""item_id"":""789323032"",""favorite"":""0"",""status"":""0"",""time_added"":""1418499643"",""time_updated"":""1418499647"",""time_read"":""0"",""time_favorited"":""0"",""sort_id"":0,""resolved_title"":""Project Goliath: Inside Hollywood's secret war against Google"",""resolved_url"":""http://www.theverge.com/2014/12/12/7382287/project-goliath"",""excerpt"":""What is \""Goliath\"" and why are Hollywood’s most powerful lawyers working to kill it?"",""word_count"":""235""}],""error"":null,""search_meta"":{""search_type"":""normal""},""since"":1418512271}"
60579c25f40da7c0622383d0116a8d865baea79e,7542476,// heavily influenced by http://stackoverflow.com/a/7542476/599068.
7fad57155fbc66b47e567da753ea37cb08efe29e,11742812,        //see http://stackoverflow.com/questions/11742812/cannot-select-svg-foreignobject-element-in-d3
397929f0db61f0583ba4d23d0b669b473f33827f,2450976,	// http://stackoverflow.com/a/2450976
e614cab6abf19a28ad32cd14a240237dab5bc1a9,13461989,    /// See http://stackoverflow.com/questions/13461989/p-invoke-to-dynamically-loaded-library-on-mono.
ec9c48edd8eae2f17be7d0c4e28cdb0f93df2d73,50800696,"      ""url"":""https://stackoverflow.com/questions/50800696/getusermedia-in-pwa-with-manifest-on-ios-11"","
0515d4f5ce96e790ceaa941ecea01f0c784136ab,3684484,    # http://stackoverflow.com/questions/3684484/peak-detection-in-a-2d-array
c34fc0425517a6a147bcdf8ce7ade67452a41c17,472729," * http://stackoverflow.com/a/472729)  However, setting img[src] does normalize the URL."
9278ddb347ca6fc239c79de03ae85853e5ba85eb,920344,        <id>http://stackoverflow.com/q/920344</id>
2820c417ee3f9f173b55823fd09078c1de4e1e6e,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
bdf0ab1766ca9f65181860232e961b7957cfd52d,1700069,# http://stackoverflow.com/questions/304256/whats-the-best-way-to-find-the-inverse-of-datetime-isocalendar/1700069#1700069
e5da63ab576a2abe98442b92686bbe573c84cdf2,18600188,# https://stackoverflow.com/questions/18600188/home-end-keys-do-not-work-in-tmux
99c47049a8830fef5f44bbebb97c6f41ce7b7468,105034, * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
3411ffe6ff86f67cf43034968f979d352d161fbc,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
b8f1f43e48d78ff2d10d8c6ecd540f2d9926f45d,1910275,                # http://stackoverflow.com/questions/1910275/unicode-filenames-on-windows-with-python-subprocess-popen
95568441b1cbc0029940f599d2a6a14d14c3bbf0,13881860,// @see: http://stackoverflow.com/a/13881860
631305de877c6b8ec7ff22ff68d525156e8b770d,1633966,	// http://stackoverflow.com/questions/1633966/can-i-force-a-uitableview-to-hide-the-separator-between-empty-cells
e0918d4bd67efc1a86a37018550b766c52e90b72,274094, * After https://stackoverflow.com/questions/273789/is-there-a-version-of-javascripts-string-indexof-that-allows-for-regular-expr/274094#274094
a6517a840c017075ec84899fcd82036497126b15,1264737,    // see http://stackoverflow.com/a/1264737/1464957
d58d0a33e15ab506c59d46a21571433933c8d865,27986696,//http://stackoverflow.com/a/27986696/3825920
72b5929fb5f23e5d7171b1e41ffe985fc027df1d,1732454,"10338785,comment,10338094,10338656,0,0,Kristine1975,,,""I think this is a good example of a rant that doesn&#x27;t come across as hostile, a response to the question &quot;RegEx match open tags except XHTML self-contained tags&quot;: <a href=""""http://stackoverflow.com/a/1732454"""" rel=""""nofollow"""">http://stackoverflow.com/a/1732454</a>"",1444139017"
737588a465cd53362a69d19ed432319d71d16781,6553850,  [4]: http://stackoverflow.com/a/6553850/499768
e2199745e00ceb36482cd829423e5bd71b31c6f4,728360,     * @link http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object
ef6fda7eb7d1df5fb30dfd63670bc86a19fbaf36,357813 389642,"1773909,comment,1773761,1773761,0,0,adambyrtek,,,""He answered a question about his own quote, which led to the thread about inventions.<p><a href=""""http://stackoverflow.com/questions/357813/help-me-remember-a-quote-from-alan-kay#389642"""" rel=""""nofollow"""">http://stackoverflow.com/questions/357813/help-me-remember-a...</a>"",1286582290"
790a21534475c20821c9193d4758be519a976779,13751649,    # See: http://stackoverflow.com/a/13751649/163740
e87c1f73425eca7b6f59c1201bca0ad1ee592eb2,27271131,			// http://stackoverflow.com/a/27271131/539443
d534d981f77488da5548cc52fa3c1a193a8b5be8,16623897,# Based on code from: http://stackoverflow.com/a/16623897/483528
90fb134ac64cf8e88350a543e2c0343c4b54fb1a,2915672, * http://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010
cd3dc9cddb7ff7304538c0d20cb8215ff11e2d97,301287,* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287)
9765a228b37c782fabd2aee90e225239da693120,6117889, * Source: http://stackoverflow.com/a/6117889/113195
47a6b319cb9c80c28fc7761a0cb2304673998d9b,36644532, * https://stackoverflow.com/a/36644532/1331425
f23b669b0e8b009d3329b89d0383e74773149c99,3937321,// Source: http://stackoverflow.com/a/3937321
72e5a017139c8749169f2dfd063a7c62add3470e,3706219, * http://stackoverflow.com/questions/3706219/algorithm-for-iterating-over-an-outward-spiral-on-a-discrete-2d-grid-from-the-or
92408e9bd22d6c5abec0972997db6e383860ae8e,9715377,            # For explanation of backslash see http://stackoverflow.com/a/9715377
4d5659e26d966a704921b0ff1c9ad6afb749b8d3,13499860,<!-- http://stackoverflow.com/questions/13499860/jax-ws-error-on-wsdl-file-error-resolving-component-sschema -->
093971cfa776b0f34f1222a1e922e3477fd297d6,43216659,"{""version"":3,""file"":""infinitegrid.framelayout.min.js"",""sources"":[""../node_modules/@egjs/component/dist/component.esm.js"",""../src/browser.js"",""../src/consts.js"",""../src/utils.js"",""../src/ItemManager.js"",""../src/DOMRenderer.js"",""../src/Watcher.js"",""../src/Infinite.js"",""../src/AutoSizer.js"",""../src/ImageLoaded.js"",""../src/LayoutManager.js"",""../src/InfiniteGrid.js"",""../src/layouts/FrameLayout.js"",""../src/index.framelayout.js""],""sourcesContent"":[""/*\nCopyright (c) 2017 NAVER Corp.\n@egjs/component project is licensed under the MIT license\n\n@egjs/component JavaScript library\nhttps://naver.github.io/egjs-component\n\n@version 2.1.2\n*/\n/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nfunction isUndefined(value) {\n  return typeof value === \""undefined\"";\n}\n/**\n * A class used to manage events in a component\n * @ko 컴포넌트의 이벤트을 관리할 수 있게 하는 클래스\n * @alias eg.Component\n */\n\n\nvar Component =\n/*#__PURE__*/\nfunction () {\n  var Component =\n  /*#__PURE__*/\n  function () {\n    /**\n    * Version info string\n    * @ko 버전정보 문자열\n    * @name VERSION\n    * @static\n    * @type {String}\n    * @example\n    * eg.Component.VERSION;  // ex) 2.0.0\n    * @memberof eg.Component\n    */\n\n    /**\n     * @support {\""ie\"": \""7+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n     */\n    function Component() {\n      this._eventHandler = {};\n      this.options = {};\n    }\n    /**\n     * Triggers a custom event.\n     * @ko 커스텀 이벤트를 발생시킨다\n     * @param {String} eventName The name of the custom event to be triggered <ko>발생할 커스텀 이벤트의 이름</ko>\n     * @param {Object} customEvent Event data to be sent when triggering a custom event <ko>커스텀 이벤트가 발생할 때 전달할 데이터</ko>\n     * @return {Boolean} Indicates whether the event has occurred. If the stop() method is called by a custom event handler, it will return false and prevent the event from occurring. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">Ref</a> <ko>이벤트 발생 여부. 커스텀 이벤트 핸들러에서 stop() 메서드를 호출하면 'false'를 반환하고 이벤트 발생을 중단한다. <a href=\""https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\"">참고</a></ko>\n     * @example\n    class Some extends eg.Component {\n     some(){\n     \tif(this.trigger(\""beforeHi\"")){ // When event call to stop return false.\n    \tthis.trigger(\""hi\"");// fire hi event.\n     \t}\n     }\n    }\n    const some = new Some();\n    some.on(\""beforeHi\"", (e) => {\n    if(condition){\n    \te.stop(); // When event call to stop, `hi` event not call.\n    }\n    });\n    some.on(\""hi\"", (e) => {\n    // `currentTarget` is component instance.\n    console.log(some === e.currentTarget); // true\n    });\n    // If you want to more know event design. You can see article.\n    // https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\n     */\n\n\n    var _proto = Component.prototype;\n\n    _proto.trigger = function trigger(eventName, customEvent) {\n      if (customEvent === void 0) {\n        customEvent = {};\n      }\n\n      var handlerList = this._eventHandler[eventName] || [];\n      var hasHandlerList = handlerList.length > 0;\n\n      if (!hasHandlerList) {\n        return true;\n      } // If detach method call in handler in first time then handler list calls.\n\n\n      handlerList = handlerList.concat();\n      customEvent.eventType = eventName;\n      var isCanceled = false;\n      var arg = [customEvent];\n      var i = 0;\n\n      customEvent.stop = function () {\n        isCanceled = true;\n      };\n\n      customEvent.currentTarget = this;\n\n      for (var _len = arguments.length, restParam = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        restParam[_key - 2] = arguments[_key];\n      }\n\n      if (restParam.length >= 1) {\n        arg = arg.concat(restParam);\n      }\n\n      for (i = 0; handlerList[i]; i++) {\n        handlerList[i].apply(this, arg);\n      }\n\n      return !isCanceled;\n    };\n    /**\n     * Executed event just one time.\n     * @ko 이벤트가 한번만 실행된다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       alert(\""hi\"");\n     }\n     thing() {\n       this.once(\""hi\"", this.hi);\n     }\n    }\n    var some = new Some();\n    some.thing();\n    some.trigger(\""hi\"");\n    // fire alert(\""hi\"");\n    some.trigger(\""hi\"");\n    // Nothing happens\n     */\n\n\n    _proto.once = function once(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var i;\n\n        for (i in eventHash) {\n          this.once(i, eventHash[i]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var self = this;\n        this.on(eventName, function listener() {\n          for (var _len2 = arguments.length, arg = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            arg[_key2] = arguments[_key2];\n          }\n\n          handlerToAttach.apply(self, arg);\n          self.off(eventName, listener);\n        });\n      }\n\n      return this;\n    };\n    /**\n     * Checks whether an event has been attached to a component.\n     * @ko 컴포넌트에 이벤트가 등록됐는지 확인한다.\n     * @param {String} eventName The name of the event to be attached <ko>등록 여부를 확인할 이벤트의 이름</ko>\n     * @return {Boolean} Indicates whether the event is attached. <ko>이벤트 등록 여부</ko>\n     * @example\n    class Some extends eg.Component {\n     some() {\n       this.hasOn(\""hi\"");// check hi event.\n     }\n    }\n     */\n\n\n    _proto.hasOn = function hasOn(eventName) {\n      return !!this._eventHandler[eventName];\n    };\n    /**\n     * Attaches an event to a component.\n     * @ko 컴포넌트에 이벤트를 등록한다.\n     * @param {eventName} eventName The name of the event to be attached <ko>등록할 이벤트의 이름</ko>\n     * @param {Function} handlerToAttach The handler function of the event to be attached <ko>등록할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself<ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.on(\""hi\"",this.hi); //attach event\n     }\n    }\n    */\n\n\n    _proto.on = function on(eventName, handlerToAttach) {\n      if (typeof eventName === \""object\"" && isUndefined(handlerToAttach)) {\n        var eventHash = eventName;\n        var name;\n\n        for (name in eventHash) {\n          this.on(name, eventHash[name]);\n        }\n\n        return this;\n      } else if (typeof eventName === \""string\"" && typeof handlerToAttach === \""function\"") {\n        var handlerList = this._eventHandler[eventName];\n\n        if (isUndefined(handlerList)) {\n          this._eventHandler[eventName] = [];\n          handlerList = this._eventHandler[eventName];\n        }\n\n        handlerList.push(handlerToAttach);\n      }\n\n      return this;\n    };\n    /**\n     * Detaches an event from the component.\n     * @ko 컴포넌트에 등록된 이벤트를 해제한다\n     * @param {eventName} eventName The name of the event to be detached <ko>해제할 이벤트의 이름</ko>\n     * @param {Function} handlerToDetach The handler function of the event to be detached <ko>해제할 이벤트의 핸들러 함수</ko>\n     * @return {eg.Component} An instance of a component itself <ko>컴포넌트 자신의 인스턴스</ko>\n     * @example\n    class Some extends eg.Component {\n     hi() {\n       console.log(\""hi\"");\n     }\n     some() {\n       this.off(\""hi\"",this.hi); //detach event\n     }\n    }\n     */\n\n\n    _proto.off = function off(eventName, handlerToDetach) {\n      // All event detach.\n      if (isUndefined(eventName)) {\n        this._eventHandler = {};\n        return this;\n      } // All handler of specific event detach.\n\n\n      if (isUndefined(handlerToDetach)) {\n        if (typeof eventName === \""string\"") {\n          this._eventHandler[eventName] = undefined;\n          return this;\n        } else {\n          var eventHash = eventName;\n          var name;\n\n          for (name in eventHash) {\n            this.off(name, eventHash[name]);\n          }\n\n          return this;\n        }\n      } // The handler of specific event detach.\n\n\n      var handlerList = this._eventHandler[eventName];\n\n      if (handlerList) {\n        var k;\n        var handlerFunction;\n\n        for (k = 0; (handlerFunction = handlerList[k]) !== undefined; k++) {\n          if (handlerFunction === handlerToDetach) {\n            handlerList = handlerList.splice(k, 1);\n            break;\n          }\n        }\n      }\n\n      return this;\n    };\n\n    return Component;\n  }();\n\n  Component.VERSION = \""2.1.2\"";\n  return Component;\n}();\n\nexport default Component;\n//# sourceMappingURL=component.esm.js.map\n"",""/* eslint-disable no-new-func, no-nested-ternary */\n\nlet win;\n\nif (typeof window === \""undefined\"") {\n\t// window is undefined in node.js\n\twin = {\n\t\tdocument: {},\n\t\tnavigator: {\n\t\t\tuserAgent: \""\"",\n\t\t},\n\t};\n} else {\n\twin = window;\n}\n/* eslint-enable no-new-func, no-nested-ternary */\n\nexport {win as window};\nexport const document = win.document;\n"",""import {window, document} from \""./browser\"";\n\nconst ua = window.navigator.userAgent;\n\nexport const SUPPORT_COMPUTEDSTYLE = !!(\""getComputedStyle\"" in window);\nexport const SUPPORT_ADDEVENTLISTENER = !!(\""addEventListener\"" in document);\nexport const SUPPORT_PASSIVE = (() => {\n\tlet supportsPassiveOption = false;\n\n\ttry {\n\t\tif (SUPPORT_ADDEVENTLISTENER && Object.defineProperty) {\n\t\t\tdocument.addEventListener(\""test\"", null, Object.defineProperty({},\n\t\t\t\t\""passive\"", {\n\t\t\t\t\tget() {\n\t\t\t\t\t\tsupportsPassiveOption = true;\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t}\n\t} catch (e) {}\n\treturn supportsPassiveOption;\n})();\n\nexport const IS_IE = /MSIE|Trident|Windows Phone|Edge/.test(ua);\nexport const IS_IOS = /iPhone|iPad/.test(ua);\nexport const IS_ANDROID2 = /Android 2\\./.test(ua);\nexport const CONTAINER_CLASSNAME = \""_eg-infinitegrid-container_\"";\nexport const IGNORE_CLASSNAME = \""_eg-infinitegrid-ignore_\"";\nexport const TRANSITION_NAME = \""_INFINITEGRID_TRANSITION\"";\n\nexport const APPEND = true;\nexport const PREPEND = false;\nexport const VERTICAL = \""vertical\"";\nexport const HORIZONTAL = \""horizontal\"";\nexport const CACHE = true;\nexport const NO_CACHE = false;\nexport const TRUSTED = true;\nexport const NO_TRUSTED = false;\nexport const MULTI = true;\nexport const SINGLE = false;\nexport const DUMMY_POSITION = -100000;\nexport const GROUPKEY_ATT = \""data-groupkey\"";\n\nexport const DEFAULT_OPTIONS = {\n\thorizontal: false,\n\tmargin: 0,\n};\n\nexport const agent = ua.toLowerCase();\nexport const isMobile = /mobi|ios|android/.test(agent);\n\nexport const ALIGN = {\n\tSTART: \""start\"",\n\tCENTER: \""center\"",\n\tEND: \""end\"",\n\tJUSTIFY: \""justify\"",\n};\n\nexport const IDLE = 0;\nexport const LOADING_APPEND = 1;\nexport const LOADING_PREPEND = 2;\nexport const PROCESSING = 4;\n\n\nconst webkit = /applewebkit\\/([\\d|.]*)/g.exec(agent);\n\nexport const WEBKIT_VERSION = (webkit && parseInt(webkit[1], 10)) || 0;\nexport const DEFENSE_BROWSER = (WEBKIT_VERSION && WEBKIT_VERSION < 537);\n\n\nexport const [TRANSFORM, TRANSITION, TRANSITION_END] = (function() {\n\tconst properties = {\n\t\ttransitionend: \""\"",\n\t\twebkitTransitionEnd: \""-webkit-\"",\n\t\toTransitionEnd: \""-o-\"",\n\t\tmozTransitionEnd: \""-moz-\"",\n\t};\n\n\tfor (const property in properties) {\n\t\tconst prefix = properties[property];\n\n\t\tif (`on${property.toLowerCase()}` in window) {\n\t\t\treturn [`${prefix}transform`, `${prefix}transition`, property];\n\t\t}\n\t}\n\treturn [];\n})();\n"",""import {window, document} from \""./browser\"";\nimport {\n\tSUPPORT_COMPUTEDSTYLE,\n\tSUPPORT_ADDEVENTLISTENER,\n\tSUPPORT_PASSIVE,\n\tVERTICAL,\n\tHORIZONTAL,\n\tDEFAULT_OPTIONS,\n} from \""./consts\"";\n\nexport function toArray(nodes) {\n\t// SCRIPT5014 in IE8\n\tconst array = [];\n\n\tif (nodes) {\n\t\tfor (let i = 0, len = nodes.length; i < len; i++) {\n\t\t\tarray.push(nodes[i]);\n\t\t}\n\t}\n\treturn array;\n}\nexport function matchHTML(html) {\n\treturn html.match(/^<([A-z]+)\\s*([^>]*)>/);\n}\n/**\n * Select or create element\n * @param {String|HTMLElement|jQuery} param\n *  when string given is as HTML tag, then create element\n *  otherwise it returns selected elements\n * @param {Boolean} multi\n * @returns {HTMLElement}\n */\nexport function $(param, multi = false) {\n\tlet el;\n\n\tif (typeof param === \""string\"") { // String (HTML, Selector)\n\t\t// check if string is HTML tag format\n\t\tconst match = matchHTML(param);\n\n\t\t// creating element\n\t\tif (match) { // HTML\n\t\t\tconst dummy = document.createElement(\""div\"");\n\n\t\t\tdummy.innerHTML = param;\n\t\t\tel = dummy.childNodes;\n\t\t} else { // Selector\n\t\t\tel = document.querySelectorAll(param);\n\t\t}\n\t\tif (multi) {\n\t\t\tel = toArray(el);\n\t\t} else {\n\t\t\tel = (el && el.length > 0 && el[0]) || undefined;\n\t\t}\n\t} else if (param === window) { // window\n\t\tel = param;\n\t} else if (param.nodeName &&\n\t\t(param.nodeType === 1 || param.nodeType === 9)) { // HTMLElement, Document\n\t\tel = param;\n\t} else if ((typeof window.jQuery === \""function\"" && param instanceof window.jQuery) ||\n\t\tparam.constructor.prototype.jquery) { // jQuery\n\t\tel = $(multi ? param.toArray() : param.get(0), multi);\n\t} else if (Array.isArray(param)) {\n\t\tel = param.map(v => $(v));\n\t\tif (!multi) {\n\t\t\tel = el.length >= 1 ? el[0] : undefined;\n\t\t}\n\t}\n\treturn el;\n}\nexport function addEvent(element, type, handler, eventListenerOptions) {\n\tif (SUPPORT_ADDEVENTLISTENER) {\n\t\tlet options = eventListenerOptions || false;\n\n\t\tif (typeof eventListenerOptions === \""object\"") {\n\t\t\toptions = SUPPORT_PASSIVE ? eventListenerOptions : false;\n\t\t}\n\t\telement.addEventListener(type, handler, options);\n\t} else if (element.attachEvent) {\n\t\telement.attachEvent(`on${type}`, handler);\n\t} else {\n\t\telement[`on${type}`] = handler;\n\t}\n}\nexport function removeEvent(element, type, handler) {\n\tif (element.removeEventListener) {\n\t\telement.removeEventListener(type, handler, false);\n\t} else if (element.detachEvent) {\n\t\telement.detachEvent(`on${type}`, handler);\n\t} else {\n\t\telement[`on${type}`] = null;\n\t}\n}\nexport function addOnceEvent(element, type, handler, eventListenerOptions) {\n\tconst callback = e => {\n\t\tremoveEvent(element, type, callback);\n\t\thandler(e);\n\t};\n\n\taddEvent(element, type, callback, eventListenerOptions);\n}\nexport function scroll(el, horizontal = false) {\n\tconst prop = `scroll${horizontal ? \""Left\"" : \""Top\""}`;\n\n\tif (el === window) {\n\t\treturn window[horizontal ? \""pageXOffset\"" : \""pageYOffset\""] || document.body[prop] || document.documentElement[prop];\n\t} else {\n\t\treturn el[prop];\n\t}\n}\nexport function scrollTo(el, x, y) {\n\tif (el === window) {\n\t\tel.scroll(x, y);\n\t} else {\n\t\tel.scrollLeft = x;\n\t\tel.scrollTop = y;\n\t}\n}\nexport function scrollBy(el, x, y) {\n\tif (el === window) {\n\t\tel.scrollBy(x, y);\n\t} else {\n\t\tel.scrollLeft += x;\n\t\tel.scrollTop += y;\n\t}\n}\nexport function getStyles(el) {\n\treturn (SUPPORT_COMPUTEDSTYLE ?\n\t\twindow.getComputedStyle(el) : el.currentStyle) || {};\n}\nfunction _getSize(el, name, isOffset) {\n\tif (el === window) { // WINDOW\n\t\treturn window[`inner${name}`] || document.body[`client${name}`];\n\t} else if (el.nodeType === 9) { // DOCUMENT_NODE\n\t\tconst doc = el.documentElement;\n\n\t\treturn Math.max(\n\t\t\tel.body[`scroll${name}`], doc[`scroll${name}`],\n\t\t\tel.body[`offset${name}`], doc[`offset${name}`],\n\t\t\tdoc[`client${name}`]\n\t\t);\n\t} else { // NODE\n\t\tlet size = 0;\n\n\t\tif (isOffset) {\n\t\t\tconst clientRect = el.getBoundingClientRect();\n\n\t\t\tsize = name === \""Width\"" ? clientRect.right - clientRect.left : clientRect.bottom - clientRect.top;\n\t\t} else {\n\t\t\tsize = el[`client${name}`] || el[`offset${name}`];\n\t\t}\n\t\treturn parseFloat(size || getStyles(el)[name.toLowerCase()]) || 0;\n\t}\n}\nexport function innerWidth(el) {\n\treturn _getSize(el, \""Width\"", false);\n}\nexport function innerHeight(el) {\n\treturn _getSize(el, \""Height\"", false);\n}\nexport function outerWidth(el) {\n\treturn _getSize(el, \""Width\"", true);\n}\nexport function outerHeight(el) {\n\treturn _getSize(el, \""Height\"", true);\n}\nexport function getSize(el) {\n\treturn {\n\t\twidth: outerWidth(el),\n\t\theight: outerHeight(el),\n\t};\n}\nexport const STYLE = {\n\tvertical: {\n\t\tpos1: \""top\"",\n\t\tendPos1: \""bottom\"",\n\t\tsize1: \""height\"",\n\t\tpos2: \""left\"",\n\t\tendPos2: \""right\"",\n\t\tsize2: \""width\"",\n\t},\n\thorizontal: {\n\t\tpos1: \""left\"",\n\t\tendPos1: \""right\"",\n\t\tsize1: \""width\"",\n\t\tpos2: \""top\"",\n\t\tendPos2: \""bottom\"",\n\t\tsize2: \""height\"",\n\t},\n};\n\nexport function getStyleNames(isHorizontal) {\n\treturn STYLE[isHorizontal ? HORIZONTAL : VERTICAL];\n}\n\nexport function assignOptions(defaultOptions, options) {\n\treturn Object.assign({},\n\t\tDEFAULT_OPTIONS,\n\t\tdefaultOptions,\n\t\toptions);\n}\n\nexport function toZeroArray(outline) {\n\tif (!outline || !outline.length) {\n\t\treturn [0];\n\t}\n\treturn outline;\n}\nexport function cloneItems(items) {\n\treturn items.map(item => Object.assign({}, item));\n}\nexport function isWindow(el) {\n\treturn el === window;\n}\n\nexport function fill(arr, value) {\n\tconst length = arr.length;\n\n\tfor (let i = length - 1; i >= 0; --i) {\n\t\tarr[i] = value;\n\t}\n\n\treturn arr;\n}\n\nexport function isUndefined(target) {\n\treturn typeof target === \""undefined\"";\n}\n"",""import {MULTI, GROUPKEY_ATT, IGNORE_CLASSNAME, DUMMY_POSITION} from \""./consts\"";\nimport {$, toArray, isUndefined} from \""./utils\"";\n\nexport default class ItemManager {\n\tstatic from(elements, selector, {groupKey, isAppend}) {\n\t\tconst filted = ItemManager.selectItems($(elements, MULTI), selector);\n\n\t\t// Item Structure\n\t\treturn toArray(filted).map(el => ({\n\t\t\tel,\n\t\t\tgroupKey,\n\t\t\tcontent: el.outerHTML,\n\t\t\trect: {\n\t\t\t\ttop: DUMMY_POSITION,\n\t\t\t\tleft: DUMMY_POSITION,\n\t\t\t},\n\t\t}));\n\t}\n\tstatic selectItems(elements, selector) {\n\t\treturn elements.filter(v => {\n\t\t\tconst classNames = v.className.split(\"" \"");\n\n\t\t\tif (classNames.some(c => c === IGNORE_CLASSNAME)) {\n\t\t\t\treturn false;\n\t\t\t} else if (!selector || selector === \""*\"") {\n\t\t\t\treturn v;\n\t\t\t} else {\n\t\t\t\treturn classNames.some(c => c === selector);\n\t\t\t}\n\t\t});\n\t}\n\tstatic pluck(data, property) {\n\t\treturn data.reduce((acc, v) => acc.concat(v[property]), []);\n\t}\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\tgetStatus(startKey, endKey) {\n\t\tconst datas = this._data;\n\t\tconst startIndex = Math.max(this.indexOf(startKey), 0);\n\t\tconst endIndex = this.indexOf(endKey) + 1 || datas.length;\n\n\t\treturn {\n\t\t\t_data: datas.slice(startIndex, endIndex).map(data => {\n\t\t\t\tconst items = data.items.map(item => {\n\t\t\t\t\tconst item2 = Object.assign({}, item);\n\n\t\t\t\t\tdelete item2.el;\n\t\t\t\t\treturn item2;\n\t\t\t\t});\n\t\t\t\tconst data2 = Object.assign({}, data);\n\n\t\t\t\tdata2.items = items;\n\t\t\t\treturn data2;\n\t\t\t}),\n\t\t};\n\t}\n\tsetStatus(status) {\n\t\tconst data = status._data;\n\n\t\tthis.set(data);\n\t}\n\tsize() {\n\t\treturn this._data.length;\n\t}\n\tfit(base, horizontal) {\n\t\tif (!this._data.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst property = horizontal ? \""left\"" : \""top\"";\n\n\t\tif (base !== 0) {\n\t\t\tthis._data = this._data.map(v => {\n\t\t\t\tv.items = v.items.map(item => {\n\t\t\t\t\titem.rect[property] -= base;\n\t\t\t\t\treturn item;\n\t\t\t\t});\n\t\t\t\tv.outlines.start = v.outlines.start.map(start => start - base);\n\t\t\t\tv.outlines.end = v.outlines.end.map(end => end - base);\n\t\t\t\treturn v;\n\t\t\t});\n\t\t}\n\t}\n\tpluck(property, start, end) {\n\t\tconst data = isUndefined(start) ? this._data :\n\t\t\tthis._data.slice(start, (isUndefined(end) ? start : end) + 1);\n\n\t\treturn ItemManager.pluck(data, property);\n\t}\n\tgetOutline(index, property) {\n\t\tconst data = this._data[index];\n\n\t\treturn data ? data.outlines[property] : [];\n\t}\n\tgetEdgeIndex(cursor, start, end) {\n\t\tconst prop = cursor === \""start\"" ? \""min\"" : \""max\"";\n\t\tlet index = -1;\n\t\tlet targetValue = cursor === \""start\"" ? Infinity : -Infinity;\n\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tconst value = Math[prop](...this.getOutline(i, cursor));\n\n\t\t\tif ((cursor === \""start\"" && targetValue > value) ||\n\t\t\t\t(cursor === \""end\"" && targetValue < value)) {\n\t\t\t\ttargetValue = value;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\tgetEdgeValue(cursor, start, end) {\n\t\tconst outlines = this.pluck(\""outlines\"", this.getEdgeIndex(cursor, start, end))\n\t\t\t.reduce((acc, v) => acc.concat(v[cursor]), []);\n\n\t\treturn outlines.length ? Math[cursor === \""start\"" ? \""min\"" : \""max\""](...outlines) : 0;\n\t}\n\tclearOutlines(startCursor = -1, endCursor = -1) {\n\t\tconst datas = this.get();\n\n\t\tdatas.forEach((group, cursor) => {\n\t\t\tif (startCursor <= cursor && cursor <= endCursor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgroup.items.forEach(item => {\n\t\t\t\titem.rect.top = DUMMY_POSITION;\n\t\t\t\titem.rect.left = DUMMY_POSITION;\n\t\t\t});\n\t\t\tgroup.outlines.start = [];\n\t\t\tgroup.outlines.end = [];\n\t\t});\n\t}\n\tgetMaxEdgeValue() {\n\t\tconst groups = this.get();\n\t\tconst length = groups.length;\n\n\t\tfor (let i = length - 1; i >= 0; --i) {\n\t\t\tconst end = groups[i].outlines.end;\n\n\t\t\tif (end.length) {\n\t\t\t\tconst pos = Math.max(...end);\n\n\t\t\t\treturn pos;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\tappend(layouted) {\n\t\tthis._data.push(layouted);\n\t\treturn layouted.items;\n\t}\n\tprepend(layouted) {\n\t\tthis._data.unshift(layouted);\n\t\treturn layouted.items;\n\t}\n\tclear() {\n\t\tthis._data = [];\n\t}\n\tremove(element, start, end) {\n\t\tlet items = [];\n\t\tconst key = element.getAttribute(GROUPKEY_ATT);\n\t\tlet data = this.get(start, end)\n\t\t\t.filter(v => String(v.groupKey) === key);\n\n\t\tif (!data.length) {\n\t\t\treturn items;\n\t\t}\n\t\tdata = data[0];\n\n\t\tconst len = data.items.length;\n\t\tlet idx = -1;\n\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tif (data.items[i].el === element) {\n\t\t\t\tidx = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (~idx) {\n\t\t\t// remove item information\n\t\t\tdata.items.splice(idx, 1);\n\t\t\tthis.set(data, key);\n\t\t\titems = data.items;\n\t\t}\n\t\treturn items;\n\t}\n\tindexOf(data) {\n\t\tconst groupKey = typeof data === \""object\"" ? data.groupKey : data;\n\t\tconst datas = this._data;\n\t\tconst length = datas.length;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tif (groupKey === datas[i].groupKey) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tget(start, end) {\n\t\treturn isUndefined(start) ? this._data :\n\t\t\tthis._data.slice(start, (isUndefined(end) ? start : end) + 1);\n\t}\n\tset(data, key) {\n\t\tif (!isUndefined(key) && !Array.isArray(data)) {\n\t\t\tconst len = this._data.length;\n\t\t\tlet idx = -1;\n\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tif (this._data[i].groupKey === key) {\n\t\t\t\t\tidx = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t~idx && (this._data[idx] = data);\n\t\t} else {\n\t\t\tthis._data = data.concat();\n\t\t}\n\t}\n\tgetData(index) {\n\t\treturn this._data[index];\n\t}\n}\n"",""import {\n\tAPPEND,\n\tPREPEND,\n\tDUMMY_POSITION,\n\tMULTI,\n\tGROUPKEY_ATT,\n\tCONTAINER_CLASSNAME,\n\tTRANSITION_NAME,\n\tTRANSITION,\n\tTRANSITION_END,\n\tTRANSFORM,\n} from \""./consts\"";\nimport {window, document} from \""./browser\"";\nimport {\n\t$,\n\tinnerHeight,\n\tinnerWidth,\n\tgetSize,\n\tgetStyles,\n\taddOnceEvent,\n} from \""./utils\"";\n\n\nexport function resetSize(item) {\n\titem.orgSize = 0;\n\titem.size = 0;\n}\nfunction createContainer(element) {\n\tconst container = document.createElement(\""div\"");\n\n\tcontainer.className = CONTAINER_CLASSNAME;\n\tcontainer.style.position = \""relative\"";\n\tcontainer.style.height = \""100%\"";\n\n\tconst children = element.children;\n\tconst length = children.length;\t// for IE8\n\n\tfor (let i = 0; i < length; i++) {\n\t\tcontainer.appendChild(children[0]);\n\t}\n\telement.appendChild(container);\n\treturn container;\n}\nfunction render(properties, rect, styles) {\n\tproperties.forEach(p => {\n\t\t(p in rect) && (styles[p] = `${rect[p]}px`);\n\t});\n}\nfunction setTransition(styles, transitionDuration, pos1, pos2) {\n\tstyles[`${TRANSITION}-property`] = transitionDuration ? `${TRANSFORM},width,height` : \""\"";\n\tstyles[`${TRANSITION}-duration`] = transitionDuration ? `${transitionDuration}s` : \""\"";\n\tstyles[`${TRANSITION}-delay`] = transitionDuration ? `0s` : \""\"";\n\tstyles[TRANSFORM] = transitionDuration ? `translate(${pos1.left - pos2.left}px,${pos1.top - pos2.top}px)` : \""\"";\n}\n\nexport default class DOMRenderer {\n\tstatic renderItem(item, rect, transitionDuration) {\n\t\tif (!item.el) {\n\t\t\treturn;\n\t\t}\n\t\tconst {el, prevRect} = item;\n\t\tconst styles = el.style;\n\n\t\t// for debugging\n\t\tel.setAttribute(GROUPKEY_ATT, item.groupKey);\n\t\tstyles.position = \""absolute\"";\n\t\trender([\""width\"", \""height\""], rect, styles);\n\t\tif (transitionDuration && TRANSITION && prevRect) {\n\t\t\tsetTransition(styles, transitionDuration, rect, prevRect);\n\t\t\tif (el[TRANSITION_NAME]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tel[TRANSITION_NAME] = true;\n\t\t\taddOnceEvent(el, TRANSITION_END, () => {\n\t\t\t\tconst itemRect = item.rect;\n\n\t\t\t\tsetTransition(styles);\n\t\t\t\trender([\""left\"", \""top\""], itemRect, styles);\n\t\t\t\titem.prevRect = itemRect;\n\t\t\t\tel[TRANSITION_NAME] = false;\n\t\t\t});\n\t\t} else {\n\t\t\trender([\""left\"", \""top\""], rect, styles);\n\t\t\titem.prevRect = rect;\n\t\t}\n\t}\n\tstatic renderItems(items, transitionDuration) {\n\t\titems.forEach(item => {\n\t\t\tDOMRenderer.renderItem(item, item.rect, transitionDuration);\n\t\t});\n\t}\n\tstatic removeItems(items) {\n\t\titems.forEach(item => {\n\t\t\tif (item.el) {\n\t\t\t\tDOMRenderer.removeElement(item.el);\n\t\t\t\titem.el = null;\n\t\t\t}\n\t\t});\n\t}\n\tstatic removeElement(element) {\n\t\tconst parentNode = element && element.parentNode;\n\n\t\tif (!parentNode) {\n\t\t\treturn;\n\t\t}\n\t\tparentNode.removeChild(element);\n\t}\n\tstatic createElements(items) {\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst noElementItems = items.filter(item => !item.el);\n\n\t\tif (!noElementItems.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst elements = $(noElementItems.map(({content}) =>\n\t\t\tcontent.replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, \""\"")).join(\""\""), MULTI);\n\n\t\tnoElementItems.forEach((item, index) => {\n\t\t\titem.el = elements[index];\n\t\t});\n\t}\n\tconstructor(element, options) {\n\t\tObject.assign(this.options = {\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\thorizontal: false,\n\t\t\tcontainer: false,\n\t\t}, options);\n\t\tthis._size = {\n\t\t\tcontainer: -1,\n\t\t\tview: -1,\n\t\t\tviewport: -1,\n\t\t\titem: null,\n\t\t};\n\t\tthis._init(element);\n\t\tthis.resize();\n\t}\n\tgetStatus() {\n\t\treturn {\n\t\t\tcssText: this.container.style.cssText,\n\t\t\t_size: Object.assign({}, this._size),\n\t\t};\n\t}\n\tsetStatus(status) {\n\t\tthis.container.style.cssText = status.cssText;\n\t\tObject.assign(this._size, status._size);\n\t}\n\tupdateSize(items) {\n\t\tconst {isEqualSize, isConstantSize} = this.options;\n\t\tconst size = this._size;\n\n\t\treturn items.map(item => {\n\t\t\tif (!item.el) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t\tif (isEqualSize && !size.item) {\n\t\t\t\tsize.item = getSize(item.el);\n\t\t\t}\n\t\t\titem.size = (isEqualSize && Object.assign(size.item)) ||\n\t\t\t\t\t\t(isConstantSize && item.orgSize && Object.assign(item.orgSize)) ||\n\t\t\t\t\t\tgetSize(item.el);\n\t\t\tif (!item.orgSize) {\n\t\t\t\titem.orgSize = Object.assign({}, item.size);\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t}\n\t_init(el) {\n\t\tconst element = $(el);\n\t\tconst style = getStyles(element);\n\t\tconst {container, horizontal} = this.options;\n\n\t\tthis._orgStyle = {};\n\n\t\tif (style.position === \""static\"") {\n\t\t\tthis._orgStyle.position = element.style.position;\n\t\t\telement.style.position = \""relative\"";\n\t\t}\n\t\tif (container) {\n\t\t\tconst target = horizontal ? [\""X\"", \""Y\""] : [\""Y\"", \""X\""];\n\n\t\t\tthis._orgStyle.overflowX = element.style.overflowX;\n\t\t\tthis._orgStyle.overflowY = element.style.overflowY;\n\t\t\telement.style[`overflow${target[0]}`] = \""scroll\"";\n\t\t\telement.style[`overflow${target[1]}`] = \""hidden\"";\n\t\t\tthis.view = element;\n\t\t\tthis.container = container === true ? createContainer(this.view) : container;\n\t\t} else {\n\t\t\tthis.view = window;\n\t\t\tthis.container = element;\n\t\t}\n\t}\n\tappend(items) {\n\t\tthis._insert(items, APPEND, {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t});\n\t}\n\tprepend(items) {\n\t\tthis._insert(items, PREPEND, {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t});\n\t}\n\tcreateAndInsert(items, isAppend) {\n\t\tDOMRenderer.createElements(items);\n\n\t\tDOMRenderer.renderItems(items);\n\t\tthis._insert(items, isAppend);\n\t}\n\t_insert(items, isAppend, styles) {\n\t\tconst container = this.container;\n\t\tconst df = document.createDocumentFragment();\n\n\t\titems.forEach(item => {\n\t\t\tstyles && DOMRenderer.renderItem(item, styles);\n\t\t\tisAppend ? df.appendChild(item.el) : df.insertBefore(item.el, df.firstChild);\n\t\t});\n\t\tisAppend ?\n\t\t\tcontainer.appendChild(df) :\n\t\t\tcontainer.insertBefore(df, container.firstChild);\n\t}\n\t_calcSize() {\n\t\treturn this.options.horizontal ?\n\t\t\tinnerHeight(this.container) : innerWidth(this.container);\n\t}\n\tgetViewSize() {\n\t\treturn this._size.view;\n\t}\n\tgetViewportSize() {\n\t\treturn this._size.viewport;\n\t}\n\tsetContainerSize(size) {\n\t\tthis.container.style[this.options.horizontal ? \""width\"" : \""height\""] = `${size}px`;\n\t}\n\tresize() {\n\t\tconst horizontal = this.options.horizontal;\n\t\tconst view = this.view;\n\t\tconst isResize = this.isNeededResize();\n\n\t\tif (isResize) {\n\t\t\tthis._size = {\n\t\t\t\tviewport: this._calcSize(),\n\t\t\t\titem: null,\n\t\t\t};\n\t\t}\n\t\tthis._size.view = horizontal ? innerWidth(view) : innerHeight(view);\n\t\treturn isResize;\n\t}\n\tisNeededResize() {\n\t\treturn this._calcSize() !== this._size.viewport;\n\t}\n\tclear() {\n\t\tthis.container.innerHTML = \""\"";\n\t\tthis.container.style[this.options.horizontal ? \""width\"" : \""height\""] = \""\"";\n\n\t\tthis._size = {\n\t\t\titem: null,\n\t\t\tviewport: -1,\n\t\t\tcontainer: -1,\n\t\t\tview: -1,\n\t\t};\n\t}\n\tdestroy() {\n\t\tthis.clear();\n\t\tconst container = this.options.container;\n\n\t\tfor (const p in this._orgStyle) {\n\t\t\tthis[container ? \""view\"" : \""container\""].style[p] = this._orgStyle[p];\n\t\t}\n\t\tcontainer && this.container.parentNode.removeChild(this.container);\n\t}\n}\n\n"",""import {\n\tIS_IOS,\n} from \""./consts\"";\nimport {\n\twindow,\n} from \""./browser\"";\nimport {\n\taddEvent,\n\tremoveEvent,\n\tscroll,\n\tscrollTo,\n\tscrollBy,\n} from \""./utils\"";\n\nexport default class Watcher {\n\tconstructor(view, options) {\n\t\tObject.assign(this.options = {\n\t\t\tcontainer: view,\n\t\t\tresize: () => {},\n\t\t\tcheck: () => {},\n\t\t\tisOverflowScroll: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\t\tthis._timer = {\n\t\t\tresize: null,\n\t\t\t// doubleCheck: null,\n\t\t\t// doubleCheckCount: RETRY,\n\t\t};\n\t\tthis.reset();\n\t\tthis._containerOffset = 0;\n\t\tthis._view = view;\n\t\tthis._scrollIssue = IS_IOS;\n\t\tthis._onCheck = this._onCheck.bind(this);\n\t\tthis._onResize = this._onResize.bind(this);\n\t\tthis.attachEvent();\n\t\tthis.resize();\n\t\tthis.setScrollPos();\n\t}\n\tgetStatus() {\n\t\treturn {\n\t\t\t_prevPos: this._prevPos,\n\t\t\tscrollPos: this.getOrgScrollPos(),\n\t\t};\n\t}\n\tsetStatus(status, applyScrollPos = true) {\n\t\tthis._prevPos = status._prevPos;\n\t\tapplyScrollPos && this.scrollTo(status.scrollPos);\n\t}\n\tscrollBy(pos) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollBy(this._view, ...arrPos);\n\t\tthis.setScrollPos();\n\t}\n\tscrollTo(pos) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollTo(this._view, ...arrPos);\n\t}\n\tgetScrollPos() {\n\t\treturn this._prevPos;\n\t}\n\tsetScrollPos(pos) {\n\t\tlet rawPos = pos;\n\n\t\tif (typeof pos === \""undefined\"") {\n\t\t\trawPos = this.getOrgScrollPos();\n\t\t}\n\t\tthis._prevPos = rawPos - this.getContainerOffset();\n\t}\n\tattachEvent() {\n\t\taddEvent(this._view, \""scroll\"", this._onCheck);\n\t\taddEvent(window, \""resize\"", this._onResize);\n\t}\n\tgetOrgScrollPos() {\n\t\treturn scroll(this._view, this.options.horizontal);\n\t}\n\treset() {\n\t\tthis._prevPos = null;\n\t}\n\t_onCheck() {\n\t\tconst prevPos = this.getScrollPos();\n\t\tconst orgScrollPos = this.getOrgScrollPos();\n\n\t\tthis.setScrollPos(orgScrollPos);\n\t\tconst scrollPos = this.getScrollPos();\n\n\t\tif (prevPos === null || (this._scrollIssue && orgScrollPos === 0) || prevPos === scrollPos) {\n\t\t\torgScrollPos && (this._scrollIssue = false);\n\t\t\treturn;\n\t\t}\n\t\tthis._scrollIssue = false;\n\t\tthis.options.check({\n\t\t\tisForward: prevPos < scrollPos,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t\thorizontal: this.options.horizontal,\n\t\t});\n\t}\n\tgetContainerOffset() {\n\t\treturn this._containerOffset;\n\t}\n\t_getOffset() {\n\t\tconst {container, horizontal} = this.options;\n\t\tconst rect = container.getBoundingClientRect();\n\n\t\treturn rect[horizontal ? \""left\"" : \""top\""] + this.getOrgScrollPos();\n\t}\n\tresize() {\n\t\tthis._containerOffset = this.options.isOverflowScroll ? 0 : this._getOffset();\n\t}\n\t_onResize() {\n\t\tif (this._timer.resize) {\n\t\t\tclearTimeout(this._timer.resize);\n\t\t}\n\t\tthis._timer.resize = setTimeout(() => {\n\t\t\tthis.resize();\n\t\t\tthis.options.resize();\n\t\t\tthis._timer.resize = null;\n\t\t\tthis.reset();\n\t\t}, 100);\n\t}\n\tdetachEvent() {\n\t\tremoveEvent(this._view, \""scroll\"", this._onCheck);\n\t\tremoveEvent(window, \""resize\"", this._onResize);\n\t}\n\tdestroy() {\n\t\tthis.detachEvent();\n\t\tthis.reset();\n\t}\n}\n"",""\nfunction isVisible(group, threshold, scrollPos, endScrollPos) {\n\tconst {items, outlines} = group;\n\tconst start = outlines.start;\n\tconst end = outlines.end;\n\n\tif (start.legnth === 0 || end.length === 0 || !items.length || !items[0].el) {\n\t\treturn 2;\n\t}\n\tconst min = Math.min(...start);\n\tconst max = Math.max(...end);\n\n\tif ((endScrollPos + threshold < min)) {\n\t\treturn +1;\n\t} else if ((scrollPos - threshold > max)) {\n\t\treturn -1;\n\t}\n\treturn 0;\n}\n\nclass Infinite {\n\tconstructor(itemManger, options) {\n\t\tthis.options = Object.assign({\n\t\t\tuseRecycle: true,\n\t\t\tthreshold: 100,\n\t\t\tappend: () => {},\n\t\t\tprepend: () => {},\n\t\t\trecycle: () => {},\n\t\t}, options);\n\t\tthis._items = itemManger;\n\t\tthis.clear();\n\t}\n\tsetSize(size) {\n\t\tthis._status.size = size;\n\t}\n\trecycle(scrollPos, isForward) {\n\t\tif (!this.options.useRecycle) {\n\t\t\treturn;\n\t\t}\n\t\tconst {startCursor, endCursor, size} = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn;\n\t\t}\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst {threshold, recycle} = this.options;\n\t\tconst visibles = this._items.get(startCursor, endCursor)\n\t\t\t.map(group => isVisible(group, threshold, scrollPos, endScrollPos));\n\t\tconst length = visibles.length;\n\t\tlet start = isForward ? 0 : visibles.lastIndexOf(0);\n\t\tlet end = isForward ? visibles.indexOf(0) - 1 : visibles.length - 1;\n\n\t\tif (!isForward && start !== -1) {\n\t\t\tstart += 1;\n\t\t}\n\t\tif (start < 0 || end < 0 || start > end || end - start + 1 >= length) {\n\t\t\treturn;\n\t\t}\n\t\tstart = startCursor + start;\n\t\tend = startCursor + end;\n\n\t\trecycle({start, end});\n\t\tif (isForward) {\n\t\t\tthis.setCursor(\""start\"", end + 1);\n\t\t} else {\n\t\t\tthis.setCursor(\""end\"", start - 1);\n\t\t}\n\t}\n\tscroll(scrollPos) {\n\t\tconst startCursor = this.getCursor(\""start\"");\n\t\tconst endCursor = this.getCursor(\""end\"");\n\t\tconst items = this._items;\n\n\t\tif (typeof scrollPos !== \""number\"" || startCursor === -1 ||\n\t\t\tendCursor === -1 || !items.size()) {\n\t\t\treturn;\n\t\t}\n\t\tconst size = this._status.size;\n\t\tconst {threshold, append, prepend} = this.options;\n\t\tconst datas = items.get();\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst startEdgePos = Math.max(...datas[startCursor].outlines.start);\n\t\tconst endEdgePos = Math.min(...datas[endCursor].outlines.end);\n\t\tconst visibles = datas.map((group, i) => {\n\t\t\tconst {start, end} = group.outlines;\n\n\t\t\tif (!start.length || !end.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst startPos = Math.min(...start);\n\t\t\tconst endPos = Math.max(...end);\n\n\t\t\tif (startPos - threshold <= endScrollPos && scrollPos <= endPos + threshold) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tconst start = visibles.indexOf(true);\n\t\tconst end = visibles.lastIndexOf(true);\n\n\t\tif (~start && start < startCursor) {\n\t\t\tprepend({cache: datas.slice(start, Math.min(startCursor, end + 1))});\n\t\t} else if (endCursor < end) {\n\t\t\tappend({cache: datas.slice(Math.max(start, endCursor + 1), end + 1)});\n\t\t} else if (endScrollPos >= endEdgePos - threshold) {\n\t\t\tappend({cache: datas.slice(endCursor + 1, endCursor + 2)});\n\t\t} else if (scrollPos <= startEdgePos + threshold) {\n\t\t\tprepend({cache: datas.slice(startCursor - 1, startCursor)});\n\t\t}\n\t}\n\tsetCursor(cursor, index) {\n\t\tconst status = this._status;\n\t\tconst items = this._items;\n\t\tconst size = items.size();\n\n\t\tif (!this.options.useRecycle) {\n\t\t\tstatus.startCursor = 0;\n\t\t\tif (items.getOutline(size - 1, \""end\"").length) {\n\t\t\t\tstatus.endCursor = size - 1;\n\t\t\t\treturn;\n\t\t\t} if (cursor !== \""end\"") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (cursor === \""start\"") {\n\t\t\tstatus.startCursor = index;\n\t\t} else {\n\t\t\tstatus.endCursor = Math.min(size - 1, index);\n\t\t}\n\t\tstatus.startCursor = Math.max(0, status.startCursor);\n\t}\n\tsetStatus(status) {\n\t\tthis._status = Object.assign(this._status, status);\n\t}\n\tgetStatus(startKey, endKey) {\n\t\tconst {startCursor, endCursor, size} = this._status;\n\t\tconst startIndex = Math.max(this._items.indexOf(startKey), 0);\n\t\tconst endIndex = (this._items.indexOf(endKey) + 1 || this._items.size()) - 1;\n\t\tconst start = Math.max(startCursor - startIndex, ~startCursor ? 0 : -1);\n\t\tconst end = Math.max(Math.min(endCursor - startIndex, endIndex - startIndex), start);\n\n\t\treturn {\n\t\t\tstartCursor: start,\n\t\t\tendCursor: end,\n\t\t\tsize,\n\t\t};\n\t}\n\tgetEdgeOutline(cursor) {\n\t\tconst {startCursor, endCursor} = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._items.getOutline(cursor === \""start\"" ? startCursor : endCursor, cursor);\n\t}\n\tgetEdgeValue(cursor) {\n\t\tconst outlines = this.getEdgeOutline(cursor);\n\n\t\treturn outlines.length ? Math[cursor === \""start\"" ? \""min\"" : \""max\""](...outlines) : 0;\n\t}\n\tgetVisibleItems() {\n\t\treturn this._items.pluck(\""items\"", this._status.startCursor, this._status.endCursor);\n\t}\n\tgetCursor(cursor) {\n\t\treturn this._status[cursor === \""start\"" ? \""startCursor\"" : \""endCursor\""];\n\t}\n\tgetVisibleData() {\n\t\treturn this._items.get(this._status.startCursor, this._status.endCursor);\n\t}\n\tremove(element) {\n\t\treturn this._items.remove(element, this._status.startCursor, this._status.endCursor);\n\t}\n\tclear() {\n\t\tthis._status = {\n\t\t\tstartCursor: -1,\n\t\t\tendCursor: -1,\n\t\t\tsize: -1,\n\t\t};\n\t}\n}\n\nexport default Infinite;\n"",""import {window} from \""./browser\"";\nimport {addEvent, removeEvent, innerWidth, innerHeight} from \""./utils\"";\n\nconst elements = [];\n/* eslint-disable */\nfunction onResize(e) {\n\tAutoSizer.resizeAll();\n}\n/* eslint-enable */\n\nexport default class AutoSizer {\n\tstatic add(element, prefix = \""data-\"") {\n\t\tif (!element.length) {\n\t\t\taddEvent(window, \""resize\"", onResize);\n\t\t}\n\t\telement.__PREFIX__ = prefix;\n\t\telements.push(element);\n\t\tAutoSizer.resize(element);\n\t}\n\tstatic remove(element, isFixed = false) {\n\t\tconst fixed = element.getAttribute(`${element.__PREFIX__}fixed`) || \""width\"";\n\n\t\tif (!isFixed) {\n\t\t\telement.style[fixed === \""width\"" ? \""height\"" : \""width\""] = \""\"";\n\t\t}\n\t\tconst index = elements.indexOf(element);\n\n\t\tif (!~index) {\n\t\t\treturn;\n\t\t}\n\t\telements.splice(index, 1);\n\t\tif (!elements.length) {\n\t\t\tremoveEvent(window, \""reisze\"", onResize);\n\t\t}\n\t}\n\tstatic resize(element, prefix = \""data-\"") {\n\t\tconst elementPrefix = typeof element.__PREFIX__ === \""string\"" ? element.__PREFIX__ : prefix;\n\t\tconst dataWidth = element.getAttribute(`${elementPrefix}width`);\n\t\tconst dataHeight = element.getAttribute(`${elementPrefix}height`);\n\t\tconst fixed = element.getAttribute(`${elementPrefix}fixed`);\n\n\t\tif (fixed === \""height\"") {\n\t\t\tconst size = innerHeight(element) || dataHeight;\n\n\t\t\telement.style.width = `${dataWidth / dataHeight * size}px`;\n\t\t} else {\n\t\t\tconst size = innerWidth(element) || dataWidth;\n\n\t\t\telement.style.height = `${dataHeight / dataWidth * size}px`;\n\t\t}\n\t}\n\tstatic resizeAll() {\n\t\telements.forEach(element => AutoSizer.resize(element));\n\t}\n}\n"",""import {IS_IE} from \""./consts\"";\nimport {addEvent, removeEvent, toArray} from \""./utils\"";\nimport AutoSizer from \""./AutoSizer\"";\n\n\nexport const CHECK_ALL = 1;\nexport const CHECK_ONLY_ERROR = 2;\n\nfunction isDataAttribute(target, prefix) {\n\treturn !!target.getAttribute(`${prefix}width`);\n}\n\nclass ImageLoaded {\n\tstatic waitImageLoaded(needCheck, {prefix = \""\"", length, type, complete, error, end}) {\n\t\tlet checkCount = 0;\n\t\tlet endCount = length;\n\n\t\tif (type !== CHECK_ONLY_ERROR) {\n\t\t\tcheckCount = endCount;\n\t\t}\n\t\tconst checkEnd = function() {\n\t\t\tif (--endCount !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tend && end();\n\t\t};\n\t\tconst checkImage = function() {\n\t\t\tcheckCount--;\n\t\t\tif (checkCount !== 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcomplete && complete();\n\t\t};\n\t\tconst onError = function(target, itemIndex = target.__ITEM_INDEX__) {\n\t\t\terror && error({\n\t\t\t\ttarget,\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t};\n\t\tconst onCheck = function(e) {\n\t\t\tconst target = e.target || e.srcElement;\n\n\t\t\tremoveEvent(target, \""error\"", onCheck);\n\t\t\tremoveEvent(target, \""load\"", onCheck);\n\n\t\t\tif (type === CHECK_ALL && isDataAttribute(target, prefix)) {\n\t\t\t\tAutoSizer.remove(target, e.type === \""error\"");\n\t\t\t} else {\n\t\t\t\tcheckImage();\n\t\t\t}\n\t\t\tif (e.type === \""error\"") {\n\t\t\t\tonError(target);\n\t\t\t}\n\t\t\tdelete target.__ITEM_INDEX__;\n\t\t\tcheckEnd();\n\t\t};\n\n\t\tneedCheck.forEach((images, i) => {\n\t\t\timages.forEach(v => {\n\t\t\t\t// workaround for IE\n\t\t\t\tif (v.complete && (!IS_IE || (IS_IE && v.naturalWidth))) {\n\t\t\t\t\tif (!v.naturalWidth) {\n\t\t\t\t\t\tonError(v, i);\n\t\t\t\t\t}\n\t\t\t\t\tcheckImage();\n\t\t\t\t\tcheckEnd();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tv.__ITEM_INDEX__ = i;\n\t\t\t\tif (type === CHECK_ALL && isDataAttribute(v, prefix)) {\n\t\t\t\t\tAutoSizer.add(v, prefix);\n\t\t\t\t\tcheckImage();\n\t\t\t\t}\n\t\t\t\taddEvent(v, \""load\"", onCheck);\n\t\t\t\taddEvent(v, \""error\"", onCheck);\n\n\t\t\t\tIS_IE && v.setAttribute(\""src\"", v.getAttribute(\""src\""));\n\t\t\t});\n\t\t});\n\t}\n\tstatic checkImageLoaded(el) {\n\t\tif (el.tagName === \""IMG\"") {\n\t\t\treturn el.complete ? [] : [el];\n\t\t} else {\n\t\t\treturn toArray(el.querySelectorAll(\""img\""));\n\t\t}\n\t}\n\tstatic check(elements, {prefix, type = CHECK_ALL, complete, error, end}) {\n\t\tconst images = elements.map(element => this.checkImageLoaded(element));\n\t\tconst length = images.reduce((sum, element) => sum + element.length, 0);\n\n\t\tif (type === CHECK_ONLY_ERROR || length === 0) {\n\t\t\t// convert to async\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomplete && complete();\n\t\t\t\tif (length === 0) {\n\t\t\t\t\tend && end();\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t}\n\t\tif (length > 0) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.waitImageLoaded(images, {prefix, length, type, complete, error, end});\n\t\t\t}, 0);\n\t\t}\n\t}\n}\n\nexport default ImageLoaded;\n"",""import AutoSizer from \""./AutoSizer\"";\nimport ImageLoaded, {CHECK_ALL, CHECK_ONLY_ERROR} from \""./ImageLoaded\"";\nimport ItemManager from \""./ItemManager\"";\nimport {matchHTML, $} from \""./utils\"";\nimport {DUMMY_POSITION} from \""./consts\"";\nimport DOMRenderer from \""./DOMRenderer\"";\n\nfunction hasTarget(target, value) {\n\treturn ~target.indexOf(value);\n}\n\nexport default class LayoutMananger {\n\tconstructor(items, renderer, options = {}) {\n\t\tObject.assign(this.options = {\n\t\t\tattributePrefix: \""data-\"",\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\n\t\tthis._items = items;\n\t\tthis._renderer = renderer;\n\t\tthis._layout = null;\n\t}\n\tsetLayout(layout) {\n\t\tthis._layout = layout;\n\t}\n\tsetSize(size) {\n\t\tthis._layout.setSize(size);\n\t}\n\t_complete(groups, items, isAppend, isUpdate, callback) {\n\t\tconst itemManager = this._items;\n\t\tconst cursor = isAppend ? \""end\"" : \""start\"";\n\t\tconst groupIndex = itemManager.indexOf(groups[0]);\n\t\tconst prevGroup = itemManager.getData(groupIndex + (isAppend ? -1 : 1));\n\t\tlet outline = prevGroup ? prevGroup.outlines[cursor] : [0];\n\n\t\tthis._renderer.updateSize(items);\n\n\t\tconst groupInfos = groups.map(group => {\n\t\t\tconst groupOutline = group.outlines[isAppend ? \""start\"" : \""end\""];\n\t\t\tconst isRelayout = isUpdate || !outline.length || (outline.length === groupOutline.length ?\n\t\t\t\t!outline.every((v, index) => v === groupOutline[index]) : true);\n\n\t\t\tif (!isRelayout) {\n\t\t\t\toutline = group.outlines[isAppend ? \""end\"" : \""start\""];\n\t\t\t\tDOMRenderer.renderItems(group.items);\n\t\t\t\treturn group;\n\t\t\t}\n\t\t\tconst groupItems = group.items;\n\t\t\tconst groupInfo = this._layout[isAppend ? \""append\"" : \""prepend\""](groupItems, outline, true);\n\n\t\t\tObject.assign(group, groupInfo);\n\t\t\tDOMRenderer.renderItems(groupInfo.items);\n\t\t\toutline = groupInfo.outlines[isAppend ? \""end\"" : \""start\""];\n\n\t\t\treturn groupInfo;\n\t\t});\n\n\t\tcallback({\n\t\t\tgroups: groupInfos,\n\t\t\titems,\n\t\t\tisAppend,\n\t\t});\n\t}\n\t_error(removeTarget, replaceTarget, target, items, errorIndex, callback) {\n\t\tconst item = items[errorIndex];\n\t\tconst element = item.el;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\t// remove item\n\t\tconst removeItem = () => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tremoveTarget.push(element);\n\t\t\tconst index = replaceTarget.indexOf(errorIndex);\n\n\t\t\tindex !== -1 && replaceTarget.splice(index, 1);\n\t\t};\n\t\t// remove image\n\t\tconst remove = () => {\n\t\t\tif (target === element) {\n\t\t\t\tremoveItem();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttarget.parentNode.removeChild(target);\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace image\n\t\tconst replace = src => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (src) {\n\t\t\t\tif (matchHTML(src) || typeof src === \""object\"") {\n\t\t\t\t\tconst parentNode = target.parentNode;\n\n\t\t\t\t\tparentNode.insertBefore($(src), target);\n\t\t\t\t\tparentNode.removeChild(target);\n\t\t\t\t\titem.content = element.outerHTML;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.src = src;\n\t\t\t\t\tif (target.getAttribute(`${prefix}width`)) {\n\t\t\t\t\t\tAutoSizer.remove(target);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}width`);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}height`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace item\n\t\tconst replaceItem = content => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telement.innerHTML = content;\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\n\t\tcallback({\n\t\t\ttarget,\n\t\t\telement,\n\t\t\titems,\n\t\t\titem,\n\t\t\titemIndex: errorIndex,\n\t\t\treplace,\n\t\t\treplaceItem,\n\t\t\tremove,\n\t\t\tremoveItem,\n\t\t});\n\t}\n\t_end(removeTarget, replaceTarget, items, callback) {\n\t\tconst {attributePrefix} = this.options;\n\n\t\tconst removeTargetLength = removeTarget.length;\n\t\tconst replaceTargetLength = replaceTarget.length;\n\n\t\tif (!removeTargetLength && !replaceTargetLength) {\n\t\t\tcallback({remove: []});\n\t\t\treturn;\n\t\t}\n\t\tconst layoutedItems = replaceTarget.map(itemIndex => items[itemIndex]);\n\n\t\tif (!replaceTargetLength) {\n\t\t\tcallback({remove: removeTarget, layout: true});\n\t\t\treturn;\n\t\t}\n\t\t// wait layoutComplete beacause of error event.\n\t\tImageLoaded.check(layoutedItems.map(v => v.el), {\n\t\t\tprefix: attributePrefix,\n\t\t\tcomplete: () => {\n\t\t\t\tthis._renderer.updateSize(layoutedItems);\n\t\t\t\tcallback({remove: removeTarget, layout: true});\n\t\t\t},\n\t\t});\n\t}\n\t_insert({\n\t\tgroups,\n\t\titems = ItemManager.pluck(groups, \""items\""),\n\t\tisAppend,\n\t\tisUpdate,\n\t}, {\n\t\terror = () => {},\n\t\tcomplete = () => {},\n\t\tend = () => {},\n\t}) {\n\t\tif (!groups.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst checkGroups = isAppend ? groups : groups.reverse();\n\t\tconst replaceTarget = [];\n\t\tconst removeTarget = [];\n\t\tconst elements = items.map(item => item.el);\n\t\tconst type = this.options.isEqualSize && this._renderer._size.item ? CHECK_ONLY_ERROR : CHECK_ALL;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\tImageLoaded.check(elements, {\n\t\t\tprefix,\n\t\t\ttype,\n\t\t\tcomplete: () => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._complete(checkGroups, items, isAppend, isUpdate, complete);\n\t\t\t},\n\t\t\terror: ({target, itemIndex}) => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._error(removeTarget, replaceTarget, target, items, itemIndex, error);\n\t\t\t},\n\t\t\tend: () => {\n\t\t\t\tif (!this._items) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._end(removeTarget, replaceTarget, items, end);\n\t\t\t},\n\t\t});\n\t}\n\tappend({groups, items, isUpdate}, callbacks = {}) {\n\t\tthis._insert({groups, items, isUpdate, isAppend: true}, callbacks);\n\t}\n\tprepend({groups, items, isUpdate}, callbacks = {}) {\n\t\tthis._insert({groups, items, isUpdate, isAppend: false}, callbacks);\n\t}\n\tlayout(isRelayout, groups, items) {\n\t\tconst renderer = this._renderer;\n\t\tconst {isEqualSize, isConstantSize} = renderer.options;\n\t\tconst layoutGroups = groups.filter(group => {\n\t\t\tconst item = group.items[0];\n\n\t\t\treturn item.orgSize && item.rect.top > DUMMY_POSITION / 10;\n\t\t});\n\n\t\tif (!layoutGroups.length) {\n\t\t\treturn [];\n\t\t}\n\t\tlet outline = layoutGroups[0].outlines.start;\n\n\t\tif (isRelayout) {\n\t\t\toutline = [outline.length ? Math.min(...outline) : 0];\n\t\t\tif (!isConstantSize && items.length) {\n\t\t\t\trenderer.updateSize(items);\n\n\t\t\t\t// update invisible items' size\n\t\t\t\tif (isEqualSize && items[0].size) {\n\t\t\t\t\tItemManager.pluck(layoutGroups, \""items\"").forEach(item => {\n\t\t\t\t\t\titem.size = Object.assign({}, items[0].size);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._layout.layout(layoutGroups, outline);\n\t\treturn layoutGroups;\n\t}\n\tdestroy() {\n\t\tthis._items = null;\n\t\tthis._renderer = null;\n\t}\n}\n"",""/**\n * Copyright (c) 2017 NAVER Corp.\n * egjs projects are licensed under the MIT license\n*/\nimport Component from \""@egjs/component\"";\nimport ItemManager from \""./ItemManager\"";\nimport DOMRenderer, {resetSize} from \""./DOMRenderer\"";\nimport Watcher from \""./Watcher\"";\nimport {\n\tAPPEND,\n\tPREPEND,\n\tCACHE,\n\tNO_CACHE,\n\tTRUSTED,\n\tNO_TRUSTED,\n\tIS_ANDROID2,\n\tIDLE,\n\tLOADING_APPEND,\n\tLOADING_PREPEND,\n\tPROCESSING,\n\tDEFENSE_BROWSER,\n\tIGNORE_CLASSNAME,\n\tDUMMY_POSITION,\n\tIS_IOS,\n} from \""./consts\"";\nimport Infinite from \""./Infinite\"";\nimport {toArray, $, outerHeight, outerWidth} from \""./utils\"";\nimport LayoutMananger from \""./LayoutManager\"";\n\n// IE8\n// https://stackoverflow.com/questions/43216659/babel-ie8-inherit-issue-with-object-create\n/* eslint-disable */\nif (typeof Object.create !== \""function\"") {\n\tObject.create = function (o, properties) {\n\t\tif (typeof o !== \""object\"" && typeof o !== \""function\"") {\n\t\t\tthrow new TypeError(\""Object prototype may only be an Object: \"" + o);\n\t\t} else if (o === null) {\n\t\t\tthrow new Error(\""This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.\"");\n\t\t}\n\t\tfunction F() {}\n\t\tF.prototype = o;\n\t\treturn new F();\n\t};\n}\n/* eslint-enable */\n\n/**\n * A module used to arrange card elements including content infinitely according to layout type. With this module, you can implement various layouts composed of different card elements whose sizes vary. It guarantees performance by maintaining the number of DOMs the module is handling under any circumstance\n * @ko 콘텐츠가 있는 카드 엘리먼트를 레이아웃 타입에 따라 무한으로 배치하는 모듈. 다양한 크기의 카드 엘리먼트를 다양한 레이아웃으로 배치할 수 있다. 카드 엘리먼트의 개수가 계속 늘어나도 모듈이 처리하는 DOM의 개수를 일정하게 유지해 최적의 성능을 보장한다\n * @alias eg.InfiniteGrid\n * @extends eg.Component\n *\n * @example\n```\n<ul id=\""grid\"">\n\t<li class=\""card\"">\n\t\t<div>test1</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test2</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test3</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test4</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test5</div>\n\t</li>\n\t<li class=\""card\"">\n\t\t<div>test6</div>\n\t</li>\n</ul>\n<script>\nvar some = new eg.InfiniteGrid(\""#grid\"").on(\""layoutComplete\"", function(e) {\n\t// ...\n});\n\n// If you already have items in the container, call \""layout\"" method.\nsome.layout();\n</script>\n```\n *\n * @support {\""ie\"": \""8+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"", \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""2.1+ (except 3.x)\""}\n **/\nclass InfiniteGrid extends Component {\n\t/**\n * Version info string\n * @ko 버전정보 문자열\n * @name VERSION\n * @static\n * @type {String}\n * @example\n * eg.InfiniteGrid.VERSION;  // ex) 3.3.3\n * @memberof eg.InfiniteGrid\n */\n\tstatic VERSION = \""#__VERSION__#\"";\n\t/**\n\t * @param {HTMLElement|String|jQuery} element A base element for a module <ko>모듈을 적용할 기준 엘리먼트</ko>\n\t * @param {Object} [options] The option object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid 모듈의 옵션 객체</ko>\n\t * @param {String} [options.itemSelector] A selector to select card elements that make up the layout<ko>레이아웃을 구성하는 카드 엘리먼트를 선택할 선택자(selector)</ko>\n\t * @param {Boolean} [options.useRecycle=true] Indicates whether keep the number of DOMs is maintained. If the useRecycle value is 'true', keep the number of DOMs is maintained. If the useRecycle value is 'false', the number of DOMs will increase as card elements are added. <ko>DOM의 수를 유지할지 여부를 나타낸다. useRecycle 값이 'true'이면 DOM 개수를 일정하게 유지한다. useRecycle 값이 'false' 이면 카드 엘리먼트가 추가될수록 DOM 개수가 계속 증가한다.</ko>\n\t * @param {Boolean} [options.isOverflowScroll=false] Indicates whether overflow:scroll is applied<ko>overflow:scroll 적용여부를 결정한다.</ko>\n\t * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (true: horizontal, false: vertical) <ko>스크롤 이동 방향 (true 가로방향, false 세로방향)</ko>\n\t * @param {Boolean} [options.useFit=true] The useFit option scrolls upwards so that no space is visible until an item is added <ko>위로 스크롤할 시 아이템을 추가하는 동안 보이는 빈 공간을 안보이게 한다.</ko>\n\t * @param {Boolean} [options.isEqualSize=false] Indicates whether sizes of all card elements are equal to one another. If sizes of card elements to be arranged are all equal and this option is set to \""true\"", the performance of layout arrangement can be improved. <ko>카드 엘리먼트의 크기가 동일한지 여부. 배치될 카드 엘리먼트의 크기가 모두 동일할 때 이 옵션을 'true'로 설정하면 레이아웃 배치 성능을 높일 수 있다</ko>\n\t * @param {Boolean} [options.isConstantSize=false] Indicates whether sizes of all card elements does not change, the performance of layout arrangement can be improved. <ko>모든 카드 엘리먼트의 크기가 불변일 때 이 옵션을 'true'로 설정하면 레이아웃 배치 성능을 높일 수 있다</ko>\n\t * @param {Number} [options.transitionDruation=0] Indicates how many seconds a transition effect takes to complete. <ko>트랜지션 효과를 완료하는데 걸리는 시간을 나타낸다.</ko>\n\t * @param {Number} [options.threshold=100] The threshold size of an event area where card elements are added to a layout.<ko>레이아웃에 카드 엘리먼트를 추가하는 이벤트가 발생하는 기준 영역의 크기.</ko>\n\t * @param {String} [options.attributePrefix=\""data-\""] The prefix to use element's data attribute.<ko>엘리먼트의 데이타 속성에 사용할 접두사.</ko>\n\t */\n\tconstructor(element, options) {\n\t\tsuper();\n\t\tObject.assign(this.options = {\n\t\t\titemSelector: \""*\"",\n\t\t\tisOverflowScroll: false,\n\t\t\tthreshold: 100,\n\t\t\tisEqualSize: false,\n\t\t\tisConstantSize: false,\n\t\t\tuseRecycle: true,\n\t\t\thorizontal: false,\n\t\t\ttransitionDuration: 0,\n\t\t\tuseFit: true,\n\t\t\tattributePrefix: \""data-\"",\n\t\t}, options);\n\t\tDEFENSE_BROWSER && (this.options.useFit = false);\n\t\tIS_ANDROID2 && (this.options.isOverflowScroll = false);\n\t\tthis._reset();\n\t\tthis._loadingBar = {};\n\n\t\tconst {\n\t\t\tisOverflowScroll,\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tthreshold,\n\t\t\tuseRecycle,\n\t\t} = this.options;\n\n\t\tthis._items = new ItemManager();\n\t\tthis._renderer = new DOMRenderer(element, {\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tcontainer: isOverflowScroll,\n\t\t});\n\t\tthis._watcher = new Watcher(\n\t\t\tthis._renderer.view,\n\t\t\t{\n\t\t\t\tisOverflowScroll,\n\t\t\t\thorizontal,\n\t\t\t\tcontainer: this._renderer.container,\n\t\t\t\tresize: () => this._onResize(),\n\t\t\t\tcheck: param => this._onCheck(param),\n\t\t\t});\n\n\t\tthis._infinite = new Infinite(this._items, {\n\t\t\thorizontal,\n\t\t\tuseRecycle,\n\t\t\tthreshold,\n\t\t\tappend: param => this._requestAppend(param),\n\t\t\tprepend: param => this._requestPrepend(param),\n\t\t\trecycle: param => this._recycle(param),\n\t\t});\n\t}\n\t/**\n\t * Adds a card element at the bottom of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko 카드 엘리먼트를 레이아웃 아래에 추가한다. isProcessing() 메서드의 반환값이 'false'일 때만 이 메서드를 사용할 수 있다\n\t * 이 메소드는 isProcessing()의 반환값이 false일 경우에만 사용 가능하다.\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>추가할 카드 엘리먼트의 배열</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>추가할 카드 엘리먼트에 설정할 그룹 키. 생략하면 값이 자동으로 생성된다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.append(\""&lt;div class='item'&gt;test1&lt;/div&gt;&lt;div class='item'&gt;test2&lt;/div&gt;\"");\n\t * infinitegrid.append([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]);\n\t * infinitegrid.append([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.append(jQuery([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]));\n\t */\n\tappend(elements, groupKey) {\n\t\tthis._manager && this._insert({\n\t\t\telements,\n\t\t\tisAppend: APPEND,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Adds a card element at the top of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko 카드 엘리먼트를 레이아웃의 위에 추가한다. isProcessing() 메서드의 반환값이 'false'일 때만 이 메서드를 사용할 수 있다\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>추가할 카드 엘리먼트 배열</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>추가할 카드 엘리먼트에 설정할 그룹 키. 생략하면 값이 자동으로 생성된다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.prepend(\""&lt;div class='item'&gt;test1&lt;/div&gt;&lt;div class='item'&gt;test2&lt;/div&gt;\"");\n\t * infinitegrid.prepend([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]);\n\t * infinitegrid.prepend([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.prepend(jQuery([\""&lt;div class='item'&gt;test1&lt;/div&gt;\"", \""&lt;div class='item'&gt;test2&lt;/div&gt;\""]));\n\t */\n\tprepend(elements, groupKey) {\n\t\tthis._manager && this._insert({\n\t\t\telements,\n\t\t\tisAppend: PREPEND,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Layout class to use.\n\t * @ko 사용할 Layout 클래스를 지정한다.\n\t * @param {Class|Object} LayoutKlass The Layout class to use or an instance of a layout moudle<ko>사용할 Layout 클래스 또는 레이아웃 모듈의 인스턴스</ko>\n\t * @param {Object} options Options to apply to the Layout.<ko>Layout에 적용할 옵션</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * infinitegrid.setLayout(eg.InfiniteGrid.GridLayout, {\n\t *  margin: 10,\n\t *  align: \""start\""\n\t * });\n   * infinitegrid.setLayout(eg.InfiniteGrid.JustifiedLayout, {\n\t *  margin: 10,\n\t *  minSize: 100,\n\t *  maxSize: 200\n\t * });\n   * infinitegrid.setLayout(eg.InfiniteGrid.SquareLayout, {\n\t *  margin: 10,\n\t *  column: 2\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.FrameLayout, {\n\t *  margin: 10,\n\t *  frame: [\n\t *   [1, 2],\n   *   [4, 3],\n\t *  ]\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.PackingLayout, {\n\t *  margin: 10,\n\t *  aspectRatio: 1.5\n\t * });\n\t * var layout = new eg.InfiniteGrid.GridLayout({\n\t * \tmargin: 10,\n\t *\talign: \""start\""\n\t * });\n\t * infinitegrid.setLayout(layout);\n\t */\n\tsetLayout(LayoutKlass, options = {}) {\n\t\tconst {isEqualSize, isConstantSize, attributePrefix, horizontal} = this.options;\n\n\t\tif (!this._manager) {\n\t\t\tthis._manager = new LayoutMananger(this._items, this._renderer, {\n\t\t\t\tattributePrefix,\n\t\t\t\tisEqualSize,\n\t\t\t\tisConstantSize,\n\t\t\t});\n\t\t}\n\t\tif (typeof LayoutKlass === \""function\"") {\n\t\t\tthis._manager.setLayout(new LayoutKlass(Object.assign(options, {\n\t\t\t\thorizontal,\n\t\t\t})));\n\t\t} else {\n\t\t\tLayoutKlass.options.horizontal = horizontal;\n\t\t\tthis._manager.setLayout(LayoutKlass);\n\t\t}\n\t\tthis._renderer.resize();\n\t\tthis._setSize(this._renderer.getViewportSize());\n\t\treturn this;\n\t}\n\t_setSize(size) {\n\t\tthis._infinite.setSize(this._renderer.getViewSize());\n\t\tthis._manager.setSize(size);\n\t}\n\t/**\n\t * Returns the layouted items.\n\t * @ko 레이아웃된 아이템들을 반환한다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached items. <ko>캐싱된 아이템을 포함할지 여부를 나타낸다.</ko>\n\t * @returns {Array} List of items <ko>아이템의 목록</ko>\n\t */\n\tgetItems(includeCached = false) {\n\t\treturn includeCached ? this._items.pluck(\""items\"") : this._infinite.getVisibleItems();\n\t}\n\t_fitItems(base, margin = 0) {\n\t\tbase > 0 && this._watcher.scrollBy(-base);\n\t\tthis._items.fit(base, this.options.horizontal);\n\t\tDOMRenderer.renderItems(this.getItems());\n\t\tthis._setContainerSize(this._getEdgeValue(\""end\"") || margin);\n\t\tbase < 0 && this._watcher.scrollBy(-base);\n\t}\n\t// called by visible\n\t_fit(useFit = this.options.useFit) {\n\t\tlet base = this._getEdgeValue(\""start\"");\n\t\tconst margin = (this._getLoadingStatus() === LOADING_PREPEND && this._status.loadingSize) || 0;\n\t\tconst {isConstantSize, isEqualSize, useRecycle} = this.options;\n\n\t\tif (!useRecycle || !useFit || isConstantSize || isEqualSize) {\n\t\t\tif (base < margin) {\n\t\t\t\tthis._fitItems(base - margin, margin);\n\t\t\t}\n\t\t\tbase = 0;\n\t\t} else if (base !== 0 || margin) {\n\t\t\tthis._fitItems(base - margin, margin);\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t\tthis._isLoading() && this._renderLoading();\n\t\treturn base;\n\t}\n\t_getEdgeValue(cursor) {\n\t\treturn this._infinite.getEdgeValue(cursor);\n\t}\n\t/**\n\t * Rearranges a layout.\n\t * @ko 레이아웃을 다시 배치한다.\n\t * @param {Boolean} [isRelayout=true] Indicates whether a card element is being relayouted <ko>카드 엘리먼트 재배치 여부</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tlayout(isRelayout = true) {\n\t\tif (!this._manager) {\n\t\t\treturn this;\n\t\t}\n\t\tconst renderer = this._renderer;\n\t\tconst itemManager = this._items;\n\t\tconst infinite = this._infinite;\n\t\tconst isResize = renderer.resize();\n\t\tconst items = this.getItems();\n\t\tconst {isEqualSize, isConstantSize, transitionDuration} = this.options;\n\t\tconst isLayoutAll = isRelayout && (isEqualSize || isConstantSize);\n\t\tconst size = itemManager.size();\n\n\t\tif (isRelayout) {\n\t\t\tthis._watcher.resize();\n\t\t\tif (isResize) {\n\t\t\t\tthis._setSize(renderer.getViewportSize());\n\t\t\t}\n\t\t}\n\t\t// check childElement\n\t\tif (!size || !items.length) {\n\t\t\tconst children = toArray(renderer.container.children);\n\n\t\t\tif (children.length) {\n\t\t\t\tthis._insert({\n\t\t\t\t\telements: children,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisChildren: true,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._requestAppend({});\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\t// layout datas\n\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\tconst endCursor = infinite.getCursor(\""end\"");\n\t\tconst data = isLayoutAll || !(isRelayout && isResize) ? itemManager.get() :\n\t\t\titemManager.get(startCursor, endCursor);\n\n\t\t// LayoutManger interface\n\t\tthis._manager.layout(isRelayout, data, isResize ? items : []);\n\t\tif (isLayoutAll) {\n\t\t\tthis._fit();\n\t\t} else if (isRelayout && isResize) {\n\t\t\titemManager.clearOutlines(startCursor, endCursor);\n\t\t}\n\t\tDOMRenderer.renderItems(items, transitionDuration);\n\t\tisRelayout && this._watcher.setScrollPos();\n\t\tthis._onLayoutComplete({\n\t\t\titems,\n\t\t\tisAppend: APPEND,\n\t\t\tfromCache: CACHE,\n\t\t\tisTrusted: NO_TRUSTED,\n\t\t\tuseRecycle: false,\n\t\t\tisLayout: true,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Removes a item element on a grid layout.\n\t * @ko 그리드 레이아웃의 카드 엘리먼트를 삭제한다.\n\t * @param {HTMLElement} item element to be removed <ko>삭제될 아이템 엘리먼트</ko>\n\t * @return {Object}  Removed item element <ko>삭제된 아이템 엘리먼트 정보</ko>\n\t */\n\tremove(element, isLayout = true) {\n\t\tif (element) {\n\t\t\tconst items = this._infinite.remove(element);\n\n\t\t\titems && DOMRenderer.removeElement(element);\n\t\t\tisLayout && this.layout(false);\n\t\t\treturn items;\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t * Returns the list of group keys which belongs to card elements currently being maintained. You can use the append() or prepend() method to configure group keys so that multiple card elements can be managed at once. If you do not use these methods to configure group keys, groupkey is automatically generated.\n\t * @ko 현재 유지하고 있는 카드 엘리먼트의 그룹 키 목록을 반환한다. 여러 개의 카드 엘리먼트를 묶어서 관리할 수 있도록 append() 메서드나 prepend() 메서드에서 그룹 키를 지정할 수 있다. append() 메서드나 prepend() 메서드에서 그룹 키를 지정하지 않았다면 자동으로 그룹키가 생성된다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached groups. <ko>캐싱된 그룹을 포함할지 여부를 나타낸다.</ko>\n\t * @return {Array} List of group keys <ko>그룹 키의 목록</ko>\n\t */\n\tgetGroupKeys(includeCached) {\n\t\tconst data = includeCached ?\n\t\t\tthis._items.get() : this._infinite.getVisibleData();\n\n\t\treturn data.map(v => v.groupKey);\n\t}\n\t/**\n\t * Returns the current state of a module such as location information. You can use the setStatus() method to restore the information returned through a call to this method.\n\t * @ko 카드의 위치 정보 등 모듈의 현재 상태 정보를 반환한다. 이 메서드가 반환한 정보를 저장해 두었다가 setStatus() 메서드로 복원할 수 있다\n\t * @return {Object} State object of the eg.InfiniteGrid module<ko>eg.InfiniteGrid 모듈의 상태 객체</ko>\n\t */\n\tgetStatus(startKey, endKey) {\n\t\treturn {\n\t\t\t_status: Object.assign({}, this._status),\n\t\t\t_items: this._items.getStatus(startKey, endKey),\n\t\t\t_renderer: this._renderer.getStatus(),\n\t\t\t_watcher: this._watcher.getStatus(),\n\t\t\t_infinite: this._infinite.getStatus(startKey, endKey),\n\t\t};\n\t}\n\t/**\n\t * Sets the state of the eg.InfiniteGrid module with the information returned through a call to the getStatue() method.\n\t * @ko getStatue() 메서드가 저장한 정보로 eg.InfiniteGrid 모듈의 상태를 설정한다.\n\t * @param {Object} status State object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid 모듈의 상태 객체</ko>\n\t * @param {boolean} [applyScrollPos=true] Checks whether to scroll<ko>스크롤의 위치를 복원할지 결정한다.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tsetStatus(status, applyScrollPos = true) {\n\t\tif (!status) {\n\t\t\treturn this;\n\t\t}\n\t\tconst {_status, _renderer, _items, _watcher, _infinite} = status;\n\n\t\tif (!_status ||\n\t\t\t!_renderer || !_items || !_watcher || !_infinite) {\n\t\t\treturn this;\n\t\t}\n\t\tconst items = this._items;\n\t\tconst renderer = this._renderer;\n\t\tconst watcher = this._watcher;\n\t\tconst infinite = this._infinite;\n\n\t\twatcher.detachEvent();\n\t\tObject.assign(this._status, _status);\n\t\tthis._status.processingStatus = IDLE;\n\t\titems.setStatus(_items);\n\t\trenderer.setStatus(_renderer);\n\t\tinfinite.setStatus(_infinite);\n\n\t\tconst visibleItems = this.getItems();\n\t\tconst length = visibleItems.length;\n\n\t\trenderer.createAndInsert(visibleItems, true);\n\n\t\tconst isReLayout = renderer.isNeededResize();\n\n\t\twatcher.setStatus(_watcher, applyScrollPos);\n\t\twatcher.attachEvent();\n\n\t\tconst {isConstantSize, isEqualSize} = this.options;\n\n\t\tif (!length) {\n\t\t\tthis._requestAppend({cache: visibleItems.slice(0, 1)});\n\t\t} else if (isReLayout) {\n\t\t\trenderer.resize();\n\t\t\tthis._setSize(renderer.getViewportSize());\n\n\t\t\tif (isConstantSize) {\n\t\t\t\tthis.layout(true);\n\t\t\t} else {\n\t\t\t\tthis._items.clearOutlines();\n\t\t\t\tthis._postLayout({\n\t\t\t\t\tfromCache: true,\n\t\t\t\t\tgroups: isEqualSize ? items.get() : infinite.getVisibleData(),\n\t\t\t\t\titems: visibleItems,\n\t\t\t\t\tnewItems: visibleItems,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisTrusted: false,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis.layout(false);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Clears added card elements and data.\n\t * @ko 추가된 카드 엘리먼트와 데이터를 모두 지운다.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tclear() {\n\t\tthis._items.clear();\n\t\tthis._renderer.clear();\n\t\tthis._infinite.clear();\n\t\tthis._reset();\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Loading Bar to use for append or prepend items.\n\t * @ko 아이템을 append 또는 prepend 하기 위해 사용할 로딩 바를 지정한다.\n\t * @param {String|Object} [userLoadingBar={}] The loading bar HTML markup or element or element selector <ko> 로딩 바 HTML 또는 element 또는 selector </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tsetLoadingBar(userLoadingBar = {}) {\n\t\tconst loadingBarObj = typeof userLoadingBar === \""object\"" ? userLoadingBar : {\n\t\t\t\""append\"": userLoadingBar,\n\t\t\t\""prepend\"": userLoadingBar,\n\t\t};\n\n\t\tthis._status.loadingSize = 0;\n\t\tthis._status.loadingStyle = {};\n\t\tconst loadingBar = this._loadingBar;\n\n\t\tfor (const type in loadingBarObj) {\n\t\t\tloadingBar[type] = $(loadingBarObj[type]);\n\t\t\tloadingBar[type].className += ` ${IGNORE_CLASSNAME}`;\n\t\t}\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t_appendLoadingBar() {\n\t\tconst loadingBar = this._loadingBar;\n\t\tconst container = this._renderer.container;\n\n\t\tfor (const type in loadingBar) {\n\t\t\tcontainer.appendChild(loadingBar[type]);\n\t\t}\n\t}\n\t/**\n\t * Checks whether a card element or data is being added.\n\t * @ko 카드 엘리먼트 추가 또는 데이터 로딩이 진행 중인지 확인한다\n\t * @return {Boolean} Indicates whether a card element or data is being added <ko>카드 엘리먼트 추가 또는 데이터 로딩 진행 중 여부</ko>\n\t */\n\tisProcessing() {\n\t\treturn this._isProcessing() || this._isLoading();\n\t}\n\t_isProcessing() {\n\t\treturn (this._status.processingStatus & PROCESSING) > 0;\n\t}\n\t_isLoading() {\n\t\treturn this._getLoadingStatus() > 0;\n\t}\n\t_getLoadingStatus() {\n\t\treturn this._status.processingStatus & (LOADING_APPEND | LOADING_PREPEND);\n\t}\n\t_process(status, isAdd = true) {\n\t\tif (isAdd) {\n\t\t\tthis._status.processingStatus |= status;\n\t\t} else {\n\t\t\tthis._status.processingStatus -= this._status.processingStatus & status;\n\t\t}\n\t}\n\t_insert({\n\t\telements,\n\t\tisAppend,\n\t\tisChildren,\n\t\tgroupKey = new Date().getTime() + Math.floor(Math.random() * 1000),\n\t}) {\n\t\tif (this._isProcessing() || elements.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst items = ItemManager.from(elements, this.options.itemSelector, {\n\t\t\tisAppend,\n\t\t\tgroupKey,\n\t\t\toutlines: {start: [], end: []},\n\t\t});\n\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = {\n\t\t\tgroupKey,\n\t\t\titems,\n\t\t\toutlines: {start: [], end: []},\n\t\t};\n\t\tconst method = isAppend ? \""append\"" : \""prepend\"";\n\n\t\tthis._items[method](group);\n\n\t\tif (!isAppend) {\n\t\t\tconst infinite = this._infinite;\n\t\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\t\tconst endCursor = infinite.getCursor(\""end\"");\n\n\t\t\tinfinite.setCursor(\""start\"", startCursor + 1);\n\t\t\tinfinite.setCursor(\""end\"", endCursor + 1);\n\t\t}\n\t\tthis._postLayout({\n\t\t\tfromCache: NO_CACHE,\n\t\t\tgroups: [group],\n\t\t\titems,\n\t\t\tnewItems: items,\n\t\t\tisAppend,\n\t\t\tisChildren,\n\t\t\tisTrusted: NO_TRUSTED,\n\t\t});\n\t}\n\t// add items, and remove items for recycling\n\t_recycle({start, end}) {\n\t\tif (!this.options.useRecycle) {\n\t\t\treturn;\n\t\t}\n\t\tDOMRenderer.removeItems(this._items.pluck(\""items\"", start, end));\n\t}\n\t/**\n\t * Returns the element of loading bar.\n\t * @ko 로딩 바의 element를 반환한다.\n\t * @param {Boolean} [isAppend=currentLoadingBar|true] Checks whether the card element is added to the append () method. <ko>카드 엘리먼트가 append() 메서드로 추가 할 것인지 확인한다.</ko>\n\t * @return {Element} The element of loading bar. <ko>로딩 바의 element</ko>\n\t */\n\tgetLoadingBar(isAppend = this._getLoadingStatus() !== LOADING_PREPEND) {\n\t\treturn this._loadingBar[isAppend ? \""append\"" : \""prepend\""];\n\t}\n\t/**\n\t * Start loading for append/prepend during loading data.\n\t * @ko 데이터가 로딩되는 동안 append/prepend하길 위해 로딩을 시작한다.\n\t * @param {Boolean} [isAppend=true] Checks whether the card element is added to the append () method. <ko>카드 엘리먼트가 append() 메서드로 추가 할 것인지 확인한다.</ko>\n\t * @param {Object} [userStyle = {display: \""block\""}] custom style to apply to this loading bar for start. <ko> 로딩 시작을 위한 로딩 바에 적용할 커스텀 스타일 </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tstartLoading(isAppend, userStyle = {display: \""block\""}) {\n\t\tif (this._isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst type = isAppend ? \""append\"" : \""prepend\"";\n\n\t\tthis._process(isAppend ? LOADING_APPEND : LOADING_PREPEND);\n\t\tif (!this._loadingBar[type]) {\n\t\t\treturn this;\n\t\t}\n\t\tthis._renderLoading(userStyle);\n\t\tthis._status.loadingStyle = userStyle;\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis._setContainerSize(this._getEdgeValue(\""end\"") + this._status.loadingSize);\n\t\t}\n\t\treturn this;\n\t}\n\t_renderLoading(userStyle = this._status.loadingStyle) {\n\t\tif (!this._isLoading()) {\n\t\t\treturn;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst el = this._loadingBar[isAppend ? \""append\"" : \""prepend\""];\n\n\t\tif (!el) {\n\t\t\treturn;\n\t\t}\n\t\tconst style = Object.assign({\n\t\t\tposition: \""absolute\"",\n\t\t}, userStyle);\n\n\t\tfor (const property in style) {\n\t\t\tel.style[property] = style[property];\n\t\t}\n\t\tthis._status.loadingSize = this.options.horizontal ? outerWidth(el) : outerHeight(el);\n\t\tconst posName = this.options.horizontal ? \""left\"" : \""top\"";\n\n\t\tif (!(posName in style)) {\n\t\t\tconst pos = isAppend ? this._getEdgeValue(\""end\"") : this._getEdgeValue(\""start\"") - this._status.loadingSize;\n\n\t\t\tel.style[posName] = `${pos}px`;\n\t\t}\n\t}\n\t/**\n\t * End loading after startLoading() for append/prepend\n\t * @ko  append/prepend하길 위해 startLoading() 호출해선 걸었던 로딩을 끝낸다.\n\t * @param {Object} [userStyle = {display: \""none\""}] custom style to apply to this loading bar for end <ko> 로딩 시작을 위한 로딩 바에 적용할 커스텀 스타일 </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tendLoading(userStyle = {display: \""none\""}) {\n\t\tif (!this._isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst type = isAppend ? \""append\"" : \""prepend\"";\n\t\tconst el = this._loadingBar[type];\n\t\tconst status = this._status;\n\t\tconst size = status.loadingSize;\n\n\t\tthis._process(LOADING_APPEND | LOADING_PREPEND, false);\n\t\tstatus.loadingSize = 0;\n\t\tstatus.loadingStyle = {};\n\t\tif (el) {\n\t\t\tconst style = Object.assign({\n\t\t\t\t[this.options.horizontal ? \""left\"" : \""top\""]: `${-size}px`,\n\t\t\t}, userStyle);\n\n\t\t\tfor (const property in style) {\n\t\t\t\tel.style[property] = style[property];\n\t\t\t}\n\t\t\tif (!isAppend) {\n\t\t\t\tthis._fitItems(size);\n\t\t\t} else {\n\t\t\t\tthis._setContainerSize(this._getEdgeValue(\""end\""));\n\t\t\t}\n\t\t}\n\t\tif (this.options.useRecycle && !this.isProcessing()) {\n\t\t\tthis._infinite.recycle(this._watcher.getScrollPos(), isAppend);\n\t\t}\n\t\treturn this;\n\t}\n\t_setContainerSize(size) {\n\t\tthis._renderer.setContainerSize(Math.max(this._items.getMaxEdgeValue(), size));\n\t}\n\t/**\n\t * Retrieves the item via index or the element.\n\t * @ko index 또는 element를 통해 아이템을 가져온다.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> item에 해당하는 element 또는 해당 item이 있는 group의 index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 사용할 경우 해당 group에 있는 Item의 index </ko>\n\t * @return {object} The item containing the content, size and position,etc<ko>content, size, position 등이 담겨있는 item 정보</ko>\n\t * @example\n\n\t ig.getItem(0, 0);\n\t ig.getItem(element);\n\n\t {\n\t\tel: HTMLElement,\n\t\tcontent: \""<div>...</div>\"",\n\t\tsize: {width: ..., height: ...},\n\t\trect: {top: ..., left: ..., width: ..., height: ...},\n\t }\n\t */\n\tgetItem(groupIndex = 0, itemIndex) {\n\t\tif (itemIndex == null && typeof groupIndex === \""object\"") {\n\t\t\tconst items = this.getItems();\n\t\t\tconst length = items.length;\n\n\t\t\tfor (let i = 0; i < length; ++i) {\n\t\t\t\tif (items[i].el === groupIndex) {\n\t\t\t\t\treturn items[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tconst group = this._items.getData(groupIndex);\n\n\t\t\treturn group && group.items[itemIndex || 0];\n\t\t}\n\t}\n\t_updateItem(item) {\n\t\tif (item && item.el) {\n\t\t\titem.content = item.el.outerHTML;\n\n\t\t\t!this.options.isEqualSize && resetSize(item);\n\t\t\tthis._renderer.updateSize([item]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t * Updates the item via index or the element.\n\t * @ko index 또는 element를 통해 아이템을 업데이트한다.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> item에 해당하는 element 또는 해당 item이 있는 group의 index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 사용할 경우 해당 group에 있는 Item의 index </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\telement.innerHTML = \""2\"";\n\telement.style.height = \""400px\"";\n\tig.updateItem(element);\n\tig.updateItem(0, 0);\n\t */\n\tupdateItem(groupIndex, itemIndex) {\n\t\tconst item = this.getItem(groupIndex, itemIndex);\n\n\t\tthis._updateItem(item) && this.layout(false);\n\n\t\treturn this;\n\t}\n\t/**\n\t * Update the currently displayed items.\n\t * 현재보여주는 아이템들을 업데이트한다.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\telement.innerHTML = \""2\"";\n\telement.style.height = \""400px\"";\n\n\telement2.innerHTML = \""2\"";\n\telement2.style.height = \""400px\"";\n\n\tig.updateItems();\n\t */\n\tupdateItems() {\n\t\tthis.getItems().forEach(item => {\n\t\t\tthis._updateItem(item);\n\t\t});\n\t\tthis.layout(false);\n\t\treturn this;\n\t}\n\t/**\n\t * Move to some group or item position.\n\t * @ko 해당하는 그룹 또는 아이템의 위치로 이동한다.\n\t * @param {Number} [index] group's index <ko> 그룹의 index</ko>\n\t * @param {Number} [itemIndex=-1] item's index <ko> 그룹의 index</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t */\n\tmoveTo(index, itemIndex = 0) {\n\t\tif (this.isProcessing()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst data = this._items.getData(index);\n\n\t\tif (!data) {\n\t\t\treturn this;\n\t\t}\n\t\tconst infinite = this._infinite;\n\t\tconst outlines = data.outlines;\n\t\tconst items = data.items;\n\t\tconst item = items[itemIndex];\n\t\tconst isResize = outlines.start && (outlines.start.length === 0);\n\t\tconst startCursor = infinite.getCursor(\""start\"");\n\t\tconst endCursor = infinite.getCursor(\""end\"");\n\t\tconst isInCursor = startCursor <= index && index <= endCursor;\n\t\tconst {useRecycle, horizontal} = this.options;\n\n\t\tif (isInCursor || !useRecycle || !isResize) {\n\t\t\tlet pos = item ? item.rect[horizontal ? \""left\"" : \""top\""] : Math.max(...outlines.start);\n\t\t\tconst fit = Math.min(...outlines.start);\n\n\t\t\tif (fit < 0) {\n\t\t\t\t// base < 0\n\t\t\t\tthis._fitItems(fit, 0);\n\t\t\t\tpos -= fit;\n\t\t\t}\n\t\t\tconst isAppend = index > startCursor;\n\n\t\t\tif (isInCursor || isAppend) {\n\t\t\t\tthis._scrollTo(pos);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis._postLayout({\n\t\t\t\tfromCache: true,\n\t\t\t\tgroups: [data],\n\t\t\t\titems,\n\t\t\t\tnewItems: [],\n\t\t\t\tisAppend,\n\t\t\t\tisTrusted: false,\n\t\t\t\tmoveCache: true,\n\t\t\t\tmoveItem: itemIndex,\n\t\t\t});\n\t\t\treturn this;\n\t\t} else {\n\t\t\tconst isAppend = index > endCursor || index < startCursor - 1;\n\n\t\t\tthis._postCache({\n\t\t\t\tisAppend,\n\t\t\t\tcache: [data],\n\t\t\t\tisTrusted: false,\n\t\t\t\tmoveItem: itemIndex,\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\t_setScrollPos(pos) {\n\t\tthis._watcher.setScrollPos(this._watcher.getContainerOffset() + pos);\n\t}\n\t_scrollTo(pos) {\n\t\tthis._watcher.scrollTo(this._watcher.getContainerOffset() + pos);\n\t}\n\t_onImageError(e) {\n\t\t/**\n\t\t * This event is fired when an error occurs in the image.\n\t\t * @ko 이미지 로드에 에러가 날 때 발생하는 이벤트.\n\t\t * @event eg.InfiniteGrid#imageError\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Element} param.target Appending card's image element.<ko>추가 되는 카드의 이미지 엘리먼트</ko>\n\t\t * @param {Element} param.elememt The item's element with error images.<ko>에러난 이미지를 가지고 있는 아이템의 엘리먼트</ko>\n\t\t * @param {Object} param.items The items being added.<ko>화면에 추가중인 아이템들</ko>\n\t\t * @param {Object} param.item The item with error images.<ko>에러난 이미지를 가지고 있는 아이템</ko>\n\t\t * @param {Number} param.itemIndex The item's index with error images.<ko>에러난 이미지를 가지고 있는 아이템의 인덱스</ko>\n\t\t * @param {Function} param.remove In the imageError event, this method expects to remove the error image.<ko>이미지 에러 이벤트에서 이 메서드는 에러난 이미지를 삭제한다.</ko>\n\t\t * @param {Function} param.removeItem In the imageError event, this method expects to remove the item with the error image.<ko>이미지 에러 이벤트에서 이 메서드는 에러난 이미지를 가지고 있는 아이템을 삭제한다.</ko>\n\t\t * @param {Function} param.replace In the imageError event, this method expects to replace the error image's source or element.<ko>이미지 에러 이벤트에서 이 메서드는 에러난 이미지의 주소 또는 엘리먼트를 교체한다.</ko>\n\t\t * @param {Function} param.replaceItem In the imageError event, this method expects to replace the item's contents with the error image.<ko>이미지 에러 이벤트에서 이 메서드는 에러난 이미지를 가지고 있는 아이템의 내용을 교체한다.</ko>\n\t\t * @example\nig.on(\""imageError\"", e => {\n\te.remove();\n\te.removeItem();\n\te.replace(\""http://...jpg\"");\n\te.replace(imageElement);\n\te.replaceItem(\""item html\"");\n});\n\t\t */\n\t\tthis.trigger(\""imageError\"", Object.assign(e, {element: e.item.el}));\n\t}\n\t_postCache({cache, isAppend, isTrusted = true, moveItem = -1}) {\n\t\tconst {isConstantSize} = this.options;\n\t\tconst items = ItemManager.pluck(cache, \""items\"");\n\t\tlet fromCache = true;\n\t\tconst newItems = items.filter(item => {\n\t\t\tif (!item.orgSize) {\n\t\t\t\tfromCache = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !isConstantSize && item.rect.top < DUMMY_POSITION / 10;\n\t\t});\n\n\t\tthis._postLayout({\n\t\t\tfromCache,\n\t\t\tgroups: cache,\n\t\t\titems,\n\t\t\tnewItems,\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t\tmoveItem,\n\t\t});\n\t}\n\t_postLayout({\n\t\tfromCache,\n\t\tgroups,\n\t\titems = ItemManager.pluck(groups, \""items\""),\n\t\tnewItems,\n\t\tisAppend,\n\t\tisChildren,\n\t\tisTrusted,\n\t\tmoveCache,\n\t\tmoveItem = -2}) {\n\t\tthis._process(PROCESSING);\n\t\tconst method = isAppend ? \""append\"" : \""prepend\"";\n\t\tconst itemManager = this._items;\n\t\tconst horizontal = this.options.horizontal;\n\n\t\t// If container has children, it does not render first.\n\t\tif (!isChildren) {\n\t\t\tDOMRenderer.createElements(items);\n\t\t\tthis._renderer[method](items);\n\t\t}\n\t\tthis._manager[method]({\n\t\t\tgroups,\n\t\t\titems: newItems,\n\t\t\tisAppend,\n\t\t}, {\n\t\t\tcomplete: () => {\n\t\t\t\tconst infinite = this._infinite;\n\t\t\t\tconst startCursor = Math.max(infinite.getCursor(\""start\""), 0);\n\t\t\t\tconst endCursor = Math.max(infinite.getCursor(\""end\""), 0);\n\t\t\t\tlet requestStartCursor = itemManager.indexOf(groups[0].groupKey);\n\t\t\t\tlet requestEndCursor = itemManager.indexOf(groups[groups.length - 1].groupKey);\n\t\t\t\tlet isInCursor = true;\n\n\t\t\t\tif (requestStartCursor > endCursor + 1 || requestEndCursor < startCursor - 1) {\n\t\t\t\t\tisInCursor = false;\n\t\t\t\t}\n\t\t\t\tif (isInCursor) {\n\t\t\t\t\tif (isAppend) {\n\t\t\t\t\t\trequestStartCursor = startCursor;\n\t\t\t\t\t\trequestEndCursor = Math.max(endCursor, requestEndCursor);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trequestStartCursor = Math.max(Math.min(startCursor, requestStartCursor), 0);\n\t\t\t\t\t\trequestEndCursor = endCursor;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t!isInCursor && this._recycle({start: startCursor, end: endCursor});\n\t\t\t\tinfinite.setCursor(\""start\"", requestStartCursor);\n\t\t\t\tinfinite.setCursor(\""end\"", requestEndCursor);\n\n\t\t\t\tif (moveItem > -1) {\n\t\t\t\t\tconst pos = items[moveItem].rect[horizontal ? \""left\"" : \""top\""];\n\n\t\t\t\t\tif (!isInCursor && !moveCache) {\n\t\t\t\t\t\titemManager.clearOutlines(requestStartCursor, requestEndCursor);\n\t\t\t\t\t}\n\t\t\t\t\tthis._scrollTo(pos);\n\t\t\t\t\tthis._setScrollPos(pos);\n\t\t\t\t}\n\t\t\t\tthis._onLayoutComplete({groups, items, isAppend, fromCache, isTrusted, useRecycle: false});\n\t\t\t},\n\t\t\terror: e => this._onImageError(e),\n\t\t\tend: ({remove, layout}) => {\n\t\t\t\tremove.forEach(el => this.remove(el, false));\n\t\t\t\tif (layout) {\n\t\t\t\t\tthis.layout(false);\n\t\t\t\t} else if (!this.isProcessing() && this.options.useRecycle) {\n\t\t\t\t\tconst watcher = this._watcher;\n\t\t\t\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\treturn this;\n\t}\n\t// called by visible\n\t_requestAppend({cache}) {\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({cache, isAppend: APPEND});\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the bottom or right of a layout because there is no card to be displayed on screen when a user scrolls near bottom or right.\n\t\t\t * @ko 카드 엘리먼트가 레이아웃의 아래나 오른쪽에 추가돼야 할 때 발생하는 이벤트. 사용자가 아래나 오른쪽으로 스크롤해서 화면에 표시될 카드가 없을 때 발생한다\n\t\t\t * @event eg.InfiniteGrid#append\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>화면에 보여지는 마지막 그룹의 그룹키</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for append loading data. <ko> 뒷쪽에 추가되는 데이터 로딩을 시작한다. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩을 시작할 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t */\n\t\t\tthis.trigger(\""append\"", {\n\t\t\t\tisTrusted: TRUSTED,\n\t\t\t\tgroupKey: this.getGroupKeys().pop() || \""\"",\n\t\t\t\tstartLoading: userStyle => {\n\t\t\t\t\tthis.startLoading(true, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: userStyle => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\t// called by visible\n\t_requestPrepend({cache}) {\n\t\tthis._fit(this.options.useFit || !cache.length);\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({cache, isAppend: PREPEND});\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the top or left of a layout because there is no card to be displayed on screen when a user scrolls near top or left.\n\t\t\t * @ko 카드가 레이아웃의 위나 왼쪽에 추가돼야 할 때 발생하는 이벤트. 사용자가 위나 왼쪽으로 스크롤해서 화면에 표시될 카드가 없을 때 발생한다.\n\t\t\t * @event eg.InfiniteGrid#prepend\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>화면에 보여지는 첫번째 그룹의 그룹키</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for prepend loading data. <ko> 앞쪽에 추가되는 데이터 로딩을 시작한다. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩을 시작할 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t\t */\n\t\t\tthis.trigger(\""prepend\"", {\n\t\t\t\tisTrusted: TRUSTED,\n\t\t\t\tgroupKey: this.getGroupKeys().shift(),\n\t\t\t\tstartLoading: userStyle => {\n\t\t\t\t\tthis.startLoading(false, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: userStyle => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\t_onResize() {\n\t\tthis.layout(true);\n\t}\n\t_onCheck({isForward, scrollPos, horizontal, orgScrollPos}) {\n\t\t/**\n\t\t * This event is fired when the user scrolls.\n\t\t * @ko 사용자가 스크롤 할 경우 발생하는 이벤트.\n\t\t * @event eg.InfiniteGrid#change\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Boolean} param.isForward Indicates whether the scroll progression direction is forward or backword. <ko>스크롤 진행방향이 앞쪽으로 진행하는 지, 뒤쪽으로 진행하는지를 나타낸다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테이너 엘리먼트 기준의 현재 스크롤 위치값</ko>\n\t\t * @param {Boolean} param.orgScrollPos Current position of the scroll <ko>현재 스크롤 위치값</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t * @param {Boolean} options.horizontal Direction of the scroll movement (true: horizontal, false: vertical) <ko>스크롤 이동 방향 (true 가로방향, false 세로방향</ko>\n\t\t */\n\t\tthis.trigger(\""change\"", {\n\t\t\tisForward,\n\t\t\thorizontal,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t});\n\t\tthis._infinite.scroll(scrollPos);\n\t}\n\t_onLayoutComplete({items, isAppend, isTrusted = false,\n\t\tuseRecycle = this.options.useRecycle,\n\t\tfromCache = false,\n\t\tisLayout = false,\n\t}) {\n\t\tconst viewSize = this._renderer.getViewSize();\n\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis._isLoading() && this._renderLoading();\n\t\t}\n\n\t\tconst watcher = this._watcher;\n\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t// recycle after _fit beacause prepend and append are occured simultaneously by scroll.\n\t\tif (!isLayout && useRecycle && !this._isLoading()) {\n\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t}\n\n\t\tconst size = this._getEdgeValue(\""end\"");\n\n\t\tif (isAppend) {\n\t\t\tthis._setContainerSize(size + this._status.loadingSize || 0);\n\t\t\tif (scrollPos > 0) {\n\t\t\t\t!IS_IOS && this._scrollTo(scrollPos);\n\t\t\t}\n\t\t}\n\t\t!isLayout && this._process(PROCESSING, false);\n\n\t\t/**\n\t\t * This event is fired when layout is successfully arranged through a call to the append(), prepend(), or layout() method.\n\t\t * @ko 레이아웃 배치가 완료됐을 때 발생하는 이벤트. append() 메서드나 prepend() 메서드, layout() 메서드 호출 후 카드의 배치가 완료됐을 때 발생한다\n\t\t * @event eg.InfiniteGrid#layoutComplete\n\t\t *\n\t\t * @param {Object} param The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n\t\t * @param {Array} param.target Rearranged card elements<ko>재배치된 카드 엘리먼트들</ko>\n\t\t * @param {Boolean} param.fromCache Check whether these items are cache or not <ko>해당 아이템들이 캐시인지 아닌지 확인한다.</ko>\n\t\t * @param {Boolean} param.isLayout Returns true if this is an event called by resize event or layout method. Returns false if this is an event called by adding an item. <ko>해당 이벤트가 리사이즈 이벤트 또는 layout() 메서드를 통해 호출됐으면 true, 아이템 추가로 호출됐으면 false를 반환한다.</ko>\n\t\t * @param {Boolean} param.isAppend Checks whether the append() method is used to add a card element. It returns true even though the layoutComplete event is fired after the layout() method is called. <ko>카드 엘리먼트가 append() 메서드로 추가됐는지 확인한다. layout() 메서드가 호출된 후 layoutComplete 이벤트가 발생해도 'true'를 반환한다.</ko>\n\t\t * @param {Boolean} param.isScroll Checks whether scrolling has occurred after the append(), prepend(), ..., etc method is called <ko>append, prend 등 호출 후 스크롤이 생겼는지 확인한다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테이너 엘리먼트 기준의 현재 스크롤 위치값</ko>\n\t\t * @param {Number} param.orgScrollPos Current position of the scroll <ko>현재 스크롤 위치값</ko>\n\t\t * @param {Number} param.size The size of container element <ko>컨테이너 엘리먼트의 크기</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.</ko>\n\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>데이터 로딩을 위해 append/prepend startLoading() 호출 이후 로딩을 끝낸다.</ko>\n\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> 로딩이 끝날 때 로딩 바에 적용될 사용자 스타일 </ko>\n\t\t */\n\t\tthis.trigger(\""layoutComplete\"", {\n\t\t\ttarget: items.concat(),\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t\tfromCache,\n\t\t\tisLayout,\n\t\t\tisScroll: viewSize < watcher.getContainerOffset() + size,\n\t\t\tscrollPos,\n\t\t\torgScrollPos: watcher.getOrgScrollPos(),\n\t\t\tsize,\n\t\t\tendLoading: userStyle => {\n\t\t\t\tthis.endLoading(userStyle);\n\t\t\t},\n\t\t});\n\t\tthis._infinite.scroll(scrollPos, isAppend);\n\t}\n\t_reset() {\n\t\tthis._status = {\n\t\t\tprocessingStatus: IDLE,\n\t\t\tloadingSize: 0,\n\t\t};\n\t}\n\t/**\n\t * Destroys elements, properties, and events used on a grid layout.\n\t * @ko 그리드 레이아웃에 사용한 엘리먼트와 속성, 이벤트를 해제한다\n\t */\n\tdestroy() {\n\t\tthis._infinite.clear();\n\t\tthis._watcher.destroy();\n\t\tthis._manager.destroy();\n\t\tthis._reset();\n\t\tthis._items.clear();\n\t\tthis._renderer.destroy();\n\t}\n}\n\nexport default InfiniteGrid;\n"",""import {APPEND, PREPEND, DUMMY_POSITION} from \""../consts\"";\nimport {getStyleNames, assignOptions, fill, cloneItems} from \""../utils\"";\n\n/*\nFrame\n[\n[1, 1, 1, 1, 1],\n[0, 0, 2, 2, 2],\n[0, 0, 2, 2, 2],\n[3, 4, 5, 5, 5],\n]\n*/\nfunction disableFrame(frame, type, x, y, width, height) {\n\tfor (let i = y; i < y + height; ++i) {\n\t\tfor (let j = x; j < x + width; ++j) {\n\t\t\tif (type !== frame[i][j]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tframe[i][j] = 0;\n\t\t}\n\t}\n}\nfunction searchShapeInFrame(frame, type, top, left, width, height) {\n\tconst size = {\n\t\tleft,\n\t\ttop,\n\t\ttype,\n\t\twidth: 1,\n\t\theight: 1,\n\t};\n\n\tfor (let i = left; i < width; ++i) {\n\t\tif (frame[top][i] === type) {\n\t\t\tsize.width = i - left + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\tfor (let i = top; i < height; ++i) {\n\t\tif (frame[i][left] === type) {\n\t\t\tsize.height = i - top + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\t// After finding the shape, it will not find again.\n\tdisableFrame(frame, type, left, top, size.width, size.height);\n\treturn size;\n}\nfunction getShapes(frame) {\n\tconst height = frame.length;\n\tconst width = height ? frame[0].length : 0;\n\tconst shapes = [];\n\n\tfor (let i = 0; i < height; ++i) {\n\t\tfor (let j = 0; j < width; ++j) {\n\t\t\tconst type = frame[i][j];\n\n\t\t\tif (!type) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Separate shapes with other numbers.\n\t\t\tshapes.push(searchShapeInFrame(frame, type, i, j, width, height));\n\t\t}\n\t}\n\tshapes.sort((a, b) => (a.type < b.type ? -1 : 1));\n\treturn {\n\t\tshapes,\n\t\twidth,\n\t\theight,\n\t};\n}\n/**\n * @classdesc FrameLayout is a layout that allows you to place cards in a given frame. It is a layout that corresponds to a level intermediate between the placement of the image directly by the designer and the layout using the algorithm.\n * @ko FrameLayout은 주어진 프레임에 맞춰 카드를 배치하는 레이아웃입니다. 디자이너가 직접 이미지를 배치하는 것과 알고리즘을 사용한 배치의 중간 정도 수준에 해당하는 레이아웃이다.\n * @class eg.InfiniteGrid.FrameLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.FrameLayout module <ko>eg.InfiniteGrid.FrameLayout 모듈의 옵션 객체</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>아이템들 사이의 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스크롤 이동 방향 (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @param {Boolean} [options.frame=[]] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> 아이템의 사이즈. 만약 아이템 사이즈가 0이면, 아이템들의 첫번째 아이템의 사이즈로 계산이 된다. </ko>\n * @param {Boolean} [options.frameFill=true] Make sure that the frame can be attached after the previous frame. <ko> 다음 프레임이 전 프레임에 이어 붙일 수 있는지 있는지 확인한다. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\""#grid\"". {\n\thorizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.FrameLayout, {\n\tmargin: 10,\n\titemSize: 200,\n\tframe: [\n\t\t[1, 1, 1, 1, 1],\n\t\t[0, 0, 2, 2, 2],\n\t\t[0, 0, 2, 2, 2],\n\t\t[3, 4, 5, 5, 5],\n\t],\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.FrameLayout({\n\tmargin: 10,\n\titemSize: 200,\n\thorizontal: true,\n\tframe: [\n\t\t[1, 1, 1, 1, 1],\n\t\t[0, 0, 2, 2, 2],\n\t\t[0, 0, 2, 2, 2],\n\t\t[3, 4, 5, 5, 5],\n\t],\n});\n\n</script>\n```\n **/\nclass FrameLayout {\n\tconstructor(options = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\titemSize: 0,\n\t\t\tframe: [],\n\t\t\tframeFill: true,\n\t\t}, options);\n\t\tconst frame = this.options.frame.map(row => row.slice());\n\n\t\tthis._itemSize = this.options.itemSize || 0;\n\t\t// divide frame into shapes.\n\t\tthis._shapes = getShapes(frame);\n\t\tthis._size = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t_getItemSize() {\n\t\tthis._checkItemSize();\n\n\t\treturn this._itemSize;\n\t}\n\t_checkItemSize() {\n\t\tif (this.options.itemSize) {\n\t\t\tthis._itemSize = this.options.itemSize;\n\t\t\treturn;\n\t\t}\n\t\tconst style = this._style;\n\t\tconst size = style.size2;\n\t\tconst margin = this.options.margin;\n\n\t\t// if itemSize is not in options, caculate itemSize from size.\n\t\tthis._itemSize = (this._size + margin) / this._shapes[size] - margin;\n\t}\n\t_layout(items, outline = [], isAppend) {\n\t\tconst length = items.length;\n\t\tconst style = this._style;\n\t\tconst {margin, frameFill} = this.options;\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst pos1Name = style.pos1;\n\t\tconst pos2Name = style.pos2;\n\t\tconst itemSize = this._getItemSize();\n\t\tconst isItemObject = typeof itemSize === \""object\"";\n\t\tconst itemSize2 = isItemObject ? itemSize[size2Name] : itemSize;\n\t\tconst itemSize1 = isItemObject ? itemSize[size1Name] : itemSize;\n\t\tconst shapesSize = this._shapes[size2Name];\n\t\tconst shapes = this._shapes.shapes;\n\t\tconst shapesLength = shapes.length;\n\t\tconst startOutline = fill(new Array(shapesSize), DUMMY_POSITION);\n\t\tconst endOutline = fill(new Array(shapesSize), DUMMY_POSITION);\n\t\tlet dist = 0;\n\t\tlet end = 0;\n\n\t\tif (!shapesLength) {\n\t\t\treturn {start: outline, end: outline};\n\t\t}\n\t\tfor (let i = 0; i < length; i += shapesLength) {\n\t\t\tfor (let j = 0; j < shapesLength && i + j < length; ++j) {\n\t\t\t\tconst item = items[i + j];\n\t\t\t\tconst shape = shapes[j];\n\t\t\t\tconst shapePos1 = shape[pos1Name];\n\t\t\t\tconst shapePos2 = shape[pos2Name];\n\t\t\t\tconst shapeSize1 = shape[size1Name];\n\t\t\t\tconst shapeSize2 = shape[size2Name];\n\t\t\t\tconst pos1 = end - dist + shapePos1 * (itemSize1 + margin);\n\t\t\t\tconst pos2 = shapePos2 * (itemSize2 + margin);\n\t\t\t\tconst size1 = shapeSize1 * (itemSize1 + margin) - margin;\n\t\t\t\tconst size2 = shapeSize2 * (itemSize2 + margin) - margin;\n\n\t\t\t\tfor (let k = shapePos2; k < shapePos2 + shapeSize2 && k < shapesSize; ++k) {\n\t\t\t\t\tif (startOutline[k] === DUMMY_POSITION) {\n\t\t\t\t\t\tstartOutline[k] = pos1;\n\t\t\t\t\t}\n\t\t\t\t\tstartOutline[k] = Math.min(startOutline[k], pos1);\n\t\t\t\t\tendOutline[k] = Math.max(endOutline[k], pos1 + size1 + margin);\n\t\t\t\t}\n\t\t\t\titem.rect = {\n\t\t\t\t\t[pos1Name]: pos1,\n\t\t\t\t\t[pos2Name]: pos2,\n\t\t\t\t\t[size1Name]: size1,\n\t\t\t\t\t[size2Name]: size2,\n\t\t\t\t};\n\t\t\t}\n\t\t\tend = Math.max(...endOutline);\n\t\t\t// check dist once\n\t\t\tif (i !== 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// find & fill empty block\n\t\t\tif (!frameFill) {\n\t\t\t\tdist = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdist = end;\n\n\t\t\tfor (let j = 0; j < shapesSize; ++j) {\n\t\t\t\tif (startOutline[j] === DUMMY_POSITION) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// the dist between frame's end outline and next frame's start outline\n\t\t\t\t// expect that next frame's start outline is startOutline[j] + end\n\t\t\t\tdist = Math.min(startOutline[j] + end - endOutline[j], dist);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\tif (startOutline[i] !== DUMMY_POSITION) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstartOutline[i] = Math.max(...startOutline);\n\t\t\tendOutline[i] = startOutline[i];\n\t\t}\n\t\t// The target outline is start outline when type is APPENDING\n\t\tconst targetOutline = isAppend ? startOutline : endOutline;\n\t\tconst prevOutlineEnd = outline.length === 0 ? 0 : Math[isAppend ? \""max\"" : \""min\""](...outline);\n\t\tlet prevOutlineDist = isAppend ? 0 : end;\n\n\t\tif (frameFill && outline.length === shapesSize) {\n\t\t\tprevOutlineDist = -DUMMY_POSITION;\n\t\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\t\tif (startOutline[i] === endOutline[i]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// if appending type is PREPEND, subtract dist from appending group's height.\n\n\t\t\t\tprevOutlineDist = Math.min(targetOutline[i] + prevOutlineEnd - outline[i], prevOutlineDist);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\tstartOutline[i] += prevOutlineEnd - prevOutlineDist;\n\t\t\tendOutline[i] += prevOutlineEnd - prevOutlineDist;\n\t\t}\n\t\titems.forEach(item => {\n\t\t\titem.rect[pos1Name] += prevOutlineEnd - prevOutlineDist;\n\t\t});\n\t\treturn {\n\t\t\tstart: startOutline.map(point => parseInt(point, 10)),\n\t\t\tend: endOutline.map(point => parseInt(point, 10)),\n\t\t};\n\t}\n\t_insert(items = [], outline = [], type, cache) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, type),\n\t\t};\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko 그룹들의 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>레이아웃할 그룹들의 배열</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {eg.InfiniteGrid.FrameLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tlayout(groups = [], outline = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\n\t\t\tpoint = this._layout(group.items, point, APPEND);\n\t\t\tgroup.outlines = point;\n\t\t\tpoint = point.end;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko 레이아웃의 가시 사이즈를 설정한다.\n\t * @method eg.InfiniteGrid.FrameLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>레이아웃에 아이템을 추가하는 컨테이너 영역의 가시 사이즈</ko>\n\t * @return {eg.InfiniteGrid.FrameLayout} An instance of a module itself<ko>모듈 자신의 인스턴스</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tsetSize(size) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko 아이템들을 아웃라인 아래에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tappend(items, outline, cache) {\n\t\treturn this._insert(items, outline, APPEND, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko 아이템을 아웃라인 위에 추가한다.\n\t * @method eg.InfiniteGrid.FrameLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>레이아웃할 아이템들의 배열</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준점이 되는 아웃라인 점들의 배열</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> 레이아웃이 된 아이템과 시작과 끝의 아웃라인이 담긴 정보</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tprepend(items, outline, cache) {\n\t\treturn this._insert(items, outline, PREPEND, cache);\n\t}\n}\n\nexport default FrameLayout;\n"",""/**\n * Copyright (c) NAVER Corp.\n * egjs-infinitegrid projects are licensed under the MIT license\n */\nimport InfiniteGrid from \""./InfiniteGrid\"";\nimport FrameLayout from \""./layouts/FrameLayout\"";\n\nInfiniteGrid.FrameLayout = FrameLayout;\n\nexport default InfiniteGrid;\n""],""names"":[""isUndefined"",""value"",""win"",""Component"",""_eventHandler"",""options"",""trigger"",""eventName"",""customEvent"",""handlerList"",""this"",""isCanceled"",""arg"",""i"",""restParam"",""Array"",""_len"",""_key"",""arguments"",""once"",""handlerToAttach"",""eventHash"",""self"",""on"",""listener"",""_len2"",""_key2"",""hasOn"",""name"",""off"",""handlerToDetach"",""undefined"",""k"",""handlerFunction"",""VERSION"",""document"",""window"",""navigator"",""userAgent"",""ua"",""SUPPORT_COMPUTEDSTYLE"",""SUPPORT_ADDEVENTLISTENER"",""SUPPORT_PASSIVE"",""supportsPassiveOption"",""Object"",""defineProperty"",""addEventListener"",""get"",""e"",""IS_IE"",""test"",""IS_IOS"",""IS_ANDROID2"",""IGNORE_CLASSNAME"",""TRANSITION_NAME"",""APPEND"",""VERTICAL"",""HORIZONTAL"",""DUMMY_POSITION"",""GROUPKEY_ATT"",""DEFAULT_OPTIONS"",""horizontal"",""margin"",""agent"",""toLowerCase"",""webkit"",""exec"",""WEBKIT_VERSION"",""parseInt"",""DEFENSE_BROWSER"",""properties"",""transitionend"",""webkitTransitionEnd"",""oTransitionEnd"",""mozTransitionEnd"",""property"",""prefix"",""TRANSFORM"",""TRANSITION"",""TRANSITION_END"",""toArray"",""nodes"",""array"",""len"",""length"",""push"",""matchHTML"",""html"",""match"",""$"",""param"",""multi"",""el"",""dummy"",""createElement"",""innerHTML"",""childNodes"",""querySelectorAll"",""nodeName"",""nodeType"",""jQuery"",""constructor"",""prototype"",""jquery"",""isArray"",""map"",""v"",""addEvent"",""element"",""type"",""handler"",""eventListenerOptions"",""attachEvent"",""removeEvent"",""removeEventListener"",""detachEvent"",""getStyles"",""getComputedStyle"",""currentStyle"",""_getSize"",""isOffset"",""body"",""doc"",""documentElement"",""Math"",""max"",""size"",""clientRect"",""getBoundingClientRect"",""right"",""left"",""bottom"",""top"",""parseFloat"",""innerWidth"",""innerHeight"",""outerWidth"",""outerHeight"",""getSize"",""width"",""height"",""STYLE"",""vertical"",""pos1"",""endPos1"",""size1"",""pos2"",""endPos2"",""size2"",""fill"",""arr"",""target"",""ItemManager"",""clear"",""from"",""elements"",""selector"",""groupKey"",""isAppend"",""selectItems"",""content"",""outerHTML"",""rect"",""filter"",""classNames"",""className"",""split"",""some"",""c"",""pluck"",""data"",""reduce"",""acc"",""concat"",""getStatus"",""startKey"",""endKey"",""datas"",""_data"",""startIndex"",""indexOf"",""endIndex"",""slice"",""items"",""item"",""item2"",""_extends"",""data2"",""setStatus"",""status"",""set"",""fit"",""base"",""outlines"",""start"",""end"",""getOutline"",""index"",""getEdgeIndex"",""cursor"",""prop"",""targetValue"",""Infinity"",""getEdgeValue"",""clearOutlines"",""startCursor"",""endCursor"",""forEach"",""group"",""getMaxEdgeValue"",""groups"",""append"",""layouted"",""prepend"",""unshift"",""remove"",""key"",""getAttribute"",""String"",""idx"",""splice"",""getData"",""render"",""styles"",""p"",""setTransition"",""transitionDuration"",""DOMRenderer"",""isEqualSize"",""isConstantSize"",""container"",""_size"",""view"",""viewport"",""_init"",""resize"",""renderItem"",""prevRect"",""style"",""setAttribute"",""position"",""itemRect"",""callback"",""renderItems"",""removeItems"",""removeElement"",""parentNode"",""removeChild"",""createElements"",""noElementItems"",""replace"",""join"",""cssText"",""updateSize"",""orgSize"",""_orgStyle"",""overflowX"",""overflowY"",""children"",""appendChild"",""createContainer"",""_insert"",""createAndInsert"",""df"",""createDocumentFragment"",""insertBefore"",""firstChild"",""_calcSize"",""getViewSize"",""getViewportSize"",""setContainerSize"",""isResize"",""isNeededResize"",""destroy"",""Watcher"",""check"",""isOverflowScroll"",""_timer"",""reset"",""_containerOffset"",""_view"",""_scrollIssue"",""_onCheck"",""bind"",""_onResize"",""setScrollPos"",""_prevPos"",""scrollPos"",""getOrgScrollPos"",""applyScrollPos"",""scrollTo"",""scrollBy"",""pos"",""arrPos"",""x"",""y"",""scrollLeft"",""scrollTop"",""scroll"",""getScrollPos"",""rawPos"",""getContainerOffset"",""prevPos"",""orgScrollPos"",""isForward"",""_getOffset"",""clearTimeout"",""setTimeout"",""_this"",""Infinite"",""itemManger"",""useRecycle"",""threshold"",""recycle"",""_items"",""setSize"",""_status"",""endScrollPos"",""visibles"",""legnth"",""min"",""isVisible"",""lastIndexOf"",""setCursor"",""getCursor"",""startEdgePos"",""endEdgePos"",""startPos"",""endPos"",""cache"",""getEdgeOutline"",""getVisibleItems"",""getVisibleData"",""onResize"",""AutoSizer"",""resizeAll"",""add"",""__PREFIX__"",""isFixed"",""fixed"",""elementPrefix"",""dataWidth"",""dataHeight"",""isDataAttribute"",""ImageLoaded"",""waitImageLoaded"",""needCheck"",""complete"",""error"",""checkCount"",""endCount"",""checkEnd"",""checkImage"",""onError"",""itemIndex"",""__ITEM_INDEX__"",""onCheck"",""srcElement"",""images"",""naturalWidth"",""checkImageLoaded"",""tagName"",""sum"",""hasTarget"",""LayoutMananger"",""renderer"",""attributePrefix"",""_renderer"",""_layout"",""setLayout"",""layout"",""_complete"",""isUpdate"",""itemManager"",""groupIndex"",""prevGroup"",""outline"",""groupOutline"",""every"",""groupItems"",""groupInfo"",""_error"",""removeTarget"",""replaceTarget"",""errorIndex"",""removeItem"",""src"",""removeAttribute"",""replaceItem"",""_end"",""removeTargetLength"",""replaceTargetLength"",""layoutedItems"",""_this2"",""checkGroups"",""reverse"",""_this3"",""callbacks"",""isRelayout"",""layoutGroups"",""create"",""o"",""TypeError"",""Error"",""F"",""InfiniteGrid"",""itemSelector"",""useFit"",""_reset"",""_loadingBar"",""_watcher"",""_infinite"",""_requestAppend"",""_requestPrepend"",""_recycle"",""_manager"",""LayoutKlass"",""_setSize"",""getItems"",""includeCached"",""_fitItems"",""_setContainerSize"",""_getEdgeValue"",""_fit"",""_getLoadingStatus"",""loadingSize"",""_isLoading"",""_renderLoading"",""infinite"",""isLayoutAll"",""isChildren"",""_onLayoutComplete"",""fromCache"",""isTrusted"",""isLayout"",""getGroupKeys"",""watcher"",""processingStatus"",""visibleItems"",""isReLayout"",""_postLayout"",""newItems"",""_appendLoadingBar"",""setLoadingBar"",""userLoadingBar"",""loadingBarObj"",""loadingStyle"",""loadingBar"",""isProcessing"",""_isProcessing"",""_process"",""isAdd"",""Date"",""getTime"",""floor"",""random"",""method"",""getLoadingBar"",""startLoading"",""userStyle"",""display"",""posName"",""endLoading"",""LOADING_APPEND"",""getItem"",""_updateItem"",""updateItem"",""updateItems"",""moveTo"",""isInCursor"",""_scrollTo"",""moveCache"",""moveItem"",""_postCache"",""_setScrollPos"",""_onImageError"",""requestStartCursor"",""requestEndCursor"",""pop"",""_this4"",""shift"",""_this5"",""viewSize"",""isScroll"",""_this6"",""searchShapeInFrame"",""frame"",""j"",""disableFrame"",""FrameLayout"",""itemSize"",""frameFill"",""isHorizontal"",""row"",""_itemSize"",""_shapes"",""shapes"",""sort"",""a"",""b"",""getShapes"",""_style"",""_getItemSize"",""_checkItemSize"",""size1Name"",""size2Name"",""pos1Name"",""pos2Name"",""isItemObject"",""itemSize2"",""itemSize1"",""shapesSize"",""shapesLength"",""startOutline"",""endOutline"",""dist"",""shape"",""shapePos1"",""shapePos2"",""shapeSize1"",""shapeSize2"",""targetOutline"",""prevOutlineEnd"",""prevOutlineDist"",""point"",""clone""],""mappings"":""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""}"
306b4c3baa114c1f8b8a370d6f6405224a076731,3984104,# from http://stackoverflow.com/questions/3984104/qmake-how-to-copy-a-file-to-the-output
b1ef1e225b04781e912405f83f01ebdd1ca6ecf7,3330919,        // http://stackoverflow.com/a/3330919)
8f89916d38989d95f4734c3a50077681b6a66a5c,5223297,# .perspectivev3: http://stackoverflow.com/questions/5223297/xcode-projects-what-is-a-perspectivev3-file
350580b14de22ac30da7b788c09a36f50dded386,17694143,"					""url"": ""http://stackoverflow.com/questions/17694143/what-is-the-status-of-ttf-support-in-internet-explorer"","
fee21a0dfcca77f315ce49fdbef69019fbad8645,1180397,"The details of configuring your server for SSL and configuring browser certificates are beyond the scope of this document. If you use Tomcat, see its [SSL documentation|https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html]. To get a test environment working, see the instructions in [this discussion at Stack Overflow|https://stackoverflow.com/questions/1180397/tomcat-server-client-self-signed-ssl-certificate]."
1bcaafa50bbf7e7d4e7323b5a3ad11d159e09037,2439020,	// Borrowed from http://stackoverflow.com/questions/2439020/wheres-the-iphone-mime-type-database
a82ebff5219624b6383e1762fbaf2b7daba0913f,6274381,    /* https://stackoverflow.com/a/6274381 */
74790442fc978a0641688734107bbdac6c9665a2,7192563,"{""version"":3,""sources"":[""examples.js""],""names"":[""modules"",""__webpack_require__"",""moduleId"",""installedModules"",""exports"",""module"",""id"",""loaded"",""call"",""m"",""c"",""p"",""dragular"",""examplesRouter"",""BasicCtrl"",""BasicModelCtrl"",""BoundingBoxCtrl"",""BoundingBoxLockXCtrl"",""BoundingBoxLockYCtrl"",""CopyCtrl"",""CopyModelCtrl"",""CustomClassesCtrl"",""DifferentOptionsModelCtrl"",""DirectiveCtrl"",""DirectiveModelCtrl"",""DragOverEventsCtrl"",""EventsCtrl"",""HandleCtrl"",""IsContainerModelCtrl"",""NameSpacesCtrl"",""NestedNgRepeatCtrl"",""NestedNgRepeatWithModelCtrl"",""NgRepeatCtrl"",""NgRepeatFilteredWithModelCtrl"",""NgRepeatWithModelCtrl"",""RemoveOnSpillCtrl"",""RemoveOnSpillWithModelCtrl"",""RevertOnSpillCtrl"",""ScrollingDragCtrl"",""angular"",""config"",""controller"",""$scope"",""examplesList"",""template"",""link"",""title"",""highlightCode"",""document"",""getElementsByTagName"",""length"",""codeBlocks"",""i"",""hljs"",""highlightBlock"",""rowOffcanvas"",""toggleSidebar"",""element"",""getElementById"",""toggleClass"",""dragularDirective"",""dragularService"",""factory"",""directive"",""restrict"",""iElm"",""iAttrs"",""tryJson"",""json"",""JSON"",""parse"",""e"",""drake"",""options"",""$eval"",""containersModel"",""dynamicModelAttribute"",""$watch"",""dragularModel"",""newVal"",""sanitizeContainersModel"",""dragularNameSpace"",""nameSpace"",""split"",""$inject"",""global"",""shared"",""classesCache"",""containersCtx"",""containers"",""mirror"",""source"",""item"",""copy"",""sourceItem"",""sourceModel"",""sourceFilteredModel"",""target"",""targetCtx"",""targetModel"",""lastDropTarget"",""offsetX"",""offsetY"",""moveX"",""moveY"",""offsetXr"",""offsetYb"",""clientX"",""clientY"",""mirrorWidth"",""mirrorHeight"",""initialSibling"",""currentSibling"",""initialIndex"",""currentIndex"",""tempModel"",""dragOverEvents"",""lastElementBehindCursor"",""grabbed"",""$rootScope"",""$compile"",""service"",""arg0"",""arg1"",""Array"",""isArray"",""processServiceArguments"",""arguments"",""isElement"",""initialContainers"",""querySelectorAll"",""o"",""copyOptions"",""extendOptions"",""tmp"",""extend"",""defaultOptions"",""classes"",""defaultClasses"",""eventNames"",""defaultEventNames"",""processOptionsObject"",""boundingBox"",""makeArray"",""containersFilteredModel"",""forEach"",""len"",""shLen"",""getContainersModel"",""fm"",""registerEvents"",""remove"",""op"",""regEvent"",""docElm"",""release"",""container"",""grab"",""name"",""eventName"",""doc"",""createEvent"",""initEvent"",""createEventObject"",""eventType"",""whichMouseButton"",""metaKey"",""ctrlKey"",""context"",""canStart"",""eventualMovements"",""type"",""isInput"",""focus"",""preventDefault"",""ungrab"",""dragging"",""originalEvent"",""getCoord"",""elementBehindCursor"",""getElementBehindPoint"",""dropTarget"",""findDropTarget"",""g"",""copySortSource"",""drop"",""removeOnSpill"",""cancel"",""fireEvent"",""dragularrelease"",""scope"",""$emit"",""isContainer"",""el"",""indexOf"",""isContainerModel"",""removeContainers"",""all"",""$applyAsync"",""changes"",""index"",""splice"",""startBecauseMouseMoved"",""movements"",""preventGrabbed"",""destroy"",""ignoreInputTextSelection"",""elementFromPoint"",""end"",""start"",""direction"",""getParent"",""parent"",""parentNode"",""parentHeight"",""offsetHeight"",""parentWidth"",""offsetWidth"",""childHeight"",""clientHeight"",""childWidth"",""clientWidth"",""offset"",""getOffset"",""left"",""top"",""right"",""bottom"",""addClass"",""transit"",""renderMirrorImage"",""style"",""drag"",""handle"",""invalid"",""moves"",""nextEl"",""manualStart"",""cloneNode"",""dragularcloned"",""containerIndex"",""domIndexOf"",""dragulardrag"",""afterDrop"",""compileItemOnDrop"",""content"",""removeChild"",""insertBefore"",""isInitialPlacement"",""dragularcancel"",""dragulardrop"",""dropIndex"",""cleanup"",""dropElmModel"",""dontCopyModel"",""dragularremove"",""revert"",""reverts"",""revertOnSpill"",""initial"",""removeMirrorImage"",""rmClass"",""spillOut"",""dragularout"",""dragulardragend"",""s"",""sibling"",""accepted"",""accepts"",""immediate"",""getImmediateChild"",""reference"",""getReference"",""dragularCommon"",""canBeAccepted"",""moved"",""spillOver"",""pageX"",""pageY"",""offsetBox"",""x"",""y"",""lockY"",""lockX"",""changed"",""dragularenter"",""dragularleave"",""dragularshadow"",""hide"",""scrollContainer"",""before"",""scrollTop"",""deltaY"",""stopPropagation"",""rect"",""getBoundingClientRect"",""width"",""height"",""getRectWidth"",""getRectHeight"",""mirrorContainer"",""appendChild"",""body"",""unselectable"",""outside"",""children"",""horizontal"",""inside"",""resolve"",""after"",""point"",""state"",""className"",""getBool"",""dragularover"",""never"",""getEmptyObject"",""always"",""fn"",""touch"",""mouseup"",""mousedown"",""mousemove"",""pointers"",""microsoft"",""$el"",""navigator"",""pointerEnabled"",""msPointerEnabled"",""startIndex"",""prototype"",""slice"",""touches"",""undefined"",""buttons"",""which"",""button"",""getScroll"",""scrollProp"",""offsetProp"",""window"",""scrollLeft"",""manually"",""nextSibling"",""nodeType"",""nextElementSibling"",""obj"",""HTMLElement"",""nodeName"",""lookupClass"",""cached"",""lastIndex"",""RegExp"",""current"",""test"",""replace"",""trim"",""getEventHost"",""targetTouches"",""changedTouches"",""coord"",""host"",""missMap"",""tagName"",""isEditable"",""contentEditable"",""child"",""extra"",""dispatchEvent"",""prop"",""args"",""isFunction"",""apply"",""this"",""documentElement"",""cleanEnviroment"",""$stateProvider"",""$urlRouterProvider"",""otherwise"",""timer"",""ctrl"",""$state"",""$stateParams"",""$timeout"",""go"",""url"",""templateUrl"",""$element"",""items1"",""items2"",""eq"",""containerLeft"",""querySelector"",""containerRight"",""dragularOptions"",""on"",""parentElement"",""removeClass"",""notContainer"",""getElementsByClassName"",""myFn"",""$on"",""cartModel"",""removeItem"",""classList"",""contains"",""items"",""parentContainers"",""nestedContainers"",""push"",""addItem"",""$interval"",""bar"",""inc"",""speed"",""leftScrollContainer"",""rightScrollContainer"",""leftTopBar"",""leftBottomBar"",""rightTopBar"",""rightBottomBar"",""run"",""$templateCache"",""put""],""mappings"":""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"",""file"":""examples.min.js"",""sourcesContent"":[""/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \""\"";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* global angular, hljs */\n\t'use strict';\n\n\t// var angular = require('angular');\n\n\tvar dragular = __webpack_require__(1);\n\tvar examplesRouter = __webpack_require__(4);\n\tvar BasicCtrl = __webpack_require__(5);\n\tvar BasicModelCtrl = __webpack_require__(6);\n\tvar BoundingBoxCtrl = __webpack_require__(7);\n\tvar BoundingBoxLockXCtrl = __webpack_require__(8);\n\tvar BoundingBoxLockYCtrl = __webpack_require__(9);\n\tvar CopyCtrl = __webpack_require__(10);\n\tvar CopyModelCtrl = __webpack_require__(11);\n\tvar CustomClassesCtrl = __webpack_require__(12);\n\tvar DifferentOptionsModelCtrl = __webpack_require__(13);\n\tvar DirectiveCtrl = __webpack_require__(14);\n\tvar DirectiveModelCtrl = __webpack_require__(15);\n\tvar DragOverEventsCtrl = __webpack_require__(16);\n\tvar EventsCtrl = __webpack_require__(17);\n\tvar HandleCtrl = __webpack_require__(18);\n\tvar IsContainerModelCtrl = __webpack_require__(19);\n\tvar NameSpacesCtrl = __webpack_require__(20);\n\tvar NestedNgRepeatCtrl = __webpack_require__(21);\n\tvar NestedNgRepeatWithModelCtrl = __webpack_require__(22);\n\tvar NgRepeatCtrl = __webpack_require__(23);\n\tvar NgRepeatFilteredWithModelCtrl = __webpack_require__(23);\n\tvar NgRepeatWithModelCtrl = __webpack_require__(24);\n\tvar RemoveOnSpillCtrl = __webpack_require__(25);\n\tvar RemoveOnSpillWithModelCtrl = __webpack_require__(26);\n\tvar RevertOnSpillCtrl = __webpack_require__(27);\n\tvar ScrollingDragCtrl = __webpack_require__(28);\n\t__webpack_require__(29);\n\n\t/**\n\t *  Module Example App\n\t *\n\t *  DEMO app for dragular https://github.com/luckylooke/dragular\n\t */\n\n\tangular\n\t  .module('examplesApp', [dragular, 'templates', 'ui.router'])\n\t  .config(examplesRouter)\n\t  .controller('Basic', BasicCtrl)\n\t  .controller('BasicModel', BasicModelCtrl)\n\t  .controller('BoundingBox', BoundingBoxCtrl)\n\t  .controller('BoundingBoxLockX', BoundingBoxLockXCtrl)\n\t  .controller('BoundingBoxLockY', BoundingBoxLockYCtrl)\n\t  .controller('Copy', CopyCtrl)\n\t  .controller('CopyModel', CopyModelCtrl)\n\t  .controller('CustomClasses', CustomClassesCtrl)\n\t  .controller('DifferentOptionsModel', DifferentOptionsModelCtrl)\n\t  .controller('Directive', DirectiveCtrl)\n\t  .controller('DirectiveModel', DirectiveModelCtrl)\n\t  .controller('DragOverEvents', DragOverEventsCtrl)\n\t  .controller('Events', EventsCtrl)\n\t  .controller('Handle', HandleCtrl)\n\t  .controller('IsContainerModel', IsContainerModelCtrl)\n\t  .controller('NameSpaces', NameSpacesCtrl)\n\t  .controller('NestedNgRepeat',  NestedNgRepeatCtrl)\n\t  .controller('NestedNgRepeatWithModel', NestedNgRepeatWithModelCtrl)\n\t  .controller('NgRepeat', NgRepeatCtrl)\n\t  .controller('NgRepeatFilteredWithModel', NgRepeatFilteredWithModelCtrl)\n\t  .controller('NgRepeatWithModel', NgRepeatWithModelCtrl)\n\t  .controller('RemoveOnSpill', RemoveOnSpillCtrl)\n\t  .controller('RemoveOnSpillWithModel', RemoveOnSpillWithModelCtrl)\n\t  .controller('RevertOnSpill', RevertOnSpillCtrl)\n\t  .controller('ScrollingDrag', ScrollingDragCtrl)\n\t  .controller('ExAppCtrl', ['$scope', function($scope) {\n\t    $scope.examplesList = [{\n\t        template: 'docsInstall/docsInstall.html',\n\t        link: 'docsInstall',\n\t        title: 'Installation'\n\t    },{\n\t        template: 'exampleBasic/exampleBasic.html',\n\t        link: 'exampleBasic',\n\t        title: 'Basic'\n\t    },{\n\t        template: 'exampleBasicWithModel/exampleBasicWithModel.html',\n\t        link: 'exampleBasicWithModel',\n\t        title: 'Basic - with model'\n\t    },{\n\t        template: 'exampleDifferentOptionsWithModel/exampleDifferentOptionsWithModel.html',\n\t        link: 'exampleDifferentOptionsWithModel',\n\t        title: 'Different options - with model'\n\t    }, {\n\t        template: 'exampleDirective/exampleDirective.html',\n\t        link: 'exampleDirective',\n\t        title: 'Directive'\n\t    }, {\n\t        template: 'exampleDirectiveWithModel/exampleDirectiveWithModel.html',\n\t        link: 'exampleDirectiveWithModel',\n\t        title: 'Directive - with model'\n\t    }, {\n\t        template: 'exampleEvents/exampleEvents.html',\n\t        link: 'exampleEvents',\n\t        title: 'Events'\n\t    }, {\n\t        template: 'exampleRemoveOnSpill/exampleRemoveOnSpill.html',\n\t        link: 'exampleRemoveOnSpill',\n\t        title: 'Remove on spill'\n\t    }, {\n\t        template: 'exampleRemoveOnSpillWithModel/exampleRemoveOnSpillWithModel.html',\n\t        link: 'exampleRemoveOnSpillWithModel',\n\t        title: 'Remove on spill - with model'\n\t    }, {\n\t        template: 'exampleRevertOnSpill/exampleRevertOnSpill.html',\n\t        link: 'exampleRevertOnSpill',\n\t        title: 'Revert on spill'\n\t    }, {\n\t        template: 'exampleCopy/exampleCopy.html',\n\t        link: 'exampleCopy',\n\t        title: 'Copy'\n\t    }, {\n\t        template: 'exampleCopyWithModel/exampleCopyWithModel.html',\n\t        link: 'exampleCopyWithModel',\n\t        title: 'Copy - with model'\n\t    }, {\n\t        template: 'exampleHandle/exampleHandle.html',\n\t        link: 'exampleHandle',\n\t        title: 'Handle'\n\t    }, {\n\t        template: 'exampleIsContainerWithModel/exampleIsContainerWithModel.html',\n\t        link: 'exampleIsContainerWithModel',\n\t        title: 'isContainer - with model'\n\t    }, {\n\t        template: 'exampleCustomClasses/exampleCustomClasses.html',\n\t        link: 'exampleCustomClasses',\n\t        title: 'Custom classes'\n\t    }, {\n\t        template: 'exampleNameSpaces/exampleNameSpaces.html',\n\t        link: 'exampleNameSpaces',\n\t        title: 'NameSpaces'\n\t    }, {\n\t        template: 'exampleDragOverEvents/exampleDragOverEvents.html',\n\t        link: 'exampleDragOverEvents',\n\t        title: 'Drag-over events'\n\t    }, {\n\t        template: 'exampleBoundingBox/exampleBoundingBox.html',\n\t        link: 'exampleBoundingBox',\n\t        title: 'BoundingBox'\n\t    }, {\n\t        template: 'exampleBoundingBoxLockX/exampleBoundingBoxLockX.html',\n\t        link: 'exampleBoundingBoxLockX',\n\t        title: 'BoundingBox + LockX'\n\t    }, {\n\t        template: 'exampleBoundingBoxLockY/exampleBoundingBoxLockY.html',\n\t        link: 'exampleBoundingBoxLockY',\n\t        title: 'BoundingBox + LockY'\n\t    }, {\n\t        template: 'exampleNgRepeat/exampleNgRepeat.html',\n\t        link: 'exampleNgRepeat',\n\t        title: 'ngRepeat'\n\t    }, {\n\t        template: 'exampleNgRepeatWithModel/exampleNgRepeatWithModel.html',\n\t        link: 'exampleNgRepeatWithModel',\n\t        title: 'ngRepeat - with model'\n\t    }, {\n\t        template: 'exampleNgRepeatFilteredWithModel/exampleNgRepeatFilteredWithModel.html',\n\t        link: 'exampleNgRepeatFilteredWithModel',\n\t        title: 'Filtered ngRepeat - with model'\n\t    }, {\n\t        template: 'exampleNestedNgRepeat/exampleNestedNgRepeat.html',\n\t        link: 'exampleNestedNgRepeat',\n\t        title: 'Nested ngRepead'\n\t    }, {\n\t        template: 'exampleNestedNgRepeatWithModel/exampleNestedNgRepeatWithModel.html',\n\t        link: 'exampleNestedNgRepeatWithModel',\n\t        title: 'Nested ngRepead - with model'\n\t    }, {\n\t        template: 'exampleScrollingDrag/exampleScrollingDrag.html',\n\t        link: 'exampleScrollingDrag',\n\t        title: 'Scrolling drag'\n\t    }];\n\n\t    $scope.highlightCode = function () {\n\t        if(document.getElementsByTagName('code').length){\n\t            var codeBlocks = document.getElementsByTagName('code');\n\t            for (var i = codeBlocks.length - 1; i >= 0; i--) {\n\t                hljs.highlightBlock(codeBlocks[i]);\n\t            }\n\t        }\n\t    };\n\n\t    var rowOffcanvas;\n\t    $scope.toggleSidebar = function toggleSidebar () {\n\t        if(!rowOffcanvas){\n\t            rowOffcanvas = angular.element(document.getElementById('rowOffcanvas'));\n\t        }\n\t        rowOffcanvas.toggleClass('active');\n\t    };\n\n\t  }]);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* global angular */\n\t'use strict';\n\tvar dragularDirective = __webpack_require__(2);\n\tvar dragularService = __webpack_require__(3);\n\n\t/**\n\t * Dragular 4.1.0 by Luckylooke https://github.com/luckylooke/dragular\n\t * Angular version of dragula https://github.com/bevacqua/dragula\n\t */\n\tmodule.exports = 'dragularModule';\n\n\tangular\n\t  .module('dragularModule', [])\n\t  .factory('dragularService', dragularService)\n\t  .directive('dragular', dragularDirective);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\t/**\n\t * dragular Directive by Luckylooke https://github.com/luckylooke/dragular\n\t * Angular version of dragula https://github.com/bevacqua/dragula\n\t */\n\n\tvar dragular = function (dragularService) {\n\t  return {\n\t    restrict: 'A',\n\t    link: function($scope, iElm, iAttrs) {\n\n\t      var drake,\n\t        options = $scope.$eval(iAttrs.dragular) || tryJson(iAttrs.dragular) || {};\n\n\t      function tryJson(json) {\n\t        try { // I dont like try catch solutions but I havent find sattisfying way of chcecking json validity.\n\t          return JSON.parse(json);\n\t        } catch (e) {\n\t          return undefined;\n\t        }\n\t      }\n\n\t      if(options && options.containersModel && typeof options.containersModel === 'string'){\n\t        options.containersModel = $scope.$eval(options.containersModel);\n\t      }\n\n\t      if(options && options.dynamicModelAttribute){\n\t        // watch for model changes\n\t        $scope.$watch(function () {\n\t          return $scope.$eval(iAttrs.dragularModel);\n\t        }, function (newVal) {\n\t          if(newVal){\n\t            drake.containersModel = drake.sanitizeContainersModel($scope.$eval(newVal));\n\t          }\n\t        });\n\t      }else if(iAttrs.dragularModel){\n\t        // bind once and keep reference\n\t        options.containersModel = $scope.$eval(iAttrs.dragularModel);\n\t      }\n\n\t      if(iAttrs.dragularNameSpace){\n\t        options.nameSpace = iAttrs.dragularNameSpace.split(' ');\n\t      }\n\n\t      drake = dragularService(iElm[0], options);\n\t    }\n\t  };\n\t};\n\n\tdragular.$inject = ['dragularService'];\n\n\tmodule.exports = dragular;\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/* global angular */\n\t'use strict';\n\n\t/**\n\t * dragular Service by Luckylooke https://github.com/luckylooke/dragular\n\t * Angular version of dragula https://github.com/bevacqua/dragula\n\t */\n\n\tvar shared = { // sahred object between all service instances\n\t  classesCache: {}, // classes lookup cache\n\t  containersCtx: {}, // containers model\n\t  containers: {}, // containers\n\t  mirror: null, // mirror image\n\t  source: null, // source container\n\t  item: null, // item being dragged\n\t  copy: null, // copy flag\n\t  sourceItem: null, // item originaly dragged if copy is enabled\n\t  sourceModel: null, // source container model\n\t  sourceFilteredModel: null, // source container filtered model if relevant\n\t  target: null, // droppable container under drag item\n\t  targetCtx: null, // target container context\n\t  targetModel: null, // target container model\n\t  lastDropTarget: null, // last container item was over\n\t  offsetX: null, // reference x\n\t  offsetY: null, // reference y\n\t  moveX: null, // reference move x\n\t  moveY: null, // reference move y\n\t  offsetXr: null, // reference x right for boundingBox feature\n\t  offsetYb: null, // reference y bottom for boundingBox feature\n\t  clientX: null, // cache client x, init at grab, update at drag\n\t  clientY: null, // cache client y, init at grab, update at drag\n\t  mirrorWidth: null, // mirror width for boundingBox feature\n\t  mirrorHeight: null, // mirror height for boundingBox feature\n\t  initialSibling: null, // reference sibling when grabbed\n\t  currentSibling: null, // reference sibling now\n\t  initialIndex: null, // reference model index when grabbed\n\t  currentIndex: null, // reference model index now\n\t  tempModel: null, // if o.isContainer is used, model can be provided as well, it is temporary saved here during drags\n\t  dragOverEvents: {}, // drag over events fired on element behind cursor\n\t  lastElementBehindCursor: null, // last element behind cursor\n\t  grabbed: null // holds mousedown context until first mousemove\n\t};\n\n\tvar dragularService = function ($rootScope, $compile) {\n\t  // abbreviations\n\t  var doc = document,\n\t      docElm = doc.documentElement;\n\n\t  // clean common/shared objects\n\t  service.cleanEnviroment = function cleanEnviroment() {\n\t    shared.classesCache = {};\n\t    shared.containersCtx = {};\n\t    shared.containers = {};\n\t    shared.mirror = undefined;\n\t  };\n\n\t  service.shared = shared;\n\n\t  return service;\n\n\t  // service definition\n\t  function service(arg0, arg1) {\n\t    var initialContainers = arg0 || [],\n\t      options = arg1 || {},\n\t      o, // shorthand for options\n\t      g = getBool, // shorthand for getBool\n\t      // defaults\n\t      defaultClasses = {\n\t        mirror: 'gu-mirror',\n\t        hide: 'gu-hide',\n\t        unselectable: 'gu-unselectable',\n\t        transit: 'gu-transit'\n\t      },\n\t      defaultEventNames = {\n\t        // drag-over DOM events\n\t        dragularenter: 'dragularenter',\n\t        dragularleave: 'dragularleave',\n\t        dragularrelease: 'dragularrelease',\n\t        // $scope events\n\t        dragularcloned: 'dragularcloned',\n\t        dragulardrag: 'dragulardrag',\n\t        dragularcancel: 'dragularcancel',\n\t        dragulardrop: 'dragulardrop',\n\t        dragularremove: 'dragularremove',\n\t        dragulardragend: 'dragulardragend',\n\t        dragularshadow: 'dragularshadow',\n\t        dragularover: 'dragularover',\n\t        dragularout: 'dragularout'\n\t      },\n\t      defaultOptions = { // options with defaults\n\t        copyOptions: false, // copy options object when provided\n\t        classes: defaultClasses, // classes used by dragular\n\t        eventNames: defaultEventNames, // event names used by dragular\n\t        containers: false, // initial containers provided via options object (are provided via parameter by default)\n\t        containersModel: false, // if provided, model will be synced with DOM\n\t        containersFilteredModel: false, // if provided, dragular will handle filtered model cases\n\t        isContainer: never, // potential target can be forced to be container by custom logic\n\t        isContainerModel: getEmptyObject, // if isContainer function is provided, you can provide also respective model\n\t        moves: always, // can drag start?\n\t        accepts: always, // can target accept dragged item? (target context used)\n\t        canBeAccepted: always, // can be dragged item accepted by target? (source context used)\n\t        copy: false, // dragged item will be copy of source? flag or function\n\t        copySortSource: false, // enable sorting in source when copying item\n\t        dontCopyModel: false, // dont make copy of model when coping item (#61)\n\t        invalid: never, // target (in)validity function\n\t        revertOnSpill: false, // item returns to original place\n\t        removeOnSpill: false, // item will be removed if not placed into valid target\n\t        lockX: false, // lock movement into x-axis\n\t        lockY: false, // lock movement into y-axis\n\t        boundingBox: false, // lock movement inside this element boundaries\n\t        mirrorContainer: doc.body, // element for appending mirror\n\t        ignoreInputTextSelection: true, // text selection in inputs wont be considered as drag\n\t        compileItemOnDrop: false\n\t      },\n\t      drake = {\n\t        containers: shared.containers,\n\t        containersCtx: shared.containersCtx,\n\t        sanitizeContainersModel: sanitizeContainersModel,\n\t        isContainer: isContainer,\n\t        start: manualStart,\n\t        end: end,\n\t        cancel: cancel,\n\t        remove: remove,\n\t        destroy: destroy,\n\t        dragging: false\n\t      };\n\n\t    processServiceArguments(); // both arguments (containers and options) are optional, this function handle this\n\t    extendOptions();\n\t    processOptionsObject();\n\t    registerEvents();\n\n\t    return drake;\n\n\t    // Function definitions: ==============================================================================================================\n\t    // Initial functions: -----------------------------------------------------------------------------------------------------------------\n\n\t    function sanitizeContainersModel(containersModel) {\n\t      if (typeof(containersModel) === 'function') {\n\t        return containersModel;\n\t      }\n\t      if (Array.isArray(containersModel)) {\n\t        //                  |-------- is 2D array? -----------|\n\t        return Array.isArray(containersModel[0]) ? containersModel : [containersModel];\n\t      } else {\n\t        return [];\n\t      }\n\t    }\n\n\t    function processServiceArguments(){\n\t      if (arguments.length === 1 && // if there is only one argument we need to distinguish if it is options object or container(s) reference\n\t          !Array.isArray(arg0) && // array of containers elements\n\t          !angular.isElement(arg0) && // one container element\n\t          !arg0[0] && // array-like object with containers elements\n\t          typeof arg0 !== 'string') { // selector\n\t        // then arg0 is options object\n\t        options = arg0 || {};\n\t        initialContainers = []; // containers are not provided on init\n\t      } else if (typeof arg0 === 'string') {\n\t        initialContainers = document.querySelectorAll(arg0);\n\t      }\n\t      o = options.copyOptions ? angular.copy(options) : options;\n\t    }\n\n\t    function extendOptions(){\n\t      var tmp = angular.extend({}, defaultOptions, o); // tmp for keeping defaults untouched\n\t      angular.extend(o, tmp); // merge defaults back into options\n\t      if(o.classes){\n\t        tmp = angular.extend({}, defaultClasses, o.classes);\n\t        angular.extend(o.classes, tmp);\n\t      }\n\t      if(o.eventNames){\n\t        tmp = angular.extend({}, defaultEventNames, o.eventNames);\n\t        angular.extend(o.eventNames, tmp);\n\t      }\n\t    }\n\n\t    function processOptionsObject(){\n\t      // bounding box must be pure DOM element, not jQuery wrapper or something else..\n\t      if (!isElement(o.boundingBox)) {\n\t        o.boundingBox = false;\n\t      }\n\n\t      // initial containers provided via options are higher priority then by parameter\n\t      if(o.containers){\n\t        initialContainers = o.containers;\n\t      }\n\t      // sanitize initialContainers\n\t      initialContainers = makeArray(initialContainers);\n\n\t      // sanitize o.containersModel\n\t      o.containersModel = sanitizeContainersModel(o.containersModel);\n\n\t      // sanitize o.containersFilteredModel\n\t      if (Array.isArray(o.containersFilteredModel)) {\n\t        //                  |-------- is 2D array? -----------|\n\t        o.containersFilteredModel = Array.isArray(o.containersFilteredModel[0]) ? o.containersFilteredModel : [o.containersFilteredModel];\n\t      } else {\n\t        o.containersFilteredModel = [];\n\t      }\n\n\t      // feed containers groups and optionaly do same for models\n\t      if (!o.nameSpace) {\n\t        o.nameSpace = ['dragularCommon'];\n\t      }\n\t      if (!Array.isArray(o.nameSpace)) {\n\t        o.nameSpace = [o.nameSpace];\n\t      }\n\t      o.nameSpace.forEach(function eachNameSpace(nameSpace) {\n\t        if (!shared.containers[nameSpace]) {\n\t          shared.containers[nameSpace] = [];\n\t          shared.containersCtx[nameSpace] = [];\n\t        }\n\t        var len = initialContainers.length,\n\t          shLen = shared.containers[nameSpace].length;\n\t        for (var i = 0; i < len; i++) {\n\t          shared.containers[nameSpace][i + shLen] = initialContainers[i];\n\t          shared.containersCtx[nameSpace][i + shLen] = {\n\t            o: o,\n\t            m: getContainersModel()[i], // can be undefined\n\t            fm: o.containersFilteredModel[i] // can be undefined\n\t          };\n\t        }\n\t      });\n\t    }\n\n\t    function registerEvents(remove) {\n\t      var op = remove ? 'off' : 'on';\n\t      regEvent(docElm, op, 'mouseup', release);\n\n\t      initialContainers.forEach(function addMouseDown(container) {\n\t        regEvent(container, 'on', 'mousedown', grab);\n\t      });\n\n\t      if(!remove){ // create dragular DOM events\n\t        angular.forEach(['dragularenter', 'dragularleave', 'dragularrelease'], function prepareDragOverEvents(name) {\n\t          var eventName = o.eventNames[name];\n\t          if(!shared.dragOverEvents[eventName]){\n\t            if (doc.createEvent) {\n\t              shared.dragOverEvents[eventName] = doc.createEvent('HTMLEvents');\n\t              shared.dragOverEvents[eventName].initEvent(eventName, true, true);\n\t            } else {\n\t              shared.dragOverEvents[eventName] = doc.createEventObject();\n\t              shared.dragOverEvents[eventName].eventType = eventName;\n\t            }\n\t          }\n\t        });\n\t      }\n\t    }\n\n\t    // Event handlers functions (end of initial functions): -----------------------------------------------------------------------------------------------------------------\n\n\t    function grab(e) {\n\t      // filter some odd situations\n\t      if (whichMouseButton(e) !== 1 || e.metaKey || e.ctrlKey) {\n\t        return; // we only care about honest-to-god left clicks and touch events\n\t      }\n\n\t      // set itial values\n\t      shared.moveX = e.clientX;\n\t      shared.moveY = e.clientY;\n\n\t      var context = canStart(e.target);\n\t      if (!context || !context.item) {\n\t        return;\n\t      }\n\n\t      shared.grabbed = context;\n\t      eventualMovements();\n\t      if (e.type === 'mousedown') {\n\t        if (isInput(context.item)) { // see also: https://github.com/bevacqua/dragula/issues/208\n\t          context.item.focus(); // fixes https://github.com/bevacqua/dragula/issues/176\n\t        } else {\n\t          e.preventDefault(); // fixes https://github.com/bevacqua/dragula/issues/155\n\t        }\n\t      }\n\t    }\n\n\t    function release(e) {\n\t      ungrab();\n\t      if (!drake.dragging) {\n\t        return;\n\t      }\n\t      if (e.originalEvent){\n\t          e = e.originalEvent; // jQuery enviroment\n\t      }\n\n\t      shared.clientX = getCoord('clientX', e);\n\t      shared.clientY = getCoord('clientY', e);\n\n\t      var elementBehindCursor = getElementBehindPoint(shared.mirror, shared.clientX, shared.clientY),\n\t        dropTarget = findDropTarget(elementBehindCursor, shared.clientX, shared.clientY);\n\n\t      if (dropTarget && ((shared.copy && g(o.copySortSource)) || (!shared.copy || dropTarget !== shared.source))) {\n\t        // found valid target and (is not copy case or target is not initial container)\n\t        drop(shared.item, dropTarget);\n\t      } else if (g(o.removeOnSpill)) {\n\t        remove();\n\t      } else {\n\t        cancel();\n\t      }\n\n\t      // after release there is no container hovered\n\t      shared.target = null;\n\n\t      if (shared.lastElementBehindCursor) {\n\t        fireEvent(shared.lastElementBehindCursor, shared.dragOverEvents.dragularrelease, elementBehindCursor);\n\t      }\n\n\t      if (o.scope) {\n\t        o.scope.$emit(o.eventNames.dragularrelease, shared.item, shared.source);\n\t      }\n\t    }\n\n\t    // Main logic functions (end of event handler functions): -----------------------------------------------------------------------------------------------------------------\n\n\t    function isContainer(el) {\n\t      if(!el){\n\t        return false;\n\t      }\n\t      var i = o.nameSpace.length;\n\t      while (i--) {\n\t        if (shared.containers[o.nameSpace[i]].indexOf(el) !== -1) {\n\t          return true;\n\t        }\n\t      }\n\t      if (o.isContainer(el)) {\n\t        shared.tempModel = o.isContainerModel(el);\n\t        return true;\n\t      } else {\n\t        shared.tempModel = null;\n\t      }\n\t      return false;\n\t    }\n\n\t    function getContainersModel() {\n\t      return (typeof(o.containersModel) === 'function') ? sanitizeContainersModel(o.containersModel(drake, shared)) : o.containersModel;\n\t    }\n\n\t    function removeContainers(all) {\n\t      $rootScope.$applyAsync(function applyDestroyed() {\n\t        var changes = Array.isArray(all) ? all : makeArray(all);\n\t        changes.forEach(function forEachContainer(container) {\n\t          angular.forEach(o.nameSpace, function forEachNs(nameSpace) {\n\t            var index;\n\t            index = shared.containers[nameSpace].indexOf(container);\n\t            shared.containers[nameSpace].splice(index, 1);\n\t            shared.containersCtx[nameSpace].splice(index, 1);\n\t          });\n\t        });\n\t      });\n\t    }\n\n\t    function eventualMovements(remove) {\n\t      var op = remove ? 'off' : 'on';\n\t      regEvent(docElm, op, 'mousemove', startBecauseMouseMoved);\n\t    }\n\n\t    function movements(remove) {\n\t      var op = remove ? 'off' : 'on';\n\t      regEvent(docElm, op, 'selectstart', preventGrabbed); // IE8\n\t      regEvent(docElm, op, 'click', preventGrabbed);\n\t      regEvent(docElm, op, 'touchmove', preventGrabbed); // fixes touch devices scrolling while drag\n\t    }\n\n\t    function destroy() {\n\t      registerEvents(true);\n\t      removeContainers(initialContainers);\n\t      release({});\n\t    }\n\n\t    function startBecauseMouseMoved(e) {\n\t      if (!shared.grabbed || drake.dragging) {\n\t        return;\n\t      }\n\t      if (e.originalEvent){\n\t          e = e.originalEvent; // jQuery enviroment\n\t      }\n\t      if (whichMouseButton(e) === 0) {\n\t        release({});\n\t        return; // when text is selected on an input and then dragged, mouseup doesn't fire. this is our only hope\n\t      }\n\t      // truthy check fixes dragula-#239, equality fixes dragula-#207\n\t      if (e.clientX && e.clientX === shared.moveX && e.clientY && e.clientY === shared.moveY) {\n\t        return;\n\t      }\n\t      if (g(o.ignoreInputTextSelection)) {\n\t        var clientX = getCoord('clientX', e),\n\t          clientY = getCoord('clientY', e),\n\t          elementBehindCursor = doc.elementFromPoint(clientX, clientY);\n\t        if (isInput(elementBehindCursor)) {\n\t          return;\n\t        }\n\t      }\n\n\t      var grabbed = shared.grabbed; // calling end() unsets shared.grabbed\n\t      eventualMovements('remove'); // remove mousemove listener\n\t      movements();\n\t      end();\n\t      start(grabbed);\n\n\t      // automaticly detect direction of elements if not set in options\n\t      if (!o.direction && getParent(shared.sourceItem)) {\n\t        var parent = shared.sourceItem.parentNode,\n\t          parentHeight = parent.offsetHeight,\n\t          parentWidth = parent.offsetWidth,\n\t          childHeight = shared.sourceItem.clientHeight,\n\t          childWidth = shared.sourceItem.clientWidth;\n\t        o.direction = parentHeight / childHeight < parentWidth / childWidth ? 'horizontal' : 'vertical';\n\t      }\n\n\t      // get initial coordinates, used to render shared.mirror for first time\n\t      var offset = getOffset(shared.sourceItem);\n\t      shared.offsetX = getCoord('pageX', e) - offset.left;\n\t      shared.offsetY = getCoord('pageY', e) - offset.top;\n\t      shared.clientX = getCoord('clientX', e);\n\t      shared.clientY = getCoord('clientY', e);\n\n\t      // limiting area of shared.mirror movement, get initial coordinates\n\t      if (o.boundingBox) {\n\t        shared.offsetXr = getCoord('pageX', e) - offset.right;\n\t        shared.offsetYb = getCoord('pageY', e) - offset.bottom;\n\t      }\n\n\t      e.preventDefault();\n\n\t      addClass(shared.item, o.classes.transit);\n\t      renderMirrorImage();\n\t      // initial position\n\t      shared.mirror.style.left = shared.clientX - shared.offsetX + 'px';\n\t      shared.mirror.style.top = shared.clientY - shared.offsetY + 'px';\n\n\t      drag(e);\n\t    }\n\n\t    function canStart(item) {\n\t      if (drake.dragging && shared.mirror) {\n\t        console.log('usecase?');\n\t        return; // already dragging\n\t      }\n\n\t      var handle = item;\n\t      while (getParent(item) && !isContainer(getParent(item))) {\n\t        // break loop if user tries to drag item which is considered invalid handle\n\t        if (o.invalid(item, handle)) {\n\t          return;\n\t        }\n\t        item = getParent(item); // drag target should be immediate child of container\n\t        if (!item) {\n\t          return;\n\t        }\n\t      }\n\n\t      var source = getParent(item);\n\t      if (!source ||\n\t        o.invalid(item, handle) ||\n\t        !o.moves(item, source, handle, nextEl(item))) {\n\t        return;\n\t      }\n\n\t      return {\n\t        item: item,\n\t        source: source\n\t      };\n\t    }\n\n\t    function manualStart(item) {\n\t      var context = canStart(item);\n\t      if (context) {\n\t        start(context);\n\t      }\n\t    }\n\n\t    function start(context) {\n\t      shared.sourceItem = shared.item = context.item;\n\t      shared.source = context.source;\n\t      shared.initialSibling = shared.currentSibling = nextEl(context.item);\n\n\t      if (g(o.copy, [context.item, context.source])) {\n\t        shared.item = context.item.cloneNode(true);\n\t        shared.copy = true;\n\t        if (o.scope) {\n\t          o.scope.$emit(o.eventNames.dragularcloned, shared.item, context.item);\n\t        }\n\t      } else {\n\t        shared.copy = false;\n\t      }\n\n\t      // prepare models operations\n\t      var containerIndex = initialContainers.indexOf(context.source);\n\t      shared.sourceModel = getContainersModel()[containerIndex];\n\n\t      shared.sourceFilteredModel = o.containersFilteredModel[containerIndex];\n\t      shared.initialIndex = domIndexOf(context.item, context.source);\n\n\t      drake.dragging = true;\n\t      if (o.scope) {\n\t        o.scope.$emit(o.eventNames.dragulardrag, shared.sourceItem, shared.source);\n\t      }\n\n\t      return true;\n\t    }\n\n\t    function end() {\n\t      if (!drake.dragging || !shared.item) {\n\t        return;\n\t      }\n\t      drop(shared.item, getParent(shared.item));\n\t    }\n\n\t    function ungrab() {\n\t      shared.grabbed = false;\n\t      eventualMovements('remove');\n\t      movements('remove');\n\t    }\n\n\t    function drop(item, target) {\n\t      var sourceItem = shared.sourceItem,\n\t          currentSibling = shared.currentSibling;\n\t        \n\t      if (shared.copy && g(o.copySortSource) && target === shared.source && getParent(item)) {\n\t        item.parentNode.removeChild(shared.sourceItem);\n\t      }\n\n\t      if (shared.sourceModel && !isInitialPlacement(target)) {\n\n\t        var dropIndex = domIndexOf(item, target);\n\t        if(shared.targetCtx.fm){ // target has filtered model\n\t          // convert index from index-in-filteredModel to index-in-model\n\t          dropIndex = shared.targetCtx.m.indexOf(shared.targetCtx.fm[dropIndex]);\n\t        }\n\t        if(shared.sourceFilteredModel){ // target has filtered model\n\t          // convert index from index-in-filteredModel to index-in-model\n\t          shared.initialIndex = shared.sourceModel.indexOf(shared.sourceFilteredModel[shared.initialIndex]);\n\t        }\n\t        $rootScope.$applyAsync(function applyDrop() {\n\t          if(!shared.sourceModel){\n\t              return;\n\t          }\n\t          if (target === shared.source) {\n\t            shared.sourceModel.splice(dropIndex, 0, shared.sourceModel.splice(shared.initialIndex, 1)[0]);\n\t          } else {\n\t            shared.dropElmModel = shared.copy && !o.dontCopyModel ? angular.copy(shared.sourceModel[shared.initialIndex]) : shared.sourceModel[shared.initialIndex];\n\n\t            if (!shared.tempModel) {\n\t              shared.targetModel = shared.targetCtx.m;\n\t            } else {\n\t              shared.targetModel = shared.tempModel;\n\t            }\n\t            \n\t            target.removeChild(item); // element must be removed for ngRepeat to apply correctly\n\n\t            if (!shared.copy) {\n\t              shared.sourceModel.splice(shared.initialIndex, 1);\n\t            }\n\t            shared.targetModel.splice(dropIndex, 0, shared.dropElmModel);\n\t          }\n\n\t          if (getParent(item)) {\n\t            item.parentNode.removeChild(item);\n\t          }\n\n\t          afterDrop();\n\t        });\n\t      } else {\n\t        afterDrop();\n\t      }\n\n\t      function afterDrop() {\n\t        if(o.compileItemOnDrop){\n\t            var scope = angular.element(target).scope();\n\t            scope.$applyAsync(function(){\n\t                var content = $compile(shared.copy ? sourceItem.cloneNode(true) : sourceItem)(scope);                   \n\t                if(item.parentNode === target){\n\t                    target.removeChild(item);\n\t                }\n\t                target.insertBefore(content[0], currentSibling);\n\t            });\n\t        }\n\t        \n\t        if (o.scope) {\n\t          if (isInitialPlacement(target)) {\n\t            o.scope.$emit(o.eventNames.dragularcancel, item, shared.source, shared.sourceModel, shared.initialIndex);\n\t          } else {\n\t            o.scope.$emit(o.eventNames.dragulardrop, item, target, shared.source, shared.sourceModel, shared.initialIndex, shared.targetModel, dropIndex);\n\t          }\n\t        }\n\t        \n\t        cleanup();\n\t      }\n\t    }\n\n\t    function remove() {\n\t      if (!drake.dragging) {\n\t        return;\n\t      }\n\t      var parent = getParent(shared.item);\n\n\t      if (parent) {\n\t        parent.removeChild(shared.item);\n\t      }\n\n\t      if (shared.sourceModel) {\n\t        $rootScope.$applyAsync(function removeModel() {\n\t          shared.sourceModel.splice(shared.initialIndex, 1);\n\t          cleanup();\n\t        });\n\t      }\n\n\t      if (o.scope) {\n\t        o.scope.$emit(shared.copy ? o.eventNames.dragularcancel : o.eventNames.dragularremove, shared.item, parent, shared.sourceModel, shared.initialIndex);\n\t      }\n\t      if (!shared.sourceModel) {\n\t        cleanup();\n\t      }\n\t    }\n\n\t    function cancel(revert) {\n\t      if (!drake.dragging) {\n\t        return;\n\t      }\n\t      var reverts = arguments.length > 0 ? revert : g(o.revertOnSpill),\n\t        parent = getParent(shared.item);\n\n\t      var initial = isInitialPlacement(parent);\n\t      if (!initial && !shared.copy && reverts) {\n\t        shared.source.insertBefore(shared.item, shared.initialSibling);\n\t      }\n\t      if (shared.sourceModel && !shared.copy && !reverts) {\n\t        drop(shared.item, parent);\n\t      } else if (o.scope) {\n\t        if (initial || reverts) {\n\t          o.scope.$emit(o.eventNames.dragularcancel, shared.item, shared.source);\n\t        }\n\t      }\n\n\t      if (!shared.sourceModel || shared.copy || reverts || initial) {\n\t        cleanup();\n\t      }\n\t    }\n\n\t    function cleanup() {\n\t      ungrab();\n\t      removeMirrorImage();\n\n\t      if (shared.item) {\n\t        rmClass(shared.item, o.classes.transit);\n\t      }\n\n\t      drake.dragging = false;\n\n\t      if (g(o.removeOnSpill) === true) {\n\t        spillOut();\n\t      }\n\n\t      if (o.scope) {\n\t        if(shared.lastDropTarget){\n\t         o.scope.$emit(o.eventNames.dragularout, shared.item, shared.lastDropTarget, shared.source);\n\t        }\n\t        o.scope.$emit(o.eventNames.dragulardragend, shared.item);\n\t      }\n\n\t      shared.source = shared.item = shared.sourceItem = shared.initialSibling = shared.currentSibling = shared.sourceModel = null;\n\t      shared.initialIndex = shared.currentIndex = shared.lastDropTarget = shared.tempModel = shared.targetModel = null;\n\t      shared.dropElmModel = shared.targetCtx = shared.copy = shared.moveX = shared.moveY = null;\n\t    }\n\n\t    // is item currently placed in original container and original position?\n\t    function isInitialPlacement(target, s) { // watch performance - running each move several times!\n\t      var sibling = s || (shared.mirror ? shared.currentSibling : nextEl(shared.item));\n\t      return target === shared.source && sibling === shared.initialSibling;\n\t    }\n\n\t    // find valid drop container\n\t    function findDropTarget(elementBehindCursor, clientX, clientY) {  // watch performance - running each move!\n\t      var target = elementBehindCursor;\n\n\t      while (target && !accepted()) {\n\t        target = getParent(target);\n\t      }\n\t      return target;\n\n\t      function accepted() {\n\t        var accepts = false;\n\n\t        if (isContainer(target)) { // is droppable?\n\n\t          var immediate = getImmediateChild(target, elementBehindCursor),\n\t            reference = getReference(target, immediate, clientX, clientY),\n\t            initial = isInitialPlacement(target, reference),\n\t            i = o.nameSpace.length;\n\n\t          while (i--) {\n\t            if (shared.containers[o.nameSpace[i]].indexOf(target) !== -1) {\n\t              shared.targetCtx = shared.containersCtx[o.nameSpace[i]][shared.containers[o.nameSpace[i]].indexOf(target)];\n\t              break;\n\t            }\n\t            if (!shared.targetCtx) {\n\t              shared.targetCtx = shared.containersCtx.dragularCommon[shared.containers.dragularCommon.indexOf(target)];\n\t            }\n\t          }\n\n\t          accepts = initial ||\n\t            (shared.targetCtx.o.accepts(shared.item, target, shared.source, reference, shared.sourceModel, shared.initialIndex) &&\n\t              o.canBeAccepted(shared.item, target, shared.source, reference, shared.sourceModel, shared.initialIndex));\n\n\t          if (shared.target !== target) { // used for scroll issue\n\t            shared.target = target;\n\t          }\n\t        }\n\t        return accepts;\n\t      }\n\t    }\n\n\t    function drag(e) { // watch performance - running each move!\n\t      if (!shared.mirror) {\n\t        return;\n\t      }\n\t      if (e.originalEvent){\n\t          e = e.originalEvent; // jQuery enviroment\n\t      }\n\n\t      // update coordinates\n\t      shared.clientX = getCoord('clientX', e);\n\t      shared.clientY = getCoord('clientY', e);\n\n\t      // count mirror coordiates\n\t      var x = shared.clientX - shared.offsetX,\n\t        y = shared.clientY - shared.offsetY,\n\t        pageX,\n\t        pageY,\n\t        offsetBox;\n\n\t      // fill extra properties if boundingBox is used\n\t      if (o.boundingBox) {\n\t        pageX = getCoord('pageX', e);\n\t        pageY = getCoord('pageY', e);\n\t        offsetBox = getOffset(o.boundingBox);\n\t      }\n\n\t      if (!o.lockY) {\n\t        if (!o.boundingBox || (pageX > offsetBox.left + shared.offsetX && pageX < offsetBox.right + shared.offsetXr)) {\n\t          shared.mirror.style.left = x + 'px';\n\t        } else if (o.boundingBox) { // check again in case user scrolled the view\n\t          if (pageX < offsetBox.left + shared.offsetX) {\n\t            shared.mirror.style.left = shared.clientX - (pageX - offsetBox.left) + 'px';\n\t          } else {\n\t            shared.mirror.style.left = shared.clientX - shared.mirrorWidth - (pageX - offsetBox.right) + 'px';\n\t          }\n\t        }\n\t      }\n\t      if (!o.lockX) {\n\t        if (!o.boundingBox || (pageY > offsetBox.top + shared.offsetY && pageY < offsetBox.bottom + shared.offsetYb)) {\n\t          shared.mirror.style.top = y + 'px';\n\t        } else if (o.boundingBox) { // check again in case user scrolled the view\n\t          if (pageY < offsetBox.top + shared.offsetY) {\n\t            shared.mirror.style.top = shared.clientY - (pageY - offsetBox.top) + 'px';\n\t          } else {\n\t            shared.mirror.style.top = shared.clientY - shared.mirrorHeight - (pageY - offsetBox.bottom) + 'px';\n\t          }\n\t        }\n\t      }\n\n\t      var elementBehindCursor = getElementBehindPoint(shared.mirror, shared.clientX, shared.clientY),\n\t        dropTarget = findDropTarget(elementBehindCursor, shared.clientX, shared.clientY),\n\t        changed = dropTarget !== shared.lastDropTarget;\n\n\t      if (elementBehindCursor !== shared.lastElementBehindCursor) {\n\t        fireEvent(elementBehindCursor, shared.dragOverEvents.dragularenter, !!dropTarget);\n\t        if (shared.lastElementBehindCursor) {\n\t          fireEvent(shared.lastElementBehindCursor, shared.dragOverEvents.dragularleave, elementBehindCursor);\n\t        }\n\t        shared.lastElementBehindCursor = elementBehindCursor;\n\t      }\n\n\t      if (changed) {\n\t        if (shared.lastDropTarget) {\n\t          moved('out');\n\t        }\n\t        shared.lastDropTarget = dropTarget;\n\t        moved('over');\n\t      }\n\n\t      // do not copy in same container\n\t      if (dropTarget === shared.source && shared.copy && !g(o.copySortSource)) {\n\t        if (getParent(shared.item)) {\n\t          shared.item.parentNode.removeChild(shared.item);\n\t        }\n\t        return;\n\t      }\n\n\t      var reference,\n\t        immediate = getImmediateChild(dropTarget, elementBehindCursor);\n\n\t      if (immediate !== null) {\n\t        reference = getReference(dropTarget, immediate, shared.clientX, shared.clientY);\n\t      } else if (g(o.revertOnSpill) === true && !shared.copy) {\n\t        // the case that mirror is not over valid target and reverting is on and copy is off\n\t        reference = shared.initialSibling;\n\t        dropTarget = shared.source;\n\t      } else {\n\t        // the case that mirror is not over valid target and removing is on or copy is on\n\t        if (shared.copy && getParent(shared.item)) {\n\t          // remove item or copy of item\n\t          shared.item.parentNode.removeChild(shared.item);\n\t        }\n\t        return;\n\t      }\n\n\t      if (reference === null ||\n\t        reference !== shared.item &&\n\t        reference !== nextEl(shared.item) &&\n\t        reference !== shared.currentSibling) {\n\t        // moving item/copy to new container from previous one\n\t        shared.currentSibling = reference;\n\n\t        dropTarget.insertBefore(shared.item, reference); // if reference is null item is inserted at the end\n\n\t        if (o.scope) {\n\t          o.scope.$emit(o.eventNames.dragularshadow, shared.item, dropTarget);\n\t        }\n\t      }\n\n\t      function moved(type) {\n\t        if (o.scope) {\n\t          o.scope.$emit(o.eventNames['dragular' + type], shared.item, shared.lastDropTarget, shared.source);\n\t        }\n\t        if (g(o.removeOnSpill) === true) {\n\t          type === 'over' ? spillOver() : spillOut();\n\t        }\n\t      }\n\t    }\n\n\t    function spillOver() {\n\t      rmClass(shared.item, o.classes.hide);\n\t    }\n\n\t    function spillOut() {\n\t      if (drake.dragging) {\n\t        addClass(shared.item, o.classes.hide);\n\t      }\n\t    }\n\n\t    function scrollContainer(e) {\n\t      if (shared.target) {\n\t        if (e.originalEvent){\n\t            e = e.originalEvent; // jQuery enviroment\n\t        }\n\t        var before = shared.target.scrollTop;\n\t        shared.target.scrollTop += e.deltaY;\n\t        // block scroll of the document when container can be scrolled\n\t        if (before !== shared.target.scrollTop) {\n\t          e.stopPropagation();\n\t          e.preventDefault();\n\t        }\n\t      }\n\t    }\n\n\t    function renderMirrorImage() {\n\t      if (shared.mirror) {\n\t        return;\n\t      }\n\t      var rect = shared.sourceItem.getBoundingClientRect();\n\t      shared.mirror = shared.sourceItem.cloneNode(true);\n\t      shared.mirrorWidth = rect.width;\n\t      shared.mirrorHeight = rect.height;\n\t      shared.mirror.style.width = getRectWidth(rect) + 'px';\n\t      shared.mirror.style.height = getRectHeight(rect) + 'px';\n\t      rmClass(shared.mirror, o.classes.transit);\n\t      addClass(shared.mirror, o.classes.mirror);\n\t      o.mirrorContainer.appendChild(shared.mirror);\n\t      regEvent(docElm, 'on', 'mousemove', drag);\n\t      addClass(doc.body, o.classes.unselectable);\n\t      regEvent(shared.mirror, 'on', 'wheel', scrollContainer);\n\t      if (o.scope) {\n\t        o.scope.$emit(o.eventNames.dragularcloned, shared.mirror, shared.sourceItem);\n\t      }\n\t    }\n\n\t    function removeMirrorImage() {\n\t      if (shared.mirror) {\n\t        rmClass(doc.body, o.classes.unselectable);\n\t        regEvent(docElm, 'off', 'mousemove', drag);\n\t        regEvent(shared.mirror, 'off', 'wheel', scrollContainer);\n\t        if(getParent(shared.mirror)){\n\t          shared.mirror.parentNode.removeChild(shared.mirror);\n\t        }\n\t        shared.mirror = null;\n\t      }\n\t    }\n\n\t    function getImmediateChild(dropTarget, target) { // watch performance - running each move several times!\n\t      var immediate = target;\n\t      while (immediate !== dropTarget && getParent(immediate) !== dropTarget) {\n\t        immediate = getParent(immediate);\n\t      }\n\t      if (immediate === docElm) {\n\t        return null;\n\t      }\n\t      return immediate;\n\t    }\n\n\t    function getReference(dropTarget, target, x, y) { // watch performance - running each move several times!\n\t      var horizontal = o.direction === 'horizontal';\n\t      return target !== dropTarget ? inside() : outside();\n\n\t      function outside() { // slower, but able to figure out any position\n\t        var len = dropTarget.children.length,\n\t          i, el, rect;\n\t        for (i = 0; i < len; i++) {\n\t          el = dropTarget.children[i];\n\t          rect = el.getBoundingClientRect();\n\t          if (horizontal && rect.left > x) {\n\t            return el;\n\t          }\n\t          if (!horizontal && rect.top > y) {\n\t            return el;\n\t          }\n\t        }\n\t        return null;\n\t      }\n\n\t      function inside() { // faster, but only available if dropped inside a child element\n\t        var rect = target.getBoundingClientRect();\n\t        if (horizontal) {\n\t          return resolve(x > rect.left + getRectWidth(rect) / 2);\n\t        }\n\t        return resolve(y > rect.top + getRectHeight(rect) / 2);\n\t      }\n\n\t      function resolve(after) {\n\t        return after ? nextEl(target) : target;\n\t      }\n\t    }\n\n\t    function getElementBehindPoint(point, x, y) { // watch performance - running each move!\n\t      var p = point || {},\n\t        state = p.className,\n\t        el;\n\t      p.className += ' ' + o.classes.hide;\n\t      el = doc.elementFromPoint(x, y);\n\t      p.className = state;\n\t      return el;\n\t    }\n\t  } // end of service\n\n\t  /****************************************************************************************************************************/\n\t  /****************************************************************************************************************************/\n\t  /****************************************************************************************************************************/\n\n\t  // HELPERS FUNCTIONS:\n\n\t  function regEvent(el, op, type, fn) {\n\t    var touch = {\n\t        mouseup: 'touchend',\n\t        mousedown: 'touchstart',\n\t        mousemove: 'touchmove'\n\t      },\n\t      pointers = {\n\t        mouseup: 'pointerup',\n\t        mousedown: 'pointerdown',\n\t        mousemove: 'pointermove'\n\t      },\n\t      microsoft = {\n\t        mouseup: 'MSPointerUp',\n\t        mousedown: 'MSPointerDown',\n\t        mousemove: 'MSPointerMove'\n\t      },\n\t      $el = angular.element(el);\n\n\t    if (global.navigator.pointerEnabled && pointers[type]) {\n\t      $el[op](pointers[type], fn);\n\t    } else if (global.navigator.msPointerEnabled && microsoft[type]) {\n\t      $el[op](microsoft[type], fn);\n\t    } else if (touch[type]) {\n\t      $el[op](touch[type], fn);\n\t    }\n\t    $el[op](type, fn);\n\t  }\n\n\t  function never() {\n\t    return false;\n\t  }\n\n\t  function always() {\n\t    return true;\n\t  }\n\n\t  // make array from array-like objects or from single element (based on bevacqua/atoa)\n\t  function makeArray(all, startIndex) {\n\t    if (Array.isArray(all)) {\n\t      return all;\n\t    }\n\t    if (all.length) { // is array-like\n\t      return Array.prototype.slice.call(all, startIndex); // convert to vanilla js array\n\t    } else { // is one element\n\t      return [all];\n\t    }\n\t  }\n\n\t  function whichMouseButton (e) {\n\t    if (e.touches) { return e.touches.length; }\n\t    if (e.originalEvent && e.originalEvent.touches) { return e.originalEvent.touches.length; }\n\t    if (e.buttons !== undefined) { return e.buttons; }\n\t    if (e.which !== undefined) { return e.which; }\n\t    var button = e.button;\n\t    if (button !== undefined) { // see https://github.com/jquery/jquery/blob/99e8ff1baa7ae341e94bb89c3e84570c7c3ad9ea/src/event.js#L573-L575\n\t      return button & 1 ? 1 : button & 2 ? 3 : (button & 4 ? 2 : 0);\n\t    }\n\t  }\n\n\t  function preventGrabbed(e) {\n\t    if (e.originalEvent){\n\t        e = e.originalEvent; // jQuery enviroment\n\t    }\n\t    if (shared.grabbed) {\n\t      e.preventDefault();\n\t    }\n\t  }\n\n\t  function getScroll(scrollProp, offsetProp) {\n\t    if (typeof window[offsetProp] !== 'undefined') {\n\t      return window[offsetProp];\n\t    }\n\t    if (docElm.clientHeight) {\n\t      return docElm[scrollProp];\n\t    }\n\t    return doc.body[scrollProp];\n\t  }\n\n\t  function getOffset(el) { // watch performance - running each move!\n\t    var rect = el.getBoundingClientRect(),\n\t      scrollTop = getScroll('scrollTop', 'pageYOffset'),\n\t      scrollLeft = getScroll('scrollLeft', 'pageXOffset');\n\t    return {\n\t      left: rect.left + scrollLeft,\n\t      right: rect.right + scrollLeft,\n\t      top: rect.top + scrollTop,\n\t      bottom: rect.bottom + scrollTop\n\t    };\n\t  }\n\n\t  function getRectWidth(rect) {\n\t    return rect.width || (rect.right - rect.left);\n\t  }\n\n\t  function getRectHeight(rect) {\n\t    return rect.height || (rect.bottom - rect.top);\n\t  }\n\n\t  function getEmptyObject() {\n\t    return {};\n\t  }\n\n\t  function nextEl(el) {\n\t    return el.nextElementSibling || manually();\n\n\t    function manually() {\n\t      var sibling = el;\n\t      do {\n\t        sibling = sibling.nextSibling;\n\t      } while (sibling && sibling.nodeType !== 1);\n\t      return sibling;\n\t    }\n\t  }\n\n\t  //Cannot use angular.isElement because we need to check plain dom element, no jQlite wrapped\n\t  function isElement(obj) {\n\t    return (\n\t      typeof HTMLElement === 'object' ? obj instanceof HTMLElement : //DOM2\n\t      obj && typeof obj === 'object' && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === 'string'\n\t    );\n\t  }\n\n\t  function lookupClass(className) {\n\t    var cached = shared.classesCache[className];\n\t    if (cached) {\n\t      cached.lastIndex = 0;\n\t    } else {\n\t      shared.classesCache[className] = cached = new RegExp('(?:^|\\\\s)' + className + '(?:\\\\s|$)', 'g');\n\t    }\n\t    return cached;\n\t  }\n\n\t  function addClass(el, className) {\n\t    var current = el.className;\n\t    if (!current.length) {\n\t      el.className = className;\n\t    } else if (!lookupClass(className).test(current)) {\n\t      el.className += ' ' + className;\n\t    }\n\t  }\n\n\t  function rmClass(el, className) {\n\t    el.className = el.className.replace(lookupClass(className), ' ').trim();\n\t  }\n\n\t  function getEventHost(e) {\n\t    // on touchend event, we have to use `e.changedTouches`\n\t    // see http://stackoverflow.com/questions/7192563/touchend-event-properties\n\t    // see https://github.com/bevacqua/dragula/issues/34\n\t    if (e.targetTouches && e.targetTouches.length) {\n\t      return e.targetTouches[0];\n\t    }\n\t    if (e.changedTouches && e.changedTouches.length) {\n\t      return e.changedTouches[0];\n\t    }\n\t    return e;\n\t  }\n\n\t  function getCoord(coord, e) { // watch performance - running each move several times!\n\t    var host = getEventHost(e);\n\t    var missMap = {\n\t      pageX: 'clientX', // IE8\n\t      pageY: 'clientY' // IE8\n\t    };\n\t    if (coord in missMap && !(coord in host) && missMap[coord] in host) {\n\t      coord = missMap[coord];\n\t    }\n\n\t    // Adding support for touch events, as they are not functional in the original\n\t    if (!host.type || host.type.indexOf('touch') < 0) {\n\t      return host[coord];\n\t    } else {\n\t      if (host.type.indexOf('end') === -1) {\n\t        // No clientX or clientY in a touch event\n\t        return host.originalEvent.touches[0][coord.replace('client', 'page')];\n\t      }\n\t      // Nothing should happen for touchend\n\t      return false;\n\t    }\n\t  }\n\n\t  function getParent (el) { // watch performance - running each move!\n\t    return el.parentNode === document ? null : el.parentNode;\n\t  }\n\n\t  function isInput (el) {\n\t    return el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT' || isEditable(el);\n\t  }\n\n\t  function isEditable (el) {\n\t    if (!el) { return false; } // no parents were editable\n\t    if (el.contentEditable === 'false') { return false; } // stop the lookup\n\t    if (el.contentEditable === 'true') { return true; } // found a contentEditable element in the chain\n\t    return isEditable(getParent(el)); // contentEditable is set to 'inherit'\n\t  }\n\n\t  function domIndexOf(child, parent) {\n\t    return Array.prototype.indexOf.call(angular.element(parent).children(), child);\n\t  }\n\n\t  function fireEvent(target, e, extra) { // watch performance - running each move!\n\t    if (!target) {\n\t      return;\n\t    }\n\t    shared.extra = extra;\n\t    if (target.dispatchEvent) {\n\t      target.dispatchEvent(e);\n\t    } else {\n\t      target.fireEvent('on' + e.eventType, e);\n\t    }\n\t  }\n\n\t  function getBool(prop, args, context){\n\t    if(angular.isFunction(prop)){\n\t      return !!prop.apply(context || this, args || shared);\n\t    }else{\n\t      return !!prop;\n\t    }\n\t  }\n\n\t};\n\n\tdragularService.$inject = ['$rootScope', '$compile'];\n\n\tmodule.exports = dragularService;\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar examplesRouter = function ($stateProvider, $urlRouterProvider) {\n\t  $urlRouterProvider.otherwise('/home');\n\n\t  var timer,\n\t    ctrl = function routerCtrl($state, $stateParams, $timeout) {\n\t      // go to install notes by default\n\t      if (!$stateParams.link) {\n\t        timer = $timeout(function timer() {\n\t          $state.go('docs.detail', {\n\t            link: 'docsInstall'\n\t          });\n\t        },0);\n\t      }else{\n\t        $timeout.cancel(timer);\n\t      }\n\t    };\n\n\t  ctrl.$inject = ['$state', '$stateParams', '$timeout'];\n\n\t  $stateProvider\n\t    .state('home', {\n\t      url: '/home',\n\t      templateUrl: 'partials/partial-home.html'\n\t    })\n\t    .state('docs', {\n\t      url: '/docs',\n\t      templateUrl: 'partials/partial-docs.html',\n\t      controller: ctrl\n\t    })\n\t    .state('docs.detail', {\n\t      url: '/:link',\n\t      templateUrl: function($stateParams) {\n\t        return $stateParams.link + '/' + $stateParams.link + '.html';\n\t      },\n\t      controller: ctrl\n\t    })\n\t    .state('contribute', {\n\t      url: '/contribute',\n\t      templateUrl: 'partials/partial-contribute.html'\n\t    });\n\t};\n\n\texamplesRouter.$inject = ['$stateProvider', '$urlRouterProvider'];\n\n\tmodule.exports = examplesRouter;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar BasicCtrl = function ($element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t  dragularService('.containerVertical');\n\t};\n\n\tBasicCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = BasicCtrl;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\tvar BasicModelCtrl = function ($scope, $element, dragularService) {\n\t  $scope.items1 = [{\n\t    content: 'Move me, but you can only drop me in one of these containers.'\n\t  }, {\n\t    content: 'If you try to drop me somewhere other than these containers, I\\'ll just come back.'\n\t  }, {\n\t    content: 'Item 3'\n\t  }, {\n\t    content: 'Item 4'\n\t  }];\n\t  $scope.items2 = [{\n\t    content: 'Item 5'\n\t  }, {\n\t    content: 'Item 6'\n\t  }, {\n\t    content: 'Item 7'\n\t  }, {\n\t    content: 'Item 8'\n\t  }];\n\t  var containers = $element.children().eq(0).children();\n\t  dragularService.cleanEnviroment();\n\t  dragularService([containers[0],containers[1]],{\n\t    containersModel: [$scope.items1, $scope.items2]\n\t  });\n\t};\n\n\tBasicModelCtrl.$inject = ['$scope', '$element', 'dragularService'];\n\n\tmodule.exports = BasicModelCtrl;\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar BoundingBoxCtrl = function ($element, dragularService) {\n\t  var boundingBox = $element[0];\n\t  dragularService.cleanEnviroment();\n\n\t  dragularService($element.children(), {\n\t    boundingBox: boundingBox\n\t  });\n\t};\n\n\tBoundingBoxCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = BoundingBoxCtrl;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar BoundingBoxLockXCtrl = function ($element, dragularService) {\n\t  var boundingBox = $element.children().children()[0];\n\t  dragularService.cleanEnviroment();\n\t  dragularService(boundingBox, {\n\t    boundingBox: boundingBox,\n\t    lockX: true\n\t  });\n\t};\n\n\tBoundingBoxLockXCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = BoundingBoxLockXCtrl;\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar BoundingBoxLockYCtrl = function ($element, dragularService) {\n\t  var boundingBox = $element.children().children()[0];\n\t  dragularService.cleanEnviroment();\n\t  dragularService(boundingBox, {\n\t    boundingBox: boundingBox,\n\t    lockY: true\n\t  });\n\t};\n\n\tBoundingBoxLockYCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = BoundingBoxLockYCtrl;\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar CopyCtrl = function ($element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t  dragularService($element.children(), {\n\t    copy: true\n\t  });\n\t};\n\n\tCopyCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = CopyCtrl;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar CopyModelCtrl = function ($scope, $element, dragularService) {\n\t  $scope.items1 = [{\n\t    content: 'Move me, and make copy on drop.'\n\t  }, {\n\t    content: 'If you try to drop me somewhere other than these containers, I\\'ll just come back.'\n\t  }, {\n\t    content: 'Item 3'\n\t  }, {\n\t    content: 'Item 4'\n\t  }];\n\t  $scope.items2 = [{\n\t    content: 'Item 5'\n\t  }, {\n\t    content: 'Item 6'\n\t  }, {\n\t    content: 'Item 7'\n\t  }, {\n\t    content: 'Item 8'\n\t  }];\n\t  var containers = $element.children().eq(0).children();\n\t  dragularService.cleanEnviroment();\n\t  dragularService([containers[0],containers[1]],{\n\t    containersModel: [$scope.items1, $scope.items2],\n\t    copy: true\n\t  });\n\t};\n\n\tCopyModelCtrl.$inject = ['$scope', '$element', 'dragularService'];\n\n\tmodule.exports = CopyModelCtrl;\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar CustomClassesCtrl = function ($element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t  dragularService($element.children(), {\n\t    classes: {\n\t      mirror: 'custom-green-mirror'\n\t    }\n\t  });\n\t};\n\n\tCustomClassesCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = CustomClassesCtrl;\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar DifferentOptionsModelCtrl = function ($scope, $element, dragularService) {\n\t  $scope.items1 = [{\n\t    content: 'Move me, but you can only drop me in one of these containers.'\n\t  }, {\n\t    content: 'If you try to drop me somewhere other than these containers, I\\'ll just come back.'\n\t  }, {\n\t    content: 'Item 3'\n\t  }, {\n\t    content: 'Item 4'\n\t  }];\n\t  $scope.items2 = [{\n\t    content: 'Item 5'\n\t  }, {\n\t    content: 'Item 6'\n\t  }, {\n\t    content: 'Item 7'\n\t  }, {\n\t    content: 'Item 8'\n\t  }];\n\n\t  var containerLeft = document.querySelector('#containerLeft'),\n\t    containerRight = document.querySelector('#containerRight');\n\n\t  function accepts(el, target, source) {\n\t    // left->right || in same container\n\t    if (source === containerLeft || source === target) {\n\t      return true;\n\t    }\n\t  }\n\n\t  dragularService.cleanEnviroment();\n\t  dragularService([containerLeft], {\n\t    containersModel: [$scope.items1],\n\t    copy: true,\n\t    copySortSource: true,\n\t    //move only from left to right\n\t    accepts: accepts\n\t  });\n\n\t  dragularService([containerRight], {\n\t    containersModel: [$scope.items2],\n\t    removeOnSpill: true,\n\t    //move only from left to right\n\t    accepts: accepts\n\t  });\n\n\t};\n\n\tDifferentOptionsModelCtrl.$inject = ['$scope', '$element', 'dragularService'];\n\n\tmodule.exports = DifferentOptionsModelCtrl;\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar DirectiveCtrl = function ($scope) {\n\t  $scope.dragularOptions = {\n\t    classes: {\n\t      mirror: 'custom-green-mirror'\n\t    },\n\t    nameSpace: 'same' // just connecting left and right container\n\t  };\n\t};\n\n\tDirectiveCtrl.$inject = ['$scope'];\n\n\tmodule.exports = DirectiveCtrl;\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar DirectiveModelCtrl = function ($scope) {\n\t  $scope.items1 = [{\n\t    content: 'Move me, and make copy on drop.'\n\t  }, {\n\t    content: 'If you try to drop me somewhere other than these containers, I\\'ll just come back.'\n\t  }, {\n\t    content: 'Item 3'\n\t  }, {\n\t    content: 'Item 4'\n\t  }];\n\t  $scope.items2 = [{\n\t    content: 'Item 5'\n\t  }, {\n\t    content: 'Item 6'\n\t  }, {\n\t    content: 'Item 7'\n\t  }, {\n\t    content: 'Item 8'\n\t  }];\n\t  $scope.dragularOptions = {\n\t    containersModel: $scope.items1,\n\t    classes: {\n\t      mirror: 'custom-green-mirror'\n\t    },\n\t    nameSpace: 'common' // just connecting left and right container\n\t  };\n\t};\n\n\tDirectiveModelCtrl.$inject = ['$scope'];\n\n\tmodule.exports = DirectiveModelCtrl;\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t/* global angular */\n\t'use strict';\n\n\tvar DragOverEventsCtrl = function ($element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t  dragularService([$element.children()[0], $element.children()[2]], {\n\t    nameSpace: 'apples'\n\t  });\n\t  dragularService([$element.children()[1], $element.children()[3]], {\n\t    nameSpace: 'oranges'\n\t  });\n\n\t  // containers events handling\n\t  function registerEvents(el) {\n\t    el.on('dragularenter', function(e) {\n\t      if (el[0] === e.target) { // filter bubbled\n\t        el.addClass(dragularService.shared.extra ? 'gu-over-accept' : 'gu-over-decline');\n\t      }\n\t    });\n\t    el.on('dragularleave dragularrelease', function(e) {\n\t      if ((el[0] === e.target && // filter bubbled\n\t        dragularService.shared.extra && // extra on dragleave contains element the drag is leaving to\n\t        dragularService.shared.extra.parentElement !== e.target) || // is that element child of this container?\n\t        e.type === 'dragularrelease') {\n\t        el.removeClass('gu-over-accept');\n\t        el.removeClass('gu-over-decline');\n\t      }\n\t    });\n\t  }\n\n\t  angular.forEach($element.children(), function forEachChild(el) {\n\t    registerEvents(angular.element(el));\n\t  });\n\n\t  // notContainer events handling\n\t  var notContainer = angular.element(document.getElementsByClassName('notContainer'));\n\t  notContainer.on('dragularenter', function() {\n\t    notContainer.addClass('gu-over');\n\t  });\n\t  notContainer.on('dragularleave dragularrelease', function() {\n\t    notContainer.removeClass('gu-over');\n\t  });\n\t};\n\n\tDragOverEventsCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = DragOverEventsCtrl;\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar EventsCtrl = function ($scope, $element, dragularService, $timeout) {\n\t  dragularService.cleanEnviroment();\n\t  dragularService($element.children(), {\n\t    scope: $scope\n\t  });\n\t  $scope.$on('dragulardrag', function(e, el) {\n\t    e.stopPropagation();\n\t    el.className = el.className.replace(' ex-moved', '');\n\t  });\n\t  $scope.$on('dragulardrop', function(e, el) {\n\t    e.stopPropagation();\n\t    $timeout(function() {\n\t      el.className += ' ex-moved';\n\t    }, 0);\n\t  });\n\n\t  $scope.$on('dragularcloned', myFn('cloned'));\n\t  $scope.$on('dragulardrag', myFn('drag'));\n\t  $scope.$on('dragularcancel', myFn('cancel'));\n\t  $scope.$on('dragulardrop', myFn('drop'));\n\t  $scope.$on('dragularremove', myFn('remove'));\n\t  $scope.$on('dragulardragend', myFn('dragend'));\n\t  $scope.$on('dragularshadow', myFn('shadow'));\n\n\t  function myFn(eventName) {\n\t    return function() {\n\t      console.log(eventName, arguments);\n\t    };\n\t  }\n\t};\n\n\tEventsCtrl.$inject = ['$scope', '$element', 'dragularService', '$timeout'];\n\n\tmodule.exports = EventsCtrl;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar HandleCtrl = function ($element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t\tdragularService($element.children(), {\n\t    moves: function(el, container, handle) {\n\t      return handle.className === 'handle';\n\t    }\n\t  });\n\t};\n\n\tHandleCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = HandleCtrl;\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar IsContainerModelCtrl = function ($scope, $element, dragularService) {\n\t  $scope.items1 = [{\n\t    content: 'Move me, but you can only drop me in one of these containers.'\n\t  }, {\n\t    content: 'If you try to drop me somewhere other than these containers, I\\'ll just come back.'\n\t  }, {\n\t    content: 'Item 3'\n\t  }, {\n\t    content: 'Item 4'\n\t  }];\n\t  $scope.cartModel = [];\n\n\t  var containerLeft = document.querySelector('#containerLeft');\n\n\t  dragularService.cleanEnviroment();\n\t  dragularService([containerLeft], {\n\t    containersModel: [$scope.items1],\n\t    copy: true,\n\t    isContainer: function isContainer (el) {\n\t      return el.id === 'cart';\n\t    },\n\t    isContainerModel: function getModel (){\n\t      return $scope.cartModel;\n\t    }\n\t  });\n\n\t  $scope.removeItem = function removeItem() {\n\t    var index = $scope.cartModel.indexOf(this.item);\n\t    $scope.cartModel.splice(index, 1);\n\t  };\n\t};\n\n\tIsContainerModelCtrl.$inject = ['$scope', '$element', 'dragularService'];\n\n\tmodule.exports = IsContainerModelCtrl;\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar NameSpacesCtrl = function ($element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t  dragularService([$element.children()[0], $element.children()[2]], {\n\t    nameSpace: 'apples'\n\t  });\n\t  dragularService($element.children()[1], {\n\t    nameSpace: 'oranges'\n\t  });\n\t  dragularService($element.children()[3], { // mixed\n\t    nameSpace: ['oranges', 'apples']\n\t  });\n\t};\n\n\tNameSpacesCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = NameSpacesCtrl;\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar NestedNgRepeatCtrl = function ($timeout, $scope, $element, dragularService) {\n\t  $timeout(function() { // timeount due to ngRepeat to be ready\n\t    dragularService.cleanEnviroment();\n\t    dragularService($element, {\n\t      nameSpace: 'rows',\n\t      moves: function rowOnly (el, container, handle) {\n\t        return handle.classList.contains('row-handle');\n\t      }\n\t    });\n\n\t    dragularService($element.children(), {\n\t      nameSpace: 'cells',\n\t      moves: function excludeHandle (el, container, handle) {\n\t        return !handle.classList.contains('row-handle');\n\t      }\n\t    });\n\t  }, 0);\n\t  $scope.items = [{\n\t    items: [{\n\t      content: 'Item a1'\n\t    }, {\n\t      content: 'Item a2'\n\t    }, {\n\t      content: 'Item a3'\n\t    }, {\n\t      content: 'Item a4'\n\t    }]\n\t  }, {\n\t    items: [{\n\t      content: 'Item b1'\n\t    }, {\n\t      content: 'Item b2'\n\t    }, {\n\t      content: 'Item b3'\n\t    }, {\n\t      content: 'Item b4'\n\t    }]\n\t  }, {\n\t    items: [{\n\t      content: 'Item c1'\n\t    }, {\n\t      content: 'Item c2'\n\t    }, {\n\t      content: 'Item c3'\n\t    }, {\n\t      content: 'Item c4'\n\t    }]\n\t  }];\n\t};\n\n\tNestedNgRepeatCtrl.$inject = ['$timeout', '$scope', '$element', 'dragularService'];\n\n\tmodule.exports = NestedNgRepeatCtrl;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar NestedNgRepeatWithModelCtrl = function ($timeout, $scope, $element, dragularService) {\n\t  $timeout(function() { // timeount due to nested ngRepeat to be ready\n\t    var container = $element.children().eq(0).children(),\n\t      parentContainers = container.children(),\n\t      nestedContainers = [];\n\n\t    dragularService.cleanEnviroment();\n\t    dragularService(container, {\n\t      moves: function(el, container, handle) {\n\t        return handle.classList.contains('row-handle');\n\t      },\n\t      containersModel: $scope.items,\n\t      nameSpace: 'rows'\n\t    });\n\n\t    // collect nested contianers\n\t    for (var i = 0; i < parentContainers.length; i++) {\n\t      nestedContainers.push(parentContainers.eq(i).children()[1]);\n\t    }\n\n\t    dragularService(nestedContainers, {\n\t      moves: function(el, container, handle) {\n\t        return !handle.classList.contains('row-handle');\n\t      },\n\t      containersModel: (function getNestedContainersModel(){\n\t        var parent = $scope.items,\n\t          containersModel = [];\n\t        for (var i = 0; i < parent.length; i++) {\n\t          containersModel.push(parent[i].items);\n\t        }\n\t        return containersModel;\n\t      })(),\n\t      nameSpace: 'cells'\n\t    });\n\t  }, 0);\n\t  $scope.items = [{\n\t    items: [{\n\t      content: 'Item a1'\n\t    }, {\n\t      content: 'Item a2'\n\t    }, {\n\t      content: 'Item a3'\n\t    }, {\n\t      content: 'Item a4'\n\t    }]\n\t  }, {\n\t    items: [{\n\t      content: 'Item b1'\n\t    }, {\n\t      content: 'Item b2'\n\t    }, {\n\t      content: 'Item b3'\n\t    }, {\n\t      content: 'Item b4'\n\t    }]\n\t  }, {\n\t    items: [{\n\t      content: 'Item c1'\n\t    }, {\n\t      content: 'Item c2'\n\t    }, {\n\t      content: 'Item c3'\n\t    }, {\n\t      content: 'Item c4'\n\t    }]\n\t  }];\n\t};\n\n\tNestedNgRepeatWithModelCtrl.$inject = ['$timeout', '$scope', '$element', 'dragularService'];\n\n\tmodule.exports = NestedNgRepeatWithModelCtrl;\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar NgRepeatCtrl = function ($scope, $element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t  dragularService($element.children());\n\t  $scope.items = [{\n\t    content: 'Try to add or remove some elements (click on +- buttons), you will see that it is not problem for dragular.'\n\t  }, {\n\t    content: 'Item 2'\n\t  }, {\n\t    content: 'Item 3'\n\t  }, {\n\t    content: 'Item 4'\n\t  }];\n\t  $scope.addItem = function addItem() {\n\t    var index = $scope.items.indexOf(this.item) + 1;\n\t    $scope.items.splice(index, 0, {\n\t      content: this.item.content + '-copy'\n\t    });\n\t  };\n\t  $scope.removeItem = function removeItem() {\n\t    var index = $scope.items.indexOf(this.item);\n\t    $scope.items.splice(index, 1);\n\t  };\n\t};\n\n\tNgRepeatCtrl.$inject = ['$scope', '$element', 'dragularService'];\n\n\tmodule.exports = NgRepeatCtrl;\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar NgRepeatWithModelCtrl = function ($scope, $element, dragularService) {\n\t  $scope.items = [{\n\t    content: 'Try to add or remove some elements (click on +- buttons), you will see that it is not problem for dragular.'\n\t  }, {\n\t    content: 'Item 2'\n\t  }, {\n\t    content: 'Item 3'\n\t  }, {\n\t    content: 'Item 4'\n\t  }];\n\t  dragularService.cleanEnviroment();\n\t  dragularService($element.children().eq(0).children(), {containersModel: $scope.items});\n\t  $scope.addItem = function addItem() {\n\t    var index = $scope.items.indexOf(this.item) + 1;\n\t    $scope.items.splice(index, 0, {\n\t      content: this.item.content + '-copy'\n\t    });\n\t  };\n\t  $scope.removeItem = function removeItem() {\n\t    var index = $scope.items.indexOf(this.item);\n\t    $scope.items.splice(index, 1);\n\t  };\n\t};\n\n\tNgRepeatWithModelCtrl.$inject = ['$scope', '$element', 'dragularService'];\n\n\tmodule.exports = NgRepeatWithModelCtrl;\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar RemoveOnSpillCtrl = function ($element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t\tdragularService($element.children(), {\n\t    removeOnSpill: true\n\t  });\n\t};\n\n\tRemoveOnSpillCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = RemoveOnSpillCtrl;\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar RemoveOnSpillWithModelCtrl = function ($scope, $element, dragularService) {\n\t  $scope.items1 = [{\n\t    content: 'Move me, but you can only drop me in containers.'\n\t  }, {\n\t    content: 'If you try to drop me somewhere other than containers, I\\'ll die a fiery death.'\n\t  }, {\n\t    content: 'Item 3'\n\t  }, {\n\t    content: 'Item 4'\n\t  }];\n\t  $scope.items2 = [{\n\t    content: 'You can drop me in the left container.'\n\t  }, {\n\t    content: 'Item 6'\n\t  }, {\n\t    content: 'Item 7'\n\t  }, {\n\t    content: 'Item 8'\n\t  }];\n\t  var containers = $element.children().eq(0).children();\n\t  dragularService.cleanEnviroment();\n\t  dragularService([containers[0], containers[1]], {\n\t    containersModel: [$scope.items1, $scope.items2],\n\t    removeOnSpill: true\n\t  });\n\t};\n\n\tRemoveOnSpillWithModelCtrl.$inject = ['$scope', '$element', 'dragularService'];\n\n\tmodule.exports = RemoveOnSpillWithModelCtrl;\n\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\tvar RevertOnSpillCtrl = function ($element, dragularService) {\n\t  dragularService.cleanEnviroment();\n\t  dragularService($element.children(), {\n\t    revertOnSpill: true\n\t  });\n\t};\n\n\tRevertOnSpillCtrl.$inject = ['$element', 'dragularService'];\n\n\tmodule.exports = RevertOnSpillCtrl;\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\t/* global angular */\n\t'use strict';\n\n\tvar ScrollingDragCtrl = function ($interval, $element, dragularService) {\n\t  var timer,\n\t    leftScrollContainer = document.getElementById('leftScroll'),\n\t    rightScrollContainer = document.getElementById('rightScroll'),\n\t    leftTopBar = document.getElementById('leftTopBar'),\n\t    leftBottomBar = document.getElementById('leftBottomBar'),\n\t    rightTopBar = document.getElementById('rightTopBar'),\n\t    rightBottomBar = document.getElementById('rightBottomBar');\n\n\t  dragularService.cleanEnviroment();\n\t  dragularService([leftScrollContainer, rightScrollContainer]);\n\n\t  registerEvents(leftTopBar, leftScrollContainer, -5);\n\t  registerEvents(leftBottomBar, leftScrollContainer, 5);\n\t  registerEvents(rightTopBar, rightScrollContainer, -5);\n\t  registerEvents(rightBottomBar, rightScrollContainer, 5);\n\n\t  function registerEvents(bar, container, inc, speed) {\n\t    if (!speed) {\n\t      speed = 20;\n\t    }\n\t  angular.element(bar).on('dragularenter', function() {\n\t    container.scrollTop += inc;\n\t    timer = $interval(function moveScroll() {\n\t        container.scrollTop += inc;\n\t      }, speed);\n\t    });\n\t    angular.element(bar).on('dragularleave dragularrelease', function() {\n\t      $interval.cancel(timer);\n\t    });\n\t  }\n\t};\n\n\tScrollingDragCtrl.$inject = ['$interval', '$element', 'dragularService'];\n\n\tmodule.exports = ScrollingDragCtrl;\n\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\t'use strict'; module.exports = angular.module(\""templates\"", []).run([\""$templateCache\"", function($templateCache) {$templateCache.put(\""docsInstall/docsInstall.html\"",\""<h2>Install</h2>\\n<p>download dragular.js and dragular.css from dist folder</p>\\n<p>OR clone git</p>\\n<pre><code>\\ngit clone http://github.com/luckylooke/dragular.git\\n</code></pre>\\n<p>OR use npm</p>\\n<pre><code>\\n[sudo] npm install dragular\\n</code></pre>\\n<p>OR use bower</p>\\n<pre><code>\\nbower install dragular\\n</code></pre>\\n<p>AND include files into your project</p>\\n<pre><code>\\n&lt;link href=\\'styles/dragular.css\\' rel=\\'stylesheet\\' type=\\'text/css\\' /&gt;\\n&lt;script src=\\'scripts/dragular.js\\'&gt;&lt;/script&gt;\\n</code></pre>\\n<p>AND put dragularModule into dependency array</p>\\n<pre><code>\\nvar app = angular.module(\\'myApp\\', [\\'dragularModule\\', \\'otherDependencies\\']);\\n</code></pre>\\n<p>DONE :)</p>\\n\"");\n\t$templateCache.put(\""exampleBasicWithModel/exampleBasicWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>Basic - with model</h2>\\n  <label for=\\'hy\\'>Move stuff between these two containers. Note how the stuff gets inserted near the mouse pointer? Great stuff.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""BasicModel\\\"">\\n    <div class=\\'tableRow\\'>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items1\\\"">{{item.content}}</div>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items2\\\"">{{item.content}}</div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items1:\\n          <br/>{{items1 | json}}</pre>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items2:\\n          <br/>{{items2 | json}}</pre>\\n      </div>\\n    </div>\\n  </div>\\n  <pre>\\n        <code>\\n// JS\\n  controller(\\'BasicModel\\', [\\'$scope\\', \\'$element\\', \\'dragularService\\', function TodoCtrl($scope, $element, dragularService) {\\n    $scope.items1 = [{\\n      content: \\'Move me, but you can only drop me in one of these containers.\\'\\n    }, {\\n      content: \\'If you try to drop me somewhere other than these containers, I\\\\\\'ll just come back.\\'\\n    }, {\\n      content: \\'Item 3\\'\\n    }, {\\n      content: \\'Item 4\\'\\n    }];\\n    $scope.items2 = [{\\n      content: \\'Item 5\\'\\n    }, {\\n      content: \\'Item 6\\'\\n    }, {\\n      content: \\'Item 7\\'\\n    }, {\\n      content: \\'Item 8\\'\\n    }];\\n    var containers = $element.children().children();\\n    dragularService([containers[0],containers[1]],{\\n      containersModel: [$scope.items1, $scope.items2]\\n    });\\n  }])\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n&lt;div class=\\'wrapper\\' ng-controller=&quot;Basic&quot;&gt;\\n    &lt;div class=\\'tableRow\\'&gt;\\n        &lt;div class=\\'containerVertical\\'&gt;\\n            &lt;div ng-repeat=&quot;item in items1&quot;&gt;{{item.content}}&lt;/div&gt;\\n        &lt;/div&gt;\\n        &lt;div class=\\'containerVertical\\'&gt;\\n            &lt;div ng-repeat=&quot;item in items2&quot;&gt;{{item.content}}&lt;/div&gt;\\n        &lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=&quot;tableRow&quot;&gt;\\n        &lt;div class=&quot;container&quot;&gt;\\n            &lt;div&gt;Items1:\\n                &lt;br/&gt;{{items1 | json}}&lt;/div&gt;\\n        &lt;/div&gt;\\n        &lt;div class=&quot;container&quot;&gt;\\n            &lt;div&gt;Items2:\\n                &lt;br/&gt;{{items2 | json}}&lt;/div&gt;\\n        &lt;/div&gt;\\n    &lt;/div&gt;\\n&lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleBasic/exampleBasic.html\"",\""<div class=\\'parent\\'>\\n  <h2>Basic</h2>\\n  <label for=\\'hy\\'>Move stuff between these two containers. Note how the stuff gets inserted near the mouse pointer? Great stuff.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""Basic\\\"">\\n    <div class=\\'containerVertical\\'>\\n      <div>Move me, but you can only drop me in one of these containers.</div>\\n      <div>If you try to drop me somewhere other than these containers, I\\'ll just come back.</div>\\n      <div>Item 3.</div>\\n      <div>Item 6.</div>\\n    </div>\\n    <div class=\\'containerVertical\\'>\\n      <div>You can drop me in the left container, otherwise I\\'ll stay here.</div>\\n      <div ng-click=\\\""clicked = !clicked\\\"" ng-class=\\\""clicked && \\'clickedClass\\'\\\"">Try to click me, dragular distinguish drag from click</div>\\n      <div>Item 5.</div>\\n    </div>\\n  </div>\\n  <pre>\\n        <code>\\n// JS\\n  controller(\\'Basic\\', [\\'$element\\', \\'dragularService\\', function TodoCtrl($element, dragularService) {\\n    dragularService(\\'.containerVertical\\');\\n  }])\\n        </code>\\n        <code>\\n// CSS\\n.clickedClass {\\n  background-color: orange !important;\\n}\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n  &lt;div class=\\'wrapper\\' ng-controller=&quot;Basic&quot;&gt;\\n    &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;div&gt;Move me, but you can only drop me in one of these containers.&lt;/div&gt;\\n        &lt;div&gt;If you try to drop me somewhere other than these containers, I\\'ll just come back.&lt;/div&gt;\\n        &lt;div&gt;Item 3.&lt;/div&gt;\\n        &lt;div&gt;Item 6.&lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;div&gt;You can drop me in the left container, otherwise I\\'ll stay here.&lt;/div&gt;\\n        &lt;div ng-click=\\\""clicked = !clicked\\\"" ng-class=\\\""clicked && \\'clickedClass\\'\\\""&gt;Try to click me, dragular distinguish drag from click&lt;/div&gt;\\n        &lt;div&gt;Item 5.&lt;/div&gt;\\n    &lt;/div&gt;\\n&lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleBoundingBox/exampleBoundingBox.html\"",\""        <div class=\\'parent\\'>\\n            <h2>BoundingBox</h2>\\n            <label for=\\'hy\\'>You can provide element in options.boundingBox to limit crossing element borders.</label>\\n            <div class=\\'wrapper\\' ng-controller=\\\""BoundingBox\\\"">\\n                <div class=\\'containerVertical\\'>\\n                    <div>This items cannot cross its example element, just try it your selves.</div>\\n                    <div>Item 2.</div>\\n                    <div>Item 3.</div>\\n                    <div>Item 6.</div>\\n                </div>\\n                <div class=\\'containerVertical\\'>\\n                    <div>This items cannot cross its example element, just try it your selves.</div>\\n                    <div>Item 4.</div>\\n                    <div>Item 5.</div>\\n                </div>\\n            </div>\\n            <pre>\\n        <code>\\n  dragularService([$element.children(), {\\n    boundingBox: $element\\n  });\\n        </code>\\n      </pre>\\n        </div>\"");\n\t$templateCache.put(\""exampleBoundingBoxLockX/exampleBoundingBoxLockX.html\"",\""<div class=\\'parent\\'>\\n            <h2>BoundingBox and lockX</h2>\\n            <label for=\\'hy\\'>Movement can be locked to X or Y axis and also you can provide element in options.boundingBox to limit crossing element borders.</label>\\n            <div class=\\'wrapper\\' ng-controller=\\\""BoundingBoxLockX\\\"">\\n                <div class=\\'containerHorizontal\\'>\\n                    <div class=\\'boundingBox\\'>\\n                        <div class=\\\""width25\\\"">Items are locked in X axis movement and cannot cross its closest parent div.boundingBox, just try it your selves.</div>\\n                        <div class=\\\""width25\\\"">item 2</div>\\n                        <div class=\\\""width25\\\"">item 3</div>\\n                        <div class=\\\""width25\\\"">item 4</div>\\n                    </div>\\n                </div>\\n            </div>\\n            <pre>\\n        <code>\\n  dragularService([$element.children()[0].children(), {\\n    boundingBox: $element.children()[0],\\n    lockX: true\\n  });\\n        </code>\\n      </pre>\\n        </div>\"");\n\t$templateCache.put(\""exampleBoundingBoxLockY/exampleBoundingBoxLockY.html\"",\""        <div class=\\'parent\\'>\\n            <h2>BoundingBox and LockY</h2>\\n            <label for=\\'hy\\'>Movement can be locked to X or Y axis and also you can provide element in options.boundingBox to limit crossing element borders.</label>\\n            <div class=\\'wrapper\\' ng-controller=\\\""BoundingBoxLockY\\\"">\\n                <div class=\\'containerVertical\\'>\\n                    <div class=\\'boundingBox\\'>\\n                        <div>Items are locked in Y axis movement and cannot cross its closest parent div.boundingBox, just try it your selves.</div>\\n                        <div>item 2</div>\\n                        <div>item 3</div>\\n                        <div>item 4</div>\\n                        <div>item 5</div>\\n                        <div>item 6</div>\\n                    </div>\\n                </div>\\n            </div>\\n            <pre>\\n        <code>\\n  dragularService([$element.children()[0].children(), {\\n    boundingBox: $element.children()[0],\\n    lockY: true\\n  });\\n        </code>\\n      </pre>\\n        </div>\"");\n\t$templateCache.put(\""exampleCopy/exampleCopy.html\"",\""<div class=\\'parent\\'>\\n  <h2>Copy</h2>\\n  <label for=\\'hy\\'>Copying stuff is great too.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""Copy\\\"" ng-hide=\\\""globals.showModelExamples\\\"">\\n    <div id=\\'left2\\' class=\\'containerVertical\\'>\\n      <div>Move me, and make copy on drop.</div>\\n      <div>If you try to drop me somewhere other than these containers, I\\'ll just come back.</div>\\n    </div>\\n    <div id=\\'right2\\' class=\\'containerVertical\\'>\\n      <div>You can drop me in the left container, otherwise I\\'ll stay here.</div>\\n    </div>\\n  </div>\\n  <pre>\\n        <code>\\n// JS\\n  controller(\\'Copy\\', [\\'$element\\', \\'dragularService\\', function TodoCtrl($element, dragularService) {\\n    dragularService($element.children(), {\\n      copy: true\\n    });\\n  }])\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n&lt;div class=\\'wrapper\\' ng-controller=&quot;Copy&quot; ng-hide=&quot;globals.showModelExamples&quot;&gt;\\n    &lt;div id=\\'left2\\' class=\\'containerVertical\\'&gt;\\n      &lt;div&gt;Move me, and make copy on drop.&lt;/div&gt;\\n      &lt;div&gt;If you try to drop me somewhere other than these containers, I\\'ll just come back.&lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div id=\\'right2\\' class=\\'containerVertical\\'&gt;\\n      &lt;div&gt;You can drop me in the left container, otherwise I\\'ll stay here.&lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleCopyWithModel/exampleCopyWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>Copy - with model</h2>\\n  <label for=\\'hy\\'>Copying stuff is great too.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""CopyModel\\\"">\\n    <div class=\\'tableRow\\'>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items1\\\"">{{item.content}}</div>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items2\\\"">{{item.content}}</div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <div>Items1:\\n          <br/>{{items1 | json}}</div>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <div>Items2:\\n          <br/>{{items2 | json}}</div>\\n      </div>\\n    </div>\\n  </div>\\n  <pre>\\n        <code>\\n// JS\\n  controller(\\'CopyModel\\', [\\'$scope\\', \\'$element\\', \\'dragularService\\', function TodoCtrl($scope, $element, dragularService) {\\n    $scope.items1 = [{\\n      content: \\'Move me, and make copy on drop.\\'\\n    }, {\\n      content: \\'If you try to drop me somewhere other than these containers, I\\\\\\'ll just come back.\\'\\n    }, {\\n      content: \\'Item 3\\'\\n    }, {\\n      content: \\'Item 4\\'\\n    }];\\n    $scope.items2 = [{\\n      content: \\'Item 5\\'\\n    }, {\\n      content: \\'Item 6\\'\\n    }, {\\n      content: \\'Item 7\\'\\n    }, {\\n      content: \\'Item 8\\'\\n    }];\\n    var containers = $element.children().children();\\n    dragularService([containers[0],containers[1]],{\\n      containersModel: [$scope.items1, $scope.items2],\\n      copy: true\\n    });\\n  }])\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n&lt;div class=\\'wrapper\\' ng-controller=&quot;CopyModel&quot; ng-show=&quot;globals.showModelExamples&quot;&gt;\\n    &lt;div class=\\'tableRow\\'&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;div ng-repeat=&quot;item in items1&quot;&gt;{{item.content}}&lt;/div&gt;\\n      &lt;/div&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;div ng-repeat=&quot;item in items2&quot;&gt;{{item.content}}&lt;/div&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=&quot;tableRow&quot;&gt;\\n      &lt;div class=&quot;container&quot;&gt;\\n        &lt;div&gt;Items1:\\n          &lt;br/&gt;{{items1 | json}}&lt;/div&gt;\\n      &lt;/div&gt;\\n      &lt;div class=&quot;container&quot;&gt;\\n        &lt;div&gt;Items2:\\n          &lt;br/&gt;{{items2 | json}}&lt;/div&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleCustomClasses/exampleCustomClasses.html\"",\""<div class=\\'parent\\'>\\n    <h2>Custom classes</h2>\\n    <label for=\\'hy\\'>You can overwrite buildin classes by providing classes names in object via options.classes.</label>\\n    <div class=\\'wrapper\\' ng-controller=\\\""CustomClasses\\\"">\\n        <div id=\\'left4\\' class=\\'containerVertical\\'>\\n            <div>Move me, but you can only drop me in one of these containers.</div>\\n            <div>If you try to drop me somewhere other than these containers, I\\'ll just come back.</div>\\n            <div>Item 3.</div>\\n            <div>Item 6.</div>\\n        </div>\\n        <div id=\\'right3\\' class=\\'containerVertical\\'>\\n            <div>You can drop me in the left container, otherwise I\\'ll stay here.</div>\\n            <div>Item 4.</div>\\n            <div>Item 5.</div>\\n        </div>\\n    </div>\\n    <pre>\\n        <code>\\n  dragularService([document.getElementById(left), document.getElementById(right)], { classes: {\\n    mirror: \\'custom-green-mirror\\'\\n  } });\\n\\n  // Default classes are:\\n  option.classes = {\\n    mirror: \\'gu-mirror\\',\\n    hide: \\'gu-hide\\',\\n    unselectable: \\'gu-unselectable\\',\\n    transit: \\'gu-transit\\',\\n    overActive: \\'gu-over-active\\',\\n    overAccepts: \\'gu-over-accept\\',\\n    overDeclines: \\'gu-over-decline\\'\\n  };\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleDifferentOptionsWithModel/exampleDifferentOptionsWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>Different options - with model</h2>\\n  <label for=\\'hy\\'>You may need to setup different options (rules) for each container. For such setup you need to initialize each container separately. <b>Do not initialize same container twice!</b> In example bellow you can copy from left to right, but not otherwise. And from right container items can be removed on spill.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""DifferentOptionsModel\\\"">\\n    <div class=\\'tableRow\\'>\\n      <div id=\\\""containerLeft\\\"" class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items1\\\"">{{item.content}}</div>\\n      </div>\\n      <div id=\\\""containerRight\\\"" class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items2\\\"">{{item.content}}</div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items1:\\n          <br/>{{items1 | json}}</pre>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items2:\\n          <br/>{{items2 | json}}</pre>\\n      </div>\\n    </div>\\n  </div>\\n  <pre>\\n        <code>\\n// JS\\n  .controller(\\'DifferentOptionsModel\\', [\\'$scope\\', \\'$element\\', \\'dragularService\\', function TodoCtrl($scope, $element, dragularService) {\\n    $scope.items1 = [{\\n      content: \\'Move me, but you can only drop me in one of these containers.\\'\\n    }, {\\n      content: \\'If you try to drop me somewhere other than these containers, I\\\\\\'ll just come back.\\'\\n    }, {\\n      content: \\'Item 3\\'\\n    }, {\\n      content: \\'Item 4\\'\\n    }];\\n    $scope.items2 = [{\\n      content: \\'Item 5\\'\\n    }, {\\n      content: \\'Item 6\\'\\n    }, {\\n      content: \\'Item 7\\'\\n    }, {\\n      content: \\'Item 8\\'\\n    }];\\n\\n    var containerLeft = document.querySelector(\\'#containerLeft\\'),\\n      containerRight = document.querySelector(\\'#containerRight\\');\\n\\n    function accepts(el, target, source) {\\n      if (source === containerLeft || source === target) {\\n        return true;\\n      }\\n    }\\n\\n    dragularService([containerLeft], {\\n      containersModel: [$scope.items1],\\n      copy: true,\\n      //move only from left to right  \\n      accepts: accepts\\n    });\\n\\n    dragularService([containerRight], {\\n      containersModel: [$scope.items2],\\n      removeOnSpill: true,\\n      //move only from left to right  \\n      accepts: accepts\\n    });\\n\\n  }])\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n&lt;div class=\\'wrapper\\' ng-controller=&quot;DifferentOptionsModel&quot;&gt;\\n    &lt;div class=\\'tableRow\\'&gt;\\n      &lt;div id=&quot;containerLeft&quot; class=\\'containerVertical\\'&gt;\\n        &lt;div ng-repeat=&quot;item in items1&quot;&gt;{{item.content}}&lt;/div&gt;\\n      &lt;/div&gt;\\n      &lt;div id=&quot;containerRight&quot; class=\\'containerVertical\\'&gt;\\n        &lt;div ng-repeat=&quot;item in items2&quot;&gt;{{item.content}}&lt;/div&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=&quot;tableRow&quot;&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;pre&gt;Items1:\\n          &lt;br/&gt;{{items1 | json}}&lt;/pre&gt;\\n      &lt;/div&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;pre&gt;Items2:\\n          &lt;br/&gt;{{items2 | json}}&lt;/pre&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleDirective/exampleDirective.html\"",\""<div class=\\'parent\\'>\\n  <h2>Directive</h2>\\n  <label for=\\'hy\\'>Same as custom classes example, but showing use of directive.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""Directive\\\"">\\n    <div class=\\'containerVertical\\' dragular=\\\""dragularOptions\\\"">\\n      <div>Move me, but you can only drop me in one of these containers.</div>\\n      <div>If you try to drop me somewhere other than these containers, I\\'ll just come back.</div>\\n      <div>Item 3.</div>\\n      <div>Item 6.</div>\\n    </div>\\n    <div class=\\'containerVertical\\' dragular=\\'{\\\""classes\\\"":{\\\""mirror\\\"":\\\""custom-green-mirror\\\""},\\\""nameSpace\\\"":\\\""same\\\""}\\'>\\n      <div>You can drop me in the left container, otherwise I\\'ll stay here.</div>\\n      <div>Item 4.</div>\\n      <div>Item 5.</div>\\n    </div>\\n  </div>\\n  <pre>\\n        <code>\\n// JS\\n  controller(\\'Directive\\', [\\'$scope\\', \\'dragularService\\', function TodoCtrl($scope) {\\n    $scope.dragularOptions = {\\n      classes: {\\n        mirror: \\'custom-green-mirror\\'\\n      },\\n      nameSpace: \\'common\\' // just connecting left and right container\\n    };\\n  }])\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n&lt;div class=\\'wrapper\\' ng-controller=&quot;Directive&quot;&gt;\\n    &lt;div class=\\'containerVertical\\' dragular=&quot;dragularOptions&quot;&gt;\\n      &lt;div&gt;Move me, but you can only drop me in one of these containers.&lt;/div&gt;\\n      &lt;div&gt;If you try to drop me somewhere other than these containers, I\\'ll just come back.&lt;/div&gt;\\n      &lt;div&gt;Item 3.&lt;/div&gt;\\n      &lt;div&gt;Item 6.&lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=\\'containerVertical\\' dragular=\\'{&quot;classes&quot;:{&quot;mirror&quot;:&quot;custom-green-mirror&quot;},&quot;nameSpace&quot;:&quot;same&quot;}\\'&gt;\\n      &lt;div&gt;You can drop me in the left container, otherwise I\\'ll stay here.&lt;/div&gt;\\n      &lt;div&gt;Item 4.&lt;/div&gt;\\n      &lt;div&gt;Item 5.&lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleDirectiveWithModel/exampleDirectiveWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>Directive - with model</h2>\\n  <label for=\\'hy\\'>Same as custom classes example, but showing use of directive.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""DirectiveModel\\\"">\\n    <div class=\\'tableRow\\'>\\n      <div class=\\'containerVertical\\' dragular=\\\""dragularOptions\\\"">\\n        <div ng-repeat=\\\""item in items1\\\"">{{item.content}}</div>\\n      </div>\\n      <div class=\\'containerVertical\\' dragular=\\'{\\\""containersModel\\\"":\\\""items2\\\"",\\\""classes\\\"":{\\\""mirror\\\"":\\\""custom-green-mirror\\\""},\\\""nameSpace\\\"":\\\""common\\\""}\\'>\\n        <div ng-repeat=\\\""item in items2\\\"">{{item.content}}</div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <div>Items1:\\n          <br/>{{items1 | json}}</div>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <div>Items2:\\n          <br/>{{items2 | json}}</div>\\n      </div>\\n    </div>\\n  </div>\\n  <pre>\\n       \\n        <code>\\n// JS\\n  controller(\\'DirectiveModel\\', [\\'$scope\\', function TodoCtrl($scope) {\\n    $scope.items1 = [{\\n      content: \\'Move me, and make copy on drop.\\'\\n    }, {\\n      content: \\'If you try to drop me somewhere other than these containers, I\\\\\\'ll just come back.\\'\\n    }, {\\n      content: \\'Item 3\\'\\n    }, {\\n      content: \\'Item 4\\'\\n    }];\\n    $scope.items2 = [{\\n      content: \\'Item 5\\'\\n    }, {\\n      content: \\'Item 6\\'\\n    }, {\\n      content: \\'Item 7\\'\\n    }, {\\n      content: \\'Item 8\\'\\n    }];\\n    $scope.dragularOptions = {\\n      containersModel: $scope.items1,\\n      classes: {\\n        mirror: \\'custom-green-mirror\\'\\n      },\\n      nameSpace: \\'common\\' // just connecting left and right container\\n    };\\n  }])\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n &lt;div class=\\'wrapper\\' ng-controller=&quot;DirectiveModel&quot;&gt;\\n  &lt;div class=\\'containerVertical\\' dragular=&quot;dragularOptions&quot;&gt;\\n    &lt;div ng-repeat=&quot;item in items1&quot;&gt;{{item.content}}&lt;/div&gt;\\n  &lt;/div&gt;\\n  &lt;div class=\\'containerVertical\\' dragular=\\'{&quot;containersModel&quot;:&quot;items2&quot;,&quot;classes&quot;:{&quot;mirror&quot;:&quot;custom-green-mirror&quot;},&quot;nameSpace&quot;:&quot;common&quot;}\\'&gt;\\n    &lt;div ng-repeat=&quot;item in items2&quot;&gt;{{item.content}}&lt;/div&gt;\\n  &lt;/div&gt;\\n&lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleDragOverEvents/exampleDragOverEvents.html\"",\""<div class=\\'parent\\'>\\n  <h2>Drag-over events</h2>\\n  <p>You can interact with dragging element by litening to dragOver events. Usually you want to containers show wheather they accepts element or not, but you can use it anywhere. DragOver events are: dragenter, dragleave and dragrelease. On dragOver events dragularService reveals several useful properties.</p>\\n\\n<div class=\\\""table-responsive\\\"">\\n  <table class=\\\""table table-hover\\\"">\\n    <tr>\\n      <td>dragularService.shared.item</td>\\n      <td>item beeing dragged (it is copy of item if copy is enabled via options)</td>\\n    </tr>\\n    <tr>\\n      <td>dragularService.shared.source</td>\\n      <td>source container item is dragged from</td>\\n    </tr>\\n    <tr>\\n      <td>dragularService.shared.sourceModel</td>\\n      <td>source container model representation if model was porvided</td>\\n    </tr>\\n    <tr>\\n      <td>dragularService.shared.initialIndex</td>\\n      <td>original index of item, can be used to get item model from sourceModel</td>\\n    </tr>\\n    <tr>\\n      <td>dragularService.shared.extra</td>\\n      <td>contains accepting information (boolean) on dragenter, element drag is leaving to on dragleave and element behind the cursor on dragrelease</td>\\n    </tr>\\n  </table>\\n</div>\\n\\n  <p> Try to drag over the not-container too.</p>\\n  <div class=\\'wrapper\\' ng-controller=\\\""DragOverEvents\\\"">\\n    <div class=\\'containerVertical width25\\'>\\n      <div>apples and oranges cannot be mixed</div>\\n      <div>apple 2</div>\\n      <div>apple 3</div>\\n      <div>apple 4</div>\\n    </div>\\n    <div class=\\'containerVertical width25\\'>\\n      <div>orange 1</div>\\n      <div>orange 2</div>\\n      <div>orange 3</div>\\n      <div>orange 4</div>\\n    </div>\\n    <div class=\\'containerVertical width25\\'>\\n      <div>apple 5</div>\\n      <div>apple 6</div>\\n      <div>apple 7</div>\\n      <div>apple 8</div>\\n    </div>\\n    <div class=\\'containerVertical width25\\'>\\n      <div>orange 5</div>\\n      <div>orange 6</div>\\n      <div>orange 7</div>\\n      <div>orange 8</div>\\n    </div>\\n  </div>\\n  <div class=\\\""notContainer gu-over-active\\\""> Test active class on NOT container.</div>\\n\\n  <pre>\\n    <code>\\n&lt;!-- HTML --&gt;\\n  &lt;div class=\\'wrapper\\' ng-controller=&quot;DragOverEvents&quot;&gt;\\n    &lt;div class=\\'container width25\\'&gt;\\n      &lt;div&gt;apples and oranges cannot be mixed&lt;/div&gt;\\n      &lt;div&gt;apple 2&lt;/div&gt;\\n      ...\\n    &lt;/div&gt;\\n    &lt;div class=\\'container width25\\'&gt;\\n      &lt;div&gt;orange 1&lt;/div&gt;\\n      &lt;div&gt;orange 2&lt;/div&gt;\\n      ...\\n    &lt;/div&gt;\\n    &lt;div class=\\'container width25\\'&gt;\\n      &lt;div&gt;apple 5&lt;/div&gt;\\n      &lt;div&gt;apple 6&lt;/div&gt;\\n      ...\\n    &lt;/div&gt;\\n    &lt;div class=\\'container width25\\'&gt;\\n      &lt;div&gt;orange 5&lt;/div&gt;\\n      &lt;div&gt;orange 6&lt;/div&gt;\\n      ...\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n  &lt;div class=&quot;notContainer&quot;&gt; Test active class on NOT container.&lt;/div&gt;\\n    </code>\\n  </pre>\\n\\n  <pre>\\n    <code>\\n  // CSS\\n  \\n.notContainer.gu-over {\\n  background-color: yellow;\\n}\\n\\n.containerVertical.gu-over-accept {\\n  background-color: green;\\n}\\n\\n.containerVertical.gu-over-decline {\\n  background-color: red;\\n}\\n    </code>\\n  </pre>\\n\\n  <pre>\\n    <code>\\n  // JS\\n  controller(\\'DragOverEvents\\', [\\'$element\\', \\'dragularService\\', function TodoCtrl($element, dragularService) {\\n    dragularService.cleanEnviroment();\\n    dragularService([$element.children()[0], $element.children()[2]], {\\n      nameSpace: \\'apples\\'\\n    });\\n    dragularService([$element.children()[1], $element.children()[3]], {\\n      nameSpace: \\'oranges\\'\\n    });\\n\\n    // containers events handling\\n    function registerEvents(el) {\\n      el.on(\\'dragularenter\\', function(e) {\\n        if (el[0] === e.target) { // filter bubbled\\n          el.addClass(dragularService.shared.extra ? \\'gu-over-accept\\' : \\'gu-over-decline\\');\\n        }\\n      });\\n      el.on(\\'dragularleave dragularrelease\\', function(e) {\\n        if ((el[0] === e.target && // filter bubbled\\n          dragularService.shared.extra && // extra on dragleave contains element the drag is leaving to\\n          dragularService.shared.extra.parentElement !== e.target) // is that element child of this container?\\n          || e.type === \\'dragularrelease\\') {\\n          el.removeClass(\\'gu-over-accept\\');\\n          el.removeClass(\\'gu-over-decline\\');\\n        }\\n      });\\n    }\\n\\n    angular.forEach($element.children(), function forEachChild(el) {\\n      registerEvents(angular.element(el));\\n    });\\n\\n    // notContainer events handling\\n    var notContainer = angular.element(document.getElementsByClassName(\\'notContainer\\'));\\n    notContainer.on(\\'dragularenter\\', function() {\\n      notContainer.addClass(\\'gu-over\\');\\n    });\\n    notContainer.on(\\'dragularleave dragularrelease\\', function() {\\n      notContainer.removeClass(\\'gu-over\\');\\n    });\\n  }])\\n    </code>\\n  </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleEvents/exampleEvents.html\"",\""<div class=\\'parent\\'>\\n    <h2>Events</h2>\\n    <label for=\\'hy\\'>Add some fantastic events!</label>\\n    <div class=\\'wrapper\\' ng-controller=\\\""Events\\\"">\\n        <div id=\\'left3\\' class=\\'containerVertical\\'>\\n            <div>Move me, but you can only drop me in one of these containers.</div>\\n            <div>If you try to drop me somewhere other than these containers, I\\'ll just come back.</div>\\n            <div>Item 3.</div>\\n            <div>Item 6.</div>\\n        </div>\\n        <div id=\\'right3\\' class=\\'containerVertical\\'>\\n            <div>You can drop me in the left container, otherwise I\\'ll stay here.</div>\\n            <div>Item 4.</div>\\n            <div>Item 5.</div>\\n        </div>\\n    </div>\\n    <pre>\\n        <code>\\n.controller(\\'Events\\', [\\'$scope\\', \\'$element\\', \\'dragularService\\', \\'$timeout\\', function TodoCtrl($scope, $element, dragularService, $timeout) {\\n    dragularService($element.children(), {\\n      scope: $scope\\n    });\\n    $scope.$on(\\'dragulardrag\\', function(e, el) {\\n      e.stopPropagation();\\n      el.className = el.className.replace(\\' ex-moved\\', \\'\\');\\n    });\\n    $scope.$on(\\'dragulardrop\\', function(e, el) {\\n      e.stopPropagation();\\n      $timeout(function() {\\n        el.className += \\' ex-moved\\';\\n      }, 0);\\n    });\\n\\n    $scope.$on(\\'dragularcloned\\', myFn(\\'cloned\\'));\\n    $scope.$on(\\'dragulardrag\\', myFn(\\'drag\\'));\\n    $scope.$on(\\'dragularcancel\\', myFn(\\'cancel\\'));\\n    $scope.$on(\\'dragulardrop\\', myFn(\\'drop\\'));\\n    $scope.$on(\\'dragularremove\\', myFn(\\'remove\\'));\\n    $scope.$on(\\'dragulardragend\\', myFn(\\'dragend\\'));\\n    $scope.$on(\\'dragularshadow\\', myFn(\\'shadow\\'));\\n\\n    function myFn(eventName) {\\n      return function() {\\n        console.log(eventName, arguments);\\n      };\\n    }\\n\\n  }]);\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleHandle/exampleHandle.html\"",\""<div class=\\'parent\\'>\\n    <h2>Handle</h2>\\n    <label for=\\'hy\\'>Drag handles float your cruise?</label>\\n    <div class=\\'wrapper\\' ng-controller=\\\""Handle\\\"">\\n        <div id=\\'left5\\' class=\\'containerVertical\\'>\\n            <div><span class=\\'handle\\'>+</span>Move me, but you can use the plus sign to drag me around.</div>\\n        </div>\\n        <div id=\\'right5\\' class=\\'containerVertical\\'>\\n        </div>\\n    </div>\\n    <pre>\\n        <code>\\n  dragularService([document.getElementById(left), document.getElementById(right)], {\\n    moves: function (el, container, handle) {\\n      return handle.className === \\'handle\\';\\n    }\\n  });\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleIsContainerWithModel/exampleIsContainerWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>isContainer - with model</h2>\\n  <label for=\\'hy\\'>Possible use case of <b>options.isContainer</b> combined with model. When you provide function <b>isContainer</b> and in case it returns true and you are providing models (<b>options.containersModel</b>), dragular check for model by calling <b>options.isContainerModel(el)</b> function. If not provided, model is discarted.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""IsContainerModel\\\"">\\n    <div class=\\'tableRow\\'>\\n      <div id=\\\""containerLeft\\\"" class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items1\\\"">{{item.content}}</div>\\n      </div>\\n      <div id=\\\""cart\\\"" class=\\'containerVertical\\'>\\n        <div class=\\'cursorDefault\\' ng-repeat=\\\""item in cartModel\\\"">{{item.content}}\\n        <button class=\\'cursorDefault\\' ng-click=\\\""removeItem()\\\"">x</button></div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items1:\\n          <br/>{{items1 | json}}</pre>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <pre>Cart:\\n          <br/>{{cartModel | json}}</pre>\\n      </div>\\n    </div>\\n  </div>\\n  <pre>\\n        <code>\\n// JS\\n  .controller(\\'IsContainerModel\\', [\\'$scope\\', \\'$element\\', \\'dragularService\\', function TodoCtrl($scope, $element, dragularService) {\\n    $scope.items1 = [{\\n      content: \\'Move me, but you can only drop me in one of these containers.\\'\\n    }, {\\n      content: \\'If you try to drop me somewhere other than these containers, I\\\\\\'ll just come back.\\'\\n    }, {\\n      content: \\'Item 3\\'\\n    }, {\\n      content: \\'Item 4\\'\\n    }];\\n    $scope.cartModel = [];\\n\\n    var containerLeft = document.querySelector(\\'#containerLeft\\');\\n\\n    dragularService.cleanEnviroment();\\n    dragularService([containerLeft], {\\n      containersModel: [$scope.items1],\\n      copy: true,\\n      isContainer: function isContainer (el) {\\n        return el.id === \\'cart\\';\\n      },\\n      isContainerModel: function getModel (){\\n        return $scope.cartModel;\\n      }\\n    });\\n\\n    $scope.removeItem = function removeItem() {\\n      var index = $scope.cartModel.indexOf(this.item);\\n      $scope.cartModel.splice(index, 1);\\n    };\\n\\n  }])\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n &lt;div class=\\'wrapper\\' ng-controller=&quot;IsContainerModel&quot;&gt;\\n    &lt;div class=\\'tableRow\\'&gt;\\n      &lt;div id=&quot;containerLeft&quot; class=\\'containerVertical\\'&gt;\\n        &lt;div ng-repeat=&quot;item in items1&quot;&gt;{{item.content}}&lt;/div&gt;\\n      &lt;/div&gt;\\n      &lt;div id=&quot;cart&quot; class=\\'containerVertical\\'&gt;\\n        &lt;div class=\\'cursorDefault\\' ng-repeat=&quot;item in cartModel&quot;&gt;{{item.content}}\\n        &lt;button class=\\'cursorDefault\\' ng-click=&quot;removeItem()&quot;&gt;x&lt;/button&gt;&lt;/div&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=&quot;tableRow&quot;&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;pre&gt;Items1:\\n          &lt;br/&gt;{{items1 | json}}&lt;/pre&gt;\\n      &lt;/div&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;pre&gt;Cart:\\n          &lt;br/&gt;{{cartModel | json}}&lt;/pre&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleNameSpaces/exampleNameSpaces.html\"",\""        <div class=\\'parent\\'>\\n            <h2>NameSpaces</h2>\\n            <label for=\\'hy\\'>Try to mix apples and oranges. You cannot place apples into oranges, but notice that you can place it into mixed. Mixed can be placed into apples and oranges. Notice that mixed becomes orange or apple if placed into their container. <b>So remember if you are using namespacing, then item is namespaced according to actual container it is placed in. If you need to item preserve thier state you need to use classes in combination with options.accepts and optionally options.isContainer.</b> It depends on setup. (See <a href=\\\""https://github.com/luckylooke/dragular/issues/9\\\"">issue #9</a>.)</label>\\n            <div class=\\'wrapper\\' ng-controller=\\\""NameSpaces\\\"">\\n                <div class=\\'containerVertical width25\\'>\\n                    <div>try to mix oranges and apples</div>\\n                    <div>apple 2</div>\\n                    <div>apple 3</div>\\n                    <div>apple 4</div>\\n                </div>\\n                <div class=\\'containerVertical width25\\'>\\n                    <div>orange 1</div>\\n                    <div>orange 2</div>\\n                    <div>orange 3</div>\\n                    <div>orange 4</div>\\n                </div>\\n                <div class=\\'containerVertical width25\\'>\\n                    <div>apple 5</div>\\n                    <div>apple 6</div>\\n                    <div>apple 7</div>\\n                    <div>apple 8</div>\\n                </div>\\n                <div class=\\'containerVertical width25\\'>\\n                    <div>mixed 1</div>\\n                    <div>mixed 2</div>\\n                    <div>mixed 3</div>\\n                    <div>mixed 4</div>\\n                </div>\\n            </div>\\n            <pre>\\n      <code>\\ndragularService([$element.children()[0], $element.children()[2]], {\\n  nameSpace: \\'apples\\'\\n});\\ndragularService($element.children()[1], {\\n  nameSpace: \\'oranges\\'\\n});\\ndragularService($element.children()[3], { // mixed\\n  nameSpace: [\\'oranges\\', \\'apples\\']\\n});\\n      </code>\\n    </pre>\\n        </div>\"");\n\t$templateCache.put(\""exampleNestedNgRepeat/exampleNestedNgRepeat.html\"",\""<div class=\\'parent\\'>\\n    <h2>Nested ngRepeat</h2>\\n    <label for=\\'hy\\'> You can move whole rows by grabing row title, all items it selves. Try it out!\\n        <hr/>\\n        <b>Old IE doesnt support Flexible Box Layout</b> so it can look weird. But in modern browsers it is awsome! Dragular will be working well also in old IE but you have to use different css for layout.\\n        <hr/>\\n    </label>\\n    <div ng-controller=\\\""NestedNgRepeat\\\"">\\n        <div ng-repeat=\\\""item in items\\\"" class=\\'exampleRow\\'>\\n            <div class=\\\""row-handle\\\"">Row {{$index}}</div>\\n            <div ng-repeat=\\\""item in item.items\\\"" class=\\\""exampleCell\\\"">{{item.content}}</div>\\n        </div>\\n    </div>\\n    <pre>\\n        <code>\\n  // HTML\\n\\n  &lt;div ng-controller=&quot;Example15&quot;&gt;\\n    &lt;div ng-repeat=&quot;item in items&quot; class=\\'exampleRow\\'&gt;\\n      &lt;div class=&quot;row-handle&quot;&gt;Row {{$index}}&lt;/div&gt;\\n      &lt;div ng-repeat=&quot;item in item.items&quot; class=&quot;exampleCell&quot;&gt;{{item.content}}&lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n        </code>\\n      </pre>\\n    <pre>\\n        <code>\\n  // CSS\\n\\n  .exampleRow {\\n    display: flex;\\n    flex-direction: row;\\n  }\\n\\n  .exampleCell {\\n    flex-grow: 1;\\n  }\\n\\n  .exampleRow,\\n  .exampleCell {\\n    margin: 10px;\\n    padding: 10px;\\n    background-color: rgba(0, 0, 0, 0.2);\\n    cursor: move;\\n    cursor: grab;\\n    cursor: -moz-grab;\\n    cursor: -webkit-grab;\\n  }\\n        </code>\\n      </pre>\\n    <pre>\\n        <code>\\n  // JS\\n\\n  .controller(\\'NestedNgRepeat\\', [\\'$timeout\\', \\'$scope\\', \\'$element\\', \\'dragularService\\', function NestedNgRepeatCtrl($timeout, $scope, $element, dragularService) {\\n    $timeout(function() { // timeount due to ngRepeat to be ready\\n      dragularService($element, {\\n        nameSpace: \\'rows\\',\\n        moves: function rowOnly (el, container, handle) {\\n          return handle.classList.contains(\\'row-handle\\');\\n        }\\n      });\\n      dragularService($element.children(), {\\n        nameSpace: \\'cells\\',\\n        moves: function excludeHandle (el, container, handle) {\\n          return !handle.classList.contains(\\'row-handle\\');\\n        }\\n      });\\n    }, 0);\\n    $scope.items = [{\\n      items: [{\\n        content: \\'Item a1\\'\\n      }, {\\n        content: \\'Item a2\\'\\n      }, {\\n        content: \\'Item a3\\'\\n      }, {\\n        content: \\'Item a4\\'\\n      }]\\n    }, {\\n      items: [{\\n        content: \\'Item b1\\'\\n      }, {\\n        content: \\'Item b2\\'\\n      }, {\\n        content: \\'Item b3\\'\\n      }, {\\n        content: \\'Item b4\\'\\n      }]\\n    }, {\\n      items: [{\\n        content: \\'Item c1\\'\\n      }, {\\n        content: \\'Item c2\\'\\n      }, {\\n        content: \\'Item c3\\'\\n      }, {\\n        content: \\'Item c4\\'\\n      }]\\n    }];\\n  }])\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleNestedNgRepeatWithModel/exampleNestedNgRepeatWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>Nested ngRepeat - with model</h2>\\n  <label for=\\'hy\\'> You can move whole rows by grabing row title, all items it selves. Try it out!\\n    <hr/>\\n    <b>Old IE doesnt support Flexible Box Layout</b> so it can look weird. But in modern browsers it is awsome! Dragular will be working well also in old IE but you have to use different css for layout.\\n    <hr/>\\n  </label>\\n  <div ng-controller=\\\""NestedNgRepeatWithModel\\\"">\\n    <div class=\\'tableRow\\'>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items\\\"" class=\\'exampleRow\\'>\\n          <div class=\\\""row-handle\\\"">Row {{::$index}}</div>\\n          <div class=\\\""exampleRow exampleCell containerNested\\\"">\\n            <div ng-repeat=\\\""item in item.items\\\"" class=\\\""exampleCell\\\"">{{item.content}}</div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <pre>\\n            <div>Items:\\n              <br/>{{items | json}}</div>\\n        </pre>\\n      </div>\\n    </div>\\n  </div>\\n  <pre>\\n    <code>\\n&lt;!-- HTML --&gt;\\n&lt;div ng-controller=&quot;NestedNgRepeatWithModel&quot;&gt;\\n  &lt;div class=\\'containerVertical\\'&gt;\\n    &lt;div ng-repeat=&quot;item in items&quot; class=\\'exampleRow\\'&gt;\\n      &lt;div class=&quot;row-handle&quot;&gt;Row {{::$index}}&lt;/div&gt;\\n      &lt;div class=&quot;exampleRow exampleCell containerNested&quot;&gt;\\n        &lt;div ng-repeat=&quot;item in item.items&quot; class=&quot;exampleCell&quot;&gt;{{item.content}}&lt;/div&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n&lt;/div&gt;\\n    </code>\\n  </pre>\\n  <pre>\\n    <code>\\n  // CSS\\n\\n  .exampleRow {\\n    display: flex;\\n    flex-direction: row;\\n  }\\n\\n  .exampleCell {\\n    flex-grow: 1;\\n  }\\n\\n  .exampleRow,\\n  .exampleCell {\\n    margin: 10px;\\n    padding: 10px;\\n    background-color: rgba(0, 0, 0, 0.2);\\n    cursor: move;\\n    cursor: grab;\\n    cursor: -moz-grab;\\n    cursor: -webkit-grab;\\n  }\\n    </code>\\n  </pre>\\n  <pre>\\n    <code>\\n  // JS\\n.controller(\\'NestedNgRepeatWithModel\\', [\\'$timeout\\', \\'$scope\\', \\'$element\\', \\'dragularService\\', function NestedNgRepeatWithModelCtrl($timeout, $scope, $element, dragularService) {\\n    $timeout(function() { // timeount due to nested ngRepeat to be ready\\n      var container = $element.children().eq(0).children(),\\n        parentContainers = container.children(),\\n        nestedContainers = [];\\n\\n      dragularService(container, {\\n        moves: function(el, container, handle) {\\n          return handle.classList.contains(\\'row-handle\\');\\n        },\\n        containersModel: $scope.items,\\n        nameSpace: \\'rows\\'\\n      });\\n\\n      // collect nested contianers\\n      for (var i = 0; i < parentContainers.length; i++) {\\n        nestedContainers.push(parentContainers.eq(i).children()[1]);\\n      }\\n\\n      dragularService(nestedContainers, {\\n        moves: function(el, container, handle) {\\n          return !handle.classList.contains(\\'row-handle\\');\\n        },\\n        containersModel: (function getNestedContainersModel(){\\n          var parent = $scope.items,\\n            containersModel = [];\\n          for (var i = 0; i < parent.length; i++) {\\n            containersModel.push(parent[i].items);\\n          }\\n          return containersModel;\\n        })(),\\n        nameSpace: \\'cells\\'\\n      });\\n    }, 0);\\n    $scope.items = [{\\n      items: [{\\n        content: \\'Item a1\\'\\n      }, {\\n        content: \\'Item a2\\'\\n      }, {\\n        content: \\'Item a3\\'\\n      }, {\\n        content: \\'Item a4\\'\\n      }]\\n    }, {\\n      items: [{\\n        content: \\'Item b1\\'\\n      }, {\\n        content: \\'Item b2\\'\\n      }, {\\n        content: \\'Item b3\\'\\n      }, {\\n        content: \\'Item b4\\'\\n      }]\\n    }, {\\n      items: [{\\n        content: \\'Item c1\\'\\n      }, {\\n        content: \\'Item c2\\'\\n      }, {\\n        content: \\'Item c3\\'\\n      }, {\\n        content: \\'Item c4\\'\\n      }]\\n    }];\\n  }])\\n    </code>\\n  </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleNgRepeat/exampleNgRepeat.html\"",\""        <div class=\\'parent\\'>\\n            <h2>ngRepeat</h2>\\n            <label for=\\'hy\\'>Example of using ng-repeat with dragular and adding/removing items dynamicaly.</label>\\n            <div class=\\'wrapper\\' ng-controller=\\\""NgRepeat\\\"">\\n                <div class=\\'containerVertical\\'>\\n                    <div ng-repeat=\\\""item in items\\\"">\\n                        {{item.content}}\\n                    </div>\\n                </div>\\n            </div>\\n            <pre>\\n        <code>\\n  // HTML:\\n  &lt;div class=\\'containerVertical\\'&gt;\\n    &lt;div ng-repeat=&quot;item in items&quot;&gt;\\n      {{item.content}}\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n\\n  // JS:\\n  dragularService($element.children());\\n  $scope.items = [{\\n    content: \\'Try to add or remove some elements (click on +- buttons), you will see that it is not problem for dragular.\\'\\n  },{\\n    content: \\'Item 2\\'\\n  },{\\n    content: \\'Item 3\\'\\n  },{\\n    content: \\'Item 4\\'\\n  }];\\n        </code>\\n      </pre>\\n        </div>\\n\"");\n\t$templateCache.put(\""exampleNgRepeatFilteredWithModel/exampleNgRepeatFilteredWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>Filtered ngRepeat - with model</h2>\\n  <label for=\\'hy\\'>Move stuff between these two filtered containers. You can play with filter inputs to see that everything goes right.\\n    <br/>\\n    <b>Please notify the getFilteredModel function, it is necessery for not replacing the initial array object with new filtered one!</b></label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""NgRepeatFilteredWithModel\\\"">\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <input ng-model=\\\""filter1query\\\"" style=\\\""margin:10px 10px\\\"">\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <input ng-model=\\\""filter2query\\\"" style=\\\""margin:10px 10px\\\"">\\n      </div>\\n    </div>\\n    <div class=\\'tableRow\\'>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in getFilteredModel(filteredModel1, items1, filter1query)\\\"">{{item.content}}</div>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in getFilteredModel(filteredModel2, items2, filter2query)\\\"">{{item.content}}</div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items1:\\n          <br/>{{items1 | json}}</pre>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items2:\\n          <br/>{{items2 | json}}</pre>\\n      </div>\\n    </div>\\n  </div>\\n  <pre>\\n        <code>\\n// JS\\n  .controller(\\'NgRepeatFilteredWithModel\\', [\\'$scope\\', \\'$element\\', \\'dragularService\\', \\'$filter\\', function TodoCtrl($scope, $element, dragularService, $filter) {\\n    $scope.items1 = [{\\n      content: \\'Move me, but you can only drop me in one of these containers.\\'\\n    }, {\\n      content: \\'If you try to drop me somewhere other than these containers, I\\\\\\'ll just come back.\\'\\n    }, {\\n      content: \\'Apple 3\\'\\n    }, {\\n      content: \\'Orange 4\\'\\n    }, {\\n      content: \\'Orange 5\\'\\n    }, {\\n      content: \\'Apple 6\\'\\n    }, {\\n      content: \\'Apple 7\\'\\n    }, {\\n      content: \\'Apple 8\\'\\n    }];\\n    $scope.items2 = [{\\n      content: \\'Apple 9\\'\\n    }, {\\n      content: \\'Orange 10\\'\\n    }, {\\n      content: \\'Orange 11\\'\\n    }, {\\n      content: \\'Apple 12\\'\\n    }, {\\n      content: \\'Orange 13\\'\\n    }, {\\n      content: \\'Apple 14\\'\\n    }];\\n    $scope.filter1query = \\'Orange\\';\\n    $scope.filter2query = \\'Orange\\';\\n    $scope.filteredModel1 = [];\\n    $scope.filteredModel2 = [];\\n    $scope.getFilteredModel = function (filteredModel, items, filterQuery) {\\n      filteredModel.length = 0;\\n      /*\\n      * Following one-liner is same like:\\n      *   var filteredModelTemp = $filter(\\'filter\\')(items, filterQuery);\\n      *   angular.forEach(filteredModelTemp, function(item){\\n      *     filteredModel.push(item);\\n      *   });\\n      * Or like:\\n      *   var filteredModelTemp = $filter(\\'filter\\')(items, filterQuery);\\n      *   for(var i; i < filteredModelTemp.length; i++){\\n      *     filteredModel.push(filteredModelTemp[i]);\\n      *   }\\n      *\\n      * You cannot just assign filtered array to filteredModel like this:\\n      *   filteredModel = $filter(\\'filter\\')(items, filterQuery);\\n      * Because you would replace the array object you provide to dragular with new one.\\n      * So dragular will continue to use the one it was provided on init.\\n      * Hopefully I make it clear. :)\\n       */\\n      [].push.apply(filteredModel, $filter(\\'filter\\')(items, filterQuery));\\n      return filteredModel;\\n    };\\n    var containers = $element.children().eq(1).children();\\n    dragularService.cleanEnviroment();\\n    dragularService([containers[0],containers[1]],{\\n      containersModel: [$scope.items1, $scope.items2],\\n      containersFilteredModel: [$scope.filteredModel1, $scope.filteredModel2]\\n    });\\n  }]);\\n\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n  &lt;div class=\\'wrapper\\' ng-controller=&quot;NgRepeatFilteredWithModel&quot;&gt;\\n    &lt;div class=&quot;tableRow&quot;&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;input ng-model=&quot;filter1query&quot; style=&quot;margin:10px 10px&quot;&gt;\\n      &lt;/div&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;input ng-model=&quot;filter2query&quot; style=&quot;margin:10px 10px&quot;&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=\\'tableRow\\'&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;div ng-repeat=&quot;item in getFilteredModel(filteredModel1, items1, filter1query)&quot;&gt;{{item.content}}&lt;/div&gt;\\n      &lt;/div&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;div ng-repeat=&quot;item in getFilteredModel(filteredModel2, items2, filter2query)&quot;&gt;{{item.content}}&lt;/div&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=&quot;tableRow&quot;&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;pre&gt;Items1:\\n          &lt;br/&gt;{{items1 | json}}&lt;/pre&gt;\\n      &lt;/div&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;pre&gt;Items2:\\n          &lt;br/&gt;{{items2 | json}}&lt;/pre&gt;\\n      &lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleNgRepeatWithModel/exampleNgRepeatWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>ngRepeat - with model</h2>\\n  <label for=\\'hy\\'>Example of using ng-repeat with dragular and adding/removing items dynamicaly.</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""NgRepeatWithModel\\\"">\\n    <div class=\\'tableRow\\'>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items\\\"">\\n          {{item.content}}\\n          <button class=\\'cursorDefault\\' ng-click=\\\""addItem()\\\"">+</button>\\n          <button class=\\'cursorDefault\\' ng-click=\\\""removeItem()\\\"">x</button>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <div>Items:\\n          <br/>{{items | json}}</div>\\n      </div>\\n    </div>\\n  </div>\\n  <pre>\\n    <code>\\n  // HTML:\\n   &lt;div class=\\'wrapper\\' ng-controller=&quot;NgRepeatWithModel&quot;&gt;\\n      &lt;div class=\\'containerVertical\\'&gt;\\n        &lt;div ng-repeat=&quot;item in items&quot;&gt;\\n          {{item.content}}\\n          &lt;button class=\\'cursorDefault\\' ng-click=&quot;addItem()&quot;&gt;+&lt;/button&gt;\\n          &lt;button class=\\'cursorDefault\\' ng-click=&quot;removeItem()&quot;&gt;x&lt;/button&gt;\\n        &lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n    </code>\\n  </pre>\\n  <pre>\\n    <code>\\n  // JS:\\n  controller(\\'NgRepeatWithModel\\', [\\'$scope\\', \\'$element\\', \\'dragularService\\', function TodoCtrl($scope, $element, dragularService) {\\n    $scope.items = [{\\n      content: \\'Try to add or remove some elements (click on +- buttons), you will see that it is not problem for dragular.\\'\\n    }, {\\n      content: \\'Item 2\\'\\n    }, {\\n      content: \\'Item 3\\'\\n    }, {\\n      content: \\'Item 4\\'\\n    }];\\n    dragularService($element.children().eq(0).children(), {containersModel: $scope.items});\\n    $scope.addItem = function addItem() {\\n      var index = $scope.items.indexOf(this.item) + 1;\\n      $scope.items.splice(index, 0, {\\n        content: this.item.content + \\'-copy\\'\\n      });\\n    };\\n    $scope.removeItem = function removeItem() {\\n      var index = $scope.items.indexOf(this.item);\\n      $scope.items.splice(index, 1);\\n    };\\n  }])\\n    </code>\\n  </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleRemoveOnSpill/exampleRemoveOnSpill.html\"",\""        <div class=\\'parent\\'>\\n            <h2>Remove on spill</h2>\\n            <label for=\\'hy\\'>Need to be able to quickly delete stuff when it spills out of the chosen containers?</label>\\n            <div class=\\'wrapper\\' ng-controller=\\\""RemoveOnSpill\\\"">\\n                <div id=\\'left\\' class=\\'containerVertical\\'>\\n                    <div>Move me, but you can only drop me in containers.</div>\\n                    <div>If you try to drop me somewhere other than containers, I\\'ll die a fiery death.</div>\\n                    <div>Item 3.</div>\\n                    <div>Item 6.</div>\\n                    <div>Item 4.</div>\\n                    <div>Item 5.</div>\\n                </div>\\n                <div id=\\'right\\' class=\\'containerVertical\\'>\\n                    <div>You can drop me in the left container.</div>\\n                    <div>Item 4.</div>\\n                    <div>Item 5.</div>\\n                </div>\\n            </div>\\n            <pre>\\n        <code>\\n  dragularService([document.getElementById(single)], { removeOnSpill: true });\\n        </code>\\n      </pre>\\n        </div>\"");\n\t$templateCache.put(\""exampleRemoveOnSpillWithModel/exampleRemoveOnSpillWithModel.html\"",\""<div class=\\'parent\\'>\\n  <h2>Remove on spill - with model</h2>\\n  <label for=\\'hy\\'>Need to be able to quickly delete stuff when it spills out of the chosen containers?</label>\\n  <div class=\\'wrapper\\' ng-controller=\\\""RemoveOnSpillWithModel\\\"">\\n    <div class=\\'tableRow\\'>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items1\\\"">{{item.content}}</div>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <div ng-repeat=\\\""item in items2\\\"">{{item.content}}</div>\\n      </div>\\n    </div>\\n    <div class=\\\""tableRow\\\"">\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items1:\\n          <br/>{{items1 | json}}</pre>\\n      </div>\\n      <div class=\\'containerVertical\\'>\\n        <pre>Items2:\\n          <br/>{{items2 | json}}</pre>\\n      </div>\\n    </div>\\n  </div>\\n   <pre>\\n        <code>\\n// JS\\n  .controller(\\'RemoveOnSpillWithModel\\', [\\'$scope\\', \\'$element\\', \\'dragularService\\', function TodoCtrl($scope, $element, dragularService) {\\n    $scope.items1 = [{\\n      content: \\'Move me, but you can only drop me in containers.\\'\\n    }, {\\n      content: \\'If you try to drop me somewhere other than containers, I\\\\\\'ll die a fiery death.\\'\\n    }, {\\n      content: \\'Item 3\\'\\n    }, {\\n      content: \\'Item 4\\'\\n    }];\\n    $scope.items2 = [{\\n      content: \\'You can drop me in the left container.\\'\\n    }, {\\n      content: \\'Item 6\\'\\n    }, {\\n      content: \\'Item 7\\'\\n    }, {\\n      content: \\'Item 8\\'\\n    }];\\n    var containers = $element.children().eq(0).children();\\n    dragularService.cleanEnviroment();\\n    dragularService([containers[0],containers[1]],{\\n      containersModel: [$scope.items1, $scope.items2],\\n      removeOnSpill: true\\n    });\\n  }])\\n        </code>\\n        <code>\\n&lt;!-- HTML --&gt;\\n&lt;div class=\\'wrapper\\' ng-controller=&quot;Basic&quot;&gt;\\n    &lt;div class=\\'tableRow\\'&gt;\\n        &lt;div class=\\'containerVertical\\'&gt;\\n            &lt;div ng-repeat=&quot;item in items1&quot;&gt;{{item.content}}&lt;/div&gt;\\n        &lt;/div&gt;\\n        &lt;div class=\\'containerVertical\\'&gt;\\n            &lt;div ng-repeat=&quot;item in items2&quot;&gt;{{item.content}}&lt;/div&gt;\\n        &lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=&quot;tableRow&quot;&gt;\\n        &lt;div class=&quot;container&quot;&gt;\\n            &lt;div&gt;Items1:\\n                &lt;br/&gt;{{items1 | json}}&lt;/div&gt;\\n        &lt;/div&gt;\\n        &lt;div class=&quot;container&quot;&gt;\\n            &lt;div&gt;Items2:\\n                &lt;br/&gt;{{items2 | json}}&lt;/div&gt;\\n        &lt;/div&gt;\\n    &lt;/div&gt;\\n&lt;/div&gt;\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""exampleRevertOnSpill/exampleRevertOnSpill.html\"",\""        <div class=\\'parent\\'>\\n            <h2>Revert on spill</h2>\\n            <label for=\\'hy\\'>By default, dropping an element outside of any known containers will keep the element in the last place it hovered over. You can make elements go back home if they\\'re dropped outside of known containers, too.</label>\\n            <div class=\\'wrapper\\' ng-controller=\\\""RevertOnSpill\\\"">\\n                <div id=\\'left4\\' class=\\'containerVertical\\'>\\n                    <div>Move me, but you can only drop me in one of these containers.</div>\\n                    <div>If you try to drop me somewhere other than these containers, I\\'ll just come back.</div>\\n                    <div>Item 3.</div>\\n                    <div>Item 6.</div>\\n                </div>\\n                <div id=\\'right4\\' class=\\'containerVertical\\'>\\n                    <div>You can drop me in the left container, otherwise I\\'ll stay here.</div>\\n                    <div>Item 4.</div>\\n                    <div>Item 5.</div>\\n                </div>\\n            </div>\\n            <pre>\\n        <code>\\n  dragularService([document.getElementById(left), document.getElementById(right)], { revertOnSpill: true });\\n        </code>\\n      </pre>\\n        </div>\"");\n\t$templateCache.put(\""exampleScrollingDrag/exampleScrollingDrag.html\"",\""<div class=\\'parent\\'>\\n  <h2>Scrolling drag</h2>\\n  <label for=\\'hy\\'> Containers can be scrolled by hovering up/down bar near containers. Bars on right side are transparent and moved a bit over containers. It can be scrolled also by mouse wheel.\\n  </label>\\n  <div ng-controller=\\\""ScrollingDrag\\\"">\\n    <div class=\\\""containerVertical scrollingDrag\\\"">\\n      <div class=\\\""scrollBar\\\"" id=\\\""leftTopBar\\\"">up</div>\\n      <div id=\\\""leftScroll\\\"" class=\\\""scrollingDragInner\\\"">\\n        <div>Item 1.</div>\\n        <div>Item 2.</div>\\n        <div>Item 3.</div>\\n        <div>Item 4.</div>\\n        <div>Item 5.</div>\\n        <div>Item 6.</div>\\n        <div>Item 7.</div>\\n        <div>Item 9.</div>\\n        <div>Item 10.</div>\\n        <div>Item 11.</div>\\n        <div>Item 12.</div>\\n        <div>Item 13.</div>\\n      </div>\\n      <div class=\\\""scrollBar\\\"" id=\\\""leftBottomBar\\\"">down</div>\\n    </div>\\n    <div class=\\\""containerVertical scrollingDrag\\\"">\\n      <div class=\\\""scrollBar\\\"" id=\\\""rightTopBar\\\""></div>\\n      <div id=\\\""rightScroll\\\"" class=\\\""scrollingDragInner\\\"">\\n        <div>Item 1.</div>\\n        <div>Item 2.</div>\\n        <div>Item 3.</div>\\n        <div>Item 4.</div>\\n        <div>Item 5.</div>\\n        <div>Item 6.</div>\\n        <div>Item 7.</div>\\n        <div>Item 9.</div>\\n        <div>Item 10.</div>\\n        <div>Item 11.</div>\\n        <div>Item 12.</div>\\n        <div>Item 13.</div>\\n      </div>\\n      <div class=\\\""scrollBar\\\"" id=\\\""rightBottomBar\\\""></div>\\n    </div>\\n  </div>\\n   <pre>\\n        <code>\\n// JS\\ncontroller(\\'ScrollingDrag\\', [\\'$interval\\', \\'$element\\', \\'dragularService\\', function TodoCtrl($interval, $element, dragularService) {\\n\\n\\n    var timer,\\n      leftScrollContainer = document.getElementById(\\'leftScroll\\'),\\n      rightScrollContainer = document.getElementById(\\'rightScroll\\'),\\n      leftTopBar = document.getElementById(\\'leftTopBar\\'),\\n      leftBottomBar = document.getElementById(\\'leftBottomBar\\'),\\n      rightTopBar = document.getElementById(\\'rightTopBar\\'),\\n      rightBottomBar = document.getElementById(\\'rightBottomBar\\');\\n\\n    dragularService.cleanEnviroment();\\n    dragularService([leftScrollContainer, rightScrollContainer]);\\n\\n    registerEvents(leftTopBar, leftScrollContainer, -5);\\n    registerEvents(leftBottomBar, leftScrollContainer, 5);\\n    registerEvents(rightTopBar, rightScrollContainer, -5);\\n    registerEvents(rightBottomBar, rightScrollContainer, 5);\\n\\n    function registerEvents(bar, container, inc, speed) {\\n      if (!speed) {\\n        speed = 20;\\n      }\\n      angular.element(bar).on(\\'dragularenter\\', function() {\\n        container.scrollTop += inc;\\n        timer = $interval(function moveScroll() {\\n          container.scrollTop += inc;\\n        }, speed);\\n      });\\n      angular.element(bar).on(\\'dragularleave dragularrelease\\', function() {\\n        $interval.cancel(timer);\\n      });\\n    }\\n  }])\\n        </code>\\n      </pre>\\n      <pre>\\n        <code>\\n&lt;!-- HTML --&gt;\\n&lt;div ng-controller=&quot;ScrollingDrag&quot;&gt;\\n    &lt;div class=&quot;containerVertical scrollingDrag&quot;&gt;\\n      &lt;div class=&quot;scrollBar&quot; id=&quot;leftTopBar&quot;&gt;up&lt;/div&gt;\\n      &lt;div id=&quot;leftScroll&quot; class=&quot;scrollingDragInner&quot;&gt;\\n        &lt;div&gt;Item 1&lt;/div&gt;\\n        &lt;div&gt;Item 2&lt;/div&gt;\\n            ...\\n      &lt;/div&gt;\\n      &lt;div class=&quot;scrollBar&quot; id=&quot;leftBottomBar&quot;&gt;down&lt;/div&gt;\\n    &lt;/div&gt;\\n    &lt;div class=&quot;containerVertical scrollingDrag&quot;&gt;\\n      &lt;div class=&quot;scrollBar&quot; id=&quot;rightTopBar&quot;&gt;up&lt;/div&gt;\\n      &lt;div id=&quot;rightScroll&quot; class=&quot;scrollingDragInner&quot;&gt;\\n        &lt;div&gt;Item 1&lt;/div&gt;\\n        &lt;div&gt;Item 2&lt;/div&gt;\\n            ...\\n      &lt;/div&gt;\\n      &lt;div class=&quot;scrollBar&quot; id=&quot;rightBottomBar&quot;&gt;down&lt;/div&gt;\\n    &lt;/div&gt;\\n  &lt;/div&gt;\\n        </code>\\n      </pre>\\n       <pre>\\n        <code>\\n// CSS\\n.scrollingDrag {\\n  width: 45%;\\n  display: inline-block;\\n}\\n\\n.scrollingDragInner {\\n  max-height: 200px;\\n  overflow-y: auto;\\n}\\n\\n#rightTopBar,\\n#rightBottomBar {\\n  background: transparent;\\n  position: relative;\\n  height: 20px;\\n}\\n\\n#rightTopBar {\\n  top: 10px;\\n}\\n\\n#rightBottomBar {\\n  bottom: 10px;\\n}\\n\\ndiv.scrollBar {\\n  background: yellow;\\n  text-align: center;\\n  padding: 1px;\\n}\\n\\n        </code>\\n      </pre>\\n</div>\\n\"");\n\t$templateCache.put(\""partials/partial-contribute.html\"",\""<div class=\\'container\\'>\\n  <div class=\\\""row\\\"">\\n    <div class=\\\""col-lg-12\\\"">\\n      <ng-include src=\\\""\\'partials/autogenerated/contribute.html\\'\\\""> </ng-include>\\n    </div>\\n  </div>\\n</div>\\n\"");\n\t$templateCache.put(\""partials/partial-docs.html\"",\""<div class=\\'container\\'>\\n  <div id=\\\""rowOffcanvas\\\"" class=\\\""row row-offcanvas row-offcanvas-left\\\"">\\n    <div class=\\\""col-xs-6 col-sm-3 sidebar-offcanvas\\\"" id=\\\""sidebar\\\"">\\n      <div class=\\\""list-group\\\"">\\n        <a ng-repeat=\\\""example in examplesList\\\"" ui-sref=\\\""docs.detail({link:example.link})\\\"" ui-sref-active=\\\""active\\\"" class=\\\""list-group-item\\\"">{{example.title}}</a>\\n      </div>\\n    </div>\\n    <!--/.sidebar-offcanvas-->\\n    <div class=\\\""col-xs-12 col-sm-9\\\"">\\n      <p class=\\\""pull-left visible-xs\\\"">\\n        <button type=\\\""button\\\"" ng-click=\\\""toggleSidebar()\\\"" class=\\\""btn btn-primary btn-xs\\\"">Toggle nav</button>\\n      </p>\\n      <!-- docs.detail -->\\n      <div ui-view onload=\\\""highlightCode()\\\""></div>\\n    </div>\\n    <!--/.col-xs-12.col-sm-9-->\\n  </div>\\n  <!--/row-->\\n</div>\\n\"");\n\t$templateCache.put(\""partials/partial-home.html\"",\""<div class=\\'container\\'>\\n  <div class=\\\""row\\\"">\\n    <!--/.sidebar-offcanvas-->\\n    <div class=\\\""col-lg-12\\\"">\\n      <div class=\\\""jumbotron\\\"">\\n        <h1>DRAGULAR</h1>\\n        <p>Angular drag&drop based on <a href=\\\""http://github.com/bevacqua/dragula\\\"">dragula</a>.</p>\\n        <p><a class=\\\""btn btn-primary btn-lg\\\"" ui-sref=\\\""docs\\\"" role=\\\""button\\\"">Live examples in docs</a></p>\\n      </div>\\n      <div class=\\\""row\\\"">\\n        <div class=\\\""col-lg-12\\\"">\\n          <p>Browser support includes every sane browser and **IE7+**. <sub>_(Granted you polyfill the functional `Array` methods in ES5)_</sub></p>\\n          <h2>Inspiration</h2>\\n          <p>I am working on huge angular project and I am using several drag&drop libraries in it, one for UI, one for lists, etc.. I want to use one full-featured drag&drop library for whole project. As I could not find any suitable, I decided to create one. I have choosen great library <a href=\\\""http://github.com/bevacqua/dragula\\\"">dragula</a> by <a href=\\\""https://github.com/bevacqua\\\"">Nicolas Bevacqua</a> as my starting point, make it more angular and started to put features in it! If you wish light-weight angular version of dragula, there is <a href=\\\""http://github.com/bevacqua/angular-dragula\\\"">official angular version of dragula</a>.</p>\\n          <p><b>Actual version 4.1.0 is based on dragula 3.6.3 and tested with angular 1.4.9.</b></p>\\n          <h2>Differences of dragular (against dragula)</h2>\\n          <ul>\\n            <li>replaced dragula crossvent with angulars event binding</li>\\n            <li>replaced dragula contra.emitter with $scope.$emit if scope provided in options (options.scope)</li>\\n            <li>provided as service or directive dragular where options can be passed via atribute dragular</li>\\n            <li>automatic direction if not provided in options, instead of default vertical</li>\\n            <li>accepting arraylike objects as containers array (jQuery, jQlite collections etc..)</li>\\n            <li>accepting custom classes via option.classes</li>\\n            <li>namespaced containers groups available via option.nameSpace (containers in same nameSpace cooperate)</li>\\n            <li>boundingBox (dragging element can me moved only in specific area)</li>\\n            <li>lockX/Y (dragging element can me moved only in specific direction)</li>\\n            <li>DOM can be synced with scope model</li>\\n            <li>support css selectors to define containers</li>\\n            <li>added syntax highlighter to example codes</li>\\n            <li>etc..</li>\\n          </ul>\\n          <h2>Todo</h2>\\n          <ul>\\n            <li>improve docs</li>\\n          </ul>\\n          <h2>Features</h2>\\n          <ul>\\n            <li>provided as service and also as directive</li>\\n            <li>Super easy to set up</li>\\n            <li>No bloated dependencies</li>\\n            <li><strong>Figures out sort order</strong> on its own</li>\\n            <li>A shadow where the item would be dropped offers <strong>visual feedback</strong></li>\\n            <li>Touch events!</li>\\n          </ul>\\n          <h2>For installation, usage and examples go to <a ui-sref=\\\""docs\\\"">docs</a></h2>\\n        </div>\\n      </div>\\n      <!--/row-->\\n    </div>\\n    <!--/.col-xs-12.col-sm-9-->\\n  </div>\\n  <!--/row-->\\n</div>\\n\"");\n\t$templateCache.put(\""partials/autogenerated/contribute.html\"",\""<h1 id=\\\""how-to-contribute\\\"">How to contribute</h1>\\n<p>It&#39;s important to us that you feel you can contribute towards the evolution of Dragular. This can take many forms: from helping to fix bugs or improve the docs, to adding in new features to the source. This guide should help you in making that process as smooth as possible.</p>\\n<p>Before contributing, please read the <a href=\\\""https://github.com/luckylooke/dragular/blob/master/CODE_OF_CONDUCT.md\\\"">code of conduct</a>.</p>\\n<h2 id=\\\""reporting-issues\\\"">Reporting issues</h2>\\n<p><a href=\\\""https://github.com/luckylooke/dragular/issues\\\"">GitHub Issues</a> is the place to report bugs you may have found in either the core library or any of the examples that are part of the repository. When submitting a bug please do the following:</p>\\n<p><strong>1. Search for existing issues.</strong> Your bug may have already been fixed or addressed in a development branch version of Dragular, so be sure to search the issues first before putting in a duplicate issue.</p>\\n<p><strong>2. Not sure if it&#39;s a bug?.</strong> Then please ask via issues and tag it [question].</p>\\n<p><strong>3. Create an isolated and reproducible test case.</strong> If you are reporting a bug, make sure you also have a minimal, runnable, code example that reproduces the problem you have.</p>\\n<p><strong>4. Include a live example.</strong> After narrowing your code down to only the problem areas, make use of <a href=\\\""http://jsfiddle.net\\\"">jsFiddle</a>, <a href=\\\""http://jsbin.com/\\\"">jsBin</a>, or a link to your live site so that we can view a live example of the problem. (you can start by forking <a href=\\\""http://jsfiddle.net/luckylooke/afv234uh/4/\\\"">this fiddle</a>)</p>\\n<p><strong>5. Share as much information as possible.</strong> Include browser version affected, your OS, version of the library, steps to reproduce, etc. &quot;X isn&#39;t working!!!1!&quot; will probably just be closed.</p>\\n<h2 id=\\\""dev-vs-master\\\"">Dev vs. Master</h2>\\n<p>The dev branch of Dragular is our &#39;current working&#39; version. It is always ahead of the master branch in terms of features and fixes. However it&#39;s also bleeding-edge and experimental and we cannot and do not guarantee it will compile or work for you. Very often we have to break things for a few days while we rebuild and patch. So by all means please export the dev branch and contribute towards it, indeed that is where all Pull Requests should be sent, but do so understanding the API may change beneath you.</p>\\n<h2 id=\\\""making-changes\\\"">Making Changes</h2>\\n<p>To take advantage of our npm build script and jshint config it will be easiest for you if you have node.js installed locally.</p>\\n<p>You can download node.js from <a href=\\\""http://nodejs.org\\\"">nodejs.org</a>.</p>\\n<p>After that you can clone the repository and run <code>npm i</code> inside the cloned folder. This will install dependencies necessary for building the project. For development workflow automation dragular uses <code>gulp &gt;= 3.9.0</code>. Before starting development, make sure that <code>gulp</code> is installed on your machine globally: <code>npm i -g gulp</code>.</p>\\n<h3 id=\\\""developing\\\"">Developing</h3>\\n<p>There are several gulp tasks that are used for generating different builds:</p>\\n<ul>\\n<li><code>gulp dev</code> - Serves files with BrowserSync server, watches &amp; automatically refreshes connected browsers on changes, generates non-minified but concatenated styles &amp; scripts from the dragular source.</li>\\n<li><code>gulp dev:docs</code> - Does exactly the same as <code>gulp dev</code>, except it works with the documentation source.</li>\\n<li><code>gulp build</code> - Concatenates and minifies dragular source files.</li>\\n<li><code>gulp build:docs</code> - Concatenates and minifies documentation source files.</li>\\n</ul>\\n<h3 id=\\\""linting\\\"">Linting</h3>\\n<ul>\\n<li><code>gulp lint</code> &amp; <code>gulp lint:docs</code> - Lint JavaScript files.</li>\\n</ul>\\n<h3 id=\\\""making-a-pull-request\\\"">Making a pull request</h3>\\n<p>Once that is ready, make your changes and submit a Pull Request:</p>\\n<ul>\\n<li><p><strong>Send Pull Requests to the <code>dev</code> branch.</strong> All Pull Requests must be sent to the <code>dev</code> branch, <code>master</code> is the latest release and PRs to that branch will be closed.</p>\\n</li>\\n<li><p><strong>Ensure changes are jshint validated.</strong> Our JSHint configuration file is provided in the repository and you should check against it before submitting.</p>\\n</li>\\n<li><p><strong>Only commit relevant changes.</strong> Don&#39;t include changes that are not directly relevant to the fix you are making. The more focused a PR is, the faster it will get attention and be merged. Extra files changing only whitespace or trash files will likely get your PR closed.</p>\\n</li>\\n</ul>\\n<p>Dependencies for building from source and running tests:</p>\\n<h2 id=\\\""coding-style-preferences-are-not-contributions\\\"">Coding style preferences are not contributions</h2>\\n<p>If your PR is doing little more than changing the Dragular source code into a format / coding style that you prefer then we will automatically close it. All PRs must adhere to the coding style already set-out across the lines of code in Dragular. Your personal preferences for how things should &quot;look&quot; or be structured do not apply here, sorry. PRs should fix bugs, fix documentation or add features. No changes for the sake of change.</p>\\n<h2 id=\\\""i-don-t-really-like-git-node-js-but-i-can-fix-this-bug\\\"">I don&#39;t really like git / node.js, but I can fix this bug</h2>\\n<p>That is fine too. While Pull Requests are the best thing in the world for us, they are not the only way to help. You&#39;re welcome to post fixes to our forum or even just email them to us. All we ask is that you still adhere to the guidelines presented here re: JSHint, etc.</p>\\n\"");}]);\n\n/***/ }\n/******/ ]);""],""sourceRoot"":""/source/""}"
e19dbc4df3911acf44fbfcdcc49abb07f4cc6167,15052702,    //from https://stackoverflow.com/questions/15052702/count-unique-elements-in-array-without-sorting
6e9f83efc88df109b0000e96a14201718cf73a18,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
d8bdd74550a4c23a5dffc262e2653bc48639ecc6,9517879,"// To get around that, inject the gapi library onto the page (http://stackoverflow.com/a/9517879)"
bbaac5a33975b0d535c9566797e4e6c775470207,758570,// see http://stackoverflow.com/questions/758570/.
16301765d337f53b97082add0f64c83b718e63bd,3330919,        // http://stackoverflow.com/a/3330919)
a14597e59331194d09169983ac67deefa8e52a8e,120295,// http://stackoverflow.com/questions/120295/what-is-a-good-oo-c-wrapper-for-sqlite
ff5322b1c39de7bda2fc27db52e1ce3c81a495b7,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
b5e01be30f99b3491826d0de0adf6bda75431ba0,18082 7167553,"{""version"":3,""file"":""ractive.min.js"",""sources"":[""ractive.js""],""sourcesContent"":[""/*\n\tRactive.js v0.9.0-edge\n\tSat Jan 21 2017 16:19:26 GMT+0000 (UTC) - commit 17e74e20b46dabb3f1342d70e254b1fb438442d3\n\n\thttp://ractivejs.org\n\thttp://twitter.com/RactiveJS\n\n\tReleased under the MIT License.\n*/\n\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t((function() { var current = global.Ractive; var next = factory(); next.noConflict = function() { global.Ractive = current; return next; }; return global.Ractive = next; })());\n}(this, (function () { 'use strict';\n\nvar defaults = {\n\t// render placement:\n\tel:                     void 0,\n\tappend:\t\t\t\t    false,\n\n\t// template:\n\ttemplate:               null,\n\n\t// parse:\n\tdelimiters:             [ '{{', '}}' ],\n\ttripleDelimiters:       [ '{{{', '}}}' ],\n\tstaticDelimiters:       [ '[[', ']]' ],\n\tstaticTripleDelimiters: [ '[[[', ']]]' ],\n\tcsp: \t\t\t\t\ttrue,\n\tinterpolate:            false,\n\tpreserveWhitespace:     false,\n\tsanitize:               false,\n\tstripComments:          true,\n\tcontextLines:           0,\n\n\t// data & binding:\n\tdata:                   {},\n\tcomputed:               {},\n\tsyncComputedChildren:   false,\n\tresolveInstanceMembers: true,\n\twarnAboutAmbiguity:     false,\n\tmagic:                  false,\n\tmodifyArrays:           false,\n\tadapt:                  [],\n\tisolated:               false,\n\ttwoway:                 true,\n\tlazy:                   false,\n\n\t// transitions:\n\tnoIntro:                false,\n\tnoOutro:                false,\n\ttransitionsEnabled:     true,\n\tcomplete:               void 0,\n\tnestedTransitions:      true,\n\n\t// css:\n\tcss:                    null,\n\tnoCssTransform:         false\n};\n\n// These are a subset of the easing equations found at\n// https://raw.github.com/danro/easing-js - license info\n// follows:\n\n// --------------------------------------------------\n// easing.js v0.5.4\n// Generic set of easing functions with AMD support\n// https://github.com/danro/easing-js\n// This code may be freely distributed under the MIT license\n// http://danro.mit-license.org/\n// --------------------------------------------------\n// All functions adapted from Thomas Fuchs & Jeremy Kahn\n// Easing Equations (c) 2003 Robert Penner, BSD license\n// https://raw.github.com/danro/easing-js/master/LICENSE\n// --------------------------------------------------\n\n// In that library, the functions named easeIn, easeOut, and\n// easeInOut below are named easeInCubic, easeOutCubic, and\n// (you guessed it) easeInOutCubic.\n//\n// You can add additional easing functions to this list, and they\n// will be globally available.\n\n\nvar easing = {\n\tlinear: function linear ( pos ) { return pos; },\n\teaseIn: function easeIn ( pos ) { return Math.pow( pos, 3 ); },\n\teaseOut: function easeOut ( pos ) { return ( Math.pow( ( pos - 1 ), 3 ) + 1 ); },\n\teaseInOut: function easeInOut ( pos ) {\n\t\tif ( ( pos /= 0.5 ) < 1 ) { return ( 0.5 * Math.pow( pos, 3 ) ); }\n\t\treturn ( 0.5 * ( Math.pow( ( pos - 2 ), 3 ) + 2 ) );\n\t}\n};\n\nvar toString$1$1 = Object.prototype.toString;\n\n\nfunction isEqual ( a, b ) {\n\tif ( a === null && b === null ) {\n\t\treturn true;\n\t}\n\n\tif ( typeof a === 'object' || typeof b === 'object' ) {\n\t\treturn false;\n\t}\n\n\treturn a === b;\n}\n\n// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\nfunction isNumeric ( thing ) {\n\treturn !isNaN( parseFloat( thing ) ) && isFinite( thing );\n}\n\nfunction isObject ( thing ) {\n\treturn ( thing && toString$1$1.call( thing ) === '[object Object]' );\n}\n\nfunction isObjectLike ( thing ) {\n\tif ( !thing ) { return false; }\n\tvar type = typeof thing;\n\tif ( type === 'object' || type === 'function' ) { return true; }\n}\n\n/* global console, navigator */\n/* eslint no-console:\""off\"" */\n\nvar win = typeof window !== 'undefined' ? window : null;\nvar doc = win ? document : null;\n\nvar isClient = !!doc;\nvar isJsdom = ( typeof navigator !== 'undefined' && /jsDom/.test( navigator.appName ) );\nvar hasConsole = ( typeof console !== 'undefined' && typeof console.warn === 'function' && typeof console.warn.apply === 'function' );\n\nvar magic;\ntry {\n\tObject.defineProperty({}, 'test', { value: 0 });\n\tmagic = true;\n} catch ( e ) {\n\tmagic = false;\n}\n\nvar svg = doc ?\n\tdoc.implementation.hasFeature( 'http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1' ) :\n\tfalse;\n\nvar vendors = [ 'o', 'ms', 'moz', 'webkit' ];\n\nvar noop = function () {};\n\n/* global console */\n/* eslint no-console:\""off\"" */\n\nvar alreadyWarned = {};\nvar log;\nvar printWarning;\nvar welcome;\n\nif ( hasConsole ) {\n\tvar welcomeIntro = [\n\t\t\""%cRactive.js %c0.9.0-edge-17e74e20b46dabb3f1342d70e254b1fb438442d3 %cin debug mode, %cmore...\"",\n\t\t'color: rgb(114, 157, 52); font-weight: normal;',\n\t\t'color: rgb(85, 85, 85); font-weight: normal;',\n\t\t'color: rgb(85, 85, 85); font-weight: normal;',\n\t\t'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'\n\t];\n\tvar welcomeMessage = \""You're running Ractive 0.9.0-edge-17e74e20b46dabb3f1342d70e254b1fb438442d3 in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\\n\\nTo disable debug mode, add this line at the start of your app:\\n  Ractive.DEBUG = false;\\n\\nTo disable debug mode when your app is minified, add this snippet:\\n  Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\\n\\nGet help and support:\\n  http://docs.ractivejs.org\\n  http://stackoverflow.com/questions/tagged/ractivejs\\n  http://groups.google.com/forum/#!forum/ractive-js\\n  http://twitter.com/ractivejs\\n\\nFound a bug? Raise an issue:\\n  https://github.com/ractivejs/ractive/issues\\n\\n\"";\n\n\twelcome = function () {\n\t\tif ( Ractive.WELCOME_MESSAGE === false ) {\n\t\t\twelcome = noop;\n\t\t\treturn;\n\t\t}\n\t\tvar message = 'WELCOME_MESSAGE' in Ractive ? Ractive.WELCOME_MESSAGE : welcomeMessage;\n\t\tvar hasGroup = !!console.groupCollapsed;\n\t\tif ( hasGroup ) { console.groupCollapsed.apply( console, welcomeIntro ); }\n\t\tconsole.log( message );\n\t\tif ( hasGroup ) {\n\t\t\tconsole.groupEnd( welcomeIntro );\n\t\t}\n\n\t\twelcome = noop;\n\t};\n\n\tprintWarning = function ( message, args ) {\n\t\twelcome();\n\n\t\t// extract information about the instance this message pertains to, if applicable\n\t\tif ( typeof args[ args.length - 1 ] === 'object' ) {\n\t\t\tvar options = args.pop();\n\t\t\tvar ractive = options ? options.ractive : null;\n\n\t\t\tif ( ractive ) {\n\t\t\t\t// if this is an instance of a component that we know the name of, add\n\t\t\t\t// it to the message\n\t\t\t\tvar name;\n\t\t\t\tif ( ractive.component && ( name = ractive.component.name ) ) {\n\t\t\t\t\tmessage = \""<\"" + name + \""> \"" + message;\n\t\t\t\t}\n\n\t\t\t\tvar node;\n\t\t\t\tif ( node = ( options.node || ( ractive.fragment && ractive.fragment.rendered && ractive.find( '*' ) ) ) ) {\n\t\t\t\t\targs.push( node );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn.apply( console, [ '%cRactive.js: %c' + message, 'color: rgb(114, 157, 52);', 'color: rgb(85, 85, 85);' ].concat( args ) );\n\t};\n\n\tlog = function () {\n\t\tconsole.log.apply( console, arguments );\n\t};\n} else {\n\tprintWarning = log = welcome = noop;\n}\n\nfunction format ( message, args ) {\n\treturn message.replace( /%s/g, function () { return args.shift(); } );\n}\n\nfunction fatal ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\tthrow new Error( message );\n}\n\nfunction logIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\tlog.apply( null, arguments );\n\t}\n}\n\nfunction warn ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\tprintWarning( message, args );\n}\n\nfunction warnOnce ( message ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\tmessage = format( message, args );\n\n\tif ( alreadyWarned[ message ] ) {\n\t\treturn;\n\t}\n\n\talreadyWarned[ message ] = true;\n\tprintWarning( message, args );\n}\n\nfunction warnIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\twarn.apply( null, arguments );\n\t}\n}\n\nfunction warnOnceIfDebug () {\n\tif ( Ractive.DEBUG ) {\n\t\twarnOnce.apply( null, arguments );\n\t}\n}\n\n// Error messages that are used (or could be) in multiple places\nvar badArguments = 'Bad arguments';\nvar noRegistryFunctionReturn = 'A function was specified for \""%s\"" %s, but no %s was returned';\nvar missingPlugin = function ( name, type ) { return (\""Missing \\\""\"" + name + \""\\\"" \"" + type + \"" plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#\"" + type + \""s\""); };\n\nfunction findInViewHierarchy ( registryName, ractive, name ) {\n\tvar instance = findInstance( registryName, ractive, name );\n\treturn instance ? instance[ registryName ][ name ] : null;\n}\n\nfunction findInstance ( registryName, ractive, name ) {\n\twhile ( ractive ) {\n\t\tif ( name in ractive[ registryName ] ) {\n\t\t\treturn ractive;\n\t\t}\n\n\t\tif ( ractive.isolated ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tractive = ractive.parent;\n\t}\n}\n\nfunction interpolate ( from, to, ractive, type ) {\n\tif ( from === to ) { return null; }\n\n\tif ( type ) {\n\t\tvar interpol = findInViewHierarchy( 'interpolators', ractive, type );\n\t\tif ( interpol ) { return interpol( from, to ) || null; }\n\n\t\tfatal( missingPlugin( type, 'interpolator' ) );\n\t}\n\n\treturn interpolators.number( from, to ) ||\n\t       interpolators.array( from, to ) ||\n\t       interpolators.object( from, to ) ||\n\t       null;\n}\n\nfunction snap ( to ) {\n\treturn function () { return to; };\n}\n\nvar interpolators = {\n\tnumber: function number ( from, to ) {\n\t\tif ( !isNumeric( from ) || !isNumeric( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfrom = +from;\n\t\tto = +to;\n\n\t\tvar delta = to - from;\n\n\t\tif ( !delta ) {\n\t\t\treturn function () { return from; };\n\t\t}\n\n\t\treturn function ( t ) {\n\t\t\treturn from + ( t * delta );\n\t\t};\n\t},\n\n\tarray: function array ( from, to ) {\n\t\tvar len, i;\n\n\t\tif ( !Array.isArray( from ) || !Array.isArray( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar intermediate = [];\n\t\tvar interpolators = [];\n\n\t\ti = len = Math.min( from.length, to.length );\n\t\twhile ( i-- ) {\n\t\t\tinterpolators[i] = interpolate( from[i], to[i] );\n\t\t}\n\n\t\t// surplus values - don't interpolate, but don't exclude them either\n\t\tfor ( i=len; i<from.length; i+=1 ) {\n\t\t\tintermediate[i] = from[i];\n\t\t}\n\n\t\tfor ( i=len; i<to.length; i+=1 ) {\n\t\t\tintermediate[i] = to[i];\n\t\t}\n\n\t\treturn function ( t ) {\n\t\t\tvar i = len;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tintermediate[i] = interpolators[i]( t );\n\t\t\t}\n\n\t\t\treturn intermediate;\n\t\t};\n\t},\n\n\tobject: function object ( from, to ) {\n\t\tif ( !isObject( from ) || !isObject( to ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar properties = [];\n\t\tvar intermediate = {};\n\t\tvar interpolators = {};\n\n\t\tfor ( var prop in from ) {\n\t\t\tif ( from.hasOwnProperty( prop ) ) {\n\t\t\t\tif ( to.hasOwnProperty( prop ) ) {\n\t\t\t\t\tproperties.push( prop );\n\t\t\t\t\tinterpolators[ prop ] = interpolate( from[ prop ], to[ prop ] ) || snap( to[ prop ] );\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tintermediate[ prop ] = from[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( var prop$1 in to ) {\n\t\t\tif ( to.hasOwnProperty( prop$1 ) && !from.hasOwnProperty( prop$1 ) ) {\n\t\t\t\tintermediate[ prop$1 ] = to[ prop$1 ];\n\t\t\t}\n\t\t}\n\n\t\tvar len = properties.length;\n\n\t\treturn function ( t ) {\n\t\t\tvar i = len;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar prop = properties[i];\n\n\t\t\t\tintermediate[ prop ] = interpolators[ prop ]( t );\n\t\t\t}\n\n\t\t\treturn intermediate;\n\t\t};\n\t}\n};\n\nfunction enqueue ( ractive, event ) {\n\tif ( ractive.event ) {\n\t\tractive._eventQueue.push( ractive.event );\n\t}\n\n\tractive.event = event;\n}\n\nfunction dequeue ( ractive ) {\n\tif ( ractive._eventQueue.length ) {\n\t\tractive.event = ractive._eventQueue.pop();\n\t} else {\n\t\tractive.event = null;\n\t}\n}\n\nvar initStars = {};\nvar bubbleStars = {};\n\n// cartesian product of name parts and stars\n// adjusted appropriately for special cases\nfunction variants ( name, initial ) {\n\tvar map = initial ? initStars : bubbleStars;\n\tif ( map[ name ] ) { return map[ name ]; }\n\n\tvar parts = name.split( '.' );\n\tvar result = [];\n\tvar base = false;\n\n\t// initial events the implicit namespace of 'this'\n\tif ( initial ) {\n\t\tparts.unshift( 'this' );\n\t\tbase = true;\n\t}\n\n\t// use max - 1 bits as a bitmap to pick a part or a *\n\t// need to skip the full star case if the namespace is synthetic\n\tvar max = Math.pow( 2, parts.length ) - ( initial ? 1 : 0 );\n\tfor ( var i = 0; i < max; i++ ) {\n\t\tvar join = [];\n\t\tfor ( var j = 0; j < parts.length; j++ ) {\n\t\t\tjoin.push( 1 & ( i >> j ) ? '*' : parts[j] );\n\t\t}\n\t\tresult.unshift( join.join( '.' ) );\n\t}\n\n\tif ( base ) {\n\t\t// include non-this-namespaced versions\n\t\tif ( parts.length > 2 ) {\n\t\t\tresult.push.apply( result, variants( name, false ) );\n\t\t} else {\n\t\t\tresult.push( '*' );\n\t\t\tresult.push( name );\n\t\t}\n\t}\n\n\tmap[ name ] = result;\n\treturn result;\n}\n\nfunction fireEvent ( ractive, eventName, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( !eventName ) { return; }\n\n\tif ( !options.event ) {\n\t\toptions.event = {\n\t\t\tname: eventName,\n\t\t\t// until event not included as argument default\n\t\t\t_noArg: true\n\t\t};\n\t} else {\n\t\toptions.event.name = eventName;\n\t}\n\n\tvar eventNames = ractive._nsSubs ? variants( eventName, true ) : [ '*', eventName ];\n\n\treturn fireEventAs( ractive, eventNames, options.event, options.args, true );\n}\n\nfunction fireEventAs  ( ractive, eventNames, event, args, initialFire ) {\n\tif ( initialFire === void 0 ) initialFire = false;\n\n\tvar bubble = true;\n\n\tif ( initialFire || ractive._nsSubs ) {\n\t\tenqueue( ractive, event );\n\n\t\tvar i = eventNames.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( eventNames[ i ] in ractive._subs ) {\n\t\t\t\tbubble = notifySubscribers( ractive, ractive._subs[ eventNames[ i ] ], event, args ) && bubble;\n\t\t\t}\n\t\t}\n\n\t\tdequeue( ractive );\n\t}\n\n\tif ( ractive.parent && bubble ) {\n\n\t\tif ( initialFire && ractive.component ) {\n\t\t\tvar fullName = ractive.component.name + '.' + eventNames[ eventNames.length - 1 ];\n\t\t\teventNames = variants( fullName, false );\n\n\t\t\tif ( event && !event.component ) {\n\t\t\t\tevent.component = ractive;\n\t\t\t}\n\t\t}\n\n\t\tfireEventAs( ractive.parent, eventNames, event, args );\n\t}\n\n\treturn bubble;\n}\n\nfunction notifySubscribers ( ractive, subscribers, event, args ) {\n\tvar originalEvent = null;\n\tvar stopEvent = false;\n\n\tif ( event && !event._noArg ) {\n\t\targs = [ event ].concat( args );\n\t}\n\n\t// subscribers can be modified inflight, e.g. \""once\"" functionality\n\t// so we need to copy to make sure everyone gets called\n\tsubscribers = subscribers.slice();\n\n\tfor ( var i = 0, len = subscribers.length; i < len; i += 1 ) {\n\t\tif ( !subscribers[ i ].off && subscribers[ i ].apply( ractive, args ) === false ) {\n\t\t\tstopEvent = true;\n\t\t}\n\t}\n\n\tif ( event && !event._noArg && stopEvent && ( originalEvent = event.original ) ) {\n\t\toriginalEvent.preventDefault && originalEvent.preventDefault();\n\t\toriginalEvent.stopPropagation && originalEvent.stopPropagation();\n\t}\n\n\treturn !stopEvent;\n}\n\nvar Hook = function Hook ( event ) {\n\tthis.event = event;\n\tthis.method = 'on' + event;\n};\n\nHook.prototype.fire = function fire ( ractive, arg ) {\n\tif ( ractive[ this.method ] ) {\n\t\targ ? ractive[ this.method ]( arg ) : ractive[ this.method ]();\n\t}\n\n\tvar options = { args: [] };\n\tif ( arg ) { options.args.push( arg ); }\n\toptions.args.push( ractive );\n\tfireEvent( ractive, this.event, options );\n};\n\nfunction addToArray ( array, value ) {\n\tvar index = array.indexOf( value );\n\n\tif ( index === -1 ) {\n\t\tarray.push( value );\n\t}\n}\n\nfunction arrayContains ( array, value ) {\n\tfor ( var i = 0, c = array.length; i < c; i++ ) {\n\t\tif ( array[i] == value ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction arrayContentsMatch ( a, b ) {\n\tvar i;\n\n\tif ( !Array.isArray( a ) || !Array.isArray( b ) ) {\n\t\treturn false;\n\t}\n\n\tif ( a.length !== b.length ) {\n\t\treturn false;\n\t}\n\n\ti = a.length;\n\twhile ( i-- ) {\n\t\tif ( a[i] !== b[i] ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction ensureArray ( x ) {\n\tif ( typeof x === 'string' ) {\n\t\treturn [ x ];\n\t}\n\n\tif ( x === undefined ) {\n\t\treturn [];\n\t}\n\n\treturn x;\n}\n\nfunction lastItem ( array ) {\n\treturn array[ array.length - 1 ];\n}\n\nfunction removeFromArray ( array, member ) {\n\tif ( !array ) {\n\t\treturn;\n\t}\n\n\tvar index = array.indexOf( member );\n\n\tif ( index !== -1 ) {\n\t\tarray.splice( index, 1 );\n\t}\n}\n\nfunction combine () {\n\tvar arrays = [], len = arguments.length;\n\twhile ( len-- ) arrays[ len ] = arguments[ len ];\n\n\tvar res = arrays.concat.apply( [], arrays );\n\tvar i = res.length;\n\twhile ( i-- ) {\n\t\tvar idx = res.indexOf( res[i] );\n\t\tif ( ~idx && idx < i ) { res.splice( i, 1 ); }\n\t}\n\n\treturn res;\n}\n\nfunction toArray ( arrayLike ) {\n\tvar array = [];\n\tvar i = arrayLike.length;\n\twhile ( i-- ) {\n\t\tarray[i] = arrayLike[i];\n\t}\n\n\treturn array;\n}\n\nfunction findMap ( array, fn ) {\n\tvar len = array.length;\n\tfor ( var i = 0; i < len; i++ ) {\n\t\tvar result = fn( array[i] );\n\t\tif ( result ) { return result; }\n\t}\n}\n\nvar TransitionManager = function TransitionManager ( callback, parent ) {\n\tthis.callback = callback;\n\tthis.parent = parent;\n\n\tthis.intros = [];\n\tthis.outros = [];\n\n\tthis.children = [];\n\tthis.totalChildren = this.outroChildren = 0;\n\n\tthis.detachQueue = [];\n\tthis.outrosComplete = false;\n\n\tif ( parent ) {\n\t\tparent.addChild( this );\n\t}\n};\n\nTransitionManager.prototype.add = function add ( transition ) {\n\tvar list = transition.isIntro ? this.intros : this.outros;\n\ttransition.starting = true;\n\tlist.push( transition );\n};\n\nTransitionManager.prototype.addChild = function addChild ( child ) {\n\tthis.children.push( child );\n\n\tthis.totalChildren += 1;\n\tthis.outroChildren += 1;\n};\n\nTransitionManager.prototype.decrementOutros = function decrementOutros () {\n\tthis.outroChildren -= 1;\n\tcheck( this );\n};\n\nTransitionManager.prototype.decrementTotal = function decrementTotal () {\n\tthis.totalChildren -= 1;\n\tcheck( this );\n};\n\nTransitionManager.prototype.detachNodes = function detachNodes () {\n\tthis.detachQueue.forEach( detach$1 );\n\tthis.children.forEach( _detachNodes );\n};\n\nTransitionManager.prototype.ready = function ready () {\n\tif ( this.detachQueue.length ) { detachImmediate( this ); }\n};\n\nTransitionManager.prototype.remove = function remove ( transition ) {\n\tvar list = transition.isIntro ? this.intros : this.outros;\n\tremoveFromArray( list, transition );\n\tcheck( this );\n};\n\nTransitionManager.prototype.start = function start () {\n\tthis.children.forEach( function (c) { return c.start(); } );\n\tthis.intros.concat( this.outros ).forEach( function (t) { return t.start(); } );\n\tthis.ready = true;\n\tcheck( this );\n};\n\nfunction detach$1 ( element ) {\n\telement.detach();\n}\n\nfunction _detachNodes ( tm ) { // _ to avoid transpiler quirk\n\ttm.detachNodes();\n}\n\nfunction check ( tm ) {\n\tif ( !tm.ready || tm.outros.length || tm.outroChildren ) { return; }\n\n\t// If all outros are complete, and we haven't already done this,\n\t// we notify the parent if there is one, otherwise\n\t// start detaching nodes\n\tif ( !tm.outrosComplete ) {\n\t\ttm.outrosComplete = true;\n\n\t\tif ( tm.parent && !tm.parent.outrosComplete ) {\n\t\t\ttm.parent.decrementOutros( tm );\n\t\t} else {\n\t\t\ttm.detachNodes();\n\t\t}\n\t}\n\n\t// Once everything is done, we can notify parent transition\n\t// manager and call the callback\n\tif ( !tm.intros.length && !tm.totalChildren ) {\n\t\tif ( typeof tm.callback === 'function' ) {\n\t\t\ttm.callback();\n\t\t}\n\n\t\tif ( tm.parent && !tm.notifiedTotal ) {\n\t\t\ttm.notifiedTotal = true;\n\t\t\ttm.parent.decrementTotal();\n\t\t}\n\t}\n}\n\n// check through the detach queue to see if a node is up or downstream from a\n// transition and if not, go ahead and detach it\nfunction detachImmediate ( manager ) {\n\tvar queue = manager.detachQueue;\n\tvar outros = collectAllOutros( manager );\n\n\tvar i = queue.length;\n\tvar j = 0;\n\tvar node, trans;\n\tstart: while ( i-- ) {\n\t\tnode = queue[i].node;\n\t\tj = outros.length;\n\t\twhile ( j-- ) {\n\t\t\ttrans = outros[j].element.node;\n\t\t\t// check to see if the node is, contains, or is contained by the transitioning node\n\t\t\tif ( trans === node || trans.contains( node ) || node.contains( trans ) ) { continue start; }\n\t\t}\n\n\t\t// no match, we can drop it\n\t\tqueue[i].detach();\n\t\tqueue.splice( i, 1 );\n\t}\n}\n\nfunction collectAllOutros ( manager, _list ) {\n\tvar list = _list;\n\n\t// if there's no list, we're starting at the root to build one\n\tif ( !list ) {\n\t\tlist = [];\n\t\tvar parent = manager;\n\t\twhile ( parent.parent ) { parent = parent.parent; }\n\t\treturn collectAllOutros( parent, list );\n\t} else {\n\t\t// grab all outros from child managers\n\t\tvar i = manager.children.length;\n\t\twhile ( i-- ) {\n\t\t\tlist = collectAllOutros( manager.children[i], list );\n\t\t}\n\n\t\t// grab any from this manager if there are any\n\t\tif ( manager.outros.length ) { list = list.concat( manager.outros ); }\n\n\t\treturn list;\n\t}\n}\n\nvar changeHook = new Hook( 'change' );\n\nvar batch;\n\nvar runloop = {\n\tstart: function start ( instance ) {\n\t\tvar fulfilPromise;\n\t\tvar promise = new Promise( function (f) { return ( fulfilPromise = f ); } );\n\n\t\tbatch = {\n\t\t\tpreviousBatch: batch,\n\t\t\ttransitionManager: new TransitionManager( fulfilPromise, batch && batch.transitionManager ),\n\t\t\tfragments: [],\n\t\t\ttasks: [],\n\t\t\timmediateObservers: [],\n\t\t\tdeferredObservers: [],\n\t\t\tractives: [],\n\t\t\tinstance: instance,\n\t\t\tpromise: promise\n\t\t};\n\n\t\treturn promise;\n\t},\n\n\tend: function end () {\n\t\tflushChanges();\n\n\t\tif ( !batch.previousBatch ) { batch.transitionManager.start(); }\n\n\t\tbatch = batch.previousBatch;\n\t},\n\n\taddFragment: function addFragment ( fragment ) {\n\t\taddToArray( batch.fragments, fragment );\n\t},\n\n\t// TODO: come up with a better way to handle fragments that trigger their own update\n\taddFragmentToRoot: function addFragmentToRoot ( fragment ) {\n\t\tif ( !batch ) { return; }\n\n\t\tvar b = batch;\n\t\twhile ( b.previousBatch ) {\n\t\t\tb = b.previousBatch;\n\t\t}\n\n\t\taddToArray( b.fragments, fragment );\n\t},\n\n\taddInstance: function addInstance ( instance ) {\n\t\tif ( batch ) { addToArray( batch.ractives, instance ); }\n\t},\n\n\taddObserver: function addObserver ( observer, defer ) {\n\t\taddToArray( defer ? batch.deferredObservers : batch.immediateObservers, observer );\n\t},\n\n\tregisterTransition: function registerTransition ( transition ) {\n\t\ttransition._manager = batch.transitionManager;\n\t\tbatch.transitionManager.add( transition );\n\t},\n\n\t// synchronise node detachments with transition ends\n\tdetachWhenReady: function detachWhenReady ( thing ) {\n\t\tbatch.transitionManager.detachQueue.push( thing );\n\t},\n\n\tscheduleTask: function scheduleTask ( task, postRender ) {\n\t\tvar _batch;\n\n\t\tif ( !batch ) {\n\t\t\ttask();\n\t\t} else {\n\t\t\t_batch = batch;\n\t\t\twhile ( postRender && _batch.previousBatch ) {\n\t\t\t\t// this can't happen until the DOM has been fully updated\n\t\t\t\t// otherwise in some situations (with components inside elements)\n\t\t\t\t// transitions and decorators will initialise prematurely\n\t\t\t\t_batch = _batch.previousBatch;\n\t\t\t}\n\n\t\t\t_batch.tasks.push( task );\n\t\t}\n\t},\n\n\tpromise: function promise () {\n\t\tif ( !batch ) { return Promise.resolve(); }\n\n\t\tvar target = batch;\n\t\twhile ( target.previousBatch ) {\n\t\t\ttarget = target.previousBatch;\n\t\t}\n\n\t\treturn target.promise || Promise.resolve();\n\t}\n};\n\nfunction dispatch$1 ( observer ) {\n\tobserver.dispatch();\n}\n\nfunction flushChanges () {\n\tvar which = batch.immediateObservers;\n\tbatch.immediateObservers = [];\n\twhich.forEach( dispatch$1 );\n\n\t// Now that changes have been fully propagated, we can update the DOM\n\t// and complete other tasks\n\tvar i = batch.fragments.length;\n\tvar fragment;\n\n\twhich = batch.fragments;\n\tbatch.fragments = [];\n\tvar ractives = batch.ractives;\n\tbatch.ractives = [];\n\n\twhile ( i-- ) {\n\t\tfragment = which[i];\n\n\t\t// TODO deprecate this. It's annoying and serves no useful function\n\t\tvar ractive = fragment.ractive;\n\t\tif ( Object.keys( ractive.viewmodel.changes ).length ) {\n\t\t\tchangeHook.fire( ractive, ractive.viewmodel.changes );\n\t\t}\n\t\tractive.viewmodel.changes = {};\n\t\tremoveFromArray( ractives, ractive );\n\n\t\tfragment.update();\n\t}\n\n\ti = ractives.length;\n\twhile ( i-- ) {\n\t\tvar ractive$1 = ractives[i];\n\t\tchangeHook.fire( ractive$1, ractive$1.viewmodel.changes );\n\t\tractive$1.viewmodel.changes = {};\n\t}\n\n\tbatch.transitionManager.ready();\n\n\twhich = batch.deferredObservers;\n\tbatch.deferredObservers = [];\n\twhich.forEach( dispatch$1 );\n\n\tvar tasks = batch.tasks;\n\tbatch.tasks = [];\n\n\tfor ( i = 0; i < tasks.length; i += 1 ) {\n\t\ttasks[i]();\n\t}\n\n\t// If updating the view caused some model blowback - e.g. a triple\n\t// containing <option> elements caused the binding on the <select>\n\t// to update - then we start over\n\tif ( batch.fragments.length || batch.immediateObservers.length || batch.deferredObservers.length || batch.ractives.length || batch.tasks.length ) { return flushChanges(); }\n}\n\nvar refPattern = /\\[\\s*(\\*|[0-9]|[1-9][0-9]+)\\s*\\]/g;\nvar splitPattern = /([^\\\\](?:\\\\\\\\)*)\\./;\nvar escapeKeyPattern = /\\\\|\\./g;\nvar unescapeKeyPattern = /((?:\\\\)+)\\1|\\\\(\\.)/g;\n\nfunction escapeKey ( key ) {\n\tif ( typeof key === 'string' ) {\n\t\treturn key.replace( escapeKeyPattern, '\\\\$&' );\n\t}\n\n\treturn key;\n}\n\nfunction normalise ( ref ) {\n\treturn ref ? ref.replace( refPattern, '.$1' ) : '';\n}\n\nfunction splitKeypath ( keypath ) {\n\tvar result = [];\n\tvar match;\n\n\tkeypath = normalise( keypath );\n\n\twhile ( match = splitPattern.exec( keypath ) ) {\n\t\tvar index = match.index + match[1].length;\n\t\tresult.push( keypath.substr( 0, index ) );\n\t\tkeypath = keypath.substr( index + 1 );\n\t}\n\n\tresult.push( keypath );\n\n\treturn result;\n}\n\nfunction unescapeKey ( key ) {\n\tif ( typeof key === 'string' ) {\n\t\treturn key.replace( unescapeKeyPattern, '$1$2' );\n\t}\n\n\treturn key;\n}\n\nfunction set$1 ( ractive, pairs ) {\n\tvar promise = runloop.start( ractive, true );\n\n\tvar i = pairs.length;\n\twhile ( i-- ) {\n\t\tvar model = pairs[i][0];\n\t\tvar value = pairs[i][1];\n\t\tvar keypath = pairs[i][2];\n\n\t\tif ( !model ) {\n\t\t\trunloop.end();\n\t\t\tthrow new Error( (\""Failed to set invalid keypath '\"" + keypath + \""'\"") );\n\t\t}\n\n\t\tmodel.set( value );\n\t}\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nvar star = /\\*/;\nfunction gather ( ractive, keypath, base ) {\n\tif ( !base && keypath[0] === '.' ) {\n\t\twarnIfDebug( \""Attempted to set a relative keypath from a non-relative context. You can use a getNodeInfo or event object to set relative keypaths.\"" );\n\t\treturn [];\n\t}\n\n\tvar model = base || ractive.viewmodel;\n\tif ( star.test( keypath ) ) {\n\t\treturn model.findMatches( splitKeypath( keypath ) );\n\t} else {\n\t\treturn [ model.joinAll( splitKeypath( keypath ) ) ];\n\t}\n}\n\nfunction build ( ractive, keypath, value ) {\n\tvar sets = [];\n\n\t// set multiple keypaths in one go\n\tif ( isObject( keypath ) ) {\n\t\tvar loop = function ( k ) {\n\t\t\tif ( keypath.hasOwnProperty( k ) ) {\n\t\t\t\tsets.push.apply( sets, gather( ractive, k ).map( function (m) { return [ m, keypath[k], k ]; } ) );\n\t\t\t}\n\t\t};\n\n\t\tfor ( var k in keypath ) loop( k );\n\n\t}\n\t// set a single keypath\n\telse {\n\t\tsets.push.apply( sets, gather( ractive, keypath ).map( function (m) { return [ m, value, keypath ]; } ) );\n\t}\n\n\treturn sets;\n}\n\nvar errorMessage = 'Cannot add to a non-numeric value';\n\nfunction add$1 ( ractive, keypath, d ) {\n\tif ( typeof keypath !== 'string' || !isNumeric( d ) ) {\n\t\tthrow new Error( 'Bad arguments' );\n\t}\n\n\tvar sets = build( ractive, keypath, d );\n\n\treturn set$1( ractive, sets.map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar add = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( add ) || !isNumeric( value ) ) { throw new Error( errorMessage ); }\n\t\treturn [ model, value + add ];\n\t}));\n}\n\nfunction Ractive$add ( keypath, d ) {\n\treturn add$1( this, keypath, ( d === undefined ? 1 : +d ) );\n}\n\nvar noAnimation = Promise.resolve();\nObject.defineProperty( noAnimation, 'stop', { value: noop });\n\nvar linear$1 = easing.linear;\n\nfunction getOptions ( options, instance ) {\n\toptions = options || {};\n\n\tvar easing$$1;\n\tif ( options.easing ) {\n\t\teasing$$1 = typeof options.easing === 'function' ?\n\t\t\toptions.easing :\n\t\t\tinstance.easing[ options.easing ];\n\t}\n\n\treturn {\n\t\teasing: easing$$1 || linear$1,\n\t\tduration: 'duration' in options ? options.duration : 400,\n\t\tcomplete: options.complete || noop,\n\t\tstep: options.step || noop\n\t};\n}\n\nfunction animate$1 ( ractive, model, to, options ) {\n\toptions = getOptions( options, ractive );\n\tvar from = model.get();\n\n\t// don't bother animating values that stay the same\n\tif ( isEqual( from, to ) ) {\n\t\toptions.complete( options.to );\n\t\treturn noAnimation; // TODO should this have .then and .catch methods?\n\t}\n\n\tvar interpolator = interpolate( from, to, ractive, options.interpolator );\n\n\t// if we can't interpolate the value, set it immediately\n\tif ( !interpolator ) {\n\t\trunloop.start();\n\t\tmodel.set( to );\n\t\trunloop.end();\n\n\t\treturn noAnimation;\n\t}\n\n\treturn model.animate( from, to, options, interpolator );\n}\n\nfunction Ractive$animate ( keypath, to, options ) {\n\tif ( typeof keypath === 'object' ) {\n\t\tvar keys = Object.keys( keypath );\n\n\t\tthrow new Error( (\""ractive.animate(...) no longer supports objects. Instead of ractive.animate({\\n  \"" + (keys.map( function (key) { return (\""'\"" + key + \""': \"" + (keypath[ key ])); } ).join( '\\n  ' )) + \""\\n}, {...}), do\\n\\n\"" + (keys.map( function (key) { return (\""ractive.animate('\"" + key + \""', \"" + (keypath[ key ]) + \"", {...});\""); } ).join( '\\n' )) + \""\\n\"") );\n\t}\n\n\n\treturn animate$1( this, this.viewmodel.joinAll( splitKeypath( keypath ) ), to, options );\n}\n\nfunction updateLiveQueries ( element ) {\n\t// Does this need to be added to any live queries?\n\tvar node = element.node;\n\tvar instance = element.ractive;\n\tvar queries = [];\n\tvar remotes = {};\n\tvar remote = instance.component && instance.component.target === false;\n\tvar i;\n\n\tdo {\n\t\tvar liveQueries = instance._liveQueries;\n\n\t\ti = liveQueries.length;\n\t\twhile ( i-- ) {\n\t\t\tvar query = liveQueries[i];\n\n\t\t\tif ( query.test( node ) ) {\n\t\t\t\tqueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( !remote && instance.component && instance.component.target === false ) { remote = true; }\n\t\tremotes[ instance._guid ] = remote;\n\t} while ( instance = instance.parent );\n\n\ti = queries.length;\n\twhile ( i-- ) {\n\t\tvar query$1 = queries[i];\n\t\tif ( query$1.remote || !remotes[ query$1.ractive._guid ] ) {\n\t\t\tquery$1.add( node );\n\t\t\t// keep register of applicable selectors, for when we teardown\n\t\t\telement.liveQueries.push( query$1 );\n\t\t}\n\t}\n}\n\n// TODO it's unfortunate that this has to run every time a\n// component is rendered... is there a better way?\nfunction updateLiveQueries$1 ( component ) {\n\t// Does this need to be added to any live queries?\n\tvar instance = component.ractive;\n\tvar queries = [];\n\tvar remotes = {};\n\tvar remote = component.target === false;\n\tvar i;\n\n\tdo {\n\t\tvar liveQueries = instance._liveComponentQueries;\n\n\t\ti = liveQueries.length;\n\t\twhile ( i-- ) {\n\t\t\tvar query = liveQueries[i];\n\n\t\t\tif ( query.test( component ) ) {\n\t\t\t\tqueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( !remote && instance.component && instance.component.target === false ) { remote = true; }\n\t\tremotes[ instance._guid ] = remote;\n\t} while ( instance = instance.parent );\n\n\ti = queries.length;\n\twhile ( i-- ) {\n\t\tvar query$1 = queries[i];\n\t\tif ( query$1.remote || !remotes[ query$1.ractive._guid ] ) {\n\t\t\tquery$1.add( component.instance );\n\t\t\t// keep register of applicable selectors, for when we teardown\n\t\t\tcomponent.liveQueries.push( query$1 );\n\t\t}\n\t}\n}\n\nfunction findAnchors ( fragment, name ) {\n\tif ( name === void 0 ) name = null;\n\n\tvar res = [];\n\n\tfindAnchorsIn( fragment, name, res );\n\n\treturn res;\n}\n\nfunction findAnchorsIn ( item, name, result ) {\n\tif ( item.isAnchor ) {\n\t\tif ( !name || item.name === name ) {\n\t\t\tresult.push( item );\n\t\t}\n\t} else if ( item.items ) {\n\t\titem.items.forEach( function (i) { return findAnchorsIn( i, name, result ); } );\n\t} else if ( item.iterations ) {\n\t\titem.iterations.forEach( function (i) { return findAnchorsIn( i, name, result ); } );\n\t} else if ( item.fragment && !item.component ) {\n\t\tfindAnchorsIn( item.fragment, name, result );\n\t}\n}\n\nfunction updateAnchors ( instance, name ) {\n\tif ( name === void 0 ) name = null;\n\n\tvar anchors = findAnchors( instance.fragment, name );\n\tvar idxs = {};\n\tvar children = instance._children.byName;\n\n\tanchors.forEach( function (a) {\n\t\tvar name = a.name;\n\t\tif ( !( name in idxs ) ) { idxs[name] = 0; }\n\t\tvar idx = idxs[name];\n\t\tvar child = ( children[name] || [] )[idx];\n\n\t\tif ( child && child.lastBound !== a ) {\n\t\t\tif ( child.lastBound ) { child.lastBound.removeChild( child ); }\n\t\t\ta.addChild( child );\n\t\t}\n\n\t\tidxs[name]++;\n\t});\n}\n\nfunction unrenderChild ( meta ) {\n\tif ( meta.instance.fragment.rendered ) {\n\t\tmeta.shouldDestroy = true;\n\t\tmeta.instance.unrender();\n\t}\n\tmeta.instance.el = null;\n}\n\nvar attachHook = new Hook( 'attachchild' );\n\nfunction attachChild ( child, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tvar children = this._children;\n\n\tif ( child.parent && child.parent !== this ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is already attached to a different instance \"" + (child.parent._guid) + \"". Please detach it from the other instance using detachChild first.\"") ); }\n\telse if ( child.parent ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is already attached to this instance.\"") ); }\n\n\tvar meta = {\n\t\tinstance: child,\n\t\tractive: this,\n\t\tname: options.name || child.constructor.name || 'Ractive',\n\t\tliveQueries: [],\n\t\ttarget: options.target || false,\n\t\tbubble: bubble$1,\n\t\tfindNextNode: findNextNode$1,\n\t\tremoveFromQuery: removeFromQuery$1\n\t};\n\tmeta.nameOption = options.name;\n\n\t// child is managing itself\n\tif ( !meta.target ) {\n\t\tmeta.parentFragment = this.fragment;\n\t\tmeta.external = true;\n\t} else {\n\t\tvar list;\n\t\tif ( !( list = children.byName[ meta.target ] ) ) {\n\t\t\tlist = [];\n\t\t\tthis.set( (\""@this.children.byName.\"" + (meta.target)), list );\n\t\t}\n\t\tvar idx = options.prepend ? 0 : options.insertAt || list.length;\n\t\tlist.splice( idx, 0, meta );\n\t}\n\n\tchild.set({\n\t\t'@this.parent': this,\n\t\t'@this.root': this.root\n\t});\n\tchild.component = meta;\n\tchildren.push( meta );\n\n\tattachHook.fire( child );\n\n\tvar promise = runloop.start( child, true );\n\n\tif ( meta.target ) {\n\t\tunrenderChild( meta );\n\t\tthis.merge( (\""@this.children.byName.\"" + (meta.target)) );\n\t\tupdateAnchors( this, meta.target );\n\t} else {\n\t\tif ( !child.isolated ) { child.viewmodel.attached( this.fragment ); }\n\t\tif ( child.fragment.rendered ) {\n\t\t\tchild.findAll( '*' ).forEach( function (el) { return updateLiveQueries( el._ractive.proxy ); } );\n\t\t\tchild.findAllComponents().forEach( function (cmp) { return updateLiveQueries$1( cmp.component ); } );\n\t\t\tupdateLiveQueries$1( meta );\n\t\t}\n\t}\n\n\trunloop.end();\n\n\tpromise.ractive = child;\n\treturn promise.then( function () { return child; } );\n}\n\nfunction bubble$1 () { runloop.addFragment( this.instance.fragment ); }\n\nfunction removeFromQuery$1 ( query ) {\n\tquery.remove( this.instance );\n\tremoveFromArray( this.liveQueries, query );\n}\n\nfunction findNextNode$1 () {\n\tif ( this.anchor ) { return this.anchor.findNextNode(); }\n}\n\nvar detachHook = new Hook( 'detach' );\n\nfunction Ractive$detach () {\n\tif ( this.isDetached ) {\n\t\treturn this.el;\n\t}\n\n\tif ( this.el ) {\n\t\tremoveFromArray( this.el.__ractive_instances__, this );\n\t}\n\n\tthis.el = this.fragment.detach();\n\tthis.isDetached = true;\n\n\tdetachHook.fire( this );\n\treturn this.el;\n}\n\nvar detachHook$1 = new Hook( 'detachchild' );\n\nfunction detachChild ( child ) {\n\tvar this$1 = this;\n\n\tvar children = this._children;\n\tvar meta, index;\n\n\tvar i = children.length;\n\twhile ( i-- ) {\n\t\tif ( children[i].instance === child ) {\n\t\t\tindex = i;\n\t\t\tmeta = children[i];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( !meta || child.parent !== this ) { throw new Error( (\""Instance \"" + (child._guid) + \"" is not attached to this instance.\"") ); }\n\n\tvar promise = runloop.start( child, true );\n\n\tif ( meta.anchor ) { meta.anchor.removeChild( meta ); }\n\tif ( !child.isolated ) { child.viewmodel.detached(); }\n\n\trunloop.end();\n\n\tchildren.splice( index, 1 );\n\tif ( meta.target ) {\n\t\tvar list = children.byName[ meta.target ];\n\t\tlist.splice( list.indexOf( meta ), 1 );\n\t\tthis.merge( (\""@this.children.byName.\"" + (meta.target)) );\n\t\tupdateAnchors( this, meta.target );\n\t}\n\tchild.set({\n\t\t'@this.parent': undefined,\n\t\t'@this.root': child\n\t});\n\tchild.component = null;\n\n\tdetachHook$1.fire( child );\n\n\tif ( !meta.target && child.fragment.rendered ) {\n\t\t// keep live queries up to date\n\t\tchild.findAll( '*' ).forEach( function (el) {\n\t\t\tel._ractive.proxy.liveQueries.forEach( function (q) {\n\t\t\t\t// remove from non-self queries\n\t\t\t\tif ( isParent( this$1, q.ractive ) ) { el._ractive.proxy.removeFromQuery( q ); }\n\t\t\t});\n\t\t});\n\n\t\t// keep live component queries up to date\n\t\tchild.findAllComponents().forEach( function (cmp) {\n\t\t\tcmp.component.liveQueries.forEach( function (q) {\n\t\t\t\tif ( isParent( this$1, q.ractive ) ) { cmp.component.removeFromQuery( q ); }\n\t\t\t});\n\t\t});\n\n\t\tmeta.liveQueries.forEach( function (q) { return meta.removeFromQuery( q ); } );\n\t}\n\n\tpromise.ractive = child;\n\treturn promise.then( function () { return child; } );\n}\n\nfunction isParent ( target, check ) {\n\twhile ( target ) {\n\t\tif ( target === check ) { return true; }\n\t\ttarget = target.parent;\n\t}\n}\n\nfunction Ractive$find ( selector, options ) {\n\tvar this$1 = this;\n\tif ( options === void 0 ) options = {};\n\n\tif ( !this.el ) { throw new Error( (\""Cannot call ractive.find('\"" + selector + \""') unless instance is rendered to the DOM\"") ); }\n\n\tvar node = this.fragment.find( selector, options );\n\tif ( node ) { return node; }\n\n\tif ( options.remote ) {\n\t\tfor ( var i = 0; i < this._children.length; i++ ) {\n\t\t\tif ( !this$1._children[i].instance.fragment.rendered ) { continue; }\n\t\t\tnode = this$1._children[i].instance.find( selector, options );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n}\n\nvar html   = 'http://www.w3.org/1999/xhtml';\nvar mathml = 'http://www.w3.org/1998/Math/MathML';\nvar svg$1    = 'http://www.w3.org/2000/svg';\nvar xlink  = 'http://www.w3.org/1999/xlink';\nvar xml    = 'http://www.w3.org/XML/1998/namespace';\nvar xmlns  = 'http://www.w3.org/2000/xmlns';\n\nvar namespaces = { html: html, mathml: mathml, svg: svg$1, xlink: xlink, xml: xml, xmlns: xmlns };\n\nvar createElement;\nvar matches;\nvar div;\nvar methodNames;\nvar unprefixed;\nvar prefixed;\nvar i;\nvar j;\nvar makeFunction;\n\n// Test for SVG support\nif ( !svg ) {\n\tcreateElement = function ( type, ns, extend ) {\n\t\tif ( ns && ns !== html ) {\n\t\t\tthrow 'This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you\\'re trying to render SVG in an older browser. See http://docs.ractivejs.org/latest/svg-and-older-browsers for more information';\n\t\t}\n\n\t\treturn extend ?\n\t\t\tdoc.createElement( type, extend ) :\n\t\t\tdoc.createElement( type );\n\t};\n} else {\n\tcreateElement = function ( type, ns, extend ) {\n\t\tif ( !ns || ns === html ) {\n\t\t\treturn extend ?\n\t\t\t\tdoc.createElement( type, extend ) :\n\t\t\t\tdoc.createElement( type );\n\t\t}\n\n\t\treturn extend ?\n\t\t\tdoc.createElementNS( ns, type, extend ) :\n\t\t\tdoc.createElementNS( ns, type );\n\t};\n}\n\nfunction createDocumentFragment () {\n\treturn doc.createDocumentFragment();\n}\n\nfunction getElement ( input ) {\n\tvar output;\n\n\tif ( !input || typeof input === 'boolean' ) { return; }\n\n\tif ( !win || !doc || !input ) {\n\t\treturn null;\n\t}\n\n\t// We already have a DOM node - no work to do. (Duck typing alert!)\n\tif ( input.nodeType ) {\n\t\treturn input;\n\t}\n\n\t// Get node from string\n\tif ( typeof input === 'string' ) {\n\t\t// try ID first\n\t\toutput = doc.getElementById( input );\n\n\t\t// then as selector, if possible\n\t\tif ( !output && doc.querySelector ) {\n\t\t\toutput = doc.querySelector( input );\n\t\t}\n\n\t\t// did it work?\n\t\tif ( output && output.nodeType ) {\n\t\t\treturn output;\n\t\t}\n\t}\n\n\t// If we've been given a collection (jQuery, Zepto etc), extract the first item\n\tif ( input[0] && input[0].nodeType ) {\n\t\treturn input[0];\n\t}\n\n\treturn null;\n}\n\nif ( !isClient ) {\n\tmatches = null;\n} else {\n\tdiv = createElement( 'div' );\n\tmethodNames = [ 'matches', 'matchesSelector' ];\n\n\tmakeFunction = function ( methodName ) {\n\t\treturn function ( node, selector ) {\n\t\t\treturn node[ methodName ]( selector );\n\t\t};\n\t};\n\n\ti = methodNames.length;\n\n\twhile ( i-- && !matches ) {\n\t\tunprefixed = methodNames[i];\n\n\t\tif ( div[ unprefixed ] ) {\n\t\t\tmatches = makeFunction( unprefixed );\n\t\t} else {\n\t\t\tj = vendors.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\tprefixed = vendors[i] + unprefixed.substr( 0, 1 ).toUpperCase() + unprefixed.substring( 1 );\n\n\t\t\t\tif ( div[ prefixed ] ) {\n\t\t\t\t\tmatches = makeFunction( prefixed );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// IE8...\n\tif ( !matches ) {\n\t\tmatches = function ( node, selector ) {\n\t\t\tvar parentNode, i;\n\n\t\t\tparentNode = node.parentNode;\n\n\t\t\tif ( !parentNode ) {\n\t\t\t\t// empty dummy <div>\n\t\t\t\tdiv.innerHTML = '';\n\n\t\t\t\tparentNode = div;\n\t\t\t\tnode = node.cloneNode();\n\n\t\t\t\tdiv.appendChild( node );\n\t\t\t}\n\n\t\t\tvar nodes = parentNode.querySelectorAll( selector );\n\n\t\t\ti = nodes.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( nodes[i] === node ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nfunction detachNode ( node ) {\n\t// stupid ie\n\tif ( node && typeof node.parentNode !== 'unknown' && node.parentNode ) { // eslint-disable-line valid-typeof\n\t\tnode.parentNode.removeChild( node );\n\t}\n\n\treturn node;\n}\n\nfunction safeToStringValue ( value ) {\n\treturn ( value == null || !value.toString ) ? '' : '' + value;\n}\n\nfunction safeAttributeString ( string ) {\n\treturn safeToStringValue( string )\n\t\t.replace( /&/g, '&amp;' )\n\t\t.replace( /\""/g, '&quot;' )\n\t\t.replace( /'/g, '&#39;' );\n}\n\nfunction sortByDocumentPosition ( node, otherNode ) {\n\tif ( node.compareDocumentPosition ) {\n\t\tvar bitmask = node.compareDocumentPosition( otherNode );\n\t\treturn ( bitmask & 2 ) ? 1 : -1;\n\t}\n\n\t// In old IE, we can piggy back on the mechanism for\n\t// comparing component positions\n\treturn sortByItemPosition( node, otherNode );\n}\n\nfunction sortByItemPosition ( a, b ) {\n\tvar baseA = a.component || a._ractive.proxy;\n\tvar baseB = b.component || b._ractive.proxy;\n\n\t// allow for attached childdren outside the template\n\tif ( baseA.target === false && baseB.target === false ) { return 0; }\n\telse if ( baseA.target === false ) { return 1; }\n\telse if ( baseB.target === false ) { return -1; }\n\n\tvar ancestryA = getAncestry( baseA );\n\tvar ancestryB = getAncestry( baseB );\n\n\tvar oldestA = lastItem( ancestryA );\n\tvar oldestB = lastItem( ancestryB );\n\tvar mutualAncestor;\n\n\t// remove items from the end of both ancestries as long as they are identical\n\t// - the final one removed is the closest mutual ancestor\n\twhile ( oldestA && ( oldestA === oldestB ) ) {\n\t\tancestryA.pop();\n\t\tancestryB.pop();\n\n\t\tmutualAncestor = oldestA;\n\n\t\toldestA = lastItem( ancestryA );\n\t\toldestB = lastItem( ancestryB );\n\t}\n\n\t// now that we have the mutual ancestor, we can find which is earliest\n\toldestA = oldestA.component || oldestA;\n\toldestB = oldestB.component || oldestB;\n\n\tvar fragmentA = oldestA.parentFragment;\n\tvar fragmentB = oldestB.parentFragment;\n\n\t// if both items share a parent fragment, our job is easy\n\tif ( fragmentA === fragmentB ) {\n\t\tvar indexA = fragmentA.items.indexOf( oldestA );\n\t\tvar indexB = fragmentB.items.indexOf( oldestB );\n\n\t\t// if it's the same index, it means one contains the other,\n\t\t// so we see which has the longest ancestry\n\t\treturn ( indexA - indexB ) || ancestryA.length - ancestryB.length;\n\t}\n\n\t// if mutual ancestor is a section, we first test to see which section\n\t// fragment comes first\n\tvar fragments = mutualAncestor.iterations;\n\tif ( fragments ) {\n\t\tvar indexA$1 = fragments.indexOf( fragmentA );\n\t\tvar indexB$1 = fragments.indexOf( fragmentB );\n\n\t\treturn ( indexA$1 - indexB$1 ) || ancestryA.length - ancestryB.length;\n\t}\n\n\tthrow new Error( 'An unexpected condition was met while comparing the position of two components. Please file an issue at https://github.com/ractivejs/ractive/issues - thanks!' );\n}\n\nfunction getParent ( item ) {\n\tvar parentFragment = item.parentFragment;\n\n\tif ( parentFragment ) { return parentFragment.owner; }\n\n\tif ( item.component && ( parentFragment = item.component.parentFragment ) ) {\n\t\treturn parentFragment.owner;\n\t}\n}\n\nfunction getAncestry ( item ) {\n\tvar ancestry = [ item ];\n\tvar ancestor = getParent( item );\n\n\twhile ( ancestor ) {\n\t\tancestry.push( ancestor );\n\t\tancestor = getParent( ancestor );\n\t}\n\n\treturn ancestry;\n}\n\n\nvar Query = function Query ( ractive, selector, live, isComponentQuery ) {\n\tvar this$1 = this;\n\n\tthis.ractive = ractive;\n\tthis.selector = selector;\n\tthis.live = live;\n\tthis.isComponentQuery = isComponentQuery;\n\n\tthis.refs = 1;\n\n\tthis.result = [];\n\tthis.result.cancel = function () { return this$1.cancel(); };\n\n\tthis.dirty = true;\n};\n\nQuery.prototype.add = function add ( item ) {\n\tif ( !~this.result.indexOf( item ) ) {\n\t\tthis.result.push( item );\n\t\tthis.makeDirty();\n\t}\n};\n\nQuery.prototype.cancel = function cancel () {\n\t\tvar this$1 = this;\n\n\tif ( --this.refs ) { return; }\n\n\tthis.cancelled = true;\n\n\tvar liveQueries = this.ractive[ this.isComponentQuery ? '_liveComponentQueries' : '_liveQueries' ];\n\n\tvar index = liveQueries.indexOf( this );\n\n\tif ( index !== -1 ) {\n\t\tliveQueries.splice( index, 1 );\n\t}\n\n\tthis.result.forEach( function (item) {\n\t\titem = this$1.isComponentQuery ? item.component : item._ractive.proxy;\n\t\titem.removeFromQuery( this$1 );\n\t});\n};\n\nQuery.prototype.init = function init () {\n\tthis.dirty = false;\n};\n\nQuery.prototype.makeDirty = function makeDirty () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\n\t\t// Once the DOM has been updated, ensure the query\n\t\t// is correctly ordered\n\t\trunloop.scheduleTask( function () { return this$1.update(); } );\n\t}\n};\n\nQuery.prototype.remove = function remove ( item ) {\n\tif ( !this.cancelled ) {\n\t\tvar index = this.result.indexOf( item );\n\t\tif ( index !== -1 ) { this.result.splice( index, 1 ); }\n\t}\n};\n\nQuery.prototype.update = function update () {\n\tthis.result.sort( this.isComponentQuery ? sortByItemPosition : sortByDocumentPosition );\n\tthis.dirty = false;\n};\n\nQuery.prototype.test = function test ( item ) {\n\treturn this.isComponentQuery ?\n\t\t( !this.selector || item.name === this.selector ) :\n\t\t( item ? matches( item, this.selector ) : null );\n};\n\nfunction getQuery ( ractive, selector, options, component ) {\n\tvar liveQueries = ractive[(\""_live\"" + (component ? 'Component' : '') + \""Queries\"")];\n\tvar query;\n\n\t// Shortcut: if we're maintaining a live query with this\n\t// selector, we don't need to traverse the parallel DOM\n\tquery = liveQueries.find( function (q) { return q.selector === selector && q.remote === options.remote; } );\n\tif ( query ) {\n\t\tif ( options.live ) { query.refs++; }\n\t\t// Either return the exact same query, or (if not live) a snapshot\n\t\treturn { old: options.live ? query.result : query.result.slice() };\n\t}\n\n\tquery = new Query( ractive, selector, !!options.live, component );\n\toptions._query = query;\n\tquery.remote = options.remote;\n\n\t// Add this to the list of live queries Ractive needs to maintain,\n\t// if applicable\n\tif ( query.live ) {\n\t\tliveQueries.push( query );\n\t}\n\n\treturn query;\n}\n\nfunction Ractive$findAll ( selector, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( !this.el ) { throw new Error( (\""Cannot call ractive.findAll('\"" + selector + \""', ...) unless instance is rendered to the DOM\"") ); }\n\n\tvar query = options._query;\n\n\tif ( !query ) {\n\t\tquery = getQuery( this, selector, options, false );\n\t\tif ( query.old ) { return query.old; }\n\t}\n\n\tthis.fragment.findAll( selector, query );\n\n\tif ( query.remote ) {\n\t\t// seach non-fragment children\n\t\tthis._children.forEach( function (c) {\n\t\t\tif ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {\n\t\t\t\tc.instance.findAll( selector, options );\n\t\t\t}\n\t\t});\n\t}\n\n\tquery.init();\n\treturn query.result;\n}\n\nfunction Ractive$findAllComponents ( selector, options ) {\n\tif ( !options && typeof selector === 'object' ) {\n\t\toptions = selector;\n\t\tselector = '';\n\t}\n\n\toptions = options || {};\n\n\tvar query = options._query;\n\n\tif ( !query ) {\n\t\tquery = getQuery( this, selector, options, true );\n\t\tif ( query.old ) { return query.old; }\n\t}\n\n\tthis.fragment.findAllComponents( selector, query );\n\n\tif ( query.remote ) {\n\t\t// search non-fragment children\n\t\tthis._children.forEach( function (c) {\n\t\t\tif ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {\n\t\t\t\tif ( query.test( c ) ) {\n\t\t\t\t\tquery.add( c.instance );\n\t\t\t\t\tc.liveQueries.push( query );\n\t\t\t\t}\n\n\t\t\t\tc.instance.findAllComponents( selector, options );\n\t\t\t}\n\t\t});\n\t}\n\n\tquery.init();\n\treturn query.result;\n}\n\nfunction Ractive$findComponent ( selector, options ) {\n\tvar this$1 = this;\n\tif ( options === void 0 ) options = {};\n\n\tif ( typeof selector === 'object' ) {\n\t\toptions = selector;\n\t\tselector = '';\n\t}\n\n\tvar child = this.fragment.findComponent( selector, options );\n\tif ( child ) { return child; }\n\n\tif ( options.remote ) {\n\t\tif ( !selector && this._children.length ) { return this._children[0].instance; }\n\t\tfor ( var i = 0; i < this._children.length; i++ ) {\n\t\t\t// skip children that are or should be in an anchor\n\t\t\tif ( this$1._children[i].target ) { continue; }\n\t\t\tif ( this$1._children[i].name === selector ) { return this$1._children[i].instance; }\n\t\t\tchild = this$1._children[i].instance.findComponent( selector, options );\n\t\t\tif ( child ) { return child; }\n\t\t}\n\t}\n}\n\nfunction Ractive$findContainer ( selector ) {\n\tif ( this.container ) {\n\t\tif ( this.container.component && this.container.component.name === selector ) {\n\t\t\treturn this.container;\n\t\t} else {\n\t\t\treturn this.container.findContainer( selector );\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction Ractive$findParent ( selector ) {\n\n\tif ( this.parent ) {\n\t\tif ( this.parent.component && this.parent.component.name === selector ) {\n\t\t\treturn this.parent;\n\t\t} else {\n\t\t\treturn this.parent.findParent ( selector );\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction Ractive$fire ( eventName ) {\n\tvar args = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\treturn fireEvent( this, eventName, { args: args });\n}\n\nvar stack = [];\nvar captureGroup;\n\nfunction startCapturing () {\n\tstack.push( captureGroup = [] );\n}\n\nfunction stopCapturing () {\n\tvar dependencies = stack.pop();\n\tcaptureGroup = stack[ stack.length - 1 ];\n\treturn dependencies;\n}\n\nfunction capture ( model ) {\n\tif ( captureGroup ) {\n\t\tcaptureGroup.push( model );\n\t}\n}\n\nvar KeyModel = function KeyModel ( key, parent ) {\n\tthis.value = key;\n\tthis.isReadonly = this.isKey = true;\n\tthis.deps = [];\n\tthis.links = [];\n\tthis.parent = parent;\n};\n\nKeyModel.prototype.get = function get ( shouldCapture ) {\n\tif ( shouldCapture ) { capture( this ); }\n\treturn unescapeKey( this.value );\n};\n\nKeyModel.prototype.getKeypath = function getKeypath () {\n\treturn unescapeKey( this.value );\n};\n\nKeyModel.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tvar i = this.deps.length;\n\twhile ( i-- ) { this$1.deps[i].rebind( next, previous, false ); }\n\n\ti = this.links.length;\n\twhile ( i-- ) { this$1.links[i].rebind( next, previous, false ); }\n};\n\nKeyModel.prototype.register = function register ( dependant ) {\n\tthis.deps.push( dependant );\n};\n\nKeyModel.prototype.registerLink = function registerLink ( link ) {\n\taddToArray( this.links, link );\n};\n\nKeyModel.prototype.unregister = function unregister ( dependant ) {\n\tremoveFromArray( this.deps, dependant );\n};\n\nKeyModel.prototype.unregisterLink = function unregisterLink ( link ) {\n\tremoveFromArray( this.links, link );\n};\n\nfunction bind$1$1               ( x ) { x.bind(); }\nfunction cancel$1             ( x ) { x.cancel(); }\nfunction destroyed$1$1          ( x ) { x.destroyed(); }\nfunction handleChange$1$1       ( x ) { x.handleChange(); }\nfunction mark$1$1               ( x ) { x.mark(); }\nfunction marked             ( x ) { x.marked(); }\nfunction markedAll          ( x ) { x.markedAll(); }\nfunction notifiedUpstream   ( x ) { x.notifiedUpstream(); }\nfunction render$1$1             ( x ) { x.render(); }\nfunction shuffled$1$1           ( x ) { x.shuffled(); }\nfunction teardown$1$1           ( x ) { x.teardown(); }\nfunction unbind$1$1             ( x ) { x.unbind(); }\nfunction unrender$1$1           ( x ) { x.unrender(); }\nfunction unrenderAndDestroy ( x ) { x.unrender( true ); }\nfunction update$1$1             ( x ) { x.update(); }\nfunction toString$2           ( x ) { return x.toString(); }\nfunction toEscapedString    ( x ) { return x.toString( true ); }\n\nvar KeypathModel = function KeypathModel ( parent, ractive ) {\n\tthis.parent = parent;\n\tthis.ractive = ractive;\n\tthis.value = ractive ? parent.getKeypath( ractive ) : parent.getKeypath();\n\tthis.deps = [];\n\tthis.children = {};\n\tthis.isReadonly = this.isKeypath = true;\n};\n\nKeypathModel.prototype.get = function get ( shouldCapture ) {\n\tif ( shouldCapture ) { capture( this ); }\n\treturn this.value;\n};\n\nKeypathModel.prototype.getChild = function getChild ( ractive ) {\n\tif ( !( ractive._guid in this.children ) ) {\n\t\tvar model = new KeypathModel( this.parent, ractive );\n\t\tthis.children[ ractive._guid ] = model;\n\t\tmodel.owner = this;\n\t}\n\treturn this.children[ ractive._guid ];\n};\n\nKeypathModel.prototype.getKeypath = function getKeypath () {\n\treturn this.value;\n};\n\nKeypathModel.prototype.handleChange = function handleChange$1 () {\n\t\tvar this$1 = this;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].handleChange();\n\t}\n\n\tthis.deps.forEach( handleChange$1$1 );\n};\n\nKeypathModel.prototype.rebindChildren = function rebindChildren ( next ) {\n\t\tvar this$1 = this;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tvar child = this$1.children[keys[i]];\n\t\tchild.value = next.getKeypath( child.ractive );\n\t\tchild.handleChange();\n\t}\n};\n\nKeypathModel.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tvar model = next ? next.getKeypathModel( this.ractive ) : undefined;\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].rebind( next, previous, false );\n\t}\n\n\ti = this.deps.length;\n\twhile ( i-- ) {\n\t\tthis$1.deps[i].rebind( model, this$1, false );\n\t}\n};\n\nKeypathModel.prototype.register = function register ( dep ) {\n\tthis.deps.push( dep );\n};\n\nKeypathModel.prototype.removeChild = function removeChild ( model ) {\n\tif ( model.ractive ) { delete this.children[ model.ractive._guid ]; }\n};\n\nKeypathModel.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\tif ( this.owner ) { this.owner.removeChild( this ); }\n\n\tvar keys = Object.keys( this.children );\n\tvar i = keys.length;\n\twhile ( i-- ) {\n\t\tthis$1.children[ keys[i] ].teardown();\n\t}\n};\n\nKeypathModel.prototype.unregister = function unregister ( dep ) {\n\tremoveFromArray( this.deps, dep );\n\tif ( !this.deps.length ) { this.teardown(); }\n};\n\nfunction bind$2 ( fn, context ) {\n\tif ( !/this/.test( fn.toString() ) ) { return fn; }\n\n\tvar bound = fn.bind( context );\n\tfor ( var prop in fn ) { bound[ prop ] = fn[ prop ]; }\n\n\treturn bound;\n}\n\nvar hasProp = Object.prototype.hasOwnProperty;\n\nvar shuffleTasks = { early: [], mark: [] };\nvar registerQueue = { early: [], mark: [] };\n\nvar ModelBase = function ModelBase ( parent ) {\n\tthis.deps = [];\n\n\tthis.children = [];\n\tthis.childByKey = {};\n\tthis.links = [];\n\n\tthis.keyModels = {};\n\n\tthis.unresolved = [];\n\tthis.unresolvedByKey = {};\n\n\tthis.bindings = [];\n\tthis.patternObservers = [];\n\n\tif ( parent ) {\n\t\tthis.parent = parent;\n\t\tthis.root = parent.root;\n\t}\n};\n\nModelBase.prototype.addUnresolved = function addUnresolved ( key, resolver ) {\n\tif ( !this.unresolvedByKey[ key ] ) {\n\t\tthis.unresolved.push( key );\n\t\tthis.unresolvedByKey[ key ] = [];\n\t}\n\n\tthis.unresolvedByKey[ key ].push( resolver );\n};\n\nModelBase.prototype.addShuffleTask = function addShuffleTask ( task, stage ) {\n\tif ( stage === void 0 ) stage = 'early';\n shuffleTasks[stage].push( task ); };\nModelBase.prototype.addShuffleRegister = function addShuffleRegister ( item, stage ) {\n\tif ( stage === void 0 ) stage = 'early';\n registerQueue[stage].push({ model: this, item: item }); };\n\nModelBase.prototype.clearUnresolveds = function clearUnresolveds ( specificKey ) {\n\t\tvar this$1 = this;\n\n\tvar i = this.unresolved.length;\n\n\twhile ( i-- ) {\n\t\tvar key = this$1.unresolved[i];\n\n\t\tif ( specificKey && key !== specificKey ) { continue; }\n\n\t\tvar resolvers = this$1.unresolvedByKey[ key ];\n\t\tvar hasKey = this$1.has( key );\n\n\t\tvar j = resolvers.length;\n\t\twhile ( j-- ) {\n\t\t\tif ( hasKey ) { resolvers[j].attemptResolution(); }\n\t\t\tif ( resolvers[j].resolved ) { resolvers.splice( j, 1 ); }\n\t\t}\n\n\t\tif ( !resolvers.length ) {\n\t\t\tthis$1.unresolved.splice( i, 1 );\n\t\t\tthis$1.unresolvedByKey[ key ] = null;\n\t\t}\n\t}\n};\n\nModelBase.prototype.findMatches = function findMatches ( keys ) {\n\tvar len = keys.length;\n\n\tvar existingMatches = [ this ];\n\tvar matches;\n\tvar i;\n\n\tvar loop = function (  ) {\n\t\tvar key = keys[i];\n\n\t\tif ( key === '*' ) {\n\t\t\tmatches = [];\n\t\t\texistingMatches.forEach( function (model) {\n\t\t\t\tmatches.push.apply( matches, model.getValueChildren( model.get() ) );\n\t\t\t});\n\t\t} else {\n\t\t\tmatches = existingMatches.map( function (model) { return model.joinKey( key ); } );\n\t\t}\n\n\t\texistingMatches = matches;\n\t};\n\n\t\tfor ( i = 0; i < len; i += 1 ) loop(  );\n\n\treturn matches;\n};\n\nModelBase.prototype.getKeyModel = function getKeyModel ( key, skip ) {\n\tif ( key !== undefined && !skip ) { return this.parent.getKeyModel( key, true ); }\n\n\tif ( !( key in this.keyModels ) ) { this.keyModels[ key ] = new KeyModel( escapeKey( key ), this ); }\n\n\treturn this.keyModels[ key ];\n};\n\nModelBase.prototype.getKeypath = function getKeypath ( ractive ) {\n\tif ( ractive !== this.ractive && this._link ) { return this._link.target.getKeypath( ractive ); }\n\n\tif ( !this.keypath ) {\n\t\tvar parent = this.parent && this.parent.getKeypath( ractive );\n\t\tthis.keypath = parent ? ((this.parent.getKeypath( ractive )) + \"".\"" + (escapeKey( this.key ))) : escapeKey( this.key );\n\t}\n\n\treturn this.keypath;\n};\n\nModelBase.prototype.getValueChildren = function getValueChildren ( value ) {\n\t\tvar this$1 = this;\n\n\tvar children;\n\tif ( Array.isArray( value ) ) {\n\t\tchildren = [];\n\t\tif ( 'length' in this && this.length !== value.length ) {\n\t\t\tchildren.push( this.joinKey( 'length' ) );\n\t\t}\n\t\tvalue.forEach( function ( m, i ) {\n\t\t\tchildren.push( this$1.joinKey( i ) );\n\t\t});\n\t}\n\n\telse if ( isObject( value ) || typeof value === 'function' ) {\n\t\tchildren = Object.keys( value ).map( function (key) { return this$1.joinKey( key ); } );\n\t}\n\n\telse if ( value != null ) {\n\t\treturn [];\n\t}\n\n\treturn children;\n};\n\nModelBase.prototype.getVirtual = function getVirtual ( shouldCapture ) {\n\t\tvar this$1 = this;\n\n\tvar value = this.get( shouldCapture, { virtual: false } );\n\tif ( isObject( value ) ) {\n\t\tvar result = Array.isArray( value ) ? [] : {};\n\n\t\tvar keys = Object.keys( value );\n\t\tvar i = keys.length;\n\t\twhile ( i-- ) {\n\t\t\tvar child = this$1.childByKey[ keys[i] ];\n\t\t\tif ( !child ) { result[ keys[i] ] = value[ keys[i] ]; }\n\t\t\telse if ( child._link ) { result[ keys[i] ] = child._link.getVirtual(); }\n\t\t\telse { result[ keys[i] ] = child.getVirtual(); }\n\t\t}\n\n\t\ti = this.children.length;\n\t\twhile ( i-- ) {\n\t\t\tvar child$1 = this$1.children[i];\n\t\t\tif ( !( child$1.key in result ) && child$1._link ) {\n\t\t\t\tresult[ child$1.key ] = child$1._link.getVirtual();\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t} else { return value; }\n};\n\nModelBase.prototype.has = function has ( key ) {\n\tif ( this._link ) { return this._link.has( key ); }\n\n\tvar value = this.get();\n\tif ( !value ) { return false; }\n\n\tkey = unescapeKey( key );\n\tif ( hasProp.call( value, key ) ) { return true; }\n\n\t// We climb up the constructor chain to find if one of them contains the key\n\tvar constructor = value.constructor;\n\twhile ( constructor !== Function && constructor !== Array && constructor !== Object ) {\n\t\tif ( hasProp.call( constructor.prototype, key ) ) { return true; }\n\t\tconstructor = constructor.constructor;\n\t}\n\n\treturn false;\n};\n\nModelBase.prototype.joinAll = function joinAll ( keys, opts ) {\n\tvar model = this;\n\tfor ( var i = 0; i < keys.length; i += 1 ) {\n\t\tif ( opts && opts.lastLink === false && i + 1 === keys.length && model.childByKey[keys[i]] && model.childByKey[keys[i]]._link ) { return model.childByKey[keys[i]]; }\n\t\tmodel = model.joinKey( keys[i], opts );\n\t}\n\n\treturn model;\n};\n\nModelBase.prototype.notifyUpstream = function notifyUpstream () {\n\tvar parent = this.parent;\n\tvar path = [ this.key ];\n\twhile ( parent ) {\n\t\tif ( parent.patternObservers.length ) { parent.patternObservers.forEach( function (o) { return o.notify( path.slice() ); } ); }\n\t\tpath.unshift( parent.key );\n\t\tparent.links.forEach( notifiedUpstream );\n\t\tparent.deps.forEach( handleChange$1$1 );\n\t\tparent = parent.parent;\n\t}\n};\n\nModelBase.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tvar this$1 = this;\n\n\t// tell the deps to move to the new target\n\tvar i = this.deps.length;\n\twhile ( i-- ) {\n\t\tif ( this$1.deps[i].rebind ) { this$1.deps[i].rebind( next, previous, safe ); }\n\t}\n\n\ti = this.links.length;\n\twhile ( i-- ) {\n\t\tvar link = this$1.links[i];\n\t\t// only relink the root of the link tree\n\t\tif ( link.owner._link ) { link.relinking( next, true, safe ); }\n\t}\n\n\ti = this.children.length;\n\twhile ( i-- ) {\n\t\tvar child = this$1.children[i];\n\t\tchild.rebind( next ? next.joinKey( child.key ) : undefined, child, safe );\n\t}\n\n\ti = this.unresolved.length;\n\twhile ( i-- ) {\n\t\tvar unresolved = this$1.unresolvedByKey[ this$1.unresolved[i] ];\n\t\tvar c = unresolved.length;\n\t\twhile ( c-- ) {\n\t\t\tunresolved[c].rebind( next, previous );\n\t\t}\n\t}\n\n\tif ( this.keypathModel ) { this.keypathModel.rebind( next, previous, false ); }\n\n\ti = this.bindings.length;\n\twhile ( i-- ) {\n\t\tthis$1.bindings[i].rebind( next, previous, safe );\n\t}\n};\n\nModelBase.prototype.register = function register ( dep ) {\n\tthis.deps.push( dep );\n};\n\nModelBase.prototype.registerChange = function registerChange ( key, value ) {\n\tif ( !this.isRoot ) {\n\t\tthis.root.registerChange( key, value );\n\t} else {\n\t\tthis.changes[ key ] = value;\n\t\trunloop.addInstance( this.root.ractive );\n\t}\n};\n\nModelBase.prototype.registerLink = function registerLink ( link ) {\n\taddToArray( this.links, link );\n};\n\nModelBase.prototype.registerPatternObserver = function registerPatternObserver ( observer ) {\n\tthis.patternObservers.push( observer );\n\tthis.register( observer );\n};\n\nModelBase.prototype.registerTwowayBinding = function registerTwowayBinding ( binding ) {\n\tthis.bindings.push( binding );\n};\n\nModelBase.prototype.removeUnresolved = function removeUnresolved ( key, resolver ) {\n\tvar resolvers = this.unresolvedByKey[ key ];\n\n\tif ( resolvers ) {\n\t\tremoveFromArray( resolvers, resolver );\n\t}\n};\n\nModelBase.prototype.unregister = function unregister ( dependant ) {\n\tremoveFromArray( this.deps, dependant );\n};\n\nModelBase.prototype.unregisterLink = function unregisterLink ( link ) {\n\tremoveFromArray( this.links, link );\n};\n\nModelBase.prototype.unregisterPatternObserver = function unregisterPatternObserver ( observer ) {\n\tremoveFromArray( this.patternObservers, observer );\n\tthis.unregister( observer );\n};\n\nModelBase.prototype.unregisterTwowayBinding = function unregisterTwowayBinding ( binding ) {\n\tremoveFromArray( this.bindings, binding );\n};\n\nModelBase.prototype.updateFromBindings = function updateFromBindings$1 ( cascade ) {\n\t\tvar this$1 = this;\n\n\tvar i = this.bindings.length;\n\twhile ( i-- ) {\n\t\tvar value = this$1.bindings[i].getValue();\n\t\tif ( value !== this$1.value ) { this$1.set( value ); }\n\t}\n\n\t// check for one-way bindings if there are no two-ways\n\tif ( !this.bindings.length ) {\n\t\tvar oneway = findBoundValue( this.deps );\n\t\tif ( oneway && oneway.value !== this.value ) { this.set( oneway.value ); }\n\t}\n\n\tif ( cascade ) {\n\t\tthis.children.forEach( updateFromBindings );\n\t\tthis.links.forEach( updateFromBindings );\n\t\tif ( this._link ) { this._link.updateFromBindings( cascade ); }\n\t}\n};\n\n// TODO: this may be better handled by overreiding `get` on models with a parent that isRoot\nfunction maybeBind ( model, value, shouldBind ) {\n\tif ( shouldBind && typeof value === 'function' && model.parent && model.parent.isRoot ) {\n\t\tif ( !model.boundValue ) {\n\t\t\tmodel.boundValue = bind$2( value._r_unbound || value, model.parent.ractive );\n\t\t}\n\n\t\treturn model.boundValue;\n\t}\n\n\treturn value;\n}\n\nfunction updateFromBindings ( model ) {\n\tmodel.updateFromBindings( true );\n}\n\nfunction findBoundValue( list ) {\n\tvar i = list.length;\n\twhile ( i-- ) {\n\t\tif ( list[i].bound ) {\n\t\t\tvar owner = list[i].owner;\n\t\t\tif ( owner ) {\n\t\t\t\tvar value = owner.name === 'checked' ?\n\t\t\t\t\towner.node.checked :\n\t\t\t\t\towner.node.value;\n\t\t\t\treturn { value: value };\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction fireShuffleTasks ( stage ) {\n\tif ( !stage ) {\n\t\tfireShuffleTasks( 'early' );\n\t\tfireShuffleTasks( 'mark' );\n\t} else {\n\t\tvar tasks = shuffleTasks[stage];\n\t\tshuffleTasks[stage] = [];\n\t\tvar i = tasks.length;\n\t\twhile ( i-- ) { tasks[i](); }\n\n\t\tvar register = registerQueue[stage];\n\t\tregisterQueue[stage] = [];\n\t\ti = register.length;\n\t\twhile ( i-- ) { register[i].model.register( register[i].item ); }\n\t}\n}\n\nfunction shuffle$1$1 ( model, newIndices, link ) {\n\tmodel.shuffling = true;\n\n\tvar i = newIndices.length;\n\twhile ( i-- ) {\n\t\tvar idx = newIndices[ i ];\n\t\t// nothing is actually changing, so move in the index and roll on\n\t\tif ( i === idx ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// rebind the children on i to idx\n\t\tif ( i in model.childByKey ) { model.childByKey[ i ].rebind( !~idx ? undefined : model.joinKey( idx ), model.childByKey[ i ], true ); }\n\n\t\tif ( !~idx && model.keyModels[ i ] ) {\n\t\t\tmodel.keyModels[i].rebind( undefined, model.keyModels[i], false );\n\t\t} else if ( ~idx && model.keyModels[ i ] ) {\n\t\t\tif ( !model.keyModels[ idx ] ) { model.childByKey[ idx ].getKeyModel( idx ); }\n\t\t\tmodel.keyModels[i].rebind( model.keyModels[ idx ], model.keyModels[i], false );\n\t\t}\n\t}\n\n\tvar upstream = model.source().length !== model.source().value.length;\n\n\tmodel.links.forEach( function (l) { return l.shuffle( newIndices ); } );\n\tif ( !link ) { fireShuffleTasks( 'early' ); }\n\n\ti = model.deps.length;\n\twhile ( i-- ) {\n\t\tif ( model.deps[i].shuffle ) { model.deps[i].shuffle( newIndices ); }\n\t}\n\n\tmodel[ link ? 'marked' : 'mark' ]();\n\tif ( !link ) { fireShuffleTasks( 'mark' ); }\n\n\tif ( upstream ) { model.notifyUpstream(); }\n\n\tmodel.shuffling = false;\n}\n\nKeyModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;\nKeyModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;\nKeypathModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;\nKeypathModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;\n\n// this is the dry method of checking to see if a rebind applies to\n// a particular keypath because in some cases, a dep may be bound\n// directly to a particular keypath e.g. foo.bars.0.baz and need\n// to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted\nfunction rebindMatch ( template, next, previous, fragment ) {\n\tvar keypath = template.r || template;\n\n\t// no valid keypath, go with next\n\tif ( !keypath || typeof keypath !== 'string' ) { return next; }\n\n\t// completely contextual ref, go with next\n\tif ( keypath === '.' || keypath[0] === '@' || ( next || previous ).isKey || ( next || previous ).isKeypath ) { return next; }\n\n\tvar parts = keypath.split( '/' );\n\tvar keys = splitKeypath( parts[ parts.length - 1 ] );\n\tvar last = keys[ keys.length - 1 ];\n\n\t// check the keypath against the model keypath to see if it matches\n\tvar model = next || previous;\n\n\t// check to see if this was an alias\n\tif ( model && keys.length === 1 && last !== model.key && fragment ) {\n\t\tkeys = findAlias( last, fragment ) || keys;\n\t}\n\n\tvar i = keys.length;\n\tvar match = true;\n\tvar shuffling = false;\n\n\twhile ( model && i-- ) {\n\t\tif ( model.shuffling ) { shuffling = true; }\n\t\t// non-strict comparison to account for indices in keypaths\n\t\tif ( keys[i] != model.key ) { match = false; }\n\t\tmodel = model.parent;\n\t}\n\n\t// next is undefined, but keypath is shuffling and previous matches\n\tif ( !next && match && shuffling ) { return previous; }\n\t// next is defined, but doesn't match the keypath\n\telse if ( next && !match && shuffling ) { return previous; }\n\telse { return next; }\n}\n\nfunction findAlias ( name, fragment ) {\n\twhile ( fragment ) {\n\t\tvar z = fragment.aliases;\n\t\tif ( z && z[ name ] ) {\n\t\t\tvar aliases = ( fragment.owner.iterations ? fragment.owner : fragment ).owner.template.z;\n\t\t\tfor ( var i = 0; i < aliases.length; i++ ) {\n\t\t\t\tif ( aliases[i].n === name ) {\n\t\t\t\t\tvar alias = aliases[i].x;\n\t\t\t\t\tif ( !alias.r ) { return false; }\n\t\t\t\t\tvar parts = alias.r.split( '/' );\n\t\t\t\t\treturn splitKeypath( parts[ parts.length - 1 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tfragment = fragment.componentParent || fragment.parent;\n\t}\n}\n\n// temporary placeholder target for detached implicit links\nvar Missing = {\n\tkey: '@missing',\n\tanimate: noop,\n\tapplyValue: noop,\n\tget: noop,\n\tgetKeypath: function getKeypath () { return this.key; },\n\tjoinAll: function joinAll () { return this; },\n\tjoinKey: function joinKey () { return this; },\n\tmark: noop,\n\tregisterLink: noop,\n\tshufle: noop,\n\tset: noop,\n\tunregisterLink: noop\n};\nMissing.parent = Missing;\n\nvar LinkModel = (function (ModelBase$$1) {\n\tfunction LinkModel ( parent, owner, target, key ) {\n\t\tModelBase$$1.call( this, parent );\n\n\t\tthis.owner = owner;\n\t\tthis.target = target;\n\t\tthis.key = key === undefined ? owner.key : key;\n\t\tif ( owner.isLink ) { this.sourcePath = (owner.sourcePath) + \"".\"" + (this.key); }\n\n\t\ttarget.registerLink( this );\n\n\t\tif ( parent ) { this.isReadonly = parent.isReadonly; }\n\n\t\tthis.isLink = true;\n\t}\n\n\tif ( ModelBase$$1 ) LinkModel.__proto__ = ModelBase$$1;\n\tLinkModel.prototype = Object.create( ModelBase$$1 && ModelBase$$1.prototype );\n\tLinkModel.prototype.constructor = LinkModel;\n\n\tLinkModel.prototype.animate = function animate ( from, to, options, interpolator ) {\n\t\treturn this.target.animate( from, to, options, interpolator );\n\t};\n\n\tLinkModel.prototype.applyValue = function applyValue ( value ) {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\t\tthis.target.applyValue( value );\n\t};\n\n\tLinkModel.prototype.attach = function attach ( fragment ) {\n\t\tvar model = resolveReference( fragment, this.key );\n\t\tif ( model ) {\n\t\t\tthis.relinking( model, true, false );\n\t\t} else { // if there is no link available, move everything here to real models\n\t\t\tthis.owner.unlink();\n\t\t}\n\t};\n\n\tLinkModel.prototype.detach = function detach () {\n\t\tthis.relinking( Missing, true, false );\n\t};\n\n\tLinkModel.prototype.get = function get ( shouldCapture, opts ) {\n\t\tif ( opts === void 0 ) opts = {};\n\n\t\tif ( shouldCapture ) {\n\t\t\tcapture( this );\n\n\t\t\t// may need to tell the target to unwrap\n\t\t\topts.unwrap = true;\n\t\t}\n\n\t\tvar bind$$1 = 'shouldBind' in opts ? opts.shouldBind : true;\n\t\topts.shouldBind = false;\n\n\t\treturn maybeBind( this, this.target.get( false, opts ), bind$$1 );\n\t};\n\n\tLinkModel.prototype.getKeypath = function getKeypath ( ractive ) {\n\t\tif ( ractive && ractive !== this.root.ractive ) { return this.target.getKeypath( ractive ); }\n\n\t\treturn ModelBase$$1.prototype.getKeypath.call( this, ractive );\n\t};\n\n\tLinkModel.prototype.getKeypathModel = function getKeypathModel ( ractive ) {\n\t\tif ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }\n\t\tif ( ractive && ractive !== this.root.ractive ) { return this.keypathModel.getChild( ractive ); }\n\t\treturn this.keypathModel;\n\t};\n\n\tLinkModel.prototype.handleChange = function handleChange$1 () {\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.links.forEach( handleChange$1$1 );\n\t\tthis.notifyUpstream();\n\t};\n\n\tLinkModel.prototype.isDetached = function isDetached () { return this.virtual && this.target === Missing; };\n\n\tLinkModel.prototype.joinKey = function joinKey ( key ) {\n\t\t// TODO: handle nested links\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new LinkModel( this, this, this.target.joinKey( key ), key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tLinkModel.prototype.mark = function mark () {\n\t\tthis.target.mark();\n\t};\n\n\tLinkModel.prototype.marked = function marked$1 () {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\tthis.links.forEach( marked );\n\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.clearUnresolveds();\n\t};\n\n\tLinkModel.prototype.markedAll = function markedAll$1 () {\n\t\tthis.children.forEach( markedAll );\n\t\tthis.marked();\n\t};\n\n\tLinkModel.prototype.notifiedUpstream = function notifiedUpstream$1 () {\n\t\tthis.links.forEach( notifiedUpstream );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t};\n\n\tLinkModel.prototype.relinked = function relinked () {\n\t\tthis.target.registerLink( this );\n\t\tthis.children.forEach( function (c) { return c.relinked(); } );\n\t};\n\n\tLinkModel.prototype.relinking = function relinking ( target, root, safe ) {\n\t\tvar this$1 = this;\n\n\t\tif ( root && this.sourcePath ) { target = rebindMatch( this.sourcePath, target, this.target ); }\n\t\tif ( !target || this.target === target ) { return; }\n\n\t\tthis.target.unregisterLink( this );\n\t\tif ( this.keypathModel ) { this.keypathModel.rebindChildren( target ); }\n\n\t\tthis.target = target;\n\t\tthis.children.forEach( function (c) {\n\t\t\tc.relinking( target.joinKey( c.key ), false, safe );\n\t\t});\n\n\t\tif ( root ) { this.addShuffleTask( function () {\n\t\t\tthis$1.relinked();\n\t\t\tif ( !safe ) { this$1.notifyUpstream(); }\n\t\t}); }\n\t};\n\n\tLinkModel.prototype.set = function set ( value ) {\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\t\tthis.target.set( value );\n\t};\n\n\tLinkModel.prototype.shuffle = function shuffle$1 ( newIndices ) {\n\t\t// watch for extra shuffles caused by a shuffle in a downstream link\n\t\tif ( this.shuffling ) { return; }\n\n\t\t// let the real model handle firing off shuffles\n\t\tif ( !this.target.shuffling ) {\n\t\t\tthis.target.shuffle( newIndices );\n\t\t} else {\n\t\t\tshuffle$1$1( this, newIndices, true );\n\t\t}\n\n\t};\n\n\tLinkModel.prototype.source = function source () {\n\t\tif ( this.target.source ) { return this.target.source(); }\n\t\telse { return this.target; }\n\t};\n\n\tLinkModel.prototype.teardown = function teardown$1 () {\n\t\tif ( this._link ) { this._link.teardown(); }\n\t\tthis.children.forEach( teardown$1$1 );\n\t};\n\n\treturn LinkModel;\n}(ModelBase));\n\nModelBase.prototype.link = function link ( model, keypath, options ) {\n\tvar lnk = this._link || new LinkModel( this.parent, this, model, this.key );\n\tlnk.implicit = options && options.implicit;\n\tlnk.sourcePath = keypath;\n\tif ( this._link ) { this._link.relinking( model, true, false ); }\n\tthis.rebind( lnk, this, false );\n\tfireShuffleTasks();\n\n\tvar unresolved = !this._link;\n\tthis._link = lnk;\n\tif ( unresolved && this.parent ) { this.parent.clearUnresolveds(); }\n\tlnk.marked();\n\treturn lnk;\n};\n\nModelBase.prototype.unlink = function unlink () {\n\tif ( this._link ) {\n\t\tvar ln = this._link;\n\t\tthis._link = undefined;\n\t\tln.rebind( this, this._link );\n\t\tfireShuffleTasks();\n\t\tln.teardown();\n\t}\n};\n\n// TODO what happens if a transition is aborted?\n\nvar tickers = [];\nvar running = false;\n\nfunction tick () {\n\trunloop.start();\n\n\tvar now = performance.now();\n\n\tvar i;\n\tvar ticker;\n\n\tfor ( i = 0; i < tickers.length; i += 1 ) {\n\t\tticker = tickers[i];\n\n\t\tif ( !ticker.tick( now ) ) {\n\t\t\t// ticker is complete, remove it from the stack, and decrement i so we don't miss one\n\t\t\ttickers.splice( i--, 1 );\n\t\t}\n\t}\n\n\trunloop.end();\n\n\tif ( tickers.length ) {\n\t\trequestAnimationFrame( tick );\n\t} else {\n\t\trunning = false;\n\t}\n}\n\nvar Ticker = function Ticker ( options ) {\n\tthis.duration = options.duration;\n\tthis.step = options.step;\n\tthis.complete = options.complete;\n\tthis.easing = options.easing;\n\n\tthis.start = performance.now();\n\tthis.end = this.start + this.duration;\n\n\tthis.running = true;\n\n\ttickers.push( this );\n\tif ( !running ) { requestAnimationFrame( tick ); }\n};\n\nTicker.prototype.tick = function tick$1 ( now ) {\n\tif ( !this.running ) { return false; }\n\n\tif ( now > this.end ) {\n\t\tif ( this.step ) { this.step( 1 ); }\n\t\tif ( this.complete ) { this.complete( 1 ); }\n\n\t\treturn false;\n\t}\n\n\tvar elapsed = now - this.start;\n\tvar eased = this.easing( elapsed / this.duration );\n\n\tif ( this.step ) { this.step( eased ); }\n\n\treturn true;\n};\n\nTicker.prototype.stop = function stop () {\n\tif ( this.abort ) { this.abort(); }\n\tthis.running = false;\n};\n\nvar prefixers = {};\n\n// TODO this is legacy. sooner we can replace the old adaptor API the better\nfunction prefixKeypath ( obj, prefix ) {\n\tvar prefixed = {};\n\n\tif ( !prefix ) {\n\t\treturn obj;\n\t}\n\n\tprefix += '.';\n\n\tfor ( var key in obj ) {\n\t\tif ( obj.hasOwnProperty( key ) ) {\n\t\t\tprefixed[ prefix + key ] = obj[ key ];\n\t\t}\n\t}\n\n\treturn prefixed;\n}\n\nfunction getPrefixer ( rootKeypath ) {\n\tvar rootDot;\n\n\tif ( !prefixers[ rootKeypath ] ) {\n\t\trootDot = rootKeypath ? rootKeypath + '.' : '';\n\n\t\tprefixers[ rootKeypath ] = function ( relativeKeypath, value ) {\n\t\t\tvar obj;\n\n\t\t\tif ( typeof relativeKeypath === 'string' ) {\n\t\t\t\tobj = {};\n\t\t\t\tobj[ rootDot + relativeKeypath ] = value;\n\t\t\t\treturn obj;\n\t\t\t}\n\n\t\t\tif ( typeof relativeKeypath === 'object' ) {\n\t\t\t\t// 'relativeKeypath' is in fact a hash, not a keypath\n\t\t\t\treturn rootDot ? prefixKeypath( relativeKeypath, rootKeypath ) : relativeKeypath;\n\t\t\t}\n\t\t};\n\t}\n\n\treturn prefixers[ rootKeypath ];\n}\n\nvar Model = (function (ModelBase$$1) {\n\tfunction Model ( parent, key ) {\n\t\tModelBase$$1.call( this, parent );\n\n\t\tthis.ticker = null;\n\n\t\tif ( parent ) {\n\t\t\tthis.key = unescapeKey( key );\n\t\t\tthis.isReadonly = parent.isReadonly;\n\n\t\t\tif ( parent.value ) {\n\t\t\t\tthis.value = parent.value[ this.key ];\n\t\t\t\tif ( Array.isArray( this.value ) ) { this.length = this.value.length; }\n\t\t\t\tthis.adapt();\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( ModelBase$$1 ) Model.__proto__ = ModelBase$$1;\n\tModel.prototype = Object.create( ModelBase$$1 && ModelBase$$1.prototype );\n\tModel.prototype.constructor = Model;\n\n\tModel.prototype.adapt = function adapt () {\n\t\tvar this$1 = this;\n\n\t\tvar adaptors = this.root.adaptors;\n\t\tvar len = adaptors.length;\n\n\t\tthis.rewrap = false;\n\n\t\t// Exit early if no adaptors\n\t\tif ( len === 0 ) { return; }\n\n\t\tvar value = this.wrapper ? ( 'newWrapperValue' in this ? this.newWrapperValue : this.wrapperValue ) : this.value;\n\n\t\t// TODO remove this legacy nonsense\n\t\tvar ractive = this.root.ractive;\n\t\tvar keypath = this.getKeypath();\n\n\t\t// tear previous adaptor down if present\n\t\tif ( this.wrapper ) {\n\t\t\tvar shouldTeardown = this.wrapperValue === value ? false : !this.wrapper.reset || this.wrapper.reset( value ) === false;\n\n\t\t\tif ( shouldTeardown ) {\n\t\t\t\tthis.wrapper.teardown();\n\t\t\t\tthis.wrapper = null;\n\n\t\t\t\t// don't branch for undefined values\n\t\t\t\tif ( this.value !== undefined ) {\n\t\t\t\t\tvar parentValue = this.parent.value || this.parent.createBranch( this.key );\n\t\t\t\t\tif ( parentValue[ this.key ] !== value ) { parentValue[ this.key ] = value; }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete this.newWrapperValue;\n\t\t\t\tthis.wrapperValue = value;\n\t\t\t\tthis.value = this.wrapper.get();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar adaptor = adaptors[i];\n\t\t\tif ( adaptor.filter( value, keypath, ractive ) ) {\n\t\t\t\tthis$1.wrapper = adaptor.wrap( ractive, value, keypath, getPrefixer( keypath ) );\n\t\t\t\tthis$1.wrapperValue = value;\n\t\t\t\tthis$1.wrapper.__model = this$1; // massive temporary hack to enable array adaptor\n\n\t\t\t\tthis$1.value = this$1.wrapper.get();\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tModel.prototype.animate = function animate ( from, to, options, interpolator ) {\n\t\tvar this$1 = this;\n\n\t\tif ( this.ticker ) { this.ticker.stop(); }\n\n\t\tvar fulfilPromise;\n\t\tvar promise = new Promise( function (fulfil) { return fulfilPromise = fulfil; } );\n\n\t\tthis.ticker = new Ticker({\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tstep: function (t) {\n\t\t\t\tvar value = interpolator( t );\n\t\t\t\tthis$1.applyValue( value );\n\t\t\t\tif ( options.step ) { options.step( t, value ); }\n\t\t\t},\n\t\t\tcomplete: function () {\n\t\t\t\tthis$1.applyValue( to );\n\t\t\t\tif ( options.complete ) { options.complete( to ); }\n\n\t\t\t\tthis$1.ticker = null;\n\t\t\t\tfulfilPromise();\n\t\t\t}\n\t\t});\n\n\t\tpromise.stop = this.ticker.stop;\n\t\treturn promise;\n\t};\n\n\tModel.prototype.applyValue = function applyValue ( value ) {\n\t\tif ( isEqual( value, this.value ) ) { return; }\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\t// TODO deprecate this nonsense\n\t\tthis.registerChange( this.getKeypath(), value );\n\n\t\tif ( this.parent.wrapper && this.parent.wrapper.set ) {\n\t\t\tthis.parent.wrapper.set( this.key, value );\n\t\t\tthis.parent.value = this.parent.wrapper.get();\n\n\t\t\tthis.value = this.parent.value[ this.key ];\n\t\t\tif ( this.wrapper ) { this.newWrapperValue = this.value; }\n\t\t\tthis.adapt();\n\t\t} else if ( this.wrapper ) {\n\t\t\tthis.newWrapperValue = value;\n\t\t\tthis.adapt();\n\t\t} else {\n\t\t\tvar parentValue = this.parent.value || this.parent.createBranch( this.key );\n\t\t\tif ( isObjectLike( parentValue ) ) {\n\t\t\t\tparentValue[ this.key ] = value;\n\t\t\t} else {\n\t\t\t\twarnIfDebug( (\""Attempted to set a property of a non-object '\"" + (this.getKeypath()) + \""'\"") );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.value = value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\tthis.parent.clearUnresolveds();\n\t\tthis.clearUnresolveds();\n\n\t\t// keep track of array stuff\n\t\tif ( Array.isArray( value ) ) {\n\t\t\tthis.length = value.length;\n\t\t\tthis.isArray = true;\n\t\t} else {\n\t\t\tthis.isArray = false;\n\t\t}\n\n\t\t// notify dependants\n\t\tthis.links.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( mark$1$1 );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\n\t\tthis.notifyUpstream();\n\n\t\tif ( this.parent.isArray ) {\n\t\t\tif ( this.key === 'length' ) { this.parent.length = value; }\n\t\t\telse { this.parent.joinKey( 'length' ).mark(); }\n\t\t}\n\t};\n\n\tModel.prototype.createBranch = function createBranch ( key ) {\n\t\tvar branch = isNumeric( key ) ? [] : {};\n\t\tthis.set( branch );\n\n\t\treturn branch;\n\t};\n\n\tModel.prototype.get = function get ( shouldCapture, opts ) {\n\t\tif ( this._link ) { return this._link.get( shouldCapture, opts ); }\n\t\tif ( shouldCapture ) { capture( this ); }\n\t\t// if capturing, this value needs to be unwrapped because it's for external use\n\t\tif ( opts && opts.virtual ) { return this.getVirtual( false ); }\n\t\treturn maybeBind( this, ( shouldCapture || ( opts && opts.unwrap ) ) && this.wrapper ? this.wrapperValue : this.value, !opts || opts.shouldBind !== false );\n\t};\n\n\tModel.prototype.getKeypathModel = function getKeypathModel () {\n\t\tif ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }\n\t\treturn this.keypathModel;\n\t};\n\n\tModel.prototype.joinKey = function joinKey ( key, opts ) {\n\t\tif ( this._link ) {\n\t\t\tif ( opts && opts.lastLink !== false && ( key === undefined || key === '' ) ) { return this; }\n\t\t\treturn this._link.joinKey( key );\n\t\t}\n\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new Model( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\tif ( this.childByKey[ key ]._link && ( !opts || opts.lastLink !== false ) ) { return this.childByKey[ key ]._link; }\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tModel.prototype.mark = function mark$1 () {\n\t\tif ( this._link ) { return this._link.mark(); }\n\n\t\tvar value = this.retrieve();\n\n\t\tif ( !isEqual( value, this.value ) ) {\n\t\t\tvar old = this.value;\n\t\t\tthis.value = value;\n\t\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\t\t// make sure the wrapper stays in sync\n\t\t\tif ( old !== value || this.rewrap ) {\n\t\t\t\tif ( this.wrapper ) { this.newWrapperValue = value; }\n\t\t\t\tthis.adapt();\n\t\t\t}\n\n\t\t\t// keep track of array stuff\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\tthis.length = value.length;\n\t\t\t\tthis.isArray = true;\n\t\t\t} else {\n\t\t\t\tthis.isArray = false;\n\t\t\t}\n\n\t\t\tthis.children.forEach( mark$1$1 );\n\t\t\tthis.links.forEach( marked );\n\n\t\t\tthis.deps.forEach( handleChange$1$1 );\n\t\t\tthis.clearUnresolveds();\n\t\t}\n\t};\n\n\tModel.prototype.merge = function merge ( array, comparator ) {\n\t\tvar oldArray = this.value;\n\t\tvar newArray = array;\n\t\tif ( oldArray === newArray ) { oldArray = recreateArray( this ); }\n\t\tif ( comparator ) {\n\t\t\toldArray = oldArray.map( comparator );\n\t\t\tnewArray = newArray.map( comparator );\n\t\t}\n\n\t\tvar oldLength = oldArray.length;\n\n\t\tvar usedIndices = {};\n\t\tvar firstUnusedIndex = 0;\n\n\t\tvar newIndices = oldArray.map( function (item) {\n\t\t\tvar index;\n\t\t\tvar start = firstUnusedIndex;\n\n\t\t\tdo {\n\t\t\t\tindex = newArray.indexOf( item, start );\n\n\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\n\t\t\t\tstart = index + 1;\n\t\t\t} while ( ( usedIndices[ index ] === true ) && start < oldLength );\n\n\t\t\t// keep track of the first unused index, so we don't search\n\t\t\t// the whole of newArray for each item in oldArray unnecessarily\n\t\t\tif ( index === firstUnusedIndex ) {\n\t\t\t\tfirstUnusedIndex += 1;\n\t\t\t}\n\t\t\t// allow next instance of next \""equal\"" to be found item\n\t\t\tusedIndices[ index ] = true;\n\t\t\treturn index;\n\t\t});\n\n\t\tthis.parent.value[ this.key ] = array;\n\t\tthis.shuffle( newIndices );\n\t};\n\n\tModel.prototype.retrieve = function retrieve () {\n\t\treturn this.parent.value ? this.parent.value[ this.key ] : undefined;\n\t};\n\n\tModel.prototype.set = function set ( value ) {\n\t\tif ( this.ticker ) { this.ticker.stop(); }\n\t\tthis.applyValue( value );\n\t};\n\n\tModel.prototype.shuffle = function shuffle$1 ( newIndices ) {\n\t\tshuffle$1$1( this, newIndices, false );\n\t};\n\n\tModel.prototype.source = function source () { return this; };\n\n\tModel.prototype.teardown = function teardown$1 () {\n\t\tif ( this._link ) { this._link.teardown(); }\n\t\tthis.children.forEach( teardown$1$1 );\n\t\tif ( this.wrapper ) { this.wrapper.teardown(); }\n\t\tif ( this.keypathModel ) { this.keypathModel.teardown(); }\n\t};\n\n\treturn Model;\n}(ModelBase));\n\nfunction recreateArray( model ) {\n\tvar array = [];\n\n\tfor ( var i = 0; i < model.length; i++ ) {\n\t\tarray[ i ] = (model.childByKey[i] || {}).value;\n\t}\n\n\treturn array;\n}\n\n/* global global */\nvar data = {};\n\nvar SharedModel = (function (Model$$1) {\n\tfunction SharedModel ( value, name ) {\n\t\tModel$$1.call( this, null, (\""@\"" + name) );\n\t\tthis.key = \""@\"" + name;\n\t\tthis.value = value;\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.adaptors = [];\n\t}\n\n\tif ( Model$$1 ) SharedModel.__proto__ = Model$$1;\n\tSharedModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tSharedModel.prototype.constructor = SharedModel;\n\n\tSharedModel.prototype.getKeypath = function getKeypath () {\n\t\treturn this.key;\n\t};\n\n\t// shared model doesn't contribute changes events because it has no instance\n\tSharedModel.prototype.registerChange = function registerChange () {};\n\n\treturn SharedModel;\n}(Model));\n\nvar SharedModel$1 = new SharedModel( data, 'shared' );\n\nvar GlobalModel = new SharedModel( typeof global !== 'undefined' ? global : window, 'global' );\n\nvar keypathExpr = /^@[^\\(]+\\(([^\\)]+)\\)/;\n\nfunction resolveReference ( fragment, ref ) {\n\tvar initialFragment = fragment;\n\t// current context ref\n\tif ( ref === '.' ) { return fragment.findContext(); }\n\n\t// ancestor references\n\tif ( ref[0] === '~' ) { return fragment.ractive.viewmodel.joinAll( splitKeypath( ref.slice( 2 ) ) ); }\n\n\t// scoped references\n\tif ( ref[0] === '.' || ref[0] === '^' ) {\n\t\tvar frag = fragment;\n\t\tvar parts = ref.split( '/' );\n\t\tvar explicitContext = parts[0] === '^^';\n\t\tvar context$1 = explicitContext ? null : fragment.findContext();\n\n\t\t// account for the first context hop\n\t\tif ( explicitContext ) { parts.unshift( '^^' ); }\n\n\t\t// walk up the context chain\n\t\twhile ( parts[0] === '^^' ) {\n\t\t\tparts.shift();\n\t\t\tcontext$1 = null;\n\t\t\twhile ( frag && !context$1 ) {\n\t\t\t\tcontext$1 = frag.context;\n\t\t\t\tfrag = frag.parent.component ? frag.parent.component.parentFragment : frag.parent;\n\t\t\t}\n\t\t}\n\n\t\tif ( !context$1 && explicitContext ) {\n\t\t\tthrow new Error( (\""Invalid context parent reference ('\"" + ref + \""'). There is not context at that level.\"") );\n\t\t}\n\n\t\t// walk up the context path\n\t\twhile ( parts[0] === '.' || parts[0] === '..' ) {\n\t\t\tvar part = parts.shift();\n\n\t\t\tif ( part === '..' ) {\n\t\t\t\tcontext$1 = context$1.parent;\n\t\t\t}\n\t\t}\n\n\t\tref = parts.join( '/' );\n\n\t\t// special case - `{{.foo}}` means the same as `{{./foo}}`\n\t\tif ( ref[0] === '.' ) { ref = ref.slice( 1 ); }\n\t\treturn context$1.joinAll( splitKeypath( ref ) );\n\t}\n\n\tvar keys = splitKeypath( ref );\n\tif ( !keys.length ) { return; }\n\tvar base = keys.shift();\n\n\t// special refs\n\tif ( base[0] === '@' ) {\n\t\t// shorthand from outside the template\n\t\t// @this referring to local ractive instance\n\t\tif ( base === '@this' || base === '@' ) {\n\t\t\treturn fragment.ractive.viewmodel.getRactiveModel().joinAll( keys );\n\t\t}\n\n\t\t// @index or @key referring to the nearest repeating index or key\n\t\telse if ( base === '@index' || base === '@key' ) {\n\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\tvar repeater = fragment.findRepeatingFragment();\n\t\t\t// make sure the found fragment is actually an iteration\n\t\t\tif ( !repeater.isIteration ) { return; }\n\t\t\treturn repeater.context.getKeyModel( repeater[ ref[1] === 'i' ? 'index' : 'key' ] );\n\t\t}\n\n\t\t// @global referring to window or global\n\t\telse if ( base === '@global' ) {\n\t\t\treturn GlobalModel.joinAll( keys );\n\t\t}\n\n\t\t// @global referring to window or global\n\t\telse if ( base === '@shared' ) {\n\t\t\treturn SharedModel$1.joinAll( keys );\n\t\t}\n\n\t\t// @keypath or @rootpath, the current keypath string, which may also be used to resolve relative keypaths\n\t\telse if ( base.indexOf( '@keypath' ) === 0 || base.indexOf( '@rootpath' ) === 0 ) {\n\t\t\tvar root = ref[1] === 'r' ? fragment.ractive.root : null;\n\t\t\tvar context$2 = fragment.findContext();\n\n\t\t\t// skip over component roots, which provide no context\n\t\t\twhile ( root && context$2.isRoot && context$2.ractive.component ) {\n\t\t\t\tcontext$2 = context$2.ractive.component.parentFragment.findContext();\n\t\t\t}\n\n\t\t\tvar match = keypathExpr.exec( ref );\n\t\t\tif ( match && match[1] ) {\n\t\t\t\tvar model = resolveReference( fragment, match[1] );\n\t\t\t\tif ( model ) { return model.getKeypathModel( root ); }\n\t\t\t}\n\n\t\t\treturn context$2.getKeypathModel( root );\n\t\t}\n\n\t\t// nope\n\t\telse {\n\t\t\tthrow new Error( (\""Invalid special reference '\"" + base + \""'\"") );\n\t\t}\n\t}\n\n\tvar context = fragment.findContext();\n\n\t// check immediate context for a match\n\tif ( context.has( base ) ) {\n\t\treturn context.joinKey( base ).joinAll( keys );\n\t}\n\n\t// walk up the fragment hierarchy looking for a matching ref, alias, or key in a context\n\tvar hasContextChain;\n\tvar crossedComponentBoundary;\n\tvar shouldWarn = fragment.ractive.warnAboutAmbiguity;\n\n\twhile ( fragment ) {\n\t\t// repeated fragments\n\t\tif ( fragment.isIteration ) {\n\t\t\tif ( base === fragment.parent.keyRef ) {\n\t\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\t\treturn fragment.context.getKeyModel( fragment.key );\n\t\t\t}\n\n\t\t\tif ( base === fragment.parent.indexRef ) {\n\t\t\t\tif ( keys.length ) { badReference( base ); }\n\t\t\t\treturn fragment.context.getKeyModel( fragment.index );\n\t\t\t}\n\t\t}\n\n\t\t// alias node or iteration\n\t\tif ( fragment.aliases  && fragment.aliases.hasOwnProperty( base ) ) {\n\t\t\tvar model$1 = fragment.aliases[ base ];\n\n\t\t\tif ( keys.length === 0 ) { return model$1; }\n\t\t\telse if ( typeof model$1.joinAll === 'function' ) {\n\t\t\t\treturn model$1.joinAll( keys );\n\t\t\t}\n\t\t}\n\n\t\t// check fragment context to see if it has the key we need\n\t\tif ( fragment.context ) {\n\t\t\tif ( !fragment.isRoot || fragment.ractive.component ) { hasContextChain = true; }\n\n\t\t\tif ( fragment.context.has( base ) ) {\n\t\t\t\t// this is an implicit mapping\n\t\t\t\tif ( crossedComponentBoundary ) {\n\t\t\t\t\tif ( shouldWarn ) { warnIfDebug( (\""'\"" + ref + \""' resolved but is ambiguous and will create a mapping to a parent component.\"") ); }\n\t\t\t\t\treturn context.root.createLink( base, fragment.context.joinKey( base ), base, { implicit: true } ).joinAll( keys );\n\t\t\t\t}\n\n\t\t\t\tif ( shouldWarn ) { warnIfDebug( (\""'\"" + ref + \""' resolved but is ambiguous.\"") ); }\n\t\t\t\treturn fragment.context.joinKey( base ).joinAll( keys );\n\t\t\t}\n\t\t}\n\n\t\tif ( ( fragment.componentParent || ( !fragment.parent && fragment.ractive.component ) ) && !fragment.ractive.isolated ) {\n\t\t\t// ascend through component boundary\n\t\t\tfragment = fragment.componentParent || fragment.ractive.component.parentFragment;\n\t\t\tcrossedComponentBoundary = true;\n\t\t} else {\n\t\t\tfragment = fragment.parent;\n\t\t}\n\t}\n\n\t// if enabled, check the instance for a match\n\tif ( initialFragment.ractive.resolveInstanceMembers ) {\n\t\tvar model$2 = initialFragment.ractive.viewmodel.getRactiveModel();\n\t\tif ( model$2.has( base ) ) {\n\t\t\treturn model$2.joinKey( base ).joinAll( keys );\n\t\t}\n\t}\n\n\tif ( shouldWarn ) {\n\t\twarnIfDebug( (\""'\"" + ref + \""' is ambiguous and did not resolve.\"") );\n\t}\n\n\t// didn't find anything, so go ahead and create the key on the local model\n\tif ( !hasContextChain ) {\n\t\treturn context.root.joinKey( base ).joinAll( keys );\n\t}\n}\n\nfunction badReference ( key ) {\n\tthrow new Error( (\""An index or key reference (\"" + key + \"") cannot have child properties\"") );\n}\n\nfunction Ractive$get ( keypath, opts ) {\n\tif ( typeof keypath !== 'string' ) { return this.viewmodel.get( true, keypath ); }\n\n\tvar keys = splitKeypath( keypath );\n\tvar key = keys[0];\n\n\tvar model;\n\n\tif ( !this.viewmodel.has( key ) ) {\n\t\t// if this is an inline component, we may need to create\n\t\t// an implicit mapping\n\t\tif ( this.component && !this.isolated ) {\n\t\t\tmodel = resolveReference( this.component.parentFragment, key );\n\n\t\t\tif ( model ) {\n\t\t\t\tthis.viewmodel.map( key, model, { implicit: true } );\n\t\t\t}\n\t\t}\n\t}\n\n\tmodel = this.viewmodel.joinAll( keys );\n\treturn model.get( true, opts );\n}\n\n// This function takes an array, the name of a mutator method, and the\n// arguments to call that mutator method with, and returns an array that\n// maps the old indices to their new indices.\n\n// So if you had something like this...\n//\n//     array = [ 'a', 'b', 'c', 'd' ];\n//     array.push( 'e' );\n//\n// ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices\n// have changed. If you then did this...\n//\n//     array.unshift( 'z' );\n//\n// ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved\n// one higher to make room for the 'z'. If you removed an item, the new index\n// would be -1...\n//\n//     array.splice( 2, 2 );\n//\n// ...this would result in [ 0, 1, -1, -1, 2, 3 ].\n//\n// This information is used to enable fast, non-destructive shuffling of list\n// sections when you do e.g. `ractive.splice( 'items', 2, 2 );\n\nfunction getNewIndices ( length, methodName, args ) {\n\tvar newIndices = [];\n\n\tvar spliceArguments = getSpliceEquivalent( length, methodName, args );\n\n\tif ( !spliceArguments ) {\n\t\treturn null; // TODO support reverse and sort?\n\t}\n\n\tvar balance = ( spliceArguments.length - 2 ) - spliceArguments[1];\n\n\tvar removeStart = Math.min( length, spliceArguments[0] );\n\tvar removeEnd = removeStart + spliceArguments[1];\n\tnewIndices.startIndex = removeStart;\n\n\tvar i;\n\tfor ( i = 0; i < removeStart; i += 1 ) {\n\t\tnewIndices.push( i );\n\t}\n\n\tfor ( ; i < removeEnd; i += 1 ) {\n\t\tnewIndices.push( -1 );\n\t}\n\n\tfor ( ; i < length; i += 1 ) {\n\t\tnewIndices.push( i + balance );\n\t}\n\n\t// there is a net shift for the rest of the array starting with index + balance\n\tif ( balance !== 0 ) {\n\t\tnewIndices.touchedFrom = spliceArguments[0];\n\t} else {\n\t\tnewIndices.touchedFrom = length;\n\t}\n\n\treturn newIndices;\n}\n\n\n// The pop, push, shift an unshift methods can all be represented\n// as an equivalent splice\nfunction getSpliceEquivalent ( length, methodName, args ) {\n\tswitch ( methodName ) {\n\t\tcase 'splice':\n\t\t\tif ( args[0] !== undefined && args[0] < 0 ) {\n\t\t\t\targs[0] = length + Math.max( args[0], -length );\n\t\t\t}\n\n\t\t\tif ( args[0] === undefined ) { args[0] = 0; }\n\n\t\t\twhile ( args.length < 2 ) {\n\t\t\t\targs.push( length - args[0] );\n\t\t\t}\n\n\t\t\tif ( typeof args[1] !== 'number' ) {\n\t\t\t\targs[1] = length - args[0];\n\t\t\t}\n\n\t\t\t// ensure we only remove elements that exist\n\t\t\targs[1] = Math.min( args[1], length - args[0] );\n\n\t\t\treturn args;\n\n\t\tcase 'sort':\n\t\tcase 'reverse':\n\t\t\treturn null;\n\n\t\tcase 'pop':\n\t\t\tif ( length ) {\n\t\t\t\treturn [ length - 1, 1 ];\n\t\t\t}\n\t\t\treturn [ 0, 0 ];\n\n\t\tcase 'push':\n\t\t\treturn [ length, 0 ].concat( args );\n\n\t\tcase 'shift':\n\t\t\treturn [ 0, length ? 1 : 0 ];\n\n\t\tcase 'unshift':\n\t\t\treturn [ 0, 0 ].concat( args );\n\t}\n}\n\nvar arrayProto = Array.prototype;\n\nvar makeArrayMethod = function ( methodName ) {\n\tfunction path ( keypath ) {\n\t\tvar args = [], len = arguments.length - 1;\n\t\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\t\treturn model( this.viewmodel.joinAll( splitKeypath( keypath ) ), args );\n\t}\n\n\tfunction model ( mdl, args ) {\n\t\tvar array = mdl.get();\n\n\t\tif ( !Array.isArray( array ) ) {\n\t\t\tif ( array === undefined ) {\n\t\t\t\tarray = [];\n\t\t\t\tvar result$1 = arrayProto[ methodName ].apply( array, args );\n\t\t\t\tvar promise$1 = runloop.start( this, true ).then( function () { return result$1; } );\n\t\t\t\tmdl.set( array );\n\t\t\t\trunloop.end();\n\t\t\t\treturn promise$1;\n\t\t\t} else {\n\t\t\t\tthrow new Error( (\""shuffle array method \"" + methodName + \"" called on non-array at \"" + (mdl.getKeypath())) );\n\t\t\t}\n\t\t}\n\n\t\tvar newIndices = getNewIndices( array.length, methodName, args );\n\t\tvar result = arrayProto[ methodName ].apply( array, args );\n\n\t\tvar promise = runloop.start( this, true ).then( function () { return result; } );\n\t\tpromise.result = result;\n\n\t\tif ( newIndices ) {\n\t\t\tmdl.shuffle( newIndices );\n\t\t} else {\n\t\t\tmdl.set( result );\n\t\t}\n\n\t\trunloop.end();\n\n\t\treturn promise;\n\t}\n\n\treturn { path: path, model: model };\n};\n\nvar comparators = {};\n\nfunction getComparator ( option ) {\n\tif ( !option ) { return null; } // use existing arrays\n\tif ( option === true ) { return JSON.stringify; }\n\tif ( typeof option === 'function' ) { return option; }\n\n\tif ( typeof option === 'string' ) {\n\t\treturn comparators[ option ] || ( comparators[ option ] = function (thing) { return thing[ option ]; } );\n\t}\n\n\tthrow new Error( 'If supplied, options.compare must be a string, function, or `true`' ); // TODO link to docs\n}\n\nfunction merge$2 ( ractive, model, array, options ) {\n\tvar promise = runloop.start( ractive, true );\n\tvar value = model.get();\n\tif ( array === undefined ) { array = value; }\n\n\tif ( !Array.isArray( value ) || !Array.isArray( array ) ) {\n\t\tthrow new Error( 'You cannot merge an array with a non-array' );\n\t}\n\n\tvar comparator = getComparator( options && options.compare );\n\tmodel.merge( array, comparator );\n\n\trunloop.end();\n\treturn promise;\n}\n\nfunction thisRactive$merge ( keypath, array, options ) {\n\treturn merge$2( this, this.viewmodel.joinAll( splitKeypath( keypath ) ), array, options );\n}\n\nvar updateHook = new Hook( 'update' );\n\nfunction update$3 ( ractive, model ) {\n\t// if the parent is wrapped, the adaptor will need to be updated before\n\t// updating on this keypath\n\tif ( model.parent && model.parent.wrapper ) {\n\t\tmodel.parent.adapt();\n\t}\n\n\tvar promise = runloop.start( ractive, true );\n\n\tmodel.mark();\n\tmodel.registerChange( model.getKeypath(), model.get() );\n\n\tif ( !model.isRoot ) {\n\t\t// there may be unresolved refs that are now resolvable up the context tree\n\t\tvar parent = model.parent;\n\t\tvar key = model.key;\n\t\twhile ( parent && !parent.isRoot ) {\n\t\t\tif ( parent.clearUnresolveds ) { parent.clearUnresolveds( key ); }\n\t\t\tkey = parent.key;\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\t// notify upstream of changes\n\tmodel.notifyUpstream();\n\n\trunloop.end();\n\n\tupdateHook.fire( ractive, model );\n\n\treturn promise;\n}\n\nfunction Ractive$update ( keypath ) {\n\tif ( keypath ) { keypath = splitKeypath( keypath ); }\n\n\treturn update$3( this, keypath ? this.viewmodel.joinAll( keypath ) : this.viewmodel );\n}\n\nvar modelPush = makeArrayMethod( 'push' ).model;\nvar modelPop = makeArrayMethod( 'pop' ).model;\nvar modelShift = makeArrayMethod( 'shift' ).model;\nvar modelUnshift = makeArrayMethod( 'unshift' ).model;\nvar modelSort = makeArrayMethod( 'sort' ).model;\nvar modelSplice = makeArrayMethod( 'splice' ).model;\nvar modelReverse = makeArrayMethod( 'reverse' ).model;\n\n// TODO: at some point perhaps this could support relative * keypaths?\nfunction build$1 ( el, keypath, value ) {\n\tvar sets = [];\n\n\t// set multiple keypaths in one go\n\tif ( isObject( keypath ) ) {\n\t\tfor ( var k in keypath ) {\n\t\t\tif ( keypath.hasOwnProperty( k ) ) {\n\t\t\t\tsets.push( [ findModel( el, k ).model, keypath[k] ] );\n\t\t\t}\n\t\t}\n\n\t}\n\t// set a single keypath\n\telse {\n\t\tsets.push( [ findModel( el, keypath ).model, value ] );\n\t}\n\n\treturn sets;\n}\n\n// get relative keypaths and values\nfunction get$1$1 ( keypath ) {\n\tif ( !keypath ) { return this._element.parentFragment.findContext().get( true ); }\n\n\tvar model = resolveReference( this._element.parentFragment, keypath );\n\n\treturn model ? model.get( true ) : undefined;\n}\n\nfunction resolve$1 ( path, ractive ) {\n\tvar ref = findModel( this, path );\n\tvar model = ref.model;\n\tvar instance = ref.instance;\n\treturn model ? model.getKeypath( ractive || instance ) : path;\n}\n\nfunction findModel ( el, path ) {\n\tvar frag = el._element.parentFragment;\n\n\tif ( typeof path !== 'string' ) {\n\t\treturn { model: frag.findContext(), instance: path };\n\t}\n\n\treturn { model: resolveReference( frag, path ), instance: frag.ractive };\n}\n\n// the usual mutation suspects\nfunction add$2 ( keypath, value ) {\n\tif ( value === undefined ) { value = 1; }\n\tif ( !isNumeric( value ) ) { throw new Error( 'Bad arguments' ); }\n\treturn set$1( this.ractive, build$1( this, keypath, value ).map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar val = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( val ) || !isNumeric( value ) ) { throw new Error( 'Cannot add non-numeric value' ); }\n\t\treturn [ model, value + val ];\n\t}) );\n}\n\nfunction animate$2 ( keypath, value, options ) {\n\tvar model = findModel( this, keypath ).model;\n\treturn animate$1( this.ractive, model, value, options );\n}\n\nfunction link$1 ( source, dest ) {\n\tvar there = findModel( this, source ).model;\n\tvar here = findModel( this, dest ).model;\n\tvar promise = runloop.start( this.ractive, true );\n\there.link( there, source );\n\trunloop.end();\n\treturn promise;\n}\n\nfunction merge$1 ( keypath, array, options ) {\n\treturn merge$2( this.ractive, findModel( this, keypath ).model, array, options );\n}\n\nfunction observe ( keypath, callback, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( isObject( keypath ) ) { options = callback || {}; }\n\toptions.fragment = this._element.parentFragment;\n\treturn this.ractive.observe( keypath, callback, options );\n}\n\nfunction observeOnce ( keypath, callback, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( isObject( keypath ) ) { options = callback || {}; }\n\toptions.fragment = this._element.parentFragment;\n\treturn this.ractive.observeOnce( keypath, callback, options );\n}\n\nfunction pop ( keypath ) {\n\treturn modelPop( findModel( this, keypath ).model, [] );\n}\n\nfunction push ( keypath ) {\n\tvar values = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];\n\n\treturn modelPush( findModel( this, keypath ).model, values );\n}\n\nfunction raise ( name, event ) {\n\tvar args = [], len = arguments.length - 2;\n\twhile ( len-- > 0 ) args[ len ] = arguments[ len + 2 ];\n\n\tvar element = this._element;\n\n\twhile ( element ) {\n\t\tvar events = element.events;\n\t\tfor ( var i = 0; i < events.length; i++ ) {\n\t\t\tvar event$1 = events[i];\n\t\t\tif ( ~event$1.template.n.indexOf( name ) ) {\n\t\t\t\tevent$1.fire( event$1, args );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\telement = element.parent;\n\t}\n}\n\nfunction reverse ( keypath ) {\n\treturn modelReverse( findModel( this, keypath ).model, [] );\n}\n\nfunction set$2 ( keypath, value ) {\n\treturn set$1( this.ractive, build$1( this, keypath, value ) );\n}\n\nfunction shift ( keypath ) {\n\treturn modelShift( findModel( this, keypath ).model, [] );\n}\n\nfunction splice ( keypath, index, drop ) {\n\tvar add = [], len = arguments.length - 3;\n\twhile ( len-- > 0 ) add[ len ] = arguments[ len + 3 ];\n\n\tadd.unshift( index, drop );\n\treturn modelSplice( findModel( this, keypath ).model, add );\n}\n\nfunction sort ( keypath ) {\n\treturn modelSort( findModel( this, keypath ).model, [] );\n}\n\nfunction subtract ( keypath, value ) {\n\tif ( value === undefined ) { value = 1; }\n\tif ( !isNumeric( value ) ) { throw new Error( 'Bad arguments' ); }\n\treturn set$1( this.ractive, build$1( this, keypath, value ).map( function (pair) {\n\t\tvar model = pair[0];\n\t\tvar val = pair[1];\n\t\tvar value = model.get();\n\t\tif ( !isNumeric( val ) || !isNumeric( value ) ) { throw new Error( 'Cannot add non-numeric value' ); }\n\t\treturn [ model, value - val ];\n\t}) );\n}\n\nfunction toggle ( keypath ) {\n\tvar ref = findModel( this, keypath );\n\tvar model = ref.model;\n\treturn set$1( this.ractive, [ [ model, !model.get() ] ] );\n}\n\nfunction unlink$1 ( dest ) {\n\tvar here = findModel( this, dest ).model;\n\tvar promise = runloop.start( this.ractive, true );\n\tif ( here.owner && here.owner._link ) { here.owner.unlink(); }\n\trunloop.end();\n\treturn promise;\n}\n\nfunction unshift ( keypath ) {\n\tvar add = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) add[ len ] = arguments[ len + 1 ];\n\n\treturn modelUnshift( findModel( this, keypath ).model, add );\n}\n\nfunction update$2 ( keypath ) {\n\treturn update$3( this.ractive, findModel( this, keypath ).model );\n}\n\nfunction updateModel ( keypath, cascade ) {\n\tvar ref = findModel( this, keypath );\n\tvar model = ref.model;\n\tvar promise = runloop.start( this.ractive, true );\n\tmodel.updateFromBindings( cascade );\n\trunloop.end();\n\treturn promise;\n}\n\n// two-way binding related helpers\nfunction isBound () {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\treturn !!model;\n}\n\nfunction getBindingPath ( ractive ) {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\tvar instance = ref.instance;\n\tif ( model ) { return model.getKeypath( ractive || instance ); }\n}\n\nfunction getBinding () {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\tif ( model ) { return model.get( true ); }\n}\n\nfunction getBindingModel ( ctx ) {\n\tvar el = ctx._element;\n\treturn { model: el.binding && el.binding.model, instance: el.parentFragment.ractive };\n}\n\nfunction setBinding ( value ) {\n\tvar ref = getBindingModel( this );\n\tvar model = ref.model;\n\treturn set$1( this.ractive, [ [ model, value ] ] );\n}\n\nfunction addHelpers ( obj, element ) {\n\tObject.defineProperties( obj, {\n\t\t_element: { value: element },\n\t\tractive: { value: element.parentFragment.ractive },\n\t\tresolve: { value: resolve$1 },\n\t\tget: { value: get$1$1 },\n\n\t\tadd: { value: add$2 },\n\t\tanimate: { value: animate$2 },\n\t\tlink: { value: link$1 },\n\t\tmerge: { value: merge$1 },\n\t\tobserve: { value: observe },\n\t\tobserveOnce: { value: observeOnce },\n\t\tpop: { value: pop },\n\t\tpush: { value: push },\n\t\traise: { value: raise },\n\t\treverse: { value: reverse },\n\t\tset: { value: set$2 },\n\t\tshift: { value: shift },\n\t\tsort: { value: sort },\n\t\tsplice: { value: splice },\n\t\tsubtract: { value: subtract },\n\t\ttoggle: { value: toggle },\n\t\tunlink: { value: unlink$1 },\n\t\tunshift: { value: unshift },\n\t\tupdate: { value: update$2 },\n\t\tupdateModel: { value: updateModel },\n\n\t\tisBound: { value: isBound },\n\t\tgetBindingPath: { value: getBindingPath },\n\t\tgetBinding: { value: getBinding },\n\t\tsetBinding: { value: setBinding },\n\n\t\tdecorators: {\n\t\t\tget: function get$1 () {\n\t\t\t\tvar items = {};\n\t\t\t\telement.decorators.forEach( function (d) { return items[ d.name ] = d.intermediary; } );\n\t\t\t\treturn items;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn obj;\n}\n\nvar query = doc && doc.querySelector;\n\nvar staticInfo = function( node ) {\n\tif ( typeof node === 'string' && query ) {\n\t\tnode = query.call( document, node );\n\t}\n\n\tif ( !node || !node._ractive ) { return undefined; }\n\n\tvar storage = node._ractive;\n\n\treturn addHelpers( {}, storage.proxy );\n};\n\nfunction getNodeInfo( node, options ) {\n\tif ( typeof node === 'string' ) {\n\t\tnode = this.find( node, options );\n\t}\n\n\treturn staticInfo( node );\n}\n\nvar insertHook = new Hook( 'insert' );\n\nfunction Ractive$insert ( target, anchor ) {\n\tif ( !this.fragment.rendered ) {\n\t\t// TODO create, and link to, documentation explaining this\n\t\tthrow new Error( 'The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.' );\n\t}\n\n\ttarget = getElement( target );\n\tanchor = getElement( anchor ) || null;\n\n\tif ( !target ) {\n\t\tthrow new Error( 'You must specify a valid target to insert into' );\n\t}\n\n\ttarget.insertBefore( this.detach(), anchor );\n\tthis.el = target;\n\n\t( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( this );\n\tthis.isDetached = false;\n\n\tfireInsertHook( this );\n}\n\nfunction fireInsertHook( ractive ) {\n\tinsertHook.fire( ractive );\n\n\tractive.findAllComponents('*').forEach( function (child) {\n\t\tfireInsertHook( child.instance );\n\t});\n}\n\nfunction link$2( there, here, options ) {\n\tif ( here === there || (there + '.').indexOf( here + '.' ) === 0 || (here + '.').indexOf( there + '.' ) === 0 ) {\n\t\tthrow new Error( 'A keypath cannot be linked to itself.' );\n\t}\n\n\tvar promise = runloop.start();\n\tvar model;\n\tvar target = ( options && options.ractive ) || this;\n\n\t// may need to allow a mapping to resolve implicitly\n\tvar sourcePath = splitKeypath( there );\n\tif ( !target.viewmodel.has( sourcePath[0] ) && target.component ) {\n\t\tmodel = resolveReference( target.component.parentFragment, sourcePath[0] );\n\t\tmodel = model.joinAll( sourcePath.slice( 1 ) );\n\t}\n\n\tthis.viewmodel.joinAll( splitKeypath( here ) ).link( model || target.viewmodel.joinAll( sourcePath ), there );\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nfunction observe$1 ( keypath, callback, options ) {\n\tvar this$1 = this;\n\n\tvar observers = [];\n\tvar map;\n\n\tif ( isObject( keypath ) ) {\n\t\tmap = keypath;\n\t\toptions = callback || {};\n\t} else {\n\t\tif ( typeof keypath === 'function' ) {\n\t\t\tmap = { '': keypath };\n\t\t\toptions = callback;\n\t\t} else {\n\t\t\tmap = {};\n\t\t\tmap[ keypath ] = callback;\n\t\t}\n\t}\n\n\tvar silent = false;\n\tObject.keys( map ).forEach( function (keypath) {\n\t\tvar callback = map[ keypath ];\n\t\tvar caller = function () {\n\t\t\tvar args = [], len = arguments.length;\n\t\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\t\tif ( silent ) { return; }\n\t\t\treturn callback.apply( this, args );\n\t\t};\n\n\t\tvar keypaths = keypath.split( ' ' );\n\t\tif ( keypaths.length > 1 ) { keypaths = keypaths.filter( function (k) { return k; } ); }\n\n\t\tkeypaths.forEach( function (keypath) {\n\t\t\tobservers.push( createObserver( this$1, keypath, caller, options || {} ) );\n\t\t});\n\t});\n\n\t// add observers to the Ractive instance, so they can be\n\t// cancelled on ractive.teardown()\n\tthis._observers.push.apply( this._observers, observers );\n\n\treturn {\n\t\tcancel: function () { return observers.forEach( function (o) { return o.cancel(); } ); },\n\t\tisSilenced: function () { return silent; },\n\t\tsilence: function () { return silent = true; },\n\t\tresume: function () { return silent = false; }\n\t};\n}\n\nfunction createObserver ( ractive, keypath, callback, options ) {\n\tvar keys = splitKeypath( keypath );\n\tvar wildcardIndex = keys.indexOf( '*' );\n\toptions.keypath = keypath;\n\toptions.fragment = options.fragment || ractive.fragment;\n\n\tvar model;\n\tif ( !options.fragment ) {\n\t\tmodel = ractive.viewmodel.joinKey( keys[0] );\n\t} else {\n\t\t// .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .\n\t\tif ( keys[0] === '.*' ) {\n\t\t\tmodel = options.fragment.findContext();\n\t\t\twildcardIndex = 0;\n\t\t\tkeys[0] = '*';\n\t\t} else {\n\t\t\tmodel = wildcardIndex === 0 ? options.fragment.findContext() : resolveReference( options.fragment, keys[0] );\n\t\t}\n\t}\n\n\t// the model may not exist key\n\tif ( !model ) { model = ractive.viewmodel.joinKey( keys[0] ); }\n\n\tif ( !~wildcardIndex ) {\n\t\tmodel = model.joinAll( keys.slice( 1 ) );\n\t\treturn new Observer( ractive, model, callback, options );\n\t} else {\n\t\tmodel = model.joinAll( keys.slice( 1, wildcardIndex ) );\n\t\treturn new PatternObserver( ractive, model, keys.slice( wildcardIndex ), callback, options );\n\t}\n}\n\nvar Observer = function Observer ( ractive, model, callback, options ) {\n\tthis.context = options.context || ractive;\n\tthis.callback = callback;\n\tthis.ractive = ractive;\n\n\tif ( model ) { this.resolved( model ); }\n\n\tif ( options.init !== false ) {\n\t\tthis.dirty = true;\n\t\tthis.dispatch();\n\t} else {\n\t\tthis.oldValue = this.newValue;\n\t}\n\n\tthis.defer = options.defer;\n\tthis.once = options.once;\n\tthis.strict = options.strict;\n\n\tthis.dirty = false;\n};\n\nObserver.prototype.cancel = function cancel () {\n\tthis.cancelled = true;\n\tif ( this.model ) {\n\t\tthis.model.unregister( this );\n\t} else {\n\t\tthis.resolver.unbind();\n\t}\n\tremoveFromArray( this.ractive._observers, this );\n};\n\nObserver.prototype.dispatch = function dispatch () {\n\tif ( !this.cancelled ) {\n\t\tthis.callback.call( this.context, this.newValue, this.oldValue, this.keypath );\n\t\tthis.oldValue = this.model ? this.model.get() : this.newValue;\n\t\tthis.dirty = false;\n\t}\n};\n\nObserver.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty ) {\n\t\tvar newValue = this.model.get();\n\t\tif ( isEqual( newValue, this.oldValue ) ) { return; }\n\n\t\tthis.newValue = newValue;\n\n\t\tif ( this.strict && this.newValue === this.oldValue ) { return; }\n\n\t\trunloop.addObserver( this, this.defer );\n\t\tthis.dirty = true;\n\n\t\tif ( this.once ) { runloop.scheduleTask( function () { return this$1.cancel(); } ); }\n\t}\n};\n\nObserver.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tnext = rebindMatch( this.keypath, next, previous );\n\t// TODO: set up a resolver if next is undefined?\n\tif ( next === this.model ) { return false; }\n\n\tif ( this.model ) { this.model.unregister( this ); }\n\tif ( next ) { next.addShuffleTask( function () { return this$1.resolved( next ); } ); }\n};\n\nObserver.prototype.resolved = function resolved ( model ) {\n\tthis.model = model;\n\tthis.keypath = model.getKeypath( this.ractive );\n\n\tthis.oldValue = undefined;\n\tthis.newValue = model.get();\n\n\tmodel.register( this );\n};\n\nvar PatternObserver = function PatternObserver ( ractive, baseModel, keys, callback, options ) {\n\tvar this$1 = this;\n\n\tthis.context = options.context || ractive;\n\tthis.ractive = ractive;\n\tthis.baseModel = baseModel;\n\tthis.keys = keys;\n\tthis.callback = callback;\n\n\tvar pattern = keys.join( '\\\\.' ).replace( /\\*/g, '(.+)' );\n\tvar baseKeypath = baseModel.getKeypath( ractive );\n\tthis.pattern = new RegExp( (\""^\"" + (baseKeypath ? baseKeypath + '\\\\.' : '') + pattern + \""$\"") );\n\n\tthis.oldValues = {};\n\tthis.newValues = {};\n\n\tthis.defer = options.defer;\n\tthis.once = options.once;\n\tthis.strict = options.strict;\n\n\tthis.dirty = false;\n\tthis.changed = [];\n\tthis.partial = false;\n\n\tvar models = baseModel.findMatches( this.keys );\n\n\tmodels.forEach( function (model) {\n\t\tthis$1.newValues[ model.getKeypath( this$1.ractive ) ] = model.get();\n\t});\n\n\tif ( options.init !== false ) {\n\t\tthis.dispatch();\n\t} else {\n\t\tthis.oldValues = this.newValues;\n\t}\n\n\tbaseModel.registerPatternObserver( this );\n};\n\nPatternObserver.prototype.cancel = function cancel () {\n\tthis.baseModel.unregisterPatternObserver( this );\n\tremoveFromArray( this.ractive._observers, this );\n};\n\nPatternObserver.prototype.dispatch = function dispatch () {\n\t\tvar this$1 = this;\n\n\tvar newValues = this.newValues;\n\tthis.newValues = {};\n\tObject.keys( newValues ).forEach( function (keypath) {\n\t\tif ( this$1.newKeys && !this$1.newKeys[ keypath ] ) { return; }\n\n\t\tvar newValue = newValues[ keypath ];\n\t\tvar oldValue = this$1.oldValues[ keypath ];\n\n\t\tif ( this$1.strict && newValue === oldValue ) { return; }\n\t\tif ( isEqual( newValue, oldValue ) ) { return; }\n\n\t\tvar args = [ newValue, oldValue, keypath ];\n\t\tif ( keypath ) {\n\t\t\tvar wildcards = this$1.pattern.exec( keypath );\n\t\t\tif ( wildcards ) {\n\t\t\t\targs = args.concat( wildcards.slice( 1 ) );\n\t\t\t}\n\t\t}\n\n\t\tthis$1.callback.apply( this$1.context, args );\n\t});\n\n\tif ( this.partial ) {\n\t\tfor ( var k in newValues ) {\n\t\t\tthis$1.oldValues[k] = newValues[k];\n\t\t}\n\t} else {\n\t\tthis.oldValues = newValues;\n\t}\n\n\tthis.newKeys = null;\n\tthis.dirty = false;\n};\n\nPatternObserver.prototype.notify = function notify ( key ) {\n\tthis.changed.push( key );\n};\n\nPatternObserver.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tif ( !Array.isArray( this.baseModel.value ) ) { return; }\n\n\tvar base = this.baseModel.getKeypath( this.ractive );\n\tvar max = this.baseModel.value.length;\n\tvar suffix = this.keys.length > 1 ? '.' + this.keys.slice( 1 ).join( '.' ) : '';\n\n\tthis.newKeys = {};\n\tfor ( var i = 0; i < newIndices.length; i++ ) {\n\t\tif ( newIndices[ i ] === -1 || newIndices[ i ] === i ) { continue; }\n\t\tthis$1.newKeys[ (base + \"".\"" + i + suffix) ] = true;\n\t}\n\n\tfor ( var i$1 = newIndices.touchedFrom; i$1 < max; i$1++ ) {\n\t\tthis$1.newKeys[ (base + \"".\"" + i$1 + suffix) ] = true;\n\t}\n};\n\nPatternObserver.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tif ( !this.dirty || this.changed.length ) {\n\t\tif ( !this.dirty ) { this.newValues = {}; }\n\n\t\t// handle case where previously extant keypath no longer exists -\n\t\t// observer should still fire, with undefined as new value\n\t\t// TODO huh. according to the test suite that's not the case...\n\t\t// NOTE: I don't think this will work with partial updates\n\t\t// Object.keys( this.oldValues ).forEach( keypath => {\n\t\t// this.newValues[ keypath ] = undefined;\n\t\t// });\n\n\t\tif ( !this.changed.length ) {\n\t\t\tthis.baseModel.findMatches( this.keys ).forEach( function (model) {\n\t\t\t\tvar keypath = model.getKeypath( this$1.ractive );\n\t\t\t\tthis$1.newValues[ keypath ] = model.get();\n\t\t\t});\n\t\t\tthis.partial = false;\n\t\t} else {\n\t\t\tvar count = 0;\n\t\t\tvar ok = this.baseModel.isRoot ?\n\t\t\t\tthis.changed.map( function (keys) { return keys.map( escapeKey ).join( '.' ); } ) :\n\t\t\t\tthis.changed.map( function (keys) { return this$1.baseModel.getKeypath( this$1.ractive ) + '.' + keys.map( escapeKey ).join( '.' ); } );\n\n\t\t\tthis.baseModel.findMatches( this.keys ).forEach( function (model) {\n\t\t\t\tvar keypath = model.getKeypath( this$1.ractive );\n\t\t\t\tvar check = function (k) {\n\t\t\t\t\treturn ( k.indexOf( keypath ) === 0 && ( k.length === keypath.length || k[ keypath.length ] === '.' ) ) ||\n\t\t\t\t\t\t\t   ( keypath.indexOf( k ) === 0 && ( k.length === keypath.length || keypath[ k.length ] === '.' ) );\n\n\t\t\t\t};\n\n\t\t\t\t// is this model on a changed keypath?\n\t\t\t\tif ( ok.filter( check ).length ) {\n\t\t\t\t\tcount++;\n\t\t\t\t\tthis$1.newValues[ keypath ] = model.get();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// no valid change triggered, so bail to avoid breakage\n\t\t\tif ( !count ) { return; }\n\n\t\t\tthis.partial = true;\n\t\t}\n\n\t\trunloop.addObserver( this, this.defer );\n\t\tthis.dirty = true;\n\t\tthis.changed.length = 0;\n\n\t\tif ( this.once ) { this.cancel(); }\n\t}\n};\n\nfunction observeList ( keypath, callback, options ) {\n\tif ( typeof keypath !== 'string' ) {\n\t\tthrow new Error( 'ractive.observeList() must be passed a string as its first argument' );\n\t}\n\n\tvar model = this.viewmodel.joinAll( splitKeypath( keypath ) );\n\tvar observer = new ListObserver( this, model, callback, options || {} );\n\n\t// add observer to the Ractive instance, so it can be\n\t// cancelled on ractive.teardown()\n\tthis._observers.push( observer );\n\n\treturn {\n\t\tcancel: function cancel () {\n\t\t\tobserver.cancel();\n\t\t}\n\t};\n}\n\nfunction negativeOne () {\n\treturn -1;\n}\n\nvar ListObserver = function ListObserver ( context, model, callback, options ) {\n\tthis.context = context;\n\tthis.model = model;\n\tthis.keypath = model.getKeypath();\n\tthis.callback = callback;\n\n\tthis.pending = null;\n\n\tmodel.register( this );\n\n\tif ( options.init !== false ) {\n\t\tthis.sliced = [];\n\t\tthis.shuffle([]);\n\t\tthis.handleChange();\n\t} else {\n\t\tthis.sliced = this.slice();\n\t}\n};\n\nListObserver.prototype.handleChange = function handleChange () {\n\tif ( this.pending ) {\n\t\t// post-shuffle\n\t\tthis.callback( this.pending );\n\t\tthis.pending = null;\n\t}\n\n\telse {\n\t\t// entire array changed\n\t\tthis.shuffle( this.sliced.map( negativeOne ) );\n\t\tthis.handleChange();\n\t}\n};\n\nListObserver.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tvar newValue = this.slice();\n\n\tvar inserted = [];\n\tvar deleted = [];\n\tvar start;\n\n\tvar hadIndex = {};\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\thadIndex[ newIndex ] = true;\n\n\t\tif ( newIndex !== oldIndex && start === undefined ) {\n\t\t\tstart = oldIndex;\n\t\t}\n\n\t\tif ( newIndex === -1 ) {\n\t\t\tdeleted.push( this$1.sliced[ oldIndex ] );\n\t\t}\n\t});\n\n\tif ( start === undefined ) { start = newIndices.length; }\n\n\tvar len = newValue.length;\n\tfor ( var i = 0; i < len; i += 1 ) {\n\t\tif ( !hadIndex[i] ) { inserted.push( newValue[i] ); }\n\t}\n\n\tthis.pending = { inserted: inserted, deleted: deleted, start: start };\n\tthis.sliced = newValue;\n};\n\nListObserver.prototype.slice = function slice () {\n\tvar value = this.model.get();\n\treturn Array.isArray( value ) ? value.slice() : [];\n};\n\nvar onceOptions = { init: false, once: true };\n\nfunction observeOnce$1 ( keypath, callback, options ) {\n\tif ( isObject( keypath ) || typeof keypath === 'function' ) {\n\t\toptions = Object.assign( callback || {}, onceOptions );\n\t\treturn this.observe( keypath, options );\n\t}\n\n\toptions = Object.assign( options || {}, onceOptions );\n\treturn this.observe( keypath, callback, options );\n}\n\nvar trim = function (str) { return str.trim(); };\n\nvar notEmptyString = function (str) { return str !== ''; };\n\nfunction Ractive$off ( eventName, callback ) {\n\tvar this$1 = this;\n\n\t// if no event is specified, remove _all_ event listeners\n\tif ( !eventName ) {\n\t\tthis._subs = {};\n\t} else {\n\t\t// Handle multiple space-separated event names\n\t\tvar eventNames = eventName.split( ' ' ).map( trim ).filter( notEmptyString );\n\n\t\teventNames.forEach( function (event) {\n\t\t\tvar subs = this$1._subs[ event ];\n\t\t\t// if given a specific callback to remove, remove only it\n\t\t\tif ( subs && callback ) {\n\t\t\t\t// flag this callback as off so that any in-flight firings don't call\n\t\t\t\t// a cancelled handler - this is _slightly_ hacky\n\t\t\t\t( callback._proxy || callback ).off = true;\n\t\t\t\tremoveFromArray( subs, callback._proxy || callback );\n\t\t\t\tif ( event.indexOf( '.' ) ) { this$1._nsSubs--; }\n\t\t\t}\n\n\t\t\t// otherwise, remove all listeners for this event\n\t\t\telse if ( subs ) {\n\t\t\t\tif ( event.indexOf( '.' ) ) { this$1._nsSubs -= subs.length; }\n\t\t\t\tsubs.length = 0;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn this;\n}\n\nfunction Ractive$on ( eventName, callback ) {\n\tvar this$1 = this;\n\n\t// eventName may already be a map\n\tvar map = typeof eventName === 'object' ? eventName : {};\n\t// or it may be a string along with a callback\n\tif ( typeof eventName === 'string' ) { map[ eventName ] = callback; }\n\n\tvar silent = false;\n\tvar events = [];\n\n\tvar loop = function ( k ) {\n\t\tvar callback$1 = map[k];\n\t\tvar caller = function () {\n\t\t\tvar args = [], len = arguments.length;\n\t\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\t\tif ( !silent ) { return callback$1.apply( this, args ); }\n\t\t};\n\t\tcallback$1._proxy = caller;\n\n\t\tif ( map.hasOwnProperty( k ) ) {\n\t\t\tvar names = k.split( ' ' ).map( trim ).filter( notEmptyString );\n\t\t\tnames.forEach( function (n) {\n\t\t\t\t( this$1._subs[ n ] || ( this$1._subs[ n ] = [] ) ).push( caller );\n\t\t\t\tif ( n.indexOf( '.' ) ) { this$1._nsSubs++; }\n\t\t\t\tevents.push( [ n, caller ] );\n\t\t\t});\n\t\t}\n\t};\n\n\tfor ( var k in map ) loop( k );\n\n\treturn {\n\t\tcancel: function () { return events.forEach( function (e) { return this$1.off( e[0], e[1] ); } ); },\n\t\tisSilenced: function () { return silent; },\n\t\tsilence: function () { return silent = true; },\n\t\tresume: function () { return silent = false; }\n\t};\n}\n\nfunction Ractive$once ( eventName, handler ) {\n\tvar listener = this.on( eventName, function () {\n\t\thandler.apply( this, arguments );\n\t\tlistener.cancel();\n\t});\n\n\t// so we can still do listener.cancel() manually\n\treturn listener;\n}\n\nvar pop$1 = makeArrayMethod( 'pop' ).path;\n\nvar push$1 = makeArrayMethod( 'push' ).path;\n\nvar PREFIX = '/* Ractive.js component styles */';\n\n// Holds current definitions of styles.\nvar styleDefinitions = [];\n\n// Flag to tell if we need to update the CSS\nvar isDirty = false;\n\n// These only make sense on the browser. See additional setup below.\nvar styleElement = null;\nvar useCssText = null;\n\nfunction addCSS( styleDefinition ) {\n\tstyleDefinitions.push( styleDefinition );\n\tisDirty = true;\n}\n\nfunction applyCSS() {\n\n\t// Apply only seems to make sense when we're in the DOM. Server-side renders\n\t// can call toCSS to get the updated CSS.\n\tif ( !doc || !isDirty ) { return; }\n\n\tif ( useCssText ) {\n\t\tstyleElement.styleSheet.cssText = getCSS( null );\n\t} else {\n\t\tstyleElement.innerHTML = getCSS( null );\n\t}\n\n\tisDirty = false;\n}\n\nfunction getCSS( cssIds ) {\n\n\tvar filteredStyleDefinitions = cssIds ? styleDefinitions.filter( function (style) { return ~cssIds.indexOf( style.id ); } ) : styleDefinitions;\n\n\treturn filteredStyleDefinitions.reduce( function ( styles, style ) { return (styles + \""\\n\\n/* {\"" + (style.id) + \""} */\\n\"" + (style.styles)); }, PREFIX );\n\n}\n\n// If we're on the browser, additional setup needed.\nif ( doc && ( !styleElement || !styleElement.parentNode ) ) {\n\n\tstyleElement = doc.createElement( 'style' );\n\tstyleElement.type = 'text/css';\n\n\tdoc.getElementsByTagName( 'head' )[ 0 ].appendChild( styleElement );\n\n\tuseCssText = !!styleElement.styleSheet;\n}\n\nfunction fillGaps ( target ) {\n\tvar sources = [], len = arguments.length - 1;\n\twhile ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n\n\tfor (var i = 0; i < sources.length; i++){\n\t\tvar source = sources[i];\n\t\tfor ( var key in source ) {\n\t\t\t// Source can be a prototype-less object.\n\t\t\tif ( key in target || !Object.prototype.hasOwnProperty.call( source, key ) ) { continue; }\n\t\t\ttarget[ key ] = source[ key ];\n\t\t}\n\t}\n\n\treturn target;\n}\n\nfunction toPairs ( obj ) {\n\tif ( obj === void 0 ) obj = {};\n\n\tvar pairs = [];\n\tfor ( var key in obj ) {\n\t\t// Source can be a prototype-less object.\n\t\tif ( !Object.prototype.hasOwnProperty.call( obj, key ) ) { continue; }\n\t\tpairs.push( [ key, obj[ key ] ] );\n\t}\n\treturn pairs;\n}\n\nvar adaptConfigurator = {\n\textend: function ( Parent, proto, options ) {\n\t\tproto.adapt = combine( proto.adapt, ensureArray( options.adapt ) );\n\t},\n\n\tinit: function init () {}\n};\n\nvar remove$1 = /\\/\\*(?:[\\s\\S]*?)\\*\\//g;\nvar escape = /url\\(\\s*(['\""])(?:\\\\[\\s\\S]|(?!\\1).)*\\1\\s*\\)|url\\((?:\\\\[\\s\\S]|[^)])*\\)|(['\""])(?:\\\\[\\s\\S]|(?!\\2).)*\\2/gi;\nvar value = /\\0(\\d+)/g;\n\n// Removes comments and strings from the given CSS to make it easier to parse.\n// Callback receives the cleaned CSS and a function which can be used to put\n// the removed strings back in place after parsing is done.\nvar cleanCss = function ( css, callback ) {\n\tvar values = [];\n\tvar reconstruct = function (css) { return css.replace( value, function ( match, n ) { return values[ n ]; } ); };\n\tcss = css.replace( escape, function (match) { return (\""\\u0000\"" + (values.push( match ) - 1)); }).replace( remove$1, '' );\n\n\treturn callback( css, reconstruct );\n};\n\nvar selectorsPattern = /(?:^|\\})?\\s*([^\\{\\}]+)\\s*\\{/g;\nvar commentsPattern = /\\/\\*[\\s\\S]*?\\*\\//g;\nvar selectorUnitPattern = /((?:(?:\\[[^\\]]+\\])|(?:[^\\s\\+\\>~:]))+)((?:::?[^\\s\\+\\>\\~\\(:]+(?:\\([^\\)]+\\))?)*\\s*[\\s\\+\\>\\~]?)\\s*/g;\nvar excludePattern = /^(?:@|\\d+%)/;\nvar dataRvcGuidPattern = /\\[data-ractive-css~=\""\\{[a-z0-9-]+\\}\""]/g;\n\nfunction trim$1 ( str ) {\n\treturn str.trim();\n}\n\nfunction extractString ( unit ) {\n\treturn unit.str;\n}\n\nfunction transformSelector ( selector, parent ) {\n\tvar selectorUnits = [];\n\tvar match;\n\n\tcleanCss( selector, function ( selector, reconstruct ) {\n\t\twhile ( match = selectorUnitPattern.exec( selector ) ) {\n\t\t\tselectorUnits.push({\n\t\t\t\tstr: reconstruct( match[0] ),\n\t\t\t\tbase: reconstruct( match[1] ),\n\t\t\t\tmodifiers: reconstruct( match[2] )\n\t\t\t});\n\t\t}\n\t});\n\n\t// For each simple selector within the selector, we need to create a version\n\t// that a) combines with the id, and b) is inside the id\n\tvar base = selectorUnits.map( extractString );\n\n\tvar transformed = [];\n\tvar i = selectorUnits.length;\n\n\twhile ( i-- ) {\n\t\tvar appended = base.slice();\n\n\t\t// Pseudo-selectors should go after the attribute selector\n\t\tvar unit = selectorUnits[i];\n\t\tappended[i] = unit.base + parent + unit.modifiers || '';\n\n\t\tvar prepended = base.slice();\n\t\tprepended[i] = parent + ' ' + prepended[i];\n\n\t\ttransformed.push( appended.join( ' ' ), prepended.join( ' ' ) );\n\t}\n\n\treturn transformed.join( ', ' );\n}\n\nfunction transformCss ( css, id ) {\n\tvar dataAttr = \""[data-ractive-css~=\\\""{\"" + id + \""}\\\""]\"";\n\n\tvar transformed;\n\n\tif ( dataRvcGuidPattern.test( css ) ) {\n\t\ttransformed = css.replace( dataRvcGuidPattern, dataAttr );\n\t} else {\n\t\ttransformed = css\n\t\t.replace( commentsPattern, '' )\n\t\t.replace( selectorsPattern, function ( match, $1 ) {\n\t\t\t// don't transform at-rules and keyframe declarations\n\t\t\tif ( excludePattern.test( $1 ) ) { return match; }\n\n\t\t\tvar selectors = $1.split( ',' ).map( trim$1 );\n\t\t\tvar transformed = selectors\n\t\t\t\t.map( function (selector) { return transformSelector( selector, dataAttr ); } )\n\t\t\t\t.join( ', ' ) + ' ';\n\n\t\t\treturn match.replace( $1, transformed );\n\t\t});\n\t}\n\n\treturn transformed;\n}\n\nfunction s4() {\n\treturn Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n}\n\nfunction uuid() {\n\treturn s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n\nvar cssConfigurator = {\n\tname: 'css',\n\n\t// Called when creating a new component definition\n\textend: function ( Parent, proto, options ) {\n\t\tif ( !options.css ) { return; }\n\n\t\tvar id = uuid();\n\t\tvar styles = options.noCssTransform ? options.css : transformCss( options.css, id );\n\n\t\tproto.cssId = id;\n\n\t\taddCSS( { id: id, styles: styles } );\n\n\t},\n\n\t// Called when creating a new component instance\n\tinit: function ( Parent, target, options ) {\n\t\tif ( !options.css ) { return; }\n\n\t\twarnIfDebug( \""\\nThe css option is currently not supported on a per-instance basis and will be discarded. Instead, we recommend instantiating from a component definition with a css option.\\n\\nconst Component = Ractive.extend({\\n\\t...\\n\\tcss: '/* your css */',\\n\\t...\\n});\\n\\nconst componentInstance = new Component({ ... })\\n\\t\\t\"" );\n\t}\n\n};\n\nfunction validate ( data ) {\n\t// Warn if userOptions.data is a non-POJO\n\tif ( data && data.constructor !== Object ) {\n\t\tif ( typeof data === 'function' ) {\n\t\t\t// TODO do we need to support this in the new Ractive() case?\n\t\t} else if ( typeof data !== 'object' ) {\n\t\t\tfatal( (\""data option must be an object or a function, `\"" + data + \""` is not valid\"") );\n\t\t} else {\n\t\t\twarnIfDebug( 'If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged' );\n\t\t}\n\t}\n}\n\nvar dataConfigurator = {\n\tname: 'data',\n\n\textend: function ( Parent, proto, options ) {\n\t\tvar key;\n\t\tvar value;\n\n\t\t// check for non-primitives, which could cause mutation-related bugs\n\t\tif ( options.data && isObject( options.data ) ) {\n\t\t\tfor ( key in options.data ) {\n\t\t\t\tvalue = options.data[ key ];\n\n\t\t\t\tif ( value && typeof value === 'object' ) {\n\t\t\t\t\tif ( isObject( value ) || Array.isArray( value ) ) {\n\t\t\t\t\t\twarnIfDebug( \""Passing a `data` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\\n\\n  // this...\\n  data: function () {\\n    return {\\n      myObject: {}\\n    };\\n  })\\n\\n  // instead of this:\\n  data: {\\n    myObject: {}\\n  }\"" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tproto.data = combine$1( proto.data, options.data );\n\t},\n\n\tinit: function ( Parent, ractive, options ) {\n\t\tvar result = combine$1( Parent.prototype.data, options.data );\n\n\t\tif ( typeof result === 'function' ) { result = result.call( ractive ); }\n\n\t\t// bind functions to the ractive instance at the top level,\n\t\t// unless it's a non-POJO (in which case alarm bells should ring)\n\t\tif ( result && result.constructor === Object ) {\n\t\t\tfor ( var prop in result ) {\n\t\t\t\tif ( typeof result[ prop ] === 'function' ) {\n\t\t\t\t\tvar value = result[ prop ];\n\t\t\t\t\tresult[ prop ] = bind$2( value, ractive );\n\t\t\t\t\tresult[ prop ]._r_unbound = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result || {};\n\t},\n\n\treset: function reset ( ractive ) {\n\t\tvar result = this.init( ractive.constructor, ractive, ractive.viewmodel );\n\t\tractive.viewmodel.root.set( result );\n\t\treturn true;\n\t}\n};\n\nfunction combine$1 ( parentValue, childValue ) {\n\tvalidate( childValue );\n\n\tvar parentIsFn = typeof parentValue === 'function';\n\tvar childIsFn = typeof childValue === 'function';\n\n\t// Very important, otherwise child instance can become\n\t// the default data object on Ractive or a component.\n\t// then ractive.set() ends up setting on the prototype!\n\tif ( !childValue && !parentIsFn ) {\n\t\tchildValue = {};\n\t}\n\n\t// Fast path, where we just need to copy properties from\n\t// parent to child\n\tif ( !parentIsFn && !childIsFn ) {\n\t\treturn fromProperties( childValue, parentValue );\n\t}\n\n\treturn function () {\n\t\tvar child = childIsFn ? callDataFunction( childValue, this ) : childValue;\n\t\tvar parent = parentIsFn ? callDataFunction( parentValue, this ) : parentValue;\n\n\t\treturn fromProperties( child, parent );\n\t};\n}\n\nfunction callDataFunction ( fn, context ) {\n\tvar data = fn.call( context );\n\n\tif ( !data ) { return; }\n\n\tif ( typeof data !== 'object' ) {\n\t\tfatal( 'Data function must return an object' );\n\t}\n\n\tif ( data.constructor !== Object ) {\n\t\twarnOnceIfDebug( 'Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged' );\n\t}\n\n\treturn data;\n}\n\nfunction fromProperties ( primary, secondary ) {\n\tif ( primary && secondary ) {\n\t\tfor ( var key in secondary ) {\n\t\t\tif ( !( key in primary ) ) {\n\t\t\t\tprimary[ key ] = secondary[ key ];\n\t\t\t}\n\t\t}\n\n\t\treturn primary;\n\t}\n\n\treturn primary || secondary;\n}\n\nvar TEMPLATE_VERSION = 4;\n\nvar pattern = /\\$\\{([^\\}]+)\\}/g;\n\nfunction fromExpression ( body, length ) {\n\tif ( length === void 0 ) length = 0;\n\n\tvar args = new Array( length );\n\n\twhile ( length-- ) {\n\t\targs[length] = \""_\"" + length;\n\t}\n\n\t// Functions created directly with new Function() look like this:\n\t//     function anonymous (_0 /**/) { return _0*2 }\n\t//\n\t// With this workaround, we get a little more compact:\n\t//     function (_0){return _0*2}\n\treturn new Function( [], (\""return function (\"" + (args.join(',')) + \""){return(\"" + body + \"");};\"") )();\n}\n\nfunction fromComputationString ( str, bindTo ) {\n\tvar hasThis;\n\n\tvar functionBody = 'return (' + str.replace( pattern, function ( match, keypath ) {\n\t\thasThis = true;\n\t\treturn (\""__ractive.get(\\\""\"" + keypath + \""\\\"")\"");\n\t}) + ');';\n\n\tif ( hasThis ) { functionBody = \""var __ractive = this; \"" + functionBody; }\n\tvar fn = new Function( functionBody );\n\treturn hasThis ? fn.bind( bindTo ) : fn;\n}\n\nvar functions = Object.create( null );\n\nfunction getFunction ( str, i ) {\n\tif ( functions[ str ] ) { return functions[ str ]; }\n\treturn functions[ str ] = createFunction( str, i );\n}\n\nfunction addFunctions( template ) {\n\tif ( !template ) { return; }\n\n\tvar exp = template.e;\n\n\tif ( !exp ) { return; }\n\n\tObject.keys( exp ).forEach( function ( str ) {\n\t\tif ( functions[ str ] ) { return; }\n\t\tfunctions[ str ] = exp[ str ];\n\t});\n}\n\nvar leadingWhitespace = /^\\s+/;\n\nvar ParseError = function ( message ) {\n\tthis.name = 'ParseError';\n\tthis.message = message;\n\ttry {\n\t\tthrow new Error(message);\n\t} catch (e) {\n\t\tthis.stack = e.stack;\n\t}\n};\n\nParseError.prototype = Error.prototype;\n\nvar Parser = function ( str, options ) {\n\tvar item;\n\tvar lineStart = 0;\n\n\tthis.str = str;\n\tthis.options = options || {};\n\tthis.pos = 0;\n\n\tthis.lines = this.str.split( '\\n' );\n\tthis.lineEnds = this.lines.map( function (line) {\n\t\tvar lineEnd = lineStart + line.length + 1; // +1 for the newline\n\n\t\tlineStart = lineEnd;\n\t\treturn lineEnd;\n\t}, 0 );\n\n\t// Custom init logic\n\tif ( this.init ) { this.init( str, options ); }\n\n\tvar items = [];\n\n\twhile ( ( this.pos < this.str.length ) && ( item = this.read() ) ) {\n\t\titems.push( item );\n\t}\n\n\tthis.leftover = this.remaining();\n\tthis.result = this.postProcess ? this.postProcess( items, options ) : items;\n};\n\nParser.prototype = {\n\tread: function read ( converters ) {\n\t\tvar this$1 = this;\n\n\t\tvar i, item;\n\n\t\tif ( !converters ) { converters = this.converters; }\n\n\t\tvar pos = this.pos;\n\n\t\tvar len = converters.length;\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tthis$1.pos = pos; // reset for each attempt\n\n\t\t\tif ( item = converters[i]( this$1 ) ) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\tgetContextMessage: function getContextMessage ( pos, message ) {\n\t\tvar ref = this.getLinePos( pos );\n\t\tvar lineNum = ref[0];\n\t\tvar columnNum = ref[1];\n\t\tif ( this.options.contextLines === -1 ) {\n\t\t\treturn [ lineNum, columnNum, (message + \"" at line \"" + lineNum + \"" character \"" + columnNum) ];\n\t\t}\n\n\t\tvar line = this.lines[ lineNum - 1 ];\n\n\t\tvar contextUp = '';\n\t\tvar contextDown = '';\n\t\tif ( this.options.contextLines ) {\n\t\t\tvar start = lineNum - 1 - this.options.contextLines < 0 ? 0 : lineNum - 1 - this.options.contextLines;\n\t\t\tcontextUp = this.lines.slice( start, lineNum - 1 - start ).join( '\\n' ).replace( /\\t/g, '  ' );\n\t\t\tcontextDown = this.lines.slice( lineNum, lineNum + this.options.contextLines ).join( '\\n' ).replace( /\\t/g, '  ' );\n\t\t\tif ( contextUp ) {\n\t\t\t\tcontextUp += '\\n';\n\t\t\t}\n\t\t\tif ( contextDown ) {\n\t\t\t\tcontextDown = '\\n' + contextDown;\n\t\t\t}\n\t\t}\n\n\t\tvar numTabs = 0;\n\t\tvar annotation = contextUp + line.replace( /\\t/g, function ( match, char ) {\n\t\t\tif ( char < columnNum ) {\n\t\t\t\tnumTabs += 1;\n\t\t\t}\n\n\t\t\treturn '  ';\n\t\t}) + '\\n' + new Array( columnNum + numTabs ).join( ' ' ) + '^----' + contextDown;\n\n\t\treturn [ lineNum, columnNum, (message + \"" at line \"" + lineNum + \"" character \"" + columnNum + \"":\\n\"" + annotation) ];\n\t},\n\n\tgetLinePos: function getLinePos ( char ) {\n\t\tvar this$1 = this;\n\n\t\tvar lineNum = 0;\n\t\tvar lineStart = 0;\n\n\t\twhile ( char >= this.lineEnds[ lineNum ] ) {\n\t\t\tlineStart = this$1.lineEnds[ lineNum ];\n\t\t\tlineNum += 1;\n\t\t}\n\n\t\tvar columnNum = char - lineStart;\n\t\treturn [ lineNum + 1, columnNum + 1, char ]; // line/col should be one-based, not zero-based!\n\t},\n\n\terror: function error ( message ) {\n\t\tvar ref = this.getContextMessage( this.pos, message );\n\t\tvar lineNum = ref[0];\n\t\tvar columnNum = ref[1];\n\t\tvar msg = ref[2];\n\n\t\tvar error = new ParseError( msg );\n\n\t\terror.line = lineNum;\n\t\terror.character = columnNum;\n\t\terror.shortMessage = message;\n\n\t\tthrow error;\n\t},\n\n\tmatchString: function matchString ( string ) {\n\t\tif ( this.str.substr( this.pos, string.length ) === string ) {\n\t\t\tthis.pos += string.length;\n\t\t\treturn string;\n\t\t}\n\t},\n\n\tmatchPattern: function matchPattern ( pattern ) {\n\t\tvar match;\n\n\t\tif ( match = pattern.exec( this.remaining() ) ) {\n\t\t\tthis.pos += match[0].length;\n\t\t\treturn match[1] || match[0];\n\t\t}\n\t},\n\n\tallowWhitespace: function allowWhitespace () {\n\t\tthis.matchPattern( leadingWhitespace );\n\t},\n\n\tremaining: function remaining () {\n\t\treturn this.str.substring( this.pos );\n\t},\n\n\tnextChar: function nextChar () {\n\t\treturn this.str.charAt( this.pos );\n\t}\n};\n\nParser.extend = function ( proto ) {\n\tvar Parent = this;\n\tvar Child = function ( str, options ) {\n\t\tParser.call( this, str, options );\n\t};\n\n\tChild.prototype = Object.create( Parent.prototype );\n\n\tfor ( var key in proto ) {\n\t\tif ( proto.hasOwnProperty( key ) ) {\n\t\t\tChild.prototype[ key ] = proto[ key ];\n\t\t}\n\t}\n\n\tChild.extend = Parser.extend;\n\treturn Child;\n};\n\nvar TEXT              = 1;\nvar INTERPOLATOR      = 2;\nvar TRIPLE            = 3;\nvar SECTION           = 4;\nvar INVERTED          = 5;\nvar CLOSING           = 6;\nvar ELEMENT           = 7;\nvar PARTIAL           = 8;\nvar COMMENT           = 9;\nvar DELIMCHANGE       = 10;\nvar ANCHOR            = 11;\nvar ATTRIBUTE         = 13;\nvar CLOSING_TAG       = 14;\nvar COMPONENT         = 15;\nvar YIELDER           = 16;\nvar INLINE_PARTIAL    = 17;\nvar DOCTYPE           = 18;\nvar ALIAS             = 19;\n\nvar NUMBER_LITERAL    = 20;\nvar STRING_LITERAL    = 21;\nvar ARRAY_LITERAL     = 22;\nvar OBJECT_LITERAL    = 23;\nvar BOOLEAN_LITERAL   = 24;\nvar REGEXP_LITERAL    = 25;\n\nvar GLOBAL            = 26;\nvar KEY_VALUE_PAIR    = 27;\n\n\nvar REFERENCE         = 30;\nvar REFINEMENT        = 31;\nvar MEMBER            = 32;\nvar PREFIX_OPERATOR   = 33;\nvar BRACKETED         = 34;\nvar CONDITIONAL       = 35;\nvar INFIX_OPERATOR    = 36;\n\nvar INVOCATION        = 40;\n\nvar SECTION_IF        = 50;\nvar SECTION_UNLESS    = 51;\nvar SECTION_EACH      = 52;\nvar SECTION_WITH      = 53;\nvar SECTION_IF_WITH   = 54;\n\nvar ELSE              = 60;\nvar ELSEIF            = 61;\n\nvar EVENT             = 70;\nvar DECORATOR         = 71;\nvar TRANSITION        = 72;\nvar BINDING_FLAG      = 73;\n\nvar delimiterChangePattern = /^[^\\s=]+/;\nvar whitespacePattern = /^\\s+/;\n\nfunction readDelimiterChange ( parser ) {\n\tif ( !parser.matchString( '=' ) ) {\n\t\treturn null;\n\t}\n\n\tvar start = parser.pos;\n\n\t// allow whitespace before new opening delimiter\n\tparser.allowWhitespace();\n\n\tvar opening = parser.matchPattern( delimiterChangePattern );\n\tif ( !opening ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace (in fact, it's necessary...)\n\tif ( !parser.matchPattern( whitespacePattern ) ) {\n\t\treturn null;\n\t}\n\n\tvar closing = parser.matchPattern( delimiterChangePattern );\n\tif ( !closing ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace before closing '='\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '=' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn [ opening, closing ];\n}\n\nvar regexpPattern = /^(\\/(?:[^\\n\\r\\u2028\\u2029/\\\\[]|\\\\.|\\[(?:[^\\n\\r\\u2028\\u2029\\]\\\\]|\\\\.)*])+\\/(?:([gimuy])(?![a-z]*\\2))*(?![a-zA-Z_$0-9]))/;\n\nfunction readNumberLiteral ( parser ) {\n\tvar result;\n\n\tif ( result = parser.matchPattern( regexpPattern ) ) {\n\t\treturn {\n\t\t\tt: REGEXP_LITERAL,\n\t\t\tv: result\n\t\t};\n\t}\n\n\treturn null;\n}\n\nvar pattern$1 = /[-/\\\\^$*+?.()|[\\]{}]/g;\n\nfunction escapeRegExp ( str ) {\n\treturn str.replace( pattern$1, '\\\\$&' );\n}\n\nvar regExpCache = {};\n\nvar getLowestIndex = function ( haystack, needles ) {\n\treturn haystack.search( regExpCache[needles.join()] || ( regExpCache[needles.join()] = new RegExp( needles.map( escapeRegExp ).join( '|' ) ) ) );\n};\n\n// https://github.com/kangax/html-minifier/issues/63#issuecomment-37763316\nvar booleanAttributes = /^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;\nvar voidElementNames = /^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i;\n\nvar htmlEntities = { quot: 34, amp: 38, apos: 39, lt: 60, gt: 62, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190, iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221, THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252, yacute: 253, thorn: 254, yuml: 255, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, fnof: 402, circ: 710, tilde: 732, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949, zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, bull: 8226, hellip: 8230, permil: 8240, prime: 8242, Prime: 8243, lsaquo: 8249, rsaquo: 8250, oline: 8254, frasl: 8260, euro: 8364, image: 8465, weierp: 8472, real: 8476, trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744, cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830\t};\nvar controlCharacters = [ 8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376 ];\nvar entityPattern = new RegExp( '&(#?(?:x[\\\\w\\\\d]+|\\\\d+|' + Object.keys( htmlEntities ).join( '|' ) + '));?', 'g' );\nvar codePointSupport = typeof String.fromCodePoint === 'function';\nvar codeToChar = codePointSupport ? String.fromCodePoint : String.fromCharCode;\n\nfunction decodeCharacterReferences ( html ) {\n\treturn html.replace( entityPattern, function ( match, entity ) {\n\t\tvar code;\n\n\t\t// Handle named entities\n\t\tif ( entity[0] !== '#' ) {\n\t\t\tcode = htmlEntities[ entity ];\n\t\t} else if ( entity[1] === 'x' ) {\n\t\t\tcode = parseInt( entity.substring( 2 ), 16 );\n\t\t} else {\n\t\t\tcode = parseInt( entity.substring( 1 ), 10 );\n\t\t}\n\n\t\tif ( !code ) {\n\t\t\treturn match;\n\t\t}\n\n\t\treturn codeToChar( validateCode( code ) );\n\t});\n}\n\nvar lessThan = /</g;\nvar greaterThan = />/g;\nvar amp = /&/g;\nvar invalid = 65533;\n\nfunction escapeHtml ( str ) {\n\treturn str\n\t\t.replace( amp, '&amp;' )\n\t\t.replace( lessThan, '&lt;' )\n\t\t.replace( greaterThan, '&gt;' );\n}\n\n// some code points are verboten. If we were inserting HTML, the browser would replace the illegal\n// code points with alternatives in some cases - since we're bypassing that mechanism, we need\n// to replace them ourselves\n//\n// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters\nfunction validateCode ( code ) {\n\tif ( !code ) {\n\t\treturn invalid;\n\t}\n\n\t// line feed becomes generic whitespace\n\tif ( code === 10 ) {\n\t\treturn 32;\n\t}\n\n\t// ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)\n\tif ( code < 128 ) {\n\t\treturn code;\n\t}\n\n\t// code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need\n\t// to correct the mistake or we'll end up with missing € signs and so on\n\tif ( code <= 159 ) {\n\t\treturn controlCharacters[ code - 128 ];\n\t}\n\n\t// basic multilingual plane\n\tif ( code < 55296 ) {\n\t\treturn code;\n\t}\n\n\t// UTF-16 surrogate halves\n\tif ( code <= 57343 ) {\n\t\treturn invalid;\n\t}\n\n\t// rest of the basic multilingual plane\n\tif ( code <= 65535 ) {\n\t\treturn code;\n\t} else if ( !codePointSupport ) {\n\t\treturn invalid;\n\t}\n\n\t// supplementary multilingual plane 0x10000 - 0x1ffff\n\tif ( code >= 65536 && code <= 131071 ) {\n\t\treturn code;\n\t}\n\n\t// supplementary ideographic plane 0x20000 - 0x2ffff\n\tif ( code >= 131072 && code <= 196607 ) {\n\t\treturn code;\n\t}\n\n\treturn invalid;\n}\n\nvar expectedExpression = 'Expected a JavaScript expression';\nvar expectedParen = 'Expected closing paren';\n\n// bulletproof number regex from https://gist.github.com/Rich-Harris/7544330\nvar numberPattern = /^(?:[+-]?)0*(?:(?:(?:[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\n\nfunction readNumberLiteral$1 ( parser ) {\n\tvar result;\n\n\tif ( result = parser.matchPattern( numberPattern ) ) {\n\t\treturn {\n\t\t\tt: NUMBER_LITERAL,\n\t\t\tv: result\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction readBooleanLiteral ( parser ) {\n\tvar remaining = parser.remaining();\n\n\tif ( remaining.substr( 0, 4 ) === 'true' ) {\n\t\tparser.pos += 4;\n\t\treturn {\n\t\t\tt: BOOLEAN_LITERAL,\n\t\t\tv: 'true'\n\t\t};\n\t}\n\n\tif ( remaining.substr( 0, 5 ) === 'false' ) {\n\t\tparser.pos += 5;\n\t\treturn {\n\t\t\tt: BOOLEAN_LITERAL,\n\t\t\tv: 'false'\n\t\t};\n\t}\n\n\treturn null;\n}\n\n// Match one or more characters until: \"", ', \\, or EOL/EOF.\n// EOL/EOF is written as (?!.) (meaning there's no non-newline char next).\nvar stringMiddlePattern = /^(?=.)[^\""'\\\\]+?(?:(?!.)|(?=[\""'\\\\]))/;\n\n// Match one escape sequence, including the backslash.\nvar escapeSequencePattern = /^\\\\(?:['\""\\\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/;\n\n// Match one ES5 line continuation (backslash + line terminator).\nvar lineContinuationPattern = /^\\\\(?:\\r\\n|[\\u000A\\u000D\\u2028\\u2029])/;\n\n// Helper for defining getDoubleQuotedString and getSingleQuotedString.\nvar makeQuotedStringMatcher = function ( okQuote ) {\n\treturn function ( parser ) {\n\t\tvar literal = '\""';\n\t\tvar done = false;\n\t\tvar next;\n\n\t\twhile ( !done ) {\n\t\t\tnext = ( parser.matchPattern( stringMiddlePattern ) || parser.matchPattern( escapeSequencePattern ) ||\n\t\t\t\tparser.matchString( okQuote ) );\n\t\t\tif ( next ) {\n\t\t\t\tif ( next === \""\\\""\"" ) {\n\t\t\t\t\tliteral += \""\\\\\\\""\"";\n\t\t\t\t} else if ( next === \""\\\\'\"" ) {\n\t\t\t\t\tliteral += \""'\"";\n\t\t\t\t} else {\n\t\t\t\t\tliteral += next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnext = parser.matchPattern( lineContinuationPattern );\n\t\t\t\tif ( next ) {\n\t\t\t\t\t// convert \\(newline-like) into a \\u escape, which is allowed in JSON\n\t\t\t\t\tliteral += '\\\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );\n\t\t\t\t} else {\n\t\t\t\t\tdone = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tliteral += '\""';\n\n\t\t// use JSON.parse to interpret escapes\n\t\treturn JSON.parse( literal );\n\t};\n};\n\nvar getSingleQuotedString = makeQuotedStringMatcher( \""\\\""\"" );\nvar getDoubleQuotedString = makeQuotedStringMatcher( \""'\"" );\n\nvar readStringLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\n\tif ( parser.matchString( '\""' ) ) {\n\t\tvar string = getDoubleQuotedString( parser );\n\n\t\tif ( !parser.matchString( '\""' ) ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: STRING_LITERAL,\n\t\t\tv: string\n\t\t};\n\t}\n\n\tif ( parser.matchString( \""'\"" ) ) {\n\t\tvar string$1 = getSingleQuotedString( parser );\n\n\t\tif ( !parser.matchString( \""'\"" ) ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: STRING_LITERAL,\n\t\t\tv: string$1\n\t\t};\n\t}\n\n\treturn null;\n};\n\nvar name = /^[a-zA-Z_$][a-zA-Z_$0-9]*/;\nvar spreadPattern = /^\\s*\\.{3}/;\nvar legalReference = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:\\.(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nvar relaxedName = /^[a-zA-Z_$][-\\/a-zA-Z_$0-9]*(?:\\.(?:[a-zA-Z_$][-\\/a-zA-Z_$0-9]*))*/;\n\nvar identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n// http://mathiasbynens.be/notes/javascript-properties\n// can be any name, string literal, or number literal\nfunction readKey ( parser ) {\n\tvar token;\n\n\tif ( token = readStringLiteral( parser ) ) {\n\t\treturn identifier.test( token.v ) ? token.v : '\""' + token.v.replace( /\""/g, '\\\\\""' ) + '\""';\n\t}\n\n\tif ( token = readNumberLiteral$1( parser ) ) {\n\t\treturn token.v;\n\t}\n\n\tif ( token = parser.matchPattern( name ) ) {\n\t\treturn token;\n\t}\n\n\treturn null;\n}\n\nfunction readKeyValuePair ( parser ) {\n\tvar spread;\n\tvar start = parser.pos;\n\n\t// allow whitespace between '{' and key\n\tparser.allowWhitespace();\n\n\tvar refKey = parser.nextChar() !== '\\'' && parser.nextChar() !== '\""';\n\tif ( refKey ) { spread = parser.matchPattern( spreadPattern ); }\n\n\tvar key = spread ? readExpression( parser ) : readKey( parser );\n\tif ( key === null ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace between key and ':'\n\tparser.allowWhitespace();\n\n\t// es2015 shorthand property\n\tif ( refKey && ( parser.nextChar() === ',' || parser.nextChar() === '}' ) ) {\n\t\tif ( !spread && !name.test( key ) ) {\n\t\t\tparser.error( (\""Expected a valid reference, but found '\"" + key + \""' instead.\"") );\n\t\t}\n\n\t\tvar pair = {\n\t\t\tt: KEY_VALUE_PAIR,\n\t\t\tk: key,\n\t\t\tv: {\n\t\t\t\tt: REFERENCE,\n\t\t\t\tn: key\n\t\t\t}\n\t\t};\n\n\t\tif ( spread ) {\n\t\t\tpair.p = true;\n\t\t}\n\n\t\treturn pair;\n\t}\n\n\n\t// next character must be ':'\n\tif ( !parser.matchString( ':' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\t// allow whitespace between ':' and value\n\tparser.allowWhitespace();\n\n\t// next expression must be a, well... expression\n\tvar value = readExpression( parser );\n\tif ( value === null ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: KEY_VALUE_PAIR,\n\t\tk: key,\n\t\tv: value\n\t};\n}\n\nfunction readKeyValuePairs ( parser ) {\n\tvar start = parser.pos;\n\n\tvar pair = readKeyValuePair( parser );\n\tif ( pair === null ) {\n\t\treturn null;\n\t}\n\n\tvar pairs = [ pair ];\n\n\tif ( parser.matchString( ',' ) ) {\n\t\tvar keyValuePairs = readKeyValuePairs( parser );\n\n\t\tif ( !keyValuePairs ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn pairs.concat( keyValuePairs );\n\t}\n\n\treturn pairs;\n}\n\nvar readObjectLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\n\t// allow whitespace\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '{' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar keyValuePairs = readKeyValuePairs( parser );\n\n\t// allow whitespace between final value and '}'\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '}' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: OBJECT_LITERAL,\n\t\tm: keyValuePairs\n\t};\n};\n\nvar readArrayLiteral = function ( parser ) {\n\tvar start = parser.pos;\n\n\t// allow whitespace before '['\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '[' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar expressionList = readExpressionList( parser, true );\n\n\tif ( !parser.matchString( ']' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tt: ARRAY_LITERAL,\n\t\tm: expressionList\n\t};\n};\n\nfunction readLiteral ( parser ) {\n\treturn readNumberLiteral$1( parser )  ||\n\t       readBooleanLiteral( parser ) ||\n\t       readStringLiteral( parser )  ||\n\t       readObjectLiteral( parser )  ||\n\t       readArrayLiteral( parser )   ||\n\t       readNumberLiteral( parser );\n}\n\n// if a reference is a browser global, we don't deference it later, so it needs special treatment\nvar globals = /^(?:Array|console|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null|Object|Number|String|Boolean)\\b/;\n\n// keywords are not valid references, with the exception of `this`\nvar keywords = /^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/;\n\nvar prefixPattern = /^(?:\\@\\.|\\@|~\\/|(?:\\^\\^\\/(?:\\^\\^\\/)*(?:\\.\\.\\/)*)|(?:\\.\\.\\/)+|\\.\\/(?:\\.\\.\\/)*|\\.)/;\nvar specials = /^(key|index|keypath|rootpath|this|global|shared)/;\nvar specialCall = /^\\s*\\(/;\n\nfunction readReference ( parser ) {\n\tvar prefix, name$$1, global, reference, lastDotIndex;\n\n\tvar startPos = parser.pos;\n\n\tprefix = parser.matchPattern( prefixPattern ) || '';\n\tname$$1 = ( !prefix && parser.relaxedNames && parser.matchPattern( relaxedName ) ) ||\n\t\t\tparser.matchPattern( legalReference );\n\tvar actual = prefix.length + ( ( name$$1 && name$$1.length ) || 0 );\n\n\tif ( prefix === '@.' ) {\n\t\tprefix = '@';\n\t\tif ( name$$1 ) { name$$1 = 'this.' + name$$1; }\n\t\telse { name$$1 = 'this'; }\n\t}\n\n\tif ( !name$$1 && prefix ) {\n\t\tname$$1 = prefix;\n\t\tprefix = '';\n\t}\n\n\tif ( !name$$1 ) {\n\t\treturn null;\n\t}\n\n\tif ( prefix === '@' ) {\n\t\tif ( name$$1 === 'keypath' || name$$1 === 'rootpath' ) {\n\t\t\tif ( parser.matchPattern( specialCall ) ) {\n\t\t\t\tvar ref = readReference( parser );\n\t\t\t\tif ( !ref ) { parser.error( \""Expected a valid reference for a keypath expression\"" ); }\n\n\t\t\t\tparser.allowWhitespace();\n\n\t\t\t\tif ( !parser.matchString( ')' ) ) { parser.error( \""Unclosed keypath expression\"" ); }\n\t\t\t\tname$$1 += \""(\"" + (ref.n) + \"")\"";\n\t\t\t}\n\t\t} else if ( !specials.test( name$$1 ) ) {\n\t\t\tparser.error( (\""Unrecognized special reference @\"" + name$$1) );\n\t\t}\n\t}\n\n\t// bug out if it's a keyword (exception for ancestor/restricted refs - see https://github.com/ractivejs/ractive/issues/1497)\n\tif ( !prefix && !parser.relaxedNames && keywords.test( name$$1 ) ) {\n\t\tparser.pos = startPos;\n\t\treturn null;\n\t}\n\n\t// if this is a browser global, stop here\n\tif ( !prefix && globals.test( name$$1 ) ) {\n\t\tglobal = globals.exec( name$$1 )[0];\n\t\tparser.pos = startPos + global.length;\n\n\t\treturn {\n\t\t\tt: GLOBAL,\n\t\t\tv: global\n\t\t};\n\t}\n\n\treference = ( prefix || '' ) + normalise( name$$1 );\n\n\tif ( parser.matchString( '(' ) ) {\n\t\t// if this is a method invocation (as opposed to a function) we need\n\t\t// to strip the method name from the reference combo, else the context\n\t\t// will be wrong\n\t\t// but only if the reference was actually a member and not a refinement\n\t\tlastDotIndex = reference.lastIndexOf( '.' );\n\t\tif ( lastDotIndex !== -1 && name$$1[ name$$1.length - 1 ] !== ']' ) {\n\t\t\tvar refLength = reference.length;\n\t\t\treference = reference.substr( 0, lastDotIndex );\n\t\t\tparser.pos = startPos + ( actual - ( refLength - lastDotIndex ) );\n\t\t} else {\n\t\t\tparser.pos -= 1;\n\t\t}\n\t}\n\n\treturn {\n\t\tt: REFERENCE,\n\t\tn: reference.replace( /^this\\./, './' ).replace( /^this$/, '.' )\n\t};\n}\n\nfunction readBracketedExpression ( parser ) {\n\tif ( !parser.matchString( '(' ) ) { return null; }\n\n\tparser.allowWhitespace();\n\n\tvar expr = readExpression( parser );\n\n\tif ( !expr ) { parser.error( expectedExpression ); }\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( ')' ) ) { parser.error( expectedParen ); }\n\n\treturn {\n\t\tt: BRACKETED,\n\t\tx: expr\n\t};\n}\n\nvar readPrimary = function ( parser ) {\n\treturn readLiteral( parser )\n\t\t|| readReference( parser )\n\t\t|| readBracketedExpression( parser );\n};\n\nfunction readRefinement ( parser ) {\n\t// some things call for strict refinement (partial names), meaning no space between reference and refinement\n\tif ( !parser.strictRefinement ) {\n\t\tparser.allowWhitespace();\n\t}\n\n\t// \"".\"" name\n\tif ( parser.matchString( '.' ) ) {\n\t\tparser.allowWhitespace();\n\n\t\tvar name$$1 = parser.matchPattern( name );\n\t\tif ( name$$1 ) {\n\t\t\treturn {\n\t\t\t\tt: REFINEMENT,\n\t\t\t\tn: name$$1\n\t\t\t};\n\t\t}\n\n\t\tparser.error( 'Expected a property name' );\n\t}\n\n\t// \""[\"" expression \""]\""\n\tif ( parser.matchString( '[' ) ) {\n\t\tparser.allowWhitespace();\n\n\t\tvar expr = readExpression( parser );\n\t\tif ( !expr ) { parser.error( expectedExpression ); }\n\n\t\tparser.allowWhitespace();\n\n\t\tif ( !parser.matchString( ']' ) ) { parser.error( \""Expected ']'\"" ); }\n\n\t\treturn {\n\t\t\tt: REFINEMENT,\n\t\t\tx: expr\n\t\t};\n\t}\n\n\treturn null;\n}\n\nvar readMemberOrInvocation = function ( parser ) {\n\tvar expression = readPrimary( parser );\n\n\tif ( !expression ) { return null; }\n\n\twhile ( expression ) {\n\t\tvar refinement = readRefinement( parser );\n\t\tif ( refinement ) {\n\t\t\texpression = {\n\t\t\t\tt: MEMBER,\n\t\t\t\tx: expression,\n\t\t\t\tr: refinement\n\t\t\t};\n\t\t}\n\n\t\telse if ( parser.matchString( '(' ) ) {\n\t\t\tparser.allowWhitespace();\n\t\t\tvar expressionList = readExpressionList( parser, true );\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( !parser.matchString( ')' ) ) {\n\t\t\t\tparser.error( expectedParen );\n\t\t\t}\n\n\t\t\texpression = {\n\t\t\t\tt: INVOCATION,\n\t\t\t\tx: expression\n\t\t\t};\n\n\t\t\tif ( expressionList ) { expression.o = expressionList; }\n\t\t}\n\n\t\telse {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn expression;\n};\n\nvar readTypeOf;\n\nvar makePrefixSequenceMatcher = function ( symbol, fallthrough ) {\n\treturn function ( parser ) {\n\t\tvar expression;\n\n\t\tif ( expression = fallthrough( parser ) ) {\n\t\t\treturn expression;\n\t\t}\n\n\t\tif ( !parser.matchString( symbol ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tparser.allowWhitespace();\n\n\t\texpression = readExpression( parser );\n\t\tif ( !expression ) {\n\t\t\tparser.error( expectedExpression );\n\t\t}\n\n\t\treturn {\n\t\t\ts: symbol,\n\t\t\to: expression,\n\t\t\tt: PREFIX_OPERATOR\n\t\t};\n\t};\n};\n\n// create all prefix sequence matchers, return readTypeOf\n(function() {\n\tvar i, len, matcher, fallthrough;\n\n\tvar prefixOperators = '! ~ + - typeof'.split( ' ' );\n\n\tfallthrough = readMemberOrInvocation;\n\tfor ( i = 0, len = prefixOperators.length; i < len; i += 1 ) {\n\t\tmatcher = makePrefixSequenceMatcher( prefixOperators[i], fallthrough );\n\t\tfallthrough = matcher;\n\t}\n\n\t// typeof operator is higher precedence than multiplication, so provides the\n\t// fallthrough for the multiplication sequence matcher we're about to create\n\t// (we're skipping void and delete)\n\treadTypeOf = fallthrough;\n}());\n\nvar readTypeof = readTypeOf;\n\nvar readLogicalOr;\n\nvar makeInfixSequenceMatcher = function ( symbol, fallthrough ) {\n\treturn function ( parser ) {\n\t\tvar start, left, right;\n\n\t\tleft = fallthrough( parser );\n\t\tif ( !left ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Loop to handle left-recursion in a case like `a * b * c` and produce\n\t\t// left association, i.e. `(a * b) * c`.  The matcher can't call itself\n\t\t// to parse `left` because that would be infinite regress.\n\t\twhile ( true ) {\n\t\t\tstart = parser.pos;\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( !parser.matchString( symbol ) ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\t// special case - in operator must not be followed by [a-zA-Z_$0-9]\n\t\t\tif ( symbol === 'in' && /[a-zA-Z_$0-9]/.test( parser.remaining().charAt( 0 ) ) ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\t// right operand must also consist of only higher-precedence operators\n\t\t\tright = fallthrough( parser );\n\t\t\tif ( !right ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn left;\n\t\t\t}\n\n\t\t\tleft = {\n\t\t\t\tt: INFIX_OPERATOR,\n\t\t\t\ts: symbol,\n\t\t\t\to: [ left, right ]\n\t\t\t};\n\n\t\t\t// Loop back around.  If we don't see another occurrence of the symbol,\n\t\t\t// we'll return left.\n\t\t}\n\t};\n};\n\n// create all infix sequence matchers, and return readLogicalOr\n(function() {\n\tvar i, len, matcher, fallthrough;\n\n\t// All the infix operators on order of precedence (source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)\n\t// Each sequence matcher will initially fall through to its higher precedence\n\t// neighbour, and only attempt to match if one of the higher precedence operators\n\t// (or, ultimately, a literal, reference, or bracketed expression) already matched\n\tvar infixOperators = '* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||'.split( ' ' );\n\n\t// A typeof operator is higher precedence than multiplication\n\tfallthrough = readTypeof;\n\tfor ( i = 0, len = infixOperators.length; i < len; i += 1 ) {\n\t\tmatcher = makeInfixSequenceMatcher( infixOperators[i], fallthrough );\n\t\tfallthrough = matcher;\n\t}\n\n\t// Logical OR is the fallthrough for the conditional matcher\n\treadLogicalOr = fallthrough;\n}());\n\nvar readLogicalOr$1 = readLogicalOr;\n\n// The conditional operator is the lowest precedence operator, so we start here\nfunction getConditional ( parser ) {\n\tvar expression = readLogicalOr$1( parser );\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '?' ) ) {\n\t\tparser.pos = start;\n\t\treturn expression;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar ifTrue = readExpression( parser );\n\tif ( !ifTrue ) {\n\t\tparser.error( expectedExpression );\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( ':' ) ) {\n\t\tparser.error( 'Expected \"":\""' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar ifFalse = readExpression( parser );\n\tif ( !ifFalse ) {\n\t\tparser.error( expectedExpression );\n\t}\n\n\treturn {\n\t\tt: CONDITIONAL,\n\t\to: [ expression, ifTrue, ifFalse ]\n\t};\n}\n\nfunction readExpression ( parser ) {\n\t// The conditional operator is the lowest precedence operator (except yield,\n\t// assignment operators, and commas, none of which are supported), so we\n\t// start there. If it doesn't match, it 'falls through' to progressively\n\t// higher precedence operators, until it eventually matches (or fails to\n\t// match) a 'primary' - a literal or a reference. This way, the abstract syntax\n\t// tree has everything in its proper place, i.e. 2 + 3 * 4 === 14, not 20.\n\treturn getConditional( parser );\n}\n\nfunction readExpressionList ( parser, spread ) {\n\tvar isSpread;\n\tvar expressions = [];\n\n\tvar pos = parser.pos;\n\n\tdo {\n\t\tparser.allowWhitespace();\n\n\t\tif ( spread ) {\n\t\t\tisSpread = parser.matchPattern( spreadPattern );\n\t\t}\n\n\t\tvar expr = readExpression( parser );\n\n\t\tif ( expr === null && expressions.length ) {\n\t\t\tparser.error( expectedExpression );\n\t\t} else if ( expr === null ) {\n\t\t\tparser.pos = pos;\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( isSpread ) {\n\t\t\texpr.p = true;\n\t\t}\n\n\t\texpressions.push( expr );\n\n\t\tparser.allowWhitespace();\n\t} while ( parser.matchString( ',' ) );\n\n\treturn expressions;\n}\n\nfunction flattenExpression ( expression ) {\n\tvar refs;\n\tvar count = 0;\n\n\textractRefs( expression, refs = [] );\n\tvar stringified = stringify( expression );\n\n\treturn {\n\t\tr: refs,\n\t\ts: getVars(stringified)\n\t};\n\n\tfunction getVars(expr) {\n\t\tvar vars = [];\n\t\tfor ( var i = count - 1; i >= 0; i-- ) {\n\t\t\tvars.push( (\""x$\"" + i) );\n\t\t}\n\t\treturn vars.length ? (\""(function(){var \"" + (vars.join(',')) + \"";return(\"" + expr + \"");})()\"") : expr;\n\t}\n\n\tfunction stringify ( node ) {\n\t\tif ( typeof node === 'string' ) {\n\t\t\treturn node;\n\t\t}\n\n\t\tswitch ( node.t ) {\n\t\t\tcase BOOLEAN_LITERAL:\n\t\t\tcase GLOBAL:\n\t\t\tcase NUMBER_LITERAL:\n\t\t\tcase REGEXP_LITERAL:\n\t\t\t\treturn node.v;\n\n\t\t\tcase STRING_LITERAL:\n\t\t\t\treturn JSON.stringify( String( node.v ) );\n\n\t\t\tcase ARRAY_LITERAL:\n\t\t\t\tif ( node.m && hasSpread( node.m )) {\n\t\t\t\t\treturn (\""[].concat(\"" + (makeSpread( node.m, '[', ']', stringify )) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn '[' + ( node.m ? node.m.map( stringify ).join( ',' ) : '' ) + ']';\n\t\t\t\t}\n\n\t\t\tcase OBJECT_LITERAL:\n\t\t\t\tif ( node.m && hasSpread( node.m ) ) {\n\t\t\t\t\treturn (\""Object.assign({},\"" + (makeSpread( node.m, '{', '}', stringifyPair)) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn '{' + ( node.m ? node.m.map( function (n) { return ((n.k) + \"":\"" + (stringify( n.v ))); } ).join( ',' ) : '' ) + '}';\n\t\t\t\t}\n\n\t\t\tcase PREFIX_OPERATOR:\n\t\t\t\treturn ( node.s === 'typeof' ? 'typeof ' : node.s ) + stringify( node.o );\n\n\t\t\tcase INFIX_OPERATOR:\n\t\t\t\treturn stringify( node.o[0] ) + ( node.s.substr( 0, 2 ) === 'in' ? ' ' + node.s + ' ' : node.s ) + stringify( node.o[1] );\n\n\t\t\tcase INVOCATION:\n\t\t\t\tif ( node.o && hasSpread( node.o ) ) {\n\t\t\t\t\tvar id = count++;\n\t\t\t\t\treturn (\""(x$\"" + id + \""=\"" + (stringify(node.x)) + \"").apply(x$\"" + id + \"",\"" + (stringify({ t: ARRAY_LITERAL, m: node.o })) + \"")\"");\n\t\t\t\t} else {\n\t\t\t\t\treturn stringify( node.x ) + '(' + ( node.o ? node.o.map( stringify ).join( ',' ) : '' ) + ')';\n\t\t\t\t}\n\n\t\t\tcase BRACKETED:\n\t\t\t\treturn '(' + stringify( node.x ) + ')';\n\n\t\t\tcase MEMBER:\n\t\t\t\treturn stringify( node.x ) + stringify( node.r );\n\n\t\t\tcase REFINEMENT:\n\t\t\t\treturn ( node.n ? '.' + node.n : '[' + stringify( node.x ) + ']' );\n\n\t\t\tcase CONDITIONAL:\n\t\t\t\treturn stringify( node.o[0] ) + '?' + stringify( node.o[1] ) + ':' + stringify( node.o[2] );\n\n\t\t\tcase REFERENCE:\n\t\t\t\treturn '_' + refs.indexOf( node.n );\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'Expected legal JavaScript' );\n\t\t}\n\t}\n\n\tfunction stringifyPair ( node ) { return node.p ? stringify( node.k ) : ((node.k) + \"":\"" + (stringify( node.v ))); }\n\n\tfunction makeSpread ( list, open, close, fn ) {\n\t\tvar out = list.reduce( function ( a, c ) {\n\t\t\tif ( c.p ) {\n\t\t\t\ta.str += \""\"" + (a.open ? close + ',' : a.str.length ? ',' : '') + (fn( c ));\n\t\t\t} else {\n\t\t\t\ta.str += \""\"" + (!a.str.length ? open : !a.open ? ',' + open : ',') + (fn( c ));\n\t\t\t}\n\t\t\ta.open = !c.p;\n\t\t\treturn a;\n\t\t}, { open: false, str: '' } );\n\t\tif ( out.open ) { out.str += close; }\n\t\treturn out.str;\n\t}\n}\n\nfunction hasSpread ( list ) {\n\tfor ( var i = 0; i < list.length; i++ ) {\n\t\tif ( list[i].p ) { return true; }\n\t}\n\n\treturn false;\n}\n\n// TODO maybe refactor this?\nfunction extractRefs ( node, refs ) {\n\tif ( node.t === REFERENCE && typeof node.n === 'string' ) {\n\t\tif ( !~refs.indexOf( node.n ) ) {\n\t\t\trefs.unshift( node.n );\n\t\t}\n\t}\n\n\tvar list = node.o || node.m;\n\tif ( list ) {\n\t\tif ( isObject( list ) ) {\n\t\t\textractRefs( list, refs );\n\t\t} else {\n\t\t\tvar i = list.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\textractRefs( list[i], refs );\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( node.k && node.t === KEY_VALUE_PAIR && typeof node.k !== 'string' ) {\n\t\textractRefs( node.k, refs );\n\t}\n\n\tif ( node.x ) {\n\t\textractRefs( node.x, refs );\n\t}\n\n\tif ( node.r ) {\n\t\textractRefs( node.r, refs );\n\t}\n\n\tif ( node.v ) {\n\t\textractRefs( node.v, refs );\n\t}\n}\n\nvar attributeNamePattern = /^[^\\s\""'>\\/=]+/;\nvar onPattern = /^on/;\nvar eventPattern = /^on-([a-zA-Z\\*\\.$_]((?:[a-zA-Z\\*\\.$_0-9\\-]|\\\\-)+))$/;\nvar reservedEventNames = /^(?:change|reset|teardown|update|construct|config|init|render|complete|unrender|detach|insert|destruct|attachchild|detachchild)$/;\nvar decoratorPattern = /^as-([a-z-A-Z][-a-zA-Z_0-9]*)$/;\nvar transitionPattern = /^([a-zA-Z](?:(?!-in-out)[-a-zA-Z_0-9])*)-(in|out|in-out)$/;\nvar directives = {\n\tlazy: { t: BINDING_FLAG, v: 'l' },\n\ttwoway: { t: BINDING_FLAG, v: 't' }\n};\nvar unquotedAttributeValueTextPattern = /^[^\\s\""'=<>\\/`]+/;\nvar proxyEvent = /^[^\\s\""'=<>@\\[\\]()]*/;\nvar whitespace = /^\\s+/;\n\nvar slashes = /\\\\/g;\nfunction splitEvent ( str ) {\n\tvar result = [];\n\tvar s = 0;\n\n\tfor ( var i = 0; i < str.length; i++ ) {\n\t\tif ( str[i] === '-' && str[ i - 1 ] !== '\\\\' ) {\n\t\t\tresult.push( str.substring( s, i ).replace( slashes, '' ) );\n\t\t\ts = i + 1;\n\t\t}\n\t}\n\n\tresult.push( str.substring( s ).replace( slashes, '' ) );\n\n\treturn result;\n}\n\nfunction readAttribute ( parser ) {\n\tvar name, i, nearest, idx;\n\n\tparser.allowWhitespace();\n\n\tname = parser.matchPattern( attributeNamePattern );\n\tif ( !name ) {\n\t\treturn null;\n\t}\n\n\t// check for accidental delimiter consumption e.g. <tag bool{{>attrs}} />\n\tnearest = name.length;\n\tfor ( i = 0; i < parser.tags.length; i++ ) {\n\t\tif ( ~( idx = name.indexOf( parser.tags[ i ].open ) ) ) {\n\t\t\tif ( idx < nearest ) { nearest = idx; }\n\t\t}\n\t}\n\tif ( nearest < name.length ) {\n\t\tparser.pos -= name.length - nearest;\n\t\tname = name.substr( 0, nearest );\n\t\tif ( !name ) { return null; }\n\t}\n\n\treturn { n: name };\n}\n\nfunction readAttributeValue ( parser ) {\n\tvar start = parser.pos;\n\n\t// next character must be `=`, `/`, `>` or whitespace\n\tif ( !/[=\\/>\\s]/.test( parser.nextChar() ) ) {\n\t\tparser.error( 'Expected `=`, `/`, `>` or whitespace' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '=' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar valueStart = parser.pos;\n\tvar startDepth = parser.sectionDepth;\n\n\tvar value = readQuotedAttributeValue( parser, \""'\"" ) ||\n\t\t\treadQuotedAttributeValue( parser, \""\\\""\"" ) ||\n\t\t\treadUnquotedAttributeValue( parser );\n\n\tif ( value === null ) {\n\t\tparser.error( 'Expected valid attribute value' );\n\t}\n\n\tif ( parser.sectionDepth !== startDepth ) {\n\t\tparser.pos = valueStart;\n\t\tparser.error( 'An attribute value must contain as many opening section tags as closing section tags' );\n\t}\n\n\tif ( !value.length ) {\n\t\treturn '';\n\t}\n\n\tif ( value.length === 1 && typeof value[0] === 'string' ) {\n\t\treturn decodeCharacterReferences( value[0] );\n\t}\n\n\treturn value;\n}\n\nfunction readUnquotedAttributeValueToken ( parser ) {\n\tvar text, index;\n\n\tvar start = parser.pos;\n\n\ttext = parser.matchPattern( unquotedAttributeValueTextPattern );\n\n\tif ( !text ) {\n\t\treturn null;\n\t}\n\n\tvar haystack = text;\n\tvar needles = parser.tags.map( function (t) { return t.open; } ); // TODO refactor... we do this in readText.js as well\n\n\tif ( ( index = getLowestIndex( haystack, needles ) ) !== -1 ) {\n\t\ttext = text.substr( 0, index );\n\t\tparser.pos = start + text.length;\n\t}\n\n\treturn text;\n}\n\nfunction readUnquotedAttributeValue ( parser ) {\n\tparser.inAttribute = true;\n\n\tvar tokens = [];\n\n\tvar token = readMustache( parser ) || readUnquotedAttributeValueToken( parser );\n\twhile ( token ) {\n\t\ttokens.push( token );\n\t\ttoken = readMustache( parser ) || readUnquotedAttributeValueToken( parser );\n\t}\n\n\tif ( !tokens.length ) {\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = false;\n\treturn tokens;\n}\n\nfunction readQuotedAttributeValue ( parser, quoteMark ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( quoteMark ) ) {\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = quoteMark;\n\n\tvar tokens = [];\n\n\tvar token = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );\n\twhile ( token !== null ) {\n\t\ttokens.push( token );\n\t\ttoken = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );\n\t}\n\n\tif ( !parser.matchString( quoteMark ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.inAttribute = false;\n\n\treturn tokens;\n}\n\nfunction readQuotedStringToken ( parser, quoteMark ) {\n\tvar haystack = parser.remaining();\n\n\tvar needles = parser.tags.map( function (t) { return t.open; } ); // TODO refactor... we do this in readText.js as well\n\tneedles.push( quoteMark );\n\n\tvar index = getLowestIndex( haystack, needles );\n\n\tif ( index === -1 ) {\n\t\tparser.error( 'Quoted attribute value must have a closing quote' );\n\t}\n\n\tif ( !index ) {\n\t\treturn null;\n\t}\n\n\tparser.pos += index;\n\treturn haystack.substr( 0, index );\n}\n\nfunction readAttributeOrDirective ( parser ) {\n\tvar match, directive;\n\n\tvar attribute = readAttribute( parser, false );\n\n\tif ( !attribute ) { return null; }\n\n\t\t// lazy, twoway\n\tif ( directive = directives[ attribute.n ] ) {\n\t\tattribute.t = directive.t;\n\t\tif ( directive.v ) { attribute.v = directive.v; }\n\t\tdelete attribute.n; // no name necessary\n\t\tparser.allowWhitespace();\n\t\tif ( parser.nextChar() === '=' ) { attribute.f = readAttributeValue( parser ); }\n\t}\n\n\t\t// decorators\n\telse if ( match = decoratorPattern.exec( attribute.n ) ) {\n\t\tattribute.n = match[1];\n\t\tattribute.t = DECORATOR;\n\t\treadArguments( parser, attribute );\n\t}\n\n\t\t// transitions\n\telse if ( match = transitionPattern.exec( attribute.n ) ) {\n\t\tattribute.n = match[1];\n\t\tattribute.t = TRANSITION;\n\t\treadArguments( parser, attribute );\n\t\tattribute.v = match[2] === 'in-out' ? 't0' : match[2] === 'in' ? 't1' : 't2';\n\t}\n\n\t\t// on-click etc\n\telse if ( match = eventPattern.exec( attribute.n ) ) {\n\n\t\tattribute.n = splitEvent( match[1] );\n\t\tattribute.t = EVENT;\n\n\t\t\t// check for a proxy event\n\t\tif ( !readProxyEvent( parser, attribute ) ) {\n\t\t\t\t// otherwise, it's an expression\n\t\t\treadArguments( parser, attribute, true );\n\t\t} else if ( reservedEventNames.test( attribute.f ) ) {\n\t\t\tparser.pos -= attribute.f.length;\n\t\t\tparser.error( 'Cannot use reserved event names (change, reset, teardown, update, construct, config, init, render, unrender, complete, detach, insert, destruct, attachchild, detachchild)' );\n\t\t}\n\t}\n\n\telse {\n\t\tparser.allowWhitespace();\n\t\tvar value = parser.nextChar() === '=' ? readAttributeValue( parser ) : null;\n\t\tattribute.f = value != null ? value : attribute.f;\n\n\t\tif ( parser.sanitizeEventAttributes && onPattern.test( attribute.n ) ) {\n\t\t\treturn { exclude: true };\n\t\t} else {\n\t\t\tattribute.f = attribute.f || ( attribute.f === '' ? '' : 0 );\n\t\t\tattribute.t = ATTRIBUTE;\n\t\t}\n\t}\n\n\treturn attribute;\n}\n\nfunction readProxyEvent ( parser, attribute ) {\n\tvar start = parser.pos;\n\tif ( !parser.matchString( '=' ) ) { parser.error( \""Missing required directive arguments\"" ); }\n\n\tvar quote = parser.matchString( \""'\"" ) || parser.matchString( \""\\\""\"" );\n\tparser.allowWhitespace();\n\tvar proxy = parser.matchPattern( proxyEvent );\n\n\tif ( proxy !== undefined ) {\n\t\tif ( quote ) {\n\t\t\tparser.allowWhitespace();\n\t\t\tif ( !parser.matchString( quote ) ) { parser.pos = start; }\n\t\t\telse { return ( attribute.f = proxy ) || true; }\n\t\t} else if ( !parser.matchPattern( whitespace ) ) {\n\t\t\tparser.pos = start;\n\t\t} else {\n\t\t\treturn ( attribute.f = proxy ) || true;\n\t\t}\n\t} else {\n\t\tparser.pos = start;\n\t}\n}\n\nfunction readArguments ( parser, attribute, required ) {\n\tif ( required === void 0 ) required = false;\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( '=' ) ) {\n\t\tif ( required ) { parser.error( \""Missing required directive arguments\"" ); }\n\t\treturn;\n\t}\n\tparser.allowWhitespace();\n\n\tvar quote = parser.matchString( '\""' ) || parser.matchString( \""'\"" );\n\tvar spread = parser.spreadArgs;\n\tparser.spreadArgs = true;\n\tvar exprs = readExpressionList( parser );\n\tparser.spreadArgs = spread;\n\n\tif ( quote ) {\n\t\tparser.allowWhitespace();\n\t\tif ( parser.matchString( quote ) !== quote ) { parser.error( (\""Expected matching quote '\"" + quote + \""'\"") ); }\n\t}\n\n\tattribute.f = flattenExpression({ m: exprs, t: 22 });\n}\n\nvar delimiterChangeToken = { t: DELIMCHANGE, exclude: true };\n\nfunction readMustache ( parser ) {\n\tvar mustache, i;\n\n\t// If we're inside a <script> or <style> tag, and we're not\n\t// interpolating, bug out\n\tif ( parser.interpolate[ parser.inside ] === false ) {\n\t\treturn null;\n\t}\n\n\tfor ( i = 0; i < parser.tags.length; i += 1 ) {\n\t\tif ( mustache = readMustacheOfType( parser, parser.tags[i] ) ) {\n\t\t\treturn mustache;\n\t\t}\n\t}\n\n\tif ( parser.inTag && !parser.inAttribute ) {\n\t\tmustache = readAttributeOrDirective( parser );\n\t\tif ( mustache ) {\n\t\t\tparser.allowWhitespace();\n\t\t\treturn mustache;\n\t\t}\n\t}\n}\n\nfunction readMustacheOfType ( parser, tag ) {\n\tvar mustache, reader, i;\n\n\tvar start = parser.pos;\n\n\tif ( parser.matchString( '\\\\' + tag.open ) ) {\n\t\tif ( start === 0 || parser.str[ start - 1 ] !== '\\\\' ) {\n\t\t\treturn tag.open;\n\t\t}\n\t} else if ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\t// delimiter change?\n\tif ( mustache = readDelimiterChange( parser ) ) {\n\t\t// find closing delimiter or abort...\n\t\tif ( !parser.matchString( tag.close ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// ...then make the switch\n\t\ttag.open = mustache[0];\n\t\ttag.close = mustache[1];\n\t\tparser.sortMustacheTags();\n\n\t\treturn delimiterChangeToken;\n\t}\n\n\tparser.allowWhitespace();\n\n\t// illegal section closer\n\tif ( parser.matchString( '/' ) ) {\n\t\tparser.pos -= 1;\n\t\tvar rewind = parser.pos;\n\t\tif ( !readNumberLiteral( parser ) ) {\n\t\t\tparser.pos = rewind - ( tag.close.length );\n\t\t\tif ( parser.inAttribute ) {\n\t\t\t\tparser.pos = start;\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tparser.error( 'Attempted to close a section that wasn\\'t open' );\n\t\t\t}\n\t\t} else {\n\t\t\tparser.pos = rewind;\n\t\t}\n\t}\n\n\tfor ( i = 0; i < tag.readers.length; i += 1 ) {\n\t\treader = tag.readers[i];\n\n\t\tif ( mustache = reader( parser, tag ) ) {\n\t\t\tif ( tag.isStatic ) {\n\t\t\t\tmustache.s = true; // TODO make this `1` instead - more compact\n\t\t\t}\n\n\t\t\tif ( parser.includeLinePositions ) {\n\t\t\t\tmustache.p = parser.getLinePos( start );\n\t\t\t}\n\n\t\t\treturn mustache;\n\t\t}\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nfunction refineExpression ( expression, mustache ) {\n\tvar referenceExpression;\n\n\tif ( expression ) {\n\t\twhile ( expression.t === BRACKETED && expression.x ) {\n\t\t\texpression = expression.x;\n\t\t}\n\n\t\tif ( expression.t === REFERENCE ) {\n\t\t\tmustache.r = expression.n;\n\t\t} else {\n\t\t\tif ( referenceExpression = getReferenceExpression( expression ) ) {\n\t\t\t\tmustache.rx = referenceExpression;\n\t\t\t} else {\n\t\t\t\tmustache.x = flattenExpression( expression );\n\t\t\t}\n\t\t}\n\n\t\treturn mustache;\n\t}\n}\n\n// TODO refactor this! it's bewildering\nfunction getReferenceExpression ( expression ) {\n\tvar members = [];\n\tvar refinement;\n\n\twhile ( expression.t === MEMBER && expression.r.t === REFINEMENT ) {\n\t\trefinement = expression.r;\n\n\t\tif ( refinement.x ) {\n\t\t\tif ( refinement.x.t === REFERENCE ) {\n\t\t\t\tmembers.unshift( refinement.x );\n\t\t\t} else {\n\t\t\t\tmembers.unshift( flattenExpression( refinement.x ) );\n\t\t\t}\n\t\t} else {\n\t\t\tmembers.unshift( refinement.n );\n\t\t}\n\n\t\texpression = expression.x;\n\t}\n\n\tif ( expression.t !== REFERENCE ) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tr: expression.n,\n\t\tm: members\n\t};\n}\n\nfunction readTriple ( parser, tag ) {\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tvar triple = { t: TRIPLE };\n\trefineExpression( expression, triple ); // TODO handle this differently - it's mysterious\n\n\treturn triple;\n}\n\nfunction readUnescaped ( parser, tag ) {\n\tif ( !parser.matchString( '&' ) ) {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tvar triple = { t: TRIPLE };\n\trefineExpression( expression, triple ); // TODO handle this differently - it's mysterious\n\n\treturn triple;\n}\n\nvar legalAlias = /^(?:[a-zA-Z$_0-9]|\\\\\\.)+(?:(?:(?:[a-zA-Z$_0-9]|\\\\\\.)+)|(?:\\[[0-9]+\\]))*/;\nvar asRE = /^as/i;\n\nfunction readAliases( parser ) {\n\tvar aliases = [];\n\tvar alias;\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\talias = readAlias( parser );\n\n\tif ( alias ) {\n\t\talias.x = refineExpression( alias.x, {} );\n\t\taliases.push( alias );\n\n\t\tparser.allowWhitespace();\n\n\t\twhile ( parser.matchString(',') ) {\n\t\t\talias = readAlias( parser );\n\n\t\t\tif ( !alias ) {\n\t\t\t\tparser.error( 'Expected another alias.' );\n\t\t\t}\n\n\t\t\talias.x = refineExpression( alias.x, {} );\n\t\t\taliases.push( alias );\n\n\t\t\tparser.allowWhitespace();\n\t\t}\n\n\t\treturn aliases;\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nfunction readAlias( parser ) {\n\tvar start = parser.pos;\n\n\tparser.allowWhitespace();\n\n\tvar expr = readExpression( parser, [] );\n\n\tif ( !expr ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchPattern( asRE ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar alias = parser.matchPattern( legalAlias );\n\n\tif ( !alias ) {\n\t\tparser.error( 'Expected a legal alias name.' );\n\t}\n\n\treturn { n: alias, x: expr };\n}\n\nfunction readPartial ( parser, tag ) {\n\tvar type = parser.matchString( '>' ) || parser.matchString( 'yield' );\n\tvar partial = { t: type === '>' ? PARTIAL : YIELDER };\n\tvar aliases;\n\n\tif ( !type ) { return null; }\n\n\tparser.allowWhitespace();\n\n\tif ( type === '>' || !( aliases = parser.matchString( 'with' ) ) ) {\n\t\t// Partial names can include hyphens, so we can't use readExpression\n\t\t// blindly. Instead, we use the `relaxedNames` flag to indicate that\n\t\t// `foo-bar` should be read as a single name, rather than 'subtract\n\t\t// bar from foo'\n\t\tparser.relaxedNames = parser.strictRefinement = true;\n\t\tvar expression = readExpression( parser );\n\t\tparser.relaxedNames = parser.strictRefinement = false;\n\n\t\tif ( !expression && type === '>' ) { return null; }\n\n\t\tif ( expression ) {\n\t\t\trefineExpression( expression, partial ); // TODO...\n\t\t\tparser.allowWhitespace();\n\t\t\tif ( type !== '>' ) { aliases = parser.matchString( 'with' ); }\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\t// check for alias context e.g. `{{>foo bar as bat, bip as bop}}`\n\tif ( aliases || type === '>' ) {\n\t\taliases = readAliases( parser );\n\t\tif ( aliases && aliases.length ) {\n\t\t\tpartial.z = aliases;\n\t\t}\n\n\t\t// otherwise check for literal context e.g. `{{>foo bar}}` then\n\t\t// turn it into `{{#with bar}}{{>foo}}{{/with}}`\n\t\telse if ( type === '>' ) {\n\t\t\tvar context = readExpression( parser );\n\t\t\tif ( context) {\n\t\t\t\tpartial.c = {};\n\t\t\t\trefineExpression( context, partial.c );\n\t\t\t}\n\t\t}\n\n\t\telse {\n\t\t\t// {{yield with}} requires some aliases\n\t\t\tparser.error( \""Expected one or more aliases\"" );\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn partial;\n}\n\nfunction readComment ( parser, tag ) {\n\tif ( !parser.matchString( '!' ) ) {\n\t\treturn null;\n\t}\n\n\tvar index = parser.remaining().indexOf( tag.close );\n\n\tif ( index !== -1 ) {\n\t\tparser.pos += index + tag.close.length;\n\t\treturn { t: COMMENT };\n\t}\n}\n\nfunction readExpressionOrReference ( parser, expectedFollowers ) {\n\tvar start = parser.pos;\n\tvar expression = readExpression( parser );\n\n\tif ( !expression ) {\n\t\t// valid reference but invalid expression e.g. `{{new}}`?\n\t\tvar ref = parser.matchPattern( /^(\\w+)/ );\n\t\tif ( ref ) {\n\t\t\treturn {\n\t\t\t\tt: REFERENCE,\n\t\t\t\tn: ref\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfor ( var i = 0; i < expectedFollowers.length; i += 1 ) {\n\t\tif ( parser.remaining().substr( 0, expectedFollowers[i].length ) === expectedFollowers[i] ) {\n\t\t\treturn expression;\n\t\t}\n\t}\n\n\tparser.pos = start;\n\treturn readReference( parser );\n}\n\nfunction readInterpolator ( parser, tag ) {\n\tvar expression, err;\n\n\tvar start = parser.pos;\n\n\t// TODO would be good for perf if we could do away with the try-catch\n\ttry {\n\t\texpression = readExpressionOrReference( parser, [ tag.close ] );\n\t} catch ( e ) {\n\t\terr = e;\n\t}\n\n\tif ( !expression ) {\n\t\tif ( parser.str.charAt( start ) === '!' ) {\n\t\t\t// special case - comment\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( err ) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""' after reference\"") );\n\n\t\tif ( !expression ) {\n\t\t\t// special case - comment\n\t\t\tif ( parser.nextChar() === '!' ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tparser.error( \""Expected expression or legal reference\"" );\n\t\t}\n\t}\n\n\tvar interpolator = { t: INTERPOLATOR };\n\trefineExpression( expression, interpolator ); // TODO handle this differently - it's mysterious\n\n\treturn interpolator;\n}\n\nfunction readClosing ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '/' ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tvar remaining = parser.remaining();\n\tvar index = remaining.indexOf( tag.close );\n\n\tif ( index !== -1 ) {\n\t\tvar closing = {\n\t\t\tt: CLOSING,\n\t\t\tr: remaining.substr( 0, index ).split( ' ' )[0]\n\t\t};\n\n\t\tparser.pos += index;\n\n\t\tif ( !parser.matchString( tag.close ) ) {\n\t\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t\t}\n\n\t\treturn closing;\n\t}\n\n\tparser.pos = start;\n\treturn null;\n}\n\nvar elsePattern = /^\\s*else\\s*/;\n\nfunction readElse ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( elsePattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn {\n\t\tt: ELSE\n\t};\n}\n\nvar elsePattern$1 = /^\\s*elseif\\s+/;\n\nfunction readElseIf ( parser, tag ) {\n\tvar start = parser.pos;\n\n\tif ( !parser.matchString( tag.open ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( elsePattern$1 ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar expression = readExpression( parser );\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\treturn {\n\t\tt: ELSEIF,\n\t\tx: expression\n\t};\n}\n\nvar handlebarsBlockCodes = {\n\teach:    SECTION_EACH,\n\t'if':      SECTION_IF,\n\t'with':    SECTION_IF_WITH,\n\tunless:  SECTION_UNLESS\n};\n\nvar indexRefPattern = /^\\s*:\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nvar keyIndexRefPattern = /^\\s*,\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;\nvar handlebarsBlockPattern = new RegExp( '^(' + Object.keys( handlebarsBlockCodes ).join( '|' ) + ')\\\\b' );\n\nfunction readSection ( parser, tag ) {\n\tvar expression, section, child, children, hasElse, block, unlessBlock, closed, i, expectedClose;\n\tvar aliasOnly = false;\n\n\tvar start = parser.pos;\n\n\tif ( parser.matchString( '^' ) ) {\n\t\t// watch out for parent context refs - {{^^/^^/foo}}\n\t\tif ( parser.matchString( '^/' ) ){\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\t\tsection = { t: SECTION, f: [], n: SECTION_UNLESS };\n\t} else if ( parser.matchString( '#' ) ) {\n\t\tsection = { t: SECTION, f: [] };\n\n\t\tif ( parser.matchString( 'partial' ) ) {\n\t\t\tparser.pos = start - parser.standardDelimiters[0].length;\n\t\t\tparser.error( 'Partial definitions can only be at the top level of the template, or immediately inside components' );\n\t\t}\n\n\t\tif ( block = parser.matchPattern( handlebarsBlockPattern ) ) {\n\t\t\texpectedClose = block;\n\t\t\tsection.n = handlebarsBlockCodes[ block ];\n\t\t}\n\t} else {\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( block === 'with' ) {\n\t\tvar aliases = readAliases( parser );\n\t\tif ( aliases ) {\n\t\t\taliasOnly = true;\n\t\t\tsection.z = aliases;\n\t\t\tsection.t = ALIAS;\n\t\t}\n\t} else if ( block === 'each' ) {\n\t\tvar alias = readAlias( parser );\n\t\tif ( alias ) {\n\t\t\tsection.z = [ { n: alias.n, x: { r: '.' } } ];\n\t\t\texpression = alias.x;\n\t\t}\n\t}\n\n\tif ( !aliasOnly ) {\n\t\tif ( !expression ) { expression = readExpression( parser ); }\n\n\t\tif ( !expression ) {\n\t\t\tparser.error( 'Expected expression' );\n\t\t}\n\n\t\t// optional index and key references\n\t\tif ( i = parser.matchPattern( indexRefPattern ) ) {\n\t\t\tvar extra;\n\n\t\t\tif ( extra = parser.matchPattern( keyIndexRefPattern ) ) {\n\t\t\t\tsection.i = i + ',' + extra;\n\t\t\t} else {\n\t\t\t\tsection.i = i;\n\t\t\t}\n\t\t}\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( tag.close ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (tag.close) + \""'\"") );\n\t}\n\n\tparser.sectionDepth += 1;\n\tchildren = section.f;\n\n\tvar pos;\n\tdo {\n\t\tpos = parser.pos;\n\t\tif ( child = readClosing( parser, tag ) ) {\n\t\t\tif ( expectedClose && child.r !== expectedClose ) {\n\t\t\t\tparser.pos = pos;\n\t\t\t\tparser.error( (\""Expected \"" + (tag.open) + \""/\"" + expectedClose + (tag.close)) );\n\t\t\t}\n\n\t\t\tparser.sectionDepth -= 1;\n\t\t\tclosed = true;\n\t\t}\n\n\t\telse if ( !aliasOnly && ( child = readElseIf( parser, tag ) ) ) {\n\t\t\tif ( section.n === SECTION_UNLESS ) {\n\t\t\t\tparser.error( '{{else}} not allowed in {{#unless}}' );\n\t\t\t}\n\n\t\t\tif ( hasElse ) {\n\t\t\t\tparser.error( 'illegal {{elseif...}} after {{else}}' );\n\t\t\t}\n\n\t\t\tif ( !unlessBlock ) {\n\t\t\t\tunlessBlock = [];\n\t\t\t}\n\n\t\t\tvar mustache = {\n\t\t\t\tt: SECTION,\n\t\t\t\tn: SECTION_IF,\n\t\t\t\tf: children = []\n\t\t\t};\n\t\t\trefineExpression( child.x, mustache );\n\n\t\t\tunlessBlock.push( mustache );\n\t\t}\n\n\t\telse if ( !aliasOnly && ( child = readElse( parser, tag ) ) ) {\n\t\t\tif ( section.n === SECTION_UNLESS ) {\n\t\t\t\tparser.error( '{{else}} not allowed in {{#unless}}' );\n\t\t\t}\n\n\t\t\tif ( hasElse ) {\n\t\t\t\tparser.error( 'there can only be one {{else}} block, at the end of a section' );\n\t\t\t}\n\n\t\t\thasElse = true;\n\n\t\t\t// use an unless block if there's no elseif\n\t\t\tif ( !unlessBlock ) {\n\t\t\t\tunlessBlock = [];\n\t\t\t}\n\n\t\t\tunlessBlock.push({\n\t\t\t\tt: SECTION,\n\t\t\t\tn: SECTION_UNLESS,\n\t\t\t\tf: children = []\n\t\t\t});\n\t\t}\n\n\t\telse {\n\t\t\tchild = parser.read( READERS );\n\n\t\t\tif ( !child ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchildren.push( child );\n\t\t}\n\t} while ( !closed );\n\n\tif ( unlessBlock ) {\n\t\tsection.l = unlessBlock;\n\t}\n\n\tif ( !aliasOnly ) {\n\t\trefineExpression( expression, section );\n\t}\n\n\t// TODO if a section is empty it should be discarded. Don't do\n\t// that here though - we need to clean everything up first, as\n\t// it may contain removeable whitespace. As a temporary measure,\n\t// to pass the existing tests, remove empty `f` arrays\n\tif ( !section.f.length ) {\n\t\tdelete section.f;\n\t}\n\n\treturn section;\n}\n\nvar OPEN_COMMENT = '<!--';\nvar CLOSE_COMMENT = '-->';\n\nfunction readHtmlComment ( parser ) {\n\tvar start = parser.pos;\n\n\tif ( parser.textOnlyMode || !parser.matchString( OPEN_COMMENT ) ) {\n\t\treturn null;\n\t}\n\n\tvar remaining = parser.remaining();\n\tvar endIndex = remaining.indexOf( CLOSE_COMMENT );\n\n\tif ( endIndex === -1 ) {\n\t\tparser.error( 'Illegal HTML - expected closing comment sequence (\\'-->\\')' );\n\t}\n\n\tvar content = remaining.substr( 0, endIndex );\n\tparser.pos += endIndex + 3;\n\n\tvar comment = {\n\t\tt: COMMENT,\n\t\tc: content\n\t};\n\n\tif ( parser.includeLinePositions ) {\n\t\tcomment.p = parser.getLinePos( start );\n\t}\n\n\treturn comment;\n}\n\nvar leadingLinebreak = /^[ \\t\\f\\r\\n]*\\r?\\n/;\nvar trailingLinebreak = /\\r?\\n[ \\t\\f\\r\\n]*$/;\n\nvar stripStandalones = function ( items ) {\n\tvar i, current, backOne, backTwo, lastSectionItem;\n\n\tfor ( i=1; i<items.length; i+=1 ) {\n\t\tcurrent = items[i];\n\t\tbackOne = items[i-1];\n\t\tbackTwo = items[i-2];\n\n\t\t// if we're at the end of a [text][comment][text] sequence...\n\t\tif ( isString( current ) && isComment( backOne ) && isString( backTwo ) ) {\n\n\t\t\t// ... and the comment is a standalone (i.e. line breaks either side)...\n\t\t\tif ( trailingLinebreak.test( backTwo ) && leadingLinebreak.test( current ) ) {\n\n\t\t\t\t// ... then we want to remove the whitespace after the first line break\n\t\t\t\titems[i-2] = backTwo.replace( trailingLinebreak, '\\n' );\n\n\t\t\t\t// and the leading line break of the second text token\n\t\t\t\titems[i] = current.replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\n\t\t// if the current item is a section, and it is preceded by a linebreak, and\n\t\t// its first item is a linebreak...\n\t\tif ( isSection( current ) && isString( backOne ) ) {\n\t\t\tif ( trailingLinebreak.test( backOne ) && isString( current.f[0] ) && leadingLinebreak.test( current.f[0] ) ) {\n\t\t\t\titems[i-1] = backOne.replace( trailingLinebreak, '\\n' );\n\t\t\t\tcurrent.f[0] = current.f[0].replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\n\t\t// if the last item was a section, and it is followed by a linebreak, and\n\t\t// its last item is a linebreak...\n\t\tif ( isString( current ) && isSection( backOne ) ) {\n\t\t\tlastSectionItem = lastItem( backOne.f );\n\n\t\t\tif ( isString( lastSectionItem ) && trailingLinebreak.test( lastSectionItem ) && leadingLinebreak.test( current ) ) {\n\t\t\t\tbackOne.f[ backOne.f.length - 1 ] = lastSectionItem.replace( trailingLinebreak, '\\n' );\n\t\t\t\titems[i] = current.replace( leadingLinebreak, '' );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn items;\n};\n\nfunction isString ( item ) {\n\treturn typeof item === 'string';\n}\n\nfunction isComment ( item ) {\n\treturn item.t === COMMENT || item.t === DELIMCHANGE;\n}\n\nfunction isSection ( item ) {\n\treturn ( item.t === SECTION || item.t === INVERTED ) && item.f;\n}\n\nvar trimWhitespace = function ( items, leadingPattern, trailingPattern ) {\n\tvar item;\n\n\tif ( leadingPattern ) {\n\t\titem = items[0];\n\t\tif ( typeof item === 'string' ) {\n\t\t\titem = item.replace( leadingPattern, '' );\n\n\t\t\tif ( !item ) {\n\t\t\t\titems.shift();\n\t\t\t} else {\n\t\t\t\titems[0] = item;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( trailingPattern ) {\n\t\titem = lastItem( items );\n\t\tif ( typeof item === 'string' ) {\n\t\t\titem = item.replace( trailingPattern, '' );\n\n\t\t\tif ( !item ) {\n\t\t\t\titems.pop();\n\t\t\t} else {\n\t\t\t\titems[ items.length - 1 ] = item;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar contiguousWhitespace = /[ \\t\\f\\r\\n]+/g;\nvar preserveWhitespaceElements = /^(?:pre|script|style|textarea)$/i;\nvar leadingWhitespace$1 = /^[ \\t\\f\\r\\n]+/;\nvar trailingWhitespace = /[ \\t\\f\\r\\n]+$/;\nvar leadingNewLine = /^(?:\\r\\n|\\r|\\n)/;\nvar trailingNewLine = /(?:\\r\\n|\\r|\\n)$/;\n\nfunction cleanup ( items, stripComments, preserveWhitespace, removeLeadingWhitespace, removeTrailingWhitespace ) {\n\tif ( typeof items === 'string' ) { return; }\n\n\tvar i,\n\t\titem,\n\t\tpreviousItem,\n\t\tnextItem,\n\t\tpreserveWhitespaceInsideFragment,\n\t\tremoveLeadingWhitespaceInsideFragment,\n\t\tremoveTrailingWhitespaceInsideFragment;\n\n\t// First pass - remove standalones and comments etc\n\tstripStandalones( items );\n\n\ti = items.length;\n\twhile ( i-- ) {\n\t\titem = items[i];\n\n\t\t// Remove delimiter changes, unsafe elements etc\n\t\tif ( item.exclude ) {\n\t\t\titems.splice( i, 1 );\n\t\t}\n\n\t\t// Remove comments, unless we want to keep them\n\t\telse if ( stripComments && item.t === COMMENT ) {\n\t\t\titems.splice( i, 1 );\n\t\t}\n\t}\n\n\t// If necessary, remove leading and trailing whitespace\n\ttrimWhitespace( items, removeLeadingWhitespace ? leadingWhitespace$1 : null, removeTrailingWhitespace ? trailingWhitespace : null );\n\n\ti = items.length;\n\twhile ( i-- ) {\n\t\titem = items[i];\n\n\t\t// Recurse\n\t\tif ( item.f ) {\n\t\t\tvar isPreserveWhitespaceElement = item.t === ELEMENT && preserveWhitespaceElements.test( item.e );\n\t\t\tpreserveWhitespaceInsideFragment = preserveWhitespace || isPreserveWhitespaceElement;\n\n\t\t\tif ( !preserveWhitespace && isPreserveWhitespaceElement ) {\n\t\t\t\ttrimWhitespace( item.f, leadingNewLine, trailingNewLine );\n\t\t\t}\n\n\t\t\tif ( !preserveWhitespaceInsideFragment ) {\n\t\t\t\tpreviousItem = items[ i - 1 ];\n\t\t\t\tnextItem = items[ i + 1 ];\n\n\t\t\t\t// if the previous item was a text item with trailing whitespace,\n\t\t\t\t// remove leading whitespace inside the fragment\n\t\t\t\tif ( !previousItem || ( typeof previousItem === 'string' && trailingWhitespace.test( previousItem ) ) ) {\n\t\t\t\t\tremoveLeadingWhitespaceInsideFragment = true;\n\t\t\t\t}\n\n\t\t\t\t// and vice versa\n\t\t\t\tif ( !nextItem || ( typeof nextItem === 'string' && leadingWhitespace$1.test( nextItem ) ) ) {\n\t\t\t\t\tremoveTrailingWhitespaceInsideFragment = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcleanup( item.f, stripComments, preserveWhitespaceInsideFragment, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\t\t}\n\n\t\t// Split if-else blocks into two (an if, and an unless)\n\t\tif ( item.l ) {\n\t\t\tcleanup( item.l, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\n\t\t\titem.l.forEach( function (s) { return s.l = 1; } );\n\t\t\titem.l.unshift( i + 1, 0 );\n\t\t\titems.splice.apply( items, item.l );\n\t\t\tdelete item.l; // TODO would be nice if there was a way around this\n\t\t}\n\n\t\t// Clean up conditional attributes\n\t\tif ( item.m ) {\n\t\t\tcleanup( item.m, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );\n\t\t\tif ( item.m.length < 1 ) { delete item.m; }\n\t\t}\n\t}\n\n\t// final pass - fuse text nodes together\n\ti = items.length;\n\twhile ( i-- ) {\n\t\tif ( typeof items[i] === 'string' ) {\n\t\t\tif ( typeof items[i+1] === 'string' ) {\n\t\t\t\titems[i] = items[i] + items[i+1];\n\t\t\t\titems.splice( i + 1, 1 );\n\t\t\t}\n\n\t\t\tif ( !preserveWhitespace ) {\n\t\t\t\titems[i] = items[i].replace( contiguousWhitespace, ' ' );\n\t\t\t}\n\n\t\t\tif ( items[i] === '' ) {\n\t\t\t\titems.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar closingTagPattern = /^([a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*)\\s*\\>/;\n\nfunction readClosingTag ( parser ) {\n\tvar tag;\n\n\tvar start = parser.pos;\n\n\t// are we looking at a closing tag?\n\tif ( !parser.matchString( '</' ) ) {\n\t\treturn null;\n\t}\n\n\tif ( tag = parser.matchPattern( closingTagPattern ) ) {\n\t\tif ( parser.inside && tag !== parser.inside ) {\n\t\t\tparser.pos = start;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tt: CLOSING_TAG,\n\t\t\te: tag\n\t\t};\n\t}\n\n\t// We have an illegal closing tag, report it\n\tparser.pos -= 2;\n\tparser.error( 'Illegal closing tag' );\n}\n\nvar tagNamePattern = /^[a-zA-Z]{1,}:?[a-zA-Z0-9\\-]*/;\nvar validTagNameFollower = /^[\\s\\n\\/>]/;\nvar exclude = { exclude: true };\n\n// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission\nvar disallowedContents = {\n\tli: [ 'li' ],\n\tdt: [ 'dt', 'dd' ],\n\tdd: [ 'dt', 'dd' ],\n\tp: 'address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul'.split( ' ' ),\n\trt: [ 'rt', 'rp' ],\n\trp: [ 'rt', 'rp' ],\n\toptgroup: [ 'optgroup' ],\n\toption: [ 'option', 'optgroup' ],\n\tthead: [ 'tbody', 'tfoot' ],\n\ttbody: [ 'tbody', 'tfoot' ],\n\ttfoot: [ 'tbody' ],\n\ttr: [ 'tr', 'tbody' ],\n\ttd: [ 'td', 'th', 'tr' ],\n\tth: [ 'td', 'th', 'tr' ]\n};\n\nfunction readElement$1 ( parser ) {\n\tvar attribute, selfClosing, children, partials, hasPartials, child, closed, pos, remaining, closingTag, anchor;\n\n\tvar start = parser.pos;\n\n\tif ( parser.inside || parser.inAttribute || parser.textOnlyMode ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchString( '<' ) ) {\n\t\treturn null;\n\t}\n\n\t// if this is a closing tag, abort straight away\n\tif ( parser.nextChar() === '/' ) {\n\t\treturn null;\n\t}\n\n\tvar element = {};\n\tif ( parser.includeLinePositions ) {\n\t\telement.p = parser.getLinePos( start );\n\t}\n\n\t// check for doctype decl\n\tif ( parser.matchString( '!' ) ) {\n\t\telement.t = DOCTYPE;\n\t\tif ( !parser.matchPattern( /^doctype/i ) ) {\n\t\t\tparser.error( 'Expected DOCTYPE declaration' );\n\t\t}\n\n\t\telement.a = parser.matchPattern( /^(.+?)>/ );\n\t\treturn element;\n\t}\n\t// check for anchor\n\telse if ( anchor = parser.matchString( '#' ) ) {\n\t\tparser.allowWhitespace();\n\t\telement.t = ANCHOR;\n\t\telement.n = parser.matchPattern( relaxedName );\n\t}\n\t// otherwise, it's an element/component\n\telse {\n\t\telement.t = ELEMENT;\n\n\t\t// element name\n\t\telement.e = parser.matchPattern( tagNamePattern );\n\t\tif ( !element.e ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// next character must be whitespace, closing solidus or '>'\n\tif ( !validTagNameFollower.test( parser.nextChar() ) ) {\n\t\tparser.error( 'Illegal tag name' );\n\t}\n\n\tparser.allowWhitespace();\n\n\tparser.inTag = true;\n\n\t// directives and attributes\n\twhile ( attribute = readMustache( parser ) ) {\n\t\tif ( attribute !== false ) {\n\t\t\tif ( !element.m ) { element.m = []; }\n\t\t\telement.m.push( attribute );\n\t\t}\n\n\t\tparser.allowWhitespace();\n\t}\n\n\tparser.inTag = false;\n\n\t// allow whitespace before closing solidus\n\tparser.allowWhitespace();\n\n\t// self-closing solidus?\n\tif ( parser.matchString( '/' ) ) {\n\t\tselfClosing = true;\n\t}\n\n\t// closing angle bracket\n\tif ( !parser.matchString( '>' ) ) {\n\t\treturn null;\n\t}\n\n\tvar lowerCaseName = ( element.e || element.n ).toLowerCase();\n\tvar preserveWhitespace = parser.preserveWhitespace;\n\n\tif ( !selfClosing && ( anchor || !voidElementNames.test( element.e ) ) ) {\n\t\tif ( !anchor ) {\n\t\t\tparser.elementStack.push( lowerCaseName );\n\n\t\t\t// Special case - if we open a script element, further tags should\n\t\t\t// be ignored unless they're a closing script element\n\t\t\tif ( lowerCaseName in parser.interpolate ) {\n\t\t\t\tparser.inside = lowerCaseName;\n\t\t\t}\n\t\t}\n\n\t\tchildren = [];\n\t\tpartials = Object.create( null );\n\n\t\tdo {\n\t\t\tpos = parser.pos;\n\t\t\tremaining = parser.remaining();\n\n\t\t\tif ( !remaining ) {\n\t\t\t\tparser.error( (\""Missing end \"" + (parser.elementStack.length > 1 ? 'tags' : 'tag') + \"" (\"" + (parser.elementStack.reverse().map( function (x) { return (\""</\"" + x + \"">\""); } ).join( '' )) + \"")\"") );\n\t\t\t}\n\n\t\t\t// if for example we're in an <li> element, and we see another\n\t\t\t// <li> tag, close the first so they become siblings\n\t\t\tif ( !anchor && !canContain( lowerCaseName, remaining ) ) {\n\t\t\t\tclosed = true;\n\t\t\t}\n\n\t\t\t// closing tag\n\t\t\telse if ( !anchor && ( closingTag = readClosingTag( parser ) ) ) {\n\t\t\t\tclosed = true;\n\n\t\t\t\tvar closingTagName = closingTag.e.toLowerCase();\n\n\t\t\t\t// if this *isn't* the closing tag for the current element...\n\t\t\t\tif ( closingTagName !== lowerCaseName ) {\n\t\t\t\t\t// rewind parser\n\t\t\t\t\tparser.pos = pos;\n\n\t\t\t\t\t// if it doesn't close a parent tag, error\n\t\t\t\t\tif ( !~parser.elementStack.indexOf( closingTagName ) ) {\n\t\t\t\t\t\tvar errorMessage = 'Unexpected closing tag';\n\n\t\t\t\t\t\t// add additional help for void elements, since component names\n\t\t\t\t\t\t// might clash with them\n\t\t\t\t\t\tif ( voidElementNames.test( closingTagName ) ) {\n\t\t\t\t\t\t\terrorMessage += \"" (<\"" + closingTagName + \""> is a void element - it cannot contain children)\"";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparser.error( errorMessage );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if ( anchor && readAnchorClose( parser, element.n ) ) {\n\t\t\t\tclosed = true;\n\t\t\t}\n\n\t\t\t// implicit close by closing section tag. TODO clean this up\n\t\t\telse if ( child = readClosing( parser, { open: parser.standardDelimiters[0], close: parser.standardDelimiters[1] } ) ) {\n\t\t\t\tclosed = true;\n\t\t\t\tparser.pos = pos;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tif ( child = parser.read( PARTIAL_READERS ) ) {\n\t\t\t\t\tif ( partials[ child.n ] ) {\n\t\t\t\t\t\tparser.pos = pos;\n\t\t\t\t\t\tparser.error( 'Duplicate partial definition' );\n\t\t\t\t\t}\n\n\t\t\t\t\tcleanup( child.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );\n\n\t\t\t\t\tpartials[ child.n ] = child.f;\n\t\t\t\t\thasPartials = true;\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tif ( child = parser.read( READERS ) ) {\n\t\t\t\t\t\tchildren.push( child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} while ( !closed );\n\n\t\tif ( children.length ) {\n\t\t\telement.f = children;\n\t\t}\n\n\t\tif ( hasPartials ) {\n\t\t\telement.p = partials;\n\t\t}\n\n\t\tparser.elementStack.pop();\n\t}\n\n\tparser.inside = null;\n\n\tif ( parser.sanitizeElements && parser.sanitizeElements.indexOf( lowerCaseName ) !== -1 ) {\n\t\treturn exclude;\n\t}\n\n\treturn element;\n}\n\nfunction canContain ( name$$1, remaining ) {\n\tvar match = /^<([a-zA-Z][a-zA-Z0-9]*)/.exec( remaining );\n\tvar disallowed = disallowedContents[ name$$1 ];\n\n\tif ( !match || !disallowed ) {\n\t\treturn true;\n\t}\n\n\treturn !~disallowed.indexOf( match[1].toLowerCase() );\n}\n\nfunction readAnchorClose ( parser, name$$1 ) {\n\tvar pos = parser.pos;\n\tif ( !parser.matchString( '</' ) ) {\n\t\treturn null;\n\t}\n\n\tparser.matchString( '#' );\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( name$$1 ) ) {\n\t\tparser.pos = pos;\n\t\treturn null;\n\t}\n\n\tparser.allowWhitespace();\n\n\tif ( !parser.matchString( '>' ) ) {\n\t\tparser.pos = pos;\n\t\treturn null;\n\t}\n\n\treturn true;\n}\n\nfunction readText ( parser ) {\n\tvar index, disallowed, barrier;\n\n\tvar remaining = parser.remaining();\n\n\tif ( parser.textOnlyMode ) {\n\t\tdisallowed = parser.tags.map( function (t) { return t.open; } );\n\t\tdisallowed = disallowed.concat( parser.tags.map( function (t) { return '\\\\' + t.open; } ) );\n\n\t\tindex = getLowestIndex( remaining, disallowed );\n\t} else {\n\t\tbarrier = parser.inside ? '</' + parser.inside : '<';\n\n\t\tif ( parser.inside && !parser.interpolate[ parser.inside ] ) {\n\t\t\tindex = remaining.indexOf( barrier );\n\t\t} else {\n\t\t\tdisallowed = parser.tags.map( function (t) { return t.open; } );\n\t\t\tdisallowed = disallowed.concat( parser.tags.map( function (t) { return '\\\\' + t.open; } ) );\n\n\t\t\t// http://developers.whatwg.org/syntax.html#syntax-attributes\n\t\t\tif ( parser.inAttribute === true ) {\n\t\t\t\t// we're inside an unquoted attribute value\n\t\t\t\tdisallowed.push( \""\\\""\"", \""'\"", \""=\"", \""<\"", \"">\"", '`' );\n\t\t\t} else if ( parser.inAttribute ) {\n\t\t\t\t// quoted attribute value\n\t\t\t\tdisallowed.push( parser.inAttribute );\n\t\t\t} else {\n\t\t\t\tdisallowed.push( barrier );\n\t\t\t}\n\n\t\t\tindex = getLowestIndex( remaining, disallowed );\n\t\t}\n\t}\n\n\tif ( !index ) {\n\t\treturn null;\n\t}\n\n\tif ( index === -1 ) {\n\t\tindex = remaining.length;\n\t}\n\n\tparser.pos += index;\n\n\tif ( ( parser.inside && parser.inside !== 'textarea' ) || parser.textOnlyMode ) {\n\t\treturn remaining.substr( 0, index );\n\t} else {\n\t\treturn decodeCharacterReferences( remaining.substr( 0, index ) );\n\t}\n}\n\nvar partialDefinitionSectionPattern = /^\\s*#\\s*partial\\s+/;\n\nfunction readPartialDefinitionSection ( parser ) {\n\tvar child, closed;\n\n\tvar start = parser.pos;\n\n\tvar delimiters = parser.standardDelimiters;\n\n\tif ( !parser.matchString( delimiters[0] ) ) {\n\t\treturn null;\n\t}\n\n\tif ( !parser.matchPattern( partialDefinitionSectionPattern ) ) {\n\t\tparser.pos = start;\n\t\treturn null;\n\t}\n\n\tvar name = parser.matchPattern( /^[a-zA-Z_$][a-zA-Z_$0-9\\-\\/]*/ );\n\n\tif ( !name ) {\n\t\tparser.error( 'expected legal partial name' );\n\t}\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( delimiters[1] ) ) {\n\t\tparser.error( (\""Expected closing delimiter '\"" + (delimiters[1]) + \""'\"") );\n\t}\n\n\tvar content = [];\n\n\tvar open = delimiters[0];\n\tvar close = delimiters[1];\n\n\tdo {\n\t\tif ( child = readClosing( parser, { open: open, close: close }) ) {\n\t\t\tif ( child.r !== 'partial' ) {\n\t\t\t\tparser.error( (\""Expected \"" + open + \""/partial\"" + close) );\n\t\t\t}\n\n\t\t\tclosed = true;\n\t\t}\n\n\t\telse {\n\t\t\tchild = parser.read( READERS );\n\n\t\t\tif ( !child ) {\n\t\t\t\tparser.error( (\""Expected \"" + open + \""/partial\"" + close) );\n\t\t\t}\n\n\t\t\tcontent.push( child );\n\t\t}\n\t} while ( !closed );\n\n\treturn {\n\t\tt: INLINE_PARTIAL,\n\t\tn: name,\n\t\tf: content\n\t};\n}\n\nfunction readTemplate ( parser ) {\n\tvar fragment = [];\n\tvar partials = Object.create( null );\n\tvar hasPartials = false;\n\n\tvar preserveWhitespace = parser.preserveWhitespace;\n\n\twhile ( parser.pos < parser.str.length ) {\n\t\tvar pos = parser.pos;\n\t\tvar item = (void 0), partial = (void 0);\n\n\t\tif ( partial = parser.read( PARTIAL_READERS ) ) {\n\t\t\tif ( partials[ partial.n ] ) {\n\t\t\t\tparser.pos = pos;\n\t\t\t\tparser.error( 'Duplicated partial definition' );\n\t\t\t}\n\n\t\t\tcleanup( partial.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );\n\n\t\t\tpartials[ partial.n ] = partial.f;\n\t\t\thasPartials = true;\n\t\t} else if ( item = parser.read( READERS ) ) {\n\t\t\tfragment.push( item );\n\t\t} else  {\n\t\t\tparser.error( 'Unexpected template content' );\n\t\t}\n\t}\n\n\tvar result = {\n\t\tv: TEMPLATE_VERSION,\n\t\tt: fragment\n\t};\n\n\tif ( hasPartials ) {\n\t\tresult.p = partials;\n\t}\n\n\treturn result;\n}\n\nfunction insertExpressions ( obj, expr ) {\n\n\tObject.keys( obj ).forEach( function (key) {\n\t\tif  ( isExpression( key, obj ) ) { return addTo( obj, expr ); }\n\n\t\tvar ref = obj[ key ];\n\t\tif ( hasChildren( ref ) ) { insertExpressions( ref, expr ); }\n\t});\n}\n\nfunction isExpression( key, obj ) {\n\treturn key === 's' && Array.isArray( obj.r );\n}\n\nfunction addTo( obj, expr ) {\n\tvar s = obj.s;\n\tvar r = obj.r;\n\tif ( !expr[ s ] ) { expr[ s ] = fromExpression( s, r.length ); }\n}\n\nfunction hasChildren( ref ) {\n\treturn Array.isArray( ref ) || isObject( ref );\n}\n\n// See https://github.com/ractivejs/template-spec for information\n// about the Ractive template specification\n\nvar STANDARD_READERS = [ readPartial, readUnescaped, readSection, readInterpolator, readComment ];\nvar TRIPLE_READERS = [ readTriple ];\nvar STATIC_READERS = [ readUnescaped, readSection, readInterpolator ]; // TODO does it make sense to have a static section?\n\nvar READERS = [ readMustache, readHtmlComment, readElement$1, readText ];\nvar PARTIAL_READERS = [ readPartialDefinitionSection ];\n\nvar defaultInterpolate = [ 'script', 'style', 'template' ];\n\nvar StandardParser = Parser.extend({\n\tinit: function init ( str, options ) {\n\t\tvar this$1 = this;\n\n\t\tvar tripleDelimiters = options.tripleDelimiters || [ '{{{', '}}}' ];\n\t\tvar staticDelimiters = options.staticDelimiters || [ '[[', ']]' ];\n\t\tvar staticTripleDelimiters = options.staticTripleDelimiters || [ '[[[', ']]]' ];\n\n\t\tthis.standardDelimiters = options.delimiters || [ '{{', '}}' ];\n\n\t\tthis.tags = [\n\t\t\t{ isStatic: false, isTriple: false, open: this.standardDelimiters[0], close: this.standardDelimiters[1], readers: STANDARD_READERS },\n\t\t\t{ isStatic: false, isTriple: true,  open: tripleDelimiters[0],        close: tripleDelimiters[1],        readers: TRIPLE_READERS },\n\t\t\t{ isStatic: true,  isTriple: false, open: staticDelimiters[0],        close: staticDelimiters[1],        readers: STATIC_READERS },\n\t\t\t{ isStatic: true,  isTriple: true,  open: staticTripleDelimiters[0],  close: staticTripleDelimiters[1],  readers: TRIPLE_READERS }\n\t\t];\n\n\t\tthis.contextLines = options.contextLines || 0;\n\n\t\tthis.sortMustacheTags();\n\n\t\tthis.sectionDepth = 0;\n\t\tthis.elementStack = [];\n\n\t\tthis.interpolate = Object.create( options.interpolate || {} );\n\t\tthis.interpolate.textarea = true;\n\t\tdefaultInterpolate.forEach( function (t) { return this$1.interpolate[ t ] = !options.interpolate || options.interpolate[ t ] !== false; } );\n\n\t\tif ( options.sanitize === true ) {\n\t\t\toptions.sanitize = {\n\t\t\t\t// blacklist from https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/lang/html/html4-elements-whitelist.json\n\t\t\t\telements: 'applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title'.split( ' ' ),\n\t\t\t\teventAttributes: true\n\t\t\t};\n\t\t}\n\n\t\tthis.stripComments = options.stripComments !== false;\n\t\tthis.preserveWhitespace = options.preserveWhitespace;\n\t\tthis.sanitizeElements = options.sanitize && options.sanitize.elements;\n\t\tthis.sanitizeEventAttributes = options.sanitize && options.sanitize.eventAttributes;\n\t\tthis.includeLinePositions = options.includeLinePositions;\n\t\tthis.textOnlyMode = options.textOnlyMode;\n\t\tthis.csp = options.csp;\n\t},\n\n\tpostProcess: function postProcess ( result ) {\n\t\t// special case - empty string\n\t\tif ( !result.length ) {\n\t\t\treturn { t: [], v: TEMPLATE_VERSION };\n\t\t}\n\n\t\tif ( this.sectionDepth > 0 ) {\n\t\t\tthis.error( 'A section was left open' );\n\t\t}\n\n\t\tcleanup( result[0].t, this.stripComments, this.preserveWhitespace, !this.preserveWhitespace, !this.preserveWhitespace );\n\n\t\tif ( this.csp !== false ) {\n\t\t\tvar expr = {};\n\t\t\tinsertExpressions( result[0].t, expr );\n\t\t\tif ( Object.keys( expr ).length ) { result[0].e = expr; }\n\t\t}\n\n\t\treturn result[0];\n\t},\n\n\tconverters: [\n\t\treadTemplate\n\t],\n\n\tsortMustacheTags: function sortMustacheTags () {\n\t\t// Sort in order of descending opening delimiter length (longer first),\n\t\t// to protect against opening delimiters being substrings of each other\n\t\tthis.tags.sort( function ( a, b ) {\n\t\t\treturn b.open.length - a.open.length;\n\t\t});\n\t}\n});\n\nfunction parse$1$1 ( template, options ) {\n\treturn new StandardParser( template, options || {} ).result;\n}\n\nvar parseOptions = [\n\t'delimiters',\n\t'tripleDelimiters',\n\t'staticDelimiters',\n\t'staticTripleDelimiters',\n\t'csp',\n\t'interpolate',\n\t'preserveWhitespace',\n\t'sanitize',\n\t'stripComments',\n\t'contextLines'\n];\n\nvar TEMPLATE_INSTRUCTIONS = \""Either preparse or use a ractive runtime source that includes the parser. \"";\n\nvar COMPUTATION_INSTRUCTIONS = \""Either include a version of Ractive that can parse or convert your computation strings to functions.\"";\n\n\nfunction throwNoParse ( method, error, instructions ) {\n\tif ( !method ) {\n\t\tfatal( (\""Missing Ractive.parse - cannot parse \"" + error + \"". \"" + instructions) );\n\t}\n}\n\nfunction createFunction ( body, length ) {\n\tthrowNoParse( fromExpression, 'new expression function', TEMPLATE_INSTRUCTIONS );\n\treturn fromExpression( body, length );\n}\n\nfunction createFunctionFromString ( str, bindTo ) {\n\tthrowNoParse( fromComputationString, 'compution string \""${str}\""', COMPUTATION_INSTRUCTIONS );\n\treturn fromComputationString( str, bindTo );\n}\n\nvar parser = {\n\n\tfromId: function fromId ( id, options ) {\n\t\tif ( !doc ) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Cannot retrieve template #\"" + id + \"" as Ractive is not running in a browser.\"") );\n\t\t}\n\n\t\tif ( id ) { id = id.replace( /^#/, '' ); }\n\n\t\tvar template;\n\n\t\tif ( !( template = doc.getElementById( id ) )) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Could not find template element with id #\"" + id) );\n\t\t}\n\n\t\tif ( template.tagName.toUpperCase() !== 'SCRIPT' ) {\n\t\t\tif ( options && options.noThrow ) { return; }\n\t\t\tthrow new Error( (\""Template element with id #\"" + id + \"", must be a <script> element\"") );\n\t\t}\n\n\t\treturn ( 'textContent' in template ? template.textContent : template.innerHTML );\n\n\t},\n\n\tisParsed: function isParsed ( template) {\n\t\treturn !( typeof template === 'string' );\n\t},\n\n\tgetParseOptions: function getParseOptions ( ractive ) {\n\t\t// Could be Ractive or a Component\n\t\tif ( ractive.defaults ) { ractive = ractive.defaults; }\n\n\t\treturn parseOptions.reduce( function ( val, key ) {\n\t\t\tval[ key ] = ractive[ key ];\n\t\t\treturn val;\n\t\t}, {});\n\t},\n\n\tparse: function parse$1 ( template, options ) {\n\t\tthrowNoParse( parse$1$1, 'template', TEMPLATE_INSTRUCTIONS );\n\t\tvar parsed = parse$1$1( template, options );\n\t\taddFunctions( parsed );\n\t\treturn parsed;\n\t},\n\n\tparseFor: function parseFor( template, ractive ) {\n\t\treturn this.parse( template, this.getParseOptions( ractive ) );\n\t}\n};\n\nvar templateConfigurator = {\n\tname: 'template',\n\n\textend: function extend ( Parent, proto, options ) {\n\t\t// only assign if exists\n\t\tif ( 'template' in options ) {\n\t\t\tvar template = options.template;\n\n\t\t\tif ( typeof template === 'function' ) {\n\t\t\t\tproto.template = template;\n\t\t\t} else {\n\t\t\t\tproto.template = parseTemplate( template, proto );\n\t\t\t}\n\t\t}\n\t},\n\n\tinit: function init ( Parent, ractive, options ) {\n\t\t// TODO because of prototypal inheritance, we might just be able to use\n\t\t// ractive.template, and not bother passing through the Parent object.\n\t\t// At present that breaks the test mocks' expectations\n\t\tvar template = 'template' in options ? options.template : Parent.prototype.template;\n\t\ttemplate = template || { v: TEMPLATE_VERSION, t: [] };\n\n\t\tif ( typeof template === 'function' ) {\n\t\t\tvar fn = template;\n\t\t\ttemplate = getDynamicTemplate( ractive, fn );\n\n\t\t\tractive._config.template = {\n\t\t\t\tfn: fn,\n\t\t\t\tresult: template\n\t\t\t};\n\t\t}\n\n\t\ttemplate = parseTemplate( template, ractive );\n\n\t\t// TODO the naming of this is confusing - ractive.template refers to [...],\n\t\t// but Component.prototype.template refers to {v:1,t:[],p:[]}...\n\t\t// it's unnecessary, because the developer never needs to access\n\t\t// ractive.template\n\t\tractive.template = template.t;\n\n\t\tif ( template.p ) {\n\t\t\textendPartials( ractive.partials, template.p );\n\t\t}\n\t},\n\n\treset: function reset ( ractive ) {\n\t\tvar result = resetValue( ractive );\n\n\t\tif ( result ) {\n\t\t\tvar parsed = parseTemplate( result, ractive );\n\n\t\t\tractive.template = parsed.t;\n\t\t\textendPartials( ractive.partials, parsed.p, true );\n\n\t\t\treturn true;\n\t\t}\n\t}\n};\n\nfunction resetValue ( ractive ) {\n\tvar initial = ractive._config.template;\n\n\t// If this isn't a dynamic template, there's nothing to do\n\tif ( !initial || !initial.fn ) {\n\t\treturn;\n\t}\n\n\tvar result = getDynamicTemplate( ractive, initial.fn );\n\n\t// TODO deep equality check to prevent unnecessary re-rendering\n\t// in the case of already-parsed templates\n\tif ( result !== initial.result ) {\n\t\tinitial.result = result;\n\t\treturn result;\n\t}\n}\n\nfunction getDynamicTemplate ( ractive, fn ) {\n\treturn fn.call( ractive, {\n\t\tfromId: parser.fromId,\n\t\tisParsed: parser.isParsed,\n\t\tparse: function parse ( template, options ) {\n\t\t\tif ( options === void 0 ) options = parser.getParseOptions( ractive );\n\n\t\t\treturn parser.parse( template, options );\n\t\t}\n\t});\n}\n\nfunction parseTemplate ( template, ractive ) {\n\tif ( typeof template === 'string' ) {\n\t\t// parse will validate and add expression functions\n\t\ttemplate = parseAsString( template, ractive );\n\t}\n\telse {\n\t\t// need to validate and add exp for already parsed template\n\t\tvalidate$1( template );\n\t\taddFunctions( template );\n\t}\n\n\treturn template;\n}\n\nfunction parseAsString ( template, ractive ) {\n\t// ID of an element containing the template?\n\tif ( template[0] === '#' ) {\n\t\ttemplate = parser.fromId( template );\n\t}\n\n\treturn parser.parseFor( template, ractive );\n}\n\nfunction validate$1( template ) {\n\n\t// Check that the template even exists\n\tif ( template == undefined ) {\n\t\tthrow new Error( (\""The template cannot be \"" + template + \"".\"") );\n\t}\n\n\t// Check the parsed template has a version at all\n\telse if ( typeof template.v !== 'number' ) {\n\t\tthrow new Error( 'The template parser was passed a non-string template, but the template doesn\\'t have a version.  Make sure you\\'re passing in the template you think you are.' );\n\t}\n\n\t// Check we're using the correct version\n\telse if ( template.v !== TEMPLATE_VERSION ) {\n\t\tthrow new Error( (\""Mismatched template version (expected \"" + TEMPLATE_VERSION + \"", got \"" + (template.v) + \"") Please ensure you are using the latest version of Ractive.js in your build process as well as in your app\"") );\n\t}\n}\n\nfunction extendPartials ( existingPartials, newPartials, overwrite ) {\n\tif ( !newPartials ) { return; }\n\n\t// TODO there's an ambiguity here - we need to overwrite in the `reset()`\n\t// case, but not initially...\n\n\tfor ( var key in newPartials ) {\n\t\tif ( overwrite || !existingPartials.hasOwnProperty( key ) ) {\n\t\t\texistingPartials[ key ] = newPartials[ key ];\n\t\t}\n\t}\n}\n\nvar registryNames = [\n\t'adaptors',\n\t'components',\n\t'computed',\n\t'decorators',\n\t'easing',\n\t'events',\n\t'interpolators',\n\t'partials',\n\t'transitions'\n];\n\nvar Registry = function Registry ( name, useDefaults ) {\n\tthis.name = name;\n\tthis.useDefaults = useDefaults;\n};\n\nRegistry.prototype.extend = function extend ( Parent, proto, options ) {\n\tthis.configure(\n\t\tthis.useDefaults ? Parent.defaults : Parent,\n\t\tthis.useDefaults ? proto : proto.constructor,\n\t\toptions );\n};\n\nRegistry.prototype.init = function init () {\n\t// noop\n};\n\nRegistry.prototype.configure = function configure ( Parent, target, options ) {\n\tvar name = this.name;\n\tvar option = options[ name ];\n\n\tvar registry = Object.create( Parent[name] );\n\n\tfor ( var key in option ) {\n\t\tregistry[ key ] = option[ key ];\n\t}\n\n\ttarget[ name ] = registry;\n};\n\nRegistry.prototype.reset = function reset ( ractive ) {\n\tvar registry = ractive[ this.name ];\n\tvar changed = false;\n\n\tObject.keys( registry ).forEach( function (key) {\n\t\tvar item = registry[ key ];\n\n\t\tif ( item._fn ) {\n\t\t\tif ( item._fn.isOwner ) {\n\t\t\t\tregistry[key] = item._fn;\n\t\t\t} else {\n\t\t\t\tdelete registry[key];\n\t\t\t}\n\t\t\tchanged = true;\n\t\t}\n\t});\n\n\treturn changed;\n};\n\nvar registries = registryNames.map( function (name) { return new Registry( name, name === 'computed' ); } );\n\nfunction wrap$1 ( parent, name, method ) {\n\tif ( !/_super/.test( method ) ) { return method; }\n\n\tfunction wrapper () {\n\t\tvar superMethod = getSuperMethod( wrapper._parent, name );\n\t\tvar hasSuper = '_super' in this;\n\t\tvar oldSuper = this._super;\n\n\t\tthis._super = superMethod;\n\n\t\tvar result = method.apply( this, arguments );\n\n\t\tif ( hasSuper ) {\n\t\t\tthis._super = oldSuper;\n\t\t} else {\n\t\t\tdelete this._super;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\twrapper._parent = parent;\n\twrapper._method = method;\n\n\treturn wrapper;\n}\n\nfunction getSuperMethod ( parent, name ) {\n\tif ( name in parent ) {\n\t\tvar value = parent[ name ];\n\n\t\treturn typeof value === 'function' ?\n\t\t\tvalue :\n\t\t\tfunction () { return value; };\n\t}\n\n\treturn noop;\n}\n\nfunction getMessage( deprecated, correct, isError ) {\n\treturn \""options.\"" + deprecated + \"" has been deprecated in favour of options.\"" + correct + \"".\""\n\t\t+ ( isError ? (\"" You cannot specify both options, please use options.\"" + correct + \"".\"") : '' );\n}\n\nfunction deprecateOption ( options, deprecatedOption, correct ) {\n\tif ( deprecatedOption in options ) {\n\t\tif( !( correct in options ) ) {\n\t\t\twarnIfDebug( getMessage( deprecatedOption, correct ) );\n\t\t\toptions[ correct ] = options[ deprecatedOption ];\n\t\t} else {\n\t\t\tthrow new Error( getMessage( deprecatedOption, correct, true ) );\n\t\t}\n\t}\n}\n\nfunction deprecate ( options ) {\n\tdeprecateOption( options, 'beforeInit', 'onconstruct' );\n\tdeprecateOption( options, 'init', 'onrender' );\n\tdeprecateOption( options, 'complete', 'oncomplete' );\n\tdeprecateOption( options, 'eventDefinitions', 'events' );\n\n\t// Using extend with Component instead of options,\n\t// like Human.extend( Spider ) means adaptors as a registry\n\t// gets copied to options. So we have to check if actually an array\n\tif ( Array.isArray( options.adaptors ) ) {\n\t\tdeprecateOption( options, 'adaptors', 'adapt' );\n\t}\n}\n\nvar custom = {\n\tadapt: adaptConfigurator,\n\tcss: cssConfigurator,\n\tdata: dataConfigurator,\n\ttemplate: templateConfigurator\n};\n\nvar defaultKeys = Object.keys( defaults );\n\nvar isStandardKey = makeObj( defaultKeys.filter( function (key) { return !custom[ key ]; } ) );\n\n// blacklisted keys that we don't double extend\nvar isBlacklisted = makeObj( defaultKeys.concat( registries.map( function (r) { return r.name; } ), [ 'on', 'observe' ] ) );\n\nvar order = [].concat(\n\tdefaultKeys.filter( function (key) { return !registries[ key ] && !custom[ key ]; } ),\n\tregistries,\n\t//custom.data,\n\tcustom.template,\n\tcustom.css\n);\n\nvar config = {\n\textend: function ( Parent, proto, options ) { return configure$1( 'extend', Parent, proto, options ); },\n\n\tinit: function ( Parent, ractive, options ) { return configure$1( 'init', Parent, ractive, options ); },\n\n\treset: function (ractive) {\n\t\treturn order.filter( function (c) {\n\t\t\treturn c.reset && c.reset( ractive );\n\t\t}).map( function (c) { return c.name; } );\n\t},\n\n\t// this defines the order. TODO this isn't used anywhere in the codebase,\n\t// only in the test suite - should get rid of it\n\torder: order\n};\n\nfunction configure$1 ( method, Parent, target, options ) {\n\tdeprecate( options );\n\n\tfor ( var key in options ) {\n\t\tif ( isStandardKey.hasOwnProperty( key ) ) {\n\t\t\tvar value = options[ key ];\n\n\t\t\t// warn the developer if they passed a function and ignore its value\n\n\t\t\t// NOTE: we allow some functions on \""el\"" because we duck type element lists\n\t\t\t// and some libraries or ef'ed-up virtual browsers (phantomJS) return a\n\t\t\t// function object as the result of querySelector methods\n\t\t\tif ( key !== 'el' && typeof value === 'function' ) {\n\t\t\t\twarnIfDebug( (key + \"" is a Ractive option that does not expect a function and will be ignored\""),\n\t\t\t\t\tmethod === 'init' ? target : null );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttarget[ key ] = value;\n\t\t\t}\n\t\t}\n\t}\n\n\t// disallow combination of `append` and `enhance`\n\tif ( options.append && options.enhance ) {\n\t\tthrow new Error( 'Cannot use append and enhance at the same time' );\n\t}\n\n\tregistries.forEach( function (registry) {\n\t\tregistry[ method ]( Parent, target, options );\n\t});\n\n\tadaptConfigurator[ method ]( Parent, target, options );\n\ttemplateConfigurator[ method ]( Parent, target, options );\n\tcssConfigurator[ method ]( Parent, target, options );\n\n\textendOtherMethods( Parent.prototype, target, options );\n}\n\nfunction extendOtherMethods ( parent, target, options ) {\n\tfor ( var key in options ) {\n\t\tif ( !isBlacklisted[ key ] && options.hasOwnProperty( key ) ) {\n\t\t\tvar member = options[ key ];\n\n\t\t\t// if this is a method that overwrites a method, wrap it:\n\t\t\tif ( typeof member === 'function' ) {\n\t\t\t\tmember = wrap$1( parent, key, member );\n\t\t\t}\n\n\t\t\ttarget[ key ] = member;\n\t\t}\n\t}\n}\n\nfunction makeObj ( array ) {\n\tvar obj = {};\n\tarray.forEach( function (x) { return obj[x] = true; } );\n\treturn obj;\n}\n\nvar Item = function Item ( options ) {\n\tthis.parentFragment = options.parentFragment;\n\tthis.ractive = options.parentFragment.ractive;\n\n\tthis.template = options.template;\n\tthis.index = options.index;\n\tthis.type = options.template.t;\n\n\tthis.dirty = false;\n};\n\nItem.prototype.bubble = function bubble () {\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\t\tthis.parentFragment.bubble();\n\t}\n};\n\nItem.prototype.destroyed = function destroyed () {\n\tif ( this.fragment ) { this.fragment.destroyed(); }\n};\n\nItem.prototype.find = function find () {\n\treturn null;\n};\n\nItem.prototype.findComponent = function findComponent () {\n\treturn null;\n};\n\nItem.prototype.findNextNode = function findNextNode () {\n\treturn this.parentFragment.findNextNode( this );\n};\n\nItem.prototype.shuffled = function shuffled () {\n\tif ( this.fragment ) { this.fragment.shuffled(); }\n};\n\nItem.prototype.valueOf = function valueOf () {\n\treturn this.toString();\n};\n\nItem.prototype.findAll = noop;\nItem.prototype.findAllComponents = noop;\n\nvar ContainerItem = (function (Item) {\n\tfunction ContainerItem ( options ) {\n\t\tItem.call( this, options );\n\t}\n\n\tif ( Item ) ContainerItem.__proto__ = Item;\n\tContainerItem.prototype = Object.create( Item && Item.prototype );\n\tContainerItem.prototype.constructor = ContainerItem;\n\n\tContainerItem.prototype.detach = function detach () {\n\t\treturn this.fragment ? this.fragment.detach() : createDocumentFragment();\n\t};\n\n\tContainerItem.prototype.find = function find ( selector ) {\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.find( selector );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findAll = function findAll ( selector, query ) {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAll( selector, query );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findComponent = function findComponent ( name ) {\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.findComponent( name );\n\t\t}\n\t};\n\n\tContainerItem.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAllComponents( name, query );\n\t\t}\n\t};\n\n\tContainerItem.prototype.firstNode = function firstNode ( skipParent ) {\n\t\treturn this.fragment && this.fragment.firstNode( skipParent );\n\t};\n\n\tContainerItem.prototype.toString = function toString ( escape ) {\n\t\treturn this.fragment ? this.fragment.toString( escape ) : '';\n\t};\n\n\treturn ContainerItem;\n}(Item));\n\nvar ComputationChild = (function (Model$$1) {\n\tfunction ComputationChild ( parent, key ) {\n\t\tModel$$1.call( this, parent, key );\n\n\t\tthis.isReadonly = !this.root.ractive.syncComputedChildren;\n\t\tthis.dirty = true;\n\t}\n\n\tif ( Model$$1 ) ComputationChild.__proto__ = Model$$1;\n\tComputationChild.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tComputationChild.prototype.constructor = ComputationChild;\n\n\tComputationChild.prototype.applyValue = function applyValue ( value ) {\n\t\tModel$$1.prototype.applyValue.call( this, value );\n\n\t\tif ( !this.isReadonly ) {\n\t\t\tvar source = this.parent;\n\t\t\t// computed models don't have a shuffle method\n\t\t\twhile ( source && source.shuffle ) {\n\t\t\t\tsource = source.parent;\n\t\t\t}\n\n\t\t\tif ( source ) {\n\t\t\t\tsource.dependencies.forEach( mark$1$1 );\n\t\t\t}\n\t\t}\n\t};\n\n\tComputationChild.prototype.get = function get ( shouldCapture ) {\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tvar parentValue = this.parent.get();\n\t\t\tthis.value = parentValue ? parentValue[ this.key ] : undefined;\n\t\t}\n\n\t\treturn this.value;\n\t};\n\n\tComputationChild.prototype.handleChange = function handleChange$1 () {\n\t\tthis.dirty = true;\n\n\t\tif ( this.boundValue ) { this.boundValue = null; }\n\n\t\tthis.links.forEach( marked );\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( handleChange$1$1 );\n\t\tthis.clearUnresolveds(); // TODO is this necessary?\n\t};\n\n\tComputationChild.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ComputationChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\treturn ComputationChild;\n}(Model));\n\n/* global console */\n/* eslint no-console:\""off\"" */\n\nvar Computation = (function (Model$$1) {\n\tfunction Computation ( viewmodel, signature, key ) {\n\t\tModel$$1.call( this, null, null );\n\n\t\tthis.root = this.parent = viewmodel;\n\t\tthis.signature = signature;\n\n\t\tthis.key = key; // not actually used, but helps with debugging\n\t\tthis.isExpression = key && key[0] === '@';\n\n\t\tthis.isReadonly = !this.signature.setter;\n\n\t\tthis.context = viewmodel.computationContext;\n\n\t\tthis.dependencies = [];\n\n\t\tthis.children = [];\n\t\tthis.childByKey = {};\n\n\t\tthis.deps = [];\n\n\t\tthis.dirty = true;\n\n\t\t// TODO: is there a less hackish way to do this?\n\t\tthis.shuffle = undefined;\n\t}\n\n\tif ( Model$$1 ) Computation.__proto__ = Model$$1;\n\tComputation.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tComputation.prototype.constructor = Computation;\n\n\tComputation.prototype.get = function get ( shouldCapture ) {\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tthis.value = this.getValue();\n\t\t\tif ( this.wrapper ) { this.newWrapperValue = this.value; }\n\t\t\tthis.adapt();\n\t\t}\n\n\t\t// if capturing, this value needs to be unwrapped because it's for external use\n\t\treturn maybeBind( this, shouldCapture && this.wrapper ? this.wrapperValue : this.value );\n\t};\n\n\tComputation.prototype.getValue = function getValue () {\n\t\tstartCapturing();\n\t\tvar result;\n\n\t\ttry {\n\t\t\tresult = this.signature.getter.call( this.context );\n\t\t} catch ( err ) {\n\t\t\twarnIfDebug( (\""Failed to compute \"" + (this.getKeypath()) + \"": \"" + (err.message || err)) );\n\n\t\t\t// TODO this is all well and good in Chrome, but...\n\t\t\t// ...also, should encapsulate this stuff better, and only\n\t\t\t// show it if Ractive.DEBUG\n\t\t\tif ( hasConsole ) {\n\t\t\t\tif ( console.groupCollapsed ) { console.groupCollapsed( '%cshow details', 'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;' ); }\n\t\t\t\tvar sig = this.signature;\n\t\t\t\tconsole.error( ((err.name) + \"": \"" + (err.message) + \""\\n\\n\"" + (sig.getterString) + (sig.getterUseStack ? '\\n\\n' + err.stack : '')) );\n\t\t\t\tif ( console.groupCollapsed ) { console.groupEnd(); }\n\t\t\t}\n\t\t}\n\n\t\tvar dependencies = stopCapturing();\n\t\tthis.setDependencies( dependencies );\n\n\t\t// if not the first computation and the value is not the same,\n\t\t// register the change for change events\n\t\tif ( 'value' in this && result !== this.value ) {\n\t\t\tthis.registerChange( this.getKeypath(), result );\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tComputation.prototype.mark = function mark () {\n\t\tthis.handleChange();\n\t};\n\n\tComputation.prototype.rebind = function rebind ( next, previous ) {\n\t\t// computations will grab all of their deps again automagically\n\t\tif ( next !== previous ) { this.handleChange(); }\n\t};\n\n\tComputation.prototype.set = function set ( value ) {\n\t\tif ( this.isReadonly ) {\n\t\t\tthrow new Error( (\""Cannot set read-only computed value '\"" + (this.key) + \""'\"") );\n\t\t}\n\n\t\tthis.signature.setter( value );\n\t\tthis.mark();\n\t};\n\n\tComputation.prototype.setDependencies = function setDependencies ( dependencies ) {\n\t\tvar this$1 = this;\n\n\t\t// unregister any soft dependencies we no longer have\n\t\tvar i = this.dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tvar model = this$1.dependencies[i];\n\t\t\tif ( !~dependencies.indexOf( model ) ) { model.unregister( this$1 ); }\n\t\t}\n\n\t\t// and add any new ones\n\t\ti = dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tvar model$1 = dependencies[i];\n\t\t\tif ( !~this$1.dependencies.indexOf( model$1 ) ) { model$1.register( this$1 ); }\n\t\t}\n\n\t\tthis.dependencies = dependencies;\n\t};\n\n\tComputation.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tvar i = this.dependencies.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( this$1.dependencies[i] ) { this$1.dependencies[i].unregister( this$1 ); }\n\t\t}\n\t\tif ( this.root.computations[this.key] === this ) { delete this.root.computations[this.key]; }\n\t\tModel$$1.prototype.teardown.call(this);\n\t};\n\n\treturn Computation;\n}(Model));\n\nvar prototype$1 = Computation.prototype;\nvar child = ComputationChild.prototype;\nprototype$1.handleChange = child.handleChange;\nprototype$1.joinKey = child.joinKey;\n\nfunction createResolver ( proxy, ref, index ) {\n\tvar resolver = proxy.fragment.resolve( ref, function (model) {\n\t\tremoveFromArray( proxy.resolvers, resolver );\n\t\tproxy.models[ index ] = model;\n\t\tproxy.bubble();\n\t});\n\n\tproxy.resolvers.push( resolver );\n}\n\nvar ExpressionProxy = (function (Model$$1) {\n\tfunction ExpressionProxy ( fragment, template ) {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.call( this, fragment.ractive.viewmodel, null );\n\n\t\tthis.fragment = fragment;\n\t\tthis.template = template;\n\n\t\tthis.isReadonly = true;\n\t\tthis.dirty = true;\n\n\t\tthis.fn = getFunction( template.s, template.r.length );\n\n\t\tthis.resolvers = [];\n\t\tthis.models = this.template.r.map( function ( ref, index ) {\n\t\t\tvar model = resolveReference( this$1.fragment, ref );\n\n\t\t\tif ( !model ) {\n\t\t\t\tcreateResolver( this$1, ref, index );\n\t\t\t}\n\n\t\t\treturn model;\n\t\t});\n\t\tthis.dependencies = [];\n\n\t\tthis.shuffle = undefined;\n\n\t\tthis.bubble();\n\t}\n\n\tif ( Model$$1 ) ExpressionProxy.__proto__ = Model$$1;\n\tExpressionProxy.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tExpressionProxy.prototype.constructor = ExpressionProxy;\n\n\tExpressionProxy.prototype.bubble = function bubble ( actuallyChanged ) {\n\t\tif ( actuallyChanged === void 0 ) actuallyChanged = true;\n\n\t\t// refresh the keypath\n\t\tthis.keypath = undefined;\n\n\t\tif ( actuallyChanged ) {\n\t\t\tthis.handleChange();\n\t\t}\n\t};\n\n\tExpressionProxy.prototype.getKeypath = function getKeypath () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.template ) { return '@undefined'; }\n\t\tif ( !this.keypath ) {\n\t\t\tthis.keypath = '@' + this.template.s.replace( /_(\\d+)/g, function ( match, i ) {\n\t\t\t\tif ( i >= this$1.models.length ) { return match; }\n\n\t\t\t\tvar model = this$1.models[i];\n\t\t\t\treturn model ? model.getKeypath() : '@undefined';\n\t\t\t});\n\t\t}\n\n\t\treturn this.keypath;\n\t};\n\n\tExpressionProxy.prototype.getValue = function getValue () {\n\t\tvar this$1 = this;\n\n\t\tstartCapturing();\n\t\tvar result;\n\n\t\ttry {\n\t\t\tvar params = this.models.map( function (m) { return m ? m.get( true ) : undefined; } );\n\t\t\tresult = this.fn.apply( this.fragment.ractive, params );\n\t\t} catch ( err ) {\n\t\t\twarnIfDebug( (\""Failed to compute \"" + (this.getKeypath()) + \"": \"" + (err.message || err)) );\n\t\t}\n\n\t\tvar dependencies = stopCapturing();\n\t\t// remove missing deps\n\t\tthis.dependencies.filter( function (d) { return !~dependencies.indexOf( d ); } ).forEach( function (d) {\n\t\t\td.unregister( this$1 );\n\t\t\tremoveFromArray( this$1.dependencies, d );\n\t\t});\n\t\t// register new deps\n\t\tdependencies.filter( function (d) { return !~this$1.dependencies.indexOf( d ); } ).forEach( function (d) {\n\t\t\td.register( this$1 );\n\t\t\tthis$1.dependencies.push( d );\n\t\t});\n\n\t\treturn result;\n\t};\n\n\tExpressionProxy.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tvar idx = this.models.indexOf( previous );\n\n\t\tif ( ~idx ) {\n\t\t\tnext = rebindMatch( this.template.r[idx], next, previous );\n\t\t\tif ( next !== previous ) {\n\t\t\t\tprevious.unregister( this );\n\t\t\t\tthis.models.splice( idx, 1, next );\n\t\t\t\t// TODO: set up a resolver if there is no next?\n\t\t\t\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\t\t\t}\n\t\t}\n\t\tthis.bubble( !safe );\n\t};\n\n\tExpressionProxy.prototype.retrieve = function retrieve () {\n\t\treturn this.get();\n\t};\n\n\tExpressionProxy.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tthis.unbind();\n\t\tthis.fragment = undefined;\n\t\tif ( this.dependencies ) { this.dependencies.forEach( function (d) { return d.unregister( this$1 ); } ); }\n\t\tModel$$1.prototype.teardown.call(this);\n\t};\n\n\tExpressionProxy.prototype.unregister = function unregister ( dep ) {\n\t\tModel$$1.prototype.unregister.call( this, dep );\n\t\tif ( !this.deps.length ) { this.teardown(); }\n\t};\n\n\tExpressionProxy.prototype.unbind = function unbind$1 () {\n\t\tthis.resolvers.forEach( unbind$1$1 );\n\t};\n\n\treturn ExpressionProxy;\n}(Model));\n\nvar prototype = ExpressionProxy.prototype;\nvar computation = Computation.prototype;\nprototype.get = computation.get;\nprototype.handleChange = computation.handleChange;\nprototype.joinKey = computation.joinKey;\nprototype.mark = computation.mark;\n\nvar ReferenceExpressionChild = (function (Model$$1) {\n\tfunction ReferenceExpressionChild ( parent, key ) {\n\t\tModel$$1.call ( this, parent, key );\n\t}\n\n\tif ( Model$$1 ) ReferenceExpressionChild.__proto__ = Model$$1;\n\tReferenceExpressionChild.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tReferenceExpressionChild.prototype.constructor = ReferenceExpressionChild;\n\n\tReferenceExpressionChild.prototype.applyValue = function applyValue ( value ) {\n\t\tif ( isEqual( value, this.value ) ) { return; }\n\n\t\tvar parent = this.parent;\n\t\tvar keys = [ this.key ];\n\t\twhile ( parent ) {\n\t\t\tif ( parent.base ) {\n\t\t\t\tvar target = parent.model.joinAll( keys );\n\t\t\t\ttarget.applyValue( value );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tkeys.unshift( parent.key );\n\n\t\t\tparent = parent.parent;\n\t\t}\n\t};\n\n\tReferenceExpressionChild.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ReferenceExpressionChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tReferenceExpressionChild.prototype.retrieve = function retrieve () {\n\t\tvar parent = this.parent.get();\n\t\treturn parent && parent[ this.key ];\n\t};\n\n\treturn ReferenceExpressionChild;\n}(Model));\n\nvar ReferenceExpressionProxy = (function (Model$$1) {\n\tfunction ReferenceExpressionProxy ( fragment, template ) {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.call( this, null, null );\n\t\tthis.dirty = true;\n\t\tthis.root = fragment.ractive.viewmodel;\n\t\tthis.template = template;\n\n\t\tthis.resolvers = [];\n\n\t\tthis.base = resolve$2( fragment, template );\n\t\tvar baseResolver;\n\n\t\tif ( !this.base ) {\n\t\t\tbaseResolver = fragment.resolve( template.r, function (model) {\n\t\t\t\tthis$1.base = model;\n\t\t\t\tthis$1.bubble();\n\n\t\t\t\tremoveFromArray( this$1.resolvers, baseResolver );\n\t\t\t});\n\n\t\t\tthis.resolvers.push( baseResolver );\n\t\t}\n\n\t\tvar intermediary = this.intermediary = {\n\t\t\thandleChange: function () { return this$1.handleChange(); },\n\t\t\trebind: function ( next, previous ) {\n\t\t\t\tif ( previous === this$1.base ) {\n\t\t\t\t\tnext = rebindMatch( template, next, previous );\n\t\t\t\t\tif ( next !== this$1.base ) {\n\t\t\t\t\t\tthis$1.base.unregister( intermediary );\n\t\t\t\t\t\tthis$1.base = next;\n\t\t\t\t\t\t// TODO: if there is no next, set up a resolver?\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar idx = this$1.members.indexOf( previous );\n\t\t\t\t\tif ( ~idx ) {\n\t\t\t\t\t\t// only direct references will rebind... expressions handle themselves\n\t\t\t\t\t\tnext = rebindMatch( template.m[idx].n, next, previous );\n\t\t\t\t\t\tif ( next !== this$1.members[idx] ) {\n\t\t\t\t\t\t\tthis$1.members.splice( idx, 1, next );\n\t\t\t\t\t\t\t// TODO: if there is no next, set up a resolver?\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( next !== previous ) { previous.unregister( intermediary ); }\n\t\t\t\tif ( next ) { next.addShuffleTask( function () { return next.register( intermediary ); } ); }\n\n\t\t\t\tthis$1.bubble();\n\t\t\t}\n\t\t};\n\n\t\tthis.members = template.m.map( function ( template, i ) {\n\t\t\tif ( typeof template === 'string' ) {\n\t\t\t\treturn { get: function () { return template; } };\n\t\t\t}\n\n\t\t\tvar model;\n\t\t\tvar resolver;\n\n\t\t\tif ( template.t === REFERENCE ) {\n\t\t\t\tmodel = resolveReference( fragment, template.n );\n\n\t\t\t\tif ( model ) {\n\t\t\t\t\tmodel.register( intermediary );\n\t\t\t\t} else {\n\t\t\t\t\tresolver = fragment.resolve( template.n, function (model) {\n\t\t\t\t\t\tthis$1.members[i] = model;\n\n\t\t\t\t\t\tmodel.register( intermediary );\n\t\t\t\t\t\tthis$1.handleChange();\n\n\t\t\t\t\t\tremoveFromArray( this$1.resolvers, resolver );\n\t\t\t\t\t});\n\n\t\t\t\t\tthis$1.resolvers.push( resolver );\n\t\t\t\t}\n\n\t\t\t\treturn model;\n\t\t\t}\n\n\t\t\tmodel = new ExpressionProxy( fragment, template );\n\t\t\tmodel.register( intermediary );\n\t\t\treturn model;\n\t\t});\n\n\t\tthis.bubble();\n\t}\n\n\tif ( Model$$1 ) ReferenceExpressionProxy.__proto__ = Model$$1;\n\tReferenceExpressionProxy.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tReferenceExpressionProxy.prototype.constructor = ReferenceExpressionProxy;\n\n\tReferenceExpressionProxy.prototype.bubble = function bubble () {\n\t\tthis.isUnresolved = !!this.resolvers.length;\n\t\tif ( !this.base ) { return; }\n\t\tif ( !this.dirty ) { this.handleChange(); }\n\t};\n\n\tReferenceExpressionProxy.prototype.forceResolution = function forceResolution () {\n\t\tthis.resolvers.forEach( function (resolver) { return resolver.forceResolution(); } );\n\t\tthis.dirty = true;\n\t\tthis.bubble();\n\t};\n\n\tReferenceExpressionProxy.prototype.get = function get ( shouldCapture ) {\n\t\tvar this$1 = this;\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.bubble();\n\n\t\t\tvar i = this.members.length;\n\t\t\tvar resolved = true;\n\t\t\twhile ( resolved && i-- ) {\n\t\t\t\tif ( !this$1.members[i] ) { resolved = false; }\n\t\t\t}\n\n\t\t\tif ( this.base && resolved ) {\n\t\t\t\tvar keys = this.members.map( function (m) { return escapeKey( String( m.get() ) ); } );\n\t\t\t\tvar model = this.base.joinAll( keys );\n\n\t\t\t\tif ( model !== this.model ) {\n\t\t\t\t\tif ( this.model ) {\n\t\t\t\t\t\tthis.model.unregister( this );\n\t\t\t\t\t\tthis.model.unregisterTwowayBinding( this );\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.model = model;\n\t\t\t\t\tthis.parent = model.parent;\n\t\t\t\t\tthis.model.register( this );\n\t\t\t\t\tthis.model.registerTwowayBinding( this );\n\n\t\t\t\t\tif ( this.keypathModel ) { this.keypathModel.handleChange(); }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.value = this.model ? this.model.get( shouldCapture ) : undefined;\n\t\t\tthis.dirty = false;\n\t\t\tthis.mark();\n\t\t\treturn this.value;\n\t\t} else {\n\t\t\treturn this.model ? this.model.get( shouldCapture ) : undefined;\n\t\t}\n\t};\n\n\t// indirect two-way bindings\n\tReferenceExpressionProxy.prototype.getValue = function getValue () {\n\t\tvar this$1 = this;\n\n\t\tthis.value = this.model ? this.model.get() : undefined;\n\n\t\tvar i = this.bindings.length;\n\t\twhile ( i-- ) {\n\t\t\tvar value = this$1.bindings[i].getValue();\n\t\t\tif ( value !== this$1.value ) { return value; }\n\t\t}\n\n\t\t// check one-way bindings\n\t\tvar oneway = findBoundValue( this.deps );\n\t\tif ( oneway ) { return oneway.value; }\n\n\t\treturn this.value;\n\t};\n\n\tReferenceExpressionProxy.prototype.getKeypath = function getKeypath () {\n\t\treturn this.model ? this.model.getKeypath() : '@undefined';\n\t};\n\n\tReferenceExpressionProxy.prototype.handleChange = function handleChange$1 () {\n\t\tthis.dirty = true;\n\t\tthis.mark();\n\t};\n\n\tReferenceExpressionProxy.prototype.joinKey = function joinKey ( key ) {\n\t\tif ( key === undefined || key === '' ) { return this; }\n\n\t\tif ( !this.childByKey.hasOwnProperty( key ) ) {\n\t\t\tvar child = new ReferenceExpressionChild( this, key );\n\t\t\tthis.children.push( child );\n\t\t\tthis.childByKey[ key ] = child;\n\t\t}\n\n\t\treturn this.childByKey[ key ];\n\t};\n\n\tReferenceExpressionProxy.prototype.mark = function mark$1 () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.deps.forEach( handleChange$1$1 );\n\t\t}\n\n\t\tthis.links.forEach( marked );\n\t\tthis.children.forEach( mark$1$1 );\n\t\tthis.clearUnresolveds();\n\t};\n\n\tReferenceExpressionProxy.prototype.retrieve = function retrieve () {\n\t\treturn this.value;\n\t};\n\n\tReferenceExpressionProxy.prototype.set = function set ( value ) {\n\t\tif ( !this.model ) { throw new Error( 'Unresolved reference expression. This should not happen!' ); }\n\t\tthis.model.set( value );\n\t};\n\n\tReferenceExpressionProxy.prototype.unbind = function unbind$1 () {\n\t\tthis.resolvers.forEach( unbind$1$1 );\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t\tthis.model.unregisterTwowayBinding( this );\n\t\t}\n\t};\n\n\treturn ReferenceExpressionProxy;\n}(Model));\n\nReferenceExpressionProxy.prototype.rebind = noop;\n\nfunction resolve$2 ( fragment, template ) {\n\tif ( template.r ) {\n\t\treturn resolveReference( fragment, template.r );\n\t}\n\n\telse if ( template.x ) {\n\t\treturn new ExpressionProxy( fragment, template.x );\n\t}\n\n\telse if ( template.rx ) {\n\t\treturn new ReferenceExpressionProxy( fragment, template.rx );\n\t}\n}\n\nfunction resolveAliases( aliases, fragment ) {\n\tvar resolved = {};\n\n\tfor ( var i = 0; i < aliases.length; i++ ) {\n\t\tresolved[ aliases[i].n ] = resolve$2( fragment, aliases[i].x );\n\t}\n\n\treturn resolved;\n}\n\nvar Alias = (function (ContainerItem$$1) {\n\tfunction Alias ( options ) {\n\t\tContainerItem$$1.call( this, options );\n\n\t\tthis.fragment = null;\n\t}\n\n\tif ( ContainerItem$$1 ) Alias.__proto__ = ContainerItem$$1;\n\tAlias.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tAlias.prototype.constructor = Alias;\n\n\tAlias.prototype.bind = function bind () {\n\t\tthis.fragment = new Fragment({\n\t\t\towner: this,\n\t\t\ttemplate: this.template.f\n\t\t});\n\n\t\tthis.fragment.aliases = resolveAliases( this.template.z, this.parentFragment );\n\t\tthis.fragment.bind();\n\t};\n\n\tAlias.prototype.render = function render ( target ) {\n\t\tthis.rendered = true;\n\t\tif ( this.fragment ) { this.fragment.render( target ); }\n\t};\n\n\tAlias.prototype.unbind = function unbind () {\n\t\tthis.fragment.aliases = {};\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tAlias.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }\n\t\tthis.rendered = false;\n\t};\n\n\tAlias.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tthis.fragment.update();\n\t\t}\n\t};\n\n\treturn Alias;\n}(ContainerItem));\n\nfunction findElement( start, orComponent, name ) {\n\tif ( orComponent === void 0 ) orComponent = true;\n\n\twhile ( start && ( start.type !== ELEMENT || ( name && start.name !== name ) ) && ( !orComponent || ( start.type !== COMPONENT && start.type !== ANCHOR ) ) ) {\n\t\t// start is a fragment - look at the owner\n\t\tif ( start.owner ) { start = start.owner; }\n\t\t// start is a component or yielder - look at the container\n\t\telse if ( start.component ) { start = start.containerFragment || start.component.parentFragment; }\n\t\t// start is an item - look at the parent\n\t\telse if ( start.parent ) { start = start.parent; }\n\t\t// start is an item without a parent - look at the parent fragment\n\t\telse if ( start.parentFragment ) { start = start.parentFragment; }\n\n\t\telse { start = undefined; }\n\t}\n\n\treturn start;\n}\n\nvar space = /\\s+/;\n\nfunction readStyle ( css ) {\n\tif ( typeof css !== 'string' ) { return {}; }\n\n\treturn cleanCss( css, function ( css, reconstruct ) {\n\t\treturn css.split( ';' )\n\t\t\t.filter( function (rule) { return !!rule.trim(); } )\n\t\t\t.map( reconstruct )\n\t\t\t.reduce(function ( rules, rule ) {\n\t\t\t\tvar i = rule.indexOf(':');\n\t\t\t\tvar name = rule.substr( 0, i ).trim();\n\t\t\t\trules[ name ] = rule.substr( i + 1 ).trim();\n\t\t\t\treturn rules;\n\t\t\t}, {});\n\t});\n}\n\nfunction readClass ( str ) {\n\tvar list = str.split( space );\n\n  // remove any empty entries\n\tvar i = list.length;\n\twhile ( i-- ) {\n\t\tif ( !list[i] ) { list.splice( i, 1 ); }\n\t}\n\n\treturn list;\n}\n\nvar hyphenateCamel = function ( camelCaseStr ) {\n\treturn camelCaseStr.replace( /([A-Z])/g, function ( match, $1 ) {\n\t\treturn '-' + $1.toLowerCase();\n\t});\n};\n\nvar textTypes = [ undefined, 'text', 'search', 'url', 'email', 'hidden', 'password', 'search', 'reset', 'submit' ];\n\nfunction getUpdateDelegate ( attribute ) {\n\tvar element = attribute.element;\n\tvar name = attribute.name;\n\n\tif ( name === 'value' ) {\n\t\tif ( attribute.interpolator ) { attribute.interpolator.bound = true; }\n\n\t\t// special case - selects\n\t\tif ( element.name === 'select' && name === 'value' ) {\n\t\t\treturn element.getAttribute( 'multiple' ) ? updateMultipleSelectValue : updateSelectValue;\n\t\t}\n\n\t\tif ( element.name === 'textarea' ) { return updateStringValue; }\n\n\t\t// special case - contenteditable\n\t\tif ( element.getAttribute( 'contenteditable' ) != null ) { return updateContentEditableValue; }\n\n\t\t// special case - <input>\n\t\tif ( element.name === 'input' ) {\n\t\t\tvar type = element.getAttribute( 'type' );\n\n\t\t\t// type='file' value='{{fileList}}'>\n\t\t\tif ( type === 'file' ) { return noop; } // read-only\n\n\t\t\t// type='radio' name='{{twoway}}'\n\t\t\tif ( type === 'radio' && element.binding && element.binding.attribute.name === 'name' ) { return updateRadioValue; }\n\n\t\t\tif ( ~textTypes.indexOf( type ) ) { return updateStringValue; }\n\t\t}\n\n\t\treturn updateValue;\n\t}\n\n\tvar node = element.node;\n\n\t// special case - <input type='radio' name='{{twoway}}' value='foo'>\n\tif ( attribute.isTwoway && name === 'name' ) {\n\t\tif ( node.type === 'radio' ) { return updateRadioName; }\n\t\tif ( node.type === 'checkbox' ) { return updateCheckboxName; }\n\t}\n\n\tif ( name === 'style' ) { return updateStyleAttribute; }\n\n\tif ( name.indexOf( 'style-' ) === 0 ) { return updateInlineStyle; }\n\n\t// special case - class names. IE fucks things up, again\n\tif ( name === 'class' && ( !node.namespaceURI || node.namespaceURI === html ) ) { return updateClassName; }\n\n\tif ( name.indexOf( 'class-' ) === 0 ) { return updateInlineClass; }\n\n\tif ( attribute.isBoolean ) {\n\t\tvar type$1 = element.getAttribute( 'type' );\n\t\tif ( attribute.interpolator && name === 'checked' && ( type$1 === 'checkbox' || type$1 === 'radio' ) ) { attribute.interpolator.bound = true; }\n\t\treturn updateBoolean;\n\t}\n\n\tif ( attribute.namespace && attribute.namespace !== attribute.node.namespaceURI ) { return updateNamespacedAttribute; }\n\n\treturn updateAttribute;\n}\n\nfunction updateMultipleSelectValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !Array.isArray( value ) ) { value = [ value ]; }\n\n\tvar options = this.node.options;\n\tvar i = options.length;\n\n\tif ( reset ) {\n\t\twhile ( i-- ) { options[i].selected = false; }\n\t} else {\n\t\twhile ( i-- ) {\n\t\t\tvar option = options[i];\n\t\t\tvar optionValue = option._ractive ?\n\t\t\t\toption._ractive.value :\n\t\t\t\toption.value; // options inserted via a triple don't have _ractive\n\n\t\t\toption.selected = arrayContains( value, optionValue );\n\t\t}\n\t}\n}\n\nfunction updateSelectValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !this.locked ) { // TODO is locked still a thing?\n\t\tthis.node._ractive.value = value;\n\n\t\tvar options = this.node.options;\n\t\tvar i = options.length;\n\t\tvar wasSelected = false;\n\n\t\tif ( reset ) {\n\t\t\twhile ( i-- ) { options[i].selected = false; }\n\t\t} else {\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar option = options[i];\n\t\t\t\tvar optionValue = option._ractive ?\n\t\t\t\t\toption._ractive.value :\n\t\t\t\t\toption.value; // options inserted via a triple don't have _ractive\n\t\t\t\tif ( option.disabled && option.selected ) { wasSelected = true; }\n\n\t\t\t\tif ( optionValue == value ) { // double equals as we may be comparing numbers with strings\n\t\t\t\t\toption.selected = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !wasSelected ) { this.node.selectedIndex = -1; }\n\t}\n}\n\n\nfunction updateContentEditableValue ( reset ) {\n\tvar value = this.getValue();\n\n\tif ( !this.locked ) {\n\t\tif ( reset ) { this.node.innerHTML = ''; }\n\t\telse { this.node.innerHTML = value === undefined ? '' : value; }\n\t}\n}\n\nfunction updateRadioValue ( reset ) {\n\tvar node = this.node;\n\tvar wasChecked = node.checked;\n\n\tvar value = this.getValue();\n\n\tif ( reset ) { return node.checked = false; }\n\n\t//node.value = this.element.getAttribute( 'value' );\n\tnode.value = this.node._ractive.value = value;\n\tnode.checked = value === this.element.getAttribute( 'name' );\n\n\t// This is a special case - if the input was checked, and the value\n\t// changed so that it's no longer checked, the twoway binding is\n\t// most likely out of date. To fix it we have to jump through some\n\t// hoops... this is a little kludgy but it works\n\tif ( wasChecked && !node.checked && this.element.binding && this.element.binding.rendered ) {\n\t\tthis.element.binding.group.model.set( this.element.binding.group.getValue() );\n\t}\n}\n\nfunction updateValue ( reset ) {\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tthis.node.removeAttribute( 'value' );\n\t\t\tthis.node.value = this.node._ractive.value = null;\n\t\t} else {\n\t\t\tvar value = this.getValue();\n\n\t\t\tthis.node.value = this.node._ractive.value = value;\n\t\t\tthis.node.setAttribute( 'value', value );\n\t\t}\n\t}\n}\n\nfunction updateStringValue ( reset ) {\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tthis.node._ractive.value = '';\n\t\t\tthis.node.removeAttribute( 'value' );\n\t\t} else {\n\t\t\tvar value = this.getValue();\n\n\t\t\tthis.node._ractive.value = value;\n\n\t\t\tthis.node.value = safeToStringValue( value );\n\t\t\tthis.node.setAttribute( 'value', safeToStringValue( value ) );\n\t\t}\n\t}\n}\n\nfunction updateRadioName ( reset ) {\n\tif ( reset ) { this.node.checked = false; }\n\telse { this.node.checked = ( this.getValue() == this.node._ractive.value ); }\n}\n\nfunction updateCheckboxName ( reset ) {\n\tvar ref = this;\n\tvar element = ref.element;\n\tvar node = ref.node;\n\tvar binding = element.binding;\n\n\tvar value = this.getValue();\n\tvar valueAttribute = element.getAttribute( 'value' );\n\n\tif ( reset ) {\n\t\t// TODO: WAT?\n\t}\n\n\tif ( !Array.isArray( value ) ) {\n\t\tbinding.isChecked = node.checked = ( value == valueAttribute );\n\t} else {\n\t\tvar i = value.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( valueAttribute == value[i] ) {\n\t\t\t\tbinding.isChecked = node.checked = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tbinding.isChecked = node.checked = false;\n\t}\n}\n\nfunction updateStyleAttribute ( reset ) {\n\tvar props = reset ? {} : readStyle( this.getValue() || '' );\n\tvar style = this.node.style;\n\tvar keys = Object.keys( props );\n\tvar prev = this.previous || [];\n\n\tvar i = 0;\n\twhile ( i < keys.length ) {\n\t\tif ( keys[i] in style ) {\n\t\t\tvar safe = props[ keys[i] ].replace( '!important', '' );\n\t\t\tstyle.setProperty( keys[i], safe, safe.length !== props[ keys[i] ].length ? 'important' : '' );\n\t\t}\n\t\ti++;\n\t}\n\n\t// remove now-missing attrs\n\ti = prev.length;\n\twhile ( i-- ) {\n\t\tif ( !~keys.indexOf( prev[i] ) && prev[i] in style ) { style.setProperty( prev[i], '', '' ); }\n\t}\n\n\tthis.previous = keys;\n}\n\nfunction updateInlineStyle ( reset ) {\n\tif ( !this.style ) {\n\t\tthis.style = hyphenateCamel( this.name.substr( 6 ) );\n\t}\n\n\tvar value = reset ? '' : safeToStringValue( this.getValue() );\n\tvar safe = value.replace( '!important', '' );\n\tthis.node.style.setProperty( this.style, safe, safe.length !== value.length ? 'important' : '' );\n}\n\nfunction updateClassName ( reset ) {\n\tvar value = reset ? [] : readClass( safeToStringValue( this.getValue() ) );\n\tvar attr = readClass( this.node.className );\n\tvar prev = this.previous || attr.slice( 0 );\n\n\tvar i = 0;\n\twhile ( i < value.length ) {\n\t\tif ( !~attr.indexOf( value[i] ) ) { attr.push( value[i] ); }\n\t\ti++;\n\t}\n\n\t// remove now-missing classes\n\ti = prev.length;\n\twhile ( i-- ) {\n\t\tif ( !~value.indexOf( prev[i] ) ) {\n\t\t\tvar idx = attr.indexOf( prev[i] );\n\t\t\tif ( ~idx ) { attr.splice( idx, 1 ); }\n\t\t}\n\t}\n\n\tvar className = attr.join( ' ' );\n\n\tif ( className !== this.node.className ) {\n\t\tthis.node.className = className;\n\t}\n\n\tthis.previous = value;\n}\n\nfunction updateInlineClass ( reset ) {\n\tvar name = this.name.substr( 6 );\n\tvar attr = readClass( this.node.className );\n\tvar value = reset ? false : this.getValue();\n\n\tif ( !this.inlineClass ) { this.inlineClass = name; }\n\n\tif ( value && !~attr.indexOf( name ) ) { attr.push( name ); }\n\telse if ( !value && ~attr.indexOf( name ) ) { attr.splice( attr.indexOf( name ), 1 ); }\n\n\tthis.node.className = attr.join( ' ' );\n}\n\nfunction updateBoolean ( reset ) {\n\t// with two-way binding, only update if the change wasn't initiated by the user\n\t// otherwise the cursor will often be sent to the wrong place\n\tif ( !this.locked ) {\n\t\tif ( reset ) {\n\t\t\tif ( this.useProperty ) { this.node[ this.propertyName ] = false; }\n\t\t\tthis.node.removeAttribute( this.propertyName );\n\t\t} else {\n\t\t\tif ( this.useProperty ) {\n\t\t\t\tthis.node[ this.propertyName ] = this.getValue();\n\t\t\t} else {\n\t\t\t\tif ( this.getValue() ) {\n\t\t\t\t\tthis.node.setAttribute( this.propertyName, '' );\n\t\t\t\t} else {\n\t\t\t\t\tthis.node.removeAttribute( this.propertyName );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction updateAttribute ( reset ) {\n\tif ( reset ) { this.node.removeAttribute( this.name ); }\n\telse { this.node.setAttribute( this.name, safeToStringValue( this.getString() ) ); }\n}\n\nfunction updateNamespacedAttribute ( reset ) {\n\tif ( reset ) { this.node.removeAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ) ); }\n\telse { this.node.setAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ), safeToStringValue( this.getString() ) ); }\n}\n\nvar propertyNames = {\n\t'accept-charset': 'acceptCharset',\n\taccesskey: 'accessKey',\n\tbgcolor: 'bgColor',\n\t'class': 'className',\n\tcodebase: 'codeBase',\n\tcolspan: 'colSpan',\n\tcontenteditable: 'contentEditable',\n\tdatetime: 'dateTime',\n\tdirname: 'dirName',\n\t'for': 'htmlFor',\n\t'http-equiv': 'httpEquiv',\n\tismap: 'isMap',\n\tmaxlength: 'maxLength',\n\tnovalidate: 'noValidate',\n\tpubdate: 'pubDate',\n\treadonly: 'readOnly',\n\trowspan: 'rowSpan',\n\ttabindex: 'tabIndex',\n\tusemap: 'useMap'\n};\n\nfunction lookupNamespace ( node, prefix ) {\n\tvar qualified = \""xmlns:\"" + prefix;\n\n\twhile ( node ) {\n\t\tif ( node.hasAttribute && node.hasAttribute( qualified ) ) { return node.getAttribute( qualified ); }\n\t\tnode = node.parentNode;\n\t}\n\n\treturn namespaces[ prefix ];\n}\n\nvar Attribute = (function (Item$$1) {\n\tfunction Attribute ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.name = options.template.n;\n\t\tthis.namespace = null;\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || options.element || findElement( options.parentFragment );\n\t\tthis.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.parentFragment ) );\n\t\tthis.parentFragment = options.parentFragment; // shared\n\t\tthis.ractive = this.parentFragment.ractive;\n\n\t\tthis.rendered = false;\n\t\tthis.updateDelegate = null;\n\t\tthis.fragment = null;\n\n\t\tthis.element.attributeByName[ this.name ] = this;\n\n\t\tif ( !Array.isArray( options.template.f ) ) {\n\t\t\tthis.value = options.template.f;\n\t\t\tif ( this.value === 0 ) {\n\t\t\t\tthis.value = '';\n\t\t\t}\n\t\t} else {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\towner: this,\n\t\t\t\ttemplate: options.template.f\n\t\t\t});\n\t\t}\n\n\t\tthis.interpolator = this.fragment &&\n\t\t\tthis.fragment.items.length === 1 &&\n\t\t\tthis.fragment.items[0].type === INTERPOLATOR &&\n\t\t\tthis.fragment.items[0];\n\n\t\tif ( this.interpolator ) { this.interpolator.owner = this; }\n\t}\n\n\tif ( Item$$1 ) Attribute.__proto__ = Item$$1;\n\tAttribute.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tAttribute.prototype.constructor = Attribute;\n\n\tAttribute.prototype.bind = function bind () {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.bind();\n\t\t}\n\t};\n\n\tAttribute.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.parentFragment.bubble();\n\t\t\tthis.element.bubble();\n\t\t\tthis.dirty = true;\n\t\t}\n\t};\n\n\tAttribute.prototype.getString = function getString () {\n\t\treturn this.fragment ?\n\t\t\tthis.fragment.toString() :\n\t\t\tthis.value != null ? '' + this.value : '';\n\t};\n\n\t// TODO could getValue ever be called for a static attribute,\n\t// or can we assume that this.fragment exists?\n\tAttribute.prototype.getValue = function getValue () {\n\t\treturn this.fragment ? this.fragment.valueOf() : booleanAttributes.test( this.name ) ? true : this.value;\n\t};\n\n\tAttribute.prototype.render = function render () {\n\t\tvar node = this.element.node;\n\t\tthis.node = node;\n\n\t\t// should we use direct property access, or setAttribute?\n\t\tif ( !node.namespaceURI || node.namespaceURI === namespaces.html ) {\n\t\t\tthis.propertyName = propertyNames[ this.name ] || this.name;\n\n\t\t\tif ( node[ this.propertyName ] !== undefined ) {\n\t\t\t\tthis.useProperty = true;\n\t\t\t}\n\n\t\t\t// is attribute a boolean attribute or 'value'? If so we're better off doing e.g.\n\t\t\t// node.selected = true rather than node.setAttribute( 'selected', '' )\n\t\t\tif ( booleanAttributes.test( this.name ) || this.isTwoway ) {\n\t\t\t\tthis.isBoolean = true;\n\t\t\t}\n\n\t\t\tif ( this.propertyName === 'value' ) {\n\t\t\t\tnode._ractive.value = this.value;\n\t\t\t}\n\t\t}\n\n\t\tif ( node.namespaceURI ) {\n\t\t\tvar index = this.name.indexOf( ':' );\n\t\t\tif ( index !== -1 ) {\n\t\t\t\tthis.namespace = lookupNamespace( node, this.name.slice( 0, index ) );\n\t\t\t} else {\n\t\t\t\tthis.namespace = node.namespaceURI;\n\t\t\t}\n\t\t}\n\n\t\tthis.rendered = true;\n\t\tthis.updateDelegate = getUpdateDelegate( this );\n\t\tthis.updateDelegate();\n\t};\n\n\tAttribute.prototype.toString = function toString () {\n\t\tvar value = this.getValue();\n\n\t\t// Special case - select and textarea values (should not be stringified)\n\t\tif ( this.name === 'value' && ( this.element.getAttribute( 'contenteditable' ) !== undefined || ( this.element.name === 'select' || this.element.name === 'textarea' ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Special case – bound radio `name` attributes\n\t\tif ( this.name === 'name' && this.element.name === 'input' && this.interpolator && this.element.getAttribute( 'type' ) === 'radio' ) {\n\t\t\treturn (\""name=\\\""{{\"" + (this.interpolator.model.getKeypath()) + \""}}\\\""\"");\n\t\t}\n\n\t\t// Special case - style and class attributes and directives\n\t\tif ( this.owner === this.element && ( this.name === 'style' || this.name === 'class' || this.style || this.inlineClass ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !this.rendered && this.owner === this.element && ( !this.name.indexOf( 'style-' ) || !this.name.indexOf( 'class-' ) ) ) {\n\t\t\tif ( !this.name.indexOf( 'style-' ) ) {\n\t\t\t\tthis.style = hyphenateCamel( this.name.substr( 6 ) );\n\t\t\t} else {\n\t\t\t\tthis.inlineClass = this.name.substr( 6 );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( booleanAttributes.test( this.name ) ) { return value ? this.name : ''; }\n\t\tif ( value == null ) { return ''; }\n\n\t\tvar str = safeAttributeString( this.getString() );\n\t\treturn str ?\n\t\t\t((this.name) + \""=\\\""\"" + str + \""\\\""\"") :\n\t\t\tthis.name;\n\t};\n\n\tAttribute.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tAttribute.prototype.unrender = function unrender () {\n\t\tthis.updateDelegate( true );\n\n\t\tthis.rendered = false;\n\t};\n\n\tAttribute.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tif ( this.rendered ) { this.updateDelegate(); }\n\t\t\tif ( this.isTwoway && !this.locked ) {\n\t\t\t\tthis.interpolator.twowayBinding.lastVal( true, this.interpolator.model.get() );\n\t\t\t}\n\t\t}\n\t};\n\n\treturn Attribute;\n}(Item));\n\nvar BindingFlag = (function (Item$$1) {\n\tfunction BindingFlag ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\t\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\t\tthis.flag = options.template.v === 'l' ? 'lazy' : 'twoway';\n\n\t\tif ( this.element.type === ELEMENT ) {\n\t\t\tif ( Array.isArray( options.template.f ) ) {\n\t\t\t\tthis.fragment = new Fragment({\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: options.template.f\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.interpolator = this.fragment &&\n\t\t\t\t\t\t\t\tthis.fragment.items.length === 1 &&\n\t\t\t\t\t\t\t\tthis.fragment.items[0].type === INTERPOLATOR &&\n\t\t\t\t\t\t\t\tthis.fragment.items[0];\n\t\t}\n\t}\n\n\tif ( Item$$1 ) BindingFlag.__proto__ = Item$$1;\n\tBindingFlag.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tBindingFlag.prototype.constructor = BindingFlag;\n\n\tBindingFlag.prototype.bind = function bind () {\n\t\tif ( this.fragment ) { this.fragment.bind(); }\n\t\tset$3( this, this.getValue(), true );\n\t};\n\n\tBindingFlag.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.element.bubble();\n\t\t\tthis.dirty = true;\n\t\t}\n\t};\n\n\tBindingFlag.prototype.getValue = function getValue () {\n\t\tif ( this.fragment ) { return this.fragment.valueOf(); }\n\t\telse if ( 'value' in this ) { return this.value; }\n\t\telse if ( 'f' in this.template ) { return this.template.f; }\n\t\telse { return true; }\n\t};\n\n\tBindingFlag.prototype.render = function render () {\n\t\tset$3( this, this.getValue(), true );\n\t};\n\n\tBindingFlag.prototype.toString = function toString () { return ''; };\n\n\tBindingFlag.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\n\t\tdelete this.element[ this.flag ];\n\t};\n\n\tBindingFlag.prototype.unrender = function unrender () {\n\t\tif ( this.element.rendered ) { this.element.recreateTwowayBinding(); }\n\t};\n\n\tBindingFlag.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tset$3( this, this.getValue(), true );\n\t\t}\n\t};\n\n\treturn BindingFlag;\n}(Item));\n\nfunction set$3 ( flag, value, update ) {\n\tif ( value === 0 ) {\n\t\tflag.value = true;\n\t} else if ( value === 'true' ) {\n\t\tflag.value = true;\n\t} else if ( value === 'false' || value === '0' ) {\n\t\tflag.value = false;\n\t} else {\n\t\tflag.value = value;\n\t}\n\n\tvar current = flag.element[ flag.flag ];\n\tflag.element[ flag.flag ] = flag.value;\n\tif ( update && !flag.element.attributes.binding && current !== flag.value ) {\n\t\tflag.element.recreateTwowayBinding();\n\t}\n\n\treturn flag.value;\n}\n\nvar div$1 = doc ? createElement( 'div' ) : null;\n\nvar attributes = false;\nfunction inAttributes() { return attributes; }\nfunction doInAttributes( fn ) {\n\tattributes = true;\n\tfn();\n\tattributes = false;\n}\n\nvar ConditionalAttribute = (function (Item$$1) {\n\tfunction ConditionalAttribute ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.attributes = [];\n\n\t\tthis.owner = options.owner;\n\n\t\tthis.fragment = new Fragment({\n\t\t\tractive: this.ractive,\n\t\t\towner: this,\n\t\t\ttemplate: this.template\n\t\t});\n\t\t// this fragment can't participate in node-y things\n\t\tthis.fragment.findNextNode = noop;\n\n\t\tthis.dirty = false;\n\t}\n\n\tif ( Item$$1 ) ConditionalAttribute.__proto__ = Item$$1;\n\tConditionalAttribute.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tConditionalAttribute.prototype.constructor = ConditionalAttribute;\n\n\tConditionalAttribute.prototype.bind = function bind () {\n\t\tthis.fragment.bind();\n\t};\n\n\tConditionalAttribute.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.owner.bubble();\n\t\t}\n\t};\n\n\tConditionalAttribute.prototype.render = function render () {\n\t\tthis.node = this.owner.node;\n\t\tif ( this.node ) {\n\t\t\tthis.isSvg = this.node.namespaceURI === svg$1;\n\t\t}\n\n\t\tattributes = true;\n\t\tif ( !this.rendered ) { this.fragment.render(); }\n\t\tattributes = false;\n\n\t\tthis.rendered = true;\n\t\tthis.dirty = true; // TODO this seems hacky, but necessary for tests to pass in browser AND node.js\n\t\tthis.update();\n\t};\n\n\tConditionalAttribute.prototype.toString = function toString () {\n\t\treturn this.fragment.toString();\n\t};\n\n\tConditionalAttribute.prototype.unbind = function unbind () {\n\t\tthis.fragment.unbind();\n\t};\n\n\tConditionalAttribute.prototype.unrender = function unrender () {\n\t\tthis.rendered = false;\n\t\tthis.fragment.unrender();\n\t};\n\n\tConditionalAttribute.prototype.update = function update () {\n\t\tvar this$1 = this;\n\n\t\tvar str;\n\t\tvar attrs;\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tattributes = true;\n\t\t\tthis.fragment.update();\n\t\t\tattributes = false;\n\n\t\t\tif ( this.rendered && this.node ) {\n\t\t\t\tstr = this.fragment.toString();\n\t\t\t\tattrs = parseAttributes( str, this.isSvg );\n\n\t\t\t\t// any attributes that previously existed but no longer do\n\t\t\t\t// must be removed\n\t\t\t\tthis.attributes.filter( function (a) { return notIn( attrs, a ); } ).forEach( function (a) {\n\t\t\t\t\tthis$1.node.removeAttribute( a.name );\n\t\t\t\t});\n\n\t\t\t\tattrs.forEach( function (a) {\n\t\t\t\t\tthis$1.node.setAttribute( a.name, a.value );\n\t\t\t\t});\n\n\t\t\t\tthis.attributes = attrs;\n\t\t\t}\n\t\t}\n\t};\n\n\treturn ConditionalAttribute;\n}(Item));\n\nfunction parseAttributes ( str, isSvg ) {\n\tvar tagName = isSvg ? 'svg' : 'div';\n\treturn str\n\t\t? (div$1.innerHTML = \""<\"" + tagName + \"" \"" + str + \""></\"" + tagName + \"">\"") &&\n\t\t\ttoArray(div$1.childNodes[0].attributes)\n\t\t: [];\n}\n\nfunction notIn ( haystack, needle ) {\n\tvar i = haystack.length;\n\n\twhile ( i-- ) {\n\t\tif ( haystack[i].name === needle.name ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nvar processWrapper = function ( wrapper, array, methodName, newIndices ) {\n\tvar __model = wrapper.__model;\n\n\tif ( newIndices ) {\n\t\t__model.shuffle( newIndices );\n\t} else {\n\t\t// If this is a sort or reverse, we just do root.set()...\n\t\t// TODO use merge logic?\n\t\t//root.viewmodel.mark( keypath );\n\t}\n};\n\nvar mutatorMethods = [ 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift' ];\nvar patchedArrayProto = [];\n\nmutatorMethods.forEach( function (methodName) {\n\tvar method = function () {\n\t\tvar this$1 = this;\n\t\tvar args = [], len = arguments.length;\n\t\twhile ( len-- ) args[ len ] = arguments[ len ];\n\n\t\tvar newIndices = getNewIndices( this.length, methodName, args );\n\n\t\t// lock any magic array wrappers, so that things don't get fudged\n\t\tthis._ractive.wrappers.forEach( function (r) { if ( r.magic ) { r.magic.locked = true; } } );\n\n\t\t// apply the underlying method\n\t\tvar result = Array.prototype[ methodName ].apply( this, arguments );\n\n\t\t// trigger changes\n\t\trunloop.start();\n\n\t\tthis._ractive.setting = true;\n\t\tvar i = this._ractive.wrappers.length;\n\t\twhile ( i-- ) {\n\t\t\tprocessWrapper( this$1._ractive.wrappers[i], this$1, methodName, newIndices );\n\t\t}\n\n\t\trunloop.end();\n\n\t\tthis._ractive.setting = false;\n\n\t\t// unlock the magic arrays... magic... bah\n\t\tthis._ractive.wrappers.forEach( function (r) { if ( r.magic ) { r.magic.locked = false; } } );\n\n\t\treturn result;\n\t};\n\n\tObject.defineProperty( patchedArrayProto, methodName, {\n\t\tvalue: method,\n\t\tconfigurable: true\n\t});\n});\n\nvar patchArrayMethods;\nvar unpatchArrayMethods;\n\n// can we use prototype chain injection?\n// http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/#wrappers_prototype_chain_injection\nif ( ({}).__proto__ ) {\n\t// yes, we can\n\tpatchArrayMethods = function (array) { return array.__proto__ = patchedArrayProto; };\n\tunpatchArrayMethods = function (array) { return array.__proto__ = Array.prototype; };\n}\n\nelse {\n\t// no, we can't\n\tpatchArrayMethods = function (array) {\n\t\tvar i = mutatorMethods.length;\n\t\twhile ( i-- ) {\n\t\t\tvar methodName = mutatorMethods[i];\n\t\t\tObject.defineProperty( array, methodName, {\n\t\t\t\tvalue: patchedArrayProto[ methodName ],\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t}\n\t};\n\n\tunpatchArrayMethods = function (array) {\n\t\tvar i = mutatorMethods.length;\n\t\twhile ( i-- ) {\n\t\t\tdelete array[ mutatorMethods[i] ];\n\t\t}\n\t};\n}\n\npatchArrayMethods.unpatch = unpatchArrayMethods; // TODO export separately?\nvar patch = patchArrayMethods;\n\nvar errorMessage$1 = 'Something went wrong in a rather interesting way';\n\nvar arrayAdaptor = {\n\tfilter: function filter ( object ) {\n\t\t// wrap the array if a) b) it's an array, and b) either it hasn't been wrapped already,\n\t\t// or the array didn't trigger the get() itself\n\t\treturn Array.isArray( object ) && ( !object._ractive || !object._ractive.setting );\n\t},\n\twrap: function wrap ( ractive, array, keypath ) {\n\t\treturn new ArrayWrapper( ractive, array, keypath );\n\t}\n};\n\nvar ArrayWrapper = function ArrayWrapper ( ractive, array ) {\n\tthis.root = ractive;\n\tthis.value = array;\n\tthis.__model = null; // filled in later\n\n\t// if this array hasn't already been ractified, ractify it\n\tif ( !array._ractive ) {\n\t\t// define a non-enumerable _ractive property to store the wrappers\n\t\tObject.defineProperty( array, '_ractive', {\n\t\t\tvalue: {\n\t\t\t\twrappers: [],\n\t\t\t\tinstances: [],\n\t\t\t\tsetting: false\n\t\t\t},\n\t\t\tconfigurable: true\n\t\t});\n\n\t\tpatch( array );\n\t}\n\n\t// store the ractive instance, so we can handle transitions later\n\tif ( !array._ractive.instances[ ractive._guid ] ) {\n\t\tarray._ractive.instances[ ractive._guid ] = 0;\n\t\tarray._ractive.instances.push( ractive );\n\t}\n\n\tarray._ractive.instances[ ractive._guid ] += 1;\n\tarray._ractive.wrappers.push( this );\n};\n\nArrayWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nArrayWrapper.prototype.reset = function reset ( value ) {\n\treturn this.value === value;\n};\n\nArrayWrapper.prototype.teardown = function teardown () {\n\tvar array = this.value;\n\tvar storage = array._ractive;\n\tvar wrappers = storage.wrappers;\n\tvar instances = storage.instances;\n\n\t// if teardown() was invoked because we're clearing the cache as a result of\n\t// a change that the array itself triggered, we can save ourselves the teardown\n\t// and immediate setup\n\tif ( storage.setting ) {\n\t\treturn false; // so that we don't remove it from cached wrappers\n\t}\n\n\tvar index = wrappers.indexOf( this );\n\tif ( index === -1 ) {\n\t\tthrow new Error( errorMessage$1 );\n\t}\n\n\twrappers.splice( index, 1 );\n\n\t// if nothing else depends on this array, we can revert it to its\n\t// natural state\n\tif ( !wrappers.length ) {\n\t\tdelete array._ractive;\n\t\tpatch.unpatch( this.value );\n\t}\n\n\telse {\n\t\t// remove ractive instance if possible\n\t\tinstances[ this.root._guid ] -= 1;\n\t\tif ( !instances[ this.root._guid ] ) {\n\t\t\tindex = instances.indexOf( this.root );\n\n\t\t\tif ( index === -1 ) {\n\t\t\t\tthrow new Error( errorMessage$1 );\n\t\t\t}\n\n\t\t\tinstances.splice( index, 1 );\n\t\t}\n\t}\n};\n\nvar magicAdaptor;\n\ntry {\n\tObject.defineProperty({}, 'test', { get: function get() {}, set: function set() {} });\n\n\tmagicAdaptor = {\n\t\tfilter: function filter ( value ) {\n\t\t\treturn value && typeof value === 'object';\n\t\t},\n\t\twrap: function wrap ( ractive, value, keypath ) {\n\t\t\treturn new MagicWrapper( ractive, value, keypath );\n\t\t}\n\t};\n} catch ( err ) {\n\tmagicAdaptor = false;\n}\n\nvar magicAdaptor$1 = magicAdaptor;\n\nfunction createOrWrapDescriptor ( originalDescriptor, ractive, keypath, wrapper ) {\n\tif ( originalDescriptor.set && originalDescriptor.set.__magic ) {\n\t\toriginalDescriptor.set.__magic.dependants.push({ ractive: ractive, keypath: keypath });\n\t\treturn originalDescriptor;\n\t}\n\n\tvar setting;\n\n\tvar dependants = [{ ractive: ractive, keypath: keypath }];\n\n\tvar descriptor = {\n\t\tget: function get () {\n\t\t\treturn 'value' in originalDescriptor ? originalDescriptor.value : originalDescriptor.get.call( this );\n\t\t},\n\t\tset: function set (value) {\n\t\t\tif ( setting ) { return; }\n\n\t\t\tif ( 'value' in originalDescriptor ) {\n\t\t\t\toriginalDescriptor.value = value;\n\t\t\t} else {\n\t\t\t\toriginalDescriptor.set.call( this, value );\n\t\t\t}\n\n\t\t\tif ( wrapper.locked ) { return; }\n\t\t\tsetting = true;\n\t\t\tdependants.forEach( function (ref) {\n\t\t\t\tvar ractive = ref.ractive;\n\t\t\t\tvar keypath = ref.keypath;\n\n\t\t\t\tractive.set( keypath, value );\n\t\t\t});\n\t\t\tsetting = false;\n\t\t},\n\t\tenumerable: true\n\t};\n\n\tdescriptor.set.__magic = { dependants: dependants, originalDescriptor: originalDescriptor };\n\n\treturn descriptor;\n}\n\nfunction revert ( descriptor, ractive, keypath ) {\n\tif ( !descriptor.set || !descriptor.set.__magic ) { return true; }\n\n\tvar dependants = descriptor.set.__magic;\n\tvar i = dependants.length;\n\twhile ( i-- ) {\n\t\tvar dependant = dependants[i];\n\t\tif ( dependant.ractive === ractive && dependant.keypath === keypath ) {\n\t\t\tdependants.splice( i, 1 );\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nvar MagicWrapper = function MagicWrapper ( ractive, value, keypath ) {\n\tvar this$1 = this;\n\n\tthis.ractive = ractive;\n\tthis.value = value;\n\tthis.keypath = keypath;\n\n\tthis.originalDescriptors = {};\n\n\t// wrap all properties with getters\n\tObject.keys( value ).forEach( function (key) {\n\t\tvar originalDescriptor = Object.getOwnPropertyDescriptor( this$1.value, key );\n\t\tthis$1.originalDescriptors[ key ] = originalDescriptor;\n\n\t\tvar childKeypath = keypath ? (keypath + \"".\"" + (escapeKey( key ))) : escapeKey( key );\n\n\t\tvar descriptor = createOrWrapDescriptor( originalDescriptor, ractive, childKeypath, this$1 );\n\n\n\n\t\tObject.defineProperty( this$1.value, key, descriptor );\n\t});\n};\n\nMagicWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nMagicWrapper.prototype.reset = function reset ( value ) {\n\treturn this.value === value;\n};\n\nMagicWrapper.prototype.set = function set ( key, value ) {\n\tthis.value[ key ] = value;\n};\n\nMagicWrapper.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\tObject.keys( this.value ).forEach( function (key) {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor( this$1.value, key );\n\t\tif ( !descriptor.set || !descriptor.set.__magic ) { return; }\n\n\t\trevert( descriptor );\n\n\t\tif ( descriptor.set.__magic.dependants.length === 1 ) {\n\t\t\tObject.defineProperty( this$1.value, key, descriptor.set.__magic.originalDescriptor );\n\t\t}\n\t});\n};\n\nvar MagicArrayWrapper = function MagicArrayWrapper ( ractive, array, keypath ) {\n\tthis.value = array;\n\n\tthis.magic = true;\n\n\tthis.magicWrapper = magicAdaptor$1.wrap( ractive, array, keypath );\n\tthis.arrayWrapper = arrayAdaptor.wrap( ractive, array, keypath );\n\tthis.arrayWrapper.magic = this.magicWrapper;\n\n\t// ugh, this really is a terrible hack\n\tObject.defineProperty( this, '__model', {\n\t\tget: function get () {\n\t\t\treturn this.arrayWrapper.__model;\n\t\t},\n\t\tset: function set ( model ) {\n\t\t\tthis.arrayWrapper.__model = model;\n\t\t}\n\t});\n};\n\nMagicArrayWrapper.prototype.get = function get () {\n\treturn this.value;\n};\n\nMagicArrayWrapper.prototype.teardown = function teardown () {\n\tthis.arrayWrapper.teardown();\n\tthis.magicWrapper.teardown();\n};\n\nMagicArrayWrapper.prototype.reset = function reset ( value ) {\n\treturn this.arrayWrapper.reset( value ) && this.magicWrapper.reset( value );\n};\n\nvar magicArrayAdaptor = {\n\tfilter: function filter ( object, keypath, ractive ) {\n\t\treturn magicAdaptor$1.filter( object, keypath, ractive ) && arrayAdaptor.filter( object );\n\t},\n\n\twrap: function wrap ( ractive, array, keypath ) {\n\t\treturn new MagicArrayWrapper( ractive, array, keypath );\n\t}\n};\n\nvar RactiveModel = (function (Model$$1) {\n\tfunction RactiveModel ( ractive ) {\n\t\tModel$$1.call( this, null, '' );\n\t\tthis.value = ractive;\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.adaptors = [];\n\t\tthis.ractive = ractive;\n\t\tthis.changes = {};\n\t}\n\n\tif ( Model$$1 ) RactiveModel.__proto__ = Model$$1;\n\tRactiveModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tRactiveModel.prototype.constructor = RactiveModel;\n\n\tRactiveModel.prototype.joinKey = function joinKey ( key ) {\n\t\tvar model = Model$$1.prototype.joinKey.call( this, key );\n\n\t\tif ( ( key === 'root' || key === 'parent' ) && !model.isLink ) { return initLink( model, key ); }\n\t\telse if ( key === 'data' ) { return this.ractive.viewmodel; }\n\n\t\treturn model;\n\t};\n\n\tRactiveModel.prototype.getKeypath = function getKeypath () {\n\t\treturn '@this';\n\t};\n\n\tRactiveModel.prototype.retrieve = function retrieve () {\n\t\treturn this.ractive;\n\t};\n\n\treturn RactiveModel;\n}(Model));\n\nfunction initLink ( model, key ) {\n\tmodel.applyValue = function ( value ) {\n\t\tthis.parent.value[ key ] = value;\n\t\tif ( value && value.viewmodel ) {\n\t\t\tthis.link( value.viewmodel.getRactiveModel(), key );\n\t\t\tthis._link.markedAll();\n\t\t} else {\n\t\t\tthis.link( Object.create( Missing ), key );\n\t\t\tthis._link.markedAll();\n\t\t}\n\t};\n\n\tmodel.applyValue( model.parent.ractive[ key ], key );\n\tmodel._link.set = function (v) { return model.applyValue( v ); };\n\tmodel._link.applyValue = function (v) { return model.applyValue( v ); };\n\treturn model._link;\n}\n\nvar hasProp$1 = Object.prototype.hasOwnProperty;\n\nvar RootModel = (function (Model$$1) {\n\tfunction RootModel ( options ) {\n\t\tModel$$1.call( this, null, null );\n\n\t\t// TODO deprecate this\n\t\tthis.changes = {};\n\n\t\tthis.isRoot = true;\n\t\tthis.root = this;\n\t\tthis.ractive = options.ractive; // TODO sever this link\n\n\t\tthis.value = options.data;\n\t\tthis.adaptors = options.adapt;\n\t\tthis.adapt();\n\n\t\tthis.computationContext = options.ractive;\n\t\tthis.computations = {};\n\t}\n\n\tif ( Model$$1 ) RootModel.__proto__ = Model$$1;\n\tRootModel.prototype = Object.create( Model$$1 && Model$$1.prototype );\n\tRootModel.prototype.constructor = RootModel;\n\n\tRootModel.prototype.attached = function attached ( fragment ) {\n\t\tattachImplicits( this, fragment );\n\t};\n\n\tRootModel.prototype.compute = function compute ( key, signature ) {\n\t\tvar computation = new Computation( this, signature, key );\n\t\tthis.computations[ escapeKey( key ) ] = computation;\n\n\t\treturn computation;\n\t};\n\n\tRootModel.prototype.createLink = function createLink ( keypath, target, targetPath, options ) {\n\t\tvar this$1 = this;\n\n\t\tvar keys = splitKeypath( keypath );\n\n\t\tvar model = this;\n\t\twhile ( keys.length ) {\n\t\t\tvar key = keys.shift();\n\t\t\tmodel = this$1.childByKey[ key ] || this$1.joinKey( key );\n\t\t}\n\n\t\treturn model.link( target, targetPath, options );\n\t};\n\n\tRootModel.prototype.detached = function detached () {\n\t\tdetachImplicits( this );\n\t};\n\n\tRootModel.prototype.get = function get ( shouldCapture, options ) {\n\t\tvar this$1 = this;\n\n\t\tif ( shouldCapture ) { capture( this ); }\n\n\t\tif ( !options || options.virtual !== false ) {\n\t\t\tvar result = this.getVirtual();\n\t\t\tvar keys = Object.keys( this.computations );\n\t\t\tvar i = keys.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tresult[ keys[i] ] = this$1.computations[ keys[i] ].get();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn this.value;\n\t\t}\n\t};\n\n\tRootModel.prototype.getKeypath = function getKeypath () {\n\t\treturn '';\n\t};\n\n\tRootModel.prototype.getRactiveModel = function getRactiveModel () {\n\t\treturn this.ractiveModel || ( this.ractiveModel = new RactiveModel( this.ractive ) );\n\t};\n\n\tRootModel.prototype.getValueChildren = function getValueChildren () {\n\t\tvar this$1 = this;\n\n\t\tvar children = Model$$1.prototype.getValueChildren.call( this, this.value );\n\n\t\tthis.children.forEach( function (child) {\n\t\t\tif ( child._link ) {\n\t\t\t\tvar idx = children.indexOf( child );\n\t\t\t\tif ( ~idx ) { children.splice( idx, 1, child._link ); }\n\t\t\t\telse { children.push( child._link ); }\n\t\t\t}\n\t\t});\n\n\t\tfor ( var k in this.computations ) {\n\t\t\tchildren.push( this$1.computations[k] );\n\t\t}\n\n\t\treturn children;\n\t};\n\n\tRootModel.prototype.has = function has ( key ) {\n\t\tvar value = this.value;\n\t\tvar unescapedKey = unescapeKey( key );\n\n\t\tif ( unescapedKey === '@this' || unescapedKey === '@global' || unescapedKey === '@shared' ) { return true; }\n\t\tif ( unescapedKey[0] === '~' && unescapedKey[1] === '/' ) { unescapedKey = unescapedKey.slice( 2 ); }\n\t\tif ( hasProp$1.call( value, unescapedKey ) ) { return true; }\n\n\t\t// mappings/links and computations\n\t\tif ( key in this.computations || this.childByKey[unescapedKey] && this.childByKey[unescapedKey]._link ) { return true; }\n\n\t\t// We climb up the constructor chain to find if one of them contains the unescapedKey\n\t\tvar constructor = value.constructor;\n\t\twhile ( constructor !== Function && constructor !== Array && constructor !== Object ) {\n\t\t\tif ( hasProp$1.call( constructor.prototype, unescapedKey ) ) { return true; }\n\t\t\tconstructor = constructor.constructor;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tRootModel.prototype.joinKey = function joinKey ( key, opts ) {\n\t\tif ( key[0] === '@' ) {\n\t\t\tif ( key === '@this' || key === '@' ) { return this.getRactiveModel(); }\n\t\t\tif ( key === '@global' ) { return GlobalModel; }\n\t\t\tif ( key === '@shared' ) { return SharedModel$1; }\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key[0] === '~' && key[1] === '/' ) { key = key.slice( 2 ); }\n\n\t\treturn this.computations.hasOwnProperty( key ) ? this.computations[ key ] :\n\t\t       Model$$1.prototype.joinKey.call( this, key, opts );\n\t};\n\n\t// TODO: this should go away\n\tRootModel.prototype.map = function map ( localKey, origin, options ) {\n\t\tvar local = this.joinKey( localKey );\n\t\tlocal.link( origin, localKey, options );\n\t};\n\n\tRootModel.prototype.set = function set ( value ) {\n\t\t// TODO wrapping root node is a baaaad idea. We should prevent this\n\t\tvar wrapper = this.wrapper;\n\t\tif ( wrapper ) {\n\t\t\tvar shouldTeardown = !wrapper.reset || wrapper.reset( value ) === false;\n\n\t\t\tif ( shouldTeardown ) {\n\t\t\t\twrapper.teardown();\n\t\t\t\tthis.wrapper = null;\n\t\t\t\tthis.value = value;\n\t\t\t\tthis.adapt();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.value = value;\n\t\t\tthis.adapt();\n\t\t}\n\n\t\tthis.deps.forEach( handleChange$1$1 );\n\t\tthis.children.forEach( mark$1$1 );\n\t\tthis.clearUnresolveds(); // TODO do we need to do this with primitive values? if not, what about e.g. unresolved `length` property of null -> string?\n\t};\n\n\tRootModel.prototype.retrieve = function retrieve () {\n\t\treturn this.wrapper ? this.wrapper.get() : this.value;\n\t};\n\n\tRootModel.prototype.teardown = function teardown () {\n\t\tvar this$1 = this;\n\n\t\tModel$$1.prototype.teardown.call(this);\n\t\tfor ( var k in this.computations ) {\n\t\t\tthis$1.computations[ k ].teardown();\n\t\t}\n\t};\n\n\treturn RootModel;\n}(Model));\n\nRootModel.prototype.update = noop;\n\nfunction attachImplicits ( model, fragment ) {\n\tif ( model._link && model._link.implicit && model._link.isDetached() ) {\n\t\tmodel.attach( fragment );\n\t}\n\n\t// look for unresolveds\n\tvar i = model.unresolved.length;\n\twhile ( i-- ) {\n\t\tvar mdl = resolveReference( fragment, model.unresolved[i] );\n\t\tif ( mdl ) {\n\t\t\tmodel.joinKey( mdl.key ).link( mdl, mdl.key, { implicit: true } );\n\t\t}\n\t}\n\n\t// look for virtual children to relink and cascade\n\tfor ( var k in model.childByKey ) {\n\t\tif ( k in model.value ) {\n\t\t\tattachImplicits( model.childByKey[k], fragment );\n\t\t} else if ( !model.childByKey[k]._link || model.childByKey[k]._link.isDetached() ) {\n\t\t\tvar mdl$1 = resolveReference( fragment, k );\n\t\t\tif ( mdl$1 ) {\n\t\t\t\tmodel.childByKey[k].link( mdl$1, k, { implicit: true } );\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction detachImplicits ( model ) {\n\tif ( model._link && model._link.implicit ) {\n\t\tmodel.unlink();\n\t}\n\n\tfor ( var k in model.childByKey ) {\n\t\tdetachImplicits( model.childByKey[k] );\n\t}\n}\n\nfunction getComputationSignature ( ractive, key, signature ) {\n\tvar getter;\n\tvar setter;\n\n\t// useful for debugging\n\tvar getterString;\n\tvar getterUseStack;\n\tvar setterString;\n\n\tif ( typeof signature === 'function' ) {\n\t\tgetter = bind$2( signature, ractive );\n\t\tgetterString = signature.toString();\n\t\tgetterUseStack = true;\n\t}\n\n\tif ( typeof signature === 'string' ) {\n\t\tgetter = createFunctionFromString( signature, ractive );\n\t\tgetterString = signature;\n\t}\n\n\tif ( typeof signature === 'object' ) {\n\t\tif ( typeof signature.get === 'string' ) {\n\t\t\tgetter = createFunctionFromString( signature.get, ractive );\n\t\t\tgetterString = signature.get;\n\t\t} else if ( typeof signature.get === 'function' ) {\n\t\t\tgetter = bind$2( signature.get, ractive );\n\t\t\tgetterString = signature.get.toString();\n\t\t\tgetterUseStack = true;\n\t\t} else {\n\t\t\tfatal( '`%s` computation must have a `get()` method', key );\n\t\t}\n\n\t\tif ( typeof signature.set === 'function' ) {\n\t\t\tsetter = bind$2( signature.set, ractive );\n\t\t\tsetterString = signature.set.toString();\n\t\t}\n\t}\n\n\treturn {\n\t\tgetter: getter,\n\t\tsetter: setter,\n\t\tgetterString: getterString,\n\t\tsetterString: setterString,\n\t\tgetterUseStack: getterUseStack\n\t};\n}\n\nvar constructHook = new Hook( 'construct' );\n\nvar registryNames$1 = [\n\t'adaptors',\n\t'components',\n\t'decorators',\n\t'easing',\n\t'events',\n\t'interpolators',\n\t'partials',\n\t'transitions'\n];\n\nvar uid = 0;\n\nfunction construct ( ractive, options ) {\n\tif ( Ractive.DEBUG ) { welcome(); }\n\n\tinitialiseProperties( ractive );\n\n\t// TODO don't allow `onconstruct` with `new Ractive()`, there's no need for it\n\tconstructHook.fire( ractive, options );\n\n\t// Add registries\n\tvar i = registryNames$1.length;\n\twhile ( i-- ) {\n\t\tvar name = registryNames$1[ i ];\n\t\tractive[ name ] = Object.assign( Object.create( ractive.constructor[ name ] || null ), options[ name ] );\n\t}\n\n\t// Create a viewmodel\n\tvar viewmodel = new RootModel({\n\t\tadapt: getAdaptors( ractive, ractive.adapt, options ),\n\t\tdata: dataConfigurator.init( ractive.constructor, ractive, options ),\n\t\tractive: ractive\n\t});\n\n\tractive.viewmodel = viewmodel;\n\n\t// Add computed properties\n\tvar computed = Object.assign( Object.create( ractive.constructor.prototype.computed ), options.computed );\n\n\tfor ( var key in computed ) {\n\t\tif ( key === '__proto__' ) { continue; }\n\t\tvar signature = getComputationSignature( ractive, key, computed[ key ] );\n\t\tviewmodel.compute( key, signature );\n\t}\n}\n\nfunction getAdaptors ( ractive, protoAdapt, options ) {\n\tprotoAdapt = protoAdapt.map( lookup );\n\tvar adapt = ensureArray( options.adapt ).map( lookup );\n\n\tvar builtins = [];\n\tvar srcs = [ protoAdapt, adapt ];\n\tif ( ractive.parent && !ractive.isolated ) {\n\t\tsrcs.push( ractive.parent.viewmodel.adaptors );\n\t}\n\tsrcs.push( builtins );\n\n\tvar magic$$1 = 'magic' in options ? options.magic : ractive.magic;\n\tvar modifyArrays = 'modifyArrays' in options ? options.modifyArrays : ractive.modifyArrays;\n\n\tif ( magic$$1 ) {\n\t\tif ( !magic ) {\n\t\t\tthrow new Error( 'Getters and setters (magic mode) are not supported in this browser' );\n\t\t}\n\n\t\tif ( modifyArrays ) {\n\t\t\tbuiltins.push( magicArrayAdaptor );\n\t\t}\n\n\t\tbuiltins.push( magicAdaptor$1 );\n\t}\n\n\tif ( modifyArrays ) {\n\t\tbuiltins.push( arrayAdaptor );\n\t}\n\n\treturn combine.apply( null, srcs );\n\n\n\tfunction lookup ( adaptor ) {\n\t\tif ( typeof adaptor === 'string' ) {\n\t\t\tadaptor = findInViewHierarchy( 'adaptors', ractive, adaptor );\n\n\t\t\tif ( !adaptor ) {\n\t\t\t\tfatal( missingPlugin( adaptor, 'adaptor' ) );\n\t\t\t}\n\t\t}\n\n\t\treturn adaptor;\n\t}\n}\n\nfunction initialiseProperties ( ractive ) {\n\t// Generate a unique identifier, for places where you'd use a weak map if it\n\t// existed\n\tractive._guid = 'r-' + uid++;\n\n\t// events\n\tractive._subs = Object.create( null );\n\tractive._nsSubs = 0;\n\n\t// storage for item configuration from instantiation to reset,\n\t// like dynamic functions or original values\n\tractive._config = {};\n\n\t// events\n\tractive.event = null;\n\tractive._eventQueue = [];\n\n\t// live queries\n\tractive._liveQueries = [];\n\tractive._liveComponentQueries = [];\n\n\t// observers\n\tractive._observers = [];\n\n\t// external children\n\tractive._children = [];\n\tractive._children.byName = {};\n\tractive.children = ractive._children;\n\n\tif ( !ractive.component ) {\n\t\tractive.root = ractive;\n\t\tractive.parent = ractive.container = null; // TODO container still applicable?\n\t}\n}\n\nvar teardownHook = new Hook( 'teardown' );\nvar destructHook = new Hook( 'destruct' );\n\n// Teardown. This goes through the root fragment and all its children, removing observers\n// and generally cleaning up after itself\n\nfunction Ractive$teardown () {\n\tvar this$1 = this;\n\n\tif ( this.torndown ) {\n\t\twarnIfDebug( 'ractive.teardown() was called on a Ractive instance that was already torn down' );\n\t\treturn Promise.resolve();\n\t}\n\n\tthis.shouldDestroy = true;\n\treturn teardown$2( this, function () { return this$1.fragment.rendered ? this$1.unrender() : Promise.resolve(); } );\n}\n\nfunction teardown$2 ( instance, getPromise ) {\n\tinstance.torndown = true;\n\tinstance.viewmodel.teardown();\n\tinstance.fragment.unbind();\n\tinstance._observers.slice().forEach( cancel$1 );\n\n\tif ( instance.fragment.rendered && instance.el.__ractive_instances__ ) {\n\t\tremoveFromArray( instance.el.__ractive_instances__, instance );\n\t}\n\n\tvar promise = getPromise();\n\n\tteardownHook.fire( instance );\n\tpromise.then( function () { return destructHook.fire( instance ); } );\n\n\treturn promise;\n}\n\nfunction makeDirty$1 ( query ) {\n\tquery.makeDirty();\n}\n\nvar Component = (function (Item$$1) {\n\tfunction Component ( options, ComponentConstructor ) {\n\t\tvar this$1 = this;\n\n\t\tItem$$1.call( this, options );\n\t\tthis.isAnchor = this.template.t === ANCHOR;\n\t\tthis.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super\n\n\t\tvar partials = options.template.p || {};\n\t\tif ( !( 'content' in partials ) ) { partials.content = options.template.f || []; }\n\t\tthis._partials = partials; // TEMP\n\n\t\tif ( this.isAnchor ) {\n\t\t\tthis.name = options.template.n;\n\n\t\t\tthis.addChild = addChild$1;\n\t\t\tthis.removeChild = removeChild$1;\n\t\t} else {\n\t\t\tvar instance = Object.create( ComponentConstructor.prototype );\n\n\t\t\tthis.instance = instance;\n\t\t\tthis.name = options.template.e;\n\n\t\t\tif ( instance.el ) {\n\t\t\t\twarnIfDebug( (\""The <\"" + (this.name) + \""> component has a default 'el' property; it has been disregarded\"") );\n\t\t\t}\n\n\t\t\tthis.liveQueries = [];\n\n\t\t\t// find container\n\t\t\tvar fragment = options.parentFragment;\n\t\t\tvar container;\n\t\t\twhile ( fragment ) {\n\t\t\t\tif ( fragment.owner.type === YIELDER ) {\n\t\t\t\t\tcontainer = fragment.owner.container;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tfragment = fragment.parent;\n\t\t\t}\n\n\t\t\t// add component-instance-specific properties\n\t\t\tinstance.parent = this.parentFragment.ractive;\n\t\t\tinstance.container = container || null;\n\t\t\tinstance.root = instance.parent.root;\n\t\t\tinstance.component = this;\n\n\t\t\tconstruct( this.instance, { partials: partials });\n\n\t\t\t// for hackability, this could be an open option\n\t\t\t// for any ractive instance, but for now, just\n\t\t\t// for components and just for ractive...\n\t\t\tinstance._inlinePartials = partials;\n\t\t}\n\n\t\tthis.attributeByName = {};\n\n\t\tthis.events = [];\n\t\tthis.attributes = [];\n\t\tvar leftovers = [];\n\t\t( this.template.m || [] ).forEach( function (template) {\n\t\t\tswitch ( template.t ) {\n\t\t\t\tcase ATTRIBUTE:\n\t\t\t\tcase EVENT:\n\t\t\t\t\tthis$1.attributes.push( createItem({\n\t\t\t\t\t\towner: this$1,\n\t\t\t\t\t\tparentFragment: this$1.parentFragment,\n\t\t\t\t\t\ttemplate: template\n\t\t\t\t\t}) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TRANSITION:\n\t\t\t\tcase BINDING_FLAG:\n\t\t\t\tcase DECORATOR:\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tleftovers.push( template );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif ( leftovers.length ) {\n\t\t\tthis.attributes.push( new ConditionalAttribute({\n\t\t\t\towner: this,\n\t\t\t\tparentFragment: this.parentFragment,\n\t\t\t\ttemplate: leftovers\n\t\t\t}) );\n\t\t}\n\n\t\tthis.eventHandlers = [];\n\t}\n\n\tif ( Item$$1 ) Component.__proto__ = Item$$1;\n\tComponent.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tComponent.prototype.constructor = Component;\n\n\tComponent.prototype.bind = function bind$1 () {\n\t\tif ( !this.isAnchor ) {\n\t\t\tthis.attributes.forEach( bind$1$1 );\n\n\t\t\tinitialise( this.instance, {\n\t\t\t\tpartials: this._partials\n\t\t\t}, {\n\t\t\t\tcssIds: this.parentFragment.cssIds\n\t\t\t});\n\n\t\t\tthis.eventHandlers.forEach( bind$1$1 );\n\n\t\t\tthis.bound = true;\n\t\t}\n\t};\n\n\tComponent.prototype.bubble = function bubble () {\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.parentFragment.bubble();\n\t\t}\n\t};\n\n\tComponent.prototype.destroyed = function destroyed () {\n\t\tif ( !this.isAnchor && this.instance.fragment ) { this.instance.fragment.destroyed(); }\n\t};\n\n\tComponent.prototype.detach = function detach () {\n\t\tif ( this.isAnchor ) {\n\t\t\tif ( this.instance ) { return this.instance.fragment.detach(); }\n\t\t\treturn createDocumentFragment();\n\t\t}\n\n\t\treturn this.instance.fragment.detach();\n\t};\n\n\tComponent.prototype.find = function find ( selector, options ) {\n\t\tif ( this.instance ) { return this.instance.fragment.find( selector, options ); }\n\t};\n\n\tComponent.prototype.findAll = function findAll ( selector, query ) {\n\t\tif ( this.instance ) { this.instance.fragment.findAll( selector, query ); }\n\t};\n\n\tComponent.prototype.findComponent = function findComponent ( name, options ) {\n\t\tif ( !name || this.name === name ) { return this.instance; }\n\n\t\tif ( this.instance.fragment ) {\n\t\t\treturn this.instance.fragment.findComponent( name, options );\n\t\t}\n\t};\n\n\tComponent.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\t\tif ( this.instance && query.test( this ) ) {\n\t\t\tquery.add( this.instance );\n\n\t\t\tif ( query.live ) {\n\t\t\t\tthis.liveQueries.push( query );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.instance ) { this.instance.findAllComponents( name, { _query: query } ); }\n\t};\n\n\tComponent.prototype.firstNode = function firstNode ( skipParent ) {\n\t\tif ( this.instance ) { return this.instance.fragment.firstNode( skipParent ); }\n\t};\n\n\tComponent.prototype.removeFromQuery = function removeFromQuery ( query ) {\n\t\tif ( this.instance ) { query.remove( this.instance ); }\n\t\tremoveFromArray( this.liveQueries, query );\n\t};\n\n\tComponent.prototype.render = function render$1 ( target, occupants ) {\n\t\tif ( this.isAnchor ) {\n\t\t\tthis.target = target;\n\t\t\tif ( !checking.length ) {\n\t\t\t\tchecking.push( this.ractive );\n\t\t\t\trunloop.scheduleTask( checkAnchors, true );\n\t\t\t}\n\t\t} else {\n\t\t\trender$2( this.instance, target, null, occupants );\n\n\t\t\tthis.attributes.forEach( render$1$1 );\n\t\t\tthis.eventHandlers.forEach( render$1$1 );\n\t\t\tupdateLiveQueries$1( this );\n\t\t}\n\t\tthis.rendered = true;\n\t};\n\n\tComponent.prototype.shuffled = function shuffled () {\n\t\tif ( this.instance ) { this.liveQueries.forEach( makeDirty$1 ); }\n\t\tItem$$1.prototype.shuffled.call(this);\n\t};\n\n\tComponent.prototype.toString = function toString () {\n\t\tif ( this.instance ) { return this.instance.toHTML(); }\n\t};\n\n\tComponent.prototype.unbind = function unbind$1 () {\n\t\tif ( !this.isAnchor ) {\n\t\t\tthis.bound = false;\n\n\t\t\tthis.attributes.forEach( unbind$1$1 );\n\n\t\t\tteardown$2( this.instance, function () { return runloop.promise(); } );\n\t\t}\n\t};\n\n\tComponent.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\t\tvar this$1 = this;\n\n\t\tthis.shouldDestroy = shouldDestroy;\n\n\t\tif ( this.isAnchor ) {\n\t\t\tif ( this.item ) { unrenderItem( this, this.item ); }\n\t\t\tthis.target = null;\n\t\t\tif ( !checking.length ) {\n\t\t\t\tchecking.push( this.ractive );\n\t\t\t\trunloop.scheduleTask( checkAnchors, true );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.instance.unrender();\n\t\t\tthis.instance.el = this.instance.target = null;\n\t\t\tthis.attributes.forEach( unrender$1$1 );\n\t\t\tthis.eventHandlers.forEach( unrender$1$1 );\n\n\t\t\tthis.liveQueries.forEach( function (query) { return query.remove( this$1.instance ); } );\n\t\t\tthis.liveQueries = [];\n\t\t}\n\n\t\tthis.rendered = false;\n\t};\n\n\tComponent.prototype.update = function update$1 () {\n\t\tthis.dirty = false;\n\t\tif ( this.instance ) {\n\t\t\tthis.instance.fragment.update();\n\t\t\tthis.attributes.forEach( update$1$1 );\n\t\t\tthis.eventHandlers.forEach( update$1$1 );\n\t\t}\n\t};\n\n\treturn Component;\n}(Item));\n\nfunction addChild$1 ( meta ) {\n\tif ( this.item ) { this.removeChild( this.item ); }\n\n\tvar child = meta.instance;\n\tmeta.anchor = this;\n\n\tmeta.parentFragment = this.parentFragment;\n\tmeta.name = meta.nameOption || this.name;\n\tthis.name = meta.name;\n\n\n\tif ( !child.isolated ) { child.viewmodel.attached( this.parentFragment ); }\n\n\t// render as necessary\n\tif ( this.rendered ) {\n\t\trenderItem( this, meta );\n\t}\n}\n\nfunction removeChild$1 ( meta ) {\n\t// unrender as necessary\n\tif ( this.item === meta ) {\n\t\tunrenderItem( this, meta );\n\t\tthis.name = this.template.n;\n\t}\n}\n\nfunction renderItem ( anchor, meta ) {\n\tif ( !anchor.rendered ) { return; }\n\n\tmeta.shouldDestroy = false;\n\tmeta.parentFragment = anchor.parentFragment;\n\n\tanchor.item = meta;\n\tanchor.instance = meta.instance;\n\tanchor.liveQueries = meta.liveQueries;\n\tvar nextNode = anchor.parentFragment.findNextNode( anchor );\n\n\tif ( meta.instance.fragment.rendered ) {\n\t\tmeta.instance.unrender();\n\t}\n\n\tmeta.partials = meta.instance.partials;\n\tmeta.instance.partials = Object.assign( {}, meta.partials, anchor._partials );\n\n\tmeta.instance.fragment.unbind();\n\tmeta.instance.fragment.bind( meta.instance.viewmodel );\n\n\tanchor.attributes.forEach( bind$1$1 );\n\tanchor.eventHandlers.forEach( bind$1$1 );\n\tanchor.attributes.forEach( render$1$1 );\n\tanchor.eventHandlers.forEach( render$1$1 );\n\n\tvar target = anchor.parentFragment.findParentNode();\n\trender$2( meta.instance, target, target.contains( nextNode ) ? nextNode : null );\n\n\tif ( meta.lastBound !== anchor ) {\n\t\tmeta.lastBound = anchor;\n\t}\n\n\tupdateLiveQueries$1( meta );\n}\n\nfunction unrenderItem ( anchor, meta ) {\n\tif ( !anchor.rendered ) { return; }\n\n\tmeta.shouldDestroy = true;\n\tmeta.instance.unrender();\n\n\tanchor.eventHandlers.forEach( unrender$1$1 );\n\tanchor.attributes.forEach( unrender$1$1 );\n\tanchor.eventHandlers.forEach( unbind$1$1 );\n\tanchor.attributes.forEach( unbind$1$1 );\n\n\tmeta.instance.el = meta.instance.anchor = null;\n\tmeta.parentFragment = null;\n\tmeta.anchor = null;\n\tanchor.item = null;\n\tanchor.instance = null;\n\n\tmeta.liveQueries.forEach( function (q) { return q.remove( meta.instance ); } );\n\tmeta.liveQueries = [];\n\tanchor.liveQueries = null;\n}\n\nvar checking = [];\nfunction checkAnchors () {\n\tvar list = checking;\n\tchecking = [];\n\n\tlist.forEach( updateAnchors );\n}\n\nfunction setupArgsFn ( item, template, fragment, opts ) {\n\tif ( opts === void 0 ) opts = {};\n\n\tif ( template && template.f && template.f.s ) {\n\t\titem.fn = getFunction( template.f.s, template.f.r.length );\n\t\tif ( opts.register === true ) {\n\t\t\titem.models = resolveArgs( item, template, fragment, opts );\n\t\t}\n\t}\n}\n\nfunction resolveArgs ( item, template, fragment, opts ) {\n\tif ( opts === void 0 ) opts = {};\n\n\tif ( opts.register === true ) {\n\t\titem.resolvers = [];\n\t}\n\treturn template.f.r.map( function ( ref, i ) {\n\t\tvar resolver, model;\n\n\t\tif ( opts.specialRef && ( model = opts.specialRef( ref, i ) ) ) { return model; }\n\n\t\tmodel = resolveReference( fragment, ref );\n\t\tif ( opts.register === true ) {\n\t\t\tif ( !model ) {\n\t\t\t\tresolver = fragment.resolve( ref, function (model) {\n\t\t\t\t\titem.models[i] = model;\n\t\t\t\t\tremoveFromArray( item.resolvers, resolver );\n\t\t\t\t\tmodel.register( item );\n\t\t\t\t});\n\n\t\t\t\titem.resolvers.push( resolver );\n\t\t\t} else { model.register( item ); }\n\t\t}\n\n\t\treturn model;\n\t});\n}\n\nfunction teardownArgsFn ( item, template ) {\n\tif ( template && template.f && template.f.s ) {\n\t\tif ( item.resolvers ) { item.resolvers.forEach( unbind$1$1 ); }\n\t\titem.resolvers = [];\n\n\t\tif ( item.models ) { item.models.forEach( function (m) {\n\t\t\tif ( m && m.unregister ) { m.unregister( item ); }\n\t\t}); }\n\t\titem.models = null;\n\t}\n}\n\nvar missingDecorator = {\n\tupdate: noop,\n\tteardown: noop\n};\n\nvar Decorator = function Decorator ( options ) {\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\tthis.parentFragment = this.owner.parentFragment;\n\tthis.ractive = this.owner.ractive;\n\tvar template = this.template = options.template;\n\n\tthis.name = template.n;\n\n\tthis.node = null;\n\tthis.intermediary = null;\n\n\tthis.element.decorators.push( this );\n};\n\nDecorator.prototype.bind = function bind () {\n\tsetupArgsFn( this, this.template, this.parentFragment, { register: true } );\n};\n\nDecorator.prototype.bubble = function bubble () {\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\t\tthis.owner.bubble();\n\t}\n};\n\nDecorator.prototype.destroyed = function destroyed () {\n\tif ( this.intermediary ) { this.intermediary.teardown(); }\n\tthis.shouldDestroy = true;\n};\n\nDecorator.prototype.handleChange = function handleChange () { this.bubble(); };\n\nDecorator.prototype.rebind = function rebind ( next, previous, safe ) {\n\tvar idx = this.models.indexOf( previous );\n\tif ( !~idx ) { return; }\n\n\tnext = rebindMatch( this.template.f.r[ idx ], next, previous );\n\tif ( next === previous ) { return; }\n\n\tprevious.unregister( this );\n\tthis.models.splice( idx, 1, next );\n\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\n\tif ( !safe ) { this.bubble(); }\n};\n\nDecorator.prototype.render = function render () {\n\t\tvar this$1 = this;\n\n\trunloop.scheduleTask( function () {\n\t\tvar fn = findInViewHierarchy( 'decorators', this$1.ractive, this$1.name );\n\n\t\tif ( !fn ) {\n\t\t\twarnOnce( missingPlugin( this$1.name, 'decorator' ) );\n\t\t\tthis$1.intermediary = missingDecorator;\n\t\t\treturn;\n\t\t}\n\n\t\tthis$1.node = this$1.element.node;\n\n\t\tvar args;\n\t\tif ( this$1.fn ) {\n\t\t\targs = this$1.models.map( function (model) {\n\t\t\t\tif ( !model ) { return undefined; }\n\n\t\t\t\treturn model.get();\n\t\t\t});\n\t\t\targs = this$1.fn.apply( this$1.ractive, args );\n\t\t}\n\n\t\tthis$1.intermediary = fn.apply( this$1.ractive, [ this$1.node ].concat( args ) );\n\n\t\tif ( !this$1.intermediary || !this$1.intermediary.teardown ) {\n\t\t\tthrow new Error( (\""The '\"" + (this$1.name) + \""' decorator must return an object with a teardown method\"") );\n\t\t}\n\n\t\t// watch out for decorators that cause their host element to be unrendered\n\t\tif ( this$1.shouldDestroy ) { this$1.destroyed(); }\n\t}, true );\n\tthis.rendered = true;\n};\n\nDecorator.prototype.toString = function toString () { return ''; };\n\nDecorator.prototype.unbind = function unbind () {\n\tteardownArgsFn( this, this.template );\n};\n\nDecorator.prototype.unrender = function unrender ( shouldDestroy ) {\n\tif ( ( !shouldDestroy || this.element.rendered ) && this.intermediary ) { this.intermediary.teardown(); }\n\tthis.rendered = false;\n};\n\nDecorator.prototype.update = function update () {\n\tif ( !this.dirty ) { return; }\n\n\tthis.dirty = false;\n\n\tif ( this.intermediary ) {\n\t\tif ( !this.intermediary.update ) {\n\t\t\tthis.unrender();\n\t\t\tthis.render();\n\t\t}\n\t\telse {\n\t\t\tvar args = this.models.map( function (model) { return model && model.get(); } );\n\t\t\tthis.intermediary.update.apply( this.ractive, this.fn.apply( this.ractive, args ) );\n\t\t}\n\t}\n};\n\nvar Doctype = (function (Item$$1) {\n\tfunction Doctype () {\n\t\tItem$$1.apply(this, arguments);\n\t}\n\n\tif ( Item$$1 ) Doctype.__proto__ = Item$$1;\n\tDoctype.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tDoctype.prototype.constructor = Doctype;\n\n\tDoctype.prototype.toString = function toString () {\n\t\treturn '<!DOCTYPE' + this.template.a + '>';\n\t};\n\n\treturn Doctype;\n}(Item));\n\nvar proto$1 = Doctype.prototype;\nproto$1.bind = proto$1.render = proto$1.teardown = proto$1.unbind = proto$1.unrender = proto$1.update = noop;\n\nfunction warnAboutAmbiguity ( description, ractive ) {\n\twarnOnceIfDebug( (\""The \"" + description + \"" being used for two-way binding is ambiguous, and may cause unexpected results. Consider initialising your data to eliminate the ambiguity\""), { ractive: ractive });\n}\n\nvar Binding = function Binding ( element, name ) {\n\tif ( name === void 0 ) name = 'value';\n\n\tthis.element = element;\n\tthis.ractive = element.ractive;\n\tthis.attribute = element.attributeByName[ name ];\n\n\tvar interpolator = this.attribute.interpolator;\n\tinterpolator.twowayBinding = this;\n\n\tvar model = interpolator.model;\n\n\t// not bound?\n\tif ( !model ) {\n\t\t// try to force resolution\n\t\tinterpolator.resolver.forceResolution();\n\t\tmodel = interpolator.model;\n\n\t\twarnAboutAmbiguity( (\""'\"" + (interpolator.template.r) + \""' reference\""), this.ractive );\n\t}\n\n\t// TODO include index/key/keypath refs as read-only\n\telse if ( model.isReadonly ) {\n\t\t\tvar keypath = model.getKeypath().replace( /^@/, '' );\n\t\t\twarnOnceIfDebug( (\""Cannot use two-way binding on <\"" + (element.name) + \""> element: \"" + keypath + \"" is read-only. To suppress this warning use <\"" + (element.name) + \"" twoway='false'...>\""), { ractive: this.ractive });\n\t\treturn false;\n\t}\n\n\telse if ( model.isUnresolved ) {\n\t\t// reference expressions (e.g. foo[bar])\n\t\tmodel.forceResolution();\n\t\tvar template = interpolator.template;\n\t\twarnAboutAmbiguity( template.r ? (\""'\"" + (template.r) + \""' reference\"") : (\""reference expression starting with '\"" + (template.rx.r) + \""'\""), this.ractive );\n\t}\n\n\tthis.attribute.isTwoway = true;\n\tthis.model = model;\n\n\t// initialise value, if it's undefined\n\tvar value = model.get();\n\tthis.wasUndefined = value === undefined;\n\n\tif ( value === undefined && this.getInitialValue ) {\n\t\tvalue = this.getInitialValue();\n\t\tmodel.set( value );\n\t}\n\tthis.lastVal( true, value );\n\n\tvar parentForm = findElement( this.element, false, 'form' );\n\tif ( parentForm ) {\n\t\tthis.resetValue = value;\n\t\tparentForm.formBindings.push( this );\n\t}\n};\n\nBinding.prototype.bind = function bind () {\n\tthis.model.registerTwowayBinding( this );\n};\n\nBinding.prototype.handleChange = function handleChange () {\n\t\tvar this$1 = this;\n\n\tvar value = this.getValue();\n\tif ( this.lastVal() === value ) { return; }\n\n\trunloop.start( this.root );\n\tthis.attribute.locked = true;\n\tthis.model.set( value );\n\tthis.lastVal( true, value );\n\n\t// if the value changes before observers fire, unlock to be updatable cause something weird and potentially freezy is up\n\tif ( this.model.get() !== value ) { this.attribute.locked = false; }\n\telse { runloop.scheduleTask( function () { return this$1.attribute.locked = false; } ); }\n\n\trunloop.end();\n};\n\nBinding.prototype.lastVal = function lastVal ( setting, value ) {\n\tif ( setting ) { this.lastValue = value; }\n\telse { return this.lastValue; }\n};\n\nBinding.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\t\tif ( this.model && this.model === previous ) { previous.unregisterTwowayBinding( this ); }\n\tif ( next ) {\n\t\tthis.model = next;\n\t\t\trunloop.scheduleTask( function () { return next.registerTwowayBinding( this$1 ); } );\n\t}\n};\n\nBinding.prototype.render = function render () {\n\tthis.node = this.element.node;\n\tthis.node._ractive.binding = this;\n\tthis.rendered = true; // TODO is this used anywhere?\n};\n\nBinding.prototype.setFromNode = function setFromNode ( node ) {\n\tthis.model.set( node.value );\n};\n\nBinding.prototype.unbind = function unbind () {\n\tthis.model.unregisterTwowayBinding( this );\n};\n\nBinding.prototype.unrender = noop;\n\n// This is the handler for DOM events that would lead to a change in the model\n// (i.e. change, sometimes, input, and occasionally click and keyup)\nfunction handleDomEvent () {\n\tthis._ractive.binding.handleChange();\n}\n\nvar CheckboxBinding = (function (Binding$$1) {\n\tfunction CheckboxBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'checked' );\n\t}\n\n\tif ( Binding$$1 ) CheckboxBinding.__proto__ = Binding$$1;\n\tCheckboxBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tCheckboxBinding.prototype.constructor = CheckboxBinding;\n\n\tCheckboxBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.node.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tCheckboxBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t\tthis.node.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\tCheckboxBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn !!this.element.getAttribute( 'checked' );\n\t};\n\n\tCheckboxBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.checked;\n\t};\n\n\tCheckboxBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.checked );\n\t};\n\n\treturn CheckboxBinding;\n}(Binding));\n\nfunction getBindingGroup ( group, model, getValue ) {\n\tvar hash = group + \""-bindingGroup\"";\n\treturn model[hash] || ( model[ hash ] = new BindingGroup( hash, model, getValue ) );\n}\n\nvar BindingGroup = function BindingGroup ( hash, model, getValue ) {\n\tvar this$1 = this;\n\n\tthis.model = model;\n\tthis.hash = hash;\n\tthis.getValue = function () {\n\t\tthis$1.value = getValue.call(this$1);\n\t\treturn this$1.value;\n\t};\n\n\tthis.bindings = [];\n};\n\nBindingGroup.prototype.add = function add ( binding ) {\n\tthis.bindings.push( binding );\n};\n\nBindingGroup.prototype.bind = function bind () {\n\tthis.value = this.model.get();\n\tthis.model.registerTwowayBinding( this );\n\tthis.bound = true;\n};\n\nBindingGroup.prototype.remove = function remove ( binding ) {\n\tremoveFromArray( this.bindings, binding );\n\tif ( !this.bindings.length ) {\n\t\tthis.unbind();\n\t}\n};\n\nBindingGroup.prototype.unbind = function unbind () {\n\tthis.model.unregisterTwowayBinding( this );\n\tthis.bound = false;\n\tdelete this.model[this.hash];\n};\n\nvar push$2 = [].push;\n\nfunction getValue$1$1() {\n\tvar all = this.bindings.filter(function (b) { return b.node && b.node.checked; }).map(function (b) { return b.element.getAttribute( 'value' ); });\n\tvar res = [];\n\tall.forEach(function (v) { if ( !arrayContains( res, v ) ) { res.push( v ); } });\n\treturn res;\n}\n\nvar CheckboxNameBinding = (function (Binding$$1) {\n\tfunction CheckboxNameBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'name' );\n\n\t\tthis.checkboxName = true; // so that ractive.updateModel() knows what to do with this\n\n\t\t// Each input has a reference to an array containing it and its\n\t\t// group, as two-way binding depends on being able to ascertain\n\t\t// the status of all inputs within the group\n\t\tthis.group = getBindingGroup( 'checkboxes', this.model, getValue$1$1 );\n\t\tthis.group.add( this );\n\n\t\tif ( this.noInitialValue ) {\n\t\t\tthis.group.noInitialValue = true;\n\t\t}\n\n\t\t// If no initial value was set, and this input is checked, we\n\t\t// update the model\n\t\tif ( this.group.noInitialValue && this.element.getAttribute( 'checked' ) ) {\n\t\t\tvar existingValue = this.model.get();\n\t\t\tvar bindingValue = this.element.getAttribute( 'value' );\n\n\t\t\tif ( !arrayContains( existingValue, bindingValue ) ) {\n\t\t\t\tpush$2.call( existingValue, bindingValue ); // to avoid triggering runloop with array adaptor\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( Binding$$1 ) CheckboxNameBinding.__proto__ = Binding$$1;\n\tCheckboxNameBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tCheckboxNameBinding.prototype.constructor = CheckboxNameBinding;\n\n\tCheckboxNameBinding.prototype.bind = function bind () {\n\t\tif ( !this.group.bound ) {\n\t\t\tthis.group.bind();\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.getInitialValue = function getInitialValue () {\n\t\t// This only gets called once per group (of inputs that\n\t\t// share a name), because it only gets called if there\n\t\t// isn't an initial value. By the same token, we can make\n\t\t// a note of that fact that there was no initial value,\n\t\t// and populate it using any `checked` attributes that\n\t\t// exist (which users should avoid, but which we should\n\t\t// support anyway to avoid breaking expectations)\n\t\tthis.noInitialValue = true; // TODO are noInitialValue and wasUndefined the same thing?\n\t\treturn [];\n\t};\n\n\tCheckboxNameBinding.prototype.getValue = function getValue$1 () {\n\t\treturn this.group.value;\n\t};\n\n\tCheckboxNameBinding.prototype.handleChange = function handleChange () {\n\t\tthis.isChecked = this.element.node.checked;\n\t\tthis.group.value = this.model.get();\n\t\tvar value = this.element.getAttribute( 'value' );\n\t\tif ( this.isChecked && !arrayContains( this.group.value, value ) ) {\n\t\t\tthis.group.value.push( value );\n\t\t} else if ( !this.isChecked && arrayContains( this.group.value, value ) ) {\n\t\t\tremoveFromArray( this.group.value, value );\n\t\t}\n\t\t// make sure super knows there's a change\n\t\tthis.lastValue = null;\n\t\tBinding$$1.prototype.handleChange.call(this);\n\t};\n\n\tCheckboxNameBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tvar existingValue = this.model.get();\n\t\tvar bindingValue = this.element.getAttribute( 'value' );\n\n\t\tif ( Array.isArray( existingValue ) ) {\n\t\t\tthis.isChecked = arrayContains( existingValue, bindingValue );\n\t\t} else {\n\t\t\tthis.isChecked = existingValue == bindingValue;\n\t\t}\n\n\t\tnode.name = '{{' + this.model.getKeypath() + '}}';\n\t\tnode.checked = this.isChecked;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\t// in case of IE emergency, bind to click event as well\n\t\tif ( node.attachEvent ) {\n\t\t\tnode.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.group.bindings.forEach( function (binding) { return binding.wasUndefined = true; } );\n\n\t\tif ( node.checked ) {\n\t\t\tvar valueSoFar = this.group.getValue();\n\t\t\tvalueSoFar.push( this.element.getAttribute( 'value' ) );\n\n\t\t\tthis.group.model.set( valueSoFar );\n\t\t}\n\t};\n\n\tCheckboxNameBinding.prototype.unbind = function unbind () {\n\t\tthis.group.remove( this );\n\t};\n\n\tCheckboxNameBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.element.node;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\treturn CheckboxNameBinding;\n}(Binding));\n\nvar ContentEditableBinding = (function (Binding$$1) {\n\tfunction ContentEditableBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) ContentEditableBinding.__proto__ = Binding$$1;\n\tContentEditableBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tContentEditableBinding.prototype.constructor = ContentEditableBinding;\n\n\tContentEditableBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn this.element.fragment ? this.element.fragment.toString() : '';\n\t};\n\n\tContentEditableBinding.prototype.getValue = function getValue () {\n\t\treturn this.element.node.innerHTML;\n\t};\n\n\tContentEditableBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\t\tnode.addEventListener( 'blur', handleDomEvent, false );\n\n\t\tif ( !this.ractive.lazy ) {\n\t\t\tnode.addEventListener( 'input', handleDomEvent, false );\n\n\t\t\tif ( node.attachEvent ) {\n\t\t\t\tnode.addEventListener( 'keyup', handleDomEvent, false );\n\t\t\t}\n\t\t}\n\t};\n\n\tContentEditableBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.innerHTML );\n\t};\n\n\tContentEditableBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.node;\n\n\t\tnode.removeEventListener( 'blur', handleDomEvent, false );\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'input', handleDomEvent, false );\n\t\tnode.removeEventListener( 'keyup', handleDomEvent, false );\n\t};\n\n\treturn ContentEditableBinding;\n}(Binding));\n\nfunction handleBlur () {\n\thandleDomEvent.call( this );\n\n\tvar value = this._ractive.binding.model.get();\n\tthis.value = value == undefined ? '' : value;\n}\n\nfunction handleDelay ( delay ) {\n\tvar timeout;\n\n\treturn function () {\n\t\tvar this$1 = this;\n\n\t\tif ( timeout ) { clearTimeout( timeout ); }\n\n\t\ttimeout = setTimeout( function () {\n\t\t\tvar binding = this$1._ractive.binding;\n\t\t\tif ( binding.rendered ) { handleDomEvent.call( this$1 ); }\n\t\t\ttimeout = null;\n\t\t}, delay );\n\t};\n}\n\nvar GenericBinding = (function (Binding$$1) {\n\tfunction GenericBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) GenericBinding.__proto__ = Binding$$1;\n\tGenericBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tGenericBinding.prototype.constructor = GenericBinding;\n\n\tGenericBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn '';\n\t};\n\n\tGenericBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.value;\n\t};\n\n\tGenericBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\t// any lazy setting for this element overrides the root\n\t\t// if the value is a number, it's a timeout\n\t\tvar lazy = this.ractive.lazy;\n\t\tvar timeout = false;\n\n\t\tif ( 'lazy' in this.element ) {\n\t\t\tlazy = this.element.lazy;\n\t\t}\n\n\t\tif ( isNumeric( lazy ) ) {\n\t\t\ttimeout = +lazy;\n\t\t\tlazy = false;\n\t\t}\n\n\t\tthis.handler = timeout ? handleDelay( timeout ) : handleDomEvent;\n\n\t\tvar node = this.node;\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( !lazy ) {\n\t\t\tnode.addEventListener( 'input', this.handler, false );\n\n\t\t\tif ( node.attachEvent ) {\n\t\t\t\tnode.addEventListener( 'keyup', this.handler, false );\n\t\t\t}\n\t\t}\n\n\t\tnode.addEventListener( 'blur', handleBlur, false );\n\t};\n\n\tGenericBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.element.node;\n\t\tthis.rendered = false;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'input', this.handler, false );\n\t\tnode.removeEventListener( 'keyup', this.handler, false );\n\t\tnode.removeEventListener( 'blur', handleBlur, false );\n\t};\n\n\treturn GenericBinding;\n}(Binding));\n\nvar FileBinding = (function (GenericBinding$$1) {\n\tfunction FileBinding () {\n\t\tGenericBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( GenericBinding$$1 ) FileBinding.__proto__ = GenericBinding$$1;\n\tFileBinding.prototype = Object.create( GenericBinding$$1 && GenericBinding$$1.prototype );\n\tFileBinding.prototype.constructor = FileBinding;\n\n\tFileBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn undefined;\n\t};\n\n\tFileBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.files;\n\t};\n\n\tFileBinding.prototype.render = function render () {\n\t\tthis.element.lazy = false;\n\t\tGenericBinding$$1.prototype.render.call(this);\n\t};\n\n\tFileBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.files );\n\t};\n\n\treturn FileBinding;\n}(GenericBinding));\n\nfunction getSelectedOptions ( select ) {\n\treturn select.selectedOptions\n\t\t? toArray( select.selectedOptions )\n\t\t: select.options\n\t\t\t? toArray( select.options ).filter( function (option) { return option.selected; } )\n\t\t\t: [];\n}\n\nvar MultipleSelectBinding = (function (Binding$$1) {\n\tfunction MultipleSelectBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) MultipleSelectBinding.__proto__ = Binding$$1;\n\tMultipleSelectBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tMultipleSelectBinding.prototype.constructor = MultipleSelectBinding;\n\n\tMultipleSelectBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn this.element.options\n\t\t\t.filter( function (option) { return option.getAttribute( 'selected' ); } )\n\t\t\t.map( function (option) { return option.getAttribute( 'value' ); } );\n\t};\n\n\tMultipleSelectBinding.prototype.getValue = function getValue () {\n\t\tvar options = this.element.node.options;\n\t\tvar len = options.length;\n\n\t\tvar selectedValues = [];\n\n\t\tfor ( var i = 0; i < len; i += 1 ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( option.selected ) {\n\t\t\t\tvar optionValue = option._ractive ? option._ractive.value : option.value;\n\t\t\t\tselectedValues.push( optionValue );\n\t\t\t}\n\t\t}\n\n\t\treturn selectedValues;\n\t};\n\n\tMultipleSelectBinding.prototype.handleChange = function handleChange () {\n\t\tvar attribute = this.attribute;\n\t\tvar previousValue = attribute.getValue();\n\n\t\tvar value = this.getValue();\n\n\t\tif ( previousValue === undefined || !arrayContentsMatch( value, previousValue ) ) {\n\t\t\tBinding$$1.prototype.handleChange.call(this);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tMultipleSelectBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.model.get() === undefined ) {\n\t\t\t// get value from DOM, if possible\n\t\t\tthis.handleChange();\n\t\t}\n\t};\n\n\tMultipleSelectBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar selectedOptions = getSelectedOptions( node );\n\t\tvar i = selectedOptions.length;\n\t\tvar result = new Array( i );\n\n\t\twhile ( i-- ) {\n\t\t\tvar option = selectedOptions[i];\n\t\t\tresult[i] = option._ractive ? option._ractive.value : option.value;\n\t\t}\n\n\t\tthis.model.set( result );\n\t};\n\n\tMultipleSelectBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t};\n\n\treturn MultipleSelectBinding;\n}(Binding));\n\nvar NumericBinding = (function (GenericBinding$$1) {\n\tfunction NumericBinding () {\n\t\tGenericBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( GenericBinding$$1 ) NumericBinding.__proto__ = GenericBinding$$1;\n\tNumericBinding.prototype = Object.create( GenericBinding$$1 && GenericBinding$$1.prototype );\n\tNumericBinding.prototype.constructor = NumericBinding;\n\n\tNumericBinding.prototype.getInitialValue = function getInitialValue () {\n\t\treturn undefined;\n\t};\n\n\tNumericBinding.prototype.getValue = function getValue () {\n\t\tvar value = parseFloat( this.node.value );\n\t\treturn isNaN( value ) ? undefined : value;\n\t};\n\n\tNumericBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar value = parseFloat( node.value );\n\t\tif ( !isNaN( value ) ) { this.model.set( value ); }\n\t};\n\n\treturn NumericBinding;\n}(GenericBinding));\n\nvar siblings = {};\n\nfunction getSiblings ( hash ) {\n\treturn siblings[ hash ] || ( siblings[ hash ] = [] );\n}\n\nvar RadioBinding = (function (Binding$$1) {\n\tfunction RadioBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'checked' );\n\n\t\tthis.siblings = getSiblings( this.ractive._guid + this.element.getAttribute( 'name' ) );\n\t\tthis.siblings.push( this );\n\t}\n\n\tif ( Binding$$1 ) RadioBinding.__proto__ = Binding$$1;\n\tRadioBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tRadioBinding.prototype.constructor = RadioBinding;\n\n\tRadioBinding.prototype.getValue = function getValue () {\n\t\treturn this.node.checked;\n\t};\n\n\tRadioBinding.prototype.handleChange = function handleChange () {\n\t\trunloop.start( this.root );\n\n\t\tthis.siblings.forEach( function (binding) {\n\t\t\tbinding.model.set( binding.getValue() );\n\t\t});\n\n\t\trunloop.end();\n\t};\n\n\tRadioBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( this.node.attachEvent ) {\n\t\t\tthis.node.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tRadioBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tthis.model.set( node.checked );\n\t};\n\n\tRadioBinding.prototype.unbind = function unbind () {\n\t\tremoveFromArray( this.siblings, this );\n\t};\n\n\tRadioBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t\tthis.node.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\treturn RadioBinding;\n}(Binding));\n\nfunction getValue$2() {\n\tvar checked = this.bindings.filter( function (b) { return b.node.checked; } );\n\tif ( checked.length > 0 ) {\n\t\treturn checked[0].element.getAttribute( 'value' );\n\t}\n}\n\nvar RadioNameBinding = (function (Binding$$1) {\n\tfunction RadioNameBinding ( element ) {\n\t\tBinding$$1.call( this, element, 'name' );\n\n\t\tthis.group = getBindingGroup( 'radioname', this.model, getValue$2 );\n\t\tthis.group.add( this );\n\n\t\tif ( element.checked ) {\n\t\t\tthis.group.value = this.getValue();\n\t\t}\n\t}\n\n\tif ( Binding$$1 ) RadioNameBinding.__proto__ = Binding$$1;\n\tRadioNameBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tRadioNameBinding.prototype.constructor = RadioNameBinding;\n\n\tRadioNameBinding.prototype.bind = function bind () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.group.bound ) {\n\t\t\tthis.group.bind();\n\t\t}\n\n\t\t// update name keypath when necessary\n\t\tthis.nameAttributeBinding = {\n\t\t\thandleChange: function () { return this$1.node.name = \""{{\"" + (this$1.model.getKeypath()) + \""}}\""; }\n\t\t};\n\n\t\tthis.model.getKeypathModel().register( this.nameAttributeBinding );\n\t};\n\n\tRadioNameBinding.prototype.getInitialValue = function getInitialValue () {\n\t\tif ( this.element.getAttribute( 'checked' ) ) {\n\t\t\treturn this.element.getAttribute( 'value' );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.getValue = function getValue$1 () {\n\t\treturn this.element.getAttribute( 'value' );\n\t};\n\n\tRadioNameBinding.prototype.handleChange = function handleChange () {\n\t\t// If this <input> is the one that's checked, then the value of its\n\t\t// `name` model gets set to its value\n\t\tif ( this.node.checked ) {\n\t\t\tthis.group.value = this.getValue();\n\t\t\tBinding$$1.prototype.handleChange.call(this);\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.lastVal = function lastVal ( setting, value ) {\n\t\tif ( !this.group ) { return; }\n\t\tif ( setting ) { this.group.lastValue = value; }\n\t\telse { return this.group.lastValue; }\n\t};\n\n\tRadioNameBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\n\t\tvar node = this.node;\n\n\t\tnode.name = \""{{\"" + (this.model.getKeypath()) + \""}}\"";\n\t\tnode.checked = this.model.get() == this.element.getAttribute( 'value' );\n\n\t\tnode.addEventListener( 'change', handleDomEvent, false );\n\n\t\tif ( node.attachEvent ) {\n\t\t\tnode.addEventListener( 'click', handleDomEvent, false );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tif ( node.checked ) {\n\t\t\tthis.group.model.set( this.element.getAttribute( 'value' ) );\n\t\t}\n\t};\n\n\tRadioNameBinding.prototype.unbind = function unbind () {\n\t\tthis.group.remove( this );\n\n\t\tthis.model.getKeypathModel().unregister( this.nameAttributeBinding );\n\t};\n\n\tRadioNameBinding.prototype.unrender = function unrender () {\n\t\tvar node = this.node;\n\n\t\tnode.removeEventListener( 'change', handleDomEvent, false );\n\t\tnode.removeEventListener( 'click', handleDomEvent, false );\n\t};\n\n\treturn RadioNameBinding;\n}(Binding));\n\nvar SingleSelectBinding = (function (Binding$$1) {\n\tfunction SingleSelectBinding () {\n\t\tBinding$$1.apply(this, arguments);\n\t}\n\n\tif ( Binding$$1 ) SingleSelectBinding.__proto__ = Binding$$1;\n\tSingleSelectBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );\n\tSingleSelectBinding.prototype.constructor = SingleSelectBinding;\n\n\tSingleSelectBinding.prototype.forceUpdate = function forceUpdate () {\n\t\tvar this$1 = this;\n\n\t\tvar value = this.getValue();\n\n\t\tif ( value !== undefined ) {\n\t\t\tthis.attribute.locked = true;\n\t\t\trunloop.scheduleTask( function () { return this$1.attribute.locked = false; } );\n\t\t\tthis.model.set( value );\n\t\t}\n\t};\n\n\tSingleSelectBinding.prototype.getInitialValue = function getInitialValue () {\n\t\tif ( this.element.getAttribute( 'value' ) !== undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar options = this.element.options;\n\t\tvar len = options.length;\n\n\t\tif ( !len ) { return; }\n\n\t\tvar value;\n\t\tvar optionWasSelected;\n\t\tvar i = len;\n\n\t\t// take the final selected option...\n\t\twhile ( i-- ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( option.getAttribute( 'selected' ) ) {\n\t\t\t\tif ( !option.getAttribute( 'disabled' ) ) {\n\t\t\t\t\tvalue = option.getAttribute( 'value' );\n\t\t\t\t}\n\n\t\t\t\toptionWasSelected = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// or the first non-disabled option, if none are selected\n\t\tif ( !optionWasSelected ) {\n\t\t\twhile ( ++i < len ) {\n\t\t\t\tif ( !options[i].getAttribute( 'disabled' ) ) {\n\t\t\t\t\tvalue = options[i].getAttribute( 'value' );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This is an optimisation (aka hack) that allows us to forgo some\n\t\t// other more expensive work\n\t\t// TODO does it still work? seems at odds with new architecture\n\t\tif ( value !== undefined ) {\n\t\t\tthis.element.attributeByName.value.value = value;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\tSingleSelectBinding.prototype.getValue = function getValue () {\n\t\tvar options = this.node.options;\n\t\tvar len = options.length;\n\n\t\tvar i;\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar option = options[i];\n\n\t\t\tif ( options[i].selected && !options[i].disabled ) {\n\t\t\t\treturn option._ractive ? option._ractive.value : option.value;\n\t\t\t}\n\t\t}\n\t};\n\n\tSingleSelectBinding.prototype.render = function render () {\n\t\tBinding$$1.prototype.render.call(this);\n\t\tthis.node.addEventListener( 'change', handleDomEvent, false );\n\t};\n\n\tSingleSelectBinding.prototype.setFromNode = function setFromNode ( node ) {\n\t\tvar option = getSelectedOptions( node )[0];\n\t\tthis.model.set( option._ractive ? option._ractive.value : option.value );\n\t};\n\n\tSingleSelectBinding.prototype.unrender = function unrender () {\n\t\tthis.node.removeEventListener( 'change', handleDomEvent, false );\n\t};\n\n\treturn SingleSelectBinding;\n}(Binding));\n\nfunction isBindable ( attribute ) {\n\n\t// The fragment must be a single non-string fragment\n\tif ( !attribute || !attribute.template.f || !attribute.template.f.length === 1 || attribute.template.f[0].s ) { return false; }\n\n\t// A binding is an interpolator `{{ }}`, yey.\n\tif ( attribute.template.f[0].t === INTERPOLATOR ) { return true; }\n\n\t// The above is probably the only true case. For the rest, show an appropriate\n\t// warning before returning false.\n\n\t// You can't bind a triple curly. HTML values on an attribute makes no sense.\n\tif ( attribute.template.f[0].t === TRIPLE ) { warnIfDebug( 'It is not possible create a binding using a triple mustache.' ); }\n\n\treturn false;\n}\n\nfunction selectBinding ( element ) {\n\tvar name = element.name;\n\tvar attributes = element.attributeByName;\n\tvar isBindableByValue = isBindable( attributes.value );\n\tvar isBindableByContentEditable = isBindable( attributes.contenteditable );\n\tvar isContentEditable =  element.getAttribute( 'contenteditable' );\n\n\t// contenteditable\n\t// Bind if the contenteditable is true or a binding that may become true.\n\tif ( ( isContentEditable || isBindableByContentEditable ) && isBindableByValue ) { return ContentEditableBinding; }\n\n\t// <input>\n\tif ( name === 'input' ) {\n\t\tvar type = element.getAttribute( 'type' );\n\n\t\tif ( type === 'radio' ) {\n\t\t\tvar isBindableByName = isBindable( attributes.name );\n\t\t\tvar isBindableByChecked = isBindable( attributes.checked );\n\n\t\t\t// For radios we can either bind the name or checked, but not both.\n\t\t\t// Name binding is handed instead.\n\t\t\tif ( isBindableByName && isBindableByChecked ) {\n\t\t\t\twarnIfDebug( 'A radio input can have two-way binding on its name attribute, or its checked attribute - not both', { ractive: element.root });\n\t\t\t\treturn RadioNameBinding;\n\t\t\t}\n\n\t\t\tif ( isBindableByName ) { return RadioNameBinding; }\n\n\t\t\tif ( isBindableByChecked ) { return RadioBinding; }\n\n\t\t\t// Dead end. Unknown binding on radio input.\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type === 'checkbox' ) {\n\t\t\tvar isBindableByName$1 = isBindable( attributes.name );\n\t\t\tvar isBindableByChecked$1 = isBindable( attributes.checked );\n\n\t\t\t// A checkbox with bindings for both name and checked. Checked treated as\n\t\t\t// the checkbox value, name is treated as a regular binding.\n\t\t\t//\n\t\t\t// See https://github.com/ractivejs/ractive/issues/1749\n\t\t\tif ( isBindableByName$1 && isBindableByChecked$1 ) { return CheckboxBinding; }\n\n\t\t\tif ( isBindableByName$1 ) { return CheckboxNameBinding; }\n\n\t\t\tif ( isBindableByChecked$1 ) { return CheckboxBinding; }\n\n\t\t\t// Dead end. Unknown binding on checkbox input.\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type === 'file' && isBindableByValue ) { return FileBinding; }\n\n\t\tif ( type === 'number' && isBindableByValue ) { return NumericBinding; }\n\n\t\tif ( type === 'range' && isBindableByValue ) { return NumericBinding; }\n\n\t\t// Some input of unknown type (browser usually falls back to text).\n\t\tif ( isBindableByValue ) { return GenericBinding; }\n\n\t\t// Dead end. Some unknown input and an unbindable.\n\t\treturn null;\n\t}\n\n\t// <select>\n\tif ( name === 'select' && isBindableByValue ){\n\t\treturn element.getAttribute( 'multiple' ) ? MultipleSelectBinding : SingleSelectBinding;\n\t}\n\n\t// <textarea>\n\tif ( name === 'textarea' && isBindableByValue ) { return GenericBinding; }\n\n\t// Dead end. Some unbindable element.\n\treturn null;\n}\n\nfunction makeDirty$2 ( query ) {\n\tquery.makeDirty();\n}\n\nvar endsWithSemi = /;\\s*$/;\n\nvar Element = (function (ContainerItem$$1) {\n\tfunction Element ( options ) {\n\t\tvar this$1 = this;\n\n\t\tContainerItem$$1.call( this, options );\n\n\t\tthis.liveQueries = []; // TODO rare case. can we handle differently?\n\n\t\tthis.name = options.template.e.toLowerCase();\n\t\tthis.isVoid = voidElementNames.test( this.name );\n\n\t\t// find parent element\n\t\tthis.parent = findElement( this.parentFragment, false );\n\n\t\tif ( this.parent && this.parent.name === 'option' ) {\n\t\t\tthrow new Error( (\""An <option> element cannot contain other elements (encountered <\"" + (this.name) + \"">)\"") );\n\t\t}\n\n\t\tthis.decorators = [];\n\t\tthis.events = [];\n\n\t\t// create attributes\n\t\tthis.attributeByName = {};\n\n\t\tthis.attributes = [];\n\t\tvar leftovers = [];\n\t\t( this.template.m || [] ).forEach( function (template) {\n\t\t\tswitch ( template.t ) {\n\t\t\t\tcase ATTRIBUTE:\n\t\t\t\tcase BINDING_FLAG:\n\t\t\t\tcase DECORATOR:\n\t\t\t\tcase EVENT:\n\t\t\t\tcase TRANSITION:\n\t\t\t\t\tthis$1.attributes.push( createItem({\n\t\t\t\t\t\towner: this$1,\n\t\t\t\t\t\tparentFragment: this$1.parentFragment,\n\t\t\t\t\t\ttemplate: template\n\t\t\t\t\t}) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tleftovers.push( template );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif ( leftovers.length ) {\n\t\t\tthis.attributes.push( new ConditionalAttribute({\n\t\t\t\towner: this,\n\t\t\t\tparentFragment: this.parentFragment,\n\t\t\t\ttemplate: leftovers\n\t\t\t}) );\n\t\t}\n\n\t\tthis.attributes.sort( sortAttributes );\n\n\t\t// create children\n\t\tif ( options.template.f && !options.deferContent ) {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\ttemplate: options.template.f,\n\t\t\t\towner: this,\n\t\t\t\tcssIds: null\n\t\t\t});\n\t\t}\n\n\t\tthis.binding = null; // filled in later\n\t}\n\n\tif ( ContainerItem$$1 ) Element.__proto__ = ContainerItem$$1;\n\tElement.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tElement.prototype.constructor = Element;\n\n\tElement.prototype.bind = function bind$1 () {\n\t\tthis.attributes.binding = true;\n\t\tthis.attributes.forEach( bind$1$1 );\n\t\tthis.attributes.binding = false;\n\n\t\tif ( this.fragment ) { this.fragment.bind(); }\n\n\t\t// create two-way binding if necessary\n\t\tif ( !this.binding ) { this.recreateTwowayBinding(); }\n\t};\n\n\tElement.prototype.createTwowayBinding = function createTwowayBinding () {\n\t\tif ( 'twoway' in this ? this.twoway : this.ractive.twoway ) {\n\t\t\tvar Binding = selectBinding( this );\n\t\t\tif ( Binding ) {\n\t\t\t\tvar binding = new Binding( this );\n\t\t\t\tif ( binding && binding.model ) { return binding; }\n\t\t\t}\n\t\t}\n\t};\n\n\tElement.prototype.destroyed = function destroyed$1 () {\n\t\tthis.attributes.forEach( destroyed$1$1 );\n\t\tif ( this.fragment ) { this.fragment.destroyed(); }\n\t};\n\n\tElement.prototype.detach = function detach () {\n\t\t// if this element is no longer rendered, the transitions are complete and the attributes can be torn down\n\t\tif ( !this.rendered ) { this.destroyed(); }\n\n\t\treturn detachNode( this.node );\n\t};\n\n\tElement.prototype.find = function find ( selector, options ) {\n\t\tif ( this.node && matches( this.node, selector ) ) { return this.node; }\n\t\tif ( this.fragment ) {\n\t\t\treturn this.fragment.find( selector, options );\n\t\t}\n\t};\n\n\tElement.prototype.findAll = function findAll ( selector, query ) {\n\t\t// Add this node to the query, if applicable, and register the\n\t\t// query on this element\n\t\tvar matches$$1 = query.test( this.node );\n\t\tif ( matches$$1 ) {\n\t\t\tquery.add( this.node );\n\t\t\tif ( query.live ) { this.liveQueries.push( query ); }\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.findAll( selector, query );\n\t\t}\n\t};\n\n\tElement.prototype.findNextNode = function findNextNode () {\n\t\treturn null;\n\t};\n\n\tElement.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tElement.prototype.getAttribute = function getAttribute ( name ) {\n\t\tvar attribute = this.attributeByName[ name ];\n\t\treturn attribute ? attribute.getValue() : undefined;\n\t};\n\n\tElement.prototype.recreateTwowayBinding = function recreateTwowayBinding () {\n\t\tif ( this.binding ) {\n\t\t\tthis.binding.unbind();\n\t\t\tthis.binding.unrender();\n\t\t}\n\n\t\tif ( this.binding = this.createTwowayBinding() ) {\n\t\t\tthis.binding.bind();\n\t\t\tif ( this.rendered ) { this.binding.render(); }\n\t\t}\n\t};\n\n\tElement.prototype.removeFromQuery = function removeFromQuery ( query ) {\n\t\tquery.remove( this.node );\n\t\tremoveFromArray( this.liveQueries, query );\n\t};\n\n\tElement.prototype.render = function render$1 ( target, occupants ) {\n\t\tvar this$1 = this;\n\n\t\t// TODO determine correct namespace\n\t\tthis.namespace = getNamespace( this );\n\n\t\tvar node;\n\t\tvar existing = false;\n\n\t\tif ( occupants ) {\n\t\t\tvar n;\n\t\t\twhile ( ( n = occupants.shift() ) ) {\n\t\t\t\tif ( n.nodeName.toUpperCase() === this$1.template.e.toUpperCase() && n.namespaceURI === this$1.namespace ) {\n\t\t\t\t\tthis$1.node = node = n;\n\t\t\t\t\texisting = true;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tdetachNode( n );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !node ) {\n\t\t\tvar name = this.template.e;\n\t\t\tnode = createElement( this.namespace === html ? name.toLowerCase() : name, this.namespace, this.getAttribute( 'is' ) );\n\t\t\tthis.node = node;\n\t\t}\n\n\t\t// tie the node to this vdom element\n\t\tObject.defineProperty( node, '_ractive', {\n\t\t\tvalue: {\n\t\t\t\tproxy: this\n\t\t\t}\n\t\t});\n\n\t\t// Is this a top-level node of a component? If so, we may need to add\n\t\t// a data-ractive-css attribute, for CSS encapsulation\n\t\tif ( this.parentFragment.cssIds ) {\n\t\t\tnode.setAttribute( 'data-ractive-css', this.parentFragment.cssIds.map( function (x) { return (\""{\"" + x + \""}\""); } ).join( ' ' ) );\n\t\t}\n\n\t\tif ( existing && this.foundNode ) { this.foundNode( node ); }\n\n\t\t// register intro before rendering content so children can find the intro\n\t\tvar intro = this.intro;\n\t\tif ( intro && intro.shouldFire( 'intro' ) ) {\n\t\t\tintro.isIntro = true;\n\t\t\trunloop.registerTransition( intro );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tvar children = existing ? toArray( node.childNodes ) : undefined;\n\n\t\t\tthis.fragment.render( node, children );\n\n\t\t\t// clean up leftover children\n\t\t\tif ( children ) {\n\t\t\t\tchildren.forEach( detachNode );\n\t\t\t}\n\t\t}\n\n\t\tif ( existing ) {\n\t\t\t// store initial values for two-way binding\n\t\t\tif ( this.binding && this.binding.wasUndefined ) { this.binding.setFromNode( node ); }\n\t\t\t// remove unused attributes\n\t\t\tvar i = node.attributes.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tvar name$1 = node.attributes[i].name;\n\t\t\t\tif ( !( name$1 in this$1.attributeByName ) ) { node.removeAttribute( name$1 ); }\n\t\t\t}\n\t\t}\n\n\t\tthis.attributes.forEach( render$1$1 );\n\n\t\tif ( this.binding ) { this.binding.render(); }\n\n\t\tupdateLiveQueries( this );\n\n\t\tif ( !existing ) {\n\t\t\ttarget.appendChild( node );\n\t\t}\n\n\t\tthis.rendered = true;\n\t};\n\n\tElement.prototype.shuffled = function shuffled () {\n\t\tthis.liveQueries.forEach( makeDirty$2 );\n\t\tContainerItem$$1.prototype.shuffled.call(this);\n\t};\n\n\tElement.prototype.toString = function toString () {\n\t\tvar tagName = this.template.e;\n\n\t\tvar attrs = this.attributes.map( stringifyAttribute ).join( '' );\n\n\t\t// Special case - selected options\n\t\tif ( this.name === 'option' && this.isSelected() ) {\n\t\t\tattrs += ' selected';\n\t\t}\n\n\t\t// Special case - two-way radio name bindings\n\t\tif ( this.name === 'input' && inputIsCheckedRadio( this ) ) {\n\t\t\tattrs += ' checked';\n\t\t}\n\n\t\t// Special case style and class attributes and directives\n\t\tvar style, cls;\n\t\tthis.attributes.forEach( function (attr) {\n\t\t\tif ( attr.name === 'class' ) {\n\t\t\t\tcls = ( cls || '' ) + ( cls ? ' ' : '' ) + safeAttributeString( attr.getString() );\n\t\t\t} else if ( attr.name === 'style' ) {\n\t\t\t\tstyle = ( style || '' ) + ( style ? ' ' : '' ) + safeAttributeString( attr.getString() );\n\t\t\t\tif ( style && !endsWithSemi.test( style ) ) { style += ';'; }\n\t\t\t} else if ( attr.style ) {\n\t\t\t\tstyle = ( style || '' ) + ( style ? ' ' : '' ) +  (attr.style) + \"": \"" + (safeAttributeString( attr.getString() )) + \"";\"";\n\t\t\t} else if ( attr.inlineClass && attr.getValue() ) {\n\t\t\t\tcls = ( cls || '' ) + ( cls ? ' ' : '' ) + attr.inlineClass;\n\t\t\t}\n\t\t});\n\t\t// put classes first, then inline style\n\t\tif ( style !== undefined ) { attrs = ' style' + ( style ? (\""=\\\""\"" + style + \""\\\""\"") : '' ) + attrs; }\n\t\tif ( cls !== undefined ) { attrs = ' class' + (cls ? (\""=\\\""\"" + cls + \""\\\""\"") : '') + attrs; }\n\n\t\tvar str = \""<\"" + tagName + attrs + \"">\"";\n\n\t\tif ( this.isVoid ) { return str; }\n\n\t\t// Special case - textarea\n\t\tif ( this.name === 'textarea' && this.getAttribute( 'value' ) !== undefined ) {\n\t\t\tstr += escapeHtml( this.getAttribute( 'value' ) );\n\t\t}\n\n\t\t// Special case - contenteditable\n\t\telse if ( this.getAttribute( 'contenteditable' ) !== undefined ) {\n\t\t\tstr += ( this.getAttribute( 'value' ) || '' );\n\t\t}\n\n\t\tif ( this.fragment ) {\n\t\t\tstr += this.fragment.toString( !/^(?:script|style)$/i.test( this.template.e ) ); // escape text unless script/style\n\t\t}\n\n\t\tstr += \""</\"" + tagName + \"">\"";\n\t\treturn str;\n\t};\n\n\tElement.prototype.unbind = function unbind$1 () {\n\t\tthis.attributes.unbinding = true;\n\t\tthis.attributes.forEach( unbind$1$1 );\n\t\tthis.attributes.unbinding = false;\n\n\t\tif ( this.binding ) { this.binding.unbind(); }\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tElement.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.rendered ) { return; }\n\t\tthis.rendered = false;\n\n\t\t// unrendering before intro completed? complete it now\n\t\t// TODO should be an API for aborting transitions\n\t\tvar transition = this.intro;\n\t\tif ( transition && transition.complete ) { transition.complete(); }\n\n\t\t// Detach as soon as we can\n\t\tif ( this.name === 'option' ) {\n\t\t\t// <option> elements detach immediately, so that\n\t\t\t// their parent <select> element syncs correctly, and\n\t\t\t// since option elements can't have transitions anyway\n\t\t\tthis.detach();\n\t\t} else if ( shouldDestroy ) {\n\t\t\trunloop.detachWhenReady( this );\n\t\t}\n\n\t\t// outro transition\n\t\tvar outro = this.outro;\n\t\tif ( outro && outro.shouldFire( 'outro' ) ) {\n\t\t\toutro.isIntro = false;\n\t\t\trunloop.registerTransition( outro );\n\t\t}\n\n\t\tif ( this.fragment ) { this.fragment.unrender(); }\n\n\t\tif ( this.binding ) { this.binding.unrender(); }\n\n\t\tthis.liveQueries.forEach( function (query) { return query.remove( this$1.node ); } );\n\t\tthis.liveQueries = [];\n\t\t// TODO forms are a special case\n\t};\n\n\tElement.prototype.update = function update$1 () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tthis.attributes.forEach( update$1$1 );\n\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t}\n\t};\n\n\treturn Element;\n}(ContainerItem));\n\nvar toFront = [ 'min', 'max', 'class', 'type' ];\nfunction sortAttributes ( left, right ) {\n\tleft = left.name;\n\tright = right.name;\n\tvar l = left === 'value' ? 1 : ~toFront.indexOf( left );\n\tvar r = right === 'value' ? 1 : ~toFront.indexOf( right );\n\treturn l < r ? -1 : l > r ? 1 : 0;\n}\n\nfunction inputIsCheckedRadio ( element ) {\n\tvar nameAttr = element.attributeByName.name;\n\treturn element.getAttribute( 'type' ) === 'radio' &&\n\t\t( nameAttr || {} ).interpolator &&\n\t\telement.getAttribute( 'value' ) === nameAttr.interpolator.model.get();\n}\n\nfunction stringifyAttribute ( attribute ) {\n\tvar str = attribute.toString();\n\treturn str ? ' ' + str : '';\n}\n\nfunction getNamespace ( element ) {\n\t// Use specified namespace...\n\tvar xmlns$$1 = element.getAttribute( 'xmlns' );\n\tif ( xmlns$$1 ) { return xmlns$$1; }\n\n\t// ...or SVG namespace, if this is an <svg> element\n\tif ( element.name === 'svg' ) { return svg$1; }\n\n\tvar parent = element.parent;\n\n\tif ( parent ) {\n\t\t// ...or HTML, if the parent is a <foreignObject>\n\t\tif ( parent.name === 'foreignobject' ) { return html; }\n\n\t\t// ...or inherit from the parent node\n\t\treturn parent.node.namespaceURI;\n\t}\n\n\treturn element.ractive.el.namespaceURI;\n}\n\nvar Form = (function (Element$$1) {\n\tfunction Form ( options ) {\n\t\tElement$$1.call( this, options );\n\t\tthis.formBindings = [];\n\t}\n\n\tif ( Element$$1 ) Form.__proto__ = Element$$1;\n\tForm.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tForm.prototype.constructor = Form;\n\n\tForm.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.node.addEventListener( 'reset', handleReset, false );\n\t};\n\n\tForm.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tthis.node.removeEventListener( 'reset', handleReset, false );\n\t\tElement$$1.prototype.unrender.call( this, shouldDestroy );\n\t};\n\n\treturn Form;\n}(Element));\n\nfunction handleReset () {\n\tvar element = this._ractive.proxy;\n\n\trunloop.start();\n\telement.formBindings.forEach( updateModel$1 );\n\trunloop.end();\n}\n\nfunction updateModel$1 ( binding ) {\n\tbinding.model.set( binding.resetValue );\n}\n\nvar DOMEvent = function DOMEvent ( name, owner ) {\n\tif ( name.indexOf( '*' ) !== -1 ) {\n\t\tfatal( (\""Only component proxy-events may contain \\\""*\\\"" wildcards, <\"" + (owner.name) + \"" on-\"" + name + \""=\\\""...\\\""/> is not valid\"") );\n\t}\n\n\tthis.name = name;\n\tthis.owner = owner;\n\tthis.node = null;\n\tthis.handler = null;\n};\n\nDOMEvent.prototype.listen = function listen ( directive ) {\n\t\tvar node = this.node = this.owner.node;\n\tvar name = this.name;\n\n\t// this is probably a custom event fired from a decorator or manually\n\t\tif ( !( (\""on\"" + name) in node ) ) { return; }\n\n\tnode.addEventListener( name, this.handler = function( event ) {\n\t\tdirective.fire({\n\t\t\tnode: node,\n\t\t\toriginal: event\n\t\t});\n\t}, false );\n};\n\nDOMEvent.prototype.unlisten = function unlisten () {\n\tif ( this.handler ) { this.node.removeEventListener( this.name, this.handler, false ); }\n};\n\nvar CustomEvent = function CustomEvent ( eventPlugin, owner ) {\n\tthis.eventPlugin = eventPlugin;\n\tthis.owner = owner;\n\tthis.handler = null;\n};\n\nCustomEvent.prototype.listen = function listen ( directive ) {\n\tvar node = this.owner.node;\n\n\tthis.handler = this.eventPlugin( node, function ( event ) {\n\t\t\tif ( event === void 0 ) event = {};\n\n\t\tevent.node = event.node || node;\n\t\tdirective.fire( event );\n\t\t});\n\t};\n\n\tCustomEvent.prototype.unlisten = function unlisten () {\n\t\tthis.handler.teardown();\n};\n\nvar RactiveEvent = function RactiveEvent ( component, name ) {\n\tthis.component = component;\n\tthis.name = name;\n\tthis.handler = null;\n};\n\nRactiveEvent.prototype.listen = function listen ( directive ) {\n\tvar ractive = this.component.instance;\n\n\tthis.handler = ractive.on( this.name, function () {\n\t\tvar event;\n\n\t\t// semi-weak test, but what else? tag the event obj ._isEvent ?\n\t\tif ( arguments.length && arguments[0] && arguments[0].node ) {\n\t\t\tevent = Array.prototype.shift.call( arguments );\n\t\t\tevent.component = ractive;\n\t\t}\n\n\t\tvar args = Array.prototype.slice.call( arguments );\n\t\tdirective.fire( event, args );\n\n\t\t// cancel bubbling\n\t\treturn false;\n\t});\n};\n\nRactiveEvent.prototype.unlisten = function unlisten () {\n\tthis.handler.cancel();\n};\n\nvar specialPattern = /^(event|arguments)(\\..+)?$/;\nvar dollarArgsPattern = /^\\$(\\d+)(\\..+)?$/;\n\nvar EventDirective = function EventDirective ( options ) {\n\tvar this$1 = this;\n\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment, true );\n\tthis.template = options.template;\n\tthis.parentFragment = options.parentFragment;\n\tthis.ractive = options.parentFragment.ractive;\n\n\tthis.events = [];\n\n\tif ( this.element.type === COMPONENT || this.element.type === ANCHOR ) {\n\t\tthis.template.n.forEach( function (n) {\n\t\t\tthis$1.events.push( new RactiveEvent( this$1.element, n ) );\n\t\t});\n\t} else {\n\t\tthis.template.n.forEach( function (n) {\n\t\t\tvar fn = findInViewHierarchy( 'events', this$1.ractive, n );\n\t\t\t// we need to pass in \""this\"" in order to get\n\t\t\t// access to node when it is created.\n\t\t\tthis$1.events.push( fn ? new CustomEvent( fn, this$1.element ) : new DOMEvent( n, this$1.element ) );\n\t\t});\n\t}\n\n\t// method calls\n\tthis.resolvers = null;\n\tthis.models = null;\n};\n\nEventDirective.prototype.bind = function bind () {\n\taddToArray( this.element.events, this );\n\n\tsetupArgsFn( this, this.template );\n\tif ( !this.fn ) { this.action = this.template.f; }\n};\n\nEventDirective.prototype.destroyed = function destroyed () {\n\tthis.events.forEach( function (e) { return e.unlisten(); } );\n};\n\nEventDirective.prototype.fire = function fire ( event, passedArgs ) {\n\t\tif ( passedArgs === void 0 ) passedArgs = [];\n\n\t// augment event object\n\tif ( event && !event.hasOwnProperty( '_element' ) ) {\n\t\t   addHelpers( event, this.owner );\n\t}\n\n\tif ( this.fn ) {\n\t\tvar values = [];\n\n\t\tif ( event ) { passedArgs.unshift( event ); }\n\n\t\tvar models = resolveArgs( this, this.template, this.parentFragment, {\n\t\t\tspecialRef: function specialRef ( ref ) {\n\t\t\t\tvar specialMatch = specialPattern.exec( ref );\n\t\t\t\tif ( specialMatch ) {\n\t\t\t\t\t// on-click=\""foo(event.node)\""\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspecial: specialMatch[1],\n\t\t\t\t\t\tkeys: specialMatch[2] ? splitKeypath( specialMatch[2].substr(1) ) : []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvar dollarMatch = dollarArgsPattern.exec( ref );\n\t\t\t\tif ( dollarMatch ) {\n\t\t\t\t\t// on-click=\""foo($1)\""\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspecial: 'arguments',\n\t\t\t\t\t\tkeys: [ dollarMatch[1] - 1 ].concat( dollarMatch[2] ? splitKeypath( dollarMatch[2].substr( 1 ) ) : [] )\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( models ) {\n\t\t\tmodels.forEach( function (model) {\n\t\t\t\tif ( !model ) { return values.push( undefined ); }\n\n\t\t\t\tif ( model.special ) {\n\t\t\t\t\tvar obj = model.special === 'event' ? event : passedArgs;\n\t\t\t\t\tvar keys = model.keys.slice();\n\n\t\t\t\t\twhile ( keys.length ) { obj = obj[ keys.shift() ]; }\n\t\t\t\t\treturn values.push( obj );\n\t\t\t\t}\n\n\t\t\t\tif ( model.wrapper ) {\n\t\t\t\t\treturn values.push( model.wrapperValue );\n\t\t\t\t}\n\n\t\t\t\tvalues.push( model.get() );\n\t\t\t});\n\t\t}\n\n\t\t// make event available as `this.event`\n\t\tvar ractive = this.ractive;\n\t\tvar oldEvent = ractive.event;\n\n\t\tractive.event = event;\n\t\tvar result = this.fn.apply( ractive, values ).pop();\n\n\t\t// Auto prevent and stop if return is explicitly false\n\t\tif ( result === false ) {\n\t\t\tvar original = event ? event.original : undefined;\n\t\t\tif ( original ) {\n\t\t\t\toriginal.preventDefault && original.preventDefault();\n\t\t\t\toriginal.stopPropagation && original.stopPropagation();\n\t\t\t} else {\n\t\t\t\twarnOnceIfDebug( (\""handler '\"" + (this.template.n.join( ' ' )) + \""' returned false, but there is no event available to cancel\"") );\n\t\t\t}\n\t\t}\n\n\t\tractive.event = oldEvent;\n\t}\n\n\telse {\n\t\tvar args = [];\n\t\tif ( passedArgs.length ) { args = args.concat( passedArgs ); }\n\t\tif ( event ) { event.name = this.action; }\n\n\t\tfireEvent( this.ractive, this.action, {\n\t\t\tevent: event,\n\t\t\targs: args\n\t\t});\n\t}\n};\n\nEventDirective.prototype.handleChange = function handleChange () {};\n\nEventDirective.prototype.render = function render () {\n\t\tvar this$1 = this;\n\n\t// render events after everything else, so they fire after bindings\n\trunloop.scheduleTask( function () { return this$1.events.forEach( function (e) { return e.listen( this$1 ); }, true ); } );\n};\n\nEventDirective.prototype.toString = function toString () { return ''; };\n\nEventDirective.prototype.unbind = function unbind () {\n\tremoveFromArray( this.element.events, this );\n};\n\nEventDirective.prototype.unrender = function unrender () {\n\tthis.events.forEach( function (e) { return e.unlisten(); } );\n};\n\nEventDirective.prototype.update = noop;\n\nvar Mustache = (function (Item$$1) {\n\tfunction Mustache ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.parentFragment = options.parentFragment;\n\t\tthis.template = options.template;\n\t\tthis.index = options.index;\n\t\tif ( options.owner ) { this.parent = options.owner; }\n\n\t\tthis.isStatic = !!options.template.s;\n\n\t\tthis.model = null;\n\t\tthis.dirty = false;\n\t}\n\n\tif ( Item$$1 ) Mustache.__proto__ = Item$$1;\n\tMustache.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tMustache.prototype.constructor = Mustache;\n\n\tMustache.prototype.bind = function bind () {\n\t\tvar this$1 = this;\n\n\t\t// yield mustaches should resolve in container context\n\t\tvar start = this.containerFragment || this.parentFragment;\n\t\t// try to find a model for this view\n\t\tvar model = resolve$2( start, this.template );\n\t\tvar value = model ? model.get() : undefined;\n\n\t\tif ( this.isStatic ) {\n\t\t\tthis.model = { get: function () { return value; } };\n\t\t\treturn;\n\t\t}\n\n\t\tif ( model ) {\n\t\t\tmodel.register( this );\n\t\t\tthis.model = model;\n\t\t} else {\n\t\t\tthis.resolver = start.resolve( this.template.r, function (model) {\n\t\t\t\tthis$1.model = model;\n\t\t\t\tmodel.register( this$1 );\n\n\t\t\t\tthis$1.handleChange();\n\t\t\t\tthis$1.resolver = null;\n\t\t\t});\n\t\t}\n\t};\n\n\tMustache.prototype.handleChange = function handleChange () {\n\t\tthis.bubble();\n\t};\n\n\tMustache.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tnext = rebindMatch( this.template, next, previous, this.parentFragment );\n\t\tif ( next === this.model ) { return false; }\n\n\t\tif ( this.model ) {\n\t\t\tthis.model.unregister( this );\n\t\t}\n\t\tif ( next ) { next.addShuffleRegister( this, 'mark' ); }\n\t\tthis.model = next;\n\t\tif ( !safe ) { this.handleChange(); }\n\t\treturn true;\n\t};\n\n\tMustache.prototype.unbind = function unbind () {\n\t\tif ( !this.isStatic ) {\n\t\t\tthis.model && this.model.unregister( this );\n\t\t\tthis.model = undefined;\n\t\t\tthis.resolver && this.resolver.unbind();\n\t\t}\n\t};\n\n\treturn Mustache;\n}(Item));\n\nvar MustacheContainer = (function (ContainerItem$$1) {\n\tfunction MustacheContainer ( options ) {\n\t\tContainerItem$$1.call( this, options );\n\t}\n\n\tif ( ContainerItem$$1 ) MustacheContainer.__proto__ = ContainerItem$$1;\n\tMustacheContainer.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );\n\tMustacheContainer.prototype.constructor = MustacheContainer;\n\n\treturn MustacheContainer;\n}(ContainerItem));\nvar proto$2 = MustacheContainer.prototype;\nvar mustache = Mustache.prototype;\nproto$2.bind = mustache.bind;\nproto$2.handleChange = mustache.handleChange;\nproto$2.rebind = mustache.rebind;\nproto$2.unbind = mustache.unbind;\n\nvar Interpolator = (function (Mustache$$1) {\n\tfunction Interpolator () {\n\t\tMustache$$1.apply(this, arguments);\n\t}\n\n\tif ( Mustache$$1 ) Interpolator.__proto__ = Mustache$$1;\n\tInterpolator.prototype = Object.create( Mustache$$1 && Mustache$$1.prototype );\n\tInterpolator.prototype.constructor = Interpolator;\n\n\tInterpolator.prototype.bubble = function bubble () {\n\t\tif ( this.owner ) { this.owner.bubble(); }\n\t\tMustache$$1.prototype.bubble.call(this);\n\t};\n\n\tInterpolator.prototype.detach = function detach () {\n\t\treturn detachNode( this.node );\n\t};\n\n\tInterpolator.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tInterpolator.prototype.getString = function getString () {\n\t\treturn this.model ? safeToStringValue( this.model.get() ) : '';\n\t};\n\n\tInterpolator.prototype.render = function render ( target, occupants ) {\n\t\tif ( inAttributes() ) { return; }\n\t\tvar value = this.getString();\n\n\t\tthis.rendered = true;\n\n\t\tif ( occupants ) {\n\t\t\tvar n = occupants[0];\n\t\t\tif ( n && n.nodeType === 3 ) {\n\t\t\t\toccupants.shift();\n\t\t\t\tif ( n.nodeValue !== value ) {\n\t\t\t\t\tn.nodeValue = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tn = this.node = doc.createTextNode( value );\n\t\t\t\tif ( occupants[0] ) {\n\t\t\t\t\ttarget.insertBefore( n, occupants[0] );\n\t\t\t\t} else {\n\t\t\t\t\ttarget.appendChild( n );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.node = n;\n\t\t} else {\n\t\t\tthis.node = doc.createTextNode( value );\n\t\t\ttarget.appendChild( this.node );\n\t\t}\n\t};\n\n\tInterpolator.prototype.toString = function toString ( escape ) {\n\t\tvar string = this.getString();\n\t\treturn escape ? escapeHtml( string ) : string;\n\t};\n\n\tInterpolator.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( shouldDestroy ) { this.detach(); }\n\t\tthis.rendered = false;\n\t};\n\n\tInterpolator.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.rendered ) {\n\t\t\t\tthis.node.data = this.getString();\n\t\t\t}\n\t\t}\n\t};\n\n\tInterpolator.prototype.valueOf = function valueOf () {\n\t\treturn this.model ? this.model.get() : undefined;\n\t};\n\n\treturn Interpolator;\n}(Mustache));\n\nvar Input = (function (Element$$1) {\n\tfunction Input () {\n\t\tElement$$1.apply(this, arguments);\n\t}\n\n\tif ( Element$$1 ) Input.__proto__ = Element$$1;\n\tInput.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tInput.prototype.constructor = Input;\n\n\tInput.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.node.defaultValue = this.node.value;\n\t};\n\n\treturn Input;\n}(Element));\n\n// simple JSON parser, without the restrictions of JSON parse\n// (i.e. having to double-quote keys).\n//\n// If passed a hash of values as the second argument, ${placeholders}\n// will be replaced with those values\n\nvar specials$1 = {\n\t'true': true,\n\t'false': false,\n\t'null': null,\n\tundefined: undefined\n};\n\nvar specialsPattern = new RegExp( '^(?:' + Object.keys( specials$1 ).join( '|' ) + ')' );\nvar numberPattern$1 = /^(?:[+-]?)(?:(?:(?:0|[1-9]\\d*)?\\.\\d+)|(?:(?:0|[1-9]\\d*)\\.)|(?:0|[1-9]\\d*))(?:[eE][+-]?\\d+)?/;\nvar placeholderPattern = /\\$\\{([^\\}]+)\\}/g;\nvar placeholderAtStartPattern = /^\\$\\{([^\\}]+)\\}/;\nvar onlyWhitespace = /^\\s*$/;\n\nvar JsonParser = Parser.extend({\n\tinit: function init ( str, options ) {\n\t\tthis.values = options.values;\n\t\tthis.allowWhitespace();\n\t},\n\n\tpostProcess: function postProcess ( result ) {\n\t\tif ( result.length !== 1 || !onlyWhitespace.test( this.leftover ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { value: result[0].v };\n\t},\n\n\tconverters: [\n\t\tfunction getPlaceholder ( parser ) {\n\t\t\tif ( !parser.values ) { return null; }\n\n\t\t\tvar placeholder = parser.matchPattern( placeholderAtStartPattern );\n\n\t\t\tif ( placeholder && ( parser.values.hasOwnProperty( placeholder ) ) ) {\n\t\t\t\treturn { v: parser.values[ placeholder ] };\n\t\t\t}\n\t\t},\n\n\t\tfunction getSpecial ( parser ) {\n\t\t\tvar special = parser.matchPattern( specialsPattern );\n\t\t\tif ( special ) { return { v: specials$1[ special ] }; }\n\t\t},\n\n\t\tfunction getNumber ( parser ) {\n\t\t\tvar number = parser.matchPattern( numberPattern$1 );\n\t\t\tif ( number ) { return { v: +number }; }\n\t\t},\n\n\t\tfunction getString ( parser ) {\n\t\t\tvar stringLiteral = readStringLiteral( parser );\n\t\t\tvar values = parser.values;\n\n\t\t\tif ( stringLiteral && values ) {\n\t\t\t\treturn {\n\t\t\t\t\tv: stringLiteral.v.replace( placeholderPattern, function ( match, $1 ) { return ( $1 in values ? values[ $1 ] : $1 ); } )\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn stringLiteral;\n\t\t},\n\n\t\tfunction getObject ( parser ) {\n\t\t\tif ( !parser.matchString( '{' ) ) { return null; }\n\n\t\t\tvar result = {};\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( parser.matchString( '}' ) ) {\n\t\t\t\treturn { v: result };\n\t\t\t}\n\n\t\t\tvar pair;\n\t\t\twhile ( pair = getKeyValuePair( parser ) ) {\n\t\t\t\tresult[ pair.key ] = pair.value;\n\n\t\t\t\tparser.allowWhitespace();\n\n\t\t\t\tif ( parser.matchString( '}' ) ) {\n\t\t\t\t\treturn { v: result };\n\t\t\t\t}\n\n\t\t\t\tif ( !parser.matchString( ',' ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\tfunction getArray ( parser ) {\n\t\t\tif ( !parser.matchString( '[' ) ) { return null; }\n\n\t\t\tvar result = [];\n\n\t\t\tparser.allowWhitespace();\n\n\t\t\tif ( parser.matchString( ']' ) ) {\n\t\t\t\treturn { v: result };\n\t\t\t}\n\n\t\t\tvar valueToken;\n\t\t\twhile ( valueToken = parser.read() ) {\n\t\t\t\tresult.push( valueToken.v );\n\n\t\t\t\tparser.allowWhitespace();\n\n\t\t\t\tif ( parser.matchString( ']' ) ) {\n\t\t\t\t\treturn { v: result };\n\t\t\t\t}\n\n\t\t\t\tif ( !parser.matchString( ',' ) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tparser.allowWhitespace();\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t]\n});\n\nfunction getKeyValuePair ( parser ) {\n\tparser.allowWhitespace();\n\n\tvar key = readKey( parser );\n\n\tif ( !key ) { return null; }\n\n\tvar pair = { key: key };\n\n\tparser.allowWhitespace();\n\tif ( !parser.matchString( ':' ) ) {\n\t\treturn null;\n\t}\n\tparser.allowWhitespace();\n\n\tvar valueToken = parser.read();\n\n\tif ( !valueToken ) { return null; }\n\n\tpair.value = valueToken.v;\n\treturn pair;\n}\n\nvar parseJSON = function ( str, values ) {\n\tvar parser = new JsonParser( str, { values: values });\n\treturn parser.result;\n};\n\nvar Mapping = (function (Item$$1) {\n\tfunction Mapping ( options ) {\n\t\tItem$$1.call( this, options );\n\n\t\tthis.name = options.template.n;\n\n\t\tthis.owner = options.owner || options.parentFragment.owner || options.element || findElement( options.parentFragment );\n\t\tthis.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.parentFragment ) );\n\t\tthis.parentFragment = this.element.parentFragment; // shared\n\t\tthis.ractive = this.parentFragment.ractive;\n\n\t\tthis.fragment = null;\n\n\t\tthis.element.attributeByName[ this.name ] = this;\n\n\t\tthis.value = options.template.f;\n\t}\n\n\tif ( Item$$1 ) Mapping.__proto__ = Item$$1;\n\tMapping.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tMapping.prototype.constructor = Mapping;\n\n\tMapping.prototype.bind = function bind () {\n\t\tif ( this.fragment ) {\n\t\t\tthis.fragment.bind();\n\t\t}\n\n\t\tvar template = this.template.f;\n\t\tvar viewmodel = this.element.instance.viewmodel;\n\n\t\tif ( template === 0 ) {\n\t\t\t// empty attributes are `true`\n\t\t\tviewmodel.joinKey( this.name ).set( true );\n\t\t}\n\n\t\telse if ( typeof template === 'string' ) {\n\t\t\tvar parsed = parseJSON( template );\n\t\t\tviewmodel.joinKey( this.name ).set( parsed ? parsed.value : template );\n\t\t}\n\n\t\telse if ( Array.isArray( template ) ) {\n\t\t\tcreateMapping( this, true );\n\t\t}\n\t};\n\n\tMapping.prototype.render = function render () {};\n\n\tMapping.prototype.unbind = function unbind () {\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t\tif ( this.boundFragment ) { this.boundFragment.unbind(); }\n\n\t\tif ( this.element.bound ) {\n\t\t\tif ( this.link.target === this.model ) { this.link.owner.unlink(); }\n\t\t}\n\t};\n\n\tMapping.prototype.unrender = function unrender () {};\n\n\tMapping.prototype.update = function update () {\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\t\t\tif ( this.fragment ) { this.fragment.update(); }\n\t\t\tif ( this.boundFragment ) { this.boundFragment.update(); }\n\t\t\tif ( this.rendered ) { this.updateDelegate(); }\n\t\t}\n\t};\n\n\treturn Mapping;\n}(Item));\n\nfunction createMapping ( item ) {\n\tvar template = item.template.f;\n\tvar viewmodel = item.element.instance.viewmodel;\n\tvar childData = viewmodel.value;\n\n\tif ( template.length === 1 && template[0].t === INTERPOLATOR ) {\n\t\titem.model = resolve$2( item.parentFragment, template[0] );\n\n\t\tif ( !item.model ) {\n\t\t\twarnOnceIfDebug( (\""The \"" + (item.name) + \""='{{\"" + (template[0].r) + \""}}' mapping is ambiguous, and may cause unexpected results. Consider initialising your data to eliminate the ambiguity\""), { ractive: item.element.instance }); // TODO add docs page explaining item\n\t\t\titem.parentFragment.ractive.get( item.name ); // side-effect: create mappings as necessary\n\t\t\titem.model = item.parentFragment.findContext().joinKey( item.name );\n\t\t}\n\n\t\titem.link = viewmodel.createLink( item.name, item.model, template[0].r );\n\n\t\tif ( item.model.get() === undefined && item.name in childData ) {\n\t\t\titem.model.set( childData[ item.name ] );\n\t\t}\n\t}\n\n\telse {\n\t\titem.boundFragment = new Fragment({\n\t\t\towner: item,\n\t\t\ttemplate: template\n\t\t}).bind();\n\n\t\titem.model = viewmodel.joinKey( item.name );\n\t\titem.model.set( item.boundFragment.valueOf() );\n\n\t\t// item is a *bit* of a hack\n\t\titem.boundFragment.bubble = function () {\n\t\t\tFragment.prototype.bubble.call( item.boundFragment );\n\t\t\t// defer this to avoid mucking around model deps if there happens to be an expression involved\n\t\t\trunloop.scheduleTask(function () {\n\t\t\t\titem.boundFragment.update();\n\t\t\t\titem.model.set( item.boundFragment.valueOf() );\n\t\t\t});\n\t\t};\n\t}\n}\n\nvar Option = (function (Element$$1) {\n\tfunction Option ( options ) {\n\t\tvar template = options.template;\n\t\tif ( !template.a ) { template.a = {}; }\n\n\t\t// If the value attribute is missing, use the element's content,\n\t\t// as long as it isn't disabled\n\t\tif ( template.a.value === undefined && !( 'disabled' in template.a ) ) {\n\t\t\ttemplate.a.value = template.f || '';\n\t\t}\n\n\t\tElement$$1.call( this, options );\n\n\t\tthis.select = findElement( this.parent || this.parentFragment, false, 'select' );\n\t}\n\n\tif ( Element$$1 ) Option.__proto__ = Element$$1;\n\tOption.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tOption.prototype.constructor = Option;\n\n\tOption.prototype.bind = function bind () {\n\t\tif ( !this.select ) {\n\t\t\tElement$$1.prototype.bind.call(this);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the select has a value, it overrides the `selected` attribute on\n\t\t// this option - so we delete the attribute\n\t\tvar selectedAttribute = this.attributeByName.selected;\n\t\tif ( selectedAttribute && this.select.getAttribute( 'value' ) !== undefined ) {\n\t\t\tvar index = this.attributes.indexOf( selectedAttribute );\n\t\t\tthis.attributes.splice( index, 1 );\n\t\t\tdelete this.attributeByName.selected;\n\t\t}\n\n\t\tElement$$1.prototype.bind.call(this);\n\t\tthis.select.options.push( this );\n\t};\n\n\tOption.prototype.bubble = function bubble () {\n\t\t// if we're using content as value, may need to update here\n\t\tvar value = this.getAttribute( 'value' );\n\t\tif ( this.node && this.node.value !== value ) {\n\t\t\tthis.node._ractive.value = value;\n\t\t}\n\t\tElement$$1.prototype.bubble.call(this);\n\t};\n\n\tOption.prototype.getAttribute = function getAttribute ( name ) {\n\t\tvar attribute = this.attributeByName[ name ];\n\t\treturn attribute ? attribute.getValue() : name === 'value' && this.fragment ? this.fragment.valueOf() : undefined;\n\t};\n\n\tOption.prototype.isSelected = function isSelected () {\n\t\tvar optionValue = this.getAttribute( 'value' );\n\n\t\tif ( optionValue === undefined || !this.select ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar selectValue = this.select.getAttribute( 'value' );\n\n\t\tif ( selectValue == optionValue ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( this.select.getAttribute( 'multiple' ) && Array.isArray( selectValue ) ) {\n\t\t\tvar i = selectValue.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( selectValue[i] == optionValue ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tOption.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\n\t\tif ( !this.attributeByName.value ) {\n\t\t\tthis.node._ractive.value = this.getAttribute( 'value' );\n\t\t}\n\t};\n\n\tOption.prototype.unbind = function unbind () {\n\t\tElement$$1.prototype.unbind.call(this);\n\n\t\tif ( this.select ) {\n\t\t\tremoveFromArray( this.select.options, this );\n\t\t}\n\t};\n\n\treturn Option;\n}(Element));\n\nfunction getPartialTemplate ( ractive, name, parentFragment ) {\n\t// If the partial in instance or view heirarchy instances, great\n\tvar partial = getPartialFromRegistry( ractive, name, parentFragment || {} );\n\tif ( partial ) { return partial; }\n\n\t// Does it exist on the page as a script tag?\n\tpartial = parser.fromId( name, { noThrow: true } );\n\tif ( partial ) {\n\t\t// parse and register to this ractive instance\n\t\tvar parsed = parser.parseFor( partial, ractive );\n\n\t\t// register extra partials on the ractive instance if they don't already exist\n\t\tif ( parsed.p ) { fillGaps( ractive.partials, parsed.p ); }\n\n\t\t// register (and return main partial if there are others in the template)\n\t\treturn ractive.partials[ name ] = parsed.t;\n\t}\n}\n\nfunction getPartialFromRegistry ( ractive, name, parentFragment ) {\n\t// if there was an instance up-hierarchy, cool\n\tvar partial = findParentPartial( name, parentFragment.owner );\n\tif ( partial ) { return partial; }\n\n\t// find first instance in the ractive or view hierarchy that has this partial\n\tvar instance = findInstance( 'partials', ractive, name );\n\n\tif ( !instance ) { return; }\n\n\tpartial = instance.partials[ name ];\n\n\t// partial is a function?\n\tvar fn;\n\tif ( typeof partial === 'function' ) {\n\t\tfn = partial.bind( instance );\n\t\tfn.isOwner = instance.partials.hasOwnProperty(name);\n\t\tpartial = fn.call( ractive, parser );\n\t}\n\n\tif ( !partial && partial !== '' ) {\n\t\twarnIfDebug( noRegistryFunctionReturn, name, 'partial', 'partial', { ractive: ractive });\n\t\treturn;\n\t}\n\n\t// If this was added manually to the registry,\n\t// but hasn't been parsed, parse it now\n\tif ( !parser.isParsed( partial ) ) {\n\t\t// use the parseOptions of the ractive instance on which it was found\n\t\tvar parsed = parser.parseFor( partial, instance );\n\n\t\t// Partials cannot contain nested partials!\n\t\t// TODO add a test for this\n\t\tif ( parsed.p ) {\n\t\t\twarnIfDebug( 'Partials ({{>%s}}) cannot contain nested inline partials', name, { ractive: ractive });\n\t\t}\n\n\t\t// if fn, use instance to store result, otherwise needs to go\n\t\t// in the correct point in prototype chain on instance or constructor\n\t\tvar target = fn ? instance : findOwner( instance, name );\n\n\t\t// may be a template with partials, which need to be registered and main template extracted\n\t\ttarget.partials[ name ] = partial = parsed.t;\n\t}\n\n\t// store for reset\n\tif ( fn ) { partial._fn = fn; }\n\n\treturn partial.v ? partial.t : partial;\n}\n\nfunction findOwner ( ractive, key ) {\n\treturn ractive.partials.hasOwnProperty( key )\n\t\t? ractive\n\t\t: findConstructor( ractive.constructor, key);\n}\n\nfunction findConstructor ( constructor, key ) {\n\tif ( !constructor ) { return; }\n\treturn constructor.partials.hasOwnProperty( key )\n\t\t? constructor\n\t\t: findConstructor( constructor._Parent, key );\n}\n\nfunction findParentPartial( name, parent ) {\n\tif ( parent ) {\n\t\tif ( parent.template && parent.template.p && parent.template.p[name] ) {\n\t\t\treturn parent.template.p[name];\n\t\t} else if ( parent.parentFragment && parent.parentFragment.owner ) {\n\t\t\treturn findParentPartial( name, parent.parentFragment.owner );\n\t\t}\n\t}\n}\n\nvar Partial = (function (MustacheContainer$$1) {\n\tfunction Partial ( options ) {\n\t\tMustacheContainer$$1.call( this, options );\n\n\t\tthis.yielder = options.template.t === YIELDER;\n\n\t\tif ( this.yielder ) {\n\t\t\tthis.container = options.parentFragment.ractive;\n\t\t\tthis.component = this.container.component;\n\n\t\t\tthis.containerFragment = options.parentFragment;\n\t\t\tthis.parentFragment = this.component.parentFragment;\n\n\t\t\t// {{yield}} is equivalent to {{yield content}}\n\t\t\tif ( !options.template.r && !options.template.rx && !options.template.x ) { options.template.r = 'content'; }\n\t\t}\n\t}\n\n\tif ( MustacheContainer$$1 ) Partial.__proto__ = MustacheContainer$$1;\n\tPartial.prototype = Object.create( MustacheContainer$$1 && MustacheContainer$$1.prototype );\n\tPartial.prototype.constructor = Partial;\n\n\tPartial.prototype.bind = function bind () {\n\t\tvar this$1 = this;\n\n\t\t// keep track of the reference name for future resets\n\t\tthis.refName = this.template.r;\n\n\t\t// name matches take priority over expressions\n\t\tvar template = this.refName ? getPartialTemplate( this.ractive, this.refName, this.parentFragment ) || null : null;\n\t\tvar templateObj;\n\n\t\tif ( template ) {\n\t\t\tthis.named = true;\n\t\t\tthis.setTemplate( this.template.r, template );\n\t\t}\n\n\t\tif ( !template ) {\n\t\t\tMustacheContainer$$1.prototype.bind.call(this);\n\t\t\tif ( this.model && ( templateObj = this.model.get() ) && typeof templateObj === 'object' && ( typeof templateObj.template === 'string' || Array.isArray( templateObj.t ) ) ) {\n\t\t\t\tif ( templateObj.template ) {\n\t\t\t\t\tthis.source = templateObj.template;\n\t\t\t\t\ttemplateObj = parsePartial( this.template.r, templateObj.template, this.ractive );\n\t\t\t\t} else {\n\t\t\t\t\tthis.source = templateObj.t;\n\t\t\t\t}\n\t\t\t\tthis.setTemplate( this.template.r, templateObj.t );\n\t\t\t} else if ( ( !this.model || typeof this.model.get() !== 'string' ) && this.refName ) {\n\t\t\t\tthis.setTemplate( this.refName, template );\n\t\t\t} else {\n\t\t\t\tthis.setTemplate( this.model.get() );\n\t\t\t}\n\t\t}\n\n\t\tvar options = {\n\t\t\towner: this,\n\t\t\ttemplate: this.partialTemplate\n\t\t};\n\n\t\tif ( this.template.c ) {\n\t\t\toptions.template = [{ t: SECTION, n: SECTION_WITH, f: options.template }];\n\t\t\tfor ( var k in this.template.c ) {\n\t\t\t\toptions.template[0][k] = this$1.template.c[k];\n\t\t\t}\n\t\t}\n\n\t\tif ( this.yielder ) {\n\t\t\toptions.ractive = this.container.parent;\n\t\t}\n\n\t\tthis.fragment = new Fragment(options);\n\t\tif ( this.template.z ) {\n\t\t\tthis.fragment.aliases = resolveAliases( this.template.z, this.yielder ? this.containerFragment : this.parentFragment );\n\t\t}\n\t\tthis.fragment.bind();\n\t};\n\n\tPartial.prototype.bubble = function bubble () {\n\t\tif ( this.yielder && !this.dirty ) {\n\t\t\tthis.containerFragment.bubble();\n\t\t\tthis.dirty = true;\n\t\t} else {\n\t\t\tMustacheContainer$$1.prototype.bubble.call(this);\n\t\t}\n\t};\n\n\tPartial.prototype.findNextNode = function findNextNode () {\n\t\treturn this.yielder ? this.containerFragment.findNextNode( this ) : MustacheContainer$$1.prototype.findNextNode.call(this);\n\t};\n\n\tPartial.prototype.forceResetTemplate = function forceResetTemplate () {\n\t\tvar this$1 = this;\n\n\t\tthis.partialTemplate = undefined;\n\n\t\t// on reset, check for the reference name first\n\t\tif ( this.refName ) {\n\t\t\tthis.partialTemplate = getPartialTemplate( this.ractive, this.refName, this.parentFragment );\n\t\t}\n\n\t\t// then look for the resolved name\n\t\tif ( !this.partialTemplate ) {\n\t\t\tthis.partialTemplate = getPartialTemplate( this.ractive, this.name, this.parentFragment );\n\t\t}\n\n\t\tif ( !this.partialTemplate ) {\n\t\t\twarnOnceIfDebug( (\""Could not find template for partial '\"" + (this.name) + \""'\"") );\n\t\t\tthis.partialTemplate = [];\n\t\t}\n\n\t\tif ( this.inAttribute ) {\n\t\t\tdoInAttributes( function () { return this$1.fragment.resetTemplate( this$1.partialTemplate ); } );\n\t\t} else {\n\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t}\n\n\t\tthis.bubble();\n\t};\n\n\tPartial.prototype.render = function render ( target, occupants ) {\n\t\treturn this.fragment.render( target, occupants );\n\t};\n\n\tPartial.prototype.setTemplate = function setTemplate ( name, template ) {\n\t\tthis.name = name;\n\n\t\tif ( !template && template !== null ) { template = getPartialTemplate( this.ractive, name, this.parentFragment ); }\n\n\t\tif ( !template ) {\n\t\t\twarnOnceIfDebug( (\""Could not find template for partial '\"" + name + \""'\"") );\n\t\t}\n\n\t\tthis.partialTemplate = template || [];\n\t};\n\n\tPartial.prototype.unbind = function unbind () {\n\t\tMustacheContainer$$1.prototype.unbind.call(this);\n\t\tthis.fragment.aliases = {};\n\t\tthis.fragment.unbind();\n\t};\n\n\tPartial.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tthis.fragment.unrender( shouldDestroy );\n\t};\n\n\tPartial.prototype.update = function update () {\n\t\tvar template;\n\n\t\tif ( this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tif ( !this.named ) {\n\t\t\t\tif ( this.model ) {\n\t\t\t\t\ttemplate = this.model.get();\n\t\t\t\t}\n\n\t\t\t\tif ( template && typeof template === 'string' && template !== this.name ) {\n\t\t\t\t\tthis.setTemplate( template );\n\t\t\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t\t\t} else if ( template && typeof template === 'object' && ( typeof template.template === 'string' || Array.isArray( template.t ) ) ) {\n\t\t\t\t\tif ( template.t !== this.source && template.template !== this.source ) {\n\t\t\t\t\t\tif ( template.template ) {\n\t\t\t\t\t\t\tthis.source = template.template;\n\t\t\t\t\t\t\ttemplate = parsePartial( this.name, template.template, this.ractive );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.source = template.t;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.setTemplate( this.name, template.t );\n\t\t\t\t\t\tthis.fragment.resetTemplate( this.partialTemplate );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.fragment.update();\n\t\t}\n\t};\n\n\treturn Partial;\n}(MustacheContainer));\n\nfunction parsePartial( name, partial, ractive ) {\n\tvar parsed;\n\n\ttry {\n\t\tparsed = parser.parse( partial, parser.getParseOptions( ractive ) );\n\t} catch (e) {\n\t\twarnIfDebug( (\""Could not parse partial from expression '\"" + name + \""'\\n\"" + (e.message)) );\n\t}\n\n\treturn parsed || { t: [] };\n}\n\nvar RepeatedFragment = function RepeatedFragment ( options ) {\n\tthis.parent = options.owner.parentFragment;\n\n\t// bit of a hack, so reference resolution works without another\n\t// layer of indirection\n\tthis.parentFragment = this;\n\tthis.owner = options.owner;\n\tthis.ractive = this.parent.ractive;\n\n\t// encapsulated styles should be inherited until they get applied by an element\n\tthis.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );\n\n\tthis.context = null;\n\tthis.rendered = false;\n\tthis.iterations = [];\n\n\tthis.template = options.template;\n\n\tthis.indexRef = options.indexRef;\n\tthis.keyRef = options.keyRef;\n\n\tthis.pendingNewIndices = null;\n\tthis.previousIterations = null;\n\n\t// track array versus object so updates of type rest\n\tthis.isArray = false;\n};\n\nRepeatedFragment.prototype.bind = function bind ( context ) {\n\t\tvar this$1 = this;\n\n\tthis.context = context;\n\tvar value = context.get();\n\n\t// {{#each array}}...\n\tif ( this.isArray = Array.isArray( value ) ) {\n\t\t// we can't use map, because of sparse arrays\n\t\tthis.iterations = [];\n\t\tvar max = value.length;\n\t\tfor ( var i = 0; i < max; i += 1 ) {\n\t\t\tthis$1.iterations[i] = this$1.createIteration( i, i );\n\t\t}\n\t}\n\n\t// {{#each object}}...\n\telse if ( isObject( value ) ) {\n\t\tthis.isArray = false;\n\n\t\t// TODO this is a dreadful hack. There must be a neater way\n\t\tif ( this.indexRef ) {\n\t\t\tvar refs = this.indexRef.split( ',' );\n\t\t\tthis.keyRef = refs[0];\n\t\t\tthis.indexRef = refs[1];\n\t\t}\n\n\t\tthis.iterations = Object.keys( value ).map( function ( key, index ) {\n\t\t\treturn this$1.createIteration( key, index );\n\t\t});\n\t}\n\n\treturn this;\n};\n\nRepeatedFragment.prototype.bubble = function bubble () {\n\tthis.owner.bubble();\n};\n\nRepeatedFragment.prototype.createIteration = function createIteration ( key, index ) {\n\tvar fragment = new Fragment({\n\t\towner: this,\n\t\ttemplate: this.template\n\t});\n\n\t// TODO this is a bit hacky\n\tfragment.key = key;\n\tfragment.index = index;\n\tfragment.isIteration = true;\n\n\tvar model = this.context.joinKey( key );\n\n\t// set up an iteration alias if there is one\n\tif ( this.owner.template.z ) {\n\t\tfragment.aliases = {};\n\t\tfragment.aliases[ this.owner.template.z[0].n ] = model;\n\t}\n\n\treturn fragment.bind( model );\n};\n\nRepeatedFragment.prototype.destroyed = function destroyed$1 () {\n\tthis.iterations.forEach( destroyed$1$1 );\n};\n\nRepeatedFragment.prototype.detach = function detach () {\n\tvar docFrag = createDocumentFragment();\n\tthis.iterations.forEach( function (fragment) { return docFrag.appendChild( fragment.detach() ); } );\n\treturn docFrag;\n};\n\nRepeatedFragment.prototype.find = function find ( selector, options ) {\n\treturn findMap( this.iterations, function (i) { return i.find( selector, options ); } );\n};\n\nRepeatedFragment.prototype.findAll = function findAll ( selector, query ) {\n\treturn this.iterations.forEach( function (i) { return i.findAll( selector, query ); } );\n};\n\nRepeatedFragment.prototype.findComponent = function findComponent ( name, options ) {\n\treturn findMap( this.iterations, function (i) { return i.findComponent( name, options ); } );\n};\n\nRepeatedFragment.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\treturn this.iterations.forEach( function (i) { return i.findAllComponents( name, query ); } );\n};\n\nRepeatedFragment.prototype.findNextNode = function findNextNode ( iteration ) {\n\t\tvar this$1 = this;\n\n\tif ( iteration.index < this.iterations.length - 1 ) {\n\t\tfor ( var i = iteration.index + 1; i < this.iterations.length; i++ ) {\n\t\t\tvar node = this$1.iterations[ i ].firstNode( true );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n\n\treturn this.owner.findNextNode();\n};\n\nRepeatedFragment.prototype.firstNode = function firstNode ( skipParent ) {\n\treturn this.iterations[0] ? this.iterations[0].firstNode( skipParent ) : null;\n};\n\nRepeatedFragment.prototype.rebinding = function rebinding ( next ) {\n\t\tvar this$1 = this;\n\n\tthis.context = next;\n\tthis.iterations.forEach( function (fragment) {\n\t\tvar model = next ? next.joinKey( fragment.key ) : undefined;\n\t\tfragment.context = model;\n\t\tif ( this$1.owner.template.z ) {\n\t\t\tfragment.aliases = {};\n\t\t\tfragment.aliases[ this$1.owner.template.z[0].n ] = model;\n\t\t}\n\t});\n};\n\nRepeatedFragment.prototype.render = function render ( target, occupants ) {\n\t// TODO use docFrag.cloneNode...\n\n\tif ( this.iterations ) {\n\t\tthis.iterations.forEach( function (fragment) { return fragment.render( target, occupants ); } );\n\t}\n\n\tthis.rendered = true;\n};\n\nRepeatedFragment.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tvar this$1 = this;\n\n\tif ( !this.pendingNewIndices ) { this.previousIterations = this.iterations.slice(); }\n\n\tif ( !this.pendingNewIndices ) { this.pendingNewIndices = []; }\n\n\tthis.pendingNewIndices.push( newIndices );\n\n\tvar iterations = [];\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\tif ( newIndex === -1 ) { return; }\n\n\t\tvar fragment = this$1.iterations[ oldIndex ];\n\t\titerations[ newIndex ] = fragment;\n\n\t\tif ( newIndex !== oldIndex && fragment ) { fragment.dirty = true; }\n\t});\n\n\tthis.iterations = iterations;\n\n\tthis.bubble();\n};\n\nRepeatedFragment.prototype.shuffled = function shuffled$1 () {\n\tthis.iterations.forEach( shuffled$1$1 );\n};\n\nRepeatedFragment.prototype.toString = function toString$1 ( escape ) {\n\treturn this.iterations ?\n\t\tthis.iterations.map( escape ? toEscapedString : toString$2 ).join( '' ) :\n\t\t'';\n};\n\nRepeatedFragment.prototype.unbind = function unbind$1 () {\n\tthis.iterations.forEach( unbind$1$1 );\n\treturn this;\n};\n\nRepeatedFragment.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\tthis.iterations.forEach( shouldDestroy ? unrenderAndDestroy : unrender$1$1 );\n\tif ( this.pendingNewIndices && this.previousIterations ) {\n\t\tthis.previousIterations.forEach( function (fragment) {\n\t\t\tif ( fragment.rendered ) { shouldDestroy ? unrenderAndDestroy( fragment ) : unrender$1$1( fragment ); }\n\t\t});\n\t}\n\tthis.rendered = false;\n};\n\n// TODO smart update\nRepeatedFragment.prototype.update = function update$1 () {\n\t\tvar this$1 = this;\n\n\t// skip dirty check, since this is basically just a facade\n\n\tif ( this.pendingNewIndices ) {\n\t\tthis.updatePostShuffle();\n\t\treturn;\n\t}\n\n\tif ( this.updating ) { return; }\n\tthis.updating = true;\n\n\tvar value = this.context.get();\n\tvar wasArray = this.isArray;\n\n\tvar toRemove;\n\tvar oldKeys;\n\tvar reset = true;\n\tvar i;\n\n\tif ( this.isArray = Array.isArray( value ) ) {\n\t\tif ( wasArray ) {\n\t\t\treset = false;\n\t\t\tif ( this.iterations.length > value.length ) {\n\t\t\t\ttoRemove = this.iterations.splice( value.length );\n\t\t\t}\n\t\t}\n\t} else if ( isObject( value ) && !wasArray ) {\n\t\treset = false;\n\t\ttoRemove = [];\n\t\toldKeys = {};\n\t\ti = this.iterations.length;\n\n\t\twhile ( i-- ) {\n\t\t\tvar fragment$1 = this$1.iterations[i];\n\t\t\tif ( fragment$1.key in value ) {\n\t\t\t\toldKeys[ fragment$1.key ] = true;\n\t\t\t} else {\n\t\t\t\tthis$1.iterations.splice( i, 1 );\n\t\t\t\ttoRemove.push( fragment$1 );\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( reset ) {\n\t\ttoRemove = this.iterations;\n\t\tthis.iterations = [];\n\t}\n\n\tif ( toRemove ) {\n\t\ttoRemove.forEach( function (fragment) {\n\t\t\tfragment.unbind();\n\t\t\tfragment.unrender( true );\n\t\t});\n\t}\n\n\t// update the remaining ones\n\tthis.iterations.forEach( update$1$1 );\n\n\t// add new iterations\n\tvar newLength = Array.isArray( value ) ?\n\t\tvalue.length :\n\t\tisObject( value ) ?\n\t\t\tObject.keys( value ).length :\n\t\t\t0;\n\n\tvar docFrag;\n\tvar fragment;\n\n\tif ( newLength > this.iterations.length ) {\n\t\tdocFrag = this.rendered ? createDocumentFragment() : null;\n\t\ti = this.iterations.length;\n\n\t\tif ( Array.isArray( value ) ) {\n\t\t\twhile ( i < value.length ) {\n\t\t\t\tfragment = this$1.createIteration( i, i );\n\n\t\t\t\tthis$1.iterations.push( fragment );\n\t\t\t\tif ( this$1.rendered ) { fragment.render( docFrag ); }\n\n\t\t\t\ti += 1;\n\t\t\t}\n\t\t}\n\n\t\telse if ( isObject( value ) ) {\n\t\t\t// TODO this is a dreadful hack. There must be a neater way\n\t\t\tif ( this.indexRef && !this.keyRef ) {\n\t\t\t\tvar refs = this.indexRef.split( ',' );\n\t\t\t\tthis.keyRef = refs[0];\n\t\t\t\tthis.indexRef = refs[1];\n\t\t\t}\n\n\t\t\tObject.keys( value ).forEach( function (key) {\n\t\t\t\tif ( !oldKeys || !( key in oldKeys ) ) {\n\t\t\t\t\tfragment = this$1.createIteration( key, i );\n\n\t\t\t\t\tthis$1.iterations.push( fragment );\n\t\t\t\t\tif ( this$1.rendered ) { fragment.render( docFrag ); }\n\n\t\t\t\t\ti += 1;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif ( this.rendered ) {\n\t\t\tvar parentNode = this.parent.findParentNode();\n\t\t\tvar anchor = this.parent.findNextNode( this.owner );\n\n\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t}\n\t}\n\n\tthis.updating = false;\n};\n\nRepeatedFragment.prototype.updatePostShuffle = function updatePostShuffle () {\n\t\tvar this$1 = this;\n\n\tvar newIndices = this.pendingNewIndices[ 0 ];\n\n\t// map first shuffle through\n\tthis.pendingNewIndices.slice( 1 ).forEach( function (indices) {\n\t\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\t\tnewIndices[ oldIndex ] = indices[ newIndex ];\n\t\t});\n\t});\n\n\t// This algorithm (for detaching incorrectly-ordered fragments from the DOM and\n\t// storing them in a document fragment for later reinsertion) seems a bit hokey,\n\t// but it seems to work for now\n\tvar len = this.context.get().length;\n\tvar oldLen = this.previousIterations.length;\n\tvar removed = {};\n\tvar i;\n\n\tnewIndices.forEach( function ( newIndex, oldIndex ) {\n\t\tvar fragment = this$1.previousIterations[ oldIndex ];\n\t\tthis$1.previousIterations[ oldIndex ] = null;\n\n\t\tif ( newIndex === -1 ) {\n\t\t\tremoved[ oldIndex ] = fragment;\n\t\t} else if ( fragment.index !== newIndex ) {\n\t\t\tvar model = this$1.context.joinKey( newIndex );\n\t\t\tfragment.index = newIndex;\n\t\t\tfragment.context = model;\n\t\t\tif ( this$1.owner.template.z ) {\n\t\t\t\tfragment.aliases = {};\n\t\t\t\tfragment.aliases[ this$1.owner.template.z[0].n ] = model;\n\t\t\t}\n\t\t}\n\t});\n\n\t// if the array was spliced outside of ractive, sometimes there are leftover fragments not in the newIndices\n\tthis.previousIterations.forEach( function ( frag, i ) {\n\t\tif ( frag ) { removed[ i ] = frag; }\n\t});\n\n\t// create new/move existing iterations\n\tvar docFrag = this.rendered ? createDocumentFragment() : null;\n\tvar parentNode = this.rendered ? this.parent.findParentNode() : null;\n\n\tvar contiguous = 'startIndex' in newIndices;\n\ti = contiguous ? newIndices.startIndex : 0;\n\n\tfor ( i; i < len; i++ ) {\n\t\tvar frag = this$1.iterations[i];\n\n\t\tif ( frag && contiguous ) {\n\t\t\t// attach any built-up iterations\n\t\t\tif ( this$1.rendered ) {\n\t\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\t\t\t\tif ( docFrag.childNodes.length  ) { parentNode.insertBefore( docFrag, frag.firstNode() ); }\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( !frag ) { this$1.iterations[i] = this$1.createIteration( i, i ); }\n\n\t\tif ( this$1.rendered ) {\n\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\n\t\t\tif ( frag ) { docFrag.appendChild( frag.detach() ); }\n\t\t\telse {\n\t\t\t\tthis$1.iterations[i].render( docFrag );\n\t\t\t}\n\t\t}\n\t}\n\n\t// append any leftovers\n\tif ( this.rendered ) {\n\t\tfor ( i = len; i < oldLen; i++ ) {\n\t\t\tif ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }\n\t\t}\n\n\t\tif ( docFrag.childNodes.length ) {\n\t\t\tparentNode.insertBefore( docFrag, this.owner.findNextNode() );\n\t\t}\n\t}\n\n\t// trigger removal on old nodes\n\tObject.keys( removed ).forEach( function (k) { return removed[k].unbind().unrender( true ); } );\n\n\tthis.iterations.forEach( update$1$1 );\n\n\tthis.pendingNewIndices = null;\n\n\tthis.shuffled();\n};\n\nfunction isEmpty ( value ) {\n\treturn !value ||\n\t       ( Array.isArray( value ) && value.length === 0 ) ||\n\t\t   ( isObject( value ) && Object.keys( value ).length === 0 );\n}\n\nfunction getType ( value, hasIndexRef ) {\n\tif ( hasIndexRef || Array.isArray( value ) ) { return SECTION_EACH; }\n\tif ( isObject( value ) || typeof value === 'function' ) { return SECTION_IF_WITH; }\n\tif ( value === undefined ) { return null; }\n\treturn SECTION_IF;\n}\n\nvar Section = (function (MustacheContainer$$1) {\n\tfunction Section ( options ) {\n\t\tMustacheContainer$$1.call( this, options );\n\n\t\tthis.sectionType = options.template.n || null;\n\t\tthis.templateSectionType = this.sectionType;\n\t\tthis.subordinate = options.template.l === 1;\n\t\tthis.fragment = null;\n\t}\n\n\tif ( MustacheContainer$$1 ) Section.__proto__ = MustacheContainer$$1;\n\tSection.prototype = Object.create( MustacheContainer$$1 && MustacheContainer$$1.prototype );\n\tSection.prototype.constructor = Section;\n\n\tSection.prototype.bind = function bind () {\n\t\tMustacheContainer$$1.prototype.bind.call(this);\n\n\t\tif ( this.subordinate ) {\n\t\t\tthis.sibling = this.parentFragment.items[ this.parentFragment.items.indexOf( this ) - 1 ];\n\t\t\tthis.sibling.nextSibling = this;\n\t\t}\n\n\t\t// if we managed to bind, we need to create children\n\t\tif ( this.model ) {\n\t\t\tthis.dirty = true;\n\t\t\tthis.update();\n\t\t} else if ( this.sectionType && this.sectionType === SECTION_UNLESS && ( !this.sibling || !this.sibling.isTruthy() ) ) {\n\t\t\tthis.fragment = new Fragment({\n\t\t\t\towner: this,\n\t\t\t\ttemplate: this.template.f\n\t\t\t}).bind();\n\t\t}\n\t};\n\n\tSection.prototype.isTruthy = function isTruthy () {\n\t\tif ( this.subordinate && this.sibling.isTruthy() ) { return true; }\n\t\tvar value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n\t\treturn !!value && ( this.templateSectionType === SECTION_IF_WITH || !isEmpty( value ) );\n\t};\n\n\tSection.prototype.rebind = function rebind ( next, previous, safe ) {\n\t\tif ( MustacheContainer$$1.prototype.rebind.call( this, next, previous, safe ) ) {\n\t\t\tif ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {\n\t\t\t\tthis.fragment.rebinding( next );\n\t\t\t}\n\t\t}\n\t};\n\n\tSection.prototype.render = function render ( target, occupants ) {\n\t\tthis.rendered = true;\n\t\tif ( this.fragment ) { this.fragment.render( target, occupants ); }\n\t};\n\n\tSection.prototype.shuffle = function shuffle ( newIndices ) {\n\t\tif ( this.fragment && this.sectionType === SECTION_EACH ) {\n\t\t\tthis.fragment.shuffle( newIndices );\n\t\t}\n\t};\n\n\tSection.prototype.unbind = function unbind () {\n\t\tMustacheContainer$$1.prototype.unbind.call(this);\n\t\tif ( this.fragment ) { this.fragment.unbind(); }\n\t};\n\n\tSection.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }\n\t\tthis.rendered = false;\n\t};\n\n\tSection.prototype.update = function update () {\n\t\tif ( !this.dirty ) { return; }\n\n\t\tif ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {\n\t\t\tthis.fragment.context = this.model;\n\t\t}\n\n\t\tif ( !this.model && this.sectionType !== SECTION_UNLESS ) { return; }\n\n\t\tthis.dirty = false;\n\n\t\tvar value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();\n\t\tvar siblingFalsey = !this.subordinate || !this.sibling.isTruthy();\n\t\tvar lastType = this.sectionType;\n\n\t\t// watch for switching section types\n\t\tif ( this.sectionType === null || this.templateSectionType === null ) { this.sectionType = getType( value, this.template.i ); }\n\t\tif ( lastType && lastType !== this.sectionType && this.fragment ) {\n\t\t\tif ( this.rendered ) {\n\t\t\t\tthis.fragment.unbind().unrender( true );\n\t\t\t}\n\n\t\t\tthis.fragment = null;\n\t\t}\n\n\t\tvar newFragment;\n\n\t\tvar fragmentShouldExist = this.sectionType === SECTION_EACH || // each always gets a fragment, which may have no iterations\n\t\t                            this.sectionType === SECTION_WITH || // with (partial context) always gets a fragment\n\t\t                            ( siblingFalsey && ( this.sectionType === SECTION_UNLESS ? !this.isTruthy() : this.isTruthy() ) ); // if, unless, and if-with depend on siblings and the condition\n\n\t\tif ( fragmentShouldExist ) {\n\t\t\tif ( this.fragment ) {\n\t\t\t\tthis.fragment.update();\n\t\t\t} else {\n\t\t\t\tif ( this.sectionType === SECTION_EACH ) {\n\t\t\t\t\tnewFragment = new RepeatedFragment({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\ttemplate: this.template.f,\n\t\t\t\t\t\tindexRef: this.template.i\n\t\t\t\t\t}).bind( this.model );\n\t\t\t\t} else {\n\t\t\t\t\t// only with and if-with provide context - if and unless do not\n\t\t\t\t\tvar context = this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ? this.model : null;\n\t\t\t\t\tnewFragment = new Fragment({\n\t\t\t\t\t\towner: this,\n\t\t\t\t\t\ttemplate: this.template.f\n\t\t\t\t\t}).bind( context );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.fragment && this.rendered ) {\n\t\t\t\tthis.fragment.unbind().unrender( true );\n\t\t\t}\n\n\t\t\tthis.fragment = null;\n\t\t}\n\n\t\tif ( newFragment ) {\n\t\t\tif ( this.rendered ) {\n\t\t\t\tvar parentNode = this.parentFragment.findParentNode();\n\t\t\t\tvar anchor = this.parentFragment.findNextNode( this );\n\n\t\t\t\tif ( anchor ) {\n\t\t\t\t\tvar docFrag = createDocumentFragment();\n\t\t\t\t\tnewFragment.render( docFrag );\n\n\t\t\t\t\t// we use anchor.parentNode, not parentNode, because the sibling\n\t\t\t\t\t// may be temporarily detached as a result of a shuffle\n\t\t\t\t\tanchor.parentNode.insertBefore( docFrag, anchor );\n\t\t\t\t} else {\n\t\t\t\t\tnewFragment.render( parentNode );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.fragment = newFragment;\n\t\t}\n\n\t\tif ( this.nextSibling ) {\n\t\t\tthis.nextSibling.dirty = true;\n\t\t\tthis.nextSibling.update();\n\t\t}\n\t};\n\n\treturn Section;\n}(MustacheContainer));\n\nfunction valueContains ( selectValue, optionValue ) {\n\tvar i = selectValue.length;\n\twhile ( i-- ) {\n\t\tif ( selectValue[i] == optionValue ) { return true; }\n\t}\n}\n\nvar Select = (function (Element$$1) {\n\tfunction Select ( options ) {\n\t\tElement$$1.call( this, options );\n\t\tthis.options = [];\n\t}\n\n\tif ( Element$$1 ) Select.__proto__ = Element$$1;\n\tSelect.prototype = Object.create( Element$$1 && Element$$1.prototype );\n\tSelect.prototype.constructor = Select;\n\n\tSelect.prototype.foundNode = function foundNode ( node ) {\n\t\tif ( this.binding ) {\n\t\t\tvar selectedOptions = getSelectedOptions( node );\n\n\t\t\tif ( selectedOptions.length > 0 ) {\n\t\t\t\tthis.selectedOptions = selectedOptions;\n\t\t\t}\n\t\t}\n\t};\n\n\tSelect.prototype.render = function render ( target, occupants ) {\n\t\tElement$$1.prototype.render.call( this, target, occupants );\n\t\tthis.sync();\n\n\t\tvar node = this.node;\n\n\t\tvar i = node.options.length;\n\t\twhile ( i-- ) {\n\t\t\tnode.options[i].defaultSelected = node.options[i].selected;\n\t\t}\n\n\t\tthis.rendered = true;\n\t};\n\n\tSelect.prototype.sync = function sync () {\n\t\tvar this$1 = this;\n\n\t\tvar selectNode = this.node;\n\n\t\tif ( !selectNode ) { return; }\n\n\t\tvar options = toArray( selectNode.options );\n\n\t\tif ( this.selectedOptions ) {\n\t\t\toptions.forEach( function (o) {\n\t\t\t\tif ( this$1.selectedOptions.indexOf( o ) >= 0 ) { o.selected = true; }\n\t\t\t\telse { o.selected = false; }\n\t\t\t});\n\t\t\tthis.binding.setFromNode( selectNode );\n\t\t\tdelete this.selectedOptions;\n\t\t\treturn;\n\t\t}\n\n\t\tvar selectValue = this.getAttribute( 'value' );\n\t\tvar isMultiple = this.getAttribute( 'multiple' );\n\t\tvar array = isMultiple && Array.isArray( selectValue );\n\n\t\t// If the <select> has a specified value, that should override\n\t\t// these options\n\t\tif ( selectValue !== undefined ) {\n\t\t\tvar optionWasSelected;\n\n\t\t\toptions.forEach( function (o) {\n\t\t\t\tvar optionValue = o._ractive ? o._ractive.value : o.value;\n\t\t\t\tvar shouldSelect = isMultiple ? array && valueContains( selectValue, optionValue ) : selectValue == optionValue;\n\n\t\t\t\tif ( shouldSelect ) {\n\t\t\t\t\toptionWasSelected = true;\n\t\t\t\t}\n\n\t\t\t\to.selected = shouldSelect;\n\t\t\t});\n\n\t\t\tif ( !optionWasSelected && !isMultiple ) {\n\t\t\t\tif ( this.binding ) {\n\t\t\t\t\tthis.binding.forceUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Otherwise the value should be initialised according to which\n\t\t// <option> element is selected, if twoway binding is in effect\n\t\telse if ( this.binding ) {\n\t\t\tthis.binding.forceUpdate();\n\t\t}\n\t};\n\n\tSelect.prototype.update = function update () {\n\t\tElement$$1.prototype.update.call(this);\n\t\tthis.sync();\n\t};\n\n\treturn Select;\n}(Element));\n\nvar Textarea = (function (Input$$1) {\n\tfunction Textarea( options ) {\n\t\tvar template = options.template;\n\n\t\toptions.deferContent = true;\n\n\t\tInput$$1.call( this, options );\n\n\t\t// check for single interpolator binding\n\t\tif ( !this.attributeByName.value ) {\n\t\t\tif ( template.f && isBindable( { template: template } ) ) {\n\t\t\t\tthis.attributes.push( createItem( {\n\t\t\t\t\towner: this,\n\t\t\t\t\ttemplate: { t: ATTRIBUTE, f: template.f, n: 'value' },\n\t\t\t\t\tparentFragment: this.parentFragment\n\t\t\t\t} ) );\n\t\t\t} else {\n\t\t\t\tthis.fragment = new Fragment({ owner: this, cssIds: null, template: template.f });\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( Input$$1 ) Textarea.__proto__ = Input$$1;\n\tTextarea.prototype = Object.create( Input$$1 && Input$$1.prototype );\n\tTextarea.prototype.constructor = Textarea;\n\n\tTextarea.prototype.bubble = function bubble () {\n\t\tvar this$1 = this;\n\n\t\tif ( !this.dirty ) {\n\t\t\tthis.dirty = true;\n\n\t\t\tif ( this.rendered && !this.binding && this.fragment ) {\n\t\t\t\trunloop.scheduleTask( function () {\n\t\t\t\t\tthis$1.dirty = false;\n\t\t\t\t\tthis$1.node.value = this$1.fragment.toString();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.parentFragment.bubble(); // default behaviour\n\t\t}\n\t};\n\n\treturn Textarea;\n}(Input));\n\nvar Text = (function (Item$$1) {\n\tfunction Text ( options ) {\n\t\tItem$$1.call( this, options );\n\t\tthis.type = TEXT;\n\t}\n\n\tif ( Item$$1 ) Text.__proto__ = Item$$1;\n\tText.prototype = Object.create( Item$$1 && Item$$1.prototype );\n\tText.prototype.constructor = Text;\n\n\tText.prototype.detach = function detach () {\n\t\treturn detachNode( this.node );\n\t};\n\n\tText.prototype.firstNode = function firstNode () {\n\t\treturn this.node;\n\t};\n\n\tText.prototype.render = function render ( target, occupants ) {\n\t\tif ( inAttributes() ) { return; }\n\t\tthis.rendered = true;\n\n\t\tif ( occupants ) {\n\t\t\tvar n = occupants[0];\n\t\t\tif ( n && n.nodeType === 3 ) {\n\t\t\t\toccupants.shift();\n\t\t\t\tif ( n.nodeValue !== this.template ) {\n\t\t\t\t\tn.nodeValue = this.template;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tn = this.node = doc.createTextNode( this.template );\n\t\t\t\tif ( occupants[0] ) {\n\t\t\t\t\ttarget.insertBefore( n, occupants[0] );\n\t\t\t\t} else {\n\t\t\t\t\ttarget.appendChild( n );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.node = n;\n\t\t} else {\n\t\t\tthis.node = doc.createTextNode( this.template );\n\t\t\ttarget.appendChild( this.node );\n\t\t}\n\t};\n\n\tText.prototype.toString = function toString ( escape ) {\n\t\treturn escape ? escapeHtml( this.template ) : this.template;\n\t};\n\n\tText.prototype.unrender = function unrender ( shouldDestroy ) {\n\t\tif ( this.rendered && shouldDestroy ) { this.detach(); }\n\t\tthis.rendered = false;\n\t};\n\n\tText.prototype.valueOf = function valueOf () {\n\t\treturn this.template;\n\t};\n\n\treturn Text;\n}(Item));\n\nvar proto$3 = Text.prototype;\nproto$3.bind = proto$3.unbind = proto$3.update = noop;\n\nvar camelizeHyphenated = function ( hyphenatedStr ) {\n\treturn hyphenatedStr.replace( /-([a-zA-Z])/g, function ( match, $1 ) {\n\t\treturn $1.toUpperCase();\n\t});\n};\n\nvar prefix;\n\nif ( !isClient ) {\n\tprefix = null;\n} else {\n\tvar prefixCache = {};\n\tvar testStyle = createElement( 'div' ).style;\n\n\tprefix = function ( prop ) {\n\t\tprop = camelizeHyphenated( prop );\n\n\t\tif ( !prefixCache[ prop ] ) {\n\t\t\tif ( testStyle[ prop ] !== undefined ) {\n\t\t\t\tprefixCache[ prop ] = prop;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\t// test vendors...\n\t\t\t\tvar capped = prop.charAt( 0 ).toUpperCase() + prop.substring( 1 );\n\n\t\t\t\tvar i = vendors.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tvar vendor = vendors[i];\n\t\t\t\t\tif ( testStyle[ vendor + capped ] !== undefined ) {\n\t\t\t\t\t\tprefixCache[ prop ] = vendor + capped;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn prefixCache[ prop ];\n\t};\n}\n\nvar prefix$1 = prefix;\n\nvar visible;\nvar hidden = 'hidden';\n\nif ( doc ) {\n\tvar prefix$2;\n\n\tif ( hidden in doc ) {\n\t\tprefix$2 = '';\n\t} else {\n\t\tvar i$1 = vendors.length;\n\t\twhile ( i$1-- ) {\n\t\t\tvar vendor = vendors[i$1];\n\t\t\thidden = vendor + 'Hidden';\n\n\t\t\tif ( hidden in doc ) {\n\t\t\t\tprefix$2 = vendor;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( prefix$2 !== undefined ) {\n\t\tdoc.addEventListener( prefix$2 + 'visibilitychange', onChange );\n\t\tonChange();\n\t} else {\n\t\t// gah, we're in an old browser\n\t\tif ( 'onfocusout' in doc ) {\n\t\t\tdoc.addEventListener( 'focusout', onHide );\n\t\t\tdoc.addEventListener( 'focusin', onShow );\n\t\t}\n\n\t\telse {\n\t\t\twin.addEventListener( 'pagehide', onHide );\n\t\t\twin.addEventListener( 'blur', onHide );\n\n\t\t\twin.addEventListener( 'pageshow', onShow );\n\t\t\twin.addEventListener( 'focus', onShow );\n\t\t}\n\n\t\tvisible = true; // until proven otherwise. Not ideal but hey\n\t}\n}\n\nfunction onChange () {\n\tvisible = !doc[ hidden ];\n}\n\nfunction onHide () {\n\tvisible = false;\n}\n\nfunction onShow () {\n\tvisible = true;\n}\n\nvar unprefixPattern = new RegExp( '^-(?:' + vendors.join( '|' ) + ')-' );\n\nvar unprefix = function ( prop ) {\n\treturn prop.replace( unprefixPattern, '' );\n};\n\nvar vendorPattern = new RegExp( '^(?:' + vendors.join( '|' ) + ')([A-Z])' );\n\nvar hyphenate = function ( str ) {\n\tif ( !str ) { return ''; } // edge case\n\n\tif ( vendorPattern.test( str ) ) { str = '-' + str; }\n\n\treturn str.replace( /[A-Z]/g, function (match) { return '-' + match.toLowerCase(); } );\n};\n\nvar createTransitions;\n\nif ( !isClient ) {\n\tcreateTransitions = null;\n} else {\n\tvar testStyle$1 = createElement( 'div' ).style;\n\tvar linear$2 = function (x) { return x; };\n\n\tvar canUseCssTransitions = {};\n\tvar cannotUseCssTransitions = {};\n\n\t// determine some facts about our environment\n\tvar TRANSITION$1;\n\tvar TRANSITIONEND;\n\tvar CSS_TRANSITIONS_ENABLED;\n\tvar TRANSITION_DURATION;\n\tvar TRANSITION_PROPERTY;\n\tvar TRANSITION_TIMING_FUNCTION;\n\n\tif ( testStyle$1.transition !== undefined ) {\n\t\tTRANSITION$1 = 'transition';\n\t\tTRANSITIONEND = 'transitionend';\n\t\tCSS_TRANSITIONS_ENABLED = true;\n\t} else if ( testStyle$1.webkitTransition !== undefined ) {\n\t\tTRANSITION$1 = 'webkitTransition';\n\t\tTRANSITIONEND = 'webkitTransitionEnd';\n\t\tCSS_TRANSITIONS_ENABLED = true;\n\t} else {\n\t\tCSS_TRANSITIONS_ENABLED = false;\n\t}\n\n\tif ( TRANSITION$1 ) {\n\t\tTRANSITION_DURATION = TRANSITION$1 + 'Duration';\n\t\tTRANSITION_PROPERTY = TRANSITION$1 + 'Property';\n\t\tTRANSITION_TIMING_FUNCTION = TRANSITION$1 + 'TimingFunction';\n\t}\n\n\tcreateTransitions = function ( t, to, options, changedProperties, resolve ) {\n\n\t\t// Wait a beat (otherwise the target styles will be applied immediately)\n\t\t// TODO use a fastdom-style mechanism?\n\t\tsetTimeout( function () {\n\t\t\tvar jsTransitionsComplete;\n\t\t\tvar cssTransitionsComplete;\n\t\t\tvar cssTimeout; // eslint-disable-line prefer-const\n\n\t\t\tfunction transitionDone () { clearTimeout( cssTimeout ); }\n\n\t\t\tfunction checkComplete () {\n\t\t\t\tif ( jsTransitionsComplete && cssTransitionsComplete ) {\n\t\t\t\t\tt.unregisterCompleteHandler( transitionDone );\n\t\t\t\t\t// will changes to events and fire have an unexpected consequence here?\n\t\t\t\t\tt.ractive.fire( t.name + ':end', t.node, t.isIntro );\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// this is used to keep track of which elements can use CSS to animate\n\t\t\t// which properties\n\t\t\tvar hashPrefix = ( t.node.namespaceURI || '' ) + t.node.tagName;\n\n\t\t\t// need to reset transition properties\n\t\t\tvar style = t.node.style;\n\t\t\tvar previous = {\n\t\t\t\tproperty: style[ TRANSITION_PROPERTY ],\n\t\t\t\ttiming: style[ TRANSITION_TIMING_FUNCTION ],\n\t\t\t\tduration: style[ TRANSITION_DURATION ]\n\t\t\t};\n\n\t\t\tstyle[ TRANSITION_PROPERTY ] = changedProperties.map( prefix$1 ).map( hyphenate ).join( ',' );\n\t\t\tstyle[ TRANSITION_TIMING_FUNCTION ] = hyphenate( options.easing || 'linear' );\n\t\t\tstyle[ TRANSITION_DURATION ] = ( options.duration / 1000 ) + 's';\n\n\t\t\tfunction transitionEndHandler ( event ) {\n\t\t\t\tvar index = changedProperties.indexOf( camelizeHyphenated( unprefix( event.propertyName ) ) );\n\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\tchangedProperties.splice( index, 1 );\n\t\t\t\t}\n\n\t\t\t\tif ( changedProperties.length ) {\n\t\t\t\t\t// still transitioning...\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( cssTimeout );\n\t\t\t\tcssTransitionsDone();\n\t\t\t}\n\n\t\t\tfunction cssTransitionsDone () {\n\t\t\t\tstyle[ TRANSITION_PROPERTY ] = previous.property;\n\t\t\t\tstyle[ TRANSITION_TIMING_FUNCTION ] = previous.duration;\n\t\t\t\tstyle[ TRANSITION_DURATION ] = previous.timing;\n\n\t\t\t\tt.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );\n\n\t\t\t\tcssTransitionsComplete = true;\n\t\t\t\tcheckComplete();\n\t\t\t}\n\n\t\t\tt.node.addEventListener( TRANSITIONEND, transitionEndHandler, false );\n\n\t\t\t// safety net in case transitionend never fires\n\t\t\tcssTimeout = setTimeout( function () {\n\t\t\t\tchangedProperties = [];\n\t\t\t\tcssTransitionsDone();\n\t\t\t}, options.duration + ( options.delay || 0 ) + 50 );\n\t\t\tt.registerCompleteHandler( transitionDone );\n\n\t\t\tsetTimeout( function () {\n\t\t\t\tvar i = changedProperties.length;\n\t\t\t\tvar hash;\n\t\t\t\tvar originalValue;\n\t\t\t\tvar index;\n\t\t\t\tvar propertiesToTransitionInJs = [];\n\t\t\t\tvar prop;\n\t\t\t\tvar suffix;\n\t\t\t\tvar interpolator;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tprop = changedProperties[i];\n\t\t\t\t\thash = hashPrefix + prop;\n\n\t\t\t\t\tif ( CSS_TRANSITIONS_ENABLED && !cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\tstyle[ prefix$1( prop ) ] = to[ prop ];\n\n\t\t\t\t\t\t// If we're not sure if CSS transitions are supported for\n\t\t\t\t\t\t// this tag/property combo, find out now\n\t\t\t\t\t\tif ( !canUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t\toriginalValue = t.getStyle( prop );\n\n\t\t\t\t\t\t\t// if this property is transitionable in this browser,\n\t\t\t\t\t\t\t// the current style will be different from the target style\n\t\t\t\t\t\t\tcanUseCssTransitions[ hash ] = ( t.getStyle( prop ) != to[ prop ] );\n\t\t\t\t\t\t\tcannotUseCssTransitions[ hash ] = !canUseCssTransitions[ hash ];\n\n\t\t\t\t\t\t\t// Reset, if we're going to use timers after all\n\t\t\t\t\t\t\tif ( cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t\t\tstyle[ prefix$1( prop ) ] = originalValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !CSS_TRANSITIONS_ENABLED || cannotUseCssTransitions[ hash ] ) {\n\t\t\t\t\t\t// we need to fall back to timer-based stuff\n\t\t\t\t\t\tif ( originalValue === undefined ) {\n\t\t\t\t\t\t\toriginalValue = t.getStyle( prop );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// need to remove this from changedProperties, otherwise transitionEndHandler\n\t\t\t\t\t\t// will get confused\n\t\t\t\t\t\tindex = changedProperties.indexOf( prop );\n\t\t\t\t\t\tif ( index === -1 ) {\n\t\t\t\t\t\t\twarnIfDebug( 'Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!', { node: t.node });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchangedProperties.splice( index, 1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// TODO Determine whether this property is animatable at all\n\n\t\t\t\t\t\tsuffix = /[^\\d]*$/.exec( to[ prop ] )[0];\n\t\t\t\t\t\tinterpolator = interpolate( parseFloat( originalValue ), parseFloat( to[ prop ] ) ) || ( function () { return to[ prop ]; } );\n\n\t\t\t\t\t\t// ...then kick off a timer-based transition\n\t\t\t\t\t\tpropertiesToTransitionInJs.push({\n\t\t\t\t\t\t\tname: prefix$1( prop ),\n\t\t\t\t\t\t\tinterpolator: interpolator,\n\t\t\t\t\t\t\tsuffix: suffix\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// javascript transitions\n\t\t\t\tif ( propertiesToTransitionInJs.length ) {\n\t\t\t\t\tvar easing;\n\n\t\t\t\t\tif ( typeof options.easing === 'string' ) {\n\t\t\t\t\t\teasing = t.ractive.easing[ options.easing ];\n\n\t\t\t\t\t\tif ( !easing ) {\n\t\t\t\t\t\t\twarnOnceIfDebug( missingPlugin( options.easing, 'easing' ) );\n\t\t\t\t\t\t\teasing = linear$2;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( typeof options.easing === 'function' ) {\n\t\t\t\t\t\teasing = options.easing;\n\t\t\t\t\t} else {\n\t\t\t\t\t\teasing = linear$2;\n\t\t\t\t\t}\n\n\t\t\t\t\tnew Ticker({\n\t\t\t\t\t\tduration: options.duration,\n\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t\tstep: function step ( pos ) {\n\t\t\t\t\t\t\tvar i = propertiesToTransitionInJs.length;\n\t\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\t\tvar prop = propertiesToTransitionInJs[i];\n\t\t\t\t\t\t\t\tt.node.style[ prop.name ] = prop.interpolator( pos ) + prop.suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcomplete: function complete () {\n\t\t\t\t\t\t\tjsTransitionsComplete = true;\n\t\t\t\t\t\t\tcheckComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tjsTransitionsComplete = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !changedProperties.length ) {\n\t\t\t\t\t// We need to cancel the transitionEndHandler, and deal with\n\t\t\t\t\t// the fact that it will never fire\n\t\t\t\t\tt.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );\n\t\t\t\t\tcssTransitionsComplete = true;\n\t\t\t\t\tcheckComplete();\n\t\t\t\t}\n\t\t\t}, 0 );\n\t\t}, options.delay || 0 );\n\t};\n}\n\nvar createTransitions$1 = createTransitions;\n\nfunction resetStyle ( node, style ) {\n\tif ( style ) {\n\t\tnode.setAttribute( 'style', style );\n\t} else {\n\t\t// Next line is necessary, to remove empty style attribute!\n\t\t// See http://stackoverflow.com/a/7167553\n\t\tnode.getAttribute( 'style' );\n\t\tnode.removeAttribute( 'style' );\n\t}\n}\n\nvar getComputedStyle = win && win.getComputedStyle;\nvar resolved$1 = Promise.resolve();\n\nvar names = {\n\tt0: 'intro-outro',\n\tt1: 'intro',\n\tt2: 'outro'\n};\n\nvar Transition = function Transition ( options ) {\n\tthis.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );\n\tthis.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );\n\tthis.ractive = this.owner.ractive;\n\tthis.template = options.template;\n\tthis.parentFragment = options.parentFragment;\n\tthis.options = options;\n\tthis.onComplete = [];\n};\n\nTransition.prototype.animateStyle = function animateStyle ( style, value, options ) {\n\t\tvar this$1 = this;\n\n\tif ( arguments.length === 4 ) {\n\t\tthrow new Error( 't.animateStyle() returns a promise - use .then() instead of passing a callback' );\n\t}\n\n\t// Special case - page isn't visible. Don't animate anything, because\n\t// that way you'll never get CSS transitionend events\n\tif ( !visible ) {\n\t\tthis.setStyle( style, value );\n\t\treturn resolved$1;\n\t}\n\n\tvar to;\n\n\tif ( typeof style === 'string' ) {\n\t\tto = {};\n\t\tto[ style ] = value;\n\t} else {\n\t\tto = style;\n\n\t\t// shuffle arguments\n\t\toptions = value;\n\t}\n\n\t// As of 0.3.9, transition authors should supply an `option` object with\n\t// `duration` and `easing` properties (and optional `delay`), plus a\n\t// callback function that gets called after the animation completes\n\n\t// TODO remove this check in a future version\n\tif ( !options ) {\n\t\twarnOnceIfDebug( 'The \""%s\"" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340', this.name );\n\t\toptions = this;\n\t}\n\n\treturn new Promise( function (fulfil) {\n\t\t// Edge case - if duration is zero, set style synchronously and complete\n\t\tif ( !options.duration ) {\n\t\t\tthis$1.setStyle( to );\n\t\t\tfulfil();\n\t\t\treturn;\n\t\t}\n\n\t\t// Get a list of the properties we're animating\n\t\tvar propertyNames = Object.keys( to );\n\t\tvar changedProperties = [];\n\n\t\t// Store the current styles\n\t\tvar computedStyle = getComputedStyle( this$1.node );\n\n\t\tvar i = propertyNames.length;\n\t\twhile ( i-- ) {\n\t\t\tvar prop = propertyNames[i];\n\t\t\tvar current = computedStyle[ prefix$1( prop ) ];\n\n\t\t\tif ( current === '0px' ) { current = 0; }\n\n\t\t\t// we need to know if we're actually changing anything\n\t\t\tif ( current != to[ prop ] ) { // use != instead of !==, so we can compare strings with numbers\n\t\t\t\tchangedProperties.push( prop );\n\n\t\t\t\t// make the computed style explicit, so we can animate where\n\t\t\t\t// e.g. height='auto'\n\t\t\t\tthis$1.node.style[ prefix$1( prop ) ] = current;\n\t\t\t}\n\t\t}\n\n\t\t// If we're not actually changing anything, the transitionend event\n\t\t// will never fire! So we complete early\n\t\tif ( !changedProperties.length ) {\n\t\t\tfulfil();\n\t\t\treturn;\n\t\t}\n\n\t\tcreateTransitions$1( this$1, to, options, changedProperties, fulfil );\n\t});\n};\n\nTransition.prototype.bind = function bind () {\n\tvar options = this.options;\n\tvar type = options.template && options.template.v;\n\tif ( type ) {\n\t\tif ( type === 't0' || type === 't1' ) { this.element.intro = this; }\n\t\tif ( type === 't0' || type === 't2' ) { this.element.outro = this; }\n\t\tthis.eventName = names[ type ];\n\t}\n\n\tvar ractive = this.owner.ractive;\n\n\tthis.name = options.name || options.template.n;\n\n\tif ( options.params ) {\n\t\tthis.params = options.params;\n\t}\n\n\tif ( typeof this.name === 'function' ) {\n\t\tthis._fn = this.name;\n\t\tthis.name = this._fn.name;\n\t} else {\n\t\tthis._fn = findInViewHierarchy( 'transitions', ractive, this.name );\n\t}\n\n\tif ( !this._fn ) {\n\t\twarnOnceIfDebug( missingPlugin( this.name, 'transition' ), { ractive: ractive });\n\t}\n\n\tsetupArgsFn( this, options.template );\n};\n\nTransition.prototype.getParams = function getParams () {\n\tif ( this.params ) { return this.params; }\n\n\t// get expression args if supplied\n\tif ( this.fn ) {\n\t\tvar values = resolveArgs( this, this.template, this.parentFragment ).map( function (model) {\n\t\t\tif ( !model ) { return undefined; }\n\n\t\t\treturn model.get();\n\t\t});\n\t\treturn this.fn.apply( this.ractive, values );\n\t}\n};\n\nTransition.prototype.getStyle = function getStyle ( props ) {\n\tvar computedStyle = getComputedStyle( this.node );\n\n\tif ( typeof props === 'string' ) {\n\t\tvar value = computedStyle[ prefix$1( props ) ];\n\t\treturn value === '0px' ? 0 : value;\n\t}\n\n\tif ( !Array.isArray( props ) ) {\n\t\tthrow new Error( 'Transition$getStyle must be passed a string, or an array of strings representing CSS properties' );\n\t}\n\n\tvar styles = {};\n\n\tvar i = props.length;\n\twhile ( i-- ) {\n\t\tvar prop = props[i];\n\t\tvar value$1 = computedStyle[ prefix$1( prop ) ];\n\n\t\tif ( value$1 === '0px' ) { value$1 = 0; }\n\t\tstyles[ prop ] = value$1;\n\t}\n\n\treturn styles;\n};\n\nTransition.prototype.processParams = function processParams ( params, defaults ) {\n\tif ( typeof params === 'number' ) {\n\t\tparams = { duration: params };\n\t}\n\n\telse if ( typeof params === 'string' ) {\n\t\tif ( params === 'slow' ) {\n\t\t\tparams = { duration: 600 };\n\t\t} else if ( params === 'fast' ) {\n\t\t\tparams = { duration: 200 };\n\t\t} else {\n\t\t\tparams = { duration: 400 };\n\t\t}\n\t} else if ( !params ) {\n\t\tparams = {};\n\t}\n\n\treturn Object.assign( {}, defaults, params );\n};\n\nTransition.prototype.registerCompleteHandler = function registerCompleteHandler ( fn ) {\n\taddToArray( this.onComplete, fn );\n};\n\nTransition.prototype.setStyle = function setStyle ( style, value ) {\n\t\tvar this$1 = this;\n\n\tif ( typeof style === 'string' ) {\n\t\tthis.node.style[ prefix$1( style ) ] = value;\n\t}\n\n\telse {\n\t\tvar prop;\n\t\tfor ( prop in style ) {\n\t\t\tif ( style.hasOwnProperty( prop ) ) {\n\t\t\t\tthis$1.node.style[ prefix$1( prop ) ] = style[ prop ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this;\n};\n\nTransition.prototype.shouldFire = function shouldFire ( type ) {\n\tif ( !this.ractive.transitionsEnabled ) { return false; }\n\n\t// check for noIntro and noOutro cases, which only apply when the owner ractive is rendering and unrendering, respectively\n\tif ( type === 'intro' && this.ractive.rendering && nearestProp( 'noIntro', this.ractive, true ) ) { return false; }\n\tif ( type === 'outro' && this.ractive.unrendering && nearestProp( 'noOutro', this.ractive, false ) ) { return false; }\n\n\tvar params = this.getParams(); // this is an array, the params object should be the first member\n\t// if there's not a parent element, this can't be nested, so roll on\n\tif ( !this.element.parent ) { return true; }\n\n\t// if there is a local param, it takes precedent\n\tif ( params && params[0] && 'nested' in params[0] ) {\n\t\tif ( params[0].nested !== false ) { return true; }\n\t} else { // use the nearest instance setting\n\t\t// find the nearest instance that actually has a nested setting\n\t\tif ( nearestProp( 'nestedTransitions', this.ractive ) !== false ) { return true; }\n\t}\n\n\t// check to see if this is actually a nested transition\n\tvar el = this.element.parent;\n\twhile ( el ) {\n\t\tif ( el[type] && el[type].starting ) { return false; }\n\t\tel = el.parent;\n\t}\n\n\treturn true;\n};\n\nTransition.prototype.start = function start () {\n\t\tvar this$1 = this;\n\n\tvar node = this.node = this.element.node;\n\tvar originalStyle = node.getAttribute( 'style' );\n\n\tvar completed;\n\tvar args = this.getParams();\n\n\t// create t.complete() - we don't want this on the prototype,\n\t// because we don't want `this` silliness when passing it as\n\t// an argument\n\tthis.complete = function (noReset) {\n\t\tthis$1.starting = false;\n\t\tif ( completed ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis$1.onComplete.forEach( function (fn) { return fn(); } );\n\t\tif ( !noReset && this$1.isIntro ) {\n\t\t\tresetStyle( node, originalStyle);\n\t\t}\n\n\t\tthis$1._manager.remove( this$1 );\n\n\t\tcompleted = true;\n\t};\n\n\t// If the transition function doesn't exist, abort\n\tif ( !this._fn ) {\n\t\tthis.complete();\n\t\treturn;\n\t}\n\n\tvar promise = this._fn.apply( this.ractive, [ this ].concat( args ) );\n\tif ( promise ) { promise.then( this.complete ); }\n};\n\nTransition.prototype.toString = function toString () { return ''; };\n\nTransition.prototype.unbind = function unbind () {\n\tif ( !this.element.attributes.unbinding ) {\n\t\tvar type = this.options && this.options.template && this.options.template.v;\n\t\tif ( type === 't0' || type === 't1' ) { this.element.intro = null; }\n\t\tif ( type === 't0' || type === 't2' ) { this.element.outro = null; }\n\t}\n};\n\nTransition.prototype.unregisterCompleteHandler = function unregisterCompleteHandler ( fn ) {\n\tremoveFromArray( this.onComplete, fn );\n};\n\nvar proto$4 = Transition.prototype;\nproto$4.destroyed = proto$4.render = proto$4.unrender = proto$4.update = noop;\n\nfunction nearestProp ( prop, ractive, rendering ) {\n\tvar instance = ractive;\n\twhile ( instance ) {\n\t\tif ( instance.hasOwnProperty( prop ) && ( rendering === undefined || rendering ? instance.rendering : instance.unrendering ) ) { return instance[ prop ]; }\n\t\tinstance = instance.component && instance.component.ractive;\n\t}\n\n\treturn ractive[ prop ];\n}\n\nvar elementCache = {};\n\nvar ieBug;\nvar ieBlacklist;\n\ntry {\n\tcreateElement( 'table' ).innerHTML = 'foo';\n} catch ( err ) {\n\tieBug = true;\n\n\tieBlacklist = {\n\t\tTABLE:  [ '<table class=\""x\"">', '</table>' ],\n\t\tTHEAD:  [ '<table><thead class=\""x\"">', '</thead></table>' ],\n\t\tTBODY:  [ '<table><tbody class=\""x\"">', '</tbody></table>' ],\n\t\tTR:     [ '<table><tr class=\""x\"">', '</tr></table>' ],\n\t\tSELECT: [ '<select class=\""x\"">', '</select>' ]\n\t};\n}\n\nvar insertHtml = function ( html$$1, node, docFrag ) {\n\tvar nodes = [];\n\n\t// render 0 and false\n\tif ( html$$1 == null || html$$1 === '' ) { return nodes; }\n\n\tvar container;\n\tvar wrapper;\n\tvar selectedOption;\n\n\tif ( ieBug && ( wrapper = ieBlacklist[ node.tagName ] ) ) {\n\t\tcontainer = element( 'DIV' );\n\t\tcontainer.innerHTML = wrapper[0] + html$$1 + wrapper[1];\n\t\tcontainer = container.querySelector( '.x' );\n\n\t\tif ( container.tagName === 'SELECT' ) {\n\t\t\tselectedOption = container.options[ container.selectedIndex ];\n\t\t}\n\t}\n\n\telse if ( node.namespaceURI === svg$1 ) {\n\t\tcontainer = element( 'DIV' );\n\t\tcontainer.innerHTML = '<svg class=\""x\"">' + html$$1 + '</svg>';\n\t\tcontainer = container.querySelector( '.x' );\n\t}\n\n\telse if ( node.tagName === 'TEXTAREA' ) {\n\t\tcontainer = createElement( 'div' );\n\n\t\tif ( typeof container.textContent !== 'undefined' ) {\n\t\t\tcontainer.textContent = html$$1;\n\t\t} else {\n\t\t\tcontainer.innerHTML = html$$1;\n\t\t}\n\t}\n\n\telse {\n\t\tcontainer = element( node.tagName );\n\t\tcontainer.innerHTML = html$$1;\n\n\t\tif ( container.tagName === 'SELECT' ) {\n\t\t\tselectedOption = container.options[ container.selectedIndex ];\n\t\t}\n\t}\n\n\tvar child;\n\twhile ( child = container.firstChild ) {\n\t\tnodes.push( child );\n\t\tdocFrag.appendChild( child );\n\t}\n\n\t// This is really annoying. Extracting <option> nodes from the\n\t// temporary container <select> causes the remaining ones to\n\t// become selected. So now we have to deselect them. IE8, you\n\t// amaze me. You really do\n\t// ...and now Chrome too\n\tvar i;\n\tif ( node.tagName === 'SELECT' ) {\n\t\ti = nodes.length;\n\t\twhile ( i-- ) {\n\t\t\tif ( nodes[i] !== selectedOption ) {\n\t\t\t\tnodes[i].selected = false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nodes;\n};\n\nfunction element ( tagName ) {\n\treturn elementCache[ tagName ] || ( elementCache[ tagName ] = createElement( tagName ) );\n}\n\nvar Triple = (function (Mustache$$1) {\n\tfunction Triple ( options ) {\n\t\tMustache$$1.call( this, options );\n\t}\n\n\tif ( Mustache$$1 ) Triple.__proto__ = Mustache$$1;\n\tTriple.prototype = Object.create( Mustache$$1 && Mustache$$1.prototype );\n\tTriple.prototype.constructor = Triple;\n\n\tTriple.prototype.detach = function detach () {\n\t\tvar docFrag = createDocumentFragment();\n\t\tthis.nodes.forEach( function (node) { return docFrag.appendChild( node ); } );\n\t\treturn docFrag;\n\t};\n\n\tTriple.prototype.find = function find ( selector ) {\n\t\tvar this$1 = this;\n\n\t\tvar len = this.nodes.length;\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar node = this$1.nodes[i];\n\n\t\t\tif ( node.nodeType !== 1 ) { continue; }\n\n\t\t\tif ( matches( node, selector ) ) { return node; }\n\n\t\t\tvar queryResult = node.querySelector( selector );\n\t\t\tif ( queryResult ) { return queryResult; }\n\t\t}\n\n\t\treturn null;\n\t};\n\n\tTriple.prototype.findAll = function findAll ( selector, query ) {\n\t\tvar this$1 = this;\n\n\t\tvar len = this.nodes.length;\n\t\tvar i;\n\n\t\tfor ( i = 0; i < len; i += 1 ) {\n\t\t\tvar node = this$1.nodes[i];\n\n\t\t\tif ( node.nodeType !== 1 ) { continue; }\n\n\t\t\tif ( query.test( node ) ) { query.add( node ); }\n\n\t\t\tvar queryAllResult = node.querySelectorAll( selector );\n\t\t\tif ( queryAllResult ) {\n\t\t\t\tvar numNodes = queryAllResult.length;\n\t\t\t\tvar j = (void 0);\n\n\t\t\t\tfor ( j = 0; j < numNodes; j += 1 ) {\n\t\t\t\t\tquery.add( queryAllResult[j] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tTriple.prototype.findComponent = function findComponent () {\n\t\treturn null;\n\t};\n\n\tTriple.prototype.firstNode = function firstNode () {\n\t\treturn this.nodes[0];\n\t};\n\n\tTriple.prototype.render = function render ( target ) {\n\t\tvar html = this.model ? this.model.get() : '';\n\t\tthis.nodes = insertHtml( html, this.parentFragment.findParentNode(), target );\n\t\tthis.rendered = true;\n\t};\n\n\tTriple.prototype.toString = function toString () {\n\t\treturn this.model && this.model.get() != null ? decodeCharacterReferences( '' + this.model.get() ) : '';\n\t};\n\n\tTriple.prototype.unrender = function unrender () {\n\t\tif ( this.nodes ) { this.nodes.forEach( function (node) { return detachNode( node ); } ); }\n\t\tthis.rendered = false;\n\t};\n\n\tTriple.prototype.update = function update () {\n\t\tif ( this.rendered && this.dirty ) {\n\t\t\tthis.dirty = false;\n\n\t\t\tthis.unrender();\n\t\t\tvar docFrag = createDocumentFragment();\n\t\t\tthis.render( docFrag );\n\n\t\t\tvar parentNode = this.parentFragment.findParentNode();\n\t\t\tvar anchor = this.parentFragment.findNextNode( this );\n\n\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t} else {\n\t\t\t// make sure to reset the dirty flag even if not rendered\n\t\t\tthis.dirty = false;\n\t\t}\n\t};\n\n\treturn Triple;\n}(Mustache));\n\n// finds the component constructor in the registry or view hierarchy registries\nfunction getComponentConstructor ( ractive, name ) {\n\tvar instance = findInstance( 'components', ractive, name );\n\tvar Component;\n\n\tif ( instance ) {\n\t\tComponent = instance.components[ name ];\n\n\t\t// best test we have for not Ractive.extend\n\t\tif ( !Component._Parent ) {\n\t\t\t// function option, execute and store for reset\n\t\t\tvar fn = Component.bind( instance );\n\t\t\tfn.isOwner = instance.components.hasOwnProperty( name );\n\t\t\tComponent = fn();\n\n\t\t\tif ( !Component ) {\n\t\t\t\twarnIfDebug( noRegistryFunctionReturn, name, 'component', 'component', { ractive: ractive });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( typeof Component === 'string' ) {\n\t\t\t\t// allow string lookup\n\t\t\t\tComponent = getComponentConstructor( ractive, Component );\n\t\t\t}\n\n\t\t\tComponent._fn = fn;\n\t\t\tinstance.components[ name ] = Component;\n\t\t}\n\t}\n\n\treturn Component;\n}\n\n//import Yielder from './Yielder';\nvar constructors = {};\nconstructors[ ALIAS ] = Alias;\nconstructors[ ANCHOR ] = Component;\nconstructors[ DOCTYPE ] = Doctype;\nconstructors[ INTERPOLATOR ] = Interpolator;\nconstructors[ PARTIAL ] = Partial;\nconstructors[ SECTION ] = Section;\nconstructors[ TRIPLE ] = Triple;\nconstructors[ YIELDER ] = Partial;\n\nconstructors[ ATTRIBUTE ] = Attribute;\nconstructors[ BINDING_FLAG ] = BindingFlag;\nconstructors[ DECORATOR ] = Decorator;\nconstructors[ EVENT ] = EventDirective;\nconstructors[ TRANSITION ] = Transition;\n\nvar specialElements = {\n\tdoctype: Doctype,\n\tform: Form,\n\tinput: Input,\n\toption: Option,\n\tselect: Select,\n\ttextarea: Textarea\n};\n\nfunction createItem ( options ) {\n\tif ( typeof options.template === 'string' ) {\n\t\treturn new Text( options );\n\t}\n\n\tif ( options.template.t === ELEMENT ) {\n\t\t// could be component or element\n\t\tvar ComponentConstructor = getComponentConstructor( options.parentFragment.ractive, options.template.e );\n\t\tif ( ComponentConstructor ) {\n\t\t\treturn new Component( options, ComponentConstructor );\n\t\t}\n\n\t\tvar tagName = options.template.e.toLowerCase();\n\n\t\tvar ElementConstructor = specialElements[ tagName ] || Element;\n\t\treturn new ElementConstructor( options );\n\t}\n\n\tvar Item;\n\n\t// component mappings are a special case of attribute\n\tif ( options.template.t === ATTRIBUTE ) {\n\t\tvar el = options.owner;\n\t\tif ( !el || ( el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT ) ) {\n\t\t\tel = findElement( options.parentFragment );\n\t\t}\n\t\toptions.element = el;\n\n\t\tItem = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;\n\t} else {\n\t\tItem = constructors[ options.template.t ];\n\t}\n\n\tif ( !Item ) { throw new Error( (\""Unrecognised item type \"" + (options.template.t)) ); }\n\n\treturn new Item( options );\n}\n\nvar ReferenceResolver = function ReferenceResolver ( fragment, reference, callback ) {\n\tvar this$1 = this;\n\n\tthis.fragment = fragment;\n\tthis.reference = normalise( reference );\n\tthis.callback = callback;\n\n\tthis.keys = splitKeypath( reference );\n\tthis.resolved = false;\n\n\tthis.contexts = [];\n\n\t// TODO the consumer should take care of addUnresolved\n\t// we attach to all the contexts between here and the root\n\t// - whenever their values change, they can quickly\n\t// check to see if we can resolve\n\twhile ( fragment ) {\n\t\tif ( fragment.context ) {\n\t\t\tfragment.context.addUnresolved( this$1.keys[0], this$1 );\n\t\t\tthis$1.contexts.push( fragment.context );\n\t\t}\n\n\t\tfragment = fragment.componentParent || fragment.parent;\n\t}\n};\n\nReferenceResolver.prototype.attemptResolution = function attemptResolution () {\n\tif ( this.resolved ) { return; }\n\n\tvar model = resolveReference( this.fragment, this.reference );\n\n\tif ( model ) {\n\t\tthis.resolved = true;\n\t\tthis.callback( model );\n\t}\n};\n\nReferenceResolver.prototype.forceResolution = function forceResolution () {\n\tif ( this.resolved ) { return; }\n\n\tvar model = this.fragment.findContext().joinAll( this.keys );\n\tthis.callback( model );\n\tthis.resolved = true;\n};\n\nReferenceResolver.prototype.rebind = function rebind ( next, previous ) {\n\t\tvar this$1 = this;\n\n\tif ( previous ) { previous.removeUnresolved( this.keys[0], this ); }\n\tif ( next ) { runloop.scheduleTask( function () { return next.addUnresolved( this$1.keys[0], this$1 ); } ); }\n};\n\nReferenceResolver.prototype.unbind = function unbind () {\n\t\tvar this$1 = this;\n\n\tif ( this.fragment ) { removeFromArray( this.fragment.unresolved, this ); }\n\n\tif ( this.resolved ) { return; }\n\n\tthis.contexts.forEach( function (c) { return c.removeUnresolved( this$1.keys[0], this$1 ); } );\n};\n\n// TODO all this code needs to die\nfunction processItems ( items, values, guid, counter ) {\n\tif ( counter === void 0 ) counter = 0;\n\n\treturn items.map( function (item) {\n\t\tif ( item.type === TEXT ) {\n\t\t\treturn item.template;\n\t\t}\n\n\t\tif ( item.fragment ) {\n\t\t\tif ( item.fragment.iterations ) {\n\t\t\t\treturn item.fragment.iterations.map( function (fragment) {\n\t\t\t\t\treturn processItems( fragment.items, values, guid, counter );\n\t\t\t\t}).join( '' );\n\t\t\t} else {\n\t\t\t\treturn processItems( item.fragment.items, values, guid, counter );\n\t\t\t}\n\t\t}\n\n\t\tvar placeholderId = guid + \""-\"" + (counter++);\n\t\tvar model = item.model || item.newModel;\n\n\t\tvalues[ placeholderId ] = model ?\n\t\t\tmodel.wrapper ?\n\t\t\t\tmodel.wrapperValue :\n\t\t\t\tmodel.get() :\n\t\t\tundefined;\n\n\t\treturn '${' + placeholderId + '}';\n\t}).join( '' );\n}\n\nfunction unrenderAndDestroy$1 ( item ) {\n\titem.unrender( true );\n}\n\nvar Fragment = function Fragment ( options ) {\n\tthis.owner = options.owner; // The item that owns this fragment - an element, section, partial, or attribute\n\n\tthis.isRoot = !options.owner.parentFragment;\n\tthis.parent = this.isRoot ? null : this.owner.parentFragment;\n\tthis.ractive = options.ractive || ( this.isRoot ? options.owner : this.parent.ractive );\n\n\tthis.componentParent = ( this.isRoot && this.ractive.component ) ? this.ractive.component.parentFragment : null;\n\n\tthis.context = null;\n\tthis.rendered = false;\n\n\t// encapsulated styles should be inherited until they get applied by an element\n\tthis.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );\n\n\tthis.resolvers = [];\n\n\tthis.dirty = false;\n\tthis.dirtyValue = true; // used for attribute values\n\n\tthis.template = options.template || [];\n\tthis.createItems();\n};\n\nFragment.prototype.bind = function bind$1 ( context ) {\n\tthis.context = context;\n\tthis.items.forEach( bind$1$1 );\n\tthis.bound = true;\n\n\t// in rare cases, a forced resolution (or similar) will cause the\n\t// fragment to be dirty before it's even finished binding. In those\n\t// cases we update immediately\n\tif ( this.dirty ) { this.update(); }\n\n\treturn this;\n};\n\nFragment.prototype.bubble = function bubble () {\n\tthis.dirtyValue = true;\n\n\tif ( !this.dirty ) {\n\t\tthis.dirty = true;\n\n\t\tif ( this.isRoot ) { // TODO encapsulate 'is component root, but not overall root' check?\n\t\t\tif ( this.ractive.component ) {\n\t\t\t\tthis.ractive.component.bubble();\n\t\t\t} else if ( this.bound ) {\n\t\t\t\trunloop.addFragment( this );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.owner.bubble();\n\t\t}\n\t}\n};\n\nFragment.prototype.createItems = function createItems () {\n\t\tvar this$1 = this;\n\n\t// this is a hot code path\n\tvar max = this.template.length;\n\tthis.items = [];\n\tfor ( var i = 0; i < max; i++ ) {\n\t\tthis$1.items[i] = createItem({ parentFragment: this$1, template: this$1.template[i], index: i });\n\t}\n};\n\nFragment.prototype.destroyed = function destroyed$1 () {\n\tthis.items.forEach( destroyed$1$1 );\n};\n\nFragment.prototype.detach = function detach () {\n\tvar docFrag = createDocumentFragment();\n\tthis.items.forEach( function (item) { return docFrag.appendChild( item.detach() ); } );\n\treturn docFrag;\n};\n\nFragment.prototype.find = function find ( selector, options ) {\n\treturn findMap( this.items, function (i) { return i.find( selector, options ); } );\n};\n\nFragment.prototype.findAll = function findAll ( selector, query ) {\n\tif ( this.items ) {\n\t\tthis.items.forEach( function (i) { return i.findAll && i.findAll( selector, query ); } );\n\t}\n};\n\nFragment.prototype.findComponent = function findComponent ( name, options ) {\n\treturn findMap( this.items, function (i) { return i.findComponent( name, options ); } );\n};\n\nFragment.prototype.findAllComponents = function findAllComponents ( name, query ) {\n\tif ( this.items ) {\n\t\tthis.items.forEach( function (i) { return i.findAllComponents && i.findAllComponents( name, query ); } );\n\t}\n};\n\nFragment.prototype.findContext = function findContext () {\n\tvar fragment = this;\n\twhile ( fragment && !fragment.context ) { fragment = fragment.parent; }\n\tif ( !fragment ) { return this.ractive.viewmodel; }\n\telse { return fragment.context; }\n};\n\nFragment.prototype.findNextNode = function findNextNode ( item ) {\n\t\tvar this$1 = this;\n\n\t// search for the next node going forward\n\tif ( item ) {\n\t\tfor ( var i = item.index + 1; i < this.items.length; i++ ) {\n\t\t\tif ( !this$1.items[ i ] ) { continue; }\n\n\t\t\tvar node = this$1.items[ i ].firstNode( true );\n\t\t\tif ( node ) { return node; }\n\t\t}\n\t}\n\n\t// if this is the root fragment, and there are no more items,\n\t// it means we're at the end...\n\tif ( this.isRoot ) {\n\t\tif ( this.ractive.component ) {\n\t\t\treturn this.ractive.component.parentFragment.findNextNode( this.ractive.component );\n\t\t}\n\n\t\t// TODO possible edge case with other content\n\t\t// appended to this.ractive.el?\n\t\treturn null;\n\t}\n\n\tif ( this.parent ) { return this.owner.findNextNode( this ); } // the argument is in case the parent is a RepeatedFragment\n};\n\nFragment.prototype.findParentNode = function findParentNode () {\n\tvar fragment = this;\n\n\tdo {\n\t\tif ( fragment.owner.type === ELEMENT ) {\n\t\t\treturn fragment.owner.node;\n\t\t}\n\n\t\tif ( fragment.isRoot && !fragment.ractive.component ) { // TODO encapsulate check\n\t\t\treturn fragment.ractive.el;\n\t\t}\n\n\t\tif ( fragment.owner.type === YIELDER ) {\n\t\t\tfragment = fragment.owner.containerFragment;\n\t\t} else {\n\t\t\tfragment = fragment.componentParent || fragment.parent; // TODO ugh\n\t\t}\n\t} while ( fragment );\n\n\tthrow new Error( 'Could not find parent node' ); // TODO link to issue tracker\n};\n\nFragment.prototype.findRepeatingFragment = function findRepeatingFragment () {\n\tvar fragment = this;\n\t// TODO better check than fragment.parent.iterations\n\twhile ( ( fragment.parent || fragment.componentParent ) && !fragment.isIteration ) {\n\t\tfragment = fragment.parent || fragment.componentParent;\n\t}\n\n\treturn fragment;\n};\n\nFragment.prototype.firstNode = function firstNode ( skipParent ) {\n\tvar node = findMap( this.items, function (i) { return i.firstNode( true ); } );\n\tif ( node ) { return node; }\n\tif ( skipParent ) { return null; }\n\n\treturn this.parent.findNextNode( this.owner );\n};\n\nFragment.prototype.rebinding = function rebinding ( next ) {\n\tthis.context = next;\n};\n\nFragment.prototype.render = function render ( target, occupants ) {\n\tif ( this.rendered ) { throw new Error( 'Fragment is already rendered!' ); }\n\tthis.rendered = true;\n\n\tthis.items.forEach( function (item) { return item.render( target, occupants ); } );\n};\n\nFragment.prototype.resetTemplate = function resetTemplate ( template ) {\n\tvar wasBound = this.bound;\n\tvar wasRendered = this.rendered;\n\n\t// TODO ensure transitions are disabled globally during reset\n\n\tif ( wasBound ) {\n\t\tif ( wasRendered ) { this.unrender( true ); }\n\t\tthis.unbind();\n\t}\n\n\tthis.template = template;\n\tthis.createItems();\n\n\tif ( wasBound ) {\n\t\tthis.bind( this.context );\n\n\t\tif ( wasRendered ) {\n\t\t\tvar parentNode = this.findParentNode();\n\t\t\tvar anchor = this.findNextNode();\n\n\t\t\tif ( anchor ) {\n\t\t\t\tvar docFrag = createDocumentFragment();\n\t\t\t\tthis.render( docFrag );\n\t\t\t\tparentNode.insertBefore( docFrag, anchor );\n\t\t\t} else {\n\t\t\t\tthis.render( parentNode );\n\t\t\t}\n\t\t}\n\t}\n};\n\nFragment.prototype.resolve = function resolve ( template, callback ) {\n\tif ( !this.context && this.parent.resolve ) {\n\t\treturn this.parent.resolve( template, callback );\n\t}\n\n\tvar resolver = new ReferenceResolver( this, template, callback );\n\tthis.resolvers.push( resolver );\n\n\treturn resolver; // so we can e.g. force resolution\n};\n\nFragment.prototype.shuffled = function shuffled$1 () {\n\tthis.items.forEach( shuffled$1$1 );\n};\n\nFragment.prototype.toString = function toString$1 ( escape ) {\n\treturn this.items.map( escape ? toEscapedString : toString$2 ).join( '' );\n};\n\nFragment.prototype.unbind = function unbind$1 () {\n\tthis.context = null;\n\tthis.items.forEach( unbind$1$1 );\n\tthis.bound = false;\n\n\treturn this;\n};\n\nFragment.prototype.unrender = function unrender$1 ( shouldDestroy ) {\n\tthis.items.forEach( shouldDestroy ? unrenderAndDestroy$1 : unrender$1$1 );\n\tthis.rendered = false;\n};\n\nFragment.prototype.update = function update$1 () {\n\tif ( this.dirty ) {\n\t\tif ( !this.updating ) {\n\t\t\tthis.dirty = false;\n\t\t\tthis.updating = true;\n\t\t\tthis.items.forEach( update$1$1 );\n\t\t\tthis.updating = false;\n\t\t} else if ( this.isRoot ) {\n\t\t\trunloop.addFragmentToRoot( this );\n\t\t}\n\t}\n};\n\nFragment.prototype.valueOf = function valueOf () {\n\tif ( this.items.length === 1 ) {\n\t\treturn this.items[0].valueOf();\n\t}\n\n\tif ( this.dirtyValue ) {\n\t\tvar values = {};\n\t\tvar source = processItems( this.items, values, this.ractive._guid );\n\t\tvar parsed = parseJSON( source, values );\n\n\t\tthis.value = parsed ?\n\t\t\tparsed.value :\n\t\t\tthis.toString();\n\n\t\tthis.dirtyValue = false;\n\t}\n\n\treturn this.value;\n};\n\nfunction getChildQueue ( queue, ractive ) {\n\treturn queue[ ractive._guid ] || ( queue[ ractive._guid ] = [] );\n}\n\nfunction fire$1 ( hookQueue, ractive ) {\n\tvar childQueue = getChildQueue( hookQueue.queue, ractive );\n\n\thookQueue.hook.fire( ractive );\n\n\t// queue is \""live\"" because components can end up being\n\t// added while hooks fire on parents that modify data values.\n\twhile ( childQueue.length ) {\n\t\tfire$1( hookQueue, childQueue.shift() );\n\t}\n\n\tdelete hookQueue.queue[ ractive._guid ];\n}\n\nvar HookQueue = function HookQueue ( event ) {\n\tthis.hook = new Hook( event );\n\tthis.inProcess = {};\n\tthis.queue = {};\n};\n\nHookQueue.prototype.begin = function begin ( ractive ) {\n\tthis.inProcess[ ractive._guid ] = true;\n};\n\nHookQueue.prototype.end = function end ( ractive ) {\n\tvar parent = ractive.parent;\n\n\t// If this is *isn't* a child of a component that's in process,\n\t// it should call methods or fire at this point\n\tif ( !parent || !this.inProcess[ parent._guid ] ) {\n\t\tfire$1( this, ractive );\n\t}\n\t// elsewise, handoff to parent to fire when ready\n\telse {\n\t\tgetChildQueue( this.queue, parent ).push( ractive );\n\t}\n\n\tdelete this.inProcess[ ractive._guid ];\n};\n\nvar configHook = new Hook( 'config' );\nvar initHook = new HookQueue( 'init' );\n\nfunction initialise ( ractive, userOptions, options ) {\n\tObject.keys( ractive.viewmodel.computations ).forEach( function (key) {\n\t\tvar computation = ractive.viewmodel.computations[ key ];\n\n\t\tif ( ractive.viewmodel.value.hasOwnProperty( key ) ) {\n\t\t\tcomputation.set( ractive.viewmodel.value[ key ] );\n\t\t}\n\t});\n\n\t// set up event subscribers\n\tsubscribe( ractive, userOptions, 'on' );\n\n\t// init config from Parent and options\n\tconfig.init( ractive.constructor, ractive, userOptions );\n\n\tconfigHook.fire( ractive );\n\n\t// general config done, set up observers\n\tsubscribe( ractive, userOptions, 'observe' );\n\n\tinitHook.begin( ractive );\n\n\tvar fragment = ractive.fragment = createFragment( ractive, options );\n\tif ( fragment ) { fragment.bind( ractive.viewmodel ); }\n\n\tinitHook.end( ractive );\n\n\tif ( fragment ) {\n\t\t// render automatically ( if `el` is specified )\n\t\tvar el = getElement( ractive.el || ractive.target );\n\t\tif ( el ) {\n\t\t\tvar promise = ractive.render( el, ractive.append );\n\n\t\t\tif ( Ractive.DEBUG_PROMISES ) {\n\t\t\t\tpromise['catch']( function (err) {\n\t\t\t\t\twarnOnceIfDebug( 'Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\\n  Ractive.DEBUG_PROMISES = false;' );\n\t\t\t\t\twarnIfDebug( 'An error happened during rendering', { ractive: ractive });\n\t\t\t\t\tlogIfDebug( err );\n\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction createFragment ( ractive, options ) {\n\tif ( options === void 0 ) options = {};\n\n\tif ( ractive.template ) {\n\t\tvar cssIds;\n\n\t\tif ( options.cssIds || ractive.cssId ) {\n\t\t\tcssIds = options.cssIds ? options.cssIds.slice() : [];\n\n\t\t\tif ( ractive.cssId ) {\n\t\t\t\tcssIds.push( ractive.cssId );\n\t\t\t}\n\t\t}\n\n\t\treturn new Fragment({\n\t\t\towner: ractive,\n\t\t\ttemplate: ractive.template,\n\t\t\tcssIds: cssIds\n\t\t});\n\t}\n}\n\nfunction subscribe ( instance, options, type ) {\n\tvar subs = ( instance.constructor[ (\""_\"" + type) ] || [] ).concat( toPairs( options[ type ] || [] ) );\n\tvar single = type === 'on' ? 'once' : (type + \""Once\"");\n\n\tsubs.forEach( function (ref) {\n\t\tvar target = ref[0];\n\t\tvar config$$1 = ref[1];\n\n\t\tif ( typeof config$$1 === 'function' ) {\n\t\t\tinstance[type]( target, config$$1 );\n\t\t} else if ( typeof config$$1 === 'object' && typeof config$$1.handler === 'function' ) {\n\t\t\tinstance[ config$$1.once ? single : type ]( target, config$$1.handler, config$$1 );\n\t\t}\n\t});\n}\n\nvar renderHook = new Hook( 'render' );\nvar completeHook = new Hook( 'complete' );\n\nfunction render$2 ( ractive, target, anchor, occupants ) {\n\t// set a flag to let any transitions know that this instance is currently rendering\n\tractive.rendering = true;\n\n\tvar promise = runloop.start( ractive, true );\n\trunloop.scheduleTask( function () { return renderHook.fire( ractive ); }, true );\n\n\tif ( ractive.fragment.rendered ) {\n\t\tthrow new Error( 'You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first' );\n\t}\n\n\tif ( ractive.destroyed ) {\n\t\tractive.destroyed = false;\n\t\tractive.fragment = createFragment( ractive ).bind( ractive.viewmodel );\n\t}\n\n\tanchor = getElement( anchor ) || ractive.anchor;\n\n\tractive.el = ractive.target = target;\n\tractive.anchor = anchor;\n\n\t// ensure encapsulated CSS is up-to-date\n\tif ( ractive.cssId ) { applyCSS(); }\n\n\tif ( target ) {\n\t\t( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( ractive );\n\n\t\tif ( anchor ) {\n\t\t\tvar docFrag = doc.createDocumentFragment();\n\t\t\tractive.fragment.render( docFrag );\n\t\t\ttarget.insertBefore( docFrag, anchor );\n\t\t} else {\n\t\t\tractive.fragment.render( target, occupants );\n\t\t}\n\t}\n\n\trunloop.end();\n\tractive.rendering = false;\n\n\treturn promise.then( function () { return completeHook.fire( ractive ); } );\n}\n\nfunction Ractive$render ( target, anchor ) {\n\tif ( this.torndown ) {\n\t\twarnIfDebug( 'ractive.render() was called on a Ractive instance that was already torn down' );\n\t\treturn Promise.resolve();\n\t}\n\n\ttarget = getElement( target ) || this.el;\n\n\tif ( !this.append && target ) {\n\t\t// Teardown any existing instances *before* trying to set up the new one -\n\t\t// avoids certain weird bugs\n\t\tvar others = target.__ractive_instances__;\n\t\tif ( others ) { others.forEach( teardown$1$1 ); }\n\n\t\t// make sure we are the only occupants\n\t\tif ( !this.enhance ) {\n\t\t\ttarget.innerHTML = ''; // TODO is this quicker than removeChild? Initial research inconclusive\n\t\t}\n\t}\n\n\tvar occupants = this.enhance ? toArray( target.childNodes ) : null;\n\tvar promise = render$2( this, target, anchor, occupants );\n\n\tif ( occupants ) {\n\t\twhile ( occupants.length ) { target.removeChild( occupants.pop() ); }\n\t}\n\n\treturn promise;\n}\n\nvar shouldRerender = [ 'template', 'partials', 'components', 'decorators', 'events' ];\n\nvar completeHook$1 = new Hook( 'complete' );\nvar resetHook = new Hook( 'reset' );\nvar renderHook$1 = new Hook( 'render' );\nvar unrenderHook = new Hook( 'unrender' );\n\nfunction Ractive$reset ( data ) {\n\tdata = data || {};\n\n\tif ( typeof data !== 'object' ) {\n\t\tthrow new Error( 'The reset method takes either no arguments, or an object containing new data' );\n\t}\n\n\t// TEMP need to tidy this up\n\tdata = dataConfigurator.init( this.constructor, this, { data: data });\n\n\tvar promise = runloop.start( this, true );\n\n\t// If the root object is wrapped, try and use the wrapper's reset value\n\tvar wrapper = this.viewmodel.wrapper;\n\tif ( wrapper && wrapper.reset ) {\n\t\tif ( wrapper.reset( data ) === false ) {\n\t\t\t// reset was rejected, we need to replace the object\n\t\t\tthis.viewmodel.set( data );\n\t\t}\n\t} else {\n\t\tthis.viewmodel.set( data );\n\t}\n\n\t// reset config items and track if need to rerender\n\tvar changes = config.reset( this );\n\tvar rerender;\n\n\tvar i = changes.length;\n\twhile ( i-- ) {\n\t\tif ( shouldRerender.indexOf( changes[i] ) > -1 ) {\n\t\t\trerender = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( rerender ) {\n\t\tunrenderHook.fire( this );\n\t\tthis.fragment.resetTemplate( this.template );\n\t\trenderHook$1.fire( this );\n\t\tcompleteHook$1.fire( this );\n\t}\n\n\trunloop.end();\n\n\tresetHook.fire( this, data );\n\n\treturn promise;\n}\n\nfunction collect( source, name, attr, dest ) {\n\tsource.forEach( function (item) {\n\t\t// queue to rerender if the item is a partial and the current name matches\n\t\tif ( item.type === PARTIAL && ( item.refName ===  name || item.name === name ) ) {\n\t\t\titem.inAttribute = attr;\n\t\t\tdest.push( item );\n\t\t\treturn; // go no further\n\t\t}\n\n\t\t// if it has a fragment, process its items\n\t\tif ( item.fragment ) {\n\t\t\tcollect( item.fragment.iterations || item.fragment.items, name, attr, dest );\n\t\t}\n\n\t\t// or if it is itself a fragment, process its items\n\t\telse if ( Array.isArray( item.items ) ) {\n\t\t\tcollect( item.items, name, attr, dest );\n\t\t}\n\n\t\t// or if it is a component, step in and process its items\n\t\telse if ( item.type === COMPONENT && item.instance ) {\n\t\t\t// ...unless the partial is shadowed\n\t\t\tif ( item.instance.partials[ name ] ) { return; }\n\t\t\tcollect( item.instance.fragment.items, name, attr, dest );\n\t\t}\n\n\t\t// if the item is an element, process its attributes too\n\t\tif ( item.type === ELEMENT ) {\n\t\t\tif ( Array.isArray( item.attributes ) ) {\n\t\t\t\tcollect( item.attributes, name, true, dest );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction forceResetTemplate$1 ( partial ) {\n\tpartial.forceResetTemplate();\n}\n\nvar resetPartial = function ( name, partial ) {\n\tvar collection = [];\n\tcollect( this.fragment.items, name, false, collection );\n\n\tvar promise = runloop.start( this, true );\n\n\tthis.partials[ name ] = partial;\n\tcollection.forEach( forceResetTemplate$1 );\n\n\trunloop.end();\n\n\treturn promise;\n};\n\n// TODO should resetTemplate be asynchronous? i.e. should it be a case\n// of outro, update template, intro? I reckon probably not, since that\n// could be achieved with unrender-resetTemplate-render. Also, it should\n// conceptually be similar to resetPartial, which couldn't be async\n\nfunction Ractive$resetTemplate ( template ) {\n\ttemplateConfigurator.init( null, this, { template: template });\n\n\tvar transitionsEnabled = this.transitionsEnabled;\n\tthis.transitionsEnabled = false;\n\n\t// Is this is a component, we need to set the `shouldDestroy`\n\t// flag, otherwise it will assume by default that a parent node\n\t// will be detached, and therefore it doesn't need to bother\n\t// detaching its own nodes\n\tvar component = this.component;\n\tif ( component ) { component.shouldDestroy = true; }\n\tthis.unrender();\n\tif ( component ) { component.shouldDestroy = false; }\n\n\tvar promise = runloop.start();\n\n\t// remove existing fragment and create new one\n\tthis.fragment.unbind().unrender( true );\n\n\tthis.fragment = new Fragment({\n\t\ttemplate: this.template,\n\t\troot: this,\n\t\towner: this\n\t});\n\n\tvar docFrag = createDocumentFragment();\n\tthis.fragment.bind( this.viewmodel ).render( docFrag );\n\n\t// if this is a component, its el may not be valid, so find a\n\t// target based on the component container\n\tif ( component && !component.external ) {\n\t\tthis.fragment.findParentNode().insertBefore( docFrag, component.findNextNode() );\n\t} else {\n\t\tthis.el.insertBefore( docFrag, this.anchor );\n\t}\n\n\trunloop.end();\n\n\tthis.transitionsEnabled = transitionsEnabled;\n\n\treturn promise;\n}\n\nvar reverse$1 = makeArrayMethod( 'reverse' ).path;\n\nfunction Ractive$set ( keypath, value ) {\n\tvar ractive = this;\n\n\treturn set$1( ractive, build( ractive, keypath, value ) );\n}\n\nvar shift$1 = makeArrayMethod( 'shift' ).path;\n\nvar sort$1 = makeArrayMethod( 'sort' ).path;\n\nvar splice$1 = makeArrayMethod( 'splice' ).path;\n\nfunction Ractive$subtract ( keypath, d ) {\n\treturn add$1( this, keypath, ( d === undefined ? -1 : -d ) );\n}\n\nfunction Ractive$toggle ( keypath ) {\n\tif ( typeof keypath !== 'string' ) {\n\t\tthrow new TypeError( badArguments );\n\t}\n\n\treturn set$1( this, gather( this, keypath ).map( function (m) { return [ m, !m.get() ]; } ) );\n}\n\nfunction Ractive$toCSS() {\n\tvar cssIds = [ this.cssId ].concat( this.findAllComponents().map( function (c) { return c.cssId; } ) );\n\tvar uniqueCssIds = Object.keys(cssIds.reduce( function ( ids, id ) { return (ids[id] = true, ids); }, {}));\n\treturn getCSS( uniqueCssIds );\n}\n\nfunction Ractive$toHTML () {\n\treturn this.fragment.toString( true );\n}\n\nfunction toText () {\n\treturn this.fragment.toString( false );\n}\n\nfunction Ractive$transition ( name, node, params ) {\n\n\tif ( node instanceof HTMLElement ) {\n\t\t// good to go\n\t}\n\telse if ( isObject( node ) ) {\n\t\t// omitted, use event node\n\t\tparams = node;\n\t}\n\n\t// if we allow query selector, then it won't work\n\t// simple params like \""fast\""\n\n\t// else if ( typeof node === 'string' ) {\n\t// \t// query selector\n\t// \tnode = this.find( node )\n\t// }\n\n\tnode = node || this.event.node;\n\n\tif ( !node || !node._ractive ) {\n\t\tfatal( (\""No node was supplied for transition \"" + name) );\n\t}\n\n\tparams = params || {};\n\tvar owner = node._ractive.proxy;\n\tvar transition = new Transition({ owner: owner, parentFragment: owner.parentFragment, name: name, params: params });\n\ttransition.bind();\n\n\tvar promise = runloop.start( this, true );\n\trunloop.registerTransition( transition );\n\trunloop.end();\n\n\tpromise.then( function () { return transition.unbind(); } );\n\treturn promise;\n}\n\nfunction unlink$2( here ) {\n\tvar promise = runloop.start();\n\tthis.viewmodel.joinAll( splitKeypath( here ), { lastLink: false } ).unlink();\n\trunloop.end();\n\treturn promise;\n}\n\nvar unrenderHook$1 = new Hook( 'unrender' );\n\nfunction Ractive$unrender () {\n\tif ( !this.fragment.rendered ) {\n\t\twarnIfDebug( 'ractive.unrender() was called on a Ractive instance that was not rendered' );\n\t\treturn Promise.resolve();\n\t}\n\n\tthis.unrendering = true;\n\tvar promise = runloop.start( this, true );\n\n\t// If this is a component, and the component isn't marked for destruction,\n\t// don't detach nodes from the DOM unnecessarily\n\tvar shouldDestroy = !this.component || ( this.component.anchor || {} ).shouldDestroy || this.component.shouldDestroy || this.shouldDestroy;\n\tthis.fragment.unrender( shouldDestroy );\n\tif ( shouldDestroy ) { this.destroyed = true; }\n\n\tremoveFromArray( this.el.__ractive_instances__, this );\n\n\tunrenderHook$1.fire( this );\n\n\trunloop.end();\n\tthis.unrendering = false;\n\n\treturn promise;\n}\n\nvar unshift$1 = makeArrayMethod( 'unshift' ).path;\n\nfunction Ractive$updateModel ( keypath, cascade ) {\n\tvar promise = runloop.start( this, true );\n\n\tif ( !keypath ) {\n\t\tthis.viewmodel.updateFromBindings( true );\n\t} else {\n\t\tthis.viewmodel.joinAll( splitKeypath( keypath ) ).updateFromBindings( cascade !== false );\n\t}\n\n\trunloop.end();\n\n\treturn promise;\n}\n\nvar proto = {\n\tadd: Ractive$add,\n\tanimate: Ractive$animate,\n\tattachChild: attachChild,\n\tdetach: Ractive$detach,\n\tdetachChild: detachChild,\n\tfind: Ractive$find,\n\tfindAll: Ractive$findAll,\n\tfindAllComponents: Ractive$findAllComponents,\n\tfindComponent: Ractive$findComponent,\n\tfindContainer: Ractive$findContainer,\n\tfindParent: Ractive$findParent,\n\tfire: Ractive$fire,\n\tget: Ractive$get,\n\tgetNodeInfo: getNodeInfo,\n\tinsert: Ractive$insert,\n\tlink: link$2,\n\tmerge: thisRactive$merge,\n\tobserve: observe$1,\n\tobserveList: observeList,\n\tobserveOnce: observeOnce$1,\n\t// TODO reinstate these\n\t// observeListOnce,\n\toff: Ractive$off,\n\ton: Ractive$on,\n\tonce: Ractive$once,\n\tpop: pop$1,\n\tpush: push$1,\n\trender: Ractive$render,\n\treset: Ractive$reset,\n\tresetPartial: resetPartial,\n\tresetTemplate: Ractive$resetTemplate,\n\treverse: reverse$1,\n\tset: Ractive$set,\n\tshift: shift$1,\n\tsort: sort$1,\n\tsplice: splice$1,\n\tsubtract: Ractive$subtract,\n\tteardown: Ractive$teardown,\n\ttoggle: Ractive$toggle,\n\ttoCSS: Ractive$toCSS,\n\ttoCss: Ractive$toCSS,\n\ttoHTML: Ractive$toHTML,\n\ttoHtml: Ractive$toHTML,\n\ttoText: toText,\n\ttransition: Ractive$transition,\n\tunlink: unlink$2,\n\tunrender: Ractive$unrender,\n\tunshift: unshift$1,\n\tupdate: Ractive$update,\n\tupdateModel: Ractive$updateModel\n};\n\nvar wrap$2 = function ( method, superMethod, force ) {\n\n\tif ( force || needsSuper( method, superMethod ) )  {\n\n\t\treturn function () {\n\n\t\t\tvar hasSuper = ( '_super' in this );\n\t\t\tvar _super = this._super;\n\n\t\t\tthis._super = superMethod;\n\n\t\t\tvar result = method.apply( this, arguments );\n\n\t\t\tif ( hasSuper ) {\n\t\t\t\tthis._super = _super;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\telse {\n\t\treturn method;\n\t}\n};\n\nfunction needsSuper ( method, superMethod ) {\n\treturn typeof superMethod === 'function' && /_super/.test( method );\n}\n\nfunction unwrap ( Child ) {\n\tvar options = {};\n\n\twhile ( Child ) {\n\t\taddRegistries( Child, options );\n\t\taddOtherOptions( Child, options );\n\n\t\tif ( Child._Parent !== Ractive ) {\n\t\t\tChild = Child._Parent;\n\t\t} else {\n\t\t\tChild = false;\n\t\t}\n\t}\n\n\treturn options;\n}\n\nfunction addRegistries ( Child, options ) {\n\tregistries.forEach( function (r) {\n\t\taddRegistry(\n\t\t\tr.useDefaults ? Child.prototype : Child,\n\t\t\toptions, r.name );\n\t});\n}\n\nfunction addRegistry ( target, options, name ) {\n\tvar registry;\n\tvar keys = Object.keys( target[ name ] );\n\n\tif ( !keys.length ) { return; }\n\n\tif ( !( registry = options[ name ] ) ) {\n\t\tregistry = options[ name ] = {};\n\t}\n\n\tkeys\n\t\t.filter( function (key) { return !( key in registry ); } )\n\t\t.forEach( function (key) { return registry[ key ] = target[ name ][ key ]; } );\n}\n\nfunction addOtherOptions ( Child, options ) {\n\tObject.keys( Child.prototype ).forEach( function (key) {\n\t\tif ( key === 'computed' ) { return; }\n\n\t\tvar value = Child.prototype[ key ];\n\n\t\tif ( !( key in options ) ) {\n\t\t\toptions[ key ] = value._method ? value._method : value;\n\t\t}\n\n\t\t// is it a wrapped function?\n\t\telse if ( typeof options[ key ] === 'function'\n\t\t\t\t&& typeof value === 'function'\n\t\t\t\t&& options[ key ]._method ) {\n\n\t\t\tvar needsSuper = value._method;\n\n\t\t\tif ( needsSuper ) { value = value._method; }\n\n\t\t\t// rewrap bound directly to parent fn\n\t\t\tvar result = wrap$2( options[ key ]._method, value );\n\n\t\t\tif ( needsSuper ) { result._method = result; }\n\n\t\t\toptions[ key ] = result;\n\t\t}\n\t});\n}\n\nfunction extend$2 () {\n\tvar options = [], len = arguments.length;\n\twhile ( len-- ) options[ len ] = arguments[ len ];\n\n\tif( !options.length ) {\n\t\treturn extendOne( this );\n\t} else {\n\t\treturn options.reduce( extendOne, this );\n\t}\n}\n\nfunction extendOne ( Parent, options ) {\n\tif ( options === void 0 ) options = {};\n\n\t// if we're extending with another Ractive instance...\n\t//\n\t//   var Human = Ractive.extend(...), Spider = Ractive.extend(...);\n\t//   var Spiderman = Human.extend( Spider );\n\t//\n\t// ...inherit prototype methods and default options as well\n\tif ( options.prototype instanceof Ractive ) {\n\t\toptions = unwrap( options );\n\t}\n\n\tvar Child = function ( options ) {\n\t\tif ( !( this instanceof Child ) ) { return new Child( options ); }\n\n\t\tconstruct( this, options || {} );\n\t\tinitialise( this, options || {}, {} );\n\t};\n\n\tvar proto = Object.create( Parent.prototype );\n\tproto.constructor = Child;\n\n\t// Static properties\n\tObject.defineProperties( Child, {\n\t\t// alias prototype as defaults\n\t\tdefaults: { value: proto },\n\n\t\t// extendable\n\t\textend: { value: extend$2, writable: true, configurable: true },\n\n\t\t// Parent - for IE8, can't use Object.getPrototypeOf\n\t\t_Parent: { value: Parent }\n\t});\n\n\t// extend configuration\n\tconfig.extend( Parent, proto, options );\n\n\t// store event and observer registries on the constructor when extending\n\tChild._on = ( Parent._on || [] ).concat( toPairs( options.on ) );\n\tChild._observe = ( Parent._observe || [] ).concat( toPairs( options.observe ) );\n\n\tdataConfigurator.extend( Parent, proto, options );\n\n\tif ( options.computed ) {\n\t\tproto.computed = Object.assign( Object.create( Parent.prototype.computed ), options.computed );\n\t}\n\n\tChild.prototype = proto;\n\n\treturn Child;\n}\n\nfunction joinKeys () {\n\tvar keys = [], len = arguments.length;\n\twhile ( len-- ) keys[ len ] = arguments[ len ];\n\n\treturn keys.map( escapeKey ).join( '.' );\n}\n\nfunction splitKeypath$1 ( keypath ) {\n\treturn splitKeypath( keypath ).map( unescapeKey );\n}\n\nfunction Ractive ( options ) {\n\tif ( !( this instanceof Ractive ) ) { return new Ractive( options ); }\n\n\tconstruct( this, options || {} );\n\tinitialise( this, options || {}, {} );\n}\n\n// check to see if we're being asked to force Ractive as a global for some weird environments\nif ( win && !win.Ractive ) {\n\tvar opts = '';\n\tvar script = document.currentScript || document.querySelector( 'script[data-ractive-options]' );\n\n\tif ( script ) {\n\t\topts = script.getAttribute( 'data-ractive-options' ) || '';\n\t}\n\n\tif ( ~opts.indexOf( 'ForceGlobal' ) ) {\n\t\twin.Ractive = Ractive;\n\t}\n}\n\nObject.assign( Ractive.prototype, proto, defaults );\nRactive.prototype.constructor = Ractive;\n\n// alias prototype as `defaults`\nRactive.defaults = Ractive.prototype;\n\n// static properties\nObject.defineProperties( Ractive, {\n\n\t// debug flag\n\tDEBUG:          { writable: true, value: true },\n\tDEBUG_PROMISES: { writable: true, value: true },\n\n\t// static methods:\n\textend:         { value: extend$2 },\n\tescapeKey:      { value: escapeKey },\n\tgetNodeInfo:    { value: staticInfo },\n\tjoinKeys:       { value: joinKeys },\n\tparse:          { value: parse$1$1 },\n\tsplitKeypath:   { value: splitKeypath$1 },\n\tunescapeKey:    { value: unescapeKey },\n\tgetCSS:         { value: getCSS },\n\n\t// support\n\tenhance:        { writable: true, value: false },\n\tsvg:            { value: svg },\n\tmagic:          { value: magic },\n\n\t// version\n\tVERSION:        { value: '0.9.0-edge-17e74e20b46dabb3f1342d70e254b1fb438442d3' },\n\n\t// plugins\n\tadaptors:       { writable: true, value: {} },\n\tcomponents:     { writable: true, value: {} },\n\tdecorators:     { writable: true, value: {} },\n\teasing:         { writable: true, value: easing },\n\tevents:         { writable: true, value: {} },\n\tinterpolators:  { writable: true, value: interpolators },\n\tpartials:       { writable: true, value: {} },\n\ttransitions:    { writable: true, value: {} }\n});\n\nreturn Ractive;\n\n})));\n""],""names"":[""this"",""dirty"",""value"",""model"",""isRoot"",""get"",""undefined"",""siblingFalsey"",""subordinate"",""sibling"",""isTruthy"",""lastType"",""sectionType"",""templateSectionType"",""getType"",""template"",""i"",""fragment"",""rendered"",""unbind"",""unrender"",""newFragment"",""fragmentShouldExist"",""SECTION_EACH"",""SECTION_WITH"",""SECTION_UNLESS"",""update"",""RepeatedFragment"",""owner"",""f"",""indexRef"",""bind"",""context"",""SECTION_IF"",""Fragment"",""parentNode"",""parentFragment"",""findParentNode"",""anchor"",""findNextNode"",""docFrag"",""createDocumentFragment"",""render"",""insertBefore"",""nextSibling"",""Section"",""MustacheContainer"",""Select"",""Element$$1"",""options"",""call"",""__proto__"",""prototype"",""Object"",""create"",""constructor"",""foundNode"",""node"",""binding"",""selectedOptions"",""getSelectedOptions"",""length"",""target"",""occupants"",""sync"",""defaultSelected"",""selected"",""this$1"",""selectNode"",""toArray"",""forEach"",""o"",""indexOf"",""setFromNode"",""selectValue"",""getAttribute"",""isMultiple"",""array"",""Array"",""isArray"",""optionWasSelected"",""optionValue"",""_ractive"",""shouldSelect"",""valueContains"",""forceUpdate"",""Element"",""Textarea"",""Input$$1"",""deferContent"",""attributeByName"",""isBindable"",""attributes"",""push"",""createItem"",""t"",""ATTRIBUTE"",""n"",""cssIds"",""bubble"",""runloop"",""scheduleTask"",""toString"",""Input"",""Text"",""Item$$1"",""type"",""TEXT"",""detach"",""detachNode"",""firstNode"",""inAttributes"",""nodeType"",""shift"",""nodeValue"",""doc"",""createTextNode"",""appendChild"",""escape"",""escapeHtml"",""shouldDestroy"",""valueOf"",""Item"",""proto$3"",""noop"",""prefix"",""camelizeHyphenated"",""hyphenatedStr"",""replace"",""match"",""$1"",""toUpperCase"",""isClient"",""prefixCache"",""testStyle"",""createElement"",""style"",""prop"",""capped"",""charAt"",""substring"",""vendors"",""vendor"",""visible"",""prefix$1"",""hidden"",""prefix$2"",""i$1"",""addEventListener"",""onChange"",""onHide"",""onShow"",""win"",""createTransitions"",""unprefixPattern"",""RegExp"",""join"",""unprefix"",""vendorPattern"",""hyphenate"",""str"",""test"",""toLowerCase"",""TRANSITION$1"",""TRANSITIONEND"",""CSS_TRANSITIONS_ENABLED"",""TRANSITION_DURATION"",""TRANSITION_PROPERTY"",""TRANSITION_TIMING_FUNCTION"",""testStyle$1"",""linear$2"",""x"",""canUseCssTransitions"",""cannotUseCssTransitions"",""transition"",""webkitTransition"",""to"",""changedProperties"",""resolve"",""setTimeout"",""transitionDone"",""clearTimeout"",""cssTimeout"",""checkComplete"",""jsTransitionsComplete"",""cssTransitionsComplete"",""unregisterCompleteHandler"",""ractive"",""fire"",""name"",""isIntro"",""transitionEndHandler"",""event"",""index"",""propertyName"",""splice"",""cssTransitionsDone"",""previous"",""property"",""duration"",""timing"",""removeEventListener"",""hashPrefix"",""namespaceURI"",""tagName"",""map"",""easing"",""delay"",""registerCompleteHandler"",""hash"",""originalValue"",""suffix"",""interpolator"",""propertiesToTransitionInJs"",""getStyle"",""warnIfDebug"",""exec"",""interpolate"",""parseFloat"",""warnOnceIfDebug"",""missingPlugin"",""Ticker"",""step"",""pos"",""complete"",""createTransitions$1"",""getComputedStyle"",""resolved$1"",""Promise"",""names"",""t0"",""t1"",""t2"",""Transition"",""findElement"",""element"",""onComplete"",""animateStyle"",""arguments"",""Error"",""setStyle"",""fulfil"",""propertyNames"",""keys"",""computedStyle"",""current"",""v"",""intro"",""outro"",""eventName"",""params"",""_fn"",""findInViewHierarchy"",""setupArgsFn"",""getParams"",""fn"",""values"",""resolveArgs"",""apply"",""props"",""styles"",""value$1"",""processParams"",""defaults"",""assign"",""addToArray"",""hasOwnProperty"",""shouldFire"",""transitionsEnabled"",""rendering"",""nearestProp"",""unrendering"",""parent"",""nested"",""el"",""starting"",""start"",""completed"",""originalStyle"",""args"",""noReset"",""resetStyle"",""_manager"",""remove"",""promise"",""concat"",""then"",""unbinding"",""removeFromArray"",""proto$4"",""destroyed"",""ieBug"",""ieBlacklist"",""elementCache"",""innerHTML"",""err"",""TABLE"",""THEAD"",""TBODY"",""TR"",""SELECT"",""insertHtml"",""html$$1"",""nodes"",""container"",""wrapper"",""selectedOption"",""querySelector"",""selectedIndex"",""svg$1"",""textContent"",""child"",""firstChild"",""Triple"",""Mustache$$1"",""find"",""selector"",""len"",""matches"",""queryResult"",""findAll"",""query"",""add"",""queryAllResult"",""querySelectorAll"",""numNodes"",""j"",""findComponent"",""html"",""decodeCharacterReferences"",""Mustache"",""constructors"",""ALIAS"",""Alias"",""ANCHOR"",""Component"",""DOCTYPE"",""Doctype"",""INTERPOLATOR"",""Interpolator"",""PARTIAL"",""Partial"",""SECTION"",""TRIPLE"",""YIELDER"",""Attribute"",""BINDING_FLAG"",""BindingFlag"",""DECORATOR"",""Decorator"",""EVENT"",""EventDirective"",""TRANSITION"",""specialElements"",""doctype"",""form"",""Form"",""input"",""option"",""Option"",""select"",""textarea"",""ReferenceResolver"",""reference"",""callback"",""normalise"",""splitKeypath"",""resolved"",""contexts"",""addUnresolved"",""componentParent"",""attemptResolution"",""resolveReference"",""forceResolution"",""findContext"",""joinAll"",""rebind"",""next"",""removeUnresolved"",""unresolved"",""c"",""component"",""resolvers"",""dirtyValue"",""createItems"",""items"",""bind$1$1"",""bound"",""addFragment"",""max"",""destroyed$1$1"",""item"",""findMap"",""findAllComponents"",""viewmodel"",""ELEMENT"",""containerFragment"",""findRepeatingFragment"",""isIteration"",""skipParent"",""rebinding"",""resetTemplate"",""wasBound"",""wasRendered"",""resolver"",""shuffled"",""shuffled$1$1"",""toEscapedString"",""toString$2"",""unbind$1$1"",""unrenderAndDestroy$1"",""unrender$1$1"",""updating"",""addFragmentToRoot"",""update$1$1"",""source"",""processItems"",""_guid"",""parsed"",""parseJSON"",""HookQueue"",""hook"",""Hook"",""inProcess"",""queue"",""begin"",""end"",""getChildQueue"",""fire$1"",""configHook"",""initHook"",""renderHook"",""completeHook"",""shouldRerender"",""completeHook$1"",""resetHook"",""renderHook$1"",""unrenderHook"",""resetPartial"",""partial"",""collection"",""collect"",""partials"",""forceResetTemplate$1"",""reverse$1"",""makeArrayMethod"",""path"",""shift$1"",""sort$1"",""splice$1"",""unrenderHook$1"",""unshift$1"",""proto"",""Ractive$add"",""animate"",""Ractive$animate"",""attachChild"",""Ractive$detach"",""detachChild"",""Ractive$find"",""Ractive$findAll"",""Ractive$findAllComponents"",""Ractive$findComponent"",""findContainer"",""Ractive$findContainer"",""findParent"",""Ractive$findParent"",""Ractive$fire"",""Ractive$get"",""getNodeInfo"",""insert"",""Ractive$insert"",""link"",""link$2"",""merge"",""thisRactive$merge"",""observe"",""observe$1"",""observeList"",""observeOnce"",""observeOnce$1"",""off"",""Ractive$off"",""on"",""Ractive$on"",""once"",""Ractive$once"",""pop"",""pop$1"",""push$1"",""Ractive$render"",""reset"",""Ractive$reset"",""Ractive$resetTemplate"",""reverse"",""set"",""Ractive$set"",""sort"",""subtract"",""Ractive$subtract"",""teardown"",""Ractive$teardown"",""toggle"",""Ractive$toggle"",""toCSS"",""Ractive$toCSS"",""toCss"",""toHTML"",""Ractive$toHTML"",""toHtml"",""toText"",""Ractive$transition"",""unlink"",""unlink$2"",""Ractive$unrender"",""unshift"",""Ractive$update"",""updateModel"",""Ractive$updateModel"",""wrap$2"",""method"",""superMethod"",""force"",""needsSuper"",""hasSuper"",""_super"",""result"",""Ractive"",""opts"",""script"",""document"",""currentScript"",""defineProperties"",""DEBUG"",""writable"",""DEBUG_PROMISES"",""extend"",""extend$2"",""escapeKey"",""staticInfo"",""joinKeys"",""parse"",""parse$1$1"",""splitKeypath$1"",""unescapeKey"",""getCSS"",""enhance"",""svg"",""magic"",""VERSION"",""adaptors"",""components"",""decorators"",""events"",""interpolators"",""transitions"",""GenericBinding"",""Binding$$1"",""lazy"",""timeout"",""isNumeric"",""handler"",""handleDelay"",""handleDomEvent"",""attachEvent"",""handleBlur"",""Binding"",""FileBinding"",""GenericBinding$$1"",""getInitialValue"",""getValue"",""files"",""MultipleSelectBinding"",""filter"",""selectedValues"",""handleChange"",""attribute"",""previousValue"",""arrayContentsMatch"",""NumericBinding"",""isNaN"",""siblings"",""RadioBinding"",""getSiblings"",""checked"",""root"",""RadioNameBinding"",""group"",""getBindingGroup"",""getValue$2"",""nameAttributeBinding"",""getKeypath"",""getKeypathModel"",""register"",""lastVal"",""setting"",""lastValue"",""unregister"",""SingleSelectBinding"",""locked"",""disabled"",""endsWithSemi"",""ContainerItem$$1"",""liveQueries"",""e"",""isVoid"",""voidElementNames"",""leftovers"",""m"",""ConditionalAttribute"",""sortAttributes"",""recreateTwowayBinding"",""createTwowayBinding"",""twoway"",""selectBinding"",""matches$$1"",""live"",""removeFromQuery"",""namespace"",""getNamespace"",""existing"",""nodeName"",""defineProperty"",""proxy"",""setAttribute"",""registerTransition"",""children"",""childNodes"",""wasUndefined"",""name$1"",""removeAttribute"",""render$1$1"",""updateLiveQueries"",""makeDirty$2"",""attrs"",""stringifyAttribute"",""isSelected"",""inputIsCheckedRadio"",""cls"",""attr"",""safeAttributeString"",""getString"",""inlineClass"",""detachWhenReady"",""ContainerItem"",""toFront"",""formBindings"",""handleReset"",""DOMEvent"",""fatal"",""listen"",""directive"",""original"",""unlisten"",""CustomEvent"",""eventPlugin"",""RactiveEvent"",""instance"",""slice"",""cancel"",""specialPattern"",""dollarArgsPattern"",""COMPONENT"",""models"",""action"",""passedArgs"",""addHelpers"",""specialRef"",""ref"",""specialMatch"",""special"",""substr"",""dollarMatch"",""obj"",""wrapperValue"",""oldEvent"",""preventDefault"",""stopPropagation"",""fireEvent"",""isStatic"",""s"",""resolve$2"",""r"",""safe"",""rebindMatch"",""addShuffleRegister"",""proto$2"",""mustache"",""safeToStringValue"",""string"",""data"",""defaultValue"",""specials$1"",""true"",""false"",""null"",""specialsPattern"",""numberPattern$1"",""placeholderPattern"",""placeholderAtStartPattern"",""onlyWhitespace"",""JsonParser"",""Parser"",""init"",""allowWhitespace"",""postProcess"",""leftover"",""converters"",""parser"",""placeholder"",""matchPattern"",""number"",""stringLiteral"",""readStringLiteral"",""matchString"",""pair"",""getKeyValuePair"",""key"",""valueToken"",""read"",""Mapping"",""joinKey"",""createMapping"",""boundFragment"",""updateDelegate"",""a"",""selectedAttribute"",""MustacheContainer$$1"",""yielder"",""rx"",""refName"",""templateObj"",""getPartialTemplate"",""named"",""setTemplate"",""parsePartial"",""partialTemplate"",""k"",""z"",""aliases"",""resolveAliases"",""forceResetTemplate"",""inAttribute"",""doInAttributes"",""iterations"",""keyRef"",""pendingNewIndices"",""previousIterations"",""createIteration"",""isObject"",""refs"",""split"",""iteration"",""shuffle"",""newIndices"",""newIndex"",""oldIndex"",""unrenderAndDestroy"",""updatePostShuffle"",""toRemove"",""oldKeys"",""wasArray"",""fragment$1"",""newLength"",""indices"",""oldLen"",""removed"",""frag"",""contiguous"",""startIndex"",""l"",""SECTION_IF_WITH"",""isEmpty"",""message"",""hasConsole"",""console"",""groupCollapsed"",""sig"",""signature"",""error"",""getterUseStack"",""stack"",""groupEnd"",""dependencies"",""stopCapturing"",""setDependencies"",""registerChange"",""Computation"",""mark"",""isReadonly"",""setter"",""model$1"",""computations"",""Model$$1"",""Model"",""prototype$1"",""ComputationChild"",""ExpressionProxy"",""getFunction"",""createResolver"",""actuallyChanged"",""keypath"",""startCapturing"",""d"",""idx"",""retrieve"",""dep"",""deps"",""computation"",""ReferenceExpressionChild"",""applyValue"",""isEqual"",""base"",""childByKey"",""ReferenceExpressionProxy"",""baseResolver"",""intermediary"",""members"",""addShuffleTask"",""REFERENCE"",""isUnresolved"",""shouldCapture"",""String"",""unregisterTwowayBinding"",""registerTwowayBinding"",""keypathModel"",""bindings"",""oneway"",""findBoundValue"",""handleChange$1$1"",""links"",""marked"",""mark$1$1"",""clearUnresolveds"",""space"",""hyphenateCamel"",""camelCaseStr"",""textTypes"",""accept-charset"",""accesskey"",""bgcolor"",""class"",""codebase"",""colspan"",""contenteditable"",""datetime"",""dirname"",""for"",""http-equiv"",""ismap"",""maxlength"",""novalidate"",""pubdate"",""readonly"",""rowspan"",""tabindex"",""usemap"",""booleanAttributes"",""namespaces"",""useProperty"",""isTwoway"",""isBoolean"",""lookupNamespace"",""getUpdateDelegate"",""twowayBinding"",""flag"",""set$3"",""div$1"",""isSvg"",""parseAttributes"",""notIn"",""processWrapper"",""methodName"",""__model"",""mutatorMethods"",""patchedArrayProto"",""getNewIndices"",""wrappers"",""configurable"",""patchArrayMethods"",""unpatchArrayMethods"",""unpatch"",""patch"",""errorMessage$1"",""arrayAdaptor"",""object"",""wrap"",""ArrayWrapper"",""instances"",""storage"",""magicAdaptor"",""MagicWrapper"",""magicAdaptor$1"",""originalDescriptors"",""originalDescriptor"",""getOwnPropertyDescriptor"",""childKeypath"",""descriptor"",""createOrWrapDescriptor"",""__magic"",""revert"",""dependants"",""MagicArrayWrapper"",""magicWrapper"",""arrayWrapper"",""magicArrayAdaptor"",""RactiveModel"",""changes"",""isLink"",""initLink"",""hasProp$1"",""RootModel"",""adapt"",""computationContext"",""attached"",""attachImplicits"",""compute"",""createLink"",""targetPath"",""detached"",""detachImplicits"",""capture"",""virtual"",""getVirtual"",""getRactiveModel"",""ractiveModel"",""getValueChildren"",""_link"",""has"",""unescapedKey"",""Function"",""GlobalModel"",""SharedModel$1"",""localKey"",""origin"",""local"",""shouldTeardown"",""constructHook"",""registryNames$1"",""uid"",""teardownHook"",""destructHook"",""ComponentConstructor"",""isAnchor"",""p"",""content"",""_partials"",""addChild"",""addChild$1"",""removeChild"",""removeChild$1"",""construct"",""_inlinePartials"",""eventHandlers"",""initialise"",""_query"",""checking"",""checkAnchors"",""render$2"",""updateLiveQueries$1"",""makeDirty$1"",""teardown$2"",""unrenderItem"",""missingDecorator"",""warnOnce"",""teardownArgsFn"",""proto$1"",""warnAboutAmbiguity"",""parentForm"",""resetValue"",""CheckboxBinding"",""BindingGroup"",""push$2"",""CheckboxNameBinding"",""checkboxName"",""getValue$1$1"",""noInitialValue"",""existingValue"",""bindingValue"",""arrayContains"",""isChecked"",""valueSoFar"",""ContentEditableBinding"",""LinkModel"",""teardown$1$1"",""ModelBase"",""lnk"",""implicit"",""sourcePath"",""relinking"",""fireShuffleTasks"",""ln"",""tickers"",""running"",""performance"",""now"",""requestAnimationFrame"",""tick"",""elapsed"",""eased"",""stop"",""abort"",""prefixers"",""ModelBase$$1"",""ticker"",""rewrap"",""newWrapperValue"",""parentValue"",""createBranch"",""adaptor"",""getPrefixer"",""from"",""fulfilPromise"",""boundValue"",""isObjectLike"",""notifyUpstream"",""branch"",""maybeBind"",""unwrap"",""shouldBind"",""KeypathModel"",""lastLink"",""old"",""comparator"",""oldArray"",""newArray"",""recreateArray"",""oldLength"",""usedIndices"",""firstUnusedIndex"",""shuffle$1$1"",""SharedModel"",""global"",""window"",""keypathExpr"",""arrayProto"",""mdl"",""result$1"",""promise$1"",""comparators"",""updateHook"",""modelPush"",""modelPop"",""modelShift"",""modelUnshift"",""modelSort"",""modelSplice"",""modelReverse"",""insertHook"",""Observer"",""dispatch"",""oldValue"",""newValue"",""defer"",""strict"",""cancelled"",""_observers"",""addObserver"",""PatternObserver"",""baseModel"",""pattern"",""baseKeypath"",""oldValues"",""newValues"",""changed"",""findMatches"",""registerPatternObserver"",""unregisterPatternObserver"",""newKeys"",""wildcards"",""notify"",""touchedFrom"",""count"",""ok"",""check"",""ListObserver"",""pending"",""sliced"",""negativeOne"",""inserted"",""deleted"",""hadIndex"",""onceOptions"",""trim"",""notEmptyString"",""PREFIX"",""styleDefinitions"",""isDirty"",""styleElement"",""useCssText"",""getElementsByTagName"",""styleSheet"",""adaptConfigurator"",""Parent"",""combine"",""ensureArray"",""remove$1"",""cleanCss"",""css"",""reconstruct"",""selectorsPattern"",""commentsPattern"",""selectorUnitPattern"",""excludePattern"",""dataRvcGuidPattern"",""cssConfigurator"",""id"",""uuid"",""noCssTransform"",""transformCss"",""cssId"",""addCSS"",""dataConfigurator"",""combine$1"",""bind$2"",""_r_unbound"",""TEMPLATE_VERSION"",""functions"",""leadingWhitespace"",""ParseError"",""lineStart"",""lines"",""lineEnds"",""line"",""lineEnd"",""remaining"",""getContextMessage"",""getLinePos"",""lineNum"",""columnNum"",""contextLines"",""contextUp"",""contextDown"",""numTabs"",""annotation"",""char"",""msg"",""character"",""shortMessage"",""nextChar"",""Child"",""readTypeOf"",""INVERTED"",""CLOSING"",""COMMENT"",""DELIMCHANGE"",""CLOSING_TAG"",""INLINE_PARTIAL"",""NUMBER_LITERAL"",""STRING_LITERAL"",""ARRAY_LITERAL"",""OBJECT_LITERAL"",""BOOLEAN_LITERAL"",""REGEXP_LITERAL"",""GLOBAL"",""KEY_VALUE_PAIR"",""REFINEMENT"",""MEMBER"",""PREFIX_OPERATOR"",""BRACKETED"",""CONDITIONAL"",""INFIX_OPERATOR"",""INVOCATION"",""ELSE"",""ELSEIF"",""delimiterChangePattern"",""whitespacePattern"",""regexpPattern"",""pattern$1"",""regExpCache"",""getLowestIndex"",""haystack"",""needles"",""search"",""escapeRegExp"",""htmlEntities"",""quot"",""amp"",""apos"",""lt"",""gt"",""nbsp"",""iexcl"",""cent"",""pound"",""curren"",""yen"",""brvbar"",""sect"",""uml"",""copy"",""ordf"",""laquo"",""not"",""shy"",""reg"",""macr"",""deg"",""plusmn"",""sup2"",""sup3"",""acute"",""micro"",""para"",""middot"",""cedil"",""sup1"",""ordm"",""raquo"",""frac14"",""frac12"",""frac34"",""iquest"",""Agrave"",""Aacute"",""Acirc"",""Atilde"",""Auml"",""Aring"",""AElig"",""Ccedil"",""Egrave"",""Eacute"",""Ecirc"",""Euml"",""Igrave"",""Iacute"",""Icirc"",""Iuml"",""ETH"",""Ntilde"",""Ograve"",""Oacute"",""Ocirc"",""Otilde"",""Ouml"",""times"",""Oslash"",""Ugrave"",""Uacute"",""Ucirc"",""Uuml"",""Yacute"",""THORN"",""szlig"",""agrave"",""aacute"",""acirc"",""atilde"",""auml"",""aring"",""aelig"",""ccedil"",""egrave"",""eacute"",""ecirc"",""euml"",""igrave"",""iacute"",""icirc"",""iuml"",""eth"",""ntilde"",""ograve"",""oacute"",""ocirc"",""otilde"",""ouml"",""divide"",""oslash"",""ugrave"",""uacute"",""ucirc"",""uuml"",""yacute"",""thorn"",""yuml"",""OElig"",""oelig"",""Scaron"",""scaron"",""Yuml"",""fnof"",""circ"",""tilde"",""Alpha"",""Beta"",""Gamma"",""Delta"",""Epsilon"",""Zeta"",""Eta"",""Theta"",""Iota"",""Kappa"",""Lambda"",""Mu"",""Nu"",""Xi"",""Omicron"",""Pi"",""Rho"",""Sigma"",""Tau"",""Upsilon"",""Phi"",""Chi"",""Psi"",""Omega"",""alpha"",""beta"",""gamma"",""delta"",""epsilon"",""zeta"",""eta"",""theta"",""iota"",""kappa"",""lambda"",""mu"",""nu"",""xi"",""omicron"",""pi"",""rho"",""sigmaf"",""sigma"",""tau"",""upsilon"",""phi"",""chi"",""psi"",""omega"",""thetasym"",""upsih"",""piv"",""ensp"",""emsp"",""thinsp"",""zwnj"",""zwj"",""lrm"",""rlm"",""ndash"",""mdash"",""lsquo"",""rsquo"",""sbquo"",""ldquo"",""rdquo"",""bdquo"",""dagger"",""Dagger"",""bull"",""hellip"",""permil"",""prime"",""Prime"",""lsaquo"",""rsaquo"",""oline"",""frasl"",""euro"",""image"",""weierp"",""real"",""trade"",""alefsym"",""larr"",""uarr"",""rarr"",""darr"",""harr"",""crarr"",""lArr"",""uArr"",""rArr"",""dArr"",""hArr"",""forall"",""part"",""exist"",""empty"",""nabla"",""isin"",""notin"",""ni"",""prod"",""sum"",""minus"",""lowast"",""radic"",""infin"",""ang"",""and"",""or"",""cap"",""cup"",""int"",""there4"",""sim"",""cong"",""asymp"",""ne"",""equiv"",""le"",""ge"",""sub"",""sup"",""nsub"",""sube"",""supe"",""oplus"",""otimes"",""perp"",""sdot"",""lceil"",""rceil"",""lfloor"",""rfloor"",""lang"",""rang"",""loz"",""spades"",""clubs"",""hearts"",""diams"",""controlCharacters"",""entityPattern"",""codePointSupport"",""fromCodePoint"",""codeToChar"",""fromCharCode"",""lessThan"",""greaterThan"",""invalid"",""expectedExpression"",""expectedParen"",""numberPattern"",""stringMiddlePattern"",""escapeSequencePattern"",""lineContinuationPattern"",""makeQuotedStringMatcher"",""okQuote"",""literal"",""done"",""charCodeAt"",""JSON"",""getSingleQuotedString"",""getDoubleQuotedString"",""string$1"",""spreadPattern"",""legalReference"",""relaxedName"",""identifier"",""readObjectLiteral"",""keyValuePairs"",""readKeyValuePairs"",""readArrayLiteral"",""expressionList"",""readExpressionList"",""globals"",""keywords"",""prefixPattern"",""specials"",""specialCall"",""readPrimary"",""readLiteral"",""readReference"",""readBracketedExpression"",""readMemberOrInvocation"",""expression"",""refinement"",""readRefinement"",""makePrefixSequenceMatcher"",""symbol"",""fallthrough"",""readExpression"",""matcher"",""prefixOperators"",""readLogicalOr"",""readTypeof"",""makeInfixSequenceMatcher"",""left"",""right"",""infixOperators"",""readLogicalOr$1"",""attributeNamePattern"",""onPattern"",""eventPattern"",""reservedEventNames"",""decoratorPattern"",""transitionPattern"",""directives"",""unquotedAttributeValueTextPattern"",""proxyEvent"",""whitespace"",""slashes"",""delimiterChangeToken"",""exclude"",""legalAlias"",""asRE"",""elsePattern"",""elsePattern$1"",""handlebarsBlockCodes"",""each"",""if"",""with"",""unless"",""indexRefPattern"",""keyIndexRefPattern"",""handlebarsBlockPattern"",""OPEN_COMMENT"",""CLOSE_COMMENT"",""leadingLinebreak"",""trailingLinebreak"",""stripStandalones"",""backOne"",""backTwo"",""lastSectionItem"",""isString"",""isComment"",""isSection"",""lastItem"",""trimWhitespace"",""leadingPattern"",""trailingPattern"",""contiguousWhitespace"",""preserveWhitespaceElements"",""leadingWhitespace$1"",""trailingWhitespace"",""leadingNewLine"",""trailingNewLine"",""closingTagPattern"",""tagNamePattern"",""validTagNameFollower"",""disallowedContents"",""li"",""dt"",""dd"",""rt"",""rp"",""optgroup"",""thead"",""tbody"",""tfoot"",""tr"",""td"",""th"",""partialDefinitionSectionPattern"",""STANDARD_READERS"",""readPartial"",""readUnescaped"",""readSection"",""readInterpolator"",""readComment"",""TRIPLE_READERS"",""readTriple"",""STATIC_READERS"",""READERS"",""readMustache"",""readHtmlComment"",""readElement$1"",""readText"",""PARTIAL_READERS"",""readPartialDefinitionSection"",""defaultInterpolate"",""StandardParser"",""tripleDelimiters"",""staticDelimiters"",""staticTripleDelimiters"",""standardDelimiters"",""delimiters"",""tags"",""isTriple"",""open"",""close"",""readers"",""sortMustacheTags"",""sectionDepth"",""elementStack"",""sanitize"",""elements"",""eventAttributes"",""stripComments"",""preserveWhitespace"",""sanitizeElements"",""sanitizeEventAttributes"",""includeLinePositions"",""textOnlyMode"",""csp"",""cleanup"",""expr"",""insertExpressions"",""readTemplate"",""b"",""parseOptions"",""TEMPLATE_INSTRUCTIONS"",""COMPUTATION_INSTRUCTIONS"",""fromId"",""noThrow"",""getElementById"",""isParsed"",""getParseOptions"",""reduce"",""val"",""throwNoParse"",""addFunctions"",""parseFor"",""templateConfigurator"",""parseTemplate"",""getDynamicTemplate"",""_config"",""extendPartials"",""registryNames"",""Registry"",""useDefaults"",""configure"",""registry"",""isOwner"",""registries"",""custom"",""defaultKeys"",""isStandardKey"",""makeObj"",""isBlacklisted"",""order"",""config"",""configure$1"",""syncComputedChildren"",""isExpression"",""getter"",""description"",""all"",""res"",""isBindableByValue"",""isBindableByContentEditable"",""isContentEditable"",""isBindableByName"",""isBindableByChecked"",""isBindableByName$1"",""isBindableByChecked$1"",""makeDirty"",""nameAttr"",""xmlns$$1"",""updateModel$1"",""readKey"",""childData"",""getPartialFromRegistry"",""fillGaps"",""findParentPartial"",""findInstance"",""noRegistryFunctionReturn"",""findOwner"",""findConstructor"",""_Parent"",""hasIndexRef"",""getComponentConstructor"",""ElementConstructor"",""guid"",""counter"",""placeholderId"",""newModel"",""hookQueue"",""childQueue"",""userOptions"",""subscribe"",""createFragment"",""getElement"",""append"",""logIfDebug"",""subs"",""toPairs"",""single"",""config$$1"",""applyCSS"",""__ractive_instances__"",""torndown"",""others"",""rerender"",""dest"",""external"",""set$1"",""build"",""add$1"",""TypeError"",""badArguments"",""gather"",""uniqueCssIds"",""ids"",""HTMLElement"",""here"",""cascade"",""updateFromBindings"",""addRegistries"",""addOtherOptions"",""addRegistry"",""_method"",""extendOne"",""_on"",""_observe"",""computed"",""resolveInstanceMembers"",""modifyArrays"",""isolated"",""noIntro"",""noOutro"",""nestedTransitions"",""linear"",""easeIn"",""Math"",""pow"",""easeOut"",""easeInOut"",""toString$1$1"",""navigator"",""appName"",""warn"",""log"",""printWarning"",""welcome"",""implementation"",""hasFeature"",""alreadyWarned"",""welcomeIntro"",""welcomeMessage"",""WELCOME_MESSAGE"",""hasGroup"",""intermediate"",""min"",""properties"",""snap"",""prop$1"",""initStars"",""bubbleStars"",""arg"",""TransitionManager"",""intros"",""outros"",""totalChildren"",""outroChildren"",""detachQueue"",""outrosComplete"",""list"",""decrementOutros"",""decrementTotal"",""detachNodes"",""detach$1"",""_detachNodes"",""ready"",""detachImmediate"",""batch"",""changeHook"",""previousBatch"",""transitionManager"",""fragments"",""tasks"",""immediateObservers"",""deferredObservers"",""ractives"",""flushChanges"",""addInstance"",""observer"",""thing"",""task"",""postRender"",""_batch"",""refPattern"",""splitPattern"",""escapeKeyPattern"",""unescapeKeyPattern"",""star"",""errorMessage"",""noAnimation"",""div"",""methodNames"",""unprefixed"",""prefixed"",""makeFunction"",""linear$1"",""attachHook"",""detachHook"",""detachHook$1"",""mathml"",""xlink"",""xml"",""xmlns"",""ns"",""createElementNS"",""cloneNode"",""Query"",""isComponentQuery"",""sortByItemPosition"",""sortByDocumentPosition"",""captureGroup"",""KeyModel"",""isKey"",""dependant"",""registerLink"",""unregisterLink"",""isKeypath"",""getChild"",""rebindChildren"",""hasProp"",""shuffleTasks"",""early"",""registerQueue"",""keyModels"",""unresolvedByKey"",""patternObservers"",""stage"",""specificKey"",""hasKey"",""existingMatches"",""loop"",""getKeyModel"",""skip"",""child$1"",""notifiedUpstream"",""Missing"",""shufle"",""attach"",""bind$$1"",""isDetached"",""markedAll"",""relinked"",""shuffling"",""validateCode"",""code"",""readNumberLiteral$1"",""readBooleanLiteral"",""token"",""readKeyValuePair"",""spread"",""refKey"",""pairs"",""readNumberLiteral"",""name$$1"",""lastDotIndex"",""startPos"",""relaxedNames"",""actual"",""lastIndexOf"",""refLength"",""strictRefinement"",""getConditional"",""ifTrue"",""ifFalse"",""isSpread"",""expressions"",""flattenExpression"",""getVars"",""vars"",""stringify"",""hasSpread"",""makeSpread"",""stringifyPair"",""out"",""extractRefs"",""stringified"",""splitEvent"",""readAttribute"",""nearest"",""readAttributeValue"",""valueStart"",""startDepth"",""readQuotedAttributeValue"",""readUnquotedAttributeValue"",""readUnquotedAttributeValueToken"",""text"",""tokens"",""quoteMark"",""readQuotedStringToken"",""readAttributeOrDirective"",""readArguments"",""readProxyEvent"",""quote"",""required"",""spreadArgs"",""exprs"",""inside"",""readMustacheOfType"",""inTag"",""tag"",""reader"",""readDelimiterChange"",""rewind"",""refineExpression"",""referenceExpression"",""getReferenceExpression"",""triple"",""readAliases"",""alias"",""readAlias"",""readExpressionOrReference"",""expectedFollowers"",""readClosing"",""closing"",""readElse"",""readElseIf"",""section"",""hasElse"",""block"",""unlessBlock"",""closed"",""expectedClose"",""aliasOnly"",""extra"",""endIndex"",""comment"",""removeLeadingWhitespace"",""removeTrailingWhitespace"",""previousItem"",""nextItem"",""preserveWhitespaceInsideFragment"",""removeLeadingWhitespaceInsideFragment"",""removeTrailingWhitespaceInsideFragment"",""isPreserveWhitespaceElement"",""readClosingTag"",""selfClosing"",""hasPartials"",""closingTag"",""lowerCaseName"",""canContain"",""closingTagName"",""readAnchorClose"",""disallowed"",""barrier"",""addTo"",""hasChildren"",""fromExpression"",""instructions"",""createFunction"",""body"",""createFunctionFromString"",""bindTo"",""fromComputationString"",""initial"",""parseAsString"",""validate$1"",""existingPartials"",""newPartials"",""overwrite"",""wrap$1"",""getSuperMethod"",""_parent"",""oldSuper"",""getMessage"",""deprecated"",""correct"",""isError"",""deprecateOption"",""deprecatedOption"",""deprecate"",""extendOtherMethods"",""member"",""orComponent"",""readStyle"",""rule"",""rules"",""readClass"",""updateMultipleSelectValue"",""updateSelectValue"",""updateStringValue"",""updateContentEditableValue"",""updateRadioValue"",""updateValue"",""updateRadioName"",""updateCheckboxName"",""updateStyleAttribute"",""updateInlineStyle"",""updateClassName"",""updateInlineClass"",""type$1"",""updateBoolean"",""updateNamespacedAttribute"",""updateAttribute"",""wasSelected"",""wasChecked"",""valueAttribute"",""prev"",""setProperty"",""className"",""removeAttributeNS"",""setAttributeNS"",""qualified"",""hasAttribute"",""needle"",""enumerable"",""mdl$1"",""getComputationSignature"",""getterString"",""setterString"",""initialiseProperties"",""getAdaptors"",""protoAdapt"",""lookup"",""builtins"",""srcs"",""magic$$1"",""_subs"",""_nsSubs"",""_eventQueue"",""_liveQueries"",""_liveComponentQueries"",""_children"",""byName"",""getPromise"",""cancel$1"",""meta"",""nameOption"",""renderItem"",""nextNode"",""contains"",""lastBound"",""q"",""updateAnchors"",""factory"",""exports"",""module"",""define"",""amd"",""noConflict"",""isFinite"",""format"",""registryName"",""interpol"",""enqueue"",""dequeue"",""variants"",""parts"",""_noArg"",""eventNames"",""fireEventAs"",""initialFire"",""notifySubscribers"",""fullName"",""subscribers"",""originalEvent"",""stopEvent"",""arrays"",""arrayLike"",""tm"",""notifiedTotal"",""manager"",""trans"",""collectAllOutros"",""_list"",""dispatch$1"",""which"",""ractive$1"",""sets"",""getOptions"",""easing$$1"",""animate$1"",""queries"",""remotes"",""remote"",""query$1"",""findAnchors"",""findAnchorsIn"",""anchors"",""idxs"",""unrenderChild"",""bubble$1"",""findNextNode$1"",""removeFromQuery$1"",""prepend"",""insertAt"",""@this.parent"",""@this.root"",""cmp"",""isParent"",""output"",""otherNode"",""compareDocumentPosition"",""bitmask"",""baseA"",""baseB"",""mutualAncestor"",""ancestryA"",""getAncestry"",""ancestryB"",""oldestA"",""oldestB"",""fragmentA"",""fragmentB"",""indexA"",""indexB"",""indexA$1"",""indexB$1"",""getParent"",""ancestry"",""ancestor"",""getQuery"",""upstream"",""last"",""findAlias"",""prefixKeypath"",""rootKeypath"",""rootDot"",""relativeKeypath"",""initialFragment"",""explicitContext"",""context$1"",""badReference"",""repeater"",""context$2"",""hasContextChain"",""crossedComponentBoundary"",""shouldWarn"",""model$2"",""spliceArguments"",""getSpliceEquivalent"",""balance"",""removeStart"",""removeEnd"",""getComparator"",""merge$2"",""compare"",""update$3"",""build$1"",""findModel"",""get$1$1"",""_element"",""resolve$1"",""add$2"",""animate$2"",""link$1"",""there"",""merge$1"",""raise"",""event$1"",""set$2"",""drop"",""unlink$1"",""update$2"",""isBound"",""getBindingModel"",""getBindingPath"",""getBinding"",""ctx"",""setBinding"",""fireInsertHook"",""observers"",""silent"",""caller"",""keypaths"",""createObserver"",""isSilenced"",""silence"",""resume"",""wildcardIndex"",""_proxy"",""callback$1"",""listener"",""styleDefinition"",""cssText"",""filteredStyleDefinitions"",""sources"",""trim$1"",""extractString"",""unit"",""transformSelector"",""selectorUnits"",""modifiers"",""transformed"",""appended"",""prepended"",""dataAttr"",""selectors"",""s4"",""floor"",""random"",""validate"",""childValue"",""parentIsFn"",""childIsFn"",""callDataFunction"",""fromProperties"",""primary"",""secondary"",""hasThis"",""functionBody"",""exp"",""opening"",""entity"",""parseInt""],""mappings"":""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""}"
732694148959cebeef217078a0097d8604e35216,1907993,"    ""# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n"","
1f0a71204c8a8870bc336bd9e1c5cd296c65bfaa,13349187,                 // http://stackoverflow.com/questions/13349187/strange-behaviour-when-trying-to-use-twitter-acaccount
c9b4922df2119a5dc19ad8fe3557f3fab1135ec5,3330919,        // http://stackoverflow.com/a/3330919)
2545c4b6ca31e94739170e09b9005e2c884ba4ef,41293077,# http://stackoverflow.com/questions/41293077/how-to-compile-tensorflow-with-sse4-2-and-avx-instructions
974062638c1b444307716935c40c3289757e28fe,14795484,    // src: http://stackoverflow.com/a/14795484/930450 (modified)
58cfd5fac18318f6ecf0280e06ee905859f793ea,28827013,// https://stackoverflow.com/a/28827013
47e2e896fca2c1bcedfd6d0062130f55c5cb7f1b,3330919,        // http://stackoverflow.com/a/3330919)
0b8f0b2f69cb82b90db138a97163c453f14e0f60,13974815,//see also http://stackoverflow.com/questions/13971491/captured-photo-automatically-rotated-during-upload-in-ios-6-0-or-iphone/13974815#13974815
ee17598aa320d6aec55dc3a3799f23f3a392c0ee,1351794,// Using https://stackoverflow.com/a/1351794/1861260
47fd28fb2bd8044c5aa23c562ccf4a5863c33845,7988297,# See: http://stackoverflow.com/questions/7988297/cmake-to-add-vs2010-project-custom-build-events
ced7554cb1748ef59c4128d1d06b46d3b475a989,10306690,	// http://stackoverflow.com/questions/10306690/domain-name-validation-with-regex
df26853cae93b4685d715c07b5e6db8ba3f4475a,9860911,	@note ObjectType trick from http://stackoverflow.com/a/9860911
f13c781f2b0a2d8a3b60e168d19b1d7185102bd9,4011728,"1840335,story,,,1,1,zeynel1,""Ask HN: Conditional statements with Python nested lists"",,""I asked this question at Stackoverflow but I was wondering if you can help.<p>http://stackoverflow.com/questions/4011728/conditional-statements-with-python-lists<p>I am trying to build a simple app in GAE that will take a string <i>s</i> from user and check if it is same as the previous string <i>s0</i>; if same, the string will appear in the same column; if not it will move to the next column.<p>Like this:<p><pre><code>    Hello world\n    Hello world\n    Hello world\n    \n    Hello world  Hello Universe\n    Hello world\n    Hello world\n\n    Hello world  Hello Universe\n    Hello world  Hello Universe\n    Hello world  Hello Universe\n                 Hello Universe\n                 Hello Universe\n\n    Hello world  Hello Universe Hello Cosmos\n    Hello world  Hello Universe\n    Hello world  Hello Universe\n                 Hello Universe\n                 Hello Universe\n\n</code></pre>\nI have been trying to do this with nested lists; I learned a lot about lists but I start to doubt that nested lists is not the right method. I appreciate it if you suggest better alternatives. Thanks."",1288211590"
73945352caa52b68c0f9dd077c43ca462ae860f1,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
f023990c38224c1bb708324c8f8aa371f72e9cfd,30757193,		// http://stackoverflow.com/questions/30757193/find-out-if-character-in-string-is-emoji
9f23a4b75fc6267f809525599e6546b4e43897f8,1842681,     * @link http://stackoverflow.com/questions/1842681/regular-expression-to-remove-one-parameter-from-query-string
106cdf671b4f5212efbbcfe593f82be42e5cfc19,31972968,`ruby from brew <http://stackoverflow.com/questions/31972968/cant-install-gems-on-os-x-el-capitan>`__:
1162e51fe46d74df729ae5170489e731032ab46b,3791442,"      ""description"":""Safari 5 & 6 seem to not provide geolocation data [when using a wired connection](http://stackoverflow.com/questions/3791442/geolocation-in-safari-5)."""
89489f98aaf531c6f4264fcf86258a309b07a18d,5623838,	            /* Hex to RGB conversion. Copyright Tim Down: http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb */
c65a60b14a12a22a7bcbad82849c9d22e80a8473,12017693,    // http://stackoverflow.com/questions/12017693/why-use-object-prototype-hasownproperty-callmyobj-prop-instead-of-myobj-hasow
022b71a1dbfd9b226eb23a45cff87089cfb6eeb2,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
5e4fcd77b0ce96d68bf416395d8847286b5e77bf,29289360,# https://stackoverflow.com/questions/29289360/tcl-check-for-same-content-between-two-files
d4940cb6370f339850d5bf13b6b47d3ee45146b6,37628,0;229;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;asked;0.2;0.006429277942631058;1.0;1.206429277942631;0.0;0
1f18c3291370fa38033c047063a92584b2a75960,23640287,// Range + limit pagination http://stackoverflow.com/a/23640287/4131237
f2f7eac7a4a7a86b400123f12fa09871c429adcb,10073699,	// http://stackoverflow.com/questions/10073699/pad-a-number-with-leading-zeros-in-javascript
f4222c0193d59305117a282f9febb1804900fd59,16591175,                        * @see http://stackoverflow.com/a/16591175/113195
4541574aeb0523c8ab8c620949a1a0d092ccead8,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
3777d8d38f977f6c5551c32af90d2ccd55edc89a,19562903,   http://stackoverflow.com/questions/19562903/remove-padding-from-columns-in-bootstrap-3 */
d019e7bce068d967ed1cec1b2e6487421051d91c,138600," *  credit: J. Turcot, T. Senechal, http://stackoverflow.com/questions/138600/initializing-a-static-stdmapint-int-in-c"
d7a34c2d796e8518b2e2ae2f8add127c1eee1e0f,4970111,  ;; FIXME: See if apply/&rest will work. http://stackoverflow.com/questions/4970111/what-does-rest-mean-in-elisp
b8561b4fb4e66eef538b21a0ffee46ce37eb8236,3330919,        // http://stackoverflow.com/a/3330919)
2ee92e9b5d5f4b7d8c21229301fb943978acd651,13835207,    Adapted from http://stackoverflow.com/questions/13835207/binding-to-cursor-movement-doesnt-change-insert-mark
d42484cbebe6687e6a3525f78868c031a926a475,25617556,       to be able to reference the test runner executable (http://stackoverflow.com/a/25617556). -->
6713290daa7e047958202cfd03b6e9cd68a558fa,13890563,		 *      (see this for further details: http://stackoverflow.com/a/13890563/1111544 )
29ed0aa9c779678b798bb5cc8e5d2c86f4456846,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
372e92092aa3cafdf20a8487794eb361964844a7,3969475,     *  1) http://stackoverflow.com/questions/3969475/javascript-pause-settimeout
da24cc440eaaaa2f8cababc9d17968f885cd5610,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
da17bb74b14fd9462f6cc33dd69aa78968c1ec06,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
a2b50d0ea0abd3c57990521815286147f2b60cf6,8349571,          // http://stackoverflow.com/questions/8349571 for discussion.
abbcf7e267cfc50b5f66ca5366132d633dcd0344,25377176,        // regex from http://stackoverflow.com/a/25377176/221217
942f762c1043d0e3ed91d923298cafab2820626f,2684561,                    //   (http://stackoverflow.com/a/2684561).
a8d367a5f2331bd7a8a8fe65e4e329de4c2e21bc,123999, // http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
d99cedc37e876781e90d93d5c6b873c6ae08a3ce,1793178,# from http://stackoverflow.com/a/1793178/735926
b863d3dcc67fe6c77ce65c391f0c61982d369392,8482588,    # https://stackoverflow.com/questions/8482588/putting-text-in-top-left-corner-of-matplotlib-plot
02546cdebee71bdbc1ba14a74d5a6bbb31ddab4a,3148441,	//   - http://stackoverflow.com/a/3148441/147079
4e51f6568093734db557dd8a04fbb1a407547de0,4656379,"- zeroconf/bonjour ( http://stackoverflow.com/questions/4656379/bonjour-implementation-on-android, http://developer.android.com/training/connect-devices-wirelessly/nsd.html#discover )"
fc72ab9ed84e7dec5e43a95130a75b3088a3f833,8955580,// Thank you: http://stackoverflow.com/a/8955580
1f49ca063d48f268dfb5f5a684770f1b7e0c8c82,1022560 1022683,"3163200,comment,3160712,3161202,2,0,ams6110,,,""I've dabbled in it.  It's neat.  In many ways a lot like Javascript but without some of the design errors (I'm sure some will argue that Lua has its own design errors).<p>For some more comparison I found this on SO: <a href=""""http://stackoverflow.com/questions/1022560/subtle-differences-between-javascript-and-lua/1022683#1022683"""" rel=""""nofollow"""">http://stackoverflow.com/questions/1022560/subtle-difference...</a>"",1319725561"
af229dbab80a8f1985ee0d57beaebe741411a9eb,49211241,Bibliography: https://stackoverflow.com/questions/49211241/is-there-a-way-to-automatically-detect-the-minimum-required-br2-target-rootfs-ex
47840b6527a3639c3f38295197e68440f90502f8,21777058,         * This test checks that this issue is resolved: http://stackoverflow.com/questions/21777058/loop-index-in-included-nunjucks-file
e4ffbd0bb71c978d1ede3b6353a0e7f5518497c8,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
fa1d454ca849cce269ad3f6ee2f490bc304d9f8b,31782673,  2. [configure pip](https://stackoverflow.com/questions/31782673/configuring-pip-to-work-from-behind-a-proxy)
c110ced0313416d1f4f3bfbdb59343cdbd1f97bb,2090717,http://stackoverflow.com/questions/2090717/getting-translation-strings-for-jinja2-templates-integrated-with-django-1-x
8aa41f0b39dc7e1fdc70bee21c6f0b1405fec134,3330919,        // http://stackoverflow.com/a/3330919)
28ae7dee1d99c776d3603a11315507b0feff03b2,9799676,http://stackoverflow.com/questions/9799676/what-do-the-gcc-assembly-output-labels-signify
ab874850ace8bf45a5fcb3c9897c9ed582b2b719,11685498,[automatic discovery](https://stackoverflow.com/questions/11685498/what-is-the-default-annotation-processors-discovery-process)
f62c615f31e407aafae83ae8c537fea755334466,619406,    # http://stackoverflow.com/a/619406/1079728
d65eab24625f1ae41e560dd094405d8f6ad49b59,3666929,   *   http://stackoverflow.com/questions/3666929/
b4d45b48079843ddda0a3307cd26bf86f7efd2d2,11735897,# Taken from: http://stackoverflow.com/a/11735897
a0d5dd89ebac011ee71df9122b8d47d33d9daccf,4869782,                        # Strip html tags (see http://stackoverflow.com/a/4869782).
4d3497214a746a30968ffe6f8ce5f1bfad4b222b,14760757,"    ""[Replacing some values with the mean of the rest of a group](https://stackoverflow.com/questions/14760757/replacing-values-with-groupby-means)"""
02842472916a7fcecaf604d854c15fbf54e6b926,37628,0;118;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;reflection;0.2;0.4050445103857567;0.1125;0.7175445103857567;0.0;0.0
b096fa453b476b88836aabfc7163b7032fef7e78,9827377,http://stackoverflow.com/questions/9827377/setting-matplotlib-mplconfigdir-consider-setting-mplconfigdir-to-a-writable-dir
8e8d1603de250f7e161d997c1c1c2080cbc61a65,2631001,	/* Copied from http://stackoverflow.com/questions/2631001/javascript-test-for-existence-of-nested-object-key */
5a990c00c1b2e067f91e7a5e641818ba794172d4,3485654,					// http://stackoverflow.com/a/3485654/989439
cad27b05e10509db6ed17fdbcf08f4344c23ffcb,23349191 12528049 32231579,"{""version"":3,""sources"":[""node_modules/core-js/modules/_global.js"",""node_modules/core-js/modules/_core.js"",""node_modules/core-js/modules/_is-object.js"",""node_modules/core-js/modules/_an-object.js"",""node_modules/core-js/modules/_fails.js"",""node_modules/core-js/modules/_descriptors.js"",""node_modules/core-js/modules/_dom-create.js"",""node_modules/core-js/modules/_ie8-dom-define.js"",""node_modules/core-js/modules/_to-primitive.js"",""node_modules/core-js/modules/_object-dp.js"",""node_modules/core-js/modules/_property-desc.js"",""node_modules/core-js/modules/_hide.js"",""node_modules/core-js/modules/_has.js"",""node_modules/core-js/modules/_uid.js"",""node_modules/core-js/modules/_redefine.js"",""node_modules/core-js/modules/_a-function.js"",""node_modules/core-js/modules/_ctx.js"",""node_modules/core-js/modules/_export.js"",""node_modules/core-js/modules/_typed.js"",""node_modules/core-js/modules/_redefine-all.js"",""node_modules/core-js/modules/_an-instance.js"",""node_modules/core-js/modules/_to-integer.js"",""node_modules/core-js/modules/_to-length.js"",""node_modules/core-js/modules/_to-index.js"",""node_modules/core-js/modules/_cof.js"",""node_modules/core-js/modules/_iobject.js"",""node_modules/core-js/modules/_defined.js"",""node_modules/core-js/modules/_to-iobject.js"",""node_modules/core-js/modules/_to-absolute-index.js"",""node_modules/core-js/modules/_array-includes.js"",""node_modules/core-js/modules/_shared.js"",""node_modules/core-js/modules/_shared-key.js"",""node_modules/core-js/modules/_object-keys-internal.js"",""node_modules/core-js/modules/_enum-bug-keys.js"",""node_modules/core-js/modules/_object-gopn.js"",""node_modules/core-js/modules/_to-object.js"",""node_modules/core-js/modules/_array-fill.js"",""node_modules/core-js/modules/_wks.js"",""node_modules/core-js/modules/_set-to-string-tag.js"",""node_modules/core-js/modules/_typed-buffer.js"",""node_modules/core-js/modules/_species-constructor.js"",""node_modules/core-js/modules/_set-species.js"",""node_modules/core-js/modules/es6.typed.array-buffer.js"",""node_modules/core-js/modules/_classof.js"",""node_modules/core-js/modules/_iterators.js"",""node_modules/core-js/modules/_is-array-iter.js"",""node_modules/core-js/modules/_object-keys.js"",""node_modules/core-js/modules/_object-dps.js"",""node_modules/core-js/modules/_html.js"",""node_modules/core-js/modules/_object-create.js"",""node_modules/core-js/modules/_object-gpo.js"",""node_modules/core-js/modules/core.get-iterator-method.js"",""node_modules/core-js/modules/_is-array.js"",""node_modules/core-js/modules/_array-species-constructor.js"",""node_modules/core-js/modules/_array-species-create.js"",""node_modules/core-js/modules/_array-methods.js"",""node_modules/core-js/modules/_add-to-unscopables.js"",""node_modules/core-js/modules/_iter-step.js"",""node_modules/core-js/modules/_iter-create.js"",""node_modules/core-js/modules/_iter-define.js"",""node_modules/core-js/modules/es6.array.iterator.js"",""node_modules/core-js/modules/_iter-detect.js"",""node_modules/core-js/modules/_array-copy-within.js"",""node_modules/core-js/modules/_object-pie.js"",""node_modules/core-js/modules/_object-gopd.js"",""node_modules/core-js/modules/_typed-array.js"",""node_modules/core-js/modules/es6.typed.int8-array.js"",""node_modules/core-js/modules/es6.typed.uint8-array.js"",""node_modules/core-js/modules/es6.typed.uint8-clamped-array.js"",""node_modules/core-js/modules/es6.typed.int16-array.js"",""node_modules/core-js/modules/es6.typed.uint16-array.js"",""node_modules/core-js/modules/es6.typed.int32-array.js"",""node_modules/core-js/modules/es6.typed.uint32-array.js"",""node_modules/core-js/modules/es6.typed.float32-array.js"",""node_modules/core-js/modules/es6.typed.float64-array.js"",""node_modules/core-js/modules/_iter-call.js"",""node_modules/core-js/modules/_for-of.js"",""node_modules/core-js/modules/_meta.js"",""node_modules/core-js/modules/_validate-collection.js"",""node_modules/core-js/modules/_collection-strong.js"",""node_modules/core-js/modules/_set-proto.js"",""node_modules/core-js/modules/_inherit-if-required.js"",""node_modules/core-js/modules/_collection.js"",""node_modules/core-js/modules/es6.map.js"",""node_modules/core-js/modules/es6.set.js"",""node_modules/core-js/modules/_object-gops.js"",""node_modules/core-js/modules/_object-assign.js"",""node_modules/core-js/modules/_collection-weak.js"",""node_modules/core-js/modules/es6.weak-map.js"",""node_modules/core-js/modules/es6.weak-set.js"",""node_modules/core-js/modules/es6.reflect.apply.js"",""node_modules/core-js/modules/_invoke.js"",""node_modules/core-js/modules/_bind.js"",""node_modules/core-js/modules/es6.reflect.construct.js"",""node_modules/core-js/modules/es6.reflect.define-property.js"",""node_modules/core-js/modules/es6.reflect.delete-property.js"",""node_modules/core-js/modules/es6.reflect.get.js"",""node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js"",""node_modules/core-js/modules/es6.reflect.get-prototype-of.js"",""node_modules/core-js/modules/es6.reflect.has.js"",""node_modules/core-js/modules/es6.reflect.is-extensible.js"",""node_modules/core-js/modules/_own-keys.js"",""node_modules/core-js/modules/es6.reflect.own-keys.js"",""node_modules/core-js/modules/es6.reflect.prevent-extensions.js"",""node_modules/core-js/modules/es6.reflect.set.js"",""node_modules/core-js/modules/es6.reflect.set-prototype-of.js"",""node_modules/core-js/modules/_task.js"",""node_modules/core-js/modules/_microtask.js"",""node_modules/core-js/modules/_new-promise-capability.js"",""node_modules/core-js/modules/es6.promise.js"",""node_modules/core-js/modules/_perform.js"",""node_modules/core-js/modules/_promise-resolve.js"",""node_modules/core-js/modules/_wks-ext.js"",""node_modules/core-js/modules/_wks-define.js"",""node_modules/core-js/modules/_object-gopn-ext.js"",""node_modules/core-js/modules/es6.symbol.js"",""node_modules/core-js/modules/_enum-keys.js"",""node_modules/core-js/modules/_object-sap.js"",""node_modules/core-js/modules/es6.object.freeze.js"",""node_modules/core-js/modules/es6.object.seal.js"",""node_modules/core-js/modules/es6.object.prevent-extensions.js"",""node_modules/core-js/modules/es6.object.is-frozen.js"",""node_modules/core-js/modules/es6.object.is-sealed.js"",""node_modules/core-js/modules/es6.object.is-extensible.js"",""node_modules/core-js/modules/es6.object.get-own-property-descriptor.js"",""node_modules/core-js/modules/es6.object.get-prototype-of.js"",""node_modules/core-js/modules/es6.object.keys.js"",""node_modules/core-js/modules/es6.object.get-own-property-names.js"",""node_modules/core-js/modules/es6.object.assign.js"",""node_modules/core-js/modules/_same-value.js"",""node_modules/core-js/modules/es6.object.is.js"",""node_modules/core-js/modules/es6.function.name.js"",""node_modules/core-js/modules/es6.string.raw.js"",""node_modules/core-js/modules/es6.string.from-code-point.js"",""node_modules/core-js/modules/_string-at.js"",""node_modules/core-js/modules/es6.string.code-point-at.js"",""node_modules/core-js/modules/_string-repeat.js"",""node_modules/core-js/modules/es6.string.repeat.js"",""node_modules/core-js/modules/_is-regexp.js"",""node_modules/core-js/modules/_string-context.js"",""node_modules/core-js/modules/_fails-is-regexp.js"",""node_modules/core-js/modules/es6.string.starts-with.js"",""node_modules/core-js/modules/es6.string.ends-with.js"",""node_modules/core-js/modules/es6.string.includes.js"",""node_modules/core-js/modules/es6.regexp.flags.js"",""node_modules/core-js/modules/_flags.js"",""node_modules/core-js/modules/_fix-re-wks.js"",""node_modules/core-js/modules/es6.regexp.match.js"",""node_modules/core-js/modules/es6.regexp.replace.js"",""node_modules/core-js/modules/es6.regexp.split.js"",""node_modules/core-js/modules/es6.regexp.search.js"",""node_modules/core-js/modules/_create-property.js"",""node_modules/core-js/modules/es6.array.from.js"",""node_modules/core-js/modules/es6.array.of.js"",""node_modules/core-js/modules/es6.array.copy-within.js"",""node_modules/core-js/modules/es6.array.find.js"",""node_modules/core-js/modules/es6.array.find-index.js"",""node_modules/core-js/modules/es6.array.fill.js"",""node_modules/core-js/modules/es6.number.is-finite.js"",""node_modules/core-js/modules/_is-integer.js"",""node_modules/core-js/modules/es6.number.is-integer.js"",""node_modules/core-js/modules/es6.number.is-safe-integer.js"",""node_modules/core-js/modules/es6.number.is-nan.js"",""node_modules/core-js/modules/es6.number.epsilon.js"",""node_modules/core-js/modules/es6.number.min-safe-integer.js"",""node_modules/core-js/modules/es6.number.max-safe-integer.js"",""node_modules/core-js/modules/_math-log1p.js"",""node_modules/core-js/modules/es6.math.acosh.js"",""node_modules/core-js/modules/es6.math.asinh.js"",""node_modules/core-js/modules/es6.math.atanh.js"",""node_modules/core-js/modules/_math-sign.js"",""node_modules/core-js/modules/es6.math.cbrt.js"",""node_modules/core-js/modules/es6.math.clz32.js"",""node_modules/core-js/modules/es6.math.cosh.js"",""node_modules/core-js/modules/_math-expm1.js"",""node_modules/core-js/modules/es6.math.expm1.js"",""node_modules/core-js/modules/_math-fround.js"",""node_modules/core-js/modules/es6.math.fround.js"",""node_modules/core-js/modules/es6.math.hypot.js"",""node_modules/core-js/modules/es6.math.imul.js"",""node_modules/core-js/modules/es6.math.log1p.js"",""node_modules/core-js/modules/es6.math.log10.js"",""node_modules/core-js/modules/es6.math.log2.js"",""node_modules/core-js/modules/es6.math.sign.js"",""node_modules/core-js/modules/es6.math.sinh.js"",""node_modules/core-js/modules/es6.math.tanh.js"",""node_modules/core-js/modules/es6.math.trunc.js"",""node_modules/core-js/modules/es7.array.includes.js"",""node_modules/core-js/modules/_object-to-array.js"",""node_modules/core-js/modules/es7.object.values.js"",""node_modules/core-js/modules/es7.object.entries.js"",""node_modules/core-js/modules/es7.object.get-own-property-descriptors.js"",""node_modules/core-js/modules/_string-pad.js"",""node_modules/core-js/modules/_user-agent.js"",""node_modules/core-js/modules/es7.string.pad-start.js"",""node_modules/core-js/modules/es7.string.pad-end.js"",""node_modules/core-js/modules/web.timers.js"",""node_modules/core-js/modules/web.immediate.js"",""node_modules/core-js/modules/web.dom.iterable.js"",""node_modules/regenerator-runtime/runtime.js"",""node_modules/custom-event-polyfill/custom-event-polyfill.js"",""src/js/types.js"",""src/js/support.js"",""src/js/defaults.js"",""src/js/utils.js"",""src/js/console.js"",""src/js/fullscreen.js"",""src/js/captions.js"",""src/js/ui.js"",""src/js/controls.js"",""src/js/listeners.js"",""src/js/storage.js"",""src/js/plugins/ads.js"",""src/js/plugins/youtube.js"",""src/js/plugins/vimeo.js"",""src/js/media.js"",""src/js/source.js"",""src/js/plyr.js""],""names"":[""global"",""module"",""exports"",""window"",""Math"",""self"",""Function"",""__g"",""core"",""version"",""__e"",""_isObject"",""it"",""_anObject"",""isObject"",""TypeError"",""_fails"",""exec"",""e"",""_descriptors"",""require$$0"",""Object"",""defineProperty"",""get"",""a"",""document"",""is"",""createElement"",""_domCreate"",""_ie8DomDefine"",""require$$1"",""require$$2"",""_toPrimitive"",""S"",""fn"",""val"",""toString"",""call"",""valueOf"",""dP"",""O"",""P"",""Attributes"",""anObject"",""toPrimitive"",""IE8_DOM_DEFINE"",""value"",""_propertyDesc"",""bitmap"",""enumerable"",""configurable"",""writable"",""_hide"",""object"",""key"",""f"",""createDesc"",""hasOwnProperty"",""_has"",""id"",""px"",""random"",""_uid"",""concat"",""undefined"",""SRC"",""$toString"",""TPL"",""split"",""inspectSource"",""safe"",""isFunction"",""has"",""hide"",""join"",""String"",""prototype"",""this"",""_aFunction"",""_ctx"",""that"",""length"",""aFunction"",""b"",""c"",""apply"",""arguments"",""$export"",""type"",""name"",""source"",""own"",""out"",""exp"",""IS_FORCED"",""F"",""IS_GLOBAL"",""G"",""IS_STATIC"",""IS_PROTO"",""IS_BIND"",""B"",""target"",""expProto"",""ctx"",""redefine"",""U"",""W"",""R"",""Typed"",""_export"",""TYPED"",""uid"",""VIEW"",""ABV"",""ArrayBuffer"",""DataView"",""CONSTR"",""i"",""TypedArrayConstructors"",""_typed"",""_redefineAll"",""src"",""_anInstance"",""Constructor"",""forbiddenField"",""ceil"",""floor"",""_toInteger"",""isNaN"",""min"",""_toLength"",""toInteger"",""_toIndex"",""number"",""toLength"",""RangeError"",""_cof"",""slice"",""_iobject"",""propertyIsEnumerable"",""cof"",""_defined"",""_toIobject"",""IObject"",""defined"",""max"",""_toAbsoluteIndex"",""index"",""_arrayIncludes"",""IS_INCLUDES"",""$this"",""el"",""fromIndex"",""toIObject"",""toAbsoluteIndex"",""store"",""_shared"",""shared"",""_sharedKey"",""arrayIndexOf"",""IE_PROTO"",""_objectKeysInternal"",""names"",""result"",""push"",""_enumBugKeys"",""hiddenKeys"",""getOwnPropertyNames"",""$keys"",""_toObject"",""_arrayFill"",""toObject"",""aLen"",""end"",""endPos"",""Symbol"",""USE_SYMBOL"",""def"",""TAG"",""_setToStringTag"",""tag"",""stat"",""gOPN"",""PROTOTYPE"",""WRONG_INDEX"",""$ArrayBuffer"",""$DataView"",""Infinity"",""BaseBuffer"",""abs"",""pow"",""log"",""LN2"",""$BUFFER"",""DESCRIPTORS"",""$LENGTH"",""$OFFSET"",""packIEEE754"",""mLen"",""nBytes"",""m"",""buffer"",""Array"",""eLen"",""eMax"",""eBias"",""rt"",""s"",""unpackIEEE754"",""nBits"",""NaN"",""unpackI32"",""bytes"",""packI8"",""packI16"",""packI32"",""packF64"",""packF32"",""addGetter"",""C"",""internal"",""view"",""isLittleEndian"",""intIndex"",""toIndex"",""_b"",""start"",""pack"",""reverse"",""set"",""conversion"",""$typed"",""fails"",""ArrayBufferProto"",""anInstance"",""keys"",""j"",""constructor"",""$setInt8"",""setInt8"",""getInt8"",""redefineAll"",""byteOffset"",""setUint8"",""byteLength"",""arrayFill"",""bufferLength"",""offset"",""getUint8"",""getInt16"",""getUint16"",""getInt32"",""getUint32"",""getFloat32"",""getFloat64"",""setInt16"",""setUint16"",""setInt32"",""setUint32"",""setFloat32"",""setFloat64"",""setToStringTag"",""SPECIES"",""_speciesConstructor"",""D"",""_setSpecies"",""KEY"",""$isView"",""isView"",""$slice"",""len"",""first"",""final"",""speciesConstructor"",""viewS"",""viewT"",""ARG"",""_classof"",""T"",""tryGet"",""callee"",""_iterators"",""ITERATOR"",""ArrayProto"",""_isArrayIter"",""Iterators"",""_objectKeys"",""enumBugKeys"",""_objectDps"",""defineProperties"",""Properties"",""getKeys"",""_html"",""documentElement"",""Empty"",""createDict"",""iframeDocument"",""iframe"",""style"",""display"",""appendChild"",""contentWindow"",""open"",""write"",""lt"",""close"",""_objectCreate"",""create"",""dPs"",""ObjectProto"",""_objectGpo"",""getPrototypeOf"",""core_getIteratorMethod"",""getIteratorMethod"",""classof"",""_isArray"",""isArray"",""arg"",""_arraySpeciesCreate"",""original"",""_arrayMethods"",""TYPE"",""$create"",""IS_MAP"",""IS_FILTER"",""IS_SOME"",""IS_EVERY"",""IS_FIND_INDEX"",""NO_HOLES"",""asc"",""callbackfn"",""res"",""UNSCOPABLES"",""_addToUnscopables"",""_iterStep"",""done"",""IteratorPrototype"",""_iterCreate"",""NAME"",""next"",""descriptor"",""BUGGY"",""returnThis"",""_iterDefine"",""Base"",""DEFAULT"",""IS_SET"",""FORCED"",""$iterCreate"",""methods"",""getMethod"",""kind"",""proto"",""DEF_VALUES"",""VALUES_BUG"",""$native"",""$default"",""$entries"",""$anyNative"",""entries"",""values"",""es6_array_iterator"",""iterated"",""_t"",""_i"",""_k"",""step"",""Arguments"",""addToUnscopables"",""SAFE_CLOSING"",""_iterDetect"",""skipClosing"",""arr"",""iter"",""_arrayCopyWithin"",""copyWithin"",""to"",""from"",""count"",""inc"",""gOPD"",""getOwnPropertyDescriptor"",""pIE"",""require$$3"",""require$$4"",""require$$5"",""$buffer"",""require$$6"",""require$$7"",""require$$8"",""propertyDesc"",""require$$9"",""require$$10"",""require$$11"",""require$$12"",""require$$13"",""require$$14"",""require$$15"",""require$$16"",""require$$17"",""require$$18"",""require$$19"",""require$$20"",""isArrayIter"",""require$$21"",""require$$22"",""require$$23"",""require$$24"",""getIterFn"",""require$$25"",""require$$26"",""wks"",""require$$27"",""createArrayMethod"",""require$$28"",""createArrayIncludes"",""require$$29"",""require$$30"",""ArrayIterators"",""require$$31"",""require$$32"",""$iterDetect"",""require$$33"",""setSpecies"",""require$$34"",""require$$35"",""arrayCopyWithin"",""require$$36"",""$DP"",""require$$37"",""$GOPD"",""require$$38"",""Uint8Array"",""arrayForEach"",""arrayFilter"",""arraySome"",""arrayEvery"",""arrayFind"",""arrayFindIndex"",""arrayIncludes"",""arrayValues"",""arrayKeys"",""arrayEntries"",""arrayLastIndexOf"",""lastIndexOf"",""arrayReduce"",""reduce"",""arrayReduceRight"",""reduceRight"",""arrayJoin"",""arraySort"",""sort"",""arraySlice"",""arrayToString"",""arrayToLocaleString"",""toLocaleString"",""TYPED_CONSTRUCTOR"",""DEF_CONSTRUCTOR"",""ALL_CONSTRUCTORS"",""TYPED_ARRAY"",""$map"",""allocate"",""LITTLE_ENDIAN"",""Uint16Array"",""FORCED_SET"",""toOffset"",""BYTES"",""validate"",""speciesFromList"",""list"",""fromList"",""_d"",""$from"",""iterator"",""mapfn"",""mapping"",""iterFn"",""$of"",""TO_LOCALE_BUG"",""$toLocaleString"",""every"",""fill"",""filter"",""find"",""predicate"",""findIndex"",""forEach"",""indexOf"",""searchElement"",""includes"",""separator"",""map"",""middle"",""some"",""comparefn"",""subarray"",""begin"",""$begin"",""BYTES_PER_ELEMENT"",""$set"",""arrayLike"",""$iterators"",""isTAIndex"",""$getDesc"",""$setDesc"",""desc"",""$TypedArrayPrototype$"",""wrapper"",""CLAMPED"",""GETTER"",""SETTER"",""TypedArray"",""TAC"",""TypedArrayPrototype"",""addElement"",""data"",""v"",""o"",""getter"",""round"",""setter"",""$offset"",""$length"",""klass"",""$len"",""l"",""$nativeIterator"",""CORRECT_ITER_NAME"",""$iterator"",""of"",""init"",""_iterCall"",""ret"",""BREAK"",""RETURN"",""iterable"",""META"",""setDesc"",""isExtensible"",""FREEZE"",""preventExtensions"",""setMeta"",""w"",""meta"",""NEED"",""fastKey"",""getWeak"",""onFreeze"",""_validateCollection"",""SIZE"",""getEntry"",""entry"",""_f"",""n"",""k"",""_collectionStrong"",""getConstructor"",""ADDER"",""_l"",""forOf"",""clear"",""r"",""p"",""delete"",""prev"",""setStrong"",""$iterDefine"",""check"",""_setProto"",""setPrototypeOf"",""test"",""buggy"",""__proto__"",""_collection"",""common"",""IS_WEAK"",""fixMethod"",""instance"",""HASNT_CHAINING"",""THROWS_ON_PRIMITIVES"",""ACCEPT_ITERABLES"",""BUGGY_ZERO"",""$instance"",""inheritIfRequired"",""strong"",""add"",""getOwnPropertySymbols"",""$assign"",""assign"",""_objectAssign"",""A"",""K"",""getSymbols"",""gOPS"",""isEnum"",""uncaughtFrozenStore"",""UncaughtFrozenStore"",""findUncaughtFrozen"",""splice"",""_collectionWeak"",""$has"",""ufstore"",""InternalMap"",""each"",""weak"",""tmp"",""$WeakMap"",""freeze"",""method"",""rApply"",""Reflect"",""fApply"",""thisArgument"",""argumentsList"",""L"",""_invoke"",""args"",""un"",""factories"",""_bind"",""bind"",""partArgs"",""bound"",""construct"",""invoke"",""rConstruct"",""NEW_TARGET_BUG"",""ARGS_BUG"",""Target"",""newTarget"",""$args"",""propertyKey"",""attributes"",""deleteProperty"",""receiver"",""getProto"",""$isExtensible"",""_ownKeys"",""ownKeys"",""$preventExtensions"",""V"",""existingDescriptor"",""ownDesc"",""setProto"",""defer"",""channel"",""port"",""process"",""setTask"",""setImmediate"",""clearTask"",""clearImmediate"",""MessageChannel"",""Dispatch"",""counter"",""queue"",""run"",""listener"",""event"",""nextTick"",""now"",""port2"",""port1"",""onmessage"",""postMessage"",""addEventListener"",""importScripts"",""cel"",""html"",""removeChild"",""setTimeout"",""_task"",""macrotask"",""Observer"",""MutationObserver"",""WebKitMutationObserver"",""Promise"",""isNode"",""Internal"",""newGenericPromiseCapability"",""OwnPromiseCapability"",""Wrapper"",""resolve"",""reject"",""promise"",""$$resolve"",""$$reject"",""_perform"",""task"",""microtask"",""head"",""last"",""notify"",""flush"",""parent"",""domain"",""exit"",""enter"",""navigator"",""standalone"",""then"",""toggle"",""node"",""createTextNode"",""observe"",""characterData"",""$Promise"",""empty"",""newPromiseCapability"",""newPromiseCapabilityModule"",""USE_NATIVE"",""FakePromise"",""PromiseRejectionEvent"",""isThenable"",""isReject"",""_n"",""chain"",""_c"",""_v"",""ok"",""_s"",""reaction"",""handler"",""fail"",""_h"",""onHandleUnhandled"",""onUnhandled"",""console"",""unhandled"",""isUnhandled"",""perform"",""emit"",""onunhandledrejection"",""reason"",""error"",""_a"",""onrejectionhandled"",""$reject"",""_w"",""$resolve"",""executor"",""err"",""onFulfilled"",""onRejected"",""catch"",""capability"",""x"",""promiseCapability"",""promiseResolve"",""all"",""remaining"",""$index"",""alreadyCalled"",""race"",""_wksDefine"",""$Symbol"",""charAt"",""wksExt"",""windowNames"",""getWindowNames"",""gOPNExt"",""$JSON"",""JSON"",""_stringify"",""stringify"",""HIDDEN"",""TO_PRIMITIVE"",""SymbolRegistry"",""AllSymbols"",""OPSymbols"",""QObject"",""findChild"",""setSymbolDesc"",""$fails"",""_create"",""protoDesc"",""wrap"",""sym"",""isSymbol"",""$defineProperty"",""$defineProperties"",""symbols"",""enumKeys"",""$propertyIsEnumerable"",""E"",""$getOwnPropertyDescriptor"",""$getOwnPropertyNames"",""$getOwnPropertySymbols"",""IS_OP"",""es6Symbols"",""wellKnownSymbols"",""wksDefine"",""for"",""keyFor"",""useSetter"",""useSimple"",""replacer"",""$replacer"",""_objectSap"",""$freeze"",""$seal"",""$isFrozen"",""$isSealed"",""$getPrototypeOf"",""_sameValue"",""y"",""FProto"",""nameRE"",""match"",""raw"",""callSite"",""tpl"",""fromCharCode"",""$fromCodePoint"",""fromCodePoint"",""code"",""TO_STRING"",""$at"",""pos"",""charCodeAt"",""codePointAt"",""_stringRepeat"",""str"",""repeat"",""MATCH"",""_isRegexp"",""isRegExp"",""_stringContext"",""searchString"",""_failsIsRegexp"",""re"",""$startsWith"",""startsWith"",""context"",""search"",""$endsWith"",""endsWith"",""endPosition"",""flags"",""RegExp"",""ignoreCase"",""multiline"",""unicode"",""sticky"",""_fixReWks"",""SYMBOL"",""fns"",""strfn"",""rxfn"",""string"",""$match"",""regexp"",""REPLACE"",""$replace"",""searchValue"",""replaceValue"",""SPLIT"",""$split"",""_split"",""$push"",""NPCG"",""limit"",""separator2"",""lastIndex"",""lastLength"",""output"",""lastLastIndex"",""splitLimit"",""separatorCopy"",""replace"",""SEARCH"",""$search"",""_createProperty"",""createProperty"",""$find"",""forced"",""_isFinite"",""isFinite"",""_isInteger"",""isInteger"",""isSafeInteger"",""EPSILON"",""MIN_SAFE_INTEGER"",""MAX_SAFE_INTEGER"",""_mathLog1p"",""log1p"",""sqrt"",""$acosh"",""acosh"",""Number"",""MAX_VALUE"",""$asinh"",""asinh"",""$atanh"",""atanh"",""_mathSign"",""sign"",""cbrt"",""clz32"",""LOG2E"",""cosh"",""$expm1"",""expm1"",""_mathExpm1"",""EPSILON32"",""MAX32"",""MIN32"",""_mathFround"",""fround"",""$abs"",""$sign"",""hypot"",""value1"",""value2"",""div"",""sum"",""larg"",""$imul"",""imul"",""xn"",""yn"",""xl"",""yl"",""log10"",""LOG10E"",""log2"",""sinh"",""tanh"",""trunc"",""$includes"",""_objectToArray"",""isEntries"",""$values"",""getOwnPropertyDescriptors"",""getDesc"",""_stringPad"",""maxLength"",""fillString"",""left"",""stringLength"",""fillStr"",""intMaxLength"",""fillLen"",""stringFiller"",""_userAgent"",""userAgent"",""padStart"",""$pad"",""padEnd"",""MSIE"",""time"",""boundArgs"",""setInterval"",""$task"",""TO_STRING_TAG"",""ArrayValues"",""DOMIterables"",""CSSRuleList"",""CSSStyleDeclaration"",""CSSValueList"",""ClientRectList"",""DOMRectList"",""DOMStringList"",""DOMTokenList"",""DataTransferItemList"",""FileList"",""HTMLAllCollection"",""HTMLCollection"",""HTMLFormElement"",""HTMLSelectElement"",""MediaList"",""MimeTypeArray"",""NamedNodeMap"",""NodeList"",""PaintRequestList"",""Plugin"",""PluginArray"",""SVGLengthList"",""SVGNumberList"",""SVGPathSegList"",""SVGPointList"",""SVGStringList"",""SVGTransformList"",""SourceBufferList"",""StyleSheetList"",""TextTrackCueList"",""TextTrackList"",""TouchList"",""collections"",""explicit"",""Collection"",""Op"",""hasOwn"",""iteratorSymbol"",""asyncIteratorSymbol"",""asyncIterator"",""toStringTagSymbol"",""toStringTag"",""runtime"",""regeneratorRuntime"",""GenStateSuspendedStart"",""GenStateSuspendedYield"",""GenStateExecuting"",""GenStateCompleted"",""ContinueSentinel"",""NativeIteratorPrototype"",""Gp"",""GeneratorFunctionPrototype"",""Generator"",""GeneratorFunction"",""displayName"",""isGeneratorFunction"",""genFun"",""ctor"",""mark"",""awrap"",""__await"",""defineIteratorMethods"",""AsyncIterator"",""async"",""innerFn"",""outerFn"",""tryLocsList"",""pop"",""Context"",""reset"",""skipTempReset"",""sent"",""_sent"",""delegate"",""tryEntries"",""resetTryEntry"",""stop"",""rootRecord"",""completion"",""rval"",""dispatchException"",""exception"",""handle"",""loc"",""caught"",""record"",""tryLoc"",""hasCatch"",""hasFinally"",""catchLoc"",""finallyLoc"",""Error"",""abrupt"",""finallyEntry"",""complete"",""afterLoc"",""finish"",""thrown"",""delegateYield"",""resultName"",""nextLoc"",""protoGenerator"",""generator"",""state"",""doneResult"",""delegateResult"",""maybeInvokeDelegate"",""tryCatch"",""makeInvokeMethod"",""obj"",""unwrapped"",""previousPromise"",""callInvokeWithMethodAndArg"",""return"",""info"",""pushTryEntry"",""locs"",""iteratorMethod"",""ce"",""CustomEvent"",""preventDefault"",""defaultPrevented"",""params"",""evt"",""origPrevent"",""bubbles"",""cancelable"",""detail"",""createEvent"",""initCustomEvent"",""Event"",""range"",""providers"",""types"",""defaults"",""language"",""utils"",""input"",""instanceof"",""Plyr"",""Boolean"",""nullOrUndefined"",""WeakMap"",""Element"",""Text"",""TextTrackCue"",""VTTCue"",""TextTrack"",""array"",""nodeList"",""documentMode"",""platform"",""url"",""responseType"",""request"",""XMLHttpRequest"",""parse"",""responseText"",""response"",""statusText"",""send"",""current"",""querySelector"",""callbacks"",""element"",""errors"",""cb"",""getElementsByTagName"",""parentNode"",""insertBefore"",""hasId"",""querySelectorAll"",""container"",""toggleHidden"",""setAttribute"",""support"",""storage"",""cached"",""localStorage"",""getItem"",""content"",""fetch"",""setItem"",""updateSprite"",""innerHTML"",""body"",""childNodes"",""prefix"",""top"",""elements"",""targets"",""child"",""cloneNode"",""sibling"",""nextSibling"",""text"",""setAttributes"",""textContent"",""removeElement"",""lastChild"",""newChild"",""oldChild"",""replaceChild"",""sel"",""existingAttributes"",""existing"",""selector"",""trim"",""className"",""parts"",""class"",""contains"",""classList"",""removeAttribute"",""matches"",""webkitMatchesSelector"",""mozMatchesSelector"",""msMatchesSelector"",""controls"",""getElement"",""config"",""selectors"",""buttons"",""getElements"",""play"",""pause"",""restart"",""rewind"",""forward"",""mute"",""pip"",""airplay"",""settings"",""captions"",""fullscreen"",""progress"",""inputs"",""seek"",""volume"",""duration"",""currentTime"",""seekTooltip"",""classNames"",""tooltip"",""debug"",""warn"",""toggleNativeControls"",""focused"",""activeElement"",""focusable"",""trap"",""keyCode"",""getFocusElement"",""shiftKey"",""focus"",""on"",""off"",""callback"",""passive"",""capture"",""function"",""Node"",""toggleListener"",""events"",""options"",""boolean"",""passiveListeners"",""plyr"",""dispatchEvent"",""toggleState"",""pressed"",""getAttribute"",""toFixed"",""parseInt"",""displayHours"",""inverted"",""formatTime"",""format"",""hours"",""getHours"",""mins"",""getMinutes"",""secs"",""getSeconds"",""sources"",""_len"",""_key"",""shift"",""defineProperty$1"",""extend"",""toConsumableArray"",""youtube"",""vimeo"",""$2"",""parser"",""href"",""parseUrl"",""hash"",""_hash$split2"",""decodeURIComponent"",""encodeURIComponent"",""fragment"",""createDocumentFragment"",""firstChild"",""innerText"",""width"",""height"",""ratio"",""getRatio"",""h"",""offsetHeight"",""provider"",""inline"",""api"",""ui"",""browser"",""getBrowser"",""playsInline"",""isIPhone"",""video"",""rangeInput"",""audio"",""webkitSetPresentationMode"",""WebKitPlaybackTargetAvailabilityEvent"",""media"",""isHTML5"",""canPlayType"",""isVideo"",""isAudio"",""supported"",""transitionEndEvent"",""matchMedia"",""noop"",""Console"",""enabled"",""onChange"",""button"",""player"",""active"",""isIos"",""trapFocus"",""toggleFallback"",""scrollPosition"",""scrollX"",""scrollY"",""scrollTo"",""overflow"",""toggleClass"",""fallback"",""Fullscreen"",""_this"",""stopPropagation"",""update"",""native"",""iosNative"",""playing"",""webkitEnterFullscreen"",""requestFullScreen"",""webkitExitFullscreen"",""cancelFullScreen"",""inFrame"",""fullscreenElement"",""hasClass"",""fullscreenEnabled"",""webkitFullscreenEnabled"",""mozFullScreenEnabled"",""msFullscreenEnabled"",""pre"",""msExitFullscreen"",""stored"",""toLowerCase"",""isYouTube"",""textTracks"",""setCaptionsMenu"",""getAttributesFromSelector"",""insertAfter"",""getTracks"",""tracks"",""isIE"",""URL"",""track"",""hostname"",""location"",""protocol"",""blob"",""createObjectURL"",""setLanguage"",""show"",""setCue"",""mode"",""currentTrack"",""getCurrentTrack"",""activeCues"",""isVimeo"",""embed"",""enableTextTrack"",""_this2"",""cue"",""setText"",""getCueAsHTML"",""emptyElement"",""caption"",""uiSupported"",""listeners"",""inject"",""setup"",""muted"",""speed"",""loop"",""quality"",""timeUpdate"",""checkPlaying"",""ready"",""setTitle"",""label"",""i18n"",""title"",""isEmbed"",""frameTitle"",""stopped"",""paused"",""toggleControls"",""loading"",""timers"",""failed"",""networkState"",""_this3"",""setRange"",""updateRangeFill"",""nodeValue"",""getPercentage"",""setProgress"",""buffered"",""invert"",""invertTime"",""updateTimeDisplay"",""seeking"",""updateProgress"",""hasDuration"",""displayDuration"",""updateSeekTooltip"",""isWebkit"",""setProperty"",""iconUrl"",""svg4everybody"",""getIconUrl"",""iconPath"",""absolute"",""iconPrefix"",""icon"",""createElementNS"",""use"",""path"",""setAttributeNS"",""attr"",""hidden"",""badge"",""menu"",""buttonType"",""labelPressed"",""iconPressed"",""control"",""createIcon"",""createLabel"",""suffix"",""played"",""checked"",""item"",""radio"",""faux"",""aria-hidden"",""insertAdjacentHTML"",""tooltips"",""percent"",""clientRect"",""getBoundingClientRect"",""visible"",""pageX"",""parseFloat"",""setting"",""tab"",""tabs"",""pane"",""panes"",""toggleTab"",""createMenuItem"",""getLabel"",""createBadge"",""getBadge"",""updateSetting"",""getLanguage"",""default"",""none"",""disabled"",""hasTracks"",""toUpperCase"",""unshift"",""form"",""isMenuItem"",""isButton"",""clone"",""position"",""opacity"",""scrollWidth"",""scrollHeight"",""getElementById"",""transitions"",""reducedMotion"",""size"",""getTabSize"",""restore"",""propertyName"",""createButton"",""createRange"",""createProgress"",""createTime"",""inner"",""home"",""_this4"",""back"",""setSpeedMenu"",""loadSprite"",""seekTime"",""findElements"",""repaint"",""labels"",""_this5"",""Listeners"",""lastKey"",""handleKey"",""toggleMenu"",""which"",""altKey"",""ctrlKey"",""metaKey"",""editable"",""togglePlay"",""increaseVolume"",""decreaseVolume"",""toggleCaptions"",""keyboard"",""tabFocus"",""hideControls"",""durationUpdate"",""hasAudio"",""showPosterOnEnd"",""load"",""updateVolume"",""checkLoading"",""clickToPlay"",""touch"",""ended"",""disableContextMenu"",""inputEvent"",""proxy"",""handlerKey"",""defaultHandler"",""customHandler"",""showTab"",""toggleInvert"",""hover"",""webkitDirectionInvertedFromDevice"",""direction"",""deltaY"",""deltaX"",""Storage"",""json"",""removeItem"",""Ads"",""publisherId"",""ads"",""initialized"",""manager"",""loader"",""cuePoints"",""safetyTimer"",""countdownTimer"",""managerPromise"",""google"",""ima"",""loadScript"",""urls"",""googleIMA"",""trigger"",""startSafetyTimer"",""clearSafetyTimer"",""setupIMA"",""setVpaidMode"",""ImaSdkSettings"",""VpaidMode"",""ENABLED"",""setLocale"",""displayContainer"",""AdDisplayContainer"",""requestAds"",""AdsLoader"",""AdsManagerLoadedEvent"",""Type"",""ADS_MANAGER_LOADED"",""onAdsManagerLoaded"",""AdErrorEvent"",""AD_ERROR"",""onAdError"",""AdsRequest"",""adTagUrl"",""tagUrl"",""linearAdSlotWidth"",""offsetWidth"",""linearAdSlotHeight"",""nonLinearAdSlotWidth"",""nonLinearAdSlotHeight"",""forceNonLinearFullSlot"",""getRemainingTime"",""advertisement"",""AdsRenderingSettings"",""restoreCustomPlaybackStateOnAdBreakComplete"",""enablePreloading"",""getAdsManager"",""getCuePoints"",""cuePoint"",""_this6"",""seekElement"",""cuePercentage"",""cues"",""setVolume"",""AdEvent"",""onAdEvent"",""ad"",""getAd"",""_this7"",""LOADED"",""pollCountdown"",""isLinear"",""ALL_ADS_COMPLETED"",""loadAds"",""CONTENT_PAUSE_REQUESTED"",""pauseContent"",""CONTENT_RESUME_REQUESTED"",""resumeContent"",""STARTED"",""MIDPOINT"",""COMPLETE"",""IMPRESSION"",""CLICK"",""cancel"",""contentComplete"",""_this8"",""seekedTime"",""discardAdBreak"",""resize"",""ViewMode"",""NORMAL"",""initialize"",""_this9"",""adError"",""zIndex"",""_this10"",""destroy"",""handlers"",""_this11"",""Date"",""base"",""buildUrlParams"",""setAspectRatio"",""YT"",""Player"",""onYouTubeReadyCallbacks"",""onYouTubeIframeAPIReady"",""videoId"",""getVideoData"",""items"",""snippet"",""paddingBottom"",""currentId"",""parseYouTubeId"",""generateId"",""replaceElement"",""autoplay"",""message"",""getPlaybackQuality"",""playbackRate"",""getPlaybackRate"",""getTitle"",""playVideo"",""pauseVideo"",""stopVideo"",""getDuration"",""getCurrentTime"",""seekTo"",""setPlaybackRate"",""setPlaybackQuality"",""getVideoUrl"",""getAvailablePlaybackRates"",""buffering"",""getVideoLoadedFraction"",""lastBuffered"",""build"",""setQualityMenu"",""getAvailableQualityLevels"",""Vimeo"",""padding"",""transform"",""parseVimeoId"",""setCurrentTime"",""selected"",""setLoop"",""currentSrc"",""getVideoWidth"",""getVideoHeight"",""dimensions"",""getAspectRatio"",""setAutopause"",""autopause"",""getVideoTitle"",""getTextTracks"",""stripHTML"",""seconds"",""isTouch"",""blankVideo"",""insertElement"",""attribute"",""cancelRequests"",""html5"",""crossorigin"",""poster"",""addStyleHook"",""insertElements"",""jQuery"",""tagName"",""getProviderByUrl"",""getUrlParams"",""truthy"",""playsinline"",""hasAttribute"",""webkitShowPlaybackTargetPicker"",""delay"",""isEnterFullscreen"",""noTransition"",""soft"",""unload"",""mime"",""readyState"",""targetTime"",""fauxDuration"",""realDuration"",""mozHasAudio"",""webkitAudioDecodedByteCount"",""audioTracks"",""change"",""states"",""webkitPresentationMode""],""mappings"":""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QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEhkC,OAAOwrB,UAAUyY,SAAShgC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,cACI,qxDCnXfigC,aAEE,SACKC,UACMz/B,KAAK0/B,WAAWD,EAAOnkC,OAAOqkC,cAFzC,SAIOF,UACIz/B,KAAKge,eAAeyhB,KA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"",""file"":""plyr.polyfilled.min.js"",""sourcesContent"":[""// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n"",""var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n"",""module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n"",""var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n"",""module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n"",""// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n"",""var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n"",""module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n"",""// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n"",""var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n"",""module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n"",""var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n"",""var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n"",""var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n"",""var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n"",""module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n"",""// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n"",""var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n"",""var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n  if (Typed = global[TypedArrayConstructors[i++]]) {\n    hide(Typed.prototype, TYPED, true);\n    hide(Typed.prototype, VIEW, true);\n  } else CONSTR = false;\n}\n\nmodule.exports = {\n  ABV: ABV,\n  CONSTR: CONSTR,\n  TYPED: TYPED,\n  VIEW: VIEW\n};\n"",""var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n"",""module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n"",""// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n"",""// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n"",""// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toInteger(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length!');\n  return length;\n};\n"",""var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n"",""// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n"",""// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n"",""// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n"",""var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n"",""// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n"",""var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n  return store[key] || (store[key] = {});\n};\n"",""var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n"",""var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n"",""// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n"",""// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n"",""// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n"",""// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = toLength(O.length);\n  var aLen = arguments.length;\n  var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n  var end = aLen > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n"",""var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n"",""var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n"",""'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n  var buffer = new Array(nBytes);\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var i = 0;\n  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n  var e, m, c;\n  value = abs(value);\n  // eslint-disable-next-line no-self-compare\n  if (value != value || value === Infinity) {\n    // eslint-disable-next-line no-self-compare\n    m = value != value ? 1 : 0;\n    e = eMax;\n  } else {\n    e = floor(log(value) / LN2);\n    if (value * (c = pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * pow(2, eBias - 1) * pow(2, mLen);\n      e = 0;\n    }\n  }\n  for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n  e = e << mLen | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n  buffer[--i] |= s * 128;\n  return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = eLen - 7;\n  var i = nBytes - 1;\n  var s = buffer[i--];\n  var e = s & 127;\n  var m;\n  s >>= 7;\n  for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n  for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : s ? -Infinity : Infinity;\n  } else {\n    m = m + pow(2, mLen);\n    e = e - eBias;\n  } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n  return [it & 0xff];\n}\nfunction packI16(it) {\n  return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n  return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n  return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n  dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n  var numIndex = +index;\n  var intIndex = toIndex(numIndex);\n  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b;\n  var start = intIndex + view[$OFFSET];\n  var pack = store.slice(start, start + bytes);\n  return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n  var numIndex = +index;\n  var intIndex = toIndex(numIndex);\n  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b;\n  var start = intIndex + view[$OFFSET];\n  var pack = conversion(+value);\n  for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n    var byteLength = toIndex(length);\n    this._b = arrayFill.call(new Array(byteLength), 0);\n    this[$LENGTH] = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = buffer[$LENGTH];\n    var offset = toInteger(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    this[$BUFFER] = buffer;\n    this[$OFFSET] = offset;\n    this[$LENGTH] = byteLength;\n  };\n\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n    addGetter($DataView, BUFFER, '_b');\n    addGetter($DataView, BYTE_LENGTH, '_l');\n    addGetter($DataView, BYTE_OFFSET, '_o');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackI32(get(this, 4, byteOffset, arguments[1]));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packF32, value, arguments[2]);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packF64, value, arguments[2]);\n    }\n  });\n} else {\n  if (!fails(function () {\n    $ArrayBuffer(1);\n  }) || !fails(function () {\n    new $ArrayBuffer(-1); // eslint-disable-line no-new\n  }) || fails(function () {\n    new $ArrayBuffer(); // eslint-disable-line no-new\n    new $ArrayBuffer(1.5); // eslint-disable-line no-new\n    new $ArrayBuffer(NaN); // eslint-disable-line no-new\n    return $ArrayBuffer.name != ARRAY_BUFFER;\n  })) {\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, $ArrayBuffer);\n      return new BaseBuffer(toIndex(length));\n    };\n    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n    for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n    }\n    if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n  }\n  // iOS Safari 7.x bug\n  var view = new $DataView(new $ArrayBuffer(2));\n  var $setInt8 = $DataView[PROTOTYPE].setInt8;\n  view.setInt8(0, 2147483648);\n  view.setInt8(1, 2147483649);\n  if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n    setInt8: function setInt8(byteOffset, value) {\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n"",""// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n"",""'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n"",""'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n  // 24.1.3.1 ArrayBuffer.isView(arg)\n  isView: function isView(it) {\n    return $isView && $isView(it) || isObject(it) && VIEW in it;\n  }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n  slice: function slice(start, end) {\n    if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n    var len = anObject(this).byteLength;\n    var first = toAbsoluteIndex(start, len);\n    var final = toAbsoluteIndex(end === undefined ? len : end, len);\n    var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n    var viewS = new $DataView(this);\n    var viewT = new $DataView(result);\n    var index = 0;\n    while (first < final) {\n      viewT.setUint8(index++, viewS.getUint8(first++));\n    } return result;\n  }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n"",""// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n"",""module.exports = {};\n"",""// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n"",""// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n"",""var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n"",""var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n"",""// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n"",""// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n"",""var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n"",""// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n"",""var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n"",""// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n"",""// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n"",""// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n"",""module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n"",""'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n"",""'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n"",""'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n"",""var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n"",""// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = toLength(O.length);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n"",""exports.f = {}.propertyIsEnumerable;\n"",""var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n"",""'use strict';\nif (require('./_descriptors')) {\n  var LIBRARY = require('./_library');\n  var global = require('./_global');\n  var fails = require('./_fails');\n  var $export = require('./_export');\n  var $typed = require('./_typed');\n  var $buffer = require('./_typed-buffer');\n  var ctx = require('./_ctx');\n  var anInstance = require('./_an-instance');\n  var propertyDesc = require('./_property-desc');\n  var hide = require('./_hide');\n  var redefineAll = require('./_redefine-all');\n  var toInteger = require('./_to-integer');\n  var toLength = require('./_to-length');\n  var toIndex = require('./_to-index');\n  var toAbsoluteIndex = require('./_to-absolute-index');\n  var toPrimitive = require('./_to-primitive');\n  var has = require('./_has');\n  var classof = require('./_classof');\n  var isObject = require('./_is-object');\n  var toObject = require('./_to-object');\n  var isArrayIter = require('./_is-array-iter');\n  var create = require('./_object-create');\n  var getPrototypeOf = require('./_object-gpo');\n  var gOPN = require('./_object-gopn').f;\n  var getIterFn = require('./core.get-iterator-method');\n  var uid = require('./_uid');\n  var wks = require('./_wks');\n  var createArrayMethod = require('./_array-methods');\n  var createArrayIncludes = require('./_array-includes');\n  var speciesConstructor = require('./_species-constructor');\n  var ArrayIterators = require('./es6.array.iterator');\n  var Iterators = require('./_iterators');\n  var $iterDetect = require('./_iter-detect');\n  var setSpecies = require('./_set-species');\n  var arrayFill = require('./_array-fill');\n  var arrayCopyWithin = require('./_array-copy-within');\n  var $DP = require('./_object-dp');\n  var $GOPD = require('./_object-gopd');\n  var dP = $DP.f;\n  var gOPD = $GOPD.f;\n  var RangeError = global.RangeError;\n  var TypeError = global.TypeError;\n  var Uint8Array = global.Uint8Array;\n  var ARRAY_BUFFER = 'ArrayBuffer';\n  var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n  var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n  var PROTOTYPE = 'prototype';\n  var ArrayProto = Array[PROTOTYPE];\n  var $ArrayBuffer = $buffer.ArrayBuffer;\n  var $DataView = $buffer.DataView;\n  var arrayForEach = createArrayMethod(0);\n  var arrayFilter = createArrayMethod(2);\n  var arraySome = createArrayMethod(3);\n  var arrayEvery = createArrayMethod(4);\n  var arrayFind = createArrayMethod(5);\n  var arrayFindIndex = createArrayMethod(6);\n  var arrayIncludes = createArrayIncludes(true);\n  var arrayIndexOf = createArrayIncludes(false);\n  var arrayValues = ArrayIterators.values;\n  var arrayKeys = ArrayIterators.keys;\n  var arrayEntries = ArrayIterators.entries;\n  var arrayLastIndexOf = ArrayProto.lastIndexOf;\n  var arrayReduce = ArrayProto.reduce;\n  var arrayReduceRight = ArrayProto.reduceRight;\n  var arrayJoin = ArrayProto.join;\n  var arraySort = ArrayProto.sort;\n  var arraySlice = ArrayProto.slice;\n  var arrayToString = ArrayProto.toString;\n  var arrayToLocaleString = ArrayProto.toLocaleString;\n  var ITERATOR = wks('iterator');\n  var TAG = wks('toStringTag');\n  var TYPED_CONSTRUCTOR = uid('typed_constructor');\n  var DEF_CONSTRUCTOR = uid('def_constructor');\n  var ALL_CONSTRUCTORS = $typed.CONSTR;\n  var TYPED_ARRAY = $typed.TYPED;\n  var VIEW = $typed.VIEW;\n  var WRONG_LENGTH = 'Wrong length!';\n\n  var $map = createArrayMethod(1, function (O, length) {\n    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n  });\n\n  var LITTLE_ENDIAN = fails(function () {\n    // eslint-disable-next-line no-undef\n    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n  });\n\n  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n    new Uint8Array(1).set({});\n  });\n\n  var toOffset = function (it, BYTES) {\n    var offset = toInteger(it);\n    if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n    return offset;\n  };\n\n  var validate = function (it) {\n    if (isObject(it) && TYPED_ARRAY in it) return it;\n    throw TypeError(it + ' is not a typed array!');\n  };\n\n  var allocate = function (C, length) {\n    if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n      throw TypeError('It is not a typed array constructor!');\n    } return new C(length);\n  };\n\n  var speciesFromList = function (O, list) {\n    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n  };\n\n  var fromList = function (C, list) {\n    var index = 0;\n    var length = list.length;\n    var result = allocate(C, length);\n    while (length > index) result[index] = list[index++];\n    return result;\n  };\n\n  var addGetter = function (it, key, internal) {\n    dP(it, key, { get: function () { return this._d[internal]; } });\n  };\n\n  var $from = function from(source /* , mapfn, thisArg */) {\n    var O = toObject(source);\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var iterFn = getIterFn(O);\n    var i, length, values, result, step, iterator;\n    if (iterFn != undefined && !isArrayIter(iterFn)) {\n      for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n        values.push(step.value);\n      } O = values;\n    }\n    if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n    for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n      result[i] = mapping ? mapfn(O[i], i) : O[i];\n    }\n    return result;\n  };\n\n  var $of = function of(/* ...items */) {\n    var index = 0;\n    var length = arguments.length;\n    var result = allocate(this, length);\n    while (length > index) result[index] = arguments[index++];\n    return result;\n  };\n\n  // iOS Safari 6.x fails here\n  var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n  var $toLocaleString = function toLocaleString() {\n    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n  };\n\n  var proto = {\n    copyWithin: function copyWithin(target, start /* , end */) {\n      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    every: function every(callbackfn /* , thisArg */) {\n      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n      return arrayFill.apply(validate(this), arguments);\n    },\n    filter: function filter(callbackfn /* , thisArg */) {\n      return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n        arguments.length > 1 ? arguments[1] : undefined));\n    },\n    find: function find(predicate /* , thisArg */) {\n      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    findIndex: function findIndex(predicate /* , thisArg */) {\n      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    forEach: function forEach(callbackfn /* , thisArg */) {\n      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    indexOf: function indexOf(searchElement /* , fromIndex */) {\n      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    includes: function includes(searchElement /* , fromIndex */) {\n      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    join: function join(separator) { // eslint-disable-line no-unused-vars\n      return arrayJoin.apply(validate(this), arguments);\n    },\n    lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n      return arrayLastIndexOf.apply(validate(this), arguments);\n    },\n    map: function map(mapfn /* , thisArg */) {\n      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n      return arrayReduce.apply(validate(this), arguments);\n    },\n    reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n      return arrayReduceRight.apply(validate(this), arguments);\n    },\n    reverse: function reverse() {\n      var that = this;\n      var length = validate(that).length;\n      var middle = Math.floor(length / 2);\n      var index = 0;\n      var value;\n      while (index < middle) {\n        value = that[index];\n        that[index++] = that[--length];\n        that[length] = value;\n      } return that;\n    },\n    some: function some(callbackfn /* , thisArg */) {\n      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    sort: function sort(comparefn) {\n      return arraySort.call(validate(this), comparefn);\n    },\n    subarray: function subarray(begin, end) {\n      var O = validate(this);\n      var length = O.length;\n      var $begin = toAbsoluteIndex(begin, length);\n      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n        O.buffer,\n        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n        toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n      );\n    }\n  };\n\n  var $slice = function slice(start, end) {\n    return speciesFromList(this, arraySlice.call(validate(this), start, end));\n  };\n\n  var $set = function set(arrayLike /* , offset */) {\n    validate(this);\n    var offset = toOffset(arguments[1], 1);\n    var length = this.length;\n    var src = toObject(arrayLike);\n    var len = toLength(src.length);\n    var index = 0;\n    if (len + offset > length) throw RangeError(WRONG_LENGTH);\n    while (index < len) this[offset + index] = src[index++];\n  };\n\n  var $iterators = {\n    entries: function entries() {\n      return arrayEntries.call(validate(this));\n    },\n    keys: function keys() {\n      return arrayKeys.call(validate(this));\n    },\n    values: function values() {\n      return arrayValues.call(validate(this));\n    }\n  };\n\n  var isTAIndex = function (target, key) {\n    return isObject(target)\n      && target[TYPED_ARRAY]\n      && typeof key != 'symbol'\n      && key in target\n      && String(+key) == String(key);\n  };\n  var $getDesc = function getOwnPropertyDescriptor(target, key) {\n    return isTAIndex(target, key = toPrimitive(key, true))\n      ? propertyDesc(2, target[key])\n      : gOPD(target, key);\n  };\n  var $setDesc = function defineProperty(target, key, desc) {\n    if (isTAIndex(target, key = toPrimitive(key, true))\n      && isObject(desc)\n      && has(desc, 'value')\n      && !has(desc, 'get')\n      && !has(desc, 'set')\n      // TODO: add validation descriptor w/o calling accessors\n      && !desc.configurable\n      && (!has(desc, 'writable') || desc.writable)\n      && (!has(desc, 'enumerable') || desc.enumerable)\n    ) {\n      target[key] = desc.value;\n      return target;\n    } return dP(target, key, desc);\n  };\n\n  if (!ALL_CONSTRUCTORS) {\n    $GOPD.f = $getDesc;\n    $DP.f = $setDesc;\n  }\n\n  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n    getOwnPropertyDescriptor: $getDesc,\n    defineProperty: $setDesc\n  });\n\n  if (fails(function () { arrayToString.call({}); })) {\n    arrayToString = arrayToLocaleString = function toString() {\n      return arrayJoin.call(this);\n    };\n  }\n\n  var $TypedArrayPrototype$ = redefineAll({}, proto);\n  redefineAll($TypedArrayPrototype$, $iterators);\n  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n  redefineAll($TypedArrayPrototype$, {\n    slice: $slice,\n    set: $set,\n    constructor: function () { /* noop */ },\n    toString: arrayToString,\n    toLocaleString: $toLocaleString\n  });\n  addGetter($TypedArrayPrototype$, 'buffer', 'b');\n  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n  addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n  addGetter($TypedArrayPrototype$, 'length', 'e');\n  dP($TypedArrayPrototype$, TAG, {\n    get: function () { return this[TYPED_ARRAY]; }\n  });\n\n  // eslint-disable-next-line max-statements\n  module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n    CLAMPED = !!CLAMPED;\n    var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + KEY;\n    var SETTER = 'set' + KEY;\n    var TypedArray = global[NAME];\n    var Base = TypedArray || {};\n    var TAC = TypedArray && getPrototypeOf(TypedArray);\n    var FORCED = !TypedArray || !$typed.ABV;\n    var O = {};\n    var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n    var getter = function (that, index) {\n      var data = that._d;\n      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n    };\n    var setter = function (that, index, value) {\n      var data = that._d;\n      if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n    };\n    var addElement = function (that, index) {\n      dP(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n    if (FORCED) {\n      TypedArray = wrapper(function (that, data, $offset, $length) {\n        anInstance(that, TypedArray, NAME, '_d');\n        var index = 0;\n        var offset = 0;\n        var buffer, byteLength, length, klass;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new $ArrayBuffer(byteLength);\n        } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n          buffer = data;\n          offset = toOffset($offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - offset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (TYPED_ARRAY in data) {\n          return fromList(TypedArray, data);\n        } else {\n          return $from.call(TypedArray, data);\n        }\n        hide(that, '_d', {\n          b: buffer,\n          o: offset,\n          l: byteLength,\n          e: length,\n          v: new $DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n      hide(TypedArrayPrototype, 'constructor', TypedArray);\n    } else if (!fails(function () {\n      TypedArray(1);\n    }) || !fails(function () {\n      new TypedArray(-1); // eslint-disable-line no-new\n    }) || !$iterDetect(function (iter) {\n      new TypedArray(); // eslint-disable-line no-new\n      new TypedArray(null); // eslint-disable-line no-new\n      new TypedArray(1.5); // eslint-disable-line no-new\n      new TypedArray(iter); // eslint-disable-line no-new\n    }, true)) {\n      TypedArray = wrapper(function (that, data, $offset, $length) {\n        anInstance(that, TypedArray, NAME);\n        var klass;\n        // `ws` module bug, temporarily remove validation length for Uint8Array\n        // https://github.com/websockets/ws/pull/645\n        if (!isObject(data)) return new Base(toIndex(data));\n        if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n          return $length !== undefined\n            ? new Base(data, toOffset($offset, BYTES), $length)\n            : $offset !== undefined\n              ? new Base(data, toOffset($offset, BYTES))\n              : new Base(data);\n        }\n        if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n        return $from.call(TypedArray, data);\n      });\n      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n        if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n      });\n      TypedArray[PROTOTYPE] = TypedArrayPrototype;\n      if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n    }\n    var $nativeIterator = TypedArrayPrototype[ITERATOR];\n    var CORRECT_ITER_NAME = !!$nativeIterator\n      && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n    var $iterator = $iterators.values;\n    hide(TypedArray, TYPED_CONSTRUCTOR, true);\n    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n    hide(TypedArrayPrototype, VIEW, true);\n    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n    if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n      dP(TypedArrayPrototype, TAG, {\n        get: function () { return NAME; }\n      });\n    }\n\n    O[NAME] = TypedArray;\n\n    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n    $export($export.S, NAME, {\n      BYTES_PER_ELEMENT: BYTES\n    });\n\n    $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n      from: $from,\n      of: $of\n    });\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n    $export($export.P, NAME, proto);\n\n    setSpecies(NAME);\n\n    $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n    if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n    $export($export.P + $export.F * fails(function () {\n      new TypedArray(1).slice();\n    }), NAME, { slice: $slice });\n\n    $export($export.P + $export.F * (fails(function () {\n      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n    }) || !fails(function () {\n      TypedArrayPrototype.toLocaleString.call([1, 2]);\n    })), NAME, { toLocaleString: $toLocaleString });\n\n    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n    if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n  };\n} else module.exports = function () { /* empty */ };\n"",""require('./_typed-array')('Int8', 1, function (init) {\n  return function Int8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n"",""require('./_typed-array')('Uint8', 1, function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n"",""require('./_typed-array')('Uint8', 1, function (init) {\n  return function Uint8ClampedArray(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n}, true);\n"",""require('./_typed-array')('Int16', 2, function (init) {\n  return function Int16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n"",""require('./_typed-array')('Uint16', 2, function (init) {\n  return function Uint16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n"",""require('./_typed-array')('Int32', 4, function (init) {\n  return function Int32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n"",""require('./_typed-array')('Uint32', 4, function (init) {\n  return function Uint32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n"",""require('./_typed-array')('Float32', 4, function (init) {\n  return function Float32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n"",""require('./_typed-array')('Float64', 8, function (init) {\n  return function Float64Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n"",""// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n"",""var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n"",""var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n"",""var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n"",""'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n"",""// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \"": can't set as prototype!\"");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n"",""var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n"",""'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n"",""'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key) {\n    var entry = strong.getEntry(validate(this, MAP), key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value) {\n    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n  }\n}, strong, true);\n"",""'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value) {\n    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n  }\n}, strong);\n"",""exports.f = Object.getOwnPropertySymbols;\n"",""'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n"",""'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n  return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n  this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n  return arrayFind(store.a, function (it) {\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = arrayFindIndex(this.a, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;      // collection type\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var data = getWeak(anObject(key), true);\n    if (data === true) uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n"",""'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n  return function WeakMap() {\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key) {\n    if (isObject(key)) {\n      var data = getWeak(key);\n      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value) {\n    return weak.def(validate(this, WEAK_MAP), key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function (key) {\n    var proto = $WeakMap.prototype;\n    var method = proto[key];\n    redefine(proto, key, function (a, b) {\n      // store frozen objects on internal weakmap shim\n      if (isObject(a) && !isExtensible(a)) {\n        if (!this._f) this._f = new InternalMap();\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}\n"",""'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n  return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value) {\n    return weak.def(validate(this, WEAK_SET), value, true);\n  }\n}, weak, false, true);\n"",""// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n  rApply(function () { /* empty */ });\n}), 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList) {\n    var T = aFunction(target);\n    var L = anObject(argumentsList);\n    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n  }\n});\n"",""// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n"",""'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n  if (!(len in factories)) {\n    for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n    // eslint-disable-next-line no-new-func\n    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n  } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n  var fn = aFunction(this);\n  var partArgs = arraySlice.call(arguments, 1);\n  var bound = function (/* args... */) {\n    var args = partArgs.concat(arraySlice.call(arguments));\n    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n  };\n  if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n  return bound;\n};\n"",""// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n  function F() { /* empty */ }\n  return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n  rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n  construct: function construct(Target, args /* , newTarget */) {\n    aFunction(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n    if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n    if (Target == newTarget) {\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch (args.length) {\n        case 0: return new Target();\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      $args.push.apply($args, args);\n      return new (bind.apply(Target, $args))();\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto = newTarget.prototype;\n    var instance = create(isObject(proto) ? proto : Object.prototype);\n    var result = Function.apply.call(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n"",""// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n  // eslint-disable-next-line no-undef\n  Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n  defineProperty: function defineProperty(target, propertyKey, attributes) {\n    anObject(target);\n    propertyKey = toPrimitive(propertyKey, true);\n    anObject(attributes);\n    try {\n      dP.f(target, propertyKey, attributes);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n"",""// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  deleteProperty: function deleteProperty(target, propertyKey) {\n    var desc = gOPD(anObject(target), propertyKey);\n    return desc && !desc.configurable ? false : delete target[propertyKey];\n  }\n});\n"",""// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n  var receiver = arguments.length < 3 ? target : arguments[2];\n  var desc, proto;\n  if (anObject(target) === receiver) return target[propertyKey];\n  if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n    ? desc.value\n    : desc.get !== undefined\n      ? desc.get.call(receiver)\n      : undefined;\n  if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n"",""// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n    return gOPD.f(anObject(target), propertyKey);\n  }\n});\n"",""// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getPrototypeOf: function getPrototypeOf(target) {\n    return getProto(anObject(target));\n  }\n});\n"",""// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n  has: function has(target, propertyKey) {\n    return propertyKey in target;\n  }\n});\n"",""// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n  isExtensible: function isExtensible(target) {\n    anObject(target);\n    return $isExtensible ? $isExtensible(target) : true;\n  }\n});\n"",""// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n  var keys = gOPN.f(anObject(it));\n  var getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n"",""// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n"",""// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n  preventExtensions: function preventExtensions(target) {\n    anObject(target);\n    try {\n      if ($preventExtensions) $preventExtensions(target);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n"",""// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n  var receiver = arguments.length < 4 ? target : arguments[3];\n  var ownDesc = gOPD.f(anObject(target), propertyKey);\n  var existingDescriptor, proto;\n  if (!ownDesc) {\n    if (isObject(proto = getPrototypeOf(target))) {\n      return set(proto, propertyKey, V, receiver);\n    }\n    ownDesc = createDesc(0);\n  }\n  if (has(ownDesc, 'value')) {\n    if (ownDesc.writable === false || !isObject(receiver)) return false;\n    existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n    existingDescriptor.value = V;\n    dP.f(receiver, propertyKey, existingDescriptor);\n    return true;\n  }\n  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n"",""// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n  setPrototypeOf: function setPrototypeOf(target, proto) {\n    setProto.check(target, proto);\n    try {\n      setProto.set(target, proto);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n"",""var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n"",""var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    var promise = Promise.resolve();\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n"",""'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n"",""'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value);\n            if (domain) domain.exit();\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\""Promise can't be resolved itself\"");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n"",""module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n"",""var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n"",""exports.f = require('./_wks');\n"",""var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n"",""// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n"",""'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n"",""// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n"",""// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n"",""// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n  return function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});\n"",""// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n  return function seal(it) {\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});\n"",""// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n  return function preventExtensions(it) {\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});\n"",""// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n  return function isFrozen(it) {\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});\n"",""// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n  return function isSealed(it) {\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});\n"",""// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n  return function isExtensible(it) {\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});\n"",""// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n  return function getOwnPropertyDescriptor(it, key) {\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});\n"",""// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n"",""// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n"",""// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n  return require('./_object-gopn-ext').f;\n});\n"",""// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n"",""// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n"",""// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n"",""var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n"",""var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite) {\n    var tpl = toIObject(callSite.raw);\n    var len = toLength(tpl.length);\n    var aLen = arguments.length;\n    var res = [];\n    var i = 0;\n    while (len > i) {\n      res.push(String(tpl[i++]));\n      if (i < aLen) res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});\n"",""var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n    var res = [];\n    var aLen = arguments.length;\n    var i = 0;\n    var code;\n    while (aLen > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});\n"",""var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n"",""'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos) {\n    return $at(this, pos);\n  }\n});\n"",""'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n  var str = String(defined(this));\n  var res = '';\n  var n = toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError(\""Count can't be negative\"");\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n  return res;\n};\n"",""var $export = require('./_export');\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: require('./_string-repeat')\n});\n"",""// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n"",""// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \"" doesn't accept regex!\"");\n  return String(defined(that));\n};\n"",""var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n"",""// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n"",""// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = context(this, searchString, ENDS_WITH);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = toLength(that.length);\n    var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n    var search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n"",""// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n"",""// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});\n"",""'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n"",""'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n  var fns = exec(defined, SYMBOL, ''[KEY]);\n  var strfn = fns[0];\n  var rxfn = fns[1];\n  if (fails(function () {\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  })) {\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n"",""// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});\n"",""// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue) {\n    'use strict';\n    var O = defined(this);\n    var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});\n"",""// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n  'use strict';\n  var isRegExp = require('./_is-regexp');\n  var _split = $split;\n  var $push = [].push;\n  var $SPLIT = 'split';\n  var LENGTH = 'length';\n  var LAST_INDEX = 'lastIndex';\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while (match = separatorCopy.exec(string)) {\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          // eslint-disable-next-line no-loop-func\n          if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n            for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n          });\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    $split = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit) {\n    var O = defined(this);\n    var fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});\n"",""// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});\n"",""'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n"",""'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n"",""'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n  function F() { /* empty */ }\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */) {\n    var index = 0;\n    var aLen = arguments.length;\n    var result = new (typeof this == 'function' ? this : Array)(aLen);\n    while (aLen > index) createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});\n"",""// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n"",""'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n"",""'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n"",""// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n"",""// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it) {\n    return typeof it == 'number' && _isFinite(it);\n  }\n});\n"",""// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n"",""// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n"",""// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number) {\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});\n"",""// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n"",""// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n"",""// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n"",""// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n"",""// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n"",""// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n  && Math.floor($acosh(Number.MAX_VALUE)) == 710\n  // Tor Browser bug: Math.acosh(Infinity) -> NaN\n  && $acosh(Infinity) == Infinity\n), 'Math', {\n  acosh: function acosh(x) {\n    return (x = +x) < 1 ? NaN : x > 94906265.62425156\n      ? Math.log(x) + Math.LN2\n      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n  }\n});\n"",""// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n"",""// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n  atanh: function atanh(x) {\n    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n  }\n});\n"",""// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n  // eslint-disable-next-line no-self-compare\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n"",""// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n  cbrt: function cbrt(x) {\n    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n  }\n});\n"",""// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  clz32: function clz32(x) {\n    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n  }\n});\n"",""// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n  cosh: function cosh(x) {\n    return (exp(x = +x) + exp(-x)) / 2;\n  }\n});\n"",""// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n  // Old FF bug\n  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n  // Tor Browser bug\n  || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n"",""// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n"",""// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n  return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n  var $abs = Math.abs(x);\n  var $sign = sign(x);\n  var a, result;\n  if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n  a = (1 + EPSILON32 / EPSILON) * $abs;\n  result = a - (a - $abs);\n  // eslint-disable-next-line no-self-compare\n  if (result > MAX32 || result != result) return $sign * Infinity;\n  return $sign * result;\n};\n"",""// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n"",""// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n  hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n    var sum = 0;\n    var i = 0;\n    var aLen = arguments.length;\n    var larg = 0;\n    var arg, div;\n    while (i < aLen) {\n      arg = abs(arguments[i++]);\n      if (larg < arg) {\n        div = larg / arg;\n        sum = sum * div * div + 1;\n        larg = arg;\n      } else if (arg > 0) {\n        div = arg / larg;\n        sum += div * div;\n      } else sum += arg;\n    }\n    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n  }\n});\n"",""// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n  imul: function imul(x, y) {\n    var UINT16 = 0xffff;\n    var xn = +x;\n    var yn = +y;\n    var xl = UINT16 & xn;\n    var yl = UINT16 & yn;\n    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n  }\n});\n"",""// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n"",""// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log10: function log10(x) {\n    return Math.log(x) * Math.LOG10E;\n  }\n});\n"",""// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log2: function log2(x) {\n    return Math.log(x) / Math.LN2;\n  }\n});\n"",""// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n"",""// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n  return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n  sinh: function sinh(x) {\n    return Math.abs(x = +x) < 1\n      ? (expm1(x) - expm1(-x)) / 2\n      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n  }\n});\n"",""// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n  tanh: function tanh(x) {\n    var a = expm1(x = +x);\n    var b = expm1(-x);\n    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n  }\n});\n"",""// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  trunc: function trunc(it) {\n    return (it > 0 ? Math.floor : Math.ceil)(it);\n  }\n});\n"",""'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n"",""var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) if (isEnum.call(O, key = keys[i++])) {\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n"",""// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n"",""// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it) {\n    return $entries(it);\n  }\n});\n"",""// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIObject(object);\n    var getDesc = gOPD.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var i = 0;\n    var key, desc;\n    while (keys.length > i) {\n      desc = getDesc(O, key = keys[i++]);\n      if (desc !== undefined) createProperty(result, key, desc);\n    }\n    return result;\n  }\n});\n"",""// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n  var S = String(defined(that));\n  var stringLength = S.length;\n  var fillStr = fillString === undefined ? ' ' : String(fillString);\n  var intMaxLength = toLength(maxLength);\n  if (intMaxLength <= stringLength || fillStr == '') return S;\n  var fillLen = intMaxLength - stringLength;\n  var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n  return left ? stringFiller + S : S + stringFiller;\n};\n"",""var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n"",""'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n  }\n});\n"",""'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n  }\n});\n"",""// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n  return function (fn, time /* , ...args */) {\n    var boundArgs = arguments.length > 2;\n    var args = boundArgs ? slice.call(arguments, 2) : false;\n    return set(boundArgs ? function () {\n      // eslint-disable-next-line no-new-func\n      (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n    } : fn, time);\n  };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n  setTimeout: wrap(global.setTimeout),\n  setInterval: wrap(global.setInterval)\n});\n"",""var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n  setImmediate: $task.set,\n  clearImmediate: $task.clear\n});\n"",""var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n"",""/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \""use strict\"";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \""function\"" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \""@@iterator\"";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \""@@asyncIterator\"";\n  var toStringTagSymbol = $Symbol.toStringTag || \""@@toStringTag\"";\n\n  var inModule = typeof module === \""object\"";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \""normal\"", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \""throw\"", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \""suspendedStart\"";\n  var GenStateSuspendedYield = \""suspendedYield\"";\n  var GenStateExecuting = \""executing\"";\n  var GenStateCompleted = \""completed\"";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunctionPrototype[toStringTagSymbol] =\n    GeneratorFunction.displayName = \""GeneratorFunction\"";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\""next\"", \""throw\"", \""return\""].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \""function\"" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \""GeneratorFunction\""\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      if (!(toStringTagSymbol in genFun)) {\n        genFun[toStringTagSymbol] = \""GeneratorFunction\"";\n      }\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \""__await\"")` to determine if the yielded value is\n  // meant to be awaited.\n  runtime.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \""throw\"") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \""object\"" &&\n            hasOwn.call(value, \""__await\"")) {\n          return Promise.resolve(value.__await).then(function(value) {\n            invoke(\""next\"", value, resolve, reject);\n          }, function(err) {\n            invoke(\""throw\"", err, resolve, reject);\n          });\n        }\n\n        return Promise.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration. If the Promise is rejected, however, the\n          // result for this iteration will be rejected with the same\n          // reason. Note that rejections of yielded Promises are not\n          // thrown back into the generator function, as is the case\n          // when an awaited Promise is rejected. This difference in\n          // behavior between yield and await is important, because it\n          // allows the consumer to decide what to do with the yielded\n          // rejection (swallow it and continue, manually .throw it back\n          // into the generator, abandon iteration, whatever). With\n          // await, by contrast, there is no opportunity to examine the\n          // rejection reason outside the generator function, so the\n          // only option is to throw it from the await expression, and\n          // let the generator function handle the exception.\n          result.value = unwrapped;\n          resolve(result);\n        }, reject);\n      }\n    }\n\n    if (typeof global.process === \""object\"" && global.process.domain) {\n      invoke = global.process.domain.bind(invoke);\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new Promise(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  runtime.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\""Generator is already running\"");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \""throw\"") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \""next\"") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \""throw\"") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \""return\"") {\n          context.abrupt(\""return\"", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \""normal\"") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \""throw\"") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \""throw\"";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \""throw\"") {\n        if (delegate.iterator.return) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \""return\"";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \""throw\"") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \""return\"" to \""throw\"", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \""throw\"";\n        context.arg = new TypeError(\n          \""The iterator does not provide a 'throw' method\"");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \""throw\"") {\n      context.method = \""throw\"";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \""throw\"";\n      context.arg = new TypeError(\""iterator result is not an object\"");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \""throw\"" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \""next\"", forget context.arg since it has been\n      // \""consumed\"" by the delegate iterator. If context.method was\n      // \""return\"", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \""return\"") {\n        context.method = \""next\"";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[toStringTagSymbol] = \""Generator\"";\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \""[object Generator]\"";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \""normal\"";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \""root\"" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \""function\"") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \""next\"";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \""t\"" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \""throw\"") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \""throw\"";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \""next\"";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \""root\"") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\""end\"");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \""catchLoc\"");\n          var hasFinally = hasOwn.call(entry, \""finallyLoc\"");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\""try statement without catch or finally\"");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \""finallyLoc\"") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \""break\"" ||\n           type === \""continue\"") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \""next\"";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \""throw\"") {\n        throw record.arg;\n      }\n\n      if (record.type === \""break\"" ||\n          record.type === \""continue\"") {\n        this.next = record.arg;\n      } else if (record.type === \""return\"") {\n        this.rval = this.arg = record.arg;\n        this.method = \""return\"";\n        this.next = \""end\"";\n      } else if (record.type === \""normal\"" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \""catch\"": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \""throw\"") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\""illegal catch attempt\"");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \""next\"") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \""object\"" ? global :\n  typeof window === \""object\"" ? window :\n  typeof self === \""object\"" ? self : this\n);\n"",""// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n    var ce = new window.CustomEvent('test');\n    ce.preventDefault();\n    if (ce.defaultPrevented !== true) {\n        // IE has problems with .preventDefault() on custom events\n        // http://stackoverflow.com/questions/23349191\n        throw new Error('Could not prevent default');\n    }\n} catch(e) {\n  var CustomEvent = function(event, params) {\n    var evt, origPrevent;\n    params = params || {\n      bubbles: false,\n      cancelable: false,\n      detail: undefined\n    };\n\n    evt = document.createEvent(\""CustomEvent\"");\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    origPrevent = evt.preventDefault;\n    evt.preventDefault = function () {\n      origPrevent.call(this);\n      try {\n        Object.defineProperty(this, 'defaultPrevented', {\n          get: function () {\n            return true;\n          }\n        });\n      } catch(e) {\n        this.defaultPrevented = true;\n      }\n    };\n    return evt;\n  };\n\n  CustomEvent.prototype = window.Event.prototype;\n  window.CustomEvent = CustomEvent; // expose definition to window\n}\n"",""// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n    html5: 'html5',\n    youtube: 'youtube',\n    vimeo: 'vimeo',\n};\n\nexport const types = {\n    audio: 'audio',\n    video: 'video',\n};\n\nexport default { providers, types };\n"",""// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n    // Basic support\n    audio: 'canPlayType' in document.createElement('audio'),\n    video: 'canPlayType' in document.createElement('video'),\n\n    // Check for support\n    // Basic functionality vs full UI\n    check(type, provider, inline) {\n        let api = false;\n        let ui = false;\n        const browser = utils.getBrowser();\n        const playsInline = browser.isIPhone && inline && support.inline;\n\n        switch (`${provider}:${type}`) {\n            case 'html5:video':\n                api = support.video;\n                ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n                break;\n\n            case 'html5:audio':\n                api = support.audio;\n                ui = api && support.rangeInput;\n                break;\n\n            case 'youtube:video':\n            case 'vimeo:video':\n                api = true;\n                ui = support.rangeInput && (!browser.isIPhone || playsInline);\n                break;\n\n            default:\n                api = support.audio && support.video;\n                ui = api && support.rangeInput;\n        }\n\n        return {\n            api,\n            ui,\n        };\n    },\n\n    // Picture-in-picture support\n    // Safari only currently\n    pip: (() => {\n        const browser = utils.getBrowser();\n        return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n    })(),\n\n    // Airplay support\n    // Safari only currently\n    airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n    // Inline playback support\n    // https://webkit.org/blog/6784/new-video-policies-for-ios/\n    inline: 'playsInline' in document.createElement('video'),\n\n    // Check for mime type support against a player instance\n    // Credits: http://diveintohtml5.info/everything.html\n    // Related: http://www.leanbackplayer.com/test/h5mt.html\n    mime(type) {\n        const { media } = this;\n\n        try {\n            // Bail if no checking function\n            if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n                return false;\n            }\n\n            // Type specific checks\n            if (this.isVideo) {\n                switch (type) {\n                    case 'video/webm':\n                        return media.canPlayType('video/webm; codecs=\""vp8, vorbis\""').replace(/no/, '');\n\n                    case 'video/mp4':\n                        return media.canPlayType('video/mp4; codecs=\""avc1.42E01E, mp4a.40.2\""').replace(/no/, '');\n\n                    case 'video/ogg':\n                        return media.canPlayType('video/ogg; codecs=\""theora\""').replace(/no/, '');\n\n                    default:\n                        return false;\n                }\n            } else if (this.isAudio) {\n                switch (type) {\n                    case 'audio/mpeg':\n                        return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n                    case 'audio/ogg':\n                        return media.canPlayType('audio/ogg; codecs=\""vorbis\""').replace(/no/, '');\n\n                    case 'audio/wav':\n                        return media.canPlayType('audio/wav; codecs=\""1\""').replace(/no/, '');\n\n                    default:\n                        return false;\n                }\n            }\n        } catch (e) {\n            return false;\n        }\n\n        // If we got this far, we're stuffed\n        return false;\n    },\n\n    // Check for textTracks support\n    textTracks: 'textTracks' in document.createElement('video'),\n\n    // Check for passive event listener support\n    // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n    // https://www.youtube.com/watch?v=NPM6172J22g\n    passiveListeners: (() => {\n        // Test via a getter in the options object to see if the passive property is accessed\n        let supported = false;\n        try {\n            const options = Object.defineProperty({}, 'passive', {\n                get() {\n                    supported = true;\n                    return null;\n                },\n            });\n            window.addEventListener('test', null, options);\n        } catch (e) {\n            // Do nothing\n        }\n\n        return supported;\n    })(),\n\n    // <input type=\""range\""> Sliders\n    rangeInput: (() => {\n        const range = document.createElement('input');\n        range.type = 'range';\n        return range.type === 'range';\n    })(),\n\n    // Touch\n    // Remember a device can be moust + touch enabled\n    touch: 'ontouchstart' in document.documentElement,\n\n    // Detect transitions support\n    transitions: utils.transitionEndEvent !== false,\n\n    // Reduced motion iOS & MacOS setting\n    // https://webkit.org/blog/7551/responsive-design-for-motion/\n    reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n"",""// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n    // Disable\n    enabled: true,\n\n    // Custom media title\n    title: '',\n\n    // Logging to console\n    debug: false,\n\n    // Auto play (if supported)\n    autoplay: false,\n\n    // Only allow one media playing at once (vimeo only)\n    autopause: true,\n\n    // Default time to skip when rewind/fast forward\n    seekTime: 10,\n\n    // Default volume\n    volume: 1,\n    muted: false,\n\n    // Pass a custom duration\n    duration: null,\n\n    // Display the media duration on load in the current time position\n    // If you have opted to display both duration and currentTime, this is ignored\n    displayDuration: true,\n\n    // Invert the current time to be a countdown\n    invertTime: true,\n\n    // Clicking the currentTime inverts it's value to show time left rather than elapsed\n    toggleInvert: true,\n\n    // Aspect ratio (for embeds)\n    ratio: '16:9',\n\n    // Click video container to play/pause\n    clickToPlay: true,\n\n    // Auto hide the controls\n    hideControls: true,\n\n    // Revert to poster on finish (HTML5 - will cause reload)\n    showPosterOnEnd: false,\n\n    // Disable the standard context menu\n    disableContextMenu: true,\n\n    // Sprite (for icons)\n    loadSprite: true,\n    iconPrefix: 'plyr',\n    iconUrl: 'https://cdn.plyr.io/3.0.1/plyr.svg',\n\n    // Blank video (used to prevent errors on source change)\n    blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n    // Quality default\n    quality: {\n        default: 'default',\n        options: [\n            'hd2160',\n            'hd1440',\n            'hd1080',\n            'hd720',\n            'large',\n            'medium',\n            'small',\n            'tiny',\n            'default',\n        ],\n    },\n\n    // Set loops\n    loop: {\n        active: false,\n        // start: null,\n        // end: null,\n    },\n\n    // Speed default and options to display\n    speed: {\n        selected: 1,\n        options: [\n            0.5,\n            0.75,\n            1,\n            1.25,\n            1.5,\n            1.75,\n            2,\n        ],\n    },\n\n    // Keyboard shortcut settings\n    keyboard: {\n        focused: true,\n        global: false,\n    },\n\n    // Display tooltips\n    tooltips: {\n        controls: false,\n        seek: true,\n    },\n\n    // Captions settings\n    captions: {\n        active: false,\n        language: window.navigator.language.split('-')[0],\n    },\n\n    // Fullscreen settings\n    fullscreen: {\n        enabled: true, // Allow fullscreen?\n        fallback: true, // Fallback for vintage browsers\n        iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n    },\n\n    // Local storage\n    storage: {\n        enabled: true,\n        key: 'plyr',\n    },\n\n    // Default controls\n    controls: [\n        'play-large',\n        'play',\n        'progress',\n        'current-time',\n        'mute',\n        'volume',\n        'captions',\n        'settings',\n        'pip',\n        'airplay',\n        'fullscreen',\n    ],\n    settings: [\n        'captions',\n        'quality',\n        'speed',\n    ],\n\n    // Localisation\n    i18n: {\n        restart: 'Restart',\n        rewind: 'Rewind {seektime} secs',\n        play: 'Play',\n        pause: 'Pause',\n        forward: 'Forward {seektime} secs',\n        seek: 'Seek',\n        played: 'Played',\n        buffered: 'Buffered',\n        currentTime: 'Current time',\n        duration: 'Duration',\n        volume: 'Volume',\n        mute: 'Mute',\n        unmute: 'Unmute',\n        enableCaptions: 'Enable captions',\n        disableCaptions: 'Disable captions',\n        enterFullscreen: 'Enter fullscreen',\n        exitFullscreen: 'Exit fullscreen',\n        frameTitle: 'Player for {title}',\n        captions: 'Captions',\n        settings: 'Settings',\n        speed: 'Speed',\n        quality: 'Quality',\n        loop: 'Loop',\n        start: 'Start',\n        end: 'End',\n        all: 'All',\n        reset: 'Reset',\n        none: 'None',\n        disabled: 'Disabled',\n        advertisement: 'Ad',\n    },\n\n    // URLs\n    urls: {\n        vimeo: {\n            api: 'https://player.vimeo.com/api/player.js',\n        },\n        youtube: {\n            api: 'https://www.youtube.com/iframe_api',\n        },\n        googleIMA: {\n            api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n        },\n    },\n\n    // Custom control listeners\n    listeners: {\n        seek: null,\n        play: null,\n        pause: null,\n        restart: null,\n        rewind: null,\n        forward: null,\n        mute: null,\n        volume: null,\n        captions: null,\n        fullscreen: null,\n        pip: null,\n        airplay: null,\n        speed: null,\n        quality: null,\n        loop: null,\n        language: null,\n    },\n\n    // Events to watch and bubble\n    events: [\n        // Events to watch on HTML5 media elements and bubble\n        // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n        'ended',\n        'progress',\n        'stalled',\n        'playing',\n        'waiting',\n        'canplay',\n        'canplaythrough',\n        'loadstart',\n        'loadeddata',\n        'loadedmetadata',\n        'timeupdate',\n        'volumechange',\n        'play',\n        'pause',\n        'error',\n        'seeking',\n        'seeked',\n        'emptied',\n        'ratechange',\n        'cuechange',\n\n        // Custom events\n        'enterfullscreen',\n        'exitfullscreen',\n        'captionsenabled',\n        'captionsdisabled',\n        'languagechange',\n        'controlshidden',\n        'controlsshown',\n        'ready',\n\n        // YouTube\n        'statechange',\n        'qualitychange',\n        'qualityrequested',\n\n        // Ads\n        'adsloaded',\n        'adscontentpause',\n        'adscontentresume',\n        'adstarted',\n        'adsmidpoint',\n        'adscomplete',\n        'adsallcomplete',\n        'adsimpression',\n        'adsclick',\n    ],\n\n    // Selectors\n    // Change these to match your template if using custom HTML\n    selectors: {\n        editable: 'input, textarea, select, [contenteditable]',\n        container: '.plyr',\n        controls: {\n            container: null,\n            wrapper: '.plyr__controls',\n        },\n        labels: '[data-plyr]',\n        buttons: {\n            play: '[data-plyr=\""play\""]',\n            pause: '[data-plyr=\""pause\""]',\n            restart: '[data-plyr=\""restart\""]',\n            rewind: '[data-plyr=\""rewind\""]',\n            forward: '[data-plyr=\""fast-forward\""]',\n            mute: '[data-plyr=\""mute\""]',\n            captions: '[data-plyr=\""captions\""]',\n            fullscreen: '[data-plyr=\""fullscreen\""]',\n            pip: '[data-plyr=\""pip\""]',\n            airplay: '[data-plyr=\""airplay\""]',\n            settings: '[data-plyr=\""settings\""]',\n            loop: '[data-plyr=\""loop\""]',\n        },\n        inputs: {\n            seek: '[data-plyr=\""seek\""]',\n            volume: '[data-plyr=\""volume\""]',\n            speed: '[data-plyr=\""speed\""]',\n            language: '[data-plyr=\""language\""]',\n            quality: '[data-plyr=\""quality\""]',\n        },\n        display: {\n            currentTime: '.plyr__time--current',\n            duration: '.plyr__time--duration',\n            buffer: '.plyr__progress--buffer',\n            played: '.plyr__progress--played',\n            loop: '.plyr__progress--loop',\n            volume: '.plyr__volume--display',\n        },\n        progress: '.plyr__progress',\n        captions: '.plyr__captions',\n        menu: {\n            quality: '.js-plyr__menu__list--quality',\n        },\n    },\n\n    // Class hooks added to the player in different states\n    classNames: {\n        video: 'plyr__video-wrapper',\n        embed: 'plyr__video-embed',\n        ads: 'plyr__ads',\n        control: 'plyr__control',\n        type: 'plyr--{0}',\n        provider: 'plyr--{0}',\n        stopped: 'plyr--stopped',\n        playing: 'plyr--playing',\n        loading: 'plyr--loading',\n        error: 'plyr--has-error',\n        hover: 'plyr--hover',\n        tooltip: 'plyr__tooltip',\n        cues: 'plyr__cues',\n        hidden: 'plyr__sr-only',\n        hideControls: 'plyr--hide-controls',\n        isIos: 'plyr--is-ios',\n        isTouch: 'plyr--is-touch',\n        uiSupported: 'plyr--full-ui',\n        noTransition: 'plyr--no-transition',\n        menu: {\n            value: 'plyr__menu__value',\n            badge: 'plyr__badge',\n            open: 'plyr--menu-open',\n        },\n        captions: {\n            enabled: 'plyr--captions-enabled',\n            active: 'plyr--captions-active',\n        },\n        fullscreen: {\n            enabled: 'plyr--fullscreen-enabled',\n            fallback: 'plyr--fullscreen-fallback',\n        },\n        pip: {\n            supported: 'plyr--pip-supported',\n            active: 'plyr--pip-active',\n        },\n        airplay: {\n            supported: 'plyr--airplay-supported',\n            active: 'plyr--airplay-active',\n        },\n        tabFocus: 'plyr__tab-focus',\n    },\n\n    // Embed attributes\n    attributes: {\n        embed: {\n            provider: 'data-plyr-provider',\n            id: 'data-plyr-embed-id',\n        },\n    },\n\n    // API keys\n    keys: {\n        google: null,\n    },\n\n    // Advertisements plugin\n    // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n    ads: {\n        enabled: false,\n        publisherId: '',\n    },\n};\n\nexport default defaults;\n"",""// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n    // Check variable types\n    is: {\n        plyr(input) {\n            return this.instanceof(input, window.Plyr);\n        },\n        object(input) {\n            return this.getConstructor(input) === Object;\n        },\n        number(input) {\n            return this.getConstructor(input) === Number && !Number.isNaN(input);\n        },\n        string(input) {\n            return this.getConstructor(input) === String;\n        },\n        boolean(input) {\n            return this.getConstructor(input) === Boolean;\n        },\n        function(input) {\n            return this.getConstructor(input) === Function;\n        },\n        array(input) {\n            return !this.nullOrUndefined(input) && Array.isArray(input);\n        },\n        weakMap(input) {\n            return this.instanceof(input, window.WeakMap);\n        },\n        nodeList(input) {\n            return this.instanceof(input, window.NodeList);\n        },\n        element(input) {\n            return this.instanceof(input, window.Element);\n        },\n        textNode(input) {\n            return this.getConstructor(input) === Text;\n        },\n        event(input) {\n            return this.instanceof(input, window.Event);\n        },\n        cue(input) {\n            return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n        },\n        track(input) {\n            return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n        },\n        url(input) {\n            return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n        },\n        nullOrUndefined(input) {\n            return input === null || typeof input === 'undefined';\n        },\n        empty(input) {\n            return (\n                this.nullOrUndefined(input) ||\n                ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n                (this.object(input) && !Object.keys(input).length)\n            );\n        },\n        instanceof(input, constructor) {\n            return Boolean(input && constructor && input instanceof constructor);\n        },\n        getConstructor(input) {\n            return !this.nullOrUndefined(input) ? input.constructor : null;\n        },\n    },\n\n    // Unfortunately, due to mixed support, UA sniffing is required\n    getBrowser() {\n        return {\n            isIE: /* @cc_on!@ */ false || !!document.documentMode,\n            isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n            isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n            isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n        };\n    },\n\n    // Fetch wrapper\n    // Using XHR to avoid issues with older browsers\n    fetch(url, responseType = 'text') {\n        return new Promise((resolve, reject) => {\n            try {\n                const request = new XMLHttpRequest();\n\n                // Check for CORS support\n                if (!('withCredentials' in request)) {\n                    return;\n                }\n\n                request.addEventListener('load', () => {\n                    if (responseType === 'text') {\n                        try {\n                            resolve(JSON.parse(request.responseText));\n                        } catch(e) {\n                            resolve(request.responseText);\n                        }\n                    }\n                    else {\n                        resolve(request.response);\n                    }\n                });\n\n                request.addEventListener('error', () => {\n                    throw new Error(request.statusText);\n                });\n\n                request.open('GET', url, true);\n\n                // Set the required response type\n                request.responseType = responseType;\n\n                request.send();\n            } catch (e) {\n                reject(e);\n            }\n        });\n    },\n\n    // Load an external script\n    loadScript(url) {\n        return new Promise((resolve, reject) => {\n            const current = document.querySelector(`script[src=\""${url}\""]`);\n\n            // Check script is not already referenced, if so wait for load\n            if (current !== null) {\n                current.callbacks = current.callbacks || [];\n                current.callbacks.push(resolve);\n                return;\n            }\n\n            // Build the element\n            const element = document.createElement('script');\n\n            // Callback queue\n            element.callbacks = element.callbacks || [];\n            element.callbacks.push(resolve);\n\n            // Error queue\n            element.errors = element.errors || [];\n            element.errors.push(reject);\n\n            // Bind callback\n            element.addEventListener(\n                'load',\n                event => {\n                    element.callbacks.forEach(cb => cb.call(null, event));\n                    element.callbacks = null;\n                },\n                false,\n            );\n\n            // Bind error handling\n            element.addEventListener(\n                'error',\n                event => {\n                    element.errors.forEach(err => err.call(null, event));\n                    element.errors = null;\n                },\n                false,\n            );\n\n            // Set the URL after binding callback\n            element.src = url;\n\n            // Inject\n            const first = document.getElementsByTagName('script')[0];\n            first.parentNode.insertBefore(element, first);\n        });\n    },\n\n    // Load an external SVG sprite\n    loadSprite(url, id) {\n        if (!utils.is.string(url)) {\n            return;\n        }\n\n        const prefix = 'cache-';\n        const hasId = utils.is.string(id);\n        let isCached = false;\n\n        function updateSprite(data) {\n            // Inject content\n            this.innerHTML = data;\n\n            // Inject the SVG to the body\n            document.body.insertBefore(this, document.body.childNodes[0]);\n        }\n\n        // Only load once\n        if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n            // Create container\n            const container = document.createElement('div');\n            utils.toggleHidden(container, true);\n\n            if (hasId) {\n                container.setAttribute('id', id);\n            }\n\n            // Check in cache\n            if (support.storage) {\n                const cached = window.localStorage.getItem(prefix + id);\n                isCached = cached !== null;\n\n                if (isCached) {\n                    const data = JSON.parse(cached);\n                    updateSprite.call(container, data.content);\n                    return;\n                }\n            }\n\n            // Get the sprite\n            utils\n                .fetch(url)\n                .then(result => {\n                    if (utils.is.empty(result)) {\n                        return;\n                    }\n\n                    if (support.storage) {\n                        window.localStorage.setItem(\n                            prefix + id,\n                            JSON.stringify({\n                                content: result,\n                            }),\n                        );\n                    }\n\n                    updateSprite.call(container, result);\n                })\n                .catch(() => {});\n        }\n    },\n\n    // Generate a random ID\n    generateId(prefix) {\n        return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n    },\n\n    // Determine if we're in an iframe\n    inFrame() {\n        try {\n            return window.self !== window.top;\n        } catch (e) {\n            return true;\n        }\n    },\n\n    // Wrap an element\n    wrap(elements, wrapper) {\n        // Convert `elements` to an array, if necessary.\n        const targets = elements.length ? elements : [elements];\n\n        // Loops backwards to prevent having to clone the wrapper on the\n        // first element (see `child` below).\n        Array.from(targets)\n            .reverse()\n            .forEach((element, index) => {\n                const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n                // Cache the current parent and sibling.\n                const parent = element.parentNode;\n                const sibling = element.nextSibling;\n\n                // Wrap the element (is automatically removed from its current\n                // parent).\n                child.appendChild(element);\n\n                // If the element had a sibling, insert the wrapper before\n                // the sibling to maintain the HTML structure; otherwise, just\n                // append it to the parent.\n                if (sibling) {\n                    parent.insertBefore(child, sibling);\n                } else {\n                    parent.appendChild(child);\n                }\n            });\n    },\n\n    // Create a DocumentFragment\n    createElement(type, attributes, text) {\n        // Create a new <element>\n        const element = document.createElement(type);\n\n        // Set all passed attributes\n        if (utils.is.object(attributes)) {\n            utils.setAttributes(element, attributes);\n        }\n\n        // Add text node\n        if (utils.is.string(text)) {\n            element.textContent = text;\n        }\n\n        // Return built element\n        return element;\n    },\n\n    // Inaert an element after another\n    insertAfter(element, target) {\n        target.parentNode.insertBefore(element, target.nextSibling);\n    },\n\n    // Insert a DocumentFragment\n    insertElement(type, parent, attributes, text) {\n        // Inject the new <element>\n        parent.appendChild(utils.createElement(type, attributes, text));\n    },\n\n    // Remove an element\n    removeElement(element) {\n        if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n            return;\n        }\n\n        if (utils.is.nodeList(element) || utils.is.array(element)) {\n            Array.from(element).forEach(utils.removeElement);\n            return;\n        }\n\n        element.parentNode.removeChild(element);\n    },\n\n    // Remove all child elements\n    emptyElement(element) {\n        let { length } = element.childNodes;\n\n        while (length > 0) {\n            element.removeChild(element.lastChild);\n            length -= 1;\n        }\n    },\n\n    // Replace element\n    replaceElement(newChild, oldChild) {\n        if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n            return null;\n        }\n\n        oldChild.parentNode.replaceChild(newChild, oldChild);\n\n        return newChild;\n    },\n\n    // Set attributes\n    setAttributes(element, attributes) {\n        if (!utils.is.element(element) || utils.is.empty(attributes)) {\n            return;\n        }\n\n        Object.keys(attributes).forEach(key => {\n            element.setAttribute(key, attributes[key]);\n        });\n    },\n\n    // Get an attribute object from a string selector\n    getAttributesFromSelector(sel, existingAttributes) {\n        // For example:\n        // '.test' to { class: 'test' }\n        // '#test' to { id: 'test' }\n        // '[data-test=\""test\""]' to { 'data-test': 'test' }\n\n        if (!utils.is.string(sel) || utils.is.empty(sel)) {\n            return {};\n        }\n\n        const attributes = {};\n        const existing = existingAttributes;\n\n        sel.split(',').forEach(s => {\n            // Remove whitespace\n            const selector = s.trim();\n            const className = selector.replace('.', '');\n            const stripped = selector.replace(/[[\\]]/g, '');\n\n            // Get the parts and value\n            const parts = stripped.split('=');\n            const key = parts[0];\n            const value = parts.length > 1 ? parts[1].replace(/[\""']/g, '') : '';\n\n            // Get the first character\n            const start = selector.charAt(0);\n\n            switch (start) {\n                case '.':\n                    // Add to existing classname\n                    if (utils.is.object(existing) && utils.is.string(existing.class)) {\n                        existing.class += ` ${className}`;\n                    }\n\n                    attributes.class = className;\n                    break;\n\n                case '#':\n                    // ID selector\n                    attributes.id = selector.replace('#', '');\n                    break;\n\n                case '[':\n                    // Attribute selector\n                    attributes[key] = value;\n\n                    break;\n\n                default:\n                    break;\n            }\n        });\n\n        return attributes;\n    },\n\n    // Toggle class on an element\n    toggleClass(element, className, toggle) {\n        if (utils.is.element(element)) {\n            const contains = element.classList.contains(className);\n\n            element.classList[toggle ? 'add' : 'remove'](className);\n\n            return (toggle && !contains) || (!toggle && contains);\n        }\n\n        return null;\n    },\n\n    // Has class name\n    hasClass(element, className) {\n        return utils.is.element(element) && element.classList.contains(className);\n    },\n\n    // Toggle hidden attribute on an element\n    toggleHidden(element, toggle) {\n        if (!utils.is.element(element)) {\n            return;\n        }\n\n        if (toggle) {\n            element.setAttribute('hidden', '');\n        } else {\n            element.removeAttribute('hidden');\n        }\n    },\n\n    // Element matches selector\n    matches(element, selector) {\n        const prototype = { Element };\n\n        function match() {\n            return Array.from(document.querySelectorAll(selector)).includes(this);\n        }\n\n        const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n        return matches.call(element, selector);\n    },\n\n    // Find all elements\n    getElements(selector) {\n        return this.elements.container.querySelectorAll(selector);\n    },\n\n    // Find a single element\n    getElement(selector) {\n        return this.elements.container.querySelector(selector);\n    },\n\n    // Find the UI controls and store references in custom controls\n    // TODO: Allow settings menus with custom controls\n    findElements() {\n        try {\n            this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n            // Buttons\n            this.elements.buttons = {\n                play: utils.getElements.call(this, this.config.selectors.buttons.play),\n                pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n                restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n                rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n                forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n                mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n                pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n                airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n                settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n                captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n                fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n            };\n\n            // Progress\n            this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n            // Inputs\n            this.elements.inputs = {\n                seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n                volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n            };\n\n            // Display\n            this.elements.display = {\n                buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n                duration: utils.getElement.call(this, this.config.selectors.display.duration),\n                currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n            };\n\n            // Seek tooltip\n            if (utils.is.element(this.elements.progress)) {\n                this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n            }\n\n            return true;\n        } catch (error) {\n            // Log it\n            this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n            // Restore native video controls\n            this.toggleNativeControls(true);\n\n            return false;\n        }\n    },\n\n    // Get the focused element\n    getFocusElement() {\n        let focused = document.activeElement;\n\n        if (!focused || focused === document.body) {\n            focused = null;\n        } else {\n            focused = document.querySelector(':focus');\n        }\n\n        return focused;\n    },\n\n    // Trap focus inside container\n    trapFocus(element = null, toggle = false) {\n        if (!utils.is.element(element)) {\n            return;\n        }\n\n        const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n        const first = focusable[0];\n        const last = focusable[focusable.length - 1];\n\n        const trap = event => {\n            // Bail if not tab key or not fullscreen\n            if (event.key !== 'Tab' || event.keyCode !== 9) {\n                return;\n            }\n\n            // Get the current focused element\n            const focused = utils.getFocusElement();\n\n            if (focused === last && !event.shiftKey) {\n                // Move focus to first element that can be tabbed if Shift isn't used\n                first.focus();\n                event.preventDefault();\n            } else if (focused === first && event.shiftKey) {\n                // Move focus to last element that can be tabbed if Shift is used\n                last.focus();\n                event.preventDefault();\n            }\n        };\n\n        if (toggle) {\n            utils.on(this.elements.container, 'keydown', trap, false);\n        } else {\n            utils.off(this.elements.container, 'keydown', trap, false);\n        }\n    },\n\n    // Toggle event listener\n    toggleListener(elements, event, callback, toggle, passive, capture) {\n        // Bail if no elemetns, event, or callback\n        if (utils.is.empty(elements)  || utils.is.empty(event) || !utils.is.function(callback)) {\n            return;\n        }\n\n        // If a nodelist is passed, call itself on each node\n        if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n            // Create listener for each node\n            Array.from(elements).forEach(element => {\n                if (element instanceof Node) {\n                    utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n                }\n            });\n\n            return;\n        }\n\n        // Allow multiple events\n        const events = event.split(' ');\n\n        // Build options\n        // Default to just capture boolean\n        let options = utils.is.boolean(capture) ? capture : false;\n\n        // If passive events listeners are supported\n        if (support.passiveListeners) {\n            options = {\n                // Whether the listener can be passive (i.e. default never prevented)\n                passive: utils.is.boolean(passive) ? passive : true,\n                // Whether the listener is a capturing listener or not\n                capture: utils.is.boolean(capture) ? capture : false,\n            };\n        }\n\n        // If a single node is passed, bind the event listener\n        events.forEach(type => {\n            elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n        });\n    },\n\n    // Bind event handler\n    on(element, events, callback, passive, capture) {\n        utils.toggleListener(element, events, callback, true, passive, capture);\n    },\n\n    // Unbind event handler\n    off(element, events, callback, passive, capture) {\n        utils.toggleListener(element, events, callback, false, passive, capture);\n    },\n\n    // Trigger event\n    dispatchEvent(element, type, bubbles, detail) {\n        // Bail if no element\n        if (!utils.is.element(element) || !utils.is.string(type)) {\n            return;\n        }\n\n        // Create and dispatch the event\n        const event = new CustomEvent(type, {\n            bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n            detail: Object.assign({}, detail, {\n                plyr: utils.is.plyr(this) ? this : null,\n            }),\n        });\n\n        // Dispatch the event\n        element.dispatchEvent(event);\n    },\n\n    // Toggle aria-pressed state on a toggle button\n    // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n    toggleState(element, input) {\n        // If multiple elements passed\n        if (utils.is.array(element) || utils.is.nodeList(element)) {\n            Array.from(element).forEach(target => utils.toggleState(target, input));\n            return;\n        }\n\n        // Bail if no target\n        if (!utils.is.element(element)) {\n            return;\n        }\n\n        // Get state\n        const pressed = element.getAttribute('aria-pressed') === 'true';\n        const state = utils.is.boolean(input) ? input : !pressed;\n\n        // Set the attribute on target\n        element.setAttribute('aria-pressed', state);\n    },\n\n    // Get percentage\n    getPercentage(current, max) {\n        if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n            return 0;\n        }\n\n        return (current / max * 100).toFixed(2);\n    },\n\n    // Time helpers\n    getHours(value) {\n        return parseInt((value / 60 / 60) % 60, 10);\n    },\n    getMinutes(value) {\n        return parseInt((value / 60) % 60, 10);\n    },\n    getSeconds(value) {\n        return parseInt(value % 60, 10);\n    },\n\n    // Format time to UI friendly string\n    formatTime(time = 0, displayHours = false, inverted = false) {\n        // Bail if the value isn't a number\n        if (!utils.is.number(time)) {\n            return this.formatTime(null, displayHours, inverted);\n        }\n\n        // Format time component to add leading zero\n        const format = value => `0${value}`.slice(-2);\n\n        // Breakdown to hours, mins, secs\n        let hours = this.getHours(time);\n        const mins = this.getMinutes(time);\n        const secs = this.getSeconds(time);\n\n        // Do we need to display hours?\n        if (displayHours || hours > 0) {\n            hours = `${hours}:`;\n        } else {\n            hours = '';\n        }\n\n        // Render\n        return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n    },\n\n    // Deep extend destination object with N more objects\n    extend(target = {}, ...sources) {\n        if (!sources.length) {\n            return target;\n        }\n\n        const source = sources.shift();\n\n        if (!utils.is.object(source)) {\n            return target;\n        }\n\n        Object.keys(source).forEach(key => {\n            if (utils.is.object(source[key])) {\n                if (!Object.keys(target).includes(key)) {\n                    Object.assign(target, { [key]: {} });\n                }\n\n                utils.extend(target[key], source[key]);\n            } else {\n                Object.assign(target, { [key]: source[key] });\n            }\n        });\n\n        return utils.extend(target, ...sources);\n    },\n\n    // Get the provider for a given URL\n    getProviderByUrl(url) {\n        // YouTube\n        if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n            return providers.youtube;\n        }\n\n        // Vimeo\n        if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n            return providers.vimeo;\n        }\n\n        return null;\n    },\n\n    // Parse YouTube ID from URL\n    parseYouTubeId(url) {\n        if (utils.is.empty(url)) {\n            return null;\n        }\n\n        const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n        return url.match(regex) ? RegExp.$2 : url;\n    },\n\n    // Parse Vimeo ID from URL\n    parseVimeoId(url) {\n        if (utils.is.empty(url)) {\n            return null;\n        }\n\n        if (utils.is.number(Number(url))) {\n            return url;\n        }\n\n        const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n        return url.match(regex) ? RegExp.$2 : url;\n    },\n\n    // Convert a URL to a location object\n    parseUrl(url) {\n        const parser = document.createElement('a');\n        parser.href = url;\n        return parser;\n    },\n\n    // Get URL query parameters\n    getUrlParams(input) {\n        let search = input;\n\n        // Parse URL if needed\n        if (input.startsWith('http://') || input.startsWith('https://')) {\n            ({ search } = this.parseUrl(input));\n        }\n\n        if (this.is.empty(search)) {\n            return null;\n        }\n\n        const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n        return hashes.reduce((params, hash) => {\n            const [\n                key,\n                val,\n            ] = hash.split('=');\n\n            return Object.assign(params, { [key]: decodeURIComponent(val) });\n        }, {});\n    },\n\n    // Convert object to URL parameters\n    buildUrlParams(input) {\n        if (!utils.is.object(input)) {\n            return '';\n        }\n\n        return Object.keys(input)\n            .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n            .join('&');\n    },\n\n    // Remove HTML from a string\n    stripHTML(source) {\n        const fragment = document.createDocumentFragment();\n        const element = document.createElement('div');\n        fragment.appendChild(element);\n        element.innerHTML = source;\n        return fragment.firstChild.innerText;\n    },\n\n    // Get aspect ratio for dimensions\n    getAspectRatio(width, height) {\n        const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n        const ratio = getRatio(width, height);\n        return `${width / ratio}:${height / ratio}`;\n    },\n\n    // Get the transition end event\n    get transitionEndEvent() {\n        const element = document.createElement('span');\n\n        const events = {\n            WebkitTransition: 'webkitTransitionEnd',\n            MozTransition: 'transitionend',\n            OTransition: 'oTransitionEnd otransitionend',\n            transition: 'transitionend',\n        };\n\n        const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n        return utils.is.string(type) ? events[type] : false;\n    },\n\n    // Force repaint of element\n    repaint(element) {\n        setTimeout(() => {\n            utils.toggleHidden(element, true);\n            element.offsetHeight; // eslint-disable-line\n            utils.toggleHidden(element, false);\n        }, 0);\n    },\n};\n\nexport default utils;\n"",""// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n    constructor(enabled = false) {\n        this.enabled = window.console && enabled;\n\n        if (this.enabled) {\n            this.log('Debugging enabled');\n        }\n    }\n\n    get log() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n    }\n    get warn() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n    }\n    get error() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n    }\n}\n"",""// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n    if (!this.enabled) {\n        return;\n    }\n\n    // Update toggle button\n    const button = this.player.elements.buttons.fullscreen;\n    if (utils.is.element(button)) {\n        utils.toggleState(button, this.active);\n    }\n\n    // Trigger an event\n    utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n    // Trap focus in container\n    if (!browser.isIos) {\n        utils.trapFocus.call(this.player, this.target, this.active);\n    }\n}\n\nfunction toggleFallback(toggle = false) {\n    // Store or restore scroll position\n    if (toggle) {\n        this.scrollPosition = {\n            x: window.scrollX || 0,\n            y: window.scrollY || 0,\n        };\n    } else {\n        window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n    }\n\n    // Toggle scroll\n    document.body.style.overflow = toggle ? 'hidden' : '';\n\n    // Toggle class hook\n    utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n    // Toggle button and fire events\n    onChange.call(this);\n}\n\nclass Fullscreen {\n    constructor(player) {\n        // Keep reference to parent\n        this.player = player;\n\n        // Get prefix\n        this.prefix = Fullscreen.prefix;\n\n        // Scroll position\n        this.scrollPosition = { x: 0, y: 0 };\n\n        // Register event listeners\n        // Handle event (incase user presses escape etc)\n        utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n            // TODO: Filter for target??\n            onChange.call(this);\n        });\n\n        // Fullscreen toggle on double click\n        utils.on(this.player.elements.container, 'dblclick', () => {\n            this.toggle();\n        });\n\n        // Prevent double click on controls bubbling up\n        utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n        // Update the UI\n        this.update();\n    }\n\n    // Determine if native supported\n    static get native() {\n        return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n    }\n\n    // Get the prefix for handlers\n    static get prefix() {\n        // No prefix\n        if (utils.is.function(document.cancelFullScreen)) {\n            return false;\n        }\n\n        // Check for fullscreen support by vendor prefix\n        let value = '';\n        const prefixes = [\n            'webkit',\n            'moz',\n            'ms',\n        ];\n\n        prefixes.some(pre => {\n            if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n                value = pre;\n                return true;\n            } else if (utils.is.function(document.msExitFullscreen)) {\n                value = 'ms';\n                return true;\n            }\n\n            return false;\n        });\n\n        return value;\n    }\n\n    // Determine if fullscreen is enabled\n    get enabled() {\n        const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n        return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n    }\n\n    // Get active state\n    get active() {\n        if (!this.enabled) {\n            return false;\n        }\n\n        // Fallback using classname\n        if (!Fullscreen.native) {\n            return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n        }\n\n        const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n        return element === this.target;\n    }\n\n    // Get target element\n    get target() {\n        return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n    }\n\n    // Update UI\n    update() {\n        if (this.enabled) {\n            this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n        } else {\n            this.player.debug.log('Fullscreen not supported and fallback disabled');\n        }\n\n        // Add styling hook to show button\n        utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n    }\n\n    // Make an element fullscreen\n    enter() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen doesn't need the request step\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            if (this.player.playing) {\n                this.target.webkitEnterFullscreen();\n            }\n        } else if (!Fullscreen.native) {\n            toggleFallback.call(this, true);\n        } else if (!this.prefix) {\n            this.target.requestFullScreen();\n        } else if (!utils.is.empty(this.prefix)) {\n            this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n        }\n    }\n\n    // Bail from fullscreen\n    exit() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitExitFullscreen();\n            this.player.play();\n        } else if (!Fullscreen.native) {\n            toggleFallback.call(this, false);\n        } else if (!this.prefix) {\n            document.cancelFullScreen();\n        } else if (!utils.is.empty(this.prefix)) {\n            document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n        }\n    }\n\n    // Toggle state\n    toggle() {\n        if (!this.active) {\n            this.enter();\n        } else {\n            this.exit();\n        }\n    }\n}\n\nexport default Fullscreen;\n"",""// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n    // Setup captions\n    setup() {\n        // Requires UI support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Set default language if not set\n        const stored = this.storage.get('language');\n\n        if (!utils.is.empty(stored)) {\n            this.captions.language = stored;\n        }\n\n        if (utils.is.empty(this.captions.language)) {\n            this.captions.language = this.config.captions.language.toLowerCase();\n        }\n\n        // Set captions enabled state if not set\n        if (!utils.is.boolean(this.captions.active)) {\n            const active = this.storage.get('captions');\n\n            if (utils.is.boolean(active)) {\n                this.captions.active = active;\n            } else {\n                this.captions.active = this.config.captions.active;\n            }\n        }\n\n        // Only Vimeo and HTML5 video supported at this point\n        if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n            // Clear menu and hide\n            if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n                controls.setCaptionsMenu.call(this);\n            }\n\n            return;\n        }\n        // Inject the container\n        if (!utils.is.element(this.elements.captions)) {\n            this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n            utils.insertAfter(this.elements.captions, this.elements.wrapper);\n        }\n\n        // Set the class hook\n        utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n        // Get tracks\n        const tracks = captions.getTracks.call(this);\n\n        // If no caption file exists, hide container for caption text\n        if (utils.is.empty(tracks)) {\n            return;\n        }\n\n        // Get browser info\n        const browser = utils.getBrowser();\n\n        // Fix IE captions if CORS is used\n        // Fetch captions and inject as blobs instead (data URIs not supported!)\n        if (browser.isIE && window.URL) {\n            const elements = this.media.querySelectorAll('track');\n\n            Array.from(elements).forEach(track => {\n                const src = track.getAttribute('src');\n                const href = utils.parseUrl(src);\n\n                if (href.hostname !== window.location.href.hostname && [\n                    'http:',\n                    'https:',\n                ].includes(href.protocol)) {\n                    utils\n                        .fetch(src, 'blob')\n                        .then(blob => {\n                            track.setAttribute('src', window.URL.createObjectURL(blob));\n                        })\n                        .catch(() => {\n                            utils.removeElement(track);\n                        });\n                }\n            });\n        }\n\n        // Set language\n        captions.setLanguage.call(this);\n\n        // Enable UI\n        captions.show.call(this);\n\n        // Set available languages in list\n        if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n            controls.setCaptionsMenu.call(this);\n        }\n    },\n\n    // Set the captions language\n    setLanguage() {\n        // Setup HTML5 track rendering\n        if (this.isHTML5 && this.isVideo) {\n            captions.getTracks.call(this).forEach(track => {\n                // Show track\n                utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n                // Turn off native caption rendering to avoid double captions\n                // eslint-disable-next-line\n                track.mode = 'hidden';\n            });\n\n            // Get current track\n            const currentTrack = captions.getCurrentTrack.call(this);\n\n            // Check if suported kind\n            if (utils.is.track(currentTrack)) {\n                // If we change the active track while a cue is already displayed we need to update it\n                if (Array.from(currentTrack.activeCues || []).length) {\n                    captions.setCue.call(this, currentTrack);\n                }\n            }\n        } else if (this.isVimeo && this.captions.active) {\n            this.embed.enableTextTrack(this.language);\n        }\n    },\n\n    // Get the tracks\n    getTracks() {\n        // Return empty array at least\n        if (utils.is.nullOrUndefined(this.media)) {\n            return [];\n        }\n\n        // Only get accepted kinds\n        return Array.from(this.media.textTracks || []).filter(track => [\n            'captions',\n            'subtitles',\n        ].includes(track.kind));\n    },\n\n    // Get the current track for the current language\n    getCurrentTrack() {\n        return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n    },\n\n    // Display active caption if it contains text\n    setCue(input) {\n        // Get the track from the event if needed\n        const track = utils.is.event(input) ? input.target : input;\n        const { activeCues } = track;\n        const active = activeCues.length && activeCues[0];\n        const currentTrack = captions.getCurrentTrack.call(this);\n\n        // Only display current track\n        if (track !== currentTrack) {\n            return;\n        }\n\n        // Display a cue, if there is one\n        if (utils.is.cue(active)) {\n            captions.setText.call(this, active.getCueAsHTML());\n        } else {\n            captions.setText.call(this, null);\n        }\n\n        utils.dispatchEvent.call(this, this.media, 'cuechange');\n    },\n\n    // Set the current caption\n    setText(input) {\n        // Requires UI\n        if (!this.supported.ui) {\n            return;\n        }\n\n        if (utils.is.element(this.elements.captions)) {\n            const content = utils.createElement('span');\n\n            // Empty the container\n            utils.emptyElement(this.elements.captions);\n\n            // Default to empty\n            const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n            // Set the span content\n            if (utils.is.string(caption)) {\n                content.textContent = caption.trim();\n            } else {\n                content.appendChild(caption);\n            }\n\n            // Set new caption text\n            this.elements.captions.appendChild(content);\n        } else {\n            this.debug.warn('No captions element to render to');\n        }\n    },\n\n    // Display captions container and button (for initialization)\n    show() {\n        // If there's no caption toggle, bail\n        if (!utils.is.element(this.elements.buttons.captions)) {\n            return;\n        }\n\n        // Try to load the value from storage\n        let active = this.storage.get('captions');\n\n        // Otherwise fall back to the default config\n        if (!utils.is.boolean(active)) {\n            ({ active } = this.config.captions);\n        } else {\n            this.captions.active = active;\n        }\n\n        if (active) {\n            utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n            utils.toggleState(this.elements.buttons.captions, true);\n        }\n    },\n};\n\nexport default captions;\n"",""// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\n\nconst ui = {\n    addStyleHook() {\n        utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n        utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n    },\n\n    // Toggle native HTML5 media controls\n    toggleNativeControls(toggle = false) {\n        if (toggle && this.isHTML5) {\n            this.media.setAttribute('controls', '');\n        } else {\n            this.media.removeAttribute('controls');\n        }\n    },\n\n    // Setup the UI\n    build() {\n        // Re-attach media element listeners\n        // TODO: Use event bubbling?\n        this.listeners.media();\n\n        // Don't setup interface if no support\n        if (!this.supported.ui) {\n            this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n            // Restore native controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Bail\n            return;\n        }\n\n        // Inject custom controls if not present\n        if (!utils.is.element(this.elements.controls)) {\n            // Inject custom controls\n            controls.inject.call(this);\n\n            // Re-attach control listeners\n            this.listeners.controls();\n        }\n\n        // If there's no controls, bail\n        if (!utils.is.element(this.elements.controls)) {\n            return;\n        }\n\n        // Remove native controls\n        ui.toggleNativeControls.call(this);\n\n        // Captions\n        captions.setup.call(this);\n\n        // Reset volume\n        this.volume = null;\n\n        // Reset mute state\n        this.muted = null;\n\n        // Reset speed\n        this.speed = null;\n\n        // Reset loop state\n        this.loop = null;\n\n        // Reset quality options\n        this.options.quality = [];\n\n        // Reset time display\n        ui.timeUpdate.call(this);\n\n        // Update the UI\n        ui.checkPlaying.call(this);\n\n        // Ready for API calls\n        this.ready = true;\n\n        // Ready event at end of execution stack\n        setTimeout(() => {\n            utils.dispatchEvent.call(this, this.media, 'ready');\n        }, 0);\n\n        // Set the title\n        ui.setTitle.call(this);\n    },\n\n    // Setup aria attribute for play and iframe title\n    setTitle() {\n        // Find the current text\n        let label = this.config.i18n.play;\n\n        // If there's a media title set, use that for the label\n        if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n            label += `, ${this.config.title}`;\n\n            // Set container label\n            this.elements.container.setAttribute('aria-label', this.config.title);\n        }\n\n        // If there's a play button, set label\n        if (utils.is.nodeList(this.elements.buttons.play)) {\n            Array.from(this.elements.buttons.play).forEach(button => {\n                button.setAttribute('aria-label', label);\n            });\n        }\n\n        // Set iframe title\n        // https://github.com/sampotts/plyr/issues/124\n        if (this.isEmbed) {\n            const iframe = utils.getElement.call(this, 'iframe');\n\n            if (!utils.is.element(iframe)) {\n                return;\n            }\n\n            // Default to media type\n            const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n            iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n        }\n    },\n\n    // Check playing state\n    checkPlaying() {\n        // Class hooks\n        utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n        utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n        // Set ARIA state\n        utils.toggleState(this.elements.buttons.play, this.playing);\n\n        // Toggle controls\n        this.toggleControls(!this.playing);\n    },\n\n    // Check if media is loading\n    checkLoading(event) {\n        this.loading = [\n            'stalled',\n            'waiting',\n        ].includes(event.type);\n\n        // Clear timer\n        clearTimeout(this.timers.loading);\n\n        // Timer to prevent flicker when seeking\n        this.timers.loading = setTimeout(() => {\n            // Toggle container class hook\n            utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n            // Show controls if loading, hide if done\n            this.toggleControls(this.loading);\n        }, this.loading ? 250 : 0);\n    },\n\n    // Check if media failed to load\n    checkFailed() {\n        // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n        this.failed = this.media.networkState === 3;\n\n        if (this.failed) {\n            utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n            utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n        }\n\n        // Clear timer\n        clearTimeout(this.timers.failed);\n\n        // Timer to prevent flicker when seeking\n        this.timers.loading = setTimeout(() => {\n            // Toggle container class hook\n            utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n            // Show controls if loading, hide if done\n            this.toggleControls(this.loading);\n        }, this.loading ? 250 : 0);\n    },\n\n    // Update volume UI and storage\n    updateVolume() {\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Update range\n        if (utils.is.element(this.elements.inputs.volume)) {\n            ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n        }\n\n        // Update mute state\n        if (utils.is.element(this.elements.buttons.mute)) {\n            utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n        }\n    },\n\n    // Update seek value and lower fill\n    setRange(target, value = 0) {\n        if (!utils.is.element(target)) {\n            return;\n        }\n\n        // eslint-disable-next-line\n        target.value = value;\n\n        // Webkit range fill\n        controls.updateRangeFill.call(this, target);\n    },\n\n    // Set <progress> value\n    setProgress(target, input) {\n        const value = utils.is.number(input) ? input : 0;\n        const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n        // Update value and label\n        if (utils.is.element(progress)) {\n            progress.value = value;\n\n            // Update text label inside\n            const label = progress.getElementsByTagName('span')[0];\n            if (utils.is.element(label)) {\n                label.childNodes[0].nodeValue = value;\n            }\n        }\n    },\n\n    // Update <progress> elements\n    updateProgress(event) {\n        if (!this.supported.ui || !utils.is.event(event)) {\n            return;\n        }\n\n        let value = 0;\n\n        if (event) {\n            switch (event.type) {\n                // Video playing\n                case 'timeupdate':\n                case 'seeking':\n                    value = utils.getPercentage(this.currentTime, this.duration);\n\n                    // Set seek range value only if it's a 'natural' time event\n                    if (event.type === 'timeupdate') {\n                        ui.setRange.call(this, this.elements.inputs.seek, value);\n                    }\n\n                    break;\n\n                // Check buffer status\n                case 'playing':\n                case 'progress':\n                    ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n    },\n\n    // Update the displayed time\n    updateTimeDisplay(target = null, time = 0, inverted = false) {\n        // Bail if there's no element to display or the value isn't a number\n        if (!utils.is.element(target) || !utils.is.number(time)) {\n            return;\n        }\n\n        // Always display hours if duration is over an hour\n        const displayHours = utils.getHours(this.duration) > 0;\n\n        // eslint-disable-next-line no-param-reassign\n        target.textContent = utils.formatTime(time, displayHours, inverted);\n    },\n\n    // Handle time change event\n    timeUpdate(event) {\n        // Only invert if only one time element is displayed and used for both duration and currentTime\n        const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n        // Duration\n        ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n        // Ignore updates while seeking\n        if (event && event.type === 'timeupdate' && this.media.seeking) {\n            return;\n        }\n\n        // Playing progress\n        ui.updateProgress.call(this, event);\n    },\n\n    // Show the duration on metadataloaded\n    durationUpdate() {\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // If there's a spot to display duration\n        const hasDuration = utils.is.element(this.elements.display.duration);\n\n        // If there's only one time display, display duration there\n        if (!hasDuration && this.config.displayDuration && this.paused) {\n            ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n        }\n\n        // If there's a duration element, update content\n        if (hasDuration) {\n            ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n        }\n\n        // Update the tooltip (if visible)\n        controls.updateSeekTooltip.call(this);\n    },\n};\n\nexport default ui;\n"",""// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n    // Webkit polyfill for lower fill range\n    updateRangeFill(target) {\n        // WebKit only\n        if (!browser.isWebkit) {\n            return;\n        }\n\n        // Get range from event if event passed\n        const range = utils.is.event(target) ? target.target : target;\n\n        // Needs to be a valid <input type='range'>\n        if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n            return;\n        }\n\n        // Set CSS custom property\n        range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n    },\n\n    // Get icon URL\n    getIconUrl() {\n        return {\n            url: this.config.iconUrl,\n            absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n        };\n    },\n\n    // Create <svg> icon\n    createIcon(type, attributes) {\n        const namespace = 'http://www.w3.org/2000/svg';\n        const iconUrl = controls.getIconUrl.call(this);\n        const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n        // Create <svg>\n        const icon = document.createElementNS(namespace, 'svg');\n        utils.setAttributes(\n            icon,\n            utils.extend(attributes, {\n                role: 'presentation',\n            }),\n        );\n\n        // Create the <use> to reference sprite\n        const use = document.createElementNS(namespace, 'use');\n        const path = `${iconPath}-${type}`;\n\n        // Set `href` attributes\n        // https://github.com/sampotts/plyr/issues/460\n        // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n        if ('href' in use) {\n            use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n        } else {\n            use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n        }\n\n        // Add <use> to <svg>\n        icon.appendChild(use);\n\n        return icon;\n    },\n\n    // Create hidden text label\n    createLabel(type, attr) {\n        let text = this.config.i18n[type];\n        const attributes = Object.assign({}, attr);\n\n        switch (type) {\n            case 'pip':\n                text = 'PIP';\n                break;\n\n            case 'airplay':\n                text = 'AirPlay';\n                break;\n\n            default:\n                break;\n        }\n\n        if ('class' in attributes) {\n            attributes.class += ` ${this.config.classNames.hidden}`;\n        } else {\n            attributes.class = this.config.classNames.hidden;\n        }\n\n        return utils.createElement('span', attributes, text);\n    },\n\n    // Create a badge\n    createBadge(text) {\n        if (utils.is.empty(text)) {\n            return null;\n        }\n\n        const badge = utils.createElement('span', {\n            class: this.config.classNames.menu.value,\n        });\n\n        badge.appendChild(\n            utils.createElement(\n                'span',\n                {\n                    class: this.config.classNames.menu.badge,\n                },\n                text,\n            ),\n        );\n\n        return badge;\n    },\n\n    // Create a <button>\n    createButton(buttonType, attr) {\n        const button = utils.createElement('button');\n        const attributes = Object.assign({}, attr);\n        let type = buttonType;\n\n        let toggle = false;\n        let label;\n        let icon;\n        let labelPressed;\n        let iconPressed;\n\n        if (!('type' in attributes)) {\n            attributes.type = 'button';\n        }\n\n        if ('class' in attributes) {\n            if (attributes.class.includes(this.config.classNames.control)) {\n                attributes.class += ` ${this.config.classNames.control}`;\n            }\n        } else {\n            attributes.class = this.config.classNames.control;\n        }\n\n        // Large play button\n        switch (type) {\n            case 'play':\n                toggle = true;\n                label = 'play';\n                labelPressed = 'pause';\n                icon = 'play';\n                iconPressed = 'pause';\n                break;\n\n            case 'mute':\n                toggle = true;\n                label = 'mute';\n                labelPressed = 'unmute';\n                icon = 'volume';\n                iconPressed = 'muted';\n                break;\n\n            case 'captions':\n                toggle = true;\n                label = 'enableCaptions';\n                labelPressed = 'disableCaptions';\n                icon = 'captions-off';\n                iconPressed = 'captions-on';\n                break;\n\n            case 'fullscreen':\n                toggle = true;\n                label = 'enterFullscreen';\n                labelPressed = 'exitFullscreen';\n                icon = 'enter-fullscreen';\n                iconPressed = 'exit-fullscreen';\n                break;\n\n            case 'play-large':\n                attributes.class += ` ${this.config.classNames.control}--overlaid`;\n                type = 'play';\n                label = 'play';\n                icon = 'play';\n                break;\n\n            default:\n                label = type;\n                icon = type;\n        }\n\n        // Setup toggle icon and labels\n        if (toggle) {\n            // Icon\n            button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n            button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n            // Label/Tooltip\n            button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n            button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n            // Add aria attributes\n            attributes['aria-pressed'] = false;\n            attributes['aria-label'] = this.config.i18n[label];\n        } else {\n            button.appendChild(controls.createIcon.call(this, icon));\n            button.appendChild(controls.createLabel.call(this, label));\n        }\n\n        // Merge attributes\n        utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n        utils.setAttributes(button, attributes);\n\n        // We have multiple play buttons\n        if (type === 'play') {\n            if (!utils.is.array(this.elements.buttons[type])) {\n                this.elements.buttons[type] = [];\n            }\n\n            this.elements.buttons[type].push(button);\n        } else {\n            this.elements.buttons[type] = button;\n        }\n\n        return button;\n    },\n\n    // Create an <input type='range'>\n    createRange(type, attributes) {\n        // Seek label\n        const label = utils.createElement(\n            'label',\n            {\n                for: attributes.id,\n                class: this.config.classNames.hidden,\n            },\n            this.config.i18n[type],\n        );\n\n        // Seek input\n        const input = utils.createElement(\n            'input',\n            utils.extend(\n                utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n                {\n                    type: 'range',\n                    min: 0,\n                    max: 100,\n                    step: 0.01,\n                    value: 0,\n                    autocomplete: 'off',\n                },\n                attributes,\n            ),\n        );\n\n        this.elements.inputs[type] = input;\n\n        // Set the fill for webkit now\n        controls.updateRangeFill.call(this, input);\n\n        return {\n            label,\n            input,\n        };\n    },\n\n    // Create a <progress>\n    createProgress(type, attributes) {\n        const progress = utils.createElement(\n            'progress',\n            utils.extend(\n                utils.getAttributesFromSelector(this.config.selectors.display[type]),\n                {\n                    min: 0,\n                    max: 100,\n                    value: 0,\n                },\n                attributes,\n            ),\n        );\n\n        // Create the label inside\n        if (type !== 'volume') {\n            progress.appendChild(utils.createElement('span', null, '0'));\n\n            let suffix = '';\n            switch (type) {\n                case 'played':\n                    suffix = this.config.i18n.played;\n                    break;\n\n                case 'buffer':\n                    suffix = this.config.i18n.buffered;\n                    break;\n\n                default:\n                    break;\n            }\n\n            progress.textContent = `% ${suffix.toLowerCase()}`;\n        }\n\n        this.elements.display[type] = progress;\n\n        return progress;\n    },\n\n    // Create time display\n    createTime(type) {\n        const container = utils.createElement('div', {\n            class: 'plyr__time',\n        });\n\n        container.appendChild(\n            utils.createElement(\n                'span',\n                {\n                    class: this.config.classNames.hidden,\n                },\n                this.config.i18n[type],\n            ),\n        );\n\n        container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n        this.elements.display[type] = container;\n\n        return container;\n    },\n\n    // Create a settings menu item\n    createMenuItem(value, list, type, title, badge = null, checked = false) {\n        const item = utils.createElement('li');\n\n        const label = utils.createElement('label', {\n            class: this.config.classNames.control,\n        });\n\n        const radio = utils.createElement(\n            'input',\n            utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n                type: 'radio',\n                name: `plyr-${type}`,\n                value,\n                checked,\n                class: 'plyr__sr-only',\n            }),\n        );\n\n        const faux = utils.createElement('span', { 'aria-hidden': true });\n\n        label.appendChild(radio);\n        label.appendChild(faux);\n        label.insertAdjacentHTML('beforeend', title);\n\n        if (utils.is.element(badge)) {\n            label.appendChild(badge);\n        }\n\n        item.appendChild(label);\n        list.appendChild(item);\n    },\n\n    // Update hover tooltip for seeking\n    updateSeekTooltip(event) {\n        // Bail if setting not true\n        if (\n            !this.config.tooltips.seek ||\n            !utils.is.element(this.elements.inputs.seek) ||\n            !utils.is.element(this.elements.display.seekTooltip) ||\n            this.duration === 0\n        ) {\n            return;\n        }\n\n        // Calculate percentage\n        let percent = 0;\n        const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n        const visible = `${this.config.classNames.tooltip}--visible`;\n\n        // Determine percentage, if already visible\n        if (utils.is.event(event)) {\n            percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n        } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n            percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n        } else {\n            return;\n        }\n\n        // Set bounds\n        if (percent < 0) {\n            percent = 0;\n        } else if (percent > 100) {\n            percent = 100;\n        }\n\n        // Display the time a click would seek to\n        ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n        // Set position\n        this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n        // Show/hide the tooltip\n        // If the event is a moues in/out and percentage is inside bounds\n        if (utils.is.event(event) && [\n            'mouseenter',\n            'mouseleave',\n        ].includes(event.type)) {\n            utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n        }\n    },\n\n    // Hide/show a tab\n    toggleTab(setting, toggle) {\n        const tab = this.elements.settings.tabs[setting];\n        const pane = this.elements.settings.panes[setting];\n\n        utils.toggleHidden(tab, !toggle);\n        utils.toggleHidden(pane, !toggle);\n    },\n\n    // Set the YouTube quality menu\n    // TODO: Support for HTML5\n    setQualityMenu(options) {\n        // Menu required\n        if (!utils.is.element(this.elements.settings.panes.quality)) {\n            return;\n        }\n\n        const type = 'quality';\n        const list = this.elements.settings.panes.quality.querySelector('ul');\n\n        // Set options if passed and filter based on config\n        if (utils.is.array(options)) {\n            this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n        } else {\n            this.options.quality = this.config.quality.options;\n        }\n\n        // Toggle the pane and tab\n        const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n        controls.toggleTab.call(this, type, toggle);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Empty the menu\n        utils.emptyElement(list);\n\n        // Get the badge HTML for HD, 4K etc\n        const getBadge = quality => {\n            let label = '';\n\n            switch (quality) {\n                case 'hd2160':\n                    label = '4K';\n                    break;\n\n                case 'hd1440':\n                    label = 'WQHD';\n                    break;\n\n                case 'hd1080':\n                    label = 'HD';\n                    break;\n\n                case 'hd720':\n                    label = 'HD';\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (!label.length) {\n                return null;\n            }\n\n            return controls.createBadge.call(this, label);\n        };\n\n        this.options.quality.forEach(quality =>\n            controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n        );\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Translate a value into a nice label\n    // TODO: Localisation\n    getLabel(setting, value) {\n        switch (setting) {\n            case 'speed':\n                return value === 1 ? 'Normal' : `${value}&times;`;\n\n            case 'quality':\n                switch (value) {\n                    case 'hd2160':\n                        return '2160P';\n                    case 'hd1440':\n                        return '1440P';\n                    case 'hd1080':\n                        return '1080P';\n                    case 'hd720':\n                        return '720P';\n                    case 'large':\n                        return '480P';\n                    case 'medium':\n                        return '360P';\n                    case 'small':\n                        return '240P';\n                    case 'tiny':\n                        return 'Tiny';\n                    case 'default':\n                        return 'Auto';\n                    default:\n                        return value;\n                }\n\n            case 'captions':\n                return controls.getLanguage.call(this);\n\n            default:\n                return null;\n        }\n    },\n\n    // Update the selected setting\n    updateSetting(setting, container) {\n        const pane = this.elements.settings.panes[setting];\n        let value = null;\n        let list = container;\n\n        switch (setting) {\n            case 'captions':\n                value = this.captions.active ? this.captions.language : '';\n                break;\n\n            default:\n                value = this[setting];\n\n                // Get default\n                if (utils.is.empty(value)) {\n                    value = this.config[setting].default;\n                }\n\n                // Unsupported value\n                if (!this.options[setting].includes(value)) {\n                    this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n                    return;\n                }\n\n                // Disabled value\n                if (!this.config[setting].options.includes(value)) {\n                    this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n                    return;\n                }\n\n                break;\n        }\n\n        // Get the list if we need to\n        if (!utils.is.element(list)) {\n            list = pane && pane.querySelector('ul');\n        }\n\n        // Update the label\n        if (!utils.is.empty(value)) {\n            const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n            label.innerHTML = controls.getLabel.call(this, setting, value);\n        }\n\n        // Find the radio option\n        const target = list && list.querySelector(`input[value=\""${value}\""]`);\n\n        if (utils.is.element(target)) {\n            // Check it\n            target.checked = true;\n        }\n    },\n\n    // Set the looping options\n    /* setLoopMenu() {\n        // Menu required\n        if (!utils.is.element(this.elements.settings.panes.loop)) {\n            return;\n        }\n\n        const options = ['start', 'end', 'all', 'reset'];\n        const list = this.elements.settings.panes.loop.querySelector('ul');\n\n        // Show the pane and tab\n        utils.toggleHidden(this.elements.settings.tabs.loop, false);\n        utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n        // Toggle the pane and tab\n        const toggle = !utils.is.empty(this.loop.options);\n        controls.toggleTab.call(this, 'loop', toggle);\n\n        // Empty the menu\n        utils.emptyElement(list);\n\n        options.forEach(option => {\n            const item = utils.createElement('li');\n\n            const button = utils.createElement(\n                'button',\n                utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n                    type: 'button',\n                    class: this.config.classNames.control,\n                    'data-plyr-loop-action': option,\n                }),\n                this.config.i18n[option]\n            );\n\n            if (['start', 'end'].includes(option)) {\n                const badge = controls.createBadge.call(this, '00:00');\n                button.appendChild(badge);\n            }\n\n            item.appendChild(button);\n            list.appendChild(item);\n        });\n    }, */\n\n    // Get current selected caption language\n    // TODO: rework this to user the getter in the API?\n    getLanguage() {\n        if (!this.supported.ui) {\n            return null;\n        }\n\n        if (!support.textTracks || !captions.getTracks.call(this).length) {\n            return this.config.i18n.none;\n        }\n\n        if (this.captions.active) {\n            const currentTrack = captions.getCurrentTrack.call(this);\n\n            if (utils.is.track(currentTrack)) {\n                return currentTrack.label;\n            }\n        }\n\n        return this.config.i18n.disabled;\n    },\n\n    // Set a list of available captions languages\n    setCaptionsMenu() {\n        // TODO: Captions or language? Currently it's mixed\n        const type = 'captions';\n        const list = this.elements.settings.panes.captions.querySelector('ul');\n\n        // Toggle the pane and tab\n        const hasTracks = captions.getTracks.call(this).length;\n        controls.toggleTab.call(this, type, hasTracks);\n\n        // Empty the menu\n        utils.emptyElement(list);\n\n        // If there's no captions, bail\n        if (!hasTracks) {\n            return;\n        }\n\n        // Re-map the tracks into just the data we need\n        const tracks = captions.getTracks.call(this).map(track => ({\n            language: track.language,\n            label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n        }));\n\n        // Add the \""None\"" option to turn off captions\n        tracks.unshift({\n            language: '',\n            label: this.config.i18n.none,\n        });\n\n        // Generate options\n        tracks.forEach(track => {\n            controls.createMenuItem.call(\n                this,\n                track.language,\n                list,\n                'language',\n                track.label || track.language,\n                controls.createBadge.call(this, track.language.toUpperCase()),\n                track.language.toLowerCase() === this.captions.language.toLowerCase(),\n            );\n        });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set a list of available captions languages\n    setSpeedMenu() {\n        // Menu required\n        if (!utils.is.element(this.elements.settings.panes.speed)) {\n            return;\n        }\n\n        const type = 'speed';\n\n        // Set the default speeds\n        if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n            this.options.speed = [\n                0.5,\n                0.75,\n                1,\n                1.25,\n                1.5,\n                1.75,\n                2,\n            ];\n        }\n\n        // Set options if passed and filter based on config\n        this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n        // Toggle the pane and tab\n        const toggle = !utils.is.empty(this.options.speed);\n        controls.toggleTab.call(this, type, toggle);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Get the list to populate\n        const list = this.elements.settings.panes.speed.querySelector('ul');\n\n        // Show the pane and tab\n        utils.toggleHidden(this.elements.settings.tabs.speed, false);\n        utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n        // Empty the menu\n        utils.emptyElement(list);\n\n        // Create items\n        this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Show/hide menu\n    toggleMenu(event) {\n        const { form } = this.elements.settings;\n        const button = this.elements.buttons.settings;\n\n        // Menu and button are required\n        if (!utils.is.element(form) || !utils.is.element(button)) {\n            return;\n        }\n\n        const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n        if (utils.is.event(event)) {\n            const isMenuItem = utils.is.element(form) && form.contains(event.target);\n            const isButton = event.target === this.elements.buttons.settings;\n\n            // If the click was inside the form or if the click\n            // wasn't the button or menu item and we're trying to\n            // show the menu (a doc click shouldn't show the menu)\n            if (isMenuItem || (!isMenuItem && !isButton && show)) {\n                return;\n            }\n\n            // Prevent the toggle being caught by the doc listener\n            if (isButton) {\n                event.stopPropagation();\n            }\n        }\n\n        // Set form and button attributes\n        if (utils.is.element(button)) {\n            button.setAttribute('aria-expanded', show);\n        }\n\n        if (utils.is.element(form)) {\n            form.setAttribute('aria-hidden', !show);\n            utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n            if (show) {\n                form.removeAttribute('tabindex');\n            } else {\n                form.setAttribute('tabindex', -1);\n            }\n        }\n    },\n\n    // Get the natural size of a tab\n    getTabSize(tab) {\n        const clone = tab.cloneNode(true);\n        clone.style.position = 'absolute';\n        clone.style.opacity = 0;\n        clone.setAttribute('aria-hidden', false);\n\n        // Prevent input's being unchecked due to the name being identical\n        Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n            const name = input.getAttribute('name');\n            input.setAttribute('name', `${name}-clone`);\n        });\n\n        // Append to parent so we get the \""real\"" size\n        tab.parentNode.appendChild(clone);\n\n        // Get the sizes before we remove\n        const width = clone.scrollWidth;\n        const height = clone.scrollHeight;\n\n        // Remove from the DOM\n        utils.removeElement(clone);\n\n        return {\n            width,\n            height,\n        };\n    },\n\n    // Toggle Menu\n    showTab(event) {\n        const { menu } = this.elements.settings;\n        const tab = event.target;\n        const show = tab.getAttribute('aria-expanded') === 'false';\n        const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n        // Nothing to show, bail\n        if (!utils.is.element(pane)) {\n            return;\n        }\n\n        // Are we targetting a tab? If not, bail\n        const isTab = pane.getAttribute('role') === 'tabpanel';\n        if (!isTab) {\n            return;\n        }\n\n        // Hide all other tabs\n        // Get other tabs\n        const current = menu.querySelector('[role=\""tabpanel\""][aria-hidden=\""false\""]');\n        const container = current.parentNode;\n\n        // Set other toggles to be expanded false\n        Array.from(menu.querySelectorAll(`[aria-controls=\""${current.getAttribute('id')}\""]`)).forEach(toggle => {\n            toggle.setAttribute('aria-expanded', false);\n        });\n\n        // If we can do fancy animations, we'll animate the height/width\n        if (support.transitions && !support.reducedMotion) {\n            // Set the current width as a base\n            container.style.width = `${current.scrollWidth}px`;\n            container.style.height = `${current.scrollHeight}px`;\n\n            // Get potential sizes\n            const size = controls.getTabSize.call(this, pane);\n\n            // Restore auto height/width\n            const restore = e => {\n                // We're only bothered about height and width on the container\n                if (e.target !== container || ![\n                    'width',\n                    'height',\n                ].includes(e.propertyName)) {\n                    return;\n                }\n\n                // Revert back to auto\n                container.style.width = '';\n                container.style.height = '';\n\n                // Only listen once\n                utils.off(container, utils.transitionEndEvent, restore);\n            };\n\n            // Listen for the transition finishing and restore auto height/width\n            utils.on(container, utils.transitionEndEvent, restore);\n\n            // Set dimensions to target\n            container.style.width = `${size.width}px`;\n            container.style.height = `${size.height}px`;\n        }\n\n        // Set attributes on current tab\n        current.setAttribute('aria-hidden', true);\n        current.setAttribute('tabindex', -1);\n\n        // Set attributes on target\n        pane.setAttribute('aria-hidden', !show);\n        tab.setAttribute('aria-expanded', show);\n        pane.removeAttribute('tabindex');\n\n        // Focus the first item\n        pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n    },\n\n    // Build the default HTML\n    // TODO: Set order based on order in the config.controls array?\n    create(data) {\n        // Do nothing if we want no controls\n        if (utils.is.empty(this.config.controls)) {\n            return null;\n        }\n\n        // Create the container\n        const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n        // Restart button\n        if (this.config.controls.includes('restart')) {\n            container.appendChild(controls.createButton.call(this, 'restart'));\n        }\n\n        // Rewind button\n        if (this.config.controls.includes('rewind')) {\n            container.appendChild(controls.createButton.call(this, 'rewind'));\n        }\n\n        // Play/Pause button\n        if (this.config.controls.includes('play')) {\n            container.appendChild(controls.createButton.call(this, 'play'));\n        }\n\n        // Fast forward button\n        if (this.config.controls.includes('fast-forward')) {\n            container.appendChild(controls.createButton.call(this, 'fast-forward'));\n        }\n\n        // Progress\n        if (this.config.controls.includes('progress')) {\n            const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n            // Seek range slider\n            const seek = controls.createRange.call(this, 'seek', {\n                id: `plyr-seek-${data.id}`,\n            });\n            progress.appendChild(seek.label);\n            progress.appendChild(seek.input);\n\n            // Buffer progress\n            progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n            // TODO: Add loop display indicator\n\n            // Seek tooltip\n            if (this.config.tooltips.seek) {\n                const tooltip = utils.createElement(\n                    'span',\n                    {\n                        role: 'tooltip',\n                        class: this.config.classNames.tooltip,\n                    },\n                    '00:00',\n                );\n\n                progress.appendChild(tooltip);\n                this.elements.display.seekTooltip = tooltip;\n            }\n\n            this.elements.progress = progress;\n            container.appendChild(this.elements.progress);\n        }\n\n        // Media current time display\n        if (this.config.controls.includes('current-time')) {\n            container.appendChild(controls.createTime.call(this, 'currentTime'));\n        }\n\n        // Media duration display\n        if (this.config.controls.includes('duration')) {\n            container.appendChild(controls.createTime.call(this, 'duration'));\n        }\n\n        // Toggle mute button\n        if (this.config.controls.includes('mute')) {\n            container.appendChild(controls.createButton.call(this, 'mute'));\n        }\n\n        // Volume range control\n        if (this.config.controls.includes('volume')) {\n            const volume = utils.createElement('div', {\n                class: 'plyr__volume',\n            });\n\n            // Set the attributes\n            const attributes = {\n                max: 1,\n                step: 0.05,\n                value: this.config.volume,\n            };\n\n            // Create the volume range slider\n            const range = controls.createRange.call(\n                this,\n                'volume',\n                utils.extend(attributes, {\n                    id: `plyr-volume-${data.id}`,\n                }),\n            );\n            volume.appendChild(range.label);\n            volume.appendChild(range.input);\n\n            this.elements.volume = volume;\n\n            container.appendChild(volume);\n        }\n\n        // Toggle captions button\n        if (this.config.controls.includes('captions')) {\n            container.appendChild(controls.createButton.call(this, 'captions'));\n        }\n\n        // Settings button / menu\n        if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n            const menu = utils.createElement('div', {\n                class: 'plyr__menu',\n            });\n\n            menu.appendChild(\n                controls.createButton.call(this, 'settings', {\n                    id: `plyr-settings-toggle-${data.id}`,\n                    'aria-haspopup': true,\n                    'aria-controls': `plyr-settings-${data.id}`,\n                    'aria-expanded': false,\n                }),\n            );\n\n            const form = utils.createElement('form', {\n                class: 'plyr__menu__container',\n                id: `plyr-settings-${data.id}`,\n                'aria-hidden': true,\n                'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n                role: 'tablist',\n                tabindex: -1,\n            });\n\n            const inner = utils.createElement('div');\n\n            const home = utils.createElement('div', {\n                id: `plyr-settings-${data.id}-home`,\n                'aria-hidden': false,\n                'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n                role: 'tabpanel',\n            });\n\n            // Create the tab list\n            const tabs = utils.createElement('ul', {\n                role: 'tablist',\n            });\n\n            // Build the tabs\n            this.config.settings.forEach(type => {\n                const tab = utils.createElement('li', {\n                    role: 'tab',\n                    hidden: '',\n                });\n\n                const button = utils.createElement(\n                    'button',\n                    utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n                        type: 'button',\n                        class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n                        id: `plyr-settings-${data.id}-${type}-tab`,\n                        'aria-haspopup': true,\n                        'aria-controls': `plyr-settings-${data.id}-${type}`,\n                        'aria-expanded': false,\n                    }),\n                    this.config.i18n[type],\n                );\n\n                const value = utils.createElement('span', {\n                    class: this.config.classNames.menu.value,\n                });\n\n                // Speed contains HTML entities\n                value.innerHTML = data[type];\n\n                button.appendChild(value);\n                tab.appendChild(button);\n                tabs.appendChild(tab);\n\n                this.elements.settings.tabs[type] = tab;\n            });\n\n            home.appendChild(tabs);\n            inner.appendChild(home);\n\n            // Build the panes\n            this.config.settings.forEach(type => {\n                const pane = utils.createElement('div', {\n                    id: `plyr-settings-${data.id}-${type}`,\n                    'aria-hidden': true,\n                    'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n                    role: 'tabpanel',\n                    tabindex: -1,\n                    hidden: '',\n                });\n\n                const back = utils.createElement(\n                    'button',\n                    {\n                        type: 'button',\n                        class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n                        'aria-haspopup': true,\n                        'aria-controls': `plyr-settings-${data.id}-home`,\n                        'aria-expanded': false,\n                    },\n                    this.config.i18n[type],\n                );\n\n                pane.appendChild(back);\n\n                const options = utils.createElement('ul');\n\n                pane.appendChild(options);\n                inner.appendChild(pane);\n\n                this.elements.settings.panes[type] = pane;\n            });\n\n            form.appendChild(inner);\n            menu.appendChild(form);\n            container.appendChild(menu);\n\n            this.elements.settings.form = form;\n            this.elements.settings.menu = menu;\n        }\n\n        // Picture in picture button\n        if (this.config.controls.includes('pip') && support.pip) {\n            container.appendChild(controls.createButton.call(this, 'pip'));\n        }\n\n        // Airplay button\n        if (this.config.controls.includes('airplay') && support.airplay) {\n            container.appendChild(controls.createButton.call(this, 'airplay'));\n        }\n\n        // Toggle fullscreen button\n        if (this.config.controls.includes('fullscreen')) {\n            container.appendChild(controls.createButton.call(this, 'fullscreen'));\n        }\n\n        // Larger overlaid play button\n        if (this.config.controls.includes('play-large')) {\n            this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n        }\n\n        this.elements.controls = container;\n\n        if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n            controls.setSpeedMenu.call(this);\n        }\n\n        return container;\n    },\n\n    // Insert controls\n    inject() {\n        // Sprite\n        if (this.config.loadSprite) {\n            const icon = controls.getIconUrl.call(this);\n\n            // Only load external sprite using AJAX\n            if (icon.absolute) {\n                utils.loadSprite(icon.url, 'sprite-plyr');\n            }\n        }\n\n        // Create a unique ID\n        this.id = Math.floor(Math.random() * 10000);\n\n        // Null by default\n        let container = null;\n        this.elements.controls = null;\n\n        // HTML or Element passed as the option\n        if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n            container = this.config.controls;\n        } else if (utils.is.function(this.config.controls)) {\n            // A custom function to build controls\n            // The function can return a HTMLElement or String\n            container = this.config.controls({\n                id: this.id,\n                seektime: this.config.seekTime,\n                title: this.config.title,\n            });\n        } else {\n            // Create controls\n            container = controls.create.call(this, {\n                id: this.id,\n                seektime: this.config.seekTime,\n                speed: this.speed,\n                quality: this.quality,\n                captions: controls.getLanguage.call(this),\n                // TODO: Looping\n                // loop: 'None',\n            });\n        }\n\n        // Controls container\n        let target;\n\n        // Inject to custom location\n        if (utils.is.string(this.config.selectors.controls.container)) {\n            target = document.querySelector(this.config.selectors.controls.container);\n        }\n\n        // Inject into the container by default\n        if (!utils.is.element(target)) {\n            target = this.elements.container;\n        }\n\n        // Inject controls HTML\n        if (utils.is.element(container)) {\n            target.appendChild(container);\n        } else {\n            target.insertAdjacentHTML('beforeend', container);\n        }\n\n        // Find the elements if need be\n        if (!utils.is.element(this.elements.controls)) {\n            utils.findElements.call(this);\n        }\n\n        // Edge sometimes doesn't finish the paint so force a redraw\n        if (window.navigator.userAgent.includes('Edge')) {\n            utils.repaint(target);\n        }\n\n        // Setup tooltips\n        if (this.config.tooltips.controls) {\n            const labels = utils.getElements.call(\n                this,\n                [\n                    this.config.selectors.controls.wrapper,\n                    ' ',\n                    this.config.selectors.labels,\n                    ' .',\n                    this.config.classNames.hidden,\n                ].join(''),\n            );\n\n            Array.from(labels).forEach(label => {\n                utils.toggleClass(label, this.config.classNames.hidden, false);\n                utils.toggleClass(label, this.config.classNames.tooltip, true);\n                label.setAttribute('role', 'tooltip');\n            });\n        }\n    },\n};\n\nexport default controls;\n"",""// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n    constructor(player) {\n        this.player = player;\n        this.lastKey = null;\n\n        this.handleKey = this.handleKey.bind(this);\n        this.toggleMenu = this.toggleMenu.bind(this);\n    }\n\n    // Handle key presses\n    handleKey(event) {\n        const code = event.keyCode ? event.keyCode : event.which;\n        const pressed = event.type === 'keydown';\n        const repeat = pressed && code === this.lastKey;\n\n        // Bail if a modifier key is set\n        if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n            return;\n        }\n\n        // If the event is bubbled from the media element\n        // Firefox doesn't get the keycode for whatever reason\n        if (!utils.is.number(code)) {\n            return;\n        }\n\n        // Seek by the number keys\n        const seekByKey = () => {\n            // Divide the max duration into 10th's and times by the number value\n            this.player.currentTime = this.player.duration / 10 * (code - 48);\n        };\n\n        // Handle the key on keydown\n        // Reset on keyup\n        if (pressed) {\n            // Which keycodes should we prevent default\n            const preventDefault = [\n                48,\n                49,\n                50,\n                51,\n                52,\n                53,\n                54,\n                56,\n                57,\n                32,\n                75,\n                38,\n                40,\n                77,\n                39,\n                37,\n                70,\n                67,\n                73,\n                76,\n                79,\n            ];\n\n            // Check focused element\n            // and if the focused element is not editable (e.g. text input)\n            // and any that accept key input http://webaim.org/techniques/keyboard/\n            const focused = utils.getFocusElement();\n            if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n                return;\n            }\n\n            // If the code is found prevent default (e.g. prevent scrolling for arrows)\n            if (preventDefault.includes(code)) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            switch (code) {\n                case 48:\n                case 49:\n                case 50:\n                case 51:\n                case 52:\n                case 53:\n                case 54:\n                case 55:\n                case 56:\n                case 57:\n                    // 0-9\n                    if (!repeat) {\n                        seekByKey();\n                    }\n                    break;\n\n                case 32:\n                case 75:\n                    // Space and K key\n                    if (!repeat) {\n                        this.player.togglePlay();\n                    }\n                    break;\n\n                case 38:\n                    // Arrow up\n                    this.player.increaseVolume(0.1);\n                    break;\n\n                case 40:\n                    // Arrow down\n                    this.player.decreaseVolume(0.1);\n                    break;\n\n                case 77:\n                    // M key\n                    if (!repeat) {\n                        this.player.muted = !this.player.muted;\n                    }\n                    break;\n\n                case 39:\n                    // Arrow forward\n                    this.player.forward();\n                    break;\n\n                case 37:\n                    // Arrow back\n                    this.player.rewind();\n                    break;\n\n                case 70:\n                    // F key\n                    this.player.fullscreen.toggle();\n                    break;\n\n                case 67:\n                    // C key\n                    if (!repeat) {\n                        this.player.toggleCaptions();\n                    }\n                    break;\n\n                case 76:\n                    // L key\n                    this.player.loop = !this.player.loop;\n                    break;\n\n                /* case 73:\n                    this.setLoop('start');\n                    break;\n\n                case 76:\n                    this.setLoop();\n                    break;\n\n                case 79:\n                    this.setLoop('end');\n                    break; */\n\n                default:\n                    break;\n            }\n\n            // Escape is handle natively when in full screen\n            // So we only need to worry about non native\n            if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n                this.player.fullscreen.toggle();\n            }\n\n            // Store last code for next cycle\n            this.lastKey = code;\n        } else {\n            this.lastKey = null;\n        }\n    }\n\n    // Toggle menu\n    toggleMenu(event) {\n        controls.toggleMenu.call(this.player, event);\n    }\n\n    // Global window & document listeners\n    global(toggle = true) {\n        // Keyboard shortcuts\n        if (this.player.config.keyboard.global) {\n            utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n        }\n\n        // Click anywhere closes menu\n        utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n    }\n\n    // Container listeners\n    container() {\n        // Keyboard shortcuts\n        if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n            utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n        }\n\n        // Detect tab focus\n        // Remove class on blur/focusout\n        utils.on(this.player.elements.container, 'focusout', event => {\n            utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n        });\n\n        // Add classname to tabbed elements\n        utils.on(this.player.elements.container, 'keydown', event => {\n            if (event.keyCode !== 9) {\n                return;\n            }\n\n            // Delay the adding of classname until the focus has changed\n            // This event fires before the focusin event\n            setTimeout(() => {\n                utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n            }, 0);\n        });\n\n        // Toggle controls visibility based on mouse movement\n        if (this.player.config.hideControls) {\n            // Toggle controls on mouse events and entering fullscreen\n            utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n                this.player.toggleControls(event);\n            });\n        }\n    }\n\n    // Listen for media events\n    media() {\n        // Time change on media\n        utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n        // Display duration\n        utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n        // Check for audio tracks on load\n        // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n        utils.on(this.player.media, 'loadeddata', () => {\n            utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n            utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n        });\n\n        // Handle the media finishing\n        utils.on(this.player.media, 'ended', () => {\n            // Show poster on end\n            if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n                // Restart\n                this.player.restart();\n\n                // Re-load media\n                this.player.media.load();\n            }\n        });\n\n        // Check for buffer progress\n        utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n        // Handle native mute\n        utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n        // Handle native play/pause\n        utils.on(this.player.media, 'playing play pause ended', event => ui.checkPlaying.call(this.player, event));\n\n        // Loading\n        utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n        // Check if media failed to load\n        // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n        // Click video\n        if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n            // Re-fetch the wrapper\n            const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n            // Bail if there's no wrapper (this should never happen)\n            if (!utils.is.element(wrapper)) {\n                return;\n            }\n\n            // On click play, pause ore restart\n            utils.on(wrapper, 'click', () => {\n                // Touch devices will just show controls (if we're hiding controls)\n                if (this.player.config.hideControls && support.touch && !this.player.paused) {\n                    return;\n                }\n\n                if (this.player.paused) {\n                    this.player.play();\n                } else if (this.player.ended) {\n                    this.player.restart();\n                    this.player.play();\n                } else {\n                    this.player.pause();\n                }\n            });\n        }\n\n        // Disable right click\n        if (this.player.supported.ui && this.player.config.disableContextMenu) {\n            utils.on(\n                this.player.media,\n                'contextmenu',\n                event => {\n                    event.preventDefault();\n                },\n                false,\n            );\n        }\n\n        // Volume change\n        utils.on(this.player.media, 'volumechange', () => {\n            // Save to storage\n            this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n        });\n\n        // Speed change\n        utils.on(this.player.media, 'ratechange', () => {\n            // Update UI\n            controls.updateSetting.call(this.player, 'speed');\n\n            // Save to storage\n            this.player.storage.set({ speed: this.player.speed });\n        });\n\n        // Quality change\n        utils.on(this.player.media, 'qualitychange', () => {\n            // Update UI\n            controls.updateSetting.call(this.player, 'quality');\n\n            // Save to storage\n            this.player.storage.set({ quality: this.player.quality });\n        });\n\n        // Caption language change\n        utils.on(this.player.media, 'languagechange', () => {\n            // Update UI\n            controls.updateSetting.call(this.player, 'captions');\n\n            // Save to storage\n            this.player.storage.set({ language: this.player.language });\n        });\n\n        // Captions toggle\n        utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n            // Update UI\n            controls.updateSetting.call(this.player, 'captions');\n\n            // Save to storage\n            this.player.storage.set({ captions: this.player.captions.active });\n        });\n\n        // Proxy events to container\n        // Bubble up key events for Edge\n        utils.on(this.player.media, this.player.config.events.concat([\n            'keyup',\n            'keydown',\n        ]).join(' '), event => {\n            let detail = {};\n\n            // Get error details from media\n            if (event.type === 'error') {\n                detail = this.player.media.error;\n            }\n\n            utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n        });\n    }\n\n    // Listen for control events\n    controls() {\n        // IE doesn't support input event, so we fallback to change\n        const inputEvent = browser.isIE ? 'change' : 'input';\n\n        // Trigger custom and default handlers\n        const proxy = (event, handlerKey, defaultHandler) => {\n            const customHandler = this.player.config.listeners[handlerKey];\n\n            // Execute custom handler\n            if (utils.is.function(customHandler)) {\n                customHandler.call(this.player, event);\n            }\n\n            // Only call default handler if not prevented in custom handler\n            if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n                defaultHandler.call(this.player, event);\n            }\n        };\n\n        // Play/pause toggle\n        utils.on(this.player.elements.buttons.play, 'click', event =>\n            proxy(event, 'play', () => {\n                this.player.togglePlay();\n            }),\n        );\n\n        // Pause\n        utils.on(this.player.elements.buttons.restart, 'click', event =>\n            proxy(event, 'restart', () => {\n                this.player.restart();\n            }),\n        );\n\n        // Rewind\n        utils.on(this.player.elements.buttons.rewind, 'click', event =>\n            proxy(event, 'rewind', () => {\n                this.player.rewind();\n            }),\n        );\n\n        // Rewind\n        utils.on(this.player.elements.buttons.forward, 'click', event =>\n            proxy(event, 'forward', () => {\n                this.player.forward();\n            }),\n        );\n\n        // Mute toggle\n        utils.on(this.player.elements.buttons.mute, 'click', event =>\n            proxy(event, 'mute', () => {\n                this.player.muted = !this.player.muted;\n            }),\n        );\n\n        // Captions toggle\n        utils.on(this.player.elements.buttons.captions, 'click', event =>\n            proxy(event, 'captions', () => {\n                this.player.toggleCaptions();\n            }),\n        );\n\n        // Fullscreen toggle\n        utils.on(this.player.elements.buttons.fullscreen, 'click', event =>\n            proxy(event, 'fullscreen', () => {\n                this.player.fullscreen.toggle();\n            }),\n        );\n\n        // Picture-in-Picture\n        utils.on(this.player.elements.buttons.pip, 'click', event =>\n            proxy(event, 'pip', () => {\n                this.player.pip = 'toggle';\n            }),\n        );\n\n        // Airplay\n        utils.on(this.player.elements.buttons.airplay, 'click', event =>\n            proxy(event, 'airplay', () => {\n                this.player.airplay();\n            }),\n        );\n\n        // Settings menu\n        utils.on(this.player.elements.buttons.settings, 'click', event => {\n            controls.toggleMenu.call(this.player, event);\n        });\n\n        // Settings menu\n        utils.on(this.player.elements.settings.form, 'click', event => {\n            event.stopPropagation();\n\n            // Settings menu items - use event delegation as items are added/removed\n            if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n                proxy(event, 'language', () => {\n                    this.player.language = event.target.value;\n                });\n            } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n                proxy(event, 'quality', () => {\n                    this.player.quality = event.target.value;\n                });\n            } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n                proxy(event, 'speed', () => {\n                    this.player.speed = parseFloat(event.target.value);\n                });\n            } else {\n                controls.showTab.call(this.player, event);\n            }\n        });\n\n        // Seek\n        utils.on(this.player.elements.inputs.seek, inputEvent, event =>\n            proxy(event, 'seek', () => {\n                this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n            }),\n        );\n\n        // Current time invert\n        // Only if one time element is used for both currentTime and duration\n        if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n            utils.on(this.player.elements.display.currentTime, 'click', () => {\n                // Do nothing if we're at the start\n                if (this.player.currentTime === 0) {\n                    return;\n                }\n\n                this.player.config.invertTime = !this.player.config.invertTime;\n                ui.timeUpdate.call(this.player);\n            });\n        }\n\n        // Volume\n        utils.on(this.player.elements.inputs.volume, inputEvent, event =>\n            proxy(event, 'volume', () => {\n                this.player.volume = event.target.value;\n            }),\n        );\n\n        // Polyfill for lower fill in <input type=\""range\""> for webkit\n        if (browser.isWebkit) {\n            utils.on(utils.getElements.call(this.player, 'input[type=\""range\""]'), 'input', event => {\n                controls.updateRangeFill.call(this.player, event.target);\n            });\n        }\n\n        // Seek tooltip\n        utils.on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n        // Toggle controls visibility based on mouse movement\n        if (this.player.config.hideControls) {\n            // Watch for cursor over controls so they don't hide when trying to interact\n            utils.on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n                this.player.elements.controls.hover = event.type === 'mouseenter';\n            });\n\n            // Watch for cursor over controls so they don't hide when trying to interact\n            utils.on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n                this.player.elements.controls.pressed = [\n                    'mousedown',\n                    'touchstart',\n                ].includes(event.type);\n            });\n\n            // Focus in/out on controls\n            utils.on(this.player.elements.controls, 'focusin focusout', event => {\n                this.player.toggleControls(event);\n            });\n        }\n\n        // Mouse wheel for volume\n        utils.on(\n            this.player.elements.inputs.volume,\n            'wheel',\n            event =>\n                proxy(event, 'volume', () => {\n                    // Detect \""natural\"" scroll - suppored on OS X Safari only\n                    // Other browsers on OS X will be inverted until support improves\n                    const inverted = event.webkitDirectionInvertedFromDevice;\n                    const step = 1 / 50;\n                    let direction = 0;\n\n                    // Scroll down (or up on natural) to decrease\n                    if (event.deltaY < 0 || event.deltaX > 0) {\n                        if (inverted) {\n                            this.player.decreaseVolume(step);\n                            direction = -1;\n                        } else {\n                            this.player.increaseVolume(step);\n                            direction = 1;\n                        }\n                    }\n\n                    // Scroll up (or down on natural) to increase\n                    if (event.deltaY > 0 || event.deltaX < 0) {\n                        if (inverted) {\n                            this.player.increaseVolume(step);\n                            direction = 1;\n                        } else {\n                            this.player.decreaseVolume(step);\n                            direction = -1;\n                        }\n                    }\n\n                    // Don't break page scrolling at max and min\n                    if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n                        event.preventDefault();\n                    }\n                }),\n            false,\n        );\n    }\n\n    // Reset on destroy\n    clear() {\n        this.global(false);\n    }\n}\n\nexport default Listeners;\n"",""// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n    constructor(player) {\n        this.enabled = player.config.storage.enabled;\n        this.key = player.config.storage.key;\n    }\n\n    // Check for actual support (see if we can use it)\n    static get supported() {\n        try {\n            if (!('localStorage' in window)) {\n                return false;\n            }\n\n            const test = '___test';\n\n            // Try to use it (it might be disabled, e.g. user is in private mode)\n            // see: https://github.com/sampotts/plyr/issues/131\n            window.localStorage.setItem(test, test);\n            window.localStorage.removeItem(test);\n\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    get(key) {\n        if (!Storage.supported) {\n            return null;\n        }\n\n        const store = window.localStorage.getItem(this.key);\n\n        if (utils.is.empty(store)) {\n            return null;\n        }\n\n        const json = JSON.parse(store);\n\n        return utils.is.string(key) && key.length ? json[key] : json;\n    }\n\n    set(object) {\n        // Bail if we don't have localStorage support or it's disabled\n        if (!Storage.supported || !this.enabled) {\n            return;\n        }\n\n        // Can only store objectst\n        if (!utils.is.object(object)) {\n            return;\n        }\n\n        // Get current storage\n        let storage = this.get();\n\n        // Default to empty object\n        if (utils.is.empty(storage)) {\n            storage = {};\n        }\n\n        // Update the working copy of the values\n        utils.extend(storage, object);\n\n        // Update storage\n        window.localStorage.setItem(this.key, JSON.stringify(storage));\n    }\n}\n\nexport default Storage;\n"",""// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\nclass Ads {\n    /**\n     * Ads constructor.\n     * @param {object} player\n     * @return {Ads}\n     */\n    constructor(player) {\n        this.player = player;\n        this.publisherId = player.config.ads.publisherId;\n        this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n        this.playing = false;\n        this.initialized = false;\n        this.elements = {\n            container: null,\n            displayContainer: null,\n        };\n        this.manager = null;\n        this.loader = null;\n        this.cuePoints = null;\n        this.events = {};\n        this.safetyTimer = null;\n        this.countdownTimer = null;\n\n        // Setup a promise to resolve when the IMA manager is ready\n        this.managerPromise = new Promise((resolve, reject) => {\n            // The ad is loaded and ready\n            this.on('loaded', resolve);\n\n            // Ads failed\n            this.on('error', reject);\n        });\n\n        this.load();\n    }\n\n    /**\n     * Load the IMA SDK\n     */\n    load() {\n        if (this.enabled) {\n            // Check if the Google IMA3 SDK is loaded or load it ourselves\n            if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n                utils\n                    .loadScript(this.player.config.urls.googleIMA.api)\n                    .then(() => {\n                        this.ready();\n                    })\n                    .catch(() => {\n                        // Script failed to load or is blocked\n                        this.trigger('error', new Error('Google IMA SDK failed to load'));\n                    });\n            } else {\n                this.ready();\n            }\n        }\n    }\n\n    /**\n     * Get the ads instance ready\n     */\n    ready() {\n        // Start ticking our safety timer. If the whole advertisement\n        // thing doesn't resolve within our set time; we bail\n        this.startSafetyTimer(12000, 'ready()');\n\n        // Clear the safety timer\n        this.managerPromise.then(() => {\n            this.clearSafetyTimer('onAdsManagerLoaded()');\n        });\n\n        // Set listeners on the Plyr instance\n        this.listeners();\n\n        // Setup the IMA SDK\n        this.setupIMA();\n    }\n\n    // Build the default tag URL\n    get tagUrl() {\n        const params = {\n            AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n            AV_CHANNELID: '5a0458dc28a06145e4519d21',\n            AV_URL: location.hostname,\n            cb: Date.now(),\n            AV_WIDTH: 640,\n            AV_HEIGHT: 480,\n            AV_CDIM2: this.publisherId,\n        };\n\n        const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n        return `${base}?${utils.buildUrlParams(params)}`;\n    }\n\n    /**\n     * In order for the SDK to display ads for our video, we need to tell it where to put them,\n     * so here we define our ad container. This div is set up to render on top of the video player.\n     * Using the code below, we tell the SDK to render ads within that div. We also provide a\n     * handle to the content video player - the SDK will poll the current time of our player to\n     * properly place mid-rolls. After we create the ad display container, we initialize it. On\n     * mobile devices, this initialization is done as the result of a user action.\n     */\n    setupIMA() {\n        // Create the container for our advertisements\n        this.elements.container = utils.createElement('div', {\n            class: this.player.config.classNames.ads,\n        });\n        this.player.elements.container.appendChild(this.elements.container);\n\n        // So we can run VPAID2\n        google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n        // Set language\n        google.ima.settings.setLocale(this.player.config.ads.language);\n\n        // We assume the adContainer is the video container of the plyr element\n        // that will house the ads\n        this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n        // Request video ads to be pre-loaded\n        this.requestAds();\n    }\n\n    /**\n     * Request advertisements\n     */\n    requestAds() {\n        const { container } = this.player.elements;\n\n        try {\n            // Create ads loader\n            this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n            // Listen and respond to ads loaded and error events\n            this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n            this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n            // Request video ads\n            const request = new google.ima.AdsRequest();\n            request.adTagUrl = this.tagUrl;\n\n            // Specify the linear and nonlinear slot sizes. This helps the SDK\n            // to select the correct creative if multiple are returned\n            request.linearAdSlotWidth = container.offsetWidth;\n            request.linearAdSlotHeight = container.offsetHeight;\n            request.nonLinearAdSlotWidth = container.offsetWidth;\n            request.nonLinearAdSlotHeight = container.offsetHeight;\n\n            // We only overlay ads as we only support video.\n            request.forceNonLinearFullSlot = false;\n\n            this.loader.requestAds(request);\n        } catch (e) {\n            this.onAdError(e);\n        }\n    }\n\n    /**\n     * Update the ad countdown\n     * @param {boolean} start\n     */\n    pollCountdown(start = false) {\n        if (!start) {\n            clearInterval(this.countdownTimer);\n            this.elements.container.removeAttribute('data-badge-text');\n            return;\n        }\n\n        const update = () => {\n            const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n            const label = `${this.player.config.i18n.advertisement} - ${time}`;\n            this.elements.container.setAttribute('data-badge-text', label);\n        };\n\n        this.countdownTimer = setInterval(update, 100);\n    }\n\n    /**\n     * This method is called whenever the ads are ready inside the AdDisplayContainer\n     * @param {Event} adsManagerLoadedEvent\n     */\n    onAdsManagerLoaded(event) {\n        // Get the ads manager\n        const settings = new google.ima.AdsRenderingSettings();\n\n        // Tell the SDK to save and restore content video state on our behalf\n        settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n        settings.enablePreloading = true;\n\n        // The SDK is polling currentTime on the contentPlayback. And needs a duration\n        // so it can determine when to start the mid- and post-roll\n        this.manager = event.getAdsManager(this.player, settings);\n\n        // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n        this.cuePoints = this.manager.getCuePoints();\n\n        // Add advertisement cue's within the time line if available\n        this.cuePoints.forEach(cuePoint => {\n            if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n                const seekElement = this.player.elements.progress;\n\n                if (seekElement) {\n                    const cuePercentage = 100 / this.player.duration * cuePoint;\n                    const cue = utils.createElement('span', {\n                        class: this.player.config.classNames.cues,\n                    });\n\n                    cue.style.left = `${cuePercentage.toString()}%`;\n                    seekElement.appendChild(cue);\n                }\n            }\n        });\n\n        // Get skippable state\n        // TODO: Skip button\n        // this.manager.getAdSkippableState();\n\n        // Set volume to match player\n        this.manager.setVolume(this.player.volume);\n\n        // Add listeners to the required events\n        // Advertisement error events\n        this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n        // Advertisement regular events\n        Object.keys(google.ima.AdEvent.Type).forEach(type => {\n            this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n        });\n\n        // Resolve our adsManager\n        this.trigger('loaded');\n    }\n\n    /**\n     * This is where all the event handling takes place. Retrieve the ad from the event. Some\n     * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n     * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n     * @param {Event} event\n     */\n    onAdEvent(event) {\n        const { container } = this.player.elements;\n\n        // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n        // don't have ad object associated\n        const ad = event.getAd();\n\n        // Proxy event\n        const dispatchEvent = type => {\n            const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n            utils.dispatchEvent.call(this.player, this.player.media, event);\n        };\n\n        switch (event.type) {\n            case google.ima.AdEvent.Type.LOADED:\n                // This is the first event sent for an ad - it is possible to determine whether the\n                // ad is a video ad or an overlay\n                this.trigger('loaded');\n\n                // Bubble event\n                dispatchEvent(event.type);\n\n                // Start countdown\n                this.pollCountdown(true);\n\n                if (!ad.isLinear()) {\n                    // Position AdDisplayContainer correctly for overlay\n                    ad.width = container.offsetWidth;\n                    ad.height = container.offsetHeight;\n                }\n\n                // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n                // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n                break;\n\n            case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n                // All ads for the current videos are done. We can now request new advertisements\n                // in case the video is re-played\n\n                // Fire event\n                dispatchEvent(event.type);\n\n                // TODO: Example for what happens when a next video in a playlist would be loaded.\n                // So here we load a new video when all ads are done.\n                // Then we load new ads within a new adsManager. When the video\n                // Is started - after - the ads are loaded, then we get ads.\n                // You can also easily test cancelling and reloading by running\n                // player.ads.cancel() and player.ads.play from the console I guess.\n                // this.player.source = {\n                //     type: 'video',\n                //     title: 'View From A Blue Moon',\n                //     sources: [{\n                //         src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n                // 'video/mp4', }], poster:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n                // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n                // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n                // };\n\n                // TODO: So there is still this thing where a video should only be allowed to start\n                // playing when the IMA SDK is ready or has failed\n\n                this.loadAds();\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n                // This event indicates the ad has started - the video player can adjust the UI,\n                // for example display a pause button and remaining time. Fired when content should\n                // be paused. This usually happens right before an ad is about to cover the content\n\n                dispatchEvent(event.type);\n\n                this.pauseContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n                // This event indicates the ad has finished - the video player can perform\n                // appropriate UI actions, such as removing the timer for remaining time detection.\n                // Fired when content should be resumed. This usually happens when an ad finishes\n                // or collapses\n\n                dispatchEvent(event.type);\n\n                this.pollCountdown();\n\n                this.resumeContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.STARTED:\n            case google.ima.AdEvent.Type.MIDPOINT:\n            case google.ima.AdEvent.Type.COMPLETE:\n            case google.ima.AdEvent.Type.IMPRESSION:\n            case google.ima.AdEvent.Type.CLICK:\n                dispatchEvent(event.type);\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    /**\n     * Any ad error handling comes through here\n     * @param {Event} event\n     */\n    onAdError(event) {\n        this.cancel();\n        this.player.debug.warn('Ads error', event);\n    }\n\n    /**\n     * Setup hooks for Plyr and window events. This ensures\n     * the mid- and post-roll launch at the correct time. And\n     * resize the advertisement when the player resizes\n     */\n    listeners() {\n        const { container } = this.player.elements;\n        let time;\n\n        // Add listeners to the required events\n        this.player.on('ended', () => {\n            this.loader.contentComplete();\n        });\n\n        this.player.on('seeking', () => {\n            time = this.player.currentTime;\n            return time;\n        });\n\n        this.player.on('seeked', () => {\n            const seekedTime = this.player.currentTime;\n\n            this.cuePoints.forEach((cuePoint, index) => {\n                if (time < cuePoint && cuePoint < seekedTime) {\n                    this.manager.discardAdBreak();\n                    this.cuePoints.splice(index, 1);\n                }\n            });\n        });\n\n        // Listen to the resizing of the window. And resize ad accordingly\n        // TODO: eventually implement ResizeObserver\n        window.addEventListener('resize', () => {\n            this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n        });\n    }\n\n    /**\n     * Initialize the adsManager and start playing advertisements\n     */\n    play() {\n        const { container } = this.player.elements;\n\n        if (!this.managerPromise) {\n            this.resumeContent();\n        }\n\n        // Play the requested advertisement whenever the adsManager is ready\n        this.managerPromise\n            .then(() => {\n                // Initialize the container. Must be done via a user action on mobile devices\n                this.elements.displayContainer.initialize();\n\n                try {\n                    if (!this.initialized) {\n                        // Initialize the ads manager. Ad rules playlist will start at this time\n                        this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n                        // Call play to start showing the ad. Single video and overlay ads will\n                        // start at this time; the call will be ignored for ad rules\n                        this.manager.start();\n                    }\n\n                    this.initialized = true;\n                } catch (adError) {\n                    // An error may be thrown if there was a problem with the\n                    // VAST response\n                    this.onAdError(adError);\n                }\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Resume our video\n     */\n    resumeContent() {\n        // Hide the advertisement container\n        this.elements.container.style.zIndex = '';\n\n        // Ad is stopped\n        this.playing = false;\n\n        // Play our video\n        if (this.player.currentTime < this.player.duration) {\n            this.player.play();\n        }\n    }\n\n    /**\n     * Pause our video\n     */\n    pauseContent() {\n        // Show the advertisement container\n        this.elements.container.style.zIndex = 3;\n\n        // Ad is playing.\n        this.playing = true;\n\n        // Pause our video.\n        this.player.pause();\n    }\n\n    /**\n     * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n     * allowed to call new ads based on google policies, as they interpret this as an accidental\n     * video requests. https://developers.google.com/interactive-\n     * media-ads/docs/sdks/android/faq#8\n     */\n    cancel() {\n        // Pause our video\n        if (this.initialized) {\n            this.resumeContent();\n        }\n\n        // Tell our instance that we're done for now\n        this.trigger('error');\n\n        // Re-create our adsManager\n        this.loadAds();\n    }\n\n    /**\n     * Re-create our adsManager\n     */\n    loadAds() {\n        // Tell our adsManager to go bye bye\n        this.managerPromise\n            .then(() => {\n                // Destroy our adsManager\n                if (this.manager) {\n                    this.manager.destroy();\n                }\n\n                // Re-set our adsManager promises\n                this.managerPromise = new Promise(resolve => {\n                    this.on('loaded', resolve);\n                    this.player.debug.log(this.manager);\n                });\n\n                // Now request some new advertisements\n                this.requestAds();\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Handles callbacks after an ad event was invoked\n     * @param {string} event - Event type\n     */\n    trigger(event, ...args) {\n        const handlers = this.events[event];\n\n        if (utils.is.array(handlers)) {\n            handlers.forEach(handler => {\n                if (utils.is.function(handler)) {\n                    handler.apply(this, args);\n                }\n            });\n        }\n    }\n\n    /**\n     * Add event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     * @return {Ads}\n     */\n    on(event, callback) {\n        if (!utils.is.array(this.events[event])) {\n            this.events[event] = [];\n        }\n\n        this.events[event].push(callback);\n\n        return this;\n    }\n\n    /**\n     * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n     * The advertisement has 12 seconds to get its things together. We stop this timer when the\n     * advertisement is playing, or when a user action is required to start, then we clear the\n     * timer on ad ready\n     * @param {number} time\n     * @param {string} from\n     */\n    startSafetyTimer(time, from) {\n        this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n        this.safetyTimer = setTimeout(() => {\n            this.cancel();\n            this.clearSafetyTimer('startSafetyTimer()');\n        }, time);\n    }\n\n    /**\n     * Clear our safety timer(s)\n     * @param {string} from\n     */\n    clearSafetyTimer(from) {\n        if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n            this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n            clearTimeout(this.safetyTimer);\n            this.safetyTimer = null;\n        }\n    }\n}\n\nexport default Ads;\n"",""// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n    setup() {\n        // Add embed class for responsive\n        utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set aspect ratio\n        youtube.setAspectRatio.call(this);\n\n        // Setup API\n        if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n            youtube.ready.call(this);\n        } else {\n            // Load the API\n            utils.loadScript(this.config.urls.youtube.api).catch(error => {\n                this.debug.warn('YouTube API failed to load', error);\n            });\n\n            // Setup callback for the API\n            // YouTube has it's own system of course...\n            window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n            // Add to queue\n            window.onYouTubeReadyCallbacks.push(() => {\n                youtube.ready.call(this);\n            });\n\n            // Set callback to process queue\n            window.onYouTubeIframeAPIReady = () => {\n                window.onYouTubeReadyCallbacks.forEach(callback => {\n                    callback();\n                });\n            };\n        }\n    },\n\n    // Get the media title\n    getTitle(videoId) {\n        // Try via undocumented API method first\n        // This method disappears now and then though...\n        // https://github.com/sampotts/plyr/issues/709\n        if (utils.is.function(this.embed.getVideoData)) {\n            const { title } = this.embed.getVideoData();\n\n            if (utils.is.empty(title)) {\n                this.config.title = title;\n                ui.setTitle.call(this);\n                return;\n            }\n        }\n\n        // Or via Google API\n        const key = this.config.keys.google;\n        if (utils.is.string(key) && !utils.is.empty(key)) {\n            const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n            utils\n                .fetch(url)\n                .then(result => {\n                    if (utils.is.object(result)) {\n                        this.config.title = result.items[0].snippet.title;\n                        ui.setTitle.call(this);\n                    }\n                })\n                .catch(() => {});\n        }\n    },\n\n    // Set aspect ratio\n    setAspectRatio() {\n        const ratio = this.config.ratio.split(':');\n        this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n    },\n\n    // API ready\n    ready() {\n        const player = this;\n\n        // Ignore already setup (race condition)\n        const currentId = player.media.getAttribute('id');\n        if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n            return;\n        }\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (utils.is.empty(source)) {\n            source = player.media.getAttribute(this.config.attributes.embed.id);\n        }\n\n        // Replace the <iframe> with a <div> due to YouTube API issues\n        const videoId = utils.parseYouTubeId(source);\n        const id = utils.generateId(player.provider);\n        const container = utils.createElement('div', { id });\n        player.media = utils.replaceElement(container, player.media);\n\n        // Setup instance\n        // https://developers.google.com/youtube/iframe_api_reference\n        player.embed = new window.YT.Player(id, {\n            videoId,\n            playerVars: {\n                autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n                controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n                rel: 0, // No related vids\n                showinfo: 0, // Hide info\n                iv_load_policy: 3, // Hide annotations\n                modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n                disablekb: 1, // Disable keyboard as we handle it\n                playsinline: 1, // Allow iOS inline playback\n\n                // Tracking for stats\n                // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n                widget_referrer: window ? window.location.href : null,\n\n                // Captions are flaky on YouTube\n                cc_load_policy: player.captions.active ? 1 : 0,\n                cc_lang_pref: player.config.captions.language,\n            },\n            events: {\n                onError(event) {\n                    // If we've already fired an error, don't do it again\n                    // YouTube fires onError twice\n                    if (utils.is.object(player.media.error)) {\n                        return;\n                    }\n\n                    const detail = {\n                        code: event.data,\n                    };\n\n                    // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n                    switch (event.data) {\n                        case 2:\n                            detail.message =\n                                'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n                            break;\n\n                        case 5:\n                            detail.message =\n                                'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n                            break;\n\n                        case 100:\n                            detail.message =\n                                'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n                            break;\n\n                        case 101:\n                        case 150:\n                            detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n                            break;\n\n                        default:\n                            detail.message = 'An unknown error occured';\n                            break;\n                    }\n\n                    player.media.error = detail;\n\n                    utils.dispatchEvent.call(player, player.media, 'error');\n                },\n                onPlaybackQualityChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get current quality\n                    player.media.quality = instance.getPlaybackQuality();\n\n                    utils.dispatchEvent.call(player, player.media, 'qualitychange');\n                },\n                onPlaybackRateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get current speed\n                    player.media.playbackRate = instance.getPlaybackRate();\n\n                    utils.dispatchEvent.call(player, player.media, 'ratechange');\n                },\n                onReady(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get the title\n                    youtube.getTitle.call(player, videoId);\n\n                    // Create a faux HTML5 API using the YouTube API\n                    player.media.play = () => {\n                        instance.playVideo();\n                    };\n\n                    player.media.pause = () => {\n                        instance.pauseVideo();\n                    };\n\n                    player.media.stop = () => {\n                        instance.stopVideo();\n                    };\n\n                    player.media.duration = instance.getDuration();\n                    player.media.paused = true;\n\n                    // Seeking\n                    player.media.currentTime = 0;\n                    Object.defineProperty(player.media, 'currentTime', {\n                        get() {\n                            return Number(instance.getCurrentTime());\n                        },\n                        set(time) {\n                            // Set seeking flag\n                            player.media.seeking = true;\n\n                            // Trigger seeking\n                            utils.dispatchEvent.call(player, player.media, 'seeking');\n\n                            // Seek after events sent\n                            instance.seekTo(time);\n                        },\n                    });\n\n                    // Playback speed\n                    Object.defineProperty(player.media, 'playbackRate', {\n                        get() {\n                            return instance.getPlaybackRate();\n                        },\n                        set(input) {\n                            instance.setPlaybackRate(input);\n                        },\n                    });\n\n                    // Quality\n                    Object.defineProperty(player.media, 'quality', {\n                        get() {\n                            return instance.getPlaybackQuality();\n                        },\n                        set(input) {\n                            // Trigger request event\n                            utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n                                quality: input,\n                            });\n\n                            instance.setPlaybackQuality(input);\n                        },\n                    });\n\n                    // Volume\n                    let { volume } = player.config;\n                    Object.defineProperty(player.media, 'volume', {\n                        get() {\n                            return volume;\n                        },\n                        set(input) {\n                            volume = input;\n                            instance.setVolume(volume * 100);\n                            utils.dispatchEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Muted\n                    let { muted } = player.config;\n                    Object.defineProperty(player.media, 'muted', {\n                        get() {\n                            return muted;\n                        },\n                        set(input) {\n                            const toggle = utils.is.boolean(input) ? input : muted;\n                            muted = toggle;\n                            instance[toggle ? 'mute' : 'unMute']();\n                            utils.dispatchEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Source\n                    Object.defineProperty(player.media, 'currentSrc', {\n                        get() {\n                            return instance.getVideoUrl();\n                        },\n                    });\n\n                    // Ended\n                    Object.defineProperty(player.media, 'ended', {\n                        get() {\n                            return player.currentTime === player.duration;\n                        },\n                    });\n\n                    // Get available speeds\n                    player.options.speed = instance.getAvailablePlaybackRates();\n\n                    // Set the tabindex to avoid focus entering iframe\n                    if (player.supported.ui) {\n                        player.media.setAttribute('tabindex', -1);\n                    }\n\n                    utils.dispatchEvent.call(player, player.media, 'timeupdate');\n                    utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n                    // Reset timer\n                    clearInterval(player.timers.buffering);\n\n                    // Setup buffering\n                    player.timers.buffering = setInterval(() => {\n                        // Get loaded % from YouTube\n                        player.media.buffered = instance.getVideoLoadedFraction();\n\n                        // Trigger progress only when we actually buffer something\n                        if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n                            utils.dispatchEvent.call(player, player.media, 'progress');\n                        }\n\n                        // Set last buffer point\n                        player.media.lastBuffered = player.media.buffered;\n\n                        // Bail if we're at 100%\n                        if (player.media.buffered === 1) {\n                            clearInterval(player.timers.buffering);\n\n                            // Trigger event\n                            utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n                        }\n                    }, 200);\n\n                    // Rebuild UI\n                    setTimeout(() => ui.build.call(player), 50);\n                },\n                onStateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Reset timer\n                    clearInterval(player.timers.playing);\n\n                    // Handle events\n                    // -1   Unstarted\n                    // 0    Ended\n                    // 1    Playing\n                    // 2    Paused\n                    // 3    Buffering\n                    // 5    Video cued\n                    switch (event.data) {\n                        case 0:\n                            player.media.paused = true;\n\n                            // YouTube doesn't support loop for a single video, so mimick it.\n                            if (player.media.loop) {\n                                // YouTube needs a call to `stopVideo` before playing again\n                                instance.stopVideo();\n                                instance.playVideo();\n                            } else {\n                                utils.dispatchEvent.call(player, player.media, 'ended');\n                            }\n\n                            break;\n\n                        case 1:\n                            // If we were seeking, fire seeked event\n                            if (player.media.seeking) {\n                                utils.dispatchEvent.call(player, player.media, 'seeked');\n                            }\n                            player.media.seeking = false;\n\n                            // Only fire play if paused before\n                            if (player.media.paused) {\n                                utils.dispatchEvent.call(player, player.media, 'play');\n                            }\n                            player.media.paused = false;\n\n                            utils.dispatchEvent.call(player, player.media, 'playing');\n\n                            // Poll to get playback progress\n                            player.timers.playing = setInterval(() => {\n                                utils.dispatchEvent.call(player, player.media, 'timeupdate');\n                            }, 50);\n\n                            // Check duration again due to YouTube bug\n                            // https://github.com/sampotts/plyr/issues/374\n                            // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n                            if (player.media.duration !== instance.getDuration()) {\n                                player.media.duration = instance.getDuration();\n                                utils.dispatchEvent.call(player, player.media, 'durationchange');\n                            }\n\n                            // Get quality\n                            controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n                            break;\n\n                        case 2:\n                            player.media.paused = true;\n\n                            utils.dispatchEvent.call(player, player.media, 'pause');\n\n                            break;\n\n                        default:\n                            break;\n                    }\n\n                    utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n                        code: event.data,\n                    });\n                },\n            },\n        });\n    },\n};\n\nexport default youtube;\n"",""// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n    setup() {\n        // Add embed class for responsive\n        utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set intial ratio\n        vimeo.setAspectRatio.call(this);\n\n        // Load the API if not already\n        if (!utils.is.object(window.Vimeo)) {\n            utils\n                .loadScript(this.config.urls.vimeo.api)\n                .then(() => {\n                    vimeo.ready.call(this);\n                })\n                .catch(error => {\n                    this.debug.warn('Vimeo API failed to load', error);\n                });\n        } else {\n            vimeo.ready.call(this);\n        }\n    },\n\n    // Set aspect ratio\n    // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n    setAspectRatio(input) {\n        const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n        const padding = 100 / ratio[0] * ratio[1];\n        const height = 200;\n        const offset = (height - padding) / (height / 50);\n        this.elements.wrapper.style.paddingBottom = `${padding}%`;\n        this.media.style.transform = `translateY(-${offset}%)`;\n    },\n\n    // API Ready\n    ready() {\n        const player = this;\n\n        // Get Vimeo params for the iframe\n        const options = {\n            loop: player.config.loop.active,\n            autoplay: player.autoplay,\n            byline: false,\n            portrait: false,\n            title: false,\n            speed: true,\n            transparent: 0,\n            gesture: 'media',\n        };\n        const params = utils.buildUrlParams(options);\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (utils.is.empty(source)) {\n            source = player.media.getAttribute(this.config.attributes.embed.id);\n        }\n\n        const id = utils.parseVimeoId(source);\n\n        // Build an iframe\n        const iframe = utils.createElement('iframe');\n        const src = `https://player.vimeo.com/video/${id}?${params}`;\n        iframe.setAttribute('src', src);\n        iframe.setAttribute('allowfullscreen', '');\n        iframe.setAttribute('allowtransparency', '');\n        iframe.setAttribute('allow', 'autoplay');\n\n        // Inject the package\n        const wrapper = utils.createElement('div');\n        wrapper.appendChild(iframe);\n        player.media = utils.replaceElement(wrapper, player.media);\n\n        // Setup instance\n        // https://github.com/vimeo/player.js\n        player.embed = new window.Vimeo.Player(iframe);\n\n        player.media.paused = true;\n        player.media.currentTime = 0;\n\n        // Create a faux HTML5 API using the Vimeo API\n        player.media.play = () => {\n            player.embed.play().then(() => {\n                player.media.paused = false;\n            });\n        };\n\n        player.media.pause = () => {\n            player.embed.pause().then(() => {\n                player.media.paused = true;\n            });\n        };\n\n        player.media.stop = () => {\n            player.embed.stop().then(() => {\n                player.media.paused = true;\n                player.currentTime = 0;\n            });\n        };\n\n        // Seeking\n        let { currentTime } = player.media;\n        Object.defineProperty(player.media, 'currentTime', {\n            get() {\n                return currentTime;\n            },\n            set(time) {\n                // Get current paused state\n                // Vimeo will automatically play on seek\n                const { paused } = player.media;\n\n                // Set seeking flag\n                player.media.seeking = true;\n\n                // Trigger seeking\n                utils.dispatchEvent.call(player, player.media, 'seeking');\n\n                // Seek after events\n                player.embed.setCurrentTime(time);\n\n                // Restore pause state\n                if (paused) {\n                    player.pause();\n                }\n            },\n        });\n\n        // Playback speed\n        let speed = player.config.speed.selected;\n        Object.defineProperty(player.media, 'playbackRate', {\n            get() {\n                return speed;\n            },\n            set(input) {\n                player.embed.setPlaybackRate(input).then(() => {\n                    speed = input;\n                    utils.dispatchEvent.call(player, player.media, 'ratechange');\n                });\n            },\n        });\n\n        // Volume\n        let { volume } = player.config;\n        Object.defineProperty(player.media, 'volume', {\n            get() {\n                return volume;\n            },\n            set(input) {\n                player.embed.setVolume(input).then(() => {\n                    volume = input;\n                    utils.dispatchEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Muted\n        let { muted } = player.config;\n        Object.defineProperty(player.media, 'muted', {\n            get() {\n                return muted;\n            },\n            set(input) {\n                const toggle = utils.is.boolean(input) ? input : false;\n\n                player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n                    muted = toggle;\n                    utils.dispatchEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Loop\n        let { loop } = player.config;\n        Object.defineProperty(player.media, 'loop', {\n            get() {\n                return loop;\n            },\n            set(input) {\n                const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n                player.embed.setLoop(toggle).then(() => {\n                    loop = toggle;\n                });\n            },\n        });\n\n        // Source\n        let currentSrc;\n        player.embed.getVideoUrl().then(value => {\n            currentSrc = value;\n        });\n        Object.defineProperty(player.media, 'currentSrc', {\n            get() {\n                return currentSrc;\n            },\n        });\n\n        // Ended\n        Object.defineProperty(player.media, 'ended', {\n            get() {\n                return player.currentTime === player.duration;\n            },\n        });\n\n        // Set aspect ratio based on video size\n        Promise.all([\n            player.embed.getVideoWidth(),\n            player.embed.getVideoHeight(),\n        ]).then(dimensions => {\n            const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n            vimeo.setAspectRatio.call(this, ratio);\n        });\n\n        // Set autopause\n        player.embed.setAutopause(player.config.autopause).then(state => {\n            player.config.autopause = state;\n        });\n\n        // Get title\n        player.embed.getVideoTitle().then(title => {\n            player.config.title = title;\n            ui.setTitle.call(this);\n        });\n\n        // Get current time\n        player.embed.getCurrentTime().then(value => {\n            currentTime = value;\n            utils.dispatchEvent.call(player, player.media, 'timeupdate');\n        });\n\n        // Get duration\n        player.embed.getDuration().then(value => {\n            player.media.duration = value;\n            utils.dispatchEvent.call(player, player.media, 'durationchange');\n        });\n\n        // Get captions\n        player.embed.getTextTracks().then(tracks => {\n            player.media.textTracks = tracks;\n            captions.setup.call(player);\n        });\n\n        player.embed.on('cuechange', data => {\n            let cue = null;\n\n            if (data.cues.length) {\n                cue = utils.stripHTML(data.cues[0].text);\n            }\n\n            captions.setText.call(player, cue);\n        });\n\n        player.embed.on('loaded', () => {\n            if (utils.is.element(player.embed.element) && player.supported.ui) {\n                const frame = player.embed.element;\n\n                // Fix keyboard focus issues\n                // https://github.com/sampotts/plyr/issues/317\n                frame.setAttribute('tabindex', -1);\n            }\n        });\n\n        player.embed.on('play', () => {\n            // Only fire play if paused before\n            if (player.media.paused) {\n                utils.dispatchEvent.call(player, player.media, 'play');\n            }\n            player.media.paused = false;\n            utils.dispatchEvent.call(player, player.media, 'playing');\n        });\n\n        player.embed.on('pause', () => {\n            player.media.paused = true;\n            utils.dispatchEvent.call(player, player.media, 'pause');\n        });\n\n        player.embed.on('timeupdate', data => {\n            player.media.seeking = false;\n            currentTime = data.seconds;\n            utils.dispatchEvent.call(player, player.media, 'timeupdate');\n        });\n\n        player.embed.on('progress', data => {\n            player.media.buffered = data.percent;\n            utils.dispatchEvent.call(player, player.media, 'progress');\n\n            // Check all loaded\n            if (parseInt(data.percent, 10) === 1) {\n                utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n            }\n        });\n\n        player.embed.on('seeked', () => {\n            player.media.seeking = false;\n            utils.dispatchEvent.call(player, player.media, 'seeked');\n            utils.dispatchEvent.call(player, player.media, 'play');\n        });\n\n        player.embed.on('ended', () => {\n            player.media.paused = true;\n            utils.dispatchEvent.call(player, player.media, 'ended');\n        });\n\n        player.embed.on('error', detail => {\n            player.media.error = detail;\n            utils.dispatchEvent.call(player, player.media, 'error');\n        });\n\n        // Rebuild UI\n        setTimeout(() => ui.build.call(player), 0);\n    },\n};\n\nexport default vimeo;\n"",""// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n    // Setup media\n    setup() {\n        // If there's no media, bail\n        if (!this.media) {\n            this.debug.warn('No media element found!');\n            return;\n        }\n\n        // Add type class\n        utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n        // Add provider class\n        utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n        // Add video class for embeds\n        // This will require changes if audio embeds are added\n        if (this.isEmbed) {\n            utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n        }\n\n        if (this.supported.ui) {\n            // Check for picture-in-picture support\n            utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n            // Check for airplay support\n            utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n            // If there's no autoplay attribute, assume the video is stopped and add state class\n            utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n            // Add iOS class\n            utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n            // Add touch class\n            utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n        }\n\n        // Inject the player wrapper\n        if (this.isVideo) {\n            // Create the wrapper div\n            this.elements.wrapper = utils.createElement('div', {\n                class: this.config.classNames.video,\n            });\n\n            // Wrap the video in a container\n            utils.wrap(this.media, this.elements.wrapper);\n        }\n\n        if (this.isEmbed) {\n            switch (this.provider) {\n                case 'youtube':\n                    youtube.setup.call(this);\n                    break;\n\n                case 'vimeo':\n                    vimeo.setup.call(this);\n                    break;\n\n                default:\n                    break;\n            }\n        } else if (this.isHTML5) {\n            ui.setTitle.call(this);\n        }\n    },\n\n    // Cancel current network requests\n    // See https://github.com/sampotts/plyr/issues/174\n    cancelRequests() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        // Remove child sources\n        utils.removeElement(this.media.querySelectorAll('source'));\n\n        // Set blank video src attribute\n        // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n        // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n        this.media.setAttribute('src', this.config.blankVideo);\n\n        // Load the new empty source\n        // This will cancel existing requests\n        // See https://github.com/sampotts/plyr/issues/174\n        this.media.load();\n\n        // Debugging\n        this.debug.log('Cancelled network requests');\n    },\n};\n\nexport default media;\n"",""// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n    // Add elements to HTML5 media (source, tracks, etc)\n    insertElements(type, attributes) {\n        if (utils.is.string(attributes)) {\n            utils.insertElement(type, this.media, {\n                src: attributes,\n            });\n        } else if (utils.is.array(attributes)) {\n            attributes.forEach(attribute => {\n                utils.insertElement(type, this.media, attribute);\n            });\n        }\n    },\n\n    // Update source\n    // Sources are not checked for support so be careful\n    change(input) {\n        if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n            this.debug.warn('Invalid source format');\n            return;\n        }\n\n        // Cancel current network requests\n        media.cancelRequests.call(this);\n\n        // Destroy instance and re-setup\n        this.destroy.call(\n            this,\n            () => {\n                // TODO: Reset menus here\n\n                // Remove elements\n                utils.removeElement(this.media);\n                this.media = null;\n\n                // Reset class name\n                if (utils.is.element(this.elements.container)) {\n                    this.elements.container.removeAttribute('class');\n                }\n\n                // Set the type and provider\n                this.type = input.type;\n                this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n                // Check for support\n                this.supported = support.check(this.type, this.provider, this.config.inline);\n\n                // Create new markup\n                switch (`${this.provider}:${this.type}`) {\n                    case 'html5:video':\n                        this.media = utils.createElement('video');\n                        break;\n\n                    case 'html5:audio':\n                        this.media = utils.createElement('audio');\n                        break;\n\n                    case 'youtube:video':\n                    case 'vimeo:video':\n                        this.media = utils.createElement('div', {\n                            src: input.sources[0].src,\n                        });\n                        break;\n\n                    default:\n                        break;\n                }\n\n                // Inject the new element\n                this.elements.container.appendChild(this.media);\n\n                // Autoplay the new source?\n                if (utils.is.boolean(input.autoplay)) {\n                    this.config.autoplay = input.autoplay;\n                }\n\n                // Set attributes for audio and video\n                if (this.isHTML5) {\n                    if (this.config.crossorigin) {\n                        this.media.setAttribute('crossorigin', '');\n                    }\n                    if (this.config.autoplay) {\n                        this.media.setAttribute('autoplay', '');\n                    }\n                    if ('poster' in input) {\n                        this.media.setAttribute('poster', input.poster);\n                    }\n                    if (this.config.loop.active) {\n                        this.media.setAttribute('loop', '');\n                    }\n                    if (this.config.muted) {\n                        this.media.setAttribute('muted', '');\n                    }\n                    if (this.config.inline) {\n                        this.media.setAttribute('playsinline', '');\n                    }\n                }\n\n                // Restore class hook\n                ui.addStyleHook.call(this);\n\n                // Set new sources for html5\n                if (this.isHTML5) {\n                    source.insertElements.call(this, 'source', input.sources);\n                }\n\n                // Set video title\n                this.config.title = input.title;\n\n                // Set up from scratch\n                media.setup.call(this);\n\n                // HTML5 stuff\n                if (this.isHTML5) {\n                    // Setup captions\n                    if ('tracks' in input) {\n                        source.insertElements.call(this, 'track', input.tracks);\n                    }\n\n                    // Load HTML5 sources\n                    this.media.load();\n                }\n\n                // If HTML5 or embed but not fully supported, setupInterface and call ready now\n                if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n                    // Setup interface\n                    ui.build.call(this);\n                }\n\n                // Update the fullscreen support\n                this.fullscreen.update();\n            },\n            true,\n        );\n    },\n};\n\nexport default source;\n"",""// ==========================================================================\n// Plyr\n// plyr.js v3.0.1\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n    constructor(target, options) {\n        this.timers = {};\n\n        // State\n        this.ready = false;\n        this.loading = false;\n        this.failed = false;\n\n        // Set the media element\n        this.media = target;\n\n        // String selector passed\n        if (utils.is.string(this.media)) {\n            this.media = document.querySelectorAll(this.media);\n        }\n\n        // jQuery, NodeList or Array passed, use first element\n        if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n            // eslint-disable-next-line\n            this.media = this.media[0];\n        }\n\n        // Set config\n        this.config = utils.extend(\n            {},\n            defaults,\n            options,\n            (() => {\n                try {\n                    return JSON.parse(this.media.getAttribute('data-plyr-config'));\n                } catch (e) {\n                    return {};\n                }\n            })(),\n        );\n\n        // Elements cache\n        this.elements = {\n            container: null,\n            buttons: {},\n            display: {},\n            progress: {},\n            inputs: {},\n            settings: {\n                menu: null,\n                panes: {},\n                tabs: {},\n            },\n            captions: null,\n        };\n\n        // Captions\n        this.captions = {\n            active: null,\n            currentTrack: null,\n        };\n\n        // Fullscreen\n        this.fullscreen = {\n            active: false,\n        };\n\n        // Options\n        this.options = {\n            speed: [],\n            quality: [],\n        };\n\n        // Debugging\n        // TODO: move to globals\n        this.debug = new Console(this.config.debug);\n\n        // Log config options and support\n        this.debug.log('Config', this.config);\n        this.debug.log('Support', support);\n\n        // We need an element to setup\n        if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n            this.debug.error('Setup failed: no suitable element passed');\n            return;\n        }\n\n        // Bail if the element is initialized\n        if (this.media.plyr) {\n            this.debug.warn('Target already setup');\n            return;\n        }\n\n        // Bail if not enabled\n        if (!this.config.enabled) {\n            this.debug.error('Setup failed: disabled by config');\n            return;\n        }\n\n        // Bail if disabled or no basic support\n        // You may want to disable certain UAs etc\n        if (!support.check().api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        // Cache original element state for .destroy()\n        this.elements.original = this.media.cloneNode(true);\n\n        // Set media type based on tag or data attribute\n        // Supported: video, audio, vimeo, youtube\n        const type = this.media.tagName.toLowerCase();\n\n        // Embed properties\n        let iframe = null;\n        let url = null;\n        let params = null;\n\n        // Different setup based on type\n        switch (type) {\n            case 'div':\n                // Find the frame\n                iframe = this.media.querySelector('iframe');\n\n                // <iframe> type\n                if (utils.is.element(iframe)) {\n                    // Detect provider\n                    url = iframe.getAttribute('src');\n                    this.provider = utils.getProviderByUrl(url);\n\n                    // Rework elements\n                    this.elements.container = this.media;\n                    this.media = iframe;\n\n                    // Reset classname\n                    this.elements.container.className = '';\n\n                    // Get attributes from URL and set config\n                    params = utils.getUrlParams(url);\n                    if (!utils.is.empty(params)) {\n                        const truthy = [\n                            '1',\n                            'true',\n                        ];\n\n                        if (truthy.includes(params.autoplay)) {\n                            this.config.autoplay = true;\n                        }\n                        if (truthy.includes(params.playsinline)) {\n                            this.config.inline = true;\n                        }\n                        if (truthy.includes(params.loop)) {\n                            this.config.loop.active = true;\n                        }\n                    }\n                } else {\n                    // <div> with attributes\n                    this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n                    // Remove attribute\n                    this.media.removeAttribute(this.config.attributes.embed.provider);\n                }\n\n                // Unsupported or missing provider\n                if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n                    this.debug.error('Setup failed: Invalid provider');\n                    return;\n                }\n\n                // Audio will come later for external providers\n                this.type = types.video;\n\n                break;\n\n            case 'video':\n            case 'audio':\n                this.type = type;\n                this.provider = providers.html5;\n\n                // Get config from attributes\n                if (this.media.hasAttribute('crossorigin')) {\n                    this.config.crossorigin = true;\n                }\n                if (this.media.hasAttribute('autoplay')) {\n                    this.config.autoplay = true;\n                }\n                if (this.media.hasAttribute('playsinline')) {\n                    this.config.inline = true;\n                }\n                if (this.media.hasAttribute('muted')) {\n                    this.config.muted = true;\n                }\n                if (this.media.hasAttribute('loop')) {\n                    this.config.loop.active = true;\n                }\n\n                break;\n\n            default:\n                this.debug.error('Setup failed: unsupported type');\n                return;\n        }\n\n        // Check for support again but with type\n        this.supported = support.check(this.type, this.provider, this.config.inline);\n\n        // If no support for even API, bail\n        if (!this.supported.api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        // Create listeners\n        this.listeners = new Listeners(this);\n\n        // Setup local storage for user settings\n        this.storage = new Storage(this);\n\n        // Store reference\n        this.media.plyr = this;\n\n        // Wrap media\n        if (!utils.is.element(this.elements.container)) {\n            this.elements.container = utils.createElement('div');\n            utils.wrap(this.media, this.elements.container);\n        }\n\n        // Allow focus to be captured\n        this.elements.container.setAttribute('tabindex', 0);\n\n        // Add style hook\n        ui.addStyleHook.call(this);\n\n        // Setup media\n        media.setup.call(this);\n\n        // Listen for events if debugging\n        if (this.config.debug) {\n            utils.on(this.elements.container, this.config.events.join(' '), event => {\n                this.debug.log(`event: ${event.type}`);\n            });\n        }\n\n        // Setup interface\n        // If embed but not fully supported, build interface now to avoid flash of controls\n        if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n            ui.build.call(this);\n        }\n\n        // Container listeners\n        this.listeners.container();\n\n        // Global listeners\n        this.listeners.global();\n\n        // Setup fullscreen\n        this.fullscreen = new Fullscreen(this);\n\n        // Setup ads if provided\n        this.ads = new Ads(this);\n    }\n\n    // ---------------------------------------\n    // API\n    // ---------------------------------------\n\n    /**\n     * Types and provider helpers\n     */\n    get isHTML5() {\n        return Boolean(this.provider === providers.html5);\n    }\n    get isEmbed() {\n        return Boolean(this.isYouTube || this.isVimeo);\n    }\n    get isYouTube() {\n        return Boolean(this.provider === providers.youtube);\n    }\n    get isVimeo() {\n        return Boolean(this.provider === providers.vimeo);\n    }\n    get isVideo() {\n        return Boolean(this.type === types.video);\n    }\n    get isAudio() {\n        return Boolean(this.type === types.audio);\n    }\n\n    /**\n     * Play the media, or play the advertisement (if they are not blocked)\n     */\n    play() {\n        if (!utils.is.function(this.media.play)) {\n            return null;\n        }\n\n        // If ads are enabled, wait for them first\n        if (this.ads.enabled && !this.ads.initialized) {\n            return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n        }\n\n        // Return the promise (for HTML5)\n        return this.media.play();\n    }\n\n    /**\n     * Pause the media\n     */\n    pause() {\n        if (!this.playing || !utils.is.function(this.media.pause)) {\n            return;\n        }\n\n        this.media.pause();\n    }\n\n    /**\n     * Get paused state\n     */\n    get paused() {\n        return Boolean(this.media.paused);\n    }\n\n    /**\n     * Get playing state\n     */\n    get playing() {\n        return Boolean(!this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n    }\n\n    /**\n     * Get ended state\n     */\n    get ended() {\n        return Boolean(this.media.ended);\n    }\n\n    /**\n     * Toggle playback based on current status\n     * @param {boolean} input\n     */\n    togglePlay(input) {\n        // Toggle based on current state if nothing passed\n        const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n        if (toggle) {\n            this.play();\n        } else {\n            this.pause();\n        }\n    }\n\n    /**\n     * Stop playback\n     */\n    stop() {\n        this.restart();\n        this.pause();\n    }\n\n    /**\n     * Restart playback\n     */\n    restart() {\n        this.currentTime = 0;\n    }\n\n    /**\n     * Rewind\n     * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n     */\n    rewind(seekTime) {\n        this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Fast forward\n     * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n     */\n    forward(seekTime) {\n        this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Seek to a time\n     * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n     */\n    set currentTime(input) {\n        let targetTime = 0;\n\n        if (utils.is.number(input)) {\n            targetTime = input;\n        }\n\n        // Normalise targetTime\n        if (targetTime < 0) {\n            targetTime = 0;\n        } else if (targetTime > this.duration) {\n            targetTime = this.duration;\n        }\n\n        // Set\n        this.media.currentTime = targetTime.toFixed(4);\n\n        // Logging\n        this.debug.log(`Seeking to ${this.currentTime} seconds`);\n    }\n\n    /**\n     * Get current time\n     */\n    get currentTime() {\n        return Number(this.media.currentTime);\n    }\n\n    /**\n     * Get buffered\n     */\n    get buffered() {\n        const { buffered } = this.media;\n\n        // YouTube / Vimeo return a float between 0-1\n        if (utils.is.number(buffered)) {\n            return buffered;\n        }\n\n        // HTML5\n        // TODO: Handle buffered chunks of the media\n        // (i.e. seek to another section buffers only that section)\n        if (buffered && buffered.length && this.duration > 0) {\n            return buffered.end(0) / this.duration;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Get seeking status\n     */\n    get seeking() {\n        return Boolean(this.media.seeking);\n    }\n\n    /**\n     * Get the duration of the current media\n     */\n    get duration() {\n        // Faux duration set via config\n        const fauxDuration = parseInt(this.config.duration, 10);\n\n        // True duration\n        const realDuration = Number(this.media.duration);\n\n        // If custom duration is funky, use regular duration\n        return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n    }\n\n    /**\n     * Set the player volume\n     * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n     */\n    set volume(value) {\n        let volume = value;\n        const max = 1;\n        const min = 0;\n\n        if (utils.is.string(volume)) {\n            volume = Number(volume);\n        }\n\n        // Load volume from storage if no value specified\n        if (!utils.is.number(volume)) {\n            volume = this.storage.get('volume');\n        }\n\n        // Use config if all else fails\n        if (!utils.is.number(volume)) {\n            ({ volume } = this.config);\n        }\n\n        // Maximum is volumeMax\n        if (volume > max) {\n            volume = max;\n        }\n        // Minimum is volumeMin\n        if (volume < min) {\n            volume = min;\n        }\n\n        // Update config\n        this.config.volume = volume;\n\n        // Set the player volume\n        this.media.volume = volume;\n\n        // If muted, and we're increasing volume, reset muted state\n        if (this.muted && volume > 0) {\n            this.muted = false;\n        }\n    }\n\n    /**\n     * Get the current player volume\n     */\n    get volume() {\n        return Number(this.media.volume);\n    }\n\n    /**\n     * Increase volume\n     * @param {boolean} step - How much to decrease by (between 0 and 1)\n     */\n    increaseVolume(step) {\n        const volume = this.media.muted ? 0 : this.volume;\n        this.volume = volume + (utils.is.number(step) ? step : 1);\n    }\n\n    /**\n     * Decrease volume\n     * @param {boolean} step - How much to decrease by (between 0 and 1)\n     */\n    decreaseVolume(step) {\n        const volume = this.media.muted ? 0 : this.volume;\n        this.volume = volume - (utils.is.number(step) ? step : 1);\n    }\n\n    /**\n     * Set muted state\n     * @param {boolean} mute\n     */\n    set muted(mute) {\n        let toggle = mute;\n\n        // Load muted state from storage\n        if (!utils.is.boolean(toggle)) {\n            toggle = this.storage.get('muted');\n        }\n\n        // Use config if all else fails\n        if (!utils.is.boolean(toggle)) {\n            toggle = this.config.muted;\n        }\n\n        // Update config\n        this.config.muted = toggle;\n\n        // Set mute on the player\n        this.media.muted = toggle;\n    }\n\n    /**\n     * Get current muted state\n     */\n    get muted() {\n        return Boolean(this.media.muted);\n    }\n\n    /**\n     * Check if the media has audio\n     */\n    get hasAudio() {\n        // Assume yes for all non HTML5 (as we can't tell...)\n        if (!this.isHTML5) {\n            return true;\n        }\n\n        if (this.isAudio) {\n            return true;\n        }\n\n        // Get audio tracks\n        return (\n            Boolean(this.media.mozHasAudio) ||\n            Boolean(this.media.webkitAudioDecodedByteCount) ||\n            Boolean(this.media.audioTracks && this.media.audioTracks.length)\n        );\n    }\n\n    /**\n     * Set playback speed\n     * @param {number} speed - the speed of playback (0.5-2.0)\n     */\n    set speed(input) {\n        let speed = null;\n\n        if (utils.is.number(input)) {\n            speed = input;\n        }\n\n        if (!utils.is.number(speed)) {\n            speed = this.storage.get('speed');\n        }\n\n        if (!utils.is.number(speed)) {\n            speed = this.config.speed.selected;\n        }\n\n        // Set min/max\n        if (speed < 0.1) {\n            speed = 0.1;\n        }\n        if (speed > 2.0) {\n            speed = 2.0;\n        }\n\n        if (!this.config.speed.options.includes(speed)) {\n            this.debug.warn(`Unsupported speed (${speed})`);\n            return;\n        }\n\n        // Update config\n        this.config.speed.selected = speed;\n\n        // Set media speed\n        this.media.playbackRate = speed;\n    }\n\n    /**\n     * Get current playback speed\n     */\n    get speed() {\n        return Number(this.media.playbackRate);\n    }\n\n    /**\n     * Set playback quality\n     * Currently YouTube only\n     * @param {string} input - Quality level\n     */\n    set quality(input) {\n        let quality = null;\n\n        if (utils.is.string(input)) {\n            quality = input;\n        }\n\n        if (!utils.is.string(quality)) {\n            quality = this.storage.get('quality');\n        }\n\n        if (!utils.is.string(quality)) {\n            quality = this.config.quality.selected;\n        }\n\n        if (!this.options.quality.includes(quality)) {\n            this.debug.warn(`Unsupported quality option (${quality})`);\n            return;\n        }\n\n        // Update config\n        this.config.quality.selected = quality;\n\n        // Set quality\n        this.media.quality = quality;\n    }\n\n    /**\n     * Get current quality level\n     */\n    get quality() {\n        return this.media.quality;\n    }\n\n    /**\n     * Toggle loop\n     * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n     * @param {boolean} input - Whether to loop or not\n     */\n    set loop(input) {\n        const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n        this.config.loop.active = toggle;\n        this.media.loop = toggle;\n\n        // Set default to be a true toggle\n        /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n        switch (type) {\n            case 'start':\n                if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n                    this.config.loop.end = null;\n                }\n                this.config.loop.start = this.currentTime;\n                // this.config.loop.indicator.start = this.elements.display.played.value;\n                break;\n\n            case 'end':\n                if (this.config.loop.start >= this.currentTime) {\n                    return this;\n                }\n                this.config.loop.end = this.currentTime;\n                // this.config.loop.indicator.end = this.elements.display.played.value;\n                break;\n\n            case 'all':\n                this.config.loop.start = 0;\n                this.config.loop.end = this.duration - 2;\n                this.config.loop.indicator.start = 0;\n                this.config.loop.indicator.end = 100;\n                break;\n\n            case 'toggle':\n                if (this.config.loop.active) {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = null;\n                } else {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = this.duration - 2;\n                }\n                break;\n\n            default:\n                this.config.loop.start = 0;\n                this.config.loop.end = null;\n                break;\n        } */\n    }\n\n    /**\n     * Get current loop state\n     */\n    get loop() {\n        return Boolean(this.media.loop);\n    }\n\n    /**\n     * Set new media source\n     * @param {object} input - The new source object (see docs)\n     */\n    set source(input) {\n        source.change.call(this, input);\n    }\n\n    /**\n     * Get current source\n     */\n    get source() {\n        return this.media.currentSrc;\n    }\n\n    /**\n     * Set the poster image for a HTML5 video\n     * @param {input} - the URL for the new poster image\n     */\n    set poster(input) {\n        if (!this.isHTML5 || !this.isVideo) {\n            this.debug.warn('Poster can only be set on HTML5 video');\n            return;\n        }\n\n        if (utils.is.string(input)) {\n            this.media.setAttribute('poster', input);\n        }\n    }\n\n    /**\n     * Get the current poster image\n     */\n    get poster() {\n        if (!this.isHTML5 || !this.isVideo) {\n            return null;\n        }\n\n        return this.media.getAttribute('poster');\n    }\n\n    /**\n     * Set the autoplay state\n     * @param {boolean} input - Whether to autoplay or not\n     */\n    set autoplay(input) {\n        const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n        this.config.autoplay = toggle;\n    }\n\n    /**\n     * Get the current autoplay state\n     */\n    get autoplay() {\n        return Boolean(this.config.autoplay);\n    }\n\n    /**\n     * Toggle captions\n     * @param {boolean} input - Whether to enable captions\n     */\n    toggleCaptions(input) {\n        // If there's no full support, or there's no caption toggle\n        if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n            return;\n        }\n\n        // If the method is called without parameter, toggle based on current value\n        const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n        // Nothing to change...\n        if (this.captions.active === show) {\n            return;\n        }\n\n        // Set global\n        this.captions.active = show;\n\n        // Toggle state\n        utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n        // Add class hook\n        utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n        // Trigger an event\n        utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n    }\n\n    /**\n     * Set the captions language\n     * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n     */\n    set language(input) {\n        // Nothing specified\n        if (!utils.is.string(input)) {\n            return;\n        }\n\n        // Toggle captions based on input\n        this.toggleCaptions(!utils.is.empty(input));\n\n        // If empty string is passed, assume disable captions\n        if (utils.is.empty(input)) {\n            return;\n        }\n\n        // Normalize\n        const language = input.toLowerCase();\n\n        // If nothing to change, bail\n        if (this.language === language) {\n            return;\n        }\n\n        // Update config\n        this.captions.language = language;\n\n        // Clear caption\n        captions.setText.call(this, null);\n\n        // Update captions\n        captions.setLanguage.call(this);\n\n        // Trigger an event\n        utils.dispatchEvent.call(this, this.media, 'languagechange');\n    }\n\n    /**\n     * Get the current captions language\n     */\n    get language() {\n        return this.captions.language;\n    }\n\n    /**\n     * Toggle picture-in-picture playback on WebKit/MacOS\n     * TODO: update player with state, support, enabled\n     * TODO: detect outside changes\n     */\n    set pip(input) {\n        const states = {\n            pip: 'picture-in-picture',\n            inline: 'inline',\n        };\n\n        // Bail if no support\n        if (!support.pip) {\n            return;\n        }\n\n        // Toggle based on current state if not passed\n        const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n        // Toggle based on current state\n        this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n    }\n\n    /**\n     * Get the current picture-in-picture state\n     */\n    get pip() {\n        if (!support.pip) {\n            return null;\n        }\n\n        return this.media.webkitPresentationMode;\n    }\n\n    /**\n     * Trigger the airplay dialog\n     * TODO: update player with state, support, enabled\n     */\n    airplay() {\n        // Show dialog if supported\n        if (support.airplay) {\n            this.media.webkitShowPlaybackTargetPicker();\n        }\n    }\n\n    /**\n     * Toggle the player controls\n     * @param {boolean} toggle - Whether to show the controls\n     */\n    toggleControls(toggle) {\n        // We need controls of course...\n        if (!utils.is.element(this.elements.controls)) {\n            return;\n        }\n\n        // Don't hide if no UI support or it's audio\n        if (!this.supported.ui || this.isAudio) {\n            return;\n        }\n\n        let delay = 0;\n        let show = toggle;\n        let isEnterFullscreen = false;\n\n        // Get toggle state if not set\n        if (!utils.is.boolean(toggle)) {\n            if (utils.is.event(toggle)) {\n                // Is the enter fullscreen event\n                isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n                // Whether to show controls\n                show = [\n                    'mouseenter',\n                    'mousemove',\n                    'touchstart',\n                    'touchmove',\n                    'focusin',\n                ].includes(toggle.type);\n\n                // Delay hiding on move events\n                if ([\n                    'mousemove',\n                    'touchmove',\n                    'touchend',\n                ].includes(toggle.type)) {\n                    delay = 2000;\n                }\n\n                // Delay a little more for keyboard users\n                if (toggle.type === 'focusin') {\n                    delay = 3000;\n                    utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n                }\n            } else {\n                show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n            }\n        }\n\n        // Clear timer on every call\n        clearTimeout(this.timers.controls);\n\n        // If the mouse is not over the controls, set a timeout to hide them\n        if (show || this.paused || this.loading) {\n            // Check if controls toggled\n            const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n            // Trigger event\n            if (toggled) {\n                utils.dispatchEvent.call(this, this.media, 'controlsshown');\n            }\n\n            // Always show controls when paused or if touch\n            if (this.paused || this.loading) {\n                return;\n            }\n\n            // Delay for hiding on touch\n            if (support.touch) {\n                delay = 3000;\n            }\n        }\n\n        // If toggle is false or if we're playing (regardless of toggle),\n        // then set the timer to hide the controls\n        if (!show || this.playing) {\n            this.timers.controls = setTimeout(() => {\n                // If the mouse is over the controls (and not entering fullscreen), bail\n                if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n                    return;\n                }\n\n                // Restore transition behaviour\n                if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n                    utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n                }\n\n                // Check if controls toggled\n                const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n                // Trigger event and close menu\n                if (toggled) {\n                    utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n                    if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n                        controls.toggleMenu.call(this, false);\n                    }\n                }\n            }, delay);\n        }\n    }\n\n    /**\n     * Add event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    on(event, callback) {\n        utils.on(this.elements.container, event, callback);\n    }\n\n    /**\n     * Remove event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    off(event, callback) {\n        utils.off(this.elements.container, event, callback);\n    }\n\n    /**\n     * Destroy an instance\n     * Event listeners are removed when elements are removed\n     * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n     * @param {function} callback - Callback for when destroy is complete\n     * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n     */\n    destroy(callback, soft = false) {\n        if (!this.ready) {\n            return;\n        }\n\n        const done = () => {\n            // Reset overflow (incase destroyed while in fullscreen)\n            document.body.style.overflow = '';\n\n            // GC for embed\n            this.embed = null;\n\n            // If it's a soft destroy, make minimal changes\n            if (soft) {\n                if (Object.keys(this.elements).length) {\n                    // Remove elements\n                    utils.removeElement(this.elements.buttons.play);\n                    utils.removeElement(this.elements.captions);\n                    utils.removeElement(this.elements.controls);\n                    utils.removeElement(this.elements.wrapper);\n\n                    // Clear for GC\n                    this.elements.buttons.play = null;\n                    this.elements.captions = null;\n                    this.elements.controls = null;\n                    this.elements.wrapper = null;\n                }\n\n                // Callback\n                if (utils.is.function(callback)) {\n                    callback();\n                }\n            } else {\n                // Unbind listeners\n                this.listeners.clear();\n\n                // Replace the container with the original element provided\n                utils.replaceElement(this.elements.original, this.elements.container);\n\n                // Event\n                utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n                // Callback\n                if (utils.is.function(callback)) {\n                    callback.call(this.elements.original);\n                }\n\n                // Reset state\n                this.ready = false;\n\n                // Clear for garbage collection\n                setTimeout(() => {\n                    this.elements = null;\n                    this.media = null;\n                }, 200);\n            }\n        };\n\n        // Stop playback\n        this.stop();\n\n        // Type specific stuff\n        switch (`${this.provider}:${this.type}`) {\n            case 'html5:video':\n            case 'html5:audio':\n                // Clear timeout\n                clearTimeout(this.timers.loading);\n\n                // Restore native video controls\n                ui.toggleNativeControls.call(this, true);\n\n                // Clean up\n                done();\n\n                break;\n\n            case 'youtube:video':\n                // Clear timers\n                clearInterval(this.timers.buffering);\n                clearInterval(this.timers.playing);\n\n                // Destroy YouTube API\n                if (this.embed !== null) {\n                    this.embed.destroy();\n                }\n\n                // Clean up\n                done();\n\n                break;\n\n            case 'vimeo:video':\n                // Destroy Vimeo API\n                // then clean up (wait, to prevent postmessage errors)\n                if (this.embed !== null) {\n                    this.embed.unload().then(done);\n                }\n\n                // Vimeo does not always return\n                setTimeout(done, 200);\n\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    /**\n     * Check for support for a mime type (HTML5 only)\n     * @param {string} type - Mime type\n     */\n    supports(type) {\n        return support.mime.call(this, type);\n    }\n\n    /**\n     * Check for support\n     * @param {string} type - Player type (audio/video)\n     * @param {string} provider - Provider (html5/youtube/vimeo)\n     * @param {bool} inline - Where player has `playsinline` sttribute\n     */\n    static supported(type, provider, inline) {\n        return support.check(type, provider, inline);\n    }\n\n    /**\n     * Load an SVG sprite into the page\n     * @param {string} url - URL for the SVG sprite\n     * @param {string} [id] - Unique ID\n     */\n    static loadSprite(url, id) {\n        return utils.loadSprite(url, id);\n    }\n}\n\nexport default Plyr;\n""]}"
4d03b39b575ade8294f1c72b0b54246a0718aa11,10454552,            // credit: http://stackoverflow.com/a/10454552/677735
fe191f8c3953260b449a5d160cf09123672903e9,6480317,        // http://stackoverflow.com/a/6480317/732016
4a4e6b9b146a83ab23d54c5ceb5ba38d2f0ea3fd,958908,"</li><li><a rel=""nofollow"" class=""external text"" href=""http://stackoverflow.com/questions/958908/how-do-you-reverse-a-string-in-place-in-javascript"">Codice 2</a> "
ab49d1f3e2377b038240eb86e69a5196977826a6,3330919,        // http://stackoverflow.com/a/3330919)
4b670ff81bbe3e05b363b0912d5521f71b1ac73f,6989100,        // http://stackoverflow.com/questions/6989100/sort-points-in-clockwise-order
3a9c836e54ff430008f1568a544ad17338db87a4,30847609,        // http://stackoverflow.com/questions/30845397/angular-expressive-directive-design/30847609#30847609
7a60f9b99e45d7440fa606aba8e6235ad15daf55,12125038,  # http://stackoverflow.com/questions/12125038/where-do-i-confirm-user-created-with-factorygirl
a2419f01281cb9a5d4b5d37533fb709ad38d7cff,42082131,          <!-- see https://stackoverflow.com/questions/42082131/maven-surefire-verify-java-lang-classnotfoundexception -->
ca48278ea00796d33856e52cd140b01a89a4aec3,11929099,                // http://stackoverflow.com/questions/11929099/
854c5a6c9a86eda4f32c4be8fc8253f14058d983,3290908,# https://stackoverflow.com/questions/3290908/which-files-generated-by-autotools-should-i-keep-in-version-control-repository 
0fa1e8048bd55798f40f1293a085b8e32f16baee,472729," * http://stackoverflow.com/a/472729)  However, setting img[src] does normalize the URL."
bb82658f800a60bee423a7ea366d5bcff67bed81,1543466,// http://stackoverflow.com/questions/1543466/how-do-i-change-a-tcp-socket-to-be-non-blocking
65a7e2d26539ac65bff28008bed6eb5d7ded799f,42326134,    # https://stackoverflow.com/a/42326134/3211506
e1b948b1c5ee173f56990c11251c2df19aeed1e8,4933285,# http://stackoverflow.com/questions/4933285/how-to-detemine-python-version-in-makefile
6ecf34c6401fa152f9a5b28bae634840efe80efd,8421952,"* Change the files your OS provides to setup the base environment (it might be useful to look into `/etc/paths.d`, `/etc/profile`, and [environment.plist](http://stackoverflow.com/a/8421952/293735))"
6007dea4ae7e1cd4fd758f5909fca0b6dcbd430b,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
36ea4e1ed6a0038b98554f4241f679ee4ba8fad2,5427656,<p ><a name=UIImage+fixOrientation href=http://stackoverflow.com/questions/5427656/ios-uiimagepickercontroller-result-image-orientation-after-upload>UIImage+fixOrientation</a></p>
49aa81386c93766feb58d89ead5c53a721e5cf73,8955580,// Thank you: http://stackoverflow.com/a/8955580
fb0849f541488fa51d1379ba269daf0d9da46ecd,29639424,"  ""https://www.stackoverflow.com/questions/29639424/propagation-requires-new-seems-to-not-work"","
14225a197c7ecfd93329f9406a773c12710f73da,10046972,	  // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request
a1403b032fa4c991094d7668e79ffcee09e0bd2a,4659929,// Reference: https://stackoverflow.com/questions/4659929/how-to-use-utf-8-in-resource-properties-with-resourcebundle
2869e16acf331c78d125136fddfb5ca7882c3fcb,26603875,			// http://stackoverflow.com/a/26603875
03d7d1638c6e36c993769dfe844c56e0f1717794,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
1a22c1ad08ca29f9cb7e66dd171dc88727d3b9fd,190560,// The following code adapted from http://stackoverflow.com/questions/190560/jquery-animate-backgroundcolor
3b8d2c7f882c2852321e326512442445b3a2cd15,3633286,        See http://stackoverflow.com/questions/3633286/understanding-the-counters-in-proc-pid-io
237d5f9e5ab08cfb62288f0ac67d86362d557a8b,19465187,                //case insensitive selectors (http://stackoverflow.com/a/19465187/1081396)
738d6d60a9d6b247f92397feb2097f2d308170b4,100003,* [What is a metaclass in Python ?](http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python)
bbc2493e772057d4785f2d4f728c33d498860730,263743,   * @author http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea
981380c9870b9a6193e908e586f7f0fc68261f70,7192563,                    // see http://stackoverflow.com/questions/7192563/touchend-event-properties
88c101d3ad6da845c4b94533730d110ed4a62098,1837546,    /// http://stackoverflow.com/questions/1837546/how-would-you-make-this-switch-statement-as-fast-as-possible
5ec107b8cf90af58edf36f3e0a8429e72e075000,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
4c49d47ed94ff0846cccac99b28bc5d3f36388f1,12866060, * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}
b3cfab3ca84252c8db48a7867dd839ca91b86759,4199694, * http://stackoverflow.com/questions/4199694/data-structure-for-text-editor
79e8f3d13b45878df784ad5e684bdc2197b28fae,14899911,"- Combining `overflow: hidden` and CSS transforms in z-space causes unexpected results.  Unfortunately, this is a bug common in the majority of currently available browser implementations.  The inclusion of `overflow: hidden` causes the browser to not interpret z depth correctly when a perspective is set.  This issue is referenced on [StackOverflow](http://stackoverflow.com/questions/14899911/overflow-hidden-breaking-translatez) and is blogged about [here](http://jbkflex.wordpress.com/2013/04/04/css3-transformations-showing-content-outside-overflowhidden-region-in-firefoxandroid/)."
2835e10bb63f91f138c75e4ad6427907f32f08eb,20645231, * Node.js apps can now also trigger the inverse port binding mechanism by passing `'/passenger'` as argument. This was introduced in order to be able to support the Hapi.js framework. Please read http://stackoverflow.com/questions/20645231/phusion-passenger-error-http-server-listen-was-called-more-than-once/20645549 for more information regarding Hapi.js support.
cac843c064237076e7cbde6e31d2b3508b3f4a04,28210364,    // http://stackoverflow.com/a/28210364/1070244
41020e1f3452c2283fa8f82a39e2f52463b132e3,21170493,[discussion]: http://stackoverflow.com/questions/21170493/when-are-higher-kinded-types-useful
9da00c29366f13d83c653856bb74a38ece9ef9d2,6068820,06:49 < ljharb> http://stackoverflow.com/questions/6068820/node-js-problems-with-response-write
dfaddd0c273712ef6dbacebe7166b3d2aa39d567,9907751,//http://stackoverflow.com/questions/9907751/android-update-a-contact   - image
d4f4e53cbcadcc059c0f12b1d79310c96118ef77,26603875,		// http://stackoverflow.com/a/26603875
e4407c02c9ede14e73396aa76baa50dd081882fd,5174810,## http://stackoverflow.com/questions/5174810/how-to-turn-off-blinking-cursor-in-command-window
1969004853972e117ac86b180ff8dbab7a1e612d,44773079,// See https://stackoverflow.com/a/44773079
ba65c3ee65b675ed42537c53539c6259144e5097,5438771,        // as per http://stackoverflow.com/a/5438771.
affa6f8621606e997f4b80a12c6152d70c5084a7,11910501,     * http://stackoverflow.com/questions/11910501/why-did-gcc-generate-mov-eax-eax-and-what-does-it-mean
86dae7611ee2417101408bfa147027c698398c85,3758880,     * From https://stackoverflow.com/a/3758880/802383
e8fe7dc9c7b16bc86f572d205e15a1b5034e2c43,33497697,# http://stackoverflow.com/a/33497697/861745
2f0f20849660e0c19bc61f98618f72052c285fab,1197928 105034 1349404 8809472 6122571,"{""version"":3,""sources"":[""webpack://pnp.sp-addinhelpers/webpack/universalModuleDefinition"",""webpack://pnp.sp-addinhelpers/webpack/bootstrap"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/common/index.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/common/src/adalclient.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/common/src/collections.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/common/src/common.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/common/src/libconfig.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/common/src/netutil.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/common/src/storage.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/common/src/util.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/logging/index.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/logging/src/listeners.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/logging/src/logger.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/logging/src/logging.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/logging/src/loglevel.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/odata/index.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/odata/src/caching.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/odata/src/odata.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/odata/src/odatabatch.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/odata/src/parsers.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/odata/src/pipeline.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/odata/src/queryable.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp-addinhelpers/index.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp-addinhelpers/src/addinhelpers.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp-addinhelpers/src/sprequestexecutorclient.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp-addinhelpers/src/sprestaddin.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/index.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/appcatalog.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/attachmentfiles.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/batch.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/clientsidepages.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/comments.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/config/splibconfig.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/contenttypes.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/features.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/fields.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/files.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/folders.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/forms.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/hubsites.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/items.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/lists.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/navigation.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/net/digestcache.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/net/sphttpclient.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/odata.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/regionalsettings.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/relateditems.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/rest.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/roles.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/search.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/searchsuggest.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/sharepointqueryable.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/sharepointqueryablesecurable.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/sharepointqueryableshareable.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/site.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/sitedesigns.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/sitegroups.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/sitescripts.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/siteusers.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/social.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/sp.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/subscriptions.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/types.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/usercustomactions.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/userprofiles.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/utilities.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/utils/extractweburl.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/utils/metadata.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/utils/toabsoluteurl.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/views.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/webparts.js"",""webpack://pnp.sp-addinhelpers/./build/packages-es5/sp/src/webs.js"",""webpack://pnp.sp-addinhelpers/./node_modules/adal-angular/dist/adal.min.js"",""webpack://pnp.sp-addinhelpers/./node_modules/tslib/tslib.es6.js"",""webpack://pnp.sp-addinhelpers/(webpack)/buildin/global.js""],""names"":[],""mappings"":"";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6B;AAC7B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACkB;AACZ;AACvC;AACsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2DAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,EAAE;AACjF;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,oEAAW;AACrD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,+DAAsB;AACF;AACtB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,+DAAsB;AACE;AAC1B,sC;;;;;;;;;;;;ACpMA;AAAA;AAAA;AAAA;AAAgC;AAChC;AACA;AACA;AACA,oBAAoB,oDAAM,kDAAkD,yCAAyC,kBAAkB,EAAE,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uC;;;;;;;;;;;;AClCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6B;AACC;AACF;AACF;AACA;AACH;AACvB,kC;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AAAA;AAAuD;AAChD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8DAAS,UAAU,gEAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC4B;AAC7B;AACO;AACP,qC;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACqB;AAC/C;AACP;AACA,oCAAoC,kBAAkB;AACtD;AACA;AACA,SAAS;AACT;AACA;AACO;AACP,QAAQ,kEAAoB;AAC5B,sBAAsB,oDAAM,qBAAqB;AACjD,iBAAiB,oDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;AAClC,mC;;;;;;;;;;;;;AC5DA;AAAA;AAAA;AAAA;AAAA;AAA4E;AAChC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4BAA4B;AAC3E;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,kEAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAa;AAC9C;AACA;AACA;AACA,qBAAqB,qDAAO;AAC5B;AACA,eAAe,iDAAG,EAAE,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAc,uCAAuC,wDAAa;AACzF,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,CAAC;AACkC;AACnC;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,mC;;;;;;;;;;;;AChPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA,iCAAiC,mCAAmC,EAAE;AACtE,8BAA8B,6DAA6D,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iCAAiC,qBAAqB;AACtD,4BAA4B,uBAAuB,aAAa,GAAG;AACnE;AACA;AACA;AACA;AACA,+CAA+C,kBAAkB,EAAE,gBAAgB,aAAa;AAChG;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,6BAA6B,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,gC;;;;;;;;;;;;AC9OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8B;AAC9B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,qC;;;;;;;;;;;;ACzEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,2CAA2C,4CAA4C,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD,6BAA6B,iCAAiC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAwD;AACrF;AACA;AACA,CAAC;AACiB;AAClB;AACA;AACA,wCAAwC,kCAAkC;AAC1E,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,+BAA+B,sBAAsB;AACrD,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA,wDAAwD,8BAA8B,EAAE;AACxF;AACA;AACA;AACA,CAAC;AACD,kC;;;;;;;;;;;;AClIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACI;AAC0B;AAChE,mC;;;;;;;;;;;;ACHA;AAAA;AAAA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B,oC;;;;;;;;;;;;ACXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AAC5B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAuE;AACvE;AACA;AACA;AACA,0BAA0B,2DAAO,uBAAuB,yDAAa;AACrE,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,iCAAiC,4DAAgB;AACjD;AACA,CAAC;AACyB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,2BAA2B,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;AAChC,mC;;;;;;;;;;;;ACzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AACA;AACC;AACC;AACC;AAC7B,iC;;;;;;;;;;;;ACLA;AAAA;AAAA;AAAsC;AACtC;AACA;AACA,kCAAkC,YAAY,2DAAO,GAAG;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iCAAiC,EAAE;AAClE,+BAA+B,4BAA4B,EAAE;AAC7D,+BAA+B,kCAAkC,EAAE;AACnE,+BAA+B,iBAAiB,EAAE;AAClD;AACA;AACA,CAAC;AACqB;AACtB,sC;;;;;;;;;;;;ACxFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AAC1C;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,0BAA0B;AAC1D,oCAAoC,kCAAkC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC2B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,sCAAsC,kEAAkE,EAAE;AAC1G,uCAAuC,4CAA4C,EAAE;AACrF,qCAAqC,kBAAkB,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAG;AACf,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,YAAY,0DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB,mC;;;;;;;;;;;;AC1JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiB;AACZ;AAC2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mDAAM;AACV,cAAc,mDAAM,yDAAyD;AAC7E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,mDAAM;AACd;AACA,qDAAqD,0BAA0B,EAAE;AACjF,QAAQ,mDAAM;AACd;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA,iDAAiD,uDAAG;AACpD,gBAAgB,mDAAM;AACtB;AACA;AACA;AACA,YAAY,mDAAM;AAClB;AACA,mEAAmE,kBAAkB,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mDAAM;AAClB,sBAAsB,mDAAM,qCAAqC;AACjE;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB,uCAAuC,uDAAc;AACrD;AACA,mCAAmC,0DAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAM;AAC9B,kCAAkC,mDAAM,qCAAqC;AAC7E;AACA;AACA,yBAAyB;AACzB,4BAA4B,0DAAM;AAClC;AACA;AACA;AACA,4BAA4B,uDAAG;AAC/B;AACA;AACA,6EAA6E,qBAAqB,EAAE;AACpG;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA,qCAAqC,6DAAoB;AACzD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAM;AAC1B;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA,2BAA2B,0DAAM,sBAAsB,GAAG,uBAAuB;AACjF;AACA,+CAA+C,uCAAuC,EAAE;AACxF,6CAA6C,mCAAmC,EAAE;AAClF,0CAA0C,qBAAqB,EAAE;AACjE,yCAAyC,kBAAkB,EAAE;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB,0BAA0B,mDAAM,qCAAqC;AACrE;AACA;AACA,iBAAiB;AACjB;AACA;AACA,gBAAgB,mDAAM;AACtB,0BAA0B,mDAAM,qCAAqC;AACrE;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA;AACA,CAAC;AAC0B;AACpB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;;;;;;;;;;;AC1NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACkE;AACxC;AACJ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAY;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAY;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA,uCAAuC,kEAAkE,EAAE;AAC3G,sCAAsC,QAAQ,sDAAI,UAAU,EAAE;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2DAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2DAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA,gBAAgB,wEAAoB,4BAA4B,2DAAO;AACvE;AACA;AACA;AACA,wBAAwB,oEAAkB;AAC1C;AACA,SAAS;AACT;AACA;AACA,CAAC;AACoB;AACrB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wEAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc,2DAAkB,GAAG;AACnE,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA,gCAAgC,cAAc,2DAAkB,GAAG;AACnE,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,2DAAkB,GAAG;AACnE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,2DAAkB,GAAG;AACnE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,2DAAkB,GAAG;AACnE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,2DAAkB,GAAG;AACnE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wEAAoB;AACvC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B,qC;;;;;;;;;;;;ACxTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmC;AACnC,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AACZ;AAC9B,wC;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AAC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACd;AACf,sC;;;;;;;;;;;;ACnGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAClC;AAC9E;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,gCAAgC;AACpF;AACA,SAAS,EAAE,EAAE,EAAE,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,oDAAoD,gCAAgC,uCAAuC,EAAE,EAAE,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,oDAAoD,gCAAgC,wCAAwC,EAAE,EAAE,EAAE;AAClI;AACA;AACA,0CAA0C,gDAAkB;AAC5D,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACJ;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAU;AAC5C;AACA;AACA;AACA;AACA;AACA,kCAAkC,uDAAY;AAC9C;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,qBAAqB,kCAAkC,EAAE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACH;AAC1B,2C;;;;;;;;;;;;ACzKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACO;AACyC;AAC3C;AACY;AACK;AACD;AACtD;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F,yCAAyC;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ,mDAAM;AACd;AACA;AACA;AACA,YAAY,mDAAM;AAClB;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAY;AACrC;AACA;AACA,eAAe,0EAAa;AAC5B;AACA;AACA;AACA,2BAA2B,2BAA2B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAAO;AACpD;AACA,sEAAsE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iEAAa,8BAA8B,2DAAO;AAC5E,gBAAgB,mDAAM;AACtB;AACA;AACA;AACA,wBAAwB,uDAAG,wBAAwB,uDAAG;AACtD;AACA;AACA;AACA;AACA,kEAAkE,cAAc;AAChF;AACA;AACA;AACA;AACA;AACA,gBAAgB,gEAAY,UAAU,mEAAe;AACrD;AACA;AACA,oBAAoB,gEAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,cAAc;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,iBAAiB;AACjB;AACA;AACA,YAAY,mDAAM;AAClB,gCAAgC,2DAAO;AACvC,oCAAoC,iBAAiB,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA,oBAAoB,mDAAM;AAC1B,oDAAoD,mFAAmF,EAAE;AACzI,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,qDAAU;AACO;AACnB,iC;;;;;;;;;;;;AChMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACF;AAC4F;AAC/D;AAChB;AACb;AACQ;AACV;AACyB;AACxB;AAC9B;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,gBAAgB,EAAE;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA,YAAY,uDAAG;AACf;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA,gCAAgC,gBAAgB;AAChD,kCAAkC,eAAe;AACjD,0CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2DAAO,CAAC,0EAAa;AAC9C;AACA;AACA;AACA;AACA;AACA,+BAA+B,qCAAqC,uDAAuD;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4BAA4B;AACpE,eAAe,+CAAiB;AAChC;AACA,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uDAAG,eAAe,gEAAQ;AAChE;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,0EAAa,qBAAqB,WAAW;AACvF;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,qCAAqC,gBAAgB,0BAA0B,kBAAkB,WAAW,EAAE;AAC9G;AACA;AACA;AACA;AACA,mCAAmC,0EAAa;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,wEAAoB;AACvC,SAAS;AACT;AACA;AACA;AACA,gBAAgB,uEAAmB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wEAAmB;AAC3C;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,iDAAiD;AACjD;AACA,oBAAoB,iEAAa;AACjC;AACA,qFAAqF,IAAI;AACzF;AACA,+BAA+B,0CAAI,CAAC,0EAAa;AACjD,8BAA8B,yCAAG,CAAC,0EAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,sBAAsB,EAAE;AAC9F,qEAAqE,cAAc,gBAAgB,EAAE;AACrG,gIAAgI,oBAAoB,0BAA0B,EAAE;AAChL;AACA,gCAAgC,wEAAmB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,wEAAoB;AAC7C;AACA;AACA,6EAA6E;AAC7E,yBAAyB,wEAAoB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,EAAE,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4BAA4B;AAC5B,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,oBAAoB;AACpB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,iDAAiD,gHAAgH,EAAE;AACnK;AACA;AACA,yCAAyC,gEAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,qCAAqC,OAAO,uDAAG,YAAY;AAC3D,SAAS;AACT;AACA,iDAAiD,2GAA2G,EAAE;AAC9J;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,eAAe,+CAAiB;AAChC;AACA,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uDAAG,CAAC,gEAAQ;AAClD,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,oBAAoB,EAAE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA,2BAA2B,qCAAqC;AAChE;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD,eAAe,+CAAiB;AAChC;AACA,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,YAAY,wEAAoB;AAChC,gBAAgB,uDAAG;AACnB;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA,kCAAkC,uDAAG;AACrC;AACA;AACA;AACA,4BAA4B,uDAAG;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,2CAAI;AAClC,oCAAoC;AACpC,SAAS;AACT;AACA;AACA,eAAe,+CAAiB;AAChC;AACA,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uDAAG,CAAC,gEAAQ;AAClD,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA,0DAA0D,8BAA8B,EAAE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,iCAAiC,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAG,6BAA6B,uDAAG;AACvD;AACA,0DAA0D,0BAA0B,EAAE;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,4BAA4B,2CAAI;AAChC;AACA,uBAAuB,0DAAM,MAAM,2CAAI,CAAC,2DAAY;AACpD,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACK;AAC1B;AACA;AACA,iCAAiC,cAAc;AAC/C,mCAAmC,eAAe;AAClD;AACA;AACA;AACA,sBAAsB,2DAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,2BAA2B,yBAAyB;AACpD;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,2EAA2E,wCAAwC,EAAE;AACrH;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA,8BAA8B,yDAAyD;AACvF,kCAAkC,eAAe;AACjD;AACA;AACA;AACA,sBAAsB,2DAAO;AAC7B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,uCAAuC,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,+EAA+E,gCAAgC,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA,IAAI,+CAAiB;AACrB;AACA,8BAA8B,2DAA2D;AACzF;AACA,YAAY,uEAAmB;AAC/B,sBAAsB,2DAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACyB;AAC1B;AACA,IAAI,+CAAiB;AACrB;AACA,8BAA8B,8DAA8D;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,2CAA2C,0DAAM;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2DAAO;AACxB,mDAAmD,GAAG;AACtD;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;AAC7B,2C;;;;;;;;;;;;ACpnCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AACH;AACK;AAC5C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C,sDAAsD,iBAAiB;AACvE,mBAAmB,0DAAM;AACzB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAkB;AAC9C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACnB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C,qDAAqD,iBAAiB;AACtE,mBAAmB,0DAAM,aAAa,2DAAY;AAClD,SAAS;AACT;AACA;AACA,0BAA0B,gDAAkB;AAC5C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACZ;AACnB,oC;;;;;;;;;;;;ACtHA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACnD;AACP,IAAI,yDAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA,gBAAgB,yDAAa,8BAA8B,yDAAa;AACxE,uBAAuB,yDAAa;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA,oCAAoC,YAAY,uDAAW,GAAG;AAC9D;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC8B;AACxB;AACP,uC;;;;;;;;;;;;ACjDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACC;AAC8E;AACpE;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA,SAAS;AACT,+EAA+E,iBAAiB;AAChG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,+BAA+B,gCAAgC;AAC/D,4CAA4C,yBAAyB;AACrE,uBAAuB,uDAAG,eAAe,gEAAQ;AACjD;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA,SAAS;AACT,8BAA8B,iBAAiB;AAC/C,oBAAoB;AACpB,SAAS;AACT;AACA;AACA,oCAAoC,gDAAkB;AACtD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACP;AACxB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC,CAAC,gFAA2B;AACN;AACvB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gDAAkB;AACnC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACT;AACtB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACR;AACrB,wC;;;;;;;;;;;;ACnKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAC9E;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,4BAA4B,gDAAkB;AAC9C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACnB,oC;;;;;;;;;;;;AC3FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AAC+G;AAC7G;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B,0BAA0B,0DAAM,CAAC,gEAAQ;AACzC,SAAS;AACT,kEAAkE,iBAAiB;AACnF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,eAAe,gEAAQ;AACjD;AACA,SAAS;AACT,oDAAoD,iBAAiB;AACrE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB;AACpD;AACA;AACA;AACA;AACA,+CAA+C,0DAAM;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,cAAc,iDAAU,MAAM;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,0DAAM;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB,8DAAuB,UAAU;AACzF,sCAAsC,gBAAgB,mDAAY,WAAW;AAC7E,+CAA+C,yBAAyB,sEAA+B,aAAa;AACpH;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,0DAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,oBAAoB,0DAAM,EAAE,yBAAyB;AACrD;AACA;AACA,oBAAoB,0DAAM,EAAE,yBAAyB;AACrD;AACA,iDAAiD,0DAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAM,EAAE,yBAAyB;AACrD;AACA;AACA,oBAAoB,0DAAM,EAAE,yBAAyB;AACrD;AACA,mDAAmD,0DAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D,kCAAkC,iBAAiB;AACnD,wCAAwC,wBAAwB;AAChE,oCAAoC,oBAAoB;AACxD,wCAAwC,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,0DAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB,yDAAkB,WAAW;AACrF;AACA;AACA;AACA;AACA,8CAA8C,0DAAM;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0DAAM;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAM;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB,uDAAG;AAC1B,0BAA0B,0DAAM,CAAC,gEAAQ;AACzC,SAAS;AACT,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,UAAU,4DAAqB,UAAU;AACzE;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,iDAAiD,0DAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,sDAAsD,0DAAM;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0DAAM;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,mDAAmD,0DAAM;AACzD;AACA;AACA,wBAAwB,gDAAkB;AAC1C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACb;AAClB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wBAAwB;AAC3D,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACZ;AACjB,kC;;;;;;;;;;;;ACnZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAClC;AAChC;AACK;AACpB;AACmD;AAC3C;AACvC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,mCAAmC,sBAAsB;AACzD;AACA;AACA,+BAA+B,6BAA6B,EAAE;AAC9D,mCAAmC,6DAA6D,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,qCAAqC,iCAAiC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAA6C;AAC5E,mBAAmB,+DAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2CAA2C;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,qDAAU,KAAK,WAAW,qCAAqC,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,qDAAU,KAAK,WAAW,qCAAqC,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA,yDAAyD,uDAAY,KAAK,WAAW,qCAAqC,EAAE;AAC5H;AACA;AACA;AACA;AACA;AACA,yDAAyD,qDAAU,KAAK,WAAW,qCAAqC,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,qBAAqB,wBAAwB,EAAE;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,mBAAmB,0DAAM,MAAM,2CAAI,CAAC,2DAAY;AAChD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA,oCAAoC,aAAa;AACjD;AACA;AACA;AACA,uBAAuB,2DAAO;AAC9B;AACA,kBAAkB,8IAA8I;AAChK;AACA;AACA;AACA,0BAA0B,oJAAoJ;AAC9K;AACA,aAAa;AACb;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA,sBAAsB,8JAA8J;AACpL;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA,+BAA+B,2DAAY;AAC3C;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,8FAAgC;AAClB;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAkB;AAC9C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,gBAAgB;AAChB;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACZ;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA,CAAC,wCAAwC;AAClC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C,iC;;;;;;;;;;;;ACviBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AAC2F;AACjD;AACpD;AACO;AACR;AACmB;AAClD;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,0BAA0B,gDAAkB;AAC5C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACZ;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA,mEAAmE,UAAU,4BAA4B,EAAE,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,mBAAmB,0DAAM,KAAK,2CAAI,CAAC,2DAAY;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8DAAY;AACzC;AACA;AACA;AACA;AACA,sBAAsB,uDAAG;AACzB;AACA;AACA,iBAAiB;AACjB,aAAa,qBAAqB,iBAAiB,EAAE;AACrD,SAAS;AACT;AACA;AACA,CAAC,CAAC,gGAAkC;AAClB;AAClB,mC;;;;;;;;;;;;AC7MA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAChH;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gDAAkB;AAC9B,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACb;AAChB,iC;;;;;;;;;;;;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAChH;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gDAAkB;AACjC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACnB,oC;;;;;;;;;;;;ACjCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AACnD;AAC/C;AACJ;AACc;AACE;AACkB;AACb;AACrB;AACO;AACA;AACM;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc,6DAAkB,GAAG;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD,sCAAsC,kCAAkC,kBAAkB;AAC1F,QAAQ,oDAAM;AACd;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD,oDAAoD,mCAAmC;AACvF;AACA;AACA,2BAA2B,uDAAG,CAAC,0DAAM,CAAC,iEAAQ;AAC9C,6DAA6D,iBAAiB;AAC9E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2CAAI;AAC/B;AACA;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gEAAe;AACtC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yDAAW;AAClC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI;AAC3B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,2CAAI;AACtC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,oDAAoD,mCAAmC;AACvF;AACA;AACA;AACA,+BAA+B,uDAAG,CAAC,0DAAM,CAAC,iEAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB,aAAa,sBAAsB,kBAAkB,EAAE;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,YAAY;AAC5C;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,+FAA+F;AAC/F;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA,kBAAkB,uDAAG,EAAE,kEAAkE;AACzF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,8FAAgC;AAClB;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gDAAkB;AACrC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACP;AACxB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACN;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gBAAgB,EAAE;AAC3D;AACA;AACA,CAAC;AAC8B;AAC/B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,QAAQ,+CAAiB;AACzF;AACA,mBAAmB,iDAAmB;AACtC;AACA,0BAA0B,uDAAG,eAAe,uDAAG;AAC/C;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA,CAAC,CAAC,0DAAe;AACjB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC;AACA,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,0DAAe;AACjB,iC;;;;;;;;;;;;ACrgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACD;AACM;AACQ;AACZ;AACF;AACgB;AACwD;AAC1B;AAC/B;AACS;AACjB;AACJ;AACS;AACX;AACqB;AACtD;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,gBAAgB;AAClD,4CAA4C,4BAA4B;AACxE,4CAA4C,yBAAyB;AACrE,0BAA0B,0DAAM;AAChC;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C,SAAS;AACT,8BAA8B,OAAO,uDAAG,eAAe;AACvD,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,gBAAgB;AAClD,4CAA4C,4BAA4B;AACxE,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA,sCAAsC,0DAAM,sBAAsB,kFAAkF;AACpJ;AACA;AACA;AACA,6BAA6B,6EAA6E;AAC1G,iBAAiB,sBAAsB,kBAAkB,EAAE;AAC3D,aAAa;AACb;AACA,6BAA6B,iFAAiF;AAC9G,iBAAiB,sBAAsB,kBAAkB,EAAE;AAC3D,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAY;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAY;AACxC,SAAS;AACT;AACA;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAY;AACnC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI;AAC3B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qEAAiB;AACxC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wEAAmB;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAa;AACpC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,gDAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,uBAAuB,uDAAG,CAAC,0DAAM;AACjC,2BAA2B,oBAAoB;AAC/C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,UAAU,0DAAM,CAAC,iEAAQ,4BAA4B;AAC5E,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,UAAU,0DAAM,EAAE,gBAAgB,yBAAyB,EAAE,UAAU;AAC9F,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,UAAU,0DAAM,EAAE,gBAAgB,kCAAkC,EAAE,UAAU;AACvG,SAAS,GAAG,sBAAsB,iBAAiB,EAAE,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAG;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA,gCAAgC,0DAAM,CAAC,iEAAQ;AAC/C,wBAAwB,0DAAM,CAAC,iEAAQ;AACvC;AACA;AACA,kBAAkB,uDAAG;AACrB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAG;AACjC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,qCAAqC,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,gGAAgG;AAChG;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,0BAA0B;AAC/D,qBAAqB;AACrB,iCAAiC,kDAAkD;AACnF,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC;AACA,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA,6CAA6C,2EAAa;AAC1D;AACA;AACA,kDAAkD,8CAAW;AAC7D;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,0FAA4B;AACd;AAChB,iC;;;;;;;;;;;;AC/eA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AAC3F;AACE;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C;AACA;AACA;AACA,SAAS;AACT,2DAA2D,iBAAiB;AAC5E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA,SAAS;AACT,kEAAkE,iBAAiB;AACnF;AACA;AACA,CAAC,CAAC,kFAA6B;AACJ;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,CAAC,0DAAM;AACjC,2BAA2B,8BAA8B;AACzD,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,gFAA2B;AACH;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,iBAAiB,gDAAkB;AACnC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,wEAAmB;AACC;AACtB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD,+BAA+B,YAAY;AAC3C,yCAAyC,wBAAwB;AACjE,0CAA0C,yBAAyB;AACnE;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACQ;AAC7B,sC;;;;;;;;;;;;ACrMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACE;AACQ;AACxD;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2DAAO;AACzB;AACA,wCAAwC;AACxC,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA,qBAAqB,0DAAM,UAAU,mEAAe;AACpD;AACA,SAAS;AACT,6BAA6B,6DAAkB;AAC/C,6DAA6D,mCAAmC,EAAE;AAClG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,uC;;;;;;;;;;;;ACxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACwB;AACZ;AACD;AACvD;AACA;AACA,+BAA+B,SAAS,mEAAe,sBAAsB;AAC7E;AACA,gCAAgC,wDAAW;AAC3C;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,gDAAgD;AACpF;AACA;AACA,QAAQ,gEAAY,UAAU,mEAAe;AAC7C;AACA,QAAQ,gEAAY;AACpB;AACA;AACA;AACA;AACA;AACA,6DAA6D,cAAc;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0DAAM,QAAQ,mBAAmB;AAChD;AACA;AACA;AACA,mDAAmD,0EAAa;AAChE;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA,QAAQ,gEAAY;AACpB,kBAAkB,0DAAM,WAAW,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,MAAM;AACxD,+BAA+B,kEAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,gBAAgB;AACpD;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,iBAAiB;AACrD;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,kBAAkB;AACtD;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,mBAAmB,0DAAM,WAAW,mBAAmB;AACvD;AACA;AACA;AACA,CAAC;AACuB;AACxB,wC;;;;;;;;;;;;AClIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACkB;AACb;AACO;AACS;AAC/C;AACP;AACA;AACA,QAAQ,uDAAG;AACX;AACA,YAAY,uDAAG;AACf;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAG,qBAAqB,uDAAG;AACvC;AACA,uBAAuB,0EAAa;AACpC;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA,QAAQ,mDAAM;AACd;AACA;AACA,WAAW,mDAAO;AAClB;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA,mBAAmB,0DAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0DAAM;AACzB,SAAS;AACT;AACA;AACA,CAAC,CAAC,0DAAe;AACjB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAM;AAC7B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0DAAM;AAC7B,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,0DAAe;AACV;AACP;AACA;AACO;AACP;AACA;AACA,iC;;;;;;;;;;;;ACvFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgF;AACxE;AACG;AAC5C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,uBAAuB,gDAAkB;AACzC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACD;AAC5B;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,yBAAyB,gDAAkB;AAC3C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACD;AAC9B;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ,uDAAG,mDAAmD,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2DAAO;AACnC;AACA;AACA;AACA,kCAAkC,QAAQ,uDAAG,mDAAmD,EAAE;AAClG;AACA;AACA,4BAA4B,gDAAkB;AAC9C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACT;AACpB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,EAAE,4DAAa;AACxF;AACA;AACA,8BAA8B,gDAAkB;AAChD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACV;AACrB,4C;;;;;;;;;;;;ACpJA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACwC;AACvC;AAClC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,8CAA8C,8BAA8B;AAC5E;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,wDAAwD,gDAAkB;AAC1E,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,wEAAmB;AACa;AAClC,wC;;;;;;;;;;;;ACxHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACc;AAClB;AACD;AACqB;AACD;AACV;AACK;AACA;AACA;AACY;AAClB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,kCAAkC,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kEAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,2BAA2B,4DAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0CAAI;AACnC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yCAAG;AAClC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,8DAAgB;AAC/C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,mDAAW;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,6DAAiB;AAChD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAa;AAC5C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAW;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAW;AAC1C,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+BAA+B,mDAAQ;AACvC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,2BAA2B,yCAAG;AAC9B,wBAAwB,yCAAG;AAC3B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiB;AACX;AACP,gC;;;;;;;;;;;;ACzMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AACK;AACH;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gDAAkB;AAC5D,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACJ;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC,CAAC,gFAA2B;AACH;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yBAAyB,8BAA8B;AACvD,SAAS;AACT,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACJ;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAG;AACf,4CAA4C,0DAAM,EAAE,cAAc,6BAA6B,EAAE;AACjG;AACA;AACA,aAAa;AACb;AACA,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,gFAA2B;AACH;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,6BAA6B,gDAAkB;AAC/C,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACG;AAClC,iC;;;;;;;;;;;;ACpOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgD;AACU;AAC/C;AACA;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yBAAyB,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,+BAA+B,gBAAgB;AAC/C,4BAA4B,aAAa;AACzC;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA,oCAAoC,uBAAuB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B,qBAAqB,0DAAM,CAAC,gEAAQ,uEAAuE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wDAAwD,+DAAW;AACnE,gBAAgB,wEAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,yDAAc;AACzD;AACA;AACA,8BAA8B,iBAAiB,wBAAwB,sDAAsD,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA,eAAe,2DAAO;AACtB,eAAe,uDAAG,4BAA4B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gDAAkB;AAC/B,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACX;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,uDAAG;AAC1D,oBAAoB,0DAAM;AAC1B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,2BAA2B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa,IAAI;AACjB;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0DAA0D;AAC3D;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wDAAwD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;AACjC,kC;;;;;;;;;;;;ACtUA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACgD;AAC/C;AAClC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uDAAG,sCAAsC,oCAAoC,EAAE,iBAAiB,oBAAoB;AAC7I;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,oCAAoC,8BAA8B;AAClE,gBAAgB,uDAAG;AACnB;AACA;AACA,UAAU,GAAG;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gDAAkB;AACtC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACJ;AACzB,yC;;;;;;;;;;;;AC7CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACyD;AAC7C;AACP;AACY;AACI;AACV;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iEAAa;AAC7B;AACA,6BAA6B,2DAAO;AACpC;AACA;AACA;AACA;AACA;AACA,uBAAuB,2DAAO;AAC9B,6BAA6B,2DAAO;AACpC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0DAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mDAAM;AAClB;AACA;AACA,SAAS;AACT;AACA;AACA,2EAA2E,0BAA0B,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D,2FAA2F,6BAA6B;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C,qFAAqF,QAAQ;AAC7F,eAAe,0EAAa;AAC5B,YAAY,gEAAY;AACxB;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY,8DAAY,GAAG,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2DAAO;AAClC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,yDAAc;AACe;AAC/B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;AACzC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,kBAAkB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AACrC;AACA;AACA,aAAa;AACb,SAAS,qBAAqB,yBAAyB,EAAE,EAAE;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACsC;AACvC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,YAAY,+CAAiB;AAC7B;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,+C;;;;;;;;;;;;AC9SA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AACD;AACgD;AACvD;AAClC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAe;AACtC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gFAA2B;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wEAAmB;AAC9C;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gFAA2B;AAC/C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6BAA6B;AAC1E,wCAAwC,wBAAwB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAc;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACW;AACxC,wD;;;;;;;;;;;;AC9HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACkB;AACZ;AACkF;AAC3C;AACZ;AACZ;AACtD;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA,sBAAsB,uDAAG,kCAAkC,SAAS,cAAc,EAAE;AACpF,kCAAkC,kDAAW,QAAQ,+CAAQ,eAAe,+CAAQ;AACpF;AACA;AACA,oBAAoB,kFAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAM;AACjC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,sBAAsB,uDAAG;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gBAAgB;AAChD;AACA;AACA;AACA;AACA;AACA,kBAAkB,0DAAM;AACxB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAG,0CAA0C,SAAS,cAAc,EAAE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAM;AACjC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,iBAAiB;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kDAAkD;AACnF;AACA,kBAAkB,uDAAG,EAAE,mCAAmC;AAC1D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA,0CAA0C,gFAA2B;AACrE,6EAA6E,yBAAyB,EAAE;AACxG,qBAAqB,+CAAQ;AAC7B,qBAAqB,+CAAQ;AAC7B;AACA,2CAA2C,gFAA2B;AACtE,8EAA8E,yBAAyB,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAW,QAAQ,+CAAQ,eAAe,+CAAQ;AACxF;AACA,+BAA+B,kFAA6B;AAC5D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,mCAAmC,gFAA2B,CAAC,0EAAa;AAC5E;AACA;AACA;AACA;AACA,sBAAsB,uDAAG;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACmB;AACxC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,kDAAW,MAAM;AACvD;AACA;AACA,sBAAsB,gFAA2B,CAAC,0EAAa;AAC/D;AACA;AACA,qCAAqC,2DAAO;AAC5C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D,qDAAqD,qCAAqC;AAC1F,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,0FAA4B;AACa;AAC3C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,sDAAe,kBAAkB;AACvE,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,kDAAW,MAAM;AACvD,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,0FAA4B;AACc;AAC5C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,sDAAe,kBAAkB;AACvE,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,2DAAY;AACzE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,gFAA2B;AACD;AAC5B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,kDAAW,MAAM;AACvD,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC2C;AAC5C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ,kDAAW,MAAM;AACvD,uCAAuC,uBAAuB;AAC9D,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC6C;AAC9C,wD;;;;;;;;;;;;AC1jBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACqE;AACzE;AAC2B;AACtB;AACI;AACS;AACG;AAClD;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yCAAG;AAC1B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAQ;AAC/B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oEAAiB;AACxC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qEAAqE,YAAY,yCAAG,UAAU,EAAE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAmB;AACvC;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAmB;AACvC;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC;AACA,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uDAAG;AACzC;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8CAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG;AACA,iBAAiB,yCAAG;AACpB,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C,6CAA6C,6BAA6B;AAC1E,qCAAqC,kBAAkB;AACvD,wCAAwC,qBAAqB;AAC7D,sCAAsC,uDAAuD;AAC7F,mCAAmC,oDAAoD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B,uBAAuB,0DAAM;AAC7B,+BAA+B,8DAA8D;AAC7F,aAAa;AACb,SAAS;AACT,oDAAoD,QAAQ,+CAAiB;AAC7E;AACA,mBAAmB,iDAAmB;AACtC,6BAA6B,8DAAY;AACzC;AACA;AACA;AACA;AACA,wDAAwD;AACxD,8DAA8D,cAAc;AAC5E,yBAAyB;AACzB,qBAAqB,qBAAqB,iBAAiB,EAAE;AAC7D,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD,8BAA8B,aAAa;AAC3C,qCAAqC,kBAAkB;AACvD,wCAAwC,qBAAqB;AAC7D,mCAAmC,oDAAoD;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,oDAAoD,QAAQ,+CAAiB;AAC7E;AACA,mBAAmB,iDAAmB;AACtC,6BAA6B,8DAAY;AACzC;AACA;AACA,8BAA8B,uDAAG;AACjC;AACA,wDAAwD;AACxD,8DAA8D,cAAc;AAC5E,yBAAyB;AACzB,qBAAqB,qBAAqB,iBAAiB,EAAE;AAC7D,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA,oBAAoB,gDAAkB;AACtC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACb;AAChB,gC;;;;;;;;;;;;ACjSA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC2B;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,sGAAsG,qBAAqB;AAC3H;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,qGAAqG,+CAA+C;AACpJ;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,qGAAqG;AACrG;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,2GAA2G,SAAS;AACpH;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,sGAAsG,yBAAyB;AAC/H;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,sGAAsG,SAAS;AAC/G;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,yGAAyG,SAAS;AAClH;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA,sCAAsC,iDAAiD;AACvF;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA,sCAAsC,+BAA+B;AACrE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC;AACA,mBAAmB,iDAAmB;AACtC;AACA;AACA,sCAAsC,eAAe;AACrD;AACA;AACA,8CAA8C,uDAAG;AACjD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA,sCAAsC,+CAA+C;AACrF;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA,sCAAsC,iCAAiC;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACE;AACvB,uC;;;;;;;;;;;;AC1QA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACxE;AACO;AACH;AAC5C;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ;AAC1C,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gDAAkB;AAClD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACT;AACtB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC,CAAC,gFAA2B;AACR;AACrB,sC;;;;;;;;;;;;ACvHA;AAAA;AAAA;AAAA;AAAiC;AAC2B;AAC5D;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,2GAA2G,SAAS;AACpH;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA,sGAAsG,SAAS;AAC/G;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA;AACA;AACA;AACA,kGAAkG,mCAAmC;AACrI;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA,sCAAsC,qBAAqB;AAC3D;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC;AACA;AACA,sCAAsC,sCAAsC;AAC5E;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACE;AACvB,uC;;;;;;;;;;;;AChJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AACA;AACE;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,CAAC,0DAAM,CAAC,gEAAQ,cAAc,uBAAuB;AAC1E,SAAS,oBAAoB,wCAAwC,EAAE;AACvE;AACA;AACA,8BAA8B,gDAAkB;AAChD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACV;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC,CAAC,gFAA2B;AACT;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,UAAU,0BAA0B,EAAE,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,kBAAkB,gDAAkB;AACpC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC;AACsB;AACvB,qC;;;;;;;;;;;;AC3IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiD;AAC3C;AACK;AAC5C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,yDAAyD;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,yDAAyD;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,yDAAyD;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uDAAG;AAClB,mCAAmC,gEAAQ;AAC3C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,kCAAkC,gDAAkB;AACpD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACN;AACvB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA,sCAAsC,gDAAkB;AACxD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACJ;AACzB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;AACjD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C,kC;;;;;;;;;;;;AClQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2E;AAC8C;AAC1C;AAC2J;AAC1L;AACb;AACD;AACP;AACwD;AACzC;AAC0E;AACvE;AACM;AACoC;AACJ;AAC5C;AACyD;AAC3D;AACa;AAC2G;AAC5G;AAClB;AACN;AACD;AAC2B;AACI;AACA;AACV;AACM;AAC0B;AAC/C;AACe;AACA;AACG;AAChD,8B;;;;;;;;;;;;AClCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AAC9E;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO,uDAAG,sBAAsB,qCAAqC,EAAE;AACrG,oBAAoB;AACpB,SAAS;AACT;AACA,oBAAoB,gDAAkB;AACtC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACN;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,OAAO,uDAAG,sBAAsB,qCAAqC,EAAE;AACtG,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACL;AACxB,yC;;;;;;;;;;;;AC3FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AAC1B;AACP;AACA;AACA;AACA,CAAC,0DAA0D;AACpD;AACP;AACA;AACA;AACA;AACA,CAAC,0EAA0E;AAC3E;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AACpC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AAC9B;AACP;AACA;AACA;AACA,CAAC,gDAAgD;AAC1C;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AACtB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AACtB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AAC1D;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gDAAgD;AAC1C;AACP;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AAChD;AACP;AACA;AACA;AACA,CAAC,wDAAwD;AAClD;AACP;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B,iC;;;;;;;;;;;;AChhBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC+E;AACtE;AAC1C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,CAAC,0DAAM,EAAE,cAAc,gCAAgC,EAAE;AACnF,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gDAAkB;AAChE,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACF;AAC7B;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,4BAA4B,EAAE,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACD;AAC5B,6C;;;;;;;;;;;;AC/EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AAC3F;AACE;AAC5C;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6CAA6C;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iCAAiC;AAC3E;AACA;AACA;AACA;AACA,aAAa,qBAAqB,kBAAkB,EAAE,sBAAsB,kBAAkB,EAAE;AAChG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACD;AAC5B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,qBAAqB;AAC5C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,sCAAsC,gDAAkB;AACxD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,wEAAmB;AACrB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uDAAG;AAClB,2BAA2B,0DAAM,CAAC,gEAAQ;AAC1C,SAAS;AACT;AACA;AACA,0DAA0D,gDAAkB;AAC5E,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,wEAAmB;AACrB,wC;;;;;;;;;;;;AC1ZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAC2B;AACb;AAChB;AACQ;AACK;AAC5C;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0DAAM,CAAC,gEAAQ;AACvC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,gCAAgC,0DAAM;AACtC,qBAAqB,oBAAoB;AACzC,aAAa;AACb;AACA;AACA,gCAAgC,0DAAM;AACtC,qBAAqB,oBAAoB;AACzC,aAAa;AACb;AACA;AACA,gCAAgC,0DAAM;AACtC,sBAAsB,qBAAqB;AAC3C,aAAa;AACb;AACA;AACA,gCAAgC,0DAAM;AACtC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,wFAAwF;AACxF,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA,kCAAkC,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAG;AACtB,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sBAAsB,uDAAG;AACzB,0BAA0B,2CAAI,CAAC,2DAAY;AAC3C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,wEAAmB;AACI;AACzB,qC;;;;;;;;;;;;AC1KA;AAAA;AAAA;AAAkD;AAC3C;AACP,QAAQ,uEAAmB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yC;;;;;;;;;;;;ACfA;AAAA;AAAO;AACP;AACA,uBAAuB,eAAe;AACtC;AACA;AACA,oC;;;;;;;;;;;;ACLA;AAAA;AAAA;AAAA;AAA0D;AACF;AACxD;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,iEAAa;AACzB;AACA;AACA;AACA,YAAY,mEAAe;AAC3B;AACA,2BAA2B,2DAAO,CAAC,mEAAe;AAClD;AACA;AACA;AACA,gBAAgB,uDAAG;AACnB,+BAA+B,2DAAO;AACtC;AACA,qBAAqB,uDAAG;AACxB,+BAA+B,2DAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2DAAO;AAC1C;AACA,aAAa;AACb;AACA;AACA,KAAK;AACL;AACA,yC;;;;;;;;;;;;;ACxCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AACnG;AACU;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D,4CAA4C,yBAAyB;AACrE,uBAAuB,uDAAG,eAAe,gEAAQ;AACjD;AACA;AACA,SAAS;AACT,mDAAmD,iBAAiB;AACpE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,gDAAkB;AACxC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACd;AACjB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,UAAU,0BAA0B,EAAE,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,0BAA0B,wEAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,gFAA2B;AACb;AAChB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wEAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,6CAA6C;AACpE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gDAAkB;AAClD,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACT;AACtB,iC;;;;;;;;;;;;ACnKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoG;AACnG;AAClC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,gBAAgB;AACvC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAG,EAAE,kBAAkB;AACzC,SAAS;AACT;AACA;AACA,CAAC,CAAC,wEAAmB;AACY;AACjC;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,kFAA6B;AACD;AAC9B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,gFAA2B;AACA;AAC7B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,cAAc,gDAAkB;AAChC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,gFAA2B;AACV;AACnB,oC;;;;;;;;;;;;AChIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AACsE;AAC/B;AACrC;AACN;AACJ;AACJ;AACY;AACW;AACP;AACJ;AACX;AACuB;AACS;AACP;AACjB;AACL;AACI;AACkB;AACd;AACY;AACH;AACP;AACA;AAC5C;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,kBAAkB;AACpD,kCAAkC,iBAAiB;AACnD,4CAA4C,2BAA2B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B,0BAA0B,0DAAM;AAChC,+BAA+B,sCAAsC;AACrE,aAAa;AACb,SAAS;AACT,mDAAmD,iBAAiB;AACpE;AACA;AACA,6BAA6B,4DAAY;AACzC;AACA,SAAS;AACT;AACA;AACA,oBAAoB,gDAAkB;AACtC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACf;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,eAAe,gDAAkB;AACjC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,kFAA6B;AACX;AACpB;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2EAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0CAAI;AACvC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,yBAAyB;AACrE,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gFAA2B;AACzD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2DAAY;AACnC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4CAAK;AAC5B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAU;AACjC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI;AAC3B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mEAAgB;AACvC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAW;AAClC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gDAAO;AAC9B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qEAAiB;AACxC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAe;AACtC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qEAAsB;AACzC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qDAAS;AAChC,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI;AAC3B,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,CAAC,0DAAM;AACjC,2BAA2B,mBAAmB;AAC9C,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT,yDAAyD,iBAAiB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG;AAC1B;AACA,SAAS;AACT,yDAAyD,iBAAiB;AAC1E;AACA;AACA,0BAA0B,oDAAQ,CAAC,4DAAY;AAC/C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA,kCAAkC,iBAAiB;AACnD,8CAA8C,6BAA6B;AAC3E,mBAAmB,kFAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAI,CAAC,4DAAY;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uDAAG,EAAE,UAAU,0DAAM,EAAE,gBAAgB,2BAA2B,EAAE,UAAU;AACrG,yDAAyD,iBAAiB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kFAA6B;AACpD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,kCAAkC,eAAe;AACjD;AACA,kBAAkB,uDAAG;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAU;AAC7B;AACA;AACA;AACA;AACA;AACA,0BAA0B,kFAA6B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,2CAA2C;AAC1E,eAAe,gEAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,2CAA2C;AAC1E,eAAe,gEAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D,eAAe,+CAAiB;AAChC,mBAAmB,iDAAmB;AACtC,sHAAsH,sBAAsB,EAAE;AAC9I,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA,kBAAkB,gDAAkB;AACpC,QAAQ,wEAAW;AACnB;AACA;AACA,CAAC,CAAC,6FAA+B;AAClB;AACf,gC;;;;;;;;;;;ACpuBA;AACA,qCAAqC,aAAa,yCAAyC,sBAAsB,0DAA0D,qBAAqB,8CAA8C,iBAAiB,mKAAmK,yfAAyf,+MAA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"",""file"":""sp-addinhelpers.es5.umd.bundle.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""pnp.sp-addinhelpers\""] = factory();\n\telse\n\t\troot[\""pnp.sp-addinhelpers\""] = factory();\n})(window, function() {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \""./build/packages-es5/sp-addinhelpers/index.js\"");\n"",""export * from \""./src/common\"";\r\n//# sourceMappingURL=index.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { BearerTokenFetchClient } from \""./netutil\"";\r\nimport { isUrlAbsolute } from \""./util\"";\r\n// @ts-ignore\r\nimport * as adal from \""adal-angular/dist/adal.min.js\"";\r\n/**\r\n * Parses out the root of the request url to use as the resource when getting the token\r\n *\r\n * After: https://gist.github.com/jlong/2428561\r\n * @param url The url to parse\r\n */\r\nfunction getResource(url) {\r\n    var parser = document.createElement(\""a\"");\r\n    parser.href = url;\r\n    return parser.protocol + \""//\"" + parser.hostname;\r\n}\r\n/**\r\n * Azure AD Client for use in the browser\r\n */\r\nvar AdalClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AdalClient, _super);\r\n    /**\r\n     * Creates a new instance of AdalClient\r\n     * @param clientId Azure App Id\r\n     * @param tenant Office 365 tenant (Ex: {tenant}.onmicrosoft.com)\r\n     * @param redirectUri The redirect url used to authenticate the\r\n     */\r\n    function AdalClient(clientId, tenant, redirectUri) {\r\n        var _this = _super.call(this, null) || this;\r\n        _this.clientId = clientId;\r\n        _this.tenant = tenant;\r\n        _this.redirectUri = redirectUri;\r\n        _this._displayCallback = null;\r\n        _this._loginPromise = null;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Creates a new AdalClient using the values of the supplied SPFx context (requires SPFx >= 1.6)\r\n     *\r\n     * @param spfxContext Current SPFx context\r\n     * @description Using this method requires that the features described in this article\r\n     * https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-aadhttpclient are activated in the tenant.\r\n     */\r\n    AdalClient.fromSPFxContext = function (spfxContext) {\r\n        return new SPFxAdalClient(spfxContext);\r\n    };\r\n    /**\r\n     * Conducts the fetch opertation against the AAD secured resource\r\n     *\r\n     * @param url Absolute URL for the request\r\n     * @param options Any fetch options passed to the underlying fetch implementation\r\n     */\r\n    AdalClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        if (!isUrlAbsolute(url)) {\r\n            throw Error(\""You must supply absolute urls to AdalClient.fetch.\"");\r\n        }\r\n        // the url we are calling is the resource\r\n        return this.getToken(getResource(url)).then(function (token) {\r\n            _this.token = token;\r\n            return _super.prototype.fetch.call(_this, url, options);\r\n        });\r\n    };\r\n    /**\r\n     * Gets a token based on the current user\r\n     *\r\n     * @param resource The resource for which we are requesting a token\r\n     */\r\n    AdalClient.prototype.getToken = function (resource) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            _this.ensureAuthContext().then(function (_) { return _this.login(); }).then(function (_) {\r\n                AdalClient._authContext.acquireToken(resource, function (message, token) {\r\n                    if (message) {\r\n                        return reject(Error(message));\r\n                    }\r\n                    resolve(token);\r\n                });\r\n            }).catch(reject);\r\n        });\r\n    };\r\n    /**\r\n     * Ensures we have created and setup the adal AuthenticationContext instance\r\n     */\r\n    AdalClient.prototype.ensureAuthContext = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            if (AdalClient._authContext === null) {\r\n                AdalClient._authContext = adal.inject({\r\n                    clientId: _this.clientId,\r\n                    displayCall: function (url) {\r\n                        if (_this._displayCallback) {\r\n                            _this._displayCallback(url);\r\n                        }\r\n                    },\r\n                    navigateToLoginRequestUrl: false,\r\n                    redirectUri: _this.redirectUri,\r\n                    tenant: _this.tenant,\r\n                });\r\n            }\r\n            resolve();\r\n        });\r\n    };\r\n    /**\r\n     * Ensures the current user is logged in\r\n     */\r\n    AdalClient.prototype.login = function () {\r\n        var _this = this;\r\n        if (this._loginPromise) {\r\n            return this._loginPromise;\r\n        }\r\n        this._loginPromise = new Promise(function (resolve, reject) {\r\n            if (AdalClient._authContext.getCachedUser()) {\r\n                return resolve();\r\n            }\r\n            _this._displayCallback = function (url) {\r\n                var popupWindow = window.open(url, \""login\"", \""width=483, height=600\"");\r\n                if (!popupWindow) {\r\n                    return reject(Error(\""Could not open pop-up window for auth. Likely pop-ups are blocked by the browser.\""));\r\n                }\r\n                if (popupWindow && popupWindow.focus) {\r\n                    popupWindow.focus();\r\n                }\r\n                var pollTimer = window.setInterval(function () {\r\n                    if (!popupWindow || popupWindow.closed || popupWindow.closed === undefined) {\r\n                        window.clearInterval(pollTimer);\r\n                    }\r\n                    try {\r\n                        if (popupWindow.document.URL.indexOf(_this.redirectUri) !== -1) {\r\n                            window.clearInterval(pollTimer);\r\n                            AdalClient._authContext.handleWindowCallback(popupWindow.location.hash);\r\n                            popupWindow.close();\r\n                            resolve();\r\n                        }\r\n                    }\r\n                    catch (e) {\r\n                        reject(e);\r\n                    }\r\n                }, 30);\r\n            };\r\n            // this triggers the login process\r\n            _this.ensureAuthContext().then(function (_) {\r\n                AdalClient._authContext._loginInProgress = false;\r\n                AdalClient._authContext.login();\r\n                _this._displayCallback = null;\r\n            });\r\n        });\r\n        return this._loginPromise;\r\n    };\r\n    /**\r\n     * Our auth context\r\n     */\r\n    AdalClient._authContext = null;\r\n    return AdalClient;\r\n}(BearerTokenFetchClient));\r\nexport { AdalClient };\r\n/**\r\n * Client wrapping the aadTokenProvider available from SPFx >= 1.6\r\n */\r\nvar SPFxAdalClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPFxAdalClient, _super);\r\n    /**\r\n     *\r\n     * @param context provide the appropriate SPFx Context object\r\n     */\r\n    function SPFxAdalClient(context) {\r\n        var _this = _super.call(this, null) || this;\r\n        _this.context = context;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Executes a fetch request using the supplied url and options\r\n     *\r\n     * @param url Absolute url of the request\r\n     * @param options Any options\r\n     */\r\n    SPFxAdalClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        return this.getToken(getResource(url)).then(function (token) {\r\n            _this.token = token;\r\n            return _super.prototype.fetch.call(_this, url, options);\r\n        });\r\n    };\r\n    /**\r\n     * Gets an AAD token for the provided resource using the SPFx AADTokenProvider\r\n     *\r\n     * @param resource Resource for which a token is to be requested (ex: https://graph.microsoft.com)\r\n     */\r\n    SPFxAdalClient.prototype.getToken = function (resource) {\r\n        return this.context.aadTokenProviderFactory.getTokenProvider().then(function (provider) {\r\n            return provider.getToken(resource);\r\n        });\r\n    };\r\n    return SPFxAdalClient;\r\n}(BearerTokenFetchClient));\r\nexport { SPFxAdalClient };\r\n//# sourceMappingURL=adalclient.js.map"",""import { isFunc } from \""./util\"";\r\n/**\r\n * Used to calculate the object properties, with polyfill if needed\r\n */\r\nvar objectEntries = isFunc(Object.entries) ? Object.entries : function (o) { return Object.keys(o).map(function (k) { return [k, o[k]]; }); };\r\n/**\r\n * Converts the supplied object to a map\r\n *\r\n * @param o The object to map\r\n */\r\nexport function objectToMap(o) {\r\n    if (o !== undefined && o !== null) {\r\n        return new Map(objectEntries(o));\r\n    }\r\n    return new Map();\r\n}\r\n/**\r\n * Merges to Map instances together, overwriting values in target with matching keys, last in wins\r\n *\r\n * @param target map into which the other maps are merged\r\n * @param maps One or more maps to merge into the target\r\n */\r\nexport function mergeMaps(target) {\r\n    var maps = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        maps[_i - 1] = arguments[_i];\r\n    }\r\n    for (var i = 0; i < maps.length; i++) {\r\n        maps[i].forEach(function (v, k) {\r\n            target.set(k, v);\r\n        });\r\n    }\r\n    return target;\r\n}\r\n//# sourceMappingURL=collections.js.map"",""export * from \""./adalclient\"";\r\nexport * from \""./collections\"";\r\nexport * from \""./libconfig\"";\r\nexport * from \""./netutil\"";\r\nexport * from \""./storage\"";\r\nexport * from \""./util\"";\r\n//# sourceMappingURL=common.js.map"",""import { mergeMaps, objectToMap } from \""./collections\"";\r\nexport function setup(config) {\r\n    RuntimeConfig.extend(config);\r\n}\r\n// lable mapping for known config values\r\nvar s = [\r\n    \""defaultCachingStore\"",\r\n    \""defaultCachingTimeoutSeconds\"",\r\n    \""globalCacheDisable\"",\r\n    \""enableCacheExpiration\"",\r\n    \""cacheExpirationIntervalMilliseconds\"",\r\n    \""spfxContext\"",\r\n];\r\nvar RuntimeConfigImpl = /** @class */ (function () {\r\n    function RuntimeConfigImpl(_v) {\r\n        if (_v === void 0) { _v = new Map(); }\r\n        this._v = _v;\r\n        // setup defaults\r\n        this._v.set(s[0], \""session\"");\r\n        this._v.set(s[1], 60);\r\n        this._v.set(s[2], false);\r\n        this._v.set(s[3], false);\r\n        this._v.set(s[4], 750);\r\n        this._v.set(s[5], null);\r\n    }\r\n    /**\r\n     *\r\n     * @param config The set of properties to add to the globa configuration instance\r\n     */\r\n    RuntimeConfigImpl.prototype.extend = function (config) {\r\n        this._v = mergeMaps(this._v, objectToMap(config));\r\n    };\r\n    RuntimeConfigImpl.prototype.get = function (key) {\r\n        return this._v.get(key);\r\n    };\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingStore\"", {\r\n        get: function () {\r\n            return this.get(s[0]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingTimeoutSeconds\"", {\r\n        get: function () {\r\n            return this.get(s[1]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""globalCacheDisable\"", {\r\n        get: function () {\r\n            return this.get(s[2]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""enableCacheExpiration\"", {\r\n        get: function () {\r\n            return this.get(s[3]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""cacheExpirationIntervalMilliseconds\"", {\r\n        get: function () {\r\n            return this.get(s[4]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""spfxContext\"", {\r\n        get: function () {\r\n            return this.get(s[5]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return RuntimeConfigImpl;\r\n}());\r\nexport { RuntimeConfigImpl };\r\nvar _runtimeConfig = new RuntimeConfigImpl();\r\nexport var RuntimeConfig = _runtimeConfig;\r\n//# sourceMappingURL=libconfig.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, objectDefinedNotNull } from \""./util\"";\r\nexport function mergeHeaders(target, source) {\r\n    if (source !== undefined && source !== null) {\r\n        var temp = new Request(\""\"", { headers: source });\r\n        temp.headers.forEach(function (value, name) {\r\n            target.append(name, value);\r\n        });\r\n    }\r\n}\r\nexport function mergeOptions(target, source) {\r\n    if (objectDefinedNotNull(source)) {\r\n        var headers = extend(target.headers || {}, source.headers);\r\n        target = extend(target, source);\r\n        target.headers = headers;\r\n    }\r\n}\r\n/**\r\n * Makes requests using the global/window fetch API\r\n */\r\nvar FetchClient = /** @class */ (function () {\r\n    function FetchClient() {\r\n    }\r\n    FetchClient.prototype.fetch = function (url, options) {\r\n        return global.fetch(url, options);\r\n    };\r\n    return FetchClient;\r\n}());\r\nexport { FetchClient };\r\n/**\r\n * Makes requests using the fetch API adding the supplied token to the Authorization header\r\n */\r\nvar BearerTokenFetchClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BearerTokenFetchClient, _super);\r\n    function BearerTokenFetchClient(_token) {\r\n        var _this = _super.call(this) || this;\r\n        _this._token = _token;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(BearerTokenFetchClient.prototype, \""token\"", {\r\n        get: function () {\r\n            return this._token || \""\"";\r\n        },\r\n        set: function (token) {\r\n            this._token = token;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    BearerTokenFetchClient.prototype.fetch = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var headers = new Headers();\r\n        mergeHeaders(headers, options.headers);\r\n        headers.set(\""Authorization\"", \""Bearer \"" + this._token);\r\n        options.headers = headers;\r\n        return _super.prototype.fetch.call(this, url, options);\r\n    };\r\n    return BearerTokenFetchClient;\r\n}(FetchClient));\r\nexport { BearerTokenFetchClient };\r\n//# sourceMappingURL=netutil.js.map"",""import { dateAdd, getCtxCallback, jsS, objectDefinedNotNull } from \""./util\"";\r\nimport { RuntimeConfig } from \""./libconfig\"";\r\n/**\r\n * A wrapper class to provide a consistent interface to browser based storage\r\n *\r\n */\r\nvar PnPClientStorageWrapper = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the PnPClientStorageWrapper class\r\n     *\r\n     * @constructor\r\n     */\r\n    function PnPClientStorageWrapper(store, defaultTimeoutMinutes) {\r\n        if (defaultTimeoutMinutes === void 0) { defaultTimeoutMinutes = -1; }\r\n        this.store = store;\r\n        this.defaultTimeoutMinutes = defaultTimeoutMinutes;\r\n        this.enabled = this.test();\r\n        // if the cache timeout is enabled call the handler\r\n        // this will clear any expired items and set the timeout function\r\n        if (RuntimeConfig.enableCacheExpiration) {\r\n            this.cacheExpirationHandler();\r\n        }\r\n    }\r\n    /**\r\n     * Get a value from storage, or null if that value does not exist\r\n     *\r\n     * @param key The key whose value we want to retrieve\r\n     */\r\n    PnPClientStorageWrapper.prototype.get = function (key) {\r\n        if (!this.enabled) {\r\n            return null;\r\n        }\r\n        var o = this.store.getItem(key);\r\n        if (!objectDefinedNotNull(o)) {\r\n            return null;\r\n        }\r\n        var persistable = JSON.parse(o);\r\n        if (new Date(persistable.expiration) <= new Date()) {\r\n            this.delete(key);\r\n            return null;\r\n        }\r\n        else {\r\n            return persistable.value;\r\n        }\r\n    };\r\n    /**\r\n     * Adds a value to the underlying storage\r\n     *\r\n     * @param key The key to use when storing the provided value\r\n     * @param o The value to store\r\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\r\n     */\r\n    PnPClientStorageWrapper.prototype.put = function (key, o, expire) {\r\n        if (this.enabled) {\r\n            this.store.setItem(key, this.createPersistable(o, expire));\r\n        }\r\n    };\r\n    /**\r\n     * Deletes a value from the underlying storage\r\n     *\r\n     * @param key The key of the pair we want to remove from storage\r\n     */\r\n    PnPClientStorageWrapper.prototype.delete = function (key) {\r\n        if (this.enabled) {\r\n            this.store.removeItem(key);\r\n        }\r\n    };\r\n    /**\r\n     * Gets an item from the underlying storage, or adds it if it does not exist using the supplied getter function\r\n     *\r\n     * @param key The key to use when storing the provided value\r\n     * @param getter A function which will upon execution provide the desired value\r\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\r\n     */\r\n    PnPClientStorageWrapper.prototype.getOrPut = function (key, getter, expire) {\r\n        var _this = this;\r\n        if (!this.enabled) {\r\n            return getter();\r\n        }\r\n        var o = this.get(key);\r\n        if (o === null) {\r\n            return getter().then(function (d) {\r\n                _this.put(key, d, expire);\r\n                return d;\r\n            });\r\n        }\r\n        return Promise.resolve(o);\r\n    };\r\n    /**\r\n     * Deletes any expired items placed in the store by the pnp library, leaves other items untouched\r\n     */\r\n    PnPClientStorageWrapper.prototype.deleteExpired = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (!_this.enabled) {\r\n                resolve();\r\n            }\r\n            try {\r\n                for (var i = 0; i < _this.store.length; i++) {\r\n                    var key = _this.store.key(i);\r\n                    if (key !== null) {\r\n                        // test the stored item to see if we stored it\r\n                        if (/[\""|']?pnp[\""|']? ?: ?1/i.test(_this.store.getItem(key))) {\r\n                            // get those items as get will delete from cache if they are expired\r\n                            _this.get(key);\r\n                        }\r\n                    }\r\n                }\r\n                resolve();\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Used to determine if the wrapped storage is available currently\r\n     */\r\n    PnPClientStorageWrapper.prototype.test = function () {\r\n        var str = \""t\"";\r\n        try {\r\n            this.store.setItem(str, str);\r\n            this.store.removeItem(str);\r\n            return true;\r\n        }\r\n        catch (e) {\r\n            return false;\r\n        }\r\n    };\r\n    /**\r\n     * Creates the persistable to store\r\n     */\r\n    PnPClientStorageWrapper.prototype.createPersistable = function (o, expire) {\r\n        if (expire === undefined) {\r\n            // ensure we are by default inline with the global library setting\r\n            var defaultTimeout = RuntimeConfig.defaultCachingTimeoutSeconds;\r\n            if (this.defaultTimeoutMinutes > 0) {\r\n                defaultTimeout = this.defaultTimeoutMinutes * 60;\r\n            }\r\n            expire = dateAdd(new Date(), \""second\"", defaultTimeout);\r\n        }\r\n        return jsS({ pnp: 1, expiration: expire, value: o });\r\n    };\r\n    /**\r\n     * Deletes expired items added by this library in this.store and sets a timeout to call itself\r\n     */\r\n    PnPClientStorageWrapper.prototype.cacheExpirationHandler = function () {\r\n        var _this = this;\r\n        this.deleteExpired().then(function (_) {\r\n            // call ourself in the future\r\n            setTimeout(getCtxCallback(_this, _this.cacheExpirationHandler), RuntimeConfig.cacheExpirationIntervalMilliseconds);\r\n        }).catch(function (e) {\r\n            console.error(e);\r\n        });\r\n    };\r\n    return PnPClientStorageWrapper;\r\n}());\r\nexport { PnPClientStorageWrapper };\r\n/**\r\n * A thin implementation of in-memory storage for use in nodejs\r\n */\r\nvar MemoryStorage = /** @class */ (function () {\r\n    function MemoryStorage(_store) {\r\n        if (_store === void 0) { _store = new Map(); }\r\n        this._store = _store;\r\n    }\r\n    Object.defineProperty(MemoryStorage.prototype, \""length\"", {\r\n        get: function () {\r\n            return this._store.size;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    MemoryStorage.prototype.clear = function () {\r\n        this._store.clear();\r\n    };\r\n    MemoryStorage.prototype.getItem = function (key) {\r\n        return this._store.get(key);\r\n    };\r\n    MemoryStorage.prototype.key = function (index) {\r\n        return Array.from(this._store)[index][0];\r\n    };\r\n    MemoryStorage.prototype.removeItem = function (key) {\r\n        this._store.delete(key);\r\n    };\r\n    MemoryStorage.prototype.setItem = function (key, data) {\r\n        this._store.set(key, data);\r\n    };\r\n    return MemoryStorage;\r\n}());\r\n/**\r\n * A class that will establish wrappers for both local and session storage\r\n */\r\nvar PnPClientStorage = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the PnPClientStorage class\r\n     *\r\n     * @constructor\r\n     */\r\n    function PnPClientStorage(_local, _session) {\r\n        if (_local === void 0) { _local = null; }\r\n        if (_session === void 0) { _session = null; }\r\n        this._local = _local;\r\n        this._session = _session;\r\n    }\r\n    Object.defineProperty(PnPClientStorage.prototype, \""local\"", {\r\n        /**\r\n         * Provides access to the local storage of the browser\r\n         */\r\n        get: function () {\r\n            if (this._local === null) {\r\n                this._local = this.getStore(\""local\"");\r\n            }\r\n            return this._local;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(PnPClientStorage.prototype, \""session\"", {\r\n        /**\r\n         * Provides access to the session storage of the browser\r\n         */\r\n        get: function () {\r\n            if (this._session === null) {\r\n                this._session = this.getStore(\""session\"");\r\n            }\r\n            return this._session;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    PnPClientStorage.prototype.getStore = function (name) {\r\n        if (name === \""local\"") {\r\n            return new PnPClientStorageWrapper(typeof (localStorage) === \""undefined\"" ? new MemoryStorage() : localStorage);\r\n        }\r\n        return new PnPClientStorageWrapper(typeof (sessionStorage) === \""undefined\"" ? new MemoryStorage() : sessionStorage);\r\n    };\r\n    return PnPClientStorage;\r\n}());\r\nexport { PnPClientStorage };\r\n//# sourceMappingURL=storage.js.map"",""/**\r\n * Gets a callback function which will maintain context across async calls.\r\n * Allows for the calling pattern getCtxCallback(thisobj, method, methodarg1, methodarg2, ...)\r\n *\r\n * @param context The object that will be the 'this' value in the callback\r\n * @param method The method to which we will apply the context and parameters\r\n * @param params Optional, additional arguments to supply to the wrapped method when it is invoked\r\n */\r\nexport function getCtxCallback(context, method) {\r\n    var params = [];\r\n    for (var _i = 2; _i < arguments.length; _i++) {\r\n        params[_i - 2] = arguments[_i];\r\n    }\r\n    return function () {\r\n        method.apply(context, params);\r\n    };\r\n}\r\n/**\r\n * Adds a value to a date\r\n *\r\n * @param date The date to which we will add units, done in local time\r\n * @param interval The name of the interval to add, one of: ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second']\r\n * @param units The amount to add to date of the given interval\r\n *\r\n * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object\r\n */\r\nexport function dateAdd(date, interval, units) {\r\n    var ret = new Date(date); // don't change original date\r\n    switch (interval.toLowerCase()) {\r\n        case \""year\"":\r\n            ret.setFullYear(ret.getFullYear() + units);\r\n            break;\r\n        case \""quarter\"":\r\n            ret.setMonth(ret.getMonth() + 3 * units);\r\n            break;\r\n        case \""month\"":\r\n            ret.setMonth(ret.getMonth() + units);\r\n            break;\r\n        case \""week\"":\r\n            ret.setDate(ret.getDate() + 7 * units);\r\n            break;\r\n        case \""day\"":\r\n            ret.setDate(ret.getDate() + units);\r\n            break;\r\n        case \""hour\"":\r\n            ret.setTime(ret.getTime() + units * 3600000);\r\n            break;\r\n        case \""minute\"":\r\n            ret.setTime(ret.getTime() + units * 60000);\r\n            break;\r\n        case \""second\"":\r\n            ret.setTime(ret.getTime() + units * 1000);\r\n            break;\r\n        default:\r\n            ret = undefined;\r\n            break;\r\n    }\r\n    return ret;\r\n}\r\n/**\r\n * Combines an arbitrary set of paths ensuring and normalizes the slashes\r\n *\r\n * @param paths 0 to n path parts to combine\r\n */\r\nexport function combine() {\r\n    var paths = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        paths[_i] = arguments[_i];\r\n    }\r\n    return paths\r\n        .filter(function (path) { return !stringIsNullOrEmpty(path); })\r\n        .map(function (path) { return path.replace(/^[\\\\|\\/]/, \""\"").replace(/[\\\\|\\/]$/, \""\""); })\r\n        .join(\""/\"")\r\n        .replace(/\\\\/g, \""/\"");\r\n}\r\n/**\r\n * Gets a random string of chars length\r\n *\r\n * https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\r\n *\r\n * @param chars The length of the random string to generate\r\n */\r\nexport function getRandomString(chars) {\r\n    var text = new Array(chars);\r\n    var possible = \""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"";\r\n    for (var i = 0; i < chars; i++) {\r\n        text[i] = possible.charAt(Math.floor(Math.random() * possible.length));\r\n    }\r\n    return text.join(\""\"");\r\n}\r\n/**\r\n * Gets a random GUID value\r\n *\r\n * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\r\n * https://stackoverflow.com/a/8809472 updated to prevent collisions.\r\n */\r\n/* tslint:disable no-bitwise */\r\nexport function getGUID() {\r\n    var d = Date.now();\r\n    if (typeof performance !== \""undefined\"" && typeof performance.now === \""function\"") {\r\n        d += performance.now(); // use high-precision timer if available\r\n    }\r\n    var guid = \""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"".replace(/[xy]/g, function (c) {\r\n        var r = (d + Math.random() * 16) % 16 | 0;\r\n        d = Math.floor(d / 16);\r\n        return (c === \""x\"" ? r : (r & 0x3 | 0x8)).toString(16);\r\n    });\r\n    return guid;\r\n}\r\n/* tslint:enable */\r\n/**\r\n * Determines if a given value is a function\r\n *\r\n * @param cf The thing to test for functionness\r\n */\r\nexport function isFunc(cf) {\r\n    return typeof cf === \""function\"";\r\n}\r\n/**\r\n * Determines if an object is both defined and not null\r\n * @param obj Object to test\r\n */\r\nexport function objectDefinedNotNull(obj) {\r\n    return typeof obj !== \""undefined\"" && obj !== null;\r\n}\r\n/**\r\n * @returns whether the provided parameter is a JavaScript Array or not.\r\n*/\r\nexport function isArray(array) {\r\n    if (Array.isArray) {\r\n        return Array.isArray(array);\r\n    }\r\n    return array && typeof array.length === \""number\"" && array.constructor === Array;\r\n}\r\n/**\r\n * Provides functionality to extend the given object by doing a shallow copy\r\n *\r\n * @param target The object to which properties will be copied\r\n * @param source The source object from which properties will be copied\r\n * @param noOverwrite If true existing properties on the target are not overwritten from the source\r\n * @param filter If provided allows additional filtering on what properties are copied (propName: string) => boolean\r\n *\r\n */\r\nexport function extend(target, source, noOverwrite, filter) {\r\n    if (noOverwrite === void 0) { noOverwrite = false; }\r\n    if (filter === void 0) { filter = function () { return true; }; }\r\n    if (!objectDefinedNotNull(source)) {\r\n        return target;\r\n    }\r\n    // ensure we don't overwrite things we don't want overwritten\r\n    var check = noOverwrite ? function (o, i) { return !(i in o); } : function () { return true; };\r\n    // final filter we will use\r\n    var f = function (v) { return check(target, v) && filter(v); };\r\n    return Object.getOwnPropertyNames(source)\r\n        .filter(f)\r\n        .reduce(function (t, v) {\r\n        t[v] = source[v];\r\n        return t;\r\n    }, target);\r\n}\r\n/**\r\n * Determines if a given url is absolute\r\n *\r\n * @param url The url to check to see if it is absolute\r\n */\r\nexport function isUrlAbsolute(url) {\r\n    return /^https?:\\/\\/|^\\/\\//i.test(url);\r\n}\r\n/**\r\n * Determines if a string is null or empty or undefined\r\n *\r\n * @param s The string to test\r\n */\r\nexport function stringIsNullOrEmpty(s) {\r\n    return s === undefined || s === null || s.length < 1;\r\n}\r\n/**\r\n * Gets an attribute value from an html/xml string block. NOTE: if the input attribute value has\r\n * RegEx special characters they will be escaped in the returned string\r\n *\r\n * @param html HTML to search\r\n * @param attrName The name of the attribute to find\r\n */\r\nexport function getAttrValueFromString(html, attrName) {\r\n    // make the input safe for regex\r\n    html = html.replace(/[.*+?^${}()|[\\]\\\\]/g, \""\\\\$&\"");\r\n    var reg = new RegExp(attrName + \""\\\\s*?=\\\\s*?(\\\""|')([^\\\\1]*?)\\\\1\"", \""i\"");\r\n    var match = reg.exec(html);\r\n    return match !== null && match.length > 0 ? match[2] : null;\r\n}\r\n/**\r\n * Ensures guid values are represented consistently as \""ea123463-137d-4ae3-89b8-cf3fc578ca05\""\r\n *\r\n * @param guid The candidate guid\r\n */\r\nexport function sanitizeGuid(guid) {\r\n    if (stringIsNullOrEmpty(guid)) {\r\n        return guid;\r\n    }\r\n    var matches = /([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})/i.exec(guid);\r\n    return matches === null ? guid : matches[1];\r\n}\r\n/**\r\n * Shorthand for JSON.stringify\r\n *\r\n * @param o Any type of object\r\n */\r\nexport function jsS(o) {\r\n    return JSON.stringify(o);\r\n}\r\n/**\r\n * Shorthand for Object.hasOwnProperty\r\n *\r\n * @param o Object to check for\r\n * @param p Name of the property\r\n */\r\nexport function hOP(o, p) {\r\n    return Object.hasOwnProperty.call(o, p);\r\n}\r\n/**\r\n * Generates a ~unique hash code\r\n *\r\n * From: https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript\r\n */\r\n// tslint:disable:no-bitwise\r\nexport function getHashCode(s) {\r\n    var hash = 0;\r\n    if (s.length === 0) {\r\n        return hash;\r\n    }\r\n    for (var i = 0; i < s.length; i++) {\r\n        var chr = s.charCodeAt(i);\r\n        hash = ((hash << 5) - hash) + chr;\r\n        hash |= 0; // Convert to 32bit integer\r\n    }\r\n    return hash;\r\n}\r\n// tslint:enable:no-bitwise\r\n//# sourceMappingURL=util.js.map"",""export * from \""./src/logging\"";\r\n//# sourceMappingURL=index.js.map"",""/**\r\n * Implementation of LogListener which logs to the console\r\n *\r\n */\r\nvar ConsoleListener = /** @class */ (function () {\r\n    function ConsoleListener() {\r\n    }\r\n    /**\r\n     * Any associated data that a given logging listener may choose to log or ignore\r\n     *\r\n     * @param entry The information to be logged\r\n     */\r\n    ConsoleListener.prototype.log = function (entry) {\r\n        var msg = this.format(entry);\r\n        switch (entry.level) {\r\n            case 0 /* Verbose */:\r\n            case 1 /* Info */:\r\n                console.log(msg);\r\n                break;\r\n            case 2 /* Warning */:\r\n                console.warn(msg);\r\n                break;\r\n            case 3 /* Error */:\r\n                console.error(msg);\r\n                break;\r\n        }\r\n    };\r\n    /**\r\n     * Formats the message\r\n     *\r\n     * @param entry The information to format into a string\r\n     */\r\n    ConsoleListener.prototype.format = function (entry) {\r\n        var msg = [];\r\n        msg.push(\""Message: \"" + entry.message);\r\n        if (entry.data !== undefined) {\r\n            try {\r\n                msg.push(\"" Data: \"" + JSON.stringify(entry.data));\r\n            }\r\n            catch (e) {\r\n                msg.push(\"" Data: Error in stringify of supplied data \"" + e);\r\n            }\r\n        }\r\n        return msg.join(\""\"");\r\n    };\r\n    return ConsoleListener;\r\n}());\r\nexport { ConsoleListener };\r\n/**\r\n * Implementation of LogListener which logs to the supplied function\r\n *\r\n */\r\nvar FunctionListener = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the FunctionListener class\r\n     *\r\n     * @constructor\r\n     * @param  method The method to which any logging data will be passed\r\n     */\r\n    function FunctionListener(method) {\r\n        this.method = method;\r\n    }\r\n    /**\r\n     * Any associated data that a given logging listener may choose to log or ignore\r\n     *\r\n     * @param entry The information to be logged\r\n     */\r\n    FunctionListener.prototype.log = function (entry) {\r\n        this.method(entry);\r\n    };\r\n    return FunctionListener;\r\n}());\r\nexport { FunctionListener };\r\n//# sourceMappingURL=listeners.js.map"",""/**\r\n * Class used to subscribe ILogListener and log messages throughout an application\r\n *\r\n */\r\nvar Logger = /** @class */ (function () {\r\n    function Logger() {\r\n    }\r\n    Object.defineProperty(Logger, \""activeLogLevel\"", {\r\n        /**\r\n         * Gets or sets the active log level to apply for log filtering\r\n         */\r\n        get: function () {\r\n            return Logger.instance.activeLogLevel;\r\n        },\r\n        set: function (value) {\r\n            Logger.instance.activeLogLevel = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Logger, \""instance\"", {\r\n        get: function () {\r\n            if (Logger._instance === undefined || Logger._instance === null) {\r\n                Logger._instance = new LoggerImpl();\r\n            }\r\n            return Logger._instance;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds ILogListener instances to the set of subscribed listeners\r\n     *\r\n     * @param listeners One or more listeners to subscribe to this log\r\n     */\r\n    Logger.subscribe = function () {\r\n        var listeners = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            listeners[_i] = arguments[_i];\r\n        }\r\n        listeners.map(function (listener) { return Logger.instance.subscribe(listener); });\r\n    };\r\n    /**\r\n     * Clears the subscribers collection, returning the collection before modifiction\r\n     */\r\n    Logger.clearSubscribers = function () {\r\n        return Logger.instance.clearSubscribers();\r\n    };\r\n    Object.defineProperty(Logger, \""count\"", {\r\n        /**\r\n         * Gets the current subscriber count\r\n         */\r\n        get: function () {\r\n            return Logger.instance.count;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Writes the supplied string to the subscribed listeners\r\n     *\r\n     * @param message The message to write\r\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info)\r\n     */\r\n    Logger.write = function (message, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        Logger.instance.log({ level: level, message: message });\r\n    };\r\n    /**\r\n     * Writes the supplied string to the subscribed listeners\r\n     *\r\n     * @param json The json object to stringify and write\r\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info)\r\n     */\r\n    Logger.writeJSON = function (json, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        this.write(JSON.stringify(json), level);\r\n    };\r\n    /**\r\n     * Logs the supplied entry to the subscribed listeners\r\n     *\r\n     * @param entry The message to log\r\n     */\r\n    Logger.log = function (entry) {\r\n        Logger.instance.log(entry);\r\n    };\r\n    /**\r\n     * Logs an error object to the subscribed listeners\r\n     *\r\n     * @param err The error object\r\n     */\r\n    Logger.error = function (err) {\r\n        Logger.instance.log({ data: err, level: 3 /* Error */, message: err.message });\r\n    };\r\n    return Logger;\r\n}());\r\nexport { Logger };\r\nvar LoggerImpl = /** @class */ (function () {\r\n    function LoggerImpl(activeLogLevel, subscribers) {\r\n        if (activeLogLevel === void 0) { activeLogLevel = 2 /* Warning */; }\r\n        if (subscribers === void 0) { subscribers = []; }\r\n        this.activeLogLevel = activeLogLevel;\r\n        this.subscribers = subscribers;\r\n    }\r\n    LoggerImpl.prototype.subscribe = function (listener) {\r\n        this.subscribers.push(listener);\r\n    };\r\n    LoggerImpl.prototype.clearSubscribers = function () {\r\n        var s = this.subscribers.slice(0);\r\n        this.subscribers.length = 0;\r\n        return s;\r\n    };\r\n    Object.defineProperty(LoggerImpl.prototype, \""count\"", {\r\n        get: function () {\r\n            return this.subscribers.length;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LoggerImpl.prototype.write = function (message, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        this.log({ level: level, message: message });\r\n    };\r\n    LoggerImpl.prototype.log = function (entry) {\r\n        if (entry !== undefined && this.activeLogLevel <= entry.level) {\r\n            this.subscribers.map(function (subscriber) { return subscriber.log(entry); });\r\n        }\r\n    };\r\n    return LoggerImpl;\r\n}());\r\n//# sourceMappingURL=logger.js.map"",""export { Logger } from \""./logger\"";\r\nexport { LogLevel } from \""./loglevel\"";\r\nexport { ConsoleListener, FunctionListener } from \""./listeners\"";\r\n//# sourceMappingURL=logging.js.map"",""/**\r\n * A set of logging levels\r\n */\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n    LogLevel[LogLevel[\""Verbose\""] = 0] = \""Verbose\"";\r\n    LogLevel[LogLevel[\""Info\""] = 1] = \""Info\"";\r\n    LogLevel[LogLevel[\""Warning\""] = 2] = \""Warning\"";\r\n    LogLevel[LogLevel[\""Error\""] = 3] = \""Error\"";\r\n    LogLevel[LogLevel[\""Off\""] = 99] = \""Off\"";\r\n})(LogLevel || (LogLevel = {}));\r\n//# sourceMappingURL=loglevel.js.map"",""export * from \""./src/odata\"";\r\n//# sourceMappingURL=index.js.map"",""import { RuntimeConfig, dateAdd, PnPClientStorage } from \""@pnp/common\"";\r\nvar CachingOptions = /** @class */ (function () {\r\n    function CachingOptions(key) {\r\n        this.key = key;\r\n        this.expiration = dateAdd(new Date(), \""second\"", RuntimeConfig.defaultCachingTimeoutSeconds);\r\n        this.storeName = RuntimeConfig.defaultCachingStore;\r\n    }\r\n    Object.defineProperty(CachingOptions.prototype, \""store\"", {\r\n        get: function () {\r\n            if (this.storeName === \""local\"") {\r\n                return CachingOptions.storage.local;\r\n            }\r\n            else {\r\n                return CachingOptions.storage.session;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    CachingOptions.storage = new PnPClientStorage();\r\n    return CachingOptions;\r\n}());\r\nexport { CachingOptions };\r\nvar CachingParserWrapper = /** @class */ (function () {\r\n    function CachingParserWrapper(parser, cacheOptions) {\r\n        this.parser = parser;\r\n        this.cacheOptions = cacheOptions;\r\n    }\r\n    CachingParserWrapper.prototype.parse = function (response) {\r\n        var _this = this;\r\n        return this.parser.parse(response).then(function (r) { return _this.cacheData(r); });\r\n    };\r\n    CachingParserWrapper.prototype.cacheData = function (data) {\r\n        if (this.cacheOptions.store !== null) {\r\n            this.cacheOptions.store.put(this.cacheOptions.key, data, this.cacheOptions.expiration);\r\n        }\r\n        return data;\r\n    };\r\n    return CachingParserWrapper;\r\n}());\r\nexport { CachingParserWrapper };\r\n//# sourceMappingURL=caching.js.map"",""export * from \""./caching\"";\r\nexport * from \""./parsers\"";\r\nexport * from \""./pipeline\"";\r\nexport * from \""./queryable\"";\r\nexport * from \""./odatabatch\"";\r\n//# sourceMappingURL=odata.js.map"",""import { getGUID } from \""@pnp/common\"";\r\nvar ODataBatch = /** @class */ (function () {\r\n    function ODataBatch(_batchId) {\r\n        if (_batchId === void 0) { _batchId = getGUID(); }\r\n        this._batchId = _batchId;\r\n        this._reqs = [];\r\n        this._deps = [];\r\n        this._rDeps = [];\r\n    }\r\n    Object.defineProperty(ODataBatch.prototype, \""batchId\"", {\r\n        get: function () {\r\n            return this._batchId;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ODataBatch.prototype, \""requests\"", {\r\n        /**\r\n         * The requests contained in this batch\r\n         */\r\n        get: function () {\r\n            return this._reqs;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     *\r\n     * @param url Request url\r\n     * @param method Request method (GET, POST, etc)\r\n     * @param options Any request options\r\n     * @param parser The parser used to handle the eventual return from the query\r\n     * @param id An identifier used to track a request within a batch\r\n     */\r\n    ODataBatch.prototype.add = function (url, method, options, parser, id) {\r\n        var info = {\r\n            id: id,\r\n            method: method.toUpperCase(),\r\n            options: options,\r\n            parser: parser,\r\n            reject: null,\r\n            resolve: null,\r\n            url: url,\r\n        };\r\n        var p = new Promise(function (resolve, reject) {\r\n            info.resolve = resolve;\r\n            info.reject = reject;\r\n        });\r\n        this._reqs.push(info);\r\n        return p;\r\n    };\r\n    /**\r\n     * Adds a dependency insuring that some set of actions will occur before a batch is processed.\r\n     * MUST be cleared using the returned resolve delegate to allow batches to run\r\n     */\r\n    ODataBatch.prototype.addDependency = function () {\r\n        var resolver = function () { return void (0); };\r\n        this._deps.push(new Promise(function (resolve) {\r\n            resolver = resolve;\r\n        }));\r\n        return resolver;\r\n    };\r\n    /**\r\n     * The batch's execute method will not resolve util any promises added here resolve\r\n     *\r\n     * @param p The dependent promise\r\n     */\r\n    ODataBatch.prototype.addResolveBatchDependency = function (p) {\r\n        this._rDeps.push(p);\r\n    };\r\n    /**\r\n     * Execute the current batch and resolve the associated promises\r\n     *\r\n     * @returns A promise which will be resolved once all of the batch's child promises have resolved\r\n     */\r\n    ODataBatch.prototype.execute = function () {\r\n        var _this = this;\r\n        // we need to check the dependencies twice due to how different engines handle things.\r\n        // We can get a second set of promises added during the first set resolving\r\n        return Promise.all(this._deps)\r\n            .then(function () { return Promise.all(_this._deps); })\r\n            .then(function () { return _this.executeImpl(); })\r\n            .then(function () { return Promise.all(_this._rDeps); })\r\n            .then(function () { return void (0); });\r\n    };\r\n    return ODataBatch;\r\n}());\r\nexport { ODataBatch };\r\n//# sourceMappingURL=odatabatch.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { isFunc, hOP } from \""@pnp/common\"";\r\nvar HttpRequestError = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HttpRequestError, _super);\r\n    function HttpRequestError(message, response, status, statusText) {\r\n        if (status === void 0) { status = response.status; }\r\n        if (statusText === void 0) { statusText = response.statusText; }\r\n        var _this = _super.call(this, message) || this;\r\n        _this.response = response;\r\n        _this.status = status;\r\n        _this.statusText = statusText;\r\n        _this.isHttpRequestError = true;\r\n        return _this;\r\n    }\r\n    HttpRequestError.init = function (r) {\r\n        return r.clone().text().then(function (t) {\r\n            return new HttpRequestError(\""Error making HttpClient request in queryable [\"" + r.status + \""] \"" + r.statusText + \"" ::> \"" + t, r.clone());\r\n        });\r\n    };\r\n    return HttpRequestError;\r\n}(Error));\r\nexport { HttpRequestError };\r\nvar ODataParserBase = /** @class */ (function () {\r\n    function ODataParserBase() {\r\n        this.rawJson = {};\r\n    }\r\n    ODataParserBase.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (_this.handleError(r, reject)) {\r\n                _this.parseImpl(r, resolve, reject);\r\n            }\r\n        });\r\n    };\r\n    ODataParserBase.prototype.parseImpl = function (r, resolve, reject) {\r\n        var _this = this;\r\n        if ((r.headers.has(\""Content-Length\"") && parseFloat(r.headers.get(\""Content-Length\"")) === 0) || r.status === 204) {\r\n            resolve({});\r\n        }\r\n        else {\r\n            // patch to handle cases of 200 response with no or whitespace only bodies (#487 & #545)\r\n            r.text()\r\n                .then(function (txt) { return txt.replace(/\\s/ig, \""\"").length > 0 ? JSON.parse(txt) : {}; })\r\n                .then(function (json) { return resolve(_this.parseODataJSON(json)); })\r\n                .catch(function (e) { return reject(e); });\r\n        }\r\n    };\r\n    /**\r\n     * Handles a response with ok === false by parsing the body and creating a ProcessHttpClientResponseException\r\n     * which is passed to the reject delegate. This method returns true if there is no error, otherwise false\r\n     *\r\n     * @param r Current response object\r\n     * @param reject reject delegate for the surrounding promise\r\n     */\r\n    ODataParserBase.prototype.handleError = function (r, reject) {\r\n        if (!r.ok) {\r\n            HttpRequestError.init(r).then(reject);\r\n        }\r\n        return r.ok;\r\n    };\r\n    /**\r\n     * Normalizes the json response by removing the various nested levels\r\n     *\r\n     * @param json json object to parse\r\n     */\r\n    ODataParserBase.prototype.parseODataJSON = function (json) {\r\n        this.rawJson = json;\r\n        var result = json;\r\n        if (hOP(json, \""d\"")) {\r\n            if (hOP(json.d, \""results\"")) {\r\n                result = json.d.results;\r\n            }\r\n            else {\r\n                result = json.d;\r\n            }\r\n        }\r\n        else if (hOP(json, \""value\"")) {\r\n            result = json.value;\r\n        }\r\n        return result;\r\n    };\r\n    return ODataParserBase;\r\n}());\r\nexport { ODataParserBase };\r\nvar ODataDefaultParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ODataDefaultParser, _super);\r\n    function ODataDefaultParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return ODataDefaultParser;\r\n}(ODataParserBase));\r\nexport { ODataDefaultParser };\r\nvar TextParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TextParser, _super);\r\n    function TextParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TextParser.prototype.parseImpl = function (r, resolve) {\r\n        r.text().then(resolve);\r\n    };\r\n    return TextParser;\r\n}(ODataParserBase));\r\nexport { TextParser };\r\nvar BlobParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BlobParser, _super);\r\n    function BlobParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BlobParser.prototype.parseImpl = function (r, resolve) {\r\n        r.blob().then(resolve);\r\n    };\r\n    return BlobParser;\r\n}(ODataParserBase));\r\nexport { BlobParser };\r\nvar JSONParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JSONParser, _super);\r\n    function JSONParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    JSONParser.prototype.parseImpl = function (r, resolve) {\r\n        r.json().then(resolve);\r\n    };\r\n    return JSONParser;\r\n}(ODataParserBase));\r\nexport { JSONParser };\r\nvar BufferParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BufferParser, _super);\r\n    function BufferParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BufferParser.prototype.parseImpl = function (r, resolve) {\r\n        if (isFunc(r.arrayBuffer)) {\r\n            r.arrayBuffer().then(resolve);\r\n        }\r\n        else {\r\n            r.buffer().then(resolve);\r\n        }\r\n    };\r\n    return BufferParser;\r\n}(ODataParserBase));\r\nexport { BufferParser };\r\nvar LambdaParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(LambdaParser, _super);\r\n    function LambdaParser(parser) {\r\n        var _this = _super.call(this) || this;\r\n        _this.parser = parser;\r\n        return _this;\r\n    }\r\n    LambdaParser.prototype.parseImpl = function (r, resolve) {\r\n        this.parser(r).then(resolve);\r\n    };\r\n    return LambdaParser;\r\n}(ODataParserBase));\r\nexport { LambdaParser };\r\n//# sourceMappingURL=parsers.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, isFunc, hOP } from \""@pnp/common\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { CachingOptions, CachingParserWrapper } from \""./caching\"";\r\n/**\r\n * Resolves the context's result value\r\n *\r\n * @param context The current context\r\n */\r\nfunction returnResult(context) {\r\n    Logger.log({\r\n        data: Logger.activeLogLevel === 0 /* Verbose */ ? context.result : {},\r\n        level: 1 /* Info */,\r\n        message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Returning result from pipeline. Set logging to verbose to see data.\"",\r\n    });\r\n    return Promise.resolve(context.result);\r\n}\r\n/**\r\n * Sets the result on the context\r\n */\r\nexport function setResult(context, value) {\r\n    return new Promise(function (resolve) {\r\n        context.result = value;\r\n        context.hasResult = true;\r\n        resolve(context);\r\n    });\r\n}\r\n/**\r\n * Invokes the next method in the provided context's pipeline\r\n *\r\n * @param c The current request context\r\n */\r\nfunction next(c) {\r\n    if (c.pipeline.length > 0) {\r\n        return c.pipeline.shift()(c);\r\n    }\r\n    else {\r\n        return Promise.resolve(c);\r\n    }\r\n}\r\n/**\r\n * Executes the current request context's pipeline\r\n *\r\n * @param context Current context\r\n */\r\nexport function pipe(context) {\r\n    if (context.pipeline.length < 1) {\r\n        Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Request pipeline contains no methods!\"", 2 /* Warning */);\r\n    }\r\n    var promise = next(context).then(function (ctx) { return returnResult(ctx); }).catch(function (e) {\r\n        Logger.error(e);\r\n        throw e;\r\n    });\r\n    if (context.isBatched) {\r\n        // this will block the batch's execute method from returning until the child requets have been resolved\r\n        context.batch.addResolveBatchDependency(promise);\r\n    }\r\n    return promise;\r\n}\r\n/**\r\n * decorator factory applied to methods in the pipeline to control behavior\r\n */\r\nexport function requestPipelineMethod(alwaysRun) {\r\n    if (alwaysRun === void 0) { alwaysRun = false; }\r\n    return function (target, propertyKey, descriptor) {\r\n        var method = descriptor.value;\r\n        descriptor.value = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            // if we have a result already in the pipeline, pass it along and don't call the tagged method\r\n            if (!alwaysRun && args.length > 0 && hOP(args[0], \""hasResult\"") && args[0].hasResult) {\r\n                Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Skipping request pipeline method \"" + propertyKey + \"", existing result in pipeline.\"", 0 /* Verbose */);\r\n                return Promise.resolve(args[0]);\r\n            }\r\n            // apply the tagged method\r\n            Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Calling request pipeline method \"" + propertyKey + \"".\"", 0 /* Verbose */);\r\n            // then chain the next method in the context's pipeline - allows for dynamic pipeline\r\n            return method.apply(target, args).then(function (ctx) { return next(ctx); });\r\n        };\r\n    };\r\n}\r\n/**\r\n * Contains the methods used within the request pipeline\r\n */\r\nvar PipelineMethods = /** @class */ (function () {\r\n    function PipelineMethods() {\r\n    }\r\n    /**\r\n     * Logs the start of the request\r\n     */\r\n    PipelineMethods.logStart = function (context) {\r\n        return new Promise(function (resolve) {\r\n            Logger.log({\r\n                data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                level: 1 /* Info */,\r\n                message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Beginning \"" + context.verb + \"" request (\"" + context.requestAbsoluteUrl + \"")\"",\r\n            });\r\n            resolve(context);\r\n        });\r\n    };\r\n    /**\r\n     * Handles caching of the request\r\n     */\r\n    PipelineMethods.caching = function (context) {\r\n        return new Promise(function (resolve) {\r\n            // handle caching, if applicable\r\n            if (context.isCached) {\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Caching is enabled for request, checking cache...\"", 1 /* Info */);\r\n                var cacheOptions = new CachingOptions(context.requestAbsoluteUrl.toLowerCase());\r\n                if (context.cachingOptions !== undefined) {\r\n                    cacheOptions = extend(cacheOptions, context.cachingOptions);\r\n                }\r\n                // we may not have a valid store\r\n                if (cacheOptions.store !== null) {\r\n                    // check if we have the data in cache and if so resolve the promise and return\r\n                    var data = cacheOptions.store.get(cacheOptions.key);\r\n                    if (data !== null) {\r\n                        // ensure we clear any held batch dependency we are resolving from the cache\r\n                        Logger.log({\r\n                            data: Logger.activeLogLevel === 1 /* Info */ ? {} : data,\r\n                            level: 1 /* Info */,\r\n                            message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value returned from cache.\"",\r\n                        });\r\n                        if (isFunc(context.batchDependency)) {\r\n                            context.batchDependency();\r\n                        }\r\n                        // handle the case where a parser needs to take special actions with a cached result\r\n                        if (hOP(context.parser, \""hydrate\"")) {\r\n                            data = context.parser.hydrate(data);\r\n                        }\r\n                        return setResult(context, data).then(function (ctx) { return resolve(ctx); });\r\n                    }\r\n                }\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value not found in cache.\"", 1 /* Info */);\r\n                // if we don't then wrap the supplied parser in the caching parser wrapper\r\n                // and send things on their way\r\n                context.parser = new CachingParserWrapper(context.parser, cacheOptions);\r\n            }\r\n            return resolve(context);\r\n        });\r\n    };\r\n    /**\r\n     * Sends the request\r\n     */\r\n    PipelineMethods.send = function (context) {\r\n        return new Promise(function (resolve, reject) {\r\n            // send or batch the request\r\n            if (context.isBatched) {\r\n                // we are in a batch, so add to batch, remove dependency, and resolve with the batch's promise\r\n                var p = context.batch.add(context.requestAbsoluteUrl, context.verb, context.options, context.parser, context.requestId);\r\n                // we release the dependency here to ensure the batch does not execute until the request is added to the batch\r\n                if (isFunc(context.batchDependency)) {\r\n                    context.batchDependency();\r\n                }\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Batching request in batch \"" + context.batch.batchId + \"".\"", 1 /* Info */);\r\n                // we set the result as the promise which will be resolved by the batch's execution\r\n                resolve(setResult(context, p));\r\n            }\r\n            else {\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Sending request.\"", 1 /* Info */);\r\n                // we are not part of a batch, so proceed as normal\r\n                var client = context.clientFactory();\r\n                var opts = extend(context.options || {}, { method: context.verb });\r\n                client.fetch(context.requestAbsoluteUrl, opts)\r\n                    .then(function (response) { return context.parser.parse(response); })\r\n                    .then(function (result) { return setResult(context, result); })\r\n                    .then(function (ctx) { return resolve(ctx); })\r\n                    .catch(function (e) { return reject(e); });\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Logs the end of the request\r\n     */\r\n    PipelineMethods.logEnd = function (context) {\r\n        return new Promise(function (resolve) {\r\n            if (context.isBatched) {\r\n                Logger.log({\r\n                    data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                    level: 1 /* Info */,\r\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") \"" + context.verb + \"" request will complete in batch \"" + context.batch.batchId + \"".\"",\r\n                });\r\n            }\r\n            else {\r\n                Logger.log({\r\n                    data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                    level: 1 /* Info */,\r\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Completing \"" + context.verb + \"" request.\"",\r\n                });\r\n            }\r\n            resolve(context);\r\n        });\r\n    };\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod(true)\r\n    ], PipelineMethods, \""logStart\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod()\r\n    ], PipelineMethods, \""caching\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod()\r\n    ], PipelineMethods, \""send\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod(true)\r\n    ], PipelineMethods, \""logEnd\"", null);\r\n    return PipelineMethods;\r\n}());\r\nexport { PipelineMethods };\r\nexport function getDefaultPipeline() {\r\n    return [\r\n        PipelineMethods.logStart,\r\n        PipelineMethods.caching,\r\n        PipelineMethods.send,\r\n        PipelineMethods.logEnd,\r\n    ].slice(0);\r\n}\r\n//# sourceMappingURL=pipeline.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { combine, RuntimeConfig, mergeOptions, objectDefinedNotNull, isArray, } from \""@pnp/common\"";\r\nimport { ODataDefaultParser, JSONParser } from \""./parsers\"";\r\nimport { getDefaultPipeline, pipe, } from \""./pipeline\"";\r\nvar Queryable = /** @class */ (function () {\r\n    function Queryable() {\r\n        this._query = new Map();\r\n        this._options = {};\r\n        this._url = \""\"";\r\n        this._parentUrl = \""\"";\r\n        this._useCaching = false;\r\n        this._cachingOptions = null;\r\n        this._cloneParentWasCaching = false;\r\n        this._cloneParentCacheOptions = null;\r\n        this._requestPipeline = null;\r\n    }\r\n    /**\r\n    * Gets the currentl url\r\n    *\r\n    */\r\n    Queryable.prototype.toUrl = function () {\r\n        return this._url;\r\n    };\r\n    /**\r\n     * Directly concatonates the supplied string to the current url, not normalizing \""/\"" chars\r\n     *\r\n     * @param pathPart The string to concatonate to the url\r\n     */\r\n    Queryable.prototype.concat = function (pathPart) {\r\n        this._url += pathPart;\r\n        return this;\r\n    };\r\n    Object.defineProperty(Queryable.prototype, \""query\"", {\r\n        /**\r\n         * Provides access to the query builder for this url\r\n         *\r\n         */\r\n        get: function () {\r\n            return this._query;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Sets custom options for current object and all derived objects accessible via chaining\r\n     *\r\n     * @param options custom options\r\n     */\r\n    Queryable.prototype.configure = function (options) {\r\n        mergeOptions(this._options, options);\r\n        return this;\r\n    };\r\n    /**\r\n     * Configures this instance from the configure options of the supplied instance\r\n     *\r\n     * @param o Instance from which options should be taken\r\n     */\r\n    Queryable.prototype.configureFrom = function (o) {\r\n        mergeOptions(this._options, o._options);\r\n        return this;\r\n    };\r\n    /**\r\n     * Enables caching for this request\r\n     *\r\n     * @param options Defines the options used when caching this request\r\n     */\r\n    Queryable.prototype.usingCaching = function (options) {\r\n        if (!RuntimeConfig.globalCacheDisable) {\r\n            this._useCaching = true;\r\n            if (options !== undefined) {\r\n                this._cachingOptions = options;\r\n            }\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Allows you to set a request specific processing pipeline\r\n     *\r\n     * @param pipeline The set of methods, in order, to execute a given request\r\n     */\r\n    Queryable.prototype.withPipeline = function (pipeline) {\r\n        this._requestPipeline = pipeline.slice(0);\r\n        return this;\r\n    };\r\n    Queryable.prototype.getCore = function (parser, options) {\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        // Fix for #304 - when we clone objects we in some cases then execute a get request\r\n        // in these cases the caching settings were getting dropped from the request\r\n        // this tracks if the object from which this was cloned was caching and applies that to an immediate get request\r\n        // does not affect objects cloned from this as we are using different fields to track the settings so it won't\r\n        // be triggered\r\n        if (this._cloneParentWasCaching) {\r\n            this.usingCaching(this._cloneParentCacheOptions);\r\n        }\r\n        return this.reqImpl(\""GET\"", options, parser);\r\n    };\r\n    Queryable.prototype.postCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.reqImpl(\""POST\"", options, parser);\r\n    };\r\n    Queryable.prototype.patchCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.reqImpl(\""PATCH\"", options, parser);\r\n    };\r\n    Queryable.prototype.deleteCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.reqImpl(\""DELETE\"", options, parser);\r\n    };\r\n    Queryable.prototype.putCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.reqImpl(\""PUT\"", options, parser);\r\n    };\r\n    Queryable.prototype.reqImpl = function (method, options, parser) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        return this.getRequestPipeline(method, options, parser)\r\n            .then(function (pipeline) { return _this.toRequestContext(method, options, parser, pipeline); })\r\n            .then(function (context) { return pipe(context); });\r\n    };\r\n    /**\r\n     * Appends the given string and normalizes \""/\"" chars\r\n     *\r\n     * @param pathPart The string to append\r\n     */\r\n    Queryable.prototype.append = function (pathPart) {\r\n        this._url = combine(this._url, pathPart);\r\n    };\r\n    Object.defineProperty(Queryable.prototype, \""parentUrl\"", {\r\n        /**\r\n         * Gets the parent url used when creating this instance\r\n         *\r\n         */\r\n        get: function () {\r\n            return this._parentUrl;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Extends this queryable from the provided parent\r\n     *\r\n     * @param parent Parent queryable from which we will derive a base url\r\n     * @param path Additional path\r\n     */\r\n    Queryable.prototype.extend = function (parent, path) {\r\n        this._parentUrl = parent._url;\r\n        this._url = combine(this._parentUrl, path || \""\"");\r\n        this.configureFrom(parent);\r\n    };\r\n    /**\r\n     * Configures a cloned object from this instance\r\n     *\r\n     * @param clone\r\n     */\r\n    Queryable.prototype._clone = function (clone, _0) {\r\n        clone.configureFrom(this);\r\n        if (this._useCaching) {\r\n            clone._cloneParentWasCaching = true;\r\n            clone._cloneParentCacheOptions = this._cachingOptions;\r\n        }\r\n        return clone;\r\n    };\r\n    /**\r\n     * Handles getting the request pipeline to run for a given request\r\n     */\r\n    // @ts-ignore\r\n    // justified because we want to show that all these arguments are passed to the method so folks inheriting and potentially overriding\r\n    // clearly see how the method is invoked inside the class\r\n    Queryable.prototype.getRequestPipeline = function (method, options, parser) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        return new Promise(function (resolve) {\r\n            if (objectDefinedNotNull(_this._requestPipeline) && isArray(_this._requestPipeline)) {\r\n                resolve(_this._requestPipeline);\r\n            }\r\n            else {\r\n                resolve(getDefaultPipeline());\r\n            }\r\n        });\r\n    };\r\n    return Queryable;\r\n}());\r\nexport { Queryable };\r\nvar ODataQueryable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ODataQueryable, _super);\r\n    function ODataQueryable() {\r\n        var _this = _super.call(this) || this;\r\n        _this._batch = null;\r\n        _this._batchDependency = null;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Adds this query to the supplied batch\r\n     *\r\n     * @example\r\n     * ```\r\n     *\r\n     * let b = pnp.sp.createBatch();\r\n     * pnp.sp.web.inBatch(b).get().then(...);\r\n     * b.execute().then(...)\r\n     * ```\r\n     */\r\n    ODataQueryable.prototype.inBatch = function (batch) {\r\n        if (this.batch !== null) {\r\n            throw Error(\""This query is already part of a batch.\"");\r\n        }\r\n        if (objectDefinedNotNull(batch)) {\r\n            this._batch = batch;\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets the currentl url\r\n     *\r\n     */\r\n    ODataQueryable.prototype.toUrl = function () {\r\n        return this._url;\r\n    };\r\n    /**\r\n     * Executes the currently built request\r\n     *\r\n     * @param parser Allows you to specify a parser to handle the result\r\n     * @param getOptions The options used for this request\r\n     */\r\n    ODataQueryable.prototype.get = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return this.getCore(parser, options);\r\n    };\r\n    ODataQueryable.prototype.getCore = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return _super.prototype.getCore.call(this, parser, options);\r\n    };\r\n    ODataQueryable.prototype.postCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.postCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.patchCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.patchCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.deleteCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.deleteCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.putCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.putCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.reqImpl = function (method, options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (this.hasBatch) {\r\n            this._batchDependency = this.addBatchDependency();\r\n        }\r\n        return _super.prototype.reqImpl.call(this, method, options, parser);\r\n    };\r\n    /**\r\n     * Blocks a batch call from occuring, MUST be cleared by calling the returned function\r\n    */\r\n    ODataQueryable.prototype.addBatchDependency = function () {\r\n        if (this._batch !== null) {\r\n            return this._batch.addDependency();\r\n        }\r\n        return function () { return null; };\r\n    };\r\n    Object.defineProperty(ODataQueryable.prototype, \""hasBatch\"", {\r\n        /**\r\n         * Indicates if the current query has a batch associated\r\n         *\r\n         */\r\n        get: function () {\r\n            return objectDefinedNotNull(this._batch);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ODataQueryable.prototype, \""batch\"", {\r\n        /**\r\n         * The batch currently associated with this query or null\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.hasBatch ? this._batch : null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Configures a cloned object from this instance\r\n     *\r\n     * @param clone\r\n     */\r\n    ODataQueryable.prototype._clone = function (clone, cloneSettings) {\r\n        clone = _super.prototype._clone.call(this, clone, cloneSettings);\r\n        if (cloneSettings.includeBatch) {\r\n            clone = clone.inBatch(this._batch);\r\n        }\r\n        return clone;\r\n    };\r\n    return ODataQueryable;\r\n}(Queryable));\r\nexport { ODataQueryable };\r\n//# sourceMappingURL=queryable.js.map"",""export * from \""./src/addinhelpers\"";\r\n//# sourceMappingURL=index.js.map"",""export * from \""./sprequestexecutorclient\"";\r\nexport * from \""./sprestaddin\"";\r\n//# sourceMappingURL=addinhelpers.js.map"",""import { extend } from \""@pnp/common\"";\r\n/**\r\n * Makes requests using the SP.RequestExecutor library.\r\n */\r\nvar SPRequestExecutorClient = /** @class */ (function () {\r\n    function SPRequestExecutorClient() {\r\n        /**\r\n         * Converts a SharePoint REST API response to a fetch API response.\r\n         */\r\n        this.convertToResponse = function (spResponse) {\r\n            var responseHeaders = new Headers();\r\n            if (spResponse.headers !== undefined) {\r\n                for (var h in spResponse.headers) {\r\n                    if (spResponse.headers[h]) {\r\n                        responseHeaders.append(h, spResponse.headers[h]);\r\n                    }\r\n                }\r\n            }\r\n            // Cannot have an empty string body when creating a Response with status 204\r\n            var body = spResponse.statusCode === 204 ? null : spResponse.body;\r\n            return new Response(body, {\r\n                headers: responseHeaders,\r\n                status: spResponse.statusCode,\r\n                statusText: spResponse.statusText,\r\n            });\r\n        };\r\n    }\r\n    /**\r\n     * Fetches a URL using the SP.RequestExecutor library.\r\n     */\r\n    SPRequestExecutorClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        if (SP === undefined || SP.RequestExecutor === undefined) {\r\n            throw Error(\""SP.RequestExecutor is undefined. Load the SP.RequestExecutor.js library (/_layouts/15/SP.RequestExecutor.js) before loading the PnP JS Core library.\"");\r\n        }\r\n        var addinWebUrl = url.substring(0, url.indexOf(\""/_api\"")), executor = new SP.RequestExecutor(addinWebUrl);\r\n        var headers = {}, iterator, temp;\r\n        if (options.headers && options.headers instanceof Headers) {\r\n            iterator = options.headers.entries();\r\n            temp = iterator.next();\r\n            while (!temp.done) {\r\n                headers[temp.value[0]] = temp.value[1];\r\n                temp = iterator.next();\r\n            }\r\n        }\r\n        else {\r\n            headers = options.headers;\r\n        }\r\n        return new Promise(function (resolve, reject) {\r\n            var requestOptions = {\r\n                error: function (error) {\r\n                    reject(_this.convertToResponse(error));\r\n                },\r\n                headers: headers,\r\n                method: options.method,\r\n                success: function (response) {\r\n                    resolve(_this.convertToResponse(response));\r\n                },\r\n                url: url,\r\n            };\r\n            if (options.body) {\r\n                requestOptions = extend(requestOptions, { body: options.body });\r\n            }\r\n            else {\r\n                requestOptions = extend(requestOptions, { binaryStringRequestBody: true });\r\n            }\r\n            executor.executeAsync(requestOptions);\r\n        });\r\n    };\r\n    return SPRequestExecutorClient;\r\n}());\r\nexport { SPRequestExecutorClient };\r\n//# sourceMappingURL=sprequestexecutorclient.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SPRest, Web, Site, } from \""@pnp/sp\"";\r\nimport { isUrlAbsolute, combine, } from \""@pnp/common\"";\r\nvar SPRestAddIn = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPRestAddIn, _super);\r\n    function SPRestAddIn() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Begins a cross-domain, host site scoped REST request, for use in add-in webs\r\n     *\r\n     * @param addInWebUrl The absolute url of the add-in web\r\n     * @param hostWebUrl The absolute url of the host web\r\n     */\r\n    SPRestAddIn.prototype.crossDomainSite = function (addInWebUrl, hostWebUrl) {\r\n        return this._cdImpl(Site, addInWebUrl, hostWebUrl, \""site\"");\r\n    };\r\n    /**\r\n     * Begins a cross-domain, host web scoped REST request, for use in add-in webs\r\n     *\r\n     * @param addInWebUrl The absolute url of the add-in web\r\n     * @param hostWebUrl The absolute url of the host web\r\n     */\r\n    SPRestAddIn.prototype.crossDomainWeb = function (addInWebUrl, hostWebUrl) {\r\n        return this._cdImpl(Web, addInWebUrl, hostWebUrl, \""web\"");\r\n    };\r\n    /**\r\n     * Implements the creation of cross domain REST urls\r\n     *\r\n     * @param factory The constructor of the object to create Site | Web\r\n     * @param addInWebUrl The absolute url of the add-in web\r\n     * @param hostWebUrl The absolute url of the host web\r\n     * @param urlPart String part to append to the url \""site\"" | \""web\""\r\n     */\r\n    SPRestAddIn.prototype._cdImpl = function (factory, addInWebUrl, hostWebUrl, urlPart) {\r\n        if (!isUrlAbsolute(addInWebUrl)) {\r\n            throw Error(\""The addInWebUrl parameter must be an absolute url.\"");\r\n        }\r\n        if (!isUrlAbsolute(hostWebUrl)) {\r\n            throw Error(\""The hostWebUrl parameter must be an absolute url.\"");\r\n        }\r\n        var url = combine(addInWebUrl, \""_api/SP.AppContextSite(@target)\"");\r\n        var instance = new factory(url, urlPart);\r\n        instance.query.set(\""@target\"", \""'\"" + encodeURIComponent(hostWebUrl) + \""'\"");\r\n        return instance.configure(this._options);\r\n    };\r\n    return SPRestAddIn;\r\n}(SPRest));\r\nexport { SPRestAddIn };\r\nexport var sp = new SPRestAddIn();\r\n//# sourceMappingURL=sprestaddin.js.map"",""export * from \""./src/sp\"";\r\n//# sourceMappingURL=index.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection } from \""./sharepointqueryable\"";\r\nimport { File } from \""./files\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\n/**\r\n * Represents an app catalog\r\n */\r\nvar AppCatalog = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AppCatalog, _super);\r\n    function AppCatalog(baseUrl, path) {\r\n        if (path === void 0) { path = \""_api/web/tenantappcatalog/AvailableApps\""; }\r\n        return _super.call(this, extractWebUrl(typeof baseUrl === \""string\"" ? baseUrl : baseUrl.toUrl()), path) || this;\r\n    }\r\n    /**\r\n     * Get details of specific app from the app catalog\r\n     * @param id - Specify the guid of the app\r\n     */\r\n    AppCatalog.prototype.getAppById = function (id) {\r\n        return new App(this, \""getById('\"" + id + \""')\"");\r\n    };\r\n    /**\r\n     * Uploads an app package. Not supported for batching\r\n     *\r\n     * @param filename Filename to create.\r\n     * @param content app package data (eg: the .app or .sppkg file).\r\n     * @param shouldOverWrite Should an app with the same name in the same location be overwritten? (default: true)\r\n     * @returns Promise<AppAddResult>\r\n     */\r\n    AppCatalog.prototype.add = function (filename, content, shouldOverWrite) {\r\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\r\n        var catalog = this.toUrl().indexOf(\""tenantappcatalog\"") > 0 ? \""tenantappcatalog\"" : \""sitecollectionappcatalog\"";\r\n        // you don't add to the availableapps collection\r\n        var adder = new AppCatalog(extractWebUrl(this.toUrl()), \""_api/web/\"" + catalog + \""/add(overwrite=\"" + shouldOverWrite + \"",url='\"" + filename + \""')\"");\r\n        return adder.postCore({\r\n            body: content,\r\n        }).then(function (r) {\r\n            return {\r\n                data: r,\r\n                file: new File(odataUrlFrom(r)),\r\n            };\r\n        });\r\n    };\r\n    return AppCatalog;\r\n}(SharePointQueryableCollection));\r\nexport { AppCatalog };\r\n/**\r\n * Represents the actions you can preform on a given app within the catalog\r\n */\r\nvar App = /** @class */ (function (_super) {\r\n    tslib_1.__extends(App, _super);\r\n    function App() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * This method deploys an app on the app catalog.  It must be called in the context\r\n     * of the tenant app catalog web or it will fail.\r\n     *\r\n     * @param skipFeatureDeployment Deploy the app to the entire tenant\r\n     */\r\n    App.prototype.deploy = function (skipFeatureDeployment) {\r\n        if (skipFeatureDeployment === void 0) { skipFeatureDeployment = false; }\r\n        return this.clone(App, \""Deploy(\"" + skipFeatureDeployment + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * This method retracts a deployed app on the app catalog.  It must be called in the context\r\n     * of the tenant app catalog web or it will fail.\r\n     */\r\n    App.prototype.retract = function () {\r\n        return this.clone(App, \""Retract\"").postCore();\r\n    };\r\n    /**\r\n     * This method allows an app which is already deployed to be installed on a web\r\n     */\r\n    App.prototype.install = function () {\r\n        return this.clone(App, \""Install\"").postCore();\r\n    };\r\n    /**\r\n     * This method allows an app which is already insatlled to be uninstalled on a web\r\n     */\r\n    App.prototype.uninstall = function () {\r\n        return this.clone(App, \""Uninstall\"").postCore();\r\n    };\r\n    /**\r\n     * This method allows an app which is already insatlled to be upgraded on a web\r\n     */\r\n    App.prototype.upgrade = function () {\r\n        return this.clone(App, \""Upgrade\"").postCore();\r\n    };\r\n    /**\r\n     * This method removes an app from the app catalog.  It must be called in the context\r\n     * of the tenant app catalog web or it will fail.\r\n     */\r\n    App.prototype.remove = function () {\r\n        return this.clone(App, \""Remove\"").postCore();\r\n    };\r\n    return App;\r\n}(SharePointQueryableInstance));\r\nexport { App };\r\n//# sourceMappingURL=appcatalog.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { TextParser, BlobParser, JSONParser, BufferParser } from \""@pnp/odata\"";\r\n/**\r\n * Describes a collection of Item objects\r\n *\r\n */\r\nvar AttachmentFiles = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AttachmentFiles, _super);\r\n    function AttachmentFiles() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    AttachmentFiles_1 = AttachmentFiles;\r\n    /**\r\n     * Gets a Attachment File by filename\r\n     *\r\n     * @param name The name of the file, including extension.\r\n     */\r\n    AttachmentFiles.prototype.getByName = function (name) {\r\n        var f = new AttachmentFile(this);\r\n        f.concat(\""('\"" + name + \""')\"");\r\n        return f;\r\n    };\r\n    /**\r\n     * Adds a new attachment to the collection. Not supported for batching.\r\n     *\r\n     * @param name The name of the file, including extension.\r\n     * @param content The Base64 file content.\r\n     */\r\n    AttachmentFiles.prototype.add = function (name, content) {\r\n        var _this = this;\r\n        return this.clone(AttachmentFiles_1, \""add(FileName='\"" + name + \""')\"", false).postCore({\r\n            body: content,\r\n        }).then(function (response) {\r\n            return {\r\n                data: response,\r\n                file: _this.getByName(name),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds multiple new attachment to the collection. Not supported for batching.\r\n     *\r\n     * @param files The collection of files to add\r\n     */\r\n    AttachmentFiles.prototype.addMultiple = function (files) {\r\n        var _this = this;\r\n        // add the files in series so we don't get update conflicts\r\n        return files.reduce(function (chain, file) { return chain.then(function () { return _this.clone(AttachmentFiles_1, \""add(FileName='\"" + file.name + \""')\"", false).postCore({\r\n            body: file.content,\r\n        }); }); }, Promise.resolve());\r\n    };\r\n    /**\r\n     * Delete multiple attachments from the collection. Not supported for batching.\r\n     *\r\n     * @param files The collection of files to delete\r\n     */\r\n    AttachmentFiles.prototype.deleteMultiple = function () {\r\n        var _this = this;\r\n        var files = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            files[_i] = arguments[_i];\r\n        }\r\n        return files.reduce(function (chain, file) { return chain.then(function () { return _this.getByName(file).delete(); }); }, Promise.resolve());\r\n    };\r\n    /**\r\n     * Delete multiple attachments from the collection and send to recycle bin. Not supported for batching.\r\n     *\r\n     * @param files The collection of files to be deleted and sent to recycle bin\r\n     */\r\n    AttachmentFiles.prototype.recycleMultiple = function () {\r\n        var _this = this;\r\n        var files = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            files[_i] = arguments[_i];\r\n        }\r\n        return files.reduce(function (chain, file) { return chain.then(function () { return _this.getByName(file).recycle(); }); }, Promise.resolve());\r\n    };\r\n    var AttachmentFiles_1;\r\n    AttachmentFiles = AttachmentFiles_1 = tslib_1.__decorate([\r\n        defaultPath(\""AttachmentFiles\"")\r\n    ], AttachmentFiles);\r\n    return AttachmentFiles;\r\n}(SharePointQueryableCollection));\r\nexport { AttachmentFiles };\r\n/**\r\n * Describes a single attachment file instance\r\n *\r\n */\r\nvar AttachmentFile = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AttachmentFile, _super);\r\n    function AttachmentFile() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.delete = _this._deleteWithETag;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Gets the contents of the file as text\r\n     *\r\n     */\r\n    AttachmentFile.prototype.getText = function () {\r\n        return this.getParsed(new TextParser());\r\n    };\r\n    /**\r\n     * Gets the contents of the file as a blob, does not work in Node.js\r\n     *\r\n     */\r\n    AttachmentFile.prototype.getBlob = function () {\r\n        return this.getParsed(new BlobParser());\r\n    };\r\n    /**\r\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js\r\n     */\r\n    AttachmentFile.prototype.getBuffer = function () {\r\n        return this.getParsed(new BufferParser());\r\n    };\r\n    /**\r\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js\r\n     */\r\n    AttachmentFile.prototype.getJSON = function () {\r\n        return this.getParsed(new JSONParser());\r\n    };\r\n    /**\r\n     * Sets the content of a file. Not supported for batching\r\n     *\r\n     * @param content The value to set for the file contents\r\n     */\r\n    AttachmentFile.prototype.setContent = function (content) {\r\n        var _this = this;\r\n        return this.clone(AttachmentFile, \""$value\"", false).postCore({\r\n            body: content,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""PUT\"",\r\n            },\r\n        }).then(function (_) { return new AttachmentFile(_this); });\r\n    };\r\n    /**\r\n     * Delete this attachment file and send it to recycle bin\r\n     *\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    AttachmentFile.prototype.recycle = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.clone(AttachmentFile, \""recycleObject\"").postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    // /**\r\n    //  * Delete this attachment file\r\n    //  *\r\n    //  * @param eTag Value used in the IF-Match header, by default \""*\""\r\n    //  */\r\n    // public delete(eTag = \""*\""): Promise<void> {\r\n    //     return this.postCore({\r\n    //         headers: {\r\n    //             \""IF-Match\"": eTag,\r\n    //             \""X-HTTP-Method\"": \""DELETE\"",\r\n    //         },\r\n    //     });\r\n    // }\r\n    AttachmentFile.prototype.getParsed = function (parser) {\r\n        return this.clone(AttachmentFile, \""$value\"", false).get(parser);\r\n    };\r\n    return AttachmentFile;\r\n}(SharePointQueryableInstance));\r\nexport { AttachmentFile };\r\n//# sourceMappingURL=attachmentfiles.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { ODataBatch } from \""@pnp/odata\"";\r\nimport { getGUID, isUrlAbsolute, combine, mergeHeaders, hOP } from \""@pnp/common\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { SPHttpClient } from \""./net/sphttpclient\"";\r\nimport { SPRuntimeConfig } from \""./config/splibconfig\"";\r\nimport { toAbsoluteUrl } from \""./utils/toabsoluteurl\"";\r\n/**\r\n * Manages a batch of OData operations\r\n */\r\nvar SPBatch = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPBatch, _super);\r\n    function SPBatch(baseUrl) {\r\n        var _this = _super.call(this) || this;\r\n        _this.baseUrl = baseUrl;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Parses the response from a batch request into an array of Response instances\r\n     *\r\n     * @param body Text body of the response from the batch request\r\n     */\r\n    SPBatch.ParseResponse = function (body) {\r\n        return new Promise(function (resolve, reject) {\r\n            var responses = [];\r\n            var header = \""--batchresponse_\"";\r\n            // Ex. \""HTTP/1.1 500 Internal Server Error\""\r\n            var statusRegExp = new RegExp(\""^HTTP/[0-9.]+ +([0-9]+) +(.*)\"", \""i\"");\r\n            var lines = body.split(\""\\n\"");\r\n            var state = \""batch\"";\r\n            var status;\r\n            var statusText;\r\n            for (var i = 0; i < lines.length; ++i) {\r\n                var line = lines[i];\r\n                switch (state) {\r\n                    case \""batch\"":\r\n                        if (line.substr(0, header.length) === header) {\r\n                            state = \""batchHeaders\"";\r\n                        }\r\n                        else {\r\n                            if (line.trim() !== \""\"") {\r\n                                throw Error(\""Invalid response, line \"" + i);\r\n                            }\r\n                        }\r\n                        break;\r\n                    case \""batchHeaders\"":\r\n                        if (line.trim() === \""\"") {\r\n                            state = \""status\"";\r\n                        }\r\n                        break;\r\n                    case \""status\"":\r\n                        var parts = statusRegExp.exec(line);\r\n                        if (parts.length !== 3) {\r\n                            throw Error(\""Invalid status, line \"" + i);\r\n                        }\r\n                        status = parseInt(parts[1], 10);\r\n                        statusText = parts[2];\r\n                        state = \""statusHeaders\"";\r\n                        break;\r\n                    case \""statusHeaders\"":\r\n                        if (line.trim() === \""\"") {\r\n                            state = \""body\"";\r\n                        }\r\n                        break;\r\n                    case \""body\"":\r\n                        responses.push((status === 204) ? new Response() : new Response(line, { status: status, statusText: statusText }));\r\n                        state = \""batch\"";\r\n                        break;\r\n                }\r\n            }\r\n            if (state !== \""status\"") {\r\n                reject(Error(\""Unexpected end of input\""));\r\n            }\r\n            resolve(responses);\r\n        });\r\n    };\r\n    SPBatch.prototype.executeImpl = function () {\r\n        var _this = this;\r\n        Logger.write(\""[\"" + this.batchId + \""] (\"" + (new Date()).getTime() + \"") Executing batch with \"" + this.requests.length + \"" requests.\"", 1 /* Info */);\r\n        // if we don't have any requests, don't bother sending anything\r\n        // this could be due to caching further upstream, or just an empty batch\r\n        if (this.requests.length < 1) {\r\n            Logger.write(\""Resolving empty batch.\"", 1 /* Info */);\r\n            return Promise.resolve();\r\n        }\r\n        // creating the client here allows the url to be populated for nodejs client as well as potentially\r\n        // any other hacks needed for other types of clients. Essentially allows the absoluteRequestUrl\r\n        // below to be correct\r\n        var client = new SPHttpClient();\r\n        // due to timing we need to get the absolute url here so we can use it for all the individual requests\r\n        // and for sending the entire batch\r\n        return toAbsoluteUrl(this.baseUrl).then(function (absoluteRequestUrl) {\r\n            // build all the requests, send them, pipe results in order to parsers\r\n            var batchBody = [];\r\n            var currentChangeSetId = \""\"";\r\n            for (var i = 0; i < _this.requests.length; i++) {\r\n                var reqInfo = _this.requests[i];\r\n                if (reqInfo.method === \""GET\"") {\r\n                    if (currentChangeSetId.length > 0) {\r\n                        // end an existing change set\r\n                        batchBody.push(\""--changeset_\"" + currentChangeSetId + \""--\\n\\n\"");\r\n                        currentChangeSetId = \""\"";\r\n                    }\r\n                    batchBody.push(\""--batch_\"" + _this.batchId + \""\\n\"");\r\n                }\r\n                else {\r\n                    if (currentChangeSetId.length < 1) {\r\n                        // start new change set\r\n                        currentChangeSetId = getGUID();\r\n                        batchBody.push(\""--batch_\"" + _this.batchId + \""\\n\"");\r\n                        batchBody.push(\""Content-Type: multipart/mixed; boundary=\\\""changeset_\"" + currentChangeSetId + \""\\\""\\n\\n\"");\r\n                    }\r\n                    batchBody.push(\""--changeset_\"" + currentChangeSetId + \""\\n\"");\r\n                }\r\n                // common batch part prefix\r\n                batchBody.push(\""Content-Type: application/http\\n\"");\r\n                batchBody.push(\""Content-Transfer-Encoding: binary\\n\\n\"");\r\n                var headers = new Headers();\r\n                // this is the url of the individual request within the batch\r\n                var url = isUrlAbsolute(reqInfo.url) ? reqInfo.url : combine(absoluteRequestUrl, reqInfo.url);\r\n                Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Adding request \"" + reqInfo.method + \"" \"" + url + \"" to batch.\"", 0 /* Verbose */);\r\n                if (reqInfo.method !== \""GET\"") {\r\n                    var method = reqInfo.method;\r\n                    var castHeaders = reqInfo.options.headers;\r\n                    if (hOP(reqInfo, \""options\"") && hOP(reqInfo.options, \""headers\"") && castHeaders[\""X-HTTP-Method\""] !== undefined) {\r\n                        method = castHeaders[\""X-HTTP-Method\""];\r\n                        delete castHeaders[\""X-HTTP-Method\""];\r\n                    }\r\n                    batchBody.push(method + \"" \"" + url + \"" HTTP/1.1\\n\"");\r\n                    headers.set(\""Content-Type\"", \""application/json;odata=verbose;charset=utf-8\"");\r\n                }\r\n                else {\r\n                    batchBody.push(reqInfo.method + \"" \"" + url + \"" HTTP/1.1\\n\"");\r\n                }\r\n                // merge global config headers\r\n                mergeHeaders(headers, SPRuntimeConfig.headers);\r\n                // merge per-request headers\r\n                if (reqInfo.options) {\r\n                    mergeHeaders(headers, reqInfo.options.headers);\r\n                }\r\n                // lastly we apply any default headers we need that may not exist\r\n                if (!headers.has(\""Accept\"")) {\r\n                    headers.append(\""Accept\"", \""application/json\"");\r\n                }\r\n                if (!headers.has(\""Content-Type\"")) {\r\n                    headers.append(\""Content-Type\"", \""application/json;odata=verbose;charset=utf-8\"");\r\n                }\r\n                if (!headers.has(\""X-ClientService-ClientTag\"")) {\r\n                    headers.append(\""X-ClientService-ClientTag\"", \""PnPCoreJS:@pnp-1.3.4\"");\r\n                }\r\n                // write headers into batch body\r\n                headers.forEach(function (value, name) {\r\n                    batchBody.push(name + \"": \"" + value + \""\\n\"");\r\n                });\r\n                batchBody.push(\""\\n\"");\r\n                if (reqInfo.options.body) {\r\n                    batchBody.push(reqInfo.options.body + \""\\n\\n\"");\r\n                }\r\n            }\r\n            if (currentChangeSetId.length > 0) {\r\n                // Close the changeset\r\n                batchBody.push(\""--changeset_\"" + currentChangeSetId + \""--\\n\\n\"");\r\n                currentChangeSetId = \""\"";\r\n            }\r\n            batchBody.push(\""--batch_\"" + _this.batchId + \""--\\n\"");\r\n            var batchOptions = {\r\n                \""body\"": batchBody.join(\""\""),\r\n                \""headers\"": {\r\n                    \""Content-Type\"": \""multipart/mixed; boundary=batch_\"" + _this.batchId,\r\n                },\r\n                \""method\"": \""POST\"",\r\n            };\r\n            Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Sending batch request.\"", 1 /* Info */);\r\n            return client.fetch(combine(absoluteRequestUrl, \""/_api/$batch\""), batchOptions)\r\n                .then(function (r) { return r.text(); })\r\n                .then(SPBatch.ParseResponse)\r\n                .then(function (responses) {\r\n                if (responses.length !== _this.requests.length) {\r\n                    throw Error(\""Could not properly parse responses to match requests in batch.\"");\r\n                }\r\n                Logger.write(\""[\"" + _this.batchId + \""] (\"" + (new Date()).getTime() + \"") Resolving batched requests.\"", 1 /* Info */);\r\n                return responses.reduce(function (chain, response, index) {\r\n                    var request = _this.requests[index];\r\n                    Logger.write(\""[\"" + request.id + \""] (\"" + (new Date()).getTime() + \"") Resolving request in batch \"" + _this.batchId + \"".\"", 1 /* Info */);\r\n                    return chain.then(function (_) { return request.parser.parse(response).then(request.resolve).catch(request.reject); });\r\n                }, Promise.resolve());\r\n            });\r\n        });\r\n    };\r\n    return SPBatch;\r\n}(ODataBatch));\r\nexport { SPBatch };\r\n//# sourceMappingURL=batch.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { Item } from \""./items\"";\r\nimport { extend, getGUID, jsS, hOP, stringIsNullOrEmpty, objectDefinedNotNull, combine, isUrlAbsolute } from \""@pnp/common\"";\r\nimport { SharePointQueryable } from \""./sharepointqueryable\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\nimport { List } from \""./lists\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { Web } from \""./webs\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\nimport { Site } from \""./site\"";\r\n/**\r\n * Page promotion state\r\n */\r\nexport var PromotedState;\r\n(function (PromotedState) {\r\n    /**\r\n     * Regular client side page\r\n     */\r\n    PromotedState[PromotedState[\""NotPromoted\""] = 0] = \""NotPromoted\"";\r\n    /**\r\n     * Page that will be promoted as news article after publishing\r\n     */\r\n    PromotedState[PromotedState[\""PromoteOnPublish\""] = 1] = \""PromoteOnPublish\"";\r\n    /**\r\n     * Page that is promoted as news article\r\n     */\r\n    PromotedState[PromotedState[\""Promoted\""] = 2] = \""Promoted\"";\r\n})(PromotedState || (PromotedState = {}));\r\n/**\r\n * Gets the next order value 1 based for the provided collection\r\n *\r\n * @param collection Collection of orderable things\r\n */\r\nfunction getNextOrder(collection) {\r\n    if (collection.length < 1) {\r\n        return 1;\r\n    }\r\n    return Math.max.apply(null, collection.map(function (i) { return i.order; })) + 1;\r\n}\r\n/**\r\n * Normalizes the order value for all the sections, columns, and controls to be 1 based and stepped (1, 2, 3...)\r\n *\r\n * @param collection The collection to normalize\r\n */\r\nfunction reindex(collection) {\r\n    for (var i = 0; i < collection.length; i++) {\r\n        collection[i].order = i + 1;\r\n        if (hOP(collection[i], \""columns\"")) {\r\n            reindex(collection[i].columns);\r\n        }\r\n        else if (hOP(collection[i], \""controls\"")) {\r\n            reindex(collection[i].controls);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Represents the data and methods associated with client side \""modern\"" pages\r\n */\r\nvar ClientSidePage = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientSidePage, _super);\r\n    /**\r\n     * PLEASE DON'T USE THIS CONSTRUCTOR DIRECTLY\r\n     *\r\n     */\r\n    function ClientSidePage(baseUrl, path, json, noInit, sections, commentsDisabled) {\r\n        if (noInit === void 0) { noInit = false; }\r\n        if (sections === void 0) { sections = []; }\r\n        if (commentsDisabled === void 0) { commentsDisabled = false; }\r\n        var _this = _super.call(this, baseUrl, path) || this;\r\n        _this.json = json;\r\n        _this.sections = sections;\r\n        _this.commentsDisabled = commentsDisabled;\r\n        _this._bannerImageDirty = false;\r\n        // ensure we have a good url to build on for the pages api\r\n        if (typeof baseUrl === \""string\"") {\r\n            _this._parentUrl = \""\"";\r\n            _this._url = combine(extractWebUrl(baseUrl), path);\r\n        }\r\n        else {\r\n            _this.extend(ClientSidePage.initFrom(baseUrl, null), path);\r\n        }\r\n        // set a default page settings slice\r\n        _this._pageSettings = { controlType: 0, pageSettingsSlice: { isDefaultDescription: true, isDefaultThumbnail: true } };\r\n        // set a default layout part\r\n        _this._layoutPart = ClientSidePage.getDefaultLayoutPart();\r\n        if (typeof json !== \""undefined\"" && !noInit) {\r\n            _this.fromJSON(json);\r\n        }\r\n        return _this;\r\n    }\r\n    /**\r\n     * Creates a new blank page within the supplied library [does not work with batching]\r\n     *\r\n     * @param web Parent web in which we will create the page (we allow list here too matching the old api)\r\n     * @param pageName Filename of the page, such as \""page\""\r\n     * @param title The display title of the page\r\n     * @param pageLayoutType Layout type of the page to use\r\n     */\r\n    ClientSidePage.create = function (web, pageName, title, pageLayoutType) {\r\n        if (pageLayoutType === void 0) { pageLayoutType = \""Article\""; }\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var pageInitData, newPage;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        // patched because previously we used the full page name with the .aspx at the end\r\n                        // this allows folk's existing code to work after the re-write to the new API\r\n                        pageName = pageName.replace(/\\.aspx$/i, \""\"");\r\n                        return [4 /*yield*/, ClientSidePage.initFrom(web, \""_api/sitepages/pages\"").postCore({\r\n                                body: jsS(Object.assign(metadata(\""SP.Publishing.SitePage\""), {\r\n                                    PageLayoutType: pageLayoutType,\r\n                                })),\r\n                            })];\r\n                    case 1:\r\n                        pageInitData = _a.sent();\r\n                        newPage = new ClientSidePage(web, \""\"", pageInitData);\r\n                        // newPage.authors = [currentUserLogin.UserPrincipalName];\r\n                        newPage.title = pageName;\r\n                        return [4 /*yield*/, newPage.save(false)];\r\n                    case 2:\r\n                        _a.sent();\r\n                        newPage.title = title;\r\n                        return [2 /*return*/, newPage];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Creates a new ClientSidePage instance from the provided html content string\r\n     *\r\n     * @param html HTML markup representing the page\r\n     */\r\n    ClientSidePage.fromFile = function (file) {\r\n        return file.getItem().then(function (i) {\r\n            var page = new ClientSidePage(extractWebUrl(file.toUrl()), \""\"", { Id: i.Id }, true);\r\n            return page.configureFrom(file).load();\r\n        });\r\n    };\r\n    ClientSidePage.getDefaultLayoutPart = function () {\r\n        return {\r\n            dataVersion: \""1.4\"",\r\n            description: \""Title Region Description\"",\r\n            id: \""cbe7b0a9-3504-44dd-a3a3-0e5cacd07788\"",\r\n            instanceId: \""cbe7b0a9-3504-44dd-a3a3-0e5cacd07788\"",\r\n            properties: {\r\n                authors: [],\r\n                layoutType: \""FullWidthImage\"",\r\n                showPublishDate: false,\r\n                showTopicHeader: false,\r\n                textAlignment: \""Left\"",\r\n                title: \""\"",\r\n                topicHeader: \""\"",\r\n            },\r\n            serverProcessedContent: { htmlStrings: {}, searchablePlainTexts: {}, imageSources: {}, links: {} },\r\n            title: \""Title area\"",\r\n        };\r\n    };\r\n    ClientSidePage.initFrom = function (o, url) {\r\n        return (new ClientSidePage(extractWebUrl(o.toUrl()), url)).configureFrom(o);\r\n    };\r\n    Object.defineProperty(ClientSidePage.prototype, \""pageLayout\"", {\r\n        get: function () {\r\n            return this.json.PageLayoutType;\r\n        },\r\n        set: function (value) {\r\n            this.json.PageLayoutType = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSidePage.prototype, \""bannerImageUrl\"", {\r\n        get: function () {\r\n            return this.json.BannerImageUrl;\r\n        },\r\n        set: function (value) {\r\n            this.json.BannerImageUrl = value;\r\n            this._bannerImageDirty = true;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSidePage.prototype, \""bannerImageSourceType\"", {\r\n        get: function () {\r\n            return this._layoutPart.properties.imageSourceType;\r\n        },\r\n        set: function (value) {\r\n            this._layoutPart.properties.imageSourceType = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSidePage.prototype, \""topicHeader\"", {\r\n        get: function () {\r\n            return objectDefinedNotNull(this.json.TopicHeader) ? this.json.TopicHeader : \""\"";\r\n        },\r\n        set: function (value) {\r\n            this.json.TopicHeader = value;\r\n            this._layoutPart.properties.topicHeader = value;\r\n            if (stringIsNullOrEmpty(value)) {\r\n                this.showTopicHeader = false;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSidePage.prototype, \""title\"", {\r\n        // public get authors(): string[] {\r\n        //     return this._layoutPart.properties.authorByline;\r\n        // }\r\n        // public set authors(value: string[]) {\r\n        //     this.json.AuthorByline = value;\r\n        //     this._layoutPart.properties.authorByline = value;\r\n        //     this._layoutPart.properties.authors = null;\r\n        // }\r\n        get: function () {\r\n            return this._layoutPart.properties.title;\r\n        },\r\n        set: function (value) {\r\n            this.json.Title = value;\r\n            this._layoutPart.properties.title = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSidePage.prototype, \""layoutType\"", {\r\n        get: function () {\r\n            return this._layoutPart.properties.layoutType;\r\n        },\r\n        set: function (value) {\r\n            this._layoutPart.properties.layoutType = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSidePage.prototype, \""headerTextAlignment\"", {\r\n        get: function () {\r\n            return this._layoutPart.properties.textAlignment;\r\n        },\r\n        set: function (value) {\r\n            this._layoutPart.properties.textAlignment = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSidePage.prototype, \""showTopicHeader\"", {\r\n        get: function () {\r\n            return this._layoutPart.properties.showTopicHeader;\r\n        },\r\n        set: function (value) {\r\n            this._layoutPart.properties.showTopicHeader = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSidePage.prototype, \""showPublishDate\"", {\r\n        get: function () {\r\n            return this._layoutPart.properties.showPublishDate;\r\n        },\r\n        set: function (value) {\r\n            this._layoutPart.properties.showPublishDate = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Add a section to this page\r\n     */\r\n    ClientSidePage.prototype.addSection = function () {\r\n        var section = new CanvasSection(this, getNextOrder(this.sections));\r\n        this.sections.push(section);\r\n        return section;\r\n    };\r\n    ClientSidePage.prototype.fromJSON = function (pageData) {\r\n        this.json = pageData;\r\n        var canvasControls = JSON.parse(pageData.CanvasContent1);\r\n        var layouts = JSON.parse(pageData.LayoutWebpartsContent);\r\n        if (layouts && layouts.length > 0) {\r\n            this._layoutPart = layouts[0];\r\n        }\r\n        this.setControls(canvasControls);\r\n        return this;\r\n    };\r\n    /**\r\n     * Loads this page's content from the server\r\n     */\r\n    ClientSidePage.prototype.load = function () {\r\n        var _this = this;\r\n        // load item id, then load page data from new pages api\r\n        return this.getItem(\""Id\"", \""CommentsDisabled\"").then(function (item) {\r\n            return (new SharePointQueryable(_this, \""_api/sitepages/pages(\"" + item.Id + \"")\"")).get().then(function (pageData) {\r\n                _this.commentsDisabled = item.CommentsDisabled;\r\n                return _this.fromJSON(pageData);\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Persists the content changes (sections, columns, and controls) [does not work with batching]\r\n     *\r\n     * @param publish If true the page is published, if false the changes are persisted to SharePoint but not published\r\n     */\r\n    ClientSidePage.prototype.save = function (publish) {\r\n        var _this = this;\r\n        if (publish === void 0) { publish = true; }\r\n        if (this.json.Id === null) {\r\n            throw Error(\""The id for this page is null. If you want to create a new page, please use ClientSidePage.Create\"");\r\n        }\r\n        // we will chain our work on this promise\r\n        var promise = Promise.resolve({});\r\n        if (this._bannerImageDirty) {\r\n            // we have to do these gymnastics to set the banner image url\r\n            promise = promise.then(function (_) { return new Promise(function (resolve, reject) {\r\n                var origImgUrl = _this.json.BannerImageUrl;\r\n                if (isUrlAbsolute(origImgUrl)) {\r\n                    // do our best to make this a server relative url by removing the x.sharepoint.com part\r\n                    origImgUrl = origImgUrl.replace(/^https?:\\/\\/[a-z0-9\\.]*?\\.[a-z]{2,3}\\//i, \""/\"");\r\n                }\r\n                var site = new Site(extractWebUrl(_this.toUrl()));\r\n                var web = new Web(extractWebUrl(_this.toUrl()));\r\n                var imgFile = web.getFileByServerRelativePath(origImgUrl);\r\n                var siteId = \""\"";\r\n                var webId = \""\"";\r\n                var imgId = \""\"";\r\n                var listId = \""\"";\r\n                var webUrl = \""\"";\r\n                Promise.all([\r\n                    site.select(\""Id\"", \""Url\"").get().then(function (r) { return siteId = r.Id; }),\r\n                    web.select(\""Id\"", \""Url\"").get().then(function (r) { webId = r.Id; webUrl = r.Url; }),\r\n                    imgFile.listItemAllFields.select(\""UniqueId\"", \""ParentList/Id\"").expand(\""ParentList\"").get().then(function (r) { imgId = r.UniqueId; listId = r.ParentList.Id; }),\r\n                ]).then(function () {\r\n                    var f = new SharePointQueryable(webUrl, \""_layouts/15/getpreview.ashx\"");\r\n                    f.query.set(\""guidSite\"", \""\"" + siteId);\r\n                    f.query.set(\""guidWeb\"", \""\"" + webId);\r\n                    f.query.set(\""guidFile\"", \""\"" + imgId);\r\n                    _this.bannerImageUrl = f.toUrlAndQuery();\r\n                    if (!objectDefinedNotNull(_this._layoutPart.serverProcessedContent)) {\r\n                        _this._layoutPart.serverProcessedContent = {};\r\n                    }\r\n                    _this._layoutPart.serverProcessedContent.imageSources = { imageSource: origImgUrl };\r\n                    if (!objectDefinedNotNull(_this._layoutPart.serverProcessedContent.customMetadata)) {\r\n                        _this._layoutPart.serverProcessedContent.customMetadata = {};\r\n                    }\r\n                    _this._layoutPart.serverProcessedContent.customMetadata.imageSource = {\r\n                        listId: listId,\r\n                        siteId: siteId,\r\n                        uniqueId: imgId,\r\n                        webId: webId,\r\n                    };\r\n                    _this._layoutPart.properties.webId = webId;\r\n                    _this._layoutPart.properties.siteId = siteId;\r\n                    _this._layoutPart.properties.listId = listId;\r\n                    _this._layoutPart.properties.uniqueId = imgId;\r\n                    resolve();\r\n                }).catch(reject);\r\n            }); });\r\n        }\r\n        // we need to update our authors if they have changed\r\n        // if (this._layoutPart.properties.authors === null && this._layoutPart.properties.authorByline.length > 0) {\r\n        //     promise = promise.then(_ => new Promise(resolve => {\r\n        //         const collector: any[] = [];\r\n        //         const userResolver = ClientSidePage.getPoster(\""/_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.ClientPeoplePickerResolveUser\"");\r\n        //         this._layoutPart.properties.authorByline.forEach(async author => {\r\n        //             const userData = await userResolver.postCore({\r\n        //                 body: jsS({\r\n        //                     queryParams: {\r\n        //                         AllowEmailAddresses: false,\r\n        //                         MaximumEntitySuggestions: 1,\r\n        //                         PrincipalSource: 15,\r\n        //                         PrincipalType: 1,\r\n        //                         QueryString: author,\r\n        //                         SharePointGroupID: 0,\r\n        //                     },\r\n        //                 }),\r\n        //             });\r\n        //             collector.push({\r\n        //                 email: userData.EntityData.Email,\r\n        //                 id: userData.Key,\r\n        //                 name: userData.DisplayName,\r\n        //                 role: \""\"",\r\n        //                 upn: userData.EntityData.Email,\r\n        //             });\r\n        //         });\r\n        //         this._layoutPart.properties.authors = collector;\r\n        //         resolve();\r\n        //     }));\r\n        // }\r\n        // we try and check out the page for the user\r\n        if (!this.json.IsPageCheckedOutToCurrentUser) {\r\n            promise = promise.then(function (_) { return (ClientSidePage.initFrom(_this, \""_api/sitepages/pages(\"" + _this.json.Id + \"")/checkoutpage\"")).postCore(); });\r\n        }\r\n        promise = promise.then(function (_) {\r\n            var saveBody = Object.assign(metadata(\""SP.Publishing.SitePage\""), {\r\n                AuthorByline: _this.json.AuthorByline || [],\r\n                BannerImageUrl: _this.bannerImageUrl,\r\n                CanvasContent1: _this.getCanvasContent1(),\r\n                LayoutWebpartsContent: _this.getLayoutWebpartsContent(),\r\n                Title: _this.title,\r\n                TopicHeader: _this.topicHeader,\r\n            });\r\n            var updater = ClientSidePage.initFrom(_this, \""_api/sitepages/pages(\"" + _this.json.Id + \"")/savepage\"");\r\n            updater.configure({\r\n                headers: {\r\n                    \""if-match\"": \""*\"",\r\n                },\r\n            });\r\n            return updater.postCore({ body: jsS(saveBody) });\r\n        });\r\n        if (publish) {\r\n            promise = promise.then(function (_) { return (ClientSidePage.initFrom(_this, \""_api/sitepages/pages(\"" + _this.json.Id + \"")/publish\"")).postCore(); }).then(function (r) {\r\n                if (r) {\r\n                    _this.json.IsPageCheckedOutToCurrentUser = false;\r\n                }\r\n            });\r\n        }\r\n        promise = promise.then(function (_) {\r\n            // these are post-save actions\r\n            _this._bannerImageDirty = false;\r\n        });\r\n        return promise;\r\n    };\r\n    ClientSidePage.prototype.discardPageCheckout = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var d;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (this.json.Id === null) {\r\n                            throw Error(\""The id for this page is null. If you want to create a new page, please use ClientSidePage.Create\"");\r\n                        }\r\n                        return [4 /*yield*/, ClientSidePage.initFrom(this, \""_api/sitepages/pages(\"" + this.json.Id + \"")/discardPage\"").postCore({\r\n                                body: jsS(metadata(\""SP.Publishing.SitePage\"")),\r\n                            })];\r\n                    case 1:\r\n                        d = _a.sent();\r\n                        this.fromJSON(d);\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    ClientSidePage.prototype.promoteToNews = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                return [2 /*return*/, this.promoteNewsImpl(\""promoteToNews\"")];\r\n            });\r\n        });\r\n    };\r\n    // API is currently broken on server side\r\n    // public async demoteFromNews(): Promise<boolean> {\r\n    //     return this.promoteNewsImpl(\""demoteFromNews\"");\r\n    // }\r\n    /**\r\n     * Enables comments on this page\r\n     */\r\n    ClientSidePage.prototype.enableComments = function () {\r\n        var _this = this;\r\n        return this.setCommentsOn(true).then(function (r) {\r\n            _this.commentsDisabled = false;\r\n            return r;\r\n        });\r\n    };\r\n    /**\r\n     * Disables comments on this page\r\n     */\r\n    ClientSidePage.prototype.disableComments = function () {\r\n        var _this = this;\r\n        return this.setCommentsOn(false).then(function (r) {\r\n            _this.commentsDisabled = true;\r\n            return r;\r\n        });\r\n    };\r\n    /**\r\n     * Finds a control by the specified instance id\r\n     *\r\n     * @param id Instance id of the control to find\r\n     */\r\n    ClientSidePage.prototype.findControlById = function (id) {\r\n        return this.findControl(function (c) { return c.id === id; });\r\n    };\r\n    /**\r\n     * Finds a control within this page's control tree using the supplied predicate\r\n     *\r\n     * @param predicate Takes a control and returns true or false, if true that control is returned by findControl\r\n     */\r\n    ClientSidePage.prototype.findControl = function (predicate) {\r\n        // check all sections\r\n        for (var i = 0; i < this.sections.length; i++) {\r\n            // check all columns\r\n            for (var j = 0; j < this.sections[i].columns.length; j++) {\r\n                // check all controls\r\n                for (var k = 0; k < this.sections[i].columns[j].controls.length; k++) {\r\n                    // check to see if the predicate likes this control\r\n                    if (predicate(this.sections[i].columns[j].controls[k])) {\r\n                        return this.sections[i].columns[j].controls[k];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        // we found nothing so give nothing back\r\n        return null;\r\n    };\r\n    /**\r\n     * Like the modern site page\r\n     */\r\n    ClientSidePage.prototype.like = function () {\r\n        return this.getItem().then(function (i) {\r\n            return i.like();\r\n        });\r\n    };\r\n    /**\r\n     * Unlike the modern site page\r\n     */\r\n    ClientSidePage.prototype.unlike = function () {\r\n        return this.getItem().then(function (i) {\r\n            return i.unlike();\r\n        });\r\n    };\r\n    /**\r\n     * Get the liked by information for a modern site page\r\n     */\r\n    ClientSidePage.prototype.getLikedByInformation = function () {\r\n        return this.getItem().then(function (i) {\r\n            return i.getLikedByInformation();\r\n        });\r\n    };\r\n    /**\r\n     * Creates a copy of this page\r\n     *\r\n     * @param web The web where we will create the copy\r\n     * @param pageName The file name of the new page\r\n     * @param title The title of the new page\r\n     * @param publish If true the page will be published\r\n     */\r\n    ClientSidePage.prototype.copyPage = function (web, pageName, title, publish) {\r\n        if (publish === void 0) { publish = true; }\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var page;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, ClientSidePage.create(web, pageName, title, this.pageLayout)];\r\n                    case 1:\r\n                        page = _a.sent();\r\n                        page.setControls(this.getControls());\r\n                        return [4 /*yield*/, page.save(publish)];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [2 /*return*/, page];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Sets the modern page banner image\r\n     *\r\n     * @param url Url of the image to display\r\n     * @param altText Alt text to describe the image\r\n     * @param bannerProps Additional properties to control display of the banner\r\n     */\r\n    ClientSidePage.prototype.setBannerImage = function (url, props) {\r\n        this.bannerImageUrl = url;\r\n        this.bannerImageSourceType = 2; // this seems to always be true, so default?\r\n        if (objectDefinedNotNull(props)) {\r\n            if (hOP(props, \""translateX\"")) {\r\n                this._layoutPart.properties.translateX = props.translateX;\r\n            }\r\n            if (hOP(props, \""translateY\"")) {\r\n                this._layoutPart.properties.translateY = props.translateY;\r\n            }\r\n            if (hOP(props, \""imageSourceType\"")) {\r\n                this.bannerImageSourceType = props.imageSourceType;\r\n            }\r\n            if (hOP(props, \""altText\"")) {\r\n                this._layoutPart.properties.altText = props.altText;\r\n            }\r\n        }\r\n    };\r\n    ClientSidePage.prototype.getCanvasContent1 = function () {\r\n        return JSON.stringify(this.getControls());\r\n    };\r\n    ClientSidePage.prototype.getLayoutWebpartsContent = function () {\r\n        if (this._layoutPart) {\r\n            return JSON.stringify([this._layoutPart]);\r\n        }\r\n        else {\r\n            return JSON.stringify(null);\r\n        }\r\n    };\r\n    ClientSidePage.prototype.setControls = function (controls) {\r\n        if (controls && controls.length) {\r\n            for (var i = 0; i < controls.length; i++) {\r\n                // if no control type is present this is a column which we give type 0 to let us process it\r\n                var controlType = hOP(controls[i], \""controlType\"") ? controls[i].controlType : 0;\r\n                switch (controlType) {\r\n                    case 0:\r\n                        // empty canvas column or page settings\r\n                        if (hOP(controls[i], \""pageSettingsSlice\"")) {\r\n                            this._pageSettings = controls[i];\r\n                        }\r\n                        else {\r\n                            // we have an empty column\r\n                            this.mergeColumnToTree(new CanvasColumn(controls[i]));\r\n                        }\r\n                        break;\r\n                    case 3:\r\n                        var part = new ClientSideWebpart(controls[i]);\r\n                        this.mergePartToTree(part, part.data.position);\r\n                        break;\r\n                    case 4:\r\n                        var textData = controls[i];\r\n                        var text = new ClientSideText(textData.innerHTML, textData);\r\n                        this.mergePartToTree(text, text.data.position);\r\n                        break;\r\n                }\r\n            }\r\n            reindex(this.sections);\r\n        }\r\n    };\r\n    ClientSidePage.prototype.getControls = function () {\r\n        var _this = this;\r\n        // reindex things\r\n        reindex(this.sections);\r\n        // rollup the control changes\r\n        var canvasData = [];\r\n        this.sections.forEach(function (section) {\r\n            section.columns.forEach(function (column) {\r\n                if (column.controls.length < 1) {\r\n                    // empty column\r\n                    canvasData.push({\r\n                        displayMode: column.data.displayMode,\r\n                        emphasis: _this.getEmphasisObj(section.emphasis),\r\n                        position: column.data.position,\r\n                    });\r\n                }\r\n                else {\r\n                    column.controls.forEach(function (control) {\r\n                        control.data.emphasis = _this.getEmphasisObj(section.emphasis);\r\n                        canvasData.push(control.data);\r\n                    });\r\n                }\r\n            });\r\n        });\r\n        canvasData.push(this._pageSettings);\r\n        return canvasData;\r\n    };\r\n    ClientSidePage.prototype.getEmphasisObj = function (value) {\r\n        if (value < 1 || value > 3) {\r\n            return {};\r\n        }\r\n        return { zoneEmphasis: value };\r\n    };\r\n    /**\r\n     * Sets the comments flag for a page\r\n     *\r\n     * @param on If true comments are enabled, false they are disabled\r\n     */\r\n    ClientSidePage.prototype.setCommentsOn = function (on) {\r\n        return this.getItem().then(function (i) {\r\n            var updater = new Item(i, \""SetCommentsDisabled(\"" + !on + \"")\"");\r\n            return updater.update({});\r\n        });\r\n    };\r\n    ClientSidePage.prototype.promoteNewsImpl = function (method) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var d;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (this.json.Id === null) {\r\n                            throw Error(\""The id for this page is null. If you want to create a new page, please use ClientSidePage.Create\"");\r\n                        }\r\n                        return [4 /*yield*/, ClientSidePage.initFrom(this, \""_api/sitepages/pages(\"" + this.json.Id + \"")/\"" + method).postCore({\r\n                                body: jsS(metadata(\""SP.Publishing.SitePage\"")),\r\n                            })];\r\n                    case 1:\r\n                        d = _a.sent();\r\n                        return [2 /*return*/, d];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Merges the control into the tree of sections and columns for this page\r\n     *\r\n     * @param control The control to merge\r\n     */\r\n    ClientSidePage.prototype.mergePartToTree = function (control, positionData) {\r\n        var section = null;\r\n        var column = null;\r\n        var sectionFactor = 12;\r\n        var sectionIndex = 0;\r\n        var zoneIndex = 0;\r\n        // handle case where we don't have position data (shouldn't happen?)\r\n        if (positionData) {\r\n            if (hOP(positionData, \""zoneIndex\"")) {\r\n                zoneIndex = positionData.zoneIndex;\r\n            }\r\n            if (hOP(positionData, \""sectionIndex\"")) {\r\n                sectionIndex = positionData.sectionIndex;\r\n            }\r\n            if (hOP(positionData, \""sectionFactor\"")) {\r\n                sectionFactor = positionData.sectionFactor;\r\n            }\r\n        }\r\n        var sections = this.sections.filter(function (s) { return s.order === zoneIndex; });\r\n        if (sections.length < 1) {\r\n            section = new CanvasSection(this, zoneIndex);\r\n            this.sections.push(section);\r\n        }\r\n        else {\r\n            section = sections[0];\r\n        }\r\n        section.emphasis = control.data.emphasis && control.data.emphasis.zoneEmphasis ? control.data.emphasis.zoneEmphasis : 0;\r\n        var columns = section.columns.filter(function (c) { return c.order === sectionIndex; });\r\n        if (columns.length < 1) {\r\n            column = section.addColumn(sectionFactor);\r\n        }\r\n        else {\r\n            column = columns[0];\r\n        }\r\n        control.column = column;\r\n        column.addControl(control);\r\n    };\r\n    /**\r\n     * Merges the supplied column into the tree\r\n     *\r\n     * @param column Column to merge\r\n     * @param position The position data for the column\r\n     */\r\n    ClientSidePage.prototype.mergeColumnToTree = function (column) {\r\n        var order = hOP(column.data, \""position\"") && hOP(column.data.position, \""zoneIndex\"") ? column.data.position.zoneIndex : 0;\r\n        var section = null;\r\n        var sections = this.sections.filter(function (s) { return s.order === order; });\r\n        if (sections.length < 1) {\r\n            section = new CanvasSection(this, order);\r\n            section.emphasis = column.data.emphasis.zoneEmphasis || 0;\r\n            this.sections.push(section);\r\n        }\r\n        else {\r\n            section = sections[0];\r\n        }\r\n        column.section = section;\r\n        section.columns.push(column);\r\n    };\r\n    ClientSidePage.prototype.getItem = function () {\r\n        var _this = this;\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        var initer = ClientSidePage.initFrom(this, \""/_api/lists/EnsureClientRenderedSitePagesLibrary\"").select(\""EnableModeration\"", \""EnableMinorVersions\"", \""Id\"");\r\n        return initer.postCore().then(function (listData) {\r\n            var item = (new List(listData[\""odata.id\""])).configureFrom(_this).items.getById(_this.json.Id);\r\n            return item.select.apply(item, selects).get().then(function (d) {\r\n                return extend((new Item(odataUrlFrom(d))).configureFrom(_this), d);\r\n            });\r\n        });\r\n    };\r\n    return ClientSidePage;\r\n}(SharePointQueryable));\r\nexport { ClientSidePage };\r\nvar CanvasSection = /** @class */ (function () {\r\n    function CanvasSection(page, order, columns, _emphasis) {\r\n        if (columns === void 0) { columns = []; }\r\n        if (_emphasis === void 0) { _emphasis = 0; }\r\n        this.page = page;\r\n        this.columns = columns;\r\n        this._emphasis = _emphasis;\r\n        this._memId = getGUID();\r\n        this._order = order;\r\n    }\r\n    Object.defineProperty(CanvasSection.prototype, \""order\"", {\r\n        get: function () {\r\n            return this._order;\r\n        },\r\n        set: function (value) {\r\n            this._order = value;\r\n            for (var i = 0; i < this.columns.length; i++) {\r\n                this.columns[i].data.position.zoneIndex = value;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(CanvasSection.prototype, \""defaultColumn\"", {\r\n        /**\r\n         * Default column (this.columns[0]) for this section\r\n         */\r\n        get: function () {\r\n            if (this.columns.length < 1) {\r\n                this.addColumn(12);\r\n            }\r\n            return this.columns[0];\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds a new column to this section\r\n     */\r\n    CanvasSection.prototype.addColumn = function (factor) {\r\n        var column = new CanvasColumn();\r\n        column.section = this;\r\n        column.data.position.zoneIndex = this.order;\r\n        column.data.position.sectionFactor = factor;\r\n        column.order = getNextOrder(this.columns);\r\n        this.columns.push(column);\r\n        return column;\r\n    };\r\n    /**\r\n     * Adds a control to the default column for this section\r\n     *\r\n     * @param control Control to add to the default column\r\n     */\r\n    CanvasSection.prototype.addControl = function (control) {\r\n        this.defaultColumn.addControl(control);\r\n        return this;\r\n    };\r\n    Object.defineProperty(CanvasSection.prototype, \""emphasis\"", {\r\n        get: function () {\r\n            return this._emphasis;\r\n        },\r\n        set: function (value) {\r\n            this._emphasis = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Removes this section and all contained columns and controls from the collection\r\n     */\r\n    CanvasSection.prototype.remove = function () {\r\n        var _this = this;\r\n        this.page.sections = this.page.sections.filter(function (section) { return section._memId !== _this._memId; });\r\n        reindex(this.page.sections);\r\n    };\r\n    return CanvasSection;\r\n}());\r\nexport { CanvasSection };\r\nvar CanvasColumn = /** @class */ (function () {\r\n    function CanvasColumn(json, controls) {\r\n        if (json === void 0) { json = JSON.parse(JSON.stringify(CanvasColumn.Default)); }\r\n        if (controls === void 0) { controls = []; }\r\n        this.json = json;\r\n        this.controls = controls;\r\n        this._section = null;\r\n        this._memId = getGUID();\r\n    }\r\n    Object.defineProperty(CanvasColumn.prototype, \""data\"", {\r\n        get: function () {\r\n            return this.json;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(CanvasColumn.prototype, \""section\"", {\r\n        get: function () {\r\n            return this._section;\r\n        },\r\n        set: function (section) {\r\n            this._section = section;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(CanvasColumn.prototype, \""order\"", {\r\n        get: function () {\r\n            return this.data.position.sectionIndex;\r\n        },\r\n        set: function (value) {\r\n            this.data.position.sectionIndex = value;\r\n            for (var i = 0; i < this.controls.length; i++) {\r\n                this.controls[i].data.position.zoneIndex = this.data.position.zoneIndex;\r\n                this.controls[i].data.position.sectionIndex = value;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(CanvasColumn.prototype, \""factor\"", {\r\n        get: function () {\r\n            return this.data.position.sectionFactor;\r\n        },\r\n        set: function (value) {\r\n            this.data.position.sectionFactor = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    CanvasColumn.prototype.addControl = function (control) {\r\n        control.column = this;\r\n        this.controls.push(control);\r\n        return this;\r\n    };\r\n    CanvasColumn.prototype.getControl = function (index) {\r\n        return this.controls[index];\r\n    };\r\n    CanvasColumn.prototype.remove = function () {\r\n        var _this = this;\r\n        this.section.columns = this.section.columns.filter(function (column) { return column._memId !== _this._memId; });\r\n        reindex(this.section.columns);\r\n    };\r\n    CanvasColumn.Default = {\r\n        controlType: 0,\r\n        displayMode: 2,\r\n        emphasis: {},\r\n        position: {\r\n            layoutIndex: 1,\r\n            sectionFactor: 12,\r\n            sectionIndex: 1,\r\n            zoneIndex: 1,\r\n        },\r\n    };\r\n    return CanvasColumn;\r\n}());\r\nexport { CanvasColumn };\r\nvar ColumnControl = /** @class */ (function () {\r\n    function ColumnControl(json) {\r\n        this.json = json;\r\n    }\r\n    Object.defineProperty(ColumnControl.prototype, \""id\"", {\r\n        get: function () {\r\n            return this.json.id;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ColumnControl.prototype, \""data\"", {\r\n        get: function () {\r\n            return this.json;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ColumnControl.prototype, \""column\"", {\r\n        get: function () {\r\n            return this._column;\r\n        },\r\n        set: function (value) {\r\n            this._column = value;\r\n            this.onColumnChange(this._column);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    ColumnControl.prototype.remove = function () {\r\n        var _this = this;\r\n        this.column.controls = this.column.controls.filter(function (control) { return control.id !== _this.id; });\r\n        reindex(this.column.controls);\r\n    };\r\n    ColumnControl.prototype.setData = function (data) {\r\n        this.json = data;\r\n    };\r\n    return ColumnControl;\r\n}());\r\nexport { ColumnControl };\r\nvar ClientSideText = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientSideText, _super);\r\n    function ClientSideText(text, json) {\r\n        if (json === void 0) { json = JSON.parse(JSON.stringify(ClientSideText.Default)); }\r\n        var _this = this;\r\n        if (stringIsNullOrEmpty(json.id)) {\r\n            json.id = getGUID();\r\n            json.anchorComponentId = json.id;\r\n        }\r\n        _this = _super.call(this, json) || this;\r\n        _this.text = text;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(ClientSideText.prototype, \""text\"", {\r\n        get: function () {\r\n            return this.data.innerHTML;\r\n        },\r\n        set: function (value) {\r\n            if (!value.startsWith(\""<p>\"")) {\r\n                value = \""<p>\"" + value + \""</p>\"";\r\n            }\r\n            this.data.innerHTML = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSideText.prototype, \""order\"", {\r\n        get: function () {\r\n            return this.data.position.controlIndex;\r\n        },\r\n        set: function (value) {\r\n            this.data.position.controlIndex = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    ClientSideText.prototype.onColumnChange = function (col) {\r\n        this.data.position.sectionFactor = col.factor;\r\n        this.data.position.controlIndex = getNextOrder(col.controls);\r\n        this.data.position.zoneIndex = col.data.position.zoneIndex;\r\n        this.data.position.sectionIndex = col.order;\r\n    };\r\n    ClientSideText.Default = {\r\n        addedFromPersistedData: false,\r\n        anchorComponentId: \""\"",\r\n        controlType: 4,\r\n        displayMode: 2,\r\n        editorType: \""CKEditor\"",\r\n        emphasis: {},\r\n        id: \""\"",\r\n        innerHTML: \""\"",\r\n        position: {\r\n            controlIndex: 1,\r\n            layoutIndex: 1,\r\n            sectionFactor: 12,\r\n            sectionIndex: 1,\r\n            zoneIndex: 1,\r\n        },\r\n    };\r\n    return ClientSideText;\r\n}(ColumnControl));\r\nexport { ClientSideText };\r\nvar ClientSideWebpart = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientSideWebpart, _super);\r\n    function ClientSideWebpart(json) {\r\n        if (json === void 0) { json = JSON.parse(JSON.stringify(ClientSideWebpart.Default)); }\r\n        return _super.call(this, json) || this;\r\n    }\r\n    ClientSideWebpart.fromComponentDef = function (definition) {\r\n        var part = new ClientSideWebpart();\r\n        part.import(definition);\r\n        return part;\r\n    };\r\n    Object.defineProperty(ClientSideWebpart.prototype, \""title\"", {\r\n        get: function () {\r\n            return this.data.webPartData.title;\r\n        },\r\n        set: function (value) {\r\n            this.data.webPartData.title = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSideWebpart.prototype, \""description\"", {\r\n        get: function () {\r\n            return this.data.webPartData.description;\r\n        },\r\n        set: function (value) {\r\n            this.data.webPartData.description = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSideWebpart.prototype, \""order\"", {\r\n        get: function () {\r\n            return this.data.position.controlIndex;\r\n        },\r\n        set: function (value) {\r\n            this.data.position.controlIndex = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSideWebpart.prototype, \""height\"", {\r\n        get: function () {\r\n            return this.data.reservedHeight;\r\n        },\r\n        set: function (value) {\r\n            this.data.reservedHeight = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSideWebpart.prototype, \""width\"", {\r\n        get: function () {\r\n            return this.data.reservedWidth;\r\n        },\r\n        set: function (value) {\r\n            this.data.reservedWidth = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ClientSideWebpart.prototype, \""dataVersion\"", {\r\n        get: function () {\r\n            return this.data.webPartData.dataVersion;\r\n        },\r\n        set: function (value) {\r\n            this.data.webPartData.dataVersion = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    ClientSideWebpart.prototype.setProperties = function (properties) {\r\n        this.data.webPartData.properties = extend(this.data.webPartData.properties, properties);\r\n        return this;\r\n    };\r\n    ClientSideWebpart.prototype.getProperties = function () {\r\n        return this.data.webPartData.properties;\r\n    };\r\n    ClientSideWebpart.prototype.onColumnChange = function (col) {\r\n        this.data.position = {\r\n            controlIndex: getNextOrder(col.controls),\r\n            sectionFactor: col.factor,\r\n            sectionIndex: col.data.position.sectionIndex,\r\n            zoneIndex: col.data.position.zoneIndex,\r\n        };\r\n    };\r\n    ClientSideWebpart.prototype.import = function (component) {\r\n        var id = getGUID();\r\n        var componendId = component.Id.replace(/^\\{|\\}$/g, \""\"").toLowerCase();\r\n        var manifest = JSON.parse(component.Manifest);\r\n        var preconfiguredEntries = manifest.preconfiguredEntries[0];\r\n        this.setData(Object.assign({}, this.data, {\r\n            id: id,\r\n            webPartData: {\r\n                dataVersion: \""1.0\"",\r\n                description: preconfiguredEntries.description.default,\r\n                id: componendId,\r\n                instanceId: id,\r\n                properties: preconfiguredEntries.properties,\r\n                title: preconfiguredEntries.title.default,\r\n            },\r\n            webPartId: componendId,\r\n        }));\r\n    };\r\n    ClientSideWebpart.Default = {\r\n        addedFromPersistedData: false,\r\n        controlType: 3,\r\n        displayMode: 2,\r\n        emphasis: {},\r\n        id: null,\r\n        position: {\r\n            controlIndex: 1,\r\n            sectionFactor: 12,\r\n            sectionIndex: 1,\r\n            zoneIndex: 1,\r\n        },\r\n        reservedHeight: 500,\r\n        reservedWidth: 500,\r\n        webPartData: null,\r\n        webPartId: null,\r\n    };\r\n    return ClientSideWebpart;\r\n}(ColumnControl));\r\nexport { ClientSideWebpart };\r\n//# sourceMappingURL=clientsidepages.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Represents a Collection of comments\r\n */\r\nvar Comments = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Comments, _super);\r\n    function Comments() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Comments_1 = Comments;\r\n    /**\r\n     * Adds a new comment to this collection\r\n     *\r\n     * @param info Comment information to add\r\n     */\r\n    Comments.prototype.add = function (info) {\r\n        var _this = this;\r\n        if (typeof info === \""string\"") {\r\n            info = { text: info };\r\n        }\r\n        var postBody = jsS(extend(metadata(\""Microsoft.SharePoint.Comments.comment\""), info));\r\n        return this.clone(Comments_1, null).postCore({ body: postBody }).then(function (d) {\r\n            return extend(_this.getById(d.id), d);\r\n        });\r\n    };\r\n    /**\r\n     * Gets a comment by id\r\n     *\r\n     * @param id Id of the comment to load\r\n     */\r\n    Comments.prototype.getById = function (id) {\r\n        var c = new Comment(this);\r\n        c.concat(\""(\"" + id + \"")\"");\r\n        return c;\r\n    };\r\n    /**\r\n     * Deletes all the comments in this collection\r\n     */\r\n    Comments.prototype.clear = function () {\r\n        return this.clone(Comments_1, \""DeleteAll\"").postCore();\r\n    };\r\n    var Comments_1;\r\n    Comments = Comments_1 = tslib_1.__decorate([\r\n        defaultPath(\""comments\"")\r\n    ], Comments);\r\n    return Comments;\r\n}(SharePointQueryableCollection));\r\nexport { Comments };\r\n/**\r\n * Represents a comment\r\n */\r\nvar Comment = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Comment, _super);\r\n    function Comment() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Comment.prototype, \""replies\"", {\r\n        get: function () {\r\n            return new Replies(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Likes the comment as the current user\r\n     */\r\n    Comment.prototype.like = function () {\r\n        return this.clone(Comment, \""Like\"").postCore();\r\n    };\r\n    /**\r\n     * Unlikes the comment as the current user\r\n     */\r\n    Comment.prototype.unlike = function () {\r\n        return this.clone(Comment, \""Unlike\"").postCore();\r\n    };\r\n    /**\r\n     * Deletes this comment\r\n     */\r\n    Comment.prototype.delete = function () {\r\n        return this.deleteCore();\r\n    };\r\n    return Comment;\r\n}(SharePointQueryableInstance));\r\nexport { Comment };\r\n/**\r\n * Represents a Collection of comments\r\n */\r\nvar Replies = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Replies, _super);\r\n    function Replies() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Replies_1 = Replies;\r\n    /**\r\n     * Adds a new reply to this collection\r\n     *\r\n     * @param info Comment information to add\r\n     */\r\n    Replies.prototype.add = function (info) {\r\n        if (typeof info === \""string\"") {\r\n            info = { text: info };\r\n        }\r\n        var postBody = jsS(extend(metadata(\""Microsoft.SharePoint.Comments.comment\""), info));\r\n        return this.clone(Replies_1, null).postCore({ body: postBody }).then(function (d) {\r\n            return extend(new Comment(odataUrlFrom(d)), d);\r\n        });\r\n    };\r\n    var Replies_1;\r\n    Replies = Replies_1 = tslib_1.__decorate([\r\n        defaultPath(\""replies\"")\r\n    ], Replies);\r\n    return Replies;\r\n}(SharePointQueryableCollection));\r\nexport { Replies };\r\n//# sourceMappingURL=comments.js.map"",""import { RuntimeConfig, FetchClient, } from \""@pnp/common\"";\r\nexport function setup(config) {\r\n    RuntimeConfig.extend(config);\r\n}\r\nvar SPRuntimeConfigImpl = /** @class */ (function () {\r\n    function SPRuntimeConfigImpl() {\r\n    }\r\n    Object.defineProperty(SPRuntimeConfigImpl.prototype, \""headers\"", {\r\n        get: function () {\r\n            var spPart = RuntimeConfig.get(\""sp\"");\r\n            if (spPart !== undefined && spPart.headers !== undefined) {\r\n                return spPart.headers;\r\n            }\r\n            return {};\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRuntimeConfigImpl.prototype, \""baseUrl\"", {\r\n        get: function () {\r\n            var spPart = RuntimeConfig.get(\""sp\"");\r\n            if (spPart !== undefined && spPart.baseUrl !== undefined) {\r\n                return spPart.baseUrl;\r\n            }\r\n            if (RuntimeConfig.spfxContext !== undefined && RuntimeConfig.spfxContext !== null) {\r\n                return RuntimeConfig.spfxContext.pageContext.web.absoluteUrl;\r\n            }\r\n            return null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRuntimeConfigImpl.prototype, \""fetchClientFactory\"", {\r\n        get: function () {\r\n            var spPart = RuntimeConfig.get(\""sp\"");\r\n            if (spPart !== undefined && spPart.fetchClientFactory !== undefined) {\r\n                return spPart.fetchClientFactory;\r\n            }\r\n            else {\r\n                return function () { return new FetchClient(); };\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return SPRuntimeConfigImpl;\r\n}());\r\nexport { SPRuntimeConfigImpl };\r\nexport var SPRuntimeConfig = new SPRuntimeConfigImpl();\r\n//# sourceMappingURL=splibconfig.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of content types\r\n *\r\n */\r\nvar ContentTypes = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ContentTypes, _super);\r\n    function ContentTypes() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ContentTypes_1 = ContentTypes;\r\n    /**\r\n     * Adds an existing contenttype to a content type collection\r\n     *\r\n     * @param contentTypeId in the following format, for example: 0x010102\r\n     */\r\n    ContentTypes.prototype.addAvailableContentType = function (contentTypeId) {\r\n        var _this = this;\r\n        var postBody = jsS({\r\n            \""contentTypeId\"": contentTypeId,\r\n        });\r\n        return this.clone(ContentTypes_1, \""addAvailableContentType\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                contentType: _this.getById(data.id),\r\n                data: data,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Gets a ContentType by content type id\r\n     */\r\n    ContentTypes.prototype.getById = function (id) {\r\n        var ct = new ContentType(this);\r\n        ct.concat(\""('\"" + id + \""')\"");\r\n        return ct;\r\n    };\r\n    /**\r\n     * Adds a new content type to the collection\r\n     *\r\n     * @param id The desired content type id for the new content type (also determines the parent content type)\r\n     * @param name The name of the content type\r\n     * @param description The description of the content type\r\n     * @param group The group in which to add the content type\r\n     * @param additionalSettings Any additional settings to provide when creating the content type\r\n     *\r\n     */\r\n    ContentTypes.prototype.add = function (id, name, description, group, additionalSettings) {\r\n        var _this = this;\r\n        if (description === void 0) { description = \""\""; }\r\n        if (group === void 0) { group = \""Custom Content Types\""; }\r\n        if (additionalSettings === void 0) { additionalSettings = {}; }\r\n        var postBody = jsS(Object.assign(metadata(\""SP.ContentType\""), {\r\n            \""Description\"": description,\r\n            \""Group\"": group,\r\n            \""Id\"": { \""StringValue\"": id },\r\n            \""Name\"": name,\r\n        }, additionalSettings));\r\n        return this.postCore({ body: postBody }).then(function (data) {\r\n            return { contentType: _this.getById(data.id), data: data };\r\n        });\r\n    };\r\n    var ContentTypes_1;\r\n    ContentTypes = ContentTypes_1 = tslib_1.__decorate([\r\n        defaultPath(\""contenttypes\"")\r\n    ], ContentTypes);\r\n    return ContentTypes;\r\n}(SharePointQueryableCollection));\r\nexport { ContentTypes };\r\n/**\r\n * Describes a single ContentType instance\r\n *\r\n */\r\nvar ContentType = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ContentType, _super);\r\n    function ContentType() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Delete this content type\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(ContentType.prototype, \""fieldLinks\"", {\r\n        /**\r\n         * Gets the column (also known as field) references in the content type.\r\n        */\r\n        get: function () {\r\n            return new FieldLinks(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ContentType.prototype, \""fields\"", {\r\n        /**\r\n         * Gets a value that specifies the collection of fields for the content type.\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""fields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ContentType.prototype, \""parent\"", {\r\n        /**\r\n         * Gets the parent content type of the content type.\r\n         */\r\n        get: function () {\r\n            return new ContentType(this, \""parent\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ContentType.prototype, \""workflowAssociations\"", {\r\n        /**\r\n         * Gets a value that specifies the collection of workflow associations for the content type.\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""workflowAssociations\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return ContentType;\r\n}(SharePointQueryableInstance));\r\nexport { ContentType };\r\n/**\r\n * Represents a collection of field link instances\r\n */\r\nvar FieldLinks = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FieldLinks, _super);\r\n    function FieldLinks() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a FieldLink by GUID id\r\n     *\r\n     * @param id The GUID id of the field link\r\n     */\r\n    FieldLinks.prototype.getById = function (id) {\r\n        var fl = new FieldLink(this);\r\n        fl.concat(\""(guid'\"" + id + \""')\"");\r\n        return fl;\r\n    };\r\n    FieldLinks = tslib_1.__decorate([\r\n        defaultPath(\""fieldlinks\"")\r\n    ], FieldLinks);\r\n    return FieldLinks;\r\n}(SharePointQueryableCollection));\r\nexport { FieldLinks };\r\n/**\r\n * Represents a field link instance\r\n */\r\nvar FieldLink = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FieldLink, _super);\r\n    function FieldLink() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return FieldLink;\r\n}(SharePointQueryableInstance));\r\nexport { FieldLink };\r\n//# sourceMappingURL=contenttypes.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\n/**\r\n * Describes a collection of List objects\r\n *\r\n */\r\nvar Features = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Features, _super);\r\n    function Features() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Features_1 = Features;\r\n    /**\r\n     * Adds a new list to the collection\r\n     *\r\n     * @param id The Id of the feature (GUID)\r\n     * @param force If true the feature activation will be forced\r\n     */\r\n    Features.prototype.add = function (id, force) {\r\n        var _this = this;\r\n        if (force === void 0) { force = false; }\r\n        return this.clone(Features_1, \""add\"").postCore({\r\n            body: jsS({\r\n                featdefScope: 0,\r\n                featureId: id,\r\n                force: force,\r\n            }),\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                feature: _this.getById(id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list from the collection by guid id\r\n     *\r\n     * @param id The Id of the feature (GUID)\r\n     */\r\n    Features.prototype.getById = function (id) {\r\n        var feature = new Feature(this);\r\n        feature.concat(\""('\"" + id + \""')\"");\r\n        return feature;\r\n    };\r\n    /**\r\n     * Removes (deactivates) a feature from the collection\r\n     *\r\n     * @param id The Id of the feature (GUID)\r\n     * @param force If true the feature deactivation will be forced\r\n     */\r\n    Features.prototype.remove = function (id, force) {\r\n        if (force === void 0) { force = false; }\r\n        return this.clone(Features_1, \""remove\"").postCore({\r\n            body: jsS({\r\n                featureId: id,\r\n                force: force,\r\n            }),\r\n        });\r\n    };\r\n    var Features_1;\r\n    Features = Features_1 = tslib_1.__decorate([\r\n        defaultPath(\""features\"")\r\n    ], Features);\r\n    return Features;\r\n}(SharePointQueryableCollection));\r\nexport { Features };\r\nvar Feature = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Feature, _super);\r\n    function Feature() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Removes (deactivates) a feature from the collection\r\n     *\r\n     * @param force If true the feature deactivation will be forced\r\n     */\r\n    Feature.prototype.deactivate = function (force) {\r\n        var _this = this;\r\n        if (force === void 0) { force = false; }\r\n        var removeDependency = this.addBatchDependency();\r\n        var idGet = new Feature(this).select(\""DefinitionId\"");\r\n        return idGet.get().then(function (feature) {\r\n            var promise = _this.getParent(Features, _this.parentUrl, \""\"", _this.batch).remove(feature.DefinitionId, force);\r\n            removeDependency();\r\n            return promise;\r\n        });\r\n    };\r\n    return Feature;\r\n}(SharePointQueryableInstance));\r\nexport { Feature };\r\n//# sourceMappingURL=features.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { DateTimeFieldFormatType, DateTimeFieldFriendlyFormatType, FieldTypes, CalendarType, UrlFieldFormatType, ChoiceFieldFormatType, } from \""./types\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of Field objects\r\n *\r\n */\r\nvar Fields = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Fields, _super);\r\n    function Fields() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Fields_1 = Fields;\r\n    /**\r\n     * Gets a field from the collection by id\r\n     *\r\n     * @param id The Id of the list\r\n     */\r\n    Fields.prototype.getById = function (id) {\r\n        var f = new Field(this);\r\n        f.concat(\""('\"" + id + \""')\"");\r\n        return f;\r\n    };\r\n    /**\r\n     * Gets a field from the collection by title\r\n     *\r\n     * @param title The case-sensitive title of the field\r\n     */\r\n    Fields.prototype.getByTitle = function (title) {\r\n        return new Field(this, \""getByTitle('\"" + title + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a field from the collection by using internal name or title\r\n     *\r\n     * @param name The case-sensitive internal name or title of the field\r\n     */\r\n    Fields.prototype.getByInternalNameOrTitle = function (name) {\r\n        return new Field(this, \""getByInternalNameOrTitle('\"" + name + \""')\"");\r\n    };\r\n    /**\r\n     * Creates a field based on the specified schema\r\n     */\r\n    Fields.prototype.createFieldAsXml = function (xml) {\r\n        var _this = this;\r\n        var info;\r\n        if (typeof xml === \""string\"") {\r\n            info = { SchemaXml: xml };\r\n        }\r\n        else {\r\n            info = xml;\r\n        }\r\n        var postBody = jsS({\r\n            \""parameters\"": extend(metadata(\""SP.XmlSchemaFieldCreationInformation\""), info),\r\n        });\r\n        return this.clone(Fields_1, \""createfieldasxml\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new field to the collection\r\n     *\r\n     * @param title The new field's title\r\n     * @param fieldType The new field's type (ex: SP.FieldText)\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.add = function (title, fieldType, properties) {\r\n        var _this = this;\r\n        var postBody = jsS(Object.assign(metadata(fieldType), {\r\n            \""Title\"": title,\r\n        }, properties));\r\n        return this.clone(Fields_1, null).postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldText to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param maxLength The maximum number of characters allowed in the value of the field.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addText = function (title, maxLength, properties) {\r\n        if (maxLength === void 0) { maxLength = 255; }\r\n        var props = {\r\n            FieldTypeKind: 2,\r\n            MaxLength: maxLength,\r\n        };\r\n        return this.add(title, \""SP.FieldText\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldCalculated to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param formula The formula for the field.\r\n     * @param dateFormat The date and time format that is displayed in the field.\r\n     * @param outputType Specifies the output format for the field. Represents a FieldType value.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addCalculated = function (title, formula, dateFormat, outputType, properties) {\r\n        if (outputType === void 0) { outputType = FieldTypes.Text; }\r\n        var props = {\r\n            DateFormat: dateFormat,\r\n            FieldTypeKind: 17,\r\n            Formula: formula,\r\n            OutputType: outputType,\r\n        };\r\n        return this.add(title, \""SP.FieldCalculated\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldDateTime to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param displayFormat The format of the date and time that is displayed in the field.\r\n     * @param calendarType Specifies the calendar type of the field.\r\n     * @param friendlyDisplayFormat The type of friendly display format that is used in the field.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addDateTime = function (title, displayFormat, calendarType, friendlyDisplayFormat, properties) {\r\n        if (displayFormat === void 0) { displayFormat = DateTimeFieldFormatType.DateOnly; }\r\n        if (calendarType === void 0) { calendarType = CalendarType.Gregorian; }\r\n        if (friendlyDisplayFormat === void 0) { friendlyDisplayFormat = DateTimeFieldFriendlyFormatType.Unspecified; }\r\n        var props = {\r\n            DateTimeCalendarType: calendarType,\r\n            DisplayFormat: displayFormat,\r\n            FieldTypeKind: 4,\r\n            FriendlyDisplayFormat: friendlyDisplayFormat,\r\n        };\r\n        return this.add(title, \""SP.FieldDateTime\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldNumber to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param minValue The field's minimum value\r\n     * @param maxValue The field's maximum value\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addNumber = function (title, minValue, maxValue, properties) {\r\n        var props = { FieldTypeKind: 9 };\r\n        if (minValue !== undefined) {\r\n            props = extend({ MinimumValue: minValue }, props);\r\n        }\r\n        if (maxValue !== undefined) {\r\n            props = extend({ MaximumValue: maxValue }, props);\r\n        }\r\n        return this.add(title, \""SP.FieldNumber\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldCurrency to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param minValue The field's minimum value\r\n     * @param maxValue The field's maximum value\r\n     * @param currencyLocalId Specifies the language code identifier (LCID) used to format the value of the field\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addCurrency = function (title, minValue, maxValue, currencyLocalId, properties) {\r\n        if (currencyLocalId === void 0) { currencyLocalId = 1033; }\r\n        var props = {\r\n            CurrencyLocaleId: currencyLocalId,\r\n            FieldTypeKind: 10,\r\n        };\r\n        if (minValue !== undefined) {\r\n            props = extend({ MinimumValue: minValue }, props);\r\n        }\r\n        if (maxValue !== undefined) {\r\n            props = extend({ MaximumValue: maxValue }, props);\r\n        }\r\n        return this.add(title, \""SP.FieldCurrency\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldMultiLineText to the collection\r\n     *\r\n     * @param title The field title\r\n     * @param numberOfLines Specifies the number of lines of text to display for the field.\r\n     * @param richText Specifies whether the field supports rich formatting.\r\n     * @param restrictedMode Specifies whether the field supports a subset of rich formatting.\r\n     * @param appendOnly Specifies whether all changes to the value of the field are displayed in list forms.\r\n     * @param allowHyperlink Specifies whether a hyperlink is allowed as a value of the field.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     *\r\n     */\r\n    Fields.prototype.addMultilineText = function (title, numberOfLines, richText, restrictedMode, appendOnly, allowHyperlink, properties) {\r\n        if (numberOfLines === void 0) { numberOfLines = 6; }\r\n        if (richText === void 0) { richText = true; }\r\n        if (restrictedMode === void 0) { restrictedMode = false; }\r\n        if (appendOnly === void 0) { appendOnly = false; }\r\n        if (allowHyperlink === void 0) { allowHyperlink = true; }\r\n        var props = {\r\n            AllowHyperlink: allowHyperlink,\r\n            AppendOnly: appendOnly,\r\n            FieldTypeKind: 3,\r\n            NumberOfLines: numberOfLines,\r\n            RestrictedMode: restrictedMode,\r\n            RichText: richText,\r\n        };\r\n        return this.add(title, \""SP.FieldMultiLineText\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldUrl to the collection\r\n     *\r\n     * @param title The field title\r\n     */\r\n    Fields.prototype.addUrl = function (title, displayFormat, properties) {\r\n        if (displayFormat === void 0) { displayFormat = UrlFieldFormatType.Hyperlink; }\r\n        var props = {\r\n            DisplayFormat: displayFormat,\r\n            FieldTypeKind: 11,\r\n        };\r\n        return this.add(title, \""SP.FieldUrl\"", extend(props, properties));\r\n    };\r\n    /** Adds a user field to the colleciton\r\n    *\r\n    * @param title The new field's title\r\n    * @param selectionMode The selection mode of the field\r\n    * @param selectionGroup Value that specifies the identifier of the SharePoint group whose members can be selected as values of the field\r\n    * @param properties\r\n    */\r\n    Fields.prototype.addUser = function (title, selectionMode, properties) {\r\n        var props = {\r\n            FieldTypeKind: 20,\r\n            SelectionMode: selectionMode,\r\n        };\r\n        return this.add(title, \""SP.FieldUser\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a SP.FieldLookup to the collection\r\n     *\r\n     * @param title The new field's title\r\n     * @param lookupListId The guid id of the list where the source of the lookup is found\r\n     * @param lookupFieldName The internal name of the field in the source list\r\n     * @param properties Set of additional properties to set on the new field\r\n     */\r\n    Fields.prototype.addLookup = function (title, lookupListId, lookupFieldName, properties) {\r\n        var _this = this;\r\n        var props = extend({\r\n            FieldTypeKind: 7,\r\n            LookupFieldName: lookupFieldName,\r\n            LookupListId: lookupListId,\r\n            Title: title,\r\n        }, properties);\r\n        var postBody = jsS({\r\n            \""parameters\"": extend(metadata(\""SP.FieldCreationInformation\""), props),\r\n        });\r\n        return this.clone(Fields_1, \""addfield\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldChoice to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param choices The choices for the field.\r\n     * @param format The display format of the available options for the field.\r\n     * @param fillIn Specifies whether the field allows fill-in values.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addChoice = function (title, choices, format, fillIn, properties) {\r\n        if (format === void 0) { format = ChoiceFieldFormatType.Dropdown; }\r\n        var props = {\r\n            Choices: {\r\n                results: choices,\r\n            },\r\n            EditFormat: format,\r\n            FieldTypeKind: 6,\r\n            FillInChoice: fillIn,\r\n        };\r\n        return this.add(title, \""SP.FieldChoice\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldMultiChoice to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param choices The choices for the field.\r\n     * @param fillIn Specifies whether the field allows fill-in values.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addMultiChoice = function (title, choices, fillIn, properties) {\r\n        var props = {\r\n            Choices: {\r\n                results: choices,\r\n            },\r\n            FieldTypeKind: 15,\r\n            FillInChoice: fillIn,\r\n        };\r\n        return this.add(title, \""SP.FieldMultiChoice\"", extend(props, properties));\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldBoolean to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addBoolean = function (title, properties) {\r\n        var props = {\r\n            FieldTypeKind: 8,\r\n        };\r\n        return this.add(title, \""SP.Field\"", extend(props, properties));\r\n    };\r\n    /**\r\n    * Creates a secondary (dependent) lookup field, based on the Id of the primary lookup field.\r\n    *\r\n    * @param displayName The display name of the new field.\r\n    * @param primaryLookupFieldId The guid of the primary Lookup Field.\r\n    * @param showField Which field to show from the lookup list.\r\n    */\r\n    Fields.prototype.addDependentLookupField = function (displayName, primaryLookupFieldId, showField) {\r\n        var _this = this;\r\n        return this.clone(Fields_1, \""adddependentlookupfield(displayName='\"" + displayName + \""', primarylookupfieldid='\"" + primaryLookupFieldId + \""', showfield='\"" + showField + \""')\"")\r\n            .postCore()\r\n            .then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new SP.FieldLocation to the collection\r\n     *\r\n     * @param title The field title.\r\n     * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx)\r\n     */\r\n    Fields.prototype.addLocation = function (title, properties) {\r\n        var props = { FieldTypeKind: 33 };\r\n        return this.add(title, \""SP.FieldLocation\"", extend(props, properties));\r\n    };\r\n    var Fields_1;\r\n    Fields = Fields_1 = tslib_1.__decorate([\r\n        defaultPath(\""fields\"")\r\n    ], Fields);\r\n    return Fields;\r\n}(SharePointQueryableCollection));\r\nexport { Fields };\r\n/**\r\n * Describes a single of Field instance\r\n *\r\n */\r\nvar Field = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Field, _super);\r\n    function Field() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Delete this fields\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Updates this field intance with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the list\r\n     * @param fieldType The type value, required to update child field type properties\r\n     */\r\n    Field.prototype.update = function (properties, fieldType) {\r\n        var _this = this;\r\n        if (fieldType === void 0) { fieldType = \""SP.Field\""; }\r\n        var postBody = jsS(extend(metadata(fieldType), properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                field: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Sets the value of the ShowInDisplayForm property for this field.\r\n     */\r\n    Field.prototype.setShowInDisplayForm = function (show) {\r\n        return this.clone(Field, \""setshowindisplayform(\"" + show + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Sets the value of the ShowInEditForm property for this field.\r\n     */\r\n    Field.prototype.setShowInEditForm = function (show) {\r\n        return this.clone(Field, \""setshowineditform(\"" + show + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Sets the value of the ShowInNewForm property for this field.\r\n     */\r\n    Field.prototype.setShowInNewForm = function (show) {\r\n        return this.clone(Field, \""setshowinnewform(\"" + show + \"")\"").postCore();\r\n    };\r\n    return Field;\r\n}(SharePointQueryableInstance));\r\nexport { Field };\r\n//# sourceMappingURL=fields.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { TextParser, BlobParser, JSONParser, BufferParser } from \""@pnp/odata\"";\r\nimport { extend, getGUID } from \""@pnp/common\"";\r\nimport { LimitedWebPartManager } from \""./webparts\"";\r\nimport { Item } from \""./items\"";\r\nimport { SharePointQueryableShareableFile } from \""./sharepointqueryableshareable\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\n/**\r\n * Describes a collection of File objects\r\n *\r\n */\r\nvar Files = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Files, _super);\r\n    function Files() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Files_1 = Files;\r\n    /**\r\n     * Gets a File by filename\r\n     *\r\n     * @param name The name of the file, including extension.\r\n     */\r\n    Files.prototype.getByName = function (name) {\r\n        var f = new File(this);\r\n        f.concat(\""('\"" + name + \""')\"");\r\n        return f;\r\n    };\r\n    /**\r\n     * Uploads a file. Not supported for batching\r\n     *\r\n     * @param url The folder-relative url of the file.\r\n     * @param content The file contents blob.\r\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true)\r\n     * @returns The new File and the raw response.\r\n     */\r\n    Files.prototype.add = function (url, content, shouldOverWrite) {\r\n        var _this = this;\r\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\r\n        return new Files_1(this, \""add(overwrite=\"" + shouldOverWrite + \"",url='\"" + url + \""')\"")\r\n            .postCore({\r\n            body: content,\r\n        }).then(function (response) {\r\n            return {\r\n                data: response,\r\n                file: _this.getByName(url),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Uploads a file. Not supported for batching\r\n     *\r\n     * @param url The folder-relative url of the file.\r\n     * @param content The Blob file content to add\r\n     * @param progress A callback function which can be used to track the progress of the upload\r\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true)\r\n     * @param chunkSize The size of each file slice, in bytes (default: 10485760)\r\n     * @returns The new File and the raw response.\r\n     */\r\n    Files.prototype.addChunked = function (url, content, progress, shouldOverWrite, chunkSize) {\r\n        var _this = this;\r\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\r\n        if (chunkSize === void 0) { chunkSize = 10485760; }\r\n        var adder = this.clone(Files_1, \""add(overwrite=\"" + shouldOverWrite + \"",url='\"" + url + \""')\"", false);\r\n        return adder.postCore()\r\n            .then(function () { return _this.getByName(url); })\r\n            .then(function (file) { return file.setContentChunked(content, progress, chunkSize); });\r\n    };\r\n    /**\r\n     * Adds a ghosted file to an existing list or document library. Not supported for batching.\r\n     *\r\n     * @param fileUrl The server-relative url where you want to save the file.\r\n     * @param templateFileType The type of use to create the file.\r\n     * @returns The template file that was added and the raw response.\r\n     */\r\n    Files.prototype.addTemplateFile = function (fileUrl, templateFileType) {\r\n        var _this = this;\r\n        return this.clone(Files_1, \""addTemplateFile(urloffile='\"" + fileUrl + \""',templatefiletype=\"" + templateFileType + \"")\"", false)\r\n            .postCore().then(function (response) {\r\n            return {\r\n                data: response,\r\n                file: _this.getByName(fileUrl),\r\n            };\r\n        });\r\n    };\r\n    var Files_1;\r\n    Files = Files_1 = tslib_1.__decorate([\r\n        defaultPath(\""files\"")\r\n    ], Files);\r\n    return Files;\r\n}(SharePointQueryableCollection));\r\nexport { Files };\r\n/**\r\n * Describes a single File instance\r\n *\r\n */\r\nvar File = /** @class */ (function (_super) {\r\n    tslib_1.__extends(File, _super);\r\n    function File() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(File.prototype, \""listItemAllFields\"", {\r\n        /**\r\n         * Gets a value that specifies the list item field values for the list item corresponding to the file.\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""listItemAllFields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(File.prototype, \""versions\"", {\r\n        /**\r\n         * Gets a collection of versions\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Versions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Approves the file submitted for content approval with the specified comment.\r\n     * Only documents in lists that are enabled for content approval can be approved.\r\n     *\r\n     * @param comment The comment for the approval.\r\n     */\r\n    File.prototype.approve = function (comment) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        return this.clone(File, \""approve(comment='\"" + comment + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Stops the chunk upload session without saving the uploaded data. Does not support batching.\r\n     * If the file doesn’t already exist in the library, the partially uploaded file will be deleted.\r\n     * Use this in response to user action (as in a request to cancel an upload) or an error or exception.\r\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\r\n     * This method is currently available only on Office 365.\r\n     *\r\n     * @param uploadId The unique identifier of the upload session.\r\n     */\r\n    File.prototype.cancelUpload = function (uploadId) {\r\n        return this.clone(File, \""cancelUpload(uploadId=guid'\"" + uploadId + \""')\"", false).postCore();\r\n    };\r\n    /**\r\n     * Checks the file in to a document library based on the check-in type.\r\n     *\r\n     * @param comment A comment for the check-in. Its length must be <= 1023.\r\n     * @param checkinType The check-in type for the file.\r\n     */\r\n    File.prototype.checkin = function (comment, checkinType) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        if (checkinType === void 0) { checkinType = CheckinType.Major; }\r\n        if (comment.length > 1023) {\r\n            throw Error(\""The maximum comment length is 1023 characters.\"");\r\n        }\r\n        return this.clone(File, \""checkin(comment='\"" + comment + \""',checkintype=\"" + checkinType + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Checks out the file from a document library.\r\n     */\r\n    File.prototype.checkout = function () {\r\n        return this.clone(File, \""checkout\"").postCore();\r\n    };\r\n    /**\r\n     * Copies the file to the destination url.\r\n     *\r\n     * @param url The absolute url or server relative url of the destination file path to copy to.\r\n     * @param shouldOverWrite Should a file with the same name in the same location be overwritten?\r\n     */\r\n    File.prototype.copyTo = function (url, shouldOverWrite) {\r\n        if (shouldOverWrite === void 0) { shouldOverWrite = true; }\r\n        return this.clone(File, \""copyTo(strnewurl='\"" + url + \""',boverwrite=\"" + shouldOverWrite + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Delete this file.\r\n     *\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    File.prototype.delete = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.clone(File, null).postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Denies approval for a file that was submitted for content approval.\r\n     * Only documents in lists that are enabled for content approval can be denied.\r\n     *\r\n     * @param comment The comment for the denial.\r\n     */\r\n    File.prototype.deny = function (comment) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        if (comment.length > 1023) {\r\n            throw Error(\""The maximum comment length is 1023 characters.\"");\r\n        }\r\n        return this.clone(File, \""deny(comment='\"" + comment + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Specifies the control set used to access, modify, or add Web Parts associated with this Web Part Page and view.\r\n     * An exception is thrown if the file is not an ASPX page.\r\n     *\r\n     * @param scope The WebPartsPersonalizationScope view on the Web Parts page.\r\n     */\r\n    File.prototype.getLimitedWebPartManager = function (scope) {\r\n        if (scope === void 0) { scope = WebPartsPersonalizationScope.Shared; }\r\n        return new LimitedWebPartManager(this, \""getLimitedWebPartManager(scope=\"" + scope + \"")\"");\r\n    };\r\n    /**\r\n     * Moves the file to the specified destination url.\r\n     *\r\n     * @param url The absolute url or server relative url of the destination file path to move to.\r\n     * @param moveOperations The bitwise MoveOperations value for how to move the file.\r\n     */\r\n    File.prototype.moveTo = function (url, moveOperations) {\r\n        if (moveOperations === void 0) { moveOperations = MoveOperations.Overwrite; }\r\n        return this.clone(File, \""moveTo(newurl='\"" + url + \""',flags=\"" + moveOperations + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Submits the file for content approval with the specified comment.\r\n     *\r\n     * @param comment The comment for the published file. Its length must be <= 1023.\r\n     */\r\n    File.prototype.publish = function (comment) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        if (comment.length > 1023) {\r\n            throw Error(\""The maximum comment length is 1023 characters.\"");\r\n        }\r\n        return this.clone(File, \""publish(comment='\"" + comment + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Moves the file to the Recycle Bin and returns the identifier of the new Recycle Bin item.\r\n     *\r\n     * @returns The GUID of the recycled file.\r\n     */\r\n    File.prototype.recycle = function () {\r\n        return this.clone(File, \""recycle\"").postCore();\r\n    };\r\n    /**\r\n     * Reverts an existing checkout for the file.\r\n     *\r\n     */\r\n    File.prototype.undoCheckout = function () {\r\n        return this.clone(File, \""undoCheckout\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the file from content approval or unpublish a major version.\r\n     *\r\n     * @param comment The comment for the unpublish operation. Its length must be <= 1023.\r\n     */\r\n    File.prototype.unpublish = function (comment) {\r\n        if (comment === void 0) { comment = \""\""; }\r\n        if (comment.length > 1023) {\r\n            throw Error(\""The maximum comment length is 1023 characters.\"");\r\n        }\r\n        return this.clone(File, \""unpublish(comment='\"" + comment + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Gets the contents of the file as text. Not supported in batching.\r\n     *\r\n     */\r\n    File.prototype.getText = function () {\r\n        return this.clone(File, \""$value\"", false).get(new TextParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\r\n    };\r\n    /**\r\n     * Gets the contents of the file as a blob, does not work in Node.js. Not supported in batching.\r\n     *\r\n     */\r\n    File.prototype.getBlob = function () {\r\n        return this.clone(File, \""$value\"", false).get(new BlobParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\r\n    };\r\n    /**\r\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js. Not supported in batching.\r\n     */\r\n    File.prototype.getBuffer = function () {\r\n        return this.clone(File, \""$value\"", false).get(new BufferParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\r\n    };\r\n    /**\r\n     * Gets the contents of a file as an ArrayBuffer, works in Node.js. Not supported in batching.\r\n     */\r\n    File.prototype.getJSON = function () {\r\n        return this.clone(File, \""$value\"", false).get(new JSONParser(), { headers: { \""binaryStringResponseBody\"": \""true\"" } });\r\n    };\r\n    /**\r\n     * Sets the content of a file, for large files use setContentChunked. Not supported in batching.\r\n     *\r\n     * @param content The file content\r\n     *\r\n     */\r\n    File.prototype.setContent = function (content) {\r\n        var _this = this;\r\n        return this.clone(File, \""$value\"", false).postCore({\r\n            body: content,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""PUT\"",\r\n            },\r\n        }).then(function (_) { return new File(_this); });\r\n    };\r\n    /**\r\n     * Gets the associated list item for this folder, loading the default properties\r\n     */\r\n    File.prototype.getItem = function () {\r\n        var _this = this;\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        var q = this.listItemAllFields;\r\n        return q.select.apply(q, selects).get().then(function (d) {\r\n            return extend((new Item(odataUrlFrom(d))).configureFrom(_this), d);\r\n        });\r\n    };\r\n    /**\r\n     * Sets the contents of a file using a chunked upload approach. Not supported in batching.\r\n     *\r\n     * @param file The file to upload\r\n     * @param progress A callback function which can be used to track the progress of the upload\r\n     * @param chunkSize The size of each file slice, in bytes (default: 10485760)\r\n     */\r\n    File.prototype.setContentChunked = function (file, progress, chunkSize) {\r\n        var _this = this;\r\n        if (chunkSize === void 0) { chunkSize = 10485760; }\r\n        if (progress === undefined) {\r\n            progress = function () { return null; };\r\n        }\r\n        var fileSize = file.size;\r\n        var blockCount = parseInt((file.size / chunkSize).toString(), 10) + ((file.size % chunkSize === 0) ? 1 : 0);\r\n        var uploadId = getGUID();\r\n        // start the chain with the first fragment\r\n        progress({ uploadId: uploadId, blockNumber: 1, chunkSize: chunkSize, currentPointer: 0, fileSize: fileSize, stage: \""starting\"", totalBlocks: blockCount });\r\n        var chain = this.startUpload(uploadId, file.slice(0, chunkSize));\r\n        var _loop_1 = function (i) {\r\n            chain = chain.then(function (pointer) {\r\n                progress({ uploadId: uploadId, blockNumber: i, chunkSize: chunkSize, currentPointer: pointer, fileSize: fileSize, stage: \""continue\"", totalBlocks: blockCount });\r\n                return _this.continueUpload(uploadId, pointer, file.slice(pointer, pointer + chunkSize));\r\n            });\r\n        };\r\n        // skip the first and last blocks\r\n        for (var i = 2; i < blockCount; i++) {\r\n            _loop_1(i);\r\n        }\r\n        return chain.then(function (pointer) {\r\n            progress({ uploadId: uploadId, blockNumber: blockCount, chunkSize: chunkSize, currentPointer: pointer, fileSize: fileSize, stage: \""finishing\"", totalBlocks: blockCount });\r\n            return _this.finishUpload(uploadId, pointer, file.slice(pointer));\r\n        });\r\n    };\r\n    /**\r\n     * Starts a new chunk upload session and uploads the first fragment.\r\n     * The current file content is not changed when this method completes.\r\n     * The method is idempotent (and therefore does not change the result) as long as you use the same values for uploadId and stream.\r\n     * The upload session ends either when you use the CancelUpload method or when you successfully\r\n     * complete the upload session by passing the rest of the file contents through the ContinueUpload and FinishUpload methods.\r\n     * The StartUpload and ContinueUpload methods return the size of the running total of uploaded data in bytes,\r\n     * so you can pass those return values to subsequent uses of ContinueUpload and FinishUpload.\r\n     * This method is currently available only on Office 365.\r\n     *\r\n     * @param uploadId The unique identifier of the upload session.\r\n     * @param fragment The file contents.\r\n     * @returns The size of the total uploaded data in bytes.\r\n     */\r\n    File.prototype.startUpload = function (uploadId, fragment) {\r\n        return this.clone(File, \""startUpload(uploadId=guid'\"" + uploadId + \""')\"", false)\r\n            .postCore({ body: fragment })\r\n            .then(function (n) {\r\n            // When OData=verbose the payload has the following shape:\r\n            // { StartUpload: \""10485760\"" }\r\n            if (typeof n === \""object\"") {\r\n                n = n.StartUpload;\r\n            }\r\n            return parseFloat(n);\r\n        });\r\n    };\r\n    /**\r\n     * Continues the chunk upload session with an additional fragment.\r\n     * The current file content is not changed.\r\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\r\n     * This method is currently available only on Office 365.\r\n     *\r\n     * @param uploadId The unique identifier of the upload session.\r\n     * @param fileOffset The size of the offset into the file where the fragment starts.\r\n     * @param fragment The file contents.\r\n     * @returns The size of the total uploaded data in bytes.\r\n     */\r\n    File.prototype.continueUpload = function (uploadId, fileOffset, fragment) {\r\n        return this.clone(File, \""continueUpload(uploadId=guid'\"" + uploadId + \""',fileOffset=\"" + fileOffset + \"")\"", false)\r\n            .postCore({ body: fragment })\r\n            .then(function (n) {\r\n            // When OData=verbose the payload has the following shape:\r\n            // { ContinueUpload: \""20971520\"" }\r\n            if (typeof n === \""object\"") {\r\n                n = n.ContinueUpload;\r\n            }\r\n            return parseFloat(n);\r\n        });\r\n    };\r\n    /**\r\n     * Uploads the last file fragment and commits the file. The current file content is changed when this method completes.\r\n     * Use the uploadId value that was passed to the StartUpload method that started the upload session.\r\n     * This method is currently available only on Office 365.\r\n     *\r\n     * @param uploadId The unique identifier of the upload session.\r\n     * @param fileOffset The size of the offset into the file where the fragment starts.\r\n     * @param fragment The file contents.\r\n     * @returns The newly uploaded file.\r\n     */\r\n    File.prototype.finishUpload = function (uploadId, fileOffset, fragment) {\r\n        return this.clone(File, \""finishUpload(uploadId=guid'\"" + uploadId + \""',fileOffset=\"" + fileOffset + \"")\"", false)\r\n            .postCore({ body: fragment })\r\n            .then(function (response) {\r\n            return {\r\n                data: response,\r\n                file: new File(odataUrlFrom(response)),\r\n            };\r\n        });\r\n    };\r\n    return File;\r\n}(SharePointQueryableShareableFile));\r\nexport { File };\r\n/**\r\n * Describes a collection of Version objects\r\n *\r\n */\r\nvar Versions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Versions, _super);\r\n    function Versions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Versions_1 = Versions;\r\n    /**\r\n     * Gets a version by id\r\n     *\r\n     * @param versionId The id of the version to retrieve\r\n     */\r\n    Versions.prototype.getById = function (versionId) {\r\n        var v = new Version(this);\r\n        v.concat(\""(\"" + versionId + \"")\"");\r\n        return v;\r\n    };\r\n    /**\r\n     * Deletes all the file version objects in the collection.\r\n     *\r\n     */\r\n    Versions.prototype.deleteAll = function () {\r\n        return new Versions_1(this, \""deleteAll\"").postCore();\r\n    };\r\n    /**\r\n     * Deletes the specified version of the file.\r\n     *\r\n     * @param versionId The ID of the file version to delete.\r\n     */\r\n    Versions.prototype.deleteById = function (versionId) {\r\n        return this.clone(Versions_1, \""deleteById(vid=\"" + versionId + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Recycles the specified version of the file.\r\n     *\r\n     * @param versionId The ID of the file version to delete.\r\n     */\r\n    Versions.prototype.recycleByID = function (versionId) {\r\n        return this.clone(Versions_1, \""recycleByID(vid=\"" + versionId + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Deletes the file version object with the specified version label.\r\n     *\r\n     * @param label The version label of the file version to delete, for example: 1.2\r\n     */\r\n    Versions.prototype.deleteByLabel = function (label) {\r\n        return this.clone(Versions_1, \""deleteByLabel(versionlabel='\"" + label + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Recycles the file version object with the specified version label.\r\n     *\r\n     * @param label The version label of the file version to delete, for example: 1.2\r\n     */\r\n    Versions.prototype.recycleByLabel = function (label) {\r\n        return this.clone(Versions_1, \""recycleByLabel(versionlabel='\"" + label + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Creates a new file version from the file specified by the version label.\r\n     *\r\n     * @param label The version label of the file version to restore, for example: 1.2\r\n     */\r\n    Versions.prototype.restoreByLabel = function (label) {\r\n        return this.clone(Versions_1, \""restoreByLabel(versionlabel='\"" + label + \""')\"").postCore();\r\n    };\r\n    var Versions_1;\r\n    Versions = Versions_1 = tslib_1.__decorate([\r\n        defaultPath(\""versions\"")\r\n    ], Versions);\r\n    return Versions;\r\n}(SharePointQueryableCollection));\r\nexport { Versions };\r\n/**\r\n * Describes a single Version instance\r\n *\r\n */\r\nvar Version = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Version, _super);\r\n    function Version() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n        * Delete a specific version of a file.\r\n        *\r\n        * @param eTag Value used in the IF-Match header, by default \""*\""\r\n        */\r\n        _this.delete = _this._deleteWithETag;\r\n        return _this;\r\n        // /**\r\n        // * Delete a specific version of a file.\r\n        // *\r\n        // * @param eTag Value used in the IF-Match header, by default \""*\""\r\n        // */\r\n        // public delete(eTag = \""*\""): Promise<void> {\r\n        //     return this.postCore({\r\n        //         headers: {\r\n        //             \""IF-Match\"": eTag,\r\n        //             \""X-HTTP-Method\"": \""DELETE\"",\r\n        //         },\r\n        //     });\r\n        // }\r\n    }\r\n    return Version;\r\n}(SharePointQueryableInstance));\r\nexport { Version };\r\nexport var CheckinType;\r\n(function (CheckinType) {\r\n    CheckinType[CheckinType[\""Minor\""] = 0] = \""Minor\"";\r\n    CheckinType[CheckinType[\""Major\""] = 1] = \""Major\"";\r\n    CheckinType[CheckinType[\""Overwrite\""] = 2] = \""Overwrite\"";\r\n})(CheckinType || (CheckinType = {}));\r\nexport var WebPartsPersonalizationScope;\r\n(function (WebPartsPersonalizationScope) {\r\n    WebPartsPersonalizationScope[WebPartsPersonalizationScope[\""User\""] = 0] = \""User\"";\r\n    WebPartsPersonalizationScope[WebPartsPersonalizationScope[\""Shared\""] = 1] = \""Shared\"";\r\n})(WebPartsPersonalizationScope || (WebPartsPersonalizationScope = {}));\r\nexport var MoveOperations;\r\n(function (MoveOperations) {\r\n    MoveOperations[MoveOperations[\""Overwrite\""] = 1] = \""Overwrite\"";\r\n    MoveOperations[MoveOperations[\""AllowBrokenThickets\""] = 8] = \""AllowBrokenThickets\"";\r\n})(MoveOperations || (MoveOperations = {}));\r\nexport var TemplateFileType;\r\n(function (TemplateFileType) {\r\n    TemplateFileType[TemplateFileType[\""StandardPage\""] = 0] = \""StandardPage\"";\r\n    TemplateFileType[TemplateFileType[\""WikiPage\""] = 1] = \""WikiPage\"";\r\n    TemplateFileType[TemplateFileType[\""FormPage\""] = 2] = \""FormPage\"";\r\n    TemplateFileType[TemplateFileType[\""ClientSidePage\""] = 3] = \""ClientSidePage\"";\r\n})(TemplateFileType || (TemplateFileType = {}));\r\n//# sourceMappingURL=files.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { SharePointQueryable, SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableShareableFolder } from \""./sharepointqueryableshareable\"";\r\nimport { Files } from \""./files\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { Item } from \""./items\"";\r\nimport { SPHttpClient } from \""./net/sphttpclient\"";\r\n/**\r\n * Describes a collection of Folder objects\r\n *\r\n */\r\nvar Folders = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Folders, _super);\r\n    function Folders() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Folders_1 = Folders;\r\n    /**\r\n     * Gets a folder by folder name\r\n     *\r\n     */\r\n    Folders.prototype.getByName = function (name) {\r\n        var f = new Folder(this);\r\n        f.concat(\""('\"" + name + \""')\"");\r\n        return f;\r\n    };\r\n    /**\r\n     * Adds a new folder to the current folder (relative) or any folder (absolute)\r\n     *\r\n     * @param url The relative or absolute url where the new folder will be created. Urls starting with a forward slash are absolute.\r\n     * @returns The new Folder and the raw response.\r\n     */\r\n    Folders.prototype.add = function (url) {\r\n        var _this = this;\r\n        return this.clone(Folders_1, \""add('\"" + url + \""')\"").postCore().then(function (response) {\r\n            return {\r\n                data: response,\r\n                folder: _this.getByName(url),\r\n            };\r\n        });\r\n    };\r\n    var Folders_1;\r\n    Folders = Folders_1 = tslib_1.__decorate([\r\n        defaultPath(\""folders\"")\r\n    ], Folders);\r\n    return Folders;\r\n}(SharePointQueryableCollection));\r\nexport { Folders };\r\n/**\r\n * Describes a single Folder instance\r\n *\r\n */\r\nvar Folder = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Folder, _super);\r\n    function Folder() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.update = _this._update(\""SP.Folder\"", function (data) { return ({ data: data, folder: _this }); });\r\n        return _this;\r\n    }\r\n    Object.defineProperty(Folder.prototype, \""contentTypeOrder\"", {\r\n        /**\r\n         * Specifies the sequence in which content types are displayed.\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""contentTypeOrder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""files\"", {\r\n        /**\r\n         * Gets this folder's files\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Files(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""folders\"", {\r\n        /**\r\n         * Gets this folder's sub folders\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folders(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""listItemAllFields\"", {\r\n        /**\r\n         * Gets this folder's list item field values\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""listItemAllFields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""parentFolder\"", {\r\n        /**\r\n         * Gets the parent folder, if available\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folder(this, \""parentFolder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""properties\"", {\r\n        /**\r\n         * Gets this folder's properties\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""properties\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""serverRelativeUrl\"", {\r\n        /**\r\n         * Gets this folder's server relative url\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""serverRelativeUrl\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Folder.prototype, \""uniqueContentTypeOrder\"", {\r\n        /**\r\n         * Gets a value that specifies the content type order.\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""uniqueContentTypeOrder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n    * Delete this folder\r\n    *\r\n    * @param eTag Value used in the IF-Match header, by default \""*\""\r\n    */\r\n    Folder.prototype.delete = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.clone(Folder, null).postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Moves the folder to the Recycle Bin and returns the identifier of the new Recycle Bin item.\r\n     */\r\n    Folder.prototype.recycle = function () {\r\n        return this.clone(Folder, \""recycle\"").postCore();\r\n    };\r\n    /**\r\n     * Gets the associated list item for this folder, loading the default properties\r\n     */\r\n    Folder.prototype.getItem = function () {\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        var q = this.listItemAllFields;\r\n        return q.select.apply(q, selects).get().then(function (d) {\r\n            return extend(new Item(odataUrlFrom(d)), d);\r\n        });\r\n    };\r\n    /**\r\n     * Moves a folder to destination path\r\n     *\r\n     * @param destUrl Absolute or relative URL of the destination path\r\n     */\r\n    Folder.prototype.moveTo = function (destUrl) {\r\n        var _this = this;\r\n        return this.select(\""ServerRelativeUrl\"").get().then(function (_a) {\r\n            var srcUrl = _a.ServerRelativeUrl;\r\n            var client = new SPHttpClient();\r\n            var webBaseUrl = _this.toUrl().split(\""/_api\"")[0];\r\n            var hostUrl = webBaseUrl.replace(\""://\"", \""___\"").split(\""/\"")[0].replace(\""___\"", \""://\"");\r\n            var methodUrl = webBaseUrl + \""/_api/SP.MoveCopyUtil.MoveFolder()\"";\r\n            return client.post(methodUrl, {\r\n                body: jsS({\r\n                    destUrl: destUrl.indexOf(\""http\"") === 0 ? destUrl : \""\"" + hostUrl + destUrl,\r\n                    srcUrl: \""\"" + hostUrl + srcUrl,\r\n                }),\r\n            }).then(function (r) { return r.json(); });\r\n        });\r\n    };\r\n    return Folder;\r\n}(SharePointQueryableShareableFolder));\r\nexport { Folder };\r\n//# sourceMappingURL=folders.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\n/**\r\n * Describes a collection of Field objects\r\n *\r\n */\r\nvar Forms = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Forms, _super);\r\n    function Forms() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a form by id\r\n     *\r\n     * @param id The guid id of the item to retrieve\r\n     */\r\n    Forms.prototype.getById = function (id) {\r\n        var i = new Form(this);\r\n        i.concat(\""('\"" + id + \""')\"");\r\n        return i;\r\n    };\r\n    Forms = tslib_1.__decorate([\r\n        defaultPath(\""forms\"")\r\n    ], Forms);\r\n    return Forms;\r\n}(SharePointQueryableCollection));\r\nexport { Forms };\r\n/**\r\n * Describes a single of Form instance\r\n *\r\n */\r\nvar Form = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Form, _super);\r\n    function Form() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Form;\r\n}(SharePointQueryableInstance));\r\nexport { Form };\r\n//# sourceMappingURL=forms.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\n/**\r\n * Describes a collection of Hub Sites\r\n *\r\n */\r\nvar HubSites = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HubSites, _super);\r\n    function HubSites() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a Hub Site from the collection by id\r\n     *\r\n     * @param id The Id of the Hub Site\r\n     */\r\n    HubSites.prototype.getById = function (id) {\r\n        return new HubSite(this, \""GetById?hubSiteId='\"" + id + \""'\"");\r\n    };\r\n    HubSites = tslib_1.__decorate([\r\n        defaultPath(\""_api/hubsites\"")\r\n    ], HubSites);\r\n    return HubSites;\r\n}(SharePointQueryableCollection));\r\nexport { HubSites };\r\nvar HubSite = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HubSite, _super);\r\n    function HubSite() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return HubSite;\r\n}(SharePointQueryableInstance));\r\nexport { HubSite };\r\n//# sourceMappingURL=hubsites.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableShareableItem } from \""./sharepointqueryableshareable\"";\r\nimport { Folder } from \""./folders\"";\r\nimport { File } from \""./files\"";\r\nimport { ContentType } from \""./contenttypes\"";\r\nimport { extend, jsS, hOP } from \""@pnp/common\"";\r\nimport { ODataParserBase, ODataDefaultParser } from \""@pnp/odata\"";\r\nimport { AttachmentFiles } from \""./attachmentfiles\"";\r\nimport { List } from \""./lists\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { Comments } from \""./comments\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of Item objects\r\n *\r\n */\r\nvar Items = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Items, _super);\r\n    function Items() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Items_1 = Items;\r\n    /**\r\n    * Gets an Item by id\r\n    *\r\n    * @param id The integer id of the item to retrieve\r\n    */\r\n    Items.prototype.getById = function (id) {\r\n        var i = new Item(this);\r\n        i.concat(\""(\"" + id + \"")\"");\r\n        return i;\r\n    };\r\n    /**\r\n     * Gets BCS Item by string id\r\n     *\r\n     * @param stringId The string id of the BCS item to retrieve\r\n     */\r\n    Items.prototype.getItemByStringId = function (stringId) {\r\n        // creates an item with the parent list path and append out method call\r\n        return new Item(this.parentUrl, \""getItemByStringId('\"" + stringId + \""')\"");\r\n    };\r\n    /**\r\n     * Skips the specified number of items (https://msdn.microsoft.com/en-us/library/office/fp142385.aspx#sectionSection6)\r\n     *\r\n     * @param skip The starting id where the page should start, use with top to specify pages\r\n     * @param reverse It true the PagedPrev=true parameter is added allowing backwards navigation in the collection\r\n     */\r\n    Items.prototype.skip = function (skip, reverse) {\r\n        if (reverse === void 0) { reverse = false; }\r\n        if (reverse) {\r\n            this.query.set(\""$skiptoken\"", encodeURIComponent(\""Paged=TRUE&PagedPrev=TRUE&p_ID=\"" + skip));\r\n        }\r\n        else {\r\n            this.query.set(\""$skiptoken\"", encodeURIComponent(\""Paged=TRUE&p_ID=\"" + skip));\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets a collection designed to aid in paging through data\r\n     *\r\n     */\r\n    Items.prototype.getPaged = function (parser) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return this.get(new PagedItemCollectionParser(this, parser));\r\n    };\r\n    /**\r\n     * Gets all the items in a list, regardless of count. Does not support batching or caching\r\n     *\r\n     *  @param requestSize Number of items to return in each request (Default: 2000)\r\n     *  @param acceptHeader Allows for setting the value of the Accept header for SP 2013 support\r\n     */\r\n    Items.prototype.getAll = function (requestSize, acceptHeader) {\r\n        if (requestSize === void 0) { requestSize = 2000; }\r\n        if (acceptHeader === void 0) { acceptHeader = \""application/json;odata=nometadata\""; }\r\n        Logger.write(\""Calling items.getAll should be done sparingly. Ensure this is the correct choice. If you are unsure, it is not.\"", 2 /* Warning */);\r\n        // this will be used for the actual query\r\n        // and we set no metadata here to try and reduce traffic\r\n        var items = new Items_1(this, \""\"").top(requestSize).configure({\r\n            headers: {\r\n                \""Accept\"": acceptHeader,\r\n            },\r\n        });\r\n        // let's copy over the odata query params that can be applied\r\n        // $top - allow setting the page size this way (override what we did above)\r\n        // $select - allow picking the return fields (good behavior)\r\n        // $filter - allow setting a filter, though this may fail due for large lists\r\n        this.query.forEach(function (v, k) {\r\n            if (/^\\$select|filter|top|expand$/i.test(k)) {\r\n                items.query.set(k, v);\r\n            }\r\n        });\r\n        // give back the promise\r\n        return new Promise(function (resolve, reject) {\r\n            // this will eventually hold the items we return\r\n            var itemsCollector = [];\r\n            // action that will gather up our results recursively\r\n            var gatherer = function (last) {\r\n                // collect that set of results\r\n                [].push.apply(itemsCollector, last.results);\r\n                // if we have more, repeat - otherwise resolve with the collected items\r\n                if (last.hasNext) {\r\n                    last.getNext().then(gatherer).catch(reject);\r\n                }\r\n                else {\r\n                    resolve(itemsCollector);\r\n                }\r\n            };\r\n            // start the cycle\r\n            items.getPaged().then(gatherer).catch(reject);\r\n        });\r\n    };\r\n    /**\r\n     * Adds a new item to the collection\r\n     *\r\n     * @param properties The new items's properties\r\n     * @param listItemEntityTypeFullName The type name of the list's entities\r\n     */\r\n    Items.prototype.add = function (properties, listItemEntityTypeFullName) {\r\n        var _this = this;\r\n        if (properties === void 0) { properties = {}; }\r\n        if (listItemEntityTypeFullName === void 0) { listItemEntityTypeFullName = null; }\r\n        var removeDependency = this.addBatchDependency();\r\n        return this.ensureListItemEntityTypeName(listItemEntityTypeFullName).then(function (listItemEntityType) {\r\n            var postBody = jsS(extend(metadata(listItemEntityType), properties));\r\n            var promise = _this.clone(Items_1, \""\"").postCore({ body: postBody }).then(function (data) {\r\n                return {\r\n                    data: data,\r\n                    item: _this.getById(data.Id),\r\n                };\r\n            });\r\n            removeDependency();\r\n            return promise;\r\n        });\r\n    };\r\n    /**\r\n     * Ensures we have the proper list item entity type name, either from the value provided or from the list\r\n     *\r\n     * @param candidatelistItemEntityTypeFullName The potential type name\r\n     */\r\n    Items.prototype.ensureListItemEntityTypeName = function (candidatelistItemEntityTypeFullName) {\r\n        return candidatelistItemEntityTypeFullName ?\r\n            Promise.resolve(candidatelistItemEntityTypeFullName) :\r\n            this.getParent(List).getListItemEntityTypeFullName();\r\n    };\r\n    var Items_1;\r\n    Items = Items_1 = tslib_1.__decorate([\r\n        defaultPath(\""items\"")\r\n    ], Items);\r\n    return Items;\r\n}(SharePointQueryableCollection));\r\nexport { Items };\r\n/**\r\n * Descrines a single Item instance\r\n *\r\n */\r\nvar Item = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Item, _super);\r\n    function Item() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Delete this item\r\n         *\r\n         * @param eTag Value used in the IF-Match header, by default \""*\""\r\n         */\r\n        _this.delete = _this._deleteWithETag;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(Item.prototype, \""attachmentFiles\"", {\r\n        /**\r\n         * Gets the set of attachments for this item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new AttachmentFiles(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""contentType\"", {\r\n        /**\r\n         * Gets the content type for this item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new ContentType(this, \""ContentType\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""comments\"", {\r\n        /**\r\n         * Gets the collection of comments associated with this list item\r\n         */\r\n        get: function () {\r\n            return new Comments(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""effectiveBasePermissions\"", {\r\n        /**\r\n         * Gets the effective base permissions for the item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""EffectiveBasePermissions\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""effectiveBasePermissionsForUI\"", {\r\n        /**\r\n         * Gets the effective base permissions for the item in a UI context\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""EffectiveBasePermissionsForUI\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""fieldValuesAsHTML\"", {\r\n        /**\r\n         * Gets the field values for this list item in their HTML representation\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""FieldValuesAsHTML\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""fieldValuesAsText\"", {\r\n        /**\r\n         * Gets the field values for this list item in their text representation\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""FieldValuesAsText\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""fieldValuesForEdit\"", {\r\n        /**\r\n         * Gets the field values for this list item for use in editing controls\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""FieldValuesForEdit\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""folder\"", {\r\n        /**\r\n         * Gets the folder associated with this list item (if this item represents a folder)\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folder(this, \""folder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""file\"", {\r\n        /**\r\n         * Gets the folder associated with this list item (if this item represents a folder)\r\n         *\r\n         */\r\n        get: function () {\r\n            return new File(this, \""file\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""versions\"", {\r\n        /**\r\n         * Gets the collection of versions associated with this item\r\n         */\r\n        get: function () {\r\n            return new ItemVersions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Item.prototype, \""list\"", {\r\n        get: function () {\r\n            return this.getParent(List, this.parentUrl.substr(0, this.parentUrl.lastIndexOf(\""/\"")));\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Updates this list intance with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the list\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     * @param listItemEntityTypeFullName The type name of the list's entities\r\n     */\r\n    Item.prototype.update = function (properties, eTag, listItemEntityTypeFullName) {\r\n        var _this = this;\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        if (listItemEntityTypeFullName === void 0) { listItemEntityTypeFullName = null; }\r\n        return new Promise(function (resolve, reject) {\r\n            var removeDependency = _this.addBatchDependency();\r\n            return _this.ensureListItemEntityTypeName(listItemEntityTypeFullName).then(function (listItemEntityType) {\r\n                var postBody = jsS(extend(metadata(listItemEntityType), properties));\r\n                removeDependency();\r\n                return _this.postCore({\r\n                    body: postBody,\r\n                    headers: {\r\n                        \""IF-Match\"": eTag,\r\n                        \""X-HTTP-Method\"": \""MERGE\"",\r\n                    },\r\n                }, new ItemUpdatedParser()).then(function (data) {\r\n                    resolve({\r\n                        data: data,\r\n                        item: _this,\r\n                    });\r\n                });\r\n            }).catch(function (e) { return reject(e); });\r\n        });\r\n    };\r\n    /**\r\n     * Gets the collection of people who have liked this item\r\n     */\r\n    Item.prototype.getLikedBy = function () {\r\n        return this.clone(Item, \""likedBy\"").postCore();\r\n    };\r\n    /**\r\n     * Likes this item as the current user\r\n     */\r\n    Item.prototype.like = function () {\r\n        return this.clone(Item, \""like\"").postCore();\r\n    };\r\n    /**\r\n     * Unlikes this item as the current user\r\n     */\r\n    Item.prototype.unlike = function () {\r\n        return this.clone(Item, \""unlike\"").postCore();\r\n    };\r\n    /**\r\n     * Moves the list item to the Recycle Bin and returns the identifier of the new Recycle Bin item.\r\n     */\r\n    Item.prototype.recycle = function () {\r\n        return this.clone(Item, \""recycle\"").postCore();\r\n    };\r\n    /**\r\n     * Gets a string representation of the full URL to the WOPI frame.\r\n     * If there is no associated WOPI application, or no associated action, an empty string is returned.\r\n     *\r\n     * @param action Display mode: 0: view, 1: edit, 2: mobileView, 3: interactivePreview\r\n     */\r\n    Item.prototype.getWopiFrameUrl = function (action) {\r\n        if (action === void 0) { action = 0; }\r\n        var i = this.clone(Item, \""getWOPIFrameUrl(@action)\"");\r\n        i.query.set(\""@action\"", action);\r\n        return i.postCore().then(function (data) {\r\n            // handle verbose mode\r\n            if (hOP(data, \""GetWOPIFrameUrl\"")) {\r\n                return data.GetWOPIFrameUrl;\r\n            }\r\n            return data;\r\n        });\r\n    };\r\n    /**\r\n     * Validates and sets the values of the specified collection of fields for the list item.\r\n     *\r\n     * @param formValues The fields to change and their new values.\r\n     * @param newDocumentUpdate true if the list item is a document being updated after upload; otherwise false.\r\n     */\r\n    Item.prototype.validateUpdateListItem = function (formValues, newDocumentUpdate) {\r\n        if (newDocumentUpdate === void 0) { newDocumentUpdate = false; }\r\n        return this.clone(Item, \""validateupdatelistitem\"").postCore({\r\n            body: jsS({ \""formValues\"": formValues, bNewDocumentUpdate: newDocumentUpdate }),\r\n        });\r\n    };\r\n    /**\r\n     * Get the like by information for a modern site page\r\n     */\r\n    Item.prototype.getLikedByInformation = function () {\r\n        return this.clone(Item, \""likedByInformation\"").expand(\""likedby\"").getCore();\r\n    };\r\n    /**\r\n     * Ensures we have the proper list item entity type name, either from the value provided or from the list\r\n     *\r\n     * @param candidatelistItemEntityTypeFullName The potential type name\r\n     */\r\n    Item.prototype.ensureListItemEntityTypeName = function (candidatelistItemEntityTypeFullName) {\r\n        return candidatelistItemEntityTypeFullName ?\r\n            Promise.resolve(candidatelistItemEntityTypeFullName) :\r\n            this.list.getListItemEntityTypeFullName();\r\n    };\r\n    return Item;\r\n}(SharePointQueryableShareableItem));\r\nexport { Item };\r\n/**\r\n * Describes a collection of Version objects\r\n *\r\n */\r\nvar ItemVersions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ItemVersions, _super);\r\n    function ItemVersions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a version by id\r\n     *\r\n     * @param versionId The id of the version to retrieve\r\n     */\r\n    ItemVersions.prototype.getById = function (versionId) {\r\n        var v = new ItemVersion(this);\r\n        v.concat(\""(\"" + versionId + \"")\"");\r\n        return v;\r\n    };\r\n    ItemVersions = tslib_1.__decorate([\r\n        defaultPath(\""versions\"")\r\n    ], ItemVersions);\r\n    return ItemVersions;\r\n}(SharePointQueryableCollection));\r\nexport { ItemVersions };\r\n/**\r\n * Describes a single Version instance\r\n *\r\n */\r\nvar ItemVersion = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ItemVersion, _super);\r\n    function ItemVersion() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n        * Delete a specific version of a file.\r\n        *\r\n        * @param eTag Value used in the IF-Match header, by default \""*\""\r\n        */\r\n        _this.delete = _this._deleteWithETag;\r\n        return _this;\r\n    }\r\n    return ItemVersion;\r\n}(SharePointQueryableInstance));\r\nexport { ItemVersion };\r\n/**\r\n * Provides paging functionality for list items\r\n */\r\nvar PagedItemCollection = /** @class */ (function () {\r\n    function PagedItemCollection(parent, nextUrl, results, innerParser) {\r\n        this.parent = parent;\r\n        this.nextUrl = nextUrl;\r\n        this.results = results;\r\n        this.innerParser = innerParser;\r\n    }\r\n    Object.defineProperty(PagedItemCollection.prototype, \""hasNext\"", {\r\n        /**\r\n         * If true there are more results available in the set, otherwise there are not\r\n         */\r\n        get: function () {\r\n            return typeof this.nextUrl === \""string\"" && this.nextUrl.length > 0;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the next set of results, or resolves to null if no results are available\r\n     */\r\n    PagedItemCollection.prototype.getNext = function () {\r\n        if (this.hasNext) {\r\n            var items = new Items(this.nextUrl, null).configureFrom(this.parent);\r\n            return items.getPaged(this.innerParser);\r\n        }\r\n        return new Promise(function (r) { return r(null); });\r\n    };\r\n    return PagedItemCollection;\r\n}());\r\nexport { PagedItemCollection };\r\nvar PagedItemCollectionParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(PagedItemCollectionParser, _super);\r\n    function PagedItemCollectionParser(_parent, innerParser) {\r\n        var _this = _super.call(this) || this;\r\n        _this._parent = _parent;\r\n        _this.innerParser = innerParser;\r\n        return _this;\r\n    }\r\n    PagedItemCollectionParser.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return this.innerParser.parse(r).then(function (items) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\r\n            var json, nextUrl;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                json = this.innerParser.rawJson;\r\n                nextUrl = hOP(json, \""d\"") && hOP(json.d, \""__next\"") ? json.d.__next : json[\""odata.nextLink\""];\r\n                return [2 /*return*/, new PagedItemCollection(this._parent, nextUrl, items, this.innerParser)];\r\n            });\r\n        }); });\r\n    };\r\n    return PagedItemCollectionParser;\r\n}(ODataParserBase));\r\nvar ItemUpdatedParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ItemUpdatedParser, _super);\r\n    function ItemUpdatedParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ItemUpdatedParser.prototype.parse = function (r) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var _this = this;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                return [2 /*return*/, new Promise(function (resolve, reject) {\r\n                        if (_this.handleError(r, reject)) {\r\n                            resolve({\r\n                                \""odata.etag\"": r.headers.get(\""etag\""),\r\n                            });\r\n                        }\r\n                    })];\r\n            });\r\n        });\r\n    };\r\n    return ItemUpdatedParser;\r\n}(ODataParserBase));\r\n//# sourceMappingURL=items.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { Items } from \""./items\"";\r\nimport { Views, View } from \""./views\"";\r\nimport { ContentTypes } from \""./contenttypes\"";\r\nimport { Fields } from \""./fields\"";\r\nimport { Forms } from \""./forms\"";\r\nimport { Subscriptions } from \""./subscriptions\"";\r\nimport { SharePointQueryable, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableSecurable } from \""./sharepointqueryablesecurable\"";\r\nimport { extend, hOP, jsS } from \""@pnp/common\"";\r\nimport { UserCustomActions } from \""./usercustomactions\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { Folder } from \""./folders\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\nimport { SiteScripts } from \""..\"";\r\nimport { toAbsoluteUrl } from \""./utils/toabsoluteurl\"";\r\n/**\r\n * Describes a collection of List objects\r\n *\r\n */\r\nvar Lists = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Lists, _super);\r\n    function Lists() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Lists_1 = Lists;\r\n    /**\r\n     * Gets a list from the collection by guid id\r\n     *\r\n     * @param id The Id of the list (GUID)\r\n     */\r\n    Lists.prototype.getById = function (id) {\r\n        var list = new List(this);\r\n        list.concat(\""('\"" + id + \""')\"");\r\n        return list;\r\n    };\r\n    /**\r\n     * Gets a list from the collection by title\r\n     *\r\n     * @param title The title of the list\r\n     */\r\n    Lists.prototype.getByTitle = function (title) {\r\n        return new List(this, \""getByTitle('\"" + title + \""')\"");\r\n    };\r\n    /**\r\n     * Adds a new list to the collection\r\n     *\r\n     * @param title The new list's title\r\n     * @param description The new list's description\r\n     * @param template The list template value\r\n     * @param enableContentTypes If true content types will be allowed and enabled, otherwise they will be disallowed and not enabled\r\n     * @param additionalSettings Will be passed as part of the list creation body\r\n     */\r\n    Lists.prototype.add = function (title, description, template, enableContentTypes, additionalSettings) {\r\n        var _this = this;\r\n        if (description === void 0) { description = \""\""; }\r\n        if (template === void 0) { template = 100; }\r\n        if (enableContentTypes === void 0) { enableContentTypes = false; }\r\n        if (additionalSettings === void 0) { additionalSettings = {}; }\r\n        var addSettings = extend({\r\n            \""AllowContentTypes\"": enableContentTypes,\r\n            \""BaseTemplate\"": template,\r\n            \""ContentTypesEnabled\"": enableContentTypes,\r\n            \""Description\"": description,\r\n            \""Title\"": title,\r\n            \""__metadata\"": { \""type\"": \""SP.List\"" },\r\n        }, additionalSettings);\r\n        return this.postCore({ body: jsS(addSettings) }).then(function (data) {\r\n            return { data: data, list: _this.getByTitle(addSettings.Title) };\r\n        });\r\n    };\r\n    /**\r\n     * Ensures that the specified list exists in the collection (note: this method not supported for batching)\r\n     *\r\n     * @param title The new list's title\r\n     * @param description The new list's description\r\n     * @param template The list template value\r\n     * @param enableContentTypes If true content types will be allowed and enabled, otherwise they will be disallowed and not enabled\r\n     * @param additionalSettings Will be passed as part of the list creation body or used to update an existing list\r\n     */\r\n    Lists.prototype.ensure = function (title, description, template, enableContentTypes, additionalSettings) {\r\n        var _this = this;\r\n        if (description === void 0) { description = \""\""; }\r\n        if (template === void 0) { template = 100; }\r\n        if (enableContentTypes === void 0) { enableContentTypes = false; }\r\n        if (additionalSettings === void 0) { additionalSettings = {}; }\r\n        if (this.hasBatch) {\r\n            throw Error(\""The ensure list method is not supported for use in a batch.\"");\r\n        }\r\n        return new Promise(function (resolve, reject) {\r\n            var addOrUpdateSettings = extend(additionalSettings, { Title: title, Description: description, ContentTypesEnabled: enableContentTypes }, true);\r\n            var list = _this.getByTitle(addOrUpdateSettings.Title);\r\n            list.get().then(function (_) {\r\n                list.update(addOrUpdateSettings).then(function (d) {\r\n                    resolve({ created: false, data: d, list: _this.getByTitle(addOrUpdateSettings.Title) });\r\n                }).catch(function (e) { return reject(e); });\r\n            }).catch(function (_) {\r\n                _this.add(title, description, template, enableContentTypes, addOrUpdateSettings).then(function (r) {\r\n                    resolve({ created: true, data: r.data, list: _this.getByTitle(addOrUpdateSettings.Title) });\r\n                }).catch(function (e) { return reject(e); });\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list that is the default asset location for images or other files, which the users upload to their wiki pages.\r\n     */\r\n    Lists.prototype.ensureSiteAssetsLibrary = function () {\r\n        return this.clone(Lists_1, \""ensuresiteassetslibrary\"").postCore().then(function (json) {\r\n            return new List(odataUrlFrom(json));\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list that is the default location for wiki pages.\r\n     */\r\n    Lists.prototype.ensureSitePagesLibrary = function () {\r\n        return this.clone(Lists_1, \""ensuresitepageslibrary\"").postCore().then(function (json) {\r\n            return new List(odataUrlFrom(json));\r\n        });\r\n    };\r\n    var Lists_1;\r\n    Lists = Lists_1 = tslib_1.__decorate([\r\n        defaultPath(\""lists\"")\r\n    ], Lists);\r\n    return Lists;\r\n}(SharePointQueryableCollection));\r\nexport { Lists };\r\n/**\r\n * Describes a single List instance\r\n *\r\n */\r\nvar List = /** @class */ (function (_super) {\r\n    tslib_1.__extends(List, _super);\r\n    function List() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(List.prototype, \""contentTypes\"", {\r\n        /**\r\n         * Gets the content types in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new ContentTypes(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""items\"", {\r\n        /**\r\n         * Gets the items in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Items(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""views\"", {\r\n        /**\r\n         * Gets the views in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Views(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""fields\"", {\r\n        /**\r\n         * Gets the fields in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Fields(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""forms\"", {\r\n        /**\r\n         * Gets the forms in this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Forms(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""defaultView\"", {\r\n        /**\r\n         * Gets the default view of this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new View(this, \""DefaultView\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""userCustomActions\"", {\r\n        /**\r\n         * Get all custom actions on a site collection\r\n         *\r\n         */\r\n        get: function () {\r\n            return new UserCustomActions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""effectiveBasePermissions\"", {\r\n        /**\r\n         * Gets the effective base permissions of this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""EffectiveBasePermissions\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""eventReceivers\"", {\r\n        /**\r\n         * Gets the event receivers attached to this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""EventReceivers\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""relatedFields\"", {\r\n        /**\r\n         * Gets the related fields of this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""getRelatedFields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""informationRightsManagementSettings\"", {\r\n        /**\r\n         * Gets the IRM settings for this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryable(this, \""InformationRightsManagementSettings\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""subscriptions\"", {\r\n        /**\r\n         * Gets the webhook subscriptions of this list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Subscriptions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(List.prototype, \""rootFolder\"", {\r\n        /**\r\n         * The root folder of the list\r\n         */\r\n        get: function () {\r\n            return new Folder(this, \""rootFolder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a view by view guid id\r\n     *\r\n     */\r\n    List.prototype.getView = function (viewId) {\r\n        return new View(this, \""getView('\"" + viewId + \""')\"");\r\n    };\r\n    /**\r\n     * Updates this list intance with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the list\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    /* tslint:disable no-string-literal */\r\n    List.prototype.update = function (properties, eTag) {\r\n        var _this = this;\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        var postBody = jsS(extend({\r\n            \""__metadata\"": { \""type\"": \""SP.List\"" },\r\n        }, properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            var retList = _this;\r\n            if (hOP(properties, \""Title\"")) {\r\n                retList = _this.getParent(List, _this.parentUrl, \""getByTitle('\"" + properties[\""Title\""] + \""')\"");\r\n            }\r\n            return {\r\n                data: data,\r\n                list: retList,\r\n            };\r\n        });\r\n    };\r\n    /* tslint:enable */\r\n    /**\r\n     * Delete this list\r\n     *\r\n     * @param eTag Value used in the IF-Match header, by default \""*\""\r\n     */\r\n    List.prototype.delete = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Returns the collection of changes from the change log that have occurred within the list, based on the specified query.\r\n     */\r\n    List.prototype.getChanges = function (query) {\r\n        return this.clone(List, \""getchanges\"").postCore({\r\n            body: jsS({ \""query\"": extend(metadata(\""SP.ChangeQuery\""), query) }),\r\n        });\r\n    };\r\n    /**\r\n     * Returns a collection of items from the list based on the specified query.\r\n     *\r\n     * @param CamlQuery The Query schema of Collaborative Application Markup\r\n     * Language (CAML) is used in various ways within the context of Microsoft SharePoint Foundation\r\n     * to define queries against list data.\r\n     * see:\r\n     *\r\n     * https://msdn.microsoft.com/en-us/library/office/ms467521.aspx\r\n     *\r\n     * @param expands A URI with a $expand System Query Option indicates that Entries associated with\r\n     * the Entry or Collection of Entries identified by the Resource Path\r\n     * section of the URI must be represented inline (i.e. eagerly loaded).\r\n     * see:\r\n     *\r\n     * https://msdn.microsoft.com/en-us/library/office/fp142385.aspx\r\n     *\r\n     * http://www.odata.org/documentation/odata-version-2-0/uri-conventions/#ExpandSystemQueryOption\r\n     */\r\n    List.prototype.getItemsByCAMLQuery = function (query) {\r\n        var expands = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            expands[_i - 1] = arguments[_i];\r\n        }\r\n        var q = this.clone(List, \""getitems\"");\r\n        return q.expand.apply(q, expands).postCore({\r\n            body: jsS({ \""query\"": extend({ \""__metadata\"": { \""type\"": \""SP.CamlQuery\"" } }, query) }),\r\n        });\r\n    };\r\n    /**\r\n     * See: https://msdn.microsoft.com/en-us/library/office/dn292554.aspx\r\n     */\r\n    List.prototype.getListItemChangesSinceToken = function (query) {\r\n        return this.clone(List, \""getlistitemchangessincetoken\"").postCore({\r\n            body: jsS({ \""query\"": extend({ \""__metadata\"": { \""type\"": \""SP.ChangeLogItemQuery\"" } }, query) }),\r\n        }, { parse: function (r) { return r.text(); } });\r\n    };\r\n    /**\r\n     * Moves the list to the Recycle Bin and returns the identifier of the new Recycle Bin item.\r\n     */\r\n    List.prototype.recycle = function () {\r\n        return this.clone(List, \""recycle\"").postCore().then(function (data) {\r\n            if (hOP(data, \""Recycle\"")) {\r\n                return data.Recycle;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Renders list data based on the view xml provided\r\n     */\r\n    List.prototype.renderListData = function (viewXml) {\r\n        var q = this.clone(List, \""renderlistdata(@viewXml)\"");\r\n        q.query.set(\""@viewXml\"", \""'\"" + viewXml + \""'\"");\r\n        return q.postCore().then(function (data) {\r\n            // data will be a string, so we parse it again\r\n            return JSON.parse(hOP(data, \""RenderListData\"") ? data.RenderListData : data);\r\n        });\r\n    };\r\n    /**\r\n     * Returns the data for the specified query view\r\n     *\r\n     * @param parameters The parameters to be used to render list data as JSON string.\r\n     * @param overrideParameters The parameters that are used to override and extend the regular SPRenderListDataParameters.\r\n     */\r\n    List.prototype.renderListDataAsStream = function (parameters, overrideParameters) {\r\n        if (overrideParameters === void 0) { overrideParameters = null; }\r\n        var postBody = {\r\n            overrideParameters: extend(metadata(\""SP.RenderListDataOverrideParameters\""), overrideParameters),\r\n            parameters: extend(metadata(\""SP.RenderListDataParameters\""), parameters),\r\n        };\r\n        return this.clone(List, \""RenderListDataAsStream\"", true).postCore({\r\n            body: jsS(postBody),\r\n        });\r\n    };\r\n    /**\r\n     * Gets the field values and field schema attributes for a list item.\r\n     */\r\n    List.prototype.renderListFormData = function (itemId, formId, mode) {\r\n        return this.clone(List, \""renderlistformdata(itemid=\"" + itemId + \"", formid='\"" + formId + \""', mode='\"" + mode + \""')\"").postCore().then(function (data) {\r\n            // data will be a string, so we parse it again\r\n            return JSON.parse(hOP(data, \""RenderListFormData\"") ? data.RenderListFormData : data);\r\n        });\r\n    };\r\n    /**\r\n     * Reserves a list item ID for idempotent list item creation.\r\n     */\r\n    List.prototype.reserveListItemId = function () {\r\n        return this.clone(List, \""reservelistitemid\"").postCore().then(function (data) {\r\n            if (hOP(data, \""ReserveListItemId\"")) {\r\n                return data.ReserveListItemId;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Returns the ListItemEntityTypeFullName for this list, used when adding/updating list items. Does not support batching.\r\n     *\r\n     */\r\n    List.prototype.getListItemEntityTypeFullName = function () {\r\n        return this.clone(List, null, false).select(\""ListItemEntityTypeFullName\"").get().then(function (o) { return o.ListItemEntityTypeFullName; });\r\n    };\r\n    /**\r\n     * Creates an item using path (in a folder), validates and sets its field values.\r\n     *\r\n     * @param formValues The fields to change and their new values.\r\n     * @param decodedUrl Path decoded url; folder's server relative path.\r\n     * @param bNewDocumentUpdate true if the list item is a document being updated after upload; otherwise false.\r\n     * @param checkInComment Optional check in comment.\r\n     */\r\n    List.prototype.addValidateUpdateItemUsingPath = function (formValues, decodedUrl, bNewDocumentUpdate, checkInComment) {\r\n        if (bNewDocumentUpdate === void 0) { bNewDocumentUpdate = false; }\r\n        return this.clone(List, \""AddValidateUpdateItemUsingPath()\"").postCore({\r\n            body: jsS({\r\n                bNewDocumentUpdate: bNewDocumentUpdate,\r\n                checkInComment: checkInComment,\r\n                formValues: formValues,\r\n                listItemCreateInfo: {\r\n                    FolderPath: {\r\n                        DecodedUrl: decodedUrl,\r\n                        __metadata: { type: \""SP.ResourcePath\"" },\r\n                    },\r\n                    __metadata: { type: \""SP.ListItemCreationInformationUsingPath\"" },\r\n                },\r\n            }),\r\n        }).then(function (res) {\r\n            if (typeof res.AddValidateUpdateItemUsingPath !== \""undefined\"") {\r\n                return res.AddValidateUpdateItemUsingPath.results;\r\n            }\r\n            return res;\r\n        });\r\n    };\r\n    /**\r\n    * Gets the site script syntax (JSON) for the current list\r\n    */\r\n    List.prototype.getSiteScript = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var rootFolder, absoluteListUrl;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(List).rootFolder.select(\""ServerRelativeUrl\"").get()];\r\n                    case 1:\r\n                        rootFolder = _a.sent();\r\n                        return [4 /*yield*/, toAbsoluteUrl(rootFolder.ServerRelativeUrl)];\r\n                    case 2:\r\n                        absoluteListUrl = _a.sent();\r\n                        return [2 /*return*/, new SiteScripts(this, \""\"").getSiteScriptFromList(absoluteListUrl)];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return List;\r\n}(SharePointQueryableSecurable));\r\nexport { List };\r\n//# sourceMappingURL=lists.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Represents a collection of navigation nodes\r\n *\r\n */\r\nvar NavigationNodes = /** @class */ (function (_super) {\r\n    tslib_1.__extends(NavigationNodes, _super);\r\n    function NavigationNodes() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a navigation node by id\r\n     *\r\n     * @param id The id of the node\r\n     */\r\n    NavigationNodes.prototype.getById = function (id) {\r\n        var node = new NavigationNode(this);\r\n        node.concat(\""(\"" + id + \"")\"");\r\n        return node;\r\n    };\r\n    /**\r\n     * Adds a new node to the collection\r\n     *\r\n     * @param title Display name of the node\r\n     * @param url The url of the node\r\n     * @param visible If true the node is visible, otherwise it is hidden (default: true)\r\n     */\r\n    NavigationNodes.prototype.add = function (title, url, visible) {\r\n        var _this = this;\r\n        if (visible === void 0) { visible = true; }\r\n        var postBody = jsS(extend(metadata(\""SP.NavigationNode\""), {\r\n            IsVisible: visible,\r\n            Title: title,\r\n            Url: url,\r\n        }));\r\n        return this.clone(NavigationNodes, null).postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                node: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Moves a node to be after another node in the navigation\r\n     *\r\n     * @param nodeId Id of the node to move\r\n     * @param previousNodeId Id of the node after which we move the node specified by nodeId\r\n     */\r\n    NavigationNodes.prototype.moveAfter = function (nodeId, previousNodeId) {\r\n        var postBody = jsS({\r\n            nodeId: nodeId,\r\n            previousNodeId: previousNodeId,\r\n        });\r\n        return this.clone(NavigationNodes, \""MoveAfter\"").postCore({ body: postBody });\r\n    };\r\n    return NavigationNodes;\r\n}(SharePointQueryableCollection));\r\nexport { NavigationNodes };\r\n/**\r\n * Represents an instance of a navigation node\r\n *\r\n */\r\nvar NavigationNode = /** @class */ (function (_super) {\r\n    tslib_1.__extends(NavigationNode, _super);\r\n    function NavigationNode() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(NavigationNode.prototype, \""children\"", {\r\n        /**\r\n         * Represents the child nodes of this node\r\n         */\r\n        get: function () {\r\n            return new NavigationNodes(this, \""Children\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Deletes this node and any child nodes\r\n     */\r\n    NavigationNode.prototype.delete = function () {\r\n        return _super.prototype.deleteCore.call(this);\r\n    };\r\n    /**\r\n     * Updates this node\r\n     *\r\n     * @param properties Properties used to update this node\r\n     */\r\n    NavigationNode.prototype.update = function (properties) {\r\n        var _this = this;\r\n        var postBody = jsS(extend({\r\n            \""__metadata\"": { \""type\"": \""SP.NavigationNode\"" },\r\n        }, properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                node: _this,\r\n            };\r\n        });\r\n    };\r\n    return NavigationNode;\r\n}(SharePointQueryableInstance));\r\nexport { NavigationNode };\r\n/**\r\n * Exposes the navigation components\r\n *\r\n */\r\nvar Navigation = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Navigation, _super);\r\n    function Navigation() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(Navigation.prototype, \""quicklaunch\"", {\r\n        /**\r\n         * Gets the quicklaunch navigation nodes for the current context\r\n         *\r\n         */\r\n        get: function () {\r\n            return new NavigationNodes(this, \""quicklaunch\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Navigation.prototype, \""topNavigationBar\"", {\r\n        /**\r\n         * Gets the top bar navigation nodes for the current context\r\n         *\r\n         */\r\n        get: function () {\r\n            return new NavigationNodes(this, \""topnavigationbar\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Navigation = tslib_1.__decorate([\r\n        defaultPath(\""navigation\"")\r\n    ], Navigation);\r\n    return Navigation;\r\n}(SharePointQueryable));\r\nexport { Navigation };\r\n/**\r\n * Represents the top level navigation service\r\n */\r\nvar NavigationService = /** @class */ (function (_super) {\r\n    tslib_1.__extends(NavigationService, _super);\r\n    function NavigationService(baseUrl, path) {\r\n        if (path === void 0) { path = null; }\r\n        return _super.call(this, baseUrl, path) || this;\r\n    }\r\n    /**\r\n     * The MenuState service operation returns a Menu-State (dump) of a SiteMapProvider on a site.\r\n     *\r\n     * @param menuNodeKey MenuNode.Key of the start node within the SiteMapProvider If no key is provided the SiteMapProvider.RootNode will be the root of the menu state.\r\n     * @param depth Depth of the dump. If no value is provided a dump with the depth of 10 is returned\r\n     * @param mapProviderName The name identifying the SiteMapProvider to be used\r\n     * @param customProperties comma seperated list of custom properties to be returned.\r\n     */\r\n    NavigationService.prototype.getMenuState = function (menuNodeKey, depth, mapProviderName, customProperties) {\r\n        if (menuNodeKey === void 0) { menuNodeKey = null; }\r\n        if (depth === void 0) { depth = 10; }\r\n        if (mapProviderName === void 0) { mapProviderName = null; }\r\n        if (customProperties === void 0) { customProperties = null; }\r\n        return (new NavigationService(this, \""_api/navigation/MenuState\"")).postCore({\r\n            body: jsS({\r\n                customProperties: customProperties,\r\n                depth: depth,\r\n                mapProviderName: mapProviderName,\r\n                menuNodeKey: menuNodeKey,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Tries to get a SiteMapNode.Key for a given URL within a site collection.\r\n     *\r\n     * @param currentUrl A url representing the SiteMapNode\r\n     * @param mapProviderName The name identifying the SiteMapProvider to be used\r\n     */\r\n    NavigationService.prototype.getMenuNodeKey = function (currentUrl, mapProviderName) {\r\n        if (mapProviderName === void 0) { mapProviderName = null; }\r\n        return (new NavigationService(this, \""_api/navigation/MenuNodeKey\"")).postCore({\r\n            body: jsS({\r\n                currentUrl: currentUrl,\r\n                mapProviderName: mapProviderName,\r\n            }),\r\n        });\r\n    };\r\n    return NavigationService;\r\n}(SharePointQueryable));\r\nexport { NavigationService };\r\n//# sourceMappingURL=navigation.js.map"",""import { combine, extend } from \""@pnp/common\"";\r\nimport { ODataDefaultParser } from \""@pnp/odata\"";\r\nimport { SPRuntimeConfig } from \""../config/splibconfig\"";\r\nvar CachedDigest = /** @class */ (function () {\r\n    function CachedDigest() {\r\n    }\r\n    return CachedDigest;\r\n}());\r\nexport { CachedDigest };\r\n// allows for the caching of digests across all HttpClient's which each have their own DigestCache wrapper.\r\nvar digests = new Map();\r\nvar DigestCache = /** @class */ (function () {\r\n    function DigestCache(_httpClient, _digests) {\r\n        if (_digests === void 0) { _digests = digests; }\r\n        this._httpClient = _httpClient;\r\n        this._digests = _digests;\r\n    }\r\n    DigestCache.prototype.getDigest = function (webUrl) {\r\n        var _this = this;\r\n        var cachedDigest = this._digests.get(webUrl);\r\n        if (cachedDigest !== undefined) {\r\n            var now = new Date();\r\n            if (now < cachedDigest.expiration) {\r\n                return Promise.resolve(cachedDigest.value);\r\n            }\r\n        }\r\n        var url = combine(webUrl, \""/_api/contextinfo\"");\r\n        var headers = {\r\n            \""Accept\"": \""application/json;odata=verbose\"",\r\n            \""Content-Type\"": \""application/json;odata=verbose;charset=utf-8\"",\r\n        };\r\n        return this._httpClient.fetchRaw(url, {\r\n            cache: \""no-cache\"",\r\n            credentials: \""same-origin\"",\r\n            headers: extend(headers, SPRuntimeConfig.headers, true),\r\n            method: \""POST\"",\r\n        }).then(function (response) {\r\n            var parser = new ODataDefaultParser();\r\n            return parser.parse(response).then(function (d) { return d.GetContextWebInformation; });\r\n        }).then(function (data) {\r\n            var newCachedDigest = new CachedDigest();\r\n            newCachedDigest.value = data.FormDigestValue;\r\n            var seconds = data.FormDigestTimeoutSeconds;\r\n            var expiration = new Date();\r\n            expiration.setTime(expiration.getTime() + 1000 * seconds);\r\n            newCachedDigest.expiration = expiration;\r\n            _this._digests.set(webUrl, newCachedDigest);\r\n            return newCachedDigest.value;\r\n        });\r\n    };\r\n    DigestCache.prototype.clear = function () {\r\n        this._digests.clear();\r\n    };\r\n    return DigestCache;\r\n}());\r\nexport { DigestCache };\r\n//# sourceMappingURL=digestcache.js.map"",""import { DigestCache } from \""./digestcache\"";\r\nimport { extend, mergeHeaders, getCtxCallback, } from \""@pnp/common\"";\r\nimport { SPRuntimeConfig } from \""../config/splibconfig\"";\r\nimport { extractWebUrl } from \""../utils/extractweburl\"";\r\nvar SPHttpClient = /** @class */ (function () {\r\n    function SPHttpClient(_impl) {\r\n        if (_impl === void 0) { _impl = SPRuntimeConfig.fetchClientFactory(); }\r\n        this._impl = _impl;\r\n        this._digestCache = new DigestCache(this);\r\n    }\r\n    SPHttpClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { cache: \""no-cache\"", credentials: \""same-origin\"" }, true);\r\n        var headers = new Headers();\r\n        // first we add the global headers so they can be overwritten by any passed in locally to this call\r\n        mergeHeaders(headers, SPRuntimeConfig.headers);\r\n        // second we add the local options so we can overwrite the globals\r\n        mergeHeaders(headers, options.headers);\r\n        // lastly we apply any default headers we need that may not exist\r\n        if (!headers.has(\""Accept\"")) {\r\n            headers.append(\""Accept\"", \""application/json\"");\r\n        }\r\n        if (!headers.has(\""Content-Type\"")) {\r\n            headers.append(\""Content-Type\"", \""application/json;odata=verbose;charset=utf-8\"");\r\n        }\r\n        if (!headers.has(\""X-ClientService-ClientTag\"")) {\r\n            headers.append(\""X-ClientService-ClientTag\"", \""PnPCoreJS:@pnp-1.3.4\"");\r\n        }\r\n        if (!headers.has(\""User-Agent\"")) {\r\n            // this marks the requests for understanding by the service\r\n            headers.append(\""User-Agent\"", \""NONISV|SharePointPnP|PnPCoreJS/1.3.4\"");\r\n        }\r\n        opts = extend(opts, { headers: headers });\r\n        if (opts.method && opts.method.toUpperCase() !== \""GET\"") {\r\n            // if we have either a request digest or an authorization header we don't need a digest\r\n            if (!headers.has(\""X-RequestDigest\"") && !headers.has(\""Authorization\"")) {\r\n                return this._digestCache.getDigest(extractWebUrl(url))\r\n                    .then(function (digest) {\r\n                    headers.append(\""X-RequestDigest\"", digest);\r\n                    return _this.fetchRaw(url, opts);\r\n                });\r\n            }\r\n        }\r\n        return this.fetchRaw(url, opts);\r\n    };\r\n    SPHttpClient.prototype.fetchRaw = function (url, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        // here we need to normalize the headers\r\n        var rawHeaders = new Headers();\r\n        mergeHeaders(rawHeaders, options.headers);\r\n        options = extend(options, { headers: rawHeaders });\r\n        var retry = function (ctx) {\r\n            // handles setting the proper timeout for a retry\r\n            var setRetry = function (response) {\r\n                var delay;\r\n                if (response.headers.has(\""Retry-After\"")) {\r\n                    // if we have gotten a header, use that value as the delay value\r\n                    delay = parseInt(response.headers.get(\""Retry-After\""), 10);\r\n                }\r\n                else {\r\n                    // grab our current delay\r\n                    delay = ctx.delay;\r\n                    // Increment our counters.\r\n                    ctx.delay *= 2;\r\n                }\r\n                ctx.attempts++;\r\n                // If we have exceeded the retry count, reject.\r\n                if (ctx.retryCount <= ctx.attempts) {\r\n                    ctx.reject(Error(\""Retry count exceeded (\"" + ctx.retryCount + \"") for request. Response status: [\"" + response.status + \""] \"" + response.statusText));\r\n                }\r\n                else {\r\n                    // Set our retry timeout for {delay} milliseconds.\r\n                    setTimeout(getCtxCallback(_this, retry, ctx), delay);\r\n                }\r\n            };\r\n            // send the actual request\r\n            _this._impl.fetch(url, options).then(function (response) {\r\n                if (response.status === 429) {\r\n                    // we have been throttled\r\n                    setRetry(response);\r\n                }\r\n                else {\r\n                    ctx.resolve(response);\r\n                }\r\n            }).catch(function (response) {\r\n                if (response.status === 503) {\r\n                    // http status code 503, we can retry this\r\n                    setRetry(response);\r\n                }\r\n                else {\r\n                    ctx.reject(response);\r\n                }\r\n            });\r\n        };\r\n        return new Promise(function (resolve, reject) {\r\n            var retryContext = {\r\n                attempts: 0,\r\n                delay: 100,\r\n                reject: reject,\r\n                resolve: resolve,\r\n                retryCount: 7,\r\n            };\r\n            retry.call(_this, retryContext);\r\n        });\r\n    };\r\n    SPHttpClient.prototype.get = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""GET\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    SPHttpClient.prototype.post = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""POST\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    SPHttpClient.prototype.patch = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""PATCH\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    SPHttpClient.prototype.delete = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var opts = extend(options, { method: \""DELETE\"" });\r\n        return this.fetch(url, opts);\r\n    };\r\n    return SPHttpClient;\r\n}());\r\nexport { SPHttpClient };\r\n//# sourceMappingURL=sphttpclient.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, combine, hOP } from \""@pnp/common\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { ODataParserBase } from \""@pnp/odata\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\nexport function odataUrlFrom(candidate) {\r\n    var parts = [];\r\n    var s = [\""odata.type\"", \""odata.editLink\"", \""__metadata\"", \""odata.metadata\""];\r\n    if (hOP(candidate, s[0]) && candidate[s[0]] === \""SP.Web\"") {\r\n        // webs return an absolute url in the editLink\r\n        if (hOP(candidate, s[1])) {\r\n            parts.push(candidate[s[1]]);\r\n        }\r\n        else if (hOP(candidate, s[2])) {\r\n            // we are dealing with verbose, which has an absolute uri\r\n            parts.push(candidate.__metadata.uri);\r\n        }\r\n    }\r\n    else {\r\n        if (hOP(candidate, s[3]) && hOP(candidate, s[1])) {\r\n            // we are dealign with minimal metadata (default)\r\n            parts.push(extractWebUrl(candidate[s[3]]), \""_api\"", candidate[s[1]]);\r\n        }\r\n        else if (hOP(candidate, s[1])) {\r\n            parts.push(\""_api\"", candidate[s[1]]);\r\n        }\r\n        else if (hOP(candidate, s[2])) {\r\n            // we are dealing with verbose, which has an absolute uri\r\n            parts.push(candidate.__metadata.uri);\r\n        }\r\n    }\r\n    if (parts.length < 1) {\r\n        Logger.write(\""No uri information found in ODataEntity parsing, chaining will fail for this object.\"", 2 /* Warning */);\r\n        return \""\"";\r\n    }\r\n    return combine.apply(void 0, parts);\r\n}\r\nvar SPODataEntityParserImpl = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPODataEntityParserImpl, _super);\r\n    function SPODataEntityParserImpl(factory) {\r\n        var _this = _super.call(this) || this;\r\n        _this.factory = factory;\r\n        _this.hydrate = function (d) {\r\n            var o = new _this.factory(odataUrlFrom(d), null);\r\n            return extend(o, d);\r\n        };\r\n        return _this;\r\n    }\r\n    SPODataEntityParserImpl.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return _super.prototype.parse.call(this, r).then(function (d) {\r\n            var o = new _this.factory(odataUrlFrom(d), null);\r\n            return extend(o, d);\r\n        });\r\n    };\r\n    return SPODataEntityParserImpl;\r\n}(ODataParserBase));\r\nvar SPODataEntityArrayParserImpl = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPODataEntityArrayParserImpl, _super);\r\n    function SPODataEntityArrayParserImpl(factory) {\r\n        var _this = _super.call(this) || this;\r\n        _this.factory = factory;\r\n        _this.hydrate = function (d) {\r\n            return d.map(function (v) {\r\n                var o = new _this.factory(odataUrlFrom(v), null);\r\n                return extend(o, v);\r\n            });\r\n        };\r\n        return _this;\r\n    }\r\n    SPODataEntityArrayParserImpl.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return _super.prototype.parse.call(this, r).then(function (d) {\r\n            return d.map(function (v) {\r\n                var o = new _this.factory(odataUrlFrom(v), null);\r\n                return extend(o, v);\r\n            });\r\n        });\r\n    };\r\n    return SPODataEntityArrayParserImpl;\r\n}(ODataParserBase));\r\nexport function spODataEntity(factory) {\r\n    return new SPODataEntityParserImpl(factory);\r\n}\r\nexport function spODataEntityArray(factory) {\r\n    return new SPODataEntityArrayParserImpl(factory);\r\n}\r\n//# sourceMappingURL=odata.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath, } from \""./sharepointqueryable\"";\r\nimport { spODataEntity, } from \""./odata\"";\r\nimport { dateAdd, hOP, } from \""@pnp/common\"";\r\n/**\r\n * Describes regional settings ODada object\r\n */\r\nvar RegionalSettings = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RegionalSettings, _super);\r\n    function RegionalSettings() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(RegionalSettings.prototype, \""installedLanguages\"", {\r\n        /**\r\n         * Gets the collection of languages used in a server farm.\r\n         */\r\n        get: function () {\r\n            return new InstalledLanguages(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RegionalSettings.prototype, \""globalInstalledLanguages\"", {\r\n        /**\r\n         * Gets the collection of language packs that are installed on the server.\r\n         */\r\n        get: function () {\r\n            return new InstalledLanguages(this, \""globalinstalledlanguages\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RegionalSettings.prototype, \""timeZone\"", {\r\n        /**\r\n         * Gets time zone\r\n         */\r\n        get: function () {\r\n            return new TimeZone(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RegionalSettings.prototype, \""timeZones\"", {\r\n        /**\r\n         * Gets time zones\r\n         */\r\n        get: function () {\r\n            return new TimeZones(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    RegionalSettings = tslib_1.__decorate([\r\n        defaultPath(\""regionalsettings\"")\r\n    ], RegionalSettings);\r\n    return RegionalSettings;\r\n}(SharePointQueryableInstance));\r\nexport { RegionalSettings };\r\n/**\r\n * Describes installed languages ODada queriable collection\r\n */\r\nvar InstalledLanguages = /** @class */ (function (_super) {\r\n    tslib_1.__extends(InstalledLanguages, _super);\r\n    function InstalledLanguages() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    InstalledLanguages = tslib_1.__decorate([\r\n        defaultPath(\""installedlanguages\"")\r\n    ], InstalledLanguages);\r\n    return InstalledLanguages;\r\n}(SharePointQueryableCollection));\r\nexport { InstalledLanguages };\r\n/**\r\n * Describes TimeZone ODada object\r\n */\r\nvar TimeZone = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeZone, _super);\r\n    function TimeZone() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeZone_1 = TimeZone;\r\n    /**\r\n     * Gets an Local Time by UTC Time\r\n     *\r\n     * @param utcTime UTC Time as Date or ISO String\r\n     */\r\n    TimeZone.prototype.utcToLocalTime = function (utcTime) {\r\n        var dateIsoString;\r\n        if (typeof utcTime === \""string\"") {\r\n            dateIsoString = utcTime;\r\n        }\r\n        else {\r\n            dateIsoString = utcTime.toISOString();\r\n        }\r\n        return this.clone(TimeZone_1, \""utctolocaltime('\"" + dateIsoString + \""')\"")\r\n            .postCore()\r\n            .then(function (res) { return hOP(res, \""UTCToLocalTime\"") ? res.UTCToLocalTime : res; });\r\n    };\r\n    /**\r\n     * Gets an UTC Time by Local Time\r\n     *\r\n     * @param localTime Local Time as Date or ISO String\r\n     */\r\n    TimeZone.prototype.localTimeToUTC = function (localTime) {\r\n        var dateIsoString;\r\n        if (typeof localTime === \""string\"") {\r\n            dateIsoString = localTime;\r\n        }\r\n        else {\r\n            dateIsoString = dateAdd(localTime, \""minute\"", localTime.getTimezoneOffset() * -1).toISOString();\r\n        }\r\n        return this.clone(TimeZone_1, \""localtimetoutc('\"" + dateIsoString + \""')\"")\r\n            .postCore()\r\n            .then(function (res) { return hOP(res, \""LocalTimeToUTC\"") ? res.LocalTimeToUTC : res; });\r\n    };\r\n    var TimeZone_1;\r\n    TimeZone = TimeZone_1 = tslib_1.__decorate([\r\n        defaultPath(\""timezone\"")\r\n    ], TimeZone);\r\n    return TimeZone;\r\n}(SharePointQueryableInstance));\r\nexport { TimeZone };\r\n/**\r\n * Describes time zones queriable collection\r\n */\r\nvar TimeZones = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeZones, _super);\r\n    function TimeZones() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeZones_1 = TimeZones;\r\n    // https://msdn.microsoft.com/en-us/library/office/jj247008.aspx - timezones ids\r\n    /**\r\n     * Gets an TimeZone by id\r\n     *\r\n     * @param id The integer id of the timezone to retrieve\r\n     */\r\n    TimeZones.prototype.getById = function (id) {\r\n        // do the post and merge the result into a TimeZone instance so the data and methods are available\r\n        return this.clone(TimeZones_1, \""GetById(\"" + id + \"")\"").postCore({}, spODataEntity(TimeZone));\r\n    };\r\n    var TimeZones_1;\r\n    TimeZones = TimeZones_1 = tslib_1.__decorate([\r\n        defaultPath(\""timezones\"")\r\n    ], TimeZones);\r\n    return TimeZones;\r\n}(SharePointQueryableCollection));\r\nexport { TimeZones };\r\n//# sourceMappingURL=regionalsettings.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nvar RelatedItemManagerImpl = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RelatedItemManagerImpl, _super);\r\n    function RelatedItemManagerImpl() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RelatedItemManagerImpl_1 = RelatedItemManagerImpl;\r\n    RelatedItemManagerImpl.FromUrl = function (url) {\r\n        if (url === null) {\r\n            return new RelatedItemManagerImpl_1(\""\"");\r\n        }\r\n        var index = url.indexOf(\""_api/\"");\r\n        if (index > -1) {\r\n            return new RelatedItemManagerImpl_1(url.substr(0, index));\r\n        }\r\n        return new RelatedItemManagerImpl_1(url);\r\n    };\r\n    RelatedItemManagerImpl.prototype.getRelatedItems = function (sourceListName, sourceItemId) {\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".GetRelatedItems\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n            }),\r\n        });\r\n    };\r\n    RelatedItemManagerImpl.prototype.getPageOneRelatedItems = function (sourceListName, sourceItemId) {\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".GetPageOneRelatedItems\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n            }),\r\n        });\r\n    };\r\n    RelatedItemManagerImpl.prototype.addSingleLink = function (sourceListName, sourceItemId, sourceWebUrl, targetListName, targetItemID, targetWebUrl, tryAddReverseLink) {\r\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".AddSingleLink\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n                SourceWebUrl: sourceWebUrl,\r\n                TargetItemID: targetItemID,\r\n                TargetListName: targetListName,\r\n                TargetWebUrl: targetWebUrl,\r\n                TryAddReverseLink: tryAddReverseLink,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Adds a related item link from an item specified by list name and item id, to an item specified by url\r\n     *\r\n     * @param sourceListName The source list name or list id\r\n     * @param sourceItemId The source item id\r\n     * @param targetItemUrl The target item url\r\n     * @param tryAddReverseLink If set to true try to add the reverse link (will not return error if it fails)\r\n     */\r\n    RelatedItemManagerImpl.prototype.addSingleLinkToUrl = function (sourceListName, sourceItemId, targetItemUrl, tryAddReverseLink) {\r\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".AddSingleLinkToUrl\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n                TargetItemUrl: targetItemUrl,\r\n                TryAddReverseLink: tryAddReverseLink,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Adds a related item link from an item specified by url, to an item specified by list name and item id\r\n     *\r\n     * @param sourceItemUrl The source item url\r\n     * @param targetListName The target list name or list id\r\n     * @param targetItemId The target item id\r\n     * @param tryAddReverseLink If set to true try to add the reverse link (will not return error if it fails)\r\n     */\r\n    RelatedItemManagerImpl.prototype.addSingleLinkFromUrl = function (sourceItemUrl, targetListName, targetItemId, tryAddReverseLink) {\r\n        if (tryAddReverseLink === void 0) { tryAddReverseLink = false; }\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".AddSingleLinkFromUrl\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemUrl: sourceItemUrl,\r\n                TargetItemID: targetItemId,\r\n                TargetListName: targetListName,\r\n                TryAddReverseLink: tryAddReverseLink,\r\n            }),\r\n        });\r\n    };\r\n    RelatedItemManagerImpl.prototype.deleteSingleLink = function (sourceListName, sourceItemId, sourceWebUrl, targetListName, targetItemId, targetWebUrl, tryDeleteReverseLink) {\r\n        if (tryDeleteReverseLink === void 0) { tryDeleteReverseLink = false; }\r\n        var query = this.clone(RelatedItemManagerImpl_1, null);\r\n        query.concat(\"".DeleteSingleLink\"");\r\n        return query.postCore({\r\n            body: jsS({\r\n                SourceItemID: sourceItemId,\r\n                SourceListName: sourceListName,\r\n                SourceWebUrl: sourceWebUrl,\r\n                TargetItemID: targetItemId,\r\n                TargetListName: targetListName,\r\n                TargetWebUrl: targetWebUrl,\r\n                TryDeleteReverseLink: tryDeleteReverseLink,\r\n            }),\r\n        });\r\n    };\r\n    var RelatedItemManagerImpl_1;\r\n    RelatedItemManagerImpl = RelatedItemManagerImpl_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/SP.RelatedItemManager\"")\r\n    ], RelatedItemManagerImpl);\r\n    return RelatedItemManagerImpl;\r\n}(SharePointQueryable));\r\nexport { RelatedItemManagerImpl };\r\n//# sourceMappingURL=relateditems.js.map"",""import { Search } from \""./search\"";\r\nimport { SearchSuggest } from \""./searchsuggest\"";\r\nimport { Site } from \""./site\"";\r\nimport { Web } from \""./webs\"";\r\nimport { UserProfileQuery } from \""./userprofiles\"";\r\nimport { NavigationService } from \""./navigation\"";\r\nimport { SocialQuery } from \""./social\"";\r\nimport { SiteScripts } from \""./sitescripts\"";\r\nimport { SiteDesigns } from \""./sitedesigns\"";\r\nimport { UtilityMethod } from \""./utilities\"";\r\nimport { setup as _setup, } from \""./config/splibconfig\"";\r\nimport { HubSites } from \""./hubsites\"";\r\n/**\r\n * Root of the SharePoint REST module\r\n */\r\nvar SPRest = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the SPRest class\r\n     *\r\n     * @param options Additional options\r\n     * @param baseUrl A string that should form the base part of the url\r\n     */\r\n    function SPRest(_options, _baseUrl) {\r\n        if (_options === void 0) { _options = {}; }\r\n        if (_baseUrl === void 0) { _baseUrl = \""\""; }\r\n        this._options = _options;\r\n        this._baseUrl = _baseUrl;\r\n    }\r\n    /**\r\n     * Configures instance with additional options and baseUrl.\r\n     * Provided configuration used by other objects in a chain\r\n     *\r\n     * @param options Additional options\r\n     * @param baseUrl A string that should form the base part of the url\r\n     */\r\n    SPRest.prototype.configure = function (options, baseUrl) {\r\n        if (baseUrl === void 0) { baseUrl = \""\""; }\r\n        return new SPRest(options, baseUrl);\r\n    };\r\n    /**\r\n     * Global SharePoint configuration options\r\n     *\r\n     * @param config The SharePoint configuration to apply\r\n     */\r\n    SPRest.prototype.setup = function (config) {\r\n        _setup(config);\r\n    };\r\n    /**\r\n     * Executes a search against this web context\r\n     *\r\n     * @param query The SearchQuery definition\r\n     */\r\n    SPRest.prototype.searchSuggest = function (query) {\r\n        var finalQuery;\r\n        if (typeof query === \""string\"") {\r\n            finalQuery = { querytext: query };\r\n        }\r\n        else {\r\n            finalQuery = query;\r\n        }\r\n        return this.create(SearchSuggest).execute(finalQuery);\r\n    };\r\n    /**\r\n     * Executes a search against this web context\r\n     *\r\n     * @param query The SearchQuery definition\r\n     */\r\n    SPRest.prototype.search = function (query) {\r\n        return this.create(Search).execute(query);\r\n    };\r\n    /**\r\n     * Executes the provided search query, caching the results\r\n     *\r\n     * @param query The SearchQuery definition\r\n     * @param options The set of caching options used to store the results\r\n     */\r\n    SPRest.prototype.searchWithCaching = function (query, options) {\r\n        return this.create(Search).usingCaching(options).execute(query);\r\n    };\r\n    Object.defineProperty(SPRest.prototype, \""site\"", {\r\n        /**\r\n         * Begins a site collection scoped REST request\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.create(Site);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""web\"", {\r\n        /**\r\n         * Begins a web scoped REST request\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.create(Web);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""profiles\"", {\r\n        /**\r\n         * Access to user profile methods\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.create(UserProfileQuery);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""social\"", {\r\n        /**\r\n         * Access to social methods\r\n         */\r\n        get: function () {\r\n            return this.create(SocialQuery);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""navigation\"", {\r\n        /**\r\n         * Access to the site collection level navigation service\r\n         */\r\n        get: function () {\r\n            return this.create(NavigationService);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Creates a new batch object for use with the SharePointQueryable.addToBatch method\r\n     *\r\n     */\r\n    SPRest.prototype.createBatch = function () {\r\n        return this.web.createBatch();\r\n    };\r\n    Object.defineProperty(SPRest.prototype, \""utility\"", {\r\n        /**\r\n         * Static utilities methods from SP.Utilities.Utility\r\n         */\r\n        get: function () {\r\n            return this.create(UtilityMethod, \""\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""siteScripts\"", {\r\n        /**\r\n         * Access to sitescripts methods\r\n         */\r\n        get: function () {\r\n            return this.create(SiteScripts, \""\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""siteDesigns\"", {\r\n        /**\r\n         * Access to sitedesigns methods\r\n         */\r\n        get: function () {\r\n            return this.create(SiteDesigns, \""\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SPRest.prototype, \""hubSites\"", {\r\n        /**\r\n         * Access to Hub Site methods\r\n         */\r\n        get: function () {\r\n            return this.create(HubSites);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the Web instance representing the tenant app catalog web\r\n     */\r\n    SPRest.prototype.getTenantAppCatalogWeb = function () {\r\n        var _this = this;\r\n        return this.create(Web, \""_api/SP_TenantSettings_Current\"").get().then(function (r) {\r\n            return (new Web(r.CorporateCatalogUrl)).configure(_this._options);\r\n        });\r\n    };\r\n    /**\r\n     * Handles creating and configuring the objects returned from this class\r\n     *\r\n     * @param fm The factory method used to create the instance\r\n     * @param path Optional additional path information to pass to the factory method\r\n     */\r\n    SPRest.prototype.create = function (fm, path) {\r\n        return new fm(this._baseUrl, path).configure(this._options);\r\n    };\r\n    return SPRest;\r\n}());\r\nexport { SPRest };\r\nexport var sp = new SPRest();\r\n//# sourceMappingURL=rest.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SiteGroups } from \""./sitegroups\"";\r\nimport { extend, jsS, hOP } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a set of role assignments for the current scope\r\n *\r\n */\r\nvar RoleAssignments = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleAssignments, _super);\r\n    function RoleAssignments() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RoleAssignments_1 = RoleAssignments;\r\n    /**\r\n     * Gets the role assignment associated with the specified principal id from the collection.\r\n     *\r\n     * @param id The id of the role assignment\r\n     */\r\n    RoleAssignments.prototype.getById = function (id) {\r\n        var ra = new RoleAssignment(this);\r\n        ra.concat(\""(\"" + id + \"")\"");\r\n        return ra;\r\n    };\r\n    /**\r\n     * Adds a new role assignment with the specified principal and role definitions to the collection\r\n     *\r\n     * @param principalId The id of the user or group to assign permissions to\r\n     * @param roleDefId The id of the role definition that defines the permissions to assign\r\n     *\r\n     */\r\n    RoleAssignments.prototype.add = function (principalId, roleDefId) {\r\n        return this.clone(RoleAssignments_1, \""addroleassignment(principalid=\"" + principalId + \"", roledefid=\"" + roleDefId + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the role assignment with the specified principal and role definition from the collection\r\n     *\r\n     * @param principalId The id of the user or group in the role assignment\r\n     * @param roleDefId The id of the role definition in the role assignment\r\n     *\r\n     */\r\n    RoleAssignments.prototype.remove = function (principalId, roleDefId) {\r\n        return this.clone(RoleAssignments_1, \""removeroleassignment(principalid=\"" + principalId + \"", roledefid=\"" + roleDefId + \"")\"").postCore();\r\n    };\r\n    var RoleAssignments_1;\r\n    RoleAssignments = RoleAssignments_1 = tslib_1.__decorate([\r\n        defaultPath(\""roleassignments\"")\r\n    ], RoleAssignments);\r\n    return RoleAssignments;\r\n}(SharePointQueryableCollection));\r\nexport { RoleAssignments };\r\n/**\r\n * Describes a role assignment\r\n *\r\n */\r\nvar RoleAssignment = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleAssignment, _super);\r\n    function RoleAssignment() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Deletes this role assignment\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(RoleAssignment.prototype, \""groups\"", {\r\n        /**\r\n         * Gets the groups that directly belong to the access control list (ACL) for this securable object\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroups(this, \""groups\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RoleAssignment.prototype, \""bindings\"", {\r\n        /**\r\n         * Gets the role definition bindings for this role assignment\r\n         *\r\n         */\r\n        get: function () {\r\n            return new RoleDefinitionBindings(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return RoleAssignment;\r\n}(SharePointQueryableInstance));\r\nexport { RoleAssignment };\r\n/**\r\n * Describes a collection of role definitions\r\n *\r\n */\r\nvar RoleDefinitions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleDefinitions, _super);\r\n    function RoleDefinitions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets the role definition with the specified id from the collection\r\n     *\r\n     * @param id The id of the role definition\r\n     *\r\n     */\r\n    RoleDefinitions.prototype.getById = function (id) {\r\n        return new RoleDefinition(this, \""getById(\"" + id + \"")\"");\r\n    };\r\n    /**\r\n     * Gets the role definition with the specified name\r\n     *\r\n     * @param name The name of the role definition\r\n     *\r\n     */\r\n    RoleDefinitions.prototype.getByName = function (name) {\r\n        return new RoleDefinition(this, \""getbyname('\"" + name + \""')\"");\r\n    };\r\n    /**\r\n     * Gets the role definition with the specified role type\r\n     *\r\n     * @param roleTypeKind The roletypekind of the role definition (None=0, Guest=1, Reader=2, Contributor=3, WebDesigner=4, Administrator=5, Editor=6, System=7)\r\n     *\r\n     */\r\n    RoleDefinitions.prototype.getByType = function (roleTypeKind) {\r\n        return new RoleDefinition(this, \""getbytype(\"" + roleTypeKind + \"")\"");\r\n    };\r\n    /**\r\n     * Creates a role definition\r\n     *\r\n     * @param name The new role definition's name\r\n     * @param description The new role definition's description\r\n     * @param order The order in which the role definition appears\r\n     * @param basePermissions The permissions mask for this role definition\r\n     *\r\n     */\r\n    RoleDefinitions.prototype.add = function (name, description, order, basePermissions) {\r\n        var _this = this;\r\n        var postBody = jsS({\r\n            BasePermissions: {\r\n                High: basePermissions.High.toString(),\r\n                Low: basePermissions.Low.toString(),\r\n            },\r\n            Description: description,\r\n            Name: name,\r\n            Order: order,\r\n            __metadata: { \""type\"": \""SP.RoleDefinition\"" },\r\n        });\r\n        return this.postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                definition: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    RoleDefinitions = tslib_1.__decorate([\r\n        defaultPath(\""roledefinitions\"")\r\n    ], RoleDefinitions);\r\n    return RoleDefinitions;\r\n}(SharePointQueryableCollection));\r\nexport { RoleDefinitions };\r\n/**\r\n * Describes a role definition\r\n *\r\n */\r\nvar RoleDefinition = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleDefinition, _super);\r\n    function RoleDefinition() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Deletes this role definition\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n        /* tslint:enable */\r\n    }\r\n    /**\r\n     * Updates this role definition with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the role definition\r\n     */\r\n    /* tslint:disable no-string-literal */\r\n    RoleDefinition.prototype.update = function (properties) {\r\n        var _this = this;\r\n        if (hOP(properties, \""BasePermissions\"") !== undefined) {\r\n            properties[\""BasePermissions\""] = extend({ __metadata: { type: \""SP.BasePermissions\"" } }, {\r\n                High: properties[\""BasePermissions\""].High.toString(),\r\n                Low: properties[\""BasePermissions\""].Low.toString(),\r\n            });\r\n        }\r\n        var postBody = jsS(extend(metadata(\""SP.RoleDefinition\""), properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            var retDef = _this;\r\n            if (hOP(properties, \""Name\"")) {\r\n                var parent_1 = _this.getParent(RoleDefinitions, _this.parentUrl, \""\"");\r\n                retDef = parent_1.getByName(properties[\""Name\""]);\r\n            }\r\n            return {\r\n                data: data,\r\n                definition: retDef,\r\n            };\r\n        });\r\n    };\r\n    return RoleDefinition;\r\n}(SharePointQueryableInstance));\r\nexport { RoleDefinition };\r\n/**\r\n * Describes the role definitons bound to a role assignment object\r\n *\r\n */\r\nvar RoleDefinitionBindings = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RoleDefinitionBindings, _super);\r\n    function RoleDefinitionBindings() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RoleDefinitionBindings = tslib_1.__decorate([\r\n        defaultPath(\""roledefinitionbindings\"")\r\n    ], RoleDefinitionBindings);\r\n    return RoleDefinitionBindings;\r\n}(SharePointQueryableCollection));\r\nexport { RoleDefinitionBindings };\r\n//# sourceMappingURL=roles.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS, hOP, getHashCode, objectDefinedNotNull, isArray } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\nimport { CachingOptions } from \""@pnp/odata\"";\r\nvar funcs = new Map([\r\n    [\""text\"", \""Querytext\""],\r\n    [\""template\"", \""QueryTemplate\""],\r\n    [\""sourceId\"", \""SourceId\""],\r\n    [\""trimDuplicatesIncludeId\"", \""\""],\r\n    [\""startRow\"", \""\""],\r\n    [\""rowLimit\"", \""\""],\r\n    [\""rankingModelId\"", \""\""],\r\n    [\""rowsPerPage\"", \""\""],\r\n    [\""selectProperties\"", \""\""],\r\n    [\""culture\"", \""\""],\r\n    [\""timeZoneId\"", \""\""],\r\n    [\""refinementFilters\"", \""\""],\r\n    [\""refiners\"", \""\""],\r\n    [\""hiddenConstraints\"", \""\""],\r\n    [\""sortList\"", \""\""],\r\n    [\""timeout\"", \""\""],\r\n    [\""hithighlightedProperties\"", \""\""],\r\n    [\""clientType\"", \""\""],\r\n    [\""personalizationData\"", \""\""],\r\n    [\""resultsURL\"", \""\""],\r\n    [\""queryTag\"", \""\""],\r\n    [\""properties\"", \""\""],\r\n    [\""queryTemplatePropertiesUrl\"", \""\""],\r\n    [\""reorderingRules\"", \""\""],\r\n    [\""hitHighlightedMultivaluePropertyLimit\"", \""\""],\r\n    [\""collapseSpecification\"", \""\""],\r\n    [\""uiLanguage\"", \""\""],\r\n    [\""desiredSnippetLength\"", \""\""],\r\n    [\""maxSnippetLength\"", \""\""],\r\n    [\""summaryLength\"", \""\""],\r\n]);\r\nvar props = new Map([]);\r\nfunction toPropCase(str) {\r\n    return str.replace(/^(.)/, function ($1) { return $1.toUpperCase(); });\r\n}\r\n/**\r\n * Creates a new instance of the SearchQueryBuilder\r\n *\r\n * @param queryText Initial query text\r\n * @param _query Any initial query configuration\r\n */\r\nexport function SearchQueryBuilder(queryText, _query) {\r\n    if (queryText === void 0) { queryText = \""\""; }\r\n    if (_query === void 0) { _query = {}; }\r\n    return new Proxy({\r\n        query: Object.assign({\r\n            Querytext: queryText,\r\n        }, _query),\r\n    }, {\r\n        get: function (self, propertyKey, proxy) {\r\n            var pk = propertyKey.toString();\r\n            if (pk === \""toSearchQuery\"") {\r\n                return function () { return self.query; };\r\n            }\r\n            if (funcs.has(pk)) {\r\n                return function () {\r\n                    var value = [];\r\n                    for (var _i = 0; _i < arguments.length; _i++) {\r\n                        value[_i] = arguments[_i];\r\n                    }\r\n                    var mappedPk = funcs.get(pk);\r\n                    self.query[mappedPk.length > 0 ? mappedPk : toPropCase(pk)] = value.length > 1 ? value : value[0];\r\n                    return proxy;\r\n                };\r\n            }\r\n            var propKey = props.has(pk) ? props.get(pk) : toPropCase(pk);\r\n            self.query[propKey] = true;\r\n            return proxy;\r\n        },\r\n    });\r\n}\r\n/**\r\n * Describes the search API\r\n *\r\n */\r\nvar Search = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Search, _super);\r\n    function Search() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * @returns Promise\r\n     */\r\n    Search.prototype.execute = function (queryInit) {\r\n        var _this = this;\r\n        var query = this.parseQuery(queryInit);\r\n        var postBody = jsS({\r\n            request: extend(metadata(\""Microsoft.Office.Server.Search.REST.SearchRequest\""), Object.assign({}, query, {\r\n                HitHighlightedProperties: this.fixArrProp(query.HitHighlightedProperties),\r\n                Properties: this.fixArrProp(query.Properties),\r\n                RefinementFilters: this.fixArrProp(query.RefinementFilters),\r\n                ReorderingRules: this.fixArrProp(query.ReorderingRules),\r\n                SelectProperties: this.fixArrProp(query.SelectProperties),\r\n                SortList: this.fixArrProp(query.SortList),\r\n            })),\r\n        });\r\n        // if we are using caching with this search request, then we need to handle some work upfront to enable that\r\n        if (this._useCaching) {\r\n            // force use of the cache for this request if .usingCaching was called\r\n            this._forceCaching = true;\r\n            // because all the requests use the same url they would collide in the cache we use a special key\r\n            var cacheKey = \""PnPjs.SearchWithCaching(\"" + getHashCode(postBody) + \"")\"";\r\n            if (objectDefinedNotNull(this._cachingOptions)) {\r\n                // if our key ends in the postquery url we overwrite it\r\n                if (/\\/_api\\/search\\/postquery$/i.test(this._cachingOptions.key)) {\r\n                    this._cachingOptions.key = cacheKey;\r\n                }\r\n            }\r\n            else {\r\n                this._cachingOptions = new CachingOptions(cacheKey);\r\n            }\r\n        }\r\n        return this.postCore({ body: postBody }).then(function (data) { return new SearchResults(data, _this.toUrl(), query); });\r\n    };\r\n    /**\r\n     * Fix array property\r\n     *\r\n     * @param prop property to fix for container struct\r\n     */\r\n    Search.prototype.fixArrProp = function (prop) {\r\n        if (typeof prop === \""undefined\"") {\r\n            return ({ results: [] });\r\n        }\r\n        prop = isArray(prop) ? prop : [prop];\r\n        return hOP(prop, \""results\"") ? prop : { results: prop };\r\n    };\r\n    /**\r\n     * Translates one of the query initializers into a SearchQuery instance\r\n     *\r\n     * @param query\r\n     */\r\n    Search.prototype.parseQuery = function (query) {\r\n        var finalQuery;\r\n        if (typeof query === \""string\"") {\r\n            finalQuery = { Querytext: query };\r\n        }\r\n        else if (query.toSearchQuery) {\r\n            finalQuery = query.toSearchQuery();\r\n        }\r\n        else {\r\n            finalQuery = query;\r\n        }\r\n        return finalQuery;\r\n    };\r\n    Search = tslib_1.__decorate([\r\n        defaultPath(\""_api/search/postquery\"")\r\n    ], Search);\r\n    return Search;\r\n}(SharePointQueryableInstance));\r\nexport { Search };\r\n/**\r\n * Describes the SearchResults class, which returns the formatted and raw version of the query response\r\n */\r\nvar SearchResults = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the SearchResult class\r\n     *\r\n     */\r\n    function SearchResults(rawResponse, _url, _query, _raw, _primary) {\r\n        if (_raw === void 0) { _raw = null; }\r\n        if (_primary === void 0) { _primary = null; }\r\n        this._url = _url;\r\n        this._query = _query;\r\n        this._raw = _raw;\r\n        this._primary = _primary;\r\n        this._raw = rawResponse.postquery ? rawResponse.postquery : rawResponse;\r\n    }\r\n    Object.defineProperty(SearchResults.prototype, \""ElapsedTime\"", {\r\n        get: function () {\r\n            return this.RawSearchResults.ElapsedTime;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""RowCount\"", {\r\n        get: function () {\r\n            return this.RawSearchResults.PrimaryQueryResult.RelevantResults.RowCount;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""TotalRows\"", {\r\n        get: function () {\r\n            return this.RawSearchResults.PrimaryQueryResult.RelevantResults.TotalRows;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""TotalRowsIncludingDuplicates\"", {\r\n        get: function () {\r\n            return this.RawSearchResults.PrimaryQueryResult.RelevantResults.TotalRowsIncludingDuplicates;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""RawSearchResults\"", {\r\n        get: function () {\r\n            return this._raw;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SearchResults.prototype, \""PrimarySearchResults\"", {\r\n        get: function () {\r\n            if (this._primary === null) {\r\n                this._primary = this.formatSearchResults(this._raw.PrimaryQueryResult.RelevantResults.Table.Rows);\r\n            }\r\n            return this._primary;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a page of results\r\n     *\r\n     * @param pageNumber Index of the page to return. Used to determine StartRow\r\n     * @param pageSize Optional, items per page (default = 10)\r\n     */\r\n    SearchResults.prototype.getPage = function (pageNumber, pageSize) {\r\n        // if we got all the available rows we don't have another page\r\n        if (this.TotalRows < this.RowCount) {\r\n            return Promise.resolve(null);\r\n        }\r\n        // if pageSize is supplied, then we use that regardless of any previous values\r\n        // otherwise get the previous RowLimit or default to 10\r\n        var rows = pageSize !== undefined ? pageSize : hOP(this._query, \""RowLimit\"") ? this._query.RowLimit : 10;\r\n        var query = extend(this._query, {\r\n            RowLimit: rows,\r\n            StartRow: rows * (pageNumber - 1),\r\n        });\r\n        // we have reached the end\r\n        if (query.StartRow > this.TotalRows) {\r\n            return Promise.resolve(null);\r\n        }\r\n        var search = new Search(this._url, null);\r\n        return search.execute(query);\r\n    };\r\n    /**\r\n     * Formats a search results array\r\n     *\r\n     * @param rawResults The array to process\r\n     */\r\n    SearchResults.prototype.formatSearchResults = function (rawResults) {\r\n        var results = new Array();\r\n        var tempResults = rawResults.results ? rawResults.results : rawResults;\r\n        for (var _i = 0, tempResults_1 = tempResults; _i < tempResults_1.length; _i++) {\r\n            var tempResult = tempResults_1[_i];\r\n            var cells = tempResult.Cells.results ? tempResult.Cells.results : tempResult.Cells;\r\n            results.push(cells.reduce(function (res, cell) {\r\n                Object.defineProperty(res, cell.Key, {\r\n                    configurable: false,\r\n                    enumerable: true,\r\n                    value: cell.Value,\r\n                    writable: false,\r\n                });\r\n                return res;\r\n            }, {}));\r\n        }\r\n        return results;\r\n    };\r\n    return SearchResults;\r\n}());\r\nexport { SearchResults };\r\n/**\r\n * defines the SortDirection enum\r\n */\r\nexport var SortDirection;\r\n(function (SortDirection) {\r\n    SortDirection[SortDirection[\""Ascending\""] = 0] = \""Ascending\"";\r\n    SortDirection[SortDirection[\""Descending\""] = 1] = \""Descending\"";\r\n    SortDirection[SortDirection[\""FQLFormula\""] = 2] = \""FQLFormula\"";\r\n})(SortDirection || (SortDirection = {}));\r\n/**\r\n * defines the ReorderingRuleMatchType  enum\r\n */\r\nexport var ReorderingRuleMatchType;\r\n(function (ReorderingRuleMatchType) {\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ResultContainsKeyword\""] = 0] = \""ResultContainsKeyword\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""TitleContainsKeyword\""] = 1] = \""TitleContainsKeyword\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""TitleMatchesKeyword\""] = 2] = \""TitleMatchesKeyword\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""UrlStartsWith\""] = 3] = \""UrlStartsWith\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""UrlExactlyMatches\""] = 4] = \""UrlExactlyMatches\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ContentTypeIs\""] = 5] = \""ContentTypeIs\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""FileExtensionMatches\""] = 6] = \""FileExtensionMatches\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ResultHasTag\""] = 7] = \""ResultHasTag\"";\r\n    ReorderingRuleMatchType[ReorderingRuleMatchType[\""ManualCondition\""] = 8] = \""ManualCondition\"";\r\n})(ReorderingRuleMatchType || (ReorderingRuleMatchType = {}));\r\n/**\r\n * Specifies the type value for the property\r\n */\r\nexport var QueryPropertyValueType;\r\n(function (QueryPropertyValueType) {\r\n    QueryPropertyValueType[QueryPropertyValueType[\""None\""] = 0] = \""None\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""StringType\""] = 1] = \""StringType\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""Int32Type\""] = 2] = \""Int32Type\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""BooleanType\""] = 3] = \""BooleanType\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""StringArrayType\""] = 4] = \""StringArrayType\"";\r\n    QueryPropertyValueType[QueryPropertyValueType[\""UnSupportedType\""] = 5] = \""UnSupportedType\"";\r\n})(QueryPropertyValueType || (QueryPropertyValueType = {}));\r\nvar SearchBuiltInSourceId = /** @class */ (function () {\r\n    function SearchBuiltInSourceId() {\r\n    }\r\n    SearchBuiltInSourceId.Documents = \""e7ec8cee-ded8-43c9-beb5-436b54b31e84\"";\r\n    SearchBuiltInSourceId.ItemsMatchingContentType = \""5dc9f503-801e-4ced-8a2c-5d1237132419\"";\r\n    SearchBuiltInSourceId.ItemsMatchingTag = \""e1327b9c-2b8c-4b23-99c9-3730cb29c3f7\"";\r\n    SearchBuiltInSourceId.ItemsRelatedToCurrentUser = \""48fec42e-4a92-48ce-8363-c2703a40e67d\"";\r\n    SearchBuiltInSourceId.ItemsWithSameKeywordAsThisItem = \""5c069288-1d17-454a-8ac6-9c642a065f48\"";\r\n    SearchBuiltInSourceId.LocalPeopleResults = \""b09a7990-05ea-4af9-81ef-edfab16c4e31\"";\r\n    SearchBuiltInSourceId.LocalReportsAndDataResults = \""203fba36-2763-4060-9931-911ac8c0583b\"";\r\n    SearchBuiltInSourceId.LocalSharePointResults = \""8413cd39-2156-4e00-b54d-11efd9abdb89\"";\r\n    SearchBuiltInSourceId.LocalVideoResults = \""78b793ce-7956-4669-aa3b-451fc5defebf\"";\r\n    SearchBuiltInSourceId.Pages = \""5e34578e-4d08-4edc-8bf3-002acf3cdbcc\"";\r\n    SearchBuiltInSourceId.Pictures = \""38403c8c-3975-41a8-826e-717f2d41568a\"";\r\n    SearchBuiltInSourceId.Popular = \""97c71db1-58ce-4891-8b64-585bc2326c12\"";\r\n    SearchBuiltInSourceId.RecentlyChangedItems = \""ba63bbae-fa9c-42c0-b027-9a878f16557c\"";\r\n    SearchBuiltInSourceId.RecommendedItems = \""ec675252-14fa-4fbe-84dd-8d098ed74181\"";\r\n    SearchBuiltInSourceId.Wiki = \""9479bf85-e257-4318-b5a8-81a180f5faa1\"";\r\n    return SearchBuiltInSourceId;\r\n}());\r\nexport { SearchBuiltInSourceId };\r\n//# sourceMappingURL=search.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { hOP } from \""@pnp/common\"";\r\nvar SearchSuggest = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SearchSuggest, _super);\r\n    function SearchSuggest() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SearchSuggest.prototype.execute = function (query) {\r\n        this.mapQueryToQueryString(query);\r\n        return this.get().then(function (response) {\r\n            var mapper = hOP(response, \""suggest\"") ? function (s) { return response.suggest[s].results; } : function (s) { return response[s]; };\r\n            return {\r\n                PeopleNames: mapper(\""PeopleNames\""),\r\n                PersonalResults: mapper(\""PersonalResults\""),\r\n                Queries: mapper(\""Queries\""),\r\n            };\r\n        });\r\n    };\r\n    SearchSuggest.prototype.mapQueryToQueryString = function (query) {\r\n        var _this = this;\r\n        var setProp = function (q) { return function (checkProp) { return function (sp) {\r\n            if (hOP(q, checkProp)) {\r\n                _this.query.set(sp, q[checkProp].toString());\r\n            }\r\n        }; }; };\r\n        this.query.set(\""querytext\"", \""'\"" + query.querytext + \""'\"");\r\n        var querySetter = setProp(query);\r\n        querySetter(\""count\"")(\""inumberofquerysuggestions\"");\r\n        querySetter(\""personalCount\"")(\""inumberofresultsuggestions\"");\r\n        querySetter(\""preQuery\"")(\""fprequerysuggestions\"");\r\n        querySetter(\""hitHighlighting\"")(\""fhithighlighting\"");\r\n        querySetter(\""capitalize\"")(\""fcapitalizefirstletters\"");\r\n        querySetter(\""culture\"")(\""culture\"");\r\n        querySetter(\""stemming\"")(\""enablestemming\"");\r\n        querySetter(\""includePeople\"")(\""showpeoplenamesuggestions\"");\r\n        querySetter(\""queryRules\"")(\""enablequeryrules\"");\r\n        querySetter(\""prefixMatch\"")(\""fprefixmatchallterms\"");\r\n    };\r\n    SearchSuggest = tslib_1.__decorate([\r\n        defaultPath(\""_api/search/suggest\"")\r\n    ], SearchSuggest);\r\n    return SearchSuggest;\r\n}(SharePointQueryableInstance));\r\nexport { SearchSuggest };\r\n//# sourceMappingURL=searchsuggest.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { combine, isUrlAbsolute, mergeOptions, extend, getGUID, jsS, } from \""@pnp/common\"";\r\nimport { ODataQueryable, } from \""@pnp/odata\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { SPHttpClient } from \""./net/sphttpclient\"";\r\nimport { toAbsoluteUrl } from \""./utils/toabsoluteurl\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * SharePointQueryable Base Class\r\n *\r\n */\r\nvar SharePointQueryable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryable, _super);\r\n    /**\r\n     * Creates a new instance of the SharePointQueryable class\r\n     *\r\n     * @constructor\r\n     * @param baseUrl A string or SharePointQueryable that should form the base part of the url\r\n     *\r\n     */\r\n    function SharePointQueryable(baseUrl, path) {\r\n        var _this = _super.call(this) || this;\r\n        _this._forceCaching = false;\r\n        if (typeof baseUrl === \""string\"") {\r\n            // we need to do some extra parsing to get the parent url correct if we are\r\n            // being created from just a string.\r\n            if (isUrlAbsolute(baseUrl) || baseUrl.lastIndexOf(\""/\"") < 0) {\r\n                _this._parentUrl = baseUrl;\r\n                _this._url = combine(baseUrl, path);\r\n            }\r\n            else if (baseUrl.lastIndexOf(\""/\"") > baseUrl.lastIndexOf(\""(\"")) {\r\n                // .../items(19)/fields\r\n                var index = baseUrl.lastIndexOf(\""/\"");\r\n                _this._parentUrl = baseUrl.slice(0, index);\r\n                path = combine(baseUrl.slice(index), path);\r\n                _this._url = combine(_this._parentUrl, path);\r\n            }\r\n            else {\r\n                // .../items(19)\r\n                var index = baseUrl.lastIndexOf(\""(\"");\r\n                _this._parentUrl = baseUrl.slice(0, index);\r\n                _this._url = combine(baseUrl, path);\r\n            }\r\n        }\r\n        else {\r\n            _this.extend(baseUrl, path);\r\n            var target = baseUrl.query.get(\""@target\"");\r\n            if (target !== undefined) {\r\n                _this.query.set(\""@target\"", target);\r\n            }\r\n        }\r\n        return _this;\r\n    }\r\n    /**\r\n     * Creates a new instance of the supplied factory and extends this into that new instance\r\n     *\r\n     * @param factory constructor for the new SharePointQueryable\r\n     */\r\n    SharePointQueryable.prototype.as = function (factory) {\r\n        var o = new factory(this._url, null);\r\n        return extend(o, this, true);\r\n    };\r\n    /**\r\n     * Gets the full url with query information\r\n     *\r\n     */\r\n    SharePointQueryable.prototype.toUrlAndQuery = function () {\r\n        var aliasedParams = new Map(this.query);\r\n        var url = this.toUrl().replace(/'!(@.*?)::(.*?)'/ig, function (match, labelName, value) {\r\n            Logger.write(\""Rewriting aliased parameter from match \"" + match + \"" to label: \"" + labelName + \"" value: \"" + value, 0 /* Verbose */);\r\n            aliasedParams.set(labelName, \""'\"" + value + \""'\"");\r\n            return labelName;\r\n        });\r\n        if (aliasedParams.size > 0) {\r\n            var char = url.indexOf(\""?\"") > -1 ? \""&\"" : \""?\"";\r\n            url += \""\"" + char + Array.from(aliasedParams).map(function (v) { return v[0] + \""=\"" + v[1]; }).join(\""&\"");\r\n        }\r\n        return url;\r\n    };\r\n    /**\r\n     * Choose which fields to return\r\n     *\r\n     * @param selects One or more fields to return\r\n     */\r\n    SharePointQueryable.prototype.select = function () {\r\n        var selects = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            selects[_i] = arguments[_i];\r\n        }\r\n        if (selects.length > 0) {\r\n            this.query.set(\""$select\"", selects.join(\"",\""));\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Expands fields such as lookups to get additional data\r\n     *\r\n     * @param expands The Fields for which to expand the values\r\n     */\r\n    SharePointQueryable.prototype.expand = function () {\r\n        var expands = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            expands[_i] = arguments[_i];\r\n        }\r\n        if (expands.length > 0) {\r\n            this.query.set(\""$expand\"", expands.join(\"",\""));\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets a parent for this instance as specified\r\n     *\r\n     * @param factory The contructor for the class to create\r\n     */\r\n    SharePointQueryable.prototype.getParent = function (factory, baseUrl, path, batch) {\r\n        if (baseUrl === void 0) { baseUrl = this.parentUrl; }\r\n        var parent = new factory(baseUrl, path).configureFrom(this);\r\n        var t = \""@target\"";\r\n        if (this.query.has(t)) {\r\n            parent.query.set(t, this.query.get(t));\r\n        }\r\n        if (batch !== undefined) {\r\n            parent = parent.inBatch(batch);\r\n        }\r\n        return parent;\r\n    };\r\n    /**\r\n     * Clones this SharePointQueryable into a new SharePointQueryable instance of T\r\n     * @param factory Constructor used to create the new instance\r\n     * @param additionalPath Any additional path to include in the clone\r\n     * @param includeBatch If true this instance's batch will be added to the cloned instance\r\n     */\r\n    SharePointQueryable.prototype.clone = function (factory, additionalPath, includeBatch) {\r\n        if (includeBatch === void 0) { includeBatch = true; }\r\n        var clone = _super.prototype._clone.call(this, new factory(this, additionalPath), { includeBatch: includeBatch });\r\n        // handle sp specific clone actions\r\n        var t = \""@target\"";\r\n        if (this.query.has(t)) {\r\n            clone.query.set(t, this.query.get(t));\r\n        }\r\n        return clone;\r\n    };\r\n    /**\r\n     * Converts the current instance to a request context\r\n     *\r\n     * @param verb The request verb\r\n     * @param options The set of supplied request options\r\n     * @param parser The supplied ODataParser instance\r\n     * @param pipeline Optional request processing pipeline\r\n     */\r\n    SharePointQueryable.prototype.toRequestContext = function (verb, options, parser, pipeline) {\r\n        var _this = this;\r\n        if (options === void 0) { options = {}; }\r\n        var dependencyDispose = this.hasBatch ? this._batchDependency : function () { return; };\r\n        return toAbsoluteUrl(this.toUrlAndQuery()).then(function (url) {\r\n            mergeOptions(options, _this._options);\r\n            // build our request context\r\n            var context = {\r\n                batch: _this.batch,\r\n                batchDependency: dependencyDispose,\r\n                cachingOptions: _this._cachingOptions,\r\n                clientFactory: function () { return new SPHttpClient(); },\r\n                isBatched: _this.hasBatch,\r\n                isCached: _this._forceCaching || (_this._useCaching && /^get$/i.test(verb)),\r\n                options: options,\r\n                parser: parser,\r\n                pipeline: pipeline,\r\n                requestAbsoluteUrl: url,\r\n                requestId: getGUID(),\r\n                verb: verb,\r\n            };\r\n            return context;\r\n        });\r\n    };\r\n    return SharePointQueryable;\r\n}(ODataQueryable));\r\nexport { SharePointQueryable };\r\n/**\r\n * Represents a REST collection which can be filtered, paged, and selected\r\n *\r\n */\r\nvar SharePointQueryableCollection = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableCollection, _super);\r\n    function SharePointQueryableCollection() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Filters the returned collection (https://msdn.microsoft.com/en-us/library/office/fp142385.aspx#bk_supported)\r\n     *\r\n     * @param filter The string representing the filter query\r\n     */\r\n    SharePointQueryableCollection.prototype.filter = function (filter) {\r\n        this.query.set(\""$filter\"", filter);\r\n        return this;\r\n    };\r\n    /**\r\n     * Orders based on the supplied fields\r\n     *\r\n     * @param orderby The name of the field on which to sort\r\n     * @param ascending If false DESC is appended, otherwise ASC (default)\r\n     */\r\n    SharePointQueryableCollection.prototype.orderBy = function (orderBy, ascending) {\r\n        if (ascending === void 0) { ascending = true; }\r\n        var o = \""$orderby\"";\r\n        var query = this.query.has(o) ? this.query.get(o).split(\"",\"") : [];\r\n        query.push(orderBy + \"" \"" + (ascending ? \""asc\"" : \""desc\""));\r\n        this.query.set(o, query.join(\"",\""));\r\n        return this;\r\n    };\r\n    /**\r\n     * Skips the specified number of items\r\n     *\r\n     * @param skip The number of items to skip\r\n     */\r\n    SharePointQueryableCollection.prototype.skip = function (skip) {\r\n        this.query.set(\""$skip\"", skip.toString());\r\n        return this;\r\n    };\r\n    /**\r\n     * Limits the query to only return the specified number of items\r\n     *\r\n     * @param top The query row limit\r\n     */\r\n    SharePointQueryableCollection.prototype.top = function (top) {\r\n        this.query.set(\""$top\"", top.toString());\r\n        return this;\r\n    };\r\n    return SharePointQueryableCollection;\r\n}(SharePointQueryable));\r\nexport { SharePointQueryableCollection };\r\n/**\r\n * Represents an instance that can be selected\r\n *\r\n */\r\nvar SharePointQueryableInstance = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableInstance, _super);\r\n    function SharePointQueryableInstance() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Curries the update function into the common pieces\r\n     *\r\n     * @param type\r\n     * @param mapper\r\n     */\r\n    SharePointQueryableInstance.prototype._update = function (type, mapper) {\r\n        var _this = this;\r\n        return function (props) { return _this.postCore({\r\n            body: jsS(extend(metadata(type), props)),\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (d) { return mapper(d, props); }); };\r\n    };\r\n    /**\r\n    * Deletes this instance\r\n    *\r\n    */\r\n    SharePointQueryableInstance.prototype._delete = function () {\r\n        return this.postCore({\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this instance with an etag value in the headers\r\n     *\r\n     * @param eTag eTag to delete\r\n     */\r\n    SharePointQueryableInstance.prototype._deleteWithETag = function (eTag) {\r\n        if (eTag === void 0) { eTag = \""*\""; }\r\n        return this.postCore({\r\n            headers: {\r\n                \""IF-Match\"": eTag,\r\n                \""X-HTTP-Method\"": \""DELETE\"",\r\n            },\r\n        });\r\n    };\r\n    return SharePointQueryableInstance;\r\n}(SharePointQueryable));\r\nexport { SharePointQueryableInstance };\r\n/**\r\n * Decorator used to specify the default path for SharePointQueryable objects\r\n *\r\n * @param path\r\n */\r\nexport function defaultPath(path) {\r\n    return function (target) {\r\n        return /** @class */ (function (_super) {\r\n            tslib_1.__extends(class_1, _super);\r\n            function class_1() {\r\n                var args = [];\r\n                for (var _i = 0; _i < arguments.length; _i++) {\r\n                    args[_i] = arguments[_i];\r\n                }\r\n                return _super.call(this, args[0], args.length > 1 && args[1] !== undefined ? args[1] : path) || this;\r\n            }\r\n            return class_1;\r\n        }(target));\r\n    };\r\n}\r\n//# sourceMappingURL=sharepointqueryable.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { RoleAssignments } from \""./roles\"";\r\nimport { PermissionKind } from \""./types\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance } from \""./sharepointqueryable\"";\r\nimport { hOP } from \""@pnp/common\"";\r\nvar SharePointQueryableSecurable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableSecurable, _super);\r\n    function SharePointQueryableSecurable() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(SharePointQueryableSecurable.prototype, \""roleAssignments\"", {\r\n        /**\r\n         * Gets the set of role assignments for this item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new RoleAssignments(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(SharePointQueryableSecurable.prototype, \""firstUniqueAncestorSecurableObject\"", {\r\n        /**\r\n         * Gets the closest securable up the security hierarchy whose permissions are applied to this list item\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableInstance(this, \""FirstUniqueAncestorSecurableObject\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the effective permissions for the user supplied\r\n     *\r\n     * @param loginName The claims username for the user (ex: i:0#.f|membership|user@domain.com)\r\n     */\r\n    SharePointQueryableSecurable.prototype.getUserEffectivePermissions = function (loginName) {\r\n        var q = this.clone(SharePointQueryable, \""getUserEffectivePermissions(@user)\"");\r\n        q.query.set(\""@user\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get().then(function (r) {\r\n            // handle verbose mode\r\n            return hOP(r, \""GetUserEffectivePermissions\"") ? r.GetUserEffectivePermissions : r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets the effective permissions for the current user\r\n     */\r\n    SharePointQueryableSecurable.prototype.getCurrentUserEffectivePermissions = function () {\r\n        var _this = this;\r\n        // remove need to reference Web here, which created a circular build issue\r\n        var w = new SharePointQueryableInstance(\""_api/web\"", \""currentuser\"");\r\n        return w.configureFrom(this).select(\""LoginName\"").get().then(function (user) {\r\n            return _this.getUserEffectivePermissions(user.LoginName);\r\n        });\r\n    };\r\n    /**\r\n     * Breaks the security inheritance at this level optinally copying permissions and clearing subscopes\r\n     *\r\n     * @param copyRoleAssignments If true the permissions are copied from the current parent scope\r\n     * @param clearSubscopes Optional. true to make all child securable objects inherit role assignments from the current object\r\n     */\r\n    SharePointQueryableSecurable.prototype.breakRoleInheritance = function (copyRoleAssignments, clearSubscopes) {\r\n        if (copyRoleAssignments === void 0) { copyRoleAssignments = false; }\r\n        if (clearSubscopes === void 0) { clearSubscopes = false; }\r\n        return this.clone(SharePointQueryableSecurable, \""breakroleinheritance(copyroleassignments=\"" + copyRoleAssignments + \"", clearsubscopes=\"" + clearSubscopes + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the local role assignments so that it re-inherit role assignments from the parent object.\r\n     *\r\n     */\r\n    SharePointQueryableSecurable.prototype.resetRoleInheritance = function () {\r\n        return this.clone(SharePointQueryableSecurable, \""resetroleinheritance\"").postCore();\r\n    };\r\n    /**\r\n     * Determines if a given user has the appropriate permissions\r\n     *\r\n     * @param loginName The user to check\r\n     * @param permission The permission being checked\r\n     */\r\n    SharePointQueryableSecurable.prototype.userHasPermissions = function (loginName, permission) {\r\n        var _this = this;\r\n        return this.getUserEffectivePermissions(loginName).then(function (perms) {\r\n            return _this.hasPermissions(perms, permission);\r\n        });\r\n    };\r\n    /**\r\n     * Determines if the current user has the requested permissions\r\n     *\r\n     * @param permission The permission we wish to check\r\n     */\r\n    SharePointQueryableSecurable.prototype.currentUserHasPermissions = function (permission) {\r\n        var _this = this;\r\n        return this.getCurrentUserEffectivePermissions().then(function (perms) {\r\n            return _this.hasPermissions(perms, permission);\r\n        });\r\n    };\r\n    /**\r\n     * Taken from sp.js, checks the supplied permissions against the mask\r\n     *\r\n     * @param value The security principal's permissions on the given object\r\n     * @param perm The permission checked against the value\r\n     */\r\n    /* tslint:disable:no-bitwise */\r\n    SharePointQueryableSecurable.prototype.hasPermissions = function (value, perm) {\r\n        if (!perm) {\r\n            return true;\r\n        }\r\n        if (perm === PermissionKind.FullMask) {\r\n            return (value.High & 32767) === 32767 && value.Low === 65535;\r\n        }\r\n        perm = perm - 1;\r\n        var num = 1;\r\n        if (perm >= 0 && perm < 32) {\r\n            num = num << perm;\r\n            return 0 !== (value.Low & num);\r\n        }\r\n        else if (perm >= 32 && perm < 64) {\r\n            num = num << perm - 32;\r\n            return 0 !== (value.High & num);\r\n        }\r\n        return false;\r\n    };\r\n    return SharePointQueryableSecurable;\r\n}(SharePointQueryableInstance));\r\nexport { SharePointQueryableSecurable };\r\n//# sourceMappingURL=sharepointqueryablesecurable.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, combine, jsS } from \""@pnp/common\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableSecurable } from \""./sharepointqueryablesecurable\"";\r\nimport { RoleType, SharingLinkKind, SharingRole, } from \""./types\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\n/**\r\n * Internal helper class used to augment classes to include sharing functionality\r\n */\r\nvar SharePointQueryableShareable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareable, _super);\r\n    function SharePointQueryableShareable() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a sharing link for the supplied\r\n     *\r\n     * @param kind The kind of link to share\r\n     * @param expiration The optional expiration for this link\r\n     */\r\n    SharePointQueryableShareable.prototype.getShareLink = function (kind, expiration) {\r\n        if (expiration === void 0) { expiration = null; }\r\n        // date needs to be an ISO string or null\r\n        var expString = expiration !== null ? expiration.toISOString() : null;\r\n        // clone using the factory and send the request\r\n        return this.clone(SharePointQueryableShareable, \""shareLink\"").postCore({\r\n            body: jsS({\r\n                request: {\r\n                    createLink: true,\r\n                    emailData: null,\r\n                    settings: {\r\n                        expiration: expString,\r\n                        linkKind: kind,\r\n                    },\r\n                },\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Shares this instance with the supplied users\r\n     *\r\n     * @param loginNames Resolved login names to share\r\n     * @param role The role\r\n     * @param requireSignin True to require the user is authenticated, otherwise false\r\n     * @param propagateAcl True to apply this share to all children\r\n     * @param emailData If supplied an email will be sent with the indicated properties\r\n     */\r\n    SharePointQueryableShareable.prototype.shareWith = function (loginNames, role, requireSignin, propagateAcl, emailData) {\r\n        var _this = this;\r\n        if (requireSignin === void 0) { requireSignin = false; }\r\n        if (propagateAcl === void 0) { propagateAcl = false; }\r\n        // handle the multiple input types\r\n        if (!Array.isArray(loginNames)) {\r\n            loginNames = [loginNames];\r\n        }\r\n        var userStr = jsS(loginNames.map(function (login) { return { Key: login }; }));\r\n        var roleFilter = role === SharingRole.Edit ? RoleType.Contributor : RoleType.Reader;\r\n        // start by looking up the role definition id we need to set the roleValue\r\n        // remove need to reference Web here, which created a circular build issue\r\n        var w = new SharePointQueryableCollection(\""_api/web\"", \""roledefinitions\"");\r\n        return w.select(\""Id\"").filter(\""RoleTypeKind eq \"" + roleFilter).get().then(function (def) {\r\n            if (!Array.isArray(def) || def.length < 1) {\r\n                throw Error(\""Could not locate a role defintion with RoleTypeKind \"" + roleFilter);\r\n            }\r\n            var postBody = {\r\n                includeAnonymousLinkInEmail: requireSignin,\r\n                peoplePickerInput: userStr,\r\n                propagateAcl: propagateAcl,\r\n                roleValue: \""role:\"" + def[0].Id,\r\n                useSimplifiedRoles: true,\r\n            };\r\n            if (emailData !== undefined) {\r\n                postBody = extend(postBody, {\r\n                    emailBody: emailData.body,\r\n                    emailSubject: emailData.subject !== undefined ? emailData.subject : \""\"",\r\n                    sendEmail: true,\r\n                });\r\n            }\r\n            return _this.clone(SharePointQueryableShareable, \""shareObject\"").postCore({\r\n                body: jsS(postBody),\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Shares an object based on the supplied options\r\n     *\r\n     * @param options The set of options to send to the ShareObject method\r\n     * @param bypass If true any processing is skipped and the options are sent directly to the ShareObject method\r\n     */\r\n    SharePointQueryableShareable.prototype.shareObject = function (options, bypass) {\r\n        var _this = this;\r\n        if (bypass === void 0) { bypass = false; }\r\n        if (bypass) {\r\n            // if the bypass flag is set send the supplied parameters directly to the service\r\n            return this.sendShareObjectRequest(options);\r\n        }\r\n        // extend our options with some defaults\r\n        options = extend(options, {\r\n            group: null,\r\n            includeAnonymousLinkInEmail: false,\r\n            propagateAcl: false,\r\n            useSimplifiedRoles: true,\r\n        }, true);\r\n        return this.getRoleValue(options.role, options.group).then(function (roleValue) {\r\n            // handle the multiple input types\r\n            if (!Array.isArray(options.loginNames)) {\r\n                options.loginNames = [options.loginNames];\r\n            }\r\n            var userStr = jsS(options.loginNames.map(function (login) { return { Key: login }; }));\r\n            var postBody = {\r\n                peoplePickerInput: userStr,\r\n                roleValue: roleValue,\r\n                url: options.url,\r\n            };\r\n            if (options.emailData !== undefined && options.emailData !== null) {\r\n                postBody = extend(postBody, {\r\n                    emailBody: options.emailData.body,\r\n                    emailSubject: options.emailData.subject !== undefined ? options.emailData.subject : \""Shared with you.\"",\r\n                    sendEmail: true,\r\n                });\r\n            }\r\n            return _this.sendShareObjectRequest(postBody);\r\n        });\r\n    };\r\n    /**\r\n     * Calls the web's UnshareObject method\r\n     *\r\n     * @param url The url of the object to unshare\r\n     */\r\n    SharePointQueryableShareable.prototype.unshareObjectWeb = function (url) {\r\n        return this.clone(SharePointQueryableShareable, \""unshareObject\"").postCore({\r\n            body: jsS({\r\n                url: url,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Checks Permissions on the list of Users and returns back role the users have on the Item.\r\n     *\r\n     * @param recipients The array of Entities for which Permissions need to be checked.\r\n     */\r\n    SharePointQueryableShareable.prototype.checkPermissions = function (recipients) {\r\n        return this.clone(SharePointQueryableShareable, \""checkPermissions\"").postCore({\r\n            body: jsS({\r\n                recipients: recipients,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Get Sharing Information.\r\n     *\r\n     * @param request The SharingInformationRequest Object.\r\n     * @param expands Expand more fields.\r\n     *\r\n     */\r\n    SharePointQueryableShareable.prototype.getSharingInformation = function (request, expands) {\r\n        if (request === void 0) { request = null; }\r\n        var q = this.clone(SharePointQueryableShareable, \""getSharingInformation\"");\r\n        return q.expand.apply(q, expands).postCore({\r\n            body: jsS({\r\n                request: request,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Gets the sharing settings of an item.\r\n     *\r\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\r\n     */\r\n    SharePointQueryableShareable.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\r\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\r\n        return this.clone(SharePointQueryableShareable, \""getObjectSharingSettings\"").postCore({\r\n            body: jsS({\r\n                useSimplifiedRoles: useSimplifiedRoles,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * Unshares this object\r\n     */\r\n    SharePointQueryableShareable.prototype.unshareObject = function () {\r\n        return this.clone(SharePointQueryableShareable, \""unshareObject\"").postCore();\r\n    };\r\n    /**\r\n     * Deletes a link by type\r\n     *\r\n     * @param kind Deletes a sharing link by the kind of link\r\n     */\r\n    SharePointQueryableShareable.prototype.deleteLinkByKind = function (kind) {\r\n        return this.clone(SharePointQueryableShareable, \""deleteLinkByKind\"").postCore({\r\n            body: jsS({ linkKind: kind }),\r\n        });\r\n    };\r\n    /**\r\n     * Removes the specified link to the item.\r\n     *\r\n     * @param kind The kind of link to be deleted.\r\n     * @param shareId\r\n     */\r\n    SharePointQueryableShareable.prototype.unshareLink = function (kind, shareId) {\r\n        if (shareId === void 0) { shareId = \""00000000-0000-0000-0000-000000000000\""; }\r\n        return this.clone(SharePointQueryableShareable, \""unshareLink\"").postCore({\r\n            body: jsS({ linkKind: kind, shareId: shareId }),\r\n        });\r\n    };\r\n    /**\r\n     * Calculates the roleValue string used in the sharing query\r\n     *\r\n     * @param role The Sharing Role\r\n     * @param group The Group type\r\n     */\r\n    SharePointQueryableShareable.prototype.getRoleValue = function (role, group) {\r\n        // we will give group precedence, because we had to make a choice\r\n        if (group !== undefined && group !== null) {\r\n            switch (group) {\r\n                case RoleType.Contributor:\r\n                    // remove need to reference Web here, which created a circular build issue\r\n                    var memberGroup = new SharePointQueryableInstance(\""_api/web\"", \""associatedmembergroup\"");\r\n                    return memberGroup.select(\""Id\"").get().then(function (g) { return \""group: \"" + g.Id; });\r\n                case RoleType.Reader:\r\n                case RoleType.Guest:\r\n                    // remove need to reference Web here, which created a circular build issue\r\n                    var visitorGroup = new SharePointQueryableInstance(\""_api/web\"", \""associatedvisitorgroup\"");\r\n                    return visitorGroup.select(\""Id\"").get().then(function (g) { return \""group: \"" + g.Id; });\r\n                default:\r\n                    throw Error(\""Could not determine role value for supplied value. Contributor, Reader, and Guest are supported\"");\r\n            }\r\n        }\r\n        else {\r\n            var roleFilter = role === SharingRole.Edit ? RoleType.Contributor : RoleType.Reader;\r\n            // remove need to reference Web here, which created a circular build issue\r\n            var roleDefs = new SharePointQueryableCollection(\""_api/web\"", \""roledefinitions\"");\r\n            return roleDefs.select(\""Id\"").top(1).filter(\""RoleTypeKind eq \"" + roleFilter).get().then(function (def) {\r\n                if (def.length < 1) {\r\n                    throw Error(\""Could not locate associated role definition for supplied role. Edit and View are supported\"");\r\n                }\r\n                return \""role: \"" + def[0].Id;\r\n            });\r\n        }\r\n    };\r\n    SharePointQueryableShareable.prototype.getShareObjectWeb = function (candidate) {\r\n        return Promise.resolve(new SharePointQueryableInstance(extractWebUrl(candidate), \""/_api/SP.Web.ShareObject\""));\r\n    };\r\n    SharePointQueryableShareable.prototype.sendShareObjectRequest = function (options) {\r\n        return this.getShareObjectWeb(this.toUrl()).then(function (web) {\r\n            return web.expand(\""UsersWithAccessRequests\"", \""GroupsSharedWith\"").as(SharePointQueryableShareable).postCore({\r\n                body: jsS(options),\r\n            });\r\n        });\r\n    };\r\n    return SharePointQueryableShareable;\r\n}(SharePointQueryable));\r\nexport { SharePointQueryableShareable };\r\nvar SharePointQueryableShareableWeb = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareableWeb, _super);\r\n    function SharePointQueryableShareableWeb() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Shares this web with the supplied users\r\n     * @param loginNames The resolved login names to share\r\n     * @param role The role to share this web\r\n     * @param emailData Optional email data\r\n     */\r\n    SharePointQueryableShareableWeb.prototype.shareWith = function (loginNames, role, emailData) {\r\n        var _this = this;\r\n        if (role === void 0) { role = SharingRole.View; }\r\n        var dependency = this.addBatchDependency();\r\n        // remove need to reference Web here, which created a circular build issue\r\n        var web = new SharePointQueryableInstance(extractWebUrl(this.toUrl()), \""/_api/web/url\"");\r\n        return web.get().then(function (url) {\r\n            dependency();\r\n            return _this.shareObject(combine(url, \""/_layouts/15/aclinv.aspx?forSharing=1&mbypass=1\""), loginNames, role, emailData);\r\n        });\r\n    };\r\n    /**\r\n     * Provides direct access to the static web.ShareObject method\r\n     *\r\n     * @param url The url to share\r\n     * @param loginNames Resolved loginnames string[] of a single login name string\r\n     * @param roleValue Role value\r\n     * @param emailData Optional email data\r\n     * @param groupId Optional group id\r\n     * @param propagateAcl\r\n     * @param includeAnonymousLinkInEmail\r\n     * @param useSimplifiedRoles\r\n     */\r\n    SharePointQueryableShareableWeb.prototype.shareObject = function (url, loginNames, role, emailData, group, propagateAcl, includeAnonymousLinkInEmail, useSimplifiedRoles) {\r\n        if (propagateAcl === void 0) { propagateAcl = false; }\r\n        if (includeAnonymousLinkInEmail === void 0) { includeAnonymousLinkInEmail = false; }\r\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\r\n        return this.clone(SharePointQueryableShareable, null).shareObject({\r\n            emailData: emailData,\r\n            group: group,\r\n            includeAnonymousLinkInEmail: includeAnonymousLinkInEmail,\r\n            loginNames: loginNames,\r\n            propagateAcl: propagateAcl,\r\n            role: role,\r\n            url: url,\r\n            useSimplifiedRoles: useSimplifiedRoles,\r\n        });\r\n    };\r\n    /**\r\n     * Supplies a method to pass any set of arguments to ShareObject\r\n     *\r\n     * @param options The set of options to send to ShareObject\r\n     */\r\n    SharePointQueryableShareableWeb.prototype.shareObjectRaw = function (options) {\r\n        return this.clone(SharePointQueryableShareable, null).shareObject(options, true);\r\n    };\r\n    /**\r\n     * Unshares the object\r\n     *\r\n     * @param url The url of the object to stop sharing\r\n     */\r\n    SharePointQueryableShareableWeb.prototype.unshareObject = function (url) {\r\n        return this.clone(SharePointQueryableShareable, null).unshareObjectWeb(url);\r\n    };\r\n    return SharePointQueryableShareableWeb;\r\n}(SharePointQueryableSecurable));\r\nexport { SharePointQueryableShareableWeb };\r\nvar SharePointQueryableShareableItem = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareableItem, _super);\r\n    function SharePointQueryableShareableItem() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a link suitable for sharing for this item\r\n     *\r\n     * @param kind The type of link to share\r\n     * @param expiration The optional expiration date\r\n     */\r\n    SharePointQueryableShareableItem.prototype.getShareLink = function (kind, expiration) {\r\n        if (kind === void 0) { kind = SharingLinkKind.OrganizationView; }\r\n        if (expiration === void 0) { expiration = null; }\r\n        return this.clone(SharePointQueryableShareable, null).getShareLink(kind, expiration);\r\n    };\r\n    /**\r\n     * Shares this item with one or more users\r\n     *\r\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\r\n     * @param role The role (View | Edit) applied to the share\r\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\r\n     */\r\n    SharePointQueryableShareableItem.prototype.shareWith = function (loginNames, role, requireSignin, emailData) {\r\n        if (role === void 0) { role = SharingRole.View; }\r\n        if (requireSignin === void 0) { requireSignin = false; }\r\n        return this.clone(SharePointQueryableShareable, null).shareWith(loginNames, role, requireSignin, false, emailData);\r\n    };\r\n    /**\r\n     * Checks Permissions on the list of Users and returns back role the users have on the Item.\r\n     *\r\n     * @param recipients The array of Entities for which Permissions need to be checked.\r\n     */\r\n    SharePointQueryableShareableItem.prototype.checkSharingPermissions = function (recipients) {\r\n        return this.clone(SharePointQueryableShareable, null).checkPermissions(recipients);\r\n    };\r\n    /**\r\n     * Get Sharing Information.\r\n     *\r\n     * @param request The SharingInformationRequest Object.\r\n     * @param expands Expand more fields.\r\n     *\r\n     */\r\n    SharePointQueryableShareableItem.prototype.getSharingInformation = function (request, expands) {\r\n        if (request === void 0) { request = null; }\r\n        return this.clone(SharePointQueryableShareable, null).getSharingInformation(request, expands);\r\n    };\r\n    /**\r\n     * Gets the sharing settings of an item.\r\n     *\r\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\r\n     */\r\n    SharePointQueryableShareableItem.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\r\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\r\n        return this.clone(SharePointQueryableShareable, null).getObjectSharingSettings(useSimplifiedRoles);\r\n    };\r\n    /**\r\n     * Unshare this item\r\n     */\r\n    SharePointQueryableShareableItem.prototype.unshare = function () {\r\n        return this.clone(SharePointQueryableShareable, null).unshareObject();\r\n    };\r\n    /**\r\n     * Deletes a sharing link by kind\r\n     *\r\n     * @param kind Deletes a sharing link by the kind of link\r\n     */\r\n    SharePointQueryableShareableItem.prototype.deleteSharingLinkByKind = function (kind) {\r\n        return this.clone(SharePointQueryableShareable, null).deleteLinkByKind(kind);\r\n    };\r\n    /**\r\n     * Removes the specified link to the item.\r\n     *\r\n     * @param kind The kind of link to be deleted.\r\n     * @param shareId\r\n     */\r\n    SharePointQueryableShareableItem.prototype.unshareLink = function (kind, shareId) {\r\n        return this.clone(SharePointQueryableShareable, null).unshareLink(kind, shareId);\r\n    };\r\n    return SharePointQueryableShareableItem;\r\n}(SharePointQueryableSecurable));\r\nexport { SharePointQueryableShareableItem };\r\nvar FileFolderShared = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FileFolderShared, _super);\r\n    function FileFolderShared() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a link suitable for sharing\r\n     *\r\n     * @param kind The kind of link to get\r\n     * @param expiration Optional, an expiration for this link\r\n     */\r\n    FileFolderShared.prototype.getShareLink = function (kind, expiration) {\r\n        if (kind === void 0) { kind = SharingLinkKind.OrganizationView; }\r\n        if (expiration === void 0) { expiration = null; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.getShareLink(kind, expiration);\r\n        });\r\n    };\r\n    /**\r\n         * Checks Permissions on the list of Users and returns back role the users have on the Item.\r\n         *\r\n         * @param recipients The array of Entities for which Permissions need to be checked.\r\n         */\r\n    FileFolderShared.prototype.checkSharingPermissions = function (recipients) {\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.checkPermissions(recipients);\r\n        });\r\n    };\r\n    /**\r\n     * Get Sharing Information.\r\n     *\r\n     * @param request The SharingInformationRequest Object.\r\n     * @param expands Expand more fields.\r\n     *\r\n     */\r\n    FileFolderShared.prototype.getSharingInformation = function (request, expands) {\r\n        if (request === void 0) { request = null; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.getSharingInformation(request, expands);\r\n        });\r\n    };\r\n    /**\r\n     * Gets the sharing settings of an item.\r\n     *\r\n     * @param useSimplifiedRoles Determines whether to use simplified roles.\r\n     */\r\n    FileFolderShared.prototype.getObjectSharingSettings = function (useSimplifiedRoles) {\r\n        if (useSimplifiedRoles === void 0) { useSimplifiedRoles = true; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.getObjectSharingSettings(useSimplifiedRoles);\r\n        });\r\n    };\r\n    /**\r\n     * Unshare this item\r\n     */\r\n    FileFolderShared.prototype.unshare = function () {\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.unshareObject();\r\n        });\r\n    };\r\n    /**\r\n     * Deletes a sharing link by the kind of link\r\n     *\r\n     * @param kind The kind of link to be deleted.\r\n     */\r\n    FileFolderShared.prototype.deleteSharingLinkByKind = function (kind) {\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.deleteLinkByKind(kind);\r\n        });\r\n    };\r\n    /**\r\n     * Removes the specified link to the item.\r\n     *\r\n     * @param kind The kind of link to be deleted.\r\n     * @param shareId The share id to delete\r\n     */\r\n    FileFolderShared.prototype.unshareLink = function (kind, shareId) {\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.unshareLink(kind, shareId);\r\n        });\r\n    };\r\n    /**\r\n     * For files and folders we need to use the associated item end point\r\n     */\r\n    FileFolderShared.prototype.getShareable = function () {\r\n        var _this = this;\r\n        // sharing only works on the item end point, not the file one - so we create a folder instance with the item url internally\r\n        return this.clone(SharePointQueryableShareableFile, \""listItemAllFields\"", false).select(\""odata.id\"").get().then(function (d) {\r\n            var shareable = new SharePointQueryableShareable(odataUrlFrom(d));\r\n            // we need to handle batching\r\n            if (_this.hasBatch) {\r\n                shareable = shareable.inBatch(_this.batch);\r\n            }\r\n            return shareable;\r\n        });\r\n    };\r\n    return FileFolderShared;\r\n}(SharePointQueryableInstance));\r\nexport { FileFolderShared };\r\nvar SharePointQueryableShareableFile = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareableFile, _super);\r\n    function SharePointQueryableShareableFile() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Shares this item with one or more users\r\n     *\r\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\r\n     * @param role The role (View | Edit) applied to the share\r\n     * @param shareEverything Share everything in this folder, even items with unique permissions.\r\n     * @param requireSignin If true the user must signin to view link, otherwise anyone with the link can access the resource\r\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\r\n     */\r\n    SharePointQueryableShareableFile.prototype.shareWith = function (loginNames, role, requireSignin, emailData) {\r\n        if (role === void 0) { role = SharingRole.View; }\r\n        if (requireSignin === void 0) { requireSignin = false; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.shareWith(loginNames, role, requireSignin, false, emailData);\r\n        });\r\n    };\r\n    return SharePointQueryableShareableFile;\r\n}(FileFolderShared));\r\nexport { SharePointQueryableShareableFile };\r\nvar SharePointQueryableShareableFolder = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SharePointQueryableShareableFolder, _super);\r\n    function SharePointQueryableShareableFolder() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Shares this item with one or more users\r\n     *\r\n     * @param loginNames string or string[] of resolved login names to which this item will be shared\r\n     * @param role The role (View | Edit) applied to the share\r\n     * @param shareEverything Share everything in this folder, even items with unique permissions.\r\n     * @param requireSignin If true the user must signin to view link, otherwise anyone with the link can access the resource\r\n     * @param emailData Optional, if inlucded an email will be sent. Note subject currently has no effect.\r\n     */\r\n    SharePointQueryableShareableFolder.prototype.shareWith = function (loginNames, role, requireSignin, shareEverything, emailData) {\r\n        if (role === void 0) { role = SharingRole.View; }\r\n        if (requireSignin === void 0) { requireSignin = false; }\r\n        if (shareEverything === void 0) { shareEverything = false; }\r\n        var dependency = this.addBatchDependency();\r\n        return this.getShareable().then(function (shareable) {\r\n            dependency();\r\n            return shareable.shareWith(loginNames, role, requireSignin, shareEverything, emailData);\r\n        });\r\n    };\r\n    return SharePointQueryableShareableFolder;\r\n}(FileFolderShared));\r\nexport { SharePointQueryableShareableFolder };\r\n//# sourceMappingURL=sharepointqueryableshareable.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { Web } from \""./webs\"";\r\nimport { UserCustomActions } from \""./usercustomactions\"";\r\nimport { SPBatch } from \""./batch\"";\r\nimport { Features } from \""./features\"";\r\nimport { hOP, jsS, extend } from \""@pnp/common\"";\r\nimport { SPHttpClient } from \""./net/sphttpclient\"";\r\n/**\r\n * Describes a site collection\r\n *\r\n */\r\nvar Site = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Site, _super);\r\n    function Site() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Site_1 = Site;\r\n    Object.defineProperty(Site.prototype, \""rootWeb\"", {\r\n        /**\r\n         * Gets the root web of the site collection\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Web(this, \""rootweb\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Site.prototype, \""features\"", {\r\n        /**\r\n         * Gets the active features for this site collection\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Features(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Site.prototype, \""userCustomActions\"", {\r\n        /**\r\n         * Gets all custom actions for this site collection\r\n         *\r\n         */\r\n        get: function () {\r\n            return new UserCustomActions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a Web instance representing the root web of the site collection\r\n     * correctly setup for chaining within the library\r\n     */\r\n    Site.prototype.getRootWeb = function () {\r\n        return this.rootWeb.select(\""Url\"").get().then(function (web) { return new Web(web.Url); });\r\n    };\r\n    /**\r\n     * Gets the context information for this site collection\r\n     */\r\n    Site.prototype.getContextInfo = function () {\r\n        var q = new Site_1(this.parentUrl, \""_api/contextinfo\"");\r\n        return q.postCore().then(function (data) {\r\n            if (hOP(data, \""GetContextWebInformation\"")) {\r\n                var info = data.GetContextWebInformation;\r\n                info.SupportedSchemaVersions = info.SupportedSchemaVersions.results;\r\n                return info;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Gets the document libraries on a site. Static method. (SharePoint Online only)\r\n     *\r\n     * @param absoluteWebUrl The absolute url of the web whose document libraries should be returned\r\n     */\r\n    Site.prototype.getDocumentLibraries = function (absoluteWebUrl) {\r\n        var q = new SharePointQueryable(\""\"", \""_api/sp.web.getdocumentlibraries(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + absoluteWebUrl + \""'\"");\r\n        return q.get().then(function (data) {\r\n            if (hOP(data, \""GetDocumentLibraries\"")) {\r\n                return data.GetDocumentLibraries;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Gets the site url from a page url\r\n     *\r\n     * @param absolutePageUrl The absolute url of the page\r\n     */\r\n    Site.prototype.getWebUrlFromPageUrl = function (absolutePageUrl) {\r\n        var q = new SharePointQueryable(\""\"", \""_api/sp.web.getweburlfrompageurl(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + absolutePageUrl + \""'\"");\r\n        return q.get().then(function (data) {\r\n            if (hOP(data, \""GetWebUrlFromPageUrl\"")) {\r\n                return data.GetWebUrlFromPageUrl;\r\n            }\r\n            else {\r\n                return data;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Deletes the current site\r\n     *\r\n     */\r\n    Site.prototype.delete = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var site, q;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(Site_1, \""\"").select(\""Id\"").get()];\r\n                    case 1:\r\n                        site = _a.sent();\r\n                        q = new Site_1(this.parentUrl, \""_api/SPSiteManager/Delete\"");\r\n                        return [4 /*yield*/, q.postCore({\r\n                                body: jsS({\r\n                                    siteId: site.Id,\r\n                                }),\r\n                            })];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Creates a new batch for requests within the context of this site collection\r\n     *\r\n     */\r\n    Site.prototype.createBatch = function () {\r\n        return new SPBatch(this.parentUrl);\r\n    };\r\n    /**\r\n     * Opens a web by id (using POST)\r\n     *\r\n     * @param webId The GUID id of the web to open\r\n     */\r\n    Site.prototype.openWebById = function (webId) {\r\n        return this.clone(Site_1, \""openWebById('\"" + webId + \""')\"").postCore().then(function (d) { return ({\r\n            data: d,\r\n            web: Web.fromUrl(d[\""odata.id\""] || d.__metadata.uri),\r\n        }); });\r\n    };\r\n    /**\r\n     * Associates a site collection to a hub site.\r\n     *\r\n     * @param siteId Id of the hub site collection you want to join.\r\n     * If you want to disassociate the site collection from hub site, then\r\n     * pass the siteId as 00000000-0000-0000-0000-000000000000\r\n     */\r\n    Site.prototype.joinHubSite = function (siteId) {\r\n        return this.clone(Site_1, \""joinHubSite('\"" + siteId + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Registers the current site collection as hub site collection\r\n     */\r\n    Site.prototype.registerHubSite = function () {\r\n        return this.clone(Site_1, \""registerHubSite\"").postCore();\r\n    };\r\n    /**\r\n     * Unregisters the current site collection as hub site collection.\r\n     */\r\n    Site.prototype.unRegisterHubSite = function () {\r\n        return this.clone(Site_1, \""unRegisterHubSite\"").postCore();\r\n    };\r\n    /**\r\n     * Creates a Modern communication site.\r\n     *\r\n     * @param title The title of the site to create\r\n     * @param lcid The language to use for the site. If not specified will default to 1033 (English).\r\n     * @param shareByEmailEnabled If set to true, it will enable sharing files via Email. By default it is set to false\r\n     * @param url The fully qualified URL (e.g. https://yourtenant.sharepoint.com/sites/mysitecollection) of the site.\r\n     * @param description The description of the communication site.\r\n     * @param classification The Site classification to use. For instance 'Contoso Classified'. See https://www.youtube.com/watch?v=E-8Z2ggHcS0 for more information\r\n     * @param siteDesignId The Guid of the site design to be used.\r\n     *                     You can use the below default OOTB GUIDs:\r\n     *                     Topic: 00000000-0000-0000-0000-000000000000\r\n     *                     Showcase: 6142d2a0-63a5-4ba0-aede-d9fefca2c767\r\n     *                     Blank: f6cc5403-0d63-442e-96c0-285923709ffc\r\n     * @param owner Required when creating the site using app-only context\r\n     */\r\n    Site.prototype.createCommunicationSite = function (title, lcid, shareByEmailEnabled, url, description, classification, siteDesignId, hubSiteId, owner) {\r\n        var _this = this;\r\n        if (lcid === void 0) { lcid = 1033; }\r\n        if (shareByEmailEnabled === void 0) { shareByEmailEnabled = false; }\r\n        if (description === void 0) { description = \""\""; }\r\n        if (classification === void 0) { classification = \""\""; }\r\n        if (siteDesignId === void 0) { siteDesignId = \""00000000-0000-0000-0000-000000000000\""; }\r\n        if (hubSiteId === void 0) { hubSiteId = \""00000000-0000-0000-0000-000000000000\""; }\r\n        var props = {\r\n            Classification: classification,\r\n            Description: description,\r\n            HubSiteId: hubSiteId,\r\n            Lcid: lcid,\r\n            Owner: owner,\r\n            ShareByEmailEnabled: shareByEmailEnabled,\r\n            SiteDesignId: siteDesignId,\r\n            Title: title,\r\n            Url: url,\r\n            WebTemplate: \""SITEPAGEPUBLISHING#0\"",\r\n            WebTemplateExtensionId: \""00000000-0000-0000-0000-000000000000\"",\r\n        };\r\n        var postBody = jsS({\r\n            \""request\"": extend({\r\n                \""__metadata\"": { \""type\"": \""Microsoft.SharePoint.Portal.SPSiteCreationRequest\"" },\r\n            }, props),\r\n        });\r\n        return this.getRootWeb().then(function (d) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\r\n            var client, methodUrl;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                client = new SPHttpClient();\r\n                methodUrl = d.parentUrl + \""/_api/SPSiteManager/Create\"";\r\n                return [2 /*return*/, client.post(methodUrl, {\r\n                        body: postBody,\r\n                        headers: {\r\n                            \""Accept\"": \""application/json;odata=verbose\"",\r\n                            \""Content-Type\"": \""application/json;odata=verbose;charset=utf-8\"",\r\n                        },\r\n                    }).then(function (r) { return r.json(); })];\r\n            });\r\n        }); });\r\n    };\r\n    /**\r\n     * Creates a Modern team site backed by Office 365 group. For use in SP Online only. This will not work with App-only tokens\r\n     *\r\n     * @param displayName The title or display name of the Modern team site to be created\r\n     * @param alias Alias of the underlying Office 365 Group\r\n     * @param isPublic Defines whether the Office 365 Group will be public (default), or private.\r\n     * @param lcid The language to use for the site. If not specified will default to English (1033).\r\n     * @param description The description of the site to be created.\r\n     * @param classification The Site classification to use. For instance 'Contoso Classified'. See https://www.youtube.com/watch?v=E-8Z2ggHcS0 for more information\r\n     * @param owners The Owners of the site to be created\r\n     * @param siteDesignId The ID of the site design to apply to the new site\r\n     */\r\n    Site.prototype.createModernTeamSite = function (displayName, alias, isPublic, lcid, description, classification, owners, hubSiteId, siteDesignId) {\r\n        var _this = this;\r\n        if (isPublic === void 0) { isPublic = true; }\r\n        if (lcid === void 0) { lcid = 1033; }\r\n        if (description === void 0) { description = \""\""; }\r\n        if (classification === void 0) { classification = \""\""; }\r\n        if (hubSiteId === void 0) { hubSiteId = \""00000000-0000-0000-0000-000000000000\""; }\r\n        var postBody = {\r\n            alias: alias,\r\n            displayName: displayName,\r\n            isPublic: isPublic,\r\n            optionalParams: {\r\n                Classification: classification,\r\n                CreationOptions: {\r\n                    \""results\"": [\""SPSiteLanguage:\"" + lcid, \""HubSiteId:\"" + hubSiteId],\r\n                },\r\n                Description: description,\r\n                Owners: {\r\n                    \""results\"": owners ? owners : [],\r\n                },\r\n            },\r\n        };\r\n        if (siteDesignId) {\r\n            postBody.optionalParams.CreationOptions.results.push(\""implicit_formula_292aa8a00786498a87a5ca52d9f4214a_\"" + siteDesignId);\r\n        }\r\n        return this.getRootWeb().then(function (d) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\r\n            var client, methodUrl;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                client = new SPHttpClient();\r\n                methodUrl = d.parentUrl + \""/_api/GroupSiteManager/CreateGroupEx\"";\r\n                return [2 /*return*/, client.post(methodUrl, {\r\n                        body: jsS(postBody),\r\n                        headers: {\r\n                            \""Accept\"": \""application/json;odata=verbose\"",\r\n                            \""Content-Type\"": \""application/json;odata=verbose;charset=utf-8\"",\r\n                        },\r\n                    }).then(function (r) { return r.json(); })];\r\n            });\r\n        }); });\r\n    };\r\n    var Site_1;\r\n    Site = Site_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/site\"")\r\n    ], Site);\r\n    return Site;\r\n}(SharePointQueryableInstance));\r\nexport { Site };\r\n//# sourceMappingURL=site.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable } from \""./sharepointqueryable\"";\r\nimport { hOP } from \""@pnp/common\"";\r\n/**\r\n * Implements the site designs API REST methods\r\n *\r\n */\r\nvar SiteDesigns = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteDesigns, _super);\r\n    /**\r\n     * Creates a new instance of the SiteDesigns method class\r\n     *\r\n     * @param baseUrl The parent url provider\r\n     * @param methodName The static method name to call on the utility class\r\n     */\r\n    function SiteDesigns(baseUrl, methodName) {\r\n        return _super.call(this, SiteDesigns.getBaseUrl(baseUrl), \""_api/Microsoft.Sharepoint.Utilities.WebTemplateExtensions.SiteScriptUtility.\"" + methodName) || this;\r\n    }\r\n    SiteDesigns.getBaseUrl = function (candidate) {\r\n        if (typeof candidate === \""string\"") {\r\n            return candidate;\r\n        }\r\n        var c = candidate;\r\n        var url = c.toUrl();\r\n        var index = url.indexOf(\""_api/\"");\r\n        if (index < 0) {\r\n            return url;\r\n        }\r\n        return url.substr(0, index);\r\n    };\r\n    SiteDesigns.prototype.execute = function (props) {\r\n        return this.postCore({\r\n            body: JSON.stringify(props),\r\n            headers: {\r\n                \""Content-Type\"": \""application/json;charset=utf-8\"",\r\n            },\r\n        });\r\n    };\r\n    /**\r\n     * Creates a new site design available to users when they create a new site from the SharePoint home page.\r\n     *\r\n     * @param creationInfo A sitedesign creation information object\r\n     */\r\n    SiteDesigns.prototype.createSiteDesign = function (creationInfo) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""CreateSiteDesign\"").execute({ info: creationInfo })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Applies a site design to an existing site collection.\r\n     *\r\n     * @param siteDesignId The ID of the site design to apply.\r\n     * @param webUrl The URL of the site collection where you want to apply the site design.\r\n     */\r\n    SiteDesigns.prototype.applySiteDesign = function (siteDesignId, webUrl) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""ApplySiteDesign\"").execute({ siteDesignId: siteDesignId, \""webUrl\"": webUrl })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list of information about existing site designs.\r\n     */\r\n    SiteDesigns.prototype.getSiteDesigns = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesigns\"").execute({})];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets information about a specific site design.\r\n     * @param id The ID of the site design to get information about.\r\n     */\r\n    SiteDesigns.prototype.getSiteDesignMetadata = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesignMetadata\"").execute({ id: id })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Updates a site design with new values. In the REST call, all parameters are optional except the site script Id.\r\n     * If you had previously set the IsDefault parameter to TRUE and wish it to remain true, you must pass in this parameter again (otherwise it will be reset to FALSE).\r\n     * @param updateInfo A sitedesign update information object\r\n     */\r\n    SiteDesigns.prototype.updateSiteDesign = function (updateInfo) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""UpdateSiteDesign\"").execute({ updateInfo: updateInfo })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Deletes a site design.\r\n     * @param id The ID of the site design to delete.\r\n     */\r\n    SiteDesigns.prototype.deleteSiteDesign = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""DeleteSiteDesign\"").execute({ id: id })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list of principals that have access to a site design.\r\n     * @param id The ID of the site design to get rights information from.\r\n     */\r\n    SiteDesigns.prototype.getSiteDesignRights = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesignRights\"").execute({ id: id })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Grants access to a site design for one or more principals.\r\n     * @param id The ID of the site design to grant rights on.\r\n     * @param principalNames An array of one or more principals to grant view rights.\r\n     *                       Principals can be users or mail-enabled security groups in the form of \""alias\"" or \""alias@<domain name>.com\""\r\n     * @param grantedRights Always set to 1. This represents the View right.\r\n     */\r\n    SiteDesigns.prototype.grantSiteDesignRights = function (id, principalNames, grantedRights) {\r\n        if (grantedRights === void 0) { grantedRights = 1; }\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GrantSiteDesignRights\"")\r\n                            .execute({\r\n                            \""grantedRights\"": grantedRights.toString(),\r\n                            \""id\"": id,\r\n                            \""principalNames\"": principalNames,\r\n                        })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Revokes access from a site design for one or more principals.\r\n     * @param id The ID of the site design to revoke rights from.\r\n     * @param principalNames An array of one or more principals to revoke view rights from.\r\n     *                       If all principals have rights revoked on the site design, the site design becomes viewable to everyone.\r\n     */\r\n    SiteDesigns.prototype.revokeSiteDesignRights = function (id, principalNames) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""RevokeSiteDesignRights\"")\r\n                            .execute({\r\n                            \""id\"": id,\r\n                            \""principalNames\"": principalNames,\r\n                        })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Adds a site design task on the specified web url to be invoked asynchronously.\r\n     * @param webUrl The absolute url of the web on where to create the task\r\n     * @param siteDesignId The ID of the site design to create a task for\r\n     */\r\n    SiteDesigns.prototype.addSiteDesignTask = function (webUrl, siteDesignId) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""AddSiteDesignTask\"")\r\n                            .execute({ \""webUrl\"": webUrl, \""siteDesignId\"": siteDesignId })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Adds a site design task on the current web to be invoked asynchronously.\r\n     * @param siteDesignId The ID of the site design to create a task for\r\n     */\r\n    SiteDesigns.prototype.addSiteDesignTaskToCurrentWeb = function (siteDesignId) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""AddSiteDesignTaskToCurrentWeb\"")\r\n                            .execute({ \""siteDesignId\"": siteDesignId })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Retrieves the site design task, if the task has finished running null will be returned\r\n     * @param id The ID of the site design task\r\n     */\r\n    SiteDesigns.prototype.getSiteDesignTask = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var task;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesignTask\"")\r\n                            .execute({ \""taskId\"": id })];\r\n                    case 1:\r\n                        task = _a.sent();\r\n                        return [2 /*return*/, hOP(task, \""ID\"") ? task : null];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Retrieves a list of site design that have run on a specific web\r\n     * @param webUrl The url of the web where the site design was applied\r\n     * @param siteDesignId (Optional) the site design ID, if not provided will return all site design runs\r\n     */\r\n    SiteDesigns.prototype.getSiteDesignRun = function (webUrl, siteDesignId) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesignRun\"")\r\n                            .execute({ \""webUrl\"": webUrl, siteDesignId: siteDesignId })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Retrieves the status of a site design that has been run or is still running\r\n     * @param webUrl The url of the web where the site design was applied\r\n     * @param runId the run ID\r\n     */\r\n    SiteDesigns.prototype.getSiteDesignRunStatus = function (webUrl, runId) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteDesigns, \""GetSiteDesignRunStatus\"")\r\n                            .execute({ \""webUrl\"": webUrl, runId: runId })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return SiteDesigns;\r\n}(SharePointQueryable));\r\nexport { SiteDesigns };\r\n//# sourceMappingURL=sitedesigns.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SiteUsers } from \""./siteusers\"";\r\nimport { extend, jsS, hOP } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Principal Type enum\r\n *\r\n */\r\nexport var PrincipalType;\r\n(function (PrincipalType) {\r\n    PrincipalType[PrincipalType[\""None\""] = 0] = \""None\"";\r\n    PrincipalType[PrincipalType[\""User\""] = 1] = \""User\"";\r\n    PrincipalType[PrincipalType[\""DistributionList\""] = 2] = \""DistributionList\"";\r\n    PrincipalType[PrincipalType[\""SecurityGroup\""] = 4] = \""SecurityGroup\"";\r\n    PrincipalType[PrincipalType[\""SharePointGroup\""] = 8] = \""SharePointGroup\"";\r\n    PrincipalType[PrincipalType[\""All\""] = 15] = \""All\"";\r\n})(PrincipalType || (PrincipalType = {}));\r\n/**\r\n * Describes a collection of site groups\r\n *\r\n */\r\nvar SiteGroups = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteGroups, _super);\r\n    function SiteGroups() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SiteGroups_1 = SiteGroups;\r\n    /**\r\n     * Gets a group from the collection by id\r\n     *\r\n     * @param id The id of the group to retrieve\r\n     */\r\n    SiteGroups.prototype.getById = function (id) {\r\n        var sg = new SiteGroup(this);\r\n        sg.concat(\""(\"" + id + \"")\"");\r\n        return sg;\r\n    };\r\n    /**\r\n     * Adds a new group to the site collection\r\n     *\r\n     * @param props The group properties object of property names and values to be set for the group\r\n     */\r\n    SiteGroups.prototype.add = function (properties) {\r\n        var _this = this;\r\n        var postBody = jsS(extend(metadata(\""SP.Group\""), properties));\r\n        return this.postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                group: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Gets a group from the collection by name\r\n     *\r\n     * @param groupName The name of the group to retrieve\r\n     */\r\n    SiteGroups.prototype.getByName = function (groupName) {\r\n        return new SiteGroup(this, \""getByName('\"" + groupName + \""')\"");\r\n    };\r\n    /**\r\n     * Removes the group with the specified member id from the collection\r\n     *\r\n     * @param id The id of the group to remove\r\n     */\r\n    SiteGroups.prototype.removeById = function (id) {\r\n        return this.clone(SiteGroups_1, \""removeById('\"" + id + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the cross-site group with the specified name from the collection\r\n     *\r\n     * @param loginName The name of the group to remove\r\n     */\r\n    SiteGroups.prototype.removeByLoginName = function (loginName) {\r\n        return this.clone(SiteGroups_1, \""removeByLoginName('\"" + loginName + \""')\"").postCore();\r\n    };\r\n    var SiteGroups_1;\r\n    SiteGroups = SiteGroups_1 = tslib_1.__decorate([\r\n        defaultPath(\""sitegroups\"")\r\n    ], SiteGroups);\r\n    return SiteGroups;\r\n}(SharePointQueryableCollection));\r\nexport { SiteGroups };\r\n/**\r\n * Describes a single group\r\n *\r\n */\r\nvar SiteGroup = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteGroup, _super);\r\n    function SiteGroup() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.update = _this._update(\""SP.Group\"", function (d, p) {\r\n            var retGroup = _this;\r\n            if (hOP(p, \""Title\"")) {\r\n                /* tslint:disable-next-line no-string-literal */\r\n                retGroup = _this.getParent(SiteGroup, _this.parentUrl, \""getByName('\"" + p[\""Title\""] + \""')\"");\r\n            }\r\n            return {\r\n                data: d,\r\n                group: retGroup,\r\n            };\r\n        });\r\n        return _this;\r\n    }\r\n    Object.defineProperty(SiteGroup.prototype, \""users\"", {\r\n        /**\r\n         * Gets the users for this group\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteUsers(this, \""users\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return SiteGroup;\r\n}(SharePointQueryableInstance));\r\nexport { SiteGroup };\r\n//# sourceMappingURL=sitegroups.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable } from \""./sharepointqueryable\"";\r\n/**\r\n * Implements the site script API REST methods\r\n *\r\n */\r\nvar SiteScripts = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteScripts, _super);\r\n    /**\r\n     * Creates a new instance of the SiteScripts method class\r\n     *\r\n     * @param baseUrl The parent url provider\r\n     * @param methodName The static method name to call on the utility class\r\n     */\r\n    function SiteScripts(baseUrl, methodName) {\r\n        return _super.call(this, SiteScripts.getBaseUrl(baseUrl), \""_api/Microsoft.Sharepoint.Utilities.WebTemplateExtensions.SiteScriptUtility.\"" + methodName) || this;\r\n    }\r\n    SiteScripts.getBaseUrl = function (candidate) {\r\n        if (typeof candidate === \""string\"") {\r\n            return candidate;\r\n        }\r\n        var c = candidate;\r\n        var url = c.toUrl();\r\n        var index = url.indexOf(\""_api/\"");\r\n        if (index < 0) {\r\n            return url;\r\n        }\r\n        return url.substr(0, index);\r\n    };\r\n    SiteScripts.prototype.execute = function (props) {\r\n        return this.postCore({\r\n            body: JSON.stringify(props),\r\n        });\r\n    };\r\n    /**\r\n     * Gets a list of information on all existing site scripts.\r\n     */\r\n    SiteScripts.prototype.getSiteScripts = function () {\r\n        return this.clone(SiteScripts, \""GetSiteScripts\"", true).execute({});\r\n    };\r\n    /**\r\n     * Creates a new site script.\r\n     *\r\n     * @param title The display name of the site design.\r\n     * @param content JSON value that describes the script. For more information, see JSON reference.\r\n     */\r\n    SiteScripts.prototype.createSiteScript = function (title, description, content) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteScripts, \""CreateSiteScript(Title=@title,Description=@desc)?@title='\"" + encodeURIComponent(title) + \""'&@desc='\"" + encodeURIComponent(description) + \""'\"")\r\n                            .execute(content)];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets information about a specific site script. It also returns the JSON of the script.\r\n     *\r\n     * @param id The ID of the site script to get information about.\r\n     */\r\n    SiteScripts.prototype.getSiteScriptMetadata = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteScripts, \""GetSiteScriptMetadata\"").execute({ id: id })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Deletes a site script.\r\n     *\r\n     * @param id The ID of the site script to delete.\r\n     */\r\n    SiteScripts.prototype.deleteSiteScript = function (id) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteScripts, \""DeleteSiteScript\"").execute({ id: id })];\r\n                    case 1:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Updates a site script with new values. In the REST call, all parameters are optional except the site script Id.\r\n     *\r\n     * @param siteScriptUpdateInfo Object that contains the information to update a site script.\r\n     *                             Make sure you stringify the content object or pass it in the second 'content' parameter\r\n     * @param content (Optional) A new JSON script defining the script actions. For more information, see Site design JSON schema.\r\n     */\r\n    SiteScripts.prototype.updateSiteScript = function (siteScriptUpdateInfo, content) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (content) {\r\n                            siteScriptUpdateInfo.Content = JSON.stringify(content);\r\n                        }\r\n                        return [4 /*yield*/, this.clone(SiteScripts, \""UpdateSiteScript\"").execute({ updateInfo: siteScriptUpdateInfo })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets the site script syntax (JSON) for a specific list\r\n     * @param listUrl The absolute url of the list to retrieve site script\r\n     */\r\n    SiteScripts.prototype.getSiteScriptFromList = function (listUrl) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteScripts, \""GetSiteScriptFromList\"")\r\n                            .execute({ \""listUrl\"": listUrl })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Gets the site script syntax (JSON) for a specific web\r\n     * @param webUrl The absolute url of the web to retrieve site script\r\n     * @param extractInfo configuration object to specify what to extract\r\n     */\r\n    SiteScripts.prototype.getSiteScriptFromWeb = function (webUrl, extractInfo) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.clone(SiteScripts, \""getSiteScriptFromWeb\"")\r\n                            .execute({ \""webUrl\"": webUrl, info: extractInfo })];\r\n                    case 1: return [2 /*return*/, _a.sent()];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return SiteScripts;\r\n}(SharePointQueryable));\r\nexport { SiteScripts };\r\n//# sourceMappingURL=sitescripts.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SiteGroups } from \""./sitegroups\"";\r\nimport { jsS, extend } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes a collection of all site collection users\r\n *\r\n */\r\nvar SiteUsers = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteUsers, _super);\r\n    function SiteUsers() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SiteUsers_1 = SiteUsers;\r\n    /**\r\n     * Gets a user from the collection by id\r\n     *\r\n     * @param id The id of the user to retrieve\r\n     */\r\n    SiteUsers.prototype.getById = function (id) {\r\n        return new SiteUser(this, \""getById(\"" + id + \"")\"");\r\n    };\r\n    /**\r\n     * Gets a user from the collection by email\r\n     *\r\n     * @param email The email address of the user to retrieve\r\n     */\r\n    SiteUsers.prototype.getByEmail = function (email) {\r\n        return new SiteUser(this, \""getByEmail('\"" + email + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a user from the collection by login name\r\n     *\r\n     * @param loginName The login name of the user to retrieve\r\n     */\r\n    SiteUsers.prototype.getByLoginName = function (loginName) {\r\n        var su = new SiteUser(this);\r\n        su.concat(\""('!@v::\"" + encodeURIComponent(loginName) + \""')\"");\r\n        return su;\r\n    };\r\n    /**\r\n     * Removes a user from the collection by id\r\n     *\r\n     * @param id The id of the user to remove\r\n     */\r\n    SiteUsers.prototype.removeById = function (id) {\r\n        return this.clone(SiteUsers_1, \""removeById(\"" + id + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Removes a user from the collection by login name\r\n     *\r\n     * @param loginName The login name of the user to remove\r\n     */\r\n    SiteUsers.prototype.removeByLoginName = function (loginName) {\r\n        var o = this.clone(SiteUsers_1, \""removeByLoginName(@v)\"");\r\n        o.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return o.postCore();\r\n    };\r\n    /**\r\n     * Adds a user to a group\r\n     *\r\n     * @param loginName The login name of the user to add to the group\r\n     *\r\n     */\r\n    SiteUsers.prototype.add = function (loginName) {\r\n        var _this = this;\r\n        return this.clone(SiteUsers_1, null).postCore({\r\n            body: jsS(extend(metadata(\""SP.User\""), { LoginName: loginName })),\r\n        }).then(function () { return _this.getByLoginName(loginName); });\r\n    };\r\n    var SiteUsers_1;\r\n    SiteUsers = SiteUsers_1 = tslib_1.__decorate([\r\n        defaultPath(\""siteusers\"")\r\n    ], SiteUsers);\r\n    return SiteUsers;\r\n}(SharePointQueryableCollection));\r\nexport { SiteUsers };\r\n/**\r\n * Base class for a user\r\n *\r\n */\r\nvar UserBase = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UserBase, _super);\r\n    function UserBase() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(UserBase.prototype, \""groups\"", {\r\n        /**\r\n         * Gets the groups for this user\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroups(this, \""groups\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return UserBase;\r\n}(SharePointQueryableInstance));\r\nexport { UserBase };\r\n/**\r\n * Describes a single user\r\n *\r\n */\r\nvar SiteUser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SiteUser, _super);\r\n    function SiteUser() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n        * Updates this user instance with the supplied properties\r\n        *\r\n        * @param properties A plain object of property names and values to update for the user\r\n        */\r\n        _this.update = _this._update(\""SP.User\"", function (data) { return ({ data: data, user: _this }); });\r\n        /**\r\n         * Delete this user\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    return SiteUser;\r\n}(UserBase));\r\nexport { SiteUser };\r\n/**\r\n * Represents the current user\r\n */\r\nvar CurrentUser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(CurrentUser, _super);\r\n    function CurrentUser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    CurrentUser = tslib_1.__decorate([\r\n        defaultPath(\""currentuser\"")\r\n    ], CurrentUser);\r\n    return CurrentUser;\r\n}(UserBase));\r\nexport { CurrentUser };\r\n//# sourceMappingURL=siteusers.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, defaultPath, } from \""./sharepointqueryable\"";\r\nimport { jsS, hOP } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Exposes social following methods\r\n */\r\nvar SocialQuery = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SocialQuery, _super);\r\n    function SocialQuery() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    SocialQuery_1 = SocialQuery;\r\n    Object.defineProperty(SocialQuery.prototype, \""my\"", {\r\n        get: function () {\r\n            return new MySocialQuery(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a URI to a site that lists the current user's followed sites.\r\n     */\r\n    SocialQuery.prototype.getFollowedSitesUri = function () {\r\n        return this.clone(SocialQuery_1, \""FollowedSitesUri\"").get().then(function (r) {\r\n            return r.FollowedSitesUri || r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets a URI to a site that lists the current user's followed documents.\r\n     */\r\n    SocialQuery.prototype.getFollowedDocumentsUri = function () {\r\n        return this.clone(SocialQuery_1, \""FollowedDocumentsUri\"").get().then(function (r) {\r\n            return r.FollowedDocumentsUri || r;\r\n        });\r\n    };\r\n    /**\r\n     * Makes the current user start following a user, document, site, or tag\r\n     *\r\n     * @param actorInfo The actor to start following\r\n     */\r\n    SocialQuery.prototype.follow = function (actorInfo) {\r\n        return this.clone(SocialQuery_1, \""follow\"").postCore({ body: this.createSocialActorInfoRequestBody(actorInfo) });\r\n    };\r\n    /**\r\n     * Indicates whether the current user is following a specified user, document, site, or tag\r\n     *\r\n     * @param actorInfo The actor to find the following status for\r\n     */\r\n    SocialQuery.prototype.isFollowed = function (actorInfo) {\r\n        return this.clone(SocialQuery_1, \""isfollowed\"").postCore({ body: this.createSocialActorInfoRequestBody(actorInfo) });\r\n    };\r\n    /**\r\n     * Makes the current user stop following a user, document, site, or tag\r\n     *\r\n     * @param actorInfo The actor to stop following\r\n     */\r\n    SocialQuery.prototype.stopFollowing = function (actorInfo) {\r\n        return this.clone(SocialQuery_1, \""stopfollowing\"").postCore({ body: this.createSocialActorInfoRequestBody(actorInfo) });\r\n    };\r\n    /**\r\n     * Creates SocialActorInfo request body\r\n     *\r\n     * @param actorInfo The actor to create request body\r\n     */\r\n    SocialQuery.prototype.createSocialActorInfoRequestBody = function (actorInfo) {\r\n        return jsS({\r\n            \""actor\"": Object.assign(metadata(\""SP.Social.SocialActorInfo\""), {\r\n                Id: null,\r\n            }, actorInfo),\r\n        });\r\n    };\r\n    var SocialQuery_1;\r\n    SocialQuery = SocialQuery_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/social.following\"")\r\n    ], SocialQuery);\r\n    return SocialQuery;\r\n}(SharePointQueryableInstance));\r\nexport { SocialQuery };\r\nvar MySocialQuery = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MySocialQuery, _super);\r\n    function MySocialQuery() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    MySocialQuery_1 = MySocialQuery;\r\n    /**\r\n     * Gets users, documents, sites, and tags that the current user is following.\r\n     *\r\n     * @param types Bitwise set of SocialActorTypes to retrieve\r\n     */\r\n    MySocialQuery.prototype.followed = function (types) {\r\n        return this.clone(MySocialQuery_1, \""followed(types=\"" + types + \"")\"").get().then(function (r) {\r\n            return hOP(r, \""Followed\"") ? r.Followed.results : r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets the count of users, documents, sites, and tags that the current user is following.\r\n     *\r\n     * @param types Bitwise set of SocialActorTypes to retrieve\r\n     */\r\n    MySocialQuery.prototype.followedCount = function (types) {\r\n        return this.clone(MySocialQuery_1, \""followedcount(types=\"" + types + \"")\"").get().then(function (r) {\r\n            return r.FollowedCount || r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets the users who are following the current user.\r\n     */\r\n    MySocialQuery.prototype.followers = function () {\r\n        return this.clone(MySocialQuery_1, \""followers\"").get().then(function (r) {\r\n            return hOP(r, \""Followers\"") ? r.Followers.results : r;\r\n        });\r\n    };\r\n    /**\r\n     * Gets users who the current user might want to follow.\r\n     */\r\n    MySocialQuery.prototype.suggestions = function () {\r\n        return this.clone(MySocialQuery_1, \""suggestions\"").get().then(function (r) {\r\n            return hOP(r, \""Suggestions\"") ? r.Suggestions.results : r;\r\n        });\r\n    };\r\n    var MySocialQuery_1;\r\n    MySocialQuery = MySocialQuery_1 = tslib_1.__decorate([\r\n        defaultPath(\""my\"")\r\n    ], MySocialQuery);\r\n    return MySocialQuery;\r\n}(SharePointQueryableInstance));\r\nexport { MySocialQuery };\r\n/**\r\n * Social actor type\r\n *\r\n */\r\nexport var SocialActorType;\r\n(function (SocialActorType) {\r\n    SocialActorType[SocialActorType[\""User\""] = 0] = \""User\"";\r\n    SocialActorType[SocialActorType[\""Document\""] = 1] = \""Document\"";\r\n    SocialActorType[SocialActorType[\""Site\""] = 2] = \""Site\"";\r\n    SocialActorType[SocialActorType[\""Tag\""] = 3] = \""Tag\"";\r\n})(SocialActorType || (SocialActorType = {}));\r\n/**\r\n * Social actor type\r\n *\r\n */\r\n/* tslint:disable:no-bitwise */\r\nexport var SocialActorTypes;\r\n(function (SocialActorTypes) {\r\n    SocialActorTypes[SocialActorTypes[\""None\""] = 0] = \""None\"";\r\n    SocialActorTypes[SocialActorTypes[\""User\""] = 1] = \""User\"";\r\n    SocialActorTypes[SocialActorTypes[\""Document\""] = 2] = \""Document\"";\r\n    SocialActorTypes[SocialActorTypes[\""Site\""] = 4] = \""Site\"";\r\n    SocialActorTypes[SocialActorTypes[\""Tag\""] = 8] = \""Tag\"";\r\n    /**\r\n     * The set excludes documents and sites that do not have feeds.\r\n     */\r\n    SocialActorTypes[SocialActorTypes[\""ExcludeContentWithoutFeeds\""] = 268435456] = \""ExcludeContentWithoutFeeds\"";\r\n    /**\r\n     * The set includes group sites\r\n     */\r\n    SocialActorTypes[SocialActorTypes[\""IncludeGroupsSites\""] = 536870912] = \""IncludeGroupsSites\"";\r\n    /**\r\n     * The set includes only items created within the last 24 hours\r\n     */\r\n    SocialActorTypes[SocialActorTypes[\""WithinLast24Hours\""] = 1073741824] = \""WithinLast24Hours\"";\r\n})(SocialActorTypes || (SocialActorTypes = {}));\r\n/* tslint:enable */\r\n/**\r\n * Result from following\r\n *\r\n */\r\nexport var SocialFollowResult;\r\n(function (SocialFollowResult) {\r\n    SocialFollowResult[SocialFollowResult[\""Ok\""] = 0] = \""Ok\"";\r\n    SocialFollowResult[SocialFollowResult[\""AlreadyFollowing\""] = 1] = \""AlreadyFollowing\"";\r\n    SocialFollowResult[SocialFollowResult[\""LimitReached\""] = 2] = \""LimitReached\"";\r\n    SocialFollowResult[SocialFollowResult[\""InternalError\""] = 3] = \""InternalError\"";\r\n})(SocialFollowResult || (SocialFollowResult = {}));\r\n/**\r\n * Specifies an exception or status code.\r\n */\r\nexport var SocialStatusCode;\r\n(function (SocialStatusCode) {\r\n    /**\r\n     * The operation completed successfully\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""OK\""] = 0] = \""OK\"";\r\n    /**\r\n     * The request is invalid.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""InvalidRequest\""] = 1] = \""InvalidRequest\"";\r\n    /**\r\n     *  The current user is not authorized to perform the operation.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""AccessDenied\""] = 2] = \""AccessDenied\"";\r\n    /**\r\n     * The target of the operation was not found.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""ItemNotFound\""] = 3] = \""ItemNotFound\"";\r\n    /**\r\n     * The operation is invalid for the target's current state.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""InvalidOperation\""] = 4] = \""InvalidOperation\"";\r\n    /**\r\n     * The operation completed without modifying the target.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""ItemNotModified\""] = 5] = \""ItemNotModified\"";\r\n    /**\r\n     * The operation failed because an internal error occurred.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""InternalError\""] = 6] = \""InternalError\"";\r\n    /**\r\n     * The operation failed because the server could not access the distributed cache.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""CacheReadError\""] = 7] = \""CacheReadError\"";\r\n    /**\r\n     * The operation succeeded but the server could not update the distributed cache.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""CacheUpdateError\""] = 8] = \""CacheUpdateError\"";\r\n    /**\r\n     * No personal site exists for the current user, and no further information is available.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""PersonalSiteNotFound\""] = 9] = \""PersonalSiteNotFound\"";\r\n    /**\r\n     * No personal site exists for the current user, and a previous attempt to create one failed.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""FailedToCreatePersonalSite\""] = 10] = \""FailedToCreatePersonalSite\"";\r\n    /**\r\n     * No personal site exists for the current user, and a previous attempt to create one was not authorized.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""NotAuthorizedToCreatePersonalSite\""] = 11] = \""NotAuthorizedToCreatePersonalSite\"";\r\n    /**\r\n     * No personal site exists for the current user, and no attempt should be made to create one.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""CannotCreatePersonalSite\""] = 12] = \""CannotCreatePersonalSite\"";\r\n    /**\r\n     * The operation was rejected because an internal limit had been reached.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""LimitReached\""] = 13] = \""LimitReached\"";\r\n    /**\r\n     * The operation failed because an error occurred during the processing of the specified attachment.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""AttachmentError\""] = 14] = \""AttachmentError\"";\r\n    /**\r\n     * The operation succeeded with recoverable errors; the returned data is incomplete.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""PartialData\""] = 15] = \""PartialData\"";\r\n    /**\r\n     * A required SharePoint feature is not enabled.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""FeatureDisabled\""] = 16] = \""FeatureDisabled\"";\r\n    /**\r\n     * The site's storage quota has been exceeded.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""StorageQuotaExceeded\""] = 17] = \""StorageQuotaExceeded\"";\r\n    /**\r\n     * The operation failed because the server could not access the database.\r\n     */\r\n    SocialStatusCode[SocialStatusCode[\""DatabaseError\""] = 18] = \""DatabaseError\"";\r\n})(SocialStatusCode || (SocialStatusCode = {}));\r\n//# sourceMappingURL=social.js.map"",""export { odataUrlFrom, spODataEntity, spODataEntityArray, } from \""./odata\"";\r\nexport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, } from \""./sharepointqueryable\"";\r\nexport { SharePointQueryableSecurable, } from \""./sharepointqueryablesecurable\"";\r\nexport { FileFolderShared, SharePointQueryableShareable, SharePointQueryableShareableFile, SharePointQueryableShareableFolder, SharePointQueryableShareableItem, SharePointQueryableShareableWeb, } from \""./sharepointqueryableshareable\"";\r\nexport { AppCatalog, App, } from \""./appcatalog\"";\r\nexport { SPBatch, } from \""./batch\"";\r\nexport * from \""./clientsidepages\"";\r\nexport * from \""./comments\"";\r\nexport { ContentType, ContentTypes, FieldLink, FieldLinks, } from \""./contenttypes\"";\r\nexport { Field, Fields, } from \""./fields\"";\r\nexport { CheckinType, WebPartsPersonalizationScope, MoveOperations, TemplateFileType, File, Files, } from \""./files\"";\r\nexport { Folder, Folders, } from \""./folders\"";\r\nexport { SPHttpClient, } from \""./net/sphttpclient\"";\r\nexport { Item, Items, ItemVersion, ItemVersions, PagedItemCollection, } from \""./items\"";\r\nexport { NavigationNodes, NavigationNode, NavigationService, } from \""./navigation\"";\r\nexport { List, Lists, } from \""./lists\"";\r\nexport { RegionalSettings, InstalledLanguages, TimeZone, TimeZones, } from \""./regionalsettings\"";\r\nexport { sp, SPRest, } from \""./rest\"";\r\nexport { RoleDefinitionBindings, } from \""./roles\"";\r\nexport { Search, SearchQueryBuilder, SearchResults, SortDirection, ReorderingRuleMatchType, QueryPropertyValueType, SearchBuiltInSourceId, } from \""./search\"";\r\nexport { SearchSuggest, } from \""./searchsuggest\"";\r\nexport { Site, } from \""./site\"";\r\nexport * from \""./social\"";\r\nexport * from \""./types\"";\r\nexport { UserProfileQuery, } from \""./userprofiles\"";\r\nexport { toAbsoluteUrl, } from \""./utils/toabsoluteurl\"";\r\nexport { extractWebUrl, } from \""./utils/extractweburl\"";\r\nexport { UtilityMethod, } from \""./utilities\"";\r\nexport { View, Views, ViewFields, } from \""./views\"";\r\nexport { WebPartDefinitions, WebPartDefinition, WebPart, } from \""./webparts\"";\r\nexport { Web, } from \""./webs\"";\r\nexport { SiteScripts, } from \""./sitescripts\"";\r\nexport { SiteDesigns, } from \""./sitedesigns\"";\r\nexport { HubSite, HubSites, } from \""./hubsites\"";\r\n//# sourceMappingURL=sp.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\n/**\r\n * Describes a collection of webhook subscriptions\r\n *\r\n */\r\nvar Subscriptions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Subscriptions, _super);\r\n    function Subscriptions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Returns all the webhook subscriptions or the specified webhook subscription\r\n     *\r\n     * @param subscriptionId The id of a specific webhook subscription to retrieve, omit to retrieve all the webhook subscriptions\r\n     */\r\n    Subscriptions.prototype.getById = function (subscriptionId) {\r\n        var s = new Subscription(this);\r\n        s.concat(\""('\"" + subscriptionId + \""')\"");\r\n        return s;\r\n    };\r\n    /**\r\n     * Creates a new webhook subscription\r\n     *\r\n     * @param notificationUrl The url to receive the notifications\r\n     * @param expirationDate The date and time to expire the subscription in the form YYYY-MM-ddTHH:mm:ss+00:00 (maximum of 6 months)\r\n     * @param clientState A client specific string (optional)\r\n     */\r\n    Subscriptions.prototype.add = function (notificationUrl, expirationDate, clientState) {\r\n        var _this = this;\r\n        var postBody = {\r\n            \""expirationDateTime\"": expirationDate,\r\n            \""notificationUrl\"": notificationUrl,\r\n            \""resource\"": this.toUrl(),\r\n        };\r\n        if (clientState) {\r\n            postBody.clientState = clientState;\r\n        }\r\n        return this.postCore({ body: jsS(postBody), headers: { \""Content-Type\"": \""application/json\"" } }).then(function (result) {\r\n            return { data: result, subscription: _this.getById(result.id) };\r\n        });\r\n    };\r\n    Subscriptions = tslib_1.__decorate([\r\n        defaultPath(\""subscriptions\"")\r\n    ], Subscriptions);\r\n    return Subscriptions;\r\n}(SharePointQueryableCollection));\r\nexport { Subscriptions };\r\n/**\r\n * Describes a single webhook subscription instance\r\n *\r\n */\r\nvar Subscription = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Subscription, _super);\r\n    function Subscription() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Renews this webhook subscription\r\n     *\r\n     * @param expirationDate The date and time to expire the subscription in the form YYYY-MM-ddTHH:mm:ss+00:00 (maximum of 6 months, optional)\r\n     * @param notificationUrl The url to receive the notifications (optional)\r\n     * @param clientState A client specific string (optional)\r\n     */\r\n    Subscription.prototype.update = function (expirationDate, notificationUrl, clientState) {\r\n        var _this = this;\r\n        var postBody = {};\r\n        if (expirationDate) {\r\n            postBody.expirationDateTime = expirationDate;\r\n        }\r\n        if (notificationUrl) {\r\n            postBody.notificationUrl = notificationUrl;\r\n        }\r\n        if (clientState) {\r\n            postBody.clientState = clientState;\r\n        }\r\n        return this.patchCore({ body: jsS(postBody), headers: { \""Content-Type\"": \""application/json\"" } }).then(function (data) {\r\n            return { data: data, subscription: _this };\r\n        });\r\n    };\r\n    /**\r\n     * Removes this webhook subscription\r\n     *\r\n     */\r\n    Subscription.prototype.delete = function () {\r\n        return _super.prototype.deleteCore.call(this);\r\n    };\r\n    return Subscription;\r\n}(SharePointQueryableInstance));\r\nexport { Subscription };\r\n//# sourceMappingURL=subscriptions.js.map"",""/**\r\n * Determines the display mode of the given control or view\r\n */\r\nexport var ControlMode;\r\n(function (ControlMode) {\r\n    ControlMode[ControlMode[\""Display\""] = 1] = \""Display\"";\r\n    ControlMode[ControlMode[\""Edit\""] = 2] = \""Edit\"";\r\n    ControlMode[ControlMode[\""New\""] = 3] = \""New\"";\r\n})(ControlMode || (ControlMode = {}));\r\n/**\r\n * Specifies the type of the field.\r\n */\r\nexport var FieldTypes;\r\n(function (FieldTypes) {\r\n    FieldTypes[FieldTypes[\""Invalid\""] = 0] = \""Invalid\"";\r\n    FieldTypes[FieldTypes[\""Integer\""] = 1] = \""Integer\"";\r\n    FieldTypes[FieldTypes[\""Text\""] = 2] = \""Text\"";\r\n    FieldTypes[FieldTypes[\""Note\""] = 3] = \""Note\"";\r\n    FieldTypes[FieldTypes[\""DateTime\""] = 4] = \""DateTime\"";\r\n    FieldTypes[FieldTypes[\""Counter\""] = 5] = \""Counter\"";\r\n    FieldTypes[FieldTypes[\""Choice\""] = 6] = \""Choice\"";\r\n    FieldTypes[FieldTypes[\""Lookup\""] = 7] = \""Lookup\"";\r\n    FieldTypes[FieldTypes[\""Boolean\""] = 8] = \""Boolean\"";\r\n    FieldTypes[FieldTypes[\""Number\""] = 9] = \""Number\"";\r\n    FieldTypes[FieldTypes[\""Currency\""] = 10] = \""Currency\"";\r\n    FieldTypes[FieldTypes[\""URL\""] = 11] = \""URL\"";\r\n    FieldTypes[FieldTypes[\""Computed\""] = 12] = \""Computed\"";\r\n    FieldTypes[FieldTypes[\""Threading\""] = 13] = \""Threading\"";\r\n    FieldTypes[FieldTypes[\""Guid\""] = 14] = \""Guid\"";\r\n    FieldTypes[FieldTypes[\""MultiChoice\""] = 15] = \""MultiChoice\"";\r\n    FieldTypes[FieldTypes[\""GridChoice\""] = 16] = \""GridChoice\"";\r\n    FieldTypes[FieldTypes[\""Calculated\""] = 17] = \""Calculated\"";\r\n    FieldTypes[FieldTypes[\""File\""] = 18] = \""File\"";\r\n    FieldTypes[FieldTypes[\""Attachments\""] = 19] = \""Attachments\"";\r\n    FieldTypes[FieldTypes[\""User\""] = 20] = \""User\"";\r\n    FieldTypes[FieldTypes[\""Recurrence\""] = 21] = \""Recurrence\"";\r\n    FieldTypes[FieldTypes[\""CrossProjectLink\""] = 22] = \""CrossProjectLink\"";\r\n    FieldTypes[FieldTypes[\""ModStat\""] = 23] = \""ModStat\"";\r\n    FieldTypes[FieldTypes[\""Error\""] = 24] = \""Error\"";\r\n    FieldTypes[FieldTypes[\""ContentTypeId\""] = 25] = \""ContentTypeId\"";\r\n    FieldTypes[FieldTypes[\""PageSeparator\""] = 26] = \""PageSeparator\"";\r\n    FieldTypes[FieldTypes[\""ThreadIndex\""] = 27] = \""ThreadIndex\"";\r\n    FieldTypes[FieldTypes[\""WorkflowStatus\""] = 28] = \""WorkflowStatus\"";\r\n    FieldTypes[FieldTypes[\""AllDayEvent\""] = 29] = \""AllDayEvent\"";\r\n    FieldTypes[FieldTypes[\""WorkflowEventType\""] = 30] = \""WorkflowEventType\"";\r\n})(FieldTypes || (FieldTypes = {}));\r\nexport var DateTimeFieldFormatType;\r\n(function (DateTimeFieldFormatType) {\r\n    DateTimeFieldFormatType[DateTimeFieldFormatType[\""DateOnly\""] = 0] = \""DateOnly\"";\r\n    DateTimeFieldFormatType[DateTimeFieldFormatType[\""DateTime\""] = 1] = \""DateTime\"";\r\n})(DateTimeFieldFormatType || (DateTimeFieldFormatType = {}));\r\nexport var DateTimeFieldFriendlyFormatType;\r\n(function (DateTimeFieldFriendlyFormatType) {\r\n    DateTimeFieldFriendlyFormatType[DateTimeFieldFriendlyFormatType[\""Unspecified\""] = 0] = \""Unspecified\"";\r\n    DateTimeFieldFriendlyFormatType[DateTimeFieldFriendlyFormatType[\""Disabled\""] = 1] = \""Disabled\"";\r\n    DateTimeFieldFriendlyFormatType[DateTimeFieldFriendlyFormatType[\""Relative\""] = 2] = \""Relative\"";\r\n})(DateTimeFieldFriendlyFormatType || (DateTimeFieldFriendlyFormatType = {}));\r\n/**\r\n * Specifies the control settings while adding a field.\r\n */\r\nexport var AddFieldOptions;\r\n(function (AddFieldOptions) {\r\n    /**\r\n     *  Specify that a new field added to the list must also be added to the default content type in the site collection\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""DefaultValue\""] = 0] = \""DefaultValue\"";\r\n    /**\r\n     * Specify that a new field added to the list must also be added to the default content type in the site collection.\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddToDefaultContentType\""] = 1] = \""AddToDefaultContentType\"";\r\n    /**\r\n     * Specify that a new field must not be added to any other content type\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddToNoContentType\""] = 2] = \""AddToNoContentType\"";\r\n    /**\r\n     *  Specify that a new field that is added to the specified list must also be added to all content types in the site collection\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddToAllContentTypes\""] = 4] = \""AddToAllContentTypes\"";\r\n    /**\r\n     * Specify adding an internal field name hint for the purpose of avoiding possible database locking or field renaming operations\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddFieldInternalNameHint\""] = 8] = \""AddFieldInternalNameHint\"";\r\n    /**\r\n     * Specify that a new field that is added to the specified list must also be added to the default list view\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddFieldToDefaultView\""] = 16] = \""AddFieldToDefaultView\"";\r\n    /**\r\n     * Specify to confirm that no other field has the same display name\r\n     */\r\n    AddFieldOptions[AddFieldOptions[\""AddFieldCheckDisplayName\""] = 32] = \""AddFieldCheckDisplayName\"";\r\n})(AddFieldOptions || (AddFieldOptions = {}));\r\nexport var CalendarType;\r\n(function (CalendarType) {\r\n    CalendarType[CalendarType[\""Gregorian\""] = 1] = \""Gregorian\"";\r\n    CalendarType[CalendarType[\""Japan\""] = 3] = \""Japan\"";\r\n    CalendarType[CalendarType[\""Taiwan\""] = 4] = \""Taiwan\"";\r\n    CalendarType[CalendarType[\""Korea\""] = 5] = \""Korea\"";\r\n    CalendarType[CalendarType[\""Hijri\""] = 6] = \""Hijri\"";\r\n    CalendarType[CalendarType[\""Thai\""] = 7] = \""Thai\"";\r\n    CalendarType[CalendarType[\""Hebrew\""] = 8] = \""Hebrew\"";\r\n    CalendarType[CalendarType[\""GregorianMEFrench\""] = 9] = \""GregorianMEFrench\"";\r\n    CalendarType[CalendarType[\""GregorianArabic\""] = 10] = \""GregorianArabic\"";\r\n    CalendarType[CalendarType[\""GregorianXLITEnglish\""] = 11] = \""GregorianXLITEnglish\"";\r\n    CalendarType[CalendarType[\""GregorianXLITFrench\""] = 12] = \""GregorianXLITFrench\"";\r\n    CalendarType[CalendarType[\""KoreaJapanLunar\""] = 14] = \""KoreaJapanLunar\"";\r\n    CalendarType[CalendarType[\""ChineseLunar\""] = 15] = \""ChineseLunar\"";\r\n    CalendarType[CalendarType[\""SakaEra\""] = 16] = \""SakaEra\"";\r\n    CalendarType[CalendarType[\""UmAlQura\""] = 23] = \""UmAlQura\"";\r\n})(CalendarType || (CalendarType = {}));\r\nexport var UrlFieldFormatType;\r\n(function (UrlFieldFormatType) {\r\n    UrlFieldFormatType[UrlFieldFormatType[\""Hyperlink\""] = 0] = \""Hyperlink\"";\r\n    UrlFieldFormatType[UrlFieldFormatType[\""Image\""] = 1] = \""Image\"";\r\n})(UrlFieldFormatType || (UrlFieldFormatType = {}));\r\nexport var PermissionKind;\r\n(function (PermissionKind) {\r\n    /**\r\n     * Has no permissions on the Site. Not available through the user interface.\r\n     */\r\n    PermissionKind[PermissionKind[\""EmptyMask\""] = 0] = \""EmptyMask\"";\r\n    /**\r\n     * View items in lists, documents in document libraries, and Web discussion comments.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewListItems\""] = 1] = \""ViewListItems\"";\r\n    /**\r\n     * Add items to lists, documents to document libraries, and Web discussion comments.\r\n     */\r\n    PermissionKind[PermissionKind[\""AddListItems\""] = 2] = \""AddListItems\"";\r\n    /**\r\n     * Edit items in lists, edit documents in document libraries, edit Web discussion comments\r\n     * in documents, and customize Web Part Pages in document libraries.\r\n     */\r\n    PermissionKind[PermissionKind[\""EditListItems\""] = 3] = \""EditListItems\"";\r\n    /**\r\n     * Delete items from a list, documents from a document library, and Web discussion\r\n     * comments in documents.\r\n     */\r\n    PermissionKind[PermissionKind[\""DeleteListItems\""] = 4] = \""DeleteListItems\"";\r\n    /**\r\n     * Approve a minor version of a list item or document.\r\n     */\r\n    PermissionKind[PermissionKind[\""ApproveItems\""] = 5] = \""ApproveItems\"";\r\n    /**\r\n     * View the source of documents with server-side file handlers.\r\n     */\r\n    PermissionKind[PermissionKind[\""OpenItems\""] = 6] = \""OpenItems\"";\r\n    /**\r\n     * View past versions of a list item or document.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewVersions\""] = 7] = \""ViewVersions\"";\r\n    /**\r\n     * Delete past versions of a list item or document.\r\n     */\r\n    PermissionKind[PermissionKind[\""DeleteVersions\""] = 8] = \""DeleteVersions\"";\r\n    /**\r\n     * Discard or check in a document which is checked out to another user.\r\n     */\r\n    PermissionKind[PermissionKind[\""CancelCheckout\""] = 9] = \""CancelCheckout\"";\r\n    /**\r\n     * Create, change, and delete personal views of lists.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManagePersonalViews\""] = 10] = \""ManagePersonalViews\"";\r\n    /**\r\n     * Create and delete lists, add or remove columns in a list, and add or remove public views of a list.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManageLists\""] = 12] = \""ManageLists\"";\r\n    /**\r\n     * View forms, views, and application pages, and enumerate lists.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewFormPages\""] = 13] = \""ViewFormPages\"";\r\n    /**\r\n     * Make content of a list or document library retrieveable for anonymous users through SharePoint search.\r\n     * The list permissions in the site do not change.\r\n     */\r\n    PermissionKind[PermissionKind[\""AnonymousSearchAccessList\""] = 14] = \""AnonymousSearchAccessList\"";\r\n    /**\r\n     * Allow users to open a Site, list, or folder to access items inside that container.\r\n     */\r\n    PermissionKind[PermissionKind[\""Open\""] = 17] = \""Open\"";\r\n    /**\r\n     * View pages in a Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewPages\""] = 18] = \""ViewPages\"";\r\n    /**\r\n     * Add, change, or delete HTML pages or Web Part Pages, and edit the Site using\r\n     * a Windows SharePoint Services compatible editor.\r\n     */\r\n    PermissionKind[PermissionKind[\""AddAndCustomizePages\""] = 19] = \""AddAndCustomizePages\"";\r\n    /**\r\n     * Apply a theme or borders to the entire Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""ApplyThemeAndBorder\""] = 20] = \""ApplyThemeAndBorder\"";\r\n    /**\r\n     * Apply a style sheet (.css file) to the Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""ApplyStyleSheets\""] = 21] = \""ApplyStyleSheets\"";\r\n    /**\r\n     * View reports on Site usage.\r\n     */\r\n    PermissionKind[PermissionKind[\""ViewUsageData\""] = 22] = \""ViewUsageData\"";\r\n    /**\r\n     * Create a Site using Self-Service Site Creation.\r\n     */\r\n    PermissionKind[PermissionKind[\""CreateSSCSite\""] = 23] = \""CreateSSCSite\"";\r\n    /**\r\n     * Create subsites such as team sites, Meeting Workspace sites, and Document Workspace sites.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManageSubwebs\""] = 24] = \""ManageSubwebs\"";\r\n    /**\r\n     * Create a group of users that can be used anywhere within the site collection.\r\n     */\r\n    PermissionKind[PermissionKind[\""CreateGroups\""] = 25] = \""CreateGroups\"";\r\n    /**\r\n     * Create and change permission levels on the Site and assign permissions to users\r\n     * and groups.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManagePermissions\""] = 26] = \""ManagePermissions\"";\r\n    /**\r\n     * Enumerate files and folders in a Site using Microsoft Office SharePoint Designer\r\n     * and WebDAV interfaces.\r\n     */\r\n    PermissionKind[PermissionKind[\""BrowseDirectories\""] = 27] = \""BrowseDirectories\"";\r\n    /**\r\n     * View information about users of the Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""BrowseUserInfo\""] = 28] = \""BrowseUserInfo\"";\r\n    /**\r\n     * Add or remove personal Web Parts on a Web Part Page.\r\n     */\r\n    PermissionKind[PermissionKind[\""AddDelPrivateWebParts\""] = 29] = \""AddDelPrivateWebParts\"";\r\n    /**\r\n     * Update Web Parts to display personalized information.\r\n     */\r\n    PermissionKind[PermissionKind[\""UpdatePersonalWebParts\""] = 30] = \""UpdatePersonalWebParts\"";\r\n    /**\r\n     * Grant the ability to perform all administration tasks for the Site as well as\r\n     * manage content, activate, deactivate, or edit properties of Site scoped Features\r\n     * through the object model or through the user interface (UI). When granted on the\r\n     * root Site of a Site Collection, activate, deactivate, or edit properties of\r\n     * site collection scoped Features through the object model. To browse to the Site\r\n     * Collection Features page and activate or deactivate Site Collection scoped Features\r\n     * through the UI, you must be a Site Collection administrator.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManageWeb\""] = 31] = \""ManageWeb\"";\r\n    /**\r\n     * Content of lists and document libraries in the Web site will be retrieveable for anonymous users through\r\n     * SharePoint search if the list or document library has AnonymousSearchAccessList set.\r\n     */\r\n    PermissionKind[PermissionKind[\""AnonymousSearchAccessWebLists\""] = 32] = \""AnonymousSearchAccessWebLists\"";\r\n    /**\r\n     * Use features that launch client applications. Otherwise, users must work on documents\r\n     * locally and upload changes.\r\n     */\r\n    PermissionKind[PermissionKind[\""UseClientIntegration\""] = 37] = \""UseClientIntegration\"";\r\n    /**\r\n     * Use SOAP, WebDAV, or Microsoft Office SharePoint Designer interfaces to access the Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""UseRemoteAPIs\""] = 38] = \""UseRemoteAPIs\"";\r\n    /**\r\n     * Manage alerts for all users of the Site.\r\n     */\r\n    PermissionKind[PermissionKind[\""ManageAlerts\""] = 39] = \""ManageAlerts\"";\r\n    /**\r\n     * Create e-mail alerts.\r\n     */\r\n    PermissionKind[PermissionKind[\""CreateAlerts\""] = 40] = \""CreateAlerts\"";\r\n    /**\r\n     * Allows a user to change his or her user information, such as adding a picture.\r\n     */\r\n    PermissionKind[PermissionKind[\""EditMyUserInfo\""] = 41] = \""EditMyUserInfo\"";\r\n    /**\r\n     * Enumerate permissions on Site, list, folder, document, or list item.\r\n     */\r\n    PermissionKind[PermissionKind[\""EnumeratePermissions\""] = 63] = \""EnumeratePermissions\"";\r\n    /**\r\n     * Has all permissions on the Site. Not available through the user interface.\r\n     */\r\n    PermissionKind[PermissionKind[\""FullMask\""] = 65] = \""FullMask\"";\r\n})(PermissionKind || (PermissionKind = {}));\r\n/**\r\n * Specifies the type of a principal.\r\n */\r\n/* tslint:disable:no-bitwise */\r\nexport var PrincipalType;\r\n(function (PrincipalType) {\r\n    /**\r\n     * Enumeration whose value specifies no principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""None\""] = 0] = \""None\"";\r\n    /**\r\n     * Enumeration whose value specifies a user as the principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""User\""] = 1] = \""User\"";\r\n    /**\r\n     * Enumeration whose value specifies a distribution list as the principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""DistributionList\""] = 2] = \""DistributionList\"";\r\n    /**\r\n     * Enumeration whose value specifies a security group as the principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""SecurityGroup\""] = 4] = \""SecurityGroup\"";\r\n    /**\r\n     * Enumeration whose value specifies a group as the principal type.\r\n     */\r\n    PrincipalType[PrincipalType[\""SharePointGroup\""] = 8] = \""SharePointGroup\"";\r\n    /**\r\n     * Enumeration whose value specifies all principal types.\r\n     */\r\n    PrincipalType[PrincipalType[\""All\""] = 15] = \""All\"";\r\n})(PrincipalType || (PrincipalType = {}));\r\n/* tslint:enable:no-bitwise */\r\n/**\r\n * Specifies the source of a principal.\r\n */\r\n/* tslint:disable:no-bitwise */\r\nexport var PrincipalSource;\r\n(function (PrincipalSource) {\r\n    /**\r\n     * Enumeration whose value specifies no principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""None\""] = 0] = \""None\"";\r\n    /**\r\n     * Enumeration whose value specifies user information list as the principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""UserInfoList\""] = 1] = \""UserInfoList\"";\r\n    /**\r\n     * Enumeration whose value specifies Active Directory as the principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""Windows\""] = 2] = \""Windows\"";\r\n    /**\r\n     * Enumeration whose value specifies the current membership provider as the principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""MembershipProvider\""] = 4] = \""MembershipProvider\"";\r\n    /**\r\n     * Enumeration whose value specifies the current role provider as the principal source.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""RoleProvider\""] = 8] = \""RoleProvider\"";\r\n    /**\r\n     * Enumeration whose value specifies all principal sources.\r\n     */\r\n    PrincipalSource[PrincipalSource[\""All\""] = 15] = \""All\"";\r\n})(PrincipalSource || (PrincipalSource = {}));\r\n/* tslint:enable:no-bitwise */\r\nexport var RoleType;\r\n(function (RoleType) {\r\n    RoleType[RoleType[\""None\""] = 0] = \""None\"";\r\n    RoleType[RoleType[\""Guest\""] = 1] = \""Guest\"";\r\n    RoleType[RoleType[\""Reader\""] = 2] = \""Reader\"";\r\n    RoleType[RoleType[\""Contributor\""] = 3] = \""Contributor\"";\r\n    RoleType[RoleType[\""WebDesigner\""] = 4] = \""WebDesigner\"";\r\n    RoleType[RoleType[\""Administrator\""] = 5] = \""Administrator\"";\r\n})(RoleType || (RoleType = {}));\r\nexport var PageType;\r\n(function (PageType) {\r\n    PageType[PageType[\""Invalid\""] = -1] = \""Invalid\"";\r\n    PageType[PageType[\""DefaultView\""] = 0] = \""DefaultView\"";\r\n    PageType[PageType[\""NormalView\""] = 1] = \""NormalView\"";\r\n    PageType[PageType[\""DialogView\""] = 2] = \""DialogView\"";\r\n    PageType[PageType[\""View\""] = 3] = \""View\"";\r\n    PageType[PageType[\""DisplayForm\""] = 4] = \""DisplayForm\"";\r\n    PageType[PageType[\""DisplayFormDialog\""] = 5] = \""DisplayFormDialog\"";\r\n    PageType[PageType[\""EditForm\""] = 6] = \""EditForm\"";\r\n    PageType[PageType[\""EditFormDialog\""] = 7] = \""EditFormDialog\"";\r\n    PageType[PageType[\""NewForm\""] = 8] = \""NewForm\"";\r\n    PageType[PageType[\""NewFormDialog\""] = 9] = \""NewFormDialog\"";\r\n    PageType[PageType[\""SolutionForm\""] = 10] = \""SolutionForm\"";\r\n    PageType[PageType[\""PAGE_MAXITEMS\""] = 11] = \""PAGE_MAXITEMS\"";\r\n})(PageType || (PageType = {}));\r\nexport var SharingLinkKind;\r\n(function (SharingLinkKind) {\r\n    /**\r\n     * Uninitialized link\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""Uninitialized\""] = 0] = \""Uninitialized\"";\r\n    /**\r\n     * Direct link to the object being shared\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""Direct\""] = 1] = \""Direct\"";\r\n    /**\r\n     * Organization-shareable link to the object being shared with view permissions\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""OrganizationView\""] = 2] = \""OrganizationView\"";\r\n    /**\r\n     * Organization-shareable link to the object being shared with edit permissions\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""OrganizationEdit\""] = 3] = \""OrganizationEdit\"";\r\n    /**\r\n     * View only anonymous link\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""AnonymousView\""] = 4] = \""AnonymousView\"";\r\n    /**\r\n     * Read/Write anonymous link\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""AnonymousEdit\""] = 5] = \""AnonymousEdit\"";\r\n    /**\r\n     * Flexible sharing Link where properties can change without affecting link URL\r\n     */\r\n    SharingLinkKind[SharingLinkKind[\""Flexible\""] = 6] = \""Flexible\"";\r\n})(SharingLinkKind || (SharingLinkKind = {}));\r\n/**\r\n * Indicates the role of the sharing link\r\n */\r\nexport var SharingRole;\r\n(function (SharingRole) {\r\n    SharingRole[SharingRole[\""None\""] = 0] = \""None\"";\r\n    SharingRole[SharingRole[\""View\""] = 1] = \""View\"";\r\n    SharingRole[SharingRole[\""Edit\""] = 2] = \""Edit\"";\r\n    SharingRole[SharingRole[\""Owner\""] = 3] = \""Owner\"";\r\n})(SharingRole || (SharingRole = {}));\r\nexport var SharingOperationStatusCode;\r\n(function (SharingOperationStatusCode) {\r\n    /**\r\n     * The share operation completed without errors.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CompletedSuccessfully\""] = 0] = \""CompletedSuccessfully\"";\r\n    /**\r\n     * The share operation completed and generated requests for access.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""AccessRequestsQueued\""] = 1] = \""AccessRequestsQueued\"";\r\n    /**\r\n     * The share operation failed as there were no resolved users.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""NoResolvedUsers\""] = -1] = \""NoResolvedUsers\"";\r\n    /**\r\n     * The share operation failed due to insufficient permissions.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""AccessDenied\""] = -2] = \""AccessDenied\"";\r\n    /**\r\n     * The share operation failed when attempting a cross site share, which is not supported.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CrossSiteRequestNotSupported\""] = -3] = \""CrossSiteRequestNotSupported\"";\r\n    /**\r\n     * The sharing operation failed due to an unknown error.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""UnknowError\""] = -4] = \""UnknowError\"";\r\n    /**\r\n     * The text you typed is too long. Please shorten it.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""EmailBodyTooLong\""] = -5] = \""EmailBodyTooLong\"";\r\n    /**\r\n     * The maximum number of unique scopes in the list has been exceeded.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""ListUniqueScopesExceeded\""] = -6] = \""ListUniqueScopesExceeded\"";\r\n    /**\r\n     * The share operation failed because a sharing capability is disabled in the site.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""CapabilityDisabled\""] = -7] = \""CapabilityDisabled\"";\r\n    /**\r\n     * The specified object for the share operation is not supported.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""ObjectNotSupported\""] = -8] = \""ObjectNotSupported\"";\r\n    /**\r\n     * A SharePoint group cannot contain another SharePoint group.\r\n     */\r\n    SharingOperationStatusCode[SharingOperationStatusCode[\""NestedGroupsNotSupported\""] = -9] = \""NestedGroupsNotSupported\"";\r\n})(SharingOperationStatusCode || (SharingOperationStatusCode = {}));\r\nexport var SPSharedObjectType;\r\n(function (SPSharedObjectType) {\r\n    SPSharedObjectType[SPSharedObjectType[\""Unknown\""] = 0] = \""Unknown\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""File\""] = 1] = \""File\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""Folder\""] = 2] = \""Folder\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""Item\""] = 3] = \""Item\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""List\""] = 4] = \""List\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""Web\""] = 5] = \""Web\"";\r\n    SPSharedObjectType[SPSharedObjectType[\""Max\""] = 6] = \""Max\"";\r\n})(SPSharedObjectType || (SPSharedObjectType = {}));\r\nexport var SharingDomainRestrictionMode;\r\n(function (SharingDomainRestrictionMode) {\r\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""None\""] = 0] = \""None\"";\r\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""AllowList\""] = 1] = \""AllowList\"";\r\n    SharingDomainRestrictionMode[SharingDomainRestrictionMode[\""BlockList\""] = 2] = \""BlockList\"";\r\n})(SharingDomainRestrictionMode || (SharingDomainRestrictionMode = {}));\r\nexport var RenderListDataOptions;\r\n(function (RenderListDataOptions) {\r\n    RenderListDataOptions[RenderListDataOptions[\""None\""] = 0] = \""None\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ContextInfo\""] = 1] = \""ContextInfo\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ListData\""] = 2] = \""ListData\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ListSchema\""] = 4] = \""ListSchema\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""MenuView\""] = 8] = \""MenuView\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ListContentType\""] = 16] = \""ListContentType\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""FileSystemItemId\""] = 32] = \""FileSystemItemId\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ClientFormSchema\""] = 64] = \""ClientFormSchema\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""QuickLaunch\""] = 128] = \""QuickLaunch\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""Spotlight\""] = 256] = \""Spotlight\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""Visualization\""] = 512] = \""Visualization\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ViewMetadata\""] = 1024] = \""ViewMetadata\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""DisableAutoHyperlink\""] = 2048] = \""DisableAutoHyperlink\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""EnableMediaTAUrls\""] = 4096] = \""EnableMediaTAUrls\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ParentInfo\""] = 8192] = \""ParentInfo\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""PageContextInfo\""] = 16384] = \""PageContextInfo\"";\r\n    RenderListDataOptions[RenderListDataOptions[\""ClientSideComponentManifest\""] = 32768] = \""ClientSideComponentManifest\"";\r\n})(RenderListDataOptions || (RenderListDataOptions = {}));\r\nexport var FieldUserSelectionMode;\r\n(function (FieldUserSelectionMode) {\r\n    FieldUserSelectionMode[FieldUserSelectionMode[\""PeopleAndGroups\""] = 1] = \""PeopleAndGroups\"";\r\n    FieldUserSelectionMode[FieldUserSelectionMode[\""PeopleOnly\""] = 0] = \""PeopleOnly\"";\r\n})(FieldUserSelectionMode || (FieldUserSelectionMode = {}));\r\nexport var ChoiceFieldFormatType;\r\n(function (ChoiceFieldFormatType) {\r\n    ChoiceFieldFormatType[ChoiceFieldFormatType[\""Dropdown\""] = 0] = \""Dropdown\"";\r\n    ChoiceFieldFormatType[ChoiceFieldFormatType[\""RadioButtons\""] = 1] = \""RadioButtons\"";\r\n})(ChoiceFieldFormatType || (ChoiceFieldFormatType = {}));\r\n/**\r\n * Specifies the originating zone of a request received.\r\n */\r\nexport var UrlZone;\r\n(function (UrlZone) {\r\n    /**\r\n     * Specifies the default zone used for requests unless another zone is specified.\r\n     */\r\n    UrlZone[UrlZone[\""DefaultZone\""] = 0] = \""DefaultZone\"";\r\n    /**\r\n     * Specifies an intranet zone.\r\n     */\r\n    UrlZone[UrlZone[\""Intranet\""] = 1] = \""Intranet\"";\r\n    /**\r\n     * Specifies an Internet zone.\r\n     */\r\n    UrlZone[UrlZone[\""Internet\""] = 2] = \""Internet\"";\r\n    /**\r\n     * Specifies a custom zone.\r\n     */\r\n    UrlZone[UrlZone[\""Custom\""] = 3] = \""Custom\"";\r\n    /**\r\n     * Specifies an extranet zone.\r\n     */\r\n    UrlZone[UrlZone[\""Extranet\""] = 4] = \""Extranet\"";\r\n})(UrlZone || (UrlZone = {}));\r\n//# sourceMappingURL=types.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\n/**\r\n * Describes a collection of user custom actions\r\n *\r\n */\r\nvar UserCustomActions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UserCustomActions, _super);\r\n    function UserCustomActions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    UserCustomActions_1 = UserCustomActions;\r\n    /**\r\n     * Returns the user custom action with the specified id\r\n     *\r\n     * @param id The GUID id of the user custom action to retrieve\r\n     */\r\n    UserCustomActions.prototype.getById = function (id) {\r\n        var uca = new UserCustomAction(this);\r\n        uca.concat(\""('\"" + id + \""')\"");\r\n        return uca;\r\n    };\r\n    /**\r\n     * Creates a user custom action\r\n     *\r\n     * @param properties The information object of property names and values which define the new user custom action\r\n     *\r\n     */\r\n    UserCustomActions.prototype.add = function (properties) {\r\n        var _this = this;\r\n        var postBody = jsS(extend({ __metadata: { \""type\"": \""SP.UserCustomAction\"" } }, properties));\r\n        return this.postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                action: _this.getById(data.Id),\r\n                data: data,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Deletes all user custom actions in the collection\r\n     *\r\n     */\r\n    UserCustomActions.prototype.clear = function () {\r\n        return this.clone(UserCustomActions_1, \""clear\"").postCore();\r\n    };\r\n    var UserCustomActions_1;\r\n    UserCustomActions = UserCustomActions_1 = tslib_1.__decorate([\r\n        defaultPath(\""usercustomactions\"")\r\n    ], UserCustomActions);\r\n    return UserCustomActions;\r\n}(SharePointQueryableCollection));\r\nexport { UserCustomActions };\r\n/**\r\n * Describes a single user custom action\r\n *\r\n */\r\nvar UserCustomAction = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UserCustomAction, _super);\r\n    function UserCustomAction() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n        * Updates this user custom action with the supplied properties\r\n        *\r\n        * @param properties An information object of property names and values to update for this user custom action\r\n        */\r\n        _this.update = _this._update(\""SP.UserCustomAction\"", function (data) { return ({ data: data, action: _this }); });\r\n        return _this;\r\n    }\r\n    /**\r\n    * Removes this user custom action\r\n    *\r\n    */\r\n    UserCustomAction.prototype.delete = function () {\r\n        return _super.prototype.deleteCore.call(this);\r\n    };\r\n    return UserCustomAction;\r\n}(SharePointQueryableInstance));\r\nexport { UserCustomAction };\r\n//# sourceMappingURL=usercustomactions.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\nvar UserProfileQuery = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UserProfileQuery, _super);\r\n    /**\r\n     * Creates a new instance of the UserProfileQuery class\r\n     *\r\n     * @param baseUrl The url or SharePointQueryable which forms the parent of this user profile query\r\n     */\r\n    function UserProfileQuery(baseUrl, path) {\r\n        if (path === void 0) { path = \""_api/sp.userprofiles.peoplemanager\""; }\r\n        var _this = _super.call(this, baseUrl, path) || this;\r\n        _this.clientPeoplePickerQuery = (new ClientPeoplePickerQuery(baseUrl)).configureFrom(_this);\r\n        _this.profileLoader = (new ProfileLoader(baseUrl)).configureFrom(_this);\r\n        return _this;\r\n    }\r\n    Object.defineProperty(UserProfileQuery.prototype, \""editProfileLink\"", {\r\n        /**\r\n         * The url of the edit profile page for the current user\r\n         */\r\n        get: function () {\r\n            return this.clone(UserProfileQuery, \""EditProfileLink\"").get();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(UserProfileQuery.prototype, \""isMyPeopleListPublic\"", {\r\n        /**\r\n         * A boolean value that indicates whether the current user's \""People I'm Following\"" list is public\r\n         */\r\n        get: function () {\r\n            return this.clone(UserProfileQuery, \""IsMyPeopleListPublic\"").get();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * A boolean value that indicates whether the current user is being followed by the specified user\r\n     *\r\n     * @param loginName The account name of the user\r\n     */\r\n    UserProfileQuery.prototype.amIFollowedBy = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""amifollowedby(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * A boolean value that indicates whether the current user is following the specified user\r\n     *\r\n     * @param loginName The account name of the user\r\n     */\r\n    UserProfileQuery.prototype.amIFollowing = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""amifollowing(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * Gets tags that the current user is following\r\n     *\r\n     * @param maxCount The maximum number of tags to retrieve (default is 20)\r\n     */\r\n    UserProfileQuery.prototype.getFollowedTags = function (maxCount) {\r\n        if (maxCount === void 0) { maxCount = 20; }\r\n        return this.clone(UserProfileQuery, \""getfollowedtags(\"" + maxCount + \"")\"").get();\r\n    };\r\n    /**\r\n     * Gets the people who are following the specified user\r\n     *\r\n     * @param loginName The account name of the user\r\n     */\r\n    UserProfileQuery.prototype.getFollowersFor = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""getfollowersfor(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    Object.defineProperty(UserProfileQuery.prototype, \""myFollowers\"", {\r\n        /**\r\n         * Gets the people who are following the current user\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""getmyfollowers\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(UserProfileQuery.prototype, \""myProperties\"", {\r\n        /**\r\n         * Gets user properties for the current user\r\n         *\r\n         */\r\n        get: function () {\r\n            return new UserProfileQuery(this, \""getmyproperties\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the people who the specified user is following\r\n     *\r\n     * @param loginName The account name of the user.\r\n     */\r\n    UserProfileQuery.prototype.getPeopleFollowedBy = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""getpeoplefollowedby(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * Gets user properties for the specified user.\r\n     *\r\n     * @param loginName The account name of the user.\r\n     */\r\n    UserProfileQuery.prototype.getPropertiesFor = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""getpropertiesfor(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    Object.defineProperty(UserProfileQuery.prototype, \""trendingTags\"", {\r\n        /**\r\n         * Gets the 20 most popular hash tags over the past week, sorted so that the most popular tag appears first\r\n         *\r\n         */\r\n        get: function () {\r\n            var q = this.clone(UserProfileQuery, null);\r\n            q.concat(\"".gettrendingtags\"");\r\n            return q.get();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets the specified user profile property for the specified user\r\n     *\r\n     * @param loginName The account name of the user\r\n     * @param propertyName The case-sensitive name of the property to get\r\n     */\r\n    UserProfileQuery.prototype.getUserProfilePropertyFor = function (loginName, propertyName) {\r\n        var q = this.clone(UserProfileQuery, \""getuserprofilepropertyfor(accountname=@v, propertyname='\"" + propertyName + \""')\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * Removes the specified user from the user's list of suggested people to follow\r\n     *\r\n     * @param loginName The account name of the user\r\n     */\r\n    UserProfileQuery.prototype.hideSuggestion = function (loginName) {\r\n        var q = this.clone(UserProfileQuery, \""hidesuggestion(@v)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(loginName) + \""'\"");\r\n        return q.postCore();\r\n    };\r\n    /**\r\n     * A boolean values that indicates whether the first user is following the second user\r\n     *\r\n     * @param follower The account name of the user who might be following the followee\r\n     * @param followee The account name of the user who might be followed by the follower\r\n     */\r\n    UserProfileQuery.prototype.isFollowing = function (follower, followee) {\r\n        var q = this.clone(UserProfileQuery, null);\r\n        q.concat(\"".isfollowing(possiblefolloweraccountname=@v, possiblefolloweeaccountname=@y)\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(follower) + \""'\"");\r\n        q.query.set(\""@y\"", \""'\"" + encodeURIComponent(followee) + \""'\"");\r\n        return q.get();\r\n    };\r\n    /**\r\n     * Uploads and sets the user profile picture (Users can upload a picture to their own profile only). Not supported for batching.\r\n     *\r\n     * @param profilePicSource Blob data representing the user's picture in BMP, JPEG, or PNG format of up to 4.76MB\r\n     */\r\n    UserProfileQuery.prototype.setMyProfilePic = function (profilePicSource) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            var buffer = null;\r\n            var reader = new FileReader();\r\n            reader.onload = function (e) { return buffer = e.target.result; };\r\n            reader.readAsArrayBuffer(profilePicSource);\r\n            var request = new UserProfileQuery(_this, \""setmyprofilepicture\"");\r\n            request.postCore({\r\n                body: String.fromCharCode.apply(null, new Uint16Array(buffer)),\r\n            }).then(function (_) { return resolve(); }).catch(function (e) { return reject(e); });\r\n        });\r\n    };\r\n    /**\r\n     * Sets single value User Profile property\r\n     *\r\n     * @param accountName The account name of the user\r\n     * @param propertyName Property name\r\n     * @param propertyValue Property value\r\n     */\r\n    UserProfileQuery.prototype.setSingleValueProfileProperty = function (accountName, propertyName, propertyValue) {\r\n        var postBody = jsS({\r\n            accountName: accountName,\r\n            propertyName: propertyName,\r\n            propertyValue: propertyValue,\r\n        });\r\n        return this.clone(UserProfileQuery, \""SetSingleValueProfileProperty\"")\r\n            .postCore({ body: postBody });\r\n    };\r\n    /**\r\n     * Sets multi valued User Profile property\r\n     *\r\n     * @param accountName The account name of the user\r\n     * @param propertyName Property name\r\n     * @param propertyValues Property values\r\n     */\r\n    UserProfileQuery.prototype.setMultiValuedProfileProperty = function (accountName, propertyName, propertyValues) {\r\n        var postBody = jsS({\r\n            accountName: accountName,\r\n            propertyName: propertyName,\r\n            propertyValues: propertyValues,\r\n        });\r\n        return this.clone(UserProfileQuery, \""SetMultiValuedProfileProperty\"")\r\n            .postCore({ body: postBody });\r\n    };\r\n    /**\r\n     * Provisions one or more users' personal sites. (My Site administrator on SharePoint Online only)\r\n     *\r\n     * @param emails The email addresses of the users to provision sites for\r\n     */\r\n    UserProfileQuery.prototype.createPersonalSiteEnqueueBulk = function () {\r\n        var emails = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            emails[_i] = arguments[_i];\r\n        }\r\n        return this.profileLoader.createPersonalSiteEnqueueBulk(emails);\r\n    };\r\n    Object.defineProperty(UserProfileQuery.prototype, \""ownerUserProfile\"", {\r\n        /**\r\n         * Gets the user profile of the site owner\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.profileLoader.ownerUserProfile;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(UserProfileQuery.prototype, \""userProfile\"", {\r\n        /**\r\n         * Gets the user profile for the current user\r\n         */\r\n        get: function () {\r\n            return this.profileLoader.userProfile;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Enqueues creating a personal site for this user, which can be used to share documents, web pages, and other files\r\n     *\r\n     * @param interactiveRequest true if interactively (web) initiated request, or false (default) if non-interactively (client) initiated request\r\n     */\r\n    UserProfileQuery.prototype.createPersonalSite = function (interactiveRequest) {\r\n        if (interactiveRequest === void 0) { interactiveRequest = false; }\r\n        return this.profileLoader.createPersonalSite(interactiveRequest);\r\n    };\r\n    /**\r\n     * Sets the privacy settings for this profile\r\n     *\r\n     * @param share true to make all social data public; false to make all social data private\r\n     */\r\n    UserProfileQuery.prototype.shareAllSocialData = function (share) {\r\n        return this.profileLoader.shareAllSocialData(share);\r\n    };\r\n    /**\r\n     * Resolves user or group using specified query parameters\r\n     *\r\n     * @param queryParams The query parameters used to perform resolve\r\n     */\r\n    UserProfileQuery.prototype.clientPeoplePickerResolveUser = function (queryParams) {\r\n        return this.clientPeoplePickerQuery.clientPeoplePickerResolveUser(queryParams);\r\n    };\r\n    /**\r\n     * Searches for users or groups using specified query parameters\r\n     *\r\n     * @param queryParams The query parameters used to perform search\r\n     */\r\n    UserProfileQuery.prototype.clientPeoplePickerSearchUser = function (queryParams) {\r\n        return this.clientPeoplePickerQuery.clientPeoplePickerSearchUser(queryParams);\r\n    };\r\n    return UserProfileQuery;\r\n}(SharePointQueryableInstance));\r\nexport { UserProfileQuery };\r\nvar ProfileLoader = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ProfileLoader, _super);\r\n    function ProfileLoader() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ProfileLoader_1 = ProfileLoader;\r\n    /**\r\n     * Provisions one or more users' personal sites. (My Site administrator on SharePoint Online only) Doesn't support batching\r\n     *\r\n     * @param emails The email addresses of the users to provision sites for\r\n     */\r\n    ProfileLoader.prototype.createPersonalSiteEnqueueBulk = function (emails) {\r\n        return this.clone(ProfileLoader_1, \""createpersonalsiteenqueuebulk\"", false).postCore({\r\n            body: jsS({ \""emailIDs\"": emails }),\r\n        });\r\n    };\r\n    Object.defineProperty(ProfileLoader.prototype, \""ownerUserProfile\"", {\r\n        /**\r\n         * Gets the user profile of the site owner.\r\n         *\r\n         */\r\n        get: function () {\r\n            var q = this.getParent(ProfileLoader_1, this.parentUrl, \""_api/sp.userprofiles.profileloader.getowneruserprofile\"");\r\n            if (this.hasBatch) {\r\n                q = q.inBatch(this.batch);\r\n            }\r\n            return q.postCore();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ProfileLoader.prototype, \""userProfile\"", {\r\n        /**\r\n         * Gets the user profile of the current user.\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.clone(ProfileLoader_1, \""getuserprofile\"").postCore();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Enqueues creating a personal site for this user, which can be used to share documents, web pages, and other files.\r\n     *\r\n     * @param interactiveRequest true if interactively (web) initiated request, or false (default) if non-interactively (client) initiated request\r\n     */\r\n    ProfileLoader.prototype.createPersonalSite = function (interactiveRequest) {\r\n        if (interactiveRequest === void 0) { interactiveRequest = false; }\r\n        return this.clone(ProfileLoader_1, \""getuserprofile/createpersonalsiteenque(\"" + interactiveRequest + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Sets the privacy settings for this profile\r\n     *\r\n     * @param share true to make all social data public; false to make all social data private.\r\n     */\r\n    ProfileLoader.prototype.shareAllSocialData = function (share) {\r\n        return this.clone(ProfileLoader_1, \""getuserprofile/shareallsocialdata(\"" + share + \"")\"").postCore();\r\n    };\r\n    var ProfileLoader_1;\r\n    ProfileLoader = ProfileLoader_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/sp.userprofiles.profileloader.getprofileloader\"")\r\n    ], ProfileLoader);\r\n    return ProfileLoader;\r\n}(SharePointQueryable));\r\nvar ClientPeoplePickerQuery = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ClientPeoplePickerQuery, _super);\r\n    function ClientPeoplePickerQuery() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ClientPeoplePickerQuery_1 = ClientPeoplePickerQuery;\r\n    /**\r\n     * Resolves user or group using specified query parameters\r\n     *\r\n     * @param queryParams The query parameters used to perform resolve\r\n     */\r\n    ClientPeoplePickerQuery.prototype.clientPeoplePickerResolveUser = function (queryParams) {\r\n        var q = this.clone(ClientPeoplePickerQuery_1, null);\r\n        q.concat(\"".clientpeoplepickerresolveuser\"");\r\n        return q.postCore({\r\n            body: this.createClientPeoplePickerQueryParametersRequestBody(queryParams),\r\n        })\r\n            .then(function (res) {\r\n            if (typeof res === \""object\"") {\r\n                return res.ClientPeoplePickerResolveUser;\r\n            }\r\n            return res;\r\n        })\r\n            .then(JSON.parse);\r\n    };\r\n    /**\r\n     * Searches for users or groups using specified query parameters\r\n     *\r\n     * @param queryParams The query parameters used to perform search\r\n     */\r\n    ClientPeoplePickerQuery.prototype.clientPeoplePickerSearchUser = function (queryParams) {\r\n        var q = this.clone(ClientPeoplePickerQuery_1, null);\r\n        q.concat(\"".clientpeoplepickersearchuser\"");\r\n        return q.postCore({\r\n            body: this.createClientPeoplePickerQueryParametersRequestBody(queryParams),\r\n        })\r\n            .then(function (res) {\r\n            if (typeof res === \""object\"") {\r\n                return res.ClientPeoplePickerSearchUser;\r\n            }\r\n            return res;\r\n        })\r\n            .then(JSON.parse);\r\n    };\r\n    /**\r\n     * Creates ClientPeoplePickerQueryParameters request body\r\n     *\r\n     * @param queryParams The query parameters to create request body\r\n     */\r\n    ClientPeoplePickerQuery.prototype.createClientPeoplePickerQueryParametersRequestBody = function (queryParams) {\r\n        return jsS({\r\n            \""queryParams\"": extend(metadata(\""SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters\""), queryParams),\r\n        });\r\n    };\r\n    var ClientPeoplePickerQuery_1;\r\n    ClientPeoplePickerQuery = ClientPeoplePickerQuery_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/sp.ui.applicationpages.clientpeoplepickerwebserviceinterface\"")\r\n    ], ClientPeoplePickerQuery);\r\n    return ClientPeoplePickerQuery;\r\n}(SharePointQueryable));\r\n//# sourceMappingURL=userprofiles.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable } from \""./sharepointqueryable\"";\r\nimport { extend, jsS, hOP } from \""@pnp/common\"";\r\nimport { File } from \""./files\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Allows for calling of the static SP.Utilities.Utility methods by supplying the method name\r\n */\r\nvar UtilityMethod = /** @class */ (function (_super) {\r\n    tslib_1.__extends(UtilityMethod, _super);\r\n    /**\r\n     * Creates a new instance of the Utility method class\r\n     *\r\n     * @param baseUrl The parent url provider\r\n     * @param methodName The static method name to call on the utility class\r\n     */\r\n    function UtilityMethod(baseUrl, methodName) {\r\n        return _super.call(this, UtilityMethod.getBaseUrl(baseUrl), \""_api/SP.Utilities.Utility.\"" + methodName) || this;\r\n    }\r\n    UtilityMethod.getBaseUrl = function (candidate) {\r\n        if (typeof candidate === \""string\"") {\r\n            return candidate;\r\n        }\r\n        var c = candidate;\r\n        var url = c.toUrl();\r\n        var index = url.indexOf(\""_api/\"");\r\n        if (index < 0) {\r\n            return url;\r\n        }\r\n        return url.substr(0, index);\r\n    };\r\n    UtilityMethod.prototype.excute = function (props) {\r\n        return this.postCore({\r\n            body: jsS(props),\r\n        });\r\n    };\r\n    /**\r\n     * Sends an email based on the supplied properties\r\n     *\r\n     * @param props The properties of the email to send\r\n     */\r\n    UtilityMethod.prototype.sendEmail = function (props) {\r\n        var params = {\r\n            properties: extend(metadata(\""SP.Utilities.EmailProperties\""), {\r\n                Body: props.Body,\r\n                From: props.From,\r\n                Subject: props.Subject,\r\n            }),\r\n        };\r\n        if (props.To && props.To.length > 0) {\r\n            params.properties = extend(params.properties, {\r\n                To: { results: props.To },\r\n            });\r\n        }\r\n        if (props.CC && props.CC.length > 0) {\r\n            params.properties = extend(params.properties, {\r\n                CC: { results: props.CC },\r\n            });\r\n        }\r\n        if (props.BCC && props.BCC.length > 0) {\r\n            params.properties = extend(params.properties, {\r\n                BCC: { results: props.BCC },\r\n            });\r\n        }\r\n        if (props.AdditionalHeaders) {\r\n            params.properties = extend(params.properties, {\r\n                AdditionalHeaders: props.AdditionalHeaders,\r\n            });\r\n        }\r\n        return this.clone(UtilityMethod, \""SendEmail\"", true).excute(params);\r\n    };\r\n    UtilityMethod.prototype.getCurrentUserEmailAddresses = function () {\r\n        return this.clone(UtilityMethod, \""GetCurrentUserEmailAddresses\"", true).excute({}).then(function (r) {\r\n            return hOP(r, \""GetCurrentUserEmailAddresses\"") ? r.GetCurrentUserEmailAddresses : r;\r\n        });\r\n    };\r\n    UtilityMethod.prototype.resolvePrincipal = function (input, scopes, sources, inputIsEmailOnly, addToUserInfoList, matchUserInfoList) {\r\n        if (matchUserInfoList === void 0) { matchUserInfoList = false; }\r\n        var params = {\r\n            addToUserInfoList: addToUserInfoList,\r\n            input: input,\r\n            inputIsEmailOnly: inputIsEmailOnly,\r\n            matchUserInfoList: matchUserInfoList,\r\n            scopes: scopes,\r\n            sources: sources,\r\n        };\r\n        return this.clone(UtilityMethod, \""ResolvePrincipalInCurrentContext\"", true).excute(params).then(function (r) {\r\n            return hOP(r, \""ResolvePrincipalInCurrentContext\"") ? r.ResolvePrincipalInCurrentContext : r;\r\n        });\r\n    };\r\n    UtilityMethod.prototype.searchPrincipals = function (input, scopes, sources, groupName, maxCount) {\r\n        var params = {\r\n            groupName: groupName,\r\n            input: input,\r\n            maxCount: maxCount,\r\n            scopes: scopes,\r\n            sources: sources,\r\n        };\r\n        return this.clone(UtilityMethod, \""SearchPrincipalsUsingContextWeb\"", true).excute(params).then(function (r) {\r\n            return hOP(r, \""SearchPrincipalsUsingContextWeb\"") ? r.SearchPrincipalsUsingContextWeb : r;\r\n        });\r\n    };\r\n    UtilityMethod.prototype.createEmailBodyForInvitation = function (pageAddress) {\r\n        var params = {\r\n            pageAddress: pageAddress,\r\n        };\r\n        return this.clone(UtilityMethod, \""CreateEmailBodyForInvitation\"", true).excute(params).then(function (r) {\r\n            return hOP(r, \""CreateEmailBodyForInvitation\"") ? r.CreateEmailBodyForInvitation : r;\r\n        });\r\n    };\r\n    UtilityMethod.prototype.expandGroupsToPrincipals = function (inputs, maxCount) {\r\n        if (maxCount === void 0) { maxCount = 30; }\r\n        var params = {\r\n            inputs: inputs,\r\n            maxCount: maxCount,\r\n        };\r\n        return this.clone(UtilityMethod, \""ExpandGroupsToPrincipals\"", true).excute(params).then(function (r) {\r\n            return hOP(r, \""ExpandGroupsToPrincipals\"") ? r.ExpandGroupsToPrincipals : r;\r\n        });\r\n    };\r\n    UtilityMethod.prototype.createWikiPage = function (info) {\r\n        return this.clone(UtilityMethod, \""CreateWikiPageInContextWeb\"", true).excute({\r\n            parameters: info,\r\n        }).then(function (r) {\r\n            return {\r\n                data: hOP(r, \""CreateWikiPageInContextWeb\"") ? r.CreateWikiPageInContextWeb : r,\r\n                file: new File(odataUrlFrom(r)),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Checks if file or folder name contains invalid characters\r\n     *\r\n     * @param input File or folder name to check\r\n     * @param onPremise Set to true for SharePoint On-Premise\r\n     * @returns True if contains invalid chars, false otherwise\r\n     */\r\n    UtilityMethod.prototype.containsInvalidFileFolderChars = function (input, onPremise) {\r\n        if (onPremise === void 0) { onPremise = false; }\r\n        if (onPremise) {\r\n            return UtilityMethod.InvalidFileFolderNameCharsOnPremiseRegex.test(input);\r\n        }\r\n        else {\r\n            return UtilityMethod.InvalidFileFolderNameCharsOnlineRegex.test(input);\r\n        }\r\n    };\r\n    /**\r\n     * Removes invalid characters from file or folder name\r\n     *\r\n     * @param input File or folder name\r\n     * @param replacer Value that will replace invalid characters\r\n     * @param onPremise Set to true for SharePoint On-Premise\r\n     * @returns File or folder name with replaced invalid characters\r\n     */\r\n    UtilityMethod.prototype.stripInvalidFileFolderChars = function (input, replacer, onPremise) {\r\n        if (replacer === void 0) { replacer = \""\""; }\r\n        if (onPremise === void 0) { onPremise = false; }\r\n        if (onPremise) {\r\n            return input.replace(UtilityMethod.InvalidFileFolderNameCharsOnPremiseRegex, replacer);\r\n        }\r\n        else {\r\n            return input.replace(UtilityMethod.InvalidFileFolderNameCharsOnlineRegex, replacer);\r\n        }\r\n    };\r\n    UtilityMethod.InvalidFileFolderNameCharsOnlineRegex = /[\""*:<>?/\\\\|\\x00-\\x1f\\x7f-\\x9f]/g;\r\n    UtilityMethod.InvalidFileFolderNameCharsOnPremiseRegex = /[\""#%*:<>?/\\\\|\\x00-\\x1f\\x7f-\\x9f]/g;\r\n    return UtilityMethod;\r\n}(SharePointQueryable));\r\nexport { UtilityMethod };\r\n//# sourceMappingURL=utilities.js.map"",""import { stringIsNullOrEmpty } from \""@pnp/common\"";\r\nexport function extractWebUrl(candidateUrl) {\r\n    if (stringIsNullOrEmpty(candidateUrl)) {\r\n        return \""\"";\r\n    }\r\n    var index = candidateUrl.indexOf(\""_api/\"");\r\n    if (index < 0) {\r\n        index = candidateUrl.indexOf(\""_vti_bin/\"");\r\n    }\r\n    if (index > -1) {\r\n        return candidateUrl.substr(0, index);\r\n    }\r\n    // if all else fails just give them what they gave us back\r\n    return candidateUrl;\r\n}\r\n//# sourceMappingURL=extractweburl.js.map"",""export function metadata(type) {\r\n    return {\r\n        \""__metadata\"": { \""type\"": type },\r\n    };\r\n}\r\n//# sourceMappingURL=metadata.js.map"",""import { combine, isUrlAbsolute, hOP } from \""@pnp/common\"";\r\nimport { SPRuntimeConfig } from \""../config/splibconfig\"";\r\n/**\r\n * Ensures that a given url is absolute for the current web based on context\r\n *\r\n * @param candidateUrl The url to make absolute\r\n *\r\n */\r\nexport function toAbsoluteUrl(candidateUrl) {\r\n    return new Promise(function (resolve) {\r\n        if (isUrlAbsolute(candidateUrl)) {\r\n            // if we are already absolute, then just return the url\r\n            return resolve(candidateUrl);\r\n        }\r\n        if (SPRuntimeConfig.baseUrl !== null) {\r\n            // base url specified either with baseUrl of spfxContext config property\r\n            return resolve(combine(SPRuntimeConfig.baseUrl, candidateUrl));\r\n        }\r\n        if (global._spPageContextInfo !== undefined) {\r\n            // operating in classic pages\r\n            if (hOP(global._spPageContextInfo, \""webAbsoluteUrl\"")) {\r\n                return resolve(combine(global._spPageContextInfo.webAbsoluteUrl, candidateUrl));\r\n            }\r\n            else if (hOP(global._spPageContextInfo, \""webServerRelativeUrl\"")) {\r\n                return resolve(combine(global._spPageContextInfo.webServerRelativeUrl, candidateUrl));\r\n            }\r\n        }\r\n        // does window.location exist and have a certain path part in it?\r\n        if (global.location !== undefined) {\r\n            var baseUrl_1 = global.location.toString().toLowerCase();\r\n            [\""/_layouts/\"", \""/siteassets/\""].forEach(function (s) {\r\n                var index = baseUrl_1.indexOf(s);\r\n                if (index > 0) {\r\n                    return resolve(combine(baseUrl_1.substr(0, index), candidateUrl));\r\n                }\r\n            });\r\n        }\r\n        return resolve(candidateUrl);\r\n    });\r\n}\r\n//# sourceMappingURL=toabsoluteurl.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableCollection, SharePointQueryableInstance, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nimport { metadata } from \""./utils/metadata\"";\r\n/**\r\n * Describes the views available in the current context\r\n *\r\n */\r\nvar Views = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Views, _super);\r\n    function Views() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Views_1 = Views;\r\n    /**\r\n     * Gets a view by guid id\r\n     *\r\n     * @param id The GUID id of the view\r\n     */\r\n    Views.prototype.getById = function (id) {\r\n        var v = new View(this);\r\n        v.concat(\""('\"" + id + \""')\"");\r\n        return v;\r\n    };\r\n    /**\r\n     * Gets a view by title (case-sensitive)\r\n     *\r\n     * @param title The case-sensitive title of the view\r\n     */\r\n    Views.prototype.getByTitle = function (title) {\r\n        return new View(this, \""getByTitle('\"" + title + \""')\"");\r\n    };\r\n    /**\r\n     * Adds a new view to the collection\r\n     *\r\n     * @param title The new views's title\r\n     * @param personalView True if this is a personal view, otherwise false, default = false\r\n     * @param additionalSettings Will be passed as part of the view creation body\r\n     */\r\n    Views.prototype.add = function (title, personalView, additionalSettings) {\r\n        var _this = this;\r\n        if (personalView === void 0) { personalView = false; }\r\n        if (additionalSettings === void 0) { additionalSettings = {}; }\r\n        var postBody = jsS(Object.assign(metadata(\""SP.View\""), {\r\n            \""PersonalView\"": personalView,\r\n            \""Title\"": title,\r\n        }, additionalSettings));\r\n        return this.clone(Views_1, null).postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                view: _this.getById(data.Id),\r\n            };\r\n        });\r\n    };\r\n    var Views_1;\r\n    Views = Views_1 = tslib_1.__decorate([\r\n        defaultPath(\""views\"")\r\n    ], Views);\r\n    return Views;\r\n}(SharePointQueryableCollection));\r\nexport { Views };\r\n/**\r\n * Describes a single View instance\r\n *\r\n */\r\nvar View = /** @class */ (function (_super) {\r\n    tslib_1.__extends(View, _super);\r\n    function View() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        /**\r\n         * Updates this view intance with the supplied properties\r\n         *\r\n         * @param properties A plain object hash of values to update for the view\r\n         */\r\n        _this.update = _this._update(\""SP.View\"", function (data) { return ({ data: data, view: _this }); });\r\n        /**\r\n         * Delete this view\r\n         *\r\n         */\r\n        _this.delete = _this._delete;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(View.prototype, \""fields\"", {\r\n        get: function () {\r\n            return new ViewFields(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Returns the list view as HTML.\r\n     *\r\n     */\r\n    View.prototype.renderAsHtml = function () {\r\n        return this.clone(SharePointQueryable, \""renderashtml\"").get();\r\n    };\r\n    /**\r\n     * Sets the view schema\r\n     *\r\n     * @param viewXml The view XML to set\r\n     */\r\n    View.prototype.setViewXml = function (viewXml) {\r\n        return this.clone(View, \""SetViewXml\"").postCore({\r\n            body: jsS({\r\n                viewXml: viewXml,\r\n            }),\r\n        });\r\n    };\r\n    return View;\r\n}(SharePointQueryableInstance));\r\nexport { View };\r\nvar ViewFields = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ViewFields, _super);\r\n    function ViewFields() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ViewFields_1 = ViewFields;\r\n    /**\r\n     * Gets a value that specifies the XML schema that represents the collection.\r\n     */\r\n    ViewFields.prototype.getSchemaXml = function () {\r\n        return this.clone(SharePointQueryable, \""schemaxml\"").get();\r\n    };\r\n    /**\r\n     * Adds the field with the specified field internal name or display name to the collection.\r\n     *\r\n     * @param fieldTitleOrInternalName The case-sensitive internal name or display name of the field to add.\r\n     */\r\n    ViewFields.prototype.add = function (fieldTitleOrInternalName) {\r\n        return this.clone(ViewFields_1, \""addviewfield('\"" + fieldTitleOrInternalName + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Moves the field with the specified field internal name to the specified position in the collection.\r\n     *\r\n     * @param fieldInternalName The case-sensitive internal name of the field to move.\r\n     * @param index The zero-based index of the new position for the field.\r\n     */\r\n    ViewFields.prototype.move = function (fieldInternalName, index) {\r\n        return this.clone(ViewFields_1, \""moveviewfieldto\"").postCore({\r\n            body: jsS({ \""field\"": fieldInternalName, \""index\"": index }),\r\n        });\r\n    };\r\n    /**\r\n     * Removes all the fields from the collection.\r\n     */\r\n    ViewFields.prototype.removeAll = function () {\r\n        return this.clone(ViewFields_1, \""removeallviewfields\"").postCore();\r\n    };\r\n    /**\r\n     * Removes the field with the specified field internal name from the collection.\r\n     *\r\n     * @param fieldInternalName The case-sensitive internal name of the field to remove from the view.\r\n     */\r\n    ViewFields.prototype.remove = function (fieldInternalName) {\r\n        return this.clone(ViewFields_1, \""removeviewfield('\"" + fieldInternalName + \""')\"").postCore();\r\n    };\r\n    var ViewFields_1;\r\n    ViewFields = ViewFields_1 = tslib_1.__decorate([\r\n        defaultPath(\""viewfields\"")\r\n    ], ViewFields);\r\n    return ViewFields;\r\n}(SharePointQueryableCollection));\r\nexport { ViewFields };\r\n//# sourceMappingURL=views.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { SharePointQueryable, SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { jsS } from \""@pnp/common\"";\r\nvar LimitedWebPartManager = /** @class */ (function (_super) {\r\n    tslib_1.__extends(LimitedWebPartManager, _super);\r\n    function LimitedWebPartManager() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(LimitedWebPartManager.prototype, \""webparts\"", {\r\n        /**\r\n         * Gets the set of web part definitions contained by this web part manager\r\n         *\r\n         */\r\n        get: function () {\r\n            return new WebPartDefinitions(this, \""webparts\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Exports a webpart definition\r\n     *\r\n     * @param id the GUID id of the definition to export\r\n     */\r\n    LimitedWebPartManager.prototype.export = function (id) {\r\n        return this.clone(LimitedWebPartManager, \""ExportWebPart\"").postCore({\r\n            body: jsS({ webPartId: id }),\r\n        });\r\n    };\r\n    /**\r\n     * Imports a webpart\r\n     *\r\n     * @param xml webpart definition which must be valid XML in the .dwp or .webpart format\r\n     */\r\n    LimitedWebPartManager.prototype.import = function (xml) {\r\n        return this.clone(LimitedWebPartManager, \""ImportWebPart\"").postCore({\r\n            body: jsS({ webPartXml: xml }),\r\n        });\r\n    };\r\n    return LimitedWebPartManager;\r\n}(SharePointQueryable));\r\nexport { LimitedWebPartManager };\r\nvar WebPartDefinitions = /** @class */ (function (_super) {\r\n    tslib_1.__extends(WebPartDefinitions, _super);\r\n    function WebPartDefinitions() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * Gets a web part definition from the collection by id\r\n     *\r\n     * @param id The storage ID of the SPWebPartDefinition to retrieve\r\n     */\r\n    WebPartDefinitions.prototype.getById = function (id) {\r\n        return new WebPartDefinition(this, \""getbyid('\"" + id + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a web part definition from the collection by storage id\r\n     *\r\n     * @param id The WebPart.ID of the SPWebPartDefinition to retrieve\r\n     */\r\n    WebPartDefinitions.prototype.getByControlId = function (id) {\r\n        return new WebPartDefinition(this, \""getByControlId('\"" + id + \""')\"");\r\n    };\r\n    return WebPartDefinitions;\r\n}(SharePointQueryableCollection));\r\nexport { WebPartDefinitions };\r\nvar WebPartDefinition = /** @class */ (function (_super) {\r\n    tslib_1.__extends(WebPartDefinition, _super);\r\n    function WebPartDefinition() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(WebPartDefinition.prototype, \""webpart\"", {\r\n        /**\r\n         * Gets the webpart information associated with this definition\r\n         */\r\n        get: function () {\r\n            return new WebPart(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Saves changes to the Web Part made using other properties and methods on the SPWebPartDefinition object\r\n     */\r\n    WebPartDefinition.prototype.saveChanges = function () {\r\n        return this.clone(WebPartDefinition, \""SaveWebPartChanges\"").postCore();\r\n    };\r\n    /**\r\n     * Moves the Web Part to a different location on a Web Part Page\r\n     *\r\n     * @param zoneId The ID of the Web Part Zone to which to move the Web Part\r\n     * @param zoneIndex A Web Part zone index that specifies the position at which the Web Part is to be moved within the destination Web Part zone\r\n     */\r\n    WebPartDefinition.prototype.moveTo = function (zoneId, zoneIndex) {\r\n        return this.clone(WebPartDefinition, \""MoveWebPartTo(zoneID='\"" + zoneId + \""', zoneIndex=\"" + zoneIndex + \"")\"").postCore();\r\n    };\r\n    /**\r\n     * Closes the Web Part. If the Web Part is already closed, this method does nothing\r\n     */\r\n    WebPartDefinition.prototype.close = function () {\r\n        return this.clone(WebPartDefinition, \""CloseWebPart\"").postCore();\r\n    };\r\n    /**\r\n     * Opens the Web Part. If the Web Part is already closed, this method does nothing\r\n     */\r\n    WebPartDefinition.prototype.open = function () {\r\n        return this.clone(WebPartDefinition, \""OpenWebPart\"").postCore();\r\n    };\r\n    /**\r\n     * Removes a webpart from a page, all settings will be lost\r\n     */\r\n    WebPartDefinition.prototype.delete = function () {\r\n        return this.clone(WebPartDefinition, \""DeleteWebPart\"").postCore();\r\n    };\r\n    return WebPartDefinition;\r\n}(SharePointQueryableInstance));\r\nexport { WebPartDefinition };\r\nvar WebPart = /** @class */ (function (_super) {\r\n    tslib_1.__extends(WebPart, _super);\r\n    function WebPart() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    WebPart = tslib_1.__decorate([\r\n        defaultPath(\""webpart\"")\r\n    ], WebPart);\r\n    return WebPart;\r\n}(SharePointQueryableInstance));\r\nexport { WebPart };\r\n//# sourceMappingURL=webparts.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, jsS } from \""@pnp/common\"";\r\nimport { SharePointQueryableInstance, SharePointQueryableCollection, defaultPath } from \""./sharepointqueryable\"";\r\nimport { SharePointQueryableShareableWeb } from \""./sharepointqueryableshareable\"";\r\nimport { Folders, Folder } from \""./folders\"";\r\nimport { Lists, List } from \""./lists\"";\r\nimport { Fields } from \""./fields\"";\r\nimport { Site } from \""./site\"";\r\nimport { Navigation } from \""./navigation\"";\r\nimport { SiteGroups, SiteGroup } from \""./sitegroups\"";\r\nimport { ContentTypes } from \""./contenttypes\"";\r\nimport { RoleDefinitions } from \""./roles\"";\r\nimport { File } from \""./files\"";\r\nimport { extractWebUrl } from \""./utils/extractweburl\"";\r\nimport { SiteUsers, SiteUser, CurrentUser } from \""./siteusers\"";\r\nimport { UserCustomActions } from \""./usercustomactions\"";\r\nimport { odataUrlFrom } from \""./odata\"";\r\nimport { SPBatch } from \""./batch\"";\r\nimport { Features } from \""./features\"";\r\nimport { RelatedItemManagerImpl } from \""./relateditems\"";\r\nimport { AppCatalog } from \""./appcatalog\"";\r\nimport { RegionalSettings } from \""./regionalsettings\"";\r\nimport { ClientSidePage } from \""./clientsidepages\"";\r\nimport { SiteDesigns } from \""./sitedesigns\"";\r\nimport { SiteScripts } from \""./sitescripts\"";\r\n/**\r\n * Describes a collection of webs\r\n *\r\n */\r\nvar Webs = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Webs, _super);\r\n    function Webs() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Webs_1 = Webs;\r\n    /**\r\n     * Adds a new web to the collection\r\n     *\r\n     * @param title The new web's title\r\n     * @param url The new web's relative url\r\n     * @param description The new web's description\r\n     * @param template The new web's template internal name (default = STS)\r\n     * @param language The locale id that specifies the new web's language (default = 1033 [English, US])\r\n     * @param inheritPermissions When true, permissions will be inherited from the new web's parent (default = true)\r\n     */\r\n    Webs.prototype.add = function (title, url, description, template, language, inheritPermissions) {\r\n        if (description === void 0) { description = \""\""; }\r\n        if (template === void 0) { template = \""STS\""; }\r\n        if (language === void 0) { language = 1033; }\r\n        if (inheritPermissions === void 0) { inheritPermissions = true; }\r\n        var props = {\r\n            Description: description,\r\n            Language: language,\r\n            Title: title,\r\n            Url: url,\r\n            UseSamePermissionsAsParentSite: inheritPermissions,\r\n            WebTemplate: template,\r\n        };\r\n        var postBody = jsS({\r\n            \""parameters\"": extend({\r\n                \""__metadata\"": { \""type\"": \""SP.WebCreationInformation\"" },\r\n            }, props),\r\n        });\r\n        return this.clone(Webs_1, \""add\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                web: new Web(odataUrlFrom(data).replace(/_api\\/web\\/?/i, \""\"")),\r\n            };\r\n        });\r\n    };\r\n    var Webs_1;\r\n    Webs = Webs_1 = tslib_1.__decorate([\r\n        defaultPath(\""webs\"")\r\n    ], Webs);\r\n    return Webs;\r\n}(SharePointQueryableCollection));\r\nexport { Webs };\r\n/**\r\n * Describes a collection of web infos\r\n *\r\n */\r\nvar WebInfos = /** @class */ (function (_super) {\r\n    tslib_1.__extends(WebInfos, _super);\r\n    function WebInfos() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    WebInfos = tslib_1.__decorate([\r\n        defaultPath(\""webinfos\"")\r\n    ], WebInfos);\r\n    return WebInfos;\r\n}(SharePointQueryableCollection));\r\nexport { WebInfos };\r\n/**\r\n * Describes a web\r\n *\r\n */\r\nvar Web = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Web, _super);\r\n    function Web() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Web_1 = Web;\r\n    /**\r\n     * Creates a new web instance from the given url by indexing the location of the /_api/\r\n     * segment. If this is not found the method creates a new web with the entire string as\r\n     * supplied.\r\n     *\r\n     * @param url\r\n     */\r\n    Web.fromUrl = function (url, path) {\r\n        return new Web_1(extractWebUrl(url), path);\r\n    };\r\n    Object.defineProperty(Web.prototype, \""webs\"", {\r\n        /**\r\n         * Gets this web's subwebs\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Webs(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets this web's parent web and data\r\n     *\r\n     */\r\n    Web.prototype.getParentWeb = function () {\r\n        var _this = this;\r\n        return this.select(\""ParentWeb/Id\"").expand(\""ParentWeb\"").get()\r\n            .then(function (_a) {\r\n            var ParentWeb = _a.ParentWeb;\r\n            return ParentWeb ? new Site(_this.parentUrl).openWebById(ParentWeb.Id) : null;\r\n        });\r\n    };\r\n    /**\r\n    * Returns a collection of objects that contain metadata about subsites of the current site in which the current user is a member.\r\n    *\r\n    * @param nWebTemplateFilter Specifies the site definition (default = -1)\r\n    * @param nConfigurationFilter A 16-bit integer that specifies the identifier of a configuration (default = -1)\r\n    */\r\n    Web.prototype.getSubwebsFilteredForCurrentUser = function (nWebTemplateFilter, nConfigurationFilter) {\r\n        if (nWebTemplateFilter === void 0) { nWebTemplateFilter = -1; }\r\n        if (nConfigurationFilter === void 0) { nConfigurationFilter = -1; }\r\n        return this.clone(Webs, \""getSubwebsFilteredForCurrentUser(nWebTemplateFilter=\"" + nWebTemplateFilter + \"",nConfigurationFilter=\"" + nConfigurationFilter + \"")\"");\r\n    };\r\n    Object.defineProperty(Web.prototype, \""allProperties\"", {\r\n        /**\r\n         * Allows access to the web's all properties collection\r\n         */\r\n        get: function () {\r\n            return this.clone(SharePointQueryableInstance, \""allproperties\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""webinfos\"", {\r\n        /**\r\n         * Gets a collection of WebInfos for this web's subwebs\r\n         *\r\n         */\r\n        get: function () {\r\n            return new WebInfos(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""contentTypes\"", {\r\n        /**\r\n         * Gets the content types available in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new ContentTypes(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""lists\"", {\r\n        /**\r\n         * Gets the lists in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Lists(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""fields\"", {\r\n        /**\r\n         * Gets the fields in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Fields(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""features\"", {\r\n        /**\r\n         * Gets the active features for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Features(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""availablefields\"", {\r\n        /**\r\n         * Gets the available fields in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Fields(this, \""availablefields\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""navigation\"", {\r\n        /**\r\n         * Gets the navigation options in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Navigation(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""siteUsers\"", {\r\n        /**\r\n         * Gets the site users\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteUsers(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""siteGroups\"", {\r\n        /**\r\n         * Gets the site groups\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroups(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""siteUserInfoList\"", {\r\n        /**\r\n         * Gets site user info list\r\n         *\r\n         */\r\n        get: function () {\r\n            return new List(this, \""siteuserinfolist\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""regionalSettings\"", {\r\n        /**\r\n         * Gets regional settings\r\n         *\r\n         */\r\n        get: function () {\r\n            return new RegionalSettings(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""currentUser\"", {\r\n        /**\r\n         * Gets the current user\r\n         */\r\n        get: function () {\r\n            return new CurrentUser(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""folders\"", {\r\n        /**\r\n         * Gets the top-level folders in this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folders(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""userCustomActions\"", {\r\n        /**\r\n         * Gets all user custom actions for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new UserCustomActions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""roleDefinitions\"", {\r\n        /**\r\n         * Gets the collection of RoleDefinition resources\r\n         *\r\n         */\r\n        get: function () {\r\n            return new RoleDefinitions(this);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""relatedItems\"", {\r\n        /**\r\n         * Provides an interface to manage related items\r\n         *\r\n         */\r\n        get: function () {\r\n            return RelatedItemManagerImpl.FromUrl(this.toUrl());\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Creates a new batch for requests within the context of this web\r\n     *\r\n     */\r\n    Web.prototype.createBatch = function () {\r\n        return new SPBatch(this.parentUrl);\r\n    };\r\n    Object.defineProperty(Web.prototype, \""rootFolder\"", {\r\n        /**\r\n         * Gets the root folder of this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new Folder(this, \""rootFolder\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""associatedOwnerGroup\"", {\r\n        /**\r\n         * Gets the associated owner group for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroup(this, \""associatedownergroup\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""associatedMemberGroup\"", {\r\n        /**\r\n         * Gets the associated member group for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroup(this, \""associatedmembergroup\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""associatedVisitorGroup\"", {\r\n        /**\r\n         * Gets the associated visitor group for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SiteGroup(this, \""associatedvisitorgroup\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Web.prototype, \""defaultDocumentLibrary\"", {\r\n        /**\r\n         * Gets the default document library for this web\r\n         *\r\n         */\r\n        get: function () {\r\n            return new List(this, \""DefaultDocumentLibrary\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Gets a folder by id\r\n     *\r\n     * @param uniqueId The uniqueId of the folder\r\n     */\r\n    Web.prototype.getFolderById = function (uniqueId) {\r\n        return new Folder(this, \""getFolderById('\"" + uniqueId + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a folder by server relative url\r\n     *\r\n     * @param folderRelativeUrl The server relative path to the folder (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getFolderByServerRelativeUrl = function (folderRelativeUrl) {\r\n        return new Folder(this, \""getFolderByServerRelativeUrl('\"" + folderRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a folder by server relative relative path if your folder name contains # and % characters\r\n     * you need to first encode the file name using encodeURIComponent() and then pass the url\r\n     * let url = \""/sites/test/Shared Documents/\"" + encodeURIComponent(\""%123\"");\r\n     * This works only in SharePoint online.\r\n     *\r\n     * @param folderRelativeUrl The server relative path to the folder (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getFolderByServerRelativePath = function (folderRelativeUrl) {\r\n        return new Folder(this, \""getFolderByServerRelativePath(decodedUrl='\"" + folderRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a file by id\r\n     *\r\n     * @param uniqueId The uniqueId of the file\r\n     */\r\n    Web.prototype.getFileById = function (uniqueId) {\r\n        return new File(this, \""getFileById('\"" + uniqueId + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a file by server relative url\r\n     *\r\n     * @param fileRelativeUrl The server relative path to the file (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getFileByServerRelativeUrl = function (fileRelativeUrl) {\r\n        return new File(this, \""getFileByServerRelativeUrl('\"" + fileRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a file by server relative url if your file name contains # and % characters\r\n     * you need to first encode the file name using encodeURIComponent() and then pass the url\r\n     * let url = \""/sites/test/Shared Documents/\"" + encodeURIComponent(\""%123.docx\"");\r\n     *\r\n     * @param fileRelativeUrl The server relative path to the file (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getFileByServerRelativePath = function (fileRelativeUrl) {\r\n        return new File(this, \""getFileByServerRelativePath(decodedUrl='\"" + fileRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Gets a list by server relative url (list's root folder)\r\n     *\r\n     * @param listRelativeUrl The server relative path to the list's root folder (including /sites/ if applicable)\r\n     */\r\n    Web.prototype.getList = function (listRelativeUrl) {\r\n        return new List(this, \""getList('\"" + listRelativeUrl + \""')\"");\r\n    };\r\n    /**\r\n     * Updates this web instance with the supplied properties\r\n     *\r\n     * @param properties A plain object hash of values to update for the web\r\n     */\r\n    Web.prototype.update = function (properties) {\r\n        var _this = this;\r\n        var postBody = jsS(extend({\r\n            \""__metadata\"": { \""type\"": \""SP.Web\"" },\r\n        }, properties));\r\n        return this.postCore({\r\n            body: postBody,\r\n            headers: {\r\n                \""X-HTTP-Method\"": \""MERGE\"",\r\n            },\r\n        }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                web: _this,\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Deletes this web\r\n     *\r\n     */\r\n    Web.prototype.delete = function () {\r\n        return _super.prototype.deleteCore.call(this);\r\n    };\r\n    /**\r\n     * Applies the theme specified by the contents of each of the files specified in the arguments to the site\r\n     *\r\n     * @param colorPaletteUrl The server-relative URL of the color palette file\r\n     * @param fontSchemeUrl The server-relative URL of the font scheme\r\n     * @param backgroundImageUrl The server-relative URL of the background image\r\n     * @param shareGenerated When true, the generated theme files are stored in the root site. When false, they are stored in this web\r\n     */\r\n    Web.prototype.applyTheme = function (colorPaletteUrl, fontSchemeUrl, backgroundImageUrl, shareGenerated) {\r\n        var postBody = jsS({\r\n            backgroundImageUrl: backgroundImageUrl,\r\n            colorPaletteUrl: colorPaletteUrl,\r\n            fontSchemeUrl: fontSchemeUrl,\r\n            shareGenerated: shareGenerated,\r\n        });\r\n        return this.clone(Web_1, \""applytheme\"").postCore({ body: postBody });\r\n    };\r\n    /**\r\n     * Applies the specified site definition or site template to the Web site that has no template applied to it\r\n     *\r\n     * @param template Name of the site definition or the name of the site template\r\n     */\r\n    Web.prototype.applyWebTemplate = function (template) {\r\n        var q = this.clone(Web_1, \""applywebtemplate\"");\r\n        q.concat(\""(@t)\"");\r\n        q.query.set(\""@t\"", template);\r\n        return q.postCore();\r\n    };\r\n    /**\r\n     * Checks whether the specified login name belongs to a valid user in the web. If the user doesn't exist, adds the user to the web.\r\n     *\r\n     * @param loginName The login name of the user (ex: i:0#.f|membership|user@domain.onmicrosoft.com)\r\n     */\r\n    Web.prototype.ensureUser = function (loginName) {\r\n        var postBody = jsS({\r\n            logonName: loginName,\r\n        });\r\n        return this.clone(Web_1, \""ensureuser\"").postCore({ body: postBody }).then(function (data) {\r\n            return {\r\n                data: data,\r\n                user: new SiteUser(odataUrlFrom(data)),\r\n            };\r\n        });\r\n    };\r\n    /**\r\n     * Returns a collection of site templates available for the site\r\n     *\r\n     * @param language The locale id of the site templates to retrieve (default = 1033 [English, US])\r\n     * @param includeCrossLanguage When true, includes language-neutral site templates; otherwise false (default = true)\r\n     */\r\n    Web.prototype.availableWebTemplates = function (language, includeCrossLanugage) {\r\n        if (language === void 0) { language = 1033; }\r\n        if (includeCrossLanugage === void 0) { includeCrossLanugage = true; }\r\n        return new SharePointQueryableCollection(this, \""getavailablewebtemplates(lcid=\"" + language + \"", doincludecrosslanguage=\"" + includeCrossLanugage + \"")\"");\r\n    };\r\n    /**\r\n     * Returns the list gallery on the site\r\n     *\r\n     * @param type The gallery type - WebTemplateCatalog = 111, WebPartCatalog = 113 ListTemplateCatalog = 114,\r\n     * MasterPageCatalog = 116, SolutionCatalog = 121, ThemeCatalog = 123, DesignCatalog = 124, AppDataCatalog = 125\r\n     */\r\n    Web.prototype.getCatalog = function (type) {\r\n        return this.clone(Web_1, \""getcatalog(\"" + type + \"")\"").select(\""Id\"").get().then(function (data) {\r\n            return new List(odataUrlFrom(data));\r\n        });\r\n    };\r\n    /**\r\n     * Returns the collection of changes from the change log that have occurred within the list, based on the specified query\r\n     *\r\n     * @param query The change query\r\n     */\r\n    Web.prototype.getChanges = function (query) {\r\n        var postBody = jsS({ \""query\"": extend({ \""__metadata\"": { \""type\"": \""SP.ChangeQuery\"" } }, query) });\r\n        return this.clone(Web_1, \""getchanges\"").postCore({ body: postBody });\r\n    };\r\n    Object.defineProperty(Web.prototype, \""customListTemplate\"", {\r\n        /**\r\n         * Gets the custom list templates for the site\r\n         *\r\n         */\r\n        get: function () {\r\n            return new SharePointQueryableCollection(this, \""getcustomlisttemplates\"");\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Returns the user corresponding to the specified member identifier for the current site\r\n     *\r\n     * @param id The id of the user\r\n     */\r\n    Web.prototype.getUserById = function (id) {\r\n        return new SiteUser(this, \""getUserById(\"" + id + \"")\"");\r\n    };\r\n    /**\r\n     * Returns the name of the image file for the icon that is used to represent the specified file\r\n     *\r\n     * @param filename The file name. If this parameter is empty, the server returns an empty string\r\n     * @param size The size of the icon: 16x16 pixels = 0, 32x32 pixels = 1 (default = 0)\r\n     * @param progId The ProgID of the application that was used to create the file, in the form OLEServerName.ObjectName\r\n     */\r\n    Web.prototype.mapToIcon = function (filename, size, progId) {\r\n        if (size === void 0) { size = 0; }\r\n        if (progId === void 0) { progId = \""\""; }\r\n        return this.clone(Web_1, \""maptoicon(filename='\"" + filename + \""', progid='\"" + progId + \""', size=\"" + size + \"")\"").get();\r\n    };\r\n    /**\r\n     * Returns the tenant property corresponding to the specified key in the app catalog site\r\n     *\r\n     * @param key Id of storage entity to be set\r\n     */\r\n    Web.prototype.getStorageEntity = function (key) {\r\n        return this.clone(Web_1, \""getStorageEntity('\"" + key + \""')\"").get();\r\n    };\r\n    /**\r\n     * This will set the storage entity identified by the given key (MUST be called in the context of the app catalog)\r\n     *\r\n     * @param key Id of storage entity to be set\r\n     * @param value Value of storage entity to be set\r\n     * @param description Description of storage entity to be set\r\n     * @param comments Comments of storage entity to be set\r\n     */\r\n    Web.prototype.setStorageEntity = function (key, value, description, comments) {\r\n        if (description === void 0) { description = \""\""; }\r\n        if (comments === void 0) { comments = \""\""; }\r\n        return this.clone(Web_1, \""setStorageEntity\"").postCore({\r\n            body: jsS({\r\n                comments: comments,\r\n                description: description,\r\n                key: key,\r\n                value: value,\r\n            }),\r\n        });\r\n    };\r\n    /**\r\n     * This will remove the storage entity identified by the given key\r\n     *\r\n     * @param key Id of storage entity to be removed\r\n     */\r\n    Web.prototype.removeStorageEntity = function (key) {\r\n        return this.clone(Web_1, \""removeStorageEntity('\"" + key + \""')\"").postCore();\r\n    };\r\n    /**\r\n     * Gets the tenant app catalog for this web\r\n     *\r\n     * @param url Optional url or web containing the app catalog (default: current web)\r\n     */\r\n    Web.prototype.getAppCatalog = function (url) {\r\n        return new AppCatalog(url || this);\r\n    };\r\n    /**\r\n     * Gets the site collection app catalog for this web\r\n     *\r\n     * @param url Optional url or web containing the app catalog (default: current web)\r\n     */\r\n    Web.prototype.getSiteCollectionAppCatalog = function (url) {\r\n        return new AppCatalog(url || this, \""_api/web/sitecollectionappcatalog/AvailableApps\"");\r\n    };\r\n    /**\r\n     * Gets the collection of available client side web parts for this web instance\r\n     */\r\n    Web.prototype.getClientSideWebParts = function () {\r\n        return this.clone(SharePointQueryableCollection, \""GetClientSideWebParts\"").get();\r\n    };\r\n    /**\r\n     * Creates a new client side page\r\n     *\r\n     * @param pageName Name of the new page\r\n     * @param title Display title of the new page\r\n     * @param libraryTitle Title of the library in which to create the new page. Default: \""Site Pages\""\r\n     */\r\n    Web.prototype.addClientSidePage = function (pageName, title) {\r\n        if (title === void 0) { title = pageName.replace(/\\.[^/.]+$/, \""\""); }\r\n        return ClientSidePage.create(this, pageName, title);\r\n    };\r\n    /**\r\n     * Creates a new client side page using the library path\r\n     *\r\n     * @param pageName Name of the new page\r\n     * @param listRelativePath The server relative path to the list's root folder (including /sites/ if applicable)\r\n     * @param title Display title of the new page\r\n     */\r\n    Web.prototype.addClientSidePageByPath = function (pageName, title) {\r\n        if (title === void 0) { title = pageName.replace(/\\.[^/.]+$/, \""\""); }\r\n        return ClientSidePage.create(this, pageName, title);\r\n    };\r\n    /**\r\n     * Creates the default associated groups (Members, Owners, Visitors) and gives them the default permissions on the site.\r\n     * The target site must have unique permissions and no associated members / owners / visitors groups\r\n     *\r\n     * @param siteOwner The user login name to be added to the site Owners group. Default is the current user\r\n     * @param siteOwner2 The second user login name to be added to the site Owners group. Default is empty\r\n     * @param groupNameSeed The base group name. E.g. 'TestSite' would produce 'TestSite Members' etc.\r\n     */\r\n    Web.prototype.createDefaultAssociatedGroups = function (siteOwner, siteOwner2, groupNameSeed) {\r\n        var q = this.clone(Web_1, \""createDefaultAssociatedGroups(userLogin=@u,userLogin2=@v,groupNameSeed=@s)\"");\r\n        q.query.set(\""@u\"", \""'\"" + encodeURIComponent(siteOwner || \""\"") + \""'\"");\r\n        q.query.set(\""@v\"", \""'\"" + encodeURIComponent(siteOwner2 || \""\"") + \""'\"");\r\n        q.query.set(\""@s\"", \""'\"" + encodeURIComponent(groupNameSeed || \""\"") + \""'\"");\r\n        return q.postCore();\r\n    };\r\n    /**\r\n     * Gets hub site data for the current web.\r\n     *\r\n     * @param forceRefresh Default value is false. When false, the data is returned from the server's cache.\r\n     * When true, the cache is refreshed with the latest updates and then returned.\r\n     * Use this if you just made changes and need to see those changes right away.\r\n     */\r\n    Web.prototype.hubSiteData = function (forceRefresh) {\r\n        if (forceRefresh === void 0) { forceRefresh = false; }\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                return [2 /*return*/, this.clone(Web_1, \""hubSiteData(\"" + forceRefresh + \"")\"").get().then(function (r) { return JSON.parse(r); })];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Applies theme updates from the parent hub site collection.\r\n     */\r\n    Web.prototype.syncHubSiteTheme = function () {\r\n        return this.clone(Web_1, \""syncHubSiteTheme\"").postCore();\r\n    };\r\n    /**\r\n     * Retrieves a list of site design that have run on the current web\r\n     * @param siteDesignId (Optional) the site design ID, if not provided will return all site design runs\r\n     */\r\n    Web.prototype.getSiteDesignRuns = function (siteDesignId) {\r\n        return new SiteDesigns(this, \""\"").getSiteDesignRun(undefined, siteDesignId);\r\n    };\r\n    /**\r\n     * Gets the site script syntax (JSON) for a specific web\r\n     * @param extractInfo configuration object to specify what to extract\r\n     */\r\n    Web.prototype.getSiteScript = function (extractInfo) {\r\n        return new SiteScripts(this, \""\"").getSiteScriptFromWeb(undefined, extractInfo);\r\n    };\r\n    /**\r\n     * Adds a site design task on the current web to be invoked asynchronously.\r\n     * @param siteDesignId The ID of the site design to create a task for\r\n     */\r\n    Web.prototype.addSiteDesignTask = function (siteDesignId) {\r\n        return new SiteDesigns(this, \""\"").addSiteDesignTaskToCurrentWeb(siteDesignId);\r\n    };\r\n    /**\r\n     * Retrieves the status of a site design that has been run or is still running\r\n     * @param runId the run ID\r\n     */\r\n    Web.prototype.getSiteDesignRunStatus = function (runId) {\r\n        return new SiteDesigns(this, \""\"").getSiteDesignRunStatus(undefined, runId);\r\n    };\r\n    var Web_1;\r\n    Web = Web_1 = tslib_1.__decorate([\r\n        defaultPath(\""_api/web\"")\r\n    ], Web);\r\n    return Web;\r\n}(SharePointQueryableShareableWeb));\r\nexport { Web };\r\n//# sourceMappingURL=webs.js.map"",""/*! adal-angular v1.0.17 2018-02-27 */\r\nvar AuthenticationContext=function(){\""use strict\"";return AuthenticationContext=function(a){if(this.REQUEST_TYPE={LOGIN:\""LOGIN\"",RENEW_TOKEN:\""RENEW_TOKEN\"",UNKNOWN:\""UNKNOWN\""},this.RESPONSE_TYPE={ID_TOKEN_TOKEN:\""id_token token\"",TOKEN:\""token\""},this.CONSTANTS={ACCESS_TOKEN:\""access_token\"",EXPIRES_IN:\""expires_in\"",ID_TOKEN:\""id_token\"",ERROR_DESCRIPTION:\""error_description\"",SESSION_STATE:\""session_state\"",ERROR:\""error\"",STORAGE:{TOKEN_KEYS:\""adal.token.keys\"",ACCESS_TOKEN_KEY:\""adal.access.token.key\"",EXPIRATION_KEY:\""adal.expiration.key\"",STATE_LOGIN:\""adal.state.login\"",STATE_RENEW:\""adal.state.renew\"",NONCE_IDTOKEN:\""adal.nonce.idtoken\"",SESSION_STATE:\""adal.session.state\"",USERNAME:\""adal.username\"",IDTOKEN:\""adal.idtoken\"",ERROR:\""adal.error\"",ERROR_DESCRIPTION:\""adal.error.description\"",LOGIN_REQUEST:\""adal.login.request\"",LOGIN_ERROR:\""adal.login.error\"",RENEW_STATUS:\""adal.token.renew.status\"",ANGULAR_LOGIN_REQUEST:\""adal.angular.login.request\""},RESOURCE_DELIMETER:\""|\"",CACHE_DELIMETER:\""||\"",LOADFRAME_TIMEOUT:6e3,TOKEN_RENEW_STATUS_CANCELED:\""Canceled\"",TOKEN_RENEW_STATUS_COMPLETED:\""Completed\"",TOKEN_RENEW_STATUS_IN_PROGRESS:\""In Progress\"",LOGGING_LEVEL:{ERROR:0,WARN:1,INFO:2,VERBOSE:3},LEVEL_STRING_MAP:{0:\""ERROR:\"",1:\""WARNING:\"",2:\""INFO:\"",3:\""VERBOSE:\""},POPUP_WIDTH:483,POPUP_HEIGHT:600},AuthenticationContext.prototype._singletonInstance)return AuthenticationContext.prototype._singletonInstance;if(AuthenticationContext.prototype._singletonInstance=this,this.instance=\""https://login.microsoftonline.com/\"",this.config={},this.callback=null,this.popUp=!1,this.isAngular=!1,this._user=null,this._activeRenewals={},this._loginInProgress=!1,this._acquireTokenInProgress=!1,this._renewStates=[],this._callBackMappedToRenewStates={},this._callBacksMappedToRenewStates={},this._openedWindows=[],this._requestType=this.REQUEST_TYPE.LOGIN,window._adalInstance=this,a.displayCall&&\""function\""!=typeof a.displayCall)throw new Error(\""displayCall is not a function\"");if(!a.clientId)throw new Error(\""clientId is required\"");this.config=this._cloneConfig(a),void 0===this.config.navigateToLoginRequestUrl&&(this.config.navigateToLoginRequestUrl=!0),this.config.popUp&&(this.popUp=!0),this.config.callback&&\""function\""==typeof this.config.callback&&(this.callback=this.config.callback),this.config.instance&&(this.instance=this.config.instance),this.config.loginResource||(this.config.loginResource=this.config.clientId),this.config.redirectUri||(this.config.redirectUri=window.location.href.split(\""?\"")[0].split(\""#\"")[0]),this.config.postLogoutRedirectUri||(this.config.postLogoutRedirectUri=window.location.href.split(\""?\"")[0].split(\""#\"")[0]),this.config.anonymousEndpoints||(this.config.anonymousEndpoints=[]),this.config.isAngular&&(this.isAngular=this.config.isAngular),this.config.loadFrameTimeout&&(this.CONSTANTS.LOADFRAME_TIMEOUT=this.config.loadFrameTimeout)},\""undefined\""!=typeof window&&(window.Logging={piiLoggingEnabled:!1,level:0,log:function(a){}}),AuthenticationContext.prototype.login=function(){if(this._loginInProgress)return void this.info(\""Login in progress\"");this._loginInProgress=!0;var a=this._guid();this.config.state=a,this._idTokenNonce=this._guid();var b=this._getItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST);b&&\""\""!==b?this._saveItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,\""\""):b=window.location.href,this.verbose(\""Expected state: \""+a+\"" startPage:\""+b),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,b),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,a,!0),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\"");var c=this._getNavigateUrl(\""id_token\"",null)+\""&nonce=\""+encodeURIComponent(this._idTokenNonce);this.config.displayCall?this.config.displayCall(c):this.popUp?(this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,\""\""),this._renewStates.push(a),this.registerCallback(a,this.config.clientId,this.callback),this._loginPopup(c)):this.promptUser(c)},AuthenticationContext.prototype._openPopup=function(a,b,c,d){try{var e=window.screenLeft?window.screenLeft:window.screenX,f=window.screenTop?window.screenTop:window.screenY,g=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,h=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,i=g/2-c/2+e,j=h/2-d/2+f,k=window.open(a,b,\""width=\""+c+\"", height=\""+d+\"", top=\""+j+\"", left=\""+i);return k.focus&&k.focus(),k}catch(a){return this.warn(\""Error opening popup, \""+a.message),this._loginInProgress=!1,this._acquireTokenInProgress=!1,null}},AuthenticationContext.prototype._handlePopupError=function(a,b,c,d,e){this.warn(d),this._saveItem(this.CONSTANTS.STORAGE.ERROR,c),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,d),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,e),b&&this._activeRenewals[b]&&(this._activeRenewals[b]=null),this._loginInProgress=!1,this._acquireTokenInProgress=!1,a&&a(d,null,c)},AuthenticationContext.prototype._loginPopup=function(a,b,c){var d=this._openPopup(a,\""login\"",this.CONSTANTS.POPUP_WIDTH,this.CONSTANTS.POPUP_HEIGHT),e=c||this.callback;if(null==d){var f=\""Popup Window is null. This can happen if you are using IE\"";return void this._handlePopupError(e,b,\""Error opening popup\"",f,f)}if(this._openedWindows.push(d),-1!=this.config.redirectUri.indexOf(\""#\""))var g=this.config.redirectUri.split(\""#\"")[0];else var g=this.config.redirectUri;var h=this,i=window.setInterval(function(){if(!d||d.closed||void 0===d.closed){var a=\""Popup Window closed\"",c=\""Popup Window closed by UI action/ Popup Window handle destroyed due to cross zone navigation in IE/Edge\"";return h.isAngular&&h._broadcast(\""adal:popUpClosed\"",c+h.CONSTANTS.RESOURCE_DELIMETER+a),h._handlePopupError(e,b,a,c,c),void window.clearInterval(i)}try{var f=d.location;if(-1!=encodeURI(f.href).indexOf(encodeURI(g)))return h.isAngular?h._broadcast(\""adal:popUpHashChanged\"",f.hash):h.handleWindowCallback(f.hash),window.clearInterval(i),h._loginInProgress=!1,h._acquireTokenInProgress=!1,h.info(\""Closing popup window\""),h._openedWindows=[],void d.close()}catch(a){}},1)},AuthenticationContext.prototype._broadcast=function(a,b){!function(){function a(a,b){b=b||{bubbles:!1,cancelable:!1,detail:void 0};var c=document.createEvent(\""CustomEvent\"");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}if(\""function\""==typeof window.CustomEvent)return!1;a.prototype=window.Event.prototype,window.CustomEvent=a}();var c=new CustomEvent(a,{detail:b});window.dispatchEvent(c)},AuthenticationContext.prototype.loginInProgress=function(){return this._loginInProgress},AuthenticationContext.prototype._hasResource=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);return b&&!this._isEmpty(b)&&b.indexOf(a+this.CONSTANTS.RESOURCE_DELIMETER)>-1},AuthenticationContext.prototype.getCachedToken=function(a){if(!this._hasResource(a))return null;var b=this._getItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a),c=this._getItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a),d=this.config.expireOffsetSeconds||300;return c&&c>this._now()+d?b:(this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a,\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a,0),null)},AuthenticationContext.prototype.getCachedUser=function(){if(this._user)return this._user;var a=this._getItem(this.CONSTANTS.STORAGE.IDTOKEN);return this._user=this._createUser(a),this._user},AuthenticationContext.prototype.registerCallback=function(a,b,c){this._activeRenewals[b]=a,this._callBacksMappedToRenewStates[a]||(this._callBacksMappedToRenewStates[a]=[]);var d=this;this._callBacksMappedToRenewStates[a].push(c),this._callBackMappedToRenewStates[a]||(this._callBackMappedToRenewStates[a]=function(c,e,f,g){d._activeRenewals[b]=null;for(var h=0;h<d._callBacksMappedToRenewStates[a].length;++h)try{d._callBacksMappedToRenewStates[a][h](c,e,f,g)}catch(f){d.warn(f)}d._callBacksMappedToRenewStates[a]=null,d._callBackMappedToRenewStates[a]=null})},AuthenticationContext.prototype._renewToken=function(a,b,c){this.info(\""renewToken is called for resource:\""+a);var d=this._addAdalFrame(\""adalRenewFrame\""+a),e=this._guid()+\""|\""+a;this.config.state=e,this._renewStates.push(e),this.verbose(\""Renew token Expected state: \""+e),c=c||\""token\"";var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(c,a),\""prompt\"");c===this.RESPONSE_TYPE.ID_TOKEN_TOKEN&&(this._idTokenNonce=this._guid(),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),f+=\""&nonce=\""+encodeURIComponent(this._idTokenNonce)),f+=\""&prompt=none\"",f=this._addHintParameters(f),this.registerCallback(e,a,b),this.verbosePii(\""Navigate to:\""+f),d.src=\""about:blank\"",this._loadFrameTimeout(f,\""adalRenewFrame\""+a,a)},AuthenticationContext.prototype._renewIdToken=function(a,b){this.info(\""renewIdToken is called\"");var c=this._addAdalFrame(\""adalIdTokenFrame\""),d=this._guid()+\""|\""+this.config.clientId;this._idTokenNonce=this._guid(),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),this.config.state=d,this._renewStates.push(d),this.verbose(\""Renew Idtoken Expected state: \""+d);var e=null===b||void 0===b?null:this.config.clientId,b=b||\""id_token\"",f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(b,e),\""prompt\"");f+=\""&prompt=none\"",f=this._addHintParameters(f),f+=\""&nonce=\""+encodeURIComponent(this._idTokenNonce),this.registerCallback(d,this.config.clientId,a),this.verbosePii(\""Navigate to:\""+f),c.src=\""about:blank\"",this._loadFrameTimeout(f,\""adalIdTokenFrame\"",this.config.clientId)},AuthenticationContext.prototype._urlContainsQueryStringParameter=function(a,b){return new RegExp(\""[\\\\?&]\""+a+\""=\"").test(b)},AuthenticationContext.prototype._urlRemoveQueryStringParameter=function(a,b){var c=new RegExp(\""(\\\\&\""+b+\""=)[^&]+\"");return a=a.replace(c,\""\""),c=new RegExp(\""(\""+b+\""=)[^&]+&\""),a=a.replace(c,\""\""),c=new RegExp(\""(\""+b+\""=)[^&]+\""),a=a.replace(c,\""\"")},AuthenticationContext.prototype._loadFrameTimeout=function(a,b,c){this.verbose(\""Set loading state to pending for: \""+c),this._saveItem(this.CONSTANTS.STORAGE.RENEW_STATUS+c,this.CONSTANTS.TOKEN_RENEW_STATUS_IN_PROGRESS),this._loadFrame(a,b);var d=this;setTimeout(function(){if(d._getItem(d.CONSTANTS.STORAGE.RENEW_STATUS+c)===d.CONSTANTS.TOKEN_RENEW_STATUS_IN_PROGRESS){d.verbose(\""Loading frame has timed out after: \""+d.CONSTANTS.LOADFRAME_TIMEOUT/1e3+\"" seconds for resource \""+c);var a=d._activeRenewals[c];a&&d._callBackMappedToRenewStates[a]&&d._callBackMappedToRenewStates[a](\""Token renewal operation failed due to timeout\"",null,\""Token Renewal Failed\""),d._saveItem(d.CONSTANTS.STORAGE.RENEW_STATUS+c,d.CONSTANTS.TOKEN_RENEW_STATUS_CANCELED)}},d.CONSTANTS.LOADFRAME_TIMEOUT)},AuthenticationContext.prototype._loadFrame=function(a,b){var c=this;c.info(\""LoadFrame: \""+b);var d=b;setTimeout(function(){var b=c._addAdalFrame(d);\""\""!==b.src&&\""about:blank\""!==b.src||(b.src=a,c._loadFrame(a,d))},500)},AuthenticationContext.prototype.acquireToken=function(a,b){if(this._isEmpty(a))return this.warn(\""resource is required\""),void b(\""resource is required\"",null,\""resource is required\"");var c=this.getCachedToken(a);return c?(this.info(\""Token is already in cache for resource:\""+a),void b(null,c,null)):this._user||this.config.extraQueryParameter&&-1!==this.config.extraQueryParameter.indexOf(\""login_hint\"")?void(this._activeRenewals[a]?this.registerCallback(this._activeRenewals[a],a,b):(this._requestType=this.REQUEST_TYPE.RENEW_TOKEN,a===this.config.clientId?this._user?(this.verbose(\""renewing idtoken\""),this._renewIdToken(b)):(this.verbose(\""renewing idtoken and access_token\""),this._renewIdToken(b,this.RESPONSE_TYPE.ID_TOKEN_TOKEN)):this._user?(this.verbose(\""renewing access_token\""),this._renewToken(a,b)):(this.verbose(\""renewing idtoken and access_token\""),this._renewToken(a,b,this.RESPONSE_TYPE.ID_TOKEN_TOKEN)))):(this.warn(\""User login is required\""),void b(\""User login is required\"",null,\""login required\""))},AuthenticationContext.prototype.acquireTokenPopup=function(a,b,c,d){if(this._isEmpty(a))return this.warn(\""resource is required\""),void d(\""resource is required\"",null,\""resource is required\"");if(!this._user)return this.warn(\""User login is required\""),void d(\""User login is required\"",null,\""login required\"");if(this._acquireTokenInProgress)return this.warn(\""Acquire token interactive is already in progress\""),void d(\""Acquire token interactive is already in progress\"",null,\""Acquire token interactive is already in progress\"");var e=this._guid()+\""|\""+a;this.config.state=e,this._renewStates.push(e),this._requestType=this.REQUEST_TYPE.RENEW_TOKEN,this.verbose(\""Renew token Expected state: \""+e);var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(\""token\"",a),\""prompt\"");if(f+=\""&prompt=select_account\"",b&&(f+=b),c&&-1===f.indexOf(\""&claims\""))f+=\""&claims=\""+encodeURIComponent(c);else if(c&&-1!==f.indexOf(\""&claims\""))throw new Error(\""Claims cannot be passed as an extraQueryParameter\"");f=this._addHintParameters(f),this._acquireTokenInProgress=!0,this.info(\""acquireToken interactive is called for the resource \""+a),this.registerCallback(e,a,d),this._loginPopup(f,a,d)},AuthenticationContext.prototype.acquireTokenRedirect=function(a,b,c){if(this._isEmpty(a))return this.warn(\""resource is required\""),void d(\""resource is required\"",null,\""resource is required\"");var d=this.callback;if(!this._user)return this.warn(\""User login is required\""),void d(\""User login is required\"",null,\""login required\"");if(this._acquireTokenInProgress)return this.warn(\""Acquire token interactive is already in progress\""),void d(\""Acquire token interactive is already in progress\"",null,\""Acquire token interactive is already in progress\"");var e=this._guid()+\""|\""+a;this.config.state=e,this.verbose(\""Renew token Expected state: \""+e);var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(\""token\"",a),\""prompt\"");if(f+=\""&prompt=select_account\"",b&&(f+=b),c&&-1===f.indexOf(\""&claims\""))f+=\""&claims=\""+encodeURIComponent(c);else if(c&&-1!==f.indexOf(\""&claims\""))throw new Error(\""Claims cannot be passed as an extraQueryParameter\"");f=this._addHintParameters(f),this._acquireTokenInProgress=!0,this.info(\""acquireToken interactive is called for the resource \""+a),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,window.location.href),this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,e,!0),this.promptUser(f)},AuthenticationContext.prototype.promptUser=function(a){a?(this.infoPii(\""Navigate to:\""+a),window.location.replace(a)):this.info(\""Navigate url is empty\"")},AuthenticationContext.prototype.clearCache=function(){this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,\""\""),this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,\""\""),this._renewStates=[],this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\""),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\"");var a=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);if(!this._isEmpty(a)){a=a.split(this.CONSTANTS.RESOURCE_DELIMETER);for(var b=0;b<a.length&&\""\""!==a[b];b++)this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a[b],\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a[b],0)}this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,\""\"")},AuthenticationContext.prototype.clearCacheForResource=function(a){this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\""),this._hasResource(a)&&(this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a,\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a,0))},AuthenticationContext.prototype.logOut=function(){this.clearCache(),this._user=null;var a;if(this.config.logOutUri)a=this.config.logOutUri;else{var b=\""common\"",c=\""\"";this.config.tenant&&(b=this.config.tenant),this.config.postLogoutRedirectUri&&(c=\""post_logout_redirect_uri=\""+encodeURIComponent(this.config.postLogoutRedirectUri)),a=this.instance+b+\""/oauth2/logout?\""+c}this.infoPii(\""Logout navigate to: \""+a),this.promptUser(a)},AuthenticationContext.prototype._isEmpty=function(a){return void 0===a||!a||0===a.length},AuthenticationContext.prototype.getUser=function(a){if(\""function\""!=typeof a)throw new Error(\""callback is not a function\"");if(this._user)return void a(null,this._user);var b=this._getItem(this.CONSTANTS.STORAGE.IDTOKEN);this._isEmpty(b)?(this.warn(\""User information is not available\""),a(\""User information is not available\"",null)):(this.info(\""User exists in cache: \""),this._user=this._createUser(b),a(null,this._user))},AuthenticationContext.prototype._addHintParameters=function(a){if(this._user&&this._user.profile)if(this._user.profile.sid&&-1!==a.indexOf(\""&prompt=none\""))this._urlContainsQueryStringParameter(\""sid\"",a)||(a+=\""&sid=\""+encodeURIComponent(this._user.profile.sid));else if(this._user.profile.upn&&(this._urlContainsQueryStringParameter(\""login_hint\"",a)||(a+=\""&login_hint=\""+encodeURIComponent(this._user.profile.upn)),!this._urlContainsQueryStringParameter(\""domain_hint\"",a)&&this._user.profile.upn.indexOf(\""@\"")>-1)){var b=this._user.profile.upn.split(\""@\"");a+=\""&domain_hint=\""+encodeURIComponent(b[b.length-1])}return a},AuthenticationContext.prototype._createUser=function(a){var b=null,c=this._extractIdToken(a);return c&&c.hasOwnProperty(\""aud\"")&&(c.aud.toLowerCase()===this.config.clientId.toLowerCase()?(b={userName:\""\"",profile:c},c.hasOwnProperty(\""upn\"")?b.userName=c.upn:c.hasOwnProperty(\""email\"")&&(b.userName=c.email)):this.warn(\""IdToken has invalid aud field\"")),b},AuthenticationContext.prototype._getHash=function(a){return a.indexOf(\""#/\"")>-1?a=a.substring(a.indexOf(\""#/\"")+2):a.indexOf(\""#\"")>-1&&(a=a.substring(1)),a},AuthenticationContext.prototype.isCallback=function(a){a=this._getHash(a);var b=this._deserialize(a);return b.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION)||b.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)||b.hasOwnProperty(this.CONSTANTS.ID_TOKEN)},AuthenticationContext.prototype.getLoginError=function(){return this._getItem(this.CONSTANTS.STORAGE.LOGIN_ERROR)},AuthenticationContext.prototype.getRequestInfo=function(a){a=this._getHash(a);var b=this._deserialize(a),c={valid:!1,parameters:{},stateMatch:!1,stateResponse:\""\"",requestType:this.REQUEST_TYPE.UNKNOWN};if(b&&(c.parameters=b,b.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION)||b.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)||b.hasOwnProperty(this.CONSTANTS.ID_TOKEN))){c.valid=!0;var d=\""\"";if(!b.hasOwnProperty(\""state\""))return this.warn(\""No state returned\""),c;if(this.verbose(\""State: \""+b.state),d=b.state,c.stateResponse=d,this._matchState(c))return c;if(!c.stateMatch&&window.parent){c.requestType=this._requestType;for(var e=this._renewStates,f=0;f<e.length;f++)if(e[f]===c.stateResponse){c.stateMatch=!0;break}}}return c},AuthenticationContext.prototype._matchNonce=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN);if(b){b=b.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<b.length;c++)if(b[c]===a.profile.nonce)return!0}return!1},AuthenticationContext.prototype._matchState=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.STATE_LOGIN);if(b){b=b.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<b.length;c++)if(b[c]===a.stateResponse)return a.requestType=this.REQUEST_TYPE.LOGIN,a.stateMatch=!0,!0}var d=this._getItem(this.CONSTANTS.STORAGE.STATE_RENEW);if(d){d=d.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<d.length;c++)if(d[c]===a.stateResponse)return a.requestType=this.REQUEST_TYPE.RENEW_TOKEN,a.stateMatch=!0,!0}return!1},AuthenticationContext.prototype._getResourceFromState=function(a){if(a){var b=a.indexOf(\""|\"");if(b>-1&&b+1<a.length)return a.substring(b+1)}return\""\""},AuthenticationContext.prototype.saveTokenFromHash=function(a){this.info(\""State status:\""+a.stateMatch+\""; Request type:\""+a.requestType),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\"");var b=this._getResourceFromState(a.stateResponse);if(a.parameters.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION))this.infoPii(\""Error :\""+a.parameters.error+\""; Error description:\""+a.parameters[this.CONSTANTS.ERROR_DESCRIPTION]),this._saveItem(this.CONSTANTS.STORAGE.ERROR,a.parameters.error),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,a.parameters[this.CONSTANTS.ERROR_DESCRIPTION]),a.requestType===this.REQUEST_TYPE.LOGIN&&(this._loginInProgress=!1,this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,a.parameters.error_description));else if(a.stateMatch){this.info(\""State is right\""),a.parameters.hasOwnProperty(this.CONSTANTS.SESSION_STATE)&&this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE,a.parameters[this.CONSTANTS.SESSION_STATE]);var c;a.parameters.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)&&(this.info(\""Fragment has access token\""),this._hasResource(b)||(c=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS)||\""\"",this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,c+b+this.CONSTANTS.RESOURCE_DELIMETER)),this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+b,a.parameters[this.CONSTANTS.ACCESS_TOKEN]),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+b,this._expiresIn(a.parameters[this.CONSTANTS.EXPIRES_IN]))),a.parameters.hasOwnProperty(this.CONSTANTS.ID_TOKEN)&&(this.info(\""Fragment has id token\""),this._loginInProgress=!1,this._user=this._createUser(a.parameters[this.CONSTANTS.ID_TOKEN]),this._user&&this._user.profile?this._matchNonce(this._user)?(this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN,a.parameters[this.CONSTANTS.ID_TOKEN]),b=this.config.loginResource?this.config.loginResource:this.config.clientId,this._hasResource(b)||(c=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS)||\""\"",this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,c+b+this.CONSTANTS.RESOURCE_DELIMETER)),this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+b,a.parameters[this.CONSTANTS.ID_TOKEN]),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+b,this._user.profile.exp)):(this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""Nonce received: \""+this._user.profile.nonce+\"" is not same as requested: \""+this._getItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN)),this._user=null):(a.parameters.error=\""invalid id_token\"",a.parameters.error_description=\""Invalid id_token. id_token: \""+a.parameters[this.CONSTANTS.ID_TOKEN],this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""invalid id_token\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""Invalid id_token. id_token: \""+a.parameters[this.CONSTANTS.ID_TOKEN])))}else a.parameters.error=\""Invalid_state\"",a.parameters.error_description=\""Invalid_state. state: \""+a.stateResponse,this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""Invalid_state\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""Invalid_state. state: \""+a.stateResponse);this._saveItem(this.CONSTANTS.STORAGE.RENEW_STATUS+b,this.CONSTANTS.TOKEN_RENEW_STATUS_COMPLETED)},AuthenticationContext.prototype.getResourceForEndpoint=function(a){if(this.config&&this.config.anonymousEndpoints)for(var b=0;b<this.config.anonymousEndpoints.length;b++)if(a.indexOf(this.config.anonymousEndpoints[b])>-1)return null;if(this.config&&this.config.endpoints)for(var c in this.config.endpoints)if(a.indexOf(c)>-1)return this.config.endpoints[c];return a.indexOf(\""http://\"")>-1||a.indexOf(\""https://\"")>-1?this._getHostFromUri(a)===this._getHostFromUri(this.config.redirectUri)?this.config.loginResource:null:this.config.loginResource},AuthenticationContext.prototype._getHostFromUri=function(a){var b=String(a).replace(/^(https?:)\\/\\//,\""\"");return b=b.split(\""/\"")[0]},AuthenticationContext.prototype.handleWindowCallback=function(a){if(null==a&&(a=window.location.hash),this.isCallback(a)){var b=null,c=!1;this._openedWindows.length>0&&this._openedWindows[this._openedWindows.length-1].opener&&this._openedWindows[this._openedWindows.length-1].opener._adalInstance?(b=this._openedWindows[this._openedWindows.length-1].opener._adalInstance,c=!0):window.parent&&window.parent._adalInstance&&(b=window.parent._adalInstance);var d,e,f=b.getRequestInfo(a),g=null;e=c||window.parent!==window?b._callBackMappedToRenewStates[f.stateResponse]:b.callback,b.info(\""Returned from redirect url\""),b.saveTokenFromHash(f),f.requestType===this.REQUEST_TYPE.RENEW_TOKEN&&window.parent?(window.parent!==window?b.verbose(\""Window is in iframe, acquiring token silently\""):b.verbose(\""acquiring token interactive in progress\""),d=f.parameters[b.CONSTANTS.ACCESS_TOKEN]||f.parameters[b.CONSTANTS.ID_TOKEN],g=b.CONSTANTS.ACCESS_TOKEN):f.requestType===this.REQUEST_TYPE.LOGIN&&(d=f.parameters[b.CONSTANTS.ID_TOKEN],g=b.CONSTANTS.ID_TOKEN);var h=f.parameters[b.CONSTANTS.ERROR_DESCRIPTION],i=f.parameters[b.CONSTANTS.ERROR];try{e&&e(h,d,i,g)}catch(a){b.error(\""Error occurred in user defined callback function: \""+a)}window.parent!==window||c||(b.config.navigateToLoginRequestUrl?window.location.href=b._getItem(b.CONSTANTS.STORAGE.LOGIN_REQUEST):window.location.hash=\""\"")}},AuthenticationContext.prototype._getNavigateUrl=function(a,b){var c=\""common\"";this.config.tenant&&(c=this.config.tenant);var d=this.instance+c+\""/oauth2/authorize\""+this._serialize(a,this.config,b)+this._addLibMetadata();return this.info(\""Navigate url:\""+d),d},AuthenticationContext.prototype._extractIdToken=function(a){var b=this._decodeJwt(a);if(!b)return null;try{var c=b.JWSPayload,d=this._base64DecodeStringUrlSafe(c);return d?JSON.parse(d):(this.info(\""The returned id_token could not be base64 url safe decoded.\""),null)}catch(a){this.error(\""The returned id_token could not be decoded\"",a)}return null},AuthenticationContext.prototype._base64DecodeStringUrlSafe=function(a){return a=a.replace(/-/g,\""+\"").replace(/_/g,\""/\""),window.atob?decodeURIComponent(escape(window.atob(a))):decodeURIComponent(escape(this._decode(a)))},AuthenticationContext.prototype._decode=function(a){var b=\""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"";a=String(a).replace(/=+$/,\""\"");var c=a.length;if(c%4==1)throw new Error(\""The token to be decoded is not correctly encoded.\"");for(var d,e,f,g,h,i,j,k,l=\""\"",m=0;m<c;m+=4){if(d=b.indexOf(a.charAt(m)),e=b.indexOf(a.charAt(m+1)),f=b.indexOf(a.charAt(m+2)),g=b.indexOf(a.charAt(m+3)),m+2===c-1){h=d<<18|e<<12|f<<6,i=h>>16&255,j=h>>8&255,l+=String.fromCharCode(i,j);break}if(m+1===c-1){h=d<<18|e<<12,i=h>>16&255,l+=String.fromCharCode(i);break}h=d<<18|e<<12|f<<6|g,i=h>>16&255,j=h>>8&255,k=255&h,l+=String.fromCharCode(i,j,k)}return l},AuthenticationContext.prototype._decodeJwt=function(a){if(this._isEmpty(a))return null;var b=/^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/,c=b.exec(a);return!c||c.length<4?(this.warn(\""The returned id_token is not parseable.\""),null):{header:c[1],JWSPayload:c[2],JWSSig:c[3]}},AuthenticationContext.prototype._convertUrlSafeToRegularBase64EncodedString=function(a){return a.replace(\""-\"",\""+\"").replace(\""_\"",\""/\"")},AuthenticationContext.prototype._serialize=function(a,b,c){var d=[];if(null!==b){d.push(\""?response_type=\""+a),d.push(\""client_id=\""+encodeURIComponent(b.clientId)),c&&d.push(\""resource=\""+encodeURIComponent(c)),d.push(\""redirect_uri=\""+encodeURIComponent(b.redirectUri)),d.push(\""state=\""+encodeURIComponent(b.state)),b.hasOwnProperty(\""slice\"")&&d.push(\""slice=\""+encodeURIComponent(b.slice)),b.hasOwnProperty(\""extraQueryParameter\"")&&d.push(b.extraQueryParameter);var e=b.correlationId?b.correlationId:this._guid();d.push(\""client-request-id=\""+encodeURIComponent(e))}return d.join(\""&\"")},AuthenticationContext.prototype._deserialize=function(a){var b,c=/\\+/g,d=/([^&=]+)=([^&]*)/g,e=function(a){return decodeURIComponent(a.replace(c,\"" \""))},f={};for(b=d.exec(a);b;)f[e(b[1])]=e(b[2]),b=d.exec(a);return f},AuthenticationContext.prototype._decimalToHex=function(a){for(var b=a.toString(16);b.length<2;)b=\""0\""+b;return b},AuthenticationContext.prototype._guid=function(){var a=window.crypto||window.msCrypto;if(a&&a.getRandomValues){var b=new Uint8Array(16);return a.getRandomValues(b),b[6]|=64,b[6]&=79,b[8]|=128,b[8]&=191,this._decimalToHex(b[0])+this._decimalToHex(b[1])+this._decimalToHex(b[2])+this._decimalToHex(b[3])+\""-\""+this._decimalToHex(b[4])+this._decimalToHex(b[5])+\""-\""+this._decimalToHex(b[6])+this._decimalToHex(b[7])+\""-\""+this._decimalToHex(b[8])+this._decimalToHex(b[9])+\""-\""+this._decimalToHex(b[10])+this._decimalToHex(b[11])+this._decimalToHex(b[12])+this._decimalToHex(b[13])+this._decimalToHex(b[14])+this._decimalToHex(b[15])}for(var c=\""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"",d=\""0123456789abcdef\"",e=0,f=\""\"",g=0;g<36;g++)\""-\""!==c[g]&&\""4\""!==c[g]&&(e=16*Math.random()|0),\""x\""===c[g]?f+=d[e]:\""y\""===c[g]?(e&=3,e|=8,f+=d[e]):f+=c[g];return f},AuthenticationContext.prototype._expiresIn=function(a){return a||(a=3599),this._now()+parseInt(a,10)},AuthenticationContext.prototype._now=function(){return Math.round((new Date).getTime()/1e3)},AuthenticationContext.prototype._addAdalFrame=function(a){if(void 0!==a){this.info(\""Add adal frame to document:\""+a);var b=document.getElementById(a);if(!b){if(document.createElement&&document.documentElement&&(window.opera||-1===window.navigator.userAgent.indexOf(\""MSIE 5.0\""))){var c=document.createElement(\""iframe\"");c.setAttribute(\""id\"",a),c.setAttribute(\""aria-hidden\"",\""true\""),c.style.visibility=\""hidden\"",c.style.position=\""absolute\"",c.style.width=c.style.height=c.borderWidth=\""0px\"",b=document.getElementsByTagName(\""body\"")[0].appendChild(c)}else document.body&&document.body.insertAdjacentHTML&&document.body.insertAdjacentHTML(\""beforeEnd\"",'<iframe name=\""'+a+'\"" id=\""'+a+'\"" style=\""display:none\""></iframe>');window.frames&&window.frames[a]&&(b=window.frames[a])}return b}},AuthenticationContext.prototype._saveItem=function(a,b,c){if(this.config&&this.config.cacheLocation&&\""localStorage\""===this.config.cacheLocation){if(!this._supportsLocalStorage())return this.info(\""Local storage is not supported\""),!1;if(c){var d=this._getItem(a)||\""\"";localStorage.setItem(a,d+b+this.CONSTANTS.CACHE_DELIMETER)}else localStorage.setItem(a,b);return!0}return this._supportsSessionStorage()?(sessionStorage.setItem(a,b),!0):(this.info(\""Session storage is not supported\""),!1)},AuthenticationContext.prototype._getItem=function(a){return this.config&&this.config.cacheLocation&&\""localStorage\""===this.config.cacheLocation?this._supportsLocalStorage()?localStorage.getItem(a):(this.info(\""Local storage is not supported\""),null):this._supportsSessionStorage()?sessionStorage.getItem(a):(this.info(\""Session storage is not supported\""),null)},AuthenticationContext.prototype._supportsLocalStorage=function(){try{return!!window.localStorage&&(window.localStorage.setItem(\""storageTest\"",\""A\""),\""A\""==window.localStorage.getItem(\""storageTest\"")&&(window.localStorage.removeItem(\""storageTest\""),!window.localStorage.getItem(\""storageTest\"")))}catch(a){return!1}},AuthenticationContext.prototype._supportsSessionStorage=function(){try{return!!window.sessionStorage&&(window.sessionStorage.setItem(\""storageTest\"",\""A\""),\""A\""==window.sessionStorage.getItem(\""storageTest\"")&&(window.sessionStorage.removeItem(\""storageTest\""),!window.sessionStorage.getItem(\""storageTest\"")))}catch(a){return!1}},AuthenticationContext.prototype._cloneConfig=function(a){if(null===a||\""object\""!=typeof a)return a;var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b},AuthenticationContext.prototype._addLibMetadata=function(){return\""&x-client-SKU=Js&x-client-Ver=\""+this._libVersion()},AuthenticationContext.prototype.log=function(a,b,c,d){if(a<=Logging.level){if(!Logging.piiLoggingEnabled&&d)return;var e=(new Date).toUTCString(),f=\""\"";f=this.config.correlationId?e+\"":\""+this.config.correlationId+\""-\""+this._libVersion()+\""-\""+this.CONSTANTS.LEVEL_STRING_MAP[a]+\"" \""+b:e+\"":\""+this._libVersion()+\""-\""+this.CONSTANTS.LEVEL_STRING_MAP[a]+\"" \""+b,c&&(f+=\""\\nstack:\\n\""+c.stack),Logging.log(f)}},AuthenticationContext.prototype.error=function(a,b){this.log(this.CONSTANTS.LOGGING_LEVEL.ERROR,a,b)},AuthenticationContext.prototype.warn=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.WARN,a,null)},AuthenticationContext.prototype.info=function(a){\r\nthis.log(this.CONSTANTS.LOGGING_LEVEL.INFO,a,null)},AuthenticationContext.prototype.verbose=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.VERBOSE,a,null)},AuthenticationContext.prototype.errorPii=function(a,b){this.log(this.CONSTANTS.LOGGING_LEVEL.ERROR,a,b,!0)},AuthenticationContext.prototype.warnPii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.WARN,a,null,!0)},AuthenticationContext.prototype.infoPii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.INFO,a,null,!0)},AuthenticationContext.prototype.verbosePii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.VERBOSE,a,null,!0)},AuthenticationContext.prototype._libVersion=function(){return\""1.0.17\""},\""undefined\""!=typeof module&&module.exports&&(module.exports=AuthenticationContext,module.exports.inject=function(a){return new AuthenticationContext(a)}),AuthenticationContext}();"",""/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \""License\""); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \""function\"")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \""object\"" && typeof Reflect.decorate === \""function\"") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \""object\"" && typeof Reflect.metadata === \""function\"") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\""throw\""](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \""throw\"": verb(1), \""return\"": verb(2) }, typeof Symbol === \""function\"" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\""Generator is already executing.\"");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\""return\""] : op[0] ? y[\""throw\""] || ((t = y[\""return\""]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \""function\"" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \""function\"" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\""return\""])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\""Symbol.asyncIterator is not defined.\"");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\""next\""), verb(\""throw\""), verb(\""return\""), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\""next\"", value); }\r\n    function reject(value) { resume(\""throw\"", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\""next\""), verb(\""throw\"", function (e) { throw e; }), verb(\""return\""), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \""return\"" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\""Symbol.asyncIterator is not defined.\"");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \""function\"" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\""next\""), verb(\""throw\""), verb(\""return\""), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \""raw\"", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"",""var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\""return this\"")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \""object\"") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n""],""sourceRoot"":""""}"
c80bb13a47980134ec3044aada69d56d18f1b632,42170826,// See also: http://stackoverflow.com/questions/42170826/categories-for-rejection-by-the-structured-cloning-algorithm
5392ff8c3aae515f8ce11dc48fb68dd5032d0ce7,26603875,"{""version"":3,""sources"":[""webpack:///datePicker.min.js"",""webpack:///webpack/bootstrap 9c1ce602f4142b72baa9"",""webpack:///./src/datePicker.js"",""webpack:///./src/js/calendar.js"",""webpack:///./src/js/calendarMonth.js"",""webpack:///./src/js/calendarMonthBody.js"",""webpack:///./src/js/calendarYear.js"",""webpack:///./src/js/calendarYearBody.js"",""webpack:///./src/js/dateLocaleProvider.js"",""webpack:///./src/js/datepickerDirective.js"",""webpack:///./src/js/dateUtil.js"",""webpack:///./src/datePicker.css?fcce"",""webpack:///./src/datePicker.css"",""webpack:///./node_modules/css-loader/lib/css-base.js"",""webpack:///./node_modules/style-loader/lib/addStyles.js"",""webpack:///./node_modules/style-loader/lib/urls.js""],""names"":[""modules"",""__webpack_require__"",""moduleId"",""installedModules"",""exports"",""module"",""i"",""l"",""call"",""m"",""c"",""d"",""name"",""getter"",""o"",""Object"",""defineProperty"",""configurable"",""enumerable"",""get"",""n"",""__esModule"",""object"",""property"",""prototype"",""hasOwnProperty"",""p"",""s"",""angular"",""persianCalendarDirective"",""template"",""tElement"",""tAttr"",""scope"",""minDate"",""maxDate"",""dateFilter"",""_currentView"",""require"",""controller"",""PersianCalendarCtrl"",""controllerAs"",""bindToController"",""link"",""element"",""attrs"",""controllers"",""ngModelCtrl"",""configureNgModel"",""$element"",""$scope"",""$$mdPersianDateUtil"",""$mdUtil"",""$mdConstant"",""$mdTheming"",""$$rAF"",""$attrs"",""$mdPersianDateLocale"",""this"",""dateUtil"",""keyCode"",""KEY_CODE"",""today"",""createDateAtMidnight"",""SELECTED_DATE_CLASS"",""TODAY_CLASS"",""FOCUSED_DATE_CLASS"",""id"",""nextUniqueId"",""displayDate"",""selectedDate"",""firstRenderableDate"",""lastRenderableDate"",""isInitialized"",""width"",""scrollbarWidth"",""tabindex"",""attr"",""handleKeyElement"",""boundKeyHandler"",""bind"",""handleKeyEvent"",""parent"",""hasClass"",""document"",""body"",""on"",""$on"",""off"",""version"",""major"",""minor"",""$onInit"",""$inject"",""directive"",""currentView"",""dateLocale"",""self"",""nextTick"",""$render"",""value"",""$viewValue"",""$broadcast"",""setNgModelValue"",""date"",""focus"",""$emit"",""$setViewValue"",""setCurrentView"",""newView"",""time"",""isDate"",""Date"",""isValidDate"",""previousFocus"",""querySelector"",""classList"",""remove"",""cellId"",""getDateId"",""cell"",""getElementById"",""add"",""rootElement"",""getActionFromKeyEvent"",""event"",""which"",""ENTER"",""RIGHT_ARROW"",""LEFT_ARROW"",""DOWN_ARROW"",""metaKey"",""UP_ARROW"",""PAGE_DOWN"",""PAGE_UP"",""HOME"",""END"",""$apply"",""ESCAPE"",""TAB"",""preventDefault"",""action"",""stopPropagation"",""hideVerticalScrollbar"",""childCtrl"",""setWidth"",""scroller"",""calendarScroller"",""scrollMask"",""style"",""paddingRight"",""offsetWidth"",""clientWidth"",""namespace"",""Error"",""pd"",""moment"",""jYear"",""jMonth"",""jDate"",""join"",""updateVirtualRepeat"",""virtualRepeatResizeListener"",""$$phase"",""TBODY_SINGLE_ROW_HEIGHT"",""TBODY_HEIGHT"",""PersianCalendarMonthCtrl"",""calendarCtrl"",""initialize"",""$animate"",""$q"",""isMonthTransitionInProgress"",""cellClickHandler"",""timestamp"",""getTimestampFromNode"",""headerClickHandler"",""items"",""length"",""getMonthDistance"",""attachScopeListeners"",""getSelectedMonthIndex"",""changeSelectedDate"",""previousSelectedDate"",""changeDisplayDate"",""then"",""selectedDateClass"",""prevDateCell"",""setAttribute"",""dateCell"",""buildWeekHeader"",""when"",""animationPromise"",""animateDateChange"",""monthDistance"",""scrollTop"",""firstDayOfWeek"",""shortDays"",""row"",""createElement"",""th"",""textContent"",""appendChild"",""find"",""append"",""incrementDays"",""incrementMonths"",""getFirstDateOfMonth"",""getLastDateOfMonth"",""clampDate"",""mdPersianCalendarMonthBodyDirective"",""$compile"",""$$mdSvgRegistry"",""ARROW_ICON"",""mdTabsArrow"",""offset"",""PersianCalendarMonthBodyCtrl"",""monthCtrl"",""monthBodyCtrl"",""arrowIcon"",""cloneNode"",""$watch"",""isNumber"",""generateContent"",""focusAfterAppend"",""empty"",""buildCalendarForMonth"",""buildDateCell"",""opt_date"",""tabIndex"",""longDateFormatter"",""getTime"",""isSameDay"",""cellText"",""dates"",""isDateEnabled"",""selectionIndicator"",""addEventListener"",""isDateWithinRange"",""isFunction"",""buildDateRow"",""rowNumber"",""weekNumberFormatter"",""opt_dateInMonth"",""firstDayOfMonth"",""firstDayOfTheWeek"",""getLocaleDay_"",""numberOfDaysInMonth"",""getNumberOfDaysInMonth"",""monthBody"",""createDocumentFragment"",""isFinalMonth"",""blankCellOffset"",""monthLabelCell"",""monthLabelCellContent"",""monthHeaderFormatter"",""monthFormatter"",""monthLabelRow"",""insertBefore"",""dayOfWeek"",""iterationDate"",""toDate"",""childNodes"",""whitespaceRow"",""j"",""day"",""PersianCalendarYearCtrl"",""getYearDistance"",""getFocusedYearIndex"",""changeDate"",""min"",""max"",""mdPersianCalendarYearDirective"",""PersianCalendarYearBodyCtrl"",""yearCtrl"",""yearBodyCtrl"",""incrementYears"",""buildCalendarForYear"",""buildMonthCell"",""year"",""month"",""buildBlankCell"",""firstOfMonth"",""isSameMonthAndYear"",""shortMonths"",""isMonthWithinRange"",""yearBody"",""firstRow"",""labelCell"",""className"",""secondRow"",""config"",""$provide"",""PersianDateLocaleProvider"",""months"",""days"",""formatDate"",""parseDate"",""msgCalendar"",""msgOpenCalendar"",""$get"",""$locale"",""$filter"",""defaultFormatDate"",""timezone"",""localeTime"",""toLocaleTimeString"",""getHours"",""indexOf"",""getFullYear"",""getMonth"",""getDate"",""format"",""defaultParseDate"",""dateString"",""defaultIsDateComplete"",""trim"",""test"",""defaultMonthHeaderFormatter"",""service"",""defaultMonthFormatter"",""defaultWeekNumberFormatter"",""number"",""defaultLongDateFormatter"",""defaultDates"",""DATETIME_FORMATS"",""SHORTDAY"",""map"",""substring"",""Array"",""defaultFirstRenderableDate"",""defaultLastRendereableDate"",""isDateComplete"",""provider"",""persianDatePickerDirective"",""$mdAria"",""inputDirective"",""tAttrs"",""hiddenIcons"",""mdHideIcons"",""ariaLabelValue"",""ariaLabel"",""mdPlaceholder"",""calendarButton"",""mdCalendar"",""triangleButton"",""addClass"",""HAS_TRIANGLE_ICON_CLASS"",""placeholder"",""isOpen"",""debounceInterval"",""PersianDatePickerCtrl"",""mdDatePickerCtrl"",""mdInputContainer"",""parentForm"",""mdNoAsterisk"",""parseAttributeBoolean"",""spacer"",""after"",""setHasPlaceholder"",""input"",""INPUT_CONTAINER_CLASS"",""toggleClass"",""HAS_CALENDAR_ICON_CLASS"",""label"",""$observe"",""expect"",""isErrorGetter"",""$invalid"",""$touched"",""$submitted"",""setInvalid"",""parentSubmittedWatcher"",""isSubmitted"",""updateErrorState"",""$window"",""documentElement"",""inputElement"",""ngInputElement"",""inputContainer"",""calendarPane"",""inputMask"",""isFocused"",""isDisabled"",""setDisabled"",""disabled"",""isString"",""isCalendarOpen"",""openOnFocus"",""calendarPaneOpenedFrom"",""calendarPaneId"",""nextUid"",""bodyClickHandler"",""handleBodyClick"",""windowEventName"",""IS_MOBILE_REGEX"",""navigator"",""userAgent"",""vendor"",""window"",""opera"",""windowEventHandler"",""debounce"",""closeCalendarPane"",""windowBlurHandler"",""handleWindowBlur"",""ngDateFilter"",""leftMargin"",""topMargin"",""$set"",""detachCalendarPane"",""mdIsOpen"",""shouldBeOpen"",""openCalendarPane"",""target"",""OPEN_CLASS"",""locale"",""extend"",""installPropertyInterceptors"",""attachChangeListeners"",""attachInteractionListeners"",""pre"",""noop"",""val"",""0"",""$formatters"",""push"",""parsedValue"",""isDefined"",""parse"",""isNaN"",""onExternalChange"",""$viewChangeListeners"",""unshift"",""updateOn"",""getModelOption"",""triggerHandler"",""setModelValue"",""resizeInputElement"",""handleInputEvent"",""keyCodes"",""altKey"",""$digest"",""ngDisabled"",""$parent"",""set"",""clearErrorState"",""$setValidity"",""$valid"",""forEach"",""field"",""size"",""inputString"",""parsedDate"",""setDateTimeToMidnight"",""attachCalendarPane"",""transform"",""elementRect"",""getBoundingClientRect"",""bodyRect"",""prop"",""paneTop"",""top"",""paneLeft"",""left"",""viewportTop"",""viewportLeft"",""scrollLeft"",""viewportBottom"",""innerHeight"",""viewportRight"",""innerWidth"",""css"",""position"",""height"",""scale"",""removeClass"",""enableScrolling"",""parentNode"",""removeChild"",""inputFocusedOnWindowBlur"",""disableScrollAround"",""focusCalendar"",""evalAttr"",""reset"",""$setTouched"",""removeEventListener"",""getCalendarCtrl"",""setFocused"",""getClosest"",""activeElement"",""$eval"",""setHasValue"",""factory"",""startOf"",""jDaysInMonth"",""getDateInNextMonth"",""getDateInPreviousMonth"",""d1"",""d2"",""pd1"",""pd2"",""isInNextMonth"",""startDate"",""endDate"",""isInPreviousMonth"",""getDateMidpoint"",""getWeekOfMonth"",""pfirstDayOfMonth"",""Math"",""floor"",""numberOfDays"",""numberOfMonths"",""start"",""end"",""pstart"",""pend"",""endOf"",""setHours"",""opt_value"",""isUndefined"",""dateAtMidnight"",""minDateAtMidnight"",""maxDateAtMidnight"",""numberOfYears"",""boundDate"",""node"",""hasAttribute"",""Number"",""getAttribute"",""pminDate"",""pmaxDate"",""pmonth"",""pyear"",""content"",""options"",""locals"",""undefined"",""cssWithMappingToString"",""item"",""useSourceMap"",""cssMapping"",""btoa"",""sourceMapping"",""toComment"",""concat"",""sources"",""source"",""sourceRoot"",""sourceMap"",""unescape"",""encodeURIComponent"",""JSON"",""stringify"",""list"",""toString"",""mediaQuery"",""alreadyImportedModules"",""addStylesToDom"",""styles"",""domStyle"",""stylesInDom"",""refs"",""parts"",""addStyle"",""listToStyles"",""newStyles"",""base"",""media"",""part"",""insertStyleElement"",""getElement"",""insertInto"",""lastStyleElementInsertedAtTop"",""stylesInsertedAtTop"",""insertAt"",""nextSibling"",""firstChild"",""removeStyleElement"",""idx"",""splice"",""createStyleElement"",""type"",""addAttrs"",""createLinkElement"",""rel"",""el"",""keys"",""key"",""obj"",""update"",""result"",""singleton"",""styleIndex"",""singletonCounter"",""applyToSingletonTag"",""URL"",""createObjectURL"",""revokeObjectURL"",""Blob"",""updateLink"",""href"",""applyToTag"",""newObj"",""index"",""styleSheet"",""cssText"",""replaceText"",""cssNode"",""createTextNode"",""autoFixUrls"",""convertToAbsoluteUrls"",""fixUrls"",""blob"",""oldSrc"",""isOldIE"",""fn"",""memo"",""apply"",""arguments"",""all"",""atob"",""selector"",""DEBUG"",""newList"",""mayRemove"",""textStore"",""replacement"",""filter"",""Boolean"",""location"",""baseUrl"",""protocol"",""host"",""currentDir"",""pathname"",""replace"",""fullMatch"",""origUrl"",""unquotedOrigUrl"",""$1"",""newUrl""],""mappings"":""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"",""file"":""datePicker.min.js"",""sourcesContent"":[""/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \""\"";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(1);\n__webpack_require__(2);\n__webpack_require__(3);\n__webpack_require__(4);\n__webpack_require__(5);\n__webpack_require__(6);\n__webpack_require__(7);\n__webpack_require__(8);\n__webpack_require__(9);\nmodule.exports = __webpack_require__(10);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/**\r\n * @ngdoc module\r\n * @name angular-material-persian-datepicker\r\n * @description Module for the Persian datepicker component.\r\n */\r\n\r\nangular.module('angular-material-persian-datepicker', [\r\n  'material.core',\r\n  'material.components.icon',\r\n  'material.components.virtualRepeat'\r\n]);\r\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n(function() {\r\n  'use strict';\r\n\r\n  /**\r\n   * @ngdoc directive\r\n   * @name mdPersianCalendar\r\n   * @module angular-material-persian-datepicker\r\n   *\r\n   * @param {Date} ng-model The component's model. Should be a Date object.\r\n   * @param {Date=} md-min-date Expression representing the minimum date.\r\n   * @param {Date=} md-max-date Expression representing the maximum date.\r\n   * @param {(function(Date): boolean)=} md-date-filter Function expecting a date and returning a boolean whether it can be selected or not.\r\n   *\r\n   * @description\r\n   * `<md-persian-calendar>` is a component that renders a calendar that can be used to select a date.\r\n   * It is a part of the `<md-persian-datepicker>` pane, however it can also be used on it's own.\r\n   *\r\n   * @usage\r\n   *\r\n   * <hljs lang=\""html\"">\r\n   *   <md-persian-calendar ng-model=\""birthday\""></md-persian-calendar>\r\n   * </hljs>\r\n   */\r\n  PersianCalendarCtrl.$inject = [\""$element\"", \""$scope\"", \""$$mdPersianDateUtil\"", \""$mdUtil\"", \""$mdConstant\"", \""$mdTheming\"", \""$$rAF\"", \""$attrs\"", \""$mdPersianDateLocale\""];\r\n  angular.module('angular-material-persian-datepicker')\r\n    .directive('mdPersianCalendar', persianCalendarDirective);\r\n\r\n  // POST RELEASE\r\n  // TODO(jelbourn): Mac Cmd + left / right == Home / End\r\n  // TODO(jelbourn): Refactor month element creation to use cloneNode (performance).\r\n  // TODO(jelbourn): Define virtual scrolling constants (compactness) users can override.\r\n  // TODO(jelbourn): Animated month transition on ng-model change (virtual-repeat)\r\n  // TODO(jelbourn): Scroll snapping (virtual repeat)\r\n  // TODO(jelbourn): Remove superfluous row from short months (virtual-repeat)\r\n  // TODO(jelbourn): Month headers stick to top when scrolling.\r\n  // TODO(jelbourn): Previous month opacity is lowered when partially scrolled out of view.\r\n  // TODO(jelbourn): Support md-persian-calendar standalone on a page (as a tabstop w/ aria-live\r\n  //     announcement and key handling).\r\n  // Read-only calendar (not just date-picker).\r\n\r\n  function persianCalendarDirective() {\r\n    return {\r\n      template: function(tElement, tAttr) {\r\n        // TODO(crisbeto): This is a workaround that allows the calendar to work, without\r\n        // a datepicker, until issue #8585 gets resolved. It can safely be removed\r\n        // afterwards. This ensures that the virtual repeater scrolls to the proper place on load by\r\n        // deferring the execution until the next digest. It's necessary only if the calendar is used\r\n        // without a datepicker, otherwise it's already wrapped in an ngIf.\r\n        var extraAttrs = tAttr.hasOwnProperty('ngIf') ? '' : 'ng-if=\""calendarCtrl.isInitialized\""';\r\n        var template = '' +\r\n          '<div ng-switch=\""calendarCtrl.currentView\"" ' + extraAttrs + '>' +\r\n            '<md-persian-calendar-year ng-switch-when=\""year\""></md-persian-calendar-year>' +\r\n            '<md-persian-calendar-month ng-switch-default></md-persian-calendar-month>' +\r\n          '</div>';\r\n\r\n        return template;\r\n      },\r\n      scope: {\r\n        minDate: '=mdMinDate',\r\n        maxDate: '=mdMaxDate',\r\n        dateFilter: '=mdDateFilter',\r\n        _currentView: '@mdCurrentView'\r\n      },\r\n      require: ['ngModel', 'mdPersianCalendar'],\r\n      controller: PersianCalendarCtrl,\r\n      controllerAs: 'calendarCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var ngModelCtrl = controllers[0];\r\n        var mdCalendarCtrl = controllers[1];\r\n        mdCalendarCtrl.configureNgModel(ngModelCtrl);\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Occasionally the hideVerticalScrollbar method might read an element's\r\n   * width as 0, because it hasn't been laid out yet. This value will be used\r\n   * as a fallback, in order to prevent scenarios where the element's width\r\n   * would otherwise have been set to 0. This value is the \""usual\"" width of a\r\n   * calendar within a floating calendar pane.\r\n   */\r\n  var FALLBACK_WIDTH = 340;\r\n\r\n  /** Next identifier for calendar instance. */\r\n  var nextUniqueId = 0;\r\n\r\n  /**\r\n   * Controller for the mdPersianCalendar component.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarCtrl($element, $scope, $$mdPersianDateUtil, $mdUtil,\r\n    $mdConstant, $mdTheming, $$rAF, $attrs, $mdPersianDateLocale) {\r\n\r\n    $mdTheming($element);\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final {!angular.Scope} */\r\n    this.$scope = $scope;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.$mdUtil = $mdUtil;\r\n\r\n    /** @final */\r\n    this.keyCode = $mdConstant.KEY_CODE;\r\n\r\n    /** @final */\r\n    this.$$rAF = $$rAF;\r\n\r\n    /** @final */\r\n    this.$mdPersianDateLocale = $mdPersianDateLocale;\r\n\r\n    /** @final {Date} */\r\n    this.today = this.dateUtil.createDateAtMidnight();\r\n\r\n    /** @type {!angular.NgModelController} */\r\n    this.ngModelCtrl = null;\r\n\r\n    /** @type {String} Class applied to the selected date cell. */\r\n    this.SELECTED_DATE_CLASS = 'md-calendar-selected-date';\r\n\r\n    /** @type {String} Class applied to the cell for today. */\r\n    this.TODAY_CLASS = 'md-calendar-date-today';\r\n\r\n    /** @type {String} Class applied to the focused cell. */\r\n    this.FOCUSED_DATE_CLASS = 'md-focus';\r\n\r\n    /** @final {number} Unique ID for this calendar instance. */\r\n    this.id = nextUniqueId++;\r\n\r\n    /**\r\n     * The date that is currently focused or showing in the calendar. This will initially be set\r\n     * to the ng-model value if set, otherwise to today. It will be updated as the user navigates\r\n     * to other months. The cell corresponding to the displayDate does not necesarily always have\r\n     * focus in the document (such as for cases when the user is scrolling the calendar).\r\n     * @type {Date}\r\n     */\r\n    this.displayDate = null;\r\n\r\n    /**\r\n     * The selected date. Keep track of this separately from the ng-model value so that we\r\n     * can know, when the ng-model value changes, what the previous value was before it's updated\r\n     * in the component's UI.\r\n     *\r\n     * @type {Date}\r\n     */\r\n    this.selectedDate = null;\r\n\r\n    /**\r\n     * The first date that can be rendered by the calendar. The default is taken\r\n     * from the mdDateLocale provider and is limited by the mdMinDate.\r\n     * @type {Date}\r\n     */\r\n    this.firstRenderableDate = null;\r\n\r\n    /**\r\n     * The last date that can be rendered by the calendar. The default comes\r\n     * from the mdDateLocale provider and is limited by the maxDate.\r\n     * @type {Date}\r\n     */\r\n    this.lastRenderableDate = null;\r\n\r\n    /**\r\n     * Used to toggle initialize the root element in the next digest.\r\n     * @type {Boolean}\r\n     */\r\n    this.isInitialized = false;\r\n\r\n    /**\r\n     * Cache for the  width of the element without a scrollbar. Used to hide the scrollbar later on\r\n     * and to avoid extra reflows when switching between views.\r\n     * @type {Number}\r\n     */\r\n    this.width = 0;\r\n\r\n    /**\r\n     * Caches the width of the scrollbar in order to be used when hiding it and to avoid extra reflows.\r\n     * @type {Number}\r\n     */\r\n    this.scrollbarWidth = 0;\r\n\r\n    // Unless the user specifies so, the calendar should not be a tab stop.\r\n    // This is necessary because ngAria might add a tabindex to anything with an ng-model\r\n    // (based on whether or not the user has turned that particular feature on/off).\r\n    if (!$attrs.tabindex) {\r\n      $element.attr('tabindex', '-1');\r\n    }\r\n\r\n    var boundKeyHandler = angular.bind(this, this.handleKeyEvent);\r\n\r\n\r\n\r\n    // If use the md-persian-calendar directly in the body without datepicker,\r\n    // handleKeyEvent will disable other inputs on the page.\r\n    // So only apply the handleKeyEvent on the body when the md-persian-calendar inside datepicker,\r\n    // otherwise apply on the calendar element only.\r\n\r\n    var handleKeyElement;\r\n    if ($element.parent().hasClass('md-datepicker-calendar')) {\r\n      handleKeyElement = angular.element(document.body);\r\n    } else {\r\n      handleKeyElement = $element;\r\n    }\r\n\r\n    // Bind the keydown handler to the body, in order to handle cases where the focused\r\n    // element gets removed from the DOM and stops propagating click events.\r\n    handleKeyElement.on('keydown', boundKeyHandler);\r\n\r\n    $scope.$on('$destroy', function() {\r\n      handleKeyElement.off('keydown', boundKeyHandler);\r\n    });\r\n\r\n    // For AngularJS 1.4 and older, where there are no lifecycle hooks but bindings are pre-assigned,\r\n    // manually call the $onInit hook.\r\n    if (angular.version.major === 1 && angular.version.minor <= 4) {\r\n      this.$onInit();\r\n    }\r\n\r\n  }\r\n\r\n  /**\r\n   * AngularJS Lifecycle hook for newer AngularJS versions.\r\n   * Bindings are not guaranteed to have been assigned in the controller, but they are in the $onInit hook.\r\n   */\r\n  PersianCalendarCtrl.prototype.$onInit = function() {\r\n\r\n    /**\r\n     * The currently visible calendar view. Note the prefix on the scope value,\r\n     * which is necessary, because the datepicker seems to reset the real one value if the\r\n     * calendar is open, but the value on the datepicker's scope is empty.\r\n     * @type {String}\r\n     */\r\n    this.currentView = this._currentView || 'month';\r\n\r\n    var dateLocale = this.$mdPersianDateLocale;\r\n\r\n    if (this.minDate && this.minDate > dateLocale.firstRenderableDate) {\r\n      this.firstRenderableDate = this.minDate;\r\n    } else {\r\n      this.firstRenderableDate = dateLocale.firstRenderableDate;\r\n    }\r\n\r\n    if (this.maxDate && this.maxDate < dateLocale.lastRenderableDate) {\r\n      this.lastRenderableDate = this.maxDate;\r\n    } else {\r\n      this.lastRenderableDate = dateLocale.lastRenderableDate;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Sets up the controller's reference to ngModelController.\r\n   * @param {!angular.NgModelController} ngModelCtrl\r\n   */\r\n  PersianCalendarCtrl.prototype.configureNgModel = function(ngModelCtrl) {\r\n    var self = this;\r\n\r\n    self.ngModelCtrl = ngModelCtrl;\r\n\r\n    self.$mdUtil.nextTick(function() {\r\n      self.isInitialized = true;\r\n    });\r\n\r\n    ngModelCtrl.$render = function() {\r\n      var value = this.$viewValue;\r\n\r\n      // Notify the child scopes of any changes.\r\n      self.$scope.$broadcast('md-calendar-parent-changed', value);\r\n\r\n      // Set up the selectedDate if it hasn't been already.\r\n      if (!self.selectedDate) {\r\n        self.selectedDate = value;\r\n      }\r\n\r\n      // Also set up the displayDate.\r\n      if (!self.displayDate) {\r\n        self.displayDate = self.selectedDate || self.today;\r\n      }\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Sets the ng-model value for the calendar and emits a change event.\r\n   * @param {Date} date\r\n   */\r\n  PersianCalendarCtrl.prototype.setNgModelValue = function(date) {\r\n    var value = this.dateUtil.createDateAtMidnight(date);\r\n    this.focus(value);\r\n    this.$scope.$emit('md-calendar-change', value);\r\n    this.ngModelCtrl.$setViewValue(value);\r\n    this.ngModelCtrl.$render();\r\n    return value;\r\n  };\r\n\r\n  /**\r\n   * Sets the current view that should be visible in the calendar\r\n   * @param {string} newView View name to be set.\r\n   * @param {number|Date} time Date object or a timestamp for the new display date.\r\n   */\r\n  PersianCalendarCtrl.prototype.setCurrentView = function(newView, time) {\r\n    var self = this;\r\n\r\n    self.$mdUtil.nextTick(function() {\r\n      self.currentView = newView;\r\n\r\n      if (time) {\r\n        self.displayDate = angular.isDate(time) ? time : new Date(time);\r\n      }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Focus the cell corresponding to the given date.\r\n   * @param {Date} date The date to be focused.\r\n   */\r\n  PersianCalendarCtrl.prototype.focus = function(date) {\r\n    if (this.dateUtil.isValidDate(date)) {\r\n      var previousFocus = this.$element[0].querySelector('.md-focus');\r\n      if (previousFocus) {\r\n        previousFocus.classList.remove(this.FOCUSED_DATE_CLASS);\r\n      }\r\n\r\n      var cellId = this.getDateId(date, this.currentView);\r\n      var cell = document.getElementById(cellId);\r\n      if (cell) {\r\n        cell.classList.add(this.FOCUSED_DATE_CLASS);\r\n        cell.focus();\r\n        this.displayDate = date;\r\n      }\r\n    } else {\r\n      var rootElement = this.$element[0].querySelector('[ng-switch]');\r\n\r\n      if (rootElement) {\r\n        rootElement.focus();\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Normalizes the key event into an action name. The action will be broadcast\r\n   * to the child controllers.\r\n   * @param {KeyboardEvent} event\r\n   * @returns {String} The action that should be taken, or null if the key\r\n   * does not match a calendar shortcut.\r\n   */\r\n  PersianCalendarCtrl.prototype.getActionFromKeyEvent = function(event) {\r\n    var keyCode = this.keyCode;\r\n\r\n    switch (event.which) {\r\n      case keyCode.ENTER: return 'select';\r\n\r\n      case keyCode.RIGHT_ARROW: return 'move-right';\r\n      case keyCode.LEFT_ARROW: return 'move-left';\r\n\r\n      // TODO(crisbeto): Might want to reconsider using metaKey, because it maps\r\n      // to the \""Windows\"" key on PC, which opens the start menu or resizes the browser.\r\n      case keyCode.DOWN_ARROW: return event.metaKey ? 'move-page-down' : 'move-row-down';\r\n      case keyCode.UP_ARROW: return event.metaKey ? 'move-page-up' : 'move-row-up';\r\n\r\n      case keyCode.PAGE_DOWN: return 'move-page-down';\r\n      case keyCode.PAGE_UP: return 'move-page-up';\r\n\r\n      case keyCode.HOME: return 'start';\r\n      case keyCode.END: return 'end';\r\n\r\n      default: return null;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Handles a key event in the calendar with the appropriate action. The action will either\r\n   * be to select the focused date or to navigate to focus a new date.\r\n   * @param {KeyboardEvent} event\r\n   */\r\n  PersianCalendarCtrl.prototype.handleKeyEvent = function(event) {\r\n    var self = this;\r\n\r\n    this.$scope.$apply(function() {\r\n      // Capture escape and emit back up so that a wrapping component\r\n      // (such as a date-picker) can decide to close.\r\n      if (event.which == self.keyCode.ESCAPE || event.which == self.keyCode.TAB) {\r\n        self.$scope.$emit('md-calendar-close');\r\n\r\n        if (event.which == self.keyCode.TAB) {\r\n          event.preventDefault();\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      // Broadcast the action that any child controllers should take.\r\n      var action = self.getActionFromKeyEvent(event);\r\n      if (action) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        self.$scope.$broadcast('md-calendar-parent-action', action);\r\n      }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Hides the vertical scrollbar on the calendar scroller of a child controller by\r\n   * setting the width on the calendar scroller and the `overflow: hidden` wrapper\r\n   * around the scroller, and then setting a padding-right on the scroller equal\r\n   * to the width of the browser's scrollbar.\r\n   *\r\n   * This will cause a reflow.\r\n   *\r\n   * @param {object} childCtrl The child controller whose scrollbar should be hidden.\r\n   */\r\n  PersianCalendarCtrl.prototype.hideVerticalScrollbar = function(childCtrl) {\r\n    var self = this;\r\n    var element = childCtrl.$element[0];\r\n    var scrollMask = element.querySelector('.md-calendar-scroll-mask');\r\n\r\n    if (self.width > 0) {\r\n      setWidth();\r\n    } else {\r\n      self.$$rAF(function() {\r\n        var scroller = childCtrl.calendarScroller;\r\n\r\n        self.scrollbarWidth = scroller.offsetWidth - scroller.clientWidth;\r\n        self.width = element.querySelector('table').offsetWidth;\r\n        setWidth();\r\n      });\r\n    }\r\n\r\n    function setWidth() {\r\n      var width = self.width || FALLBACK_WIDTH;\r\n      var scrollbarWidth = self.scrollbarWidth;\r\n      var scroller = childCtrl.calendarScroller;\r\n\r\n      scrollMask.style.width = width + 'px';\r\n      scroller.style.width = (width + scrollbarWidth) + 'px';\r\n      scroller.style.paddingRight = scrollbarWidth + 'px';\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Gets an identifier for a date unique to the calendar instance for internal\r\n   * purposes. Not to be displayed.\r\n   * @param {Date} date The date for which the id is being generated\r\n   * @param {string} namespace Namespace for the id. (month, year etc.)\r\n   * @returns {string}\r\n   */\r\n  PersianCalendarCtrl.prototype.getDateId = function(date, namespace) {\r\n    if (!namespace) {\r\n      throw new Error('A namespace for the date id has to be specified.');\r\n    }\r\n\r\n    // return [\r\n    //   'md',\r\n    //   this.id,\r\n    //   namespace,\r\n    //   date.getFullYear(),\r\n    //   date.getMonth(),\r\n    //   date.getDate()\r\n    // ].join('-');\r\n    var pd = moment(date);\r\n    return [\r\n      'md',\r\n      this.id,\r\n      namespace,\r\n      pd.jYear(),\r\n      pd.jMonth(),\r\n      pd.jDate()\r\n    ].join('-');\r\n  };\r\n\r\n  /**\r\n   * Util to trigger an extra digest on a parent scope, in order to to ensure that\r\n   * any child virtual repeaters have updated. This is necessary, because the virtual\r\n   * repeater doesn't update the $index the first time around since the content isn't\r\n   * in place yet. The case, in which this is an issue, is when the repeater has less\r\n   * than a page of content (e.g. a month or year view has a min or max date).\r\n   */\r\n  PersianCalendarCtrl.prototype.updateVirtualRepeat = function() {\r\n    var scope = this.$scope;\r\n    var virtualRepeatResizeListener = scope.$on('$md-resize-enable', function() {\r\n      if (!scope.$$phase) {\r\n        scope.$apply();\r\n      }\r\n\r\n      virtualRepeatResizeListener();\r\n    });\r\n  };\r\n})();\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n(function() {\r\n  'use strict';\r\n\r\n  PersianCalendarMonthCtrl.$inject = [\""$element\"", \""$scope\"", \""$animate\"", \""$q\"", \""$$mdPersianDateUtil\"", \""$mdPersianDateLocale\""];\r\n  angular.module('angular-material-persian-datepicker')\r\n    .directive('mdPersianCalendarMonth', persianCalendarDirective);\r\n\r\n  /**\r\n   * Height of one calendar month tbody. This must be made known to the virtual-repeat and is\r\n   * subsequently used for scrolling to specific months.\r\n   */\r\n  var TBODY_HEIGHT = 265;\r\n\r\n  /**\r\n   * Height of a calendar month with a single row. This is needed to calculate the offset for\r\n   * rendering an extra month in virtual-repeat that only contains one row.\r\n   */\r\n  var TBODY_SINGLE_ROW_HEIGHT = 45;\r\n\r\n  /** Private directive that represents a list of months inside the calendar. */\r\n  function persianCalendarDirective() {\r\n    return {\r\n      template:\r\n        '<table aria-hidden=\""true\"" class=\""md-calendar-day-header\""><thead></thead></table>' +\r\n        '<div class=\""md-calendar-scroll-mask\"">' +\r\n        '<md-virtual-repeat-container class=\""md-calendar-scroll-container\"" ' +\r\n              'md-offset-size=\""' + (TBODY_SINGLE_ROW_HEIGHT - TBODY_HEIGHT) + '\"">' +\r\n            '<table role=\""grid\"" tabindex=\""0\"" class=\""md-calendar\"" aria-readonly=\""true\"">' +\r\n              '<tbody ' +\r\n                  'md-persian-calendar-month-body ' +\r\n                  'role=\""rowgroup\"" ' +\r\n                  'md-virtual-repeat=\""i in monthCtrl.items\"" ' +\r\n                  'md-month-offset=\""$index\"" ' +\r\n                  'class=\""md-calendar-month\"" ' +\r\n                  'md-start-index=\""monthCtrl.getSelectedMonthIndex()\"" ' +\r\n                  'md-item-size=\""' + TBODY_HEIGHT + '\"">' +\r\n\r\n                // The <tr> ensures that the <tbody> will always have the\r\n                // proper height, even if it's empty. If it's content is\r\n                // compiled, the <tr> will be overwritten.\r\n                '<tr aria-hidden=\""true\"" md-force-height=\""\\'' + TBODY_HEIGHT + 'px\\'\""></tr>' +\r\n              '</tbody>' +\r\n            '</table>' +\r\n          '</md-virtual-repeat-container>' +\r\n        '</div>',\r\n      require: ['^^mdPersianCalendar', 'mdPersianCalendarMonth'],\r\n      controller: PersianCalendarMonthCtrl,\r\n      controllerAs: 'monthCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var calendarCtrl = controllers[0];\r\n        var monthCtrl = controllers[1];\r\n        monthCtrl.initialize(calendarCtrl);\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Controller for the calendar month component.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarMonthCtrl($element, $scope, $animate, $q,\r\n    $$mdPersianDateUtil, $mdPersianDateLocale) {\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final {!angular.Scope} */\r\n    this.$scope = $scope;\r\n\r\n    /** @final {!angular.$animate} */\r\n    this.$animate = $animate;\r\n\r\n    /** @final {!angular.$q} */\r\n    this.$q = $q;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.dateLocale = $mdPersianDateLocale;\r\n\r\n    /** @final {HTMLElement} */\r\n    this.calendarScroller = $element[0].querySelector('.md-virtual-repeat-scroller');\r\n\r\n    /** @type {boolean} */\r\n    this.isInitialized = false;\r\n\r\n    /** @type {boolean} */\r\n    this.isMonthTransitionInProgress = false;\r\n\r\n    var self = this;\r\n\r\n    /**\r\n     * Handles a click event on a date cell.\r\n     * Created here so that every cell can use the same function instance.\r\n     * @this {HTMLTableCellElement} The cell that was clicked.\r\n     */\r\n    this.cellClickHandler = function() {\r\n      var timestamp = $$mdPersianDateUtil.getTimestampFromNode(this);\r\n      self.$scope.$apply(function() {\r\n        self.calendarCtrl.setNgModelValue(timestamp);\r\n      });\r\n    };\r\n\r\n    /**\r\n     * Handles click events on the month headers. Switches\r\n     * the calendar to the year view.\r\n     * @this {HTMLTableCellElement} The cell that was clicked.\r\n     */\r\n    this.headerClickHandler = function() {\r\n      self.calendarCtrl.setCurrentView('year', $$mdPersianDateUtil.getTimestampFromNode(this));\r\n    };\r\n  }\r\n\r\n  /*** Initialization ***/\r\n\r\n  /**\r\n   * Initialize the controller by saving a reference to the calendar and\r\n   * setting up the object that will be iterated by the virtual repeater.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.initialize = function(calendarCtrl) {\r\n    /**\r\n     * Dummy array-like object for virtual-repeat to iterate over. The length is the total\r\n     * number of months that can be viewed. We add 2 months: one to include the current month\r\n     * and one for the last dummy month.\r\n     *\r\n     * This is shorter than ideal because of a (potential) Firefox bug\r\n     * https://bugzilla.mozilla.org/show_bug.cgi?id=1181658.\r\n     */\r\n\r\n    this.items = {\r\n      length: this.dateUtil.getMonthDistance(\r\n        calendarCtrl.firstRenderableDate,\r\n        calendarCtrl.lastRenderableDate\r\n      ) + 2\r\n    };\r\n\r\n    this.calendarCtrl = calendarCtrl;\r\n    this.attachScopeListeners();\r\n    calendarCtrl.updateVirtualRepeat();\r\n\r\n    // Fire the initial render, since we might have missed it the first time it fired.\r\n    calendarCtrl.ngModelCtrl && calendarCtrl.ngModelCtrl.$render();\r\n  };\r\n\r\n  /**\r\n   * Gets the \""index\"" of the currently selected date as it would be in the virtual-repeat.\r\n   * @returns {number}\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.getSelectedMonthIndex = function() {\r\n    var calendarCtrl = this.calendarCtrl;\r\n\r\n    return this.dateUtil.getMonthDistance(\r\n      calendarCtrl.firstRenderableDate,\r\n      calendarCtrl.displayDate || calendarCtrl.selectedDate || calendarCtrl.today\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Change the selected date in the calendar (ngModel value has already been changed).\r\n   * @param {Date} date\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.changeSelectedDate = function(date) {\r\n    var self = this;\r\n    var calendarCtrl = self.calendarCtrl;\r\n    var previousSelectedDate = calendarCtrl.selectedDate;\r\n    calendarCtrl.selectedDate = date;\r\n\r\n    this.changeDisplayDate(date).then(function() {\r\n      var selectedDateClass = calendarCtrl.SELECTED_DATE_CLASS;\r\n      var namespace = 'month';\r\n\r\n      // Remove the selected class from the previously selected date, if any.\r\n      if (previousSelectedDate) {\r\n        var prevDateCell = document.getElementById(calendarCtrl.getDateId(previousSelectedDate, namespace));\r\n        if (prevDateCell) {\r\n          prevDateCell.classList.remove(selectedDateClass);\r\n          prevDateCell.setAttribute('aria-selected', 'false');\r\n        }\r\n      }\r\n\r\n      // Apply the select class to the new selected date if it is set.\r\n      if (date) {\r\n        var dateCell = document.getElementById(calendarCtrl.getDateId(date, namespace));\r\n        if (dateCell) {\r\n          dateCell.classList.add(selectedDateClass);\r\n          dateCell.setAttribute('aria-selected', 'true');\r\n        }\r\n      }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Change the date that is being shown in the calendar. If the given date is in a different\r\n   * month, the displayed month will be transitioned.\r\n   * @param {Date} date\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.changeDisplayDate = function(date) {\r\n    // Initialization is deferred until this function is called because we want to reflect\r\n    // the starting value of ngModel.\r\n    if (!this.isInitialized) {\r\n      this.buildWeekHeader();\r\n      this.calendarCtrl.hideVerticalScrollbar(this);\r\n      this.isInitialized = true;\r\n      return this.$q.when();\r\n    }\r\n\r\n    // If trying to show an invalid date or a transition is in progress, do nothing.\r\n    if (!this.dateUtil.isValidDate(date) || this.isMonthTransitionInProgress) {\r\n      return this.$q.when();\r\n    }\r\n\r\n    this.isMonthTransitionInProgress = true;\r\n    var animationPromise = this.animateDateChange(date);\r\n\r\n    this.calendarCtrl.displayDate = date;\r\n\r\n    var self = this;\r\n    animationPromise.then(function() {\r\n      self.isMonthTransitionInProgress = false;\r\n    });\r\n\r\n    return animationPromise;\r\n  };\r\n\r\n  /**\r\n   * Animates the transition from the calendar's current month to the given month.\r\n   * @param {Date} date\r\n   * @returns {angular.$q.Promise} The animation promise.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.animateDateChange = function(date) {\r\n    if (this.dateUtil.isValidDate(date)) {\r\n      var monthDistance = this.dateUtil.getMonthDistance(this.calendarCtrl.firstRenderableDate, date);\r\n      this.calendarScroller.scrollTop = monthDistance * TBODY_HEIGHT;\r\n    }\r\n\r\n    return this.$q.when();\r\n  };\r\n\r\n  /**\r\n   * Builds and appends a day-of-the-week header to the calendar.\r\n   * This should only need to be called once during initialization.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.buildWeekHeader = function() {\r\n    var firstDayOfWeek = this.dateLocale.firstDayOfWeek;\r\n    var shortDays = this.dateLocale.shortDays;\r\n\r\n    var row = document.createElement('tr');\r\n    for (var i = 0; i < 7; i++) {\r\n      var th = document.createElement('th');\r\n      th.textContent = shortDays[(i + firstDayOfWeek) % 7];\r\n      row.appendChild(th);\r\n    }\r\n\r\n    this.$element.find('thead').append(row);\r\n  };\r\n\r\n  /**\r\n   * Attaches listeners for the scope events that are broadcast by the calendar.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.attachScopeListeners = function() {\r\n    var self = this;\r\n\r\n    self.$scope.$on('md-calendar-parent-changed', function(event, value) {\r\n      self.changeSelectedDate(value);\r\n    });\r\n\r\n    self.$scope.$on('md-calendar-parent-action', angular.bind(this, this.handleKeyEvent));\r\n  };\r\n\r\n  /**\r\n   * Handles the month-specific keyboard interactions.\r\n   * @param {Object} event Scope event object passed by the calendar.\r\n   * @param {String} action Action, corresponding to the key that was pressed.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.handleKeyEvent = function(event, action) {\r\n    var calendarCtrl = this.calendarCtrl;\r\n    var displayDate = calendarCtrl.displayDate;\r\n\r\n    if (action === 'select') {\r\n      calendarCtrl.setNgModelValue(displayDate);\r\n    } else {\r\n      var date = null;\r\n      var dateUtil = this.dateUtil;\r\n\r\n      switch (action) {\r\n        case 'move-right': date = dateUtil.incrementDays(displayDate, 1); break;\r\n        case 'move-left': date = dateUtil.incrementDays(displayDate, -1); break;\r\n\r\n        case 'move-page-down': date = dateUtil.incrementMonths(displayDate, 1); break;\r\n        case 'move-page-up': date = dateUtil.incrementMonths(displayDate, -1); break;\r\n\r\n        case 'move-row-down': date = dateUtil.incrementDays(displayDate, 7); break;\r\n        case 'move-row-up': date = dateUtil.incrementDays(displayDate, -7); break;\r\n\r\n        case 'start': date = dateUtil.getFirstDateOfMonth(displayDate); break;\r\n        case 'end': date = dateUtil.getLastDateOfMonth(displayDate); break;\r\n      }\r\n\r\n      if (date) {\r\n        date = this.dateUtil.clampDate(date, calendarCtrl.minDate, calendarCtrl.maxDate);\r\n\r\n        this.changeDisplayDate(date).then(function() {\r\n          calendarCtrl.focus(date);\r\n        });\r\n      }\r\n    }\r\n  };\r\n})();\r\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n(function() {\r\n  'use strict';\r\n\r\n  mdPersianCalendarMonthBodyDirective.$inject = [\""$compile\"", \""$$mdSvgRegistry\""];\r\n  PersianCalendarMonthBodyCtrl.$inject = [\""$element\"", \""$$mdPersianDateUtil\"", \""$mdPersianDateLocale\""];\r\n  angular.module('angular-material-persian-datepicker')\r\n      .directive('mdPersianCalendarMonthBody', mdPersianCalendarMonthBodyDirective);\r\n\r\n  /**\r\n   * Private directive consumed by md-persian-calendar-month. Having this directive lets the calender use\r\n   * md-virtual-repeat and also cleanly separates the month DOM construction functions from\r\n   * the rest of the calendar controller logic.\r\n   * @ngInject\r\n   */\r\n  function mdPersianCalendarMonthBodyDirective($compile, $$mdSvgRegistry) {\r\n    var ARROW_ICON = $compile('<md-icon md-svg-src=\""' +\r\n      $$mdSvgRegistry.mdTabsArrow + '\""></md-icon>')({})[0];\r\n\r\n    return {\r\n      require: ['^^mdPersianCalendar', '^^mdPersianCalendarMonth', 'mdPersianCalendarMonthBody'],\r\n      scope: { offset: '=mdMonthOffset' },\r\n      controller: PersianCalendarMonthBodyCtrl,\r\n      controllerAs: 'mdMonthBodyCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var calendarCtrl = controllers[0];\r\n        var monthCtrl = controllers[1];\r\n        var monthBodyCtrl = controllers[2];\r\n\r\n        monthBodyCtrl.calendarCtrl = calendarCtrl;\r\n        monthBodyCtrl.monthCtrl = monthCtrl;\r\n        monthBodyCtrl.arrowIcon = ARROW_ICON.cloneNode(true);\r\n\r\n        // The virtual-repeat re-uses the same DOM elements, so there are only a limited number\r\n        // of repeated items that are linked, and then those elements have their bindings updated.\r\n        // Since the months are not generated by bindings, we simply regenerate the entire thing\r\n        // when the binding (offset) changes.\r\n        scope.$watch(function() { return monthBodyCtrl.offset; }, function(offset) {\r\n          if (angular.isNumber(offset)) {\r\n            monthBodyCtrl.generateContent();\r\n          }\r\n        });\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Controller for a single calendar month.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarMonthBodyCtrl($element, $$mdPersianDateUtil, $mdPersianDateLocale) {\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.dateLocale = $mdPersianDateLocale;\r\n\r\n    /** @type {Object} Reference to the month view. */\r\n    this.monthCtrl = null;\r\n\r\n    /** @type {Object} Reference to the calendar. */\r\n    this.calendarCtrl = null;\r\n\r\n    /**\r\n     * Number of months from the start of the month \""items\"" that the currently rendered month\r\n     * occurs. Set via angular data binding.\r\n     * @type {number}\r\n     */\r\n    this.offset = null;\r\n\r\n    /**\r\n     * Date cell to focus after appending the month to the document.\r\n     * @type {HTMLElement}\r\n     */\r\n    this.focusAfterAppend = null;\r\n  }\r\n\r\n  /** Generate and append the content for this month to the directive element. */\r\n  PersianCalendarMonthBodyCtrl.prototype.generateContent = function() {\r\n    var date = this.dateUtil.incrementMonths(this.calendarCtrl.firstRenderableDate, this.offset);\r\n\r\n    this.$element\r\n      .empty()\r\n      .append(this.buildCalendarForMonth(date));\r\n\r\n    if (this.focusAfterAppend) {\r\n      this.focusAfterAppend.classList.add(this.calendarCtrl.FOCUSED_DATE_CLASS);\r\n      this.focusAfterAppend.focus();\r\n      this.focusAfterAppend = null;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Creates a single cell to contain a date in the calendar with all appropriate\r\n   * attributes and classes added. If a date is given, the cell content will be set\r\n   * based on the date.\r\n   * @param {Date=} opt_date\r\n   * @returns {HTMLElement}\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.buildDateCell = function(opt_date) {\r\n    var monthCtrl = this.monthCtrl;\r\n    var calendarCtrl = this.calendarCtrl;\r\n\r\n    // TODO(jelbourn): cloneNode is likely a faster way of doing this.\r\n    var cell = document.createElement('td');\r\n    cell.tabIndex = -1;\r\n    cell.classList.add('md-calendar-date');\r\n    cell.setAttribute('role', 'gridcell');\r\n\r\n    if (opt_date) {\r\n      cell.setAttribute('tabindex', '-1');\r\n      cell.setAttribute('aria-label', this.dateLocale.longDateFormatter(opt_date));\r\n      cell.id = calendarCtrl.getDateId(opt_date, 'month');\r\n\r\n      // Use `data-timestamp` attribute because IE10 does not support the `dataset` property.\r\n      cell.setAttribute('data-timestamp', opt_date.getTime());\r\n\r\n      // TODO(jelourn): Doing these comparisons for class addition during generation might be slow.\r\n      // It may be better to finish the construction and then query the node and add the class.\r\n      if (this.dateUtil.isSameDay(opt_date, calendarCtrl.today)) {\r\n        cell.classList.add(calendarCtrl.TODAY_CLASS);\r\n      }\r\n\r\n      if (this.dateUtil.isValidDate(calendarCtrl.selectedDate) &&\r\n          this.dateUtil.isSameDay(opt_date, calendarCtrl.selectedDate)) {\r\n        cell.classList.add(calendarCtrl.SELECTED_DATE_CLASS);\r\n        cell.setAttribute('aria-selected', 'true');\r\n      }\r\n\r\n      var cellText = this.dateLocale.dates[moment(opt_date).jDate()];\r\n\r\n      if (this.isDateEnabled(opt_date)) {\r\n        // Add a indicator for select, hover, and focus states.\r\n        var selectionIndicator = document.createElement('span');\r\n        selectionIndicator.classList.add('md-calendar-date-selection-indicator');\r\n        selectionIndicator.textContent = cellText;\r\n        cell.appendChild(selectionIndicator);\r\n        cell.addEventListener('click', monthCtrl.cellClickHandler);\r\n\r\n        if (calendarCtrl.displayDate && this.dateUtil.isSameDay(opt_date, calendarCtrl.displayDate)) {\r\n          this.focusAfterAppend = cell;\r\n        }\r\n      } else {\r\n        cell.classList.add('md-calendar-date-disabled');\r\n        cell.textContent = cellText;\r\n      }\r\n    }\r\n\r\n    return cell;\r\n  };\r\n\r\n  /**\r\n   * Check whether date is in range and enabled\r\n   * @param {Date=} opt_date\r\n   * @return {boolean} Whether the date is enabled.\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.isDateEnabled = function(opt_date) {\r\n    return this.dateUtil.isDateWithinRange(opt_date,\r\n          this.calendarCtrl.minDate, this.calendarCtrl.maxDate) &&\r\n          (!angular.isFunction(this.calendarCtrl.dateFilter)\r\n           || this.calendarCtrl.dateFilter(opt_date));\r\n  };\r\n\r\n  /**\r\n   * Builds a `tr` element for the calendar grid.\r\n   * @param rowNumber The week number within the month.\r\n   * @returns {HTMLElement}\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.buildDateRow = function(rowNumber) {\r\n    var row = document.createElement('tr');\r\n    row.setAttribute('role', 'row');\r\n\r\n    // Because of an NVDA bug (with Firefox), the row needs an aria-label in order\r\n    // to prevent the entire row being read aloud when the user moves between rows.\r\n    // See http://community.nvda-project.org/ticket/4643.\r\n    row.setAttribute('aria-label', this.dateLocale.weekNumberFormatter(rowNumber));\r\n\r\n    return row;\r\n  };\r\n\r\n  /**\r\n   * Builds the <tbody> content for the given date's month.\r\n   * @param {Date=} opt_dateInMonth\r\n   * @returns {DocumentFragment} A document fragment containing the <tr> elements.\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.buildCalendarForMonth = function(opt_dateInMonth) {\r\n    var date = this.dateUtil.isValidDate(opt_dateInMonth) ? opt_dateInMonth : new Date();\r\n\r\n    var firstDayOfMonth = this.dateUtil.getFirstDateOfMonth(date);\r\n    var firstDayOfTheWeek = this.getLocaleDay_(firstDayOfMonth);\r\n    var numberOfDaysInMonth = this.dateUtil.getNumberOfDaysInMonth(date);\r\n\r\n    // Store rows for the month in a document fragment so that we can append them all at once.\r\n    var monthBody = document.createDocumentFragment();\r\n\r\n    var rowNumber = 1;\r\n    var row = this.buildDateRow(rowNumber);\r\n    monthBody.appendChild(row);\r\n\r\n    // If this is the final month in the list of items, only the first week should render,\r\n    // so we should return immediately after the first row is complete and has been\r\n    // attached to the body.\r\n    var isFinalMonth = this.offset === this.monthCtrl.items.length - 1;\r\n\r\n    // Add a label for the month. If the month starts on a Sun/Mon/Tues, the month label\r\n    // goes on a row above the first of the month. Otherwise, the month label takes up the first\r\n    // two cells of the first row.\r\n    var blankCellOffset = 0;\r\n    var monthLabelCell = document.createElement('td');\r\n    var monthLabelCellContent = document.createElement('span');\r\n\r\n    monthLabelCellContent.textContent = this.dateLocale.monthHeaderFormatter(date);\r\n    monthLabelCell.appendChild(monthLabelCellContent);\r\n    monthLabelCell.classList.add('md-calendar-month-label');\r\n    // If the entire month is after the max date, render the label as a disabled state.\r\n    if (this.calendarCtrl.maxDate && firstDayOfMonth > this.calendarCtrl.maxDate) {\r\n      monthLabelCell.classList.add('md-calendar-month-label-disabled');\r\n    } else {\r\n      monthLabelCell.addEventListener('click', this.monthCtrl.headerClickHandler);\r\n      monthLabelCell.setAttribute('data-timestamp', firstDayOfMonth.getTime());\r\n      monthLabelCell.setAttribute('aria-label', this.dateLocale.monthFormatter(date));\r\n      monthLabelCell.appendChild(this.arrowIcon.cloneNode(true));\r\n    }\r\n\r\n    if (firstDayOfTheWeek <= 2) {\r\n      monthLabelCell.setAttribute('colspan', '7');\r\n\r\n      var monthLabelRow = this.buildDateRow();\r\n      monthLabelRow.appendChild(monthLabelCell);\r\n      monthBody.insertBefore(monthLabelRow, row);\r\n\r\n      if (isFinalMonth) {\r\n        return monthBody;\r\n      }\r\n    } else {\r\n      blankCellOffset = 3;\r\n      monthLabelCell.setAttribute('colspan', '3');\r\n      row.appendChild(monthLabelCell);\r\n    }\r\n\r\n    // Add a blank cell for each day of the week that occurs before the first of the month.\r\n    // For example, if the first day of the month is a Tuesday, add blank cells for Sun and Mon.\r\n    // The blankCellOffset is needed in cases where the first N cells are used by the month label.\r\n    for (var i = blankCellOffset; i < firstDayOfTheWeek; i++) {\r\n      row.appendChild(this.buildDateCell());\r\n    }\r\n\r\n    // Add a cell for each day of the month, keeping track of the day of the week so that\r\n    // we know when to start a new row.\r\n    var dayOfWeek = firstDayOfTheWeek;\r\n    var iterationDate = firstDayOfMonth;\r\n    for (var d = 1; d <= numberOfDaysInMonth; d++) {\r\n      // If we've reached the end of the week, start a new row.\r\n      if (dayOfWeek === 7) {\r\n        // We've finished the first row, so we're done if this is the final month.\r\n        if (isFinalMonth) {\r\n          return monthBody;\r\n        }\r\n        dayOfWeek = 0;\r\n        rowNumber++;\r\n        row = this.buildDateRow(rowNumber);\r\n        monthBody.appendChild(row);\r\n      }\r\n\r\n      var cell = this.buildDateCell(iterationDate);\r\n      row.appendChild(cell);\r\n\r\n      iterationDate = moment(iterationDate).add(1, 'day').toDate();\r\n      dayOfWeek++;\r\n    }\r\n\r\n    // Ensure that the last row of the month has 7 cells.\r\n    while (row.childNodes.length < 7) {\r\n      row.appendChild(this.buildDateCell());\r\n    }\r\n\r\n    // Ensure that all months have 6 rows. This is necessary for now because the virtual-repeat\r\n    // requires that all items have exactly the same height.\r\n    while (monthBody.childNodes.length < 6) {\r\n      var whitespaceRow = this.buildDateRow();\r\n      for (var j = 0; j < 7; j++) {\r\n        whitespaceRow.appendChild(this.buildDateCell());\r\n      }\r\n      monthBody.appendChild(whitespaceRow);\r\n    }\r\n\r\n    return monthBody;\r\n  };\r\n\r\n  /**\r\n   * Gets the day-of-the-week index for a date for the current locale.\r\n   * @private\r\n   * @param {Date} date\r\n   * @returns {number} The column index of the date in the calendar.\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.getLocaleDay_ = function(date) {\r\n    return (moment(date).day() + (7 - this.dateLocale.firstDayOfWeek)) % 7;\r\n  };\r\n})();\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n(function() {\r\n  'use strict';\r\n\r\n  PersianCalendarYearCtrl.$inject = [\""$element\"", \""$scope\"", \""$animate\"", \""$q\"", \""$$mdPersianDateUtil\""];\r\n  angular.module('angular-material-persian-datepicker')\r\n    .directive('mdPersianCalendarYear', persianCalendarDirective);\r\n\r\n  /**\r\n   * Height of one calendar year tbody. This must be made known to the virtual-repeat and is\r\n   * subsequently used for scrolling to specific years.\r\n   */\r\n  var TBODY_HEIGHT = 88;\r\n\r\n  /** Private component, representing a list of years in the calendar. */\r\n  function persianCalendarDirective() {\r\n    return {\r\n      template:\r\n        '<div class=\""md-calendar-scroll-mask\"">' +\r\n          '<md-virtual-repeat-container class=\""md-calendar-scroll-container\"">' +\r\n            '<table role=\""grid\"" tabindex=\""0\"" class=\""md-calendar\"" aria-readonly=\""true\"">' +\r\n              '<tbody ' +\r\n                  'md-persian-calendar-year-body ' +\r\n                  'role=\""rowgroup\"" ' +\r\n                  'md-virtual-repeat=\""i in yearCtrl.items\"" ' +\r\n                  'md-year-offset=\""$index\"" class=\""md-calendar-year\"" ' +\r\n                  'md-start-index=\""yearCtrl.getFocusedYearIndex()\"" ' +\r\n                  'md-item-size=\""' + TBODY_HEIGHT + '\"">' +\r\n                // The <tr> ensures that the <tbody> will have the proper\r\n                // height, even though it may be empty.\r\n                '<tr aria-hidden=\""true\"" md-force-height=\""\\'' + TBODY_HEIGHT + 'px\\'\""></tr>' +\r\n              '</tbody>' +\r\n            '</table>' +\r\n          '</md-virtual-repeat-container>' +\r\n        '</div>',\r\n      require: ['^^mdPersianCalendar', 'mdPersianCalendarYear'],\r\n      controller: PersianCalendarYearCtrl,\r\n      controllerAs: 'yearCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var calendarCtrl = controllers[0];\r\n        var yearCtrl = controllers[1];\r\n        yearCtrl.initialize(calendarCtrl);\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Controller for the mdPersianCalendar component.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarYearCtrl($element, $scope, $animate, $q, $$mdPersianDateUtil) {\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final {!angular.Scope} */\r\n    this.$scope = $scope;\r\n\r\n    /** @final {!angular.$animate} */\r\n    this.$animate = $animate;\r\n\r\n    /** @final {!angular.$q} */\r\n    this.$q = $q;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final {HTMLElement} */\r\n    this.calendarScroller = $element[0].querySelector('.md-virtual-repeat-scroller');\r\n\r\n    /** @type {boolean} */\r\n    this.isInitialized = false;\r\n\r\n    /** @type {boolean} */\r\n    this.isMonthTransitionInProgress = false;\r\n\r\n    var self = this;\r\n\r\n    /**\r\n     * Handles a click event on a date cell.\r\n     * Created here so that every cell can use the same function instance.\r\n     * @this {HTMLTableCellElement} The cell that was clicked.\r\n     */\r\n    this.cellClickHandler = function() {\r\n      self.calendarCtrl.setCurrentView('month', $$mdPersianDateUtil.getTimestampFromNode(this));\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Initialize the controller by saving a reference to the calendar and\r\n   * setting up the object that will be iterated by the virtual repeater.\r\n   */\r\n  PersianCalendarYearCtrl.prototype.initialize = function(calendarCtrl) {\r\n    /**\r\n     * Dummy array-like object for virtual-repeat to iterate over. The length is the total\r\n     * number of years that can be viewed. We add 1 extra in order to include the current year.\r\n     */\r\n    this.items = {\r\n      length: this.dateUtil.getYearDistance(\r\n        calendarCtrl.firstRenderableDate,\r\n        calendarCtrl.lastRenderableDate\r\n      ) + 1\r\n    };\r\n\r\n    this.calendarCtrl = calendarCtrl;\r\n    this.attachScopeListeners();\r\n    calendarCtrl.updateVirtualRepeat();\r\n\r\n    // Fire the initial render, since we might have missed it the first time it fired.\r\n    calendarCtrl.ngModelCtrl && calendarCtrl.ngModelCtrl.$render();\r\n  };\r\n\r\n  /**\r\n   * Gets the \""index\"" of the currently selected date as it would be in the virtual-repeat.\r\n   * @returns {number}\r\n   */\r\n  PersianCalendarYearCtrl.prototype.getFocusedYearIndex = function() {\r\n    var calendarCtrl = this.calendarCtrl;\r\n\r\n    return this.dateUtil.getYearDistance(\r\n      calendarCtrl.firstRenderableDate,\r\n      calendarCtrl.displayDate || calendarCtrl.selectedDate || calendarCtrl.today\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Change the date that is highlighted in the calendar.\r\n   * @param {Date} date\r\n   */\r\n  PersianCalendarYearCtrl.prototype.changeDate = function(date) {\r\n    // Initialization is deferred until this function is called because we want to reflect\r\n    // the starting value of ngModel.\r\n    if (!this.isInitialized) {\r\n      this.calendarCtrl.hideVerticalScrollbar(this);\r\n      this.isInitialized = true;\r\n      return this.$q.when();\r\n    } else if (this.dateUtil.isValidDate(date) && !this.isMonthTransitionInProgress) {\r\n      var self = this;\r\n      var animationPromise = this.animateDateChange(date);\r\n\r\n      self.isMonthTransitionInProgress = true;\r\n      self.calendarCtrl.displayDate = date;\r\n\r\n      return animationPromise.then(function() {\r\n        self.isMonthTransitionInProgress = false;\r\n      });\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Animates the transition from the calendar's current month to the given month.\r\n   * @param {Date} date\r\n   * @returns {angular.$q.Promise} The animation promise.\r\n   */\r\n  PersianCalendarYearCtrl.prototype.animateDateChange = function(date) {\r\n    if (this.dateUtil.isValidDate(date)) {\r\n      var monthDistance = this.dateUtil.getYearDistance(this.calendarCtrl.firstRenderableDate, date);\r\n      this.calendarScroller.scrollTop = monthDistance * TBODY_HEIGHT;\r\n    }\r\n\r\n    return this.$q.when();\r\n  };\r\n\r\n  /**\r\n   * Handles the year-view-specific keyboard interactions.\r\n   * @param {Object} event Scope event object passed by the calendar.\r\n   * @param {String} action Action, corresponding to the key that was pressed.\r\n   */\r\n  PersianCalendarYearCtrl.prototype.handleKeyEvent = function(event, action) {\r\n    var calendarCtrl = this.calendarCtrl;\r\n    var displayDate = calendarCtrl.displayDate;\r\n\r\n    if (action === 'select') {\r\n      this.changeDate(displayDate).then(function() {\r\n        calendarCtrl.setCurrentView('month', displayDate);\r\n        calendarCtrl.focus(displayDate);\r\n      });\r\n    } else {\r\n      var date = null;\r\n      var dateUtil = this.dateUtil;\r\n\r\n      switch (action) {\r\n        case 'move-right': date = dateUtil.incrementMonths(displayDate, 1); break;\r\n        case 'move-left': date = dateUtil.incrementMonths(displayDate, -1); break;\r\n\r\n        case 'move-row-down': date = dateUtil.incrementMonths(displayDate, 6); break;\r\n        case 'move-row-up': date = dateUtil.incrementMonths(displayDate, -6); break;\r\n      }\r\n\r\n      if (date) {\r\n        var min = calendarCtrl.minDate ? dateUtil.getFirstDateOfMonth(calendarCtrl.minDate) : null;\r\n        var max = calendarCtrl.maxDate ? dateUtil.getFirstDateOfMonth(calendarCtrl.maxDate) : null;\r\n        date = dateUtil.getFirstDateOfMonth(this.dateUtil.clampDate(date, min, max));\r\n\r\n        this.changeDate(date).then(function() {\r\n          calendarCtrl.focus(date);\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Attaches listeners for the scope events that are broadcast by the calendar.\r\n   */\r\n  PersianCalendarYearCtrl.prototype.attachScopeListeners = function() {\r\n    var self = this;\r\n\r\n    self.$scope.$on('md-calendar-parent-changed', function(event, value) {\r\n      self.changeDate(value);\r\n    });\r\n\r\n    self.$scope.$on('md-calendar-parent-action', angular.bind(self, self.handleKeyEvent));\r\n  };\r\n})();\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n(function() {\r\n  'use strict';\r\n\r\n  PersianCalendarYearBodyCtrl.$inject = [\""$element\"", \""$$mdPersianDateUtil\"", \""$mdPersianDateLocale\""];\r\n  angular.module('angular-material-persian-datepicker')\r\n      .directive('mdPersianCalendarYearBody', mdPersianCalendarYearDirective);\r\n\r\n  /**\r\n   * Private component, consumed by the md-persian-calendar-year, which separates the DOM construction logic\r\n   * and allows for the year view to use md-virtual-repeat.\r\n   */\r\n  function mdPersianCalendarYearDirective() {\r\n    return {\r\n      require: ['^^mdPersianCalendar', '^^mdPersianCalendarYear', 'mdPersianCalendarYearBody'],\r\n      scope: { offset: '=mdYearOffset' },\r\n      controller: PersianCalendarYearBodyCtrl,\r\n      controllerAs: 'mdYearBodyCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var calendarCtrl = controllers[0];\r\n        var yearCtrl = controllers[1];\r\n        var yearBodyCtrl = controllers[2];\r\n\r\n        yearBodyCtrl.calendarCtrl = calendarCtrl;\r\n        yearBodyCtrl.yearCtrl = yearCtrl;\r\n\r\n        scope.$watch(function() { return yearBodyCtrl.offset; }, function(offset) {\r\n          if (angular.isNumber(offset)) {\r\n            yearBodyCtrl.generateContent();\r\n          }\r\n        });\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Controller for a single year.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarYearBodyCtrl($element, $$mdPersianDateUtil, $mdPersianDateLocale) {\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.dateLocale = $mdPersianDateLocale;\r\n\r\n    /** @type {Object} Reference to the calendar. */\r\n    this.calendarCtrl = null;\r\n\r\n    /** @type {Object} Reference to the year view. */\r\n    this.yearCtrl = null;\r\n\r\n    /**\r\n     * Number of months from the start of the month \""items\"" that the currently rendered month\r\n     * occurs. Set via angular data binding.\r\n     * @type {number}\r\n     */\r\n    this.offset = null;\r\n\r\n    /**\r\n     * Date cell to focus after appending the month to the document.\r\n     * @type {HTMLElement}\r\n     */\r\n    this.focusAfterAppend = null;\r\n  }\r\n\r\n  /** Generate and append the content for this year to the directive element. */\r\n  PersianCalendarYearBodyCtrl.prototype.generateContent = function() {\r\n    var date = this.dateUtil.incrementYears(this.calendarCtrl.firstRenderableDate, this.offset);\r\n\r\n    this.$element\r\n      .empty()\r\n      .append(this.buildCalendarForYear(date));\r\n\r\n    if (this.focusAfterAppend) {\r\n      this.focusAfterAppend.classList.add(this.calendarCtrl.FOCUSED_DATE_CLASS);\r\n      this.focusAfterAppend.focus();\r\n      this.focusAfterAppend = null;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Creates a single cell to contain a year in the calendar.\r\n   * @param {number} opt_year Four-digit year.\r\n   * @param {number} opt_month Zero-indexed month.\r\n   * @returns {HTMLElement}\r\n   */\r\n  PersianCalendarYearBodyCtrl.prototype.buildMonthCell = function(year, month) {\r\n    var calendarCtrl = this.calendarCtrl;\r\n    var yearCtrl = this.yearCtrl;\r\n    var cell = this.buildBlankCell();\r\n\r\n    // Represent this month/year as a date.\r\n    var firstOfMonth = moment([year, (month+1), 1].join('/'), 'jYYYY/jM/jD').toDate();\r\n    cell.setAttribute('aria-label', this.dateLocale.monthFormatter(firstOfMonth));\r\n    cell.id = calendarCtrl.getDateId(firstOfMonth, 'year');\r\n\r\n    // Use `data-timestamp` attribute because IE10 does not support the `dataset` property.\r\n    cell.setAttribute('data-timestamp', firstOfMonth.getTime());\r\n\r\n    if (this.dateUtil.isSameMonthAndYear(firstOfMonth, calendarCtrl.today)) {\r\n      cell.classList.add(calendarCtrl.TODAY_CLASS);\r\n    }\r\n\r\n    if (this.dateUtil.isValidDate(calendarCtrl.selectedDate) &&\r\n        this.dateUtil.isSameMonthAndYear(firstOfMonth, calendarCtrl.selectedDate)) {\r\n      cell.classList.add(calendarCtrl.SELECTED_DATE_CLASS);\r\n      cell.setAttribute('aria-selected', 'true');\r\n    }\r\n\r\n    var cellText = this.dateLocale.shortMonths[month];\r\n\r\n    if (this.dateUtil.isMonthWithinRange(firstOfMonth,\r\n        calendarCtrl.minDate, calendarCtrl.maxDate)) {\r\n      var selectionIndicator = document.createElement('span');\r\n      selectionIndicator.classList.add('md-calendar-date-selection-indicator');\r\n      selectionIndicator.textContent = cellText;\r\n      cell.appendChild(selectionIndicator);\r\n      cell.addEventListener('click', yearCtrl.cellClickHandler);\r\n\r\n      if (calendarCtrl.displayDate && this.dateUtil.isSameMonthAndYear(firstOfMonth, calendarCtrl.displayDate)) {\r\n        this.focusAfterAppend = cell;\r\n      }\r\n    } else {\r\n      cell.classList.add('md-calendar-date-disabled');\r\n      cell.textContent = cellText;\r\n    }\r\n\r\n    return cell;\r\n  };\r\n\r\n  /**\r\n   * Builds a blank cell.\r\n   * @return {HTMLTableCellElement}\r\n   */\r\n  PersianCalendarYearBodyCtrl.prototype.buildBlankCell = function() {\r\n    var cell = document.createElement('td');\r\n    cell.tabIndex = -1;\r\n    cell.classList.add('md-calendar-date');\r\n    cell.setAttribute('role', 'gridcell');\r\n\r\n    cell.setAttribute('tabindex', '-1');\r\n    return cell;\r\n  };\r\n\r\n  /**\r\n   * Builds the <tbody> content for the given year.\r\n   * @param {Date} date Date for which the content should be built.\r\n   * @returns {DocumentFragment} A document fragment containing the months within the year.\r\n   */\r\n  PersianCalendarYearBodyCtrl.prototype.buildCalendarForYear = function(date) {\r\n    // Store rows for the month in a document fragment so that we can append them all at once.\r\n    var year = moment(date).jYear();\r\n    var yearBody = document.createDocumentFragment();\r\n\r\n    var monthCell, i;\r\n    // First row contains label and Jan-Jun.\r\n    var firstRow = document.createElement('tr');\r\n    var labelCell = document.createElement('td');\r\n    labelCell.className = 'md-calendar-month-label';\r\n    labelCell.textContent = year;\r\n    firstRow.appendChild(labelCell);\r\n\r\n    for (i = 0; i < 6; i++) {\r\n      firstRow.appendChild(this.buildMonthCell(year, i));\r\n    }\r\n    yearBody.appendChild(firstRow);\r\n\r\n    // Second row contains a blank cell and Jul-Dec.\r\n    var secondRow = document.createElement('tr');\r\n    secondRow.appendChild(this.buildBlankCell());\r\n    for (i = 6; i < 12; i++) {\r\n      secondRow.appendChild(this.buildMonthCell(year, i));\r\n    }\r\n    yearBody.appendChild(secondRow);\r\n\r\n    return yearBody;\r\n  };\r\n})();\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n(function() {\r\n    'use strict';\r\n\r\n    /**\r\n     * @ngdoc service\r\n     * @name $mdPersianDateLocaleProvider\r\n     * @module angular-material-persian-datepicker\r\n     *\r\n     * @description\r\n     * The `$mdPersianDateLocaleProvider` is the provider that creates the `$mdPersianDateLocale` service.\r\n     * This provider that allows the user to specify messages, formatters, and parsers for date\r\n     * internationalization. The `$mdPersianDateLocale` service itself is consumed by AngularJS Material\r\n     * components that deal with dates.\r\n     *\r\n     * @property {(Array<string>)=} months Array of month names (in order).\r\n     * @property {(Array<string>)=} shortMonths Array of abbreviated month names.\r\n     * @property {(Array<string>)=} days Array of the days of the week (in order).\r\n     * @property {(Array<string>)=} shortDays Array of abbreviated days of the week.\r\n     * @property {(Array<string>)=} dates Array of dates of the month. Only necessary for locales\r\n     *     using a numeral system other than [1, 2, 3...].\r\n     * @property {(Array<string>)=} firstDayOfWeek The first day of the week. Sunday = 0, Monday = 1,\r\n     *    etc.\r\n     * @property {(function(string): Date)=} parseDate Function to parse a date object from a string.\r\n     * @property {(function(Date, string): string)=} formatDate Function to format a date object to a\r\n     *     string. The datepicker directive also provides the time zone, if it was specified.\r\n     * @property {(function(Date): string)=} monthHeaderFormatter Function that returns the label for\r\n     *     a month given a date.\r\n     * @property {(function(Date): string)=} monthFormatter Function that returns the full name of a month\r\n     *     for a given date.\r\n     * @property {(function(number): string)=} weekNumberFormatter Function that returns a label for\r\n     *     a week given the week number.\r\n     * @property {(string)=} msgCalendar Translation of the label \""Calendar\"" for the current locale.\r\n     * @property {(string)=} msgOpenCalendar Translation of the button label \""Open calendar\"" for the\r\n     *     current locale.\r\n     * @property {Date=} firstRenderableDate The date from which the datepicker calendar will begin\r\n     * rendering. Note that this will be ignored if a minimum date is set. Defaults to January 1st 1880.\r\n     * @property {Date=} lastRenderableDate The last date that will be rendered by the datepicker\r\n     * calendar. Note that this will be ignored if a maximum date is set. Defaults to January 1st 2130.\r\n     *\r\n     * @usage\r\n     * <hljs lang=\""js\"">\r\n     * myAppModule.config(function($mdPersianDateLocaleProvider) {\r\n     *\r\n     *     // Example of a French localization.\r\n     *     $mdPersianDateLocaleProvider.months = ['janvier', 'février', 'mars', ...];\r\n     *     $mdPersianDateLocaleProvider.shortMonths = ['janv', 'févr', 'mars', ...];\r\n     *     $mdPersianDateLocaleProvider.days = ['dimanche', 'lundi', 'mardi', ...];\r\n     *     $mdPersianDateLocaleProvider.shortDays = ['Di', 'Lu', 'Ma', ...];\r\n     *\r\n     *     // Can change week display to start on Monday.\r\n     *     $mdPersianDateLocaleProvider.firstDayOfWeek = 1;\r\n     *\r\n     *     // Optional.\r\n     *     $mdPersianDateLocaleProvider.dates = [1, 2, 3, 4, 5, 6, ...];\r\n     *\r\n     *     // Example uses moment.js to parse and format dates.\r\n     *     $mdPersianDateLocaleProvider.parseDate = function(dateString) {\r\n     *       var m = moment(dateString, 'L', true);\r\n     *       return m.isValid() ? m.toDate() : new Date(NaN);\r\n     *     };\r\n     *\r\n     *     $mdPersianDateLocaleProvider.formatDate = function(date) {\r\n     *       var m = moment(date);\r\n     *       return m.isValid() ? m.format('L') : '';\r\n     *     };\r\n     *\r\n     *     $mdPersianDateLocaleProvider.monthHeaderFormatter = function(date) {\r\n     *       return myShortMonths[date.getMonth()] + ' ' + date.getFullYear();\r\n     *     };\r\n     *\r\n     *     // In addition to date display, date components also need localized messages\r\n     *     // for aria-labels for screen-reader users.\r\n     *\r\n     *     $mdPersianDateLocaleProvider.weekNumberFormatter = function(weekNumber) {\r\n     *       return 'Semaine ' + weekNumber;\r\n     *     };\r\n     *\r\n     *     $mdPersianDateLocaleProvider.msgCalendar = 'Calendrier';\r\n     *     $mdPersianDateLocaleProvider.msgOpenCalendar = 'Ouvrir le calendrier';\r\n     *\r\n     *     // You can also set when your calendar begins and ends.\r\n     *     $mdPersianDateLocaleProvider.firstRenderableDate = new Date(1776, 6, 4);\r\n     *     $mdPersianDateLocaleProvider.lastRenderableDate = new Date(2012, 11, 21);\r\n     * });\r\n     * </hljs>\r\n     *\r\n     */\r\n    angular.module('angular-material-persian-datepicker').config([\""$provide\"", function($provide) {\r\n        // TODO(jelbourn): Assert provided values are correctly formatted. Need assertions.\r\n\r\n        /** @constructor */\r\n        function PersianDateLocaleProvider() {\r\n            /** Array of full month names. E.g., ['January', 'Febuary', ...] */\r\n            this.months = null;\r\n\r\n            /** Array of abbreviated month names. E.g., ['Jan', 'Feb', ...] */\r\n            this.shortMonths = null;\r\n\r\n            /** Array of full day of the week names. E.g., ['Monday', 'Tuesday', ...] */\r\n            this.days = null;\r\n\r\n            /** Array of abbreviated dat of the week names. E.g., ['M', 'T', ...] */\r\n            this.shortDays = null;\r\n\r\n            /** Array of dates of a month (1 - 31). Characters might be different in some locales. */\r\n            this.dates = null;\r\n\r\n            /** Index of the first day of the week. 0 = Sunday, 1 = Monday, etc. */\r\n            this.firstDayOfWeek = 6;\r\n\r\n            /**\r\n             * Function that converts the date portion of a Date to a string.\r\n             * @type {(function(Date): string)}\r\n             */\r\n            this.formatDate = null;\r\n\r\n            /**\r\n             * Function that converts a date string to a Date object (the date portion)\r\n             * @type {function(string): Date}\r\n             */\r\n            this.parseDate = null;\r\n\r\n            /**\r\n             * Function that formats a Date into a month header string.\r\n             * @type {function(Date): string}\r\n             */\r\n            this.monthHeaderFormatter = null;\r\n\r\n            /**\r\n             * Function that formats a week number into a label for the week.\r\n             * @type {function(number): string}\r\n             */\r\n            this.weekNumberFormatter = null;\r\n\r\n            /**\r\n             * Function that formats a date into a long aria-label that is read\r\n             * when the focused date changes.\r\n             * @type {function(Date): string}\r\n             */\r\n            this.longDateFormatter = null;\r\n\r\n            /**\r\n             * ARIA label for the calendar \""dialog\"" used in the datepicker.\r\n             * @type {string}\r\n             */\r\n            this.msgCalendar = '';\r\n\r\n            /**\r\n             * ARIA label for the datepicker's \""Open calendar\"" buttons.\r\n             * @type {string}\r\n             */\r\n            this.msgOpenCalendar = '';\r\n        }\r\n\r\n        /**\r\n         * Factory function that returns an instance of the dateLocale service.\r\n         * @ngInject\r\n         * @param $locale\r\n         * @returns {DateLocale}\r\n         */\r\n        PersianDateLocaleProvider.prototype.$get = function($locale, $filter) {\r\n            /**\r\n             * Default date-to-string formatting function.\r\n             * @param {!Date} date\r\n             * @param {string=} timezone\r\n             * @returns {string}\r\n             */\r\n            function defaultFormatDate(date, timezone) {\r\n                if (!date) {\r\n                    return '';\r\n                }\r\n\r\n                // All of the dates created through ng-material *should* be set to midnight.\r\n                // If we encounter a date where the localeTime shows at 11pm instead of midnight,\r\n                // we have run into an issue with DST where we need to increment the hour by one:\r\n                // var d = new Date(1992, 9, 8, 0, 0, 0);\r\n                // d.toLocaleString(); // == \""10/7/1992, 11:00:00 PM\""\r\n                var localeTime = date.toLocaleTimeString();\r\n                var formatDate = date;\r\n                if (date.getHours() === 0 &&\r\n                    (localeTime.indexOf('11:') !== -1 || localeTime.indexOf('23:') !== -1)) {\r\n                    formatDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 1, 0, 0);\r\n                }\r\n\r\n                return moment(date).format('jYYYY/jMM/jDD'); // $filter('date')(formatDate, 'M/d/yyyy', timezone);\r\n            }\r\n\r\n            /**\r\n             * Default string-to-date parsing function.\r\n             * @param {string} dateString\r\n             * @returns {!Date}\r\n             */\r\n            function defaultParseDate(dateString) {\r\n                return moment(dateString, 'jYYYY/jM/jD').toDate();\r\n            }\r\n\r\n            /**\r\n             * Default function to determine whether a string makes sense to be\r\n             * parsed to a Date object.\r\n             *\r\n             * This is very permissive and is just a basic sanity check to ensure that\r\n             * things like single integers aren't able to be parsed into dates.\r\n             * @param {string} dateString\r\n             * @returns {boolean}\r\n             */\r\n            function defaultIsDateComplete(dateString) {\r\n                dateString = dateString.trim();\r\n\r\n                // Looks for three chunks of content (either numbers or text) separated\r\n                // by delimiters.\r\n                var re = /^(([a-zA-Z]{3,}|[0-9]{1,4})([ \\.,]+|[\\/\\-])){2}([a-zA-Z]{3,}|[0-9]{1,4})$/;\r\n                return re.test(dateString);\r\n            }\r\n\r\n            /**\r\n             * Default date-to-string formatter to get a month header.\r\n             * @param {!Date} date\r\n             * @returns {string}\r\n             */\r\n            function defaultMonthHeaderFormatter(date) {\r\n                var pd = moment(date);\r\n                return service.shortMonths[pd.jMonth()] + ' ' + pd.jYear();\r\n            }\r\n\r\n            /**\r\n             * Default formatter for a month.\r\n             * @param {!Date} date\r\n             * @returns {string}\r\n             */\r\n            function defaultMonthFormatter(date) {\r\n                var pd = moment(date);\r\n                return service.months[pd.jMonth()] + ' ' + pd.jYear();\r\n            }\r\n\r\n            /**\r\n             * Default week number formatter.\r\n             * @param number\r\n             * @returns {string}\r\n             */\r\n            function defaultWeekNumberFormatter(number) {\r\n                return 'هفته ' + number;\r\n            }\r\n\r\n            /**\r\n             * Default formatter for date cell aria-labels.\r\n             * @param {!Date} date\r\n             * @returns {string}\r\n             */\r\n            function defaultLongDateFormatter(date) {\r\n                // Example: 'Thursday June 18 2015'\r\n                var pd = moment(date);\r\n                return [\r\n                    service.days[pd.day()],\r\n                    service.dates[pd.jDate()],\r\n                    service.months[pd.jMonth()],\r\n                    pd.jYear()\r\n                ].join(' ');\r\n            }\r\n\r\n            // The default \""short\"" day strings are the first character of each day,\r\n            // e.g., \""Monday\"" => \""M\"".\r\n            var defaultShortDays = $locale.DATETIME_FORMATS.SHORTDAY.map(function(day) {\r\n                return day.substring(0, 1);\r\n            });\r\n\r\n            // The default dates are simply the numbers 1 through 31.\r\n            var defaultDates = Array(32);\r\n            for (var i = 1; i <= 31; i++) {\r\n                defaultDates[i] = i;\r\n            }\r\n\r\n            // Default ARIA messages are in English (US).\r\n            var defaultMsgCalendar = 'تقویم';\r\n            var defaultMsgOpenCalendar = 'گشودن تقویم';\r\n\r\n            // Default start/end dates that are rendered in the calendar.\r\n            var defaultFirstRenderableDate = new Date(1880, 0, 1);\r\n            var defaultLastRendereableDate = new Date(defaultFirstRenderableDate.getFullYear() + 250, 0, 1);\r\n\r\n            var service = {\r\n                months: this.months || //$locale.DATETIME_FORMATS.MONTH,\r\n                    [\r\n                        \""فروردین\"",\r\n                        \""اردیبهشت\"",\r\n                        \""خرداد\"",\r\n                        \""تیر\"",\r\n                        \""مرداد\"",\r\n                        \""شهریور\"",\r\n                        \""مهر\"",\r\n                        \""آبان\"",\r\n                        \""آذر\"",\r\n                        \""دی\"",\r\n                        \""بهمن\"",\r\n                        \""اسفند\""\r\n                    ],\r\n                shortMonths: this.shortMonths || //$locale.DATETIME_FORMATS.SHORTMONTH,\r\n                    [\r\n                        \""فروردین\"",\r\n                        \""اردیبهشت\"",\r\n                        \""خرداد\"",\r\n                        \""تیر\"",\r\n                        \""مرداد\"",\r\n                        \""شهریور\"",\r\n                        \""مهر\"",\r\n                        \""آبان\"",\r\n                        \""آذر\"",\r\n                        \""دی\"",\r\n                        \""بهمن\"",\r\n                        \""اسفند\""\r\n                    ],\r\n                days: this.days || //$locale.DATETIME_FORMATS.DAY,\r\n                    [\r\n                        \""یکشنبه\"",\r\n                        \""دوشنبه\"",\r\n                        \""سه‌شنبه\"",\r\n                        \""چهارشنبه\"",\r\n                        \""پنجشنبه\"",\r\n                        \""جمعه\"",\r\n                        \""شنبه\""\r\n                    ],\r\n                shortDays: this.shortDays || //defaultShortDays,\r\n                    [\r\n                        \""ی\"",\r\n                        \""د\"",\r\n                        \""س\"",\r\n                        \""چ\"",\r\n                        \""پ\"",\r\n                        \""ج\"",\r\n                        \""ش\""\r\n                    ],\r\n                dates: this.dates || defaultDates,\r\n                firstDayOfWeek: this.firstDayOfWeek || 6,\r\n                formatDate: this.formatDate || defaultFormatDate,\r\n                parseDate: this.parseDate || defaultParseDate,\r\n                isDateComplete: this.isDateComplete || defaultIsDateComplete,\r\n                monthHeaderFormatter: this.monthHeaderFormatter || defaultMonthHeaderFormatter,\r\n                monthFormatter: this.monthFormatter || defaultMonthFormatter,\r\n                weekNumberFormatter: this.weekNumberFormatter || defaultWeekNumberFormatter,\r\n                longDateFormatter: this.longDateFormatter || defaultLongDateFormatter,\r\n                msgCalendar: this.msgCalendar || defaultMsgCalendar,\r\n                msgOpenCalendar: this.msgOpenCalendar || defaultMsgOpenCalendar,\r\n                firstRenderableDate: this.firstRenderableDate || defaultFirstRenderableDate,\r\n                lastRenderableDate: this.lastRenderableDate || defaultLastRendereableDate\r\n            };\r\n\r\n            return service;\r\n        };\r\n        PersianDateLocaleProvider.prototype.$get.$inject = [\""$locale\"", \""$filter\""];\r\n\r\n        $provide.provider('$mdPersianDateLocale', new PersianDateLocaleProvider());\r\n    }]);\r\n})();\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n(function() {\r\n  'use strict';\r\n\r\n  // POST RELEASE\r\n  // TODO(jelbourn): Demo that uses moment.js\r\n  // TODO(jelbourn): make sure this plays well with validation and ngMessages.\r\n  // TODO(jelbourn): calendar pane doesn't open up outside of visible viewport.\r\n  // TODO(jelbourn): forward more attributes to the internal input (required, autofocus, etc.)\r\n  // TODO(jelbourn): something better for mobile (calendar panel takes up entire screen?)\r\n  // TODO(jelbourn): input behavior (masking? auto-complete?)\r\n\r\n\r\n  PersianDatePickerCtrl.$inject = [\""$scope\"", \""$element\"", \""$attrs\"", \""$window\"", \""$mdConstant\"", \""$mdTheming\"", \""$mdUtil\"", \""$mdPersianDateLocale\"", \""$$mdPersianDateUtil\"", \""$$rAF\"", \""$filter\""];\r\n  persianDatePickerDirective.$inject = [\""$$mdSvgRegistry\"", \""$mdUtil\"", \""$mdAria\"", \""inputDirective\""];\r\n  angular.module('angular-material-persian-datepicker')\r\n      .directive('mdPersianDatepicker', persianDatePickerDirective);\r\n\r\n  /**\r\n   * @ngdoc directive\r\n   * @name mdPersianDatepicker\r\n   * @module angular-material-persian-datepicker\r\n   *\r\n   * @param {Date} ng-model The component's model. Expects either a JavaScript Date object or a value that can be parsed into one (e.g. a ISO 8601 string).\r\n   * @param {Object=} ng-model-options Allows tuning of the way in which `ng-model` is being updated. Also allows\r\n   * for a timezone to be specified. <a href=\""https://docs.angularjs.org/api/ng/directive/ngModelOptions#usage\"">Read more at the ngModelOptions docs.</a>\r\n   * @param {expression=} ng-change Expression evaluated when the model value changes.\r\n   * @param {expression=} ng-focus Expression evaluated when the input is focused or the calendar is opened.\r\n   * @param {expression=} ng-blur Expression evaluated when focus is removed from the input or the calendar is closed.\r\n   * @param {boolean=} ng-disabled Whether the datepicker is disabled.\r\n   * @param {boolean=} ng-required Whether a value is required for the datepicker.\r\n   * @param {Date=} md-min-date Expression representing a min date (inclusive).\r\n   * @param {Date=} md-max-date Expression representing a max date (inclusive).\r\n   * @param {(function(Date): boolean)=} md-date-filter Function expecting a date and returning a boolean whether it can be selected or not.\r\n   * @param {String=} md-placeholder The date input placeholder value.\r\n   * @param {String=} md-open-on-focus When present, the calendar will be opened when the input is focused.\r\n   * @param {Boolean=} md-is-open Expression that can be used to open the datepicker's calendar on-demand.\r\n   * @param {String=} md-current-view Default open view of the calendar pane. Can be either \""month\"" or \""year\"".\r\n   * @param {String=} md-hide-icons Determines which datepicker icons should be hidden. Note that this may cause the\r\n   * datepicker to not align properly with other components. **Use at your own risk.** Possible values are:\r\n   * * `\""all\""` - Hides all icons.\r\n   * * `\""calendar\""` - Only hides the calendar icon.\r\n   * * `\""triangle\""` - Only hides the triangle icon.\r\n   * @param {Object=} md-date-locale Allows for the values from the `$mdPersianDateLocaleProvider` to be\r\n   * ovewritten on a per-element basis (e.g. `msgOpenCalendar` can be overwritten with\r\n   * `md-date-locale=\""{ msgOpenCalendar: 'Open a special calendar' }\""`).\r\n   *\r\n   * @description\r\n   * `<md-persian-datepicker>` is a component used to select a single date.\r\n   * For information on how to configure internationalization for the date picker,\r\n   * see `$mdPersianDateLocaleProvider`.\r\n   *\r\n   * This component supports [ngMessages](https://docs.angularjs.org/api/ngMessages/directive/ngMessages).\r\n   * Supported attributes are:\r\n   * * `required`: whether a required date is not set.\r\n   * * `mindate`: whether the selected date is before the minimum allowed date.\r\n   * * `maxdate`: whether the selected date is after the maximum allowed date.\r\n   * * `debounceInterval`: ms to delay input processing (since last debounce reset); default value 500ms\r\n   *\r\n   * @usage\r\n   * <hljs lang=\""html\"">\r\n   *   <md-persian-datepicker ng-model=\""birthday\""></md-datepicker>\r\n   * </hljs>\r\n   *\r\n   */\r\n\r\n  function persianDatePickerDirective($$mdSvgRegistry, $mdUtil, $mdAria, inputDirective) {\r\n    return {\r\n      template: function(tElement, tAttrs) {\r\n        // Buttons are not in the tab order because users can open the calendar via keyboard\r\n        // interaction on the text input, and multiple tab stops for one component (picker)\r\n        // may be confusing.\r\n        var hiddenIcons = tAttrs.mdHideIcons;\r\n        var ariaLabelValue = tAttrs.ariaLabel || tAttrs.mdPlaceholder;\r\n\r\n        var calendarButton = (hiddenIcons === 'all' || hiddenIcons === 'calendar') ? '' :\r\n          '<md-button class=\""md-datepicker-button md-icon-button\"" type=\""button\"" ' +\r\n              'tabindex=\""-1\"" aria-hidden=\""true\"" ' +\r\n              'ng-click=\""ctrl.openCalendarPane($event)\"">' +\r\n            '<md-icon class=\""md-datepicker-calendar-icon\"" aria-label=\""md-calendar\"" ' +\r\n                     'md-svg-src=\""' + $$mdSvgRegistry.mdCalendar + '\""></md-icon>' +\r\n          '</md-button>';\r\n\r\n        var triangleButton = '';\r\n\r\n        if (hiddenIcons !== 'all' && hiddenIcons !== 'triangle') {\r\n          triangleButton = '' +\r\n            '<md-button type=\""button\"" md-no-ink ' +\r\n              'class=\""md-datepicker-triangle-button md-icon-button\"" ' +\r\n              'ng-click=\""ctrl.openCalendarPane($event)\"" ' +\r\n              'aria-label=\""{{::ctrl.locale.msgOpenCalendar}}\"">' +\r\n            '<div class=\""md-datepicker-expand-triangle\""></div>' +\r\n          '</md-button>';\r\n\r\n          tElement.addClass(HAS_TRIANGLE_ICON_CLASS);\r\n        }\r\n\r\n        return calendarButton +\r\n        '<div class=\""md-datepicker-input-container\"" ng-class=\""{\\'md-datepicker-focused\\': ctrl.isFocused}\"">' +\r\n          '<input ' +\r\n            (ariaLabelValue ? 'aria-label=\""' + ariaLabelValue + '\"" ' : '') +\r\n            'class=\""md-datepicker-input\"" ' +\r\n            'aria-haspopup=\""true\"" ' +\r\n            'aria-expanded=\""{{ctrl.isCalendarOpen}}\"" ' +\r\n            'ng-focus=\""ctrl.setFocused(true)\"" ' +\r\n            'ng-blur=\""ctrl.setFocused(false)\""> ' +\r\n            triangleButton +\r\n        '</div>' +\r\n\r\n        // This pane will be detached from here and re-attached to the document body.\r\n        '<div class=\""md-datepicker-calendar-pane md-whiteframe-z1\"" id=\""{{::ctrl.calendarPaneId}}\"">' +\r\n          '<div class=\""md-datepicker-input-mask\"">' +\r\n            '<div class=\""md-datepicker-input-mask-opaque\""></div>' +\r\n          '</div>' +\r\n          '<div class=\""md-datepicker-calendar\"">' +\r\n            '<md-persian-calendar role=\""dialog\"" aria-label=\""{{::ctrl.locale.msgCalendar}}\"" ' +\r\n                'md-current-view=\""{{::ctrl.currentView}}\""' +\r\n                'md-min-date=\""ctrl.minDate\""' +\r\n                'md-max-date=\""ctrl.maxDate\""' +\r\n                'md-date-filter=\""ctrl.dateFilter\""' +\r\n                'ng-model=\""ctrl.date\"" ng-if=\""ctrl.isCalendarOpen\"">' +\r\n            '</md-persian-calendar>' +\r\n          '</div>' +\r\n        '</div>';\r\n      },\r\n      require: ['ngModel', 'mdPersianDatepicker', '?^mdInputContainer', '?^form'],\r\n      scope: {\r\n        minDate: '=mdMinDate',\r\n        maxDate: '=mdMaxDate',\r\n        placeholder: '@mdPlaceholder',\r\n        currentView: '@mdCurrentView',\r\n        dateFilter: '=mdDateFilter',\r\n        isOpen: '=?mdIsOpen',\r\n        debounceInterval: '=mdDebounceInterval',\r\n        dateLocale: '=mdDateLocale'\r\n      },\r\n      controller: PersianDatePickerCtrl,\r\n      controllerAs: 'ctrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attr, controllers) {\r\n        var ngModelCtrl = controllers[0];\r\n        var mdDatePickerCtrl = controllers[1];\r\n        var mdInputContainer = controllers[2];\r\n        var parentForm = controllers[3];\r\n        var mdNoAsterisk = $mdUtil.parseAttributeBoolean(attr.mdNoAsterisk);\r\n\r\n        mdDatePickerCtrl.configureNgModel(ngModelCtrl, mdInputContainer, inputDirective);\r\n\r\n        if (mdInputContainer) {\r\n          // We need to move the spacer after the datepicker itself,\r\n          // because md-input-container adds it after the\r\n          // md-datepicker-input by default. The spacer gets wrapped in a\r\n          // div, because it floats and gets aligned next to the datepicker.\r\n          // There are easier ways of working around this with CSS (making the\r\n          // datepicker 100% wide, change the `display` etc.), however they\r\n          // break the alignment with any other form controls.\r\n          var spacer = element[0].querySelector('.md-errors-spacer');\r\n\r\n          if (spacer) {\r\n            element.after(angular.element('<div>').append(spacer));\r\n          }\r\n\r\n          mdInputContainer.setHasPlaceholder(attr.mdPlaceholder);\r\n          mdInputContainer.input = element;\r\n          mdInputContainer.element\r\n            .addClass(INPUT_CONTAINER_CLASS)\r\n            .toggleClass(HAS_CALENDAR_ICON_CLASS, attr.mdHideIcons !== 'calendar' && attr.mdHideIcons !== 'all');\r\n\r\n          if (!mdInputContainer.label) {\r\n            $mdAria.expect(element, 'aria-label', attr.mdPlaceholder);\r\n          } else if(!mdNoAsterisk) {\r\n            attr.$observe('required', function(value) {\r\n              mdInputContainer.label.toggleClass('md-required', !!value);\r\n            });\r\n          }\r\n\r\n          scope.$watch(mdInputContainer.isErrorGetter || function() {\r\n            return ngModelCtrl.$invalid && (ngModelCtrl.$touched || (parentForm && parentForm.$submitted));\r\n          }, mdInputContainer.setInvalid);\r\n        } else if (parentForm) {\r\n          // If invalid, highlights the input when the parent form is submitted.\r\n          var parentSubmittedWatcher = scope.$watch(function() {\r\n            return parentForm.$submitted;\r\n          }, function(isSubmitted) {\r\n            if (isSubmitted) {\r\n              mdDatePickerCtrl.updateErrorState();\r\n              parentSubmittedWatcher();\r\n            }\r\n          });\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  /** Additional offset for the input's `size` attribute, which is updated based on its content. */\r\n  var EXTRA_INPUT_SIZE = 3;\r\n\r\n  /** Class applied to the container if the date is invalid. */\r\n  var INVALID_CLASS = 'md-datepicker-invalid';\r\n\r\n  /** Class applied to the datepicker when it's open. */\r\n  var OPEN_CLASS = 'md-datepicker-open';\r\n\r\n  /** Class applied to the md-input-container, if a datepicker is placed inside it */\r\n  var INPUT_CONTAINER_CLASS = '_md-datepicker-floating-label';\r\n\r\n  /** Class to be applied when the calendar icon is enabled. */\r\n  var HAS_CALENDAR_ICON_CLASS = '_md-datepicker-has-calendar-icon';\r\n\r\n  /** Class to be applied when the triangle icon is enabled. */\r\n  var HAS_TRIANGLE_ICON_CLASS = '_md-datepicker-has-triangle-icon';\r\n\r\n  /** Default time in ms to debounce input event by. */\r\n  var DEFAULT_DEBOUNCE_INTERVAL = 500;\r\n\r\n  /**\r\n   * Height of the calendar pane used to check if the pane is going outside the boundary of\r\n   * the viewport. See calendar.scss for how $md-calendar-height is computed; an extra 20px is\r\n   * also added to space the pane away from the exact edge of the screen.\r\n   *\r\n   *  This is computed statically now, but can be changed to be measured if the circumstances\r\n   *  of calendar sizing are changed.\r\n   */\r\n  var CALENDAR_PANE_HEIGHT = 368;\r\n\r\n  /**\r\n   * Width of the calendar pane used to check if the pane is going outside the boundary of\r\n   * the viewport. See calendar.scss for how $md-calendar-width is computed; an extra 20px is\r\n   * also added to space the pane away from the exact edge of the screen.\r\n   *\r\n   *  This is computed statically now, but can be changed to be measured if the circumstances\r\n   *  of calendar sizing are changed.\r\n   */\r\n  var CALENDAR_PANE_WIDTH = 360;\r\n\r\n  /** Used for checking whether the current user agent is on iOS or Android. */\r\n  var IS_MOBILE_REGEX = /ipad|iphone|ipod|android/i;\r\n\r\n  /**\r\n   * Controller for md-datepicker.\r\n   *\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianDatePickerCtrl($scope, $element, $attrs, $window, $mdConstant,\r\n    $mdTheming, $mdUtil, $mdPersianDateLocale, $$mdPersianDateUtil, $$rAF, $filter) {\r\n\r\n    /** @final */\r\n    this.$window = $window;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.$mdConstant = $mdConstant;\r\n\r\n    /* @final */\r\n    this.$mdUtil = $mdUtil;\r\n\r\n    /** @final */\r\n    this.$$rAF = $$rAF;\r\n\r\n    /** @final */\r\n    this.$mdPersianDateLocale = $mdPersianDateLocale;\r\n\r\n    /**\r\n     * The root document element. This is used for attaching a top-level click handler to\r\n     * close the calendar panel when a click outside said panel occurs. We use `documentElement`\r\n     * instead of body because, when scrolling is disabled, some browsers consider the body element\r\n     * to be completely off the screen and propagate events directly to the html element.\r\n     * @type {!angular.JQLite}\r\n     */\r\n    this.documentElement = angular.element(document.documentElement);\r\n\r\n    /** @type {!angular.NgModelController} */\r\n    this.ngModelCtrl = null;\r\n\r\n    /** @type {HTMLInputElement} */\r\n    this.inputElement = $element[0].querySelector('input');\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.ngInputElement = angular.element(this.inputElement);\r\n\r\n    /** @type {HTMLElement} */\r\n    this.inputContainer = $element[0].querySelector('.md-datepicker-input-container');\r\n\r\n    /** @type {HTMLElement} Floating calendar pane. */\r\n    this.calendarPane = $element[0].querySelector('.md-datepicker-calendar-pane');\r\n\r\n    /** @type {HTMLElement} Calendar icon button. */\r\n    this.calendarButton = $element[0].querySelector('.md-datepicker-button');\r\n\r\n    /**\r\n     * Element covering everything but the input in the top of the floating calendar pane.\r\n     * @type {!angular.JQLite}\r\n     */\r\n    this.inputMask = angular.element($element[0].querySelector('.md-datepicker-input-mask-opaque'));\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final {!angular.Attributes} */\r\n    this.$attrs = $attrs;\r\n\r\n    /** @final {!angular.Scope} */\r\n    this.$scope = $scope;\r\n\r\n    /** @type {Date} */\r\n    this.date = null;\r\n\r\n    /** @type {boolean} */\r\n    this.isFocused = false;\r\n\r\n    /** @type {boolean} */\r\n    this.isDisabled;\r\n    this.setDisabled($element[0].disabled || angular.isString($attrs.disabled));\r\n\r\n    /** @type {boolean} Whether the date-picker's calendar pane is open. */\r\n    this.isCalendarOpen = false;\r\n\r\n    /** @type {boolean} Whether the calendar should open when the input is focused. */\r\n    this.openOnFocus = $attrs.hasOwnProperty('mdOpenOnFocus');\r\n\r\n    /** @final */\r\n    this.mdInputContainer = null;\r\n\r\n    /**\r\n     * Element from which the calendar pane was opened. Keep track of this so that we can return\r\n     * focus to it when the pane is closed.\r\n     * @type {HTMLElement}\r\n     */\r\n    this.calendarPaneOpenedFrom = null;\r\n\r\n    /** @type {String} Unique id for the calendar pane. */\r\n    this.calendarPaneId = 'md-date-pane-' + $mdUtil.nextUid();\r\n\r\n    /** Pre-bound click handler is saved so that the event listener can be removed. */\r\n    this.bodyClickHandler = angular.bind(this, this.handleBodyClick);\r\n\r\n    /**\r\n     * Name of the event that will trigger a close. Necessary to sniff the browser, because\r\n     * the resize event doesn't make sense on mobile and can have a negative impact since it\r\n     * triggers whenever the browser zooms in on a focused input.\r\n     */\r\n    this.windowEventName = IS_MOBILE_REGEX.test(\r\n      navigator.userAgent || navigator.vendor || window.opera\r\n    ) ? 'orientationchange' : 'resize';\r\n\r\n    /** Pre-bound close handler so that the event listener can be removed. */\r\n    this.windowEventHandler = $mdUtil.debounce(angular.bind(this, this.closeCalendarPane), 100);\r\n\r\n    /** Pre-bound handler for the window blur event. Allows for it to be removed later. */\r\n    this.windowBlurHandler = angular.bind(this, this.handleWindowBlur);\r\n\r\n    /** The built-in AngularJS date filter. */\r\n    this.ngDateFilter = $filter('date');\r\n\r\n    /** @type {Number} Extra margin for the left side of the floating calendar pane. */\r\n    this.leftMargin = 20;\r\n\r\n    /** @type {Number} Extra margin for the top of the floating calendar. Gets determined on the first open. */\r\n    this.topMargin = null;\r\n\r\n    // Unless the user specifies so, the datepicker should not be a tab stop.\r\n    // This is necessary because ngAria might add a tabindex to anything with an ng-model\r\n    // (based on whether or not the user has turned that particular feature on/off).\r\n    if ($attrs.tabindex) {\r\n      this.ngInputElement.attr('tabindex', $attrs.tabindex);\r\n      $attrs.$set('tabindex', null);\r\n    } else {\r\n      $attrs.$set('tabindex', '-1');\r\n    }\r\n\r\n    $attrs.$set('aria-owns', this.calendarPaneId);\r\n\r\n    $mdTheming($element);\r\n    $mdTheming(angular.element(this.calendarPane));\r\n\r\n    var self = this;\r\n\r\n    $scope.$on('$destroy', function() {\r\n      self.detachCalendarPane();\r\n    });\r\n\r\n    if ($attrs.mdIsOpen) {\r\n      $scope.$watch('ctrl.isOpen', function(shouldBeOpen) {\r\n        if (shouldBeOpen) {\r\n          self.openCalendarPane({\r\n            target: self.inputElement\r\n          });\r\n        } else {\r\n          self.closeCalendarPane();\r\n        }\r\n      });\r\n    }\r\n\r\n    // For AngularJS 1.4 and older, where there are no lifecycle hooks but bindings are pre-assigned,\r\n    // manually call the $onInit hook.\r\n    if (angular.version.major === 1 && angular.version.minor <= 4) {\r\n      this.$onInit();\r\n    }\r\n\r\n  }\r\n\r\n  /**\r\n   * AngularJS Lifecycle hook for newer AngularJS versions.\r\n   * Bindings are not guaranteed to have been assigned in the controller, but they are in the $onInit hook.\r\n   */\r\n  PersianDatePickerCtrl.prototype.$onInit = function() {\r\n\r\n    /**\r\n     * Holds locale-specific formatters, parsers, labels etc. Allows\r\n     * the user to override specific ones from the $mdPersianDateLocale provider.\r\n     * @type {!Object}\r\n     */\r\n    this.locale = this.dateLocale ? angular.extend({}, this.$mdPersianDateLocale, this.dateLocale) : this.$mdPersianDateLocale;\r\n\r\n    this.installPropertyInterceptors();\r\n    this.attachChangeListeners();\r\n    this.attachInteractionListeners();\r\n  };\r\n\r\n  /**\r\n   * Sets up the controller's reference to ngModelController and\r\n   * applies AngularJS's `input[type=\""date\""]` directive.\r\n   * @param {!angular.NgModelController} ngModelCtrl Instance of the ngModel controller.\r\n   * @param {Object} mdInputContainer Instance of the mdInputContainer controller.\r\n   * @param {Object} inputDirective Config for AngularJS's `input` directive.\r\n   */\r\n  PersianDatePickerCtrl.prototype.configureNgModel = function(ngModelCtrl, mdInputContainer, inputDirective) {\r\n    this.ngModelCtrl = ngModelCtrl;\r\n    this.mdInputContainer = mdInputContainer;\r\n\r\n    // The input needs to be [type=\""date\""] in order to be picked up by AngularJS.\r\n    this.$attrs.$set('type', 'date');\r\n\r\n    // Invoke the `input` directive link function, adding a stub for the element.\r\n    // This allows us to re-use AngularJS's logic for setting the timezone via ng-model-options.\r\n    // It works by calling the link function directly which then adds the proper `$parsers` and\r\n    // `$formatters` to the ngModel controller.\r\n    inputDirective[0].link.pre(this.$scope, {\r\n      on: angular.noop,\r\n      val: angular.noop,\r\n      0: {}\r\n    }, this.$attrs, [ngModelCtrl]);\r\n\r\n    var self = this;\r\n\r\n    // Responds to external changes to the model value.\r\n    self.ngModelCtrl.$formatters.push(function(value) {\r\n      var parsedValue = angular.isDefined(value) ? Date.parse(value) : null;\r\n\r\n      // `parsedValue` is the time since epoch if valid or `NaN` if invalid.\r\n      if (!isNaN(parsedValue) && angular.isNumber(parsedValue)) {\r\n        value = new Date(parsedValue);\r\n      }\r\n\r\n      if (value && !(value instanceof Date)) {\r\n        throw Error(\r\n          'The ng-model for md-datepicker must be a Date instance or a value ' +\r\n          'that can be parsed into a date. Currently the model is of type: ' + typeof value\r\n        );\r\n      }\r\n\r\n      self.onExternalChange(value);\r\n\r\n      return value;\r\n    });\r\n\r\n    // Responds to external error state changes (e.g. ng-required based on another input).\r\n    ngModelCtrl.$viewChangeListeners.unshift(angular.bind(this, this.updateErrorState));\r\n\r\n    // Forwards any events from the input to the root element. This is necessary to get `updateOn`\r\n    // working for events that don't bubble (e.g. 'blur') since AngularJS binds the handlers to\r\n    // the `<md-persian-datepicker>`.\r\n    var updateOn = self.$mdUtil.getModelOption(ngModelCtrl, 'updateOn');\r\n\r\n    if (updateOn) {\r\n      this.ngInputElement.on(\r\n        updateOn,\r\n        angular.bind(this.$element, this.$element.triggerHandler, updateOn)\r\n      );\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Attach event listeners for both the text input and the md-persian-calendar.\r\n   * Events are used instead of ng-model so that updates don't infinitely update the other\r\n   * on a change. This should also be more performant than using a $watch.\r\n   */\r\n  PersianDatePickerCtrl.prototype.attachChangeListeners = function() {\r\n    var self = this;\r\n\r\n    self.$scope.$on('md-calendar-change', function(event, date) {\r\n      self.setModelValue(date);\r\n      self.onExternalChange(date);\r\n      self.closeCalendarPane();\r\n    });\r\n\r\n    self.ngInputElement.on('input', angular.bind(self, self.resizeInputElement));\r\n\r\n    var debounceInterval = angular.isDefined(this.debounceInterval) ?\r\n        this.debounceInterval : DEFAULT_DEBOUNCE_INTERVAL;\r\n    self.ngInputElement.on('input', self.$mdUtil.debounce(self.handleInputEvent,\r\n        debounceInterval, self));\r\n  };\r\n\r\n  /** Attach event listeners for user interaction. */\r\n  PersianDatePickerCtrl.prototype.attachInteractionListeners = function() {\r\n    var self = this;\r\n    var $scope = this.$scope;\r\n    var keyCodes = this.$mdConstant.KEY_CODE;\r\n\r\n    // Add event listener through angular so that we can triggerHandler in unit tests.\r\n    self.ngInputElement.on('keydown', function(event) {\r\n      if (event.altKey && event.keyCode == keyCodes.DOWN_ARROW) {\r\n        self.openCalendarPane(event);\r\n        $scope.$digest();\r\n      }\r\n    });\r\n\r\n    if (self.openOnFocus) {\r\n      self.ngInputElement.on('focus', angular.bind(self, self.openCalendarPane));\r\n      angular.element(self.$window).on('blur', self.windowBlurHandler);\r\n\r\n      $scope.$on('$destroy', function() {\r\n        angular.element(self.$window).off('blur', self.windowBlurHandler);\r\n      });\r\n    }\r\n\r\n    $scope.$on('md-calendar-close', function() {\r\n      self.closeCalendarPane();\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Capture properties set to the date-picker and imperitively handle internal changes.\r\n   * This is done to avoid setting up additional $watches.\r\n   */\r\n  PersianDatePickerCtrl.prototype.installPropertyInterceptors = function() {\r\n    var self = this;\r\n\r\n    if (this.$attrs.ngDisabled) {\r\n      // The expression is to be evaluated against the directive element's scope and not\r\n      // the directive's isolate scope.\r\n      var scope = this.$scope.$parent;\r\n\r\n      if (scope) {\r\n        scope.$watch(this.$attrs.ngDisabled, function(isDisabled) {\r\n          self.setDisabled(isDisabled);\r\n        });\r\n      }\r\n    }\r\n\r\n    Object.defineProperty(this, 'placeholder', {\r\n      get: function() { return self.inputElement.placeholder; },\r\n      set: function(value) { self.inputElement.placeholder = value || ''; }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Sets whether the date-picker is disabled.\r\n   * @param {boolean} isDisabled\r\n   */\r\n  PersianDatePickerCtrl.prototype.setDisabled = function(isDisabled) {\r\n    this.isDisabled = isDisabled;\r\n    this.inputElement.disabled = isDisabled;\r\n\r\n    if (this.calendarButton) {\r\n      this.calendarButton.disabled = isDisabled;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Sets the custom ngModel.$error flags to be consumed by ngMessages. Flags are:\r\n   *   - mindate: whether the selected date is before the minimum date.\r\n   *   - maxdate: whether the selected flag is after the maximum date.\r\n   *   - filtered: whether the selected date is allowed by the custom filtering function.\r\n   *   - valid: whether the entered text input is a valid date\r\n   *\r\n   * The 'required' flag is handled automatically by ngModel.\r\n   *\r\n   * @param {Date=} opt_date Date to check. If not given, defaults to the datepicker's model value.\r\n   */\r\n  PersianDatePickerCtrl.prototype.updateErrorState = function(opt_date) {\r\n    var date = opt_date || this.date;\r\n\r\n    // Clear any existing errors to get rid of anything that's no longer relevant.\r\n    this.clearErrorState();\r\n\r\n    if (this.dateUtil.isValidDate(date)) {\r\n      // Force all dates to midnight in order to ignore the time portion.\r\n      date = this.dateUtil.createDateAtMidnight(date);\r\n\r\n      if (this.dateUtil.isValidDate(this.minDate)) {\r\n        var minDate = this.dateUtil.createDateAtMidnight(this.minDate);\r\n        this.ngModelCtrl.$setValidity('mindate', date >= minDate);\r\n      }\r\n\r\n      if (this.dateUtil.isValidDate(this.maxDate)) {\r\n        var maxDate = this.dateUtil.createDateAtMidnight(this.maxDate);\r\n        this.ngModelCtrl.$setValidity('maxdate', date <= maxDate);\r\n      }\r\n\r\n      if (angular.isFunction(this.dateFilter)) {\r\n        this.ngModelCtrl.$setValidity('filtered', this.dateFilter(date));\r\n      }\r\n    } else {\r\n      // The date is seen as \""not a valid date\"" if there is *something* set\r\n      // (i.e.., not null or undefined), but that something isn't a valid date.\r\n      this.ngModelCtrl.$setValidity('valid', date == null);\r\n    }\r\n\r\n    angular.element(this.inputContainer).toggleClass(INVALID_CLASS, !this.ngModelCtrl.$valid);\r\n  };\r\n\r\n  /** Clears any error flags set by `updateErrorState`. */\r\n  PersianDatePickerCtrl.prototype.clearErrorState = function() {\r\n    this.inputContainer.classList.remove(INVALID_CLASS);\r\n    ['mindate', 'maxdate', 'filtered', 'valid'].forEach(function(field) {\r\n      this.ngModelCtrl.$setValidity(field, true);\r\n    }, this);\r\n  };\r\n\r\n  /** Resizes the input element based on the size of its content. */\r\n  PersianDatePickerCtrl.prototype.resizeInputElement = function() {\r\n    this.inputElement.size = this.inputElement.value.length + EXTRA_INPUT_SIZE;\r\n  };\r\n\r\n  /**\r\n   * Sets the model value if the user input is a valid date.\r\n   * Adds an invalid class to the input element if not.\r\n   */\r\n  PersianDatePickerCtrl.prototype.handleInputEvent = function() {\r\n    var inputString = this.inputElement.value;\r\n    var parsedDate = inputString ? this.locale.parseDate(inputString) : null;\r\n    this.dateUtil.setDateTimeToMidnight(parsedDate);\r\n\r\n    // An input string is valid if it is either empty (representing no date)\r\n    // or if it parses to a valid date that the user is allowed to select.\r\n    var isValidInput = inputString == '' || (\r\n      this.dateUtil.isValidDate(parsedDate) &&\r\n      this.locale.isDateComplete(inputString) &&\r\n      this.isDateEnabled(parsedDate)\r\n    );\r\n\r\n    // The datepicker's model is only updated when there is a valid input.\r\n    if (isValidInput) {\r\n      this.setModelValue(parsedDate);\r\n      this.date = parsedDate;\r\n    }\r\n\r\n    this.updateErrorState(parsedDate);\r\n  };\r\n\r\n  /**\r\n   * Check whether date is in range and enabled\r\n   * @param {Date=} opt_date\r\n   * @return {boolean} Whether the date is enabled.\r\n   */\r\n  PersianDatePickerCtrl.prototype.isDateEnabled = function(opt_date) {\r\n    return this.dateUtil.isDateWithinRange(opt_date, this.minDate, this.maxDate) &&\r\n          (!angular.isFunction(this.dateFilter) || this.dateFilter(opt_date));\r\n  };\r\n\r\n  /** Position and attach the floating calendar to the document. */\r\n  PersianDatePickerCtrl.prototype.attachCalendarPane = function() {\r\n    var calendarPane = this.calendarPane;\r\n    var body = document.body;\r\n\r\n    calendarPane.style.transform = '';\r\n    this.$element.addClass(OPEN_CLASS);\r\n    this.mdInputContainer && this.mdInputContainer.element.addClass(OPEN_CLASS);\r\n    angular.element(body).addClass('md-datepicker-is-showing');\r\n\r\n    var elementRect = this.inputContainer.getBoundingClientRect();\r\n    var bodyRect = body.getBoundingClientRect();\r\n\r\n    if (!this.topMargin || this.topMargin < 0) {\r\n      this.topMargin = (this.inputMask.parent().prop('clientHeight') - this.ngInputElement.prop('clientHeight')) / 2;\r\n    }\r\n\r\n    // Check to see if the calendar pane would go off the screen. If so, adjust position\r\n    // accordingly to keep it within the viewport.\r\n    var paneTop = elementRect.top - bodyRect.top - this.topMargin;\r\n    var paneLeft = elementRect.left - bodyRect.left - this.leftMargin;\r\n\r\n    // If ng-material has disabled body scrolling (for example, if a dialog is open),\r\n    // then it's possible that the already-scrolled body has a negative top/left. In this case,\r\n    // we want to treat the \""real\"" top as (0 - bodyRect.top). In a normal scrolling situation,\r\n    // though, the top of the viewport should just be the body's scroll position.\r\n    var viewportTop = (bodyRect.top < 0 && document.body.scrollTop == 0) ?\r\n        -bodyRect.top :\r\n        document.body.scrollTop;\r\n\r\n    var viewportLeft = (bodyRect.left < 0 && document.body.scrollLeft == 0) ?\r\n        -bodyRect.left :\r\n        document.body.scrollLeft;\r\n\r\n    var viewportBottom = viewportTop + this.$window.innerHeight;\r\n    var viewportRight = viewportLeft + this.$window.innerWidth;\r\n\r\n    // Creates an overlay with a hole the same size as element. We remove a pixel or two\r\n    // on each end to make it overlap slightly. The overlay's background is added in\r\n    // the theme in the form of a box-shadow with a huge spread.\r\n    this.inputMask.css({\r\n      position: 'absolute',\r\n      left: this.leftMargin + 'px',\r\n      top: this.topMargin + 'px',\r\n      width: (elementRect.width - 1) + 'px',\r\n      height: (elementRect.height - 2) + 'px'\r\n    });\r\n\r\n    // If the right edge of the pane would be off the screen and shifting it left by the\r\n    // difference would not go past the left edge of the screen. If the calendar pane is too\r\n    // big to fit on the screen at all, move it to the left of the screen and scale the entire\r\n    // element down to fit.\r\n    if (paneLeft + CALENDAR_PANE_WIDTH > viewportRight) {\r\n      if (viewportRight - CALENDAR_PANE_WIDTH > 0) {\r\n        paneLeft = viewportRight - CALENDAR_PANE_WIDTH;\r\n      } else {\r\n        paneLeft = viewportLeft;\r\n        var scale = this.$window.innerWidth / CALENDAR_PANE_WIDTH;\r\n        calendarPane.style.transform = 'scale(' + scale + ')';\r\n      }\r\n\r\n      calendarPane.classList.add('md-datepicker-pos-adjusted');\r\n    }\r\n\r\n    // If the bottom edge of the pane would be off the screen and shifting it up by the\r\n    // difference would not go past the top edge of the screen.\r\n    if (paneTop + CALENDAR_PANE_HEIGHT > viewportBottom &&\r\n        viewportBottom - CALENDAR_PANE_HEIGHT > viewportTop) {\r\n      paneTop = viewportBottom - CALENDAR_PANE_HEIGHT;\r\n      calendarPane.classList.add('md-datepicker-pos-adjusted');\r\n    }\r\n\r\n    calendarPane.style.left = paneLeft + 'px';\r\n    calendarPane.style.top = paneTop + 'px';\r\n    document.body.appendChild(calendarPane);\r\n\r\n    // Add CSS class after one frame to trigger open animation.\r\n    this.$$rAF(function() {\r\n      calendarPane.classList.add('md-pane-open');\r\n    });\r\n  };\r\n\r\n  /** Detach the floating calendar pane from the document. */\r\n  PersianDatePickerCtrl.prototype.detachCalendarPane = function() {\r\n    this.$element.removeClass(OPEN_CLASS);\r\n    this.mdInputContainer && this.mdInputContainer.element.removeClass(OPEN_CLASS);\r\n    angular.element(document.body).removeClass('md-datepicker-is-showing');\r\n    this.calendarPane.classList.remove('md-pane-open');\r\n    this.calendarPane.classList.remove('md-datepicker-pos-adjusted');\r\n\r\n    if (this.isCalendarOpen) {\r\n      this.$mdUtil.enableScrolling();\r\n    }\r\n\r\n    if (this.calendarPane.parentNode) {\r\n      // Use native DOM removal because we do not want any of the\r\n      // angular state of this element to be disposed.\r\n      this.calendarPane.parentNode.removeChild(this.calendarPane);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Open the floating calendar pane.\r\n   * @param {Event} event\r\n   */\r\n  PersianDatePickerCtrl.prototype.openCalendarPane = function(event) {\r\n    if (!this.isCalendarOpen && !this.isDisabled && !this.inputFocusedOnWindowBlur) {\r\n      this.isCalendarOpen = this.isOpen = true;\r\n      this.calendarPaneOpenedFrom = event.target;\r\n\r\n      // Because the calendar pane is attached directly to the body, it is possible that the\r\n      // rest of the component (input, etc) is in a different scrolling container, such as\r\n      // an md-content. This means that, if the container is scrolled, the pane would remain\r\n      // stationary. To remedy this, we disable scrolling while the calendar pane is open, which\r\n      // also matches the native behavior for things like `<select>` on Mac and Windows.\r\n      this.$mdUtil.disableScrollAround(this.calendarPane);\r\n\r\n      this.attachCalendarPane();\r\n      this.focusCalendar();\r\n      this.evalAttr('ngFocus');\r\n\r\n      // Attach click listener inside of a timeout because, if this open call was triggered by a\r\n      // click, we don't want it to be immediately propogated up to the body and handled.\r\n      var self = this;\r\n      this.$mdUtil.nextTick(function() {\r\n        // Use 'touchstart` in addition to click in order to work on iOS Safari, where click\r\n        // events aren't propogated under most circumstances.\r\n        // See http://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\r\n        self.documentElement.on('click touchstart', self.bodyClickHandler);\r\n      }, false);\r\n\r\n      window.addEventListener(this.windowEventName, this.windowEventHandler);\r\n    }\r\n  };\r\n\r\n  /** Close the floating calendar pane. */\r\n  PersianDatePickerCtrl.prototype.closeCalendarPane = function() {\r\n    if (this.isCalendarOpen) {\r\n      var self = this;\r\n\r\n      self.detachCalendarPane();\r\n      self.ngModelCtrl.$setTouched();\r\n      self.evalAttr('ngBlur');\r\n\r\n      self.documentElement.off('click touchstart', self.bodyClickHandler);\r\n      window.removeEventListener(self.windowEventName, self.windowEventHandler);\r\n\r\n      self.calendarPaneOpenedFrom.focus();\r\n      self.calendarPaneOpenedFrom = null;\r\n\r\n      if (self.openOnFocus) {\r\n        // Ensures that all focus events have fired before resetting\r\n        // the calendar. Prevents the calendar from reopening immediately\r\n        // in IE when md-open-on-focus is set. Also it needs to trigger\r\n        // a digest, in order to prevent issues where the calendar wasn't\r\n        // showing up on the next open.\r\n        self.$mdUtil.nextTick(reset);\r\n      } else {\r\n        reset();\r\n      }\r\n    }\r\n\r\n    function reset(){\r\n      self.isCalendarOpen = self.isOpen = false;\r\n    }\r\n  };\r\n\r\n  /** Gets the controller instance for the calendar in the floating pane. */\r\n  PersianDatePickerCtrl.prototype.getCalendarCtrl = function() {\r\n    return angular.element(this.calendarPane.querySelector('md-persian-calendar')).controller('mdPersianCalendar');\r\n  };\r\n\r\n  /** Focus the calendar in the floating pane. */\r\n  PersianDatePickerCtrl.prototype.focusCalendar = function() {\r\n    // Use a timeout in order to allow the calendar to be rendered, as it is gated behind an ng-if.\r\n    var self = this;\r\n    this.$mdUtil.nextTick(function() {\r\n      self.getCalendarCtrl().focus();\r\n    }, false);\r\n  };\r\n\r\n  /**\r\n   * Sets whether the input is currently focused.\r\n   * @param {boolean} isFocused\r\n   */\r\n  PersianDatePickerCtrl.prototype.setFocused = function(isFocused) {\r\n    if (!isFocused) {\r\n      this.ngModelCtrl.$setTouched();\r\n    }\r\n\r\n    // The ng* expressions shouldn't be evaluated when mdOpenOnFocus is on,\r\n    // because they also get called when the calendar is opened/closed.\r\n    if (!this.openOnFocus) {\r\n      this.evalAttr(isFocused ? 'ngFocus' : 'ngBlur');\r\n    }\r\n\r\n    this.isFocused = isFocused;\r\n  };\r\n\r\n  /**\r\n   * Handles a click on the document body when the floating calendar pane is open.\r\n   * Closes the floating calendar pane if the click is not inside of it.\r\n   * @param {MouseEvent} event\r\n   */\r\n  PersianDatePickerCtrl.prototype.handleBodyClick = function(event) {\r\n    if (this.isCalendarOpen) {\r\n      var isInCalendar = this.$mdUtil.getClosest(event.target, 'md-persian-calendar');\r\n\r\n      if (!isInCalendar) {\r\n        this.closeCalendarPane();\r\n      }\r\n\r\n      this.$scope.$digest();\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Handles the event when the user navigates away from the current tab. Keeps track of\r\n   * whether the input was focused when the event happened, in order to prevent the calendar\r\n   * from re-opening.\r\n   */\r\n  PersianDatePickerCtrl.prototype.handleWindowBlur = function() {\r\n    this.inputFocusedOnWindowBlur = document.activeElement === this.inputElement;\r\n  };\r\n\r\n  /**\r\n   * Evaluates an attribute expression against the parent scope.\r\n   * @param {String} attr Name of the attribute to be evaluated.\r\n   */\r\n  PersianDatePickerCtrl.prototype.evalAttr = function(attr) {\r\n    if (this.$attrs[attr]) {\r\n      this.$scope.$parent.$eval(this.$attrs[attr]);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Sets the ng-model value by first converting the date object into a strng. Converting it\r\n   * is necessary, in order to pass AngularJS's `input[type=\""date\""]` validations. AngularJS turns\r\n   * the value into a Date object afterwards, before setting it on the model.\r\n   * @param {Date=} value Date to be set as the model value.\r\n   */\r\n  PersianDatePickerCtrl.prototype.setModelValue = function(value) {\r\n    var timezone = this.$mdUtil.getModelOption(this.ngModelCtrl, 'timezone');\r\n    this.ngModelCtrl.$setViewValue(this.ngDateFilter(value, 'yyyy-MM-dd', timezone));\r\n  };\r\n\r\n  /**\r\n   * Updates the datepicker when a model change occurred externally.\r\n   * @param {Date=} value Value that was set to the model.\r\n   */\r\n  PersianDatePickerCtrl.prototype.onExternalChange = function(value) {\r\n    var timezone = this.$mdUtil.getModelOption(this.ngModelCtrl, 'timezone');\r\n\r\n    this.date = value;\r\n    this.inputElement.value = this.locale.formatDate(value, timezone);\r\n    this.mdInputContainer && this.mdInputContainer.setHasValue(!!value);\r\n    this.resizeInputElement();\r\n    this.updateErrorState();\r\n  };\r\n})();\r\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n(function() {\r\n    'use strict';\r\n\r\n    /**\r\n     * Utility for performing date calculations to facilitate operation of the calendar and\r\n     * datepicker.\r\n     */\r\n    angular.module('angular-material-persian-datepicker').factory('$$mdPersianDateUtil', function() {\r\n        return {\r\n            getFirstDateOfMonth: getFirstDateOfMonth,\r\n            getNumberOfDaysInMonth: getNumberOfDaysInMonth,\r\n            getDateInNextMonth: getDateInNextMonth,\r\n            getDateInPreviousMonth: getDateInPreviousMonth,\r\n            isInNextMonth: isInNextMonth,\r\n            isInPreviousMonth: isInPreviousMonth,\r\n            getDateMidpoint: getDateMidpoint,\r\n            isSameMonthAndYear: isSameMonthAndYear,\r\n            getWeekOfMonth: getWeekOfMonth,\r\n            incrementDays: incrementDays,\r\n            incrementMonths: incrementMonths,\r\n            getLastDateOfMonth: getLastDateOfMonth,\r\n            isSameDay: isSameDay,\r\n            getMonthDistance: getMonthDistance,\r\n            isValidDate: isValidDate,\r\n            setDateTimeToMidnight: setDateTimeToMidnight,\r\n            createDateAtMidnight: createDateAtMidnight,\r\n            isDateWithinRange: isDateWithinRange,\r\n            incrementYears: incrementYears,\r\n            getYearDistance: getYearDistance,\r\n            clampDate: clampDate,\r\n            getTimestampFromNode: getTimestampFromNode,\r\n            isMonthWithinRange: isMonthWithinRange\r\n        };\r\n\r\n        /**\r\n         * Gets the first day of the month for the given date's month.\r\n         * @param {Date} date\r\n         * @returns {Date}\r\n         */\r\n        function getFirstDateOfMonth(date) {\r\n            return moment(date).startOf('jMonth').toDate();\r\n        }\r\n\r\n        /**\r\n         * Gets the number of days in the month for the given date's month.\r\n         * @param date\r\n         * @returns {number}\r\n         */\r\n        function getNumberOfDaysInMonth(date) {\r\n            var pd = moment(date);\r\n            return moment.jDaysInMonth(pd.jYear(), pd.jMonth());\r\n        }\r\n\r\n        /**\r\n         * Get an arbitrary date in the month after the given date's month.\r\n         * @param date\r\n         * @returns {Date}\r\n         */\r\n        function getDateInNextMonth(date) {\r\n            var pd = moment(date);\r\n            return pd.add(1, 'jMonth').toDate();\r\n        }\r\n\r\n        /**\r\n         * Get an arbitrary date in the month before the given date's month.\r\n         * @param date\r\n         * @returns {Date}\r\n         */\r\n        function getDateInPreviousMonth(date) {\r\n            var pd = moment(date);\r\n            return pd.add(-1, 'jMonth').toDate();\r\n        }\r\n\r\n        /**\r\n         * Gets whether two dates have the same month and year.\r\n         * @param {Date} d1\r\n         * @param {Date} d2\r\n         * @returns {boolean}\r\n         */\r\n        function isSameMonthAndYear(d1, d2) {\r\n            var pd1 = moment(d1);\r\n            var pd2 = moment(d2);\r\n            return pd1.jYear() === pd2.jYear() && pd1.jMonth() === pd2.jMonth();\r\n        }\r\n\r\n        /**\r\n         * Gets whether two dates are the same day (not not necesarily the same time).\r\n         * @param {Date} d1\r\n         * @param {Date} d2\r\n         * @returns {boolean}\r\n         */\r\n        function isSameDay(d1, d2) {\r\n            var pd1 = moment(d1);\r\n            var pd2 = moment(d2);\r\n            return pd1.jYear() === pd2.jYear() && pd1.jMonth() === pd2.jMonth() && pd1.jDate() == pd2.jDate();\r\n        }\r\n\r\n        /**\r\n         * Gets whether a date is in the month immediately after some date.\r\n         * @param {Date} startDate The date from which to compare.\r\n         * @param {Date} endDate The date to check.\r\n         * @returns {boolean}\r\n         */\r\n        function isInNextMonth(startDate, endDate) {\r\n            var nextMonth = getDateInNextMonth(startDate);\r\n            return isSameMonthAndYear(nextMonth, endDate);\r\n        }\r\n\r\n        /**\r\n         * Gets whether a date is in the month immediately before some date.\r\n         * @param {Date} startDate The date from which to compare.\r\n         * @param {Date} endDate The date to check.\r\n         * @returns {boolean}\r\n         */\r\n        function isInPreviousMonth(startDate, endDate) {\r\n            var previousMonth = getDateInPreviousMonth(startDate);\r\n            return isSameMonthAndYear(endDate, previousMonth);\r\n        }\r\n\r\n        /**\r\n         * Gets the midpoint between two dates.\r\n         * @param {Date} d1\r\n         * @param {Date} d2\r\n         * @returns {Date}\r\n         */\r\n        function getDateMidpoint(d1, d2) {\r\n            return createDateAtMidnight((d1.getTime() + d2.getTime()) / 2);\r\n        }\r\n\r\n        /**\r\n         * Gets the week of the month that a given date occurs in.\r\n         * @param {Date} date\r\n         * @returns {number} Index of the week of the month (zero-based).\r\n         */\r\n        function getWeekOfMonth(date) {\r\n            var firstDayOfMonth = getFirstDateOfMonth(date);\r\n            var pfirstDayOfMonth = moment(firstDayOfMonth);\r\n            var pd = moment(date);\r\n            return Math.floor((pfirstDayOfMonth.day() + pd.jDate() - 1) / 7);\r\n        }\r\n\r\n        /**\r\n         * Gets a new date incremented by the given number of days. Number of days can be negative.\r\n         * @param {Date} date\r\n         * @param {number} numberOfDays\r\n         * @returns {Date}\r\n         */\r\n        function incrementDays(date, numberOfDays) {\r\n            return moment(date).add(numberOfDays, 'day').toDate();\r\n        }\r\n\r\n        /**\r\n         * Gets a new date incremented by the given number of months. Number of months can be negative.\r\n         * If the date of the given month does not match the target month, the date will be set to the\r\n         * last day of the month.\r\n         * @param {Date} date\r\n         * @param {number} numberOfMonths\r\n         * @returns {Date}\r\n         */\r\n        function incrementMonths(date, numberOfMonths) {\r\n            return moment(date).add(numberOfMonths, 'jMonth').toDate();\r\n        }\r\n\r\n        /**\r\n         * Get the integer distance between two months. This *only* considers the month and year\r\n         * portion of the Date instances.\r\n         *\r\n         * @param {Date} start\r\n         * @param {Date} end\r\n         * @returns {number} Number of months between `start` and `end`. If `end` is before `start`\r\n         *     chronologically, this number will be negative.\r\n         */\r\n        function getMonthDistance(start, end) {\r\n            var pstart = moment(start);\r\n            var pend = moment(end);\r\n            return (12 * (pend.jYear() - pstart.jYear())) + (pend.jMonth() - pstart.jMonth());\r\n        }\r\n\r\n        /**\r\n         * Gets the last day of the month for the given date.\r\n         * @param {Date} date\r\n         * @returns {Date}\r\n         */\r\n        function getLastDateOfMonth(date) {\r\n            return moment(date).endOf('jMonth');\r\n        }\r\n\r\n        /**\r\n         * Checks whether a date is valid.\r\n         * @param {Date} date\r\n         * @return {boolean} Whether the date is a valid Date.\r\n         */\r\n        function isValidDate(date) {\r\n            return date && date.getTime && !isNaN(date.getTime());\r\n        }\r\n\r\n        /**\r\n         * Sets a date's time to midnight.\r\n         * @param {Date} date\r\n         */\r\n        function setDateTimeToMidnight(date) {\r\n            if (isValidDate(date)) {\r\n                date.setHours(0, 0, 0, 0);\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Creates a date with the time set to midnight.\r\n         * Drop-in replacement for two forms of the Date constructor:\r\n         * 1. No argument for Date representing now.\r\n         * 2. Single-argument value representing number of seconds since Unix Epoch\r\n         * or a Date object.\r\n         * @param {number|Date=} opt_value\r\n         * @return {Date} New date with time set to midnight.\r\n         */\r\n        function createDateAtMidnight(opt_value) {\r\n            var date;\r\n            if (angular.isUndefined(opt_value)) {\r\n                date = new Date();\r\n            } else {\r\n                date = new Date(opt_value);\r\n            }\r\n            setDateTimeToMidnight(date);\r\n            return date;\r\n        }\r\n\r\n        /**\r\n         * Checks if a date is within a min and max range, ignoring the time component.\r\n         * If minDate or maxDate are not dates, they are ignored.\r\n         * @param {Date} date\r\n         * @param {Date} minDate\r\n         * @param {Date} maxDate\r\n         */\r\n        function isDateWithinRange(date, minDate, maxDate) {\r\n            var dateAtMidnight = createDateAtMidnight(date);\r\n            var minDateAtMidnight = isValidDate(minDate) ? createDateAtMidnight(minDate) : null;\r\n            var maxDateAtMidnight = isValidDate(maxDate) ? createDateAtMidnight(maxDate) : null;\r\n            return (!minDateAtMidnight || minDateAtMidnight <= dateAtMidnight) &&\r\n                (!maxDateAtMidnight || maxDateAtMidnight >= dateAtMidnight);\r\n        }\r\n\r\n        /**\r\n         * Gets a new date incremented by the given number of years. Number of years can be negative.\r\n         * See `incrementMonths` for notes on overflow for specific dates.\r\n         * @param {Date} date\r\n         * @param {number} numberOfYears\r\n         * @returns {Date}\r\n         */\r\n        function incrementYears(date, numberOfYears) {\r\n            return incrementMonths(date, numberOfYears * 12);\r\n        }\r\n\r\n        /**\r\n         * Get the integer distance between two years. This *only* considers the year portion of the\r\n         * Date instances.\r\n         *\r\n         * @param {Date} start\r\n         * @param {Date} end\r\n         * @returns {number} Number of months between `start` and `end`. If `end` is before `start`\r\n         *     chronologically, this number will be negative.\r\n         */\r\n        function getYearDistance(start, end) {\r\n            var pstart = moment(start);\r\n            var pend = moment(end);\r\n            return pend.jYear() - pstart.jYear();\r\n        }\r\n\r\n        /**\r\n         * Clamps a date between a minimum and a maximum date.\r\n         * @param {Date} date Date to be clamped\r\n         * @param {Date=} minDate Minimum date\r\n         * @param {Date=} maxDate Maximum date\r\n         * @return {Date}\r\n         */\r\n        function clampDate(date, minDate, maxDate) {\r\n            var boundDate = date;\r\n            if (minDate && date < minDate) {\r\n                boundDate = new Date(minDate.getTime());\r\n            }\r\n            if (maxDate && date > maxDate) {\r\n                boundDate = new Date(maxDate.getTime());\r\n            }\r\n            return boundDate;\r\n        }\r\n\r\n        /**\r\n         * Extracts and parses the timestamp from a DOM node.\r\n         * @param  {HTMLElement} node Node from which the timestamp will be extracted.\r\n         * @return {number} Time since epoch.\r\n         */\r\n        function getTimestampFromNode(node) {\r\n            if (node && node.hasAttribute('data-timestamp')) {\r\n                return Number(node.getAttribute('data-timestamp'));\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Checks if a month is within a min and max range, ignoring the date and time components.\r\n         * If minDate or maxDate are not dates, they are ignored.\r\n         * @param {Date} date\r\n         * @param {Date} minDate\r\n         * @param {Date} maxDate\r\n         */\r\n        function isMonthWithinRange(date, minDate, maxDate) {\r\n            var pminDate = minDate ? moment(minDate) : null;\r\n            var pmaxDate = maxDate ? moment(maxDate) : null;\r\n\r\n            var pmonth = moment(date).jMonth();\r\n            var pyear = moment(date).jYear();\r\n\r\n            return (!pminDate || pminDate.jYear() < pyear || pminDate.jMonth() <= pmonth) &&\r\n                (!pmaxDate || pmaxDate.jYear() > pyear || pmaxDate.jMonth() >= pmonth);\r\n        }\r\n    });\r\n})();\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(11);\nif(typeof content === 'string') content = [[module.i, content, '']];\n// Prepare cssTransformation\nvar transform;\n\nvar options = {}\noptions.transform = transform\n// add the styles to the DOM\nvar update = __webpack_require__(13)(content, options);\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(false) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../node_modules/css-loader/index.js!./datePicker.css\"", function() {\n\t\t\tvar newContent = require(\""!!../node_modules/css-loader/index.js!./datePicker.css\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(12)(undefined);\n// imports\n\n\n// module\nexports.push([module.i, \""md-persian-calendar {\\r\\n  font-size: 13px;\\r\\n  user-select: none;\\r\\n}\\r\\n\\r\\nmd-persian-calendar-month .md-calendar-month-label:not(.md-calendar-month-label-disabled) {\\r\\n  cursor: pointer;\\r\\n}\\r\\n\\r\\nmd-persian-datepicker {\\r\\n  white-space: nowrap;\\r\\n  overflow: hidden;\\r\\n  vertical-align: middle;\\r\\n}\\r\\n\\r\\n._md-datepicker-floating-label > md-persian-datepicker {\\r\\n  overflow: visible;\\r\\n}\\r\\n\\r\\n._md-datepicker-floating-label > md-persian-datepicker .md-datepicker-input-container {\\r\\n  border: none;\\r\\n}\\r\\n\\r\\n._md-datepicker-floating-label > md-persian-datepicker {\\r\\n  overflow: visible; \\r\\n}\\r\\n._md-datepicker-floating-label > md-persian-datepicker .md-datepicker-input-container {\\r\\n    border: none; \\r\\n}\\r\\n._md-datepicker-floating-label > md-persian-datepicker .md-datepicker-button {\\r\\n  float: left;\\r\\n  margin-top: -12px;\\r\\n  top: 9.5px; \\r\\n}\\r\\n[dir=rtl] ._md-datepicker-floating-label > md-persian-datepicker .md-datepicker-button {\\r\\n  float: right; \\r\\n}\\r\\n._md-datepicker-floating-label .md-input {\\r\\n  float: none; \\r\\n}\\r\\n\\r\\nmd-persian-calendar .md-datepicker-input-mask:focus {\\r\\n  outline: none;\\r\\n}\\r\\n\\r\\nmd-persian-datepicker[disabled] .md-datepicker-input-container {\\r\\n  border-bottom-color: transparent;\\r\\n}\\r\\n\\r\\nmd-persian-datepicker[disabled] .md-datepicker-triangle-button {\\r\\n  display: none;\\r\\n}\\r\\n\"", \""\""]);\n\n// exports\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \""@media \"" + item[2] + \""{\"" + content + \""}\"";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\""\"");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \""string\"")\n\t\t\tmodules = [[null, modules, \""\""]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \""number\"")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \""number\"" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \""(\"" + item[2] + \"") and (\"" + mediaQuery + \"")\"";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \""undefined\"") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(selector) {\n\t\tif (typeof memo[selector] === \""undefined\"") {\n\t\t\tmemo[selector] = fn.call(this, selector);\n\t\t}\n\n\t\treturn memo[selector]\n\t};\n})(function (target) {\n\treturn document.querySelector(target)\n});\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = __webpack_require__(14);\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \""undefined\"" && DEBUG) {\n\t\tif (typeof document !== \""object\"") throw new Error(\""The style-loader cannot be used in a non-browser environment\"");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \""object\"" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton) options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n\tif (!options.insertInto) options.insertInto = \""head\"";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \""bottom\"";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\""Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\"");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \""top\"") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \""bottom\"") {\n\t\ttarget.appendChild(style);\n\t} else {\n\t\tthrow new Error(\""Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\"");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\""style\"");\n\n\toptions.attrs.type = \""text/css\"";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\""link\"");\n\n\toptions.attrs.type = \""text/css\"";\n\toptions.attrs.rel = \""stylesheet\"";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t    result = options.transform(obj.css);\n\n\t    if (result) {\n\t    \t// If transform returns a value, use that instead of the original css.\n\t    \t// This allows running runtime transformations on the css.\n\t    \tobj.css = result;\n\t    } else {\n\t    \t// If the transform function returns a falsy value, don't add this css.\n\t    \t// This allows conditional loading of css\n\t    \treturn function() {\n\t    \t\t// noop\n\t    \t};\n\t    }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \""function\"" &&\n\t\ttypeof URL.createObjectURL === \""function\"" &&\n\t\ttypeof URL.revokeObjectURL === \""function\"" &&\n\t\ttypeof Blob === \""function\"" &&\n\t\ttypeof btoa === \""function\""\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \""\"" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\""media\"", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default.  Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \""\\n/*# sourceMappingURL=data:application/json;base64,\"" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \"" */\"";\n\t}\n\n\tvar blob = new Blob([css], { type: \""text/css\"" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \""fixes\"" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n  // get current location\n  var location = typeof window !== \""undefined\"" && window.location;\n\n  if (!location) {\n    throw new Error(\""fixUrls requires window.location\"");\n  }\n\n\t// blank or null?\n\tif (!css || typeof css !== \""string\"") {\n\t  return css;\n  }\n\n  var baseUrl = location.protocol + \""//\"" + location.host;\n  var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \""/\"");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\(  = Match on the word \""url\"" with any whitespace after it and then a parens\n\t   (  = Start a capturing group\n\t     (?:  = Start a non-capturing group\n\t         [^)(]  = Match anything that isn't a parentheses\n\t         |  = OR\n\t         \\(  = Match a start parentheses\n\t             (?:  = Start another non-capturing groups\n\t                 [^)(]+  = Match anything that isn't a parentheses\n\t                 |  = OR\n\t                 \\(  = Match a start parentheses\n\t                     [^)(]*  = Match anything that isn't a parentheses\n\t                 \\)  = Match a end parentheses\n\t             )  = End Group\n              *\\) = Match anything and then a close parens\n          )  = Close non-capturing group\n          *  = Match anything\n       )  = Close capturing group\n\t \\)  = Match a close parens\n\n\t /gi  = Get all matches, not the first.  Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\""(.*)\""$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(unquotedOrigUrl)) {\n\t\t  return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\""//\"") === 0) {\n\t\t  \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\""/\"") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \""\""); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \""url(\"" + JSON.stringify(newUrl) + \"")\"";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// datePicker.min.js"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9c1ce602f4142b72baa9"",""/**\r\n * @ngdoc module\r\n * @name angular-material-persian-datepicker\r\n * @description Module for the Persian datepicker component.\r\n */\r\n\r\nangular.module('angular-material-persian-datepicker', [\r\n  'material.core',\r\n  'material.components.icon',\r\n  'material.components.virtualRepeat'\r\n]);\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/datePicker.js\n// module id = 1\n// module chunks = 0"",""(function() {\r\n  'use strict';\r\n\r\n  /**\r\n   * @ngdoc directive\r\n   * @name mdPersianCalendar\r\n   * @module angular-material-persian-datepicker\r\n   *\r\n   * @param {Date} ng-model The component's model. Should be a Date object.\r\n   * @param {Date=} md-min-date Expression representing the minimum date.\r\n   * @param {Date=} md-max-date Expression representing the maximum date.\r\n   * @param {(function(Date): boolean)=} md-date-filter Function expecting a date and returning a boolean whether it can be selected or not.\r\n   *\r\n   * @description\r\n   * `<md-persian-calendar>` is a component that renders a calendar that can be used to select a date.\r\n   * It is a part of the `<md-persian-datepicker>` pane, however it can also be used on it's own.\r\n   *\r\n   * @usage\r\n   *\r\n   * <hljs lang=\""html\"">\r\n   *   <md-persian-calendar ng-model=\""birthday\""></md-persian-calendar>\r\n   * </hljs>\r\n   */\r\n  angular.module('angular-material-persian-datepicker')\r\n    .directive('mdPersianCalendar', persianCalendarDirective);\r\n\r\n  // POST RELEASE\r\n  // TODO(jelbourn): Mac Cmd + left / right == Home / End\r\n  // TODO(jelbourn): Refactor month element creation to use cloneNode (performance).\r\n  // TODO(jelbourn): Define virtual scrolling constants (compactness) users can override.\r\n  // TODO(jelbourn): Animated month transition on ng-model change (virtual-repeat)\r\n  // TODO(jelbourn): Scroll snapping (virtual repeat)\r\n  // TODO(jelbourn): Remove superfluous row from short months (virtual-repeat)\r\n  // TODO(jelbourn): Month headers stick to top when scrolling.\r\n  // TODO(jelbourn): Previous month opacity is lowered when partially scrolled out of view.\r\n  // TODO(jelbourn): Support md-persian-calendar standalone on a page (as a tabstop w/ aria-live\r\n  //     announcement and key handling).\r\n  // Read-only calendar (not just date-picker).\r\n\r\n  function persianCalendarDirective() {\r\n    return {\r\n      template: function(tElement, tAttr) {\r\n        // TODO(crisbeto): This is a workaround that allows the calendar to work, without\r\n        // a datepicker, until issue #8585 gets resolved. It can safely be removed\r\n        // afterwards. This ensures that the virtual repeater scrolls to the proper place on load by\r\n        // deferring the execution until the next digest. It's necessary only if the calendar is used\r\n        // without a datepicker, otherwise it's already wrapped in an ngIf.\r\n        var extraAttrs = tAttr.hasOwnProperty('ngIf') ? '' : 'ng-if=\""calendarCtrl.isInitialized\""';\r\n        var template = '' +\r\n          '<div ng-switch=\""calendarCtrl.currentView\"" ' + extraAttrs + '>' +\r\n            '<md-persian-calendar-year ng-switch-when=\""year\""></md-persian-calendar-year>' +\r\n            '<md-persian-calendar-month ng-switch-default></md-persian-calendar-month>' +\r\n          '</div>';\r\n\r\n        return template;\r\n      },\r\n      scope: {\r\n        minDate: '=mdMinDate',\r\n        maxDate: '=mdMaxDate',\r\n        dateFilter: '=mdDateFilter',\r\n        _currentView: '@mdCurrentView'\r\n      },\r\n      require: ['ngModel', 'mdPersianCalendar'],\r\n      controller: PersianCalendarCtrl,\r\n      controllerAs: 'calendarCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var ngModelCtrl = controllers[0];\r\n        var mdCalendarCtrl = controllers[1];\r\n        mdCalendarCtrl.configureNgModel(ngModelCtrl);\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Occasionally the hideVerticalScrollbar method might read an element's\r\n   * width as 0, because it hasn't been laid out yet. This value will be used\r\n   * as a fallback, in order to prevent scenarios where the element's width\r\n   * would otherwise have been set to 0. This value is the \""usual\"" width of a\r\n   * calendar within a floating calendar pane.\r\n   */\r\n  var FALLBACK_WIDTH = 340;\r\n\r\n  /** Next identifier for calendar instance. */\r\n  var nextUniqueId = 0;\r\n\r\n  /**\r\n   * Controller for the mdPersianCalendar component.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarCtrl($element, $scope, $$mdPersianDateUtil, $mdUtil,\r\n    $mdConstant, $mdTheming, $$rAF, $attrs, $mdPersianDateLocale) {\r\n\r\n    $mdTheming($element);\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final {!angular.Scope} */\r\n    this.$scope = $scope;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.$mdUtil = $mdUtil;\r\n\r\n    /** @final */\r\n    this.keyCode = $mdConstant.KEY_CODE;\r\n\r\n    /** @final */\r\n    this.$$rAF = $$rAF;\r\n\r\n    /** @final */\r\n    this.$mdPersianDateLocale = $mdPersianDateLocale;\r\n\r\n    /** @final {Date} */\r\n    this.today = this.dateUtil.createDateAtMidnight();\r\n\r\n    /** @type {!angular.NgModelController} */\r\n    this.ngModelCtrl = null;\r\n\r\n    /** @type {String} Class applied to the selected date cell. */\r\n    this.SELECTED_DATE_CLASS = 'md-calendar-selected-date';\r\n\r\n    /** @type {String} Class applied to the cell for today. */\r\n    this.TODAY_CLASS = 'md-calendar-date-today';\r\n\r\n    /** @type {String} Class applied to the focused cell. */\r\n    this.FOCUSED_DATE_CLASS = 'md-focus';\r\n\r\n    /** @final {number} Unique ID for this calendar instance. */\r\n    this.id = nextUniqueId++;\r\n\r\n    /**\r\n     * The date that is currently focused or showing in the calendar. This will initially be set\r\n     * to the ng-model value if set, otherwise to today. It will be updated as the user navigates\r\n     * to other months. The cell corresponding to the displayDate does not necesarily always have\r\n     * focus in the document (such as for cases when the user is scrolling the calendar).\r\n     * @type {Date}\r\n     */\r\n    this.displayDate = null;\r\n\r\n    /**\r\n     * The selected date. Keep track of this separately from the ng-model value so that we\r\n     * can know, when the ng-model value changes, what the previous value was before it's updated\r\n     * in the component's UI.\r\n     *\r\n     * @type {Date}\r\n     */\r\n    this.selectedDate = null;\r\n\r\n    /**\r\n     * The first date that can be rendered by the calendar. The default is taken\r\n     * from the mdDateLocale provider and is limited by the mdMinDate.\r\n     * @type {Date}\r\n     */\r\n    this.firstRenderableDate = null;\r\n\r\n    /**\r\n     * The last date that can be rendered by the calendar. The default comes\r\n     * from the mdDateLocale provider and is limited by the maxDate.\r\n     * @type {Date}\r\n     */\r\n    this.lastRenderableDate = null;\r\n\r\n    /**\r\n     * Used to toggle initialize the root element in the next digest.\r\n     * @type {Boolean}\r\n     */\r\n    this.isInitialized = false;\r\n\r\n    /**\r\n     * Cache for the  width of the element without a scrollbar. Used to hide the scrollbar later on\r\n     * and to avoid extra reflows when switching between views.\r\n     * @type {Number}\r\n     */\r\n    this.width = 0;\r\n\r\n    /**\r\n     * Caches the width of the scrollbar in order to be used when hiding it and to avoid extra reflows.\r\n     * @type {Number}\r\n     */\r\n    this.scrollbarWidth = 0;\r\n\r\n    // Unless the user specifies so, the calendar should not be a tab stop.\r\n    // This is necessary because ngAria might add a tabindex to anything with an ng-model\r\n    // (based on whether or not the user has turned that particular feature on/off).\r\n    if (!$attrs.tabindex) {\r\n      $element.attr('tabindex', '-1');\r\n    }\r\n\r\n    var boundKeyHandler = angular.bind(this, this.handleKeyEvent);\r\n\r\n\r\n\r\n    // If use the md-persian-calendar directly in the body without datepicker,\r\n    // handleKeyEvent will disable other inputs on the page.\r\n    // So only apply the handleKeyEvent on the body when the md-persian-calendar inside datepicker,\r\n    // otherwise apply on the calendar element only.\r\n\r\n    var handleKeyElement;\r\n    if ($element.parent().hasClass('md-datepicker-calendar')) {\r\n      handleKeyElement = angular.element(document.body);\r\n    } else {\r\n      handleKeyElement = $element;\r\n    }\r\n\r\n    // Bind the keydown handler to the body, in order to handle cases where the focused\r\n    // element gets removed from the DOM and stops propagating click events.\r\n    handleKeyElement.on('keydown', boundKeyHandler);\r\n\r\n    $scope.$on('$destroy', function() {\r\n      handleKeyElement.off('keydown', boundKeyHandler);\r\n    });\r\n\r\n    // For AngularJS 1.4 and older, where there are no lifecycle hooks but bindings are pre-assigned,\r\n    // manually call the $onInit hook.\r\n    if (angular.version.major === 1 && angular.version.minor <= 4) {\r\n      this.$onInit();\r\n    }\r\n\r\n  }\r\n\r\n  /**\r\n   * AngularJS Lifecycle hook for newer AngularJS versions.\r\n   * Bindings are not guaranteed to have been assigned in the controller, but they are in the $onInit hook.\r\n   */\r\n  PersianCalendarCtrl.prototype.$onInit = function() {\r\n\r\n    /**\r\n     * The currently visible calendar view. Note the prefix on the scope value,\r\n     * which is necessary, because the datepicker seems to reset the real one value if the\r\n     * calendar is open, but the value on the datepicker's scope is empty.\r\n     * @type {String}\r\n     */\r\n    this.currentView = this._currentView || 'month';\r\n\r\n    var dateLocale = this.$mdPersianDateLocale;\r\n\r\n    if (this.minDate && this.minDate > dateLocale.firstRenderableDate) {\r\n      this.firstRenderableDate = this.minDate;\r\n    } else {\r\n      this.firstRenderableDate = dateLocale.firstRenderableDate;\r\n    }\r\n\r\n    if (this.maxDate && this.maxDate < dateLocale.lastRenderableDate) {\r\n      this.lastRenderableDate = this.maxDate;\r\n    } else {\r\n      this.lastRenderableDate = dateLocale.lastRenderableDate;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Sets up the controller's reference to ngModelController.\r\n   * @param {!angular.NgModelController} ngModelCtrl\r\n   */\r\n  PersianCalendarCtrl.prototype.configureNgModel = function(ngModelCtrl) {\r\n    var self = this;\r\n\r\n    self.ngModelCtrl = ngModelCtrl;\r\n\r\n    self.$mdUtil.nextTick(function() {\r\n      self.isInitialized = true;\r\n    });\r\n\r\n    ngModelCtrl.$render = function() {\r\n      var value = this.$viewValue;\r\n\r\n      // Notify the child scopes of any changes.\r\n      self.$scope.$broadcast('md-calendar-parent-changed', value);\r\n\r\n      // Set up the selectedDate if it hasn't been already.\r\n      if (!self.selectedDate) {\r\n        self.selectedDate = value;\r\n      }\r\n\r\n      // Also set up the displayDate.\r\n      if (!self.displayDate) {\r\n        self.displayDate = self.selectedDate || self.today;\r\n      }\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Sets the ng-model value for the calendar and emits a change event.\r\n   * @param {Date} date\r\n   */\r\n  PersianCalendarCtrl.prototype.setNgModelValue = function(date) {\r\n    var value = this.dateUtil.createDateAtMidnight(date);\r\n    this.focus(value);\r\n    this.$scope.$emit('md-calendar-change', value);\r\n    this.ngModelCtrl.$setViewValue(value);\r\n    this.ngModelCtrl.$render();\r\n    return value;\r\n  };\r\n\r\n  /**\r\n   * Sets the current view that should be visible in the calendar\r\n   * @param {string} newView View name to be set.\r\n   * @param {number|Date} time Date object or a timestamp for the new display date.\r\n   */\r\n  PersianCalendarCtrl.prototype.setCurrentView = function(newView, time) {\r\n    var self = this;\r\n\r\n    self.$mdUtil.nextTick(function() {\r\n      self.currentView = newView;\r\n\r\n      if (time) {\r\n        self.displayDate = angular.isDate(time) ? time : new Date(time);\r\n      }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Focus the cell corresponding to the given date.\r\n   * @param {Date} date The date to be focused.\r\n   */\r\n  PersianCalendarCtrl.prototype.focus = function(date) {\r\n    if (this.dateUtil.isValidDate(date)) {\r\n      var previousFocus = this.$element[0].querySelector('.md-focus');\r\n      if (previousFocus) {\r\n        previousFocus.classList.remove(this.FOCUSED_DATE_CLASS);\r\n      }\r\n\r\n      var cellId = this.getDateId(date, this.currentView);\r\n      var cell = document.getElementById(cellId);\r\n      if (cell) {\r\n        cell.classList.add(this.FOCUSED_DATE_CLASS);\r\n        cell.focus();\r\n        this.displayDate = date;\r\n      }\r\n    } else {\r\n      var rootElement = this.$element[0].querySelector('[ng-switch]');\r\n\r\n      if (rootElement) {\r\n        rootElement.focus();\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Normalizes the key event into an action name. The action will be broadcast\r\n   * to the child controllers.\r\n   * @param {KeyboardEvent} event\r\n   * @returns {String} The action that should be taken, or null if the key\r\n   * does not match a calendar shortcut.\r\n   */\r\n  PersianCalendarCtrl.prototype.getActionFromKeyEvent = function(event) {\r\n    var keyCode = this.keyCode;\r\n\r\n    switch (event.which) {\r\n      case keyCode.ENTER: return 'select';\r\n\r\n      case keyCode.RIGHT_ARROW: return 'move-right';\r\n      case keyCode.LEFT_ARROW: return 'move-left';\r\n\r\n      // TODO(crisbeto): Might want to reconsider using metaKey, because it maps\r\n      // to the \""Windows\"" key on PC, which opens the start menu or resizes the browser.\r\n      case keyCode.DOWN_ARROW: return event.metaKey ? 'move-page-down' : 'move-row-down';\r\n      case keyCode.UP_ARROW: return event.metaKey ? 'move-page-up' : 'move-row-up';\r\n\r\n      case keyCode.PAGE_DOWN: return 'move-page-down';\r\n      case keyCode.PAGE_UP: return 'move-page-up';\r\n\r\n      case keyCode.HOME: return 'start';\r\n      case keyCode.END: return 'end';\r\n\r\n      default: return null;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Handles a key event in the calendar with the appropriate action. The action will either\r\n   * be to select the focused date or to navigate to focus a new date.\r\n   * @param {KeyboardEvent} event\r\n   */\r\n  PersianCalendarCtrl.prototype.handleKeyEvent = function(event) {\r\n    var self = this;\r\n\r\n    this.$scope.$apply(function() {\r\n      // Capture escape and emit back up so that a wrapping component\r\n      // (such as a date-picker) can decide to close.\r\n      if (event.which == self.keyCode.ESCAPE || event.which == self.keyCode.TAB) {\r\n        self.$scope.$emit('md-calendar-close');\r\n\r\n        if (event.which == self.keyCode.TAB) {\r\n          event.preventDefault();\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      // Broadcast the action that any child controllers should take.\r\n      var action = self.getActionFromKeyEvent(event);\r\n      if (action) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        self.$scope.$broadcast('md-calendar-parent-action', action);\r\n      }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Hides the vertical scrollbar on the calendar scroller of a child controller by\r\n   * setting the width on the calendar scroller and the `overflow: hidden` wrapper\r\n   * around the scroller, and then setting a padding-right on the scroller equal\r\n   * to the width of the browser's scrollbar.\r\n   *\r\n   * This will cause a reflow.\r\n   *\r\n   * @param {object} childCtrl The child controller whose scrollbar should be hidden.\r\n   */\r\n  PersianCalendarCtrl.prototype.hideVerticalScrollbar = function(childCtrl) {\r\n    var self = this;\r\n    var element = childCtrl.$element[0];\r\n    var scrollMask = element.querySelector('.md-calendar-scroll-mask');\r\n\r\n    if (self.width > 0) {\r\n      setWidth();\r\n    } else {\r\n      self.$$rAF(function() {\r\n        var scroller = childCtrl.calendarScroller;\r\n\r\n        self.scrollbarWidth = scroller.offsetWidth - scroller.clientWidth;\r\n        self.width = element.querySelector('table').offsetWidth;\r\n        setWidth();\r\n      });\r\n    }\r\n\r\n    function setWidth() {\r\n      var width = self.width || FALLBACK_WIDTH;\r\n      var scrollbarWidth = self.scrollbarWidth;\r\n      var scroller = childCtrl.calendarScroller;\r\n\r\n      scrollMask.style.width = width + 'px';\r\n      scroller.style.width = (width + scrollbarWidth) + 'px';\r\n      scroller.style.paddingRight = scrollbarWidth + 'px';\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Gets an identifier for a date unique to the calendar instance for internal\r\n   * purposes. Not to be displayed.\r\n   * @param {Date} date The date for which the id is being generated\r\n   * @param {string} namespace Namespace for the id. (month, year etc.)\r\n   * @returns {string}\r\n   */\r\n  PersianCalendarCtrl.prototype.getDateId = function(date, namespace) {\r\n    if (!namespace) {\r\n      throw new Error('A namespace for the date id has to be specified.');\r\n    }\r\n\r\n    // return [\r\n    //   'md',\r\n    //   this.id,\r\n    //   namespace,\r\n    //   date.getFullYear(),\r\n    //   date.getMonth(),\r\n    //   date.getDate()\r\n    // ].join('-');\r\n    var pd = moment(date);\r\n    return [\r\n      'md',\r\n      this.id,\r\n      namespace,\r\n      pd.jYear(),\r\n      pd.jMonth(),\r\n      pd.jDate()\r\n    ].join('-');\r\n  };\r\n\r\n  /**\r\n   * Util to trigger an extra digest on a parent scope, in order to to ensure that\r\n   * any child virtual repeaters have updated. This is necessary, because the virtual\r\n   * repeater doesn't update the $index the first time around since the content isn't\r\n   * in place yet. The case, in which this is an issue, is when the repeater has less\r\n   * than a page of content (e.g. a month or year view has a min or max date).\r\n   */\r\n  PersianCalendarCtrl.prototype.updateVirtualRepeat = function() {\r\n    var scope = this.$scope;\r\n    var virtualRepeatResizeListener = scope.$on('$md-resize-enable', function() {\r\n      if (!scope.$$phase) {\r\n        scope.$apply();\r\n      }\r\n\r\n      virtualRepeatResizeListener();\r\n    });\r\n  };\r\n})();\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/calendar.js"",""(function() {\r\n  'use strict';\r\n\r\n  angular.module('angular-material-persian-datepicker')\r\n    .directive('mdPersianCalendarMonth', persianCalendarDirective);\r\n\r\n  /**\r\n   * Height of one calendar month tbody. This must be made known to the virtual-repeat and is\r\n   * subsequently used for scrolling to specific months.\r\n   */\r\n  var TBODY_HEIGHT = 265;\r\n\r\n  /**\r\n   * Height of a calendar month with a single row. This is needed to calculate the offset for\r\n   * rendering an extra month in virtual-repeat that only contains one row.\r\n   */\r\n  var TBODY_SINGLE_ROW_HEIGHT = 45;\r\n\r\n  /** Private directive that represents a list of months inside the calendar. */\r\n  function persianCalendarDirective() {\r\n    return {\r\n      template:\r\n        '<table aria-hidden=\""true\"" class=\""md-calendar-day-header\""><thead></thead></table>' +\r\n        '<div class=\""md-calendar-scroll-mask\"">' +\r\n        '<md-virtual-repeat-container class=\""md-calendar-scroll-container\"" ' +\r\n              'md-offset-size=\""' + (TBODY_SINGLE_ROW_HEIGHT - TBODY_HEIGHT) + '\"">' +\r\n            '<table role=\""grid\"" tabindex=\""0\"" class=\""md-calendar\"" aria-readonly=\""true\"">' +\r\n              '<tbody ' +\r\n                  'md-persian-calendar-month-body ' +\r\n                  'role=\""rowgroup\"" ' +\r\n                  'md-virtual-repeat=\""i in monthCtrl.items\"" ' +\r\n                  'md-month-offset=\""$index\"" ' +\r\n                  'class=\""md-calendar-month\"" ' +\r\n                  'md-start-index=\""monthCtrl.getSelectedMonthIndex()\"" ' +\r\n                  'md-item-size=\""' + TBODY_HEIGHT + '\"">' +\r\n\r\n                // The <tr> ensures that the <tbody> will always have the\r\n                // proper height, even if it's empty. If it's content is\r\n                // compiled, the <tr> will be overwritten.\r\n                '<tr aria-hidden=\""true\"" md-force-height=\""\\'' + TBODY_HEIGHT + 'px\\'\""></tr>' +\r\n              '</tbody>' +\r\n            '</table>' +\r\n          '</md-virtual-repeat-container>' +\r\n        '</div>',\r\n      require: ['^^mdPersianCalendar', 'mdPersianCalendarMonth'],\r\n      controller: PersianCalendarMonthCtrl,\r\n      controllerAs: 'monthCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var calendarCtrl = controllers[0];\r\n        var monthCtrl = controllers[1];\r\n        monthCtrl.initialize(calendarCtrl);\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Controller for the calendar month component.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarMonthCtrl($element, $scope, $animate, $q,\r\n    $$mdPersianDateUtil, $mdPersianDateLocale) {\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final {!angular.Scope} */\r\n    this.$scope = $scope;\r\n\r\n    /** @final {!angular.$animate} */\r\n    this.$animate = $animate;\r\n\r\n    /** @final {!angular.$q} */\r\n    this.$q = $q;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.dateLocale = $mdPersianDateLocale;\r\n\r\n    /** @final {HTMLElement} */\r\n    this.calendarScroller = $element[0].querySelector('.md-virtual-repeat-scroller');\r\n\r\n    /** @type {boolean} */\r\n    this.isInitialized = false;\r\n\r\n    /** @type {boolean} */\r\n    this.isMonthTransitionInProgress = false;\r\n\r\n    var self = this;\r\n\r\n    /**\r\n     * Handles a click event on a date cell.\r\n     * Created here so that every cell can use the same function instance.\r\n     * @this {HTMLTableCellElement} The cell that was clicked.\r\n     */\r\n    this.cellClickHandler = function() {\r\n      var timestamp = $$mdPersianDateUtil.getTimestampFromNode(this);\r\n      self.$scope.$apply(function() {\r\n        self.calendarCtrl.setNgModelValue(timestamp);\r\n      });\r\n    };\r\n\r\n    /**\r\n     * Handles click events on the month headers. Switches\r\n     * the calendar to the year view.\r\n     * @this {HTMLTableCellElement} The cell that was clicked.\r\n     */\r\n    this.headerClickHandler = function() {\r\n      self.calendarCtrl.setCurrentView('year', $$mdPersianDateUtil.getTimestampFromNode(this));\r\n    };\r\n  }\r\n\r\n  /*** Initialization ***/\r\n\r\n  /**\r\n   * Initialize the controller by saving a reference to the calendar and\r\n   * setting up the object that will be iterated by the virtual repeater.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.initialize = function(calendarCtrl) {\r\n    /**\r\n     * Dummy array-like object for virtual-repeat to iterate over. The length is the total\r\n     * number of months that can be viewed. We add 2 months: one to include the current month\r\n     * and one for the last dummy month.\r\n     *\r\n     * This is shorter than ideal because of a (potential) Firefox bug\r\n     * https://bugzilla.mozilla.org/show_bug.cgi?id=1181658.\r\n     */\r\n\r\n    this.items = {\r\n      length: this.dateUtil.getMonthDistance(\r\n        calendarCtrl.firstRenderableDate,\r\n        calendarCtrl.lastRenderableDate\r\n      ) + 2\r\n    };\r\n\r\n    this.calendarCtrl = calendarCtrl;\r\n    this.attachScopeListeners();\r\n    calendarCtrl.updateVirtualRepeat();\r\n\r\n    // Fire the initial render, since we might have missed it the first time it fired.\r\n    calendarCtrl.ngModelCtrl && calendarCtrl.ngModelCtrl.$render();\r\n  };\r\n\r\n  /**\r\n   * Gets the \""index\"" of the currently selected date as it would be in the virtual-repeat.\r\n   * @returns {number}\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.getSelectedMonthIndex = function() {\r\n    var calendarCtrl = this.calendarCtrl;\r\n\r\n    return this.dateUtil.getMonthDistance(\r\n      calendarCtrl.firstRenderableDate,\r\n      calendarCtrl.displayDate || calendarCtrl.selectedDate || calendarCtrl.today\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Change the selected date in the calendar (ngModel value has already been changed).\r\n   * @param {Date} date\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.changeSelectedDate = function(date) {\r\n    var self = this;\r\n    var calendarCtrl = self.calendarCtrl;\r\n    var previousSelectedDate = calendarCtrl.selectedDate;\r\n    calendarCtrl.selectedDate = date;\r\n\r\n    this.changeDisplayDate(date).then(function() {\r\n      var selectedDateClass = calendarCtrl.SELECTED_DATE_CLASS;\r\n      var namespace = 'month';\r\n\r\n      // Remove the selected class from the previously selected date, if any.\r\n      if (previousSelectedDate) {\r\n        var prevDateCell = document.getElementById(calendarCtrl.getDateId(previousSelectedDate, namespace));\r\n        if (prevDateCell) {\r\n          prevDateCell.classList.remove(selectedDateClass);\r\n          prevDateCell.setAttribute('aria-selected', 'false');\r\n        }\r\n      }\r\n\r\n      // Apply the select class to the new selected date if it is set.\r\n      if (date) {\r\n        var dateCell = document.getElementById(calendarCtrl.getDateId(date, namespace));\r\n        if (dateCell) {\r\n          dateCell.classList.add(selectedDateClass);\r\n          dateCell.setAttribute('aria-selected', 'true');\r\n        }\r\n      }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Change the date that is being shown in the calendar. If the given date is in a different\r\n   * month, the displayed month will be transitioned.\r\n   * @param {Date} date\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.changeDisplayDate = function(date) {\r\n    // Initialization is deferred until this function is called because we want to reflect\r\n    // the starting value of ngModel.\r\n    if (!this.isInitialized) {\r\n      this.buildWeekHeader();\r\n      this.calendarCtrl.hideVerticalScrollbar(this);\r\n      this.isInitialized = true;\r\n      return this.$q.when();\r\n    }\r\n\r\n    // If trying to show an invalid date or a transition is in progress, do nothing.\r\n    if (!this.dateUtil.isValidDate(date) || this.isMonthTransitionInProgress) {\r\n      return this.$q.when();\r\n    }\r\n\r\n    this.isMonthTransitionInProgress = true;\r\n    var animationPromise = this.animateDateChange(date);\r\n\r\n    this.calendarCtrl.displayDate = date;\r\n\r\n    var self = this;\r\n    animationPromise.then(function() {\r\n      self.isMonthTransitionInProgress = false;\r\n    });\r\n\r\n    return animationPromise;\r\n  };\r\n\r\n  /**\r\n   * Animates the transition from the calendar's current month to the given month.\r\n   * @param {Date} date\r\n   * @returns {angular.$q.Promise} The animation promise.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.animateDateChange = function(date) {\r\n    if (this.dateUtil.isValidDate(date)) {\r\n      var monthDistance = this.dateUtil.getMonthDistance(this.calendarCtrl.firstRenderableDate, date);\r\n      this.calendarScroller.scrollTop = monthDistance * TBODY_HEIGHT;\r\n    }\r\n\r\n    return this.$q.when();\r\n  };\r\n\r\n  /**\r\n   * Builds and appends a day-of-the-week header to the calendar.\r\n   * This should only need to be called once during initialization.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.buildWeekHeader = function() {\r\n    var firstDayOfWeek = this.dateLocale.firstDayOfWeek;\r\n    var shortDays = this.dateLocale.shortDays;\r\n\r\n    var row = document.createElement('tr');\r\n    for (var i = 0; i < 7; i++) {\r\n      var th = document.createElement('th');\r\n      th.textContent = shortDays[(i + firstDayOfWeek) % 7];\r\n      row.appendChild(th);\r\n    }\r\n\r\n    this.$element.find('thead').append(row);\r\n  };\r\n\r\n  /**\r\n   * Attaches listeners for the scope events that are broadcast by the calendar.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.attachScopeListeners = function() {\r\n    var self = this;\r\n\r\n    self.$scope.$on('md-calendar-parent-changed', function(event, value) {\r\n      self.changeSelectedDate(value);\r\n    });\r\n\r\n    self.$scope.$on('md-calendar-parent-action', angular.bind(this, this.handleKeyEvent));\r\n  };\r\n\r\n  /**\r\n   * Handles the month-specific keyboard interactions.\r\n   * @param {Object} event Scope event object passed by the calendar.\r\n   * @param {String} action Action, corresponding to the key that was pressed.\r\n   */\r\n  PersianCalendarMonthCtrl.prototype.handleKeyEvent = function(event, action) {\r\n    var calendarCtrl = this.calendarCtrl;\r\n    var displayDate = calendarCtrl.displayDate;\r\n\r\n    if (action === 'select') {\r\n      calendarCtrl.setNgModelValue(displayDate);\r\n    } else {\r\n      var date = null;\r\n      var dateUtil = this.dateUtil;\r\n\r\n      switch (action) {\r\n        case 'move-right': date = dateUtil.incrementDays(displayDate, 1); break;\r\n        case 'move-left': date = dateUtil.incrementDays(displayDate, -1); break;\r\n\r\n        case 'move-page-down': date = dateUtil.incrementMonths(displayDate, 1); break;\r\n        case 'move-page-up': date = dateUtil.incrementMonths(displayDate, -1); break;\r\n\r\n        case 'move-row-down': date = dateUtil.incrementDays(displayDate, 7); break;\r\n        case 'move-row-up': date = dateUtil.incrementDays(displayDate, -7); break;\r\n\r\n        case 'start': date = dateUtil.getFirstDateOfMonth(displayDate); break;\r\n        case 'end': date = dateUtil.getLastDateOfMonth(displayDate); break;\r\n      }\r\n\r\n      if (date) {\r\n        date = this.dateUtil.clampDate(date, calendarCtrl.minDate, calendarCtrl.maxDate);\r\n\r\n        this.changeDisplayDate(date).then(function() {\r\n          calendarCtrl.focus(date);\r\n        });\r\n      }\r\n    }\r\n  };\r\n})();\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/calendarMonth.js"",""(function() {\r\n  'use strict';\r\n\r\n  angular.module('angular-material-persian-datepicker')\r\n      .directive('mdPersianCalendarMonthBody', mdPersianCalendarMonthBodyDirective);\r\n\r\n  /**\r\n   * Private directive consumed by md-persian-calendar-month. Having this directive lets the calender use\r\n   * md-virtual-repeat and also cleanly separates the month DOM construction functions from\r\n   * the rest of the calendar controller logic.\r\n   * @ngInject\r\n   */\r\n  function mdPersianCalendarMonthBodyDirective($compile, $$mdSvgRegistry) {\r\n    var ARROW_ICON = $compile('<md-icon md-svg-src=\""' +\r\n      $$mdSvgRegistry.mdTabsArrow + '\""></md-icon>')({})[0];\r\n\r\n    return {\r\n      require: ['^^mdPersianCalendar', '^^mdPersianCalendarMonth', 'mdPersianCalendarMonthBody'],\r\n      scope: { offset: '=mdMonthOffset' },\r\n      controller: PersianCalendarMonthBodyCtrl,\r\n      controllerAs: 'mdMonthBodyCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var calendarCtrl = controllers[0];\r\n        var monthCtrl = controllers[1];\r\n        var monthBodyCtrl = controllers[2];\r\n\r\n        monthBodyCtrl.calendarCtrl = calendarCtrl;\r\n        monthBodyCtrl.monthCtrl = monthCtrl;\r\n        monthBodyCtrl.arrowIcon = ARROW_ICON.cloneNode(true);\r\n\r\n        // The virtual-repeat re-uses the same DOM elements, so there are only a limited number\r\n        // of repeated items that are linked, and then those elements have their bindings updated.\r\n        // Since the months are not generated by bindings, we simply regenerate the entire thing\r\n        // when the binding (offset) changes.\r\n        scope.$watch(function() { return monthBodyCtrl.offset; }, function(offset) {\r\n          if (angular.isNumber(offset)) {\r\n            monthBodyCtrl.generateContent();\r\n          }\r\n        });\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Controller for a single calendar month.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarMonthBodyCtrl($element, $$mdPersianDateUtil, $mdPersianDateLocale) {\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.dateLocale = $mdPersianDateLocale;\r\n\r\n    /** @type {Object} Reference to the month view. */\r\n    this.monthCtrl = null;\r\n\r\n    /** @type {Object} Reference to the calendar. */\r\n    this.calendarCtrl = null;\r\n\r\n    /**\r\n     * Number of months from the start of the month \""items\"" that the currently rendered month\r\n     * occurs. Set via angular data binding.\r\n     * @type {number}\r\n     */\r\n    this.offset = null;\r\n\r\n    /**\r\n     * Date cell to focus after appending the month to the document.\r\n     * @type {HTMLElement}\r\n     */\r\n    this.focusAfterAppend = null;\r\n  }\r\n\r\n  /** Generate and append the content for this month to the directive element. */\r\n  PersianCalendarMonthBodyCtrl.prototype.generateContent = function() {\r\n    var date = this.dateUtil.incrementMonths(this.calendarCtrl.firstRenderableDate, this.offset);\r\n\r\n    this.$element\r\n      .empty()\r\n      .append(this.buildCalendarForMonth(date));\r\n\r\n    if (this.focusAfterAppend) {\r\n      this.focusAfterAppend.classList.add(this.calendarCtrl.FOCUSED_DATE_CLASS);\r\n      this.focusAfterAppend.focus();\r\n      this.focusAfterAppend = null;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Creates a single cell to contain a date in the calendar with all appropriate\r\n   * attributes and classes added. If a date is given, the cell content will be set\r\n   * based on the date.\r\n   * @param {Date=} opt_date\r\n   * @returns {HTMLElement}\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.buildDateCell = function(opt_date) {\r\n    var monthCtrl = this.monthCtrl;\r\n    var calendarCtrl = this.calendarCtrl;\r\n\r\n    // TODO(jelbourn): cloneNode is likely a faster way of doing this.\r\n    var cell = document.createElement('td');\r\n    cell.tabIndex = -1;\r\n    cell.classList.add('md-calendar-date');\r\n    cell.setAttribute('role', 'gridcell');\r\n\r\n    if (opt_date) {\r\n      cell.setAttribute('tabindex', '-1');\r\n      cell.setAttribute('aria-label', this.dateLocale.longDateFormatter(opt_date));\r\n      cell.id = calendarCtrl.getDateId(opt_date, 'month');\r\n\r\n      // Use `data-timestamp` attribute because IE10 does not support the `dataset` property.\r\n      cell.setAttribute('data-timestamp', opt_date.getTime());\r\n\r\n      // TODO(jelourn): Doing these comparisons for class addition during generation might be slow.\r\n      // It may be better to finish the construction and then query the node and add the class.\r\n      if (this.dateUtil.isSameDay(opt_date, calendarCtrl.today)) {\r\n        cell.classList.add(calendarCtrl.TODAY_CLASS);\r\n      }\r\n\r\n      if (this.dateUtil.isValidDate(calendarCtrl.selectedDate) &&\r\n          this.dateUtil.isSameDay(opt_date, calendarCtrl.selectedDate)) {\r\n        cell.classList.add(calendarCtrl.SELECTED_DATE_CLASS);\r\n        cell.setAttribute('aria-selected', 'true');\r\n      }\r\n\r\n      var cellText = this.dateLocale.dates[moment(opt_date).jDate()];\r\n\r\n      if (this.isDateEnabled(opt_date)) {\r\n        // Add a indicator for select, hover, and focus states.\r\n        var selectionIndicator = document.createElement('span');\r\n        selectionIndicator.classList.add('md-calendar-date-selection-indicator');\r\n        selectionIndicator.textContent = cellText;\r\n        cell.appendChild(selectionIndicator);\r\n        cell.addEventListener('click', monthCtrl.cellClickHandler);\r\n\r\n        if (calendarCtrl.displayDate && this.dateUtil.isSameDay(opt_date, calendarCtrl.displayDate)) {\r\n          this.focusAfterAppend = cell;\r\n        }\r\n      } else {\r\n        cell.classList.add('md-calendar-date-disabled');\r\n        cell.textContent = cellText;\r\n      }\r\n    }\r\n\r\n    return cell;\r\n  };\r\n\r\n  /**\r\n   * Check whether date is in range and enabled\r\n   * @param {Date=} opt_date\r\n   * @return {boolean} Whether the date is enabled.\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.isDateEnabled = function(opt_date) {\r\n    return this.dateUtil.isDateWithinRange(opt_date,\r\n          this.calendarCtrl.minDate, this.calendarCtrl.maxDate) &&\r\n          (!angular.isFunction(this.calendarCtrl.dateFilter)\r\n           || this.calendarCtrl.dateFilter(opt_date));\r\n  };\r\n\r\n  /**\r\n   * Builds a `tr` element for the calendar grid.\r\n   * @param rowNumber The week number within the month.\r\n   * @returns {HTMLElement}\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.buildDateRow = function(rowNumber) {\r\n    var row = document.createElement('tr');\r\n    row.setAttribute('role', 'row');\r\n\r\n    // Because of an NVDA bug (with Firefox), the row needs an aria-label in order\r\n    // to prevent the entire row being read aloud when the user moves between rows.\r\n    // See http://community.nvda-project.org/ticket/4643.\r\n    row.setAttribute('aria-label', this.dateLocale.weekNumberFormatter(rowNumber));\r\n\r\n    return row;\r\n  };\r\n\r\n  /**\r\n   * Builds the <tbody> content for the given date's month.\r\n   * @param {Date=} opt_dateInMonth\r\n   * @returns {DocumentFragment} A document fragment containing the <tr> elements.\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.buildCalendarForMonth = function(opt_dateInMonth) {\r\n    var date = this.dateUtil.isValidDate(opt_dateInMonth) ? opt_dateInMonth : new Date();\r\n\r\n    var firstDayOfMonth = this.dateUtil.getFirstDateOfMonth(date);\r\n    var firstDayOfTheWeek = this.getLocaleDay_(firstDayOfMonth);\r\n    var numberOfDaysInMonth = this.dateUtil.getNumberOfDaysInMonth(date);\r\n\r\n    // Store rows for the month in a document fragment so that we can append them all at once.\r\n    var monthBody = document.createDocumentFragment();\r\n\r\n    var rowNumber = 1;\r\n    var row = this.buildDateRow(rowNumber);\r\n    monthBody.appendChild(row);\r\n\r\n    // If this is the final month in the list of items, only the first week should render,\r\n    // so we should return immediately after the first row is complete and has been\r\n    // attached to the body.\r\n    var isFinalMonth = this.offset === this.monthCtrl.items.length - 1;\r\n\r\n    // Add a label for the month. If the month starts on a Sun/Mon/Tues, the month label\r\n    // goes on a row above the first of the month. Otherwise, the month label takes up the first\r\n    // two cells of the first row.\r\n    var blankCellOffset = 0;\r\n    var monthLabelCell = document.createElement('td');\r\n    var monthLabelCellContent = document.createElement('span');\r\n\r\n    monthLabelCellContent.textContent = this.dateLocale.monthHeaderFormatter(date);\r\n    monthLabelCell.appendChild(monthLabelCellContent);\r\n    monthLabelCell.classList.add('md-calendar-month-label');\r\n    // If the entire month is after the max date, render the label as a disabled state.\r\n    if (this.calendarCtrl.maxDate && firstDayOfMonth > this.calendarCtrl.maxDate) {\r\n      monthLabelCell.classList.add('md-calendar-month-label-disabled');\r\n    } else {\r\n      monthLabelCell.addEventListener('click', this.monthCtrl.headerClickHandler);\r\n      monthLabelCell.setAttribute('data-timestamp', firstDayOfMonth.getTime());\r\n      monthLabelCell.setAttribute('aria-label', this.dateLocale.monthFormatter(date));\r\n      monthLabelCell.appendChild(this.arrowIcon.cloneNode(true));\r\n    }\r\n\r\n    if (firstDayOfTheWeek <= 2) {\r\n      monthLabelCell.setAttribute('colspan', '7');\r\n\r\n      var monthLabelRow = this.buildDateRow();\r\n      monthLabelRow.appendChild(monthLabelCell);\r\n      monthBody.insertBefore(monthLabelRow, row);\r\n\r\n      if (isFinalMonth) {\r\n        return monthBody;\r\n      }\r\n    } else {\r\n      blankCellOffset = 3;\r\n      monthLabelCell.setAttribute('colspan', '3');\r\n      row.appendChild(monthLabelCell);\r\n    }\r\n\r\n    // Add a blank cell for each day of the week that occurs before the first of the month.\r\n    // For example, if the first day of the month is a Tuesday, add blank cells for Sun and Mon.\r\n    // The blankCellOffset is needed in cases where the first N cells are used by the month label.\r\n    for (var i = blankCellOffset; i < firstDayOfTheWeek; i++) {\r\n      row.appendChild(this.buildDateCell());\r\n    }\r\n\r\n    // Add a cell for each day of the month, keeping track of the day of the week so that\r\n    // we know when to start a new row.\r\n    var dayOfWeek = firstDayOfTheWeek;\r\n    var iterationDate = firstDayOfMonth;\r\n    for (var d = 1; d <= numberOfDaysInMonth; d++) {\r\n      // If we've reached the end of the week, start a new row.\r\n      if (dayOfWeek === 7) {\r\n        // We've finished the first row, so we're done if this is the final month.\r\n        if (isFinalMonth) {\r\n          return monthBody;\r\n        }\r\n        dayOfWeek = 0;\r\n        rowNumber++;\r\n        row = this.buildDateRow(rowNumber);\r\n        monthBody.appendChild(row);\r\n      }\r\n\r\n      var cell = this.buildDateCell(iterationDate);\r\n      row.appendChild(cell);\r\n\r\n      iterationDate = moment(iterationDate).add(1, 'day').toDate();\r\n      dayOfWeek++;\r\n    }\r\n\r\n    // Ensure that the last row of the month has 7 cells.\r\n    while (row.childNodes.length < 7) {\r\n      row.appendChild(this.buildDateCell());\r\n    }\r\n\r\n    // Ensure that all months have 6 rows. This is necessary for now because the virtual-repeat\r\n    // requires that all items have exactly the same height.\r\n    while (monthBody.childNodes.length < 6) {\r\n      var whitespaceRow = this.buildDateRow();\r\n      for (var j = 0; j < 7; j++) {\r\n        whitespaceRow.appendChild(this.buildDateCell());\r\n      }\r\n      monthBody.appendChild(whitespaceRow);\r\n    }\r\n\r\n    return monthBody;\r\n  };\r\n\r\n  /**\r\n   * Gets the day-of-the-week index for a date for the current locale.\r\n   * @private\r\n   * @param {Date} date\r\n   * @returns {number} The column index of the date in the calendar.\r\n   */\r\n  PersianCalendarMonthBodyCtrl.prototype.getLocaleDay_ = function(date) {\r\n    return (moment(date).day() + (7 - this.dateLocale.firstDayOfWeek)) % 7;\r\n  };\r\n})();\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/calendarMonthBody.js"",""(function() {\r\n  'use strict';\r\n\r\n  angular.module('angular-material-persian-datepicker')\r\n    .directive('mdPersianCalendarYear', persianCalendarDirective);\r\n\r\n  /**\r\n   * Height of one calendar year tbody. This must be made known to the virtual-repeat and is\r\n   * subsequently used for scrolling to specific years.\r\n   */\r\n  var TBODY_HEIGHT = 88;\r\n\r\n  /** Private component, representing a list of years in the calendar. */\r\n  function persianCalendarDirective() {\r\n    return {\r\n      template:\r\n        '<div class=\""md-calendar-scroll-mask\"">' +\r\n          '<md-virtual-repeat-container class=\""md-calendar-scroll-container\"">' +\r\n            '<table role=\""grid\"" tabindex=\""0\"" class=\""md-calendar\"" aria-readonly=\""true\"">' +\r\n              '<tbody ' +\r\n                  'md-persian-calendar-year-body ' +\r\n                  'role=\""rowgroup\"" ' +\r\n                  'md-virtual-repeat=\""i in yearCtrl.items\"" ' +\r\n                  'md-year-offset=\""$index\"" class=\""md-calendar-year\"" ' +\r\n                  'md-start-index=\""yearCtrl.getFocusedYearIndex()\"" ' +\r\n                  'md-item-size=\""' + TBODY_HEIGHT + '\"">' +\r\n                // The <tr> ensures that the <tbody> will have the proper\r\n                // height, even though it may be empty.\r\n                '<tr aria-hidden=\""true\"" md-force-height=\""\\'' + TBODY_HEIGHT + 'px\\'\""></tr>' +\r\n              '</tbody>' +\r\n            '</table>' +\r\n          '</md-virtual-repeat-container>' +\r\n        '</div>',\r\n      require: ['^^mdPersianCalendar', 'mdPersianCalendarYear'],\r\n      controller: PersianCalendarYearCtrl,\r\n      controllerAs: 'yearCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var calendarCtrl = controllers[0];\r\n        var yearCtrl = controllers[1];\r\n        yearCtrl.initialize(calendarCtrl);\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Controller for the mdPersianCalendar component.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarYearCtrl($element, $scope, $animate, $q, $$mdPersianDateUtil) {\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final {!angular.Scope} */\r\n    this.$scope = $scope;\r\n\r\n    /** @final {!angular.$animate} */\r\n    this.$animate = $animate;\r\n\r\n    /** @final {!angular.$q} */\r\n    this.$q = $q;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final {HTMLElement} */\r\n    this.calendarScroller = $element[0].querySelector('.md-virtual-repeat-scroller');\r\n\r\n    /** @type {boolean} */\r\n    this.isInitialized = false;\r\n\r\n    /** @type {boolean} */\r\n    this.isMonthTransitionInProgress = false;\r\n\r\n    var self = this;\r\n\r\n    /**\r\n     * Handles a click event on a date cell.\r\n     * Created here so that every cell can use the same function instance.\r\n     * @this {HTMLTableCellElement} The cell that was clicked.\r\n     */\r\n    this.cellClickHandler = function() {\r\n      self.calendarCtrl.setCurrentView('month', $$mdPersianDateUtil.getTimestampFromNode(this));\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Initialize the controller by saving a reference to the calendar and\r\n   * setting up the object that will be iterated by the virtual repeater.\r\n   */\r\n  PersianCalendarYearCtrl.prototype.initialize = function(calendarCtrl) {\r\n    /**\r\n     * Dummy array-like object for virtual-repeat to iterate over. The length is the total\r\n     * number of years that can be viewed. We add 1 extra in order to include the current year.\r\n     */\r\n    this.items = {\r\n      length: this.dateUtil.getYearDistance(\r\n        calendarCtrl.firstRenderableDate,\r\n        calendarCtrl.lastRenderableDate\r\n      ) + 1\r\n    };\r\n\r\n    this.calendarCtrl = calendarCtrl;\r\n    this.attachScopeListeners();\r\n    calendarCtrl.updateVirtualRepeat();\r\n\r\n    // Fire the initial render, since we might have missed it the first time it fired.\r\n    calendarCtrl.ngModelCtrl && calendarCtrl.ngModelCtrl.$render();\r\n  };\r\n\r\n  /**\r\n   * Gets the \""index\"" of the currently selected date as it would be in the virtual-repeat.\r\n   * @returns {number}\r\n   */\r\n  PersianCalendarYearCtrl.prototype.getFocusedYearIndex = function() {\r\n    var calendarCtrl = this.calendarCtrl;\r\n\r\n    return this.dateUtil.getYearDistance(\r\n      calendarCtrl.firstRenderableDate,\r\n      calendarCtrl.displayDate || calendarCtrl.selectedDate || calendarCtrl.today\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Change the date that is highlighted in the calendar.\r\n   * @param {Date} date\r\n   */\r\n  PersianCalendarYearCtrl.prototype.changeDate = function(date) {\r\n    // Initialization is deferred until this function is called because we want to reflect\r\n    // the starting value of ngModel.\r\n    if (!this.isInitialized) {\r\n      this.calendarCtrl.hideVerticalScrollbar(this);\r\n      this.isInitialized = true;\r\n      return this.$q.when();\r\n    } else if (this.dateUtil.isValidDate(date) && !this.isMonthTransitionInProgress) {\r\n      var self = this;\r\n      var animationPromise = this.animateDateChange(date);\r\n\r\n      self.isMonthTransitionInProgress = true;\r\n      self.calendarCtrl.displayDate = date;\r\n\r\n      return animationPromise.then(function() {\r\n        self.isMonthTransitionInProgress = false;\r\n      });\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Animates the transition from the calendar's current month to the given month.\r\n   * @param {Date} date\r\n   * @returns {angular.$q.Promise} The animation promise.\r\n   */\r\n  PersianCalendarYearCtrl.prototype.animateDateChange = function(date) {\r\n    if (this.dateUtil.isValidDate(date)) {\r\n      var monthDistance = this.dateUtil.getYearDistance(this.calendarCtrl.firstRenderableDate, date);\r\n      this.calendarScroller.scrollTop = monthDistance * TBODY_HEIGHT;\r\n    }\r\n\r\n    return this.$q.when();\r\n  };\r\n\r\n  /**\r\n   * Handles the year-view-specific keyboard interactions.\r\n   * @param {Object} event Scope event object passed by the calendar.\r\n   * @param {String} action Action, corresponding to the key that was pressed.\r\n   */\r\n  PersianCalendarYearCtrl.prototype.handleKeyEvent = function(event, action) {\r\n    var calendarCtrl = this.calendarCtrl;\r\n    var displayDate = calendarCtrl.displayDate;\r\n\r\n    if (action === 'select') {\r\n      this.changeDate(displayDate).then(function() {\r\n        calendarCtrl.setCurrentView('month', displayDate);\r\n        calendarCtrl.focus(displayDate);\r\n      });\r\n    } else {\r\n      var date = null;\r\n      var dateUtil = this.dateUtil;\r\n\r\n      switch (action) {\r\n        case 'move-right': date = dateUtil.incrementMonths(displayDate, 1); break;\r\n        case 'move-left': date = dateUtil.incrementMonths(displayDate, -1); break;\r\n\r\n        case 'move-row-down': date = dateUtil.incrementMonths(displayDate, 6); break;\r\n        case 'move-row-up': date = dateUtil.incrementMonths(displayDate, -6); break;\r\n      }\r\n\r\n      if (date) {\r\n        var min = calendarCtrl.minDate ? dateUtil.getFirstDateOfMonth(calendarCtrl.minDate) : null;\r\n        var max = calendarCtrl.maxDate ? dateUtil.getFirstDateOfMonth(calendarCtrl.maxDate) : null;\r\n        date = dateUtil.getFirstDateOfMonth(this.dateUtil.clampDate(date, min, max));\r\n\r\n        this.changeDate(date).then(function() {\r\n          calendarCtrl.focus(date);\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Attaches listeners for the scope events that are broadcast by the calendar.\r\n   */\r\n  PersianCalendarYearCtrl.prototype.attachScopeListeners = function() {\r\n    var self = this;\r\n\r\n    self.$scope.$on('md-calendar-parent-changed', function(event, value) {\r\n      self.changeDate(value);\r\n    });\r\n\r\n    self.$scope.$on('md-calendar-parent-action', angular.bind(self, self.handleKeyEvent));\r\n  };\r\n})();\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/calendarYear.js"",""(function() {\r\n  'use strict';\r\n\r\n  angular.module('angular-material-persian-datepicker')\r\n      .directive('mdPersianCalendarYearBody', mdPersianCalendarYearDirective);\r\n\r\n  /**\r\n   * Private component, consumed by the md-persian-calendar-year, which separates the DOM construction logic\r\n   * and allows for the year view to use md-virtual-repeat.\r\n   */\r\n  function mdPersianCalendarYearDirective() {\r\n    return {\r\n      require: ['^^mdPersianCalendar', '^^mdPersianCalendarYear', 'mdPersianCalendarYearBody'],\r\n      scope: { offset: '=mdYearOffset' },\r\n      controller: PersianCalendarYearBodyCtrl,\r\n      controllerAs: 'mdYearBodyCtrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attrs, controllers) {\r\n        var calendarCtrl = controllers[0];\r\n        var yearCtrl = controllers[1];\r\n        var yearBodyCtrl = controllers[2];\r\n\r\n        yearBodyCtrl.calendarCtrl = calendarCtrl;\r\n        yearBodyCtrl.yearCtrl = yearCtrl;\r\n\r\n        scope.$watch(function() { return yearBodyCtrl.offset; }, function(offset) {\r\n          if (angular.isNumber(offset)) {\r\n            yearBodyCtrl.generateContent();\r\n          }\r\n        });\r\n      }\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Controller for a single year.\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianCalendarYearBodyCtrl($element, $$mdPersianDateUtil, $mdPersianDateLocale) {\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.dateLocale = $mdPersianDateLocale;\r\n\r\n    /** @type {Object} Reference to the calendar. */\r\n    this.calendarCtrl = null;\r\n\r\n    /** @type {Object} Reference to the year view. */\r\n    this.yearCtrl = null;\r\n\r\n    /**\r\n     * Number of months from the start of the month \""items\"" that the currently rendered month\r\n     * occurs. Set via angular data binding.\r\n     * @type {number}\r\n     */\r\n    this.offset = null;\r\n\r\n    /**\r\n     * Date cell to focus after appending the month to the document.\r\n     * @type {HTMLElement}\r\n     */\r\n    this.focusAfterAppend = null;\r\n  }\r\n\r\n  /** Generate and append the content for this year to the directive element. */\r\n  PersianCalendarYearBodyCtrl.prototype.generateContent = function() {\r\n    var date = this.dateUtil.incrementYears(this.calendarCtrl.firstRenderableDate, this.offset);\r\n\r\n    this.$element\r\n      .empty()\r\n      .append(this.buildCalendarForYear(date));\r\n\r\n    if (this.focusAfterAppend) {\r\n      this.focusAfterAppend.classList.add(this.calendarCtrl.FOCUSED_DATE_CLASS);\r\n      this.focusAfterAppend.focus();\r\n      this.focusAfterAppend = null;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Creates a single cell to contain a year in the calendar.\r\n   * @param {number} opt_year Four-digit year.\r\n   * @param {number} opt_month Zero-indexed month.\r\n   * @returns {HTMLElement}\r\n   */\r\n  PersianCalendarYearBodyCtrl.prototype.buildMonthCell = function(year, month) {\r\n    var calendarCtrl = this.calendarCtrl;\r\n    var yearCtrl = this.yearCtrl;\r\n    var cell = this.buildBlankCell();\r\n\r\n    // Represent this month/year as a date.\r\n    var firstOfMonth = moment([year, (month+1), 1].join('/'), 'jYYYY/jM/jD').toDate();\r\n    cell.setAttribute('aria-label', this.dateLocale.monthFormatter(firstOfMonth));\r\n    cell.id = calendarCtrl.getDateId(firstOfMonth, 'year');\r\n\r\n    // Use `data-timestamp` attribute because IE10 does not support the `dataset` property.\r\n    cell.setAttribute('data-timestamp', firstOfMonth.getTime());\r\n\r\n    if (this.dateUtil.isSameMonthAndYear(firstOfMonth, calendarCtrl.today)) {\r\n      cell.classList.add(calendarCtrl.TODAY_CLASS);\r\n    }\r\n\r\n    if (this.dateUtil.isValidDate(calendarCtrl.selectedDate) &&\r\n        this.dateUtil.isSameMonthAndYear(firstOfMonth, calendarCtrl.selectedDate)) {\r\n      cell.classList.add(calendarCtrl.SELECTED_DATE_CLASS);\r\n      cell.setAttribute('aria-selected', 'true');\r\n    }\r\n\r\n    var cellText = this.dateLocale.shortMonths[month];\r\n\r\n    if (this.dateUtil.isMonthWithinRange(firstOfMonth,\r\n        calendarCtrl.minDate, calendarCtrl.maxDate)) {\r\n      var selectionIndicator = document.createElement('span');\r\n      selectionIndicator.classList.add('md-calendar-date-selection-indicator');\r\n      selectionIndicator.textContent = cellText;\r\n      cell.appendChild(selectionIndicator);\r\n      cell.addEventListener('click', yearCtrl.cellClickHandler);\r\n\r\n      if (calendarCtrl.displayDate && this.dateUtil.isSameMonthAndYear(firstOfMonth, calendarCtrl.displayDate)) {\r\n        this.focusAfterAppend = cell;\r\n      }\r\n    } else {\r\n      cell.classList.add('md-calendar-date-disabled');\r\n      cell.textContent = cellText;\r\n    }\r\n\r\n    return cell;\r\n  };\r\n\r\n  /**\r\n   * Builds a blank cell.\r\n   * @return {HTMLTableCellElement}\r\n   */\r\n  PersianCalendarYearBodyCtrl.prototype.buildBlankCell = function() {\r\n    var cell = document.createElement('td');\r\n    cell.tabIndex = -1;\r\n    cell.classList.add('md-calendar-date');\r\n    cell.setAttribute('role', 'gridcell');\r\n\r\n    cell.setAttribute('tabindex', '-1');\r\n    return cell;\r\n  };\r\n\r\n  /**\r\n   * Builds the <tbody> content for the given year.\r\n   * @param {Date} date Date for which the content should be built.\r\n   * @returns {DocumentFragment} A document fragment containing the months within the year.\r\n   */\r\n  PersianCalendarYearBodyCtrl.prototype.buildCalendarForYear = function(date) {\r\n    // Store rows for the month in a document fragment so that we can append them all at once.\r\n    var year = moment(date).jYear();\r\n    var yearBody = document.createDocumentFragment();\r\n\r\n    var monthCell, i;\r\n    // First row contains label and Jan-Jun.\r\n    var firstRow = document.createElement('tr');\r\n    var labelCell = document.createElement('td');\r\n    labelCell.className = 'md-calendar-month-label';\r\n    labelCell.textContent = year;\r\n    firstRow.appendChild(labelCell);\r\n\r\n    for (i = 0; i < 6; i++) {\r\n      firstRow.appendChild(this.buildMonthCell(year, i));\r\n    }\r\n    yearBody.appendChild(firstRow);\r\n\r\n    // Second row contains a blank cell and Jul-Dec.\r\n    var secondRow = document.createElement('tr');\r\n    secondRow.appendChild(this.buildBlankCell());\r\n    for (i = 6; i < 12; i++) {\r\n      secondRow.appendChild(this.buildMonthCell(year, i));\r\n    }\r\n    yearBody.appendChild(secondRow);\r\n\r\n    return yearBody;\r\n  };\r\n})();\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/calendarYearBody.js"",""(function() {\r\n    'use strict';\r\n\r\n    /**\r\n     * @ngdoc service\r\n     * @name $mdPersianDateLocaleProvider\r\n     * @module angular-material-persian-datepicker\r\n     *\r\n     * @description\r\n     * The `$mdPersianDateLocaleProvider` is the provider that creates the `$mdPersianDateLocale` service.\r\n     * This provider that allows the user to specify messages, formatters, and parsers for date\r\n     * internationalization. The `$mdPersianDateLocale` service itself is consumed by AngularJS Material\r\n     * components that deal with dates.\r\n     *\r\n     * @property {(Array<string>)=} months Array of month names (in order).\r\n     * @property {(Array<string>)=} shortMonths Array of abbreviated month names.\r\n     * @property {(Array<string>)=} days Array of the days of the week (in order).\r\n     * @property {(Array<string>)=} shortDays Array of abbreviated days of the week.\r\n     * @property {(Array<string>)=} dates Array of dates of the month. Only necessary for locales\r\n     *     using a numeral system other than [1, 2, 3...].\r\n     * @property {(Array<string>)=} firstDayOfWeek The first day of the week. Sunday = 0, Monday = 1,\r\n     *    etc.\r\n     * @property {(function(string): Date)=} parseDate Function to parse a date object from a string.\r\n     * @property {(function(Date, string): string)=} formatDate Function to format a date object to a\r\n     *     string. The datepicker directive also provides the time zone, if it was specified.\r\n     * @property {(function(Date): string)=} monthHeaderFormatter Function that returns the label for\r\n     *     a month given a date.\r\n     * @property {(function(Date): string)=} monthFormatter Function that returns the full name of a month\r\n     *     for a given date.\r\n     * @property {(function(number): string)=} weekNumberFormatter Function that returns a label for\r\n     *     a week given the week number.\r\n     * @property {(string)=} msgCalendar Translation of the label \""Calendar\"" for the current locale.\r\n     * @property {(string)=} msgOpenCalendar Translation of the button label \""Open calendar\"" for the\r\n     *     current locale.\r\n     * @property {Date=} firstRenderableDate The date from which the datepicker calendar will begin\r\n     * rendering. Note that this will be ignored if a minimum date is set. Defaults to January 1st 1880.\r\n     * @property {Date=} lastRenderableDate The last date that will be rendered by the datepicker\r\n     * calendar. Note that this will be ignored if a maximum date is set. Defaults to January 1st 2130.\r\n     *\r\n     * @usage\r\n     * <hljs lang=\""js\"">\r\n     * myAppModule.config(function($mdPersianDateLocaleProvider) {\r\n     *\r\n     *     // Example of a French localization.\r\n     *     $mdPersianDateLocaleProvider.months = ['janvier', 'février', 'mars', ...];\r\n     *     $mdPersianDateLocaleProvider.shortMonths = ['janv', 'févr', 'mars', ...];\r\n     *     $mdPersianDateLocaleProvider.days = ['dimanche', 'lundi', 'mardi', ...];\r\n     *     $mdPersianDateLocaleProvider.shortDays = ['Di', 'Lu', 'Ma', ...];\r\n     *\r\n     *     // Can change week display to start on Monday.\r\n     *     $mdPersianDateLocaleProvider.firstDayOfWeek = 1;\r\n     *\r\n     *     // Optional.\r\n     *     $mdPersianDateLocaleProvider.dates = [1, 2, 3, 4, 5, 6, ...];\r\n     *\r\n     *     // Example uses moment.js to parse and format dates.\r\n     *     $mdPersianDateLocaleProvider.parseDate = function(dateString) {\r\n     *       var m = moment(dateString, 'L', true);\r\n     *       return m.isValid() ? m.toDate() : new Date(NaN);\r\n     *     };\r\n     *\r\n     *     $mdPersianDateLocaleProvider.formatDate = function(date) {\r\n     *       var m = moment(date);\r\n     *       return m.isValid() ? m.format('L') : '';\r\n     *     };\r\n     *\r\n     *     $mdPersianDateLocaleProvider.monthHeaderFormatter = function(date) {\r\n     *       return myShortMonths[date.getMonth()] + ' ' + date.getFullYear();\r\n     *     };\r\n     *\r\n     *     // In addition to date display, date components also need localized messages\r\n     *     // for aria-labels for screen-reader users.\r\n     *\r\n     *     $mdPersianDateLocaleProvider.weekNumberFormatter = function(weekNumber) {\r\n     *       return 'Semaine ' + weekNumber;\r\n     *     };\r\n     *\r\n     *     $mdPersianDateLocaleProvider.msgCalendar = 'Calendrier';\r\n     *     $mdPersianDateLocaleProvider.msgOpenCalendar = 'Ouvrir le calendrier';\r\n     *\r\n     *     // You can also set when your calendar begins and ends.\r\n     *     $mdPersianDateLocaleProvider.firstRenderableDate = new Date(1776, 6, 4);\r\n     *     $mdPersianDateLocaleProvider.lastRenderableDate = new Date(2012, 11, 21);\r\n     * });\r\n     * </hljs>\r\n     *\r\n     */\r\n    angular.module('angular-material-persian-datepicker').config(function($provide) {\r\n        // TODO(jelbourn): Assert provided values are correctly formatted. Need assertions.\r\n\r\n        /** @constructor */\r\n        function PersianDateLocaleProvider() {\r\n            /** Array of full month names. E.g., ['January', 'Febuary', ...] */\r\n            this.months = null;\r\n\r\n            /** Array of abbreviated month names. E.g., ['Jan', 'Feb', ...] */\r\n            this.shortMonths = null;\r\n\r\n            /** Array of full day of the week names. E.g., ['Monday', 'Tuesday', ...] */\r\n            this.days = null;\r\n\r\n            /** Array of abbreviated dat of the week names. E.g., ['M', 'T', ...] */\r\n            this.shortDays = null;\r\n\r\n            /** Array of dates of a month (1 - 31). Characters might be different in some locales. */\r\n            this.dates = null;\r\n\r\n            /** Index of the first day of the week. 0 = Sunday, 1 = Monday, etc. */\r\n            this.firstDayOfWeek = 6;\r\n\r\n            /**\r\n             * Function that converts the date portion of a Date to a string.\r\n             * @type {(function(Date): string)}\r\n             */\r\n            this.formatDate = null;\r\n\r\n            /**\r\n             * Function that converts a date string to a Date object (the date portion)\r\n             * @type {function(string): Date}\r\n             */\r\n            this.parseDate = null;\r\n\r\n            /**\r\n             * Function that formats a Date into a month header string.\r\n             * @type {function(Date): string}\r\n             */\r\n            this.monthHeaderFormatter = null;\r\n\r\n            /**\r\n             * Function that formats a week number into a label for the week.\r\n             * @type {function(number): string}\r\n             */\r\n            this.weekNumberFormatter = null;\r\n\r\n            /**\r\n             * Function that formats a date into a long aria-label that is read\r\n             * when the focused date changes.\r\n             * @type {function(Date): string}\r\n             */\r\n            this.longDateFormatter = null;\r\n\r\n            /**\r\n             * ARIA label for the calendar \""dialog\"" used in the datepicker.\r\n             * @type {string}\r\n             */\r\n            this.msgCalendar = '';\r\n\r\n            /**\r\n             * ARIA label for the datepicker's \""Open calendar\"" buttons.\r\n             * @type {string}\r\n             */\r\n            this.msgOpenCalendar = '';\r\n        }\r\n\r\n        /**\r\n         * Factory function that returns an instance of the dateLocale service.\r\n         * @ngInject\r\n         * @param $locale\r\n         * @returns {DateLocale}\r\n         */\r\n        PersianDateLocaleProvider.prototype.$get = function($locale, $filter) {\r\n            /**\r\n             * Default date-to-string formatting function.\r\n             * @param {!Date} date\r\n             * @param {string=} timezone\r\n             * @returns {string}\r\n             */\r\n            function defaultFormatDate(date, timezone) {\r\n                if (!date) {\r\n                    return '';\r\n                }\r\n\r\n                // All of the dates created through ng-material *should* be set to midnight.\r\n                // If we encounter a date where the localeTime shows at 11pm instead of midnight,\r\n                // we have run into an issue with DST where we need to increment the hour by one:\r\n                // var d = new Date(1992, 9, 8, 0, 0, 0);\r\n                // d.toLocaleString(); // == \""10/7/1992, 11:00:00 PM\""\r\n                var localeTime = date.toLocaleTimeString();\r\n                var formatDate = date;\r\n                if (date.getHours() === 0 &&\r\n                    (localeTime.indexOf('11:') !== -1 || localeTime.indexOf('23:') !== -1)) {\r\n                    formatDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 1, 0, 0);\r\n                }\r\n\r\n                return moment(date).format('jYYYY/jMM/jDD'); // $filter('date')(formatDate, 'M/d/yyyy', timezone);\r\n            }\r\n\r\n            /**\r\n             * Default string-to-date parsing function.\r\n             * @param {string} dateString\r\n             * @returns {!Date}\r\n             */\r\n            function defaultParseDate(dateString) {\r\n                return moment(dateString, 'jYYYY/jM/jD').toDate();\r\n            }\r\n\r\n            /**\r\n             * Default function to determine whether a string makes sense to be\r\n             * parsed to a Date object.\r\n             *\r\n             * This is very permissive and is just a basic sanity check to ensure that\r\n             * things like single integers aren't able to be parsed into dates.\r\n             * @param {string} dateString\r\n             * @returns {boolean}\r\n             */\r\n            function defaultIsDateComplete(dateString) {\r\n                dateString = dateString.trim();\r\n\r\n                // Looks for three chunks of content (either numbers or text) separated\r\n                // by delimiters.\r\n                var re = /^(([a-zA-Z]{3,}|[0-9]{1,4})([ \\.,]+|[\\/\\-])){2}([a-zA-Z]{3,}|[0-9]{1,4})$/;\r\n                return re.test(dateString);\r\n            }\r\n\r\n            /**\r\n             * Default date-to-string formatter to get a month header.\r\n             * @param {!Date} date\r\n             * @returns {string}\r\n             */\r\n            function defaultMonthHeaderFormatter(date) {\r\n                var pd = moment(date);\r\n                return service.shortMonths[pd.jMonth()] + ' ' + pd.jYear();\r\n            }\r\n\r\n            /**\r\n             * Default formatter for a month.\r\n             * @param {!Date} date\r\n             * @returns {string}\r\n             */\r\n            function defaultMonthFormatter(date) {\r\n                var pd = moment(date);\r\n                return service.months[pd.jMonth()] + ' ' + pd.jYear();\r\n            }\r\n\r\n            /**\r\n             * Default week number formatter.\r\n             * @param number\r\n             * @returns {string}\r\n             */\r\n            function defaultWeekNumberFormatter(number) {\r\n                return 'هفته ' + number;\r\n            }\r\n\r\n            /**\r\n             * Default formatter for date cell aria-labels.\r\n             * @param {!Date} date\r\n             * @returns {string}\r\n             */\r\n            function defaultLongDateFormatter(date) {\r\n                // Example: 'Thursday June 18 2015'\r\n                var pd = moment(date);\r\n                return [\r\n                    service.days[pd.day()],\r\n                    service.dates[pd.jDate()],\r\n                    service.months[pd.jMonth()],\r\n                    pd.jYear()\r\n                ].join(' ');\r\n            }\r\n\r\n            // The default \""short\"" day strings are the first character of each day,\r\n            // e.g., \""Monday\"" => \""M\"".\r\n            var defaultShortDays = $locale.DATETIME_FORMATS.SHORTDAY.map(function(day) {\r\n                return day.substring(0, 1);\r\n            });\r\n\r\n            // The default dates are simply the numbers 1 through 31.\r\n            var defaultDates = Array(32);\r\n            for (var i = 1; i <= 31; i++) {\r\n                defaultDates[i] = i;\r\n            }\r\n\r\n            // Default ARIA messages are in English (US).\r\n            var defaultMsgCalendar = 'تقویم';\r\n            var defaultMsgOpenCalendar = 'گشودن تقویم';\r\n\r\n            // Default start/end dates that are rendered in the calendar.\r\n            var defaultFirstRenderableDate = new Date(1880, 0, 1);\r\n            var defaultLastRendereableDate = new Date(defaultFirstRenderableDate.getFullYear() + 250, 0, 1);\r\n\r\n            var service = {\r\n                months: this.months || //$locale.DATETIME_FORMATS.MONTH,\r\n                    [\r\n                        \""فروردین\"",\r\n                        \""اردیبهشت\"",\r\n                        \""خرداد\"",\r\n                        \""تیر\"",\r\n                        \""مرداد\"",\r\n                        \""شهریور\"",\r\n                        \""مهر\"",\r\n                        \""آبان\"",\r\n                        \""آذر\"",\r\n                        \""دی\"",\r\n                        \""بهمن\"",\r\n                        \""اسفند\""\r\n                    ],\r\n                shortMonths: this.shortMonths || //$locale.DATETIME_FORMATS.SHORTMONTH,\r\n                    [\r\n                        \""فروردین\"",\r\n                        \""اردیبهشت\"",\r\n                        \""خرداد\"",\r\n                        \""تیر\"",\r\n                        \""مرداد\"",\r\n                        \""شهریور\"",\r\n                        \""مهر\"",\r\n                        \""آبان\"",\r\n                        \""آذر\"",\r\n                        \""دی\"",\r\n                        \""بهمن\"",\r\n                        \""اسفند\""\r\n                    ],\r\n                days: this.days || //$locale.DATETIME_FORMATS.DAY,\r\n                    [\r\n                        \""یکشنبه\"",\r\n                        \""دوشنبه\"",\r\n                        \""سه‌شنبه\"",\r\n                        \""چهارشنبه\"",\r\n                        \""پنجشنبه\"",\r\n                        \""جمعه\"",\r\n                        \""شنبه\""\r\n                    ],\r\n                shortDays: this.shortDays || //defaultShortDays,\r\n                    [\r\n                        \""ی\"",\r\n                        \""د\"",\r\n                        \""س\"",\r\n                        \""چ\"",\r\n                        \""پ\"",\r\n                        \""ج\"",\r\n                        \""ش\""\r\n                    ],\r\n                dates: this.dates || defaultDates,\r\n                firstDayOfWeek: this.firstDayOfWeek || 6,\r\n                formatDate: this.formatDate || defaultFormatDate,\r\n                parseDate: this.parseDate || defaultParseDate,\r\n                isDateComplete: this.isDateComplete || defaultIsDateComplete,\r\n                monthHeaderFormatter: this.monthHeaderFormatter || defaultMonthHeaderFormatter,\r\n                monthFormatter: this.monthFormatter || defaultMonthFormatter,\r\n                weekNumberFormatter: this.weekNumberFormatter || defaultWeekNumberFormatter,\r\n                longDateFormatter: this.longDateFormatter || defaultLongDateFormatter,\r\n                msgCalendar: this.msgCalendar || defaultMsgCalendar,\r\n                msgOpenCalendar: this.msgOpenCalendar || defaultMsgOpenCalendar,\r\n                firstRenderableDate: this.firstRenderableDate || defaultFirstRenderableDate,\r\n                lastRenderableDate: this.lastRenderableDate || defaultLastRendereableDate\r\n            };\r\n\r\n            return service;\r\n        };\r\n\r\n        $provide.provider('$mdPersianDateLocale', new PersianDateLocaleProvider());\r\n    });\r\n})();\n\n\n// WEBPACK FOOTER //\n// ./src/js/dateLocaleProvider.js"",""(function() {\r\n  'use strict';\r\n\r\n  // POST RELEASE\r\n  // TODO(jelbourn): Demo that uses moment.js\r\n  // TODO(jelbourn): make sure this plays well with validation and ngMessages.\r\n  // TODO(jelbourn): calendar pane doesn't open up outside of visible viewport.\r\n  // TODO(jelbourn): forward more attributes to the internal input (required, autofocus, etc.)\r\n  // TODO(jelbourn): something better for mobile (calendar panel takes up entire screen?)\r\n  // TODO(jelbourn): input behavior (masking? auto-complete?)\r\n\r\n\r\n  angular.module('angular-material-persian-datepicker')\r\n      .directive('mdPersianDatepicker', persianDatePickerDirective);\r\n\r\n  /**\r\n   * @ngdoc directive\r\n   * @name mdPersianDatepicker\r\n   * @module angular-material-persian-datepicker\r\n   *\r\n   * @param {Date} ng-model The component's model. Expects either a JavaScript Date object or a value that can be parsed into one (e.g. a ISO 8601 string).\r\n   * @param {Object=} ng-model-options Allows tuning of the way in which `ng-model` is being updated. Also allows\r\n   * for a timezone to be specified. <a href=\""https://docs.angularjs.org/api/ng/directive/ngModelOptions#usage\"">Read more at the ngModelOptions docs.</a>\r\n   * @param {expression=} ng-change Expression evaluated when the model value changes.\r\n   * @param {expression=} ng-focus Expression evaluated when the input is focused or the calendar is opened.\r\n   * @param {expression=} ng-blur Expression evaluated when focus is removed from the input or the calendar is closed.\r\n   * @param {boolean=} ng-disabled Whether the datepicker is disabled.\r\n   * @param {boolean=} ng-required Whether a value is required for the datepicker.\r\n   * @param {Date=} md-min-date Expression representing a min date (inclusive).\r\n   * @param {Date=} md-max-date Expression representing a max date (inclusive).\r\n   * @param {(function(Date): boolean)=} md-date-filter Function expecting a date and returning a boolean whether it can be selected or not.\r\n   * @param {String=} md-placeholder The date input placeholder value.\r\n   * @param {String=} md-open-on-focus When present, the calendar will be opened when the input is focused.\r\n   * @param {Boolean=} md-is-open Expression that can be used to open the datepicker's calendar on-demand.\r\n   * @param {String=} md-current-view Default open view of the calendar pane. Can be either \""month\"" or \""year\"".\r\n   * @param {String=} md-hide-icons Determines which datepicker icons should be hidden. Note that this may cause the\r\n   * datepicker to not align properly with other components. **Use at your own risk.** Possible values are:\r\n   * * `\""all\""` - Hides all icons.\r\n   * * `\""calendar\""` - Only hides the calendar icon.\r\n   * * `\""triangle\""` - Only hides the triangle icon.\r\n   * @param {Object=} md-date-locale Allows for the values from the `$mdPersianDateLocaleProvider` to be\r\n   * ovewritten on a per-element basis (e.g. `msgOpenCalendar` can be overwritten with\r\n   * `md-date-locale=\""{ msgOpenCalendar: 'Open a special calendar' }\""`).\r\n   *\r\n   * @description\r\n   * `<md-persian-datepicker>` is a component used to select a single date.\r\n   * For information on how to configure internationalization for the date picker,\r\n   * see `$mdPersianDateLocaleProvider`.\r\n   *\r\n   * This component supports [ngMessages](https://docs.angularjs.org/api/ngMessages/directive/ngMessages).\r\n   * Supported attributes are:\r\n   * * `required`: whether a required date is not set.\r\n   * * `mindate`: whether the selected date is before the minimum allowed date.\r\n   * * `maxdate`: whether the selected date is after the maximum allowed date.\r\n   * * `debounceInterval`: ms to delay input processing (since last debounce reset); default value 500ms\r\n   *\r\n   * @usage\r\n   * <hljs lang=\""html\"">\r\n   *   <md-persian-datepicker ng-model=\""birthday\""></md-datepicker>\r\n   * </hljs>\r\n   *\r\n   */\r\n\r\n  function persianDatePickerDirective($$mdSvgRegistry, $mdUtil, $mdAria, inputDirective) {\r\n    return {\r\n      template: function(tElement, tAttrs) {\r\n        // Buttons are not in the tab order because users can open the calendar via keyboard\r\n        // interaction on the text input, and multiple tab stops for one component (picker)\r\n        // may be confusing.\r\n        var hiddenIcons = tAttrs.mdHideIcons;\r\n        var ariaLabelValue = tAttrs.ariaLabel || tAttrs.mdPlaceholder;\r\n\r\n        var calendarButton = (hiddenIcons === 'all' || hiddenIcons === 'calendar') ? '' :\r\n          '<md-button class=\""md-datepicker-button md-icon-button\"" type=\""button\"" ' +\r\n              'tabindex=\""-1\"" aria-hidden=\""true\"" ' +\r\n              'ng-click=\""ctrl.openCalendarPane($event)\"">' +\r\n            '<md-icon class=\""md-datepicker-calendar-icon\"" aria-label=\""md-calendar\"" ' +\r\n                     'md-svg-src=\""' + $$mdSvgRegistry.mdCalendar + '\""></md-icon>' +\r\n          '</md-button>';\r\n\r\n        var triangleButton = '';\r\n\r\n        if (hiddenIcons !== 'all' && hiddenIcons !== 'triangle') {\r\n          triangleButton = '' +\r\n            '<md-button type=\""button\"" md-no-ink ' +\r\n              'class=\""md-datepicker-triangle-button md-icon-button\"" ' +\r\n              'ng-click=\""ctrl.openCalendarPane($event)\"" ' +\r\n              'aria-label=\""{{::ctrl.locale.msgOpenCalendar}}\"">' +\r\n            '<div class=\""md-datepicker-expand-triangle\""></div>' +\r\n          '</md-button>';\r\n\r\n          tElement.addClass(HAS_TRIANGLE_ICON_CLASS);\r\n        }\r\n\r\n        return calendarButton +\r\n        '<div class=\""md-datepicker-input-container\"" ng-class=\""{\\'md-datepicker-focused\\': ctrl.isFocused}\"">' +\r\n          '<input ' +\r\n            (ariaLabelValue ? 'aria-label=\""' + ariaLabelValue + '\"" ' : '') +\r\n            'class=\""md-datepicker-input\"" ' +\r\n            'aria-haspopup=\""true\"" ' +\r\n            'aria-expanded=\""{{ctrl.isCalendarOpen}}\"" ' +\r\n            'ng-focus=\""ctrl.setFocused(true)\"" ' +\r\n            'ng-blur=\""ctrl.setFocused(false)\""> ' +\r\n            triangleButton +\r\n        '</div>' +\r\n\r\n        // This pane will be detached from here and re-attached to the document body.\r\n        '<div class=\""md-datepicker-calendar-pane md-whiteframe-z1\"" id=\""{{::ctrl.calendarPaneId}}\"">' +\r\n          '<div class=\""md-datepicker-input-mask\"">' +\r\n            '<div class=\""md-datepicker-input-mask-opaque\""></div>' +\r\n          '</div>' +\r\n          '<div class=\""md-datepicker-calendar\"">' +\r\n            '<md-persian-calendar role=\""dialog\"" aria-label=\""{{::ctrl.locale.msgCalendar}}\"" ' +\r\n                'md-current-view=\""{{::ctrl.currentView}}\""' +\r\n                'md-min-date=\""ctrl.minDate\""' +\r\n                'md-max-date=\""ctrl.maxDate\""' +\r\n                'md-date-filter=\""ctrl.dateFilter\""' +\r\n                'ng-model=\""ctrl.date\"" ng-if=\""ctrl.isCalendarOpen\"">' +\r\n            '</md-persian-calendar>' +\r\n          '</div>' +\r\n        '</div>';\r\n      },\r\n      require: ['ngModel', 'mdPersianDatepicker', '?^mdInputContainer', '?^form'],\r\n      scope: {\r\n        minDate: '=mdMinDate',\r\n        maxDate: '=mdMaxDate',\r\n        placeholder: '@mdPlaceholder',\r\n        currentView: '@mdCurrentView',\r\n        dateFilter: '=mdDateFilter',\r\n        isOpen: '=?mdIsOpen',\r\n        debounceInterval: '=mdDebounceInterval',\r\n        dateLocale: '=mdDateLocale'\r\n      },\r\n      controller: PersianDatePickerCtrl,\r\n      controllerAs: 'ctrl',\r\n      bindToController: true,\r\n      link: function(scope, element, attr, controllers) {\r\n        var ngModelCtrl = controllers[0];\r\n        var mdDatePickerCtrl = controllers[1];\r\n        var mdInputContainer = controllers[2];\r\n        var parentForm = controllers[3];\r\n        var mdNoAsterisk = $mdUtil.parseAttributeBoolean(attr.mdNoAsterisk);\r\n\r\n        mdDatePickerCtrl.configureNgModel(ngModelCtrl, mdInputContainer, inputDirective);\r\n\r\n        if (mdInputContainer) {\r\n          // We need to move the spacer after the datepicker itself,\r\n          // because md-input-container adds it after the\r\n          // md-datepicker-input by default. The spacer gets wrapped in a\r\n          // div, because it floats and gets aligned next to the datepicker.\r\n          // There are easier ways of working around this with CSS (making the\r\n          // datepicker 100% wide, change the `display` etc.), however they\r\n          // break the alignment with any other form controls.\r\n          var spacer = element[0].querySelector('.md-errors-spacer');\r\n\r\n          if (spacer) {\r\n            element.after(angular.element('<div>').append(spacer));\r\n          }\r\n\r\n          mdInputContainer.setHasPlaceholder(attr.mdPlaceholder);\r\n          mdInputContainer.input = element;\r\n          mdInputContainer.element\r\n            .addClass(INPUT_CONTAINER_CLASS)\r\n            .toggleClass(HAS_CALENDAR_ICON_CLASS, attr.mdHideIcons !== 'calendar' && attr.mdHideIcons !== 'all');\r\n\r\n          if (!mdInputContainer.label) {\r\n            $mdAria.expect(element, 'aria-label', attr.mdPlaceholder);\r\n          } else if(!mdNoAsterisk) {\r\n            attr.$observe('required', function(value) {\r\n              mdInputContainer.label.toggleClass('md-required', !!value);\r\n            });\r\n          }\r\n\r\n          scope.$watch(mdInputContainer.isErrorGetter || function() {\r\n            return ngModelCtrl.$invalid && (ngModelCtrl.$touched || (parentForm && parentForm.$submitted));\r\n          }, mdInputContainer.setInvalid);\r\n        } else if (parentForm) {\r\n          // If invalid, highlights the input when the parent form is submitted.\r\n          var parentSubmittedWatcher = scope.$watch(function() {\r\n            return parentForm.$submitted;\r\n          }, function(isSubmitted) {\r\n            if (isSubmitted) {\r\n              mdDatePickerCtrl.updateErrorState();\r\n              parentSubmittedWatcher();\r\n            }\r\n          });\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  /** Additional offset for the input's `size` attribute, which is updated based on its content. */\r\n  var EXTRA_INPUT_SIZE = 3;\r\n\r\n  /** Class applied to the container if the date is invalid. */\r\n  var INVALID_CLASS = 'md-datepicker-invalid';\r\n\r\n  /** Class applied to the datepicker when it's open. */\r\n  var OPEN_CLASS = 'md-datepicker-open';\r\n\r\n  /** Class applied to the md-input-container, if a datepicker is placed inside it */\r\n  var INPUT_CONTAINER_CLASS = '_md-datepicker-floating-label';\r\n\r\n  /** Class to be applied when the calendar icon is enabled. */\r\n  var HAS_CALENDAR_ICON_CLASS = '_md-datepicker-has-calendar-icon';\r\n\r\n  /** Class to be applied when the triangle icon is enabled. */\r\n  var HAS_TRIANGLE_ICON_CLASS = '_md-datepicker-has-triangle-icon';\r\n\r\n  /** Default time in ms to debounce input event by. */\r\n  var DEFAULT_DEBOUNCE_INTERVAL = 500;\r\n\r\n  /**\r\n   * Height of the calendar pane used to check if the pane is going outside the boundary of\r\n   * the viewport. See calendar.scss for how $md-calendar-height is computed; an extra 20px is\r\n   * also added to space the pane away from the exact edge of the screen.\r\n   *\r\n   *  This is computed statically now, but can be changed to be measured if the circumstances\r\n   *  of calendar sizing are changed.\r\n   */\r\n  var CALENDAR_PANE_HEIGHT = 368;\r\n\r\n  /**\r\n   * Width of the calendar pane used to check if the pane is going outside the boundary of\r\n   * the viewport. See calendar.scss for how $md-calendar-width is computed; an extra 20px is\r\n   * also added to space the pane away from the exact edge of the screen.\r\n   *\r\n   *  This is computed statically now, but can be changed to be measured if the circumstances\r\n   *  of calendar sizing are changed.\r\n   */\r\n  var CALENDAR_PANE_WIDTH = 360;\r\n\r\n  /** Used for checking whether the current user agent is on iOS or Android. */\r\n  var IS_MOBILE_REGEX = /ipad|iphone|ipod|android/i;\r\n\r\n  /**\r\n   * Controller for md-datepicker.\r\n   *\r\n   * @ngInject @constructor\r\n   */\r\n  function PersianDatePickerCtrl($scope, $element, $attrs, $window, $mdConstant,\r\n    $mdTheming, $mdUtil, $mdPersianDateLocale, $$mdPersianDateUtil, $$rAF, $filter) {\r\n\r\n    /** @final */\r\n    this.$window = $window;\r\n\r\n    /** @final */\r\n    this.dateUtil = $$mdPersianDateUtil;\r\n\r\n    /** @final */\r\n    this.$mdConstant = $mdConstant;\r\n\r\n    /* @final */\r\n    this.$mdUtil = $mdUtil;\r\n\r\n    /** @final */\r\n    this.$$rAF = $$rAF;\r\n\r\n    /** @final */\r\n    this.$mdPersianDateLocale = $mdPersianDateLocale;\r\n\r\n    /**\r\n     * The root document element. This is used for attaching a top-level click handler to\r\n     * close the calendar panel when a click outside said panel occurs. We use `documentElement`\r\n     * instead of body because, when scrolling is disabled, some browsers consider the body element\r\n     * to be completely off the screen and propagate events directly to the html element.\r\n     * @type {!angular.JQLite}\r\n     */\r\n    this.documentElement = angular.element(document.documentElement);\r\n\r\n    /** @type {!angular.NgModelController} */\r\n    this.ngModelCtrl = null;\r\n\r\n    /** @type {HTMLInputElement} */\r\n    this.inputElement = $element[0].querySelector('input');\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.ngInputElement = angular.element(this.inputElement);\r\n\r\n    /** @type {HTMLElement} */\r\n    this.inputContainer = $element[0].querySelector('.md-datepicker-input-container');\r\n\r\n    /** @type {HTMLElement} Floating calendar pane. */\r\n    this.calendarPane = $element[0].querySelector('.md-datepicker-calendar-pane');\r\n\r\n    /** @type {HTMLElement} Calendar icon button. */\r\n    this.calendarButton = $element[0].querySelector('.md-datepicker-button');\r\n\r\n    /**\r\n     * Element covering everything but the input in the top of the floating calendar pane.\r\n     * @type {!angular.JQLite}\r\n     */\r\n    this.inputMask = angular.element($element[0].querySelector('.md-datepicker-input-mask-opaque'));\r\n\r\n    /** @final {!angular.JQLite} */\r\n    this.$element = $element;\r\n\r\n    /** @final {!angular.Attributes} */\r\n    this.$attrs = $attrs;\r\n\r\n    /** @final {!angular.Scope} */\r\n    this.$scope = $scope;\r\n\r\n    /** @type {Date} */\r\n    this.date = null;\r\n\r\n    /** @type {boolean} */\r\n    this.isFocused = false;\r\n\r\n    /** @type {boolean} */\r\n    this.isDisabled;\r\n    this.setDisabled($element[0].disabled || angular.isString($attrs.disabled));\r\n\r\n    /** @type {boolean} Whether the date-picker's calendar pane is open. */\r\n    this.isCalendarOpen = false;\r\n\r\n    /** @type {boolean} Whether the calendar should open when the input is focused. */\r\n    this.openOnFocus = $attrs.hasOwnProperty('mdOpenOnFocus');\r\n\r\n    /** @final */\r\n    this.mdInputContainer = null;\r\n\r\n    /**\r\n     * Element from which the calendar pane was opened. Keep track of this so that we can return\r\n     * focus to it when the pane is closed.\r\n     * @type {HTMLElement}\r\n     */\r\n    this.calendarPaneOpenedFrom = null;\r\n\r\n    /** @type {String} Unique id for the calendar pane. */\r\n    this.calendarPaneId = 'md-date-pane-' + $mdUtil.nextUid();\r\n\r\n    /** Pre-bound click handler is saved so that the event listener can be removed. */\r\n    this.bodyClickHandler = angular.bind(this, this.handleBodyClick);\r\n\r\n    /**\r\n     * Name of the event that will trigger a close. Necessary to sniff the browser, because\r\n     * the resize event doesn't make sense on mobile and can have a negative impact since it\r\n     * triggers whenever the browser zooms in on a focused input.\r\n     */\r\n    this.windowEventName = IS_MOBILE_REGEX.test(\r\n      navigator.userAgent || navigator.vendor || window.opera\r\n    ) ? 'orientationchange' : 'resize';\r\n\r\n    /** Pre-bound close handler so that the event listener can be removed. */\r\n    this.windowEventHandler = $mdUtil.debounce(angular.bind(this, this.closeCalendarPane), 100);\r\n\r\n    /** Pre-bound handler for the window blur event. Allows for it to be removed later. */\r\n    this.windowBlurHandler = angular.bind(this, this.handleWindowBlur);\r\n\r\n    /** The built-in AngularJS date filter. */\r\n    this.ngDateFilter = $filter('date');\r\n\r\n    /** @type {Number} Extra margin for the left side of the floating calendar pane. */\r\n    this.leftMargin = 20;\r\n\r\n    /** @type {Number} Extra margin for the top of the floating calendar. Gets determined on the first open. */\r\n    this.topMargin = null;\r\n\r\n    // Unless the user specifies so, the datepicker should not be a tab stop.\r\n    // This is necessary because ngAria might add a tabindex to anything with an ng-model\r\n    // (based on whether or not the user has turned that particular feature on/off).\r\n    if ($attrs.tabindex) {\r\n      this.ngInputElement.attr('tabindex', $attrs.tabindex);\r\n      $attrs.$set('tabindex', null);\r\n    } else {\r\n      $attrs.$set('tabindex', '-1');\r\n    }\r\n\r\n    $attrs.$set('aria-owns', this.calendarPaneId);\r\n\r\n    $mdTheming($element);\r\n    $mdTheming(angular.element(this.calendarPane));\r\n\r\n    var self = this;\r\n\r\n    $scope.$on('$destroy', function() {\r\n      self.detachCalendarPane();\r\n    });\r\n\r\n    if ($attrs.mdIsOpen) {\r\n      $scope.$watch('ctrl.isOpen', function(shouldBeOpen) {\r\n        if (shouldBeOpen) {\r\n          self.openCalendarPane({\r\n            target: self.inputElement\r\n          });\r\n        } else {\r\n          self.closeCalendarPane();\r\n        }\r\n      });\r\n    }\r\n\r\n    // For AngularJS 1.4 and older, where there are no lifecycle hooks but bindings are pre-assigned,\r\n    // manually call the $onInit hook.\r\n    if (angular.version.major === 1 && angular.version.minor <= 4) {\r\n      this.$onInit();\r\n    }\r\n\r\n  }\r\n\r\n  /**\r\n   * AngularJS Lifecycle hook for newer AngularJS versions.\r\n   * Bindings are not guaranteed to have been assigned in the controller, but they are in the $onInit hook.\r\n   */\r\n  PersianDatePickerCtrl.prototype.$onInit = function() {\r\n\r\n    /**\r\n     * Holds locale-specific formatters, parsers, labels etc. Allows\r\n     * the user to override specific ones from the $mdPersianDateLocale provider.\r\n     * @type {!Object}\r\n     */\r\n    this.locale = this.dateLocale ? angular.extend({}, this.$mdPersianDateLocale, this.dateLocale) : this.$mdPersianDateLocale;\r\n\r\n    this.installPropertyInterceptors();\r\n    this.attachChangeListeners();\r\n    this.attachInteractionListeners();\r\n  };\r\n\r\n  /**\r\n   * Sets up the controller's reference to ngModelController and\r\n   * applies AngularJS's `input[type=\""date\""]` directive.\r\n   * @param {!angular.NgModelController} ngModelCtrl Instance of the ngModel controller.\r\n   * @param {Object} mdInputContainer Instance of the mdInputContainer controller.\r\n   * @param {Object} inputDirective Config for AngularJS's `input` directive.\r\n   */\r\n  PersianDatePickerCtrl.prototype.configureNgModel = function(ngModelCtrl, mdInputContainer, inputDirective) {\r\n    this.ngModelCtrl = ngModelCtrl;\r\n    this.mdInputContainer = mdInputContainer;\r\n\r\n    // The input needs to be [type=\""date\""] in order to be picked up by AngularJS.\r\n    this.$attrs.$set('type', 'date');\r\n\r\n    // Invoke the `input` directive link function, adding a stub for the element.\r\n    // This allows us to re-use AngularJS's logic for setting the timezone via ng-model-options.\r\n    // It works by calling the link function directly which then adds the proper `$parsers` and\r\n    // `$formatters` to the ngModel controller.\r\n    inputDirective[0].link.pre(this.$scope, {\r\n      on: angular.noop,\r\n      val: angular.noop,\r\n      0: {}\r\n    }, this.$attrs, [ngModelCtrl]);\r\n\r\n    var self = this;\r\n\r\n    // Responds to external changes to the model value.\r\n    self.ngModelCtrl.$formatters.push(function(value) {\r\n      var parsedValue = angular.isDefined(value) ? Date.parse(value) : null;\r\n\r\n      // `parsedValue` is the time since epoch if valid or `NaN` if invalid.\r\n      if (!isNaN(parsedValue) && angular.isNumber(parsedValue)) {\r\n        value = new Date(parsedValue);\r\n      }\r\n\r\n      if (value && !(value instanceof Date)) {\r\n        throw Error(\r\n          'The ng-model for md-datepicker must be a Date instance or a value ' +\r\n          'that can be parsed into a date. Currently the model is of type: ' + typeof value\r\n        );\r\n      }\r\n\r\n      self.onExternalChange(value);\r\n\r\n      return value;\r\n    });\r\n\r\n    // Responds to external error state changes (e.g. ng-required based on another input).\r\n    ngModelCtrl.$viewChangeListeners.unshift(angular.bind(this, this.updateErrorState));\r\n\r\n    // Forwards any events from the input to the root element. This is necessary to get `updateOn`\r\n    // working for events that don't bubble (e.g. 'blur') since AngularJS binds the handlers to\r\n    // the `<md-persian-datepicker>`.\r\n    var updateOn = self.$mdUtil.getModelOption(ngModelCtrl, 'updateOn');\r\n\r\n    if (updateOn) {\r\n      this.ngInputElement.on(\r\n        updateOn,\r\n        angular.bind(this.$element, this.$element.triggerHandler, updateOn)\r\n      );\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Attach event listeners for both the text input and the md-persian-calendar.\r\n   * Events are used instead of ng-model so that updates don't infinitely update the other\r\n   * on a change. This should also be more performant than using a $watch.\r\n   */\r\n  PersianDatePickerCtrl.prototype.attachChangeListeners = function() {\r\n    var self = this;\r\n\r\n    self.$scope.$on('md-calendar-change', function(event, date) {\r\n      self.setModelValue(date);\r\n      self.onExternalChange(date);\r\n      self.closeCalendarPane();\r\n    });\r\n\r\n    self.ngInputElement.on('input', angular.bind(self, self.resizeInputElement));\r\n\r\n    var debounceInterval = angular.isDefined(this.debounceInterval) ?\r\n        this.debounceInterval : DEFAULT_DEBOUNCE_INTERVAL;\r\n    self.ngInputElement.on('input', self.$mdUtil.debounce(self.handleInputEvent,\r\n        debounceInterval, self));\r\n  };\r\n\r\n  /** Attach event listeners for user interaction. */\r\n  PersianDatePickerCtrl.prototype.attachInteractionListeners = function() {\r\n    var self = this;\r\n    var $scope = this.$scope;\r\n    var keyCodes = this.$mdConstant.KEY_CODE;\r\n\r\n    // Add event listener through angular so that we can triggerHandler in unit tests.\r\n    self.ngInputElement.on('keydown', function(event) {\r\n      if (event.altKey && event.keyCode == keyCodes.DOWN_ARROW) {\r\n        self.openCalendarPane(event);\r\n        $scope.$digest();\r\n      }\r\n    });\r\n\r\n    if (self.openOnFocus) {\r\n      self.ngInputElement.on('focus', angular.bind(self, self.openCalendarPane));\r\n      angular.element(self.$window).on('blur', self.windowBlurHandler);\r\n\r\n      $scope.$on('$destroy', function() {\r\n        angular.element(self.$window).off('blur', self.windowBlurHandler);\r\n      });\r\n    }\r\n\r\n    $scope.$on('md-calendar-close', function() {\r\n      self.closeCalendarPane();\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Capture properties set to the date-picker and imperitively handle internal changes.\r\n   * This is done to avoid setting up additional $watches.\r\n   */\r\n  PersianDatePickerCtrl.prototype.installPropertyInterceptors = function() {\r\n    var self = this;\r\n\r\n    if (this.$attrs.ngDisabled) {\r\n      // The expression is to be evaluated against the directive element's scope and not\r\n      // the directive's isolate scope.\r\n      var scope = this.$scope.$parent;\r\n\r\n      if (scope) {\r\n        scope.$watch(this.$attrs.ngDisabled, function(isDisabled) {\r\n          self.setDisabled(isDisabled);\r\n        });\r\n      }\r\n    }\r\n\r\n    Object.defineProperty(this, 'placeholder', {\r\n      get: function() { return self.inputElement.placeholder; },\r\n      set: function(value) { self.inputElement.placeholder = value || ''; }\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Sets whether the date-picker is disabled.\r\n   * @param {boolean} isDisabled\r\n   */\r\n  PersianDatePickerCtrl.prototype.setDisabled = function(isDisabled) {\r\n    this.isDisabled = isDisabled;\r\n    this.inputElement.disabled = isDisabled;\r\n\r\n    if (this.calendarButton) {\r\n      this.calendarButton.disabled = isDisabled;\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Sets the custom ngModel.$error flags to be consumed by ngMessages. Flags are:\r\n   *   - mindate: whether the selected date is before the minimum date.\r\n   *   - maxdate: whether the selected flag is after the maximum date.\r\n   *   - filtered: whether the selected date is allowed by the custom filtering function.\r\n   *   - valid: whether the entered text input is a valid date\r\n   *\r\n   * The 'required' flag is handled automatically by ngModel.\r\n   *\r\n   * @param {Date=} opt_date Date to check. If not given, defaults to the datepicker's model value.\r\n   */\r\n  PersianDatePickerCtrl.prototype.updateErrorState = function(opt_date) {\r\n    var date = opt_date || this.date;\r\n\r\n    // Clear any existing errors to get rid of anything that's no longer relevant.\r\n    this.clearErrorState();\r\n\r\n    if (this.dateUtil.isValidDate(date)) {\r\n      // Force all dates to midnight in order to ignore the time portion.\r\n      date = this.dateUtil.createDateAtMidnight(date);\r\n\r\n      if (this.dateUtil.isValidDate(this.minDate)) {\r\n        var minDate = this.dateUtil.createDateAtMidnight(this.minDate);\r\n        this.ngModelCtrl.$setValidity('mindate', date >= minDate);\r\n      }\r\n\r\n      if (this.dateUtil.isValidDate(this.maxDate)) {\r\n        var maxDate = this.dateUtil.createDateAtMidnight(this.maxDate);\r\n        this.ngModelCtrl.$setValidity('maxdate', date <= maxDate);\r\n      }\r\n\r\n      if (angular.isFunction(this.dateFilter)) {\r\n        this.ngModelCtrl.$setValidity('filtered', this.dateFilter(date));\r\n      }\r\n    } else {\r\n      // The date is seen as \""not a valid date\"" if there is *something* set\r\n      // (i.e.., not null or undefined), but that something isn't a valid date.\r\n      this.ngModelCtrl.$setValidity('valid', date == null);\r\n    }\r\n\r\n    angular.element(this.inputContainer).toggleClass(INVALID_CLASS, !this.ngModelCtrl.$valid);\r\n  };\r\n\r\n  /** Clears any error flags set by `updateErrorState`. */\r\n  PersianDatePickerCtrl.prototype.clearErrorState = function() {\r\n    this.inputContainer.classList.remove(INVALID_CLASS);\r\n    ['mindate', 'maxdate', 'filtered', 'valid'].forEach(function(field) {\r\n      this.ngModelCtrl.$setValidity(field, true);\r\n    }, this);\r\n  };\r\n\r\n  /** Resizes the input element based on the size of its content. */\r\n  PersianDatePickerCtrl.prototype.resizeInputElement = function() {\r\n    this.inputElement.size = this.inputElement.value.length + EXTRA_INPUT_SIZE;\r\n  };\r\n\r\n  /**\r\n   * Sets the model value if the user input is a valid date.\r\n   * Adds an invalid class to the input element if not.\r\n   */\r\n  PersianDatePickerCtrl.prototype.handleInputEvent = function() {\r\n    var inputString = this.inputElement.value;\r\n    var parsedDate = inputString ? this.locale.parseDate(inputString) : null;\r\n    this.dateUtil.setDateTimeToMidnight(parsedDate);\r\n\r\n    // An input string is valid if it is either empty (representing no date)\r\n    // or if it parses to a valid date that the user is allowed to select.\r\n    var isValidInput = inputString == '' || (\r\n      this.dateUtil.isValidDate(parsedDate) &&\r\n      this.locale.isDateComplete(inputString) &&\r\n      this.isDateEnabled(parsedDate)\r\n    );\r\n\r\n    // The datepicker's model is only updated when there is a valid input.\r\n    if (isValidInput) {\r\n      this.setModelValue(parsedDate);\r\n      this.date = parsedDate;\r\n    }\r\n\r\n    this.updateErrorState(parsedDate);\r\n  };\r\n\r\n  /**\r\n   * Check whether date is in range and enabled\r\n   * @param {Date=} opt_date\r\n   * @return {boolean} Whether the date is enabled.\r\n   */\r\n  PersianDatePickerCtrl.prototype.isDateEnabled = function(opt_date) {\r\n    return this.dateUtil.isDateWithinRange(opt_date, this.minDate, this.maxDate) &&\r\n          (!angular.isFunction(this.dateFilter) || this.dateFilter(opt_date));\r\n  };\r\n\r\n  /** Position and attach the floating calendar to the document. */\r\n  PersianDatePickerCtrl.prototype.attachCalendarPane = function() {\r\n    var calendarPane = this.calendarPane;\r\n    var body = document.body;\r\n\r\n    calendarPane.style.transform = '';\r\n    this.$element.addClass(OPEN_CLASS);\r\n    this.mdInputContainer && this.mdInputContainer.element.addClass(OPEN_CLASS);\r\n    angular.element(body).addClass('md-datepicker-is-showing');\r\n\r\n    var elementRect = this.inputContainer.getBoundingClientRect();\r\n    var bodyRect = body.getBoundingClientRect();\r\n\r\n    if (!this.topMargin || this.topMargin < 0) {\r\n      this.topMargin = (this.inputMask.parent().prop('clientHeight') - this.ngInputElement.prop('clientHeight')) / 2;\r\n    }\r\n\r\n    // Check to see if the calendar pane would go off the screen. If so, adjust position\r\n    // accordingly to keep it within the viewport.\r\n    var paneTop = elementRect.top - bodyRect.top - this.topMargin;\r\n    var paneLeft = elementRect.left - bodyRect.left - this.leftMargin;\r\n\r\n    // If ng-material has disabled body scrolling (for example, if a dialog is open),\r\n    // then it's possible that the already-scrolled body has a negative top/left. In this case,\r\n    // we want to treat the \""real\"" top as (0 - bodyRect.top). In a normal scrolling situation,\r\n    // though, the top of the viewport should just be the body's scroll position.\r\n    var viewportTop = (bodyRect.top < 0 && document.body.scrollTop == 0) ?\r\n        -bodyRect.top :\r\n        document.body.scrollTop;\r\n\r\n    var viewportLeft = (bodyRect.left < 0 && document.body.scrollLeft == 0) ?\r\n        -bodyRect.left :\r\n        document.body.scrollLeft;\r\n\r\n    var viewportBottom = viewportTop + this.$window.innerHeight;\r\n    var viewportRight = viewportLeft + this.$window.innerWidth;\r\n\r\n    // Creates an overlay with a hole the same size as element. We remove a pixel or two\r\n    // on each end to make it overlap slightly. The overlay's background is added in\r\n    // the theme in the form of a box-shadow with a huge spread.\r\n    this.inputMask.css({\r\n      position: 'absolute',\r\n      left: this.leftMargin + 'px',\r\n      top: this.topMargin + 'px',\r\n      width: (elementRect.width - 1) + 'px',\r\n      height: (elementRect.height - 2) + 'px'\r\n    });\r\n\r\n    // If the right edge of the pane would be off the screen and shifting it left by the\r\n    // difference would not go past the left edge of the screen. If the calendar pane is too\r\n    // big to fit on the screen at all, move it to the left of the screen and scale the entire\r\n    // element down to fit.\r\n    if (paneLeft + CALENDAR_PANE_WIDTH > viewportRight) {\r\n      if (viewportRight - CALENDAR_PANE_WIDTH > 0) {\r\n        paneLeft = viewportRight - CALENDAR_PANE_WIDTH;\r\n      } else {\r\n        paneLeft = viewportLeft;\r\n        var scale = this.$window.innerWidth / CALENDAR_PANE_WIDTH;\r\n        calendarPane.style.transform = 'scale(' + scale + ')';\r\n      }\r\n\r\n      calendarPane.classList.add('md-datepicker-pos-adjusted');\r\n    }\r\n\r\n    // If the bottom edge of the pane would be off the screen and shifting it up by the\r\n    // difference would not go past the top edge of the screen.\r\n    if (paneTop + CALENDAR_PANE_HEIGHT > viewportBottom &&\r\n        viewportBottom - CALENDAR_PANE_HEIGHT > viewportTop) {\r\n      paneTop = viewportBottom - CALENDAR_PANE_HEIGHT;\r\n      calendarPane.classList.add('md-datepicker-pos-adjusted');\r\n    }\r\n\r\n    calendarPane.style.left = paneLeft + 'px';\r\n    calendarPane.style.top = paneTop + 'px';\r\n    document.body.appendChild(calendarPane);\r\n\r\n    // Add CSS class after one frame to trigger open animation.\r\n    this.$$rAF(function() {\r\n      calendarPane.classList.add('md-pane-open');\r\n    });\r\n  };\r\n\r\n  /** Detach the floating calendar pane from the document. */\r\n  PersianDatePickerCtrl.prototype.detachCalendarPane = function() {\r\n    this.$element.removeClass(OPEN_CLASS);\r\n    this.mdInputContainer && this.mdInputContainer.element.removeClass(OPEN_CLASS);\r\n    angular.element(document.body).removeClass('md-datepicker-is-showing');\r\n    this.calendarPane.classList.remove('md-pane-open');\r\n    this.calendarPane.classList.remove('md-datepicker-pos-adjusted');\r\n\r\n    if (this.isCalendarOpen) {\r\n      this.$mdUtil.enableScrolling();\r\n    }\r\n\r\n    if (this.calendarPane.parentNode) {\r\n      // Use native DOM removal because we do not want any of the\r\n      // angular state of this element to be disposed.\r\n      this.calendarPane.parentNode.removeChild(this.calendarPane);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Open the floating calendar pane.\r\n   * @param {Event} event\r\n   */\r\n  PersianDatePickerCtrl.prototype.openCalendarPane = function(event) {\r\n    if (!this.isCalendarOpen && !this.isDisabled && !this.inputFocusedOnWindowBlur) {\r\n      this.isCalendarOpen = this.isOpen = true;\r\n      this.calendarPaneOpenedFrom = event.target;\r\n\r\n      // Because the calendar pane is attached directly to the body, it is possible that the\r\n      // rest of the component (input, etc) is in a different scrolling container, such as\r\n      // an md-content. This means that, if the container is scrolled, the pane would remain\r\n      // stationary. To remedy this, we disable scrolling while the calendar pane is open, which\r\n      // also matches the native behavior for things like `<select>` on Mac and Windows.\r\n      this.$mdUtil.disableScrollAround(this.calendarPane);\r\n\r\n      this.attachCalendarPane();\r\n      this.focusCalendar();\r\n      this.evalAttr('ngFocus');\r\n\r\n      // Attach click listener inside of a timeout because, if this open call was triggered by a\r\n      // click, we don't want it to be immediately propogated up to the body and handled.\r\n      var self = this;\r\n      this.$mdUtil.nextTick(function() {\r\n        // Use 'touchstart` in addition to click in order to work on iOS Safari, where click\r\n        // events aren't propogated under most circumstances.\r\n        // See http://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\r\n        self.documentElement.on('click touchstart', self.bodyClickHandler);\r\n      }, false);\r\n\r\n      window.addEventListener(this.windowEventName, this.windowEventHandler);\r\n    }\r\n  };\r\n\r\n  /** Close the floating calendar pane. */\r\n  PersianDatePickerCtrl.prototype.closeCalendarPane = function() {\r\n    if (this.isCalendarOpen) {\r\n      var self = this;\r\n\r\n      self.detachCalendarPane();\r\n      self.ngModelCtrl.$setTouched();\r\n      self.evalAttr('ngBlur');\r\n\r\n      self.documentElement.off('click touchstart', self.bodyClickHandler);\r\n      window.removeEventListener(self.windowEventName, self.windowEventHandler);\r\n\r\n      self.calendarPaneOpenedFrom.focus();\r\n      self.calendarPaneOpenedFrom = null;\r\n\r\n      if (self.openOnFocus) {\r\n        // Ensures that all focus events have fired before resetting\r\n        // the calendar. Prevents the calendar from reopening immediately\r\n        // in IE when md-open-on-focus is set. Also it needs to trigger\r\n        // a digest, in order to prevent issues where the calendar wasn't\r\n        // showing up on the next open.\r\n        self.$mdUtil.nextTick(reset);\r\n      } else {\r\n        reset();\r\n      }\r\n    }\r\n\r\n    function reset(){\r\n      self.isCalendarOpen = self.isOpen = false;\r\n    }\r\n  };\r\n\r\n  /** Gets the controller instance for the calendar in the floating pane. */\r\n  PersianDatePickerCtrl.prototype.getCalendarCtrl = function() {\r\n    return angular.element(this.calendarPane.querySelector('md-persian-calendar')).controller('mdPersianCalendar');\r\n  };\r\n\r\n  /** Focus the calendar in the floating pane. */\r\n  PersianDatePickerCtrl.prototype.focusCalendar = function() {\r\n    // Use a timeout in order to allow the calendar to be rendered, as it is gated behind an ng-if.\r\n    var self = this;\r\n    this.$mdUtil.nextTick(function() {\r\n      self.getCalendarCtrl().focus();\r\n    }, false);\r\n  };\r\n\r\n  /**\r\n   * Sets whether the input is currently focused.\r\n   * @param {boolean} isFocused\r\n   */\r\n  PersianDatePickerCtrl.prototype.setFocused = function(isFocused) {\r\n    if (!isFocused) {\r\n      this.ngModelCtrl.$setTouched();\r\n    }\r\n\r\n    // The ng* expressions shouldn't be evaluated when mdOpenOnFocus is on,\r\n    // because they also get called when the calendar is opened/closed.\r\n    if (!this.openOnFocus) {\r\n      this.evalAttr(isFocused ? 'ngFocus' : 'ngBlur');\r\n    }\r\n\r\n    this.isFocused = isFocused;\r\n  };\r\n\r\n  /**\r\n   * Handles a click on the document body when the floating calendar pane is open.\r\n   * Closes the floating calendar pane if the click is not inside of it.\r\n   * @param {MouseEvent} event\r\n   */\r\n  PersianDatePickerCtrl.prototype.handleBodyClick = function(event) {\r\n    if (this.isCalendarOpen) {\r\n      var isInCalendar = this.$mdUtil.getClosest(event.target, 'md-persian-calendar');\r\n\r\n      if (!isInCalendar) {\r\n        this.closeCalendarPane();\r\n      }\r\n\r\n      this.$scope.$digest();\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Handles the event when the user navigates away from the current tab. Keeps track of\r\n   * whether the input was focused when the event happened, in order to prevent the calendar\r\n   * from re-opening.\r\n   */\r\n  PersianDatePickerCtrl.prototype.handleWindowBlur = function() {\r\n    this.inputFocusedOnWindowBlur = document.activeElement === this.inputElement;\r\n  };\r\n\r\n  /**\r\n   * Evaluates an attribute expression against the parent scope.\r\n   * @param {String} attr Name of the attribute to be evaluated.\r\n   */\r\n  PersianDatePickerCtrl.prototype.evalAttr = function(attr) {\r\n    if (this.$attrs[attr]) {\r\n      this.$scope.$parent.$eval(this.$attrs[attr]);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Sets the ng-model value by first converting the date object into a strng. Converting it\r\n   * is necessary, in order to pass AngularJS's `input[type=\""date\""]` validations. AngularJS turns\r\n   * the value into a Date object afterwards, before setting it on the model.\r\n   * @param {Date=} value Date to be set as the model value.\r\n   */\r\n  PersianDatePickerCtrl.prototype.setModelValue = function(value) {\r\n    var timezone = this.$mdUtil.getModelOption(this.ngModelCtrl, 'timezone');\r\n    this.ngModelCtrl.$setViewValue(this.ngDateFilter(value, 'yyyy-MM-dd', timezone));\r\n  };\r\n\r\n  /**\r\n   * Updates the datepicker when a model change occurred externally.\r\n   * @param {Date=} value Value that was set to the model.\r\n   */\r\n  PersianDatePickerCtrl.prototype.onExternalChange = function(value) {\r\n    var timezone = this.$mdUtil.getModelOption(this.ngModelCtrl, 'timezone');\r\n\r\n    this.date = value;\r\n    this.inputElement.value = this.locale.formatDate(value, timezone);\r\n    this.mdInputContainer && this.mdInputContainer.setHasValue(!!value);\r\n    this.resizeInputElement();\r\n    this.updateErrorState();\r\n  };\r\n})();\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/datepickerDirective.js"",""(function() {\r\n    'use strict';\r\n\r\n    /**\r\n     * Utility for performing date calculations to facilitate operation of the calendar and\r\n     * datepicker.\r\n     */\r\n    angular.module('angular-material-persian-datepicker').factory('$$mdPersianDateUtil', function() {\r\n        return {\r\n            getFirstDateOfMonth: getFirstDateOfMonth,\r\n            getNumberOfDaysInMonth: getNumberOfDaysInMonth,\r\n            getDateInNextMonth: getDateInNextMonth,\r\n            getDateInPreviousMonth: getDateInPreviousMonth,\r\n            isInNextMonth: isInNextMonth,\r\n            isInPreviousMonth: isInPreviousMonth,\r\n            getDateMidpoint: getDateMidpoint,\r\n            isSameMonthAndYear: isSameMonthAndYear,\r\n            getWeekOfMonth: getWeekOfMonth,\r\n            incrementDays: incrementDays,\r\n            incrementMonths: incrementMonths,\r\n            getLastDateOfMonth: getLastDateOfMonth,\r\n            isSameDay: isSameDay,\r\n            getMonthDistance: getMonthDistance,\r\n            isValidDate: isValidDate,\r\n            setDateTimeToMidnight: setDateTimeToMidnight,\r\n            createDateAtMidnight: createDateAtMidnight,\r\n            isDateWithinRange: isDateWithinRange,\r\n            incrementYears: incrementYears,\r\n            getYearDistance: getYearDistance,\r\n            clampDate: clampDate,\r\n            getTimestampFromNode: getTimestampFromNode,\r\n            isMonthWithinRange: isMonthWithinRange\r\n        };\r\n\r\n        /**\r\n         * Gets the first day of the month for the given date's month.\r\n         * @param {Date} date\r\n         * @returns {Date}\r\n         */\r\n        function getFirstDateOfMonth(date) {\r\n            return moment(date).startOf('jMonth').toDate();\r\n        }\r\n\r\n        /**\r\n         * Gets the number of days in the month for the given date's month.\r\n         * @param date\r\n         * @returns {number}\r\n         */\r\n        function getNumberOfDaysInMonth(date) {\r\n            var pd = moment(date);\r\n            return moment.jDaysInMonth(pd.jYear(), pd.jMonth());\r\n        }\r\n\r\n        /**\r\n         * Get an arbitrary date in the month after the given date's month.\r\n         * @param date\r\n         * @returns {Date}\r\n         */\r\n        function getDateInNextMonth(date) {\r\n            var pd = moment(date);\r\n            return pd.add(1, 'jMonth').toDate();\r\n        }\r\n\r\n        /**\r\n         * Get an arbitrary date in the month before the given date's month.\r\n         * @param date\r\n         * @returns {Date}\r\n         */\r\n        function getDateInPreviousMonth(date) {\r\n            var pd = moment(date);\r\n            return pd.add(-1, 'jMonth').toDate();\r\n        }\r\n\r\n        /**\r\n         * Gets whether two dates have the same month and year.\r\n         * @param {Date} d1\r\n         * @param {Date} d2\r\n         * @returns {boolean}\r\n         */\r\n        function isSameMonthAndYear(d1, d2) {\r\n            var pd1 = moment(d1);\r\n            var pd2 = moment(d2);\r\n            return pd1.jYear() === pd2.jYear() && pd1.jMonth() === pd2.jMonth();\r\n        }\r\n\r\n        /**\r\n         * Gets whether two dates are the same day (not not necesarily the same time).\r\n         * @param {Date} d1\r\n         * @param {Date} d2\r\n         * @returns {boolean}\r\n         */\r\n        function isSameDay(d1, d2) {\r\n            var pd1 = moment(d1);\r\n            var pd2 = moment(d2);\r\n            return pd1.jYear() === pd2.jYear() && pd1.jMonth() === pd2.jMonth() && pd1.jDate() == pd2.jDate();\r\n        }\r\n\r\n        /**\r\n         * Gets whether a date is in the month immediately after some date.\r\n         * @param {Date} startDate The date from which to compare.\r\n         * @param {Date} endDate The date to check.\r\n         * @returns {boolean}\r\n         */\r\n        function isInNextMonth(startDate, endDate) {\r\n            var nextMonth = getDateInNextMonth(startDate);\r\n            return isSameMonthAndYear(nextMonth, endDate);\r\n        }\r\n\r\n        /**\r\n         * Gets whether a date is in the month immediately before some date.\r\n         * @param {Date} startDate The date from which to compare.\r\n         * @param {Date} endDate The date to check.\r\n         * @returns {boolean}\r\n         */\r\n        function isInPreviousMonth(startDate, endDate) {\r\n            var previousMonth = getDateInPreviousMonth(startDate);\r\n            return isSameMonthAndYear(endDate, previousMonth);\r\n        }\r\n\r\n        /**\r\n         * Gets the midpoint between two dates.\r\n         * @param {Date} d1\r\n         * @param {Date} d2\r\n         * @returns {Date}\r\n         */\r\n        function getDateMidpoint(d1, d2) {\r\n            return createDateAtMidnight((d1.getTime() + d2.getTime()) / 2);\r\n        }\r\n\r\n        /**\r\n         * Gets the week of the month that a given date occurs in.\r\n         * @param {Date} date\r\n         * @returns {number} Index of the week of the month (zero-based).\r\n         */\r\n        function getWeekOfMonth(date) {\r\n            var firstDayOfMonth = getFirstDateOfMonth(date);\r\n            var pfirstDayOfMonth = moment(firstDayOfMonth);\r\n            var pd = moment(date);\r\n            return Math.floor((pfirstDayOfMonth.day() + pd.jDate() - 1) / 7);\r\n        }\r\n\r\n        /**\r\n         * Gets a new date incremented by the given number of days. Number of days can be negative.\r\n         * @param {Date} date\r\n         * @param {number} numberOfDays\r\n         * @returns {Date}\r\n         */\r\n        function incrementDays(date, numberOfDays) {\r\n            return moment(date).add(numberOfDays, 'day').toDate();\r\n        }\r\n\r\n        /**\r\n         * Gets a new date incremented by the given number of months. Number of months can be negative.\r\n         * If the date of the given month does not match the target month, the date will be set to the\r\n         * last day of the month.\r\n         * @param {Date} date\r\n         * @param {number} numberOfMonths\r\n         * @returns {Date}\r\n         */\r\n        function incrementMonths(date, numberOfMonths) {\r\n            return moment(date).add(numberOfMonths, 'jMonth').toDate();\r\n        }\r\n\r\n        /**\r\n         * Get the integer distance between two months. This *only* considers the month and year\r\n         * portion of the Date instances.\r\n         *\r\n         * @param {Date} start\r\n         * @param {Date} end\r\n         * @returns {number} Number of months between `start` and `end`. If `end` is before `start`\r\n         *     chronologically, this number will be negative.\r\n         */\r\n        function getMonthDistance(start, end) {\r\n            var pstart = moment(start);\r\n            var pend = moment(end);\r\n            return (12 * (pend.jYear() - pstart.jYear())) + (pend.jMonth() - pstart.jMonth());\r\n        }\r\n\r\n        /**\r\n         * Gets the last day of the month for the given date.\r\n         * @param {Date} date\r\n         * @returns {Date}\r\n         */\r\n        function getLastDateOfMonth(date) {\r\n            return moment(date).endOf('jMonth');\r\n        }\r\n\r\n        /**\r\n         * Checks whether a date is valid.\r\n         * @param {Date} date\r\n         * @return {boolean} Whether the date is a valid Date.\r\n         */\r\n        function isValidDate(date) {\r\n            return date && date.getTime && !isNaN(date.getTime());\r\n        }\r\n\r\n        /**\r\n         * Sets a date's time to midnight.\r\n         * @param {Date} date\r\n         */\r\n        function setDateTimeToMidnight(date) {\r\n            if (isValidDate(date)) {\r\n                date.setHours(0, 0, 0, 0);\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Creates a date with the time set to midnight.\r\n         * Drop-in replacement for two forms of the Date constructor:\r\n         * 1. No argument for Date representing now.\r\n         * 2. Single-argument value representing number of seconds since Unix Epoch\r\n         * or a Date object.\r\n         * @param {number|Date=} opt_value\r\n         * @return {Date} New date with time set to midnight.\r\n         */\r\n        function createDateAtMidnight(opt_value) {\r\n            var date;\r\n            if (angular.isUndefined(opt_value)) {\r\n                date = new Date();\r\n            } else {\r\n                date = new Date(opt_value);\r\n            }\r\n            setDateTimeToMidnight(date);\r\n            return date;\r\n        }\r\n\r\n        /**\r\n         * Checks if a date is within a min and max range, ignoring the time component.\r\n         * If minDate or maxDate are not dates, they are ignored.\r\n         * @param {Date} date\r\n         * @param {Date} minDate\r\n         * @param {Date} maxDate\r\n         */\r\n        function isDateWithinRange(date, minDate, maxDate) {\r\n            var dateAtMidnight = createDateAtMidnight(date);\r\n            var minDateAtMidnight = isValidDate(minDate) ? createDateAtMidnight(minDate) : null;\r\n            var maxDateAtMidnight = isValidDate(maxDate) ? createDateAtMidnight(maxDate) : null;\r\n            return (!minDateAtMidnight || minDateAtMidnight <= dateAtMidnight) &&\r\n                (!maxDateAtMidnight || maxDateAtMidnight >= dateAtMidnight);\r\n        }\r\n\r\n        /**\r\n         * Gets a new date incremented by the given number of years. Number of years can be negative.\r\n         * See `incrementMonths` for notes on overflow for specific dates.\r\n         * @param {Date} date\r\n         * @param {number} numberOfYears\r\n         * @returns {Date}\r\n         */\r\n        function incrementYears(date, numberOfYears) {\r\n            return incrementMonths(date, numberOfYears * 12);\r\n        }\r\n\r\n        /**\r\n         * Get the integer distance between two years. This *only* considers the year portion of the\r\n         * Date instances.\r\n         *\r\n         * @param {Date} start\r\n         * @param {Date} end\r\n         * @returns {number} Number of months between `start` and `end`. If `end` is before `start`\r\n         *     chronologically, this number will be negative.\r\n         */\r\n        function getYearDistance(start, end) {\r\n            var pstart = moment(start);\r\n            var pend = moment(end);\r\n            return pend.jYear() - pstart.jYear();\r\n        }\r\n\r\n        /**\r\n         * Clamps a date between a minimum and a maximum date.\r\n         * @param {Date} date Date to be clamped\r\n         * @param {Date=} minDate Minimum date\r\n         * @param {Date=} maxDate Maximum date\r\n         * @return {Date}\r\n         */\r\n        function clampDate(date, minDate, maxDate) {\r\n            var boundDate = date;\r\n            if (minDate && date < minDate) {\r\n                boundDate = new Date(minDate.getTime());\r\n            }\r\n            if (maxDate && date > maxDate) {\r\n                boundDate = new Date(maxDate.getTime());\r\n            }\r\n            return boundDate;\r\n        }\r\n\r\n        /**\r\n         * Extracts and parses the timestamp from a DOM node.\r\n         * @param  {HTMLElement} node Node from which the timestamp will be extracted.\r\n         * @return {number} Time since epoch.\r\n         */\r\n        function getTimestampFromNode(node) {\r\n            if (node && node.hasAttribute('data-timestamp')) {\r\n                return Number(node.getAttribute('data-timestamp'));\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Checks if a month is within a min and max range, ignoring the date and time components.\r\n         * If minDate or maxDate are not dates, they are ignored.\r\n         * @param {Date} date\r\n         * @param {Date} minDate\r\n         * @param {Date} maxDate\r\n         */\r\n        function isMonthWithinRange(date, minDate, maxDate) {\r\n            var pminDate = minDate ? moment(minDate) : null;\r\n            var pmaxDate = maxDate ? moment(maxDate) : null;\r\n\r\n            var pmonth = moment(date).jMonth();\r\n            var pyear = moment(date).jYear();\r\n\r\n            return (!pminDate || pminDate.jYear() < pyear || pminDate.jMonth() <= pmonth) &&\r\n                (!pmaxDate || pmaxDate.jYear() > pyear || pmaxDate.jMonth() >= pmonth);\r\n        }\r\n    });\r\n})();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/js/dateUtil.js\n// module id = 9\n// module chunks = 0"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../node_modules/css-loader/index.js!./datePicker.css\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// Prepare cssTransformation\nvar transform;\n\nvar options = {}\noptions.transform = transform\n// add the styles to the DOM\nvar update = require(\""!../node_modules/style-loader/lib/addStyles.js\"")(content, options);\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../node_modules/css-loader/index.js!./datePicker.css\"", function() {\n\t\t\tvar newContent = require(\""!!../node_modules/css-loader/index.js!./datePicker.css\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/datePicker.css\n// module id = 10\n// module chunks = 0"",""exports = module.exports = require(\""../node_modules/css-loader/lib/css-base.js\"")(undefined);\n// imports\n\n\n// module\nexports.push([module.id, \""md-persian-calendar {\\r\\n  font-size: 13px;\\r\\n  user-select: none;\\r\\n}\\r\\n\\r\\nmd-persian-calendar-month .md-calendar-month-label:not(.md-calendar-month-label-disabled) {\\r\\n  cursor: pointer;\\r\\n}\\r\\n\\r\\nmd-persian-datepicker {\\r\\n  white-space: nowrap;\\r\\n  overflow: hidden;\\r\\n  vertical-align: middle;\\r\\n}\\r\\n\\r\\n._md-datepicker-floating-label > md-persian-datepicker {\\r\\n  overflow: visible;\\r\\n}\\r\\n\\r\\n._md-datepicker-floating-label > md-persian-datepicker .md-datepicker-input-container {\\r\\n  border: none;\\r\\n}\\r\\n\\r\\n._md-datepicker-floating-label > md-persian-datepicker {\\r\\n  overflow: visible; \\r\\n}\\r\\n._md-datepicker-floating-label > md-persian-datepicker .md-datepicker-input-container {\\r\\n    border: none; \\r\\n}\\r\\n._md-datepicker-floating-label > md-persian-datepicker .md-datepicker-button {\\r\\n  float: left;\\r\\n  margin-top: -12px;\\r\\n  top: 9.5px; \\r\\n}\\r\\n[dir=rtl] ._md-datepicker-floating-label > md-persian-datepicker .md-datepicker-button {\\r\\n  float: right; \\r\\n}\\r\\n._md-datepicker-floating-label .md-input {\\r\\n  float: none; \\r\\n}\\r\\n\\r\\nmd-persian-calendar .md-datepicker-input-mask:focus {\\r\\n  outline: none;\\r\\n}\\r\\n\\r\\nmd-persian-datepicker[disabled] .md-datepicker-input-container {\\r\\n  border-bottom-color: transparent;\\r\\n}\\r\\n\\r\\nmd-persian-datepicker[disabled] .md-datepicker-triangle-button {\\r\\n  display: none;\\r\\n}\\r\\n\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/css-loader!./src/datePicker.css\n// module id = 11\n// module chunks = 0"",""/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \""@media \"" + item[2] + \""{\"" + content + \""}\"";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\""\"");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \""string\"")\n\t\t\tmodules = [[null, modules, \""\""]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \""number\"")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \""number\"" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \""(\"" + item[2] + \"") and (\"" + mediaQuery + \"")\"";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/css-loader/lib/css-base.js\n// module id = 12\n// module chunks = 0"",""/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \""undefined\"") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(selector) {\n\t\tif (typeof memo[selector] === \""undefined\"") {\n\t\t\tmemo[selector] = fn.call(this, selector);\n\t\t}\n\n\t\treturn memo[selector]\n\t};\n})(function (target) {\n\treturn document.querySelector(target)\n});\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\""./urls\"");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \""undefined\"" && DEBUG) {\n\t\tif (typeof document !== \""object\"") throw new Error(\""The style-loader cannot be used in a non-browser environment\"");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \""object\"" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton) options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n\tif (!options.insertInto) options.insertInto = \""head\"";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \""bottom\"";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\""Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\"");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \""top\"") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \""bottom\"") {\n\t\ttarget.appendChild(style);\n\t} else {\n\t\tthrow new Error(\""Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\"");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\""style\"");\n\n\toptions.attrs.type = \""text/css\"";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\""link\"");\n\n\toptions.attrs.type = \""text/css\"";\n\toptions.attrs.rel = \""stylesheet\"";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t    result = options.transform(obj.css);\n\n\t    if (result) {\n\t    \t// If transform returns a value, use that instead of the original css.\n\t    \t// This allows running runtime transformations on the css.\n\t    \tobj.css = result;\n\t    } else {\n\t    \t// If the transform function returns a falsy value, don't add this css.\n\t    \t// This allows conditional loading of css\n\t    \treturn function() {\n\t    \t\t// noop\n\t    \t};\n\t    }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \""function\"" &&\n\t\ttypeof URL.createObjectURL === \""function\"" &&\n\t\ttypeof URL.revokeObjectURL === \""function\"" &&\n\t\ttypeof Blob === \""function\"" &&\n\t\ttypeof btoa === \""function\""\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \""\"" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\""media\"", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default.  Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \""\\n/*# sourceMappingURL=data:application/json;base64,\"" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \"" */\"";\n\t}\n\n\tvar blob = new Blob([css], { type: \""text/css\"" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/style-loader/lib/addStyles.js\n// module id = 13\n// module chunks = 0"",""\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \""fixes\"" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n  // get current location\n  var location = typeof window !== \""undefined\"" && window.location;\n\n  if (!location) {\n    throw new Error(\""fixUrls requires window.location\"");\n  }\n\n\t// blank or null?\n\tif (!css || typeof css !== \""string\"") {\n\t  return css;\n  }\n\n  var baseUrl = location.protocol + \""//\"" + location.host;\n  var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \""/\"");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\(  = Match on the word \""url\"" with any whitespace after it and then a parens\n\t   (  = Start a capturing group\n\t     (?:  = Start a non-capturing group\n\t         [^)(]  = Match anything that isn't a parentheses\n\t         |  = OR\n\t         \\(  = Match a start parentheses\n\t             (?:  = Start another non-capturing groups\n\t                 [^)(]+  = Match anything that isn't a parentheses\n\t                 |  = OR\n\t                 \\(  = Match a start parentheses\n\t                     [^)(]*  = Match anything that isn't a parentheses\n\t                 \\)  = Match a end parentheses\n\t             )  = End Group\n              *\\) = Match anything and then a close parens\n          )  = Close non-capturing group\n          *  = Match anything\n       )  = Close capturing group\n\t \\)  = Match a close parens\n\n\t /gi  = Get all matches, not the first.  Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\""(.*)\""$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(unquotedOrigUrl)) {\n\t\t  return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\""//\"") === 0) {\n\t\t  \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\""/\"") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \""\""); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \""url(\"" + JSON.stringify(newUrl) + \"")\"";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/style-loader/lib/urls.js\n// module id = 14\n// module chunks = 0""],""sourceRoot"":""""}"
27aeb90717f910857828ac04232e6320afdc03d1,7922487,"    ""I am following this StackOverflow for how to convert the array to a sparse matrix: http://stackoverflow.com/questions/7922487/how-to-transform-numpy-matrix-or-array-to-scipy-sparse-matrix"""
29a34f00b0d03c0bab894f2b4e05f48e4801939e,44012630,"&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;http://stackoverflow.com/questions/44012630/determine-is-a-familyinstance-is-visible-in-a-view</span>"
9840df3fa971630f211f3799086fdabce4cf2701,152975,"    ""define(\""ghost/mixins/body-event-listener\"", \n  [\""exports\""],\n  function(__exports__) {\n    \""use strict\"";\n\n    // Code modified from Addepar/ember-widgets\n    // https://github.com/Addepar/ember-widgets/blob/master/src/mixins.coffee#L39\n\n    var BodyEventListener = Ember.Mixin.create({\n        bodyElementSelector: 'html',\n        bodyClick: Ember.K,\n\n        init: function () {\n            this._super();\n\n            return Ember.run.next(this, this._setupDocumentHandlers);\n        },\n\n        willDestroy: function () {\n            this._super();\n\n            return this._removeDocumentHandlers();\n        },\n\n        _setupDocumentHandlers: function () {\n            if (this._clickHandler) {\n                return;\n            }\n\n            var self = this;\n\n            this._clickHandler = function () {\n                return self.bodyClick();\n            };\n\n            return $(this.get('bodyElementSelector')).on('click', this._clickHandler);\n        },\n\n        _removeDocumentHandlers: function () {\n            $(this.get('bodyElementSelector')).off('click', this._clickHandler);\n            this._clickHandler = null;\n        },\n\n        // http://stackoverflow.com/questions/152975/how-to-detect-a-click-outside-an-element\n        click: function (event) {\n            return event.stopPropagation();\n        }\n    });\n\n    __exports__[\""default\""] = BodyEventListener;\n  });"","
b83951f0d704cedcd3bf6c0dad8b4adf0492608f,27724419, * http://stackoverflow.com/a/27724419/1207670
02842472916a7fcecaf604d854c15fbf54e6b926,37628,0;320;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;raspberry_pi;0.6;0.006429277942631058;1.0;1.606429277942631;0.0;0.0
eebd58bd447d633e6009bca5cfae53f1fed0a84c,427180,    // From http://stackoverflow.com/questions/427180/how-to-create-a-guid-uuid-using-the-iphone-sdk
5cd974777c452bf3a9fbf6396cb07288f564a777,6518811,    http://stackoverflow.com/questions/6518811/interpolate-nan-values-in-a-numpy-array
2ff8ec3808f325d4aea98f289c9e4c009487ea60,280634,    //From http://stackoverflow.com/questions/280634/endswith-in-javascript
a2ae3e9f9c1ec6c51d02c1f9f378808b7f722728,10454518,				Source: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number
0d03be9bc9357d040a5a68456e848fee956483ef,5917082, * Based on http://stackoverflow.com/questions/5917082/regular-expression-to-match-numbers-with-or-without-commas-and-decimals-in-text.
3eea678b4ba4c073a78bcffa5c0e8f4b1301d9eb,10417962,												 and ensure that its first value is always 1. More info: http://stackoverflow.com/questions/10417890/css3-animations-with-transform-causes-blurred-elements-on-webkit/10417962#10417962 */
0703325bfb2decec738e797612bfb13c2606d645,27424831,				//http://stackoverflow.com/questions/27424831/firefox-flexbox-overflow
3c3c35a5b2d184b5da46314cdb798fa2d666f47a,568271,    # http://stackoverflow.com/questions/568271/how-to-check-if-there-exists-a-process-with-a-given-pid
da7a3a5a2b5d44075fc47311caed57b31d281830,4994244,  # based on http://stackoverflow.com/a/4994244
53462edd5f62de1eb49436e386a813a22a1cd6c0,987376,	// https://stackoverflow.com/a/987376
505e299145d2069fb42b2bce8f85cb13cf6b0120,13735425,	    // Credit: http://stackoverflow.com/a/13735425/1849458
7bdc2c01e6087f87826b455827ae4364b200c99f,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
ef4e0206df9ea908a3eb932581cfd81b6376fed8,2269005,   http://stackoverflow.com/questions/2269005/how-can-i-change-the-keybinding-used-to-autocomplete-in-vim
faf61c37d430ea9a98d3b16d016689dc6dd0a7af,20663076, * see: http://stackoverflow.com/questions/20663076/angularjs-app-run-documentation
453d8ba31fcdd733ab22944e638fc844e18aa300,274094, * After https://stackoverflow.com/questions/273789/is-there-a-version-of-javascripts-string-indexof-that-allows-for-regular-expr/274094#274094
c65e1c1e14280fcf6ff35b21f9c74c34445af669,32190021,        http://stackoverflow.com/questions/4823468/comments-in-markdown/32190021#32190021
19dfd86b296277c371c1b5f14d2e6ff9f27b532d,19919905,# see https://stackoverflow.com/questions/19919905/how-to-bootstrap-numpy-installation-in-setup-py
029b59dbaf4643fd1d5ad63d1980b5f4e9326dd2,26603875,		// http://stackoverflow.com/a/26603875
24e6fe3657e3d4d38234034ac203cde8a872c548,15070407,			//SearchHit field type mapping is not probably out of box  - http://stackoverflow.com/questions/15070407/elasticsearch-equivalent-of-solr-getbeans
98be9dbb37ec59f316e0583bea99c431820e72d6,565239,        //https://stackoverflow.com/questions/565239/any-way-to-clear-flush-remove-outputcache/16038654
3da3da3a636a02325ded02ab6d3a3146bb536ba6,17961266,"{""version"":3,""file"":""leaflet-src.esm.js"",""sources"":[""../src/core/Util.js"",""../src/core/Class.js"",""../src/core/Events.js"",""../src/geometry/Point.js"",""../src/geometry/Bounds.js"",""../src/geo/LatLngBounds.js"",""../src/geo/LatLng.js"",""../src/geo/crs/CRS.js"",""../src/geo/crs/CRS.Earth.js"",""../src/geo/projection/Projection.SphericalMercator.js"",""../src/geometry/Transformation.js"",""../src/geo/crs/CRS.EPSG3857.js"",""../src/layer/vector/SVG.Util.js"",""../src/core/Browser.js"",""../src/dom/DomEvent.Pointer.js"",""../src/dom/DomEvent.DoubleTap.js"",""../src/dom/DomUtil.js"",""../src/dom/DomEvent.js"",""../src/dom/PosAnimation.js"",""../src/map/Map.js"",""../src/control/Control.js"",""../src/control/Control.Layers.js"",""../src/control/Control.Zoom.js"",""../src/control/Control.Scale.js"",""../src/control/Control.Attribution.js"",""../src/control/index.js"",""../src/core/Handler.js"",""../src/core/index.js"",""../src/dom/Draggable.js"",""../src/geometry/LineUtil.js"",""../src/geometry/PolyUtil.js"",""../src/geo/projection/Projection.LonLat.js"",""../src/geo/projection/Projection.Mercator.js"",""../src/geo/projection/index.js"",""../src/geo/crs/CRS.EPSG3395.js"",""../src/geo/crs/CRS.EPSG4326.js"",""../src/geo/crs/CRS.Simple.js"",""../src/geo/crs/index.js"",""../src/layer/Layer.js"",""../src/layer/LayerGroup.js"",""../src/layer/FeatureGroup.js"",""../src/layer/marker/Icon.js"",""../src/layer/marker/Icon.Default.js"",""../src/layer/marker/Marker.Drag.js"",""../src/layer/marker/Marker.js"",""../src/layer/vector/Path.js"",""../src/layer/vector/CircleMarker.js"",""../src/layer/vector/Circle.js"",""../src/layer/vector/Polyline.js"",""../src/layer/vector/Polygon.js"",""../src/layer/GeoJSON.js"",""../src/layer/ImageOverlay.js"",""../src/layer/VideoOverlay.js"",""../src/layer/DivOverlay.js"",""../src/layer/Popup.js"",""../src/layer/Tooltip.js"",""../src/layer/marker/DivIcon.js"",""../src/layer/marker/index.js"",""../src/layer/tile/GridLayer.js"",""../src/layer/tile/TileLayer.js"",""../src/layer/tile/TileLayer.WMS.js"",""../src/layer/tile/index.js"",""../src/layer/vector/Renderer.js"",""../src/layer/vector/Canvas.js"",""../src/layer/vector/SVG.VML.js"",""../src/layer/vector/SVG.js"",""../src/layer/vector/Renderer.getRenderer.js"",""../src/layer/vector/Rectangle.js"",""../src/layer/vector/index.js"",""../src/layer/index.js"",""../src/map/handler/Map.BoxZoom.js"",""../src/map/handler/Map.DoubleClickZoom.js"",""../src/map/handler/Map.Drag.js"",""../src/map/handler/Map.Keyboard.js"",""../src/map/handler/Map.ScrollWheelZoom.js"",""../src/map/handler/Map.Tap.js"",""../src/map/handler/Map.TouchZoom.js"",""../src/map/index.js"",""../src/Leaflet.js""],""sourcesContent"":[""/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\nexport var freeze = Object.freeze;\r\nObject.freeze = function (obj) { return obj; };\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, …): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\t/*eslint-disable */\r\n\tobj._leaflet_id = obj._leaflet_id || ++lastId;\r\n\treturn obj._leaflet_id;\r\n\t/* eslint-enable */\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t    min = range[0],\r\n\t    d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, digits?: Number): Number\r\n// Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default.\r\nexport function formatNum(num, digits) {\r\n\tvar pow = Math.pow(10, (digits === undefined ? 6 : digits));\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!obj.hasOwnProperty('options')) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \""foo\"", b: \""bar\""}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_-]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values — they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t    timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n"",""import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport function Class() {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (this.hasOwnProperty(i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t\tdelete props.statics;\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t\tdelete props.includes;\r\n\t}\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tprops.options = Util.extend(Util.create(proto.options), props.options);\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tUtil.extend(this.prototype, props);\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n"",""import {Class} from './Class';\r\nimport * as Util from './Util';\r\n\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport var Events = {\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object.\r\n\t */\r\n\toff: function (types, fn, context) {\r\n\r\n\t\tif (!types) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on: function (type, fn, context) {\r\n\t\tthis._events = this._events || {};\r\n\r\n\t\t/* get/init listeners for type */\r\n\t\tvar typeListeners = this._events[type];\r\n\t\tif (!typeListeners) {\r\n\t\t\ttypeListeners = [];\r\n\t\t\tthis._events[type] = typeListeners;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\t\tvar newListener = {fn: fn, ctx: context},\r\n\t\t    listeners = typeListeners;\r\n\r\n\t\t// check if fn already there\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlisteners.push(newListener);\r\n\t},\r\n\r\n\t_off: function (type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t    i,\r\n\t\t    len;\r\n\r\n\t\tif (!this._events) { return; }\r\n\r\n\t\tlisteners = this._events[type];\r\n\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!fn) {\r\n\t\t\t// Set all removed listeners to noop so they are not called if remove happens in fire\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tif (listeners) {\r\n\r\n\t\t\t// find fn and remove it\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tvar l = listeners[i];\r\n\t\t\t\tif (l.ctx !== context) { continue; }\r\n\t\t\t\tif (l.fn === fn) {\r\n\r\n\t\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\t\tl.fn = Util.falseFn;\r\n\r\n\t\t\t\t\tif (this._firingCount) {\r\n\t\t\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlisteners.splice(i, 1);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide an data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\tl.fn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method listens(type: String): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\tlistens: function (type, propagate) {\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) { return true; }\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce: function (types, fn, context) {\r\n\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis.once(type, types[type], fn);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar handler = Util.bind(function () {\r\n\t\t\tthis\r\n\t\t\t    .off(types, fn, context)\r\n\t\t\t    .off(types, handler, context);\r\n\t\t}, this);\r\n\r\n\t\t// add a listener that's executed once and removed after that\r\n\t\treturn this\r\n\t\t    .on(types, fn, context)\r\n\t\t    .on(types, handler, context);\r\n\t},\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent: function (obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent: function (obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_propagateEvent: function (e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(…): this\r\n// Alias to [`on(…)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(…): this\r\n// Alias to [`off(…)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(…): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(…): this\r\n// Alias to [`once(…)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(…): this\r\n// Alias to [`fire(…)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(…): Boolean\r\n// Alias to [`listens(…)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n"",""import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Point(x, y, round) {\r\n\t// @property x: Number; The `x` coordinate of the point\r\n\tthis.x = (round ? Math.round(x) : x);\r\n\t// @property y: Number; The `y` coordinate of the point\r\n\tthis.y = (round ? Math.round(y) : y);\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.round(this.x);\r\n\t\tthis.y = Math.round(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t    y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t       point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t       Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t        formatNum(this.x) + ', ' +\r\n\t\t        formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n"",""import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Bounds(a, b) {\r\n\tif (!a) { return; }\r\n\r\n\tvar points = b ? [a, b] : a;\r\n\r\n\tfor (var i = 0, len = points.length; i < len; i++) {\r\n\t\tthis.extend(points[i]);\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\textend: function (point) { // (Point)\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = point.clone();\r\n\t\t\tthis.max = point.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(point.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(point.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(point.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(point.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn new Point(\r\n\t\t        (this.min.x + this.max.x) / 2,\r\n\t\t        (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn new Point(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn new Point(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t       (max.x <= this.max.x) &&\r\n\t\t       (min.y >= this.min.y) &&\r\n\t\t       (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t    yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t    yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t}\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n"",""import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} else {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t        new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t        new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t        (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t        (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t       (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t    lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t    lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t       this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n"",""import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLng(lat, lng, alt) {\r\n\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t}\r\n\r\n\t// @property lat: Number\r\n\t// Latitude in degrees\r\n\tthis.lat = +lat;\r\n\r\n\t// @property lng: Number\r\n\t// Longitude in degrees\r\n\tthis.lng = +lng;\r\n\r\n\t// @property alt: Number\r\n\t// Altitude in meters (optional)\r\n\tif (alt !== undefined) {\r\n\t\tthis.alt = +alt;\r\n\t}\r\n}\r\n\r\nLatLng.prototype = {\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t        Math.abs(this.lat - obj.lat),\r\n\t\t        Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString: function (precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t        Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t        Util.formatNum(this.lng, precision) + ')';\r\n\t},\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo: function (other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t},\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap: function () {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t},\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds: function (sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t    lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t        [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t        [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t},\r\n\r\n\tclone: function () {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n};\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n"",""\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](http://en.wikipedia.org/wiki/Coordinate_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leafet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t    scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t    untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t    s = this.scale(zoom),\r\n\t\t    min = this.transformation.transform(b.min, s),\r\n\t\t    max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t    lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t    alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t    newCenter = this.wrapLatLng(center),\r\n\t\t    latShift = center.lat - newCenter.lat,\r\n\t\t    lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t    ne = bounds.getNorthEast(),\r\n\t\t    newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t    newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n"",""import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see http://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t    lat1 = latlng1.lat * rad,\n\t\t    lat2 = latlng2.lat * rad,\n\t\t    sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t    sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t    a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n"",""import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: 6378137,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    max = this.MAX_LATITUDE,\r\n\t\t    lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t    sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = 6378137 * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n"",""import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), //  L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); //  L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t        (point.x / scale - this._b) / this._a,\r\n\t\t        (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n"",""import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n"",""import * as Browser from '../../core/Browser';\n\n// @namespace SVG; @section\n// There are several static functions which can be called without instantiating L.SVG:\n\n// @function create(name: String): SVGElement\n// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n// corresponding to the class name passed. For example, using 'line' will return\n// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\nexport function svgCreate(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n// @function pointsToPath(rings: Point[], closed: Boolean): String\n// Generates a SVG path string for multiple rings, with each ring turning\n// into \""M..L..L..\"" instructions\nexport function pointsToPath(rings, closed) {\n\tvar str = '',\n\ti, j, len, len2, points, p;\n\n\tfor (i = 0, len = rings.length; i < len; i++) {\n\t\tpoints = rings[i];\n\n\t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\n\t\t// closes the ring for polygons; \""x\"" is VML syntax\n\t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n\t}\n\n\t// SVG complains about empty path strings\n\treturn str || 'M0 0';\n}\n\n\n\n\n"",""import {svgCreate} from '../layer/vector/SVG.Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n *   alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nexport var ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nexport var ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nexport var edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nexport var webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// `true` for any browser running on an Android platform.\r\nexport var android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; `true` for browsers running on Android 2 or Android 3.\r\nexport var android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; `true` for the Android stock browser (i.e. not Chrome)\r\nexport var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nexport var opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nexport var chrome = userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nexport var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nexport var safari = !chrome && userAgentContains('safari');\r\n\r\nexport var phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nexport var opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nexport var win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nexport var ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nexport var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nexport var gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nexport var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nexport var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nexport var mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nexport var mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nexport var msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nexport var pointer = !!(window.PointerEvent || msPointer);\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// This does not necessarily mean that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nexport var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window ||\r\n\t\t(window.DocumentTouch && document instanceof window.DocumentTouch));\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nexport var mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nexport var mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \""retina\"" screen or on any screen when browser's display zoom is more than 100%.\r\nexport var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nexport var canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\nexport var svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\nexport var vml = !svg && (function () {\r\n\ttry {\r\n\t\tvar div = document.createElement('div');\r\n\t\tdiv.innerHTML = '<v:shape adj=\""1\""/>';\r\n\r\n\t\tvar shape = div.firstChild;\r\n\t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n\t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t}\r\n}());\r\n\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n"",""import * as DomEvent from './DomEvent';\nimport * as Util from '../core/Util';\nimport * as Browser from '../core/Browser';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\n\nvar POINTER_DOWN =   Browser.msPointer ? 'MSPointerDown'   : 'pointerdown';\nvar POINTER_MOVE =   Browser.msPointer ? 'MSPointerMove'   : 'pointermove';\nvar POINTER_UP =     Browser.msPointer ? 'MSPointerUp'     : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\nvar TAG_WHITE_LIST = ['INPUT', 'SELECT', 'OPTION'];\n\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// DomEvent.DoubleTap needs to know about this\nexport var _pointersCount = 0;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler, id) {\n\tif (type === 'touchstart') {\n\t\t_addPointerStart(obj, handler, id);\n\n\t} else if (type === 'touchmove') {\n\t\t_addPointerMove(obj, handler, id);\n\n\t} else if (type === 'touchend') {\n\t\t_addPointerEnd(obj, handler, id);\n\t}\n\n\treturn this;\n}\n\nexport function removePointerListener(obj, type, id) {\n\tvar handler = obj['_leaflet_' + type + id];\n\n\tif (type === 'touchstart') {\n\t\tobj.removeEventListener(POINTER_DOWN, handler, false);\n\n\t} else if (type === 'touchmove') {\n\t\tobj.removeEventListener(POINTER_MOVE, handler, false);\n\n\t} else if (type === 'touchend') {\n\t\tobj.removeEventListener(POINTER_UP, handler, false);\n\t\tobj.removeEventListener(POINTER_CANCEL, handler, false);\n\t}\n\n\treturn this;\n}\n\nfunction _addPointerStart(obj, handler, id) {\n\tvar onDown = Util.bind(function (e) {\n\t\tif (e.pointerType !== 'mouse' && e.MSPOINTER_TYPE_MOUSE && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n\t\t\t// In IE11, some touch events needs to fire for form controls, or\n\t\t\t// the controls will stop working. We keep a whitelist of tag names that\n\t\t\t// need these events. For other target tags, we prevent default on the event.\n\t\t\tif (TAG_WHITE_LIST.indexOf(e.target.tagName) < 0) {\n\t\t\t\tDomEvent.preventDefault(e);\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t_handlePointer(e, handler);\n\t});\n\n\tobj['_leaflet_touchstart' + id] = onDown;\n\tobj.addEventListener(POINTER_DOWN, onDown, false);\n\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen documentElement as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.documentElement.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.documentElement.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.documentElement.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.documentElement.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n\t_pointersCount++;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n\t_pointersCount--;\n}\n\nfunction _handlePointer(e, handler) {\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _addPointerMove(obj, handler, id) {\n\tvar onMove = function (e) {\n\t\t// don't fire touch moves when mouse isn't down\n\t\tif ((e.pointerType === e.MSPOINTER_TYPE_MOUSE || e.pointerType === 'mouse') && e.buttons === 0) { return; }\n\n\t\t_handlePointer(e, handler);\n\t};\n\n\tobj['_leaflet_touchmove' + id] = onMove;\n\tobj.addEventListener(POINTER_MOVE, onMove, false);\n}\n\nfunction _addPointerEnd(obj, handler, id) {\n\tvar onUp = function (e) {\n\t\t_handlePointer(e, handler);\n\t};\n\n\tobj['_leaflet_touchend' + id] = onUp;\n\tobj.addEventListener(POINTER_UP, onUp, false);\n\tobj.addEventListener(POINTER_CANCEL, onUp, false);\n}\n\n"",""import * as Browser from '../core/Browser';\r\nimport {_pointersCount} from './DomEvent.Pointer';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n */\r\n\r\nvar _touchstart = Browser.msPointer ? 'MSPointerDown' : Browser.pointer ? 'pointerdown' : 'touchstart';\r\nvar _touchend = Browser.msPointer ? 'MSPointerUp' : Browser.pointer ? 'pointerup' : 'touchend';\r\nvar _pre = '_leaflet_';\r\n\r\n// inspired by Zepto touch code by Thomas Fuchs\r\nexport function addDoubleTapListener(obj, handler, id) {\r\n\tvar last, touch,\r\n\t    doubleTap = false,\r\n\t    delay = 250;\r\n\r\n\tfunction onTouchStart(e) {\r\n\t\tvar count;\r\n\r\n\t\tif (Browser.pointer) {\r\n\t\t\tif ((!Browser.edge) || e.pointerType === 'mouse') { return; }\r\n\t\t\tcount = _pointersCount;\r\n\t\t} else {\r\n\t\t\tcount = e.touches.length;\r\n\t\t}\r\n\r\n\t\tif (count > 1) { return; }\r\n\r\n\t\tvar now = Date.now(),\r\n\t\t    delta = now - (last || now);\r\n\r\n\t\ttouch = e.touches ? e.touches[0] : e;\r\n\t\tdoubleTap = (delta > 0 && delta <= delay);\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tfunction onTouchEnd(e) {\r\n\t\tif (doubleTap && !touch.cancelBubble) {\r\n\t\t\tif (Browser.pointer) {\r\n\t\t\t\tif ((!Browser.edge) || e.pointerType === 'mouse') { return; }\r\n\t\t\t\t// work around .type being readonly with MSPointer* events\r\n\t\t\t\tvar newTouch = {},\r\n\t\t\t\t    prop, i;\r\n\r\n\t\t\t\tfor (i in touch) {\r\n\t\t\t\t\tprop = touch[i];\r\n\t\t\t\t\tnewTouch[i] = prop && prop.bind ? prop.bind(touch) : prop;\r\n\t\t\t\t}\r\n\t\t\t\ttouch = newTouch;\r\n\t\t\t}\r\n\t\t\ttouch.type = 'dblclick';\r\n\t\t\thandler(touch);\r\n\t\t\tlast = null;\r\n\t\t}\r\n\t}\r\n\r\n\tobj[_pre + _touchstart + id] = onTouchStart;\r\n\tobj[_pre + _touchend + id] = onTouchEnd;\r\n\tobj[_pre + 'dblclick' + id] = handler;\r\n\r\n\tobj.addEventListener(_touchstart, onTouchStart, false);\r\n\tobj.addEventListener(_touchend, onTouchEnd, false);\r\n\r\n\t// On some platforms (notably, chrome<55 on win10 + touchscreen + mouse),\r\n\t// the browser doesn't fire touchend/pointerup events but does fire\r\n\t// native dblclicks. See #4127.\r\n\t// Edge 14 also fires native dblclicks, but only for pointerType mouse, see #5180.\r\n\tobj.addEventListener('dblclick', handler, false);\r\n\r\n\treturn this;\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, id) {\r\n\tvar touchstart = obj[_pre + _touchstart + id],\r\n\t    touchend = obj[_pre + _touchend + id],\r\n\t    dblclick = obj[_pre + 'dblclick' + id];\r\n\r\n\tobj.removeEventListener(_touchstart, touchstart, false);\r\n\tobj.removeEventListener(_touchend, touchend, false);\r\n\tif (!Browser.edge) {\r\n\t\tobj.removeEventListener('dblclick', dblclick, false);\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n"",""import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport * as Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t    filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outline;\r\n\telement.style.outline = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outline = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n"",""import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport * as Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else if (types) {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t} else {\r\n\t\tfor (var j in obj[eventsKey]) {\r\n\t\t\tremoveOne(obj, j, obj[eventsKey][j]);\r\n\t\t}\r\n\t\tdelete obj[eventsKey];\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\taddPointerListener(obj, type, handler, id);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick') && addDoubleTapListener &&\r\n\t           !(Browser.pointer && Browser.chrome)) {\r\n\t\t// Chrome >55 does not need the synthetic dblclicks from addDoubleTapListener\r\n\t\t// See #5180\r\n\t\taddDoubleTapListener(obj, handler, id);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'mousewheel') {\r\n\t\t\tobj.addEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, false);\r\n\r\n\t\t} else if ((type === 'mouseenter') || (type === 'mouseleave')) {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(type === 'mouseenter' ? 'mouseover' : 'mouseout', handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tif (type === 'click' && Browser.android) {\r\n\t\t\t\thandler = function (e) {\r\n\t\t\t\t\tfilterClick(e, originalHandler);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tobj.addEventListener(type, handler, false);\r\n\t\t}\r\n\r\n\t} else if ('attachEvent' in obj) {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context) {\r\n\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : ''),\r\n\t    handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, id);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick') && removeDoubleTapListener &&\r\n\t           !(Browser.pointer && Browser.chrome)) {\r\n\t\tremoveDoubleTapListener(obj, id);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tif (type === 'mousewheel') {\r\n\t\t\tobj.removeEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.removeEventListener(\r\n\t\t\t\ttype === 'mouseenter' ? 'mouseover' :\r\n\t\t\t\ttype === 'mouseleave' ? 'mouseout' : type, handler, false);\r\n\t\t}\r\n\r\n\t} else if ('detachEvent' in obj) {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) {  // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\tskipped(e);\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'mousewheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'mousewheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'doubleclick'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick', stopPropagation);\r\n\taddOne(el, 'click', fakeStop);\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `<form>` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t    offset = scale.boundingClientRect; // left and top  values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n// Chrome on Win scrolls double the pixels as in other platforms (see #4538),\r\n// and Firefox scrolls device pixels, not CSS pixels\r\nvar wheelPxFactor =\r\n\t(Browser.win && Browser.chrome) ? 2 * window.devicePixelRatio :\r\n\tBrowser.gecko ? window.devicePixelRatio : 1;\r\n\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a mousewheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t       (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t       (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t       (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t       (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t       e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t       (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t       e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t       0;\r\n}\r\n\r\nvar skipEvents = {};\r\n\r\nexport function fakeStop(e) {\r\n\t// fakes stopPropagation by setting a special event flag, checked/reset with skipped(e)\r\n\tskipEvents[e.type] = true;\r\n}\r\n\r\nexport function skipped(e) {\r\n\tvar events = skipEvents[e.type];\r\n\t// reset when checking, as it's only used in map container and propagates outside of the map\r\n\tskipEvents[e.type] = false;\r\n\treturn events;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\nvar lastClick;\r\n\r\n// this is a horrible workaround for a bug in Android where a single touch triggers two click events\r\nfunction filterClick(e, handler) {\r\n\tvar timeStamp = (e.timeStamp || (e.originalEvent && e.originalEvent.timeStamp)),\r\n\t    elapsed = lastClick && (timeStamp - lastClick);\r\n\r\n\t// are they closer together than 500ms yet more than 100ms?\r\n\t// Android typically triggers them ~300ms apart while multiple listeners\r\n\t// on the same event should be triggered far faster;\r\n\t// or check if click is simulated on the element, and if it is, reject any non-simulated events\r\n\r\n\tif ((elapsed && elapsed > 100 && elapsed < 500) || (e.target._simulatedClick && !e._simulated)) {\r\n\t\tstop(e);\r\n\t\treturn;\r\n\t}\r\n\tlastClick = timeStamp;\r\n\r\n\thandler(e);\r\n}\r\n\r\n// @function addListener(…): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(…): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n"",""import * as Util from '../core/Util';\nimport {Evented} from '../core/Events';\nimport * as DomUtil from '../dom/DomUtil';\n\n\n/*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var fx = new L.PosAnimation();\n * fx.run(el, [300, 500], 0.5);\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\nexport var PosAnimation = Evented.extend({\n\n\t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n\t// Run an animation of a given element to a new position, optionally setting\n\t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n\t// argument of the [cubic bezier curve](http://cubic-bezier.com/#0,0,.5,1),\n\t// `0.5` by default).\n\trun: function (el, newPos, duration, easeLinearity) {\n\t\tthis.stop();\n\n\t\tthis._el = el;\n\t\tthis._inProgress = true;\n\t\tthis._duration = duration || 0.25;\n\t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n\t\tthis._startPos = DomUtil.getPosition(el);\n\t\tthis._offset = newPos.subtract(this._startPos);\n\t\tthis._startTime = +new Date();\n\n\t\t// @event start: Event\n\t\t// Fired when the animation starts\n\t\tthis.fire('start');\n\n\t\tthis._animate();\n\t},\n\n\t// @method stop()\n\t// Stops the animation (if currently running).\n\tstop: function () {\n\t\tif (!this._inProgress) { return; }\n\n\t\tthis._step(true);\n\t\tthis._complete();\n\t},\n\n\t_animate: function () {\n\t\t// animation loop\n\t\tthis._animId = Util.requestAnimFrame(this._animate, this);\n\t\tthis._step();\n\t},\n\n\t_step: function (round) {\n\t\tvar elapsed = (+new Date()) - this._startTime,\n\t\t    duration = this._duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (progress, round) {\n\t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n\t\tif (round) {\n\t\t\tpos._round();\n\t\t}\n\t\tDomUtil.setPosition(this._el, pos);\n\n\t\t// @event step: Event\n\t\t// Fired continuously during the animation.\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tUtil.cancelAnimFrame(this._animId);\n\n\t\tthis._inProgress = false;\n\t\t// @event end: Event\n\t\t// Fired when the animation ends.\n\t\tthis.fire('end');\n\t},\n\n\t_easeOut: function (t) {\n\t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n\t}\n});\n"",""import * as Util from '../core/Util';\r\nimport {Evented} from '../core/Events';\r\nimport {EPSG3857} from '../geo/crs/CRS.EPSG3857';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geo/LatLng';\r\nimport {LatLngBounds, toLatLngBounds} from '../geo/LatLngBounds';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {PosAnimation} from '../dom/PosAnimation';\r\n\r\n/*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API — it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \""map\"" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\r\n\r\nexport var Map = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section Map State Options\r\n\t\t// @option crs: CRS = L.CRS.EPSG3857\r\n\t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n\t\t// sure what it means.\r\n\t\tcrs: EPSG3857,\r\n\r\n\t\t// @option center: LatLng = undefined\r\n\t\t// Initial geographic center of the map\r\n\t\tcenter: undefined,\r\n\r\n\t\t// @option zoom: Number = undefined\r\n\t\t// Initial map zoom level\r\n\t\tzoom: undefined,\r\n\r\n\t\t// @option minZoom: Number = *\r\n\t\t// Minimum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the lowest of their `minZoom` options will be used instead.\r\n\t\tminZoom: undefined,\r\n\r\n\t\t// @option maxZoom: Number = *\r\n\t\t// Maximum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the highest of their `maxZoom` options will be used instead.\r\n\t\tmaxZoom: undefined,\r\n\r\n\t\t// @option layers: Layer[] = []\r\n\t\t// Array of layers that will be added to the map initially\r\n\t\tlayers: [],\r\n\r\n\t\t// @option maxBounds: LatLngBounds = null\r\n\t\t// When this option is set, the map restricts the view to the given\r\n\t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n\t\t// outside the view. To set the restriction dynamically, use\r\n\t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n\t\tmaxBounds: undefined,\r\n\r\n\t\t// @option renderer: Renderer = *\r\n\t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n\t\t// or `L.Canvas` by default depending on browser support.\r\n\t\trenderer: undefined,\r\n\r\n\r\n\t\t// @section Animation Options\r\n\t\t// @option zoomAnimation: Boolean = true\r\n\t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tzoomAnimation: true,\r\n\r\n\t\t// @option zoomAnimationThreshold: Number = 4\r\n\t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n\t\tzoomAnimationThreshold: 4,\r\n\r\n\t\t// @option fadeAnimation: Boolean = true\r\n\t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tfadeAnimation: true,\r\n\r\n\t\t// @option markerZoomAnimation: Boolean = true\r\n\t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n\t\t// they will disappear for the length of the animation. By default it's\r\n\t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n\t\tmarkerZoomAnimation: true,\r\n\r\n\t\t// @option transform3DLimit: Number = 2^23\r\n\t\t// Defines the maximum size of a CSS translation transform. The default\r\n\t\t// value should not be changed unless a web browser positions layers in\r\n\t\t// the wrong place after doing a large `panBy`.\r\n\t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n\t\t// @section Interaction Options\r\n\t\t// @option zoomSnap: Number = 1\r\n\t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n\t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n\t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n\t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n\t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n\t\tzoomSnap: 1,\r\n\r\n\t\t// @option zoomDelta: Number = 1\r\n\t\t// Controls how much the map's zoom level will change after a\r\n\t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n\t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n\t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n\t\tzoomDelta: 1,\r\n\r\n\t\t// @option trackResize: Boolean = true\r\n\t\t// Whether the map automatically handles browser window resize to update itself.\r\n\t\ttrackResize: true\r\n\t},\r\n\r\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// Make sure to assign internal flags at the beginning,\r\n\t\t// to avoid inconsistent state in some edge cases.\r\n\t\tthis._handlers = [];\r\n\t\tthis._layers = {};\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n\t\tthis._onResize = Util.bind(this._onResize, this);\r\n\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (options.maxBounds) {\r\n\t\t\tthis.setMaxBounds(options.maxBounds);\r\n\t\t}\r\n\r\n\t\tif (options.zoom !== undefined) {\r\n\t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n\t\t}\r\n\r\n\t\tif (options.center && options.zoom !== undefined) {\r\n\t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n\t\t}\r\n\r\n\t\tthis.callInitHooks();\r\n\r\n\t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n\t\tthis._zoomAnimated = DomUtil.TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n\t\t\t\tthis.options.zoomAnimation;\r\n\r\n\t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n\t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tthis._createAnimProxy();\r\n\t\t\tDomEvent.on(this._proxy, DomUtil.TRANSITION_END, this._catchTransitionEnd, this);\r\n\t\t}\r\n\r\n\t\tthis._addLayers(this.options.layers);\r\n\t},\r\n\r\n\r\n\t// @section Methods for modifying map state\r\n\r\n\t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) with the given\r\n\t// animation options.\r\n\tsetView: function (center, zoom, options) {\r\n\r\n\t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n\t\toptions = options || {};\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n\t\t\tif (options.animate !== undefined) {\r\n\t\t\t\toptions.zoom = Util.extend({animate: options.animate}, options.zoom);\r\n\t\t\t\toptions.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);\r\n\t\t\t}\r\n\r\n\t\t\t// try animating pan or zoom\r\n\t\t\tvar moved = (this._zoom !== zoom) ?\r\n\t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n\t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n\t\t\tif (moved) {\r\n\t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// animation didn't start, just reset the map view\r\n\t\tthis._resetView(center, zoom);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom: function (zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n\t},\r\n\r\n\t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n\t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomIn: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom + delta, options);\r\n\t},\r\n\r\n\t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n\t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomOut: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom - delta, options);\r\n\t},\r\n\r\n\t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified geographical point on the map\r\n\t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n\t// @alternative\r\n\t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n\tsetZoomAround: function (latlng, zoom, options) {\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n\t\t    centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n\t\t    newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n\t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n\t},\r\n\r\n\t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n\t\t    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n\t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n\t\tif (zoom === Infinity) {\r\n\t\t\treturn {\r\n\t\t\t\tcenter: bounds.getCenter(),\r\n\t\t\t\tzoom: zoom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n\t\t    swPoint = this.project(bounds.getSouthWest(), zoom),\r\n\t\t    nePoint = this.project(bounds.getNorthEast(), zoom),\r\n\t\t    center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n\t\treturn {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom\r\n\t\t};\r\n\t},\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds: function (bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld: function (options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t},\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo: function (center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t},\r\n\r\n\t// @method panBy(offset: Point, options?: Pan options): this\r\n\t// Pans the map by a given number of pixels (animated).\r\n\tpanBy: function (offset, options) {\r\n\t\toffset = toPoint(offset).round();\r\n\t\toptions = options || {};\r\n\r\n\t\tif (!offset.x && !offset.y) {\r\n\t\t\treturn this.fire('moveend');\r\n\t\t}\r\n\t\t// If we pan too far, Chrome gets issues with tiles\r\n\t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n\t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._panAnim) {\r\n\t\t\tthis._panAnim = new PosAnimation();\r\n\r\n\t\t\tthis._panAnim.on({\r\n\t\t\t\t'step': this._onPanTransitionStep,\r\n\t\t\t\t'end': this._onPanTransitionEnd\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\t// don't fire movestart if animating inertia\r\n\t\tif (!options.noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\r\n\t\t// animate pan unless animate: false specified\r\n\t\tif (options.animate !== false) {\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n\t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n\t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n\t\t} else {\r\n\t\t\tthis._rawPanBy(offset);\r\n\t\t\tthis.fire('move').fire('moveend');\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t    to = this.project(targetCenter),\r\n\t\t    size = this.getSize(),\r\n\t\t    startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t    w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t    u1 = (to.distanceTo(from)) || 1,\r\n\t\t    rho = 1.42,\r\n\t\t    rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t    s2 = i ? w1 : w0,\r\n\t\t\t    t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t    b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t    b = t1 / b1,\r\n\t\t\t    sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t    // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t    // thus triggering an infinite loop in flyTo\r\n\t\t\t    var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t    S = (r(1) - r0) / rho,\r\n\t\t    duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t    s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds: function (bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method setMaxBounds(bounds: Bounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this.off('moveend', this._panInsideMaxBounds);\r\n\t\t} else if (this.options.maxBounds) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t},\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds: function (bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t    newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInside(latlng: LatLng, options?: options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// `padding`, `paddingTopLeft` and `paddingTopRight` options to fit\r\n\t// the display to more restricted bounds, like [`fitBounds`](#map-fitbounds).\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside: function (latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t    center = this.getCenter(),\r\n\t\t    pixelCenter = this.project(center),\r\n\t\t    pixelPoint = this.project(latlng),\r\n\t\t    pixelBounds = this.getPixelBounds(),\r\n\t\t    halfPixelBounds = pixelBounds.getSize().divideBy(2),\r\n\t\t    paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]);\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar diff = pixelCenter.subtract(pixelPoint),\r\n\t\t\t    newCenter = toPoint(pixelPoint.x + diff.x, pixelPoint.y + diff.y);\r\n\r\n\t\t\tif (pixelPoint.x < paddedBounds.min.x || pixelPoint.x > paddedBounds.max.x) {\r\n\t\t\t\tnewCenter.x = pixelCenter.x - diff.x;\r\n\t\t\t\tif (diff.x > 0) {\r\n\t\t\t\t\tnewCenter.x += halfPixelBounds.x - paddingTL.x;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewCenter.x -= halfPixelBounds.x - paddingBR.x;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (pixelPoint.y < paddedBounds.min.y || pixelPoint.y > paddedBounds.max.y) {\r\n\t\t\t\tnewCenter.y = pixelCenter.y - diff.y;\r\n\t\t\t\tif (diff.y > 0) {\r\n\t\t\t\t\tnewCenter.y += halfPixelBounds.y - paddingTL.y;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewCenter.y -= halfPixelBounds.y - paddingBR.y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.panTo(this.unproject(newCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method invalidateSize(options: Zoom/pan options): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n\t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n\t// that it doesn't happen often even if the method is called many\r\n\t// times in a row.\r\n\r\n\t// @alternative\r\n\t// @method invalidateSize(animate: Boolean): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default.\r\n\tinvalidateSize: function (options) {\r\n\t\tif (!this._loaded) { return this; }\r\n\r\n\t\toptions = Util.extend({\r\n\t\t\tanimate: false,\r\n\t\t\tpan: true\r\n\t\t}, options === true ? {animate: true} : options);\r\n\r\n\t\tvar oldSize = this.getSize();\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis._lastCenter = null;\r\n\r\n\t\tvar newSize = this.getSize(),\r\n\t\t    oldCenter = oldSize.divideBy(2).round(),\r\n\t\t    newCenter = newSize.divideBy(2).round(),\r\n\t\t    offset = oldCenter.subtract(newCenter);\r\n\r\n\t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n\t\tif (options.animate && options.pan) {\r\n\t\t\tthis.panBy(offset);\r\n\r\n\t\t} else {\r\n\t\t\tif (options.pan) {\r\n\t\t\t\tthis._rawPanBy(offset);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('move');\r\n\r\n\t\t\tif (options.debounceMoveend) {\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\tthis._sizeTimer = setTimeout(Util.bind(this.fire, this, 'moveend'), 200);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fire('moveend');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @section Map state change events\r\n\t\t// @event resize: ResizeEvent\r\n\t\t// Fired when the map is resized.\r\n\t\treturn this.fire('resize', {\r\n\t\t\toldSize: oldSize,\r\n\t\t\tnewSize: newSize\r\n\t\t});\r\n\t},\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop: function () {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t},\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate: function (options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: <Number>\r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t    onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t        navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate: function () {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_handleGeolocationError: function (error) {\r\n\t\tvar c = error.code,\r\n\t\t    message = error.message ||\r\n\t\t            (c === 1 ? 'permission denied' :\r\n\t\t            (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n\t\tif (this._locateOptions.setView && !this._loaded) {\r\n\t\t\tthis.fitWorld();\r\n\t\t}\r\n\r\n\t\t// @section Location events\r\n\t\t// @event locationerror: ErrorEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n\t\tthis.fire('locationerror', {\r\n\t\t\tcode: c,\r\n\t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n\t\t});\r\n\t},\r\n\r\n\t_handleGeolocationResponse: function (pos) {\r\n\t\tvar lat = pos.coords.latitude,\r\n\t\t    lng = pos.coords.longitude,\r\n\t\t    latlng = new LatLng(lat, lng),\r\n\t\t    bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n\t\t    options = this._locateOptions;\r\n\r\n\t\tif (options.setView) {\r\n\t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n\t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tlatlng: latlng,\r\n\t\t\tbounds: bounds,\r\n\t\t\ttimestamp: pos.timestamp\r\n\t\t};\r\n\r\n\t\tfor (var i in pos.coords) {\r\n\t\t\tif (typeof pos.coords[i] === 'number') {\r\n\t\t\t\tdata[i] = pos.coords[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @event locationfound: LocationEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n\t\t// went successfully.\r\n\t\tthis.fire('locationfound', data);\r\n\t},\r\n\r\n\t// TODO Appropriate docs section?\r\n\t// @section Other Methods\r\n\t// @method addHandler(name: String, HandlerClass: Function): this\r\n\t// Adds a new `Handler` to the map, given its name and constructor function.\r\n\taddHandler: function (name, HandlerClass) {\r\n\t\tif (!HandlerClass) { return this; }\r\n\r\n\t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n\t\tthis._handlers.push(handler);\r\n\r\n\t\tif (this.options[name]) {\r\n\t\t\thandler.enable();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove(): this\r\n\t// Destroys the map and clears all related event listeners.\r\n\tremove: function () {\r\n\r\n\t\tthis._initEvents(true);\r\n\r\n\t\tif (this._containerId !== this._container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is being reused by another instance');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// throws error in IE6-8\r\n\t\t\tdelete this._container._leaflet_id;\r\n\t\t\tdelete this._containerId;\r\n\t\t} catch (e) {\r\n\t\t\t/*eslint-disable */\r\n\t\t\tthis._container._leaflet_id = undefined;\r\n\t\t\t/* eslint-enable */\r\n\t\t\tthis._containerId = undefined;\r\n\t\t}\r\n\r\n\t\tif (this._locationWatchId !== undefined) {\r\n\t\t\tthis.stopLocate();\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tDomUtil.remove(this._mapPane);\r\n\r\n\t\tif (this._clearControlPos) {\r\n\t\t\tthis._clearControlPos();\r\n\t\t}\r\n\t\tif (this._resizeRequest) {\r\n\t\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\t\tthis._resizeRequest = null;\r\n\t\t}\r\n\r\n\t\tthis._clearHandlers();\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\t// @section Map state change events\r\n\t\t\t// @event unload: Event\r\n\t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n\t\t\tthis.fire('unload');\r\n\t\t}\r\n\r\n\t\tvar i;\r\n\t\tfor (i in this._layers) {\r\n\t\t\tthis._layers[i].remove();\r\n\t\t}\r\n\t\tfor (i in this._panes) {\r\n\t\t\tDomUtil.remove(this._panes[i]);\r\n\t\t}\r\n\r\n\t\tthis._layers = [];\r\n\t\tthis._panes = [];\r\n\t\tdelete this._mapPane;\r\n\t\tdelete this._renderer;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n\t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n\t// then returns it. The pane is created as a child of `container`, or\r\n\t// as a child of the main map pane if not set.\r\n\tcreatePane: function (name, container) {\r\n\t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n\t\t    pane = DomUtil.create('div', className, container || this._mapPane);\r\n\r\n\t\tif (name) {\r\n\t\t\tthis._panes[name] = pane;\r\n\t\t}\r\n\t\treturn pane;\r\n\t},\r\n\r\n\t// @section Methods for Getting Map State\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the geographical center of the map view\r\n\tgetCenter: function () {\r\n\t\tthis._checkIfLoaded();\r\n\r\n\t\tif (this._lastCenter && !this._moved()) {\r\n\t\t\treturn this._lastCenter;\r\n\t\t}\r\n\t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// @method getZoom(): Number\r\n\t// Returns the current zoom level of the map view\r\n\tgetZoom: function () {\r\n\t\treturn this._zoom;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the geographical bounds visible in the current map view\r\n\tgetBounds: function () {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t    sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t    ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t},\r\n\r\n\t// @method getMinZoom(): Number\r\n\t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n\tgetMinZoom: function () {\r\n\t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n\t},\r\n\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tgetMaxZoom: function () {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n\t},\r\n\r\n\t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n\t// Returns the maximum zoom level on which the given bounds fit to the map\r\n\t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n\t// instead returns the minimum zoom level on which the map view fits into\r\n\t// the given bounds in its entirety.\r\n\tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n\t\tvar zoom = this.getZoom() || 0,\r\n\t\t    min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    nw = bounds.getNorthWest(),\r\n\t\t    se = bounds.getSouthEast(),\r\n\t\t    size = this.getSize().subtract(padding),\r\n\t\t    boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n\t\t    scalex = size.x / boundsSize.x,\r\n\t\t    scaley = size.y / boundsSize.y,\r\n\t\t    scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n\t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n\t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n\t\t}\r\n\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize: function () {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._container.clientWidth || 0,\r\n\t\t\t\tthis._container.clientHeight || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t},\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds: function (center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t},\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \""left point of the map layer\"" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin: function () {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t},\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds: function (zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane: function (pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t},\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes: function () {\r\n\t\treturn this._panes;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale: function (toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t},\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom: function (scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject: function (latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t},\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject: function (point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t},\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng: function (point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t},\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint: function (latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t},\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance: function (latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t},\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng: function (point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t},\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint: function (latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t},\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint: function (e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t},\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint: function (e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t},\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t},\r\n\r\n\r\n\t// map initialization methods\r\n\r\n\t_initContainer: function (id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tDomEvent.on(container, 'scroll', this._onScroll, this);\r\n\t\tthis._containerId = Util.stamp(container);\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar container = this._container;\r\n\r\n\t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis._initPanes();\r\n\r\n\t\tif (this._initControlPos) {\r\n\t\t\tthis._initControlPos();\r\n\t\t}\r\n\t},\r\n\r\n\t_initPanes: function () {\r\n\t\tvar panes = this._panes = {};\r\n\t\tthis._paneRenderers = {};\r\n\r\n\t\t// @section\r\n\t\t//\r\n\t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n\t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n\t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n\t\t// [`map.createPane`](#map-createpane) method.\r\n\t\t//\r\n\t\t// Every map has the following default panes that differ only in zIndex.\r\n\t\t//\r\n\t\t// @pane mapPane: HTMLElement = 'auto'\r\n\t\t// Pane that contains all other map panes\r\n\r\n\t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\t// @pane tilePane: HTMLElement = 200\r\n\t\t// Pane for `GridLayer`s and `TileLayer`s\r\n\t\tthis.createPane('tilePane');\r\n\t\t// @pane overlayPane: HTMLElement = 400\r\n\t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n\t\tthis.createPane('shadowPane');\r\n\t\t// @pane shadowPane: HTMLElement = 500\r\n\t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n\t\tthis.createPane('overlayPane');\r\n\t\t// @pane markerPane: HTMLElement = 600\r\n\t\t// Pane for `Icon`s of `Marker`s\r\n\t\tthis.createPane('markerPane');\r\n\t\t// @pane tooltipPane: HTMLElement = 650\r\n\t\t// Pane for `Tooltip`s.\r\n\t\tthis.createPane('tooltipPane');\r\n\t\t// @pane popupPane: HTMLElement = 700\r\n\t\t// Pane for `Popup`s.\r\n\t\tthis.createPane('popupPane');\r\n\r\n\t\tif (!this.options.markerZoomAnimation) {\r\n\t\t\tDomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\r\n\t\t\tDomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// private methods that modify map state\r\n\r\n\t// @section Map state change events\r\n\t_resetView: function (center, zoom) {\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\tvar loading = !this._loaded;\r\n\t\tthis._loaded = true;\r\n\t\tzoom = this._limitZoom(zoom);\r\n\r\n\t\tthis.fire('viewprereset');\r\n\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\t\tthis\r\n\t\t\t._moveStart(zoomChanged, false)\r\n\t\t\t._move(center, zoom)\r\n\t\t\t._moveEnd(zoomChanged);\r\n\r\n\t\t// @event viewreset: Event\r\n\t\t// Fired when the map needs to redraw its content (this usually happens\r\n\t\t// on map zoom or load). Very useful for creating custom overlays.\r\n\t\tthis.fire('viewreset');\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the map is initialized (when its center and zoom are set\r\n\t\t// for the first time).\r\n\t\tif (loading) {\r\n\t\t\tthis.fire('load');\r\n\t\t}\r\n\t},\r\n\r\n\t_moveStart: function (zoomChanged, noMoveStart) {\r\n\t\t// @event zoomstart: Event\r\n\t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n\t\t// @event movestart: Event\r\n\t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomstart');\r\n\t\t}\r\n\t\tif (!noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_move: function (center, zoom, data) {\r\n\t\tif (zoom === undefined) {\r\n\t\t\tzoom = this._zoom;\r\n\t\t}\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n\t\tthis._zoom = zoom;\r\n\t\tthis._lastCenter = center;\r\n\t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n\t\t// @event zoom: Event\r\n\t\t// Fired repeatedly during any change in zoom level, including zoom\r\n\t\t// and fly animations.\r\n\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\tthis.fire('zoom', data);\r\n\t\t}\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired repeatedly during any movement of the map, including pan and\r\n\t\t// fly animations.\r\n\t\treturn this.fire('move', data);\r\n\t},\r\n\r\n\t_moveEnd: function (zoomChanged) {\r\n\t\t// @event zoomend: Event\r\n\t\t// Fired when the map has changed, after any animations.\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomend');\r\n\t\t}\r\n\r\n\t\t// @event moveend: Event\r\n\t\t// Fired when the center of the map stops changing (e.g. user stopped\r\n\t\t// dragging the map).\r\n\t\treturn this.fire('moveend');\r\n\t},\r\n\r\n\t_stop: function () {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_rawPanBy: function (offset) {\r\n\t\tDomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n\t},\r\n\r\n\t_getZoomSpan: function () {\r\n\t\treturn this.getMaxZoom() - this.getMinZoom();\r\n\t},\r\n\r\n\t_panInsideMaxBounds: function () {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t},\r\n\r\n\t_checkIfLoaded: function () {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n\t},\r\n\r\n\t// DOM event handling\r\n\r\n\t// @section Interaction events\r\n\t_initEvents: function (remove) {\r\n\t\tthis._targets = {};\r\n\t\tthis._targets[Util.stamp(this._container)] = this;\r\n\r\n\t\tvar onOff = remove ? DomEvent.off : DomEvent.on;\r\n\r\n\t\t// @event click: MouseEvent\r\n\t\t// Fired when the user clicks (or taps) the map.\r\n\t\t// @event dblclick: MouseEvent\r\n\t\t// Fired when the user double-clicks (or double-taps) the map.\r\n\t\t// @event mousedown: MouseEvent\r\n\t\t// Fired when the user pushes the mouse button on the map.\r\n\t\t// @event mouseup: MouseEvent\r\n\t\t// Fired when the user releases the mouse button on the map.\r\n\t\t// @event mouseover: MouseEvent\r\n\t\t// Fired when the mouse enters the map.\r\n\t\t// @event mouseout: MouseEvent\r\n\t\t// Fired when the mouse leaves the map.\r\n\t\t// @event mousemove: MouseEvent\r\n\t\t// Fired while the mouse moves over the map.\r\n\t\t// @event contextmenu: MouseEvent\r\n\t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n\t\t// default browser context menu from showing if there are listeners on\r\n\t\t// this event. Also fired on mobile when the user holds a single touch\r\n\t\t// for a second (also called long press).\r\n\t\t// @event keypress: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard while the map is focused.\r\n\t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n\t\t\t'mouseover mouseout mousemove contextmenu keypress', this._handleDOMEvent, this);\r\n\r\n\t\tif (this.options.trackResize) {\r\n\t\t\tonOff(window, 'resize', this._onResize, this);\r\n\t\t}\r\n\r\n\t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n\t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n\t\t}\r\n\t},\r\n\r\n\t_onResize: function () {\r\n\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\tthis._resizeRequest = Util.requestAnimFrame(\r\n\t\t        function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n\t},\r\n\r\n\t_onScroll: function () {\r\n\t\tthis._container.scrollTop  = 0;\r\n\t\tthis._container.scrollLeft = 0;\r\n\t},\r\n\r\n\t_onMoveEnd: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n\t\t\t// a pixel offset on very high values, see: http://jsfiddle.net/dg6r5hhb/\r\n\t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n\t\t}\r\n\t},\r\n\r\n\t_findEventTargets: function (e, type) {\r\n\t\tvar targets = [],\r\n\t\t    target,\r\n\t\t    isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t    src = e.target || e.srcElement,\r\n\t\t    dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && !e._simulated && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._container) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && DomEvent.isExternalTarget(src, e)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t},\r\n\r\n\t_handleDOMEvent: function (e) {\r\n\t\tif (!this._loaded || DomEvent.skipped(e)) { return; }\r\n\r\n\t\tvar type = e.type;\r\n\r\n\t\tif (type === 'mousedown' || type === 'keypress') {\r\n\t\t\t// prevents outline when clicking on keyboard-focusable element\r\n\t\t\tDomUtil.preventOutline(e.target || e.srcElement);\r\n\t\t}\r\n\r\n\t\tthis._fireDOMEvent(e, type);\r\n\t},\r\n\r\n\t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n\t_fireDOMEvent: function (e, type, targets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, targets);\r\n\t\t}\r\n\r\n\t\tif (e._stopped) { return; }\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\ttargets = (targets || []).concat(this._findEventTargets(e, type));\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tvar target = targets[0];\r\n\t\tif (type === 'contextmenu' && target.listens(type, true)) {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t},\r\n\r\n\t_draggableMoved: function (obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t},\r\n\r\n\t_clearHandlers: function () {\r\n\t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n\t\t\tthis._handlers[i].disable();\r\n\t\t}\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady: function (callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos: function () {\r\n\t\treturn DomUtil.getPosition(this._mapPane) || new Point(0, 0);\r\n\t},\r\n\r\n\t_moved: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t},\r\n\r\n\t_getTopLeftPoint: function (center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t_getNewPixelOrigin: function (center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t},\r\n\r\n\t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t},\r\n\r\n\t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t},\r\n\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint: function () {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t},\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset: function (latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter: function (center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t    offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (offset.round().equals([0, 0])) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t},\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t_limitOffset: function (offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t    newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t},\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t        this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t        this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t    ),\r\n\t\t    minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t    maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t    dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t    dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t},\r\n\r\n\t_rebound: function (left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n\t},\r\n\r\n\t_limitZoom: function (zoom) {\r\n\t\tvar min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t_onPanTransitionStep: function () {\r\n\t\tthis.fire('move');\r\n\t},\r\n\r\n\t_onPanTransitionEnd: function () {\r\n\t\tDomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');\r\n\t\tthis.fire('moveend');\r\n\t},\r\n\r\n\t_tryAnimatedPan: function (center, options) {\r\n\t\t// difference between the new and current centers in pixels\r\n\t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n\t\t// don't animate too far unless animate: true specified in options\r\n\t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tthis.panBy(offset, options);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_createAnimProxy: function () {\r\n\r\n\t\tvar proxy = this._proxy = DomUtil.create('div', 'leaflet-proxy leaflet-zoom-animated');\r\n\t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n\t\tthis.on('zoomanim', function (e) {\r\n\t\t\tvar prop = DomUtil.TRANSFORM,\r\n\t\t\t    transform = this._proxy.style[prop];\r\n\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n\t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n\t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n\t\t\t\tthis._onZoomTransitionEnd();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tthis.on('load moveend', function () {\r\n\t\t\tvar c = this.getCenter(),\r\n\t\t\t    z = this.getZoom();\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n\t\t}, this);\r\n\r\n\t\tthis._on('unload', this._destroyAnimProxy, this);\r\n\t},\r\n\r\n\t_destroyAnimProxy: function () {\r\n\t\tDomUtil.remove(this._proxy);\r\n\t\tdelete this._proxy;\r\n\t},\r\n\r\n\t_catchTransitionEnd: function (e) {\r\n\t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n\t\t\tthis._onZoomTransitionEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t_nothingToAnimate: function () {\r\n\t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n\t},\r\n\r\n\t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n\t\tif (this._animatingZoom) { return true; }\r\n\r\n\t\toptions = options || {};\r\n\r\n\t\t// don't animate if disabled, not supported or zoom difference is too large\r\n\t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n\t\t        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n\t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n\t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis\r\n\t\t\t    ._moveStart(true, false)\r\n\t\t\t    ._animateZoom(center, zoom, true);\r\n\t\t}, this);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n\t\tif (!this._mapPane) { return; }\r\n\r\n\t\tif (startAnim) {\r\n\t\t\tthis._animatingZoom = true;\r\n\r\n\t\t\t// remember what center/zoom to set after animation\r\n\t\t\tthis._animateToCenter = center;\r\n\t\t\tthis._animateToZoom = zoom;\r\n\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\t// @event zoomanim: ZoomAnimEvent\r\n\t\t// Fired at least once per zoom animation. For continous zoom, like pinch zooming, fired once per frame during zoom.\r\n\t\tthis.fire('zoomanim', {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom,\r\n\t\t\tnoUpdate: noUpdate\r\n\t\t});\r\n\r\n\t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n\t\tsetTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);\r\n\t},\r\n\r\n\t_onZoomTransitionEnd: function () {\r\n\t\tif (!this._animatingZoom) { return; }\r\n\r\n\t\tif (this._mapPane) {\r\n\t\t\tDomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\tthis._animatingZoom = false;\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom);\r\n\r\n\t\t// This anim frame should prevent an obscure iOS webkit tile loading race condition.\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis._moveEnd(true);\r\n\t\t}, this);\r\n\t}\r\n});\r\n\r\n// @section\r\n\r\n// @factory L.map(id: String, options?: Map options)\r\n// Instantiates a map object given the DOM ID of a `<div>` element\r\n// and optionally an object literal with `Map options`.\r\n//\r\n// @alternative\r\n// @factory L.map(el: HTMLElement, options?: Map options)\r\n// Instantiates a map object given an instance of a `<div>` HTML element\r\n// and optionally an object literal with `Map options`.\r\nexport function createMap(id, options) {\r\n\treturn new Map(id, options);\r\n}\r\n"",""\r\nimport {Class} from '../core/Class';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\r\n\r\nexport var Control = Class.extend({\r\n\t// @section\r\n\t// @aka Control options\r\n\toptions: {\r\n\t\t// @option position: String = 'topright'\r\n\t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n\t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n\t\tposition: 'topright'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\t/* @section\r\n\t * Classes extending L.Control will inherit the following methods:\r\n\t *\r\n\t * @method getPosition: string\r\n\t * Returns the position of the control.\r\n\t */\r\n\tgetPosition: function () {\r\n\t\treturn this.options.position;\r\n\t},\r\n\r\n\t// @method setPosition(position: string): this\r\n\t// Sets the position of the control.\r\n\tsetPosition: function (position) {\r\n\t\tvar map = this._map;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.removeControl(this);\r\n\t\t}\r\n\r\n\t\tthis.options.position = position;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.addControl(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTMLElement that contains the control.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method addTo(map: Map): this\r\n\t// Adds the control to the given map.\r\n\taddTo: function (map) {\r\n\t\tthis.remove();\r\n\t\tthis._map = map;\r\n\r\n\t\tvar container = this._container = this.onAdd(map),\r\n\t\t    pos = this.getPosition(),\r\n\t\t    corner = map._controlCorners[pos];\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-control');\r\n\r\n\t\tif (pos.indexOf('bottom') !== -1) {\r\n\t\t\tcorner.insertBefore(container, corner.firstChild);\r\n\t\t} else {\r\n\t\t\tcorner.appendChild(container);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove: this\r\n\t// Removes the control from the map it is currently active on.\r\n\tremove: function () {\r\n\t\tif (!this._map) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._container);\r\n\r\n\t\tif (this.onRemove) {\r\n\t\t\tthis.onRemove(this._map);\r\n\t\t}\r\n\r\n\t\tthis._map = null;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_refocusOnMap: function (e) {\r\n\t\t// if map exists and event is not a keyboard event\r\n\t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n\t\t\tthis._map.getContainer().focus();\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport var control = function (options) {\r\n\treturn new Control(options);\r\n};\r\n\r\n/* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\r\n\r\n/* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\r\nMap.include({\r\n\t// @method addControl(control: Control): this\r\n\t// Adds the given control to the map\r\n\taddControl: function (control) {\r\n\t\tcontrol.addTo(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeControl(control: Control): this\r\n\t// Removes the given control from the map\r\n\tremoveControl: function (control) {\r\n\t\tcontrol.remove();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initControlPos: function () {\r\n\t\tvar corners = this._controlCorners = {},\r\n\t\t    l = 'leaflet-',\r\n\t\t    container = this._controlContainer =\r\n\t\t            DomUtil.create('div', l + 'control-container', this._container);\r\n\r\n\t\tfunction createCorner(vSide, hSide) {\r\n\t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n\t\t\tcorners[vSide + hSide] = DomUtil.create('div', className, container);\r\n\t\t}\r\n\r\n\t\tcreateCorner('top', 'left');\r\n\t\tcreateCorner('top', 'right');\r\n\t\tcreateCorner('bottom', 'left');\r\n\t\tcreateCorner('bottom', 'right');\r\n\t},\r\n\r\n\t_clearControlPos: function () {\r\n\t\tfor (var i in this._controlCorners) {\r\n\t\t\tDomUtil.remove(this._controlCorners[i]);\r\n\t\t}\r\n\t\tDomUtil.remove(this._controlContainer);\r\n\t\tdelete this._controlCorners;\r\n\t\tdelete this._controlContainer;\r\n\t}\r\n});\r\n"",""\r\nimport {Control} from './Control';\r\nimport * as Util from '../core/Util';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](http://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\""Mapbox\"": mapbox,\r\n * \t\""OpenStreetMap\"": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\""Marker\"": marker,\r\n * \t\""Roads\"": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n *     \""<someName1>\"": layer1,\r\n *     \""<someName2>\"": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\""<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>\"": myLayer}\r\n * ```\r\n */\r\n\r\nexport var Layers = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Layers options\r\n\toptions: {\r\n\t\t// @option collapsed: Boolean = true\r\n\t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover or touch.\r\n\t\tcollapsed: true,\r\n\t\tposition: 'topright',\r\n\r\n\t\t// @option autoZIndex: Boolean = true\r\n\t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n\t\tautoZIndex: true,\r\n\r\n\t\t// @option hideSingleBase: Boolean = false\r\n\t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n\t\thideSingleBase: false,\r\n\r\n\t\t// @option sortLayers: Boolean = false\r\n\t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n\t\t// in which they were added to the control.\r\n\t\tsortLayers: false,\r\n\r\n\t\t// @option sortFunction: Function = *\r\n\t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n\t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n\t\t// The function receives both the `L.Layer` instances and their names, as in\r\n\t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n\t\t// By default, it sorts layers alphabetically by their name.\r\n\t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n\t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n\t\t}\r\n\t},\r\n\r\n\tinitialize: function (baseLayers, overlays, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._lastZIndex = 0;\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tfor (var i in baseLayers) {\r\n\t\t\tthis._addLayer(baseLayers[i], i);\r\n\t\t}\r\n\r\n\t\tfor (i in overlays) {\r\n\t\t\tthis._addLayer(overlays[i], i, true);\r\n\t\t}\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._initLayout();\r\n\t\tthis._update();\r\n\r\n\t\tthis._map = map;\r\n\t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\taddTo: function (map) {\r\n\t\tControl.prototype.addTo.call(this, map);\r\n\t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n\t\treturn this._expandIfNotCollapsed();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addBaseLayer(layer: Layer, name: String): this\r\n\t// Adds a base layer (radio button entry) with the given name to the control.\r\n\taddBaseLayer: function (layer, name) {\r\n\t\tthis._addLayer(layer, name);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method addOverlay(layer: Layer, name: String): this\r\n\t// Adds an overlay (checkbox entry) with the given name to the control.\r\n\taddOverlay: function (layer, name) {\r\n\t\tthis._addLayer(layer, name, true);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Remove the given layer from the control.\r\n\tremoveLayer: function (layer) {\r\n\t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(layer));\r\n\t\tif (obj) {\r\n\t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n\t\t}\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method expand(): this\r\n\t// Expand the control container if collapsed.\r\n\texpand: function () {\r\n\t\tDomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\tthis._section.style.height = null;\r\n\t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n\t\tif (acceptableHeight < this._section.clientHeight) {\r\n\t\t\tDomUtil.addClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t}\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method collapse(): this\r\n\t// Collapse the control container if expanded.\r\n\tcollapse: function () {\r\n\t\tDomUtil.removeClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar className = 'leaflet-control-layers',\r\n\t\t    container = this._container = DomUtil.create('div', className),\r\n\t\t    collapsed = this.options.collapsed;\r\n\r\n\t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n\t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(container);\r\n\r\n\t\tvar section = this._section = DomUtil.create('section', className + '-list');\r\n\r\n\t\tif (collapsed) {\r\n\t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n\t\t\tif (!Browser.android) {\r\n\t\t\t\tDomEvent.on(container, {\r\n\t\t\t\t\tmouseenter: this.expand,\r\n\t\t\t\t\tmouseleave: this.collapse\r\n\t\t\t\t}, this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar link = this._layersLink = DomUtil.create('a', className + '-toggle', container);\r\n\t\tlink.href = '#';\r\n\t\tlink.title = 'Layers';\r\n\r\n\t\tif (Browser.touch) {\r\n\t\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\t\tDomEvent.on(link, 'click', this.expand, this);\r\n\t\t} else {\r\n\t\t\tDomEvent.on(link, 'focus', this.expand, this);\r\n\t\t}\r\n\r\n\t\tif (!collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\r\n\t\tthis._baseLayersList = DomUtil.create('div', className + '-base', section);\r\n\t\tthis._separator = DomUtil.create('div', className + '-separator', section);\r\n\t\tthis._overlaysList = DomUtil.create('div', className + '-overlays', section);\r\n\r\n\t\tcontainer.appendChild(section);\r\n\t},\r\n\r\n\t_getLayer: function (id) {\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n\t\t\tif (this._layers[i] && Util.stamp(this._layers[i].layer) === id) {\r\n\t\t\t\treturn this._layers[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_addLayer: function (layer, name, overlay) {\r\n\t\tif (this._map) {\r\n\t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\tthis._layers.push({\r\n\t\t\tlayer: layer,\r\n\t\t\tname: name,\r\n\t\t\toverlay: overlay\r\n\t\t});\r\n\r\n\t\tif (this.options.sortLayers) {\r\n\t\t\tthis._layers.sort(Util.bind(function (a, b) {\r\n\t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n\t\t\tthis._lastZIndex++;\r\n\t\t\tlayer.setZIndex(this._lastZIndex);\r\n\t\t}\r\n\r\n\t\tthis._expandIfNotCollapsed();\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._container) { return this; }\r\n\r\n\t\tDomUtil.empty(this._baseLayersList);\r\n\t\tDomUtil.empty(this._overlaysList);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n\t\tfor (i = 0; i < this._layers.length; i++) {\r\n\t\t\tobj = this._layers[i];\r\n\t\t\tthis._addItem(obj);\r\n\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n\t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n\t\t}\r\n\r\n\t\t// Hide base layers section if there's only one layer.\r\n\t\tif (this.options.hideSingleBase) {\r\n\t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n\t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n\t\t}\r\n\r\n\t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_onLayerChange: function (e) {\r\n\t\tif (!this._handlingClick) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(e.target));\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Layer events\r\n\t\t// @event baselayerchange: LayersControlEvent\r\n\t\t// Fired when the base layer is changed through the [layer control](#control-layers).\r\n\t\t// @event overlayadd: LayersControlEvent\r\n\t\t// Fired when an overlay is selected through the [layer control](#control-layers).\r\n\t\t// @event overlayremove: LayersControlEvent\r\n\t\t// Fired when an overlay is deselected through the [layer control](#control-layers).\r\n\t\t// @namespace Control.Layers\r\n\t\tvar type = obj.overlay ?\r\n\t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n\t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n\t\tif (type) {\r\n\t\t\tthis._map.fire(type, obj);\r\n\t\t}\r\n\t},\r\n\r\n\t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)\r\n\t_createRadioElement: function (name, checked) {\r\n\r\n\t\tvar radioHtml = '<input type=\""radio\"" class=\""leaflet-control-layers-selector\"" name=\""' +\r\n\t\t\t\tname + '\""' + (checked ? ' checked=\""checked\""' : '') + '/>';\r\n\r\n\t\tvar radioFragment = document.createElement('div');\r\n\t\tradioFragment.innerHTML = radioHtml;\r\n\r\n\t\treturn radioFragment.firstChild;\r\n\t},\r\n\r\n\t_addItem: function (obj) {\r\n\t\tvar label = document.createElement('label'),\r\n\t\t    checked = this._map.hasLayer(obj.layer),\r\n\t\t    input;\r\n\r\n\t\tif (obj.overlay) {\r\n\t\t\tinput = document.createElement('input');\r\n\t\t\tinput.type = 'checkbox';\r\n\t\t\tinput.className = 'leaflet-control-layers-selector';\r\n\t\t\tinput.defaultChecked = checked;\r\n\t\t} else {\r\n\t\t\tinput = this._createRadioElement('leaflet-base-layers', checked);\r\n\t\t}\r\n\r\n\t\tthis._layerControlInputs.push(input);\r\n\t\tinput.layerId = Util.stamp(obj.layer);\r\n\r\n\t\tDomEvent.on(input, 'click', this._onInputClick, this);\r\n\r\n\t\tvar name = document.createElement('span');\r\n\t\tname.innerHTML = ' ' + obj.name;\r\n\r\n\t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n\t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n\t\tvar holder = document.createElement('div');\r\n\r\n\t\tlabel.appendChild(holder);\r\n\t\tholder.appendChild(input);\r\n\t\tholder.appendChild(name);\r\n\r\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n\t\tcontainer.appendChild(label);\r\n\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn label;\r\n\t},\r\n\r\n\t_onInputClick: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input, layer;\r\n\t\tvar addedLayers = [],\r\n\t\t    removedLayers = [];\r\n\r\n\t\tthis._handlingClick = true;\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n\t\t\tif (input.checked) {\r\n\t\t\t\taddedLayers.push(layer);\r\n\t\t\t} else if (!input.checked) {\r\n\t\t\t\tremovedLayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n\t\tfor (i = 0; i < removedLayers.length; i++) {\r\n\t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n\t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (i = 0; i < addedLayers.length; i++) {\r\n\t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n\t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tthis._refocusOnMap();\r\n\t},\r\n\r\n\t_checkDisabledLayers: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input,\r\n\t\t    layer,\r\n\t\t    zoom = this._map.getZoom();\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n\t\t\t                 (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_expandIfNotCollapsed: function () {\r\n\t\tif (this._map && !this.options.collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_expand: function () {\r\n\t\t// Backward compatibility, remove me in 1.1.\r\n\t\treturn this.expand();\r\n\t},\r\n\r\n\t_collapse: function () {\r\n\t\t// Backward compatibility, remove me in 1.1.\r\n\t\treturn this.collapse();\r\n\t}\r\n\r\n});\r\n\r\n\r\n// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n// Creates an attribution control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\nexport var layers = function (baseLayers, overlays, options) {\r\n\treturn new Layers(baseLayers, overlays, options);\r\n};\r\n"",""\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as DomEvent from '../dom/DomEvent';\r\n\r\n/*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\r\n\r\nexport var Zoom = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Zoom options\r\n\toptions: {\r\n\t\tposition: 'topleft',\r\n\r\n\t\t// @option zoomInText: String = '+'\r\n\t\t// The text set on the 'zoom in' button.\r\n\t\tzoomInText: '+',\r\n\r\n\t\t// @option zoomInTitle: String = 'Zoom in'\r\n\t\t// The title set on the 'zoom in' button.\r\n\t\tzoomInTitle: 'Zoom in',\r\n\r\n\t\t// @option zoomOutText: String = '&#x2212;'\r\n\t\t// The text set on the 'zoom out' button.\r\n\t\tzoomOutText: '&#x2212;',\r\n\r\n\t\t// @option zoomOutTitle: String = 'Zoom out'\r\n\t\t// The title set on the 'zoom out' button.\r\n\t\tzoomOutTitle: 'Zoom out'\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tvar zoomName = 'leaflet-control-zoom',\r\n\t\t    container = DomUtil.create('div', zoomName + ' leaflet-bar'),\r\n\t\t    options = this.options;\r\n\r\n\t\tthis._zoomInButton  = this._createButton(options.zoomInText, options.zoomInTitle,\r\n\t\t        zoomName + '-in',  container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n\t\t        zoomName + '-out', container, this._zoomOut);\r\n\r\n\t\tthis._updateDisabled();\r\n\t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n\t\treturn container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\t},\r\n\r\n\tdisable: function () {\r\n\t\tthis._disabled = true;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function () {\r\n\t\tthis._disabled = false;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_zoomIn: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n\t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOut: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n\t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_createButton: function (html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \""Zoom in - button\""\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\tDomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t},\r\n\r\n\t_updateDisabled: function () {\r\n\t\tvar map = this._map,\r\n\t\t    className = 'leaflet-disabled';\r\n\r\n\t\tDomUtil.removeClass(this._zoomInButton, className);\r\n\t\tDomUtil.removeClass(this._zoomOutButton, className);\r\n\r\n\t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomOutButton, className);\r\n\t\t}\r\n\t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomInButton, className);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option zoomControl: Boolean = true\r\n// Whether a [zoom control](#control-zoom) is added to the map by default.\r\nMap.mergeOptions({\r\n\tzoomControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.zoomControl) {\r\n\t\t// @section Controls\r\n\t\t// @property zoomControl: Control.Zoom\r\n\t\t// The default zoom control (only available if the\r\n\t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n\t\tthis.zoomControl = new Zoom();\r\n\t\tthis.addControl(this.zoomControl);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Zoom\r\n// @factory L.control.zoom(options: Control.Zoom options)\r\n// Creates a zoom control\r\nexport var zoom = function (options) {\r\n\treturn new Zoom(options);\r\n};\r\n"",""\nimport {Control} from './Control';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\nexport var Scale = Control.extend({\n\t// @section\n\t// @aka Control.Scale options\n\toptions: {\n\t\tposition: 'bottomleft',\n\n\t\t// @option maxWidth: Number = 100\n\t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n\t\tmaxWidth: 100,\n\n\t\t// @option metric: Boolean = True\n\t\t// Whether to show the metric scale line (m/km).\n\t\tmetric: true,\n\n\t\t// @option imperial: Boolean = True\n\t\t// Whether to show the imperial scale line (mi/ft).\n\t\timperial: true\n\n\t\t// @option updateWhenIdle: Boolean = false\n\t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\t},\n\n\tonAdd: function (map) {\n\t\tvar className = 'leaflet-control-scale',\n\t\t    container = DomUtil.create('div', className),\n\t\t    options = this.options;\n\n\t\tthis._addScales(options, className + '-line', container);\n\n\t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t\tmap.whenReady(this._update, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t},\n\n\t_addScales: function (options, className, container) {\n\t\tif (options.metric) {\n\t\t\tthis._mScale = DomUtil.create('div', className, container);\n\t\t}\n\t\tif (options.imperial) {\n\t\t\tthis._iScale = DomUtil.create('div', className, container);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tvar map = this._map,\n\t\t    y = map.getSize().y / 2;\n\n\t\tvar maxMeters = map.distance(\n\t\t\tmap.containerPointToLatLng([0, y]),\n\t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n\t\tthis._updateScales(maxMeters);\n\t},\n\n\t_updateScales: function (maxMeters) {\n\t\tif (this.options.metric && maxMeters) {\n\t\t\tthis._updateMetric(maxMeters);\n\t\t}\n\t\tif (this.options.imperial && maxMeters) {\n\t\t\tthis._updateImperial(maxMeters);\n\t\t}\n\t},\n\n\t_updateMetric: function (maxMeters) {\n\t\tvar meters = this._getRoundNum(maxMeters),\n\t\t    label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n\t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n\t},\n\n\t_updateImperial: function (maxMeters) {\n\t\tvar maxFeet = maxMeters * 3.2808399,\n\t\t    maxMiles, miles, feet;\n\n\t\tif (maxFeet > 5280) {\n\t\t\tmaxMiles = maxFeet / 5280;\n\t\t\tmiles = this._getRoundNum(maxMiles);\n\t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n\t\t} else {\n\t\t\tfeet = this._getRoundNum(maxFeet);\n\t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n\t\t}\n\t},\n\n\t_updateScale: function (scale, text, ratio) {\n\t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n\t\tscale.innerHTML = text;\n\t},\n\n\t_getRoundNum: function (num) {\n\t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n\t\t    d = num / pow10;\n\n\t\td = d >= 10 ? 10 :\n\t\t    d >= 5 ? 5 :\n\t\t    d >= 3 ? 3 :\n\t\t    d >= 2 ? 2 : 1;\n\n\t\treturn pow10 * d;\n\t}\n});\n\n\n// @factory L.control.scale(options?: Control.Scale options)\n// Creates an scale control with the given options.\nexport var scale = function (options) {\n\treturn new Scale(options);\n};\n"",""\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\r\n\r\nexport var Attribution = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Attribution options\r\n\toptions: {\r\n\t\tposition: 'bottomright',\r\n\r\n\t\t// @option prefix: String = 'Leaflet'\r\n\t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\t\tprefix: '<a href=\""http://leafletjs.com\"" title=\""A JS library for interactive maps\"">Leaflet</a>'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._attributions = {};\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tmap.attributionControl = this;\r\n\t\tthis._container = DomUtil.create('div', 'leaflet-control-attribution');\r\n\t\tDomEvent.disableClickPropagation(this._container);\r\n\r\n\t\t// TODO ugly, refactor\r\n\t\tfor (var i in map._layers) {\r\n\t\t\tif (map._layers[i].getAttribution) {\r\n\t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method setPrefix(prefix: String): this\r\n\t// Sets the text before the attributions.\r\n\tsetPrefix: function (prefix) {\r\n\t\tthis.options.prefix = prefix;\r\n\t\tthis._update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addAttribution(text: String): this\r\n\t// Adds an attribution text (e.g. `'Vector data &copy; Mapbox'`).\r\n\taddAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (!this._attributions[text]) {\r\n\t\t\tthis._attributions[text] = 0;\r\n\t\t}\r\n\t\tthis._attributions[text]++;\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeAttribution(text: String): this\r\n\t// Removes an attribution text.\r\n\tremoveAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (this._attributions[text]) {\r\n\t\t\tthis._attributions[text]--;\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar attribs = [];\r\n\r\n\t\tfor (var i in this._attributions) {\r\n\t\t\tif (this._attributions[i]) {\r\n\t\t\t\tattribs.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar prefixAndAttribs = [];\r\n\r\n\t\tif (this.options.prefix) {\r\n\t\t\tprefixAndAttribs.push(this.options.prefix);\r\n\t\t}\r\n\t\tif (attribs.length) {\r\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n\t\t}\r\n\r\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' | ');\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option attributionControl: Boolean = true\r\n// Whether a [attribution control](#control-attribution) is added to the map by default.\r\nMap.mergeOptions({\r\n\tattributionControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.attributionControl) {\r\n\t\tnew Attribution().addTo(this);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Attribution\r\n// @factory L.control.attribution(options: Control.Attribution options)\r\n// Creates an attribution control.\r\nexport var attribution = function (options) {\r\n\treturn new Attribution(options);\r\n};\r\n"",""import {Control, control} from './Control';\nimport {Layers, layers} from './Control.Layers';\nimport {Zoom, zoom} from './Control.Zoom';\nimport {Scale, scale} from './Control.Scale';\nimport {Attribution, attribution} from './Control.Attribution';\n\nControl.Layers = Layers;\nControl.Zoom = Zoom;\nControl.Scale = Scale;\nControl.Attribution = Attribution;\n\ncontrol.layers = layers;\ncontrol.zoom = zoom;\ncontrol.scale = scale;\ncontrol.attribution = attribution;\n\nexport {Control, control};\n"",""import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport var Handler = Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable: function () {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t},\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable: function () {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t},\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n});\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n"",""import * as Browser from './Browser';\nexport {Browser};\n\nexport {Class} from './Class';\n\nimport {Evented} from './Events';\nimport {Events} from './Events';\nexport {Evented};\nexport var Mixin = {Events: Events};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n"",""import {Evented} from '../core/Events';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from './DomEvent';\r\nimport * as DomUtil from './DomUtil';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\n\r\n/*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\r\n\r\nvar START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\nvar END = {\r\n\tmousedown: 'mouseup',\r\n\ttouchstart: 'touchend',\r\n\tpointerdown: 'touchend',\r\n\tMSPointerDown: 'touchend'\r\n};\r\nvar MOVE = {\r\n\tmousedown: 'mousemove',\r\n\ttouchstart: 'touchmove',\r\n\tpointerdown: 'touchmove',\r\n\tMSPointerDown: 'touchmove'\r\n};\r\n\r\n\r\nexport var Draggable = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section\r\n\t\t// @aka Draggable options\r\n\t\t// @option clickTolerance: Number = 3\r\n\t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n\t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n\t\tclickTolerance: 3\r\n\t},\r\n\r\n\t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n\t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n\tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._element = element;\r\n\t\tthis._dragStartTarget = dragStartTarget || element;\r\n\t\tthis._preventOutline = preventOutline;\r\n\t},\r\n\r\n\t// @method enable()\r\n\t// Enables the dragging ability\r\n\tenable: function () {\r\n\t\tif (this._enabled) { return; }\r\n\r\n\t\tDomEvent.on(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = true;\r\n\t},\r\n\r\n\t// @method disable()\r\n\t// Disables the dragging ability\r\n\tdisable: function () {\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\t// If we're currently dragging this draggable,\r\n\t\t// disabling it counts as first ending the drag.\r\n\t\tif (Draggable._dragging === this) {\r\n\t\t\tthis.finishDrag();\r\n\t\t}\r\n\r\n\t\tDomEvent.off(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = false;\r\n\t\tthis._moved = false;\r\n\t},\r\n\r\n\t_onDown: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\r\n\t\tthis._moved = false;\r\n\r\n\t\tif (DomUtil.hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n\t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n\t\tDraggable._dragging = this;  // Prevent dragging multiple objects at once.\r\n\r\n\t\tif (this._preventOutline) {\r\n\t\t\tDomUtil.preventOutline(this._element);\r\n\t\t}\r\n\r\n\t\tDomUtil.disableImageDrag();\r\n\t\tDomUtil.disableTextSelection();\r\n\r\n\t\tif (this._moving) { return; }\r\n\r\n\t\t// @event down: Event\r\n\t\t// Fired when a drag is about to start.\r\n\t\tthis.fire('down');\r\n\r\n\t\tvar first = e.touches ? e.touches[0] : e,\r\n\t\t    sizedParent = DomUtil.getSizedParentNode(this._element);\r\n\r\n\t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n\r\n\t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n\t\tthis._parentScale = DomUtil.getScale(sizedParent);\r\n\r\n\t\tDomEvent.on(document, MOVE[e.type], this._onMove, this);\r\n\t\tDomEvent.on(document, END[e.type], this._onUp, this);\r\n\t},\r\n\r\n\t_onMove: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\tthis._moved = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n\t\t    offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n\t\tif (!offset.x && !offset.y) { return; }\r\n\t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n\t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n\t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n\t\t// and we can use the cached value for the scale.\r\n\t\toffset.x /= this._parentScale.x;\r\n\t\toffset.y /= this._parentScale.y;\r\n\r\n\t\tDomEvent.preventDefault(e);\r\n\r\n\t\tif (!this._moved) {\r\n\t\t\t// @event dragstart: Event\r\n\t\t\t// Fired when a drag starts\r\n\t\t\tthis.fire('dragstart');\r\n\r\n\t\t\tthis._moved = true;\r\n\t\t\tthis._startPos = DomUtil.getPosition(this._element).subtract(offset);\r\n\r\n\t\t\tDomUtil.addClass(document.body, 'leaflet-dragging');\r\n\r\n\t\t\tthis._lastTarget = e.target || e.srcElement;\r\n\t\t\t// IE and Edge do not give the <use> element, so fetch it\r\n\t\t\t// if necessary\r\n\t\t\tif ((window.SVGElementInstance) && (this._lastTarget instanceof SVGElementInstance)) {\r\n\t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n\t\t\t}\r\n\t\t\tDomUtil.addClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t}\r\n\r\n\t\tthis._newPos = this._startPos.add(offset);\r\n\t\tthis._moving = true;\r\n\r\n\t\tUtil.cancelAnimFrame(this._animRequest);\r\n\t\tthis._lastEvent = e;\r\n\t\tthis._animRequest = Util.requestAnimFrame(this._updatePosition, this, true);\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n\t\t// @event predrag: Event\r\n\t\t// Fired continuously during dragging *before* each corresponding\r\n\t\t// update of the element's position.\r\n\t\tthis.fire('predrag', e);\r\n\t\tDomUtil.setPosition(this._element, this._newPos);\r\n\r\n\t\t// @event drag: Event\r\n\t\t// Fired continuously during dragging.\r\n\t\tthis.fire('drag', e);\r\n\t},\r\n\r\n\t_onUp: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\t\tthis.finishDrag();\r\n\t},\r\n\r\n\tfinishDrag: function () {\r\n\t\tDomUtil.removeClass(document.body, 'leaflet-dragging');\r\n\r\n\t\tif (this._lastTarget) {\r\n\t\t\tDomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t\tthis._lastTarget = null;\r\n\t\t}\r\n\r\n\t\tfor (var i in MOVE) {\r\n\t\t\tDomEvent.off(document, MOVE[i], this._onMove, this);\r\n\t\t\tDomEvent.off(document, END[i], this._onUp, this);\r\n\t\t}\r\n\r\n\t\tDomUtil.enableImageDrag();\r\n\t\tDomUtil.enableTextSelection();\r\n\r\n\t\tif (this._moved && this._moving) {\r\n\t\t\t// ensure drag is not fired after dragend\r\n\t\t\tUtil.cancelAnimFrame(this._animRequest);\r\n\r\n\t\t\t// @event dragend: DragEndEvent\r\n\t\t\t// Fired when the drag ends.\r\n\t\t\tthis.fire('dragend', {\r\n\t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._moving = false;\r\n\t\tDraggable._dragging = false;\r\n\t}\r\n\r\n});\r\n"",""import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n\r\n/*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\r\n\r\n// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n// Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n// @function simplify(points: Point[], tolerance: Number): Point[]\r\n// Dramatically reduces the number of points in a polyline while retaining\r\n// its shape and returns a new array of simplified points, using the\r\n// [Douglas-Peucker algorithm](http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm).\r\n// Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n// each zoom level and also reducing visual noise. tolerance affects the amount of\r\n// simplification (lesser value means higher quality but slower and with more points).\r\n// Also released as a separated micro-library [Simplify.js](http://mourner.github.com/simplify-js/).\r\nexport function simplify(points, tolerance) {\r\n\tif (!tolerance || !points.length) {\r\n\t\treturn points.slice();\r\n\t}\r\n\r\n\tvar sqTolerance = tolerance * tolerance;\r\n\r\n\t    // stage 1: vertex reduction\r\n\t    points = _reducePoints(points, sqTolerance);\r\n\r\n\t    // stage 2: Douglas-Peucker simplification\r\n\t    points = _simplifyDP(points, sqTolerance);\r\n\r\n\treturn points;\r\n}\r\n\r\n// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n// Returns the distance between point `p` and segment `p1` to `p2`.\r\nexport function pointToSegmentDistance(p, p1, p2) {\r\n\treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n}\r\n\r\n// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n// Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\nexport function closestPointOnSegment(p, p1, p2) {\r\n\treturn _sqClosestPointOnSegment(p, p1, p2);\r\n}\r\n\r\n// Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm\r\nfunction _simplifyDP(points, sqTolerance) {\r\n\r\n\tvar len = points.length,\r\n\t    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n\t    markers = new ArrayConstructor(len);\r\n\r\n\t    markers[0] = markers[len - 1] = 1;\r\n\r\n\t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n\tvar i,\r\n\t    newPoints = [];\r\n\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tif (markers[i]) {\r\n\t\t\tnewPoints.push(points[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newPoints;\r\n}\r\n\r\nfunction _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n\tvar maxSqDist = 0,\r\n\tindex, i, sqDist;\r\n\r\n\tfor (i = first + 1; i <= last - 1; i++) {\r\n\t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n\t\tif (sqDist > maxSqDist) {\r\n\t\t\tindex = i;\r\n\t\t\tmaxSqDist = sqDist;\r\n\t\t}\r\n\t}\r\n\r\n\tif (maxSqDist > sqTolerance) {\r\n\t\tmarkers[index] = 1;\r\n\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n\t}\r\n}\r\n\r\n// reduce points that are too close to each other to a single point\r\nfunction _reducePoints(points, sqTolerance) {\r\n\tvar reducedPoints = [points[0]];\r\n\r\n\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n\t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n\t\t\treducedPoints.push(points[i]);\r\n\t\t\tprev = i;\r\n\t\t}\r\n\t}\r\n\tif (prev < len - 1) {\r\n\t\treducedPoints.push(points[len - 1]);\r\n\t}\r\n\treturn reducedPoints;\r\n}\r\n\r\nvar _lastCode;\r\n\r\n// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n// Clips the segment a to b by rectangular bounds with the\r\n// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n// (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n// points that are on the screen or near, increasing performance.\r\nexport function clipSegment(a, b, bounds, useLastCode, round) {\r\n\tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n\t    codeB = _getBitCode(b, bounds),\r\n\r\n\t    codeOut, p, newCode;\r\n\r\n\t    // save 2nd code to avoid calculating it on the next segment\r\n\t    _lastCode = codeB;\r\n\r\n\twhile (true) {\r\n\t\t// if a,b is inside the clip window (trivial accept)\r\n\t\tif (!(codeA | codeB)) {\r\n\t\t\treturn [a, b];\r\n\t\t}\r\n\r\n\t\t// if a,b is outside the clip window (trivial reject)\r\n\t\tif (codeA & codeB) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// other cases\r\n\t\tcodeOut = codeA || codeB;\r\n\t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n\t\tnewCode = _getBitCode(p, bounds);\r\n\r\n\t\tif (codeOut === codeA) {\r\n\t\t\ta = p;\r\n\t\t\tcodeA = newCode;\r\n\t\t} else {\r\n\t\t\tb = p;\r\n\t\t\tcodeB = newCode;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function _getEdgeIntersection(a, b, code, bounds, round) {\r\n\tvar dx = b.x - a.x,\r\n\t    dy = b.y - a.y,\r\n\t    min = bounds.min,\r\n\t    max = bounds.max,\r\n\t    x, y;\r\n\r\n\tif (code & 8) { // top\r\n\t\tx = a.x + dx * (max.y - a.y) / dy;\r\n\t\ty = max.y;\r\n\r\n\t} else if (code & 4) { // bottom\r\n\t\tx = a.x + dx * (min.y - a.y) / dy;\r\n\t\ty = min.y;\r\n\r\n\t} else if (code & 2) { // right\r\n\t\tx = max.x;\r\n\t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n\t} else if (code & 1) { // left\r\n\t\tx = min.x;\r\n\t\ty = a.y + dy * (min.x - a.x) / dx;\r\n\t}\r\n\r\n\treturn new Point(x, y, round);\r\n}\r\n\r\nexport function _getBitCode(p, bounds) {\r\n\tvar code = 0;\r\n\r\n\tif (p.x < bounds.min.x) { // left\r\n\t\tcode |= 1;\r\n\t} else if (p.x > bounds.max.x) { // right\r\n\t\tcode |= 2;\r\n\t}\r\n\r\n\tif (p.y < bounds.min.y) { // bottom\r\n\t\tcode |= 4;\r\n\t} else if (p.y > bounds.max.y) { // top\r\n\t\tcode |= 8;\r\n\t}\r\n\r\n\treturn code;\r\n}\r\n\r\n// square distance (to avoid unnecessary Math.sqrt calls)\r\nfunction _sqDist(p1, p2) {\r\n\tvar dx = p2.x - p1.x,\r\n\t    dy = p2.y - p1.y;\r\n\treturn dx * dx + dy * dy;\r\n}\r\n\r\n// return closest point on segment or distance to that point\r\nexport function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n\tvar x = p1.x,\r\n\t    y = p1.y,\r\n\t    dx = p2.x - x,\r\n\t    dy = p2.y - y,\r\n\t    dot = dx * dx + dy * dy,\r\n\t    t;\r\n\r\n\tif (dot > 0) {\r\n\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n\t\tif (t > 1) {\r\n\t\t\tx = p2.x;\r\n\t\t\ty = p2.y;\r\n\t\t} else if (t > 0) {\r\n\t\t\tx += dx * t;\r\n\t\t\ty += dy * t;\r\n\t\t}\r\n\t}\r\n\r\n\tdx = p.x - x;\r\n\tdy = p.y - y;\r\n\r\n\treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n}\r\n\r\n\r\n// @function isFlat(latlngs: LatLng[]): Boolean\r\n// Returns true if `latlngs` is a flat array, false is nested.\r\nexport function isFlat(latlngs) {\r\n\treturn !Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n}\r\n\r\nexport function _flat(latlngs) {\r\n\tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n\treturn isFlat(latlngs);\r\n}\r\n"",""import * as LineUtil from './LineUtil';\r\n\r\n/*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\r\n\r\n/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\r\nexport function clipPolygon(points, bounds, round) {\r\n\tvar clippedPoints,\r\n\t    edges = [1, 4, 2, 8],\r\n\t    i, j, k,\r\n\t    a, b,\r\n\t    len, edge, p;\r\n\r\n\tfor (i = 0, len = points.length; i < len; i++) {\r\n\t\tpoints[i]._code = LineUtil._getBitCode(points[i], bounds);\r\n\t}\r\n\r\n\t// for each edge (left, bottom, right, top)\r\n\tfor (k = 0; k < 4; k++) {\r\n\t\tedge = edges[k];\r\n\t\tclippedPoints = [];\r\n\r\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n\t\t\ta = points[i];\r\n\t\t\tb = points[j];\r\n\r\n\t\t\t// if a is inside the clip window\r\n\t\t\tif (!(a._code & edge)) {\r\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n\t\t\t\tif (b._code & edge) {\r\n\t\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\t\tclippedPoints.push(p);\r\n\t\t\t\t}\r\n\t\t\t\tclippedPoints.push(a);\r\n\r\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n\t\t\t} else if (!(b._code & edge)) {\r\n\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\tclippedPoints.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoints = clippedPoints;\r\n\t}\r\n\r\n\treturn points;\r\n}\r\n"",""import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n"",""import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Takes into account that Earth is a geoid, not a perfect sphere. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    r = this.R,\r\n\t\t    y = latlng.lat * d,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t    r = this.R,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    ts = Math.exp(-point.y / r),\r\n\t\t    phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n"",""/*\n * @class Projection\n\n * An object with methods for projecting geographical coordinates of the world onto\n * a flat surface (and back). See [Map projection](http://en.wikipedia.org/wiki/Map_projection).\n\n * @property bounds: Bounds\n * The bounds (specified in CRS units) where the projection is valid\n\n * @method project(latlng: LatLng): Point\n * Projects geographical coordinates into a 2D point.\n * Only accepts actual `L.LatLng` instances, not arrays.\n\n * @method unproject(point: Point): LatLng\n * The inverse of `project`. Projects a 2D point into a geographical location.\n * Only accepts actual `L.Point` instances, not arrays.\n\n * Note that the projection instances do not inherit from Leafet's `Class` object,\n * and can't be instantiated. Also, new classes can't inherit from them,\n * and methods can't be added to them with the `include` function.\n\n */\n\nexport {LonLat} from './Projection.LonLat';\nexport {Mercator} from './Projection.Mercator';\nexport {SphericalMercator} from './Projection.SphericalMercator';\n"",""import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n"",""import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour.  If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n"",""import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t    dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n"",""import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n"",""import {Evented} from '../core/Events';\nimport {Map} from '../map/Map';\nimport * as Util from '../core/Util';\n\n/*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.Marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n\nexport var Layer = Evented.extend({\n\n\t// Classes extending `L.Layer` will inherit the following options:\n\toptions: {\n\t\t// @option pane: String = 'overlayPane'\n\t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n\t\tpane: 'overlayPane',\n\n\t\t// @option attribution: String = null\n\t\t// String to be shown in the attribution control, e.g. \""© OpenStreetMap contributors\"". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n\t\tattribution: null,\n\n\t\tbubblingMouseEvents: true\n\t},\n\n\t/* @section\n\t * Classes extending `L.Layer` will inherit the following methods:\n\t *\n\t * @method addTo(map: Map|LayerGroup): this\n\t * Adds the layer to the given map or layer group.\n\t */\n\taddTo: function (map) {\n\t\tmap.addLayer(this);\n\t\treturn this;\n\t},\n\n\t// @method remove: this\n\t// Removes the layer from the map it is currently active on.\n\tremove: function () {\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n\n\t// @method removeFrom(map: Map): this\n\t// Removes the layer from the given map\n\tremoveFrom: function (obj) {\n\t\tif (obj) {\n\t\t\tobj.removeLayer(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getPane(name? : String): HTMLElement\n\t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n\tgetPane: function (name) {\n\t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n\t},\n\n\taddInteractiveTarget: function (targetEl) {\n\t\tthis._map._targets[Util.stamp(targetEl)] = this;\n\t\treturn this;\n\t},\n\n\tremoveInteractiveTarget: function (targetEl) {\n\t\tdelete this._map._targets[Util.stamp(targetEl)];\n\t\treturn this;\n\t},\n\n\t// @method getAttribution: String\n\t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\t_layerAdd: function (e) {\n\t\tvar map = e.target;\n\n\t\t// check in case layer gets added and then removed before the map is ready\n\t\tif (!map.hasLayer(this)) { return; }\n\n\t\tthis._map = map;\n\t\tthis._zoomAnimated = map._zoomAnimated;\n\n\t\tif (this.getEvents) {\n\t\t\tvar events = this.getEvents();\n\t\t\tmap.on(events, this);\n\t\t\tthis.once('remove', function () {\n\t\t\t\tmap.off(events, this);\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.onAdd(map);\n\n\t\tif (this.getAttribution && map.attributionControl) {\n\t\t\tmap.attributionControl.addAttribution(this.getAttribution());\n\t\t}\n\n\t\tthis.fire('add');\n\t\tmap.fire('layeradd', {layer: this});\n\t}\n});\n\n/* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n\n/* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\nMap.include({\n\t// @method addLayer(layer: Layer): this\n\t// Adds the given layer to the map\n\taddLayer: function (layer) {\n\t\tif (!layer._layerAdd) {\n\t\t\tthrow new Error('The provided object is not a Layer.');\n\t\t}\n\n\t\tvar id = Util.stamp(layer);\n\t\tif (this._layers[id]) { return this; }\n\t\tthis._layers[id] = layer;\n\n\t\tlayer._mapToAdd = this;\n\n\t\tif (layer.beforeAdd) {\n\t\t\tlayer.beforeAdd(this);\n\t\t}\n\n\t\tthis.whenReady(layer._layerAdd, layer);\n\n\t\treturn this;\n\t},\n\n\t// @method removeLayer(layer: Layer): this\n\t// Removes the given layer from the map.\n\tremoveLayer: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (!this._layers[id]) { return this; }\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tif (layer.getAttribution && this.attributionControl) {\n\t\t\tthis.attributionControl.removeAttribution(layer.getAttribution());\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n\n\t// @method hasLayer(layer: Layer): Boolean\n\t// Returns `true` if the given layer is currently added to the map\n\thasLayer: function (layer) {\n\t\treturn !!layer && (Util.stamp(layer) in this._layers);\n\t},\n\n\t/* @method eachLayer(fn: Function, context?: Object): this\n\t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n\t * ```\n\t * map.eachLayer(function(layer){\n\t *     layer.bindPopup('Hello');\n\t * });\n\t * ```\n\t */\n\teachLayer: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tmethod.call(context, this._layers[i]);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_addLayers: function (layers) {\n\t\tlayers = layers ? (Util.isArray(layers) ? layers : [layers]) : [];\n\n\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_addZoomLimit: function (layer) {\n\t\tif (isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n\t\t\tthis._zoomBoundLayers[Util.stamp(layer)] = layer;\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_removeZoomLimit: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (this._zoomBoundLayers[id]) {\n\t\t\tdelete this._zoomBoundLayers[id];\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_updateZoomLevels: function () {\n\t\tvar minZoom = Infinity,\n\t\t    maxZoom = -Infinity,\n\t\t    oldZoomSpan = this._getZoomSpan();\n\n\t\tfor (var i in this._zoomBoundLayers) {\n\t\t\tvar options = this._zoomBoundLayers[i].options;\n\n\t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n\t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n\t\t}\n\n\t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n\t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n\t\t// @section Map state change events\n\t\t// @event zoomlevelschange: Event\n\t\t// Fired when the number of zoomlevels on the map is changed due\n\t\t// to adding or removing a layer.\n\t\tif (oldZoomSpan !== this._getZoomSpan()) {\n\t\t\tthis.fire('zoomlevelschange');\n\t\t}\n\n\t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n\t\t\tthis.setZoom(this._layersMaxZoom);\n\t\t}\n\t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n\t\t\tthis.setZoom(this._layersMinZoom);\n\t\t}\n\t}\n});\n"",""\r\nimport {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var LayerGroup = Layer.extend({\r\n\r\n\tinitialize: function (layers, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (layers) {\r\n\t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n\t\t\t\tthis.addLayer(layers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addLayer(layer: Layer): this\r\n\t// Adds the given layer to the group.\r\n\taddLayer: function (layer) {\r\n\t\tvar id = this.getLayerId(layer);\r\n\r\n\t\tthis._layers[id] = layer;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.addLayer(layer);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Removes the given layer from the group.\r\n\t// @alternative\r\n\t// @method removeLayer(id: Number): this\r\n\t// Removes the layer with the given internal ID from the group.\r\n\tremoveLayer: function (layer) {\r\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n\t\tif (this._map && this._layers[id]) {\r\n\t\t\tthis._map.removeLayer(this._layers[id]);\r\n\t\t}\r\n\r\n\t\tdelete this._layers[id];\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method hasLayer(layer: Layer): Boolean\r\n\t// Returns `true` if the given layer is currently added to the group.\r\n\t// @alternative\r\n\t// @method hasLayer(id: Number): Boolean\r\n\t// Returns `true` if the given internal ID is currently added to the group.\r\n\thasLayer: function (layer) {\r\n\t\treturn !!layer && (layer in this._layers || this.getLayerId(layer) in this._layers);\r\n\t},\r\n\r\n\t// @method clearLayers(): this\r\n\t// Removes all the layers from the group.\r\n\tclearLayers: function () {\r\n\t\treturn this.eachLayer(this.removeLayer, this);\r\n\t},\r\n\r\n\t// @method invoke(methodName: String, …): this\r\n\t// Calls `methodName` on every layer contained in this group, passing any\r\n\t// additional parameters. Has no effect if the layers contained do not\r\n\t// implement `methodName`.\r\n\tinvoke: function (methodName) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n\t\t    i, layer;\r\n\r\n\t\tfor (i in this._layers) {\r\n\t\t\tlayer = this._layers[i];\r\n\r\n\t\t\tif (layer[methodName]) {\r\n\t\t\t\tlayer[methodName].apply(layer, args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis.eachLayer(map.addLayer, map);\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tthis.eachLayer(map.removeLayer, map);\r\n\t},\r\n\r\n\t// @method eachLayer(fn: Function, context?: Object): this\r\n\t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n\t// ```js\r\n\t// group.eachLayer(function (layer) {\r\n\t// \tlayer.bindPopup('Hello');\r\n\t// });\r\n\t// ```\r\n\teachLayer: function (method, context) {\r\n\t\tfor (var i in this._layers) {\r\n\t\t\tmethod.call(context, this._layers[i]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getLayer(id: Number): Layer\r\n\t// Returns the layer with the given internal ID.\r\n\tgetLayer: function (id) {\r\n\t\treturn this._layers[id];\r\n\t},\r\n\r\n\t// @method getLayers(): Layer[]\r\n\t// Returns an array of all the layers added to the group.\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(layers.push, layers);\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n\tsetZIndex: function (zIndex) {\r\n\t\treturn this.invoke('setZIndex', zIndex);\r\n\t},\r\n\r\n\t// @method getLayerId(layer: Layer): Number\r\n\t// Returns the internal ID for a layer\r\n\tgetLayerId: function (layer) {\r\n\t\treturn Util.stamp(layer);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n// Create a layer group, optionally given an initial set of layers and an `options` object.\r\nexport var layerGroup = function (layers, options) {\r\n\treturn new LayerGroup(layers, options);\r\n};\r\n"",""import {LayerGroup} from './LayerGroup';\r\nimport {LatLngBounds} from '../geo/LatLngBounds';\r\n\r\n/*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n *  * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n *  * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n *  * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var FeatureGroup = LayerGroup.extend({\r\n\r\n\taddLayer: function (layer) {\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlayer.addEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n\t\t// @event layeradd: LayerEvent\r\n\t\t// Fired when a layer is added to this `FeatureGroup`\r\n\t\treturn this.fire('layeradd', {layer: layer});\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\t\tif (!this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (layer in this._layers) {\r\n\t\t\tlayer = this._layers[layer];\r\n\t\t}\r\n\r\n\t\tlayer.removeEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n\t\t// @event layerremove: LayerEvent\r\n\t\t// Fired when a layer is removed from this `FeatureGroup`\r\n\t\treturn this.fire('layerremove', {layer: layer});\r\n\t},\r\n\r\n\t// @method setStyle(style: Path options): this\r\n\t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.invoke('setStyle', style);\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer group to the top of all other layers\r\n\tbringToFront: function () {\r\n\t\treturn this.invoke('bringToFront');\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer group to the back of all other layers\r\n\tbringToBack: function () {\r\n\t\treturn this.invoke('bringToBack');\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new LatLngBounds();\r\n\r\n\t\tfor (var id in this._layers) {\r\n\t\t\tvar layer = this._layers[id];\r\n\t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n\t\t}\r\n\t\treturn bounds;\r\n\t}\r\n});\r\n\r\n// @factory L.featureGroup(layers: Layer[])\r\n// Create a feature group, optionally given an initial set of layers.\r\nexport var featureGroup = function (layers) {\r\n\treturn new FeatureGroup(layers);\r\n};\r\n"",""import {Class} from '../../core/Class';\r\nimport {setOptions} from '../../core/Util';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport {retina} from '../../core/Browser';\r\n\r\n/*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n *     iconUrl: 'my-icon.png',\r\n *     iconRetinaUrl: 'my-icon@2x.png',\r\n *     iconSize: [38, 95],\r\n *     iconAnchor: [22, 94],\r\n *     popupAnchor: [-3, -76],\r\n *     shadowUrl: 'my-icon-shadow.png',\r\n *     shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n *     shadowSize: [68, 95],\r\n *     shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\r\n\r\nexport var Icon = Class.extend({\r\n\r\n\t/* @section\r\n\t * @aka Icon options\r\n\t *\r\n\t * @option iconUrl: String = null\r\n\t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n\t *\r\n\t * @option iconRetinaUrl: String = null\r\n\t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n\t * script path). Used for Retina screen devices.\r\n\t *\r\n\t * @option iconSize: Point = null\r\n\t * Size of the icon image in pixels.\r\n\t *\r\n\t * @option iconAnchor: Point = null\r\n\t * The coordinates of the \""tip\"" of the icon (relative to its top left corner). The icon\r\n\t * will be aligned so that this point is at the marker's geographical location. Centered\r\n\t * by default if size is specified, also can be set in CSS with negative margins.\r\n\t *\r\n\t * @option popupAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which popups will \""open\"", relative to the icon anchor.\r\n\t *\r\n\t * @option tooltipAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which tooltips will \""open\"", relative to the icon anchor.\r\n\t *\r\n\t * @option shadowUrl: String = null\r\n\t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n\t *\r\n\t * @option shadowRetinaUrl: String = null\r\n\t *\r\n\t * @option shadowSize: Point = null\r\n\t * Size of the shadow image in pixels.\r\n\t *\r\n\t * @option shadowAnchor: Point = null\r\n\t * The coordinates of the \""tip\"" of the shadow (relative to its top left corner) (the same\r\n\t * as iconAnchor if not specified).\r\n\t *\r\n\t * @option className: String = ''\r\n\t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n\t */\r\n\r\n\toptions: {\r\n\t\tpopupAnchor: [0, 0],\r\n\t\ttooltipAnchor: [0, 0]\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tsetOptions(this, options);\r\n\t},\r\n\r\n\t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n\t// Called internally when the icon has to be shown, returns a `<img>` HTML element\r\n\t// styled according to the options.\r\n\tcreateIcon: function (oldIcon) {\r\n\t\treturn this._createIcon('icon', oldIcon);\r\n\t},\r\n\r\n\t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n\t// As `createIcon`, but for the shadow beneath it.\r\n\tcreateShadow: function (oldIcon) {\r\n\t\treturn this._createIcon('shadow', oldIcon);\r\n\t},\r\n\r\n\t_createIcon: function (name, oldIcon) {\r\n\t\tvar src = this._getIconUrl(name);\r\n\r\n\t\tif (!src) {\r\n\t\t\tif (name === 'icon') {\r\n\t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n\t\tthis._setIconStyles(img, name);\r\n\r\n\t\treturn img;\r\n\t},\r\n\r\n\t_setIconStyles: function (img, name) {\r\n\t\tvar options = this.options;\r\n\t\tvar sizeOption = options[name + 'Size'];\r\n\r\n\t\tif (typeof sizeOption === 'number') {\r\n\t\t\tsizeOption = [sizeOption, sizeOption];\r\n\t\t}\r\n\r\n\t\tvar size = point(sizeOption),\r\n\t\t    anchor = point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n\t\t            size && size.divideBy(2, true));\r\n\r\n\t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n\t\tif (anchor) {\r\n\t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n\t\t\timg.style.marginTop  = (-anchor.y) + 'px';\r\n\t\t}\r\n\r\n\t\tif (size) {\r\n\t\t\timg.style.width  = size.x + 'px';\r\n\t\t\timg.style.height = size.y + 'px';\r\n\t\t}\r\n\t},\r\n\r\n\t_createImg: function (src, el) {\r\n\t\tel = el || document.createElement('img');\r\n\t\tel.src = src;\r\n\t\treturn el;\r\n\t},\r\n\r\n\t_getIconUrl: function (name) {\r\n\t\treturn retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.icon(options: Icon options)\r\n// Creates an icon instance with the given options.\r\nexport function icon(options) {\r\n\treturn new Icon(options);\r\n}\r\n"",""import {Icon} from './Icon';\nimport * as DomUtil from '../../dom/DomUtil';\n\n/*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\nexport var IconDefault = Icon.extend({\n\n\toptions: {\n\t\ticonUrl:       'marker-icon.png',\n\t\ticonRetinaUrl: 'marker-icon-2x.png',\n\t\tshadowUrl:     'marker-shadow.png',\n\t\ticonSize:    [25, 41],\n\t\ticonAnchor:  [12, 41],\n\t\tpopupAnchor: [1, -34],\n\t\ttooltipAnchor: [16, -28],\n\t\tshadowSize:  [41, 41]\n\t},\n\n\t_getIconUrl: function (name) {\n\t\tif (!IconDefault.imagePath) {\t// Deprecated, backwards-compatibility only\n\t\t\tIconDefault.imagePath = this._detectIconPath();\n\t\t}\n\n\t\t// @option imagePath: String\n\t\t// `Icon.Default` will try to auto-detect the location of the\n\t\t// blue icon images. If you are placing these images in a non-standard\n\t\t// way, set this option to point to the right path.\n\t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n\t},\n\n\t_detectIconPath: function () {\n\t\tvar el = DomUtil.create('div',  'leaflet-default-icon-path', document.body);\n\t\tvar path = DomUtil.getStyle(el, 'background-image') ||\n\t\t           DomUtil.getStyle(el, 'backgroundImage');\t// IE8\n\n\t\tdocument.body.removeChild(el);\n\n\t\tif (path === null || path.indexOf('url') !== 0) {\n\t\t\tpath = '';\n\t\t} else {\n\t\t\tpath = path.replace(/^url\\([\""']?/, '').replace(/marker-icon\\.png[\""']?\\)$/, '');\n\t\t}\n\n\t\treturn path;\n\t}\n});\n"",""import {Handler} from '../../core/Handler';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Draggable} from '../../dom/Draggable';\nimport {toBounds} from '../../geometry/Bounds';\nimport {toPoint} from '../../geometry/Point';\nimport {requestAnimFrame, cancelAnimFrame} from '../../core/Util';\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n\n/* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\nexport var MarkerDrag = Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new Draggable(icon, icon, true);\n\t\t}\n\n\t\tthis._draggable.on({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).enable();\n\n\t\tDomUtil.addClass(icon, 'leaflet-marker-draggable');\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.off({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).disable();\n\n\t\tif (this._marker._icon) {\n\t\t\tDomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');\n\t\t}\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_adjustPan: function (e) {\n\t\tvar marker = this._marker,\n\t\t    map = marker._map,\n\t\t    speed = this._marker.options.autoPanSpeed,\n\t\t    padding = this._marker.options.autoPanPadding,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    bounds = map.getPixelBounds(),\n\t\t    origin = map.getPixelOrigin();\n\n\t\tvar panBounds = toBounds(\n\t\t\tbounds.min._subtract(origin).add(padding),\n\t\t\tbounds.max._subtract(origin).subtract(padding)\n\t\t);\n\n\t\tif (!panBounds.contains(iconPos)) {\n\t\t\t// Compute incremental movement\n\t\t\tvar movement = toPoint(\n\t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n\t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n\t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n\t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n\t\t\t).multiplyBy(speed);\n\n\t\t\tmap.panBy(movement, {animate: false});\n\n\t\t\tthis._draggable._newPos._add(movement);\n\t\t\tthis._draggable._startPos._add(movement);\n\n\t\t\tDomUtil.setPosition(marker._icon, this._draggable._newPos);\n\t\t\tthis._onDrag(e);\n\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDragStart: function () {\n\t\t// @section Dragging events\n\t\t// @event dragstart: Event\n\t\t// Fired when the user starts dragging the marker.\n\n\t\t// @event movestart: Event\n\t\t// Fired when the marker starts moving (because of dragging).\n\n\t\tthis._oldLatLng = this._marker.getLatLng();\n\t\tthis._marker\n\t\t    .closePopup()\n\t\t    .fire('movestart')\n\t\t    .fire('dragstart');\n\t},\n\n\t_onPreDrag: function (e) {\n\t\tif (this._marker.options.autoPan) {\n\t\t\tcancelAnimFrame(this._panRequest);\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tvar marker = this._marker,\n\t\t    shadow = marker._shadow,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    latlng = marker._map.layerPointToLatLng(iconPos);\n\n\t\t// update shadow position\n\t\tif (shadow) {\n\t\t\tDomUtil.setPosition(shadow, iconPos);\n\t\t}\n\n\t\tmarker._latlng = latlng;\n\t\te.latlng = latlng;\n\t\te.oldLatLng = this._oldLatLng;\n\n\t\t// @event drag: Event\n\t\t// Fired repeatedly while the user drags the marker.\n\t\tmarker\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_onDragEnd: function (e) {\n\t\t// @event dragend: DragEndEvent\n\t\t// Fired when the user stops dragging the marker.\n\n\t\t cancelAnimFrame(this._panRequest);\n\n\t\t// @event moveend: Event\n\t\t// Fired when the marker stops moving (because of dragging).\n\t\tdelete this._oldLatLng;\n\t\tthis._marker\n\t\t    .fire('moveend')\n\t\t    .fire('dragend', e);\n\t}\n});\n"",""import {Layer} from '../Layer';\r\nimport {IconDefault} from './Icon.Default';\r\nimport * as Util from '../../core/Util';\r\nimport {toLatLng as latLng} from '../../geo/LatLng';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\nimport {MarkerDrag} from './Marker.Drag';\r\n\r\n/*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var Marker = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka Marker options\r\n\toptions: {\r\n\t\t// @option icon: Icon = *\r\n\t\t// Icon instance to use for rendering the marker.\r\n\t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n\t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n\t\ticon: new IconDefault(),\r\n\r\n\t\t// Option inherited from \""Interactive layer\"" abstract class\r\n\t\tinteractive: true,\r\n\r\n\t\t// @option keyboard: Boolean = true\r\n\t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n\t\tkeyboard: true,\r\n\r\n\t\t// @option title: String = ''\r\n\t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n\t\ttitle: '',\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the icon image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option zIndexOffset: Number = 0\r\n\t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n\t\tzIndexOffset: 0,\r\n\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the marker.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option riseOnHover: Boolean = false\r\n\t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n\t\triseOnHover: false,\r\n\r\n\t\t// @option riseOffset: Number = 250\r\n\t\t// The z-index offset used for the `riseOnHover` feature.\r\n\t\triseOffset: 250,\r\n\r\n\t\t// @option pane: String = 'markerPane'\r\n\t\t// `Map pane` where the markers icon will be added.\r\n\t\tpane: 'markerPane',\r\n\r\n\t\t// @option bubblingMouseEvents: Boolean = false\r\n\t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n\t\tbubblingMouseEvents: false,\r\n\r\n\t\t// @section Draggable marker options\r\n\t\t// @option draggable: Boolean = false\r\n\t\t// Whether the marker is draggable with mouse/touch or not.\r\n\t\tdraggable: false,\r\n\r\n\t\t// @option autoPan: Boolean = false\r\n\t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n\t\tautoPan: false,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(50, 50)\r\n\t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n\t\t// map edge to start panning the map.\r\n\t\tautoPanPadding: [50, 50],\r\n\r\n\t\t// @option autoPanSpeed: Number = 10\r\n\t\t// Number of pixels the map should pan by.\r\n\t\tautoPanSpeed: 10\r\n\t},\r\n\r\n\t/* @section\r\n\t *\r\n\t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n\t */\r\n\r\n\tinitialize: function (latlng, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t\tthis._latlng = latLng(latlng);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._initIcon();\r\n\t\tthis.update();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (this.dragging && this.dragging.enabled()) {\r\n\t\t\tthis.options.draggable = true;\r\n\t\t\tthis.dragging.removeHooks();\r\n\t\t}\r\n\t\tdelete this.dragging;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._removeIcon();\r\n\t\tthis._removeShadow();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\treturn {\r\n\t\t\tzoom: this.update,\r\n\t\t\tviewreset: this.update\r\n\t\t};\r\n\t},\r\n\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the current geographical position of the marker.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Changes the marker position to the given point.\r\n\tsetLatLng: function (latlng) {\r\n\t\tvar oldLatLng = this._latlng;\r\n\t\tthis._latlng = latLng(latlng);\r\n\t\tthis.update();\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n\t},\r\n\r\n\t// @method setZIndexOffset(offset: Number): this\r\n\t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n\tsetZIndexOffset: function (offset) {\r\n\t\tthis.options.zIndexOffset = offset;\r\n\t\treturn this.update();\r\n\t},\r\n\r\n\t// @method setIcon(icon: Icon): this\r\n\t// Changes the marker icon.\r\n\tsetIcon: function (icon) {\r\n\r\n\t\tthis.options.icon = icon;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._initIcon();\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\tif (this._popup) {\r\n\t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetElement: function () {\r\n\t\treturn this._icon;\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tif (this._icon && this._map) {\r\n\t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n\t\t\tthis._setPos(pos);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initIcon: function () {\r\n\t\tvar options = this.options,\r\n\t\t    classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n\t\tvar icon = options.icon.createIcon(this._icon),\r\n\t\t    addIcon = false;\r\n\r\n\t\t// if we're not reusing the icon, remove the old one and init new one\r\n\t\tif (icon !== this._icon) {\r\n\t\t\tif (this._icon) {\r\n\t\t\t\tthis._removeIcon();\r\n\t\t\t}\r\n\t\t\taddIcon = true;\r\n\r\n\t\t\tif (options.title) {\r\n\t\t\t\ticon.title = options.title;\r\n\t\t\t}\r\n\r\n\t\t\tif (icon.tagName === 'IMG') {\r\n\t\t\t\ticon.alt = options.alt || '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDomUtil.addClass(icon, classToAdd);\r\n\r\n\t\tif (options.keyboard) {\r\n\t\t\ticon.tabIndex = '0';\r\n\t\t}\r\n\r\n\t\tthis._icon = icon;\r\n\r\n\t\tif (options.riseOnHover) {\r\n\t\t\tthis.on({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n\t\t    addShadow = false;\r\n\r\n\t\tif (newShadow !== this._shadow) {\r\n\t\t\tthis._removeShadow();\r\n\t\t\taddShadow = true;\r\n\t\t}\r\n\r\n\t\tif (newShadow) {\r\n\t\t\tDomUtil.addClass(newShadow, classToAdd);\r\n\t\t\tnewShadow.alt = '';\r\n\t\t}\r\n\t\tthis._shadow = newShadow;\r\n\r\n\r\n\t\tif (options.opacity < 1) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\r\n\t\tif (addIcon) {\r\n\t\t\tthis.getPane().appendChild(this._icon);\r\n\t\t}\r\n\t\tthis._initInteraction();\r\n\t\tif (newShadow && addShadow) {\r\n\t\t\tthis.getPane('shadowPane').appendChild(this._shadow);\r\n\t\t}\r\n\t},\r\n\r\n\t_removeIcon: function () {\r\n\t\tif (this.options.riseOnHover) {\r\n\t\t\tthis.off({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._icon);\r\n\t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n\t\tthis._icon = null;\r\n\t},\r\n\r\n\t_removeShadow: function () {\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.remove(this._shadow);\r\n\t\t}\r\n\t\tthis._shadow = null;\r\n\t},\r\n\r\n\t_setPos: function (pos) {\r\n\t\tDomUtil.setPosition(this._icon, pos);\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setPosition(this._shadow, pos);\r\n\t\t}\r\n\r\n\t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n\t\tthis._resetZIndex();\r\n\t},\r\n\r\n\t_updateZIndex: function (offset) {\r\n\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n\t},\r\n\r\n\t_animateZoom: function (opt) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n\t\tthis._setPos(pos);\r\n\t},\r\n\r\n\t_initInteraction: function () {\r\n\r\n\t\tif (!this.options.interactive) { return; }\r\n\r\n\t\tDomUtil.addClass(this._icon, 'leaflet-interactive');\r\n\r\n\t\tthis.addInteractiveTarget(this._icon);\r\n\r\n\t\tif (MarkerDrag) {\r\n\t\t\tvar draggable = this.options.draggable;\r\n\t\t\tif (this.dragging) {\r\n\t\t\t\tdraggable = this.dragging.enabled();\r\n\t\t\t\tthis.dragging.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n\t\t\tif (draggable) {\r\n\t\t\t\tthis.dragging.enable();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the opacity of the marker.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tif (this._map) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tvar opacity = this.options.opacity;\r\n\r\n\t\tDomUtil.setOpacity(this._icon, opacity);\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setOpacity(this._shadow, opacity);\r\n\t\t}\r\n\t},\r\n\r\n\t_bringToFront: function () {\r\n\t\tthis._updateZIndex(this.options.riseOffset);\r\n\t},\r\n\r\n\t_resetZIndex: function () {\r\n\t\tthis._updateZIndex(0);\r\n\t},\r\n\r\n\t_getPopupAnchor: function () {\r\n\t\treturn this.options.icon.options.popupAnchor;\r\n\t},\r\n\r\n\t_getTooltipAnchor: function () {\r\n\t\treturn this.options.icon.options.tooltipAnchor;\r\n\t}\r\n});\r\n\r\n\r\n// factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n// @factory L.marker(latlng: LatLng, options? : Marker options)\r\n// Instantiates a Marker object given a geographical point and optionally an options object.\r\nexport function marker(latlng, options) {\r\n\treturn new Marker(latlng, options);\r\n}\r\n"",""import {Layer} from '../Layer';\nimport * as Util from '../../core/Util';\n\n/*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\nexport var Path = Layer.extend({\n\n\t// @section\n\t// @aka Path options\n\toptions: {\n\t\t// @option stroke: Boolean = true\n\t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n\t\tstroke: true,\n\n\t\t// @option color: String = '#3388ff'\n\t\t// Stroke color\n\t\tcolor: '#3388ff',\n\n\t\t// @option weight: Number = 3\n\t\t// Stroke width in pixels\n\t\tweight: 3,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Stroke opacity\n\t\topacity: 1,\n\n\t\t// @option lineCap: String= 'round'\n\t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n\t\tlineCap: 'round',\n\n\t\t// @option lineJoin: String = 'round'\n\t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n\t\tlineJoin: 'round',\n\n\t\t// @option dashArray: String = null\n\t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashArray: null,\n\n\t\t// @option dashOffset: String = null\n\t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashOffset: null,\n\n\t\t// @option fill: Boolean = depends\n\t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n\t\tfill: false,\n\n\t\t// @option fillColor: String = *\n\t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n\t\tfillColor: null,\n\n\t\t// @option fillOpacity: Number = 0.2\n\t\t// Fill opacity.\n\t\tfillOpacity: 0.2,\n\n\t\t// @option fillRule: String = 'evenodd'\n\t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n\t\tfillRule: 'evenodd',\n\n\t\t// className: '',\n\n\t\t// Option inherited from \""Interactive layer\"" abstract class\n\t\tinteractive: true,\n\n\t\t// @option bubblingMouseEvents: Boolean = true\n\t\t// When `true`, a mouse event on this path will trigger the same event on the map\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n\t\tbubblingMouseEvents: true\n\t},\n\n\tbeforeAdd: function (map) {\n\t\t// Renderer is set here because we need to call renderer.getEvents\n\t\t// before this.getEvents.\n\t\tthis._renderer = map.getRenderer(this);\n\t},\n\n\tonAdd: function () {\n\t\tthis._renderer._initPath(this);\n\t\tthis._reset();\n\t\tthis._renderer._addPath(this);\n\t},\n\n\tonRemove: function () {\n\t\tthis._renderer._removePath(this);\n\t},\n\n\t// @method redraw(): this\n\t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._renderer._updatePath(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method setStyle(style: Path options): this\n\t// Changes the appearance of a Path based on the options in the `Path options` object.\n\tsetStyle: function (style) {\n\t\tUtil.setOptions(this, style);\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._updateStyle(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToFront(): this\n\t// Brings the layer to the top of all path layers.\n\tbringToFront: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToFront(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack(): this\n\t// Brings the layer to the bottom of all path layers.\n\tbringToBack: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToBack(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetElement: function () {\n\t\treturn this._path;\n\t},\n\n\t_reset: function () {\n\t\t// defined in child classes\n\t\tthis._project();\n\t\tthis._update();\n\t},\n\n\t_clickTolerance: function () {\n\t\t// used when doing hit detection for Canvas layers\n\t\treturn (this.options.stroke ? this.options.weight / 2 : 0) + this._renderer.options.tolerance;\n\t}\n});\n"",""import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n/*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\nexport var CircleMarker = Path.extend({\n\n\t// @section\n\t// @aka CircleMarker options\n\toptions: {\n\t\tfill: true,\n\n\t\t// @option radius: Number = 10\n\t\t// Radius of the circle marker, in pixels\n\t\tradius: 10\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\t// @method setLatLng(latLng: LatLng): this\n\t// Sets the position of a circle marker to a new location.\n\tsetLatLng: function (latlng) {\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis.redraw();\n\t\treturn this.fire('move', {latlng: this._latlng});\n\t},\n\n\t// @method getLatLng(): LatLng\n\t// Returns the current geographical position of the circle marker\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle marker. Units are in pixels.\n\tsetRadius: function (radius) {\n\t\tthis.options.radius = this._radius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of the circle\n\tgetRadius: function () {\n\t\treturn this._radius;\n\t},\n\n\tsetStyle : function (options) {\n\t\tvar radius = options && options.radius || this._radius;\n\t\tPath.prototype.setStyle.call(this, options);\n\t\tthis.setRadius(radius);\n\t\treturn this;\n\t},\n\n\t_project: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._updateBounds();\n\t},\n\n\t_updateBounds: function () {\n\t\tvar r = this._radius,\n\t\t    r2 = this._radiusY || r,\n\t\t    w = this._clickTolerance(),\n\t\t    p = [r + w, r2 + w];\n\t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n\t},\n\n\t_update: function () {\n\t\tif (this._map) {\n\t\t\tthis._updatePath();\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updateCircle(this);\n\t},\n\n\t_empty: function () {\n\t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n\t}\n});\n\n\n// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n// Instantiates a circle marker object given a geographical point, and an optional options object.\nexport function circleMarker(latlng, options) {\n\treturn new CircleMarker(latlng, options);\n}\n"",""import {CircleMarker} from './CircleMarker';\nimport {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Earth} from '../../geo/crs/CRS.Earth';\n\n\n/*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\nexport var Circle = CircleMarker.extend({\n\n\tinitialize: function (latlng, options, legacyOptions) {\n\t\tif (typeof options === 'number') {\n\t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n\t\t\toptions = Util.extend({}, legacyOptions, {radius: options});\n\t\t}\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\n\t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n\t\t// @section\n\t\t// @aka Circle options\n\t\t// @option radius: Number; Radius of the circle, in meters.\n\t\tthis._mRadius = this.options.radius;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle. Units are in meters.\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of a circle. Units are in meters.\n\tgetRadius: function () {\n\t\treturn this._mRadius;\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\tvar half = [this._radius, this._radiusY || this._radius];\n\n\t\treturn new LatLngBounds(\n\t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n\t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n\t},\n\n\tsetStyle: Path.prototype.setStyle,\n\n\t_project: function () {\n\n\t\tvar lng = this._latlng.lng,\n\t\t    lat = this._latlng.lat,\n\t\t    map = this._map,\n\t\t    crs = map.options.crs;\n\n\t\tif (crs.distance === Earth.distance) {\n\t\t\tvar d = Math.PI / 180,\n\t\t\t    latR = (this._mRadius / Earth.R) / d,\n\t\t\t    top = map.project([lat + latR, lng]),\n\t\t\t    bottom = map.project([lat - latR, lng]),\n\t\t\t    p = top.add(bottom).divideBy(2),\n\t\t\t    lat2 = map.unproject(p).lat,\n\t\t\t    lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n\t\t\t            (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n\t\t\tif (isNaN(lngR) || lngR === 0) {\n\t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n\t\t\t}\n\n\t\t\tthis._point = p.subtract(map.getPixelOrigin());\n\t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n\t\t\tthis._radiusY = p.y - top.y;\n\n\t\t} else {\n\t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n\t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n\t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n\t\t}\n\n\t\tthis._updateBounds();\n\t}\n});\n\n// @factory L.circle(latlng: LatLng, options?: Circle options)\n// Instantiates a circle object given a geographical point, and an options object\n// which contains the circle radius.\n// @alternative\n// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n// Do not use in new applications or plugins.\nexport function circle(latlng, options, legacyOptions) {\n\treturn new Circle(latlng, options, legacyOptions);\n}\n"",""import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {LatLng, toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\nimport {Point} from '../../geometry/Point';\n\n/*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\nexport var Polyline = Path.extend({\n\n\t// @section\n\t// @aka Polyline options\n\toptions: {\n\t\t// @option smoothFactor: Number = 1.0\n\t\t// How much to simplify the polyline on each zoom level. More means\n\t\t// better performance and smoother look, and less means more accurate representation.\n\t\tsmoothFactor: 1.0,\n\n\t\t// @option noClip: Boolean = false\n\t\t// Disable polyline clipping.\n\t\tnoClip: false\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._setLatLngs(latlngs);\n\t},\n\n\t// @method getLatLngs(): LatLng[]\n\t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\t// @method setLatLngs(latlngs: LatLng[]): this\n\t// Replaces all the points in the polyline with the given array of geographical points.\n\tsetLatLngs: function (latlngs) {\n\t\tthis._setLatLngs(latlngs);\n\t\treturn this.redraw();\n\t},\n\n\t// @method isEmpty(): Boolean\n\t// Returns `true` if the Polyline has no LatLngs.\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length;\n\t},\n\n\t// @method closestLayerPoint(p: Point): Point\n\t// Returns the point closest to `p` on the Polyline.\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity,\n\t\t    minPoint = null,\n\t\t    closest = LineUtil._sqClosestPointOnSegment,\n\t\t    p1, p2;\n\n\t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n\t\t\tvar points = this._parts[j];\n\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\n\t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n\t\t\t\tif (sqDist < minDistance) {\n\t\t\t\t\tminDistance = sqDist;\n\t\t\t\t\tminPoint = closest(p, p1, p2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the polyline.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\n\t\tvar i, halfDist, segDist, dist, p1, p2, ratio,\n\t\t    points = this._rings[0],\n\t\t    len = points.length;\n\n\t\tif (!len) { return null; }\n\n\t\t// polyline centroid algorithm; only uses the first ring if there are multiple\n\n\t\tfor (i = 0, halfDist = 0; i < len - 1; i++) {\n\t\t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\n\t\t}\n\n\t\t// The line is so small in the current view that all points are on the same pixel.\n\t\tif (halfDist === 0) {\n\t\t\treturn this._map.layerPointToLatLng(points[0]);\n\t\t}\n\n\t\tfor (i = 0, dist = 0; i < len - 1; i++) {\n\t\t\tp1 = points[i];\n\t\t\tp2 = points[i + 1];\n\t\t\tsegDist = p1.distanceTo(p2);\n\t\t\tdist += segDist;\n\n\t\t\tif (dist > halfDist) {\n\t\t\t\tratio = (dist - halfDist) / segDist;\n\t\t\t\treturn this._map.layerPointToLatLng([\n\t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\n\t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\treturn this._bounds;\n\t},\n\n\t// @method addLatLng(latlng: LatLng, latlngs? LatLng[]): this\n\t// Adds a given point to the polyline. By default, adds to the first ring of\n\t// the polyline in case of a multi-polyline, but can be overridden by passing\n\t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n\taddLatLng: function (latlng, latlngs) {\n\t\tlatlngs = latlngs || this._defaultShape();\n\t\tlatlng = toLatLng(latlng);\n\t\tlatlngs.push(latlng);\n\t\tthis._bounds.extend(latlng);\n\t\treturn this.redraw();\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tthis._bounds = new LatLngBounds();\n\t\tthis._latlngs = this._convertLatLngs(latlngs);\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n\t},\n\n\t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = [],\n\t\t    flat = LineUtil.isFlat(latlngs);\n\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tif (flat) {\n\t\t\t\tresult[i] = toLatLng(latlngs[i]);\n\t\t\t\tthis._bounds.extend(result[i]);\n\t\t\t} else {\n\t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t_project: function () {\n\t\tvar pxBounds = new Bounds();\n\t\tthis._rings = [];\n\t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n\t\tvar w = this._clickTolerance(),\n\t\t    p = new Point(w, w);\n\n\t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n\t\t\tpxBounds.min._subtract(p);\n\t\t\tpxBounds.max._add(p);\n\t\t\tthis._pxBounds = pxBounds;\n\t\t}\n\t},\n\n\t// recursively turns latlngs into a set of rings with projected coordinates\n\t_projectLatlngs: function (latlngs, result, projectedBounds) {\n\t\tvar flat = latlngs[0] instanceof LatLng,\n\t\t    len = latlngs.length,\n\t\t    i, ring;\n\n\t\tif (flat) {\n\t\t\tring = [];\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n\t\t\t\tprojectedBounds.extend(ring[i]);\n\t\t\t}\n\t\t\tresult.push(ring);\n\t\t} else {\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n\t\t\t}\n\t\t}\n\t},\n\n\t// clip polyline by renderer bounds so that we have less to render for performance\n\t_clipPoints: function () {\n\t\tvar bounds = this._renderer._bounds;\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = this._parts,\n\t\t    i, j, k, len, len2, segment, points;\n\n\t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n\t\t\tpoints = this._rings[i];\n\n\t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n\t\t\t\tsegment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);\n\n\t\t\t\tif (!segment) { continue; }\n\n\t\t\t\tparts[k] = parts[k] || [];\n\t\t\t\tparts[k].push(segment[0]);\n\n\t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n\t\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline for performance\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t    tolerance = this.options.smoothFactor;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = LineUtil.simplify(parts[i], tolerance);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) { return; }\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, part,\n\t\t    w = this._clickTolerance();\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// hit detection for polylines\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) { continue; }\n\n\t\t\t\tif (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n// Instantiates a polyline object given an array of geographical points and\n// optionally an options object. You can create a `Polyline` object with\n// multiple separate lines (`MultiPolyline`) by passing an array of arrays\n// of geographic points.\nexport function polyline(latlngs, options) {\n\treturn new Polyline(latlngs, options);\n}\n\n// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\nPolyline._flat = LineUtil._flat;\n"",""import {Polyline} from './Polyline';\nimport {LatLng} from '../../geo/LatLng';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport * as PolyUtil from '../../geometry/PolyUtil';\n\n/*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n *   [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *   [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n *   [ // first polygon\n *     [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *     [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n *   ],\n *   [ // second polygon\n *     [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n *   ]\n * ];\n * ```\n */\n\nexport var Polygon = Polyline.extend({\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length || !this._latlngs[0].length;\n\t},\n\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\n\t\tvar i, j, p1, p2, f, area, x, y, center,\n\t\t    points = this._rings[0],\n\t\t    len = points.length;\n\n\t\tif (!len) { return null; }\n\n\t\t// polygon centroid algorithm; only uses the first ring if there are multiple\n\n\t\tarea = x = y = 0;\n\n\t\tfor (i = 0, j = len - 1; i < len; j = i++) {\n\t\t\tp1 = points[i];\n\t\t\tp2 = points[j];\n\n\t\t\tf = p1.y * p2.x - p2.y * p1.x;\n\t\t\tx += (p1.x + p2.x) * f;\n\t\t\ty += (p1.y + p2.y) * f;\n\t\t\tarea += f * 3;\n\t\t}\n\n\t\tif (area === 0) {\n\t\t\t// Polygon is so small that all points are on same pixel.\n\t\t\tcenter = points[0];\n\t\t} else {\n\t\t\tcenter = [x / area, y / area];\n\t\t}\n\t\treturn this._map.layerPointToLatLng(center);\n\t},\n\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n\t\t    len = result.length;\n\n\t\t// remove last point if it equals first one\n\t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n\t\t\tresult.pop();\n\t\t}\n\t\treturn result;\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n\t\tif (LineUtil.isFlat(this._latlngs)) {\n\t\t\tthis._latlngs = [this._latlngs];\n\t\t}\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n\t},\n\n\t_clipPoints: function () {\n\t\t// polygons need a different clipping algorithm so we redefine that\n\n\t\tvar bounds = this._renderer._bounds,\n\t\t    w = this.options.weight,\n\t\t    p = new Point(w, w);\n\n\t\t// increase clip padding by stroke width to avoid stroke on clip edges\n\t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n\t\t\tclipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);\n\t\t\tif (clipped.length) {\n\t\t\t\tthis._parts.push(clipped);\n\t\t\t}\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this, true);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t    part, p1, p2, i, j, k, len, len2;\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// also check if it's on polygon stroke\n\t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n\t}\n\n});\n\n\n// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\nexport function polygon(latlngs, options) {\n\treturn new Polygon(latlngs, options);\n}\n"",""import {LayerGroup} from './LayerGroup';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Marker} from './marker/Marker';\r\nimport {Circle} from './vector/Circle';\r\nimport {CircleMarker} from './vector/CircleMarker';\r\nimport {Polyline} from './vector/Polyline';\r\nimport {Polygon} from './vector/Polygon';\r\nimport {LatLng} from '../geo/LatLng';\r\nimport * as LineUtil from '../geometry/LineUtil';\r\n\r\n\r\n/*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var GeoJSON = FeatureGroup.extend({\r\n\r\n\t/* @section\r\n\t * @aka GeoJSON options\r\n\t *\r\n\t * @option pointToLayer: Function = *\r\n\t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n\t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n\t * The default is to spawn a default `Marker`:\r\n\t * ```js\r\n\t * function(geoJsonPoint, latlng) {\r\n\t * \treturn L.marker(latlng);\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option style: Function = *\r\n\t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n\t * called internally when data is added.\r\n\t * The default value is to not override any defaults:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn {}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option onEachFeature: Function = *\r\n\t * A `Function` that will be called once for each created `Feature`, after it has\r\n\t * been created and styled. Useful for attaching events and popups to features.\r\n\t * The default is to do nothing with the newly created layers:\r\n\t * ```js\r\n\t * function (feature, layer) {}\r\n\t * ```\r\n\t *\r\n\t * @option filter: Function = *\r\n\t * A `Function` that will be used to decide whether to include a feature or not.\r\n\t * The default is to include all features:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn true;\r\n\t * }\r\n\t * ```\r\n\t * Note: dynamically changing the `filter` option will have effect only on newly\r\n\t * added data. It will _not_ re-evaluate already included features.\r\n\t *\r\n\t * @option coordsToLatLng: Function = *\r\n\t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n\t * The default is the `coordsToLatLng` static method.\r\n\t */\r\n\r\n\tinitialize: function (geojson, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (geojson) {\r\n\t\t\tthis.addData(geojson);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addData( <GeoJSON> data ): this\r\n\t// Adds a GeoJSON object to the layer.\r\n\taddData: function (geojson) {\r\n\t\tvar features = Util.isArray(geojson) ? geojson : geojson.features,\r\n\t\t    i, len, feature;\r\n\r\n\t\tif (features) {\r\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n\t\t\t\t// only add this if geometry or geometries are set and not null\r\n\t\t\t\tfeature = features[i];\r\n\t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n\t\t\t\t\tthis.addData(feature);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n\t\tvar layer = geometryToLayer(geojson, options);\r\n\t\tif (!layer) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlayer.feature = asFeature(geojson);\r\n\r\n\t\tlayer.defaultOptions = layer.options;\r\n\t\tthis.resetStyle(layer);\r\n\r\n\t\tif (options.onEachFeature) {\r\n\t\t\toptions.onEachFeature(geojson, layer);\r\n\t\t}\r\n\r\n\t\treturn this.addLayer(layer);\r\n\t},\r\n\r\n\t// @method resetStyle( <Path> layer ): this\r\n\t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n\tresetStyle: function (layer) {\r\n\t\t// reset any custom styles\r\n\t\tlayer.options = Util.extend({}, layer.defaultOptions);\r\n\t\tthis._setLayerStyle(layer, this.options.style);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setStyle( <Function> style ): this\r\n\t// Changes styles of GeoJSON vector layers with the given style function.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.eachLayer(function (layer) {\r\n\t\t\tthis._setLayerStyle(layer, style);\r\n\t\t}, this);\r\n\t},\r\n\r\n\t_setLayerStyle: function (layer, style) {\r\n\t\tif (typeof style === 'function') {\r\n\t\t\tstyle = style(layer.feature);\r\n\t\t}\r\n\t\tif (layer.setStyle) {\r\n\t\t\tlayer.setStyle(style);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @section\r\n// There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n// Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// functions if provided as options.\r\nexport function geometryToLayer(geojson, options) {\r\n\r\n\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n\t    coords = geometry ? geometry.coordinates : null,\r\n\t    layers = [],\r\n\t    pointToLayer = options && options.pointToLayer,\r\n\t    _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n\t    latlng, latlngs, i, len;\r\n\r\n\tif (!coords && !geometry) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (geometry.type) {\r\n\tcase 'Point':\r\n\t\tlatlng = _coordsToLatLng(coords);\r\n\t\treturn pointToLayer ? pointToLayer(geojson, latlng) : new Marker(latlng);\r\n\r\n\tcase 'MultiPoint':\r\n\t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n\t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n\t\t\tlayers.push(pointToLayer ? pointToLayer(geojson, latlng) : new Marker(latlng));\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'LineString':\r\n\tcase 'MultiLineString':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n\t\treturn new Polyline(latlngs, options);\r\n\r\n\tcase 'Polygon':\r\n\tcase 'MultiPolygon':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n\t\treturn new Polygon(latlngs, options);\r\n\r\n\tcase 'GeometryCollection':\r\n\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n\t\t\tvar layer = geometryToLayer({\r\n\t\t\t\tgeometry: geometry.geometries[i],\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tproperties: geojson.properties\r\n\t\t\t}, options);\r\n\r\n\t\t\tif (layer) {\r\n\t\t\t\tlayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tdefault:\r\n\t\tthrow new Error('Invalid GeoJSON object.');\r\n\t}\r\n}\r\n\r\n// @function coordsToLatLng(coords: Array): LatLng\r\n// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\nexport function coordsToLatLng(coords) {\r\n\treturn new LatLng(coords[1], coords[0], coords[2]);\r\n}\r\n\r\n// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\nexport function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n\tvar latlngs = [];\r\n\r\n\tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n\t\tlatlng = levelsDeep ?\r\n\t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n\t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n\t\tlatlngs.push(latlng);\r\n\t}\r\n\r\n\treturn latlngs;\r\n}\r\n\r\n// @function latLngToCoords(latlng: LatLng, precision?: Number): Array\r\n// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\nexport function latLngToCoords(latlng, precision) {\r\n\tprecision = typeof precision === 'number' ? precision : 6;\r\n\treturn latlng.alt !== undefined ?\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision), Util.formatNum(latlng.alt, precision)] :\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision)];\r\n}\r\n\r\n// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean): Array\r\n// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\nexport function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n\tvar coords = [];\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tcoords.push(levelsDeep ?\r\n\t\t\tlatLngsToCoords(latlngs[i], levelsDeep - 1, closed, precision) :\r\n\t\t\tlatLngToCoords(latlngs[i], precision));\r\n\t}\r\n\r\n\tif (!levelsDeep && closed) {\r\n\t\tcoords.push(coords[0]);\r\n\t}\r\n\r\n\treturn coords;\r\n}\r\n\r\nexport function getFeature(layer, newGeometry) {\r\n\treturn layer.feature ?\r\n\t\tUtil.extend({}, layer.feature, {geometry: newGeometry}) :\r\n\t\tasFeature(newGeometry);\r\n}\r\n\r\n// @function asFeature(geojson: Object): Object\r\n// Normalize GeoJSON geometries/features into GeoJSON features.\r\nexport function asFeature(geojson) {\r\n\tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n\t\treturn geojson;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'Feature',\r\n\t\tproperties: {},\r\n\t\tgeometry: geojson\r\n\t};\r\n}\r\n\r\nvar PointToGeoJSON = {\r\n\ttoGeoJSON: function (precision) {\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'Point',\r\n\t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// @namespace Marker\r\n// @method toGeoJSON(): Object\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\nMarker.include(PointToGeoJSON);\r\n\r\n// @namespace CircleMarker\r\n// @method toGeoJSON(): Object\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\nCircle.include(PointToGeoJSON);\r\nCircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n// @namespace Polyline\r\n// @method toGeoJSON(): Object\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\nPolyline.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar multi = !LineUtil.isFlat(this._latlngs);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// @namespace Polygon\r\n// @method toGeoJSON(): Object\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\nPolygon.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar holes = !LineUtil.isFlat(this._latlngs),\r\n\t\t    multi = holes && !LineUtil.isFlat(this._latlngs[0]);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n\t\tif (!holes) {\r\n\t\t\tcoords = [coords];\r\n\t\t}\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// @namespace LayerGroup\r\nLayerGroup.include({\r\n\ttoMultiPoint: function (precision) {\r\n\t\tvar coords = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n\t\t});\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'MultiPoint',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t},\r\n\r\n\t// @method toGeoJSON(): Object\r\n\t// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n\ttoGeoJSON: function (precision) {\r\n\r\n\t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n\t\tif (type === 'MultiPoint') {\r\n\t\t\treturn this.toMultiPoint(precision);\r\n\t\t}\r\n\r\n\t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n\t\t    jsons = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tif (layer.toGeoJSON) {\r\n\t\t\t\tvar json = layer.toGeoJSON(precision);\r\n\t\t\t\tif (isGeometryCollection) {\r\n\t\t\t\t\tjsons.push(json.geometry);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar feature = asFeature(json);\r\n\t\t\t\t\t// Squash nested feature collections\r\n\t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n\t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjsons.push(feature);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (isGeometryCollection) {\r\n\t\t\treturn getFeature(this, {\r\n\t\t\t\tgeometries: jsons,\r\n\t\t\t\ttype: 'GeometryCollection'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: jsons\r\n\t\t};\r\n\t}\r\n});\r\n\r\n// @namespace GeoJSON\r\n// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n// Creates a GeoJSON layer. Optionally accepts an object in\r\n// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n// (you can alternatively add it later with `addData` method) and an `options` object.\r\nexport function geoJSON(geojson, options) {\r\n\treturn new GeoJSON(geojson, options);\r\n}\r\n\r\n// Backward compatibility.\r\nexport var geoJson = geoJSON;\r\n"",""import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var ImageOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka ImageOverlay options\r\n\toptions: {\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the image overlay.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the image.\r\n\t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option errorOverlayUrl: String = ''\r\n\t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n\t\terrorOverlayUrl: '',\r\n\r\n\t\t// @option zIndex: Number = 1\r\n\t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n\t\tzIndex: 1,\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom class name to assign to the image. Empty by default.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n\t\tthis._url = url;\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\tonAdd: function () {\r\n\t\tif (!this._image) {\r\n\t\t\tthis._initImage();\r\n\r\n\t\t\tif (this.options.opacity < 1) {\r\n\t\t\t\tthis._updateOpacity();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._image, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._image);\r\n\t\t}\r\n\r\n\t\tthis.getPane().appendChild(this._image);\r\n\t\tthis._reset();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tDomUtil.remove(this._image);\r\n\t\tif (this.options.interactive) {\r\n\t\t\tthis.removeInteractiveTarget(this._image);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Sets the opacity of the overlay.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetStyle: function (styleOpts) {\r\n\t\tif (styleOpts.opacity) {\r\n\t\t\tthis.setOpacity(styleOpts.opacity);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer to the top of all overlays.\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer to the bottom of all overlays.\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setUrl(url: String): this\r\n\t// Changes the URL of the image.\r\n\tsetUrl: function (url) {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._image.src = url;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setBounds(bounds: LatLngBounds): this\r\n\t// Update the bounds that this ImageOverlay covers\r\n\tsetBounds: function (bounds) {\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._reset();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._reset,\r\n\t\t\tviewreset: this._reset\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method setZIndex(value: Number): this\r\n\t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n\tsetZIndex: function (value) {\r\n\t\tthis.options.zIndex = value;\r\n\t\tthis._updateZIndex();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Get the bounds that this ImageOverlay covers\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t},\r\n\r\n\t// @method getElement(): HTMLElement\r\n\t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n\t// used by this overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._image;\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n\t\tvar img = this._image = wasElementSupplied ? this._url : DomUtil.create('img');\r\n\r\n\t\tDomUtil.addClass(img, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(img, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(img, this.options.className); }\r\n\r\n\t\timg.onselectstart = Util.falseFn;\r\n\t\timg.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the ImageOverlay layer has loaded its image\r\n\t\timg.onload = Util.bind(this.fire, this, 'load');\r\n\t\timg.onerror = Util.bind(this._overlayOnError, this, 'error');\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\tif (this.options.zIndex) {\r\n\t\t\tthis._updateZIndex();\r\n\t\t}\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tthis._url = img.src;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\timg.src = this._url;\r\n\t\timg.alt = this.options.alt;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar scale = this._map.getZoomScale(e.zoom),\r\n\t\t    offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n\t\tDomUtil.setTransform(this._image, offset, scale);\r\n\t},\r\n\r\n\t_reset: function () {\r\n\t\tvar image = this._image,\r\n\t\t    bounds = new Bounds(\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n\t\t    size = bounds.getSize();\r\n\r\n\t\tDomUtil.setPosition(image, bounds.min);\r\n\r\n\t\timage.style.width  = size.x + 'px';\r\n\t\timage.style.height = size.y + 'px';\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tDomUtil.setOpacity(this._image, this.options.opacity);\r\n\t},\r\n\r\n\t_updateZIndex: function () {\r\n\t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n\t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n\t\t}\r\n\t},\r\n\r\n\t_overlayOnError: function () {\r\n\t\t// @event error: Event\r\n\t\t// Fired when the ImageOverlay layer fails to load its image\r\n\t\tthis.fire('error');\r\n\r\n\t\tvar errorUrl = this.options.errorOverlayUrl;\r\n\t\tif (errorUrl && this._url !== errorUrl) {\r\n\t\t\tthis._url = errorUrl;\r\n\t\t\tthis._image.src = errorUrl;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n// Instantiates an image overlay object given the URL of the image and the\r\n// geographical bounds it is tied to.\r\nexport var imageOverlay = function (url, bounds, options) {\r\n\treturn new ImageOverlay(url, bounds, options);\r\n};\r\n"",""import {ImageOverlay} from './ImageOverlay';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)\r\n * HTML5 element.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',\r\n * \tvideoBounds = [[ 32, -130], [ 13, -100]];\r\n * L.videoOverlay(videoUrl, videoBounds ).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var VideoOverlay = ImageOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka VideoOverlay options\r\n\toptions: {\r\n\t\t// @option autoplay: Boolean = true\r\n\t\t// Whether the video starts playing automatically when loaded.\r\n\t\tautoplay: true,\r\n\r\n\t\t// @option loop: Boolean = true\r\n\t\t// Whether the video will loop back to the beginning when played.\r\n\t\tloop: true\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'VIDEO';\r\n\t\tvar vid = this._image = wasElementSupplied ? this._url : DomUtil.create('video');\r\n\r\n\t\tDomUtil.addClass(vid, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(vid, 'leaflet-zoom-animated'); }\r\n\r\n\t\tvid.onselectstart = Util.falseFn;\r\n\t\tvid.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the video has finished loading the first frame\r\n\t\tvid.onloadeddata = Util.bind(this.fire, this, 'load');\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tvar sourceElements = vid.getElementsByTagName('source');\r\n\t\t\tvar sources = [];\r\n\t\t\tfor (var j = 0; j < sourceElements.length; j++) {\r\n\t\t\t\tsources.push(sourceElements[j].src);\r\n\t\t\t}\r\n\r\n\t\t\tthis._url = (sourceElements.length > 0) ? sources : [vid.src];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!Util.isArray(this._url)) { this._url = [this._url]; }\r\n\r\n\t\tvid.autoplay = !!this.options.autoplay;\r\n\t\tvid.loop = !!this.options.loop;\r\n\t\tfor (var i = 0; i < this._url.length; i++) {\r\n\t\t\tvar source = DomUtil.create('source');\r\n\t\t\tsource.src = this._url[i];\r\n\t\t\tvid.appendChild(source);\r\n\t\t}\r\n\t}\r\n\r\n\t// @method getElement(): HTMLVideoElement\r\n\t// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)\r\n\t// used by this overlay.\r\n});\r\n\r\n\r\n// @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)\r\n// Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the\r\n// geographical bounds it is tied to.\r\n\r\nexport function videoOverlay(video, bounds, options) {\r\n\treturn new VideoOverlay(video, bounds, options);\r\n}\r\n"",""import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {toPoint} from '../geometry/Point';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class DivOverlay\r\n * @inherits Layer\r\n * @aka L.DivOverlay\r\n * Base model for L.Popup and L.Tooltip. Inherit from it for custom popup like plugins.\r\n */\r\n\r\n// @namespace DivOverlay\r\nexport var DivOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka DivOverlay options\r\n\toptions: {\r\n\t\t// @option offset: Point = Point(0, 7)\r\n\t\t// The offset of the popup position. Useful to control the anchor\r\n\t\t// of the popup when opening it on some overlays.\r\n\t\toffset: [0, 7],\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the popup.\r\n\t\tclassName: '',\r\n\r\n\t\t// @option pane: String = 'popupPane'\r\n\t\t// `Map pane` where the popup will be added.\r\n\t\tpane: 'popupPane'\r\n\t},\r\n\r\n\tinitialize: function (options, source) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._source = source;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = map._zoomAnimated;\r\n\r\n\t\tif (!this._container) {\r\n\t\t\tthis._initLayout();\r\n\t\t}\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t}\r\n\r\n\t\tclearTimeout(this._removeTimeout);\r\n\t\tthis.getPane().appendChild(this._container);\r\n\t\tthis.update();\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 1);\r\n\t\t}\r\n\r\n\t\tthis.bringToFront();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t\tthis._removeTimeout = setTimeout(Util.bind(DomUtil.remove, undefined, this._container), 200);\r\n\t\t} else {\r\n\t\t\tDomUtil.remove(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\t// @namespace Popup\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the geographical point of popup.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Sets the geographical point where the popup will open.\r\n\tsetLatLng: function (latlng) {\r\n\t\tthis._latlng = toLatLng(latlng);\r\n\t\tif (this._map) {\r\n\t\t\tthis._updatePosition();\r\n\t\t\tthis._adjustPan();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContent: String|HTMLElement\r\n\t// Returns the content of the popup.\r\n\tgetContent: function () {\r\n\t\treturn this._content;\r\n\t},\r\n\r\n\t// @method setContent(htmlContent: String|HTMLElement|Function): this\r\n\t// Sets the HTML content of the popup. If a function is passed the source layer will be passed to the function. The function should return a `String` or `HTMLElement` to be used in the popup.\r\n\tsetContent: function (content) {\r\n\t\tthis._content = content;\r\n\t\tthis.update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getElement: String|HTMLElement\r\n\t// Alias for [getContent()](#popup-getcontent)\r\n\tgetElement: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method update: null\r\n\t// Updates the popup content, layout and position. Useful for updating the popup after something inside changed, e.g. image loaded.\r\n\tupdate: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tthis._container.style.visibility = 'hidden';\r\n\r\n\t\tthis._updateContent();\r\n\t\tthis._updateLayout();\r\n\t\tthis._updatePosition();\r\n\r\n\t\tthis._container.style.visibility = '';\r\n\r\n\t\tthis._adjustPan();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._updatePosition,\r\n\t\t\tviewreset: this._updatePosition\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method isOpen: Boolean\r\n\t// Returns `true` when the popup is visible on the map.\r\n\tisOpen: function () {\r\n\t\treturn !!this._map && this._map.hasLayer(this);\r\n\t},\r\n\r\n\t// @method bringToFront: this\r\n\t// Brings this popup in front of other popups (in the same map pane).\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack: this\r\n\t// Brings this popup to the back of other popups (in the same map pane).\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateContent: function () {\r\n\t\tif (!this._content) { return; }\r\n\r\n\t\tvar node = this._contentNode;\r\n\t\tvar content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;\r\n\r\n\t\tif (typeof content === 'string') {\r\n\t\t\tnode.innerHTML = content;\r\n\t\t} else {\r\n\t\t\twhile (node.hasChildNodes()) {\r\n\t\t\t\tnode.removeChild(node.firstChild);\r\n\t\t\t}\r\n\t\t\tnode.appendChild(content);\r\n\t\t}\r\n\t\tthis.fire('contentupdate');\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng),\r\n\t\t    offset = toPoint(this.options.offset),\r\n\t\t    anchor = this._getAnchor();\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t\t} else {\r\n\t\t\toffset = offset.add(pos).add(anchor);\r\n\t\t}\r\n\r\n\t\tvar bottom = this._containerBottom = -offset.y,\r\n\t\t    left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;\r\n\r\n\t\t// bottom position the popup in case the height of the popup changes (images loading etc)\r\n\t\tthis._container.style.bottom = bottom + 'px';\r\n\t\tthis._container.style.left = left + 'px';\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\treturn [0, 0];\r\n\t}\r\n\r\n});\r\n"",""import {DivOverlay} from './DivOverlay';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Path} from './vector/Path';\r\n\r\n/*\r\n * @class Popup\r\n * @inherits DivOverlay\r\n * @aka L.Popup\r\n * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to\r\n * open popups while making sure that only one popup is open at one time\r\n * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.\r\n *\r\n * @example\r\n *\r\n * If you want to just bind a popup to marker click and then open it, it's really easy:\r\n *\r\n * ```js\r\n * marker.bindPopup(popupContent).openPopup();\r\n * ```\r\n * Path overlays like polylines also have a `bindPopup` method.\r\n * Here's a more complicated way to open a popup on a map:\r\n *\r\n * ```js\r\n * var popup = L.popup()\r\n * \t.setLatLng(latlng)\r\n * \t.setContent('<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n */\r\n\r\n\r\n// @namespace Popup\r\nexport var Popup = DivOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka Popup options\r\n\toptions: {\r\n\t\t// @option maxWidth: Number = 300\r\n\t\t// Max width of the popup, in pixels.\r\n\t\tmaxWidth: 300,\r\n\r\n\t\t// @option minWidth: Number = 50\r\n\t\t// Min width of the popup, in pixels.\r\n\t\tminWidth: 50,\r\n\r\n\t\t// @option maxHeight: Number = null\r\n\t\t// If set, creates a scrollable container of the given height\r\n\t\t// inside a popup if its content exceeds it.\r\n\t\tmaxHeight: null,\r\n\r\n\t\t// @option autoPan: Boolean = true\r\n\t\t// Set it to `false` if you don't want the map to do panning animation\r\n\t\t// to fit the opened popup.\r\n\t\tautoPan: true,\r\n\r\n\t\t// @option autoPanPaddingTopLeft: Point = null\r\n\t\t// The margin between the popup and the top left corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingTopLeft: null,\r\n\r\n\t\t// @option autoPanPaddingBottomRight: Point = null\r\n\t\t// The margin between the popup and the bottom right corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingBottomRight: null,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(5, 5)\r\n\t\t// Equivalent of setting both top left and bottom right autopan padding to the same value.\r\n\t\tautoPanPadding: [5, 5],\r\n\r\n\t\t// @option keepInView: Boolean = false\r\n\t\t// Set it to `true` if you want to prevent users from panning the popup\r\n\t\t// off of the screen while it is open.\r\n\t\tkeepInView: false,\r\n\r\n\t\t// @option closeButton: Boolean = true\r\n\t\t// Controls the presence of a close button in the popup.\r\n\t\tcloseButton: true,\r\n\r\n\t\t// @option autoClose: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the popup closing when another popup is opened.\r\n\t\tautoClose: true,\r\n\r\n\t\t// @option closeOnEscapeKey: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the ESC key for closing of the popup.\r\n\t\tcloseOnEscapeKey: true,\r\n\r\n\t\t// @option closeOnClick: Boolean = *\r\n\t\t// Set it if you want to override the default behavior of the popup closing when user clicks\r\n\t\t// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the popup.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\t// @namespace Popup\r\n\t// @method openOn(map: Map): this\r\n\t// Adds the popup to the map and closes the previous one. The same as `map.openPopup(popup)`.\r\n\topenOn: function (map) {\r\n\t\tmap.openPopup(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tDivOverlay.prototype.onAdd.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupopen: PopupEvent\r\n\t\t// Fired when a popup is opened in the map\r\n\t\tmap.fire('popupopen', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupopen: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is opened\r\n\t\t\tthis._source.fire('popupopen', {popup: this}, true);\r\n\t\t\t// For non-path layers, we toggle the popup when clicking\r\n\t\t\t// again the layer, so prevent the map to reopen it.\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.on('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tDivOverlay.prototype.onRemove.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupclose: PopupEvent\r\n\t\t// Fired when a popup in the map is closed\r\n\t\tmap.fire('popupclose', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupclose: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is closed\r\n\t\t\tthis._source.fire('popupclose', {popup: this}, true);\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.off('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\r\n\r\n\t\tif (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {\r\n\t\t\tevents.preclick = this._close;\r\n\t\t}\r\n\r\n\t\tif (this.options.keepInView) {\r\n\t\t\tevents.moveend = this._adjustPan;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t_close: function () {\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.closePopup(this);\r\n\t\t}\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar prefix = 'leaflet-popup',\r\n\t\t    container = this._container = DomUtil.create('div',\r\n\t\t\tprefix + ' ' + (this.options.className || '') +\r\n\t\t\t' leaflet-zoom-animated');\r\n\r\n\t\tvar wrapper = this._wrapper = DomUtil.create('div', prefix + '-content-wrapper', container);\r\n\t\tthis._contentNode = DomUtil.create('div', prefix + '-content', wrapper);\r\n\r\n\t\tDomEvent.disableClickPropagation(wrapper);\r\n\t\tDomEvent.disableScrollPropagation(this._contentNode);\r\n\t\tDomEvent.on(wrapper, 'contextmenu', DomEvent.stopPropagation);\r\n\r\n\t\tthis._tipContainer = DomUtil.create('div', prefix + '-tip-container', container);\r\n\t\tthis._tip = DomUtil.create('div', prefix + '-tip', this._tipContainer);\r\n\r\n\t\tif (this.options.closeButton) {\r\n\t\t\tvar closeButton = this._closeButton = DomUtil.create('a', prefix + '-close-button', container);\r\n\t\t\tcloseButton.href = '#close';\r\n\t\t\tcloseButton.innerHTML = '&#215;';\r\n\r\n\t\t\tDomEvent.on(closeButton, 'click', this._onCloseButtonClick, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_updateLayout: function () {\r\n\t\tvar container = this._contentNode,\r\n\t\t    style = container.style;\r\n\r\n\t\tstyle.width = '';\r\n\t\tstyle.whiteSpace = 'nowrap';\r\n\r\n\t\tvar width = container.offsetWidth;\r\n\t\twidth = Math.min(width, this.options.maxWidth);\r\n\t\twidth = Math.max(width, this.options.minWidth);\r\n\r\n\t\tstyle.width = (width + 1) + 'px';\r\n\t\tstyle.whiteSpace = '';\r\n\r\n\t\tstyle.height = '';\r\n\r\n\t\tvar height = container.offsetHeight,\r\n\t\t    maxHeight = this.options.maxHeight,\r\n\t\t    scrolledClass = 'leaflet-popup-scrolled';\r\n\r\n\t\tif (maxHeight && height > maxHeight) {\r\n\t\t\tstyle.height = maxHeight + 'px';\r\n\t\t\tDomUtil.addClass(container, scrolledClass);\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(container, scrolledClass);\r\n\t\t}\r\n\r\n\t\tthis._containerWidth = this._container.offsetWidth;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),\r\n\t\t    anchor = this._getAnchor();\r\n\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t},\r\n\r\n\t_adjustPan: function () {\r\n\t\tif (!this.options.autoPan) { return; }\r\n\t\tif (this._map._panAnim) { this._map._panAnim.stop(); }\r\n\r\n\t\tvar map = this._map,\r\n\t\t    marginBottom = parseInt(DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\r\n\t\t    containerHeight = this._container.offsetHeight + marginBottom,\r\n\t\t    containerWidth = this._containerWidth,\r\n\t\t    layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);\r\n\r\n\t\tlayerPos._add(DomUtil.getPosition(this._container));\r\n\r\n\t\tvar containerPos = map.layerPointToContainerPoint(layerPos),\r\n\t\t    padding = toPoint(this.options.autoPanPadding),\r\n\t\t    paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),\r\n\t\t    paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),\r\n\t\t    size = map.getSize(),\r\n\t\t    dx = 0,\r\n\t\t    dy = 0;\r\n\r\n\t\tif (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\r\n\t\t\tdx = containerPos.x + containerWidth - size.x + paddingBR.x;\r\n\t\t}\r\n\t\tif (containerPos.x - dx - paddingTL.x < 0) { // left\r\n\t\t\tdx = containerPos.x - paddingTL.x;\r\n\t\t}\r\n\t\tif (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\r\n\t\t\tdy = containerPos.y + containerHeight - size.y + paddingBR.y;\r\n\t\t}\r\n\t\tif (containerPos.y - dy - paddingTL.y < 0) { // top\r\n\t\t\tdy = containerPos.y - paddingTL.y;\r\n\t\t}\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event autopanstart: Event\r\n\t\t// Fired when the map starts autopanning when opening a popup.\r\n\t\tif (dx || dy) {\r\n\t\t\tmap\r\n\t\t\t    .fire('autopanstart')\r\n\t\t\t    .panBy([dx, dy]);\r\n\t\t}\r\n\t},\r\n\r\n\t_onCloseButtonClick: function (e) {\r\n\t\tthis._close();\r\n\t\tDomEvent.stop(e);\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\t// Where should we anchor the popup on the source layer?\r\n\t\treturn toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);\r\n\t}\r\n\r\n});\r\n\r\n// @namespace Popup\r\n// @factory L.popup(options?: Popup options, source?: Layer)\r\n// Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.\r\nexport var popup = function (options, source) {\r\n\treturn new Popup(options, source);\r\n};\r\n\r\n\r\n/* @namespace Map\r\n * @section Interaction Options\r\n * @option closePopupOnClick: Boolean = true\r\n * Set it to `false` if you don't want popups to close when user clicks the map.\r\n */\r\nMap.mergeOptions({\r\n\tclosePopupOnClick: true\r\n});\r\n\r\n\r\n// @namespace Map\r\n// @section Methods for Layers and Controls\r\nMap.include({\r\n\t// @method openPopup(popup: Popup): this\r\n\t// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).\r\n\t// @alternative\r\n\t// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this\r\n\t// Creates a popup with the specified content and options and opens it in the given point on a map.\r\n\topenPopup: function (popup, latlng, options) {\r\n\t\tif (!(popup instanceof Popup)) {\r\n\t\t\tpopup = new Popup(options).setContent(popup);\r\n\t\t}\r\n\r\n\t\tif (latlng) {\r\n\t\t\tpopup.setLatLng(latlng);\r\n\t\t}\r\n\r\n\t\tif (this.hasLayer(popup)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (this._popup && this._popup.options.autoClose) {\r\n\t\t\tthis.closePopup();\r\n\t\t}\r\n\r\n\t\tthis._popup = popup;\r\n\t\treturn this.addLayer(popup);\r\n\t},\r\n\r\n\t// @method closePopup(popup?: Popup): this\r\n\t// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).\r\n\tclosePopup: function (popup) {\r\n\t\tif (!popup || popup === this._popup) {\r\n\t\t\tpopup = this._popup;\r\n\t\t\tthis._popup = null;\r\n\t\t}\r\n\t\tif (popup) {\r\n\t\t\tthis.removeLayer(popup);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/*\r\n * @namespace Layer\r\n * @section Popup methods example\r\n *\r\n * All layers share a set of methods convenient for binding popups to it.\r\n *\r\n * ```js\r\n * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);\r\n * layer.openPopup();\r\n * layer.closePopup();\r\n * ```\r\n *\r\n * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.\r\n */\r\n\r\n// @section Popup methods\r\nLayer.include({\r\n\r\n\t// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this\r\n\t// Binds a popup to the layer with the passed `content` and sets up the\r\n\t// necessary event listeners. If a `Function` is passed it will receive\r\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\r\n\tbindPopup: function (content, options) {\r\n\r\n\t\tif (content instanceof Popup) {\r\n\t\t\tUtil.setOptions(content, options);\r\n\t\t\tthis._popup = content;\r\n\t\t\tcontent._source = this;\r\n\t\t} else {\r\n\t\t\tif (!this._popup || options) {\r\n\t\t\t\tthis._popup = new Popup(options, this);\r\n\t\t\t}\r\n\t\t\tthis._popup.setContent(content);\r\n\t\t}\r\n\r\n\t\tif (!this._popupHandlersAdded) {\r\n\t\t\tthis.on({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = true;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method unbindPopup(): this\r\n\t// Removes the popup previously bound with `bindPopup`.\r\n\tunbindPopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis.off({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = false;\r\n\t\t\tthis._popup = null;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method openPopup(latlng?: LatLng): this\r\n\t// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.\r\n\topenPopup: function (layer, latlng) {\r\n\t\tif (!(layer instanceof Layer)) {\r\n\t\t\tlatlng = layer;\r\n\t\t\tlayer = this;\r\n\t\t}\r\n\r\n\t\tif (layer instanceof FeatureGroup) {\r\n\t\t\tfor (var id in this._layers) {\r\n\t\t\t\tlayer = this._layers[id];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!latlng) {\r\n\t\t\tlatlng = layer.getCenter ? layer.getCenter() : layer.getLatLng();\r\n\t\t}\r\n\r\n\t\tif (this._popup && this._map) {\r\n\t\t\t// set popup source to this layer\r\n\t\t\tthis._popup._source = layer;\r\n\r\n\t\t\t// update the popup (content, layout, ect...)\r\n\t\t\tthis._popup.update();\r\n\r\n\t\t\t// open the popup on the map\r\n\t\t\tthis._map.openPopup(this._popup, latlng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(): this\r\n\t// Closes the popup bound to this layer if it is open.\r\n\tclosePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup._close();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method togglePopup(): this\r\n\t// Opens or closes the popup bound to this layer depending on its current state.\r\n\ttogglePopup: function (target) {\r\n\t\tif (this._popup) {\r\n\t\t\tif (this._popup._map) {\r\n\t\t\t\tthis.closePopup();\r\n\t\t\t} else {\r\n\t\t\t\tthis.openPopup(target);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method isPopupOpen(): boolean\r\n\t// Returns `true` if the popup bound to this layer is currently open.\r\n\tisPopupOpen: function () {\r\n\t\treturn (this._popup ? this._popup.isOpen() : false);\r\n\t},\r\n\r\n\t// @method setPopupContent(content: String|HTMLElement|Popup): this\r\n\t// Sets the content of the popup bound to this layer.\r\n\tsetPopupContent: function (content) {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.setContent(content);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getPopup(): Popup\r\n\t// Returns the popup bound to this layer.\r\n\tgetPopup: function () {\r\n\t\treturn this._popup;\r\n\t},\r\n\r\n\t_openPopup: function (e) {\r\n\t\tvar layer = e.layer || e.target;\r\n\r\n\t\tif (!this._popup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this._map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// prevent map click\r\n\t\tDomEvent.stop(e);\r\n\r\n\t\t// if this inherits from Path its a vector and we can just\r\n\t\t// open the popup at the new location\r\n\t\tif (layer instanceof Path) {\r\n\t\t\tthis.openPopup(e.layer || e.target, e.latlng);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// otherwise treat it like a marker and figure out\r\n\t\t// if we should toggle it open/closed\r\n\t\tif (this._map.hasLayer(this._popup) && this._popup._source === layer) {\r\n\t\t\tthis.closePopup();\r\n\t\t} else {\r\n\t\t\tthis.openPopup(layer, e.latlng);\r\n\t\t}\r\n\t},\r\n\r\n\t_movePopup: function (e) {\r\n\t\tthis._popup.setLatLng(e.latlng);\r\n\t},\r\n\r\n\t_onKeyPress: function (e) {\r\n\t\tif (e.originalEvent.keyCode === 13) {\r\n\t\t\tthis._openPopup(e);\r\n\t\t}\r\n\t}\r\n});\r\n"",""\nimport * as Browser from '../core/Browser';\nimport {DivOverlay} from './DivOverlay';\nimport {toPoint} from '../geometry/Point';\nimport {Map} from '../map/Map';\nimport {Layer} from './Layer';\nimport {FeatureGroup} from './FeatureGroup';\nimport * as Util from '../core/Util';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Tooltip\n * @inherits DivOverlay\n * @aka L.Tooltip\n * Used to display small texts on top of map layers.\n *\n * @example\n *\n * ```js\n * marker.bindTooltip(\""my tooltip text\"").openTooltip();\n * ```\n * Note about tooltip offset. Leaflet takes two options in consideration\n * for computing tooltip offsetting:\n * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.\n *   Add a positive x offset to move the tooltip to the right, and a positive y offset to\n *   move it to the bottom. Negatives will move to the left and top.\n * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You\n *   should adapt this value if you use a custom icon.\n */\n\n\n// @namespace Tooltip\nexport var Tooltip = DivOverlay.extend({\n\n\t// @section\n\t// @aka Tooltip options\n\toptions: {\n\t\t// @option pane: String = 'tooltipPane'\n\t\t// `Map pane` where the tooltip will be added.\n\t\tpane: 'tooltipPane',\n\n\t\t// @option offset: Point = Point(0, 0)\n\t\t// Optional offset of the tooltip position.\n\t\toffset: [0, 0],\n\n\t\t// @option direction: String = 'auto'\n\t\t// Direction where to open the tooltip. Possible values are: `right`, `left`,\n\t\t// `top`, `bottom`, `center`, `auto`.\n\t\t// `auto` will dynamically switch between `right` and `left` according to the tooltip\n\t\t// position on the map.\n\t\tdirection: 'auto',\n\n\t\t// @option permanent: Boolean = false\n\t\t// Whether to open the tooltip permanently or only on mouseover.\n\t\tpermanent: false,\n\n\t\t// @option sticky: Boolean = false\n\t\t// If true, the tooltip will follow the mouse instead of being fixed at the feature center.\n\t\tsticky: false,\n\n\t\t// @option interactive: Boolean = false\n\t\t// If true, the tooltip will listen to the feature events.\n\t\tinteractive: false,\n\n\t\t// @option opacity: Number = 0.9\n\t\t// Tooltip container opacity.\n\t\topacity: 0.9\n\t},\n\n\tonAdd: function (map) {\n\t\tDivOverlay.prototype.onAdd.call(this, map);\n\t\tthis.setOpacity(this.options.opacity);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipopen: TooltipEvent\n\t\t// Fired when a tooltip is opened in the map.\n\t\tmap.fire('tooltipopen', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipopen: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is opened.\n\t\t\tthis._source.fire('tooltipopen', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tonRemove: function (map) {\n\t\tDivOverlay.prototype.onRemove.call(this, map);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipclose: TooltipEvent\n\t\t// Fired when a tooltip in the map is closed.\n\t\tmap.fire('tooltipclose', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipclose: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is closed.\n\t\t\tthis._source.fire('tooltipclose', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\n\n\t\tif (Browser.touch && !this.options.permanent) {\n\t\t\tevents.preclick = this._close;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_close: function () {\n\t\tif (this._map) {\n\t\t\tthis._map.closeTooltip(this);\n\t\t}\n\t},\n\n\t_initLayout: function () {\n\t\tvar prefix = 'leaflet-tooltip',\n\t\t    className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n\n\t\tthis._contentNode = this._container = DomUtil.create('div', className);\n\t},\n\n\t_updateLayout: function () {},\n\n\t_adjustPan: function () {},\n\n\t_setPosition: function (pos) {\n\t\tvar map = this._map,\n\t\t    container = this._container,\n\t\t    centerPoint = map.latLngToContainerPoint(map.getCenter()),\n\t\t    tooltipPoint = map.layerPointToContainerPoint(pos),\n\t\t    direction = this.options.direction,\n\t\t    tooltipWidth = container.offsetWidth,\n\t\t    tooltipHeight = container.offsetHeight,\n\t\t    offset = toPoint(this.options.offset),\n\t\t    anchor = this._getAnchor();\n\n\t\tif (direction === 'top') {\n\t\t\tpos = pos.add(toPoint(-tooltipWidth / 2 + offset.x, -tooltipHeight + offset.y + anchor.y, true));\n\t\t} else if (direction === 'bottom') {\n\t\t\tpos = pos.subtract(toPoint(tooltipWidth / 2 - offset.x, -offset.y, true));\n\t\t} else if (direction === 'center') {\n\t\t\tpos = pos.subtract(toPoint(tooltipWidth / 2 + offset.x, tooltipHeight / 2 - anchor.y + offset.y, true));\n\t\t} else if (direction === 'right' || direction === 'auto' && tooltipPoint.x < centerPoint.x) {\n\t\t\tdirection = 'right';\n\t\t\tpos = pos.add(toPoint(offset.x + anchor.x, anchor.y - tooltipHeight / 2 + offset.y, true));\n\t\t} else {\n\t\t\tdirection = 'left';\n\t\t\tpos = pos.subtract(toPoint(tooltipWidth + anchor.x - offset.x, tooltipHeight / 2 - anchor.y - offset.y, true));\n\t\t}\n\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-right');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-left');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-top');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-bottom');\n\t\tDomUtil.addClass(container, 'leaflet-tooltip-' + direction);\n\t\tDomUtil.setPosition(container, pos);\n\t},\n\n\t_updatePosition: function () {\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._setPosition(pos);\n\t},\n\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\n\t\tif (this._container) {\n\t\t\tDomUtil.setOpacity(this._container, opacity);\n\t\t}\n\t},\n\n\t_animateZoom: function (e) {\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\t\tthis._setPosition(pos);\n\t},\n\n\t_getAnchor: function () {\n\t\t// Where should we anchor the tooltip on the source layer?\n\t\treturn toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);\n\t}\n\n});\n\n// @namespace Tooltip\n// @factory L.tooltip(options?: Tooltip options, source?: Layer)\n// Instantiates a Tooltip object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.\nexport var tooltip = function (options, source) {\n\treturn new Tooltip(options, source);\n};\n\n// @namespace Map\n// @section Methods for Layers and Controls\nMap.include({\n\n\t// @method openTooltip(tooltip: Tooltip): this\n\t// Opens the specified tooltip.\n\t// @alternative\n\t// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this\n\t// Creates a tooltip with the specified content and options and open it.\n\topenTooltip: function (tooltip, latlng, options) {\n\t\tif (!(tooltip instanceof Tooltip)) {\n\t\t\ttooltip = new Tooltip(options).setContent(tooltip);\n\t\t}\n\n\t\tif (latlng) {\n\t\t\ttooltip.setLatLng(latlng);\n\t\t}\n\n\t\tif (this.hasLayer(tooltip)) {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn this.addLayer(tooltip);\n\t},\n\n\t// @method closeTooltip(tooltip?: Tooltip): this\n\t// Closes the tooltip given as parameter.\n\tcloseTooltip: function (tooltip) {\n\t\tif (tooltip) {\n\t\t\tthis.removeLayer(tooltip);\n\t\t}\n\t\treturn this;\n\t}\n\n});\n\n/*\n * @namespace Layer\n * @section Tooltip methods example\n *\n * All layers share a set of methods convenient for binding tooltips to it.\n *\n * ```js\n * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);\n * layer.openTooltip();\n * layer.closeTooltip();\n * ```\n */\n\n// @section Tooltip methods\nLayer.include({\n\n\t// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this\n\t// Binds a tooltip to the layer with the passed `content` and sets up the\n\t// necessary event listeners. If a `Function` is passed it will receive\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\n\tbindTooltip: function (content, options) {\n\n\t\tif (content instanceof Tooltip) {\n\t\t\tUtil.setOptions(content, options);\n\t\t\tthis._tooltip = content;\n\t\t\tcontent._source = this;\n\t\t} else {\n\t\t\tif (!this._tooltip || options) {\n\t\t\t\tthis._tooltip = new Tooltip(options, this);\n\t\t\t}\n\t\t\tthis._tooltip.setContent(content);\n\n\t\t}\n\n\t\tthis._initTooltipInteractions();\n\n\t\tif (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {\n\t\t\tthis.openTooltip();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t// @method unbindTooltip(): this\n\t// Removes the tooltip previously bound with `bindTooltip`.\n\tunbindTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._initTooltipInteractions(true);\n\t\t\tthis.closeTooltip();\n\t\t\tthis._tooltip = null;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_initTooltipInteractions: function (remove) {\n\t\tif (!remove && this._tooltipHandlersAdded) { return; }\n\t\tvar onOff = remove ? 'off' : 'on',\n\t\t    events = {\n\t\t\tremove: this.closeTooltip,\n\t\t\tmove: this._moveTooltip\n\t\t    };\n\t\tif (!this._tooltip.options.permanent) {\n\t\t\tevents.mouseover = this._openTooltip;\n\t\t\tevents.mouseout = this.closeTooltip;\n\t\t\tif (this._tooltip.options.sticky) {\n\t\t\t\tevents.mousemove = this._moveTooltip;\n\t\t\t}\n\t\t\tif (Browser.touch) {\n\t\t\t\tevents.click = this._openTooltip;\n\t\t\t}\n\t\t} else {\n\t\t\tevents.add = this._openTooltip;\n\t\t}\n\t\tthis[onOff](events);\n\t\tthis._tooltipHandlersAdded = !remove;\n\t},\n\n\t// @method openTooltip(latlng?: LatLng): this\n\t// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.\n\topenTooltip: function (layer, latlng) {\n\t\tif (!(layer instanceof Layer)) {\n\t\t\tlatlng = layer;\n\t\t\tlayer = this;\n\t\t}\n\n\t\tif (layer instanceof FeatureGroup) {\n\t\t\tfor (var id in this._layers) {\n\t\t\t\tlayer = this._layers[id];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!latlng) {\n\t\t\tlatlng = layer.getCenter ? layer.getCenter() : layer.getLatLng();\n\t\t}\n\n\t\tif (this._tooltip && this._map) {\n\n\t\t\t// set tooltip source to this layer\n\t\t\tthis._tooltip._source = layer;\n\n\t\t\t// update the tooltip (content, layout, ect...)\n\t\t\tthis._tooltip.update();\n\n\t\t\t// open the tooltip on the map\n\t\t\tthis._map.openTooltip(this._tooltip, latlng);\n\n\t\t\t// Tooltip container may not be defined if not permanent and never\n\t\t\t// opened.\n\t\t\tif (this._tooltip.options.interactive && this._tooltip._container) {\n\t\t\t\tDomUtil.addClass(this._tooltip._container, 'leaflet-clickable');\n\t\t\t\tthis.addInteractiveTarget(this._tooltip._container);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(): this\n\t// Closes the tooltip bound to this layer if it is open.\n\tcloseTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip._close();\n\t\t\tif (this._tooltip.options.interactive && this._tooltip._container) {\n\t\t\t\tDomUtil.removeClass(this._tooltip._container, 'leaflet-clickable');\n\t\t\t\tthis.removeInteractiveTarget(this._tooltip._container);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method toggleTooltip(): this\n\t// Opens or closes the tooltip bound to this layer depending on its current state.\n\ttoggleTooltip: function (target) {\n\t\tif (this._tooltip) {\n\t\t\tif (this._tooltip._map) {\n\t\t\t\tthis.closeTooltip();\n\t\t\t} else {\n\t\t\t\tthis.openTooltip(target);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method isTooltipOpen(): boolean\n\t// Returns `true` if the tooltip bound to this layer is currently open.\n\tisTooltipOpen: function () {\n\t\treturn this._tooltip.isOpen();\n\t},\n\n\t// @method setTooltipContent(content: String|HTMLElement|Tooltip): this\n\t// Sets the content of the tooltip bound to this layer.\n\tsetTooltipContent: function (content) {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.setContent(content);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getTooltip(): Tooltip\n\t// Returns the tooltip bound to this layer.\n\tgetTooltip: function () {\n\t\treturn this._tooltip;\n\t},\n\n\t_openTooltip: function (e) {\n\t\tvar layer = e.layer || e.target;\n\n\t\tif (!this._tooltip || !this._map) {\n\t\t\treturn;\n\t\t}\n\t\tthis.openTooltip(layer, this._tooltip.options.sticky ? e.latlng : undefined);\n\t},\n\n\t_moveTooltip: function (e) {\n\t\tvar latlng = e.latlng, containerPoint, layerPoint;\n\t\tif (this._tooltip.options.sticky && e.originalEvent) {\n\t\t\tcontainerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);\n\t\t\tlayerPoint = this._map.containerPointToLayerPoint(containerPoint);\n\t\t\tlatlng = this._map.layerPointToLatLng(layerPoint);\n\t\t}\n\t\tthis._tooltip.setLatLng(latlng);\n\t}\n});\n"",""import {Icon} from './Icon';\nimport {toPoint as point} from '../../geometry/Point';\n\n/*\n * @class DivIcon\n * @aka L.DivIcon\n * @inherits Icon\n *\n * Represents a lightweight icon for markers that uses a simple `<div>`\n * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n *\n * @example\n * ```js\n * var myIcon = L.divIcon({className: 'my-div-icon'});\n * // you can set .my-div-icon styles in CSS\n *\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n * ```\n *\n * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n */\n\nexport var DivIcon = Icon.extend({\n\toptions: {\n\t\t// @section\n\t\t// @aka DivIcon options\n\t\ticonSize: [12, 12], // also can be set through CSS\n\n\t\t// iconAnchor: (Point),\n\t\t// popupAnchor: (Point),\n\n\t\t// @option html: String = ''\n\t\t// Custom HTML code to put inside the div element, empty by default.\n\t\thtml: false,\n\n\t\t// @option bgPos: Point = [0, 0]\n\t\t// Optional relative position of the background, in pixels\n\t\tbgPos: null,\n\n\t\tclassName: 'leaflet-div-icon'\n\t},\n\n\tcreateIcon: function (oldIcon) {\n\t\tvar div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\n\t\t    options = this.options;\n\n\t\tdiv.innerHTML = options.html !== false ? options.html : '';\n\n\t\tif (options.bgPos) {\n\t\t\tvar bgPos = point(options.bgPos);\n\t\t\tdiv.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\n\t\t}\n\t\tthis._setIconStyles(div, 'icon');\n\n\t\treturn div;\n\t},\n\n\tcreateShadow: function () {\n\t\treturn null;\n\t}\n});\n\n// @factory L.divIcon(options: DivIcon options)\n// Creates a `DivIcon` instance with the given options.\nexport function divIcon(options) {\n\treturn new DivIcon(options);\n}\n"",""import {Icon} from './Icon';\nexport {icon} from './Icon';\nimport {IconDefault} from './Icon.Default';\nIcon.Default = IconDefault;\nexport {Icon};\n\nexport {DivIcon, divIcon} from './DivIcon';\nexport {Marker, marker} from './Marker';\n"",""import {Layer} from '../Layer';\nimport * as Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * @class GridLayer\n * @inherits Layer\n * @aka L.GridLayer\n *\n * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.\n *\n *\n * @section Synchronous usage\n * @example\n *\n * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords){\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n *         var ctx = tile.getContext('2d');\n *\n *         // return the tile so it can be rendered on screen\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section Asynchronous usage\n * @example\n *\n * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords, done){\n *         var error;\n *\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // draw something asynchronously and pass the tile to the done() callback\n *         setTimeout(function() {\n *             done(error, tile);\n *         }, 1000);\n *\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section\n */\n\n\nexport var GridLayer = Layer.extend({\n\n\t// @section\n\t// @aka GridLayer options\n\toptions: {\n\t\t// @option tileSize: Number|Point = 256\n\t\t// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n\t\ttileSize: 256,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Opacity of the tiles. Can be used in the `createTile()` function.\n\t\topacity: 1,\n\n\t\t// @option updateWhenIdle: Boolean = (depends)\n\t\t// Load new tiles only when panning ends.\n\t\t// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n\t\t// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n\t\t// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n\t\tupdateWhenIdle: Browser.mobile,\n\n\t\t// @option updateWhenZooming: Boolean = true\n\t\t// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n\t\tupdateWhenZooming: true,\n\n\t\t// @option updateInterval: Number = 200\n\t\t// Tiles will not update more than once every `updateInterval` milliseconds when panning.\n\t\tupdateInterval: 200,\n\n\t\t// @option zIndex: Number = 1\n\t\t// The explicit zIndex of the tile layer.\n\t\tzIndex: 1,\n\n\t\t// @option bounds: LatLngBounds = undefined\n\t\t// If set, tiles will only be loaded inside the set `LatLngBounds`.\n\t\tbounds: null,\n\n\t\t// @option minZoom: Number = 0\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\n\t\tminZoom: 0,\n\n\t\t// @option maxZoom: Number = undefined\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\n\t\tmaxZoom: undefined,\n\n\t\t// @option maxNativeZoom: Number = undefined\n\t\t// Maximum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n\t\t// from `maxNativeZoom` level and auto-scaled.\n\t\tmaxNativeZoom: undefined,\n\n\t\t// @option minNativeZoom: Number = undefined\n\t\t// Minimum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n\t\t// from `minNativeZoom` level and auto-scaled.\n\t\tminNativeZoom: undefined,\n\n\t\t// @option noWrap: Boolean = false\n\t\t// Whether the layer is wrapped around the antimeridian. If `true`, the\n\t\t// GridLayer will only be displayed once at low zoom levels. Has no\n\t\t// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n\t\t// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n\t\t// tiles outside the CRS limits.\n\t\tnoWrap: false,\n\n\t\t// @option pane: String = 'tilePane'\n\t\t// `Map pane` where the grid layer will be added.\n\t\tpane: 'tilePane',\n\n\t\t// @option className: String = ''\n\t\t// A custom class name to assign to the tile layer. Empty by default.\n\t\tclassName: '',\n\n\t\t// @option keepBuffer: Number = 2\n\t\t// When panning the map, keep this many rows and columns of tiles before unloading them.\n\t\tkeepBuffer: 2\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t},\n\n\tonAdd: function () {\n\t\tthis._initContainer();\n\n\t\tthis._levels = {};\n\t\tthis._tiles = {};\n\n\t\tthis._resetView();\n\t\tthis._update();\n\t},\n\n\tbeforeAdd: function (map) {\n\t\tmap._addZoomLimit(this);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._removeAllTiles();\n\t\tDomUtil.remove(this._container);\n\t\tmap._removeZoomLimit(this);\n\t\tthis._container = null;\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t// @method bringToFront: this\n\t// Brings the tile layer to the top of all tile layers.\n\tbringToFront: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toFront(this._container);\n\t\t\tthis._setAutoZIndex(Math.max);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack: this\n\t// Brings the tile layer to the bottom of all tile layers.\n\tbringToBack: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toBack(this._container);\n\t\t\tthis._setAutoZIndex(Math.min);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getContainer: HTMLElement\n\t// Returns the HTML element that contains the tiles for this layer.\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\t// @method setOpacity(opacity: Number): this\n\t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\t\tthis._updateOpacity();\n\t\treturn this;\n\t},\n\n\t// @method setZIndex(zIndex: Number): this\n\t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n\tsetZIndex: function (zIndex) {\n\t\tthis.options.zIndex = zIndex;\n\t\tthis._updateZIndex();\n\n\t\treturn this;\n\t},\n\n\t// @method isLoading: Boolean\n\t// Returns `true` if any tile in the grid layer has not finished loading.\n\tisLoading: function () {\n\t\treturn this._loading;\n\t},\n\n\t// @method redraw: this\n\t// Causes the layer to clear all the tiles and request them again.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._removeAllTiles();\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewprereset: this._invalidateAll,\n\t\t\tviewreset: this._resetView,\n\t\t\tzoom: this._resetView,\n\t\t\tmoveend: this._onMoveEnd\n\t\t};\n\n\t\tif (!this.options.updateWhenIdle) {\n\t\t\t// update tiles on move, but not more often than once per given interval\n\t\t\tif (!this._onMove) {\n\t\t\t\tthis._onMove = Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n\t\t\t}\n\n\t\t\tevents.move = this._onMove;\n\t\t}\n\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._animateZoom;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t// @section Extension methods\n\t// Layers extending `GridLayer` shall reimplement the following method.\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\n\t// Called only internally, must be overridden by classes extending `GridLayer`.\n\t// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n\t// is specified, it must be called when the tile has finished loading and drawing.\n\tcreateTile: function () {\n\t\treturn document.createElement('div');\n\t},\n\n\t// @section\n\t// @method getTileSize: Point\n\t// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n\tgetTileSize: function () {\n\t\tvar s = this.options.tileSize;\n\t\treturn s instanceof Point ? s : new Point(s, s);\n\t},\n\n\t_updateZIndex: function () {\n\t\tif (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n\t\t\tthis._container.style.zIndex = this.options.zIndex;\n\t\t}\n\t},\n\n\t_setAutoZIndex: function (compare) {\n\t\t// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n\n\t\tvar layers = this.getPane().children,\n\t\t    edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n\t\tfor (var i = 0, len = layers.length, zIndex; i < len; i++) {\n\n\t\t\tzIndex = layers[i].style.zIndex;\n\n\t\t\tif (layers[i] !== this._container && zIndex) {\n\t\t\t\tedgeZIndex = compare(edgeZIndex, +zIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (isFinite(edgeZIndex)) {\n\t\t\tthis.options.zIndex = edgeZIndex + compare(-1, 1);\n\t\t\tthis._updateZIndex();\n\t\t}\n\t},\n\n\t_updateOpacity: function () {\n\t\tif (!this._map) { return; }\n\n\t\t// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n\t\tif (Browser.ielt9) { return; }\n\n\t\tDomUtil.setOpacity(this._container, this.options.opacity);\n\n\t\tvar now = +new Date(),\n\t\t    nextFrame = false,\n\t\t    willPrune = false;\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar tile = this._tiles[key];\n\t\t\tif (!tile.current || !tile.loaded) { continue; }\n\n\t\t\tvar fade = Math.min(1, (now - tile.loaded) / 200);\n\n\t\t\tDomUtil.setOpacity(tile.el, fade);\n\t\t\tif (fade < 1) {\n\t\t\t\tnextFrame = true;\n\t\t\t} else {\n\t\t\t\tif (tile.active) {\n\t\t\t\t\twillPrune = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis._onOpaqueTile(tile);\n\t\t\t\t}\n\t\t\t\ttile.active = true;\n\t\t\t}\n\t\t}\n\n\t\tif (willPrune && !this._noPrune) { this._pruneTiles(); }\n\n\t\tif (nextFrame) {\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t}\n\t},\n\n\t_onOpaqueTile: Util.falseFn,\n\n\t_initContainer: function () {\n\t\tif (this._container) { return; }\n\n\t\tthis._container = DomUtil.create('div', 'leaflet-layer ' + (this.options.className || ''));\n\t\tthis._updateZIndex();\n\n\t\tif (this.options.opacity < 1) {\n\t\t\tthis._updateOpacity();\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t},\n\n\t_updateLevels: function () {\n\n\t\tvar zoom = this._tileZoom,\n\t\t    maxZoom = this.options.maxZoom;\n\n\t\tif (zoom === undefined) { return undefined; }\n\n\t\tfor (var z in this._levels) {\n\t\t\tif (this._levels[z].el.children.length || z === zoom) {\n\t\t\t\tthis._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n\t\t\t\tthis._onUpdateLevel(z);\n\t\t\t} else {\n\t\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\t\tthis._removeTilesAtZoom(z);\n\t\t\t\tthis._onRemoveLevel(z);\n\t\t\t\tdelete this._levels[z];\n\t\t\t}\n\t\t}\n\n\t\tvar level = this._levels[zoom],\n\t\t    map = this._map;\n\n\t\tif (!level) {\n\t\t\tlevel = this._levels[zoom] = {};\n\n\t\t\tlevel.el = DomUtil.create('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n\t\t\tlevel.el.style.zIndex = maxZoom;\n\n\t\t\tlevel.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n\t\t\tlevel.zoom = zoom;\n\n\t\t\tthis._setZoomTransform(level, map.getCenter(), map.getZoom());\n\n\t\t\t// force the browser to consider the newly added element for transition\n\t\t\tUtil.falseFn(level.el.offsetWidth);\n\n\t\t\tthis._onCreateLevel(level);\n\t\t}\n\n\t\tthis._level = level;\n\n\t\treturn level;\n\t},\n\n\t_onUpdateLevel: Util.falseFn,\n\n\t_onRemoveLevel: Util.falseFn,\n\n\t_onCreateLevel: Util.falseFn,\n\n\t_pruneTiles: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar key, tile;\n\n\t\tvar zoom = this._map.getZoom();\n\t\tif (zoom > this.options.maxZoom ||\n\t\t\tzoom < this.options.minZoom) {\n\t\t\tthis._removeAllTiles();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\ttile.retain = tile.current;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\tif (tile.current && !tile.active) {\n\t\t\t\tvar coords = tile.coords;\n\t\t\t\tif (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n\t\t\t\t\tthis._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\tif (!this._tiles[key].retain) {\n\t\t\t\tthis._removeTile(key);\n\t\t\t}\n\t\t}\n\t},\n\n\t_removeTilesAtZoom: function (zoom) {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (this._tiles[key].coords.z !== zoom) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_removeAllTiles: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_invalidateAll: function () {\n\t\tfor (var z in this._levels) {\n\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\tthis._onRemoveLevel(z);\n\t\t\tdelete this._levels[z];\n\t\t}\n\t\tthis._removeAllTiles();\n\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t_retainParent: function (x, y, z, minZoom) {\n\t\tvar x2 = Math.floor(x / 2),\n\t\t    y2 = Math.floor(y / 2),\n\t\t    z2 = z - 1,\n\t\t    coords2 = new Point(+x2, +y2);\n\t\tcoords2.z = +z2;\n\n\t\tvar key = this._tileCoordsToKey(coords2),\n\t\t    tile = this._tiles[key];\n\n\t\tif (tile && tile.active) {\n\t\t\ttile.retain = true;\n\t\t\treturn true;\n\n\t\t} else if (tile && tile.loaded) {\n\t\t\ttile.retain = true;\n\t\t}\n\n\t\tif (z2 > minZoom) {\n\t\t\treturn this._retainParent(x2, y2, z2, minZoom);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_retainChildren: function (x, y, z, maxZoom) {\n\n\t\tfor (var i = 2 * x; i < 2 * x + 2; i++) {\n\t\t\tfor (var j = 2 * y; j < 2 * y + 2; j++) {\n\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = z + 1;\n\n\t\t\t\tvar key = this._tileCoordsToKey(coords),\n\t\t\t\t    tile = this._tiles[key];\n\n\t\t\t\tif (tile && tile.active) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t} else if (tile && tile.loaded) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t}\n\n\t\t\t\tif (z + 1 < maxZoom) {\n\t\t\t\t\tthis._retainChildren(i, j, z + 1, maxZoom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetView: function (e) {\n\t\tvar animating = e && (e.pinch || e.flyTo);\n\t\tthis._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n\t},\n\n\t_animateZoom: function (e) {\n\t\tthis._setView(e.center, e.zoom, true, e.noUpdate);\n\t},\n\n\t_clampZoom: function (zoom) {\n\t\tvar options = this.options;\n\n\t\tif (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n\t\t\treturn options.minNativeZoom;\n\t\t}\n\n\t\tif (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n\t\t\treturn options.maxNativeZoom;\n\t\t}\n\n\t\treturn zoom;\n\t},\n\n\t_setView: function (center, zoom, noPrune, noUpdate) {\n\t\tvar tileZoom = this._clampZoom(Math.round(zoom));\n\t\tif ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||\n\t\t    (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {\n\t\t\ttileZoom = undefined;\n\t\t}\n\n\t\tvar tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);\n\n\t\tif (!noUpdate || tileZoomChanged) {\n\n\t\t\tthis._tileZoom = tileZoom;\n\n\t\t\tif (this._abortLoading) {\n\t\t\t\tthis._abortLoading();\n\t\t\t}\n\n\t\t\tthis._updateLevels();\n\t\t\tthis._resetGrid();\n\n\t\t\tif (tileZoom !== undefined) {\n\t\t\t\tthis._update(center);\n\t\t\t}\n\n\t\t\tif (!noPrune) {\n\t\t\t\tthis._pruneTiles();\n\t\t\t}\n\n\t\t\t// Flag to prevent _updateOpacity from pruning tiles during\n\t\t\t// a zoom anim or a pinch gesture\n\t\t\tthis._noPrune = !!noPrune;\n\t\t}\n\n\t\tthis._setZoomTransforms(center, zoom);\n\t},\n\n\t_setZoomTransforms: function (center, zoom) {\n\t\tfor (var i in this._levels) {\n\t\t\tthis._setZoomTransform(this._levels[i], center, zoom);\n\t\t}\n\t},\n\n\t_setZoomTransform: function (level, center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, level.zoom),\n\t\t    translate = level.origin.multiplyBy(scale)\n\t\t        .subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(level.el, translate, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(level.el, translate);\n\t\t}\n\t},\n\n\t_resetGrid: function () {\n\t\tvar map = this._map,\n\t\t    crs = map.options.crs,\n\t\t    tileSize = this._tileSize = this.getTileSize(),\n\t\t    tileZoom = this._tileZoom;\n\n\t\tvar bounds = this._map.getPixelWorldBounds(this._tileZoom);\n\t\tif (bounds) {\n\t\t\tthis._globalTileRange = this._pxBoundsToTileRange(bounds);\n\t\t}\n\n\t\tthis._wrapX = crs.wrapLng && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),\n\t\t\tMath.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)\n\t\t];\n\t\tthis._wrapY = crs.wrapLat && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),\n\t\t\tMath.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)\n\t\t];\n\t},\n\n\t_onMoveEnd: function () {\n\t\tif (!this._map || this._map._animatingZoom) { return; }\n\n\t\tthis._update();\n\t},\n\n\t_getTiledPixelBounds: function (center) {\n\t\tvar map = this._map,\n\t\t    mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n\t\t    scale = map.getZoomScale(mapZoom, this._tileZoom),\n\t\t    pixelCenter = map.project(center, this._tileZoom).floor(),\n\t\t    halfSize = map.getSize().divideBy(scale * 2);\n\n\t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n\t},\n\n\t// Private method to load tiles in the grid's active zoom level according to map bounds\n\t_update: function (center) {\n\t\tvar map = this._map;\n\t\tif (!map) { return; }\n\t\tvar zoom = this._clampZoom(map.getZoom());\n\n\t\tif (center === undefined) { center = map.getCenter(); }\n\t\tif (this._tileZoom === undefined) { return; }\t// if out of minzoom/maxzoom\n\n\t\tvar pixelBounds = this._getTiledPixelBounds(center),\n\t\t    tileRange = this._pxBoundsToTileRange(pixelBounds),\n\t\t    tileCenter = tileRange.getCenter(),\n\t\t    queue = [],\n\t\t    margin = this.options.keepBuffer,\n\t\t    noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),\n\t\t                              tileRange.getTopRight().add([margin, -margin]));\n\n\t\t// Sanity check: panic if the tile range contains Infinity somewhere.\n\t\tif (!(isFinite(tileRange.min.x) &&\n\t\t      isFinite(tileRange.min.y) &&\n\t\t      isFinite(tileRange.max.x) &&\n\t\t      isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar c = this._tiles[key].coords;\n\t\t\tif (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n\t\t\t\tthis._tiles[key].current = false;\n\t\t\t}\n\t\t}\n\n\t\t// _update just loads more tiles. If the tile zoom level differs too much\n\t\t// from the map's, let _setView reset levels and prune old tiles.\n\t\tif (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }\n\n\t\t// create a queue of coordinates to load tiles from\n\t\tfor (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n\t\t\tfor (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = this._tileZoom;\n\n\t\t\t\tif (!this._isValidTile(coords)) { continue; }\n\n\t\t\t\tvar tile = this._tiles[this._tileCoordsToKey(coords)];\n\t\t\t\tif (tile) {\n\t\t\t\t\ttile.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push(coords);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort tile queue to load tiles in order of their distance to center\n\t\tqueue.sort(function (a, b) {\n\t\t\treturn a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n\t\t});\n\n\t\tif (queue.length !== 0) {\n\t\t\t// if it's the first batch of tiles to load\n\t\t\tif (!this._loading) {\n\t\t\t\tthis._loading = true;\n\t\t\t\t// @event loading: Event\n\t\t\t\t// Fired when the grid layer starts loading tiles.\n\t\t\t\tthis.fire('loading');\n\t\t\t}\n\n\t\t\t// create DOM fragment to append tiles in one batch\n\t\t\tvar fragment = document.createDocumentFragment();\n\n\t\t\tfor (i = 0; i < queue.length; i++) {\n\t\t\t\tthis._addTile(queue[i], fragment);\n\t\t\t}\n\n\t\t\tthis._level.el.appendChild(fragment);\n\t\t}\n\t},\n\n\t_isValidTile: function (coords) {\n\t\tvar crs = this._map.options.crs;\n\n\t\tif (!crs.infinite) {\n\t\t\t// don't load tile if it's out of bounds and not wrapped\n\t\t\tvar bounds = this._globalTileRange;\n\t\t\tif ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n\t\t\t    (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }\n\t\t}\n\n\t\tif (!this.options.bounds) { return true; }\n\n\t\t// don't load tile if it doesn't intersect the bounds in options\n\t\tvar tileBounds = this._tileCoordsToBounds(coords);\n\t\treturn latLngBounds(this.options.bounds).overlaps(tileBounds);\n\t},\n\n\t_keyToBounds: function (key) {\n\t\treturn this._tileCoordsToBounds(this._keyToTileCoords(key));\n\t},\n\n\t_tileCoordsToNwSe: function (coords) {\n\t\tvar map = this._map,\n\t\t    tileSize = this.getTileSize(),\n\t\t    nwPoint = coords.scaleBy(tileSize),\n\t\t    sePoint = nwPoint.add(tileSize),\n\t\t    nw = map.unproject(nwPoint, coords.z),\n\t\t    se = map.unproject(sePoint, coords.z);\n\t\treturn [nw, se];\n\t},\n\n\t// converts tile coordinates to its geographical bounds\n\t_tileCoordsToBounds: function (coords) {\n\t\tvar bp = this._tileCoordsToNwSe(coords),\n\t\t    bounds = new LatLngBounds(bp[0], bp[1]);\n\n\t\tif (!this.options.noWrap) {\n\t\t\tbounds = this._map.wrapLatLngBounds(bounds);\n\t\t}\n\t\treturn bounds;\n\t},\n\t// converts tile coordinates to key for the tile cache\n\t_tileCoordsToKey: function (coords) {\n\t\treturn coords.x + ':' + coords.y + ':' + coords.z;\n\t},\n\n\t// converts tile cache key to coordinates\n\t_keyToTileCoords: function (key) {\n\t\tvar k = key.split(':'),\n\t\t    coords = new Point(+k[0], +k[1]);\n\t\tcoords.z = +k[2];\n\t\treturn coords;\n\t},\n\n\t_removeTile: function (key) {\n\t\tvar tile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\tDomUtil.remove(tile.el);\n\n\t\tdelete this._tiles[key];\n\n\t\t// @event tileunload: TileEvent\n\t\t// Fired when a tile is removed (e.g. when a tile goes off the screen).\n\t\tthis.fire('tileunload', {\n\t\t\ttile: tile.el,\n\t\t\tcoords: this._keyToTileCoords(key)\n\t\t});\n\t},\n\n\t_initTile: function (tile) {\n\t\tDomUtil.addClass(tile, 'leaflet-tile');\n\n\t\tvar tileSize = this.getTileSize();\n\t\ttile.style.width = tileSize.x + 'px';\n\t\ttile.style.height = tileSize.y + 'px';\n\n\t\ttile.onselectstart = Util.falseFn;\n\t\ttile.onmousemove = Util.falseFn;\n\n\t\t// update opacity on tiles in IE7-8 because of filter inheritance problems\n\t\tif (Browser.ielt9 && this.options.opacity < 1) {\n\t\t\tDomUtil.setOpacity(tile, this.options.opacity);\n\t\t}\n\n\t\t// without this hack, tiles disappear after zoom on Chrome for Android\n\t\t// https://github.com/Leaflet/Leaflet/issues/2078\n\t\tif (Browser.android && !Browser.android23) {\n\t\t\ttile.style.WebkitBackfaceVisibility = 'hidden';\n\t\t}\n\t},\n\n\t_addTile: function (coords, container) {\n\t\tvar tilePos = this._getTilePos(coords),\n\t\t    key = this._tileCoordsToKey(coords);\n\n\t\tvar tile = this.createTile(this._wrapCoords(coords), Util.bind(this._tileReady, this, coords));\n\n\t\tthis._initTile(tile);\n\n\t\t// if createTile is defined with a second argument (\""done\"" callback),\n\t\t// we know that tile is async and will be ready later; otherwise\n\t\tif (this.createTile.length < 2) {\n\t\t\t// mark tile as ready, but delay one frame for opacity animation to happen\n\t\t\tUtil.requestAnimFrame(Util.bind(this._tileReady, this, coords, null, tile));\n\t\t}\n\n\t\tDomUtil.setPosition(tile, tilePos);\n\n\t\t// save tile in cache\n\t\tthis._tiles[key] = {\n\t\t\tel: tile,\n\t\t\tcoords: coords,\n\t\t\tcurrent: true\n\t\t};\n\n\t\tcontainer.appendChild(tile);\n\t\t// @event tileloadstart: TileEvent\n\t\t// Fired when a tile is requested and starts loading.\n\t\tthis.fire('tileloadstart', {\n\t\t\ttile: tile,\n\t\t\tcoords: coords\n\t\t});\n\t},\n\n\t_tileReady: function (coords, err, tile) {\n\t\tif (err) {\n\t\t\t// @event tileerror: TileErrorEvent\n\t\t\t// Fired when there is an error loading a tile.\n\t\t\tthis.fire('tileerror', {\n\t\t\t\terror: err,\n\t\t\t\ttile: tile,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tvar key = this._tileCoordsToKey(coords);\n\n\t\ttile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\ttile.loaded = +new Date();\n\t\tif (this._map._fadeAnimated) {\n\t\t\tDomUtil.setOpacity(tile.el, 0);\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t} else {\n\t\t\ttile.active = true;\n\t\t\tthis._pruneTiles();\n\t\t}\n\n\t\tif (!err) {\n\t\t\tDomUtil.addClass(tile.el, 'leaflet-tile-loaded');\n\n\t\t\t// @event tileload: TileEvent\n\t\t\t// Fired when a tile loads.\n\t\t\tthis.fire('tileload', {\n\t\t\t\ttile: tile.el,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tif (this._noTilesToLoad()) {\n\t\t\tthis._loading = false;\n\t\t\t// @event load: Event\n\t\t\t// Fired when the grid layer loaded all visible tiles.\n\t\t\tthis.fire('load');\n\n\t\t\tif (Browser.ielt9 || !this._map._fadeAnimated) {\n\t\t\t\tUtil.requestAnimFrame(this._pruneTiles, this);\n\t\t\t} else {\n\t\t\t\t// Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n\t\t\t\t// to trigger a pruning.\n\t\t\t\tsetTimeout(Util.bind(this._pruneTiles, this), 250);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getTilePos: function (coords) {\n\t\treturn coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n\t},\n\n\t_wrapCoords: function (coords) {\n\t\tvar newCoords = new Point(\n\t\t\tthis._wrapX ? Util.wrapNum(coords.x, this._wrapX) : coords.x,\n\t\t\tthis._wrapY ? Util.wrapNum(coords.y, this._wrapY) : coords.y);\n\t\tnewCoords.z = coords.z;\n\t\treturn newCoords;\n\t},\n\n\t_pxBoundsToTileRange: function (bounds) {\n\t\tvar tileSize = this.getTileSize();\n\t\treturn new Bounds(\n\t\t\tbounds.min.unscaleBy(tileSize).floor(),\n\t\t\tbounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n\t},\n\n\t_noTilesToLoad: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (!this._tiles[key].loaded) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n});\n\n// @factory L.gridLayer(options?: GridLayer options)\n// Creates a new instance of GridLayer with the supplied options.\nexport function gridLayer(options) {\n\treturn new GridLayer(options);\n}\n"",""import {GridLayer} from './GridLayer';\r\nimport * as Browser from '../../core/Browser';\r\nimport * as Util from '../../core/Util';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\n\r\n\r\n/*\r\n * @class TileLayer\r\n * @inherits GridLayer\r\n * @aka L.TileLayer\r\n * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: 'Map data &copy; <a href=\""https://www.openstreetmap.org/\"">OpenStreetMap</a> contributors, <a href=\""https://creativecommons.org/licenses/by-sa/2.0/\"">CC-BY-SA</a>'}).addTo(map);\r\n * ```\r\n *\r\n * @section URL template\r\n * @example\r\n *\r\n * A string of the following form:\r\n *\r\n * ```\r\n * 'http://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n * ```\r\n *\r\n * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add \""&commat;2x\"" to the URL to load retina tiles.\r\n *\r\n * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n *\r\n * ```\r\n * L.tileLayer('http://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n * ```\r\n */\r\n\r\n\r\nexport var TileLayer = GridLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer options\r\n\toptions: {\r\n\t\t// @option minZoom: Number = 0\r\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\r\n\t\tminZoom: 0,\r\n\r\n\t\t// @option maxZoom: Number = 18\r\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\r\n\t\tmaxZoom: 18,\r\n\r\n\t\t// @option subdomains: String|String[] = 'abc'\r\n\t\t// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\r\n\t\tsubdomains: 'abc',\r\n\r\n\t\t// @option errorTileUrl: String = ''\r\n\t\t// URL to the tile image to show in place of the tile that failed to load.\r\n\t\terrorTileUrl: '',\r\n\r\n\t\t// @option zoomOffset: Number = 0\r\n\t\t// The zoom number used in tile URLs will be offset with this value.\r\n\t\tzoomOffset: 0,\r\n\r\n\t\t// @option tms: Boolean = false\r\n\t\t// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\r\n\t\ttms: false,\r\n\r\n\t\t// @option zoomReverse: Boolean = false\r\n\t\t// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\r\n\t\tzoomReverse: false,\r\n\r\n\t\t// @option detectRetina: Boolean = false\r\n\t\t// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\r\n\t\tdetectRetina: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// detecting retina displays, adjusting tileSize and zoom levels\r\n\t\tif (options.detectRetina && Browser.retina && options.maxZoom > 0) {\r\n\r\n\t\t\toptions.tileSize = Math.floor(options.tileSize / 2);\r\n\r\n\t\t\tif (!options.zoomReverse) {\r\n\t\t\t\toptions.zoomOffset++;\r\n\t\t\t\toptions.maxZoom--;\r\n\t\t\t} else {\r\n\t\t\t\toptions.zoomOffset--;\r\n\t\t\t\toptions.minZoom++;\r\n\t\t\t}\r\n\r\n\t\t\toptions.minZoom = Math.max(0, options.minZoom);\r\n\t\t}\r\n\r\n\t\tif (typeof options.subdomains === 'string') {\r\n\t\t\toptions.subdomains = options.subdomains.split('');\r\n\t\t}\r\n\r\n\t\t// for https://github.com/Leaflet/Leaflet/issues/137\r\n\t\tif (!Browser.android) {\r\n\t\t\tthis.on('tileunload', this._onTileRemove);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setUrl(url: String, noRedraw?: Boolean): this\r\n\t// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\r\n\t// If the URL does not change, the layer will not be redrawn unless\r\n\t// the noRedraw parameter is set to false.\r\n\tsetUrl: function (url, noRedraw) {\r\n\t\tif (this._url === url && noRedraw === undefined) {\r\n\t\t\tnoRedraw = true;\r\n\t\t}\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\r\n\t// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\r\n\t// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`\r\n\t// callback is called when the tile has been loaded.\r\n\tcreateTile: function (coords, done) {\r\n\t\tvar tile = document.createElement('img');\r\n\r\n\t\tDomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));\r\n\t\tDomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\ttile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t Alt tag is set to empty string to keep screen readers from reading URL and for compliance reasons\r\n\t\t http://www.w3.org/TR/WCAG20-TECHS/H67\r\n\t\t*/\r\n\t\ttile.alt = '';\r\n\r\n\t\t/*\r\n\t\t Set role=\""presentation\"" to force screen readers to ignore this\r\n\t\t https://www.w3.org/TR/wai-aria/roles#textalternativecomputation\r\n\t\t*/\r\n\t\ttile.setAttribute('role', 'presentation');\r\n\r\n\t\ttile.src = this.getTileUrl(coords);\r\n\r\n\t\treturn tile;\r\n\t},\r\n\r\n\t// @section Extension methods\r\n\t// @uninheritable\r\n\t// Layers extending `TileLayer` might reimplement the following method.\r\n\t// @method getTileUrl(coords: Object): String\r\n\t// Called only internally, returns the URL for a tile given its coordinates.\r\n\t// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\r\n\tgetTileUrl: function (coords) {\r\n\t\tvar data = {\r\n\t\t\tr: Browser.retina ? '@2x' : '',\r\n\t\t\ts: this._getSubdomain(coords),\r\n\t\t\tx: coords.x,\r\n\t\t\ty: coords.y,\r\n\t\t\tz: this._getZoomForUrl()\r\n\t\t};\r\n\t\tif (this._map && !this._map.options.crs.infinite) {\r\n\t\t\tvar invertedY = this._globalTileRange.max.y - coords.y;\r\n\t\t\tif (this.options.tms) {\r\n\t\t\t\tdata['y'] = invertedY;\r\n\t\t\t}\r\n\t\t\tdata['-y'] = invertedY;\r\n\t\t}\r\n\r\n\t\treturn Util.template(this._url, Util.extend(data, this.options));\r\n\t},\r\n\r\n\t_tileOnLoad: function (done, tile) {\r\n\t\t// For https://github.com/Leaflet/Leaflet/issues/3332\r\n\t\tif (Browser.ielt9) {\r\n\t\t\tsetTimeout(Util.bind(done, this, null, tile), 0);\r\n\t\t} else {\r\n\t\t\tdone(null, tile);\r\n\t\t}\r\n\t},\r\n\r\n\t_tileOnError: function (done, tile, e) {\r\n\t\tvar errorUrl = this.options.errorTileUrl;\r\n\t\tif (errorUrl && tile.getAttribute('src') !== errorUrl) {\r\n\t\t\ttile.src = errorUrl;\r\n\t\t}\r\n\t\tdone(e, tile);\r\n\t},\r\n\r\n\t_onTileRemove: function (e) {\r\n\t\te.tile.onload = null;\r\n\t},\r\n\r\n\t_getZoomForUrl: function () {\r\n\t\tvar zoom = this._tileZoom,\r\n\t\tmaxZoom = this.options.maxZoom,\r\n\t\tzoomReverse = this.options.zoomReverse,\r\n\t\tzoomOffset = this.options.zoomOffset;\r\n\r\n\t\tif (zoomReverse) {\r\n\t\t\tzoom = maxZoom - zoom;\r\n\t\t}\r\n\r\n\t\treturn zoom + zoomOffset;\r\n\t},\r\n\r\n\t_getSubdomain: function (tilePoint) {\r\n\t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n\t\treturn this.options.subdomains[index];\r\n\t},\r\n\r\n\t// stops loading all tiles in the background layer\r\n\t_abortLoading: function () {\r\n\t\tvar i, tile;\r\n\t\tfor (i in this._tiles) {\r\n\t\t\tif (this._tiles[i].coords.z !== this._tileZoom) {\r\n\t\t\t\ttile = this._tiles[i].el;\r\n\r\n\t\t\t\ttile.onload = Util.falseFn;\r\n\t\t\t\ttile.onerror = Util.falseFn;\r\n\r\n\t\t\t\tif (!tile.complete) {\r\n\t\t\t\t\ttile.src = Util.emptyImageUrl;\r\n\t\t\t\t\tDomUtil.remove(tile);\r\n\t\t\t\t\tdelete this._tiles[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_removeTile: function (key) {\r\n\t\tvar tile = this._tiles[key];\r\n\t\tif (!tile) { return; }\r\n\r\n\t\t// Cancels any pending http requests associated with the tile\r\n\t\t// unless we're on Android's stock browser,\r\n\t\t// see https://github.com/Leaflet/Leaflet/issues/137\r\n\t\tif (!Browser.androidStock) {\r\n\t\t\ttile.el.setAttribute('src', Util.emptyImageUrl);\r\n\t\t}\r\n\r\n\t\treturn GridLayer.prototype._removeTile.call(this, key);\r\n\t},\r\n\r\n\t_tileReady: function (coords, err, tile) {\r\n\t\tif (!this._map || (tile && tile.getAttribute('src') === Util.emptyImageUrl)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn GridLayer.prototype._tileReady.call(this, coords, err, tile);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\r\n// Instantiates a tile layer object given a `URL template` and optionally an options object.\r\n\r\nexport function tileLayer(url, options) {\r\n\treturn new TileLayer(url, options);\r\n}\r\n"",""import {TileLayer} from './TileLayer';\r\nimport {extend, setOptions, getParamString} from '../../core/Util';\r\nimport {retina} from '../../core/Browser';\r\nimport {EPSG4326} from '../../geo/crs/CRS.EPSG4326';\r\nimport {toBounds} from '../../geometry/Bounds';\r\n\r\n/*\r\n * @class TileLayer.WMS\r\n * @inherits TileLayer\r\n * @aka L.TileLayer.WMS\r\n * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var nexrad = L.tileLayer.wms(\""http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\"", {\r\n * \tlayers: 'nexrad-n0r-900913',\r\n * \tformat: 'image/png',\r\n * \ttransparent: true,\r\n * \tattribution: \""Weather data © 2012 IEM Nexrad\""\r\n * });\r\n * ```\r\n */\r\n\r\nexport var TileLayerWMS = TileLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer.WMS options\r\n\t// If any custom options not documented here are used, they will be sent to the\r\n\t// WMS server as extra parameters in each request URL. This can be useful for\r\n\t// [non-standard vendor WMS parameters](http://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\r\n\tdefaultWmsParams: {\r\n\t\tservice: 'WMS',\r\n\t\trequest: 'GetMap',\r\n\r\n\t\t// @option layers: String = ''\r\n\t\t// **(required)** Comma-separated list of WMS layers to show.\r\n\t\tlayers: '',\r\n\r\n\t\t// @option styles: String = ''\r\n\t\t// Comma-separated list of WMS styles.\r\n\t\tstyles: '',\r\n\r\n\t\t// @option format: String = 'image/jpeg'\r\n\t\t// WMS image format (use `'image/png'` for layers with transparency).\r\n\t\tformat: 'image/jpeg',\r\n\r\n\t\t// @option transparent: Boolean = false\r\n\t\t// If `true`, the WMS service will return images with transparency.\r\n\t\ttransparent: false,\r\n\r\n\t\t// @option version: String = '1.1.1'\r\n\t\t// Version of the WMS service to use\r\n\t\tversion: '1.1.1'\r\n\t},\r\n\r\n\toptions: {\r\n\t\t// @option crs: CRS = null\r\n\t\t// Coordinate Reference System to use for the WMS requests, defaults to\r\n\t\t// map CRS. Don't change this if you're not sure what it means.\r\n\t\tcrs: null,\r\n\r\n\t\t// @option uppercase: Boolean = false\r\n\t\t// If `true`, WMS request parameter keys will be uppercase.\r\n\t\tuppercase: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tvar wmsParams = extend({}, this.defaultWmsParams);\r\n\r\n\t\t// all keys that are not TileLayer options go to WMS params\r\n\t\tfor (var i in options) {\r\n\t\t\tif (!(i in this.options)) {\r\n\t\t\t\twmsParams[i] = options[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions = setOptions(this, options);\r\n\r\n\t\tvar realRetina = options.detectRetina && retina ? 2 : 1;\r\n\t\tvar tileSize = this.getTileSize();\r\n\t\twmsParams.width = tileSize.x * realRetina;\r\n\t\twmsParams.height = tileSize.y * realRetina;\r\n\r\n\t\tthis.wmsParams = wmsParams;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\r\n\t\tthis._crs = this.options.crs || map.options.crs;\r\n\t\tthis._wmsVersion = parseFloat(this.wmsParams.version);\r\n\r\n\t\tvar projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\r\n\t\tthis.wmsParams[projectionKey] = this._crs.code;\r\n\r\n\t\tTileLayer.prototype.onAdd.call(this, map);\r\n\t},\r\n\r\n\tgetTileUrl: function (coords) {\r\n\r\n\t\tvar tileBounds = this._tileCoordsToNwSe(coords),\r\n\t\t    crs = this._crs,\r\n\t\t    bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\r\n\t\t    min = bounds.min,\r\n\t\t    max = bounds.max,\r\n\t\t    bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?\r\n\t\t    [min.y, min.x, max.y, max.x] :\r\n\t\t    [min.x, min.y, max.x, max.y]).join(','),\r\n\t\t    url = TileLayer.prototype.getTileUrl.call(this, coords);\r\n\t\treturn url +\r\n\t\t\tgetParamString(this.wmsParams, url, this.options.uppercase) +\r\n\t\t\t(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\r\n\t},\r\n\r\n\t// @method setParams(params: Object, noRedraw?: Boolean): this\r\n\t// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\r\n\tsetParams: function (params, noRedraw) {\r\n\r\n\t\textend(this.wmsParams, params);\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\r\n// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\r\nexport function tileLayerWMS(url, options) {\r\n\treturn new TileLayerWMS(url, options);\r\n}\r\n"",""export {GridLayer, gridLayer} from './GridLayer';\nimport {TileLayer, tileLayer} from './TileLayer';\nimport {TileLayerWMS, tileLayerWMS} from './TileLayer.WMS';\nTileLayer.WMS = TileLayerWMS;\ntileLayer.wms = tileLayerWMS;\nexport {TileLayer, tileLayer};\n"",""import {Layer} from '../Layer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport * as Browser from '../../core/Browser';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n\n/*\n * @class Renderer\n * @inherits Layer\n * @aka L.Renderer\n *\n * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n * DOM container of the renderer, its bounds, and its zoom animation.\n *\n * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n * itself can be added or removed to the map. All paths use a renderer, which can\n * be implicit (the map will decide the type of renderer and use it automatically)\n * or explicit (using the [`renderer`](#path-renderer) option of the path).\n *\n * Do not use this class directly, use `SVG` and `Canvas` instead.\n *\n * @event update: Event\n * Fired when the renderer updates its bounds, center and zoom, for example when\n * its map has moved\n */\n\nexport var Renderer = Layer.extend({\n\n\t// @section\n\t// @aka Renderer options\n\toptions: {\n\t\t// @option padding: Number = 0.1\n\t\t// How much to extend the clip area around the map view (relative to its size)\n\t\t// e.g. 0.1 would be 10% of map view in each direction\n\t\tpadding: 0.1,\n\n\t\t// @option tolerance: Number = 0\n\t\t// How much to extend click tolerance round a path/object on the map\n\t\ttolerance : 0\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t\tUtil.stamp(this);\n\t\tthis._layers = this._layers || {};\n\t},\n\n\tonAdd: function () {\n\t\tif (!this._container) {\n\t\t\tthis._initContainer(); // defined by renderer implementations\n\n\t\t\tif (this._zoomAnimated) {\n\t\t\t\tDomUtil.addClass(this._container, 'leaflet-zoom-animated');\n\t\t\t}\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t\tthis._update();\n\t\tthis.on('update', this._updatePaths, this);\n\t},\n\n\tonRemove: function () {\n\t\tthis.off('update', this._updatePaths, this);\n\t\tthis._destroyContainer();\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewreset: this._reset,\n\t\t\tzoom: this._onZoom,\n\t\t\tmoveend: this._update,\n\t\t\tzoomend: this._onZoomEnd\n\t\t};\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._onAnimZoom;\n\t\t}\n\t\treturn events;\n\t},\n\n\t_onAnimZoom: function (ev) {\n\t\tthis._updateTransform(ev.center, ev.zoom);\n\t},\n\n\t_onZoom: function () {\n\t\tthis._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t},\n\n\t_updateTransform: function (center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, this._zoom),\n\t\t    position = DomUtil.getPosition(this._container),\n\t\t    viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n\t\t    currentCenterPoint = this._map.project(this._center, zoom),\n\t\t    destCenterPoint = this._map.project(center, zoom),\n\t\t    centerOffset = destCenterPoint.subtract(currentCenterPoint),\n\n\t\t    topLeftOffset = viewHalf.multiplyBy(-scale).add(position).add(viewHalf).subtract(centerOffset);\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(this._container, topLeftOffset, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(this._container, topLeftOffset);\n\t\t}\n\t},\n\n\t_reset: function () {\n\t\tthis._update();\n\t\tthis._updateTransform(this._center, this._zoom);\n\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._reset();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._project();\n\t\t}\n\t},\n\n\t_updatePaths: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._update();\n\t\t}\n\t},\n\n\t_update: function () {\n\t\t// Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n\t\t// Subclasses are responsible of firing the 'update' event.\n\t\tvar p = this.options.padding,\n\t\t    size = this._map.getSize(),\n\t\t    min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n\t\tthis._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n\n\t\tthis._center = this._map.getCenter();\n\t\tthis._zoom = this._map.getZoom();\n\t}\n});\n"",""import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * @class Canvas\n * @inherits Renderer\n * @aka L.Canvas\n *\n * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](http://caniuse.com/#search=canvas), Canvas is not\n * available in all web browsers, notably IE8, and overlapping geometries might\n * not display properly in some edge cases.\n *\n * @example\n *\n * Use Canvas by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.canvas()\n * });\n * ```\n *\n * Use a Canvas renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.canvas({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var Canvas = Renderer.extend({\n\tgetEvents: function () {\n\t\tvar events = Renderer.prototype.getEvents.call(this);\n\t\tevents.viewprereset = this._onViewPreReset;\n\t\treturn events;\n\t},\n\n\t_onViewPreReset: function () {\n\t\t// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n\t\tthis._postponeUpdatePaths = true;\n\t},\n\n\tonAdd: function () {\n\t\tRenderer.prototype.onAdd.call(this);\n\n\t\t// Redraw vectors since canvas is cleared upon removal,\n\t\t// in case of removing the renderer itself from the map.\n\t\tthis._draw();\n\t},\n\n\t_initContainer: function () {\n\t\tvar container = this._container = document.createElement('canvas');\n\n\t\tDomEvent.on(container, 'mousemove', Util.throttle(this._onMouseMove, 32, this), this);\n\t\tDomEvent.on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n\t\tDomEvent.on(container, 'mouseout', this._handleMouseOut, this);\n\n\t\tthis._ctx = container.getContext('2d');\n\t},\n\n\t_destroyContainer: function () {\n\t\tUtil.cancelAnimFrame(this._redrawRequest);\n\t\tdelete this._ctx;\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t},\n\n\t_updatePaths: function () {\n\t\tif (this._postponeUpdatePaths) { return; }\n\n\t\tvar layer;\n\t\tthis._redrawBounds = null;\n\t\tfor (var id in this._layers) {\n\t\t\tlayer = this._layers[id];\n\t\t\tlayer._update();\n\t\t}\n\t\tthis._redraw();\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    container = this._container,\n\t\t    size = b.getSize(),\n\t\t    m = Browser.retina ? 2 : 1;\n\n\t\tDomUtil.setPosition(container, b.min);\n\n\t\t// set canvas size (also clearing it); use double size on retina\n\t\tcontainer.width = m * size.x;\n\t\tcontainer.height = m * size.y;\n\t\tcontainer.style.width = size.x + 'px';\n\t\tcontainer.style.height = size.y + 'px';\n\n\t\tif (Browser.retina) {\n\t\t\tthis._ctx.scale(2, 2);\n\t\t}\n\n\t\t// translate so we use the same path coordinates after canvas element moves\n\t\tthis._ctx.translate(-b.min.x, -b.min.y);\n\n\t\t// Tell paths to redraw themselves\n\t\tthis.fire('update');\n\t},\n\n\t_reset: function () {\n\t\tRenderer.prototype._reset.call(this);\n\n\t\tif (this._postponeUpdatePaths) {\n\t\t\tthis._postponeUpdatePaths = false;\n\t\t\tthis._updatePaths();\n\t\t}\n\t},\n\n\t_initPath: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\n\t\tvar order = layer._order = {\n\t\t\tlayer: layer,\n\t\t\tprev: this._drawLast,\n\t\t\tnext: null\n\t\t};\n\t\tif (this._drawLast) { this._drawLast.next = order; }\n\t\tthis._drawLast = order;\n\t\tthis._drawFirst = this._drawFirst || this._drawLast;\n\t},\n\n\t_addPath: function (layer) {\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar order = layer._order;\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\tthis._drawLast = prev;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\tdelete layer._order;\n\n\t\tdelete this._layers[Util.stamp(layer)];\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updatePath: function (layer) {\n\t\t// Redraw the union of the layer's old pixel\n\t\t// bounds and the new pixel bounds.\n\t\tthis._extendRedrawBounds(layer);\n\t\tlayer._project();\n\t\tlayer._update();\n\t\t// The redraw will extend the redraw bounds\n\t\t// with the new pixel bounds.\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateDashArray: function (layer) {\n\t\tif (typeof layer.options.dashArray === 'string') {\n\t\t\tvar parts = layer.options.dashArray.split(/[, ]+/),\n\t\t\t    dashArray = [],\n\t\t\t    dashValue,\n\t\t\t    i;\n\t\t\tfor (i = 0; i < parts.length; i++) {\n\t\t\t\tdashValue = Number(parts[i]);\n\t\t\t\t// Ignore dash array containing invalid lengths\n\t\t\t\tif (isNaN(dashValue)) { return; }\n\t\t\t\tdashArray.push(dashValue);\n\t\t\t}\n\t\t\tlayer.options._dashArray = dashArray;\n\t\t} else {\n\t\t\tlayer.options._dashArray = layer.options.dashArray;\n\t\t}\n\t},\n\n\t_requestRedraw: function (layer) {\n\t\tif (!this._map) { return; }\n\n\t\tthis._extendRedrawBounds(layer);\n\t\tthis._redrawRequest = this._redrawRequest || Util.requestAnimFrame(this._redraw, this);\n\t},\n\n\t_extendRedrawBounds: function (layer) {\n\t\tif (layer._pxBounds) {\n\t\t\tvar padding = (layer.options.weight || 0) + 1;\n\t\t\tthis._redrawBounds = this._redrawBounds || new Bounds();\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n\t\t}\n\t},\n\n\t_redraw: function () {\n\t\tthis._redrawRequest = null;\n\n\t\tif (this._redrawBounds) {\n\t\t\tthis._redrawBounds.min._floor();\n\t\t\tthis._redrawBounds.max._ceil();\n\t\t}\n\n\t\tthis._clear(); // clear layers in redraw bounds\n\t\tthis._draw(); // draw layers\n\n\t\tthis._redrawBounds = null;\n\t},\n\n\t_clear: function () {\n\t\tvar bounds = this._redrawBounds;\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t} else {\n\t\t\tthis._ctx.clearRect(0, 0, this._container.width, this._container.height);\n\t\t}\n\t},\n\n\t_draw: function () {\n\t\tvar layer, bounds = this._redrawBounds;\n\t\tthis._ctx.save();\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.beginPath();\n\t\t\tthis._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t\tthis._ctx.clip();\n\t\t}\n\n\t\tthis._drawing = true;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {\n\t\t\t\tlayer._updatePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._drawing = false;\n\n\t\tthis._ctx.restore();  // Restore state before clipping.\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tif (!this._drawing) { return; }\n\n\t\tvar i, j, len2, p,\n\t\t    parts = layer._parts,\n\t\t    len = parts.length,\n\t\t    ctx = this._ctx;\n\n\t\tif (!len) { return; }\n\n\t\tctx.beginPath();\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tfor (j = 0, len2 = parts[i].length; j < len2; j++) {\n\t\t\t\tp = parts[i][j];\n\t\t\t\tctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\tctx.closePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\n\t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\t},\n\n\t_updateCircle: function (layer) {\n\n\t\tif (!this._drawing || layer._empty()) { return; }\n\n\t\tvar p = layer._point,\n\t\t    ctx = this._ctx,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n\t\tif (s !== 1) {\n\t\t\tctx.save();\n\t\t\tctx.scale(1, s);\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n\t\tif (s !== 1) {\n\t\t\tctx.restore();\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\t},\n\n\t_fillStroke: function (ctx, layer) {\n\t\tvar options = layer.options;\n\n\t\tif (options.fill) {\n\t\t\tctx.globalAlpha = options.fillOpacity;\n\t\t\tctx.fillStyle = options.fillColor || options.color;\n\t\t\tctx.fill(options.fillRule || 'evenodd');\n\t\t}\n\n\t\tif (options.stroke && options.weight !== 0) {\n\t\t\tif (ctx.setLineDash) {\n\t\t\t\tctx.setLineDash(layer.options && layer.options._dashArray || []);\n\t\t\t}\n\t\t\tctx.globalAlpha = options.opacity;\n\t\t\tctx.lineWidth = options.weight;\n\t\t\tctx.strokeStyle = options.color;\n\t\t\tctx.lineCap = options.lineCap;\n\t\t\tctx.lineJoin = options.lineJoin;\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t// Canvas obviously doesn't have mouse events for individual drawn objects,\n\t// so we emulate that by calculating what's under the mouse on mousemove/click manually\n\n\t_onClick: function (e) {\n\t\tvar point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point) && !this._map._draggableMoved(layer)) {\n\t\t\t\tclickedLayer = layer;\n\t\t\t}\n\t\t}\n\t\tif (clickedLayer)  {\n\t\t\tDomEvent.fakeStop(e);\n\t\t\tthis._fireEvent([clickedLayer], e);\n\t\t}\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }\n\n\t\tvar point = this._map.mouseEventToLayerPoint(e);\n\t\tthis._handleMouseHover(e, point);\n\t},\n\n\n\t_handleMouseOut: function (e) {\n\t\tvar layer = this._hoveredLayer;\n\t\tif (layer) {\n\t\t\t// if we're leaving the layer, fire mouseout\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\n\t\t\tthis._fireEvent([layer], e, 'mouseout');\n\t\t\tthis._hoveredLayer = null;\n\t\t}\n\t},\n\n\t_handleMouseHover: function (e, point) {\n\t\tvar layer, candidateHoveredLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tcandidateHoveredLayer = layer;\n\t\t\t}\n\t\t}\n\n\t\tif (candidateHoveredLayer !== this._hoveredLayer) {\n\t\t\tthis._handleMouseOut(e);\n\n\t\t\tif (candidateHoveredLayer) {\n\t\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive'); // change cursor\n\t\t\t\tthis._fireEvent([candidateHoveredLayer], e, 'mouseover');\n\t\t\t\tthis._hoveredLayer = candidateHoveredLayer;\n\t\t\t}\n\t\t}\n\n\t\tif (this._hoveredLayer) {\n\t\t\tthis._fireEvent([this._hoveredLayer], e);\n\t\t}\n\t},\n\n\t_fireEvent: function (layers, e, type) {\n\t\tthis._map._fireDOMEvent(e, type || e.type, layers);\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\t// Already last\n\t\t\treturn;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else if (next) {\n\t\t\t// Update first entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\torder.prev = this._drawLast;\n\t\tthis._drawLast.next = order;\n\n\t\torder.next = null;\n\t\tthis._drawLast = order;\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\t// Already first\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else if (prev) {\n\t\t\t// Update last entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawLast = prev;\n\t\t}\n\n\t\torder.prev = null;\n\n\t\torder.next = this._drawFirst;\n\t\tthis._drawFirst.prev = order;\n\t\tthis._drawFirst = order;\n\n\t\tthis._requestRedraw(layer);\n\t}\n});\n\n// @factory L.canvas(options?: Renderer options)\n// Creates a Canvas renderer with the given options.\nexport function canvas(options) {\n\treturn Browser.canvas ? new Canvas(options) : null;\n}\n"",""import * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport {Renderer} from './Renderer';\n\n/*\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\n\nexport var vmlCreate = (function () {\n\ttry {\n\t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n\t\treturn function (name) {\n\t\t\treturn document.createElement('<lvml:' + name + ' class=\""lvml\"">');\n\t\t};\n\t} catch (e) {\n\t\treturn function (name) {\n\t\t\treturn document.createElement('<' + name + ' xmlns=\""urn:schemas-microsoft.com:vml\"" class=\""lvml\"">');\n\t\t};\n\t}\n})();\n\n\n/*\n * @class SVG\n *\n *\n * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n * with old versions of Internet Explorer.\n */\n\n// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\nexport var vmlMixin = {\n\n\t_initContainer: function () {\n\t\tthis._container = DomUtil.create('div', 'leaflet-vml-container');\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom) { return; }\n\t\tRenderer.prototype._update.call(this);\n\t\tthis.fire('update');\n\t},\n\n\t_initPath: function (layer) {\n\t\tvar container = layer._container = vmlCreate('shape');\n\n\t\tDomUtil.addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n\n\t\tcontainer.coordsize = '1 1';\n\n\t\tlayer._path = vmlCreate('path');\n\t\tcontainer.appendChild(layer._path);\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tvar container = layer._container;\n\t\tthis._container.appendChild(container);\n\n\t\tif (layer.options.interactive) {\n\t\t\tlayer.addInteractiveTarget(container);\n\t\t}\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar container = layer._container;\n\t\tDomUtil.remove(container);\n\t\tlayer.removeInteractiveTarget(container);\n\t\tdelete this._layers[Util.stamp(layer)];\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar stroke = layer._stroke,\n\t\t    fill = layer._fill,\n\t\t    options = layer.options,\n\t\t    container = layer._container;\n\n\t\tcontainer.stroked = !!options.stroke;\n\t\tcontainer.filled = !!options.fill;\n\n\t\tif (options.stroke) {\n\t\t\tif (!stroke) {\n\t\t\t\tstroke = layer._stroke = vmlCreate('stroke');\n\t\t\t}\n\t\t\tcontainer.appendChild(stroke);\n\t\t\tstroke.weight = options.weight + 'px';\n\t\t\tstroke.color = options.color;\n\t\t\tstroke.opacity = options.opacity;\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tstroke.dashStyle = Util.isArray(options.dashArray) ?\n\t\t\t\t    options.dashArray.join(' ') :\n\t\t\t\t    options.dashArray.replace(/( *, *)/g, ' ');\n\t\t\t} else {\n\t\t\t\tstroke.dashStyle = '';\n\t\t\t}\n\t\t\tstroke.endcap = options.lineCap.replace('butt', 'flat');\n\t\t\tstroke.joinstyle = options.lineJoin;\n\n\t\t} else if (stroke) {\n\t\t\tcontainer.removeChild(stroke);\n\t\t\tlayer._stroke = null;\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tif (!fill) {\n\t\t\t\tfill = layer._fill = vmlCreate('fill');\n\t\t\t}\n\t\t\tcontainer.appendChild(fill);\n\t\t\tfill.color = options.fillColor || options.color;\n\t\t\tfill.opacity = options.fillOpacity;\n\n\t\t} else if (fill) {\n\t\t\tcontainer.removeChild(fill);\n\t\t\tlayer._fill = null;\n\t\t}\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point.round(),\n\t\t    r = Math.round(layer._radius),\n\t\t    r2 = Math.round(layer._radiusY || r);\n\n\t\tthis._setPath(layer, layer._empty() ? 'M0 0' :\n\t\t\t'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.v = path;\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._container);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._container);\n\t}\n};\n"",""import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Browser from '../../core/Browser';\nimport {stamp} from '../../core/Util';\nimport {svgCreate, pointsToPath} from './SVG.Util';\nexport {pointsToPath};\nimport {vmlMixin, vmlCreate} from './SVG.VML';\n\nexport var create = Browser.vml ? vmlCreate : svgCreate;\n\n/*\n * @class SVG\n * @inherits Renderer\n * @aka L.SVG\n *\n * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](http://caniuse.com/#search=svg), SVG is not\n * available in all web browsers, notably Android 2.x and 3.x.\n *\n * Although SVG is not available on IE7 and IE8, these browsers support\n * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n * (a now deprecated technology), and the SVG renderer will fall back to VML in\n * this case.\n *\n * @example\n *\n * Use SVG by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.svg()\n * });\n * ```\n *\n * Use a SVG renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.svg({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var SVG = Renderer.extend({\n\n\tgetEvents: function () {\n\t\tvar events = Renderer.prototype.getEvents.call(this);\n\t\tevents.zoomstart = this._onZoomStart;\n\t\treturn events;\n\t},\n\n\t_initContainer: function () {\n\t\tthis._container = create('svg');\n\n\t\t// makes it possible to click through svg root; we'll reset it back in individual paths\n\t\tthis._container.setAttribute('pointer-events', 'none');\n\n\t\tthis._rootGroup = create('g');\n\t\tthis._container.appendChild(this._rootGroup);\n\t},\n\n\t_destroyContainer: function () {\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t\tdelete this._rootGroup;\n\t\tdelete this._svgSize;\n\t},\n\n\t_onZoomStart: function () {\n\t\t// Drag-then-pinch interactions might mess up the center and zoom.\n\t\t// In this case, the easiest way to prevent this is re-do the renderer\n\t\t//   bounds and padding when the zooming starts.\n\t\tthis._update();\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    size = b.getSize(),\n\t\t    container = this._container;\n\n\t\t// set size of svg-container if changed\n\t\tif (!this._svgSize || !this._svgSize.equals(size)) {\n\t\t\tthis._svgSize = size;\n\t\t\tcontainer.setAttribute('width', size.x);\n\t\t\tcontainer.setAttribute('height', size.y);\n\t\t}\n\n\t\t// movement: update container viewBox so that we don't have to change coordinates of individual layers\n\t\tDomUtil.setPosition(container, b.min);\n\t\tcontainer.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n\n\t\tthis.fire('update');\n\t},\n\n\t// methods below are called by vector layers implementations\n\n\t_initPath: function (layer) {\n\t\tvar path = layer._path = create('path');\n\n\t\t// @namespace Path\n\t\t// @option className: String = null\n\t\t// Custom class name set on an element. Only for SVG renderer.\n\t\tif (layer.options.className) {\n\t\t\tDomUtil.addClass(path, layer.options.className);\n\t\t}\n\n\t\tif (layer.options.interactive) {\n\t\t\tDomUtil.addClass(path, 'leaflet-interactive');\n\t\t}\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tif (!this._rootGroup) { this._initContainer(); }\n\t\tthis._rootGroup.appendChild(layer._path);\n\t\tlayer.addInteractiveTarget(layer._path);\n\t},\n\n\t_removePath: function (layer) {\n\t\tDomUtil.remove(layer._path);\n\t\tlayer.removeInteractiveTarget(layer._path);\n\t\tdelete this._layers[stamp(layer)];\n\t},\n\n\t_updatePath: function (layer) {\n\t\tlayer._project();\n\t\tlayer._update();\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar path = layer._path,\n\t\t    options = layer.options;\n\n\t\tif (!path) { return; }\n\n\t\tif (options.stroke) {\n\t\t\tpath.setAttribute('stroke', options.color);\n\t\t\tpath.setAttribute('stroke-opacity', options.opacity);\n\t\t\tpath.setAttribute('stroke-width', options.weight);\n\t\t\tpath.setAttribute('stroke-linecap', options.lineCap);\n\t\t\tpath.setAttribute('stroke-linejoin', options.lineJoin);\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tpath.setAttribute('stroke-dasharray', options.dashArray);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dasharray');\n\t\t\t}\n\n\t\t\tif (options.dashOffset) {\n\t\t\t\tpath.setAttribute('stroke-dashoffset', options.dashOffset);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dashoffset');\n\t\t\t}\n\t\t} else {\n\t\t\tpath.setAttribute('stroke', 'none');\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tpath.setAttribute('fill', options.fillColor || options.color);\n\t\t\tpath.setAttribute('fill-opacity', options.fillOpacity);\n\t\t\tpath.setAttribute('fill-rule', options.fillRule || 'evenodd');\n\t\t} else {\n\t\t\tpath.setAttribute('fill', 'none');\n\t\t}\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tthis._setPath(layer, pointsToPath(layer._parts, closed));\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n\t\t    arc = 'a' + r + ',' + r2 + ' 0 1,0 ';\n\n\t\t// drawing a circle with two half-arcs\n\t\tvar d = layer._empty() ? 'M0 0' :\n\t\t\t'M' + (p.x - r) + ',' + p.y +\n\t\t\tarc + (r * 2) + ',0 ' +\n\t\t\tarc + (-r * 2) + ',0 ';\n\n\t\tthis._setPath(layer, d);\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.setAttribute('d', path);\n\t},\n\n\t// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._path);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._path);\n\t}\n});\n\nif (Browser.vml) {\n\tSVG.include(vmlMixin);\n}\n\n// @namespace SVG\n// @factory L.svg(options?: Renderer options)\n// Creates a SVG renderer with the given options.\nexport function svg(options) {\n\treturn Browser.svg || Browser.vml ? new SVG(options) : null;\n}\n"",""import {Map} from '../../map/Map';\nimport {canvas} from './Canvas';\nimport {svg} from './SVG';\n\nMap.include({\n\t// @namespace Map; @method getRenderer(layer: Path): Renderer\n\t// Returns the instance of `Renderer` that should be used to render the given\n\t// `Path`. It will ensure that the `renderer` options of the map and paths\n\t// are respected, and that the renderers do exist on the map.\n\tgetRenderer: function (layer) {\n\t\t// @namespace Path; @option renderer: Renderer\n\t\t// Use this specific instance of `Renderer` for this path. Takes\n\t\t// precedence over the map's [default renderer](#map-renderer).\n\t\tvar renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n\t\tif (!renderer) {\n\t\t\trenderer = this._renderer = this._createRenderer();\n\t\t}\n\n\t\tif (!this.hasLayer(renderer)) {\n\t\t\tthis.addLayer(renderer);\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_getPaneRenderer: function (name) {\n\t\tif (name === 'overlayPane' || name === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar renderer = this._paneRenderers[name];\n\t\tif (renderer === undefined) {\n\t\t\trenderer = this._createRenderer({pane: name});\n\t\t\tthis._paneRenderers[name] = renderer;\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_createRenderer: function (options) {\n\t\t// @namespace Map; @option preferCanvas: Boolean = false\n\t\t// Whether `Path`s should be rendered on a `Canvas` renderer.\n\t\t// By default, all `Path`s are rendered in a `SVG` renderer.\n\t\treturn (this.options.preferCanvas && canvas(options)) || svg(options);\n\t}\n});\n"",""import {Polygon} from './Polygon';\nimport {toLatLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n */\n\n/*\n * @class Rectangle\n * @aka L.Rectangle\n * @inherits Polygon\n *\n * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n *\n * @example\n *\n * ```js\n * // define rectangle geographical bounds\n * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n *\n * // create an orange rectangle\n * L.rectangle(bounds, {color: \""#ff7800\"", weight: 1}).addTo(map);\n *\n * // zoom the map to the rectangle bounds\n * map.fitBounds(bounds);\n * ```\n *\n */\n\n\nexport var Rectangle = Polygon.extend({\n\tinitialize: function (latLngBounds, options) {\n\t\tPolygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n\t},\n\n\t// @method setBounds(latLngBounds: LatLngBounds): this\n\t// Redraws the rectangle with the passed bounds.\n\tsetBounds: function (latLngBounds) {\n\t\treturn this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n\t},\n\n\t_boundsToLatLngs: function (latLngBounds) {\n\t\tlatLngBounds = toLatLngBounds(latLngBounds);\n\t\treturn [\n\t\t\tlatLngBounds.getSouthWest(),\n\t\t\tlatLngBounds.getNorthWest(),\n\t\t\tlatLngBounds.getNorthEast(),\n\t\t\tlatLngBounds.getSouthEast()\n\t\t];\n\t}\n});\n\n\n// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\nexport function rectangle(latLngBounds, options) {\n\treturn new Rectangle(latLngBounds, options);\n}\n"",""export {Renderer} from './Renderer';\nexport {Canvas, canvas} from './Canvas';\nimport {SVG, create, pointsToPath, svg} from './SVG';\nSVG.create = create;\nSVG.pointsToPath = pointsToPath;\nexport {SVG, svg};\nimport './Renderer.getRenderer';\t// This is a bit of a hack, but needed because circular dependencies\n\nexport {Path} from './Path';\nexport {CircleMarker, circleMarker} from './CircleMarker';\nexport {Circle, circle} from './Circle';\nexport {Polyline, polyline} from './Polyline';\nexport {Polygon, polygon} from './Polygon';\nexport {Rectangle, rectangle} from './Rectangle';\n"",""export {Layer} from './Layer';\nexport {LayerGroup, layerGroup} from './LayerGroup';\nexport {FeatureGroup, featureGroup} from './FeatureGroup';\nimport {GeoJSON, geoJSON, geoJson, geometryToLayer, coordsToLatLng, coordsToLatLngs, latLngToCoords, latLngsToCoords, getFeature, asFeature} from './GeoJSON';\nGeoJSON.geometryToLayer = geometryToLayer;\nGeoJSON.coordsToLatLng = coordsToLatLng;\nGeoJSON.coordsToLatLngs = coordsToLatLngs;\nGeoJSON.latLngToCoords = latLngToCoords;\nGeoJSON.latLngsToCoords = latLngsToCoords;\nGeoJSON.getFeature = getFeature;\nGeoJSON.asFeature = asFeature;\nexport {GeoJSON, geoJSON, geoJson};\n\nexport {ImageOverlay, imageOverlay} from './ImageOverlay';\nexport {VideoOverlay, videoOverlay} from './VideoOverlay';\n\nexport {DivOverlay} from './DivOverlay';\nexport {Popup, popup} from './Popup';\nexport {Tooltip, tooltip} from './Tooltip';\n\nexport * from './marker/index';\nexport * from './tile/index';\nexport * from './vector/index';\n"",""import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n * (zoom to a selected bounding box), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option boxZoom: Boolean = true\n\t// Whether the map can be zoomed to a rectangular area specified by\n\t// dragging the mouse while pressing the shift key.\n\tboxZoom: true\n});\n\nexport var BoxZoom = Handler.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = map._container;\n\t\tthis._pane = map._panes.overlayPane;\n\t\tthis._resetStateTimeout = 0;\n\t\tmap.on('unload', this._destroy, this);\n\t},\n\n\taddHooks: function () {\n\t\tDomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tmoved: function () {\n\t\treturn this._moved;\n\t},\n\n\t_destroy: function () {\n\t\tDomUtil.remove(this._pane);\n\t\tdelete this._pane;\n\t},\n\n\t_resetState: function () {\n\t\tthis._resetStateTimeout = 0;\n\t\tthis._moved = false;\n\t},\n\n\t_clearDeferredResetState: function () {\n\t\tif (this._resetStateTimeout !== 0) {\n\t\t\tclearTimeout(this._resetStateTimeout);\n\t\t\tthis._resetStateTimeout = 0;\n\t\t}\n\t},\n\n\t_onMouseDown: function (e) {\n\t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }\n\n\t\t// Clear the deferred resetState if it hasn't executed yet, otherwise it\n\t\t// will interrupt the interaction and orphan a box element in the container.\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetState();\n\n\t\tDomUtil.disableTextSelection();\n\t\tDomUtil.disableImageDrag();\n\n\t\tthis._startPoint = this._map.mouseEventToContainerPoint(e);\n\n\t\tDomEvent.on(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._moved) {\n\t\t\tthis._moved = true;\n\n\t\t\tthis._box = DomUtil.create('div', 'leaflet-zoom-box', this._container);\n\t\t\tDomUtil.addClass(this._container, 'leaflet-crosshair');\n\n\t\t\tthis._map.fire('boxzoomstart');\n\t\t}\n\n\t\tthis._point = this._map.mouseEventToContainerPoint(e);\n\n\t\tvar bounds = new Bounds(this._point, this._startPoint),\n\t\t    size = bounds.getSize();\n\n\t\tDomUtil.setPosition(this._box, bounds.min);\n\n\t\tthis._box.style.width  = size.x + 'px';\n\t\tthis._box.style.height = size.y + 'px';\n\t},\n\n\t_finish: function () {\n\t\tif (this._moved) {\n\t\t\tDomUtil.remove(this._box);\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-crosshair');\n\t\t}\n\n\t\tDomUtil.enableTextSelection();\n\t\tDomUtil.enableImageDrag();\n\n\t\tDomEvent.off(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseUp: function (e) {\n\t\tif ((e.which !== 1) && (e.button !== 1)) { return; }\n\n\t\tthis._finish();\n\n\t\tif (!this._moved) { return; }\n\t\t// Postpone to next JS tick so internal click event handling\n\t\t// still see it as \""moved\"".\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetStateTimeout = setTimeout(Util.bind(this._resetState, this), 0);\n\n\t\tvar bounds = new LatLngBounds(\n\t\t        this._map.containerPointToLatLng(this._startPoint),\n\t\t        this._map.containerPointToLatLng(this._point));\n\n\t\tthis._map\n\t\t\t.fitBounds(bounds)\n\t\t\t.fire('boxzoomend', {boxZoomBounds: bounds});\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.keyCode === 27) {\n\t\t\tthis._finish();\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property boxZoom: Handler\n// Box (shift-drag with mouse) zoom handler.\nMap.addInitHook('addHandler', 'boxZoom', BoxZoom);\n"",""import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\n\n/*\n * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\n\nMap.mergeOptions({\n\t// @option doubleClickZoom: Boolean|String = true\n\t// Whether the map can be zoomed in by double clicking on it and\n\t// zoomed out by double clicking while holding shift. If passed\n\t// `'center'`, double-click zoom will zoom to the center of the\n\t//  view regardless of where the mouse was.\n\tdoubleClickZoom: true\n});\n\nexport var DoubleClickZoom = Handler.extend({\n\taddHooks: function () {\n\t\tthis._map.on('dblclick', this._onDoubleClick, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._map.off('dblclick', this._onDoubleClick, this);\n\t},\n\n\t_onDoubleClick: function (e) {\n\t\tvar map = this._map,\n\t\t    oldZoom = map.getZoom(),\n\t\t    delta = map.options.zoomDelta,\n\t\t    zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n\t\tif (map.options.doubleClickZoom === 'center') {\n\t\t\tmap.setZoom(zoom);\n\t\t} else {\n\t\t\tmap.setZoomAround(e.containerPoint, zoom);\n\t\t}\n\t}\n});\n\n// @section Handlers\n//\n// Map properties include interaction handlers that allow you to control\n// interaction behavior in runtime, enabling or disabling certain features such\n// as dragging or touch zoom (see `Handler` methods). For example:\n//\n// ```js\n// map.doubleClickZoom.disable();\n// ```\n//\n// @property doubleClickZoom: Handler\n// Double click zoom handler.\nMap.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n"",""import {Map} from '../Map';\nimport * as Browser from '../../core/Browser';\nimport {Handler} from '../../core/Handler';\nimport {Draggable} from '../../dom/Draggable';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\nimport {toBounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option dragging: Boolean = true\n\t// Whether the map be draggable with mouse/touch or not.\n\tdragging: true,\n\n\t// @section Panning Inertia Options\n\t// @option inertia: Boolean = *\n\t// If enabled, panning of the map will have an inertia effect where\n\t// the map builds momentum while dragging and continues moving in\n\t// the same direction for some time. Feels especially nice on touch\n\t// devices. Enabled by default unless running on old Android devices.\n\tinertia: !Browser.android23,\n\n\t// @option inertiaDeceleration: Number = 3000\n\t// The rate with which the inertial movement slows down, in pixels/second².\n\tinertiaDeceleration: 3400, // px/s^2\n\n\t// @option inertiaMaxSpeed: Number = Infinity\n\t// Max speed of the inertial movement, in pixels/second.\n\tinertiaMaxSpeed: Infinity, // px/s\n\n\t// @option easeLinearity: Number = 0.2\n\teaseLinearity: 0.2,\n\n\t// TODO refactor, move to CRS\n\t// @option worldCopyJump: Boolean = false\n\t// With this option enabled, the map tracks when you pan to another \""copy\""\n\t// of the world and seamlessly jumps to the original one so that all overlays\n\t// like markers and vector layers are still visible.\n\tworldCopyJump: false,\n\n\t// @option maxBoundsViscosity: Number = 0.0\n\t// If `maxBounds` is set, this option will control how solid the bounds\n\t// are when dragging the map around. The default value of `0.0` allows the\n\t// user to drag outside the bounds at normal speed, higher values will\n\t// slow down map dragging outside bounds, and `1.0` makes the bounds fully\n\t// solid, preventing the user from dragging outside the bounds.\n\tmaxBoundsViscosity: 0.0\n});\n\nexport var Drag = Handler.extend({\n\taddHooks: function () {\n\t\tif (!this._draggable) {\n\t\t\tvar map = this._map;\n\n\t\t\tthis._draggable = new Draggable(map._mapPane, map._container);\n\n\t\t\tthis._draggable.on({\n\t\t\t\tdragstart: this._onDragStart,\n\t\t\t\tdrag: this._onDrag,\n\t\t\t\tdragend: this._onDragEnd\n\t\t\t}, this);\n\n\t\t\tthis._draggable.on('predrag', this._onPreDragLimit, this);\n\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\tthis._draggable.on('predrag', this._onPreDragWrap, this);\n\t\t\t\tmap.on('zoomend', this._onZoomEnd, this);\n\n\t\t\t\tmap.whenReady(this._onZoomEnd, this);\n\t\t\t}\n\t\t}\n\t\tDomUtil.addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n\t\tthis._draggable.enable();\n\t\tthis._positions = [];\n\t\tthis._times = [];\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-grab');\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-drag');\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\tmoving: function () {\n\t\treturn this._draggable && this._draggable._moving;\n\t},\n\n\t_onDragStart: function () {\n\t\tvar map = this._map;\n\n\t\tmap._stop();\n\t\tif (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n\t\t\tvar bounds = latLngBounds(this._map.options.maxBounds);\n\n\t\t\tthis._offsetLimit = toBounds(\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)\n\t\t\t\t\t.add(this._map.getSize()));\n\n\t\t\tthis._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n\t\t} else {\n\t\t\tthis._offsetLimit = null;\n\t\t}\n\n\t\tmap\n\t\t    .fire('movestart')\n\t\t    .fire('dragstart');\n\n\t\tif (map.options.inertia) {\n\t\t\tthis._positions = [];\n\t\t\tthis._times = [];\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tif (this._map.options.inertia) {\n\t\t\tvar time = this._lastTime = +new Date(),\n\t\t\t    pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n\t\t\tthis._positions.push(pos);\n\t\t\tthis._times.push(time);\n\n\t\t\tthis._prunePositions(time);\n\t\t}\n\n\t\tthis._map\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_prunePositions: function (time) {\n\t\twhile (this._positions.length > 1 && time - this._times[0] > 50) {\n\t\t\tthis._positions.shift();\n\t\t\tthis._times.shift();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tvar pxCenter = this._map.getSize().divideBy(2),\n\t\t    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n\t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n\t\tthis._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n\t},\n\n\t_viscousLimit: function (value, threshold) {\n\t\treturn value - (value - threshold) * this._viscosity;\n\t},\n\n\t_onPreDragLimit: function () {\n\t\tif (!this._viscosity || !this._offsetLimit) { return; }\n\n\t\tvar offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n\t\tvar limit = this._offsetLimit;\n\t\tif (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }\n\t\tif (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }\n\t\tif (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }\n\t\tif (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }\n\n\t\tthis._draggable._newPos = this._draggable._startPos.add(offset);\n\t},\n\n\t_onPreDragWrap: function () {\n\t\t// TODO refactor to be able to adjust map pane position after zoom\n\t\tvar worldWidth = this._worldWidth,\n\t\t    halfWidth = Math.round(worldWidth / 2),\n\t\t    dx = this._initialWorldOffset,\n\t\t    x = this._draggable._newPos.x,\n\t\t    newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n\t\t    newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n\t\t    newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n\t\tthis._draggable._absPos = this._draggable._newPos.clone();\n\t\tthis._draggable._newPos.x = newX;\n\t},\n\n\t_onDragEnd: function (e) {\n\t\tvar map = this._map,\n\t\t    options = map.options,\n\n\t\t    noInertia = !options.inertia || this._times.length < 2;\n\n\t\tmap.fire('dragend', e);\n\n\t\tif (noInertia) {\n\t\t\tmap.fire('moveend');\n\n\t\t} else {\n\t\t\tthis._prunePositions(+new Date());\n\n\t\t\tvar direction = this._lastPos.subtract(this._positions[0]),\n\t\t\t    duration = (this._lastTime - this._times[0]) / 1000,\n\t\t\t    ease = options.easeLinearity,\n\n\t\t\t    speedVector = direction.multiplyBy(ease / duration),\n\t\t\t    speed = speedVector.distanceTo([0, 0]),\n\n\t\t\t    limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n\t\t\t    limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n\n\t\t\t    decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n\t\t\t    offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n\t\t\tif (!offset.x && !offset.y) {\n\t\t\t\tmap.fire('moveend');\n\n\t\t\t} else {\n\t\t\t\toffset = map._limitOffset(offset, map.options.maxBounds);\n\n\t\t\t\tUtil.requestAnimFrame(function () {\n\t\t\t\t\tmap.panBy(offset, {\n\t\t\t\t\t\tduration: decelerationDuration,\n\t\t\t\t\t\teaseLinearity: ease,\n\t\t\t\t\t\tnoMoveStart: true,\n\t\t\t\t\t\tanimate: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property dragging: Handler\n// Map dragging handler (by both mouse and touch).\nMap.addInitHook('addHandler', 'dragging', Drag);\n"",""import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {on, off, stop} from '../../dom/DomEvent';\nimport {toPoint} from '../../geometry/Point';\n\n\n/*\n * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n */\n\n// @namespace Map\n// @section Keyboard Navigation Options\nMap.mergeOptions({\n\t// @option keyboard: Boolean = true\n\t// Makes the map focusable and allows users to navigate the map with keyboard\n\t// arrows and `+`/`-` keys.\n\tkeyboard: true,\n\n\t// @option keyboardPanDelta: Number = 80\n\t// Amount of pixels to pan when pressing an arrow key.\n\tkeyboardPanDelta: 80\n});\n\nexport var Keyboard = Handler.extend({\n\n\tkeyCodes: {\n\t\tleft:    [37],\n\t\tright:   [39],\n\t\tdown:    [40],\n\t\tup:      [38],\n\t\tzoomIn:  [187, 107, 61, 171],\n\t\tzoomOut: [189, 109, 54, 173]\n\t},\n\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._setPanDelta(map.options.keyboardPanDelta);\n\t\tthis._setZoomDelta(map.options.zoomDelta);\n\t},\n\n\taddHooks: function () {\n\t\tvar container = this._map._container;\n\n\t\t// make the container focusable by tabbing\n\t\tif (container.tabIndex <= 0) {\n\t\t\tcontainer.tabIndex = '0';\n\t\t}\n\n\t\ton(container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.on({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._removeHooks();\n\n\t\toff(this._map._container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.off({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\t_onMouseDown: function () {\n\t\tif (this._focused) { return; }\n\n\t\tvar body = document.body,\n\t\t    docEl = document.documentElement,\n\t\t    top = body.scrollTop || docEl.scrollTop,\n\t\t    left = body.scrollLeft || docEl.scrollLeft;\n\n\t\tthis._map._container.focus();\n\n\t\twindow.scrollTo(left, top);\n\t},\n\n\t_onFocus: function () {\n\t\tthis._focused = true;\n\t\tthis._map.fire('focus');\n\t},\n\n\t_onBlur: function () {\n\t\tthis._focused = false;\n\t\tthis._map.fire('blur');\n\t},\n\n\t_setPanDelta: function (panDelta) {\n\t\tvar keys = this._panKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.left.length; i < len; i++) {\n\t\t\tkeys[codes.left[i]] = [-1 * panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.right.length; i < len; i++) {\n\t\t\tkeys[codes.right[i]] = [panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.down.length; i < len; i++) {\n\t\t\tkeys[codes.down[i]] = [0, panDelta];\n\t\t}\n\t\tfor (i = 0, len = codes.up.length; i < len; i++) {\n\t\t\tkeys[codes.up[i]] = [0, -1 * panDelta];\n\t\t}\n\t},\n\n\t_setZoomDelta: function (zoomDelta) {\n\t\tvar keys = this._zoomKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.zoomIn.length; i < len; i++) {\n\t\t\tkeys[codes.zoomIn[i]] = zoomDelta;\n\t\t}\n\t\tfor (i = 0, len = codes.zoomOut.length; i < len; i++) {\n\t\t\tkeys[codes.zoomOut[i]] = -zoomDelta;\n\t\t}\n\t},\n\n\t_addHooks: function () {\n\t\ton(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_removeHooks: function () {\n\t\toff(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.altKey || e.ctrlKey || e.metaKey) { return; }\n\n\t\tvar key = e.keyCode,\n\t\t    map = this._map,\n\t\t    offset;\n\n\t\tif (key in this._panKeys) {\n\t\t\tif (!map._panAnim || !map._panAnim._inProgress) {\n\t\t\t\toffset = this._panKeys[key];\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\toffset = toPoint(offset).multiplyBy(3);\n\t\t\t\t}\n\n\t\t\t\tmap.panBy(offset);\n\n\t\t\t\tif (map.options.maxBounds) {\n\t\t\t\t\tmap.panInsideBounds(map.options.maxBounds);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (key in this._zoomKeys) {\n\t\t\tmap.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n\n\t\t} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n\t\t\tmap.closePopup();\n\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tstop(e);\n\t}\n});\n\n// @section Handlers\n// @section Handlers\n// @property keyboard: Handler\n// Keyboard navigation handler.\nMap.addInitHook('addHandler', 'keyboard', Keyboard);\n"",""import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\n\n/*\n * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Mousewheel options\n\t// @option scrollWheelZoom: Boolean|String = true\n\t// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n\t// it will zoom to the center of the view regardless of where the mouse was.\n\tscrollWheelZoom: true,\n\n\t// @option wheelDebounceTime: Number = 40\n\t// Limits the rate at which a wheel can fire (in milliseconds). By default\n\t// user can't zoom via wheel more often than once per 40 ms.\n\twheelDebounceTime: 40,\n\n\t// @option wheelPxPerZoomLevel: Number = 60\n\t// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n\t// mean a change of one full zoom level. Smaller values will make wheel-zooming\n\t// faster (and vice versa).\n\twheelPxPerZoomLevel: 60\n});\n\nexport var ScrollWheelZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'mousewheel', this._onWheelScroll, this);\n\n\t\tthis._delta = 0;\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'mousewheel', this._onWheelScroll, this);\n\t},\n\n\t_onWheelScroll: function (e) {\n\t\tvar delta = DomEvent.getWheelDelta(e);\n\n\t\tvar debounce = this._map.options.wheelDebounceTime;\n\n\t\tthis._delta += delta;\n\t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n\t\tif (!this._startTime) {\n\t\t\tthis._startTime = +new Date();\n\t\t}\n\n\t\tvar left = Math.max(debounce - (+new Date() - this._startTime), 0);\n\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = setTimeout(Util.bind(this._performZoom, this), left);\n\n\t\tDomEvent.stop(e);\n\t},\n\n\t_performZoom: function () {\n\t\tvar map = this._map,\n\t\t    zoom = map.getZoom(),\n\t\t    snap = this._map.options.zoomSnap || 0;\n\n\t\tmap._stop(); // stop panning and fly animations if any\n\n\t\t// map the delta with a sigmoid function to -4..4 range leaning on -1..1\n\t\tvar d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n\t\t    d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n\t\t    d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n\t\t    delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n\n\t\tthis._delta = 0;\n\t\tthis._startTime = null;\n\n\t\tif (!delta) { return; }\n\n\t\tif (map.options.scrollWheelZoom === 'center') {\n\t\t\tmap.setZoom(zoom + delta);\n\t\t} else {\n\t\t\tmap.setZoomAround(this._lastMousePos, zoom + delta);\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property scrollWheelZoom: Handler\n// Scroll wheel zoom handler.\nMap.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n"",""import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {Point} from '../../geometry/Point';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Browser from '../../core/Browser';\n\n\n/*\n * L.Map.Tap is used to enable mobile hacks like quick taps and long hold.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option tap: Boolean = true\n\t// Enables mobile hacks for supporting instant taps (fixing 200ms click\n\t// delay on iOS/Android) and touch holds (fired as `contextmenu` events).\n\ttap: true,\n\n\t// @option tapTolerance: Number = 15\n\t// The max number of pixels a user can shift his finger during touch\n\t// for it to be considered a valid tap.\n\ttapTolerance: 15\n});\n\nexport var Tap = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\t_onDown: function (e) {\n\t\tif (!e.touches) { return; }\n\n\t\tDomEvent.preventDefault(e);\n\n\t\tthis._fireClick = true;\n\n\t\t// don't simulate click or track longpress if more than 1 touch\n\t\tif (e.touches.length > 1) {\n\t\t\tthis._fireClick = false;\n\t\t\tclearTimeout(this._holdTimeout);\n\t\t\treturn;\n\t\t}\n\n\t\tvar first = e.touches[0],\n\t\t    el = first.target;\n\n\t\tthis._startPos = this._newPos = new Point(first.clientX, first.clientY);\n\n\t\t// if touching a link, highlight it\n\t\tif (el.tagName && el.tagName.toLowerCase() === 'a') {\n\t\t\tDomUtil.addClass(el, 'leaflet-active');\n\t\t}\n\n\t\t// simulate long hold but setting a timeout\n\t\tthis._holdTimeout = setTimeout(Util.bind(function () {\n\t\t\tif (this._isTapValid()) {\n\t\t\t\tthis._fireClick = false;\n\t\t\t\tthis._onUp();\n\t\t\t\tthis._simulateEvent('contextmenu', first);\n\t\t\t}\n\t\t}, this), 1000);\n\n\t\tthis._simulateEvent('mousedown', first);\n\n\t\tDomEvent.on(document, {\n\t\t\ttouchmove: this._onMove,\n\t\t\ttouchend: this._onUp\n\t\t}, this);\n\t},\n\n\t_onUp: function (e) {\n\t\tclearTimeout(this._holdTimeout);\n\n\t\tDomEvent.off(document, {\n\t\t\ttouchmove: this._onMove,\n\t\t\ttouchend: this._onUp\n\t\t}, this);\n\n\t\tif (this._fireClick && e && e.changedTouches) {\n\n\t\t\tvar first = e.changedTouches[0],\n\t\t\t    el = first.target;\n\n\t\t\tif (el && el.tagName && el.tagName.toLowerCase() === 'a') {\n\t\t\t\tDomUtil.removeClass(el, 'leaflet-active');\n\t\t\t}\n\n\t\t\tthis._simulateEvent('mouseup', first);\n\n\t\t\t// simulate click if the touch didn't move too much\n\t\t\tif (this._isTapValid()) {\n\t\t\t\tthis._simulateEvent('click', first);\n\t\t\t}\n\t\t}\n\t},\n\n\t_isTapValid: function () {\n\t\treturn this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n\t},\n\n\t_onMove: function (e) {\n\t\tvar first = e.touches[0];\n\t\tthis._newPos = new Point(first.clientX, first.clientY);\n\t\tthis._simulateEvent('mousemove', first);\n\t},\n\n\t_simulateEvent: function (type, e) {\n\t\tvar simulatedEvent = document.createEvent('MouseEvents');\n\n\t\tsimulatedEvent._simulated = true;\n\t\te.target._simulatedClick = true;\n\n\t\tsimulatedEvent.initMouseEvent(\n\t\t        type, true, true, window, 1,\n\t\t        e.screenX, e.screenY,\n\t\t        e.clientX, e.clientY,\n\t\t        false, false, false, false, 0, null);\n\n\t\te.target.dispatchEvent(simulatedEvent);\n\t}\n});\n\n// @section Handlers\n// @property tap: Handler\n// Mobile touch hacks (quick tap and touch hold) handler.\nif (Browser.touch && !Browser.pointer) {\n\tMap.addInitHook('addHandler', 'tap', Tap);\n}\n"",""import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Browser from '../../core/Browser';\n\n/*\n * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option touchZoom: Boolean|String = *\n\t// Whether the map can be zoomed by touch-dragging with two fingers. If\n\t// passed `'center'`, it will zoom to the center of the view regardless of\n\t// where the touch events (fingers) were. Enabled for touch-capable web\n\t// browsers except for old Androids.\n\ttouchZoom: Browser.touch && !Browser.android23,\n\n\t// @option bounceAtZoomLimits: Boolean = true\n\t// Set it to false if you don't want the map to zoom beyond min/max zoom\n\t// and then bounce back when pinch-zooming.\n\tbounceAtZoomLimits: true\n});\n\nexport var TouchZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\t_onTouchStart: function (e) {\n\t\tvar map = this._map;\n\t\tif (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }\n\n\t\tvar p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]);\n\n\t\tthis._centerPoint = map.getSize()._divideBy(2);\n\t\tthis._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\t\tif (map.options.touchZoom !== 'center') {\n\t\t\tthis._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n\t\t}\n\n\t\tthis._startDist = p1.distanceTo(p2);\n\t\tthis._startZoom = map.getZoom();\n\n\t\tthis._moved = false;\n\t\tthis._zooming = true;\n\n\t\tmap._stop();\n\n\t\tDomEvent.on(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.on(document, 'touchend', this._onTouchEnd, this);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchMove: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }\n\n\t\tvar map = this._map,\n\t\t    p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]),\n\t\t    scale = p1.distanceTo(p2) / this._startDist;\n\n\t\tthis._zoom = map.getScaleZoom(scale, this._startZoom);\n\n\t\tif (!map.options.bounceAtZoomLimits && (\n\t\t\t(this._zoom < map.getMinZoom() && scale < 1) ||\n\t\t\t(this._zoom > map.getMaxZoom() && scale > 1))) {\n\t\t\tthis._zoom = map._limitZoom(this._zoom);\n\t\t}\n\n\t\tif (map.options.touchZoom === 'center') {\n\t\t\tthis._center = this._startLatLng;\n\t\t\tif (scale === 1) { return; }\n\t\t} else {\n\t\t\t// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n\t\t\tvar delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n\t\t\tif (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\t\t\tthis._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n\t\t}\n\n\t\tif (!this._moved) {\n\t\t\tmap._moveStart(true, false);\n\t\t\tthis._moved = true;\n\t\t}\n\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tvar moveFn = Util.bind(map._move, map, this._center, this._zoom, {pinch: true, round: false});\n\t\tthis._animRequest = Util.requestAnimFrame(moveFn, this, true);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchEnd: function () {\n\t\tif (!this._moved || !this._zooming) {\n\t\t\tthis._zooming = false;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zooming = false;\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tDomEvent.off(document, 'touchmove', this._onTouchMove);\n\t\tDomEvent.off(document, 'touchend', this._onTouchEnd);\n\n\t\t// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n\t\tif (this._map.options.zoomAnimation) {\n\t\t\tthis._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n\t\t} else {\n\t\t\tthis._map._resetView(this._center, this._map._limitZoom(this._zoom));\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property touchZoom: Handler\n// Touch zoom handler.\nMap.addInitHook('addHandler', 'touchZoom', TouchZoom);\n"",""import {Map} from './Map';\nimport {BoxZoom} from './handler/Map.BoxZoom';\nMap.BoxZoom = BoxZoom;\nimport {DoubleClickZoom} from './handler/Map.DoubleClickZoom';\nMap.DoubleClickZoom = DoubleClickZoom;\nimport {Drag} from './handler/Map.Drag';\nMap.Drag = Drag;\nimport {Keyboard} from './handler/Map.Keyboard';\nMap.Keyboard = Keyboard;\nimport {ScrollWheelZoom} from './handler/Map.ScrollWheelZoom';\nMap.ScrollWheelZoom = ScrollWheelZoom;\nimport {Tap} from './handler/Map.Tap';\nMap.Tap = Tap;\nimport {TouchZoom} from './handler/Map.TouchZoom';\nMap.TouchZoom = TouchZoom;\n\nexport {Map, createMap as map} from './Map';\n"",""\r\nimport {version} from '../package.json';\r\nexport {version};\r\n\r\n// control\r\nexport * from './control/index';\r\n\r\n// core\r\nexport * from './core/index';\r\n\r\n// dom\r\nexport * from './dom/index';\r\n\r\n// geometry\r\nexport * from './geometry/index';\r\n\r\n// geo\r\nexport * from './geo/index';\r\n\r\n// layer\r\nexport * from './layer/index';\r\n\r\n// map\r\nexport * from './map/index';\r\n\r\nimport {freeze} from './core/Util';\r\nObject.freeze = freeze;\r\n""],""names"":[""Util.create"",""Util.extend"",""Util.isArray"",""Util.splitWords"",""Util.falseFn"",""Util.bind"",""Util.stamp"",""Util.formatNum"",""Util.wrapNum"",""Browser.svg"",""style"",""Browser.msPointer"",""DomEvent.preventDefault"",""Browser.pointer"",""touch"",""Browser.edge"",""create"",""Util.trim"",""Browser.ie3d"",""Browser.any3d"",""DomEvent.on"",""DomEvent.off"",""Browser.touch"",""Browser.chrome"",""Browser.android"",""Browser.win"",""Browser.gecko"",""DomUtil.getPosition"",""Util.requestAnimFrame"",""DomUtil.setPosition"",""Util.cancelAnimFrame"",""Util.setOptions"",""DomUtil.TRANSITION"",""Browser.mobileOpera"",""DomUtil.TRANSITION_END"",""DomUtil.addClass"",""DomUtil.remove"",""DomUtil.create"",""DomEvent.getMousePosition"",""DomUtil.get"",""Browser.retina"",""Browser.ielt9"",""Browser.safari"",""DomUtil.getStyle"",""remove"",""DomEvent.isExternalTarget"",""DomEvent.skipped"",""DomUtil.preventOutline"",""Util.indexOf"",""DomUtil.removeClass"",""DomUtil.TRANSFORM"",""DomUtil.setTransform"",""DomEvent.disableClickPropagation"",""DomEvent.disableScrollPropagation"",""DomEvent.stop"",""DomUtil.empty"",""preventOutline"",""DomUtil.hasClass"",""DomUtil.disableImageDrag"",""DomUtil.disableTextSelection"",""DomUtil.getSizedParentNode"",""DomUtil.getScale"",""DomUtil.enableImageDrag"",""DomUtil.enableTextSelection"",""LineUtil._getBitCode"",""LineUtil._getEdgeIntersection"",""point"",""latLng"",""DomUtil.setOpacity"",""LineUtil._sqClosestPointOnSegment"",""LineUtil.isFlat"",""LineUtil.clipSegment"",""LineUtil.simplify"",""LineUtil.pointToSegmentDistance"",""LineUtil._flat"",""PolyUtil.clipPolygon"",""DomUtil.toFront"",""DomUtil.toBack"",""DomEvent.stopPropagation"",""Browser.mobile"",""Util.throttle"",""latLngBounds"",""Browser.android23"",""Util.template"",""Util.emptyImageUrl"",""Browser.androidStock"",""DomEvent.fakeStop"",""canvas"",""Browser.canvas"",""Browser.vml"",""svg"",""DomEvent.getWheelDelta""],""mappings"":""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""}"
4c4a74e9ce0a0994635e8aee36683f6afb4bc02e,4641072,"1.) kcoppock, http://stackoverflow.com/questions/4641072/how-to-set-layout-weight-attribute-dynamically-from-code"
7a1bd5ef5f0e99c75622f942ff7a7776a78d697a,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
095ffd8c5518ddd64d5a9911f4cace517411f539,1343350,        // http://stackoverflow.com/a/1343350/135557
9a9cc30169ef290d8073314152b31c1197560779,3561493,    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
385c9b0399c85b9ce8dfe1bab80429081156a495,1603566,[unix-count2]: http://stackoverflow.com/questions/1603566/count-occurrences-of-a-char-in-plain-text-file
56d161e7100fbaa54b33d47fb06db5ff2ae198c1,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
782416ee5ea61c9f053d5c960146d0ae3c891567,2951193,        # http://stackoverflow.com/questions/2950338/how-can-i-kill-a-linux-process-in-java-with-sigkill-process-destroy-does-sigter/2951193#2951193
2525d3769b1b1cb8a018d9b0a2f3c9b7ca40474f,367626,     * http://stackoverflow.com/questions/367626/how-do-i-fix-the-expression-of-type-list-needs-unchecked-conversion
965bb4f8ff750820ef0d043483f9a3ce10386664,20591067, * See http://stackoverflow.com/a/20591067
03b7dfa88b4bab94bd0d5e7556635f0420534f3b,7048913,"<a href=""http://stackoverflow.com/questions/7048913/django-haystack-search-engine-with-lowest-memory-usage?rq=1"" class=""question-hyperlink"">Django haystack search engine with lowest memory usage?</a>"
dc6082f222a0aee6334bdb61ad1a1ed597555cd9,2940671,# (http://stackoverflow.com/questions/2940671/
7ae63e234909e2934035f4ed766609426f7baeb5,26603875,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///vue-select.js"",""webpack:///webpack/bootstrap c24ae7afd997d885ebcf"",""webpack:///./src/index.js"",""webpack:///./~/core-js/library/modules/_global.js"",""webpack:///./~/core-js/library/modules/_descriptors.js"",""webpack:///./~/core-js/library/modules/_has.js"",""webpack:///./~/core-js/library/modules/_object-dp.js"",""webpack:///./~/core-js/library/modules/_to-iobject.js"",""webpack:///./~/core-js/library/modules/_core.js"",""webpack:///./~/core-js/library/modules/_hide.js"",""webpack:///./~/core-js/library/modules/_wks.js"",""webpack:///./~/core-js/library/modules/_fails.js"",""webpack:///./~/core-js/library/modules/_object-keys.js"",""webpack:///./~/core-js/library/modules/_an-object.js"",""webpack:///./~/core-js/library/modules/_export.js"",""webpack:///./~/core-js/library/modules/_is-object.js"",""webpack:///./~/core-js/library/modules/_property-desc.js"",""webpack:///./~/core-js/library/modules/_uid.js"",""webpack:///./~/core-js/library/modules/_defined.js"",""webpack:///./~/core-js/library/modules/_enum-bug-keys.js"",""webpack:///./~/core-js/library/modules/_iterators.js"",""webpack:///./~/core-js/library/modules/_library.js"",""webpack:///./~/core-js/library/modules/_object-pie.js"",""webpack:///./~/core-js/library/modules/_set-to-string-tag.js"",""webpack:///./~/core-js/library/modules/_shared-key.js"",""webpack:///./~/core-js/library/modules/_shared.js"",""webpack:///./~/core-js/library/modules/_to-integer.js"",""webpack:///./~/core-js/library/modules/_to-primitive.js"",""webpack:///./~/core-js/library/modules/_wks-define.js"",""webpack:///./~/core-js/library/modules/_wks-ext.js"",""webpack:///./src/mixins/ajax.js"",""webpack:///./src/mixins/pointerScroll.js"",""webpack:///./src/mixins/typeAheadPointer.js"",""webpack:///./~/core-js/library/modules/_cof.js"",""webpack:///./~/core-js/library/modules/_dom-create.js"",""webpack:///./~/core-js/library/modules/_ie8-dom-define.js"",""webpack:///./~/core-js/library/modules/_iter-define.js"",""webpack:///./~/core-js/library/modules/_object-create.js"",""webpack:///./~/core-js/library/modules/_object-gopn.js"",""webpack:///./~/core-js/library/modules/_object-gops.js"",""webpack:///./~/core-js/library/modules/_object-keys-internal.js"",""webpack:///./~/core-js/library/modules/_redefine.js"",""webpack:///./~/core-js/library/modules/_to-object.js"",""webpack:///./src/mixins/index.js"",""webpack:///Select.vue"",""webpack:///./~/babel-runtime/core-js/object/define-property.js"",""webpack:///./~/babel-runtime/core-js/object/keys.js"",""webpack:///./~/babel-runtime/core-js/symbol.js"",""webpack:///./~/babel-runtime/core-js/symbol/iterator.js"",""webpack:///./~/babel-runtime/helpers/defineProperty.js"",""webpack:///./~/babel-runtime/helpers/typeof.js"",""webpack:///./~/core-js/library/fn/object/define-property.js"",""webpack:///./~/core-js/library/fn/object/keys.js"",""webpack:///./~/core-js/library/fn/symbol/index.js"",""webpack:///./~/core-js/library/fn/symbol/iterator.js"",""webpack:///./~/core-js/library/modules/_a-function.js"",""webpack:///./~/core-js/library/modules/_add-to-unscopables.js"",""webpack:///./~/core-js/library/modules/_array-includes.js"",""webpack:///./~/core-js/library/modules/_ctx.js"",""webpack:///./~/core-js/library/modules/_enum-keys.js"",""webpack:///./~/core-js/library/modules/_html.js"",""webpack:///./~/core-js/library/modules/_iobject.js"",""webpack:///./~/core-js/library/modules/_is-array.js"",""webpack:///./~/core-js/library/modules/_iter-create.js"",""webpack:///./~/core-js/library/modules/_iter-step.js"",""webpack:///./~/core-js/library/modules/_keyof.js"",""webpack:///./~/core-js/library/modules/_meta.js"",""webpack:///./~/core-js/library/modules/_object-dps.js"",""webpack:///./~/core-js/library/modules/_object-gopd.js"",""webpack:///./~/core-js/library/modules/_object-gopn-ext.js"",""webpack:///./~/core-js/library/modules/_object-gpo.js"",""webpack:///./~/core-js/library/modules/_object-sap.js"",""webpack:///./~/core-js/library/modules/_string-at.js"",""webpack:///./~/core-js/library/modules/_to-index.js"",""webpack:///./~/core-js/library/modules/_to-length.js"",""webpack:///./~/core-js/library/modules/es6.array.iterator.js"",""webpack:///./~/core-js/library/modules/es6.object.define-property.js"",""webpack:///./~/core-js/library/modules/es6.object.keys.js"",""webpack:///./~/core-js/library/modules/es6.string.iterator.js"",""webpack:///./~/core-js/library/modules/es6.symbol.js"",""webpack:///./~/core-js/library/modules/es7.symbol.async-iterator.js"",""webpack:///./~/core-js/library/modules/es7.symbol.observable.js"",""webpack:///./~/core-js/library/modules/web.dom.iterable.js"",""webpack:///./src/components/Select.vue?7e91"",""webpack:///./~/css-loader/lib/css-base.js"",""webpack:///./src/components/Select.vue?058e"",""webpack:///./src/components/Select.vue"",""webpack:///./~/vue-style-loader/addStyles.js"",""webpack:///./src/components/Select.vue?c6fd""],""names"":[""root"",""factory"",""exports"",""module"",""define"",""amd"",""this"",""modules"",""__webpack_require__"",""moduleId"",""installedModules"",""id"",""loaded"",""call"",""m"",""c"",""p"",""_interopRequireDefault"",""obj"",""__esModule"",""default"",""Object"",""defineProperty"",""value"",""mixins"",""VueSelect"",""undefined"",""_Select"",""_Select2"",""_index"",""_index2"",""global"",""window"",""Math"",""self"",""Function"",""__g"",""get"",""a"",""hasOwnProperty"",""it"",""key"",""anObject"",""IE8_DOM_DEFINE"",""toPrimitive"",""dP"",""f"",""O"",""P"",""Attributes"",""e"",""TypeError"",""IObject"",""defined"",""core"",""version"",""__e"",""createDesc"",""object"",""store"",""uid"",""Symbol"",""USE_SYMBOL"",""$exports"",""name"",""exec"",""$keys"",""enumBugKeys"",""keys"",""isObject"",""ctx"",""hide"",""PROTOTYPE"",""$export"",""type"",""source"",""own"",""out"",""IS_FORCED"",""F"",""IS_GLOBAL"",""G"",""IS_STATIC"",""S"",""IS_PROTO"",""IS_BIND"",""B"",""IS_WRAP"",""W"",""expProto"",""target"",""C"",""b"",""arguments"",""length"",""apply"",""virtual"",""R"",""U"",""bitmap"",""enumerable"",""configurable"",""writable"",""px"",""random"",""concat"",""toString"",""split"",""propertyIsEnumerable"",""def"",""has"",""TAG"",""tag"",""stat"",""prototype"",""shared"",""SHARED"",""ceil"",""floor"",""isNaN"",""fn"",""val"",""valueOf"",""LIBRARY"",""wksExt"",""$Symbol"",""charAt"",""props"",""loading"",""Boolean"",""onSearch"",""debounce"",""Number"",""watch"",""search"",""toggleLoading"",""methods"",""toggle"",""typeAheadPointer"",""maybeAdjustScroll"",""pixelsToPointerTop"",""pixelsToPointerBottom"",""viewport"",""top"",""scrollTo"",""bottom"",""pointerHeight"",""i"",""$els"",""dropdownMenu"",""children"",""offsetHeight"",""element"",""scrollTop"",""position"",""data"",""filteredOptions"",""typeAheadUp"",""typeAheadDown"",""typeAheadSelect"",""select"",""taggable"",""clearSearchOnSelect"",""slice"",""document"",""is"",""createElement"",""redefine"",""Iterators"",""$iterCreate"",""setToStringTag"",""getPrototypeOf"",""ITERATOR"",""BUGGY"",""FF_ITERATOR"",""KEYS"",""VALUES"",""returnThis"",""Base"",""NAME"",""Constructor"",""next"",""DEFAULT"",""IS_SET"",""FORCED"",""IteratorPrototype"",""getMethod"",""kind"",""proto"",""DEF_VALUES"",""VALUES_BUG"",""$native"",""$default"",""$entries"",""$anyNative"",""entries"",""values"",""dPs"",""IE_PROTO"",""Empty"",""createDict"",""iframeDocument"",""iframe"",""gt"",""style"",""display"",""appendChild"",""src"",""contentWindow"",""open"",""write"",""close"",""create"",""Properties"",""result"",""hiddenKeys"",""getOwnPropertyNames"",""getOwnPropertySymbols"",""toIObject"",""arrayIndexOf"",""names"",""push"",""_ajax"",""_ajax2"",""_typeAheadPointer"",""_typeAheadPointer2"",""_pointerScroll"",""_pointerScroll2"",""ajax"",""pointer"",""pointerScroll"",""_keys"",""_keys2"",""_defineProperty2"",""_defineProperty3"",""_typeof2"",""_typeof3"",""options"",""Array"",""maxHeight"",""String"",""searchable"",""multiple"",""placeholder"",""transition"",""label"",""getOptionLabel"",""option"",""onChange"",""pushTags"",""createOption"",""newOption"",""resetOnOptionsChange"",""old"",""$set"",""isOptionSelected"",""deselect"",""optionExists"",""onAfterSelect"",""_this"",""ref"",""forEach"",""$remove"",""blur"",""toggleDropdown"",""openIndicator"",""$el"",""focus"",""_this2"",""selected"",""opt"",""onEscape"",""maybeDeleteValue"",""pop"",""_this3"",""exists"",""computed"",""dropdownClasses"",""searchPlaceholder"",""isValueEmpty"",""$options"",""filters"",""filterBy"",""unshift"",""valueAsArray"",""_defineProperty"",""_iterator"",""_iterator2"",""_symbol"",""_symbol2"",""_typeof"",""constructor"",""$Object"",""desc"",""toLength"",""toIndex"",""IS_INCLUDES"",""$this"",""el"",""fromIndex"",""index"",""aFunction"",""that"",""getKeys"",""gOPS"",""pIE"",""getSymbols"",""symbols"",""isEnum"",""documentElement"",""cof"",""isArray"",""arg"",""descriptor"",""done"",""META"",""setDesc"",""isExtensible"",""FREEZE"",""preventExtensions"",""setMeta"",""w"",""fastKey"",""getWeak"",""onFreeze"",""meta"",""NEED"",""KEY"",""defineProperties"",""gOPD"",""getOwnPropertyDescriptor"",""gOPN"",""windowNames"",""getWindowNames"",""toObject"",""ObjectProto"",""fails"",""exp"",""toInteger"",""TO_STRING"",""pos"",""s"",""l"",""charCodeAt"",""max"",""min"",""addToUnscopables"",""step"",""iterated"",""_t"",""_i"",""_k"",""Arguments"",""$at"",""point"",""DESCRIPTORS"",""$fails"",""wks"",""wksDefine"",""keyOf"",""enumKeys"",""_create"",""gOPNExt"",""$GOPD"",""$DP"",""$JSON"",""JSON"",""_stringify"",""stringify"",""HIDDEN"",""TO_PRIMITIVE"",""SymbolRegistry"",""AllSymbols"",""OPSymbols"",""USE_NATIVE"",""QObject"",""setter"",""findChild"",""setSymbolDesc"",""D"",""protoDesc"",""wrap"",""sym"",""isSymbol"",""iterator"",""$defineProperty"",""$defineProperties"",""$create"",""$propertyIsEnumerable"",""E"",""$getOwnPropertyDescriptor"",""$getOwnPropertyNames"",""$getOwnPropertySymbols"",""IS_OP"",""set"",""for"",""keyFor"",""useSetter"",""useSimple"",""replacer"",""$replacer"",""args"",""TO_STRING_TAG"",""collections"",""Collection"",""list"",""item"",""join"",""mediaQuery"",""alreadyImportedModules"",""__vue_script__"",""__vue_template__"",""template"",""addStylesToDom"",""styles"",""domStyle"",""stylesInDom"",""refs"",""j"",""parts"",""addStyle"",""listToStyles"",""newStyles"",""css"",""media"",""sourceMap"",""part"",""insertStyleElement"",""styleElement"",""head"",""getHeadElement"",""lastStyleElementInsertedAtTop"",""styleElementsInsertedAtTop"",""insertAt"",""nextSibling"",""insertBefore"",""firstChild"",""Error"",""removeStyleElement"",""parentNode"",""removeChild"",""idx"",""indexOf"",""splice"",""createStyleElement"",""update"",""remove"",""singleton"",""styleIndex"",""singletonCounter"",""singletonElement"",""applyToSingletonTag"",""bind"",""applyToTag"",""newObj"",""styleSheet"",""cssText"",""replaceText"",""cssNode"",""createTextNode"",""childNodes"",""setAttribute"",""sources"",""btoa"",""unescape"",""encodeURIComponent"",""memoize"",""memo"",""isOldIE"",""test"",""navigator"",""userAgent"",""toLowerCase"",""getElementsByTagName"",""newList"",""mayRemove"",""textStore"",""replacement"",""filter"",""content"",""locals""],""mappings"":""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"",""file"":""vue-select.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""VueSelect\""] = factory();\n\telse\n\t\troot[\""VueSelect\""] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"",""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""VueSelect\""] = factory();\n\telse\n\t\troot[\""VueSelect\""] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \""/\"";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \""__esModule\"", {\n\t  value: true\n\t});\n\texports.mixins = exports.VueSelect = undefined;\n\t\n\tvar _Select = __webpack_require__(85);\n\t\n\tvar _Select2 = _interopRequireDefault(_Select);\n\t\n\tvar _index = __webpack_require__(41);\n\t\n\tvar _index2 = _interopRequireDefault(_index);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = _Select2.default;\n\texports.VueSelect = _Select2.default;\n\texports.mixins = _index2.default;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\tif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// Thank's IE8 for his funny defineProperty\n\tmodule.exports = !__webpack_require__(9)(function(){\n\t  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n\t});\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tmodule.exports = function(it, key){\n\t  return hasOwnProperty.call(it, key);\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar anObject       = __webpack_require__(11)\n\t  , IE8_DOM_DEFINE = __webpack_require__(33)\n\t  , toPrimitive    = __webpack_require__(25)\n\t  , dP             = Object.defineProperty;\n\t\n\texports.f = __webpack_require__(2) ? Object.defineProperty : function defineProperty(O, P, Attributes){\n\t  anObject(O);\n\t  P = toPrimitive(P, true);\n\t  anObject(Attributes);\n\t  if(IE8_DOM_DEFINE)try {\n\t    return dP(O, P, Attributes);\n\t  } catch(e){ /* empty */ }\n\t  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n\t  if('value' in Attributes)O[P] = Attributes.value;\n\t  return O;\n\t};\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// to indexed object, toObject with fallback for non-array-like ES3 strings\n\tvar IObject = __webpack_require__(59)\n\t  , defined = __webpack_require__(16);\n\tmodule.exports = function(it){\n\t  return IObject(defined(it));\n\t};\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\tvar core = module.exports = {version: '2.4.0'};\n\tif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP         = __webpack_require__(4)\n\t  , createDesc = __webpack_require__(14);\n\tmodule.exports = __webpack_require__(2) ? function(object, key, value){\n\t  return dP.f(object, key, createDesc(1, value));\n\t} : function(object, key, value){\n\t  object[key] = value;\n\t  return object;\n\t};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar store      = __webpack_require__(23)('wks')\n\t  , uid        = __webpack_require__(15)\n\t  , Symbol     = __webpack_require__(1).Symbol\n\t  , USE_SYMBOL = typeof Symbol == 'function';\n\t\n\tvar $exports = module.exports = function(name){\n\t  return store[name] || (store[name] =\n\t    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n\t};\n\t\n\t$exports.store = store;\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(exec){\n\t  try {\n\t    return !!exec();\n\t  } catch(e){\n\t    return true;\n\t  }\n\t};\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.14 / 15.2.3.14 Object.keys(O)\r\n\tvar $keys       = __webpack_require__(38)\r\n\t  , enumBugKeys = __webpack_require__(17);\r\n\t\r\n\tmodule.exports = Object.keys || function keys(O){\r\n\t  return $keys(O, enumBugKeys);\r\n\t};\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(13);\n\tmodule.exports = function(it){\n\t  if(!isObject(it))throw TypeError(it + ' is not an object!');\n\t  return it;\n\t};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global    = __webpack_require__(1)\n\t  , core      = __webpack_require__(6)\n\t  , ctx       = __webpack_require__(56)\n\t  , hide      = __webpack_require__(7)\n\t  , PROTOTYPE = 'prototype';\n\t\n\tvar $export = function(type, name, source){\n\t  var IS_FORCED = type & $export.F\n\t    , IS_GLOBAL = type & $export.G\n\t    , IS_STATIC = type & $export.S\n\t    , IS_PROTO  = type & $export.P\n\t    , IS_BIND   = type & $export.B\n\t    , IS_WRAP   = type & $export.W\n\t    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n\t    , expProto  = exports[PROTOTYPE]\n\t    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n\t    , key, own, out;\n\t  if(IS_GLOBAL)source = name;\n\t  for(key in source){\n\t    // contains in native\n\t    own = !IS_FORCED && target && target[key] !== undefined;\n\t    if(own && key in exports)continue;\n\t    // export native or passed\n\t    out = own ? target[key] : source[key];\n\t    // prevent global pollution for namespaces\n\t    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n\t    // bind timers to global for call from export context\n\t    : IS_BIND && own ? ctx(out, global)\n\t    // wrap global constructors for prevent change them in library\n\t    : IS_WRAP && target[key] == out ? (function(C){\n\t      var F = function(a, b, c){\n\t        if(this instanceof C){\n\t          switch(arguments.length){\n\t            case 0: return new C;\n\t            case 1: return new C(a);\n\t            case 2: return new C(a, b);\n\t          } return new C(a, b, c);\n\t        } return C.apply(this, arguments);\n\t      };\n\t      F[PROTOTYPE] = C[PROTOTYPE];\n\t      return F;\n\t    // make static versions for prototype methods\n\t    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n\t    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n\t    if(IS_PROTO){\n\t      (exports.virtual || (exports.virtual = {}))[key] = out;\n\t      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n\t      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n\t    }\n\t  }\n\t};\n\t// type bitmap\n\t$export.F = 1;   // forced\n\t$export.G = 2;   // global\n\t$export.S = 4;   // static\n\t$export.P = 8;   // proto\n\t$export.B = 16;  // bind\n\t$export.W = 32;  // wrap\n\t$export.U = 64;  // safe\n\t$export.R = 128; // real proto method for `library` \n\tmodule.exports = $export;\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(it){\n\t  return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t};\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(bitmap, value){\n\t  return {\n\t    enumerable  : !(bitmap & 1),\n\t    configurable: !(bitmap & 2),\n\t    writable    : !(bitmap & 4),\n\t    value       : value\n\t  };\n\t};\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\tvar id = 0\n\t  , px = Math.random();\n\tmodule.exports = function(key){\n\t  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n\t};\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t// 7.2.1 RequireObjectCoercible(argument)\n\tmodule.exports = function(it){\n\t  if(it == undefined)throw TypeError(\""Can't call method on  \"" + it);\n\t  return it;\n\t};\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t// IE 8- don't enum bug keys\r\n\tmodule.exports = (\r\n\t  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\r\n\t).split(',');\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {};\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\tmodule.exports = true;\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\texports.f = {}.propertyIsEnumerable;\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar def = __webpack_require__(4).f\n\t  , has = __webpack_require__(3)\n\t  , TAG = __webpack_require__(8)('toStringTag');\n\t\n\tmodule.exports = function(it, tag, stat){\n\t  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n\t};\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar shared = __webpack_require__(23)('keys')\r\n\t  , uid    = __webpack_require__(15);\r\n\tmodule.exports = function(key){\r\n\t  return shared[key] || (shared[key] = uid(key));\r\n\t};\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global = __webpack_require__(1)\n\t  , SHARED = '__core-js_shared__'\n\t  , store  = global[SHARED] || (global[SHARED] = {});\n\tmodule.exports = function(key){\n\t  return store[key] || (store[key] = {});\n\t};\n\n/***/ },\n/* 24 */\n/***/ function(module, exports) {\n\n\t// 7.1.4 ToInteger\n\tvar ceil  = Math.ceil\n\t  , floor = Math.floor;\n\tmodule.exports = function(it){\n\t  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n\t};\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.1 ToPrimitive(input [, PreferredType])\n\tvar isObject = __webpack_require__(13);\n\t// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n\t// and the second argument - flag - preferred type is a string\n\tmodule.exports = function(it, S){\n\t  if(!isObject(it))return it;\n\t  var fn, val;\n\t  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  throw TypeError(\""Can't convert object to primitive value\"");\n\t};\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global         = __webpack_require__(1)\r\n\t  , core           = __webpack_require__(6)\r\n\t  , LIBRARY        = __webpack_require__(19)\r\n\t  , wksExt         = __webpack_require__(27)\r\n\t  , defineProperty = __webpack_require__(4).f;\r\n\tmodule.exports = function(name){\r\n\t  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\r\n\t  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\r\n\t};\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\texports.f = __webpack_require__(8);\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\t\""use strict\"";\n\t\n\tmodule.exports = {\n\t\tprops: {\n\t\t\tloading: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\n\t\t\tonSearch: {\n\t\t\t\ttype: Function,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\n\t\t\tdebounce: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 0\n\t\t\t}\n\t\t},\n\t\n\t\twatch: {\n\t\t\tsearch: function search() {\n\t\t\t\tif (this.search.length > 0 && this.onSearch) {\n\t\t\t\t\tthis.onSearch(this.search, this.toggleLoading);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\tmethods: {\n\t\t\ttoggleLoading: function toggleLoading() {\n\t\t\t\tvar toggle = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0];\n\t\n\t\t\t\tif (toggle == null) {\n\t\t\t\t\treturn this.loading = !this.loading;\n\t\t\t\t}\n\t\t\t\treturn this.loading = toggle;\n\t\t\t}\n\t\t}\n\t};\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\t\""use strict\"";\n\t\n\tmodule.exports = {\n\t  watch: {\n\t    typeAheadPointer: function typeAheadPointer() {\n\t      this.maybeAdjustScroll();\n\t    }\n\t  },\n\t\n\t  methods: {\n\t    maybeAdjustScroll: function maybeAdjustScroll() {\n\t      var pixelsToPointerTop = this.pixelsToPointerTop();\n\t      var pixelsToPointerBottom = this.pixelsToPointerBottom();\n\t\n\t      if (pixelsToPointerTop <= this.viewport().top) {\n\t        return this.scrollTo(pixelsToPointerTop);\n\t      } else if (pixelsToPointerBottom >= this.viewport().bottom) {\n\t        return this.scrollTo(this.viewport().top + this.pointerHeight());\n\t      }\n\t    },\n\t    pixelsToPointerTop: function pixelsToPointerTop() {\n\t      var pixelsToPointerTop = 0;\n\t      for (var i = 0; i < this.typeAheadPointer; i++) {\n\t        pixelsToPointerTop += this.$els.dropdownMenu.children[i].offsetHeight;\n\t      }\n\t      return pixelsToPointerTop;\n\t    },\n\t    pixelsToPointerBottom: function pixelsToPointerBottom() {\n\t      return this.pixelsToPointerTop() + this.pointerHeight();\n\t    },\n\t    pointerHeight: function pointerHeight() {\n\t      var element = this.$els.dropdownMenu.children[this.typeAheadPointer];\n\t      return element ? element.offsetHeight : 0;\n\t    },\n\t    viewport: function viewport() {\n\t      return {\n\t        top: this.$els.dropdownMenu.scrollTop,\n\t        bottom: this.$els.dropdownMenu.offsetHeight + this.$els.dropdownMenu.scrollTop\n\t      };\n\t    },\n\t    scrollTo: function scrollTo(position) {\n\t      return this.$els.dropdownMenu.scrollTop = position;\n\t    }\n\t  }\n\t};\n\n/***/ },\n/* 30 */\n/***/ function(module, exports) {\n\n\t\""use strict\"";\n\t\n\tmodule.exports = {\n\t  data: function data() {\n\t    return {\n\t      typeAheadPointer: -1\n\t    };\n\t  },\n\t\n\t\n\t  watch: {\n\t    filteredOptions: function filteredOptions() {\n\t      this.typeAheadPointer = 0;\n\t    }\n\t  },\n\t\n\t  methods: {\n\t    typeAheadUp: function typeAheadUp() {\n\t      if (this.typeAheadPointer > 0) {\n\t        this.typeAheadPointer--;\n\t        if (this.maybeAdjustScroll) {\n\t          this.maybeAdjustScroll();\n\t        }\n\t      }\n\t    },\n\t    typeAheadDown: function typeAheadDown() {\n\t      if (this.typeAheadPointer < this.filteredOptions.length - 1) {\n\t        this.typeAheadPointer++;\n\t        if (this.maybeAdjustScroll) {\n\t          this.maybeAdjustScroll();\n\t        }\n\t      }\n\t    },\n\t    typeAheadSelect: function typeAheadSelect() {\n\t      if (this.filteredOptions[this.typeAheadPointer]) {\n\t        this.select(this.filteredOptions[this.typeAheadPointer]);\n\t      } else if (this.taggable && this.search.length) {\n\t        this.select(this.search);\n\t      }\n\t\n\t      if (this.clearSearchOnSelect) {\n\t        this.search = \""\"";\n\t      }\n\t    }\n\t  }\n\t};\n\n/***/ },\n/* 31 */\n/***/ function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = function(it){\n\t  return toString.call(it).slice(8, -1);\n\t};\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(13)\n\t  , document = __webpack_require__(1).document\n\t  // in old IE typeof document.createElement is 'object'\n\t  , is = isObject(document) && isObject(document.createElement);\n\tmodule.exports = function(it){\n\t  return is ? document.createElement(it) : {};\n\t};\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = !__webpack_require__(2) && !__webpack_require__(9)(function(){\r\n\t  return Object.defineProperty(__webpack_require__(32)('div'), 'a', {get: function(){ return 7; }}).a != 7;\r\n\t});\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar LIBRARY        = __webpack_require__(19)\n\t  , $export        = __webpack_require__(12)\n\t  , redefine       = __webpack_require__(39)\n\t  , hide           = __webpack_require__(7)\n\t  , has            = __webpack_require__(3)\n\t  , Iterators      = __webpack_require__(18)\n\t  , $iterCreate    = __webpack_require__(61)\n\t  , setToStringTag = __webpack_require__(21)\n\t  , getPrototypeOf = __webpack_require__(68)\n\t  , ITERATOR       = __webpack_require__(8)('iterator')\n\t  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n\t  , FF_ITERATOR    = '@@iterator'\n\t  , KEYS           = 'keys'\n\t  , VALUES         = 'values';\n\t\n\tvar returnThis = function(){ return this; };\n\t\n\tmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n\t  $iterCreate(Constructor, NAME, next);\n\t  var getMethod = function(kind){\n\t    if(!BUGGY && kind in proto)return proto[kind];\n\t    switch(kind){\n\t      case KEYS: return function keys(){ return new Constructor(this, kind); };\n\t      case VALUES: return function values(){ return new Constructor(this, kind); };\n\t    } return function entries(){ return new Constructor(this, kind); };\n\t  };\n\t  var TAG        = NAME + ' Iterator'\n\t    , DEF_VALUES = DEFAULT == VALUES\n\t    , VALUES_BUG = false\n\t    , proto      = Base.prototype\n\t    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n\t    , $default   = $native || getMethod(DEFAULT)\n\t    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n\t    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n\t    , methods, key, IteratorPrototype;\n\t  // Fix native\n\t  if($anyNative){\n\t    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n\t    if(IteratorPrototype !== Object.prototype){\n\t      // Set @@toStringTag to native iterators\n\t      setToStringTag(IteratorPrototype, TAG, true);\n\t      // fix for some old engines\n\t      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n\t    }\n\t  }\n\t  // fix Array#{values, @@iterator}.name in V8 / FF\n\t  if(DEF_VALUES && $native && $native.name !== VALUES){\n\t    VALUES_BUG = true;\n\t    $default = function values(){ return $native.call(this); };\n\t  }\n\t  // Define iterator\n\t  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n\t    hide(proto, ITERATOR, $default);\n\t  }\n\t  // Plug for library\n\t  Iterators[NAME] = $default;\n\t  Iterators[TAG]  = returnThis;\n\t  if(DEFAULT){\n\t    methods = {\n\t      values:  DEF_VALUES ? $default : getMethod(VALUES),\n\t      keys:    IS_SET     ? $default : getMethod(KEYS),\n\t      entries: $entries\n\t    };\n\t    if(FORCED)for(key in methods){\n\t      if(!(key in proto))redefine(proto, key, methods[key]);\n\t    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n\t  }\n\t  return methods;\n\t};\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\n\tvar anObject    = __webpack_require__(11)\r\n\t  , dPs         = __webpack_require__(65)\r\n\t  , enumBugKeys = __webpack_require__(17)\r\n\t  , IE_PROTO    = __webpack_require__(22)('IE_PROTO')\r\n\t  , Empty       = function(){ /* empty */ }\r\n\t  , PROTOTYPE   = 'prototype';\r\n\t\r\n\t// Create object with fake `null` prototype: use iframe Object with cleared prototype\r\n\tvar createDict = function(){\r\n\t  // Thrash, waste and sodomy: IE GC bug\r\n\t  var iframe = __webpack_require__(32)('iframe')\r\n\t    , i      = enumBugKeys.length\r\n\t    , gt     = '>'\r\n\t    , iframeDocument;\r\n\t  iframe.style.display = 'none';\r\n\t  __webpack_require__(58).appendChild(iframe);\r\n\t  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\r\n\t  // createDict = iframe.contentWindow.Object;\r\n\t  // html.removeChild(iframe);\r\n\t  iframeDocument = iframe.contentWindow.document;\r\n\t  iframeDocument.open();\r\n\t  iframeDocument.write('<script>document.F=Object</script' + gt);\r\n\t  iframeDocument.close();\r\n\t  createDict = iframeDocument.F;\r\n\t  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\r\n\t  return createDict();\r\n\t};\r\n\t\r\n\tmodule.exports = Object.create || function create(O, Properties){\r\n\t  var result;\r\n\t  if(O !== null){\r\n\t    Empty[PROTOTYPE] = anObject(O);\r\n\t    result = new Empty;\r\n\t    Empty[PROTOTYPE] = null;\r\n\t    // add \""__proto__\"" for Object.getPrototypeOf polyfill\r\n\t    result[IE_PROTO] = O;\r\n\t  } else result = createDict();\r\n\t  return Properties === undefined ? result : dPs(result, Properties);\r\n\t};\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\r\n\tvar $keys      = __webpack_require__(38)\r\n\t  , hiddenKeys = __webpack_require__(17).concat('length', 'prototype');\r\n\t\r\n\texports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\r\n\t  return $keys(O, hiddenKeys);\r\n\t};\n\n/***/ },\n/* 37 */\n/***/ function(module, exports) {\n\n\texports.f = Object.getOwnPropertySymbols;\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar has          = __webpack_require__(3)\r\n\t  , toIObject    = __webpack_require__(5)\r\n\t  , arrayIndexOf = __webpack_require__(55)(false)\r\n\t  , IE_PROTO     = __webpack_require__(22)('IE_PROTO');\r\n\t\r\n\tmodule.exports = function(object, names){\r\n\t  var O      = toIObject(object)\r\n\t    , i      = 0\r\n\t    , result = []\r\n\t    , key;\r\n\t  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\r\n\t  // Don't enum bug & hidden keys\r\n\t  while(names.length > i)if(has(O, key = names[i++])){\r\n\t    ~arrayIndexOf(result, key) || result.push(key);\r\n\t  }\r\n\t  return result;\r\n\t};\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(7);\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.13 ToObject(argument)\n\tvar defined = __webpack_require__(16);\n\tmodule.exports = function(it){\n\t  return Object(defined(it));\n\t};\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \""__esModule\"", {\n\t  value: true\n\t});\n\t\n\tvar _ajax = __webpack_require__(28);\n\t\n\tvar _ajax2 = _interopRequireDefault(_ajax);\n\t\n\tvar _typeAheadPointer = __webpack_require__(30);\n\t\n\tvar _typeAheadPointer2 = _interopRequireDefault(_typeAheadPointer);\n\t\n\tvar _pointerScroll = __webpack_require__(29);\n\t\n\tvar _pointerScroll2 = _interopRequireDefault(_pointerScroll);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = { ajax: _ajax2.default, pointer: _typeAheadPointer2.default, pointerScroll: _pointerScroll2.default };\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \""__esModule\"", {\n\t\tvalue: true\n\t});\n\t\n\tvar _keys = __webpack_require__(44);\n\t\n\tvar _keys2 = _interopRequireDefault(_keys);\n\t\n\tvar _defineProperty2 = __webpack_require__(47);\n\t\n\tvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\t\n\tvar _typeof2 = __webpack_require__(48);\n\t\n\tvar _typeof3 = _interopRequireDefault(_typeof2);\n\t\n\tvar _pointerScroll = __webpack_require__(29);\n\t\n\tvar _pointerScroll2 = _interopRequireDefault(_pointerScroll);\n\t\n\tvar _typeAheadPointer = __webpack_require__(30);\n\t\n\tvar _typeAheadPointer2 = _interopRequireDefault(_typeAheadPointer);\n\t\n\tvar _ajax = __webpack_require__(28);\n\t\n\tvar _ajax2 = _interopRequireDefault(_ajax);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = {\n\t\tmixins: [_pointerScroll2.default, _typeAheadPointer2.default, _ajax2.default],\n\t\n\t\tprops: {\n\t\t\tvalue: {\n\t\t\t\tdefault: null\n\t\t\t},\n\t\n\t\t\toptions: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault: function _default() {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\tmaxHeight: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '400px'\n\t\t\t},\n\t\n\t\t\tsearchable: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\n\t\t\tmultiple: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\n\t\t\tplaceholder: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\t\n\t\t\ttransition: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'expand'\n\t\t\t},\n\t\n\t\t\tclearSearchOnSelect: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\t\n\t\t\tlabel: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'label'\n\t\t\t},\n\t\n\t\t\tgetOptionLabel: {\n\t\t\t\ttype: Function,\n\t\t\t\tdefault: function _default(option) {\n\t\t\t\t\tif ((typeof option === 'undefined' ? 'undefined' : (0, _typeof3.default)(option)) === 'object') {\n\t\t\t\t\t\tif (this.label && option[this.label]) {\n\t\t\t\t\t\t\treturn option[this.label];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn option;\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\tonChange: Function,\n\t\n\t\t\ttaggable: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\n\t\t\tpushTags: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\n\t\t\tcreateOption: {\n\t\t\t\ttype: Function,\n\t\t\t\tdefault: function _default(newOption) {\n\t\t\t\t\tif ((0, _typeof3.default)(this.options[0]) === 'object') {\n\t\t\t\t\t\treturn (0, _defineProperty3.default)({}, this.label, newOption);\n\t\t\t\t\t}\n\t\t\t\t\treturn newOption;\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\tresetOnOptionsChange: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t}\n\t\t},\n\t\n\t\tdata: function data() {\n\t\t\treturn {\n\t\t\t\tsearch: '',\n\t\t\t\topen: false\n\t\t\t};\n\t\t},\n\t\n\t\n\t\twatch: {\n\t\t\tvalue: function value(val, old) {\n\t\t\t\tif (this.multiple) {\n\t\t\t\t\tthis.onChange ? this.onChange(val) : null;\n\t\t\t\t} else {\n\t\t\t\t\tthis.onChange && val !== old ? this.onChange(val) : null;\n\t\t\t\t}\n\t\t\t},\n\t\t\toptions: function options() {\n\t\t\t\tif (!this.taggable && this.resetOnOptionsChange) {\n\t\t\t\t\tthis.$set('value', this.multiple ? [] : null);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmultiple: function multiple(val) {\n\t\t\t\tthis.$set('value', val ? [] : null);\n\t\t\t}\n\t\t},\n\t\n\t\tmethods: {\n\t\t\tselect: function select(option) {\n\t\t\t\tif (this.isOptionSelected(option)) {\n\t\t\t\t\tthis.deselect(option);\n\t\t\t\t} else {\n\t\t\t\t\tif (this.taggable && !this.optionExists(option)) {\n\t\t\t\t\t\toption = this.createOption(option);\n\t\n\t\t\t\t\t\tif (this.pushTags) {\n\t\t\t\t\t\t\tthis.options.push(option);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.multiple) {\n\t\t\t\t\t\tif (!this.value) {\n\t\t\t\t\t\t\tthis.$set('value', [option]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.value.push(option);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.value = option;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tthis.onAfterSelect(option);\n\t\t\t},\n\t\t\tdeselect: function deselect(option) {\n\t\t\t\tvar _this = this;\n\t\n\t\t\t\tif (this.multiple) {\n\t\t\t\t\tvar ref = -1;\n\t\t\t\t\tthis.value.forEach(function (val) {\n\t\t\t\t\t\tif (val === option || (typeof val === 'undefined' ? 'undefined' : (0, _typeof3.default)(val)) === 'object' && val[_this.label] === option[_this.label]) {\n\t\t\t\t\t\t\tref = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tthis.value.$remove(ref);\n\t\t\t\t} else {\n\t\t\t\t\tthis.value = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonAfterSelect: function onAfterSelect(option) {\n\t\t\t\tif (!this.multiple) {\n\t\t\t\t\tthis.open = !this.open;\n\t\t\t\t\tthis.$els.search.blur();\n\t\t\t\t}\n\t\n\t\t\t\tif (this.clearSearchOnSelect) {\n\t\t\t\t\tthis.search = '';\n\t\t\t\t}\n\t\t\t},\n\t\t\ttoggleDropdown: function toggleDropdown(e) {\n\t\t\t\tif (e.target === this.$els.openIndicator || e.target === this.$els.search || e.target === this.$els.toggle || e.target === this.$el) {\n\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\tthis.$els.search.blur();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.open = true;\n\t\t\t\t\t\tthis.$els.search.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tisOptionSelected: function isOptionSelected(option) {\n\t\t\t\tvar _this2 = this;\n\t\n\t\t\t\tif (this.multiple && this.value) {\n\t\t\t\t\tvar selected = false;\n\t\t\t\t\tthis.value.forEach(function (opt) {\n\t\t\t\t\t\tif ((typeof opt === 'undefined' ? 'undefined' : (0, _typeof3.default)(opt)) === 'object' && opt[_this2.label] === option[_this2.label]) {\n\t\t\t\t\t\t\tselected = true;\n\t\t\t\t\t\t} else if (opt === option) {\n\t\t\t\t\t\t\tselected = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn selected;\n\t\t\t\t}\n\t\n\t\t\t\treturn this.value === option;\n\t\t\t},\n\t\t\tonEscape: function onEscape() {\n\t\t\t\tif (!this.search.length) {\n\t\t\t\t\tthis.$els.search.blur();\n\t\t\t\t} else {\n\t\t\t\t\tthis.search = '';\n\t\t\t\t}\n\t\t\t},\n\t\t\tmaybeDeleteValue: function maybeDeleteValue() {\n\t\t\t\tif (!this.$els.search.value.length && this.value) {\n\t\t\t\t\treturn this.multiple ? this.value.pop() : this.$set('value', null);\n\t\t\t\t}\n\t\t\t},\n\t\t\toptionExists: function optionExists(option) {\n\t\t\t\tvar _this3 = this;\n\t\n\t\t\t\tvar exists = false;\n\t\n\t\t\t\tthis.options.forEach(function (opt) {\n\t\t\t\t\tif ((typeof opt === 'undefined' ? 'undefined' : (0, _typeof3.default)(opt)) === 'object' && opt[_this3.label] === option) {\n\t\t\t\t\t\texists = true;\n\t\t\t\t\t} else if (opt === option) {\n\t\t\t\t\t\texists = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\treturn exists;\n\t\t\t}\n\t\t},\n\t\n\t\tcomputed: {\n\t\t\tdropdownClasses: function dropdownClasses() {\n\t\t\t\treturn {\n\t\t\t\t\topen: this.open,\n\t\t\t\t\tsearchable: this.searchable,\n\t\t\t\t\tloading: this.loading\n\t\t\t\t};\n\t\t\t},\n\t\t\tsearchPlaceholder: function searchPlaceholder() {\n\t\t\t\tif (this.isValueEmpty && this.placeholder) {\n\t\t\t\t\treturn this.placeholder;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfilteredOptions: function filteredOptions() {\n\t\t\t\tvar options = this.$options.filters.filterBy(this.options, this.search);\n\t\t\t\tif (this.taggable && this.search.length && !this.optionExists(this.search)) {\n\t\t\t\t\toptions.unshift(this.search);\n\t\t\t\t}\n\t\t\t\treturn options;\n\t\t\t},\n\t\t\tisValueEmpty: function isValueEmpty() {\n\t\t\t\tif (this.value) {\n\t\t\t\t\tif ((0, _typeof3.default)(this.value) === 'object') {\n\t\t\t\t\t\treturn !(0, _keys2.default)(this.value).length;\n\t\t\t\t\t}\n\t\t\t\t\treturn !this.value.length;\n\t\t\t\t}\n\t\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tvalueAsArray: function valueAsArray() {\n\t\t\t\tif (this.multiple) {\n\t\t\t\t\treturn this.value;\n\t\t\t\t} else if (this.value) {\n\t\t\t\t\treturn [this.value];\n\t\t\t\t}\n\t\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\t\n\t};\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \""default\"": __webpack_require__(49), __esModule: true };\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \""default\"": __webpack_require__(50), __esModule: true };\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \""default\"": __webpack_require__(51), __esModule: true };\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \""default\"": __webpack_require__(52), __esModule: true };\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\""use strict\"";\n\t\n\texports.__esModule = true;\n\t\n\tvar _defineProperty = __webpack_require__(43);\n\t\n\tvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function (obj, key, value) {\n\t  if (key in obj) {\n\t    (0, _defineProperty2.default)(obj, key, {\n\t      value: value,\n\t      enumerable: true,\n\t      configurable: true,\n\t      writable: true\n\t    });\n\t  } else {\n\t    obj[key] = value;\n\t  }\n\t\n\t  return obj;\n\t};\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\""use strict\"";\n\t\n\texports.__esModule = true;\n\t\n\tvar _iterator = __webpack_require__(46);\n\t\n\tvar _iterator2 = _interopRequireDefault(_iterator);\n\t\n\tvar _symbol = __webpack_require__(45);\n\t\n\tvar _symbol2 = _interopRequireDefault(_symbol);\n\t\n\tvar _typeof = typeof _symbol2.default === \""function\"" && typeof _iterator2.default === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \""function\"" && obj.constructor === _symbol2.default ? \""symbol\"" : typeof obj; };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = typeof _symbol2.default === \""function\"" && _typeof(_iterator2.default) === \""symbol\"" ? function (obj) {\n\t  return typeof obj === \""undefined\"" ? \""undefined\"" : _typeof(obj);\n\t} : function (obj) {\n\t  return obj && typeof _symbol2.default === \""function\"" && obj.constructor === _symbol2.default ? \""symbol\"" : typeof obj === \""undefined\"" ? \""undefined\"" : _typeof(obj);\n\t};\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(74);\n\tvar $Object = __webpack_require__(6).Object;\n\tmodule.exports = function defineProperty(it, key, desc){\n\t  return $Object.defineProperty(it, key, desc);\n\t};\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(75);\n\tmodule.exports = __webpack_require__(6).Object.keys;\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(78);\n\t__webpack_require__(76);\n\t__webpack_require__(79);\n\t__webpack_require__(80);\n\tmodule.exports = __webpack_require__(6).Symbol;\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(77);\n\t__webpack_require__(81);\n\tmodule.exports = __webpack_require__(27).f('iterator');\n\n/***/ },\n/* 53 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(it){\n\t  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n\t  return it;\n\t};\n\n/***/ },\n/* 54 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(){ /* empty */ };\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// false -> Array#indexOf\n\t// true  -> Array#includes\n\tvar toIObject = __webpack_require__(5)\n\t  , toLength  = __webpack_require__(72)\n\t  , toIndex   = __webpack_require__(71);\n\tmodule.exports = function(IS_INCLUDES){\n\t  return function($this, el, fromIndex){\n\t    var O      = toIObject($this)\n\t      , length = toLength(O.length)\n\t      , index  = toIndex(fromIndex, length)\n\t      , value;\n\t    // Array#includes uses SameValueZero equality algorithm\n\t    if(IS_INCLUDES && el != el)while(length > index){\n\t      value = O[index++];\n\t      if(value != value)return true;\n\t    // Array#toIndex ignores holes, Array#includes - not\n\t    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n\t      if(O[index] === el)return IS_INCLUDES || index || 0;\n\t    } return !IS_INCLUDES && -1;\n\t  };\n\t};\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// optional / simple context binding\n\tvar aFunction = __webpack_require__(53);\n\tmodule.exports = function(fn, that, length){\n\t  aFunction(fn);\n\t  if(that === undefined)return fn;\n\t  switch(length){\n\t    case 1: return function(a){\n\t      return fn.call(that, a);\n\t    };\n\t    case 2: return function(a, b){\n\t      return fn.call(that, a, b);\n\t    };\n\t    case 3: return function(a, b, c){\n\t      return fn.call(that, a, b, c);\n\t    };\n\t  }\n\t  return function(/* ...args */){\n\t    return fn.apply(that, arguments);\n\t  };\n\t};\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// all enumerable object keys, includes symbols\n\tvar getKeys = __webpack_require__(10)\n\t  , gOPS    = __webpack_require__(37)\n\t  , pIE     = __webpack_require__(20);\n\tmodule.exports = function(it){\n\t  var result     = getKeys(it)\n\t    , getSymbols = gOPS.f;\n\t  if(getSymbols){\n\t    var symbols = getSymbols(it)\n\t      , isEnum  = pIE.f\n\t      , i       = 0\n\t      , key;\n\t    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n\t  } return result;\n\t};\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1).document && document.documentElement;\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\tvar cof = __webpack_require__(31);\n\tmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n\t  return cof(it) == 'String' ? it.split('') : Object(it);\n\t};\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.2.2 IsArray(argument)\n\tvar cof = __webpack_require__(31);\n\tmodule.exports = Array.isArray || function isArray(arg){\n\t  return cof(arg) == 'Array';\n\t};\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar create         = __webpack_require__(35)\n\t  , descriptor     = __webpack_require__(14)\n\t  , setToStringTag = __webpack_require__(21)\n\t  , IteratorPrototype = {};\n\t\n\t// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n\t__webpack_require__(7)(IteratorPrototype, __webpack_require__(8)('iterator'), function(){ return this; });\n\t\n\tmodule.exports = function(Constructor, NAME, next){\n\t  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n\t  setToStringTag(Constructor, NAME + ' Iterator');\n\t};\n\n/***/ },\n/* 62 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(done, value){\n\t  return {value: value, done: !!done};\n\t};\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar getKeys   = __webpack_require__(10)\n\t  , toIObject = __webpack_require__(5);\n\tmodule.exports = function(object, el){\n\t  var O      = toIObject(object)\n\t    , keys   = getKeys(O)\n\t    , length = keys.length\n\t    , index  = 0\n\t    , key;\n\t  while(length > index)if(O[key = keys[index++]] === el)return key;\n\t};\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar META     = __webpack_require__(15)('meta')\n\t  , isObject = __webpack_require__(13)\n\t  , has      = __webpack_require__(3)\n\t  , setDesc  = __webpack_require__(4).f\n\t  , id       = 0;\n\tvar isExtensible = Object.isExtensible || function(){\n\t  return true;\n\t};\n\tvar FREEZE = !__webpack_require__(9)(function(){\n\t  return isExtensible(Object.preventExtensions({}));\n\t});\n\tvar setMeta = function(it){\n\t  setDesc(it, META, {value: {\n\t    i: 'O' + ++id, // object ID\n\t    w: {}          // weak collections IDs\n\t  }});\n\t};\n\tvar fastKey = function(it, create){\n\t  // return primitive with prefix\n\t  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n\t  if(!has(it, META)){\n\t    // can't set metadata to uncaught frozen object\n\t    if(!isExtensible(it))return 'F';\n\t    // not necessary to add metadata\n\t    if(!create)return 'E';\n\t    // add missing metadata\n\t    setMeta(it);\n\t  // return object ID\n\t  } return it[META].i;\n\t};\n\tvar getWeak = function(it, create){\n\t  if(!has(it, META)){\n\t    // can't set metadata to uncaught frozen object\n\t    if(!isExtensible(it))return true;\n\t    // not necessary to add metadata\n\t    if(!create)return false;\n\t    // add missing metadata\n\t    setMeta(it);\n\t  // return hash weak collections IDs\n\t  } return it[META].w;\n\t};\n\t// add metadata on freeze-family methods calling\n\tvar onFreeze = function(it){\n\t  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n\t  return it;\n\t};\n\tvar meta = module.exports = {\n\t  KEY:      META,\n\t  NEED:     false,\n\t  fastKey:  fastKey,\n\t  getWeak:  getWeak,\n\t  onFreeze: onFreeze\n\t};\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP       = __webpack_require__(4)\r\n\t  , anObject = __webpack_require__(11)\r\n\t  , getKeys  = __webpack_require__(10);\r\n\t\r\n\tmodule.exports = __webpack_require__(2) ? Object.defineProperties : function defineProperties(O, Properties){\r\n\t  anObject(O);\r\n\t  var keys   = getKeys(Properties)\r\n\t    , length = keys.length\r\n\t    , i = 0\r\n\t    , P;\r\n\t  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\r\n\t  return O;\r\n\t};\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar pIE            = __webpack_require__(20)\r\n\t  , createDesc     = __webpack_require__(14)\r\n\t  , toIObject      = __webpack_require__(5)\r\n\t  , toPrimitive    = __webpack_require__(25)\r\n\t  , has            = __webpack_require__(3)\r\n\t  , IE8_DOM_DEFINE = __webpack_require__(33)\r\n\t  , gOPD           = Object.getOwnPropertyDescriptor;\r\n\t\r\n\texports.f = __webpack_require__(2) ? gOPD : function getOwnPropertyDescriptor(O, P){\r\n\t  O = toIObject(O);\r\n\t  P = toPrimitive(P, true);\r\n\t  if(IE8_DOM_DEFINE)try {\r\n\t    return gOPD(O, P);\r\n\t  } catch(e){ /* empty */ }\r\n\t  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\r\n\t};\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\n\tvar toIObject = __webpack_require__(5)\n\t  , gOPN      = __webpack_require__(36).f\n\t  , toString  = {}.toString;\n\t\n\tvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n\t  ? Object.getOwnPropertyNames(window) : [];\n\t\n\tvar getWindowNames = function(it){\n\t  try {\n\t    return gOPN(it);\n\t  } catch(e){\n\t    return windowNames.slice();\n\t  }\n\t};\n\t\n\tmodule.exports.f = function getOwnPropertyNames(it){\n\t  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n\t};\n\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\r\n\tvar has         = __webpack_require__(3)\r\n\t  , toObject    = __webpack_require__(40)\r\n\t  , IE_PROTO    = __webpack_require__(22)('IE_PROTO')\r\n\t  , ObjectProto = Object.prototype;\r\n\t\r\n\tmodule.exports = Object.getPrototypeOf || function(O){\r\n\t  O = toObject(O);\r\n\t  if(has(O, IE_PROTO))return O[IE_PROTO];\r\n\t  if(typeof O.constructor == 'function' && O instanceof O.constructor){\r\n\t    return O.constructor.prototype;\r\n\t  } return O instanceof Object ? ObjectProto : null;\r\n\t};\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// most Object methods by ES6 should accept primitives\n\tvar $export = __webpack_require__(12)\n\t  , core    = __webpack_require__(6)\n\t  , fails   = __webpack_require__(9);\n\tmodule.exports = function(KEY, exec){\n\t  var fn  = (core.Object || {})[KEY] || Object[KEY]\n\t    , exp = {};\n\t  exp[KEY] = exec(fn);\n\t  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n\t};\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar toInteger = __webpack_require__(24)\n\t  , defined   = __webpack_require__(16);\n\t// true  -> String#at\n\t// false -> String#codePointAt\n\tmodule.exports = function(TO_STRING){\n\t  return function(that, pos){\n\t    var s = String(defined(that))\n\t      , i = toInteger(pos)\n\t      , l = s.length\n\t      , a, b;\n\t    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n\t    a = s.charCodeAt(i);\n\t    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n\t      ? TO_STRING ? s.charAt(i) : a\n\t      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n\t  };\n\t};\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar toInteger = __webpack_require__(24)\n\t  , max       = Math.max\n\t  , min       = Math.min;\n\tmodule.exports = function(index, length){\n\t  index = toInteger(index);\n\t  return index < 0 ? max(index + length, 0) : min(index, length);\n\t};\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.15 ToLength\n\tvar toInteger = __webpack_require__(24)\n\t  , min       = Math.min;\n\tmodule.exports = function(it){\n\t  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n\t};\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar addToUnscopables = __webpack_require__(54)\n\t  , step             = __webpack_require__(62)\n\t  , Iterators        = __webpack_require__(18)\n\t  , toIObject        = __webpack_require__(5);\n\t\n\t// 22.1.3.4 Array.prototype.entries()\n\t// 22.1.3.13 Array.prototype.keys()\n\t// 22.1.3.29 Array.prototype.values()\n\t// 22.1.3.30 Array.prototype[@@iterator]()\n\tmodule.exports = __webpack_require__(34)(Array, 'Array', function(iterated, kind){\n\t  this._t = toIObject(iterated); // target\n\t  this._i = 0;                   // next index\n\t  this._k = kind;                // kind\n\t// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n\t}, function(){\n\t  var O     = this._t\n\t    , kind  = this._k\n\t    , index = this._i++;\n\t  if(!O || index >= O.length){\n\t    this._t = undefined;\n\t    return step(1);\n\t  }\n\t  if(kind == 'keys'  )return step(0, index);\n\t  if(kind == 'values')return step(0, O[index]);\n\t  return step(0, [index, O[index]]);\n\t}, 'values');\n\t\n\t// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n\tIterators.Arguments = Iterators.Array;\n\t\n\taddToUnscopables('keys');\n\taddToUnscopables('values');\n\taddToUnscopables('entries');\n\n/***/ },\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar $export = __webpack_require__(12);\r\n\t// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\r\n\t$export($export.S + $export.F * !__webpack_require__(2), 'Object', {defineProperty: __webpack_require__(4).f});\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.14 Object.keys(O)\n\tvar toObject = __webpack_require__(40)\n\t  , $keys    = __webpack_require__(10);\n\t\n\t__webpack_require__(69)('keys', function(){\n\t  return function keys(it){\n\t    return $keys(toObject(it));\n\t  };\n\t});\n\n/***/ },\n/* 76 */\n/***/ function(module, exports) {\n\n\n\n/***/ },\n/* 77 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar $at  = __webpack_require__(70)(true);\n\t\n\t// 21.1.3.27 String.prototype[@@iterator]()\n\t__webpack_require__(34)(String, 'String', function(iterated){\n\t  this._t = String(iterated); // target\n\t  this._i = 0;                // next index\n\t// 21.1.5.2.1 %StringIteratorPrototype%.next()\n\t}, function(){\n\t  var O     = this._t\n\t    , index = this._i\n\t    , point;\n\t  if(index >= O.length)return {value: undefined, done: true};\n\t  point = $at(O, index);\n\t  this._i += point.length;\n\t  return {value: point, done: false};\n\t});\n\n/***/ },\n/* 78 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t// ECMAScript 6 symbols shim\n\tvar global         = __webpack_require__(1)\n\t  , has            = __webpack_require__(3)\n\t  , DESCRIPTORS    = __webpack_require__(2)\n\t  , $export        = __webpack_require__(12)\n\t  , redefine       = __webpack_require__(39)\n\t  , META           = __webpack_require__(64).KEY\n\t  , $fails         = __webpack_require__(9)\n\t  , shared         = __webpack_require__(23)\n\t  , setToStringTag = __webpack_require__(21)\n\t  , uid            = __webpack_require__(15)\n\t  , wks            = __webpack_require__(8)\n\t  , wksExt         = __webpack_require__(27)\n\t  , wksDefine      = __webpack_require__(26)\n\t  , keyOf          = __webpack_require__(63)\n\t  , enumKeys       = __webpack_require__(57)\n\t  , isArray        = __webpack_require__(60)\n\t  , anObject       = __webpack_require__(11)\n\t  , toIObject      = __webpack_require__(5)\n\t  , toPrimitive    = __webpack_require__(25)\n\t  , createDesc     = __webpack_require__(14)\n\t  , _create        = __webpack_require__(35)\n\t  , gOPNExt        = __webpack_require__(67)\n\t  , $GOPD          = __webpack_require__(66)\n\t  , $DP            = __webpack_require__(4)\n\t  , $keys          = __webpack_require__(10)\n\t  , gOPD           = $GOPD.f\n\t  , dP             = $DP.f\n\t  , gOPN           = gOPNExt.f\n\t  , $Symbol        = global.Symbol\n\t  , $JSON          = global.JSON\n\t  , _stringify     = $JSON && $JSON.stringify\n\t  , PROTOTYPE      = 'prototype'\n\t  , HIDDEN         = wks('_hidden')\n\t  , TO_PRIMITIVE   = wks('toPrimitive')\n\t  , isEnum         = {}.propertyIsEnumerable\n\t  , SymbolRegistry = shared('symbol-registry')\n\t  , AllSymbols     = shared('symbols')\n\t  , OPSymbols      = shared('op-symbols')\n\t  , ObjectProto    = Object[PROTOTYPE]\n\t  , USE_NATIVE     = typeof $Symbol == 'function'\n\t  , QObject        = global.QObject;\n\t// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\n\tvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\t\n\t// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\n\tvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n\t  return _create(dP({}, 'a', {\n\t    get: function(){ return dP(this, 'a', {value: 7}).a; }\n\t  })).a != 7;\n\t}) ? function(it, key, D){\n\t  var protoDesc = gOPD(ObjectProto, key);\n\t  if(protoDesc)delete ObjectProto[key];\n\t  dP(it, key, D);\n\t  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n\t} : dP;\n\t\n\tvar wrap = function(tag){\n\t  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n\t  sym._k = tag;\n\t  return sym;\n\t};\n\t\n\tvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n\t  return typeof it == 'symbol';\n\t} : function(it){\n\t  return it instanceof $Symbol;\n\t};\n\t\n\tvar $defineProperty = function defineProperty(it, key, D){\n\t  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n\t  anObject(it);\n\t  key = toPrimitive(key, true);\n\t  anObject(D);\n\t  if(has(AllSymbols, key)){\n\t    if(!D.enumerable){\n\t      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n\t      it[HIDDEN][key] = true;\n\t    } else {\n\t      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n\t      D = _create(D, {enumerable: createDesc(0, false)});\n\t    } return setSymbolDesc(it, key, D);\n\t  } return dP(it, key, D);\n\t};\n\tvar $defineProperties = function defineProperties(it, P){\n\t  anObject(it);\n\t  var keys = enumKeys(P = toIObject(P))\n\t    , i    = 0\n\t    , l = keys.length\n\t    , key;\n\t  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n\t  return it;\n\t};\n\tvar $create = function create(it, P){\n\t  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n\t};\n\tvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n\t  var E = isEnum.call(this, key = toPrimitive(key, true));\n\t  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n\t  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n\t};\n\tvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n\t  it  = toIObject(it);\n\t  key = toPrimitive(key, true);\n\t  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n\t  var D = gOPD(it, key);\n\t  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n\t  return D;\n\t};\n\tvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n\t  var names  = gOPN(toIObject(it))\n\t    , result = []\n\t    , i      = 0\n\t    , key;\n\t  while(names.length > i){\n\t    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n\t  } return result;\n\t};\n\tvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n\t  var IS_OP  = it === ObjectProto\n\t    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\n\t    , result = []\n\t    , i      = 0\n\t    , key;\n\t  while(names.length > i){\n\t    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n\t  } return result;\n\t};\n\t\n\t// 19.4.1.1 Symbol([description])\n\tif(!USE_NATIVE){\n\t  $Symbol = function Symbol(){\n\t    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n\t    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n\t    var $set = function(value){\n\t      if(this === ObjectProto)$set.call(OPSymbols, value);\n\t      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n\t      setSymbolDesc(this, tag, createDesc(1, value));\n\t    };\n\t    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n\t    return wrap(tag);\n\t  };\n\t  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n\t    return this._k;\n\t  });\n\t\n\t  $GOPD.f = $getOwnPropertyDescriptor;\n\t  $DP.f   = $defineProperty;\n\t  __webpack_require__(36).f = gOPNExt.f = $getOwnPropertyNames;\n\t  __webpack_require__(20).f  = $propertyIsEnumerable;\n\t  __webpack_require__(37).f = $getOwnPropertySymbols;\n\t\n\t  if(DESCRIPTORS && !__webpack_require__(19)){\n\t    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n\t  }\n\t\n\t  wksExt.f = function(name){\n\t    return wrap(wks(name));\n\t  }\n\t}\n\t\n\t$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\t\n\tfor(var symbols = (\n\t  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n\t  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n\t).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\t\n\tfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\t\n\t$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n\t  // 19.4.2.1 Symbol.for(key)\n\t  'for': function(key){\n\t    return has(SymbolRegistry, key += '')\n\t      ? SymbolRegistry[key]\n\t      : SymbolRegistry[key] = $Symbol(key);\n\t  },\n\t  // 19.4.2.5 Symbol.keyFor(sym)\n\t  keyFor: function keyFor(key){\n\t    if(isSymbol(key))return keyOf(SymbolRegistry, key);\n\t    throw TypeError(key + ' is not a symbol!');\n\t  },\n\t  useSetter: function(){ setter = true; },\n\t  useSimple: function(){ setter = false; }\n\t});\n\t\n\t$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n\t  // 19.1.2.2 Object.create(O [, Properties])\n\t  create: $create,\n\t  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n\t  defineProperty: $defineProperty,\n\t  // 19.1.2.3 Object.defineProperties(O, Properties)\n\t  defineProperties: $defineProperties,\n\t  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n\t  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n\t  // 19.1.2.7 Object.getOwnPropertyNames(O)\n\t  getOwnPropertyNames: $getOwnPropertyNames,\n\t  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n\t  getOwnPropertySymbols: $getOwnPropertySymbols\n\t});\n\t\n\t// 24.3.2 JSON.stringify(value [, replacer [, space]])\n\t$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n\t  var S = $Symbol();\n\t  // MS Edge converts symbol values to JSON as {}\n\t  // WebKit converts symbol values to JSON as null\n\t  // V8 throws on boxed symbols\n\t  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n\t})), 'JSON', {\n\t  stringify: function stringify(it){\n\t    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n\t    var args = [it]\n\t      , i    = 1\n\t      , replacer, $replacer;\n\t    while(arguments.length > i)args.push(arguments[i++]);\n\t    replacer = args[1];\n\t    if(typeof replacer == 'function')$replacer = replacer;\n\t    if($replacer || !isArray(replacer))replacer = function(key, value){\n\t      if($replacer)value = $replacer.call(this, key, value);\n\t      if(!isSymbol(value))return value;\n\t    };\n\t    args[1] = replacer;\n\t    return _stringify.apply($JSON, args);\n\t  }\n\t});\n\t\n\t// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n\t$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(7)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n\t// 19.4.3.5 Symbol.prototype[@@toStringTag]\n\tsetToStringTag($Symbol, 'Symbol');\n\t// 20.2.1.9 Math[@@toStringTag]\n\tsetToStringTag(Math, 'Math', true);\n\t// 24.3.3 JSON[@@toStringTag]\n\tsetToStringTag(global.JSON, 'JSON', true);\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(26)('asyncIterator');\n\n/***/ },\n/* 80 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(26)('observable');\n\n/***/ },\n/* 81 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(73);\n\tvar global        = __webpack_require__(1)\n\t  , hide          = __webpack_require__(7)\n\t  , Iterators     = __webpack_require__(18)\n\t  , TO_STRING_TAG = __webpack_require__(8)('toStringTag');\n\t\n\tfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n\t  var NAME       = collections[i]\n\t    , Collection = global[NAME]\n\t    , proto      = Collection && Collection.prototype;\n\t  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n\t  Iterators[NAME] = Iterators.Array;\n\t}\n\n/***/ },\n/* 82 */\n/***/ function(module, exports, __webpack_require__) {\n\n\texports = module.exports = __webpack_require__(83)();\n\t// imports\n\t\n\t\n\t// module\n\texports.push([module.id, \"".v-select{position:relative}.v-select .open-indicator{position:absolute;bottom:6px;right:10px;display:inline-block;cursor:pointer;pointer-events:all;-webkit-transition:all .15s cubic-bezier(1,-.115,.975,.855);transition:all .15s cubic-bezier(1,-.115,.975,.855);-webkit-transition-timing-function:cubic-bezier(1,-.115,.975,.855);transition-timing-function:cubic-bezier(1,-.115,.975,.855);opacity:1;-webkit-transition:opacity .1s;transition:opacity .1s}.v-select.loading .open-indicator{opacity:0}.v-select .open-indicator:before{border-color:rgba(60,60,60,.5);border-style:solid;border-width:.25em .25em 0 0;content:'';display:inline-block;height:10px;width:10px;vertical-align:top;-webkit-transform:rotate(133deg);transform:rotate(133deg);-webkit-transition:all .15s cubic-bezier(1,-.115,.975,.855);transition:all .15s cubic-bezier(1,-.115,.975,.855);-webkit-transition-timing-function:cubic-bezier(1,-.115,.975,.855);transition-timing-function:cubic-bezier(1,-.115,.975,.855)}.v-select.open .open-indicator{bottom:1px}.v-select.open .open-indicator:before{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.v-select .dropdown-toggle{display:block;padding:0;background:none;border:1px solid rgba(60,60,60,.26);border-radius:4px;white-space:normal}.v-select.searchable .dropdown-toggle{cursor:text}.v-select.open .dropdown-toggle{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.v-select>.dropdown-menu{margin:0;width:100%;overflow-y:scroll;border-top:none;border-top-left-radius:0;border-top-right-radius:0}.v-select .selected-tag{color:#333;background-color:#f0f0f0;border:1px solid #ccc;border-radius:4px;height:26px;margin:4px 1px 0 3px;padding:0 .25em;float:left;line-height:1.7em}.v-select .selected-tag .close{float:none;margin-right:0;font-size:20px}.v-select input[type=search],.v-select input[type=search]:focus{display:inline-block;border:none;outline:none;margin:0;padding:0 .5em;width:10em;max-width:100%;background:none;position:relative;box-shadow:none;float:left;clear:none}.v-select input[type=search]:disabled,.v-select li a{cursor:pointer}.v-select .active a{background:rgba(50,50,50,.1);color:#333}.v-select .highlight a,.v-select li:hover>a{background:#f0f0f0;color:#333}.v-select .spinner{opacity:0;position:absolute;top:5px;right:10px;font-size:5px;text-indent:-9999em;overflow:hidden;border-top:.9em solid hsla(0,0%,39%,.1);border-right:.9em solid hsla(0,0%,39%,.1);border-bottom:.9em solid hsla(0,0%,39%,.1);border-left:.9em solid rgba(60,60,60,.45);-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:vSelectSpinner 1.1s infinite linear;animation:vSelectSpinner 1.1s infinite linear;-webkit-transition:opacity .1s;transition:opacity .1s}.v-select.loading .spinner{opacity:1}.v-select .spinner,.v-select .spinner:after{border-radius:50%;width:5em;height:5em}@-webkit-keyframes vSelectSpinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes vSelectSpinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}\"", \""\""]);\n\t\n\t// exports\n\n\n/***/ },\n/* 83 */\n/***/ function(module, exports) {\n\n\t/*\r\n\t\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\t\tAuthor Tobias Koppers @sokra\r\n\t*/\r\n\t// css base code, injected by the css-loader\r\n\tmodule.exports = function() {\r\n\t\tvar list = [];\r\n\t\r\n\t\t// return the list of modules as css string\r\n\t\tlist.toString = function toString() {\r\n\t\t\tvar result = [];\r\n\t\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\t\tvar item = this[i];\r\n\t\t\t\tif(item[2]) {\r\n\t\t\t\t\tresult.push(\""@media \"" + item[2] + \""{\"" + item[1] + \""}\"");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresult.push(item[1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result.join(\""\"");\r\n\t\t};\r\n\t\r\n\t\t// import a list of modules into the list\r\n\t\tlist.i = function(modules, mediaQuery) {\r\n\t\t\tif(typeof modules === \""string\"")\r\n\t\t\t\tmodules = [[null, modules, \""\""]];\r\n\t\t\tvar alreadyImportedModules = {};\r\n\t\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\t\tvar id = this[i][0];\r\n\t\t\t\tif(typeof id === \""number\"")\r\n\t\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t\t}\r\n\t\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\t\tvar item = modules[i];\r\n\t\t\t\t// skip already imported module\r\n\t\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t\t//  when a module is imported multiple times with different media queries.\r\n\t\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\t\tif(typeof item[0] !== \""number\"" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\t\titem[2] = \""(\"" + item[2] + \"") and (\"" + mediaQuery + \"")\"";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn list;\r\n\t};\r\n\n\n/***/ },\n/* 84 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"" <div class=\\\""dropdown v-select\\\"" :class=dropdownClasses> <div v-el:toggle @mousedown.prevent=toggleDropdown class=\\\""dropdown-toggle clearfix\\\"" type=button> <span class=form-control v-if=\\\""!searchable && isValueEmpty\\\""> {{ placeholder }} </span> <span class=selected-tag v-for=\\\""option in valueAsArray\\\"" track-by=$index> {{ getOptionLabel(option) }} <button v-if=multiple @click=select(option) type=button class=close> <span aria-hidden=true>&times;</span> </button> </span> <input v-el:search :debounce=debounce v-model=search v-show=searchable @keydown.delete=maybeDeleteValue @keyup.esc=onEscape @keydown.up.prevent=typeAheadUp @keydown.down.prevent=typeAheadDown @keyup.enter.prevent=typeAheadSelect @blur=\\\""open = false\\\"" @focus=\\\""open = true\\\"" type=search class=form-control :placeholder=searchPlaceholder :style=\\\""{ width: isValueEmpty ? '100%' : 'auto' }\\\""> <i v-el:open-indicator role=presentation class=open-indicator></i> <slot name=spinner> <div class=spinner v-show=\\\""onSearch && loading\\\"">Loading...</div> </slot> </div> <ul v-el:dropdown-menu v-show=open :transition=transition class=dropdown-menu :style=\\\""{ 'max-height': maxHeight }\\\""> <li v-for=\\\""option in filteredOptions\\\"" track-by=$index :class=\\\""{ active: isOptionSelected(option), highlight: $index === typeAheadPointer }\\\"" @mouseover=\\\""typeAheadPointer = $index\\\""> <a @mousedown.prevent=select(option)> {{ getOptionLabel(option) }} </a> </li> <li transition=fade v-if=!filteredOptions.length class=divider></li> <li transition=fade v-if=!filteredOptions.length class=text-center> <slot name=no-options>Sorry, no matching options.</slot> </li> </ul> </div> \"";\n\n/***/ },\n/* 85 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __vue_script__, __vue_template__\n\t__webpack_require__(87)\n\t__vue_script__ = __webpack_require__(42)\n\t__vue_template__ = __webpack_require__(84)\n\tmodule.exports = __vue_script__ || {}\n\tif (module.exports.__esModule) module.exports = module.exports.default\n\tif (__vue_template__) {\n\t(typeof module.exports === \""function\"" ? (module.exports.options || (module.exports.options = {})) : module.exports).template = __vue_template__\n\t}\n\n\n/***/ },\n/* 86 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*\n\t\tMIT License http://www.opensource.org/licenses/mit-license.php\n\t\tAuthor Tobias Koppers @sokra\n\t*/\n\tvar stylesInDom = {},\n\t\tmemoize = function(fn) {\n\t\t\tvar memo;\n\t\t\treturn function () {\n\t\t\t\tif (typeof memo === \""undefined\"") memo = fn.apply(this, arguments);\n\t\t\t\treturn memo;\n\t\t\t};\n\t\t},\n\t\tisOldIE = memoize(function() {\n\t\t\treturn /msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase());\n\t\t}),\n\t\tgetHeadElement = memoize(function () {\n\t\t\treturn document.head || document.getElementsByTagName(\""head\"")[0];\n\t\t}),\n\t\tsingletonElement = null,\n\t\tsingletonCounter = 0,\n\t\tstyleElementsInsertedAtTop = [];\n\t\n\tmodule.exports = function(list, options) {\n\t\tif(false) {\n\t\t\tif(typeof document !== \""object\"") throw new Error(\""The style-loader cannot be used in a non-browser environment\"");\n\t\t}\n\t\n\t\toptions = options || {};\n\t\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t\t// tags it will allow on a page\n\t\tif (typeof options.singleton === \""undefined\"") options.singleton = isOldIE();\n\t\n\t\t// By default, add <style> tags to the bottom of <head>.\n\t\tif (typeof options.insertAt === \""undefined\"") options.insertAt = \""bottom\"";\n\t\n\t\tvar styles = listToStyles(list);\n\t\taddStylesToDom(styles, options);\n\t\n\t\treturn function update(newList) {\n\t\t\tvar mayRemove = [];\n\t\t\tfor(var i = 0; i < styles.length; i++) {\n\t\t\t\tvar item = styles[i];\n\t\t\t\tvar domStyle = stylesInDom[item.id];\n\t\t\t\tdomStyle.refs--;\n\t\t\t\tmayRemove.push(domStyle);\n\t\t\t}\n\t\t\tif(newList) {\n\t\t\t\tvar newStyles = listToStyles(newList);\n\t\t\t\taddStylesToDom(newStyles, options);\n\t\t\t}\n\t\t\tfor(var i = 0; i < mayRemove.length; i++) {\n\t\t\t\tvar domStyle = mayRemove[i];\n\t\t\t\tif(domStyle.refs === 0) {\n\t\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++)\n\t\t\t\t\t\tdomStyle.parts[j]();\n\t\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\t\n\tfunction addStylesToDom(styles, options) {\n\t\tfor(var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\t\t\tif(domStyle) {\n\t\t\t\tdomStyle.refs++;\n\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t\t}\n\t\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar parts = [];\n\t\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t\t}\n\t\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction listToStyles(list) {\n\t\tvar styles = [];\n\t\tvar newStyles = {};\n\t\tfor(var i = 0; i < list.length; i++) {\n\t\t\tvar item = list[i];\n\t\t\tvar id = item[0];\n\t\t\tvar css = item[1];\n\t\t\tvar media = item[2];\n\t\t\tvar sourceMap = item[3];\n\t\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\t\t\tif(!newStyles[id])\n\t\t\t\tstyles.push(newStyles[id] = {id: id, parts: [part]});\n\t\t\telse\n\t\t\t\tnewStyles[id].parts.push(part);\n\t\t}\n\t\treturn styles;\n\t}\n\t\n\tfunction insertStyleElement(options, styleElement) {\n\t\tvar head = getHeadElement();\n\t\tvar lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\n\t\tif (options.insertAt === \""top\"") {\n\t\t\tif(!lastStyleElementInsertedAtTop) {\n\t\t\t\thead.insertBefore(styleElement, head.firstChild);\n\t\t\t} else if(lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\t\thead.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\n\t\t\t} else {\n\t\t\t\thead.appendChild(styleElement);\n\t\t\t}\n\t\t\tstyleElementsInsertedAtTop.push(styleElement);\n\t\t} else if (options.insertAt === \""bottom\"") {\n\t\t\thead.appendChild(styleElement);\n\t\t} else {\n\t\t\tthrow new Error(\""Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\"");\n\t\t}\n\t}\n\t\n\tfunction removeStyleElement(styleElement) {\n\t\tstyleElement.parentNode.removeChild(styleElement);\n\t\tvar idx = styleElementsInsertedAtTop.indexOf(styleElement);\n\t\tif(idx >= 0) {\n\t\t\tstyleElementsInsertedAtTop.splice(idx, 1);\n\t\t}\n\t}\n\t\n\tfunction createStyleElement(options) {\n\t\tvar styleElement = document.createElement(\""style\"");\n\t\tstyleElement.type = \""text/css\"";\n\t\tinsertStyleElement(options, styleElement);\n\t\treturn styleElement;\n\t}\n\t\n\tfunction addStyle(obj, options) {\n\t\tvar styleElement, update, remove;\n\t\n\t\tif (options.singleton) {\n\t\t\tvar styleIndex = singletonCounter++;\n\t\t\tstyleElement = singletonElement || (singletonElement = createStyleElement(options));\n\t\t\tupdate = applyToSingletonTag.bind(null, styleElement, styleIndex, false);\n\t\t\tremove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);\n\t\t} else {\n\t\t\tstyleElement = createStyleElement(options);\n\t\t\tupdate = applyToTag.bind(null, styleElement);\n\t\t\tremove = function() {\n\t\t\t\tremoveStyleElement(styleElement);\n\t\t\t};\n\t\t}\n\t\n\t\tupdate(obj);\n\t\n\t\treturn function updateStyle(newObj) {\n\t\t\tif(newObj) {\n\t\t\t\tif(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)\n\t\t\t\t\treturn;\n\t\t\t\tupdate(obj = newObj);\n\t\t\t} else {\n\t\t\t\tremove();\n\t\t\t}\n\t\t};\n\t}\n\t\n\tvar replaceText = (function () {\n\t\tvar textStore = [];\n\t\n\t\treturn function (index, replacement) {\n\t\t\ttextStore[index] = replacement;\n\t\t\treturn textStore.filter(Boolean).join('\\n');\n\t\t};\n\t})();\n\t\n\tfunction applyToSingletonTag(styleElement, index, remove, obj) {\n\t\tvar css = remove ? \""\"" : obj.css;\n\t\n\t\tif (styleElement.styleSheet) {\n\t\t\tstyleElement.styleSheet.cssText = replaceText(index, css);\n\t\t} else {\n\t\t\tvar cssNode = document.createTextNode(css);\n\t\t\tvar childNodes = styleElement.childNodes;\n\t\t\tif (childNodes[index]) styleElement.removeChild(childNodes[index]);\n\t\t\tif (childNodes.length) {\n\t\t\t\tstyleElement.insertBefore(cssNode, childNodes[index]);\n\t\t\t} else {\n\t\t\t\tstyleElement.appendChild(cssNode);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction applyToTag(styleElement, obj) {\n\t\tvar css = obj.css;\n\t\tvar media = obj.media;\n\t\tvar sourceMap = obj.sourceMap;\n\t\n\t\tif (media) {\n\t\t\tstyleElement.setAttribute(\""media\"", media);\n\t\t}\n\t\n\t\tif (sourceMap) {\n\t\t\t// https://developer.chrome.com/devtools/docs/javascript-debugging\n\t\t\t// this makes source maps inside style tags work properly in Chrome\n\t\t\tcss += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */';\n\t\t\t// http://stackoverflow.com/a/26603875\n\t\t\tcss += \""\\n/*# sourceMappingURL=data:application/json;base64,\"" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \"" */\"";\n\t\t}\n\t\n\t\tif (styleElement.styleSheet) {\n\t\t\tstyleElement.styleSheet.cssText = css;\n\t\t} else {\n\t\t\twhile(styleElement.firstChild) {\n\t\t\t\tstyleElement.removeChild(styleElement.firstChild);\n\t\t\t}\n\t\t\tstyleElement.appendChild(document.createTextNode(css));\n\t\t}\n\t}\n\n\n/***/ },\n/* 87 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// style-loader: Adds some css to the DOM by adding a <style> tag\n\t\n\t// load the styles\n\tvar content = __webpack_require__(82);\n\tif(typeof content === 'string') content = [[module.id, content, '']];\n\t// add the styles to the DOM\n\tvar update = __webpack_require__(86)(content, {});\n\tif(content.locals) module.exports = content.locals;\n\t// Hot Module Replacement\n\tif(false) {\n\t\t// When the styles change, update the <style> tags\n\t\tif(!content.locals) {\n\t\t\tmodule.hot.accept(\""!!./../../node_modules/css-loader/index.js!./../../node_modules/vue-loader/lib/style-rewriter.js!./../../node_modules/vue-loader/lib/selector.js?type=style&index=0!./Select.vue\"", function() {\n\t\t\t\tvar newContent = require(\""!!./../../node_modules/css-loader/index.js!./../../node_modules/vue-loader/lib/style-rewriter.js!./../../node_modules/vue-loader/lib/selector.js?type=style&index=0!./Select.vue\"");\n\t\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\t\tupdate(newContent);\n\t\t\t});\n\t\t}\n\t\t// When the module is disposed, remove the <style> tags\n\t\tmodule.hot.dispose(function() { update(); });\n\t}\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** vue-select.js\n **/"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""/\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap c24ae7afd997d885ebcf\n **/"",""import VueSelect from './components/Select.vue'\nimport mixins from './mixins/index'\n\nexport default VueSelect\nexport { VueSelect, mixins }\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/"",""// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_global.js\n ** module id = 1\n ** module chunks = 0\n **/"",""// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_descriptors.js\n ** module id = 2\n ** module chunks = 0\n **/"",""var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_has.js\n ** module id = 3\n ** module chunks = 0\n **/"",""var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-dp.js\n ** module id = 4\n ** module chunks = 0\n **/"",""// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_to-iobject.js\n ** module id = 5\n ** module chunks = 0\n **/"",""var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_core.js\n ** module id = 6\n ** module chunks = 0\n **/"",""var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_hide.js\n ** module id = 7\n ** module chunks = 0\n **/"",""var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_wks.js\n ** module id = 8\n ** module chunks = 0\n **/"",""module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_fails.js\n ** module id = 9\n ** module chunks = 0\n **/"",""// 19.1.2.14 / 15.2.3.14 Object.keys(O)\r\nvar $keys       = require('./_object-keys-internal')\r\n  , enumBugKeys = require('./_enum-bug-keys');\r\n\r\nmodule.exports = Object.keys || function keys(O){\r\n  return $keys(O, enumBugKeys);\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-keys.js\n ** module id = 10\n ** module chunks = 0\n **/"",""var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_an-object.js\n ** module id = 11\n ** module chunks = 0\n **/"",""var global    = require('./_global')\n  , core      = require('./_core')\n  , ctx       = require('./_ctx')\n  , hide      = require('./_hide')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_export.js\n ** module id = 12\n ** module chunks = 0\n **/"",""module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_is-object.js\n ** module id = 13\n ** module chunks = 0\n **/"",""module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_property-desc.js\n ** module id = 14\n ** module chunks = 0\n **/"",""var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_uid.js\n ** module id = 15\n ** module chunks = 0\n **/"",""// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\""Can't call method on  \"" + it);\n  return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_defined.js\n ** module id = 16\n ** module chunks = 0\n **/"",""// IE 8- don't enum bug keys\r\nmodule.exports = (\r\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\r\n).split(',');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_enum-bug-keys.js\n ** module id = 17\n ** module chunks = 0\n **/"",""module.exports = {};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_iterators.js\n ** module id = 18\n ** module chunks = 0\n **/"",""module.exports = true;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_library.js\n ** module id = 19\n ** module chunks = 0\n **/"",""exports.f = {}.propertyIsEnumerable;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-pie.js\n ** module id = 20\n ** module chunks = 0\n **/"",""var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_set-to-string-tag.js\n ** module id = 21\n ** module chunks = 0\n **/"",""var shared = require('./_shared')('keys')\r\n  , uid    = require('./_uid');\r\nmodule.exports = function(key){\r\n  return shared[key] || (shared[key] = uid(key));\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_shared-key.js\n ** module id = 22\n ** module chunks = 0\n **/"",""var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_shared.js\n ** module id = 23\n ** module chunks = 0\n **/"",""// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_to-integer.js\n ** module id = 24\n ** module chunks = 0\n **/"",""// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\""Can't convert object to primitive value\"");\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_to-primitive.js\n ** module id = 25\n ** module chunks = 0\n **/"",""var global         = require('./_global')\r\n  , core           = require('./_core')\r\n  , LIBRARY        = require('./_library')\r\n  , wksExt         = require('./_wks-ext')\r\n  , defineProperty = require('./_object-dp').f;\r\nmodule.exports = function(name){\r\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\r\n  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_wks-define.js\n ** module id = 26\n ** module chunks = 0\n **/"",""exports.f = require('./_wks');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_wks-ext.js\n ** module id = 27\n ** module chunks = 0\n **/"",""module.exports = {\n\tprops: {\n\t\t/**\n\t\t * Toggles the adding of a 'loading' class to the main\n\t\t * .v-select wrapper. Useful to control UI state when\n\t\t * results are being processed through AJAX.\n\t\t */\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\n\t\t/**\n\t\t * Accept a callback function that will be\n\t\t * run when the search text changes.\n\t\t *\n\t\t * loading() accepts a boolean value, and can\n\t\t * be used to toggle a loading class from\n\t\t * the onSearch callback.\n\t\t *\n\t\t * @param {search}  String          Current search text\n\t\t * @param {loading} Function(bool)  Toggle loading class\n\t\t */\n\t\tonSearch: {\n\t\t\ttype: Function,\n\t\t\tdefault: false\n\t\t},\n\n\t\t/**\n\t\t * The number of milliseconds to wait before\n\t\t * invoking this.onSearch(). Used to prevent\n\t\t * sending an AJAX request until input is complete.\n\t\t */\n\t\tdebounce: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t}\n\t},\n\n\twatch: {\n\t\t/**\n\t\t * If a callback & search text has been provided,\n\t\t * invoke the onSearch callback.\n\t\t */\n\t\tsearch() {\n\t\t\tif (this.search.length > 0 && this.onSearch) {\n\t\t\t\tthis.onSearch(this.search, this.toggleLoading)\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Toggle this.loading. Optionally pass a boolean\n\t\t * value. If no value is provided, this.loading\n\t\t * will be set to the opposite of it's current value.\n\t\t * @param toggle Boolean\n\t\t * @returns {*}\n\t\t */\n\t\ttoggleLoading(toggle = null) {\n\t\t\tif (toggle == null) {\n\t\t\t\treturn this.loading = !this.loading\n\t\t\t}\n\t\t\treturn this.loading = toggle\n\t\t}\n\t}\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mixins/ajax.js\n **/"",""module.exports = {\n  watch: {\n    typeAheadPointer() {\n      this.maybeAdjustScroll()\n    }\n  },\n\n  methods: {\n    /**\n     * Adjust the scroll position of the dropdown list\n     * if the current pointer is outside of the\n     * overflow bounds.\n     * @returns {*}\n     */\n    maybeAdjustScroll() {\n      let pixelsToPointerTop = this.pixelsToPointerTop()\n      let pixelsToPointerBottom = this.pixelsToPointerBottom()\n\n      if ( pixelsToPointerTop <= this.viewport().top) {\n        return this.scrollTo( pixelsToPointerTop )\n      } else if (pixelsToPointerBottom >= this.viewport().bottom) {\n        return this.scrollTo( this.viewport().top + this.pointerHeight() )\n      }\n    },\n\n    /**\n     * The distance in pixels from the top of the dropdown\n     * list to the top of the current pointer element.\n     * @returns {number}\n     */\n    pixelsToPointerTop() {\n      let pixelsToPointerTop = 0\n      for (let i = 0; i < this.typeAheadPointer; i++) {\n        pixelsToPointerTop += this.$els.dropdownMenu.children[i].offsetHeight\n      }\n      return pixelsToPointerTop\n    },\n\n    /**\n     * The distance in pixels from the top of the dropdown\n     * list to the bottom of the current pointer element.\n     * @returns {*}\n     */\n    pixelsToPointerBottom() {\n      return this.pixelsToPointerTop() + this.pointerHeight()\n    },\n\n    /**\n     * The offsetHeight of the current pointer element.\n     * @returns {number}\n     */\n    pointerHeight() {\n      let element = this.$els.dropdownMenu.children[this.typeAheadPointer]\n      return element ? element.offsetHeight : 0\n    },\n\n    /**\n     * The currently viewable portion of the dropdownMenu.\n     * @returns {{top: (string|*|number), bottom: *}}\n     */\n    viewport() {\n      return {\n        top: this.$els.dropdownMenu.scrollTop,\n        bottom: this.$els.dropdownMenu.offsetHeight + this.$els.dropdownMenu.scrollTop\n      }\n    },\n\n    /**\n     * Scroll the dropdownMenu to a given position.\n     * @param position\n     * @returns {*}\n     */\n    scrollTo(position) {\n      return this.$els.dropdownMenu.scrollTop = position\n    },\n  }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mixins/pointerScroll.js\n **/"",""module.exports = {\n  data() {\n    return {\n      typeAheadPointer: -1\n    }\n  },\n\n  watch: {\n    filteredOptions() {\n      this.typeAheadPointer = 0\n    }\n  },\n\n  methods: {\n    /**\n     * Move the typeAheadPointer visually up the list by\n     * subtracting the current index by one.\n     * @return {void}\n     */\n    typeAheadUp() {\n      if (this.typeAheadPointer > 0) {\n        this.typeAheadPointer--\n        if( this.maybeAdjustScroll ) {\n          this.maybeAdjustScroll()\n        }\n      }\n    },\n\n    /**\n     * Move the typeAheadPointer visually down the list by\n     * adding the current index by one.\n     * @return {void}\n     */\n    typeAheadDown() {\n      if (this.typeAheadPointer < this.filteredOptions.length - 1) {\n        this.typeAheadPointer++\n        if( this.maybeAdjustScroll ) {\n          this.maybeAdjustScroll()\n        }\n      }\n    },\n\n    /**\n     * Select the option at the current typeAheadPointer position.\n     * Optionally clear the search input on selection.\n     * @return {void}\n     */\n    typeAheadSelect() {\n      if( this.filteredOptions[ this.typeAheadPointer ] ) {\n        this.select( this.filteredOptions[ this.typeAheadPointer ] );\n      } else if (this.taggable && this.search.length){\n        this.select(this.search)\n      }\n\n      if( this.clearSearchOnSelect ) {\n        this.search = \""\"";\n      }\n    },\n  }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mixins/typeAheadPointer.js\n **/"",""var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_cof.js\n ** module id = 31\n ** module chunks = 0\n **/"",""var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_dom-create.js\n ** module id = 32\n ** module chunks = 0\n **/"",""module.exports = !require('./_descriptors') && !require('./_fails')(function(){\r\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\r\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_ie8-dom-define.js\n ** module id = 33\n ** module chunks = 0\n **/"",""'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_iter-define.js\n ** module id = 34\n ** module chunks = 0\n **/"",""// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\nvar anObject    = require('./_an-object')\r\n  , dPs         = require('./_object-dps')\r\n  , enumBugKeys = require('./_enum-bug-keys')\r\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\r\n  , Empty       = function(){ /* empty */ }\r\n  , PROTOTYPE   = 'prototype';\r\n\r\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\r\nvar createDict = function(){\r\n  // Thrash, waste and sodomy: IE GC bug\r\n  var iframe = require('./_dom-create')('iframe')\r\n    , i      = enumBugKeys.length\r\n    , gt     = '>'\r\n    , iframeDocument;\r\n  iframe.style.display = 'none';\r\n  require('./_html').appendChild(iframe);\r\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\r\n  // createDict = iframe.contentWindow.Object;\r\n  // html.removeChild(iframe);\r\n  iframeDocument = iframe.contentWindow.document;\r\n  iframeDocument.open();\r\n  iframeDocument.write('<script>document.F=Object</script' + gt);\r\n  iframeDocument.close();\r\n  createDict = iframeDocument.F;\r\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\r\n  return createDict();\r\n};\r\n\r\nmodule.exports = Object.create || function create(O, Properties){\r\n  var result;\r\n  if(O !== null){\r\n    Empty[PROTOTYPE] = anObject(O);\r\n    result = new Empty;\r\n    Empty[PROTOTYPE] = null;\r\n    // add \""__proto__\"" for Object.getPrototypeOf polyfill\r\n    result[IE_PROTO] = O;\r\n  } else result = createDict();\r\n  return Properties === undefined ? result : dPs(result, Properties);\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-create.js\n ** module id = 35\n ** module chunks = 0\n **/"",""// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\r\nvar $keys      = require('./_object-keys-internal')\r\n  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\r\n\r\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\r\n  return $keys(O, hiddenKeys);\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-gopn.js\n ** module id = 36\n ** module chunks = 0\n **/"",""exports.f = Object.getOwnPropertySymbols;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-gops.js\n ** module id = 37\n ** module chunks = 0\n **/"",""var has          = require('./_has')\r\n  , toIObject    = require('./_to-iobject')\r\n  , arrayIndexOf = require('./_array-includes')(false)\r\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\r\n\r\nmodule.exports = function(object, names){\r\n  var O      = toIObject(object)\r\n    , i      = 0\r\n    , result = []\r\n    , key;\r\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\r\n  // Don't enum bug & hidden keys\r\n  while(names.length > i)if(has(O, key = names[i++])){\r\n    ~arrayIndexOf(result, key) || result.push(key);\r\n  }\r\n  return result;\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-keys-internal.js\n ** module id = 38\n ** module chunks = 0\n **/"",""module.exports = require('./_hide');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_redefine.js\n ** module id = 39\n ** module chunks = 0\n **/"",""// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_to-object.js\n ** module id = 40\n ** module chunks = 0\n **/"",""import ajax from './ajax'\nimport pointer from './typeAheadPointer'\nimport pointerScroll from './pointerScroll'\n\nexport default { ajax, pointer, pointerScroll }\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/mixins/index.js\n **/"",""<style>\n\t.v-select {\n\t\tposition: relative;\n\t}\n\n\t.v-select .open-indicator {\n\t\tposition: absolute;\n\t\tbottom: 6px;\n\t\tright: 10px;\n\t\tdisplay: inline-block;\n\t\tcursor: pointer;\n\t\tpointer-events: all;\n\t\ttransition: all 150ms cubic-bezier(1.000, -0.115, 0.975, 0.855);\n\t\ttransition-timing-function: cubic-bezier(1.000, -0.115, 0.975, 0.855);\n\t\topacity: 1;\n\t\ttransition: opacity .1s;\n\t}\n\n\t.v-select.loading .open-indicator {\n\t\topacity: 0;\n\t}\n\n\t.v-select .open-indicator:before {\n\t\tborder-color: rgba(60, 60, 60, .5);\n\t\tborder-style: solid;\n\t\tborder-width: 0.25em 0.25em 0 0;\n\t\tcontent: '';\n\t\tdisplay: inline-block;\n\t\theight: 10px;\n\t\twidth: 10px;\n\t\tvertical-align: top;\n\t\ttransform: rotate(133deg);\n\t\ttransition: all 150ms cubic-bezier(1.000, -0.115, 0.975, 0.855);\n\t\ttransition-timing-function: cubic-bezier(1.000, -0.115, 0.975, 0.855);\n\t}\n\n\t.v-select.open .open-indicator {\n\t\tbottom: 1px;\n\t}\n\n\t.v-select.open .open-indicator:before {\n\t\ttransform: rotate(315deg);\n\t}\n\n\t.v-select .dropdown-toggle {\n\t\tdisplay: block;\n\t\tpadding: 0;\n\t\tbackground: none;\n\t\tborder: 1px solid rgba(60, 60, 60, .26);\n\t\tborder-radius: 4px;\n\t\twhite-space: normal;\n\t}\n\n\t.v-select.searchable .dropdown-toggle {\n\t\tcursor: text;\n\t}\n\n\t.v-select.open .dropdown-toggle {\n\t\tborder-bottom: none;\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t.v-select > .dropdown-menu {\n\t\tmargin: 0;\n\t\twidth: 100%;\n\t\toverflow-y: scroll;\n\t\tborder-top: none;\n\t\tborder-top-left-radius: 0;\n\t\tborder-top-right-radius: 0;\n\t}\n\n\t.v-select .selected-tag {\n\t\tcolor: #333;\n\t\tbackground-color: #f0f0f0;\n\t\tborder: 1px solid #ccc;\n\t\tborder-radius: 4px;\n\t\theight: 26px;\n\t\tmargin: 4px 1px 0px 3px;\n\t\tpadding: 0 0.25em;\n\t\tfloat: left;\n\t\tline-height: 1.7em;\n\t}\n\n\t.v-select .selected-tag .close {\n\t\tfloat: none;\n\t\tmargin-right: 0;\n\t\tfont-size: 20px;\n\t}\n\n\t.v-select input[type=search],\n\t.v-select input[type=search]:focus {\n\t\tdisplay: inline-block;\n\t\tborder: none;\n\t\toutline: none;\n\t\tmargin: 0;\n\t\tpadding: 0 .5em;\n\t\twidth: 10em;\n\t\tmax-width: 100%;\n\t\tbackground: none;\n\t\tposition: relative;\n\t\tbox-shadow: none;\n\t\tfloat: left;\n\t\tclear: none;\n\t}\n\n\t.v-select input[type=search]:disabled {\n\t\tcursor: pointer;\n\t}\n\n\t.v-select li a {\n\t\tcursor: pointer;\n\t}\n\n\t.v-select .active a {\n\t\tbackground: rgba(50, 50, 50, .1);\n\t\tcolor: #333;\n\t}\n\n\t.v-select .highlight a,\n\t.v-select li:hover > a {\n\t\tbackground: #f0f0f0;\n\t\tcolor: #333;\n\t}\n\n\t.v-select .spinner {\n\t\topacity: 0;\n\t\tposition: absolute;\n\t\ttop: 5px;\n\t\tright: 10px;\n\t\tfont-size: 5px;\n\t\ttext-indent: -9999em;\n\t\toverflow: hidden;\n\t\tborder-top: .9em solid rgba(100, 100, 100, .1);\n\t\tborder-right: .9em solid rgba(100, 100, 100, .1);\n\t\tborder-bottom: .9em solid rgba(100, 100, 100, .1);\n\t\tborder-left: .9em solid rgba(60, 60, 60, .45);\n\t\ttransform: translateZ(0);\n\t\tanimation: vSelectSpinner 1.1s infinite linear;\n\t\ttransition: opacity .1s;\n\t}\n\n\t.v-select.loading .spinner {\n\t\topacity: 1;\n\t}\n\n\t.v-select .spinner,\n\t.v-select .spinner:after {\n\t\tborder-radius: 50%;\n\t\twidth: 5em;\n\t\theight: 5em;\n\t}\n\n\t@-webkit-keyframes vSelectSpinner {\n\t\t0% {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\t100% {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n\n\t@keyframes vSelectSpinner {\n\t\t0% {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\t100% {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n</style>\n\n<template>\n\t<div class=\""dropdown v-select\"" :class=\""dropdownClasses\"">\n\t\t<div v-el:toggle @mousedown.prevent=\""toggleDropdown\"" class=\""dropdown-toggle clearfix\"" type=\""button\"">\n        <span class=\""form-control\"" v-if=\""!searchable && isValueEmpty\"">\n          {{ placeholder }}\n        </span>\n\n        <span class=\""selected-tag\"" v-for=\""option in valueAsArray\"" track-by=\""$index\"">\n          {{ getOptionLabel(option) }}\n          <button v-if=\""multiple\"" @click=\""select(option)\"" type=\""button\"" class=\""close\"">\n            <span aria-hidden=\""true\"">&times;</span>\n          </button>\n        </span>\n\n\t\t\t<input\n\t\t\t\t\t\t\tv-el:search\n\t\t\t\t\t\t\t:debounce=\""debounce\""\n\t\t\t\t\t\t\tv-model=\""search\""\n\t\t\t\t\t\t\tv-show=\""searchable\""\n\t\t\t\t\t\t\t@keydown.delete=\""maybeDeleteValue\""\n\t\t\t\t\t\t\t@keyup.esc=\""onEscape\""\n\t\t\t\t\t\t\t@keydown.up.prevent=\""typeAheadUp\""\n\t\t\t\t\t\t\t@keydown.down.prevent=\""typeAheadDown\""\n\t\t\t\t\t\t\t@keyup.enter.prevent=\""typeAheadSelect\""\n\t\t\t\t\t\t\t@blur=\""open = false\""\n\t\t\t\t\t\t\t@focus=\""open = true\""\n\t\t\t\t\t\t\ttype=\""search\""\n\t\t\t\t\t\t\tclass=\""form-control\""\n\t\t\t\t\t\t\t:placeholder=\""searchPlaceholder\""\n\t\t\t\t\t\t\t:style=\""{ width: isValueEmpty ? '100%' : 'auto' }\""\n\t\t\t>\n\n\t\t\t<i v-el:open-indicator role=\""presentation\"" class=\""open-indicator\""></i>\n\n\t\t\t<slot name=\""spinner\"">\n\t\t\t\t<div class=\""spinner\"" v-show=\""onSearch && loading\"">Loading...</div>\n\t\t\t</slot>\n\t\t</div>\n\n\t\t<ul v-el:dropdown-menu v-show=\""open\"" :transition=\""transition\"" class=\""dropdown-menu\"" :style=\""{ 'max-height': maxHeight }\"">\n\t\t\t<li v-for=\""option in filteredOptions\"" track-by=\""$index\"" :class=\""{ active: isOptionSelected(option), highlight: $index === typeAheadPointer }\"" @mouseover=\""typeAheadPointer = $index\"">\n\t\t\t\t<a @mousedown.prevent=\""select(option)\"">\n\t\t\t\t\t{{ getOptionLabel(option) }}\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t\t<li transition=\""fade\"" v-if=\""!filteredOptions.length\"" class=\""divider\""></li>\n\t\t\t<li transition=\""fade\"" v-if=\""!filteredOptions.length\"" class=\""text-center\"">\n\t\t\t\t<slot name=\""no-options\"">Sorry, no matching options.</slot>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</template>\n\n\n<script type=\""text/babel\"">\n\timport pointerScroll from '../mixins/pointerScroll'\n\timport typeAheadPointer from '../mixins/typeAheadPointer'\n\timport ajax from '../mixins/ajax'\n\n\texport default {\n\t\tmixins: [pointerScroll, typeAheadPointer, ajax],\n\n\t\tprops: {\n\t\t\t/**\n\t\t\t * Contains the currently selected value. Very similar to a\n\t\t\t * `value` attribute on an <input>. In most cases, you'll want\n\t\t\t * to set this as a two-way binding, using :value.sync. However,\n\t\t\t * this will not work with Vuex, in which case you'll need to use\n\t\t\t * the onChange callback property.\n\t\t\t * @type {Object||String||null}\n\t\t\t */\n\t\t\tvalue: {\n\t\t\t\tdefault: null\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * An array of strings or objects to be used as dropdown choices.\n\t\t\t * If you are using an array of objects, vue-select will look for\n\t\t\t * a `label` key (ex. [{label: 'This is Foo', value: 'foo'}]). A\n\t\t\t * custom label key can be set with the `label` prop.\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\toptions: {\n\t\t\t\ttype: Array,\n\t\t\t\tdefault() {\n\t\t\t\t\treturn []\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the max-height property on the dropdown list.\n\t\t\t * @deprecated\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tmaxHeight: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: '400px'\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Enable/disable filtering the options.\n\t\t\t * @type {Boolean}\n\t\t\t */\n\t\t\tsearchable: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Equivalent to the `multiple` attribute on a `<select>` input.\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tmultiple: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Equivalent to the `placeholder` attribute on an `<input>`.\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tplaceholder: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: ''\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets a Vue transition property on the `.dropdown-menu`. vue-select\n\t\t\t * does not include CSS for transitions, you'll need to add them yourself.\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\ttransition: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'expand'\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Enables/disables clearing the search text when an option is selected.\n\t\t\t * @type {Boolean}\n\t\t\t */\n\t\t\tclearSearchOnSelect: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: true\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Tells vue-select what key to use when generating option\n\t\t\t * labels when each `option` is an object.\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tlabel: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: 'label'\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Callback to generate the label text. If {option}\n\t\t\t * is an object, returns option[this.label] by default.\n\t\t\t * @param  {Object || String} option\n\t\t\t * @return {String}\n\t\t\t */\n\t\t\tgetOptionLabel: {\n\t\t\t\ttype: Function,\n\t\t\t\tdefault(option) {\n\t\t\t\t\tif (typeof option === 'object') {\n\t\t\t\t\t\tif (this.label && option[this.label]) {\n\t\t\t\t\t\t\treturn option[this.label]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn option;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * An optional callback function that is called each time the selected\n\t\t\t * value(s) change. When integrating with Vuex, use this callback to trigger\n\t\t\t * an action, rather than using :value.sync to retreive the selected value.\n\t\t\t * @type {Function}\n\t\t\t * @default {null}\n\t\t\t */\n\t\t\tonChange: Function,\n\n\t\t\t/**\n\t\t\t * Enable/disable creating options from searchInput.\n\t\t\t * @type {Boolean}\n\t\t\t */\n\t\t\ttaggable: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * When true, newly created tags will be added to\n\t\t\t * the options list.\n\t\t\t * @type {Boolean}\n\t\t\t */\n\t\t\tpushTags: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * User defined function for adding Options\n\t\t\t * @type {Function}\n\t\t\t */\n\t\t\tcreateOption: {\n\t\t\t\ttype: Function,\n\t\t\t\tdefault: function (newOption) {\n\t\t\t\t\tif (typeof this.options[0] === 'object') {\n\t\t\t\t\t\treturn {[this.label]: newOption}\n\t\t\t\t\t}\n\t\t\t\t\treturn newOption\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * When false, updating the options will not reset the select value\n\t\t\t * @type {Boolean}\n\t\t\t */\n\t\t\tresetOnOptionsChange: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t},\n\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tsearch: '',\n\t\t\t\topen: false\n\t\t\t}\n\t\t},\n\n\t\twatch: {\n\t\t\tvalue(val, old) {\n\t\t\t\tif (this.multiple) {\n\t\t\t\t\tthis.onChange ? this.onChange(val) : null\n\t\t\t\t} else {\n\t\t\t\t\tthis.onChange && val !== old ? this.onChange(val) : null\n\t\t\t\t}\n\t\t\t},\n\t\t\toptions() {\n\t\t\t\tif (!this.taggable && this.resetOnOptionsChange) {\n\t\t\t\t\tthis.$set('value', this.multiple ? [] : null)\n\t\t\t\t}\n\t\t\t},\n\t\t\tmultiple(val) {\n\t\t\t\tthis.$set('value', val ? [] : null)\n\t\t\t}\n\t\t},\n\n\t\tmethods: {\n\n\t\t\t/**\n\t\t\t * Select a given option.\n\t\t\t * @param  {Object||String} option\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tselect(option) {\n\t\t\t\tif (this.isOptionSelected(option)) {\n\t\t\t\t\tthis.deselect(option)\n\t\t\t\t} else {\n\t\t\t\t\tif (this.taggable && !this.optionExists(option)) {\n\t\t\t\t\t\toption = this.createOption(option)\n\n\t\t\t\t\t\tif (this.pushTags) {\n\t\t\t\t\t\t\tthis.options.push(option)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.multiple) {\n\t\t\t\t\t\tif (!this.value) {\n\t\t\t\t\t\t\tthis.$set('value', [option])\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.value.push(option)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.value = option\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.onAfterSelect(option)\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * De-select a given option.\n\t\t\t * @param  {Object||String} option\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tdeselect(option) {\n\t\t\t\tif (this.multiple) {\n\t\t\t\t\tlet ref = -1\n\t\t\t\t\tthis.value.forEach((val) => {\n\t\t\t\t\t\tif (val === option || typeof val === 'object' && val[this.label] === option[this.label]) {\n\t\t\t\t\t\t\tref = val\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\tthis.value.$remove(ref)\n\t\t\t\t} else {\n\t\t\t\t\tthis.value = null\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Called from this.select after each selection.\n\t\t\t * @param  {Object||String} option\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tonAfterSelect(option) {\n\t\t\t\tif (!this.multiple) {\n\t\t\t\t\tthis.open = !this.open\n\t\t\t\t\tthis.$els.search.blur()\n\t\t\t\t}\n\n\t\t\t\tif (this.clearSearchOnSelect) {\n\t\t\t\t\tthis.search = ''\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Toggle the visibility of the dropdown menu.\n\t\t\t * @param  {Event} e\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\ttoggleDropdown(e) {\n\t\t\t\tif (e.target === this.$els.openIndicator || e.target === this.$els.search || e.target === this.$els.toggle || e.target === this.$el) {\n\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\tthis.$els.search.blur() // dropdown will close on blur\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.open = true\n\t\t\t\t\t\tthis.$els.search.focus()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Check if the given option is currently selected.\n\t\t\t * @param  {Object||String}  option\n\t\t\t * @return {Boolean}         True when selected || False otherwise\n\t\t\t */\n\t\t\tisOptionSelected(option) {\n\t\t\t\tif (this.multiple && this.value) {\n\t\t\t\t\tlet selected = false\n\t\t\t\t\tthis.value.forEach(opt => {\n\t\t\t\t\t\tif (typeof opt === 'object' && opt[this.label] === option[this.label]) {\n\t\t\t\t\t\t\tselected = true\n\t\t\t\t\t\t} else if (opt === option) {\n\t\t\t\t\t\t\tselected = true\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn selected\n\t\t\t\t}\n\n\t\t\t\treturn this.value === option\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * If there is any text in the search input, remove it.\n\t\t\t * Otherwise, blur the search input to close the dropdown.\n\t\t\t * @return {[type]} [description]\n\t\t\t */\n\t\t\tonEscape() {\n\t\t\t\tif (!this.search.length) {\n\t\t\t\t\tthis.$els.search.blur()\n\t\t\t\t} else {\n\t\t\t\t\tthis.search = ''\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Delete the value on Delete keypress when there is no\n\t\t\t * text in the search input, & there's tags to delete\n\t\t\t * @return {this.value}\n\t\t\t */\n\t\t\tmaybeDeleteValue() {\n\t\t\t\tif (!this.$els.search.value.length && this.value) {\n\t\t\t\t\treturn this.multiple ? this.value.pop() : this.$set('value', null)\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Determine if an option exists\n\t\t\t * within this.options array.\n\t\t\t *\n\t\t\t * @param  {Object || String} option\n\t\t\t * @return {boolean}\n\t\t\t */\n\t\t\toptionExists(option) {\n\t\t\t\tlet exists = false\n\n\t\t\t\tthis.options.forEach(opt => {\n\t\t\t\t\tif (typeof opt === 'object' && opt[this.label] === option) {\n\t\t\t\t\t\texists = true\n\t\t\t\t\t} else if (opt === option) {\n\t\t\t\t\t\texists = true\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\treturn exists\n\t\t\t}\n\t\t},\n\n\t\tcomputed: {\n\n\t\t\t/**\n\t\t\t * Classes to be output on .dropdown\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tdropdownClasses() {\n\t\t\t\treturn {\n\t\t\t\t\topen: this.open,\n\t\t\t\t\tsearchable: this.searchable,\n\t\t\t\t\tloading: this.loading\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Return the placeholder string if it's set\n\t\t\t * & there is no value selected.\n\t\t\t * @return {String} Placeholder text\n\t\t\t */\n\t\t\tsearchPlaceholder() {\n\t\t\t\tif (this.isValueEmpty && this.placeholder) {\n\t\t\t\t\treturn this.placeholder;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * The currently displayed options, filtered\n\t\t\t * by the search elements value. If tagging\n\t\t\t * true, the search text will be prepended\n\t\t\t * if it doesn't already exist.\n\t\t\t *\n\t\t\t * @return {array}\n\t\t\t */\n\t\t\tfilteredOptions() {\n\t\t\t\tlet options = this.$options.filters.filterBy(this.options, this.search)\n\t\t\t\tif (this.taggable && this.search.length && !this.optionExists(this.search)) {\n\t\t\t\t\toptions.unshift(this.search)\n\t\t\t\t}\n\t\t\t\treturn options\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Check if there aren't any options selected.\n\t\t\t * @return {Boolean}\n\t\t\t */\n\t\t\tisValueEmpty() {\n\t\t\t\tif (this.value) {\n\t\t\t\t\tif (typeof this.value === 'object') {\n\t\t\t\t\t\treturn !Object.keys(this.value).length\n\t\t\t\t\t}\n\t\t\t\t\treturn !this.value.length\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Return the current value in array format.\n\t\t\t * @return {Array}\n\t\t\t */\n\t\t\tvalueAsArray() {\n\t\t\t\tif (this.multiple) {\n\t\t\t\t\treturn this.value\n\t\t\t\t} else if (this.value) {\n\t\t\t\t\treturn [this.value]\n\t\t\t\t}\n\n\t\t\t\treturn []\n\t\t\t}\n\t\t}\n\n\t}\n</script>\n\n\n\n/** WEBPACK FOOTER **\n ** Select.vue?9b76b1be\n **/"",""module.exports = { \""default\"": require(\""core-js/library/fn/object/define-property\""), __esModule: true };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-runtime/core-js/object/define-property.js\n ** module id = 43\n ** module chunks = 0\n **/"",""module.exports = { \""default\"": require(\""core-js/library/fn/object/keys\""), __esModule: true };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-runtime/core-js/object/keys.js\n ** module id = 44\n ** module chunks = 0\n **/"",""module.exports = { \""default\"": require(\""core-js/library/fn/symbol\""), __esModule: true };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-runtime/core-js/symbol.js\n ** module id = 45\n ** module chunks = 0\n **/"",""module.exports = { \""default\"": require(\""core-js/library/fn/symbol/iterator\""), __esModule: true };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-runtime/core-js/symbol/iterator.js\n ** module id = 46\n ** module chunks = 0\n **/"",""\""use strict\"";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\""../core-js/object/define-property\"");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (obj, key, value) {\n  if (key in obj) {\n    (0, _defineProperty2.default)(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-runtime/helpers/defineProperty.js\n ** module id = 47\n ** module chunks = 0\n **/"",""\""use strict\"";\n\nexports.__esModule = true;\n\nvar _iterator = require(\""../core-js/symbol/iterator\"");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\""../core-js/symbol\"");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \""function\"" && typeof _iterator2.default === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \""function\"" && obj.constructor === _symbol2.default ? \""symbol\"" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \""function\"" && _typeof(_iterator2.default) === \""symbol\"" ? function (obj) {\n  return typeof obj === \""undefined\"" ? \""undefined\"" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \""function\"" && obj.constructor === _symbol2.default ? \""symbol\"" : typeof obj === \""undefined\"" ? \""undefined\"" : _typeof(obj);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/babel-runtime/helpers/typeof.js\n ** module id = 48\n ** module chunks = 0\n **/"",""require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/fn/object/define-property.js\n ** module id = 49\n ** module chunks = 0\n **/"",""require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/fn/object/keys.js\n ** module id = 50\n ** module chunks = 0\n **/"",""require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/fn/symbol/index.js\n ** module id = 51\n ** module chunks = 0\n **/"",""require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/fn/symbol/iterator.js\n ** module id = 52\n ** module chunks = 0\n **/"",""module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_a-function.js\n ** module id = 53\n ** module chunks = 0\n **/"",""module.exports = function(){ /* empty */ };\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_add-to-unscopables.js\n ** module id = 54\n ** module chunks = 0\n **/"",""// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_array-includes.js\n ** module id = 55\n ** module chunks = 0\n **/"",""// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_ctx.js\n ** module id = 56\n ** module chunks = 0\n **/"",""// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys')\n  , gOPS    = require('./_object-gops')\n  , pIE     = require('./_object-pie');\nmodule.exports = function(it){\n  var result     = getKeys(it)\n    , getSymbols = gOPS.f;\n  if(getSymbols){\n    var symbols = getSymbols(it)\n      , isEnum  = pIE.f\n      , i       = 0\n      , key;\n    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n  } return result;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_enum-keys.js\n ** module id = 57\n ** module chunks = 0\n **/"",""module.exports = require('./_global').document && document.documentElement;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_html.js\n ** module id = 58\n ** module chunks = 0\n **/"",""// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_iobject.js\n ** module id = 59\n ** module chunks = 0\n **/"",""// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg){\n  return cof(arg) == 'Array';\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_is-array.js\n ** module id = 60\n ** module chunks = 0\n **/"",""'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_iter-create.js\n ** module id = 61\n ** module chunks = 0\n **/"",""module.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_iter-step.js\n ** module id = 62\n ** module chunks = 0\n **/"",""var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject');\nmodule.exports = function(object, el){\n  var O      = toIObject(object)\n    , keys   = getKeys(O)\n    , length = keys.length\n    , index  = 0\n    , key;\n  while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_keyof.js\n ** module id = 63\n ** module chunks = 0\n **/"",""var META     = require('./_uid')('meta')\n  , isObject = require('./_is-object')\n  , has      = require('./_has')\n  , setDesc  = require('./_object-dp').f\n  , id       = 0;\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\nvar FREEZE = !require('./_fails')(function(){\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n  setDesc(it, META, {value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  }});\n};\nvar fastKey = function(it, create){\n  // return primitive with prefix\n  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return 'F';\n    // not necessary to add metadata\n    if(!create)return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function(it, create){\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return true;\n    // not necessary to add metadata\n    if(!create)return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY:      META,\n  NEED:     false,\n  fastKey:  fastKey,\n  getWeak:  getWeak,\n  onFreeze: onFreeze\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_meta.js\n ** module id = 64\n ** module chunks = 0\n **/"",""var dP       = require('./_object-dp')\r\n  , anObject = require('./_an-object')\r\n  , getKeys  = require('./_object-keys');\r\n\r\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\r\n  anObject(O);\r\n  var keys   = getKeys(Properties)\r\n    , length = keys.length\r\n    , i = 0\r\n    , P;\r\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\r\n  return O;\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-dps.js\n ** module id = 65\n ** module chunks = 0\n **/"",""var pIE            = require('./_object-pie')\r\n  , createDesc     = require('./_property-desc')\r\n  , toIObject      = require('./_to-iobject')\r\n  , toPrimitive    = require('./_to-primitive')\r\n  , has            = require('./_has')\r\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\r\n  , gOPD           = Object.getOwnPropertyDescriptor;\r\n\r\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){\r\n  O = toIObject(O);\r\n  P = toPrimitive(P, true);\r\n  if(IE8_DOM_DEFINE)try {\r\n    return gOPD(O, P);\r\n  } catch(e){ /* empty */ }\r\n  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-gopd.js\n ** module id = 66\n ** module chunks = 0\n **/"",""// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject')\n  , gOPN      = require('./_object-gopn').f\n  , toString  = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n  try {\n    return gOPN(it);\n  } catch(e){\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-gopn-ext.js\n ** module id = 67\n ** module chunks = 0\n **/"",""// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\r\nvar has         = require('./_has')\r\n  , toObject    = require('./_to-object')\r\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\r\n  , ObjectProto = Object.prototype;\r\n\r\nmodule.exports = Object.getPrototypeOf || function(O){\r\n  O = toObject(O);\r\n  if(has(O, IE_PROTO))return O[IE_PROTO];\r\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\r\n    return O.constructor.prototype;\r\n  } return O instanceof Object ? ObjectProto : null;\r\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-gpo.js\n ** module id = 68\n ** module chunks = 0\n **/"",""// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_object-sap.js\n ** module id = 69\n ** module chunks = 0\n **/"",""var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_string-at.js\n ** module id = 70\n ** module chunks = 0\n **/"",""var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_to-index.js\n ** module id = 71\n ** module chunks = 0\n **/"",""// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/_to-length.js\n ** module id = 72\n ** module chunks = 0\n **/"",""'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/es6.array.iterator.js\n ** module id = 73\n ** module chunks = 0\n **/"",""var $export = require('./_export');\r\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/es6.object.define-property.js\n ** module id = 74\n ** module chunks = 0\n **/"",""// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/es6.object.keys.js\n ** module id = 75\n ** module chunks = 0\n **/"",""'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/es6.string.iterator.js\n ** module id = 77\n ** module chunks = 0\n **/"",""'use strict';\n// ECMAScript 6 symbols shim\nvar global         = require('./_global')\n  , has            = require('./_has')\n  , DESCRIPTORS    = require('./_descriptors')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , META           = require('./_meta').KEY\n  , $fails         = require('./_fails')\n  , shared         = require('./_shared')\n  , setToStringTag = require('./_set-to-string-tag')\n  , uid            = require('./_uid')\n  , wks            = require('./_wks')\n  , wksExt         = require('./_wks-ext')\n  , wksDefine      = require('./_wks-define')\n  , keyOf          = require('./_keyof')\n  , enumKeys       = require('./_enum-keys')\n  , isArray        = require('./_is-array')\n  , anObject       = require('./_an-object')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , createDesc     = require('./_property-desc')\n  , _create        = require('./_object-create')\n  , gOPNExt        = require('./_object-gopn-ext')\n  , $GOPD          = require('./_object-gopd')\n  , $DP            = require('./_object-dp')\n  , $keys          = require('./_object-keys')\n  , gOPD           = $GOPD.f\n  , dP             = $DP.f\n  , gOPN           = gOPNExt.f\n  , $Symbol        = global.Symbol\n  , $JSON          = global.JSON\n  , _stringify     = $JSON && $JSON.stringify\n  , PROTOTYPE      = 'prototype'\n  , HIDDEN         = wks('_hidden')\n  , TO_PRIMITIVE   = wks('toPrimitive')\n  , isEnum         = {}.propertyIsEnumerable\n  , SymbolRegistry = shared('symbol-registry')\n  , AllSymbols     = shared('symbols')\n  , OPSymbols      = shared('op-symbols')\n  , ObjectProto    = Object[PROTOTYPE]\n  , USE_NATIVE     = typeof $Symbol == 'function'\n  , QObject        = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n  return _create(dP({}, 'a', {\n    get: function(){ return dP(this, 'a', {value: 7}).a; }\n  })).a != 7;\n}) ? function(it, key, D){\n  var protoDesc = gOPD(ObjectProto, key);\n  if(protoDesc)delete ObjectProto[key];\n  dP(it, key, D);\n  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n  return typeof it == 'symbol';\n} : function(it){\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if(has(AllSymbols, key)){\n    if(!D.enumerable){\n      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n      D = _create(D, {enumerable: createDesc(0, false)});\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P))\n    , i    = 0\n    , l = keys.length\n    , key;\n  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P){\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n  it  = toIObject(it);\n  key = toPrimitive(key, true);\n  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n  var D = gOPD(it, key);\n  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n  var names  = gOPN(toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n  var IS_OP  = it === ObjectProto\n    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n  $Symbol = function Symbol(){\n    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function(value){\n      if(this === ObjectProto)$set.call(OPSymbols, value);\n      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f   = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f  = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if(DESCRIPTORS && !require('./_library')){\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function(name){\n    return wrap(wks(name));\n  }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function(key){\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(key){\n    if(isSymbol(key))return keyOf(SymbolRegistry, key);\n    throw TypeError(key + ' is not a symbol!');\n  },\n  useSetter: function(){ setter = true; },\n  useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it){\n    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n    var args = [it]\n      , i    = 1\n      , replacer, $replacer;\n    while(arguments.length > i)args.push(arguments[i++]);\n    replacer = args[1];\n    if(typeof replacer == 'function')$replacer = replacer;\n    if($replacer || !isArray(replacer))replacer = function(key, value){\n      if($replacer)value = $replacer.call(this, key, value);\n      if(!isSymbol(value))return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/es6.symbol.js\n ** module id = 78\n ** module chunks = 0\n **/"",""require('./_wks-define')('asyncIterator');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/es7.symbol.async-iterator.js\n ** module id = 79\n ** module chunks = 0\n **/"",""require('./_wks-define')('observable');\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/es7.symbol.observable.js\n ** module id = 80\n ** module chunks = 0\n **/"",""require('./es6.array.iterator');\nvar global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , TO_STRING_TAG = require('./_wks')('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype;\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-js/library/modules/web.dom.iterable.js\n ** module id = 81\n ** module chunks = 0\n **/"",""exports = module.exports = require(\""./../../node_modules/css-loader/lib/css-base.js\"")();\n// imports\n\n\n// module\nexports.push([module.id, \"".v-select{position:relative}.v-select .open-indicator{position:absolute;bottom:6px;right:10px;display:inline-block;cursor:pointer;pointer-events:all;-webkit-transition:all .15s cubic-bezier(1,-.115,.975,.855);transition:all .15s cubic-bezier(1,-.115,.975,.855);-webkit-transition-timing-function:cubic-bezier(1,-.115,.975,.855);transition-timing-function:cubic-bezier(1,-.115,.975,.855);opacity:1;-webkit-transition:opacity .1s;transition:opacity .1s}.v-select.loading .open-indicator{opacity:0}.v-select .open-indicator:before{border-color:rgba(60,60,60,.5);border-style:solid;border-width:.25em .25em 0 0;content:'';display:inline-block;height:10px;width:10px;vertical-align:top;-webkit-transform:rotate(133deg);transform:rotate(133deg);-webkit-transition:all .15s cubic-bezier(1,-.115,.975,.855);transition:all .15s cubic-bezier(1,-.115,.975,.855);-webkit-transition-timing-function:cubic-bezier(1,-.115,.975,.855);transition-timing-function:cubic-bezier(1,-.115,.975,.855)}.v-select.open .open-indicator{bottom:1px}.v-select.open .open-indicator:before{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.v-select .dropdown-toggle{display:block;padding:0;background:none;border:1px solid rgba(60,60,60,.26);border-radius:4px;white-space:normal}.v-select.searchable .dropdown-toggle{cursor:text}.v-select.open .dropdown-toggle{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.v-select>.dropdown-menu{margin:0;width:100%;overflow-y:scroll;border-top:none;border-top-left-radius:0;border-top-right-radius:0}.v-select .selected-tag{color:#333;background-color:#f0f0f0;border:1px solid #ccc;border-radius:4px;height:26px;margin:4px 1px 0 3px;padding:0 .25em;float:left;line-height:1.7em}.v-select .selected-tag .close{float:none;margin-right:0;font-size:20px}.v-select input[type=search],.v-select input[type=search]:focus{display:inline-block;border:none;outline:none;margin:0;padding:0 .5em;width:10em;max-width:100%;background:none;position:relative;box-shadow:none;float:left;clear:none}.v-select input[type=search]:disabled,.v-select li a{cursor:pointer}.v-select .active a{background:rgba(50,50,50,.1);color:#333}.v-select .highlight a,.v-select li:hover>a{background:#f0f0f0;color:#333}.v-select .spinner{opacity:0;position:absolute;top:5px;right:10px;font-size:5px;text-indent:-9999em;overflow:hidden;border-top:.9em solid hsla(0,0%,39%,.1);border-right:.9em solid hsla(0,0%,39%,.1);border-bottom:.9em solid hsla(0,0%,39%,.1);border-left:.9em solid rgba(60,60,60,.45);-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:vSelectSpinner 1.1s infinite linear;animation:vSelectSpinner 1.1s infinite linear;-webkit-transition:opacity .1s;transition:opacity .1s}.v-select.loading .spinner{opacity:1}.v-select .spinner,.v-select .spinner:after{border-radius:50%;width:5em;height:5em}@-webkit-keyframes vSelectSpinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes vSelectSpinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}\"", \""\""]);\n\n// exports\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-loader!./~/vue-loader/lib/style-rewriter.js!./~/vue-loader/lib/selector.js?type=style&index=0!./src/components/Select.vue\n ** module id = 82\n ** module chunks = 0\n **/"",""/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\n// css base code, injected by the css-loader\r\nmodule.exports = function() {\r\n\tvar list = [];\r\n\r\n\t// return the list of modules as css string\r\n\tlist.toString = function toString() {\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar item = this[i];\r\n\t\t\tif(item[2]) {\r\n\t\t\t\tresult.push(\""@media \"" + item[2] + \""{\"" + item[1] + \""}\"");\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(item[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result.join(\""\"");\r\n\t};\r\n\r\n\t// import a list of modules into the list\r\n\tlist.i = function(modules, mediaQuery) {\r\n\t\tif(typeof modules === \""string\"")\r\n\t\t\tmodules = [[null, modules, \""\""]];\r\n\t\tvar alreadyImportedModules = {};\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar id = this[i][0];\r\n\t\t\tif(typeof id === \""number\"")\r\n\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t}\r\n\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\tvar item = modules[i];\r\n\t\t\t// skip already imported module\r\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t//  when a module is imported multiple times with different media queries.\r\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\tif(typeof item[0] !== \""number\"" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\titem[2] = \""(\"" + item[2] + \"") and (\"" + mediaQuery + \"")\"";\r\n\t\t\t\t}\r\n\t\t\t\tlist.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn list;\r\n};\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-loader/lib/css-base.js\n ** module id = 83\n ** module chunks = 0\n **/"",""module.exports = \"" <div class=\\\""dropdown v-select\\\"" :class=dropdownClasses> <div v-el:toggle @mousedown.prevent=toggleDropdown class=\\\""dropdown-toggle clearfix\\\"" type=button> <span class=form-control v-if=\\\""!searchable && isValueEmpty\\\""> {{ placeholder }} </span> <span class=selected-tag v-for=\\\""option in valueAsArray\\\"" track-by=$index> {{ getOptionLabel(option) }} <button v-if=multiple @click=select(option) type=button class=close> <span aria-hidden=true>&times;</span> </button> </span> <input v-el:search :debounce=debounce v-model=search v-show=searchable @keydown.delete=maybeDeleteValue @keyup.esc=onEscape @keydown.up.prevent=typeAheadUp @keydown.down.prevent=typeAheadDown @keyup.enter.prevent=typeAheadSelect @blur=\\\""open = false\\\"" @focus=\\\""open = true\\\"" type=search class=form-control :placeholder=searchPlaceholder :style=\\\""{ width: isValueEmpty ? '100%' : 'auto' }\\\""> <i v-el:open-indicator role=presentation class=open-indicator></i> <slot name=spinner> <div class=spinner v-show=\\\""onSearch && loading\\\"">Loading...</div> </slot> </div> <ul v-el:dropdown-menu v-show=open :transition=transition class=dropdown-menu :style=\\\""{ 'max-height': maxHeight }\\\""> <li v-for=\\\""option in filteredOptions\\\"" track-by=$index :class=\\\""{ active: isOptionSelected(option), highlight: $index === typeAheadPointer }\\\"" @mouseover=\\\""typeAheadPointer = $index\\\""> <a @mousedown.prevent=select(option)> {{ getOptionLabel(option) }} </a> </li> <li transition=fade v-if=!filteredOptions.length class=divider></li> <li transition=fade v-if=!filteredOptions.length class=text-center> <slot name=no-options>Sorry, no matching options.</slot> </li> </ul> </div> \"";\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/vue-html-loader!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/Select.vue\n ** module id = 84\n ** module chunks = 0\n **/"",""var __vue_script__, __vue_template__\nrequire(\""!!vue-style-loader!css-loader!./../../node_modules/vue-loader/lib/style-rewriter.js!./../../node_modules/vue-loader/lib/selector.js?type=style&index=0!./Select.vue\"")\n__vue_script__ = require(\""!!babel-loader?presets[]=es2015&plugins[]=transform-runtime&comments=false!./../../node_modules/vue-loader/lib/selector.js?type=script&index=0!./Select.vue\"")\n__vue_template__ = require(\""!!vue-html-loader!./../../node_modules/vue-loader/lib/selector.js?type=template&index=0!./Select.vue\"")\nmodule.exports = __vue_script__ || {}\nif (module.exports.__esModule) module.exports = module.exports.default\nif (__vue_template__) {\n(typeof module.exports === \""function\"" ? (module.exports.options || (module.exports.options = {})) : module.exports).template = __vue_template__\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/components/Select.vue\n ** module id = 85\n ** module chunks = 0\n **/"",""/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nvar stylesInDom = {},\n\tmemoize = function(fn) {\n\t\tvar memo;\n\t\treturn function () {\n\t\t\tif (typeof memo === \""undefined\"") memo = fn.apply(this, arguments);\n\t\t\treturn memo;\n\t\t};\n\t},\n\tisOldIE = memoize(function() {\n\t\treturn /msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase());\n\t}),\n\tgetHeadElement = memoize(function () {\n\t\treturn document.head || document.getElementsByTagName(\""head\"")[0];\n\t}),\n\tsingletonElement = null,\n\tsingletonCounter = 0,\n\tstyleElementsInsertedAtTop = [];\n\nmodule.exports = function(list, options) {\n\tif(typeof DEBUG !== \""undefined\"" && DEBUG) {\n\t\tif(typeof document !== \""object\"") throw new Error(\""The style-loader cannot be used in a non-browser environment\"");\n\t}\n\n\toptions = options || {};\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (typeof options.singleton === \""undefined\"") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the bottom of <head>.\n\tif (typeof options.insertAt === \""undefined\"") options.insertAt = \""bottom\"";\n\n\tvar styles = listToStyles(list);\n\taddStylesToDom(styles, options);\n\n\treturn function update(newList) {\n\t\tvar mayRemove = [];\n\t\tfor(var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\t\tfor(var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++)\n\t\t\t\t\tdomStyle.parts[j]();\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction addStylesToDom(styles, options) {\n\tfor(var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles(list) {\n\tvar styles = [];\n\tvar newStyles = {};\n\tfor(var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\t\tif(!newStyles[id])\n\t\t\tstyles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse\n\t\t\tnewStyles[id].parts.push(part);\n\t}\n\treturn styles;\n}\n\nfunction insertStyleElement(options, styleElement) {\n\tvar head = getHeadElement();\n\tvar lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\n\tif (options.insertAt === \""top\"") {\n\t\tif(!lastStyleElementInsertedAtTop) {\n\t\t\thead.insertBefore(styleElement, head.firstChild);\n\t\t} else if(lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\thead.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\thead.appendChild(styleElement);\n\t\t}\n\t\tstyleElementsInsertedAtTop.push(styleElement);\n\t} else if (options.insertAt === \""bottom\"") {\n\t\thead.appendChild(styleElement);\n\t} else {\n\t\tthrow new Error(\""Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\"");\n\t}\n}\n\nfunction removeStyleElement(styleElement) {\n\tstyleElement.parentNode.removeChild(styleElement);\n\tvar idx = styleElementsInsertedAtTop.indexOf(styleElement);\n\tif(idx >= 0) {\n\t\tstyleElementsInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement(options) {\n\tvar styleElement = document.createElement(\""style\"");\n\tstyleElement.type = \""text/css\"";\n\tinsertStyleElement(options, styleElement);\n\treturn styleElement;\n}\n\nfunction addStyle(obj, options) {\n\tvar styleElement, update, remove;\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\t\tstyleElement = singletonElement || (singletonElement = createStyleElement(options));\n\t\tupdate = applyToSingletonTag.bind(null, styleElement, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);\n\t} else {\n\t\tstyleElement = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, styleElement);\n\t\tremove = function() {\n\t\t\tremoveStyleElement(styleElement);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle(newObj) {\n\t\tif(newObj) {\n\t\t\tif(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)\n\t\t\t\treturn;\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag(styleElement, index, remove, obj) {\n\tvar css = remove ? \""\"" : obj.css;\n\n\tif (styleElement.styleSheet) {\n\t\tstyleElement.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = styleElement.childNodes;\n\t\tif (childNodes[index]) styleElement.removeChild(childNodes[index]);\n\t\tif (childNodes.length) {\n\t\t\tstyleElement.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyleElement.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag(styleElement, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\tvar sourceMap = obj.sourceMap;\n\n\tif (media) {\n\t\tstyleElement.setAttribute(\""media\"", media);\n\t}\n\n\tif (sourceMap) {\n\t\t// https://developer.chrome.com/devtools/docs/javascript-debugging\n\t\t// this makes source maps inside style tags work properly in Chrome\n\t\tcss += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */';\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \""\\n/*# sourceMappingURL=data:application/json;base64,\"" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \"" */\"";\n\t}\n\n\tif (styleElement.styleSheet) {\n\t\tstyleElement.styleSheet.cssText = css;\n\t} else {\n\t\twhile(styleElement.firstChild) {\n\t\t\tstyleElement.removeChild(styleElement.firstChild);\n\t\t}\n\t\tstyleElement.appendChild(document.createTextNode(css));\n\t}\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/vue-style-loader/addStyles.js\n ** module id = 86\n ** module chunks = 0\n **/"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!./../../node_modules/css-loader/index.js!./../../node_modules/vue-loader/lib/style-rewriter.js!./../../node_modules/vue-loader/lib/selector.js?type=style&index=0!./Select.vue\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!./../../node_modules/vue-style-loader/addStyles.js\"")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!./../../node_modules/css-loader/index.js!./../../node_modules/vue-loader/lib/style-rewriter.js!./../../node_modules/vue-loader/lib/selector.js?type=style&index=0!./Select.vue\"", function() {\n\t\t\tvar newContent = require(\""!!./../../node_modules/css-loader/index.js!./../../node_modules/vue-loader/lib/style-rewriter.js!./../../node_modules/vue-loader/lib/selector.js?type=style&index=0!./Select.vue\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/vue-style-loader!./~/css-loader!./~/vue-loader/lib/style-rewriter.js!./~/vue-loader/lib/selector.js?type=style&index=0!./src/components/Select.vue\n ** module id = 87\n ** module chunks = 0\n **/""],""sourceRoot"":""""}"
64a1a454f96d41670ad004f36900e02bb4ea77f7,7560334,			// http://stackoverflow.com/questions/7560334/wm-touch-is-not-immediately-sent-with-touch-down-event
11a286188435ef1e46fe50e4f5add593e6c45466,6140632,						// Reference to http://stackoverflow.com/questions/6140632/how-to-handle-tab-in-textarea
f23ec97653566ce26783ac8a102abf3d57e6c6c5,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
b528c772dee942d57ff28871c1a82cf6551c2f27,14680711,Pull requests are welcome (good tips can be found on [Stack Overflow](http://stackoverflow.com/questions/14680711/how-to-do-a-github-pull-request))
2900f210c73a2ca935f9d5786d0019d9f51667a4,654713,First example may be more common to some users while second example valid as well. The [difference](http://stackoverflow.com/questions/654713/o-files-vs-a-files) between can be summarized as :
b25e67a4d60de238bac3029109d91266025f0d82,37628,0;301;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;software_engineering;0.6;0.006429277942631058;1.0;1.606429277942631;0.0;0
80f0eaf8d36cb5d352093cb6f17b012066e911b9,147500,see http://stackoverflow.com/questions/147500/is-it-possible-to-include-one-css-file-in-another
e9a95c8444af5cf615cd335f4666b715b11c658b,6875625, * @see http://stackoverflow.com/questions/6875625/does-javascript-provide-a-high-resolution-timer
02592bac06c7fc872b25f9471729b69d07fc4854,15893296,        # http://stackoverflow.com/questions/15893296/filtering-multiple-csv-files-while-importing-into-data-frame
1f355f503e4553ce2c758a2c26e2bbc4bce1b907,19227496,/* See Scrollable Menu with Bootstrap 3 http://stackoverflow.com/questions/19227496 */
8de90b017bfdf171efe885441b7262e5199ee120,5429827,     * Based on: http://stackoverflow.com/questions/5429827/how-can-i-prevent-text-element-selection-with-cursor-drag
5d2fac6d555c1e291801c6a72ec5e3af5561c820,17644576,>> Similar problem: http://stackoverflow.com/questions/17644576/uploading-image-to-s3-and-then-resizing-in-node-js
ca1f0e640ccd9538ee97782f3ffb88e79b082c0f,105034 1349404 6122571 1197928,"{""version"":3,""sources"":[""webpack://pnp.odata/webpack/universalModuleDefinition"",""webpack://pnp.odata/webpack/bootstrap"",""webpack://pnp.odata/./build/packages-es5/common/index.js"",""webpack://pnp.odata/./build/packages-es5/common/src/adalclient.js"",""webpack://pnp.odata/./build/packages-es5/common/src/collections.js"",""webpack://pnp.odata/./build/packages-es5/common/src/common.js"",""webpack://pnp.odata/./build/packages-es5/common/src/libconfig.js"",""webpack://pnp.odata/./build/packages-es5/common/src/netutil.js"",""webpack://pnp.odata/./build/packages-es5/common/src/storage.js"",""webpack://pnp.odata/./build/packages-es5/common/src/util.js"",""webpack://pnp.odata/./build/packages-es5/logging/index.js"",""webpack://pnp.odata/./build/packages-es5/logging/src/listeners.js"",""webpack://pnp.odata/./build/packages-es5/logging/src/logger.js"",""webpack://pnp.odata/./build/packages-es5/logging/src/logging.js"",""webpack://pnp.odata/./build/packages-es5/logging/src/loglevel.js"",""webpack://pnp.odata/./build/packages-es5/odata/index.js"",""webpack://pnp.odata/./build/packages-es5/odata/src/caching.js"",""webpack://pnp.odata/./build/packages-es5/odata/src/odata.js"",""webpack://pnp.odata/./build/packages-es5/odata/src/odatabatch.js"",""webpack://pnp.odata/./build/packages-es5/odata/src/parsers.js"",""webpack://pnp.odata/./build/packages-es5/odata/src/pipeline.js"",""webpack://pnp.odata/./build/packages-es5/odata/src/queryable.js"",""webpack://pnp.odata/./node_modules/adal-angular/dist/adal.min.js"",""webpack://pnp.odata/./node_modules/tslib/tslib.es6.js"",""webpack://pnp.odata/(webpack)/buildin/global.js""],""names"":[],""mappings"":"";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6B;AAC7B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACkB;AACZ;AACvC;AACsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2DAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,EAAE;AACjF;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,oEAAW;AACrD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,+DAAsB;AACF;AACtB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,+DAAsB;AACE;AAC1B,sC;;;;;;;;;;;;ACpMA;AAAA;AAAA;AAAA;AAAgC;AAChC;AACA;AACA;AACA,oBAAoB,oDAAM,kDAAkD,yCAAyC,kBAAkB,EAAE,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uC;;;;;;;;;;;;AClCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6B;AACC;AACF;AACF;AACA;AACH;AACvB,kC;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AAAA;AAAuD;AAChD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8DAAS,UAAU,gEAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC4B;AAC7B;AACO;AACP,qC;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACqB;AAC/C;AACP;AACA,oCAAoC,kBAAkB;AACtD;AACA;AACA,SAAS;AACT;AACA;AACO;AACP,QAAQ,kEAAoB;AAC5B,sBAAsB,oDAAM,qBAAqB;AACjD,iBAAiB,oDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;AAClC,mC;;;;;;;;;;;;;AC5DA;AAAA;AAAA;AAAA;AAAA;AAA4E;AAChC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4BAA4B;AAC3E;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,kEAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAa;AAC9C;AACA;AACA;AACA,qBAAqB,qDAAO;AAC5B;AACA,eAAe,iDAAG,EAAE,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAc,uCAAuC,wDAAa;AACzF,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,CAAC;AACkC;AACnC;AACA;AACA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,mC;;;;;;;;;;;;ACpPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA,iCAAiC,mCAAmC,EAAE;AACtE,8BAA8B,6DAA6D,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iCAAiC,qBAAqB;AACtD,4BAA4B,uBAAuB,aAAa,GAAG;AACnE;AACA;AACA;AACA;AACA,+CAA+C,kBAAkB,EAAE,gBAAgB,aAAa;AAChG;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,6BAA6B,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,gC;;;;;;;;;;;;AC1OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8B;AAC9B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,qC;;;;;;;;;;;;ACpEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,2CAA2C,4CAA4C,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD,6BAA6B,iCAAiC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,wDAAwD;AACrF;AACA;AACA,CAAC;AACiB;AAClB;AACA;AACA,wCAAwC,kCAAkC;AAC1E,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,+BAA+B,sBAAsB;AACrD,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA,wDAAwD,8BAA8B,EAAE;AACxF;AACA;AACA;AACA,CAAC;AACD,kC;;;;;;;;;;;;AClIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACI;AAC0B;AAChE,mC;;;;;;;;;;;;ACHA;AAAA;AAAA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B,oC;;;;;;;;;;;;ACXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AAC5B,iC;;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAuE;AACvE;AACA;AACA;AACA,0BAA0B,2DAAO,uBAAuB,yDAAa;AACrE,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,iCAAiC,4DAAgB;AACjD;AACA,CAAC;AACyB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,2BAA2B,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;AAChC,mC;;;;;;;;;;;;ACzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AACA;AACC;AACC;AACC;AAC7B,iC;;;;;;;;;;;;ACLA;AAAA;AAAA;AAAsC;AACtC;AACA;AACA,kCAAkC,YAAY,2DAAO,GAAG;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iCAAiC,EAAE;AAClE,+BAA+B,4BAA4B,EAAE;AAC7D,+BAA+B,kCAAkC,EAAE;AACnE,+BAA+B,iBAAiB,EAAE;AAClD;AACA;AACA,CAAC;AACqB;AACtB,sC;;;;;;;;;;;;ACxFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACS;AAC1C;AACA,IAAI,+CAAiB;AACrB;AACA,gCAAgC,0BAA0B;AAC1D,oCAAoC,kCAAkC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,sCAAsC,kEAAkE,EAAE;AAC1G,uCAAuC,4CAA4C,EAAE;AACrF,qCAAqC,kBAAkB,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAG;AACf,gBAAgB,uDAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uDAAG;AACpB;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA,YAAY,0DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB,mC;;;;;;;;;;;;ACnJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiB;AACZ;AAC2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mDAAM;AACV,cAAc,mDAAM,yDAAyD;AAC7E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,mDAAM;AACd;AACA,qDAAqD,0BAA0B,EAAE;AACjF,QAAQ,mDAAM;AACd;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,+BAA+B,mBAAmB;AAClD;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA,iDAAiD,uDAAG;AACpD,gBAAgB,mDAAM;AACtB;AACA;AACA;AACA,YAAY,mDAAM;AAClB;AACA,mEAAmE,kBAAkB,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mDAAM;AAClB,sBAAsB,mDAAM,qCAAqC;AACjE;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB,uCAAuC,uDAAc;AACrD;AACA,mCAAmC,0DAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAM;AAC9B,kCAAkC,mDAAM,qCAAqC;AAC7E;AACA;AACA,yBAAyB;AACzB,4BAA4B,0DAAM;AAClC;AACA;AACA;AACA,4BAA4B,uDAAG;AAC/B;AACA;AACA,6EAA6E,qBAAqB,EAAE;AACpG;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA,qCAAqC,6DAAoB;AACzD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0DAAM;AAC1B;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB;AACA;AACA,2BAA2B,0DAAM,sBAAsB,GAAG,uBAAuB;AACjF;AACA,+CAA+C,uCAAuC,EAAE;AACxF,6CAA6C,mCAAmC,EAAE;AAClF,0CAA0C,qBAAqB,EAAE;AACjE,yCAAyC,kBAAkB,EAAE;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB,0BAA0B,mDAAM,qCAAqC;AACrE;AACA;AACA,iBAAiB;AACjB;AACA;AACA,gBAAgB,mDAAM;AACtB,0BAA0B,mDAAM,qCAAqC;AACrE;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA,IAAI,gDAAkB;AACtB;AACA;AACA;AACA,CAAC;AAC0B;AACpB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oC;;;;;;;;;;;;AC1NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACyD;AAC/B;AACJ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAY;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAY;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACpI;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,8DAA8D,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACrI;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,+DAA+D,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACtI;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,gEAAgE,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACvI;AACA;AACA,iCAAiC,cAAc;AAC/C,gCAAgC,cAAc,mDAAU,GAAG;AAC3D,6DAA6D,oEAAkB,6BAA6B,QAAQ,sDAAI,UAAU,EAAE;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2DAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2DAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA,IAAI,+CAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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"",""file"":""odata.es5.umd.bundle.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""pnp.odata\""] = factory();\n\telse\n\t\troot[\""pnp.odata\""] = factory();\n})(window, function() {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \""./build/packages-es5/odata/index.js\"");\n"",""export * from \""./src/common\"";\r\n//# sourceMappingURL=index.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { BearerTokenFetchClient } from \""./netutil\"";\r\nimport { isUrlAbsolute } from \""./util\"";\r\n// @ts-ignore\r\nimport * as adal from \""adal-angular/dist/adal.min.js\"";\r\n/**\r\n * Parses out the root of the request url to use as the resource when getting the token\r\n *\r\n * After: https://gist.github.com/jlong/2428561\r\n * @param url The url to parse\r\n */\r\nfunction getResource(url) {\r\n    var parser = document.createElement(\""a\"");\r\n    parser.href = url;\r\n    return parser.protocol + \""//\"" + parser.hostname;\r\n}\r\n/**\r\n * Azure AD Client for use in the browser\r\n */\r\nvar AdalClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AdalClient, _super);\r\n    /**\r\n     * Creates a new instance of AdalClient\r\n     * @param clientId Azure App Id\r\n     * @param tenant Office 365 tenant (Ex: {tenant}.onmicrosoft.com)\r\n     * @param redirectUri The redirect url used to authenticate the\r\n     */\r\n    function AdalClient(clientId, tenant, redirectUri) {\r\n        var _this = _super.call(this, null) || this;\r\n        _this.clientId = clientId;\r\n        _this.tenant = tenant;\r\n        _this.redirectUri = redirectUri;\r\n        _this._displayCallback = null;\r\n        _this._loginPromise = null;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Creates a new AdalClient using the values of the supplied SPFx context (requires SPFx >= 1.6)\r\n     *\r\n     * @param spfxContext Current SPFx context\r\n     * @description Using this method requires that the features described in this article\r\n     * https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-aadhttpclient are activated in the tenant.\r\n     */\r\n    AdalClient.fromSPFxContext = function (spfxContext) {\r\n        return new SPFxAdalClient(spfxContext);\r\n    };\r\n    /**\r\n     * Conducts the fetch opertation against the AAD secured resource\r\n     *\r\n     * @param url Absolute URL for the request\r\n     * @param options Any fetch options passed to the underlying fetch implementation\r\n     */\r\n    AdalClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        if (!isUrlAbsolute(url)) {\r\n            throw Error(\""You must supply absolute urls to AdalClient.fetch.\"");\r\n        }\r\n        // the url we are calling is the resource\r\n        return this.getToken(getResource(url)).then(function (token) {\r\n            _this.token = token;\r\n            return _super.prototype.fetch.call(_this, url, options);\r\n        });\r\n    };\r\n    /**\r\n     * Gets a token based on the current user\r\n     *\r\n     * @param resource The resource for which we are requesting a token\r\n     */\r\n    AdalClient.prototype.getToken = function (resource) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            _this.ensureAuthContext().then(function (_) { return _this.login(); }).then(function (_) {\r\n                AdalClient._authContext.acquireToken(resource, function (message, token) {\r\n                    if (message) {\r\n                        return reject(Error(message));\r\n                    }\r\n                    resolve(token);\r\n                });\r\n            }).catch(reject);\r\n        });\r\n    };\r\n    /**\r\n     * Ensures we have created and setup the adal AuthenticationContext instance\r\n     */\r\n    AdalClient.prototype.ensureAuthContext = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            if (AdalClient._authContext === null) {\r\n                AdalClient._authContext = adal.inject({\r\n                    clientId: _this.clientId,\r\n                    displayCall: function (url) {\r\n                        if (_this._displayCallback) {\r\n                            _this._displayCallback(url);\r\n                        }\r\n                    },\r\n                    navigateToLoginRequestUrl: false,\r\n                    redirectUri: _this.redirectUri,\r\n                    tenant: _this.tenant,\r\n                });\r\n            }\r\n            resolve();\r\n        });\r\n    };\r\n    /**\r\n     * Ensures the current user is logged in\r\n     */\r\n    AdalClient.prototype.login = function () {\r\n        var _this = this;\r\n        if (this._loginPromise) {\r\n            return this._loginPromise;\r\n        }\r\n        this._loginPromise = new Promise(function (resolve, reject) {\r\n            if (AdalClient._authContext.getCachedUser()) {\r\n                return resolve();\r\n            }\r\n            _this._displayCallback = function (url) {\r\n                var popupWindow = window.open(url, \""login\"", \""width=483, height=600\"");\r\n                if (!popupWindow) {\r\n                    return reject(Error(\""Could not open pop-up window for auth. Likely pop-ups are blocked by the browser.\""));\r\n                }\r\n                if (popupWindow && popupWindow.focus) {\r\n                    popupWindow.focus();\r\n                }\r\n                var pollTimer = window.setInterval(function () {\r\n                    if (!popupWindow || popupWindow.closed || popupWindow.closed === undefined) {\r\n                        window.clearInterval(pollTimer);\r\n                    }\r\n                    try {\r\n                        if (popupWindow.document.URL.indexOf(_this.redirectUri) !== -1) {\r\n                            window.clearInterval(pollTimer);\r\n                            AdalClient._authContext.handleWindowCallback(popupWindow.location.hash);\r\n                            popupWindow.close();\r\n                            resolve();\r\n                        }\r\n                    }\r\n                    catch (e) {\r\n                        reject(e);\r\n                    }\r\n                }, 30);\r\n            };\r\n            // this triggers the login process\r\n            _this.ensureAuthContext().then(function (_) {\r\n                AdalClient._authContext._loginInProgress = false;\r\n                AdalClient._authContext.login();\r\n                _this._displayCallback = null;\r\n            });\r\n        });\r\n        return this._loginPromise;\r\n    };\r\n    /**\r\n     * Our auth context\r\n     */\r\n    AdalClient._authContext = null;\r\n    return AdalClient;\r\n}(BearerTokenFetchClient));\r\nexport { AdalClient };\r\n/**\r\n * Client wrapping the aadTokenProvider available from SPFx >= 1.6\r\n */\r\nvar SPFxAdalClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SPFxAdalClient, _super);\r\n    /**\r\n     *\r\n     * @param context provide the appropriate SPFx Context object\r\n     */\r\n    function SPFxAdalClient(context) {\r\n        var _this = _super.call(this, null) || this;\r\n        _this.context = context;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Executes a fetch request using the supplied url and options\r\n     *\r\n     * @param url Absolute url of the request\r\n     * @param options Any options\r\n     */\r\n    SPFxAdalClient.prototype.fetch = function (url, options) {\r\n        var _this = this;\r\n        return this.getToken(getResource(url)).then(function (token) {\r\n            _this.token = token;\r\n            return _super.prototype.fetch.call(_this, url, options);\r\n        });\r\n    };\r\n    /**\r\n     * Gets an AAD token for the provided resource using the SPFx AADTokenProvider\r\n     *\r\n     * @param resource Resource for which a token is to be requested (ex: https://graph.microsoft.com)\r\n     */\r\n    SPFxAdalClient.prototype.getToken = function (resource) {\r\n        return this.context.aadTokenProviderFactory.getTokenProvider().then(function (provider) {\r\n            return provider.getToken(resource);\r\n        });\r\n    };\r\n    return SPFxAdalClient;\r\n}(BearerTokenFetchClient));\r\nexport { SPFxAdalClient };\r\n//# sourceMappingURL=adalclient.js.map"",""import { isFunc } from \""./util\"";\r\n/**\r\n * Used to calculate the object properties, with polyfill if needed\r\n */\r\nvar objectEntries = isFunc(Object.entries) ? Object.entries : function (o) { return Object.keys(o).map(function (k) { return [k, o[k]]; }); };\r\n/**\r\n * Converts the supplied object to a map\r\n *\r\n * @param o The object to map\r\n */\r\nexport function objectToMap(o) {\r\n    if (o !== undefined && o !== null) {\r\n        return new Map(objectEntries(o));\r\n    }\r\n    return new Map();\r\n}\r\n/**\r\n * Merges to Map instances together, overwriting values in target with matching keys, last in wins\r\n *\r\n * @param target map into which the other maps are merged\r\n * @param maps One or more maps to merge into the target\r\n */\r\nexport function mergeMaps(target) {\r\n    var maps = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        maps[_i - 1] = arguments[_i];\r\n    }\r\n    for (var i = 0; i < maps.length; i++) {\r\n        maps[i].forEach(function (v, k) {\r\n            target.set(k, v);\r\n        });\r\n    }\r\n    return target;\r\n}\r\n//# sourceMappingURL=collections.js.map"",""export * from \""./adalclient\"";\r\nexport * from \""./collections\"";\r\nexport * from \""./libconfig\"";\r\nexport * from \""./netutil\"";\r\nexport * from \""./storage\"";\r\nexport * from \""./util\"";\r\n//# sourceMappingURL=common.js.map"",""import { mergeMaps, objectToMap } from \""./collections\"";\r\nexport function setup(config) {\r\n    RuntimeConfig.extend(config);\r\n}\r\n// lable mapping for known config values\r\nvar s = [\r\n    \""defaultCachingStore\"",\r\n    \""defaultCachingTimeoutSeconds\"",\r\n    \""globalCacheDisable\"",\r\n    \""enableCacheExpiration\"",\r\n    \""cacheExpirationIntervalMilliseconds\"",\r\n    \""spfxContext\"",\r\n];\r\nvar RuntimeConfigImpl = /** @class */ (function () {\r\n    function RuntimeConfigImpl(_v) {\r\n        if (_v === void 0) { _v = new Map(); }\r\n        this._v = _v;\r\n        // setup defaults\r\n        this._v.set(s[0], \""session\"");\r\n        this._v.set(s[1], 60);\r\n        this._v.set(s[2], false);\r\n        this._v.set(s[3], false);\r\n        this._v.set(s[4], 750);\r\n        this._v.set(s[5], null);\r\n    }\r\n    /**\r\n     *\r\n     * @param config The set of properties to add to the globa configuration instance\r\n     */\r\n    RuntimeConfigImpl.prototype.extend = function (config) {\r\n        this._v = mergeMaps(this._v, objectToMap(config));\r\n    };\r\n    RuntimeConfigImpl.prototype.get = function (key) {\r\n        return this._v.get(key);\r\n    };\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingStore\"", {\r\n        get: function () {\r\n            return this.get(s[0]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""defaultCachingTimeoutSeconds\"", {\r\n        get: function () {\r\n            return this.get(s[1]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""globalCacheDisable\"", {\r\n        get: function () {\r\n            return this.get(s[2]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""enableCacheExpiration\"", {\r\n        get: function () {\r\n            return this.get(s[3]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""cacheExpirationIntervalMilliseconds\"", {\r\n        get: function () {\r\n            return this.get(s[4]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(RuntimeConfigImpl.prototype, \""spfxContext\"", {\r\n        get: function () {\r\n            return this.get(s[5]);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return RuntimeConfigImpl;\r\n}());\r\nexport { RuntimeConfigImpl };\r\nvar _runtimeConfig = new RuntimeConfigImpl();\r\nexport var RuntimeConfig = _runtimeConfig;\r\n//# sourceMappingURL=libconfig.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, objectDefinedNotNull } from \""./util\"";\r\nexport function mergeHeaders(target, source) {\r\n    if (source !== undefined && source !== null) {\r\n        var temp = new Request(\""\"", { headers: source });\r\n        temp.headers.forEach(function (value, name) {\r\n            target.append(name, value);\r\n        });\r\n    }\r\n}\r\nexport function mergeOptions(target, source) {\r\n    if (objectDefinedNotNull(source)) {\r\n        var headers = extend(target.headers || {}, source.headers);\r\n        target = extend(target, source);\r\n        target.headers = headers;\r\n    }\r\n}\r\n/**\r\n * Makes requests using the global/window fetch API\r\n */\r\nvar FetchClient = /** @class */ (function () {\r\n    function FetchClient() {\r\n    }\r\n    FetchClient.prototype.fetch = function (url, options) {\r\n        return global.fetch(url, options);\r\n    };\r\n    return FetchClient;\r\n}());\r\nexport { FetchClient };\r\n/**\r\n * Makes requests using the fetch API adding the supplied token to the Authorization header\r\n */\r\nvar BearerTokenFetchClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BearerTokenFetchClient, _super);\r\n    function BearerTokenFetchClient(_token) {\r\n        var _this = _super.call(this) || this;\r\n        _this._token = _token;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(BearerTokenFetchClient.prototype, \""token\"", {\r\n        get: function () {\r\n            return this._token || \""\"";\r\n        },\r\n        set: function (token) {\r\n            this._token = token;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    BearerTokenFetchClient.prototype.fetch = function (url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        var headers = new Headers();\r\n        mergeHeaders(headers, options.headers);\r\n        headers.set(\""Authorization\"", \""Bearer \"" + this._token);\r\n        options.headers = headers;\r\n        return _super.prototype.fetch.call(this, url, options);\r\n    };\r\n    return BearerTokenFetchClient;\r\n}(FetchClient));\r\nexport { BearerTokenFetchClient };\r\n//# sourceMappingURL=netutil.js.map"",""import { dateAdd, getCtxCallback, jsS, objectDefinedNotNull } from \""./util\"";\r\nimport { RuntimeConfig } from \""./libconfig\"";\r\n/**\r\n * A wrapper class to provide a consistent interface to browser based storage\r\n *\r\n */\r\nvar PnPClientStorageWrapper = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the PnPClientStorageWrapper class\r\n     *\r\n     * @constructor\r\n     */\r\n    function PnPClientStorageWrapper(store, defaultTimeoutMinutes) {\r\n        if (defaultTimeoutMinutes === void 0) { defaultTimeoutMinutes = -1; }\r\n        this.store = store;\r\n        this.defaultTimeoutMinutes = defaultTimeoutMinutes;\r\n        this.enabled = this.test();\r\n        // if the cache timeout is enabled call the handler\r\n        // this will clear any expired items and set the timeout function\r\n        if (RuntimeConfig.enableCacheExpiration) {\r\n            this.cacheExpirationHandler();\r\n        }\r\n    }\r\n    /**\r\n     * Get a value from storage, or null if that value does not exist\r\n     *\r\n     * @param key The key whose value we want to retrieve\r\n     */\r\n    PnPClientStorageWrapper.prototype.get = function (key) {\r\n        if (!this.enabled) {\r\n            return null;\r\n        }\r\n        var o = this.store.getItem(key);\r\n        if (!objectDefinedNotNull(o)) {\r\n            return null;\r\n        }\r\n        var persistable = JSON.parse(o);\r\n        if (new Date(persistable.expiration) <= new Date()) {\r\n            this.delete(key);\r\n            return null;\r\n        }\r\n        else {\r\n            return persistable.value;\r\n        }\r\n    };\r\n    /**\r\n     * Adds a value to the underlying storage\r\n     *\r\n     * @param key The key to use when storing the provided value\r\n     * @param o The value to store\r\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\r\n     */\r\n    PnPClientStorageWrapper.prototype.put = function (key, o, expire) {\r\n        if (this.enabled) {\r\n            this.store.setItem(key, this.createPersistable(o, expire));\r\n        }\r\n    };\r\n    /**\r\n     * Deletes a value from the underlying storage\r\n     *\r\n     * @param key The key of the pair we want to remove from storage\r\n     */\r\n    PnPClientStorageWrapper.prototype.delete = function (key) {\r\n        if (this.enabled) {\r\n            this.store.removeItem(key);\r\n        }\r\n    };\r\n    /**\r\n     * Gets an item from the underlying storage, or adds it if it does not exist using the supplied getter function\r\n     *\r\n     * @param key The key to use when storing the provided value\r\n     * @param getter A function which will upon execution provide the desired value\r\n     * @param expire Optional, if provided the expiration of the item, otherwise the default is used\r\n     */\r\n    PnPClientStorageWrapper.prototype.getOrPut = function (key, getter, expire) {\r\n        var _this = this;\r\n        if (!this.enabled) {\r\n            return getter();\r\n        }\r\n        return new Promise(function (resolve) {\r\n            var o = _this.get(key);\r\n            if (o == null) {\r\n                getter().then(function (d) {\r\n                    _this.put(key, d, expire);\r\n                    resolve(d);\r\n                });\r\n            }\r\n            else {\r\n                resolve(o);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Deletes any expired items placed in the store by the pnp library, leaves other items untouched\r\n     */\r\n    PnPClientStorageWrapper.prototype.deleteExpired = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (!_this.enabled) {\r\n                resolve();\r\n            }\r\n            try {\r\n                for (var i = 0; i < _this.store.length; i++) {\r\n                    var key = _this.store.key(i);\r\n                    if (key !== null) {\r\n                        // test the stored item to see if we stored it\r\n                        if (/[\""|']?pnp[\""|']? ?: ?1/i.test(_this.store.getItem(key))) {\r\n                            // get those items as get will delete from cache if they are expired\r\n                            _this.get(key);\r\n                        }\r\n                    }\r\n                }\r\n                resolve();\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Used to determine if the wrapped storage is available currently\r\n     */\r\n    PnPClientStorageWrapper.prototype.test = function () {\r\n        var str = \""t\"";\r\n        try {\r\n            this.store.setItem(str, str);\r\n            this.store.removeItem(str);\r\n            return true;\r\n        }\r\n        catch (e) {\r\n            return false;\r\n        }\r\n    };\r\n    /**\r\n     * Creates the persistable to store\r\n     */\r\n    PnPClientStorageWrapper.prototype.createPersistable = function (o, expire) {\r\n        if (expire === undefined) {\r\n            // ensure we are by default inline with the global library setting\r\n            var defaultTimeout = RuntimeConfig.defaultCachingTimeoutSeconds;\r\n            if (this.defaultTimeoutMinutes > 0) {\r\n                defaultTimeout = this.defaultTimeoutMinutes * 60;\r\n            }\r\n            expire = dateAdd(new Date(), \""second\"", defaultTimeout);\r\n        }\r\n        return jsS({ pnp: 1, expiration: expire, value: o });\r\n    };\r\n    /**\r\n     * Deletes expired items added by this library in this.store and sets a timeout to call itself\r\n     */\r\n    PnPClientStorageWrapper.prototype.cacheExpirationHandler = function () {\r\n        var _this = this;\r\n        this.deleteExpired().then(function (_) {\r\n            // call ourself in the future\r\n            setTimeout(getCtxCallback(_this, _this.cacheExpirationHandler), RuntimeConfig.cacheExpirationIntervalMilliseconds);\r\n        }).catch(function (e) {\r\n            console.error(e);\r\n        });\r\n    };\r\n    return PnPClientStorageWrapper;\r\n}());\r\nexport { PnPClientStorageWrapper };\r\n/**\r\n * A thin implementation of in-memory storage for use in nodejs\r\n */\r\nvar MemoryStorage = /** @class */ (function () {\r\n    function MemoryStorage(_store) {\r\n        if (_store === void 0) { _store = new Map(); }\r\n        this._store = _store;\r\n    }\r\n    Object.defineProperty(MemoryStorage.prototype, \""length\"", {\r\n        get: function () {\r\n            return this._store.size;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    MemoryStorage.prototype.clear = function () {\r\n        this._store.clear();\r\n    };\r\n    MemoryStorage.prototype.getItem = function (key) {\r\n        return this._store.get(key);\r\n    };\r\n    MemoryStorage.prototype.key = function (index) {\r\n        return Array.from(this._store)[index][0];\r\n    };\r\n    MemoryStorage.prototype.removeItem = function (key) {\r\n        this._store.delete(key);\r\n    };\r\n    MemoryStorage.prototype.setItem = function (key, data) {\r\n        this._store.set(key, data);\r\n    };\r\n    return MemoryStorage;\r\n}());\r\n/**\r\n * A class that will establish wrappers for both local and session storage\r\n */\r\nvar PnPClientStorage = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the PnPClientStorage class\r\n     *\r\n     * @constructor\r\n     */\r\n    function PnPClientStorage(_local, _session) {\r\n        if (_local === void 0) { _local = null; }\r\n        if (_session === void 0) { _session = null; }\r\n        this._local = _local;\r\n        this._session = _session;\r\n    }\r\n    Object.defineProperty(PnPClientStorage.prototype, \""local\"", {\r\n        /**\r\n         * Provides access to the local storage of the browser\r\n         */\r\n        get: function () {\r\n            if (this._local === null) {\r\n                this._local = this.getStore(\""local\"");\r\n            }\r\n            return this._local;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(PnPClientStorage.prototype, \""session\"", {\r\n        /**\r\n         * Provides access to the session storage of the browser\r\n         */\r\n        get: function () {\r\n            if (this._session === null) {\r\n                this._session = this.getStore(\""session\"");\r\n            }\r\n            return this._session;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    PnPClientStorage.prototype.getStore = function (name) {\r\n        if (name === \""local\"") {\r\n            return new PnPClientStorageWrapper(typeof (localStorage) === \""undefined\"" ? new MemoryStorage() : localStorage);\r\n        }\r\n        return new PnPClientStorageWrapper(typeof (sessionStorage) === \""undefined\"" ? new MemoryStorage() : sessionStorage);\r\n    };\r\n    return PnPClientStorage;\r\n}());\r\nexport { PnPClientStorage };\r\n//# sourceMappingURL=storage.js.map"",""/**\r\n * Gets a callback function which will maintain context across async calls.\r\n * Allows for the calling pattern getCtxCallback(thisobj, method, methodarg1, methodarg2, ...)\r\n *\r\n * @param context The object that will be the 'this' value in the callback\r\n * @param method The method to which we will apply the context and parameters\r\n * @param params Optional, additional arguments to supply to the wrapped method when it is invoked\r\n */\r\nexport function getCtxCallback(context, method) {\r\n    var params = [];\r\n    for (var _i = 2; _i < arguments.length; _i++) {\r\n        params[_i - 2] = arguments[_i];\r\n    }\r\n    return function () {\r\n        method.apply(context, params);\r\n    };\r\n}\r\n/**\r\n * Adds a value to a date\r\n *\r\n * @param date The date to which we will add units, done in local time\r\n * @param interval The name of the interval to add, one of: ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second']\r\n * @param units The amount to add to date of the given interval\r\n *\r\n * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object\r\n */\r\nexport function dateAdd(date, interval, units) {\r\n    var ret = new Date(date); // don't change original date\r\n    switch (interval.toLowerCase()) {\r\n        case \""year\"":\r\n            ret.setFullYear(ret.getFullYear() + units);\r\n            break;\r\n        case \""quarter\"":\r\n            ret.setMonth(ret.getMonth() + 3 * units);\r\n            break;\r\n        case \""month\"":\r\n            ret.setMonth(ret.getMonth() + units);\r\n            break;\r\n        case \""week\"":\r\n            ret.setDate(ret.getDate() + 7 * units);\r\n            break;\r\n        case \""day\"":\r\n            ret.setDate(ret.getDate() + units);\r\n            break;\r\n        case \""hour\"":\r\n            ret.setTime(ret.getTime() + units * 3600000);\r\n            break;\r\n        case \""minute\"":\r\n            ret.setTime(ret.getTime() + units * 60000);\r\n            break;\r\n        case \""second\"":\r\n            ret.setTime(ret.getTime() + units * 1000);\r\n            break;\r\n        default:\r\n            ret = undefined;\r\n            break;\r\n    }\r\n    return ret;\r\n}\r\n/**\r\n * Combines an arbitrary set of paths ensuring and normalizes the slashes\r\n *\r\n * @param paths 0 to n path parts to combine\r\n */\r\nexport function combine() {\r\n    var paths = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        paths[_i] = arguments[_i];\r\n    }\r\n    return paths\r\n        .filter(function (path) { return !stringIsNullOrEmpty(path); })\r\n        .map(function (path) { return path.replace(/^[\\\\|\\/]/, \""\"").replace(/[\\\\|\\/]$/, \""\""); })\r\n        .join(\""/\"")\r\n        .replace(/\\\\/g, \""/\"");\r\n}\r\n/**\r\n * Gets a random string of chars length\r\n *\r\n * https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\r\n *\r\n * @param chars The length of the random string to generate\r\n */\r\nexport function getRandomString(chars) {\r\n    var text = new Array(chars);\r\n    var possible = \""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"";\r\n    for (var i = 0; i < chars; i++) {\r\n        text[i] = possible.charAt(Math.floor(Math.random() * possible.length));\r\n    }\r\n    return text.join(\""\"");\r\n}\r\n/**\r\n * Gets a random GUID value\r\n *\r\n * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\r\n */\r\n/* tslint:disable no-bitwise */\r\nexport function getGUID() {\r\n    var d = new Date().getTime();\r\n    var guid = \""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"".replace(/[xy]/g, function (c) {\r\n        var r = (d + Math.random() * 16) % 16 | 0;\r\n        d = Math.floor(d / 16);\r\n        return (c === \""x\"" ? r : (r & 0x3 | 0x8)).toString(16);\r\n    });\r\n    return guid;\r\n}\r\n/* tslint:enable */\r\n/**\r\n * Determines if a given value is a function\r\n *\r\n * @param cf The thing to test for functionness\r\n */\r\nexport function isFunc(cf) {\r\n    return typeof cf === \""function\"";\r\n}\r\n/**\r\n * Determines if an object is both defined and not null\r\n * @param obj Object to test\r\n */\r\nexport function objectDefinedNotNull(obj) {\r\n    return typeof obj !== \""undefined\"" && obj !== null;\r\n}\r\n/**\r\n * @returns whether the provided parameter is a JavaScript Array or not.\r\n*/\r\nexport function isArray(array) {\r\n    if (Array.isArray) {\r\n        return Array.isArray(array);\r\n    }\r\n    return array && typeof array.length === \""number\"" && array.constructor === Array;\r\n}\r\n/**\r\n * Provides functionality to extend the given object by doing a shallow copy\r\n *\r\n * @param target The object to which properties will be copied\r\n * @param source The source object from which properties will be copied\r\n * @param noOverwrite If true existing properties on the target are not overwritten from the source\r\n * @param filter If provided allows additional filtering on what properties are copied (propName: string) => boolean\r\n *\r\n */\r\nexport function extend(target, source, noOverwrite, filter) {\r\n    if (noOverwrite === void 0) { noOverwrite = false; }\r\n    if (filter === void 0) { filter = function () { return true; }; }\r\n    if (!objectDefinedNotNull(source)) {\r\n        return target;\r\n    }\r\n    // ensure we don't overwrite things we don't want overwritten\r\n    var check = noOverwrite ? function (o, i) { return !(i in o); } : function () { return true; };\r\n    // final filter we will use\r\n    var f = function (v) { return check(target, v) && filter(v); };\r\n    return Object.getOwnPropertyNames(source)\r\n        .filter(f)\r\n        .reduce(function (t, v) {\r\n        t[v] = source[v];\r\n        return t;\r\n    }, target);\r\n}\r\n/**\r\n * Determines if a given url is absolute\r\n *\r\n * @param url The url to check to see if it is absolute\r\n */\r\nexport function isUrlAbsolute(url) {\r\n    return /^https?:\\/\\/|^\\/\\//i.test(url);\r\n}\r\n/**\r\n * Determines if a string is null or empty or undefined\r\n *\r\n * @param s The string to test\r\n */\r\nexport function stringIsNullOrEmpty(s) {\r\n    return s === undefined || s === null || s.length < 1;\r\n}\r\n/**\r\n * Gets an attribute value from an html/xml string block. NOTE: if the input attribute value has\r\n * RegEx special characters they will be escaped in the returned string\r\n *\r\n * @param html HTML to search\r\n * @param attrName The name of the attribute to find\r\n */\r\nexport function getAttrValueFromString(html, attrName) {\r\n    // make the input safe for regex\r\n    html = html.replace(/[.*+?^${}()|[\\]\\\\]/g, \""\\\\$&\"");\r\n    var reg = new RegExp(attrName + \""\\\\s*?=\\\\s*?(\\\""|')([^\\\\1]*?)\\\\1\"", \""i\"");\r\n    var match = reg.exec(html);\r\n    return match !== null && match.length > 0 ? match[2] : null;\r\n}\r\n/**\r\n * Ensures guid values are represented consistently as \""ea123463-137d-4ae3-89b8-cf3fc578ca05\""\r\n *\r\n * @param guid The candidate guid\r\n */\r\nexport function sanitizeGuid(guid) {\r\n    if (stringIsNullOrEmpty(guid)) {\r\n        return guid;\r\n    }\r\n    var matches = /([0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12})/i.exec(guid);\r\n    return matches === null ? guid : matches[1];\r\n}\r\n/**\r\n * Shorthand for JSON.stringify\r\n *\r\n * @param o Any type of object\r\n */\r\nexport function jsS(o) {\r\n    return JSON.stringify(o);\r\n}\r\n/**\r\n * Shorthand for Object.hasOwnProperty\r\n *\r\n * @param o Object to check for\r\n * @param p Name of the property\r\n */\r\nexport function hOP(o, p) {\r\n    return Object.hasOwnProperty.call(o, p);\r\n}\r\n/**\r\n * Generates a ~unique hash code\r\n *\r\n * From: https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript\r\n */\r\n// tslint:disable:no-bitwise\r\nexport function getHashCode(s) {\r\n    var hash = 0;\r\n    if (s.length === 0) {\r\n        return hash;\r\n    }\r\n    for (var i = 0; i < s.length; i++) {\r\n        var chr = s.charCodeAt(i);\r\n        hash = ((hash << 5) - hash) + chr;\r\n        hash |= 0; // Convert to 32bit integer\r\n    }\r\n    return hash;\r\n}\r\n// tslint:enable:no-bitwise\r\n//# sourceMappingURL=util.js.map"",""export * from \""./src/logging\"";\r\n//# sourceMappingURL=index.js.map"",""/**\r\n * Implementation of LogListener which logs to the console\r\n *\r\n */\r\nvar ConsoleListener = /** @class */ (function () {\r\n    function ConsoleListener() {\r\n    }\r\n    /**\r\n     * Any associated data that a given logging listener may choose to log or ignore\r\n     *\r\n     * @param entry The information to be logged\r\n     */\r\n    ConsoleListener.prototype.log = function (entry) {\r\n        var msg = this.format(entry);\r\n        switch (entry.level) {\r\n            case 0 /* Verbose */:\r\n            case 1 /* Info */:\r\n                console.log(msg);\r\n                break;\r\n            case 2 /* Warning */:\r\n                console.warn(msg);\r\n                break;\r\n            case 3 /* Error */:\r\n                console.error(msg);\r\n                break;\r\n        }\r\n    };\r\n    /**\r\n     * Formats the message\r\n     *\r\n     * @param entry The information to format into a string\r\n     */\r\n    ConsoleListener.prototype.format = function (entry) {\r\n        var msg = [];\r\n        msg.push(\""Message: \"" + entry.message);\r\n        if (entry.data !== undefined) {\r\n            msg.push(\"" Data: \"" + JSON.stringify(entry.data));\r\n        }\r\n        return msg.join(\""\"");\r\n    };\r\n    return ConsoleListener;\r\n}());\r\nexport { ConsoleListener };\r\n/**\r\n * Implementation of LogListener which logs to the supplied function\r\n *\r\n */\r\nvar FunctionListener = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of the FunctionListener class\r\n     *\r\n     * @constructor\r\n     * @param  method The method to which any logging data will be passed\r\n     */\r\n    function FunctionListener(method) {\r\n        this.method = method;\r\n    }\r\n    /**\r\n     * Any associated data that a given logging listener may choose to log or ignore\r\n     *\r\n     * @param entry The information to be logged\r\n     */\r\n    FunctionListener.prototype.log = function (entry) {\r\n        this.method(entry);\r\n    };\r\n    return FunctionListener;\r\n}());\r\nexport { FunctionListener };\r\n//# sourceMappingURL=listeners.js.map"",""/**\r\n * Class used to subscribe ILogListener and log messages throughout an application\r\n *\r\n */\r\nvar Logger = /** @class */ (function () {\r\n    function Logger() {\r\n    }\r\n    Object.defineProperty(Logger, \""activeLogLevel\"", {\r\n        /**\r\n         * Gets or sets the active log level to apply for log filtering\r\n         */\r\n        get: function () {\r\n            return Logger.instance.activeLogLevel;\r\n        },\r\n        set: function (value) {\r\n            Logger.instance.activeLogLevel = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Logger, \""instance\"", {\r\n        get: function () {\r\n            if (Logger._instance === undefined || Logger._instance === null) {\r\n                Logger._instance = new LoggerImpl();\r\n            }\r\n            return Logger._instance;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds ILogListener instances to the set of subscribed listeners\r\n     *\r\n     * @param listeners One or more listeners to subscribe to this log\r\n     */\r\n    Logger.subscribe = function () {\r\n        var listeners = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            listeners[_i] = arguments[_i];\r\n        }\r\n        listeners.map(function (listener) { return Logger.instance.subscribe(listener); });\r\n    };\r\n    /**\r\n     * Clears the subscribers collection, returning the collection before modifiction\r\n     */\r\n    Logger.clearSubscribers = function () {\r\n        return Logger.instance.clearSubscribers();\r\n    };\r\n    Object.defineProperty(Logger, \""count\"", {\r\n        /**\r\n         * Gets the current subscriber count\r\n         */\r\n        get: function () {\r\n            return Logger.instance.count;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Writes the supplied string to the subscribed listeners\r\n     *\r\n     * @param message The message to write\r\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info)\r\n     */\r\n    Logger.write = function (message, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        Logger.instance.log({ level: level, message: message });\r\n    };\r\n    /**\r\n     * Writes the supplied string to the subscribed listeners\r\n     *\r\n     * @param json The json object to stringify and write\r\n     * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info)\r\n     */\r\n    Logger.writeJSON = function (json, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        this.write(JSON.stringify(json), level);\r\n    };\r\n    /**\r\n     * Logs the supplied entry to the subscribed listeners\r\n     *\r\n     * @param entry The message to log\r\n     */\r\n    Logger.log = function (entry) {\r\n        Logger.instance.log(entry);\r\n    };\r\n    /**\r\n     * Logs an error object to the subscribed listeners\r\n     *\r\n     * @param err The error object\r\n     */\r\n    Logger.error = function (err) {\r\n        Logger.instance.log({ data: err, level: 3 /* Error */, message: err.message });\r\n    };\r\n    return Logger;\r\n}());\r\nexport { Logger };\r\nvar LoggerImpl = /** @class */ (function () {\r\n    function LoggerImpl(activeLogLevel, subscribers) {\r\n        if (activeLogLevel === void 0) { activeLogLevel = 2 /* Warning */; }\r\n        if (subscribers === void 0) { subscribers = []; }\r\n        this.activeLogLevel = activeLogLevel;\r\n        this.subscribers = subscribers;\r\n    }\r\n    LoggerImpl.prototype.subscribe = function (listener) {\r\n        this.subscribers.push(listener);\r\n    };\r\n    LoggerImpl.prototype.clearSubscribers = function () {\r\n        var s = this.subscribers.slice(0);\r\n        this.subscribers.length = 0;\r\n        return s;\r\n    };\r\n    Object.defineProperty(LoggerImpl.prototype, \""count\"", {\r\n        get: function () {\r\n            return this.subscribers.length;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    LoggerImpl.prototype.write = function (message, level) {\r\n        if (level === void 0) { level = 1 /* Info */; }\r\n        this.log({ level: level, message: message });\r\n    };\r\n    LoggerImpl.prototype.log = function (entry) {\r\n        if (entry !== undefined && this.activeLogLevel <= entry.level) {\r\n            this.subscribers.map(function (subscriber) { return subscriber.log(entry); });\r\n        }\r\n    };\r\n    return LoggerImpl;\r\n}());\r\n//# sourceMappingURL=logger.js.map"",""export { Logger } from \""./logger\"";\r\nexport { LogLevel } from \""./loglevel\"";\r\nexport { ConsoleListener, FunctionListener } from \""./listeners\"";\r\n//# sourceMappingURL=logging.js.map"",""/**\r\n * A set of logging levels\r\n */\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n    LogLevel[LogLevel[\""Verbose\""] = 0] = \""Verbose\"";\r\n    LogLevel[LogLevel[\""Info\""] = 1] = \""Info\"";\r\n    LogLevel[LogLevel[\""Warning\""] = 2] = \""Warning\"";\r\n    LogLevel[LogLevel[\""Error\""] = 3] = \""Error\"";\r\n    LogLevel[LogLevel[\""Off\""] = 99] = \""Off\"";\r\n})(LogLevel || (LogLevel = {}));\r\n//# sourceMappingURL=loglevel.js.map"",""export * from \""./src/odata\"";\r\n//# sourceMappingURL=index.js.map"",""import { RuntimeConfig, dateAdd, PnPClientStorage } from \""@pnp/common\"";\r\nvar CachingOptions = /** @class */ (function () {\r\n    function CachingOptions(key) {\r\n        this.key = key;\r\n        this.expiration = dateAdd(new Date(), \""second\"", RuntimeConfig.defaultCachingTimeoutSeconds);\r\n        this.storeName = RuntimeConfig.defaultCachingStore;\r\n    }\r\n    Object.defineProperty(CachingOptions.prototype, \""store\"", {\r\n        get: function () {\r\n            if (this.storeName === \""local\"") {\r\n                return CachingOptions.storage.local;\r\n            }\r\n            else {\r\n                return CachingOptions.storage.session;\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    CachingOptions.storage = new PnPClientStorage();\r\n    return CachingOptions;\r\n}());\r\nexport { CachingOptions };\r\nvar CachingParserWrapper = /** @class */ (function () {\r\n    function CachingParserWrapper(parser, cacheOptions) {\r\n        this.parser = parser;\r\n        this.cacheOptions = cacheOptions;\r\n    }\r\n    CachingParserWrapper.prototype.parse = function (response) {\r\n        var _this = this;\r\n        return this.parser.parse(response).then(function (r) { return _this.cacheData(r); });\r\n    };\r\n    CachingParserWrapper.prototype.cacheData = function (data) {\r\n        if (this.cacheOptions.store !== null) {\r\n            this.cacheOptions.store.put(this.cacheOptions.key, data, this.cacheOptions.expiration);\r\n        }\r\n        return data;\r\n    };\r\n    return CachingParserWrapper;\r\n}());\r\nexport { CachingParserWrapper };\r\n//# sourceMappingURL=caching.js.map"",""export * from \""./caching\"";\r\nexport * from \""./parsers\"";\r\nexport * from \""./pipeline\"";\r\nexport * from \""./queryable\"";\r\nexport * from \""./odatabatch\"";\r\n//# sourceMappingURL=odata.js.map"",""import { getGUID } from \""@pnp/common\"";\r\nvar ODataBatch = /** @class */ (function () {\r\n    function ODataBatch(_batchId) {\r\n        if (_batchId === void 0) { _batchId = getGUID(); }\r\n        this._batchId = _batchId;\r\n        this._reqs = [];\r\n        this._deps = [];\r\n        this._rDeps = [];\r\n    }\r\n    Object.defineProperty(ODataBatch.prototype, \""batchId\"", {\r\n        get: function () {\r\n            return this._batchId;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ODataBatch.prototype, \""requests\"", {\r\n        /**\r\n         * The requests contained in this batch\r\n         */\r\n        get: function () {\r\n            return this._reqs;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     *\r\n     * @param url Request url\r\n     * @param method Request method (GET, POST, etc)\r\n     * @param options Any request options\r\n     * @param parser The parser used to handle the eventual return from the query\r\n     * @param id An identifier used to track a request within a batch\r\n     */\r\n    ODataBatch.prototype.add = function (url, method, options, parser, id) {\r\n        var info = {\r\n            id: id,\r\n            method: method.toUpperCase(),\r\n            options: options,\r\n            parser: parser,\r\n            reject: null,\r\n            resolve: null,\r\n            url: url,\r\n        };\r\n        var p = new Promise(function (resolve, reject) {\r\n            info.resolve = resolve;\r\n            info.reject = reject;\r\n        });\r\n        this._reqs.push(info);\r\n        return p;\r\n    };\r\n    /**\r\n     * Adds a dependency insuring that some set of actions will occur before a batch is processed.\r\n     * MUST be cleared using the returned resolve delegate to allow batches to run\r\n     */\r\n    ODataBatch.prototype.addDependency = function () {\r\n        var resolver = function () { return void (0); };\r\n        this._deps.push(new Promise(function (resolve) {\r\n            resolver = resolve;\r\n        }));\r\n        return resolver;\r\n    };\r\n    /**\r\n     * The batch's execute method will not resolve util any promises added here resolve\r\n     *\r\n     * @param p The dependent promise\r\n     */\r\n    ODataBatch.prototype.addResolveBatchDependency = function (p) {\r\n        this._rDeps.push(p);\r\n    };\r\n    /**\r\n     * Execute the current batch and resolve the associated promises\r\n     *\r\n     * @returns A promise which will be resolved once all of the batch's child promises have resolved\r\n     */\r\n    ODataBatch.prototype.execute = function () {\r\n        var _this = this;\r\n        // we need to check the dependencies twice due to how different engines handle things.\r\n        // We can get a second set of promises added during the first set resolving\r\n        return Promise.all(this._deps)\r\n            .then(function () { return Promise.all(_this._deps); })\r\n            .then(function () { return _this.executeImpl(); })\r\n            .then(function () { return Promise.all(_this._rDeps); })\r\n            .then(function () { return void (0); });\r\n    };\r\n    return ODataBatch;\r\n}());\r\nexport { ODataBatch };\r\n//# sourceMappingURL=odatabatch.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { isFunc, hOP } from \""@pnp/common\"";\r\nvar HttpRequestError = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HttpRequestError, _super);\r\n    function HttpRequestError(message, response, status, statusText) {\r\n        if (status === void 0) { status = response.status; }\r\n        if (statusText === void 0) { statusText = response.statusText; }\r\n        var _this = _super.call(this, message) || this;\r\n        _this.response = response;\r\n        _this.status = status;\r\n        _this.statusText = statusText;\r\n        _this.isHttpRequestError = true;\r\n        return _this;\r\n    }\r\n    return HttpRequestError;\r\n}(Error));\r\nexport { HttpRequestError };\r\nvar ODataParserBase = /** @class */ (function () {\r\n    function ODataParserBase() {\r\n    }\r\n    ODataParserBase.prototype.parse = function (r) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            if (_this.handleError(r, reject)) {\r\n                _this.parseImpl(r, resolve, reject);\r\n            }\r\n        });\r\n    };\r\n    ODataParserBase.prototype.parseImpl = function (r, resolve, reject) {\r\n        var _this = this;\r\n        if ((r.headers.has(\""Content-Length\"") && parseFloat(r.headers.get(\""Content-Length\"")) === 0) || r.status === 204) {\r\n            resolve({});\r\n        }\r\n        else {\r\n            // patch to handle cases of 200 response with no or whitespace only bodies (#487 & #545)\r\n            r.text()\r\n                .then(function (txt) { return txt.replace(/\\s/ig, \""\"").length > 0 ? JSON.parse(txt) : {}; })\r\n                .then(function (json) { return resolve(_this.parseODataJSON(json)); })\r\n                .catch(function (e) { return reject(e); });\r\n        }\r\n    };\r\n    /**\r\n     * Handles a response with ok === false by parsing the body and creating a ProcessHttpClientResponseException\r\n     * which is passed to the reject delegate. This method returns true if there is no error, otherwise false\r\n     *\r\n     * @param r Current response object\r\n     * @param reject reject delegate for the surrounding promise\r\n     */\r\n    ODataParserBase.prototype.handleError = function (r, reject) {\r\n        if (!r.ok) {\r\n            reject(new HttpRequestError(\""Error making HttpClient request in queryable: [\"" + r.status + \""] \"" + r.statusText, r.clone()));\r\n        }\r\n        return r.ok;\r\n    };\r\n    /**\r\n     * Normalizes the json response by removing the various nested levels\r\n     *\r\n     * @param json json object to parse\r\n     */\r\n    ODataParserBase.prototype.parseODataJSON = function (json) {\r\n        var result = json;\r\n        if (hOP(json, \""d\"")) {\r\n            if (hOP(json.d, \""results\"")) {\r\n                result = json.d.results;\r\n            }\r\n            else {\r\n                result = json.d;\r\n            }\r\n        }\r\n        else if (hOP(json, \""value\"")) {\r\n            result = json.value;\r\n        }\r\n        return result;\r\n    };\r\n    return ODataParserBase;\r\n}());\r\nexport { ODataParserBase };\r\nvar ODataDefaultParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ODataDefaultParser, _super);\r\n    function ODataDefaultParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return ODataDefaultParser;\r\n}(ODataParserBase));\r\nexport { ODataDefaultParser };\r\nvar TextParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TextParser, _super);\r\n    function TextParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TextParser.prototype.parseImpl = function (r, resolve) {\r\n        r.text().then(resolve);\r\n    };\r\n    return TextParser;\r\n}(ODataParserBase));\r\nexport { TextParser };\r\nvar BlobParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BlobParser, _super);\r\n    function BlobParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BlobParser.prototype.parseImpl = function (r, resolve) {\r\n        r.blob().then(resolve);\r\n    };\r\n    return BlobParser;\r\n}(ODataParserBase));\r\nexport { BlobParser };\r\nvar JSONParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JSONParser, _super);\r\n    function JSONParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    JSONParser.prototype.parseImpl = function (r, resolve) {\r\n        r.json().then(resolve);\r\n    };\r\n    return JSONParser;\r\n}(ODataParserBase));\r\nexport { JSONParser };\r\nvar BufferParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BufferParser, _super);\r\n    function BufferParser() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    BufferParser.prototype.parseImpl = function (r, resolve) {\r\n        if (isFunc(r.arrayBuffer)) {\r\n            r.arrayBuffer().then(resolve);\r\n        }\r\n        else {\r\n            r.buffer().then(resolve);\r\n        }\r\n    };\r\n    return BufferParser;\r\n}(ODataParserBase));\r\nexport { BufferParser };\r\nvar LambdaParser = /** @class */ (function (_super) {\r\n    tslib_1.__extends(LambdaParser, _super);\r\n    function LambdaParser(parser) {\r\n        var _this = _super.call(this) || this;\r\n        _this.parser = parser;\r\n        return _this;\r\n    }\r\n    LambdaParser.prototype.parseImpl = function (r, resolve) {\r\n        this.parser(r).then(resolve);\r\n    };\r\n    return LambdaParser;\r\n}(ODataParserBase));\r\nexport { LambdaParser };\r\n//# sourceMappingURL=parsers.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { extend, isFunc, hOP } from \""@pnp/common\"";\r\nimport { Logger } from \""@pnp/logging\"";\r\nimport { CachingOptions, CachingParserWrapper } from \""./caching\"";\r\n/**\r\n * Resolves the context's result value\r\n *\r\n * @param context The current context\r\n */\r\nfunction returnResult(context) {\r\n    Logger.log({\r\n        data: Logger.activeLogLevel === 0 /* Verbose */ ? context.result : {},\r\n        level: 1 /* Info */,\r\n        message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Returning result from pipeline. Set logging to verbose to see data.\"",\r\n    });\r\n    return Promise.resolve(context.result);\r\n}\r\n/**\r\n * Sets the result on the context\r\n */\r\nexport function setResult(context, value) {\r\n    return new Promise(function (resolve) {\r\n        context.result = value;\r\n        context.hasResult = true;\r\n        resolve(context);\r\n    });\r\n}\r\n/**\r\n * Invokes the next method in the provided context's pipeline\r\n *\r\n * @param c The current request context\r\n */\r\nfunction next(c) {\r\n    if (c.pipeline.length > 0) {\r\n        return c.pipeline.shift()(c);\r\n    }\r\n    else {\r\n        return Promise.resolve(c);\r\n    }\r\n}\r\n/**\r\n * Executes the current request context's pipeline\r\n *\r\n * @param context Current context\r\n */\r\nexport function pipe(context) {\r\n    if (context.pipeline.length < 1) {\r\n        Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Request pipeline contains no methods!\"", 2 /* Warning */);\r\n    }\r\n    var promise = next(context).then(function (ctx) { return returnResult(ctx); }).catch(function (e) {\r\n        Logger.error(e);\r\n        throw e;\r\n    });\r\n    if (context.isBatched) {\r\n        // this will block the batch's execute method from returning until the child requets have been resolved\r\n        context.batch.addResolveBatchDependency(promise);\r\n    }\r\n    return promise;\r\n}\r\n/**\r\n * decorator factory applied to methods in the pipeline to control behavior\r\n */\r\nexport function requestPipelineMethod(alwaysRun) {\r\n    if (alwaysRun === void 0) { alwaysRun = false; }\r\n    return function (target, propertyKey, descriptor) {\r\n        var method = descriptor.value;\r\n        descriptor.value = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            // if we have a result already in the pipeline, pass it along and don't call the tagged method\r\n            if (!alwaysRun && args.length > 0 && hOP(args[0], \""hasResult\"") && args[0].hasResult) {\r\n                Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Skipping request pipeline method \"" + propertyKey + \"", existing result in pipeline.\"", 0 /* Verbose */);\r\n                return Promise.resolve(args[0]);\r\n            }\r\n            // apply the tagged method\r\n            Logger.write(\""[\"" + args[0].requestId + \""] (\"" + (new Date()).getTime() + \"") Calling request pipeline method \"" + propertyKey + \"".\"", 0 /* Verbose */);\r\n            // then chain the next method in the context's pipeline - allows for dynamic pipeline\r\n            return method.apply(target, args).then(function (ctx) { return next(ctx); });\r\n        };\r\n    };\r\n}\r\n/**\r\n * Contains the methods used within the request pipeline\r\n */\r\nvar PipelineMethods = /** @class */ (function () {\r\n    function PipelineMethods() {\r\n    }\r\n    /**\r\n     * Logs the start of the request\r\n     */\r\n    PipelineMethods.logStart = function (context) {\r\n        return new Promise(function (resolve) {\r\n            Logger.log({\r\n                data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                level: 1 /* Info */,\r\n                message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Beginning \"" + context.verb + \"" request (\"" + context.requestAbsoluteUrl + \"")\"",\r\n            });\r\n            resolve(context);\r\n        });\r\n    };\r\n    /**\r\n     * Handles caching of the request\r\n     */\r\n    PipelineMethods.caching = function (context) {\r\n        return new Promise(function (resolve) {\r\n            // handle caching, if applicable\r\n            if (context.isCached) {\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Caching is enabled for request, checking cache...\"", 1 /* Info */);\r\n                var cacheOptions = new CachingOptions(context.requestAbsoluteUrl.toLowerCase());\r\n                if (context.cachingOptions !== undefined) {\r\n                    cacheOptions = extend(cacheOptions, context.cachingOptions);\r\n                }\r\n                // we may not have a valid store\r\n                if (cacheOptions.store !== null) {\r\n                    // check if we have the data in cache and if so resolve the promise and return\r\n                    var data = cacheOptions.store.get(cacheOptions.key);\r\n                    if (data !== null) {\r\n                        // ensure we clear any held batch dependency we are resolving from the cache\r\n                        Logger.log({\r\n                            data: Logger.activeLogLevel === 1 /* Info */ ? {} : data,\r\n                            level: 1 /* Info */,\r\n                            message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value returned from cache.\"",\r\n                        });\r\n                        if (isFunc(context.batchDependency)) {\r\n                            context.batchDependency();\r\n                        }\r\n                        // handle the case where a parser needs to take special actions with a cached result\r\n                        if (hOP(context.parser, \""hydrate\"")) {\r\n                            data = context.parser.hydrate(data);\r\n                        }\r\n                        return setResult(context, data).then(function (ctx) { return resolve(ctx); });\r\n                    }\r\n                }\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Value not found in cache.\"", 1 /* Info */);\r\n                // if we don't then wrap the supplied parser in the caching parser wrapper\r\n                // and send things on their way\r\n                context.parser = new CachingParserWrapper(context.parser, cacheOptions);\r\n            }\r\n            return resolve(context);\r\n        });\r\n    };\r\n    /**\r\n     * Sends the request\r\n     */\r\n    PipelineMethods.send = function (context) {\r\n        return new Promise(function (resolve, reject) {\r\n            // send or batch the request\r\n            if (context.isBatched) {\r\n                // we are in a batch, so add to batch, remove dependency, and resolve with the batch's promise\r\n                var p = context.batch.add(context.requestAbsoluteUrl, context.verb, context.options, context.parser, context.requestId);\r\n                // we release the dependency here to ensure the batch does not execute until the request is added to the batch\r\n                if (isFunc(context.batchDependency)) {\r\n                    context.batchDependency();\r\n                }\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Batching request in batch \"" + context.batch.batchId + \"".\"", 1 /* Info */);\r\n                // we set the result as the promise which will be resolved by the batch's execution\r\n                resolve(setResult(context, p));\r\n            }\r\n            else {\r\n                Logger.write(\""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Sending request.\"", 1 /* Info */);\r\n                // we are not part of a batch, so proceed as normal\r\n                var client = context.clientFactory();\r\n                var opts = extend(context.options || {}, { method: context.verb });\r\n                client.fetch(context.requestAbsoluteUrl, opts)\r\n                    .then(function (response) { return context.parser.parse(response); })\r\n                    .then(function (result) { return setResult(context, result); })\r\n                    .then(function (ctx) { return resolve(ctx); })\r\n                    .catch(function (e) { return reject(e); });\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Logs the end of the request\r\n     */\r\n    PipelineMethods.logEnd = function (context) {\r\n        return new Promise(function (resolve) {\r\n            if (context.isBatched) {\r\n                Logger.log({\r\n                    data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                    level: 1 /* Info */,\r\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") \"" + context.verb + \"" request will complete in batch \"" + context.batch.batchId + \"".\"",\r\n                });\r\n            }\r\n            else {\r\n                Logger.log({\r\n                    data: Logger.activeLogLevel === 1 /* Info */ ? {} : context,\r\n                    level: 1 /* Info */,\r\n                    message: \""[\"" + context.requestId + \""] (\"" + (new Date()).getTime() + \"") Completing \"" + context.verb + \"" request.\"",\r\n                });\r\n            }\r\n            resolve(context);\r\n        });\r\n    };\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod(true)\r\n    ], PipelineMethods, \""logStart\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod()\r\n    ], PipelineMethods, \""caching\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod()\r\n    ], PipelineMethods, \""send\"", null);\r\n    tslib_1.__decorate([\r\n        requestPipelineMethod(true)\r\n    ], PipelineMethods, \""logEnd\"", null);\r\n    return PipelineMethods;\r\n}());\r\nexport { PipelineMethods };\r\nexport function getDefaultPipeline() {\r\n    return [\r\n        PipelineMethods.logStart,\r\n        PipelineMethods.caching,\r\n        PipelineMethods.send,\r\n        PipelineMethods.logEnd,\r\n    ].slice(0);\r\n}\r\n//# sourceMappingURL=pipeline.js.map"",""import * as tslib_1 from \""tslib\"";\r\nimport { combine, RuntimeConfig, mergeOptions, objectDefinedNotNull, } from \""@pnp/common\"";\r\nimport { ODataDefaultParser, JSONParser } from \""./parsers\"";\r\nimport { getDefaultPipeline, pipe, } from \""./pipeline\"";\r\nvar Queryable = /** @class */ (function () {\r\n    function Queryable() {\r\n        this._query = new Map();\r\n        this._options = {};\r\n        this._url = \""\"";\r\n        this._parentUrl = \""\"";\r\n        this._useCaching = false;\r\n        this._cachingOptions = null;\r\n        this._cloneParentWasCaching = false;\r\n        this._cloneParentCacheOptions = null;\r\n    }\r\n    /**\r\n    * Gets the currentl url\r\n    *\r\n    */\r\n    Queryable.prototype.toUrl = function () {\r\n        return this._url;\r\n    };\r\n    /**\r\n     * Directly concatonates the supplied string to the current url, not normalizing \""/\"" chars\r\n     *\r\n     * @param pathPart The string to concatonate to the url\r\n     */\r\n    Queryable.prototype.concat = function (pathPart) {\r\n        this._url += pathPart;\r\n        return this;\r\n    };\r\n    Object.defineProperty(Queryable.prototype, \""query\"", {\r\n        /**\r\n         * Provides access to the query builder for this url\r\n         *\r\n         */\r\n        get: function () {\r\n            return this._query;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Sets custom options for current object and all derived objects accessible via chaining\r\n     *\r\n     * @param options custom options\r\n     */\r\n    Queryable.prototype.configure = function (options) {\r\n        mergeOptions(this._options, options);\r\n        return this;\r\n    };\r\n    /**\r\n     * Configures this instance from the configure options of the supplied instance\r\n     *\r\n     * @param o Instance from which options should be taken\r\n     */\r\n    Queryable.prototype.configureFrom = function (o) {\r\n        mergeOptions(this._options, o._options);\r\n        return this;\r\n    };\r\n    /**\r\n     * Enables caching for this request\r\n     *\r\n     * @param options Defines the options used when caching this request\r\n     */\r\n    Queryable.prototype.usingCaching = function (options) {\r\n        if (!RuntimeConfig.globalCacheDisable) {\r\n            this._useCaching = true;\r\n            if (options !== undefined) {\r\n                this._cachingOptions = options;\r\n            }\r\n        }\r\n        return this;\r\n    };\r\n    Queryable.prototype.getCore = function (parser, options) {\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        // Fix for #304 - when we clone objects we in some cases then execute a get request\r\n        // in these cases the caching settings were getting dropped from the request\r\n        // this tracks if the object from which this was clones was caching and applies that to an immediate get request\r\n        // does not affect objects cloned from this as we are using different fields to track the settings so it won't\r\n        // be triggered\r\n        if (this._cloneParentWasCaching) {\r\n            this.usingCaching(this._cloneParentCacheOptions);\r\n        }\r\n        return this.toRequestContext(\""GET\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    Queryable.prototype.postCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.toRequestContext(\""POST\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    Queryable.prototype.patchCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.toRequestContext(\""PATCH\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    Queryable.prototype.deleteCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.toRequestContext(\""DELETE\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    Queryable.prototype.putCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new JSONParser(); }\r\n        return this.toRequestContext(\""PUT\"", options, parser, getDefaultPipeline()).then(function (context) { return pipe(context); });\r\n    };\r\n    /**\r\n     * Appends the given string and normalizes \""/\"" chars\r\n     *\r\n     * @param pathPart The string to append\r\n     */\r\n    Queryable.prototype.append = function (pathPart) {\r\n        this._url = combine(this._url, pathPart);\r\n    };\r\n    Object.defineProperty(Queryable.prototype, \""parentUrl\"", {\r\n        /**\r\n         * Gets the parent url used when creating this instance\r\n         *\r\n         */\r\n        get: function () {\r\n            return this._parentUrl;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Extends this queryable from the provided parent\r\n     *\r\n     * @param parent Parent queryable from which we will derive a base url\r\n     * @param path Additional path\r\n     */\r\n    Queryable.prototype.extend = function (parent, path) {\r\n        this._parentUrl = parent._url;\r\n        this._url = combine(this._parentUrl, path || \""\"");\r\n        this.configureFrom(parent);\r\n    };\r\n    /**\r\n     * Configures a cloned object from this instance\r\n     *\r\n     * @param clone\r\n     */\r\n    Queryable.prototype._clone = function (clone, _0) {\r\n        clone.configureFrom(this);\r\n        if (this._useCaching) {\r\n            clone._cloneParentWasCaching = true;\r\n            clone._cloneParentCacheOptions = this._cachingOptions;\r\n        }\r\n        return clone;\r\n    };\r\n    return Queryable;\r\n}());\r\nexport { Queryable };\r\nvar ODataQueryable = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ODataQueryable, _super);\r\n    function ODataQueryable() {\r\n        var _this = _super.call(this) || this;\r\n        _this._batch = null;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Adds this query to the supplied batch\r\n     *\r\n     * @example\r\n     * ```\r\n     *\r\n     * let b = pnp.sp.createBatch();\r\n     * pnp.sp.web.inBatch(b).get().then(...);\r\n     * b.execute().then(...)\r\n     * ```\r\n     */\r\n    ODataQueryable.prototype.inBatch = function (batch) {\r\n        if (this.batch !== null) {\r\n            throw Error(\""This query is already part of a batch.\"");\r\n        }\r\n        this._batch = batch;\r\n        return this;\r\n    };\r\n    /**\r\n     * Gets the currentl url\r\n     *\r\n     */\r\n    ODataQueryable.prototype.toUrl = function () {\r\n        return this._url;\r\n    };\r\n    /**\r\n     * Executes the currently built request\r\n     *\r\n     * @param parser Allows you to specify a parser to handle the result\r\n     * @param getOptions The options used for this request\r\n     */\r\n    ODataQueryable.prototype.get = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return this.getCore(parser, options);\r\n    };\r\n    ODataQueryable.prototype.getCore = function (parser, options) {\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        if (options === void 0) { options = {}; }\r\n        return _super.prototype.getCore.call(this, parser, options);\r\n    };\r\n    ODataQueryable.prototype.postCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.postCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.patchCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.patchCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.deleteCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.deleteCore.call(this, options, parser);\r\n    };\r\n    ODataQueryable.prototype.putCore = function (options, parser) {\r\n        if (options === void 0) { options = {}; }\r\n        if (parser === void 0) { parser = new ODataDefaultParser(); }\r\n        return _super.prototype.putCore.call(this, options, parser);\r\n    };\r\n    /**\r\n     * Blocks a batch call from occuring, MUST be cleared by calling the returned function\r\n    */\r\n    ODataQueryable.prototype.addBatchDependency = function () {\r\n        if (this._batch !== null) {\r\n            return this._batch.addDependency();\r\n        }\r\n        return function () { return null; };\r\n    };\r\n    Object.defineProperty(ODataQueryable.prototype, \""hasBatch\"", {\r\n        /**\r\n         * Indicates if the current query has a batch associated\r\n         *\r\n         */\r\n        get: function () {\r\n            return objectDefinedNotNull(this._batch);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ODataQueryable.prototype, \""batch\"", {\r\n        /**\r\n         * The batch currently associated with this query or null\r\n         *\r\n         */\r\n        get: function () {\r\n            return this.hasBatch ? this._batch : null;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Configures a cloned object from this instance\r\n     *\r\n     * @param clone\r\n     */\r\n    ODataQueryable.prototype._clone = function (clone, cloneSettings) {\r\n        clone = _super.prototype._clone.call(this, clone, cloneSettings);\r\n        if (cloneSettings.includeBatch) {\r\n            clone = clone.inBatch(this._batch);\r\n        }\r\n        return clone;\r\n    };\r\n    return ODataQueryable;\r\n}(Queryable));\r\nexport { ODataQueryable };\r\n//# sourceMappingURL=queryable.js.map"",""/*! adal-angular v1.0.17 2018-02-27 */\r\nvar AuthenticationContext=function(){\""use strict\"";return AuthenticationContext=function(a){if(this.REQUEST_TYPE={LOGIN:\""LOGIN\"",RENEW_TOKEN:\""RENEW_TOKEN\"",UNKNOWN:\""UNKNOWN\""},this.RESPONSE_TYPE={ID_TOKEN_TOKEN:\""id_token token\"",TOKEN:\""token\""},this.CONSTANTS={ACCESS_TOKEN:\""access_token\"",EXPIRES_IN:\""expires_in\"",ID_TOKEN:\""id_token\"",ERROR_DESCRIPTION:\""error_description\"",SESSION_STATE:\""session_state\"",ERROR:\""error\"",STORAGE:{TOKEN_KEYS:\""adal.token.keys\"",ACCESS_TOKEN_KEY:\""adal.access.token.key\"",EXPIRATION_KEY:\""adal.expiration.key\"",STATE_LOGIN:\""adal.state.login\"",STATE_RENEW:\""adal.state.renew\"",NONCE_IDTOKEN:\""adal.nonce.idtoken\"",SESSION_STATE:\""adal.session.state\"",USERNAME:\""adal.username\"",IDTOKEN:\""adal.idtoken\"",ERROR:\""adal.error\"",ERROR_DESCRIPTION:\""adal.error.description\"",LOGIN_REQUEST:\""adal.login.request\"",LOGIN_ERROR:\""adal.login.error\"",RENEW_STATUS:\""adal.token.renew.status\"",ANGULAR_LOGIN_REQUEST:\""adal.angular.login.request\""},RESOURCE_DELIMETER:\""|\"",CACHE_DELIMETER:\""||\"",LOADFRAME_TIMEOUT:6e3,TOKEN_RENEW_STATUS_CANCELED:\""Canceled\"",TOKEN_RENEW_STATUS_COMPLETED:\""Completed\"",TOKEN_RENEW_STATUS_IN_PROGRESS:\""In Progress\"",LOGGING_LEVEL:{ERROR:0,WARN:1,INFO:2,VERBOSE:3},LEVEL_STRING_MAP:{0:\""ERROR:\"",1:\""WARNING:\"",2:\""INFO:\"",3:\""VERBOSE:\""},POPUP_WIDTH:483,POPUP_HEIGHT:600},AuthenticationContext.prototype._singletonInstance)return AuthenticationContext.prototype._singletonInstance;if(AuthenticationContext.prototype._singletonInstance=this,this.instance=\""https://login.microsoftonline.com/\"",this.config={},this.callback=null,this.popUp=!1,this.isAngular=!1,this._user=null,this._activeRenewals={},this._loginInProgress=!1,this._acquireTokenInProgress=!1,this._renewStates=[],this._callBackMappedToRenewStates={},this._callBacksMappedToRenewStates={},this._openedWindows=[],this._requestType=this.REQUEST_TYPE.LOGIN,window._adalInstance=this,a.displayCall&&\""function\""!=typeof a.displayCall)throw new Error(\""displayCall is not a function\"");if(!a.clientId)throw new Error(\""clientId is required\"");this.config=this._cloneConfig(a),void 0===this.config.navigateToLoginRequestUrl&&(this.config.navigateToLoginRequestUrl=!0),this.config.popUp&&(this.popUp=!0),this.config.callback&&\""function\""==typeof this.config.callback&&(this.callback=this.config.callback),this.config.instance&&(this.instance=this.config.instance),this.config.loginResource||(this.config.loginResource=this.config.clientId),this.config.redirectUri||(this.config.redirectUri=window.location.href.split(\""?\"")[0].split(\""#\"")[0]),this.config.postLogoutRedirectUri||(this.config.postLogoutRedirectUri=window.location.href.split(\""?\"")[0].split(\""#\"")[0]),this.config.anonymousEndpoints||(this.config.anonymousEndpoints=[]),this.config.isAngular&&(this.isAngular=this.config.isAngular),this.config.loadFrameTimeout&&(this.CONSTANTS.LOADFRAME_TIMEOUT=this.config.loadFrameTimeout)},\""undefined\""!=typeof window&&(window.Logging={piiLoggingEnabled:!1,level:0,log:function(a){}}),AuthenticationContext.prototype.login=function(){if(this._loginInProgress)return void this.info(\""Login in progress\"");this._loginInProgress=!0;var a=this._guid();this.config.state=a,this._idTokenNonce=this._guid();var b=this._getItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST);b&&\""\""!==b?this._saveItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,\""\""):b=window.location.href,this.verbose(\""Expected state: \""+a+\"" startPage:\""+b),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,b),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,a,!0),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\"");var c=this._getNavigateUrl(\""id_token\"",null)+\""&nonce=\""+encodeURIComponent(this._idTokenNonce);this.config.displayCall?this.config.displayCall(c):this.popUp?(this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,\""\""),this._renewStates.push(a),this.registerCallback(a,this.config.clientId,this.callback),this._loginPopup(c)):this.promptUser(c)},AuthenticationContext.prototype._openPopup=function(a,b,c,d){try{var e=window.screenLeft?window.screenLeft:window.screenX,f=window.screenTop?window.screenTop:window.screenY,g=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,h=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,i=g/2-c/2+e,j=h/2-d/2+f,k=window.open(a,b,\""width=\""+c+\"", height=\""+d+\"", top=\""+j+\"", left=\""+i);return k.focus&&k.focus(),k}catch(a){return this.warn(\""Error opening popup, \""+a.message),this._loginInProgress=!1,this._acquireTokenInProgress=!1,null}},AuthenticationContext.prototype._handlePopupError=function(a,b,c,d,e){this.warn(d),this._saveItem(this.CONSTANTS.STORAGE.ERROR,c),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,d),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,e),b&&this._activeRenewals[b]&&(this._activeRenewals[b]=null),this._loginInProgress=!1,this._acquireTokenInProgress=!1,a&&a(d,null,c)},AuthenticationContext.prototype._loginPopup=function(a,b,c){var d=this._openPopup(a,\""login\"",this.CONSTANTS.POPUP_WIDTH,this.CONSTANTS.POPUP_HEIGHT),e=c||this.callback;if(null==d){var f=\""Popup Window is null. This can happen if you are using IE\"";return void this._handlePopupError(e,b,\""Error opening popup\"",f,f)}if(this._openedWindows.push(d),-1!=this.config.redirectUri.indexOf(\""#\""))var g=this.config.redirectUri.split(\""#\"")[0];else var g=this.config.redirectUri;var h=this,i=window.setInterval(function(){if(!d||d.closed||void 0===d.closed){var a=\""Popup Window closed\"",c=\""Popup Window closed by UI action/ Popup Window handle destroyed due to cross zone navigation in IE/Edge\"";return h.isAngular&&h._broadcast(\""adal:popUpClosed\"",c+h.CONSTANTS.RESOURCE_DELIMETER+a),h._handlePopupError(e,b,a,c,c),void window.clearInterval(i)}try{var f=d.location;if(-1!=encodeURI(f.href).indexOf(encodeURI(g)))return h.isAngular?h._broadcast(\""adal:popUpHashChanged\"",f.hash):h.handleWindowCallback(f.hash),window.clearInterval(i),h._loginInProgress=!1,h._acquireTokenInProgress=!1,h.info(\""Closing popup window\""),h._openedWindows=[],void d.close()}catch(a){}},1)},AuthenticationContext.prototype._broadcast=function(a,b){!function(){function a(a,b){b=b||{bubbles:!1,cancelable:!1,detail:void 0};var c=document.createEvent(\""CustomEvent\"");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}if(\""function\""==typeof window.CustomEvent)return!1;a.prototype=window.Event.prototype,window.CustomEvent=a}();var c=new CustomEvent(a,{detail:b});window.dispatchEvent(c)},AuthenticationContext.prototype.loginInProgress=function(){return this._loginInProgress},AuthenticationContext.prototype._hasResource=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);return b&&!this._isEmpty(b)&&b.indexOf(a+this.CONSTANTS.RESOURCE_DELIMETER)>-1},AuthenticationContext.prototype.getCachedToken=function(a){if(!this._hasResource(a))return null;var b=this._getItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a),c=this._getItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a),d=this.config.expireOffsetSeconds||300;return c&&c>this._now()+d?b:(this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a,\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a,0),null)},AuthenticationContext.prototype.getCachedUser=function(){if(this._user)return this._user;var a=this._getItem(this.CONSTANTS.STORAGE.IDTOKEN);return this._user=this._createUser(a),this._user},AuthenticationContext.prototype.registerCallback=function(a,b,c){this._activeRenewals[b]=a,this._callBacksMappedToRenewStates[a]||(this._callBacksMappedToRenewStates[a]=[]);var d=this;this._callBacksMappedToRenewStates[a].push(c),this._callBackMappedToRenewStates[a]||(this._callBackMappedToRenewStates[a]=function(c,e,f,g){d._activeRenewals[b]=null;for(var h=0;h<d._callBacksMappedToRenewStates[a].length;++h)try{d._callBacksMappedToRenewStates[a][h](c,e,f,g)}catch(f){d.warn(f)}d._callBacksMappedToRenewStates[a]=null,d._callBackMappedToRenewStates[a]=null})},AuthenticationContext.prototype._renewToken=function(a,b,c){this.info(\""renewToken is called for resource:\""+a);var d=this._addAdalFrame(\""adalRenewFrame\""+a),e=this._guid()+\""|\""+a;this.config.state=e,this._renewStates.push(e),this.verbose(\""Renew token Expected state: \""+e),c=c||\""token\"";var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(c,a),\""prompt\"");c===this.RESPONSE_TYPE.ID_TOKEN_TOKEN&&(this._idTokenNonce=this._guid(),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),f+=\""&nonce=\""+encodeURIComponent(this._idTokenNonce)),f+=\""&prompt=none\"",f=this._addHintParameters(f),this.registerCallback(e,a,b),this.verbosePii(\""Navigate to:\""+f),d.src=\""about:blank\"",this._loadFrameTimeout(f,\""adalRenewFrame\""+a,a)},AuthenticationContext.prototype._renewIdToken=function(a,b){this.info(\""renewIdToken is called\"");var c=this._addAdalFrame(\""adalIdTokenFrame\""),d=this._guid()+\""|\""+this.config.clientId;this._idTokenNonce=this._guid(),this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,this._idTokenNonce,!0),this.config.state=d,this._renewStates.push(d),this.verbose(\""Renew Idtoken Expected state: \""+d);var e=null===b||void 0===b?null:this.config.clientId,b=b||\""id_token\"",f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(b,e),\""prompt\"");f+=\""&prompt=none\"",f=this._addHintParameters(f),f+=\""&nonce=\""+encodeURIComponent(this._idTokenNonce),this.registerCallback(d,this.config.clientId,a),this.verbosePii(\""Navigate to:\""+f),c.src=\""about:blank\"",this._loadFrameTimeout(f,\""adalIdTokenFrame\"",this.config.clientId)},AuthenticationContext.prototype._urlContainsQueryStringParameter=function(a,b){return new RegExp(\""[\\\\?&]\""+a+\""=\"").test(b)},AuthenticationContext.prototype._urlRemoveQueryStringParameter=function(a,b){var c=new RegExp(\""(\\\\&\""+b+\""=)[^&]+\"");return a=a.replace(c,\""\""),c=new RegExp(\""(\""+b+\""=)[^&]+&\""),a=a.replace(c,\""\""),c=new RegExp(\""(\""+b+\""=)[^&]+\""),a=a.replace(c,\""\"")},AuthenticationContext.prototype._loadFrameTimeout=function(a,b,c){this.verbose(\""Set loading state to pending for: \""+c),this._saveItem(this.CONSTANTS.STORAGE.RENEW_STATUS+c,this.CONSTANTS.TOKEN_RENEW_STATUS_IN_PROGRESS),this._loadFrame(a,b);var d=this;setTimeout(function(){if(d._getItem(d.CONSTANTS.STORAGE.RENEW_STATUS+c)===d.CONSTANTS.TOKEN_RENEW_STATUS_IN_PROGRESS){d.verbose(\""Loading frame has timed out after: \""+d.CONSTANTS.LOADFRAME_TIMEOUT/1e3+\"" seconds for resource \""+c);var a=d._activeRenewals[c];a&&d._callBackMappedToRenewStates[a]&&d._callBackMappedToRenewStates[a](\""Token renewal operation failed due to timeout\"",null,\""Token Renewal Failed\""),d._saveItem(d.CONSTANTS.STORAGE.RENEW_STATUS+c,d.CONSTANTS.TOKEN_RENEW_STATUS_CANCELED)}},d.CONSTANTS.LOADFRAME_TIMEOUT)},AuthenticationContext.prototype._loadFrame=function(a,b){var c=this;c.info(\""LoadFrame: \""+b);var d=b;setTimeout(function(){var b=c._addAdalFrame(d);\""\""!==b.src&&\""about:blank\""!==b.src||(b.src=a,c._loadFrame(a,d))},500)},AuthenticationContext.prototype.acquireToken=function(a,b){if(this._isEmpty(a))return this.warn(\""resource is required\""),void b(\""resource is required\"",null,\""resource is required\"");var c=this.getCachedToken(a);return c?(this.info(\""Token is already in cache for resource:\""+a),void b(null,c,null)):this._user||this.config.extraQueryParameter&&-1!==this.config.extraQueryParameter.indexOf(\""login_hint\"")?void(this._activeRenewals[a]?this.registerCallback(this._activeRenewals[a],a,b):(this._requestType=this.REQUEST_TYPE.RENEW_TOKEN,a===this.config.clientId?this._user?(this.verbose(\""renewing idtoken\""),this._renewIdToken(b)):(this.verbose(\""renewing idtoken and access_token\""),this._renewIdToken(b,this.RESPONSE_TYPE.ID_TOKEN_TOKEN)):this._user?(this.verbose(\""renewing access_token\""),this._renewToken(a,b)):(this.verbose(\""renewing idtoken and access_token\""),this._renewToken(a,b,this.RESPONSE_TYPE.ID_TOKEN_TOKEN)))):(this.warn(\""User login is required\""),void b(\""User login is required\"",null,\""login required\""))},AuthenticationContext.prototype.acquireTokenPopup=function(a,b,c,d){if(this._isEmpty(a))return this.warn(\""resource is required\""),void d(\""resource is required\"",null,\""resource is required\"");if(!this._user)return this.warn(\""User login is required\""),void d(\""User login is required\"",null,\""login required\"");if(this._acquireTokenInProgress)return this.warn(\""Acquire token interactive is already in progress\""),void d(\""Acquire token interactive is already in progress\"",null,\""Acquire token interactive is already in progress\"");var e=this._guid()+\""|\""+a;this.config.state=e,this._renewStates.push(e),this._requestType=this.REQUEST_TYPE.RENEW_TOKEN,this.verbose(\""Renew token Expected state: \""+e);var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(\""token\"",a),\""prompt\"");if(f+=\""&prompt=select_account\"",b&&(f+=b),c&&-1===f.indexOf(\""&claims\""))f+=\""&claims=\""+encodeURIComponent(c);else if(c&&-1!==f.indexOf(\""&claims\""))throw new Error(\""Claims cannot be passed as an extraQueryParameter\"");f=this._addHintParameters(f),this._acquireTokenInProgress=!0,this.info(\""acquireToken interactive is called for the resource \""+a),this.registerCallback(e,a,d),this._loginPopup(f,a,d)},AuthenticationContext.prototype.acquireTokenRedirect=function(a,b,c){if(this._isEmpty(a))return this.warn(\""resource is required\""),void d(\""resource is required\"",null,\""resource is required\"");var d=this.callback;if(!this._user)return this.warn(\""User login is required\""),void d(\""User login is required\"",null,\""login required\"");if(this._acquireTokenInProgress)return this.warn(\""Acquire token interactive is already in progress\""),void d(\""Acquire token interactive is already in progress\"",null,\""Acquire token interactive is already in progress\"");var e=this._guid()+\""|\""+a;this.config.state=e,this.verbose(\""Renew token Expected state: \""+e);var f=this._urlRemoveQueryStringParameter(this._getNavigateUrl(\""token\"",a),\""prompt\"");if(f+=\""&prompt=select_account\"",b&&(f+=b),c&&-1===f.indexOf(\""&claims\""))f+=\""&claims=\""+encodeURIComponent(c);else if(c&&-1!==f.indexOf(\""&claims\""))throw new Error(\""Claims cannot be passed as an extraQueryParameter\"");f=this._addHintParameters(f),this._acquireTokenInProgress=!0,this.info(\""acquireToken interactive is called for the resource \""+a),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,window.location.href),this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,e,!0),this.promptUser(f)},AuthenticationContext.prototype.promptUser=function(a){a?(this.infoPii(\""Navigate to:\""+a),window.location.replace(a)):this.info(\""Navigate url is empty\"")},AuthenticationContext.prototype.clearCache=function(){this._saveItem(this.CONSTANTS.STORAGE.LOGIN_REQUEST,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,\""\""),this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_LOGIN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,\""\""),this._renewStates=[],this._saveItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\""),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""\"");var a=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS);if(!this._isEmpty(a)){a=a.split(this.CONSTANTS.RESOURCE_DELIMETER);for(var b=0;b<a.length&&\""\""!==a[b];b++)this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a[b],\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a[b],0)}this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,\""\"")},AuthenticationContext.prototype.clearCacheForResource=function(a){this._saveItem(this.CONSTANTS.STORAGE.STATE_RENEW,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\""),this._hasResource(a)&&(this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+a,\""\""),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+a,0))},AuthenticationContext.prototype.logOut=function(){this.clearCache(),this._user=null;var a;if(this.config.logOutUri)a=this.config.logOutUri;else{var b=\""common\"",c=\""\"";this.config.tenant&&(b=this.config.tenant),this.config.postLogoutRedirectUri&&(c=\""post_logout_redirect_uri=\""+encodeURIComponent(this.config.postLogoutRedirectUri)),a=this.instance+b+\""/oauth2/logout?\""+c}this.infoPii(\""Logout navigate to: \""+a),this.promptUser(a)},AuthenticationContext.prototype._isEmpty=function(a){return void 0===a||!a||0===a.length},AuthenticationContext.prototype.getUser=function(a){if(\""function\""!=typeof a)throw new Error(\""callback is not a function\"");if(this._user)return void a(null,this._user);var b=this._getItem(this.CONSTANTS.STORAGE.IDTOKEN);this._isEmpty(b)?(this.warn(\""User information is not available\""),a(\""User information is not available\"",null)):(this.info(\""User exists in cache: \""),this._user=this._createUser(b),a(null,this._user))},AuthenticationContext.prototype._addHintParameters=function(a){if(this._user&&this._user.profile)if(this._user.profile.sid&&-1!==a.indexOf(\""&prompt=none\""))this._urlContainsQueryStringParameter(\""sid\"",a)||(a+=\""&sid=\""+encodeURIComponent(this._user.profile.sid));else if(this._user.profile.upn&&(this._urlContainsQueryStringParameter(\""login_hint\"",a)||(a+=\""&login_hint=\""+encodeURIComponent(this._user.profile.upn)),!this._urlContainsQueryStringParameter(\""domain_hint\"",a)&&this._user.profile.upn.indexOf(\""@\"")>-1)){var b=this._user.profile.upn.split(\""@\"");a+=\""&domain_hint=\""+encodeURIComponent(b[b.length-1])}return a},AuthenticationContext.prototype._createUser=function(a){var b=null,c=this._extractIdToken(a);return c&&c.hasOwnProperty(\""aud\"")&&(c.aud.toLowerCase()===this.config.clientId.toLowerCase()?(b={userName:\""\"",profile:c},c.hasOwnProperty(\""upn\"")?b.userName=c.upn:c.hasOwnProperty(\""email\"")&&(b.userName=c.email)):this.warn(\""IdToken has invalid aud field\"")),b},AuthenticationContext.prototype._getHash=function(a){return a.indexOf(\""#/\"")>-1?a=a.substring(a.indexOf(\""#/\"")+2):a.indexOf(\""#\"")>-1&&(a=a.substring(1)),a},AuthenticationContext.prototype.isCallback=function(a){a=this._getHash(a);var b=this._deserialize(a);return b.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION)||b.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)||b.hasOwnProperty(this.CONSTANTS.ID_TOKEN)},AuthenticationContext.prototype.getLoginError=function(){return this._getItem(this.CONSTANTS.STORAGE.LOGIN_ERROR)},AuthenticationContext.prototype.getRequestInfo=function(a){a=this._getHash(a);var b=this._deserialize(a),c={valid:!1,parameters:{},stateMatch:!1,stateResponse:\""\"",requestType:this.REQUEST_TYPE.UNKNOWN};if(b&&(c.parameters=b,b.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION)||b.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)||b.hasOwnProperty(this.CONSTANTS.ID_TOKEN))){c.valid=!0;var d=\""\"";if(!b.hasOwnProperty(\""state\""))return this.warn(\""No state returned\""),c;if(this.verbose(\""State: \""+b.state),d=b.state,c.stateResponse=d,this._matchState(c))return c;if(!c.stateMatch&&window.parent){c.requestType=this._requestType;for(var e=this._renewStates,f=0;f<e.length;f++)if(e[f]===c.stateResponse){c.stateMatch=!0;break}}}return c},AuthenticationContext.prototype._matchNonce=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN);if(b){b=b.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<b.length;c++)if(b[c]===a.profile.nonce)return!0}return!1},AuthenticationContext.prototype._matchState=function(a){var b=this._getItem(this.CONSTANTS.STORAGE.STATE_LOGIN);if(b){b=b.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<b.length;c++)if(b[c]===a.stateResponse)return a.requestType=this.REQUEST_TYPE.LOGIN,a.stateMatch=!0,!0}var d=this._getItem(this.CONSTANTS.STORAGE.STATE_RENEW);if(d){d=d.split(this.CONSTANTS.CACHE_DELIMETER);for(var c=0;c<d.length;c++)if(d[c]===a.stateResponse)return a.requestType=this.REQUEST_TYPE.RENEW_TOKEN,a.stateMatch=!0,!0}return!1},AuthenticationContext.prototype._getResourceFromState=function(a){if(a){var b=a.indexOf(\""|\"");if(b>-1&&b+1<a.length)return a.substring(b+1)}return\""\""},AuthenticationContext.prototype.saveTokenFromHash=function(a){this.info(\""State status:\""+a.stateMatch+\""; Request type:\""+a.requestType),this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""\"");var b=this._getResourceFromState(a.stateResponse);if(a.parameters.hasOwnProperty(this.CONSTANTS.ERROR_DESCRIPTION))this.infoPii(\""Error :\""+a.parameters.error+\""; Error description:\""+a.parameters[this.CONSTANTS.ERROR_DESCRIPTION]),this._saveItem(this.CONSTANTS.STORAGE.ERROR,a.parameters.error),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,a.parameters[this.CONSTANTS.ERROR_DESCRIPTION]),a.requestType===this.REQUEST_TYPE.LOGIN&&(this._loginInProgress=!1,this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,a.parameters.error_description));else if(a.stateMatch){this.info(\""State is right\""),a.parameters.hasOwnProperty(this.CONSTANTS.SESSION_STATE)&&this._saveItem(this.CONSTANTS.STORAGE.SESSION_STATE,a.parameters[this.CONSTANTS.SESSION_STATE]);var c;a.parameters.hasOwnProperty(this.CONSTANTS.ACCESS_TOKEN)&&(this.info(\""Fragment has access token\""),this._hasResource(b)||(c=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS)||\""\"",this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,c+b+this.CONSTANTS.RESOURCE_DELIMETER)),this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+b,a.parameters[this.CONSTANTS.ACCESS_TOKEN]),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+b,this._expiresIn(a.parameters[this.CONSTANTS.EXPIRES_IN]))),a.parameters.hasOwnProperty(this.CONSTANTS.ID_TOKEN)&&(this.info(\""Fragment has id token\""),this._loginInProgress=!1,this._user=this._createUser(a.parameters[this.CONSTANTS.ID_TOKEN]),this._user&&this._user.profile?this._matchNonce(this._user)?(this._saveItem(this.CONSTANTS.STORAGE.IDTOKEN,a.parameters[this.CONSTANTS.ID_TOKEN]),b=this.config.loginResource?this.config.loginResource:this.config.clientId,this._hasResource(b)||(c=this._getItem(this.CONSTANTS.STORAGE.TOKEN_KEYS)||\""\"",this._saveItem(this.CONSTANTS.STORAGE.TOKEN_KEYS,c+b+this.CONSTANTS.RESOURCE_DELIMETER)),this._saveItem(this.CONSTANTS.STORAGE.ACCESS_TOKEN_KEY+b,a.parameters[this.CONSTANTS.ID_TOKEN]),this._saveItem(this.CONSTANTS.STORAGE.EXPIRATION_KEY+b,this._user.profile.exp)):(this._saveItem(this.CONSTANTS.STORAGE.LOGIN_ERROR,\""Nonce received: \""+this._user.profile.nonce+\"" is not same as requested: \""+this._getItem(this.CONSTANTS.STORAGE.NONCE_IDTOKEN)),this._user=null):(a.parameters.error=\""invalid id_token\"",a.parameters.error_description=\""Invalid id_token. id_token: \""+a.parameters[this.CONSTANTS.ID_TOKEN],this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""invalid id_token\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""Invalid id_token. id_token: \""+a.parameters[this.CONSTANTS.ID_TOKEN])))}else a.parameters.error=\""Invalid_state\"",a.parameters.error_description=\""Invalid_state. state: \""+a.stateResponse,this._saveItem(this.CONSTANTS.STORAGE.ERROR,\""Invalid_state\""),this._saveItem(this.CONSTANTS.STORAGE.ERROR_DESCRIPTION,\""Invalid_state. state: \""+a.stateResponse);this._saveItem(this.CONSTANTS.STORAGE.RENEW_STATUS+b,this.CONSTANTS.TOKEN_RENEW_STATUS_COMPLETED)},AuthenticationContext.prototype.getResourceForEndpoint=function(a){if(this.config&&this.config.anonymousEndpoints)for(var b=0;b<this.config.anonymousEndpoints.length;b++)if(a.indexOf(this.config.anonymousEndpoints[b])>-1)return null;if(this.config&&this.config.endpoints)for(var c in this.config.endpoints)if(a.indexOf(c)>-1)return this.config.endpoints[c];return a.indexOf(\""http://\"")>-1||a.indexOf(\""https://\"")>-1?this._getHostFromUri(a)===this._getHostFromUri(this.config.redirectUri)?this.config.loginResource:null:this.config.loginResource},AuthenticationContext.prototype._getHostFromUri=function(a){var b=String(a).replace(/^(https?:)\\/\\//,\""\"");return b=b.split(\""/\"")[0]},AuthenticationContext.prototype.handleWindowCallback=function(a){if(null==a&&(a=window.location.hash),this.isCallback(a)){var b=null,c=!1;this._openedWindows.length>0&&this._openedWindows[this._openedWindows.length-1].opener&&this._openedWindows[this._openedWindows.length-1].opener._adalInstance?(b=this._openedWindows[this._openedWindows.length-1].opener._adalInstance,c=!0):window.parent&&window.parent._adalInstance&&(b=window.parent._adalInstance);var d,e,f=b.getRequestInfo(a),g=null;e=c||window.parent!==window?b._callBackMappedToRenewStates[f.stateResponse]:b.callback,b.info(\""Returned from redirect url\""),b.saveTokenFromHash(f),f.requestType===this.REQUEST_TYPE.RENEW_TOKEN&&window.parent?(window.parent!==window?b.verbose(\""Window is in iframe, acquiring token silently\""):b.verbose(\""acquiring token interactive in progress\""),d=f.parameters[b.CONSTANTS.ACCESS_TOKEN]||f.parameters[b.CONSTANTS.ID_TOKEN],g=b.CONSTANTS.ACCESS_TOKEN):f.requestType===this.REQUEST_TYPE.LOGIN&&(d=f.parameters[b.CONSTANTS.ID_TOKEN],g=b.CONSTANTS.ID_TOKEN);var h=f.parameters[b.CONSTANTS.ERROR_DESCRIPTION],i=f.parameters[b.CONSTANTS.ERROR];try{e&&e(h,d,i,g)}catch(a){b.error(\""Error occurred in user defined callback function: \""+a)}window.parent!==window||c||(b.config.navigateToLoginRequestUrl?window.location.href=b._getItem(b.CONSTANTS.STORAGE.LOGIN_REQUEST):window.location.hash=\""\"")}},AuthenticationContext.prototype._getNavigateUrl=function(a,b){var c=\""common\"";this.config.tenant&&(c=this.config.tenant);var d=this.instance+c+\""/oauth2/authorize\""+this._serialize(a,this.config,b)+this._addLibMetadata();return this.info(\""Navigate url:\""+d),d},AuthenticationContext.prototype._extractIdToken=function(a){var b=this._decodeJwt(a);if(!b)return null;try{var c=b.JWSPayload,d=this._base64DecodeStringUrlSafe(c);return d?JSON.parse(d):(this.info(\""The returned id_token could not be base64 url safe decoded.\""),null)}catch(a){this.error(\""The returned id_token could not be decoded\"",a)}return null},AuthenticationContext.prototype._base64DecodeStringUrlSafe=function(a){return a=a.replace(/-/g,\""+\"").replace(/_/g,\""/\""),window.atob?decodeURIComponent(escape(window.atob(a))):decodeURIComponent(escape(this._decode(a)))},AuthenticationContext.prototype._decode=function(a){var b=\""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"";a=String(a).replace(/=+$/,\""\"");var c=a.length;if(c%4==1)throw new Error(\""The token to be decoded is not correctly encoded.\"");for(var d,e,f,g,h,i,j,k,l=\""\"",m=0;m<c;m+=4){if(d=b.indexOf(a.charAt(m)),e=b.indexOf(a.charAt(m+1)),f=b.indexOf(a.charAt(m+2)),g=b.indexOf(a.charAt(m+3)),m+2===c-1){h=d<<18|e<<12|f<<6,i=h>>16&255,j=h>>8&255,l+=String.fromCharCode(i,j);break}if(m+1===c-1){h=d<<18|e<<12,i=h>>16&255,l+=String.fromCharCode(i);break}h=d<<18|e<<12|f<<6|g,i=h>>16&255,j=h>>8&255,k=255&h,l+=String.fromCharCode(i,j,k)}return l},AuthenticationContext.prototype._decodeJwt=function(a){if(this._isEmpty(a))return null;var b=/^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/,c=b.exec(a);return!c||c.length<4?(this.warn(\""The returned id_token is not parseable.\""),null):{header:c[1],JWSPayload:c[2],JWSSig:c[3]}},AuthenticationContext.prototype._convertUrlSafeToRegularBase64EncodedString=function(a){return a.replace(\""-\"",\""+\"").replace(\""_\"",\""/\"")},AuthenticationContext.prototype._serialize=function(a,b,c){var d=[];if(null!==b){d.push(\""?response_type=\""+a),d.push(\""client_id=\""+encodeURIComponent(b.clientId)),c&&d.push(\""resource=\""+encodeURIComponent(c)),d.push(\""redirect_uri=\""+encodeURIComponent(b.redirectUri)),d.push(\""state=\""+encodeURIComponent(b.state)),b.hasOwnProperty(\""slice\"")&&d.push(\""slice=\""+encodeURIComponent(b.slice)),b.hasOwnProperty(\""extraQueryParameter\"")&&d.push(b.extraQueryParameter);var e=b.correlationId?b.correlationId:this._guid();d.push(\""client-request-id=\""+encodeURIComponent(e))}return d.join(\""&\"")},AuthenticationContext.prototype._deserialize=function(a){var b,c=/\\+/g,d=/([^&=]+)=([^&]*)/g,e=function(a){return decodeURIComponent(a.replace(c,\"" \""))},f={};for(b=d.exec(a);b;)f[e(b[1])]=e(b[2]),b=d.exec(a);return f},AuthenticationContext.prototype._decimalToHex=function(a){for(var b=a.toString(16);b.length<2;)b=\""0\""+b;return b},AuthenticationContext.prototype._guid=function(){var a=window.crypto||window.msCrypto;if(a&&a.getRandomValues){var b=new Uint8Array(16);return a.getRandomValues(b),b[6]|=64,b[6]&=79,b[8]|=128,b[8]&=191,this._decimalToHex(b[0])+this._decimalToHex(b[1])+this._decimalToHex(b[2])+this._decimalToHex(b[3])+\""-\""+this._decimalToHex(b[4])+this._decimalToHex(b[5])+\""-\""+this._decimalToHex(b[6])+this._decimalToHex(b[7])+\""-\""+this._decimalToHex(b[8])+this._decimalToHex(b[9])+\""-\""+this._decimalToHex(b[10])+this._decimalToHex(b[11])+this._decimalToHex(b[12])+this._decimalToHex(b[13])+this._decimalToHex(b[14])+this._decimalToHex(b[15])}for(var c=\""xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"",d=\""0123456789abcdef\"",e=0,f=\""\"",g=0;g<36;g++)\""-\""!==c[g]&&\""4\""!==c[g]&&(e=16*Math.random()|0),\""x\""===c[g]?f+=d[e]:\""y\""===c[g]?(e&=3,e|=8,f+=d[e]):f+=c[g];return f},AuthenticationContext.prototype._expiresIn=function(a){return a||(a=3599),this._now()+parseInt(a,10)},AuthenticationContext.prototype._now=function(){return Math.round((new Date).getTime()/1e3)},AuthenticationContext.prototype._addAdalFrame=function(a){if(void 0!==a){this.info(\""Add adal frame to document:\""+a);var b=document.getElementById(a);if(!b){if(document.createElement&&document.documentElement&&(window.opera||-1===window.navigator.userAgent.indexOf(\""MSIE 5.0\""))){var c=document.createElement(\""iframe\"");c.setAttribute(\""id\"",a),c.setAttribute(\""aria-hidden\"",\""true\""),c.style.visibility=\""hidden\"",c.style.position=\""absolute\"",c.style.width=c.style.height=c.borderWidth=\""0px\"",b=document.getElementsByTagName(\""body\"")[0].appendChild(c)}else document.body&&document.body.insertAdjacentHTML&&document.body.insertAdjacentHTML(\""beforeEnd\"",'<iframe name=\""'+a+'\"" id=\""'+a+'\"" style=\""display:none\""></iframe>');window.frames&&window.frames[a]&&(b=window.frames[a])}return b}},AuthenticationContext.prototype._saveItem=function(a,b,c){if(this.config&&this.config.cacheLocation&&\""localStorage\""===this.config.cacheLocation){if(!this._supportsLocalStorage())return this.info(\""Local storage is not supported\""),!1;if(c){var d=this._getItem(a)||\""\"";localStorage.setItem(a,d+b+this.CONSTANTS.CACHE_DELIMETER)}else localStorage.setItem(a,b);return!0}return this._supportsSessionStorage()?(sessionStorage.setItem(a,b),!0):(this.info(\""Session storage is not supported\""),!1)},AuthenticationContext.prototype._getItem=function(a){return this.config&&this.config.cacheLocation&&\""localStorage\""===this.config.cacheLocation?this._supportsLocalStorage()?localStorage.getItem(a):(this.info(\""Local storage is not supported\""),null):this._supportsSessionStorage()?sessionStorage.getItem(a):(this.info(\""Session storage is not supported\""),null)},AuthenticationContext.prototype._supportsLocalStorage=function(){try{return!!window.localStorage&&(window.localStorage.setItem(\""storageTest\"",\""A\""),\""A\""==window.localStorage.getItem(\""storageTest\"")&&(window.localStorage.removeItem(\""storageTest\""),!window.localStorage.getItem(\""storageTest\"")))}catch(a){return!1}},AuthenticationContext.prototype._supportsSessionStorage=function(){try{return!!window.sessionStorage&&(window.sessionStorage.setItem(\""storageTest\"",\""A\""),\""A\""==window.sessionStorage.getItem(\""storageTest\"")&&(window.sessionStorage.removeItem(\""storageTest\""),!window.sessionStorage.getItem(\""storageTest\"")))}catch(a){return!1}},AuthenticationContext.prototype._cloneConfig=function(a){if(null===a||\""object\""!=typeof a)return a;var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b},AuthenticationContext.prototype._addLibMetadata=function(){return\""&x-client-SKU=Js&x-client-Ver=\""+this._libVersion()},AuthenticationContext.prototype.log=function(a,b,c,d){if(a<=Logging.level){if(!Logging.piiLoggingEnabled&&d)return;var e=(new Date).toUTCString(),f=\""\"";f=this.config.correlationId?e+\"":\""+this.config.correlationId+\""-\""+this._libVersion()+\""-\""+this.CONSTANTS.LEVEL_STRING_MAP[a]+\"" \""+b:e+\"":\""+this._libVersion()+\""-\""+this.CONSTANTS.LEVEL_STRING_MAP[a]+\"" \""+b,c&&(f+=\""\\nstack:\\n\""+c.stack),Logging.log(f)}},AuthenticationContext.prototype.error=function(a,b){this.log(this.CONSTANTS.LOGGING_LEVEL.ERROR,a,b)},AuthenticationContext.prototype.warn=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.WARN,a,null)},AuthenticationContext.prototype.info=function(a){\r\nthis.log(this.CONSTANTS.LOGGING_LEVEL.INFO,a,null)},AuthenticationContext.prototype.verbose=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.VERBOSE,a,null)},AuthenticationContext.prototype.errorPii=function(a,b){this.log(this.CONSTANTS.LOGGING_LEVEL.ERROR,a,b,!0)},AuthenticationContext.prototype.warnPii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.WARN,a,null,!0)},AuthenticationContext.prototype.infoPii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.INFO,a,null,!0)},AuthenticationContext.prototype.verbosePii=function(a){this.log(this.CONSTANTS.LOGGING_LEVEL.VERBOSE,a,null,!0)},AuthenticationContext.prototype._libVersion=function(){return\""1.0.17\""},\""undefined\""!=typeof module&&module.exports&&(module.exports=AuthenticationContext,module.exports.inject=function(a){return new AuthenticationContext(a)}),AuthenticationContext}();"",""/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \""License\""); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \""function\"")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \""object\"" && typeof Reflect.decorate === \""function\"") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \""object\"" && typeof Reflect.metadata === \""function\"") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\""throw\""](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \""throw\"": verb(1), \""return\"": verb(2) }, typeof Symbol === \""function\"" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\""Generator is already executing.\"");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\""return\""] : op[0] ? y[\""throw\""] || ((t = y[\""return\""]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \""function\"" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \""function\"" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\""return\""])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\""Symbol.asyncIterator is not defined.\"");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\""next\""), verb(\""throw\""), verb(\""return\""), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\""next\"", value); }\r\n    function reject(value) { resume(\""throw\"", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\""next\""), verb(\""throw\"", function (e) { throw e; }), verb(\""return\""), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \""return\"" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\""Symbol.asyncIterator is not defined.\"");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \""function\"" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\""next\""), verb(\""throw\""), verb(\""return\""), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \""raw\"", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"",""var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\""return this\"")() || (1, eval)(\""this\"");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \""object\"") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n""],""sourceRoot"":""""}"
7289ed3212fcd2b8205e846556979db6d470aad4,6807808,        # [2]: http://stackoverflow.com/questions/6807808/highlighting-and-selecting-text-with-python-curses
d3835e60c58b4dd7a566a919c43a7d04a1119bbd,658885,* http://stackoverflow.com/questions/658885/how-do-you-get-git-to-always-pull-from-a-specific-branch 
795a7bfa788ad7733c7ee5f1636016badbfd4248,59895,Reference https://stackoverflow.com/questions/59895/get-the-source-directory-of-a-bash-script-from-within-the-script-itself
f7996e55b69f3588739eb4b3c4f5f4ef69f2730e,2400935,    // http://stackoverflow.com/questions/2400935/browser-detection-in-javascript
e9fc7179b818babd97dd2f3f77a2b95b279425b0,37217886,			# See: https://stackoverflow.com/a/37217886/180733
3e727a894f7d9b4fb704821c6fa9dbdd34c32dd6,8539207,"    ""body"": ""\nsee\n\n  http://stackoverflow.com/questions/8539207/activerecord-loads-binary-field-incorrectly-on-heroku-fine-on-osx\n\n  https://gist.github.com/3382094\n\n  https://devcenter.heroku.com/articles/heroku-postgresql#troubleshooting\n\nto try to understand the issue this works around.\n\nessentially, under certain conditions, PGconn.unescape_bytea is returning bunk/different data.  this feature detects the situation and corrects it on the fly."","
1077d6e7374b9d7c307379179ea218d911cba3e4,3401428,        # Taken from http://stackoverflow.com/questions/3401428/how-to-get-an-isoformat-datetime-string-including-the-default-timezone
53250d9f33be77ed79fc99b6fc7314b4506c211c,3222375,15;http://stackoverflow.com/questions/3222375/what-is-message-passing;receive;1.0;0.0625;4.0;0
db973a9702bfa5900e4ea6966300bc4498d8c76d,1762378,	// inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378
2b13d4fcb6925bd51729829afecc7f9b258a7728,35190574,"  <td><a href=""https://stackoverflow.com/questions/35190574"">35190574</a> </td>"
5b45cd9612abf2b87c3f60fa7bababe6dac8a728,497426,            # http://stackoverflow.com/questions/497426/
481febcb5ffb8f13ba067a1d3e75d506abbbf47b,3330919,        // http://stackoverflow.com/a/3330919)
46f637a8c09ea4d7d6a855833c85b1f2adc047b1,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
a98fec61e472906a00ca7f35cf804ccaa532a595,20359734,# http://stackoverflow.com/a/20359734
8a43a4b09c67933a34ad1616f2efe3f65d212a5a,8481844, * From Stack Overflow: http://stackoverflow.com/questions/8481844/gridview-height-gets-cut
95a5303f6d45fb07c2e88dc490e81169637e561e,918886,    # http://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash
8a7f18c27bcb52c7be53e3787bf347416ae916a9,2172280,    // - https://stackoverflow.com/questions/2172053/c-can-i-statically-initialize-a-stdmap-at-compile-time/2172280#2172280
c8e3e680b937d8636bfd2f7e088e45136a14ea98,14967647,// From http://stackoverflow.com/questions/14967647/ (continues on next line)
4ecb9e1a1997679a27cd3e8270acf6eb0a041271,17511714,# from http://stackoverflow.com/a/17511714
bf12f936c3bdd8d5e0d91b528caba89c92d6b377,30653642,# http://stackoverflow.com/questions/30653642/combining-bag-of-words-and-other-features-in-one-model-using-sklearn-and-pandas
107b274b03bfd6a2ce29ee4c8bed3a170b50b37c,3446170,   * see: http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
3c4ad643d13f8d8a62d5bd86ef3c10b77225bef1,92000,    # http://stackoverflow.com/a/92000/724176
c375e43d689091a3507d42a0e057e02a6770bacc,33949786,    Ref: http://stackoverflow.com/questions/33949786/how-could-i-use-batch-normalization-in-tensorflow/33950177
d7c7e4ec3c36c28f8dda898b5c7bd9f3bae343ce,38405989,        This is because mongoose treat all update as a $set: https://stackoverflow.com/questions/38405989/mongoose-findoneandupdate-with-set-flag
2cedda87ca3b618c07922e074a33046588e8af68,28370571,"create (_1347:`StackOverflowQuestion` {`answer_count`:1, `creation_date`:1423240858, `is_answered`:true, `last_activity_date`:1423330292, `link`:""http://stackoverflow.com/questions/28370571/neo4j-cypher-alternative-paths"", `question_id`:28370571, `score`:2, `title`:""Neo4j Cypher alternative paths"", `view_count`:27})"
6b09905e92786f4811ee991bd7a87fa474b72da8,11295554,"  ""readme"": ""# Formidable\n\n[![Build Status](https://travis-ci.org/felixge/node-formidable.svg?branch=master)](https://travis-ci.org/felixge/node-formidable)\n\n## Purpose\n\nA Node.js module for parsing form data, especially file uploads.\n\n## Current status\n\n**Maintainers Wanted:** Please see https://github.com/felixge/node-formidable/issues/412\n\nThis module was developed for [Transloadit](http://transloadit.com/), a service focused on uploading\nand encoding images and videos. It has been battle-tested against hundreds of GB of file uploads from\na large variety of clients and is considered production-ready.\n\n## Features\n\n* Fast (~500mb/sec), non-buffering multipart parser\n* Automatically writing file uploads to disk\n* Low memory footprint\n* Graceful error handling\n* Very high test coverage\n\n## Installation\n\n```sh\nnpm i -S formidable\n```\n\nThis is a low level package, and if you're using a high level framework such as Express, chances are it's already included in it. You can [read this discussion](http://stackoverflow.com/questions/11295554/how-to-disable-express-bodyparser-for-file-uploads-node-js) about how Formidable is integrated with Express.\n\nNote: Formidable requires [gently](http://github.com/felixge/node-gently) to run the unit tests, but you won't need it for just using the library.\n\n## Example\n\nParse an incoming file upload.\n```javascript\nvar formidable = require('formidable'),\n    http = require('http'),\n    util = require('util');\n\nhttp.createServer(function(req, res) {\n  if (req.url == '/upload' && req.method.toLowerCase() == 'post') {\n    // parse a file upload\n    var form = new formidable.IncomingForm();\n\n    form.parse(req, function(err, fields, files) {\n      res.writeHead(200, {'content-type': 'text/plain'});\n      res.write('received upload:\\n\\n');\n      res.end(util.inspect({fields: fields, files: files}));\n    });\n\n    return;\n  }\n\n  // show a file upload form\n  res.writeHead(200, {'content-type': 'text/html'});\n  res.end(\n    '<form action=\""/upload\"" enctype=\""multipart/form-data\"" method=\""post\"">'+\n    '<input type=\""text\"" name=\""title\""><br>'+\n    '<input type=\""file\"" name=\""upload\"" multiple=\""multiple\""><br>'+\n    '<input type=\""submit\"" value=\""Upload\"">'+\n    '</form>'\n  );\n}).listen(8080);\n```\n## API\n\n### Formidable.IncomingForm\n```javascript\nvar form = new formidable.IncomingForm()\n```\nCreates a new incoming form.\n\n```javascript\nform.encoding = 'utf-8';\n```\nSets encoding for incoming form fields.\n\n```javascript\nform.uploadDir = \""/my/dir\"";\n```\nSets the directory for placing file uploads in. You can move them later on using\n`fs.rename()`. The default is `os.tmpdir()`.\n\n```javascript\nform.keepExtensions = false;\n```\nIf you want the files written to `form.uploadDir` to include the extensions of the original files, set this property to `true`.\n\n```javascript\nform.type\n```\nEither 'multipart' or 'urlencoded' depending on the incoming request.\n\n```javascript\nform.maxFieldsSize = 2 * 1024 * 1024;\n```\nLimits the amount of memory all fields together (except files) can allocate in bytes.\nIf this value is exceeded, an `'error'` event is emitted. The default\nsize is 2MB.\n\n```javascript\nform.maxFields = 1000;\n```\nLimits the number of fields that the querystring parser will decode. Defaults\nto 1000 (0 for unlimited).\n\n```javascript\nform.hash = false;\n```\nIf you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`.\n\n```javascript\nform.multiples = false;\n```\nIf this option is enabled, when you call `form.parse`, the `files` argument will contain arrays of files for inputs which submit multiple files using the HTML5 `multiple` attribute.\n\n```javascript\nform.bytesReceived\n```\nThe amount of bytes received for this form so far.\n\n```javascript\nform.bytesExpected\n```\nThe expected number of bytes in this form.\n\n```javascript\nform.parse(request, [cb]);\n```\nParses an incoming node.js `request` containing form data. If `cb` is provided, all fields and files are collected and passed to the callback:\n\n\n```javascript\nform.parse(req, function(err, fields, files) {\n  // ...\n});\n\nform.onPart(part);\n```\nYou may overwrite this method if you are interested in directly accessing the multipart stream. Doing so will disable any `'field'` / `'file'` events  processing which would occur otherwise, making you fully responsible for handling the processing.\n\n```javascript\nform.onPart = function(part) {\n  part.addListener('data', function() {\n    // ...\n  });\n}\n```\nIf you want to use formidable to only handle certain parts for you, you can do so:\n```javascript\nform.onPart = function(part) {\n  if (!part.filename) {\n    // let formidable handle all non-file parts\n    form.handlePart(part);\n  }\n}\n```\nCheck the code in this method for further inspiration.\n\n\n### Formidable.File\n```javascript\nfile.size = 0\n```\nThe size of the uploaded file in bytes. If the file is still being uploaded (see `'fileBegin'` event), this property says how many bytes of the file have been written to disk yet.\n```javascript\nfile.path = null\n```\nThe path this file is being written to. You can modify this in the `'fileBegin'` event in\ncase you are unhappy with the way formidable generates a temporary path for your files.\n```javascript\nfile.name = null\n```\nThe name this file had according to the uploading client.\n```javascript\nfile.type = null\n```\nThe mime type of this file, according to the uploading client.\n```javascript\nfile.lastModifiedDate = null\n```\nA date object (or `null`) containing the time this file was last written to. Mostly\nhere for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/).\n```javascript\nfile.hash = null\n```\nIf hash calculation was set, you can read the hex digest out of this var.\n\n#### Formidable.File#toJSON()\n\n  This method returns a JSON-representation of the file, allowing you to\n  `JSON.stringify()` the file which is useful for logging and responding\n  to requests.\n\n### Events\n\n\n#### 'progress'\n\nEmitted after each incoming chunk of data that has been parsed. Can be used to roll your own progress bar.\n\n```javascript\nform.on('progress', function(bytesReceived, bytesExpected) {\n});\n```\n\n\n\n#### 'field'\n\nEmitted whenever a field / value pair has been received.\n\n```javascript\nform.on('field', function(name, value) {\n});\n```\n\n#### 'fileBegin'\n\nEmitted whenever a new file is detected in the upload stream. Use this event if\nyou want to stream the file to somewhere else while buffering the upload on\nthe file system.\n\n```javascript\nform.on('fileBegin', function(name, file) {\n});\n```\n\n#### 'file'\n\nEmitted whenever a field / file pair has been received. `file` is an instance of `File`.\n\n```javascript\nform.on('file', function(name, file) {\n});\n```\n\n#### 'error'\n\nEmitted when there is an error processing the incoming form. A request that experiences an error is automatically paused, you will have to manually call `request.resume()` if you want the request to continue firing `'data'` events.\n\n```javascript\nform.on('error', function(err) {\n});\n```\n\n#### 'aborted'\n\n\nEmitted when the request was aborted by the user. Right now this can be due to a 'timeout' or 'close' event on the socket. After this event is emitted, an `error` event will follow. In the future there will be a separate 'timeout' event (needs a change in the node core).\n```javascript\nform.on('aborted', function() {\n});\n```\n\n##### 'end'\n```javascript\nform.on('end', function() {\n});\n```\nEmitted when the entire request has been received, and all contained files have finished flushing to disk. This is a great place for you to send your response.\n\n\n\n## Changelog\n\n### v1.1.1 (2017-01-15)\n\n * Fix DeprecationWarning about os.tmpDir() (Christian)\n * Update `buffer.write` order of arguments for Node 7 (Kornel Lesiński)\n * JSON Parser emits error events to the IncomingForm (alessio.montagnani)\n * Improved Content-Disposition parsing (Sebastien)\n * Access WriteStream of fs during runtime instead of include time (Jonas Amundsen)\n * Use built-in toString to convert buffer to hex (Charmander)\n * Add hash to json if present (Nick Stamas)\n * Add license to package.json (Simen Bekkhus)\n\n### v1.0.14 (2013-05-03)\n\n* Add failing hash tests. (Ben Trask)\n* Enable hash calculation again (Eugene Girshov)\n* Test for immediate data events (Tim Smart)\n* Re-arrange IncomingForm#parse (Tim Smart)\n\n### v1.0.13\n\n* Only update hash if update method exists (Sven Lito)\n* According to travis v0.10 needs to go quoted (Sven Lito)\n* Bumping build node versions (Sven Lito)\n* Additional fix for empty requests (Eugene Girshov)\n* Change the default to 1000, to match the new Node behaviour. (OrangeDog)\n* Add ability to control maxKeys in the querystring parser. (OrangeDog)\n* Adjust test case to work with node 0.9.x (Eugene Girshov)\n* Update package.json (Sven Lito)\n* Path adjustment according to eb4468b (Markus Ast)\n\n### v1.0.12\n\n* Emit error on aborted connections (Eugene Girshov)\n* Add support for empty requests (Eugene Girshov)\n* Fix name/filename handling in Content-Disposition (jesperp)\n* Tolerate malformed closing boundary in multipart (Eugene Girshov)\n* Ignore preamble in multipart messages (Eugene Girshov)\n* Add support for application/json (Mike Frey, Carlos Rodriguez)\n* Add support for Base64 encoding (Elmer Bulthuis)\n* Add File#toJSON (TJ Holowaychuk)\n* Remove support for Node.js 0.4 & 0.6 (Andrew Kelley)\n* Documentation improvements (Sven Lito, Andre Azevedo)\n* Add support for application/octet-stream (Ion Lupascu, Chris Scribner)\n* Use os.tmpdir() to get tmp directory (Andrew Kelley)\n* Improve package.json (Andrew Kelley, Sven Lito)\n* Fix benchmark script (Andrew Kelley)\n* Fix scope issue in incoming_forms (Sven Lito)\n* Fix file handle leak on error (OrangeDog)\n\n## License\n\nFormidable is licensed under the MIT license.\n\n## Ports\n\n* [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++ parser based on formidable\n\n## Credits\n\n* [Ryan Dahl](http://twitter.com/ryah) for his work on [http-parser](http://github.com/ry/http-parser) which heavily inspired multipart_parser.js\n"","
5c576019aa9217adad71e7d1320a7d6ac91a676d,17059432,"  <a href=""http://stackoverflow.com/questions/17059432/random-forest-package-in-r-shows-error-during-prediction-if-there-are-new-fact"">"
4f05e284d6f1b2e8ae1319208c275ebdf1bbcc9c,3330919,        // http://stackoverflow.com/a/3330919)
af70f9757762923fa7a4cb50a6d1183218dac9dd,15783014,	//from http://stackoverflow.com/questions/15783014/jtextarea-on-jpanel-inside-jscrollpane-does-not-resize-properly
7a65f704b32273a6cc9d1ababb2009ceb7cb31d1,30915173,"94. react-router go back a page how do you configure history? **votes: 4**, *views: 6966* [http://stackoverflow.com/questions/30915173/react-router-go-back-a-page-how-do-you-configure-history](http://stackoverflow.com/questions/30915173/react-router-go-back-a-page-how-do-you-configure-history)"
7d086d37ae62882d1800a3cd468ac08d3e3f5e2f,1114465,"       ""// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n"","
7a2f9c565b1db0d14e17d05b0539c8cf1ad03bc0,846221,				/* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */
9f084ab0bfd10f9fd4dac0d0a07463242866cda7,3330919,        // http://stackoverflow.com/a/3330919)
c63d17ad343bde389a5f44e141f6658f4b68f328,6969486,     * http://stackoverflow.com/a/6969486
db87a7ab122f436a24e3e948153027d81f260d44,2655987,"  border-collapse: separate; /*it must be separate, otherwise there are offset miscalculations in WebKit: http://stackoverflow.com/questions/2655987/border-collapse-differences-in-ff-and-webkit*/"
f4dd5e11c95f6d56f9a3955fe5142b8b38f9a7b5,20773846,// See http://stackoverflow.com/a/20773846
5185d4232dff569374719e0423250a3e9d202714,2087250,"          </dd><dt class=""implicit"">Shadowing</dt><dd>This implicitly inherited member is ambiguous. One or more implicitly inherited members have similar signatures, so calling this member may produce an ambiguous implicit conversion compiler error.<br />To access this member you can use a <a href=""http://stackoverflow.com/questions/2087250/what-is-the-purpose-of-type-ascription-in-scala"" target=""_blank"">type ascription</a>:<br /><div class=""cmt""><pre>(innerInLocalClass: StringFormat).self</pre></div></dd><dt>Definition Classes</dt><dd>StringFormat</dd></dl></div>"
b39c2bfbd3cc5fe698fed360caf243e5ff1d0cce,6517314,     * http://stackoverflow.com/questions/6517314/android-wifi-connection-programmatically#
fbcb0594d7c9abf19b829694446245a6f488662d,4799594, * Credit to: @Kevin\ Dolan http://stackoverflow.com/a/4799594/1582712
d447cfe6bfe6b0b4e3570a0cd7e13e3256ace714,32453984,"<body><font class=""Apple-style-span"" face=""Consolas""><div><font class=""Apple-style-span""><br></font></div><div><br></div><div>问题描述：chrome能访问127.0.0.1，但无法访问localhost</div><div><br></div><div><br></div></font><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">解决方案：(status:solved, Leo, 2016-11-4)</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp; This is an IPv6 problem. Google must have just updated Chrome.</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp; 1.&nbsp;First of all ensure that your hosts file has the following line and that it is uncommented.</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp; &nbsp; &nbsp; hosts file located at :&nbsp;<strong style=""font-weight: bold; color: rgb(0, 0, 0); font-style: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); "">C:\Windows\System32\drivers\etc\ hosts</strong></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;::1 localhost</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;2. Next, open up your Apache config (httpd.conf) and add the following to the listen section:</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Listen [::1]:80</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp; 3.&nbsp;Next, you need to edit you Directory statements in httpd.conf or your vhosts files. They probably look something like this.</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;Directory ""C:\path""&gt;</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Options Indexes FollowSymLinks</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Order Deny,Allow</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Deny from all</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Allow from 127.0.0.1</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; AllowOverride All</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;/Directory&gt;</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Add an extra line after the 'Allow from 127.0.0.1' so it looks like this</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;Directory ""C:\path""&gt;</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Options Indexes FollowSymLinks</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Order Deny,Allow</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Deny from all</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Allow from 127.0.0.1</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Allow from ::1</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; AllowOverride All</font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;/Directory&gt;</font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><b>References</b></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas"">&nbsp; &nbsp; [1] <a href=""http://stackoverflow.com/questions/32453984/cant-access-localhost-with-wamp-and-chrome"">http://stackoverflow.com/questions/32453984/cant-access-localhost-with-wamp-and-chrome</a></font><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Consolas""><br></font></div><div><font class=""Apple-style-span"" face=""Tahoma"" size=""4""><br></font></div></div><script type=""text/javascript"" language=""javascript"" src=""jquery.js""></script><script type=""text/javascript"" language=""javascript"" src=""itemlink.js""></script></body></html>"
bbf4da8d2b19072e6f87f82f5737db807b68c530,16090640,            # Natural sort (http://stackoverflow.com/a/16090640)
a09800d05b8c72f138a883b16150dccb3725987d,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
c84f5d40aecbec0006525cfb3b0f40875a6fc2e0,37628,173;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;classes;1.0;0.015021459227467811;27.0;0
15951b4610ae66ad44e458fe95867061867605b5,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
0b7f42f3daf463ca8c3f269e26f901c0428d177f,4059,                [1] http://stackoverflow.com/questions/437/what-is-your-solution-to-the-fizzbuzz-problem/4059#4059<br>
3b58819fe4fb3d4f67951c06faa1ee640fd54dd5,11695618,"      <p>It is no secret that I am a space nerd. Over the past few months, I have decided to work on an Exoplanet visualization application (based on an Android application prototype that I had designed). I decided that I wanted to see how many planets of what type have been found by Kepler. The goal is to create a module that will allow users to input a CSV file from the <a href=""http://exoplanetarchive.ipac.caltech.edu/cgi-bin/TblView/nph-tblView?app=ExoTbls&amp;config=planets"">NASA Exoplanet Archive</a> and then render a list of planets by type. This introduced a few interesting challenges. First, Javascript isn’t <a href=""http://stackoverflow.com/questions/11695618/dealing-with-float-precision-in-javascript"">very precise with floating point values</a>. Second, how will I convert CSV data from NASA into something usable? Finally, how will I figure out what the planet type even is? Once I solve these questions, I can then take that knowledge and build a library/module/tool. However, before we can start, I needed to perform some research. In the firs part of this series of posts, I will outline my research, conclusion and results.</p>"
fdaf23ee8fed061583d3e87a1850b6484a0bbce6,6989383,    // Adapted from <https://stackoverflow.com/a/6989383/822138> (ciamej)
66bd139da45b7431e1e869a8f6be38acb97f154f,25192794,#https://stackoverflow.com/questions/25192794/no-module-named-pip-req#answer-49867265
7e83209ddfe84129ad0d31cc3e34348a2aaf098c,600268,    https://stackoverflow.com/questions/600268/
5ccb5678f27501eb5c81c73266725515f67b0775,11411022,    // See http://stackoverflow.com/questions/11411022/how-to-check-if-current-thread-is-not-main-thread
80647c634a3e41f986239a1f145eaf2b49ad0cf9,7167553,			// See http://stackoverflow.com/a/7167553
181a4a617e8412d4fa423e33a267e2ac7cb246fe,12593080,"5434249,comment,5432710,5432710,2,0,T-R,,,""Does Heroku Postgres support PLV8 now? In the questions section of the presentation, he doesn't mention it as unsupported, but as recently as Sept 2012, it wasn't [1] - has that changed?<p>[1] <a href=""""http://stackoverflow.com/questions/12593080/heroku-hosted-postgresql-and-plv8"""" rel=""""nofollow"""">http://stackoverflow.com/questions/12593080/heroku-hosted-po...</a>"",1364166488"
dd7cd64f6864facbff5c89474920c9d17943635e,1703552,    // http://stackoverflow.com/questions/1703552/encoding-of-window-location-hash
77f6760a0d05b1417a3715092220ce0327cf7303,37757751,            // http://stackoverflow.com/q/37757751/4077294
478fb143464718350086724ce48eca2711cfd73f,13382516,// https://stackoverflow.com/questions/13382516/getting-scroll-bar-width-using-javascript
9a9fbdc44ce93d1a39dd21e586eb0e7e8f42173c,8430746,    // We could adapt the approach at http://stackoverflow.com/a/8430746/271577
b6c668a9c3c8e69662f6a4d14be4642391b8e9c2,11642877,		 * 】 http://stackoverflow.com/questions/11642877/how-to-recognize-
09b2ff73d59752216b3b5a20f194df2470bcf48a,97984,"            <a href=""http://stackoverflow.com/questions/97984/how-to-secure-database-passwords-in-php"" dir=""ltr"">How to secure database passwords in PHP?</a>"
b7f462af8cf70b343d8a19eb683e5c714fdec570,242531,  Based on http://stackoverflow.com/a/242531/623735
b1c69d9aab1b0343ba458cb5c445b6f3d48d5e94,24355923,"    <meta property=""og:url"" content=""http://stackoverflow.com/questions/24355923/apply-an-action-to-every-object-in-group-for-phaser-js"">"
1468d6eb0ab3a4ee30b96e7226ecd15af4f98aaa,13510458,// thanks http://stackoverflow.com/questions/13510458/golang-convert-iso8859-1-to-utf8
0eea2409136a71f3efaf27f81663857d1901a7d6,1523240,"  ;; see http://clojure.org/vars , http://stackoverflow.com/questions/1523240/let-vs-binding-in-clojure"
6a68c587ae40e3ef3ec1c22620ff31fc408b1662,3561493,    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
92c0bd4c669033b1c76b080afbc7d56ca8be7094,691252,# See http://stackoverflow.com/questions/690723/log-all-errors-to-console-or-file-on-django-site/691252#691252
92b030a18b90dd59f7acd54e2d47df7eeff2f0f9,3222375,3;6;http://stackoverflow.com/questions/3222375/what-is-message-passing;code;0.3137254901960784;0.029850746268656716;0.44999999999999996;0.7935762364647351;0.7071067811865475;0.0
7eb583bfc7d54f2404f7ee374905e40e1553c933,846221,				/* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */
4ee53e4ab3427b4f8f6de7234333addd01009943,19374219,// http://stackoverflow.com/questions/19374219/how-to-find-the-difference-between-two-slices-of-strings-in-golang
2b8ca33944a55b812accbd250a9cd9bf9827b51f,1597649,# http://stackoverflow.com/questions/1597649/replace-strings-in-files-by-python
b6a5b40658b785aeed2c8fe7e3728e85ba0b757a,1527820, * @see http://stackoverflow.com/a/1527820/769384
72a16cad14a73f556534e6d145fdda16fe534b88,56402,                // See http://stackoverflow.com/q/56402 for workaround.
6386fd38c457e86b1d8c20388fd1b13cdc22e30d,5188320,  #via http://stackoverflow.com/questions/5188320/how-can-i-get-a-list-of-git-branches-ordered-by-most-recent-commit
97f94f5f237b09ac2004d64c09616d3aa974d756,9507606,"       ""// http://stackoverflow.com/questions/9507606/when-should-i-use-require-and-when-to-use-define\n"","
ea7f1cf6c0bf733897905329ec2b2568a18f8f7a,4084921,"<h1 id=""参考""><a href=""#参考"" class=""headerlink"" title=""参考""></a>参考</h1><p><a href=""https://codewords.recurse.com/issues/two/git-from-the-inside-out"" target=""_blank"" rel=""external"">git from the inside out</a><br><a href=""http://stackoverflow.com/questions/4084921/what-does-the-git-index-contain-exactly"" target=""_blank"" rel=""external"">What does the git index contain EXACTLY?</a><br><a href=""https://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-Git-%E5%AF%B9%E8%B1%A1"" target=""_blank"" rel=""external"">Git内部原理</a></p>"
4e82f1c3a3120d48c3f5aa3e4d002b7d7b4d0f43,3200069,"    ""href"": ""https://stackoverflow.com/questions/3200069/css-fonts-on-android"""
f0953f7df536edbbfc4cf60ef22594df7fa2a831,3786201,// http://stackoverflow.com/questions/3786201/parsing-of-date-time-from-string-boost
f5ee833e4c9fe4657d81d57ed8df7e7c7caa73ca,59895,# from http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in
2eac7ffdac46c6423a9a9a5db13bbcbf563af756,1197928, * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
ff29d39ab0349e19e6e23c5d5e846887fc96bd1e,16470903,        Function from http://stackoverflow.com/questions/16470903/
58e484903e2fed387945c2bbd2b29bacb82c87dd,8047052,      # http://stackoverflow.com/questions/8047052/testing-nested-controller-action-with-rspec
d248d3469c09c7f7830c6c896300b0fb9c73ff83,221921,//    // http://stackoverflow.com/questions/221921/use-grep-exclude-include-syntax-to-not-grep-through-certain-files
b550598a4d9ffef27a67211070a4385c02e0e958,11993851,""" https://stackoverflow.com/questions/11993851/how-to-delete-not-cut-in-vim"
12b8d002bc585af4954fe889d2cebe38769c986f,3330919,        // http://stackoverflow.com/a/3330919)
785596ef0a736e703ae907d548b46eec80b32dce,10194482,"    ""# http://stackoverflow.com/questions/10194482/custom-matplotlib-plot-chess-board-like-table-with-colored-cells\n"","
9ef0ccfb747b00d167ebf8917a7cc5d74701e355,54695380,"      ""link"": ""https://stackoverflow.com/questions/54695380/typescript-combine-two-arrays-of-objects-by-field-value"","
7d0d6aefb4e171d7b7d5be0666f1c7e7f58315d3,10418644,      //http://stackoverflow.com/questions/10418644/creating-an-iframe-with-given-html-dynamically
d471878f926d722624b35edc5021f706a53d4cf1,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
7ab9bcb4ee372035ebf1993a2ba1a4e16b23534f,377028,        https://stackoverflow.com/questions/377017/test-if-executable-exists-in-python/377028#377028
adc90224eff5d6d893fb83f3e43d88e03211fe7a,3330919,        // http://stackoverflow.com/a/3330919)
e3c5cd59eabf555fe0bd5a513601fc27bf5dfb27,15254195,        #https://stackoverflow.com/questions/15254195/python-how-to-add-space-on-each-3-characters
722d59391136624bb8633bf8667eac54ead36e11,7264899,"	// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr"
0a88d209b0c2bff92d0c946980a5bdd25cf37c26,3330919,        // http://stackoverflow.com/a/3330919)
1712da35a2de0bce7ff021cae0a94e43500f4307,28355773,     *  https://stackoverflow.com/questions/28355773/in-groovy-why-does-the-behaviour-of-change-for-interfaces-extending-compar#comment45123447_28387391
8c92c1eff3aa1201a6fb3eb911721f807d491458,36897877, * @see {@link https://stackoverflow.com/questions/36897877/gulp-error-the-following-tasks-did-not-complete-did-you-forget-to-signal-async}
814bdcc4ec7c5c4cd3e1a613becf9f8307e25db1,2087250,"          </dd><dt class=""implicit"">Shadowing</dt><dd>This implicitly inherited member is shadowed by one or more members in this class.<br />To access this member you can use a <a href=""http://stackoverflow.com/questions/2087250/what-is-the-purpose-of-type-ascription-in-scala"" target=""_blank"">type ascription</a>:<br /><div class=""cmt""><pre>(firstLevelContinueExtractorSpec: scalatest.Matchers.Equalizer[FirstLevelContinueExtractorSpec]).===(rightSide)(equality)</pre></div></dd><dt>Definition Classes</dt><dd>Equalizer</dd></dl></div>"
acfbf0cc7a7da135222dfae85a74eaae11f67332,345117,// Chebyshev http://stackoverflow.com/questions/345085/how-do-trigonometric-functions-work/345117#345117
3061df472ab0244ca7a01b2678776d246dd6b04d,1959062, * @link http://stackoverflow.com/questions/1959062/how-to-add-anchor-tag-to-a-url-from-text-input
77fa08ec6e4596db706a75b30d33fb5268891a95,3513773,    # https://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf \
4693fc3f846cf07df5b186fad956a60ba087fb92,27249730,+ http://stackoverflow.com/questions/27249730/is-maxcpucount-parameter-works-for-msbuild-to-build-delphi-projects
e2c4cdaa875cbbc1ee84e07fcb84a1000bff1bd5,13275419,""" Original idea: https://stackoverflow.com/a/13275419/1530494"
7e6cfe28c47ca750633b62f870faba8b8878c2e2,3330919,        // http://stackoverflow.com/a/3330919)
43a9e4ff77fc1882766ad2d0e8f4ce55d5406f81,6124872,http://stackoverflow.com/a/6124872/1152596
8f8caffde21d6c2e6738a31b01ec0acd4d0740d9,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
26b60450990f064b484b9c6309294d374c86f810,30312096,[post on SO](http://stackoverflow.com/questions/30312096/java-default-methods-is-slower-than-the-same-code-but-in-an-abstract-class)
19e44d8618de1ef2b09457e4c3651d7b6ad52d0b,13216903,      // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension
cce902edd9846b59da19ffb8a6f5a85f780280e6,16797601,              <!-- details: http://stackoverflow.com/questions/16797601/maven-failsafe-plugin-errors-and-build-success-->
f7789f3b842bea33f7c375c374dfee82610bf190,16459606,	  // is webkit? http://stackoverflow.com/a/16459606/376773
533cf806ffbd8e1972e2db10610bf0e96007a017,42918,[[http://stackoverflow.com/a/42918/1346426][How to resolve symbolic links in a shell script's answer]] has a solution.
35631c326bba8c667ea7cb0de463adcd4fdf770e,233505,        // http://stackoverflow.com/a/233505/8037
06de87dc4e60cd7d21c4a04aa48fb069e30fd380,10454518,				Source: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number
d5bc5ddcf6f7c491c186a589260e40ff335d2a9b,325933,	// ref: http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap
7f7f08924a9d1b2864c2b000dd88e93c9123af15,3222375,1;11;http://stackoverflow.com/questions/3222375/what-is-message-passing;thread;0.4852941176470589;0.0625;0.7799999999999999;1.3277941176470587;0.0;0.0
d1aae40a7679667fc81712d582d23ea691b0cbdf,1176023,    # from http://stackoverflow.com/a/1176023/298479
3c676fe1b16c209a6178b5dfb279d39cb7d52dd8,1880321,to a folder with a [short path name](http://stackoverflow.com/questions/1880321/why-does-the-260-character-path-length-limit-exist-in-windows) 
1ac6d078c93dbe0cc5bd51cfdecffe0746aaff07,6943862,// http://stackoverflow.com/questions/6943862/is-there-a-a-define-for-64-bit-in-gcc
5bf194c8eee3cdf52038ecc2710fbe8b1cca953d,1596318,- [https://stackoverflow.com/questions/1596318/find-working-directory-from-ant java - Find working directory from Ant - Stack Overflow]
f1569f364b138a133dcf466bfac118b887ff6564,470832,"    ""/**\n * @file url.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param  {String} url The url to parse\n * @return {Object}     An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n  const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n  // add the url to an anchor and let the browser parse the URL\n  let a = document.createElement('a');\n  a.href = url;\n\n  // IE8 (and 9?) Fix\n  // ie8 doesn't parse the URL correctly until the anchor is actually\n  // added to the body, and an innerHTML is needed to trigger the parsing\n  let addToBody = (a.host === '' && a.protocol !== 'file:');\n  let div;\n  if (addToBody) {\n    div = document.createElement('div');\n    div.innerHTML = `<a href=\""${url}\""></a>`;\n    a = div.firstChild;\n    // prevent the div from affecting layout\n    div.setAttribute('style', 'display:none; position:absolute;');\n    document.body.appendChild(div);\n  }\n\n  // Copy the specific URL properties to a new object\n  // This is also needed for IE8 because the anchor loses its\n  // properties when it's removed from the dom\n  let details = {};\n  for (var i = 0; i < props.length; i++) {\n    details[props[i]] = a[props[i]];\n  }\n\n  // IE9 adds the port to the host property unlike everyone else. If\n  // a port identifier is added for standard ports, strip it.\n  if (details.protocol === 'http:') {\n    details.host = details.host.replace(/:80$/, '');\n  }\n  if (details.protocol === 'https:') {\n    details.host = details.host.replace(/:443$/, '');\n  }\n\n  if (addToBody) {\n    document.body.removeChild(div);\n  }\n\n  return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param  {String} url URL to make absolute\n * @return {String}     Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n  // Check if absolute URL\n  if (!url.match(/^https?:\\/\\//)) {\n    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n    let div = document.createElement('div');\n    div.innerHTML = `<a href=\""${url}\"">x</a>`;\n    url = div.firstChild.href;\n  }\n\n  return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String}    path    The fileName path like '/path/to/file.mp4'\n * @returns {String}          The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n  if(typeof path === 'string'){\n    let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n    let pathParts = splitPathRe.exec(path);\n\n    if (pathParts) {\n      return pathParts.pop().toLowerCase();\n    }\n  }\n\n  return '';\n};\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean}   Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nexport const isCrossOrigin = function(url) {\n  let winLoc = window.location;\n  let urlInfo = parseUrl(url);\n\n  // IE8 protocol relative urls will return ':' for protocol\n  let srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;\n\n  // Check if url is for another domain/origin\n  // IE8 doesn't know location.origin, so we won't rely on it here\n  let crossOrigin = (srcProtocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n  return crossOrigin;\n};\n"","
e5df019efefedf71eb4fa35db03cd1b2c5a5a3b9,4814970,# http://stackoverflow.com/questions/4814970/subprocess-check-output-doesnt-seem-to-exist-python-2-6-5
2d75510d96563f8d78d038b50be57f7adb16351d,2762924,"A couple of problems may occur. You might experience performance problems, because there are is a complex UI tree that the processor needs to handle. Another more serious issue is a possibility of [StackOverflowError](http://stackoverflow.com/questions/2762924/java-lang-stackoverflow-error-suspected-too-many-views)."
bbe7cc8cf5c2122dd9562739b187b1b58c2b4a57,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
ed579f0f7ebf565586510a4c657a131126438636,3997223,           has layout. See <http://stackoverflow.com/questions/3997223/word-wrapbreak-word-not-working-in-ie8>
a4b48c06991fd3b5ae48b8cec8cdfaedfaba643d,5635981,        // see http://stackoverflow.com/a/5635981 for CTFont implementation.
55f9d43fa6cab3ff4937dd283ac5743eb58dd98b,398120,    // is firebug? http://stackoverflow.com/a/398120/376773
3404e0f1c2a767133267f732b9888e74a822d88b,11898566, * https://stackoverflow.com/questions/11898566/tutorials-about-javaagents
d0dd19f73fb4f95c21e9289c551740c5e84fe8b0,1197928, * http://stackoverflow.com/questions/1197928/how-to-add-30-minutes-to-a-javascript-date-object
6a8781d3eb1bae7c674e53985440c935737429b9,7207422,// http://stackoverflow.com/questions/7207422/setting-up-opengl-multiple-render-targets
e6a6895df7f9b21af0ce3f38711276cdc1ca66f5,22948274,  // http://stackoverflow.com/a/22948274/888165
5a3dd688b310c7a2ebba21c57e04c54e5934a68e,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
ed587174c4306392c66677813144f1457129b5c6,13048954,# https://stackoverflow.com/questions/13048954/how-to-login-to-a-spring-security-login-form-using-curl
4e0e34a0a4f4c258694f306ef2e8fd0576303b0e,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
8a709aacbfc5803323a1a1eba4c79a568515ff82,181348,        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
a22d822b9d8b9c61b15bfdc36eed20b3fbbf575a,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
abe4eae8a5a952a315147d5a63e05611a05829c2,5392344,            // inspired by http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with-jquery-ajax
516c5e41b471aa240e0c5281c3cc60d1f413fbc0,31430308,            // Source: https://stackoverflow.com/questions/31430308/uitextview-attributedtext-with-japanese-keyboard-repeats-input
31383870f33fe51618623ece1e8990d4b5ddb3e9,1575141,                <!-- http://stackoverflow.com/questions/1575141/make-div-100-height-of-browser-window -->
ffbcb26a5a828badc793b9a249f9c9d3825e02ed,11661187, * Source: http://stackoverflow.com/q/11661187
a7555db743f1bc88a4ec728409779ab0c0c8fa8e,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
ecffe7bd33b2bf72eea779df3189360716701b44,10300743,  // based on http://stackoverflow.com/a/10300743/280842
43ca34a52cd5ce10eafcbe2d05dd6c88ec8527f2,3279543,// http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom
fe7c5e53892541740e846343d7413fd131fa45ce,3398258,# https://stackoverflow.com/questions/3398258/edit-shell-script-while-its-running
cfad47ef8bb2eb9a71a0cf0ad1023a8a644bea06,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
7030b73f8bdf516141dfd05c74ca23e47a41a27e,105034, * http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
84a07f94ad2d74e69c762d1b7b2c42359effa42e,5623838,    // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275
f8cbbd2484db546e2bcd7c308f83eed9ea1ab5f0,57803,"http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,"
cac79a5deb9e47f3ad2cb921a12b387576195ad9,3330919,        // http://stackoverflow.com/a/3330919)
980733ed4ae1b1c89bf60b27d2b784ca93ff136e,2684561,					//   (http://stackoverflow.com/a/2684561).
1525a369a4b9870e31328e4359a5ec07bb6d958f,9643248,    # Ref : https://stackoverflow.com/questions/9643248/argparse-accept-everything
c39f4b917170100274e9f9f07f91252727f7e418,12151060,"// Could be a compiler bug, says http://stackoverflow.com/questions/12151060/seemingly-inappropriate-compilation-warning-with-c-cli"
08f98a824f6b81a67809eac8cece9b098daa8796,1502385,//http://stackoverflow.com/questions/1502385/how-can-i-make-this-code-work-in-ie
5e12f5efa03f2eee0af34f467712f851c841256a,4775722,                // see http://stackoverflow.com/questions/4775722/check-if-object-is-array
bb623cea978f8a875d3ed95c9472620da191ffc0,1551889,    /// <para>http://stackoverflow.com/questions/1551889/how-to-make-an-ownerdraw-trackbar-in-winforms</para>
edd1bfa186b95550a53048aadc19926ffd16e670,44739823,/* https://stackoverflow.com/questions/5059501/probe-method-device-drivers/44739823#44739823
546237b60cfafb6d89572bbf9f3d55327eb2126a,9038625,  // http://stackoverflow.com/questions/9038625/detect-if-device-is-ios
bf55c68836451155f196bfc4ebf943e16c361218,950087,     * See: http://stackoverflow.com/questions/950087/include-a-javascript-file-in-another-javascript-file
13a1cefedd042a53054ec9ca610604d888c35920,6051825,            //see http://stackoverflow.com/questions/6051825
6fead61a198b4400c0d347469e76381519128db7,1427422,// from http://stackoverflow.com/questions/1427422/cheap-algorithm-to-find-measure-of-angle-between-vectors
31243d6d7eac0ddc31716f2db4dc158c0d66fc86,171251,   * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically
8927a7aee290bfb45685a87025b4a50343efdc81,25425818,"[Arduino](https://www.arduino.cc/), [Arduino](http://www.arduino.org/), [arduino-leonardo-upload-from-makefile](https://nicholaskell.wordpress.com/2012/08/11/arduino-leonardo-upload-from-makefile/), [Arduino OneWire library](https://www.pjrc.com/teensy/td_libs_OneWire.html), [how-it-works-ds18b20-and-arduino](https://tushev.org/articles/arduino/10/how-it-works-ds18b20-and-arduino), [matplotlib](https://matplotlib.org/), [numpy](https://www.numpy.org/), [python-serial-read-then-overwrite-to-txt-file](https://stackoverflow.com/questions/25425818/python-serial-read-then-overwrite-to-txt-file)"
114cc0e6ecd020722f38972e8a0baca9da4eb63e,15082316,        //http://stackoverflow.com/questions/15082316/how-to-set-active-class-to-nav-menu-from-twitter-bootstrap
dbf210358c5ae45578b7c172ba2822dc2e0d7e33,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
1d218bc62fc8d2fe34244c2f92a9422cb000b0cc,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
5fff87900c758607201c36f271b9eb6be40e3cbc,2353818,"* Node.js - Start by going through [Node.js Official Website](http://nodejs.org/) and this [StackOverflow Thread](http://stackoverflow.com/questions/2353818/how-do-i-get-started-with-node-js), which should get you going with the Node.js platform in no time."
6b6ebb6a2be94d7a6a44b4ecd7c3eb069ae290eb,10984951,"	  // Using method ""2"" here: http://stackoverflow.com/a/10984951/525714"
1a3025d3a1673f5a0d9c3b5f0c5fe8d5d4efb71f,26945277,"<li>we can use the following function is from <a href=""https://stackoverflow.com/questions/26945277/how-to-split-python-list-every-nth-element"">StackOverflow</a></li>"
e0bcf54994b1d7978e286e62a39f0ab61e596837,3426404,    // source: http://stackoverflow.com/questions/3426404/create-a-hexadecimal-colour-based-on-a-string-with-javascript
8a83392ad474783604b575be3a25ab3de85f6654,582336,* [How can you profile a Python script?](http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script)
2d866184eefa8bfa1031948985e203ae6fb16633,32172925,      // http://stackoverflow.com/questions/32172925/travis-ci-sporadic-timeouts-to-localhost
2eb9921895dc42f0567d929331f22024da32a64c,21340508,                                <!--see http://stackoverflow.com/questions/21340508/how-can-i-organize-source-generation-in-maven-->
cf59b2d57203b633ea6f0a7e30be231ba200c26f,36150458,    // https://stackoverflow.com/questions/36150458
588b3efb7f80af558cba93d0445d9e584b476868,28210364,    // http://stackoverflow.com/a/28210364/1070244
fb2b99b4936f4ba041c92d94112f56e2ef950348,13131500,"		#write xz file, see http://stackoverflow.com/a/13131500"
502b056e74ade0d3ce5229b1b3317f4cb0c59311,2336692,     * http://stackoverflow.com/questions/2336692/java-multiple-class-declarations-in-one-file) will
98fcb65135c83d53419d19938dd1e2e9af4344c4,11744120,        // Via http://stackoverflow.com/a/11744120/864799
f61e3139a034c36bb86c4ddcce21da0f0178e4d4,6646052,"If your project uses ARC, flag the source files with the `-fno-objc-arc` compiler flag ([how to](http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project))."
480ff182e103bcfc03f3fda02ece81e8c9c7591e,53497,            # http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
3608ac9f4c9e7228da6ef2d757887b48805568e3,13768515,	# see http://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw
1ca8dddef0db179c86c5fee444c85a6dd8a585f9,6965107,	 * http://stackoverflow.com/questions/6965107/converting-between-strings-and-arraybuffers
6b5267a899ab04447aa2221651b56f20f9fdbca1,6414278,        # from http://stackoverflow.com/a/6414278/1289080
6f0148df08cb29098ea96e8394248af45ae8184f,18729405,    // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array
4adc334dfeafc0e97e6e47484899a1aeb71539b9,25509879,# https://stackoverflow.com/questions/25509879/how-can-i-make-a-list-of-all-dataframes-that-are-in-my-global-environment
78b742d2b0a3d6b2fd5ad0330c9c01d5f4be0f25,4502672,https://stackoverflow.com/a/4502672/4549682
7b169515b88ef19276aeef81111efdf30808c3ae,3141860,// https://stackoverflow.com/questions/3141860/aes-ctr-256-encryption-mode-of-operation-on-openssl
826d5d9a0943157028edbf0a3ad8d446dd74d0f4,22383708,"	    	// Had a report of this crashing on Galaxy Nexus - may be device specific issue, see http://stackoverflow.com/questions/22383708/java-lang-runtimeexception-fail-to-get-camera-info"
5359084193a1079a55a3b1e0d4fe1a3c6f0c6243,6965107,//http://stackoverflow.com/questions/6965107/ (continues on next line)
28fd1ced911dcaa9409170328120458efb001c93,13246099,    // based on http://stackoverflow.com/questions/13246099/using-c-sharp-to-reference-a-port-number-to-service-name
af6320fbb677b697f00767f602adf7c8ab644a7d,1168807,// http://stackoverflow.com/questions/1168807/how-can-i-add-a-key-value-pair-to-a-javascript-object
5925f68b105feb9e20c7e9d61cf64ae3b0125270,21963136,		// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
b11e005a1433027b45759c1df8fd7887f798ccf5,29725828,	// https://stackoverflow.com/questions/29725828/update-style-of-a-component-onscroll-in-react-js
70bddc4ef18533dcb4ca6d2e86feec34f20cdb0e,1660441,              As explained here: http://stackoverflow.com/questions/1660441/java-flag-to-enable-extended-serialization-debugging-info
10bcbdf052bcf6aaaf5ba1f4b21bb469496a1a57,7414355,            ; http://stackoverflow.com/questions/7414355/
96e381d8f6f0fc2238b1914c741d86d16646effc,6178556,[iPhone: numeric keyboard for text input](http://stackoverflow.com/questions/6178556/iphone-numeric-keyboard-for-text-input)
19154ed7b0cb05c20b505388f65642c4bd091c82,28016578,// https://stackoverflow.com/questions/28016578/swift-how-to-create-a-date-time-stamp-and-format-as-iso-8601-rfc-3339-utc-tim
e9d68bab7fee89bfb74d2e9f7ff4ee0ef69a7296,3219758,	// MutationListener code is orginally come from http://stackoverflow.com/questions/3219758/detect-changes-in-the-dom
3bc1b262680b05ee3564c5355d4bc61291d1b6e0,1148309,    //this code is copy from:http://stackoverflow.com/questions/1148309/inverting-a-4x4-matrix
b52f1b66e7e49c27277dac13e6e65bd34a2eb6ae,3330919,        // http://stackoverflow.com/a/3330919)
43b71ce7f62526e315fd773d5d20dca5b30b94e3,16992038,# this page contains an example code for it: http://stackoverflow.com/questions/16992038/inline-labels-in-matplotlib
69f3c6d39ba9a55c48012ea5b37bbad91dfc817b,10951039, * http://stackoverflow.com/questions/10951039/specifying-64-bit-alignment
6d72d94a47230bfc1d5c0ef92b676931108f0097,16591175,     * @see http://stackoverflow.com/a/16591175/113195
829c2af6c86c20d71330ae4182e6ba434cd37121,359788,   * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
b275494387b6265fd26b1d632a4d6591f189ed56,34389180, * source : http://stackoverflow.com/questions/34389180/how-to-upload-file-in-server-using-springs
99b49788e722a400d1ed88c158a4b6efbec306b5,822032,"    // https://stackoverflow.com/questions/821873/how-to-open-an-stdfstream-ofstream-or-ifstream-with-a-unicode-filename/822032#822032),"
acce894ed46647e1d94072048fad898b56f5c29d,26979433,      // solution: http://stackoverflow.com/questions/26979433/gulp-with-gulp-ruby-sass-error-style-css-map31-unknown-word
4da284485e309c7ef992411d862940a7c473ce00,24686535,		 * @link http://stackoverflow.com/a/24686535
fba343b041dec04faf159968d0e4ae77b05c0554,11293857,// from http://stackoverflow.com/questions/11293857/fastest-way-to-copy-file-in-node-js
2320ee5da3afb66e7359c19e60bc6111109b7040,2099249,<!-- http://stackoverflow.com/questions/2099249/aligning-textviews-on-the-left-and-right-edges-in-android-layout -->
7b7300fca23eb5e140ad7e75cb44b2bac9208b50,29518797,"            <a href=""http://stackoverflow.com/questions/29518797/ssh-access-for-non-admin-users-at-esxi-5-5"" class=""started-link"">asked <span title=""2015-04-08 15:21:57Z"" class=""relativetime"">2 mins ago</span></a>"
4be153f0c82ea6279c1f424cafeea630b924920e,10539857,- [Statically link GMP using GHC and LLVM](http://stackoverflow.com/questions/10539857/statically-link-gmp-to-an-haskell-application-using-ghc-llvm)
a2cff8d66aa25be59b295bca34e06bc83c9048f4,8579158,	 * http://stackoverflow.com/a/8579158
485ce4a730a9250ed04a1f0d38386146ae0e32aa,3561493,    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
07ebd55b1184a96ecef43345200485aa04a4003e,7634346,        // As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event
ba037bd649b11a7f28123662a3f05fa099c44aee,3375697,# http://stackoverflow.com/questions/3375697/useful-gcc-flags-for-c
7805f55509f8b3050df27e3c6ee216de6a74c420,470832,"    ""import window from 'global/window';\nimport document from 'global/document';\nlet navigator = window.navigator;\n\nlet hasOwnProp = Object.prototype.hasOwnProperty;\n\n/**\n * Creates an element and applies properties.\n * @param  {String=} tagName    Name of tag to be created.\n * @param  {Object=} properties Element properties to be applied.\n * @return {Element}\n * @private\n */\nvar createEl = function(tagName='div', properties={}){\n  let el = document.createElement(tagName);\n\n  obj.each(properties, function(propName, val){\n    // Not remembering why we were checking for dash\n    // but using setAttribute means you have to use getAttribute\n\n    // The check for dash checks for the aria-* attributes, like aria-label, aria-valuemin.\n    // The additional check for \""role\"" is because the default method for adding attributes does not\n    // add the attribute \""role\"". My guess is because it's not a valid attribute in some namespaces, although\n    // browsers handle the attribute just fine. The W3C allows for aria-* attributes to be used in pre-HTML5 docs.\n    // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem.\n    if (propName.indexOf('aria-') !== -1 || propName == 'role') {\n     el.setAttribute(propName, val);\n    } else {\n     el[propName] = val;\n    }\n  });\n\n  return el;\n};\n\n/**\n * Uppercase the first letter of a string\n * @param  {String} string String to be uppercased\n * @return {String}\n * @private\n */\nvar capitalize = function(string){\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * Object functions container\n * @type {Object}\n * @private\n */\nvar obj = {};\n\n/**\n * Object.create shim for prototypal inheritance\n *\n * https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create\n *\n * @function\n * @param  {Object}   obj Object to use as prototype\n * @private\n */\nobj.create = Object.create || function(obj){\n  //Create a new function called 'F' which is just an empty object.\n  function F() {}\n\n  //the prototype of the 'F' function should point to the\n  //parameter of the anonymous function.\n  F.prototype = obj;\n\n  //create a new constructor function based off of the 'F' function.\n  return new F();\n};\n\n/**\n * Loop through each property in an object and call a function\n * whose arguments are (key,value)\n * @param  {Object}   obj Object of properties\n * @param  {Function} fn  Function to be called on each property.\n * @this {*}\n * @private\n */\nobj.each = function(obj, fn, context){\n  for (var key in obj) {\n    if (hasOwnProp.call(obj, key)) {\n      fn.call(context || this, key, obj[key]);\n    }\n  }\n};\n\n/**\n * Merge two objects together and return the original.\n * @param  {Object} obj1\n * @param  {Object} obj2\n * @return {Object}\n * @private\n */\nobj.merge = function(obj1, obj2){\n  if (!obj2) { return obj1; }\n  for (var key in obj2){\n    if (hasOwnProp.call(obj2, key)) {\n      obj1[key] = obj2[key];\n    }\n  }\n  return obj1;\n};\n\n/**\n * Merge two objects, and merge any properties that are objects\n * instead of just overwriting one. Uses to merge options hashes\n * where deeper default settings are important.\n * @param  {Object} obj1 Object to override\n * @param  {Object} obj2 Overriding object\n * @return {Object}      New object. Obj1 and Obj2 will be untouched.\n * @private\n */\nobj.deepMerge = function(obj1, obj2){\n  var key, val1, val2;\n\n  // make a copy of obj1 so we're not overwriting original values.\n  // like prototype.options_ and all sub options objects\n  obj1 = obj.copy(obj1);\n\n  for (key in obj2){\n    if (hasOwnProp.call(obj2, key)) {\n      val1 = obj1[key];\n      val2 = obj2[key];\n\n      // Check if both properties are pure objects and do a deep merge if so\n      if (obj.isPlain(val1) && obj.isPlain(val2)) {\n        obj1[key] = obj.deepMerge(val1, val2);\n      } else {\n        obj1[key] = obj2[key];\n      }\n    }\n  }\n  return obj1;\n};\n\n/**\n * Make a copy of the supplied object\n * @param  {Object} obj Object to copy\n * @return {Object}     Copy of object\n * @private\n */\nobj.copy = function(objToCopy){\n  return obj.merge({}, objToCopy);\n};\n\n/**\n * Check if an object is plain, and not a dom node or any object sub-instance\n * @param  {Object} obj Object to check\n * @return {Boolean}     True if plain, false otherwise\n * @private\n */\nobj.isPlain = function(obj){\n  return !!obj\n    && typeof obj === 'object'\n    && obj.toString() === '[object Object]'\n    && obj.constructor === Object;\n};\n\n/**\n * Check if an object is Array\n*  Since instanceof Array will not work on arrays created in another frame we need to use Array.isArray, but since IE8 does not support Array.isArray we need this shim\n * @param  {Object} obj Object to check\n * @return {Boolean}     True if plain, false otherwise\n * @private\n */\nobj.isArray = Array.isArray || function(arr) {\n  return Object.prototype.toString.call(arr) === '[object Array]';\n};\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n   It also stores a unique id on the function so it can be easily removed from events\n * @param  {*}   context The object to bind as scope\n * @param  {Function} fn      The function to be bound to a scope\n * @param  {Number=}   uid     An optional unique ID for the function to be set\n * @return {Function}\n * @private\n */\nvar bind = function(context, fn, uid) {\n  // Make sure the function has a unique ID\n  if (!fn.guid) { fn.guid = guid++; }\n\n  // Create the new function that changes the context\n  let ret = function() {\n    return fn.apply(context, arguments);\n  };\n\n  // Allow for the ability to individualize this function\n  // Needed in the case where multiple objects might share the same prototype\n  // IF both items add an event listener with the same function, then you try to remove just one\n  // it will remove both because they both have the same guid.\n  // when using this, you need to use the bind method when you remove the listener as well.\n  // currently used in text tracks\n  ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n  return ret;\n};\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n * @type {Object}\n * @private\n */\nvar cache = {};\n\n/**\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nvar guid = 1;\n\n/**\n * Unique attribute name to store an element's guid in\n * @type {String}\n * @constant\n * @private\n */\nvar expando = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @private\n */\nvar getData = function(el){\n  var id = el[expando];\n  if (!id) {\n    id = el[expando] = guid++;\n  }\n  if (!cache[id]) {\n    cache[id] = {};\n  }\n  return cache[id];\n};\n\n/**\n * Returns the cache object where data for an element is stored\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @private\n */\nvar hasData = function(el){\n  var id = el[expando];\n  return !(!id || isEmpty(cache[id]));\n};\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n * @param  {Element} el Remove data for an element\n * @private\n */\nvar removeData = function(el){\n  var id = el[expando];\n  if (!id) { return; }\n  // Remove all stored data\n  // Changed to = null\n  // http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/\n  // cache[id] = null;\n  delete cache[id];\n\n  // Remove the expando property from the DOM node\n  try {\n    delete el[expando];\n  } catch(e) {\n    if (el.removeAttribute) {\n      el.removeAttribute(expando);\n    } else {\n      // IE doesn't appear to support removeAttribute on the document element\n      el[expando] = null;\n    }\n  }\n};\n\n/**\n * Check if an object is empty\n * @param  {Object}  obj The object to check for emptiness\n * @return {Boolean}\n * @private\n */\nvar isEmpty = function(obj) {\n  for (var prop in obj) {\n    // Inlude null properties as empty.\n    if (obj[prop] !== null) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Check if an element has a CSS class\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n * @private\n */\nvar hasClass = function(element, classToCheck){\n  return ((' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1);\n};\n\n/**\n * Add a CSS class name to an element\n * @param {Element} element    Element to add class name to\n * @param {String} classToAdd Classname to add\n * @private\n */\nvar addClass = function(element, classToAdd){\n  if (!hasClass(element, classToAdd)) {\n    element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n  }\n};\n\n/**\n * Remove a CSS class name from an element\n * @param {Element} element    Element to remove from class name\n * @param {String} classToAdd Classname to remove\n * @private\n */\nvar removeClass = function(element, classToRemove){\n  if (!hasClass(element, classToRemove)) {return;}\n\n  let classNames = element.className.split(' ');\n\n  // no arr.indexOf in ie8, and we don't want to add a big shim\n  for (let i = classNames.length - 1; i >= 0; i--) {\n    if (classNames[i] === classToRemove) {\n      classNames.splice(i,1);\n    }\n  }\n\n  element.className = classNames.join(' ');\n};\n\n/**\n * Element for testing browser HTML5 video capabilities\n * @type {Element}\n * @constant\n * @private\n */\nvar TEST_VID = createEl('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nTEST_VID.appendChild(track);\n\n/**\n * Useragent for browser testing.\n * @type {String}\n * @constant\n * @private\n */\nvar USER_AGENT = navigator.userAgent;\n\n/**\n * Device is an iPhone\n * @type {Boolean}\n * @constant\n * @private\n */\nvar IS_IPHONE = (/iPhone/i).test(USER_AGENT);\nvar IS_IPAD = (/iPad/i).test(USER_AGENT);\nvar IS_IPOD = (/iPod/i).test(USER_AGENT);\nvar IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nvar IOS_VERSION = (function(){\n  var match = USER_AGENT.match(/OS (\\d+)_/i);\n  if (match && match[1]) { return match[1]; }\n})();\n\nvar IS_ANDROID = (/Android/i).test(USER_AGENT);\nvar ANDROID_VERSION = (function() {\n  // This matches Android Major.Minor.Patch versions\n  // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n  var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n    major,\n    minor;\n\n  if (!match) {\n    return null;\n  }\n\n  major = match[1] && parseFloat(match[1]);\n  minor = match[2] && parseFloat(match[2]);\n\n  if (major && minor) {\n    return parseFloat(match[1] + '.' + match[2]);\n  } else if (major) {\n    return major;\n  } else {\n    return null;\n  }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nvar IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\n\nvar IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nvar IS_CHROME = (/Chrome/i).test(USER_AGENT);\nvar IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nvar TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nvar BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in TEST_VID.style;\n\n/**\n * Apply attributes to an HTML element.\n * @param  {Element} el         Target element.\n * @param  {Object=} attributes Element attributes to be applied.\n * @private\n */\nvar setElementAttributes = function(el, attributes){\n  obj.each(attributes, function(attrName, attrValue) {\n    if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n      el.removeAttribute(attrName);\n    } else {\n      el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n    }\n  });\n};\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n * @param  {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n */\nvar getElementAttributes = function(tag){\n  var obj, knownBooleans, attrs, attrName, attrVal;\n\n  obj = {};\n\n  // known boolean attributes\n  // we can check for matching boolean properties, but older browsers\n  // won't know about HTML5 boolean attributes that we still read from\n  knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n  if (tag && tag.attributes && tag.attributes.length > 0) {\n    attrs = tag.attributes;\n\n    for (var i = attrs.length - 1; i >= 0; i--) {\n      attrName = attrs[i].name;\n      attrVal = attrs[i].value;\n\n      // check for known booleans\n      // the matching element property will return a value for typeof\n      if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n        // the value of an included boolean attribute is typically an empty\n        // string ('') which would equal false if we just check for a false value.\n        // we also don't want support bad code like autoplay='false'\n        attrVal = (attrVal !== null) ? true : false;\n      }\n\n      obj[attrName] = attrVal;\n    }\n  }\n\n  return obj;\n};\n\n/**\n * Get the computed style value for an element\n * From http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/\n * @param  {Element} el        Element to get style value for\n * @param  {String} strCssRule Style name\n * @return {String}            Style value\n * @private\n */\nvar getComputedDimension = function(el, strCssRule){\n  var strValue = '';\n  if(document.defaultView && document.defaultView.getComputedStyle){\n    strValue = document.defaultView.getComputedStyle(el, '').getPropertyValue(strCssRule);\n\n  } else if(el.currentStyle){\n    // IE8 Width/Height support\n    let upperCasedRule = strCssRule.substr(0,1).toUpperCase() + strCssRule.substr(1);\n    strValue = el[`client${upperCasedRule}`] + 'px';\n  }\n  return strValue;\n};\n\n/**\n * Insert an element as the first child node of another\n * @param  {Element} child   Element to insert\n * @param  {[type]} parent Element to insert child into\n * @private\n */\nvar insertFirst = function(child, parent){\n  if (parent.firstChild) {\n    parent.insertBefore(child, parent.firstChild);\n  } else {\n    parent.appendChild(child);\n  }\n};\n\n/**\n * Object to hold browser support information\n * @type {Object}\n * @private\n */\nvar browser = {};\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n * @param  {String} id  Element ID\n * @return {Element}    Element with supplied ID\n * @private\n */\nvar el = function(id){\n  if (id.indexOf('#') === 0) {\n    id = id.slice(1);\n  }\n\n  return document.getElementById(id);\n};\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n * @param  {Number} seconds Number of seconds to be turned into a string\n * @param  {Number} guide   Number (in seconds) to model the string after\n * @return {String}         Time formatted as H:MM:SS or M:SS\n * @private\n */\nvar formatTime = function(seconds, guide=seconds) {\n  let s = Math.floor(seconds % 60);\n  let m = Math.floor(seconds / 60 % 60);\n  let h = Math.floor(seconds / 3600);\n  const gm = Math.floor(guide / 60 % 60);\n  const gh = Math.floor(guide / 3600);\n\n  // handle invalid times\n  if (isNaN(seconds) || seconds === Infinity) {\n    // '-' is false for all relational operators (e.g. <, >=) so this setting\n    // will add the minimum number of fields specified by the guide\n    h = m = s = '-';\n  }\n\n  // Check if we need to show hours\n  h = (h > 0 || gh > 0) ? h + ':' : '';\n\n  // If hours are showing, we may need to add a leading zero.\n  // Always show at least one digit of minutes.\n  m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n  // Check if leading zero is need for seconds\n  s = (s < 10) ? '0' + s : s;\n\n  return h + m + s;\n};\n\n// Attempt to block the ability to select text while dragging controls\nvar blockTextSelection = function(){\n  document.body.focus();\n  document.onselectstart = function () { return false; };\n};\n// Turn off text selection blocking\nvar unblockTextSelection = function(){ document.onselectstart = function () { return true; }; };\n\n/**\n * Trim whitespace from the ends of a string.\n * @param  {String} string String to trim\n * @return {String}        Trimmed string\n * @private\n */\nvar trim = function(str){\n  return (str+'').replace(/^\\s+|\\s+$/g, '');\n};\n\n/**\n * Should round off a number to a decimal place\n * @param  {Number} num Number to round\n * @param  {Number} dec Number of decimal places to round to\n * @return {Number}     Rounded number\n * @private\n */\nvar round = function(num, dec=0) {\n  return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);\n};\n\n/**\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n * @param  {Number} start Start time in seconds\n * @param  {Number} end   End time in seconds\n * @return {Object}       Fake TimeRange object\n * @private\n */\nvar createTimeRange = function(start, end){\n  return {\n    length: 1,\n    start: function() { return start; },\n    end: function() { return end; }\n  };\n};\n\n/**\n * Add to local storage (maybe removable)\n * @private\n */\nvar setLocalStorage = function(key, value){\n  try {\n    // IE was throwing errors referencing the var anywhere without this\n    let localStorage = window.localStorage || false;\n    if (!localStorage) { return; }\n    localStorage[key] = value;\n  } catch(e) {\n    if (e.code == 22 || e.code == 1014) { // Webkit == 22 / Firefox == 1014\n      log('LocalStorage Full (VideoJS)', e);\n    } else {\n      if (e.code == 18) {\n        log('LocalStorage not allowed (VideoJS)', e);\n      } else {\n        log('LocalStorage Error (VideoJS)', e);\n      }\n    }\n  }\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n * @param  {String} url URL to make absolute\n * @return {String}     Absolute URL\n * @private\n */\nvar getAbsoluteURL = function(url){\n  // Check if absolute URL\n  if (!url.match(/^https?:\\/\\//)) {\n    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n    url = createEl('div', {\n      innerHTML: `<a href=\""${url}\"">x</a>`\n    }).firstChild.href;\n  }\n\n  return url;\n};\n\n/**\n * Resolve and parse the elements of a URL\n * @param  {String} url The url to parse\n * @return {Object}     An object of url details\n */\nvar parseUrl = function(url) {\n  const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n  // add the url to an anchor and let the browser parse the URL\n  let a = createEl('a', { href: url });\n\n  // IE8 (and 9?) Fix\n  // ie8 doesn't parse the URL correctly until the anchor is actually\n  // added to the body, and an innerHTML is needed to trigger the parsing\n  let addToBody = (a.host === '' && a.protocol !== 'file:');\n  let div;\n  if (addToBody) {\n    div = createEl('div');\n    div.innerHTML = `<a href=\""${url}\""></a>`;\n    a = div.firstChild;\n    // prevent the div from affecting layout\n    div.setAttribute('style', 'display:none; position:absolute;');\n    document.body.appendChild(div);\n  }\n\n  // Copy the specific URL properties to a new object\n  // This is also needed for IE8 because the anchor loses its\n  // properties when it's removed from the dom\n  let details = {};\n  for (var i = 0; i < props.length; i++) {\n    details[props[i]] = a[props[i]];\n  }\n\n  // IE9 adds the port to the host property unlike everyone else. If\n  // a port identifier is added for standard ports, strip it.\n  if (details.protocol === 'http:') {\n    details.host = details.host.replace(/:80$/, '');\n  }\n  if (details.protocol === 'https:') {\n    details.host = details.host.replace(/:443$/, '');\n  }\n\n  if (addToBody) {\n    document.body.removeChild(div);\n  }\n\n  return details;\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param  {String} type The type of message, or `null` for `log`\n * @param  {[type]} args The args to be passed to the log\n * @private\n */\nfunction _logType(type, args){\n  // convert args to an array to get array functions\n  let argsArray = Array.prototype.slice.call(args);\n  // if there's no console then don't try to output messages\n  // they will still be stored in Lib.log.history\n  // Was setting these once outside of this function, but containing them\n  // in the function makes it easier to test cases where console doesn't exist\n  let noop = function(){};\n\n  let console = window['console'] || {\n    'log': noop,\n    'warn': noop,\n    'error': noop\n  };\n\n  if (type) {\n    // add the type to the front of the message\n    argsArray.unshift(type.toUpperCase()+':');\n  } else {\n    // default to log with no prefix\n    type = 'log';\n  }\n\n  // add to history\n  log.history.push(argsArray);\n\n  // add console prefix after adding to history\n  argsArray.unshift('VIDEOJS:');\n\n  // call appropriate log function\n  if (console[type].apply) {\n    console[type].apply(console, argsArray);\n  } else {\n    // ie8 doesn't allow error.apply, but it will just join() the array anyway\n    console[type](argsArray.join(' '));\n  }\n}\n\n/**\n * Log plain debug messages\n */\nvar log = function(){\n  _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n  _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n  _logType('warn', arguments);\n};\n\n// Offset Left\n// getBoundingClientRect technique from John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\nvar findPosition = function(el) {\n  let box;\n\n  if (el.getBoundingClientRect && el.parentNode) {\n    box = el.getBoundingClientRect();\n  }\n\n  if (!box) {\n    return {\n      left: 0,\n      top: 0\n    };\n  }\n\n  const docEl = document.documentElement;\n  const body = document.body;\n\n  const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n  const scrollLeft = window.pageXOffset || body.scrollLeft;\n  const left = box.left + scrollLeft - clientLeft;\n\n  const clientTop = docEl.clientTop || body.clientTop || 0;\n  const scrollTop = window.pageYOffset || body.scrollTop;\n  const top = box.top + scrollTop - clientTop;\n\n  // Android sometimes returns slightly off decimal values, so need to round\n  return {\n    left: round(left),\n    top: round(top)\n  };\n};\n\n/**\n * Array functions container\n * @type {Object}\n * @private\n */\nvar arr = {};\n\n/*\n * Loops through an array and runs a function for each item inside it.\n * @param  {Array}    array       The array\n * @param  {Function} callback    The function to be run for each item\n * @param  {*}        thisArg     The `this` binding of callback\n * @returns {Array}               The array\n * @private\n */\narr.forEach = function(array, callback, thisArg) {\n  thisArg = thisArg || this;\n\n  if (obj.isArray(array) && callback instanceof Function) {\n    for (var i = 0, len = array.length; i < len; ++i) {\n      callback.call(thisArg, array[i], i, array);\n    }\n  }\n\n  return array;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String}    path    The fileName path like '/path/to/file.mp4'\n * @returns {String}          The extension in lower case or an empty string if no extension could be found.\n */\nvar getFileExtension = function(path) {\n  if(typeof path === 'string'){\n    let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n    let pathParts = splitPathRe.exec(path);\n\n    if (pathParts) {\n      return pathParts.pop().toLowerCase();\n    }\n  }\n\n  return '';\n};\n\nexport {\n  createEl,\n  capitalize,\n  obj,\n  isNaN,\n  bind,\n  cache,\n  guid,\n  expando,\n  getData,\n  hasData,\n  removeData,\n  isEmpty,\n  hasClass,\n  addClass,\n  removeClass,\n  TEST_VID,\n  USER_AGENT,\n  IS_IPHONE,\n  IS_IPAD,\n  IS_IPOD,\n  IS_IOS,\n  IOS_VERSION,\n  IS_ANDROID,\n  ANDROID_VERSION,\n  IS_OLD_ANDROID,\n  IS_FIREFOX,\n  IS_IE8,\n  IS_CHROME,\n  TOUCH_ENABLED,\n  BACKGROUND_SIZE_SUPPORTED,\n  setElementAttributes,\n  getElementAttributes,\n  getComputedDimension,\n  insertFirst,\n  browser,\n  el,\n  formatTime,\n  blockTextSelection,\n  unblockTextSelection,\n  trim,\n  round,\n  createTimeRange,\n  setLocalStorage,\n  getAbsoluteURL,\n  parseUrl,\n  log,\n  findPosition,\n  arr,\n  getFileExtension\n};\n"","
7b7300fca23eb5e140ad7e75cb44b2bac9208b50,29518751,"                    <h3><a href=""http://stackoverflow.com/questions/29518751/how-to-implement-cfgnode-with-antlr4"" class=""question-hyperlink"" title=""I am struggling on how to implement the following in the best way:"
0b4c1c37927dd6c037e745101d4f0a6765d4d4b2,6380057,    # http://stackoverflow.com/questions/6380057/python-binding-socket-address-already-in-use
e8320480e1f3f7686e9b5ea68aaa389aea973ffe,19385911,"  ""readme"": ""[![Build Status](https://travis-ci.org/petkaantonov/bluebird.svg?branch=master)](https://travis-ci.org/petkaantonov/bluebird)\n\n<a href=\""http://promisesaplus.com/\"">\n    <img src=\""http://promisesaplus.com/assets/logo-small.png\"" alt=\""Promises/A+ logo\""\n         title=\""Promises/A+ 1.1 compliant\"" align=\""right\"" />\n</a>\n\n\n\n#Introduction\n\nBluebird is a fully featured [promise](#what-are-promises-and-why-should-i-use-them) library with focus on innovative features and performance\n\n\n\n#Topics\n\n- [Features](#features)\n- [Quick start](#quick-start)\n- [API Reference and examples](API.md)\n- [Support](#support)\n- [What are promises and why should I use them?](#what-are-promises-and-why-should-i-use-them)\n- [Questions and issues](#questions-and-issues)\n- [Error handling](#error-handling)\n- [Development](#development)\n    - [Testing](#testing)\n    - [Benchmarking](#benchmarks)\n    - [Custom builds](#custom-builds)\n    - [For library authors](#for-library-authors)\n- [What is the sync build?](#what-is-the-sync-build)\n- [License](#license)\n- [Snippets for common problems](https://github.com/petkaantonov/bluebird/wiki/Snippets)\n- [Promise anti-patterns](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns)\n- [Changelog](changelog.md)\n- [Optimization guide](#optimization-guide)\n\n<img src=\""logo.png\"" alt=\""bluebird logo\"" align=\""right\"" />\n\n#Features:\n\n- [Promises A+](http://promisesaplus.com)\n- [Synchronous inspection](API.md#synchronous-inspection)\n- [Concurrency coordination](API.md#collections)\n- [Promisification on steroids](API.md#promisification)\n- [Resource management through a parallel of python `with`/C# `using`](API.md#resource-management)\n- [Cancellation and timeouts](API.md#cancellation)\n- [Parallel for C# `async` and `await`](API.md#generators)\n- Mind blowing utilities such as\n    - [`.bind()`](API.md#binddynamic-thisarg---promise)\n    - [`.call()`](API.md#callstring-propertyname--dynamic-arg---promise)\n    - [`Promise.join()`](API.md#promisejoinpromisethenablevalue-promises-function-handler---promise)\n    - [And](API.md#core) [much](API.md#timers) [more](API.md#utility)!\n- [Practical debugging solutions and sane defaults](#error-handling)\n- [Sick performance](benchmark/stats/latest.md)\n\n<hr>\n\n#Quick start\n\n##Node.js\n\n    npm install bluebird\n\nThen:\n\n```js\nvar Promise = require(\""bluebird\"");\n```\n\n##Browsers\n\nDownload the [bluebird.js](https://github.com/petkaantonov/bluebird/tree/master/js/browser) file.\nNOTE: bluebird also has a [bower](http://bower.io) package.\n\nAnd then use a script tag:\n\n```html\n<script type=\""text/javascript\"" src=\""/scripts/bluebird.js\""></script>\n```\n\nThe global variables `Promise` and `P` (alias for `Promise`) become available after the above script tag.\n\nA [minimal bluebird browser build](#custom-builds) is ̃38.92KB minified*, 11.65KB gzipped and has no external dependencies.\n\n*Google Closure Compiler using Simple.\n\n####Browser support\n\nBrowsers that [implement ECMA-262, edition 3](http://en.wikipedia.org/wiki/Ecmascript#Implementations) and later are supported.\n\n[![Selenium Test Status](https://saucelabs.com/browser-matrix/petka_antonov.svg)](https://saucelabs.com/u/petka_antonov)\n\n*IE7 and IE8 had to be removed from tests due to SauceLabs bug but are supported and pass all tests*\n\n**Note** that in ECMA-262, edition 3 (IE7, IE8 etc.) it is not possible to use methods that have keyword names like `.catch` and `.finally`. The [API documentation](API.md) always lists a compatible alternative name that you can use if you need to support these browsers. For example `.catch` is replaced with `.caught` and `.finally` with `.lastly`.\n\nAlso, [long stack trace](API.md#promiselongstacktraces---void) support is only available in Chrome and Firefox.\n\n<sub>Previously bluebird required es5-shim.js and es5-sham.js to support Edition 3 - these are **no longer required** as of **0.10.4**.</sub>\n\nAfter quick start, see [API Reference and examples](API.md)\n\n<hr>\n\n#Support\n\n- IRC: #promises @freenode\n- StackOverflow: [bluebird tag](http://stackoverflow.com/questions/tagged/bluebird)\n- Bugs and feature requests: [github issue tracker](https://github.com/petkaantonov/bluebird/issues?state=open)\n\n<hr>\n\n#What are promises and why should I use them?\n\nYou should use promises to turn this:\n\n```js\nfs.readFile(\""file.json\"", function(err, val) {\n    if( err ) {\n        console.error(\""unable to read file\"");\n    }\n    else {\n        try {\n            val = JSON.parse(val);\n            console.log(val.success);\n        }\n        catch( e ) {\n            console.error(\""invalid json in file\"");\n        }\n    }\n});\n```\n\nInto this:\n\n```js\nfs.readFileAsync(\""file.json\"").then(JSON.parse).then(function(val) {\n    console.log(val.success);\n})\n.catch(SyntaxError, function(e) {\n    console.error(\""invalid json in file\"");\n})\n.catch(function(e){\n    console.error(\""unable to read file\"")\n});\n```\n\n*If you are wondering \""there is no `readFileAsync` method on `fs` that returns a promise\"", see [promisification](API.md#promisification)*\n\nActually you might notice the latter has a lot in common with code that would do the same using synchronous I/O:\n\n```js\ntry {\n    var val = JSON.parse(fs.readFileSync(\""file.json\""));\n    console.log(val.success);\n}\n//Syntax actually not supported in JS but drives the point\ncatch(SyntaxError e) {\n    console.error(\""invalid json in file\"");\n}\ncatch(Error e) {\n    console.error(\""unable to read file\"")\n}\n```\n\nAnd that is the point - being able to have something that is a lot like `return` and `throw` in synchronous code.\n\nYou can also use promises to improve code that was written with callback helpers:\n\n\n```js\n//Copyright Plato http://stackoverflow.com/a/19385911/995876\n//CC BY-SA 2.5\nmapSeries(URLs, function (URL, done) {\n    var options = {};\n    needle.get(URL, options, function (error, response, body) {\n        if (error) {\n            return done(error)\n        }\n        try {\n            var ret = JSON.parse(body);\n            return done(null, ret);\n        }\n        catch (e) {\n            done(e);\n        }\n    });\n}, function (err, results) {\n    if (err) {\n        console.log(err)\n    } else {\n        console.log('All Needle requests successful');\n        // results is a 1 to 1 mapping in order of URLs > needle.body\n        processAndSaveAllInDB(results, function (err) {\n            if (err) {\n                return done(err)\n            }\n            console.log('All Needle requests saved');\n            done(null);\n        });\n    }\n});\n```\n\nIs more pleasing to the eye when done with promises:\n\n```js\nPromise.promisifyAll(needle);\nvar options = {};\n\nvar current = Promise.resolve();\nPromise.map(URLs, function(URL) {\n    current = current.then(function () {\n        return needle.getAsync(URL, options);\n    });\n    return current;\n}).map(function(responseAndBody){\n    return JSON.parse(responseAndBody[1]);\n}).then(function (results) {\n    return processAndSaveAllInDB(results);\n}).then(function(){\n    console.log('All Needle requests saved');\n}).catch(function (e) {\n    console.log(e);\n});\n```\n\nAlso promises don't just give you correspondences for synchronous features but can also be used as limited event emitters or callback aggregators.\n\nMore reading:\n\n - [Promise nuggets](http://spion.github.io/promise-nuggets/)\n - [Why I am switching to promises](http://spion.github.io/posts/why-i-am-switching-to-promises.html)\n - [What is the the point of promises](http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/#toc_1)\n - [Snippets for common problems](https://github.com/petkaantonov/bluebird/wiki/Snippets)\n - [Promise anti-patterns](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns)\n\n#Questions and issues\n\nIf you find a bug in bluebird or have a feature request, file an issue in the [github issue tracker](https://github.com/petkaantonov/bluebird/issues). Anything else, such as questions for help in using the library, should be posted in [StackOverflow](http://stackoverflow.com/questions/tagged/bluebird) under tags `promise` and `bluebird`.\n\n#Error handling\n\nThis is a problem every promise library needs to handle in some way. Unhandled rejections/exceptions don't really have a good agreed-on asynchronous correspondence. The problem is that it is impossible to predict the future and know if a rejected promise will eventually be handled.\n\nThere are two common pragmatic attempts at solving the problem that promise libraries do.\n\nThe more popular one is to have the user explicitly communicate that they are done and any unhandled rejections should be thrown, like so:\n\n```js\ndownload().then(...).then(...).done();\n```\n\nFor handling this problem, in my opinion, this is completely unacceptable and pointless. The user must remember to explicitly call `.done` and that cannot be justified when the problem is forgetting to create an error handler in the first place.\n\nThe second approach, which is what bluebird by default takes, is to call a registered handler if a rejection is unhandled by the start of a second turn. The default handler is to write the stack trace to `stderr` or `console.error` in browsers. This is close to what happens with synchronous code - your code doesn't work as expected and you open console and see a stack trace. Nice.\n\nOf course this is not perfect, if your code for some reason needs to swoop in and attach error handler to some promise after the promise has been hanging around a while then you will see annoying messages. In that case you can use the `.done()` method to signal that any hanging exceptions should be thrown.\n\nIf you want to override the default handler for these possibly unhandled rejections, you can pass yours like so:\n\n```js\nPromise.onPossiblyUnhandledRejection(function(error){\n    throw error;\n});\n```\n\nIf you want to also enable long stack traces, call:\n\n```js\nPromise.longStackTraces();\n```\n\nright after the library is loaded.\n\nIn node.js use the environment flag `BLUEBIRD_DEBUG`:\n\n```\nBLUEBIRD_DEBUG=1 node server.js\n```\n\nto enable long stack traces in all instances of bluebird.\n\nLong stack traces cannot be disabled after being enabled, and cannot be enabled after promises have already been created. Long stack traces imply a substantial performance penalty, even after using every trick to optimize them.\n\nLong stack traces are enabled by default in the debug build.\n\n####Expected and unexpected errors\n\nA practical problem with Promises/A+ is that it models Javascript `try-catch` too closely for its own good. Therefore by default promises inherit `try-catch` warts such as the inability to specify the error types that the catch block is eligible for. It is an anti-pattern in every other language to use catch-all handlers because they swallow exceptions that you might not know about.\n\nNow, Javascript does have a perfectly fine and working way of creating error type hierarchies. It is still quite awkward to use them with the built-in `try-catch` however:\n\n```js\ntry {\n    //code\n}\ncatch(e) {\n    if( e instanceof WhatIWantError) {\n        //handle\n    }\n    else {\n        throw e;\n    }\n}\n```\n\nWithout such checking, unexpected errors would be silently swallowed. However, with promises, bluebird brings the future (hopefully) here now and extends the `.catch` to [accept potential error type eligibility](API.md#catchfunction-errorclass-function-handler---promise).\n\nFor instance here it is expected that some evil or incompetent entity will try to crash our server from `SyntaxError` by providing syntactically invalid JSON:\n\n```js\ngetJSONFromSomewhere().then(function(jsonString) {\n    return JSON.parse(jsonString);\n}).then(function(object) {\n    console.log(\""it was valid json: \"", object);\n}).catch(SyntaxError, function(e){\n    console.log(\""don't be evil\"");\n});\n```\n\nHere any kind of unexpected error will automatically reported on `stderr` along with a stack trace because we only register a handler for the expected `SyntaxError`.\n\nOk, so, that's pretty neat. But actually not many libraries define error types and it is in fact a complete ghetto out there with ad hoc strings being attached as some arbitrary property name like `.name`, `.type`, `.code`, not having any property at all or even throwing strings as errors and so on. So how can we still listen for expected errors?\n\nBluebird defines a special error type `OperationalError` (you can get a reference from `Promise.OperationalError`). This type of error is given as rejection reason by promisified methods when\ntheir underlying library gives an untyped, but expected error. Primitives such as strings, and error objects that are directly created like `new Error(\""database didn't respond\"")` are considered untyped.\n\nExample of such library is the node core library `fs`. So if we promisify it, we can catch just the errors we want pretty easily and have programmer errors be redirected to unhandled rejection handler so that we notice them:\n\n```js\n//Read more about promisification in the API Reference:\n//API.md\nvar fs = Promise.promisifyAll(require(\""fs\""));\n\nfs.readFileAsync(\""myfile.json\"").then(JSON.parse).then(function (json) {\n    console.log(\""Successful json\"")\n}).catch(SyntaxError, function (e) {\n    console.error(\""file contains invalid json\"");\n}).catch(Promise.OperationalError, function (e) {\n    console.error(\""unable to read file, because: \"", e.message);\n});\n```\n\nThe last `catch` handler is only invoked when the `fs` module explicitly used the `err` argument convention of async callbacks to inform of an expected error. The `OperationalError` instance will contain the original error in its `.cause` property but it does have a direct copy of the `.message` and `.stack` too. In this code any unexpected error - be it in our code or the `fs` module - would not be caught by these handlers and therefore not swallowed.\n\nSince a `catch` handler typed to `Promise.OperationalError` is expected to be used very often, it has a neat shorthand:\n\n```js\n.error(function (e) {\n    console.error(\""unable to read file, because: \"", e.message);\n});\n```\n\nSee [API documentation for `.error()`](API.md#error-rejectedhandler----promise)\n\nFinally, Bluebird also supports predicate-based filters. If you pass a\npredicate function instead of an error type, the predicate will receive\nthe error as an argument. The return result will be used determine whether\nthe error handler should be called.\n\nPredicates should allow for very fine grained control over caught errors:\npattern matching, error typesets with set operations and many other techniques\ncan be implemented on top of them.\n\nExample of using a predicate-based filter:\n\n```js\nvar Promise = require(\""bluebird\"");\nvar request = Promise.promisify(require(\""request\""));\n\nfunction clientError(e) {\n    return e.code >= 400 && e.code < 500;\n}\n\nrequest(\""http://www.google.com\"").then(function(contents){\n    console.log(contents);\n}).catch(clientError, function(e){\n   //A client error like 400 Bad Request happened\n});\n```\n\n**Danger:** The JavaScript language allows throwing primitive values like strings. Throwing primitives can lead to worse or no stack traces. Primitives [are not exceptions](http://www.devthought.com/2011/12/22/a-string-is-not-an-error/). You should consider always throwing Error objects when handling exceptions.\n\n<hr>\n\n####How do long stack traces differ from e.g. Q?\n\nBluebird attempts to have more elaborate traces. Consider:\n\n```js\nError.stackTraceLimit = 25;\nQ.longStackSupport = true;\nQ().then(function outer() {\n    return Q().then(function inner() {\n        return Q().then(function evenMoreInner() {\n            a.b.c.d();\n        }).catch(function catcher(e){\n            console.error(e.stack);\n        });\n    })\n});\n```\n\nYou will see\n\n    ReferenceError: a is not defined\n        at evenMoreInner (<anonymous>:7:13)\n    From previous event:\n        at inner (<anonymous>:6:20)\n\nCompare to:\n\n```js\nError.stackTraceLimit = 25;\nPromise.longStackTraces();\nPromise.resolve().then(function outer() {\n    return Promise.resolve().then(function inner() {\n        return Promise.resolve().then(function evenMoreInner() {\n            a.b.c.d()\n        }).catch(function catcher(e){\n            console.error(e.stack);\n        });\n    });\n});\n```\n\n    ReferenceError: a is not defined\n        at evenMoreInner (<anonymous>:7:13)\n    From previous event:\n        at inner (<anonymous>:6:36)\n    From previous event:\n        at outer (<anonymous>:5:32)\n    From previous event:\n        at <anonymous>:4:21\n        at Object.InjectedScript._evaluateOn (<anonymous>:572:39)\n        at Object.InjectedScript._evaluateAndWrap (<anonymous>:531:52)\n        at Object.InjectedScript.evaluate (<anonymous>:450:21)\n\n\nA better and more practical example of the differences can be seen in gorgikosev's [debuggability competition](https://github.com/spion/async-compare#debuggability).\n\n<hr>\n\n#Development\n\nFor development tasks such as running benchmarks or testing, you need to clone the repository and install dev-dependencies.\n\nInstall [node](http://nodejs.org/), [npm](https://npmjs.org/), and [grunt](http://gruntjs.com/).\n\n    git clone git@github.com:petkaantonov/bluebird.git\n    cd bluebird\n    npm install\n\n##Testing\n\nTo run all tests, run `grunt test`. Note that 10 processes are created to run the tests in parallel. The `stdout` of tests is ignored by default and everything will stop at the first failure. If you want to run tests sequentially with all output, do:\n\n    grunt test --jobs=1\n\nYou may also give a higher `--jobs` value to run more tests concurrently (and finish faster).\n\nIndividual files can be run with `grunt test --run=filename` where `filename` is a test file name in `/test` folder or `/test/mocha` folder. The `.js` prefix is not needed. The dots for AP compliance tests are not needed, so to run `/test/mocha/2.3.3.js` for instance:\n\n    grunt test --run=233\n\nWhen trying to get a test to pass, run only that individual test file with `--verbose` to see the output from that test:\n\n    grunt test --run=233 --verbose\n\nThe reason for the unusual way of testing is because the majority of tests are from different libraries using different testing frameworks and because it takes forever to test sequentially.\n\n\n###Testing in browsers\n\nTo test in browsers:\n\n    cd browser\n    setup\n\nThen open the `index.html` in your browser. Requires bash (on windows the mingw32 that comes with git works fine too).\n\nYou may also [visit the github hosted page](http://petkaantonov.github.io/bluebird/browser/).\n\nKeep the test tab active because some tests are timing-sensitive and will fail if the browser is throttling timeouts. Chrome will do this for example when the tab is not active.\n\n##Benchmarks\n\nTo run a benchmark, run the given command for a benchmark while on the project root. Requires bash (on windows the mingw32 that comes with git works fine too).\n\nNode 0.11.2+ is required to run the generator examples.\n\n###1\\. DoxBee sequential\n\nCurrently the most relevant benchmark is @gorkikosev's benchmark in the article [Analysis of generators and other async patterns in node](http://spion.github.io/posts/analysis-generators-and-other-async-patterns-node.html). The benchmark emulates a situation where n amount of users are making a request in parallel to execute some mixed async/sync action. The benchmark has been modified to include a warm-up phase to minimize any JITing during timed sections.\n\nCommand: `bench doxbee`\n\n###2\\. Made-up parallel\n\nThis made-up scenario runs 15 shimmed queries in parallel.\n\nCommand: `bench parallel`\n\n##Custom builds\n\nCustom builds for browsers are supported through a command-line utility.\n\n\n\n\n<table>\n    <caption>The following features can be disabled</caption>\n    <thead>\n        <tr>\n            <th>Feature(s)</th>\n            <th>Command line identifier</th>\n        </tr>\n    </thead>\n    <tbody>\n\n        <tr><td><a href=\""API.md#any---promise\""><code>.any</code></a> and <a href=\""API.md#promiseanyarraydynamicpromise-values---promise\""><code>Promise.any</code></a></td><td><code>any</code></td></tr>\n        <tr><td><a href=\""API.md#race---promise\""><code>.race</code></a> and <a href=\""API.md#promiseracearraypromise-promises---promise\""><code>Promise.race</code></a></td><td><code>race</code></td></tr>\n        <tr><td><a href=\""API.md#callstring-propertyname--dynamic-arg---promise\""><code>.call</code></a> and <a href=\""API.md#getstring-propertyname---promise\""><code>.get</code></a></td><td><code>call_get</code></td></tr>\n        <tr><td><a href=\""API.md#filterfunction-filterer---promise\""><code>.filter</code></a> and <a href=\""API.md#promisefilterarraydynamicpromise-values-function-filterer---promise\""><code>Promise.filter</code></a></td><td><code>filter</code></td></tr>\n        <tr><td><a href=\""API.md#mapfunction-mapper---promise\""><code>.map</code></a> and <a href=\""API.md#promisemaparraydynamicpromise-values-function-mapper---promise\""><code>Promise.map</code></a></td><td><code>map</code></td></tr>\n        <tr><td><a href=\""API.md#reducefunction-reducer--dynamic-initialvalue---promise\""><code>.reduce</code></a> and <a href=\""API.md#promisereducearraydynamicpromise-values-function-reducer--dynamic-initialvalue---promise\""><code>Promise.reduce</code></a></td><td><code>reduce</code></td></tr>\n        <tr><td><a href=\""API.md#props---promise\""><code>.props</code></a> and <a href=\""API.md#promisepropsobjectpromise-object---promise\""><code>Promise.props</code></a></td><td><code>props</code></td></tr>\n        <tr><td><a href=\""API.md#settle---promise\""><code>.settle</code></a> and <a href=\""API.md#promisesettlearraydynamicpromise-values---promise\""><code>Promise.settle</code></a></td><td><code>settle</code></td></tr>\n        <tr><td><a href=\""API.md#someint-count---promise\""><code>.some</code></a> and <a href=\""API.md#promisesomearraydynamicpromise-values-int-count---promise\""><code>Promise.some</code></a></td><td><code>some</code></td></tr>\n        <tr><td><a href=\""API.md#nodeifyfunction-callback---promise\""><code>.nodeify</code></a></td><td><code>nodeify</code></td></tr>\n        <tr><td><a href=\""API.md#promisecoroutinegeneratorfunction-generatorfunction---function\""><code>Promise.coroutine</code></a> and <a href=\""API.md#promisespawngeneratorfunction-generatorfunction---promise\""><code>Promise.spawn</code></a></td><td><code>generators</code></td></tr>\n        <tr><td><a href=\""API.md#progression\"">Progression</a></td><td><code>progress</code></td></tr>\n        <tr><td><a href=\""API.md#promisification\"">Promisification</a></td><td><code>promisify</code></td></tr>\n        <tr><td><a href=\""API.md#cancellation\"">Cancellation</a></td><td><code>cancel</code></td></tr>\n        <tr><td><a href=\""API.md#timers\"">Timers</a></td><td><code>timers</code></td></tr>\n        <tr><td><a href=\""API.md#resource-management\"">Resource management</a></td><td><code>using</code></td></tr>\n\n    </tbody>\n</table>\n\n\nMake sure you have cloned the repo somewhere and did `npm install` successfully.\n\nAfter that you can run:\n\n    grunt build --features=\""core\""\n\n\nThe above builds the most minimal build you can get. You can add more features separated by spaces from the above list:\n\n    grunt build --features=\""core filter map reduce\""\n\nThe custom build file will be found from `/js/browser/bluebird.js`. It will have a comment that lists the disabled and enabled features.\n\nNote that the build leaves the `/js/main` etc folders with same features so if you use the folder for node.js at the same time, don't forget to build\na full version afterwards (after having taken a copy of the bluebird.js somewhere):\n\n    grunt build\n\n<hr>\n\n##For library authors\n\nBuilding a library that depends on bluebird? You should know about a few features.\n\nIf your library needs to do something obtrusive like adding or modifying methods on the `Promise` prototype, uses long stack traces or uses a custom unhandled rejection handler then... that's totally ok as long as you don't use `require(\""bluebird\"")`. Instead you should create a file\nthat creates an isolated copy. For example, creating a file called `bluebird-extended.js` that contains:\n\n```js\n                //NOTE the function call right after\nmodule.exports = require(\""bluebird/js/main/promise\"")();\n```\n\nYour library can then use `var Promise = require(\""bluebird-extended\"");` and do whatever it wants with it. Then if the application or other library uses their own bluebird promises they will all play well together because of Promises/A+ thenable assimilation magic.\n\nYou should also know about [`.nodeify()`](API.md#nodeifyfunction-callback---promise) which makes it easy to provide a dual callback/promise API.\n\n<hr>\n\n##What is the sync build?\n\nYou may now use sync build by:\n\n    var Promise = require(\""bluebird/zalgo\"");\n\nThe sync build is provided to see how forced asynchronity affects benchmarks. It should not be used in real code due to the implied hazards.\n\nThe normal async build gives Promises/A+ guarantees about asynchronous resolution of promises. Some people think this affects performance or just plain love their code having a possibility\nof stack overflow errors and non-deterministic behavior.\n\nThe sync build skips the async call trampoline completely, e.g code like:\n\n    async.invoke( this.fn, this, val );\n\nAppears as this in the sync build:\n\n    this.fn(val);\n\nThis should pressure the CPU slightly less and thus the sync build should perform better. Indeed it does, but only marginally. The biggest performance boosts are from writing efficient Javascript, not from compromising determinism.\n\nNote that while some benchmarks are waiting for the next event tick, the CPU is actually not in use during that time. So the resulting benchmark result is not completely accurate because on node.js you only care about how much the CPU is taxed. Any time spent on CPU is time the whole process (or server) is paralyzed. And it is not graceful like it would be with threads.\n\n\n```js\nvar cache = new Map(); //ES6 Map or DataStructures/Map or whatever...\nfunction getResult(url) {\n    var resolver = Promise.pending();\n    if (cache.has(url)) {\n        resolver.resolve(cache.get(url));\n    }\n    else {\n        http.get(url, function(err, content) {\n            if (err) resolver.reject(err);\n            else {\n                cache.set(url, content);\n                resolver.resolve(content);\n            }\n        });\n    }\n    return resolver.promise;\n}\n\n\n\n//The result of console.log is truly random without async guarantees\nfunction guessWhatItPrints( url ) {\n    var i = 3;\n    getResult(url).then(function(){\n        i = 4;\n    });\n    console.log(i);\n}\n```\n\n#Optimization guide\n\nArticles about optimization will be periodically posted in [the wiki section](https://github.com/petkaantonov/bluebird/wiki), polishing edits are welcome.\n\nA single cohesive guide compiled from the articles will probably be done eventually.\n\n#License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Petka Antonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \""Software\""), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \""AS IS\"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"","
d04c833d70c2c31d720e66e1ec6fe2c6f3d4c134,30006707,  // http://stackoverflow.com/a/30006707/941536
456cf271aae1414bbd6ffb362c1255d0d06d9886,13210194 202605,"{""version"":3,""sources"":[""webpack://libphonenumber/webpack/universalModuleDefinition"",""webpack://libphonenumber/webpack/bootstrap"",""webpack://libphonenumber/./es6/common.js"",""webpack://libphonenumber/./es6/metadata.js"",""webpack://libphonenumber/./es6/parse.js"",""webpack://libphonenumber/./es6/getNumberType.js"",""webpack://libphonenumber/./es6/RFC3966.js"",""webpack://libphonenumber/./es6/parseIncompletePhoneNumber.js"",""webpack://libphonenumber/./es6/findNumbers/util.js"",""webpack://libphonenumber/./es6/validate.js"",""webpack://libphonenumber/./es6/format.js"",""webpack://libphonenumber/./es6/getCountryCallingCode.js"",""webpack://libphonenumber/./es6/IDD.js"",""webpack://libphonenumber/./es6/isValidNumberForRegion.js"",""webpack://libphonenumber/./es6/AsYouType.js"",""webpack://libphonenumber/./es6/findNumbers/utf-8.js"",""webpack://libphonenumber/./es6/findNumbers/isValidCandidate.js"",""webpack://libphonenumber/./es6/findNumbers/isValidPreCandidate.js"",""webpack://libphonenumber/./es6/findNumbers/parsePreCandidate.js"",""webpack://libphonenumber/./es6/findPhoneNumbers.js"",""webpack://libphonenumber/./node_modules/semver-compare/index.js"",""webpack://libphonenumber/./index.es6.js""],""names"":[""root"",""factory"",""exports"",""module"",""define"",""amd"",""window"",""installedModules"",""__webpack_require__"",""moduleId"",""i"",""l"",""modules"",""call"",""m"",""c"",""d"",""name"",""getter"",""o"",""Object"",""defineProperty"",""configurable"",""enumerable"",""get"",""r"",""value"",""n"",""__esModule"",""object"",""property"",""prototype"",""hasOwnProperty"",""p"",""s"",""parseDigit"",""character"",""DIGITS"",""extractCountryCallingCode"",""number"",""country"",""metadata"",""_parseIncompletePhoneNumber2"",""default"",""numberWithoutIDD"",""_IDD"",""stripIDDPrefix"",""MAX_LENGTH_COUNTRY_CODE"",""length"",""countryCallingCode"",""slice"",""countryCallingCodes"",""matches_entirely"",""text"",""arguments"",""undefined"",""regular_expression"",""matched_groups"",""match"",""create_extension_pattern"",""purpose"",""single_extension_characters"",""RFC3966_EXTN_PREFIX"",""CAPTURING_EXTN_DIGITS"",""VALID_DIGITS"",""_parseIncompletePhoneNumber"",""WHITESPACE"",""PLUS_CHARS"",""VALID_PUNCTUATION"",""RegExp"",""MAX_LENGTH_FOR_NSN"",""0"",""1"",""2"",""3"",""4"",""5"",""6"",""7"",""8"",""9"",""０"",""１"",""２"",""３"",""４"",""５"",""６"",""７"",""８"",""９"",""٠"",""١"",""٢"",""٣"",""٤"",""٥"",""٦"",""٧"",""٨"",""٩"",""۰"",""۱"",""۲"",""۳"",""۴"",""۵"",""۶"",""۷"",""۸"",""۹"",""validateMetadata"",""getExtPrefix"",""Metadata"",""ext"",""_semverCompare"",""_typeof"",""Symbol"",""_typeof2"",""iterator"",""obj"",""constructor"",""_createClass"",""defineProperties"",""target"",""props"",""descriptor"",""writable"",""key"",""Constructor"",""protoProps"",""staticProps"",""_classCallCheck"",""instance"",""TypeError"",""V3"",""this"",""v1"",""version"",""v2"",""_semverCompare2"",""v3"",""countries"",""_country"",""country_metadata"",""hasCountry"",""Error"",""_this"",""formats"",""map"",""_"",""Format"",""nationalPrefix"",""types"",""_type"",""hasTypes"",""getType"",""Type"",""country_phone_code_to_countries"",""country_calling_codes"",""country_calling_code"",""format"",""_format"",""nationalPrefixFormattingRule"",""nationalPrefixIsOptionalWhenFormatting"",""usesNationalPrefix"",""test"",""replace"",""type"",""possibleLengths"",""is_object"",""keys"",""join"",""type_of"",""arg_1"",""arg_2"",""arg_3"",""arg_4"",""_sort_out_arguments"",""options"",""_extends"",""defaultCountry"",""default_options"",""_metadata2"",""sort_out_arguments"",""_parse_input"",""indexOf"",""_RFC"",""parseRFC3966"",""extract_formatted_phone_number"",""is_viable_phone_number"",""with_extension_stripped"",""start"",""search"",""EXTN_PATTERN"",""number_without_extension"",""matches"",""strip_extension"",""parse_input"",""formatted_phone_number"",""_parse_phone_number"",""default_country"",""_extractCountryCallin"",""_common"",""chooseCountryByCountryCallingCode"",""_getCountryCallingCode2"",""_parse_national_numbe"",""national_number"",""carrier_code"",""_strip_national_prefi"",""strip_national_prefix_and_carrier_code"",""potential_national_number"",""carrierCode"",""_getNumberType"",""check_number_length_for_type"",""nationalNumberPattern"",""parse_national_number"",""exactCountry"",""find_country_code"",""parse_phone_number"",""selectedCountry"",""MIN_LENGTH_FOR_NSN"",""valid"",""extended"",""result"",""phone"",""possible"",""is_international"",""is_possible_number"",""assign"",""source"",""MAX_INPUT_STRING_LENGTH"",""EXTN_PATTERNS_FOR_PARSING"",""MIN_LENGTH_PHONE_NUMBER_PATTERN"",""VALID_PHONE_NUMBER"",""VALID_PHONE_NUMBER_PATTERN"",""PHONE_NUMBER_START_PATTERN"",""AFTER_PHONE_NUMBER_END_PATTERN"",""starts_at"",""nationalPrefixForParsing"",""national_prefix_pattern"",""national_prefix_matcher"",""exec"",""national_significant_number"",""captured_groups_count"",""nationalPrefixTransformRule"",""national_phone_number"",""possible_countries"",""_iterator"",""_isArray"",""Array"",""isArray"",""_i"",""_ref"",""next"",""done"",""leadingDigits"",""_getNumberType2"",""_find_country_code"",""input"",""is_of_type"",""pattern"",""non_fixed_line_types"",""type_info"",""possible_lengths"",""test_number_length_for_type"",""mobile_type"",""merge_arrays"",""actual_length"",""minimum_length"",""_parse"",""_parse2"",""a"",""b"",""merged"",""_iterator2"",""_isArray2"",""_i2"",""_ref2"",""element"",""push"",""sort"",""split"",""part"",""_part$split"",""_part$split2"",""_slicedToArray"",""formatRFC3966"",""arr"",""_arr"",""_n"",""_d"",""_e"",""_s"",""err"",""sliceIterator"",""string"",""parsePhoneNumberCharacter"",""limit"",""lower"",""upper"",""trimAfterFirstMatch"",""regexp"",""index"",""startsWith"",""substring"",""endsWith"",""arg_5"",""format_type"",""defaultOptions"",""format_national_number"",""add_extension"",""formatExtension"",""fromCountry"",""IDDPrefix"",""getIDDPrefix"",""humanReadable"",""formattedForSameCountryCallingCode"",""formatIDDSameCountryCallingCodeNumber"",""format_national_number_using_format"",""choose_format_for_number"",""local_to_international_style"",""_metadata"",""extension"",""FIRST_GROUP_PATTERN"",""international"",""enforce_national_prefix"",""format_pattern_matcher"",""national_prefix_may_be_omitted"",""formatted_number"",""internationalFormat"",""format_as"",""available_formats"",""leadingDigitsPatterns"",""last_leading_digits_pattern"",""local"",""trim"",""toCountryCallingCode"",""toCountryMetadata"",""fromCountryMetadata"",""countryMetadata"",""SINGLE_IDD_PREFIX"",""defaultIDDPrefix"",""IDDPrefixPattern"",""matchedGroups"",""CAPTURING_DIGIT_PATTERN"",""_validate2"",""_validate"",""close_dangling_braces"",""count_occurences"",""repeat"",""DUMMY_DIGIT_MATCHER"",""LONGEST_DUMMY_PHONE_NUMBER"",""DIGIT_PLACEHOLDER"",""DIGIT_PLACEHOLDER_MATCHER"",""DIGIT_PLACEHOLDER_MATCHER_GLOBAL"",""CHARACTER_CLASS_PATTERN"",""STANDALONE_DIGIT_PATTERN"",""ELIGIBLE_FORMAT_PATTERN"",""VALID_INCOMPLETE_PHONE_NUMBER"",""VALID_INCOMPLETE_PHONE_NUMBER_PATTERN"",""AsYouType"",""country_code"",""reset"",""extracted_number"",""process_input"",""current_output"",""parsed_input"",""reset_countriness"",""determine_the_country"",""extract_country_calling_code"",""initialize_phone_number_formats_for_this_country_calling_code"",""reset_format"",""previous_national_prefix"",""national_prefix"",""extract_national_prefix"",""matching_formats"",""should_format"",""format_as_non_formatted_number"",""match_formats_by_leading_digits"",""formatted_national_phone_number"",""format_national_phone_number"",""full_phone_number"",""template"",""next_digits"",""national_number_formatted_with_previous_format"",""chosen_format"",""format_next_national_number_digits"",""attempt_to_format_complete_phone_number"",""choose_another_format"",""reformat_national_number"",""reset_country"",""partially_populated_template"",""last_match_position"",""filter"",""leading_digits"",""index_of_leading_digits_pattern"",""leading_digits_pattern_count"",""leading_digits_pattern_index"",""Math"",""min"",""leading_digits_pattern"",""is_format_applicable"",""create_formatting_template"",""full_number"",""formatted_national_number"",""national_number_rule"",""nationalPrefixIsMandatoryWhenFormatting"",""get_template_for_phone_number_format_pattern"",""number_pattern"",""dummy_phone_number_matching_format_pattern"",""number_format"",""get_format_format"",""strict_pattern"",""national_number_dummy_digits"",""digits"",""_iterator3"",""_isArray3"",""_i3"",""_ref3"",""digit"",""cut_before"",""retained_template"",""dangling_braces"",""symbol"",""count"",""_iterator4"",""_isArray4"",""_i4"",""_ref4"",""times"",""isLatinLetter"",""letter"",""pL_regexp"",""pMn_regexp"",""latinLetterRegexp"",""isInvalidPunctuationSymbol"",""pSc_regexp"",""_pZ"",""_pL"",""pZ"",""PZ"",""_pN"",""pNd"",""candidate"",""offset"",""leniency"",""MATCHING_BRACKETS_ENTIRE"",""PUB_PAGES"",""LEAD_CLASS_LEADING"",""previousChar"",""_utf"",""lastCharIndex"",""nextChar"",""_util"",""LEAD_CLASS"",""BRACKET_PAIR_LIMIT"",""SLASH_SEPARATED_DATES"",""TIME_STAMPS"",""followingText"",""TIME_STAMPS_SUFFIX_LEADING"",""SECOND_NUMBER_START_PATTERN"",""PhoneNumberSearch"",""phones"",""hasNext"",""searchPhoneNumbers"",""_sort_out_arguments2"",""_defineProperty"",""WHITESPACE_IN_THE_BEGINNING_PATTERN"",""WHITESPACE_IN_THE_END_PATTERN"",""state"",""startsAt"",""_parsePreCandidate2"",""parseCandidate"",""find"",""_isValidPreCandidate2"",""_isValidCandidate2"",""endsAt"",""last_match"",""pa"",""pb"",""na"",""Number"",""nb"",""isNaN"",""parseNumber"",""parameters"",""_metadataMin2"",""apply"",""parse"",""formatNumber"",""_format2"",""getNumberType"",""isValidNumber"",""isValidNumberForRegion"",""_isValidNumberForRegion2"",""findPhoneNumbers"",""_findPhoneNumbers2"",""_findPhoneNumbers"",""_getCountryCallingCode"",""_AsYouType"",""getCountryCallingCode"",""getPhoneCode"",""getPhoneCodeCustom"",""_AsYouType2"",""create""],""mappings"":""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"",""file"":""libphonenumber-js.min.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\""libphonenumber\"", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""libphonenumber\""] = factory();\n\telse\n\t\troot[\""libphonenumber\""] = factory();\n})(window, function() {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 20);\n"",""import { stripIDDPrefix } from './IDD';\n\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber';\n\n// `DASHES` will be right after the opening square bracket of the \""character class\""\nvar DASHES = '-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D';\nvar SLASHES = '\\uFF0F/';\nvar DOTS = '\\uFF0E.';\nexport var WHITESPACE = ' \\xA0\\xAD\\u200B\\u2060\\u3000';\nvar BRACKETS = '()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]';\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = '~\\u2053\\u223C\\uFF5E';\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = '0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9';\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = '' + DASHES + SLASHES + DOTS + WHITESPACE + BRACKETS + TILDES;\n\nexport var PLUS_CHARS = '+\\uFF0B';\nvar LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+');\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nexport var MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nexport var MAX_LENGTH_COUNTRY_CODE = 3;\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n\t'0': '0',\n\t'1': '1',\n\t'2': '2',\n\t'3': '3',\n\t'4': '4',\n\t'5': '5',\n\t'6': '6',\n\t'7': '7',\n\t'8': '8',\n\t'9': '9',\n\t'\\uFF10': '0', // Fullwidth digit 0\n\t'\\uFF11': '1', // Fullwidth digit 1\n\t'\\uFF12': '2', // Fullwidth digit 2\n\t'\\uFF13': '3', // Fullwidth digit 3\n\t'\\uFF14': '4', // Fullwidth digit 4\n\t'\\uFF15': '5', // Fullwidth digit 5\n\t'\\uFF16': '6', // Fullwidth digit 6\n\t'\\uFF17': '7', // Fullwidth digit 7\n\t'\\uFF18': '8', // Fullwidth digit 8\n\t'\\uFF19': '9', // Fullwidth digit 9\n\t'\\u0660': '0', // Arabic-indic digit 0\n\t'\\u0661': '1', // Arabic-indic digit 1\n\t'\\u0662': '2', // Arabic-indic digit 2\n\t'\\u0663': '3', // Arabic-indic digit 3\n\t'\\u0664': '4', // Arabic-indic digit 4\n\t'\\u0665': '5', // Arabic-indic digit 5\n\t'\\u0666': '6', // Arabic-indic digit 6\n\t'\\u0667': '7', // Arabic-indic digit 7\n\t'\\u0668': '8', // Arabic-indic digit 8\n\t'\\u0669': '9', // Arabic-indic digit 9\n\t'\\u06F0': '0', // Eastern-Arabic digit 0\n\t'\\u06F1': '1', // Eastern-Arabic digit 1\n\t'\\u06F2': '2', // Eastern-Arabic digit 2\n\t'\\u06F3': '3', // Eastern-Arabic digit 3\n\t'\\u06F4': '4', // Eastern-Arabic digit 4\n\t'\\u06F5': '5', // Eastern-Arabic digit 5\n\t'\\u06F6': '6', // Eastern-Arabic digit 6\n\t'\\u06F7': '7', // Eastern-Arabic digit 7\n\t'\\u06F8': '8', // Eastern-Arabic digit 8\n\t'\\u06F9': '9' // Eastern-Arabic digit 9\n};\n\nexport function parseDigit(character) {\n\treturn DIGITS[character];\n}\n\n// Parses a formatted phone number\n// and returns `{ countryCallingCode, number }`\n// where `number` is just the \""number\"" part\n// which is left after extracting `countryCallingCode`\n// and is not necessarily a \""national (significant) number\""\n// and might as well contain national prefix.\n//\nexport function extractCountryCallingCode(number, country, metadata) {\n\tnumber = parseIncompletePhoneNumber(number);\n\n\tif (!number) {\n\t\treturn {};\n\t}\n\n\t// If this is not an international phone number,\n\t// then don't extract country phone code.\n\tif (number[0] !== '+') {\n\t\t// Convert an \""out-of-country\"" dialing phone number\n\t\t// to a proper international phone number.\n\t\tvar numberWithoutIDD = stripIDDPrefix(number, country, metadata.metadata);\n\n\t\t// If an IDD prefix was stripped then\n\t\t// convert the number to international one\n\t\t// for subsequent parsing.\n\t\tif (numberWithoutIDD && numberWithoutIDD !== number) {\n\t\t\tnumber = '+' + numberWithoutIDD;\n\t\t} else {\n\t\t\treturn { number: number };\n\t\t}\n\t}\n\n\t// Fast abortion: country codes do not begin with a '0'\n\tif (number[1] === '0') {\n\t\treturn {};\n\t}\n\n\t// The thing with country phone codes\n\t// is that they are orthogonal to each other\n\t// i.e. there's no such country phone code A\n\t// for which country phone code B exists\n\t// where B starts with A.\n\t// Therefore, while scanning digits,\n\t// if a valid country code is found,\n\t// that means that it is the country code.\n\t//\n\tvar i = 2;\n\twhile (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n\t\tvar countryCallingCode = number.slice(1, i);\n\n\t\tif (metadata.countryCallingCodes()[countryCallingCode]) {\n\t\t\treturn {\n\t\t\t\tcountryCallingCode: countryCallingCode,\n\t\t\t\tnumber: number.slice(i)\n\t\t\t};\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn {};\n}\n\n// Checks whether the entire input sequence can be matched\n// against the regular expression.\nexport function matches_entirely() {\n\tvar text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar regular_expression = arguments[1];\n\n\tif (typeof regular_expression === 'string') {\n\t\tregular_expression = '^(?:' + regular_expression + ')$';\n\t}\n\n\tvar matched_groups = text.match(regular_expression);\n\treturn matched_groups !== null && matched_groups[0].length === text.length;\n}\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n// Pattern to capture digits used in an extension.\n// Places a maximum length of '7' for an extension.\nvar CAPTURING_EXTN_DIGITS = '([' + VALID_DIGITS + ']{1,7})';\n\n/**\r\n * Regexp of all possible ways to write extensions, for use when parsing. This\r\n * will be run as a case-insensitive regexp match. Wide character versions are\r\n * also provided after each ASCII version. There are three regular expressions\r\n * here. The first covers RFC 3966 format, where the extension is added using\r\n * ';ext='. The second more generic one starts with optional white space and\r\n * ends with an optional full stop (.), followed by zero or more spaces/tabs\r\n * /commas and then the numbers themselves. The other one covers the special\r\n * case of American numbers where the extension is written with a hash at the\r\n * end, such as '- 503#'. Note that the only capturing groups should be around\r\n * the digits that you want to capture as part of the extension, or else parsing\r\n * will fail! We allow two options for representing the accented o - the\r\n * character itself, and one in the unicode decomposed form with the combining\r\n * acute accent.\r\n */\nexport function create_extension_pattern(purpose) {\n\t// One-character symbols that can be used to indicate an extension.\n\tvar single_extension_characters = 'x\\uFF58#\\uFF03~\\uFF5E';\n\n\tswitch (purpose) {\n\t\t// For parsing, we are slightly more lenient in our interpretation than for matching. Here we\n\t\t// allow \""comma\"" and \""semicolon\"" as possible extension indicators. When matching, these are\n\t\tcase 'parsing':\n\t\t\tsingle_extension_characters = ',;' + single_extension_characters;\n\t}\n\n\treturn RFC3966_EXTN_PREFIX + CAPTURING_EXTN_DIGITS + '|' + '[ \\xA0\\\\t,]*' + '(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|' + '[' + single_extension_characters + ']|int|anexo|\\uFF49\\uFF4E\\uFF54)' + '[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*' + CAPTURING_EXTN_DIGITS + '#?|' + '[- ]+([' + VALID_DIGITS + ']{1,5})#';\n}\n//# sourceMappingURL=common.js.map"",""var _typeof = typeof Symbol === \""function\"" && typeof Symbol.iterator === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \""function\"" && obj.constructor === Symbol && obj !== Symbol.prototype ? \""symbol\"" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\""value\"" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\""Cannot call a class as a function\""); } }\n\nimport compare from 'semver-compare';\n\n// Added \""possibleLengths\"" and renamed\n// \""country_phone_code_to_countries\"" to \""country_calling_codes\"".\nvar V2 = '1.0.18';\n\n// Added \""idd_prefix\"" and \""default_idd_prefix\"".\nvar V3 = '1.2.0';\n\nvar DEFAULT_EXT_PREFIX = ' ext. ';\n\nvar Metadata = function () {\n\tfunction Metadata(metadata) {\n\t\t_classCallCheck(this, Metadata);\n\n\t\tvalidateMetadata(metadata);\n\n\t\tthis.metadata = metadata;\n\n\t\tthis.v1 = !metadata.version;\n\t\tthis.v2 = metadata.version !== undefined && compare(metadata.version, V3) === -1;\n\t\tthis.v3 = metadata.version !== undefined; // && compare(metadata.version, V4) === -1\n\t}\n\n\t_createClass(Metadata, [{\n\t\tkey: 'hasCountry',\n\t\tvalue: function hasCountry(country) {\n\t\t\treturn this.metadata.countries[country] !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'country',\n\t\tvalue: function country(_country) {\n\t\t\tif (!_country) {\n\t\t\t\tthis._country = undefined;\n\t\t\t\tthis.country_metadata = undefined;\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (!this.hasCountry(_country)) {\n\t\t\t\tthrow new Error('Unknown country: ' + _country);\n\t\t\t}\n\n\t\t\tthis._country = _country;\n\t\t\tthis.country_metadata = this.metadata.countries[_country];\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'countryCallingCode',\n\t\tvalue: function countryCallingCode() {\n\t\t\treturn this.country_metadata[0];\n\t\t}\n\t}, {\n\t\tkey: 'IDDPrefix',\n\t\tvalue: function IDDPrefix() {\n\t\t\tif (this.v1 || this.v2) return;\n\t\t\treturn this.country_metadata[1];\n\t\t}\n\t}, {\n\t\tkey: 'defaultIDDPrefix',\n\t\tvalue: function defaultIDDPrefix() {\n\t\t\tif (this.v1 || this.v2) return;\n\t\t\treturn this.country_metadata[12];\n\t\t}\n\t}, {\n\t\tkey: 'nationalNumberPattern',\n\t\tvalue: function nationalNumberPattern() {\n\t\t\tif (this.v1 || this.v2) return this.country_metadata[1];\n\t\t\treturn this.country_metadata[2];\n\t\t}\n\t}, {\n\t\tkey: 'possibleLengths',\n\t\tvalue: function possibleLengths() {\n\t\t\tif (this.v1) return;\n\t\t\treturn this.country_metadata[this.v2 ? 2 : 3];\n\t\t}\n\t}, {\n\t\tkey: 'formats',\n\t\tvalue: function formats() {\n\t\t\tvar _this = this;\n\n\t\t\tvar formats = this.country_metadata[this.v1 ? 2 : this.v2 ? 3 : 4] || [];\n\t\t\treturn formats.map(function (_) {\n\t\t\t\treturn new Format(_, _this);\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefix',\n\t\tvalue: function nationalPrefix() {\n\t\t\treturn this.country_metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixFormattingRule',\n\t\tvalue: function nationalPrefixFormattingRule() {\n\t\t\treturn this.country_metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixForParsing',\n\t\tvalue: function nationalPrefixForParsing() {\n\t\t\t// If `national_prefix_for_parsing` is not set explicitly,\n\t\t\t// then infer it from `national_prefix` (if any)\n\t\t\treturn this.country_metadata[this.v1 ? 5 : this.v2 ? 6 : 7] || this.nationalPrefix();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixTransformRule',\n\t\tvalue: function nationalPrefixTransformRule() {\n\t\t\treturn this.country_metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsOptionalWhenFormatting',\n\t\tvalue: function nationalPrefixIsOptionalWhenFormatting() {\n\t\t\treturn !!this.country_metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n\t\t}\n\t}, {\n\t\tkey: 'leadingDigits',\n\t\tvalue: function leadingDigits() {\n\t\t\treturn this.country_metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n\t\t}\n\t}, {\n\t\tkey: 'types',\n\t\tvalue: function types() {\n\t\t\treturn this.country_metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n\t\t}\n\t}, {\n\t\tkey: 'hasTypes',\n\t\tvalue: function hasTypes() {\n\t\t\t// Versions 1.2.0 - 1.2.4: can be `[]`.\n\t\t\t/* istanbul ignore next */\n\t\t\tif (this.types() && this.types().length === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Versions <= 1.2.4: can be `undefined`.\n\t\t\t// Version >= 1.2.5: can be `0`.\n\t\t\treturn !!this.types();\n\t\t}\n\t}, {\n\t\tkey: 'type',\n\t\tvalue: function type(_type) {\n\t\t\tif (this.hasTypes() && getType(this.types(), _type)) {\n\t\t\t\treturn new Type(getType(this.types(), _type), this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'ext',\n\t\tvalue: function ext() {\n\t\t\tif (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n\t\t\treturn this.country_metadata[13] || DEFAULT_EXT_PREFIX;\n\t\t}\n\t}, {\n\t\tkey: 'countryCallingCodes',\n\t\tvalue: function countryCallingCodes() {\n\t\t\tif (this.v1) return this.metadata.country_phone_code_to_countries;\n\t\t\treturn this.metadata.country_calling_codes;\n\t\t}\n\n\t\t// Formatting information for regions which share\n\t\t// a country calling code is contained by only one region\n\t\t// for performance reasons. For example, for NANPA region\n\t\t// (\""North American Numbering Plan Administration\"",\n\t\t//  which includes USA, Canada, Cayman Islands, Bahamas, etc)\n\t\t// it will be contained in the metadata for `US`.\n\t\t//\n\t\t// `country_calling_code` is always valid.\n\t\t// But the actual country may not necessarily be part of the metadata.\n\t\t//\n\n\t}, {\n\t\tkey: 'chooseCountryByCountryCallingCode',\n\t\tvalue: function chooseCountryByCountryCallingCode(country_calling_code) {\n\t\t\tvar country = this.countryCallingCodes()[country_calling_code][0];\n\n\t\t\t// Do not want to test this case.\n\t\t\t// (custom metadata, not all countries).\n\t\t\t/* istanbul ignore else */\n\t\t\tif (this.hasCountry(country)) {\n\t\t\t\tthis.country(country);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'selectedCountry',\n\t\tvalue: function selectedCountry() {\n\t\t\treturn this._country;\n\t\t}\n\t}]);\n\n\treturn Metadata;\n}();\n\nexport default Metadata;\n\nvar Format = function () {\n\tfunction Format(format, metadata) {\n\t\t_classCallCheck(this, Format);\n\n\t\tthis._format = format;\n\t\tthis.metadata = metadata;\n\t}\n\n\t_createClass(Format, [{\n\t\tkey: 'pattern',\n\t\tvalue: function pattern() {\n\t\t\treturn this._format[0];\n\t\t}\n\t}, {\n\t\tkey: 'format',\n\t\tvalue: function format() {\n\t\t\treturn this._format[1];\n\t\t}\n\t}, {\n\t\tkey: 'leadingDigitsPatterns',\n\t\tvalue: function leadingDigitsPatterns() {\n\t\t\treturn this._format[2] || [];\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixFormattingRule',\n\t\tvalue: function nationalPrefixFormattingRule() {\n\t\t\treturn this._format[3] || this.metadata.nationalPrefixFormattingRule();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsOptionalWhenFormatting',\n\t\tvalue: function nationalPrefixIsOptionalWhenFormatting() {\n\t\t\treturn !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormatting();\n\t\t}\n\t}, {\n\t\tkey: 'nationalPrefixIsMandatoryWhenFormatting',\n\t\tvalue: function nationalPrefixIsMandatoryWhenFormatting() {\n\t\t\t// National prefix is omitted if there's no national prefix formatting rule\n\t\t\t// set for this country, or when the national prefix formatting rule\n\t\t\t// contains no national prefix itself, or when this rule is set but\n\t\t\t// national prefix is optional for this phone number format\n\t\t\t// (and it is not enforced explicitly)\n\t\t\treturn this.nationalPrefixFormattingRule() &&\n\t\t\t// Check that national prefix formatting rule is not a dummy one.\n\t\t\t// Check that national prefix formatting rule actually has national prefix digit(s).\n\t\t\tthis.usesNationalPrefix() &&\n\t\t\t// Or maybe national prefix is optional for this format\n\t\t\t!this.nationalPrefixIsOptionalWhenFormatting();\n\t\t}\n\n\t\t// Checks whether national prefix formatting rule contains national prefix\n\n\t}, {\n\t\tkey: 'usesNationalPrefix',\n\t\tvalue: function usesNationalPrefix() {\n\t\t\t// Check that national prefix formatting rule is not a dummy one\n\t\t\treturn this.nationalPrefixFormattingRule() !== '$1' &&\n\t\t\t// Check that national prefix formatting rule actually has national prefix digit(s)\n\t\t\t/\\d/.test(this.nationalPrefixFormattingRule().replace('$1', ''));\n\t\t}\n\t}, {\n\t\tkey: 'internationalFormat',\n\t\tvalue: function internationalFormat() {\n\t\t\treturn this._format[5] || this.format();\n\t\t}\n\t}]);\n\n\treturn Format;\n}();\n\nvar Type = function () {\n\tfunction Type(type, metadata) {\n\t\t_classCallCheck(this, Type);\n\n\t\tthis.type = type;\n\t\tthis.metadata = metadata;\n\t}\n\n\t_createClass(Type, [{\n\t\tkey: 'pattern',\n\t\tvalue: function pattern() {\n\t\t\tif (this.metadata.v1) return this.type;\n\t\t\treturn this.type[0];\n\t\t}\n\t}, {\n\t\tkey: 'possibleLengths',\n\t\tvalue: function possibleLengths() {\n\t\t\tif (this.metadata.v1) return;\n\t\t\treturn this.type[1] || this.metadata.possibleLengths();\n\t\t}\n\t}]);\n\n\treturn Type;\n}();\n\nfunction getType(types, type) {\n\tswitch (type) {\n\t\tcase 'FIXED_LINE':\n\t\t\treturn types[0];\n\t\tcase 'MOBILE':\n\t\t\treturn types[1];\n\t\tcase 'TOLL_FREE':\n\t\t\treturn types[2];\n\t\tcase 'PREMIUM_RATE':\n\t\t\treturn types[3];\n\t\tcase 'PERSONAL_NUMBER':\n\t\t\treturn types[4];\n\t\tcase 'VOICEMAIL':\n\t\t\treturn types[5];\n\t\tcase 'UAN':\n\t\t\treturn types[6];\n\t\tcase 'PAGER':\n\t\t\treturn types[7];\n\t\tcase 'VOIP':\n\t\t\treturn types[8];\n\t\tcase 'SHARED_COST':\n\t\t\treturn types[9];\n\t}\n}\n\nexport function validateMetadata(metadata) {\n\tif (!metadata) {\n\t\tthrow new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n\t}\n\n\t// `country_phone_code_to_countries` was renamed to\n\t// `country_calling_codes` in `1.0.18`.\n\tif (!is_object(metadata) || !is_object(metadata.countries) || !is_object(metadata.country_calling_codes) && !is_object(metadata.country_phone_code_to_countries)) {\n\t\tthrow new Error('[libphonenumber-js] `metadata` argument was passed but it\\'s not a valid metadata. Must be an object having `.countries` and `.country_calling_codes` child object properties. Got ' + (is_object(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + type_of(metadata) + ': ' + metadata) + '.');\n\t}\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : _typeof(_)) === 'object';\n};\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar type_of = function type_of(_) {\n\treturn typeof _ === 'undefined' ? 'undefined' : _typeof(_);\n};\n\nexport function getExtPrefix(country, metadata) {\n\treturn new Metadata(metadata).country(country).ext();\n}\n//# sourceMappingURL=metadata.js.map"",""var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { extractCountryCallingCode, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS, MAX_LENGTH_FOR_NSN, matches_entirely, create_extension_pattern } from './common';\n\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber';\n\nimport Metadata from './metadata';\n\nimport getCountryCallingCode from './getCountryCallingCode';\n\nimport get_number_type, { check_number_length_for_type } from './getNumberType';\n\nimport { parseRFC3966 } from './RFC3966';\n\n// The minimum length of the national significant number.\nvar MIN_LENGTH_FOR_NSN = 2;\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n/**\r\n * Regexp of all possible ways to write extensions, for use when parsing. This\r\n * will be run as a case-insensitive regexp match. Wide character versions are\r\n * also provided after each ASCII version. There are three regular expressions\r\n * here. The first covers RFC 3966 format, where the extension is added using\r\n * ';ext='. The second more generic one starts with optional white space and\r\n * ends with an optional full stop (.), followed by zero or more spaces/tabs\r\n * /commas and then the numbers themselves. The other one covers the special\r\n * case of American numbers where the extension is written with a hash at the\r\n * end, such as '- 503#'. Note that the only capturing groups should be around\r\n * the digits that you want to capture as part of the extension, or else parsing\r\n * will fail! We allow two options for representing the accented o - the\r\n * character itself, and one in the unicode decomposed form with the combining\r\n * acute accent.\r\n */\nvar EXTN_PATTERNS_FOR_PARSING = create_extension_pattern('parsing');\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + EXTN_PATTERNS_FOR_PARSING + ')$', 'i');\n\n//  Regular expression of viable phone numbers. This is location independent.\n//  Checks we have at least three leading digits, and only valid punctuation,\n//  alpha characters and digits in the phone number. Does not include extension\n//  data. The symbol 'x' is allowed here as valid punctuation since it is often\n//  used as a placeholder for carrier codes, for example in Brazilian phone\n//  numbers. We also allow multiple '+' characters at the start.\n//\n//  Corresponds to the following:\n//  [digits]{minLengthNsn}|\n//  plus_sign*\n//  (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n//  The first reg-ex is to allow short numbers (two digits long) to be parsed if\n//  they are entered as \""15\"" etc, but only if there is no punctuation in them.\n//  The second expression restricts the number of digits to three or more, but\n//  then allows them to be in international form, and to have alpha-characters\n//  and punctuation. We split up the two reg-exes here and combine them when\n//  creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n//  with ^ and append $ to each branch.\n//\n//  \""Note VALID_PUNCTUATION starts with a -,\n//   so must be the first in the range\"" (c) Google devs.\n//  (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nvar VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + EXTN_PATTERNS_FOR_PARSING + ')?' + '$', 'i');\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + ']+$');\n\nvar default_options = {\n\tcountry: {}\n\n\t// `options`:\n\t//  {\n\t//    country:\n\t//    {\n\t//      restrict - (a two-letter country code)\n\t//                 the phone number must be in this country\n\t//\n\t//      default - (a two-letter country code)\n\t//                default country to use for phone number parsing and validation\n\t//                (if no country code could be derived from the phone number)\n\t//    }\n\t//  }\n\t//\n\t// Returns `{ country, number }`\n\t//\n\t// Example use cases:\n\t//\n\t// ```js\n\t// parse('8 (800) 555-35-35', 'RU')\n\t// parse('8 (800) 555-35-35', 'RU', metadata)\n\t// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n\t// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n\t// parse('+7 800 555 35 35')\n\t// parse('+7 800 555 35 35', metadata)\n\t// ```\n\t//\n};export default function parse(arg_1, arg_2, arg_3, arg_4) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4),\n\t    text = _sort_out_arguments.text,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// Validate `defaultCountry`.\n\n\n\tif (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n\t\tthrow new Error('Unknown country: ' + options.defaultCountry);\n\t}\n\n\t// Parse the phone number.\n\n\tvar _parse_input = parse_input(text),\n\t    formatted_phone_number = _parse_input.number,\n\t    ext = _parse_input.ext;\n\n\t// If the phone number is not viable then return nothing.\n\n\n\tif (!formatted_phone_number) {\n\t\treturn {};\n\t}\n\n\tvar _parse_phone_number = parse_phone_number(formatted_phone_number, options.defaultCountry, metadata),\n\t    country = _parse_phone_number.country,\n\t    national_number = _parse_phone_number.national_number,\n\t    countryCallingCode = _parse_phone_number.countryCallingCode,\n\t    carrierCode = _parse_phone_number.carrierCode;\n\n\tif (!metadata.selectedCountry()) {\n\t\treturn {};\n\t}\n\n\t// Validate national (significant) number length.\n\t//\n\t// A sidenote:\n\t//\n\t// They say that sometimes national (significant) numbers\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n\t// Such numbers will just be discarded.\n\t//\n\tif (national_number.length < MIN_LENGTH_FOR_NSN || national_number.length > MAX_LENGTH_FOR_NSN) {\n\t\t// Google's demo just throws an error in this case.\n\t\treturn {};\n\t}\n\n\t// Check if national phone number pattern matches the number\n\t// National number pattern is different for each country,\n\t// even for those ones which are part of the \""NANPA\"" group.\n\tvar valid = country && matches_entirely(national_number, new RegExp(metadata.nationalNumberPattern())) ? true : false;\n\n\tif (!options.extended) {\n\t\treturn valid ? result(country, national_number, ext) : {};\n\t}\n\n\treturn {\n\t\tcountry: country,\n\t\tcountryCallingCode: countryCallingCode,\n\t\tcarrierCode: carrierCode,\n\t\tvalid: valid,\n\t\tpossible: valid ? true : options.extended === true && metadata.possibleLengths() && is_possible_number(national_number, countryCallingCode !== undefined, metadata),\n\t\tphone: national_number,\n\t\text: ext\n\t};\n}\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport function is_viable_phone_number(number) {\n\treturn number.length >= MIN_LENGTH_FOR_NSN && matches_entirely(number, VALID_PHONE_NUMBER_PATTERN);\n}\n\n/**\r\n * Extracts a parseable phone number.\r\n * @param  {string} text - Input.\r\n * @return {string}.\r\n */\nexport function extract_formatted_phone_number(text) {\n\tif (!text || text.length > MAX_INPUT_STRING_LENGTH) {\n\t\treturn;\n\t}\n\n\t// Attempt to extract a possible number from the string passed in\n\n\tvar starts_at = text.search(PHONE_NUMBER_START_PATTERN);\n\n\tif (starts_at < 0) {\n\t\treturn;\n\t}\n\n\treturn text\n\t// Trim everything to the left of the phone number\n\t.slice(starts_at)\n\t// Remove trailing non-numerical characters\n\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n// Strips any national prefix (such as 0, 1) present in the number provided.\n// \""Carrier codes\"" are only used  in Colombia and Brazil,\n// and only when dialing within those countries from a mobile phone to a fixed line number.\nexport function strip_national_prefix_and_carrier_code(number, metadata) {\n\tif (!number || !metadata.nationalPrefixForParsing()) {\n\t\treturn { number: number };\n\t}\n\n\t// Attempt to parse the first digits as a national prefix\n\tvar national_prefix_pattern = new RegExp('^(?:' + metadata.nationalPrefixForParsing() + ')');\n\tvar national_prefix_matcher = national_prefix_pattern.exec(number);\n\n\t// If no national prefix is present in the phone number,\n\t// but the national prefix is optional for this country,\n\t// then consider this phone number valid.\n\t//\n\t// Google's reference `libphonenumber` implementation\n\t// wouldn't recognize such phone numbers as valid,\n\t// but I think it would perfectly make sense\n\t// to consider such phone numbers as valid\n\t// because if a national phone number was originally\n\t// formatted without the national prefix\n\t// then it must be parseable back into the original national number.\n\t// In other words, `parse(format(number))`\n\t// must always be equal to `number`.\n\t//\n\tif (!national_prefix_matcher) {\n\t\treturn { number: number };\n\t}\n\n\tvar national_significant_number = void 0;\n\n\t// `national_prefix_for_parsing` capturing groups\n\t// (used only for really messy cases: Argentina, Brazil, Mexico, Somalia)\n\tvar captured_groups_count = national_prefix_matcher.length - 1;\n\n\t// If the national number tranformation is needed then do it.\n\t//\n\t// I don't know what did they mean by `&& national_prefix_matcher[captured_groups_count]`.\n\t// https://github.com/googlei18n/libphonenumber/blob/d978e59c2e6b1ddfb6816cd190e1b62d9a96bc3b/javascript/i18n/phonenumbers/phonenumberutil.js#L3885\n\t// https://github.com/googlei18n/libphonenumber/blob/d978e59c2e6b1ddfb6816cd190e1b62d9a96bc3b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2906\n\t//\n\tif (metadata.nationalPrefixTransformRule() && national_prefix_matcher[captured_groups_count]) {\n\t\tnational_significant_number = number.replace(national_prefix_pattern, metadata.nationalPrefixTransformRule());\n\t}\n\t// Else, no transformation is necessary,\n\t// and just strip the national prefix.\n\telse {\n\t\t\tnational_significant_number = number.slice(national_prefix_matcher[0].length);\n\t\t}\n\n\tvar carrierCode = void 0;\n\tif (captured_groups_count > 0) {\n\t\tcarrierCode = national_prefix_matcher[1];\n\t}\n\n\t// The following is done in `get_country_and_national_number_for_local_number()` instead.\n\t//\n\t// // Verify the parsed national (significant) number for this country\n\t// const national_number_rule = new RegExp(metadata.nationalNumberPattern())\n\t// //\n\t// // If the original number (before stripping national prefix) was viable,\n\t// // and the resultant number is not, then prefer the original phone number.\n\t// // This is because for some countries (e.g. Russia) the same digit could be both\n\t// // a national prefix and a leading digit of a valid national phone number,\n\t// // like `8` is the national prefix for Russia and both\n\t// // `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t// if (matches_entirely(number, national_number_rule) &&\n\t// \t\t!matches_entirely(national_significant_number, national_number_rule))\n\t// {\n\t// \treturn number\n\t// }\n\n\t// Return the parsed national (significant) number\n\treturn {\n\t\tnumber: national_significant_number,\n\t\tcarrierCode: carrierCode\n\t};\n}\n\nexport function find_country_code(country_calling_code, national_phone_number, metadata) {\n\t// Is always non-empty, because `country_calling_code` is always valid\n\tvar possible_countries = metadata.countryCallingCodes()[country_calling_code];\n\n\t// If there's just one country corresponding to the country code,\n\t// then just return it, without further phone number digits validation.\n\tif (possible_countries.length === 1) {\n\t\treturn possible_countries[0];\n\t}\n\n\treturn _find_country_code(possible_countries, national_phone_number, metadata.metadata);\n}\n\n// Changes `metadata` `country`.\nfunction _find_country_code(possible_countries, national_phone_number, metadata) {\n\tmetadata = new Metadata(metadata);\n\n\tfor (var _iterator = possible_countries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar country = _ref;\n\n\t\tmetadata.country(country);\n\n\t\t// Leading digits check would be the simplest one\n\t\tif (metadata.leadingDigits()) {\n\t\t\tif (national_phone_number && national_phone_number.search(metadata.leadingDigits()) === 0) {\n\t\t\t\treturn country;\n\t\t\t}\n\t\t}\n\t\t// Else perform full validation with all of those\n\t\t// fixed-line/mobile/etc regular expressions.\n\t\telse if (get_number_type({ phone: national_phone_number, country: country }, metadata.metadata)) {\n\t\t\t\treturn country;\n\t\t\t}\n\t}\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3, arg_4) {\n\tvar text = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `parse('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\ttext = arg_1;\n\t} else throw new TypeError('A phone number for parsing must be a string.');\n\n\t// If \""default country\"" argument is being passed\n\t// then move it to `options`.\n\t// `parse('88005553535', 'RU', [options], metadata)`.\n\tif (typeof arg_2 === 'string') {\n\t\tif (arg_4) {\n\t\t\toptions = _extends({ defaultCountry: arg_2 }, arg_3);\n\t\t\tmetadata = arg_4;\n\t\t} else {\n\t\t\toptions = { defaultCountry: arg_2 };\n\t\t\tmetadata = arg_3;\n\t\t}\n\t}\n\t// No \""default country\"" argument is being passed.\n\t// International phone number is passed.\n\t// `parse('+78005553535', [options], metadata)`.\n\telse {\n\t\t\tif (arg_3) {\n\t\t\t\toptions = arg_2;\n\t\t\t\tmetadata = arg_3;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_2;\n\t\t\t}\n\t\t}\n\n\t// Apply default options.\n\tif (options) {\n\t\toptions = _extends({}, default_options, options);\n\t} else {\n\t\toptions = default_options;\n\t}\n\n\treturn { text: text, options: options, metadata: new Metadata(metadata) };\n}\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nfunction strip_extension(number) {\n\tvar start = number.search(EXTN_PATTERN);\n\tif (start < 0) {\n\t\treturn {};\n\t}\n\n\t// If we find a potential extension, and the number preceding this is a viable\n\t// number, we assume it is an extension.\n\tvar number_without_extension = number.slice(0, start);\n\t/* istanbul ignore if - seems a bit of a redundant check */\n\tif (!is_viable_phone_number(number_without_extension)) {\n\t\treturn {};\n\t}\n\n\tvar matches = number.match(EXTN_PATTERN);\n\tvar i = 1;\n\twhile (i < matches.length) {\n\t\tif (matches[i] != null && matches[i].length > 0) {\n\t\t\treturn {\n\t\t\t\tnumber: number_without_extension,\n\t\t\t\text: matches[i]\n\t\t\t};\n\t\t}\n\t\ti++;\n\t}\n}\n\nfunction is_possible_number(national_number, is_international, metadata) {\n\tswitch (check_number_length_for_type(national_number, undefined, metadata)) {\n\t\tcase 'IS_POSSIBLE':\n\t\t\treturn true;\n\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t// \treturn !is_international\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\n/**\r\n * @param  {string} text - Input.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parse_input(text) {\n\t// Parse RFC 3966 phone number URI.\n\tif (text && text.indexOf('tel:') === 0) {\n\t\treturn parseRFC3966(text);\n\t}\n\n\tvar number = extract_formatted_phone_number(text);\n\n\t// If the phone number is not viable, then abort.\n\tif (!number || !is_viable_phone_number(number)) {\n\t\treturn {};\n\t}\n\n\t// Attempt to parse extension first, since it doesn't require region-specific\n\t// data and we want to have the non-normalised number here.\n\tvar with_extension_stripped = strip_extension(number);\n\tif (with_extension_stripped.ext) {\n\t\treturn with_extension_stripped;\n\t}\n\n\treturn { number: number };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, national_number, ext) {\n\tvar result = {\n\t\tcountry: country,\n\t\tphone: national_number\n\t};\n\n\tif (ext) {\n\t\tresult.ext = ext;\n\t}\n\n\treturn result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * Returns `{ country, countryCallingCode, national_number }`.\r\n */\nfunction parse_phone_number(formatted_phone_number, default_country, metadata) {\n\tvar _extractCountryCallin = extractCountryCallingCode(formatted_phone_number, default_country, metadata),\n\t    countryCallingCode = _extractCountryCallin.countryCallingCode,\n\t    number = _extractCountryCallin.number;\n\n\tif (!number) {\n\t\treturn { countryCallingCode: countryCallingCode };\n\t}\n\n\tvar country = void 0;\n\n\tif (countryCallingCode) {\n\t\tmetadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t} else if (default_country) {\n\t\tmetadata.country(default_country);\n\t\tcountry = default_country;\n\t\tcountryCallingCode = getCountryCallingCode(default_country, metadata.metadata);\n\t} else return {};\n\n\tvar _parse_national_numbe = parse_national_number(number, metadata),\n\t    national_number = _parse_national_numbe.national_number,\n\t    carrier_code = _parse_national_numbe.carrier_code;\n\n\t// Sometimes there are several countries\n\t// corresponding to the same country phone code\n\t// (e.g. NANPA countries all having `1` country phone code).\n\t// Therefore, to reliably determine the exact country,\n\t// national (significant) number should have been parsed first.\n\t//\n\t// When `metadata.json` is generated, all \""ambiguous\"" country phone codes\n\t// get their countries populated with the full set of\n\t// \""phone number type\"" regular expressions.\n\t//\n\n\n\tvar exactCountry = find_country_code(countryCallingCode, national_number, metadata);\n\tif (exactCountry) {\n\t\tcountry = exactCountry;\n\t\tmetadata.country(country);\n\t}\n\n\treturn {\n\t\tcountry: country,\n\t\tcountryCallingCode: countryCallingCode,\n\t\tnational_number: national_number,\n\t\tcarrierCode: carrier_code\n\t};\n}\n\nfunction parse_national_number(number, metadata) {\n\tvar national_number = parseIncompletePhoneNumber(number);\n\tvar carrier_code = void 0;\n\n\t// Only strip national prefixes for non-international phone numbers\n\t// because national prefixes can't be present in international phone numbers.\n\t// Otherwise, while forgiving, it would parse a NANPA number `+1 1877 215 5230`\n\t// first to `1877 215 5230` and then, stripping the leading `1`, to `877 215 5230`,\n\t// and then it would assume that's a valid number which it isn't.\n\t// So no forgiveness for grandmas here.\n\t// The issue asking for this fix:\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/159\n\n\tvar _strip_national_prefi = strip_national_prefix_and_carrier_code(national_number, metadata),\n\t    potential_national_number = _strip_national_prefi.number,\n\t    carrierCode = _strip_national_prefi.carrierCode;\n\n\t// If metadata has \""possible lengths\"" then employ the new algorythm.\n\n\n\tif (metadata.possibleLengths()) {\n\t\t// We require that the NSN remaining after stripping the national prefix and\n\t\t// carrier code be long enough to be a possible length for the region.\n\t\t// Otherwise, we don't do the stripping, since the original number could be\n\t\t// a valid short number.\n\t\tswitch (check_number_length_for_type(potential_national_number, undefined, metadata)) {\n\t\t\tcase 'TOO_SHORT':\n\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t\tcase 'INVALID_LENGTH':\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tnational_number = potential_national_number;\n\t\t\t\tcarrier_code = carrierCode;\n\t\t}\n\t} else {\n\t\t// If the original number (before stripping national prefix) was viable,\n\t\t// and the resultant number is not, then prefer the original phone number.\n\t\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t\t// a national prefix and a leading digit of a valid national phone number,\n\t\t// like `8` is the national prefix for Russia and both\n\t\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t\tif (matches_entirely(national_number, metadata.nationalNumberPattern()) && !matches_entirely(potential_national_number, metadata.nationalNumberPattern())) {\n\t\t\t// Keep the number without stripping national prefix.\n\t\t} else {\n\t\t\tnational_number = potential_national_number;\n\t\t\tcarrier_code = carrierCode;\n\t\t}\n\t}\n\n\treturn {\n\t\tnational_number: national_number,\n\t\tcarrier_code: carrier_code\n\t};\n}\n\n// Determines the country for a given (possibly incomplete) phone number.\n// export function get_country_from_phone_number(number, metadata)\n// {\n// \treturn parse_phone_number(number, null, metadata).country\n// }\n//# sourceMappingURL=parse.js.map"",""var _typeof = typeof Symbol === \""function\"" && typeof Symbol.iterator === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \""function\"" && obj.constructor === Symbol && obj !== Symbol.prototype ? \""symbol\"" : typeof obj; };\n\nimport parse, { is_viable_phone_number } from './parse';\n\nimport { matches_entirely } from './common';\n\nimport Metadata from './metadata';\n\nvar non_fixed_line_types = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function get_number_type(arg_1, arg_2, arg_3) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3),\n\t    input = _sort_out_arguments.input,\n\t    metadata = _sort_out_arguments.metadata;\n\n\t// When no input was passed\n\n\n\tif (!input) {\n\t\treturn;\n\t}\n\n\t// When `parse()` returned `{}`\n\t// meaning that the phone number is not a valid one.\n\tif (!input.country) {\n\t\treturn;\n\t}\n\n\tif (!metadata.hasCountry(input.country)) {\n\t\tthrow new Error('Unknown country: ' + input.country);\n\t}\n\n\tvar national_number = input.phone;\n\tmetadata.country(input.country);\n\n\t// The following is copy-pasted from the original function:\n\t// https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n\t// Is this national number even valid for this country\n\tif (!matches_entirely(national_number, metadata.nationalNumberPattern())) {\n\t\treturn;\n\t}\n\n\t// Is it fixed line number\n\tif (is_of_type(national_number, 'FIXED_LINE', metadata)) {\n\t\t// Because duplicate regular expressions are removed\n\t\t// to reduce metadata size, if \""mobile\"" pattern is \""\""\n\t\t// then it means it was removed due to being a duplicate of the fixed-line pattern.\n\t\t//\n\t\tif (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// v1 metadata.\n\t\t// Legacy.\n\t\t// Deprecated.\n\t\tif (!metadata.type('MOBILE')) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\t// Check if the number happens to qualify as both fixed line and mobile.\n\t\t// (no such country in the minimal metadata set)\n\t\t/* istanbul ignore if */\n\t\tif (is_of_type(national_number, 'MOBILE', metadata)) {\n\t\t\treturn 'FIXED_LINE_OR_MOBILE';\n\t\t}\n\n\t\treturn 'FIXED_LINE';\n\t}\n\n\tfor (var _iterator = non_fixed_line_types, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar _type = _ref;\n\n\t\tif (is_of_type(national_number, _type, metadata)) {\n\t\t\treturn _type;\n\t\t}\n\t}\n}\n\nexport function is_of_type(national_number, type, metadata) {\n\ttype = metadata.type(type);\n\n\tif (!type || !type.pattern()) {\n\t\treturn false;\n\t}\n\n\t// Check if any possible number lengths are present;\n\t// if so, we use them to avoid checking\n\t// the validation pattern if they don't match.\n\t// If they are absent, this means they match\n\t// the general description, which we have\n\t// already checked before a specific number type.\n\tif (type.possibleLengths() && type.possibleLengths().indexOf(national_number.length) < 0) {\n\t\treturn false;\n\t}\n\n\treturn matches_entirely(national_number, type.pattern());\n}\n\n// Sort out arguments\nexport function sort_out_arguments(arg_1, arg_2, arg_3) {\n\tvar input = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `getNumberType('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\t// If \""resrict country\"" argument is being passed\n\t\t// then convert it to an `options` object.\n\t\t// `getNumberType('88005553535', 'RU', metadata)`.\n\t\tif (typeof arg_2 === 'string' || arg_2 === undefined) {\n\t\t\tmetadata = arg_3;\n\n\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t// while this `validate` function needs to verify\n\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\tif (is_viable_phone_number(arg_1)) {\n\t\t\t\tinput = parse(arg_1, arg_2, metadata);\n\t\t\t}\n\t\t}\n\t\t// No \""resrict country\"" argument is being passed.\n\t\t// International phone number is passed.\n\t\t// `getNumberType('+78005553535', metadata)`.\n\t\telse {\n\t\t\t\tmetadata = arg_2;\n\n\t\t\t\t// `parse` extracts phone numbers from raw text,\n\t\t\t\t// therefore it will cut off all \""garbage\"" characters,\n\t\t\t\t// while this `validate` function needs to verify\n\t\t\t\t// that the phone number contains no \""garbage\""\n\t\t\t\t// therefore the explicit `is_viable_phone_number` check.\n\t\t\t\tif (is_viable_phone_number(arg_1)) {\n\t\t\t\t\tinput = parse(arg_1, metadata);\n\t\t\t\t}\n\t\t\t}\n\t}\n\t// If the phone number is passed as a parsed phone number.\n\t// `getNumberType({ phone: '88005553535', country: 'RU' }, ...)`.\n\telse if (is_object(arg_1) && typeof arg_1.phone === 'string') {\n\t\t\t// The `arg_1` must be a valid phone number\n\t\t\t// as a whole, not just a part of it which gets parsed here.\n\t\t\tif (is_viable_phone_number(arg_1.phone)) {\n\t\t\t\tinput = arg_1;\n\t\t\t}\n\n\t\t\tmetadata = arg_2;\n\t\t} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');\n\n\treturn { input: input, metadata: new Metadata(metadata) };\n}\n\n// Should only be called for the \""new\"" metadata which has \""possible lengths\"".\nexport function check_number_length_for_type(national_number, type, metadata) {\n\tvar type_info = metadata.type(type);\n\n\t// There should always be \""<possiblePengths/>\"" set for every type element.\n\t// This is declared in the XML schema.\n\t// For size efficiency, where a sub-description (e.g. fixed-line)\n\t// has the same \""<possiblePengths/>\"" as the \""general description\"", this is missing,\n\t// so we fall back to the \""general description\"". Where no numbers of the type\n\t// exist at all, there is one possible length (-1) which is guaranteed\n\t// not to match the length of any real phone number.\n\tvar possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n\t// let local_lengths    = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n\tif (type === 'FIXED_LINE_OR_MOBILE') {\n\t\t// No such country in metadata.\n\t\t/* istanbul ignore next */\n\t\tif (!metadata.type('FIXED_LINE')) {\n\t\t\t// The rare case has been encountered where no fixedLine data is available\n\t\t\t// (true for some non-geographical entities), so we just check mobile.\n\t\t\treturn test_number_length_for_type(national_number, 'MOBILE', metadata);\n\t\t}\n\n\t\tvar mobile_type = metadata.type('MOBILE');\n\n\t\tif (mobile_type) {\n\t\t\t// Merge the mobile data in if there was any. \""Concat\"" creates a new\n\t\t\t// array, it doesn't edit possible_lengths in place, so we don't need a copy.\n\t\t\t// Note that when adding the possible lengths from mobile, we have\n\t\t\t// to again check they aren't empty since if they are this indicates\n\t\t\t// they are the same as the general desc and should be obtained from there.\n\t\t\tpossible_lengths = merge_arrays(possible_lengths, mobile_type.possibleLengths());\n\t\t\t// The current list is sorted; we need to merge in the new list and\n\t\t\t// re-sort (duplicates are okay). Sorting isn't so expensive because\n\t\t\t// the lists are very small.\n\n\t\t\t// if (local_lengths)\n\t\t\t// {\n\t\t\t// \tlocal_lengths = merge_arrays(local_lengths, mobile_type.possibleLengthsLocal())\n\t\t\t// }\n\t\t\t// else\n\t\t\t// {\n\t\t\t// \tlocal_lengths = mobile_type.possibleLengthsLocal()\n\t\t\t// }\n\t\t}\n\t}\n\t// If the type doesn't exist then return 'INVALID_LENGTH'.\n\telse if (type && !type_info) {\n\t\t\treturn 'INVALID_LENGTH';\n\t\t}\n\n\tvar actual_length = national_number.length;\n\n\t// // This is safe because there is never an overlap beween the possible lengths\n\t// // and the local-only lengths; this is checked at build time.\n\t// if (local_lengths && local_lengths.indexOf(national_number.length) >= 0)\n\t// {\n\t// \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n\t// }\n\n\tvar minimum_length = possible_lengths[0];\n\n\tif (minimum_length === actual_length) {\n\t\treturn 'IS_POSSIBLE';\n\t}\n\n\tif (minimum_length > actual_length) {\n\t\treturn 'TOO_SHORT';\n\t}\n\n\tif (possible_lengths[possible_lengths.length - 1] < actual_length) {\n\t\treturn 'TOO_LONG';\n\t}\n\n\t// We skip the first element since we've already checked it.\n\treturn possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : _typeof(_)) === 'object';\n};\n\nexport function merge_arrays(a, b) {\n\tvar merged = a.slice();\n\n\tfor (var _iterator2 = b, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n\t\tvar _ref2;\n\n\t\tif (_isArray2) {\n\t\t\tif (_i2 >= _iterator2.length) break;\n\t\t\t_ref2 = _iterator2[_i2++];\n\t\t} else {\n\t\t\t_i2 = _iterator2.next();\n\t\t\tif (_i2.done) break;\n\t\t\t_ref2 = _i2.value;\n\t\t}\n\n\t\tvar element = _ref2;\n\n\t\tif (a.indexOf(element) < 0) {\n\t\t\tmerged.push(element);\n\t\t}\n\t}\n\n\treturn merged.sort(function (a, b) {\n\t\treturn a - b;\n\t});\n\n\t// ES6 version, requires Set polyfill.\n\t// let merged = new Set(a)\n\t// for (const element of b)\n\t// {\n\t// \tmerged.add(i)\n\t// }\n\t// return Array.from(merged).sort((a, b) => a - b)\n}\n//# sourceMappingURL=getNumberType.js.map"",""var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\""return\""]) _i[\""return\""](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\""Invalid attempt to destructure non-iterable instance\""); } }; }();\n\nimport { is_viable_phone_number } from './parse';\n\n// https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param  {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nexport function parseRFC3966(text) {\n\tvar number = void 0;\n\tvar ext = void 0;\n\n\t// Replace \""tel:\"" with \""tel=\"" for parsing convenience.\n\ttext = text.replace(/^tel:/, 'tel=');\n\n\tfor (var _iterator = text.split(';'), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar part = _ref;\n\n\t\tvar _part$split = part.split('='),\n\t\t    _part$split2 = _slicedToArray(_part$split, 2),\n\t\t    name = _part$split2[0],\n\t\t    value = _part$split2[1];\n\n\t\tswitch (name) {\n\t\t\tcase 'tel':\n\t\t\t\tnumber = value;\n\t\t\t\tbreak;\n\t\t\tcase 'ext':\n\t\t\t\text = value;\n\t\t\t\tbreak;\n\t\t\tcase 'phone-context':\n\t\t\t\t// Only \""country contexts\"" are supported.\n\t\t\t\t// \""Domain contexts\"" are ignored.\n\t\t\t\tif (value[0] === '+') {\n\t\t\t\t\tnumber = value + number;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// If the phone number is not viable, then abort.\n\tif (!is_viable_phone_number(number)) {\n\t\treturn {};\n\t}\n\n\tvar result = { number: number };\n\tif (ext) {\n\t\tresult.ext = ext;\n\t}\n\treturn result;\n}\n\n/**\r\n * @param  {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nexport function formatRFC3966(_ref2) {\n\tvar number = _ref2.number,\n\t    ext = _ref2.ext;\n\n\tif (!number) {\n\t\treturn '';\n\t}\n\n\tif (number[0] !== '+') {\n\t\tthrow new Error('\""formatRFC3966()\"" expects \""number\"" to be in E.164 format.');\n\t}\n\n\treturn 'tel:' + number + (ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map"",""import { parseDigit } from './common';\n\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param  {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * // Outputs '+7800555'.\r\n * ```\r\n */\nexport default function parseIncompletePhoneNumber(string) {\n\tvar result = '';\n\n\t// Using `.split('')` here instead of normal `for ... of`\n\t// because the importing application doesn't neccessarily include an ES6 polyfill.\n\t// The `.split('')` approach discards \""exotic\"" UTF-8 characters\n\t// (the ones consisting of four bytes) but digits\n\t// (including non-European ones) don't fall into that range\n\t// so such \""exotic\"" characters would be discarded anyway.\n\tfor (var _iterator = string.split(''), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar character = _ref;\n\n\t\tresult += parsePhoneNumberCharacter(character, result) || '';\n\t}\n\n\treturn result;\n}\n\n/**\r\n * `input-format` `parse()` function.\r\n * https://github.com/catamphetamine/input-format\r\n * @param  {string} character - Yet another character from raw input string.\r\n * @param  {string} value - The value parsed so far.\r\n * @param  {object} meta - Optional custom use-case-specific metadata.\r\n * @return {string?} The parsed character.\r\n */\nexport function parsePhoneNumberCharacter(character, value) {\n\t// Only allow a leading `+`.\n\tif (character === '+') {\n\t\t// If this `+` is not the first parsed character\n\t\t// then discard it.\n\t\tif (value) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn '+';\n\t}\n\n\t// Allow digits.\n\treturn parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map"",""/** Returns a regular expression quantifier with an upper and lower limit. */\nexport function limit(lower, upper) {\n\tif (lower < 0 || upper <= 0 || upper < lower) {\n\t\tthrow new TypeError();\n\t}\n\treturn \""{\"" + lower + \"",\"" + upper + \""}\"";\n}\n\n/**\r\n * Trims away any characters after the first match of {@code pattern} in {@code candidate},\r\n * returning the trimmed version.\r\n */\nexport function trimAfterFirstMatch(regexp, string) {\n\tvar index = string.search(regexp);\n\n\tif (index >= 0) {\n\t\treturn string.slice(0, index);\n\t}\n\n\treturn string;\n}\n\nexport function startsWith(string, substring) {\n\treturn string.indexOf(substring) === 0;\n}\n\nexport function endsWith(string, substring) {\n\treturn string.indexOf(substring, string.length - substring.length) === string.length - substring.length;\n}\n//# sourceMappingURL=util.js.map"",""import parse, { is_viable_phone_number } from './parse';\nimport get_number_type, { sort_out_arguments } from './getNumberType';\n\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\""IM\"" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\nexport default function isValidNumber(arg_1, arg_2, arg_3) {\n  var _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3),\n      input = _sort_out_arguments.input,\n      metadata = _sort_out_arguments.metadata;\n\n  if (!input) {\n    return false;\n  }\n\n  if (!input.country) {\n    return false;\n  }\n\n  if (!metadata.hasCountry(input.country)) {\n    throw new Error('Unknown country: ' + input.country);\n  }\n\n  metadata.country(input.country);\n\n  if (metadata.hasTypes()) {\n    return get_number_type(input, metadata.metadata) !== undefined;\n  }\n\n  return true;\n}\n//# sourceMappingURL=validate.js.map"",""var _typeof = typeof Symbol === \""function\"" && typeof Symbol.iterator === \""symbol\"" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \""function\"" && obj.constructor === Symbol && obj !== Symbol.prototype ? \""symbol\"" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { extractCountryCallingCode, VALID_PUNCTUATION, matches_entirely } from './common';\n\nimport { getIDDPrefix } from './IDD';\n\nimport Metadata from './metadata';\n\nimport { formatRFC3966 } from './RFC3966';\n\nvar defaultOptions = {\n\tformatExtension: function formatExtension(number, extension, metadata) {\n\t\treturn '' + number + metadata.ext() + extension;\n\t}\n\n\t// Formats a phone number\n\t//\n\t// Example use cases:\n\t//\n\t// ```js\n\t// format('8005553535', 'RU', 'International')\n\t// format('8005553535', 'RU', 'International', metadata)\n\t// format({ phone: '8005553535', country: 'RU' }, 'International')\n\t// format({ phone: '8005553535', country: 'RU' }, 'International', metadata)\n\t// format('+78005553535', 'National')\n\t// format('+78005553535', 'National', metadata)\n\t// ```\n\t//\n};export default function format(arg_1, arg_2, arg_3, arg_4, arg_5) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4, arg_5),\n\t    input = _sort_out_arguments.input,\n\t    format_type = _sort_out_arguments.format_type,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tif (input.country && metadata.hasCountry(input.country)) {\n\t\tmetadata.country(input.country);\n\t}\n\n\t// `number` is a national (significant) number in this case.\n\n\tvar _extractCountryCallin = extractCountryCallingCode(input.phone, null, metadata),\n\t    countryCallingCode = _extractCountryCallin.countryCallingCode,\n\t    number = _extractCountryCallin.number;\n\n\tcountryCallingCode = countryCallingCode || input.countryCallingCode;\n\n\tif (countryCallingCode) {\n\t\t// Check country restriction\n\t\tif (input.country && metadata.selectedCountry() && countryCallingCode !== metadata.countryCallingCode()) {\n\t\t\treturn input.phone;\n\t\t}\n\n\t\tmetadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t}\n\n\tif (!metadata.selectedCountry()) {\n\t\treturn input.phone;\n\t}\n\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\t\tif (!number) {\n\t\t\t\treturn '+' + metadata.countryCallingCode();\n\t\t\t}\n\t\t\tnumber = format_national_number(number, 'International', false, metadata);\n\t\t\tnumber = '+' + metadata.countryCallingCode() + ' ' + number;\n\t\t\treturn add_extension(number, input.ext, metadata, options.formatExtension);\n\n\t\tcase 'E.164':\n\t\t\t// `E.164` doesn't define \""phone number extensions\"".\n\t\t\treturn '+' + metadata.countryCallingCode() + input.phone;\n\n\t\tcase 'RFC3966':\n\t\t\treturn formatRFC3966({\n\t\t\t\tnumber: '+' + metadata.countryCallingCode() + input.phone,\n\t\t\t\text: input.ext\n\t\t\t});\n\n\t\tcase 'IDD':\n\t\t\tif (!options.fromCountry) {\n\t\t\t\treturn;\n\t\t\t\t// throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n\t\t\t}\n\t\t\tvar IDDPrefix = getIDDPrefix(options.fromCountry, metadata.metadata);\n\t\t\tif (!IDDPrefix) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (options.humanReadable) {\n\t\t\t\tvar formattedForSameCountryCallingCode = countryCallingCode && formatIDDSameCountryCallingCodeNumber(number, countryCallingCode, options.fromCountry, metadata);\n\t\t\t\tif (formattedForSameCountryCallingCode) {\n\t\t\t\t\tnumber = formattedForSameCountryCallingCode;\n\t\t\t\t} else {\n\t\t\t\t\tnumber = IDDPrefix + ' ' + metadata.countryCallingCode() + ' ' + format_national_number(number, 'International', false, metadata);\n\t\t\t\t}\n\t\t\t\treturn add_extension(number, input.ext, metadata, options.formatExtension);\n\t\t\t}\n\t\t\treturn '' + IDDPrefix + metadata.countryCallingCode() + number;\n\n\t\tcase 'National':\n\t\t\tif (!number) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tnumber = format_national_number(number, 'National', false, metadata);\n\t\t\treturn add_extension(number, input.ext, metadata, options.formatExtension);\n\t}\n}\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly.  Therefore, we use \\d, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\n\nexport function format_national_number_using_format(number, format, international, enforce_national_prefix, metadata) {\n\tvar format_pattern_matcher = new RegExp(format.pattern());\n\n\t// National prefix is omitted if there's no national prefix formatting rule\n\t// set for this country, or when this rule is set but\n\t// national prefix is optional for this phone number format\n\t// (and it is not enforced explicitly)\n\tvar national_prefix_may_be_omitted = !format.nationalPrefixFormattingRule() || format.nationalPrefixFormattingRule() && format.nationalPrefixIsOptionalWhenFormatting() && !enforce_national_prefix;\n\n\tif (!international && !national_prefix_may_be_omitted) {\n\t\treturn number.replace(format_pattern_matcher, format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()));\n\t}\n\n\tvar formatted_number = number.replace(format_pattern_matcher, international ? format.internationalFormat() : format.format());\n\n\tif (international) {\n\t\treturn local_to_international_style(formatted_number);\n\t}\n\n\treturn formatted_number;\n}\n\nfunction format_national_number(number, format_as, enforce_national_prefix, metadata) {\n\tvar format = choose_format_for_number(metadata.formats(), number);\n\n\tif (!format) {\n\t\treturn number;\n\t}\n\n\treturn format_national_number_using_format(number, format, format_as === 'International', enforce_national_prefix, metadata);\n}\n\nexport function choose_format_for_number(available_formats, national_number) {\n\tfor (var _iterator = available_formats, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i++];\n\t\t} else {\n\t\t\t_i = _iterator.next();\n\t\t\tif (_i.done) break;\n\t\t\t_ref = _i.value;\n\t\t}\n\n\t\tvar _format = _ref;\n\n\t\t// Validate leading digits\n\t\tif (_format.leadingDigitsPatterns().length > 0) {\n\t\t\t// The last leading_digits_pattern is used here, as it is the most detailed\n\t\t\tvar last_leading_digits_pattern = _format.leadingDigitsPatterns()[_format.leadingDigitsPatterns().length - 1];\n\n\t\t\t// If leading digits don't match then move on to the next phone number format\n\t\t\tif (national_number.search(last_leading_digits_pattern) !== 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// Check that the national number matches the phone number format regular expression\n\t\tif (matches_entirely(national_number, new RegExp(_format.pattern()))) {\n\t\t\treturn _format;\n\t\t}\n\t}\n}\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \""(999) 111-22-33\"" -> \""999 111 22 33\""\n//\nexport function local_to_international_style(local) {\n\treturn local.replace(new RegExp('[' + VALID_PUNCTUATION + ']+', 'g'), ' ').trim();\n}\n\n// Sort out arguments\nfunction sort_out_arguments(arg_1, arg_2, arg_3, arg_4, arg_5) {\n\tvar input = void 0;\n\tvar format_type = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// Sort out arguments.\n\n\t// If the phone number is passed as a string.\n\t// `format('8005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\t// If country code is supplied.\n\t\t// `format('8005553535', 'RU', 'National', [options], metadata)`.\n\t\tif (typeof arg_3 === 'string') {\n\t\t\t// Will be `parse()`d later in code\n\t\t\tinput = {\n\t\t\t\tphone: arg_1,\n\t\t\t\tcountry: arg_2\n\t\t\t};\n\n\t\t\tformat_type = arg_3;\n\n\t\t\tif (arg_5) {\n\t\t\t\toptions = arg_4;\n\t\t\t\tmetadata = arg_5;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_4;\n\t\t\t}\n\t\t}\n\t\t// Just an international phone number is supplied\n\t\t// `format('+78005553535', 'National', [options], metadata)`.\n\t\telse {\n\t\t\t\t// Will be `parse()`d later in code\n\t\t\t\tinput = {\n\t\t\t\t\tphone: arg_1\n\t\t\t\t};\n\n\t\t\t\tif (typeof arg_2 !== 'string') {\n\t\t\t\t\tthrow new Error('Format type argument not passed for `format()`');\n\t\t\t\t}\n\n\t\t\t\tformat_type = arg_2;\n\n\t\t\t\tif (arg_4) {\n\t\t\t\t\toptions = arg_3;\n\t\t\t\t\tmetadata = arg_4;\n\t\t\t\t} else {\n\t\t\t\t\tmetadata = arg_3;\n\t\t\t\t}\n\t\t\t}\n\t}\n\t// If the phone number is passed as a parsed number object.\n\t// `format({ phone: '8005553535', country: 'RU' }, 'National', [options], metadata)`.\n\telse if (is_object(arg_1) && typeof arg_1.phone === 'string') {\n\t\t\tinput = arg_1;\n\t\t\tformat_type = arg_2;\n\n\t\t\tif (arg_4) {\n\t\t\t\toptions = arg_3;\n\t\t\t\tmetadata = arg_4;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_3;\n\t\t\t}\n\t\t} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');\n\n\t// Validate `format_type`.\n\tswitch (format_type) {\n\t\tcase 'International':\n\t\tcase 'E.164':\n\t\tcase 'National':\n\t\tcase 'RFC3966':\n\t\tcase 'IDD':\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error('Unknown format type argument passed to \""format()\"": \""' + format_type + '\""');\n\t}\n\n\t// Apply default options.\n\tif (options) {\n\t\toptions = _extends({}, defaultOptions, options);\n\t} else {\n\t\toptions = defaultOptions;\n\t}\n\n\treturn { input: input, format_type: format_type, options: options, metadata: new Metadata(metadata) };\n}\n\n// Babel transforms `typeof` into some \""branches\""\n// so istanbul will show this as \""branch not covered\"".\n/* istanbul ignore next */\nvar is_object = function is_object(_) {\n\treturn (typeof _ === 'undefined' ? 'undefined' : _typeof(_)) === 'object';\n};\n\nfunction add_extension(number, ext, metadata, formatExtension) {\n\treturn ext ? formatExtension(number, ext, metadata) : number;\n}\n\nexport function formatIDDSameCountryCallingCodeNumber(number, toCountryCallingCode, fromCountry, toCountryMetadata) {\n\tvar fromCountryMetadata = new Metadata(toCountryMetadata.metadata);\n\tfromCountryMetadata.country(fromCountry);\n\n\t// If calling within the same country calling code.\n\tif (toCountryCallingCode === fromCountryMetadata.countryCallingCode()) {\n\t\t// For NANPA regions, return the national format for these regions\n\t\t// but prefix it with the country calling code.\n\t\tif (toCountryCallingCode === '1') {\n\t\t\treturn toCountryCallingCode + ' ' + format_national_number(number, 'National', false, toCountryMetadata);\n\t\t}\n\n\t\t// If regions share a country calling code, the country calling code need\n\t\t// not be dialled. This also applies when dialling within a region, so this\n\t\t// if clause covers both these cases. Technically this is the case for\n\t\t// dialling from La Reunion to other overseas departments of France (French\n\t\t// Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n\t\t// this edge case for now and for those cases return the version including\n\t\t// country calling code. Details here:\n\t\t// http://www.petitfute.com/voyage/225-info-pratiques-reunion\n\t\treturn format_national_number(number, 'National', false, toCountryMetadata);\n\t}\n}\n//# sourceMappingURL=format.js.map"",""import Metadata from './metadata';\n\nexport default function (country, metadata) {\n\tmetadata = new Metadata(metadata);\n\n\tif (!metadata.hasCountry(country)) {\n\t\tthrow new Error('Unknown country: ' + country);\n\t}\n\n\treturn metadata.country(country).countryCallingCode();\n}\n//# sourceMappingURL=getCountryCallingCode.js.map"",""import Metadata from './metadata';\nimport { matches_entirely, VALID_DIGITS } from './common';\n\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\n\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\nvar SINGLE_IDD_PREFIX = /[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?/;\n\n// export function isSingleIDDPrefix(IDDPrefix)\n// {\n// \treturn matches_entirely(IDDPrefix, SINGLE_IDD_PREFIX)\n// }\n\n// For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\nexport function getIDDPrefix(country, metadata) {\n\tvar countryMetadata = new Metadata(metadata);\n\tcountryMetadata.country(country);\n\n\tif (matches_entirely(countryMetadata.IDDPrefix(), SINGLE_IDD_PREFIX)) {\n\t\treturn countryMetadata.IDDPrefix();\n\t}\n\n\treturn countryMetadata.defaultIDDPrefix();\n}\n\nexport function stripIDDPrefix(number, country, metadata) {\n\tif (!country) {\n\t\treturn;\n\t}\n\n\t// Check if the number is IDD-prefixed.\n\n\tvar countryMetadata = new Metadata(metadata);\n\tcountryMetadata.country(country);\n\n\tvar IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n\n\tif (number.search(IDDPrefixPattern) !== 0) {\n\t\treturn;\n\t}\n\n\t// Strip IDD prefix.\n\tnumber = number.slice(number.match(IDDPrefixPattern)[0].length);\n\n\t// Some kind of a weird edge case.\n\t// No explanation from Google given.\n\tvar matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n\t/* istanbul ignore next */\n\tif (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n\t\tif (matchedGroups[1] === '0') {\n\t\t\treturn;\n\t\t}\n\t}\n\n\treturn number;\n}\n//# sourceMappingURL=IDD.js.map"",""import { sort_out_arguments } from './getNumberType';\nimport isValidNumber from './validate';\n\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters.\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The `country` argument is the country the number must belong to.\r\n * This is a stricter version of `isValidNumber(number, defaultCountry)`.\r\n * Though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Doesn't accept `number` object, only `number` string with a `country` string.\r\n */\nexport default function isValidNumberForRegion(number, country, _metadata) {\n  if (typeof number !== 'string') {\n    throw new TypeError('number must be a string');\n  }\n\n  if (typeof country !== 'string') {\n    throw new TypeError('country must be a string');\n  }\n\n  var _sort_out_arguments = sort_out_arguments(number, country, _metadata),\n      input = _sort_out_arguments.input,\n      metadata = _sort_out_arguments.metadata;\n\n  var isValid = isValidNumber(input, metadata.metadata);\n\n  return isValid && input.country === country;\n}\n//# sourceMappingURL=isValidNumberForRegion.js.map"",""var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\""value\"" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\""Cannot call a class as a function\""); } }\n\n// This is an enhanced port of Google Android `libphonenumber`'s\n// `asyoutypeformatter.js` of 17th November, 2016.\n//\n// https://github.com/googlei18n/libphonenumber/blob/8d21a365061de2ba0675c878a710a7b24f74d2ae/javascript/i18n/phonenumbers/asyoutypeformatter.js\n\nimport Metadata from './metadata';\n\nimport { matches_entirely, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS, extractCountryCallingCode } from './common';\n\nimport { extract_formatted_phone_number, find_country_code, strip_national_prefix_and_carrier_code } from './parse';\n\nimport { FIRST_GROUP_PATTERN, format_national_number_using_format, local_to_international_style } from './format';\n\nimport { check_number_length_for_type } from './getNumberType';\n\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber';\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\nvar DUMMY_DIGIT_MATCHER = new RegExp(DUMMY_DIGIT, 'g');\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \""longest phone number\"" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// The digits that have not been entered yet will be represented by a \\u2008,\n// the punctuation space.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\nvar DIGIT_PLACEHOLDER_MATCHER_GLOBAL = new RegExp(DIGIT_PLACEHOLDER, 'g');\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \""[1-4]\"".\nvar CHARACTER_CLASS_PATTERN = /\\[([^\\[\\]])*\\]/g;\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \""80[0-2]\\d{6,10}\"", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar STANDALONE_DIGIT_PATTERN = /\\d(?=[^,}][^,}])/g;\n\n// A pattern that is used to determine if a `format` is eligible\n// to be used by the \""as you type formatter\"".\n// It is eligible when the `format` contains groups of the dollar sign\n// followed by a single digit, separated by valid phone number punctuation.\n// This prevents invalid punctuation (such as the star sign in Israeli star numbers)\n// getting into the output of the \""as you type formatter\"".\nvar ELIGIBLE_FORMAT_PATTERN = new RegExp('^' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)+' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \""leading digits pattern\"" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\n\nvar VALID_INCOMPLETE_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\nvar VALID_INCOMPLETE_PHONE_NUMBER_PATTERN = new RegExp('^' + VALID_INCOMPLETE_PHONE_NUMBER + '$', 'i');\n\nvar AsYouType = function () {\n\n\t/**\r\n  * @param {string} [country_code] - The default country used for parsing non-international phone numbers.\r\n  * @param {Object} metadata\r\n  */\n\tfunction AsYouType(country_code, metadata) {\n\t\t_classCallCheck(this, AsYouType);\n\n\t\tthis.options = {};\n\n\t\tthis.metadata = new Metadata(metadata);\n\n\t\tif (country_code && this.metadata.hasCountry(country_code)) {\n\t\t\tthis.default_country = country_code;\n\t\t}\n\n\t\tthis.reset();\n\t}\n\t// Not setting `options` to a constructor argument\n\t// not to break backwards compatibility\n\t// for older versions of the library.\n\n\n\t_createClass(AsYouType, [{\n\t\tkey: 'input',\n\t\tvalue: function input(text) {\n\t\t\t// Parse input\n\n\t\t\tvar extracted_number = extract_formatted_phone_number(text) || '';\n\n\t\t\t// Special case for a lone '+' sign\n\t\t\t// since it's not considered a possible phone number.\n\t\t\tif (!extracted_number) {\n\t\t\t\tif (text && text.indexOf('+') >= 0) {\n\t\t\t\t\textracted_number = '+';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Validate possible first part of a phone number\n\t\t\tif (!matches_entirely(extracted_number, VALID_INCOMPLETE_PHONE_NUMBER_PATTERN)) {\n\t\t\t\treturn this.current_output;\n\t\t\t}\n\n\t\t\treturn this.process_input(parseIncompletePhoneNumber(extracted_number));\n\t\t}\n\t}, {\n\t\tkey: 'process_input',\n\t\tvalue: function process_input(input) {\n\t\t\t// If an out of position '+' sign detected\n\t\t\t// (or a second '+' sign),\n\t\t\t// then just drop it from the input.\n\t\t\tif (input[0] === '+') {\n\t\t\t\tif (!this.parsed_input) {\n\t\t\t\t\tthis.parsed_input += '+';\n\n\t\t\t\t\t// If a default country was set\n\t\t\t\t\t// then reset it because an explicitly international\n\t\t\t\t\t// phone number is being entered\n\t\t\t\t\tthis.reset_countriness();\n\t\t\t\t}\n\n\t\t\t\tinput = input.slice(1);\n\t\t\t}\n\n\t\t\t// Raw phone number\n\t\t\tthis.parsed_input += input;\n\n\t\t\t// // Reset phone number validation state\n\t\t\t// this.valid = false\n\n\t\t\t// Add digits to the national number\n\t\t\tthis.national_number += input;\n\n\t\t\t// TODO: Deprecated: rename `this.national_number`\n\t\t\t// to `this.nationalNumber` and remove `.getNationalNumber()`.\n\n\t\t\t// Try to format the parsed input\n\n\t\t\tif (this.is_international()) {\n\t\t\t\tif (!this.countryCallingCode) {\n\t\t\t\t\t// No need to format anything\n\t\t\t\t\t// if there's no national phone number.\n\t\t\t\t\t// (e.g. just the country calling code)\n\t\t\t\t\tif (!this.national_number) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If one looks at country phone codes\n\t\t\t\t\t// then he can notice that no one country phone code\n\t\t\t\t\t// is ever a (leftmost) substring of another country phone code.\n\t\t\t\t\t// So if a valid country code is extracted so far\n\t\t\t\t\t// then it means that this is the country code.\n\n\t\t\t\t\t// If no country phone code could be extracted so far,\n\t\t\t\t\t// then just return the raw phone number,\n\t\t\t\t\t// because it has no way of knowing\n\t\t\t\t\t// how to format the phone number so far.\n\t\t\t\t\tif (!this.extract_country_calling_code()) {\n\t\t\t\t\t\t// Return raw phone number\n\t\t\t\t\t\treturn this.parsed_input;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Initialize country-specific data\n\t\t\t\t\tthis.initialize_phone_number_formats_for_this_country_calling_code();\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t}\n\t\t\t\t// `this.country` could be `undefined`,\n\t\t\t\t// for instance, when there is ambiguity\n\t\t\t\t// in a form of several different countries\n\t\t\t\t// each corresponding to the same country phone code\n\t\t\t\t// (e.g. NANPA: USA, Canada, etc),\n\t\t\t\t// and there's not enough digits entered\n\t\t\t\t// to reliably determine the country\n\t\t\t\t// the phone number belongs to.\n\t\t\t\t// Therefore, in cases of such ambiguity,\n\t\t\t\t// each time something is input,\n\t\t\t\t// try to determine the country\n\t\t\t\t// (if it's not determined yet).\n\t\t\t\telse if (!this.country) {\n\t\t\t\t\t\tthis.determine_the_country();\n\t\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Some national prefixes are substrings of other national prefixes\n\t\t\t\t// (for the same country), therefore try to extract national prefix each time\n\t\t\t\t// because a longer national prefix might be available at some point in time.\n\n\t\t\t\tvar previous_national_prefix = this.national_prefix;\n\t\t\t\tthis.national_number = this.national_prefix + this.national_number;\n\n\t\t\t\t// Possibly extract a national prefix\n\t\t\t\tthis.extract_national_prefix();\n\n\t\t\t\tif (this.national_prefix !== previous_national_prefix) {\n\t\t\t\t\t// National number has changed\n\t\t\t\t\t// (due to another national prefix been extracted)\n\t\t\t\t\t// therefore national number has changed\n\t\t\t\t\t// therefore reset all previous formatting data.\n\t\t\t\t\t// (and leading digits matching state)\n\t\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t\t\tthis.reset_format();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.should_format()) {\n\t\t\t\treturn this.format_as_non_formatted_number();\n\t\t\t}\n\n\t\t\t// Check the available phone number formats\n\t\t\t// based on the currently available leading digits.\n\t\t\tthis.match_formats_by_leading_digits();\n\n\t\t\t// Format the phone number (given the next digits)\n\t\t\tvar formatted_national_phone_number = this.format_national_phone_number(input);\n\n\t\t\t// If the phone number could be formatted,\n\t\t\t// then return it, possibly prepending with country phone code\n\t\t\t// (for international phone numbers only)\n\t\t\tif (formatted_national_phone_number) {\n\t\t\t\treturn this.full_phone_number(formatted_national_phone_number);\n\t\t\t}\n\n\t\t\t// If the phone number couldn't be formatted,\n\t\t\t// then just fall back to the raw phone number.\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_as_non_formatted_number',\n\t\tvalue: function format_as_non_formatted_number() {\n\t\t\tif (this.is_international() && this.countryCallingCode) {\n\t\t\t\tif (this.national_number) {\n\t\t\t\t\t// For convenience, the public `.template` property\n\t\t\t\t\t// contains the whole international number\n\t\t\t\t\t// if the phone number being input is international:\n\t\t\t\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\n\t\t\t\t\t// a spacebar and then the template for the national number digits.\n\t\t\t\t\tthis.template = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.countryCallingCode.length) + ' ' + repeat(DIGIT_PLACEHOLDER, this.national_number.length);\n\n\t\t\t\t\treturn '+' + this.countryCallingCode + ' ' + this.national_number;\n\t\t\t\t}\n\n\t\t\t\treturn '+' + this.countryCallingCode;\n\t\t\t}\n\n\t\t\treturn this.parsed_input;\n\t\t}\n\t}, {\n\t\tkey: 'format_national_phone_number',\n\t\tvalue: function format_national_phone_number(next_digits) {\n\t\t\t// Format the next phone number digits\n\t\t\t// using the previously chosen phone number format.\n\t\t\t//\n\t\t\t// This is done here because if `attempt_to_format_complete_phone_number`\n\t\t\t// was placed before this call then the `template`\n\t\t\t// wouldn't reflect the situation correctly (and would therefore be inconsistent)\n\t\t\t//\n\t\t\tvar national_number_formatted_with_previous_format = void 0;\n\t\t\tif (this.chosen_format) {\n\t\t\t\tnational_number_formatted_with_previous_format = this.format_next_national_number_digits(next_digits);\n\t\t\t}\n\n\t\t\t// See if the input digits can be formatted properly already. If not,\n\t\t\t// use the results from format_next_national_number_digits(), which does formatting\n\t\t\t// based on the formatting pattern chosen.\n\n\t\t\tvar formatted_number = this.attempt_to_format_complete_phone_number();\n\n\t\t\t// Just because a phone number doesn't have a suitable format\n\t\t\t// that doesn't mean that the phone is invalid\n\t\t\t// because phone number formats only format phone numbers,\n\t\t\t// they don't validate them and some (rare) phone numbers\n\t\t\t// are meant to stay non-formatted.\n\t\t\tif (formatted_number) {\n\t\t\t\t// if (this.country)\n\t\t\t\t// {\n\t\t\t\t// \tthis.valid = true\n\t\t\t\t// }\n\n\t\t\t\treturn formatted_number;\n\t\t\t}\n\n\t\t\t// For some phone number formats national prefix\n\n\t\t\t// If the previously chosen phone number format\n\t\t\t// didn't match the next (current) digit being input\n\t\t\t// (leading digits pattern didn't match).\n\t\t\tif (this.choose_another_format()) {\n\t\t\t\t// And a more appropriate phone number format\n\t\t\t\t// has been chosen for these `leading digits`,\n\t\t\t\t// then format the national phone number (so far)\n\t\t\t\t// using the newly selected phone number pattern.\n\n\t\t\t\t// Will return `undefined` if it couldn't format\n\t\t\t\t// the supplied national number\n\t\t\t\t// using the selected phone number pattern.\n\n\t\t\t\treturn this.reformat_national_number();\n\t\t\t}\n\n\t\t\t// If could format the next (current) digit\n\t\t\t// using the previously chosen phone number format\n\t\t\t// then return the formatted number so far.\n\n\t\t\t// If no new phone number format could be chosen,\n\t\t\t// and couldn't format the supplied national number\n\t\t\t// using the selected phone number pattern,\n\t\t\t// then it will return `undefined`.\n\n\t\t\treturn national_number_formatted_with_previous_format;\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset() {\n\t\t\t// Input stripped of non-phone-number characters.\n\t\t\t// Can only contain a possible leading '+' sign and digits.\n\t\t\tthis.parsed_input = '';\n\n\t\t\tthis.current_output = '';\n\n\t\t\t// This contains the national prefix that has been extracted. It contains only\n\t\t\t// digits without formatting.\n\t\t\tthis.national_prefix = '';\n\n\t\t\tthis.national_number = '';\n\n\t\t\tthis.reset_countriness();\n\n\t\t\tthis.reset_format();\n\n\t\t\t// this.valid = false\n\n\t\t\treturn this;\n\t\t}\n\t}, {\n\t\tkey: 'reset_country',\n\t\tvalue: function reset_country() {\n\t\t\tif (this.is_international()) {\n\t\t\t\tthis.country = undefined;\n\t\t\t} else {\n\t\t\t\tthis.country = this.default_country;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_countriness',\n\t\tvalue: function reset_countriness() {\n\t\t\tthis.reset_country();\n\n\t\t\tif (this.default_country && !this.is_international()) {\n\t\t\t\tthis.metadata.country(this.default_country);\n\t\t\t\tthis.countryCallingCode = this.metadata.countryCallingCode();\n\n\t\t\t\tthis.initialize_phone_number_formats_for_this_country_calling_code();\n\t\t\t} else {\n\t\t\t\tthis.metadata.country(undefined);\n\t\t\t\tthis.countryCallingCode = undefined;\n\n\t\t\t\tthis.available_formats = [];\n\t\t\t\tthis.matching_formats = this.available_formats;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'reset_format',\n\t\tvalue: function reset_format() {\n\t\t\tthis.chosen_format = undefined;\n\t\t\tthis.template = undefined;\n\t\t\tthis.partially_populated_template = undefined;\n\t\t\tthis.last_match_position = -1;\n\t\t}\n\n\t\t// Format each digit of national phone number (so far)\n\t\t// using the newly selected phone number pattern.\n\n\t}, {\n\t\tkey: 'reformat_national_number',\n\t\tvalue: function reformat_national_number() {\n\t\t\t// Format each digit of national phone number (so far)\n\t\t\t// using the selected phone number pattern.\n\t\t\treturn this.format_next_national_number_digits(this.national_number);\n\t\t}\n\t}, {\n\t\tkey: 'initialize_phone_number_formats_for_this_country_calling_code',\n\t\tvalue: function initialize_phone_number_formats_for_this_country_calling_code() {\n\t\t\t// Get all \""eligible\"" phone number formats for this country\n\t\t\tthis.available_formats = this.metadata.formats().filter(function (format) {\n\t\t\t\treturn ELIGIBLE_FORMAT_PATTERN.test(format.internationalFormat());\n\t\t\t});\n\n\t\t\tthis.matching_formats = this.available_formats;\n\t\t}\n\t}, {\n\t\tkey: 'match_formats_by_leading_digits',\n\t\tvalue: function match_formats_by_leading_digits() {\n\t\t\tvar leading_digits = this.national_number;\n\n\t\t\t// \""leading digits\"" pattern list starts with\n\t\t\t// one of a maximum length of 3 digits,\n\t\t\t// and then with each additional digit\n\t\t\t// a more precise \""leading digits\"" pattern is specified.\n\n\t\t\tvar index_of_leading_digits_pattern = leading_digits.length - MIN_LEADING_DIGITS_LENGTH;\n\n\t\t\tif (index_of_leading_digits_pattern < 0) {\n\t\t\t\tindex_of_leading_digits_pattern = 0;\n\t\t\t}\n\n\t\t\tthis.matching_formats = this.matching_formats.filter(function (format) {\n\t\t\t\tvar leading_digits_pattern_count = format.leadingDigitsPatterns().length;\n\n\t\t\t\t// Keep everything that isn't restricted by leading digits.\n\t\t\t\tif (leading_digits_pattern_count === 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar leading_digits_pattern_index = Math.min(index_of_leading_digits_pattern, leading_digits_pattern_count - 1);\n\t\t\t\tvar leading_digits_pattern = format.leadingDigitsPatterns()[leading_digits_pattern_index];\n\n\t\t\t\t// Brackets are required for `^` to be applied to\n\t\t\t\t// all or-ed (`|`) parts, not just the first one.\n\t\t\t\treturn new RegExp('^(' + leading_digits_pattern + ')').test(leading_digits);\n\t\t\t});\n\n\t\t\t// If there was a phone number format chosen\n\t\t\t// and it no longer holds given the new leading digits then reset it.\n\t\t\t// The test for this `if` condition is marked as:\n\t\t\t// \""Reset a chosen format when it no longer holds given the new leading digits\"".\n\t\t\t// To construct a valid test case for this one can find a country\n\t\t\t// in `PhoneNumberMetadata.xml` yielding one format for 3 `<leadingDigits>`\n\t\t\t// and yielding another format for 4 `<leadingDigits>` (Australia in this case).\n\t\t\tif (this.chosen_format && this.matching_formats.indexOf(this.chosen_format) === -1) {\n\t\t\t\tthis.reset_format();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'should_format',\n\t\tvalue: function should_format() {\n\t\t\t// Start matching any formats at all when the national number\n\t\t\t// entered so far is at least 3 digits long,\n\t\t\t// otherwise format matching would give false negatives\n\t\t\t// like when the digits entered so far are `2`\n\t\t\t// and the leading digits pattern is `21` –\n\t\t\t// it's quite obvious in this case that the format could be the one\n\t\t\t// but due to the absence of further digits it would give false negative.\n\t\t\t//\n\t\t\t// Google could have provided leading digits patterns starting\n\t\t\t// with a single digit but they chose not to (for whatever reasons).\n\t\t\t//\n\t\t\treturn this.national_number >= MIN_LEADING_DIGITS_LENGTH;\n\t\t}\n\n\t\t// Check to see if there is an exact pattern match for these digits. If so, we\n\t\t// should use this instead of any other formatting template whose\n\t\t// `leadingDigitsPattern` also matches the input.\n\n\t}, {\n\t\tkey: 'attempt_to_format_complete_phone_number',\n\t\tvalue: function attempt_to_format_complete_phone_number() {\n\t\t\tfor (var _iterator = this.matching_formats, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\t\t\tvar _ref;\n\n\t\t\t\tif (_isArray) {\n\t\t\t\t\tif (_i >= _iterator.length) break;\n\t\t\t\t\t_ref = _iterator[_i++];\n\t\t\t\t} else {\n\t\t\t\t\t_i = _iterator.next();\n\t\t\t\t\tif (_i.done) break;\n\t\t\t\t\t_ref = _i.value;\n\t\t\t\t}\n\n\t\t\t\tvar format = _ref;\n\n\t\t\t\tvar matcher = new RegExp('^(?:' + format.pattern() + ')$');\n\n\t\t\t\tif (!matcher.test(this.national_number)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!this.is_format_applicable(format)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// To leave the formatter in a consistent state\n\t\t\t\tthis.reset_format();\n\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\tvar formatted_number = format_national_number_using_format(this.national_number, format, this.is_international(), this.national_prefix.length > 0, this.metadata);\n\n\t\t\t\t// Set `this.template` and `this.partially_populated_template`.\n\t\t\t\t//\n\t\t\t\t// `else` case doesn't ever happen\n\t\t\t\t// with the current metadata,\n\t\t\t\t// but just in case.\n\t\t\t\t//\n\t\t\t\t/* istanbul ignore else */\n\t\t\t\tif (this.create_formatting_template(format)) {\n\t\t\t\t\t// Populate `this.partially_populated_template`\n\t\t\t\t\tthis.reformat_national_number();\n\t\t\t\t} else {\n\t\t\t\t\t// Prepend `+CountryCode` in case of an international phone number\n\t\t\t\t\tvar full_number = this.full_phone_number(formatted_number);\n\t\t\t\t\tthis.template = full_number.replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER);\n\t\t\t\t\tthis.partially_populated_template = full_number;\n\t\t\t\t}\n\n\t\t\t\treturn formatted_number;\n\t\t\t}\n\t\t}\n\n\t\t// Prepends `+CountryCode` in case of an international phone number\n\n\t}, {\n\t\tkey: 'full_phone_number',\n\t\tvalue: function full_phone_number(formatted_national_number) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn '+' + this.countryCallingCode + ' ' + formatted_national_number;\n\t\t\t}\n\n\t\t\treturn formatted_national_number;\n\t\t}\n\n\t\t// Extracts the country calling code from the beginning\n\t\t// of the entered `national_number` (so far),\n\t\t// and places the remaining input into the `national_number`.\n\n\t}, {\n\t\tkey: 'extract_country_calling_code',\n\t\tvalue: function extract_country_calling_code() {\n\t\t\tvar _extractCountryCallin = extractCountryCallingCode(this.parsed_input, this.default_country, this.metadata),\n\t\t\t    countryCallingCode = _extractCountryCallin.countryCallingCode,\n\t\t\t    number = _extractCountryCallin.number;\n\n\t\t\tif (!countryCallingCode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.countryCallingCode = countryCallingCode;\n\n\t\t\t// Sometimes people erroneously write national prefix\n\t\t\t// as part of an international number, e.g. +44 (0) ....\n\t\t\t// This violates the standards for international phone numbers,\n\t\t\t// so \""As You Type\"" formatter assumes no national prefix\n\t\t\t// when parsing a phone number starting from `+`.\n\t\t\t// Even if it did attempt to filter-out that national prefix\n\t\t\t// it would look weird for a user trying to enter a digit\n\t\t\t// because from user's perspective the keyboard \""wouldn't be working\"".\n\t\t\tthis.national_number = number;\n\n\t\t\tthis.metadata.chooseCountryByCountryCallingCode(countryCallingCode);\n\t\t\treturn this.metadata.selectedCountry() !== undefined;\n\t\t}\n\t}, {\n\t\tkey: 'extract_national_prefix',\n\t\tvalue: function extract_national_prefix() {\n\t\t\tthis.national_prefix = '';\n\n\t\t\tif (!this.metadata.selectedCountry()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only strip national prefixes for non-international phone numbers\n\t\t\t// because national prefixes can't be present in international phone numbers.\n\t\t\t// Otherwise, while forgiving, it would parse a NANPA number `+1 1877 215 5230`\n\t\t\t// first to `1877 215 5230` and then, stripping the leading `1`, to `877 215 5230`,\n\t\t\t// and then it would assume that's a valid number which it isn't.\n\t\t\t// So no forgiveness for grandmas here.\n\t\t\t// The issue asking for this fix:\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/159\n\n\t\t\tvar _strip_national_prefi = strip_national_prefix_and_carrier_code(this.national_number, this.metadata),\n\t\t\t    potential_national_number = _strip_national_prefi.number;\n\n\t\t\t// We require that the NSN remaining after stripping the national prefix and\n\t\t\t// carrier code be long enough to be a possible length for the region.\n\t\t\t// Otherwise, we don't do the stripping, since the original number could be\n\t\t\t// a valid short number.\n\n\n\t\t\tif (!this.metadata.possibleLengths() || this.is_possible_number(this.national_number) && !this.is_possible_number(potential_national_number)) {\n\t\t\t\t// Verify the parsed national (significant) number for this country\n\t\t\t\tvar national_number_rule = new RegExp(this.metadata.nationalNumberPattern());\n\t\t\t\t//\n\t\t\t\t// If the original number (before stripping national prefix) was viable,\n\t\t\t\t// and the resultant number is not, then prefer the original phone number.\n\t\t\t\t// This is because for some countries (e.g. Russia) the same digit could be both\n\t\t\t\t// a national prefix and a leading digit of a valid national phone number,\n\t\t\t\t// like `8` is the national prefix for Russia and both\n\t\t\t\t// `8 800 555 35 35` and `800 555 35 35` are valid numbers.\n\t\t\t\tif (matches_entirely(this.national_number, national_number_rule) && !matches_entirely(potential_national_number, national_number_rule)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.national_prefix = this.national_number.slice(0, this.national_number.length - potential_national_number.length);\n\t\t\tthis.national_number = potential_national_number;\n\n\t\t\treturn this.national_prefix;\n\t\t}\n\t}, {\n\t\tkey: 'is_possible_number',\n\t\tvalue: function is_possible_number(number) {\n\t\t\tvar validation_result = check_number_length_for_type(number, undefined, this.metadata);\n\t\t\tswitch (validation_result) {\n\t\t\t\tcase 'IS_POSSIBLE':\n\t\t\t\t\treturn true;\n\t\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\n\t\t\t\t// \treturn !this.is_international()\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'choose_another_format',\n\t\tvalue: function choose_another_format() {\n\t\t\t// When there are multiple available formats, the formatter uses the first\n\t\t\t// format where a formatting template could be created.\n\t\t\tfor (var _iterator2 = this.matching_formats, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n\t\t\t\tvar _ref2;\n\n\t\t\t\tif (_isArray2) {\n\t\t\t\t\tif (_i2 >= _iterator2.length) break;\n\t\t\t\t\t_ref2 = _iterator2[_i2++];\n\t\t\t\t} else {\n\t\t\t\t\t_i2 = _iterator2.next();\n\t\t\t\t\tif (_i2.done) break;\n\t\t\t\t\t_ref2 = _i2.value;\n\t\t\t\t}\n\n\t\t\t\tvar format = _ref2;\n\n\t\t\t\t// If this format is currently being used\n\t\t\t\t// and is still possible, then stick to it.\n\t\t\t\tif (this.chosen_format === format) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If this `format` is suitable for \""as you type\"",\n\t\t\t\t// then extract the template from this format\n\t\t\t\t// and use it to format the phone number being input.\n\n\t\t\t\tif (!this.is_format_applicable(format)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!this.create_formatting_template(format)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.chosen_format = format;\n\n\t\t\t\t// With a new formatting template, the matched position\n\t\t\t\t// using the old template needs to be reset.\n\t\t\t\tthis.last_match_position = -1;\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// No format matches the phone number,\n\t\t\t// therefore set `country` to `undefined`\n\t\t\t// (or to the default country).\n\t\t\tthis.reset_country();\n\n\t\t\t// No format matches the national phone number entered\n\t\t\tthis.reset_format();\n\t\t}\n\t}, {\n\t\tkey: 'is_format_applicable',\n\t\tvalue: function is_format_applicable(format) {\n\t\t\t// If national prefix is mandatory for this phone number format\n\t\t\t// and the user didn't input the national prefix,\n\t\t\t// then this phone number format isn't suitable.\n\t\t\tif (!this.is_international() && !this.national_prefix && format.nationalPrefixIsMandatoryWhenFormatting()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t}, {\n\t\tkey: 'create_formatting_template',\n\t\tvalue: function create_formatting_template(format) {\n\t\t\t// The formatter doesn't format numbers when numberPattern contains '|', e.g.\n\t\t\t// (20|3)\\d{4}. In those cases we quickly return.\n\t\t\t// (Though there's no such format in current metadata)\n\t\t\t/* istanbul ignore if */\n\t\t\tif (format.pattern().indexOf('|') >= 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get formatting template for this phone number format\n\t\t\tvar template = this.get_template_for_phone_number_format_pattern(format);\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (!template) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This one is for national number only\n\t\t\tthis.partially_populated_template = template;\n\n\t\t\t// For convenience, the public `.template` property\n\t\t\t// contains the whole international number\n\t\t\t// if the phone number being input is international:\n\t\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\n\t\t\t// a spacebar and then the template for the formatted national number.\n\t\t\tif (this.is_international()) {\n\t\t\t\tthis.template = DIGIT_PLACEHOLDER + repeat(DIGIT_PLACEHOLDER, this.countryCallingCode.length) + ' ' + template;\n\t\t\t}\n\t\t\t// For local numbers, replace national prefix\n\t\t\t// with a digit placeholder.\n\t\t\telse {\n\t\t\t\t\tthis.template = template.replace(/\\d/g, DIGIT_PLACEHOLDER);\n\t\t\t\t}\n\n\t\t\t// This one is for the full phone number\n\t\t\treturn this.template;\n\t\t}\n\n\t\t// Generates formatting template for a phone number format\n\n\t}, {\n\t\tkey: 'get_template_for_phone_number_format_pattern',\n\t\tvalue: function get_template_for_phone_number_format_pattern(format) {\n\t\t\t// A very smart trick by the guys at Google\n\t\t\tvar number_pattern = format.pattern()\n\t\t\t// Replace anything in the form of [..] with \\d\n\t\t\t.replace(CHARACTER_CLASS_PATTERN, '\\\\d')\n\t\t\t// Replace any standalone digit (not the one in `{}`) with \\d\n\t\t\t.replace(STANDALONE_DIGIT_PATTERN, '\\\\d');\n\n\t\t\t// This match will always succeed,\n\t\t\t// because the \""longest dummy phone number\""\n\t\t\t// has enough length to accomodate any possible\n\t\t\t// national phone number format pattern.\n\t\t\tvar dummy_phone_number_matching_format_pattern = LONGEST_DUMMY_PHONE_NUMBER.match(number_pattern)[0];\n\n\t\t\t// If the national number entered is too long\n\t\t\t// for any phone number format, then abort.\n\t\t\tif (this.national_number.length > dummy_phone_number_matching_format_pattern.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Prepare the phone number format\n\t\t\tvar number_format = this.get_format_format(format);\n\n\t\t\t// Get a formatting template which can be used to efficiently format\n\t\t\t// a partial number where digits are added one by one.\n\n\t\t\t// Below `strict_pattern` is used for the\n\t\t\t// regular expression (with `^` and `$`).\n\t\t\t// This wasn't originally in Google's `libphonenumber`\n\t\t\t// and I guess they don't really need it\n\t\t\t// because they're not using \""templates\"" to format phone numbers\n\t\t\t// but I added `strict_pattern` after encountering\n\t\t\t// South Korean phone number formatting bug.\n\t\t\t//\n\t\t\t// Non-strict regular expression bug demonstration:\n\t\t\t//\n\t\t\t// this.national_number : `111111111` (9 digits)\n\t\t\t//\n\t\t\t// number_pattern : (\\d{2})(\\d{3,4})(\\d{4})\n\t\t\t// number_format : `$1 $2 $3`\n\t\t\t// dummy_phone_number_matching_format_pattern : `9999999999` (10 digits)\n\t\t\t//\n\t\t\t// '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \""99 9999 9999\""\n\t\t\t//\n\t\t\t// template : xx xxxx xxxx\n\t\t\t//\n\t\t\t// But the correct template in this case is `xx xxx xxxx`.\n\t\t\t// The template was generated incorrectly because of the\n\t\t\t// `{3,4}` variability in the `number_pattern`.\n\t\t\t//\n\t\t\t// The fix is, if `this.national_number` has already sufficient length\n\t\t\t// to satisfy the `number_pattern` completely then `this.national_number` is used\n\t\t\t// instead of `dummy_phone_number_matching_format_pattern`.\n\n\t\t\tvar strict_pattern = new RegExp('^' + number_pattern + '$');\n\t\t\tvar national_number_dummy_digits = this.national_number.replace(/\\d/g, DUMMY_DIGIT);\n\n\t\t\t// If `this.national_number` has already sufficient length\n\t\t\t// to satisfy the `number_pattern` completely then use it\n\t\t\t// instead of `dummy_phone_number_matching_format_pattern`.\n\t\t\tif (strict_pattern.test(national_number_dummy_digits)) {\n\t\t\t\tdummy_phone_number_matching_format_pattern = national_number_dummy_digits;\n\t\t\t}\n\n\t\t\t// Generate formatting template for this phone number format\n\t\t\treturn dummy_phone_number_matching_format_pattern\n\t\t\t// Format the dummy phone number according to the format\n\t\t\t.replace(new RegExp(number_pattern), number_format)\n\t\t\t// Replace each dummy digit with a DIGIT_PLACEHOLDER\n\t\t\t.replace(DUMMY_DIGIT_MATCHER, DIGIT_PLACEHOLDER);\n\t\t}\n\t}, {\n\t\tkey: 'format_next_national_number_digits',\n\t\tvalue: function format_next_national_number_digits(digits) {\n\t\t\t// Using `.split('')` to iterate through a string here\n\t\t\t// to avoid requiring `Symbol.iterator` polyfill.\n\t\t\t// `.split('')` is generally not safe for Unicode,\n\t\t\t// but in this particular case for `digits` it is safe.\n\t\t\t// for (const digit of digits)\n\t\t\tfor (var _iterator3 = digits.split(''), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n\t\t\t\tvar _ref3;\n\n\t\t\t\tif (_isArray3) {\n\t\t\t\t\tif (_i3 >= _iterator3.length) break;\n\t\t\t\t\t_ref3 = _iterator3[_i3++];\n\t\t\t\t} else {\n\t\t\t\t\t_i3 = _iterator3.next();\n\t\t\t\t\tif (_i3.done) break;\n\t\t\t\t\t_ref3 = _i3.value;\n\t\t\t\t}\n\n\t\t\t\tvar digit = _ref3;\n\n\t\t\t\t// If there is room for more digits in current `template`,\n\t\t\t\t// then set the next digit in the `template`,\n\t\t\t\t// and return the formatted digits so far.\n\n\t\t\t\t// If more digits are entered than the current format could handle\n\t\t\t\tif (this.partially_populated_template.slice(this.last_match_position + 1).search(DIGIT_PLACEHOLDER_MATCHER) === -1) {\n\t\t\t\t\t// Reset the current format,\n\t\t\t\t\t// so that the new format will be chosen\n\t\t\t\t\t// in a subsequent `this.choose_another_format()` call\n\t\t\t\t\t// later in code.\n\t\t\t\t\tthis.chosen_format = undefined;\n\t\t\t\t\tthis.template = undefined;\n\t\t\t\t\tthis.partially_populated_template = undefined;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.last_match_position = this.partially_populated_template.search(DIGIT_PLACEHOLDER_MATCHER);\n\t\t\t\tthis.partially_populated_template = this.partially_populated_template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n\t\t\t}\n\n\t\t\t// Return the formatted phone number so far\n\t\t\treturn close_dangling_braces(this.partially_populated_template, this.last_match_position + 1).replace(DIGIT_PLACEHOLDER_MATCHER_GLOBAL, ' ');\n\t\t}\n\t}, {\n\t\tkey: 'is_international',\n\t\tvalue: function is_international() {\n\t\t\treturn this.parsed_input && this.parsed_input[0] === '+';\n\t\t}\n\t}, {\n\t\tkey: 'get_format_format',\n\t\tvalue: function get_format_format(format) {\n\t\t\tif (this.is_international()) {\n\t\t\t\treturn local_to_international_style(format.internationalFormat());\n\t\t\t}\n\n\t\t\t// If national prefix formatting rule is set\n\t\t\t// for this phone number format\n\t\t\tif (format.nationalPrefixFormattingRule()) {\n\t\t\t\t// If the user did input the national prefix\n\t\t\t\t// (or if the national prefix formatting rule does not require national prefix)\n\t\t\t\t// then maybe make it part of the phone number template\n\t\t\t\tif (this.national_prefix || !format.usesNationalPrefix()) {\n\t\t\t\t\t// Make the national prefix part of the phone number template\n\t\t\t\t\treturn format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn format.format();\n\t\t}\n\n\t\t// Determines the country of the phone number\n\t\t// entered so far based on the country phone code\n\t\t// and the national phone number.\n\n\t}, {\n\t\tkey: 'determine_the_country',\n\t\tvalue: function determine_the_country() {\n\t\t\tthis.country = find_country_code(this.countryCallingCode, this.national_number, this.metadata);\n\t\t}\n\t}, {\n\t\tkey: 'getNationalNumber',\n\t\tvalue: function getNationalNumber() {\n\t\t\treturn this.national_number;\n\t\t}\n\t}]);\n\n\treturn AsYouType;\n}();\n\nexport default AsYouType;\n\n\nexport function close_dangling_braces(template, cut_before) {\n\tvar retained_template = template.slice(0, cut_before);\n\n\tvar opening_braces = count_occurences('(', retained_template);\n\tvar closing_braces = count_occurences(')', retained_template);\n\n\tvar dangling_braces = opening_braces - closing_braces;\n\n\twhile (dangling_braces > 0 && cut_before < template.length) {\n\t\tif (template[cut_before] === ')') {\n\t\t\tdangling_braces--;\n\t\t}\n\t\tcut_before++;\n\t}\n\n\treturn template.slice(0, cut_before);\n}\n\n// Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\nexport function count_occurences(symbol, string) {\n\tvar count = 0;\n\n\t// Using `.split('')` to iterate through a string here\n\t// to avoid requiring `Symbol.iterator` polyfill.\n\t// `.split('')` is generally not safe for Unicode,\n\t// but in this particular case for counting brackets it is safe.\n\t// for (const character of string)\n\tfor (var _iterator4 = string.split(''), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n\t\tvar _ref4;\n\n\t\tif (_isArray4) {\n\t\t\tif (_i4 >= _iterator4.length) break;\n\t\t\t_ref4 = _iterator4[_i4++];\n\t\t} else {\n\t\t\t_i4 = _iterator4.next();\n\t\t\tif (_i4.done) break;\n\t\t\t_ref4 = _i4.value;\n\t\t}\n\n\t\tvar character = _ref4;\n\n\t\tif (character === symbol) {\n\t\t\tcount++;\n\t\t}\n\t}\n\n\treturn count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nexport function repeat(string, times) {\n\tif (times < 1) {\n\t\treturn '';\n\t}\n\n\tvar result = '';\n\n\twhile (times > 1) {\n\t\tif (times & 1) {\n\t\t\tresult += string;\n\t\t}\n\n\t\ttimes >>= 1;\n\t\tstring += string;\n\t}\n\n\treturn result + string;\n}\n//# sourceMappingURL=AsYouType.js.map"",""// Javascript doesn't support UTF-8 regular expressions.\n// So mimicking them here.\n\n// Copy-pasted from `PhoneNumberMatcher.js`.\n\n/**\r\n * \""\\p{Z}\"" is any kind of whitespace or invisible separator (\""Separator\"").\r\n * http://www.regular-expressions.info/unicode.html\r\n * \""\\P{Z}\"" is the reverse of \""\\p{Z}\"".\r\n * \""\\p{N}\"" is any kind of numeric character in any script (\""Number\"").\r\n * \""\\p{Nd}\"" is a digit zero through nine in any script except \""ideographic scripts\"" (\""Decimal_Digit_Number\"").\r\n * \""\\p{Sc}\"" is a currency symbol (\""Currency_Symbol\"").\r\n * \""\\p{L}\"" is any kind of letter from any language (\""Letter\"").\r\n * \""\\p{Mn}\"" is \""non-spacing mark\"".\r\n *\r\n * Javascript doesn't support Unicode Regular Expressions\r\n * so substituting it with this explicit set of characters.\r\n *\r\n * https://stackoverflow.com/questions/13210194/javascript-regex-equivalent-of-a-za-z-using-pl\r\n * https://github.com/danielberndt/babel-plugin-utf-8-regex/blob/master/src/transformer.js\r\n */\n\nvar _pZ = ' \\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000';\nexport var pZ = '[' + _pZ + ']';\nexport var PZ = '[^' + _pZ + ']';\n\nexport var _pN = '0-9\\xB2\\xB3\\xB9\\xBC-\\xBE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D66-\\u0D75\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19';\n// const pN = `[${_pN}]`\n\nvar _pNd = '0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19';\nexport var pNd = '[' + _pNd + ']';\n\nexport var _pL = 'A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC';\nvar pL = '[' + _pL + ']';\nvar pL_regexp = new RegExp(pL);\n\nvar _pSc = '$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20B9\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6';\nvar pSc = '[' + _pSc + ']';\nvar pSc_regexp = new RegExp(pSc);\n\nvar _pMn = '\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u08FE\\u0900-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1BAB\\u1BE6\\u1BE8\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1DC0-\\u1DE6\\u1DFC-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099\\u309A\\uA66F\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEC\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26';\nvar pMn = '[' + _pMn + ']';\nvar pMn_regexp = new RegExp(pMn);\n\nvar _InBasic_Latin = '\\0-\\x7F';\nvar _InLatin_1_Supplement = '\\x80-\\xFF';\nvar _InLatin_Extended_A = '\\u0100-\\u017F';\nvar _InLatin_Extended_Additional = '\\u1E00-\\u1EFF';\nvar _InLatin_Extended_B = '\\u0180-\\u024F';\nvar _InCombining_Diacritical_Marks = '\\u0300-\\u036F';\n\nvar latinLetterRegexp = new RegExp('[' + _InBasic_Latin + _InLatin_1_Supplement + _InLatin_Extended_A + _InLatin_Extended_Additional + _InLatin_Extended_B + _InCombining_Diacritical_Marks + ']');\n\n/**\r\n * Helper method to determine if a character is a Latin-script letter or not.\r\n * For our purposes, combining marks should also return true since we assume\r\n * they have been added to a preceding Latin character.\r\n */\nexport function isLatinLetter(letter) {\n  // Combining marks are a subset of non-spacing-mark.\n  if (!pL_regexp.test(letter) && !pMn_regexp.test(letter)) {\n    return false;\n  }\n\n  return latinLetterRegexp.test(letter);\n}\n\nexport function isInvalidPunctuationSymbol(character) {\n  return character === '%' || pSc_regexp.test(character);\n}\n//# sourceMappingURL=utf-8.js.map"",""// Copy-pasted from `PhoneNumberMatcher.js`.\n\nimport { PLUS_CHARS } from '../common';\n\nimport { limit } from './util';\n\nimport { isLatinLetter, isInvalidPunctuationSymbol } from './utf-8';\n\nvar OPENING_PARENS = '(\\\\[\\uFF08\\uFF3B';\nvar CLOSING_PARENS = ')\\\\]\\uFF09\\uFF3D';\nvar NON_PARENS = '[^' + OPENING_PARENS + CLOSING_PARENS + ']';\n\nexport var LEAD_CLASS = '[' + OPENING_PARENS + PLUS_CHARS + ']';\n\n// Punctuation that may be at the start of a phone number - brackets and plus signs.\nvar LEAD_CLASS_LEADING = new RegExp('^' + LEAD_CLASS);\n\n// Limit on the number of pairs of brackets in a phone number.\nvar BRACKET_PAIR_LIMIT = limit(0, 3);\n\n/**\r\n * Pattern to check that brackets match. Opening brackets should be closed within a phone number.\r\n * This also checks that there is something inside the brackets. Having no brackets at all is also\r\n * fine.\r\n *\r\n * An opening bracket at the beginning may not be closed, but subsequent ones should be.  It's\r\n * also possible that the leading bracket was dropped, so we shouldn't be surprised if we see a\r\n * closing bracket first. We limit the sets of brackets in a phone number to four.\r\n */\nvar MATCHING_BRACKETS_ENTIRE = new RegExp('^' + \""(?:[\"" + OPENING_PARENS + \""])?\"" + \""(?:\"" + NON_PARENS + \""+\"" + \""[\"" + CLOSING_PARENS + \""])?\"" + NON_PARENS + \""+\"" + \""(?:[\"" + OPENING_PARENS + \""]\"" + NON_PARENS + \""+[\"" + CLOSING_PARENS + \""])\"" + BRACKET_PAIR_LIMIT + NON_PARENS + \""*\"" + '$');\n\n/**\r\n * Matches strings that look like publication pages. Example:\r\n * <pre>Computing Complete Answers to Queries in the Presence of Limited Access Patterns.\r\n * Chen Li. VLDB J. 12(3): 211-227 (2003).</pre>\r\n *\r\n * The string \""211-227 (2003)\"" is not a telephone number.\r\n */\nvar PUB_PAGES = /\\d{1,5}-+\\d{1,5}\\s{0,4}\\(\\d{1,4}/;\n\nexport default function isValidCandidate(candidate, offset, text, leniency) {\n\t// Check the candidate doesn't contain any formatting\n\t// which would indicate that it really isn't a phone number.\n\tif (!MATCHING_BRACKETS_ENTIRE.test(candidate) || PUB_PAGES.test(candidate)) {\n\t\treturn;\n\t}\n\n\t// If leniency is set to VALID or stricter, we also want to skip numbers that are surrounded\n\t// by Latin alphabetic characters, to skip cases like abc8005001234 or 8005001234def.\n\tif (leniency !== 'POSSIBLE') {\n\t\t// If the candidate is not at the start of the text,\n\t\t// and does not start with phone-number punctuation,\n\t\t// check the previous character.\n\t\tif (offset > 0 && !LEAD_CLASS_LEADING.test(candidate)) {\n\t\t\tvar previousChar = text[offset - 1];\n\t\t\t// We return null if it is a latin letter or an invalid punctuation symbol.\n\t\t\tif (isInvalidPunctuationSymbol(previousChar) || isLatinLetter(previousChar)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar lastCharIndex = offset + candidate.length;\n\t\tif (lastCharIndex < text.length) {\n\t\t\tvar nextChar = text[lastCharIndex];\n\t\t\tif (isInvalidPunctuationSymbol(nextChar) || isLatinLetter(nextChar)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n//# sourceMappingURL=isValidCandidate.js.map"",""// Matches strings that look like dates using \""/\"" as a separator.\n// Examples: 3/10/2011, 31/10/96 or 08/31/95.\nvar SLASH_SEPARATED_DATES = /(?:(?:[0-3]?\\d\\/[01]?\\d)|(?:[01]?\\d\\/[0-3]?\\d))\\/(?:[12]\\d)?\\d{2}/;\n\n// Matches timestamps.\n// Examples: \""2012-01-02 08:00\"".\n// Note that the reg-ex does not include the\n// trailing \"":\\d\\d\"" -- that is covered by TIME_STAMPS_SUFFIX.\nvar TIME_STAMPS = /[12]\\d{3}[-/]?[01]\\d[-/]?[0-3]\\d +[0-2]\\d$/;\nvar TIME_STAMPS_SUFFIX_LEADING = /^:[0-5]\\d/;\n\nexport default function isValidPreCandidate(candidate, offset, text) {\n\t// Skip a match that is more likely to be a date.\n\tif (SLASH_SEPARATED_DATES.test(candidate)) {\n\t\treturn false;\n\t}\n\n\t// Skip potential time-stamps.\n\tif (TIME_STAMPS.test(candidate)) {\n\t\tvar followingText = text.slice(offset + candidate.length);\n\t\tif (TIME_STAMPS_SUFFIX_LEADING.test(followingText)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n//# sourceMappingURL=isValidPreCandidate.js.map"",""import { trimAfterFirstMatch } from './util';\n\n// Regular expression of characters typically used to start a second phone number for the purposes\n// of parsing. This allows us to strip off parts of the number that are actually the start of\n// another number, such as for: (530) 583-6985 x302/x2303 -> the second extension here makes this\n// actually two phone numbers, (530) 583-6985 x302 and (530) 583-6985 x2303. We remove the second\n// extension so that the first number is parsed correctly.\n//\n// Matches a slash (\\ or /) followed by a space followed by an `x`.\n//\nvar SECOND_NUMBER_START_PATTERN = /[\\\\/] *x/;\n\nexport default function parsePreCandidate(candidate) {\n\t// Check for extra numbers at the end.\n\t// TODO: This is the place to start when trying to support extraction of multiple phone number\n\t// from split notations (+41 79 123 45 67 / 68).\n\treturn trimAfterFirstMatch(SECOND_NUMBER_START_PATTERN, candidate);\n}\n//# sourceMappingURL=parsePreCandidate.js.map"",""var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\""value\"" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\""Cannot call a class as a function\""); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport parse from './parse';\nimport Metadata from './metadata';\n\nimport { PLUS_CHARS, VALID_PUNCTUATION, VALID_DIGITS,\n// OPENING_BRACKETS,\nWHITESPACE, create_extension_pattern } from './common';\n\nimport parsePreCandidate from './findNumbers/parsePreCandidate';\nimport isValidPreCandidate from './findNumbers/isValidPreCandidate';\nimport isValidCandidate from './findNumbers/isValidCandidate';\n\n// Copy-pasted from `./parse.js`.\nvar VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\nvar EXTN_PATTERNS_FOR_PARSING = create_extension_pattern('parsing');\n\nvar WHITESPACE_IN_THE_BEGINNING_PATTERN = new RegExp('^[' + WHITESPACE + ']+');\nvar WHITESPACE_IN_THE_END_PATTERN = new RegExp('[' + WHITESPACE + ']+$');\n\n// // Regular expression for getting opening brackets for a valid number\n// // found using `PHONE_NUMBER_START_PATTERN` for prepending those brackets to the number.\n// const BEFORE_NUMBER_DIGITS_PUNCTUATION = new RegExp('[' + OPENING_BRACKETS + ']+' + '[' + WHITESPACE + ']*' + '$')\n\nvar VALID_PRECEDING_CHARACTER_PATTERN = /[^a-zA-Z0-9]/;\n\nexport default function findPhoneNumbers(arg_1, arg_2, arg_3, arg_4) {\n\tvar _sort_out_arguments = sort_out_arguments(arg_1, arg_2, arg_3, arg_4),\n\t    text = _sort_out_arguments.text,\n\t    options = _sort_out_arguments.options,\n\t    metadata = _sort_out_arguments.metadata;\n\n\tvar search = new PhoneNumberSearch(text, options, metadata.metadata);\n\n\tvar phones = [];\n\n\twhile (search.hasNext()) {\n\t\tphones.push(search.next());\n\t}\n\n\treturn phones;\n}\n\n/**\r\n * @return ES6 `for ... of` iterator.\r\n */\nexport function searchPhoneNumbers(arg_1, arg_2, arg_3, arg_4) {\n\tvar _sort_out_arguments2 = sort_out_arguments(arg_1, arg_2, arg_3, arg_4),\n\t    text = _sort_out_arguments2.text,\n\t    options = _sort_out_arguments2.options,\n\t    metadata = _sort_out_arguments2.metadata;\n\n\tvar search = new PhoneNumberSearch(text, options, metadata.metadata);\n\n\treturn _defineProperty({}, Symbol.iterator, function () {\n\t\treturn {\n\t\t\tnext: function next() {\n\t\t\t\tif (search.hasNext()) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: search.next()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdone: true\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t});\n}\n\n/**\r\n * Extracts a parseable phone number including any opening brackets, etc.\r\n * @param  {string} text - Input.\r\n * @return {object} `{ ?number, ?startsAt, ?endsAt }`.\r\n */\nexport var PhoneNumberSearch = function () {\n\tfunction PhoneNumberSearch(text) {\n\t\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tvar metadata = arguments[2];\n\n\t\t_classCallCheck(this, PhoneNumberSearch);\n\n\t\tthis.state = 'NOT_READY';\n\n\t\tthis.text = text;\n\t\tthis.options = options;\n\t\tthis.metadata = metadata;\n\n\t\tthis.regexp = new RegExp(VALID_PHONE_NUMBER +\n\t\t// Phone number extensions\n\t\t'(?:' + EXTN_PATTERNS_FOR_PARSING + ')?', 'ig');\n\n\t\t// this.searching_from = 0\n\t}\n\t// Iteration tristate.\n\n\n\t_createClass(PhoneNumberSearch, [{\n\t\tkey: 'find',\n\t\tvalue: function find() {\n\t\t\tvar matches = this.regexp.exec(this.text);\n\n\t\t\tif (!matches) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar number = matches[0];\n\t\t\tvar startsAt = matches.index;\n\n\t\t\tnumber = number.replace(WHITESPACE_IN_THE_BEGINNING_PATTERN, '');\n\t\t\tstartsAt += matches[0].length - number.length;\n\t\t\tnumber = number.replace(WHITESPACE_IN_THE_END_PATTERN, '');\n\n\t\t\tnumber = parsePreCandidate(number);\n\n\t\t\tvar result = this.parseCandidate(number, startsAt);\n\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// Tail recursion.\n\t\t\t// Try the next one if this one is not a valid phone number.\n\t\t\treturn this.find();\n\t\t}\n\t}, {\n\t\tkey: 'parseCandidate',\n\t\tvalue: function parseCandidate(number, startsAt) {\n\t\t\tif (!isValidPreCandidate(number, startsAt, this.text)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't parse phone numbers which are non-phone numbers\n\t\t\t// due to being part of something else (e.g. a UUID).\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/213\n\t\t\t// Copy-pasted from Google's `PhoneNumberMatcher.js` (`.parseAndValidate()`).\n\t\t\tif (!isValidCandidate(number, startsAt, this.text, this.options.extended ? 'POSSIBLE' : 'VALID')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// // Prepend any opening brackets left behind by the\n\t\t\t// // `PHONE_NUMBER_START_PATTERN` regexp.\n\t\t\t// const text_before_number = text.slice(this.searching_from, startsAt)\n\t\t\t// const full_number_starts_at = text_before_number.search(BEFORE_NUMBER_DIGITS_PUNCTUATION)\n\t\t\t// if (full_number_starts_at >= 0)\n\t\t\t// {\n\t\t\t// \tnumber   = text_before_number.slice(full_number_starts_at) + number\n\t\t\t// \tstartsAt = full_number_starts_at\n\t\t\t// }\n\t\t\t//\n\t\t\t// this.searching_from = matches.lastIndex\n\n\t\t\tvar result = parse(number, this.options, this.metadata);\n\n\t\t\tif (!result.phone) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresult.startsAt = startsAt;\n\t\t\tresult.endsAt = startsAt + number.length;\n\n\t\t\treturn result;\n\t\t}\n\t}, {\n\t\tkey: 'hasNext',\n\t\tvalue: function hasNext() {\n\t\t\tif (this.state === 'NOT_READY') {\n\t\t\t\tthis.last_match = this.find();\n\n\t\t\t\tif (this.last_match) {\n\t\t\t\t\tthis.state = 'READY';\n\t\t\t\t} else {\n\t\t\t\t\tthis.state = 'DONE';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.state === 'READY';\n\t\t}\n\t}, {\n\t\tkey: 'next',\n\t\tvalue: function next() {\n\t\t\t// Check the state and find the next match as a side-effect if necessary.\n\t\t\tif (!this.hasNext()) {\n\t\t\t\tthrow new Error('No next element');\n\t\t\t}\n\n\t\t\t// Don't retain that memory any longer than necessary.\n\t\t\tvar result = this.last_match;\n\t\t\tthis.last_match = null;\n\t\t\tthis.state = 'NOT_READY';\n\t\t\treturn result;\n\t\t}\n\t}]);\n\n\treturn PhoneNumberSearch;\n}();\n\nexport function sort_out_arguments(arg_1, arg_2, arg_3, arg_4) {\n\tvar text = void 0;\n\tvar options = void 0;\n\tvar metadata = void 0;\n\n\t// If the phone number is passed as a string.\n\t// `parse('88005553535', ...)`.\n\tif (typeof arg_1 === 'string') {\n\t\ttext = arg_1;\n\t} else throw new TypeError('A text for parsing must be a string.');\n\n\t// If \""default country\"" argument is being passed\n\t// then move it to `options`.\n\t// `findNumbers('88005553535', 'RU', [options], metadata)`.\n\tif (typeof arg_2 === 'string') {\n\t\tif (arg_4) {\n\t\t\toptions = _extends({ defaultCountry: arg_2 }, arg_3);\n\t\t\tmetadata = arg_4;\n\t\t} else {\n\t\t\toptions = { defaultCountry: arg_2 };\n\t\t\tmetadata = arg_3;\n\t\t}\n\t}\n\t// No \""default country\"" argument is being passed.\n\t// Only international phone numbers are passed.\n\t// `findNumbers('+78005553535', [options], metadata)`.\n\telse {\n\t\t\tif (arg_3) {\n\t\t\t\toptions = arg_2;\n\t\t\t\tmetadata = arg_3;\n\t\t\t} else {\n\t\t\t\tmetadata = arg_2;\n\t\t\t}\n\t\t}\n\n\tif (!options) {\n\t\toptions = {};\n\t}\n\n\t// // Apply default options.\n\t// if (options)\n\t// {\n\t// \toptions = { ...default_options, ...options }\n\t// }\n\t// else\n\t// {\n\t// \toptions = default_options\n\t// }\n\n\treturn { text: text, options: options, metadata: new Metadata(metadata) };\n}\n//# sourceMappingURL=findPhoneNumbers.js.map"",""module.exports = function cmp (a, b) {\n    var pa = a.split('.');\n    var pb = b.split('.');\n    for (var i = 0; i < 3; i++) {\n        var na = Number(pa[i]);\n        var nb = Number(pb[i]);\n        if (na > nb) return 1;\n        if (nb > na) return -1;\n        if (!isNaN(na) && isNaN(nb)) return 1;\n        if (isNaN(na) && !isNaN(nb)) return -1;\n    }\n    return 0;\n};\n"",""import metadata from './metadata.min.json'\r\n\r\nimport parseNumberCustom from './es6/parse'\r\nimport formatNumberCustom from './es6/format'\r\nimport getNumberTypeCustom from './es6/getNumberType'\r\nimport isValidNumberCustom from './es6/validate'\r\nimport isValidNumberForRegionCustom from './es6/isValidNumberForRegion'\r\nimport findPhoneNumbersCustom, { searchPhoneNumbers as searchPhoneNumbersCustom, PhoneNumberSearch as PhoneNumberSearchCustom } from './es6/findPhoneNumbers'\r\nimport AsYouTypeCustom from './es6/AsYouType'\r\nimport getCountryCallingCodeCustom from './es6/getCountryCallingCode'\r\nexport { default as Metadata } from './es6/metadata'\r\nimport { getExtPrefix as getExtPrefixCustom } from './es6/metadata'\r\nimport { parseRFC3966 as parseRFC3966Custom, formatRFC3966 as formatRFC3966Custom } from './es6/RFC3966'\r\n\r\nexport function parseNumber()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn parseNumberCustom.apply(this, parameters)\r\n}\r\n\r\n// Deprecated: remove `parse()` export in 2.0.0.\r\n// (renamed to `parseNumber()`)\r\nexport function parse()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn parseNumberCustom.apply(this, parameters)\r\n}\r\n\r\nexport function formatNumber()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn formatNumberCustom.apply(this, parameters)\r\n}\r\n\r\n// Deprecated: remove `format()` export in 2.0.0.\r\n// (renamed to `formatNumber()`)\r\nexport function format()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn formatNumberCustom.apply(this, parameters)\r\n}\r\n\r\nexport function getNumberType()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn getNumberTypeCustom.apply(this, parameters)\r\n}\r\n\r\nexport function isValidNumber()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn isValidNumberCustom.apply(this, parameters)\r\n}\r\n\r\nexport function isValidNumberForRegion()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn isValidNumberForRegionCustom.apply(this, parameters)\r\n}\r\n\r\nexport function findPhoneNumbers()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn findPhoneNumbersCustom.apply(this, parameters)\r\n}\r\n\r\nexport function searchPhoneNumbers()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn searchPhoneNumbersCustom.apply(this, parameters)\r\n}\r\n\r\nexport function PhoneNumberSearch(text, options)\r\n{\r\n\tPhoneNumberSearchCustom.call(this, text, options, metadata)\r\n}\r\n\r\nPhoneNumberSearch.prototype = Object.create(PhoneNumberSearchCustom.prototype, {})\r\nPhoneNumberSearch.prototype.constructor = PhoneNumberSearch\r\n\r\nexport function AsYouType(country)\r\n{\r\n\tAsYouTypeCustom.call(this, country, metadata)\r\n}\r\n\r\nAsYouType.prototype = Object.create(AsYouTypeCustom.prototype, {})\r\nAsYouType.prototype.constructor = AsYouType\r\n\r\nexport function getExtPrefix()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn getExtPrefixCustom.apply(this, parameters)\r\n}\r\n\r\nexport function parseRFC3966()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn parseRFC3966Custom.apply(this, parameters)\r\n}\r\n\r\nexport function formatRFC3966()\r\n{\r\n\tvar parameters = Array.prototype.slice.call(arguments)\r\n\tparameters.push(metadata)\r\n\treturn formatRFC3966Custom.apply(this, parameters)\r\n}\r\n\r\n// Deprecated: remove DIGITS export in 2.0.0 (unused).\r\nexport { DIGITS } from './es6/common'\r\n\r\n// Deprecated: remove this in 2.0.0 and make `custom.js` in ES6\r\n// (the old `custom.js` becomes `custom.commonjs.js`).\r\nexport { default as parseCustom } from './es6/parse'\r\nexport { default as formatCustom } from './es6/format'\r\nexport { default as isValidNumberCustom } from './es6/validate'\r\nexport { default as findPhoneNumbersCustom } from './es6/findPhoneNumbers'\r\nexport { searchPhoneNumbers as searchPhoneNumbersCustom } from './es6/findPhoneNumbers'\r\nexport { PhoneNumberSearch as PhoneNumberSearchCustom } from './es6/findPhoneNumbers'\r\nexport { default as getNumberTypeCustom } from './es6/getNumberType'\r\nexport { default as getCountryCallingCodeCustom } from './es6/getCountryCallingCode'\r\n\r\nexport\r\n{\r\n\tdefault as AsYouTypeCustom,\r\n\t// `DIGIT_PLACEHOLDER` is used by `react-phone-number-input`.\r\n\tDIGIT_PLACEHOLDER\r\n}\r\nfrom './es6/AsYouType'\r\n\r\nexport function getCountryCallingCode(country)\r\n{\r\n\treturn getCountryCallingCodeCustom(country, metadata)\r\n}\r\n\r\n// `getPhoneCode` name is deprecated, use `getCountryCallingCode` instead.\r\nexport function getPhoneCode(country)\r\n{\r\n\treturn getCountryCallingCode(country)\r\n}\r\n\r\n// `getPhoneCodeCustom` name is deprecated, use `getCountryCallingCodeCustom` instead.\r\nexport function getPhoneCodeCustom(country, metadata)\r\n{\r\n\treturn getCountryCallingCodeCustom(country, metadata)\r\n}""],""sourceRoot"":""""}"
a922186031bbcfd6457ac9150c9c9950c542ad44,3222375,0;6;http://stackoverflow.com/questions/3222375/what-is-message-passing;thread;1.5;0.03125;4.0;0.0;0
e5609bc0f44cdb0a7d7379e603bf8187ccd1aef5,31044,        // exists method (http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery)
a646dc89a5bc87fd09161c8ad641e5dc44c523c5,4401232,"This property allows you to specify whether a shutter sound is played on capture. It is currently android only, pending [a reasonable mute implementation](http://stackoverflow.com/questions/4401232/avfoundation-how-to-turn-off-the-shutter-sound-when-capturestillimageasynchrono) in iOS."
896ebe08d6aa8ecd7628aff7d03088dece54d293,2323292,REM See http://stackoverflow.com/questions/2323292/windows-batch-assign-output-of-a-program-to-a-variable?rq=1
eed9702e302bc85d792df8d77bbb8046797aa775,3330919,        // http://stackoverflow.com/a/3330919)
9aec5f2c76520a8d4ddfdceb29418c1550b1b3f0,1829474,# https://stackoverflow.com/questions/1829474/how-to-generate-a-single-translation-file-for-a-large-qt-project
8b21afe6acbbfdbe28b1a57c163571854c1984a2,2256945,bool _removeDirectory(const QString &path) { // from http://stackoverflow.com/questions/2256945/removing-a-non-empty-directory-programmatically-in-c-or-c
a110ae3dee25d98e3f31caf01e5f17449c694e2d,25373188,"<p>The problem is gone now. Sure, I could just made an alias out of those two executables and be done in just minutes but that&#39;s not elegant. Yesterday I finally decided to research a bit deeper and found a <a href=""http://stackoverflow.com/questions/25373188/laravel-installation-how-to-place-the-composer-vendor-bin-directory-in-your#comment55399249_25373254"">life-saver comment</a> at Stack Overflow.</p>"
f8e77b75da25f78c2da77b42accd894c766769ce,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
603afa330bfa48ac14627c968d02d8ac3b125887,5538972,				// FIXME: IE9 has a non-standard `console.log` object (http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9)
e10f5ba2f9f4a8a562e9118e234edf6edd023d1a,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
659a1f3c3b707d14c32baa3104a3c32ca6200bcf,472179,Based in http://stackoverflow.com/questions/472179/how-to-read-the-header-with-pycurl
2e7d90b1b11daac92eecf2b9943550c4426707f0,671118,"    ""Read this: http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming"""
7665f66166359c603a5d9d15c4ec3d38111e7cbd,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
13c040b3642688bab09eb92a2bfdfad560e6239e,17516733,// express' res.sendFile? https://stackoverflow.com/a/17516733/1787829
98f753e1e726ce0acde2d5a9d8ca5995ec2c582c,6491463 1248081,"{""version"":3,""sources"":[""webpack://Vuetify/webpack/universalModuleDefinition"",""webpack://Vuetify/webpack/bootstrap"",""webpack://Vuetify/./src/components/VAlert/VAlert.ts"",""webpack://Vuetify/./src/components/VAlert/index.ts"",""webpack://Vuetify/./src/components/VApp/VApp.js"",""webpack://Vuetify/./src/components/VApp/index.js"",""webpack://Vuetify/./src/components/VApp/mixins/app-theme.js"",""webpack://Vuetify/./src/components/VAutocomplete/VAutocomplete.js"",""webpack://Vuetify/./src/components/VAutocomplete/index.js"",""webpack://Vuetify/./src/components/VAvatar/VAvatar.ts"",""webpack://Vuetify/./src/components/VAvatar/index.ts"",""webpack://Vuetify/./src/components/VBadge/VBadge.ts"",""webpack://Vuetify/./src/components/VBadge/index.ts"",""webpack://Vuetify/./src/components/VBottomNav/VBottomNav.ts"",""webpack://Vuetify/./src/components/VBottomNav/index.ts"",""webpack://Vuetify/./src/components/VBottomSheet/VBottomSheet.js"",""webpack://Vuetify/./src/components/VBottomSheet/index.js"",""webpack://Vuetify/./src/components/VBreadcrumbs/VBreadcrumbs.ts"",""webpack://Vuetify/./src/components/VBreadcrumbs/VBreadcrumbsItem.ts"",""webpack://Vuetify/./src/components/VBreadcrumbs/index.ts"",""webpack://Vuetify/./src/components/VBtn/VBtn.ts"",""webpack://Vuetify/./src/components/VBtn/index.ts"",""webpack://Vuetify/./src/components/VBtnToggle/VBtnToggle.ts"",""webpack://Vuetify/./src/components/VBtnToggle/index.ts"",""webpack://Vuetify/./src/components/VCard/VCard.ts"",""webpack://Vuetify/./src/components/VCard/VCardMedia.ts"",""webpack://Vuetify/./src/components/VCard/VCardTitle.ts"",""webpack://Vuetify/./src/components/VCard/index.ts"",""webpack://Vuetify/./src/components/VCarousel/VCarousel.ts"",""webpack://Vuetify/./src/components/VCarousel/VCarouselItem.ts"",""webpack://Vuetify/./src/components/VCarousel/index.ts"",""webpack://Vuetify/./src/components/VCheckbox/VCheckbox.js"",""webpack://Vuetify/./src/components/VCheckbox/index.js"",""webpack://Vuetify/./src/components/VChip/VChip.ts"",""webpack://Vuetify/./src/components/VChip/index.ts"",""webpack://Vuetify/./src/components/VCombobox/VCombobox.js"",""webpack://Vuetify/./src/components/VCombobox/index.js"",""webpack://Vuetify/./src/components/VCounter/VCounter.js"",""webpack://Vuetify/./src/components/VCounter/index.js"",""webpack://Vuetify/./src/components/VDataIterator/VDataIterator.js"",""webpack://Vuetify/./src/components/VDataIterator/index.js"",""webpack://Vuetify/./src/components/VDataTable/VDataTable.js"",""webpack://Vuetify/./src/components/VDataTable/VEditDialog.js"",""webpack://Vuetify/./src/components/VDataTable/index.js"",""webpack://Vuetify/./src/components/VDataTable/mixins/body.js"",""webpack://Vuetify/./src/components/VDataTable/mixins/foot.js"",""webpack://Vuetify/./src/components/VDataTable/mixins/head.js"",""webpack://Vuetify/./src/components/VDataTable/mixins/progress.js"",""webpack://Vuetify/./src/components/VDatePicker/VDatePicker.js"",""webpack://Vuetify/./src/components/VDatePicker/VDatePickerDateTable.js"",""webpack://Vuetify/./src/components/VDatePicker/VDatePickerHeader.js"",""webpack://Vuetify/./src/components/VDatePicker/VDatePickerMonthTable.js"",""webpack://Vuetify/./src/components/VDatePicker/VDatePickerTitle.js"",""webpack://Vuetify/./src/components/VDatePicker/VDatePickerYears.js"",""webpack://Vuetify/./src/components/VDatePicker/index.js"",""webpack://Vuetify/./src/components/VDatePicker/mixins/date-picker-table.js"",""webpack://Vuetify/./src/components/VDatePicker/util/createNativeLocaleFormatter.js"",""webpack://Vuetify/./src/components/VDatePicker/util/index.js"",""webpack://Vuetify/./src/components/VDatePicker/util/isDateAllowed.js"",""webpack://Vuetify/./src/components/VDatePicker/util/monthChange.js"",""webpack://Vuetify/./src/components/VDatePicker/util/pad.js"",""webpack://Vuetify/./src/components/VDialog/VDialog.js"",""webpack://Vuetify/./src/components/VDialog/index.js"",""webpack://Vuetify/./src/components/VDivider/VDivider.ts"",""webpack://Vuetify/./src/components/VDivider/index.ts"",""webpack://Vuetify/./src/components/VExpansionPanel/VExpansionPanel.ts"",""webpack://Vuetify/./src/components/VExpansionPanel/VExpansionPanelContent.ts"",""webpack://Vuetify/./src/components/VExpansionPanel/index.ts"",""webpack://Vuetify/./src/components/VFooter/VFooter.js"",""webpack://Vuetify/./src/components/VFooter/index.js"",""webpack://Vuetify/./src/components/VForm/VForm.js"",""webpack://Vuetify/./src/components/VForm/index.js"",""webpack://Vuetify/./src/components/VGrid/VContainer.js"",""webpack://Vuetify/./src/components/VGrid/VContent.js"",""webpack://Vuetify/./src/components/VGrid/VFlex.js"",""webpack://Vuetify/./src/components/VGrid/VLayout.js"",""webpack://Vuetify/./src/components/VGrid/grid.js"",""webpack://Vuetify/./src/components/VGrid/index.js"",""webpack://Vuetify/./src/components/VHover/VHover.ts"",""webpack://Vuetify/./src/components/VHover/index.ts"",""webpack://Vuetify/./src/components/VIcon/VIcon.ts"",""webpack://Vuetify/./src/components/VIcon/index.ts"",""webpack://Vuetify/./src/components/VImg/VImg.ts"",""webpack://Vuetify/./src/components/VImg/index.ts"",""webpack://Vuetify/./src/components/VInput/VInput.js"",""webpack://Vuetify/./src/components/VInput/index.js"",""webpack://Vuetify/./src/components/VItemGroup/VItem.ts"",""webpack://Vuetify/./src/components/VItemGroup/VItemGroup.ts"",""webpack://Vuetify/./src/components/VItemGroup/index.ts"",""webpack://Vuetify/./src/components/VJumbotron/VJumbotron.js"",""webpack://Vuetify/./src/components/VJumbotron/index.js"",""webpack://Vuetify/./src/components/VLabel/VLabel.js"",""webpack://Vuetify/./src/components/VLabel/index.js"",""webpack://Vuetify/./src/components/VList/VList.js"",""webpack://Vuetify/./src/components/VList/VListGroup.js"",""webpack://Vuetify/./src/components/VList/VListTile.js"",""webpack://Vuetify/./src/components/VList/VListTileAction.js"",""webpack://Vuetify/./src/components/VList/VListTileAvatar.js"",""webpack://Vuetify/./src/components/VList/index.js"",""webpack://Vuetify/./src/components/VMenu/VMenu.js"",""webpack://Vuetify/./src/components/VMenu/index.js"",""webpack://Vuetify/./src/components/VMenu/mixins/menu-activator.js"",""webpack://Vuetify/./src/components/VMenu/mixins/menu-generators.js"",""webpack://Vuetify/./src/components/VMenu/mixins/menu-keyable.js"",""webpack://Vuetify/./src/components/VMenu/mixins/menu-position.js"",""webpack://Vuetify/./src/components/VMessages/VMessages.js"",""webpack://Vuetify/./src/components/VMessages/index.js"",""webpack://Vuetify/./src/components/VNavigationDrawer/VNavigationDrawer.js"",""webpack://Vuetify/./src/components/VNavigationDrawer/index.js"",""webpack://Vuetify/./src/components/VOverflowBtn/VOverflowBtn.js"",""webpack://Vuetify/./src/components/VOverflowBtn/index.js"",""webpack://Vuetify/./src/components/VPagination/VPagination.ts"",""webpack://Vuetify/./src/components/VPagination/index.ts"",""webpack://Vuetify/./src/components/VParallax/VParallax.ts"",""webpack://Vuetify/./src/components/VParallax/index.ts"",""webpack://Vuetify/./src/components/VPicker/VPicker.js"",""webpack://Vuetify/./src/components/VPicker/index.js"",""webpack://Vuetify/./src/components/VProgressCircular/VProgressCircular.ts"",""webpack://Vuetify/./src/components/VProgressCircular/index.ts"",""webpack://Vuetify/./src/components/VProgressLinear/VProgressLinear.ts"",""webpack://Vuetify/./src/components/VProgressLinear/index.ts"",""webpack://Vuetify/./src/components/VRadioGroup/VRadio.js"",""webpack://Vuetify/./src/components/VRadioGroup/VRadioGroup.js"",""webpack://Vuetify/./src/components/VRadioGroup/index.js"",""webpack://Vuetify/./src/components/VRangeSlider/VRangeSlider.js"",""webpack://Vuetify/./src/components/VRangeSlider/index.js"",""webpack://Vuetify/./src/components/VRating/VRating.ts"",""webpack://Vuetify/./src/components/VRating/index.ts"",""webpack://Vuetify/./src/components/VResponsive/VResponsive.ts"",""webpack://Vuetify/./src/components/VResponsive/index.ts"",""webpack://Vuetify/./src/components/VSelect/VSelect.js"",""webpack://Vuetify/./src/components/VSelect/VSelectList.js"",""webpack://Vuetify/./src/components/VSelect/index.js"",""webpack://Vuetify/./src/components/VSlider/VSlider.js"",""webpack://Vuetify/./src/components/VSlider/index.js"",""webpack://Vuetify/./src/components/VSnackbar/VSnackbar.ts"",""webpack://Vuetify/./src/components/VSnackbar/index.ts"",""webpack://Vuetify/./src/components/VSpeedDial/VSpeedDial.js"",""webpack://Vuetify/./src/components/VSpeedDial/index.js"",""webpack://Vuetify/./src/components/VStepper/VStepper.js"",""webpack://Vuetify/./src/components/VStepper/VStepperContent.js"",""webpack://Vuetify/./src/components/VStepper/VStepperStep.js"",""webpack://Vuetify/./src/components/VStepper/index.js"",""webpack://Vuetify/./src/components/VSubheader/VSubheader.js"",""webpack://Vuetify/./src/components/VSubheader/index.js"",""webpack://Vuetify/./src/components/VSwitch/VSwitch.js"",""webpack://Vuetify/./src/components/VSwitch/index.js"",""webpack://Vuetify/./src/components/VSystemBar/VSystemBar.js"",""webpack://Vuetify/./src/components/VSystemBar/index.js"",""webpack://Vuetify/./src/components/VTabs/VTab.js"",""webpack://Vuetify/./src/components/VTabs/VTabItem.js"",""webpack://Vuetify/./src/components/VTabs/VTabs.js"",""webpack://Vuetify/./src/components/VTabs/VTabsItems.js"",""webpack://Vuetify/./src/components/VTabs/VTabsSlider.js"",""webpack://Vuetify/./src/components/VTabs/index.js"",""webpack://Vuetify/./src/components/VTabs/mixins/tabs-computed.js"",""webpack://Vuetify/./src/components/VTabs/mixins/tabs-generators.js"",""webpack://Vuetify/./src/components/VTabs/mixins/tabs-props.js"",""webpack://Vuetify/./src/components/VTabs/mixins/tabs-touch.js"",""webpack://Vuetify/./src/components/VTabs/mixins/tabs-watchers.js"",""webpack://Vuetify/./src/components/VTextField/VTextField.js"",""webpack://Vuetify/./src/components/VTextField/index.js"",""webpack://Vuetify/./src/components/VTextarea/VTextarea.js"",""webpack://Vuetify/./src/components/VTextarea/index.js"",""webpack://Vuetify/./src/components/VTimePicker/VTimePicker.js"",""webpack://Vuetify/./src/components/VTimePicker/VTimePickerClock.js"",""webpack://Vuetify/./src/components/VTimePicker/VTimePickerTitle.js"",""webpack://Vuetify/./src/components/VTimePicker/index.js"",""webpack://Vuetify/./src/components/VTimeline/VTimeline.ts"",""webpack://Vuetify/./src/components/VTimeline/VTimelineItem.ts"",""webpack://Vuetify/./src/components/VTimeline/index.ts"",""webpack://Vuetify/./src/components/VToolbar/VToolbar.js"",""webpack://Vuetify/./src/components/VToolbar/VToolbarSideIcon.js"",""webpack://Vuetify/./src/components/VToolbar/index.js"",""webpack://Vuetify/./src/components/VTooltip/VTooltip.js"",""webpack://Vuetify/./src/components/VTooltip/index.js"",""webpack://Vuetify/./src/components/VTreeview/VTreeview.ts"",""webpack://Vuetify/./src/components/VTreeview/VTreeviewNode.ts"",""webpack://Vuetify/./src/components/VTreeview/index.ts"",""webpack://Vuetify/./src/components/VWindow/VWindow.ts"",""webpack://Vuetify/./src/components/VWindow/VWindowItem.ts"",""webpack://Vuetify/./src/components/VWindow/index.ts"",""webpack://Vuetify/./src/components/Vuetify/index.ts"",""webpack://Vuetify/./src/components/Vuetify/mixins/application.ts"",""webpack://Vuetify/./src/components/Vuetify/mixins/breakpoint.ts"",""webpack://Vuetify/./src/components/Vuetify/mixins/icons.js"",""webpack://Vuetify/./src/components/Vuetify/mixins/lang.ts"",""webpack://Vuetify/./src/components/Vuetify/mixins/options.js"",""webpack://Vuetify/./src/components/Vuetify/mixins/theme.ts"",""webpack://Vuetify/./src/components/Vuetify/util/goTo.js"",""webpack://Vuetify/./src/components/index.ts"",""webpack://Vuetify/./src/components/transitions/expand-transition.js"",""webpack://Vuetify/./src/components/transitions/index.js"",""webpack://Vuetify/./src/directives/click-outside.ts"",""webpack://Vuetify/./src/directives/index.ts"",""webpack://Vuetify/./src/directives/resize.ts"",""webpack://Vuetify/./src/directives/ripple.ts"",""webpack://Vuetify/./src/directives/scroll.ts"",""webpack://Vuetify/./src/directives/touch.ts"",""webpack://Vuetify/./src/index.ts"",""webpack://Vuetify/./src/locale/en.ts"",""webpack://Vuetify/./src/mixins/applicationable.ts"",""webpack://Vuetify/./src/mixins/bootable.ts"",""webpack://Vuetify/./src/mixins/button-group.ts"",""webpack://Vuetify/./src/mixins/colorable.ts"",""webpack://Vuetify/./src/mixins/comparable.ts"",""webpack://Vuetify/./src/mixins/data-iterable.js"",""webpack://Vuetify/./src/mixins/delayable.ts"",""webpack://Vuetify/./src/mixins/dependent.ts"",""webpack://Vuetify/./src/mixins/detachable.js"",""webpack://Vuetify/./src/mixins/filterable.ts"",""webpack://Vuetify/./src/mixins/groupable.ts"",""webpack://Vuetify/./src/mixins/loadable.ts"",""webpack://Vuetify/./src/mixins/maskable.js"",""webpack://Vuetify/./src/mixins/measurable.ts"",""webpack://Vuetify/./src/mixins/menuable.js"",""webpack://Vuetify/./src/mixins/overlayable.js"",""webpack://Vuetify/./src/mixins/picker-button.js"",""webpack://Vuetify/./src/mixins/picker.js"",""webpack://Vuetify/./src/mixins/positionable.ts"",""webpack://Vuetify/./src/mixins/proxyable.ts"",""webpack://Vuetify/./src/mixins/registrable.ts"",""webpack://Vuetify/./src/mixins/returnable.ts"",""webpack://Vuetify/./src/mixins/rippleable.ts"",""webpack://Vuetify/./src/mixins/routable.ts"",""webpack://Vuetify/./src/mixins/selectable.js"",""webpack://Vuetify/./src/mixins/sizeable.ts"",""webpack://Vuetify/./src/mixins/ssr-bootable.ts"",""webpack://Vuetify/./src/mixins/stackable.js"",""webpack://Vuetify/./src/mixins/themeable.ts"",""webpack://Vuetify/./src/mixins/toggleable.ts"",""webpack://Vuetify/./src/mixins/transitionable.ts"",""webpack://Vuetify/./src/mixins/translatable.ts"",""webpack://Vuetify/./src/mixins/validatable.js"",""webpack://Vuetify/./src/stylus/app.styl?6736"",""webpack://Vuetify/./src/stylus/components/_alerts.styl?ed10"",""webpack://Vuetify/./src/stylus/components/_app.styl?e3a9"",""webpack://Vuetify/./src/stylus/components/_autocompletes.styl?ca63"",""webpack://Vuetify/./src/stylus/components/_avatars.styl?2ce2"",""webpack://Vuetify/./src/stylus/components/_badges.styl?eeff"",""webpack://Vuetify/./src/stylus/components/_bottom-navs.styl?13de"",""webpack://Vuetify/./src/stylus/components/_bottom-sheets.styl?a5a8"",""webpack://Vuetify/./src/stylus/components/_breadcrumbs.styl?f302"",""webpack://Vuetify/./src/stylus/components/_button-toggle.styl?4627"",""webpack://Vuetify/./src/stylus/components/_buttons.styl?b7ab"",""webpack://Vuetify/./src/stylus/components/_cards.styl?fb72"",""webpack://Vuetify/./src/stylus/components/_carousel.styl?6952"",""webpack://Vuetify/./src/stylus/components/_chips.styl?3531"",""webpack://Vuetify/./src/stylus/components/_content.styl?7065"",""webpack://Vuetify/./src/stylus/components/_counters.styl?3f90"",""webpack://Vuetify/./src/stylus/components/_data-iterator.styl?7272"",""webpack://Vuetify/./src/stylus/components/_data-table.styl?abff"",""webpack://Vuetify/./src/stylus/components/_date-picker-header.styl?cad7"",""webpack://Vuetify/./src/stylus/components/_date-picker-table.styl?9a3d"",""webpack://Vuetify/./src/stylus/components/_date-picker-title.styl?0ee0"",""webpack://Vuetify/./src/stylus/components/_date-picker-years.styl?1904"",""webpack://Vuetify/./src/stylus/components/_dialogs.styl?b0d6"",""webpack://Vuetify/./src/stylus/components/_dividers.styl?2493"",""webpack://Vuetify/./src/stylus/components/_expansion-panel.styl?8706"",""webpack://Vuetify/./src/stylus/components/_footer.styl?2f6e"",""webpack://Vuetify/./src/stylus/components/_forms.styl?ba7a"",""webpack://Vuetify/./src/stylus/components/_grid.styl?8aad"",""webpack://Vuetify/./src/stylus/components/_icons.styl?deb5"",""webpack://Vuetify/./src/stylus/components/_images.styl?f0c8"",""webpack://Vuetify/./src/stylus/components/_inputs.styl?0f85"",""webpack://Vuetify/./src/stylus/components/_item-group.styl?6444"",""webpack://Vuetify/./src/stylus/components/_jumbotrons.styl?0757"",""webpack://Vuetify/./src/stylus/components/_labels.styl?7c76"",""webpack://Vuetify/./src/stylus/components/_lists.styl?3429"",""webpack://Vuetify/./src/stylus/components/_menus.styl?0f9e"",""webpack://Vuetify/./src/stylus/components/_messages.styl?98a6"",""webpack://Vuetify/./src/stylus/components/_navigation-drawer.styl?5b0f"",""webpack://Vuetify/./src/stylus/components/_overflow-buttons.styl?84a0"",""webpack://Vuetify/./src/stylus/components/_overlay.styl?fddb"",""webpack://Vuetify/./src/stylus/components/_pagination.styl?1664"",""webpack://Vuetify/./src/stylus/components/_parallax.styl?bbfd"",""webpack://Vuetify/./src/stylus/components/_pickers.styl?cc9a"",""webpack://Vuetify/./src/stylus/components/_progress-circular.styl?89b9"",""webpack://Vuetify/./src/stylus/components/_progress-linear.styl?cdb4"",""webpack://Vuetify/./src/stylus/components/_radio-group.styl?ab6e"",""webpack://Vuetify/./src/stylus/components/_radios.styl?01c0"",""webpack://Vuetify/./src/stylus/components/_range-sliders.styl?fa5b"",""webpack://Vuetify/./src/stylus/components/_rating.styl?e254"",""webpack://Vuetify/./src/stylus/components/_responsive.styl?add1"",""webpack://Vuetify/./src/stylus/components/_select.styl?d630"",""webpack://Vuetify/./src/stylus/components/_selection-controls.styl?969a"",""webpack://Vuetify/./src/stylus/components/_sliders.styl?dafb"",""webpack://Vuetify/./src/stylus/components/_small-dialog.styl?4f1a"",""webpack://Vuetify/./src/stylus/components/_snackbars.styl?c9e2"",""webpack://Vuetify/./src/stylus/components/_speed-dial.styl?7bb6"",""webpack://Vuetify/./src/stylus/components/_steppers.styl?05d8"",""webpack://Vuetify/./src/stylus/components/_subheaders.styl?fffa"",""webpack://Vuetify/./src/stylus/components/_switch.styl?9b68"",""webpack://Vuetify/./src/stylus/components/_system-bars.styl?d2bc"",""webpack://Vuetify/./src/stylus/components/_tables.styl?ecd3"",""webpack://Vuetify/./src/stylus/components/_tabs.styl?239a"",""webpack://Vuetify/./src/stylus/components/_text-fields.styl?eddc"",""webpack://Vuetify/./src/stylus/components/_textarea.styl?c732"",""webpack://Vuetify/./src/stylus/components/_time-picker-clock.styl?83a1"",""webpack://Vuetify/./src/stylus/components/_time-picker-title.styl?6078"",""webpack://Vuetify/./src/stylus/components/_timeline.styl?73f9"",""webpack://Vuetify/./src/stylus/components/_toolbar.styl?4fda"",""webpack://Vuetify/./src/stylus/components/_tooltips.styl?6cbb"",""webpack://Vuetify/./src/stylus/components/_treeview.styl?4e62"",""webpack://Vuetify/./src/stylus/components/_windows.styl?8f12"",""webpack://Vuetify/./src/util/ThemeProvider.ts"",""webpack://Vuetify/./src/util/color/transformCIELAB.ts"",""webpack://Vuetify/./src/util/color/transformSRGB.ts"",""webpack://Vuetify/./src/util/colorUtils.ts"",""webpack://Vuetify/./src/util/console.ts"",""webpack://Vuetify/./src/util/dedupeModelListeners.ts"",""webpack://Vuetify/./src/util/easing-patterns.js"",""webpack://Vuetify/./src/util/helpers.ts"",""webpack://Vuetify/./src/util/mask.js"",""webpack://Vuetify/./src/util/mixins.ts"",""webpack://Vuetify/./src/util/rebuildFunctionalSlots.js"",""webpack://Vuetify/./src/util/theme.ts"",""webpack://Vuetify/external {\""commonjs\"":\""vue\"",\""commonjs2\"":\""vue\"",\""amd\"":\""vue\"",\""root\"":\""Vue\""}""],""names"":[],""mappings"":""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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;;ACCA;AAAA;AAAA;AAAA;AACA;AAEA;AACe,sHAAM,CAAC,yDAAP,EAAkB,MAAlB,CAAyB;AACtC,UAAM,gBADgC;AAGtC,WAAO;AACL,cAAM;AADD,KAH+B;AAOtC,cAAU;AACR;AACE,mBAAO,KAAK,IAAL,GAAY,KAAK,UAAjB,GAA8B,yDAAS,CAAC,OAAV,CAAkB,QAAlB,CAA2B,MAA3B,CAAkC,IAAlC,CAAuC,IAAvC,CAArC;AACD;AAHO,KAP4B;AAatC;AACE,eAAO,KAAK,MAAL,CAAY,OAAZ,IAAwB,KAAK,MAAL,CAAY,OA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"",""file"":""vuetify.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\""vue\""));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\""vue\""], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\""Vuetify\""] = factory(require(\""vue\""));\n\telse\n\t\troot[\""Vuetify\""] = factory(root[\""Vue\""]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_vue__) {\nreturn "","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""/dist/\"";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \""./src/index.ts\"");\n"",""// Styles\nimport '../../stylus/components/_alerts.styl'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Toggleable from '../../mixins/toggleable'\nimport Transitionable from '../../mixins/transitionable'\n\n// Types\nimport { VNode } from 'vue/types'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable, Toggleable, Transitionable).extend({\n  name: 'v-alert',\n\n  props: {\n    dismissible: Boolean,\n    icon: String,\n    outline: Boolean,\n    type: {\n      type: String,\n      validator (val: string) {\n        return [\n          'info',\n          'error',\n          'success',\n          'warning'\n        ].includes(val)\n      }\n    }\n  },\n\n  computed: {\n    computedColor (): string {\n      return (this.type && !this.color) ? this.type : (this.color || 'error')\n    },\n    computedIcon (): string | void {\n      if (this.icon || !this.type) return this.icon\n\n      switch (this.type) {\n        case 'info': return '$vuetify.icons.info'\n        case 'error': return '$vuetify.icons.error'\n        case 'success': return '$vuetify.icons.success'\n        case 'warning': return '$vuetify.icons.warning'\n      }\n    }\n  },\n\n  methods: {\n    genIcon (): VNode | null {\n      if (!this.computedIcon) return null\n\n      return this.$createElement(VIcon, {\n        'class': 'v-alert__icon'\n      }, this.computedIcon)\n    },\n\n    genDismissible (): VNode | null {\n      if (!this.dismissible) return null\n\n      return this.$createElement('a', {\n        'class': 'v-alert__dismissible',\n        on: { click: () => { this.isActive = false } }\n      }, [\n        this.$createElement(VIcon, {\n          props: {\n            right: true\n          }\n        }, '$vuetify.icons.cancel')\n      ])\n    }\n  },\n\n  render (h): VNode {\n    const children = [\n      this.genIcon(),\n      h('div', this.$slots.default),\n      this.genDismissible()\n    ] as any\n    const setColor = this.outline ? this.setTextColor : this.setBackgroundColor\n    const alert = h('div', setColor(this.computedColor, {\n      staticClass: 'v-alert',\n      'class': {\n        'v-alert--outline': this.outline\n      },\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }] as any,\n      on: this.$listeners\n    }), children)\n\n    if (!this.transition) return alert\n\n    return h('transition', {\n      props: {\n        name: this.transition,\n        origin: this.origin,\n        mode: this.mode\n      }\n    }, [alert])\n  }\n})\n"",""import VAlert from './VAlert'\n\nexport { VAlert }\nexport default VAlert\n"",""import '../../stylus/components/_app.styl'\n\n// Component level mixins\nimport AppTheme from './mixins/app-theme'\n\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n/* @vue/component */\nexport default {\n  name: 'v-app',\n\n  directives: {\n    Resize\n  },\n\n  mixins: [\n    AppTheme,\n    Themeable\n  ],\n\n  props: {\n    id: {\n      type: String,\n      default: 'app'\n    },\n    dark: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'application--is-rtl': this.$vuetify.rtl,\n        ...this.themeClasses\n      }\n    }\n  },\n\n  watch: {\n    dark () {\n      this.$vuetify.dark = this.dark\n    }\n  },\n\n  mounted () {\n    this.$vuetify.dark = this.dark\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'application',\n      'class': this.classes,\n      attrs: { 'data-app': true },\n      domProps: { id: this.id }\n    }\n\n    const wrapper = h('div', { staticClass: 'application--wrap' }, this.$slots.default)\n\n    return h('div', data, [wrapper])\n  }\n}\n"",""import VApp from './VApp'\n\nexport { VApp }\nexport default VApp\n"",""import * as Theme from '../../../util/theme'\n\nexport default {\n  data: () => ({\n    style: null\n  }),\n\n  computed: {\n    parsedTheme () {\n      return Theme.parse(this.$vuetify.theme)\n    },\n    /** @return string */\n    generatedStyles () {\n      const theme = this.parsedTheme\n      let css\n\n      if (this.$vuetify.options.themeCache != null) {\n        css = this.$vuetify.options.themeCache.get(theme)\n        if (css != null) return css\n      }\n\n      css = Theme.genStyles(theme, this.$vuetify.options.customProperties)\n\n      if (this.$vuetify.options.minifyTheme != null) {\n        css = this.$vuetify.options.minifyTheme(css)\n      }\n\n      if (this.$vuetify.options.themeCache != null) {\n        this.$vuetify.options.themeCache.set(theme, css)\n      }\n\n      return css\n    },\n    vueMeta () {\n      if (this.$vuetify.theme === false) return {}\n\n      const options = {\n        cssText: this.generatedStyles,\n        id: 'vuetify-theme-stylesheet',\n        type: 'text/css'\n      }\n\n      if (this.$vuetify.options.cspNonce) {\n        options.nonce = this.$vuetify.options.cspNonce\n      }\n\n      return {\n        style: [options]\n      }\n    }\n  },\n\n  // Regular vue-meta\n  metaInfo () {\n    return this.vueMeta\n  },\n\n  // Nuxt\n  head () {\n    return this.vueMeta\n  },\n\n  watch: {\n    generatedStyles () {\n      !this.meta && this.applyTheme()\n    }\n  },\n\n  created () {\n    if (this.$vuetify.theme === false) return\n\n    if (this.$meta) {\n      // Vue-meta\n      // Handled by metaInfo()/nuxt()\n    } else if (typeof document === 'undefined' && this.$ssrContext) {\n      // SSR\n      const nonce = this.$vuetify.options.cspNonce\n        ? ` nonce=\""${this.$vuetify.options.cspNonce}\""`\n        : ''\n      this.$ssrContext.head = this.$ssrContext.head || ''\n      this.$ssrContext.head += `<style type=\""text/css\"" id=\""vuetify-theme-stylesheet\""${nonce}>${this.generatedStyles}</style>`\n    } else if (typeof document !== 'undefined') {\n      // Client-side\n      this.genStyle()\n      this.applyTheme()\n    }\n  },\n\n  methods: {\n    applyTheme () {\n      if (this.style) this.style.innerHTML = this.generatedStyles\n    },\n    genStyle () {\n      let style = document.getElementById('vuetify-theme-stylesheet')\n\n      if (!style) {\n        style = document.createElement('style')\n        style.type = 'text/css'\n        style.id = 'vuetify-theme-stylesheet'\n        if (this.$vuetify.options.cspNonce) {\n          style.setAttribute('nonce', this.$vuetify.options.cspNonce)\n        }\n        document.head.appendChild(style)\n      }\n\n      this.style = style\n    }\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_autocompletes.styl'\n\n// Extensions\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect'\nimport VTextField from '../VTextField/VTextField'\n\n// Utils\nimport { keyCodes } from '../../util/helpers'\n\nconst defaultMenuProps = {\n  ...VSelectMenuProps,\n  offsetY: true,\n  offsetOverflow: true,\n  transition: false\n}\n\n/* @vue/component */\nexport default {\n  name: 'v-autocomplete',\n\n  extends: VSelect,\n\n  props: {\n    allowOverflow: {\n      type: Boolean,\n      default: true\n    },\n    browserAutocomplete: {\n      type: String,\n      default: 'off'\n    },\n    filter: {\n      type: Function,\n      default: (item, queryText, itemText) => {\n        const hasValue = val => val != null ? val : ''\n\n        const text = hasValue(itemText)\n        const query = hasValue(queryText)\n\n        return text.toString()\n          .toLowerCase()\n          .indexOf(query.toString().toLowerCase()) > -1\n      }\n    },\n    hideNoData: Boolean,\n    noFilter: Boolean,\n    searchInput: {\n      default: undefined\n    },\n    menuProps: {\n      type: VSelect.props.menuProps.type,\n      default: () => defaultMenuProps\n    }\n  },\n\n  data: vm => ({\n    attrsInput: null,\n    lazySearch: vm.searchInput\n  }),\n\n  computed: {\n    classes () {\n      return Object.assign({}, VSelect.computed.classes.call(this), {\n        'v-autocomplete': true,\n        'v-autocomplete--is-selecting-index': this.selectedIndex > -1\n      })\n    },\n    computedItems () {\n      return this.filteredItems\n    },\n    displayedItemsCount () {\n      return this.hideSelected\n        ? this.filteredItems.length - this.selectedItems.length\n        : this.filteredItems.length\n    },\n    /**\n     * The range of the current input text\n     *\n     * @return {Number}\n     */\n    currentRange () {\n      if (this.selectedItem == null) return 0\n\n      return this.getText(this.selectedItem).toString().length\n    },\n    filteredItems () {\n      if (!this.isSearching || this.noFilter) return this.allItems\n\n      return this.allItems.filter(i => this.filter(i, this.internalSearch, this.getText(i)))\n    },\n    internalSearch: {\n      get () {\n        return this.lazySearch\n      },\n      set (val) {\n        this.lazySearch = val\n\n        this.$emit('update:searchInput', val)\n      }\n    },\n    isAnyValueAllowed () {\n      return false\n    },\n    isDirty () {\n      return this.searchIsDirty || this.selectedItems.length > 0\n    },\n    isSearching () {\n      if (this.multiple) return this.searchIsDirty\n\n      return (\n        this.searchIsDirty &&\n        this.internalSearch !== this.getText(this.selectedItem)\n      )\n    },\n    menuCanShow () {\n      if (!this.isFocused) return false\n\n      return (this.displayedItemsCount > 0) || !this.hideNoData\n    },\n    $_menuProps () {\n      const props = VSelect.computed.$_menuProps.call(this)\n      props.contentClass = `v-autocomplete__content ${props.contentClass || ''}`.trim()\n      return {\n        ...defaultMenuProps,\n        ...props\n      }\n    },\n    searchIsDirty () {\n      return this.internalSearch != null &&\n        this.internalSearch !== ''\n    },\n    selectedItem () {\n      if (this.multiple) return null\n\n      return this.selectedItems.find(i => {\n        return this.valueComparator(this.getValue(i), this.getValue(this.internalValue))\n      })\n    },\n    listData () {\n      const data = VSelect.computed.listData.call(this)\n\n      Object.assign(data.props, {\n        items: this.virtualizedItems,\n        noFilter: (\n          this.noFilter ||\n          !this.isSearching ||\n          !this.filteredItems.length\n        ),\n        searchInput: this.internalSearch\n      })\n\n      return data\n    }\n  },\n\n  watch: {\n    filteredItems (val) {\n      this.onFilteredItemsChanged(val)\n    },\n    internalValue () {\n      this.setSearch()\n    },\n    isFocused (val) {\n      if (val) {\n        this.$refs.input &&\n          this.$refs.input.select()\n      } else {\n        this.updateSelf()\n      }\n    },\n    isMenuActive (val) {\n      if (val || !this.hasSlot) return\n\n      this.lazySearch = null\n    },\n    items (val, oldVal) {\n      // If we are focused, the menu\n      // is not active, hide no data is enabled,\n      // and items change\n      // User is probably async loading\n      // items, try to activate the menu\n      if (\n        !(oldVal && oldVal.length) &&\n        this.hideNoData &&\n        this.isFocused &&\n        !this.isMenuActive &&\n        val.length\n      ) this.activateMenu()\n    },\n    searchInput (val) {\n      this.lazySearch = val\n    },\n    internalSearch (val) {\n      this.onInternalSearchChanged(val)\n    }\n  },\n\n  created () {\n    this.setSearch()\n  },\n\n  methods: {\n    onFilteredItemsChanged (val) {\n      this.setMenuIndex(-1)\n\n      this.$nextTick(() => {\n        this.setMenuIndex(val.length === 1 ? 0 : -1)\n      })\n    },\n    onInternalSearchChanged (val) {\n      this.updateMenuDimensions()\n    },\n    updateMenuDimensions () {\n      if (this.isMenuActive &&\n        this.$refs.menu\n      ) {\n        this.$refs.menu.updateDimensions()\n      }\n    },\n    changeSelectedIndex (keyCode) {\n      // Do not allow changing of selectedIndex\n      // when search is dirty\n      if (this.searchIsDirty) return\n\n      if (![\n        keyCodes.backspace,\n        keyCodes.left,\n        keyCodes.right,\n        keyCodes.delete\n      ].includes(keyCode)) return\n\n      const indexes = this.selectedItems.length - 1\n\n      if (keyCode === keyCodes.left) {\n        this.selectedIndex = this.selectedIndex === -1\n          ? indexes\n          : this.selectedIndex - 1\n      } else if (keyCode === keyCodes.right) {\n        this.selectedIndex = this.selectedIndex >= indexes\n          ? -1\n          : this.selectedIndex + 1\n      } else if (this.selectedIndex === -1) {\n        this.selectedIndex = indexes\n        return\n      }\n\n      const currentItem = this.selectedItems[this.selectedIndex]\n\n      if ([\n        keyCodes.backspace,\n        keyCodes.delete\n      ].includes(keyCode) &&\n        !this.getDisabled(currentItem)\n      ) {\n        const newIndex = this.selectedIndex === indexes\n          ? this.selectedIndex - 1\n          : this.selectedItems[this.selectedIndex + 1]\n            ? this.selectedIndex\n            : -1\n\n        if (newIndex === -1) {\n          this.setValue(this.multiple ? [] : undefined)\n        } else {\n          this.selectItem(currentItem)\n        }\n\n        this.selectedIndex = newIndex\n      }\n    },\n    clearableCallback () {\n      this.internalSearch = undefined\n\n      VSelect.methods.clearableCallback.call(this)\n    },\n    genInput () {\n      const input = VTextField.methods.genInput.call(this)\n\n      input.data.attrs.role = 'combobox'\n      input.data.domProps.value = this.internalSearch\n\n      return input\n    },\n    genSelections () {\n      return this.hasSlot || this.multiple\n        ? VSelect.methods.genSelections.call(this)\n        : []\n    },\n    onClick () {\n      if (this.isDisabled) return\n\n      this.selectedIndex > -1\n        ? (this.selectedIndex = -1)\n        : this.onFocus()\n\n      this.activateMenu()\n    },\n    onEnterDown () {\n      // Avoid invoking this method\n      // will cause updateSelf to\n      // be called emptying search\n    },\n    onInput (e) {\n      if (this.selectedIndex > -1) return\n\n      // If typing and menu is not currently active\n      if (e.target.value) {\n        this.activateMenu()\n        if (!this.isAnyValueAllowed) this.setMenuIndex(0)\n      }\n\n      this.mask && this.resetSelections(e.target)\n      this.internalSearch = e.target.value\n      this.badInput = e.target.validity && e.target.validity.badInput\n    },\n    onKeyDown (e) {\n      const keyCode = e.keyCode\n\n      VSelect.methods.onKeyDown.call(this, e)\n\n      // The ordering is important here\n      // allows new value to be updated\n      // and then moves the index to the\n      // proper location\n      this.changeSelectedIndex(keyCode)\n    },\n    onTabDown (e) {\n      VSelect.methods.onTabDown.call(this, e)\n      this.updateSelf()\n    },\n    setSelectedItems () {\n      VSelect.methods.setSelectedItems.call(this)\n\n      // #4273 Don't replace if searching\n      // #4403 Don't replace if focused\n      if (!this.isFocused) this.setSearch()\n    },\n    setSearch () {\n      // Wait for nextTick so selectedItem\n      // has had time to update\n      this.$nextTick(() => {\n        this.internalSearch = (\n          !this.selectedItems.length ||\n          this.multiple ||\n          this.hasSlot\n        )\n          ? null\n          : this.getText(this.selectedItem)\n      })\n    },\n    updateSelf () {\n      this.updateAutocomplete()\n    },\n    updateAutocomplete () {\n      if (!this.searchIsDirty &&\n        !this.internalValue\n      ) return\n\n      if (!this.valueComparator(\n        this.internalSearch,\n        this.getValue(this.internalValue)\n      )) {\n        this.setSearch()\n      }\n    }\n  }\n}\n"",""import VAutocomplete from './VAutocomplete'\n\nexport { VAutocomplete }\nexport default VAutocomplete\n"",""import '../../stylus/components/_avatars.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable).extend({\n  name: 'v-avatar',\n\n  functional: true,\n\n  props: {\n    // TODO: inherit these\n    color: String,\n\n    size: {\n      type: [Number, String],\n      default: 48\n    },\n    tile: Boolean\n  },\n\n  render (h, { data, props, children }): VNode {\n    data.staticClass = (`v-avatar ${data.staticClass || ''}`).trim()\n\n    if (props.tile) data.staticClass += ' v-avatar--tile'\n\n    const size = convertToUnit(props.size)\n    data.style = {\n      height: size,\n      width: size,\n      ...data.style\n    }\n\n    return h('div', Colorable.options.methods.setBackgroundColor(props.color, data), children)\n  }\n})\n"",""import VAvatar from './VAvatar'\n\nexport { VAvatar }\nexport default VAvatar\n"",""// Styles\nimport '../../stylus/components/_badges.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Toggleable from '../../mixins/toggleable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\nimport Transitionable from '../../mixins/transitionable'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n  Colorable,\n  Toggleable,\n  PositionableFactory(['left', 'bottom']),\n  Transitionable\n/* @vue/component */\n).extend({\n  name: 'v-badge',\n\n  props: {\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    overlap: Boolean,\n    transition: {\n      type: String,\n      default: 'fab-transition'\n    },\n    value: {\n      default: true\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-badge--bottom': this.bottom,\n        'v-badge--left': this.left,\n        'v-badge--overlap': this.overlap\n      }\n    }\n  },\n\n  render (h): VNode {\n    const badge = this.$slots.badge ? [h('span', this.setBackgroundColor(this.color, {\n      staticClass: 'v-badge__badge',\n      attrs: this.$attrs,\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }] as any\n    }), this.$slots.badge)] as any : null\n\n    return h('span', {\n      staticClass: 'v-badge',\n      'class': this.classes\n    }, [\n      this.$slots.default,\n      h('transition', {\n        props: {\n          name: this.transition,\n          origin: this.origin,\n          mode: this.mode\n        }\n      }, badge)\n    ])\n  }\n})\n"",""import VBadge from './VBadge'\n\nexport { VBadge }\nexport default VBadge\n"",""// Styles\nimport '../../stylus/components/_bottom-navs.styl'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport ButtonGroup from '../../mixins/button-group'\nimport Colorable from '../../mixins/colorable'\n\n// Util\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nexport default mixins(\n  Applicationable('bottom', [\n    'height',\n    'value'\n  ]),\n  Colorable\n  /* @vue/component */\n).extend({\n  name: 'v-bottom-nav',\n\n  props: {\n    active: [Number, String],\n    mandatory: Boolean,\n    height: {\n      default: 56,\n      type: [Number, String],\n      validator: (v: string | number): boolean => !isNaN(parseInt(v))\n    },\n    shift: Boolean,\n    value: null as any as PropValidator<any>\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-bottom-nav--absolute': this.absolute,\n        'v-bottom-nav--fixed': !this.absolute && (this.app || this.fixed),\n        'v-bottom-nav--shift': this.shift,\n        'v-bottom-nav--active': this.value\n      }\n    },\n    computedHeight (): number {\n      return parseInt(this.height)\n    }\n  },\n\n  methods: {\n    updateApplication (): number {\n      return !this.value\n        ? 0\n        : this.computedHeight\n    },\n    updateValue (val: any) {\n      this.$emit('update:active', val)\n    }\n  },\n\n  render (h): VNode {\n    return h(ButtonGroup, this.setBackgroundColor(this.color, {\n      staticClass: 'v-bottom-nav',\n      class: this.classes,\n      style: {\n        height: `${parseInt(this.computedHeight)}px`\n      },\n      props: {\n        mandatory: Boolean(this.mandatory || this.active !== undefined),\n        value: this.active\n      },\n      on: { change: this.updateValue }\n    }), this.$slots.default)\n  }\n})\n"",""import VBottomNav from './VBottomNav'\n\nexport { VBottomNav }\nexport default VBottomNav\n"",""import '../../stylus/components/_bottom-sheets.styl'\n\nimport VDialog from '../VDialog/VDialog'\n\n/* @vue/component */\nexport default {\n  name: 'v-bottom-sheet',\n\n  props: {\n    disabled: Boolean,\n    fullWidth: Boolean,\n    hideOverlay: Boolean,\n    inset: Boolean,\n    lazy: Boolean,\n    maxWidth: {\n      type: [String, Number],\n      default: 'auto'\n    },\n    persistent: Boolean,\n    value: null\n  },\n\n  render (h) {\n    const activator = h('template', {\n      slot: 'activator'\n    }, this.$slots.activator)\n\n    const contentClass = [\n      'v-bottom-sheet',\n      this.inset ? 'v-bottom-sheet--inset' : ''\n    ].join(' ')\n\n    return h(VDialog, {\n      attrs: {\n        ...this.$props\n      },\n      on: {\n        ...this.$listeners\n      },\n      props: {\n        contentClass,\n        noClickAnimation: true,\n        transition: 'bottom-sheet-transition',\n        value: this.value\n      }\n    }, [activator, this.$slots.default])\n  }\n}\n"",""import VBottomSheet from './VBottomSheet'\n\nexport { VBottomSheet }\nexport default VBottomSheet\n"",""// Styles\nimport '../../stylus/components/_breadcrumbs.styl'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport { VBreadcrumbsDivider, VBreadcrumbsItem } from '.'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { deprecate } from '../../util/console'\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n  Themeable\n  /* @vue/component */\n).extend({\n  name: 'v-breadcrumbs',\n\n  props: {\n    divider: {\n      type: String,\n      default: '/'\n    },\n    items: {\n      type: Array,\n      default: () => ([])\n    } as PropValidator<any[]>,\n    large: Boolean,\n    justifyCenter: Boolean,\n    justifyEnd: Boolean\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-breadcrumbs--large': this.large,\n        'justify-center': this.justifyCenter,\n        'justify-end': this.justifyEnd,\n        ...this.themeClasses\n      }\n    }\n  },\n\n  mounted () {\n    if (this.justifyCenter) deprecate('justify-center', 'class=\""justify-center\""', this)\n    if (this.justifyEnd) deprecate('justify-end', 'class=\""justify-end\""', this)\n    if (this.$slots.default) deprecate('default slot', ':items and scoped slot \""item\""', this)\n  },\n\n  methods: {\n    /* @deprecated */\n    genChildren /* istanbul ignore next */ () {\n      if (!this.$slots.default) return undefined\n\n      const children = []\n\n      let createDividers = false\n      for (let i = 0; i < this.$slots.default.length; i++) {\n        const elm = this.$slots.default[i]\n\n        if (\n          !elm.componentOptions ||\n          elm.componentOptions.Ctor.options.name !== 'v-breadcrumbs-item'\n        ) {\n          children.push(elm)\n        } else {\n          if (createDividers) {\n            children.push(this.genDivider())\n          }\n          children.push(elm)\n          createDividers = true\n        }\n      }\n\n      return children\n    },\n    genDivider () {\n      return this.$createElement(VBreadcrumbsDivider, this.$slots.divider ? this.$slots.divider : this.divider)\n    },\n    genItems () {\n      const items = []\n      const hasSlot = !!this.$scopedSlots.item\n\n      for (let i = 0; i < this.items.length; i++) {\n        const item = this.items[i]\n\n        if (hasSlot) items.push(this.$scopedSlots.item({ item }))\n        else items.push(this.$createElement(VBreadcrumbsItem, { key: item.text, props: item }, [item.text]))\n\n        if (i < this.items.length - 1) items.push(this.genDivider())\n      }\n\n      return items\n    }\n  },\n\n  render (h): VNode {\n    const children = this.$slots.default ? this.genChildren() : this.genItems()\n\n    return h('ul', {\n      staticClass: 'v-breadcrumbs',\n      'class': this.classes\n    }, children)\n  }\n})\n"",""import Routable from '../../mixins/routable'\n\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(Routable).extend({\n  name: 'v-breadcrumbs-item',\n\n  props: {\n    // In a breadcrumb, the currently\n    // active item should be dimmed\n    activeClass: {\n      type: String,\n      default: 'v-breadcrumbs__item--disabled'\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-breadcrumbs__item': true,\n        [this.activeClass]: this.disabled\n      }\n    }\n  },\n\n  render (h): VNode {\n    const { tag, data } = this.generateRouteLink(this.classes)\n\n    return h('li', [\n      h(tag, data, this.$slots.default)\n    ])\n  }\n})\n"",""import VBreadcrumbs from './VBreadcrumbs'\nimport VBreadcrumbsItem from './VBreadcrumbsItem'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VBreadcrumbsDivider = createSimpleFunctional('v-breadcrumbs__divider', 'li')\n\nexport { VBreadcrumbs, VBreadcrumbsItem, VBreadcrumbsDivider }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VBreadcrumbs,\n    VBreadcrumbsItem,\n    VBreadcrumbsDivider\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_buttons.styl'\n\n// Types\nimport { VNode, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport mixins from '../../util/mixins'\nimport { RippleOptions } from '../../directives/ripple'\n\n// Components\nimport VProgressCircular from '../VProgressCircular'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Positionable from '../../mixins/positionable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default mixins(\n  Colorable,\n  Routable,\n  Positionable,\n  Themeable,\n  GroupableFactory('btnToggle'),\n  ToggleableFactory('inputValue')\n  /* @vue/component */\n).extend({\n  name: 'v-btn',\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'v-btn--active'\n    },\n    block: Boolean,\n    depressed: Boolean,\n    fab: Boolean,\n    flat: Boolean,\n    icon: Boolean,\n    large: Boolean,\n    loading: Boolean,\n    outline: Boolean,\n    ripple: {\n      type: [Boolean, Object],\n      default: null\n    },\n    round: Boolean,\n    small: Boolean,\n    tag: {\n      type: String,\n      default: 'button'\n    },\n    type: {\n      type: String,\n      default: 'button'\n    },\n    value: null as any as PropValidator<any>\n  },\n\n  computed: {\n    classes (): any {\n      return {\n        'v-btn': true,\n        [this.activeClass]: this.isActive,\n        'v-btn--absolute': this.absolute,\n        'v-btn--block': this.block,\n        'v-btn--bottom': this.bottom,\n        'v-btn--disabled': this.disabled,\n        'v-btn--flat': this.flat,\n        'v-btn--floating': this.fab,\n        'v-btn--fixed': this.fixed,\n        'v-btn--icon': this.icon,\n        'v-btn--large': this.large,\n        'v-btn--left': this.left,\n        'v-btn--loader': this.loading,\n        'v-btn--outline': this.outline,\n        'v-btn--depressed': (this.depressed && !this.flat) || this.outline,\n        'v-btn--right': this.right,\n        'v-btn--round': this.round,\n        'v-btn--router': this.to,\n        'v-btn--small': this.small,\n        'v-btn--top': this.top,\n        ...this.themeClasses\n      }\n    },\n    computedRipple (): RippleOptions | boolean {\n      const defaultRipple = this.icon || this.fab ? { circle: true } : true\n      if (this.disabled) return false\n      else return this.ripple !== null ? this.ripple : defaultRipple\n    }\n  },\n\n  watch: {\n    '$route': 'onRouteChange'\n  },\n\n  methods: {\n    // Prevent focus to match md spec\n    click (e: MouseEvent): void {\n      !this.fab &&\n      e.detail &&\n      this.$el.blur()\n\n      this.$emit('click', e)\n\n      this.btnToggle && this.toggle()\n    },\n    genContent (): VNode {\n      return this.$createElement(\n        'div',\n        { 'class': 'v-btn__content' },\n        [this.$slots.default]\n      )\n    },\n    genLoader (): VNode {\n      const children: VNodeChildren = []\n\n      if (!this.$slots.loader) {\n        children.push(this.$createElement(VProgressCircular, {\n          props: {\n            indeterminate: true,\n            size: 23,\n            width: 2\n          }\n        }))\n      } else {\n        children.push(this.$slots.loader)\n      }\n\n      return this.$createElement('span', { 'class': 'v-btn__loading' }, children)\n    },\n    onRouteChange () {\n      if (!this.to || !this.$refs.link) return\n\n      const path = `_vnode.data.class.${this.activeClass}`\n\n      this.$nextTick(() => {\n        if (getObjectValueByPath(this.$refs.link, path)) {\n          this.toggle()\n        }\n      })\n    }\n  },\n\n  render (h): VNode {\n    const setColor = (!this.outline && !this.flat) ? this.setBackgroundColor : this.setTextColor\n    const { tag, data } = this.generateRouteLink(this.classes)\n    const children = [this.genContent()]\n\n    tag === 'button' && (data.attrs!.type = this.type)\n    this.loading && children.push(this.genLoader())\n\n    data.attrs!.value = ['string', 'number'].includes(typeof this.value)\n      ? this.value\n      : JSON.stringify(this.value)\n\n    if (this.btnToggle) {\n      data.ref = 'link'\n    }\n\n    return h(tag, setColor(this.color, data), children)\n  }\n})\n"",""import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n"",""// Styles\nimport '../../stylus/components/_button-toggle.styl'\n\n// Mixins\nimport ButtonGroup from '../../mixins/button-group'\n\n/* @vue/component */\nexport default ButtonGroup.extend({\n  name: 'v-btn-toggle',\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'v-btn--active'\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        ...ButtonGroup.options.computed.classes.call(this),\n        'v-btn-toggle': true,\n        'v-btn-toggle--only-child': this.selectedItems.length === 1,\n        'v-btn-toggle--selected': this.selectedItems.length > 0\n      }\n    }\n  }\n})\n"",""import VBtnToggle from './VBtnToggle'\n\nexport { VBtnToggle }\nexport default VBtnToggle\n"",""// Styles\nimport '../../stylus/components/_cards.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Measurable from '../../mixins/measurable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n  Colorable,\n  Measurable,\n  Routable,\n  Themeable\n).extend({\n  name: 'v-card',\n\n  props: {\n    flat: Boolean,\n    hover: Boolean,\n    img: String,\n    raised: Boolean,\n    tag: {\n      type: String,\n      default: 'div'\n    },\n    tile: Boolean\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-card': true,\n        'v-card--flat': this.flat,\n        'v-card--hover': this.hover,\n        'v-card--raised': this.raised,\n        'v-card--tile': this.tile,\n        ...this.themeClasses\n      }\n    },\n    styles (): object {\n      const style: Record<string, any> = {\n        height: convertToUnit(this.height)\n      }\n\n      if (this.img) {\n        style.background = `url(\""${this.img}\"") center center / cover no-repeat`\n      }\n\n      if (this.height) style.height = convertToUnit(this.height)\n      if (this.maxHeight) style.maxHeight = convertToUnit(this.maxHeight)\n      if (this.maxWidth) style.maxWidth = convertToUnit(this.maxWidth)\n      if (this.width) style.width = convertToUnit(this.width)\n\n      return style\n    }\n  },\n\n  render (h): VNode {\n    const { tag, data } = this.generateRouteLink(this.classes)\n\n    data.style = this.styles\n\n    return h(tag, this.setBackgroundColor(this.color, data), this.$slots.default)\n  }\n})\n"",""// Components\nimport VImg from '../VImg/VImg'\n\n// Utils\nimport { deprecate } from '../../util/console'\n\n/* istanbul ignore next */\n/* @vue/component */\nexport default VImg.extend({\n  name: 'v-card-media',\n\n  mounted () {\n    deprecate('v-card-media', this.src ? 'v-img' : 'v-responsive', this)\n  }\n})\n"",""// Types\nimport Vue, { VNode } from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n  name: 'v-card-title',\n\n  functional: true,\n\n  props: {\n    primaryTitle: Boolean\n  },\n\n  render (h, { data, props, children }): VNode {\n    data.staticClass = (`v-card__title ${data.staticClass || ''}`).trim()\n\n    if (props.primaryTitle) data.staticClass += ' v-card__title--primary'\n\n    return h('div', data, children)\n  }\n})\n"",""import { createSimpleFunctional } from '../../util/helpers'\nimport VCard from './VCard'\nimport VCardMedia from './VCardMedia'\nimport VCardTitle from './VCardTitle'\nimport Vue from 'vue'\n\nconst VCardActions = Vue.extend(createSimpleFunctional('v-card__actions'))\nconst VCardText = Vue.extend(createSimpleFunctional('v-card__text'))\n\nexport { VCard, VCardMedia, VCardTitle, VCardActions, VCardText }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VCard,\n    VCardMedia,\n    VCardTitle,\n    VCardActions,\n    VCardText\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_carousel.styl'\n\n// Extensions\nimport VWindow from '../VWindow/VWindow'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\n// TODO: Move this into core components v2.0\nimport ButtonGroup from '../../mixins/button-group'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\nimport { deprecate } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport { VNodeDirective } from 'vue/types/vnode'\n\nexport default VWindow.extend({\n  name: 'v-carousel',\n\n  props: {\n    cycle: {\n      type: Boolean,\n      default: true\n    },\n    delimiterIcon: {\n      type: String,\n      default: '$vuetify.icons.delimiter'\n    },\n    height: {\n      type: [Number, String],\n      default: 500\n    },\n    hideControls: Boolean,\n    hideDelimiters: Boolean,\n    interval: {\n      type: [Number, String],\n      default: 6000,\n      validator: (value: string | number) => value > 0\n    },\n    mandatory: {\n      type: Boolean,\n      default: true\n    },\n    nextIcon: {\n      type: [Boolean, String],\n      default: '$vuetify.icons.next'\n    },\n    prevIcon: {\n      type: [Boolean, String],\n      default: '$vuetify.icons.prev'\n    }\n  },\n\n  data () {\n    return {\n      changedByControls: false,\n      internalHeight: this.height,\n      slideTimeout: undefined as number | undefined\n    }\n  },\n\n  computed: {\n    isDark (): boolean {\n      return this.dark || !this.light\n    }\n  },\n\n  watch: {\n    internalValue (val) {\n      this.restartTimeout()\n      /* @deprecate */\n      /* istanbul ignore else */\n      if (!this.$listeners['input']) return\n\n      this.$emit('input', val)\n    },\n    interval: 'restartTimeout',\n    cycle (val) {\n      if (val) {\n        this.restartTimeout()\n      } else {\n        clearTimeout(this.slideTimeout)\n        this.slideTimeout = undefined\n      }\n    }\n  },\n\n  mounted () {\n    /* @deprecate */\n    /* istanbul ignore next */\n    if (this.$listeners['input']) {\n      deprecate('@input', '@change', this)\n    }\n    this.startTimeout()\n  },\n\n  methods: {\n    genDelimiters (): VNode {\n      return this.$createElement('div', {\n        staticClass: 'v-carousel__controls'\n      }, [this.genItems()])\n    },\n    genIcon (\n      direction: 'prev' | 'next',\n      icon: string,\n      fn: () => void\n    ): VNode {\n      return this.$createElement('div', {\n        staticClass: `v-carousel__${direction}`\n      }, [\n        this.$createElement(VBtn, {\n          props: {\n            icon: true\n          },\n          on: { click: fn }\n        }, [\n          this.$createElement(VIcon, {\n            props: { 'size': '46px' }\n          }, icon)\n        ])\n      ])\n    },\n    genIcons (): VNode[] {\n      const icons = []\n\n      const prevIcon = this.$vuetify.rtl\n        ? this.nextIcon\n        : this.prevIcon\n\n      if (prevIcon && typeof prevIcon === 'string') {\n        icons.push(this.genIcon('prev', prevIcon, this.prev))\n      }\n\n      const nextIcon = this.$vuetify.rtl\n        ? this.prevIcon\n        : this.nextIcon\n\n      if (nextIcon && typeof nextIcon === 'string') {\n        icons.push(this.genIcon('next', nextIcon, this.next))\n      }\n\n      return icons\n    },\n    genItems (): VNode {\n      const length = this.items.length\n      const children = []\n\n      for (let i = 0; i < length; i++) {\n        const child = this.$createElement(VBtn, {\n          class: {\n            'v-carousel__controls__item': true\n          },\n          props: {\n            icon: true,\n            small: true\n          }\n        }, [\n          this.$createElement(VIcon, {\n            props: { size: 18 }\n          }, this.delimiterIcon)\n        ])\n\n        children.push(child)\n      }\n\n      return this.$createElement(ButtonGroup, {\n        props: {\n          value: this.internalValue\n        },\n        on: {\n          change: (val: any) => {\n            this.changedByControls = true\n            this.internalValue = val\n          }\n        }\n      }, children)\n    },\n    restartTimeout () {\n      this.slideTimeout && clearTimeout(this.slideTimeout)\n      this.slideTimeout = undefined\n\n      const raf = requestAnimationFrame || setTimeout\n      raf(this.startTimeout)\n    },\n    startTimeout () {\n      if (!this.cycle) return\n\n      this.slideTimeout = window.setTimeout(this.next, +this.interval > 0 ? +this.interval : 6000)\n    },\n    updateReverse (val: number, oldVal: number) {\n      if (this.changedByControls) {\n        this.changedByControls = false\n\n        VWindow.options.methods.updateReverse.call(this, val, oldVal)\n      }\n    }\n  },\n\n  render (h): VNode {\n    const children = []\n    const data = {\n      staticClass: 'v-window v-carousel',\n      style: {\n        height: convertToUnit(this.height)\n      },\n      directives: [] as VNodeDirective[]\n    }\n\n    if (!this.touchless) {\n      data.directives.push({\n        name: 'touch',\n        value: {\n          left: this.next,\n          right: this.prev\n        }\n      } as VNodeDirective)\n    }\n\n    if (!this.hideControls) {\n      children.push(this.genIcons())\n    }\n\n    if (!this.hideDelimiters) {\n      children.push(this.genDelimiters())\n    }\n\n    return h('div', data, [children, this.genContainer()])\n  }\n})\n"",""// Extensions\nimport VWindowItem from '../VWindow/VWindowItem'\n\n// Components\nimport { VImg } from '../VImg'\n\n/* @vue/component */\nexport default VWindowItem.extend({\n  name: 'v-carousel-item',\n\n  inheritAttrs: false,\n\n  methods: {\n    genDefaultSlot () {\n      return [\n        this.$createElement(VImg, {\n          staticClass: 'v-carousel__item',\n          props: {\n            ...this.$attrs,\n            height: this.windowGroup.internalHeight\n          },\n          on: this.$listeners\n        }, this.$slots.default)\n      ]\n    },\n    onBeforeEnter () { /* noop */ },\n    onEnter () { /* noop */ },\n    onAfterEnter () { /* noop */ },\n    onBeforeLeave () { /* noop */ },\n    onEnterCancelled () { /* noop */ }\n  }\n})\n"",""import VCarousel from './VCarousel'\nimport VCarouselItem from './VCarouselItem'\n\nexport { VCarousel, VCarouselItem }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VCarousel,\n    VCarouselItem\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_selection-controls.styl'\n\n// Components\nimport VIcon from '../VIcon'\n// import { VFadeTransition } from '../transitions'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n/* @vue/component */\nexport default {\n  name: 'v-checkbox',\n\n  mixins: [\n    Selectable\n  ],\n\n  props: {\n    indeterminate: Boolean,\n    indeterminateIcon: {\n      type: String,\n      default: '$vuetify.icons.checkboxIndeterminate'\n    },\n    onIcon: {\n      type: String,\n      default: '$vuetify.icons.checkboxOn'\n    },\n    offIcon: {\n      type: String,\n      default: '$vuetify.icons.checkboxOff'\n    }\n  },\n\n  data: vm => ({\n    inputIndeterminate: vm.indeterminate\n  }),\n\n  computed: {\n    classes () {\n      return {\n        'v-input--selection-controls': true,\n        'v-input--checkbox': true\n      }\n    },\n    computedIcon () {\n      if (this.inputIndeterminate) {\n        return this.indeterminateIcon\n      } else if (this.isActive) {\n        return this.onIcon\n      } else {\n        return this.offIcon\n      }\n    }\n  },\n\n  watch: {\n    indeterminate (val) {\n      this.inputIndeterminate = val\n    }\n  },\n\n  methods: {\n    genCheckbox () {\n      return this.$createElement('div', {\n        staticClass: 'v-input--selection-controls__input'\n      }, [\n        this.genInput('checkbox', {\n          ...this.$attrs,\n          'aria-checked': this.inputIndeterminate\n            ? 'mixed'\n            : this.isActive.toString()\n        }),\n        !this.disabled && this.genRipple(this.setTextColor(this.computedColor)),\n        this.$createElement(VIcon, this.setTextColor(this.computedColor, {\n          props: {\n            dark: this.dark,\n            light: this.light\n          }\n        }), this.computedIcon)\n      ])\n    },\n    genDefaultSlot () {\n      return [\n        this.genCheckbox(),\n        this.genLabel()\n      ]\n    }\n  }\n}\n"",""import VCheckbox from './VCheckbox'\n\nexport { VCheckbox }\nexport default VCheckbox\n"",""import '../../stylus/components/_chips.styl'\n\n// Types\nimport { CreateElement, VNode, VNodeChildren } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\nimport Toggleable from '../../mixins/toggleable'\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable, Toggleable).extend({\n  name: 'v-chip',\n\n  props: {\n    close: Boolean,\n    disabled: Boolean,\n    label: Boolean,\n    outline: Boolean,\n    // Used for selects/tagging\n    selected: Boolean,\n    small: Boolean,\n    textColor: String,\n    value: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-chip--disabled': this.disabled,\n        'v-chip--selected': this.selected && !this.disabled,\n        'v-chip--label': this.label,\n        'v-chip--outline': this.outline,\n        'v-chip--small': this.small,\n        'v-chip--removable': this.close,\n        ...this.themeClasses\n      }\n    }\n  },\n\n  methods: {\n    genClose (h: CreateElement): VNode {\n      const data = {\n        staticClass: 'v-chip__close',\n        on: {\n          click: (e: Event) => {\n            e.stopPropagation()\n\n            this.$emit('input', false)\n          }\n        }\n      }\n\n      return h('div', data, [\n        h(VIcon, '$vuetify.icons.delete')\n      ])\n    },\n    genContent (h: CreateElement): VNode {\n      const children: VNodeChildren = [this.$slots.default]\n\n      this.close && children.push(this.genClose(h))\n\n      return h('span', {\n        staticClass: 'v-chip__content'\n      }, children)\n    }\n  },\n\n  render (h): VNode {\n    const data = this.setBackgroundColor(this.color, {\n      staticClass: 'v-chip',\n      'class': this.classes,\n      attrs: { tabindex: this.disabled ? -1 : 0 },\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }] as any,\n      on: this.$listeners\n    })\n\n    const color = this.textColor || (this.outline && this.color)\n    return h('span', this.setTextColor(color, data), [this.genContent(h)])\n  }\n})\n"",""import VChip from './VChip'\n\nexport { VChip }\nexport default VChip\n"",""// Styles\nimport '../../stylus/components/_autocompletes.styl'\n\n// Extensions\nimport VSelect from '../VSelect/VSelect'\nimport VAutocomplete from '../VAutocomplete/VAutocomplete'\n\n// Utils\nimport { keyCodes } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-combobox',\n\n  extends: VAutocomplete,\n\n  props: {\n    delimiters: {\n      type: Array,\n      default: () => ([])\n    },\n    returnObject: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  data: () => ({\n    editingIndex: -1\n  }),\n\n  computed: {\n    counterValue () {\n      return this.multiple\n        ? this.selectedItems.length\n        : (this.internalSearch || '').toString().length\n    },\n    hasSlot () {\n      return VSelect.computed.hasSlot.call(this) || this.multiple\n    },\n    isAnyValueAllowed () {\n      return true\n    },\n    menuCanShow () {\n      if (!this.isFocused) return false\n\n      return (this.displayedItemsCount > 0) ||\n        (!!this.$slots['no-data'] && !this.hideNoData)\n    }\n  },\n\n  methods: {\n    onFilteredItemsChanged () {\n      // nop\n    },\n    onInternalSearchChanged (val) {\n      if (\n        val &&\n        this.multiple &&\n        this.delimiters\n      ) {\n        const delimiter = this.delimiters.find(d => val.endsWith(d))\n        if (delimiter == null) return\n\n        this.internalSearch = val.slice(0, val.length - delimiter.length)\n        this.updateTags()\n      }\n\n      this.updateMenuDimensions()\n    },\n    genChipSelection (item, index) {\n      const chip = VSelect.methods.genChipSelection.call(this, item, index)\n\n      // Allow user to update an existing value\n      if (this.multiple) {\n        chip.componentOptions.listeners.dblclick = () => {\n          this.editingIndex = index\n          this.internalSearch = this.getText(item)\n          this.selectedIndex = -1\n        }\n      }\n\n      return chip\n    },\n    onChipInput (item) {\n      VSelect.methods.onChipInput.call(this, item)\n\n      this.editingIndex = -1\n    },\n    // Requires a manual definition\n    // to overwrite removal in v-autocomplete\n    onEnterDown (e) {\n      e.preventDefault()\n\n      VSelect.methods.onEnterDown.call(this)\n\n      // If has menu index, let v-select-list handle\n      if (this.getMenuIndex() > -1) return\n\n      this.updateSelf()\n    },\n    onKeyDown (e) {\n      const keyCode = e.keyCode\n\n      VSelect.methods.onKeyDown.call(this, e)\n\n      // If user is at selection index of 0\n      // create a new tag\n      if (this.multiple &&\n        keyCode === keyCodes.left &&\n        this.$refs.input.selectionStart === 0\n      ) {\n        this.updateSelf()\n      }\n\n      // The ordering is important here\n      // allows new value to be updated\n      // and then moves the index to the\n      // proper location\n      this.changeSelectedIndex(keyCode)\n    },\n    onTabDown (e) {\n      // When adding tags, if searching and\n      // there is not a filtered options,\n      // add the value to the tags list\n      if (this.multiple &&\n        this.internalSearch &&\n        this.getMenuIndex() === -1\n      ) {\n        e.preventDefault()\n        e.stopPropagation()\n\n        return this.updateTags()\n      }\n\n      VAutocomplete.methods.onTabDown.call(this, e)\n    },\n    selectItem (item) {\n      // Currently only supports items:<string[]>\n      if (this.editingIndex > -1) {\n        this.updateEditing()\n      } else {\n        VSelect.methods.selectItem.call(this, item)\n      }\n    },\n    setSelectedItems () {\n      if (this.internalValue == null ||\n        this.internalValue === ''\n      ) {\n        this.selectedItems = []\n      } else {\n        this.selectedItems = this.multiple ? this.internalValue : [this.internalValue]\n      }\n    },\n    setValue (value = this.internalSearch) {\n      VSelect.methods.setValue.call(this, value)\n    },\n    updateEditing () {\n      const value = this.internalValue.slice()\n      value[this.editingIndex] = this.internalSearch\n\n      this.setValue(value)\n\n      this.editingIndex = -1\n    },\n    updateCombobox () {\n      const isUsingSlot = Boolean(this.$scopedSlots.selection) || this.hasChips\n\n      // If search is not dirty and is\n      // using slot, do nothing\n      if (isUsingSlot && !this.searchIsDirty) return\n\n      // The internal search is not matching\n      // the internal value, update the input\n      if (this.internalSearch !== this.getText(this.internalValue)) this.setValue()\n\n      // Reset search if using slot\n      // to avoid a double input\n      if (isUsingSlot) this.internalSearch = undefined\n    },\n    updateSelf () {\n      this.multiple ? this.updateTags() : this.updateCombobox()\n    },\n    updateTags () {\n      const menuIndex = this.getMenuIndex()\n\n      // If the user is not searching\n      // and no menu item is selected\n      // do nothing\n      if (menuIndex < 0 &&\n        !this.searchIsDirty\n      ) return\n\n      if (this.editingIndex > -1) {\n        return this.updateEditing()\n      }\n\n      const index = this.selectedItems.indexOf(this.internalSearch)\n      // If it already exists, do nothing\n      // this might need to change to bring\n      // the duplicated item to the last entered\n      if (index > -1) {\n        const internalValue = this.internalValue.slice()\n        internalValue.splice(index, 1)\n\n        this.setValue(internalValue)\n      }\n\n      // If menu index is greater than 1\n      // the selection is handled elsewhere\n      // TODO: find out where\n      if (menuIndex > -1) return (this.internalSearch = null)\n\n      this.selectItem(this.internalSearch)\n      this.internalSearch = null\n    }\n  }\n}\n"",""import VCombobox from './VCombobox'\n\nexport { VCombobox }\nexport default VCombobox\n"",""// Styles\nimport '../../stylus/components/_counters.styl'\n\n// Mixins\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n/* @vue/component */\nexport default {\n  name: 'v-counter',\n\n  functional: true,\n\n  mixins: [Themeable],\n\n  props: {\n    value: {\n      type: [Number, String],\n      default: ''\n    },\n    max: [Number, String]\n  },\n\n  render (h, ctx) {\n    const { props } = ctx\n    const max = parseInt(props.max, 10)\n    const value = parseInt(props.value, 10)\n    const content = max ? `${value} / ${max}` : props.value\n    const isGreater = max && (value > max)\n\n    return h('div', {\n      staticClass: 'v-counter',\n      class: {\n        'error--text': isGreater,\n        ...functionalThemeClasses(ctx)\n      }\n    }, content)\n  }\n}\n"",""import VCounter from './VCounter'\n\nexport { VCounter }\nexport default VCounter\n"",""import '../../stylus/components/_data-iterator.styl'\n\nimport DataIterable from '../../mixins/data-iterable'\n\n/* @vue/component */\nexport default {\n  name: 'v-data-iterator',\n\n  mixins: [DataIterable],\n\n  inheritAttrs: false,\n\n  props: {\n    contentTag: {\n      type: String,\n      default: 'div'\n    },\n    contentProps: {\n      type: Object,\n      required: false\n    },\n    contentClass: {\n      type: String,\n      required: false\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-data-iterator': true,\n        'v-data-iterator--select-all': this.selectAll !== false,\n        ...this.themeClasses\n      }\n    }\n  },\n\n  created () {\n    this.initPagination()\n  },\n\n  methods: {\n    genContent () {\n      const children = this.genItems()\n\n      const data = {\n        'class': this.contentClass,\n        attrs: this.$attrs,\n        on: this.$listeners,\n        props: this.contentProps\n      }\n\n      return this.$createElement(this.contentTag, data, children)\n    },\n    genEmptyItems (content) {\n      return [this.$createElement('div', {\n        'class': 'text-xs-center',\n        style: 'width: 100%'\n      }, content)]\n    },\n    genFilteredItems () {\n      if (!this.$scopedSlots.item) {\n        return null\n      }\n\n      const items = []\n      for (let index = 0, len = this.filteredItems.length; index < len; ++index) {\n        const item = this.filteredItems[index]\n        const props = this.createProps(item, index)\n        items.push(this.$scopedSlots.item(props))\n      }\n\n      return items\n    },\n    genFooter () {\n      const children = []\n\n      if (this.$slots.footer) {\n        children.push(this.$slots.footer)\n      }\n\n      if (!this.hideActions) {\n        children.push(this.genActions())\n      }\n\n      if (!children.length) return null\n      return this.$createElement('div', children)\n    },\n    genHeader () {\n      const children = []\n\n      if (this.$slots.header) {\n        children.push(this.$slots.header)\n      }\n\n      if (!children.length) return null\n      return this.$createElement('div', children)\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      'class': this.classes\n    }, [\n      this.genHeader(),\n      this.genContent(),\n      this.genFooter()\n    ])\n  }\n}\n"",""import VDataIterator from './VDataIterator'\n\nexport { VDataIterator }\nexport default VDataIterator\n"",""import '../../stylus/components/_tables.styl'\nimport '../../stylus/components/_data-table.styl'\n\nimport DataIterable from '../../mixins/data-iterable'\n\nimport Head from './mixins/head'\nimport Body from './mixins/body'\nimport Foot from './mixins/foot'\nimport Progress from './mixins/progress'\n\nimport {\n  createSimpleFunctional,\n  getObjectValueByPath\n} from '../../util/helpers'\n\n// Importing does not work properly\nconst VTableOverflow = createSimpleFunctional('v-table__overflow')\n\n/* @vue/component */\nexport default {\n  name: 'v-data-table',\n\n  mixins: [DataIterable, Head, Body, Foot, Progress],\n\n  props: {\n    headers: {\n      type: Array,\n      default: () => []\n    },\n    headersLength: {\n      type: Number\n    },\n    headerText: {\n      type: String,\n      default: 'text'\n    },\n    headerKey: {\n      type: String,\n      default: null\n    },\n    hideHeaders: Boolean,\n    rowsPerPageText: {\n      type: String,\n      default: '$vuetify.dataTable.rowsPerPageText'\n    },\n    customFilter: {\n      type: Function,\n      default: (items, search, filter, headers) => {\n        search = search.toString().toLowerCase()\n        if (search.trim() === '') return items\n\n        const props = headers.map(h => h.value)\n\n        return items.filter(item => props.some(prop => filter(getObjectValueByPath(item, prop, item[prop]), search)))\n      }\n    }\n  },\n\n  data () {\n    return {\n      actionsClasses: 'v-datatable__actions',\n      actionsRangeControlsClasses: 'v-datatable__actions__range-controls',\n      actionsSelectClasses: 'v-datatable__actions__select',\n      actionsPaginationClasses: 'v-datatable__actions__pagination'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-datatable v-table': true,\n        'v-datatable--select-all': this.selectAll !== false,\n        ...this.themeClasses\n      }\n    },\n    filteredItems () {\n      return this.filteredItemsImpl(this.headers)\n    },\n    headerColumns () {\n      return this.headersLength || this.headers.length + (this.selectAll !== false)\n    }\n  },\n\n  created () {\n    const firstSortable = this.headers.find(h => (\n      !('sortable' in h) || h.sortable)\n    )\n\n    this.defaultPagination.sortBy = !this.disableInitialSort && firstSortable\n      ? firstSortable.value\n      : null\n\n    this.initPagination()\n  },\n\n  methods: {\n    hasTag (elements, tag) {\n      return Array.isArray(elements) && elements.find(e => e.tag === tag)\n    },\n    genTR (children, data = {}) {\n      return this.$createElement('tr', data, children)\n    }\n  },\n\n  render (h) {\n    const tableOverflow = h(VTableOverflow, {}, [\n      h('table', {\n        'class': this.classes\n      }, [\n        this.genTHead(),\n        this.genTBody(),\n        this.genTFoot()\n      ])\n    ])\n\n    return h('div', [\n      tableOverflow,\n      this.genActionsFooter()\n    ])\n  }\n}\n"",""import '../../stylus/components/_small-dialog.styl'\n\n// Mixins\nimport Returnable from '../../mixins/returnable'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { keyCodes } from '../../util/helpers'\n\nimport VBtn from '../VBtn'\nimport VMenu from '../VMenu'\n\n/* @vue/component */\nexport default {\n  name: 'v-edit-dialog',\n\n  mixins: [Returnable, Themeable],\n\n  props: {\n    cancelText: {\n      default: 'Cancel'\n    },\n    large: Boolean,\n    lazy: Boolean,\n    persistent: Boolean,\n    saveText: {\n      default: 'Save'\n    },\n    transition: {\n      type: String,\n      default: 'slide-x-reverse-transition'\n    }\n  },\n\n  data () {\n    return {\n      isActive: false\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      if (val) {\n        this.$emit('open')\n        setTimeout(this.focus, 50) // Give DOM time to paint\n      } else {\n        this.$emit('close')\n      }\n    }\n  },\n\n  methods: {\n    cancel () {\n      this.isActive = false\n      this.$emit('cancel')\n    },\n    focus () {\n      const input = this.$refs.content.querySelector('input')\n      input && input.focus()\n    },\n    genButton (fn, text) {\n      return this.$createElement(VBtn, {\n        props: {\n          flat: true,\n          color: 'primary',\n          light: true\n        },\n        on: { click: fn }\n      }, text)\n    },\n    genActions () {\n      return this.$createElement('div', {\n        'class': 'v-small-dialog__actions'\n      }, [\n        this.genButton(this.cancel, this.cancelText),\n        this.genButton(() => {\n          this.save(this.returnValue)\n          this.$emit('save')\n        }, this.saveText)\n      ])\n    },\n    genContent () {\n      return this.$createElement('div', {\n        on: {\n          keydown: e => {\n            const input = this.$refs.content.querySelector('input')\n            e.keyCode === keyCodes.esc && this.cancel()\n            if (e.keyCode === keyCodes.enter && input) {\n              this.save(input.value)\n              this.$emit('save')\n            }\n          }\n        },\n        ref: 'content'\n      }, [this.$slots.input])\n    }\n  },\n\n  render (h) {\n    return h(VMenu, {\n      staticClass: 'v-small-dialog',\n      class: this.themeClasses,\n      props: {\n        contentClass: 'v-small-dialog__content',\n        transition: this.transition,\n        origin: 'top right',\n        right: true,\n        value: this.isActive,\n        closeOnClick: !this.persistent,\n        closeOnContentClick: false,\n        lazy: this.lazy,\n        light: this.light,\n        dark: this.dark\n      },\n      on: {\n        input: val => (this.isActive = val)\n      }\n    }, [\n      h('a', {\n        slot: 'activator'\n      }, this.$slots.default),\n      this.genContent(),\n      this.large ? this.genActions() : null\n    ])\n  }\n}\n"",""import { createSimpleFunctional } from '../../util/helpers'\n\nimport VDataTable from './VDataTable'\nimport VEditDialog from './VEditDialog'\n\nconst VTableOverflow = createSimpleFunctional('v-table__overflow')\n\nexport { VDataTable, VEditDialog, VTableOverflow }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VDataTable,\n    VEditDialog,\n    VTableOverflow\n  }\n}\n"",""import ExpandTransitionGenerator from '../../transitions/expand-transition'\n\nimport { getObjectValueByPath } from '../../../util/helpers'\n\n/* @vue/component */\nexport default {\n  methods: {\n    genTBody () {\n      const children = this.genItems()\n\n      return this.$createElement('tbody', children)\n    },\n    genExpandedRow (props) {\n      const children = []\n\n      if (this.isExpanded(props.item)) {\n        const expand = this.$createElement('div', {\n          class: 'v-datatable__expand-content',\n          key: getObjectValueByPath(props.item, this.itemKey)\n        }, [this.$scopedSlots.expand(props)])\n\n        children.push(expand)\n      }\n\n      const transition = this.$createElement('transition-group', {\n        class: 'v-datatable__expand-col',\n        attrs: { colspan: this.headerColumns },\n        props: {\n          tag: 'td'\n        },\n        on: ExpandTransitionGenerator('v-datatable__expand-col--expanded')\n      }, children)\n\n      return this.genTR([transition], { class: 'v-datatable__expand-row' })\n    },\n    genFilteredItems () {\n      if (!this.$scopedSlots.items) {\n        return null\n      }\n\n      const rows = []\n      for (let index = 0, len = this.filteredItems.length; index < len; ++index) {\n        const item = this.filteredItems[index]\n        const props = this.createProps(item, index)\n        const row = this.$scopedSlots.items(props)\n\n        rows.push(this.hasTag(row, 'td')\n          ? this.genTR(row, {\n            key: this.itemKey ? getObjectValueByPath(props.item, this.itemKey) : index,\n            attrs: { active: this.isSelected(item) }\n          })\n          : row)\n\n        if (this.$scopedSlots.expand) {\n          const expandRow = this.genExpandedRow(props)\n          rows.push(expandRow)\n        }\n      }\n\n      return rows\n    },\n    genEmptyItems (content) {\n      if (this.hasTag(content, 'tr')) {\n        return content\n      } else if (this.hasTag(content, 'td')) {\n        return this.genTR(content)\n      } else {\n        return this.genTR([this.$createElement('td', {\n          class: {\n            'text-xs-center': typeof content === 'string'\n          },\n          attrs: { colspan: this.headerColumns }\n        }, content)])\n      }\n    }\n  }\n}\n"",""/* @vue/component */\nexport default {\n  methods: {\n    genTFoot () {\n      if (!this.$slots.footer) {\n        return null\n      }\n\n      const footer = this.$slots.footer\n      const row = this.hasTag(footer, 'td') ? this.genTR(footer) : footer\n\n      return this.$createElement('tfoot', [row])\n    },\n    genActionsFooter () {\n      if (this.hideActions) {\n        return null\n      }\n\n      return this.$createElement('div', {\n        'class': this.classes\n      }, this.genActions())\n    }\n  }\n}\n"",""import { consoleWarn } from '../../../util/console'\n\nimport VCheckbox from '../../VCheckbox'\nimport VIcon from '../../VIcon'\n\n/* @vue/component */\nexport default {\n  props: {\n    sortIcon: {\n      type: String,\n      default: '$vuetify.icons.sort'\n    }\n  },\n\n  methods: {\n    genTHead () {\n      if (this.hideHeaders) return // Exit Early since no headers are needed.\n\n      let children = []\n\n      if (this.$scopedSlots.headers) {\n        const row = this.$scopedSlots.headers({\n          headers: this.headers,\n          indeterminate: this.indeterminate,\n          all: this.everyItem\n        })\n\n        children = [this.hasTag(row, 'th') ? this.genTR(row) : row, this.genTProgress()]\n      } else {\n        const row = this.headers.map((o, i) => this.genHeader(o, this.headerKey ? o[this.headerKey] : i))\n        const checkbox = this.$createElement(VCheckbox, {\n          props: {\n            dark: this.dark,\n            light: this.light,\n            color: this.selectAll === true ? '' : this.selectAll,\n            hideDetails: true,\n            inputValue: this.everyItem,\n            indeterminate: this.indeterminate\n          },\n          on: { change: this.toggle }\n        })\n\n        this.hasSelectAll && row.unshift(this.$createElement('th', [checkbox]))\n\n        children = [this.genTR(row), this.genTProgress()]\n      }\n\n      return this.$createElement('thead', [children])\n    },\n    genHeader (header, key) {\n      const array = [\n        this.$scopedSlots.headerCell\n          ? this.$scopedSlots.headerCell({ header })\n          : header[this.headerText]\n      ]\n\n      return this.$createElement('th', ...this.genHeaderData(header, array, key))\n    },\n    genHeaderData (header, children, key) {\n      const classes = ['column']\n      const data = {\n        key,\n        attrs: {\n          role: 'columnheader',\n          scope: 'col',\n          width: header.width || null,\n          'aria-label': header[this.headerText] || '',\n          'aria-sort': 'none'\n        }\n      }\n\n      if (header.sortable == null || header.sortable) {\n        this.genHeaderSortingData(header, children, data, classes)\n      } else {\n        data.attrs['aria-label'] += ': Not sorted.' // TODO: Localization\n      }\n\n      classes.push(`text-xs-${header.align || 'left'}`)\n      if (Array.isArray(header.class)) {\n        classes.push(...header.class)\n      } else if (header.class) {\n        classes.push(header.class)\n      }\n      data.class = classes\n\n      return [data, children]\n    },\n    genHeaderSortingData (header, children, data, classes) {\n      if (!('value' in header)) {\n        consoleWarn('Headers must have a value property that corresponds to a value in the v-model array', this)\n      }\n\n      data.attrs.tabIndex = 0\n      data.on = {\n        click: () => {\n          this.expanded = {}\n          this.sort(header.value)\n        },\n        keydown: e => {\n          // check for space\n          if (e.keyCode === 32) {\n            e.preventDefault()\n            this.sort(header.value)\n          }\n        }\n      }\n\n      classes.push('sortable')\n      const icon = this.$createElement(VIcon, {\n        props: {\n          small: true\n        }\n      }, this.sortIcon)\n      if (!header.align || header.align === 'left') {\n        children.push(icon)\n      } else {\n        children.unshift(icon)\n      }\n\n      const pagination = this.computedPagination\n      const beingSorted = pagination.sortBy === header.value\n      if (beingSorted) {\n        classes.push('active')\n        if (pagination.descending) {\n          classes.push('desc')\n          data.attrs['aria-sort'] = 'descending'\n          data.attrs['aria-label'] += ': Sorted descending. Activate to remove sorting.' // TODO: Localization\n        } else {\n          classes.push('asc')\n          data.attrs['aria-sort'] = 'ascending'\n          data.attrs['aria-label'] += ': Sorted ascending. Activate to sort descending.' // TODO: Localization\n        }\n      } else {\n        data.attrs['aria-label'] += ': Not sorted. Activate to sort ascending.' // TODO: Localization\n      }\n    }\n  }\n}\n"",""/* @vue/component */\nexport default {\n  methods: {\n    genTProgress () {\n      const col = this.$createElement('th', {\n        staticClass: 'column',\n        attrs: {\n          colspan: this.headerColumns\n        }\n      }, [this.genProgress()])\n\n      return this.genTR([col], {\n        staticClass: 'v-datatable__progress'\n      })\n    }\n  }\n}\n"",""// Components\nimport VDatePickerTitle from './VDatePickerTitle'\nimport VDatePickerHeader from './VDatePickerHeader'\nimport VDatePickerDateTable from './VDatePickerDateTable'\nimport VDatePickerMonthTable from './VDatePickerMonthTable'\nimport VDatePickerYears from './VDatePickerYears'\n\n// Mixins\nimport Picker from '../../mixins/picker'\n\n// Utils\nimport { pad, createNativeLocaleFormatter } from './util'\nimport isDateAllowed from './util/isDateAllowed'\nimport { consoleWarn } from '../../util/console'\n\n/* @vue/component */\nexport default {\n  name: 'v-date-picker',\n\n  mixins: [Picker],\n\n  props: {\n    allowedDates: Function,\n    // Function formatting the day in date picker table\n    dayFormat: {\n      type: Function,\n      default: null\n    },\n    events: {\n      type: [Array, Object, Function],\n      default: () => null\n    },\n    eventColor: {\n      type: [String, Function, Object],\n      default: 'warning'\n    },\n    firstDayOfWeek: {\n      type: [String, Number],\n      default: 0\n    },\n    // Function formatting the tableDate in the day/month table header\n    headerDateFormat: {\n      type: Function,\n      default: null\n    },\n    locale: {\n      type: String,\n      default: 'en-us'\n    },\n    max: String,\n    min: String,\n    // Function formatting month in the months table\n    monthFormat: {\n      type: Function,\n      default: null\n    },\n    multiple: Boolean,\n    nextIcon: {\n      type: String,\n      default: '$vuetify.icons.next'\n    },\n    pickerDate: String,\n    prevIcon: {\n      type: String,\n      default: '$vuetify.icons.prev'\n    },\n    reactive: Boolean,\n    readonly: Boolean,\n    scrollable: Boolean,\n    showCurrent: {\n      type: [Boolean, String],\n      default: true\n    },\n    // Function formatting currently selected date in the picker title\n    titleDateFormat: {\n      type: Function,\n      default: null\n    },\n    type: {\n      type: String,\n      default: 'date',\n      validator: type => ['date', 'month'].includes(type) // TODO: year\n    },\n    value: [Array, String],\n    weekdayFormat: {\n      type: Function,\n      default: null\n    },\n    // Function formatting the year in table header and pickup title\n    yearFormat: {\n      type: Function,\n      default: null\n    },\n    yearIcon: String\n  },\n\n  data () {\n    const now = new Date()\n    return {\n      activePicker: this.type.toUpperCase(),\n      inputDay: null,\n      inputMonth: null,\n      inputYear: null,\n      isReversing: false,\n      now,\n      // tableDate is a string in 'YYYY' / 'YYYY-M' format (leading zero for month is not required)\n      tableDate: (() => {\n        if (this.pickerDate) {\n          return this.pickerDate\n        }\n\n        const date = (this.multiple ? this.value[this.value.length - 1] : this.value) ||\n          `${now.getFullYear()}-${now.getMonth() + 1}`\n        const type = this.type === 'date' ? 'month' : 'year'\n        return this.sanitizeDateString(date, type)\n      })()\n    }\n  },\n\n  computed: {\n    lastValue () {\n      return this.multiple ? this.value[this.value.length - 1] : this.value\n    },\n    selectedMonths () {\n      if (!this.value || !this.value.length || this.type === 'month') {\n        return this.value\n      } else if (this.multiple) {\n        return this.value.map(val => val.substr(0, 7))\n      } else {\n        return this.value.substr(0, 7)\n      }\n    },\n    current () {\n      if (this.showCurrent === true) {\n        return this.sanitizeDateString(`${this.now.getFullYear()}-${this.now.getMonth() + 1}-${this.now.getDate()}`, this.type)\n      }\n\n      return this.showCurrent || null\n    },\n    inputDate () {\n      return this.type === 'date'\n        ? `${this.inputYear}-${pad(this.inputMonth + 1)}-${pad(this.inputDay)}`\n        : `${this.inputYear}-${pad(this.inputMonth + 1)}`\n    },\n    tableMonth () {\n      return (this.pickerDate || this.tableDate).split('-')[1] - 1\n    },\n    tableYear () {\n      return (this.pickerDate || this.tableDate).split('-')[0] * 1\n    },\n    minMonth () {\n      return this.min ? this.sanitizeDateString(this.min, 'month') : null\n    },\n    maxMonth () {\n      return this.max ? this.sanitizeDateString(this.max, 'month') : null\n    },\n    minYear () {\n      return this.min ? this.sanitizeDateString(this.min, 'year') : null\n    },\n    maxYear () {\n      return this.max ? this.sanitizeDateString(this.max, 'year') : null\n    },\n    formatters () {\n      return {\n        year: this.yearFormat || createNativeLocaleFormatter(this.locale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 }),\n        titleDate: this.titleDateFormat || (this.multiple ? this.defaultTitleMultipleDateFormatter : this.defaultTitleDateFormatter)\n      }\n    },\n    defaultTitleMultipleDateFormatter () {\n      if (this.value.length < 2) {\n        return dates => dates.length ? this.defaultTitleDateFormatter(dates[0]) : '0 selected'\n      }\n\n      return dates => `${dates.length} selected`\n    },\n    defaultTitleDateFormatter () {\n      const titleFormats = {\n        year: { year: 'numeric', timeZone: 'UTC' },\n        month: { month: 'long', timeZone: 'UTC' },\n        date: { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' }\n      }\n\n      const titleDateFormatter = createNativeLocaleFormatter(this.locale, titleFormats[this.type], {\n        start: 0,\n        length: { date: 10, month: 7, year: 4 }[this.type]\n      })\n\n      const landscapeFormatter = date => titleDateFormatter(date)\n        .replace(/([^\\d\\s])([\\d])/g, (match, nonDigit, digit) => `${nonDigit} ${digit}`)\n        .replace(', ', ',<br>')\n\n      return this.landscape ? landscapeFormatter : titleDateFormatter\n    }\n  },\n\n  watch: {\n    tableDate (val, prev) {\n      // Make a ISO 8601 strings from val and prev for comparision, otherwise it will incorrectly\n      // compare for example '2000-9' and '2000-10'\n      const sanitizeType = this.type === 'month' ? 'year' : 'month'\n      this.isReversing = this.sanitizeDateString(val, sanitizeType) < this.sanitizeDateString(prev, sanitizeType)\n      this.$emit('update:pickerDate', val)\n    },\n    pickerDate (val) {\n      if (val) {\n        this.tableDate = val\n      } else if (this.lastValue && this.type === 'date') {\n        this.tableDate = this.sanitizeDateString(this.lastValue, 'month')\n      } else if (this.lastValue && this.type === 'month') {\n        this.tableDate = this.sanitizeDateString(this.lastValue, 'year')\n      }\n    },\n    value (newValue, oldValue) {\n      this.checkMultipleProp()\n      this.setInputDate()\n\n      if (!this.multiple && this.value && !this.pickerDate) {\n        this.tableDate = this.sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month')\n      } else if (this.multiple && this.value.length && !oldValue.length && !this.pickerDate) {\n        this.tableDate = this.sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month')\n      }\n    },\n    type (type) {\n      this.activePicker = type.toUpperCase()\n\n      if (this.value && this.value.length) {\n        const output = (this.multiple ? this.value : [this.value])\n          .map(val => this.sanitizeDateString(val, type))\n          .filter(this.isDateAllowed)\n        this.$emit('input', this.multiple ? output : output[0])\n      }\n    }\n  },\n\n  created () {\n    this.checkMultipleProp()\n\n    if (this.pickerDate !== this.tableDate) {\n      this.$emit('update:pickerDate', this.tableDate)\n    }\n    this.setInputDate()\n  },\n\n  methods: {\n    emitInput (newInput) {\n      const output = this.multiple\n        ? (\n          this.value.indexOf(newInput) === -1\n            ? this.value.concat([newInput])\n            : this.value.filter(x => x !== newInput)\n        )\n        : newInput\n\n      this.$emit('input', output)\n      this.multiple || this.$emit('change', newInput)\n    },\n    checkMultipleProp () {\n      if (this.value == null) return\n      const valueType = this.value.constructor.name\n      const expected = this.multiple ? 'Array' : 'String'\n      if (valueType !== expected) {\n        consoleWarn(`Value must be ${this.multiple ? 'an' : 'a'} ${expected}, got ${valueType}`, this)\n      }\n    },\n    isDateAllowed (value) {\n      return isDateAllowed(value, this.min, this.max, this.allowedDates)\n    },\n    yearClick (value) {\n      this.inputYear = value\n      if (this.type === 'month') {\n        this.tableDate = `${value}`\n      } else {\n        this.tableDate = `${value}-${pad(this.tableMonth + 1)}`\n      }\n      this.activePicker = 'MONTH'\n      this.reactive && !this.multiple && this.isDateAllowed(this.inputDate) && this.$emit('input', this.inputDate)\n    },\n    monthClick (value) {\n      this.inputYear = parseInt(value.split('-')[0], 10)\n      this.inputMonth = parseInt(value.split('-')[1], 10) - 1\n      if (this.type === 'date') {\n        this.tableDate = value\n        this.activePicker = 'DATE'\n        this.reactive && !this.multiple && this.isDateAllowed(this.inputDate) && this.$emit('input', this.inputDate)\n      } else {\n        this.emitInput(this.inputDate)\n      }\n    },\n    dateClick (value) {\n      this.inputYear = parseInt(value.split('-')[0], 10)\n      this.inputMonth = parseInt(value.split('-')[1], 10) - 1\n      this.inputDay = parseInt(value.split('-')[2], 10)\n      this.emitInput(this.inputDate)\n    },\n    genPickerTitle () {\n      return this.$createElement(VDatePickerTitle, {\n        props: {\n          date: this.value ? this.formatters.titleDate(this.value) : '',\n          selectingYear: this.activePicker === 'YEAR',\n          year: this.formatters.year(`${this.inputYear}`),\n          yearIcon: this.yearIcon,\n          value: this.multiple ? this.value[0] : this.value\n        },\n        slot: 'title',\n        style: this.readonly ? {\n          'pointer-events': 'none'\n        } : undefined,\n        on: {\n          'update:selectingYear': value => this.activePicker = value ? 'YEAR' : this.type.toUpperCase()\n        }\n      })\n    },\n    genTableHeader () {\n      return this.$createElement(VDatePickerHeader, {\n        props: {\n          nextIcon: this.nextIcon,\n          color: this.color,\n          dark: this.dark,\n          disabled: this.readonly,\n          format: this.headerDateFormat,\n          light: this.light,\n          locale: this.locale,\n          min: this.activePicker === 'DATE' ? this.minMonth : this.minYear,\n          max: this.activePicker === 'DATE' ? this.maxMonth : this.maxYear,\n          prevIcon: this.prevIcon,\n          value: this.activePicker === 'DATE' ? `${this.tableYear}-${pad(this.tableMonth + 1)}` : `${this.tableYear}`\n        },\n        on: {\n          toggle: () => this.activePicker = (this.activePicker === 'DATE' ? 'MONTH' : 'YEAR'),\n          input: value => this.tableDate = value\n        }\n      })\n    },\n    genDateTable () {\n      return this.$createElement(VDatePickerDateTable, {\n        props: {\n          allowedDates: this.allowedDates,\n          color: this.color,\n          current: this.current,\n          dark: this.dark,\n          disabled: this.readonly,\n          events: this.events,\n          eventColor: this.eventColor,\n          firstDayOfWeek: this.firstDayOfWeek,\n          format: this.dayFormat,\n          light: this.light,\n          locale: this.locale,\n          min: this.min,\n          max: this.max,\n          tableDate: `${this.tableYear}-${pad(this.tableMonth + 1)}`,\n          scrollable: this.scrollable,\n          value: this.value,\n          weekdayFormat: this.weekdayFormat\n        },\n        ref: 'table',\n        on: {\n          input: this.dateClick,\n          tableDate: value => this.tableDate = value\n        }\n      })\n    },\n    genMonthTable () {\n      return this.$createElement(VDatePickerMonthTable, {\n        props: {\n          allowedDates: this.type === 'month' ? this.allowedDates : null,\n          color: this.color,\n          current: this.current ? this.sanitizeDateString(this.current, 'month') : null,\n          dark: this.dark,\n          disabled: this.readonly,\n          format: this.monthFormat,\n          light: this.light,\n          locale: this.locale,\n          min: this.minMonth,\n          max: this.maxMonth,\n          scrollable: this.scrollable,\n          value: this.selectedMonths,\n          tableDate: `${this.tableYear}`\n        },\n        ref: 'table',\n        on: {\n          input: this.monthClick,\n          tableDate: value => this.tableDate = value\n        }\n      })\n    },\n    genYears () {\n      return this.$createElement(VDatePickerYears, {\n        props: {\n          color: this.color,\n          format: this.yearFormat,\n          locale: this.locale,\n          min: this.minYear,\n          max: this.maxYear,\n          value: `${this.tableYear}`\n        },\n        on: {\n          input: this.yearClick\n        }\n      })\n    },\n    genPickerBody () {\n      const children = this.activePicker === 'YEAR' ? [\n        this.genYears()\n      ] : [\n        this.genTableHeader(),\n        this.activePicker === 'DATE' ? this.genDateTable() : this.genMonthTable()\n      ]\n\n      return this.$createElement('div', {\n        key: this.activePicker,\n        style: this.readonly ? {\n          'pointer-events': 'none'\n        } : undefined\n      }, children)\n    },\n    // Adds leading zero to month/day if necessary, returns 'YYYY' if type = 'year',\n    // 'YYYY-MM' if 'month' and 'YYYY-MM-DD' if 'date'\n    sanitizeDateString (dateString, type) {\n      const [year, month = 1, date = 1] = dateString.split('-')\n      return `${year}-${pad(month)}-${pad(date)}`.substr(0, { date: 10, month: 7, year: 4 }[type])\n    },\n    setInputDate () {\n      if (this.lastValue) {\n        const array = this.lastValue.split('-')\n        this.inputYear = parseInt(array[0], 10)\n        this.inputMonth = parseInt(array[1], 10) - 1\n        if (this.type === 'date') {\n          this.inputDay = parseInt(array[2], 10)\n        }\n      } else {\n        this.inputYear = this.inputYear || this.now.getFullYear()\n        this.inputMonth = this.inputMonth == null ? this.inputMonth : this.now.getMonth()\n        this.inputDay = this.inputDay || this.now.getDate()\n      }\n    }\n  },\n\n  render () {\n    return this.genPicker('v-picker--date')\n  }\n}\n"",""// Mixins\nimport Colorable from '../../mixins/colorable'\nimport DatePickerTable from './mixins/date-picker-table'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { pad, createNativeLocaleFormatter, monthChange } from './util'\nimport { createRange } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-date-picker-date-table',\n\n  mixins: [\n    Colorable,\n    DatePickerTable,\n    Themeable\n  ],\n\n  props: {\n    events: {\n      type: [Array, Object, Function],\n      default: () => null\n    },\n    eventColor: {\n      type: [String, Function, Object],\n      default: 'warning'\n    },\n    firstDayOfWeek: {\n      type: [String, Number],\n      default: 0\n    },\n    weekdayFormat: {\n      type: Function,\n      default: null\n    }\n  },\n\n  computed: {\n    formatter () {\n      return this.format || createNativeLocaleFormatter(this.locale, { day: 'numeric', timeZone: 'UTC' }, { start: 8, length: 2 })\n    },\n    weekdayFormatter () {\n      return this.weekdayFormat || createNativeLocaleFormatter(this.locale, { weekday: 'narrow', timeZone: 'UTC' })\n    },\n    weekDays () {\n      const first = parseInt(this.firstDayOfWeek, 10)\n\n      return this.weekdayFormatter\n        ? createRange(7).map(i => this.weekdayFormatter(`2017-01-${first + i + 15}`)) // 2017-01-15 is Sunday\n        : createRange(7).map(i => ['S', 'M', 'T', 'W', 'T', 'F', 'S'][(i + first) % 7])\n    }\n  },\n\n  methods: {\n    calculateTableDate (delta) {\n      return monthChange(this.tableDate, Math.sign(delta || 1))\n    },\n    genTHead () {\n      const days = this.weekDays.map(day => this.$createElement('th', day))\n      return this.$createElement('thead', this.genTR(days))\n    },\n    genEvent (date) {\n      let eventColor\n      if (typeof this.eventColor === 'string') {\n        eventColor = this.eventColor\n      } else if (typeof this.eventColor === 'function') {\n        eventColor = this.eventColor(date)\n      } else {\n        eventColor = this.eventColor[date]\n      }\n      return this.$createElement('div', this.setBackgroundColor(eventColor || this.color || 'accent', {\n        staticClass: 'v-date-picker-table__event'\n      }))\n    },\n    // Returns number of the days from the firstDayOfWeek to the first day of the current month\n    weekDaysBeforeFirstDayOfTheMonth () {\n      const firstDayOfTheMonth = new Date(`${this.displayedYear}-${pad(this.displayedMonth + 1)}-01T00:00:00+00:00`)\n      const weekDay = firstDayOfTheMonth.getUTCDay()\n      return (weekDay - parseInt(this.firstDayOfWeek) + 7) % 7\n    },\n    isEvent (date) {\n      if (Array.isArray(this.events)) {\n        return this.events.indexOf(date) > -1\n      } else if (this.events instanceof Function) {\n        return this.events(date)\n      } else {\n        return false\n      }\n    },\n    genTBody () {\n      const children = []\n      const daysInMonth = new Date(this.displayedYear, this.displayedMonth + 1, 0).getDate()\n      let rows = []\n      let day = this.weekDaysBeforeFirstDayOfTheMonth()\n\n      while (day--) rows.push(this.$createElement('td'))\n      for (day = 1; day <= daysInMonth; day++) {\n        const date = `${this.displayedYear}-${pad(this.displayedMonth + 1)}-${pad(day)}`\n\n        rows.push(this.$createElement('td', [\n          this.genButton(date, true),\n          this.isEvent(date) ? this.genEvent(date) : null\n        ]))\n\n        if (rows.length % 7 === 0) {\n          children.push(this.genTR(rows))\n          rows = []\n        }\n      }\n\n      if (rows.length) {\n        children.push(this.genTR(rows))\n      }\n\n      return this.$createElement('tbody', children)\n    },\n    genTR (children) {\n      return [this.$createElement('tr', children)]\n    }\n  },\n\n  render () {\n    return this.genTable('v-date-picker-table v-date-picker-table--date', [\n      this.genTHead(),\n      this.genTBody()\n    ])\n  }\n}\n"",""import '../../stylus/components/_date-picker-header.styl'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { createNativeLocaleFormatter, monthChange } from './util'\n\n/* @vue/component */\nexport default {\n  name: 'v-date-picker-header',\n\n  mixins: [\n    Colorable,\n    Themeable\n  ],\n\n  props: {\n    disabled: Boolean,\n    format: {\n      type: Function,\n      default: null\n    },\n    locale: {\n      type: String,\n      default: 'en-us'\n    },\n    min: String,\n    max: String,\n    nextIcon: {\n      type: String,\n      default: '$vuetify.icons.next'\n    },\n    prevIcon: {\n      type: String,\n      default: '$vuetify.icons.prev'\n    },\n    value: {\n      type: [Number, String],\n      required: true\n    }\n  },\n\n  data () {\n    return {\n      isReversing: false\n    }\n  },\n\n  computed: {\n    formatter () {\n      if (this.format) {\n        return this.format\n      } else if (String(this.value).split('-')[1]) {\n        return createNativeLocaleFormatter(this.locale, { month: 'long', year: 'numeric', timeZone: 'UTC' }, { length: 7 })\n      } else {\n        return createNativeLocaleFormatter(this.locale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n      }\n    }\n  },\n\n  watch: {\n    value (newVal, oldVal) {\n      this.isReversing = newVal < oldVal\n    }\n  },\n\n  methods: {\n    genBtn (change) {\n      const disabled = this.disabled ||\n        (change < 0 && this.min && this.calculateChange(change) < this.min) ||\n        (change > 0 && this.max && this.calculateChange(change) > this.max)\n\n      return this.$createElement(VBtn, {\n        props: {\n          dark: this.dark,\n          disabled,\n          icon: true,\n          light: this.light\n        },\n        nativeOn: {\n          click: e => {\n            e.stopPropagation()\n            this.$emit('input', this.calculateChange(change))\n          }\n        }\n      }, [\n        this.$createElement(VIcon, ((change < 0) === !this.$vuetify.rtl) ? this.prevIcon : this.nextIcon)\n      ])\n    },\n    calculateChange (sign) {\n      const [year, month] = String(this.value).split('-').map(v => 1 * v)\n\n      if (month == null) {\n        return `${year + sign}`\n      } else {\n        return monthChange(String(this.value), sign)\n      }\n    },\n    genHeader () {\n      const color = !this.disabled && (this.color || 'accent')\n      const header = this.$createElement('strong', this.setTextColor(color, {\n        key: String(this.value),\n        on: {\n          click: () => this.$emit('toggle')\n        }\n      }), [this.$slots.default || this.formatter(String(this.value))])\n\n      const transition = this.$createElement('transition', {\n        props: {\n          name: (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition'\n        }\n      }, [header])\n\n      return this.$createElement('div', {\n        staticClass: 'v-date-picker-header__value',\n        class: {\n          'v-date-picker-header__value--disabled': this.disabled\n        }\n      }, [transition])\n    }\n  },\n\n  render () {\n    return this.$createElement('div', {\n      staticClass: 'v-date-picker-header',\n      class: this.themeClasses\n    }, [\n      this.genBtn(-1),\n      this.genHeader(),\n      this.genBtn(+1)\n    ])\n  }\n}\n"",""// Mixins\nimport Colorable from '../../mixins/colorable'\nimport DatePickerTable from './mixins/date-picker-table'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { pad, createNativeLocaleFormatter } from './util'\n\n/* @vue/component */\nexport default {\n  name: 'v-date-picker-month-table',\n\n  mixins: [\n    Colorable,\n    DatePickerTable,\n    Themeable\n  ],\n\n  computed: {\n    formatter () {\n      return this.format || createNativeLocaleFormatter(this.locale, { month: 'short', timeZone: 'UTC' }, { start: 5, length: 2 })\n    }\n  },\n\n  methods: {\n    calculateTableDate (delta) {\n      return `${parseInt(this.tableDate, 10) + Math.sign(delta || 1)}`\n    },\n    genTBody () {\n      const children = []\n      const cols = Array(3).fill(null)\n      const rows = 12 / cols.length\n\n      for (let row = 0; row < rows; row++) {\n        const tds = cols.map((_, col) => {\n          const month = row * cols.length + col\n          return this.$createElement('td', {\n            key: month\n          }, [\n            this.genButton(`${this.displayedYear}-${pad(month + 1)}`, false)\n          ])\n        })\n\n        children.push(this.$createElement('tr', {\n          key: row\n        }, tds))\n      }\n\n      return this.$createElement('tbody', children)\n    }\n  },\n\n  render () {\n    return this.genTable('v-date-picker-table v-date-picker-table--month', [\n      this.genTBody()\n    ])\n  }\n}\n"",""import '../../stylus/components/_date-picker-title.styl'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport PickerButton from '../../mixins/picker-button'\n\n/* @vue/component */\nexport default {\n  name: 'v-date-picker-title',\n\n  mixins: [PickerButton],\n\n  props: {\n    date: {\n      type: String,\n      default: ''\n    },\n    selectingYear: Boolean,\n    year: {\n      type: [Number, String],\n      default: ''\n    },\n    yearIcon: {\n      type: String\n    },\n    value: {\n      type: String\n    }\n  },\n\n  data: () => ({\n    isReversing: false\n  }),\n\n  computed: {\n    computedTransition () {\n      return this.isReversing ? 'picker-reverse-transition' : 'picker-transition'\n    }\n  },\n\n  watch: {\n    value (val, prev) {\n      this.isReversing = val < prev\n    }\n  },\n\n  methods: {\n    genYearIcon () {\n      return this.$createElement(VIcon, {\n        props: {\n          dark: true\n        }\n      }, this.yearIcon)\n    },\n    getYearBtn () {\n      return this.genPickerButton('selectingYear', true, [\n        this.year,\n        this.yearIcon ? this.genYearIcon() : null\n      ], false, 'v-date-picker-title__year')\n    },\n    genTitleText () {\n      return this.$createElement('transition', {\n        props: {\n          name: this.computedTransition\n        }\n      }, [\n        this.$createElement('div', {\n          domProps: { innerHTML: this.date || '&nbsp;' },\n          key: this.value\n        })\n      ])\n    },\n    genTitleDate (title) {\n      return this.genPickerButton('selectingYear', false, this.genTitleText(title), false, 'v-date-picker-title__date')\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      staticClass: 'v-date-picker-title'\n    }, [\n      this.getYearBtn(),\n      this.genTitleDate()\n    ])\n  }\n}\n"",""import '../../stylus/components/_date-picker-years.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utils\nimport { createNativeLocaleFormatter } from './util'\n\n/* @vue/component */\nexport default {\n  name: 'v-date-picker-years',\n\n  mixins: [Colorable],\n\n  props: {\n    format: {\n      type: Function,\n      default: null\n    },\n    locale: {\n      type: String,\n      default: 'en-us'\n    },\n    min: [Number, String],\n    max: [Number, String],\n    value: [Number, String]\n  },\n\n  data () {\n    return {\n      defaultColor: 'primary'\n    }\n  },\n\n  computed: {\n    formatter () {\n      return this.format || createNativeLocaleFormatter(this.locale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n    }\n  },\n\n  mounted () {\n    const activeItem = this.$el.getElementsByClassName('active')[0]\n    if (activeItem) {\n      this.$el.scrollTop = activeItem.offsetTop - this.$el.offsetHeight / 2 + activeItem.offsetHeight / 2\n    } else {\n      this.$el.scrollTop = this.$el.scrollHeight / 2 - this.$el.offsetHeight / 2\n    }\n  },\n\n  methods: {\n    genYearItem (year) {\n      const formatted = this.formatter(`${year}`)\n      const active = parseInt(this.value, 10) === year\n      const color = active && (this.color || 'primary')\n\n      return this.$createElement('li', this.setTextColor(color, {\n        key: year,\n        'class': { active },\n        on: {\n          click: () => this.$emit('input', year)\n        }\n      }), formatted)\n    },\n    genYearItems () {\n      const children = []\n      const selectedYear = this.value ? parseInt(this.value, 10) : new Date().getFullYear()\n      const maxYear = this.max ? parseInt(this.max, 10) : (selectedYear + 100)\n      const minYear = Math.min(maxYear, this.min ? parseInt(this.min, 10) : (selectedYear - 100))\n\n      for (let year = maxYear; year >= minYear; year--) {\n        children.push(this.genYearItem(year))\n      }\n\n      return children\n    }\n  },\n\n  render () {\n    return this.$createElement('ul', {\n      staticClass: 'v-date-picker-years',\n      ref: 'years'\n    }, this.genYearItems())\n  }\n}\n"",""import VDatePicker from './VDatePicker'\nimport VDatePickerTitle from './VDatePickerTitle'\nimport VDatePickerHeader from './VDatePickerHeader'\nimport VDatePickerDateTable from './VDatePickerDateTable'\nimport VDatePickerMonthTable from './VDatePickerMonthTable'\nimport VDatePickerYears from './VDatePickerYears'\n\nexport {\n  VDatePicker,\n  VDatePickerTitle,\n  VDatePickerHeader,\n  VDatePickerDateTable,\n  VDatePickerMonthTable,\n  VDatePickerYears\n}\n\nexport default {\n  $_vuetify_subcomponents: {\n    VDatePicker,\n    VDatePickerTitle,\n    VDatePickerHeader,\n    VDatePickerDateTable,\n    VDatePickerMonthTable,\n    VDatePickerYears\n  }\n}\n"",""import '../../../stylus/components/_date-picker-table.styl'\n\n// Directives\nimport Touch from '../../../directives/touch'\n\n// Utils\nimport isDateAllowed from '.././util/isDateAllowed'\n\n/* @vue/component */\nexport default {\n  directives: { Touch },\n\n  props: {\n    allowedDates: Function,\n    current: String,\n    disabled: Boolean,\n    format: {\n      type: Function,\n      default: null\n    },\n    locale: {\n      type: String,\n      default: 'en-us'\n    },\n    min: String,\n    max: String,\n    scrollable: Boolean,\n    tableDate: {\n      type: String,\n      required: true\n    },\n    value: [String, Array]\n  },\n\n  data: () => ({\n    isReversing: false\n  }),\n\n  computed: {\n    computedTransition () {\n      return (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition'\n    },\n    displayedMonth () {\n      return this.tableDate.split('-')[1] - 1\n    },\n    displayedYear () {\n      return this.tableDate.split('-')[0] * 1\n    }\n  },\n\n  watch: {\n    tableDate (newVal, oldVal) {\n      this.isReversing = newVal < oldVal\n    }\n  },\n\n  methods: {\n    genButtonClasses (isAllowed, isFloating, isSelected, isCurrent) {\n      return {\n        'v-btn--active': isSelected,\n        'v-btn--flat': !isSelected,\n        'v-btn--icon': isSelected && isAllowed && isFloating,\n        'v-btn--floating': isFloating,\n        'v-btn--depressed': !isFloating && isSelected,\n        'v-btn--disabled': !isAllowed || (this.disabled && isSelected),\n        'v-btn--outline': isCurrent && !isSelected,\n        ...this.themeClasses\n      }\n    },\n    genButton (value, isFloating) {\n      const isAllowed = isDateAllowed(value, this.min, this.max, this.allowedDates)\n      const isSelected = value === this.value || (Array.isArray(this.value) && this.value.indexOf(value) !== -1)\n      const isCurrent = value === this.current\n      const setColor = isSelected ? this.setBackgroundColor : this.setTextColor\n      const color = (isSelected || isCurrent) && (this.color || 'accent')\n\n      return this.$createElement('button', setColor(color, {\n        staticClass: 'v-btn',\n        'class': this.genButtonClasses(isAllowed, isFloating, isSelected, isCurrent),\n        attrs: {\n          type: 'button'\n        },\n        domProps: {\n          disabled: !isAllowed,\n          innerHTML: `<div class=\""v-btn__content\"">${this.formatter(value)}</div>`\n        },\n        on: (this.disabled || !isAllowed) ? {} : {\n          click: () => this.$emit('input', value)\n        }\n      }))\n    },\n    wheel (e) {\n      e.preventDefault()\n      this.$emit('tableDate', this.calculateTableDate(e.deltaY))\n    },\n    touch (value) {\n      this.$emit('tableDate', this.calculateTableDate(value))\n    },\n    genTable (staticClass, children) {\n      const transition = this.$createElement('transition', {\n        props: { name: this.computedTransition }\n      }, [this.$createElement('table', { key: this.tableDate }, children)])\n\n      const touchDirective = {\n        name: 'touch',\n        value: {\n          left: e => (e.offsetX < -15) && this.touch(1),\n          right: e => (e.offsetX > 15) && this.touch(-1)\n        }\n      }\n\n      return this.$createElement('div', {\n        staticClass,\n        class: this.themeClasses,\n        on: this.scrollable ? { wheel: this.wheel } : undefined,\n        directives: [touchDirective]\n      }, [transition])\n    }\n  }\n}\n"",""import pad from './pad'\n\nexport default (locale, options, { start, length } = { start: 0, length: 0 }) => {\n  const makeIsoString = dateString => {\n    const [year, month, date] = dateString.trim().split(' ')[0].split('-')\n    return [year, pad(month || 1), pad(date || 1)].join('-')\n  }\n\n  try {\n    const intlFormatter = new Intl.DateTimeFormat(locale || undefined, options)\n    return dateString => intlFormatter.format(new Date(`${makeIsoString(dateString)}T00:00:00+00:00`))\n  } catch (e) {\n    return (start || length) ? dateString => makeIsoString(dateString).substr(start, length) : null\n  }\n}\n"",""import createNativeLocaleFormatter from './createNativeLocaleFormatter'\nimport monthChange from './monthChange'\nimport pad from './pad'\n\nexport {\n  createNativeLocaleFormatter,\n  monthChange,\n  pad\n}\n"",""export default function isDateAllowed (date, min, max, allowedFn) {\n  return (!allowedFn || allowedFn(date)) &&\n    (!min || date >= min) &&\n    (!max || date <= max)\n}\n"",""import pad from './pad'\n\n/**\n * @param {String} value YYYY-MM format\n * @param {Number} sign -1 or +1\n */\nexport default (value, sign) => {\n  const [year, month] = value.split('-').map(v => 1 * v)\n\n  if (month + sign === 0) {\n    return `${year - 1}-12`\n  } else if (month + sign === 13) {\n    return `${year + 1}-01`\n  } else {\n    return `${year}-${pad(month + sign)}`\n  }\n}\n"",""const padStart = (string, targetLength, padString) => {\n  targetLength = targetLength >> 0\n  string = String(string)\n  padString = String(padString)\n  if (string.length > targetLength) {\n    return String(string)\n  }\n\n  targetLength = targetLength - string.length\n  if (targetLength > padString.length) {\n    padString += padString.repeat(targetLength / padString.length)\n  }\n  return padString.slice(0, targetLength) + String(string)\n}\n\nexport default (n, length = 2) => padStart(n, length, '0')\n"",""import '../../stylus/components/_dialogs.styl'\n\n// Mixins\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Overlayable from '../../mixins/overlayable'\nimport Returnable from '../../mixins/returnable'\nimport Stackable from '../../mixins/stackable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\n\n// Helpers\nimport { getZIndex, convertToUnit } from '../../util/helpers'\nimport ThemeProvider from '../../util/ThemeProvider'\n\n/* @vue/component */\nexport default {\n  name: 'v-dialog',\n\n  directives: {\n    ClickOutside\n  },\n\n  mixins: [\n    Dependent,\n    Detachable,\n    Overlayable,\n    Returnable,\n    Stackable,\n    Toggleable\n  ],\n\n  props: {\n    disabled: Boolean,\n    persistent: Boolean,\n    fullscreen: Boolean,\n    fullWidth: Boolean,\n    noClickAnimation: Boolean,\n    light: Boolean,\n    dark: Boolean,\n    maxWidth: {\n      type: [String, Number],\n      default: 'none'\n    },\n    origin: {\n      type: String,\n      default: 'center center'\n    },\n    width: {\n      type: [String, Number],\n      default: 'auto'\n    },\n    scrollable: Boolean,\n    transition: {\n      type: [String, Boolean],\n      default: 'dialog-transition'\n    }\n  },\n\n  data () {\n    return {\n      animate: false,\n      animateTimeout: null,\n      stackClass: 'v-dialog__content--active',\n      stackMinZIndex: 200\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        [(`v-dialog ${this.contentClass}`).trim()]: true,\n        'v-dialog--active': this.isActive,\n        'v-dialog--persistent': this.persistent,\n        'v-dialog--fullscreen': this.fullscreen,\n        'v-dialog--scrollable': this.scrollable,\n        'v-dialog--animated': this.animate\n      }\n    },\n    contentClasses () {\n      return {\n        'v-dialog__content': true,\n        'v-dialog__content--active': this.isActive\n      }\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      if (val) {\n        this.show()\n      } else {\n        this.removeOverlay()\n        this.unbind()\n      }\n    },\n    fullscreen (val) {\n      if (val) this.hideScroll()\n      else this.showScroll()\n    }\n  },\n\n  mounted () {\n    this.isBooted = this.isActive\n    this.isActive && this.show()\n  },\n\n  beforeDestroy () {\n    if (typeof window !== 'undefined') this.unbind()\n  },\n\n  methods: {\n    animateClick () {\n      this.animate = false\n      // Needed for when clicking very fast\n      // outside of the dialog\n      this.$nextTick(() => {\n        this.animate = true\n        clearTimeout(this.animateTimeout)\n        this.animateTimeout = setTimeout(() => (this.animate = false), 150)\n      })\n    },\n    closeConditional (e) {\n      // If the dialog content contains\n      // the click event, or if the\n      // dialog is not active\n      if (this.$refs.content.contains(e.target) ||\n        !this.isActive\n      ) return false\n\n      // If we made it here, the click is outside\n      // and is active. If persistent, and the\n      // click is on the overlay, animate\n      if (this.persistent) {\n        if (!this.noClickAnimation &&\n          this.overlay === e.target\n        ) this.animateClick()\n\n        return false\n      }\n\n      // close dialog if !persistent, clicked outside and we're the topmost dialog.\n      // Since this should only be called in a capture event (bottom up), we shouldn't need to stop propagation\n      return getZIndex(this.$refs.content) >= this.getMaxZIndex()\n    },\n    hideScroll () {\n      if (this.fullscreen) {\n        document.documentElement.classList.add('overflow-y-hidden')\n      } else {\n        Overlayable.methods.hideScroll.call(this)\n      }\n    },\n    show () {\n      !this.fullscreen && !this.hideOverlay && this.genOverlay()\n      this.fullscreen && this.hideScroll()\n      this.$refs.content.focus()\n      this.$listeners.keydown && this.bind()\n    },\n    bind () {\n      window.addEventListener('keydown', this.onKeydown)\n    },\n    unbind () {\n      window.removeEventListener('keydown', this.onKeydown)\n    },\n    onKeydown (e) {\n      this.$emit('keydown', e)\n    }\n  },\n\n  render (h) {\n    const children = []\n    const data = {\n      'class': this.classes,\n      ref: 'dialog',\n      directives: [\n        {\n          name: 'click-outside',\n          value: () => (this.isActive = false),\n          args: {\n            closeConditional: this.closeConditional,\n            include: this.getOpenDependentElements\n          }\n        },\n        { name: 'show', value: this.isActive }\n      ],\n      on: {\n        click: e => { e.stopPropagation() }\n      }\n    }\n\n    if (!this.fullscreen) {\n      data.style = {\n        maxWidth: this.maxWidth === 'none' ? undefined : convertToUnit(this.maxWidth),\n        width: this.width === 'auto' ? undefined : convertToUnit(this.width)\n      }\n    }\n\n    if (this.$slots.activator) {\n      children.push(h('div', {\n        staticClass: 'v-dialog__activator',\n        'class': {\n          'v-dialog__activator--disabled': this.disabled\n        },\n        on: {\n          click: e => {\n            e.stopPropagation()\n            if (!this.disabled) this.isActive = !this.isActive\n          }\n        }\n      }, [this.$slots.activator]))\n    }\n\n    let dialog = h('div', data, this.showLazyContent(this.$slots.default))\n    if (this.transition) {\n      dialog = h('transition', {\n        props: {\n          name: this.transition,\n          origin: this.origin\n        }\n      }, [dialog])\n    }\n\n    children.push(h('div', {\n      'class': this.contentClasses,\n      attrs: {\n        tabIndex: '-1',\n        ...this.getScopeIdAttrs()\n      },\n      style: { zIndex: this.activeZIndex },\n      ref: 'content'\n    }, [\n      this.$createElement(ThemeProvider, {\n        props: {\n          root: true,\n          light: this.light,\n          dark: this.dark\n        }\n      }, [dialog])\n    ]))\n\n    return h('div', {\n      staticClass: 'v-dialog__container',\n      style: {\n        display: (!this.$slots.activator || this.fullWidth) ? 'block' : 'inline-block'\n      }\n    }, children)\n  }\n}\n"",""import VDialog from './VDialog'\n\nexport { VDialog }\nexport default VDialog\n"",""// Styles\nimport '../../stylus/components/_dividers.styl'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\nexport default Themeable.extend({\n  name: 'v-divider',\n\n  props: {\n    inset: Boolean,\n    vertical: Boolean\n  },\n\n  render (h): VNode {\n    return h('hr', {\n      class: {\n        'v-divider': true,\n        'v-divider--inset': this.inset,\n        'v-divider--vertical': this.vertical,\n        ...this.themeClasses\n      },\n      attrs: this.$attrs,\n      on: this.$listeners\n    })\n  }\n})\n"",""import VDivider from './VDivider'\n\nexport { VDivider }\nexport default VDivider\n"",""import '../../stylus/components/_expansion-panel.styl'\n\nimport { VExpansionPanelContent } from '.'\n\nimport Themeable from '../../mixins/themeable'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\ntype VExpansionPanelContentInstance = InstanceType<typeof VExpansionPanelContent>\n\n/* @vue/component */\nexport default mixins(Themeable, RegistrableProvide('expansionPanel')).extend({\n  name: 'v-expansion-panel',\n\n  provide (): object {\n    return {\n      expansionPanel: this\n    }\n  },\n\n  props: {\n    disabled: Boolean,\n    readonly: Boolean,\n    expand: Boolean,\n    focusable: Boolean,\n    inset: Boolean,\n    popout: Boolean,\n    value: {\n      type: [Number, Array],\n      default: () => null\n    } as any as PropValidator<number | number[]>\n  },\n\n  data: () => ({\n    items: [] as VExpansionPanelContentInstance[],\n    open: [] as boolean[]\n  }),\n\n  computed: {\n    classes (): object {\n      return {\n        'v-expansion-panel--focusable': this.focusable,\n        'v-expansion-panel--popout': this.popout,\n        'v-expansion-panel--inset': this.inset,\n        ...this.themeClasses\n      }\n    }\n  },\n\n  watch: {\n    expand (v: boolean) {\n      let openIndex = -1\n      if (!v) {\n        // Close all panels unless only one is open\n        const openCount = this.open.reduce((acc, val) => val ? acc + 1 : acc, 0)\n        const open = Array(this.items.length).fill(false)\n\n        if (openCount === 1) {\n          openIndex = this.open.indexOf(true)\n        }\n\n        if (openIndex > -1) {\n          open[openIndex] = true\n        }\n\n        this.open = open\n      }\n\n      this.$emit('input', v ? this.open : (openIndex > -1 ? openIndex : null))\n    },\n    value (v: number | number[]) {\n      this.updateFromValue(v)\n    }\n  },\n\n  mounted () {\n    this.value !== null && this.updateFromValue(this.value)\n  },\n\n  methods: {\n    updateFromValue (v: number | number[]) {\n      if (Array.isArray(v) && !this.expand) return\n\n      let open = Array(this.items.length).fill(false)\n      if (typeof v === 'number') {\n        open[v] = true\n      } else if (v !== null) {\n        open = v\n      }\n\n      this.updatePanels(open)\n    },\n    updatePanels (open: boolean[]) {\n      this.open = open\n      for (let i = 0; i < this.items.length; i++) {\n        this.items[i].toggle(open && open[i])\n      }\n    },\n    panelClick (uid: number) {\n      const open = this.expand ? this.open.slice() : Array(this.items.length).fill(false)\n      for (let i = 0; i < this.items.length; i++) {\n        if (this.items[i]._uid === uid) {\n          open[i] = !this.open[i]\n          !this.expand && this.$emit('input', open[i] ? i : null)\n        }\n      }\n\n      this.updatePanels(open)\n      if (this.expand) this.$emit('input', open)\n    },\n    register (content: VExpansionPanelContentInstance) {\n      const i = this.items.push(content) - 1\n      this.value !== null && this.updateFromValue(this.value)\n      content.toggle(this.open[i])\n    },\n    unregister (content: VExpansionPanelContentInstance) {\n      const index = this.items.findIndex(i => i._uid === content._uid)\n      this.items.splice(index, 1)\n      this.open.splice(index, 1)\n    }\n  },\n\n  render (h): VNode {\n    return h('ul', {\n      staticClass: 'v-expansion-panel',\n      class: this.classes\n    }, this.$slots.default)\n  }\n})\n"",""import { VExpandTransition } from '../transitions'\n\nimport Bootable from '../../mixins/bootable'\nimport Toggleable from '../../mixins/toggleable'\nimport Rippleable from '../../mixins/rippleable'\nimport { Registrable, inject as RegistrableInject } from '../../mixins/registrable'\n\nimport VIcon from '../VIcon'\nimport VExpansionPanel from './VExpansionPanel'\n\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport Vue, { VNode } from 'vue'\n\nimport { consoleWarn } from '../../util/console'\n\ntype VExpansionPanelInstance = InstanceType<typeof VExpansionPanel>\n\ninterface options extends Vue {\n  expansionPanel: VExpansionPanelInstance\n}\n\nexport default mixins<options &\n/* eslint-disable indent */\n  ExtractVue<[\n    typeof Bootable,\n    typeof Toggleable,\n    typeof Rippleable,\n    Registrable<'expansionPanel'>\n  ]>\n/* eslint-enable indent */\n>(\n  Bootable,\n  Toggleable,\n  Rippleable,\n  RegistrableInject('expansionPanel', 'v-expansion-panel-content', 'v-expansion-panel')\n  /* @vue/component */\n).extend({\n  name: 'v-expansion-panel-content',\n\n  props: {\n    disabled: Boolean,\n    readonly: Boolean,\n    expandIcon: {\n      type: String,\n      default: '$vuetify.icons.expand'\n    },\n    hideActions: Boolean,\n    ripple: {\n      type: [Boolean, Object],\n      default: false\n    }\n  },\n\n  data: () => ({\n    height: 'auto'\n  }),\n\n  computed: {\n    containerClasses (): object {\n      return {\n        'v-expansion-panel__container--active': this.isActive,\n        'v-expansion-panel__container--disabled': this.isDisabled\n      }\n    },\n    isDisabled (): boolean {\n      return this.expansionPanel.disabled || this.disabled\n    },\n    isReadonly (): boolean {\n      return this.expansionPanel.readonly || this.readonly\n    }\n  },\n\n  beforeMount () {\n    this.expansionPanel.register(this)\n\n    // Can be removed once fully deprecated\n    if (typeof this.value !== 'undefined') consoleWarn('v-model has been deprecated', this)\n  },\n\n  beforeDestroy () {\n    this.expansionPanel.unregister(this)\n  },\n\n  methods: {\n    onKeydown (e: KeyboardEvent) {\n      // Ensure element is the activeElement\n      if (\n        e.keyCode === 13 &&\n        this.$el === document.activeElement\n      ) this.expansionPanel.panelClick(this._uid)\n    },\n    onHeaderClick () {\n      this.isReadonly || this.expansionPanel.panelClick(this._uid)\n    },\n    genBody () {\n      return this.$createElement('div', {\n        ref: 'body',\n        class: 'v-expansion-panel__body',\n        directives: [{\n          name: 'show',\n          value: this.isActive\n        }] as any\n      }, this.showLazyContent(this.$slots.default))\n    },\n    genHeader () {\n      const children = [...this.$slots.header]\n\n      if (!this.hideActions) children.push(this.genIcon())\n\n      return this.$createElement('div', {\n        staticClass: 'v-expansion-panel__header',\n        directives: [{\n          name: 'ripple',\n          value: this.ripple\n        }] as any,\n        on: {\n          click: this.onHeaderClick\n        }\n      }, children)\n    },\n    genIcon () {\n      const icon = this.$slots.actions ||\n        [this.$createElement(VIcon, this.expandIcon)]\n\n      return this.$createElement('transition', {\n        attrs: { name: 'fade-transition' }\n      }, [\n        this.$createElement('div', {\n          staticClass: 'v-expansion-panel__header__icon',\n          directives: [{\n            name: 'show',\n            value: !this.isDisabled\n          }] as any\n        }, icon)\n      ])\n    },\n    toggle (active: boolean) {\n      if (active) this.isBooted = true\n\n      this.isActive = active\n    }\n  },\n\n  render (h): VNode {\n    const children = []\n\n    this.$slots.header && children.push(this.genHeader())\n    children.push(h(VExpandTransition, [this.genBody()]))\n\n    return h('li', {\n      staticClass: 'v-expansion-panel__container',\n      class: this.containerClasses,\n      attrs: {\n        tabindex: this.isReadonly || this.isDisabled ? null : 0\n      },\n      on: {\n        keydown: this.onKeydown\n      }\n    }, children)\n  }\n})\n"",""import VExpansionPanel from './VExpansionPanel'\nimport VExpansionPanelContent from './VExpansionPanelContent'\n\nexport { VExpansionPanel, VExpansionPanelContent }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VExpansionPanel,\n    VExpansionPanelContent\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_footer.styl'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n/* @vue/component */\nexport default {\n  name: 'v-footer',\n\n  mixins: [\n    Applicationable(null, [\n      'height',\n      'inset'\n    ]),\n    Colorable,\n    Themeable\n  ],\n\n  props: {\n    height: {\n      default: 32,\n      type: [Number, String]\n    },\n    inset: Boolean\n  },\n\n  computed: {\n    applicationProperty () {\n      return this.inset ? 'insetFooter' : 'footer'\n    },\n    computedMarginBottom () {\n      if (!this.app) return\n\n      return this.$vuetify.application.bottom\n    },\n    computedPaddingLeft () {\n      return !this.app || !this.inset\n        ? 0\n        : this.$vuetify.application.left\n    },\n    computedPaddingRight () {\n      return !this.app\n        ? 0\n        : this.$vuetify.application.right\n    },\n    styles () {\n      const styles = {\n        height: isNaN(this.height) ? this.height : `${this.height}px`\n      }\n\n      if (this.computedPaddingLeft) {\n        styles.paddingLeft = `${this.computedPaddingLeft}px`\n      }\n\n      if (this.computedPaddingRight) {\n        styles.paddingRight = `${this.computedPaddingRight}px`\n      }\n\n      if (this.computedMarginBottom) {\n        styles.marginBottom = `${this.computedMarginBottom}px`\n      }\n\n      return styles\n    }\n  },\n\n  methods: {\n    /**\n     * Update the application layout\n     *\n     * @return {number}\n     */\n    updateApplication () {\n      const height = parseInt(this.height)\n\n      return isNaN(height)\n        ? this.$el ? this.$el.clientHeight : 0\n        : height\n    }\n  },\n\n  render (h) {\n    const data = this.setBackgroundColor(this.color, {\n      staticClass: 'v-footer',\n      'class': {\n        'v-footer--absolute': this.absolute,\n        'v-footer--fixed': !this.absolute && (this.app || this.fixed),\n        'v-footer--inset': this.inset,\n        ...this.themeClasses\n      },\n      style: this.styles,\n      ref: 'content'\n    })\n\n    return h('footer', data, this.$slots.default)\n  }\n}\n"",""import VFooter from './VFooter'\n\nexport { VFooter }\nexport default VFooter\n"",""// Styles\nimport '../../stylus/components/_forms.styl'\n\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n/* @vue/component */\nexport default {\n  name: 'v-form',\n\n  mixins: [RegistrableProvide('form')],\n\n  inheritAttrs: false,\n\n  props: {\n    value: Boolean,\n    lazyValidation: Boolean\n  },\n\n  data () {\n    return {\n      inputs: [],\n      watchers: [],\n      errorBag: {}\n    }\n  },\n\n  watch: {\n    errorBag: {\n      handler () {\n        const errors = Object.values(this.errorBag).includes(true)\n        this.$emit('input', !errors)\n      },\n      deep: true,\n      immediate: true\n    }\n  },\n\n  methods: {\n    watchInput (input) {\n      const watcher = input => {\n        return input.$watch('hasError', val => {\n          this.$set(this.errorBag, input._uid, val)\n        }, { immediate: true })\n      }\n\n      const watchers = {\n        _uid: input._uid,\n        valid: undefined,\n        shouldValidate: undefined\n      }\n\n      if (this.lazyValidation) {\n        // Only start watching inputs if we need to\n        watchers.shouldValidate = input.$watch('shouldValidate', val => {\n          if (!val) return\n\n          // Only watch if we're not already doing it\n          if (this.errorBag.hasOwnProperty(input._uid)) return\n\n          watchers.valid = watcher(input)\n        })\n      } else {\n        watchers.valid = watcher(input)\n      }\n\n      return watchers\n    },\n    /** @public */\n    validate () {\n      const errors = this.inputs.filter(input => !input.validate(true)).length\n      return !errors\n    },\n    /** @public */\n    reset () {\n      for (let i = this.inputs.length; i--;) {\n        this.inputs[i].reset()\n      }\n      if (this.lazyValidation) {\n        // Account for timeout in validatable\n        setTimeout(() => {\n          this.errorBag = {}\n        }, 0)\n      }\n    },\n    /** @public */\n    resetValidation () {\n      for (let i = this.inputs.length; i--;) {\n        this.inputs[i].resetValidation()\n      }\n      if (this.lazyValidation) {\n        // Account for timeout in validatable\n        setTimeout(() => {\n          this.errorBag = {}\n        }, 0)\n      }\n    },\n    register (input) {\n      const unwatch = this.watchInput(input)\n      this.inputs.push(input)\n      this.watchers.push(unwatch)\n    },\n    unregister (input) {\n      const found = this.inputs.find(i => i._uid === input._uid)\n\n      if (!found) return\n\n      const unwatch = this.watchers.find(i => i._uid === found._uid)\n      unwatch.valid && unwatch.valid()\n      unwatch.shouldValidate && unwatch.shouldValidate()\n\n      this.watchers = this.watchers.filter(i => i._uid !== found._uid)\n      this.inputs = this.inputs.filter(i => i._uid !== found._uid)\n      this.$delete(this.errorBag, found._uid)\n    }\n  },\n\n  render (h) {\n    return h('form', {\n      staticClass: 'v-form',\n      attrs: Object.assign({\n        novalidate: true\n      }, this.$attrs),\n      on: {\n        submit: e => this.$emit('submit', e)\n      }\n    }, this.$slots.default)\n  }\n}\n"",""import VForm from './VForm'\n\nexport { VForm }\nexport default VForm\n"",""import '../../stylus/components/_grid.styl'\n\nimport Grid from './grid'\n\nexport default Grid('container')\n"",""// Styles\nimport '../../stylus/components/_content.styl'\n\n// Mixins\nimport SSRBootable from '../../mixins/ssr-bootable'\n\n/* @vue/component */\nexport default {\n  name: 'v-content',\n\n  mixins: [SSRBootable],\n\n  props: {\n    tag: {\n      type: String,\n      default: 'main'\n    }\n  },\n\n  computed: {\n    styles () {\n      const {\n        bar, top, right, footer, insetFooter, bottom, left\n      } = this.$vuetify.application\n\n      return {\n        paddingTop: `${top + bar}px`,\n        paddingRight: `${right}px`,\n        paddingBottom: `${footer + insetFooter + bottom}px`,\n        paddingLeft: `${left}px`\n      }\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'v-content',\n      style: this.styles,\n      ref: 'content'\n    }\n\n    return h(this.tag, data, [\n      h(\n        'div',\n        { staticClass: 'v-content__wrap' },\n        this.$slots.default\n      )\n    ])\n  }\n}\n"",""import '../../stylus/components/_grid.styl'\n\nimport Grid from './grid'\n\nexport default Grid('flex')\n"",""import '../../stylus/components/_grid.styl'\n\nimport Grid from './grid'\n\nexport default Grid('layout')\n"",""export default function Grid (name) {\n  /* @vue/component */\n  return {\n    name: `v-${name}`,\n\n    functional: true,\n\n    props: {\n      id: String,\n      tag: {\n        type: String,\n        default: 'div'\n      }\n    },\n\n    render: (h, { props, data, children }) => {\n      data.staticClass = (`${name} ${data.staticClass || ''}`).trim()\n\n      if (data.attrs) {\n        const classes = Object.keys(data.attrs).filter(key => {\n          // TODO: Remove once resolved\n          // https://github.com/vuejs/vue/issues/7841\n          if (key === 'slot') return false\n\n          const value = data.attrs[key]\n          return value || typeof value === 'string'\n        })\n\n        if (classes.length) data.staticClass += ` ${classes.join(' ')}`\n        delete data.attrs\n      }\n\n      if (props.id) {\n        data.domProps = data.domProps || {}\n        data.domProps.id = props.id\n      }\n\n      return h(props.tag, data, children)\n    }\n  }\n}\n"",""import {\n  createSimpleFunctional\n} from '../../util/helpers'\nimport VContainer from './VContainer'\nimport VContent from './VContent'\nimport VFlex from './VFlex'\nimport VLayout from './VLayout'\n\nconst VSpacer = createSimpleFunctional('spacer', 'div', 'v-spacer')\n\nexport {\n  VContainer,\n  VContent,\n  VFlex,\n  VLayout,\n  VSpacer\n}\n\nexport default {\n  $_vuetify_subcomponents: {\n    VContainer,\n    VContent,\n    VFlex,\n    VLayout,\n    VSpacer\n  }\n}\n"",""// Mixins\nimport Delayable from '../../mixins/delayable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport { VNode, VNodeChildrenArrayContents } from 'vue'\n\nexport default mixins(\n  Delayable,\n  Toggleable\n  /* @vue/component */\n).extend({\n  name: 'v-hover',\n\n  props: {\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    value: {\n      type: Boolean,\n      default: undefined\n    }\n  },\n\n  methods: {\n    onMouseEnter () {\n      this.runDelay('open', () => {\n        this.isActive = true\n      })\n    },\n    onMouseLeave () {\n      this.runDelay('close', () => {\n        this.isActive = false\n      })\n    }\n  },\n\n  render (): VNode {\n    if (!this.$scopedSlots.default && this.value === undefined) {\n      consoleWarn('v-hover is missing a default scopedSlot or bound value', this)\n\n      return null as any\n    }\n\n    let element: VNode | VNodeChildrenArrayContents | string | undefined\n\n    if (this.$scopedSlots.default) {\n      element = this.$scopedSlots.default({ hover: this.isActive })\n    } else if (this.$slots.default.length === 1) {\n      element = this.$slots.default[0]\n    }\n\n    if (!element || typeof element === 'string' || Array.isArray(element)) {\n      consoleWarn('v-hover should only contain a single element', this)\n\n      return element as any\n    }\n\n    if (!this.disabled) {\n      this._g(element.data!, {\n        mouseenter: this.onMouseEnter,\n        mouseleave: this.onMouseLeave\n      })\n    }\n\n    return element\n  }\n})\n"",""import VHover from './VHover'\n\nexport { VHover }\nexport default VHover\n"",""import '../../stylus/components/_icons.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport {\n  convertToUnit,\n  keys,\n  remapInternalIcon\n} from '../../util/helpers'\n\n// Types\nimport Vue, { VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\n\nenum SIZE_MAP {\n  small = '16px',\n  default = '24px',\n  medium = '28px',\n  large = '36px',\n  xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n  return ['fas', 'far', 'fal', 'fab'].some(val => iconType.includes(val))\n}\n\nconst VIcon = mixins(\n  Colorable,\n  Sizeable,\n  Themeable\n/* @vue/component */\n).extend({\n  name: 'v-icon',\n\n  props: {\n    disabled: Boolean,\n    left: Boolean,\n    right: Boolean\n  },\n\n  render (h): VNode {\n    const sizes = {\n      small: this.small,\n      medium: this.medium,\n      large: this.large,\n      xLarge: this.xLarge\n    }\n    const explicitSize = keys(sizes).find(key => sizes[key] && !!key)\n    const fontSize = (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n\n    const newChildren: VNodeChildren = []\n    const data: VNodeData = {\n      staticClass: 'v-icon',\n      attrs: {\n        'aria-hidden': true,\n        ...this.$attrs\n      },\n      on: this.$listeners\n    }\n\n    if (fontSize) data.style = { fontSize }\n\n    let iconName = ''\n    if (this.$slots.default) iconName = this.$slots.default[0].text!\n\n    // Remap internal names like '$vuetify.icons.cancel' to the current name for that icon\n    iconName = remapInternalIcon(this, iconName)\n\n    let iconType = 'material-icons'\n    // Material Icon delimiter is _\n    // https://material.io/icons/\n    const delimiterIndex = iconName.indexOf('-')\n    const isCustomIcon = delimiterIndex > -1\n\n    if (isCustomIcon) {\n      iconType = iconName.slice(0, delimiterIndex)\n\n      if (isFontAwesome5(iconType)) iconType = ''\n      // Assume if not a custom icon\n      // is Material Icon font\n    } else newChildren.push(iconName)\n\n    data.class = {\n      'v-icon--disabled': this.disabled,\n      'v-icon--left': this.left,\n      'v-icon--link': this.$listeners.click || this.$listeners['!click'],\n      'v-icon--right': this.right,\n      [iconType]: true,\n      [iconName]: isCustomIcon,\n      ...this.themeClasses\n    }\n\n    return h('i', this.setTextColor(this.color, data), newChildren)\n  }\n})\n\nexport default Vue.extend({\n  name: 'v-icon',\n\n  $_wrapperFor: VIcon,\n\n  functional: true,\n\n  render (h, { data, children }): VNode {\n    let iconName = ''\n\n    // Support usage of v-text and v-html\n    if (data.domProps) {\n      iconName = data.domProps.textContent ||\n        data.domProps.innerHTML ||\n        iconName\n\n      // Remove nodes so it doesn't\n      // overwrite our changes\n      delete data.domProps.textContent\n      delete data.domProps.innerHTML\n    }\n\n    return h(VIcon, data, iconName ? [iconName] : children)\n  }\n})\n"",""import VIcon from './VIcon'\n\nexport { VIcon }\nexport default VIcon\n"",""import '../../stylus/components/_images.styl'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport VResponsive from '../VResponsive'\n\n// Utils\nimport { consoleError, consoleWarn } from '../../util/console'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n  src: string\n  srcset?: string\n  lazySrc: string\n  aspect: number\n}\n\n/* @vue/component */\nexport default VResponsive.extend({\n  name: 'v-img',\n\n  props: {\n    alt: String,\n    contain: Boolean,\n    src: {\n      type: [String, Object],\n      default: ''\n    } as PropValidator<string | srcObject>,\n    gradient: String,\n    lazySrc: String,\n    srcset: String,\n    sizes: String,\n    position: {\n      type: String,\n      default: 'center center'\n    },\n    transition: {\n      type: [Boolean, String],\n      default: 'fade-transition'\n    }\n  },\n\n  data () {\n    return {\n      currentSrc: '', // Set from srcset\n      image: null as HTMLImageElement | null,\n      isLoading: true,\n      calculatedAspectRatio: undefined as number | undefined\n    }\n  },\n\n  computed: {\n    computedAspectRatio (): number {\n      return this.normalisedSrc.aspect\n    },\n    normalisedSrc (): srcObject {\n      return typeof this.src === 'string'\n        ? {\n          src: this.src,\n          srcset: this.srcset,\n          lazySrc: this.lazySrc,\n          aspect: Number(this.aspectRatio || this.calculatedAspectRatio)\n        }\n        : {\n          src: this.src.src,\n          srcset: this.srcset || this.src.srcset,\n          lazySrc: this.lazySrc || this.src.lazySrc,\n          aspect: Number(this.aspectRatio || this.src.aspect || this.calculatedAspectRatio)\n        }\n    },\n    __cachedImage (): VNode | never[] {\n      if (!(this.normalisedSrc.src || this.normalisedSrc.lazySrc)) return []\n\n      const backgroundImage: string[] = []\n      const src = this.isLoading ? this.normalisedSrc.lazySrc : this.currentSrc\n\n      if (this.gradient) backgroundImage.push(`linear-gradient(${this.gradient})`)\n      if (src) backgroundImage.push(`url(\""${src}\"")`)\n\n      const image = this.$createElement('div', {\n        staticClass: 'v-image__image',\n        class: {\n          'v-image__image--preload': this.isLoading,\n          'v-image__image--contain': this.contain,\n          'v-image__image--cover': !this.contain\n        },\n        style: {\n          backgroundImage: backgroundImage.join(', '),\n          backgroundPosition: this.position\n        },\n        key: +this.isLoading\n      })\n\n      if (!this.transition) return image\n\n      return this.$createElement('transition', {\n        attrs: {\n          name: this.transition,\n          mode: 'in-out'\n        }\n      }, [image])\n    }\n  },\n\n  watch: {\n    src () {\n      if (!this.isLoading) this.init()\n      else this.loadImage()\n    },\n    '$vuetify.breakpoint.width': 'getSrc'\n  },\n\n  mounted () {\n    this.init()\n  },\n\n  methods: {\n    init () {\n      if (this.normalisedSrc.lazySrc) {\n        const lazyImg = new Image()\n        lazyImg.src = this.normalisedSrc.lazySrc\n        this.pollForSize(lazyImg, null)\n      }\n      /* istanbul ignore else */\n      if (this.normalisedSrc.src) this.loadImage()\n    },\n    onLoad () {\n      this.getSrc()\n      this.isLoading = false\n      this.$emit('load', this.src)\n    },\n    onError () {\n      consoleError(\n        `Image load failed\\n\\n` +\n        `src: ${this.normalisedSrc.src}`,\n        this\n      )\n      this.$emit('error', this.src)\n    },\n    getSrc () {\n      /* istanbul ignore else */\n      if (this.image) this.currentSrc = this.image.currentSrc || this.image.src\n    },\n    loadImage () {\n      const image = new Image()\n      this.image = image\n\n      image.onload = () => {\n        /* istanbul ignore if */\n        if (image.decode) {\n          image.decode().catch((err: DOMException) => {\n            consoleWarn(\n              `Failed to decode image, trying to render anyway\\n\\n` +\n              `src: ${this.normalisedSrc.src}` +\n              (err.message ? `\\nOriginal error: ${err.message}` : ''),\n              this\n            )\n          }).then(this.onLoad)\n        } else {\n          this.onLoad()\n        }\n      }\n      image.onerror = this.onError\n\n      image.src = this.normalisedSrc.src\n      this.sizes && (image.sizes = this.sizes)\n      this.normalisedSrc.srcset && (image.srcset = this.normalisedSrc.srcset)\n\n      this.aspectRatio || this.pollForSize(image)\n      this.getSrc()\n    },\n    pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n      const poll = () => {\n        const { naturalHeight, naturalWidth } = img\n\n        if (naturalHeight || naturalWidth) {\n          this.calculatedAspectRatio = naturalWidth / naturalHeight\n        } else {\n          timeout != null && setTimeout(poll, timeout)\n        }\n      }\n\n      poll()\n    },\n    __genPlaceholder (): VNode | void {\n      if (this.$slots.placeholder) {\n        const placeholder = this.isLoading\n          ? [this.$createElement('div', {\n            staticClass: 'v-image__placeholder'\n          }, this.$slots.placeholder)]\n          : []\n\n        if (!this.transition) return placeholder[0]\n\n        return this.$createElement('transition', {\n          attrs: { name: this.transition }\n        }, placeholder)\n      }\n    }\n  },\n\n  render (h): VNode {\n    const node = VResponsive.options.render.call(this, h)\n\n    node.data.staticClass += ' v-image'\n\n    node.data.attrs = {\n      role: this.alt ? 'img' : undefined,\n      'aria-label': this.alt\n    }\n\n    node.children = [\n      this.__cachedSizer,\n      this.__cachedImage,\n      this.__genPlaceholder(),\n      this.genContent()\n    ]\n\n    return h(node.tag, node.data, node.children)\n  }\n})\n"",""import VImg from './VImg'\n\nexport { VImg }\nexport default VImg\n"",""// Styles\nimport '../../stylus/components/_inputs.styl'\n\n// Components\nimport VIcon from '../VIcon'\nimport VLabel from '../VLabel'\nimport VMessages from '../VMessages'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\nimport Validatable from '../../mixins/validatable'\n\n// Utilities\nimport {\n  convertToUnit,\n  kebabCase\n} from '../../util/helpers'\nimport { deprecate } from '../../util/console'\n\n/* @vue/component */\nexport default {\n  name: 'v-input',\n\n  mixins: [\n    Colorable,\n    Themeable,\n    Validatable\n  ],\n\n  props: {\n    appendIcon: String,\n    /** @deprecated */\n    appendIconCb: Function,\n    backgroundColor: {\n      type: String,\n      default: ''\n    },\n    height: [Number, String],\n    hideDetails: Boolean,\n    hint: String,\n    label: String,\n    persistentHint: Boolean,\n    prependIcon: String,\n    /** @deprecated */\n    prependIconCb: Function,\n    value: { required: false }\n  },\n\n  data: vm => ({\n    lazyValue: vm.value,\n    hasMouseDown: false\n  }),\n\n  computed: {\n    classesInput () {\n      return {\n        ...this.classes,\n        'v-input--has-state': this.hasState,\n        'v-input--hide-details': this.hideDetails,\n        'v-input--is-label-active': this.isLabelActive,\n        'v-input--is-dirty': this.isDirty,\n        'v-input--is-disabled': this.disabled,\n        'v-input--is-focused': this.isFocused,\n        'v-input--is-loading': this.loading !== false && this.loading !== undefined,\n        'v-input--is-readonly': this.readonly,\n        ...this.themeClasses\n      }\n    },\n    directivesInput () {\n      return []\n    },\n    hasHint () {\n      return !this.hasMessages &&\n        this.hint &&\n        (this.persistentHint || this.isFocused)\n    },\n    hasLabel () {\n      return Boolean(this.$slots.label || this.label)\n    },\n    // Proxy for `lazyValue`\n    // This allows an input\n    // to function without\n    // a provided model\n    internalValue: {\n      get () {\n        return this.lazyValue\n      },\n      set (val) {\n        this.lazyValue = val\n        this.$emit(this.$_modelEvent, val)\n      }\n    },\n    isDirty () {\n      return !!this.lazyValue\n    },\n    isDisabled () {\n      return Boolean(this.disabled || this.readonly)\n    },\n    isLabelActive () {\n      return this.isDirty\n    }\n  },\n\n  watch: {\n    value (val) {\n      this.lazyValue = val\n    }\n  },\n\n  beforeCreate () {\n    // v-radio-group needs to emit a different event\n    // https://github.com/vuetifyjs/vuetify/issues/4752\n    this.$_modelEvent = (this.$options.model && this.$options.model.event) || 'input'\n  },\n\n  methods: {\n    genContent () {\n      return [\n        this.genPrependSlot(),\n        this.genControl(),\n        this.genAppendSlot()\n      ]\n    },\n    genControl () {\n      return this.$createElement('div', {\n        staticClass: 'v-input__control'\n      }, [\n        this.genInputSlot(),\n        this.genMessages()\n      ])\n    },\n    genDefaultSlot () {\n      return [\n        this.genLabel(),\n        this.$slots.default\n      ]\n    },\n    // TODO: remove shouldDeprecate (2.0), used for clearIcon\n    genIcon (type, cb, shouldDeprecate = true) {\n      const icon = this[`${type}Icon`]\n      const eventName = `click:${kebabCase(type)}`\n      cb = cb || this[`${type}IconCb`]\n\n      if (shouldDeprecate && type && cb) {\n        deprecate(`:${type}-icon-cb`, `@${eventName}`, this)\n      }\n\n      const data = {\n        props: {\n          color: this.validationState,\n          dark: this.dark,\n          disabled: this.disabled,\n          light: this.light\n        },\n        on: !(this.$listeners[eventName] || cb)\n          ? null\n          : {\n            click: e => {\n              e.preventDefault()\n              e.stopPropagation()\n\n              this.$emit(eventName, e)\n              cb && cb(e)\n            },\n            // Container has mouseup event that will\n            // trigger menu open if enclosed\n            mouseup: e => {\n              e.preventDefault()\n              e.stopPropagation()\n            }\n          }\n      }\n\n      return this.$createElement('div', {\n        staticClass: `v-input__icon v-input__icon--${kebabCase(type)}`,\n        key: `${type}${icon}`\n      }, [\n        this.$createElement(\n          VIcon,\n          data,\n          icon\n        )\n      ])\n    },\n    genInputSlot () {\n      return this.$createElement('div', this.setBackgroundColor(this.backgroundColor, {\n        staticClass: 'v-input__slot',\n        style: { height: convertToUnit(this.height) },\n        directives: this.directivesInput,\n        on: {\n          click: this.onClick,\n          mousedown: this.onMouseDown,\n          mouseup: this.onMouseUp\n        },\n        ref: 'input-slot'\n      }), [this.genDefaultSlot()])\n    },\n    genLabel () {\n      if (!this.hasLabel) return null\n\n      return this.$createElement(VLabel, {\n        props: {\n          color: this.validationState,\n          dark: this.dark,\n          focused: this.hasState,\n          for: this.$attrs.id,\n          light: this.light\n        }\n      }, this.$slots.label || this.label)\n    },\n    genMessages () {\n      if (this.hideDetails) return null\n\n      const messages = this.hasHint\n        ? [this.hint]\n        : this.validations\n\n      return this.$createElement(VMessages, {\n        props: {\n          color: this.hasHint ? '' : this.validationState,\n          dark: this.dark,\n          light: this.light,\n          value: (this.hasMessages || this.hasHint) ? messages : []\n        }\n      })\n    },\n    genSlot (type, location, slot) {\n      if (!slot.length) return null\n\n      const ref = `${type}-${location}`\n\n      return this.$createElement('div', {\n        staticClass: `v-input__${ref}`,\n        ref\n      }, slot)\n    },\n    genPrependSlot () {\n      const slot = []\n\n      if (this.$slots['prepend']) {\n        slot.push(this.$slots['prepend'])\n      } else if (this.prependIcon) {\n        slot.push(this.genIcon('prepend'))\n      }\n\n      return this.genSlot('prepend', 'outer', slot)\n    },\n    genAppendSlot () {\n      const slot = []\n\n      // Append icon for text field was really\n      // an appended inner icon, v-text-field\n      // will overwrite this method in order to obtain\n      // backwards compat\n      if (this.$slots['append']) {\n        slot.push(this.$slots['append'])\n      } else if (this.appendIcon) {\n        slot.push(this.genIcon('append'))\n      }\n\n      return this.genSlot('append', 'outer', slot)\n    },\n    onClick (e) {\n      this.$emit('click', e)\n    },\n    onMouseDown (e) {\n      this.hasMouseDown = true\n      this.$emit('mousedown', e)\n    },\n    onMouseUp (e) {\n      this.hasMouseDown = false\n      this.$emit('mouseup', e)\n    }\n  },\n\n  render (h) {\n    return h('div', this.setTextColor(this.validationState, {\n      staticClass: 'v-input',\n      attrs: this.attrsInput,\n      'class': this.classesInput\n    }), this.genContent())\n  }\n}\n"",""import VInput from './VInput'\n\nexport { VInput }\nexport default VInput\n"",""// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport { VNode, VNodeChildrenArrayContents } from 'vue/types/vnode'\n\nexport default mixins(\n  GroupableFactory('itemGroup', 'v-item', 'v-item-group')\n  /* @vue/component */\n).extend({\n  name: 'v-item',\n\n  props: {\n    value: {\n      required: false\n    }\n  },\n\n  render (): VNode {\n    if (!this.$scopedSlots.default) {\n      consoleWarn('v-item is missing a default scopedSlot', this)\n\n      return null as any\n    }\n\n    let element: VNode | VNodeChildrenArrayContents | string | undefined\n\n    /* istanbul ignore else */\n    if (this.$scopedSlots.default) {\n      element = this.$scopedSlots.default({\n        active: this.isActive,\n        toggle: this.toggle\n      })\n    }\n\n    if (!element || typeof element === 'string' || Array.isArray(element)) {\n      consoleWarn('v-item should only contain a single element', this)\n\n      return element as any\n    }\n\n    element.data = element.data || {}\n    element.data!.class = [\n      element.data!.class,\n      { [this.activeClass]: this.isActive }\n    ]\n\n    return element\n  }\n})\n"",""// Styles\nimport '../../stylus/components/_item-group.styl'\n\n// Mixins\nimport Groupable from '../../mixins/groupable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue/types'\n\ntype GroupableInstance = InstanceType<typeof Groupable> & { value?: any }\n\nexport const BaseItemGroup = mixins(\n  Proxyable,\n  Themeable\n).extend({\n  name: 'base-item-group',\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'v-item--active'\n    },\n    mandatory: Boolean,\n    max: {\n      type: [Number, String],\n      default: null\n    },\n    multiple: Boolean\n  },\n\n  data () {\n    return {\n      // As long as a value is defined, show it\n      // Otherwise, check if multiple\n      // to determine which default to provide\n      internalLazyValue: this.value !== undefined\n        ? this.value\n        : this.multiple ? [] : undefined,\n      items: [] as GroupableInstance[]\n    }\n  },\n\n  computed: {\n    classes (): Record<string, boolean> {\n      return {\n        ...this.themeClasses\n      }\n    },\n    selectedItems (): GroupableInstance[] {\n      return this.items.filter((item, index) => {\n        return this.toggleMethod(this.getValue(item, index))\n      })\n    },\n    selectedValues (): any[] {\n      return Array.isArray(this.internalValue)\n        ? this.internalValue\n        : [this.internalValue]\n    },\n    toggleMethod (): (v: any) => boolean {\n      if (!this.multiple) {\n        return (v: any) => this.internalValue === v\n      }\n\n      const internalValue = this.internalValue\n      if (Array.isArray(internalValue)) {\n        return (v: any) => internalValue.includes(v)\n      }\n\n      return () => false\n    }\n  },\n\n  watch: {\n    internalValue () {\n      // https://github.com/vuetifyjs/vuetify/issues/5352\n      this.$nextTick(this.updateItemsState)\n    }\n  },\n\n  created () {\n    if (this.multiple && !Array.isArray(this.internalValue)) {\n      consoleWarn('Model must be bound to an array if the multiple property is true.', this)\n    }\n  },\n\n  methods: {\n    getValue (item: GroupableInstance, i: number): unknown {\n      return item.value == null || item.value === ''\n        ? i\n        : item.value\n    },\n    onClick (item: GroupableInstance, index: number) {\n      this.updateInternalValue(\n        this.getValue(item, index)\n      )\n    },\n    register (item: GroupableInstance) {\n      const index = this.items.push(item) - 1\n\n      item.$on('change', () => this.onClick(item, index))\n\n      // If no value provided and mandatory,\n      // assign first registered item\n      if (this.mandatory && this.internalLazyValue == null) {\n        this.updateMandatory()\n      }\n\n      this.updateItem(item, index)\n    },\n    unregister (item: GroupableInstance) {\n      if (this._isDestroyed) return\n\n      const index = this.items.indexOf(item)\n      const value = this.getValue(item, index)\n\n      this.items.splice(index, 1)\n\n      const valueIndex = this.selectedValues.indexOf(value)\n\n      // Items is not selected, do nothing\n      if (valueIndex < 0) return\n\n      // If not mandatory, use regular update process\n      if (!this.mandatory) {\n        return this.updateInternalValue(value)\n      }\n\n      // Remove the value\n      if (this.multiple && Array.isArray(this.internalValue)) {\n        this.internalValue = this.internalValue.filter(v => v !== value)\n      } else {\n        this.internalValue = undefined\n      }\n\n      // If mandatory and we have no selection\n      // add the last item as value\n      /* istanbul ignore else */\n      if (!this.selectedItems.length) {\n        this.updateMandatory(true)\n      }\n    },\n    updateItem (item: GroupableInstance, index: number) {\n      const value = this.getValue(item, index)\n\n      item.isActive = this.toggleMethod(value)\n    },\n    updateItemsState () {\n      if (this.mandatory &&\n        !this.selectedItems.length\n      ) {\n        return this.updateMandatory()\n      }\n\n      // TODO: Make this smarter so it\n      // doesn't have to iterate every\n      // child in an update\n      this.items.forEach(this.updateItem)\n    },\n    updateInternalValue (value: any) {\n      this.multiple\n        ? this.updateMultiple(value)\n        : this.updateSingle(value)\n    },\n    updateMandatory (last?: boolean) {\n      if (!this.items.length) return\n\n      const index = last ? this.items.length - 1 : 0\n\n      this.updateInternalValue(\n        this.getValue(this.items[index], index)\n      )\n    },\n    updateMultiple (value: any) {\n      const defaultValue = Array.isArray(this.internalValue)\n        ? this.internalValue\n        : []\n      const internalValue = defaultValue.slice()\n      const index = internalValue.findIndex(val => val === value)\n\n      if (\n        this.mandatory &&\n        // Item already exists\n        index > -1 &&\n        // value would be reduced below min\n        internalValue.length - 1 < 1\n      ) return\n\n      if (\n        // Max is set\n        this.max != null &&\n        // Item doesn't exist\n        index < 0 &&\n        // value woudl be increased above max\n        internalValue.length + 1 > this.max\n      ) return\n\n      index > -1\n        ? internalValue.splice(index, 1)\n        : internalValue.push(value)\n\n      this.internalValue = internalValue\n    },\n    updateSingle (value: any) {\n      const isSame = value === this.internalValue\n\n      if (this.mandatory && isSame) return\n\n      this.internalValue = isSame ? undefined : value\n    }\n  },\n\n  render (h): VNode {\n    return h('div', {\n      staticClass: 'v-item-group',\n      class: this.classes\n    }, this.$slots.default)\n  }\n})\n\nexport default BaseItemGroup.extend({\n  name: 'v-item-group',\n\n  provide (): object {\n    return {\n      itemGroup: this\n    }\n  }\n})\n"",""import VItem from './VItem'\nimport VItemGroup from './VItemGroup'\n\nexport {\n  VItem,\n  VItemGroup\n}\n\nexport default {\n  $_vuetify_subcomponents: {\n    VItem,\n    VItemGroup\n  }\n}\n"",""import '../../stylus/components/_jumbotrons.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { deprecate } from '../../util/console'\n\n/* @vue/component */\nexport default {\n  name: 'v-jumbotron',\n\n  mixins: [\n    Colorable,\n    Routable,\n    Themeable\n  ],\n\n  props: {\n    gradient: String,\n    height: {\n      type: [Number, String],\n      default: '400px'\n    },\n    src: String,\n    tag: {\n      type: String,\n      default: 'div'\n    }\n  },\n\n  computed: {\n    backgroundStyles () {\n      const styles = {}\n\n      if (this.gradient) {\n        styles.background = `linear-gradient(${this.gradient})`\n      }\n\n      return styles\n    },\n    classes () {\n      return this.themeClasses\n    },\n    styles () {\n      return {\n        height: this.height\n      }\n    }\n  },\n\n  mounted () {\n    deprecate('v-jumbotron', this.src ? 'v-img' : 'v-responsive', this)\n  },\n\n  methods: {\n    genBackground () {\n      return this.$createElement('div', this.setBackgroundColor(this.color, {\n        staticClass: 'v-jumbotron__background',\n        style: this.backgroundStyles\n      }))\n    },\n    genContent () {\n      return this.$createElement('div', {\n        staticClass: 'v-jumbotron__content'\n      }, this.$slots.default)\n    },\n    genImage () {\n      if (!this.src) return null\n      if (this.$slots.img) return this.$slots.img({ src: this.src })\n\n      return this.$createElement('img', {\n        staticClass: 'v-jumbotron__image',\n        attrs: { src: this.src }\n      })\n    },\n    genWrapper () {\n      return this.$createElement('div', {\n        staticClass: 'v-jumbotron__wrapper'\n      }, [\n        this.genImage(),\n        this.genBackground(),\n        this.genContent()\n      ])\n    }\n  },\n\n  render (h) {\n    const { tag, data } = this.generateRouteLink(this.classes)\n    data.staticClass = 'v-jumbotron'\n    data.style = this.styles\n\n    return h(tag, data, [this.genWrapper()])\n  }\n}\n"",""import VJumbotron from './VJumbotron'\n\nexport { VJumbotron }\nexport default VJumbotron\n"",""// Styles\nimport '../../stylus/components/_labels.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-label',\n\n  functional: true,\n\n  mixins: [Themeable],\n\n  props: {\n    absolute: Boolean,\n    color: {\n      type: [Boolean, String],\n      default: 'primary'\n    },\n    disabled: Boolean,\n    focused: Boolean,\n    for: String,\n    left: {\n      type: [Number, String],\n      default: 0\n    },\n    right: {\n      type: [Number, String],\n      default: 'auto'\n    },\n    value: Boolean\n  },\n\n  render (h, ctx) {\n    const { children, listeners, props } = ctx\n    const data = {\n      staticClass: 'v-label',\n      'class': {\n        'v-label--active': props.value,\n        'v-label--is-disabled': props.disabled,\n        ...functionalThemeClasses(ctx)\n      },\n      attrs: {\n        for: props.for,\n        'aria-hidden': !props.for\n      },\n      on: listeners,\n      style: {\n        left: convertToUnit(props.left),\n        right: convertToUnit(props.right),\n        position: props.absolute ? 'absolute' : 'relative'\n      }\n    }\n\n    return h('label', Colorable.options.methods.setTextColor(props.focused && props.color, data), children)\n  }\n}\n"",""import VLabel from './VLabel'\n\nexport { VLabel }\nexport default VLabel\n"",""// Styles\nimport '../../stylus/components/_lists.styl'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport {\n  provide as RegistrableProvide\n} from '../../mixins/registrable'\n\n/* @vue/component */\nexport default {\n  name: 'v-list',\n\n  mixins: [\n    RegistrableProvide('list'),\n    Themeable\n  ],\n\n  provide () {\n    return {\n      'listClick': this.listClick\n    }\n  },\n\n  props: {\n    dense: Boolean,\n    expand: Boolean,\n    subheader: Boolean,\n    threeLine: Boolean,\n    twoLine: Boolean\n  },\n\n  data: () => ({\n    groups: []\n  }),\n\n  computed: {\n    classes () {\n      return {\n        'v-list--dense': this.dense,\n        'v-list--subheader': this.subheader,\n        'v-list--two-line': this.twoLine,\n        'v-list--three-line': this.threeLine,\n        ...this.themeClasses\n      }\n    }\n  },\n\n  methods: {\n    register (uid, cb) {\n      this.groups.push({ uid, cb })\n    },\n    unregister (uid) {\n      const index = this.groups.findIndex(g => g.uid === uid)\n\n      if (index > -1) {\n        this.groups.splice(index, 1)\n      }\n    },\n    listClick (uid) {\n      if (this.expand) return\n\n      for (let i = this.groups.length; i--;) {\n        this.groups[i].cb(uid)\n      }\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'v-list',\n      'class': this.classes\n    }\n\n    return h('div', data, [this.$slots.default])\n  }\n}\n"",""// Components\nimport VIcon from '../../components/VIcon'\n\n// Mixins\nimport Bootable from '../../mixins/bootable'\nimport Toggleable from '../../mixins/toggleable'\nimport {\n  inject as RegistrableInject\n} from '../../mixins/registrable'\n\n// Transitions\nimport { VExpandTransition } from '../transitions'\n\n/* @vue/component */\nexport default {\n  name: 'v-list-group',\n\n  mixins: [\n    Bootable,\n    RegistrableInject('list', 'v-list-group', 'v-list'),\n    Toggleable\n  ],\n\n  inject: ['listClick'],\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'primary--text'\n    },\n    appendIcon: {\n      type: String,\n      default: '$vuetify.icons.expand'\n    },\n    disabled: Boolean,\n    group: String,\n    noAction: Boolean,\n    prependIcon: String,\n    subGroup: Boolean\n  },\n\n  data: () => ({\n    groups: []\n  }),\n\n  computed: {\n    groupClasses () {\n      return {\n        'v-list__group--active': this.isActive,\n        'v-list__group--disabled': this.disabled\n      }\n    },\n    headerClasses () {\n      return {\n        'v-list__group__header--active': this.isActive,\n        'v-list__group__header--sub-group': this.subGroup\n      }\n    },\n    itemsClasses () {\n      return {\n        'v-list__group__items--no-action': this.noAction\n      }\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      if (!this.subGroup && val) {\n        this.listClick(this._uid)\n      }\n    },\n    $route (to) {\n      const isActive = this.matchRoute(to.path)\n\n      if (this.group) {\n        if (isActive && this.isActive !== isActive) {\n          this.listClick(this._uid)\n        }\n\n        this.isActive = isActive\n      }\n    }\n  },\n\n  mounted () {\n    this.list.register(this._uid, this.toggle)\n\n    if (this.group &&\n      this.$route &&\n      this.value == null\n    ) {\n      this.isActive = this.matchRoute(this.$route.path)\n    }\n  },\n\n  beforeDestroy () {\n    this.list.unregister(this._uid)\n  },\n\n  methods: {\n    click () {\n      if (this.disabled) return\n\n      this.isActive = !this.isActive\n    },\n    genIcon (icon) {\n      return this.$createElement(VIcon, icon)\n    },\n    genAppendIcon () {\n      const icon = !this.subGroup ? this.appendIcon : false\n\n      if (!icon && !this.$slots.appendIcon) return null\n\n      return this.$createElement('div', {\n        staticClass: 'v-list__group__header__append-icon'\n      }, [\n        this.$slots.appendIcon || this.genIcon(icon)\n      ])\n    },\n    genGroup () {\n      return this.$createElement('div', {\n        staticClass: 'v-list__group__header',\n        'class': this.headerClasses,\n        on: Object.assign({}, {\n          click: this.click\n        }, this.$listeners),\n        ref: 'item'\n      }, [\n        this.genPrependIcon(),\n        this.$slots.activator,\n        this.genAppendIcon()\n      ])\n    },\n    genItems () {\n      return this.$createElement('div', {\n        staticClass: 'v-list__group__items',\n        'class': this.itemsClasses,\n        directives: [{\n          name: 'show',\n          value: this.isActive\n        }],\n        ref: 'group'\n      }, this.showLazyContent(this.$slots.default))\n    },\n    genPrependIcon () {\n      const icon = this.prependIcon\n        ? this.prependIcon\n        : this.subGroup\n          ? '$vuetify.icons.subgroup'\n          : false\n\n      if (!icon && !this.$slots.prependIcon) return null\n\n      return this.$createElement('div', {\n        staticClass: 'v-list__group__header__prepend-icon',\n        'class': {\n          [this.activeClass]: this.isActive\n        }\n      }, [\n        this.$slots.prependIcon || this.genIcon(icon)\n      ])\n    },\n    toggle (uid) {\n      this.isActive = this._uid === uid\n    },\n    matchRoute (to) {\n      if (!this.group) return false\n      return to.match(this.group) !== null\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      staticClass: 'v-list__group',\n      'class': this.groupClasses\n    }, [\n      this.genGroup(),\n      h(VExpandTransition, [this.genItems()])\n    ])\n  }\n}\n"",""// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Routable from '../../mixins/routable'\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Ripple from '../../directives/ripple'\n\n/* @vue/component */\nexport default {\n  name: 'v-list-tile',\n\n  directives: {\n    Ripple\n  },\n\n  mixins: [\n    Colorable,\n    Routable,\n    Toggleable,\n    Themeable\n  ],\n\n  inheritAttrs: false,\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'primary--text'\n    },\n    avatar: Boolean,\n    inactive: Boolean,\n    tag: String\n  },\n\n  data: () => ({\n    proxyClass: 'v-list__tile--active'\n  }),\n\n  computed: {\n    listClasses () {\n      return this.disabled\n        ? { 'v-list--disabled': true }\n        : undefined\n    },\n    classes () {\n      return {\n        'v-list__tile': true,\n        'v-list__tile--link': this.isLink && !this.inactive,\n        'v-list__tile--avatar': this.avatar,\n        'v-list__tile--disabled': this.disabled,\n        'v-list__tile--active': !this.to && this.isActive,\n        ...this.themeClasses,\n        [this.activeClass]: this.isActive\n      }\n    },\n    isLink () {\n      return this.href || this.to ||\n        (this.$listeners && (this.$listeners.click || this.$listeners['!click']))\n    }\n  },\n\n  render (h) {\n    const isRouteLink = !this.inactive && this.isLink\n    const { tag, data } = isRouteLink ? this.generateRouteLink(this.classes) : {\n      tag: this.tag || 'div',\n      data: {\n        class: this.classes\n      }\n    }\n\n    data.attrs = Object.assign({}, data.attrs, this.$attrs)\n\n    return h('div', this.setTextColor(!this.disabled && this.color, {\n      class: this.listClasses,\n      attrs: {\n        disabled: this.disabled\n      },\n      on: {\n        ...this.$listeners\n      }\n    }), [h(tag, data, this.$slots.default)])\n  }\n}\n"",""/* @vue/component */\nexport default {\n  name: 'v-list-tile-action',\n\n  functional: true,\n\n  render (h, { data, children = [] }) {\n    data.staticClass = data.staticClass ? `v-list__tile__action ${data.staticClass}` : 'v-list__tile__action'\n    const filteredChild = children.filter(VNode => {\n      return VNode.isComment === false && VNode.text !== ' '\n    })\n    if (filteredChild.length > 1) data.staticClass += ' v-list__tile__action--stack'\n\n    return h('div', data, children)\n  }\n}\n"",""// Components\nimport VAvatar from '../VAvatar'\n\n/* @vue/component */\nexport default {\n  name: 'v-list-tile-avatar',\n\n  functional: true,\n\n  props: {\n    color: String,\n    size: {\n      type: [Number, String],\n      default: 40\n    },\n    tile: Boolean\n  },\n\n  render (h, { data, children, props }) {\n    data.staticClass = (`v-list__tile__avatar ${data.staticClass || ''}`).trim()\n\n    const avatar = h(VAvatar, {\n      props: {\n        color: props.color,\n        size: props.size,\n        tile: props.tile\n      }\n    }, [children])\n\n    return h('div', data, [avatar])\n  }\n}\n"",""import { createSimpleFunctional } from '../../util/helpers'\n\nimport VList from './VList'\nimport VListGroup from './VListGroup'\nimport VListTile from './VListTile'\nimport VListTileAction from './VListTileAction'\nimport VListTileAvatar from './VListTileAvatar'\n\nexport { VList, VListGroup, VListTile, VListTileAction, VListTileAvatar }\nexport const VListTileActionText = createSimpleFunctional('v-list__tile__action-text', 'span')\nexport const VListTileContent = createSimpleFunctional('v-list__tile__content', 'div')\nexport const VListTileTitle = createSimpleFunctional('v-list__tile__title', 'div')\nexport const VListTileSubTitle = createSimpleFunctional('v-list__tile__sub-title', 'div')\n\nexport default {\n  $_vuetify_subcomponents: {\n    VList,\n    VListGroup,\n    VListTile,\n    VListTileAction,\n    VListTileActionText,\n    VListTileAvatar,\n    VListTileContent,\n    VListTileSubTitle,\n    VListTileTitle\n  }\n}\n"",""import '../../stylus/components/_menus.styl'\n\nimport Vue from 'vue'\n\n// Mixins\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable.js'\nimport Returnable from '../../mixins/returnable'\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\n\n// Component level mixins\nimport Activator from './mixins/menu-activator'\nimport Generators from './mixins/menu-generators'\nimport Keyable from './mixins/menu-keyable'\nimport Position from './mixins/menu-position'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\nimport ThemeProvider from '../../util/ThemeProvider'\n\n/* @vue/component */\nexport default Vue.extend({\n  name: 'v-menu',\n\n  provide () {\n    return {\n      // Pass theme through to default slot\n      theme: this.theme\n    }\n  },\n\n  directives: {\n    ClickOutside,\n    Resize\n  },\n\n  mixins: [\n    Activator,\n    Dependent,\n    Delayable,\n    Detachable,\n    Generators,\n    Keyable,\n    Menuable,\n    Position,\n    Returnable,\n    Toggleable,\n    Themeable\n  ],\n\n  props: {\n    auto: Boolean,\n    closeOnClick: {\n      type: Boolean,\n      default: true\n    },\n    closeOnContentClick: {\n      type: Boolean,\n      default: true\n    },\n    disabled: Boolean,\n    fullWidth: Boolean,\n    maxHeight: { default: 'auto' },\n    offsetX: Boolean,\n    offsetY: Boolean,\n    openOnClick: {\n      type: Boolean,\n      default: true\n    },\n    openOnHover: Boolean,\n    origin: {\n      type: String,\n      default: 'top left'\n    },\n    transition: {\n      type: [Boolean, String],\n      default: 'v-menu-transition'\n    }\n  },\n\n  data () {\n    return {\n      defaultOffset: 8,\n      maxHeightAutoDefault: '200px',\n      startIndex: 3,\n      stopIndex: 0,\n      hasJustFocused: false,\n      resizeTimeout: null\n    }\n  },\n\n  computed: {\n    calculatedLeft () {\n      if (!this.auto) return this.calcLeft()\n\n      return `${this.calcXOverflow(this.calcLeftAuto())}px`\n    },\n    calculatedMaxHeight () {\n      return this.auto ? '200px' : convertToUnit(this.maxHeight)\n    },\n    calculatedMaxWidth () {\n      return isNaN(this.maxWidth)\n        ? this.maxWidth\n        : `${this.maxWidth}px`\n    },\n    calculatedMinWidth () {\n      if (this.minWidth) {\n        return isNaN(this.minWidth)\n          ? this.minWidth\n          : `${this.minWidth}px`\n      }\n\n      const minWidth = (\n        this.dimensions.activator.width +\n        this.nudgeWidth +\n        (this.auto ? 16 : 0)\n      )\n\n      const calculatedMaxWidth = isNaN(parseInt(this.calculatedMaxWidth))\n        ? minWidth\n        : parseInt(this.calculatedMaxWidth)\n\n      return `${Math.min(\n        calculatedMaxWidth,\n        minWidth\n      )}px`\n    },\n    calculatedTop () {\n      if (!this.auto || this.isAttached) return this.calcTop()\n\n      return `${this.calcYOverflow(this.calcTopAuto())}px`\n    },\n    styles () {\n      return {\n        maxHeight: this.calculatedMaxHeight,\n        minWidth: this.calculatedMinWidth,\n        maxWidth: this.calculatedMaxWidth,\n        top: this.calculatedTop,\n        left: this.calculatedLeft,\n        transformOrigin: this.origin,\n        zIndex: this.zIndex || this.activeZIndex\n      }\n    },\n    tileHeight () {\n      return this.dense ? 36 : 48\n    }\n  },\n\n  watch: {\n    activator (newActivator, oldActivator) {\n      this.removeActivatorEvents(oldActivator)\n      this.addActivatorEvents(newActivator)\n    },\n    isContentActive (val) {\n      this.hasJustFocused = val\n    }\n  },\n\n  methods: {\n    activate () {\n      // This exists primarily for v-select\n      // helps determine which tiles to activate\n      this.getTiles()\n      // Update coordinates and dimensions of menu\n      // and its activator\n      this.updateDimensions()\n      // Start the transition\n      requestAnimationFrame(this.startTransition)\n      // Once transitioning, calculate scroll position\n      setTimeout(this.calculateScroll, 50)\n    },\n    closeConditional () {\n      return this.isActive && this.closeOnClick\n    },\n    onResize () {\n      if (!this.isActive) return\n\n      // Account for screen resize\n      // and orientation change\n      // eslint-disable-next-line no-unused-expressions\n      this.$refs.content.offsetWidth\n      this.updateDimensions()\n\n      // When resizing to a smaller width\n      // content width is evaluated before\n      // the new activator width has been\n      // set, causing it to not size properly\n      // hacky but will revisit in the future\n      clearTimeout(this.resizeTimeout)\n      this.resizeTimeout = setTimeout(this.updateDimensions, 100)\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'v-menu',\n      class: { 'v-menu--inline': !this.fullWidth && this.$slots.activator },\n      directives: [{\n        arg: 500,\n        name: 'resize',\n        value: this.onResize\n      }],\n      on: {\n        keydown: this.onKeyDown\n      }\n    }\n\n    return h('div', data, [\n      this.genActivator(),\n      this.$createElement(ThemeProvider, {\n        props: {\n          root: true,\n          light: this.light,\n          dark: this.dark\n        }\n      }, [this.genTransition()])\n    ])\n  }\n})\n"",""import VMenu from './VMenu'\n\nexport { VMenu }\nexport default VMenu\n"",""/**\n * Menu activator\n *\n * @mixin\n *\n * Handles the click and hover activation\n * Supports slotted and detached activators\n */\n/* @vue/component */\nexport default {\n  methods: {\n    activatorClickHandler (e) {\n      if (this.disabled) return\n      if (this.openOnClick && !this.isActive) {\n        this.getActivator().focus()\n        this.isActive = true\n        this.absoluteX = e.clientX\n        this.absoluteY = e.clientY\n      } else if (this.closeOnClick && this.isActive) {\n        this.getActivator().blur()\n        this.isActive = false\n      }\n    },\n    mouseEnterHandler () {\n      this.runDelay('open', () => {\n        if (this.hasJustFocused) return\n\n        this.hasJustFocused = true\n        this.isActive = true\n      })\n    },\n    mouseLeaveHandler (e) {\n      // Prevent accidental re-activation\n      this.runDelay('close', () => {\n        if (this.$refs.content.contains(e.relatedTarget)) return\n\n        requestAnimationFrame(() => {\n          this.isActive = false\n          this.callDeactivate()\n        })\n      })\n    },\n    addActivatorEvents (activator = null) {\n      if (!activator) return\n      activator.addEventListener('click', this.activatorClickHandler)\n    },\n    removeActivatorEvents (activator = null) {\n      if (!activator) return\n      activator.removeEventListener('click', this.activatorClickHandler)\n    }\n  }\n}\n"",""/* @vue/component */\nexport default {\n  methods: {\n    genActivator () {\n      if (!this.$slots.activator) return null\n\n      const options = {\n        staticClass: 'v-menu__activator',\n        'class': {\n          'v-menu__activator--active': this.hasJustFocused || this.isActive,\n          'v-menu__activator--disabled': this.disabled\n        },\n        ref: 'activator',\n        on: {}\n      }\n\n      if (this.openOnHover) {\n        options.on['mouseenter'] = this.mouseEnterHandler\n        options.on['mouseleave'] = this.mouseLeaveHandler\n      } else if (this.openOnClick) {\n        options.on['click'] = this.activatorClickHandler\n      }\n\n      return this.$createElement('div', options, this.$slots.activator)\n    },\n\n    genTransition () {\n      if (!this.transition) return this.genContent()\n\n      return this.$createElement('transition', {\n        props: {\n          name: this.transition\n        }\n      }, [this.genContent()])\n    },\n\n    genDirectives () {\n      // Do not add click outside for hover menu\n      const directives = !this.openOnHover && this.closeOnClick ? [{\n        name: 'click-outside',\n        value: () => (this.isActive = false),\n        args: {\n          closeConditional: this.closeConditional,\n          include: () => [this.$el, ...this.getOpenDependentElements()]\n        }\n      }] : []\n\n      directives.push({\n        name: 'show',\n        value: this.isContentActive\n      })\n\n      return directives\n    },\n\n    genContent () {\n      const options = {\n        attrs: this.getScopeIdAttrs(),\n        staticClass: 'v-menu__content',\n        'class': {\n          ...this.rootThemeClasses,\n          'v-menu__content--auto': this.auto,\n          'menuable__content__active': this.isActive,\n          [this.contentClass.trim()]: true\n        },\n        style: this.styles,\n        directives: this.genDirectives(),\n        ref: 'content',\n        on: {\n          click: e => {\n            e.stopPropagation()\n            if (e.target.getAttribute('disabled')) return\n            if (this.closeOnContentClick) this.isActive = false\n          }\n        }\n      }\n\n      !this.disabled && this.openOnHover && (options.on.mouseenter = this.mouseEnterHandler)\n      this.openOnHover && (options.on.mouseleave = this.mouseLeaveHandler)\n\n      return this.$createElement('div', options, this.showLazyContent(this.$slots.default))\n    }\n  }\n}\n"",""/**\n * Menu keyable\n *\n * @mixin\n *\n * Primarily used to support VSelect\n * Handles opening and closing of VMenu from keystrokes\n * Will conditionally highlight VListTiles for VSelect\n */\n\n// Utils\nimport { keyCodes } from '../../../util/helpers'\n\n/* @vue/component */\nexport default {\n  data: () => ({\n    listIndex: -1,\n    tiles: []\n  }),\n\n  watch: {\n    isActive (val) {\n      if (!val) this.listIndex = -1\n    },\n    listIndex (next, prev) {\n      if (next in this.tiles) {\n        const tile = this.tiles[next]\n        tile.classList.add('v-list__tile--highlighted')\n        this.$refs.content.scrollTop = tile.offsetTop - tile.clientHeight\n      }\n\n      prev in this.tiles &&\n        this.tiles[prev].classList.remove('v-list__tile--highlighted')\n    }\n  },\n\n  methods: {\n    onKeyDown (e) {\n      if ([\n        keyCodes.down,\n        keyCodes.up,\n        keyCodes.enter\n      ].includes(e.keyCode)\n      ) e.preventDefault()\n\n      if ([keyCodes.esc, keyCodes.tab].includes(e.keyCode)) {\n        return this.isActive = false\n      }\n\n      this.changeListIndex(e)\n    },\n    changeListIndex (e) {\n      // For infinite scroll and autocomplete, re-evaluate children\n      this.getTiles()\n\n      if (e.keyCode === keyCodes.down && this.listIndex < this.tiles.length - 1) {\n        this.listIndex++\n        // Allow user to set listIndex to -1 so\n        // that the list can be un-highlighted\n      } else if (e.keyCode === keyCodes.up && this.listIndex > -1) {\n        this.listIndex--\n      } else if (e.keyCode === keyCodes.enter && this.listIndex !== -1) {\n        this.tiles[this.listIndex].click()\n      }\n    },\n    getTiles () {\n      this.tiles = this.$refs.content.querySelectorAll('.v-list__tile')\n    }\n  }\n}\n"",""/**\n * Menu position\n *\n * @mixin\n *\n * Used for calculating an automatic position (used for VSelect)\n * Will position the VMenu content properly over the VSelect\n */\n/* @vue/component */\nexport default {\n  methods: {\n    // Revisit this\n    calculateScroll () {\n      if (this.selectedIndex === null) return\n\n      let scrollTop = 0\n\n      if (this.selectedIndex >= this.stopIndex) {\n        scrollTop = this.$refs.content.scrollHeight\n      } else if (this.selectedIndex > this.startIndex) {\n        scrollTop = (\n          // Top position of selected item\n          (this.selectedIndex * this.tileHeight) +\n          // Remove half of a tile's height\n          (this.tileHeight / 2) +\n          // Account for padding offset on lists\n          (this.defaultOffset / 2) -\n          // Half of the auto content's height\n          100\n        )\n      }\n\n      if (this.$refs.content) {\n        this.$refs.content.scrollTop = scrollTop\n      }\n    },\n    calcLeftAuto () {\n      if (this.isAttached) return 0\n\n      return parseInt(this.dimensions.activator.left - this.defaultOffset * 2)\n    },\n    calcTopAuto () {\n      const selectedIndex = Array.from(this.tiles)\n        .findIndex(n => n.classList.contains('v-list__tile--active'))\n\n      if (selectedIndex === -1) {\n        this.selectedIndex = null\n\n        return this.computedTop\n      }\n\n      this.selectedIndex = selectedIndex\n      this.stopIndex = this.tiles.length > 4\n        ? this.tiles.length - 4\n        : this.tiles.length\n      let additionalOffset = this.defaultOffset\n      let offsetPadding\n\n      // Menu should be centered\n      if (selectedIndex > this.startIndex &&\n        selectedIndex < this.stopIndex\n      ) {\n        offsetPadding = 1.5 * this.tileHeight\n      // Menu should be offset top\n      } else if (selectedIndex >= this.stopIndex) {\n        // Being offset top means\n        // we have to account for top\n        // and bottom list padding\n        additionalOffset *= 2\n        offsetPadding = (selectedIndex - this.stopIndex) * this.tileHeight\n      // Menu should be offset bottom\n      } else {\n        offsetPadding = selectedIndex * this.tileHeight\n      }\n\n      return (\n        this.computedTop +\n        additionalOffset -\n        offsetPadding -\n        (this.tileHeight / 2)\n      )\n    }\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_messages.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n/* @vue/component */\nexport default {\n  name: 'v-messages',\n\n  mixins: [Colorable, Themeable],\n\n  props: {\n    value: {\n      type: Array,\n      default: () => ([])\n    }\n  },\n\n  methods: {\n    genChildren () {\n      return this.$createElement('transition-group', {\n        staticClass: 'v-messages__wrapper',\n        attrs: {\n          name: 'message-transition',\n          tag: 'div'\n        }\n      }, this.value.map(this.genMessage))\n    },\n    genMessage (message, key) {\n      return this.$createElement('div', {\n        staticClass: 'v-messages__message',\n        key,\n        domProps: {\n          innerHTML: message\n        }\n      })\n    }\n  },\n\n  render (h) {\n    return h('div', this.setTextColor(this.color, {\n      staticClass: 'v-messages',\n      class: this.themeClasses\n    }), [this.genChildren()])\n  }\n}\n"",""import VMessages from './VMessages'\n\nexport { VMessages }\nexport default VMessages\n"",""import '../../stylus/components/_navigation-drawer.styl'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport Dependent from '../../mixins/dependent'\nimport Overlayable from '../../mixins/overlayable'\nimport SSRBootable from '../../mixins/ssr-bootable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-navigation-drawer',\n\n  directives: {\n    ClickOutside,\n    Resize,\n    Touch\n  },\n\n  mixins: [\n    Applicationable(null, [\n      'miniVariant',\n      'right',\n      'width'\n    ]),\n    Dependent,\n    Overlayable,\n    SSRBootable,\n    Themeable\n  ],\n\n  props: {\n    clipped: Boolean,\n    disableRouteWatcher: Boolean,\n    disableResizeWatcher: Boolean,\n    height: {\n      type: [Number, String],\n      default: '100%'\n    },\n    floating: Boolean,\n    miniVariant: Boolean,\n    miniVariantWidth: {\n      type: [Number, String],\n      default: 80\n    },\n    mobileBreakPoint: {\n      type: [Number, String],\n      default: 1264\n    },\n    permanent: Boolean,\n    right: Boolean,\n    stateless: Boolean,\n    temporary: Boolean,\n    touchless: Boolean,\n    width: {\n      type: [Number, String],\n      default: 300\n    },\n    value: { required: false }\n  },\n\n  data: () => ({\n    isActive: false,\n    touchArea: {\n      left: 0,\n      right: 0\n    }\n  }),\n\n  computed: {\n    /**\n     * Used for setting an app\n     * value from a dynamic\n     * property. Called from\n     * applicationable.js\n     *\n     * @return {string}\n     */\n    applicationProperty () {\n      return this.right ? 'right' : 'left'\n    },\n    calculatedTransform () {\n      if (this.isActive) return 0\n\n      return this.right\n        ? this.calculatedWidth\n        : -this.calculatedWidth\n    },\n    calculatedWidth () {\n      return this.miniVariant\n        ? this.miniVariantWidth\n        : this.width\n    },\n    classes () {\n      return {\n        'v-navigation-drawer': true,\n        'v-navigation-drawer--absolute': this.absolute,\n        'v-navigation-drawer--clipped': this.clipped,\n        'v-navigation-drawer--close': !this.isActive,\n        'v-navigation-drawer--fixed': !this.absolute && (this.app || this.fixed),\n        'v-navigation-drawer--floating': this.floating,\n        'v-navigation-drawer--is-mobile': this.isMobile,\n        'v-navigation-drawer--mini-variant': this.miniVariant,\n        'v-navigation-drawer--open': this.isActive,\n        'v-navigation-drawer--right': this.right,\n        'v-navigation-drawer--temporary': this.temporary,\n        ...this.themeClasses\n      }\n    },\n    hasApp () {\n      return this.app &&\n        (!this.isMobile && !this.temporary)\n    },\n    isMobile () {\n      return !this.stateless &&\n        !this.permanent &&\n        !this.temporary &&\n        this.$vuetify.breakpoint.width < parseInt(this.mobileBreakPoint, 10)\n    },\n    marginTop () {\n      if (!this.hasApp) return 0\n\n      let marginTop = this.$vuetify.application.bar\n\n      marginTop += this.clipped\n        ? this.$vuetify.application.top\n        : 0\n\n      return marginTop\n    },\n    maxHeight () {\n      if (!this.hasApp) return null\n\n      const maxHeight = (\n        this.$vuetify.application.bottom +\n        this.$vuetify.application.footer +\n        this.$vuetify.application.bar\n      )\n\n      if (!this.clipped) return maxHeight\n\n      return maxHeight + this.$vuetify.application.top\n    },\n    reactsToClick () {\n      return !this.stateless &&\n        !this.permanent &&\n        (this.isMobile || this.temporary)\n    },\n    reactsToMobile () {\n      return !this.disableResizeWatcher &&\n        !this.stateless &&\n        !this.permanent &&\n        !this.temporary\n    },\n    reactsToRoute () {\n      return !this.disableRouteWatcher &&\n        !this.stateless &&\n        (this.temporary || this.isMobile)\n    },\n    resizeIsDisabled () {\n      return this.disableResizeWatcher || this.stateless\n    },\n    showOverlay () {\n      return this.isActive &&\n        (this.isMobile || this.temporary)\n    },\n    styles () {\n      const styles = {\n        height: convertToUnit(this.height),\n        marginTop: `${this.marginTop}px`,\n        maxHeight: `calc(100% - ${+this.maxHeight}px)`,\n        transform: `translateX(${this.calculatedTransform}px)`,\n        width: `${this.calculatedWidth}px`\n      }\n\n      return styles\n    }\n  },\n\n  watch: {\n    $route () {\n      if (this.reactsToRoute && this.closeConditional()) {\n        this.isActive = false\n      }\n    },\n    isActive (val) {\n      this.$emit('input', val)\n      this.callUpdate()\n    },\n    /**\n     * When mobile changes, adjust\n     * the active state only when\n     * there has been a previous\n     * value\n     */\n    isMobile (val, prev) {\n      !val &&\n        this.isActive &&\n        !this.temporary &&\n        this.removeOverlay()\n\n      if (prev == null ||\n        this.resizeIsDisabled ||\n        !this.reactsToMobile\n      ) return\n\n      this.isActive = !val\n      this.callUpdate()\n    },\n    permanent (val) {\n      // If enabling prop\n      // enable the drawer\n      if (val) {\n        this.isActive = true\n      }\n      this.callUpdate()\n    },\n    showOverlay (val) {\n      if (val) this.genOverlay()\n      else this.removeOverlay()\n    },\n    temporary () {\n      this.callUpdate()\n    },\n    value (val) {\n      if (this.permanent) return\n\n      if (val == null) return this.init()\n\n      if (val !== this.isActive) this.isActive = val\n    }\n  },\n\n  beforeMount () {\n    this.init()\n  },\n\n  methods: {\n    calculateTouchArea () {\n      if (!this.$el.parentNode) return\n      const parentRect = this.$el.parentNode.getBoundingClientRect()\n\n      this.touchArea = {\n        left: parentRect.left + 50,\n        right: parentRect.right - 50\n      }\n    },\n    closeConditional () {\n      return this.isActive && this.reactsToClick\n    },\n    genDirectives () {\n      const directives = [{\n        name: 'click-outside',\n        value: () => (this.isActive = false),\n        args: {\n          closeConditional: this.closeConditional,\n          include: this.getOpenDependentElements\n        }\n      }]\n\n      !this.touchless && directives.push({\n        name: 'touch',\n        value: {\n          parent: true,\n          left: this.swipeLeft,\n          right: this.swipeRight\n        }\n      })\n\n      return directives\n    },\n    /**\n     * Sets state before mount to avoid\n     * entry transitions in SSR\n     *\n     * @return {void}\n     */\n    init () {\n      if (this.permanent) {\n        this.isActive = true\n      } else if (this.stateless ||\n        this.value != null\n      ) {\n        this.isActive = this.value\n      } else if (!this.temporary) {\n        this.isActive = !this.isMobile\n      }\n    },\n    swipeRight (e) {\n      if (this.isActive && !this.right) return\n      this.calculateTouchArea()\n\n      if (Math.abs(e.touchendX - e.touchstartX) < 100) return\n      if (!this.right &&\n        e.touchstartX <= this.touchArea.left\n      ) this.isActive = true\n      else if (this.right && this.isActive) this.isActive = false\n    },\n    swipeLeft (e) {\n      if (this.isActive && this.right) return\n      this.calculateTouchArea()\n\n      if (Math.abs(e.touchendX - e.touchstartX) < 100) return\n      if (this.right &&\n        e.touchstartX >= this.touchArea.right\n      ) this.isActive = true\n      else if (!this.right && this.isActive) this.isActive = false\n    },\n    /**\n     * Update the application layout\n     *\n     * @return {number}\n     */\n    updateApplication () {\n      return !this.isActive ||\n        this.temporary ||\n        this.isMobile\n        ? 0\n        : this.calculatedWidth\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': this.classes,\n      style: this.styles,\n      directives: this.genDirectives(),\n      on: {\n        click: () => {\n          if (!this.miniVariant) return\n\n          this.$emit('update:miniVariant', false)\n        },\n        transitionend: e => {\n          if (e.target !== e.currentTarget) return\n          this.$emit('transitionend', e)\n\n          // IE11 does not support new Event('resize')\n          const resizeEvent = document.createEvent('UIEvents')\n          resizeEvent.initUIEvent('resize', true, false, window, 0)\n          window.dispatchEvent(resizeEvent)\n        }\n      }\n    }\n\n    return h('aside', data, [\n      this.$slots.default,\n      h('div', { 'class': 'v-navigation-drawer__border' })\n    ])\n  }\n}\n"",""import VNavigationDrawer from './VNavigationDrawer'\n\nexport { VNavigationDrawer }\nexport default VNavigationDrawer\n"",""// Styles\nimport '../../stylus/components/_overflow-buttons.styl'\n\n// Extensions\nimport VSelect from '../VSelect/VSelect'\nimport VAutocomplete from '../VAutocomplete'\nimport VTextField from '../VTextField/VTextField'\n\nimport VBtn from '../VBtn'\n\nimport { consoleWarn } from '../../util/console'\n\n/* @vue/component */\nexport default {\n  name: 'v-overflow-btn',\n\n  extends: VAutocomplete,\n\n  props: {\n    segmented: Boolean,\n    editable: Boolean,\n    transition: VSelect.props.transition\n  },\n\n  computed: {\n    classes () {\n      return Object.assign(VAutocomplete.computed.classes.call(this), {\n        'v-overflow-btn': true,\n        'v-overflow-btn--segmented': this.segmented,\n        'v-overflow-btn--editable': this.editable\n      })\n    },\n    isAnyValueAllowed () {\n      return this.editable ||\n        VAutocomplete.computed.isAnyValueAllowed.call(this)\n    },\n    isSingle () {\n      return true\n    },\n    computedItems () {\n      return this.segmented ? this.allItems : this.filteredItems\n    },\n    $_menuProps () {\n      const props = VAutocomplete.computed.$_menuProps.call(this)\n      props.transition = props.transition || 'v-menu-transition'\n      return props\n    }\n  },\n\n  methods: {\n    genSelections () {\n      return this.editable\n        ? VAutocomplete.methods.genSelections.call(this)\n        : VSelect.methods.genSelections.call(this) // Override v-autocomplete's override\n    },\n    genCommaSelection (item, index, last) {\n      return this.segmented\n        ? this.genSegmentedBtn(item)\n        : VSelect.methods.genCommaSelection.call(this, item, index, last)\n    },\n    genInput () {\n      const input = VTextField.methods.genInput.call(this)\n\n      input.data.domProps.value = this.editable ? this.internalSearch : ''\n      input.data.attrs.readonly = !this.isAnyValueAllowed\n\n      return input\n    },\n    genLabel () {\n      if (this.editable && this.isFocused) return null\n\n      const label = VTextField.methods.genLabel.call(this)\n\n      if (!label) return label\n\n      // Reset previously set styles from parent\n      label.data.style = {}\n\n      return label\n    },\n    genSegmentedBtn (item) {\n      const itemValue = this.getValue(item)\n      const itemObj = this.computedItems.find(i => this.getValue(i) === itemValue) || item\n\n      if (!itemObj.text || !itemObj.callback) {\n        consoleWarn('When using \\'segmented\\' prop without a selection slot, items must contain both a text and callback property', this)\n        return null\n      }\n\n      return this.$createElement(VBtn, {\n        props: { flat: true },\n        on: {\n          click (e) {\n            e.stopPropagation()\n            itemObj.callback(e)\n          }\n        }\n      }, [itemObj.text])\n    },\n    setSelectedItems () {\n      if (this.internalValue == null) {\n        this.selectedItems = []\n      } else {\n        this.selectedItems = [this.internalValue]\n      }\n    }\n  }\n}\n"",""import VOverflowBtn from './VOverflowBtn'\n\nexport { VOverflowBtn }\nexport default VOverflowBtn\n"",""import '../../stylus/components/_pagination.styl'\n\nimport VIcon from '../VIcon'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Mixins\nimport mixins from '../../util/mixins'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Types\nimport { VNode, CreateElement } from 'vue'\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable).extend({\n  name: 'v-pagination',\n\n  directives: { Resize },\n\n  props: {\n    circle: Boolean,\n    disabled: Boolean,\n    length: {\n      type: Number,\n      default: 0,\n      validator: (val: number) => val % 1 === 0\n    },\n    totalVisible: [Number, String],\n    nextIcon: {\n      type: String,\n      default: '$vuetify.icons.next'\n    },\n    prevIcon: {\n      type: String,\n      default: '$vuetify.icons.prev'\n    },\n    value: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  data () {\n    return {\n      maxButtons: 0,\n      selected: null as number | null\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-pagination': true,\n        'v-pagination--circle': this.circle,\n        'v-pagination--disabled': this.disabled,\n        ...this.themeClasses\n      }\n    },\n\n    items (): (string | number)[] {\n      const maxLength = parseInt(this.totalVisible, 10) || this.maxButtons\n      if (this.length <= maxLength) {\n        return this.range(1, this.length)\n      }\n\n      const even = maxLength % 2 === 0 ? 1 : 0\n      const left = Math.floor(maxLength / 2)\n      const right = this.length - left + 1 + even\n\n      if (this.value > left && this.value < right) {\n        const start = this.value - left + 2\n        const end = this.value + left - 2 - even\n\n        return [1, '...', ...this.range(start, end), '...', this.length]\n      } else if (this.value === left) {\n        const end = this.value + left - 1 - even\n        return [...this.range(1, end), '...', this.length]\n      } else if (this.value === right) {\n        const start = this.value - left + 1\n        return [1, '...', ...this.range(start, this.length)]\n      } else {\n        return [\n          ...this.range(1, left),\n          '...',\n          ...this.range(right, this.length)\n        ]\n      }\n    }\n  },\n\n  watch: {\n    value () {\n      this.init()\n    }\n  },\n\n  mounted () {\n    this.init()\n  },\n\n  methods: {\n    init () {\n      this.selected = null\n\n      this.$nextTick(this.onResize)\n      // TODO: Change this (f75dee3a, cbdf7caa)\n      setTimeout(() => (this.selected = this.value), 100)\n    },\n    onResize () {\n      const width = this.$el && this.$el.parentElement\n        ? this.$el.parentElement.clientWidth\n        : window.innerWidth\n\n      this.maxButtons = Math.floor((width - 96) / 42)\n    },\n    next (e: Event) {\n      e.preventDefault()\n      this.$emit('input', this.value + 1)\n      this.$emit('next')\n    },\n    previous (e: Event) {\n      e.preventDefault()\n      this.$emit('input', this.value - 1)\n      this.$emit('previous')\n    },\n    range (from: number, to: number) {\n      const range = []\n\n      from = from > 0 ? from : 1\n\n      for (let i = from; i <= to; i++) {\n        range.push(i)\n      }\n\n      return range\n    },\n    genIcon (h: CreateElement, icon: string, disabled: boolean, fn: EventListener): VNode {\n      return h('li', [\n        h('button', {\n          staticClass: 'v-pagination__navigation',\n          class: {\n            'v-pagination__navigation--disabled': disabled\n          },\n          attrs: {\n            type: 'button'\n          },\n          on: disabled ? {} : { click: fn }\n        }, [h(VIcon, [icon])])\n      ])\n    },\n    genItem (h: CreateElement, i: string | number): VNode {\n      const color: string | false = (i === this.value) && (this.color || 'primary')\n      return h('button', this.setBackgroundColor(color, {\n        staticClass: 'v-pagination__item',\n        class: {\n          'v-pagination__item--active': i === this.value\n        },\n        attrs: {\n          type: 'button'\n        },\n        on: {\n          click: () => this.$emit('input', i)\n        }\n      }), [i.toString()])\n    },\n    genItems (h: CreateElement): VNode[] {\n      return this.items.map((i, index) => {\n        return h('li', { key: index }, [\n          isNaN(Number(i)) ? h('span', { class: 'v-pagination__more' }, [i.toString()]) : this.genItem(h, i)\n        ])\n      })\n    }\n  },\n\n  render (h): VNode {\n    const children = [\n      this.genIcon(h, this.$vuetify.rtl ? this.nextIcon : this.prevIcon, this.value <= 1, this.previous),\n      this.genItems(h),\n      this.genIcon(h, this.$vuetify.rtl ? this.prevIcon : this.nextIcon, this.value >= this.length, this.next)\n    ]\n\n    return h('ul', {\n      directives: [{\n        modifiers: { quiet: true },\n        name: 'resize',\n        value: this.onResize\n      }] as any,\n      class: this.classes\n    }, children)\n  }\n})\n"",""import VPagination from './VPagination'\n\nexport { VPagination }\nexport default VPagination\n"",""// Style\nimport '../../stylus/components/_parallax.styl'\n\n// Mixins\nimport Translatable from '../../mixins/translatable'\n\n// Types\nimport Vue from 'vue'\nimport { VNode, VNodeData } from 'vue/types/vnode'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\ninterface options extends Vue {\n  $refs: {\n    img: HTMLImageElement\n  }\n}\n\n/* @vue/component */\nexport default mixins<options & ExtractVue<typeof Translatable>>(Translatable).extend({\n  name: 'v-parallax',\n\n  props: {\n    alt: String,\n    height: {\n      type: [String, Number],\n      default: 500\n    },\n    src: String\n  },\n\n  data: () => ({\n    isBooted: false\n  }),\n\n  computed: {\n    styles (): object {\n      return {\n        display: 'block',\n        opacity: this.isBooted ? 1 : 0,\n        transform: `translate(-50%, ${this.parallax}px)`\n      }\n    }\n  },\n\n  watch: {\n    parallax () {\n      this.isBooted = true\n    }\n  },\n\n  mounted () {\n    this.init()\n  },\n\n  methods: {\n    init () {\n      const img = this.$refs.img\n\n      if (!img) return\n\n      if (img.complete) {\n        this.translate()\n        this.listeners()\n      } else {\n        img.addEventListener('load', () => {\n          this.translate()\n          this.listeners()\n        }, false)\n      }\n    },\n    objHeight () {\n      return this.$refs.img.naturalHeight\n    }\n  },\n\n  render (h): VNode {\n    const imgData: VNodeData = {\n      staticClass: 'v-parallax__image',\n      style: this.styles,\n      attrs: {\n        src: this.src\n      },\n      ref: 'img'\n    }\n\n    if (this.alt) imgData.attrs!.alt = this.alt\n\n    const container = h('div', {\n      staticClass: 'v-parallax__image-container'\n    }, [\n      h('img', imgData)\n    ])\n\n    const content = h('div', {\n      staticClass: 'v-parallax__content'\n    }, this.$slots.default)\n\n    return h('div', {\n      staticClass: 'v-parallax',\n      style: {\n        height: `${this.height}px`\n      },\n      on: this.$listeners\n    }, [container, content])\n  }\n})\n"",""import VParallax from './VParallax'\n\nexport { VParallax }\nexport default VParallax\n"",""import '../../stylus/components/_pickers.styl'\nimport '../../stylus/components/_cards.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-picker',\n\n  mixins: [Colorable, Themeable],\n\n  props: {\n    fullWidth: Boolean,\n    landscape: Boolean,\n    transition: {\n      type: String,\n      default: 'fade-transition'\n    },\n    width: {\n      type: [Number, String],\n      default: 290\n    }\n  },\n\n  computed: {\n    computedTitleColor () {\n      const defaultTitleColor = this.isDark ? null : (this.color || 'primary')\n      return this.color || defaultTitleColor\n    }\n  },\n\n  methods: {\n    genTitle () {\n      return this.$createElement('div', this.setBackgroundColor(this.computedTitleColor, {\n        staticClass: 'v-picker__title',\n        'class': {\n          'v-picker__title--landscape': this.landscape\n        }\n      }), this.$slots.title)\n    },\n    genBodyTransition () {\n      return this.$createElement('transition', {\n        props: {\n          name: this.transition\n        }\n      }, this.$slots.default)\n    },\n    genBody () {\n      return this.$createElement('div', {\n        staticClass: 'v-picker__body',\n        'class': this.themeClasses,\n        style: this.fullWidth ? undefined : {\n          width: convertToUnit(this.width)\n        }\n      }, [\n        this.genBodyTransition()\n      ])\n    },\n    genActions () {\n      return this.$createElement('div', {\n        staticClass: 'v-picker__actions v-card__actions'\n      }, this.$slots.actions)\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      staticClass: 'v-picker v-card',\n      'class': {\n        'v-picker--landscape': this.landscape,\n        'v-picker--full-width': this.fullWidth,\n        ...this.themeClasses\n      }\n    }, [\n      this.$slots.title ? this.genTitle() : null,\n      this.genBody(),\n      this.$slots.actions ? this.genActions() : null\n    ])\n  }\n}\n"",""import VPicker from './VPicker'\n\nexport { VPicker }\nexport default VPicker\n"",""import '../../stylus/components/_progress-circular.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { CreateElement, VNode, VNodeChildrenArrayContents } from 'vue'\n\n/* @vue/component */\nexport default mixins(Colorable).extend({\n  name: 'v-progress-circular',\n\n  props: {\n    button: Boolean,\n\n    indeterminate: Boolean,\n\n    rotate: {\n      type: Number,\n      default: 0\n    },\n\n    size: {\n      type: [Number, String],\n      default: 32\n    },\n\n    width: {\n      type: Number,\n      default: 4\n    },\n\n    value: {\n      type: [Number, String],\n      default: 0\n    }\n  },\n\n  computed: {\n    calculatedSize (): number {\n      return Number(this.size) + (this.button ? 8 : 0)\n    },\n\n    circumference (): number {\n      return 2 * Math.PI * this.radius\n    },\n\n    classes (): object {\n      return {\n        'v-progress-circular--indeterminate': this.indeterminate,\n        'v-progress-circular--button': this.button\n      }\n    },\n\n    normalizedValue (): number {\n      if (this.value < 0) {\n        return 0\n      }\n\n      if (this.value > 100) {\n        return 100\n      }\n\n      return parseFloat(this.value)\n    },\n\n    radius (): number {\n      return 20\n    },\n\n    strokeDashArray (): number {\n      return Math.round(this.circumference * 1000) / 1000\n    },\n\n    strokeDashOffset (): string {\n      return ((100 - this.normalizedValue) / 100) * this.circumference + 'px'\n    },\n\n    strokeWidth (): number {\n      return this.width / +this.size * this.viewBoxSize * 2\n    },\n\n    styles (): object {\n      return {\n        height: `${this.calculatedSize}px`,\n        width: `${this.calculatedSize}px`\n      }\n    },\n\n    svgStyles (): object {\n      return {\n        transform: `rotate(${this.rotate}deg)`\n      }\n    },\n\n    viewBoxSize (): number {\n      return this.radius / (1 - this.width / +this.size)\n    }\n  },\n\n  methods: {\n    genCircle (h: CreateElement, name: string, offset: string | number): VNode {\n      return h('circle', {\n        class: `v-progress-circular__${name}`,\n        attrs: {\n          fill: 'transparent',\n          cx: 2 * this.viewBoxSize,\n          cy: 2 * this.viewBoxSize,\n          r: this.radius,\n          'stroke-width': this.strokeWidth,\n          'stroke-dasharray': this.strokeDashArray,\n          'stroke-dashoffset': offset\n        }\n      })\n    },\n    genSvg (h: CreateElement): VNode {\n      const children = [\n        this.indeterminate || this.genCircle(h, 'underlay', 0),\n        this.genCircle(h, 'overlay', this.strokeDashOffset)\n      ] as VNodeChildrenArrayContents\n\n      return h('svg', {\n        style: this.svgStyles,\n        attrs: {\n          xmlns: 'http://www.w3.org/2000/svg',\n          viewBox: `${this.viewBoxSize} ${this.viewBoxSize} ${2 * this.viewBoxSize} ${2 * this.viewBoxSize}`\n        }\n      }, children)\n    }\n  },\n\n  render (h): VNode {\n    const info = h('div', { staticClass: 'v-progress-circular__info' }, [this.$slots.default])\n    const svg = this.genSvg(h)\n\n    return h('div', this.setTextColor(this.color, {\n      staticClass: 'v-progress-circular',\n      attrs: {\n        'role': 'progressbar',\n        'aria-valuemin': 0,\n        'aria-valuemax': 100,\n        'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue\n      },\n      class: this.classes,\n      style: this.styles,\n      on: this.$listeners\n    }), [svg, info])\n  }\n})\n"",""import VProgressCircular from './VProgressCircular'\n\nexport { VProgressCircular }\nexport default VProgressCircular\n"",""import '../../stylus/components/_progress-linear.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { CreateElement, VNode } from 'vue'\n\nimport {\n  VFadeTransition,\n  VSlideXTransition\n} from '../transitions'\n\n/* @vue/component */\nexport default mixins(Colorable).extend({\n  name: 'v-progress-linear',\n\n  props: {\n    active: {\n      type: Boolean,\n      default: true\n    },\n    backgroundColor: {\n      type: String,\n      default: null\n    },\n    backgroundOpacity: {\n      type: [Number, String],\n      default: null\n    },\n    bufferValue: {\n      type: [Number, String],\n      default: 100\n    },\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    height: {\n      type: [Number, String],\n      default: 7\n    },\n    indeterminate: Boolean,\n    query: Boolean,\n    value: {\n      type: [Number, String],\n      default: 0\n    }\n  },\n\n  computed: {\n    backgroundStyle (): object {\n      const backgroundOpacity = this.backgroundOpacity == null\n        ? (this.backgroundColor ? 1 : 0.3)\n        : parseFloat(this.backgroundOpacity)\n\n      return {\n        height: this.active ? convertToUnit(this.height) : 0,\n        opacity: backgroundOpacity,\n        width: `${this.normalizedBufer}%`\n      }\n    },\n\n    effectiveWidth (): number {\n      if (!this.normalizedBufer) {\n        return 0\n      }\n\n      return +this.normalizedValue * 100 / +this.normalizedBufer\n    },\n\n    normalizedBufer (): number {\n      if (this.bufferValue < 0) {\n        return 0\n      }\n\n      if (this.bufferValue > 100) {\n        return 100\n      }\n\n      return parseFloat(this.bufferValue)\n    },\n\n    normalizedValue (): number {\n      if (this.value < 0) {\n        return 0\n      }\n\n      if (this.value > 100) {\n        return 100\n      }\n\n      return parseFloat(this.value)\n    },\n\n    styles (): object {\n      const styles: Record<string, any> = {}\n\n      if (!this.active) {\n        styles.height = 0\n      }\n\n      if (!this.indeterminate && parseFloat(this.normalizedBufer) !== 100) {\n        styles.width = `${this.normalizedBufer}%`\n      }\n\n      return styles\n    }\n  },\n\n  methods: {\n    genDeterminate (h: CreateElement): VNode {\n      return h('div', this.setBackgroundColor(this.color, {\n        ref: 'front',\n        staticClass: `v-progress-linear__bar__determinate`,\n        style: {\n          width: `${this.effectiveWidth}%`\n        }\n      }))\n    },\n    genBar (h: CreateElement, name: string): VNode {\n      return h('div', this.setBackgroundColor(this.color, {\n        staticClass: 'v-progress-linear__bar__indeterminate',\n        class: {\n          [name]: true\n        }\n      }))\n    },\n    genIndeterminate (h: CreateElement): VNode {\n      return h('div', {\n        ref: 'front',\n        staticClass: 'v-progress-linear__bar__indeterminate',\n        class: {\n          'v-progress-linear__bar__indeterminate--active': this.active\n        }\n      }, [\n        this.genBar(h, 'long'),\n        this.genBar(h, 'short')\n      ])\n    }\n  },\n\n  render (h): VNode {\n    const fade = h(VFadeTransition, this.indeterminate ? [this.genIndeterminate(h)] : [])\n    const slide = h(VSlideXTransition, this.indeterminate ? [] : [this.genDeterminate(h)])\n\n    const bar = h('div', {\n      staticClass: 'v-progress-linear__bar',\n      style: this.styles\n    }, [fade, slide])\n    const background = h('div', this.setBackgroundColor(this.backgroundColor || this.color, {\n      staticClass: 'v-progress-linear__background',\n      style: this.backgroundStyle\n    }))\n\n    return h('div', {\n      staticClass: 'v-progress-linear',\n      attrs: {\n        'role': 'progressbar',\n        'aria-valuemin': 0,\n        'aria-valuemax': this.normalizedBufer,\n        'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue\n      },\n      class: {\n        'v-progress-linear--query': this.query\n      },\n      style: {\n        height: convertToUnit(this.height)\n      },\n      on: this.$listeners\n    }, [\n      background,\n      bar\n    ])\n  }\n})\n"",""import VProgressLinear from './VProgressLinear'\n\nexport { VProgressLinear }\nexport default VProgressLinear\n"",""// Styles\nimport '../../stylus/components/_radios.styl'\n\n// Components\nimport VIcon from '../VIcon'\nimport VLabel from '../VLabel'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Rippleable from '../../mixins/rippleable'\nimport Themeable from '../../mixins/themeable'\nimport Selectable from '../../mixins/selectable'\nimport {\n  inject as RegistrableInject\n} from '../../mixins/registrable'\n\n/* @vue/component */\nexport default {\n  name: 'v-radio',\n\n  mixins: [\n    Colorable,\n    Rippleable,\n    RegistrableInject('radio', 'v-radio', 'v-radio-group'),\n    Themeable\n  ],\n\n  inheritAttrs: false,\n\n  props: {\n    color: {\n      type: String,\n      default: 'accent'\n    },\n    disabled: Boolean,\n    label: String,\n    onIcon: {\n      type: String,\n      default: '$vuetify.icons.radioOn'\n    },\n    offIcon: {\n      type: String,\n      default: '$vuetify.icons.radioOff'\n    },\n    readonly: Boolean,\n    value: null\n  },\n\n  data: () => ({\n    isActive: false,\n    isFocused: false,\n    parentError: false\n  }),\n\n  computed: {\n    computedData () {\n      return this.setTextColor(!this.parentError && this.isActive && this.color, {\n        staticClass: 'v-radio',\n        'class': {\n          'v-radio--is-disabled': this.isDisabled,\n          'v-radio--is-focused': this.isFocused,\n          ...this.themeClasses\n        }\n      })\n    },\n    computedColor () {\n      return this.isActive ? this.color : this.radio.validationState || false\n    },\n    computedIcon () {\n      return this.isActive\n        ? this.onIcon\n        : this.offIcon\n    },\n    hasState () {\n      return this.isActive || !!this.radio.validationState\n    },\n    isDisabled () {\n      return this.disabled || !!this.radio.disabled\n    },\n    isReadonly () {\n      return this.readonly || !!this.radio.readonly\n    }\n  },\n\n  mounted () {\n    this.radio.register(this)\n  },\n\n  beforeDestroy () {\n    this.radio.unregister(this)\n  },\n\n  methods: {\n    genInput (...args) {\n      // We can't actually use the mixin directly because\n      // it's made for standalone components, but its\n      // genInput method is exactly what we need\n      return Selectable.methods.genInput.call(this, ...args)\n    },\n    genLabel () {\n      return this.$createElement(VLabel, {\n        on: { click: this.onChange },\n        attrs: {\n          for: this.id\n        },\n        props: {\n          color: this.radio.validationState || false,\n          dark: this.dark,\n          focused: this.hasState,\n          light: this.light\n        }\n      }, this.$slots.label || this.label)\n    },\n    genRadio () {\n      return this.$createElement('div', {\n        staticClass: 'v-input--selection-controls__input'\n      }, [\n        this.genInput('radio', {\n          name: this.radio.name || (this.radio._uid ? 'v-radio-' + this.radio._uid : false),\n          value: this.value,\n          ...this.$attrs\n        }),\n        !this.isDisabled && this.genRipple(this.setTextColor(this.computedColor)),\n        this.$createElement(VIcon, this.setTextColor(this.computedColor, {\n          props: {\n            dark: this.dark,\n            light: this.light\n          }\n        }), this.computedIcon)\n      ])\n    },\n    onFocus () {\n      this.isFocused = true\n    },\n    onBlur (e) {\n      this.isFocused = false\n      this.$emit('blur', e)\n    },\n    onChange () {\n      if (this.isDisabled || this.isReadonly) return\n\n      if (!this.isDisabled && (!this.isActive || !this.radio.mandatory)) {\n        this.$emit('change', this.value)\n      }\n    },\n    onKeydown () {}\n  },\n\n  render (h) {\n    return h('div', this.computedData, [\n      this.genRadio(),\n      this.genLabel()\n    ])\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_selection-controls.styl'\nimport '../../stylus/components/_radio-group.styl'\n\n// Components\nimport VInput from '../VInput'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport {\n  provide as RegistrableProvide\n} from '../../mixins/registrable'\n\n/* @vue/component */\nexport default {\n  name: 'v-radio-group',\n\n  extends: VInput,\n\n  mixins: [\n    Comparable,\n    RegistrableProvide('radio')\n  ],\n\n  model: {\n    prop: 'value',\n    event: 'change'\n  },\n\n  provide () {\n    return {\n      radio: this\n    }\n  },\n\n  props: {\n    column: {\n      type: Boolean,\n      default: true\n    },\n    height: {\n      type: [Number, String],\n      default: 'auto'\n    },\n    mandatory: {\n      type: Boolean,\n      default: true\n    },\n    name: String,\n    row: Boolean,\n    // If no value set on VRadio\n    // will match valueComparator\n    // force default to null\n    value: {\n      default: null\n    }\n  },\n\n  data: () => ({\n    internalTabIndex: -1,\n    radios: []\n  }),\n\n  computed: {\n    classes () {\n      return {\n        'v-input--selection-controls v-input--radio-group': true,\n        'v-input--radio-group--column': this.column && !this.row,\n        'v-input--radio-group--row': this.row\n      }\n    }\n  },\n\n  watch: {\n    hasError: 'setErrorState',\n    internalValue: 'setActiveRadio'\n  },\n\n  mounted () {\n    this.setErrorState(this.hasError)\n    this.setActiveRadio()\n  },\n\n  methods: {\n    genDefaultSlot () {\n      return this.$createElement('div', {\n        staticClass: 'v-input--radio-group__input',\n        attrs: {\n          role: 'radiogroup'\n        }\n      }, VInput.methods.genDefaultSlot.call(this))\n    },\n    onRadioChange (value) {\n      if (this.disabled) return\n\n      this.hasInput = true\n      this.internalValue = value\n      this.setActiveRadio()\n      this.$nextTick(this.validate)\n    },\n    onRadioBlur (e) {\n      if (!e.relatedTarget || !e.relatedTarget.classList.contains('v-radio')) {\n        this.hasInput = true\n        this.$emit('blur', e)\n      }\n    },\n    register (radio) {\n      radio.isActive = this.valueComparator(this.internalValue, radio.value)\n      radio.$on('change', this.onRadioChange)\n      radio.$on('blur', this.onRadioBlur)\n      this.radios.push(radio)\n    },\n    setErrorState (val) {\n      for (let index = this.radios.length; --index >= 0;) {\n        this.radios[index].parentError = val\n      }\n    },\n    setActiveRadio () {\n      for (let index = this.radios.length; --index >= 0;) {\n        const radio = this.radios[index]\n        radio.isActive = this.valueComparator(this.internalValue, radio.value)\n      }\n    },\n    unregister (radio) {\n      radio.$off('change', this.onRadioChange)\n      radio.$off('blur', this.onRadioBlur)\n\n      const index = this.radios.findIndex(r => r === radio)\n\n      /* istanbul ignore else */\n      if (index > -1) this.radios.splice(index, 1)\n    }\n  }\n}\n"",""import VRadioGroup from './VRadioGroup'\nimport VRadio from './VRadio'\n\nexport { VRadioGroup, VRadio }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VRadioGroup,\n    VRadio\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_range-sliders.styl'\n\n// Extensions\nimport VSlider from '../VSlider'\n\nimport {\n  createRange,\n  deepEqual\n} from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-range-slider',\n\n  extends: VSlider,\n\n  props: {\n    value: {\n      type: Array,\n      default: () => ([])\n    }\n  },\n\n  data: vm => ({\n    activeThumb: null,\n    lazyValue: !vm.value.length\n      ? [0, 0]\n      : vm.value\n  }),\n\n  computed: {\n    classes () {\n      return Object.assign({}, {\n        'v-input--range-slider': true\n      }, VSlider.computed.classes.call(this))\n    },\n    internalValue: {\n      get () {\n        return this.lazyValue\n      },\n      set (val) {\n        const { min, max } = this\n        // Round value to ensure the\n        // entire slider range can\n        // be selected with step\n        let value = val.map(v => this.roundValue(Math.min(Math.max(v, min), max)))\n\n        // Switch values if range and wrong order\n        if (value[0] > value[1] || value[1] < value[0]) {\n          if (this.activeThumb !== null) this.activeThumb = this.activeThumb === 1 ? 0 : 1\n          value = [value[1], value[0]]\n        }\n\n        this.lazyValue = value\n        if (!deepEqual(value, this.value)) this.$emit('input', value)\n\n        this.validate()\n      }\n    },\n    inputWidth () {\n      return this.internalValue.map(v => (\n        this.roundValue(v) - this.min) / (this.max - this.min) * 100\n      )\n    },\n    isDirty () {\n      return this.internalValue.some(v => v !== this.min) || this.alwaysDirty\n    },\n    trackFillStyles () {\n      const styles = VSlider.computed.trackFillStyles.call(this)\n      const fillPercent = Math.abs(this.inputWidth[0] - this.inputWidth[1])\n\n      styles.width = `calc(${fillPercent}% - ${this.trackPadding}px)`\n      styles[this.$vuetify.rtl ? 'right' : 'left'] = `${this.inputWidth[0]}%`\n\n      return styles\n    },\n    trackPadding () {\n      if (this.isDirty ||\n        this.internalValue[0]\n      ) return 0\n\n      return VSlider.computed.trackPadding.call(this)\n    }\n  },\n\n  methods: {\n    getIndexOfClosestValue (arr, v) {\n      if (Math.abs(arr[0] - v) < Math.abs(arr[1] - v)) return 0\n      else return 1\n    },\n    genInput () {\n      return createRange(2).map(i => {\n        const input = VSlider.methods.genInput.call(this)\n\n        input.data.attrs.value = this.internalValue[i]\n\n        input.data.on.focus = e => {\n          this.activeThumb = i\n          VSlider.methods.onFocus.call(this, e)\n        }\n\n        return input\n      })\n    },\n    genChildren () {\n      return [\n        this.genInput(),\n        this.genTrackContainer(),\n        this.genSteps(),\n        createRange(2).map(i => {\n          const value = this.internalValue[i]\n          const onDrag = e => {\n            this.isActive = true\n            this.activeThumb = i\n            this.onThumbMouseDown(e)\n          }\n          const valueWidth = this.inputWidth[i]\n          const isActive = (this.isFocused || this.isActive) && this.activeThumb === i\n\n          return this.genThumbContainer(value, valueWidth, isActive, onDrag)\n        })\n      ]\n    },\n    onSliderClick (e) {\n      if (!this.isActive) {\n        this.isFocused = true\n        this.onMouseMove(e, true)\n        this.$emit('change', this.internalValue)\n      }\n    },\n    onMouseMove (e, trackClick = false) {\n      const { value, isInsideTrack } = this.parseMouseMove(e)\n\n      if (isInsideTrack) {\n        if (trackClick) this.activeThumb = this.getIndexOfClosestValue(this.internalValue, value)\n\n        this.setInternalValue(value)\n      }\n    },\n    onKeyDown (e) {\n      const value = this.parseKeyDown(e, this.internalValue[this.activeThumb])\n\n      if (value == null) return\n\n      this.setInternalValue(value)\n    },\n    setInternalValue (value) {\n      this.internalValue = this.internalValue.map((v, i) => {\n        if (i === this.activeThumb) return value\n        else return Number(v)\n      })\n    }\n  }\n}\n"",""import VRangeSlider from './VRangeSlider'\n\nexport { VRangeSlider }\nexport default VRangeSlider\n"",""// Styles\nimport '../../stylus/components/_rating.styl'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Sizeable from '../../mixins/sizeable'\nimport Rippleable from '../../mixins/rippleable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { createRange } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, VNodeDirective, VNodeChildrenArrayContents } from 'vue'\n\ntype ItemSlotProps = {\n  index: number\n  value: number\n  isFilled: boolean\n  isHalfFilled?: boolean | undefined\n  isHovered: boolean\n  isHalfHovered?: boolean | undefined\n  click: Function\n}\n\n/* @vue/component */\nexport default mixins(\n  Colorable,\n  Delayable,\n  Rippleable,\n  Sizeable,\n  Themeable\n).extend({\n  name: 'v-rating',\n\n  props: {\n    backgroundColor: {\n      type: String,\n      default: 'accent'\n    },\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    dense: Boolean,\n    emptyIcon: {\n      type: String,\n      default: '$vuetify.icons.ratingEmpty'\n    },\n    fullIcon: {\n      type: String,\n      default: '$vuetify.icons.ratingFull'\n    },\n    halfIcon: {\n      type: String,\n      default: '$vuetify.icons.ratingHalf'\n    },\n    halfIncrements: Boolean,\n    length: {\n      type: [Number, String],\n      default: 5\n    },\n    clearable: Boolean,\n    readonly: Boolean,\n    hover: Boolean,\n    value: {\n      type: Number,\n      default: 0\n    }\n  },\n\n  data () {\n    return {\n      hoverIndex: -1,\n      internalValue: this.value\n    }\n  },\n\n  computed: {\n    directives (): VNodeDirective[] {\n      if (this.readonly || !this.ripple) return []\n\n      return [{\n        name: 'ripple',\n        value: { circle: true }\n      } as VNodeDirective]\n    },\n    iconProps (): object {\n      const {\n        dark,\n        medium,\n        large,\n        light,\n        small,\n        size,\n        xLarge\n      } = this.$props\n\n      return {\n        dark,\n        medium,\n        large,\n        light,\n        size,\n        small,\n        xLarge\n      }\n    },\n    isHovering (): boolean {\n      return this.hover && this.hoverIndex >= 0\n    }\n  },\n\n  watch: {\n    internalValue (val) {\n      val !== this.value && this.$emit('input', val)\n    },\n    value (val) {\n      this.internalValue = val\n    }\n  },\n\n  methods: {\n    createClickFn (i: number): Function {\n      return (e: MouseEvent) => {\n        if (this.readonly) return\n\n        const newValue = this.genHoverIndex(e, i)\n        if (this.clearable && this.internalValue === newValue) {\n          this.internalValue = 0\n        } else {\n          this.internalValue = newValue\n        }\n      }\n    },\n    createProps (i: number): ItemSlotProps {\n      const props: ItemSlotProps = {\n        index: i,\n        value: this.internalValue,\n        click: this.createClickFn(i),\n        isFilled: Math.floor(this.internalValue) > i,\n        isHovered: Math.floor(this.hoverIndex) > i\n      }\n\n      if (this.halfIncrements) {\n        props.isHalfHovered = !props.isHovered && (this.hoverIndex - i) % 1 > 0\n        props.isHalfFilled = !props.isFilled && (this.internalValue - i) % 1 > 0\n      }\n\n      return props\n    },\n    genHoverIndex (e: MouseEvent, i: number) {\n      return i + (this.isHalfEvent(e) ? 0.5 : 1)\n    },\n    getIconName (props: ItemSlotProps): string {\n      const isFull = this.isHovering ? props.isHovered : props.isFilled\n      const isHalf = this.isHovering ? props.isHalfHovered : props.isHalfFilled\n\n      return isFull ? this.fullIcon : isHalf ? this.halfIcon : this.emptyIcon\n    },\n    getColor (props: ItemSlotProps): string {\n      if (this.isHovering) {\n        if (props.isHovered || props.isHalfHovered) return this.color\n      } else {\n        if (props.isFilled || props.isHalfFilled) return this.color\n      }\n\n      return this.backgroundColor\n    },\n    isHalfEvent (e: MouseEvent): boolean {\n      if (this.halfIncrements) {\n        const rect = e.target && (e.target as HTMLElement).getBoundingClientRect()\n        if (rect && (e.pageX - rect.left) < rect.width / 2) return true\n      }\n\n      return false\n    },\n    onMouseEnter (e: MouseEvent, i: number): void {\n      this.runDelay('open', () => {\n        this.hoverIndex = this.genHoverIndex(e, i)\n      })\n    },\n    onMouseLeave (): void {\n      this.runDelay('close', () => (this.hoverIndex = -1))\n    },\n    genItem (i: number): VNode | VNodeChildrenArrayContents | string {\n      const props = this.createProps(i)\n\n      if (this.$scopedSlots.item) return this.$scopedSlots.item(props)\n\n      const listeners: Record<string, Function>= {\n        click: props.click\n      }\n\n      if (this.hover) {\n        listeners.mouseenter = (e: MouseEvent) => this.onMouseEnter(e, i)\n        listeners.mouseleave = this.onMouseLeave\n\n        if (this.halfIncrements) {\n          listeners.mousemove = (e: MouseEvent) => this.onMouseEnter(e, i)\n        }\n      }\n\n      return this.$createElement(VIcon, this.setTextColor(this.getColor(props), {\n        directives: this.directives,\n        props: this.iconProps,\n        on: listeners\n      }), [this.getIconName(props)])\n    }\n  },\n\n  render (h): VNode {\n    const children = createRange(Number(this.length)).map(i => this.genItem(i))\n\n    return h('div', {\n      staticClass: 'v-rating',\n      class: {\n        'v-rating--readonly': this.readonly,\n        'v-rating--dense': this.dense\n      }\n    }, children)\n  }\n})\n"",""import VRating from './VRating'\n\nexport { VRating }\nexport default VRating\n"",""import '../../stylus/components/_responsive.styl'\n\n// Mixins\nimport Measurable, { NumberOrNumberString } from '../../mixins/measurable'\n\n// Types\nimport { VNode } from 'vue'\n\n// Utils\nimport mixins from '../../util/mixins'\nimport { convertToUnit } from '../../util/helpers'\n\n/* @vue/component */\nexport default mixins(Measurable).extend({\n  name: 'v-responsive',\n\n  props: {\n    aspectRatio: [String, Number] as NumberOrNumberString\n  },\n\n  computed: {\n    computedAspectRatio (): number {\n      return Number(this.aspectRatio)\n    },\n    aspectStyle (): object | undefined {\n      return this.computedAspectRatio\n        ? { paddingBottom: (1 / this.computedAspectRatio) * 100 + '%' }\n        : undefined\n    },\n    __cachedSizer (): VNode | never[] {\n      if (!this.aspectStyle) return []\n\n      return this.$createElement('div', {\n        style: this.aspectStyle,\n        staticClass: 'v-responsive__sizer'\n      })\n    }\n  },\n\n  methods: {\n    genContent (): VNode {\n      return this.$createElement('div', {\n        staticClass: 'v-responsive__content'\n      }, this.$slots.default)\n    }\n  },\n\n  render (h): VNode {\n    return h('div', {\n      staticClass: 'v-responsive',\n      style: {\n        height: convertToUnit(this.height),\n        maxHeight: convertToUnit(this.maxHeight),\n        maxWidth: convertToUnit(this.maxWidth),\n        width: convertToUnit(this.width)\n      },\n      on: this.$listeners\n    }, [\n      this.__cachedSizer,\n      this.genContent()\n    ])\n  }\n})\n"",""import VResponsive from './VResponsive'\n\nexport { VResponsive }\nexport default VResponsive\n"",""// Styles\nimport '../../stylus/components/_text-fields.styl'\nimport '../../stylus/components/_select.styl'\n\n// Components\nimport VChip from '../VChip'\nimport VMenu from '../VMenu'\nimport VSelectList from './VSelectList'\n\n// Extensions\nimport VTextField from '../VTextField/VTextField'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport Filterable from '../../mixins/filterable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\n\n// Helpers\nimport { camelize, getPropertyFromItem, keyCodes } from '../../util/helpers'\nimport { consoleError, consoleWarn } from '../../util/console'\n\nexport const defaultMenuProps = {\n  closeOnClick: false,\n  closeOnContentClick: false,\n  openOnClick: false,\n  maxHeight: 300\n}\n\n/* @vue/component */\nexport default {\n  name: 'v-select',\n\n  directives: {\n    ClickOutside\n  },\n\n  extends: VTextField,\n\n  mixins: [\n    Comparable,\n    Filterable\n  ],\n\n  props: {\n    appendIcon: {\n      type: String,\n      default: '$vuetify.icons.dropdown'\n    },\n    appendIconCb: Function,\n    attach: {\n      type: null,\n      default: false\n    },\n    browserAutocomplete: {\n      type: String,\n      default: 'on'\n    },\n    cacheItems: Boolean,\n    chips: Boolean,\n    clearable: Boolean,\n    deletableChips: Boolean,\n    dense: Boolean,\n    hideSelected: Boolean,\n    items: {\n      type: Array,\n      default: () => []\n    },\n    itemAvatar: {\n      type: [String, Array, Function],\n      default: 'avatar'\n    },\n    itemDisabled: {\n      type: [String, Array, Function],\n      default: 'disabled'\n    },\n    itemText: {\n      type: [String, Array, Function],\n      default: 'text'\n    },\n    itemValue: {\n      type: [String, Array, Function],\n      default: 'value'\n    },\n    menuProps: {\n      type: [String, Array, Object],\n      default: () => defaultMenuProps\n    },\n    multiple: Boolean,\n    openOnClear: Boolean,\n    returnObject: Boolean,\n    searchInput: {\n      default: null\n    },\n    smallChips: Boolean\n  },\n\n  data: vm => ({\n    attrsInput: { role: 'combobox' },\n    cachedItems: vm.cacheItems ? vm.items : [],\n    content: null,\n    isBooted: false,\n    isMenuActive: false,\n    lastItem: 20,\n    // As long as a value is defined, show it\n    // Otherwise, check if multiple\n    // to determine which default to provide\n    lazyValue: vm.value !== undefined\n      ? vm.value\n      : vm.multiple ? [] : undefined,\n    selectedIndex: -1,\n    selectedItems: []\n  }),\n\n  computed: {\n    /* All items that the select has */\n    allItems () {\n      return this.filterDuplicates(this.cachedItems.concat(this.items))\n    },\n    classes () {\n      return Object.assign({}, VTextField.computed.classes.call(this), {\n        'v-select': true,\n        'v-select--chips': this.hasChips,\n        'v-select--chips--small': this.smallChips,\n        'v-select--is-menu-active': this.isMenuActive\n      })\n    },\n    /* Used by other components to overwrite */\n    computedItems () {\n      return this.allItems\n    },\n    counterValue () {\n      return this.multiple\n        ? this.selectedItems.length\n        : (this.getText(this.selectedItems[0]) || '').toString().length\n    },\n    directives () {\n      return this.isFocused ? [{\n        name: 'click-outside',\n        value: this.blur,\n        args: {\n          closeConditional: this.closeConditional\n        }\n      }] : undefined\n    },\n    dynamicHeight () {\n      return 'auto'\n    },\n    hasChips () {\n      return this.chips || this.smallChips\n    },\n    hasSlot () {\n      return Boolean(this.hasChips || this.$scopedSlots.selection)\n    },\n    isDirty () {\n      return this.selectedItems.length > 0\n    },\n    listData () {\n      const scopeId = this.$vnode && this.$vnode.context.$options._scopeId\n      return {\n        attrs: scopeId ? {\n          [scopeId]: true\n        } : null,\n        props: {\n          action: this.multiple && !this.isHidingSelected,\n          color: this.color,\n          dense: this.dense,\n          hideSelected: this.hideSelected,\n          items: this.virtualizedItems,\n          noDataText: this.$vuetify.t(this.noDataText),\n          selectedItems: this.selectedItems,\n          itemAvatar: this.itemAvatar,\n          itemDisabled: this.itemDisabled,\n          itemValue: this.itemValue,\n          itemText: this.itemText\n        },\n        on: {\n          select: this.selectItem\n        },\n        scopedSlots: {\n          item: this.$scopedSlots.item\n        }\n      }\n    },\n    staticList () {\n      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n        consoleError('assert: staticList should not be called if slots are used')\n      }\n\n      return this.$createElement(VSelectList, this.listData)\n    },\n    virtualizedItems () {\n      return this.$_menuProps.auto\n        ? this.computedItems\n        : this.computedItems.slice(0, this.lastItem)\n    },\n    menuCanShow () { return true },\n    $_menuProps () {\n      let normalisedProps\n\n      normalisedProps = typeof this.menuProps === 'string'\n        ? this.menuProps.split(',')\n        : this.menuProps\n\n      if (Array.isArray(normalisedProps)) {\n        normalisedProps = normalisedProps.reduce((acc, p) => {\n          acc[p.trim()] = true\n          return acc\n        }, {})\n      }\n\n      return {\n        ...defaultMenuProps,\n        value: this.menuCanShow && this.isMenuActive,\n        nudgeBottom: this.nudgeBottom\n          ? this.nudgeBottom\n          : normalisedProps.offsetY ? 1 : 0, // convert to int\n        ...normalisedProps\n      }\n    }\n  },\n\n  watch: {\n    internalValue (val) {\n      this.initialValue = val\n      this.setSelectedItems()\n    },\n    isBooted () {\n      this.$nextTick(() => {\n        if (this.content && this.content.addEventListener) {\n          this.content.addEventListener('scroll', this.onScroll, false)\n        }\n      })\n    },\n    isMenuActive (val) {\n      if (!val) return\n\n      this.isBooted = true\n    },\n    items: {\n      immediate: true,\n      handler (val) {\n        if (this.cacheItems) {\n          this.cachedItems = this.filterDuplicates(this.cachedItems.concat(val))\n        }\n\n        this.setSelectedItems()\n      }\n    }\n  },\n\n  mounted () {\n    this.content = this.$refs.menu && this.$refs.menu.$refs.content\n  },\n\n  methods: {\n    /** @public */\n    blur () {\n      this.isMenuActive = false\n      this.isFocused = false\n      this.$refs.input && this.$refs.input.blur()\n      this.selectedIndex = -1\n    },\n    /** @public */\n    activateMenu () {\n      this.isMenuActive = true\n    },\n    clearableCallback () {\n      this.setValue(this.multiple ? [] : undefined)\n      this.$nextTick(() => this.$refs.input.focus())\n\n      if (this.openOnClear) this.isMenuActive = true\n    },\n    closeConditional (e) {\n      return (\n        // Click originates from outside the menu content\n        !!this.content &&\n        !this.content.contains(e.target) &&\n\n        // Click originates from outside the element\n        !!this.$el &&\n        !this.$el.contains(e.target) &&\n        e.target !== this.$el\n      )\n    },\n    filterDuplicates (arr) {\n      const uniqueValues = new Map()\n      for (let index = 0; index < arr.length; ++index) {\n        const item = arr[index]\n        const val = this.getValue(item)\n\n        // TODO: comparator\n        !uniqueValues.has(val) && uniqueValues.set(val, item)\n      }\n      return Array.from(uniqueValues.values())\n    },\n    findExistingIndex (item) {\n      const itemValue = this.getValue(item)\n\n      return (this.internalValue || []).findIndex(i => this.valueComparator(this.getValue(i), itemValue))\n    },\n    genChipSelection (item, index) {\n      const isDisabled = (\n        this.disabled ||\n        this.readonly ||\n        this.getDisabled(item)\n      )\n      const focus = (e, cb) => {\n        if (isDisabled) return\n\n        e.stopPropagation()\n        this.onFocus()\n        cb && cb()\n      }\n\n      return this.$createElement(VChip, {\n        staticClass: 'v-chip--select-multi',\n        props: {\n          close: this.deletableChips && !isDisabled,\n          disabled: isDisabled,\n          selected: index === this.selectedIndex,\n          small: this.smallChips\n        },\n        on: {\n          click: e => {\n            focus(e, () => {\n              this.selectedIndex = index\n            })\n          },\n          focus,\n          input: () => this.onChipInput(item)\n        },\n        key: this.getValue(item)\n      }, this.getText(item))\n    },\n    genCommaSelection (item, index, last) {\n      // Item may be an object\n      // TODO: Remove JSON.stringify\n      const key = JSON.stringify(this.getValue(item))\n      const color = index === this.selectedIndex && this.color\n      const isDisabled = (\n        this.disabled ||\n        this.getDisabled(item)\n      )\n\n      return this.$createElement('div', this.setTextColor(color, {\n        staticClass: 'v-select__selection v-select__selection--comma',\n        'class': {\n          'v-select__selection--disabled': isDisabled\n        },\n        key\n      }), `${this.getText(item)}${last ? '' : ', '}`)\n    },\n    genDefaultSlot () {\n      const selections = this.genSelections()\n      const input = this.genInput()\n\n      // If the return is an empty array\n      // push the input\n      if (Array.isArray(selections)) {\n        selections.push(input)\n      // Otherwise push it into children\n      } else {\n        selections.children = selections.children || []\n        selections.children.push(input)\n      }\n\n      return [\n        this.$createElement('div', {\n          staticClass: 'v-select__slot',\n          directives: this.directives\n        }, [\n          this.genLabel(),\n          this.prefix ? this.genAffix('prefix') : null,\n          selections,\n          this.suffix ? this.genAffix('suffix') : null,\n          this.genClearIcon(),\n          this.genIconSlot()\n        ]),\n        this.genMenu(),\n        this.genProgress()\n      ]\n    },\n    genInput () {\n      const input = VTextField.methods.genInput.call(this)\n\n      input.data.domProps.value = null\n      input.data.attrs.readonly = true\n      input.data.attrs['aria-readonly'] = String(this.readonly)\n\n      return input\n    },\n    genList () {\n      // If there's no slots, we can use a cached VNode to improve performance\n      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n        return this.genListWithSlot()\n      } else {\n        return this.staticList\n      }\n    },\n    genListWithSlot () {\n      const slots = ['prepend-item', 'no-data', 'append-item']\n        .filter(slotName => this.$slots[slotName])\n        .map(slotName => this.$createElement('template', {\n          slot: slotName\n        }, this.$slots[slotName]))\n      // Requires destructuring due to Vue\n      // modifying the `on` property when passed\n      // as a referenced object\n      return this.$createElement(VSelectList, {\n        ...this.listData\n      }, slots)\n    },\n    genMenu () {\n      const props = this.$_menuProps\n      props.activator = this.$refs['input-slot']\n\n      // Deprecate using menu props directly\n      // TODO: remove (2.0)\n      const inheritedProps = Object.keys(VMenu.options.props)\n\n      const deprecatedProps = Object.keys(this.$attrs).reduce((acc, attr) => {\n        if (inheritedProps.includes(camelize(attr))) acc.push(attr)\n        return acc\n      }, [])\n\n      for (const prop of deprecatedProps) {\n        props[camelize(prop)] = this.$attrs[prop]\n      }\n\n      if (process.env.NODE_ENV !== 'production') {\n        if (deprecatedProps.length) {\n          const multiple = deprecatedProps.length > 1\n          let replacement = deprecatedProps.reduce((acc, p) => {\n            acc[camelize(p)] = this.$attrs[p]\n            return acc\n          }, {})\n          const props = deprecatedProps.map(p => `'${p}'`).join(', ')\n          const separator = multiple ? '\\n' : '\\''\n\n          const onlyBools = Object.keys(replacement).every(prop => {\n            const propType = VMenu.options.props[prop]\n            const value = replacement[prop]\n            return value === true || ((propType.type || propType) === Boolean && value === '')\n          })\n\n          if (onlyBools) {\n            replacement = Object.keys(replacement).join(', ')\n          } else {\n            replacement = JSON.stringify(replacement, null, multiple ? 2 : 0).replace(/\""([^(\"")\""]+)\"":/g, '$1:').replace(/\""/g, '\\'')\n          }\n\n          consoleWarn(`${props} ${multiple ? 'are' : 'is'} deprecated, use ${separator}:menu-props=\""${replacement}\""${separator} instead`, this)\n        }\n      }\n\n      // Attach to root el so that\n      // menu covers prepend/append icons\n      if (\n        // TODO: make this a computed property or helper or something\n        this.attach === '' || // If used as a boolean prop (<v-menu attach>)\n        this.attach === true || // If bound to a boolean (<v-menu :attach=\""true\"">)\n        this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))\n      ) {\n        props.attach = this.$el\n      } else {\n        props.attach = this.attach\n      }\n\n      return this.$createElement(VMenu, {\n        props,\n        on: {\n          input: val => {\n            this.isMenuActive = val\n            this.isFocused = val\n          }\n        },\n        ref: 'menu'\n      }, [this.genList()])\n    },\n    genSelections () {\n      let length = this.selectedItems.length\n      const children = new Array(length)\n\n      let genSelection\n      if (this.$scopedSlots.selection) {\n        genSelection = this.genSlotSelection\n      } else if (this.hasChips) {\n        genSelection = this.genChipSelection\n      } else {\n        genSelection = this.genCommaSelection\n      }\n\n      while (length--) {\n        children[length] = genSelection(\n          this.selectedItems[length],\n          length,\n          length === children.length - 1\n        )\n      }\n\n      return this.$createElement('div', {\n        staticClass: 'v-select__selections'\n      }, children)\n    },\n    genSlotSelection (item, index) {\n      return this.$scopedSlots.selection({\n        parent: this,\n        item,\n        index,\n        selected: index === this.selectedIndex,\n        disabled: this.disabled || this.readonly\n      })\n    },\n    getMenuIndex () {\n      return this.$refs.menu ? this.$refs.menu.listIndex : -1\n    },\n    getDisabled (item) {\n      return getPropertyFromItem(item, this.itemDisabled, false)\n    },\n    getText (item) {\n      return getPropertyFromItem(item, this.itemText, item)\n    },\n    getValue (item) {\n      return getPropertyFromItem(item, this.itemValue, this.getText(item))\n    },\n    onBlur (e) {\n      this.$emit('blur', e)\n    },\n    onChipInput (item) {\n      if (this.multiple) this.selectItem(item)\n      else this.setValue(null)\n\n      // If all items have been deleted,\n      // open `v-menu`\n      if (this.selectedItems.length === 0) {\n        this.isMenuActive = true\n      }\n      this.selectedIndex = -1\n    },\n    onClick () {\n      if (this.isDisabled) return\n\n      this.isMenuActive = true\n\n      if (!this.isFocused) {\n        this.isFocused = true\n        this.$emit('focus')\n      }\n    },\n    onEnterDown () {\n      this.onBlur()\n    },\n    onEscDown (e) {\n      e.preventDefault()\n      if (this.isMenuActive) {\n        e.stopPropagation()\n        this.isMenuActive = false\n      }\n    },\n    onKeyDown (e) {\n      const keyCode = e.keyCode\n\n      // If enter, space, up, or down is pressed, open menu\n      if (!this.readonly && !this.isMenuActive && [\n        keyCodes.enter,\n        keyCodes.space,\n        keyCodes.up, keyCodes.down\n      ].includes(keyCode)) this.activateMenu()\n\n      if (this.isMenuActive && this.$refs.menu) this.$refs.menu.changeListIndex(e)\n\n      // This should do something different\n      if (keyCode === keyCodes.enter) return this.onEnterDown(e)\n\n      // If escape deactivate the menu\n      if (keyCode === keyCodes.esc) return this.onEscDown(e)\n\n      // If tab - select item or close menu\n      if (keyCode === keyCodes.tab) return this.onTabDown(e)\n    },\n    onMouseUp (e) {\n      const appendInner = this.$refs['append-inner']\n\n      // If append inner is present\n      // and the target is itself\n      // or inside, toggle menu\n      if (this.isMenuActive &&\n        appendInner &&\n        (appendInner === e.target ||\n        appendInner.contains(e.target))\n      ) {\n        this.$nextTick(() => (this.isMenuActive = !this.isMenuActive))\n      // If user is clicking in the container\n      // and field is enclosed, activate it\n      } else if (this.isEnclosed && !this.isDisabled) {\n        this.isMenuActive = true\n      }\n\n      VTextField.methods.onMouseUp.call(this, e)\n    },\n    onScroll () {\n      if (!this.isMenuActive) {\n        requestAnimationFrame(() => (this.content.scrollTop = 0))\n      } else {\n        if (this.lastItem >= this.computedItems.length) return\n\n        const showMoreItems = (\n          this.content.scrollHeight -\n          (this.content.scrollTop +\n          this.content.clientHeight)\n        ) < 200\n\n        if (showMoreItems) {\n          this.lastItem += 20\n        }\n      }\n    },\n    onTabDown (e) {\n      const menuIndex = this.getMenuIndex()\n\n      const listTile = this.$refs.menu.tiles[menuIndex]\n\n      // An item that is selected by\n      // menu-index should toggled\n      if (\n        listTile &&\n        listTile.className.indexOf('v-list__tile--highlighted') > -1 &&\n        this.isMenuActive &&\n        menuIndex > -1\n      ) {\n        e.preventDefault()\n        e.stopPropagation()\n\n        listTile.click()\n      } else {\n        // If we make it here,\n        // the user has no selected indexes\n        // and is probably tabbing out\n        VTextField.methods.onBlur.call(this, e)\n      }\n    },\n    selectItem (item) {\n      if (!this.multiple) {\n        this.setValue(this.returnObject ? item : this.getValue(item))\n        this.isMenuActive = false\n      } else {\n        const internalValue = (this.internalValue || []).slice()\n        const i = this.findExistingIndex(item)\n\n        i !== -1 ? internalValue.splice(i, 1) : internalValue.push(item)\n        this.setValue(internalValue.map(i => {\n          return this.returnObject ? i : this.getValue(i)\n        }))\n\n        // When selecting multiple\n        // adjust menu after each\n        // selection\n        this.$nextTick(() => {\n          this.$refs.menu &&\n            this.$refs.menu.updateDimensions()\n        })\n      }\n    },\n    setMenuIndex (index) {\n      this.$refs.menu && (this.$refs.menu.listIndex = index)\n    },\n    setSelectedItems () {\n      const selectedItems = []\n      const values = !this.multiple || !Array.isArray(this.internalValue)\n        ? [this.internalValue]\n        : this.internalValue\n\n      for (const value of values) {\n        const index = this.allItems.findIndex(v => this.valueComparator(\n          this.getValue(v),\n          this.getValue(value)\n        ))\n\n        if (index > -1) {\n          selectedItems.push(this.allItems[index])\n        }\n      }\n\n      this.selectedItems = selectedItems\n    },\n    setValue (value) {\n      this.internalValue = value\n      this.$emit('change', value)\n    }\n  }\n}\n"",""import '../../stylus/components/_cards.styl'\n\n// Components\nimport VCheckbox from '../VCheckbox'\nimport VDivider from '../VDivider'\nimport VSubheader from '../VSubheader'\nimport {\n  VList,\n  VListTile,\n  VListTileAction,\n  VListTileContent,\n  VListTileTitle\n} from '../VList'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport {\n  escapeHTML,\n  getPropertyFromItem\n} from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-select-list',\n\n  mixins: [\n    Colorable,\n    Themeable\n  ],\n\n  props: {\n    action: Boolean,\n    dense: Boolean,\n    hideSelected: Boolean,\n    items: {\n      type: Array,\n      default: () => []\n    },\n    itemAvatar: {\n      type: [String, Array, Function],\n      default: 'avatar'\n    },\n    itemDisabled: {\n      type: [String, Array, Function],\n      default: 'disabled'\n    },\n    itemText: {\n      type: [String, Array, Function],\n      default: 'text'\n    },\n    itemValue: {\n      type: [String, Array, Function],\n      default: 'value'\n    },\n    noDataText: String,\n    noFilter: Boolean,\n    searchInput: {\n      default: null\n    },\n    selectedItems: {\n      type: Array,\n      default: () => []\n    }\n  },\n\n  computed: {\n    parsedItems () {\n      return this.selectedItems.map(item => this.getValue(item))\n    },\n    tileActiveClass () {\n      return Object.keys(this.setTextColor(this.color).class || {}).join(' ')\n    },\n    staticNoDataTile () {\n      const tile = {\n        on: {\n          mousedown: e => e.preventDefault() // Prevent onBlur from being called\n        }\n      }\n\n      return this.$createElement(VListTile, tile, [\n        this.genTileContent(this.noDataText)\n      ])\n    }\n  },\n\n  methods: {\n    genAction (item, inputValue) {\n      const data = {\n        on: {\n          click: e => {\n            e.stopPropagation()\n            this.$emit('select', item)\n          }\n        }\n      }\n\n      return this.$createElement(VListTileAction, data, [\n        this.$createElement(VCheckbox, {\n          props: {\n            color: this.color,\n            inputValue\n          }\n        })\n      ])\n    },\n    genDivider (props) {\n      return this.$createElement(VDivider, { props })\n    },\n    genFilteredText (text) {\n      text = (text || '').toString()\n\n      if (!this.searchInput || this.noFilter) return escapeHTML(text)\n\n      const { start, middle, end } = this.getMaskedCharacters(text)\n\n      return `${escapeHTML(start)}${this.genHighlight(middle)}${escapeHTML(end)}`\n    },\n    genHeader (props) {\n      return this.$createElement(VSubheader, { props }, props.header)\n    },\n    genHighlight (text) {\n      return `<span class=\""v-list__tile__mask\"">${escapeHTML(text)}</span>`\n    },\n    getMaskedCharacters (text) {\n      const searchInput = (this.searchInput || '').toString().toLowerCase()\n      const index = text.toLowerCase().indexOf(searchInput)\n\n      if (index < 0) return { start: '', middle: text, end: '' }\n\n      const start = text.slice(0, index)\n      const middle = text.slice(index, index + searchInput.length)\n      const end = text.slice(index + searchInput.length)\n      return { start, middle, end }\n    },\n    genTile (\n      item,\n      disabled = null,\n      avatar = false,\n      value = this.hasItem(item)\n    ) {\n      if (item === Object(item)) {\n        avatar = this.getAvatar(item)\n        disabled = disabled !== null\n          ? disabled\n          : this.getDisabled(item)\n      }\n\n      const tile = {\n        on: {\n          mousedown: e => {\n            // Prevent onBlur from being called\n            e.preventDefault()\n          },\n          click: () => disabled || this.$emit('select', item)\n        },\n        props: {\n          activeClass: this.tileActiveClass,\n          avatar,\n          disabled,\n          ripple: true,\n          value\n        }\n      }\n\n      if (!this.$scopedSlots.item) {\n        return this.$createElement(VListTile, tile, [\n          this.action && !this.hideSelected && this.items.length > 0\n            ? this.genAction(item, value)\n            : null,\n          this.genTileContent(item)\n        ])\n      }\n\n      const parent = this\n      const scopedSlot = this.$scopedSlots.item({ parent, item, tile })\n\n      return this.needsTile(scopedSlot)\n        ? this.$createElement(VListTile, tile, [scopedSlot])\n        : scopedSlot\n    },\n    genTileContent (item) {\n      const innerHTML = this.genFilteredText(this.getText(item))\n\n      return this.$createElement(VListTileContent,\n        [this.$createElement(VListTileTitle, {\n          domProps: { innerHTML }\n        })]\n      )\n    },\n    hasItem (item) {\n      return this.parsedItems.indexOf(this.getValue(item)) > -1\n    },\n    needsTile (tile) {\n      return tile.componentOptions == null ||\n        tile.componentOptions.Ctor.options.name !== 'v-list-tile'\n    },\n    getAvatar (item) {\n      return Boolean(getPropertyFromItem(item, this.itemAvatar, false))\n    },\n    getDisabled (item) {\n      return Boolean(getPropertyFromItem(item, this.itemDisabled, false))\n    },\n    getText (item) {\n      return String(getPropertyFromItem(item, this.itemText, item))\n    },\n    getValue (item) {\n      return getPropertyFromItem(item, this.itemValue, this.getText(item))\n    }\n  },\n\n  render () {\n    const children = []\n    for (const item of this.items) {\n      if (this.hideSelected &&\n        this.hasItem(item)\n      ) continue\n\n      if (item == null) children.push(this.genTile(item))\n      else if (item.header) children.push(this.genHeader(item))\n      else if (item.divider) children.push(this.genDivider(item))\n      else children.push(this.genTile(item))\n    }\n\n    children.length || children.push(this.$slots['no-data'] || this.staticNoDataTile)\n\n    this.$slots['prepend-item'] && children.unshift(this.$slots['prepend-item'])\n\n    this.$slots['append-item'] && children.push(this.$slots['append-item'])\n\n    return this.$createElement('div', {\n      staticClass: 'v-select-list v-card',\n      'class': this.themeClasses\n    }, [\n      this.$createElement(VList, {\n        props: {\n          dense: this.dense\n        }\n      }, children)\n    ])\n  }\n}\n"",""import VSelect from './VSelect'\nimport VOverflowBtn from '../VOverflowBtn'\nimport VAutocomplete from '../VAutocomplete'\nimport VCombobox from '../VCombobox'\nimport rebuildSlots from '../../util/rebuildFunctionalSlots'\nimport dedupeModelListeners from '../../util/dedupeModelListeners'\nimport { deprecate } from '../../util/console'\n\n/* @vue/component */\nconst wrapper = {\n  functional: true,\n\n  $_wrapperFor: VSelect,\n\n  props: {\n    // VAutoComplete\n    /** @deprecated */\n    autocomplete: Boolean,\n    /** @deprecated */\n    combobox: Boolean,\n    multiple: Boolean,\n    /** @deprecated */\n    tags: Boolean,\n    // VOverflowBtn\n    /** @deprecated */\n    editable: Boolean,\n    /** @deprecated */\n    overflow: Boolean,\n    /** @deprecated */\n    segmented: Boolean\n  },\n\n  render (h, { props, data, slots, parent }) {\n    dedupeModelListeners(data)\n    const children = rebuildSlots(slots(), h)\n\n    if (props.autocomplete) {\n      deprecate('<v-select autocomplete>', '<v-autocomplete>', wrapper, parent)\n    }\n    if (props.combobox) {\n      deprecate('<v-select combobox>', '<v-combobox>', wrapper, parent)\n    }\n    if (props.tags) {\n      deprecate('<v-select tags>', '<v-combobox multiple>', wrapper, parent)\n    }\n\n    if (props.overflow) {\n      deprecate('<v-select overflow>', '<v-overflow-btn>', wrapper, parent)\n    }\n    if (props.segmented) {\n      deprecate('<v-select segmented>', '<v-overflow-btn segmented>', wrapper, parent)\n    }\n    if (props.editable) {\n      deprecate('<v-select editable>', '<v-overflow-btn editable>', wrapper, parent)\n    }\n\n    if (props.combobox || props.tags) {\n      data.attrs.multiple = props.tags\n      return h(VCombobox, data, children)\n    } else if (props.autocomplete) {\n      data.attrs.multiple = props.multiple\n      return h(VAutocomplete, data, children)\n    } else if (props.overflow || props.segmented || props.editable) {\n      data.attrs.segmented = props.segmented\n      data.attrs.editable = props.editable\n      return h(VOverflowBtn, data, children)\n    } else {\n      data.attrs.multiple = props.multiple\n      return h(VSelect, data, children)\n    }\n  }\n}\n\nexport { wrapper as VSelect }\n\nexport default wrapper\n"",""// Styles\nimport '../../stylus/components/_sliders.styl'\n\n// Components\nimport { VScaleTransition } from '../transitions'\n\n// Extensions\nimport VInput from '../VInput'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\n\n// Utilities\nimport {\n  addOnceEventListener,\n  convertToUnit,\n  createRange,\n  keyCodes,\n  deepEqual\n} from '../../util/helpers'\nimport { consoleWarn } from '../../util/console'\nimport Loadable from '../../mixins/loadable'\n\n/* @vue/component */\nexport default {\n  name: 'v-slider',\n\n  directives: { ClickOutside },\n\n  extends: VInput,\n\n  mixins: [Loadable],\n\n  props: {\n    alwaysDirty: Boolean,\n    inverseLabel: Boolean,\n    label: String,\n    min: {\n      type: [Number, String],\n      default: 0\n    },\n    max: {\n      type: [Number, String],\n      default: 100\n    },\n    range: Boolean,\n    step: {\n      type: [Number, String],\n      default: 1\n    },\n    ticks: {\n      type: [Boolean, String],\n      default: false,\n      validator: v => typeof v === 'boolean' || v === 'always'\n    },\n    tickLabels: {\n      type: Array,\n      default: () => ([])\n    },\n    tickSize: {\n      type: [Number, String],\n      default: 1\n    },\n    thumbColor: {\n      type: String,\n      default: null\n    },\n    thumbLabel: {\n      type: [Boolean, String],\n      default: null,\n      validator: v => typeof v === 'boolean' || v === 'always'\n    },\n    thumbSize: {\n      type: [Number, String],\n      default: 32\n    },\n    trackColor: {\n      type: String,\n      default: null\n    },\n    value: [Number, String]\n  },\n\n  data: vm => ({\n    app: {},\n    isActive: false,\n    keyPressed: 0,\n    lazyValue: typeof vm.value !== 'undefined' ? vm.value : Number(vm.min),\n    oldValue: null\n  }),\n\n  computed: {\n    classes () {\n      return {\n        'v-input--slider': true,\n        'v-input--slider--ticks': this.showTicks,\n        'v-input--slider--inverse-label': this.inverseLabel,\n        'v-input--slider--ticks-labels': this.tickLabels.length > 0,\n        'v-input--slider--thumb-label': this.thumbLabel ||\n          this.$scopedSlots.thumbLabel\n      }\n    },\n    showTicks () {\n      return this.tickLabels.length > 0 ||\n        (!this.disabled && this.stepNumeric && !!this.ticks)\n    },\n    showThumbLabel () {\n      return !this.disabled && (\n        !!this.thumbLabel ||\n        this.thumbLabel === '' ||\n        this.$scopedSlots['thumb-label']\n      )\n    },\n    computedColor () {\n      if (this.disabled) return null\n      return this.validationState || this.color || 'primary'\n    },\n    computedTrackColor () {\n      return this.disabled ? null : (this.trackColor || null)\n    },\n    computedThumbColor () {\n      if (this.disabled || !this.isDirty) return null\n      return this.validationState || this.thumbColor || this.color || 'primary'\n    },\n    internalValue: {\n      get () {\n        return this.lazyValue\n      },\n      set (val) {\n        const { min, max } = this\n\n        // Round value to ensure the\n        // entire slider range can\n        // be selected with step\n        const value = this.roundValue(Math.min(Math.max(val, min), max))\n\n        if (value === this.lazyValue) return\n\n        this.lazyValue = value\n\n        this.$emit('input', value)\n        this.validate()\n      }\n    },\n    stepNumeric () {\n      return this.step > 0 ? parseFloat(this.step) : 0\n    },\n    trackFillStyles () {\n      const left = this.$vuetify.rtl ? 'auto' : 0\n      const right = this.$vuetify.rtl ? 0 : 'auto'\n      let width = `${this.inputWidth}%`\n\n      if (this.disabled) width = `calc(${this.inputWidth}% - 8px)`\n\n      return {\n        transition: this.trackTransition,\n        left,\n        right,\n        width\n      }\n    },\n    trackPadding () {\n      return (\n        this.isActive ||\n        this.inputWidth > 0 ||\n        this.disabled\n      ) ? 0 : 7\n    },\n    trackStyles () {\n      const trackPadding = this.disabled ? `calc(${this.inputWidth}% + 8px)` : `${this.trackPadding}px`\n      const left = this.$vuetify.rtl ? 'auto' : trackPadding\n      const right = this.$vuetify.rtl ? trackPadding : 'auto'\n      const width = this.disabled\n        ? `calc(${100 - this.inputWidth}% - 8px)`\n        : '100%'\n\n      return {\n        transition: this.trackTransition,\n        left,\n        right,\n        width\n      }\n    },\n    tickStyles () {\n      const size = Number(this.tickSize)\n\n      return {\n        'border-width': `${size}px`,\n        'border-radius': size > 1 ? '50%' : null,\n        transform: size > 1 ? `translateX(-${size}px) translateY(-${size - 1}px)` : null\n      }\n    },\n    trackTransition () {\n      return this.keyPressed >= 2 ? 'none' : ''\n    },\n    numTicks () {\n      return Math.ceil((this.max - this.min) / this.stepNumeric)\n    },\n    inputWidth () {\n      return (this.roundValue(this.internalValue) - this.min) / (this.max - this.min) * 100\n    },\n    isDirty () {\n      return this.internalValue > this.min ||\n        this.alwaysDirty\n    }\n  },\n\n  watch: {\n    min (val) {\n      val > this.internalValue && this.$emit('input', parseFloat(val))\n    },\n    max (val) {\n      val < this.internalValue && this.$emit('input', parseFloat(val))\n    },\n    value (val) {\n      this.internalValue = val\n    }\n  },\n\n  mounted () {\n    // Without a v-app, iOS does not work with body selectors\n    this.app = document.querySelector('[data-app]') ||\n      consoleWarn('Missing v-app or a non-body wrapping element with the [data-app] attribute', this)\n  },\n\n  methods: {\n    genDefaultSlot () {\n      const children = [this.genLabel()]\n      const slider = this.genSlider()\n      this.inverseLabel\n        ? children.unshift(slider)\n        : children.push(slider)\n\n      children.push(this.genProgress())\n\n      return children\n    },\n    genListeners () {\n      return {\n        blur: this.onBlur,\n        click: this.onSliderClick,\n        focus: this.onFocus,\n        keydown: this.onKeyDown,\n        keyup: this.onKeyUp\n      }\n    },\n    genInput () {\n      return this.$createElement('input', {\n        attrs: {\n          'aria-label': this.label,\n          name: this.name,\n          role: 'slider',\n          tabindex: this.disabled ? -1 : this.$attrs.tabindex,\n          value: this.internalValue,\n          readonly: true,\n          'aria-readonly': String(this.readonly),\n          'aria-valuemin': this.min,\n          'aria-valuemax': this.max,\n          'aria-valuenow': this.internalValue,\n          ...this.$attrs\n        },\n        on: this.genListeners(),\n        ref: 'input'\n      })\n    },\n    genSlider () {\n      return this.$createElement('div', {\n        staticClass: 'v-slider',\n        'class': {\n          'v-slider--is-active': this.isActive\n        },\n        directives: [{\n          name: 'click-outside',\n          value: this.onBlur\n        }]\n      }, this.genChildren())\n    },\n    genChildren () {\n      return [\n        this.genInput(),\n        this.genTrackContainer(),\n        this.genSteps(),\n        this.genThumbContainer(\n          this.internalValue,\n          this.inputWidth,\n          this.isFocused || this.isActive,\n          this.onThumbMouseDown\n        )\n      ]\n    },\n    genSteps () {\n      if (!this.step || !this.showTicks) return null\n\n      const ticks = createRange(this.numTicks + 1).map(i => {\n        const children = []\n\n        if (this.tickLabels[i]) {\n          children.push(this.$createElement('span', this.tickLabels[i]))\n        }\n\n        return this.$createElement('span', {\n          key: i,\n          staticClass: 'v-slider__ticks',\n          class: {\n            'v-slider__ticks--always-show': this.ticks === 'always' ||\n              this.tickLabels.length > 0\n          },\n          style: {\n            ...this.tickStyles,\n            left: `${i * (100 / this.numTicks)}%`\n          }\n        }, children)\n      })\n\n      return this.$createElement('div', {\n        staticClass: 'v-slider__ticks-container'\n      }, ticks)\n    },\n    genThumb () {\n      return this.$createElement('div', this.setBackgroundColor(this.computedThumbColor, {\n        staticClass: 'v-slider__thumb'\n      }))\n    },\n    genThumbContainer (value, valueWidth, isActive, onDrag) {\n      const children = [this.genThumb()]\n\n      const thumbLabelContent = this.getLabel(value)\n      this.showThumbLabel && children.push(this.genThumbLabel(thumbLabelContent))\n\n      return this.$createElement('div', this.setTextColor(this.computedThumbColor, {\n        staticClass: 'v-slider__thumb-container',\n        'class': {\n          'v-slider__thumb-container--is-active': isActive,\n          'v-slider__thumb-container--show-label': this.showThumbLabel\n        },\n        style: {\n          transition: this.trackTransition,\n          left: `${this.$vuetify.rtl ? 100 - valueWidth : valueWidth}%`\n        },\n        on: {\n          touchstart: onDrag,\n          mousedown: onDrag\n        }\n      }), children)\n    },\n    genThumbLabel (content) {\n      const size = convertToUnit(this.thumbSize)\n\n      return this.$createElement(VScaleTransition, {\n        props: { origin: 'bottom center' }\n      }, [\n        this.$createElement('div', {\n          staticClass: 'v-slider__thumb-label__container',\n          directives: [\n            {\n              name: 'show',\n              value: this.isFocused || this.isActive || this.thumbLabel === 'always'\n            }\n          ]\n        }, [\n          this.$createElement('div', this.setBackgroundColor(this.computedThumbColor, {\n            staticClass: 'v-slider__thumb-label',\n            style: {\n              height: size,\n              width: size\n            }\n          }), [content])\n        ])\n      ])\n    },\n    genTrackContainer () {\n      const children = [\n        this.$createElement('div', this.setBackgroundColor(this.computedTrackColor, {\n          staticClass: 'v-slider__track',\n          style: this.trackStyles\n        })),\n        this.$createElement('div', this.setBackgroundColor(this.computedColor, {\n          staticClass: 'v-slider__track-fill',\n          style: this.trackFillStyles\n        }))\n      ]\n\n      return this.$createElement('div', {\n        staticClass: 'v-slider__track__container',\n        ref: 'track'\n      }, children)\n    },\n    getLabel (value) {\n      return this.$scopedSlots['thumb-label']\n        ? this.$scopedSlots['thumb-label']({ value })\n        : this.$createElement('span', value)\n    },\n    onBlur (e) {\n      if (this.keyPressed === 2) return\n\n      this.isActive = false\n      this.isFocused = false\n      this.$emit('blur', e)\n    },\n    onFocus (e) {\n      this.isFocused = true\n      this.$emit('focus', e)\n    },\n    onThumbMouseDown (e) {\n      this.oldValue = this.internalValue\n      this.keyPressed = 2\n      const options = { passive: true }\n      this.isActive = true\n      this.isFocused = false\n\n      if ('touches' in e) {\n        this.app.addEventListener('touchmove', this.onMouseMove, options)\n        addOnceEventListener(this.app, 'touchend', this.onSliderMouseUp)\n      } else {\n        this.app.addEventListener('mousemove', this.onMouseMove, options)\n        addOnceEventListener(this.app, 'mouseup', this.onSliderMouseUp)\n      }\n\n      this.$emit('start', this.internalValue)\n    },\n    onSliderMouseUp () {\n      this.keyPressed = 0\n      const options = { passive: true }\n      this.isActive = false\n      this.isFocused = false\n      this.app.removeEventListener('touchmove', this.onMouseMove, options)\n      this.app.removeEventListener('mousemove', this.onMouseMove, options)\n\n      this.$emit('end', this.internalValue)\n      if (!deepEqual(this.oldValue, this.internalValue)) {\n        this.$emit('change', this.internalValue)\n      }\n    },\n    onMouseMove (e) {\n      const { value, isInsideTrack } = this.parseMouseMove(e)\n\n      if (isInsideTrack) {\n        this.setInternalValue(value)\n      }\n    },\n    onKeyDown (e) {\n      if (this.disabled || this.readonly) return\n\n      const value = this.parseKeyDown(e)\n\n      if (value == null) return\n\n      this.setInternalValue(value)\n      this.$emit('change', value)\n    },\n    onKeyUp () {\n      this.keyPressed = 0\n    },\n    onSliderClick (e) {\n      this.isFocused = true\n      this.onMouseMove(e)\n      this.$emit('change', this.internalValue)\n    },\n    parseMouseMove (e) {\n      const {\n        left: offsetLeft,\n        width: trackWidth\n      } = this.$refs.track.getBoundingClientRect()\n      const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX\n      // It is possible for left to be NaN, force to number\n      let left = Math.min(Math.max((clientX - offsetLeft) / trackWidth, 0), 1) || 0\n\n      if (this.$vuetify.rtl) left = 1 - left\n\n      const isInsideTrack = clientX >= offsetLeft - 8 && clientX <= offsetLeft + trackWidth + 8\n      const value = parseFloat(this.min) + left * (this.max - this.min)\n\n      return { value, isInsideTrack }\n    },\n    parseKeyDown (e, value = this.internalValue) {\n      if (this.disabled) return\n\n      const { pageup, pagedown, end, home, left, right, down, up } = keyCodes\n\n      if (![pageup, pagedown, end, home, left, right, down, up].includes(e.keyCode)) return\n\n      e.preventDefault()\n      const step = this.stepNumeric || 1\n      const steps = (this.max - this.min) / step\n      if ([left, right, down, up].includes(e.keyCode)) {\n        this.keyPressed += 1\n\n        const increase = this.$vuetify.rtl ? [left, up] : [right, up]\n        const direction = increase.includes(e.keyCode) ? 1 : -1\n        const multiplier = e.shiftKey ? 3 : (e.ctrlKey ? 2 : 1)\n\n        value = value + (direction * step * multiplier)\n      } else if (e.keyCode === home) {\n        value = parseFloat(this.min)\n      } else if (e.keyCode === end) {\n        value = parseFloat(this.max)\n      } else /* if (e.keyCode === keyCodes.pageup || e.keyCode === pagedown) */ {\n        // Page up/down\n        const direction = e.keyCode === pagedown ? 1 : -1\n        value = value - (direction * step * (steps > 100 ? steps / 10 : 10))\n      }\n\n      return value\n    },\n    roundValue (value) {\n      if (!this.stepNumeric) return value\n      // Format input value using the same number\n      // of decimals places as in the step prop\n      const trimmedStep = this.step.toString().trim()\n      const decimals = trimmedStep.indexOf('.') > -1\n        ? (trimmedStep.length - trimmedStep.indexOf('.') - 1)\n        : 0\n      const offset = this.min % this.stepNumeric\n\n      const newValue = Math.round((value - offset) / this.stepNumeric) * this.stepNumeric + offset\n\n      return parseFloat(Math.min(newValue, this.max).toFixed(decimals))\n    },\n    setInternalValue (value) {\n      this.internalValue = value\n    }\n  }\n}\n"",""import VSlider from './VSlider'\n\nexport { VSlider }\nexport default VSlider\n"",""import '../../stylus/components/_snackbars.styl'\n\nimport Colorable from '../../mixins/colorable'\nimport Toggleable from '../../mixins/toggleable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\n\nimport mixins from '../../util/mixins'\nimport { VNode, VNodeChildrenArrayContents } from 'vue'\n\nexport default mixins(\n  Colorable,\n  Toggleable,\n  PositionableFactory(['absolute', 'top', 'bottom', 'left', 'right'])\n/* @vue/component */\n).extend({\n  name: 'v-snackbar',\n\n  props: {\n    autoHeight: Boolean,\n    multiLine: Boolean,\n    // TODO: change this to closeDelay to match other API in delayable.js\n    timeout: {\n      type: Number,\n      default: 6000\n    },\n    vertical: Boolean\n  },\n\n  data () {\n    return {\n      activeTimeout: -1\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return {\n        'v-snack--active': this.isActive,\n        'v-snack--absolute': this.absolute,\n        'v-snack--auto-height': this.autoHeight,\n        'v-snack--bottom': this.bottom || !this.top,\n        'v-snack--left': this.left,\n        'v-snack--multi-line': this.multiLine && !this.vertical,\n        'v-snack--right': this.right,\n        'v-snack--top': this.top,\n        'v-snack--vertical': this.vertical\n      }\n    }\n  },\n\n  watch: {\n    isActive () {\n      this.setTimeout()\n    }\n  },\n\n  mounted () {\n    this.setTimeout()\n  },\n\n  methods: {\n    setTimeout () {\n      window.clearTimeout(this.activeTimeout)\n\n      if (this.isActive && this.timeout) {\n        this.activeTimeout = window.setTimeout(() => {\n          this.isActive = false\n        }, this.timeout)\n      }\n    }\n  },\n\n  render (h): VNode {\n    const children: VNodeChildrenArrayContents = []\n\n    if (this.isActive) {\n      children.push(\n        h('div', {\n          staticClass: 'v-snack',\n          class: this.classes,\n          on: this.$listeners\n        }, [\n          h('div', this.setBackgroundColor(this.color, {\n            staticClass: 'v-snack__wrapper'\n          }), [\n            h('div', {\n              staticClass: 'v-snack__content'\n            }, this.$slots.default)\n          ])\n        ])\n      )\n    }\n\n    return h('transition', {\n      attrs: { name: 'v-snack-transition' }\n    }, children)\n  }\n})\n"",""import VSnackbar from './VSnackbar'\n\nexport { VSnackbar }\nexport default VSnackbar\n"",""import '../../stylus/components/_speed-dial.styl'\n\nimport Toggleable from '../../mixins/toggleable'\nimport Positionable from '../../mixins/positionable'\nimport Transitionable from '../../mixins/transitionable'\n\nimport ClickOutside from '../../directives/click-outside'\n\n/* @vue/component */\nexport default {\n  name: 'v-speed-dial',\n\n  directives: { ClickOutside },\n\n  mixins: [Positionable, Toggleable, Transitionable],\n\n  props: {\n    direction: {\n      type: String,\n      default: 'top',\n      validator: val => {\n        return ['top', 'right', 'bottom', 'left'].includes(val)\n      }\n    },\n    openOnHover: Boolean,\n    transition: {\n      type: String,\n      default: 'scale-transition'\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-speed-dial': true,\n        'v-speed-dial--top': this.top,\n        'v-speed-dial--right': this.right,\n        'v-speed-dial--bottom': this.bottom,\n        'v-speed-dial--left': this.left,\n        'v-speed-dial--absolute': this.absolute,\n        'v-speed-dial--fixed': this.fixed,\n        [`v-speed-dial--direction-${this.direction}`]: true\n      }\n    }\n  },\n\n  render (h) {\n    let children = []\n    const data = {\n      'class': this.classes,\n      directives: [{\n        name: 'click-outside',\n        value: () => (this.isActive = false)\n      }],\n      on: {\n        click: () => (this.isActive = !this.isActive)\n      }\n    }\n\n    if (this.openOnHover) {\n      data.on.mouseenter = () => (this.isActive = true)\n      data.on.mouseleave = () => (this.isActive = false)\n    }\n\n    if (this.isActive) {\n      children = (this.$slots.default || []).map((b, i) => {\n        b.key = i\n\n        return b\n      })\n    }\n\n    const list = h('transition-group', {\n      'class': 'v-speed-dial__list',\n      props: {\n        name: this.transition,\n        mode: this.mode,\n        origin: this.origin,\n        tag: 'div'\n      }\n    }, children)\n\n    return h('div', data, [this.$slots.activator, list])\n  }\n}\n"",""import VSpeedDial from './VSpeedDial'\n\nexport { VSpeedDial }\nexport default VSpeedDial\n"",""// Styles\nimport '../../stylus/components/_steppers.styl'\n\n// Mixins\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\nimport Themeable from '../../mixins/themeable'\n\n/* @vue/component */\nexport default {\n  name: 'v-stepper',\n\n  mixins: [\n    RegistrableProvide('stepper'),\n    Themeable\n  ],\n\n  provide () {\n    return {\n      stepClick: this.stepClick,\n      isVertical: this.vertical\n    }\n  },\n\n  props: {\n    nonLinear: Boolean,\n    altLabels: Boolean,\n    vertical: Boolean,\n    value: [Number, String]\n  },\n\n  data () {\n    return {\n      inputValue: null,\n      isBooted: false,\n      steps: [],\n      content: [],\n      isReverse: false\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-stepper': true,\n        'v-stepper--is-booted': this.isBooted,\n        'v-stepper--vertical': this.vertical,\n        'v-stepper--alt-labels': this.altLabels,\n        'v-stepper--non-linear': this.nonLinear,\n        ...this.themeClasses\n      }\n    }\n  },\n\n  watch: {\n    inputValue (val, prev) {\n      this.isReverse = Number(val) < Number(prev)\n      for (let index = this.steps.length; --index >= 0;) {\n        this.steps[index].toggle(this.inputValue)\n      }\n      for (let index = this.content.length; --index >= 0;) {\n        this.content[index].toggle(this.inputValue, this.isReverse)\n      }\n\n      this.$emit('input', this.inputValue)\n      prev && (this.isBooted = true)\n    },\n    value () {\n      this.$nextTick(() => (this.inputValue = this.value))\n    }\n  },\n\n  mounted () {\n    this.inputValue = this.value || this.steps[0].step || 1\n  },\n\n  methods: {\n    register (item) {\n      if (item.$options.name === 'v-stepper-step') {\n        this.steps.push(item)\n      } else if (item.$options.name === 'v-stepper-content') {\n        item.isVertical = this.vertical\n        this.content.push(item)\n      }\n    },\n    unregister (item) {\n      if (item.$options.name === 'v-stepper-step') {\n        this.steps = this.steps.filter(i => i !== item)\n      } else if (item.$options.name === 'v-stepper-content') {\n        item.isVertical = this.vertical\n        this.content = this.content.filter(i => i !== item)\n      }\n    },\n    stepClick (step) {\n      this.$nextTick(() => (this.inputValue = step))\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      'class': this.classes\n    }, this.$slots.default)\n  }\n}\n"",""// Components\nimport {\n  VTabTransition,\n  VTabReverseTransition\n} from '../transitions'\n\n// Mixins\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-stepper-content',\n\n  mixins: [\n    RegistrableInject('stepper', 'v-stepper-content', 'v-stepper')\n  ],\n\n  inject: {\n    isVerticalProvided: {\n      from: 'isVertical'\n    }\n  },\n\n  props: {\n    step: {\n      type: [Number, String],\n      required: true\n    }\n  },\n\n  data () {\n    return {\n      height: 0,\n      // Must be null to allow\n      // previous comparison\n      isActive: null,\n      isReverse: false,\n      isVertical: this.isVerticalProvided\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-stepper__content': true\n      }\n    },\n    computedTransition () {\n      return this.isReverse\n        ? VTabReverseTransition\n        : VTabTransition\n    },\n    styles () {\n      if (!this.isVertical) return {}\n\n      return {\n        height: convertToUnit(this.height)\n      }\n    },\n    wrapperClasses () {\n      return {\n        'v-stepper__wrapper': true\n      }\n    }\n  },\n\n  watch: {\n    isActive (current, previous) {\n      // If active and the previous state\n      // was null, is just booting up\n      if (current && previous == null) {\n        return (this.height = 'auto')\n      }\n\n      if (!this.isVertical) return\n\n      if (this.isActive) this.enter()\n      else this.leave()\n    }\n  },\n\n  mounted () {\n    this.$refs.wrapper.addEventListener(\n      'transitionend',\n      this.onTransition,\n      false\n    )\n    this.stepper && this.stepper.register(this)\n  },\n\n  beforeDestroy () {\n    this.$refs.wrapper.removeEventListener(\n      'transitionend',\n      this.onTransition,\n      false\n    )\n    this.stepper && this.stepper.unregister(this)\n  },\n\n  methods: {\n    onTransition (e) {\n      if (!this.isActive ||\n        e.propertyName !== 'height'\n      ) return\n\n      this.height = 'auto'\n    },\n    enter () {\n      let scrollHeight = 0\n\n      // Render bug with height\n      requestAnimationFrame(() => {\n        scrollHeight = this.$refs.wrapper.scrollHeight\n      })\n\n      this.height = 0\n\n      // Give the collapsing element time to collapse\n      setTimeout(() => this.isActive && (this.height = (scrollHeight || 'auto')), 450)\n    },\n    leave () {\n      this.height = this.$refs.wrapper.clientHeight\n      setTimeout(() => (this.height = 0), 10)\n    },\n    toggle (step, reverse) {\n      this.isActive = step.toString() === this.step.toString()\n      this.isReverse = reverse\n    }\n  },\n\n  render (h) {\n    const contentData = {\n      'class': this.classes\n    }\n    const wrapperData = {\n      'class': this.wrapperClasses,\n      style: this.styles,\n      ref: 'wrapper'\n    }\n\n    if (!this.isVertical) {\n      contentData.directives = [{\n        name: 'show',\n        value: this.isActive\n      }]\n    }\n\n    const wrapper = h('div', wrapperData, [this.$slots.default])\n    const content = h('div', contentData, [wrapper])\n\n    return h(this.computedTransition, {\n      on: this.$listeners\n    }, [content])\n  }\n}\n"",""// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Directives\nimport Ripple from '../../directives/ripple'\n\n/* @vue/component */\nexport default {\n  name: 'v-stepper-step',\n\n  directives: { Ripple },\n\n  mixins: [\n    Colorable,\n    RegistrableInject('stepper', 'v-stepper-step', 'v-stepper')\n  ],\n\n  inject: ['stepClick'],\n\n  props: {\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    complete: Boolean,\n    completeIcon: {\n      type: String,\n      default: '$vuetify.icons.complete'\n    },\n    editIcon: {\n      type: String,\n      default: '$vuetify.icons.edit'\n    },\n    errorIcon: {\n      type: String,\n      default: '$vuetify.icons.error'\n    },\n    editable: Boolean,\n    rules: {\n      type: Array,\n      default: () => []\n    },\n    step: [Number, String]\n  },\n\n  data () {\n    return {\n      isActive: false,\n      isInactive: true\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-stepper__step': true,\n        'v-stepper__step--active': this.isActive,\n        'v-stepper__step--editable': this.editable,\n        'v-stepper__step--inactive': this.isInactive,\n        'v-stepper__step--error': this.hasError,\n        'v-stepper__step--complete': this.complete,\n        'error--text': this.hasError\n      }\n    },\n    hasError () {\n      return this.rules.some(i => (i() !== true))\n    }\n  },\n\n  mounted () {\n    this.stepper && this.stepper.register(this)\n  },\n\n  beforeDestroy () {\n    this.stepper && this.stepper.unregister(this)\n  },\n\n  methods: {\n    click (e) {\n      e.stopPropagation()\n\n      if (this.editable) {\n        this.stepClick(this.step)\n      }\n    },\n    toggle (step) {\n      this.isActive = step.toString() === this.step.toString()\n      this.isInactive = Number(step) < Number(this.step)\n    }\n  },\n\n  render (h) {\n    const data = {\n      'class': this.classes,\n      directives: [{\n        name: 'ripple',\n        value: this.editable\n      }],\n      on: { click: this.click }\n    }\n    let stepContent\n\n    if (this.hasError) {\n      stepContent = [h(VIcon, {}, this.errorIcon)]\n    } else if (this.complete) {\n      if (this.editable) {\n        stepContent = [h(VIcon, {}, this.editIcon)]\n      } else {\n        stepContent = [h(VIcon, {}, this.completeIcon)]\n      }\n    } else {\n      stepContent = this.step\n    }\n\n    const color = (!this.hasError && (this.complete || this.isActive)) ? this.color : false\n    const step = h('span', this.setBackgroundColor(color, {\n      staticClass: 'v-stepper__step__step'\n    }), stepContent)\n\n    const label = h('div', {\n      staticClass: 'v-stepper__label'\n    }, this.$slots.default)\n\n    return h('div', data, [step, label])\n  }\n}\n"",""import { createSimpleFunctional } from '../../util/helpers'\nimport VStepper from './VStepper'\nimport VStepperStep from './VStepperStep'\nimport VStepperContent from './VStepperContent'\n\nconst VStepperHeader = createSimpleFunctional('v-stepper__header')\nconst VStepperItems = createSimpleFunctional('v-stepper__items')\n\nexport {\n  VStepper,\n  VStepperContent,\n  VStepperStep,\n  VStepperHeader,\n  VStepperItems\n}\n\nexport default {\n  $_vuetify_subcomponents: {\n    VStepper,\n    VStepperContent,\n    VStepperStep,\n    VStepperHeader,\n    VStepperItems\n  }\n}\n"",""import '../../stylus/components/_subheaders.styl'\n\nimport Themeable from '../../mixins/themeable'\n\n/* @vue/component */\nexport default {\n  name: 'v-subheader',\n\n  mixins: [Themeable],\n\n  props: {\n    inset: Boolean\n  },\n\n  render (h) {\n    return h('div', {\n      staticClass: 'v-subheader',\n      class: {\n        'v-subheader--inset': this.inset,\n        ...this.themeClasses\n      },\n      attrs: this.$attrs,\n      on: this.$listeners\n    }, this.$slots.default)\n  }\n}\n"",""import VSubheader from './VSubheader'\n\nexport { VSubheader }\nexport default VSubheader\n"",""import '../../stylus/components/_selection-controls.styl'\nimport '../../stylus/components/_switch.styl'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Components\nimport { VFabTransition } from '../transitions'\nimport VProgressCircular from '../VProgressCircular/VProgressCircular'\n\n// Helpers\nimport { keyCodes } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-switch',\n\n  directives: { Touch },\n\n  mixins: [\n    Selectable\n  ],\n\n  props: {\n    loading: {\n      type: [Boolean, String],\n      default: false\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-input--selection-controls v-input--switch': true\n      }\n    },\n    switchData () {\n      return this.setTextColor(this.loading ? undefined : this.computedColor, {\n        class: this.themeClasses\n      })\n    }\n  },\n\n  methods: {\n    genDefaultSlot () {\n      return [\n        this.genSwitch(),\n        this.genLabel()\n      ]\n    },\n    genSwitch () {\n      return this.$createElement('div', {\n        staticClass: 'v-input--selection-controls__input'\n      }, [\n        this.genInput('checkbox', this.$attrs),\n        !this.disabled && this.genRipple(this.setTextColor(this.computedColor, {\n          directives: [{\n            name: 'touch',\n            value: {\n              left: this.onSwipeLeft,\n              right: this.onSwipeRight\n            }\n          }]\n        })),\n        this.$createElement('div', {\n          staticClass: 'v-input--switch__track',\n          ...this.switchData\n        }),\n        this.$createElement('div', {\n          staticClass: 'v-input--switch__thumb',\n          ...this.switchData\n        }, [this.genProgress()])\n      ])\n    },\n    genProgress () {\n      return this.$createElement(VFabTransition, {}, [\n        this.loading === false\n          ? null\n          : this.$slots.progress || this.$createElement(VProgressCircular, {\n            props: {\n              color: (this.loading === true || this.loading === '')\n                ? (this.color || 'primary')\n                : this.loading,\n              size: 16,\n              width: 2,\n              indeterminate: true\n            }\n          })\n      ])\n    },\n    onSwipeLeft () {\n      if (this.isActive) this.onChange()\n    },\n    onSwipeRight () {\n      if (!this.isActive) this.onChange()\n    },\n    onKeydown (e) {\n      if (\n        (e.keyCode === keyCodes.left && this.isActive) ||\n        (e.keyCode === keyCodes.right && !this.isActive)\n      ) this.onChange()\n    }\n  }\n}\n"",""import VSwitch from './VSwitch'\n\nexport { VSwitch }\nexport default VSwitch\n"",""import '../../stylus/components/_system-bars.styl'\n\nimport Applicationable from '../../mixins/applicationable'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n/* @vue/component */\nexport default {\n  name: 'v-system-bar',\n\n  mixins: [\n    Applicationable('bar', [\n      'height',\n      'window'\n    ]),\n    Colorable,\n    Themeable\n  ],\n\n  props: {\n    height: {\n      type: [Number, String],\n      validator: v => !isNaN(parseInt(v))\n    },\n    lightsOut: Boolean,\n    status: Boolean,\n    window: Boolean\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-system-bar--lights-out': this.lightsOut,\n        'v-system-bar--absolute': this.absolute,\n        'v-system-bar--fixed': !this.absolute && (this.app || this.fixed),\n        'v-system-bar--status': this.status,\n        'v-system-bar--window': this.window,\n        ...this.themeClasses\n      }\n    },\n    computedHeight () {\n      if (this.height) return parseInt(this.height)\n\n      return this.window ? 32 : 24\n    }\n  },\n\n  methods: {\n    /**\n     * Update the application layout\n     *\n     * @return {number}\n     */\n    updateApplication () {\n      return this.computedHeight\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'v-system-bar',\n      'class': this.classes,\n      style: {\n        height: `${this.computedHeight}px`\n      }\n    }\n\n    return h('div', this.setBackgroundColor(this.color, data), this.$slots.default)\n  }\n}\n"",""import VSystemBar from './VSystemBar'\n\nexport { VSystemBar }\nexport default VSystemBar\n"",""// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-tab',\n\n  mixins: [\n    Routable,\n    // Must be after routable\n    // to overwrite activeClass\n    GroupableFactory('tabGroup'),\n    Themeable\n  ],\n\n  props: {\n    ripple: {\n      type: [Boolean, Object],\n      default: true\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-tabs__item': true,\n        'v-tabs__item--disabled': this.disabled,\n        ...this.groupClasses\n      }\n    },\n    value () {\n      let to = this.to || this.href || ''\n\n      if (this.$router &&\n        this.to === Object(this.to)\n      ) {\n        const resolve = this.$router.resolve(\n          this.to,\n          this.$route,\n          this.append\n        )\n\n        to = resolve.href\n      }\n\n      return to.replace('#', '')\n    }\n  },\n\n  watch: {\n    $route: 'onRouteChange'\n  },\n\n  mounted () {\n    this.onRouteChange()\n  },\n\n  methods: {\n    click (e) {\n      // If user provides an\n      // actual link, do not\n      // prevent default\n      if (this.href &&\n        this.href.indexOf('#') > -1\n      ) e.preventDefault()\n\n      this.$emit('click', e)\n\n      this.to || this.toggle()\n    },\n    onRouteChange () {\n      if (!this.to || !this.$refs.link) return\n\n      const path = `_vnode.data.class.${this.activeClass}`\n\n      this.$nextTick(() => {\n        if (getObjectValueByPath(this.$refs.link, path)) {\n          this.toggle()\n        }\n      })\n    }\n  },\n\n  render (h) {\n    const link = this.generateRouteLink(this.classes)\n    const { data } = link\n\n    // If disabled, use div as anchor tags do not support\n    // being disabled\n    const tag = this.disabled ? 'div' : link.tag\n\n    data.ref = 'link'\n\n    return h('div', {\n      staticClass: 'v-tabs__div'\n    }, [h(tag, data, this.$slots.default)])\n  }\n}\n"",""// Extensions\nimport VWindowItem from '../VWindow/VWindowItem'\n\n// Mixins\nimport { deprecate } from '../../util/console'\n\n/* @vue/component */\nexport default VWindowItem.extend({\n  name: 'v-tab-item',\n\n  props: {\n    id: String\n  },\n\n  render (h) {\n    const render = VWindowItem.options.render.call(this, h)\n\n    // For backwards compatibility with v1.2\n    /* istanbul ignore next */\n    if (this.id) {\n      deprecate('id', 'value', this)\n\n      render.data.domProps = render.data.domProps || {}\n      render.data.domProps.id = this.id\n    }\n\n    return render\n  }\n})\n"",""// Styles\nimport '../../stylus/components/_tabs.styl'\n\n// Extensions\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Component level mixins\nimport TabsComputed from './mixins/tabs-computed'\nimport TabsGenerators from './mixins/tabs-generators'\nimport TabsProps from './mixins/tabs-props'\nimport TabsTouch from './mixins/tabs-touch'\nimport TabsWatchers from './mixins/tabs-watchers'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport SSRBootable from '../../mixins/ssr-bootable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\nimport { deprecate } from '../../util/console'\n\n// Utils\nimport ThemeProvider from '../../util/ThemeProvider'\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n  name: 'v-tabs',\n\n  directives: {\n    Resize,\n    Touch\n  },\n\n  mixins: [\n    Colorable,\n    SSRBootable,\n    TabsComputed,\n    TabsProps,\n    TabsGenerators,\n    TabsTouch,\n    TabsWatchers,\n    Themeable\n  ],\n\n  provide () {\n    return {\n      tabGroup: this,\n      tabProxy: this.tabProxy,\n      registerItems: this.registerItems,\n      unregisterItems: this.unregisterItems\n    }\n  },\n\n  data () {\n    return {\n      bar: [],\n      content: [],\n      isOverflowing: false,\n      nextIconVisible: false,\n      prevIconVisible: false,\n      resizeTimeout: null,\n      scrollOffset: 0,\n      sliderWidth: null,\n      sliderLeft: null,\n      startX: 0,\n      tabItems: null,\n      transitionTime: 300,\n      widths: {\n        bar: 0,\n        container: 0,\n        wrapper: 0\n      }\n    }\n  },\n\n  watch: {\n    items: 'onResize',\n    tabs: 'onResize'\n  },\n\n  mounted () {\n    this.init()\n  },\n\n  methods: {\n    checkIcons () {\n      this.prevIconVisible = this.checkPrevIcon()\n      this.nextIconVisible = this.checkNextIcon()\n    },\n    checkPrevIcon () {\n      return this.scrollOffset > 0\n    },\n    checkNextIcon () {\n      // Check one scroll ahead to know the width of right-most item\n      return this.widths.container > this.scrollOffset + this.widths.wrapper\n    },\n    callSlider () {\n      if (this.hideSlider || !this.activeTab) return false\n\n      // Give screen time to paint\n      const activeTab = this.activeTab\n\n      this.$nextTick(() => {\n        /* istanbul ignore if */\n        if (!activeTab || !activeTab.$el) return\n        this.sliderWidth = activeTab.$el.scrollWidth\n        this.sliderLeft = activeTab.$el.offsetLeft\n      })\n    },\n    // Do not process\n    // until DOM is\n    // painted\n    init () {\n      /* istanbul ignore next */\n      if (this.$listeners['input']) {\n        deprecate('@input', '@change', this)\n      }\n    },\n    /**\n     * When v-navigation-drawer changes the\n     * width of the container, call resize\n     * after the transition is complete\n     */\n    onResize () {\n      if (this._isDestroyed) return\n\n      this.setWidths()\n\n      const delay = this.isBooted ? this.transitionTime : 0\n\n      clearTimeout(this.resizeTimeout)\n      this.resizeTimeout = setTimeout(this.updateTabsView, delay)\n    },\n    overflowCheck (e, fn) {\n      this.isOverflowing && fn(e)\n    },\n    scrollTo (direction) {\n      this.scrollOffset = this.newOffset(direction)\n    },\n    setOverflow () {\n      this.isOverflowing = this.widths.bar < this.widths.container\n    },\n    setWidths () {\n      const bar = this.$refs.bar ? this.$refs.bar.clientWidth : 0\n      const container = this.$refs.container ? this.$refs.container.clientWidth : 0\n      const wrapper = this.$refs.wrapper ? this.$refs.wrapper.clientWidth : 0\n\n      this.widths = { bar, container, wrapper }\n\n      this.setOverflow()\n    },\n    parseNodes () {\n      const item = []\n      const items = []\n      const slider = []\n      const tab = []\n      const length = (this.$slots.default || []).length\n\n      for (let i = 0; i < length; i++) {\n        const vnode = this.$slots.default[i]\n\n        if (vnode.componentOptions) {\n          switch (vnode.componentOptions.Ctor.options.name) {\n            case 'v-tabs-slider': slider.push(vnode)\n              break\n            case 'v-tabs-items': items.push(vnode)\n              break\n            case 'v-tab-item': item.push(vnode)\n              break\n            // case 'v-tab' - intentionally omitted\n            default: tab.push(vnode)\n          }\n        } else {\n          tab.push(vnode)\n        }\n      }\n\n      return { tab, slider, items, item }\n    },\n    registerItems (fn) {\n      this.tabItems = fn\n      fn(this.internalValue)\n    },\n    unregisterItems () {\n      this.tabItems = null\n    },\n    updateTabsView () {\n      this.callSlider()\n      this.scrollIntoView()\n      this.checkIcons()\n    },\n    scrollIntoView () {\n      /* istanbul ignore next */\n      if (!this.activeTab) return\n      if (!this.isOverflowing) return (this.scrollOffset = 0)\n\n      const totalWidth = this.widths.wrapper + this.scrollOffset\n      const { clientWidth, offsetLeft } = this.activeTab.$el\n      const itemOffset = clientWidth + offsetLeft\n      let additionalOffset = clientWidth * 0.3\n\n      if (this.activeTab === this.items[this.items.length - 1]) {\n        additionalOffset = 0 // don't add an offset if selecting the last tab\n      }\n\n      /* istanbul ignore else */\n      if (offsetLeft < this.scrollOffset) {\n        this.scrollOffset = Math.max(offsetLeft - additionalOffset, 0)\n      } else if (totalWidth < itemOffset) {\n        this.scrollOffset -= totalWidth - itemOffset - additionalOffset\n      }\n    },\n    tabProxy (val) {\n      this.internalValue = val\n    }\n  },\n\n  render (h) {\n    const { tab, slider, items, item } = this.parseNodes()\n\n    return h('div', {\n      staticClass: 'v-tabs',\n      directives: [{\n        name: 'resize',\n        modifiers: { quiet: true },\n        value: this.onResize\n      }]\n    }, [\n      this.genBar([this.hideSlider ? null : this.genSlider(slider), tab]),\n      h(ThemeProvider, {\n        props: { dark: this.theme.isDark, light: !this.theme.isDark }\n      }, [\n        this.genItems(items, item)\n      ])\n    ])\n  }\n})\n"",""// Extensions\nimport VWindow from '../VWindow/VWindow'\n\n/* @vue/component */\nexport default VWindow.extend({\n  name: 'v-tabs-items',\n\n  inject: {\n    registerItems: {\n      default: null\n    },\n    tabProxy: {\n      default: null\n    },\n    unregisterItems: {\n      default: null\n    }\n  },\n\n  props: {\n    cycle: Boolean\n  },\n\n  watch: {\n    internalValue (val) {\n      /* istanbul ignore else */\n      if (this.tabProxy) this.tabProxy(val)\n    }\n  },\n\n  created () {\n    this.registerItems && this.registerItems(this.changeModel)\n  },\n\n  beforeDestroy () {\n    this.unregisterItems && this.unregisterItems()\n  },\n\n  methods: {\n    changeModel (val) {\n      this.internalValue = val\n    },\n    // For backwards compatability with v1.2\n    getValue (item, i) {\n      /* istanbul ignore if */\n      if (item.id) return item.id\n\n      return VWindow.options.methods.getValue.call(this, item, i)\n    },\n    next () {\n      if (!this.cycle && this.internalIndex === this.items.length - 1) {\n        return\n      }\n\n      VWindow.options.methods.next.call(this)\n    },\n    prev () {\n      if (!this.cycle && this.internalIndex === 0) {\n        return\n      }\n\n      VWindow.options.methods.prev.call(this)\n    }\n  }\n})\n"",""import Colorable from '../../mixins/colorable'\n\n/* @vue/component */\nexport default {\n  name: 'v-tabs-slider',\n\n  mixins: [Colorable],\n\n  render (h) {\n    return h('div', this.setBackgroundColor(this.color || 'accent', {\n      staticClass: 'v-tabs__slider'\n    }))\n  }\n}\n"",""import VTabs from './VTabs'\nimport VTab from './VTab'\nimport VTabsItems from './VTabsItems'\nimport VTabItem from './VTabItem'\nimport VTabsSlider from './VTabsSlider'\n\nexport { VTabs, VTab, VTabItem, VTabsItems, VTabsSlider }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VTabs,\n    VTab,\n    VTabsItems,\n    VTabItem,\n    VTabsSlider\n  }\n}\n"",""/**\n * Tabs computed\n *\n * @mixin\n */\n/* @vue/component */\nexport default {\n  computed: {\n    activeTab () {\n      if (!this.selectedItems.length) return undefined\n\n      return this.selectedItems[0]\n    },\n    containerStyles () {\n      return this.height ? {\n        height: `${parseInt(this.height, 10)}px`\n      } : null\n    },\n    hasArrows () {\n      return (this.showArrows || !this.isMobile) && this.isOverflowing\n    },\n    isMobile () {\n      return this.$vuetify.breakpoint.width < this.mobileBreakPoint\n    },\n    sliderStyles () {\n      return {\n        left: `${this.sliderLeft}px`,\n        transition: this.sliderLeft != null ? null : 'none',\n        width: `${this.sliderWidth}px`\n      }\n    }\n  }\n}\n"",""import VTabsItems from '../VTabsItems'\nimport VTabsSlider from '../VTabsSlider'\nimport VIcon from '../../VIcon'\n\n/**\n * Tabs generators\n *\n * @mixin\n */\n/* @vue/component */\nexport default {\n  methods: {\n    genBar (items) {\n      return this.$createElement('div', this.setBackgroundColor(this.color, {\n        staticClass: 'v-tabs__bar',\n        'class': this.themeClasses,\n        ref: 'bar'\n      }), [\n        this.genTransition('prev'),\n        this.genWrapper(\n          this.genContainer(items)\n        ),\n        this.genTransition('next')\n      ])\n    },\n    genContainer (items) {\n      return this.$createElement('div', {\n        staticClass: 'v-tabs__container',\n        class: {\n          'v-tabs__container--align-with-title': this.alignWithTitle,\n          'v-tabs__container--centered': this.centered,\n          'v-tabs__container--fixed-tabs': this.fixedTabs,\n          'v-tabs__container--grow': this.grow,\n          'v-tabs__container--icons-and-text': this.iconsAndText,\n          'v-tabs__container--overflow': this.isOverflowing,\n          'v-tabs__container--right': this.right\n        },\n        style: this.containerStyles,\n        ref: 'container'\n      }, items)\n    },\n    genIcon (direction) {\n      if (!this.hasArrows ||\n        !this[`${direction}IconVisible`]\n      ) return null\n\n      return this.$createElement(VIcon, {\n        staticClass: `v-tabs__icon v-tabs__icon--${direction}`,\n        props: {\n          disabled: !this[`${direction}IconVisible`]\n        },\n        on: {\n          click: () => this.scrollTo(direction)\n        }\n      }, this[`${direction}Icon`])\n    },\n    genItems (items, item) {\n      if (items.length > 0) return items\n      if (!item.length) return null\n\n      return this.$createElement(VTabsItems, item)\n    },\n    genTransition (direction) {\n      return this.$createElement('transition', {\n        props: { name: 'fade-transition' }\n      }, [this.genIcon(direction)])\n    },\n    genWrapper (items) {\n      return this.$createElement('div', {\n        staticClass: 'v-tabs__wrapper',\n        class: {\n          'v-tabs__wrapper--show-arrows': this.hasArrows\n        },\n        ref: 'wrapper',\n        directives: [{\n          name: 'touch',\n          value: {\n            start: e => this.overflowCheck(e, this.onTouchStart),\n            move: e => this.overflowCheck(e, this.onTouchMove),\n            end: e => this.overflowCheck(e, this.onTouchEnd)\n          }\n        }]\n      }, [items])\n    },\n    genSlider (items) {\n      if (!items.length) {\n        items = [this.$createElement(VTabsSlider, {\n          props: { color: this.sliderColor }\n        })]\n      }\n\n      return this.$createElement('div', {\n        staticClass: 'v-tabs__slider-wrapper',\n        style: this.sliderStyles\n      }, items)\n    }\n  }\n}\n"",""/**\n * Tabs props\n *\n * @mixin\n */\n/* @vue/component */\nexport default {\n  props: {\n    activeClass: {\n      type: String,\n      default: 'v-tabs__item--active'\n    },\n    alignWithTitle: Boolean,\n    centered: Boolean,\n    fixedTabs: Boolean,\n    grow: Boolean,\n    height: {\n      type: [Number, String],\n      default: undefined,\n      validator: v => !isNaN(parseInt(v))\n    },\n    hideSlider: Boolean,\n    iconsAndText: Boolean,\n    mandatory: {\n      type: Boolean,\n      default: true\n    },\n    mobileBreakPoint: {\n      type: [Number, String],\n      default: 1264,\n      validator: v => !isNaN(parseInt(v))\n    },\n    nextIcon: {\n      type: String,\n      default: '$vuetify.icons.next'\n    },\n    prevIcon: {\n      type: String,\n      default: '$vuetify.icons.prev'\n    },\n    right: Boolean,\n    showArrows: Boolean,\n    sliderColor: {\n      type: String,\n      default: 'accent'\n    },\n    value: [Number, String]\n  }\n}\n"",""/**\n * Tabs touch\n *\n * @mixin\n */\n/* @vue/component */\nexport default {\n  methods: {\n    newOffset (direction) {\n      const clientWidth = this.$refs.wrapper.clientWidth\n\n      if (direction === 'prev') {\n        return Math.max(this.scrollOffset - clientWidth, 0)\n      } else {\n        return Math.min(this.scrollOffset + clientWidth, this.$refs.container.clientWidth - clientWidth)\n      }\n    },\n    onTouchStart (e) {\n      this.startX = this.scrollOffset + e.touchstartX\n      this.$refs.container.style.transition = 'none'\n      this.$refs.container.style.willChange = 'transform'\n    },\n    onTouchMove (e) {\n      this.scrollOffset = this.startX - e.touchmoveX\n    },\n    onTouchEnd () {\n      const container = this.$refs.container\n      const wrapper = this.$refs.wrapper\n      const maxScrollOffset = container.clientWidth - wrapper.clientWidth\n      container.style.transition = null\n      container.style.willChange = null\n\n      /* istanbul ignore else */\n      if (this.scrollOffset < 0 || !this.isOverflowing) {\n        this.scrollOffset = 0\n      } else if (this.scrollOffset >= maxScrollOffset) {\n        this.scrollOffset = maxScrollOffset\n      }\n    }\n  }\n}\n"",""/**\n * Tabs watchers\n *\n * @mixin\n */\n/* @vue/component */\nexport default {\n  watch: {\n    activeTab (val, oldVal) {\n      this.setOverflow()\n\n      if (!val) return\n\n      this.tabItems && this.tabItems(\n        this.getValue(val, this.items.indexOf(val))\n      )\n\n      // Do nothing for first tab\n      // is handled from isBooted\n      // watcher\n      if (oldVal == null) return\n\n      this.updateTabsView()\n    },\n    alignWithTitle: 'callSlider',\n    centered: 'callSlider',\n    fixedTabs: 'callSlider',\n    hasArrows (val) {\n      if (!val) this.scrollOffset = 0\n    },\n    /* @deprecate */\n    internalValue (val) {\n      /* istanbul ignore else */\n      if (!this.$listeners['input']) return\n\n      this.$emit('input', val)\n    },\n    lazyValue: 'updateTabs',\n    right: 'callSlider',\n    '$vuetify.application.left': 'onResize',\n    '$vuetify.application.right': 'onResize',\n    scrollOffset (val) {\n      this.$refs.container.style.transform = `translateX(${-val}px)`\n      if (this.hasArrows) {\n        this.prevIconVisible = this.checkPrevIcon()\n        this.nextIconVisible = this.checkNextIcon()\n      }\n    }\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_text-fields.styl'\n\n// Extensions\nimport VInput from '../VInput'\n\n// Components\nimport VCounter from '../VCounter'\nimport VLabel from '../VLabel'\n\n// Mixins\nimport Maskable from '../../mixins/maskable'\nimport Loadable from '../../mixins/loadable'\n\n// Directives\nimport Ripple from '../../directives/ripple'\n\n// Utilities\nimport {\n  keyCodes\n} from '../../util/helpers'\nimport { deprecate } from '../../util/console'\n\nconst dirtyTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\n/* @vue/component */\nexport default {\n  name: 'v-text-field',\n\n  directives: { Ripple },\n\n  extends: VInput,\n\n  mixins: [Maskable, Loadable],\n\n  inheritAttrs: false,\n\n  props: {\n    appendOuterIcon: String,\n    /** @deprecated */\n    appendOuterIconCb: Function,\n    autofocus: Boolean,\n    box: Boolean,\n    browserAutocomplete: String,\n    clearable: Boolean,\n    clearIcon: {\n      type: String,\n      default: '$vuetify.icons.clear'\n    },\n    clearIconCb: Function,\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    counter: [Boolean, Number, String],\n    flat: Boolean,\n    fullWidth: Boolean,\n    label: String,\n    outline: Boolean,\n    placeholder: String,\n    prefix: String,\n    prependInnerIcon: String,\n    /** @deprecated */\n    prependInnerIconCb: Function,\n    reverse: Boolean,\n    singleLine: Boolean,\n    solo: Boolean,\n    soloInverted: Boolean,\n    suffix: String,\n    type: {\n      type: String,\n      default: 'text'\n    }\n  },\n\n  data: () => ({\n    badInput: false,\n    initialValue: null,\n    internalChange: false,\n    isClearing: false\n  }),\n\n  computed: {\n    classes () {\n      return {\n        'v-text-field': true,\n        'v-text-field--full-width': this.fullWidth,\n        'v-text-field--prefix': this.prefix,\n        'v-text-field--single-line': this.isSingle,\n        'v-text-field--solo': this.isSolo,\n        'v-text-field--solo-inverted': this.soloInverted,\n        'v-text-field--solo-flat': this.flat,\n        'v-text-field--box': this.box,\n        'v-text-field--enclosed': this.isEnclosed,\n        'v-text-field--reverse': this.reverse,\n        'v-text-field--outline': this.hasOutline,\n        'v-text-field--placeholder': this.placeholder\n      }\n    },\n    counterValue () {\n      return (this.internalValue || '').toString().length\n    },\n    directivesInput () {\n      return []\n    },\n    // TODO: Deprecate\n    hasOutline () {\n      return this.outline || this.textarea\n    },\n    internalValue: {\n      get () {\n        return this.lazyValue\n      },\n      set (val) {\n        if (this.mask) {\n          this.lazyValue = this.unmaskText(this.maskText(this.unmaskText(val)))\n          this.setSelectionRange()\n        } else {\n          this.lazyValue = val\n          this.$emit('input', this.lazyValue)\n        }\n      }\n    },\n    isDirty () {\n      return (this.lazyValue != null &&\n        this.lazyValue.toString().length > 0) ||\n        this.badInput\n    },\n    isEnclosed () {\n      return (\n        this.box ||\n        this.isSolo ||\n        this.hasOutline ||\n        this.fullWidth\n      )\n    },\n    isLabelActive () {\n      return this.isDirty || dirtyTypes.includes(this.type)\n    },\n    isSingle () {\n      return this.isSolo || this.singleLine\n    },\n    isSolo () {\n      return this.solo || this.soloInverted\n    },\n    labelPosition () {\n      const offset = (this.prefix && !this.labelValue) ? this.prefixWidth : 0\n\n      return (!this.$vuetify.rtl !== !this.reverse) ? {\n        left: 'auto',\n        right: offset\n      } : {\n        left: offset,\n        right: 'auto'\n      }\n    },\n    showLabel () {\n      return this.hasLabel && (!this.isSingle || (!this.isLabelActive && !this.placeholder && !this.prefixLabel))\n    },\n    labelValue () {\n      return !this.isSingle &&\n        Boolean(this.isFocused || this.isLabelActive || this.placeholder || this.prefixLabel)\n    },\n    prefixWidth () {\n      if (!this.prefix && !this.$refs.prefix) return\n\n      return this.$refs.prefix.offsetWidth\n    },\n    prefixLabel () {\n      return (this.prefix && !this.value)\n    }\n  },\n\n  watch: {\n    isFocused (val) {\n      // Sets validationState from validatable\n      this.hasColor = val\n\n      if (val) {\n        this.initialValue = this.lazyValue\n      } else if (this.initialValue !== this.lazyValue) {\n        this.$emit('change', this.lazyValue)\n      }\n    },\n    value (val) {\n      if (this.mask && !this.internalChange) {\n        const masked = this.maskText(this.unmaskText(val))\n        this.lazyValue = this.unmaskText(masked)\n\n        // Emit when the externally set value was modified internally\n        String(val) !== this.lazyValue && this.$nextTick(() => {\n          this.$refs.input.value = masked\n          this.$emit('input', this.lazyValue)\n        })\n      } else this.lazyValue = val\n    }\n  },\n\n  mounted () {\n    this.autofocus && this.onFocus()\n  },\n\n  methods: {\n    /** @public */\n    focus () {\n      this.onFocus()\n    },\n    /** @public */\n    blur () {\n      this.$refs.input ? this.$refs.input.blur() : this.onBlur()\n    },\n    clearableCallback () {\n      this.internalValue = null\n      this.$nextTick(() => this.$refs.input.focus())\n    },\n    genAppendSlot () {\n      const slot = []\n\n      if (this.$slots['append-outer']) {\n        slot.push(this.$slots['append-outer'])\n      } else if (this.appendOuterIcon) {\n        slot.push(this.genIcon('appendOuter'))\n      }\n\n      return this.genSlot('append', 'outer', slot)\n    },\n    genPrependInnerSlot () {\n      const slot = []\n\n      if (this.$slots['prepend-inner']) {\n        slot.push(this.$slots['prepend-inner'])\n      } else if (this.prependInnerIcon) {\n        slot.push(this.genIcon('prependInner'))\n      }\n\n      return this.genSlot('prepend', 'inner', slot)\n    },\n    genIconSlot () {\n      const slot = []\n\n      if (this.$slots['append']) {\n        slot.push(this.$slots['append'])\n      } else if (this.appendIcon) {\n        slot.push(this.genIcon('append'))\n      }\n\n      return this.genSlot('append', 'inner', slot)\n    },\n    genInputSlot () {\n      const input = VInput.methods.genInputSlot.call(this)\n\n      const prepend = this.genPrependInnerSlot()\n      prepend && input.children.unshift(prepend)\n\n      return input\n    },\n    genClearIcon () {\n      if (!this.clearable) return null\n\n      const icon = !this.isDirty\n        ? false\n        : 'clear'\n\n      if (this.clearIconCb) deprecate(':clear-icon-cb', '@click:clear', this)\n\n      return this.genSlot('append', 'inner', [\n        this.genIcon(\n          icon,\n          (!this.$listeners['click:clear'] && this.clearIconCb) || this.clearableCallback,\n          false\n        )\n      ])\n    },\n    genCounter () {\n      if (this.counter === false || this.counter == null) return null\n\n      const max = this.counter === true ? this.$attrs.maxlength : this.counter\n\n      return this.$createElement(VCounter, {\n        props: {\n          dark: this.dark,\n          light: this.light,\n          max,\n          value: this.counterValue\n        }\n      })\n    },\n    genDefaultSlot () {\n      return [\n        this.genTextFieldSlot(),\n        this.genClearIcon(),\n        this.genIconSlot(),\n        this.genProgress()\n      ]\n    },\n    genLabel () {\n      if (!this.showLabel) return null\n\n      const data = {\n        props: {\n          absolute: true,\n          color: this.validationState,\n          dark: this.dark,\n          disabled: this.disabled,\n          focused: !this.isSingle && (this.isFocused || !!this.validationState),\n          left: this.labelPosition.left,\n          light: this.light,\n          right: this.labelPosition.right,\n          value: this.labelValue\n        }\n      }\n\n      if (this.$attrs.id) data.props.for = this.$attrs.id\n\n      return this.$createElement(VLabel, data, this.$slots.label || this.label)\n    },\n    genInput () {\n      const listeners = Object.assign({}, this.$listeners)\n      delete listeners['change'] // Change should not be bound externally\n\n      const data = {\n        style: {},\n        domProps: {\n          value: this.maskText(this.lazyValue)\n        },\n        attrs: {\n          'aria-label': (!this.$attrs || !this.$attrs.id) && this.label, // Label `for` will be set if we have an id\n          ...this.$attrs,\n          autofocus: this.autofocus,\n          disabled: this.disabled,\n          readonly: this.readonly,\n          type: this.type\n        },\n        on: Object.assign(listeners, {\n          blur: this.onBlur,\n          input: this.onInput,\n          focus: this.onFocus,\n          keydown: this.onKeyDown\n        }),\n        ref: 'input'\n      }\n\n      if (this.placeholder) data.attrs.placeholder = this.placeholder\n      if (this.mask) data.attrs.maxlength = this.masked.length\n      if (this.browserAutocomplete) data.attrs.autocomplete = this.browserAutocomplete\n\n      return this.$createElement('input', data)\n    },\n    genMessages () {\n      if (this.hideDetails) return null\n\n      return this.$createElement('div', {\n        staticClass: 'v-text-field__details'\n      }, [\n        VInput.methods.genMessages.call(this),\n        this.genCounter()\n      ])\n    },\n    genTextFieldSlot () {\n      return this.$createElement('div', {\n        staticClass: 'v-text-field__slot'\n      }, [\n        this.genLabel(),\n        this.prefix ? this.genAffix('prefix') : null,\n        this.genInput(),\n        this.suffix ? this.genAffix('suffix') : null\n      ])\n    },\n    genAffix (type) {\n      return this.$createElement('div', {\n        'class': `v-text-field__${type}`,\n        ref: type\n      }, this[type])\n    },\n    onBlur (e) {\n      this.isFocused = false\n      // Reset internalChange state\n      // to allow external change\n      // to persist\n      this.internalChange = false\n\n      this.$emit('blur', e)\n    },\n    onClick () {\n      if (this.isFocused || this.disabled) return\n\n      this.$refs.input.focus()\n    },\n    onFocus (e) {\n      if (!this.$refs.input) return\n\n      if (document.activeElement !== this.$refs.input) {\n        return this.$refs.input.focus()\n      }\n\n      if (!this.isFocused) {\n        this.isFocused = true\n        this.$emit('focus', e)\n      }\n    },\n    onInput (e) {\n      this.internalChange = true\n      this.mask && this.resetSelections(e.target)\n      this.internalValue = e.target.value\n      this.badInput = e.target.validity && e.target.validity.badInput\n    },\n    onKeyDown (e) {\n      this.internalChange = true\n\n      if (e.keyCode === keyCodes.enter) this.$emit('change', this.internalValue)\n\n      this.$emit('keydown', e)\n    },\n    onMouseDown (e) {\n      // Prevent input from being blurred\n      if (e.target !== this.$refs.input) {\n        e.preventDefault()\n        e.stopPropagation()\n      }\n\n      VInput.methods.onMouseDown.call(this, e)\n    },\n    onMouseUp (e) {\n      if (this.hasMouseDown) this.focus()\n\n      VInput.methods.onMouseUp.call(this, e)\n    }\n  }\n}\n"",""import VTextField from './VTextField'\nimport VTextarea from '../VTextarea/VTextarea'\nimport rebuildSlots from '../../util/rebuildFunctionalSlots'\nimport dedupeModelListeners from '../../util/dedupeModelListeners'\nimport { deprecate } from '../../util/console'\n\n// TODO: remove this in v2.0\n/* @vue/component */\nconst wrapper = {\n  functional: true,\n\n  $_wrapperFor: VTextField,\n\n  props: {\n    textarea: Boolean,\n    multiLine: Boolean\n  },\n\n  render (h, { props, data, slots, parent }) {\n    dedupeModelListeners(data)\n\n    const children = rebuildSlots(slots(), h)\n\n    if (props.textarea) {\n      deprecate('<v-text-field textarea>', '<v-textarea outline>', wrapper, parent)\n    }\n\n    if (props.multiLine) {\n      deprecate('<v-text-field multi-line>', '<v-textarea>', wrapper, parent)\n    }\n\n    if (props.textarea || props.multiLine) {\n      data.attrs.outline = props.textarea\n      return h(VTextarea, data, children)\n    } else {\n      return h(VTextField, data, children)\n    }\n  }\n}\n\nexport { wrapper as VTextField }\nexport default wrapper\n"",""// Styles\nimport '../../stylus/components/_textarea.styl'\n\n// Extensions\nimport VTextField from '../VTextField/VTextField'\n\nimport { consoleInfo } from '../../util/console'\n\n/* @vue/component */\nexport default {\n  name: 'v-textarea',\n\n  extends: VTextField,\n\n  props: {\n    autoGrow: Boolean,\n    noResize: Boolean,\n    outline: Boolean,\n    rowHeight: {\n      type: [Number, String],\n      default: 24,\n      validator: v => !isNaN(parseFloat(v))\n    },\n    rows: {\n      type: [Number, String],\n      default: 5,\n      validator: v => !isNaN(parseInt(v, 10))\n    }\n  },\n\n  computed: {\n    classes () {\n      return {\n        'v-textarea': true,\n        'v-textarea--auto-grow': this.autoGrow,\n        'v-textarea--no-resize': this.noResizeHandle,\n        ...VTextField.computed.classes.call(this, null)\n      }\n    },\n    dynamicHeight () {\n      return this.autoGrow\n        ? this.inputHeight\n        : 'auto'\n    },\n    isEnclosed () {\n      return this.textarea ||\n        VTextField.computed.isEnclosed.call(this)\n    },\n    noResizeHandle () {\n      return this.noResize || this.autoGrow\n    }\n  },\n\n  watch: {\n    lazyValue () {\n      !this.internalChange && this.autoGrow && this.$nextTick(this.calculateInputHeight)\n    }\n  },\n\n  mounted () {\n    setTimeout(() => {\n      this.autoGrow && this.calculateInputHeight()\n    }, 0)\n\n    // TODO: remove (2.0)\n    if (this.autoGrow && this.noResize) {\n      consoleInfo('\""no-resize\"" is now implied when using \""auto-grow\"", and can be removed', this)\n    }\n  },\n\n  methods: {\n    calculateInputHeight () {\n      const input = this.$refs.input\n      if (input) {\n        input.style.height = 0\n        const height = input.scrollHeight\n        const minHeight = parseInt(this.rows, 10) * parseFloat(this.rowHeight)\n        // This has to be done ASAP, waiting for Vue\n        // to update the DOM causes ugly layout jumping\n        input.style.height = Math.max(minHeight, height) + 'px'\n      }\n    },\n    genInput () {\n      const input = VTextField.methods.genInput.call(this)\n\n      input.tag = 'textarea'\n      delete input.data.attrs.type\n      input.data.attrs.rows = this.rows\n\n      return input\n    },\n    onInput (e) {\n      VTextField.methods.onInput.call(this, e)\n      this.autoGrow && this.calculateInputHeight()\n    },\n    onKeyDown (e) {\n      // Prevents closing of a\n      // dialog when pressing\n      // enter\n      if (this.isFocused &&\n        e.keyCode === 13\n      ) {\n        e.stopPropagation()\n      }\n\n      this.internalChange = true\n      this.$emit('keydown', e)\n    }\n  }\n}\n"",""import VTextarea from './VTextarea'\n\nexport { VTextarea }\nexport default VTextarea\n"",""// Components\nimport VTimePickerTitle from './VTimePickerTitle'\nimport VTimePickerClock from './VTimePickerClock'\n\n// Mixins\nimport Picker from '../../mixins/picker'\n\n// Utils\nimport { createRange } from '../../util/helpers'\nimport pad from '../VDatePicker/util/pad'\n\nconst rangeHours24 = createRange(24)\nconst rangeHours12am = createRange(12)\nconst rangeHours12pm = rangeHours12am.map(v => v + 12)\nconst rangeMinutes = createRange(60)\n\n/* @vue/component */\nexport default {\n  name: 'v-time-picker',\n\n  mixins: [Picker],\n\n  props: {\n    allowedHours: Function,\n    allowedMinutes: Function,\n    format: {\n      type: String,\n      default: 'ampm',\n      validator (val) {\n        return ['ampm', '24hr'].includes(val)\n      }\n    },\n    min: String,\n    max: String,\n    readonly: Boolean,\n    scrollable: Boolean,\n    value: null\n  },\n\n  data () {\n    return {\n      inputHour: null,\n      inputMinute: null,\n      period: 'am',\n      selectingHour: true\n    }\n  },\n\n  computed: {\n    isAllowedHourCb () {\n      if (!this.min && !this.max) return this.allowedHours\n\n      const minHour = this.min ? this.min.split(':')[0] : 0\n      const maxHour = this.max ? this.max.split(':')[0] : 23\n\n      return val => {\n        return val >= minHour * 1 &&\n          val <= maxHour * 1 &&\n          (!this.allowedHours || this.allowedHours(val))\n      }\n    },\n    isAllowedMinuteCb () {\n      const isHourAllowed = !this.allowedHours || this.allowedHours(this.inputHour)\n      if (!this.min && !this.max) {\n        return isHourAllowed ? this.allowedMinutes : () => false\n      }\n\n      const [minHour, minMinute] = this.min ? this.min.split(':') : [0, 0]\n      const [maxHour, maxMinute] = this.max ? this.max.split(':') : [23, 59]\n      const minTime = minHour * 60 + minMinute * 1\n      const maxTime = maxHour * 60 + maxMinute * 1\n\n      return val => {\n        const time = 60 * this.inputHour + val\n        return time >= minTime &&\n          time <= maxTime &&\n          isHourAllowed &&\n          (!this.allowedMinutes || this.allowedMinutes(val))\n      }\n    },\n    isAmPm () {\n      return this.format === 'ampm'\n    }\n  },\n\n  watch: {\n    value: 'setInputData'\n  },\n\n  mounted () {\n    this.setInputData(this.value)\n  },\n\n  methods: {\n    emitValue () {\n      if (this.inputHour != null && this.inputMinute != null) {\n        this.$emit('input', `${pad(this.inputHour)}:${pad(this.inputMinute)}`)\n      }\n    },\n    setPeriod (period) {\n      this.period = period\n      if (this.inputHour != null) {\n        const newHour = this.inputHour + (period === 'am' ? -12 : 12)\n        this.inputHour = this.firstAllowed('hour', newHour)\n        this.emitValue()\n      }\n    },\n    setInputData (value) {\n      if (value == null || value === '') {\n        this.inputHour = null\n        this.inputMinute = null\n        return\n      }\n\n      if (value instanceof Date) {\n        this.inputHour = value.getHours()\n        this.inputMinute = value.getMinutes()\n      } else {\n        const [, hour, minute, , period] = value.trim().toLowerCase().match(/^(\\d+):(\\d+)(:\\d+)?([ap]m)?$/, '') || []\n\n        this.inputHour = period ? this.convert12to24(parseInt(hour, 10), period) : parseInt(hour, 10)\n        this.inputMinute = parseInt(minute, 10)\n      }\n\n      this.period = this.inputHour < 12 ? 'am' : 'pm'\n    },\n    convert24to12 (hour) {\n      return hour ? ((hour - 1) % 12 + 1) : 12\n    },\n    convert12to24 (hour, period) {\n      return hour % 12 + (period === 'pm' ? 12 : 0)\n    },\n    onInput (value) {\n      if (this.selectingHour) {\n        this.inputHour = this.isAmPm ? this.convert12to24(value, this.period) : value\n      } else {\n        this.inputMinute = value\n      }\n      this.emitValue()\n    },\n    onChange () {\n      if (!this.selectingHour) {\n        this.$emit('change', this.value)\n      } else {\n        this.selectingHour = false\n      }\n    },\n    firstAllowed (type, value) {\n      const allowedFn = type === 'hour' ? this.isAllowedHourCb : this.isAllowedMinuteCb\n      if (!allowedFn) return value\n\n      // TODO: clean up\n      const range = type === 'minute'\n        ? rangeMinutes\n        : (this.isAmPm\n          ? (value < 12\n            ? rangeHours12am\n            : rangeHours12pm)\n          : rangeHours24)\n      const first = range.find(v => allowedFn((v + value) % range.length + range[0]))\n      return ((first || 0) + value) % range.length + range[0]\n    },\n    genClock () {\n      return this.$createElement(VTimePickerClock, {\n        props: {\n          allowedValues: this.selectingHour ? this.isAllowedHourCb : this.isAllowedMinuteCb,\n          color: this.color,\n          dark: this.dark,\n          double: this.selectingHour && !this.isAmPm,\n          format: this.selectingHour ? (this.isAmPm ? this.convert24to12 : val => val) : val => pad(val, 2),\n          light: this.light,\n          max: this.selectingHour ? (this.isAmPm && this.period === 'am' ? 11 : 23) : 59,\n          min: this.selectingHour && this.isAmPm && this.period === 'pm' ? 12 : 0,\n          readonly: this.readonly,\n          scrollable: this.scrollable,\n          size: this.width - ((!this.fullWidth && this.landscape) ? 80 : 20),\n          step: this.selectingHour ? 1 : 5,\n          value: this.selectingHour ? this.inputHour : this.inputMinute\n        },\n        on: {\n          input: this.onInput,\n          change: this.onChange\n        },\n        ref: 'clock'\n      })\n    },\n    genPickerBody () {\n      return this.$createElement('div', {\n        staticClass: 'v-time-picker-clock__container',\n        key: this.selectingHour\n      }, [this.genClock()])\n    },\n    genPickerTitle () {\n      return this.$createElement(VTimePickerTitle, {\n        props: {\n          ampm: this.isAmPm,\n          hour: this.inputHour,\n          minute: this.inputMinute,\n          period: this.period,\n          readonly: this.readonly,\n          selectingHour: this.selectingHour\n        },\n        on: {\n          'update:selectingHour': value => (this.selectingHour = value),\n          'update:period': this.setPeriod\n        },\n        ref: 'title',\n        slot: 'title'\n      })\n    }\n  },\n\n  render () {\n    return this.genPicker('v-picker--time')\n  }\n}\n"",""import '../../stylus/components/_time-picker-clock.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n/* @vue/component */\nexport default {\n  name: 'v-time-picker-clock',\n\n  mixins: [\n    Colorable,\n    Themeable\n  ],\n\n  props: {\n    allowedValues: Function,\n    double: Boolean,\n    format: {\n      type: Function,\n      default: val => val\n    },\n    max: {\n      type: Number,\n      required: true\n    },\n    min: {\n      type: Number,\n      required: true\n    },\n    scrollable: Boolean,\n    readonly: Boolean,\n    rotate: {\n      type: Number,\n      default: 0\n    },\n    step: {\n      type: Number,\n      default: 1\n    },\n    value: Number\n  },\n\n  data () {\n    return {\n      inputValue: this.value,\n      isDragging: false,\n      valueOnMouseDown: null,\n      valueOnMouseUp: null\n    }\n  },\n\n  computed: {\n    count () {\n      return this.max - this.min + 1\n    },\n    degreesPerUnit () {\n      return 360 / this.roundCount\n    },\n    degrees () {\n      return this.degreesPerUnit * Math.PI / 180\n    },\n    displayedValue () {\n      return this.value == null ? this.min : this.value\n    },\n    innerRadius () {\n      return 0.62\n    },\n    roundCount () {\n      return this.double ? (this.count / 2) : this.count\n    }\n  },\n\n  watch: {\n    value (value) {\n      this.inputValue = value\n    }\n  },\n\n  methods: {\n    wheel (e) {\n      e.preventDefault()\n\n      const delta = Math.sign(e.wheelDelta || 1)\n      let value = this.displayedValue\n      do {\n        value = value + delta\n        value = (value - this.min + this.count) % this.count + this.min\n      } while (!this.isAllowed(value) && value !== this.displayedValue)\n\n      if (value !== this.displayedValue) {\n        this.update(value)\n      }\n    },\n    isInner (value) {\n      return this.double && (value - this.min >= this.roundCount)\n    },\n    handScale (value) {\n      return this.isInner(value) ? this.innerRadius : 1\n    },\n    isAllowed (value) {\n      return !this.allowedValues || this.allowedValues(value)\n    },\n    genValues () {\n      const children = []\n\n      for (let value = this.min; value <= this.max; value = value + this.step) {\n        const color = value === this.value && (this.color || 'accent')\n        children.push(this.$createElement('span', this.setBackgroundColor(color, {\n          staticClass: 'v-time-picker-clock__item',\n          'class': {\n            'v-time-picker-clock__item--active': value === this.displayedValue,\n            'v-time-picker-clock__item--disabled': !this.isAllowed(value)\n          },\n          style: this.getTransform(value),\n          domProps: { innerHTML: `<span>${this.format(value)}</span>` }\n        })))\n      }\n\n      return children\n    },\n    genHand () {\n      const scale = `scaleY(${this.handScale(this.displayedValue)})`\n      const angle = this.rotate + this.degreesPerUnit * (this.displayedValue - this.min)\n      const color = (this.value != null) && (this.color || 'accent')\n      return this.$createElement('div', this.setBackgroundColor(color, {\n        staticClass: 'v-time-picker-clock__hand',\n        'class': {\n          'v-time-picker-clock__hand--inner': this.isInner(this.value)\n        },\n        style: {\n          transform: `rotate(${angle}deg) ${scale}`\n        }\n      }))\n    },\n    getTransform (i) {\n      const { x, y } = this.getPosition(i)\n      return {\n        left: `${50 + x * 50}%`,\n        top: `${50 + y * 50}%`\n      }\n    },\n    getPosition (value) {\n      const rotateRadians = this.rotate * Math.PI / 180\n      return {\n        x: Math.sin((value - this.min) * this.degrees + rotateRadians) * this.handScale(value),\n        y: -Math.cos((value - this.min) * this.degrees + rotateRadians) * this.handScale(value)\n      }\n    },\n    onMouseDown (e) {\n      e.preventDefault()\n\n      this.valueOnMouseDown = null\n      this.valueOnMouseUp = null\n      this.isDragging = true\n      this.onDragMove(e)\n    },\n    onMouseUp () {\n      this.isDragging = false\n      if (this.valueOnMouseUp !== null && this.isAllowed(this.valueOnMouseUp)) {\n        this.$emit('change', this.valueOnMouseUp)\n      }\n    },\n    onDragMove (e) {\n      e.preventDefault()\n      if (!this.isDragging && e.type !== 'click') return\n\n      const { width, top, left } = this.$refs.clock.getBoundingClientRect()\n      const { clientX, clientY } = 'touches' in e ? e.touches[0] : e\n      const center = { x: width / 2, y: -width / 2 }\n      const coords = { x: clientX - left, y: top - clientY }\n      const handAngle = Math.round(this.angle(center, coords) - this.rotate + 360) % 360\n      // (1 + this.innerRadius) / 4 = radius of the circle equally distant from inner and outer circles\n      const insideClick = this.double && this.euclidean(center, coords) / width < (1 + this.innerRadius) / 4\n      const value = Math.round(handAngle / this.degreesPerUnit) +\n        this.min + (insideClick ? this.roundCount : 0)\n\n      // Necessary to fix edge case when selecting left part of the value(s) at 12 o'clock\n      let newValue\n      if (handAngle >= (360 - this.degreesPerUnit / 2)) {\n        newValue = insideClick ? this.max - this.roundCount + 1 : this.min\n      } else {\n        newValue = value\n      }\n\n      if (this.isAllowed(value)) {\n        if (this.valueOnMouseDown === null) {\n          this.valueOnMouseDown = newValue\n        }\n        this.valueOnMouseUp = newValue\n        this.update(newValue)\n      }\n    },\n    update (value) {\n      if (this.inputValue !== value) {\n        this.inputValue = value\n        this.$emit('input', value)\n      }\n    },\n    euclidean (p0, p1) {\n      const dx = p1.x - p0.x\n      const dy = p1.y - p0.y\n\n      return Math.sqrt(dx * dx + dy * dy)\n    },\n    angle (center, p1) {\n      const value = 2 * Math.atan2(p1.y - center.y - this.euclidean(center, p1), p1.x - center.x)\n      return Math.abs(value * 180 / Math.PI)\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'v-time-picker-clock',\n      class: {\n        'v-time-picker-clock--indeterminate': this.value == null,\n        ...this.themeClasses\n      },\n      on: this.readonly ? undefined : {\n        mousedown: this.onMouseDown,\n        mouseup: this.onMouseUp,\n        mouseleave: () => (this.isDragging && this.onMouseUp()),\n        touchstart: this.onMouseDown,\n        touchend: this.onMouseUp,\n        mousemove: this.onDragMove,\n        touchmove: this.onDragMove\n      },\n      ref: 'clock'\n    }\n\n    !this.readonly && this.scrollable && (data.on.wheel = this.wheel)\n\n    return h('div', data, [\n      h('div', {\n        staticClass: 'v-time-picker-clock__inner'\n      }, [\n        this.genHand(),\n        this.genValues()\n      ])\n    ])\n  }\n}\n"",""import '../../stylus/components/_time-picker-title.styl'\n\n// Mixins\nimport PickerButton from '../../mixins/picker-button'\n\n// Utils\nimport { pad } from '../VDatePicker/util'\n\n/* @vue/component */\nexport default {\n  name: 'v-time-picker-title',\n\n  mixins: [PickerButton],\n\n  props: {\n    ampm: Boolean,\n    hour: Number,\n    minute: Number,\n    period: {\n      type: String,\n      validator: period => period === 'am' || period === 'pm'\n    },\n    readonly: Boolean,\n    selectingHour: Boolean\n  },\n\n  methods: {\n    genTime () {\n      let hour = this.hour\n      if (this.ampm) {\n        hour = hour ? ((hour - 1) % 12 + 1) : 12\n      }\n\n      const displayedHour = this.hour == null ? '--' : this.ampm ? hour : pad(hour)\n      const displayedMinute = this.minute == null ? '--' : pad(this.minute)\n\n      return this.$createElement('div', {\n        'class': 'v-time-picker-title__time'\n      }, [\n        this.genPickerButton('selectingHour', true, displayedHour),\n        this.$createElement('span', ':'),\n        this.genPickerButton('selectingHour', false, displayedMinute)\n      ])\n    },\n    genAmPm () {\n      return this.$createElement('div', {\n        staticClass: 'v-time-picker-title__ampm'\n      }, [\n        this.genPickerButton('period', 'am', 'am', this.readonly),\n        this.genPickerButton('period', 'pm', 'pm', this.readonly)\n      ])\n    }\n  },\n\n  render (h) {\n    return h('div', {\n      staticClass: 'v-time-picker-title'\n    }, [\n      this.genTime(),\n      this.ampm ? this.genAmPm() : null\n    ])\n  }\n}\n"",""import VTimePicker from './VTimePicker'\nimport VTimePickerClock from './VTimePickerClock'\nimport VTimePickerTitle from './VTimePickerTitle'\n\nexport { VTimePicker, VTimePickerClock, VTimePickerTitle }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VTimePicker,\n    VTimePickerClock,\n    VTimePickerTitle\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_timeline.styl'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\nexport default mixins(\n  Themeable\n/* @vue/component */\n).extend({\n  name: 'v-timeline',\n\n  props: {\n    alignTop: Boolean,\n    dense: Boolean\n  },\n\n  computed: {\n    classes (): {} {\n      return {\n        'v-timeline--align-top': this.alignTop,\n        'v-timeline--dense': this.dense,\n        ...this.themeClasses\n      }\n    }\n  },\n\n  render (h): VNode {\n    return h('div', {\n      staticClass: 'v-timeline',\n      'class': this.classes\n    }, this.$slots.default)\n  }\n})\n"",""// Types\nimport mixins from '../../util/mixins'\nimport { VNode, VNodeData } from 'vue'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport Colorable from '../../mixins/colorable'\n\nexport default mixins(\n  Colorable,\n  Themeable\n/* @vue/component */\n).extend({\n  name: 'v-timeline-item',\n\n  props: {\n    color: {\n      type: String,\n      default: 'primary'\n    },\n    fillDot: Boolean,\n    hideDot: Boolean,\n    icon: String,\n    iconColor: String,\n    large: Boolean,\n    left: Boolean,\n    right: Boolean,\n    small: Boolean\n  },\n\n  computed: {\n    hasIcon (): boolean {\n      return !!this.icon || !!this.$slots.icon\n    }\n  },\n\n  methods: {\n    genBody () {\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__body'\n      }, this.$slots.default)\n    },\n    genIcon (): VNode | VNode[] {\n      if (this.$slots.icon) {\n        return this.$slots.icon\n      }\n\n      return this.$createElement(VIcon, {\n        props: {\n          color: this.iconColor,\n          dark: !this.theme.isDark,\n          small: this.small\n        }\n      }, this.icon)\n    },\n    genInnerDot () {\n      const children = []\n\n      this.hasIcon && children.push(this.genIcon())\n\n      const data: VNodeData = this.setBackgroundColor(this.color)\n\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__inner-dot',\n        ...data\n      }, children)\n    },\n    genDot () {\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__dot',\n        class: {\n          'v-timeline-item__dot--small': this.small,\n          'v-timeline-item__dot--large': this.large\n        }\n      }, [this.genInnerDot()])\n    },\n    genOpposite () {\n      return this.$createElement('div', {\n        staticClass: 'v-timeline-item__opposite'\n      }, [this.$slots.opposite])\n    }\n  },\n\n  render (h): VNode {\n    const children = [this.genBody()]\n\n    if (!this.hideDot) children.unshift(this.genDot())\n    if (this.$slots.opposite) children.push(this.genOpposite())\n\n    return h('div', {\n      staticClass: 'v-timeline-item',\n      class: {\n        'v-timeline-item--fill-dot': this.fillDot,\n        'v-timeline-item--left': this.left,\n        'v-timeline-item--right': this.right,\n        ...this.themeClasses\n      }\n    }, children)\n  }\n})\n"",""import VTimeline from './VTimeline'\nimport VTimelineItem from './VTimelineItem'\n\nexport { VTimeline, VTimelineItem }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VTimeline,\n    VTimelineItem\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_toolbar.styl'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\nimport SSRBootable from '../../mixins/ssr-bootable'\n\n// Directives\nimport Scroll from '../../directives/scroll'\nimport { deprecate } from '../../util/console'\n\n/* @vue/component */\nexport default {\n  name: 'v-toolbar',\n\n  directives: { Scroll },\n\n  mixins: [\n    Applicationable('top', [\n      'clippedLeft',\n      'clippedRight',\n      'computedHeight',\n      'invertedScroll',\n      'manualScroll'\n    ]),\n    Colorable,\n    SSRBootable,\n    Themeable\n  ],\n\n  props: {\n    card: Boolean,\n    clippedLeft: Boolean,\n    clippedRight: Boolean,\n    dense: Boolean,\n    extended: Boolean,\n    extensionHeight: {\n      type: [Number, String],\n      validator: v => !isNaN(parseInt(v))\n    },\n    flat: Boolean,\n    floating: Boolean,\n    height: {\n      type: [Number, String],\n      validator: v => !isNaN(parseInt(v))\n    },\n    invertedScroll: Boolean,\n    manualScroll: Boolean,\n    prominent: Boolean,\n    scrollOffScreen: Boolean,\n    /* @deprecated */\n    scrollToolbarOffScreen: Boolean,\n    scrollTarget: String,\n    scrollThreshold: {\n      type: Number,\n      default: 300\n    },\n    tabs: Boolean\n  },\n\n  data: () => ({\n    activeTimeout: null,\n    currentScroll: 0,\n    heights: {\n      mobileLandscape: 48,\n      mobile: 56,\n      desktop: 64,\n      dense: 48\n    },\n    isActive: true,\n    isExtended: false,\n    isScrollingUp: false,\n    previousScroll: null,\n    previousScrollDirection: null,\n    savedScroll: 0,\n    target: null\n  }),\n\n  computed: {\n    canScroll () {\n      // TODO: remove\n      if (this.scrollToolbarOffScreen) {\n        deprecate('scrollToolbarOffScreen', 'scrollOffScreen', this)\n\n        return true\n      }\n\n      return this.scrollOffScreen || this.invertedScroll\n    },\n    computedContentHeight () {\n      if (this.height) return parseInt(this.height)\n      if (this.dense) return this.heights.dense\n\n      if (this.prominent ||\n        this.$vuetify.breakpoint.mdAndUp\n      ) return this.heights.desktop\n\n      if (this.$vuetify.breakpoint.smAndDown &&\n        this.$vuetify.breakpoint.width >\n        this.$vuetify.breakpoint.height\n      ) return this.heights.mobileLandscape\n\n      return this.heights.mobile\n    },\n    computedExtensionHeight () {\n      if (this.tabs) return 48\n      if (this.extensionHeight) return parseInt(this.extensionHeight)\n\n      return this.computedContentHeight\n    },\n    computedHeight () {\n      if (!this.isExtended) return this.computedContentHeight\n\n      return this.computedContentHeight + this.computedExtensionHeight\n    },\n    computedMarginTop () {\n      if (!this.app) return 0\n\n      return this.$vuetify.application.bar\n    },\n    classes () {\n      return {\n        'v-toolbar': true,\n        'elevation-0': this.flat || (\n          !this.isActive &&\n          !this.tabs &&\n          this.canScroll\n        ),\n        'v-toolbar--absolute': this.absolute,\n        'v-toolbar--card': this.card,\n        'v-toolbar--clipped': this.clippedLeft || this.clippedRight,\n        'v-toolbar--dense': this.dense,\n        'v-toolbar--extended': this.isExtended,\n        'v-toolbar--fixed': !this.absolute && (this.app || this.fixed),\n        'v-toolbar--floating': this.floating,\n        'v-toolbar--prominent': this.prominent,\n        ...this.themeClasses\n      }\n    },\n    computedPaddingLeft () {\n      if (!this.app || this.clippedLeft) return 0\n\n      return this.$vuetify.application.left\n    },\n    computedPaddingRight () {\n      if (!this.app || this.clippedRight) return 0\n\n      return this.$vuetify.application.right\n    },\n    computedTransform () {\n      return !this.isActive\n        ? this.canScroll\n          ? -this.computedContentHeight\n          : -this.computedHeight\n        : 0\n    },\n    currentThreshold () {\n      return Math.abs(this.currentScroll - this.savedScroll)\n    },\n    styles () {\n      return {\n        marginTop: `${this.computedMarginTop}px`,\n        paddingRight: `${this.computedPaddingRight}px`,\n        paddingLeft: `${this.computedPaddingLeft}px`,\n        transform: `translateY(${this.computedTransform}px)`\n      }\n    }\n  },\n\n  watch: {\n    currentThreshold (val) {\n      if (this.invertedScroll) {\n        return this.isActive = this.currentScroll > this.scrollThreshold\n      }\n\n      if (val < this.scrollThreshold ||\n        !this.isBooted\n      ) return\n\n      this.isActive = this.isScrollingUp\n      this.savedScroll = this.currentScroll\n    },\n    isActive () {\n      this.savedScroll = 0\n    },\n    invertedScroll (val) {\n      this.isActive = !val\n    },\n    manualScroll (val) {\n      this.isActive = !val\n    },\n    isScrollingUp () {\n      this.savedScroll = this.savedScroll || this.currentScroll\n    }\n  },\n\n  created () {\n    if (this.invertedScroll ||\n      this.manualScroll\n    ) this.isActive = false\n  },\n\n  mounted () {\n    if (this.scrollTarget) {\n      this.target = document.querySelector(this.scrollTarget)\n    }\n  },\n\n  methods: {\n    onScroll () {\n      if (!this.canScroll ||\n        this.manualScroll ||\n        typeof window === 'undefined'\n      ) return\n\n      const target = this.target || window\n\n      this.currentScroll = this.scrollTarget\n        ? target.scrollTop\n        : target.pageYOffset || document.documentElement.scrollTop\n\n      this.isScrollingUp = this.currentScroll < this.previousScroll\n\n      this.previousScroll = this.currentScroll\n    },\n    /**\n     * Update the application layout\n     *\n     * @return {number}\n     */\n    updateApplication () {\n      return this.invertedScroll || this.manualScroll\n        ? 0\n        : this.computedHeight\n    }\n  },\n\n  render (h) {\n    this.isExtended = this.extended || !!this.$slots.extension\n\n    const children = []\n    const data = this.setBackgroundColor(this.color, {\n      'class': this.classes,\n      style: this.styles,\n      on: this.$listeners\n    })\n\n    data.directives = [{\n      arg: this.scrollTarget,\n      name: 'scroll',\n      value: this.onScroll\n    }]\n\n    children.push(h('div', {\n      staticClass: 'v-toolbar__content',\n      style: { height: `${this.computedContentHeight}px` },\n      ref: 'content'\n    }, this.$slots.default))\n\n    if (this.isExtended) {\n      children.push(h('div', {\n        staticClass: 'v-toolbar__extension',\n        style: { height: `${this.computedExtensionHeight}px` }\n      }, this.$slots.extension))\n    }\n\n    return h('nav', data, children)\n  }\n}\n"",""import VBtn from '../../components/VBtn'\nimport VIcon from '../../components/VIcon'\n\n/* @vue/component */\nexport default {\n  name: 'v-toolbar-side-icon',\n\n  functional: true,\n\n  render (h, { slots, listeners, props, data }) {\n    const classes = data.staticClass\n      ? `${data.staticClass} v-toolbar__side-icon`\n      : 'v-toolbar__side-icon'\n\n    const d = Object.assign(data, {\n      staticClass: classes,\n      props: Object.assign(props, {\n        icon: true\n      }),\n      on: listeners\n    })\n\n    const defaultSlot = slots().default\n\n    return h(VBtn, d, defaultSlot || [h(VIcon, '$vuetify.icons.menu')])\n  }\n}\n"",""import { createSimpleFunctional } from '../../util/helpers'\n\nimport VToolbar from './VToolbar'\nimport VToolbarSideIcon from './VToolbarSideIcon'\n\nconst VToolbarTitle = createSimpleFunctional('v-toolbar__title')\nconst VToolbarItems = createSimpleFunctional('v-toolbar__items')\n\nexport { VToolbar, VToolbarSideIcon, VToolbarTitle, VToolbarItems }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VToolbar,\n    VToolbarItems,\n    VToolbarTitle,\n    VToolbarSideIcon\n  }\n}\n"",""import '../../stylus/components/_tooltips.styl'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'v-tooltip',\n\n  mixins: [Colorable, Delayable, Dependent, Detachable, Menuable, Toggleable],\n\n  props: {\n    closeDelay: {\n      type: [Number, String],\n      default: 200\n    },\n    debounce: {\n      type: [Number, String],\n      default: 0\n    },\n    disabled: Boolean,\n    fixed: {\n      type: Boolean,\n      default: true\n    },\n    openDelay: {\n      type: [Number, String],\n      default: 200\n    },\n    tag: {\n      type: String,\n      default: 'span'\n    },\n    transition: String,\n    zIndex: {\n      default: null\n    }\n  },\n\n  data: () => ({\n    calculatedMinWidth: 0,\n    closeDependents: false\n  }),\n\n  computed: {\n    calculatedLeft () {\n      const { activator, content } = this.dimensions\n      const unknown = !this.bottom && !this.left && !this.top && !this.right\n      let left = 0\n\n      if (this.top || this.bottom || unknown) {\n        left = (\n          activator.left +\n          (activator.width / 2) -\n          (content.width / 2)\n        )\n      } else if (this.left || this.right) {\n        left = (\n          activator.left +\n          (this.right ? activator.width : -content.width) +\n          (this.right ? 10 : -10)\n        )\n      }\n\n      if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n      if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n      return `${this.calcXOverflow(left)}px`\n    },\n    calculatedTop () {\n      const { activator, content } = this.dimensions\n      let top = 0\n\n      if (this.top || this.bottom) {\n        top = (\n          activator.top +\n          (this.bottom ? activator.height : -content.height) +\n          (this.bottom ? 10 : -10)\n        )\n      } else if (this.left || this.right) {\n        top = (\n          activator.top +\n          (activator.height / 2) -\n          (content.height / 2)\n        )\n      }\n\n      if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n      if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n      return `${this.calcYOverflow(top + this.pageYOffset)}px`\n    },\n    classes () {\n      return {\n        'v-tooltip--top': this.top,\n        'v-tooltip--right': this.right,\n        'v-tooltip--bottom': this.bottom,\n        'v-tooltip--left': this.left\n      }\n    },\n    computedTransition () {\n      if (this.transition) return this.transition\n      if (this.top) return 'slide-y-reverse-transition'\n      if (this.right) return 'slide-x-transition'\n      if (this.bottom) return 'slide-y-transition'\n      if (this.left) return 'slide-x-reverse-transition'\n    },\n    offsetY () {\n      return this.top || this.bottom\n    },\n    offsetX () {\n      return this.left || this.right\n    },\n    styles () {\n      return {\n        left: this.calculatedLeft,\n        maxWidth: convertToUnit(this.maxWidth),\n        opacity: this.isActive ? 0.9 : 0,\n        top: this.calculatedTop,\n        zIndex: this.zIndex || this.activeZIndex\n      }\n    }\n  },\n\n  mounted () {\n    this.value && this.callActivate()\n  },\n\n  methods: {\n    activate () {\n      // Update coordinates and dimensions of menu\n      // and its activator\n      this.updateDimensions()\n      // Start the transition\n      requestAnimationFrame(this.startTransition)\n    }\n  },\n\n  render (h) {\n    const tooltip = h('div', this.setBackgroundColor(this.color, {\n      staticClass: 'v-tooltip__content',\n      'class': {\n        [this.contentClass]: true,\n        'menuable__content__active': this.isActive\n      },\n      style: this.styles,\n      attrs: this.getScopeIdAttrs(),\n      directives: [{\n        name: 'show',\n        value: this.isContentActive\n      }],\n      ref: 'content'\n    }), this.showLazyContent(this.$slots.default))\n\n    return h(this.tag, {\n      staticClass: 'v-tooltip',\n      'class': this.classes\n    }, [\n      h('transition', {\n        props: {\n          name: this.computedTransition\n        }\n      }, [tooltip]),\n      h('span', {\n        on: this.disabled ? {} : {\n          mouseenter: () => {\n            this.runDelay('open', () => (this.isActive = true))\n          },\n          mouseleave: () => {\n            this.runDelay('close', () => (this.isActive = false))\n          }\n        },\n        ref: 'activator'\n      }, this.$slots.activator)\n    ])\n  }\n}\n"",""import VTooltip from './VTooltip'\n\nexport { VTooltip }\nexport default VTooltip\n"",""// Styles\nimport '../../stylus/components/_treeview.styl'\n\n// Types\nimport { VNode, VNodeChildrenArrayContents } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport VTreeviewNode, { VTreeviewNodeProps } from './VTreeviewNode'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Utils\nimport { getObjectValueByPath, deepEqual } from '../../util/helpers'\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\n\ntype VTreeviewNodeInstance = InstanceType<typeof VTreeviewNode>\n\ntype NodeCache = Set<string | number>\ntype NodeArray = (string | number)[]\n\ntype NodeState = {\n  parent: number | string | null\n  children: (number | string)[]\n  vnode: VTreeviewNodeInstance | null\n  isActive: boolean\n  isSelected: boolean\n  isIndeterminate: boolean\n  isOpen: boolean\n}\n\nfunction ston (s: string | number) {\n  const n = Number(s)\n  return !isNaN(n) ? n : s\n}\n\nexport default mixins(\n  RegistrableProvide('treeview'),\n  Themeable\n  /* @vue/component */\n).extend({\n  name: 'v-treeview',\n\n  provide (): object {\n    return { treeview: this }\n  },\n\n  props: {\n    active: {\n      type: Array,\n      default: () => ([])\n    } as PropValidator<NodeArray>,\n    items: {\n      type: Array,\n      default: () => ([])\n    } as PropValidator<any[]>,\n    hoverable: Boolean,\n    multipleActive: Boolean,\n    open: {\n      type: Array,\n      default: () => ([])\n    } as PropValidator<NodeArray>,\n    openAll: Boolean,\n    value: {\n      type: Array,\n      default: () => ([])\n    } as PropValidator<NodeArray>,\n    ...VTreeviewNodeProps\n  },\n\n  data: () => ({\n    nodes: {} as Record<string | number, NodeState>,\n    selectedCache: new Set() as NodeCache,\n    activeCache: new Set() as NodeCache,\n    openCache: new Set() as NodeCache\n  }),\n\n  watch: {\n    items: {\n      handler () {\n        // We only care if nodes are removed or added\n        if (Object.keys(this.nodes).length === this.countItems(this.items)) return\n\n        const oldSelectedCache = [...this.selectedCache]\n        this.selectedCache = new Set()\n        this.activeCache = new Set()\n        this.openCache = new Set()\n        this.buildTree(this.items)\n\n        // Only emit selected if selection has changed\n        // as a result of items changing. This fixes a\n        // potential double emit when selecting a node\n        // with dynamic children\n        if (!deepEqual(oldSelectedCache, [...this.selectedCache])) this.emitSelected()\n      },\n      deep: true\n    },\n    active (value: (string | number)[]) {\n      const old = [...this.activeCache]\n      if (!value || deepEqual(old, value)) return\n\n      old.forEach(key => this.updateActive(key, false))\n      value.forEach(key => this.updateActive(key, true))\n      this.emitActive()\n    },\n    value (value: (string | number)[]) {\n      const old = [...this.selectedCache]\n      if (!value || deepEqual(old, value)) return\n\n      old.forEach(key => this.updateSelected(key, false))\n      value.forEach(key => this.updateSelected(key, true))\n      this.emitSelected()\n    },\n    open (value: (string | number)[]) {\n      const old = [...this.openCache]\n      if (deepEqual(old, value)) return\n\n      old.forEach(key => this.updateOpen(key, false))\n      value.forEach(key => this.updateOpen(key, true))\n      this.emitOpen()\n    }\n  },\n\n  created () {\n    this.buildTree(this.items)\n    this.value.forEach(key => this.updateSelected(key, true))\n    this.emitSelected()\n    this.active.forEach(key => this.updateActive(key, true))\n    this.emitActive()\n  },\n\n  mounted () {\n    // Save the developer from themselves\n    if (this.$slots.prepend || this.$slots.append) {\n      consoleWarn('The prepend and append slots require a slot-scope attribute', this)\n    }\n\n    if (this.openAll) {\n      Object.keys(this.nodes).forEach(key => this.updateOpen(ston(key), true))\n    } else {\n      this.open.forEach(key => this.updateOpen(key, true))\n    }\n\n    this.emitOpen()\n  },\n\n  methods: {\n    buildTree (items: any[], parent: (string | number | null) = null) {\n      for (let i = 0; i < items.length; i++) {\n        const item = items[i]\n        const key = getObjectValueByPath(item, this.itemKey)\n        const children = getObjectValueByPath(item, this.itemChildren, [])\n        const oldNode = this.nodes.hasOwnProperty(key) ? this.nodes[key] : {\n          isSelected: false, isIndeterminate: false, isActive: false, isOpen: false, vnode: null\n        } as NodeState\n\n        const node: any = {\n          vnode: oldNode.vnode,\n          parent,\n          children: children.map((c: any) => getObjectValueByPath(c, this.itemKey))\n        }\n\n        this.buildTree(children, key)\n\n        // This fixed bug with dynamic children resetting selected parent state\n        if (!this.nodes.hasOwnProperty(key) && parent !== null && this.nodes.hasOwnProperty(parent)) {\n          node.isSelected = this.nodes[parent].isSelected\n          node.isIndeterminate = this.nodes[parent].isIndeterminate\n        } else {\n          node.isSelected = oldNode.isSelected\n          node.isIndeterminate = oldNode.isIndeterminate\n        }\n\n        node.isActive = oldNode.isActive\n        node.isOpen = oldNode.isOpen\n\n        this.nodes[key] = !children.length ? node : this.calculateState(node, this.nodes)\n\n        // Don't forget to rebuild cache\n        if (this.nodes[key].isSelected) this.selectedCache.add(key)\n        if (this.nodes[key].isActive) this.activeCache.add(key)\n        if (this.nodes[key].isOpen) this.openCache.add(key)\n\n        this.updateVnodeState(key)\n      }\n    },\n    countItems (items: any[]) {\n      let count = 0\n      for (let i = 0; i < items.length; i++) {\n        const item = items[i]\n        count += 1\n        count += item.children ? this.countItems(item.children) : 0\n      }\n\n      return count\n    },\n    calculateState (node: NodeState, state: Record<string | number, NodeState>) {\n      const counts = node.children.reduce((counts: number[], child: string | number) => {\n        counts[0] += +Boolean(state[child].isSelected)\n        counts[1] += +Boolean(state[child].isIndeterminate)\n        return counts\n      }, [0, 0])\n\n      node.isSelected = !!node.children.length && counts[0] === node.children.length\n      node.isIndeterminate = !node.isSelected && (counts[0] > 0 || counts[1] > 0)\n\n      return node\n    },\n    emitOpen () {\n      this.$emit('update:open', [...this.openCache])\n    },\n    emitSelected () {\n      this.$emit('input', [...this.selectedCache])\n    },\n    emitActive () {\n      this.$emit('update:active', [...this.activeCache])\n    },\n    getDescendants (key: string | number, descendants: NodeArray = []) {\n      const children = this.nodes[key].children\n\n      descendants.push(...children)\n\n      for (let i = 0; i < children.length; i++) {\n        descendants = this.getDescendants(children[i], descendants)\n      }\n\n      return descendants\n    },\n    getParents (key: string | number) {\n      let parent = this.nodes[key].parent\n\n      const parents = []\n      while (parent !== null) {\n        parents.push(parent)\n        parent = this.nodes[parent].parent\n      }\n\n      return parents\n    },\n    register (node: VTreeviewNodeInstance) {\n      const key = getObjectValueByPath(node.item, this.itemKey)\n      this.nodes[key].vnode = node\n\n      this.updateVnodeState(key)\n    },\n    unregister (node: VTreeviewNodeInstance) {\n      const key = getObjectValueByPath(node.item, this.itemKey)\n      this.nodes[key].vnode = null\n    },\n    updateActive (key: string | number, isActive: boolean) {\n      if (!this.nodes.hasOwnProperty(key)) return\n\n      if (!this.multipleActive) {\n        this.activeCache.forEach(active => {\n          this.nodes[active].isActive = false\n          this.updateVnodeState(active)\n          this.activeCache.delete(active)\n        })\n      }\n\n      const node = this.nodes[key]\n      if (!node) return\n\n      if (isActive) this.activeCache.add(key)\n      else this.activeCache.delete(key)\n\n      node.isActive = isActive\n\n      this.updateVnodeState(key)\n    },\n    updateSelected (key: string | number, isSelected: boolean) {\n      if (!this.nodes.hasOwnProperty(key)) return\n\n      const changed: Record<string | number, boolean> = {}\n\n      const descendants = [key, ...this.getDescendants(key)]\n      descendants.forEach(descendant => {\n        this.nodes[descendant].isSelected = isSelected\n        this.nodes[descendant].isIndeterminate = false\n        changed[descendant] = isSelected\n      })\n\n      const parents = this.getParents(key)\n      parents.forEach(parent => {\n        this.nodes[parent] = this.calculateState(this.nodes[parent], this.nodes)\n        changed[parent] = this.nodes[parent].isSelected\n      })\n\n      const all = [key, ...descendants, ...parents]\n      all.forEach(this.updateVnodeState)\n\n      Object.keys(changed).forEach(k => {\n        changed[k] === true ? this.selectedCache.add(ston(k)) : this.selectedCache.delete(ston(k))\n      })\n    },\n    updateOpen (key: string | number, isOpen: boolean) {\n      if (!this.nodes.hasOwnProperty(key)) return\n\n      const node = this.nodes[key]\n\n      if (node.children && !node.children.length && node.vnode && !node.vnode.hasLoaded) {\n        node.vnode.checkChildren().then(() => this.updateOpen(key, isOpen))\n      } else {\n        node.isOpen = isOpen\n\n        node.isOpen ? this.openCache.add(key) : this.openCache.delete(key)\n\n        this.updateVnodeState(key)\n      }\n    },\n    updateVnodeState (key: string | number) {\n      const node = this.nodes[key]\n\n      if (node && node.vnode) {\n        node.vnode.isSelected = node.isSelected\n        node.vnode.isIndeterminate = node.isIndeterminate\n        node.vnode.isActive = node.isActive\n        node.vnode.isOpen = node.isOpen\n      }\n    }\n  },\n\n  render (h): VNode {\n    const children: VNodeChildrenArrayContents = this.items.length\n      ? this.items.map(VTreeviewNode.options.methods.genChild.bind(this))\n      /* istanbul ignore next */\n      : this.$slots.default\n\n    return h('div', {\n      staticClass: 'v-treeview',\n      class: {\n        'v-treeview--hoverable': this.hoverable,\n        ...this.themeClasses\n      }\n    }, children)\n  }\n})\n"",""// Components\nimport { VExpandTransition } from '../transitions'\nimport { VIcon } from '../VIcon'\nimport VTreeview from './VTreeview'\nimport VTreeviewNode from './VTreeviewNode'\n\n// Mixins\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Utils\nimport mixins from '../../util/mixins'\nimport { getObjectValueByPath } from '../../util/helpers'\nimport { PropValidator } from 'vue/types/options'\n\n// Types\nimport Vue, { VNode } from 'vue'\n\ntype VTreeViewInstance = InstanceType<typeof VTreeview>\n\ninterface options extends Vue {\n  treeview: VTreeViewInstance\n}\n\nexport const VTreeviewNodeProps = {\n  activatable: Boolean,\n  activeClass: {\n    type: String,\n    default: 'v-treeview-node--active'\n  },\n  selectable: Boolean,\n  selectedColor: {\n    type: String,\n    default: 'accent'\n  },\n  indeterminateIcon: {\n    type: String,\n    default: '$vuetify.icons.checkboxIndeterminate'\n  },\n  onIcon: {\n    type: String,\n    default: '$vuetify.icons.checkboxOn'\n  },\n  offIcon: {\n    type: String,\n    default: '$vuetify.icons.checkboxOff'\n  },\n  expandIcon: {\n    type: String,\n    default: '$vuetify.icons.subgroup'\n  },\n  loadingIcon: {\n    type: String,\n    default: '$vuetify.icons.loading'\n  },\n  itemKey: {\n    type: String,\n    default: 'id'\n  },\n  itemText: {\n    type: String,\n    default: 'name'\n  },\n  itemChildren: {\n    type: String,\n    default: 'children'\n  },\n  loadChildren: Function as PropValidator<(item: any) => Promise<void>>,\n  openOnClick: Boolean,\n  transition: Boolean\n}\n\nexport default mixins<options>(\n  RegistrableInject('treeview')\n  /* @vue/component */\n).extend({\n  name: 'v-treeview-node',\n\n  inject: {\n    treeview: {\n      default: null\n    }\n  },\n\n  props: {\n    item: {\n      type: Object,\n      default: () => null\n    },\n    ...VTreeviewNodeProps\n  },\n\n  data: () => ({\n    isOpen: false, // Node is open/expanded\n    isSelected: false, // Node is selected (checkbox)\n    isIndeterminate: false, // Node has at least one selected child\n    isActive: false, // Node is selected (row)\n    isLoading: false,\n    hasLoaded: false\n  }),\n\n  computed: {\n    key (): string {\n      return getObjectValueByPath(this.item, this.itemKey)\n    },\n    children (): any[] | null {\n      return getObjectValueByPath(this.item, this.itemChildren)\n    },\n    text (): string {\n      return getObjectValueByPath(this.item, this.itemText)\n    },\n    scopedProps (): object {\n      return {\n        item: this.item,\n        leaf: !this.children,\n        selected: this.isSelected,\n        indeterminate: this.isIndeterminate,\n        active: this.isActive,\n        open: this.isOpen\n      }\n    },\n    computedIcon (): string {\n      if (this.isIndeterminate) return this.indeterminateIcon\n      else if (this.isSelected) return this.onIcon\n      else return this.offIcon\n    },\n    hasChildren (): boolean {\n      return !!this.children && (!!this.children.length || !!this.loadChildren)\n    }\n  },\n\n  created () {\n    this.treeview.register(this)\n  },\n\n  beforeDestroy () {\n    this.treeview.unregister(this)\n  },\n\n  methods: {\n    checkChildren (): Promise<void> {\n      return new Promise<void>(resolve => {\n        // TODO: Potential issue with always trying\n        // to load children if response is empty?\n        if (!this.children || this.children.length || !this.loadChildren || this.hasLoaded) return resolve()\n\n        this.isLoading = true\n        resolve(this.loadChildren(this.item))\n      }).then(() => {\n        this.isLoading = false\n        this.hasLoaded = true\n      })\n    },\n    open () {\n      this.isOpen = !this.isOpen\n      this.treeview.updateOpen(this.key, this.isOpen)\n      this.treeview.emitOpen()\n    },\n    genLabel () {\n      return this.$createElement('label', {\n        slot: 'label',\n        staticClass: 'v-treeview-node__label'\n      }, [this.text])\n    },\n    genContent () {\n      const children = [\n        this.$scopedSlots.prepend && this.$scopedSlots.prepend(this.scopedProps),\n        this.genLabel(),\n        this.$scopedSlots.append && this.$scopedSlots.append(this.scopedProps)\n      ]\n\n      return this.$createElement('div', {\n        staticClass: 'v-treeview-node__content'\n      }, children)\n    },\n    genToggle () {\n      return this.$createElement(VIcon, {\n        staticClass: 'v-treeview-node__toggle',\n        class: {\n          'v-treeview-node__toggle--open': this.isOpen,\n          'v-treeview-node__toggle--loading': this.isLoading\n        },\n        slot: 'prepend',\n        on: {\n          click: (e: MouseEvent) => {\n            e.stopPropagation()\n\n            if (this.isLoading) return\n\n            this.checkChildren().then(() => this.open())\n          }\n        }\n      }, [this.isLoading ? this.loadingIcon : this.expandIcon])\n    },\n    genCheckbox () {\n      return this.$createElement(VIcon, {\n        staticClass: 'v-treeview-node__checkbox',\n        props: {\n          color: this.isSelected ? this.selectedColor : undefined\n        },\n        on: {\n          click: (e: MouseEvent) => {\n            e.stopPropagation()\n\n            if (this.isLoading) return\n\n            this.checkChildren().then(() => {\n              // We nextTick here so that items watch in VTreeview has a chance to run first\n              this.$nextTick(() => {\n                this.isSelected = !this.isSelected\n                this.isIndeterminate = false\n\n                this.treeview.updateSelected(this.key, this.isSelected)\n                this.treeview.emitSelected()\n              })\n            })\n          }\n        }\n      }, [this.computedIcon])\n    },\n    genNode (): VNode {\n      const children = [this.genContent()]\n\n      if (this.selectable) children.unshift(this.genCheckbox())\n      if (this.hasChildren) children.unshift(this.genToggle())\n\n      return this.$createElement('div', {\n        staticClass: 'v-treeview-node__root',\n        on: {\n          click: () => {\n            if (this.openOnClick && this.children) {\n              this.open()\n            } else if (this.activatable) {\n              this.isActive = !this.isActive\n              this.treeview.updateActive(this.key, this.isActive)\n              this.treeview.emitActive()\n            }\n          }\n        }\n      }, children)\n    },\n    genChild (item: any): VNode {\n      return this.$createElement(VTreeviewNode, {\n        key: getObjectValueByPath(item, this.itemKey),\n        props: {\n          activatable: this.activatable,\n          activeClass: this.activeClass,\n          item,\n          selectable: this.selectable,\n          selectedColor: this.selectedColor,\n          expandIcon: this.expandIcon,\n          indeterminateIcon: this.indeterminateIcon,\n          offIcon: this.offIcon,\n          onIcon: this.onIcon,\n          loadingIcon: this.loadingIcon,\n          itemKey: this.itemKey,\n          itemText: this.itemText,\n          itemChildren: this.itemChildren,\n          loadChildren: this.loadChildren,\n          transition: this.transition,\n          openOnClick: this.openOnClick\n        },\n        scopedSlots: this.$scopedSlots\n      })\n    },\n    genChildrenWrapper (): any {\n      if (!this.isOpen || !this.children) return null\n\n      const children = [this.children.map(this.genChild)]\n\n      return this.$createElement('div', {\n        staticClass: 'v-treeview-node__children'\n      }, children)\n    },\n    genTransition () {\n      return this.$createElement(VExpandTransition, [this.genChildrenWrapper()])\n    }\n  },\n\n  render (h): VNode {\n    const children = [this.genNode()]\n\n    if (this.transition) children.push(this.genTransition())\n    else children.push(this.genChildrenWrapper())\n\n    return h('div', {\n      staticClass: 'v-treeview-node',\n      class: {\n        [this.activeClass]: this.isActive,\n        'v-treeview-node--leaf': !this.hasChildren,\n        'v-treeview-node--click': this.openOnClick,\n        'v-treeview-node--selected': this.isSelected\n      }\n    }, children)\n  }\n})\n"",""import VTreeview from './VTreeview'\nimport VTreeviewNode from './VTreeviewNode'\n\nexport { VTreeview, VTreeviewNode }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VTreeview,\n    VTreeviewNode\n  }\n}\n"",""// Styles\nimport '../../stylus/components/_windows.styl'\n\n// Components\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Types\nimport { VNode, VNodeDirective } from 'vue/types/vnode'\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n  name: 'v-window',\n\n  provide (): object {\n    return {\n      windowGroup: this\n    }\n  },\n\n  directives: { Touch },\n\n  props: {\n    mandatory: {\n      type: Boolean,\n      default: true\n    },\n    reverse: {\n      type: Boolean,\n      default: undefined\n    },\n    touch: Object,\n    touchless: Boolean,\n    value: {\n      required: false\n    },\n    vertical: Boolean\n  },\n\n  data () {\n    return {\n      internalHeight: undefined as undefined | string,\n      isActive: false,\n      isBooted: false,\n      isReverse: false\n    }\n  },\n\n  computed: {\n    computedTransition (): string {\n      if (!this.isBooted) return ''\n\n      const axis = this.vertical ? 'y' : 'x'\n      const direction = this.internalReverse === !this.$vuetify.rtl\n        ? '-reverse'\n        : ''\n\n      return `v-window-${axis}${direction}-transition`\n    },\n    internalIndex (): number {\n      return this.items.findIndex((item, i) => {\n        return this.internalValue === this.getValue(item, i)\n      })\n    },\n    internalReverse (): boolean {\n      if (this.reverse !== undefined) return this.reverse\n\n      return this.isReverse\n    }\n  },\n\n  watch: {\n    internalIndex: 'updateReverse'\n  },\n\n  mounted () {\n    this.$nextTick(() => (this.isBooted = true))\n  },\n\n  methods: {\n    genContainer (): VNode {\n      return this.$createElement('div', {\n        staticClass: 'v-window__container',\n        class: {\n          'v-window__container--is-active': this.isActive\n        },\n        style: {\n          height: this.internalHeight\n        }\n      }, this.$slots.default)\n    },\n    next () {\n      this.isReverse = false\n      const nextIndex = (this.internalIndex + 1) % this.items.length\n      const item = this.items[nextIndex]\n\n      this.internalValue = this.getValue(item, nextIndex)\n    },\n    prev () {\n      this.isReverse = true\n      const lastIndex = (this.internalIndex + this.items.length - 1) % this.items.length\n      const item = this.items[lastIndex]\n\n      this.internalValue = this.getValue(item, lastIndex)\n    },\n    updateReverse (val: number, oldVal: number) {\n      this.isReverse = val < oldVal\n    }\n  },\n\n  render (h): VNode {\n    const data = {\n      staticClass: 'v-window',\n      directives: [] as VNodeDirective[]\n    }\n\n    if (!this.touchless) {\n      const value = this.touch || {\n        left: this.next,\n        right: this.prev\n      }\n\n      data.directives.push({\n        name: 'touch',\n        value\n      } as VNodeDirective)\n    }\n\n    return h('div', data, [this.genContainer()])\n  }\n})\n"",""// Components\nimport VWindow from './VWindow'\n\n// Mixins\nimport Bootable from '../../mixins/bootable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Utilities\nimport {\n  addOnceEventListener,\n  convertToUnit\n} from '../../util/helpers'\nimport { ExtractVue } from './../../util/mixins'\nimport mixins from '../../util/mixins'\n\n// Types\nimport Vue from 'vue'\nimport { VNode, VNodeDirective } from 'vue/types'\n\ntype VBaseWindow = InstanceType<typeof VWindow>\n\ninterface options extends Vue {\n  windowGroup: VBaseWindow\n}\n\nexport default mixins<options & ExtractVue<[typeof Bootable]>>(\n  Bootable,\n  GroupableFactory('windowGroup', 'v-window-item', 'v-window')\n  /* @vue/component */\n).extend({\n  name: 'v-window-item',\n\n  directives: {\n    Touch\n  },\n\n  props: {\n    reverseTransition: {\n      type: [Boolean, String],\n      default: undefined\n    },\n    transition: {\n      type: [Boolean, String],\n      default: undefined\n    },\n    value: {\n      required: false\n    }\n  },\n\n  data () {\n    return {\n      isActive: false,\n      wasCancelled: false\n    }\n  },\n\n  computed: {\n    computedTransition (): string | boolean {\n      if (!this.windowGroup.internalReverse) {\n        return typeof this.transition !== 'undefined'\n          ? this.transition || ''\n          : this.windowGroup.computedTransition\n      }\n\n      return typeof this.reverseTransition !== 'undefined'\n        ? this.reverseTransition || ''\n        : this.windowGroup.computedTransition\n    }\n  },\n\n  methods: {\n    genDefaultSlot () {\n      return this.$slots.default\n    },\n    onAfterEnter () {\n      if (this.wasCancelled) {\n        this.wasCancelled = false\n        return\n      }\n\n      requestAnimationFrame(() => {\n        this.windowGroup.internalHeight = undefined\n        this.windowGroup.isActive = false\n      })\n    },\n    onBeforeEnter () {\n      this.windowGroup.isActive = true\n    },\n    onBeforeLeave (el: HTMLElement) {\n      this.windowGroup.internalHeight = convertToUnit(el.clientHeight)\n    },\n    onEnterCancelled () {\n      this.wasCancelled = true\n    },\n    onEnter (el: HTMLElement, done: () => void) {\n      const isBooted = this.windowGroup.isBooted\n\n      if (isBooted) {\n        addOnceEventListener(el, 'transitionend', done)\n      }\n\n      requestAnimationFrame(() => {\n        this.windowGroup.internalHeight = convertToUnit(el.clientHeight)\n\n        // On initial render, there is no transition\n        // Vue leaves a `enter` transition class\n        // if done is called too fast\n        !isBooted && setTimeout(done, 100)\n      })\n    }\n  },\n\n  render (h): VNode {\n    const div = h('div', {\n      staticClass: 'v-window-item',\n      directives: [{\n        name: 'show',\n        value: this.isActive\n      }] as VNodeDirective[],\n      on: this.$listeners\n    }, this.showLazyContent(this.genDefaultSlot()))\n\n    return h('transition', {\n      props: {\n        name: this.computedTransition\n      },\n      on: {\n        afterEnter: this.onAfterEnter,\n        beforeEnter: this.onBeforeEnter,\n        beforeLeave: this.onBeforeLeave,\n        enter: this.onEnter,\n        enterCancelled: this.onEnterCancelled\n      }\n    }, [div])\n  }\n})\n"",""import VWindow from './VWindow'\nimport VWindowItem from './VWindowItem'\n\nexport { VWindow, VWindowItem }\n\nexport default {\n  $_vuetify_subcomponents: {\n    VWindow,\n    VWindowItem\n  }\n}\n"",""import OurVue from 'vue'\n\nimport application from './mixins/application'\nimport breakpoint from './mixins/breakpoint'\nimport theme from './mixins/theme'\nimport icons from './mixins/icons'\nimport options from './mixins/options'\nimport genLang from './mixins/lang'\nimport goTo from './util/goTo'\n\n// Utils\nimport { consoleWarn, consoleError } from '../../util/console'\n\n// Types\nimport { VueConstructor } from 'vue/types'\nimport { Vuetify as VuetifyPlugin, VuetifyUseOptions } from 'vuetify/types'\n\nconst Vuetify: VuetifyPlugin = {\n  install (Vue, opts = {}) {\n    if ((this as any).installed) return\n    ;(this as any).installed = true\n\n    if (OurVue !== Vue) {\n      consoleError('Multiple instances of Vue detected\\nSee https://github.com/vuetifyjs/vuetify/issues/4068\\n\\nIf you\\'re seeing \""$attrs is readonly\"", it\\'s caused by this')\n    }\n\n    checkVueVersion(Vue)\n\n    const lang = genLang(opts.lang)\n\n    Vue.prototype.$vuetify = new Vue({\n      mixins: [\n        breakpoint\n      ],\n      data: {\n        application,\n        dark: false,\n        icons: icons(opts.iconfont, opts.icons),\n        lang,\n        options: options(opts.options),\n        rtl: opts.rtl,\n        theme: theme(opts.theme)\n      },\n      methods: {\n        goTo,\n        t: lang.t.bind(lang)\n      }\n    })\n\n    if (opts.directives) {\n      for (const name in opts.directives) {\n        Vue.directive(name, opts.directives[name])\n      }\n    }\n\n    (function registerComponents (components: VuetifyUseOptions['components']) {\n      if (components) {\n        for (const key in components) {\n          const component = components[key]\n          if (component && !registerComponents(component.$_vuetify_subcomponents)) {\n            Vue.component(key, component as typeof Vue)\n          }\n        }\n        return true\n      }\n      return false\n    })(opts.components)\n  },\n  version: __VUETIFY_VERSION__\n}\n\nexport function checkVueVersion (Vue: VueConstructor, requiredVue?: string) {\n  const vueDep = requiredVue || __REQUIRED_VUE__\n\n  const required = vueDep.split('.', 3).map(v => v.replace(/\\D/g, '')).map(Number)\n  const actual = Vue.version.split('.', 3).map(n => parseInt(n, 10))\n\n  // Simple semver caret range comparison\n  const passes =\n    actual[0] === required[0] && // major matches\n    (actual[1] > required[1] || // minor is greater\n      (actual[1] === required[1] && actual[2] >= required[2]) // or minor is eq and patch is >=\n    )\n\n  if (!passes) {\n    consoleWarn(`Vuetify requires Vue version ${vueDep}`)\n  }\n}\n\nexport default Vuetify\n"",""export type TargetProp = 'bar' | 'bottom' | 'footer' | 'insetFooter' | 'left' | 'right' | 'top'\n\ninterface TargetPropValues {\n  [uid: number]: number\n}\n\nexport default {\n  bar: 0,\n  bottom: 0,\n  footer: 0,\n  insetFooter: 0,\n  left: 0,\n  right: 0,\n  top: 0,\n  components: {\n    bar: {} as TargetPropValues,\n    bottom: {} as TargetPropValues,\n    footer: {} as TargetPropValues,\n    insetFooter: {} as TargetPropValues,\n    left: {} as TargetPropValues,\n    right: {} as TargetPropValues,\n    top: {} as TargetPropValues\n  },\n  bind (uid: number, target: TargetProp, value: number): void {\n    if (!this.components[target]) return\n\n    this.components[target] = { [uid]: value }\n    this.update(target)\n  },\n  unbind (uid: number, target: TargetProp): void {\n    if (this.components[target][uid] == null) return\n\n    delete (this.components as any)[target][uid]\n    this.update(target)\n  },\n  update (target: TargetProp): void {\n    this[target] = Object.values(this.components[target])\n      .reduce((acc: number, cur: number): number => (acc + cur), 0)\n  }\n}\n"",""import Vue from 'vue'\nimport { VuetifyBreakpoint } from 'vuetify/types'\n\n/**\n * A modified version of https://gist.github.com/cb109/b074a65f7595cffc21cea59ce8d15f9b\n */\n\n/**\n * A Vue mixin to get the current width/height and the associated breakpoint.\n *\n *   <div v-if=\""$breakpoint.smAndDown\"">...</div>\n *\n */\nexport default Vue.extend({\n  data: () => ({\n    clientHeight: getClientHeight(),\n    clientWidth: getClientWidth(),\n    resizeTimeout: undefined as number | undefined\n  }),\n\n  computed: {\n    breakpoint (): VuetifyBreakpoint {\n      const xs = this.clientWidth < 600\n      const sm = this.clientWidth < 960 && !xs\n      const md = this.clientWidth < (1280 - 16) && !(sm || xs)\n      const lg = this.clientWidth < (1920 - 16) && !(md || sm || xs)\n      const xl = this.clientWidth >= (1920 - 16)\n\n      const xsOnly = xs\n      const smOnly = sm\n      const smAndDown = (xs || sm) && !(md || lg || xl)\n      const smAndUp = !xs && (sm || md || lg || xl)\n      const mdOnly = md\n      const mdAndDown = (xs || sm || md) && !(lg || xl)\n      const mdAndUp = !(xs || sm) && (md || lg || xl)\n      const lgOnly = lg\n      const lgAndDown = (xs || sm || md || lg) && !xl\n      const lgAndUp = !(xs || sm || md) && (lg || xl)\n      const xlOnly = xl\n\n      let name\n      switch (true) {\n        case (xs):\n          name = 'xs'\n          break\n        case (sm):\n          name = 'sm'\n          break\n        case (md):\n          name = 'md'\n          break\n        case (lg):\n          name = 'lg'\n          break\n        default:\n          name = 'xl'\n          break\n      }\n\n      return {\n        // Definite breakpoint.\n        xs,\n        sm,\n        md,\n        lg,\n        xl,\n\n        // Useful e.g. to construct CSS class names dynamically.\n        name,\n\n        // Breakpoint ranges.\n        xsOnly,\n        smOnly,\n        smAndDown,\n        smAndUp,\n        mdOnly,\n        mdAndDown,\n        mdAndUp,\n        lgOnly,\n        lgAndDown,\n        lgAndUp,\n        xlOnly,\n\n        // For custom breakpoint logic.\n        width: this.clientWidth,\n        height: this.clientHeight\n      }\n    }\n  },\n\n  created () {\n    if (typeof window === 'undefined') return\n\n    window.addEventListener('resize', this.onResize, { passive: true })\n  },\n\n  beforeDestroy () {\n    if (typeof window === 'undefined') return\n\n    window.removeEventListener('resize', this.onResize)\n  },\n\n  methods: {\n    onResize (): void {\n      clearTimeout(this.resizeTimeout)\n\n      // Added debounce to match what\n      // v-resize used to do but was\n      // removed due to a memory leak\n      // https://github.com/vuetifyjs/vuetify/pull/2997\n      this.resizeTimeout = window.setTimeout(this.setDimensions, 200)\n    },\n    setDimensions (): void {\n      this.clientHeight = getClientHeight()\n      this.clientWidth = getClientWidth()\n    }\n  }\n})\n\n// Cross-browser support as described in:\n// https://stackoverflow.com/questions/1248081\nfunction getClientWidth () {\n  if (typeof document === 'undefined') return 0 // SSR\n  return Math.max(\n    document.documentElement!.clientWidth,\n    window.innerWidth || 0\n  )\n}\n\nfunction getClientHeight () {\n  if (typeof document === 'undefined') return 0 // SSR\n  return Math.max(\n    document.documentElement!.clientHeight,\n    window.innerHeight || 0\n  )\n}\n"",""// Maps internal Vuetify icon names to actual Material Design icon names.\nconst ICONS_MATERIAL = {\n  'complete': 'check',\n  'cancel': 'cancel',\n  'close': 'close',\n  'delete': 'cancel', // delete (e.g. v-chip close)\n  'clear': 'clear',\n  'success': 'check_circle',\n  'info': 'info',\n  'warning': 'priority_high',\n  'error': 'warning',\n  'prev': 'chevron_left',\n  'next': 'chevron_right',\n  'checkboxOn': 'check_box',\n  'checkboxOff': 'check_box_outline_blank',\n  'checkboxIndeterminate': 'indeterminate_check_box',\n  'delimiter': 'fiber_manual_record', // for carousel\n  'sort': 'arrow_upward',\n  'expand': 'keyboard_arrow_down',\n  'menu': 'menu',\n  'subgroup': 'arrow_drop_down',\n  'dropdown': 'arrow_drop_down',\n  'radioOn': 'radio_button_checked',\n  'radioOff': 'radio_button_unchecked',\n  'edit': 'edit',\n  'ratingEmpty': 'star_border',\n  'ratingFull': 'star',\n  'ratingHalf': 'star_half',\n  'loading': 'cached'\n}\n\n// Maps internal Vuetify icon names to actual icons from materialdesignicons.com\nconst ICONS_MDI = {\n  'complete': 'mdi-check',\n  'cancel': 'mdi-close-circle',\n  'close': 'mdi-close',\n  'delete': 'mdi-close-circle', // delete (e.g. v-chip close)\n  'clear': 'mdi-close',\n  'success': 'mdi-check-circle',\n  'info': 'mdi-information',\n  'warning': 'mdi-exclamation',\n  'error': 'mdi-alert',\n  'prev': 'mdi-chevron-left',\n  'next': 'mdi-chevron-right',\n  'checkboxOn': 'mdi-checkbox-marked',\n  'checkboxOff': 'mdi-checkbox-blank-outline',\n  'checkboxIndeterminate': 'mdi-minus-box',\n  'delimiter': 'mdi-circle', // for carousel\n  'sort': 'mdi-arrow-up',\n  'expand': 'mdi-chevron-down',\n  'menu': 'mdi-menu',\n  'subgroup': 'mdi-menu-down',\n  'dropdown': 'mdi-menu-down',\n  'radioOn': 'mdi-radiobox-marked',\n  'radioOff': 'mdi-radiobox-blank',\n  'edit': 'mdi-pencil',\n  'ratingEmpty': 'mdi-star-outline',\n  'ratingFull': 'mdi-star',\n  'ratingHalf': 'mdi-star-half'\n}\n\n// Maps internal Vuetify icon names to actual Font-Awesome 4 icon names.\nconst ICONS_FONTAWESOME4 = {\n  'complete': 'fa fa-check',\n  'cancel': 'fa fa-times-circle',\n  'close': 'fa fa-times',\n  'delete': 'fa fa-times-circle', // delete (e.g. v-chip close)\n  'clear': 'fa fa-times-circle', // delete (e.g. v-chip close)\n  'success': 'fa fa-check-circle',\n  'info': 'fa fa-info-circle',\n  'warning': 'fa fa-exclamation',\n  'error': 'fa fa-exclamation-triangle',\n  'prev': 'fa fa-chevron-left',\n  'next': 'fa fa-chevron-right',\n  'checkboxOn': 'fa fa-check-square',\n  'checkboxOff': 'fa fa-square-o', // note 'far'\n  'checkboxIndeterminate': 'fa fa-minus-square',\n  'delimiter': 'fa fa-circle', // for carousel\n  'sort': 'fa fa-sort-up',\n  'expand': 'fa fa-chevron-down',\n  'menu': 'fa fa-bars',\n  'subgroup': 'fa fa-caret-down',\n  'dropdown': 'fa fa-caret-down',\n  'radioOn': 'fa fa-dot-circle',\n  'radioOff': 'fa fa-circle-o',\n  'edit': 'fa fa-pencil',\n  'ratingEmpty': 'fa fa-star-o',\n  'ratingFull': 'fa fa-star',\n  'ratingHalf': 'fa fa-star-half-o'\n}\n\n// Maps internal Vuetify icon names to actual Font-Awesome 5+ icon names.\nconst ICONS_FONTAWESOME = {\n  'complete': 'fas fa-check',\n  'cancel': 'fas fa-times-circle',\n  'close': 'fas fa-times',\n  'delete': 'fas fa-times-circle', // delete (e.g. v-chip close)\n  'clear': 'fas fa-times-circle', // delete (e.g. v-chip close)\n  'success': 'fas fa-check-circle',\n  'info': 'fas fa-info-circle',\n  'warning': 'fas fa-exclamation',\n  'error': 'fas fa-exclamation-triangle',\n  'prev': 'fas fa-chevron-left',\n  'next': 'fas fa-chevron-right',\n  'checkboxOn': 'fas fa-check-square',\n  'checkboxOff': 'far fa-square', // note 'far'\n  'checkboxIndeterminate': 'fas fa-minus-square',\n  'delimiter': 'fas fa-circle', // for carousel\n  'sort': 'fas fa-sort-up',\n  'expand': 'fas fa-chevron-down',\n  'menu': 'fas fa-bars',\n  'subgroup': 'fas fa-caret-down',\n  'dropdown': 'fas fa-caret-down',\n  'radioOn': 'far fa-dot-circle',\n  'radioOff': 'far fa-circle',\n  'edit': 'fas fa-edit',\n  'ratingEmpty': 'far fa-star',\n  'ratingFull': 'fas fa-star',\n  'ratingHalf': 'fas fa-star-half'\n}\n\nconst iconSets = {\n  md: ICONS_MATERIAL,\n  mdi: ICONS_MDI,\n  fa: ICONS_FONTAWESOME,\n  fa4: ICONS_FONTAWESOME4\n}\n\nexport default function icons (iconfont = 'md', icons = {}) {\n  return Object.assign({}, iconSets[iconfont] || iconSets.md, icons)\n}\n"",""import en from '../../../locale/en'\nimport { getObjectValueByPath } from '../../../util/helpers'\nimport { consoleError, consoleWarn } from '../../../util/console'\nimport { VuetifyUseOptions as Options } from 'vuetify/types'\nimport { VuetifyLanguage, VuetifyLocale } from 'vuetify/types/lang'\n\nconst LANG_PREFIX = '$vuetify.'\nconst fallback = Symbol('Lang fallback')\n\nfunction getTranslation (locale: VuetifyLocale, key: string, usingFallback = false): string {\n  const shortKey = key.replace(LANG_PREFIX, '')\n  let translation = getObjectValueByPath(locale, shortKey, fallback) as string | typeof fallback\n\n  if (translation === fallback) {\n    if (usingFallback) {\n      consoleError(`Translation key \""${shortKey}\"" not found in fallback`)\n      translation = key\n    } else {\n      consoleWarn(`Translation key \""${shortKey}\"" not found, falling back to default`)\n      translation = getTranslation(en, key, true)\n    }\n  }\n\n  return translation\n}\n\nexport default function lang (config: Options['lang'] = {}): VuetifyLanguage {\n  return {\n    locales: Object.assign({ en }, config.locales),\n    current: config.current || 'en',\n    t (key, ...params) {\n      if (!key.startsWith(LANG_PREFIX)) return key\n\n      if (config.t) return config.t(key, ...params)\n\n      const translation = getTranslation(this.locales[this.current], key)\n\n      return translation.replace(/\\{(\\d+)\\}/g, (match: string, index: string) => {\n        return String(params[+index])\n      })\n    }\n  }\n}\n"",""const OPTIONS_DEFAULTS = {\n  minifyTheme: null,\n  themeCache: null,\n  customProperties: false,\n  cspNonce: null\n}\n\nexport default function options (options = {}) {\n  return Object.assign({}, OPTIONS_DEFAULTS, options)\n}\n"",""import { VuetifyUseOptions, VuetifyTheme } from 'vuetify/types'\n\n/* eslint-disable no-multi-spaces */\nconst THEME_DEFAULTS = {\n  primary: '#1976D2',   // blue.darken2\n  secondary: '#424242', // grey.darken3\n  accent: '#82B1FF',    // blue.accent1\n  error: '#FF5252',     // red.accent2\n  info: '#2196F3',      // blue.base\n  success: '#4CAF50',   // green.base\n  warning: '#FFC107'    // amber.base\n}\n\nexport default function theme (theme: VuetifyUseOptions['theme'] = {}): VuetifyTheme | false {\n  if (theme === false) return false\n\n  return {\n    ...THEME_DEFAULTS,\n    ...theme\n  }\n}\n"",""import * as easingPatterns from '../../../util/easing-patterns'\n\nconst defaults = {\n  duration: 500,\n  offset: 0,\n  easing: 'easeInOutCubic'\n}\n\nfunction getDocumentHeight () {\n  return Math.max(\n    document.body.scrollHeight,\n    document.documentElement.scrollHeight,\n    document.body.offsetHeight,\n    document.documentElement.offsetHeight,\n    document.body.clientHeight,\n    document.documentElement.clientHeight\n  )\n}\n\nfunction getWindowHeight () {\n  return window.innerHeight ||\n    (document.documentElement || document.body).clientHeight\n}\n\nfunction isVueComponent (obj) {\n  return obj != null && obj._isVue\n}\n\nfunction getTargetLocation (target, settings) {\n  let location\n\n  if (isVueComponent(target)) {\n    target = target.$el\n  }\n\n  if (target instanceof Element) {\n    location = target.getBoundingClientRect().top + window.pageYOffset\n  } else if (typeof target === 'string') {\n    const targetEl = document.querySelector(target)\n    if (!targetEl) throw new TypeError(`Target element \""${target}\"" not found.`)\n    location = targetEl.getBoundingClientRect().top + window.pageYOffset\n  } else if (typeof target === 'number') {\n    location = target\n  } else {\n    const type = target == null ? target : target.constructor.name\n    throw new TypeError(`Target must be a Selector/Number/DOMElement/VueComponent, received ${type} instead.`)\n  }\n\n  return Math.round(\n    Math.min(\n      Math.max(location + settings.offset, 0),\n      getDocumentHeight() - getWindowHeight()\n    )\n  )\n}\n\nexport default function goTo (target, options) {\n  return new Promise((resolve, reject) => {\n    if (typeof window === 'undefined') return reject('Window is undefined')\n\n    const settings = Object.assign({}, defaults, options)\n    const startTime = performance.now()\n    const startLocation = window.pageYOffset\n    const targetLocation = getTargetLocation(target, settings)\n    const distanceToScroll = targetLocation - startLocation\n    const easingFunction = typeof settings.easing === 'function' ? settings.easing : easingPatterns[settings.easing]\n\n    if (!easingFunction) throw new TypeError(`Easing function '${settings.easing}' not found.`)\n\n    function step (currentTime) {\n      const progressPercentage = Math.min(1, ((currentTime - startTime) / settings.duration))\n      const targetPosition = Math.floor(startLocation + distanceToScroll * easingFunction(progressPercentage))\n\n      window.scrollTo(0, targetPosition)\n\n      if (\n        Math.round(window.pageYOffset) === targetLocation ||\n        progressPercentage === 1\n      ) {\n        return resolve(target)\n      }\n\n      window.requestAnimationFrame(step)\n    }\n\n    window.requestAnimationFrame(step)\n  })\n}\n"",""export * from './VApp'\nexport * from './VAlert'\nexport * from './VAutocomplete'\nexport * from './VAvatar'\nexport * from './VBadge'\nexport * from './VBottomNav'\nexport * from './VBottomSheet'\nexport * from './VBreadcrumbs'\nexport * from './VBtn'\nexport * from './VBtnToggle'\nexport * from './VCard'\nexport * from './VCarousel'\nexport * from './VCheckbox'\nexport * from './VChip'\nexport * from './VCombobox'\nexport * from './VCounter'\nexport * from './VDataIterator'\nexport * from './VDataTable'\nexport * from './VDatePicker'\nexport * from './VDialog'\nexport * from './VDivider'\nexport * from './VExpansionPanel'\nexport * from './VFooter'\nexport * from './VForm'\nexport * from './VGrid'\nexport * from './VHover'\nexport * from './VIcon'\nexport * from './VImg'\nexport * from './VInput'\nexport * from './VItemGroup'\nexport * from './VJumbotron'\nexport * from './VLabel'\nexport * from './VList'\nexport * from './VMenu'\nexport * from './VMessages'\nexport * from './VNavigationDrawer'\nexport * from './VOverflowBtn'\nexport * from './VPagination'\nexport * from './VParallax'\nexport * from './VPicker'\nexport * from './VProgressCircular'\nexport * from './VProgressLinear'\nexport * from './VRadioGroup'\nexport * from './VRangeSlider'\nexport * from './VRating'\nexport * from './VResponsive'\nexport * from './VSelect'\nexport * from './VSlider'\nexport * from './VSnackbar'\nexport * from './VSpeedDial'\nexport * from './VStepper'\nexport * from './VSubheader'\nexport * from './VSwitch'\nexport * from './VSystemBar'\nexport * from './VTabs'\nexport * from './VTextarea'\nexport * from './VTextField'\nexport * from './VTimeline'\nexport * from './VTimePicker'\nexport * from './VToolbar'\nexport * from './VTooltip'\nexport * from './VTreeview'\nexport * from './VWindow'\nexport * from './transitions'\n"",""export default function (expandedParentClass = '') {\n  return {\n    enter (el) {\n      el._parent = el.parentNode\n\n      // Get height that is to be scrolled\n      el.style.overflow = 'hidden'\n      el.style.height = 0\n      expandedParentClass && el._parent.classList.add(expandedParentClass)\n\n      requestAnimationFrame(() => {\n        el.style.height = el.scrollHeight\n          ? `${el.scrollHeight}px`\n          : 'auto'\n      })\n    },\n\n    afterEnter (el) {\n      el.style.overflow = null\n      el.style.height = null\n    },\n\n    leave (el) {\n      // Set height before we transition to 0\n      el.style.overflow = 'hidden'\n      el.style.height = `${el.scrollHeight}px`\n\n      requestAnimationFrame(() => el.style.height = 0)\n    },\n\n    afterLeave (el) {\n      expandedParentClass && el._parent && el._parent.classList.remove(expandedParentClass)\n    }\n  }\n}\n"",""import {\n  createSimpleTransition,\n  createJavaScriptTransition\n} from '../../util/helpers'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\nexport const VBottomSheetTransition = createSimpleTransition('bottom-sheet-transition')\nexport const VCarouselTransition = createSimpleTransition('carousel-transition')\nexport const VCarouselReverseTransition = createSimpleTransition('carousel-reverse-transition')\nexport const VTabTransition = createSimpleTransition('tab-transition')\nexport const VTabReverseTransition = createSimpleTransition('tab-reverse-transition')\nexport const VMenuTransition = createSimpleTransition('menu-transition')\nexport const VFabTransition = createSimpleTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogTransition = createSimpleTransition('dialog-transition')\nexport const VDialogBottomTransition = createSimpleTransition('dialog-bottom-transition')\nexport const VFadeTransition = createSimpleTransition('fade-transition')\nexport const VScaleTransition = createSimpleTransition('scale-transition')\nexport const VScrollXTransition = createSimpleTransition('scroll-x-transition')\nexport const VScrollXReverseTransition = createSimpleTransition('scroll-x-reverse-transition')\nexport const VScrollYTransition = createSimpleTransition('scroll-y-transition')\nexport const VScrollYReverseTransition = createSimpleTransition('scroll-y-reverse-transition')\nexport const VSlideXTransition = createSimpleTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createSimpleTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition')\n\n// JavaScript transitions\nexport const VExpandTransition = createJavaScriptTransition('expand-transition', ExpandTransitionGenerator())\nexport const VRowExpandTransition = createJavaScriptTransition('row-expand-transition', ExpandTransitionGenerator('datatable__expand-col--expanded'))\n\nexport default {\n  $_vuetify_subcomponents: {\n    VBottomSheetTransition,\n    VCarouselTransition,\n    VCarouselReverseTransition,\n    VDialogTransition,\n    VDialogBottomTransition,\n    VFabTransition,\n    VFadeTransition,\n    VMenuTransition,\n    VScaleTransition,\n    VScrollXTransition,\n    VScrollXReverseTransition,\n    VScrollYTransition,\n    VScrollYReverseTransition,\n    VSlideXTransition,\n    VSlideXReverseTransition,\n    VSlideYTransition,\n    VSlideYReverseTransition,\n    VTabReverseTransition,\n    VTabTransition,\n    VExpandTransition,\n    VRowExpandTransition\n  }\n}\n"",""import { VNodeDirective } from 'vue/types/vnode'\n\ninterface ClickOutsideBindingArgs {\n  closeConditional?: (e: Event) => boolean\n  include?: () => HTMLElement[]\n}\n\ninterface ClickOutsideDirective extends VNodeDirective {\n  value: (e: Event) => void\n  args?: ClickOutsideBindingArgs\n}\n\nfunction closeConditional () {\n  return false\n}\n\nfunction directive (e: PointerEvent, el: HTMLElement, binding: ClickOutsideDirective): void {\n  // Args may not always be supplied\n  binding.args = binding.args || {}\n\n  // If no closeConditional was supplied assign a default\n  const isActive = (binding.args.closeConditional || closeConditional)\n\n  // The include element callbacks below can be expensive\n  // so we should avoid calling them when we're not active.\n  // Explicitly check for false to allow fallback compatibility\n  // with non-toggleable components\n  if (!e || isActive(e) === false) return\n\n  // If click was triggered programmaticaly (domEl.click()) then\n  // it shouldn't be treated as click-outside\n  // Chrome/Firefox support isTrusted property\n  // IE/Edge support pointerType property (empty if not triggered\n  // by pointing device)\n  if (('isTrusted' in e && !e.isTrusted) ||\n    ('pointerType' in e && !e.pointerType)\n  ) return\n\n  // Check if additional elements were passed to be included in check\n  // (click must be outside all included elements, if any)\n  const elements = (binding.args.include || (() => []))()\n  // Add the root element for the component this directive was defined on\n  elements.push(el)\n\n  // Check if it's a click outside our elements, and then if our callback returns true.\n  // Non-toggleable components should take action in their callback and return falsy.\n  // Toggleable can return true if it wants to deactivate.\n  // Note that, because we're in the capture phase, this callback will occure before\n  // the bubbling click event on any outside elements.\n  !clickedInEls(e, elements) && setTimeout(() => {\n    isActive(e) && binding.value(e)\n  }, 0)\n}\n\nfunction clickedInEls (e: PointerEvent, elements: HTMLElement[]): boolean {\n  // Get position of click\n  const { clientX: x, clientY: y } = e\n  // Loop over all included elements to see if click was in any of them\n  for (const el of elements) {\n    if (clickedInEl(el, x, y)) return true\n  }\n\n  return false\n}\n\nfunction clickedInEl (el: HTMLElement, x: number, y: number): boolean {\n  // Get bounding rect for element\n  // (we're in capturing event and we want to check for multiple elements,\n  //  so can't use target.)\n  const b = el.getBoundingClientRect()\n  // Check if the click was in the element's bounding rect\n\n  return x >= b.left && x <= b.right && y >= b.top && y <= b.bottom\n}\n\nexport default {\n  // [data-app] may not be found\n  // if using bind, inserted makes\n  // sure that the root element is\n  // available, iOS does not support\n  // clicks on body\n  inserted (el: HTMLElement, binding: ClickOutsideDirective) {\n    const onClick = (e: Event) => directive(e as PointerEvent, el, binding)\n    // iOS does not recognize click events on document\n    // or body, this is the entire purpose of the v-app\n    // component and [data-app], stop removing this\n    const app = document.querySelector('[data-app]') ||\n      document.body // This is only for unit tests\n    app.addEventListener('click', onClick, true)\n    el._clickOutside = onClick\n  },\n\n  unbind (el: HTMLElement) {\n    if (!el._clickOutside) return\n\n    const app = document.querySelector('[data-app]') ||\n      document.body // This is only for unit tests\n    app && app.removeEventListener('click', el._clickOutside, true)\n    delete el._clickOutside\n  }\n}\n"",""import ClickOutside from './click-outside'\nimport Resize from './resize'\nimport Ripple from './ripple'\nimport Scroll from './scroll'\nimport Touch from './touch'\n\nexport {\n  ClickOutside,\n  Ripple,\n  Resize,\n  Scroll,\n  Touch\n}\n\nexport default {\n  ClickOutside,\n  Ripple,\n  Resize,\n  Scroll,\n  Touch\n}\n"",""import { VNodeDirective } from 'vue/types/vnode'\n\ninterface ResizeVNodeDirective extends VNodeDirective {\n  value: () => void\n  options?: boolean | AddEventListenerOptions\n}\n\nfunction inserted (el: HTMLElement, binding: ResizeVNodeDirective) {\n  const callback = binding.value\n  const options = binding.options || { passive: true }\n\n  window.addEventListener('resize', callback, options)\n  el._onResize = {\n    callback,\n    options\n  }\n\n  if (!binding.modifiers || !binding.modifiers.quiet) {\n    callback()\n  }\n}\n\nfunction unbind (el: HTMLElement) {\n  if (!el._onResize) return\n\n  const { callback, options } = el._onResize\n  window.removeEventListener('resize', callback, options)\n  delete el._onResize\n}\n\nexport default {\n  inserted,\n  unbind\n}\n"",""import { VNodeDirective } from 'vue'\n\nfunction transform (el: HTMLElement, value: string) {\n  el.style['transform'] = value\n  el.style['webkitTransform'] = value\n}\n\nfunction opacity (el: HTMLElement, value: number) {\n  el.style['opacity'] = value.toString()\n}\n\nexport interface RippleOptions {\n  class?: string\n  center?: boolean\n  circle?: boolean\n}\n\nconst calculate = (e: MouseEvent, el: HTMLElement, value: RippleOptions = {}) => {\n  const offset = el.getBoundingClientRect()\n  const localX = e.clientX - offset.left\n  const localY = e.clientY - offset.top\n\n  let radius = 0\n  let scale = 0.3\n  if (el._ripple && el._ripple.circle) {\n    scale = 0.15\n    radius = el.clientWidth / 2\n    radius = value.center ? radius : radius + Math.sqrt((localX - radius)**2 + (localY - radius)**2) / 4\n  } else {\n    radius = Math.sqrt(el.clientWidth**2 + el.clientHeight**2) / 2\n  }\n\n  const centerX = `${(el.clientWidth - (radius * 2)) / 2}px`\n  const centerY = `${(el.clientHeight - (radius * 2)) / 2}px`\n\n  const x = value.center ? centerX : `${localX - radius}px`\n  const y = value.center ? centerY : `${localY - radius}px`\n\n  return { radius, scale, x, y, centerX, centerY }\n}\n\nconst ripple = {\n  /* eslint-disable max-statements */\n  show (e: MouseEvent, el: HTMLElement, value: RippleOptions = {}) {\n    if (!el._ripple || !el._ripple.enabled) {\n      return\n    }\n\n    const container = document.createElement('span')\n    const animation = document.createElement('span')\n\n    container.appendChild(animation)\n    container.className = 'v-ripple__container'\n\n    if (value.class) {\n      container.className += ` ${value.class}`\n    }\n\n    const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)\n\n    animation.className = 'v-ripple__animation'\n    animation.style.width = `${radius * 2}px`\n    animation.style.height = animation.style.width\n\n    el.appendChild(container)\n\n    const computed = window.getComputedStyle(el)\n    if (computed.position === 'static') {\n      el.style.position = 'relative'\n      el.dataset.previousPosition = 'static'\n    }\n\n    animation.classList.add('v-ripple__animation--enter')\n    animation.classList.add('v-ripple__animation--visible')\n    transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)\n    opacity(animation, 0)\n    animation.dataset.activated = String(performance.now())\n\n    setTimeout(() => {\n      animation.classList.remove('v-ripple__animation--enter')\n      animation.classList.add('v-ripple__animation--in')\n      transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)\n      opacity(animation, 0.25)\n\n      setTimeout(() => {\n        animation.classList.remove('v-ripple__animation--in')\n        animation.classList.add('v-ripple__animation--out')\n        opacity(animation, 0)\n      }, 300)\n    }, 0)\n  },\n\n  hide (el: HTMLElement | null) {\n    if (!el || !el._ripple || !el._ripple.enabled) return\n\n    const ripples = el.getElementsByClassName('v-ripple__animation')\n\n    if (ripples.length === 0) return\n    const animation = ripples[ripples.length - 1]\n\n    if (animation.dataset.isHiding) return\n    else animation.dataset.isHiding = 'true'\n\n    const diff = performance.now() - Number(animation.dataset.activated)\n    const delay = Math.max(200 - diff, 0)\n\n    setTimeout(() => {\n      animation.classList.remove('v-ripple__animation--out')\n\n      setTimeout(() => {\n        const ripples = el.getElementsByClassName('v-ripple__animation')\n        if (ripples.length === 1 && el.dataset.previousPosition) {\n          el.style.position = el.dataset.previousPosition\n          delete el.dataset.previousPosition\n        }\n\n        animation.parentNode && el.removeChild(animation.parentNode)\n      }, 300)\n    }, delay)\n  }\n}\n\nfunction isRippleEnabled (value: any): value is true {\n  return typeof value === 'undefined' || !!value\n}\n\nfunction rippleShow (e: MouseEvent) {\n  const value: RippleOptions = {}\n  const element = e.currentTarget as HTMLElement\n  if (!element) return\n  value.center = element._ripple!.centered\n  if (element._ripple!.class) {\n    value.class = element._ripple!.class\n  }\n  ripple.show(e, element, value)\n}\n\nfunction rippleHide (e: Event) {\n  ripple.hide(e.currentTarget as HTMLElement | null)\n}\n\nfunction updateRipple (el: HTMLElement, binding: VNodeDirective, wasEnabled: boolean) {\n  const enabled = isRippleEnabled(binding.value)\n  if (!enabled) {\n    ripple.hide(el)\n  }\n  el._ripple = el._ripple || {}\n  el._ripple.enabled = enabled\n  const value = binding.value || {}\n  if (value.center) {\n    el._ripple.centered = true\n  }\n  if (value.class) {\n    el._ripple.class = binding.value.class\n  }\n  if (value.circle) {\n    el._ripple.circle = value.circle\n  }\n  if (enabled && !wasEnabled) {\n    if ('ontouchstart' in window) {\n      el.addEventListener('touchend', rippleHide, false)\n      el.addEventListener('touchcancel', rippleHide, false)\n    }\n\n    el.addEventListener('mousedown', rippleShow, false)\n    el.addEventListener('mouseup', rippleHide, false)\n    el.addEventListener('mouseleave', rippleHide, false)\n    // Anchor tags can be dragged, causes other hides to fail - #1537\n    el.addEventListener('dragstart', rippleHide, false)\n  } else if (!enabled && wasEnabled) {\n    removeListeners(el)\n  }\n}\n\nfunction removeListeners (el: HTMLElement) {\n  el.removeEventListener('mousedown', rippleShow, false)\n  el.removeEventListener('touchend', rippleHide, false)\n  el.removeEventListener('touchcancel', rippleHide, false)\n  el.removeEventListener('mouseup', rippleHide, false)\n  el.removeEventListener('mouseleave', rippleHide, false)\n  el.removeEventListener('dragstart', rippleHide, false)\n}\n\nfunction directive (el: HTMLElement, binding: VNodeDirective) {\n  updateRipple(el, binding, false)\n}\n\nfunction unbind (el: HTMLElement) {\n  delete el._ripple\n  removeListeners(el)\n}\n\nfunction update (el: HTMLElement, binding: VNodeDirective) {\n  if (binding.value === binding.oldValue) {\n    return\n  }\n\n  const wasEnabled = isRippleEnabled(binding.oldValue)\n  updateRipple(el, binding, wasEnabled)\n}\n\nexport default {\n  bind: directive,\n  unbind,\n  update\n}\n"",""import { VNodeDirective } from 'vue/types/vnode'\n\ninterface ScrollVNodeDirective extends VNodeDirective {\n  arg: string\n  value: EventListenerOrEventListenerObject\n  options?: boolean | AddEventListenerOptions\n}\n\nfunction inserted (el: HTMLElement, binding: ScrollVNodeDirective) {\n  const callback = binding.value\n  const options = binding.options || { passive: true }\n  const target = binding.arg ? document.querySelector(binding.arg) : window\n  if (!target) return\n\n  target.addEventListener('scroll', callback, options)\n\n  el._onScroll = {\n    callback,\n    options,\n    target\n  }\n}\n\nfunction unbind (el: HTMLElement) {\n  if (!el._onScroll) return\n\n  const { callback, options, target } = el._onScroll\n\n  target.removeEventListener('scroll', callback, options)\n  delete el._onScroll\n}\n\nexport default {\n  inserted,\n  unbind\n}\n"",""import { VNodeDirective, VNode } from 'vue/types/vnode'\nimport { keys } from '../util/helpers'\n\nexport interface TouchStoredHandlers {\n  touchstart: (e: TouchEvent) => void\n  touchend: (e: TouchEvent) => void\n  touchmove: (e: TouchEvent) => void\n}\n\ninterface TouchHandlers {\n  start?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n  end?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n  move?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n  left?: (wrapper: TouchWrapper) => void\n  right?: (wrapper: TouchWrapper) => void\n  up?: (wrapper: TouchWrapper) => void\n  down?: (wrapper: TouchWrapper) => void\n}\n\ninterface TouchWrapper extends TouchHandlers {\n  touchstartX: number\n  touchstartY: number\n  touchmoveX: number\n  touchmoveY: number\n  touchendX: number\n  touchendY: number\n  offsetX: number\n  offsetY: number\n}\n\ninterface TouchVNodeDirective extends VNodeDirective {\n  value: TouchHandlers & {\n    parent?: boolean\n    options?: AddEventListenerOptions\n  }\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n  const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n  const dirRatio = 0.5\n  const minDistance = 16\n  wrapper.offsetX = touchendX - touchstartX\n  wrapper.offsetY = touchendY - touchstartY\n\n  if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n    wrapper.left && (touchendX < touchstartX - minDistance) && wrapper.left(wrapper)\n    wrapper.right && (touchendX > touchstartX + minDistance) && wrapper.right(wrapper)\n  }\n\n  if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n    wrapper.up && (touchendY < touchstartY - minDistance) && wrapper.up(wrapper)\n    wrapper.down && (touchendY > touchstartY + minDistance) && wrapper.down(wrapper)\n  }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n  const touch = event.changedTouches[0]\n  wrapper.touchstartX = touch.clientX\n  wrapper.touchstartY = touch.clientY\n\n  wrapper.start &&\n    wrapper.start(Object.assign(event, wrapper))\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n  const touch = event.changedTouches[0]\n  wrapper.touchendX = touch.clientX\n  wrapper.touchendY = touch.clientY\n\n  wrapper.end &&\n    wrapper.end(Object.assign(event, wrapper))\n\n  handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n  const touch = event.changedTouches[0]\n  wrapper.touchmoveX = touch.clientX\n  wrapper.touchmoveY = touch.clientY\n\n  wrapper.move && wrapper.move(Object.assign(event, wrapper))\n}\n\nfunction createHandlers (value: TouchHandlers): TouchStoredHandlers {\n  const wrapper = {\n    touchstartX: 0,\n    touchstartY: 0,\n    touchendX: 0,\n    touchendY: 0,\n    touchmoveX: 0,\n    touchmoveY: 0,\n    offsetX: 0,\n    offsetY: 0,\n    left: value.left,\n    right: value.right,\n    up: value.up,\n    down: value.down,\n    start: value.start,\n    move: value.move,\n    end: value.end\n  }\n\n  return {\n    touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n    touchend: (e: TouchEvent) => touchend(e, wrapper),\n    touchmove: (e: TouchEvent) => touchmove(e, wrapper)\n  }\n}\n\nfunction inserted (el: HTMLElement, binding: TouchVNodeDirective, vnode: VNode) {\n  const value = binding.value\n  const target = value.parent ? el.parentElement : el\n  const options = value.options || { passive: true }\n\n  // Needed to pass unit tests\n  if (!target) return\n\n  const handlers = createHandlers(binding.value)\n  target._touchHandlers = Object(target._touchHandlers)\n  target._touchHandlers![vnode.context!._uid] = handlers\n\n  keys(handlers).forEach(eventName => {\n    target.addEventListener(eventName, handlers[eventName] as EventListener, options)\n  })\n}\n\nfunction unbind (el: HTMLElement, binding: TouchVNodeDirective, vnode: VNode) {\n  const target = binding.value.parent ? el.parentElement : el\n  if (!target || !target._touchHandlers) return\n\n  const handlers = target._touchHandlers[vnode.context!._uid]\n  keys(handlers).forEach(eventName => {\n    target.removeEventListener(eventName, handlers[eventName])\n  })\n  delete target._touchHandlers[vnode.context!._uid]\n}\n\nexport default {\n  inserted,\n  unbind\n}\n"",""import './stylus/app.styl'\nimport VuetifyComponent from './components/Vuetify'\nimport * as components from './components'\nimport directives from './directives'\nimport { VueConstructor } from 'vue'\nimport { Vuetify as VuetifyPlugin, VuetifyUseOptions } from 'vuetify/types'\n\nconst Vuetify: VuetifyPlugin = {\n  install (Vue: VueConstructor, args?: VuetifyUseOptions): void {\n    Vue.use(VuetifyComponent, {\n      components,\n      directives,\n      ...args\n    })\n  },\n  version: __VUETIFY_VERSION__\n}\n\nif (typeof window !== 'undefined' && window.Vue) {\n  window.Vue.use(Vuetify)\n}\n\nexport default Vuetify\n"",""export default {\n  dataIterator: {\n    rowsPerPageText: 'Items per page:',\n    rowsPerPageAll: 'All',\n    pageText: '{0}-{1} of {2}',\n    noResultsText: 'No matching records found',\n    nextPage: 'Next page',\n    prevPage: 'Previous page'\n  },\n  dataTable: {\n    rowsPerPageText: 'Rows per page:'\n  },\n  noDataText: 'No data available'\n}\n"",""import { factory as PositionableFactory } from './positionable'\nimport { TargetProp } from '../components/Vuetify/mixins/application'\n\n// Util\nimport mixins from '../util/mixins'\n\nexport default function applicationable (value: TargetProp, events: string[] = []) {\n  /* @vue/component */\n  return mixins(PositionableFactory(['absolute', 'fixed'])).extend({\n    name: 'applicationable',\n\n    props: {\n      app: Boolean\n    },\n\n    computed: {\n      applicationProperty (): TargetProp {\n        return value\n      }\n    },\n\n    watch: {\n      // If previous value was app\n      // reset the provided prop\n      app (x: boolean, prev: boolean) {\n        prev\n          ? this.removeApplication(true)\n          : this.callUpdate()\n      },\n      applicationProperty (newVal, oldVal) {\n        this.$vuetify.application.unbind(this._uid, oldVal)\n      }\n    },\n\n    activated () {\n      this.callUpdate()\n    },\n\n    created () {\n      for (let i = 0, length = events.length; i < length; i++) {\n        this.$watch(events[i], this.callUpdate)\n      }\n      this.callUpdate()\n    },\n\n    mounted () {\n      this.callUpdate()\n    },\n\n    deactivated () {\n      this.removeApplication()\n    },\n\n    destroyed () {\n      this.removeApplication()\n    },\n\n    methods: {\n      callUpdate () {\n        if (!this.app) return\n\n        this.$vuetify.application.bind(\n          this._uid,\n          this.applicationProperty,\n          this.updateApplication()\n        )\n      },\n      removeApplication (force = false) {\n        if (!force && !this.app) return\n\n        this.$vuetify.application.unbind(\n          this._uid,\n          this.applicationProperty\n        )\n      },\n      updateApplication: () => 0\n    }\n  })\n}\n"",""import Vue, { VNode } from 'vue'\n\ninterface Toggleable extends Vue {\n  isActive?: boolean\n}\n\n/**\n * Bootable\n * @mixin\n *\n * Used to add lazy content functionality to components\n * Looks for change in \""isActive\"" to automatically boot\n * Otherwise can be set manually\n */\n/* @vue/component */\nexport default Vue.extend<Vue & Toggleable>().extend({\n  name: 'bootable',\n\n  props: {\n    lazy: Boolean\n  },\n\n  data: () => ({\n    isBooted: false\n  }),\n\n  computed: {\n    hasContent (): boolean | undefined {\n      return this.isBooted || !this.lazy || this.isActive\n    }\n  },\n\n  watch: {\n    isActive () {\n      this.isBooted = true\n    }\n  },\n\n  methods: {\n    showLazyContent (content: VNode[]): VNode[] | undefined {\n      return this.hasContent ? content : undefined\n    }\n  }\n})\n"",""// Extensions\nimport { BaseItemGroup } from '../components/VItemGroup/VItemGroup'\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n  name: 'button-group',\n\n  provide (): object {\n    return {\n      btnToggle: this\n    }\n  },\n\n  props: {\n    activeClass: {\n      type: String,\n      default: 'v-btn--active'\n    }\n  },\n\n  computed: {\n    classes (): object {\n      return BaseItemGroup.options.computed.classes.call(this)\n    }\n  }\n})\n"",""import Vue from 'vue'\nimport { VNodeData } from 'vue/types/vnode'\n\nfunction isCssColor (color?: string | false): boolean {\n  return !!color && !!color.match(/^(#|(rgb|hsl)a?\\()/)\n}\n\nexport default Vue.extend({\n  name: 'colorable',\n\n  props: {\n    color: String\n  },\n\n  methods: {\n    setBackgroundColor (color?: string | false, data: VNodeData = {}): VNodeData {\n      if (isCssColor(color)) {\n        data.style = {\n          ...data.style,\n          'background-color': `${color}`,\n          'border-color': `${color}`\n        }\n      } else if (color) {\n        data.class = {\n          ...data.class,\n          [color]: true\n        }\n      }\n\n      return data\n    },\n\n    setTextColor (color?: string | false, data: VNodeData = {}): VNodeData {\n      if (isCssColor(color)) {\n        data.style = {\n          ...data.style,\n          'color': `${color}`,\n          'caret-color': `${color}`\n        }\n      } else if (color) {\n        const [colorName, colorModifier] = color.toString().trim().split(' ', 2) as (string | undefined)[]\n        data.class = {\n          ...data.class,\n          [colorName + '--text']: true\n        }\n        if (colorModifier) {\n          data.class['text--' + colorModifier] = true\n        }\n      }\n      return data\n    }\n  }\n})\n"",""import Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { deepEqual } from '../util/helpers'\n\nexport default Vue.extend({\n  name: 'comparable',\n  props: {\n    valueComparator: {\n      type: Function,\n      default: deepEqual\n    } as any as PropValidator<typeof deepEqual>\n  }\n})\n"",""import VBtn from '../components/VBtn'\nimport VIcon from '../components/VIcon'\nimport VSelect from '../components/VSelect'\n\nimport Filterable from './filterable'\nimport Themeable from './themeable'\nimport Loadable from './loadable'\n\nimport { getObjectValueByPath, isObject } from '../util/helpers'\nimport { consoleWarn } from '../util/console'\n\n/**\n * DataIterable\n *\n * @mixin\n *\n * Base behavior for data table and data iterator\n * providing selection, pagination, sorting and filtering.\n *\n */\n/* @vue/component */\nexport default {\n  name: 'data-iterable',\n\n  mixins: [Filterable, Loadable, Themeable],\n\n  props: {\n    expand: Boolean,\n    hideActions: Boolean,\n    disableInitialSort: Boolean,\n    mustSort: Boolean,\n    noResultsText: {\n      type: String,\n      default: '$vuetify.dataIterator.noResultsText'\n    },\n    nextIcon: {\n      type: String,\n      default: '$vuetify.icons.next'\n    },\n    prevIcon: {\n      type: String,\n      default: '$vuetify.icons.prev'\n    },\n    rowsPerPageItems: {\n      type: Array,\n      default () {\n        return [\n          5,\n          10,\n          25,\n          {\n            text: '$vuetify.dataIterator.rowsPerPageAll',\n            value: -1\n          }\n        ]\n      }\n    },\n    rowsPerPageText: {\n      type: String,\n      default: '$vuetify.dataIterator.rowsPerPageText'\n    },\n    selectAll: [Boolean, String],\n    search: {\n      required: false\n    },\n    filter: {\n      type: Function,\n      default: (val, search) => {\n        return val != null &&\n          typeof val !== 'boolean' &&\n          val.toString().toLowerCase().indexOf(search) !== -1\n      }\n    },\n    customFilter: {\n      type: Function,\n      default: (items, search, filter) => {\n        search = search.toString().toLowerCase()\n        if (search.trim() === '') return items\n\n        return items.filter(i => (\n          Object.keys(i).some(j => filter(i[j], search))\n        ))\n      }\n    },\n    customSort: {\n      type: Function,\n      default: (items, index, isDescending) => {\n        if (index === null) return items\n\n        return items.sort((a, b) => {\n          let sortA = getObjectValueByPath(a, index)\n          let sortB = getObjectValueByPath(b, index)\n\n          if (isDescending) {\n            [sortA, sortB] = [sortB, sortA]\n          }\n\n          // Check if both are numbers\n          if (!isNaN(sortA) && !isNaN(sortB)) {\n            return sortA - sortB\n          }\n\n          // Check if both cannot be evaluated\n          if (sortA === null && sortB === null) {\n            return 0\n          }\n\n          [sortA, sortB] = [sortA, sortB]\n            .map(s => (\n              (s || '').toString().toLocaleLowerCase()\n            ))\n\n          if (sortA > sortB) return 1\n          if (sortA < sortB) return -1\n\n          return 0\n        })\n      }\n    },\n    value: {\n      type: Array,\n      default: () => []\n    },\n    items: {\n      type: Array,\n      required: true,\n      default: () => []\n    },\n    totalItems: {\n      type: Number,\n      default: null\n    },\n    itemKey: {\n      type: String,\n      default: 'id'\n    },\n    pagination: {\n      type: Object,\n      default: () => {}\n    }\n  },\n\n  data: () => ({\n    searchLength: 0,\n    defaultPagination: {\n      descending: false,\n      page: 1,\n      rowsPerPage: 5,\n      sortBy: null,\n      totalItems: 0\n    },\n    expanded: {},\n    actionsClasses: 'v-data-iterator__actions',\n    actionsRangeControlsClasses: 'v-data-iterator__actions__range-controls',\n    actionsSelectClasses: 'v-data-iterator__actions__select',\n    actionsPaginationClasses: 'v-data-iterator__actions__pagination'\n  }),\n\n  computed: {\n    computedPagination () {\n      return this.hasPagination\n        ? this.pagination\n        : this.defaultPagination\n    },\n    computedRowsPerPageItems () {\n      return this.rowsPerPageItems.map(item => {\n        return isObject(item)\n          ? Object.assign({}, item, {\n            text: this.$vuetify.t(item.text)\n          })\n          : { value: item, text: Number(item).toLocaleString(this.$vuetify.lang.current) }\n      })\n    },\n    hasPagination () {\n      const pagination = this.pagination || {}\n\n      return Object.keys(pagination).length > 0\n    },\n    hasSelectAll () {\n      return this.selectAll !== undefined && this.selectAll !== false\n    },\n    itemsLength () {\n      if (this.hasSearch) return this.searchLength\n      return this.totalItems || this.items.length\n    },\n    indeterminate () {\n      return this.hasSelectAll && this.someItems && !this.everyItem\n    },\n    everyItem () {\n      return this.filteredItems.length &&\n        this.filteredItems.every(i => this.isSelected(i))\n    },\n    someItems () {\n      return this.filteredItems.some(i => this.isSelected(i))\n    },\n    getPage () {\n      const { rowsPerPage } = this.computedPagination\n\n      return rowsPerPage === Object(rowsPerPage)\n        ? rowsPerPage.value\n        : rowsPerPage\n    },\n    pageStart () {\n      return this.getPage === -1\n        ? 0\n        : (this.computedPagination.page - 1) * this.getPage\n    },\n    pageStop () {\n      return this.getPage === -1\n        ? this.itemsLength\n        : this.computedPagination.page * this.getPage\n    },\n    filteredItems () {\n      return this.filteredItemsImpl()\n    },\n    selected () {\n      const selected = {}\n      for (let index = 0; index < this.value.length; index++) {\n        const key = getObjectValueByPath(this.value[index], this.itemKey)\n        selected[key] = true\n      }\n      return selected\n    },\n    hasSearch () {\n      return this.search != null\n    }\n  },\n\n  watch: {\n    items () {\n      if (this.pageStart >= this.itemsLength) {\n        this.resetPagination()\n      }\n    },\n    search () {\n      this.$nextTick(() => {\n        this.updatePagination({ page: 1, totalItems: this.itemsLength })\n      })\n    },\n    'computedPagination.sortBy': 'resetPagination',\n    'computedPagination.descending': 'resetPagination'\n  },\n\n  methods: {\n    initPagination () {\n      if (!this.rowsPerPageItems.length) {\n        consoleWarn(`The prop 'rows-per-page-items' can not be empty`, this)\n      } else {\n        this.defaultPagination.rowsPerPage = this.rowsPerPageItems[0]\n      }\n\n      this.defaultPagination.totalItems = this.items.length\n\n      this.updatePagination(\n        Object.assign({}, this.defaultPagination, this.pagination)\n      )\n    },\n    updatePagination (val) {\n      const pagination = this.hasPagination\n        ? this.pagination\n        : this.defaultPagination\n      const updatedPagination = Object.assign({}, pagination, val)\n      this.$emit('update:pagination', updatedPagination)\n\n      if (!this.hasPagination) {\n        this.defaultPagination = updatedPagination\n      }\n    },\n    isSelected (item) {\n      return this.selected[getObjectValueByPath(item, this.itemKey)]\n    },\n    isExpanded (item) {\n      return this.expanded[getObjectValueByPath(item, this.itemKey)]\n    },\n    filteredItemsImpl (...additionalFilterArgs) {\n      if (this.totalItems) return this.items\n\n      let items = this.items.slice()\n\n      if (this.hasSearch) {\n        items = this.customFilter(items, this.search, this.filter, ...additionalFilterArgs)\n        this.searchLength = items.length\n      }\n\n      items = this.customSort(\n        items,\n        this.computedPagination.sortBy,\n        this.computedPagination.descending\n      )\n\n      return this.hideActions &&\n        !this.hasPagination\n        ? items\n        : items.slice(this.pageStart, this.pageStop)\n    },\n    resetPagination () {\n      this.computedPagination.page !== 1 &&\n        this.updatePagination({ page: 1 })\n    },\n    sort (index) {\n      const { sortBy, descending } = this.computedPagination\n      if (sortBy === null) {\n        this.updatePagination({ sortBy: index, descending: false })\n      } else if (sortBy === index && !descending) {\n        this.updatePagination({ descending: true })\n      } else if (sortBy !== index) {\n        this.updatePagination({ sortBy: index, descending: false })\n      } else if (!this.mustSort) {\n        this.updatePagination({ sortBy: null, descending: null })\n      } else {\n        this.updatePagination({ sortBy: index, descending: false })\n      }\n    },\n    toggle (value) {\n      const selected = Object.assign({}, this.selected)\n      for (let index = 0; index < this.filteredItems.length; index++) {\n        const key = getObjectValueByPath(this.filteredItems[index], this.itemKey)\n        selected[key] = value\n      }\n\n      this.$emit('input', this.items.filter(i => {\n        const key = getObjectValueByPath(i, this.itemKey)\n        return selected[key]\n      }))\n    },\n    createProps (item, index) {\n      const props = { item, index }\n      const keyProp = this.itemKey\n      const itemKey = getObjectValueByPath(item, keyProp)\n\n      Object.defineProperty(props, 'selected', {\n        get: () => this.selected[itemKey],\n        set: value => {\n          if (itemKey == null) {\n            consoleWarn(`\""${keyProp}\"" attribute must be defined for item`, this)\n          }\n\n          let selected = this.value.slice()\n          if (value) selected.push(item)\n          else selected = selected.filter(i => getObjectValueByPath(i, keyProp) !== itemKey)\n          this.$emit('input', selected)\n        }\n      })\n\n      Object.defineProperty(props, 'expanded', {\n        get: () => this.expanded[itemKey],\n        set: value => {\n          if (itemKey == null) {\n            consoleWarn(`\""${keyProp}\"" attribute must be defined for item`, this)\n          }\n\n          if (!this.expand) {\n            for (const key in this.expanded) {\n              this.expanded.hasOwnProperty(key) && this.$set(this.expanded, key, false)\n            }\n          }\n          this.$set(this.expanded, itemKey, value)\n        }\n      })\n\n      return props\n    },\n    genItems () {\n      if (!this.itemsLength && !this.items.length) {\n        const noData = this.$slots['no-data'] || this.$vuetify.t(this.noDataText)\n        return [this.genEmptyItems(noData)]\n      }\n\n      if (!this.filteredItems.length) {\n        const noResults = this.$slots['no-results'] || this.$vuetify.t(this.noResultsText)\n        return [this.genEmptyItems(noResults)]\n      }\n\n      return this.genFilteredItems()\n    },\n    genPrevIcon () {\n      return this.$createElement(VBtn, {\n        props: {\n          disabled: this.computedPagination.page === 1,\n          icon: true,\n          flat: true\n        },\n        on: {\n          click: () => {\n            const page = this.computedPagination.page\n            this.updatePagination({ page: page - 1 })\n          }\n        },\n        attrs: {\n          'aria-label': this.$vuetify.t('$vuetify.dataIterator.prevPage')\n        }\n      }, [this.$createElement(VIcon, this.$vuetify.rtl ? this.nextIcon : this.prevIcon)])\n    },\n    genNextIcon () {\n      const pagination = this.computedPagination\n      const disabled = pagination.rowsPerPage < 0 ||\n        pagination.page * pagination.rowsPerPage >= this.itemsLength ||\n        this.pageStop < 0\n\n      return this.$createElement(VBtn, {\n        props: {\n          disabled,\n          icon: true,\n          flat: true\n        },\n        on: {\n          click: () => {\n            const page = this.computedPagination.page\n            this.updatePagination({ page: page + 1 })\n          }\n        },\n        attrs: {\n          'aria-label': this.$vuetify.t('$vuetify.dataIterator.nextPage')\n        }\n      }, [this.$createElement(VIcon, this.$vuetify.rtl ? this.prevIcon : this.nextIcon)])\n    },\n    genSelect () {\n      return this.$createElement('div', {\n        'class': this.actionsSelectClasses\n      }, [\n        this.$vuetify.t(this.rowsPerPageText),\n        this.$createElement(VSelect, {\n          attrs: {\n            'aria-label': this.$vuetify.t(this.rowsPerPageText)\n          },\n          props: {\n            items: this.computedRowsPerPageItems,\n            value: this.computedPagination.rowsPerPage,\n            hideDetails: true,\n            menuProps: {\n              auto: true,\n              dark: this.dark,\n              light: this.light,\n              minWidth: '75px'\n            }\n          },\n          on: {\n            input: val => {\n              this.updatePagination({\n                page: 1,\n                rowsPerPage: val\n              })\n            }\n          }\n        })\n      ])\n    },\n    genPagination () {\n      let pagination = '–'\n\n      if (this.itemsLength) {\n        const stop = this.itemsLength < this.pageStop || this.pageStop < 0\n          ? this.itemsLength\n          : this.pageStop\n\n        pagination = this.$scopedSlots.pageText\n          ? this.$scopedSlots.pageText({\n            pageStart: this.pageStart + 1,\n            pageStop: stop,\n            itemsLength: this.itemsLength\n          })\n          : this.$vuetify.t('$vuetify.dataIterator.pageText',\n            ...([this.pageStart + 1, stop, this.itemsLength].map(n => Number(n).toLocaleString(this.$vuetify.lang.current))))\n      }\n\n      return this.$createElement('div', {\n        'class': this.actionsPaginationClasses\n      }, [pagination])\n    },\n    genActions () {\n      const rangeControls = this.$createElement('div', {\n        'class': this.actionsRangeControlsClasses\n      }, [\n        this.genPagination(),\n        this.genPrevIcon(),\n        this.genNextIcon()\n      ])\n\n      return [this.$createElement('div', {\n        'class': this.actionsClasses\n      }, [\n        this.$slots['actions-prepend'] ? this.$createElement('div', {}, this.$slots['actions-prepend']) : null,\n        this.rowsPerPageItems.length > 1 ? this.genSelect() : null,\n        rangeControls,\n        this.$slots['actions-append'] ? this.$createElement('div', {}, this.$slots['actions-append']) : null\n      ])]\n    }\n  }\n}\n"",""import Vue from 'vue'\n\n/**\n * Delayable\n *\n * @mixin\n *\n * Changes the open or close delay time for elements\n */\nexport default Vue.extend({\n  name: 'delayable',\n\n  props: {\n    openDelay: {\n      type: [Number, String],\n      default: 0\n    },\n    closeDelay: {\n      type: [Number, String],\n      default: 0\n    }\n  },\n\n  data: () => ({\n    openTimeout: undefined as number | undefined,\n    closeTimeout: undefined as number | undefined\n  }),\n\n  methods: {\n    /**\n     * Clear any pending delay timers from executing\n     */\n    clearDelay (): void {\n      clearTimeout(this.openTimeout)\n      clearTimeout(this.closeTimeout)\n    },\n    /**\n     * Runs callback after a specified delay\n     */\n    runDelay (type: 'open' | 'close', cb: () => void): void {\n      this.clearDelay()\n\n      const delay = parseInt((this as any)[`${type}Delay`], 10)\n\n      ;(this as any)[`${type}Timeout`] = setTimeout(cb, delay)\n    }\n  }\n})\n"",""import Vue from 'vue'\n\nimport mixins from '../util/mixins'\n\ninterface options extends Vue {\n  $refs: {\n    content: HTMLElement\n  }\n}\n\ninterface DependentInstance extends Vue {\n  isActive?: boolean\n  isDependent?: boolean\n}\n\nfunction searchChildren (children: Vue[]): DependentInstance[] {\n  const results = []\n  for (let index = 0; index < children.length; index++) {\n    const child = children[index] as DependentInstance\n    if (child.isActive && child.isDependent) {\n      results.push(child)\n    } else {\n      results.push(...searchChildren(child.$children))\n    }\n  }\n\n  return results\n}\n\n/* @vue/component */\nexport default mixins<options>().extend({\n  name: 'dependent',\n\n  data () {\n    return {\n      closeDependents: true,\n      isActive: false,\n      isDependent: true\n    }\n  },\n\n  watch: {\n    isActive (val) {\n      if (val) return\n\n      const openDependents = this.getOpenDependents()\n      for (let index = 0; index < openDependents.length; index++) {\n        openDependents[index].isActive = false\n      }\n    }\n  },\n\n  methods: {\n    getOpenDependents (): any[] {\n      if (this.closeDependents) return searchChildren(this.$children)\n\n      return []\n    },\n    getOpenDependentElements (): HTMLElement[] {\n      const result = []\n      const openDependents = this.getOpenDependents()\n\n      for (let index = 0; index < openDependents.length; index++) {\n        result.push(...openDependents[index].getClickableDependentElements())\n      }\n\n      return result\n    },\n    getClickableDependentElements (): HTMLElement[] {\n      const result = [this.$el]\n      if (this.$refs.content) result.push(this.$refs.content)\n      result.push(...this.getOpenDependentElements())\n\n      return result\n    }\n  }\n})\n"",""import Bootable from './bootable'\nimport { consoleWarn } from '../util/console'\n\nfunction validateAttachTarget (val) {\n  const type = typeof val\n\n  if (type === 'boolean' || type === 'string') return true\n\n  return val.nodeType === Node.ELEMENT_NODE\n}\n\n/* @vue/component */\nexport default {\n  name: 'detachable',\n\n  mixins: [Bootable],\n\n  props: {\n    attach: {\n      type: null,\n      default: false,\n      validator: validateAttachTarget\n    },\n    contentClass: {\n      default: ''\n    }\n  },\n\n  data: () => ({\n    hasDetached: false\n  }),\n\n  watch: {\n    attach () {\n      this.hasDetached = false\n      this.initDetach()\n    },\n    hasContent: 'initDetach'\n  },\n\n  mounted () {\n    !this.lazy && this.initDetach()\n  },\n\n  deactivated () {\n    this.isActive = false\n  },\n\n  beforeDestroy () {\n    if (!this.$refs.content) return\n\n    // IE11 Fix\n    try {\n      this.$refs.content.parentNode.removeChild(this.$refs.content)\n    } catch (e) { console.log(e) }\n  },\n\n  methods: {\n    getScopeIdAttrs () {\n      const scopeId = this.$vnode && this.$vnode.context.$options._scopeId\n      return scopeId && {\n        [scopeId]: ''\n      }\n    },\n    initDetach () {\n      if (this._isDestroyed ||\n        !this.$refs.content ||\n        this.hasDetached ||\n        // Leave menu in place if attached\n        // and dev has not changed target\n        this.attach === '' || // If used as a boolean prop (<v-menu attach>)\n        this.attach === true || // If bound to a boolean (<v-menu :attach=\""true\"">)\n        this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))\n      ) return\n\n      let target\n      if (this.attach === false) {\n        // Default, detach to app\n        target = document.querySelector('[data-app]')\n      } else if (typeof this.attach === 'string') {\n        // CSS selector\n        target = document.querySelector(this.attach)\n      } else {\n        // DOM Element\n        target = this.attach\n      }\n\n      if (!target) {\n        consoleWarn(`Unable to locate target ${this.attach || '[data-app]'}`, this)\n        return\n      }\n\n      target.insertBefore(\n        this.$refs.content,\n        target.firstChild\n      )\n\n      this.hasDetached = true\n    }\n  }\n}\n"",""import Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n  name: 'filterable',\n\n  props: {\n    noDataText: {\n      type: String,\n      default: '$vuetify.noDataText'\n    }\n  }\n})\n"",""// Mixins\nimport { Registrable, inject as RegistrableInject } from './registrable'\n\n// Utilities\nimport { ExtractVue } from '../util/mixins'\nimport { PropValidator } from 'vue/types/options'\nimport { VueConstructor } from 'vue'\n\n/* eslint-disable-next-line no-use-before-define */\nexport type Groupable<T extends string> = VueConstructor<ExtractVue<Registrable<T>> & {\n  activeClass: string\n  isActive: boolean\n  groupClasses: object\n  toggle (): void\n}>\n\nexport function factory<T extends string> (\n  namespace: T,\n  child?: string,\n  parent?: string\n): Groupable<T> {\n  return RegistrableInject(namespace, child, parent).extend({\n    name: 'groupable',\n\n    props: {\n      activeClass: {\n        type: String,\n        default (): string | undefined {\n          if (!this[namespace]) return undefined\n\n          return this[namespace].activeClass\n        }\n      } as any as PropValidator<string>,\n      disabled: Boolean\n    },\n\n    data () {\n      return {\n        isActive: false\n      }\n    },\n\n    computed: {\n      groupClasses (): object {\n        if (!this.activeClass) return {}\n\n        return {\n          [this.activeClass]: this.isActive\n        }\n      }\n    },\n\n    created () {\n      this[namespace] && (this[namespace] as any).register(this)\n    },\n\n    beforeDestroy () {\n      this[namespace] && (this[namespace] as any).unregister(this)\n    },\n\n    methods: {\n      toggle () {\n        this.$emit('change')\n      }\n    }\n  })\n}\n\n/* eslint-disable-next-line no-redeclare */\nconst Groupable = factory('itemGroup')\n\nexport default Groupable\n"",""import Vue, { VNode } from 'vue'\nimport VProgressLinear from '../components/VProgressLinear'\n\ninterface colorable extends Vue {\n  color?: string\n}\n\n/**\n * Loadable\n *\n * @mixin\n *\n * Used to add linear progress bar to components\n * Can use a default bar with a specific color\n * or designate a custom progress linear bar\n */\n/* @vue/component */\nexport default Vue.extend<colorable>().extend({\n  name: 'loadable',\n\n  props: {\n    loading: {\n      type: [Boolean, String],\n      default: false\n    }\n  },\n\n  methods: {\n    genProgress (): VNode | VNode[] | null {\n      if (this.loading === false) return null\n\n      return this.$slots.progress || this.$createElement(VProgressLinear, {\n        props: {\n          color: (this.loading === true || this.loading === '')\n            ? (this.color || 'primary')\n            : this.loading,\n          height: 2,\n          indeterminate: true\n        }\n      })\n    }\n  }\n})\n"",""/**\n * Maskable\n *\n * @mixin\n *\n * Creates an input mask that is\n * generated from a masked str\n *\n * Example: mask=\""#### #### #### ####\""\n */\n\nimport {\n  isMaskDelimiter,\n  maskText,\n  unmaskText\n} from '../util/mask'\n\n/* @vue/component */\nexport default {\n  name: 'maskable',\n\n  props: {\n    dontFillMaskBlanks: Boolean,\n    mask: {\n      type: [Object, String],\n      default: null\n    },\n    returnMaskedValue: Boolean\n  },\n\n  data: () => ({\n    selection: 0,\n    lazySelection: 0,\n    preDefined: {\n      'credit-card': '#### - #### - #### - ####',\n      'date': '##/##/####',\n      'date-with-time': '##/##/#### ##:##',\n      'phone': '(###) ### - ####',\n      'social': '###-##-####',\n      'time': '##:##',\n      'time-with-seconds': '##:##:##'\n    }\n  }),\n\n  computed: {\n    masked () {\n      const preDefined = this.preDefined[this.mask]\n      const mask = preDefined || this.mask || ''\n\n      return mask.split('')\n    }\n  },\n\n  watch: {\n    /**\n     * Make sure the cursor is in the correct\n     * location when the mask changes\n     */\n    mask () {\n      if (!this.$refs.input) return\n\n      const oldValue = this.$refs.input.value\n      const newValue = this.maskText(unmaskText(this.lazyValue))\n      let position = 0\n      let selection = this.selection\n\n      for (let index = 0; index < selection; index++) {\n        isMaskDelimiter(oldValue[index]) || position++\n      }\n\n      selection = 0\n      if (newValue) {\n        for (let index = 0; index < newValue.length; index++) {\n          isMaskDelimiter(newValue[index]) || position--\n          selection++\n          if (position <= 0) break\n        }\n      }\n\n      this.$nextTick(() => {\n        this.$refs.input.value = newValue\n        this.setCaretPosition(selection)\n      })\n    }\n  },\n\n  beforeMount () {\n    if (!this.mask ||\n      this.value == null ||\n      !this.returnMaskedValue\n    ) return\n\n    const value = this.maskText(this.value)\n\n    // See if masked value does not\n    // match the user given value\n    if (value === this.value) return\n\n    this.$emit('input', value)\n  },\n\n  methods: {\n    setCaretPosition (selection) {\n      this.selection = selection\n      window.setTimeout(() => {\n        this.$refs.input && this.$refs.input.setSelectionRange(this.selection, this.selection)\n      }, 0)\n    },\n    updateRange () {\n      if (!this.$refs.input) return\n\n      const newValue = this.maskText(this.lazyValue)\n      let selection = 0\n\n      this.$refs.input.value = newValue\n      if (newValue) {\n        for (let index = 0; index < newValue.length; index++) {\n          if (this.lazySelection <= 0) break\n          isMaskDelimiter(newValue[index]) || this.lazySelection--\n          selection++\n        }\n      }\n\n      this.setCaretPosition(selection)\n      // this.$emit() must occur only when all internal values are correct\n      this.$emit('input', this.returnMaskedValue ? this.$refs.input.value : this.lazyValue)\n    },\n    maskText (text) {\n      return this.mask ? maskText(text, this.masked, this.dontFillMaskBlanks) : text\n    },\n    unmaskText (text) {\n      return this.mask && !this.returnMaskedValue ? unmaskText(text) : text\n    },\n    // When the input changes and is\n    // re-created, ensure that the\n    // caret location is correct\n    setSelectionRange () {\n      this.$nextTick(this.updateRange)\n    },\n    resetSelections (input) {\n      if (!input.selectionEnd) return\n      this.selection = input.selectionEnd\n      this.lazySelection = 0\n\n      for (let index = 0; index < this.selection; index++) {\n        isMaskDelimiter(input.value[index]) || this.lazySelection++\n      }\n    }\n  }\n}\n"",""import Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nexport type NumberOrNumberString = PropValidator<string | number | undefined>\n\nexport default Vue.extend({\n  name: 'measurable',\n\n  props: {\n    height: [Number, String] as NumberOrNumberString,\n    maxHeight: [Number, String] as NumberOrNumberString,\n    maxWidth: [Number, String] as NumberOrNumberString,\n    width: [Number, String] as NumberOrNumberString\n  }\n})\n"",""import Vue from 'vue'\n\nimport Positionable from './positionable'\n\nimport Stackable from './stackable'\n\n/* eslint-disable object-property-newline */\nconst dimensions = {\n  activator: {\n    top: 0, left: 0,\n    bottom: 0, right: 0,\n    width: 0, height: 0,\n    offsetTop: 0, scrollHeight: 0\n  },\n  content: {\n    top: 0, left: 0,\n    bottom: 0, right: 0,\n    width: 0, height: 0,\n    offsetTop: 0, scrollHeight: 0\n  },\n  hasWindow: false\n}\n/* eslint-enable object-property-newline */\n\n/**\n * Menuable\n *\n * @mixin\n *\n * Used for fixed or absolutely positioning\n * elements within the DOM\n * Can calculate X and Y axis overflows\n * As well as be manually positioned\n */\n/* @vue/component */\nexport default Vue.extend({\n  name: 'menuable',\n\n  mixins: [\n    Positionable,\n    Stackable\n  ],\n\n  props: {\n    activator: {\n      default: null,\n      validator: val => {\n        return ['string', 'object'].includes(typeof val)\n      }\n    },\n    allowOverflow: Boolean,\n    inputActivator: Boolean,\n    light: Boolean,\n    dark: Boolean,\n    maxWidth: {\n      type: [Number, String],\n      default: 'auto'\n    },\n    minWidth: [Number, String],\n    nudgeBottom: {\n      type: [Number, String],\n      default: 0\n    },\n    nudgeLeft: {\n      type: [Number, String],\n      default: 0\n    },\n    nudgeRight: {\n      type: [Number, String],\n      default: 0\n    },\n    nudgeTop: {\n      type: [Number, String],\n      default: 0\n    },\n    nudgeWidth: {\n      type: [Number, String],\n      default: 0\n    },\n    offsetOverflow: Boolean,\n    positionX: {\n      type: Number,\n      default: null\n    },\n    positionY: {\n      type: Number,\n      default: null\n    },\n    zIndex: {\n      type: [Number, String],\n      default: null\n    }\n  },\n\n  data: () => ({\n    absoluteX: 0,\n    absoluteY: 0,\n    dimensions: Object.assign({}, dimensions),\n    isContentActive: false,\n    pageYOffset: 0,\n    stackClass: 'v-menu__content--active',\n    stackMinZIndex: 6\n  }),\n\n  computed: {\n    computedLeft () {\n      const a = this.dimensions.activator\n      const c = this.dimensions.content\n      const minWidth = a.width < c.width ? c.width : a.width\n      let left = 0\n\n      left += this.left ? a.left - (minWidth - a.width) : a.left\n\n      if (this.offsetX) left += this.left ? -a.width : a.width\n      if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n      if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n      return left\n    },\n    computedTop () {\n      const a = this.dimensions.activator\n      const c = this.dimensions.content\n      let top = this.top ? a.bottom - c.height : a.top\n\n      if (!this.isAttached) top += this.pageYOffset\n      if (this.offsetY) top += this.top ? -a.height : a.height\n      if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n      if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n      return top\n    },\n    hasActivator () {\n      return !!this.$slots.activator || this.activator || this.inputActivator\n    },\n    isAttached () {\n      return this.attach !== false\n    }\n  },\n\n  watch: {\n    disabled (val) {\n      val && this.callDeactivate()\n    },\n    isActive (val) {\n      if (this.disabled) return\n\n      val ? this.callActivate() : this.callDeactivate()\n    }\n  },\n\n  beforeMount () {\n    this.checkForWindow()\n  },\n\n  methods: {\n    absolutePosition () {\n      return {\n        offsetTop: 0,\n        scrollHeight: 0,\n        top: this.positionY || this.absoluteY,\n        bottom: this.positionY || this.absoluteY,\n        left: this.positionX || this.absoluteX,\n        right: this.positionX || this.absoluteX,\n        height: 0,\n        width: 0\n      }\n    },\n    activate () {},\n    calcLeft () {\n      return `${this.isAttached\n        ? this.computedLeft\n        : this.calcXOverflow(this.computedLeft)\n      }px`\n    },\n    calcTop () {\n      return `${this.isAttached\n        ? this.computedTop\n        : this.calcYOverflow(this.computedTop)\n      }px`\n    },\n    calcXOverflow (left) {\n      const parsedMaxWidth = isNaN(parseInt(this.maxWidth))\n        ? 0\n        : parseInt(this.maxWidth)\n      const innerWidth = this.getInnerWidth()\n      const maxWidth = Math.max(\n        this.dimensions.content.width,\n        parsedMaxWidth\n      )\n      const totalWidth = left + maxWidth\n      const availableWidth = totalWidth - innerWidth\n\n      if ((!this.left || this.right) && availableWidth > 0) {\n        left = (\n          innerWidth -\n          maxWidth -\n          (innerWidth > 600 ? 30 : 12) // Account for scrollbar\n        )\n      }\n\n      if (left < 0) left = 12\n\n      return left + this.getOffsetLeft()\n    },\n    calcYOverflow (top) {\n      const documentHeight = this.getInnerHeight()\n      const toTop = this.pageYOffset + documentHeight\n      const activator = this.dimensions.activator\n      const contentHeight = this.dimensions.content.height\n      const totalHeight = top + contentHeight\n      const isOverflowing = toTop < totalHeight\n\n      // If overflowing bottom and offset\n      // TODO: set 'bottom' position instead of 'top'\n      if (isOverflowing &&\n        this.offsetOverflow &&\n        // If we don't have enough room to offset\n        // the overflow, don't offset\n        activator.top > contentHeight\n      ) {\n        top = this.pageYOffset + (activator.top - contentHeight)\n      // If overflowing bottom\n      } else if (isOverflowing && !this.allowOverflow) {\n        top = toTop - contentHeight - 12\n      // If overflowing top\n      } else if (top < this.pageYOffset && !this.allowOverflow) {\n        top = this.pageYOffset + 12\n      }\n\n      return top < 12 ? 12 : top\n    },\n    callActivate () {\n      if (!this.hasWindow) return\n\n      this.activate()\n    },\n    callDeactivate () {\n      this.isContentActive = false\n\n      this.deactivate()\n    },\n    checkForWindow () {\n      if (!this.hasWindow) {\n        this.hasWindow = typeof window !== 'undefined'\n      }\n    },\n    checkForPageYOffset () {\n      if (this.hasWindow) {\n        this.pageYOffset = this.getOffsetTop()\n      }\n    },\n    deactivate () {},\n    getActivator () {\n      if (this.inputActivator) {\n        return this.$el.querySelector('.v-input__slot')\n      }\n\n      if (this.activator) {\n        return typeof this.activator === 'string'\n          ? document.querySelector(this.activator)\n          : this.activator\n      }\n\n      return this.$refs.activator.children.length > 0\n        ? this.$refs.activator.children[0]\n        : this.$refs.activator\n    },\n    getInnerHeight () {\n      if (!this.hasWindow) return 0\n\n      return window.innerHeight ||\n        document.documentElement.clientHeight\n    },\n    getInnerWidth () {\n      if (!this.hasWindow) return 0\n\n      return window.innerWidth\n    },\n    getOffsetLeft () {\n      if (!this.hasWindow) return 0\n\n      return window.pageXOffset ||\n        document.documentElement.scrollLeft\n    },\n    getOffsetTop () {\n      if (!this.hasWindow) return 0\n\n      return window.pageYOffset ||\n        document.documentElement.scrollTop\n    },\n    getRoundedBoundedClientRect (el) {\n      const rect = el.getBoundingClientRect()\n      return {\n        top: Math.round(rect.top),\n        left: Math.round(rect.left),\n        bottom: Math.round(rect.bottom),\n        right: Math.round(rect.right),\n        width: Math.round(rect.width),\n        height: Math.round(rect.height)\n      }\n    },\n    measure (el, selector) {\n      el = selector ? el.querySelector(selector) : el\n\n      if (!el || !this.hasWindow) return null\n\n      const rect = this.getRoundedBoundedClientRect(el)\n\n      // Account for activator margin\n      if (this.isAttached) {\n        const style = window.getComputedStyle(el)\n\n        rect.left = parseInt(style.marginLeft)\n        rect.top = parseInt(style.marginTop)\n      }\n\n      return rect\n    },\n    sneakPeek (cb) {\n      requestAnimationFrame(() => {\n        const el = this.$refs.content\n\n        if (!el || this.isShown(el)) return cb()\n\n        el.style.display = 'inline-block'\n        cb()\n        el.style.display = 'none'\n      })\n    },\n    startTransition () {\n      requestAnimationFrame(() => (this.isContentActive = true))\n    },\n    isShown (el) {\n      return el.style.display !== 'none'\n    },\n    updateDimensions () {\n      this.checkForWindow()\n      this.checkForPageYOffset()\n\n      const dimensions = {}\n\n      // Activator should already be shown\n      dimensions.activator = !this.hasActivator || this.absolute\n        ? this.absolutePosition()\n        : this.measure(this.getActivator())\n\n      // Display and hide to get dimensions\n      this.sneakPeek(() => {\n        dimensions.content = this.measure(this.$refs.content)\n\n        this.dimensions = dimensions\n      })\n    }\n  }\n})\n"",""import '../stylus/components/_overlay.styl'\n\n// Utils\nimport { keyCodes } from '../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'overlayable',\n\n  props: {\n    hideOverlay: Boolean\n  },\n\n  data () {\n    return {\n      overlay: null,\n      overlayOffset: 0,\n      overlayTimeout: null,\n      overlayTransitionDuration: 500 + 150 // transition + delay\n    }\n  },\n\n  beforeDestroy () {\n    this.removeOverlay()\n  },\n\n  methods: {\n    genOverlay () {\n      // If fn is called and timeout is active\n      // or overlay already exists\n      // cancel removal of overlay and re-add active\n      if ((!this.isActive || this.hideOverlay) ||\n        (this.isActive && this.overlayTimeout) ||\n        this.overlay\n      ) {\n        clearTimeout(this.overlayTimeout)\n\n        return this.overlay &&\n          this.overlay.classList.add('v-overlay--active')\n      }\n\n      this.overlay = document.createElement('div')\n      this.overlay.className = 'v-overlay'\n\n      if (this.absolute) this.overlay.className += ' v-overlay--absolute'\n\n      this.hideScroll()\n\n      const parent = this.absolute\n        ? this.$el.parentNode\n        : document.querySelector('[data-app]')\n\n      parent && parent.insertBefore(this.overlay, parent.firstChild)\n\n      // eslint-disable-next-line no-unused-expressions\n      this.overlay.clientHeight // Force repaint\n      requestAnimationFrame(() => {\n        // https://github.com/vuetifyjs/vuetify/issues/4678\n        if (!this.overlay) return\n\n        this.overlay.className += ' v-overlay--active'\n\n        if (this.activeZIndex !== undefined) {\n          this.overlay.style.zIndex = this.activeZIndex - 1\n        }\n      })\n\n      return true\n    },\n    removeOverlay () {\n      if (!this.overlay) {\n        return this.showScroll()\n      }\n\n      this.overlay.classList.remove('v-overlay--active')\n\n      this.overlayTimeout = setTimeout(() => {\n        // IE11 Fix\n        try {\n          if (this.overlay && this.overlay.parentNode) {\n            this.overlay.parentNode.removeChild(this.overlay)\n          }\n          this.overlay = null\n          this.showScroll()\n        } catch (e) { console.log(e) }\n\n        clearTimeout(this.overlayTimeout)\n        this.overlayTimeout = null\n      }, this.overlayTransitionDuration)\n    },\n    /**\n     * @param {Event} e\n     * @returns void\n     */\n    scrollListener (e) {\n      if (e.type === 'keydown') {\n        if (\n          ['INPUT', 'TEXTAREA', 'SELECT'].includes(e.target.tagName) ||\n          // https://github.com/vuetifyjs/vuetify/issues/4715\n          e.target.isContentEditable\n        ) return\n\n        const up = [keyCodes.up, keyCodes.pageup]\n        const down = [keyCodes.down, keyCodes.pagedown]\n\n        if (up.includes(e.keyCode)) {\n          e.deltaY = -1\n        } else if (down.includes(e.keyCode)) {\n          e.deltaY = 1\n        } else {\n          return\n        }\n      }\n\n      if (e.target === this.overlay ||\n        (e.type !== 'keydown' && e.target === document.body) ||\n        this.checkPath(e)) e.preventDefault()\n    },\n    hasScrollbar (el) {\n      if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n      const style = window.getComputedStyle(el)\n      return ['auto', 'scroll'].includes(style['overflow-y']) && el.scrollHeight > el.clientHeight\n    },\n    shouldScroll (el, delta) {\n      if (el.scrollTop === 0 && delta < 0) return true\n      return el.scrollTop + el.clientHeight === el.scrollHeight && delta > 0\n    },\n    isInside (el, parent) {\n      if (el === parent) {\n        return true\n      } else if (el === null || el === document.body) {\n        return false\n      } else {\n        return this.isInside(el.parentNode, parent)\n      }\n    },\n    /**\n     * @param {Event} e\n     * @returns boolean\n     */\n    checkPath (e) {\n      const path = e.path || this.composedPath(e)\n      const delta = e.deltaY || -e.wheelDelta\n\n      if (e.type === 'keydown' && path[0] === document.body) {\n        const dialog = this.$refs.dialog\n        const selected = window.getSelection().anchorNode\n        if (this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {\n          return this.shouldScroll(dialog, delta)\n        }\n        return true\n      }\n\n      for (let index = 0; index < path.length; index++) {\n        const el = path[index]\n\n        if (el === document) return true\n        if (el === document.documentElement) return true\n        if (el === this.$refs.content) return true\n\n        if (this.hasScrollbar(el)) return this.shouldScroll(el, delta)\n      }\n\n      return true\n    },\n    /**\n     * Polyfill for Event.prototype.composedPath\n     * @param {Event} e\n     * @returns Element[]\n     */\n    composedPath (e) {\n      if (e.composedPath) return e.composedPath()\n\n      const path = []\n      let el = e.target\n\n      while (el) {\n        path.push(el)\n\n        if (el.tagName === 'HTML') {\n          path.push(document)\n          path.push(window)\n\n          return path\n        }\n\n        el = el.parentElement\n      }\n    },\n    hideScroll () {\n      if (this.$vuetify.breakpoint.smAndDown) {\n        document.documentElement.classList.add('overflow-y-hidden')\n      } else {\n        window.addEventListener('wheel', this.scrollListener)\n        window.addEventListener('keydown', this.scrollListener)\n      }\n    },\n    showScroll () {\n      document.documentElement.classList.remove('overflow-y-hidden')\n      window.removeEventListener('wheel', this.scrollListener)\n      window.removeEventListener('keydown', this.scrollListener)\n    }\n  }\n}\n"",""/* @vue/component */\nexport default {\n  methods: {\n    genPickerButton (prop, value, content, readonly = false, staticClass = '') {\n      const active = this[prop] === value\n      const click = event => {\n        event.stopPropagation()\n        this.$emit(`update:${prop}`, value)\n      }\n\n      return this.$createElement('div', {\n        staticClass: `v-picker__title__btn ${staticClass}`.trim(),\n        'class': {\n          'v-picker__title__btn--active': active,\n          'v-picker__title__btn--readonly': readonly\n        },\n        on: (active || readonly) ? undefined : { click }\n      }, Array.isArray(content) ? content : [content])\n    }\n  }\n}\n"",""// Components\nimport VPicker from '../components/VPicker'\n\n// Mixins\nimport Colorable from './colorable'\nimport Themeable from './themeable'\n\n/* @vue/component */\nexport default {\n  name: 'picker',\n\n  mixins: [\n    Colorable,\n    Themeable\n  ],\n\n  props: {\n    fullWidth: Boolean,\n    headerColor: String,\n    landscape: Boolean,\n    noTitle: Boolean,\n    width: {\n      type: [Number, String],\n      default: 290\n    }\n  },\n\n  methods: {\n    genPickerTitle () {},\n    genPickerBody () {},\n    genPickerActionsSlot () {\n      return this.$scopedSlots.default ? this.$scopedSlots.default({\n        save: this.save,\n        cancel: this.cancel\n      }) : this.$slots.default\n    },\n    genPicker (staticClass) {\n      return this.$createElement(VPicker, {\n        staticClass,\n        props: {\n          color: this.headerColor || this.color,\n          dark: this.dark,\n          fullWidth: this.fullWidth,\n          landscape: this.landscape,\n          light: this.light,\n          width: this.width\n        }\n      }, [\n        this.noTitle ? null : this.genPickerTitle(),\n        this.genPickerBody(),\n        this.$createElement('template', { slot: 'actions' }, [this.genPickerActionsSlot()])\n      ])\n    }\n  }\n}\n"",""import Vue from 'vue'\nimport { filterObjectOnKeys } from '../util/helpers'\nimport { OptionsVue } from 'vue/types/vue'\n\nconst availableProps = {\n  absolute: Boolean,\n  bottom: Boolean,\n  fixed: Boolean,\n  left: Boolean,\n  right: Boolean,\n  top: Boolean\n}\ntype props = Record<keyof typeof availableProps, boolean>\n\ntype someProps<S extends keyof props> = { [P in S]: props[P] }\ntype somePropsDef<S extends keyof props> = { [P in S]: typeof availableProps[P] }\ntype Positionable<S extends keyof props> = OptionsVue<Vue, {}, {}, {}, someProps<S>, somePropsDef<S>>\n\nexport function factory <S extends keyof props> (selected?: S[]): Positionable<S>\nexport function factory (selected: undefined): OptionsVue<Vue, {}, {}, {}, props, typeof availableProps>\nexport function factory (selected: any[] = []): any {\n  return Vue.extend({\n    name: 'positionable',\n    props: selected.length ? filterObjectOnKeys(availableProps, selected) : availableProps\n  })\n}\n\nexport default factory()\n\n// Add a `*` before the second `/`\n/* Tests /\nlet single = factory(['top']).extend({\n  created () {\n    this.top\n    this.bottom\n    this.absolute\n  }\n})\n\nlet some = factory(['top', 'bottom']).extend({\n  created () {\n    this.top\n    this.bottom\n    this.absolute\n  }\n})\n\nlet all = factory().extend({\n  created () {\n    this.top\n    this.bottom\n    this.absolute\n    this.foobar\n  }\n})\n/**/\n"",""import Vue, { VueConstructor } from 'vue'\n\n/* eslint-disable-next-line no-use-before-define */\nexport type Proxyable<T extends string = 'value'> = VueConstructor<Vue & {\n  internalLazyValue: unknown\n  internalValue: unknown\n} & Record<T, any>>\n\nexport function factory<T extends string = 'value'> (prop?: T, event?: string): Proxyable<T>\nexport function factory (\n  prop = 'value',\n  event = 'change'\n) {\n  return Vue.extend({\n    name: 'proxyable',\n\n    model: {\n      prop,\n      event\n    },\n\n    props: {\n      [prop]: {\n        required: false\n      }\n    },\n\n    data () {\n      return {\n        internalLazyValue: this[prop] as unknown\n      }\n    },\n\n    computed: {\n      internalValue: {\n        get (): unknown {\n          return this.internalLazyValue\n        },\n        set (val: any) {\n          if (val === this.internalLazyValue) return\n\n          this.internalLazyValue = val\n\n          this.$emit(event, val)\n        }\n      }\n    },\n\n    watch: {\n      [prop] (val) {\n        this.internalLazyValue = val\n      }\n    }\n  })\n}\n\n/* eslint-disable-next-line no-redeclare */\nconst Proxyable = factory()\n\nexport default Proxyable\n"",""import Vue from 'vue'\nimport { VueConstructor } from 'vue/types/vue'\nimport { consoleWarn } from '../util/console'\n\nfunction generateWarning (child: string, parent: string) {\n  return () => consoleWarn(`The ${child} component must be used inside a ${parent}`)\n}\n\nexport type Registrable<T extends string> = VueConstructor<Vue & {\n  [K in T]: {\n    register (...props: any[]): void\n    unregister (self: any): void\n  }\n}>\n\nexport function inject<T extends string> (namespace: T, child?: string, parent?: string): Registrable<T> {\n  const defaultImpl = child && parent ? {\n    register: generateWarning(child, parent),\n    unregister: generateWarning(child, parent)\n  } : null\n\n  return Vue.extend({\n    name: 'registrable-inject',\n\n    inject: {\n      [namespace]: {\n        default: defaultImpl\n      }\n    }\n  })\n}\n\nexport function provide (namespace: string) {\n  return Vue.extend({\n    name: 'registrable-provide',\n\n    methods: {\n      register: null,\n      unregister: null\n    },\n    provide () {\n      return {\n        [namespace]: {\n          register: this.register,\n          unregister: this.unregister\n        }\n      }\n    }\n  })\n}\n"",""import Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n  name: 'returnable',\n\n  props: {\n    returnValue: null as any\n  },\n\n  data: () => ({\n    isActive: false,\n    originalValue: null as any\n  }),\n\n  watch: {\n    isActive (val) {\n      if (val) {\n        this.originalValue = this.returnValue\n      } else {\n        this.$emit('update:returnValue', this.originalValue)\n      }\n    }\n  },\n\n  methods: {\n    save (value: any) {\n      this.originalValue = value\n      this.isActive = false\n    }\n  }\n})\n"",""// Directives\nimport Ripple from '../directives/ripple'\n\n// Types\nimport Vue, { VNode, VNodeData, VNodeDirective } from 'vue'\n\nexport default Vue.extend({\n  name: 'rippleable',\n\n  directives: { Ripple },\n\n  props: {\n    ripple: {\n      type: [Boolean, Object],\n      default: true\n    }\n  },\n\n  methods: {\n    genRipple (data: VNodeData = {}): VNode | null {\n      if (!this.ripple) return null\n\n      data.staticClass = 'v-input--selection-controls__ripple'\n\n      data.directives = data.directives || []\n      data.directives.push({\n        name: 'ripple',\n        value: { center: true }\n      } as VNodeDirective)\n      data.on = Object.assign({\n        click: this.onChange\n      }, this.$listeners)\n\n      return this.$createElement('div', data)\n    },\n    onChange () {}\n  }\n})\n"",""import Vue, { VNodeData } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nimport Ripple, { RippleOptions } from '../directives/ripple'\n\nexport default Vue.extend({\n  name: 'routable',\n\n  directives: {\n    Ripple\n  },\n\n  props: {\n    activeClass: String,\n    append: Boolean,\n    disabled: Boolean,\n    exact: {\n      type: Boolean,\n      default: undefined\n    } as PropValidator<boolean | undefined>,\n    exactActiveClass: String,\n    href: [String, Object],\n    to: [String, Object],\n    nuxt: Boolean,\n    replace: Boolean,\n    ripple: [Boolean, Object],\n    tag: String,\n    target: String\n  },\n\n  computed: {\n    computedRipple (): RippleOptions | boolean {\n      return (this.ripple && !this.disabled) ? this.ripple : false\n    }\n  },\n\n  methods: {\n    /* eslint-disable-next-line no-unused-vars */\n    click (e: MouseEvent): void { /**/ },\n    generateRouteLink (classes: any) {\n      let exact = this.exact\n      let tag\n\n      const data: VNodeData = {\n        attrs: { disabled: this.disabled },\n        class: classes,\n        props: {},\n        directives: [{\n          name: 'ripple',\n          value: this.computedRipple\n        }] as any, // TODO\n        [this.to ? 'nativeOn' : 'on']: {\n          ...this.$listeners,\n          click: this.click\n        }\n      }\n\n      if (typeof this.exact === 'undefined') {\n        exact = this.to === '/' ||\n          (this.to === Object(this.to) && this.to.path === '/')\n      }\n\n      if (this.to) {\n        // Add a special activeClass hook\n        // for component level styles\n        let activeClass = this.activeClass\n        let exactActiveClass = this.exactActiveClass || activeClass\n\n        // TODO: apply only in VListTile\n        if ((this as any).proxyClass) {\n          activeClass += ' ' + (this as any).proxyClass\n          exactActiveClass += ' ' + (this as any).proxyClass\n        }\n\n        tag = this.nuxt ? 'nuxt-link' : 'router-link'\n        Object.assign(data.props, {\n          to: this.to,\n          exact,\n          activeClass,\n          exactActiveClass,\n          append: this.append,\n          replace: this.replace\n        })\n      } else {\n        tag = (this.href && 'a') || this.tag || 'a'\n\n        if (tag === 'a' && this.href) data.attrs!.href = this.href\n      }\n\n      if (this.target) data.attrs!.target = this.target\n\n      return { tag, data }\n    }\n  }\n})\n"",""// Components\nimport VInput from '../components/VInput'\n\n// Mixins\nimport Rippleable from './rippleable'\nimport Comparable from './comparable'\n\n/* @vue/component */\nexport default {\n  name: 'selectable',\n\n  extends: VInput,\n\n  mixins: [Rippleable, Comparable],\n\n  model: {\n    prop: 'inputValue',\n    event: 'change'\n  },\n\n  props: {\n    color: {\n      type: String,\n      default: 'accent'\n    },\n    id: String,\n    inputValue: null,\n    falseValue: null,\n    trueValue: null,\n    multiple: {\n      type: Boolean,\n      default: null\n    },\n    label: String\n  },\n\n  data: vm => ({\n    lazyValue: vm.inputValue\n  }),\n\n  computed: {\n    computedColor () {\n      return this.isActive ? this.color : this.validationState\n    },\n    isMultiple () {\n      return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n    },\n    isActive () {\n      const value = this.value\n      const input = this.internalValue\n\n      if (this.isMultiple) {\n        if (!Array.isArray(input)) return false\n\n        return input.some(item => this.valueComparator(item, value))\n      }\n\n      if (this.trueValue === undefined || this.falseValue === undefined) {\n        return value\n          ? this.valueComparator(value, input)\n          : Boolean(input)\n      }\n\n      return this.valueComparator(input, this.trueValue)\n    },\n    isDirty () {\n      return this.isActive\n    }\n  },\n\n  watch: {\n    inputValue (val) {\n      this.lazyValue = val\n    }\n  },\n\n  methods: {\n    genLabel () {\n      if (!this.hasLabel) return null\n\n      const label = VInput.methods.genLabel.call(this)\n\n      label.data.on = { click: this.onChange }\n\n      return label\n    },\n    genInput (type, attrs) {\n      return this.$createElement('input', {\n        attrs: Object.assign({\n          'aria-label': this.label,\n          'aria-checked': this.isActive.toString(),\n          disabled: this.isDisabled,\n          id: this.id,\n          role: type,\n          type\n        }, attrs),\n        domProps: {\n          value: this.value,\n          checked: this.isActive\n        },\n        on: {\n          blur: this.onBlur,\n          change: this.onChange,\n          focus: this.onFocus,\n          keydown: this.onKeydown\n        },\n        ref: 'input'\n      })\n    },\n    onBlur () {\n      this.isFocused = false\n    },\n    onChange () {\n      if (this.isDisabled) return\n\n      const value = this.value\n      let input = this.internalValue\n\n      if (this.isMultiple) {\n        if (!Array.isArray(input)) {\n          input = []\n        }\n\n        const length = input.length\n\n        input = input.filter(item => !this.valueComparator(item, value))\n\n        if (input.length === length) {\n          input.push(value)\n        }\n      } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n        input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n      } else if (value) {\n        input = this.valueComparator(input, value) ? null : value\n      } else {\n        input = !input\n      }\n\n      this.validate(true, input)\n      this.internalValue = input\n    },\n    onFocus () {\n      this.isFocused = true\n    },\n    /** @abstract */\n    onKeydown (e) {}\n  }\n}\n"",""import Vue from 'vue'\n\nexport default Vue.extend({\n  name: 'sizeable',\n\n  props: {\n    large: Boolean,\n    medium: Boolean,\n    size: {\n      type: [Number, String]\n    },\n    small: Boolean,\n    xLarge: Boolean\n  }\n})\n"",""import Vue from 'vue'\n\n/**\n * SSRBootable\n *\n * @mixin\n *\n * Used in layout components (drawer, toolbar, content)\n * to avoid an entry animation when using SSR\n */\nexport default Vue.extend({\n  name: 'ssr-bootable',\n\n  data: () => ({\n    isBooted: false\n  }),\n\n  mounted () {\n    // Use setAttribute instead of dataset\n    // because dataset does not work well\n    // with unit tests\n    window.requestAnimationFrame(() => {\n      this.$el.setAttribute('data-booted', 'true')\n      this.isBooted = true\n    })\n  }\n})\n"",""import { getZIndex } from '../util/helpers'\n\n/* @vue/component */\nexport default {\n  name: 'stackable',\n\n  data () {\n    return {\n      stackBase: null,\n      stackClass: 'unpecified',\n      stackElement: null,\n      stackExclude: null,\n      stackMinZIndex: 0\n    }\n  },\n  computed: {\n    /**\n     * Currently active z-index\n     *\n     * @return {number}\n     */\n    activeZIndex () {\n      if (typeof window === 'undefined') return 0\n\n      const content = this.stackElement || this.$refs.content\n      // Return current zindex if not active\n\n      const index = !this.isActive\n        ? getZIndex(content)\n        : this.getMaxZIndex(this.stackExclude || [content]) + 2\n\n      if (index == null) return index\n\n      // Return max current z-index (excluding self) + 2\n      // (2 to leave room for an overlay below, if needed)\n      return parseInt(index)\n    }\n  },\n  methods: {\n    getMaxZIndex (exclude = []) {\n      const base = this.stackBase || this.$el\n      // Start with lowest allowed z-index or z-index of\n      // base component's element, whichever is greater\n      const zis = [this.stackMinZIndex, getZIndex(base)]\n      // Convert the NodeList to an array to\n      // prevent an Edge bug with Symbol.iterator\n      // https://github.com/vuetifyjs/vuetify/issues/2146\n      const activeElements = [...document.getElementsByClassName(this.stackClass)]\n\n      // Get z-index for all active dialogs\n      for (let index = 0; index < activeElements.length; index++) {\n        if (!exclude.includes(activeElements[index])) {\n          zis.push(getZIndex(activeElements[index]))\n        }\n      }\n\n      return Math.max(...zis)\n    }\n  }\n}\n"",""import Vue from 'vue'\nimport { PropValidator, RenderContext } from 'vue/types/options'\n\n/* eslint-disable-next-line no-use-before-define */\ninterface Themeable extends Vue {\n  theme: {\n    isDark: boolean\n  }\n}\n\nexport function functionalThemeClasses (context: RenderContext): object {\n  const vm = {\n    ...context.props,\n    ...context.injections\n  }\n  const isDark = Themeable.options.computed.isDark.call(vm)\n  return Themeable.options.computed.themeClasses.call({ isDark })\n}\n\n/* @vue/component */\nconst Themeable = Vue.extend<Themeable>().extend({\n  name: 'themeable',\n\n  provide (): object {\n    return {\n      theme: this.themeableProvide\n    }\n  },\n\n  inject: {\n    theme: {\n      default: {\n        isDark: false\n      }\n    }\n  },\n\n  props: {\n    dark: {\n      type: Boolean,\n      default: null\n    } as PropValidator<boolean | null>,\n    light: {\n      type: Boolean,\n      default: null\n    } as PropValidator<boolean | null>\n  },\n\n  data () {\n    return {\n      themeableProvide: {\n        isDark: false\n      }\n    }\n  },\n\n  computed: {\n    isDark (): boolean {\n      if (this.dark === true) {\n        // explicitly dark\n        return true\n      } else if (this.light === true) {\n        // explicitly light\n        return false\n      } else {\n        // inherit from parent, or default false if there is none\n        return this.theme.isDark\n      }\n    },\n    themeClasses (): object {\n      return {\n        'theme--dark': this.isDark,\n        'theme--light': !this.isDark\n      }\n    },\n    /** Used by menus and dialogs, inherits from v-app instead of the parent */\n    rootIsDark (): boolean {\n      if (this.dark === true) {\n        // explicitly dark\n        return true\n      } else if (this.light === true) {\n        // explicitly light\n        return false\n      } else {\n        // inherit from v-app\n        return this.$vuetify.dark\n      }\n    },\n    rootThemeClasses (): Dictionary<boolean> {\n      return {\n        'theme--dark': this.rootIsDark,\n        'theme--light': !this.rootIsDark\n      }\n    }\n  },\n\n  watch: {\n    isDark: {\n      handler (newVal, oldVal) {\n        if (newVal !== oldVal) {\n          this.themeableProvide.isDark = this.isDark\n        }\n      },\n      immediate: true\n    }\n  }\n})\n\nexport default Themeable\n"",""import Vue, { VueConstructor } from 'vue'\n\n/* eslint-disable-next-line no-use-before-define */\nexport type Toggleable<T extends string = 'value'> = VueConstructor<Vue & { isActive: boolean } & Record<T, any>>\n\nexport function factory<T extends string = 'value'> (prop?: T, event?: string): Toggleable<T>\nexport function factory (prop = 'value', event = 'input') {\n  return Vue.extend({\n    name: 'toggleable',\n\n    model: { prop, event },\n\n    props: {\n      [prop]: { required: false }\n    },\n\n    data () {\n      return {\n        isActive: !!this[prop]\n      }\n    },\n\n    watch: {\n      [prop] (val) {\n        this.isActive = !!val\n      },\n      isActive (val) {\n        !!val !== this[prop] && this.$emit(event, val)\n      }\n    }\n  })\n}\n\n/* eslint-disable-next-line no-redeclare */\nconst Toggleable = factory()\n\nexport default Toggleable\n"",""import Vue from 'vue'\n\nexport default Vue.extend({\n  name: 'transitionable',\n\n  props: {\n    mode: String,\n    origin: String,\n    transition: String\n  }\n})\n"",""import Vue from 'vue'\n\nexport default Vue.extend({\n  name: 'translatable',\n\n  props: {\n    height: Number\n  },\n\n  data: () => ({\n    elOffsetTop: 0,\n    parallax: 0,\n    parallaxDist: 0,\n    percentScrolled: 0,\n    scrollTop: 0,\n    windowHeight: 0,\n    windowBottom: 0\n  }),\n\n  computed: {\n    imgHeight (): number {\n      return this.objHeight()\n    }\n  },\n\n  beforeDestroy () {\n    window.removeEventListener('scroll', this.translate, false)\n    window.removeEventListener('resize', this.translate, false)\n  },\n\n  methods: {\n    calcDimensions () {\n      const offset = this.$el.getBoundingClientRect()\n\n      this.scrollTop = window.pageYOffset\n      this.parallaxDist = this.imgHeight - this.height\n      this.elOffsetTop = offset.top + this.scrollTop\n      this.windowHeight = window.innerHeight\n      this.windowBottom = this.scrollTop + this.windowHeight\n    },\n    listeners () {\n      window.addEventListener('scroll', this.translate, false)\n      window.addEventListener('resize', this.translate, false)\n    },\n    /** @abstract **/\n    objHeight (): number {\n      throw new Error('Not implemented !')\n    },\n    translate () {\n      this.calcDimensions()\n\n      this.percentScrolled = (\n        (this.windowBottom - this.elOffsetTop) /\n        (parseInt(this.height) + this.windowHeight)\n      )\n\n      this.parallax = Math.round(this.parallaxDist * this.percentScrolled)\n    }\n  }\n})\n"",""import { deepEqual } from '../util/helpers'\nimport { inject as RegistrableInject } from './registrable'\nimport { consoleError } from '../util/console'\n\n// Mixins\nimport Colorable from './colorable'\n\n/* @vue/component */\nexport default {\n  name: 'validatable',\n\n  mixins: [\n    Colorable,\n    RegistrableInject('form')\n  ],\n\n  props: {\n    disabled: Boolean,\n    error: Boolean,\n    errorCount: {\n      type: [Number, String],\n      default: 1\n    },\n    errorMessages: {\n      type: [String, Array],\n      default: () => []\n    },\n    messages: {\n      type: [String, Array],\n      default: () => []\n    },\n    readonly: Boolean,\n    rules: {\n      type: Array,\n      default: () => []\n    },\n    success: Boolean,\n    successMessages: {\n      type: [String, Array],\n      default: () => []\n    },\n    validateOnBlur: Boolean\n  },\n\n  data: () => ({\n    errorBucket: [],\n    hasColor: false,\n    hasFocused: false,\n    hasInput: false,\n    isFocused: false,\n    isResetting: false,\n    valid: false\n  }),\n\n  computed: {\n    hasError () {\n      return this.internalErrorMessages.length > 0 ||\n        this.errorBucket.length > 0 ||\n        this.error\n    },\n    externalError () {\n      return this.internalErrorMessages.length > 0 || this.error\n    },\n    // TODO: Add logic that allows the user to enable based\n    // upon a good validation\n    hasSuccess () {\n      return this.successMessages.length > 0 ||\n        this.success\n    },\n    hasMessages () {\n      return this.validations.length > 0\n    },\n    hasState () {\n      return this.hasSuccess || (this.shouldValidate && this.hasError)\n    },\n    internalErrorMessages () {\n      return this.errorMessages || ''\n    },\n    shouldValidate () {\n      return this.externalError || (!this.isResetting && (\n        this.validateOnBlur\n          ? this.hasFocused && !this.isFocused\n          : (this.hasInput || this.hasFocused)\n      ))\n    },\n    validations () {\n      return this.validationTarget.slice(0, this.errorCount)\n    },\n    validationState () {\n      if (this.hasError && this.shouldValidate) return 'error'\n      if (this.hasSuccess) return 'success'\n      if (this.hasColor) return this.color\n      return null\n    },\n    validationTarget () {\n      const target = this.internalErrorMessages.length > 0\n        ? this.errorMessages\n        : this.successMessages.length > 0\n          ? this.successMessages\n          : this.messages\n\n      // String\n      if (!Array.isArray(target)) {\n        return [target]\n      // Array with items\n      } else if (target.length > 0) {\n        return target\n      // Currently has validation\n      } else if (this.shouldValidate) {\n        return this.errorBucket\n      } else {\n        return []\n      }\n    }\n  },\n\n  watch: {\n    rules: {\n      handler (newVal, oldVal) {\n        if (deepEqual(newVal, oldVal)) return\n        this.validate()\n      },\n      deep: true\n    },\n    internalValue () {\n      // If it's the first time we're setting input,\n      // mark it with hasInput\n      this.hasInput = true\n      this.validateOnBlur || this.$nextTick(this.validate)\n    },\n    isFocused (val) {\n      // Should not check validation\n      // if disabled or readonly\n      if (\n        !val &&\n        !this.disabled &&\n        !this.readonly\n      ) {\n        this.hasFocused = true\n        this.validateOnBlur && this.validate()\n      }\n    },\n    isResetting () {\n      setTimeout(() => {\n        this.hasInput = false\n        this.hasFocused = false\n        this.isResetting = false\n      }, 0)\n    },\n    hasError (val) {\n      if (this.shouldValidate) {\n        this.$emit('update:error', val)\n      }\n    }\n  },\n\n  beforeMount () {\n    this.validate()\n  },\n\n  created () {\n    this.form && this.form.register(this)\n  },\n\n  beforeDestroy () {\n    this.form && this.form.unregister(this)\n  },\n\n  methods: {\n    /** @public */\n    reset () {\n      this.isResetting = true\n      this.internalValue = Array.isArray(this.internalValue)\n        ? []\n        : undefined\n    },\n    /** @public */\n    resetValidation () {\n      this.isResetting = true\n    },\n    /** @public */\n    validate (force = false, value = this.internalValue) {\n      const errorBucket = []\n\n      if (force) this.hasInput = this.hasFocused = true\n\n      for (let index = 0; index < this.rules.length; index++) {\n        const rule = this.rules[index]\n        const valid = typeof rule === 'function' ? rule(value) : rule\n\n        if (valid === false || typeof valid === 'string') {\n          errorBucket.push(valid)\n        } else if (valid !== true) {\n          consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n        }\n      }\n\n      this.errorBucket = errorBucket\n      this.valid = errorBucket.length === 0\n\n      return this.valid\n    }\n  }\n}\n"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""// extracted by mini-css-extract-plugin"",""import { VNode } from 'vue'\nimport Themeable from '../mixins/themeable'\nimport mixins from './mixins'\n\n/* @vue/component */\nexport default mixins(Themeable).extend({\n  name: 'theme-provider',\n\n  props: {\n    root: Boolean\n  },\n\n  computed: {\n    isDark (): boolean {\n      return this.root ? this.rootIsDark : Themeable.options.computed.isDark.call(this)\n    }\n  },\n\n  render (): VNode {\n    return this.$slots.default! && this.$slots.default.find(node => !node.isComment && node.text !== ' ')!\n  }\n})\n"",""import { XYZ, LAB } from '../colorUtils'\n\nconst delta = 0.20689655172413793 // 6÷29\n\nconst cielabForwardTransform = (t: number): number => (\n  t > delta ** 3\n    ? Math.cbrt(t)\n    : (t / (3 * delta ** 2)) + 4 / 29\n)\n\nconst cielabReverseTransform = (t: number): number => (\n  t > delta\n    ? t ** 3\n    : (3 * delta ** 2) * (t - 4 / 29)\n)\n\nexport function fromXYZ (xyz: XYZ): LAB {\n  const transform = cielabForwardTransform\n  const transformedY = transform(xyz[1])\n\n  return [\n    116 * transformedY - 16,\n    500 * (transform(xyz[0] / 0.95047) - transformedY),\n    200 * (transformedY - transform(xyz[2] / 1.08883))\n  ]\n}\n\nexport function toXYZ (lab: LAB): XYZ {\n  const transform = cielabReverseTransform\n  const Ln = (lab[0] + 16) / 116\n  return [\n    transform(Ln + lab[1] / 500) * 0.95047,\n    transform(Ln),\n    transform(Ln - lab[2] / 200) * 1.08883\n  ]\n}\n"",""import { RGB, XYZ } from '../colorUtils'\n\n// For converting XYZ to sRGB\nconst srgbForwardMatrix = [\n  [3.2406, -1.5372, -0.4986],\n  [-0.9689, 1.8758, 0.0415],\n  [0.0557, -0.2040, 1.0570]\n]\n\n// Forward gamma adjust\nconst srgbForwardTransform = (C: number): number => (\n  C <= 0.0031308\n    ? C * 12.92\n    : 1.055 * C ** (1 / 2.4) - 0.055\n)\n\n// For converting sRGB to XYZ\nconst srgbReverseMatrix = [\n  [0.4124, 0.3576, 0.1805],\n  [0.2126, 0.7152, 0.0722],\n  [0.0193, 0.1192, 0.9505]\n]\n\n// Reverse gamma adjust\nconst srgbReverseTransform = (C: number): number => (\n  C <= 0.04045\n    ? C / 12.92\n    : ((C + 0.055) / 1.055) ** 2.4\n)\n\nfunction clamp (value: number): number {\n  return Math.max(0, Math.min(1, value))\n}\n\nexport function fromXYZ (xyz: XYZ): RGB {\n  const rgb = Array(3)\n  const transform = srgbForwardTransform\n  const matrix = srgbForwardMatrix\n\n  // Matrix transform, then gamma adjustment\n  for (let i = 0; i < 3; ++i) {\n    rgb[i] = Math.round(clamp(transform(\n      matrix[i][0] * xyz[0] +\n      matrix[i][1] * xyz[1] +\n      matrix[i][2] * xyz[2]\n    )) * 255)\n  }\n\n  // Rescale back to [0, 255]\n  return (rgb[0] << 16) + (rgb[1] << 8) + (rgb[2] << 0)\n}\n\nexport function toXYZ (rgb: RGB): XYZ {\n  const xyz: XYZ = [0, 0, 0]\n  const transform = srgbReverseTransform\n  const matrix = srgbReverseMatrix\n\n  // Rescale from [0, 255] to [0, 1] then adjust sRGB gamma to linear RGB\n  const r = transform((rgb >> 16 & 0xff) / 255)\n  const g = transform((rgb >> 8 & 0xff) / 255)\n  const b = transform((rgb >> 0 & 0xff) / 255)\n\n  // Matrix color space transform\n  for (let i = 0; i < 3; ++i) {\n    xyz[i] = matrix[i][0] * r + matrix[i][1] * g + matrix[i][2] * b\n  }\n\n  return xyz\n}\n"",""import { consoleWarn } from './console'\n\nexport type RGB = number\nexport type XYZ = [number, number, number]\nexport type LAB = [number, number, number]\n\nexport function colorToInt (color: string | number | {}): RGB {\n  let rgb\n\n  if (typeof color === 'number') {\n    rgb = color\n  } else if (typeof color === 'string') {\n    let c = color[0] === '#' ? color.substring(1) : color\n    if (c.length === 3) {\n      c = c.split('').map(char => char + char).join('')\n    }\n    if (c.length !== 6) {\n      consoleWarn(`'${color}' is not a valid rgb color`)\n    }\n    rgb = parseInt(c, 16)\n  } else {\n    throw new TypeError(`Colors can only be numbers or strings, recieved ${color == null ? color : color.constructor.name} instead`)\n  }\n\n  if (rgb < 0) {\n    consoleWarn(`Colors cannot be negative: '${color}'`)\n    rgb = 0\n  } else if (rgb > 0xffffff || isNaN(rgb)) {\n    consoleWarn(`'${color}' is not a valid rgb color`)\n    rgb = 0xffffff\n  }\n\n  return rgb\n}\n\nexport function intToHex (color: RGB): string {\n  let hexColor: string = color.toString(16)\n\n  if (hexColor.length < 6) hexColor = '0'.repeat(6 - hexColor.length) + hexColor\n\n  return '#' + hexColor\n}\n\nexport function colorToHex (color: string | number | {}): string {\n  return intToHex(colorToInt(color))\n}\n"",""function createMessage (message: string, vm?: any, parent?: any): string | void {\n  if (parent) {\n    vm = {\n      _isVue: true,\n      $parent: parent,\n      $options: vm\n    }\n  }\n\n  if (vm) {\n    // Only show each message once per instance\n    vm.$_alreadyWarned = vm.$_alreadyWarned || []\n    if (vm.$_alreadyWarned.includes(message)) return\n    vm.$_alreadyWarned.push(message)\n  }\n\n  return `[Vuetify] ${message}` + (\n    vm ? generateComponentTrace(vm) : ''\n  )\n}\n\nexport function consoleInfo (message: string, vm?: any, parent?: any): void {\n  const newMessage = createMessage(message, vm, parent)\n  newMessage != null && console.info(newMessage)\n}\n\nexport function consoleWarn (message: string, vm?: any, parent?: any): void {\n  const newMessage = createMessage(message, vm, parent)\n  newMessage != null && console.warn(newMessage)\n}\n\nexport function consoleError (message: string, vm?: any, parent?: any): void {\n  const newMessage = createMessage(message, vm, parent)\n  newMessage != null && console.error(newMessage)\n}\n\nexport function deprecate (original: string, replacement: string, vm?: any, parent?: any) {\n  consoleWarn(`'${original}' is deprecated, use '${replacement}' instead`, vm, parent)\n}\n\n/**\n * Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = (str: string) => str\n  .replace(classifyRE, c => c.toUpperCase())\n  .replace(/[-_]/g, '')\n\nfunction formatComponentName (vm: any, includeFile?: boolean): string {\n  if (vm.$root === vm) {\n    return '<Root>'\n  }\n  const options = typeof vm === 'function' && vm.cid != null\n    ? vm.options\n    : vm._isVue\n      ? vm.$options || vm.constructor.options\n      : vm || {}\n  let name = options.name || options._componentTag\n  const file = options.__file\n  if (!name && file) {\n    const match = file.match(/([^/\\\\]+)\\.vue$/)\n    name = match && match[1]\n  }\n\n  return (\n    (name ? `<${classify(name)}>` : `<Anonymous>`) +\n    (file && includeFile !== false ? ` at ${file}` : '')\n  )\n}\n\nfunction generateComponentTrace (vm: any): string {\n  if (vm._isVue && vm.$parent) {\n    const tree = []\n    let currentRecursiveSequence = 0\n    while (vm) {\n      if (tree.length > 0) {\n        const last: any = tree[tree.length - 1]\n        if (last.constructor === vm.constructor) {\n          currentRecursiveSequence++\n          vm = vm.$parent\n          continue\n        } else if (currentRecursiveSequence > 0) {\n          tree[tree.length - 1] = [last, currentRecursiveSequence]\n          currentRecursiveSequence = 0\n        }\n      }\n      tree.push(vm)\n      vm = vm.$parent\n    }\n    return '\\n\\nfound in\\n\\n' + tree\n      .map((vm, i) => `${\n        i === 0 ? '---> ' : ' '.repeat(5 + i * 2)\n      }${\n        Array.isArray(vm)\n          ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n          : formatComponentName(vm)\n      }`)\n      .join('\\n')\n  } else {\n    return `\\n\\n(found in ${formatComponentName(vm)})`\n  }\n}\n"",""import { VNodeData } from 'vue'\n\n/**\n * Removes duplicate `@input` listeners when\n * using v-model with functional components\n *\n * @see https://github.com/vuetifyjs/vuetify/issues/4460\n */\nexport default function dedupeModelListeners (data: VNodeData): void {\n  if (data.model && data.on && data.on.input) {\n    if (Array.isArray(data.on.input)) {\n      const i = data.on.input.indexOf(data.model.callback)\n      if (i > -1) data.on.input.splice(i, 1)\n    } else {\n      delete data.on.input\n    }\n  }\n}\n"",""// linear\nexport const linear = t => t\n// accelerating from zero velocity\nexport const easeInQuad = t => t * t\n// decelerating to zero velocity\nexport const easeOutQuad = t => t * (2 - t)\n// acceleration until halfway, then deceleration\nexport const easeInOutQuad = t => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t)\n// accelerating from zero velocity\nexport const easeInCubic = t => t * t * t\n// decelerating to zero velocity\nexport const easeOutCubic = t => --t * t * t + 1\n// acceleration until halfway, then deceleration\nexport const easeInOutCubic = t => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n// accelerating from zero velocity\nexport const easeInQuart = t => t * t * t * t\n// decelerating to zero velocity\nexport const easeOutQuart = t => 1 - --t * t * t * t\n// acceleration until halfway, then deceleration\nexport const easeInOutQuart = t => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t)\n// accelerating from zero velocity\nexport const easeInQuint = t => t * t * t * t * t\n// decelerating to zero velocity\nexport const easeOutQuint = t => 1 + --t * t * t * t * t\n// acceleration until halfway, then deceleration\nexport const easeInOutQuint = t => t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t\n"",""import { Vue } from 'vue/types/vue'\nimport { VNode, VNodeDirective, FunctionalComponentOptions } from 'vue/types'\n\nexport function createSimpleFunctional (\n  c: string,\n  el = 'div',\n  name?: string\n): FunctionalComponentOptions {\n  return {\n    name: name || c.replace(/__/g, '-'),\n\n    functional: true,\n\n    render (h, { data, children }): VNode {\n      data.staticClass = (`${c} ${data.staticClass || ''}`).trim()\n\n      return h(el, data, children)\n    }\n  }\n}\n\nfunction mergeTransitions (\n  transitions: undefined | Function | Function[],\n  array: Function[]\n) {\n  if (Array.isArray(transitions)) return transitions.concat(array)\n  if (transitions) array.push(transitions)\n  return array\n}\n\nexport function createSimpleTransition (\n  name: string,\n  origin = 'top center 0',\n  mode?: string\n): FunctionalComponentOptions {\n  return {\n    name,\n\n    functional: true,\n\n    props: {\n      group: {\n        type: Boolean,\n        default: false\n      },\n      hideOnLeave: {\n        type: Boolean,\n        default: false\n      },\n      leaveAbsolute: {\n        type: Boolean,\n        default: false\n      },\n      mode: {\n        type: String,\n        default: mode\n      },\n      origin: {\n        type: String,\n        default: origin\n      }\n    },\n\n    render (h, context): VNode {\n      const tag = `transition${context.props.group ? '-group' : ''}`\n      context.data = context.data || {}\n      context.data.props = {\n        name,\n        mode: context.props.mode\n      }\n      context.data.on = context.data.on || {}\n      if (!Object.isExtensible(context.data.on)) {\n        context.data.on = { ...context.data.on }\n      }\n\n      const ourBeforeEnter: Function[] = []\n      const ourLeave: Function[] = []\n      const absolute = (el: HTMLElement) => (el.style.position = 'absolute')\n\n      ourBeforeEnter.push((el: HTMLElement) => {\n        el.style.transformOrigin = context.props.origin\n        el.style.webkitTransformOrigin = context.props.origin\n      })\n\n      if (context.props.leaveAbsolute) ourLeave.push(absolute)\n      if (context.props.hideOnLeave) {\n        ourLeave.push((el: HTMLElement) => (el.style.display = 'none'))\n      }\n\n      const { beforeEnter, leave } = context.data.on\n\n      // Type says Function | Function[] but\n      // will only work if provided a function\n      context.data.on.beforeEnter = () => mergeTransitions(beforeEnter, ourBeforeEnter)\n      context.data.on.leave = mergeTransitions(leave, ourLeave)\n\n      return h(tag, context.data, context.children)\n    }\n  }\n}\n\nexport function createJavaScriptTransition (\n  name: string,\n  functions: Record<string, () => any>,\n  mode = 'in-out'\n): FunctionalComponentOptions {\n  return {\n    name,\n\n    functional: true,\n\n    props: {\n      mode: {\n        type: String,\n        default: mode\n      }\n    },\n\n    render (h, context): VNode {\n      const data = {\n        props: {\n          ...context.props,\n          name\n        },\n        on: functions\n      }\n\n      return h('transition', data, context.children)\n    }\n  }\n}\n\nexport type BindingConfig = Pick<VNodeDirective, 'arg' | 'modifiers' | 'value'>\nexport function directiveConfig (binding: BindingConfig, defaults = {}): VNodeDirective {\n  return {\n    ...defaults,\n    ...binding.modifiers,\n    value: binding.arg,\n    ...(binding.value || {})\n  }\n}\n\nexport function addOnceEventListener (el: EventTarget, event: string, cb: () => void): void {\n  var once = () => {\n    cb()\n    el.removeEventListener(event, once, false)\n  }\n\n  el.addEventListener(event, once, false)\n}\n\nexport function getNestedValue (obj: any, path: (string | number)[], fallback?: any): any {\n  const last = path.length - 1\n\n  if (last < 0) return obj === undefined ? fallback : obj\n\n  for (let i = 0; i < last; i++) {\n    if (obj == null) {\n      return fallback\n    }\n    obj = obj[path[i]]\n  }\n\n  if (obj == null) return fallback\n\n  return obj[path[last]] === undefined ? fallback : obj[path[last]]\n}\n\nexport function deepEqual (a: any, b: any): boolean {\n  if (a === b) return true\n\n  if (a instanceof Date && b instanceof Date) {\n    // If the values are Date, they were convert to timestamp with getTime and compare it\n    if (a.getTime() !== b.getTime()) return false\n  }\n\n  if (a !== Object(a) || b !== Object(b)) {\n    // If the values aren't objects, they were already checked for equality\n    return false\n  }\n\n  const props = Object.keys(a)\n\n  if (props.length !== Object.keys(b).length) {\n    // Different number of props, don't bother to check\n    return false\n  }\n\n  return props.every(p => deepEqual(a[p], b[p]))\n}\n\nexport function getObjectValueByPath (obj: object, path: string, fallback?: any): any {\n  // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n  if (!path || path.constructor !== String) return fallback\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n  path = path.replace(/^\\./, '') // strip a leading dot\n  return getNestedValue(obj, path.split('.'), fallback)\n}\n\nexport function getPropertyFromItem (\n  item: object,\n  property: string | (string | number)[] | ((item: object, fallback?: any) => any),\n  fallback?: any\n): any {\n  if (property == null) return item === undefined ? fallback : item\n\n  if (item !== Object(item)) return fallback === undefined ? item : fallback\n\n  if (typeof property === 'string') return getObjectValueByPath(item, property, fallback)\n\n  if (Array.isArray(property)) return getNestedValue(item, property, fallback)\n\n  if (typeof property !== 'function') return fallback\n\n  const value = property(item, fallback)\n\n  return typeof value === 'undefined' ? fallback : value\n}\n\nexport function createRange (length: number): number[] {\n  return Array.from({ length }, (v, k) => k)\n}\n\nexport function getZIndex (el?: Element | null): number {\n  if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\n\n  const index = +window.getComputedStyle(el).getPropertyValue('z-index')\n\n  if (isNaN(index)) return getZIndex(el.parentNode as Element)\n  return index\n}\n\nconst tagsToReplace = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;'\n} as any\n\nexport function escapeHTML (str: string): string {\n  return str.replace(/[&<>]/g, tag => tagsToReplace[tag] || tag)\n}\n\nexport function filterObjectOnKeys<T, K extends keyof T> (obj: T, keys: K[]): { [N in K]: T[N] } {\n  const filtered = {} as { [N in K]: T[N] }\n\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i]\n    if (typeof obj[key] !== 'undefined') {\n      filtered[key] = obj[key]\n    }\n  }\n\n  return filtered\n}\n\nexport function filterChildren (array: VNode[] = [], tag: string): VNode[] {\n  return array.filter(child => {\n    return child.componentOptions &&\n      child.componentOptions.Ctor.options.name === tag\n  })\n}\n\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\n  if (str == null || str === '') {\n    return undefined\n  } else if (isNaN(+str!)) {\n    return String(str)\n  } else {\n    return `${Number(str)}${unit}`\n  }\n}\n\nexport function kebabCase (str: string): string {\n  return (str || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n}\n\nexport function isObject (obj: any): obj is object {\n  return obj !== null && typeof obj === 'object'\n}\n\n// KeyboardEvent.keyCode aliases\nexport const keyCodes = Object.freeze({\n  enter: 13,\n  tab: 9,\n  delete: 46,\n  esc: 27,\n  space: 32,\n  up: 38,\n  down: 40,\n  left: 37,\n  right: 39,\n  end: 35,\n  home: 36,\n  del: 46,\n  backspace: 8,\n  insert: 45,\n  pageup: 33,\n  pagedown: 34\n})\n\nconst ICONS_PREFIX = '$vuetify.icons.'\n\n// This remaps internal names like '$vuetify.icons.cancel' to the current name\n// for that icon.\nexport function remapInternalIcon (vm: Vue, iconName: string): string {\n  if (!iconName.startsWith(ICONS_PREFIX)) {\n    return iconName\n  }\n\n  // Now look up icon indirection name, e.g. '$vuetify.icons.cancel'\n  return getObjectValueByPath(vm, iconName, iconName)\n}\n\nexport function keys<O> (o: O) {\n  return Object.keys(o) as (keyof O)[]\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nconst camelizeRE = /-(\\w)/g\nexport const camelize = (str: string): string => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')\n}\n"",""/**\n * Default delimiter RegExp\n *\n * @type {RegExp}\n */\nexport const defaultDelimiters = /[-!$%^&*()_+|~=`{}[\\]:\"";'<>?,./\\\\ ]/\n\n/**\n *\n * @param {String} char\n *\n * @return {Boolean}\n */\nexport const isMaskDelimiter = char => char && defaultDelimiters.test(char)\n\n/**\n * Mask keys\n *\n * @type {Object}\n */\nconst allowedMasks = {\n  '#': {\n    test: char => char.match(/[0-9]/)\n  },\n  'A': {\n    test: char => char.match(/[A-Z]/i),\n    convert: char => char.toUpperCase()\n  },\n  'a': {\n    test: char => char.match(/[a-z]/i),\n    convert: char => char.toLowerCase()\n  },\n  'N': {\n    test: char => char.match(/[0-9A-Z]/i),\n    convert: char => char.toUpperCase()\n  },\n  'n': {\n    test: char => char.match(/[0-9a-z]/i),\n    convert: char => char.toLowerCase()\n  },\n  'X': {\n    test: isMaskDelimiter\n  }\n}\n\n/**\n * Is Character mask\n *\n * @param  {String} char\n *\n * @return {Boolean}\n */\nconst isMask = char => allowedMasks.hasOwnProperty(char)\n\n/**\n * Automatically convert char case\n *\n * @param  {String} mask\n * @param  {String} char\n *\n * @return {String}\n */\nconst convert = (mask, char) => {\n  return allowedMasks[mask].convert ? allowedMasks[mask].convert(char) : char\n}\n\n/**\n * Mask Validation\n *\n * @param  {String} mask\n * @param  {String} char\n *\n * @return {Boolean}\n */\nconst maskValidates = (mask, char) => {\n  if (char == null || !isMask(mask)) return false\n  return allowedMasks[mask].test(char)\n}\n\n/**\n * Mask Text\n *\n * Takes a string or an array of characters\n * and returns a masked string\n *\n * @param {*} text\n * @param {Array|String} masked\n * @param {Boolean} [dontFillMaskBlanks]\n *\n * @return {String}\n */\nexport const maskText = (text, masked, dontFillMaskBlanks) => {\n  if (text == null) return ''\n  text = String(text)\n  if (!masked.length || !text.length) return text\n  if (!Array.isArray(masked)) masked = masked.split('')\n\n  let textIndex = 0\n  let maskIndex = 0\n  let newText = ''\n\n  while (maskIndex < masked.length) {\n    const mask = masked[maskIndex]\n\n    // Assign the next character\n    const char = text[textIndex]\n\n    // Check if mask is delimiter\n    // and current char matches\n    if (!isMask(mask) && char === mask) {\n      newText += mask\n      textIndex++\n    // Check if not mask\n    } else if (!isMask(mask) && !dontFillMaskBlanks) {\n      newText += mask\n    // Check if is mask and validates\n    } else if (maskValidates(mask, char)) {\n      newText += convert(mask, char)\n      textIndex++\n    } else {\n      return newText\n    }\n\n    maskIndex++\n  }\n\n  return newText\n}\n\n/**\n * Unmask Text\n *\n * @param {String} text\n *\n * @return {String}\n */\nexport const unmaskText = text => {\n  return text ? String(text).replace(new RegExp(defaultDelimiters, 'g'), '') : text\n}\n"",""/* eslint-disable max-len, import/export, no-use-before-define */\nimport Vue, { VueConstructor } from 'vue'\n\nexport default function mixins<T extends VueConstructor[]> (...args: T): ExtractVue<T> extends infer V ? V extends Vue ? VueConstructor<V> : never : never\nexport default function mixins<T extends Vue> (...args: VueConstructor[]): VueConstructor<T>\nexport default function mixins (...args: VueConstructor[]): VueConstructor {\n  return Vue.extend({ mixins: args })\n}\n\n/**\n * Returns the instance type from a VueConstructor\n * Useful for adding types when using mixins().extend()\n */\nexport type ExtractVue<T extends VueConstructor | VueConstructor[]> = T extends (infer U)[]\n  ? UnionToIntersection<\n    U extends VueConstructor<infer V> ? V : never\n  >\n  : T extends VueConstructor<infer V> ? V : never\n\ntype UnionToIntersection<U> =\n  (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never\n"",""/**\n *\n * @param {object} slots\n * @param {function} h\n * @returns {array}\n */\nexport default function rebuildFunctionalSlots (slots, h) {\n  const children = []\n\n  for (const slot in slots) {\n    if (slots.hasOwnProperty(slot)) {\n      children.push(h('template', { slot }, slots[slot]))\n    }\n  }\n\n  return children\n}\n"",""import { colorToInt, intToHex, colorToHex, RGB } from './colorUtils'\nimport * as sRGB from './color/transformSRGB'\nimport * as LAB from './color/transformCIELAB'\nimport { VuetifyTheme } from 'vuetify/types'\n\ninterface ParsedThemeItem {\n  base: string\n  lighten5: string\n  lighten4: string\n  lighten3: string\n  lighten2: string\n  lighten1: string\n  darken1: string\n  darken2: string\n  darken3: string\n  darken4: string\n\n  [name: string]: string\n}\n\ninterface ParsedTheme {\n  [name: string]: ParsedThemeItem\n}\n\nexport function parse (theme: VuetifyTheme | Record<string, number | string>, isItem = false): ParsedTheme {\n  const colors = Object.keys(theme)\n  const parsedTheme: any = {}\n\n  for (let i = 0; i < colors.length; ++i) {\n    const name = colors[i]\n    const value = theme[name]\n\n    if (isItem) {\n      if (name === 'base' || name.startsWith('lighten') || name.startsWith('darken')) {\n        parsedTheme[name] = colorToHex(value)\n      }\n    } else if (typeof value === 'object') {\n      parsedTheme[name] = parse(value, true)\n    } else {\n      parsedTheme[name] = genVariations(name, colorToInt(value))\n    }\n  }\n\n  return parsedTheme\n}\n\n/**\n * Generate the CSS for a base color (.primary)\n */\nconst genBaseColor = (name: string, value: string): string => {\n  return `\n.${name} {\n  background-color: ${value} !important;\n  border-color: ${value} !important;\n}\n.${name}--text {\n  color: ${value} !important;\n  caret-color: ${value} !important;\n}`\n}\n\n/**\n * Generate the CSS for a variant color (.primary.darken-2)\n */\nconst genVariantColor = (name: string, variant: string, value: string): string => {\n  const [type, n] = variant.split(/(\\d)/, 2)\n  return `\n.${name}.${type}-${n} {\n  background-color: ${value} !important;\n  border-color: ${value} !important;\n}\n.${name}--text.text--${type}-${n} {\n  color: ${value} !important;\n  caret-color: ${value} !important;\n}`\n}\n\nconst genColorVariableName = (name: string, variant = 'base'): string => `--v-${name}-${variant}`\n\nconst genColorVariable = (name: string, variant = 'base'): string => `var(${genColorVariableName(name, variant)})`\n\nexport function genStyles (theme: ParsedTheme, cssVar = false): string {\n  const colors = Object.keys(theme)\n\n  if (!colors.length) return ''\n\n  let variablesCss = ''\n  let css = ''\n\n  const aColor = cssVar ? genColorVariable('primary') : theme.primary.base\n  css += `a { color: ${aColor}; }`\n\n  for (let i = 0; i < colors.length; ++i) {\n    const name = colors[i]\n    const value = theme[name]\n\n    if (typeof value !== 'object') continue\n\n    css += genBaseColor(name, cssVar ? genColorVariable(name) : value.base)\n    cssVar && (variablesCss += `  ${genColorVariableName(name)}: ${value.base};\\n`)\n\n    const variants = Object.keys(value)\n    for (let i = 0; i < variants.length; ++i) {\n      const variant = variants[i]\n      const variantValue = value[variant]\n      if (variant === 'base') continue\n\n      css += genVariantColor(name, variant, cssVar ? genColorVariable(name, variant) : variantValue)\n      cssVar && (variablesCss += `  ${genColorVariableName(name, variant)}: ${variantValue};\\n`)\n    }\n  }\n\n  if (cssVar) {\n    variablesCss = `:root {\\n${variablesCss}}\\n\\n`\n  }\n\n  return variablesCss + css\n}\n\nexport function genVariations (name: string, value: RGB): Record<string, string> {\n  const values: Record<string, string> = {\n    base: intToHex(value)\n  }\n\n  for (let i = 5; i > 0; --i) {\n    values[`lighten${i}`] = intToHex(lighten(value, i))\n  }\n\n  for (let i = 1; i <= 4; ++i) {\n    values[`darken${i}`] = intToHex(darken(value, i))\n  }\n\n  return values\n}\n\nfunction lighten (value: RGB, amount: number): RGB {\n  const lab = LAB.fromXYZ(sRGB.toXYZ(value))\n  lab[0] = lab[0] + amount * 10\n  return sRGB.fromXYZ(LAB.toXYZ(lab))\n}\n\nfunction darken (value: RGB, amount: number): RGB {\n  const lab = LAB.fromXYZ(sRGB.toXYZ(value))\n  lab[0] = lab[0] - amount * 10\n  return sRGB.fromXYZ(LAB.toXYZ(lab))\n}\n"",""module.exports = __WEBPACK_EXTERNAL_MODULE_vue__;""],""sourceRoot"":""""}"
f39d90d07f2c63d12293e054eaa73a4f7662e7aa,15036514,			$document.open(); //damn Firefox. kudos: http://stackoverflow.com/questions/15036514/why-can-i-not-set-innerhtml-of-an-iframe-body-in-firefox
87d866cc771666973d66606d7f9904cc88d2c49a,686217,     * @see http://stackoverflow.com/questions/686217/maximum-on-http-header-values
399d3824f5743f1e13470b27508cda1819633800,34778391,// http://stackoverflow.com/questions/34736771/webpack-umd-library-return-object-default/34778391#34778391
96368d6614122815c9c58512f6758677a3d1a867,9524309,// From http://stackoverflow.com/questions/9524309/enumdisplaydevices-function-not-working-for-me
f5e32364da0072be6e820628a89a81d17abf7cc6,14006555,	 * @link http://stackoverflow.com/a/14006555/556258
05d5a6eec21d5f10316732b63ddbcac7e68dab73,4134307,        //Got from https://stackoverflow.com/questions/4102758/outofmemory-exception-when-loading-bitmap-from-external-storage/4134307#4134307
7662f51fc01fcaf3d4e9ab5bc5783bf74f5f1cd4,10086404,     * CIDR section taken from https://stackoverflow.com/a/10086404
16888701ca0c415f65c648d6a26c6fe4bde8bb9d,4617291,    https://stackoverflow.com/questions/4617291/how-do-i-get-a-raw-compiled-sql-query-from-a-sqlalchemy-expression
093a91f4cad41a330ac4f9f998e04f7da6cb1e1a,3330919,        // http://stackoverflow.com/a/3330919)
248f55bf8cf26e520d7315df978de8e4a40ce967,36803176,    // http://stackoverflow.com/questions/36803176/how-to-prevent-the-play-request-was-interrupted-by-a-call-to-pause-error
17de354c1ad583c6e1dc44c7d056b65ea6c1bb3c,9534136,rem http://stackoverflow.com/questions/9534136/how-to-create-a-new-database-after-initally-installing-oracle-database-11g-expre
117d6ad70915d952985c14150bfb1d86fb4574a4,8144214,"      <p><a target=""_blank"" href=""http://expressjs.com/""> Express</a> is a NodeJS server-side application web framework. Check out <a target=""_blank"" href=""http://expressjs.com/4x/api.html"">The ExpressJS API reference for more information</a> or <a target=""_blank"" href=""http://stackoverflow.com/questions/8144214/learning-express-for-node-js"">StackOverflow</a> for more info.</p>"
1ed96de5c707c2cf336ec60ae7e600b0d9908236,11698139,        // workaround for bug in AccountManager (http://stackoverflow.com/a/11698139/1045199)
54e4b9749be9114177fe7a9a9c7d6db0b576624a,3505900,        // http://stackoverflow.com/questions/3505900/sqliteopenhelper-onupgrade-confusion-android
8ff403aa2a15bdf03e06413b64f80c7ff3209cd9,19770778,            // Taken from http://stackoverflow.com/a/19770778/486660
f53a44cdf09566d6538154af22657c4571d7a8fd,2659312,	* [PIL](http://stackoverflow.com/questions/2659312/how-do-i-convert-a-numpy-array-to-and-display-an-image)
8eb3839c440aebc44b04a8b08e8e817e7554aac6,263416,            // credit: http://stackoverflow.com/a/263416/677735
f754d336d7aa1c23a2d3dbb13858c0529c3f9d28,237104,   * http://stackoverflow.com/questions/237104/array-containsobj-in-javascript
a409218aa095ee065512765eed742b1917141231,2108727,# source: https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
78aa3bf108e2fdb55bc8d920d32d3382c24757f1,4025065,# From https://stackoverflow.com/a/4025065
9b4e16e20f60be037cbd0a118640fa2962ba8dbc,5539378,"// Handle browsers that do console incorrectly (IE9 and below, see http://stackoverflow.com/a/5539378/7913)"
51068fe2b8070c44ce380d9ff86232280f3d1fbc,1903954,// http://stackoverflow.com/questions/1903954/is-there-a-standard-sign-function-signum-sgn-in-c-c
480821b45c695b771d04c9381ecbbaa614e8fc53,723112,                // - http://stackoverflow.com/questions/723112/jquery-fastest-way-to-remove-all-rows-from-a-very-large-table
60218e6b80fe53c99c799a6d2329401efd14dcea,3330919,        // http://stackoverflow.com/a/3330919)
9b842f01aa234ec7a12182616e5727dc37d8d653,15260984,http://stackoverflow.com/questions/15260984/guidelines-for-where-to-put-classes-in-rails-apps-that-dont-fit-anywhere
bb055843906f6c2e57ce6d048bddaa3030d73682,3639993,            # http://stackoverflow.com/a/3639993/1191373
2b067cd9178b6592d0a528bb6972bf534feb47d0,13864829,	# Thx to http://stackoverflow.com/a/13864829/1012103 on how to check if METASFRESH_WEBUI_FRONTEND_HOME is set
495148c92e12e39d7210544bf79a58c9a95622f1,27232658,  // https://stackoverflow.com/a/27232658/1468532
329c1167341bc57b110f73c3b59dc9f43d9da73d,4094811,		// http://stackoverflow.com/questions/4094811/javascript-clonenode-and-properties
31a6c00cf723bff363e09c16aaa4d50ed03ce582,3653444 1444562,"    ""/**\n * @file player.js\n */\n // Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport * as stylesheet from './utils/stylesheet.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\nimport textTrackConverter from './tracks/text-track-list-converter.js';\nimport AudioTrackList from './tracks/audio-track-list.js';\nimport VideoTrackList from './tracks/video-track-list.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\nimport ModalDialog from './modal-dialog';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Tech from './tech/tech.js';\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * <video id=\""example_video_1\"" data-setup='{}' controls>\n *   <source src=\""my-source.mp4\"" type=\""video/mp4\"">\n * </video>\n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag        The original video tag used for configuring options\n * @param {Object=} options    Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n  /**\n   * player's constructor function\n   *\n   * @constructs\n   * @method init\n   * @param {Element} tag        The original video tag used for configuring options\n   * @param {Object=} options    Player options\n   * @param {Function=} ready    Ready callback function\n   */\n  constructor(tag, options, ready){\n    // Make sure tag ID exists\n    tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n    // Set Options\n    // The options argument overrides options set in the video tag\n    // which overrides globally set options.\n    // This latter part coincides with the load order\n    // (tag must exist before Player)\n    options = assign(Player.getTagSettings(tag), options);\n\n    // Delay the initialization of children because we need to set up\n    // player properties first, and can't use `this` before `super()`\n    options.initChildren = false;\n\n    // Same with creating the element\n    options.createEl = false;\n\n    // we don't want the player to report touch activity on itself\n    // see enableTouchActivity in Component\n    options.reportTouchActivity = false;\n\n    // If language is not set, get the closest lang attribute\n    if (!options.language) {\n      if (typeof tag.closest === 'function') {\n        let closest = tag.closest('[lang]');\n        if (closest) {\n          options.language = closest.getAttribute('lang');\n        }\n      } else {\n        let element = tag;\n        while (element && element.nodeType === 1) {\n          if (Dom.getElAttributes(element).hasOwnProperty('lang')) {\n            options.language = element.getAttribute('lang');\n            break;\n          }\n          element = element.parentNode;\n        }\n      }\n    }\n\n    // Run base component initializing with new options\n    super(null, options, ready);\n\n    // if the global option object was accidentally blown away by\n    // someone, bail early with an informative error\n    if (!this.options_ ||\n        !this.options_.techOrder ||\n        !this.options_.techOrder.length) {\n      throw new Error('No techOrder specified. Did you overwrite ' +\n                      'videojs.options instead of just changing the ' +\n                      'properties you want to override?');\n    }\n\n    this.tag = tag; // Store the original tag used to set options\n\n    // Store the tag attributes used to restore html5 element\n    this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n    // Update current language\n    this.language(this.options_.language);\n\n    // Update Supported Languages\n    if (options.languages) {\n      // Normalise player option languages to lowercase\n      let languagesToLower = {};\n\n      Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n        languagesToLower[name.toLowerCase()] = options.languages[name];\n      });\n      this.languages_ = languagesToLower;\n    } else {\n      this.languages_ = Player.prototype.options_.languages;\n    }\n\n    // Cache for video property values.\n    this.cache_ = {};\n\n    // Set poster\n    this.poster_ = options.poster || '';\n\n    // Set controls\n    this.controls_ = !!options.controls;\n\n    // Original tag settings stored in options\n    // now remove immediately so native controls don't flash.\n    // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n    tag.controls = false;\n\n    /*\n     * Store the internal state of scrubbing\n     *\n     * @private\n     * @return {Boolean} True if the user is scrubbing\n     */\n    this.scrubbing_ = false;\n\n    this.el_ = this.createEl();\n\n    // We also want to pass the original player options to each component and plugin\n    // as well so they don't need to reach back into the player for options later.\n    // We also need to do another copy of this.options_ so we don't end up with\n    // an infinite loop.\n    let playerOptionsCopy = mergeOptions(this.options_);\n\n    // Load plugins\n    if (options.plugins) {\n      let plugins = options.plugins;\n\n      Object.getOwnPropertyNames(plugins).forEach(function(name){\n        if (typeof this[name] === 'function') {\n          this[name](plugins[name]);\n        } else {\n          log.error('Unable to find plugin:', name);\n        }\n      }, this);\n    }\n\n    this.options_.playerOptions = playerOptionsCopy;\n\n    this.initChildren();\n\n    // Set isAudio based on whether or not an audio tag was used\n    this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n    // Update controls className. Can't do this when the controls are initially\n    // set because the element doesn't exist yet.\n    if (this.controls()) {\n      this.addClass('vjs-controls-enabled');\n    } else {\n      this.addClass('vjs-controls-disabled');\n    }\n\n    // Set ARIA label and region role depending on player type\n    this.el_.setAttribute('role', 'region');\n    if (this.isAudio()) {\n      this.el_.setAttribute('aria-label', 'audio player');\n    } else {\n      this.el_.setAttribute('aria-label', 'video player');\n    }\n\n    if (this.isAudio()) {\n      this.addClass('vjs-audio');\n    }\n\n    if (this.flexNotSupported_()) {\n      this.addClass('vjs-no-flex');\n    }\n\n    // TODO: Make this smarter. Toggle user state between touching/mousing\n    // using events, since devices can have both touch and mouse events.\n    // if (browser.TOUCH_ENABLED) {\n    //   this.addClass('vjs-touch-enabled');\n    // }\n\n    // iOS Safari has broken hover handling\n    if (!browser.IS_IOS) {\n      this.addClass('vjs-workinghover');\n    }\n\n    // Make player easily findable by ID\n    Player.players[this.id_] = this;\n\n    // When the player is first initialized, trigger activity so components\n    // like the control bar show themselves if needed\n    this.userActive(true);\n    this.reportUserActivity();\n    this.listenForUserActivity_();\n\n    this.on('fullscreenchange', this.handleFullscreenChange_);\n    this.on('stageclick', this.handleStageClick_);\n  }\n\n  /**\n   * Destroys the video player and does any necessary cleanup\n   * ```js\n   *     myPlayer.dispose();\n   * ```\n   * This is especially helpful if you are dynamically adding and removing videos\n   * to/from the DOM.\n   *\n   * @method dispose\n   */\n  dispose() {\n    this.trigger('dispose');\n    // prevent dispose from being called twice\n    this.off('dispose');\n\n    if (this.styleEl_ && this.styleEl_.parentNode) {\n      this.styleEl_.parentNode.removeChild(this.styleEl_);\n    }\n\n    // Kill reference to this player\n    Player.players[this.id_] = null;\n    if (this.tag && this.tag.player) { this.tag.player = null; }\n    if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n    if (this.tech_) { this.tech_.dispose(); }\n\n    super.dispose();\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = this.el_ = super.createEl('div');\n    let tag = this.tag;\n\n    // Remove width/height attrs from tag so CSS can make it 100% width/height\n    tag.removeAttribute('width');\n    tag.removeAttribute('height');\n\n    // Copy over all the attributes from the tag, including ID and class\n    // ID will now reference player box, not the video tag\n    const attrs = Dom.getElAttributes(tag);\n\n    Object.getOwnPropertyNames(attrs).forEach(function(attr){\n      // workaround so we don't totally break IE7\n      // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n      if (attr === 'class') {\n        el.className = attrs[attr];\n      } else {\n        el.setAttribute(attr, attrs[attr]);\n      }\n    });\n\n    // Update tag id/class for use as HTML5 playback tech\n    // Might think we should do this after embedding in container so .vjs-tech class\n    // doesn't flash 100% width/height, but class only applies with .video-js parent\n    tag.playerId = tag.id;\n    tag.id += '_html5_api';\n    tag.className = 'vjs-tech';\n\n    // Make player findable on elements\n    tag.player = el.player = this;\n    // Default state of video is paused\n    this.addClass('vjs-paused');\n\n    // Add a style element in the player that we'll use to set the width/height\n    // of the player in a way that's still overrideable by CSS, just like the\n    // video element\n    if (window.VIDEOJS_NO_DYNAMIC_STYLE !== true) {\n      this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n      let defaultsStyleEl = Dom.$('.vjs-styles-defaults');\n      let head = Dom.$('head');\n      head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n    }\n\n    // Pass in the width/height/aspectRatio options which will update the style el\n    this.width(this.options_.width);\n    this.height(this.options_.height);\n    this.fluid(this.options_.fluid);\n    this.aspectRatio(this.options_.aspectRatio);\n\n    // Hide any links within the video/audio tag, because IE doesn't hide them completely.\n    let links = tag.getElementsByTagName('a');\n    for (let i = 0; i < links.length; i++) {\n      let linkEl = links.item(i);\n      Dom.addElClass(linkEl, 'vjs-hidden');\n      linkEl.setAttribute('hidden', 'hidden');\n    }\n\n    // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n    // keep track of the original for later so we can know if the source originally failed\n    tag.initNetworkState_ = tag.networkState;\n\n    // Wrap video tag in div (el/box) container\n    if (tag.parentNode) {\n      tag.parentNode.insertBefore(el, tag);\n    }\n\n    // insert the tag as the first child of the player element\n    // then manually add it to the children array so that this.addChild\n    // will work properly for other components\n    Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n    this.children_.unshift(tag);\n\n    this.el_ = el;\n\n    return el;\n  }\n\n  /**\n   * Get/set player width\n   *\n   * @param {Number=} value Value for width\n   * @return {Number} Width when getting\n   * @method width\n   */\n  width(value) {\n    return this.dimension('width', value);\n  }\n\n  /**\n   * Get/set player height\n   *\n   * @param {Number=} value Value for height\n   * @return {Number} Height when getting\n   * @method height\n   */\n  height(value) {\n    return this.dimension('height', value);\n  }\n\n  /**\n   * Get/set dimension for player\n   *\n   * @param {String} dimension Either width or height\n   * @param {Number=} value Value for dimension\n   * @return {Component}\n   * @method dimension\n   */\n  dimension(dimension, value) {\n    let privDimension = dimension + '_';\n\n    if (value === undefined) {\n      return this[privDimension] || 0;\n    }\n\n    if (value === '') {\n      // If an empty string is given, reset the dimension to be automatic\n      this[privDimension] = undefined;\n    } else {\n      let parsedVal = parseFloat(value);\n\n      if (isNaN(parsedVal)) {\n        log.error(`Improper value \""${value}\"" supplied for for ${dimension}`);\n        return this;\n      }\n\n      this[privDimension] = parsedVal;\n    }\n\n    this.updateStyleEl_();\n    return this;\n  }\n\n  /**\n   * Add/remove the vjs-fluid class\n   *\n   * @param {Boolean} bool Value of true adds the class, value of false removes the class\n   * @method fluid\n   */\n  fluid(bool) {\n    if (bool === undefined) {\n      return !!this.fluid_;\n    }\n\n    this.fluid_ = !!bool;\n\n    if (bool) {\n      this.addClass('vjs-fluid');\n    } else {\n      this.removeClass('vjs-fluid');\n    }\n  }\n\n  /**\n   * Get/Set the aspect ratio\n   *\n   * @param {String=} ratio Aspect ratio for player\n   * @return aspectRatio\n   * @method aspectRatio\n   */\n  aspectRatio(ratio) {\n    if (ratio === undefined) {\n      return this.aspectRatio_;\n    }\n\n    // Check for width:height format\n    if (!/^\\d+\\:\\d+$/.test(ratio)) {\n      throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n    }\n    this.aspectRatio_ = ratio;\n\n    // We're assuming if you set an aspect ratio you want fluid mode,\n    // because in fixed mode you could calculate width and height yourself.\n    this.fluid(true);\n\n    this.updateStyleEl_();\n  }\n\n  /**\n   * Update styles of the player element (height, width and aspect ratio)\n   *\n   * @method updateStyleEl_\n   */\n  updateStyleEl_() {\n    if (window.VIDEOJS_NO_DYNAMIC_STYLE === true) {\n      const width = typeof this.width_ === 'number' ? this.width_ : this.options_.width;\n      const height = typeof this.height_ === 'number' ? this.height_ : this.options_.height;\n      let techEl = this.tech_ && this.tech_.el();\n\n      if (techEl) {\n        if (width >= 0) {\n          techEl.width = width;\n        }\n        if (height >= 0) {\n          techEl.height = height;\n        }\n      }\n\n      return;\n    }\n\n    let width;\n    let height;\n    let aspectRatio;\n    let idClass;\n\n    // The aspect ratio is either used directly or to calculate width and height.\n    if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n      // Use any aspectRatio that's been specifically set\n      aspectRatio = this.aspectRatio_;\n    } else if (this.videoWidth()) {\n      // Otherwise try to get the aspect ratio from the video metadata\n      aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n    } else {\n      // Or use a default. The video element's is 2:1, but 16:9 is more common.\n      aspectRatio = '16:9';\n    }\n\n    // Get the ratio as a decimal we can use to calculate dimensions\n    let ratioParts = aspectRatio.split(':');\n    let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n    if (this.width_ !== undefined) {\n      // Use any width that's been specifically set\n      width = this.width_;\n    } else if (this.height_ !== undefined) {\n      // Or calulate the width from the aspect ratio if a height has been set\n      width = this.height_ / ratioMultiplier;\n    } else {\n      // Or use the video's metadata, or use the video el's default of 300\n      width = this.videoWidth() || 300;\n    }\n\n    if (this.height_ !== undefined) {\n      // Use any height that's been specifically set\n      height = this.height_;\n    } else {\n      // Otherwise calculate the height from the ratio and the width\n      height = width  * ratioMultiplier;\n    }\n\n    // Ensure the CSS class is valid by starting with an alpha character\n    if (/^[^a-zA-Z]/.test(this.id())) {\n      idClass = 'dimensions-'+this.id();\n    } else {\n      idClass = this.id()+'-dimensions';\n    }\n\n    // Ensure the right class is still on the player for the style element\n    this.addClass(idClass);\n\n    stylesheet.setTextContent(this.styleEl_, `\n      .${idClass} {\n        width: ${width}px;\n        height: ${height}px;\n      }\n\n      .${idClass}.vjs-fluid {\n        padding-top: ${ratioMultiplier * 100}%;\n      }\n    `);\n  }\n\n  /**\n   * Load the Media Playback Technology (tech)\n   * Load/Create an instance of playback technology including element and API methods\n   * And append playback element in player div.\n   *\n   * @param {String} techName Name of the playback technology\n   * @param {String} source Video source\n   * @method loadTech_\n   * @private\n   */\n  loadTech_(techName, source) {\n\n    // Pause and remove current playback technology\n    if (this.tech_) {\n      this.unloadTech_();\n    }\n\n    // get rid of the HTML5 video tag as soon as we are using another tech\n    if (techName !== 'Html5' && this.tag) {\n      Tech.getTech('Html5').disposeMediaElement(this.tag);\n      this.tag.player = null;\n      this.tag = null;\n    }\n\n    this.techName_ = techName;\n\n    // Turn off API access because we're loading a new tech that might load asynchronously\n    this.isReady_ = false;\n\n    // Grab tech-specific options from player options and add source and parent element to use.\n    var techOptions = assign({\n      'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n      'source': source,\n      'playerId': this.id(),\n      'techId': `${this.id()}_${techName}_api`,\n      'videoTracks': this.videoTracks_,\n      'textTracks': this.textTracks_,\n      'audioTracks': this.audioTracks_,\n      'autoplay': this.options_.autoplay,\n      'preload': this.options_.preload,\n      'loop': this.options_.loop,\n      'muted': this.options_.muted,\n      'poster': this.poster(),\n      'language': this.language(),\n      'vtt.js': this.options_['vtt.js']\n    }, this.options_[techName.toLowerCase()]);\n\n    if (this.tag) {\n      techOptions.tag = this.tag;\n    }\n\n    if (source) {\n      this.currentType_ = source.type;\n      if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n        techOptions.startTime = this.cache_.currentTime;\n      }\n\n      this.cache_.src = source.src;\n    }\n\n    // Initialize tech instance\n    let techComponent = Tech.getTech(techName);\n    // Support old behavior of techs being registered as components.\n    // Remove once that deprecated behavior is removed.\n    if (!techComponent) {\n      techComponent = Component.getComponent(techName);\n    }\n    this.tech_ = new techComponent(techOptions);\n\n    // player.triggerReady is always async, so don't need this to be async\n    this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);\n\n    textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech_);\n\n    // Listen to all HTML5-defined events and trigger them on the player\n    this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);\n    this.on(this.tech_, 'waiting', this.handleTechWaiting_);\n    this.on(this.tech_, 'canplay', this.handleTechCanPlay_);\n    this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);\n    this.on(this.tech_, 'playing', this.handleTechPlaying_);\n    this.on(this.tech_, 'ended', this.handleTechEnded_);\n    this.on(this.tech_, 'seeking', this.handleTechSeeking_);\n    this.on(this.tech_, 'seeked', this.handleTechSeeked_);\n    this.on(this.tech_, 'play', this.handleTechPlay_);\n    this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);\n    this.on(this.tech_, 'pause', this.handleTechPause_);\n    this.on(this.tech_, 'progress', this.handleTechProgress_);\n    this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);\n    this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);\n    this.on(this.tech_, 'error', this.handleTechError_);\n    this.on(this.tech_, 'suspend', this.handleTechSuspend_);\n    this.on(this.tech_, 'abort', this.handleTechAbort_);\n    this.on(this.tech_, 'emptied', this.handleTechEmptied_);\n    this.on(this.tech_, 'stalled', this.handleTechStalled_);\n    this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);\n    this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);\n    this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);\n    this.on(this.tech_, 'ratechange', this.handleTechRateChange_);\n    this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);\n    this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);\n    this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);\n    this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);\n    this.on(this.tech_, 'textdata', this.handleTechTextData_);\n\n    this.usingNativeControls(this.techGet_('controls'));\n\n    if (this.controls() && !this.usingNativeControls()) {\n      this.addTechControlsListeners_();\n    }\n\n    // Add the tech element in the DOM if it was not already there\n    // Make sure to not insert the original video element if using Html5\n    if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n      Dom.insertElFirst(this.tech_.el(), this.el());\n    }\n\n    // Get rid of the original video tag reference after the first tech is loaded\n    if (this.tag) {\n      this.tag.player = null;\n      this.tag = null;\n    }\n  }\n\n  /**\n   * Unload playback technology\n   *\n   * @method unloadTech_\n   * @private\n   */\n  unloadTech_() {\n    // Save the current text tracks so that we can reuse the same text tracks with the next tech\n    this.videoTracks_ = this.videoTracks();\n    this.textTracks_ = this.textTracks();\n    this.audioTracks_ = this.audioTracks();\n    this.textTracksJson_ = textTrackConverter.textTracksToJson(this.tech_);\n\n    this.isReady_ = false;\n\n    this.tech_.dispose();\n\n    this.tech_ = false;\n  }\n\n  /**\n   * Return a reference to the current tech.\n   * It will only return a reference to the tech if given an object with the\n   * `IWillNotUseThisInPlugins` property on it. This is try and prevent misuse\n   * of techs by plugins.\n   *\n   * @param {Object}\n   * @return {Object} The Tech\n   * @method tech\n   */\n  tech(safety) {\n    if (safety && safety.IWillNotUseThisInPlugins) {\n      return this.tech_;\n    }\n    let errorText = `\n      Please make sure that you are not using this inside of a plugin.\n      To disable this alert and error, please pass in an object with\n      \\`IWillNotUseThisInPlugins\\` to the \\`tech\\` method. See\n      https://github.com/videojs/video.js/issues/2617 for more info.\n    `;\n    window.alert(errorText);\n    throw new Error(errorText);\n  }\n\n  /**\n   * Set up click and touch listeners for the playback element\n   *\n   * On desktops, a click on the video itself will toggle playback,\n   * on a mobile device a click on the video toggles controls.\n   * (toggling controls is done by toggling the user state between active and\n   * inactive)\n   * A tap can signal that a user has become active, or has become inactive\n   * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n   * quick tap should hide them again (signaling the user is in an inactive\n   * viewing state)\n   * In addition to this, we still want the user to be considered inactive after\n   * a few seconds of inactivity.\n   * Note: the only part of iOS interaction we can't mimic with this setup\n   * is a touch and hold on the video element counting as activity in order to\n   * keep the controls showing, but that shouldn't be an issue. A touch and hold\n   * on any controls will still keep the user active\n   *\n   * @private\n   * @method addTechControlsListeners_\n   */\n  addTechControlsListeners_() {\n    // Make sure to remove all the previous listeners in case we are called multiple times.\n    this.removeTechControlsListeners_();\n\n    // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n    // trigger mousedown/up.\n    // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n    // Any touch events are set to block the mousedown event from happening\n    this.on(this.tech_, 'mousedown', this.handleTechClick_);\n\n    // If the controls were hidden we don't want that to change without a tap event\n    // so we'll check if the controls were already showing before reporting user\n    // activity\n    this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);\n    this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);\n    this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);\n\n    // The tap listener needs to come after the touchend listener because the tap\n    // listener cancels out any reportedUserActivity when setting userActive(false)\n    this.on(this.tech_, 'tap', this.handleTechTap_);\n  }\n\n  /**\n   * Remove the listeners used for click and tap controls. This is needed for\n   * toggling to controls disabled, where a tap/touch should do nothing.\n   *\n   * @method removeTechControlsListeners_\n   * @private\n   */\n  removeTechControlsListeners_() {\n    // We don't want to just use `this.off()` because there might be other needed\n    // listeners added by techs that extend this.\n    this.off(this.tech_, 'tap', this.handleTechTap_);\n    this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);\n    this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);\n    this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);\n    this.off(this.tech_, 'mousedown', this.handleTechClick_);\n  }\n\n  /**\n   * Player waits for the tech to be ready\n   *\n   * @method handleTechReady_\n   * @private\n   */\n  handleTechReady_() {\n    this.triggerReady();\n\n    // Keep the same volume as before\n    if (this.cache_.volume) {\n      this.techCall_('setVolume', this.cache_.volume);\n    }\n\n    // Look if the tech found a higher resolution poster while loading\n    this.handleTechPosterChange_();\n\n    // Update the duration if available\n    this.handleTechDurationChange_();\n\n    // Chrome and Safari both have issues with autoplay.\n    // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n    // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n    // This fixes both issues. Need to wait for API, so it updates displays correctly\n    if ((this.src() || this.currentSrc()) && this.tag && this.options_.autoplay && this.paused()) {\n      try {\n        delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n      }\n      catch (e) {\n        log('deleting tag.poster throws in some browsers', e);\n      }\n      this.play();\n    }\n  }\n\n  /**\n   * Fired when the user agent begins looking for media data\n   *\n   * @private\n   * @method handleTechLoadStart_\n   */\n  handleTechLoadStart_() {\n    // TODO: Update to use `emptied` event instead. See #1277.\n\n    this.removeClass('vjs-ended');\n\n    // reset the error state\n    this.error(null);\n\n    // If it's already playing we want to trigger a firstplay event now.\n    // The firstplay event relies on both the play and loadstart events\n    // which can happen in any order for a new source\n    if (!this.paused()) {\n      this.trigger('loadstart');\n      this.trigger('firstplay');\n    } else {\n      // reset the hasStarted state\n      this.hasStarted(false);\n      this.trigger('loadstart');\n    }\n  }\n\n  /**\n   * Add/remove the vjs-has-started class\n   *\n   * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n   * @return {Boolean} Boolean value if has started\n   * @private\n   * @method hasStarted\n   */\n  hasStarted(hasStarted) {\n    if (hasStarted !== undefined) {\n      // only update if this is a new value\n      if (this.hasStarted_ !== hasStarted) {\n        this.hasStarted_ = hasStarted;\n        if (hasStarted) {\n          this.addClass('vjs-has-started');\n          // trigger the firstplay event if this newly has played\n          this.trigger('firstplay');\n        } else {\n          this.removeClass('vjs-has-started');\n        }\n      }\n      return this;\n    }\n    return !!this.hasStarted_;\n  }\n\n  /**\n   * Fired whenever the media begins or resumes playback\n   *\n   * @private\n   * @method handleTechPlay_\n   */\n  handleTechPlay_() {\n    this.removeClass('vjs-ended');\n    this.removeClass('vjs-paused');\n    this.addClass('vjs-playing');\n\n    // hide the poster when the user hits play\n    // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n    this.hasStarted(true);\n\n    this.trigger('play');\n  }\n\n  /**\n   * Fired whenever the media begins waiting\n   *\n   * @private\n   * @method handleTechWaiting_\n   */\n  handleTechWaiting_() {\n    this.addClass('vjs-waiting');\n    this.trigger('waiting');\n    this.one('timeupdate', () => this.removeClass('vjs-waiting'));\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechCanPlay_\n   */\n  handleTechCanPlay_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('canplay');\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechCanPlayThrough_\n   */\n  handleTechCanPlayThrough_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('canplaythrough');\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechPlaying_\n   */\n  handleTechPlaying_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('playing');\n  }\n\n  /**\n   * Fired whenever the player is jumping to a new time\n   *\n   * @private\n   * @method handleTechSeeking_\n   */\n  handleTechSeeking_() {\n    this.addClass('vjs-seeking');\n    this.trigger('seeking');\n  }\n\n  /**\n   * Fired when the player has finished jumping to a new time\n   *\n   * @private\n   * @method handleTechSeeked_\n   */\n  handleTechSeeked_() {\n    this.removeClass('vjs-seeking');\n    this.trigger('seeked');\n  }\n\n  /**\n   * Fired the first time a video is played\n   * Not part of the HLS spec, and we're not sure if this is the best\n   * implementation yet, so use sparingly. If you don't have a reason to\n   * prevent playback, use `myPlayer.one('play');` instead.\n   *\n   * @private\n   * @method handleTechFirstPlay_\n   */\n  handleTechFirstPlay_() {\n    //If the first starttime attribute is specified\n    //then we will start at the given offset in seconds\n    if(this.options_.starttime){\n      this.currentTime(this.options_.starttime);\n    }\n\n    this.addClass('vjs-has-started');\n    this.trigger('firstplay');\n  }\n\n  /**\n   * Fired whenever the media has been paused\n   *\n   * @private\n   * @method handleTechPause_\n   */\n  handleTechPause_() {\n    this.removeClass('vjs-playing');\n    this.addClass('vjs-paused');\n    this.trigger('pause');\n  }\n\n  /**\n   * Fired while the user agent is downloading media data\n   *\n   * @private\n   * @method handleTechProgress_\n   */\n  handleTechProgress_() {\n    this.trigger('progress');\n  }\n\n  /**\n   * Fired when the end of the media resource is reached (currentTime == duration)\n   *\n   * @private\n   * @method handleTechEnded_\n   */\n  handleTechEnded_() {\n    this.addClass('vjs-ended');\n    if (this.options_.loop) {\n      this.currentTime(0);\n      this.play();\n    } else if (!this.paused()) {\n      this.pause();\n    }\n\n    this.trigger('ended');\n  }\n\n  /**\n   * Fired when the duration of the media resource is first known or changed\n   *\n   * @private\n   * @method handleTechDurationChange_\n   */\n  handleTechDurationChange_() {\n    this.duration(this.techGet_('duration'));\n  }\n\n  /**\n   * Handle a click on the media element to play/pause\n   *\n   * @param {Object=} event Event object\n   * @private\n   * @method handleTechClick_\n   */\n  handleTechClick_(event) {\n    // We're using mousedown to detect clicks thanks to Flash, but mousedown\n    // will also be triggered with right-clicks, so we need to prevent that\n    if (event.button !== 0) return;\n\n    // When controls are disabled a click should not toggle playback because\n    // the click is considered a control\n    if (this.controls()) {\n      if (this.paused()) {\n        this.play();\n      } else {\n        this.pause();\n      }\n    }\n  }\n\n  /**\n   * Handle a tap on the media element. It will toggle the user\n   * activity state, which hides and shows the controls.\n   *\n   * @private\n   * @method handleTechTap_\n   */\n  handleTechTap_() {\n    this.userActive(!this.userActive());\n  }\n\n  /**\n   * Handle touch to start\n   *\n   * @private\n   * @method handleTechTouchStart_\n   */\n  handleTechTouchStart_() {\n    this.userWasActive = this.userActive();\n  }\n\n  /**\n   * Handle touch to move\n   *\n   * @private\n   * @method handleTechTouchMove_\n   */\n  handleTechTouchMove_() {\n    if (this.userWasActive){\n      this.reportUserActivity();\n    }\n  }\n\n  /**\n   * Handle touch to end\n   *\n   * @private\n   * @method handleTechTouchEnd_\n   */\n  handleTechTouchEnd_(event) {\n    // Stop the mouse events from also happening\n    event.preventDefault();\n  }\n\n  /**\n   * Fired when the player switches in or out of fullscreen mode\n   *\n   * @private\n   * @method handleFullscreenChange_\n   */\n  handleFullscreenChange_() {\n    if (this.isFullscreen()) {\n      this.addClass('vjs-fullscreen');\n    } else {\n      this.removeClass('vjs-fullscreen');\n    }\n  }\n\n  /**\n   * native click events on the SWF aren't triggered on IE11, Win8.1RT\n   * use stageclick events triggered from inside the SWF instead\n   *\n   * @private\n   * @method handleStageClick_\n   */\n  handleStageClick_() {\n    this.reportUserActivity();\n  }\n\n  /**\n   * Handle Tech Fullscreen Change\n   *\n   * @private\n   * @method handleTechFullscreenChange_\n   */\n  handleTechFullscreenChange_(event, data) {\n    if (data) {\n      this.isFullscreen(data.isFullscreen);\n    }\n    this.trigger('fullscreenchange');\n  }\n\n  /**\n   * Fires when an error occurred during the loading of an audio/video\n   *\n   * @private\n   * @method handleTechError_\n   */\n  handleTechError_() {\n    let error = this.tech_.error();\n    this.error(error);\n  }\n\n  /**\n   * Fires when the browser is intentionally not getting media data\n   *\n   * @private\n   * @method handleTechSuspend_\n   */\n  handleTechSuspend_() {\n    this.trigger('suspend');\n  }\n\n  /**\n   * Fires when the loading of an audio/video is aborted\n   *\n   * @private\n   * @method handleTechAbort_\n   */\n  handleTechAbort_() {\n    this.trigger('abort');\n  }\n\n  /**\n   * Fires when the current playlist is empty\n   *\n   * @private\n   * @method handleTechEmptied_\n   */\n  handleTechEmptied_() {\n    this.trigger('emptied');\n  }\n\n  /**\n   * Fires when the browser is trying to get media data, but data is not available\n   *\n   * @private\n   * @method handleTechStalled_\n   */\n  handleTechStalled_() {\n    this.trigger('stalled');\n  }\n\n  /**\n   * Fires when the browser has loaded meta data for the audio/video\n   *\n   * @private\n   * @method handleTechLoadedMetaData_\n   */\n  handleTechLoadedMetaData_() {\n    this.trigger('loadedmetadata');\n  }\n\n  handleTechTextData_() {\n    var data = null;\n    if (arguments.length > 1) {\n      data = arguments[1];\n    }\n    this.trigger('textdata', data);\n  }\n\n  /**\n   * Fires when the browser has loaded the current frame of the audio/video\n   *\n   * @private\n   * @method handleTechLoadedData_\n   */\n  handleTechLoadedData_() {\n    this.trigger('loadeddata');\n  }\n\n  /**\n   * Fires when the current playback position has changed\n   *\n   * @private\n   * @method handleTechTimeUpdate_\n   */\n  handleTechTimeUpdate_() {\n    this.trigger('timeupdate');\n  }\n\n  /**\n   * Fires when the playing speed of the audio/video is changed\n   *\n   * @private\n   * @method handleTechRateChange_\n   */\n  handleTechRateChange_() {\n    this.trigger('ratechange');\n  }\n\n  /**\n   * Fires when the volume has been changed\n   *\n   * @private\n   * @method handleTechVolumeChange_\n   */\n  handleTechVolumeChange_() {\n    this.trigger('volumechange');\n  }\n\n  /**\n   * Fires when the text track has been changed\n   *\n   * @private\n   * @method handleTechTextTrackChange_\n   */\n  handleTechTextTrackChange_() {\n    this.trigger('texttrackchange');\n  }\n\n  /**\n   * Get object for cached values.\n   *\n   * @return {Object}\n   * @method getCache\n   */\n  getCache() {\n    return this.cache_;\n  }\n\n  /**\n   * Pass values to the playback tech\n   *\n   * @param {String=} method Method\n   * @param {Object=} arg Argument\n   * @private\n   * @method techCall_\n   */\n  techCall_(method, arg) {\n    // If it's not ready yet, call method when it is\n    if (this.tech_ && !this.tech_.isReady_) {\n      this.tech_.ready(function(){\n        this[method](arg);\n      }, true);\n\n    // Otherwise call method now\n    } else {\n      try {\n        this.tech_ && this.tech_[method](arg);\n      } catch(e) {\n        log(e);\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Get calls can't wait for the tech, and sometimes don't need to.\n   *\n   * @param {String} method Tech method\n   * @return {Method}\n   * @private\n   * @method techGet_\n   */\n  techGet_(method) {\n    if (this.tech_ && this.tech_.isReady_) {\n\n      // Flash likes to die and reload when you hide or reposition it.\n      // In these cases the object methods go away and we get errors.\n      // When that happens we'll catch the errors and inform tech that it's not ready any more.\n      try {\n        return this.tech_[method]();\n      } catch(e) {\n        // When building additional tech libs, an expected method may not be defined yet\n        if (this.tech_[method] === undefined) {\n          log(`Video.js: ${method} method not defined for ${this.techName_} playback technology.`, e);\n        } else {\n          // When a method isn't available on the object it throws a TypeError\n          if (e.name === 'TypeError') {\n            log(`Video.js: ${method} unavailable on ${this.techName_} playback technology element.`, e);\n            this.tech_.isReady_ = false;\n          } else {\n            log(e);\n          }\n        }\n        throw e;\n      }\n    }\n\n    return;\n  }\n\n  /**\n   * start media playback\n   * ```js\n   *     myPlayer.play();\n   * ```\n   *\n   * @return {Player} self\n   * @method play\n   */\n  play() {\n    // Only calls the tech's play if we already have a src loaded\n    if (this.src() || this.currentSrc()) {\n      this.techCall_('play');\n    } else {\n      this.tech_.one('loadstart', function() {\n        this.play();\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Pause the video playback\n   * ```js\n   *     myPlayer.pause();\n   * ```\n   *\n   * @return {Player} self\n   * @method pause\n   */\n  pause() {\n    this.techCall_('pause');\n    return this;\n  }\n\n  /**\n   * Check if the player is paused\n   * ```js\n   *     var isPaused = myPlayer.paused();\n   *     var isPlaying = !myPlayer.paused();\n   * ```\n   *\n   * @return {Boolean} false if the media is currently playing, or true otherwise\n   * @method paused\n   */\n  paused() {\n    // The initial state of paused should be true (in Safari it's actually false)\n    return (this.techGet_('paused') === false) ? false : true;\n  }\n\n  /**\n   * Returns whether or not the user is \""scrubbing\"". Scrubbing is when the user\n   * has clicked the progress bar handle and is dragging it along the progress bar.\n   *\n   * @param  {Boolean} isScrubbing   True/false the user is scrubbing\n   * @return {Boolean}               The scrubbing status when getting\n   * @return {Object}                The player when setting\n   * @method scrubbing\n   */\n  scrubbing(isScrubbing) {\n    if (isScrubbing !== undefined) {\n      this.scrubbing_ = !!isScrubbing;\n\n      if (isScrubbing) {\n        this.addClass('vjs-scrubbing');\n      } else {\n        this.removeClass('vjs-scrubbing');\n      }\n\n      return this;\n    }\n\n    return this.scrubbing_;\n  }\n\n  /**\n   * Get or set the current time (in seconds)\n   * ```js\n   *     // get\n   *     var whereYouAt = myPlayer.currentTime();\n   *     // set\n   *     myPlayer.currentTime(120); // 2 minutes into the video\n   * ```\n   *\n   * @param  {Number|String=} seconds The time to seek to\n   * @return {Number}        The time in seconds, when not setting\n   * @return {Player}    self, when the current time is set\n   * @method currentTime\n   */\n  currentTime(seconds) {\n    if (seconds !== undefined) {\n\n      this.techCall_('setCurrentTime', seconds);\n\n      return this;\n    }\n\n    // cache last currentTime and return. default to 0 seconds\n    //\n    // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n    // currentTime when scrubbing, but may not provide much performance benefit afterall.\n    // Should be tested. Also something has to read the actual current time or the cache will\n    // never get updated.\n    return this.cache_.currentTime = (this.techGet_('currentTime') || 0);\n  }\n\n  /**\n   * Normally gets the length in time of the video in seconds;\n   * in all but the rarest use cases an argument will NOT be passed to the method\n   * ```js\n   *     var lengthOfVideo = myPlayer.duration();\n   * ```\n   * **NOTE**: The video must have started loading before the duration can be\n   * known, and in the case of Flash, may not be known until the video starts\n   * playing.\n   *\n   * @param {Number} seconds Duration when setting\n   * @return {Number} The duration of the video in seconds when getting\n   * @method duration\n   */\n  duration(seconds) {\n    if (seconds === undefined) {\n      return this.cache_.duration || 0;\n    }\n\n    seconds = parseFloat(seconds) || 0;\n\n    // Standardize on Inifity for signaling video is live\n    if (seconds < 0) {\n      seconds = Infinity;\n    }\n\n    if (seconds !== this.cache_.duration) {\n      // Cache the last set value for optimized scrubbing (esp. Flash)\n      this.cache_.duration = seconds;\n\n      if (seconds === Infinity) {\n        this.addClass('vjs-live');\n      } else {\n        this.removeClass('vjs-live');\n      }\n\n      this.trigger('durationchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * Calculates how much time is left.\n   * ```js\n   *     var timeLeft = myPlayer.remainingTime();\n   * ```\n   * Not a native video element function, but useful\n   *\n   * @return {Number} The time remaining in seconds\n   * @method remainingTime\n   */\n  remainingTime() {\n    return this.duration() - this.currentTime();\n  }\n\n  // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n  // Buffered returns a timerange object.\n  // Kind of like an array of portions of the video that have been downloaded.\n\n  /**\n   * Get a TimeRange object with the times of the video that have been downloaded\n   * If you just want the percent of the video that's been downloaded,\n   * use bufferedPercent.\n   * ```js\n   *     // Number of different ranges of time have been buffered. Usually 1.\n   *     numberOfRanges = bufferedTimeRange.length,\n   *     // Time in seconds when the first range starts. Usually 0.\n   *     firstRangeStart = bufferedTimeRange.start(0),\n   *     // Time in seconds when the first range ends\n   *     firstRangeEnd = bufferedTimeRange.end(0),\n   *     // Length in seconds of the first time range\n   *     firstRangeLength = firstRangeEnd - firstRangeStart;\n   * ```\n   *\n   * @return {Object} A mock TimeRange object (following HTML spec)\n   * @method buffered\n   */\n  buffered() {\n    var buffered = this.techGet_('buffered');\n\n    if (!buffered || !buffered.length) {\n      buffered = createTimeRange(0,0);\n    }\n\n    return buffered;\n  }\n\n  /**\n   * Get the percent (as a decimal) of the video that's been downloaded\n   * ```js\n   *     var howMuchIsDownloaded = myPlayer.bufferedPercent();\n   * ```\n   * 0 means none, 1 means all.\n   * (This method isn't in the HTML5 spec, but it's very convenient)\n   *\n   * @return {Number} A decimal between 0 and 1 representing the percent\n   * @method bufferedPercent\n   */\n  bufferedPercent() {\n    return bufferedPercent(this.buffered(), this.duration());\n  }\n\n  /**\n   * Get the ending time of the last buffered time range\n   * This is used in the progress bar to encapsulate all time ranges.\n   *\n   * @return {Number} The end of the last buffered time range\n   * @method bufferedEnd\n   */\n  bufferedEnd() {\n    var buffered = this.buffered(),\n        duration = this.duration(),\n        end = buffered.end(buffered.length-1);\n\n    if (end > duration) {\n      end = duration;\n    }\n\n    return end;\n  }\n\n  /**\n   * Get or set the current volume of the media\n   * ```js\n   *     // get\n   *     var howLoudIsIt = myPlayer.volume();\n   *     // set\n   *     myPlayer.volume(0.5); // Set volume to half\n   * ```\n   * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n   *\n   * @param  {Number} percentAsDecimal The new volume as a decimal percent\n   * @return {Number}              The current volume when getting\n   * @return {Player}              self when setting\n   * @method volume\n   */\n  volume(percentAsDecimal) {\n    let vol;\n\n    if (percentAsDecimal !== undefined) {\n      vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n      this.cache_.volume = vol;\n      this.techCall_('setVolume', vol);\n\n      return this;\n    }\n\n    // Default to 1 when returning current volume.\n    vol = parseFloat(this.techGet_('volume'));\n    return (isNaN(vol)) ? 1 : vol;\n  }\n\n\n  /**\n   * Get the current muted state, or turn mute on or off\n   * ```js\n   *     // get\n   *     var isVolumeMuted = myPlayer.muted();\n   *     // set\n   *     myPlayer.muted(true); // mute the volume\n   * ```\n   *\n   * @param  {Boolean=} muted True to mute, false to unmute\n   * @return {Boolean} True if mute is on, false if not when getting\n   * @return {Player} self when setting mute\n   * @method muted\n   */\n  muted(muted) {\n    if (muted !== undefined) {\n      this.techCall_('setMuted', muted);\n      return this;\n    }\n    return this.techGet_('muted') || false; // Default to false\n  }\n\n  // Check if current tech can support native fullscreen\n  // (e.g. with built in controls like iOS, so not our flash swf)\n  /**\n   * Check to see if fullscreen is supported\n   *\n   * @return {Boolean}\n   * @method supportsFullScreen\n   */\n  supportsFullScreen() {\n    return this.techGet_('supportsFullScreen') || false;\n  }\n\n  /**\n   * Check if the player is in fullscreen mode\n   * ```js\n   *     // get\n   *     var fullscreenOrNot = myPlayer.isFullscreen();\n   *     // set\n   *     myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n   * ```\n   * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n   * property and instead document.fullscreenElement is used. But isFullscreen is\n   * still a valuable property for internal player workings.\n   *\n   * @param  {Boolean=} isFS Update the player's fullscreen state\n   * @return {Boolean} true if fullscreen false if not when getting\n   * @return {Player} self when setting\n   * @method isFullscreen\n   */\n  isFullscreen(isFS) {\n    if (isFS !== undefined) {\n      this.isFullscreen_ = !!isFS;\n      return this;\n    }\n    return !!this.isFullscreen_;\n  }\n\n  /**\n   * Increase the size of the video to full screen\n   * ```js\n   *     myPlayer.requestFullscreen();\n   * ```\n   * In some browsers, full screen is not supported natively, so it enters\n   * \""full window mode\"", where the video fills the browser window.\n   * In browsers and devices that support native full screen, sometimes the\n   * browser's default controls will be shown, and not the Video.js custom skin.\n   * This includes most mobile devices (iOS, Android) and older versions of\n   * Safari.\n   *\n   * @return {Player} self\n   * @method requestFullscreen\n   */\n  requestFullscreen() {\n    var fsApi = FullscreenApi;\n\n    this.isFullscreen(true);\n\n    if (fsApi.requestFullscreen) {\n      // the browser supports going fullscreen at the element level so we can\n      // take the controls fullscreen as well as the video\n\n      // Trigger fullscreenchange event after change\n      // We have to specifically add this each time, and remove\n      // when canceling fullscreen. Otherwise if there's multiple\n      // players on a page, they would all be reacting to the same fullscreen\n      // events\n      Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n        this.isFullscreen(document[fsApi.fullscreenElement]);\n\n        // If cancelling fullscreen, remove event listener.\n        if (this.isFullscreen() === false) {\n          Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n        }\n\n        this.trigger('fullscreenchange');\n      }));\n\n      this.el_[fsApi.requestFullscreen]();\n\n    } else if (this.tech_.supportsFullScreen()) {\n      // we can't take the video.js controls fullscreen but we can go fullscreen\n      // with native controls\n      this.techCall_('enterFullScreen');\n    } else {\n      // fullscreen isn't supported so we'll just stretch the video element to\n      // fill the viewport\n      this.enterFullWindow();\n      this.trigger('fullscreenchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * Return the video to its normal size after having been in full screen mode\n   * ```js\n   *     myPlayer.exitFullscreen();\n   * ```\n   *\n   * @return {Player} self\n   * @method exitFullscreen\n   */\n  exitFullscreen() {\n    var fsApi = FullscreenApi;\n    this.isFullscreen(false);\n\n    // Check for browser element fullscreen support\n    if (fsApi.requestFullscreen) {\n      document[fsApi.exitFullscreen]();\n    } else if (this.tech_.supportsFullScreen()) {\n     this.techCall_('exitFullScreen');\n    } else {\n     this.exitFullWindow();\n     this.trigger('fullscreenchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n   *\n   * @method enterFullWindow\n   */\n  enterFullWindow() {\n    this.isFullWindow = true;\n\n    // Storing original doc overflow value to return to when fullscreen is off\n    this.docOrigOverflow = document.documentElement.style.overflow;\n\n    // Add listener for esc key to exit fullscreen\n    Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n    // Hide any scroll bars\n    document.documentElement.style.overflow = 'hidden';\n\n    // Apply fullscreen styles\n    Dom.addElClass(document.body, 'vjs-full-window');\n\n    this.trigger('enterFullWindow');\n  }\n\n  /**\n   * Check for call to either exit full window or full screen on ESC key\n   *\n   * @param {String} event Event to check for key press\n   * @method fullWindowOnEscKey\n   */\n  fullWindowOnEscKey(event) {\n    if (event.keyCode === 27) {\n      if (this.isFullscreen() === true) {\n        this.exitFullscreen();\n      } else {\n        this.exitFullWindow();\n      }\n    }\n  }\n\n  /**\n   * Exit full window\n   *\n   * @method exitFullWindow\n   */\n  exitFullWindow() {\n    this.isFullWindow = false;\n    Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n    // Unhide scroll bars.\n    document.documentElement.style.overflow = this.docOrigOverflow;\n\n    // Remove fullscreen styles\n    Dom.removeElClass(document.body, 'vjs-full-window');\n\n    // Resize the box, controller, and poster to original sizes\n    // this.positionAll();\n    this.trigger('exitFullWindow');\n  }\n\n  /**\n   * Check whether the player can play a given mimetype\n   *\n   * @param {String} type The mimetype to check\n   * @return {String} 'probably', 'maybe', or '' (empty string)\n   * @method canPlayType\n   */\n  canPlayType(type) {\n    let can;\n\n    // Loop through each playback technology in the options order\n    for (let i = 0, j = this.options_.techOrder; i < j.length; i++) {\n      let techName = toTitleCase(j[i]);\n      let tech = Tech.getTech(techName);\n\n      // Support old behavior of techs being registered as components.\n      // Remove once that deprecated behavior is removed.\n      if (!tech) {\n        tech = Component.getComponent(techName);\n      }\n\n      // Check if the current tech is defined before continuing\n      if (!tech) {\n        log.error(`The \""${techName}\"" tech is undefined. Skipped browser support check for that tech.`);\n        continue;\n      }\n\n      // Check if the browser supports this technology\n      if (tech.isSupported()) {\n        can = tech.canPlayType(type);\n\n        if (can) {\n          return can;\n        }\n      }\n    }\n\n    return '';\n  }\n\n  /**\n   * Select source based on tech-order or source-order\n   * Uses source-order selection if `options.sourceOrder` is truthy. Otherwise,\n   * defaults to tech-order selection\n   *\n   * @param {Array} sources The sources for a media asset\n   * @return {Object|Boolean} Object of source and tech order, otherwise false\n   * @method selectSource\n   */\n  selectSource(sources) {\n    // Get only the techs specified in `techOrder` that exist and are supported by the\n    // current platform\n    let techs =\n      this.options_.techOrder\n        .map(toTitleCase)\n        .map((techName) => {\n          // `Component.getComponent(...)` is for support of old behavior of techs\n          // being registered as components.\n          // Remove once that deprecated behavior is removed.\n          return [techName, Tech.getTech(techName) || Component.getComponent(techName)];\n        })\n        .filter(([techName, tech]) => {\n          // Check if the current tech is defined before continuing\n          if (tech) {\n            // Check if the browser supports this technology\n            return tech.isSupported();\n          }\n\n          log.error(`The \""${techName}\"" tech is undefined. Skipped browser support check for that tech.`);\n          return false;\n        });\n\n    // Iterate over each `innerArray` element once per `outerArray` element and execute\n    // `tester` with both. If `tester` returns a non-falsy value, exit early and return\n    // that value.\n    let findFirstPassingTechSourcePair = function (outerArray, innerArray, tester) {\n      let found;\n\n      outerArray.some((outerChoice) => {\n        return innerArray.some((innerChoice) => {\n          found = tester(outerChoice, innerChoice);\n\n          if (found) {\n            return true;\n          }\n        });\n      });\n\n      return found;\n    };\n\n    let foundSourceAndTech;\n    let flip = (fn) => (a, b) => fn(b, a);\n    let finder = ([techName, tech], source) => {\n      if (tech.canPlaySource(source, this.options_[techName.toLowerCase()])) {\n        return {source: source, tech: techName};\n      }\n    };\n\n    // Depending on the truthiness of `options.sourceOrder`, we swap the order of techs and sources\n    // to select from them based on their priority.\n    if (this.options_.sourceOrder) {\n      // Source-first ordering\n      foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder));\n    } else {\n      // Tech-first ordering\n      foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder);\n    }\n\n    return foundSourceAndTech || false;\n  }\n\n  /**\n   * The source function updates the video source\n   * There are three types of variables you can pass as the argument.\n   * **URL String**: A URL to the the video file. Use this method if you are sure\n   * the current playback technology (HTML5/Flash) can support the source you\n   * provide. Currently only MP4 files can be used in both HTML5 and Flash.\n   * ```js\n   *     myPlayer.src(\""http://www.example.com/path/to/video.mp4\"");\n   * ```\n   * **Source Object (or element):* * A javascript object containing information\n   * about the source file. Use this method if you want the player to determine if\n   * it can support the file using the type information.\n   * ```js\n   *     myPlayer.src({ type: \""video/mp4\"", src: \""http://www.example.com/path/to/video.mp4\"" });\n   * ```\n   * **Array of Source Objects:* * To provide multiple versions of the source so\n   * that it can be played using HTML5 across browsers you can use an array of\n   * source objects. Video.js will detect which version is supported and load that\n   * file.\n   * ```js\n   *     myPlayer.src([\n   *       { type: \""video/mp4\"", src: \""http://www.example.com/path/to/video.mp4\"" },\n   *       { type: \""video/webm\"", src: \""http://www.example.com/path/to/video.webm\"" },\n   *       { type: \""video/ogg\"", src: \""http://www.example.com/path/to/video.ogv\"" }\n   *     ]);\n   * ```\n   *\n   * @param  {String|Object|Array=} source The source URL, object, or array of sources\n   * @return {String} The current video source when getting\n   * @return {String} The player when setting\n   * @method src\n   */\n  src(source) {\n    if (source === undefined) {\n      return this.techGet_('src');\n    }\n\n    let currentTech = Tech.getTech(this.techName_);\n    // Support old behavior of techs being registered as components.\n    // Remove once that deprecated behavior is removed.\n    if (!currentTech) {\n      currentTech = Component.getComponent(this.techName_);\n    }\n\n    // case: Array of source objects to choose from and pick the best to play\n    if (Array.isArray(source)) {\n      this.sourceList_(source);\n\n    // case: URL String (http://myvideo...)\n    } else if (typeof source === 'string') {\n      // create a source object from the string\n      this.src({ src: source });\n\n    // case: Source object { src: '', type: '' ... }\n    } else if (source instanceof Object) {\n      // check if the source has a type and the loaded tech cannot play the source\n      // if there's no type we'll just try the current tech\n      if (source.type && !currentTech.canPlaySource(source, this.options_[this.techName_.toLowerCase()])) {\n        // create a source list with the current source and send through\n        // the tech loop to check for a compatible technology\n        this.sourceList_([source]);\n      } else {\n        this.cache_.src = source.src;\n        this.currentType_ = source.type || '';\n\n        // wait until the tech is ready to set the source\n        this.ready(function(){\n\n          // The setSource tech method was added with source handlers\n          // so older techs won't support it\n          // We need to check the direct prototype for the case where subclasses\n          // of the tech do not support source handlers\n          if (currentTech.prototype.hasOwnProperty('setSource')) {\n            this.techCall_('setSource', source);\n          } else {\n            this.techCall_('src', source.src);\n          }\n\n          if (this.options_.preload === 'auto') {\n            this.load();\n          }\n\n          if (this.options_.autoplay) {\n            this.play();\n          }\n\n        // Set the source synchronously if possible (#2326)\n        }, true);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Handle an array of source objects\n   *\n   * @param  {Array} sources Array of source objects\n   * @private\n   * @method sourceList_\n   */\n  sourceList_(sources) {\n    var sourceTech = this.selectSource(sources);\n\n    if (sourceTech) {\n      if (sourceTech.tech === this.techName_) {\n        // if this technology is already loaded, set the source\n        this.src(sourceTech.source);\n      } else {\n        // load this technology with the chosen source\n        this.loadTech_(sourceTech.tech, sourceTech.source);\n      }\n    } else {\n      // We need to wrap this in a timeout to give folks a chance to add error event handlers\n      this.setTimeout( function() {\n        this.error({ code: 4, message: this.localize(this.options_.notSupportedMessage) });\n      }, 0);\n\n      // we could not find an appropriate tech, but let's still notify the delegate that this is it\n      // this needs a better comment about why this is needed\n      this.triggerReady();\n    }\n  }\n\n  /**\n   * Begin loading the src data.\n   *\n   * @return {Player} Returns the player\n   * @method load\n   */\n  load() {\n    this.techCall_('load');\n    return this;\n  }\n\n  /**\n   * Reset the player. Loads the first tech in the techOrder,\n   * and calls `reset` on the tech`.\n   *\n   * @return {Player} Returns the player\n   * @method reset\n   */\n  reset() {\n    this.loadTech_(toTitleCase(this.options_.techOrder[0]), null);\n    this.techCall_('reset');\n    return this;\n  }\n\n  /**\n   * Returns the fully qualified URL of the current source value e.g. http://mysite.com/video.mp4\n   * Can be used in conjuction with `currentType` to assist in rebuilding the current source object.\n   *\n   * @return {String} The current source\n   * @method currentSrc\n   */\n  currentSrc() {\n    return this.techGet_('currentSrc') || this.cache_.src || '';\n  }\n\n  /**\n   * Get the current source type e.g. video/mp4\n   * This can allow you rebuild the current source object so that you could load the same\n   * source and tech later\n   *\n   * @return {String} The source MIME type\n   * @method currentType\n   */\n  currentType() {\n    return this.currentType_ || '';\n  }\n\n  /**\n   * Get or set the preload attribute\n   *\n   * @param {Boolean} value Boolean to determine if preload should be used\n   * @return {String} The preload attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method preload\n   */\n  preload(value) {\n    if (value !== undefined) {\n      this.techCall_('setPreload', value);\n      this.options_.preload = value;\n      return this;\n    }\n    return this.techGet_('preload');\n  }\n\n  /**\n   * Get or set the autoplay attribute.\n   *\n   * @param {Boolean} value Boolean to determine if video should autoplay\n   * @return {String} The autoplay attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method autoplay\n   */\n  autoplay(value) {\n    if (value !== undefined) {\n      this.techCall_('setAutoplay', value);\n      this.options_.autoplay = value;\n      return this;\n    }\n    return this.techGet_('autoplay', value);\n  }\n\n  /**\n   * Get or set the loop attribute on the video element.\n   *\n   * @param {Boolean} value Boolean to determine if video should loop\n   * @return {String} The loop attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method loop\n   */\n  loop(value) {\n    if (value !== undefined) {\n      this.techCall_('setLoop', value);\n      this.options_['loop'] = value;\n      return this;\n    }\n    return this.techGet_('loop');\n  }\n\n  /**\n   * Get or set the poster image source url\n   *\n   * ##### EXAMPLE:\n   * ```js\n   *     // get\n   *     var currentPoster = myPlayer.poster();\n   *     // set\n   *     myPlayer.poster('http://example.com/myImage.jpg');\n   * ```\n   *\n   * @param  {String=} src Poster image source URL\n   * @return {String} poster URL when getting\n   * @return {Player} self when setting\n   * @method poster\n   */\n  poster(src) {\n    if (src === undefined) {\n      return this.poster_;\n    }\n\n    // The correct way to remove a poster is to set as an empty string\n    // other falsey values will throw errors\n    if (!src) {\n      src = '';\n    }\n\n    // update the internal poster variable\n    this.poster_ = src;\n\n    // update the tech's poster\n    this.techCall_('setPoster', src);\n\n    // alert components that the poster has been set\n    this.trigger('posterchange');\n\n    return this;\n  }\n\n  /**\n   * Some techs (e.g. YouTube) can provide a poster source in an\n   * asynchronous way. We want the poster component to use this\n   * poster source so that it covers up the tech's controls.\n   * (YouTube's play button). However we only want to use this\n   * soruce if the player user hasn't set a poster through\n   * the normal APIs.\n   *\n   * @private\n   * @method handleTechPosterChange_\n   */\n  handleTechPosterChange_() {\n    if (!this.poster_ && this.tech_ && this.tech_.poster) {\n      this.poster_ = this.tech_.poster() || '';\n\n      // Let components know the poster has changed\n      this.trigger('posterchange');\n    }\n  }\n\n  /**\n   * Get or set whether or not the controls are showing.\n   *\n   * @param  {Boolean} bool Set controls to showing or not\n   * @return {Boolean}    Controls are showing\n   * @method controls\n   */\n  controls(bool) {\n    if (bool !== undefined) {\n      bool = !!bool; // force boolean\n      // Don't trigger a change event unless it actually changed\n      if (this.controls_ !== bool) {\n        this.controls_ = bool;\n\n        if (this.usingNativeControls()) {\n          this.techCall_('setControls', bool);\n        }\n\n        if (bool) {\n          this.removeClass('vjs-controls-disabled');\n          this.addClass('vjs-controls-enabled');\n          this.trigger('controlsenabled');\n\n          if (!this.usingNativeControls()) {\n            this.addTechControlsListeners_();\n          }\n        } else {\n          this.removeClass('vjs-controls-enabled');\n          this.addClass('vjs-controls-disabled');\n          this.trigger('controlsdisabled');\n\n          if (!this.usingNativeControls()) {\n            this.removeTechControlsListeners_();\n          }\n        }\n      }\n      return this;\n    }\n    return !!this.controls_;\n  }\n\n  /**\n   * Toggle native controls on/off. Native controls are the controls built into\n   * devices (e.g. default iPhone controls), Flash, or other techs\n   * (e.g. Vimeo Controls)\n   * **This should only be set by the current tech, because only the tech knows\n   * if it can support native controls**\n   *\n   * @param  {Boolean} bool    True signals that native controls are on\n   * @return {Player}      Returns the player\n   * @private\n   * @method usingNativeControls\n   */\n  usingNativeControls(bool) {\n    if (bool !== undefined) {\n      bool = !!bool; // force boolean\n      // Don't trigger a change event unless it actually changed\n      if (this.usingNativeControls_ !== bool) {\n        this.usingNativeControls_ = bool;\n        if (bool) {\n          this.addClass('vjs-using-native-controls');\n\n          /**\n            * player is using the native device controls\n           *\n            * @event usingnativecontrols\n            * @memberof Player\n            * @instance\n            * @private\n            */\n          this.trigger('usingnativecontrols');\n        } else {\n          this.removeClass('vjs-using-native-controls');\n\n          /**\n            * player is using the custom HTML controls\n           *\n            * @event usingcustomcontrols\n            * @memberof Player\n            * @instance\n            * @private\n            */\n          this.trigger('usingcustomcontrols');\n        }\n      }\n      return this;\n    }\n    return !!this.usingNativeControls_;\n  }\n\n  /**\n   * Set or get the current MediaError\n   *\n   * @param  {*} err A MediaError or a String/Number to be turned into a MediaError\n   * @return {MediaError|null}     when getting\n   * @return {Player}              when setting\n   * @method error\n   */\n  error(err) {\n    if (err === undefined) {\n      return this.error_ || null;\n    }\n\n    // restoring to default\n    if (err === null) {\n      this.error_ = err;\n      this.removeClass('vjs-error');\n      if (this.errorDisplay) {\n        this.errorDisplay.close();\n      }\n      return this;\n    }\n\n    this.error_ = new MediaError(err);\n\n    // add the vjs-error classname to the player\n    this.addClass('vjs-error');\n\n    // log the name of the error type and any message\n    // ie8 just logs \""[object object]\"" if you just log the error object\n    log.error(`(CODE:${this.error_.code} ${MediaError.errorTypes[this.error_.code]})`, this.error_.message, this.error_);\n\n    // fire an error event on the player\n    this.trigger('error');\n\n    return this;\n  }\n\n  /**\n   * Returns whether or not the player is in the \""ended\"" state.\n   *\n   * @return {Boolean} True if the player is in the ended state, false if not.\n   * @method ended\n   */\n  ended() { return this.techGet_('ended'); }\n\n  /**\n   * Returns whether or not the player is in the \""seeking\"" state.\n   *\n   * @return {Boolean} True if the player is in the seeking state, false if not.\n   * @method seeking\n   */\n  seeking() { return this.techGet_('seeking'); }\n\n  /**\n   * Returns the TimeRanges of the media that are currently available\n   * for seeking to.\n   *\n   * @return {TimeRanges} the seekable intervals of the media timeline\n   * @method seekable\n   */\n  seekable() { return this.techGet_('seekable'); }\n\n  /**\n   * Report user activity\n   *\n   * @param {Object} event Event object\n   * @method reportUserActivity\n   */\n  reportUserActivity(event) {\n    this.userActivity_ = true;\n  }\n\n  /**\n   * Get/set if user is active\n   *\n   * @param {Boolean} bool Value when setting\n   * @return {Boolean} Value if user is active user when getting\n   * @method userActive\n   */\n  userActive(bool) {\n    if (bool !== undefined) {\n      bool = !!bool;\n      if (bool !== this.userActive_) {\n        this.userActive_ = bool;\n        if (bool) {\n          // If the user was inactive and is now active we want to reset the\n          // inactivity timer\n          this.userActivity_ = true;\n          this.removeClass('vjs-user-inactive');\n          this.addClass('vjs-user-active');\n          this.trigger('useractive');\n        } else {\n          // We're switching the state to inactive manually, so erase any other\n          // activity\n          this.userActivity_ = false;\n\n          // Chrome/Safari/IE have bugs where when you change the cursor it can\n          // trigger a mousemove event. This causes an issue when you're hiding\n          // the cursor when the user is inactive, and a mousemove signals user\n          // activity. Making it impossible to go into inactive mode. Specifically\n          // this happens in fullscreen when we really need to hide the cursor.\n          //\n          // When this gets resolved in ALL browsers it can be removed\n          // https://code.google.com/p/chromium/issues/detail?id=103041\n          if(this.tech_) {\n            this.tech_.one('mousemove', function(e){\n              e.stopPropagation();\n              e.preventDefault();\n            });\n          }\n\n          this.removeClass('vjs-user-active');\n          this.addClass('vjs-user-inactive');\n          this.trigger('userinactive');\n        }\n      }\n      return this;\n    }\n    return this.userActive_;\n  }\n\n  /**\n   * Listen for user activity based on timeout value\n   *\n   * @private\n   * @method listenForUserActivity_\n   */\n  listenForUserActivity_() {\n    let mouseInProgress, lastMoveX, lastMoveY;\n\n    let handleActivity = Fn.bind(this, this.reportUserActivity);\n\n    let handleMouseMove = function(e) {\n      // #1068 - Prevent mousemove spamming\n      // Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970\n      if(e.screenX !== lastMoveX || e.screenY !== lastMoveY) {\n        lastMoveX = e.screenX;\n        lastMoveY = e.screenY;\n        handleActivity();\n      }\n    };\n\n    let handleMouseDown = function() {\n      handleActivity();\n      // For as long as the they are touching the device or have their mouse down,\n      // we consider them active even if they're not moving their finger or mouse.\n      // So we want to continue to update that they are active\n      this.clearInterval(mouseInProgress);\n      // Setting userActivity=true now and setting the interval to the same time\n      // as the activityCheck interval (250) should ensure we never miss the\n      // next activityCheck\n      mouseInProgress = this.setInterval(handleActivity, 250);\n    };\n\n    let handleMouseUp = function(event) {\n      handleActivity();\n      // Stop the interval that maintains activity if the mouse/touch is down\n      this.clearInterval(mouseInProgress);\n    };\n\n    // Any mouse movement will be considered user activity\n    this.on('mousedown', handleMouseDown);\n    this.on('mousemove', handleMouseMove);\n    this.on('mouseup', handleMouseUp);\n\n    // Listen for keyboard navigation\n    // Shouldn't need to use inProgress interval because of key repeat\n    this.on('keydown', handleActivity);\n    this.on('keyup', handleActivity);\n\n    // Run an interval every 250 milliseconds instead of stuffing everything into\n    // the mousemove/touchmove function itself, to prevent performance degradation.\n    // `this.reportUserActivity` simply sets this.userActivity_ to true, which\n    // then gets picked up by this loop\n    // http://ejohn.org/blog/learning-from-twitter/\n    let inactivityTimeout;\n    let activityCheck = this.setInterval(function() {\n      // Check to see if mouse/touch activity has happened\n      if (this.userActivity_) {\n        // Reset the activity tracker\n        this.userActivity_ = false;\n\n        // If the user state was inactive, set the state to active\n        this.userActive(true);\n\n        // Clear any existing inactivity timeout to start the timer over\n        this.clearTimeout(inactivityTimeout);\n\n        var timeout = this.options_['inactivityTimeout'];\n        if (timeout > 0) {\n          // In <timeout> milliseconds, if no more activity has occurred the\n          // user will be considered inactive\n          inactivityTimeout = this.setTimeout(function () {\n            // Protect against the case where the inactivityTimeout can trigger just\n            // before the next user activity is picked up by the activityCheck loop\n            // causing a flicker\n            if (!this.userActivity_) {\n                this.userActive(false);\n            }\n          }, timeout);\n        }\n      }\n    }, 250);\n  }\n\n  /**\n   * Gets or sets the current playback rate.  A playback rate of\n   * 1.0 represents normal speed and 0.5 would indicate half-speed\n   * playback, for instance.\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n   *\n   * @param  {Number} rate    New playback rate to set.\n   * @return {Number}         Returns the new playback rate when setting\n   * @return {Number}         Returns the current playback rate when getting\n   * @method playbackRate\n   */\n  playbackRate(rate) {\n    if (rate !== undefined) {\n      this.techCall_('setPlaybackRate', rate);\n      return this;\n    }\n\n    if (this.tech_ && this.tech_['featuresPlaybackRate']) {\n      return this.techGet_('playbackRate');\n    } else {\n      return 1.0;\n    }\n  }\n\n  /**\n   * Gets or sets the audio flag\n   *\n   * @param  {Boolean} bool    True signals that this is an audio player.\n   * @return {Boolean}         Returns true if player is audio, false if not when getting\n   * @return {Player}      Returns the player if setting\n   * @private\n   * @method isAudio\n   */\n  isAudio(bool) {\n    if (bool !== undefined) {\n      this.isAudio_ = !!bool;\n      return this;\n    }\n\n    return !!this.isAudio_;\n  }\n\n  /**\n   * Returns the current state of network activity for the element, from\n   * the codes in the list below.\n   * - NETWORK_EMPTY (numeric value 0)\n   *   The element has not yet been initialised. All attributes are in\n   *   their initial states.\n   * - NETWORK_IDLE (numeric value 1)\n   *   The element's resource selection algorithm is active and has\n   *   selected a resource, but it is not actually using the network at\n   *   this time.\n   * - NETWORK_LOADING (numeric value 2)\n   *   The user agent is actively trying to download data.\n   * - NETWORK_NO_SOURCE (numeric value 3)\n   *   The element's resource selection algorithm is active, but it has\n   *   not yet found a resource to use.\n   *\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n   * @return {Number} the current network activity state\n   * @method networkState\n   */\n  networkState() {\n    return this.techGet_('networkState');\n  }\n\n  /**\n   * Returns a value that expresses the current state of the element\n   * with respect to rendering the current playback position, from the\n   * codes in the list below.\n   * - HAVE_NOTHING (numeric value 0)\n   *   No information regarding the media resource is available.\n   * - HAVE_METADATA (numeric value 1)\n   *   Enough of the resource has been obtained that the duration of the\n   *   resource is available.\n   * - HAVE_CURRENT_DATA (numeric value 2)\n   *   Data for the immediate current playback position is available.\n   * - HAVE_FUTURE_DATA (numeric value 3)\n   *   Data for the immediate current playback position is available, as\n   *   well as enough data for the user agent to advance the current\n   *   playback position in the direction of playback.\n   * - HAVE_ENOUGH_DATA (numeric value 4)\n   *   The user agent estimates that enough data is available for\n   *   playback to proceed uninterrupted.\n   *\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n   * @return {Number} the current playback rendering state\n   * @method readyState\n   */\n  readyState() {\n    return this.techGet_('readyState');\n  }\n\n  /**\n   * Get a video track list\n   * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist\n   *\n   * @return {VideoTrackList} thes current video track list\n   * @method videoTracks\n   */\n  videoTracks() {\n    // if we have not yet loadTech_, we create videoTracks_\n    // these will be passed to the tech during loading\n    if (!this.tech_) {\n      this.videoTracks_ = this.videoTracks_ || new VideoTrackList();\n      return this.videoTracks_;\n    }\n\n    return this.tech_.videoTracks();\n  }\n\n  /**\n   * Get an audio track list\n   * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist\n   *\n   * @return {AudioTrackList} thes current audio track list\n   * @method audioTracks\n   */\n  audioTracks() {\n    // if we have not yet loadTech_, we create videoTracks_\n    // these will be passed to the tech during loading\n    if (!this.tech_) {\n      this.audioTracks_ = this.audioTracks_ || new AudioTrackList();\n      return this.audioTracks_;\n    }\n\n    return this.tech_.audioTracks();\n  }\n\n  /*\n    * Text tracks are tracks of timed text events.\n    * Captions - text displayed over the video for the hearing impaired\n    * Subtitles - text displayed over the video for those who don't understand language in the video\n    * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n    * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n    */\n\n  /**\n   * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n   *\n   * @return {Array}           Array of track objects\n   * @method textTracks\n   */\n  textTracks() {\n    // cannot use techGet_ directly because it checks to see whether the tech is ready.\n    // Flash is unlikely to be ready in time but textTracks should still work.\n    return this.tech_ && this.tech_['textTracks']();\n  }\n\n  /**\n   * Get an array of remote text tracks\n   *\n   * @return {Array}\n   * @method remoteTextTracks\n   */\n  remoteTextTracks() {\n    return this.tech_ && this.tech_['remoteTextTracks']();\n  }\n\n  /**\n   * Get an array of remote html track elements\n   *\n   * @return {HTMLTrackElement[]}\n   * @method remoteTextTrackEls\n   */\n  remoteTextTrackEls() {\n    return this.tech_ && this.tech_['remoteTextTrackEls']();\n  }\n\n  /**\n   * Add a text track\n   * In addition to the W3C settings we allow adding additional info through options.\n   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n   *\n   * @param {String}  kind        Captions, subtitles, chapters, descriptions, or metadata\n   * @param {String=} label       Optional label\n   * @param {String=} language    Optional language\n   * @method addTextTrack\n   */\n  addTextTrack(kind, label, language) {\n    return this.tech_ && this.tech_['addTextTrack'](kind, label, language);\n  }\n\n  /**\n   * Add a remote text track\n   *\n   * @param {Object} options    Options for remote text track\n   * @method addRemoteTextTrack\n   */\n  addRemoteTextTrack(options) {\n    return this.tech_ && this.tech_['addRemoteTextTrack'](options);\n  }\n\n  /**\n   * Remove a remote text track\n   *\n   * @param {Object} track    Remote text track to remove\n   * @method removeRemoteTextTrack\n   */\n  // destructure the input into an object with a track argument, defaulting to arguments[0]\n  // default the whole argument to an empty object if nothing was passed in\n  removeRemoteTextTrack({track = arguments[0]} = {}) { // jshint ignore:line\n    this.tech_ && this.tech_['removeRemoteTextTrack'](track);\n  }\n\n  /**\n   * Get video width\n   *\n   * @return {Number} Video width\n   * @method videoWidth\n   */\n  videoWidth() {\n    return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;\n  }\n\n  /**\n   * Get video height\n   *\n   * @return {Number} Video height\n   * @method videoHeight\n   */\n  videoHeight() {\n    return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;\n  }\n\n  // Methods to add support for\n  // initialTime: function(){ return this.techCall_('initialTime'); },\n  // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); },\n  // played: function(){ return this.techCall_('played'); },\n  // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); },\n  // defaultMuted: function(){ return this.techCall_('defaultMuted'); }\n\n  /**\n   * The player's language code\n   * NOTE: The language should be set in the player options if you want the\n   * the controls to be built with a specific language. Changing the lanugage\n   * later will not update controls text.\n   *\n   * @param {String} code  The locale string\n   * @return {String}      The locale string when getting\n   * @return {Player}      self when setting\n   * @method language\n   */\n  language(code) {\n    if (code === undefined) {\n      return this.language_;\n    }\n\n    this.language_ = (''+code).toLowerCase();\n    return this;\n  }\n\n  /**\n   * Get the player's language dictionary\n   * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n   * Languages specified directly in the player options have precedence\n   *\n   * @return {Array} Array of languages\n   * @method languages\n   */\n  languages() {\n    return  mergeOptions(Player.prototype.options_.languages, this.languages_);\n  }\n\n  /**\n   * Converts track info to JSON\n   *\n   * @return {Object} JSON object of options\n   * @method toJSON\n   */\n  toJSON() {\n    let options = mergeOptions(this.options_);\n    let tracks = options.tracks;\n\n    options.tracks = [];\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      // deep merge tracks and null out player so no circular references\n      track = mergeOptions(track);\n      track.player = undefined;\n      options.tracks[i] = track;\n    }\n\n    return options;\n  }\n\n  /**\n   * Creates a simple modal dialog (an instance of the `ModalDialog`\n   * component) that immediately overlays the player with arbitrary\n   * content and removes itself when closed.\n   *\n   * @param {String|Function|Element|Array|Null} content\n   *        Same as `ModalDialog#content`'s param of the same name.\n   *\n   *        The most straight-forward usage is to provide a string or DOM\n   *        element.\n   *\n   * @param {Object} [options]\n   *        Extra options which will be passed on to the `ModalDialog`.\n   *\n   * @return {ModalDialog}\n   */\n  createModal(content, options) {\n    let player = this;\n\n    options = options || {};\n    options.content = content || '';\n\n    let modal = new ModalDialog(player, options);\n\n    player.addChild(modal);\n    modal.on('dispose', function() {\n      player.removeChild(modal);\n    });\n\n    return modal.open();\n  }\n\n  /**\n   * Gets tag settings\n   *\n   * @param {Element} tag The player tag\n   * @return {Array} An array of sources and track objects\n   * @static\n   * @method getTagSettings\n   */\n  static getTagSettings(tag) {\n    let baseOptions = {\n      'sources': [],\n      'tracks': []\n    };\n\n    const tagOptions = Dom.getElAttributes(tag);\n    const dataSetup = tagOptions['data-setup'];\n\n    // Check if data-setup attr exists.\n    if (dataSetup !== null){\n      // Parse options JSON\n      // If empty string, make it a parsable json object.\n      const [err, data] = safeParseTuple(dataSetup || '{}');\n      if (err) {\n        log.error(err);\n      }\n      assign(tagOptions, data);\n    }\n\n    assign(baseOptions, tagOptions);\n\n    // Get tag children settings\n    if (tag.hasChildNodes()) {\n      const children = tag.childNodes;\n\n      for (let i=0, j=children.length; i<j; i++) {\n        const child = children[i];\n        // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/\n        const childName = child.nodeName.toLowerCase();\n        if (childName === 'source') {\n          baseOptions.sources.push(Dom.getElAttributes(child));\n        } else if (childName === 'track') {\n          baseOptions.tracks.push(Dom.getElAttributes(child));\n        }\n      }\n    }\n\n    return baseOptions;\n  }\n\n}\n\n/*\n * Global player list\n *\n * @type {Object}\n */\nPlayer.players = {};\n\nlet navigator = window.navigator;\n/*\n * Player instance options, surfaced using options\n * options = Player.prototype.options_\n * Make changes in options, not here.\n *\n * @type {Object}\n * @private\n */\nPlayer.prototype.options_ = {\n  // Default order of fallback technology\n  techOrder: ['html5','flash'],\n  // techOrder: ['flash','html5'],\n\n  html5: {},\n  flash: {},\n\n  // defaultVolume: 0.85,\n  defaultVolume: 0.00, // The freakin seaguls are driving me crazy!\n\n  // default inactivity timeout\n  inactivityTimeout: 2000,\n\n  // default playback rates\n  playbackRates: [],\n  // Add playback rate selection by adding rates\n  // 'playbackRates': [0.5, 1, 1.5, 2],\n\n  // Included control sets\n  children: [\n    'mediaLoader',\n    'posterImage',\n    'textTrackDisplay',\n    'loadingSpinner',\n    'bigPlayButton',\n    'controlBar',\n    'errorDisplay',\n    'textTrackSettings'\n  ],\n\n  language: navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language || 'en',\n\n  // locales and their language translations\n  languages: {},\n\n  // Default message to show when a video cannot be played.\n  notSupportedMessage: 'No compatible source was found for this media.'\n};\n\n/**\n * Fired when the user agent begins looking for media data\n *\n * @event loadstart\n */\nPlayer.prototype.handleTechLoadStart_;\n\n/**\n * Fired when the player has initial duration and dimension information\n *\n * @event loadedmetadata\n */\nPlayer.prototype.handleLoadedMetaData_;\n\n/**\n * Fired when the player receives text data\n *\n * @event textdata\n */\nPlayer.prototype.handleTextData_;\n\n/**\n * Fired when the player has downloaded data at the current playback position\n *\n * @event loadeddata\n */\nPlayer.prototype.handleLoadedData_;\n\n/**\n * Fired when the user is active, e.g. moves the mouse over the player\n *\n * @event useractive\n */\nPlayer.prototype.handleUserActive_;\n\n/**\n * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction\n *\n * @event userinactive\n */\nPlayer.prototype.handleUserInactive_;\n\n/**\n * Fired when the current playback position has changed *\n * During playback this is fired every 15-250 milliseconds, depending on the\n * playback technology in use.\n *\n * @event timeupdate\n */\nPlayer.prototype.handleTimeUpdate_;\n\n/**\n * Fired when video playback ends\n *\n * @event ended\n */\nPlayer.prototype.handleTechEnded_;\n\n/**\n * Fired when the volume changes\n *\n * @event volumechange\n */\nPlayer.prototype.handleVolumeChange_;\n\n/**\n * Fired when an error occurs\n *\n * @event error\n */\nPlayer.prototype.handleError_;\n\nPlayer.prototype.flexNotSupported_ = function() {\n  var elem = document.createElement('i');\n\n  // Note: We don't actually use flexBasis (or flexOrder), but it's one of the more\n  // common flex features that we can rely on when checking for flex support.\n  return !('flexBasis' in elem.style ||\n          'webkitFlexBasis' in elem.style ||\n          'mozFlexBasis' in elem.style ||\n          'msFlexBasis' in elem.style ||\n          'msFlexOrder' in elem.style /* IE10-specific (2012 flex spec)  */);\n};\n\nComponent.registerComponent('Player', Player);\nexport default Player;\n"","
93adb50e78d7c531f362ce8e5f93070cde10bcaf,404107,                // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0
01cddb25fe811fd5c4a3c998594c7f9f3b895e71,9404793,        /* Source: http://stackoverflow.com/questions/9404793/check-if-same-origin-policy-applies */
011340efc8b36e907fd554018196a4ef1e0a11d8,65250,[source](http://stackoverflow.com/questions/65250/convert-a-doc-or-pdf-to-an-image-and-display-a-thumbnail-in-ruby)
03a1b7d3cc34c2261d6f69d58182bab3eefa67be,123999,    *  viewport script source: https://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
2de0447919ae9afd6eccad4b0fdd1627e1d8912a,9600801,	// https://stackoverflow.com/questions/9600801/evenly-distributing-n-points-on-a-sphere
d3e2e37ff23159fcd122a538befe538e1b54aaea,34436709,Respondi sobre isso [nessa](http://stackoverflow.com/a/34436709/890890) questão do stackoverflow e pretendo reproduzir aqui os *prós* e *contras* de cada um desses approachs.
284a0b525ff5792f51ecc8fa96a4b39108ad3e2b,22756153,[The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path 1]:		http://stackoverflow.com/questions/22756153/the-superclass-javax-servlet-http-httpservlet-was-not-found-on-the-java-build
90f5bfb407d0ed12e022a8f558395b1826d6c763,14541253,# https://stackoverflow.com/questions/14541253/commit-empty-folder-structure-with-git
767aa16dd02cae65eebe529fa706c016df5d7b49,5438771,          // as per http://stackoverflow.com/a/5438771.
960e65b946212768d58fa979e43d34e75d49ca28,1842681,     * @link http://stackoverflow.com/questions/1842681/regular-expression-to-remove-one-parameter-from-query-string
d1bb5eda2bd3386c4e568e30e1239b4099404df1,8159524,      // http://stackoverflow.com/questions/8159524/javascript-pushing-element-at-the-beginning-of-an-array
77272cb6552357bf7ee448d7e7b67686f9e65e22,6002619,// see http://stackoverflow.com/questions/6002619/unmarshal-an-iso-8859-1-xml-input-in-go
b593ea42960634e42b5c8444320fe09eee8b5ceb,26858692,        // see https://stackoverflow.com/questions/26858692/swiperefreshlayout-setrefreshing-not-showing-indicator-initially
54f6aa19386dca3fd63a81b766829d84bf33f2a2,22747272,"// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
ceb77e37ffc861bdb9424cfdba55bbc6390fa698,1716296, *   http://stackoverflow.com/questions/1716296
6bca16eb173442685755ef962145a8fc6dc17773,4960020,            // http://stackoverflow.com/a/4960020 Math.floor
98772e0471334134e7b0009db3cb8df6d0b383b0,35361826, * http://stackoverflow.com/questions/35361826/heavy-rendering-task-in-canvas-in-javafx-blocks-gui
36d405bb3f484018c7929c47388377766b22bfbf,24485077,"      ""description"":""Chrome on iOS appears to have an issue when opening Blob URLs in another tab [see workaround](http://stackoverflow.com/questions/24485077/how-to-open-blob-url-on-chrome-ios)"""
8788ec9effe3c14b8cc36dd89f4c84bb92993167,3330919,        // http://stackoverflow.com/a/3330919)
aa55e818677f20a0af9fbacd69f340f1367893b9,6160677,[3]: http://stackoverflow.com/questions/6160677/how-to-statically-link-all-libraries-except-a-few-using-g
20b3cf9a4d89f64c8c87b0009c82be7b3e54828b,36577182,"                     extra_compile_args=['-fopenmp', '-fpermissive'], # Avoid compiling error with prange. Similar to http://stackoverflow.com/questions/36577182/unable-to-assign-value-to-array-in-prange"
29ca0e197f3d9ab85b4f5793f06348453a23701d,14450408,- [Using bootstrap with bower](http://stackoverflow.com/questions/14450408/using-bootstrap-with-bower)
503cb1d85cc923da9fdf9601712db10216ffbc5d,87496,rem http://stackoverflow.com/questions/87496..
9f2d1af6f20398982e161f6b291793bafe7f04ff,5971830,// https://stackoverflow.com/questions/5971830/need-code-for-inverse-error-function
d2faa2261f97bcc07a7bd42e97ca56b2752c40ef,20264059,    # http://stackoverflow.com/a/20264059
160647bb11727a59cd92399983e76bd678f5bfaf,25095327,Simply making that directory [should fix the problem](http://stackoverflow.com/a/25095327/102704):
2c95463848c994d68fd1d70d5256860ab528448f,986937,  //http://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes
a8614c27cb543afaa9a96bc46e6f60d4940e0d8c,27558453,http://stackoverflow.com/questions/27558453 YES (7)
85763f3c21939f76f158c31052693430664e3caa,10589154,http://stackoverflow.com/questions/10589154/is-an-fsm-the-right-solution-for-my-asynchronous-akka-actor-based-calculation-e
dd9aba74990efaf67678fbbb6eb3eaaab6339a62,18542272,     * @url http://stackoverflow.com/a/18542272/1470961
ca69036f6954fae615127d135bdf503a405cbe07,5527601,        //see http://stackoverflow.com/questions/5527601/normalizing-mousewheel-speed-across-browsers
6ba537037ef4009a2d63e66c3918ad4e7bbda8c4,105074,// Taken from http://stackoverflow.com/a/105074/515584
8ee16d32bf884fb86dcd0aab0829f0174e155da6,7837722,My perceptron was very slow until I read a [Stack Overflow comment](https://stackoverflow.com/questions/7837722/what-is-the-most-efficient-way-to-loop-through-dataframes-with-pandas) that
4256dcf88ad031cf162c1625a9e72922e44b481e,9489736,	 - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/
44efcc0141d724b91a533bc6113057ab4c16459c,22747272,"	// Based on http://stackoverflow.com/a/22747272/680742, the browser with"
46bad48038052cac7a1e9261b6f698e0d304b2cd,4292320,	// shamelessly taken from http://stackoverflow.com/questions/4292320
49a7efcf61deaa21ba82a3e34fc5a49fc5f8b661,6811241,        http://stackoverflow.com/a/6811241
ce05b878f24e44c9b6e18894a71b4754750e5d6f,10454552,            // credit: http://stackoverflow.com/a/10454552/677735
39668ecc739a8bc81eb05515fa8276a89301664a,5926986,                    // visible overflow for firefox https://stackoverflow.com/questions/5926986/why-does-firefox-appear-to-truncate-embedded-svgs
d93fc607b79b93b7fafa0bb57bb7997a1604c4cd,1852751,    // Bind resize events (http://stackoverflow.com/questions/1852751/window-resize-event-firing-in-internet-explorer)
d814b46bc4c8c5156081e43aea25456dc23c2c4a,18306416,source: http://stackoverflow.com/questions/18306416/adaboostclassifier-with-different-base-learners
f16467bc7aaa5f864298fb8d8d1e86c2fc8eaae8,41927589,//    see http://stackoverflow.com/questions/41927589/rationales-consequences-of-webidl-class-inheritance-requirements
b3d1059be2bfeb06e7bd3592464ba84baead187d,39347461,"<li><p><a href=""http://stackoverflow.com/a/39347461/1342462"">http://stackoverflow.com/a/39347461/1342462</a></p></li>"
68f063016f04b662b8ae2838fad9eea33547765f,10281370,    // See http://stackoverflow.com/questions/10281370/see-if-file-is-empty
f8025cc5982d2283d24ab7e2907e8efc084ce5a1,1134586,// thank dog for SO http://stackoverflow.com/questions/1134586/how-can-you-find-the-height-of-text-on-an-html-canvas
9282a4093eef85bb095621ef2e3d0492594d1b57,18531624,		// Prototype `constructor` property must be a function (see also https://bugs.jquery.com/ticket/9897 and http://stackoverflow.com/questions/18531624/isplainobject-thing):
deeb438f596286d5b5815a4fd25f96667989fd79,43727046,# https://stackoverflow.com/a/43727046
493417ecd49160290cf1980bf8e9d15fde874c8b,13616449,// https://stackoverflow.com/questions/13616449/screen-sharing-with-webrtc
37c2b30627442213d5df77d07354a68fb98b8b98,596216,    #   https://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
6c5a7e8f0826371afa908b331b84ad9be352935e,19132908,    // Taken from: http://stackoverflow.com/questions/19132908/auto-layout-constraints-issue-on-ios7-in-uitableviewcell
3a7287ff76b3efb5cc7f96bbec3589248682edba,3228727, * [unix - How to pretty-print JSON from the command line? - Stack Overflow](http://stackoverflow.com/a/3228727)
015f41760ccce59f307b8ae4eb6992cbbddc3681,20983734,"	<a href=""http://stackoverflow.com/questions/20983734/tools-to-determine-exact-location-when-using-ibeacons?lq=1"" class=""question-hyperlink"">Tools to determine exact location when using ibeacons</a>"
9ab8c6dd35cfc165f2a241d5e3ce505a67137e2c,109023,  // taken from http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer
5a4ff1b5d99faa330bf89e15435e6033e7dc593c,12586482,					// http://stackoverflow.com/q/12586482/319266
03cad0fc8f18a182d9f0254d64f85dea1f373bbd,1507780, * Found code here: http://stackoverflow.com/questions/1507780/searching-for-a-sequence-of-bytes-in-a-binary-file-with-java
34007a42a428957fcc5b44f57b8dccc4a5cbee63,7688070,* [1]: https://stackoverflow.com/questions/7688070/why-is-comparing-the-constructor-property-of-two-windows-unreliable
85b889cc93347ef523ecdd8c56fe069bf4388c54,54867,[stackoverflow](http://stackoverflow.com/questions/54867/what-is-the-difference-between-old-style-and-new-style-classes-in-python)
a17b2e2f4fbbbbdc957b9e82669359361bb028bd,11536764,#https://stackoverflow.com/questions/11536764/how-to-fix-attempted-relative-import-in-non-package-even-with-init-py
57f1e56606b9a36d61945ad8b33c1cdeafcd116e,1617303,# From http://stackoverflow.com/a/1617303/142339
55c2927449a76058988114991cdeb7037095ce6a,3330919,        // http://stackoverflow.com/a/3330919)
64e13e1bfa133a83994a3605b9a932d9468ddd3c,18082,// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric
a30c5f80dbe1a057582ead0157abed6e8a328002,33746621,"                callbackContext.error(""Not implemented for android. See: http://stackoverflow.com/q/33746621/230637"");"
67cc4fec3ddb56a086a4f424041cb47afd2c93c9,28423229,"&lt;li&gt;&lt;a href=""http://stackoverflow.com/a/28423229/1382297""&gt;This SO answer&lt;/a&gt;&lt;/li&gt;"
fa068e76c99b9bd2cbbc13550d604224aea371bd,9809351,    // http://stackoverflow.com/questions/9809351/ie8-css-font-face-fonts-only-working-for-before-content-on-over-and-sometimes
7ca365a253d534c29ff4cffa101a8ebbc04fc57b,26845540,        /* http://stackoverflow.com/questions/26845540/connect-edges-with-graph-dot
8bdcc488a1413e29e36cf46c32ad5af48dcba1e1,14452824,http://stackoverflow.com/questions/14452824/saving-image-in-python-pil
adc3ff96633a9d1a0d71a0f2956cacfe5f208707,3330919,        // http://stackoverflow.com/a/3330919)
195a30aea58e992ce9bc9117710ca6659341db17,5297842,         * http://stackoverflow.com/questions/5297842/how-to-handle-
a84d3584c71a2bdc389820810f8c5e00c10973de,499126,        * see http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
e86d516972a658253dc90a6554b5c693108e5dcd,3330919,        // http://stackoverflow.com/a/3330919)
82a44264a653297d33f81cfd29f81f9bf3acf013,458550,# http://stackoverflow.com/q/458550
3aa9dac5707bfb788503c334de1d3a7035f8cb54,26464324," * <a href=""http://stackoverflow.com/questions/26464324/how-can-i-can-insert-an-image-or-stamp-on-a-pdf-where-there-is-free-space-availa"">"
76211c3b38240f15dbf03c2e49477e9e7bf16092,2172798,            // ellipse code taken from: http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas
abf9336ad3bfbc72e3e741a3a3f589650e624422,17923521,		   http://stackoverflow.com/a/17923521/3223422 -->
80c84c892a5f59f3df4a8714359744240497e636,8511281,    if (data !== null && typeof data === 'object') { // http://stackoverflow.com/questions/8511281/check-if-a-variable-is-an-object-in-javascript
19a1ff0685dfcb87a29629c7dba98dcbf0e5c3e0,13003854,# - http://stackoverflow.com/a/13003854/170413
56af8dec650dca06e56fe5d8ddc837d6cc8213bc,81260,"<a class=""h-link"" href=""http://stackoverflow.com/questions/81260/java-easiest-way-to-merge-a-release-into-one-jar-file"">"
1086ecc1b2879542628300b8b7ba09b6ca12b297,605630,					// http://stackoverflow.com/questions/605630/how-to-select-html-nodes-by-id-with-jquery-when-the-id-contains-a-dot
98229898dcc5323a89230b97a0bf8fd63c9bbe01,18531624,	// NOTE: possibility of perf boost if key enumeration order is known (see http://stackoverflow.com/questions/18531624/isplainobject-thing).
aa8072325188caf5a559531b740690c29d8b989d,917566,Inspired by [this StackOverflow thread](https://stackoverflow.com/questions/917566/ruby-share-logger-instance-among-module-classes/44348303) `EasyLogging` provides an easy way to create and configure unique loggers for any [context](https://ruby-doc.org/stdlib/libdoc/rdoc/rdoc/RDoc/Context.html) as an alternative to having a global logger (e.g. `Rails.logger`). It uses the [native Ruby Logger from stdlib](http://ruby-doc.org/stdlib/libdoc/logger/rdoc/Logger.html) and has [no runtime dependencies](easy_logging.gemspec).
7ecd3ec9c76b196046f7e48a9ebdf3e258bd0015,7077340,// Thanks to http://stackoverflow.com/a/7077340
737a227cb7dffd714b690d7ccac63f58039a3812,475074,      # http://stackoverflow.com/questions/475074/regex-to-parse-or-validate-base64-data
c31d45339dccdea3f3ef40fbbd8879b9f22c0325,3301635,"     * ""http://stackoverflow.com/questions/3301635/change-private-static-final-field-using-java-reflection"">http://stackoverflow.com/questions/3301635/change-private-static-final-field-using-java-reflection</a>"
d58db42d7d1600ed1b6171fe208f3677dbe7a661,169625,"        regex: /https?:\/\/(?:[a-zA-Z0-9\-]+\.)+[a-z]{2,6}(?:\/[^\/#?]+)+\.(?:jpg|jpeg|gif|png)/, // From http://stackoverflow.com/questions/169625/regex-to-check-if-valid-url-that-ends-in-jpg-png-or-gif"
0c54a0d9e8ce137d0ef9e50e37c86f810974dfd1,1660441,              As explained here: http://stackoverflow.com/questions/1660441/java-flag-to-enable-extended-serialization-debugging-info
cc4b723a65ed3827fc67060a1f54bcdd1759529d,3330919,        // http://stackoverflow.com/a/3330919)
44af9e451305bf5f74cc48d3ab0e54ddfaa1110b,654112,// supportsVml() borrowed from http://stackoverflow.com/questions/654112/how-do-you-detect-support-for-vml-or-svg-in-a-browser
314ebdc67285866d0384dcd67ac5f89e224d1dab,18884840,//http://stackoverflow.com/questions/18884840/adding-a-new-array-element-to-a-json-object --> on why to parse a file before being able to edit it (i thought simply pushing into the json array would do; not possible)
746029cc493464cefa0839a78721223d5fad45bb,37628,0;211;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;suppose;1.0;0.002145922746781116;27.0;0;0
dd0fc193f28b6c28f15112db5e049a8504238d1d,3561493,	// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
c99a9d51134c46153aa222caf2334d1b250bf5df,7381974, * https://stackoverflow.com/questions/7381974/which-characters-need-to-be-escaped-on-html
9454e951bf721dc89efcd5065034be3f06f80936,6894270,        // http://stackoverflow.com/a/6894270/244576
3929c1130dacb42bd8f77b7c8c0bca3ba22c3bda,7688070,* [1]: https://stackoverflow.com/questions/7688070/why-is-comparing-the-constructor-property-of-two-windows-unreliable
95bf3d78bffedc5fbc304082f8f4e897a80a2910,9990219,""" http://stackoverflow.com/questions/9990219/vim-whats-the-difference-between-let-and-set"
e6c2e2f6986399ed0a6d026c21bcd1a74ccd7ab5,32616959,	Catch err ;http://stackoverflow.com/questions/32616959/winhttprequest-timeouts
1b92d9f7f9428331eb1c9017873cadc75374fd05,2880929,    // http://stackoverflow.com/questions/901115/get-querystring-values-in-javascript/2880929#2880929
494d3e19c02305372c7a00696b8f1f8a5abdc5dc,13013056,    // http://stackoverflow.com/questions/8204680/java-regex-email/13013056#13013056
fb0e2fe2a0c02a04da265e04ad1debd24e01f6f2,34321245,        //http://stackoverflow.com/a/34321245
b19e9c4dec026c03bc4e0032d561c71cb2ddcbe8,28210364,	    // http://stackoverflow.com/a/28210364/1070244
69613c1f484fe9c456774d21a0a382c7d7104ef7,7204805,"    """"""http://stackoverflow.com/questions/7204805/"
901cc9c4e74256ea6364a39a10c0f7e82c451809,619725,     * Taken from https://stackoverflow.com/a/619725
a66203e66d011dd7221cab2d272774b44be52768,2342579,            //http://stackoverflow.com/questions/2342579/http-status-code-for-update-and-delete
5b6f135361643f747c54efd918a6ce3da86cf0f2,7323958,    # http://stackoverflow.com/questions/7323958/are-put-and-post-requests-required-expected-to-have-a-request-body
b793a2fa394dc7194d31dcb607b9fbf667b58555,28174193,    # http://stackoverflow.com/questions/28174193/add-new-column-based-on-a-list-and-sort-date-by-newest
dc548b18af6c0b8d43ead7c456ce1129c77d5e1b,10454552,            // credit: http://stackoverflow.com/a/10454552/677735
30c474d485838ed269eff815ae5d514db9a146bd,10149963,  // http://stackoverflow.com/questions/10149963/adding-event-listener-cross-browser
bab2b7a134e2e5448dbb857898597d02e277a423,28162065,  // Función para hacer splice de un array dentro de otro array. Adaptado de http://stackoverflow.com/a/28162065
2515257b30fcac60ccac9e59a617c397ae92072e,7310457,// http://stackoverflow.com/questions/7310457/ios-objective-c-sha-1-and-base64-problem
da8fae65fa86a9b517d3f6b0cb0549eb1a64b82d,101268,"                <DT><A HREF=""http://stackoverflow.com/questions/101268/hidden-features-of-python?rq=1"" ADD_DATE=""1432205152"" ICON=""data:image/png;base64, "">Hidden features of Python - Stack Overflow</A>"
4d56d5ff639bd3bac5abe4fe93cb1dd848552265,24952984,    // http://stackoverflow.com/questions/24952984/play-and-stop-vimeo-video-placed-in-bootstrap-modal
281f601c6c31c196d65d3e8165a59367c3cadb3e,19909912,  # Pris de la page http://stackoverflow.com/questions/19909912/cucumber-reading-data-from-a-3-column-table
9a7e7c47d798897a1b460b052421ad6dedb65552,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
7ab5468c01e6e349aaf77c934c5aabbd51f07d8f,51158830,# https://stackoverflow.com/questions/51158830/nginx-connect-to-unix-var-run-php7-2-fpm-sock-failed-2-no-such-file-or-dir
2e23eaea04d83ce831f459a75b40afb370eef407,16485687,"5713210,story,,,1,0,jontro,""Java: Extracting pairs of words using String.split()"",http://stackoverflow.com/questions/16485687/extracting-pairs-of-words-using-string-split,,1368636701"
2308b3c7ae5076080a3e5b959a1b737bfdfc9287,1762378,// inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378
23db6c5e7ca2550fe27301a44a3160260cdfe1f2,218057,      <!-- Needed for login/membership to work on homepage (as per http://stackoverflow.com/questions/218057/httpcontext-current-session-is-null-when-routing-requests) -->
ec1209555ee1698ea7ce6e571b0b0ee28ee8dc8d,12229714,// see http://stackoverflow.com/questions/12229714/building-glew-for-mac-osx
9c935e7e60f30351733b035656f3394fd361186a,5661671,"{""version"":3,""file"":""flicking.min.js"",""sources"":[""../src/consts.ts"",""../src/utils.ts"",""../src/components/Panel.ts"",""../src/components/PanelManager.ts"",""../src/states/State.ts"",""../src/states/IdleState.ts"",""../src/states/HoldingState.ts"",""../src/states/DraggingState.ts"",""../src/states/AnimatingState.ts"",""../src/states/DisabledState.ts"",""../src/components/StateMachine.ts"",""../src/moves/Snap.ts"",""../src/moves/MoveType.ts"",""../src/moves/FreeScroll.ts"",""../src/components/Viewport.ts"",""../src/ga/ga.ts"",""../src/Flicking.ts"",""../src/index.umd.ts""],""sourcesContent"":[""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { FlickingOptions, EventType, Direction, AxesEventType, StateType, MoveTypeSnapOption, MoveTypeFreeScrollOption, FlickingMethodsKeys } from \""./types\"";\n\nexport const MOVE_TYPE: {\n  SNAP: \""snap\"";\n  FREE_SCROLL: \""freeScroll\"";\n} = {\n  SNAP: \""snap\"",\n  FREE_SCROLL: \""freeScroll\"",\n};\n\nexport const DEFAULT_MOVE_TYPE_OPTIONS: {\n  snap: MoveTypeSnapOption,\n  freeScroll: MoveTypeFreeScrollOption,\n} = {\n  snap: {\n    type: \""snap\"",\n    count: 1,\n  },\n  freeScroll: {\n    type: \""freeScroll\"",\n  },\n};\nexport const isBrowser = typeof document !== \""undefined\"";\n\n/**\n * Default options for creating Flicking.\n * @ko 플리킹을 만들 때 사용하는 기본 옵션들\n * @private\n * @memberof eg.Flicking\n */\nexport const DEFAULT_OPTIONS: Readonly<FlickingOptions> = {\n  classPrefix: \""eg-flick\"",\n  deceleration: 0.0075,\n  horizontal: true,\n  circular: false,\n  infinite: false,\n  infiniteThreshold: 0,\n  lastIndex: Infinity,\n  threshold: 40,\n  duration: 100,\n  panelEffect: x => 1 - Math.pow(1 - x, 3),\n  defaultIndex: 0,\n  inputType: [\""touch\"", \""mouse\""],\n  thresholdAngle: 45,\n  bounce: 10,\n  autoResize: false,\n  adaptive: false,\n  zIndex: 2000,\n  bound: false,\n  overflow: false,\n  hanger: \""50%\"",\n  anchor: \""50%\"",\n  gap: 0,\n  moveType: DEFAULT_MOVE_TYPE_OPTIONS.snap,\n  useOffset: false,\n  isEqualSize: false,\n  isConstantSize: false,\n  renderOnlyVisible: false,\n  renderExternal: false,\n  collectStatistics: true,\n};\n\nexport const DEFAULT_VIEWPORT_CSS = {\n  position: \""relative\"",\n  zIndex: DEFAULT_OPTIONS.zIndex,\n  overflow: \""hidden\"",\n};\n\nexport const DEFAULT_CAMERA_CSS = {\n  width: \""100%\"",\n  height: \""100%\"",\n  willChange: \""transform\"",\n};\n\nexport const DEFAULT_PANEL_CSS = {\n  position: \""absolute\"",\n};\n\nexport const EVENTS: EventType = {\n  HOLD_START: \""holdStart\"",\n  HOLD_END: \""holdEnd\"",\n  MOVE_START: \""moveStart\"",\n  MOVE: \""move\"",\n  MOVE_END: \""moveEnd\"",\n  CHANGE: \""change\"",\n  RESTORE: \""restore\"",\n  SELECT: \""select\"",\n  NEED_PANEL: \""needPanel\"",\n  VISIBLE_CHANGE: \""visibleChange\"",\n};\n\nexport const AXES_EVENTS: AxesEventType = {\n  HOLD: \""hold\"",\n  CHANGE: \""change\"",\n  RELEASE: \""release\"",\n  ANIMATION_END: \""animationEnd\"",\n  FINISH: \""finish\"",\n};\n\nexport const STATE_TYPE: StateType = {\n  IDLE: 0,\n  HOLDING: 1,\n  DRAGGING: 2,\n  ANIMATING: 3,\n  DISABLED: 4,\n};\n\nexport const DIRECTION: Direction = {\n  PREV: \""PREV\"",\n  NEXT: \""NEXT\"",\n};\nexport const FLICKING_METHODS: {[key in FlickingMethodsKeys]: true} = {\n  prev: true,\n  next: true,\n  moveTo: true,\n  getIndex: true,\n  getAllPanels: true,\n  getCurrentPanel: true,\n  getElement: true,\n  getPanel: true,\n  getPanelCount: true,\n  getStatus: true,\n  getVisiblePanels: true,\n  setLastIndex: true,\n  enableInput: true,\n  disableInput: true,\n  destroy: true,\n  resize: true,\n  setStatus: true,\n  addPlugins: true,\n  removePlugins: true,\n  isPlaying: true,\n  getLastIndex: true,\n};\n\n// Check whether browser supports transform: translate3d\n// https://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support\nexport let checkTranslateSupport = () => {\n  const transforms = {\n    webkitTransform: \""-webkit-transform\"",\n    msTransform: \""-ms-transform\"",\n    MozTransform: \""-moz-transform\"",\n    OTransform: \""-o-transform\"",\n    transform: \""transform\"",\n  };\n\n  if (!isBrowser) {\n    return {\n      name: transforms.transform,\n      has3d: true,\n    };\n  }\n  const supportedStyle = document.documentElement.style;\n  let transformName = \""\"";\n  for (const prefixedTransform in transforms) {\n    if (prefixedTransform in supportedStyle) {\n      transformName = prefixedTransform;\n    }\n  }\n\n  if (!transformName) {\n    throw new Error(\""Browser doesn't support CSS3 2D Transforms.\"");\n  }\n\n  const el = document.createElement(\""div\"");\n\n  document.documentElement.insertBefore(el, null);\n\n  el.style[transformName] = \""translate3d(1px, 1px, 1px)\"";\n  const styleVal = window.getComputedStyle(el).getPropertyValue(transforms[transformName]);\n\n  el.parentElement!.removeChild(el);\n\n  const transformInfo = {\n    name: transformName,\n    has3d: styleVal.length > 0 && styleVal !== \""none\"",\n  };\n\n  checkTranslateSupport = () => transformInfo;\n\n  return transformInfo;\n};\n\nexport const TRANSFORM = checkTranslateSupport();\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { ElementLike, OriginalStyle, BoundingBox } from \""./types\"";\nimport Flicking from \""./Flicking\"";\nimport { FLICKING_METHODS } from \""./consts\"";\n\nexport function merge(target: object, ...srcs: object[]): object {\n  srcs.forEach(source => {\n    Object.keys(source).forEach(key => {\n      const value = source[key];\n      target[key] = value;\n    });\n  });\n\n  return target;\n}\n\nexport function parseElement(element: ElementLike | ElementLike[]): HTMLElement[] {\n  if (!Array.isArray(element)) {\n    element = [element];\n  }\n\n  const elements: HTMLElement[] = [];\n  element.forEach(el => {\n    if (isString(el)) {\n      const tempDiv = document.createElement(\""div\"");\n      tempDiv.innerHTML = el;\n\n      elements.push(...toArray(tempDiv.children) as HTMLElement[]);\n      while (tempDiv.firstChild) {\n        tempDiv.removeChild(tempDiv.firstChild);\n      }\n    } else {\n      elements.push(el as HTMLElement);\n    }\n  });\n\n  return elements;\n}\n\nexport function isString(value: any): value is string {\n  return typeof value === \""string\"";\n}\n\n// Get class list of element as string array\nexport function classList(element: HTMLElement): string[] {\n  return element.classList\n    ? toArray(element.classList)\n    : element.className.split(\"" \"");\n}\n\n// Add class to specified element\nexport function addClass(element: HTMLElement, className: string): void {\n  if (element.classList) {\n    element.classList.add(className);\n  } else {\n    if (!hasClass(element, className)) {\n      element.className = (`${element.className} ${className}`).replace(/\\s{2,}/g, \"" \"");\n    }\n  }\n}\n\nexport function hasClass(element: HTMLElement, className: string): boolean {\n  if (element.classList) {\n    return element.classList.contains(className);\n  } else {\n    return (element.className.split(\"" \"").indexOf(className) >= 0);\n  }\n}\n\nexport function applyCSS(element: HTMLElement, cssObj: object): void {\n  Object.keys(cssObj).forEach(property => {\n    element.style[property] = cssObj[property];\n  });\n}\n\nexport function clamp(val: number, min: number, max: number) {\n  return Math.max(Math.min(val, max), min);\n}\n\n// Min: inclusive, Max: exclusive\nexport function isBetween(val: number, min: number, max: number) {\n  return val >= min && val <= max;\n}\n\nexport interface ArrayLike<T> {\n  length: number;\n  [index: number]: T;\n}\n\nexport function toArray<T>(iterable: ArrayLike<T>): T[] {\n  return [].slice.call(iterable);\n}\n\nexport function isArray(arr: any): boolean {\n  return arr && arr.constructor === Array;\n}\n\nexport function parseArithmeticExpression(cssValue: number | string, base: number, defaultVal?: number): number {\n  // Set base / 2 to default value, if it's undefined\n  const defaultValue = defaultVal != null ? defaultVal : base / 2;\n  const cssRegex = /(?:(\\+|\\-)\\s*)?(\\d+(?:\\.\\d+)?(%|px)?)/g;\n\n  if (typeof cssValue === \""number\"") {\n    return clamp(cssValue, 0, base);\n  }\n\n  let idx = 0;\n  let calculatedValue = 0;\n  let matchResult = cssRegex.exec(cssValue);\n  while (matchResult != null) {\n    let sign = matchResult[1];\n    const value = matchResult[2];\n    const unit = matchResult[3];\n\n    let parsedValue = parseFloat(value);\n\n    if (idx <= 0) {\n      sign = sign || \""+\"";\n    }\n\n    // Return default value for values not in good form\n    if (!sign) {\n      return defaultValue;\n    }\n\n    if (unit === \""%\"") {\n      parsedValue = (parsedValue / 100) * base;\n    }\n\n    calculatedValue += sign === \""+\""\n      ? parsedValue\n      : -parsedValue;\n\n    // Match next occurrence\n    ++idx;\n    matchResult = cssRegex.exec(cssValue);\n  }\n\n  // None-matched\n  if (idx === 0) {\n    return defaultValue;\n  }\n\n  // Clamp between 0 ~ base\n  return clamp(calculatedValue, 0, base);\n}\n\nexport function getProgress(pos: number, range: number[]) {\n  // start, anchor, end\n  // -1 , 0 , 1\n  const [min, center, max] = range;\n\n  if (pos > center && (max - center)) {\n    // 0 ~ 1\n    return (pos - center) / (max - center);\n  } else if (pos < center && (center - min)) {\n    // -1 ~ 0\n    return (pos - center) / (center - min);\n  } else if (pos !== center && max - min) {\n    return (pos - min) / (max - min);\n  }\n  return 0;\n}\n\nexport function findIndex<T>(iterable: T[], callback: (el: T) => boolean): number {\n  for (let i = 0; i < iterable.length; i += 1) {\n    const element = iterable[i];\n    if (element && callback(element)) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\n// return [0, 1, ...., max - 1]\nexport function counter(max: number): number[] {\n  const counterArray: number[] = [];\n  for (let i = 0; i < max; i += 1) {\n    counterArray[i] = i;\n  }\n  return counterArray;\n}\n\n// Circulate number between range [min, max]\n/*\n * \""indexed\"" means min and max is not same, so if it's true \""min - 1\"" should be max\n * While if it's false, \""min - 1\"" should be \""max - 1\""\n * use `indexed: true` when it should be used for circulating integers like index\n * or `indexed: false` when it should be used for something like positions.\n */\nexport function circulate(value: number, min: number, max: number, indexed: boolean): number {\n  const size = indexed\n    ? max - min + 1\n    : max - min;\n  if (value < min) {\n    const offset = indexed\n      ? (min - value - 1) % size\n      : (min - value) % size;\n    value = max - offset;\n  } else if (value > max) {\n    const offset = indexed\n      ? (value - max - 1) % size\n      : (value - max) % size;\n    value = min + offset;\n  }\n\n  return value;\n}\n\nexport function restoreStyle(element: HTMLElement, originalStyle: OriginalStyle): void {\n  originalStyle.className\n    ? element.setAttribute(\""class\"", originalStyle.className)\n    : element.removeAttribute(\""class\"");\n  originalStyle.style\n    ? element.setAttribute(\""style\"", originalStyle.style)\n    : element.removeAttribute(\""style\"");\n}\n\n/**\n * Decorator that makes the method of flicking available in the framework.\n * @ko 프레임워크에서 플리킹의 메소드를 사용할 수 있게 하는 데코레이터.\n * @memberof eg.Flicking\n * @private\n * @example\n * ```js\n * import Flicking, { withFlickingMethods } from \""@egjs/flicking\"";\n *\n * class Flicking extends React.Component<Partial<FlickingProps & FlickingOptions>> {\n *   &#64;withFlickingMethods\n *   private flicking: Flicking;\n * }\n * ```\n */\nexport function withFlickingMethods(prototype: any, flickingName: string) {\n  Object.keys(FLICKING_METHODS).forEach((name: keyof Flicking) => {\n    if (prototype[name]) {\n      return;\n    }\n    prototype[name] = function(...args) {\n      const result = this[flickingName][name](...args);\n\n      // fix `this` type to return your own `flicking` instance to the instance using the decorator.\n      if (result === this[flickingName]) {\n        return this;\n      } else {\n        return result;\n      }\n    };\n  });\n}\n\nexport function getBbox(element: HTMLElement, useOffset: boolean) {\n  let bbox: BoundingBox;\n  if (useOffset) {\n    bbox = {\n      x: 0,\n      y: 0,\n      width: element.offsetWidth,\n      height: element.offsetHeight,\n    };\n  } else {\n    const clientRect = element.getBoundingClientRect();\n    bbox = {\n      x: clientRect.left,\n      y: clientRect.top,\n      width: clientRect.width,\n      height: clientRect.height,\n    };\n  }\n  return bbox;\n}\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Viewport from \""./Viewport\"";\nimport { OriginalStyle, FlickingPanel, ElementLike, DestroyOption, BoundingBox } from \""../types\"";\nimport { DEFAULT_PANEL_CSS, EVENTS } from \""../consts\"";\nimport { addClass, applyCSS, parseArithmeticExpression, parseElement, getProgress, restoreStyle, hasClass, getBbox } from \""../utils\"";\n\nclass Panel implements FlickingPanel {\n  public viewport: Viewport;\n  public prevSibling: Panel | null;\n  public nextSibling: Panel | null;\n\n  protected state: {\n    index: number;\n    position: number;\n    relativeAnchorPosition: number;\n    size: number;\n    isClone: boolean;\n    isVirtual: boolean;\n    // Index of cloned panel, zero-based integer(original: -1, cloned: [0, 1, 2, ...])\n    // if cloneIndex is 0, that means it's first cloned panel of original panel\n    cloneIndex: number;\n    originalStyle: OriginalStyle;\n    cachedBbox: BoundingBox | null;\n  };\n  private element: HTMLElement;\n  private original?: Panel;\n  private clonedPanels: Panel[];\n\n  public constructor(\n    element?: HTMLElement | null,\n    index?: number,\n    viewport?: Viewport,\n  ) {\n    this.viewport = viewport!;\n    this.prevSibling = null;\n    this.nextSibling = null;\n    this.clonedPanels = [];\n\n    this.state = {\n      index: index!,\n      position: 0,\n      relativeAnchorPosition: 0,\n      size: 0,\n      isClone: false,\n      isVirtual: false,\n      cloneIndex: -1,\n      originalStyle: {\n        className: \""\"",\n        style: \""\"",\n      },\n      cachedBbox: null,\n    };\n    this.setElement(element);\n  }\n\n  public resize(givenBbox?: BoundingBox): void {\n    const state = this.state;\n    const options = this.viewport.options;\n    const bbox = givenBbox\n      ? givenBbox\n      : this.getBbox();\n    this.state.cachedBbox = bbox;\n    const prevSize = state.size;\n\n    state.size = options.horizontal\n      ? bbox.width\n      : bbox.height;\n\n    if (prevSize !== state.size) {\n      state.relativeAnchorPosition = parseArithmeticExpression(options.anchor, state.size);\n    }\n\n    if (!state.isClone) {\n      this.clonedPanels.forEach(panel => {\n        const cloneState = panel.state;\n\n        cloneState.size = state.size;\n        cloneState.cachedBbox = state.cachedBbox;\n        cloneState.relativeAnchorPosition = state.relativeAnchorPosition;\n      });\n    }\n  }\n\n  public unCacheBbox(): void {\n    this.state.cachedBbox = null;\n  }\n\n  public getProgress() {\n    const viewport = this.viewport;\n    const options = viewport.options;\n    const panelCount = viewport.panelManager.getPanelCount();\n    const scrollAreaSize = viewport.getScrollAreaSize();\n\n    const relativeIndex = (options.circular ? Math.floor(this.getPosition() / scrollAreaSize) * panelCount : 0) + this.getIndex();\n    const progress = relativeIndex - viewport.getCurrentProgress();\n\n    return progress;\n  }\n\n  public getOutsetProgress() {\n    const viewport = this.viewport;\n    const outsetRange = [\n      -this.getSize(),\n      viewport.getRelativeHangerPosition() - this.getRelativeAnchorPosition(),\n      viewport.getSize(),\n    ];\n    const relativePanelPosition = this.getPosition() - viewport.getCameraPosition();\n    const outsetProgress = getProgress(relativePanelPosition, outsetRange);\n\n    return outsetProgress;\n  }\n\n  public getVisibleRatio() {\n    const viewport = this.viewport;\n    const panelSize = this.getSize();\n    const relativePanelPosition = this.getPosition() - viewport.getCameraPosition();\n    const rightRelativePanelPosition = relativePanelPosition + panelSize;\n\n    const visibleSize = Math.min(viewport.getSize(), rightRelativePanelPosition) - Math.max(relativePanelPosition, 0);\n    const visibleRatio = visibleSize >= 0\n      ? visibleSize / panelSize\n      : 0;\n\n    return visibleRatio;\n  }\n\n  public focus(duration?: number): void {\n    const viewport = this.viewport;\n    const currentPanel = viewport.getCurrentPanel();\n    const hangerPosition = viewport.getHangerPosition();\n    const anchorPosition = this.getAnchorPosition();\n    if (hangerPosition === anchorPosition || !currentPanel) {\n      return;\n    }\n\n    const currentPosition = currentPanel.getPosition();\n    const eventType = currentPosition === this.getPosition()\n      ? \""\""\n      : EVENTS.CHANGE;\n\n    viewport.moveTo(this, viewport.findEstimatedPosition(this), eventType, null, duration);\n  }\n\n  public update(updateFunction: ((element: HTMLElement) => any) | null = null, shouldResize: boolean = true): void {\n    const identicalPanels = this.getIdenticalPanels();\n\n    if (updateFunction) {\n      identicalPanels.forEach(eachPanel => {\n        updateFunction(eachPanel.getElement());\n      });\n    }\n\n    if (shouldResize) {\n      identicalPanels.forEach(eachPanel => {\n        eachPanel.unCacheBbox();\n      });\n      this.viewport.addVisiblePanel(this);\n      this.viewport.resize();\n    }\n  }\n\n  public prev(): FlickingPanel | null {\n    const viewport = this.viewport;\n    const options = viewport.options;\n    const prevSibling = this.prevSibling;\n\n    if (!prevSibling) {\n      return null;\n    }\n\n    const currentIndex = this.getIndex();\n    const currentPosition = this.getPosition();\n    const prevPanelIndex = prevSibling.getIndex();\n    const prevPanelPosition = prevSibling.getPosition();\n    const prevPanelSize = prevSibling.getSize();\n\n    const hasEmptyPanelBetween = currentIndex - prevPanelIndex > 1;\n    const notYetMinPanel = options.infinite\n      && currentIndex > 0\n      && prevPanelIndex > currentIndex;\n\n    if (hasEmptyPanelBetween || notYetMinPanel) {\n      // Empty panel exists between\n      return null;\n    }\n\n    const newPosition = currentPosition - prevPanelSize - options.gap;\n\n    let prevPanel = prevSibling;\n    if (prevPanelPosition !== newPosition) {\n      prevPanel = prevSibling.clone(prevSibling.getCloneIndex(), true);\n      prevPanel.setPosition(newPosition);\n    }\n\n    return prevPanel;\n  }\n\n  public next(): FlickingPanel | null {\n    const viewport = this.viewport;\n    const options = viewport.options;\n    const nextSibling = this.nextSibling;\n    const lastIndex = viewport.panelManager.getLastIndex();\n\n    if (!nextSibling) {\n      return null;\n    }\n\n    const currentIndex = this.getIndex();\n    const currentPosition = this.getPosition();\n    const nextPanelIndex = nextSibling.getIndex();\n    const nextPanelPosition = nextSibling.getPosition();\n\n    const hasEmptyPanelBetween = nextPanelIndex - currentIndex > 1;\n    const notYetMaxPanel = options.infinite\n      && currentIndex < lastIndex\n      && nextPanelIndex < currentIndex;\n\n    if (hasEmptyPanelBetween || notYetMaxPanel) {\n      return null;\n    }\n\n    const newPosition = currentPosition + this.getSize() + options.gap;\n\n    let nextPanel = nextSibling;\n    if (nextPanelPosition !== newPosition) {\n      nextPanel = nextSibling.clone(nextSibling.getCloneIndex(), true);\n      nextPanel.setPosition(newPosition);\n    }\n\n    return nextPanel;\n  }\n\n  public insertBefore(element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const viewport = this.viewport;\n    const parsedElements = parseElement(element);\n    const firstPanel = viewport.panelManager.firstPanel()!;\n    const prevSibling = this.prevSibling;\n    // Finding correct inserting index\n    // While it should insert removing empty spaces,\n    // It also should have to be bigger than prevSibling' s index\n    const targetIndex = prevSibling && firstPanel.getIndex() !== this.getIndex()\n      ? Math.max(prevSibling.getIndex() + 1, this.getIndex() - parsedElements.length)\n      : Math.max(this.getIndex() - parsedElements.length, 0);\n\n    return viewport.insert(targetIndex, parsedElements);\n  }\n\n  public insertAfter(element: ElementLike | ElementLike[]): FlickingPanel[] {\n    return this.viewport.insert(this.getIndex() + 1, element);\n  }\n\n  public remove(): FlickingPanel {\n    this.viewport.remove(this.getIndex());\n\n    return this;\n  }\n\n  public destroy(option: Partial<DestroyOption>): void {\n    if (!option.preserveUI) {\n      const originalStyle = this.state.originalStyle;\n\n      restoreStyle(this.element, originalStyle);\n    }\n\n    // release resources\n    for (const x in this) {\n      (this as any)[x] = null;\n    }\n  }\n\n  public getElement(): HTMLElement {\n    return this.element;\n  }\n\n  public getAnchorPosition(): number {\n    return this.state.position + this.state.relativeAnchorPosition;\n  }\n\n  public getRelativeAnchorPosition(): number {\n    return this.state.relativeAnchorPosition;\n  }\n\n  public getIndex(): number {\n    return this.state.index;\n  }\n\n  public getPosition(): number {\n    return this.state.position;\n  }\n\n  public getSize(): number {\n    return this.state.size;\n  }\n\n  public getBbox(): BoundingBox {\n    const state = this.state;\n    const viewport = this.viewport;\n    const element = this.element;\n    const options = viewport.options;\n\n    if (!element) {\n      state.cachedBbox = {\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0,\n      };\n    } else if (!state.cachedBbox) {\n      const wasVisible = Boolean(element.parentNode);\n      const cameraElement = viewport.getCameraElement();\n      if (!wasVisible) {\n        cameraElement.appendChild(element);\n        viewport.addVisiblePanel(this);\n      }\n      state.cachedBbox = getBbox(element, options.useOffset);\n\n      if (!wasVisible && viewport.options.renderExternal) {\n        cameraElement.removeChild(element);\n      }\n    }\n    return state.cachedBbox!;\n  }\n\n  public isClone(): boolean {\n    return this.state.isClone;\n  }\n\n  public getOverlappedClass(classes: string[]): string | undefined {\n    const element = this.element;\n\n    for (const className of classes) {\n      if (hasClass(element, className)) {\n        return className;\n      }\n    }\n  }\n\n  public getCloneIndex(): number {\n    return this.state.cloneIndex;\n  }\n\n  public getClonedPanels(): Panel[] {\n    const state = this.state;\n\n    return state.isClone\n      ? this.original!.getClonedPanels()\n      : this.clonedPanels;\n  }\n\n  public getIdenticalPanels(): Panel[] {\n    const state = this.state;\n\n    return state.isClone\n      ? this.original!.getIdenticalPanels()\n      : [this, ...this.clonedPanels];\n  }\n\n  public getOriginalPanel(): Panel {\n    return this.state.isClone\n      ? this.original!\n      : this;\n  }\n\n  public setIndex(index: number): void {\n    const state = this.state;\n\n    state.index = index;\n    this.clonedPanels.forEach(panel => panel.state.index = index);\n  }\n\n  public setPosition(pos: number): this {\n    this.state.position = pos;\n\n    return this;\n  }\n\n  public setPositionCSS(offset: number = 0): void {\n    if (!this.element) {\n      return;\n    }\n    const state = this.state;\n    const pos = state.position;\n    const options = this.viewport.options;\n    const elementStyle = this.element.style;\n    const currentElementStyle = options.horizontal\n      ? elementStyle.left\n      : elementStyle.top;\n    const styleToApply = `${pos - offset}px`;\n\n    if (!state.isVirtual && currentElementStyle !== styleToApply) {\n      options.horizontal\n        ? elementStyle.left = styleToApply\n        : elementStyle.top = styleToApply;\n    }\n  }\n\n  public clone(cloneIndex: number, isVirtual: boolean = false, element?: HTMLElement | null): Panel {\n    const state = this.state;\n    const viewport = this.viewport;\n    let cloneElement = element;\n\n    if (!cloneElement && this.element) {\n      cloneElement = isVirtual ? this.element : this.element.cloneNode(true) as HTMLElement;\n    }\n    const clonedPanel = new Panel(cloneElement, state.index, viewport);\n    const clonedState = clonedPanel.state;\n\n    clonedPanel.original = state.isClone\n      ? this.original\n      : this;\n    clonedState.isClone = true;\n    clonedState.isVirtual = isVirtual;\n    clonedState.cloneIndex = cloneIndex;\n    // Inherit some state values\n    clonedState.size = state.size;\n    clonedState.relativeAnchorPosition = state.relativeAnchorPosition;\n    clonedState.originalStyle = state.originalStyle;\n    clonedState.cachedBbox = state.cachedBbox;\n\n    if (!isVirtual) {\n      this.clonedPanels.push(clonedPanel);\n    } else {\n      clonedPanel.prevSibling = this.prevSibling;\n      clonedPanel.nextSibling = this.nextSibling;\n    }\n\n    return clonedPanel;\n  }\n\n  public removeElement(): void {\n    if (!this.viewport.options.renderExternal) {\n      const element = this.element;\n      element.parentNode!.removeChild(element);\n    }\n\n    // Do the same thing for clones\n    if (!this.state.isClone) {\n      this.removeClonedPanelsAfter(0);\n    }\n  }\n\n  public removeClonedPanelsAfter(start: number): void {\n    const options = this.viewport.options;\n    const removingPanels = this.clonedPanels.splice(start);\n\n    if (!options.renderExternal && !options.renderOnlyVisible) {\n      removingPanels.forEach(panel => {\n        panel.removeElement();\n      });\n    }\n  }\n\n  public setElement(element?: HTMLElement | null): void {\n    if (!element) {\n      return;\n    }\n    const currentElement = this.element;\n    if (element !== currentElement) {\n      const options = this.viewport.options;\n\n      if (currentElement) {\n        if (options.horizontal) {\n          element.style.left = currentElement.style.left;\n        } else {\n          element.style.top = currentElement.style.top;\n        }\n      } else {\n        const originalStyle = this.state.originalStyle;\n\n        originalStyle.className = element.getAttribute(\""class\"");\n        originalStyle.style = element.getAttribute(\""style\"");\n      }\n\n      this.element = element;\n\n      if (options.classPrefix) {\n        addClass(element, `${options.classPrefix}-panel`);\n      }\n\n      // Update size info after applying panel css\n      applyCSS(this.element, DEFAULT_PANEL_CSS);\n    }\n  }\n}\n\nexport default Panel;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Panel from \""./Panel\"";\nimport { FlickingOptions } from \""../types\"";\nimport { findIndex, counter } from \""../utils\"";\n\nclass PanelManager {\n  private cameraElement: HTMLElement;\n  private options: FlickingOptions;\n  private panels: Panel[];\n  private clones: Panel[][];\n  // index range of existing panels\n  private range: {\n    min: number;\n    max: number;\n  };\n  private length: number;\n  private lastIndex: number;\n  private cloneCount: number;\n\n  constructor(\n    cameraElement: HTMLElement,\n    options: FlickingOptions,\n  ) {\n    this.cameraElement = cameraElement;\n    this.panels = [];\n    this.clones = [];\n    this.range = {\n      min: -1,\n      max: -1,\n    };\n    this.length = 0;\n    this.cloneCount = 0;\n    this.options = options;\n    this.lastIndex = options.lastIndex;\n  }\n\n  public firstPanel(): Panel | undefined {\n    return this.panels[this.range.min];\n  }\n\n  public lastPanel(): Panel | undefined {\n    return this.panels[this.range.max];\n  }\n\n  public allPanels(): ReadonlyArray<Panel> {\n    return [\n      ...this.panels,\n      ...this.clones.reduce((allClones, clones) => [...allClones, ...clones], []),\n    ];\n  }\n\n  public originalPanels(): ReadonlyArray<Panel> {\n    return this.panels;\n  }\n\n  public clonedPanels(): ReadonlyArray<Panel[]> {\n    return this.clones;\n  }\n\n  public replacePanels(newPanels: Panel[], newClones: Panel[][]): void {\n    this.panels = newPanels;\n    this.clones = newClones;\n\n    this.range = {\n      min: findIndex(newPanels, panel => Boolean(panel)),\n      max: newPanels.length - 1,\n    };\n    this.length = newPanels.filter(panel => Boolean(panel)).length;\n  }\n\n  public has(index: number): boolean {\n    return !!this.panels[index];\n  }\n\n  public get(index: number): Panel | undefined {\n    return this.panels[index];\n  }\n\n  public getPanelCount(): number {\n    return this.length;\n  }\n\n  public getLastIndex(): number {\n    return this.lastIndex;\n  }\n\n  public getRange(): Readonly<{ min: number, max: number }> {\n    return this.range;\n  }\n\n  public getCloneCount(): number {\n    return this.cloneCount;\n  }\n\n  public setLastIndex(lastIndex: number): void {\n    this.lastIndex = lastIndex;\n\n    const firstPanel = this.firstPanel();\n    const lastPanel = this.lastPanel();\n\n    if (!firstPanel || !lastPanel) {\n      return; // no meaning of updating range & length\n    }\n\n    // Remove panels above new last index\n    const range = this.range;\n    if (lastPanel.getIndex() > lastIndex) {\n      const removingPanels = this.panels.splice(lastIndex + 1);\n      this.length -= removingPanels.length;\n\n      const firstRemovedPanel = removingPanels.filter(panel => !!panel)[0];\n      const possibleLastPanel = firstRemovedPanel.prevSibling;\n      if (possibleLastPanel) {\n        range.max = possibleLastPanel.getIndex();\n      } else {\n        range.min = -1;\n        range.max = -1;\n      }\n\n      if (this.shouldRender()) {\n        removingPanels.forEach(panel => panel.removeElement());\n      }\n    }\n  }\n\n  public setCloneCount(cloneCount: number): void {\n    this.cloneCount = cloneCount;\n  }\n\n  // Insert at index\n  // Returns pushed elements from index, inserting at 'empty' position doesn't push elements behind it\n  public insert(index: number, newPanels: Panel[]): number {\n    const panels = this.panels;\n    const range = this.range;\n    const isCircular = this.options.circular;\n    const lastIndex = this.lastIndex;\n\n    // Find first panel that index is greater than inserting index\n    const nextSibling = this.findFirstPanelFrom(index);\n\n    // if it's null, element will be inserted at last position\n    // https://developer.mozilla.org/ko/docs/Web/API/Node/insertBefore#Syntax\n    const firstPanel = this.firstPanel();\n    const siblingElement = nextSibling\n      ? nextSibling.getElement()\n      : isCircular && firstPanel\n        ? firstPanel.getClonedPanels()[0].getElement()\n        : null;\n\n    // Insert panels before sibling element\n    this.insertNewPanels(newPanels, siblingElement);\n\n    let pushedIndex = newPanels.length;\n    // Like when setting index 50 while visible panels are 0, 1, 2\n    if (index > range.max) {\n      newPanels.forEach((panel, offset) => {\n        panels[index + offset] = panel;\n      });\n    } else {\n      const panelsAfterIndex = panels.slice(index, index + newPanels.length);\n      // Find empty from beginning\n      let emptyPanelCount = findIndex(panelsAfterIndex, panel => !!panel);\n      if (emptyPanelCount < 0) {\n        // All empty\n        emptyPanelCount = panelsAfterIndex.length;\n      }\n      pushedIndex = newPanels.length - emptyPanelCount;\n\n      // Insert removing empty panels\n      panels.splice(index, emptyPanelCount, ...newPanels);\n\n      // Remove panels after last index\n      if (panels.length > lastIndex + 1) {\n        const removedPanels = panels.splice(lastIndex + 1)\n          .filter(panel => Boolean(panel));\n        this.length -= removedPanels.length;\n\n        // Find first\n        const newLastIndex = lastIndex - findIndex(this.panels.concat().reverse(), panel => !!panel);\n\n        // Can be filled with empty after newLastIndex\n        this.panels.splice(newLastIndex + 1);\n        this.range.max = newLastIndex;\n\n        if (this.shouldRender()) {\n          removedPanels.forEach(panel => panel.removeElement());\n        }\n      }\n    }\n\n    // Update index of previous panels\n    if (pushedIndex > 0) {\n      panels.slice(index + newPanels.length).forEach(panel => {\n        panel.setIndex(panel.getIndex() + pushedIndex);\n      });\n    }\n\n    // Update state\n    this.length += newPanels.length;\n    this.updateIndex(index);\n\n    if (isCircular) {\n      this.addNewClones(index, newPanels, newPanels.length - pushedIndex, nextSibling);\n      const clones = this.clones;\n      const panelCount = this.panels.length;\n      if (clones[0] && clones[0].length > lastIndex + 1) {\n        clones.forEach(cloneSet => {\n          cloneSet.splice(panelCount);\n        });\n      }\n    }\n\n    return pushedIndex;\n  }\n\n  public replace(index: number, newPanels: Panel[]): Panel[] {\n    const panels = this.panels;\n    const range = this.range;\n    const options = this.options;\n    const isCircular = options.circular;\n\n    // Find first panel that index is greater than inserting index\n    const nextSibling = this.findFirstPanelFrom(index + newPanels.length);\n\n    // if it's null, element will be inserted at last position\n    // https://developer.mozilla.org/ko/docs/Web/API/Node/insertBefore#Syntax\n    const firstPanel = this.firstPanel();\n    const siblingElement = nextSibling\n      ? nextSibling.getElement()\n      : isCircular && firstPanel\n        ? firstPanel.getClonedPanels()[0].getElement()\n        : null;\n\n    // Insert panels before sibling element\n    this.insertNewPanels(newPanels, siblingElement);\n\n    if (index > range.max) {\n      // Temporarily insert null at index to use splice()\n      (panels[index] as any) = null;\n    }\n\n    const replacedPanels = panels.splice(index, newPanels.length, ...newPanels);\n    const wasNonEmptyCount = replacedPanels.filter(panel => Boolean(panel)).length;\n\n    // Suppose inserting [1, 2, 3] at 0 position when there were [empty, 1]\n    // So length should be increased by 3(inserting panels) - 1(non-empty panels)\n    this.length += newPanels.length - wasNonEmptyCount;\n    this.updateIndex(index);\n\n    if (isCircular) {\n      this.addNewClones(index, newPanels, newPanels.length, nextSibling);\n    }\n\n    if (this.shouldRender()) {\n      replacedPanels.forEach(panel => panel && panel.removeElement());\n    }\n\n    return replacedPanels;\n  }\n\n  public remove(index: number, deleteCount: number = 1): Panel[] {\n    const isCircular = this.options.circular;\n    const panels = this.panels;\n    const clones = this.clones;\n    // Delete count should be equal or larger than 0\n    deleteCount = Math.max(deleteCount, 0);\n\n    const deletedPanels = panels\n      .splice(index, deleteCount)\n      .filter(panel => !!panel);\n\n    if (this.shouldRender()) {\n      deletedPanels.forEach(panel => panel.removeElement());\n    }\n\n    if (isCircular) {\n      clones.forEach(cloneSet => {\n        cloneSet.splice(index, deleteCount);\n      });\n    }\n\n    // Update indexes\n    panels\n      .slice(index)\n      .forEach(panel => {\n        panel.setIndex(panel.getIndex() - deleteCount);\n      });\n\n    // Check last panel is empty\n    let lastIndex = panels.length - 1;\n    if (!panels[lastIndex]) {\n      const reversedPanels = panels.concat().reverse();\n      const nonEmptyIndexFromLast = findIndex(reversedPanels, panel => !!panel);\n      lastIndex = nonEmptyIndexFromLast < 0\n        ? -1 // All empty\n        : lastIndex - nonEmptyIndexFromLast;\n\n      // Remove all empty panels from last\n      panels.splice(lastIndex + 1);\n      if (isCircular) {\n        clones.forEach(cloneSet => {\n          cloneSet.splice(lastIndex + 1);\n        });\n      }\n    }\n\n    // Update range & length\n    this.range = {\n      min: findIndex(panels, panel => !!panel),\n      max: lastIndex,\n    };\n    this.length -= deletedPanels.length;\n\n    if (this.length <= 0) {\n      // Reset clones\n      this.clones = [];\n      this.cloneCount = 0;\n    }\n\n    return deletedPanels;\n  }\n\n  public chainAllPanels() {\n    const allPanels = this.allPanels().filter(panel => !!panel);\n    const allPanelsCount = allPanels.length;\n\n    if (allPanelsCount <= 1) {\n      return;\n    }\n\n    allPanels.slice(1, allPanels.length - 1).forEach((panel, idx) => {\n      const prevPanel = allPanels[idx];\n      const nextPanel = allPanels[idx + 2];\n\n      panel.prevSibling = prevPanel;\n      panel.nextSibling = nextPanel;\n    });\n\n    const firstPanel = allPanels[0];\n    const lastPanel = allPanels[allPanelsCount - 1];\n\n    firstPanel.prevSibling = null;\n    firstPanel.nextSibling = allPanels[1];\n    lastPanel.prevSibling = allPanels[allPanelsCount - 2];\n    lastPanel.nextSibling = null;\n\n    if (this.options.circular) {\n      firstPanel.prevSibling = lastPanel;\n      lastPanel.nextSibling = firstPanel;\n    }\n  }\n\n  public insertClones(cloneIndex: number, index: number, clonedPanels: Panel[], deleteCount: number = 0): void {\n    const clones = this.clones;\n    const lastIndex = this.lastIndex;\n\n    if (!clones[cloneIndex]) {\n      const newClones: Panel[] = [];\n      clonedPanels.forEach((panel, offset) => {\n        newClones[index + offset] = panel;\n      });\n\n      clones[cloneIndex] = newClones;\n    } else {\n      const insertTarget = clones[cloneIndex];\n\n      if (index >= insertTarget.length) {\n        clonedPanels.forEach((panel, offset) => {\n          insertTarget[index + offset] = panel;\n        });\n      } else {\n        insertTarget.splice(index, deleteCount, ...clonedPanels);\n        // Remove panels after last index\n        if (clonedPanels.length > lastIndex + 1) {\n          clonedPanels.splice(lastIndex + 1);\n        }\n      }\n    }\n  }\n\n  // clones are operating in set\n  public removeClonesAfter(cloneIndex: number): void {\n    const panels = this.panels;\n\n    panels.forEach(panel => {\n      panel.removeClonedPanelsAfter(cloneIndex);\n    });\n    this.clones.splice(cloneIndex);\n  }\n\n  public findPanelOf(element: HTMLElement): Panel | undefined {\n    const allPanels = this.allPanels();\n    for (const panel of allPanels) {\n      if (!panel) {\n        continue;\n      }\n      const panelElement = panel.getElement();\n      if (panelElement.contains(element)) {\n        return panel;\n      }\n    }\n  }\n\n  public findFirstPanelFrom(index: number): Panel | undefined {\n    for (const panel of this.panels.slice(index)) {\n      if (panel && panel.getIndex() >= index && panel.getElement().parentNode) {\n        return panel;\n      }\n    }\n  }\n\n  private addNewClones(index: number, originalPanels: Panel[], deleteCount: number, nextSibling: Panel | undefined) {\n    const cameraElement = this.cameraElement;\n    const cloneCount = this.getCloneCount();\n    const lastPanel = this.lastPanel();\n    const lastPanelClones: Panel[] = lastPanel\n      ? lastPanel.getClonedPanels()\n      : [];\n    const nextSiblingClones: Panel[] = nextSibling\n      ? nextSibling.getClonedPanels()\n      : [];\n\n    for (const cloneIndex of counter(cloneCount)) {\n      const cloneNextSibling = nextSiblingClones[cloneIndex];\n      const lastPanelSibling = lastPanelClones[cloneIndex];\n\n      const cloneSiblingElement = cloneNextSibling\n        ? cloneNextSibling.getElement()\n        : lastPanelSibling\n          ? lastPanelSibling.getElement().nextElementSibling\n          : null;\n\n      const newClones = originalPanels.map(panel => {\n        const clone = panel.clone(cloneIndex);\n\n        if (this.shouldRender()) {\n          cameraElement.insertBefore(clone.getElement(), cloneSiblingElement);\n        }\n\n        return clone;\n      });\n\n      this.insertClones(cloneIndex, index, newClones, deleteCount);\n    }\n  }\n\n  private updateIndex(insertingIndex: number) {\n    const panels = this.panels;\n    const range = this.range;\n\n    const newLastIndex = panels.length - 1;\n    if (newLastIndex > range.max) {\n      range.max = newLastIndex;\n    }\n    if (insertingIndex < range.min || range.min < 0) {\n      range.min = insertingIndex;\n    }\n  }\n\n  private insertNewPanels(newPanels: Panel[], siblingElement: HTMLElement | null) {\n    if (this.shouldRender()) {\n      const fragment = document.createDocumentFragment();\n      newPanels.forEach(panel => fragment.appendChild(panel.getElement()));\n      this.cameraElement.insertBefore(fragment, siblingElement);\n    }\n  }\n\n  private shouldRender(): boolean {\n    const options = this.options;\n\n    return !options.renderExternal && !options.renderOnlyVisible;\n  }\n}\n\nexport default PanelManager;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Panel from \""../components/Panel\"";\nimport { ValueOf, Direction, StateType, FlickingContext } from \""../types\"";\n\nabstract class State {\n  public delta: number = 0;\n  public direction: ValueOf<Direction> | null = null;\n  public targetPanel: Panel | null = null;\n  public lastPosition: number = 0;\n  public abstract readonly type: ValueOf<StateType>;\n  public abstract readonly holding: boolean;\n  public abstract readonly playing: boolean;\n\n  public onEnter(prevState: State): void {\n    this.delta = prevState.delta;\n    this.direction = prevState.direction;\n    this.targetPanel = prevState.targetPanel;\n    this.lastPosition = prevState.lastPosition;\n  }\n\n  public onExit(nextState: State): void {\n    // DO NOTHING\n  }\n\n  public onHold(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n\n  public onChange(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n\n  public onRelease(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n\n  public onAnimationEnd(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n\n  public onFinish(e: any, context: FlickingContext): void {\n    // DO NOTHING\n  }\n}\n\nexport default State;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { EVENTS, STATE_TYPE } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\n\nclass IdleState extends State {\n  public readonly type = STATE_TYPE.IDLE;\n  public readonly holding = false;\n  public readonly playing = false;\n\n  public onEnter() {\n    this.direction = null;\n    this.targetPanel = null;\n    this.delta = 0;\n    this.lastPosition = 0;\n  }\n\n  public onHold(e: any, { flicking, viewport, triggerEvent, transitTo }: FlickingContext): void {\n    // Shouldn't do any action until any panels on flicking area\n    if (flicking.getPanelCount() <= 0) {\n      if (viewport.options.infinite) {\n        viewport.moveCamera(viewport.getCameraPosition(), e);\n      }\n      transitTo(STATE_TYPE.DISABLED);\n      return;\n    }\n\n    this.lastPosition = viewport.getCameraPosition();\n    triggerEvent(EVENTS.HOLD_START, e, true)\n      .onSuccess(() => {\n        transitTo(STATE_TYPE.HOLDING);\n      })\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  // By methods call\n  public onChange(e: any, context: FlickingContext): void {\n    const { triggerEvent, transitTo } = context;\n\n    triggerEvent(EVENTS.MOVE_START, e, false)\n      .onSuccess(() => {\n        // Trigger AnimatingState's onChange, to trigger \""move\"" event immediately\n        transitTo(STATE_TYPE.ANIMATING)\n          .onChange(e, context);\n      })\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n}\n\nexport default IdleState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { STATE_TYPE, EVENTS, DIRECTION } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\n\nclass HoldingState extends State {\n  public readonly type = STATE_TYPE.HOLDING;\n  public readonly holding = true;\n  public readonly playing = true;\n\n  private releaseEvent: any = null;\n\n  public onChange(e: any, context: FlickingContext): void {\n    const { flicking, triggerEvent, transitTo } = context;\n\n    const offset = flicking.options.horizontal\n      ? e.inputEvent.offsetX\n      : e.inputEvent.offsetY;\n    this.direction = offset < 0\n      ? DIRECTION.NEXT\n      : DIRECTION.PREV;\n\n    triggerEvent(EVENTS.MOVE_START, e, true)\n      .onSuccess(() => {\n        // Trigger DraggingState's onChange, to trigger \""move\"" event immediately\n        transitTo(STATE_TYPE.DRAGGING)\n          .onChange(e, context);\n      })\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  public onRelease(e: any, context: FlickingContext): void {\n    const { viewport, triggerEvent, transitTo } = context;\n\n    triggerEvent(EVENTS.HOLD_END, e, true);\n\n    if (e.delta.flick !== 0) {\n      // Sometimes \""release\"" event on axes triggered before \""change\"" event\n      // Especially if user flicked panel fast in really short amount of time\n      // if delta is not zero, that means above case happened.\n\n      // Event flow should be HOLD_START -> MOVE_START -> MOVE -> HOLD_END\n      // At least one move event should be included between holdStart and holdEnd\n      e.setTo({ flick: viewport.getCameraPosition() }, 0);\n      transitTo(STATE_TYPE.IDLE);\n      return;\n    }\n\n    // Can't handle select event here,\n    // As \""finish\"" axes event happens\n    this.releaseEvent = e;\n  }\n\n  public onFinish(e: any, { viewport, triggerEvent, transitTo }: FlickingContext): void {\n    // Should transite to IDLE state before select event\n    // As user expects hold is already finished\n    transitTo(STATE_TYPE.IDLE);\n\n    if (!this.releaseEvent) {\n      return;\n    }\n\n    // Handle release event here\n    // To prevent finish event called twice\n    const releaseEvent = this.releaseEvent;\n\n    // Static click\n    const clickedElement = releaseEvent.inputEvent.srcEvent.target;\n    const clickedPanel = viewport.panelManager.findPanelOf(clickedElement);\n    const cameraPosition = viewport.getCameraPosition();\n\n    if (clickedPanel) {\n      const clickedPanelPosition = clickedPanel.getPosition();\n      const direction = clickedPanelPosition > cameraPosition\n        ? DIRECTION.NEXT\n        : clickedPanelPosition < cameraPosition\n          ? DIRECTION.PREV\n          : null;\n\n      // Don't provide axes event, to use axes instance instead\n      triggerEvent(EVENTS.SELECT, null, true, {\n        direction, // Direction to the clicked panel\n        index: clickedPanel.getIndex(),\n        panel: clickedPanel,\n      });\n    }\n  }\n}\n\nexport default HoldingState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { STATE_TYPE, EVENTS } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\n\nclass DraggingState extends State {\n  public readonly type = STATE_TYPE.DRAGGING;\n  public readonly holding = true;\n  public readonly playing = true;\n\n  public onChange(e: any, { moveCamera, transitTo }: FlickingContext): void {\n    if (!e.delta.flick) {\n      return;\n    }\n\n    moveCamera(e)\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  public onRelease(e: any, context: FlickingContext): void {\n    const { flicking, viewport, triggerEvent, transitTo, stopCamera } = context;\n\n    const delta = this.delta;\n    const absDelta = Math.abs(delta);\n    const options = flicking.options;\n    const horizontal = options.horizontal;\n    const moveType = viewport.moveType;\n    const inputEvent = e.inputEvent;\n\n    const velocity = horizontal\n      ? inputEvent.velocityX\n      : inputEvent.velocityY;\n    const inputDelta = horizontal\n      ? inputEvent.deltaX\n      : inputEvent.deltaY;\n    const isNextDirection = Math.abs(velocity) > 1\n      ? velocity < 0\n      : absDelta > 0\n        ? delta > 0\n        : inputDelta < 0;\n\n    const swipeDistance = viewport.options.bound\n      ? Math.max(absDelta, Math.abs(inputDelta))\n      : absDelta;\n    const swipeAngle = inputEvent.deltaX\n      ? Math.abs(180 * Math.atan(inputEvent.deltaY / inputEvent.deltaX) / Math.PI)\n      : 90;\n    const belowAngleThreshold = horizontal\n      ? swipeAngle <= options.thresholdAngle\n      : swipeAngle > options.thresholdAngle;\n    const overThreshold = swipeDistance >= options.threshold\n      && belowAngleThreshold;\n\n    const moveTypeContext = {\n      viewport,\n      axesEvent: e,\n      state: this,\n      swipeDistance,\n      isNextDirection,\n    };\n\n    // Update last position to cope with Axes's animating behavior\n    // Axes uses start position when animation start\n    triggerEvent(EVENTS.HOLD_END, e, true);\n\n    const targetPanel = this.targetPanel;\n    if (!overThreshold && targetPanel) {\n      // Interrupted while animating\n      const interruptDestInfo = moveType.findPanelWhenInterrupted(moveTypeContext);\n\n      viewport.moveTo(\n        interruptDestInfo.panel,\n        interruptDestInfo.destPos,\n        interruptDestInfo.eventType,\n        e,\n        interruptDestInfo.duration,\n      );\n      transitTo(STATE_TYPE.ANIMATING);\n      return;\n    }\n\n    const currentPanel = viewport.getCurrentPanel();\n    const nearestPanel = viewport.getNearestPanel();\n\n    if (!currentPanel || !nearestPanel) {\n      // There're no panels\n      e.stop();\n      transitTo(STATE_TYPE.IDLE);\n      return;\n    }\n\n    const destInfo = overThreshold\n      ? moveType.findTargetPanel(moveTypeContext)\n      : moveType.findRestorePanel(moveTypeContext);\n\n    viewport.moveTo(\n      destInfo.panel,\n      destInfo.destPos,\n      destInfo.eventType,\n      e,\n      destInfo.duration,\n    ).onSuccess(() => {\n      transitTo(STATE_TYPE.ANIMATING);\n    }).onStopped(() => {\n      transitTo(STATE_TYPE.DISABLED);\n      stopCamera(e);\n    });\n  }\n}\n\nexport default DraggingState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { STATE_TYPE, EVENTS } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\nimport { circulate } from \""../utils\"";\n\nclass AnimatingState extends State {\n  public readonly type = STATE_TYPE.ANIMATING;\n  public readonly holding = false;\n  public readonly playing = true;\n\n  public onHold(e: any, { viewport, triggerEvent, transitTo }: FlickingContext): void {\n    const options = viewport.options;\n    const scrollArea = viewport.getScrollArea();\n    const scrollAreaSize = viewport.getScrollAreaSize();\n    const loopCount = Math.floor((this.lastPosition + this.delta - scrollArea.prev) / scrollAreaSize);\n\n    const targetPanel = this.targetPanel;\n    if (options.circular && loopCount !== 0 && targetPanel) {\n      const cloneCount = viewport.panelManager.getCloneCount();\n      const originalTargetPosition = targetPanel.getPosition();\n\n      // cloneIndex is from -1 to cloneCount - 1\n      const newCloneIndex = circulate(targetPanel.getCloneIndex() - loopCount, -1, cloneCount - 1, true);\n      const newTargetPosition = originalTargetPosition - loopCount * scrollAreaSize;\n      const newTargetPanel = targetPanel.getIdenticalPanels()[newCloneIndex + 1].clone(newCloneIndex, true);\n\n      // Set new target panel considering looped count\n      newTargetPanel.setPosition(newTargetPosition);\n      this.targetPanel = newTargetPanel;\n    }\n\n    // Reset last position and delta\n    this.delta = 0;\n    this.lastPosition = viewport.getCameraPosition();\n\n    // Update current panel as current nearest panel\n    viewport.setCurrentPanel(viewport.getNearestPanel()!);\n    triggerEvent(EVENTS.HOLD_START, e, true)\n      .onSuccess(() => {\n        transitTo(STATE_TYPE.DRAGGING);\n      })\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  public onChange(e: any, { moveCamera, transitTo }: FlickingContext): void {\n    if (!e.delta.flick) {\n      return;\n    }\n\n    moveCamera(e)\n      .onStopped(() => {\n        transitTo(STATE_TYPE.DISABLED);\n      });\n  }\n\n  public onFinish(e: any, { flicking, viewport, triggerEvent, transitTo }: FlickingContext) {\n    const isTrusted = e && e.isTrusted;\n\n    viewport.options.bound\n      ? viewport.setCurrentPanel(this.targetPanel!)\n      : viewport.setCurrentPanel(viewport.getNearestPanel()!);\n    transitTo(STATE_TYPE.IDLE);\n    triggerEvent(EVENTS.MOVE_END, e, isTrusted, {\n      direction: this.direction,\n    });\n\n    if (flicking.options.adaptive) {\n      viewport.updateAdaptiveSize();\n    }\n  }\n}\n\nexport default AnimatingState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""./State\"";\nimport { STATE_TYPE } from \""../consts\"";\nimport { FlickingContext } from \""../types\"";\n\nclass DisabledState extends State {\n  public readonly type = STATE_TYPE.DISABLED;\n  public readonly holding = false;\n  public readonly playing = true;\n\n  public onAnimationEnd(e: any, { transitTo }: FlickingContext): void {\n    transitTo(STATE_TYPE.IDLE);\n  }\n\n  public onChange(e: any, { viewport, transitTo }: FlickingContext): void {\n    // Can stop Axes's change event\n    e.stop();\n\n    // Should update axes position as it's already changed at this moment\n    viewport.updateAxesPosition(viewport.getCameraPosition());\n    transitTo(STATE_TYPE.IDLE);\n  }\n\n  public onRelease(e: any, { transitTo }: FlickingContext): void {\n    // This is needed when stopped hold start event\n    if (e.delta.flick === 0) {\n      transitTo(STATE_TYPE.IDLE);\n    }\n  }\n}\n\nexport default DisabledState;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport State from \""../states/State\"";\nimport { AxesEventType, ValueOf, FlickingContext, StateType } from \""../types\"";\nimport { AXES_EVENTS, STATE_TYPE } from \""../consts\"";\nimport IdleState from \""../states/IdleState\"";\nimport HoldingState from \""../states/HoldingState\"";\nimport DraggingState from \""../states/DraggingState\"";\nimport AnimatingState from \""../states/AnimatingState\"";\nimport DisabledState from \""../states/DisabledState\"";\n\nclass StateMachine {\n  private state: State = new IdleState();\n\n  public fire(eventType: ValueOf<AxesEventType>, e: any, context: FlickingContext) {\n    const currentState = this.state;\n    switch (eventType) {\n      case AXES_EVENTS.HOLD:\n        currentState.onHold(e, context);\n        break;\n      case AXES_EVENTS.CHANGE:\n        currentState.onChange(e, context);\n        break;\n      case AXES_EVENTS.RELEASE:\n        currentState.onRelease(e, context);\n        break;\n      case AXES_EVENTS.ANIMATION_END:\n        currentState.onAnimationEnd(e, context);\n        break;\n      case AXES_EVENTS.FINISH:\n        currentState.onFinish(e, context);\n        break;\n    }\n  }\n\n  public getState(): State {\n    return this.state;\n  }\n\n  public transitTo = (nextStateType: ValueOf<StateType>): State => {\n    const currentState = this.state;\n\n    if (currentState.type !== nextStateType) {\n      let nextState: State;\n\n      switch (nextStateType) {\n        case STATE_TYPE.IDLE:\n          nextState = new IdleState();\n          break;\n        case STATE_TYPE.HOLDING:\n          nextState = new HoldingState();\n          break;\n        case STATE_TYPE.DRAGGING:\n          nextState = new DraggingState();\n          break;\n        case STATE_TYPE.ANIMATING:\n          nextState = new AnimatingState();\n          break;\n        case STATE_TYPE.DISABLED:\n          nextState = new DisabledState();\n          break;\n      }\n\n      currentState.onExit(nextState!);\n      nextState!.onEnter(currentState);\n\n      this.state = nextState!;\n    }\n    return this.state;\n  }\n}\n\nexport default StateMachine;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport MoveType from \""./MoveType\"";\nimport { MOVE_TYPE, EVENTS } from \""../consts\"";\nimport { MoveTypeContext, DestinationInfo } from \""../types\"";\nimport { clamp } from \""../utils\"";\n\nclass Snap extends MoveType {\n  protected readonly type: string = MOVE_TYPE.SNAP;\n  protected count: number;\n\n  constructor(count: number) {\n    super();\n    this.count = count;\n  }\n\n  public findTargetPanel(ctx: MoveTypeContext): DestinationInfo {\n    const { viewport, axesEvent, swipeDistance } = ctx;\n    const snapCount = this.count;\n    const eventDelta = Math.abs(axesEvent.delta.flick);\n    const currentPanel = viewport.getCurrentPanel()!;\n    const nearestPanel = viewport.getNearestPanel()!;\n    const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n\n    // This can happen when bounce is 0\n    const shouldMoveWhenBounceIs0 = viewport.canSetBoundMode()\n      && (nearestPanel.getIndex() === currentPanel.getIndex());\n    const shouldMoveToAdjacent = !viewport.isOutOfBound()\n      && (swipeDistance <= minimumDistanceToChange || shouldMoveWhenBounceIs0);\n\n    if (snapCount > 1 && eventDelta > minimumDistanceToChange) {\n      return this.findSnappedPanel(ctx);\n    } else if (shouldMoveToAdjacent) {\n      return this.findAdjacentPanel(ctx);\n    } else {\n      return {\n        panel: nearestPanel,\n        duration: viewport.options.duration,\n        destPos: viewport.findEstimatedPosition(nearestPanel),\n        eventType: swipeDistance <= minimumDistanceToChange\n          ? EVENTS.RESTORE\n          : EVENTS.CHANGE,\n      };\n    }\n  }\n\n  protected findSnappedPanel(ctx: MoveTypeContext): DestinationInfo {\n    const { axesEvent, viewport, state, isNextDirection } = ctx;\n\n    const eventDelta = Math.abs(axesEvent.delta.flick);\n    const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n    const snapCount = this.count;\n    const options = viewport.options;\n    const scrollAreaSize = viewport.getScrollAreaSize();\n    const halfGap = options.gap / 2;\n    const estimatedHangerPos = axesEvent.destPos.flick + viewport.getRelativeHangerPosition();\n\n    let panelToMove = viewport.getNearestPanel()!;\n    let cycleIndex = panelToMove.getCloneIndex() + 1; // 0(original) or 1(clone)\n    let passedPanelCount = 0;\n\n    while (passedPanelCount < snapCount) {\n      // Since panelToMove holds also cloned panels, we should use original panel's position\n      const originalPanel = panelToMove.getOriginalPanel();\n      const panelPosition = originalPanel.getPosition() + cycleIndex * scrollAreaSize;\n      const panelSize = originalPanel.getSize();\n\n      const panelNextPosition = panelPosition + panelSize + halfGap;\n      const panelPrevPosition = panelPosition - halfGap;\n\n      // Current panelToMove contains destPos\n      if (\n        (isNextDirection && panelNextPosition > estimatedHangerPos)\n        || (!isNextDirection && panelPrevPosition < estimatedHangerPos)\n      ) {\n        break;\n      }\n\n      const siblingPanel = isNextDirection\n        ? panelToMove.nextSibling\n        : panelToMove.prevSibling;\n      if (!siblingPanel) {\n        break;\n      }\n\n      const panelIndex = panelToMove.getIndex();\n      const siblingIndex = siblingPanel.getIndex();\n      if ((isNextDirection && siblingIndex <= panelIndex)\n        || (!isNextDirection && siblingIndex >= panelIndex)\n      ) {\n        cycleIndex = isNextDirection\n          ? cycleIndex + 1\n          : cycleIndex - 1;\n      }\n      panelToMove = siblingPanel;\n      passedPanelCount += 1;\n    }\n\n    const originalPosition = panelToMove.getOriginalPanel().getPosition();\n\n    if (cycleIndex !== 0) {\n      panelToMove = panelToMove.clone(panelToMove.getCloneIndex(), true);\n      panelToMove.setPosition(originalPosition + cycleIndex * scrollAreaSize);\n    }\n\n    const defaultDuration = viewport.options.duration;\n    const duration = clamp(axesEvent.duration, defaultDuration, defaultDuration * passedPanelCount);\n\n    return {\n      panel: panelToMove,\n      destPos: viewport.findEstimatedPosition(panelToMove),\n      duration,\n      eventType: Math.max(eventDelta, state.delta) > minimumDistanceToChange\n        ? EVENTS.CHANGE\n        : EVENTS.RESTORE,\n    };\n  }\n\n  private findAdjacentPanel(ctx: MoveTypeContext): DestinationInfo {\n    const { viewport, isNextDirection } = ctx;\n\n    const options = viewport.options;\n    const currentIndex = viewport.getCurrentIndex();\n    const currentPanel = viewport.panelManager.get(currentIndex)!;\n    const hangerPosition = viewport.getHangerPosition();\n    const scrollArea = viewport.getScrollArea();\n\n    const firstClonedPanel = currentPanel.getIdenticalPanels()[1];\n    const lapped = options.circular\n      && (Math.abs(currentPanel.getAnchorPosition() - hangerPosition)\n        > Math.abs(firstClonedPanel.getAnchorPosition() - hangerPosition));\n\n    // If lapped in circular mode, use first cloned panel as base panel\n    const basePanel = lapped\n      ? firstClonedPanel\n      : currentPanel;\n    const basePosition = basePanel.getPosition();\n\n    const adjacentPanel = isNextDirection\n      ? basePanel.nextSibling\n      : basePanel.prevSibling;\n\n    const eventType = adjacentPanel\n      ? EVENTS.CHANGE\n      : EVENTS.RESTORE;\n    const panelToMove = adjacentPanel\n      ? adjacentPanel\n      : basePanel;\n    const targetRelativeAnchorPosition = panelToMove.getRelativeAnchorPosition();\n\n    const estimatedPanelPosition = options.circular\n      ? isNextDirection\n        ? basePosition + basePanel.getSize() + targetRelativeAnchorPosition + options.gap\n        : basePosition - (panelToMove.getSize() - targetRelativeAnchorPosition) - options.gap\n      : panelToMove.getAnchorPosition();\n    const estimatedPosition = estimatedPanelPosition - viewport.getRelativeHangerPosition();\n    const destPos = viewport.canSetBoundMode()\n      ? clamp(estimatedPosition, scrollArea.prev, scrollArea.next)\n      : estimatedPosition;\n\n    return {\n      panel: panelToMove,\n      destPos,\n      duration: options.duration,\n      eventType,\n    };\n  }\n}\n\nexport default Snap;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { MoveTypeStringOption, MoveTypeContext, DestinationInfo } from \""../types\"";\nimport Panel from \""../components/Panel\"";\nimport { EVENTS } from \""../consts\"";\n\nabstract class MoveType {\n  protected readonly abstract type: string;\n\n  public abstract findTargetPanel(ctx: MoveTypeContext): DestinationInfo;\n\n  public is(type: MoveTypeStringOption): boolean {\n    return type === this.type;\n  }\n\n  public findRestorePanel(ctx: MoveTypeContext): DestinationInfo {\n    const viewport = ctx.viewport;\n    const options = viewport.options;\n\n    const panel = options.circular\n      ? this.findRestorePanelInCircularMode(ctx)\n      : viewport.getCurrentPanel()!;\n\n    return {\n      panel,\n      destPos: viewport.findEstimatedPosition(panel),\n      duration: options.duration,\n      eventType: EVENTS.RESTORE,\n    };\n  }\n\n  public findPanelWhenInterrupted(ctx: MoveTypeContext): DestinationInfo {\n    const { state, viewport } = ctx;\n    const targetPanel = state.targetPanel!;\n\n    return {\n      panel: targetPanel,\n      destPos: viewport.findEstimatedPosition(targetPanel),\n      duration: viewport.options.duration,\n      eventType: \""\"",\n    };\n  }\n\n  // Calculate minimum distance to \""change\"" panel\n  protected calcBrinkOfChange(ctx: MoveTypeContext): number {\n    const { viewport, isNextDirection } = ctx;\n\n    const options = viewport.options;\n    const currentPanel = viewport.getCurrentPanel()!;\n    const halfGap = options.gap / 2;\n\n    const relativeAnchorPosition = currentPanel.getRelativeAnchorPosition();\n\n    // Minimum distance needed to decide prev/next panel as nearest\n    /*\n     * |  Prev  |     Next     |\n     * |--------|--------------|\n     * [][      |<-Anchor    ][] <- Panel + Half-Gap\n     */\n    let minimumDistanceToChange = isNextDirection\n      ? currentPanel.getSize() - relativeAnchorPosition + halfGap\n      : relativeAnchorPosition + halfGap;\n\n    minimumDistanceToChange = Math.max(minimumDistanceToChange, options.threshold);\n\n    return minimumDistanceToChange;\n  }\n\n  private findRestorePanelInCircularMode(ctx: MoveTypeContext): Panel {\n    const viewport = ctx.viewport;\n    const originalPanel = viewport.getCurrentPanel()!.getOriginalPanel();\n    const hangerPosition = viewport.getHangerPosition();\n\n    const firstClonedPanel = originalPanel.getIdenticalPanels()[1];\n    const lapped = Math.abs(originalPanel.getAnchorPosition() - hangerPosition)\n      > Math.abs(firstClonedPanel.getAnchorPosition() - hangerPosition);\n\n    return (!ctx.isNextDirection && lapped)\n      ? firstClonedPanel\n      : originalPanel;\n  }\n}\n\nexport default MoveType;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Snap from \""./Snap\"";\nimport { MOVE_TYPE, EVENTS } from \""../consts\"";\nimport { MoveTypeContext, DestinationInfo } from \""../types\"";\nimport { circulate, clamp } from \""../utils\"";\n\nclass FreeScroll extends Snap {\n  protected readonly type: string = MOVE_TYPE.FREE_SCROLL;\n\n  constructor() {\n    // Set snap count to Infinity\n    super(Infinity);\n  }\n\n  public findTargetPanel(ctx: MoveTypeContext): DestinationInfo {\n    const { axesEvent, state, viewport } = ctx;\n    const destPos = axesEvent.destPos.flick;\n    const minimumDistanceToChange = this.calcBrinkOfChange(ctx);\n    const scrollArea = viewport.getScrollArea();\n    const currentPanel = viewport.getCurrentPanel()!;\n    const options = viewport.options;\n\n    const delta = Math.abs(axesEvent.delta.flick + state.delta);\n    if (delta > minimumDistanceToChange) {\n      const destInfo = super.findSnappedPanel(ctx);\n\n      destInfo.duration = axesEvent.duration;\n      destInfo.destPos = destPos;\n      destInfo.eventType = !options.circular && destInfo.panel === currentPanel\n        ? \""\""\n        : EVENTS.CHANGE;\n\n      return destInfo;\n    } else {\n      let estimatedPosition = options.circular\n        ? circulate(destPos, scrollArea.prev, scrollArea.next, false)\n        : destPos;\n      estimatedPosition = clamp(estimatedPosition, scrollArea.prev, scrollArea.next);\n      estimatedPosition += viewport.getRelativeHangerPosition();\n\n      const estimatedPanel = viewport.findNearestPanelAt(estimatedPosition)!;\n\n      return {\n        panel: estimatedPanel,\n        destPos,\n        duration: axesEvent.duration,\n        eventType: \""\"",\n      };\n    }\n  }\n\n  public findRestorePanel(ctx: MoveTypeContext): DestinationInfo {\n    return this.findTargetPanel(ctx);\n  }\n\n  public findPanelWhenInterrupted(ctx: MoveTypeContext): DestinationInfo {\n    const { viewport } = ctx;\n\n    return {\n      panel: viewport.getNearestPanel()!,\n      destPos: viewport.getCameraPosition(),\n      duration: 0,\n      eventType: \""\"",\n    };\n  }\n\n  protected calcBrinkOfChange(ctx: MoveTypeContext): number {\n    const { viewport, isNextDirection } = ctx;\n\n    const options = viewport.options;\n    const currentPanel = viewport.getCurrentPanel()!;\n    const halfGap = options.gap / 2;\n\n    const lastPosition = viewport.stateMachine.getState().lastPosition;\n    const currentPanelPosition = currentPanel.getPosition();\n\n    // As camera can stop anywhere in free scroll mode,\n    // minimumDistanceToChange should be calculated differently.\n    // Ref #191(https://github.com/naver/egjs-flicking/issues/191)\n    const lastHangerPosition = lastPosition + viewport.getRelativeHangerPosition();\n\n    const scrollAreaSize = viewport.getScrollAreaSize();\n    let minimumDistanceToChange = isNextDirection\n      ? currentPanelPosition + currentPanel.getSize() - lastHangerPosition + halfGap\n      : lastHangerPosition - currentPanelPosition + halfGap;\n    minimumDistanceToChange = Math.abs(minimumDistanceToChange % scrollAreaSize);\n\n    return Math.min(minimumDistanceToChange, scrollAreaSize - minimumDistanceToChange);\n  }\n}\n\nexport default FreeScroll;\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport Axes, { PanInput } from \""@egjs/axes\"";\n\nimport Flicking from \""../Flicking\"";\nimport Panel from \""./Panel\"";\nimport PanelManager from \""./PanelManager\"";\nimport StateMachine from \""./StateMachine\"";\nimport MoveType from \""../moves/MoveType\"";\nimport { FlickingOptions, FlickingPanel, FlickingStatus, ElementLike, EventType, TriggerCallback, NeedPanelEvent, FlickingEvent, MoveTypeObjectOption, OriginalStyle, Plugin, DestroyOption, BoundingBox } from \""../types\"";\nimport { DEFAULT_VIEWPORT_CSS, DEFAULT_CAMERA_CSS, TRANSFORM, DEFAULT_OPTIONS, EVENTS, DIRECTION, STATE_TYPE, MOVE_TYPE } from \""../consts\"";\nimport { clamp, applyCSS, toArray, parseArithmeticExpression, isBetween, isArray, parseElement, hasClass, restoreStyle, circulate, findIndex, getBbox } from \""../utils\"";\nimport Snap from \""../moves/Snap\"";\nimport FreeScroll from \""../moves/FreeScroll\"";\n\nexport default class Viewport {\n  public options: FlickingOptions;\n  public stateMachine: StateMachine;\n  public panelManager: PanelManager;\n  public moveType: MoveType;\n\n  private flicking: Flicking;\n  private axes: Axes;\n  private panInput: PanInput;\n\n  private viewportElement: HTMLElement;\n  private cameraElement: HTMLElement;\n\n  private triggerEvent: Flicking[\""triggerEvent\""];\n  private axesHandlers: { [key: string]: any };\n\n  private currentPanel: Panel | undefined;\n  private nearestPanel: Panel | undefined;\n  private visiblePanels: Panel[];\n\n  private plugins: Plugin[] = [];\n  private panelBboxes: { [className: string]: BoundingBox };\n  private state: {\n    size: number;\n    position: number;\n    panelMaintainRatio: number;\n    relativeHangerPosition: number;\n    positionOffset: number;\n    scrollArea: {\n      prev: number;\n      next: number;\n    };\n    translate: {\n      name: string,\n      has3d: boolean,\n    };\n    infiniteThreshold: number;\n    checkedIndexes: Array<[number, number]>;\n    visibleIndex: {\n      min: number;\n      max: number;\n    };\n    isAdaptiveCached: boolean;\n    isViewportGiven: boolean;\n    isCameraGiven: boolean;\n    originalViewportStyle: OriginalStyle;\n    originalCameraStyle: OriginalStyle;\n    cachedBbox: BoundingBox | null;\n  };\n\n  constructor(\n    flicking: Flicking,\n    options: FlickingOptions,\n    triggerEvent: Flicking[\""triggerEvent\""],\n  ) {\n    this.flicking = flicking;\n    this.triggerEvent = triggerEvent;\n\n    this.state = {\n      size: 0,\n      position: 0,\n      panelMaintainRatio: 0,\n      relativeHangerPosition: 0,\n      positionOffset: 0,\n      scrollArea: {\n        prev: 0,\n        next: 0,\n      },\n      visibleIndex: {\n        min: NaN,\n        max: NaN,\n      },\n      translate: TRANSFORM,\n      infiniteThreshold: 0,\n      checkedIndexes: [],\n      isAdaptiveCached: false,\n      isViewportGiven: false,\n      isCameraGiven: false,\n      originalViewportStyle: {\n        className: null,\n        style: null,\n      },\n      originalCameraStyle: {\n        className: null,\n        style: null,\n      },\n      cachedBbox: null,\n    };\n    this.options = options;\n    this.stateMachine = new StateMachine();\n    this.visiblePanels = [];\n    this.panelBboxes = {};\n\n    this.build();\n  }\n\n  public moveTo(\n    panel: Panel,\n    destPos: number,\n    eventType: EventType[\""CHANGE\""] | EventType[\""RESTORE\""] | \""\"",\n    axesEvent: any,\n    duration: number = this.options.duration,\n  ): TriggerCallback {\n    const state = this.state;\n    const currentState = this.stateMachine.getState();\n    const currentPosition = state.position;\n\n    const isTrusted = axesEvent\n      ? axesEvent.isTrusted\n      : false;\n    const direction = destPos === currentPosition\n      ? null\n      : destPos > currentPosition\n        ? DIRECTION.NEXT\n        : DIRECTION.PREV;\n\n    let eventResult: TriggerCallback;\n    if (eventType === EVENTS.CHANGE) {\n      eventResult = this.triggerEvent(EVENTS.CHANGE, axesEvent, isTrusted, {\n        index: panel.getIndex(),\n        panel,\n        direction,\n      });\n    } else if (eventType === EVENTS.RESTORE) {\n      eventResult = this.triggerEvent(EVENTS.RESTORE, axesEvent, isTrusted);\n    } else {\n      eventResult = {\n        onSuccess(callback: () => void): TriggerCallback {\n          callback();\n          return this;\n        },\n        onStopped(): TriggerCallback {\n          return this;\n        },\n      };\n    }\n\n    eventResult.onSuccess(() => {\n      currentState.delta = 0;\n      currentState.lastPosition = this.getCameraPosition();\n      currentState.targetPanel = panel;\n      currentState.direction = destPos === currentPosition\n        ? null\n        : destPos > currentPosition\n          ? DIRECTION.NEXT\n          : DIRECTION.PREV;\n\n      if (destPos === currentPosition) {\n        // no move\n        this.nearestPanel = panel;\n        this.currentPanel = panel;\n      }\n\n      if (axesEvent && axesEvent.setTo) {\n        // freeScroll only occurs in release events\n        axesEvent.setTo({ flick: destPos }, duration);\n      } else {\n        this.axes.setTo({ flick: destPos }, duration);\n      }\n    });\n\n    return eventResult;\n  }\n\n  public moveCamera(pos: number, axesEvent?: any): void {\n    const state = this.state;\n    const options = this.options;\n    const transform = state.translate.name;\n    const scrollArea = state.scrollArea;\n\n    // Update position & nearestPanel\n    if (options.circular && !isBetween(pos, scrollArea.prev, scrollArea.next)) {\n      pos = circulate(pos, scrollArea.prev, scrollArea.next, false);\n    }\n    state.position = pos;\n    this.nearestPanel = this.findNearestPanel();\n    const nearestPanel = this.nearestPanel;\n    const originalNearestPosition = nearestPanel\n      ? nearestPanel.getPosition()\n      : 0;\n\n    // From 0(panel position) to 1(panel position + panel size)\n    // When it's on gap area value will be (val > 1 || val < 0)\n    if (nearestPanel) {\n      const hangerPosition = this.getHangerPosition();\n      const panelPosition = nearestPanel.getPosition();\n      const panelSize = nearestPanel.getSize();\n      const halfGap = options.gap / 2;\n\n      // As panel's range is from panel position - half gap ~ panel pos + panel size + half gap\n      state.panelMaintainRatio = (hangerPosition - panelPosition + halfGap) / (panelSize + 2 * halfGap);\n    } else {\n      state.panelMaintainRatio = 0;\n    }\n\n    this.checkNeedPanel(axesEvent);\n\n    // Possibly modified after need panel, if it's looped\n    const modifiedNearestPosition = nearestPanel\n      ? nearestPanel.getPosition()\n      : 0;\n\n    pos += (modifiedNearestPosition - originalNearestPosition);\n    state.position = pos;\n\n    this.updateVisiblePanels();\n\n    // Offset is needed to fix camera layer size in visible-only rendering mode\n    const posOffset = options.renderOnlyVisible\n      ? state.positionOffset\n      : 0;\n    const moveVector = options.horizontal\n      ? [-(pos - posOffset), 0] : [0, -(pos - posOffset)];\n    const moveCoord = moveVector.map(coord => `${Math.round(coord)}px`).join(\"", \"");\n\n    this.cameraElement.style[transform] = state.translate.has3d\n      ? `translate3d(${moveCoord}, 0px)`\n      : `translate(${moveCoord})`;\n  }\n\n  public stopCamera = (axesEvent: any): void => {\n    if (axesEvent && axesEvent.setTo) {\n      axesEvent.setTo({ flick: this.state.position }, 0);\n    }\n\n    this.stateMachine.transitTo(STATE_TYPE.IDLE);\n  }\n\n  public unCacheBbox(): void {\n    const state = this.state;\n    const options = this.options;\n\n    state.cachedBbox = null;\n    state.visibleIndex = { min: NaN, max: NaN };\n\n    const viewportElement = this.viewportElement;\n    if (!options.horizontal) {\n      // Don't preserve previous width for adaptive resizing\n      viewportElement.style.width = \""\"";\n    } else {\n      viewportElement.style.height = \""\"";\n    }\n    state.isAdaptiveCached = false;\n    this.panelBboxes = {};\n  }\n\n  public resize(): void {\n    this.updateSize();\n    this.updateOriginalPanelPositions();\n    this.updateAdaptiveSize();\n    this.updateScrollArea();\n    this.updateClonePanels();\n    this.updateCameraPosition();\n    this.updatePlugins();\n  }\n\n  // Find nearest anchor from current hanger position\n  public findNearestPanel(): Panel | undefined {\n    const state = this.state;\n    const panelManager = this.panelManager;\n    const hangerPosition = this.getHangerPosition();\n\n    if (this.isOutOfBound()) {\n      const position = state.position;\n\n      return position <= state.scrollArea.prev\n        ? panelManager.firstPanel()\n        : panelManager.lastPanel();\n    }\n\n    return this.findNearestPanelAt(hangerPosition);\n  }\n\n  public findNearestPanelAt(position: number): Panel | undefined {\n    const panelManager = this.panelManager;\n\n    const allPanels = panelManager.allPanels();\n    let minimumDistance = Infinity;\n    let nearestPanel: Panel | undefined;\n\n    for (const panel of allPanels) {\n      if (!panel) {\n        continue;\n      }\n      const prevPosition = panel.getPosition();\n      const nextPosition = prevPosition + panel.getSize();\n\n      // Use shortest distance from panel's range\n      const distance = isBetween(position, prevPosition, nextPosition)\n        ? 0\n        : Math.min(\n          Math.abs(prevPosition - position),\n          Math.abs(nextPosition - position),\n        );\n\n      if (distance > minimumDistance) {\n        break;\n      } else if (distance === minimumDistance) {\n        const minimumAnchorDistance = Math.abs(position - nearestPanel!.getAnchorPosition());\n        const anchorDistance = Math.abs(position - panel.getAnchorPosition());\n\n        if (anchorDistance > minimumAnchorDistance) {\n          break;\n        }\n      }\n\n      minimumDistance = distance;\n      nearestPanel = panel;\n    }\n\n    return nearestPanel;\n  }\n\n  public findNearestIdenticalPanel(panel: Panel): Panel {\n    let nearest = panel;\n    let shortestDistance = Infinity;\n    const hangerPosition = this.getHangerPosition();\n\n    const identicals = panel.getIdenticalPanels();\n    identicals.forEach(identical => {\n      const anchorPosition = identical.getAnchorPosition();\n      const distance = Math.abs(anchorPosition - hangerPosition);\n\n      if (distance < shortestDistance) {\n        nearest = identical;\n        shortestDistance = distance;\n      }\n    });\n\n    return nearest;\n  }\n\n  // Find shortest camera position that distance is minimum\n  public findShortestPositionToPanel(panel: Panel): number {\n    const state = this.state;\n    const options = this.options;\n    const anchorPosition = panel.getAnchorPosition();\n    const hangerPosition = this.getHangerPosition();\n    const distance = Math.abs(hangerPosition - anchorPosition);\n    const scrollAreaSize = state.scrollArea.next - state.scrollArea.prev;\n\n    if (!options.circular) {\n      const position = anchorPosition - state.relativeHangerPosition;\n      return this.canSetBoundMode()\n        ? clamp(position, state.scrollArea.prev, state.scrollArea.next)\n        : position;\n    } else {\n      // If going out of viewport border is more efficient way of moving, choose that position\n      return distance <= scrollAreaSize - distance\n        ? anchorPosition - state.relativeHangerPosition\n        : anchorPosition > hangerPosition\n          // PREV TO NEXT\n          ? anchorPosition - state.relativeHangerPosition - scrollAreaSize\n          // NEXT TO PREV\n          : anchorPosition - state.relativeHangerPosition + scrollAreaSize;\n    }\n  }\n\n  public findEstimatedPosition(panel: Panel): number {\n    const scrollArea = this.getScrollArea();\n\n    let estimatedPosition = panel.getAnchorPosition() - this.getRelativeHangerPosition();\n    estimatedPosition = this.canSetBoundMode()\n      ? clamp(estimatedPosition, scrollArea.prev, scrollArea.next)\n      : estimatedPosition;\n\n    return estimatedPosition;\n  }\n\n  public addVisiblePanel(panel: Panel): void {\n    if (this.getVisibleIndexOf(panel) < 0) {\n      this.visiblePanels.push(panel);\n    }\n  }\n\n  public enable(): void {\n    this.panInput.enable();\n  }\n\n  public disable(): void {\n    this.panInput.disable();\n  }\n\n  public insert(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const lastIndex = this.panelManager.getLastIndex();\n\n    // Index should not below 0\n    if (index < 0 || index > lastIndex) {\n      return [];\n    }\n\n    const state = this.state;\n    const options = this.options;\n    const parsedElements = parseElement(element);\n\n    const panels = parsedElements\n      .map((el, idx) => new Panel(el, index + idx, this))\n      .slice(0, lastIndex - index + 1);\n\n    if (panels.length <= 0) {\n      return [];\n    }\n\n    const pushedIndex = this.panelManager.insert(index, panels);\n\n    // ...then calc bbox for all panels\n    this.resizePanels(panels);\n\n    if (!this.currentPanel) {\n      this.currentPanel = panels[0];\n      this.nearestPanel = panels[0];\n\n      const newCenterPanel = panels[0];\n      const newPanelPosition = this.findEstimatedPosition(newCenterPanel);\n      state.position = newPanelPosition;\n      this.updateAxesPosition(newPanelPosition);\n      state.panelMaintainRatio = (newCenterPanel.getRelativeAnchorPosition() + options.gap / 2) / (newCenterPanel.getSize() + options.gap);\n    }\n\n    // Update checked indexes in infinite mode\n    this.updateCheckedIndexes({ min: index, max: index });\n    state.checkedIndexes.forEach((indexes, idx) => {\n      const [min, max] = indexes;\n      if (index < min) {\n        // Push checked index\n        state.checkedIndexes.splice(idx, 1, [min + pushedIndex, max + pushedIndex]);\n      }\n    });\n\n    // Uncache visible index to refresh panels\n    state.visibleIndex = {\n      min: NaN,\n      max: NaN,\n    };\n\n    this.resize();\n\n    return panels;\n  }\n\n  public replace(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const state = this.state;\n    const options = this.options;\n    const panelManager = this.panelManager;\n    const lastIndex = panelManager.getLastIndex();\n\n    // Index should not below 0\n    if (index < 0 || index > lastIndex) {\n      return [];\n    }\n\n    const parsedElements = parseElement(element);\n    const panels = parsedElements\n      .map((el, idx) => new Panel(el, index + idx, this))\n      .slice(0, lastIndex - index + 1);\n\n    if (panels.length <= 0) {\n      return [];\n    }\n\n    const replacedPanels = panelManager.replace(index, panels);\n\n    replacedPanels.forEach(panel => {\n      const visibleIndex = this.getVisibleIndexOf(panel);\n      if (visibleIndex > -1) {\n        this.visiblePanels.splice(visibleIndex, 1);\n      }\n    });\n\n    // ...then calc bbox for all panels\n    this.resizePanels(panels);\n\n    const currentPanel = this.currentPanel;\n    const wasEmpty = !currentPanel;\n    if (wasEmpty) {\n      this.currentPanel = panels[0];\n      this.nearestPanel = panels[0];\n\n      const newCenterPanel = panels[0];\n      const newPanelPosition = this.findEstimatedPosition(newCenterPanel);\n      state.position = newPanelPosition;\n      this.updateAxesPosition(newPanelPosition);\n      state.panelMaintainRatio = (newCenterPanel.getRelativeAnchorPosition() + options.gap / 2) / (newCenterPanel.getSize() + options.gap);\n    } else if (isBetween(currentPanel!.getIndex(), index, index + panels.length - 1)) {\n      // Current panel is replaced\n      this.currentPanel = panelManager.get(currentPanel!.getIndex());\n    }\n\n    // Update checked indexes in infinite mode\n    this.updateCheckedIndexes({ min: index, max: index + panels.length - 1 });\n\n    // Uncache visible index to refresh panels\n    state.visibleIndex = {\n      min: NaN,\n      max: NaN,\n    };\n\n    this.resize();\n\n    return panels;\n  }\n\n  public remove(index: number, deleteCount: number = 1): FlickingPanel[] {\n    const state = this.state;\n    // Index should not below 0\n    index = Math.max(index, 0);\n\n    const panelManager = this.panelManager;\n    const currentIndex = this.getCurrentIndex();\n\n    const removedPanels = panelManager.remove(index, deleteCount);\n    if (isBetween(currentIndex, index, index + deleteCount - 1)) {\n      // Current panel is removed\n      // Use panel at removing index - 1 as new current panel if it exists\n      const newCurrentIndex = Math.max(index - 1, panelManager.getRange().min);\n      this.currentPanel = panelManager.get(newCurrentIndex);\n    }\n\n    // Update checked indexes in infinite mode\n    if (deleteCount > 0) {\n      // Check whether removing index will affect checked indexes\n      // Suppose index 0 is empty and removed index 1, then checked index 0 should be deleted and vice versa.\n      this.updateCheckedIndexes({ min: index - 1, max: index + deleteCount });\n      // Uncache visible index to refresh panels\n      state.visibleIndex = {\n        min: NaN,\n        max: NaN,\n      };\n    }\n\n    if (panelManager.getPanelCount() <= 0) {\n      this.currentPanel = undefined;\n      this.nearestPanel = undefined;\n    }\n\n    this.resize();\n\n    const scrollArea = state.scrollArea;\n    if (state.position < scrollArea.prev || state.position > scrollArea.next) {\n      const newPosition = circulate(state.position, scrollArea.prev, scrollArea.next, false);\n      this.moveCamera(newPosition);\n      this.updateAxesPosition(newPosition);\n    }\n\n    return removedPanels;\n  }\n\n  public updateAdaptiveSize(): void {\n    const state = this.state;\n    const options = this.options;\n    const horizontal = options.horizontal;\n    const currentPanel = this.getCurrentPanel();\n\n    if (!currentPanel) {\n      return;\n    }\n\n    const shouldApplyAdaptive = options.adaptive || !state.isAdaptiveCached;\n    const viewportStyle = this.viewportElement.style;\n    if (shouldApplyAdaptive) {\n      let sizeToApply: number;\n      if (options.adaptive) {\n        const panelBbox = currentPanel.getBbox();\n\n        sizeToApply = horizontal ? panelBbox.height : panelBbox.width;\n      } else {\n        // Find minimum height of panels to maximum panel size\n        const maximumPanelSize = this.panelManager.originalPanels().reduce((maximum, panel) => {\n          const panelBbox = panel.getBbox();\n          return Math.max(maximum, horizontal ? panelBbox.height : panelBbox.width);\n        }, 0);\n\n        sizeToApply = maximumPanelSize;\n      }\n\n      const viewportBbox = this.updateBbox();\n      sizeToApply = Math.max(sizeToApply, horizontal ? viewportBbox.height : viewportBbox.width);\n\n      state.isAdaptiveCached = true;\n      const viewportSize = `${sizeToApply}px`;\n      if (horizontal) {\n        viewportStyle.height = viewportSize;\n      } else if (!horizontal) {\n        viewportStyle.width = viewportSize;\n      }\n    }\n  }\n\n  public updateBbox(): BoundingBox {\n    const state = this.state;\n    const options = this.options;\n    const viewportElement = this.viewportElement;\n\n    if (!state.cachedBbox) {\n      state.cachedBbox = getBbox(viewportElement, options.useOffset);\n    }\n\n    return state.cachedBbox!;\n  }\n\n  public updatePlugins(): void {\n    // update for resize\n    this.plugins.forEach(plugin => {\n      plugin.update && plugin.update(this.flicking);\n    });\n  }\n\n  public destroy(option: Partial<DestroyOption>): void {\n    const state = this.state;\n    const wrapper = this.flicking.getElement();\n    const viewportElement = this.viewportElement;\n    const cameraElement = this.cameraElement;\n    const originalPanels = this.panelManager.originalPanels();\n\n    this.removePlugins(this.plugins);\n    if (!option.preserveUI) {\n      restoreStyle(viewportElement, state.originalViewportStyle);\n      restoreStyle(cameraElement, state.originalCameraStyle);\n\n      if (!state.isCameraGiven && !this.options.renderExternal) {\n        const topmostElement = state.isViewportGiven\n          ? viewportElement\n          : wrapper;\n        const deletingElement = state.isViewportGiven\n          ? cameraElement\n          : viewportElement;\n\n        originalPanels.forEach(panel => {\n          topmostElement.appendChild(panel.getElement());\n        });\n\n        topmostElement.removeChild(deletingElement);\n      }\n    }\n\n    this.axes.destroy();\n    this.panInput.destroy();\n\n    originalPanels.forEach(panel => { panel.destroy(option); });\n\n    // release resources\n    for (const x in this) {\n      (this as any)[x] = null;\n    }\n  }\n\n  public restore(status: FlickingStatus): void {\n    const panels = status.panels;\n    const defaultIndex = this.options.defaultIndex;\n    const cameraElement = this.cameraElement;\n    const panelManager = this.panelManager;\n\n    // Restore index\n    cameraElement.innerHTML = panels.map(panel => panel.html).join(\""\"");\n\n    // Create panels first\n    this.refreshPanels();\n    const createdPanels = panelManager.originalPanels();\n\n    // ...then order it by its index\n    const orderedPanels: Panel[] = [];\n    panels.forEach((panel, idx) => {\n      const createdPanel = createdPanels[idx];\n      createdPanel.setIndex(panel.index);\n      orderedPanels[panel.index] = createdPanel;\n    });\n    panelManager.replacePanels(orderedPanels, []);\n    panelManager.setCloneCount(0); // No clones at this point\n\n    const panelCount = panelManager.getPanelCount();\n    if (panelCount > 0) {\n      this.currentPanel = panelManager.get(status.index)\n        || panelManager.get(defaultIndex)\n        || panelManager.firstPanel();\n      this.nearestPanel = this.currentPanel;\n    } else {\n      this.currentPanel = undefined;\n      this.nearestPanel = undefined;\n    }\n    this.visiblePanels = orderedPanels.filter(panel => Boolean(panel));\n\n    this.resize();\n\n    this.axes.setTo({ flick: status.position }, 0);\n    this.moveCamera(status.position);\n  }\n\n  public calcVisiblePanels(): Panel[] {\n    const allPanels = this.panelManager.allPanels();\n    if (this.options.renderOnlyVisible) {\n      const { min, max } = this.state.visibleIndex;\n      const visiblePanels = min >= 0\n        ? allPanels.slice(min, max + 1)\n        : allPanels.slice(0, max + 1).concat(allPanels.slice(min));\n\n      return visiblePanels.filter(panel => panel);\n    } else {\n      return allPanels.filter(panel => {\n        const outsetProgress = panel.getOutsetProgress();\n\n        return outsetProgress > -1 && outsetProgress < 1;\n      });\n    }\n  }\n\n  public getCurrentPanel(): Panel | undefined {\n    return this.currentPanel;\n  }\n\n  public getCurrentIndex(): number {\n    const currentPanel = this.currentPanel;\n\n    return currentPanel\n      ? currentPanel.getIndex()\n      : -1;\n  }\n\n  public getNearestPanel(): Panel | undefined {\n    return this.nearestPanel;\n  }\n\n  // Get progress from nearest panel\n  public getCurrentProgress(): number {\n    const currentState = this.stateMachine.getState();\n    let nearestPanel = currentState.playing || currentState.holding\n      ? this.nearestPanel\n      : this.currentPanel;\n\n    const panelManager = this.panelManager;\n    if (!nearestPanel) {\n      // There're no panels\n      return NaN;\n    }\n    const { prev: prevRange, next: nextRange } = this.getScrollArea();\n    const cameraPosition = this.getCameraPosition();\n    const isOutOfBound = this.isOutOfBound();\n    let prevPanel = nearestPanel.prevSibling;\n    let nextPanel = nearestPanel.nextSibling;\n    let hangerPosition = this.getHangerPosition();\n    let nearestAnchorPos = nearestPanel.getAnchorPosition();\n\n    if (\n      isOutOfBound\n      && prevPanel\n      && nextPanel\n      && cameraPosition < nextRange\n      // On the basis of anchor, prevPanel is nearestPanel.\n      && (hangerPosition - prevPanel.getAnchorPosition() < nearestAnchorPos - hangerPosition)\n    ) {\n      nearestPanel = prevPanel;\n      nextPanel = nearestPanel.nextSibling;\n      prevPanel = nearestPanel.prevSibling;\n      nearestAnchorPos = nearestPanel.getAnchorPosition();\n    }\n    const nearestIndex = nearestPanel.getIndex() + (nearestPanel.getCloneIndex() + 1) * panelManager.getPanelCount();\n    const nearestSize = nearestPanel.getSize();\n\n    if (isOutOfBound) {\n      const relativeHangerPosition = this.getRelativeHangerPosition();\n\n      if (nearestAnchorPos > nextRange + relativeHangerPosition) {\n        // next bounce area: hangerPosition - relativeHangerPosition - nextRange\n        hangerPosition = nearestAnchorPos + hangerPosition - relativeHangerPosition - nextRange;\n      } else if (nearestAnchorPos < prevRange + relativeHangerPosition) {\n        // prev bounce area: hangerPosition - relativeHangerPosition - prevRange\n        hangerPosition = nearestAnchorPos + hangerPosition - relativeHangerPosition - prevRange;\n      }\n    }\n    const hangerIsNextToNearestPanel = hangerPosition >= nearestAnchorPos;\n    const gap = this.options.gap;\n\n    let basePosition = nearestAnchorPos;\n    let targetPosition = nearestAnchorPos;\n    if (hangerIsNextToNearestPanel) {\n      targetPosition = nextPanel\n        ? nextPanel.getAnchorPosition()\n        : nearestAnchorPos + nearestSize + gap;\n    } else {\n      basePosition = prevPanel\n        ? prevPanel.getAnchorPosition()\n        : nearestAnchorPos - nearestSize - gap;\n    }\n\n    const progressBetween = (hangerPosition - basePosition) / (targetPosition - basePosition);\n    const startIndex = hangerIsNextToNearestPanel\n      ? nearestIndex\n      : prevPanel\n        ? prevPanel.getIndex()\n        : nearestIndex - 1;\n\n    return startIndex + progressBetween;\n  }\n\n  // Update axes flick position without triggering event\n  public updateAxesPosition(position: number) {\n    const axes = this.axes;\n    axes.off();\n    axes.setTo({\n      flick: position,\n    }, 0);\n    axes.on(this.axesHandlers);\n  }\n\n  public getSize(): number {\n    return this.state.size;\n  }\n\n  public getScrollArea(): { prev: number, next: number } {\n    return this.state.scrollArea;\n  }\n\n  public isOutOfBound(): boolean {\n    const state = this.state;\n    const options = this.options;\n    const scrollArea = state.scrollArea;\n\n    return !options.circular\n      && options.bound\n      && (state.position <= scrollArea.prev || state.position >= scrollArea.next);\n  }\n\n  public canSetBoundMode(): boolean {\n    const state = this.state;\n    const options = this.options;\n    const lastPanel = this.panelManager.lastPanel();\n    if (!lastPanel) {\n      return false;\n    }\n\n    const summedPanelSize = lastPanel.getPosition() + lastPanel.getSize();\n\n    return options.bound\n      && !options.circular\n      && summedPanelSize >= state.size;\n  }\n\n  public getViewportElement(): HTMLElement {\n    return this.viewportElement;\n  }\n\n  public getCameraElement(): HTMLElement {\n    return this.cameraElement;\n  }\n\n  public getScrollAreaSize(): number {\n    const scrollArea = this.state.scrollArea;\n\n    return scrollArea.next - scrollArea.prev;\n  }\n\n  public getRelativeHangerPosition(): number {\n    return this.state.relativeHangerPosition;\n  }\n\n  public getHangerPosition(): number {\n    return this.state.position + this.state.relativeHangerPosition;\n  }\n\n  public getCameraPosition(): number {\n    return this.state.position;\n  }\n\n  public getPositionOffset(): number {\n    return this.state.positionOffset;\n  }\n\n  public getCheckedIndexes(): Array<[number, number]> {\n    return this.state.checkedIndexes;\n  }\n\n  public getVisibleIndex(): { min: number; max: number } {\n    return this.state.visibleIndex;\n  }\n\n  public getVisiblePanels(): Panel[] {\n    return this.visiblePanels;\n  }\n\n  public setCurrentPanel(panel: Panel): void {\n    this.currentPanel = panel;\n  }\n\n  public setLastIndex(index: number): void {\n    const currentPanel = this.currentPanel;\n    const panelManager = this.panelManager;\n\n    panelManager.setLastIndex(index);\n    if (currentPanel && currentPanel.getIndex() > index) {\n      this.currentPanel = panelManager.lastPanel();\n    }\n\n    this.resize();\n  }\n\n  public setVisiblePanels(panels: Panel[]): void {\n    this.visiblePanels = panels;\n  }\n\n  public connectAxesHandler(handlers: { [key: string]: (event: { [key: string]: any; }) => any }): void {\n    const axes = this.axes;\n\n    this.axesHandlers = handlers;\n    axes.on(handlers);\n  }\n\n  public addPlugins(plugins: Plugin | Plugin[]) {\n    const newPlugins = ([] as Plugin[]).concat(plugins);\n\n    newPlugins.forEach(plugin => {\n      plugin.init(this.flicking);\n    });\n\n    this.plugins = this.plugins.concat(newPlugins);\n    return this;\n  }\n\n  public removePlugins(plugins: Plugin | Plugin[]) {\n    const currentPlugins = this.plugins;\n    const removedPlugins = ([] as Plugin[]).concat(plugins);\n\n    removedPlugins.forEach(plugin => {\n      const index = currentPlugins.indexOf(plugin);\n\n      if (index > -1) {\n        currentPlugins.splice(index, 1);\n      }\n\n      plugin.destroy(this.flicking);\n    });\n    return this;\n  }\n\n  public updateCheckedIndexes(changedRange: { min: number, max: number }): void {\n    const state = this.state;\n\n    let removed = 0;\n    state.checkedIndexes.concat().forEach((indexes, idx) => {\n      const [min, max] = indexes;\n      // Can fill part of indexes in range\n      if (changedRange.min <= max && changedRange.max >= min) {\n        // Remove checked index from list\n        state.checkedIndexes.splice(idx - removed, 1);\n        removed++;\n      }\n    });\n  }\n\n  public resetVisibleIndex(): void {\n    const visibleIndex = this.state.visibleIndex;\n    visibleIndex.min = NaN;\n    visibleIndex.max = NaN;\n  }\n\n  public appendUncachedPanelElements(panels: Panel[]): void {\n    const options = this.options;\n    const fragment = document.createDocumentFragment();\n\n    if (options.isEqualSize) {\n      const prevVisiblePanels = this.visiblePanels;\n      const equalSizeClasses = options.isEqualSize as string[]; // for readability\n      const cached: { [className: string]: boolean } = {};\n\n      this.visiblePanels = [];\n\n      Object.keys(this.panelBboxes).forEach(className => {\n        cached[className] = true;\n      });\n\n      panels.forEach(panel => {\n        const overlappedClass = panel.getOverlappedClass(equalSizeClasses);\n        if (overlappedClass && !cached[overlappedClass]) {\n          if (!options.renderExternal) {\n            fragment.appendChild(panel.getElement());\n          }\n          this.visiblePanels.push(panel);\n          cached[overlappedClass] = true;\n        } else if (!overlappedClass) {\n          if (!options.renderExternal) {\n            fragment.appendChild(panel.getElement());\n          }\n          this.visiblePanels.push(panel);\n        }\n      });\n      prevVisiblePanels.forEach(panel => {\n        this.addVisiblePanel(panel);\n      });\n    } else {\n      if (!options.renderExternal) {\n        panels.forEach(panel => fragment.appendChild(panel.getElement()));\n      }\n      this.visiblePanels = panels.filter(panel => Boolean(panel));\n    }\n\n    if (!options.renderExternal) {\n      this.cameraElement.appendChild(fragment);\n    }\n  }\n\n  private updateClonePanels() {\n    const panelManager = this.panelManager;\n\n    // Clone panels in circular mode\n    if (this.options.circular && panelManager.getPanelCount() > 0) {\n      this.clonePanels();\n      this.updateClonedPanelPositions();\n    }\n    panelManager.chainAllPanels();\n  }\n\n  private getVisibleIndexOf(panel: Panel): number {\n    return findIndex(this.visiblePanels, visiblePanel => visiblePanel === panel);\n  }\n\n  private build(): void {\n    this.setElements();\n    this.applyCSSValue();\n    this.setMoveType();\n    this.setAxesInstance();\n    this.refreshPanels();\n    this.setDefaultPanel();\n    this.resize();\n    this.moveToDefaultPanel();\n  }\n\n  private setElements(): void {\n    const state = this.state;\n    const options = this.options;\n    const wrapper = this.flicking.getElement();\n    const classPrefix = options.classPrefix;\n\n    const viewportCandidate = wrapper.children[0] as HTMLElement;\n    const hasViewportElement = viewportCandidate && hasClass(viewportCandidate, `${classPrefix}-viewport`);\n\n    const viewportElement = hasViewportElement\n      ? viewportCandidate\n      : document.createElement(\""div\"");\n\n    const cameraCandidate = hasViewportElement\n      ? viewportElement.children[0] as HTMLElement\n      : wrapper.children[0] as HTMLElement;\n    const hasCameraElement = cameraCandidate && hasClass(cameraCandidate, `${classPrefix}-camera`);\n\n    const cameraElement = hasCameraElement\n      ? cameraCandidate\n      : document.createElement(\""div\"");\n\n    if (!hasCameraElement) {\n      cameraElement.className = `${classPrefix}-camera`;\n\n      const panelElements = hasViewportElement\n        ? viewportElement.children\n        : wrapper.children;\n\n      // Make all panels to be a child of camera element\n      // wrapper <- viewport <- camera <- panels[1...n]\n      toArray(panelElements).forEach(child => {\n        cameraElement.appendChild(child);\n      });\n    } else {\n      state.originalCameraStyle = {\n        className: cameraElement.getAttribute(\""class\""),\n        style: cameraElement.getAttribute(\""style\""),\n      };\n    }\n\n    if (!hasViewportElement) {\n      viewportElement.className = `${classPrefix}-viewport`;\n\n      // Add viewport element to wrapper\n      wrapper.appendChild(viewportElement);\n    } else {\n      state.originalViewportStyle = {\n        className: viewportElement.getAttribute(\""class\""),\n        style: viewportElement.getAttribute(\""style\""),\n      };\n    }\n\n    if (!hasCameraElement || !hasViewportElement) {\n      viewportElement.appendChild(cameraElement);\n    }\n\n    this.viewportElement = viewportElement;\n    this.cameraElement = cameraElement;\n    state.isViewportGiven = hasViewportElement;\n    state.isCameraGiven = hasCameraElement;\n  }\n\n  private applyCSSValue(): void {\n    const options = this.options;\n    const viewportElement = this.viewportElement;\n    const cameraElement = this.cameraElement;\n    const viewportStyle = this.viewportElement.style;\n\n    // Set default css values for each element\n    applyCSS(viewportElement, DEFAULT_VIEWPORT_CSS);\n    applyCSS(cameraElement, DEFAULT_CAMERA_CSS);\n\n    viewportElement.style.zIndex = `${options.zIndex}`;\n    if (options.horizontal) {\n      viewportStyle.minHeight = \""100%\"";\n      viewportStyle.width = \""100%\"";\n    } else {\n      viewportStyle.minWidth = \""100%\"";\n      viewportStyle.height = \""100%\"";\n    }\n    if (options.overflow) {\n      viewportStyle.overflow = \""visible\"";\n    }\n\n    this.panelManager = new PanelManager(this.cameraElement, options);\n  }\n\n  private setMoveType(): void {\n    const moveType = this.options.moveType as MoveTypeObjectOption;\n\n    switch (moveType.type) {\n      case MOVE_TYPE.SNAP:\n        this.moveType = new Snap(moveType.count);\n        break;\n      case MOVE_TYPE.FREE_SCROLL:\n        this.moveType = new FreeScroll();\n        break;\n      default:\n        throw new Error(\""moveType is not correct!\"");\n    }\n  }\n\n  private setAxesInstance(): void {\n    const state = this.state;\n    const options = this.options;\n\n    const scrollArea = state.scrollArea;\n    const horizontal = options.horizontal;\n\n    this.axes = new Axes({\n      flick: {\n        range: [scrollArea.prev, scrollArea.next],\n        circular: options.circular,\n        bounce: [0, 0], // will be updated in resize()\n      },\n    }, {\n      easing: options.panelEffect,\n      deceleration: options.deceleration,\n      interruptable: true,\n    });\n\n    this.panInput = new PanInput(this.viewportElement, {\n      inputType: options.inputType,\n      thresholdAngle: options.thresholdAngle,\n      scale: options.horizontal ? [-1, 0] : [0, -1],\n    });\n\n    this.axes.connect(horizontal ? [\""flick\"", \""\""] : [\""\"", \""flick\""], this.panInput);\n  }\n\n  private refreshPanels(): void {\n    const panelManager = this.panelManager;\n    // Panel elements were attached to camera element by Flicking class\n    const panelElements = this.cameraElement.children;\n\n    // Initialize panels\n    const panels = toArray(panelElements).map(\n      (el: HTMLElement, idx: number) => new Panel(el, idx, this),\n    );\n\n    panelManager.replacePanels(panels, []);\n    this.visiblePanels = panels.filter(panel => Boolean(panel));\n  }\n\n  private setDefaultPanel(): void {\n    const options = this.options;\n    const panelManager = this.panelManager;\n    const indexRange = this.panelManager.getRange();\n    const index = clamp(options.defaultIndex, indexRange.min, indexRange.max);\n\n    this.currentPanel = panelManager.get(index);\n  }\n\n  private clonePanels() {\n    const state = this.state;\n    const options = this.options;\n    const panelManager = this.panelManager;\n\n    const gap = options.gap;\n    const viewportSize = state.size;\n    const firstPanel = panelManager.firstPanel();\n    const lastPanel = panelManager.lastPanel()!;\n\n    // There're no panels exist\n    if (!firstPanel) {\n      return;\n    }\n\n    // For each panels, clone itself while last panel's position + size is below viewport size\n    const panels = panelManager.originalPanels();\n    const reversedPanels = panels.concat().reverse();\n\n    const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + gap;\n    const relativeAnchorPosition = firstPanel.getRelativeAnchorPosition();\n    const relativeHangerPosition = this.getRelativeHangerPosition();\n\n    const areaPrev = (relativeHangerPosition - relativeAnchorPosition) % sumOriginalPanelSize;\n    let sizeSum = 0;\n    let panelAtLeftBoundary!: Panel;\n    for (const panel of reversedPanels) {\n      if (!panel) {\n        continue;\n      }\n      sizeSum += panel.getSize() + gap;\n      if (sizeSum >= areaPrev) {\n        panelAtLeftBoundary = panel;\n        break;\n      }\n    }\n\n    const areaNext = (viewportSize - relativeHangerPosition + relativeAnchorPosition) % sumOriginalPanelSize;\n    sizeSum = 0;\n    let panelAtRightBoundary!: Panel;\n    for (const panel of panels) {\n      if (!panel) {\n        continue;\n      }\n      sizeSum += panel.getSize() + gap;\n      if (sizeSum >= areaNext) {\n        panelAtRightBoundary = panel;\n        break;\n      }\n    }\n\n    // Need one more set of clones on prev area of original panel 0\n    const needCloneOnPrev = panelAtLeftBoundary.getIndex() !== 0\n      && panelAtLeftBoundary.getIndex() <= panelAtRightBoundary.getIndex();\n\n    // Visible count of panel 0 on first screen\n    const panel0OnFirstscreen = Math.ceil((relativeHangerPosition + firstPanel.getSize() - relativeAnchorPosition) / sumOriginalPanelSize)\n      + Math.ceil((viewportSize - relativeHangerPosition + relativeAnchorPosition) / sumOriginalPanelSize)\n      - 1; // duplication\n\n    const cloneCount = panel0OnFirstscreen\n      + (needCloneOnPrev ? 1 : 0);\n    const prevCloneCount = panelManager.getCloneCount();\n\n    panelManager.setCloneCount(cloneCount);\n    if (options.renderExternal) {\n      return;\n    }\n\n    if (cloneCount > prevCloneCount) {\n      // should clone more\n      for (let cloneIndex = prevCloneCount; cloneIndex < cloneCount; cloneIndex++) {\n        const clones = panels.map(origPanel => origPanel.clone(cloneIndex));\n        const fragment = document.createDocumentFragment();\n        clones.forEach(panel => fragment.appendChild(panel.getElement()));\n\n        this.cameraElement.appendChild(fragment);\n        this.visiblePanels.push(...clones.filter(clone => Boolean(clone)));\n        panelManager.insertClones(cloneIndex, 0, clones);\n      }\n    } else if (cloneCount < prevCloneCount) {\n      // should remove some\n      panelManager.removeClonesAfter(cloneCount);\n    }\n  }\n\n  private moveToDefaultPanel(): void {\n    const state = this.state;\n    const panelManager = this.panelManager;\n    const options = this.options;\n    const indexRange = this.panelManager.getRange();\n\n    const defaultIndex = clamp(options.defaultIndex, indexRange.min, indexRange.max);\n    const defaultPanel = panelManager.get(defaultIndex);\n\n    let defaultPosition = 0;\n    if (defaultPanel) {\n      defaultPosition = defaultPanel.getAnchorPosition() - state.relativeHangerPosition;\n      defaultPosition = this.canSetBoundMode()\n        ? clamp(defaultPosition, state.scrollArea.prev, state.scrollArea.next)\n        : defaultPosition;\n    }\n\n    this.moveCamera(defaultPosition);\n    this.axes.setTo({ flick: defaultPosition }, 0);\n  }\n\n  private updateSize(): void {\n    const state = this.state;\n    const options = this.options;\n    const panels = this.panelManager.originalPanels()\n      .filter(panel => Boolean(panel));\n    const bbox = this.updateBbox();\n\n    const prevSize = state.size;\n    // Update size & hanger position\n    state.size = options.horizontal\n      ? bbox.width\n      : bbox.height;\n\n    if (prevSize !== state.size) {\n      state.relativeHangerPosition = parseArithmeticExpression(options.hanger, state.size);\n      state.infiniteThreshold = parseArithmeticExpression(options.infiniteThreshold, state.size);\n    }\n\n    if (panels.length <= 0) {\n      return;\n    }\n\n    this.resizePanels(panels);\n  }\n\n  private updateOriginalPanelPositions(): void {\n    const gap = this.options.gap;\n    const panelManager = this.panelManager;\n\n    const firstPanel = panelManager.firstPanel();\n    const panels = panelManager.originalPanels();\n\n    if (!firstPanel) {\n      return;\n    }\n\n    const currentPanel = this.currentPanel!;\n    const nearestPanel = this.nearestPanel;\n    const currentState = this.stateMachine.getState();\n    const scrollArea = this.state.scrollArea;\n\n    // Update panel position && fit to wrapper\n    let nextPanelPos = firstPanel.getPosition();\n    let maintainingPanel: Panel = firstPanel;\n    if (nearestPanel) {\n      // We should maintain nearestPanel's position\n      const looped = !isBetween(currentState.lastPosition + currentState.delta, scrollArea.prev, scrollArea.next);\n\n      maintainingPanel = looped\n        ? currentPanel\n        : nearestPanel;\n    } else if (firstPanel.getIndex() > 0) {\n      maintainingPanel = currentPanel;\n    }\n\n    const panelsBeforeMaintainPanel = panels.slice(0, maintainingPanel.getIndex() + (maintainingPanel.getCloneIndex() + 1) * panels.length);\n    const accumulatedSize = panelsBeforeMaintainPanel.reduce((total, panel) => {\n      return total + panel.getSize() + gap;\n    }, 0);\n\n    nextPanelPos = maintainingPanel.getPosition() - accumulatedSize;\n\n    panels.forEach(panel => {\n      const newPosition = nextPanelPos;\n      const panelSize = panel.getSize();\n\n      panel.setPosition(newPosition);\n      nextPanelPos += panelSize + gap;\n    });\n\n    if (!this.options.renderOnlyVisible) {\n      panels.forEach(panel => panel.setPositionCSS());\n    }\n  }\n\n  private updateClonedPanelPositions(): void {\n    const state = this.state;\n    const options = this.options;\n    const panelManager = this.panelManager;\n    const clonedPanels = panelManager.clonedPanels()\n      .reduce((allClones, clones) => [...allClones, ...clones], [])\n      .filter(panel => Boolean(panel));\n\n    const scrollArea = state.scrollArea;\n\n    const firstPanel = panelManager.firstPanel();\n    const lastPanel = panelManager.lastPanel()!;\n\n    if (!firstPanel) {\n      return;\n    }\n\n    const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + options.gap;\n\n    // Locate all cloned panels linearly first\n    for (const panel of clonedPanels) {\n      const origPanel = panel.getOriginalPanel();\n      const cloneIndex = panel.getCloneIndex();\n      const cloneBasePos = sumOriginalPanelSize * (cloneIndex + 1);\n      const clonedPanelPos = cloneBasePos + origPanel.getPosition();\n\n      panel.setPosition(clonedPanelPos);\n    }\n\n    let lastReplacePosition = firstPanel.getPosition();\n    // reverse() pollutes original array, so copy it with concat()\n    for (const panel of clonedPanels.concat().reverse()) {\n      const panelSize = panel.getSize();\n      const replacePosition = lastReplacePosition - panelSize - options.gap;\n\n      if (replacePosition + panelSize <= scrollArea.prev) {\n        // Replace is not meaningful, as it won't be seen in current scroll area\n        break;\n      }\n\n      panel.setPosition(replacePosition);\n      lastReplacePosition = replacePosition;\n    }\n\n    if (!this.options.renderOnlyVisible) {\n      clonedPanels.forEach(panel => {\n        panel.setPositionCSS();\n      });\n    }\n  }\n\n  private updateScrollArea(): void {\n    const state = this.state;\n    const panelManager = this.panelManager;\n    const options = this.options;\n    const axes = this.axes;\n\n    // Set viewport scrollable area\n    const firstPanel = panelManager.firstPanel();\n    const lastPanel = panelManager.lastPanel() as Panel;\n    const relativeHangerPosition = state.relativeHangerPosition;\n\n    if (!firstPanel) {\n      state.scrollArea = {\n        prev: 0,\n        next: 0,\n      };\n    } else if (this.canSetBoundMode()) {\n      state.scrollArea = {\n        prev: firstPanel.getPosition(),\n        next: lastPanel.getPosition() + lastPanel.getSize() - state.size,\n      };\n    } else if (options.circular) {\n      const sumOriginalPanelSize = lastPanel.getPosition() + lastPanel.getSize() - firstPanel.getPosition() + options.gap;\n\n      // Maximum scroll extends to first clone sequence's first panel\n      state.scrollArea = {\n        prev: firstPanel.getAnchorPosition() - relativeHangerPosition,\n        next: sumOriginalPanelSize + firstPanel.getAnchorPosition() - relativeHangerPosition,\n      };\n    } else {\n      state.scrollArea = {\n        prev: firstPanel.getAnchorPosition() - relativeHangerPosition,\n        next: lastPanel.getAnchorPosition() - relativeHangerPosition,\n      };\n    }\n\n    const viewportSize = state.size;\n    const bounce = options.bounce;\n\n    let parsedBounce: number[];\n    if (isArray(bounce)) {\n      parsedBounce = (bounce as string[]).map(val => parseArithmeticExpression(val, viewportSize, DEFAULT_OPTIONS.bounce as number));\n    } else {\n      const parsedVal = parseArithmeticExpression(bounce as number | string, viewportSize, DEFAULT_OPTIONS.bounce as number);\n      parsedBounce = [parsedVal, parsedVal];\n    }\n\n    // Update axes range and bounce\n    const flick = axes.axis.flick;\n    flick.range = [state.scrollArea.prev, state.scrollArea.next];\n    flick.bounce = parsedBounce;\n  }\n\n  // Update camera position after resizing\n  private updateCameraPosition(): void {\n    const state = this.state;\n    const currentPanel = this.getCurrentPanel();\n    const currentState = this.stateMachine.getState();\n    const isFreeScroll = this.moveType.is(MOVE_TYPE.FREE_SCROLL);\n    const relativeHangerPosition = this.getRelativeHangerPosition();\n    const halfGap = this.options.gap / 2;\n\n    if (currentState.holding || currentState.playing) {\n      this.updateVisiblePanels();\n      return;\n    }\n\n    let newPosition: number;\n    if (isFreeScroll) {\n      const nearestPanel = this.getNearestPanel();\n\n      newPosition = nearestPanel\n        ? nearestPanel.getPosition() - halfGap + (nearestPanel.getSize() + 2 * halfGap) * state.panelMaintainRatio - relativeHangerPosition\n        : this.getCameraPosition();\n    } else {\n      newPosition = currentPanel\n        ? currentPanel.getAnchorPosition() - relativeHangerPosition\n        : this.getCameraPosition();\n    }\n\n    if (this.canSetBoundMode()) {\n      newPosition = clamp(newPosition, state.scrollArea.prev, state.scrollArea.next);\n    }\n\n    // Pause & resume axes to prevent axes's \""change\"" event triggered\n    // This should be done before moveCamera, as moveCamera can trigger needPanel\n    this.updateAxesPosition(newPosition);\n\n    this.moveCamera(newPosition);\n  }\n\n  private checkNeedPanel(axesEvent?: any): void {\n    const state = this.state;\n    const options = this.options;\n    const panelManager = this.panelManager;\n    const currentPanel = this.currentPanel;\n    const nearestPanel = this.nearestPanel;\n    const currentState = this.stateMachine.getState();\n\n    if (!options.infinite) {\n      return;\n    }\n\n    const gap = options.gap;\n    const infiniteThreshold = state.infiniteThreshold;\n    const maxLastIndex = panelManager.getLastIndex();\n\n    if (maxLastIndex < 0) {\n      return;\n    }\n\n    if (!currentPanel || !nearestPanel) {\n      // There're no panels\n      this.triggerNeedPanel({\n        axesEvent,\n        siblingPanel: null,\n        direction: null,\n        indexRange: {\n          min: 0,\n          max: maxLastIndex,\n          length: maxLastIndex + 1,\n        },\n      });\n      return;\n    }\n\n    const originalNearestPosition = nearestPanel.getPosition();\n\n    // Check next direction\n    let checkingPanel: Panel | null = !currentState.holding && !currentState.playing\n      ? currentPanel\n      : nearestPanel;\n\n    while (checkingPanel) {\n      const currentIndex = checkingPanel.getIndex();\n      const nextSibling = checkingPanel.nextSibling;\n      const lastPanel = panelManager.lastPanel()!;\n      const atLastPanel = currentIndex === lastPanel.getIndex();\n      const nextIndex = !atLastPanel && nextSibling\n        ? nextSibling.getIndex()\n        : maxLastIndex + 1;\n      const currentNearestPosition = nearestPanel.getPosition();\n      const panelRight = checkingPanel.getPosition() + checkingPanel.getSize() - (currentNearestPosition - originalNearestPosition);\n      const cameraNext = state.position + state.size;\n\n      // There're empty panels between\n      const emptyPanelExistsBetween = (nextIndex - currentIndex > 1);\n      // Expected prev panel's left position is smaller than camera position\n      const overThreshold = panelRight + gap - infiniteThreshold <= cameraNext;\n\n      if (emptyPanelExistsBetween && overThreshold) {\n        this.triggerNeedPanel({\n          axesEvent,\n          siblingPanel: checkingPanel,\n          direction: DIRECTION.NEXT,\n          indexRange: {\n            min: currentIndex + 1,\n            max: nextIndex - 1,\n            length: nextIndex - currentIndex - 1,\n          },\n        });\n      }\n\n      // Trigger needPanel in circular & at max panel index\n      if (options.circular && currentIndex === maxLastIndex && overThreshold) {\n        const firstPanel = panelManager.firstPanel();\n        const firstIndex = firstPanel\n          ? firstPanel.getIndex()\n          : -1;\n\n        if (firstIndex > 0) {\n          this.triggerNeedPanel({\n            axesEvent,\n            siblingPanel: checkingPanel,\n            direction: DIRECTION.NEXT,\n            indexRange: {\n              min: 0,\n              max: firstIndex - 1,\n              length: firstIndex,\n            },\n          });\n        }\n      }\n\n      // Check whether panels are changed\n      const lastPanelAfterNeed = panelManager.lastPanel()!;\n      const atLastPanelAfterNeed = lastPanelAfterNeed && currentIndex === lastPanelAfterNeed.getIndex();\n\n      if (atLastPanelAfterNeed || !overThreshold) {\n        break;\n      }\n\n      checkingPanel = checkingPanel.nextSibling;\n    }\n\n    // Check prev direction\n    checkingPanel = nearestPanel;\n    while (checkingPanel) {\n      const cameraPrev = state.position;\n      const checkingIndex = checkingPanel.getIndex();\n      const prevSibling = checkingPanel.prevSibling;\n      const firstPanel = panelManager.firstPanel()!;\n      const atFirstPanel = checkingIndex === firstPanel.getIndex();\n      const prevIndex = !atFirstPanel && prevSibling\n        ? prevSibling.getIndex()\n        : -1;\n      const currentNearestPosition = nearestPanel.getPosition();\n      const panelLeft = checkingPanel.getPosition() - (currentNearestPosition - originalNearestPosition);\n\n      // There're empty panels between\n      const emptyPanelExistsBetween = checkingIndex - prevIndex > 1;\n      // Expected prev panel's right position is smaller than camera position\n      const overThreshold = panelLeft - gap + infiniteThreshold >= cameraPrev;\n      if (emptyPanelExistsBetween && overThreshold) {\n        this.triggerNeedPanel({\n          axesEvent,\n          siblingPanel: checkingPanel,\n          direction: DIRECTION.PREV,\n          indexRange: {\n            min: prevIndex + 1,\n            max: checkingIndex - 1,\n            length: checkingIndex - prevIndex - 1,\n          },\n        });\n      }\n\n      // Trigger needPanel in circular & at panel 0\n      if (options.circular && checkingIndex === 0 && overThreshold) {\n        const lastPanel = panelManager.lastPanel();\n\n        if (lastPanel && lastPanel.getIndex() < maxLastIndex) {\n          const lastIndex = lastPanel.getIndex();\n\n          this.triggerNeedPanel({\n            axesEvent,\n            siblingPanel: checkingPanel,\n            direction: DIRECTION.PREV,\n            indexRange: {\n              min: lastIndex + 1,\n              max: maxLastIndex,\n              length: maxLastIndex - lastIndex,\n            },\n          });\n        }\n      }\n\n      // Check whether panels were changed\n      const firstPanelAfterNeed = panelManager.firstPanel();\n      const atFirstPanelAfterNeed = firstPanelAfterNeed && checkingIndex === firstPanelAfterNeed.getIndex();\n\n      // Looped in circular mode\n      if (atFirstPanelAfterNeed || !overThreshold) {\n        break;\n      }\n\n      checkingPanel = checkingPanel.prevSibling;\n    }\n  }\n\n  private triggerNeedPanel(params: {\n    axesEvent: any;\n    siblingPanel: Panel | null,\n    direction: FlickingEvent[\""direction\""];\n    indexRange: NeedPanelEvent[\""range\""];\n  }): void {\n    const { axesEvent, siblingPanel, direction, indexRange } = params;\n    const options = this.options;\n    const checkedIndexes = this.state.checkedIndexes;\n    const alreadyTriggered = checkedIndexes.some(([min, max]) => min === indexRange.min || max === indexRange.max);\n    const hasHandler = this.flicking.hasOn(EVENTS.NEED_PANEL);\n\n    if (alreadyTriggered || !hasHandler) {\n      return;\n    }\n\n    // Should done before triggering event, as we can directly add panels by event callback\n    checkedIndexes.push([indexRange.min, indexRange.max]);\n\n    const index = siblingPanel\n      ? siblingPanel.getIndex()\n      : 0;\n    const isTrusted = axesEvent\n      ? axesEvent.isTrusted\n      : false;\n\n    this.triggerEvent(\n      EVENTS.NEED_PANEL,\n      axesEvent,\n      isTrusted,\n      {\n        index,\n        panel: siblingPanel,\n        direction,\n        range: indexRange,\n        fill: (element: ElementLike | ElementLike[]) => {\n          const panelManager = this.panelManager;\n          if (!siblingPanel) {\n            return this.insert(panelManager.getRange().max + 1, element);\n          }\n\n          const parsedElements = parseElement(element);\n          // Slice elements to fit size equal to empty spaces\n          const elements = direction === DIRECTION.NEXT\n            ? parsedElements.slice(0, indexRange.length)\n            : parsedElements.slice(-indexRange.length);\n\n          if (direction === DIRECTION.NEXT) {\n            if (options.circular && index === panelManager.getLastIndex()) {\n              // needPanel event is triggered on last index, insert at index 0\n              return this.insert(0, elements);\n            } else {\n              return siblingPanel.insertAfter(elements);\n            }\n          } else if (direction === DIRECTION.PREV) {\n            if (options.circular && index === 0) {\n              // needPanel event is triggered on first index(0), insert at the last index\n              return this.insert(indexRange.max - elements.length + 1, elements);\n            } else {\n              return siblingPanel.insertBefore(elements);\n            }\n          } else {\n            // direction is null when there're no panels exist\n            return this.insert(0, elements);\n          }\n        },\n      } as Partial<NeedPanelEvent>,\n    );\n  }\n\n  private updateVisiblePanels() {\n    const state = this.state;\n    const options = this.options;\n    const cameraElement = this.cameraElement;\n    const visibleIndex = state.visibleIndex;\n    const { renderExternal, renderOnlyVisible } = options;\n    if (!renderOnlyVisible) {\n      return;\n    }\n\n    if (!this.nearestPanel) {\n      this.resetVisibleIndex();\n      while (cameraElement.firstChild) {\n        cameraElement.removeChild(cameraElement.firstChild);\n      }\n      return;\n    }\n\n    const newVisibleIndex = this.calcNewVisiblePanelIndex();\n\n    if (newVisibleIndex.min !== visibleIndex.min || newVisibleIndex.max !== visibleIndex.max) {\n      state.visibleIndex = newVisibleIndex;\n      if (isNaN(newVisibleIndex.min) || isNaN(newVisibleIndex.max)) {\n        return;\n      }\n\n      const prevVisiblePanels = this.visiblePanels;\n      const newVisiblePanels = this.calcVisiblePanels();\n\n      const { addedPanels, removedPanels } = this.checkVisiblePanelChange(prevVisiblePanels, newVisiblePanels);\n\n      if (newVisiblePanels.length > 0) {\n        const firstVisiblePanelPos = newVisiblePanels[0].getPosition();\n        state.positionOffset = firstVisiblePanelPos;\n      }\n\n      newVisiblePanels.forEach(panel => {\n        panel.setPositionCSS(state.positionOffset);\n      });\n\n      if (!renderExternal) {\n        removedPanels.forEach(panel => {\n          const panelElement = panel.getElement();\n          panelElement.parentNode && cameraElement.removeChild(panelElement);\n        });\n\n        const fragment = document.createDocumentFragment();\n        addedPanels.forEach(panel => {\n          fragment.appendChild(panel.getElement());\n        });\n\n        cameraElement.appendChild(fragment);\n      }\n      this.visiblePanels = newVisiblePanels;\n\n      this.flicking.trigger(EVENTS.VISIBLE_CHANGE, {\n        type: EVENTS.VISIBLE_CHANGE,\n        range: {\n          min: newVisibleIndex.min,\n          max: newVisibleIndex.max,\n        },\n      });\n    } else {\n      this.visiblePanels.forEach(panel => panel.setPositionCSS(state.positionOffset));\n    }\n  }\n\n  private calcNewVisiblePanelIndex() {\n    const cameraPos = this.getCameraPosition();\n    const viewportSize = this.getSize();\n    const basePanel = this.nearestPanel!;\n    const panelManager = this.panelManager;\n    const allPanelCount = panelManager.getRange().max + 1;\n    const cloneCount = panelManager.getCloneCount();\n\n    const checkLastPanel = (\n      panel: Panel,\n      getNextPanel: (panel: Panel) => Panel | null,\n      isOutOfViewport: (panel: Panel) => boolean,\n    ): Panel => {\n      let lastPanel = panel;\n      while (true) {\n        const nextPanel = getNextPanel(lastPanel);\n        if (!nextPanel || isOutOfViewport(nextPanel)) {\n          break;\n        }\n        lastPanel = nextPanel;\n      }\n      return lastPanel;\n    };\n\n    const lastPanelOfNextDir = checkLastPanel(basePanel, panel => {\n      const nextPanel = panel.nextSibling;\n\n      if (nextPanel && nextPanel.getPosition() >= panel.getPosition()) {\n        return nextPanel;\n      } else {\n        return null;\n      }\n    }, panel => panel.getPosition() >= cameraPos + viewportSize);\n\n    const lastPanelOfPrevDir = checkLastPanel(basePanel, panel => {\n      const prevPanel = panel.prevSibling;\n\n      if (prevPanel && prevPanel.getPosition() <= panel.getPosition()) {\n        return prevPanel;\n      } else {\n        return null;\n      }\n    }, panel => panel.getPosition() + panel.getSize() <= cameraPos);\n\n    const minPanelCloneIndex = lastPanelOfPrevDir.getCloneIndex();\n    const maxPanelCloneOffset = allPanelCount * (lastPanelOfNextDir.getCloneIndex() + 1);\n    const minPanelCloneOffset = minPanelCloneIndex > -1\n      ? allPanelCount * (cloneCount - minPanelCloneIndex)\n      : 0;\n\n    const newVisibleIndex = {\n      // Relative index including clone, can be negative number\n      min: basePanel.getCloneIndex() > -1\n        ? lastPanelOfPrevDir.getIndex() + minPanelCloneOffset\n        : lastPanelOfPrevDir.getIndex() - minPanelCloneOffset,\n      // Relative index including clone\n      max: lastPanelOfNextDir.getIndex() + maxPanelCloneOffset,\n    };\n\n    // Stopped on first cloned first panel\n    if (lastPanelOfPrevDir.getIndex() === 0 && lastPanelOfPrevDir.getCloneIndex() === 0) {\n      newVisibleIndex.min = allPanelCount;\n    }\n\n    return newVisibleIndex;\n  }\n\n  private checkVisiblePanelChange(prevVisiblePanels: Panel[], newVisiblePanels: Panel[]) {\n    const prevRefCount = prevVisiblePanels.map(() => 0);\n    const newRefCount = newVisiblePanels.map(() => 0);\n\n    prevVisiblePanels.forEach((prevPanel, prevIndex) => {\n      newVisiblePanels.forEach((newPanel, newIndex) => {\n        if (prevPanel === newPanel) {\n          prevRefCount[prevIndex]++;\n          newRefCount[newIndex]++;\n        }\n      });\n    });\n\n    const removedPanels = prevRefCount.reduce((removed: Panel[], count, index) => {\n      return count === 0\n        ? [...removed, prevVisiblePanels[index]]\n        : removed;\n    }, []);\n    const addedPanels = newRefCount.reduce((added: Panel[], count, index) => {\n      return count === 0\n        ? [...added, newVisiblePanels[index]]\n        : added;\n    }, []);\n\n    return { removedPanels, addedPanels };\n  }\n\n  private resizePanels(panels: Panel[]): void {\n    const options = this.options;\n    const panelBboxes = this.panelBboxes;\n\n    if (options.isEqualSize === true) {\n      if (!panelBboxes.default) {\n        const defaultPanel = panels[0];\n        panelBboxes.default = defaultPanel.getBbox();\n      }\n\n      const defaultBbox = panelBboxes.default;\n\n      panels.forEach(panel => {\n        panel.resize(defaultBbox);\n      });\n      return;\n    } else if (options.isEqualSize) {\n      const equalSizeClasses = options.isEqualSize;\n\n      panels.forEach(panel => {\n        const overlappedClass = panel.getOverlappedClass(equalSizeClasses);\n        if (overlappedClass) {\n          panel.resize(panelBboxes[overlappedClass]);\n          panelBboxes[overlappedClass] = panel.getBbox();\n        } else {\n          panel.resize();\n        }\n      });\n      return;\n    }\n    panels.forEach(panel => {\n      panel.resize();\n    });\n  }\n}\n"",""import { isBrowser } from \""../consts\"";\n\nconst tid = \""UA-70842526-24\"";\nconst cid = (Math.random() * Math.pow(10, 20)) / Math.pow(10, 10);\n\nexport function sendEvent(category: string, action: string, label: any) {\n  if (!isBrowser) {\n    return;\n  }\n\n  try {\n    const innerWidth = window.innerWidth;\n    const innerHeight = window.innerHeight;\n    const screen = window.screen || { width: innerWidth, height: innerHeight };\n    const collectInfos = [\n      \""v=1\"",\n      \""t=event\"",\n      `dl=${location.href}`,\n      `ul=${(navigator.language || \""en-us\"").toLowerCase()}`,\n      `de=${document.charset || document.inputEncoding || document.characterSet || \""utf-8\""}`,\n      `dr=${document.referrer}`,\n      `dt=${document.title}`,\n      `sr=${screen.width}x${screen.height}`,\n      `vp=${innerWidth}x${innerHeight}`,\n      `ec=${category}`,\n      `ea=${action}`,\n      `el=${JSON.stringify(label)}`,\n      `cid=${cid}`,\n      `tid=${tid}`,\n      \""cd1=#__VERSION__#\"",\n      `z=${Math.floor(Math.random() * 10000000)}`,\n    ];\n    const req = new XMLHttpRequest();\n    req.open(\""GET\"", `https://www.google-analytics.com/collect?${collectInfos.join(\""&\"")}`);\n    req.send();\n  } catch (e) {}\n}\n"",""/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport Component from \""@egjs/component\"";\nimport Viewport from \""./components/Viewport\"";\nimport Panel from \""./components/Panel\"";\n\nimport { merge, getProgress, parseElement, isString, counter, findIndex } from \""./utils\"";\nimport { DEFAULT_OPTIONS, EVENTS, DIRECTION, AXES_EVENTS, STATE_TYPE, DEFAULT_MOVE_TYPE_OPTIONS } from \""./consts\"";\nimport { FlickingOptions, FlickingEvent, Direction, EventType, FlickingPanel, TriggerCallback, FlickingContext, FlickingStatus, Plugin, ElementLike, DestroyOption, BeforeSyncResult, SyncResult } from \""./types\"";\nimport { sendEvent } from \""./ga/ga\"";\nimport { DiffResult } from \""@egjs/list-differ\"";\n\n/**\n * @memberof eg\n * @extends eg.Component\n * @support {\""ie\"": \""10+\"", \""ch\"" : \""latest\"", \""ff\"" : \""latest\"",  \""sf\"" : \""latest\"" , \""edge\"" : \""latest\"", \""ios\"" : \""7+\"", \""an\"" : \""4.X+\""}\n * @requires {@link https://github.com/naver/egjs-component|eg.Component}\n * @requires {@link https://github.com/naver/egjs-axes|eg.Axes}\n * @see Easing Functions Cheat Sheet {@link http://easings.net/} <ko>이징 함수 Cheat Sheet {@link http://easings.net/}</ko>\n */\nclass Flicking extends Component {\n  /**\n   * Version info string\n   * @ko 버전정보 문자열\n   * @example\n   * eg.Flicking.VERSION;  // ex) 3.0.0\n   * @memberof eg.Flicking\n   */\n  public static VERSION: string = \""#__VERSION__#\"";\n  /**\n   * Direction constant - \""PREV\"" or \""NEXT\""\n   * @ko 방향 상수 - \""PREV\"" 또는 \""NEXT\""\n   * @type {object}\n   * @property {\""PREV\""} PREV - Prev direction from current hanger position.<br/>It's `left(←️)` direction when `horizontal: true`.<br/>Or, `up(↑️)` direction when `horizontal: false`.<ko>현재 행어를 기준으로 이전 방향.<br/>`horizontal: true`일 경우 `왼쪽(←️)` 방향.<br/>`horizontal: false`일 경우 `위쪽(↑️)`방향이다.</ko>\n   * @property {\""NEXT\""} NEXT - Next direction from current hanger position.<br/>It's `right(→)` direction when `horizontal: true`.<br/>Or, `down(↓️)` direction when `horizontal: false`.<ko>현재 행어를 기준으로 다음 방향.<br/>`horizontal: true`일 경우 `오른쪽(→)` 방향.<br/>`horizontal: false`일 경우 `아래쪽(↓️)`방향이다.</ko>\n   * @example\n   * eg.Flicking.DIRECTION.PREV; // \""PREV\""\n   * eg.Flicking.DIRECTION.NEXT; // \""NEXT\""\n   */\n  public static DIRECTION: Direction = DIRECTION;\n\n  /**\n   * Event type object with event name strings.\n   * @ko 이벤트 이름 문자열들을 담은 객체\n   * @type {object}\n   * @property {\""holdStart\""} HOLD_START - holdStart event<ko>holdStart 이벤트</ko>\n   * @property {\""holdEnd\""} HOLD_END - holdEnd event<ko>holdEnd 이벤트</ko>\n   * @property {\""moveStart\""} MOVE_START - moveStart event<ko>moveStart 이벤트</ko>\n   * @property {\""move\""} MOVE - move event<ko>move 이벤트</ko>\n   * @property {\""moveEnd\""} MOVE_END - moveEnd event<ko>moveEnd 이벤트</ko>\n   * @property {\""change\""} CHANGE - change event<ko>change 이벤트</ko>\n   * @property {\""restore\""} RESTORE - restore event<ko>restore 이벤트</ko>\n   * @property {\""select\""} SELECT - select event<ko>select 이벤트</ko>\n   * @property {\""needPanel\""} NEED_PANEL - needPanel event<ko>needPanel 이벤트</ko>\n   * @example\n   * eg.Flicking.EVENTS.MOVE_START; // \""MOVE_START\""\n   */\n  public static EVENTS: EventType = EVENTS;\n\n  public options: FlickingOptions;\n\n  private wrapper: HTMLElement;\n  private viewport: Viewport;\n  private eventContext: FlickingContext;\n  private isPanelChangedAtBeforeSync: boolean = false;\n\n  /**\n   * @param element A base element for the eg.Flicking module. When specifying a value as a `string` type, you must specify a css selector string to select the element.<ko>eg.Flicking 모듈을 사용할 기준 요소. `string`타입으로 값 지정시 요소를 선택하기 위한 css 선택자 문자열을 지정해야 한다.</ko>\n   * @param options An option object of the eg.Flicking module<ko>eg.Flicking 모듈의 옵션 객체</ko>\n   * @param {string} [options.classPrefix=\""eg-flick\""] A prefix of class names will be added for the panels, viewport, and camera.<ko>패널들과 뷰포트, 카메라에 추가될 클래스 이름의 접두사.</ko>\n   * @param {number} [options.deceleration=0.0075] Deceleration value for panel movement animation for animation triggered by manual user input. A higher value means a shorter running time.<ko>사용자의 동작으로 가속도가 적용된 패널 이동 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아진다.</ko>\n   * @param {boolean} [options.horizontal=true] The direction of panel movement. (true: horizontal, false: vertical)<ko>패널 이동 방향. (true: 가로방향, false: 세로방향)</ko>\n   * @param {boolean} [options.circular=false] Enables circular mode, which connects first/last panel for continuous scrolling.<ko>순환 모드를 활성화한다. 순환 모드에서는 양 끝의 패널이 서로 연결되어 끊김없는 스크롤이 가능하다.</ko>\n   * @param {boolean} [options.infinite=false] Enables infinite mode, which can automatically trigger needPanel until reaching the last panel's index reaches the lastIndex.<ko>무한 모드를 활성화한다. 무한 모드에서는 needPanel 이벤트를 자동으로 트리거한다. 해당 동작은 마지막 패널의 인덱스가 lastIndex와 일치할때까지 일어난다.</ko>\n   * @param {number} [options.infiniteThreshold=0] A Threshold from viewport edge before triggering `needPanel` event in infinite mode.<ko>무한 모드에서 `needPanel`이벤트가 발생하기 위한 뷰포트 끝으로부터의 최대 거리.</ko>\n   * @param {number} [options.lastIndex=Infinity] Maximum panel index that Flicking can set. Flicking won't trigger `needPanel` when the event's panel index is greater than it.<br/>Also, if the last panel's index reached a given index, you can't add more panels.<ko>Flicking이 설정 가능한 패널의 최대 인덱스. `needPanel` 이벤트에 지정된 인덱스가 최대 패널의 개수보다 같거나 커야 하는 경우에 이벤트를 트리거하지 않게 한다.<br>또한, 마지막 패널의 인덱스가 주어진 인덱스와 동일할 경우, 새로운 패널을 더 이상 추가할 수 없다.</ko>\n   * @param {number} [options.threshold=40] Movement threshold to change panel(unit: pixel). It should be dragged above the threshold to change the current panel.<ko>패널 변경을 위한 이동 임계값 (단위: 픽셀). 주어진 값 이상으로 스크롤해야만 패널 변경이 가능하다.</ko>\n   * @param {number} [options.duration=100] Duration of the panel movement animation. (unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n   * @param {function} [options.panelEffect=x => 1 - Math.pow(1 - x, 3)] An easing function applied to the panel movement animation. Default value is `easeOutCubic`.<ko>패널 이동 애니메이션에 적용할 easing함수. 기본값은 `easeOutCubic`이다.</ko>\n   * @param {number} [options.defaultIndex=0] Index of the panel to set as default when initializing. A zero-based integer.<ko>초기화시 지정할 디폴트 패널의 인덱스로, 0부터 시작하는 정수.</ko>\n   * @param {string[]} [options.inputType=[\""touch,\""mouse\""]] Types of input devices to enable.({@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption Reference})<ko>활성화할 입력 장치 종류. ({@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption 참고})</ko>\n   * @param {number} [options.thresholdAngle=45] The threshold angle value(0 ~ 90).<br>If the input angle from click/touched position is above or below this value in horizontal and vertical mode each, scrolling won't happen.<ko>스크롤 동작을 막기 위한 임계각(0 ~ 90).<br>클릭/터치한 지점으로부터 계산된 사용자 입력의 각도가 horizontal/vertical 모드에서 각각 크거나 작으면, 스크롤 동작이 이루어지지 않는다.</ko>\n   * @param {number|string|number[]|string[]} [options.bounce=[10,10]] The size value of the bounce area. Only can be enabled when `circular=false`.<br>You can set different bounce value for prev/next direction by using array.<br>`number` for px value, and `string` for px, and % value relative to viewport size.(ex - 0, \""10px\"", \""20%\"")<ko>바운스 영역의 크기값. `circular=false`인 경우에만 사용할 수 있다.<br>배열을 통해 prev/next 방향에 대해 서로 다른 바운스 값을 지정 가능하다.<br>`number`를 통해 px값을, `stirng`을 통해 px 혹은 뷰포트 크기 대비 %값을 사용할 수 있다.(ex - 0, \""10px\"", \""20%\"")</ko>\n   * @param {boolean} [options.autoResize=false] Whether the `resize` method should be called automatically after a window resize event.<ko>window의 `resize` 이벤트 이후 자동으로 resize()메소드를 호출할지의 여부.</ko>\n   * @param {boolean} [options.adaptive=false] Whether the height(horizontal)/width(vertical) of the viewport element reflects the height/width value of the panel after completing the movement.<ko>목적 패널로 이동한 후 그 패널의 높이(horizontal)/너비(vertical)값을 뷰포트 요소의 높이/너비값에 반영할지 여부.</ko>\n   * @param {number|\""\""} [options.zIndex=2000] z-index value for viewport element.<ko>뷰포트 엘리먼트의 z-index 값.</ko>\n   * @param {boolean} [options.bound=false] Prevent the view from going out of the first/last panel. Only can be enabled when `circular=false`.<ko>뷰가 첫번째와 마지막 패널 밖으로 나가는 것을 막아준다. `circular=false`인 경우에만 사용할 수 있다.</ko>\n   * @param {boolean} [options.overflow=false] Disables CSS property `overflow: hidden` in viewport if `true`.<ko>`true`로 설정시 뷰포트에 `overflow: hidden` 속성을 해제한다.</ko>\n   * @param {string} [options.hanger=\""50%\""] The reference position of the hanger in the viewport, which hangs panel anchors should be stopped at.<br>It should be provided in px or % value of viewport size.<br>You can combinate those values with plus/minus sign.<br>ex) \""50\"", \""100px\"", \""0%\"", \""25% + 100px\""<ko>뷰포트 내부의 행어의 위치. 패널의 앵커들이 뷰포트 내에서 멈추는 지점에 해당한다.<br>px값이나, 뷰포트의 크기 대비 %값을 사용할 수 있고, 이를 + 혹은 - 기호로 연계하여 사용할 수도 있다.<br>예) \""50\"", \""100px\"", \""0%\"", \""25% + 100px\""</ko>\n   * @param {string} [options.anchor=\""50%\""] The reference position of the anchor in panels, which can be hanged by viewport hanger.<br>It should be provided in px or % value of panel size.<br>You can combinate those values with plus/minus sign.<br>ex) \""50\"", \""100px\"", \""0%\"", \""25% + 100px\""<ko>패널 내부의 앵커의 위치. 뷰포트의 행어와 연계하여 패널이 화면 내에서 멈추는 지점을 설정할 수 있다.<br>px값이나, 패널의 크기 대비 %값을 사용할 수 있고, 이를 + 혹은 - 기호로 연계하여 사용할 수도 있다.<br>예) \""50\"", \""100px\"", \""0%\"", \""25% + 100px\""</ko>\n   * @param {number} [options.gap=0] Space value between panels. Should be given in number.(px)<ko>패널간에 부여할 간격의 크기를 나타내는 숫자.(px)</ko>\n   * @param {eg.Flicking.MoveTypeOption} [options.moveType=\""snap\""] Movement style by user input. (ex: snap, freeScroll)<ko>사용자 입력에 의한 이동 방식.(ex: snap, freeScroll)</ko>\n   * @param {boolean} [options.useOffset=false] Whether to use `offsetWidth`/`offsetHeight` instead of `getBoundingClientRect` for panel/viewport size calculation.<br/>You can use this option to calculate the original panel size when CSS transform is applied to viewport or panel.<br/>⚠️ If panel size is not fixed integer value, there can be a 1px gap between panels.<ko>패널과 뷰포트의 크기를 계산할 때 `offsetWidth`/`offsetHeight`를 `getBoundingClientRect` 대신 사용할지 여부.<br/>패널이나 뷰포트에 CSS transform이 설정되어 있을 때 원래 패널 크기를 계산하려면 옵션을 활성화한다.<br/>⚠️ 패널의 크기가 정수로 고정되어있지 않다면 패널 사이에 1px의 공간이 생길 수 있다.</ko>\n   * @param {boolean} [options.renderOnlyVisible] Whether all panels have a constant size that won't be changed after resize. Enabling this option can increase performance while recalculating panel size.<ko>모든 패널의 크기가 불변인지의 여부. 이 옵션을 'true'로 설정하면 패널 크기 재설정시에 성능을 높일 수 있다.</ko>\n   * @param {boolean|string[]} [options.isEqualSize] Whether to render visible panels only. This can dramatically increase performance when there're many panels.<ko>보이는 패널만 렌더링할지 여부를 설정한다. 패널이 많을 경우에 퍼포먼스를 크게 향상시킬 수 있다.</ko>\n   * @param {boolean} [options.isConstantSize] This option indicates whether all panels have the same size(true) of first panel, or it can hold a list of class names that determines panel size.<br/>Enabling this option can increase performance while recalculating panel size.<ko>모든 패널의 크기가 동일한지(true), 혹은 패널 크기를 결정하는 패널 클래스들의 리스트.<br/>이 옵션을 설정하면 패널 크기 재설정시에 성능을 높일 수 있다.</ko>\n   * @param {boolean} [options.renderExternal] Whether to use external rendering. It will delegate DOM manipulation and can synchronize the rendered state by calling `sync()` method. You can use this option to use in frameworks like React, Vue, Angular, which has its states and rendering methods.<ko>외부 렌더링을 사용할 지의 여부. 이 옵션을 사용시 렌더링을 외부에 위임할 수 있고, `sync()`를 호출하여 그 상태를 동기화할 수 있다. 이 옵션을 사용하여, React, Vue, Angular 등 자체적인 상태와 렌더링 방법을 갖는 프레임워크에 대응할 수 있다.</ko>\n   * @param {boolean} [options.collectStatistics=true] Whether to collect statistics on how you are using `Flicking`. These statistical data do not contain any personal information and are used only as a basis for the development of a user-friendly product.<ko>어떻게 `Flicking`을 사용하고 있는지에 대한 통계 수집 여부를 나타낸다. 이 통계자료는 개인정보를 포함하고 있지 않으며 오직 사용자 친화적인 제품으로 발전시키기 위한 근거자료로서 활용한다.</ko>\n   */\n  constructor(\n    element: string | HTMLElement,\n    options: Partial<FlickingOptions> = {},\n  ) {\n    super();\n\n    // Set flicking wrapper user provided\n    let wrapper: HTMLElement | null;\n    if (isString(element)) {\n      wrapper = document.querySelector(element);\n      if (!wrapper) {\n        throw new Error(\""Base element doesn't exist.\"");\n      }\n    } else if (element.nodeName && element.nodeType === 1) {\n      wrapper = element;\n    } else {\n      throw new Error(\""Element should be provided in string or HTMLElement.\"");\n    }\n\n    this.wrapper = wrapper;\n    // Override default options\n    this.options = merge({}, DEFAULT_OPTIONS, options) as FlickingOptions;\n    // Override moveType option\n    const currentOptions = this.options;\n    const moveType = currentOptions.moveType;\n\n    if (moveType in DEFAULT_MOVE_TYPE_OPTIONS) {\n      currentOptions.moveType = DEFAULT_MOVE_TYPE_OPTIONS[moveType as keyof typeof DEFAULT_MOVE_TYPE_OPTIONS];\n    }\n\n    // Make viewport instance with panel container element\n    this.viewport = new Viewport(this, this.options, this.triggerEvent);\n    this.listenInput();\n    this.listenResize();\n\n    if (this.options.collectStatistics) {\n      sendEvent(\""usage\"", \""options\"", options);\n    }\n  }\n\n  /**\n   * Move to the previous panel if it exists.\n   * @ko 이전 패널이 존재시 해당 패널로 이동한다.\n   * @param [duration=options.duration] Duration of the panel movement animation.(unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public prev(duration?: number): this {\n    const currentPanel = this.getCurrentPanel();\n    const currentState = this.viewport.stateMachine.getState();\n\n    if (currentPanel && currentState.type === STATE_TYPE.IDLE) {\n      const prevPanel = currentPanel.prev();\n      if (prevPanel) {\n        prevPanel.focus(duration);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Move to the next panel if it exists.\n   * @ko 다음 패널이 존재시 해당 패널로 이동한다.\n   * @param [duration=options.duration] Duration of the panel movement animation(unit: ms).<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public next(duration?: number): this {\n    const currentPanel = this.getCurrentPanel();\n    const currentState = this.viewport.stateMachine.getState();\n\n    if (currentPanel && currentState.type === STATE_TYPE.IDLE) {\n      const nextPanel = currentPanel.next();\n      if (nextPanel) {\n        nextPanel.focus(duration);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Move to the panel of given index.\n   * @ko 주어진 인덱스에 해당하는 패널로 이동한다.\n   * @param index The index number of the panel to move.<ko>이동할 패널의 인덱스 번호.</ko>\n   * @param duration [duration=options.duration] Duration of the panel movement.(unit: ms)<ko>패널 이동 애니메이션 진행 시간.(단위: ms)</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public moveTo(index: number, duration?: number): this {\n    const viewport = this.viewport;\n    const panel = viewport.panelManager.get(index);\n    const state = viewport.stateMachine.getState();\n\n    if (!panel || state.type !== STATE_TYPE.IDLE) {\n      return this;\n    }\n\n    const anchorPosition = panel.getAnchorPosition();\n    const hangerPosition = viewport.getHangerPosition();\n\n    let targetPanel = panel;\n    if (this.options.circular) {\n      const scrollAreaSize = viewport.getScrollAreaSize();\n      // Check all three possible locations, find the nearest position among them.\n      const possiblePositions = [\n        anchorPosition - scrollAreaSize,\n        anchorPosition,\n        anchorPosition + scrollAreaSize,\n      ];\n      const nearestPosition = possiblePositions.reduce((nearest, current) => {\n        return (Math.abs(current - hangerPosition) < Math.abs(nearest - hangerPosition))\n          ? current\n          : nearest;\n      }, Infinity) - panel.getRelativeAnchorPosition();\n\n      const identicals = panel.getIdenticalPanels();\n      const offset = nearestPosition - anchorPosition;\n      if (offset > 0) {\n        // First cloned panel is nearest\n        targetPanel = identicals[1];\n      } else if (offset < 0) {\n        // Last cloned panel is nearest\n        targetPanel = identicals[identicals.length - 1];\n      }\n\n      targetPanel = targetPanel.clone(targetPanel.getCloneIndex(), true);\n      targetPanel.setPosition(nearestPosition);\n    }\n    const currentIndex = this.getIndex();\n\n    if (hangerPosition === targetPanel.getAnchorPosition() && currentIndex === index) {\n      return this;\n    }\n\n    const eventType = panel.getIndex() === viewport.getCurrentIndex()\n      ? \""\""\n      : EVENTS.CHANGE;\n\n    viewport.moveTo(\n      targetPanel,\n      viewport.findEstimatedPosition(targetPanel),\n      eventType,\n      null,\n      duration,\n    );\n    return this;\n  }\n\n  /**\n   * Return index of the current panel. `-1` if no panel exists.\n   * @ko 현재 패널의 인덱스 번호를 반환한다. 패널이 하나도 없을 경우 `-1`을 반환한다.\n   * @return Current panel's index, zero-based integer.<ko>현재 패널의 인덱스 번호. 0부터 시작하는 정수.</ko>\n   */\n  public getIndex(): number {\n    return this.viewport.getCurrentIndex();\n  }\n\n  /**\n   * Return the wrapper element user provided in constructor.\n   * @ko 사용자가 생성자에서 제공한 래퍼 엘리먼트를 반환한다.\n   * @return Wrapper element user provided.<ko>사용자가 제공한 래퍼 엘리먼트.</ko>\n   */\n  public getElement(): HTMLElement {\n    return this.wrapper;\n  }\n\n  /**\n   * Return current panel. `null` if no panel exists.\n   * @ko 현재 패널을 반환한다. 패널이 하나도 없을 경우 `null`을 반환한다.\n   * @return Current panel.<ko>현재 패널.</ko>\n   */\n  public getCurrentPanel(): FlickingPanel | null {\n    const viewport = this.viewport;\n    const panel = viewport.getCurrentPanel();\n    return panel\n      ? panel\n      : null;\n  }\n\n  /**\n   * Return the panel of given index. `null` if it doesn't exists.\n   * @ko 주어진 인덱스에 해당하는 패널을 반환한다. 해당 패널이 존재하지 않을 시 `null`이다.\n   * @return Panel of given index.<ko>주어진 인덱스에 해당하는 패널.</ko>\n   */\n  public getPanel(index: number): FlickingPanel | null {\n    const viewport = this.viewport;\n    const panel = viewport.panelManager.get(index);\n    return panel\n      ? panel\n      : null;\n  }\n\n  /**\n   * Return all panels.\n   * @ko 모든 패널들을 반환한다.\n   * @param - Should include cloned panels or not.<ko>복사된 패널들을 포함할지의 여부.</ko>\n   * @return All panels.<ko>모든 패널들.</ko>\n   */\n  public getAllPanels(includeClone?: boolean): FlickingPanel[] {\n    const viewport = this.viewport;\n    const panelManager = viewport.panelManager;\n    const panels = includeClone\n      ? panelManager.allPanels()\n      : panelManager.originalPanels();\n\n    return panels\n      .filter(panel => !!panel);\n  }\n\n  /**\n   * Return the panels currently shown in viewport area.\n   * @ko 현재 뷰포트 영역에서 보여지고 있는 패널들을 반환한다.\n   * @return Panels currently shown in viewport area.<ko>현재 뷰포트 영역에 보여지는 패널들</ko>\n   */\n  public getVisiblePanels(): FlickingPanel[] {\n    return this.viewport.calcVisiblePanels();\n  }\n\n  /**\n   * Return length of original panels.\n   * @ko 원본 패널의 개수를 반환한다.\n   * @return Length of original panels.<ko>원본 패널의 개수</ko>\n   */\n  public getPanelCount(): number {\n    return this.viewport.panelManager.getPanelCount();\n  }\n\n  /**\n   * Return how many groups of clones are created.\n   * @ko 몇 개의 클론 그룹이 생성되었는지를 반환한다.\n   * @return Length of cloned panel groups.<ko>클론된 패널 그룹의 개수</ko>\n   */\n  public getCloneCount(): number {\n    return this.viewport.panelManager.getCloneCount();\n  }\n\n  /**\n   * Get maximum panel index for `infinite` mode.\n   * @ko `infinite` 모드에서 적용되는 추가 가능한 패널의 최대 인덱스 값을 반환한다.\n   * @see {@link eg.Flicking.FlickingOptions}\n   * @return Maximum index of panel that can be added.<ko>최대 추가 가능한 패널의 인덱스.</ko>\n   */\n  public getLastIndex(): number {\n    return this.viewport.panelManager.getLastIndex();\n  }\n\n  /**\n   * Set maximum panel index for `infinite' mode.<br>[needPanel]{@link eg.Flicking#events:needPanel} won't be triggered anymore when last panel's index reaches it.<br>Also, you can't add more panels after it.\n   * @ko `infinite` 모드에서 적용되는 패널의 최대 인덱스를 설정한다.<br>마지막 패널의 인덱스가 설정한 값에 도달할 경우 더 이상 [needPanel]{@link eg.Flicking#events:needPanel} 이벤트가 발생되지 않는다.<br>또한, 설정한 인덱스 이후로 새로운 패널을 추가할 수 없다.\n   * @param - Maximum panel index.\n   * @see {@link eg.Flicking.FlickingOptions}\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public setLastIndex(index: number): this {\n    this.viewport.setLastIndex(index);\n\n    return this;\n  }\n\n  /**\n   * Return panel movement animation.\n   * @ko 현재 패널 이동 애니메이션이 진행 중인지를 반환한다.\n   * @return Is animating or not.<ko>애니메이션 진행 여부.</ko>\n   */\n  public isPlaying(): boolean {\n    return this.viewport.stateMachine.getState().playing;\n  }\n\n  /**\n   * Unblock input devices.\n   * @ko 막았던 입력 장치로부터의 입력을 푼다.\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public enableInput(): this {\n    this.viewport.enable();\n\n    return this;\n  }\n\n  /**\n   * Block input devices.\n   * @ko 입력 장치로부터의 입력을 막는다.\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public disableInput(): this {\n    this.viewport.disable();\n\n    return this;\n  }\n\n  /**\n   * Get current flicking status. You can restore current state by giving returned value to [setStatus()]{@link eg.Flicking#setStatus}.\n   * @ko 현재 상태 값을 반환한다. 반환받은 값을 [setStatus()]{@link eg.Flicking#setStatus} 메소드의 인자로 지정하면 현재 상태를 복원할 수 있다.\n   * @return An object with current status value information.<ko>현재 상태값 정보를 가진 객체.</ko>\n   */\n  public getStatus(): FlickingStatus {\n    const viewport = this.viewport;\n\n    const panels = viewport.panelManager.originalPanels()\n      .filter(panel => !!panel)\n      .map(panel => {\n        return {\n          html: panel.getElement().outerHTML,\n          index: panel.getIndex(),\n        };\n      });\n\n    return {\n      index: viewport.getCurrentIndex(),\n      panels,\n      position: viewport.getCameraPosition(),\n    };\n  }\n\n  /**\n   * Restore to the state of the `status`.\n   * @ko `status`의 상태로 복원한다.\n   * @param status Status value to be restored. You can specify the return value of the [getStatus()]{@link eg.Flicking#getStatus} method.<ko>복원할 상태 값. [getStatus()]{@link eg.Flicking#getStatus}메서드의 반환값을 지정하면 된다.</ko>\n   */\n  public setStatus(status: FlickingStatus): void {\n    this.viewport.restore(status);\n  }\n\n  /**\n   * Add plugins that can have different effects on Flicking.\n   * @ko 플리킹에 다양한 효과를 부여할 수 있는 플러그인을 추가한다.\n   * @param - The plugin(s) to add.<ko>추가할 플러그인(들).</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public addPlugins(plugins: Plugin | Plugin[]) {\n    this.viewport.addPlugins(plugins);\n    return this;\n  }\n\n  /**\n   * Remove plugins from Flicking.\n   * @ko 플리킹으로부터 플러그인들을 제거한다.\n   * @param - The plugin(s) to remove.<ko>제거 플러그인(들).</ko>\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public removePlugins(plugins: Plugin | Plugin[]) {\n    this.viewport.removePlugins(plugins);\n    return this;\n  }\n\n  /**\n   * Return the reference element and all its children to the state they were in before the instance was created. Remove all attached event handlers. Specify `null` for all attributes of the instance (including inherited attributes).\n   * @ko 기준 요소와 그 하위 패널들을 인스턴스 생성전의 상태로 되돌린다. 부착된 모든 이벤트 핸들러를 탈거한다. 인스턴스의 모든 속성(상속받은 속성포함)에 `null`을 지정한다.\n   * @example\n   * const flick = new eg.Flicking(\""#flick\"");\n   * flick.destroy();\n   * console.log(flick.moveTo); // null\n   */\n  public destroy(option: Partial<DestroyOption> = {}): void {\n    this.off();\n\n    if (this.options.autoResize) {\n      window.removeEventListener(\""resize\"", this.resize);\n    }\n\n    this.viewport.destroy(option);\n\n    // release resources\n    for (const x in this) {\n      (this as any)[x] = null;\n    }\n  }\n\n  /**\n   * Update panels to current state.\n   * @ko 패널들을 현재 상태에 맞춰 갱신한다.\n   * @method\n   * @return {eg.Flicking} The instance itself.<ko>인스턴스 자기 자신.</ko>\n   */\n  public resize = (): this => {\n    const viewport = this.viewport;\n    const options = this.options;\n\n    const allPanels = viewport.panelManager.allPanels();\n    if (!options.isConstantSize) {\n      allPanels.forEach(panel => panel.unCacheBbox());\n    }\n\n    const shouldResetElements = options.renderOnlyVisible\n      && !options.isConstantSize\n      && options.isEqualSize !== true;\n\n    viewport.unCacheBbox();\n    // This should be done before adding panels, to lower performance issue\n    viewport.updateBbox();\n\n    if (shouldResetElements) {\n      viewport.appendUncachedPanelElements(allPanels as Panel[]);\n    }\n\n    viewport.resize();\n\n    return this;\n  }\n\n  /**\n   * Add new panels at the beginning of panels.\n   * @ko 제일 앞에 새로운 패널을 추가한다.\n   * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n   * @return Array of appended panels.<ko>추가된 패널들의 배열</ko>\n   * @example\n   * // Suppose there were no panels at initialization\n   * const flicking = new eg.Flicking(\""#flick\"");\n   * flicking.replace(3, document.createElement(\""div\"")); // Add new panel at index 3\n   * flicking.prepend(\""\\<div\\>Panel\\</div\\>\""); // Prepended at index 2\n   * flicking.prepend([\""\\<div\\>Panel\\</div\\>\"", document.createElement(\""div\"")]); // Prepended at index 0, 1\n   * flicking.prepend(\""\\<div\\>Panel\\</div\\>\""); // Prepended at index 0, pushing every panels behind it.\n   */\n  public prepend(element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const viewport = this.viewport;\n    const parsedElements = parseElement(element);\n\n    const insertingIndex = Math.max(viewport.panelManager.getRange().min - parsedElements.length, 0);\n    return viewport.insert(insertingIndex, parsedElements);\n  }\n\n  /**\n   * Add new panels at the end of panels.\n   * @ko 제일 끝에 새로운 패널을 추가한다.\n   * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n   * @return Array of appended panels.<ko>추가된 패널들의 배열</ko>\n   * @example\n   * // Suppose there were no panels at initialization\n   * const flicking = new eg.Flicking(\""#flick\"");\n   * flicking.append(document.createElement(\""div\"")); // Appended at index 0\n   * flicking.append(\""\\<div\\>Panel\\</div\\>\""); // Appended at index 1\n   * flicking.append([\""\\<div\\>Panel\\</div\\>\"", document.createElement(\""div\"")]); // Appended at index 2, 3\n   * // Even this is possible\n   * flicking.append(\""\\<div\\>Panel 1\\</div\\>\\<div\\>Panel 2\\</div\\>\""); // Appended at index 4, 5\n   */\n  public append(element: ElementLike | ElementLike[]): FlickingPanel[] {\n    const viewport = this.viewport;\n\n    return viewport.insert(viewport.panelManager.getRange().max + 1, element);\n  }\n\n  /**\n   * Replace existing panels with new panels from given index. If target index is empty, add new panel at target index.\n   * @ko 주어진 인덱스로부터의 패널들을 새로운 패널들로 교체한다. 인덱스에 해당하는 자리가 비어있다면, 새로운 패널을 해당 자리에 집어넣는다.\n   * @param index - Start index to replace new panels.<ko>새로운 패널들로 교체할 시작 인덱스</ko>\n   * @param element - Either HTMLElement, HTML string, or array of them.<br>It can be also HTML string of multiple elements with same depth.<ko>HTMLElement 혹은 HTML 문자열, 혹은 그것들의 배열도 가능하다.<br>또한, 같은 depth의 여러 개의 엘리먼트에 해당하는 HTML 문자열도 가능하다.</ko>\n   * @return Array of created panels by replace.<ko>교체되어 새롭게 추가된 패널들의 배열</ko>\n   * @example\n   * // Suppose there were no panels at initialization\n   * const flicking = new eg.Flicking(\""#flick\"");\n   *\n   * // This will add new panel at index 3,\n   * // Index 0, 1, 2 is empty at this moment.\n   * // [empty, empty, empty, PANEL]\n   * flicking.replace(3, document.createElement(\""div\""));\n   *\n   * // As index 2 was empty, this will also add new panel at index 2.\n   * // [empty, empty, PANEL, PANEL]\n   * flicking.replace(2, \""\\<div\\>Panel\\</div\\>\"");\n   *\n   * // Index 3 was not empty, so it will replace previous one.\n   * // It will also add new panels at index 4 and 5.\n   * // before - [empty, empty, PANEL, PANEL]\n   * // after - [empty, empty, PANEL, NEW_PANEL, NEW_PANEL, NEW_PANEL]\n   * flicking.replace(3, [\""\\<div\\>Panel\\</div\\>\"", \""\\<div\\>Panel\\</div\\>\"", \""\\<div\\>Panel\\</div\\>\""])\n   */\n  public replace(index: number, element: ElementLike | ElementLike[]): FlickingPanel[] {\n    return this.viewport.replace(index, element);\n  }\n\n  /**\n   * Remove panel at target index. This will decrease index of panels behind it.\n   * @ko `index`에 해당하는 자리의 패널을 제거한다. 수행시 `index` 이후의 패널들의 인덱스가 감소된다.\n   * @param index - Index of panel to remove.<ko>제거할 패널의 인덱스</ko>\n   * @param {number} [deleteCount=1] - Number of panels to remove from index.<ko>`index` 이후로 제거할 패널의 개수.</ko>\n   * @return Array of removed panels<ko>제거된 패널들의 배열</ko>\n   */\n  public remove(index: number, deleteCount: number = 1): FlickingPanel[] {\n    return this.viewport.remove(index, deleteCount);\n  }\n\n  /**\n   * Get indexes to render. Should be used with `renderOnlyVisible` option.\n   * @private\n   * @ko 렌더링이 필요한 인덱스들을 반환한다. `renderOnlyVisible` 옵션과 함께 사용해야 한다.\n   * @param - Info object of how panel infos are changed.<ko>패널 정보들의 변경 정보를 담는 오브젝트.</ko>\n   * @return Array of indexes to render.<ko>렌더링할 인덱스의 배열</ko>\n   */\n  public getRenderingIndexes(diffResult: DiffResult<any>): number[] {\n    const viewport = this.viewport;\n    const { min, max } = viewport.getVisibleIndex();\n    const maintained = diffResult.maintained.reduce((values: {[key: number]: number}, [before, after]) => {\n      values[before] = after;\n      return values;\n    }, {});\n\n    const prevPanelCount = diffResult.prevList.length;\n    const panelCount = diffResult.list.length;\n    const added = diffResult.added;\n    const list = counter(prevPanelCount * (this.getCloneCount() + 1));\n\n    let visibles = min >= 0\n      ? list.slice(min, max + 1)\n      : list.slice(0, max + 1).concat(list.slice(min));\n    visibles = visibles\n      .filter(val => maintained[val % prevPanelCount] != null)\n      .map(val => {\n        const cloneIndex = Math.floor(val / prevPanelCount);\n        const changedIndex = maintained[val % prevPanelCount];\n\n        return changedIndex + panelCount * cloneIndex;\n      });\n\n    const renderingPanels = [...visibles, ...added];\n    const allPanels = viewport.panelManager.allPanels();\n\n    viewport.setVisiblePanels(renderingPanels.map(index => allPanels[index]));\n\n    return renderingPanels;\n  }\n\n  /**\n   * Synchronize info of panels instance with info given by external rendering.\n   * @ko 외부 렌더링 방식에 의해 입력받은 패널의 정보와 현재 플리킹이 갖는 패널 정보를 동기화한다.\n   * @private\n   * @param - Info object of how panel infos are changed.<ko>패널 정보들의 변경 정보를 담는 오브젝트.</ko>\n   * @param - Whether called from sync method <ko> sync 메소드로부터 호출됐는지 여부 </ko>\n   */\n  public beforeSync(diffInfo: BeforeSyncResult) {\n    const { maintained, added, changed, removed } = diffInfo;\n    const viewport = this.viewport;\n    const panelManager = viewport.panelManager;\n    const isCircular = this.options.circular;\n    const cloneCount = panelManager.getCloneCount();\n    const prevClonedPanels = panelManager.clonedPanels();\n\n    // Update visible panels\n    const newVisiblePanels = viewport.getVisiblePanels()\n      .filter(panel => findIndex(removed, index => {\n        return index === panel.getIndex();\n      }) < 0);\n    viewport.setVisiblePanels(newVisiblePanels);\n\n    // Did not changed at all\n    if (\n      added.length <= 0\n      && removed.length <= 0\n      && changed.length <= 0\n      && cloneCount === prevClonedPanels.length\n    ) {\n      return this;\n    }\n    const prevOriginalPanels = panelManager.originalPanels();\n    const newPanels: Panel[] = [];\n    const newClones: Panel[][] = counter(cloneCount).map(() => []);\n\n    maintained.forEach(([beforeIdx, afterIdx]) => {\n      newPanels[afterIdx] = prevOriginalPanels[beforeIdx];\n      newPanels[afterIdx].setIndex(afterIdx);\n    });\n\n    added.forEach(addIndex => {\n      newPanels[addIndex] = new Panel(null, addIndex, this.viewport);\n    });\n\n    if (isCircular) {\n      counter(cloneCount).forEach(groupIndex => {\n        const prevCloneGroup = prevClonedPanels[groupIndex];\n        const newCloneGroup = newClones[groupIndex];\n\n        maintained.forEach(([beforeIdx, afterIdx]) => {\n          newCloneGroup[afterIdx] = prevCloneGroup\n            ? prevCloneGroup[beforeIdx]\n            : newPanels[afterIdx].clone(groupIndex, false);\n\n          newCloneGroup[afterIdx].setIndex(afterIdx);\n        });\n\n        added.forEach(addIndex => {\n          const newPanel = newPanels[addIndex];\n\n          newCloneGroup[addIndex] = newPanel.clone(groupIndex, false);\n        });\n      });\n    }\n\n    added.forEach(index => { viewport.updateCheckedIndexes({ min: index, max: index }); });\n    removed.forEach(index => { viewport.updateCheckedIndexes({ min: index - 1, max: index + 1 }); });\n\n    const checkedIndexes = viewport.getCheckedIndexes();\n    checkedIndexes.forEach(([min, max], idx) => {\n      // Push checked indexes backward\n      const pushedIndex = added.filter(index => index < min && panelManager.has(index)).length\n        - removed.filter(index => index < min).length;\n      checkedIndexes.splice(idx, 1, [min + pushedIndex, max + pushedIndex]);\n    });\n\n    // Only effective only when there are least one panel which have changed its index\n    if (changed.length > 0) {\n      // Removed checked index by changed ones after pushing\n      maintained.forEach(([, next]) => { viewport.updateCheckedIndexes({ min: next, max: next }); });\n    }\n    panelManager.replacePanels(newPanels, newClones);\n    this.isPanelChangedAtBeforeSync = true;\n  }\n\n  /**\n   * Synchronize info of panels with DOM info given by external rendering.\n   * @ko 외부 렌더링 방식에 의해 입력받은 DOM의 정보와 현재 플리킹이 갖는 패널 정보를 동기화 한다.\n   * @private\n   * @param - Info object of how panel elements are changed.<ko>패널의 DOM 요소들의 변경 정보를 담는 오브젝트.</ko>\n   */\n  public sync(diffInfo: SyncResult): this {\n    const { list, maintained, added, changed, removed } = diffInfo;\n\n    // Did not changed at all\n    if (added.length <= 0 && removed.length <= 0 && changed.length <= 0) {\n      return this;\n    }\n    const viewport = this.viewport;\n    const { renderOnlyVisible, circular } = this.options;\n    const panelManager = viewport.panelManager;\n\n    if (!renderOnlyVisible) {\n      const indexRange = panelManager.getRange();\n      let beforeDiffInfo: BeforeSyncResult = diffInfo;\n\n      if (circular) {\n        const prevOriginalPanelCount = indexRange.max;\n        const originalPanelCount = (list.length / (panelManager.getCloneCount() + 1)) >> 0;\n        const originalAdded = added.filter(index => index < originalPanelCount);\n        const originalRemoved = removed.filter(index => index <= prevOriginalPanelCount);\n        const originalMaintained = maintained.filter(([beforeIdx]) => beforeIdx <= prevOriginalPanelCount);\n        const originalChanged = changed.filter(([beforeIdx]) => beforeIdx <= prevOriginalPanelCount);\n\n        beforeDiffInfo = {\n          added: originalAdded,\n          maintained: originalMaintained,\n          removed: originalRemoved,\n          changed: originalChanged,\n        };\n      }\n      this.beforeSync(beforeDiffInfo);\n    }\n\n    const visiblePanels = renderOnlyVisible\n      ? viewport.getVisiblePanels()\n      : this.getAllPanels(true);\n\n    added.forEach(addedIndex => {\n      const addedElement = list[addedIndex];\n      const beforePanel = visiblePanels[addedIndex] as Panel;\n\n      beforePanel.setElement(addedElement);\n      // As it can be 0\n      beforePanel.unCacheBbox();\n    });\n    if (this.isPanelChangedAtBeforeSync) {\n      viewport.resetVisibleIndex();\n      this.isPanelChangedAtBeforeSync = false;\n    }\n    viewport.resize();\n\n    return this;\n  }\n\n  private listenInput(): void {\n    const flicking = this;\n    const viewport = flicking.viewport;\n    const stateMachine = viewport.stateMachine;\n\n    // Set event context\n    flicking.eventContext = {\n      flicking,\n      viewport: flicking.viewport,\n      transitTo: stateMachine.transitTo,\n      triggerEvent: flicking.triggerEvent,\n      moveCamera: flicking.moveCamera,\n      stopCamera: viewport.stopCamera,\n    };\n\n    const handlers = {};\n    for (const key in AXES_EVENTS) {\n      const eventType = AXES_EVENTS[key];\n\n      handlers[eventType] = (e: any) => stateMachine.fire(eventType, e, flicking.eventContext);\n    }\n\n    // Connect Axes instance with PanInput\n    flicking.viewport.connectAxesHandler(handlers);\n  }\n\n  private listenResize(): void {\n    if (this.options.autoResize) {\n      window.addEventListener(\""resize\"", this.resize);\n    }\n  }\n\n  private triggerEvent = <T extends FlickingEvent>(\n    eventName: string,\n    axesEvent: any,\n    isTrusted: boolean,\n    params: Partial<T> = {},\n  ): TriggerCallback => {\n    const viewport = this.viewport;\n\n    let canceled: boolean = true;\n\n    // Ignore events before viewport is initialized\n    if (viewport) {\n      const state = viewport.stateMachine.getState();\n      const { prev, next } = viewport.getScrollArea();\n      const pos = viewport.getCameraPosition();\n      let progress = getProgress(pos, [prev, prev, next]);\n\n      if (this.options.circular) {\n        progress %= 1;\n      }\n      canceled = !super.trigger(eventName, merge({\n        type: eventName,\n        index: this.getIndex(),\n        panel: this.getCurrentPanel(),\n        direction: state.direction,\n        holding: state.holding,\n        progress,\n        axesEvent,\n        isTrusted,\n      }, params));\n    }\n\n    return {\n      onSuccess(callback: () => void): TriggerCallback {\n        if (!canceled) {\n          callback();\n        }\n        return this;\n      },\n      onStopped(callback: () => void): TriggerCallback {\n        if (canceled) {\n          callback();\n        }\n        return this;\n      },\n    } as TriggerCallback;\n  }\n\n  // Return result of \""move\"" event triggered\n  private moveCamera = (axesEvent: any): TriggerCallback => {\n    const viewport = this.viewport;\n    const state = viewport.stateMachine.getState();\n    const options = this.options;\n\n    const pos = axesEvent.pos.flick;\n    const previousPosition = viewport.getCameraPosition();\n\n    if (axesEvent.isTrusted && state.holding) {\n      const inputOffset = options.horizontal\n        ? axesEvent.inputEvent.offsetX\n        : axesEvent.inputEvent.offsetY;\n\n      const isNextDirection = inputOffset < 0;\n\n      let cameraChange = pos - previousPosition;\n      const looped = isNextDirection === (pos < previousPosition);\n      if (options.circular && looped) {\n        // Reached at max/min range of axes\n        const scrollAreaSize = viewport.getScrollAreaSize();\n        cameraChange = (cameraChange > 0 ? -1 : 1) * (scrollAreaSize - Math.abs(cameraChange));\n      }\n\n      const currentDirection = cameraChange === 0\n        ? state.direction\n        : cameraChange > 0\n          ? DIRECTION.NEXT\n          : DIRECTION.PREV;\n\n      state.direction = currentDirection;\n    }\n    state.delta += axesEvent.delta.flick;\n\n    viewport.moveCamera(pos, axesEvent);\n    return this.triggerEvent(EVENTS.MOVE, axesEvent, axesEvent.isTrusted)\n      .onStopped(() => {\n        // Undo camera movement\n        viewport.moveCamera(previousPosition, axesEvent);\n      });\n  }\n}\n\nexport default Flicking;\n"",""import Flicking from \""./Flicking\"";\nimport { withFlickingMethods } from \""./utils\"";\nimport { DEFAULT_OPTIONS, MOVE_TYPE } from \""./consts\"";\n\n(Flicking as any).withFlickingMethods = withFlickingMethods;\n(Flicking as any).DEFAULT_OPTIONS = DEFAULT_OPTIONS;\n(Flicking as any).MOVE_TYPE = MOVE_TYPE;\nexport default Flicking;\n""],""names"":[""MOVE_TYPE"",""SNAP"",""FREE_SCROLL"",""DEFAULT_MOVE_TYPE_OPTIONS"",""snap"",""type"",""count"",""freeScroll"",""isBrowser"",""document"",""DEFAULT_OPTIONS"",""classPrefix"",""deceleration"",""horizontal"",""circular"",""infinite"",""infiniteThreshold"",""lastIndex"",""Infinity"",""threshold"",""duration"",""panelEffect"",""x"",""Math"",""pow"",""defaultIndex"",""inputType"",""thresholdAngle"",""bounce"",""autoResize"",""adaptive"",""zIndex"",""bound"",""overflow"",""hanger"",""anchor"",""gap"",""moveType"",""useOffset"",""isEqualSize"",""isConstantSize"",""renderOnlyVisible"",""renderExternal"",""collectStatistics"",""DEFAULT_VIEWPORT_CSS"",""position"",""DEFAULT_CAMERA_CSS"",""width"",""height"",""willChange"",""DEFAULT_PANEL_CSS"",""EVENTS"",""HOLD_START"",""HOLD_END"",""MOVE_START"",""MOVE"",""MOVE_END"",""CHANGE"",""RESTORE"",""SELECT"",""NEED_PANEL"",""VISIBLE_CHANGE"",""AXES_EVENTS"",""HOLD"",""RELEASE"",""ANIMATION_END"",""FINISH"",""STATE_TYPE"",""DIRECTION"",""PREV"",""NEXT"",""FLICKING_METHODS"",""prev"",""next"",""moveTo"",""getIndex"",""getAllPanels"",""getCurrentPanel"",""getElement"",""getPanel"",""getPanelCount"",""getStatus"",""getVisiblePanels"",""setLastIndex"",""enableInput"",""disableInput"",""destroy"",""resize"",""setStatus"",""addPlugins"",""removePlugins"",""isPlaying"",""getLastIndex"",""checkTranslateSupport"",""transforms"",""webkitTransform"",""msTransform"",""MozTransform"",""OTransform"",""transform"",""name"",""has3d"",""supportedStyle"",""documentElement"",""style"",""transformName"",""prefixedTransform"",""Error"",""el"",""createElement"",""insertBefore"",""styleVal"",""window"",""getComputedStyle"",""getPropertyValue"",""parentElement"",""removeChild"",""transformInfo"",""length"",""TRANSFORM"",""target"",""_i"",""srcs"",""forEach"",""source"",""Object"",""keys"",""key"",""value"",""element"",""Array"",""isArray"",""elements"",""isString"",""tempDiv"",""innerHTML"",""push"",""toArray"",""children"",""firstChild"",""className"",""classList"",""contains"",""split"",""indexOf"",""cssObj"",""property"",""val"",""min"",""max"",""iterable"",""slice"",""call"",""cssValue"",""base"",""defaultVal"",""defaultValue"",""cssRegex"",""clamp"",""idx"",""calculatedValue"",""matchResult"",""exec"",""sign"",""unit"",""parsedValue"",""parseFloat"",""pos"",""range"",""center"",""callback"",""i"",""counterArray"",""indexed"",""size"",""originalStyle"",""setAttribute"",""removeAttribute"",""bbox"",""y"",""offsetWidth"",""offsetHeight"",""clientRect"",""getBoundingClientRect"",""left"",""top"",""index"",""viewport"",""prevSibling"",""nextSibling"",""clonedPanels"",""state"",""relativeAnchorPosition"",""isClone"",""isVirtual"",""cloneIndex"",""cachedBbox"",""setElement"",""givenBbox"",""this"",""options"",""getBbox"",""prevSize"",""parseArithmeticExpression"",""panel"",""cloneState"",""panelCount"",""panelManager"",""scrollAreaSize"",""getScrollAreaSize"",""floor"",""getPosition"",""getCurrentProgress"",""outsetRange"",""getSize"",""getRelativeHangerPosition"",""getRelativeAnchorPosition"",""getProgress"",""getCameraPosition"",""panelSize"",""relativePanelPosition"",""rightRelativePanelPosition"",""visibleSize"",""currentPanel"",""getHangerPosition"",""getAnchorPosition"",""eventType"",""findEstimatedPosition"",""updateFunction"",""shouldResize"",""identicalPanels"",""getIdenticalPanels"",""eachPanel"",""unCacheBbox"",""addVisiblePanel"",""currentIndex"",""currentPosition"",""prevPanelIndex"",""prevPanelPosition"",""prevPanelSize"",""hasEmptyPanelBetween"",""notYetMinPanel"",""newPosition"",""prevPanel"",""clone"",""getCloneIndex"",""setPosition"",""nextPanelIndex"",""nextPanelPosition"",""notYetMaxPanel"",""nextPanel"",""parsedElements"",""parseElement"",""firstPanel"",""targetIndex"",""insert"",""remove"",""option"",""preserveUI"",""restoreStyle"",""wasVisible"",""Boolean"",""parentNode"",""cameraElement"",""getCameraElement"",""appendChild"",""classes"",""classes_1"",""hasClass"",""original"",""getClonedPanels"",""offset"",""elementStyle"",""currentElementStyle"",""styleToApply"",""cloneElement"",""cloneNode"",""clonedPanel"",""Panel"",""clonedState"",""removeClonedPanelsAfter"",""start"",""removingPanels"",""splice"",""removeElement"",""currentElement"",""getAttribute"",""add"",""replace"",""applyCSS"",""panels"",""clones"",""cloneCount"",""reduce"",""allClones"",""newPanels"",""newClones"",""findIndex"",""filter"",""lastPanel"",""possibleLastPanel"",""shouldRender"",""isCircular"",""findFirstPanelFrom"",""siblingElement"",""insertNewPanels"",""pushedIndex"",""panelsAfterIndex"",""emptyPanelCount"",""removedPanels"",""newLastIndex"",""concat"",""reverse"",""setIndex"",""updateIndex"",""addNewClones"",""panelCount_1"",""cloneSet"",""replacedPanels"",""wasNonEmptyCount"",""deleteCount"",""deletedPanels"",""nonEmptyIndexFromLast"",""allPanels"",""allPanelsCount"",""insertTarget_1"",""newClones_1"",""allPanels_1"",""_a"",""originalPanels"",""getCloneCount"",""lastPanelClones"",""nextSiblingClones"",""cloneNextSibling"",""lastPanelSibling"",""cloneSiblingElement"",""nextElementSibling"",""map"",""_this"",""this_1"",""insertClones"",""counter"",""insertingIndex"",""fragment_1"",""createDocumentFragment"",""prevState"",""delta"",""direction"",""targetPanel"",""lastPosition"",""nextState"",""e"",""context"",""tslib_1"",""flicking"",""triggerEvent"",""transitTo"",""moveCamera"",""onSuccess"",""onStopped"",""onChange"",""State"",""inputEvent"",""offsetX"",""offsetY"",""flick"",""setTo"",""releaseEvent"",""clickedElement"",""srcEvent"",""clickedPanel"",""findPanelOf"",""cameraPosition"",""clickedPanelPosition"",""stopCamera"",""absDelta"",""abs"",""velocity"",""velocityX"",""velocityY"",""inputDelta"",""deltaX"",""deltaY"",""isNextDirection"",""swipeDistance"",""swipeAngle"",""atan"",""PI"",""belowAngleThreshold"",""overThreshold"",""moveTypeContext"",""axesEvent"",""interruptDestInfo"",""findPanelWhenInterrupted"",""destPos"",""nearestPanel"",""getNearestPanel"",""stop"",""destInfo"",""findTargetPanel"",""findRestorePanel"",""scrollArea"",""getScrollArea"",""loopCount"",""originalTargetPosition"",""newCloneIndex"",""circulate"",""newTargetPosition"",""newTargetPanel"",""setCurrentPanel"",""isTrusted"",""updateAdaptiveSize"",""updateAxesPosition"",""IdleState"",""nextStateType"",""currentState"",""HoldingState"",""DraggingState"",""AnimatingState"",""DisabledState"",""onExit"",""onEnter"",""onHold"",""onRelease"",""onAnimationEnd"",""onFinish"",""_super"",""ctx"",""snapCount"",""eventDelta"",""minimumDistanceToChange"",""calcBrinkOfChange"",""shouldMoveWhenBounceIs0"",""canSetBoundMode"",""shouldMoveToAdjacent"",""isOutOfBound"",""findSnappedPanel"",""findAdjacentPanel"",""halfGap"",""estimatedHangerPos"",""panelToMove"",""cycleIndex"",""passedPanelCount"",""originalPanel"",""getOriginalPanel"",""panelPosition"",""siblingPanel"",""panelIndex"",""siblingIndex"",""originalPosition"",""defaultDuration"",""getCurrentIndex"",""get"",""hangerPosition"",""firstClonedPanel"",""basePanel"",""basePosition"",""adjacentPanel"",""targetRelativeAnchorPosition"",""estimatedPosition"",""findRestorePanelInCircularMode"",""lapped"",""findNearestPanelAt"",""stateMachine"",""getState"",""currentPanelPosition"",""lastHangerPosition"",""Snap"",""panelMaintainRatio"",""relativeHangerPosition"",""positionOffset"",""visibleIndex"",""NaN"",""translate"",""checkedIndexes"",""isAdaptiveCached"",""isViewportGiven"",""isCameraGiven"",""originalViewportStyle"",""originalCameraStyle"",""StateMachine"",""visiblePanels"",""panelBboxes"",""build"",""eventResult"",""axes"",""isBetween"",""findNearestPanel"",""originalNearestPosition"",""checkNeedPanel"",""updateVisiblePanels"",""posOffset"",""moveCoord"",""coord"",""round"",""join"",""viewportElement"",""updateSize"",""updateOriginalPanelPositions"",""updateScrollArea"",""updateClonePanels"",""updateCameraPosition"",""updatePlugins"",""minimumDistance"",""prevPosition"",""nextPosition"",""distance"",""nearest"",""shortestDistance"",""identical"",""anchorPosition"",""getVisibleIndexOf"",""panInput"",""enable"",""disable"",""resizePanels"",""newCenterPanel"",""newPanelPosition"",""updateCheckedIndexes"",""indexes"",""newCurrentIndex"",""getRange"",""undefined"",""shouldApplyAdaptive"",""viewportStyle"",""sizeToApply"",""panelBbox"",""maximum"",""viewportBbox"",""updateBbox"",""viewportSize"",""plugins"",""plugin"",""update"",""wrapper"",""topmostElement_1"",""deletingElement"",""status"",""html"",""refreshPanels"",""createdPanels"",""orderedPanels"",""createdPanel"",""replacePanels"",""setCloneCount"",""outsetProgress"",""getOutsetProgress"",""playing"",""holding"",""prevRange"",""nextRange"",""nearestAnchorPos"",""nearestIndex"",""nearestSize"",""hangerIsNextToNearestPanel"",""targetPosition"",""progressBetween"",""off"",""on"",""axesHandlers"",""summedPanelSize"",""handlers"",""newPlugins"",""init"",""currentPlugins"",""changedRange"",""removed"",""fragment"",""prevVisiblePanels"",""equalSizeClasses_1"",""cached_1"",""overlappedClass"",""getOverlappedClass"",""clonePanels"",""updateClonedPanelPositions"",""chainAllPanels"",""visiblePanel"",""setElements"",""applyCSSValue"",""setMoveType"",""setAxesInstance"",""setDefaultPanel"",""moveToDefaultPanel"",""viewportCandidate"",""hasViewportElement"",""cameraCandidate"",""hasCameraElement"",""child"",""minHeight"",""minWidth"",""PanelManager"",""FreeScroll"",""Axes"",""easing"",""interruptable"",""PanInput"",""scale"",""connect"",""indexRange"",""panelAtLeftBoundary"",""reversedPanels"",""sumOriginalPanelSize"",""areaPrev"",""sizeSum"",""reversedPanels_1"",""panelAtRightBoundary"",""areaNext"",""panels_1"",""needCloneOnPrev"",""ceil"",""prevCloneCount"",""origPanel"",""removeClonesAfter"",""defaultPanel"",""defaultPosition"",""nextPanelPos"",""maintainingPanel"",""accumulatedSize"",""total"",""setPositionCSS"",""clonedPanels_1"",""clonedPanelPos"",""lastReplacePosition"",""_b"",""replacePosition"",""parsedBounce"",""arr"",""constructor"",""parsedVal"",""axis"",""isFreeScroll"",""is"",""maxLastIndex"",""checkingPanel"",""nextIndex"",""currentNearestPosition"",""triggerNeedPanel"",""firstIndex"",""lastPanelAfterNeed"",""cameraPrev"",""checkingIndex"",""prevIndex"",""firstPanelAfterNeed"",""params"",""alreadyTriggered"",""some"",""hasHandler"",""hasOn"",""fill"",""insertAfter"",""newVisibleIndex"",""calcNewVisiblePanelIndex"",""isNaN"",""newVisiblePanels"",""calcVisiblePanels"",""addedPanels"",""firstVisiblePanelPos"",""panelElement"",""trigger"",""resetVisibleIndex"",""cameraPos"",""allPanelCount"",""checkLastPanel"",""getNextPanel"",""isOutOfViewport"",""lastPanelOfNextDir"",""lastPanelOfPrevDir"",""minPanelCloneIndex"",""maxPanelCloneOffset"",""minPanelCloneOffset"",""prevRefCount"",""newRefCount"",""newPanel"",""newIndex"",""added"",""equalSizeClasses_2"",""default"",""defaultBbox_1"",""tid"",""cid"",""random"",""shouldResetElements"",""appendUncachedPanelElements"",""eventName"",""canceled"",""progress"",""merge"",""previousPosition"",""inputOffset"",""cameraChange"",""looped"",""currentDirection"",""querySelector"",""nodeName"",""nodeType"",""currentOptions"",""Viewport"",""listenInput"",""listenResize"",""category"",""action"",""label"",""innerWidth"",""innerHeight"",""screen"",""collectInfos"",""location"",""href"",""navigator"",""language"",""toLowerCase"",""charset"",""inputEncoding"",""characterSet"",""referrer"",""title"",""JSON"",""stringify"",""req"",""XMLHttpRequest"",""open"",""send"",""sendEvent"",""focus"",""nearestPosition"",""current"",""identicals"",""includeClone"",""outerHTML"",""restore"",""removeEventListener"",""diffResult"",""maintained"",""values"",""before"",""after"",""prevPanelCount"",""prevList"",""list"",""visibles"",""renderingPanels"",""setVisiblePanels"",""diffInfo"",""changed"",""prevClonedPanels"",""prevOriginalPanels"",""beforeIdx"",""afterIdx"",""addIndex"",""groupIndex"",""prevCloneGroup"",""newCloneGroup"",""getCheckedIndexes"",""has"",""isPanelChangedAtBeforeSync"",""beforeDiffInfo"",""prevOriginalPanelCount_1"",""originalPanelCount_1"",""originalAdded"",""originalRemoved"",""beforeSync"",""addedIndex"",""addedElement"",""beforePanel"",""eventContext"",""fire"",""connectAxesHandler"",""addEventListener"",""Flicking"",""Component"",""withFlickingMethods"",""prototype"",""flickingName"",""args"",""result""],""mappings"":""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""}"
093487f49897101ba31e42cd4039c1027d13b6d4,24844681,    see http://stackoverflow.com/questions/24844681/list-of-classs-properties-in-swift
a57893bdad2764e98cd38177783c391daa967aa0,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
c686a9996ff0774dc2fc0a3d1009909578d05e9f,2883189,包的选择可以参考SO上的一个问题：[Calling MATLAB functions from python](http://stackoverflow.com/questions/2883189/calling-matlab-functions-from-python)
70d67c2d39990b811ff97feab5dfaee0109ff0b1,34614968,> [2](https://stackoverflow.com/questions/34614968/ios-how-to-copy-pre-seeded-database-at-the-first-running-app-with-sqlite-swift).
5c0dcddd7753e94bfec1031dbbe929e29042923a,326679,    // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss
54fe2758ea9b111608996fbef3fbda0553a1f709,5684160, - [http://stackoverflow.com/questions/5684160/multiple-not-selector](http://stackoverflow.com/questions/5684160/multiple-not-selector)
42f77189ebf88b12348d41b8794e88ce2d09b54b,23646049,"    http://stackoverflow.com/a/23646049/2851664"""""""
4d2c26fb4bec240c3548fd4a11ea2c78efe4376d,263416,            // credit: http://stackoverflow.com/a/263416/677735
a843eacea50c2148f57e21542fed2076614743f1,4050444,	 * Adapted from http://stackoverflow.com/questions/4049856/replace-phps-realpath/4050444#4050444 as a replacement for PHP's realpath
d542e88d32a253c6205f6e814dcb6ab3e0f867ce,1554958,    //   - http://stackoverflow.com/questions/1554958/how-different-do-random-seeds-need-to-be
8f6c79d29c6e1bc99737aad62aa54d63aee651d3,21897664,    # TODO: see http://stackoverflow.com/questions/21897664/why-does-unicodeu-passed-an-errors-parameter-raise-typeerror for how to fix.
e9abeeb997fc246ff41e910f560bc2b69e635bb1,586631,<!-- http://stackoverflow.com/questions/586631/extract-a-subset-of-xml-file-using-xsl -->
0acd1cb8af4bd38692db1b5d2742d1281d186188,17223517,[Need to use mongoose id object only when sending req params](http://stackoverflow.com/questions/17223517/mongoose-casterror-cast-to-objectid-failed-for-value-object-object-at-path)
0081aa5ef83ffce5afd106bd3f7b146288e6b1ed,374626,(* > C'est [tellement plus simple en Python](https://stackoverflow.com/questions/374626/how-can-i-find-all-the-subsets-of-a-set-with-exactly-n-elements)... *)
8074b2c4d19b3b2966655204e032cba9df5a345c,3330919,        // http://stackoverflow.com/a/3330919)
f5fea106e246ca296cde470ee4a8aabc796c7d87,1574009,"          JVM. <a href=""http://stackoverflow.com/questions/1574009/how-is-reference-to-java-object-is-implemented"">This</a>"
db59526712bcd0f1be9a07dfe366311907a368f7,5252375, * based on http://stackoverflow.com/questions/5252375/custom-c-assert-macro
55e46f151a74a867e5b97005fed35c49fc450dfb,279237,# From http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder
40a8ef06e11e73daf50d1ece25cb225888dbd300,16819859,    ' WONTFIX - #004 - Change the color of each interior (histogram) chart vba access - Ref: http://stackoverflow.com/questions/16819859/change-the-color-of-each-interior-histogram-chart-vba-access
43e83f1e64e0d5822c878e1bb53e6f49239bb853,31439011,        // http://stackoverflow.com/questions/31439011/getfinalpathnamebyhandle-without-prepended
19fc8157bebcfeff221cd05521f320925f172880,9891767, * 	http://stackoverflow.com/questions/9891767/valgrind-debug-log-invalid-read-of-size-8
3566077f2ab21e4aa4ad8f8220f2e0d37748bff3,9329325,thorough [stackoverflow post](http://stackoverflow.com/a/9329325) on installing
23243dba1263884e08bab58fc03977dbf0479daa,34,  &lt;p&gt;This can take a long time and even can reset with &lt;code&gt;HTML error 503&lt;/code&gt; if you want to collect a lot of data at once. Simply the website recognize your action as a bot or just cannot handle this many request. You can get a better chance if you put &lt;code&gt;Sys.sleep()&lt;/code&gt; with some random values in the function or randomly change the user agent with &lt;code&gt;curl::curl()&lt;/code&gt;. Check &lt;a href=&#34;http://stackoverflow.com/questions/38119447/using-r-for-webscraping-http-error-503-despite-using-long-pauses-in-program&#34;&gt;this&lt;/a&gt; and similar issues for more info.&lt;/p&gt;
5e069ca066a2557046bb91c941e901e52c3114d8,17863685,"    <p>For more information, read <a href=""https://stackoverflow.com/questions/17408815/fieldset-resizes-wrong-appears-to-have-unremovable-min-width-min-content/17863685#17863685"">this Stack Overflow answer</a>.</p>"
c6b50429961bd53e7acac01bcf27347f3f2e5f85,6767887,        // http://stackoverflow.com/questions/6767887/
ee5cc06a530fb7353fd58f058a22fc4506e6cbd6,4576724,"   * See <a href=""http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas"">dotted stroke in canvas</a>"
7eb662949f80abe54812c35a8b3b2b59f437df9f,9575989,need install automake.[see](http://stackoverflow.com/questions/9575989/install-autoreconf-on-osx-lion)
54971d2365203f74cf1dcfabbfe96f6e85805161,4587077,            // http://stackoverflow.com/questions/4586972/how-to-calculate-fragmentation/4587077#4587077
5c72feac585b6d241d23ccf7e2359bac5695df91,15717844,* [javascript - Jasmine.js comparing arrays - Stack Overflow](http://stackoverflow.com/questions/15717844/jasmine-js-comparing-arrays)
20faafda07f1727a2b0248a999caf5e1f73bb95a,11929099,                // http://stackoverflow.com/questions/11929099/
92fb84fbdf9f77589236d17b2eb476047581e477,14994391,1. jquery?ag? : [http://stackoverflow.com/questions/14994391/how-do-i-think-in-angularjs-if-i-have-a-jquery-background](http://stackoverflow.com/questions/14994391/how-do-i-think-in-angularjs-if-i-have-a-jquery-background)
ef6a865ea9c91c41bf36c67b03a9d1986c56ec04,3561493,    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
dd8e4faca3e698b19e8b11b8a363bbd0d7d107b2,6364313,                            // http://stackoverflow.com/a/6364313
5a16052942643c01282cc9bd41670d7425cc7c88,11197770,//   http://stackoverflow.com/a/11197770/608639 and
a390be3b8ca3fd8260e78eadd956890a402570a9,1019126,  //http://stackoverflow.com/questions/1019076/how-to-search-by-key-value-in-a-multidimensional-array-in-php/1019126#1019126
4e0d5c9fa9f0e27330054f84fd28841acc44c7b3,10523433,"""body"": ""## Common usesNavtabs are particularly useful for scenarios where you want to show a variety of options, such as code samples for Java, .NET, or PHP, on the same page. While you could resort to single-source publishing to provide different outputs for each unique programming language or role, you could also use navtabs to allow users to select the content you want.Navtabs are better for SEO since you avoid duplicate content and drive users to the same page.## Navtabs demoThe following is a demo of a navtab. Refresh your page to see the tab you selected remain active.     Profile    About    Match       Profile Praesent sit amet fermentum leo. Aliquam feugiat, nibh in u ltrices mattis, felis ipsum venenatis metus, vel vehicula libero mauris a enim. Sed placerat est ac lectus vestibulum tempor. Quisque ut condimentum massa. Proin venenatis leo id urna cursus blandit. Vivamus sit amet hendrerit metus.    About    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel sollicitudin felis. Sed eu arcu sed ipsum semper luctus eu a tortor. Suspendisse id leo eu metus laoreet varius. Mauris consequat accumsan ex, a iaculis metus fermentum a. Praesent sit amet fermentum leo. Aliquam feugiat, nibh in u ltrices mattis, felis ipsum venenatis metus, vel vehicula libero mauris a enim. Sed placerat est ac lectus vestibulum tempor. Quisque ut condimentum massa. Proin venenatis leo id urna cursus blandit. Vivamus sit amet hendrerit metus.about    Match    Vel vehicula libero mauris a enim. Sed placerat est ac lectus vestibulum tempor. Quisque ut condimentum massa. Proin venenatis leo id urna cursus blandit. Vivamus sit amet hendrerit metus.## CodeHere's the code for the above (with the filler text abbreviated):```html    Profile    About    Match       Profile Praesent sit amet fermentum leo....    About    Lorem ipsum ...    Match    Vel vehicula ....```## Design constraintsBootstrap automatically clears any floats after the navtab. Make sure you aren't trying to float any element to the right of your navtabs, or there will be some awkward space in your layout.## Appearance in the mini-TOCIf you put a heading in the navtab content, that heading will appear in the mini-TOC as long as the heading tag has an ID. If you don't want the headings for each navtab section to appear in the mini-TOC, omit the ID attribute from the heading tag. Without this ID attribute in the heading, the mini-TOC won't insert the heading title into the mini-TOC.## Must use HTMLYou must use HTML within the navtab content because each navtab section is surrounded with HTML, and you can't use Markdown inside of HTML.## Match up ID tagsEach tab's `href` attribute must match the `id` attribute of the tab content's `div` section. So if your tab has `href=\""#acme\""`, then you add `acme` as the ID attribute in ``.## Set an active tabOne of the tabs needs to be set as active, depending on what tab you want to be open by default (usually the first one).```html```## Sets a cookieThe navtabs are part of Bootstrap, but this theme sets a cookie to remember the last tab's state. The js/customscripts.js file has a long chunk of JavaScript that sets the cookie. The JavaScript comes from [this StackOverflow thread](http://stackoverflow.com/questions/10523433/how-do-i-keep-the-current-tab-active-with-twitter-bootstrap-after-a-page-reload). By setting a cookie, if the user refreshes the page, the active tab is the tab the user last selected (rather than defaulting to the default active tab).## Functionality to implementOne piece of functionality I'd like to implement is the ability to set site-wide nav tab options. For example, if the user always chooses PHP instead of Java in the code samples, it would be great to set this option site-wide by default. However, this functionality isn't yet coded."""
058f13b499f263f5d3bed3fcdfe3ef978695c08f,3035188,    # http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n-in-python/3035188#3035188
d764370a3a254b81a543360ceb04d20d36eff42a,3954438,	// see: https://stackoverflow.com/questions/3954438/how-to-remove-item-from-array-by-value
d31547ad935e1ec3ed60b952d06747ed458f219d,27888109,// workaround for MinGW builds -> https://stackoverflow.com/questions/27888109/rendertarget-getsize-not-working
860e44cd24cda87864bf5c3a0324566e90a74f5c,10020179,// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options
c72ee1d138e0570db453c6f4db167a129ed81c76,18235269,#' returns them as an output of \code{fun}. Modified from  http://stackoverflow.com/questions/18235269/efficiently-reading-specific-lines-from-large-files-into-r
15c9e3980c68a8a3209f317d3eb5eef6a6b49d04,15831128,    // Adapted from http://stackoverflow.com/a/15831128/208304
00c5e7bd4826a3bbe63066abfa61966478c7fd7b,1470932,        // http://stackoverflow.com/questions/1470932/ie8-iframe-designmode-loses-selection
f1b0819cd6137610caf388b59e4f5f546df4bc05,901115,	// http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript#answer-901144
e7af60aa18234021ba1599fb3f3bdc666dfac628,7422072,// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
d5c33e5dcab933344c6739906531c2d20758c45a,1977871,    // http://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-in-javascript
3f7b369d233e48eb76b956f5f7220213738c04ec,12621264,		/* http://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support/12621264#12621264 */
51f9116abe628e94ab342ed45a21ebe8df7912a5,19228302,        // http://stackoverflow.com/a/19228302/1458162
dd43a47839f1c6d54f29df0092c1e8afe5d17f3e,9882716,"    ""// packing code from here http://stackoverflow.com/questions/9882716/packing-float-into-vec4-how-does-this-code-work"","
24fc145e710263ee08ca163ab9958b873faae8c7,6284396,   # http://stackoverflow.com/questions/6284396/permutations-with-unique-values
47f10dba556471146edaf1fbead7bc777e1156bf,18411978,// https://stackoverflow.com/a/18411978
e940b064037b83f69fbb6d154092a33ec86b3a9a,1380463,// Based on http://stackoverflow.com/questions/1380463/sorting-a-vector-of-custom-objects
a1125edfca65859c50a85c57472544539798034c,10046972,"10976704,comment,10976194,10976194,0,0,iam4xzor,,,""<a href=""""http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request"""" rel=""""nofollow"""">http://stackoverflow.com/questions/10046972/msie-returns-sta...</a><p><a href=""""http://codes.io/1223"""" rel=""""nofollow"""">http://codes.io/1223</a> -> 503"",1453847297"
e325e1e32cdfa4b64c5ea94e3032d9dd65b593df,3153457,"{""version"":3,""sources"":[""webpack:///webpack/universalModuleDefinition"",""webpack:///flowchart.js"",""webpack:///webpack/bootstrap 9641fd1c459d3101ba07"",""webpack:///./index.js"",""webpack:///./src/flowchart.helpers.js"",""webpack:///./src/flowchart.symbol.js"",""webpack:///./src/flowchart.functions.js"",""webpack:///./src/flowchart.parse.js"",""webpack:///./src/flowchart.symbol.condition.js"",""webpack:///./src/flowchart.chart.js"",""webpack:///./src/flowchart.defaults.js"",""webpack:///./src/flowchart.shim.js"",""webpack:///./src/flowchart.symbol.end.js"",""webpack:///./src/flowchart.symbol.inputoutput.js"",""webpack:///./src/flowchart.symbol.operation.js"",""webpack:///./src/flowchart.symbol.start.js"",""webpack:///./src/flowchart.symbol.subroutine.js"",""webpack:///./src/jquery-plugin.js"",""webpack:///external \""Raphael\""""],""names"":[""root"",""factory"",""exports"",""module"",""require"",""define"",""amd"",""a"",""i"",""this"",""__WEBPACK_EXTERNAL_MODULE_15__"",""modules"",""__webpack_require__"",""moduleId"",""installedModules"",""id"",""loaded"",""call"",""m"",""c"",""p"",""parse"",""FlowChart"",""window"",""flowchart"",""_defaults"",""options"",""defaultOptions"",""merged"",""attrname"",""_inherits"",""ctor"",""superCtor"",""Object"",""super_"",""prototype"",""create"",""constructor"",""value"",""enumerable"",""writable"",""configurable"",""TempCtor"",""defaults"",""inherits"",""Symbol"",""chart"",""symbol"",""group"",""paper"",""set"",""connectedTo"",""symbolType"",""flowstate"",""lineStyle"",""key"",""next_direction"",""next"",""undefined"",""text"",""node"",""setAttribute"",""getAttr"",""attr"",""text-anchor"",""x"",""fill"",""font-size"",""font"",""fontF"",""fontW"",""font-family"",""font-weight"",""link"",""target"",""maxWidth"",""words"",""split"",""tempText"",""ii"",""length"",""word"",""getBBox"",""width"",""substring"",""push"",""tmpMargin"",""stroke"",""stroke-width"",""height"",""insertBefore"",""y"",""initialize"",""drawAPI"",""drawLine"",""checkLineIntersection"",""attName"",""opt1"",""opt3"",""opt2"",""symbols"",""transform"",""getCenter"",""getX"",""getY"",""shiftX"",""setX"",""shiftY"",""setY"",""getTop"",""getBottom"",""getLeft"",""getRight"",""render"",""lineLength"",""rightPoint"",""isPositioned"",""self"",""shift"",""symb"",""hasSymbolUnder"",""len"",""diff"",""Math"",""abs"",""bottomPoint"",""renderLines"",""drawLineTo"",""origin"",""indexOf"",""line"",""right"",""bottom"",""left"",""symbolX"",""symbolY"",""symbolTop"",""symbolRight"",""symbolLeft"",""isOnSameColumn"",""isOnSameLine"",""isUnder"",""isUpper"",""isLeft"",""isRight"",""maxX"",""lineWith"",""rightStart"",""topEnd"",""bottomStart"",""diffX"",""leftStart"",""leftEnd"",""rightEnd"",""l"",""llen"",""lines"",""otherLine"",""ePath"",""lPath"",""iP"",""lenP"",""newPath"",""line1_from_x"",""line1_from_y"",""line1_to_x"",""line1_to_y"",""lP"",""lenlP"",""newLinePath"",""line2_from_x"",""line2_from_y"",""line2_to_x"",""line2_to_y"",""res"",""onLine1"",""onLine2"",""newSegment"",""splice"",""maxXFromLine"",""drawPath"",""location"",""points"",""path"",""pathValues"",""from"",""to"",""toString"",""arrow-end"",""centerText"",""textPath"",""isHorizontal"",""firstTo"",""line1StartX"",""line1StartY"",""line1EndX"",""line1EndY"",""line2StartX"",""line2StartY"",""line2EndX"",""line2EndY"",""denominator"",""b"",""numerator1"",""numerator2"",""result"",""input"",""getStyle"",""s"",""startIndex"",""endIndex"",""getSymbValue"",""getSymbol"",""getNextPath"",""flowSymb"",""trim"",""start"",""drawSVG"",""container"",""getDisplaySymbol"",""dispSymbols"",""Start"",""diagram"",""End"",""Operation"",""InputOutput"",""Subroutine"",""Condition"",""Error"",""clean"",""constructChart"",""prevDisp"",""prev"",""dispSymb"",""startWith"",""pathOk"",""yes"",""no"",""then"",""prevBreak"",""i0"",""i0len"",""line0"",""replace"",""substr"",""currentLine"",""parts"",""params"",""match"",""entries"",""entry"",""sub"",""join"",""txtAndState"",""pop"",""flowSymbols"",""lenS"",""symbVal"",""realSymb"",""direction"",""condOpt"",""nextSymb"",""lineStyleSymbols"",""curSymb"",""JSON"",""textMargin"",""yes_direction"",""no_direction"",""direction_yes"",""direction_no"",""max"",""startX"",""startY"",""yes_symbol"",""no_symbol"",""bottom_symbol"",""right_symbol"",""Raphael"",""handle"",""flowChart"",""nextSymbol"",""maxHeight"",""maxY"",""minX"",""minY"",""x2"",""y2"",""scale"",""lineWidth"",""setSize"",""setViewBox"",""paperDom"",""canvas"",""parentNode"",""removeChild"",""line-width"",""line-length"",""text-margin"",""font-color"",""line-color"",""element-color"",""yes-text"",""no-text"",""class"",""end"",""condition"",""inputoutput"",""operation"",""subroutine"",""Array"",""searchElement"",""TypeError"",""t"",""n"",""arguments"",""Number"",""Infinity"",""floor"",""k"",""lastIndexOf"",""min"",""String"",""rect"",""innerWrap"",""jQuery"",""$"",""fn"",""each"",""$this"",""html""],""mappings"":""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"",""file"":""flowchart.js"",""sourcesContent"":[""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\""Raphael\""));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\""Raphael\""], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\""Raphael\"")) : factory(root[\""Raphael\""]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"",""(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\""Raphael\""));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\""Raphael\""], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\""Raphael\"")) : factory(root[\""Raphael\""]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \""\"";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n  !*** ./index.js ***!\n  \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n  !*** ./src/flowchart.helpers.js ***!\n  \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t  if (!options || typeof options === 'function') {\n\t    return defaultOptions;\n\t  }\n\t\n\t  var merged = {};\n\t  for (var attrname in defaultOptions) {\n\t    merged[attrname] = defaultOptions[attrname];\n\t  }\n\t\n\t  for (attrname in options) {\n\t    if (options[attrname]) {\n\t      if (typeof merged[attrname] === 'object') {\n\t        merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t      } else {\n\t        merged[attrname] = options[attrname];\n\t      }\n\t    }\n\t  }\n\t  return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t  if (typeof(Object.create) === 'function') {\n\t    // implementation from standard node.js 'util' module\n\t    ctor.super_ = superCtor;\n\t    ctor.prototype = Object.create(superCtor.prototype, {\n\t      constructor: {\n\t        value: ctor,\n\t        enumerable: false,\n\t        writable: true,\n\t        configurable: true\n\t      }\n\t    });\n\t  } else {\n\t    // old school shim for old browsers\n\t    ctor.super_ = superCtor;\n\t    var TempCtor = function () {};\n\t    TempCtor.prototype = superCtor.prototype;\n\t    ctor.prototype = new TempCtor();\n\t    ctor.prototype.constructor = ctor;\n\t  }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t  defaults: _defaults,\n\t  inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n  !*** ./src/flowchart.symbol.js ***!\n  \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t  this.chart = chart;\n\t  this.group = this.chart.paper.set();\n\t  this.symbol = symbol;\n\t  this.connectedTo = [];\n\t  this.symbolType = options.symbolType;\n\t  this.flowstate = (options.flowstate || 'future');\n\t  this.lineStyle = (options.lineStyle || {});\n\t  this.key = (options.key || '');\n\t\n\t  this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t  this.text = this.chart.paper.text(0, 0, options.text);\n\t  //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t  if (options.key) { this.text.node.id = options.key + 't'; }\n\t  this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t  this.text.attr({\n\t    'text-anchor': 'start',\n\t    'x'          : this.getAttr('text-margin'),\n\t    'fill'       : this.getAttr('font-color'),\n\t    'font-size'  : this.getAttr('font-size')\n\t  });\n\t\n\t  var font  = this.getAttr('font');\n\t  var fontF = this.getAttr('font-family');\n\t  var fontW = this.getAttr('font-weight');\n\t\n\t  if (font) this.text.attr({ 'font': font });\n\t  if (fontF) this.text.attr({ 'font-family': fontF });\n\t  if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t  if (options.link) { this.text.attr('href', options.link); }\n\t  if (options.target) { this.text.attr('target', options.target); }\n\t\n\t  var maxWidth = this.getAttr('maxWidth');\n\t  if (maxWidth) {\n\t    // using this approach: http://stackoverflow.com/a/3153457/22466\n\t    var words = options.text.split(' ');\n\t    var tempText = \""\"";\n\t    for (var i=0, ii=words.length; i<ii; i++) {\n\t      var word = words[i];\n\t      this.text.attr(\""text\"", tempText + \"" \"" + word);\n\t      if (this.text.getBBox().width > maxWidth) {\n\t        tempText += \""\\n\"" + word;\n\t      } else {\n\t        tempText += \"" \"" + word;\n\t      }\n\t    }\n\t    this.text.attr(\""text\"", tempText.substring(1));\n\t  }\n\t\n\t  this.group.push(this.text);\n\t\n\t  if (symbol) {\n\t    var tmpMargin = this.getAttr('text-margin');\n\t\n\t    symbol.attr({\n\t      'fill' : this.getAttr('fill'),\n\t      'stroke' : this.getAttr('element-color'),\n\t      'stroke-width' : this.getAttr('line-width'),\n\t      'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t      'height' : this.text.getBBox().height + 2 * tmpMargin\n\t    });\n\t\n\t    symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t    if (options.link) { symbol.attr('href', options.link); }\n\t    if (options.target) { symbol.attr('target', options.target); }\n\t    if (options.key) { symbol.node.id = options.key; }\n\t\n\t    this.group.push(symbol);\n\t    symbol.insertBefore(this.text);\n\t\n\t    this.text.attr({\n\t      'y': symbol.getBBox().height/2\n\t    });\n\t\n\t    this.initialize();\n\t  }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t  if (!this.chart) {\n\t    return undefined;\n\t  }\n\t  var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t  var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t  var opt1;\n\t  if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t    opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t  }\n\t  return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t  this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t  this.width = this.group.getBBox().width;\n\t  this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t  return {x: this.getX() + this.width/2,\n\t          y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t  return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t  return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t  this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t  this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t  this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t  this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t  var y = this.getY();\n\t  var x = this.getX() + this.width/2;\n\t  return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t  var y = this.getY() + this.height;\n\t  var x = this.getX() + this.width/2;\n\t  return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t  var y = this.getY() + this.group.getBBox().height/2;\n\t  var x = this.getX();\n\t  return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t  var y = this.getY() + this.group.getBBox().height/2;\n\t  var x = this.getX() + this.group.getBBox().width;\n\t  return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t  if (this.next) {\n\t\n\t    var lineLength = this.getAttr('line-length');\n\t\n\t    if (this.next_direction === 'right') {\n\t\n\t      var rightPoint = this.getRight();\n\t\n\t      if (!this.next.isPositioned) {\n\t\n\t        this.next.setY(rightPoint.y - this.next.height/2);\n\t        this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t        var self = this;\n\t        (function shift() {\n\t          var hasSymbolUnder = false;\n\t          var symb;\n\t          for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t            symb = self.chart.symbols[i];\n\t\n\t            var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t            if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t              hasSymbolUnder = true;\n\t              break;\n\t            }\n\t          }\n\t\n\t          if (hasSymbolUnder) {\n\t            self.next.setX(symb.getX() + symb.width + lineLength);\n\t            shift();\n\t          }\n\t        })();\n\t\n\t        this.next.isPositioned = true;\n\t\n\t        this.next.render();\n\t      }\n\t    } else {\n\t      var bottomPoint = this.getBottom();\n\t\n\t      if (!this.next.isPositioned) {\n\t        this.next.shiftY(this.getY() + this.height + lineLength);\n\t        this.next.setX(bottomPoint.x - this.next.width/2);\n\t        this.next.isPositioned = true;\n\t\n\t        this.next.render();\n\t      }\n\t    }\n\t  }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t  if (this.next) {\n\t    if (this.next_direction) {\n\t      this.drawLineTo(this.next, '', this.next_direction);\n\t    } else {\n\t      this.drawLineTo(this.next);\n\t    }\n\t  }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t  if (this.connectedTo.indexOf(symbol) < 0) {\n\t    this.connectedTo.push(symbol);\n\t  }\n\t\n\t  var x = this.getCenter().x,\n\t      y = this.getCenter().y,\n\t      right = this.getRight(),\n\t      bottom = this.getBottom(),\n\t      left = this.getLeft();\n\t\n\t  var symbolX = symbol.getCenter().x,\n\t      symbolY = symbol.getCenter().y,\n\t      symbolTop = symbol.getTop(),\n\t      symbolRight = symbol.getRight(),\n\t      symbolLeft = symbol.getLeft();\n\t\n\t  var isOnSameColumn = x === symbolX,\n\t      isOnSameLine = y === symbolY,\n\t      isUnder = y < symbolY,\n\t      isUpper = y > symbolY || this === symbol,\n\t      isLeft = x > symbolX,\n\t      isRight = x < symbolX;\n\t\n\t  var maxX = 0,\n\t      line,\n\t      lineLength = this.getAttr('line-length'),\n\t      lineWith = this.getAttr('line-width');\n\t\n\t  if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t    line = drawLine(this.chart, bottom, symbolTop, text);\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x;\n\t  } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t    line = drawLine(this.chart, right, symbolLeft, text);\n\t    this.rightStart = true;\n\t    symbol.leftEnd = true;\n\t    maxX = symbolLeft.x;\n\t  } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t    line = drawLine(this.chart, left, symbolRight, text);\n\t    this.leftStart = true;\n\t    symbol.rightEnd = true;\n\t    maxX = symbolRight.x;\n\t  } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t    line = drawLine(this.chart, right, [\n\t      {x: right.x + lineLength/2, y: right.y},\n\t      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.rightStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = right.x + lineLength/2;\n\t  } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t    line = drawLine(this.chart, right, [\n\t      {x: right.x + lineLength/2, y: right.y},\n\t      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.rightStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = right.x + lineLength/2;\n\t  } else if ((!origin || origin === 'bottom') && isLeft) {\n\t    if (this.leftEnd && isUpper) {\n\t      line = drawLine(this.chart, bottom, [\n\t        {x: bottom.x, y: bottom.y + lineLength/2},\n\t        {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t        {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t        {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t        {x: symbolTop.x, y: symbolTop.y}\n\t      ], text);\n\t    } else {\n\t      line = drawLine(this.chart, bottom, [\n\t        {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t        {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t        {x: symbolTop.x, y: symbolTop.y}\n\t      ], text);\n\t    }\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t  } else if ((!origin || origin === 'bottom') && isRight) {\n\t    line = drawLine(this.chart, bottom, [\n\t      {x: bottom.x, y: bottom.y + lineLength/2},\n\t      {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t      {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t  } else if ((origin && origin === 'right') && isLeft) {\n\t    line = drawLine(this.chart, right, [\n\t      {x: right.x + lineLength/2, y: right.y},\n\t      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.rightStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = right.x + lineLength/2;\n\t  } else if ((origin && origin === 'right') && isRight) {\n\t    line = drawLine(this.chart, right, [\n\t      {x: symbolTop.x, y: right.y},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.rightStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = right.x + lineLength/2;\n\t  } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t    line = drawLine(this.chart, bottom, [\n\t      {x: bottom.x, y: bottom.y + lineLength/2},\n\t      {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x + lineLength/2;\n\t  } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t    var diffX = left.x - lineLength/2;\n\t    if (symbolLeft.x < left.x) {\n\t      diffX = symbolLeft.x - lineLength/2;\n\t    }\n\t    line = drawLine(this.chart, left, [\n\t      {x: diffX, y: left.y},\n\t      {x: diffX, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.leftStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = left.x;\n\t  } else if ((origin === 'left')) {\n\t    line = drawLine(this.chart, left, [\n\t      {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n\t      {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.leftStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = left.x;\n\t  }\n\t\n\t  //update line style\n\t  if (this.lineStyle[symbol.key] && line){\n\t      line.attr( this.lineStyle[symbol.key]);\n\t  }\n\t\n\t  if (line) {\n\t    for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t      var otherLine = this.chart.lines[l];\n\t      var len;\n\t\n\t      var ePath = otherLine.attr('path'),\n\t          lPath = line.attr('path');\n\t\n\t      for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t        var newPath = [];\n\t        newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t        newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t        var line1_from_x = newPath[0][1];\n\t        var line1_from_y = newPath[0][2];\n\t        var line1_to_x = newPath[1][1];\n\t        var line1_to_y = newPath[1][2];\n\t\n\t        for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t          var newLinePath = [];\n\t          newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t          newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t          var line2_from_x = newLinePath[0][1];\n\t          var line2_from_y = newLinePath[0][2];\n\t          var line2_to_x = newLinePath[1][1];\n\t          var line2_to_y = newLinePath[1][2];\n\t\n\t          var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t          if (res.onLine1 && res.onLine2) {\n\t\n\t            var newSegment;\n\t            if (line2_from_y === line2_to_y) {\n\t              if (line2_from_x > line2_to_x) {\n\t                newSegment = ['L', res.x + lineWith * 2,  line2_from_y];\n\t                lPath.splice(lP + 1, 0, newSegment);\n\t                newSegment = ['C', res.x + lineWith * 2,  line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t                lPath.splice(lP + 2, 0, newSegment);\n\t                line.attr('path', lPath);\n\t              } else {\n\t                newSegment = ['L', res.x - lineWith * 2,  line2_from_y];\n\t                lPath.splice(lP + 1, 0, newSegment);\n\t                newSegment = ['C', res.x - lineWith * 2,  line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t                lPath.splice(lP + 2, 0, newSegment);\n\t                line.attr('path', lPath);\n\t              }\n\t            } else {\n\t              if (line2_from_y > line2_to_y) {\n\t                newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t                lPath.splice(lP + 1, 0, newSegment);\n\t                newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t                lPath.splice(lP + 2, 0, newSegment);\n\t                line.attr('path', lPath);\n\t              } else {\n\t                newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t                lPath.splice(lP + 1, 0, newSegment);\n\t                newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t                lPath.splice(lP + 2, 0, newSegment);\n\t                line.attr('path', lPath);\n\t              }\n\t            }\n\t\n\t            lP += 2;\n\t            len += 2;\n\t          }\n\t        }\n\t      }\n\t    }\n\t\n\t    this.chart.lines.push(line);\n\t  }\n\t\n\t  if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t    this.chart.maxXFromLine = maxX;\n\t  }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n  !*** ./src/flowchart.functions.js ***!\n  \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t  var i, len;\n\t  var path = 'M{0},{1}';\n\t  for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t    path += ' L{' + i + '},{' + (i + 1) + '}';\n\t  }\n\t  var pathValues = [location.x, location.y];\n\t  for (i = 0, len = points.length; i < len; i++) {\n\t    pathValues.push(points[i].x);\n\t    pathValues.push(points[i].y);\n\t  }\n\t  var symbol = chart.paper.path(path, pathValues);\n\t  symbol.attr('stroke', chart.options['element-color']);\n\t  symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t  var font = chart.options.font;\n\t  var fontF = chart.options['font-family'];\n\t  var fontW = chart.options['font-weight'];\n\t\n\t  if (font) symbol.attr({ 'font': font });\n\t  if (fontF) symbol.attr({ 'font-family': fontF });\n\t  if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t  return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t  var i, len;\n\t\n\t  if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t    to = [to];\n\t  }\n\t\n\t  var path = 'M{0},{1}';\n\t  for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t    path += ' L{' + i + '},{' + (i + 1) + '}';\n\t  }\n\t  var pathValues = [from.x, from.y];\n\t  for (i = 0, len = to.length; i < len; i++) {\n\t    pathValues.push(to[i].x);\n\t    pathValues.push(to[i].y);\n\t  }\n\t\n\t  var line = chart.paper.path(path, pathValues);\n\t  line.attr({\n\t    stroke: chart.options['line-color'],\n\t    'stroke-width': chart.options['line-width'],\n\t    'arrow-end': chart.options['arrow-end']\n\t  });\n\t\n\t  var font = chart.options.font;\n\t  var fontF = chart.options['font-family'];\n\t  var fontW = chart.options['font-weight'];\n\t\n\t  if (font) line.attr({ 'font': font });\n\t  if (fontF) line.attr({ 'font-family': fontF });\n\t  if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t  if (text) {\n\t\n\t    var centerText = false;\n\t\n\t    var textPath = chart.paper.text(0, 0, text);\n\t\n\t    var isHorizontal = false;\n\t    var firstTo = to[0];\n\t\n\t    if (from.y === firstTo.y) {\n\t      isHorizontal = true;\n\t    }\n\t\n\t    var x = 0,\n\t        y = 0;\n\t\n\t    if (centerText) {\n\t      if (from.x > firstTo.x) {\n\t        x = from.x - (from.x - firstTo.x)/2;\n\t      } else {\n\t        x = firstTo.x - (firstTo.x - from.x)/2;\n\t      }\n\t\n\t      if (from.y > firstTo.y) {\n\t        y = from.y - (from.y - firstTo.y)/2;\n\t      } else {\n\t        y = firstTo.y - (firstTo.y - from.y)/2;\n\t      }\n\t\n\t      if (isHorizontal) {\n\t        x -= textPath.getBBox().width/2;\n\t        y -= chart.options['text-margin'];\n\t      } else {\n\t        x += chart.options['text-margin'];\n\t        y -= textPath.getBBox().height/2;\n\t      }\n\t    } else {\n\t      x = from.x;\n\t      y = from.y;\n\t\n\t      if (isHorizontal) {\n\t        x += chart.options['text-margin']/2;\n\t        y -= chart.options['text-margin'];\n\t      } else {\n\t        x += chart.options['text-margin']/2;\n\t        y += chart.options['text-margin'];\n\t      }\n\t    }\n\t\n\t    textPath.attr({\n\t      'text-anchor': 'start',\n\t      'font-size': chart.options['font-size'],\n\t      'fill': chart.options['font-color'],\n\t      x: x,\n\t      y: y\n\t    });\n\t\n\t    if (font) textPath.attr({ 'font': font });\n\t    if (fontF) textPath.attr({ 'font-family': fontF });\n\t    if (fontW) textPath.attr({ 'font-weight': fontW });\n\t  }\n\t\n\t  return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t  // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t  var denominator, a, b, numerator1, numerator2, result = {\n\t    x: null,\n\t    y: null,\n\t    onLine1: false,\n\t    onLine2: false\n\t  };\n\t  denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t  if (denominator === 0) {\n\t    return result;\n\t  }\n\t  a = line1StartY - line2StartY;\n\t  b = line1StartX - line2StartX;\n\t  numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t  numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t  a = numerator1 / denominator;\n\t  b = numerator2 / denominator;\n\t\n\t  // if we cast these lines infinitely in both directions, they intersect here:\n\t  result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t  result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t  /*\n\t  // it is worth noting that this should be the same as:\n\t  x = line2StartX + (b * (line2EndX - line2StartX));\n\t  y = line2StartX + (b * (line2EndY - line2StartY));\n\t  */\n\t  // if line1 is a segment and line2 is infinite, they intersect if:\n\t  if (a > 0 && a < 1) {\n\t    result.onLine1 = true;\n\t  }\n\t  // if line2 is a segment and line1 is infinite, they intersect if:\n\t  if (b > 0 && b < 1) {\n\t    result.onLine2 = true;\n\t  }\n\t  // if line1 and line2 are segments, they intersect if both of the above are true\n\t  return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n  !*** ./src/flowchart.parse.js ***!\n  \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction parse(input) {\n\t  input = input || '';\n\t  input = input.trim();\n\t\n\t  var chart = {\n\t    symbols: {},\n\t    start: null,\n\t    drawSVG: function(container, options) {\n\t      var self = this;\n\t\n\t      if (this.diagram) {\n\t        this.diagram.clean();\n\t      }\n\t\n\t      var diagram = new FlowChart(container, options);\n\t      this.diagram = diagram;\n\t      var dispSymbols = {};\n\t\n\t      function getDisplaySymbol(s) {\n\t        if (dispSymbols[s.key]) {\n\t          return dispSymbols[s.key];\n\t        }\n\t\n\t        switch (s.symbolType) {\n\t          case 'start':\n\t            dispSymbols[s.key] = new Start(diagram, s);\n\t            break;\n\t          case 'end':\n\t            dispSymbols[s.key] = new End(diagram, s);\n\t            break;\n\t          case 'operation':\n\t            dispSymbols[s.key] = new Operation(diagram, s);\n\t            break;\n\t          case 'inputoutput':\n\t            dispSymbols[s.key] = new InputOutput(diagram, s); \n\t            break;\n\t          case 'subroutine':\n\t            dispSymbols[s.key] = new Subroutine(diagram, s);\n\t            break;\n\t          case 'condition':\n\t            dispSymbols[s.key] = new Condition(diagram, s);\n\t            break;\n\t          default:\n\t            return new Error('Wrong symbol type!');\n\t        }\n\t\n\t        return dispSymbols[s.key];\n\t      }\n\t\n\t      (function constructChart(s, prevDisp, prev) {\n\t        var dispSymb = getDisplaySymbol(s);\n\t\n\t        if (self.start === s) {\n\t          diagram.startWith(dispSymb);\n\t        } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t          if (prevDisp instanceof(Condition)) {\n\t            if (prev.yes === s) {\n\t              prevDisp.yes(dispSymb);\n\t            }\n\t            if (prev.no === s) {\n\t              prevDisp.no(dispSymb);\n\t            }\n\t          } else {\n\t            prevDisp.then(dispSymb);\n\t          }\n\t        }\n\t\n\t        if (dispSymb.pathOk) {\n\t          return dispSymb;\n\t        }\n\t\n\t        if (dispSymb instanceof(Condition)) {\n\t          if (s.yes) {\n\t            constructChart(s.yes, dispSymb, s);\n\t          }\n\t          if (s.no) {\n\t            constructChart(s.no, dispSymb, s);\n\t          }\n\t        } else if (s.next) {\n\t          constructChart(s.next, dispSymb, s);\n\t        }\n\t\n\t        return dispSymb;\n\t      })(this.start);\n\t\n\t      diagram.render();\n\t    },\n\t    clean: function() {\n\t      this.diagram.clean();\n\t    }\n\t  };\n\t\n\t  var lines = [];\n\t  var prevBreak = 0;\n\t  for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t    if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t      var line0 = input.substring(prevBreak, i0);\n\t      prevBreak = i0 + 1;\n\t      lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t    }\n\t  }\n\t\n\t  if(prevBreak < input.length) {\n\t    lines.push(input.substr(prevBreak));\n\t  }\n\t\n\t  for (var l = 1, len = lines.length; l < len;) {\n\t    var currentLine = lines[l];\n\t\n\t    if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t      lines[l - 1] += '\\n' + currentLine;\n\t      lines.splice(l, 1);\n\t      len--;\n\t    } else {\n\t      l++;\n\t    }\n\t  }\n\t\n\t  function getStyle(s){\n\t    var startIndex = s.indexOf('(') + 1;\n\t    var endIndex = s.indexOf(')');\n\t    if (startIndex >= 0 && endIndex >= 0) {\n\t      return s.substring(startIndex,endIndex);\n\t    }\n\t    return '{}';\n\t  }\n\t\n\t  function getSymbValue(s){\n\t    var startIndex = s.indexOf('(') + 1;\n\t    var endIndex = s.indexOf(')');\n\t    if (startIndex >= 0 && endIndex >= 0) {\n\t      return s.substring(startIndex,endIndex);\n\t    }\n\t    return '';\n\t  }\n\t\n\t  function getSymbol(s) {\n\t    var startIndex = s.indexOf('(') + 1;\n\t    var endIndex = s.indexOf(')');\n\t    if (startIndex >= 0 && endIndex >= 0) {\n\t      return chart.symbols[s.substring(0, startIndex - 1)];   \n\t    }\n\t    return chart.symbols[s];\n\t  }\n\t\n\t  function getNextPath(s) {\n\t    var next = 'next';\n\t    var startIndex = s.indexOf('(') + 1;\n\t    var endIndex = s.indexOf(')');\n\t    if (startIndex >= 0 && endIndex >= 0) {\n\t      next = flowSymb.substring(startIndex, endIndex);\n\t      if (next.indexOf(',') < 0) {\n\t        if (next !== 'yes' && next !== 'no') {\n\t          next = 'next, ' + next;\n\t        }\n\t      }\n\t    }\n\t    return next;\n\t  }\n\t\n\t  while (lines.length > 0) {\n\t    var line = lines.splice(0, 1)[0].trim();\n\t\n\t    if (line.indexOf('=>') >= 0) {\n\t      // definition\n\t      var parts = line.split('=>');\n\t      var symbol = {\n\t        key: parts[0].replace(/\\(.*\\)/, ''),\n\t        symbolType: parts[1],\n\t        text: null,\n\t        link: null,\n\t        target: null,\n\t        flowstate: null,\n\t        lineStyle: {},\n\t        params: {}\n\t      };\n\t\n\t      //parse parameters\n\t      var params = parts[0].match(/\\((.*)\\)/);\n\t      if (params && params.length > 1){\n\t        var entries = params[1].split(',');\n\t        for(var i = 0; i < entries.length; i++) {\n\t          var entry = entries[0].split('=');\n\t          if (entry.length == 2){\n\t            symbol.params[entry[0]] = entry[1];\n\t          }\n\t        }\n\t      }\n\t\n\t      var sub;\n\t\n\t      if (symbol.symbolType.indexOf(': ') >= 0) {\n\t        sub = symbol.symbolType.split(': ');\n\t        symbol.symbolType = sub.shift();\n\t        symbol.text = sub.join(': ');\n\t      }\n\t\n\t      if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t        sub = symbol.text.split(':>');\n\t        symbol.text = sub.shift();\n\t        symbol.link = sub.join(':>');\n\t      } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t        sub = symbol.symbolType.split(':>');\n\t        symbol.symbolType = sub.shift();\n\t        symbol.link = sub.join(':>');\n\t      }\n\t\n\t      if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t        symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t      }\n\t\n\t      /* adding support for links */\n\t      if (symbol.link) {\n\t        var startIndex = symbol.link.indexOf('[') + 1;\n\t        var endIndex = symbol.link.indexOf(']');\n\t        if (startIndex >= 0 && endIndex >= 0) {\n\t          symbol.target = symbol.link.substring(startIndex, endIndex);\n\t          symbol.link = symbol.link.substring(0, startIndex - 1);\n\t        }\n\t      }\n\t      /* end of link support */\n\t\n\t      /* adding support for flowstates */\n\t      if (symbol.text) {\n\t        if (symbol.text.indexOf('|') >= 0) {\n\t          var txtAndState = symbol.text.split('|');\n\t          symbol.flowstate = txtAndState.pop().trim();\n\t          symbol.text = txtAndState.join('|');\n\t        }\n\t      }\n\t      /* end of flowstate support */\n\t\n\t      chart.symbols[symbol.key] = symbol;\n\t\n\t    } else if (line.indexOf('->') >= 0) {\n\t      // flow\n\t      var flowSymbols = line.split('->');\n\t      for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t        var flowSymb = flowSymbols[i];\n\t        var symbVal = getSymbValue(flowSymb);\n\t\n\t        if (symbVal === 'true' || symbVal === 'false') {\n\t          // map true or false to yes or no respectively\n\t          flowSymb = flowSymb.replace('true', 'yes');\n\t          flowSymb = flowSymb.replace('false', 'no');\n\t        }\n\t\n\t        var realSymb = getSymbol(flowSymb);\n\t        var next = getNextPath(flowSymb);\n\t\n\t        var direction = null;\n\t        if (next.indexOf(',') >= 0) {\n\t          var condOpt = next.split(',');\n\t          next = condOpt[0];\n\t          direction = condOpt[1].trim();\n\t        }\n\t\n\t        if (!chart.start) {\n\t          chart.start = realSymb;\n\t        }\n\t\n\t        if (i + 1 < lenS) {\n\t          var nextSymb = flowSymbols[i + 1];\n\t          realSymb[next] = getSymbol(nextSymb);\n\t          realSymb['direction_' + next] = direction;\n\t          direction = null;\n\t        }\n\t      }\n\t    } else if (line.indexOf('@>') >= 0) {\n\t\n\t      // line style\n\t      var lineStyleSymbols = line.split('@>');\n\t      for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t\n\t        if ((i+1) != lenS){\n\t          var curSymb = getSymbol(lineStyleSymbols[i]);\n\t          var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t          curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\n\t        }\n\t      }\n\t    }\n\t\n\t  }\n\t  return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n  !*** ./src/flowchart.symbol.condition.js ***!\n  \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t  options = options || {};\n\t  Symbol.call(this, chart, options);\n\t  this.textMargin = this.getAttr('text-margin');\n\t  this.yes_direction = 'bottom';\n\t  this.no_direction = 'right';\n\t  this.params = options.params;\n\t  if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t    if (options.direction_yes === 'right') {\n\t      this.no_direction = 'bottom';\n\t      this.yes_direction = 'right';\n\t    } else {\n\t      this.no_direction = 'right';\n\t      this.yes_direction = 'bottom';\n\t    }\n\t  } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t    if (options.direction_no === 'right') {\n\t      this.yes_direction = 'bottom';\n\t      this.no_direction = 'right';\n\t    } else {\n\t      this.yes_direction = 'right';\n\t      this.no_direction = 'bottom';\n\t    }\n\t  } else {\n\t    this.yes_direction = 'bottom';\n\t    this.no_direction = 'right';\n\t  }\n\t\n\t  this.yes_direction = this.yes_direction || 'bottom';\n\t  this.no_direction = this.no_direction || 'right';\n\t\n\t  this.text.attr({\n\t    x: this.textMargin * 2\n\t  });\n\t\n\t  var width = this.text.getBBox().width + 3 * this.textMargin;\n\t  width += width/2;\n\t  var height = this.text.getBBox().height + 2 * this.textMargin;\n\t  height += height/2;\n\t  height = Math.max(width * 0.5, height);\n\t  var startX = width/4;\n\t  var startY = height/4;\n\t\n\t  this.text.attr({\n\t    x: startX + this.textMargin/2\n\t  });\n\t\n\t  var start = {x: startX, y: startY};\n\t  var points = [\n\t    {x: startX - width/4, y: startY + height/4},\n\t    {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t    {x: startX - width/4 + width, y: startY + height/4},\n\t    {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t    {x: startX - width/4, y: startY + height/4}\n\t  ];\n\t\n\t  var symbol = drawPath(chart, start, points);\n\t\n\t  symbol.attr({\n\t    stroke: this.getAttr('element-color'),\n\t    'stroke-width': this.getAttr('line-width'),\n\t    fill: this.getAttr('fill')\n\t  });\n\t  if (options.link) { symbol.attr('href', options.link); }\n\t  if (options.target) { symbol.attr('target', options.target); }\n\t  if (options.key) { symbol.node.id = options.key; }\n\t  symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t  this.text.attr({\n\t    y: symbol.getBBox().height/2\n\t  });\n\t\n\t  this.group.push(symbol);\n\t  symbol.insertBefore(this.text);\n\t\n\t  this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t  if (this.yes_direction) {\n\t    this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t  }\n\t\n\t  if (this.no_direction) {\n\t    this[this.no_direction + '_symbol'] = this.no_symbol;\n\t  }\n\t\n\t  var lineLength = this.getAttr('line-length');\n\t\n\t  if (this.bottom_symbol) {\n\t    var bottomPoint = this.getBottom();\n\t\n\t    if (!this.bottom_symbol.isPositioned) {\n\t      this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t      this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t      this.bottom_symbol.isPositioned = true;\n\t\n\t      this.bottom_symbol.render();\n\t    }\n\t  }\n\t\n\t  if (this.right_symbol) {\n\t    var rightPoint = this.getRight();\n\t\n\t    if (!this.right_symbol.isPositioned) {\n\t\n\t      this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t      this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t      var self = this;\n\t      (function shift() {\n\t        var hasSymbolUnder = false;\n\t        var symb;\n\t        for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t          symb = self.chart.symbols[i];\n\t\n\t          if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t            var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t            if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t              hasSymbolUnder = true;\n\t              break;\n\t            }\n\t          }\n\t        }\n\t\n\t        if (hasSymbolUnder) {\n\t          self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t          shift();\n\t        }\n\t      })();\n\t\n\t      this.right_symbol.isPositioned = true;\n\t\n\t      this.right_symbol.render();\n\t    }\n\t  }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t  if (this.yes_symbol) {\n\t    this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t  }\n\t\n\t  if (this.no_symbol) {\n\t    this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t  }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!********************************!*\\\n  !*** ./src/flowchart.chart.js ***!\n  \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\t\n\tfunction FlowChart(container, options) {\n\t  options = options || {};\n\t\n\t  this.paper = new Raphael(container);\n\t\n\t  this.options = defaults(options, defaultOptions);\n\t\n\t  this.symbols = [];\n\t  this.lines = [];\n\t  this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t  if (this.symbols.indexOf(symbol) <= -1) {\n\t    this.symbols.push(symbol);\n\t  }\n\t\n\t  var flowChart = this;\n\t\n\t  if (symbol instanceof(Condition)) {\n\t    symbol.yes = function(nextSymbol) {\n\t      symbol.yes_symbol = nextSymbol;\n\t      if(symbol.no_symbol) {\n\t        symbol.pathOk = true;\n\t      }\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t    symbol.no = function(nextSymbol) {\n\t      symbol.no_symbol = nextSymbol;\n\t      if(symbol.yes_symbol) {\n\t        symbol.pathOk = true;\n\t      }\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t  } else {\n\t    symbol.then = function(nextSymbol) {\n\t      symbol.next = nextSymbol;\n\t      symbol.pathOk = true;\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t  }\n\t\n\t  return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t  this.start = symbol;\n\t  return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t  var maxWidth = 0,\n\t      maxHeight = 0,\n\t      i = 0,\n\t      len = 0,\n\t      maxX = 0,\n\t      maxY = 0,\n\t      minX = 0,\n\t      minY = 0,\n\t      symbol,\n\t      line;\n\t\n\t  for (i = 0, len = this.symbols.length; i < len; i++) {\n\t    symbol = this.symbols[i];\n\t    if (symbol.width > maxWidth) {\n\t      maxWidth = symbol.width;\n\t    }\n\t    if (symbol.height > maxHeight) {\n\t      maxHeight = symbol.height;\n\t    }\n\t  }\n\t\n\t  for (i = 0, len = this.symbols.length; i < len; i++) {\n\t    symbol = this.symbols[i];\n\t    symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t    symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t  }\n\t\n\t  this.start.render();\n\t  // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t  //   symbol = this.symbols[i];\n\t  //   symbol.render();\n\t  // }\n\t\n\t  for (i = 0, len = this.symbols.length; i < len; i++) {\n\t    symbol = this.symbols[i];\n\t    symbol.renderLines();\n\t  }\n\t\n\t  maxX = this.maxXFromLine;\n\t\n\t  var x;\n\t  var y;\n\t\n\t  for (i = 0, len = this.symbols.length; i < len; i++) {\n\t    symbol = this.symbols[i];\n\t    x = symbol.getX() + symbol.width;\n\t    y = symbol.getY() + symbol.height;\n\t    if (x > maxX) {\n\t      maxX = x;\n\t    }\n\t    if (y > maxY) {\n\t      maxY = y;\n\t    }\n\t  }\n\t\n\t  for (i = 0, len = this.lines.length; i < len; i++) {\n\t    line = this.lines[i].getBBox();\n\t    x = line.x;\n\t    y = line.y;\n\t    var x2 = line.x2;\n\t    var y2 = line.y2;\n\t    if (x < minX) {\n\t      minX = x;\n\t    }\n\t    if (y < minY) {\n\t      minY = y;\n\t    }\n\t    if (x2 > maxX) {\n\t      maxX = x2;\n\t    }\n\t    if (y2 > maxY) {\n\t      maxY = y2;\n\t    }\n\t  }\n\t\n\t  var scale = this.options['scale'];\n\t  var lineWidth = this.options['line-width'];\n\t\n\t  if (minX < 0) minX -= lineWidth;\n\t  if (minY < 0) minY -= lineWidth;\n\t\n\t  var width = maxX + lineWidth - minX;\n\t  var height = maxY + lineWidth - minY;\n\t\n\t  this.paper.setSize(width * scale, height * scale);\n\t  this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t  if (this.paper) {\n\t    var paperDom = this.paper.canvas;\n\t    paperDom.parentNode.removeChild(paperDom);\n\t  }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 7 */\n/*!***********************************!*\\\n  !*** ./src/flowchart.defaults.js ***!\n  \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t  'x': 0,\n\t  'y': 0,\n\t  'line-width': 3,\n\t  'line-length': 50,\n\t  'text-margin': 10,\n\t  'font-size': 14,\n\t  'font-color': 'black',\n\t  // 'font': 'normal',\n\t  // 'font-family': 'calibri',\n\t  // 'font-weight': 'normal',\n\t  'line-color': 'black',\n\t  'element-color': 'black',\n\t  'fill': 'white',\n\t  'yes-text': 'yes',\n\t  'no-text': 'no',\n\t  'arrow-end': 'block',\n\t  'class': 'flowchart',\n\t  'scale': 1,\n\t  'symbols': {\n\t    'start': {},\n\t    'end': {},\n\t    'condition': {},\n\t    'inputoutput': {},\n\t    'operation': {},\n\t    'subroutine': {}\n\t  }//,\n\t  // 'flowstate' : {\n\t  //   'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t  //   'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t  //   'future' : { 'fill': '#FFFF99'},\n\t  //   'invalid': {'fill': '#444444'}\n\t  // }\n\t};\n\n\n/***/ }),\n/* 8 */\n/*!*******************************!*\\\n  !*** ./src/flowchart.shim.js ***!\n  \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t  Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t    \""use strict\"";\n\t    if (this === null) {\n\t      throw new TypeError();\n\t    }\n\t    var t = Object(this);\n\t    var len = t.length >>> 0;\n\t    if (len === 0) {\n\t      return -1;\n\t    }\n\t    var n = 0;\n\t    if (arguments.length > 0) {\n\t      n = Number(arguments[1]);\n\t      if (n != n) { // shortcut for verifying if it's NaN\n\t        n = 0;\n\t      } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t      }\n\t    }\n\t    if (n >= len) {\n\t      return -1;\n\t    }\n\t    var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t    for (; k < len; k++) {\n\t      if (k in t && t[k] === searchElement) {\n\t        return k;\n\t      }\n\t    }\n\t    return -1;\n\t  };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t  Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t    \""use strict\"";\n\t    if (this === null) {\n\t      throw new TypeError();\n\t    }\n\t    var t = Object(this);\n\t    var len = t.length >>> 0;\n\t    if (len === 0) {\n\t      return -1;\n\t    }\n\t    var n = len;\n\t    if (arguments.length > 1) {\n\t      n = Number(arguments[1]);\n\t      if (n != n) {\n\t        n = 0;\n\t      } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t      }\n\t    }\n\t    var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t    for (; k >= 0; k--) {\n\t      if (k in t && t[k] === searchElement) {\n\t        return k;\n\t      }\n\t    }\n\t    return -1;\n\t  };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t  String.prototype.trim = function() {\n\t    return this.replace(/^\\s+|\\s+$/g, '');\n\t  };\n\t}\n\n/***/ }),\n/* 9 */\n/*!*************************************!*\\\n  !*** ./src/flowchart.symbol.end.js ***!\n  \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t  options = options || {};\n\t  options.text = options.text || 'End';\n\t  Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 10 */\n/*!*********************************************!*\\\n  !*** ./src/flowchart.symbol.inputoutput.js ***!\n  \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t  options = options || {};\n\t  Symbol.call(this, chart, options);\n\t  this.textMargin = this.getAttr('text-margin');\n\t\n\t  this.text.attr({\n\t    x: this.textMargin * 3\n\t  });\n\t\n\t  var width = this.text.getBBox().width + 4 * this.textMargin;\n\t  var height = this.text.getBBox().height + 2 * this.textMargin;\n\t  var startX = this.textMargin;\n\t  var startY = height/2;\n\t\n\t  var start = {x: startX, y: startY};\n\t  var points = [\n\t    {x: startX - this.textMargin, y: height},\n\t    {x: startX - this.textMargin + width, y: height},\n\t    {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t    {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t    {x: startX, y: startY}\n\t  ];\n\t\n\t  var symbol = drawPath(chart, start, points);\n\t\n\t  symbol.attr({\n\t    stroke: this.getAttr('element-color'),\n\t    'stroke-width': this.getAttr('line-width'),\n\t    fill: this.getAttr('fill')\n\t  });\n\t  if (options.link) { symbol.attr('href', options.link); }\n\t  if (options.target) { symbol.attr('target', options.target); }\n\t  if (options.key) { symbol.node.id = options.key; }\n\t  symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t  this.text.attr({\n\t    y: symbol.getBBox().height/2\n\t  });\n\t\n\t  this.group.push(symbol);\n\t  symbol.insertBefore(this.text);\n\t\n\t  this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t  var y = this.getY() + this.group.getBBox().height/2;\n\t  var x = this.getX() + this.textMargin;\n\t  return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t  var y = this.getY() + this.group.getBBox().height/2;\n\t  var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t  return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 11 */\n/*!*******************************************!*\\\n  !*** ./src/flowchart.symbol.operation.js ***!\n  \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0);\n\t  options = options || {};\n\t  Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 12 */\n/*!***************************************!*\\\n  !*** ./src/flowchart.symbol.start.js ***!\n  \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t  options = options || {};\n\t  options.text = options.text || 'Start';\n\t  Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t//   if (this.next) {\n\t//     var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t//     var bottomPoint = this.getBottom();\n\t//     var topPoint = this.next.getTop();\n\t\n\t//     if (!this.next.isPositioned) {\n\t//       this.next.shiftY(this.getY() + this.height + lineLength);\n\t//       this.next.setX(bottomPoint.x - this.next.width/2);\n\t//       this.next.isPositioned = true;\n\t\n\t//       this.next.render();\n\t//     }\n\t//   }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t//   if (this.next) {\n\t//     this.drawLineTo(this.next);\n\t//   }\n\t// };\n\n\n/***/ }),\n/* 13 */\n/*!********************************************!*\\\n  !*** ./src/flowchart.symbol.subroutine.js ***!\n  \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0);\n\t  options = options || {};\n\t  Symbol.call(this, chart, options, symbol);\n\t\n\t  symbol.attr({\n\t    width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t  });\n\t\n\t  this.text.attr({\n\t    'x': 2 * this.getAttr('text-margin')\n\t  });\n\t\n\t  var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t  innerWrap.attr({\n\t    x: this.getAttr('text-margin'),\n\t    stroke: this.getAttr('element-color'),\n\t    'stroke-width': this.getAttr('line-width'),\n\t    width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t    height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t    fill: this.getAttr('fill')\n\t  });\n\t  if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t  var font = this.getAttr('font');\n\t  var fontF = this.getAttr('font-family');\n\t  var fontW = this.getAttr('font-weight');\n\t\n\t  if (font) innerWrap.attr({ 'font': font });\n\t  if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t  if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t  if (options.link) { innerWrap.attr('href', options.link); }\n\t  if (options.target) { innerWrap.attr('target', options.target); }\n\t  this.group.push(innerWrap);\n\t  innerWrap.insertBefore(this.text);\n\t\n\t  this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 14 */\n/*!******************************!*\\\n  !*** ./src/jquery-plugin.js ***!\n  \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 15 */\n/*!**************************!*\\\n  !*** external \""Raphael\"" ***!\n  \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"","" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \""\"";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9641fd1c459d3101ba07"",""require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0"",""function _defaults(options, defaultOptions) {\n  if (!options || typeof options === 'function') {\n    return defaultOptions;\n  }\n\n  var merged = {};\n  for (var attrname in defaultOptions) {\n    merged[attrname] = defaultOptions[attrname];\n  }\n\n  for (attrname in options) {\n    if (options[attrname]) {\n      if (typeof merged[attrname] === 'object') {\n        merged[attrname] = _defaults(merged[attrname], options[attrname]);\n      } else {\n        merged[attrname] = options[attrname];\n      }\n    }\n  }\n  return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n  if (typeof(Object.create) === 'function') {\n    // implementation from standard node.js 'util' module\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  } else {\n    // old school shim for old browsers\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n  defaults: _defaults,\n  inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0"",""var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n  this.chart = chart;\n  this.group = this.chart.paper.set();\n  this.symbol = symbol;\n  this.connectedTo = [];\n  this.symbolType = options.symbolType;\n  this.flowstate = (options.flowstate || 'future');\n  this.lineStyle = (options.lineStyle || {});\n  this.key = (options.key || '');\n\n  this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n  this.text = this.chart.paper.text(0, 0, options.text);\n  //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n  if (options.key) { this.text.node.id = options.key + 't'; }\n  this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n  this.text.attr({\n    'text-anchor': 'start',\n    'x'          : this.getAttr('text-margin'),\n    'fill'       : this.getAttr('font-color'),\n    'font-size'  : this.getAttr('font-size')\n  });\n\n  var font  = this.getAttr('font');\n  var fontF = this.getAttr('font-family');\n  var fontW = this.getAttr('font-weight');\n\n  if (font) this.text.attr({ 'font': font });\n  if (fontF) this.text.attr({ 'font-family': fontF });\n  if (fontW) this.text.attr({ 'font-weight': fontW });\n\n  if (options.link) { this.text.attr('href', options.link); }\n  if (options.target) { this.text.attr('target', options.target); }\n\n  var maxWidth = this.getAttr('maxWidth');\n  if (maxWidth) {\n    // using this approach: http://stackoverflow.com/a/3153457/22466\n    var words = options.text.split(' ');\n    var tempText = \""\"";\n    for (var i=0, ii=words.length; i<ii; i++) {\n      var word = words[i];\n      this.text.attr(\""text\"", tempText + \"" \"" + word);\n      if (this.text.getBBox().width > maxWidth) {\n        tempText += \""\\n\"" + word;\n      } else {\n        tempText += \"" \"" + word;\n      }\n    }\n    this.text.attr(\""text\"", tempText.substring(1));\n  }\n\n  this.group.push(this.text);\n\n  if (symbol) {\n    var tmpMargin = this.getAttr('text-margin');\n\n    symbol.attr({\n      'fill' : this.getAttr('fill'),\n      'stroke' : this.getAttr('element-color'),\n      'stroke-width' : this.getAttr('line-width'),\n      'width' : this.text.getBBox().width + 2 * tmpMargin,\n      'height' : this.text.getBBox().height + 2 * tmpMargin\n    });\n\n    symbol.node.setAttribute('class', this.getAttr('class'));\n\n    if (options.link) { symbol.attr('href', options.link); }\n    if (options.target) { symbol.attr('target', options.target); }\n    if (options.key) { symbol.node.id = options.key; }\n\n    this.group.push(symbol);\n    symbol.insertBefore(this.text);\n\n    this.text.attr({\n      'y': symbol.getBBox().height/2\n    });\n\n    this.initialize();\n  }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n  if (!this.chart) {\n    return undefined;\n  }\n  var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n  var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n  var opt1;\n  if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n    opt1 = this.chart.options.flowstate[this.flowstate][attName];\n  }\n  return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n  this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n  this.width = this.group.getBBox().width;\n  this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n  return {x: this.getX() + this.width/2,\n          y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n  return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n  return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n  this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n  this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n  this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n  this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n  var y = this.getY();\n  var x = this.getX() + this.width/2;\n  return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n  var y = this.getY() + this.height;\n  var x = this.getX() + this.width/2;\n  return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n  var y = this.getY() + this.group.getBBox().height/2;\n  var x = this.getX();\n  return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n  var y = this.getY() + this.group.getBBox().height/2;\n  var x = this.getX() + this.group.getBBox().width;\n  return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n  if (this.next) {\n\n    var lineLength = this.getAttr('line-length');\n\n    if (this.next_direction === 'right') {\n\n      var rightPoint = this.getRight();\n\n      if (!this.next.isPositioned) {\n\n        this.next.setY(rightPoint.y - this.next.height/2);\n        this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n        var self = this;\n        (function shift() {\n          var hasSymbolUnder = false;\n          var symb;\n          for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n            symb = self.chart.symbols[i];\n\n            var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n            if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n              hasSymbolUnder = true;\n              break;\n            }\n          }\n\n          if (hasSymbolUnder) {\n            self.next.setX(symb.getX() + symb.width + lineLength);\n            shift();\n          }\n        })();\n\n        this.next.isPositioned = true;\n\n        this.next.render();\n      }\n    } else {\n      var bottomPoint = this.getBottom();\n\n      if (!this.next.isPositioned) {\n        this.next.shiftY(this.getY() + this.height + lineLength);\n        this.next.setX(bottomPoint.x - this.next.width/2);\n        this.next.isPositioned = true;\n\n        this.next.render();\n      }\n    }\n  }\n};\n\nSymbol.prototype.renderLines = function() {\n  if (this.next) {\n    if (this.next_direction) {\n      this.drawLineTo(this.next, '', this.next_direction);\n    } else {\n      this.drawLineTo(this.next);\n    }\n  }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n  if (this.connectedTo.indexOf(symbol) < 0) {\n    this.connectedTo.push(symbol);\n  }\n\n  var x = this.getCenter().x,\n      y = this.getCenter().y,\n      right = this.getRight(),\n      bottom = this.getBottom(),\n      left = this.getLeft();\n\n  var symbolX = symbol.getCenter().x,\n      symbolY = symbol.getCenter().y,\n      symbolTop = symbol.getTop(),\n      symbolRight = symbol.getRight(),\n      symbolLeft = symbol.getLeft();\n\n  var isOnSameColumn = x === symbolX,\n      isOnSameLine = y === symbolY,\n      isUnder = y < symbolY,\n      isUpper = y > symbolY || this === symbol,\n      isLeft = x > symbolX,\n      isRight = x < symbolX;\n\n  var maxX = 0,\n      line,\n      lineLength = this.getAttr('line-length'),\n      lineWith = this.getAttr('line-width');\n\n  if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n    line = drawLine(this.chart, bottom, symbolTop, text);\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x;\n  } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n    line = drawLine(this.chart, right, symbolLeft, text);\n    this.rightStart = true;\n    symbol.leftEnd = true;\n    maxX = symbolLeft.x;\n  } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n    line = drawLine(this.chart, left, symbolRight, text);\n    this.leftStart = true;\n    symbol.rightEnd = true;\n    maxX = symbolRight.x;\n  } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n    line = drawLine(this.chart, right, [\n      {x: right.x + lineLength/2, y: right.y},\n      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.rightStart = true;\n    symbol.topEnd = true;\n    maxX = right.x + lineLength/2;\n  } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n    line = drawLine(this.chart, right, [\n      {x: right.x + lineLength/2, y: right.y},\n      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.rightStart = true;\n    symbol.topEnd = true;\n    maxX = right.x + lineLength/2;\n  } else if ((!origin || origin === 'bottom') && isLeft) {\n    if (this.leftEnd && isUpper) {\n      line = drawLine(this.chart, bottom, [\n        {x: bottom.x, y: bottom.y + lineLength/2},\n        {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n        {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n        {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n        {x: symbolTop.x, y: symbolTop.y}\n      ], text);\n    } else {\n      line = drawLine(this.chart, bottom, [\n        {x: bottom.x, y: symbolTop.y - lineLength/2},\n        {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n        {x: symbolTop.x, y: symbolTop.y}\n      ], text);\n    }\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n  } else if ((!origin || origin === 'bottom') && isRight) {\n    line = drawLine(this.chart, bottom, [\n      {x: bottom.x, y: bottom.y + lineLength/2},\n      {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n      {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n  } else if ((origin && origin === 'right') && isLeft) {\n    line = drawLine(this.chart, right, [\n      {x: right.x + lineLength/2, y: right.y},\n      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.rightStart = true;\n    symbol.topEnd = true;\n    maxX = right.x + lineLength/2;\n  } else if ((origin && origin === 'right') && isRight) {\n    line = drawLine(this.chart, right, [\n      {x: symbolTop.x, y: right.y},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.rightStart = true;\n    symbol.topEnd = true;\n    maxX = right.x + lineLength/2;\n  } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n    line = drawLine(this.chart, bottom, [\n      {x: bottom.x, y: bottom.y + lineLength/2},\n      {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x + lineLength/2;\n  } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n    var diffX = left.x - lineLength/2;\n    if (symbolLeft.x < left.x) {\n      diffX = symbolLeft.x - lineLength/2;\n    }\n    line = drawLine(this.chart, left, [\n      {x: diffX, y: left.y},\n      {x: diffX, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.leftStart = true;\n    symbol.topEnd = true;\n    maxX = left.x;\n  } else if ((origin === 'left')) {\n    line = drawLine(this.chart, left, [\n      {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: left.y},\n      {x: symbolTop.x + (left.x - symbolTop.x)/ 2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.leftStart = true;\n    symbol.topEnd = true;\n    maxX = left.x;\n  }\n\n  //update line style\n  if (this.lineStyle[symbol.key] && line){\n      line.attr( this.lineStyle[symbol.key]);\n  }\n\n  if (line) {\n    for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n      var otherLine = this.chart.lines[l];\n      var len;\n\n      var ePath = otherLine.attr('path'),\n          lPath = line.attr('path');\n\n      for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n        var newPath = [];\n        newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n        newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n        var line1_from_x = newPath[0][1];\n        var line1_from_y = newPath[0][2];\n        var line1_to_x = newPath[1][1];\n        var line1_to_y = newPath[1][2];\n\n        for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n          var newLinePath = [];\n          newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n          newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n          var line2_from_x = newLinePath[0][1];\n          var line2_from_y = newLinePath[0][2];\n          var line2_to_x = newLinePath[1][1];\n          var line2_to_y = newLinePath[1][2];\n\n          var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n          if (res.onLine1 && res.onLine2) {\n\n            var newSegment;\n            if (line2_from_y === line2_to_y) {\n              if (line2_from_x > line2_to_x) {\n                newSegment = ['L', res.x + lineWith * 2,  line2_from_y];\n                lPath.splice(lP + 1, 0, newSegment);\n                newSegment = ['C', res.x + lineWith * 2,  line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n                lPath.splice(lP + 2, 0, newSegment);\n                line.attr('path', lPath);\n              } else {\n                newSegment = ['L', res.x - lineWith * 2,  line2_from_y];\n                lPath.splice(lP + 1, 0, newSegment);\n                newSegment = ['C', res.x - lineWith * 2,  line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n                lPath.splice(lP + 2, 0, newSegment);\n                line.attr('path', lPath);\n              }\n            } else {\n              if (line2_from_y > line2_to_y) {\n                newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n                lPath.splice(lP + 1, 0, newSegment);\n                newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n                lPath.splice(lP + 2, 0, newSegment);\n                line.attr('path', lPath);\n              } else {\n                newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n                lPath.splice(lP + 1, 0, newSegment);\n                newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n                lPath.splice(lP + 2, 0, newSegment);\n                line.attr('path', lPath);\n              }\n            }\n\n            lP += 2;\n            len += 2;\n          }\n        }\n      }\n    }\n\n    this.chart.lines.push(line);\n  }\n\n  if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n    this.chart.maxXFromLine = maxX;\n  }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0"",""function drawPath(chart, location, points) {\n  var i, len;\n  var path = 'M{0},{1}';\n  for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n    path += ' L{' + i + '},{' + (i + 1) + '}';\n  }\n  var pathValues = [location.x, location.y];\n  for (i = 0, len = points.length; i < len; i++) {\n    pathValues.push(points[i].x);\n    pathValues.push(points[i].y);\n  }\n  var symbol = chart.paper.path(path, pathValues);\n  symbol.attr('stroke', chart.options['element-color']);\n  symbol.attr('stroke-width', chart.options['line-width']);\n\n  var font = chart.options.font;\n  var fontF = chart.options['font-family'];\n  var fontW = chart.options['font-weight'];\n\n  if (font) symbol.attr({ 'font': font });\n  if (fontF) symbol.attr({ 'font-family': fontF });\n  if (fontW) symbol.attr({ 'font-weight': fontW });\n\n  return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n  var i, len;\n\n  if (Object.prototype.toString.call(to) !== '[object Array]') {\n    to = [to];\n  }\n\n  var path = 'M{0},{1}';\n  for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n    path += ' L{' + i + '},{' + (i + 1) + '}';\n  }\n  var pathValues = [from.x, from.y];\n  for (i = 0, len = to.length; i < len; i++) {\n    pathValues.push(to[i].x);\n    pathValues.push(to[i].y);\n  }\n\n  var line = chart.paper.path(path, pathValues);\n  line.attr({\n    stroke: chart.options['line-color'],\n    'stroke-width': chart.options['line-width'],\n    'arrow-end': chart.options['arrow-end']\n  });\n\n  var font = chart.options.font;\n  var fontF = chart.options['font-family'];\n  var fontW = chart.options['font-weight'];\n\n  if (font) line.attr({ 'font': font });\n  if (fontF) line.attr({ 'font-family': fontF });\n  if (fontW) line.attr({ 'font-weight': fontW });\n\n  if (text) {\n\n    var centerText = false;\n\n    var textPath = chart.paper.text(0, 0, text);\n\n    var isHorizontal = false;\n    var firstTo = to[0];\n\n    if (from.y === firstTo.y) {\n      isHorizontal = true;\n    }\n\n    var x = 0,\n        y = 0;\n\n    if (centerText) {\n      if (from.x > firstTo.x) {\n        x = from.x - (from.x - firstTo.x)/2;\n      } else {\n        x = firstTo.x - (firstTo.x - from.x)/2;\n      }\n\n      if (from.y > firstTo.y) {\n        y = from.y - (from.y - firstTo.y)/2;\n      } else {\n        y = firstTo.y - (firstTo.y - from.y)/2;\n      }\n\n      if (isHorizontal) {\n        x -= textPath.getBBox().width/2;\n        y -= chart.options['text-margin'];\n      } else {\n        x += chart.options['text-margin'];\n        y -= textPath.getBBox().height/2;\n      }\n    } else {\n      x = from.x;\n      y = from.y;\n\n      if (isHorizontal) {\n        x += chart.options['text-margin']/2;\n        y -= chart.options['text-margin'];\n      } else {\n        x += chart.options['text-margin']/2;\n        y += chart.options['text-margin'];\n      }\n    }\n\n    textPath.attr({\n      'text-anchor': 'start',\n      'font-size': chart.options['font-size'],\n      'fill': chart.options['font-color'],\n      x: x,\n      y: y\n    });\n\n    if (font) textPath.attr({ 'font': font });\n    if (fontF) textPath.attr({ 'font-family': fontF });\n    if (fontW) textPath.attr({ 'font-weight': fontW });\n  }\n\n  return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n  // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n  var denominator, a, b, numerator1, numerator2, result = {\n    x: null,\n    y: null,\n    onLine1: false,\n    onLine2: false\n  };\n  denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n  if (denominator === 0) {\n    return result;\n  }\n  a = line1StartY - line2StartY;\n  b = line1StartX - line2StartX;\n  numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n  numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n  a = numerator1 / denominator;\n  b = numerator2 / denominator;\n\n  // if we cast these lines infinitely in both directions, they intersect here:\n  result.x = line1StartX + (a * (line1EndX - line1StartX));\n  result.y = line1StartY + (a * (line1EndY - line1StartY));\n  /*\n  // it is worth noting that this should be the same as:\n  x = line2StartX + (b * (line2EndX - line2StartX));\n  y = line2StartX + (b * (line2EndY - line2StartY));\n  */\n  // if line1 is a segment and line2 is infinite, they intersect if:\n  if (a > 0 && a < 1) {\n    result.onLine1 = true;\n  }\n  // if line2 is a segment and line1 is infinite, they intersect if:\n  if (b > 0 && b < 1) {\n    result.onLine2 = true;\n  }\n  // if line1 and line2 are segments, they intersect if both of the above are true\n  return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0"",""var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction parse(input) {\n  input = input || '';\n  input = input.trim();\n\n  var chart = {\n    symbols: {},\n    start: null,\n    drawSVG: function(container, options) {\n      var self = this;\n\n      if (this.diagram) {\n        this.diagram.clean();\n      }\n\n      var diagram = new FlowChart(container, options);\n      this.diagram = diagram;\n      var dispSymbols = {};\n\n      function getDisplaySymbol(s) {\n        if (dispSymbols[s.key]) {\n          return dispSymbols[s.key];\n        }\n\n        switch (s.symbolType) {\n          case 'start':\n            dispSymbols[s.key] = new Start(diagram, s);\n            break;\n          case 'end':\n            dispSymbols[s.key] = new End(diagram, s);\n            break;\n          case 'operation':\n            dispSymbols[s.key] = new Operation(diagram, s);\n            break;\n          case 'inputoutput':\n            dispSymbols[s.key] = new InputOutput(diagram, s); \n            break;\n          case 'subroutine':\n            dispSymbols[s.key] = new Subroutine(diagram, s);\n            break;\n          case 'condition':\n            dispSymbols[s.key] = new Condition(diagram, s);\n            break;\n          default:\n            return new Error('Wrong symbol type!');\n        }\n\n        return dispSymbols[s.key];\n      }\n\n      (function constructChart(s, prevDisp, prev) {\n        var dispSymb = getDisplaySymbol(s);\n\n        if (self.start === s) {\n          diagram.startWith(dispSymb);\n        } else if (prevDisp && prev && !prevDisp.pathOk) {\n          if (prevDisp instanceof(Condition)) {\n            if (prev.yes === s) {\n              prevDisp.yes(dispSymb);\n            }\n            if (prev.no === s) {\n              prevDisp.no(dispSymb);\n            }\n          } else {\n            prevDisp.then(dispSymb);\n          }\n        }\n\n        if (dispSymb.pathOk) {\n          return dispSymb;\n        }\n\n        if (dispSymb instanceof(Condition)) {\n          if (s.yes) {\n            constructChart(s.yes, dispSymb, s);\n          }\n          if (s.no) {\n            constructChart(s.no, dispSymb, s);\n          }\n        } else if (s.next) {\n          constructChart(s.next, dispSymb, s);\n        }\n\n        return dispSymb;\n      })(this.start);\n\n      diagram.render();\n    },\n    clean: function() {\n      this.diagram.clean();\n    }\n  };\n\n  var lines = [];\n  var prevBreak = 0;\n  for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n    if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n      var line0 = input.substring(prevBreak, i0);\n      prevBreak = i0 + 1;\n      lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n    }\n  }\n\n  if(prevBreak < input.length) {\n    lines.push(input.substr(prevBreak));\n  }\n\n  for (var l = 1, len = lines.length; l < len;) {\n    var currentLine = lines[l];\n\n    if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n      lines[l - 1] += '\\n' + currentLine;\n      lines.splice(l, 1);\n      len--;\n    } else {\n      l++;\n    }\n  }\n\n  function getStyle(s){\n    var startIndex = s.indexOf('(') + 1;\n    var endIndex = s.indexOf(')');\n    if (startIndex >= 0 && endIndex >= 0) {\n      return s.substring(startIndex,endIndex);\n    }\n    return '{}';\n  }\n\n  function getSymbValue(s){\n    var startIndex = s.indexOf('(') + 1;\n    var endIndex = s.indexOf(')');\n    if (startIndex >= 0 && endIndex >= 0) {\n      return s.substring(startIndex,endIndex);\n    }\n    return '';\n  }\n\n  function getSymbol(s) {\n    var startIndex = s.indexOf('(') + 1;\n    var endIndex = s.indexOf(')');\n    if (startIndex >= 0 && endIndex >= 0) {\n      return chart.symbols[s.substring(0, startIndex - 1)];   \n    }\n    return chart.symbols[s];\n  }\n\n  function getNextPath(s) {\n    var next = 'next';\n    var startIndex = s.indexOf('(') + 1;\n    var endIndex = s.indexOf(')');\n    if (startIndex >= 0 && endIndex >= 0) {\n      next = flowSymb.substring(startIndex, endIndex);\n      if (next.indexOf(',') < 0) {\n        if (next !== 'yes' && next !== 'no') {\n          next = 'next, ' + next;\n        }\n      }\n    }\n    return next;\n  }\n\n  while (lines.length > 0) {\n    var line = lines.splice(0, 1)[0].trim();\n\n    if (line.indexOf('=>') >= 0) {\n      // definition\n      var parts = line.split('=>');\n      var symbol = {\n        key: parts[0].replace(/\\(.*\\)/, ''),\n        symbolType: parts[1],\n        text: null,\n        link: null,\n        target: null,\n        flowstate: null,\n        lineStyle: {},\n        params: {}\n      };\n\n      //parse parameters\n      var params = parts[0].match(/\\((.*)\\)/);\n      if (params && params.length > 1){\n        var entries = params[1].split(',');\n        for(var i = 0; i < entries.length; i++) {\n          var entry = entries[0].split('=');\n          if (entry.length == 2){\n            symbol.params[entry[0]] = entry[1];\n          }\n        }\n      }\n\n      var sub;\n\n      if (symbol.symbolType.indexOf(': ') >= 0) {\n        sub = symbol.symbolType.split(': ');\n        symbol.symbolType = sub.shift();\n        symbol.text = sub.join(': ');\n      }\n\n      if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n        sub = symbol.text.split(':>');\n        symbol.text = sub.shift();\n        symbol.link = sub.join(':>');\n      } else if (symbol.symbolType.indexOf(':>') >= 0) {\n        sub = symbol.symbolType.split(':>');\n        symbol.symbolType = sub.shift();\n        symbol.link = sub.join(':>');\n      }\n\n      if (symbol.symbolType.indexOf('\\n') >= 0) {\n        symbol.symbolType = symbol.symbolType.split('\\n')[0];\n      }\n\n      /* adding support for links */\n      if (symbol.link) {\n        var startIndex = symbol.link.indexOf('[') + 1;\n        var endIndex = symbol.link.indexOf(']');\n        if (startIndex >= 0 && endIndex >= 0) {\n          symbol.target = symbol.link.substring(startIndex, endIndex);\n          symbol.link = symbol.link.substring(0, startIndex - 1);\n        }\n      }\n      /* end of link support */\n\n      /* adding support for flowstates */\n      if (symbol.text) {\n        if (symbol.text.indexOf('|') >= 0) {\n          var txtAndState = symbol.text.split('|');\n          symbol.flowstate = txtAndState.pop().trim();\n          symbol.text = txtAndState.join('|');\n        }\n      }\n      /* end of flowstate support */\n\n      chart.symbols[symbol.key] = symbol;\n\n    } else if (line.indexOf('->') >= 0) {\n      // flow\n      var flowSymbols = line.split('->');\n      for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n        var flowSymb = flowSymbols[i];\n        var symbVal = getSymbValue(flowSymb);\n\n        if (symbVal === 'true' || symbVal === 'false') {\n          // map true or false to yes or no respectively\n          flowSymb = flowSymb.replace('true', 'yes');\n          flowSymb = flowSymb.replace('false', 'no');\n        }\n\n        var realSymb = getSymbol(flowSymb);\n        var next = getNextPath(flowSymb);\n\n        var direction = null;\n        if (next.indexOf(',') >= 0) {\n          var condOpt = next.split(',');\n          next = condOpt[0];\n          direction = condOpt[1].trim();\n        }\n\n        if (!chart.start) {\n          chart.start = realSymb;\n        }\n\n        if (i + 1 < lenS) {\n          var nextSymb = flowSymbols[i + 1];\n          realSymb[next] = getSymbol(nextSymb);\n          realSymb['direction_' + next] = direction;\n          direction = null;\n        }\n      }\n    } else if (line.indexOf('@>') >= 0) {\n\n      // line style\n      var lineStyleSymbols = line.split('@>');\n      for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\n        if ((i+1) != lenS){\n          var curSymb = getSymbol(lineStyleSymbols[i]);\n          var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n          curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i+1]));\n        }\n      }\n    }\n\n  }\n  return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0"",""var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n  options = options || {};\n  Symbol.call(this, chart, options);\n  this.textMargin = this.getAttr('text-margin');\n  this.yes_direction = 'bottom';\n  this.no_direction = 'right';\n  this.params = options.params;\n  if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n    if (options.direction_yes === 'right') {\n      this.no_direction = 'bottom';\n      this.yes_direction = 'right';\n    } else {\n      this.no_direction = 'right';\n      this.yes_direction = 'bottom';\n    }\n  } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n    if (options.direction_no === 'right') {\n      this.yes_direction = 'bottom';\n      this.no_direction = 'right';\n    } else {\n      this.yes_direction = 'right';\n      this.no_direction = 'bottom';\n    }\n  } else {\n    this.yes_direction = 'bottom';\n    this.no_direction = 'right';\n  }\n\n  this.yes_direction = this.yes_direction || 'bottom';\n  this.no_direction = this.no_direction || 'right';\n\n  this.text.attr({\n    x: this.textMargin * 2\n  });\n\n  var width = this.text.getBBox().width + 3 * this.textMargin;\n  width += width/2;\n  var height = this.text.getBBox().height + 2 * this.textMargin;\n  height += height/2;\n  height = Math.max(width * 0.5, height);\n  var startX = width/4;\n  var startY = height/4;\n\n  this.text.attr({\n    x: startX + this.textMargin/2\n  });\n\n  var start = {x: startX, y: startY};\n  var points = [\n    {x: startX - width/4, y: startY + height/4},\n    {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n    {x: startX - width/4 + width, y: startY + height/4},\n    {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n    {x: startX - width/4, y: startY + height/4}\n  ];\n\n  var symbol = drawPath(chart, start, points);\n\n  symbol.attr({\n    stroke: this.getAttr('element-color'),\n    'stroke-width': this.getAttr('line-width'),\n    fill: this.getAttr('fill')\n  });\n  if (options.link) { symbol.attr('href', options.link); }\n  if (options.target) { symbol.attr('target', options.target); }\n  if (options.key) { symbol.node.id = options.key; }\n  symbol.node.setAttribute('class', this.getAttr('class'));\n\n  this.text.attr({\n    y: symbol.getBBox().height/2\n  });\n\n  this.group.push(symbol);\n  symbol.insertBefore(this.text);\n\n  this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n  if (this.yes_direction) {\n    this[this.yes_direction + '_symbol'] = this.yes_symbol;\n  }\n\n  if (this.no_direction) {\n    this[this.no_direction + '_symbol'] = this.no_symbol;\n  }\n\n  var lineLength = this.getAttr('line-length');\n\n  if (this.bottom_symbol) {\n    var bottomPoint = this.getBottom();\n\n    if (!this.bottom_symbol.isPositioned) {\n      this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n      this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n      this.bottom_symbol.isPositioned = true;\n\n      this.bottom_symbol.render();\n    }\n  }\n\n  if (this.right_symbol) {\n    var rightPoint = this.getRight();\n\n    if (!this.right_symbol.isPositioned) {\n\n      this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n      this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n      var self = this;\n      (function shift() {\n        var hasSymbolUnder = false;\n        var symb;\n        for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n          symb = self.chart.symbols[i];\n\n          if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n            var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n            if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n              hasSymbolUnder = true;\n              break;\n            }\n          }\n        }\n\n        if (hasSymbolUnder) {\n          self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n          shift();\n        }\n      })();\n\n      this.right_symbol.isPositioned = true;\n\n      this.right_symbol.render();\n    }\n  }\n};\n\nCondition.prototype.renderLines = function() {\n  if (this.yes_symbol) {\n    this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n  }\n\n  if (this.no_symbol) {\n    this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n  }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0"",""var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\n\nfunction FlowChart(container, options) {\n  options = options || {};\n\n  this.paper = new Raphael(container);\n\n  this.options = defaults(options, defaultOptions);\n\n  this.symbols = [];\n  this.lines = [];\n  this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n  if (this.symbols.indexOf(symbol) <= -1) {\n    this.symbols.push(symbol);\n  }\n\n  var flowChart = this;\n\n  if (symbol instanceof(Condition)) {\n    symbol.yes = function(nextSymbol) {\n      symbol.yes_symbol = nextSymbol;\n      if(symbol.no_symbol) {\n        symbol.pathOk = true;\n      }\n      return flowChart.handle(nextSymbol);\n    };\n    symbol.no = function(nextSymbol) {\n      symbol.no_symbol = nextSymbol;\n      if(symbol.yes_symbol) {\n        symbol.pathOk = true;\n      }\n      return flowChart.handle(nextSymbol);\n    };\n  } else {\n    symbol.then = function(nextSymbol) {\n      symbol.next = nextSymbol;\n      symbol.pathOk = true;\n      return flowChart.handle(nextSymbol);\n    };\n  }\n\n  return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n  this.start = symbol;\n  return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n  var maxWidth = 0,\n      maxHeight = 0,\n      i = 0,\n      len = 0,\n      maxX = 0,\n      maxY = 0,\n      minX = 0,\n      minY = 0,\n      symbol,\n      line;\n\n  for (i = 0, len = this.symbols.length; i < len; i++) {\n    symbol = this.symbols[i];\n    if (symbol.width > maxWidth) {\n      maxWidth = symbol.width;\n    }\n    if (symbol.height > maxHeight) {\n      maxHeight = symbol.height;\n    }\n  }\n\n  for (i = 0, len = this.symbols.length; i < len; i++) {\n    symbol = this.symbols[i];\n    symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n    symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n  }\n\n  this.start.render();\n  // for (i = 0, len = this.symbols.length; i < len; i++) {\n  //   symbol = this.symbols[i];\n  //   symbol.render();\n  // }\n\n  for (i = 0, len = this.symbols.length; i < len; i++) {\n    symbol = this.symbols[i];\n    symbol.renderLines();\n  }\n\n  maxX = this.maxXFromLine;\n\n  var x;\n  var y;\n\n  for (i = 0, len = this.symbols.length; i < len; i++) {\n    symbol = this.symbols[i];\n    x = symbol.getX() + symbol.width;\n    y = symbol.getY() + symbol.height;\n    if (x > maxX) {\n      maxX = x;\n    }\n    if (y > maxY) {\n      maxY = y;\n    }\n  }\n\n  for (i = 0, len = this.lines.length; i < len; i++) {\n    line = this.lines[i].getBBox();\n    x = line.x;\n    y = line.y;\n    var x2 = line.x2;\n    var y2 = line.y2;\n    if (x < minX) {\n      minX = x;\n    }\n    if (y < minY) {\n      minY = y;\n    }\n    if (x2 > maxX) {\n      maxX = x2;\n    }\n    if (y2 > maxY) {\n      maxY = y2;\n    }\n  }\n\n  var scale = this.options['scale'];\n  var lineWidth = this.options['line-width'];\n\n  if (minX < 0) minX -= lineWidth;\n  if (minY < 0) minY -= lineWidth;\n\n  var width = maxX + lineWidth - minX;\n  var height = maxY + lineWidth - minY;\n\n  this.paper.setSize(width * scale, height * scale);\n  this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n  if (this.paper) {\n    var paperDom = this.paper.canvas;\n    paperDom.parentNode.removeChild(paperDom);\n  }\n};\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 6\n// module chunks = 0"",""// defaults\nmodule.exports = {\n  'x': 0,\n  'y': 0,\n  'line-width': 3,\n  'line-length': 50,\n  'text-margin': 10,\n  'font-size': 14,\n  'font-color': 'black',\n  // 'font': 'normal',\n  // 'font-family': 'calibri',\n  // 'font-weight': 'normal',\n  'line-color': 'black',\n  'element-color': 'black',\n  'fill': 'white',\n  'yes-text': 'yes',\n  'no-text': 'no',\n  'arrow-end': 'block',\n  'class': 'flowchart',\n  'scale': 1,\n  'symbols': {\n    'start': {},\n    'end': {},\n    'condition': {},\n    'inputoutput': {},\n    'operation': {},\n    'subroutine': {}\n  }//,\n  // 'flowstate' : {\n  //   'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n  //   'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n  //   'future' : { 'fill': '#FFFF99'},\n  //   'invalid': {'fill': '#444444'}\n  // }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 7\n// module chunks = 0"",""// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n  Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n    \""use strict\"";\n    if (this === null) {\n      throw new TypeError();\n    }\n    var t = Object(this);\n    var len = t.length >>> 0;\n    if (len === 0) {\n      return -1;\n    }\n    var n = 0;\n    if (arguments.length > 0) {\n      n = Number(arguments[1]);\n      if (n != n) { // shortcut for verifying if it's NaN\n        n = 0;\n      } else if (n !== 0 && n != Infinity && n != -Infinity) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n      }\n    }\n    if (n >= len) {\n      return -1;\n    }\n    var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n    for (; k < len; k++) {\n      if (k in t && t[k] === searchElement) {\n        return k;\n      }\n    }\n    return -1;\n  };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n  Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n    \""use strict\"";\n    if (this === null) {\n      throw new TypeError();\n    }\n    var t = Object(this);\n    var len = t.length >>> 0;\n    if (len === 0) {\n      return -1;\n    }\n    var n = len;\n    if (arguments.length > 1) {\n      n = Number(arguments[1]);\n      if (n != n) {\n        n = 0;\n      } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n      }\n    }\n    var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n    for (; k >= 0; k--) {\n      if (k in t && t[k] === searchElement) {\n        return k;\n      }\n    }\n    return -1;\n  };\n}\n\nif (!String.prototype.trim) {\n  String.prototype.trim = function() {\n    return this.replace(/^\\s+|\\s+$/g, '');\n  };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 8\n// module chunks = 0"",""var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n  options = options || {};\n  options.text = options.text || 'End';\n  Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 9\n// module chunks = 0"",""var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n  options = options || {};\n  Symbol.call(this, chart, options);\n  this.textMargin = this.getAttr('text-margin');\n\n  this.text.attr({\n    x: this.textMargin * 3\n  });\n\n  var width = this.text.getBBox().width + 4 * this.textMargin;\n  var height = this.text.getBBox().height + 2 * this.textMargin;\n  var startX = this.textMargin;\n  var startY = height/2;\n\n  var start = {x: startX, y: startY};\n  var points = [\n    {x: startX - this.textMargin, y: height},\n    {x: startX - this.textMargin + width, y: height},\n    {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n    {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n    {x: startX, y: startY}\n  ];\n\n  var symbol = drawPath(chart, start, points);\n\n  symbol.attr({\n    stroke: this.getAttr('element-color'),\n    'stroke-width': this.getAttr('line-width'),\n    fill: this.getAttr('fill')\n  });\n  if (options.link) { symbol.attr('href', options.link); }\n  if (options.target) { symbol.attr('target', options.target); }\n  if (options.key) { symbol.node.id = options.key; }\n  symbol.node.setAttribute('class', this.getAttr('class'));\n\n  this.text.attr({\n    y: symbol.getBBox().height/2\n  });\n\n  this.group.push(symbol);\n  symbol.insertBefore(this.text);\n\n  this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n  var y = this.getY() + this.group.getBBox().height/2;\n  var x = this.getX() + this.textMargin;\n  return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n  var y = this.getY() + this.group.getBBox().height/2;\n  var x = this.getX() + this.group.getBBox().width - this.textMargin;\n  return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 10\n// module chunks = 0"",""var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0);\n  options = options || {};\n  Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 11\n// module chunks = 0"",""var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n  options = options || {};\n  options.text = options.text || 'Start';\n  Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n//   if (this.next) {\n//     var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n//     var bottomPoint = this.getBottom();\n//     var topPoint = this.next.getTop();\n\n//     if (!this.next.isPositioned) {\n//       this.next.shiftY(this.getY() + this.height + lineLength);\n//       this.next.setX(bottomPoint.x - this.next.width/2);\n//       this.next.isPositioned = true;\n\n//       this.next.render();\n//     }\n//   }\n// };\n\n// Start.prototype.renderLines = function() {\n//   if (this.next) {\n//     this.drawLineTo(this.next);\n//   }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 12\n// module chunks = 0"",""var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0);\n  options = options || {};\n  Symbol.call(this, chart, options, symbol);\n\n  symbol.attr({\n    width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n  });\n\n  this.text.attr({\n    'x': 2 * this.getAttr('text-margin')\n  });\n\n  var innerWrap = chart.paper.rect(0, 0, 0, 0);\n  innerWrap.attr({\n    x: this.getAttr('text-margin'),\n    stroke: this.getAttr('element-color'),\n    'stroke-width': this.getAttr('line-width'),\n    width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n    height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n    fill: this.getAttr('fill')\n  });\n  if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n  var font = this.getAttr('font');\n  var fontF = this.getAttr('font-family');\n  var fontW = this.getAttr('font-weight');\n\n  if (font) innerWrap.attr({ 'font': font });\n  if (fontF) innerWrap.attr({ 'font-family': fontF });\n  if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n  if (options.link) { innerWrap.attr('href', options.link); }\n  if (options.target) { innerWrap.attr('target', options.target); }\n  this.group.push(innerWrap);\n  innerWrap.insertBefore(this.text);\n\n  this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 13\n// module chunks = 0"",""if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 14\n// module chunks = 0"",""module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \""Raphael\""\n// module id = 15\n// module chunks = 0""],""sourceRoot"":""""}"
42da311c6e41022ec5ae47103f65d750f0f68633,2008444,	// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
fe6111370c8c4e5920188fcddc96cec8e375fe2f,11620,        /// Implementation hint: http://stackoverflow.com/questions/11620/how-do-you-kill-all-current-connections-to-a-sql-server-2005-database
29b26a716d8f5d457e96f2f8ee23dec5595b8aa1,10455626,     * http://stackoverflow.com/questions/10455626/keydown-simulation-in-chrome-fires-normally-but-not-the-correct-key
8642aeac8bfb4153907918d2d54730512345d852,21049737,"    echo ""RSS vs VSZ https://stackoverflow.com/a/21049737/272648"""
7157ed49e415618bcc69c8020f1a541daf0c0dfb,3322152,    // thanks! http://stackoverflow.com/questions/3322152/is-there-a-way-to-get-rid-of-accents-and-convert-a-whole-string-to-regular-lette
452acc81490559176a153fa2e72e960a99b6d5f4,123999,		http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
1ec0db29584d3c6a93d603dde815c1e218ae76fc,5186296,    //https://stackoverflow.com/questions/5186296/chrome-extension-open-new-popup-window
4d4a66f5c92732a6c20dd009131c52f7e04d2908,6274398, * http://stackoverflow.com/a/6274398/250962
d04ab4ca009228731f7d862ab190a73417adb265,26032513,"      ""description"":""iOS 8 Safari has [issues with nth-child](http://stackoverflow.com/questions/26032513/ios8-safari-after-a-pushstate-the-nth-child-selectors-not-works).\r\n"""
fc51ed7b0fa6020a86a603962a6643bd78e28bae,1189781,# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
f523053686a14718e133df138f2bfcbb011126ee,22740464,"### [Adding two Java 8 streams, or an extra element to a stream](https://stackoverflow.com/questions/22740464/adding-two-java-8-streams-or-an-extra-element-to-a-stream)"
5d7ac3812d259b4fd76c286dac4a03bd2b833949,37628,0;49;https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful;knowing;0.2;0.0;1.0;1.2;0.0;0.0
786cef74821e596d410ec33eb57e28b7e8bb7d94,452981,	Taken from http://stackoverflow.com/a/452981/2028598.
7977b7888f2533511b5fe681416892ded06ec549,2675872,* [How can I disable ReSharper in Visual Studio and enable it again?](http://stackoverflow.com/a/2675872)
41f64e5880a455680135b5579d791ee7d096f6a6,211383, * http://stackoverflow.com/questions/211383/what-methods-of-clearfix-can-i-use
b58b0ef7375ff68feea700d8a36303c49c743a7f,13320015,// http://stackoverflow.com/questions/13320015/how-to-write-a-debounce-service-in-angularjs
41487e2e3350ae4732ca6a29e0516a3a4a0a9f05,3330919,        // http://stackoverflow.com/a/3330919)
51a5517363f84560c602321948daa485cf72c9db,23531608,## http://stackoverflow.com/questions/23531608/how-do-i-save-streaming-tweets-in-json-via-tweepy
ad208465a03b80c2eebb0b4d9d3e12acb314ce95,26603875,"{""version"":3,""sources"":[""/Users/i867738/Documents/projects/mockeryData/client/src/styles.css?bd5a"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/fonts/data-table.eot"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/fonts/data-table.svg"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/fonts/data-table.ttf"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/fonts/data-table.woff"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/icons.css?a779"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/release/themes/material.css?1213"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/bootstrap/dist/css/bootstrap.css?9d4e"",""/Users/i867738/Documents/projects/mockeryData/client/src/styles.css"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/icons.css"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/release/themes/material.css"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/bootstrap/dist/css/bootstrap.css"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/font-awesome/css/font-awesome.css"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/css-loader/lib/css-base.js"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/font-awesome/css/font-awesome.css?ebdc"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/font-awesome/fonts/fontawesome-webfont.eot"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/font-awesome/fonts/fontawesome-webfont.eot?6205"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/font-awesome/fonts/fontawesome-webfont.svg"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/font-awesome/fonts/fontawesome-webfont.ttf"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/font-awesome/fonts/fontawesome-webfont.woff2"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/font-awesome/fonts/fontawesome-webfont.woff"",""/Users/i867738/Documents/projects/mockeryData/client/node_modules/style-loader/addStyles.js""],""names"":[],""mappings"":""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;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD,IAAI;AACJ;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,cAAc;;AAElE;AACA;;;;;;;;AC3EA;;AAEA;AACA;AACA;AACA;AACA,qFAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,gCAAgC,UAAU,EAAE;AAC5C,C;;;;;;;ACpBA,wF;;;;;;;ACAA,wF;;;;;;;ACAA,wF;;;;;;;ACAA,wF;;;;;;;ACAA,0F;;;;;;;ACAA,yF;;;;;;;ACAA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C;AACA;AACA,QAAQ,uBAAuB;AAC/B;AACA;AACA,GAAG;AACH;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD;;AAEA,6BAA6B,mBAAmB;;AAEhD;;AAEA;;AAEA;AACA;AACA"",""file"":""styles.bundle.js"",""sourcesContent"":[""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../node_modules/css-loader/index.js??ref--7-1!../node_modules/postcss-loader/index.js??postcss!./styles.css\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../node_modules/style-loader/addStyles.js\"")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../node_modules/css-loader/index.js??ref--7-1!../node_modules/postcss-loader/index.js??postcss!./styles.css\"", function() {\n\t\t\tvar newContent = require(\""!!../node_modules/css-loader/index.js??ref--7-1!../node_modules/postcss-loader/index.js??postcss!./styles.css\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/src/styles.css\n// module id = ../../../../../src/styles.css\n// module chunks = styles"",""module.exports = __webpack_public_path__ + \""data-table.bce071e976865da51100.eot\"";\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/fonts/data-table.eot\n// module id = ../../../../@swimlane/ngx-datatable/assets/fonts/data-table.eot\n// module chunks = styles"",""module.exports = __webpack_public_path__ + \""data-table.b0aebd744ce7adb780a9.svg\"";\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/fonts/data-table.svg\n// module id = ../../../../@swimlane/ngx-datatable/assets/fonts/data-table.svg\n// module chunks = styles"",""module.exports = \""data:application/x-font-ttf;base64, \""\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/fonts/data-table.ttf\n// module id = ../../../../@swimlane/ngx-datatable/assets/fonts/data-table.ttf\n// module chunks = styles"",""module.exports = \""data:application/font-woff;base64, \""\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/fonts/data-table.woff\n// module id = ../../../../@swimlane/ngx-datatable/assets/fonts/data-table.woff\n// module chunks = styles"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../../../css-loader/index.js??ref--7-1!../../../postcss-loader/index.js??postcss!./icons.css\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../../../style-loader/addStyles.js\"")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../../../css-loader/index.js??ref--7-1!../../../postcss-loader/index.js??postcss!./icons.css\"", function() {\n\t\t\tvar newContent = require(\""!!../../../css-loader/index.js??ref--7-1!../../../postcss-loader/index.js??postcss!./icons.css\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/icons.css\n// module id = ../../../../@swimlane/ngx-datatable/assets/icons.css\n// module chunks = styles"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../../../../css-loader/index.js??ref--7-1!../../../../postcss-loader/index.js??postcss!./material.css\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../../../../style-loader/addStyles.js\"")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../../../../css-loader/index.js??ref--7-1!../../../../postcss-loader/index.js??postcss!./material.css\"", function() {\n\t\t\tvar newContent = require(\""!!../../../../css-loader/index.js??ref--7-1!../../../../postcss-loader/index.js??postcss!./material.css\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/release/themes/material.css\n// module id = ../../../../@swimlane/ngx-datatable/release/themes/material.css\n// module chunks = styles"",""// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\""!!../../../css-loader/index.js??ref--7-1!../../../postcss-loader/index.js??postcss!./bootstrap.css\"");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\""!../../../style-loader/addStyles.js\"")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\""!!../../../css-loader/index.js??ref--7-1!../../../postcss-loader/index.js??postcss!./bootstrap.css\"", function() {\n\t\t\tvar newContent = require(\""!!../../../css-loader/index.js??ref--7-1!../../../postcss-loader/index.js??postcss!./bootstrap.css\"");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/bootstrap/dist/css/bootstrap.css\n// module id = ../../../../bootstrap/dist/css/bootstrap.css\n// module chunks = styles"",""exports = module.exports = require(\""../node_modules/css-loader/lib/css-base.js\"")(false);\n// imports\n\n\n// module\nexports.push([module.id, \""html {\\n  height: 100%;\\n  box-sizing: border-box;\\n}\\n\\nbody{\\n  position: relative;\\n  margin: 0;\\n  padding-bottom: 5rem;\\n  min-height: 100%;\\n}\\n\\nfooter {\\n  position: absolute;\\n  bottom: 3%;\\n  width: 100%;\\n}\\n\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/css-loader?{\""sourceMap\"":false,\""importLoaders\"":1}!/Users/i867738/Documents/projects/mockeryData/client/node_modules/postcss-loader?{\""ident\"":\""postcss\""}!/Users/i867738/Documents/projects/mockeryData/client/src/styles.css\n// module id = ../../../../css-loader/index.js?{\""sourceMap\"":false,\""importLoaders\"":1}!../../../../postcss-loader/index.js?{\""ident\"":\""postcss\""}!../../../../../src/styles.css\n// module chunks = styles"",""exports = module.exports = require(\""../../../css-loader/lib/css-base.js\"")(false);\n// imports\n\n\n// module\nexports.push([module.id, \""@charset \\\""UTF-8\\\"";\\n\\n@font-face {\\n  font-family: \\\""data-table\\\"";\\n  src:url(\"" + require(\""./fonts/data-table.eot\"") + \"");\\n  src:url(\"" + require(\""./fonts/data-table.eot\"") + \""?#iefix) format(\\\""embedded-opentype\\\""),\\n    url(\"" + require(\""./fonts/data-table.woff\"") + \"") format(\\\""woff\\\""),\\n    url(\"" + require(\""./fonts/data-table.ttf\"") + \"") format(\\\""truetype\\\""),\\n    url(\"" + require(\""./fonts/data-table.svg\"") + \""#data-table) format(\\\""svg\\\"");\\n  font-weight: normal;\\n  font-style: normal;\\n\\n}\\n\\n[data-icon]:before {\\n  font-family: \\\""data-table\\\"" !important;\\n  content: attr(data-icon);\\n  font-style: normal !important;\\n  font-weight: normal !important;\\n  font-variant: normal !important;\\n  text-transform: none !important;\\n  speak: none;\\n  line-height: 1;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n\\n[class^=\\\""datatable-icon-\\\""]:before,\\n[class*=\\\"" datatable-icon-\\\""]:before {\\n  font-family: \\\""data-table\\\"" !important;\\n  font-style: normal !important;\\n  font-weight: normal !important;\\n  font-variant: normal !important;\\n  text-transform: none !important;\\n  speak: none;\\n  line-height: 1;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.datatable-icon-filter:before {\\n  content: \\\""b\\\"";\\n}\\n.datatable-icon-collapse:before {\\n  content: \\\""a\\\"";\\n}\\n.datatable-icon-expand:before {\\n  content: \\\""c\\\"";\\n}\\n.datatable-icon-close:before {\\n  content: \\\""d\\\"";\\n}\\n.datatable-icon-up:before {\\n  content: \\\""e\\\"";\\n}\\n.datatable-icon-down:before {\\n  content: \\\""f\\\"";\\n}\\n.datatable-icon-sort:before {\\n  content: \\\""g\\\"";\\n}\\n.datatable-icon-done:before {\\n  content: \\\""h\\\"";\\n}\\n.datatable-icon-done-all:before {\\n  content: \\\""i\\\"";\\n}\\n.datatable-icon-search:before {\\n  content: \\\""j\\\"";\\n}\\n.datatable-icon-pin:before {\\n  content: \\\""k\\\"";\\n}\\n.datatable-icon-add:before {\\n  content: \\\""m\\\"";\\n}\\n.datatable-icon-left:before {\\n  content: \\\""o\\\"";\\n}\\n.datatable-icon-right:before {\\n  content: \\\""p\\\"";\\n}\\n.datatable-icon-skip:before {\\n  content: \\\""q\\\"";\\n}\\n.datatable-icon-prev:before {\\n  content: \\\""r\\\"";\\n}\\n\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/css-loader?{\""sourceMap\"":false,\""importLoaders\"":1}!/Users/i867738/Documents/projects/mockeryData/client/node_modules/postcss-loader?{\""ident\"":\""postcss\""}!/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/assets/icons.css\n// module id = ../../../../css-loader/index.js?{\""sourceMap\"":false,\""importLoaders\"":1}!../../../../postcss-loader/index.js?{\""ident\"":\""postcss\""}!../../../../@swimlane/ngx-datatable/assets/icons.css\n// module chunks = styles"",""exports = module.exports = require(\""../../../../css-loader/lib/css-base.js\"")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"".ngx-datatable.material {\\n  background: #FFF;\\n  box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12);\\n  /**\\n\\t * Shared Styles\\n\\t */\\n  /**\\n\\t * Global Row Styles\\n\\t */\\n  /**\\n\\t * Header Styles\\n\\t */\\n  /**\\n\\t * Body Styles\\n\\t */\\n  /**\\n\\t * Footer Styles\\n\\t */ }\\n  .ngx-datatable.material.striped .datatable-row-odd {\\n    background: #eee; }\\n  .ngx-datatable.material.single-selection .datatable-body-row.active,\\n  .ngx-datatable.material.single-selection .datatable-body-row.active .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active,\\n  .ngx-datatable.material.multi-selection .datatable-body-row.active .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active,\\n  .ngx-datatable.material.multi-click-selection .datatable-body-row.active .datatable-row-group {\\n    background-color: #304FFE;\\n    color: #FFF; }\\n  .ngx-datatable.material.single-selection .datatable-body-row.active:hover,\\n  .ngx-datatable.material.single-selection .datatable-body-row.active:hover .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active:hover,\\n  .ngx-datatable.material.multi-selection .datatable-body-row.active:hover .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active:hover,\\n  .ngx-datatable.material.multi-click-selection .datatable-body-row.active:hover .datatable-row-group {\\n    background-color: #193AE4;\\n    color: #FFF; }\\n  .ngx-datatable.material.single-selection .datatable-body-row.active:focus,\\n  .ngx-datatable.material.single-selection .datatable-body-row.active:focus .datatable-row-group, .ngx-datatable.material.multi-selection .datatable-body-row.active:focus,\\n  .ngx-datatable.material.multi-selection .datatable-body-row.active:focus .datatable-row-group, .ngx-datatable.material.multi-click-selection .datatable-body-row.active:focus,\\n  .ngx-datatable.material.multi-click-selection .datatable-body-row.active:focus .datatable-row-group {\\n    background-color: #2041EF;\\n    color: #FFF; }\\n  .ngx-datatable.material:not(.cell-selection) .datatable-body-row:hover,\\n  .ngx-datatable.material:not(.cell-selection) .datatable-body-row:hover .datatable-row-group {\\n    background-color: #eee;\\n    transition-property: background;\\n    transition-duration: .3s;\\n    transition-timing-function: linear; }\\n  .ngx-datatable.material:not(.cell-selection) .datatable-body-row:focus,\\n  .ngx-datatable.material:not(.cell-selection) .datatable-body-row:focus .datatable-row-group {\\n    background-color: #ddd; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell:hover,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell:hover .datatable-row-group {\\n    background-color: #eee;\\n    transition-property: background;\\n    transition-duration: .3s;\\n    transition-timing-function: linear; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell:focus,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell:focus .datatable-row-group {\\n    background-color: #ddd; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active .datatable-row-group {\\n    background-color: #304FFE;\\n    color: #FFF; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active:hover,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active:hover .datatable-row-group {\\n    background-color: #193AE4;\\n    color: #FFF; }\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active:focus,\\n  .ngx-datatable.material.cell-selection .datatable-body-cell.active:focus .datatable-row-group {\\n    background-color: #2041EF;\\n    color: #FFF; }\\n  .ngx-datatable.material .empty-row {\\n    height: 50px;\\n    text-align: left;\\n    padding: .5rem 1.2rem;\\n    vertical-align: top;\\n    border-top: 0; }\\n  .ngx-datatable.material .loading-row {\\n    text-align: left;\\n    padding: .5rem 1.2rem;\\n    vertical-align: top;\\n    border-top: 0; }\\n  .ngx-datatable.material .datatable-header .datatable-row-left,\\n  .ngx-datatable.material .datatable-body .datatable-row-left {\\n    background-color: #FFF;\\n    background-position: 100% 0;\\n    background-repeat: repeat-y;\\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAYAAAD5PA/NAAAAFklEQVQIHWPSkNeSBmJhTQVtbiDNCgASagIIuJX8OgAAAABJRU5ErkJggg==); }\\n  .ngx-datatable.material .datatable-header .datatable-row-right,\\n  .ngx-datatable.material .datatable-body .datatable-row-right {\\n    background-position: 0 0;\\n    background-color: #fff;\\n    background-repeat: repeat-y;\\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAYAAAD5PA/NAAAAFklEQVQI12PQkNdi1VTQ5gbSwkAsDQARLAIGtOSFUAAAAABJRU5ErkJggg==); }\\n  .ngx-datatable.material .datatable-header {\\n    border-bottom: 1px solid rgba(0, 0, 0, 0.12); }\\n    .ngx-datatable.material .datatable-header .datatable-header-cell {\\n      text-align: left;\\n      padding: .9rem 1.2rem;\\n      font-weight: 400;\\n      color: rgba(0, 0, 0, 0.54);\\n      vertical-align: bottom;\\n      font-size: 12px;\\n      font-weight: 500; }\\n      .ngx-datatable.material .datatable-header .datatable-header-cell .datatable-header-cell-wrapper {\\n        position: relative; }\\n      .ngx-datatable.material .datatable-header .datatable-header-cell.longpress .draggable::after {\\n        transition: opacity 400ms ease, -webkit-transform 400ms ease;\\n        transition: transform 400ms ease, opacity 400ms ease;\\n        transition: transform 400ms ease, opacity 400ms ease, -webkit-transform 400ms ease;\\n        opacity: .5;\\n        -webkit-transform: scale(1);\\n                transform: scale(1); }\\n      .ngx-datatable.material .datatable-header .datatable-header-cell .draggable::after {\\n        content: \\\"" \\\"";\\n        position: absolute;\\n        top: 50%;\\n        left: 50%;\\n        margin: -30px 0 0 -30px;\\n        height: 60px;\\n        width: 60px;\\n        background: #eee;\\n        border-radius: 100%;\\n        opacity: 1;\\n        -webkit-filter: none;\\n                filter: none;\\n        -webkit-transform: scale(0);\\n                transform: scale(0);\\n        z-index: 9999;\\n        pointer-events: none; }\\n      .ngx-datatable.material .datatable-header .datatable-header-cell.dragging .resize-handle {\\n        border-right: none; }\\n    .ngx-datatable.material .datatable-header .resize-handle {\\n      border-right: solid 1px #eee; }\\n  .ngx-datatable.material .datatable-body .datatable-row-detail {\\n    background: #f5f5f5;\\n    padding: 10px; }\\n  .ngx-datatable.material .datatable-body .datatable-group-header {\\n    background: #f5f5f5;\\n    border-bottom: solid 1px #D9D8D9;\\n    border-top: solid 1px #D9D8D9; }\\n  .ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-cell {\\n    text-align: left;\\n    padding: .9rem 1.2rem;\\n    vertical-align: top;\\n    border-top: 0;\\n    color: rgba(0, 0, 0, 0.87);\\n    transition: width 0.3s ease;\\n    font-size: 14px;\\n    font-weight: 400; }\\n  .ngx-datatable.material .datatable-body .datatable-body-row .datatable-body-group-cell {\\n    text-align: left;\\n    padding: .9rem 1.2rem;\\n    vertical-align: top;\\n    border-top: 0;\\n    color: rgba(0, 0, 0, 0.87);\\n    transition: width 0.3s ease;\\n    font-size: 14px;\\n    font-weight: 400; }\\n  .ngx-datatable.material .datatable-body .progress-linear {\\n    display: block;\\n    position: relative;\\n    width: 100%;\\n    height: 5px;\\n    padding: 0;\\n    margin: 0;\\n    position: absolute; }\\n    .ngx-datatable.material .datatable-body .progress-linear .container {\\n      display: block;\\n      position: relative;\\n      overflow: hidden;\\n      width: 100%;\\n      height: 5px;\\n      -webkit-transform: translate(0, 0) scale(1, 1);\\n      transform: translate(0, 0) scale(1, 1);\\n      background-color: #aad1f9; }\\n      .ngx-datatable.material .datatable-body .progress-linear .container .bar {\\n        transition: all .2s linear;\\n        -webkit-animation: query 0.8s infinite cubic-bezier(0.39, 0.575, 0.565, 1);\\n        animation: query 0.8s infinite cubic-bezier(0.39, 0.575, 0.565, 1);\\n        transition: -webkit-transform .2s linear;\\n        transition: transform .2s linear;\\n        transition: transform .2s linear, -webkit-transform .2s linear;\\n        background-color: #106cc8;\\n        position: absolute;\\n        left: 0;\\n        top: 0;\\n        bottom: 0;\\n        width: 100%;\\n        height: 5px; }\\n  .ngx-datatable.material .datatable-footer {\\n    border-top: 1px solid rgba(0, 0, 0, 0.12);\\n    font-size: 12px;\\n    font-weight: 400;\\n    color: rgba(0, 0, 0, 0.54); }\\n    .ngx-datatable.material .datatable-footer .page-count {\\n      line-height: 50px;\\n      height: 50px;\\n      padding: 0 1.2rem; }\\n    .ngx-datatable.material .datatable-footer .datatable-pager {\\n      margin: 0 10px; }\\n      .ngx-datatable.material .datatable-footer .datatable-pager li {\\n        vertical-align: middle; }\\n        .ngx-datatable.material .datatable-footer .datatable-pager li.disabled a {\\n          color: rgba(0, 0, 0, 0.26) !important;\\n          background-color: transparent !important; }\\n        .ngx-datatable.material .datatable-footer .datatable-pager li.active a {\\n          background-color: rgba(158, 158, 158, 0.2);\\n          font-weight: bold; }\\n      .ngx-datatable.material .datatable-footer .datatable-pager a {\\n        height: 22px;\\n        min-width: 24px;\\n        line-height: 22px;\\n        padding: 0 6px;\\n        border-radius: 3px;\\n        margin: 6px 3px;\\n        text-align: center;\\n        vertical-align: top;\\n        color: rgba(0, 0, 0, 0.54);\\n        text-decoration: none;\\n        vertical-align: bottom; }\\n        .ngx-datatable.material .datatable-footer .datatable-pager a:hover {\\n          color: rgba(0, 0, 0, 0.75);\\n          background-color: rgba(158, 158, 158, 0.2); }\\n      .ngx-datatable.material .datatable-footer .datatable-pager .datatable-icon-left,\\n      .ngx-datatable.material .datatable-footer .datatable-pager .datatable-icon-skip,\\n      .ngx-datatable.material .datatable-footer .datatable-pager .datatable-icon-right,\\n      .ngx-datatable.material .datatable-footer .datatable-pager .datatable-icon-prev {\\n        font-size: 20px;\\n        line-height: 20px;\\n        padding: 0 3px; }\\n\\n/**\\n * Checkboxes\\n**/\\n.datatable-checkbox {\\n  position: relative;\\n  margin: 0;\\n  cursor: pointer;\\n  vertical-align: middle;\\n  display: inline-block;\\n  box-sizing: border-box;\\n  padding: 10px 0; }\\n  .datatable-checkbox input[type='checkbox'] {\\n    position: relative;\\n    margin: 0 1rem 0 0;\\n    cursor: pointer;\\n    outline: none; }\\n    .datatable-checkbox input[type='checkbox']:before {\\n      transition: all 0.3s ease-in-out;\\n      content: \\\""\\\"";\\n      position: absolute;\\n      left: 0;\\n      z-index: 1;\\n      width: 1rem;\\n      height: 1rem;\\n      border: 2px solid #f2f2f2; }\\n    .datatable-checkbox input[type='checkbox']:checked:before {\\n      -webkit-transform: rotate(-45deg);\\n      transform: rotate(-45deg);\\n      height: .5rem;\\n      border-color: #009688;\\n      border-top-style: none;\\n      border-right-style: none; }\\n    .datatable-checkbox input[type='checkbox']:after {\\n      content: \\\""\\\"";\\n      position: absolute;\\n      top: 0;\\n      left: 0;\\n      width: 1rem;\\n      height: 1rem;\\n      background: #fff;\\n      cursor: pointer; }\\n\\n/**\\n * Progress bar animations\\n */\\n@-webkit-keyframes query {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateX(35%) scale(0.3, 1);\\n            transform: translateX(35%) scale(0.3, 1); }\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateX(-50%) scale(0, 1);\\n            transform: translateX(-50%) scale(0, 1); } }\\n@keyframes query {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateX(35%) scale(0.3, 1);\\n            transform: translateX(35%) scale(0.3, 1); }\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateX(-50%) scale(0, 1);\\n            transform: translateX(-50%) scale(0, 1); } }\\n\"", \""\""]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/i867738/Documents/projects/mockeryData/client/node_modules/css-loader?{\""sourceMap\"":false,\""importLoaders\"":1}!/Users/i867738/Documents/projects/mockeryData/client/node_modules/postcss-loader?{\""ident\"":\""postcss\""}!/Users/i867738/Documents/projects/mockeryData/client/node_modules/@swimlane/ngx-datatable/release/themes/material.css\n// module id = ../../../../css-loader/index.js?{\""sourceMap\"":false,\""importLoaders\"":1}!../../../../postcss-loader/index.js?{\""ident\"":\""postcss\""}!../../../../@swimlane/ngx-datatable/release/themes/material.css\n// module chunks = styles"",""exports = module.exports = require(\""../../../css-loader/lib/css-base.js\"")(false);\n// imports\n\n\n// module\nexports.push([module.id, \""/*!\\n * Bootstrap v4.0.0-beta.2 (https://getbootstrap.com)\\n * Copyright 2011-2017 The Bootstrap Authors\\n * Copyright 2011-2017 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */\\n:root {\\n  --blue: #007bff;\\n  --indigo: #6610f2;\\n  --purple: #6f42c1;\\n  --pink: #e83e8c;\\n  --red: #dc3545;\\n  --orange: #fd7e14;\\n  --yellow: #ffc107;\\n  --green: #28a745;\\n  --teal: #20c997;\\n  --cyan: #17a2b8;\\n  --white: #fff;\\n  --gray: #868e96;\\n  --gray-dark: #343a40;\\n  --primary: #007bff;\\n  --secondary: #868e96;\\n  --success: #28a745;\\n  --info: #17a2b8;\\n  --warning: #ffc107;\\n  --danger: #dc3545;\\n  --light: #f8f9fa;\\n  --dark: #343a40;\\n  --breakpoint-xs: 0;\\n  --breakpoint-sm: 576px;\\n  --breakpoint-md: 768px;\\n  --breakpoint-lg: 992px;\\n  --breakpoint-xl: 1200px;\\n  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \\\""Segoe UI\\\"", Roboto, \\\""Helvetica Neue\\\"", Arial, sans-serif, \\\""Apple Color Emoji\\\"", \\\""Segoe UI Emoji\\\"", \\\""Segoe UI Symbol\\\"";\\n  --font-family-monospace: \\\""SFMono-Regular\\\"", Menlo, Monaco, Consolas, \\\""Liberation Mono\\\"", \\\""Courier New\\\"", monospace;\\n}\\n\\n@media print {\\n  *,\\n  *::before,\\n  *::after {\\n    text-shadow: none !important;\\n    box-shadow: none !important;\\n  }\\n  a,\\n  a:visited {\\n    text-decoration: underline;\\n  }\\n  abbr[title]::after {\\n    content: \\\"" (\\\"" attr(title) \\\"")\\\"";\\n  }\\n  pre {\\n    white-space: pre-wrap !important;\\n  }\\n  pre,\\n  blockquote {\\n    border: 1px solid #999;\\n    page-break-inside: avoid;\\n  }\\n  thead {\\n    display: table-header-group;\\n  }\\n  tr,\\n  img {\\n    page-break-inside: avoid;\\n  }\\n  p,\\n  h2,\\n  h3 {\\n    orphans: 3;\\n    widows: 3;\\n  }\\n  h2,\\n  h3 {\\n    page-break-after: avoid;\\n  }\\n  .navbar {\\n    display: none;\\n  }\\n  .badge {\\n    border: 1px solid #000;\\n  }\\n  .table {\\n    border-collapse: collapse !important;\\n  }\\n  .table td,\\n  .table th {\\n    background-color: #fff !important;\\n  }\\n  .table-bordered th,\\n  .table-bordered td {\\n    border: 1px solid #ddd !important;\\n  }\\n}\\n\\n*,\\n*::before,\\n*::after {\\n  box-sizing: border-box;\\n}\\n\\nhtml {\\n  font-family: sans-serif;\\n  line-height: 1.15;\\n  -webkit-text-size-adjust: 100%;\\n  -ms-text-size-adjust: 100%;\\n  -ms-overflow-style: scrollbar;\\n  -webkit-tap-highlight-color: transparent;\\n}\\n\\n@-ms-viewport {\\n  width: device-width;\\n}\\n\\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\\n  display: block;\\n}\\n\\nbody {\\n  margin: 0;\\n  font-family: -apple-system, BlinkMacSystemFont, \\\""Segoe UI\\\"", Roboto, \\\""Helvetica Neue\\\"", Arial, sans-serif, \\\""Apple Color Emoji\\\"", \\\""Segoe UI Emoji\\\"", \\\""Segoe UI Symbol\\\"";\\n  font-size: 1rem;\\n  font-weight: 400;\\n  line-height: 1.5;\\n  color: #212529;\\n  text-align: left;\\n  background-color: #fff;\\n}\\n\\n[tabindex=\\\""-1\\\""]:focus {\\n  outline: none !important;\\n}\\n\\nhr {\\n  box-sizing: content-box;\\n  height: 0;\\n  overflow: visible;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n  margin-top: 0;\\n  margin-bottom: 0.5rem;\\n}\\n\\np {\\n  margin-top: 0;\\n  margin-bottom: 1rem;\\n}\\n\\nabbr[title],\\nabbr[data-original-title] {\\n  text-decoration: underline;\\n  -webkit-text-decoration: underline dotted;\\n          text-decoration: underline dotted;\\n  cursor: help;\\n  border-bottom: 0;\\n}\\n\\naddress {\\n  margin-bottom: 1rem;\\n  font-style: normal;\\n  line-height: inherit;\\n}\\n\\nol,\\nul,\\ndl {\\n  margin-top: 0;\\n  margin-bottom: 1rem;\\n}\\n\\nol ol,\\nul ul,\\nol ul,\\nul ol {\\n  margin-bottom: 0;\\n}\\n\\ndt {\\n  font-weight: 700;\\n}\\n\\ndd {\\n  margin-bottom: .5rem;\\n  margin-left: 0;\\n}\\n\\nblockquote {\\n  margin: 0 0 1rem;\\n}\\n\\ndfn {\\n  font-style: italic;\\n}\\n\\nb,\\nstrong {\\n  font-weight: bolder;\\n}\\n\\nsmall {\\n  font-size: 80%;\\n}\\n\\nsub,\\nsup {\\n  position: relative;\\n  font-size: 75%;\\n  line-height: 0;\\n  vertical-align: baseline;\\n}\\n\\nsub {\\n  bottom: -.25em;\\n}\\n\\nsup {\\n  top: -.5em;\\n}\\n\\na {\\n  color: #007bff;\\n  text-decoration: none;\\n  background-color: transparent;\\n  -webkit-text-decoration-skip: objects;\\n}\\n\\na:hover {\\n  color: #0056b3;\\n  text-decoration: underline;\\n}\\n\\na:not([href]):not([tabindex]) {\\n  color: inherit;\\n  text-decoration: none;\\n}\\n\\na:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {\\n  color: inherit;\\n  text-decoration: none;\\n}\\n\\na:not([href]):not([tabindex]):focus {\\n  outline: 0;\\n}\\n\\npre,\\ncode,\\nkbd,\\nsamp {\\n  font-family: monospace, monospace;\\n  font-size: 1em;\\n}\\n\\npre {\\n  margin-top: 0;\\n  margin-bottom: 1rem;\\n  overflow: auto;\\n  -ms-overflow-style: scrollbar;\\n}\\n\\nfigure {\\n  margin: 0 0 1rem;\\n}\\n\\nimg {\\n  vertical-align: middle;\\n  border-style: none;\\n}\\n\\nsvg:not(:root) {\\n  overflow: hidden;\\n}\\n\\na,\\narea,\\nbutton,\\n[role=\\\""button\\\""],\\ninput:not([type=\\\""range\\\""]),\\nlabel,\\nselect,\\nsummary,\\ntextarea {\\n  -ms-touch-action: manipulation;\\n      touch-action: manipulation;\\n}\\n\\ntable {\\n  border-collapse: collapse;\\n}\\n\\ncaption {\\n  padding-top: 0.75rem;\\n  padding-bottom: 0.75rem;\\n  color: #868e96;\\n  text-align: left;\\n  caption-side: bottom;\\n}\\n\\nth {\\n  text-align: inherit;\\n}\\n\\nlabel {\\n  display: inline-block;\\n  margin-bottom: .5rem;\\n}\\n\\nbutton {\\n  border-radius: 0;\\n}\\n\\nbutton:focus {\\n  outline: 1px dotted;\\n  outline: 5px auto -webkit-focus-ring-color;\\n}\\n\\ninput,\\nbutton,\\nselect,\\noptgroup,\\ntextarea {\\n  margin: 0;\\n  font-family: inherit;\\n  font-size: inherit;\\n  line-height: inherit;\\n}\\n\\nbutton,\\ninput {\\n  overflow: visible;\\n}\\n\\nbutton,\\nselect {\\n  text-transform: none;\\n}\\n\\nbutton,\\nhtml [type=\\\""button\\\""],\\n[type=\\\""reset\\\""],\\n[type=\\\""submit\\\""] {\\n  -webkit-appearance: button;\\n}\\n\\nbutton::-moz-focus-inner,\\n[type=\\\""button\\\""]::-moz-focus-inner,\\n[type=\\\""reset\\\""]::-moz-focus-inner,\\n[type=\\\""submit\\\""]::-moz-focus-inner {\\n  padding: 0;\\n  border-style: none;\\n}\\n\\ninput[type=\\\""radio\\\""],\\ninput[type=\\\""checkbox\\\""] {\\n  box-sizing: border-box;\\n  padding: 0;\\n}\\n\\ninput[type=\\\""date\\\""],\\ninput[type=\\\""time\\\""],\\ninput[type=\\\""datetime-local\\\""],\\ninput[type=\\\""month\\\""] {\\n  -webkit-appearance: listbox;\\n}\\n\\ntextarea {\\n  overflow: auto;\\n  resize: vertical;\\n}\\n\\nfieldset {\\n  min-width: 0;\\n  padding: 0;\\n  margin: 0;\\n  border: 0;\\n}\\n\\nlegend {\\n  display: block;\\n  width: 100%;\\n  max-width: 100%;\\n  padding: 0;\\n  margin-bottom: .5rem;\\n  font-size: 1.5rem;\\n  line-height: inherit;\\n  color: inherit;\\n  white-space: normal;\\n}\\n\\nprogress {\\n  vertical-align: baseline;\\n}\\n\\n[type=\\\""number\\\""]::-webkit-inner-spin-button,\\n[type=\\\""number\\\""]::-webkit-outer-spin-button {\\n  height: auto;\\n}\\n\\n[type=\\\""search\\\""] {\\n  outline-offset: -2px;\\n  -webkit-appearance: none;\\n}\\n\\n[type=\\\""search\\\""]::-webkit-search-cancel-button,\\n[type=\\\""search\\\""]::-webkit-search-decoration {\\n  -webkit-appearance: none;\\n}\\n\\n::-webkit-file-upload-button {\\n  font: inherit;\\n  -webkit-appearance: button;\\n}\\n\\noutput {\\n  display: inline-block;\\n}\\n\\nsummary {\\n  display: list-item;\\n}\\n\\ntemplate {\\n  display: none;\\n}\\n\\n[hidden] {\\n  display: none !important;\\n}\\n\\nh1, h2, h3, h4, h5, h6,\\n.h1, .h2, .h3, .h4, .h5, .h6 {\\n  margin-bottom: 0.5rem;\\n  font-family: inherit;\\n  font-weight: 500;\\n  line-height: 1.2;\\n  color: inherit;\\n}\\n\\nh1, .h1 {\\n  font-size: 2.5rem;\\n}\\n\\nh2, .h2 {\\n  font-size: 2rem;\\n}\\n\\nh3, .h3 {\\n  font-size: 1.75rem;\\n}\\n\\nh4, .h4 {\\n  font-size: 1.5rem;\\n}\\n\\nh5, .h5 {\\n  font-size: 1.25rem;\\n}\\n\\nh6, .h6 {\\n  font-size: 1rem;\\n}\\n\\n.lead {\\n  font-size: 1.25rem;\\n  font-weight: 300;\\n}\\n\\n.display-1 {\\n  font-size: 6rem;\\n  font-weight: 300;\\n  line-height: 1.2;\\n}\\n\\n.display-2 {\\n  font-size: 5.5rem;\\n  font-weight: 300;\\n  line-height: 1.2;\\n}\\n\\n.display-3 {\\n  font-size: 4.5rem;\\n  font-weight: 300;\\n  line-height: 1.2;\\n}\\n\\n.display-4 {\\n  font-size: 3.5rem;\\n  font-weight: 300;\\n  line-height: 1.2;\\n}\\n\\nhr {\\n  margin-top: 1rem;\\n  margin-bottom: 1rem;\\n  border: 0;\\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\\n}\\n\\nsmall,\\n.small {\\n  font-size: 80%;\\n  font-weight: 400;\\n}\\n\\nmark,\\n.mark {\\n  padding: 0.2em;\\n  background-color: #fcf8e3;\\n}\\n\\n.list-unstyled {\\n  padding-left: 0;\\n  list-style: none;\\n}\\n\\n.list-inline {\\n  padding-left: 0;\\n  list-style: none;\\n}\\n\\n.list-inline-item {\\n  display: inline-block;\\n}\\n\\n.list-inline-item:not(:last-child) {\\n  margin-right: 5px;\\n}\\n\\n.initialism {\\n  font-size: 90%;\\n  text-transform: uppercase;\\n}\\n\\n.blockquote {\\n  margin-bottom: 1rem;\\n  font-size: 1.25rem;\\n}\\n\\n.blockquote-footer {\\n  display: block;\\n  font-size: 80%;\\n  color: #868e96;\\n}\\n\\n.blockquote-footer::before {\\n  content: \\\""\\\\2014   \\\\A0\\\"";\\n}\\n\\n.img-fluid {\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n.img-thumbnail {\\n  padding: 0.25rem;\\n  background-color: #fff;\\n  border: 1px solid #ddd;\\n  border-radius: 0.25rem;\\n  transition: all 0.2s ease-in-out;\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n.figure {\\n  display: inline-block;\\n}\\n\\n.figure-img {\\n  margin-bottom: 0.5rem;\\n  line-height: 1;\\n}\\n\\n.figure-caption {\\n  font-size: 90%;\\n  color: #868e96;\\n}\\n\\ncode,\\nkbd,\\npre,\\nsamp {\\n  font-family: \\\""SFMono-Regular\\\"", Menlo, Monaco, Consolas, \\\""Liberation Mono\\\"", \\\""Courier New\\\"", monospace;\\n}\\n\\ncode {\\n  padding: 0.2rem 0.4rem;\\n  font-size: 90%;\\n  color: #bd4147;\\n  background-color: #f8f9fa;\\n  border-radius: 0.25rem;\\n}\\n\\na > code {\\n  padding: 0;\\n  color: inherit;\\n  background-color: inherit;\\n}\\n\\nkbd {\\n  padding: 0.2rem 0.4rem;\\n  font-size: 90%;\\n  color: #fff;\\n  background-color: #212529;\\n  border-radius: 0.2rem;\\n}\\n\\nkbd kbd {\\n  padding: 0;\\n  font-size: 100%;\\n  font-weight: 700;\\n}\\n\\npre {\\n  display: block;\\n  margin-top: 0;\\n  margin-bottom: 1rem;\\n  font-size: 90%;\\n  color: #212529;\\n}\\n\\npre code {\\n  padding: 0;\\n  font-size: inherit;\\n  color: inherit;\\n  background-color: transparent;\\n  border-radius: 0;\\n}\\n\\n.pre-scrollable {\\n  max-height: 340px;\\n  overflow-y: scroll;\\n}\\n\\n.container {\\n  width: 100%;\\n  padding-right: 15px;\\n  padding-left: 15px;\\n  margin-right: auto;\\n  margin-left: auto;\\n}\\n\\n@media (min-width: 576px) {\\n  .container {\\n    max-width: 540px;\\n  }\\n}\\n\\n@media (min-width: 768px) {\\n  .container {\\n    max-width: 720px;\\n  }\\n}\\n\\n@media (min-width: 992px) {\\n  .container {\\n    max-width: 960px;\\n  }\\n}\\n\\n@media (min-width: 1200px) {\\n  .container {\\n    max-width: 1140px;\\n  }\\n}\\n\\n.container-fluid {\\n  width: 100%;\\n  padding-right: 15px;\\n  padding-left: 15px;\\n  margin-right: auto;\\n  margin-left: auto;\\n}\\n\\n.row {\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  margin-right: -15px;\\n  margin-left: -15px;\\n}\\n\\n.no-gutters {\\n  margin-right: 0;\\n  margin-left: 0;\\n}\\n\\n.no-gutters > .col,\\n.no-gutters > [class*=\\\""col-\\\""] {\\n  padding-right: 0;\\n  padding-left: 0;\\n}\\n\\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\\n.col-xl-auto {\\n  position: relative;\\n  width: 100%;\\n  min-height: 1px;\\n  padding-right: 15px;\\n  padding-left: 15px;\\n}\\n\\n.col {\\n  -ms-flex-preferred-size: 0;\\n      flex-basis: 0;\\n  -ms-flex-positive: 1;\\n      flex-grow: 1;\\n  max-width: 100%;\\n}\\n\\n.col-auto {\\n  -ms-flex: 0 0 auto;\\n      flex: 0 0 auto;\\n  width: auto;\\n  max-width: none;\\n}\\n\\n.col-1 {\\n  -ms-flex: 0 0 8.333333%;\\n      flex: 0 0 8.333333%;\\n  max-width: 8.333333%;\\n}\\n\\n.col-2 {\\n  -ms-flex: 0 0 16.666667%;\\n      flex: 0 0 16.666667%;\\n  max-width: 16.666667%;\\n}\\n\\n.col-3 {\\n  -ms-flex: 0 0 25%;\\n      flex: 0 0 25%;\\n  max-width: 25%;\\n}\\n\\n.col-4 {\\n  -ms-flex: 0 0 33.333333%;\\n      flex: 0 0 33.333333%;\\n  max-width: 33.333333%;\\n}\\n\\n.col-5 {\\n  -ms-flex: 0 0 41.666667%;\\n      flex: 0 0 41.666667%;\\n  max-width: 41.666667%;\\n}\\n\\n.col-6 {\\n  -ms-flex: 0 0 50%;\\n      flex: 0 0 50%;\\n  max-width: 50%;\\n}\\n\\n.col-7 {\\n  -ms-flex: 0 0 58.333333%;\\n      flex: 0 0 58.333333%;\\n  max-width: 58.333333%;\\n}\\n\\n.col-8 {\\n  -ms-flex: 0 0 66.666667%;\\n      flex: 0 0 66.666667%;\\n  max-width: 66.666667%;\\n}\\n\\n.col-9 {\\n  -ms-flex: 0 0 75%;\\n      flex: 0 0 75%;\\n  max-width: 75%;\\n}\\n\\n.col-10 {\\n  -ms-flex: 0 0 83.333333%;\\n      flex: 0 0 83.333333%;\\n  max-width: 83.333333%;\\n}\\n\\n.col-11 {\\n  -ms-flex: 0 0 91.666667%;\\n      flex: 0 0 91.666667%;\\n  max-width: 91.666667%;\\n}\\n\\n.col-12 {\\n  -ms-flex: 0 0 100%;\\n      flex: 0 0 100%;\\n  max-width: 100%;\\n}\\n\\n.order-first {\\n  -ms-flex-order: -1;\\n      order: -1;\\n}\\n\\n.order-1 {\\n  -ms-flex-order: 1;\\n      order: 1;\\n}\\n\\n.order-2 {\\n  -ms-flex-order: 2;\\n      order: 2;\\n}\\n\\n.order-3 {\\n  -ms-flex-order: 3;\\n      order: 3;\\n}\\n\\n.order-4 {\\n  -ms-flex-order: 4;\\n      order: 4;\\n}\\n\\n.order-5 {\\n  -ms-flex-order: 5;\\n      order: 5;\\n}\\n\\n.order-6 {\\n  -ms-flex-order: 6;\\n      order: 6;\\n}\\n\\n.order-7 {\\n  -ms-flex-order: 7;\\n      order: 7;\\n}\\n\\n.order-8 {\\n  -ms-flex-order: 8;\\n      order: 8;\\n}\\n\\n.order-9 {\\n  -ms-flex-order: 9;\\n      order: 9;\\n}\\n\\n.order-10 {\\n  -ms-flex-order: 10;\\n      order: 10;\\n}\\n\\n.order-11 {\\n  -ms-flex-order: 11;\\n      order: 11;\\n}\\n\\n.order-12 {\\n  -ms-flex-order: 12;\\n      order: 12;\\n}\\n\\n.offset-1 {\\n  margin-left: 8.333333%;\\n}\\n\\n.offset-2 {\\n  margin-left: 16.666667%;\\n}\\n\\n.offset-3 {\\n  margin-left: 25%;\\n}\\n\\n.offset-4 {\\n  margin-left: 33.333333%;\\n}\\n\\n.offset-5 {\\n  margin-left: 41.666667%;\\n}\\n\\n.offset-6 {\\n  margin-left: 50%;\\n}\\n\\n.offset-7 {\\n  margin-left: 58.333333%;\\n}\\n\\n.offset-8 {\\n  margin-left: 66.666667%;\\n}\\n\\n.offset-9 {\\n  margin-left: 75%;\\n}\\n\\n.offset-10 {\\n  margin-left: 83.333333%;\\n}\\n\\n.offset-11 {\\n  margin-left: 91.666667%;\\n}\\n\\n@media (min-width: 576px) {\\n  .col-sm {\\n    -ms-flex-preferred-size: 0;\\n        flex-basis: 0;\\n    -ms-flex-positive: 1;\\n        flex-grow: 1;\\n    max-width: 100%;\\n  }\\n  .col-sm-auto {\\n    -ms-flex: 0 0 auto;\\n        flex: 0 0 auto;\\n    width: auto;\\n    max-width: none;\\n  }\\n  .col-sm-1 {\\n    -ms-flex: 0 0 8.333333%;\\n        flex: 0 0 8.333333%;\\n    max-width: 8.333333%;\\n  }\\n  .col-sm-2 {\\n    -ms-flex: 0 0 16.666667%;\\n        flex: 0 0 16.666667%;\\n    max-width: 16.666667%;\\n  }\\n  .col-sm-3 {\\n    -ms-flex: 0 0 25%;\\n        flex: 0 0 25%;\\n    max-width: 25%;\\n  }\\n  .col-sm-4 {\\n    -ms-flex: 0 0 33.333333%;\\n        flex: 0 0 33.333333%;\\n    max-width: 33.333333%;\\n  }\\n  .col-sm-5 {\\n    -ms-flex: 0 0 41.666667%;\\n        flex: 0 0 41.666667%;\\n    max-width: 41.666667%;\\n  }\\n  .col-sm-6 {\\n    -ms-flex: 0 0 50%;\\n        flex: 0 0 50%;\\n    max-width: 50%;\\n  }\\n  .col-sm-7 {\\n    -ms-flex: 0 0 58.333333%;\\n        flex: 0 0 58.333333%;\\n    max-width: 58.333333%;\\n  }\\n  .col-sm-8 {\\n    -ms-flex: 0 0 66.666667%;\\n        flex: 0 0 66.666667%;\\n    max-width: 66.666667%;\\n  }\\n  .col-sm-9 {\\n    -ms-flex: 0 0 75%;\\n        flex: 0 0 75%;\\n    max-width: 75%;\\n  }\\n  .col-sm-10 {\\n    -ms-flex: 0 0 83.333333%;\\n        flex: 0 0 83.333333%;\\n    max-width: 83.333333%;\\n  }\\n  .col-sm-11 {\\n    -ms-flex: 0 0 91.666667%;\\n        flex: 0 0 91.666667%;\\n    max-width: 91.666667%;\\n  }\\n  .col-sm-12 {\\n    -ms-flex: 0 0 100%;\\n        flex: 0 0 100%;\\n    max-width: 100%;\\n  }\\n  .order-sm-first {\\n    -ms-flex-order: -1;\\n        order: -1;\\n  }\\n  .order-sm-1 {\\n    -ms-flex-order: 1;\\n        order: 1;\\n  }\\n  .order-sm-2 {\\n    -ms-flex-order: 2;\\n        order: 2;\\n  }\\n  .order-sm-3 {\\n    -ms-flex-order: 3;\\n        order: 3;\\n  }\\n  .order-sm-4 {\\n    -ms-flex-order: 4;\\n        order: 4;\\n  }\\n  .order-sm-5 {\\n    -ms-flex-order: 5;\\n        order: 5;\\n  }\\n  .order-sm-6 {\\n    -ms-flex-order: 6;\\n        order: 6;\\n  }\\n  .order-sm-7 {\\n    -ms-flex-order: 7;\\n        order: 7;\\n  }\\n  .order-sm-8 {\\n    -ms-flex-order: 8;\\n        order: 8;\\n  }\\n  .order-sm-9 {\\n    -ms-flex-order: 9;\\n        order: 9;\\n  }\\n  .order-sm-10 {\\n    -ms-flex-order: 10;\\n        order: 10;\\n  }\\n  .order-sm-11 {\\n    -ms-flex-order: 11;\\n        order: 11;\\n  }\\n  .order-sm-12 {\\n    -ms-flex-order: 12;\\n        order: 12;\\n  }\\n  .offset-sm-0 {\\n    margin-left: 0;\\n  }\\n  .offset-sm-1 {\\n    margin-left: 8.333333%;\\n  }\\n  .offset-sm-2 {\\n    margin-left: 16.666667%;\\n  }\\n  .offset-sm-3 {\\n    margin-left: 25%;\\n  }\\n  .offset-sm-4 {\\n    margin-left: 33.333333%;\\n  }\\n  .offset-sm-5 {\\n    margin-left: 41.666667%;\\n  }\\n  .offset-sm-6 {\\n    margin-left: 50%;\\n  }\\n  .offset-sm-7 {\\n    margin-left: 58.333333%;\\n  }\\n  .offset-sm-8 {\\n    margin-left: 66.666667%;\\n  }\\n  .offset-sm-9 {\\n    margin-left: 75%;\\n  }\\n  .offset-sm-10 {\\n    margin-left: 83.333333%;\\n  }\\n  .offset-sm-11 {\\n    margin-left: 91.666667%;\\n  }\\n}\\n\\n@media (min-width: 768px) {\\n  .col-md {\\n    -ms-flex-preferred-size: 0;\\n        flex-basis: 0;\\n    -ms-flex-positive: 1;\\n        flex-grow: 1;\\n    max-width: 100%;\\n  }\\n  .col-md-auto {\\n    -ms-flex: 0 0 auto;\\n        flex: 0 0 auto;\\n    width: auto;\\n    max-width: none;\\n  }\\n  .col-md-1 {\\n    -ms-flex: 0 0 8.333333%;\\n        flex: 0 0 8.333333%;\\n    max-width: 8.333333%;\\n  }\\n  .col-md-2 {\\n    -ms-flex: 0 0 16.666667%;\\n        flex: 0 0 16.666667%;\\n    max-width: 16.666667%;\\n  }\\n  .col-md-3 {\\n    -ms-flex: 0 0 25%;\\n        flex: 0 0 25%;\\n    max-width: 25%;\\n  }\\n  .col-md-4 {\\n    -ms-flex: 0 0 33.333333%;\\n        flex: 0 0 33.333333%;\\n    max-width: 33.333333%;\\n  }\\n  .col-md-5 {\\n    -ms-flex: 0 0 41.666667%;\\n        flex: 0 0 41.666667%;\\n    max-width: 41.666667%;\\n  }\\n  .col-md-6 {\\n    -ms-flex: 0 0 50%;\\n        flex: 0 0 50%;\\n    max-width: 50%;\\n  }\\n  .col-md-7 {\\n    -ms-flex: 0 0 58.333333%;\\n        flex: 0 0 58.333333%;\\n    max-width: 58.333333%;\\n  }\\n  .col-md-8 {\\n    -ms-flex: 0 0 66.666667%;\\n        flex: 0 0 66.666667%;\\n    max-width: 66.666667%;\\n  }\\n  .col-md-9 {\\n    -ms-flex: 0 0 75%;\\n        flex: 0 0 75%;\\n    max-width: 75%;\\n  }\\n  .col-md-10 {\\n    -ms-flex: 0 0 83.333333%;\\n        flex: 0 0 83.333333%;\\n    max-width: 83.333333%;\\n  }\\n  .col-md-11 {\\n    -ms-flex: 0 0 91.666667%;\\n        flex: 0 0 91.666667%;\\n    max-width: 91.666667%;\\n  }\\n  .col-md-12 {\\n    -ms-flex: 0 0 100%;\\n        flex: 0 0 100%;\\n    max-width: 100%;\\n  }\\n  .order-md-first {\\n    -ms-flex-order: -1;\\n        order: -1;\\n  }\\n  .order-md-1 {\\n    -ms-flex-order: 1;\\n        order: 1;\\n  }\\n  .order-md-2 {\\n    -ms-flex-order: 2;\\n        order: 2;\\n  }\\n  .order-md-3 {\\n    -ms-flex-order: 3;\\n        order: 3;\\n  }\\n  .order-md-4 {\\n    -ms-flex-order: 4;\\n        order: 4;\\n  }\\n  .order-md-5 {\\n    -ms-flex-order: 5;\\n        order: 5;\\n  }\\n  .order-md-6 {\\n    -ms-flex-order: 6;\\n        order: 6;\\n  }\\n  .order-md-7 {\\n    -ms-flex-order: 7;\\n        order: 7;\\n  }\\n  .order-md-8 {\\n    -ms-flex-order: 8;\\n        order: 8;\\n  }\\n  .order-md-9 {\\n    -ms-flex-order: 9;\\n        order: 9;\\n  }\\n  .order-md-10 {\\n    -ms-flex-order: 10;\\n        order: 10;\\n  }\\n  .order-md-11 {\\n    -ms-flex-order: 11;\\n        order: 11;\\n  }\\n  .order-md-12 {\\n    -ms-flex-order: 12;\\n        order: 12;\\n  }\\n  .offset-md-0 {\\n    margin-left: 0;\\n  }\\n  .offset-md-1 {\\n    margin-left: 8.333333%;\\n  }\\n  .offset-md-2 {\\n    margin-left: 16.666667%;\\n  }\\n  .offset-md-3 {\\n    margin-left: 25%;\\n  }\\n  .offset-md-4 {\\n    margin-left: 33.333333%;\\n  }\\n  .offset-md-5 {\\n    margin-left: 41.666667%;\\n  }\\n  .offset-md-6 {\\n    margin-left: 50%;\\n  }\\n  .offset-md-7 {\\n    margin-left: 58.333333%;\\n  }\\n  .offset-md-8 {\\n    margin-left: 66.666667%;\\n  }\\n  .offset-md-9 {\\n    margin-left: 75%;\\n  }\\n  .offset-md-10 {\\n    margin-left: 83.333333%;\\n  }\\n  .offset-md-11 {\\n    margin-left: 91.666667%;\\n  }\\n}\\n\\n@media (min-width: 992px) {\\n  .col-lg {\\n    -ms-flex-preferred-size: 0;\\n        flex-basis: 0;\\n    -ms-flex-positive: 1;\\n        flex-grow: 1;\\n    max-width: 100%;\\n  }\\n  .col-lg-auto {\\n    -ms-flex: 0 0 auto;\\n        flex: 0 0 auto;\\n    width: auto;\\n    max-width: none;\\n  }\\n  .col-lg-1 {\\n    -ms-flex: 0 0 8.333333%;\\n        flex: 0 0 8.333333%;\\n    max-width: 8.333333%;\\n  }\\n  .col-lg-2 {\\n    -ms-flex: 0 0 16.666667%;\\n        flex: 0 0 16.666667%;\\n    max-width: 16.666667%;\\n  }\\n  .col-lg-3 {\\n    -ms-flex: 0 0 25%;\\n        flex: 0 0 25%;\\n    max-width: 25%;\\n  }\\n  .col-lg-4 {\\n    -ms-flex: 0 0 33.333333%;\\n        flex: 0 0 33.333333%;\\n    max-width: 33.333333%;\\n  }\\n  .col-lg-5 {\\n    -ms-flex: 0 0 41.666667%;\\n        flex: 0 0 41.666667%;\\n    max-width: 41.666667%;\\n  }\\n  .col-lg-6 {\\n    -ms-flex: 0 0 50%;\\n        flex: 0 0 50%;\\n    max-width: 50%;\\n  }\\n  .col-lg-7 {\\n    -ms-flex: 0 0 58.333333%;\\n        flex: 0 0 58.333333%;\\n    max-width: 58.333333%;\\n  }\\n  .col-lg-8 {\\n    -ms-flex: 0 0 66.666667%;\\n        flex: 0 0 66.666667%;\\n    max-width: 66.666667%;\\n  }\\n  .col-lg-9 {\\n    -ms-flex: 0 0 75%;\\n        flex: 0 0 75%;\\n    max-width: 75%;\\n  }\\n  .col-lg-10 {\\n    -ms-flex: 0 0 83.333333%;\\n        flex: 0 0 83.333333%;\\n    max-width: 83.333333%;\\n  }\\n  .col-lg-11 {\\n    -ms-flex: 0 0 91.666667%;\\n        flex: 0 0 91.666667%;\\n    max-width: 91.666667%;\\n  }\\n  .col-lg-12 {\\n    -ms-flex: 0 0 100%;\\n        flex: 0 0 100%;\\n    max-width: 100%;\\n  }\\n  .order-lg-first {\\n    -ms-flex-order: -1;\\n        order: -1;\\n  }\\n  .order-lg-1 {\\n    -ms-flex-order: 1;\\n        order: 1;\\n  }\\n  .order-lg-2 {\\n    -ms-flex-order: 2;\\n        order: 2;\\n  }\\n  .order-lg-3 {\\n    -ms-flex-order: 3;\\n        order: 3;\\n  }\\n  .order-lg-4 {\\n    -ms-flex-order: 4;\\n        order: 4;\\n  }\\n  .order-lg-5 {\\n    -ms-flex-order: 5;\\n        order: 5;\\n  }\\n  .order-lg-6 {\\n    -ms-flex-order: 6;\\n        order: 6;\\n  }\\n  .order-lg-7 {\\n    -ms-flex-order: 7;\\n        order: 7;\\n  }\\n  .order-lg-8 {\\n    -ms-flex-order: 8;\\n        order: 8;\\n  }\\n  .order-lg-9 {\\n    -ms-flex-order: 9;\\n        order: 9;\\n  }\\n  .order-lg-10 {\\n    -ms-flex-order: 10;\\n        order: 10;\\n  }\\n  .order-lg-11 {\\n    -ms-flex-order: 11;\\n        order: 11;\\n  }\\n  .order-lg-12 {\\n    -ms-flex-order: 12;\\n        order: 12;\\n  }\\n  .offset-lg-0 {\\n    margin-left: 0;\\n  }\\n  .offset-lg-1 {\\n    margin-left: 8.333333%;\\n  }\\n  .offset-lg-2 {\\n    margin-left: 16.666667%;\\n  }\\n  .offset-lg-3 {\\n    margin-left: 25%;\\n  }\\n  .offset-lg-4 {\\n    margin-left: 33.333333%;\\n  }\\n  .offset-lg-5 {\\n    margin-left: 41.666667%;\\n  }\\n  .offset-lg-6 {\\n    margin-left: 50%;\\n  }\\n  .offset-lg-7 {\\n    margin-left: 58.333333%;\\n  }\\n  .offset-lg-8 {\\n    margin-left: 66.666667%;\\n  }\\n  .offset-lg-9 {\\n    margin-left: 75%;\\n  }\\n  .offset-lg-10 {\\n    margin-left: 83.333333%;\\n  }\\n  .offset-lg-11 {\\n    margin-left: 91.666667%;\\n  }\\n}\\n\\n@media (min-width: 1200px) {\\n  .col-xl {\\n    -ms-flex-preferred-size: 0;\\n        flex-basis: 0;\\n    -ms-flex-positive: 1;\\n        flex-grow: 1;\\n    max-width: 100%;\\n  }\\n  .col-xl-auto {\\n    -ms-flex: 0 0 auto;\\n        flex: 0 0 auto;\\n    width: auto;\\n    max-width: none;\\n  }\\n  .col-xl-1 {\\n    -ms-flex: 0 0 8.333333%;\\n        flex: 0 0 8.333333%;\\n    max-width: 8.333333%;\\n  }\\n  .col-xl-2 {\\n    -ms-flex: 0 0 16.666667%;\\n        flex: 0 0 16.666667%;\\n    max-width: 16.666667%;\\n  }\\n  .col-xl-3 {\\n    -ms-flex: 0 0 25%;\\n        flex: 0 0 25%;\\n    max-width: 25%;\\n  }\\n  .col-xl-4 {\\n    -ms-flex: 0 0 33.333333%;\\n        flex: 0 0 33.333333%;\\n    max-width: 33.333333%;\\n  }\\n  .col-xl-5 {\\n    -ms-flex: 0 0 41.666667%;\\n        flex: 0 0 41.666667%;\\n    max-width: 41.666667%;\\n  }\\n  .col-xl-6 {\\n    -ms-flex: 0 0 50%;\\n        flex: 0 0 50%;\\n    max-width: 50%;\\n  }\\n  .col-xl-7 {\\n    -ms-flex: 0 0 58.333333%;\\n        flex: 0 0 58.333333%;\\n    max-width: 58.333333%;\\n  }\\n  .col-xl-8 {\\n    -ms-flex: 0 0 66.666667%;\\n        flex: 0 0 66.666667%;\\n    max-width: 66.666667%;\\n  }\\n  .col-xl-9 {\\n    -ms-flex: 0 0 75%;\\n        flex: 0 0 75%;\\n    max-width: 75%;\\n  }\\n  .col-xl-10 {\\n    -ms-flex: 0 0 83.333333%;\\n        flex: 0 0 83.333333%;\\n    max-width: 83.333333%;\\n  }\\n  .col-xl-11 {\\n    -ms-flex: 0 0 91.666667%;\\n        flex: 0 0 91.666667%;\\n    max-width: 91.666667%;\\n  }\\n  .col-xl-12 {\\n    -ms-flex: 0 0 100%;\\n        flex: 0 0 100%;\\n    max-width: 100%;\\n  }\\n  .order-xl-first {\\n    -ms-flex-order: -1;\\n        order: -1;\\n  }\\n  .order-xl-1 {\\n    -ms-flex-order: 1;\\n        order: 1;\\n  }\\n  .order-xl-2 {\\n    -ms-flex-order: 2;\\n        order: 2;\\n  }\\n  .order-xl-3 {\\n    -ms-flex-order: 3;\\n        order: 3;\\n  }\\n  .order-xl-4 {\\n    -ms-flex-order: 4;\\n        order: 4;\\n  }\\n  .order-xl-5 {\\n    -ms-flex-order: 5;\\n        order: 5;\\n  }\\n  .order-xl-6 {\\n    -ms-flex-order: 6;\\n        order: 6;\\n  }\\n  .order-xl-7 {\\n    -ms-flex-order: 7;\\n        order: 7;\\n  }\\n  .order-xl-8 {\\n    -ms-flex-order: 8;\\n        order: 8;\\n  }\\n  .order-xl-9 {\\n    -ms-flex-order: 9;\\n        order: 9;\\n  }\\n  .order-xl-10 {\\n    -ms-flex-order: 10;\\n        order: 10;\\n  }\\n  .order-xl-11 {\\n    -ms-flex-order: 11;\\n        order: 11;\\n  }\\n  .order-xl-12 {\\n    -ms-flex-order: 12;\\n        order: 12;\\n  }\\n  .offset-xl-0 {\\n    margin-left: 0;\\n  }\\n  .offset-xl-1 {\\n    margin-left: 8.333333%;\\n  }\\n  .offset-xl-2 {\\n    margin-left: 16.666667%;\\n  }\\n  .offset-xl-3 {\\n    margin-left: 25%;\\n  }\\n  .offset-xl-4 {\\n    margin-left: 33.333333%;\\n  }\\n  .offset-xl-5 {\\n    margin-left: 41.666667%;\\n  }\\n  .offset-xl-6 {\\n    margin-left: 50%;\\n  }\\n  .offset-xl-7 {\\n    margin-left: 58.333333%;\\n  }\\n  .offset-xl-8 {\\n    margin-left: 66.666667%;\\n  }\\n  .offset-xl-9 {\\n    margin-left: 75%;\\n  }\\n  .offset-xl-10 {\\n    margin-left: 83.333333%;\\n  }\\n  .offset-xl-11 {\\n    margin-left: 91.666667%;\\n  }\\n}\\n\\n.table {\\n  width: 100%;\\n  max-width: 100%;\\n  margin-bottom: 1rem;\\n  background-color: transparent;\\n}\\n\\n.table th,\\n.table td {\\n  padding: 0.75rem;\\n  vertical-align: top;\\n  border-top: 1px solid #e9ecef;\\n}\\n\\n.table thead th {\\n  vertical-align: bottom;\\n  border-bottom: 2px solid #e9ecef;\\n}\\n\\n.table tbody + tbody {\\n  border-top: 2px solid #e9ecef;\\n}\\n\\n.table .table {\\n  background-color: #fff;\\n}\\n\\n.table-sm th,\\n.table-sm td {\\n  padding: 0.3rem;\\n}\\n\\n.table-bordered {\\n  border: 1px solid #e9ecef;\\n}\\n\\n.table-bordered th,\\n.table-bordered td {\\n  border: 1px solid #e9ecef;\\n}\\n\\n.table-bordered thead th,\\n.table-bordered thead td {\\n  border-bottom-width: 2px;\\n}\\n\\n.table-striped tbody tr:nth-of-type(odd) {\\n  background-color: rgba(0, 0, 0, 0.05);\\n}\\n\\n.table-hover tbody tr:hover {\\n  background-color: rgba(0, 0, 0, 0.075);\\n}\\n\\n.table-primary,\\n.table-primary > th,\\n.table-primary > td {\\n  background-color: #b8daff;\\n}\\n\\n.table-hover .table-primary:hover {\\n  background-color: #9fcdff;\\n}\\n\\n.table-hover .table-primary:hover > td,\\n.table-hover .table-primary:hover > th {\\n  background-color: #9fcdff;\\n}\\n\\n.table-secondary,\\n.table-secondary > th,\\n.table-secondary > td {\\n  background-color: #dddfe2;\\n}\\n\\n.table-hover .table-secondary:hover {\\n  background-color: #cfd2d6;\\n}\\n\\n.table-hover .table-secondary:hover > td,\\n.table-hover .table-secondary:hover > th {\\n  background-color: #cfd2d6;\\n}\\n\\n.table-success,\\n.table-success > th,\\n.table-success > td {\\n  background-color: #c3e6cb;\\n}\\n\\n.table-hover .table-success:hover {\\n  background-color: #b1dfbb;\\n}\\n\\n.table-hover .table-success:hover > td,\\n.table-hover .table-success:hover > th {\\n  background-color: #b1dfbb;\\n}\\n\\n.table-info,\\n.table-info > th,\\n.table-info > td {\\n  background-color: #bee5eb;\\n}\\n\\n.table-hover .table-info:hover {\\n  background-color: #abdde5;\\n}\\n\\n.table-hover .table-info:hover > td,\\n.table-hover .table-info:hover > th {\\n  background-color: #abdde5;\\n}\\n\\n.table-warning,\\n.table-warning > th,\\n.table-warning > td {\\n  background-color: #ffeeba;\\n}\\n\\n.table-hover .table-warning:hover {\\n  background-color: #ffe8a1;\\n}\\n\\n.table-hover .table-warning:hover > td,\\n.table-hover .table-warning:hover > th {\\n  background-color: #ffe8a1;\\n}\\n\\n.table-danger,\\n.table-danger > th,\\n.table-danger > td {\\n  background-color: #f5c6cb;\\n}\\n\\n.table-hover .table-danger:hover {\\n  background-color: #f1b0b7;\\n}\\n\\n.table-hover .table-danger:hover > td,\\n.table-hover .table-danger:hover > th {\\n  background-color: #f1b0b7;\\n}\\n\\n.table-light,\\n.table-light > th,\\n.table-light > td {\\n  background-color: #fdfdfe;\\n}\\n\\n.table-hover .table-light:hover {\\n  background-color: #ececf6;\\n}\\n\\n.table-hover .table-light:hover > td,\\n.table-hover .table-light:hover > th {\\n  background-color: #ececf6;\\n}\\n\\n.table-dark,\\n.table-dark > th,\\n.table-dark > td {\\n  background-color: #c6c8ca;\\n}\\n\\n.table-hover .table-dark:hover {\\n  background-color: #b9bbbe;\\n}\\n\\n.table-hover .table-dark:hover > td,\\n.table-hover .table-dark:hover > th {\\n  background-color: #b9bbbe;\\n}\\n\\n.table-active,\\n.table-active > th,\\n.table-active > td {\\n  background-color: rgba(0, 0, 0, 0.075);\\n}\\n\\n.table-hover .table-active:hover {\\n  background-color: rgba(0, 0, 0, 0.075);\\n}\\n\\n.table-hover .table-active:hover > td,\\n.table-hover .table-active:hover > th {\\n  background-color: rgba(0, 0, 0, 0.075);\\n}\\n\\n.table .thead-dark th {\\n  color: #fff;\\n  background-color: #212529;\\n  border-color: #32383e;\\n}\\n\\n.table .thead-light th {\\n  color: #495057;\\n  background-color: #e9ecef;\\n  border-color: #e9ecef;\\n}\\n\\n.table-dark {\\n  color: #fff;\\n  background-color: #212529;\\n}\\n\\n.table-dark th,\\n.table-dark td,\\n.table-dark thead th {\\n  border-color: #32383e;\\n}\\n\\n.table-dark.table-bordered {\\n  border: 0;\\n}\\n\\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\\n  background-color: rgba(255, 255, 255, 0.05);\\n}\\n\\n.table-dark.table-hover tbody tr:hover {\\n  background-color: rgba(255, 255, 255, 0.075);\\n}\\n\\n@media (max-width: 575px) {\\n  .table-responsive-sm {\\n    display: block;\\n    width: 100%;\\n    overflow-x: auto;\\n    -webkit-overflow-scrolling: touch;\\n    -ms-overflow-style: -ms-autohiding-scrollbar;\\n  }\\n  .table-responsive-sm.table-bordered {\\n    border: 0;\\n  }\\n}\\n\\n@media (max-width: 767px) {\\n  .table-responsive-md {\\n    display: block;\\n    width: 100%;\\n    overflow-x: auto;\\n    -webkit-overflow-scrolling: touch;\\n    -ms-overflow-style: -ms-autohiding-scrollbar;\\n  }\\n  .table-responsive-md.table-bordered {\\n    border: 0;\\n  }\\n}\\n\\n@media (max-width: 991px) {\\n  .table-responsive-lg {\\n    display: block;\\n    width: 100%;\\n    overflow-x: auto;\\n    -webkit-overflow-scrolling: touch;\\n    -ms-overflow-style: -ms-autohiding-scrollbar;\\n  }\\n  .table-responsive-lg.table-bordered {\\n    border: 0;\\n  }\\n}\\n\\n@media (max-width: 1199px) {\\n  .table-responsive-xl {\\n    display: block;\\n    width: 100%;\\n    overflow-x: auto;\\n    -webkit-overflow-scrolling: touch;\\n    -ms-overflow-style: -ms-autohiding-scrollbar;\\n  }\\n  .table-responsive-xl.table-bordered {\\n    border: 0;\\n  }\\n}\\n\\n.table-responsive {\\n  display: block;\\n  width: 100%;\\n  overflow-x: auto;\\n  -webkit-overflow-scrolling: touch;\\n  -ms-overflow-style: -ms-autohiding-scrollbar;\\n}\\n\\n.table-responsive.table-bordered {\\n  border: 0;\\n}\\n\\n.form-control {\\n  display: block;\\n  width: 100%;\\n  padding: 0.375rem 0.75rem;\\n  font-size: 1rem;\\n  line-height: 1.5;\\n  color: #495057;\\n  background-color: #fff;\\n  background-image: none;\\n  background-clip: padding-box;\\n  border: 1px solid #ced4da;\\n  border-radius: 0.25rem;\\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\\n}\\n\\n.form-control::-ms-expand {\\n  background-color: transparent;\\n  border: 0;\\n}\\n\\n.form-control:focus {\\n  color: #495057;\\n  background-color: #fff;\\n  border-color: #80bdff;\\n  outline: none;\\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\\n}\\n\\n.form-control::-webkit-input-placeholder {\\n  color: #868e96;\\n  opacity: 1;\\n}\\n\\n.form-control:-ms-input-placeholder {\\n  color: #868e96;\\n  opacity: 1;\\n}\\n\\n.form-control::-ms-input-placeholder {\\n  color: #868e96;\\n  opacity: 1;\\n}\\n\\n.form-control::-webkit-input-placeholder {\\n  color: #868e96;\\n  opacity: 1;\\n}\\n\\n.form-control:-ms-input-placeholder {\\n  color: #868e96;\\n  opacity: 1;\\n}\\n\\n.form-control::placeholder {\\n  color: #868e96;\\n  opacity: 1;\\n}\\n\\n.form-control:disabled, .form-control[readonly] {\\n  background-color: #e9ecef;\\n  opacity: 1;\\n}\\n\\nselect.form-control:not([size]):not([multiple]) {\\n  height: calc(2.25rem + 2px);\\n}\\n\\nselect.form-control:focus::-ms-value {\\n  color: #495057;\\n  background-color: #fff;\\n}\\n\\n.form-control-file,\\n.form-control-range {\\n  display: block;\\n}\\n\\n.col-form-label {\\n  padding-top: calc(0.375rem + 1px);\\n  padding-bottom: calc(0.375rem + 1px);\\n  margin-bottom: 0;\\n  line-height: 1.5;\\n}\\n\\n.col-form-label-lg {\\n  padding-top: calc(0.5rem + 1px);\\n  padding-bottom: calc(0.5rem + 1px);\\n  font-size: 1.25rem;\\n  line-height: 1.5;\\n}\\n\\n.col-form-label-sm {\\n  padding-top: calc(0.25rem + 1px);\\n  padding-bottom: calc(0.25rem + 1px);\\n  font-size: 0.875rem;\\n  line-height: 1.5;\\n}\\n\\n.col-form-legend {\\n  padding-top: 0.375rem;\\n  padding-bottom: 0.375rem;\\n  margin-bottom: 0;\\n  font-size: 1rem;\\n}\\n\\n.form-control-plaintext {\\n  padding-top: 0.375rem;\\n  padding-bottom: 0.375rem;\\n  margin-bottom: 0;\\n  line-height: 1.5;\\n  background-color: transparent;\\n  border: solid transparent;\\n  border-width: 1px 0;\\n}\\n\\n.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control,\\n.input-group-sm > .form-control-plaintext.input-group-addon,\\n.input-group-sm > .input-group-btn > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control,\\n.input-group-lg > .form-control-plaintext.input-group-addon,\\n.input-group-lg > .input-group-btn > .form-control-plaintext.btn {\\n  padding-right: 0;\\n  padding-left: 0;\\n}\\n\\n.form-control-sm, .input-group-sm > .form-control,\\n.input-group-sm > .input-group-addon,\\n.input-group-sm > .input-group-btn > .btn {\\n  padding: 0.25rem 0.5rem;\\n  font-size: 0.875rem;\\n  line-height: 1.5;\\n  border-radius: 0.2rem;\\n}\\n\\nselect.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]),\\n.input-group-sm > select.input-group-addon:not([size]):not([multiple]),\\n.input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) {\\n  height: calc(1.8125rem + 2px);\\n}\\n\\n.form-control-lg, .input-group-lg > .form-control,\\n.input-group-lg > .input-group-addon,\\n.input-group-lg > .input-group-btn > .btn {\\n  padding: 0.5rem 1rem;\\n  font-size: 1.25rem;\\n  line-height: 1.5;\\n  border-radius: 0.3rem;\\n}\\n\\nselect.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]),\\n.input-group-lg > select.input-group-addon:not([size]):not([multiple]),\\n.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) {\\n  height: calc(2.875rem + 2px);\\n}\\n\\n.form-group {\\n  margin-bottom: 1rem;\\n}\\n\\n.form-text {\\n  display: block;\\n  margin-top: 0.25rem;\\n}\\n\\n.form-row {\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  margin-right: -5px;\\n  margin-left: -5px;\\n}\\n\\n.form-row > .col,\\n.form-row > [class*=\\\""col-\\\""] {\\n  padding-right: 5px;\\n  padding-left: 5px;\\n}\\n\\n.form-check {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 0.5rem;\\n}\\n\\n.form-check.disabled .form-check-label {\\n  color: #868e96;\\n}\\n\\n.form-check-label {\\n  padding-left: 1.25rem;\\n  margin-bottom: 0;\\n}\\n\\n.form-check-input {\\n  position: absolute;\\n  margin-top: 0.25rem;\\n  margin-left: -1.25rem;\\n}\\n\\n.form-check-inline {\\n  display: inline-block;\\n  margin-right: 0.75rem;\\n}\\n\\n.form-check-inline .form-check-label {\\n  vertical-align: middle;\\n}\\n\\n.valid-feedback {\\n  display: none;\\n  margin-top: .25rem;\\n  font-size: .875rem;\\n  color: #28a745;\\n}\\n\\n.valid-tooltip {\\n  position: absolute;\\n  top: 100%;\\n  z-index: 5;\\n  display: none;\\n  width: 250px;\\n  padding: .5rem;\\n  margin-top: .1rem;\\n  font-size: .875rem;\\n  line-height: 1;\\n  color: #fff;\\n  background-color: rgba(40, 167, 69, 0.8);\\n  border-radius: .2rem;\\n}\\n\\n.was-validated .form-control:valid, .form-control.is-valid, .was-validated\\n.custom-select:valid,\\n.custom-select.is-valid {\\n  border-color: #28a745;\\n}\\n\\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated\\n.custom-select:valid:focus,\\n.custom-select.is-valid:focus {\\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\\n}\\n\\n.was-validated .form-control:valid ~ .valid-feedback,\\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\\n.form-control.is-valid ~ .valid-tooltip, .was-validated\\n.custom-select:valid ~ .valid-feedback,\\n.was-validated\\n.custom-select:valid ~ .valid-tooltip,\\n.custom-select.is-valid ~ .valid-feedback,\\n.custom-select.is-valid ~ .valid-tooltip {\\n  display: block;\\n}\\n\\n.was-validated .form-check-input:valid + .form-check-label, .form-check-input.is-valid + .form-check-label {\\n  color: #28a745;\\n}\\n\\n.was-validated .custom-control-input:valid ~ .custom-control-indicator, .custom-control-input.is-valid ~ .custom-control-indicator {\\n  background-color: rgba(40, 167, 69, 0.25);\\n}\\n\\n.was-validated .custom-control-input:valid ~ .custom-control-description, .custom-control-input.is-valid ~ .custom-control-description {\\n  color: #28a745;\\n}\\n\\n.was-validated .custom-file-input:valid ~ .custom-file-control, .custom-file-input.is-valid ~ .custom-file-control {\\n  border-color: #28a745;\\n}\\n\\n.was-validated .custom-file-input:valid ~ .custom-file-control::before, .custom-file-input.is-valid ~ .custom-file-control::before {\\n  border-color: inherit;\\n}\\n\\n.was-validated .custom-file-input:valid:focus, .custom-file-input.is-valid:focus {\\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\\n}\\n\\n.invalid-feedback {\\n  display: none;\\n  margin-top: .25rem;\\n  font-size: .875rem;\\n  color: #dc3545;\\n}\\n\\n.invalid-tooltip {\\n  position: absolute;\\n  top: 100%;\\n  z-index: 5;\\n  display: none;\\n  width: 250px;\\n  padding: .5rem;\\n  margin-top: .1rem;\\n  font-size: .875rem;\\n  line-height: 1;\\n  color: #fff;\\n  background-color: rgba(220, 53, 69, 0.8);\\n  border-radius: .2rem;\\n}\\n\\n.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated\\n.custom-select:invalid,\\n.custom-select.is-invalid {\\n  border-color: #dc3545;\\n}\\n\\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated\\n.custom-select:invalid:focus,\\n.custom-select.is-invalid:focus {\\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\\n}\\n\\n.was-validated .form-control:invalid ~ .invalid-feedback,\\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\\n.form-control.is-invalid ~ .invalid-tooltip, .was-validated\\n.custom-select:invalid ~ .invalid-feedback,\\n.was-validated\\n.custom-select:invalid ~ .invalid-tooltip,\\n.custom-select.is-invalid ~ .invalid-feedback,\\n.custom-select.is-invalid ~ .invalid-tooltip {\\n  display: block;\\n}\\n\\n.was-validated .form-check-input:invalid + .form-check-label, .form-check-input.is-invalid + .form-check-label {\\n  color: #dc3545;\\n}\\n\\n.was-validated .custom-control-input:invalid ~ .custom-control-indicator, .custom-control-input.is-invalid ~ .custom-control-indicator {\\n  background-color: rgba(220, 53, 69, 0.25);\\n}\\n\\n.was-validated .custom-control-input:invalid ~ .custom-control-description, .custom-control-input.is-invalid ~ .custom-control-description {\\n  color: #dc3545;\\n}\\n\\n.was-validated .custom-file-input:invalid ~ .custom-file-control, .custom-file-input.is-invalid ~ .custom-file-control {\\n  border-color: #dc3545;\\n}\\n\\n.was-validated .custom-file-input:invalid ~ .custom-file-control::before, .custom-file-input.is-invalid ~ .custom-file-control::before {\\n  border-color: inherit;\\n}\\n\\n.was-validated .custom-file-input:invalid:focus, .custom-file-input.is-invalid:focus {\\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\\n}\\n\\n.form-inline {\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-flow: row wrap;\\n      flex-flow: row wrap;\\n  -ms-flex-align: center;\\n      align-items: center;\\n}\\n\\n.form-inline .form-check {\\n  width: 100%;\\n}\\n\\n@media (min-width: 576px) {\\n  .form-inline label {\\n    display: -ms-flexbox;\\n    display: flex;\\n    -ms-flex-align: center;\\n        align-items: center;\\n    -ms-flex-pack: center;\\n        justify-content: center;\\n    margin-bottom: 0;\\n  }\\n  .form-inline .form-group {\\n    display: -ms-flexbox;\\n    display: flex;\\n    -ms-flex: 0 0 auto;\\n        flex: 0 0 auto;\\n    -ms-flex-flow: row wrap;\\n        flex-flow: row wrap;\\n    -ms-flex-align: center;\\n        align-items: center;\\n    margin-bottom: 0;\\n  }\\n  .form-inline .form-control {\\n    display: inline-block;\\n    width: auto;\\n    vertical-align: middle;\\n  }\\n  .form-inline .form-control-plaintext {\\n    display: inline-block;\\n  }\\n  .form-inline .input-group {\\n    width: auto;\\n  }\\n  .form-inline .form-check {\\n    display: -ms-flexbox;\\n    display: flex;\\n    -ms-flex-align: center;\\n        align-items: center;\\n    -ms-flex-pack: center;\\n        justify-content: center;\\n    width: auto;\\n    margin-top: 0;\\n    margin-bottom: 0;\\n  }\\n  .form-inline .form-check-label {\\n    padding-left: 0;\\n  }\\n  .form-inline .form-check-input {\\n    position: relative;\\n    margin-top: 0;\\n    margin-right: 0.25rem;\\n    margin-left: 0;\\n  }\\n  .form-inline .custom-control {\\n    display: -ms-flexbox;\\n    display: flex;\\n    -ms-flex-align: center;\\n        align-items: center;\\n    -ms-flex-pack: center;\\n        justify-content: center;\\n    padding-left: 0;\\n  }\\n  .form-inline .custom-control-indicator {\\n    position: static;\\n    display: inline-block;\\n    margin-right: 0.25rem;\\n    vertical-align: text-bottom;\\n  }\\n  .form-inline .has-feedback .form-control-feedback {\\n    top: 0;\\n  }\\n}\\n\\n.btn {\\n  display: inline-block;\\n  font-weight: 400;\\n  text-align: center;\\n  white-space: nowrap;\\n  vertical-align: middle;\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n      -ms-user-select: none;\\n          user-select: none;\\n  border: 1px solid transparent;\\n  padding: 0.375rem 0.75rem;\\n  font-size: 1rem;\\n  line-height: 1.5;\\n  border-radius: 0.25rem;\\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\\n}\\n\\n.btn:focus, .btn:hover {\\n  text-decoration: none;\\n}\\n\\n.btn:focus, .btn.focus {\\n  outline: 0;\\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\\n}\\n\\n.btn.disabled, .btn:disabled {\\n  opacity: .65;\\n}\\n\\n.btn:not([disabled]):not(.disabled):active, .btn:not([disabled]):not(.disabled).active {\\n  background-image: none;\\n}\\n\\na.btn.disabled,\\nfieldset[disabled] a.btn {\\n  pointer-events: none;\\n}\\n\\n.btn-primary {\\n  color: #fff;\\n  background-color: #007bff;\\n  border-color: #007bff;\\n}\\n\\n.btn-primary:hover {\\n  color: #fff;\\n  background-color: #0069d9;\\n  border-color: #0062cc;\\n}\\n\\n.btn-primary:focus, .btn-primary.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\\n}\\n\\n.btn-primary.disabled, .btn-primary:disabled {\\n  background-color: #007bff;\\n  border-color: #007bff;\\n}\\n\\n.btn-primary:not([disabled]):not(.disabled):active, .btn-primary:not([disabled]):not(.disabled).active,\\n.show > .btn-primary.dropdown-toggle {\\n  color: #fff;\\n  background-color: #0062cc;\\n  border-color: #005cbf;\\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\\n}\\n\\n.btn-secondary {\\n  color: #fff;\\n  background-color: #868e96;\\n  border-color: #868e96;\\n}\\n\\n.btn-secondary:hover {\\n  color: #fff;\\n  background-color: #727b84;\\n  border-color: #6c757d;\\n}\\n\\n.btn-secondary:focus, .btn-secondary.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\\n}\\n\\n.btn-secondary.disabled, .btn-secondary:disabled {\\n  background-color: #868e96;\\n  border-color: #868e96;\\n}\\n\\n.btn-secondary:not([disabled]):not(.disabled):active, .btn-secondary:not([disabled]):not(.disabled).active,\\n.show > .btn-secondary.dropdown-toggle {\\n  color: #fff;\\n  background-color: #6c757d;\\n  border-color: #666e76;\\n  box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\\n}\\n\\n.btn-success {\\n  color: #fff;\\n  background-color: #28a745;\\n  border-color: #28a745;\\n}\\n\\n.btn-success:hover {\\n  color: #fff;\\n  background-color: #218838;\\n  border-color: #1e7e34;\\n}\\n\\n.btn-success:focus, .btn-success.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\\n}\\n\\n.btn-success.disabled, .btn-success:disabled {\\n  background-color: #28a745;\\n  border-color: #28a745;\\n}\\n\\n.btn-success:not([disabled]):not(.disabled):active, .btn-success:not([disabled]):not(.disabled).active,\\n.show > .btn-success.dropdown-toggle {\\n  color: #fff;\\n  background-color: #1e7e34;\\n  border-color: #1c7430;\\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\\n}\\n\\n.btn-info {\\n  color: #fff;\\n  background-color: #17a2b8;\\n  border-color: #17a2b8;\\n}\\n\\n.btn-info:hover {\\n  color: #fff;\\n  background-color: #138496;\\n  border-color: #117a8b;\\n}\\n\\n.btn-info:focus, .btn-info.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\\n}\\n\\n.btn-info.disabled, .btn-info:disabled {\\n  background-color: #17a2b8;\\n  border-color: #17a2b8;\\n}\\n\\n.btn-info:not([disabled]):not(.disabled):active, .btn-info:not([disabled]):not(.disabled).active,\\n.show > .btn-info.dropdown-toggle {\\n  color: #fff;\\n  background-color: #117a8b;\\n  border-color: #10707f;\\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\\n}\\n\\n.btn-warning {\\n  color: #111;\\n  background-color: #ffc107;\\n  border-color: #ffc107;\\n}\\n\\n.btn-warning:hover {\\n  color: #111;\\n  background-color: #e0a800;\\n  border-color: #d39e00;\\n}\\n\\n.btn-warning:focus, .btn-warning.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\\n}\\n\\n.btn-warning.disabled, .btn-warning:disabled {\\n  background-color: #ffc107;\\n  border-color: #ffc107;\\n}\\n\\n.btn-warning:not([disabled]):not(.disabled):active, .btn-warning:not([disabled]):not(.disabled).active,\\n.show > .btn-warning.dropdown-toggle {\\n  color: #111;\\n  background-color: #d39e00;\\n  border-color: #c69500;\\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\\n}\\n\\n.btn-danger {\\n  color: #fff;\\n  background-color: #dc3545;\\n  border-color: #dc3545;\\n}\\n\\n.btn-danger:hover {\\n  color: #fff;\\n  background-color: #c82333;\\n  border-color: #bd2130;\\n}\\n\\n.btn-danger:focus, .btn-danger.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\\n}\\n\\n.btn-danger.disabled, .btn-danger:disabled {\\n  background-color: #dc3545;\\n  border-color: #dc3545;\\n}\\n\\n.btn-danger:not([disabled]):not(.disabled):active, .btn-danger:not([disabled]):not(.disabled).active,\\n.show > .btn-danger.dropdown-toggle {\\n  color: #fff;\\n  background-color: #bd2130;\\n  border-color: #b21f2d;\\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\\n}\\n\\n.btn-light {\\n  color: #111;\\n  background-color: #f8f9fa;\\n  border-color: #f8f9fa;\\n}\\n\\n.btn-light:hover {\\n  color: #111;\\n  background-color: #e2e6ea;\\n  border-color: #dae0e5;\\n}\\n\\n.btn-light:focus, .btn-light.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\\n}\\n\\n.btn-light.disabled, .btn-light:disabled {\\n  background-color: #f8f9fa;\\n  border-color: #f8f9fa;\\n}\\n\\n.btn-light:not([disabled]):not(.disabled):active, .btn-light:not([disabled]):not(.disabled).active,\\n.show > .btn-light.dropdown-toggle {\\n  color: #111;\\n  background-color: #dae0e5;\\n  border-color: #d3d9df;\\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\\n}\\n\\n.btn-dark {\\n  color: #fff;\\n  background-color: #343a40;\\n  border-color: #343a40;\\n}\\n\\n.btn-dark:hover {\\n  color: #fff;\\n  background-color: #23272b;\\n  border-color: #1d2124;\\n}\\n\\n.btn-dark:focus, .btn-dark.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\\n}\\n\\n.btn-dark.disabled, .btn-dark:disabled {\\n  background-color: #343a40;\\n  border-color: #343a40;\\n}\\n\\n.btn-dark:not([disabled]):not(.disabled):active, .btn-dark:not([disabled]):not(.disabled).active,\\n.show > .btn-dark.dropdown-toggle {\\n  color: #fff;\\n  background-color: #1d2124;\\n  border-color: #171a1d;\\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\\n}\\n\\n.btn-outline-primary {\\n  color: #007bff;\\n  background-color: transparent;\\n  background-image: none;\\n  border-color: #007bff;\\n}\\n\\n.btn-outline-primary:hover {\\n  color: #fff;\\n  background-color: #007bff;\\n  border-color: #007bff;\\n}\\n\\n.btn-outline-primary:focus, .btn-outline-primary.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\\n}\\n\\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\\n  color: #007bff;\\n  background-color: transparent;\\n}\\n\\n.btn-outline-primary:not([disabled]):not(.disabled):active, .btn-outline-primary:not([disabled]):not(.disabled).active,\\n.show > .btn-outline-primary.dropdown-toggle {\\n  color: #fff;\\n  background-color: #007bff;\\n  border-color: #007bff;\\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\\n}\\n\\n.btn-outline-secondary {\\n  color: #868e96;\\n  background-color: transparent;\\n  background-image: none;\\n  border-color: #868e96;\\n}\\n\\n.btn-outline-secondary:hover {\\n  color: #fff;\\n  background-color: #868e96;\\n  border-color: #868e96;\\n}\\n\\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\\n}\\n\\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\\n  color: #868e96;\\n  background-color: transparent;\\n}\\n\\n.btn-outline-secondary:not([disabled]):not(.disabled):active, .btn-outline-secondary:not([disabled]):not(.disabled).active,\\n.show > .btn-outline-secondary.dropdown-toggle {\\n  color: #fff;\\n  background-color: #868e96;\\n  border-color: #868e96;\\n  box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\\n}\\n\\n.btn-outline-success {\\n  color: #28a745;\\n  background-color: transparent;\\n  background-image: none;\\n  border-color: #28a745;\\n}\\n\\n.btn-outline-success:hover {\\n  color: #fff;\\n  background-color: #28a745;\\n  border-color: #28a745;\\n}\\n\\n.btn-outline-success:focus, .btn-outline-success.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\\n}\\n\\n.btn-outline-success.disabled, .btn-outline-success:disabled {\\n  color: #28a745;\\n  background-color: transparent;\\n}\\n\\n.btn-outline-success:not([disabled]):not(.disabled):active, .btn-outline-success:not([disabled]):not(.disabled).active,\\n.show > .btn-outline-success.dropdown-toggle {\\n  color: #fff;\\n  background-color: #28a745;\\n  border-color: #28a745;\\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\\n}\\n\\n.btn-outline-info {\\n  color: #17a2b8;\\n  background-color: transparent;\\n  background-image: none;\\n  border-color: #17a2b8;\\n}\\n\\n.btn-outline-info:hover {\\n  color: #fff;\\n  background-color: #17a2b8;\\n  border-color: #17a2b8;\\n}\\n\\n.btn-outline-info:focus, .btn-outline-info.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\\n}\\n\\n.btn-outline-info.disabled, .btn-outline-info:disabled {\\n  color: #17a2b8;\\n  background-color: transparent;\\n}\\n\\n.btn-outline-info:not([disabled]):not(.disabled):active, .btn-outline-info:not([disabled]):not(.disabled).active,\\n.show > .btn-outline-info.dropdown-toggle {\\n  color: #fff;\\n  background-color: #17a2b8;\\n  border-color: #17a2b8;\\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\\n}\\n\\n.btn-outline-warning {\\n  color: #ffc107;\\n  background-color: transparent;\\n  background-image: none;\\n  border-color: #ffc107;\\n}\\n\\n.btn-outline-warning:hover {\\n  color: #fff;\\n  background-color: #ffc107;\\n  border-color: #ffc107;\\n}\\n\\n.btn-outline-warning:focus, .btn-outline-warning.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\\n}\\n\\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\\n  color: #ffc107;\\n  background-color: transparent;\\n}\\n\\n.btn-outline-warning:not([disabled]):not(.disabled):active, .btn-outline-warning:not([disabled]):not(.disabled).active,\\n.show > .btn-outline-warning.dropdown-toggle {\\n  color: #fff;\\n  background-color: #ffc107;\\n  border-color: #ffc107;\\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\\n}\\n\\n.btn-outline-danger {\\n  color: #dc3545;\\n  background-color: transparent;\\n  background-image: none;\\n  border-color: #dc3545;\\n}\\n\\n.btn-outline-danger:hover {\\n  color: #fff;\\n  background-color: #dc3545;\\n  border-color: #dc3545;\\n}\\n\\n.btn-outline-danger:focus, .btn-outline-danger.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\\n}\\n\\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\\n  color: #dc3545;\\n  background-color: transparent;\\n}\\n\\n.btn-outline-danger:not([disabled]):not(.disabled):active, .btn-outline-danger:not([disabled]):not(.disabled).active,\\n.show > .btn-outline-danger.dropdown-toggle {\\n  color: #fff;\\n  background-color: #dc3545;\\n  border-color: #dc3545;\\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\\n}\\n\\n.btn-outline-light {\\n  color: #f8f9fa;\\n  background-color: transparent;\\n  background-image: none;\\n  border-color: #f8f9fa;\\n}\\n\\n.btn-outline-light:hover {\\n  color: #212529;\\n  background-color: #f8f9fa;\\n  border-color: #f8f9fa;\\n}\\n\\n.btn-outline-light:focus, .btn-outline-light.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\\n}\\n\\n.btn-outline-light.disabled, .btn-outline-light:disabled {\\n  color: #f8f9fa;\\n  background-color: transparent;\\n}\\n\\n.btn-outline-light:not([disabled]):not(.disabled):active, .btn-outline-light:not([disabled]):not(.disabled).active,\\n.show > .btn-outline-light.dropdown-toggle {\\n  color: #212529;\\n  background-color: #f8f9fa;\\n  border-color: #f8f9fa;\\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\\n}\\n\\n.btn-outline-dark {\\n  color: #343a40;\\n  background-color: transparent;\\n  background-image: none;\\n  border-color: #343a40;\\n}\\n\\n.btn-outline-dark:hover {\\n  color: #fff;\\n  background-color: #343a40;\\n  border-color: #343a40;\\n}\\n\\n.btn-outline-dark:focus, .btn-outline-dark.focus {\\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\\n}\\n\\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\\n  color: #343a40;\\n  background-color: transparent;\\n}\\n\\n.btn-outline-dark:not([disabled]):not(.disabled):active, .btn-outline-dark:not([disabled]):not(.disabled).active,\\n.show > .btn-outline-dark.dropdown-toggle {\\n  color: #fff;\\n  background-color: #343a40;\\n  border-color: #343a40;\\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\\n}\\n\\n.btn-link {\\n  font-weight: 400;\\n  color: #007bff;\\n  background-color: transparent;\\n}\\n\\n.btn-link:hover {\\n  color: #0056b3;\\n  text-decoration: underline;\\n  background-color: transparent;\\n  border-color: transparent;\\n}\\n\\n.btn-link:focus, .btn-link.focus {\\n  border-color: transparent;\\n  box-shadow: none;\\n}\\n\\n.btn-link:disabled, .btn-link.disabled {\\n  color: #868e96;\\n}\\n\\n.btn-lg, .btn-group-lg > .btn {\\n  padding: 0.5rem 1rem;\\n  font-size: 1.25rem;\\n  line-height: 1.5;\\n  border-radius: 0.3rem;\\n}\\n\\n.btn-sm, .btn-group-sm > .btn {\\n  padding: 0.25rem 0.5rem;\\n  font-size: 0.875rem;\\n  line-height: 1.5;\\n  border-radius: 0.2rem;\\n}\\n\\n.btn-block {\\n  display: block;\\n  width: 100%;\\n}\\n\\n.btn-block + .btn-block {\\n  margin-top: 0.5rem;\\n}\\n\\ninput[type=\\\""submit\\\""].btn-block,\\ninput[type=\\\""reset\\\""].btn-block,\\ninput[type=\\\""button\\\""].btn-block {\\n  width: 100%;\\n}\\n\\n.fade {\\n  opacity: 0;\\n  transition: opacity 0.15s linear;\\n}\\n\\n.fade.show {\\n  opacity: 1;\\n}\\n\\n.collapse {\\n  display: none;\\n}\\n\\n.collapse.show {\\n  display: block;\\n}\\n\\ntr.collapse.show {\\n  display: table-row;\\n}\\n\\ntbody.collapse.show {\\n  display: table-row-group;\\n}\\n\\n.collapsing {\\n  position: relative;\\n  height: 0;\\n  overflow: hidden;\\n  transition: height 0.35s ease;\\n}\\n\\n.dropup,\\n.dropdown {\\n  position: relative;\\n}\\n\\n.dropdown-toggle::after {\\n  display: inline-block;\\n  width: 0;\\n  height: 0;\\n  margin-left: 0.255em;\\n  vertical-align: 0.255em;\\n  content: \\\""\\\"";\\n  border-top: 0.3em solid;\\n  border-right: 0.3em solid transparent;\\n  border-bottom: 0;\\n  border-left: 0.3em solid transparent;\\n}\\n\\n.dropdown-toggle:empty::after {\\n  margin-left: 0;\\n}\\n\\n.dropdown-menu {\\n  position: absolute;\\n  top: 100%;\\n  left: 0;\\n  z-index: 1000;\\n  display: none;\\n  float: left;\\n  min-width: 10rem;\\n  padding: 0.5rem 0;\\n  margin: 0.125rem 0 0;\\n  font-size: 1rem;\\n  color: #212529;\\n  text-align: left;\\n  list-style: none;\\n  background-color: #fff;\\n  background-clip: padding-box;\\n  border: 1px solid rgba(0, 0, 0, 0.15);\\n  border-radius: 0.25rem;\\n}\\n\\n.dropup .dropdown-menu {\\n  margin-top: 0;\\n  margin-bottom: 0.125rem;\\n}\\n\\n.dropup .dropdown-toggle::after {\\n  display: inline-block;\\n  width: 0;\\n  height: 0;\\n  margin-left: 0.255em;\\n  vertical-align: 0.255em;\\n  content: \\\""\\\"";\\n  border-top: 0;\\n  border-right: 0.3em solid transparent;\\n  border-bottom: 0.3em solid;\\n  border-left: 0.3em solid transparent;\\n}\\n\\n.dropup .dropdown-toggle:empty::after {\\n  margin-left: 0;\\n}\\n\\n.dropdown-divider {\\n  height: 0;\\n  margin: 0.5rem 0;\\n  overflow: hidden;\\n  border-top: 1px solid #e9ecef;\\n}\\n\\n.dropdown-item {\\n  display: block;\\n  width: 100%;\\n  padding: 0.25rem 1.5rem;\\n  clear: both;\\n  font-weight: 400;\\n  color: #212529;\\n  text-align: inherit;\\n  white-space: nowrap;\\n  background: none;\\n  border: 0;\\n}\\n\\n.dropdown-item:focus, .dropdown-item:hover {\\n  color: #16181b;\\n  text-decoration: none;\\n  background-color: #f8f9fa;\\n}\\n\\n.dropdown-item.active, .dropdown-item:active {\\n  color: #fff;\\n  text-decoration: none;\\n  background-color: #007bff;\\n}\\n\\n.dropdown-item.disabled, .dropdown-item:disabled {\\n  color: #868e96;\\n  background-color: transparent;\\n}\\n\\n.dropdown-menu.show {\\n  display: block;\\n}\\n\\n.dropdown-header {\\n  display: block;\\n  padding: 0.5rem 1.5rem;\\n  margin-bottom: 0;\\n  font-size: 0.875rem;\\n  color: #868e96;\\n  white-space: nowrap;\\n}\\n\\n.btn-group,\\n.btn-group-vertical {\\n  position: relative;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  vertical-align: middle;\\n}\\n\\n.btn-group > .btn,\\n.btn-group-vertical > .btn {\\n  position: relative;\\n  -ms-flex: 0 1 auto;\\n      flex: 0 1 auto;\\n}\\n\\n.btn-group > .btn:hover,\\n.btn-group-vertical > .btn:hover {\\n  z-index: 2;\\n}\\n\\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\\n.btn-group-vertical > .btn:focus,\\n.btn-group-vertical > .btn:active,\\n.btn-group-vertical > .btn.active {\\n  z-index: 2;\\n}\\n\\n.btn-group .btn + .btn,\\n.btn-group .btn + .btn-group,\\n.btn-group .btn-group + .btn,\\n.btn-group .btn-group + .btn-group,\\n.btn-group-vertical .btn + .btn,\\n.btn-group-vertical .btn + .btn-group,\\n.btn-group-vertical .btn-group + .btn,\\n.btn-group-vertical .btn-group + .btn-group {\\n  margin-left: -1px;\\n}\\n\\n.btn-toolbar {\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -ms-flex-pack: start;\\n      justify-content: flex-start;\\n}\\n\\n.btn-toolbar .input-group {\\n  width: auto;\\n}\\n\\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\\n  border-radius: 0;\\n}\\n\\n.btn-group > .btn:first-child {\\n  margin-left: 0;\\n}\\n\\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\\n  border-top-right-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n.btn-group > .btn:last-child:not(:first-child),\\n.btn-group > .dropdown-toggle:not(:first-child) {\\n  border-top-left-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n.btn-group > .btn-group {\\n  float: left;\\n}\\n\\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\\n  border-radius: 0;\\n}\\n\\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\\n  border-top-right-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\\n  border-top-left-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n.btn + .dropdown-toggle-split {\\n  padding-right: 0.5625rem;\\n  padding-left: 0.5625rem;\\n}\\n\\n.btn + .dropdown-toggle-split::after {\\n  margin-left: 0;\\n}\\n\\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\\n  padding-right: 0.375rem;\\n  padding-left: 0.375rem;\\n}\\n\\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\\n  padding-right: 0.75rem;\\n  padding-left: 0.75rem;\\n}\\n\\n.btn-group-vertical {\\n  -ms-flex-direction: column;\\n      flex-direction: column;\\n  -ms-flex-align: start;\\n      align-items: flex-start;\\n  -ms-flex-pack: center;\\n      justify-content: center;\\n}\\n\\n.btn-group-vertical .btn,\\n.btn-group-vertical .btn-group {\\n  width: 100%;\\n}\\n\\n.btn-group-vertical > .btn + .btn,\\n.btn-group-vertical > .btn + .btn-group,\\n.btn-group-vertical > .btn-group + .btn,\\n.btn-group-vertical > .btn-group + .btn-group {\\n  margin-top: -1px;\\n  margin-left: 0;\\n}\\n\\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\\n  border-radius: 0;\\n}\\n\\n.btn-group-vertical > .btn:first-child:not(:last-child) {\\n  border-bottom-right-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n.btn-group-vertical > .btn:last-child:not(:first-child) {\\n  border-top-left-radius: 0;\\n  border-top-right-radius: 0;\\n}\\n\\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\\n  border-radius: 0;\\n}\\n\\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\\n  border-bottom-right-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\\n  border-top-left-radius: 0;\\n  border-top-right-radius: 0;\\n}\\n\\n[data-toggle=\\\""buttons\\\""] > .btn input[type=\\\""radio\\\""],\\n[data-toggle=\\\""buttons\\\""] > .btn input[type=\\\""checkbox\\\""],\\n[data-toggle=\\\""buttons\\\""] > .btn-group > .btn input[type=\\\""radio\\\""],\\n[data-toggle=\\\""buttons\\\""] > .btn-group > .btn input[type=\\\""checkbox\\\""] {\\n  position: absolute;\\n  clip: rect(0, 0, 0, 0);\\n  pointer-events: none;\\n}\\n\\n.input-group {\\n  position: relative;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-align: stretch;\\n      align-items: stretch;\\n  width: 100%;\\n}\\n\\n.input-group .form-control {\\n  position: relative;\\n  z-index: 2;\\n  -ms-flex: 1 1 auto;\\n      flex: 1 1 auto;\\n  width: 1%;\\n  margin-bottom: 0;\\n}\\n\\n.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover {\\n  z-index: 3;\\n}\\n\\n.input-group-addon,\\n.input-group-btn,\\n.input-group .form-control {\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-align: center;\\n      align-items: center;\\n}\\n\\n.input-group-addon:not(:first-child):not(:last-child),\\n.input-group-btn:not(:first-child):not(:last-child),\\n.input-group .form-control:not(:first-child):not(:last-child) {\\n  border-radius: 0;\\n}\\n\\n.input-group-addon,\\n.input-group-btn {\\n  white-space: nowrap;\\n}\\n\\n.input-group-addon {\\n  padding: 0.375rem 0.75rem;\\n  margin-bottom: 0;\\n  font-size: 1rem;\\n  font-weight: 400;\\n  line-height: 1.5;\\n  color: #495057;\\n  text-align: center;\\n  background-color: #e9ecef;\\n  border: 1px solid #ced4da;\\n  border-radius: 0.25rem;\\n}\\n\\n.input-group-addon.form-control-sm,\\n.input-group-sm > .input-group-addon,\\n.input-group-sm > .input-group-btn > .input-group-addon.btn {\\n  padding: 0.25rem 0.5rem;\\n  font-size: 0.875rem;\\n  border-radius: 0.2rem;\\n}\\n\\n.input-group-addon.form-control-lg,\\n.input-group-lg > .input-group-addon,\\n.input-group-lg > .input-group-btn > .input-group-addon.btn {\\n  padding: 0.5rem 1rem;\\n  font-size: 1.25rem;\\n  border-radius: 0.3rem;\\n}\\n\\n.input-group-addon input[type=\\\""radio\\\""],\\n.input-group-addon input[type=\\\""checkbox\\\""] {\\n  margin-top: 0;\\n}\\n\\n.input-group .form-control:not(:last-child),\\n.input-group-addon:not(:last-child),\\n.input-group-btn:not(:last-child) > .btn,\\n.input-group-btn:not(:last-child) > .btn-group > .btn,\\n.input-group-btn:not(:last-child) > .dropdown-toggle,\\n.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle),\\n.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn {\\n  border-top-right-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n.input-group-addon:not(:last-child) {\\n  border-right: 0;\\n}\\n\\n.input-group .form-control:not(:first-child),\\n.input-group-addon:not(:first-child),\\n.input-group-btn:not(:first-child) > .btn,\\n.input-group-btn:not(:first-child) > .btn-group > .btn,\\n.input-group-btn:not(:first-child) > .dropdown-toggle,\\n.input-group-btn:not(:last-child) > .btn:not(:first-child),\\n.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn {\\n  border-top-left-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n.form-control + .input-group-addon:not(:first-child) {\\n  border-left: 0;\\n}\\n\\n.input-group-btn {\\n  position: relative;\\n  -ms-flex-align: stretch;\\n      align-items: stretch;\\n  font-size: 0;\\n  white-space: nowrap;\\n}\\n\\n.input-group-btn > .btn {\\n  position: relative;\\n}\\n\\n.input-group-btn > .btn + .btn {\\n  margin-left: -1px;\\n}\\n\\n.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover {\\n  z-index: 3;\\n}\\n\\n.input-group-btn:first-child > .btn + .btn {\\n  margin-left: 0;\\n}\\n\\n.input-group-btn:not(:last-child) > .btn,\\n.input-group-btn:not(:last-child) > .btn-group {\\n  margin-right: -1px;\\n}\\n\\n.input-group-btn:not(:first-child) > .btn,\\n.input-group-btn:not(:first-child) > .btn-group {\\n  z-index: 2;\\n  margin-left: 0;\\n}\\n\\n.input-group-btn:not(:first-child) > .btn:first-child,\\n.input-group-btn:not(:first-child) > .btn-group:first-child {\\n  margin-left: -1px;\\n}\\n\\n.input-group-btn:not(:first-child) > .btn:focus, .in